diff --git a/dist_plainjs/terminology-service-suite.js b/dist_plainjs/terminology-service-suite.js index 65fb4f6d..bf18f6e7 100644 --- a/dist_plainjs/terminology-service-suite.js +++ b/dist_plainjs/terminology-service-suite.js @@ -142418,6 +142418,7 @@ Add a component higher in the tree to provide a loading width; color; font; + dashes; constructor({ edge }) { if (edge["source"] && edge["target"] && edge["uri"]) { this.id = edge["source"] + edge["target"] + "&uri=" + edge["uri"]; @@ -142445,7 +142446,7 @@ Add a component higher in the tree to provide a loading } let parentNode = listOfJsTreeNodes.find((obj) => obj.id === treeNode.parent); if (parentNode) { - let edge = { "source": treeNode.iri, "target": parentNode.iri, "label": "is a", "uri": "http://www.w3.org/2000/01/rdf-schema#subClassOf" }; + let edge = { "source": treeNode.iri, "target": parentNode.iri, "label": "subClassOf", "uri": "http://www.w3.org/2000/01/rdf-schema#subClassOf" }; if (!data2.edges.find((obj) => obj.source === edge.source && obj.target === edge.target)) { data2.edges.push(edge); } @@ -142470,6 +142471,8 @@ Add a component higher in the tree to provide a loading } for (let edge of gData["edges"]) { let gEdge = new GraphEdge({ edge }); + let dashed = edge.uri === "http://www.w3.org/2000/01/rdf-schema#subClassOf" || rootWalkIsSelected ? false : true; + gEdge.dashes = dashed; if (!edges.current.get(gEdge.id)) { if (gEdge.id?.includes(iri) && rootWalkIsSelected) { gEdge.color.color = "black"; @@ -142921,4 +142924,4 @@ tabbable/dist/index.esm.js: *) *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci90cmFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQm9vbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL251bWVyYWwvbnVtZXJhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVSZWdFeHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0ZsYXR0ZW5hYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZsYXRSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVxdWlyZXMtcG9ydC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmdpZnkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VybC1wYXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaW5wdXQtYXV0b3NpemUvbGliL0F1dG9zaXplSW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wYXRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wdXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2h0bWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5mb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC1hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wucmVwbGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc3BlY2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGxpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC51bnNjb3BhYmxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb20taXRlcmFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL3RvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZnVuY3Rpb24vdmlydHVhbC9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZsYXR0ZW4taW50by1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZsYXQtbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtcGlwZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvaW5zdGFuY2UvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheVdpdGhvdXRIb2xlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0Lm93bi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3Qvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3JlZmxlY3Qvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3JlZmxlY3Qvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3Qva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2Fzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2Fzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2Fzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvanNvbi9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtYnVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtaW50ZXJ2YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LXRpbWVvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3NldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvbXBvbmVudC1lbWl0dGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGVnanMvaGFtbWVyanMvZGlzdC9oYW1tZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdmlzLXV0aWwvZXNuZXh0L2VzbS92aXMtdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3QvY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9yZWZsZWN0L2NvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvcmVmbGVjdC9jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3IuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1pbnN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MtcGViYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9taWNyb3Rhc2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3Nlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmVqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJlc29sdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC1zZXR0bGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLndpdGgtcmVzb2x2ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnByb21pc2UudHJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvcmVnZW5lcmF0b3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZyZWV6aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbWFwL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9tYXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9lbnRyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcm5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9uYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLWludGVyZmFjZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL3F1ZXVlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zZXQtcGFydC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zZXQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3NldC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc3RyZWFtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXZpZXcudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC1jaGVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtdmlldy1jaGVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mYWlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2N1bWVudC1hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdWlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1hc3NpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9hc3NpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW50cnktdmlydHVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9mdW5jdGlvbi92aXJ0dWFsL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvc2hhcGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29tcG9uZW50LWVtaXR0ZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2h0bWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb20taXRlcmFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5mb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuZGF0ZS5ub3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZGF0ZS9ub3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9pbmNsdWRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ub3QtYS1yZWdleHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N0cmluZy92aXJ0dWFsL2luY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2luY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9pbmNsdWRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnBhcnNlLWludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9wYXJzZS1pbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmRleC1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luZGV4LW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2luZGV4LW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9pbmRleC1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvanNvbi9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1idW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC1pbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BlZ2pzL2hhbW1lcmpzL2Rpc3QvaGFtbWVyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9maWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvdmlzLXV0aWwvZXNuZXh0L2VzbS92aXMtdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvZG90cGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9nZXBoaVBhcnNlci50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbG9jYWxlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvQ2FjaGVkSW1hZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL0ltYWdlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnJlZXppbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1pbnN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMubWFwLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL21hcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9Hcm91cHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5udW1iZXIuaXMtbmFuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL251bWJlci9pcy1uYW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL251bWJlci1pcy1maW5pdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5udW1iZXIuaXMtZmluaXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL251bWJlci9pcy1maW5pdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9udW1iZXItcGFyc2UtZmxvYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wYXJzZS1mbG9hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9wYXJzZS1mbG9hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3NoYXJlZC9Db21wb25lbnRVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9zaGFyZWQvTGFiZWxBY2N1bXVsYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3NoYXJlZC9MYWJlbFNwbGl0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvc2hhcmVkL0xhYmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3V0aWwvTm9kZUJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvQm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvdXRpbC9DaXJjbGVJbWFnZUJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvQ2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0NpcmN1bGFySW1hZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy91dGlsL1NoYXBlQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9DdXN0b21TaGFwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9EYXRhYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9EaWFtb25kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0RvdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9FbGxpcHNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0ljb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvSW1hZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvU3F1YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0hleGFnb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvU3Rhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9UZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL1RyaWFuZ2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL1RyaWFuZ2xlRG93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL05vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvTm9kZXNIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1kYXRhLWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0LmdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9yZWZsZWN0L2dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zdXBlclByb3BCYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMubWF0aC5oeXBvdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9tYXRoL2h5cG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvZWRnZXMvdXRpbC9lbmQtcG9pbnRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvZWRnZXMvdXRpbC9lZGdlLWJhc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2Jlemllci1lZGdlLWJhc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy9iZXppZXItZWRnZS1keW5hbWljLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvZWRnZXMvYmV6aWVyLWVkZ2Utc3RhdGljLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvZWRnZXMvdXRpbC9jdWJpYy1iZXppZXItZWRnZS1iYXNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvZWRnZXMvY3ViaWMtYmV6aWVyLWVkZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy9zdHJhaWdodC1lZGdlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvRWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9FZGdlc0hhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL0Jhcm5lc0h1dFNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvUmVwdWxzaW9uU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9IaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL1NwcmluZ1NvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9DZW50cmFsR3Jhdml0eVNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvRkEyQmFzZWRSZXB1bHNpb25Tb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL0ZBMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvUGh5c2ljc0VuZ2luZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9ybmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL25hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92NC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvTmV0d29ya1V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9DbHVzdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0NsdXN0ZXJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvQ2FudmFzUmVuZGVyZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3NldC1pbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL2hhbW1lclV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvQ2FudmFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL1ZpZXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvdmlldy1oYW5kbGVyL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMva2V5Y2hhcm0vc3JjL2tleWNoYXJtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvTmF2aWdhdGlvbkhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvSW50ZXJhY3Rpb25IYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3NldC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi13ZWFrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMud2Vhay1tYXAuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvd2Vhay1tYXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvc2VsZWN0aW9uL3NlbGVjdGlvbi1hY2N1bXVsYXRvci50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9TZWxlY3Rpb25IYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS13ZWJraXQtdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9EaXJlY3Rpb25TdHJhdGVneS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmV2ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZXZlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZXZlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2V2ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2xheW91dC1lbmdpbmUvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvTGF5b3V0RW5naW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL01hbmlwdWxhdGlvblN5c3RlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvb3B0aW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2FsZ29yaXRobXMvRmxveWRXYXJzaGFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9LYW1hZGFLYXdhaS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvTmV0d29yay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbG9jYWxlLXV0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvZW50cnktZXNuZXh0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mYWlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2N1bWVudC1hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdWlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2h0bWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5mb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC1hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wucmVwbGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc3BlY2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGxpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC51bnNjb3BhYmxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb20taXRlcmFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZnVuY3Rpb24vdmlydHVhbC9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZsYXR0ZW4taW50by1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXBpcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0Lm93bi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3Qvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2Fzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvanNvbi9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1idW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC1pbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb21wb25lbnQtZW1pdHRlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BlZ2pzL2hhbW1lcmpzL2Rpc3QvaGFtbWVyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3Zpcy11dGlsL2VzbmV4dC9lc20vdmlzLXV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0LmNvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9yZWZsZWN0L2NvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy90eXBlb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Rhc2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9xdWV1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbWljcm90YXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3Nlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFueS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnByb21pc2Uud2l0aC1yZXNvbHZlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQucHJvbWlzZS50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mcmVlemluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvbGxlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMubWFwLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL21hcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9lbnRyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JuZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvbmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3Y0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1pbnRlcmZhY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9xdWV1ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc2V0LXBhcnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc2V0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc3RyZWFtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXZpZXcudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC1jaGVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtdmlldy1jaGVjay50cyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0F1dG9jb21wbGV0ZVdpZGdldC9BdXRvY29tcGxldGVXaWRnZXQudHN4IiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL251bGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9Gb3JtRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9CbG9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2NvbW1vbi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zSGVhZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90aHJvdHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2J1aWxkRnVsbFBhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21wb3NlU2lnbmFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdHJhY2tTdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9mZXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwgIi4uL3NyYy9tb2RlbC9Nb2RlbFR5cGVDaGVjay50cyIsICIuLi9zcmMvYXBwL3V0aWwudHMiLCAiLi4vc3JjL21vZGVsL1JlaWZpZWQudHMiLCAiLi4vc3JjL21vZGVsL0xpbmtlZEVudGl0aWVzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNUaGluZy50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzRW50aXR5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNDbGFzcy50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzUHJvcGVydHkudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM0luZGl2aWR1YWwudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM09udG9sb2d5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNPbnRvbG9naWVzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRUaGluZy50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0RW50aXR5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRDbGFzcy50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0UHJvcGVydHkudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNEluZGl2aWR1YWwudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNE9udG9sb2d5LnRzIiwgIi4uL3NyYy9tb2RlbC9Nb2RlbE9iamVjdENyZWF0b3IudHMiLCAiLi4vc3JjL21vZGVsL2ludGVyZmFjZXMvSGllcmFyY2h5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMtbW9kZWwvT0xTU2VsZWN0LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMtbW9kZWwvT0xTU2VsZWN0UmVzdWx0LnRzIiwgIi4uL3NyYy9tb2RlbC90czRuZmRpLW1vZGVsL1RzNG5mZGlTZWFyY2hSZXN1bHQudHMiLCAiLi4vc3JjL2FwaS9PbHNBcGkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9saXZlL3NjcmVlbl9yZWFkZXJfbGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYWNjZXNzaWJpbGl0eS9zY3JlZW5fcmVhZGVyX29ubHkvc2NyZWVuX3JlYWRlcl9vbmx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tZWxlbWVudC01NDg2YzUxYy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc2hlZXQvZGlzdC9lbW90aW9uLXNoZWV0LmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9FbnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1V0aWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL01pZGRsZXdhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9lbW90aW9uLW1lbW9pemUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2Vtb3Rpb24tY2FjaGUuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvZW1vdGlvbi11dGlscy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MvZGlzdC9lbW90aW9uLXVzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS9jbG9uZV9lbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfb25seS9zY3JlZW5fcmVhZGVyX29ubHkuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90YWJiYWJsZS9zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9jYXNjYWRpbmdfbWVudV9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcm5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcmVnZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92YWxpZGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3YxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9odG1sX2lkX2dlbmVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2FsaWdubWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tbW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JyZWFrcG9pbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L2JyZWFrcG9pbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L2N1cnJlbnRfYnJlYWtwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvaXNfY29sb3JfZGFyay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2lzX3ZhbGlkX2hleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9saW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9jbGlwX3JnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL3VucGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9sYXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2lucHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL0NvbG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3ZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvY2hyb21hLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2NteWsvY215azJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY215ay9yZ2IyY215ay5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9jbXlrL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2Nzcy9oc2wyY3NzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzbC9yZ2IyaHNsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2Nzcy9yZ2IyY3NzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzbC9oc2wycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2Nzcy9jc3MycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2Nzcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9nbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oY2cvaGNnMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oY2cvcmdiMmhjZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oY2cvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaGV4L2hleDJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaGV4L3JnYjJoZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaGV4L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzaS9oc2kycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzaS9yZ2IyaHNpLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzaS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHN2L2hzdjJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHN2L3JnYjJoc3YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHN2L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xhYi9sYWItY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xhYi9sYWIycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xhYi9yZ2IybGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xhYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvbGNoMmxhYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvbGNoMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvaGNsMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvbGFiMmxjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvcmdiMmxjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvY29sb3JzL3czY3gxMS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9uYW1lZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9udW0vbnVtMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9udW0vcmdiMm51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9udW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vcmdiL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL3RlbXAvdGVtcGVyYXR1cmUycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL3RlbXAvcmdiMnRlbXBlcmF0dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL3RlbXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsYWIvb2tsYWIycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGFiL3JnYjJva2xhYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xhYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xjaC9va2xjaDJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsY2gvcmdiMm9rbGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9hbHBoYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvY2xpcHBlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvZGFya2VuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9nZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2x1bWluYW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL21peC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvbWl4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9wcmVtdWx0aXBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvc2F0dXJhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL3NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvc2hhZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL3JnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvbHJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvbGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9faHN4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9sY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL251bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvaGNnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9oc2kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2hzbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvaHN2LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9va2xhYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3Ivb2tsY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL2F2ZXJhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL3NjYWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2dlbmVyYXRvci9iZXppZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL2JsZW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2dlbmVyYXRvci9jdWJlaGVsaXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL3JhbmRvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9hbmFseXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2NvbnRyYXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2RlbHRhLWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvZGlzdGFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvdmFsaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvc2NhbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2NvbG9ycy9jb2xvcmJyZXdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvY29sb3JfcGFsZXR0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2V1aV9wYWxldHRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL21hbmlwdWxhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2NvbnRyYXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2NvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19hbmltYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvbG9naWNhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvc2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucy90eXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3NpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYm9yZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19sZXZlbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zdGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL3RoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS9wcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3Rocm90dGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJlYWtwb2ludC9jdXJyZW50X2JyZWFrcG9pbnRfaG9vay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvdXNlSXNXaXRoaW5CcmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2ZpbmRFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2NvbW1vbl9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2xvZGFzaF9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9ib29sZWFuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9kYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9udW1iZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X2F1dG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy91cmwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9nZXRfc2VjdXJlX3JlbF9mb3JfdGFyZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvc29ydC9zb3J0X2RpcmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL29iamVjdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zb3J0L2NvbXBhcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcG9wb3Zlci9wb3BvdmVyX3Bvc2l0aW9uaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvaG9va3MvdXNlQ29tYmluZWRSZWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vX2J1dHRvbl9jb250ZW50X2RlcHJlY2F0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FjY2Vzc2liaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FnZ3JlZ2F0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYWxlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FuYWx5emVFdmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5hbHl6ZV9ldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5ub3RhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBtX3RyYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYWRkX2RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYXBtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2F1ZGl0YmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2NhbnZhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Nhc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfY29kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2NvbnNvbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZGFzaGJvYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZGV2dG9vbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9kaXNjb3Zlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Vtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2ZpbGViZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZmxlZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9naXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9ncmFwaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2dyb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9oZWFydGJlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2luZGV4X3JvbGx1cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2xlbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9sb2dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbWFuYWdlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21ldHJpY2JlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tZXRyaWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tb25pdG9yaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbm90ZWJvb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9wYWNrZXRiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9yZXBvcnRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2VjdXJpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zcGFjZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zcWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF90aW1lbGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdXB0aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF92aXN1YWxpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF93YXRjaGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfd29ya3BsYWNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXJyb3dFbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93U3RhcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93X2Rvd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93X2xlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93X3JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd191cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXN0ZXJpc2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JlYWtlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYmVsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYmVsbFNsYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ib2x0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ib3hlc192ZXJ0aWNhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnJhbmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icmFuY2hVc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icm9vbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnJ1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2J1Zy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnVsbHNleWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NhbGVuZGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jaGVjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2hlY2tJbkNpcmNsZUZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2hlZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nsb2NrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZERyaXp6bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nsb3VkU3Rvcm15LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZFN1bm55LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbHVzdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29tcHV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29uc29sZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udGFpbmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QWJvdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZUJlbG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5X2NsaXBib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzSW5BQ2lyY2xlRmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jcm9zc2hhaXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jdXJyZW5jeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kYXRhYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZGVza3RvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG9jdW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50RWRpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG9jdW1lbnRhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG9jdW1lbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvdWJsZUFycm93TGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG93bmxvYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkJvdHRvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQ2VudGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25NaWRkbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tTGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcFJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYWxpZ25fY2VudGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2FsaWduX3JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYm9sZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2NvZGVfYmxvY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9jb21tZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2l0YWxpYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9yZWRvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3Jfc3RyaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl91bmRlcmxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl91bmRvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VtYWlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lbXB0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lcmFzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V4aXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V4cGFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhwYW5kTWluaS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V5ZV9jbG9zZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZhY2VfaGFwcHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZhY2VfbmV1dHJhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmFjZV9zYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmxhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZGVyX2NoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkZXJfZXhjbGFtYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9vcGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mcmFtZU5leHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZyYW1lUHJldmlvdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Z1bGxTY3JlZW5FeGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dsb2JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ncmFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ncmFiX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2hlYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWF0bWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWxwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ob21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pSW5DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ltYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbXBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X2Nsb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9lZGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9mbHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfbWFwcGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfb3Blbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfcnVudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfc2V0dGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lucHV0T3V0cHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnNwZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnZlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rZXlib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3FsX2ZpZWxkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF9vcGVyYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF92YWx1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3ViZXJuZXRlc05vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xheWVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGV0dGVyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saW5lRGFzaGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saW5lRG90dGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saW5lU29saWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpc3RfYWRkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2NrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2NrT3Blbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hZXJvc3Bpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYXBhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2FwcF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYXdzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F6dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F6dXJlX21vbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYmVhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NlcGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY2xvdWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY2xvdWRfZWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY291Y2hiYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2RvY2tlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2VsYXN0aWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZWxhc3RpY19zdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2VudGVycHJpc2Vfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2V0Y2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ2NwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2djcF9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2dpdGh1Yi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nbWFpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nb2xhbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ29vZ2xlX2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29faGFwcm94eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19pYm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29faWJtX21vbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fa2Fma2EuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fa2liYW5hLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2t1YmVybmV0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19sb2dzdGFzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tYXBzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tZXRyaWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX21vbmdvZGIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbXlzcWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbmdpbnguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fb2JzZXJ2YWJpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3BocC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19wb3N0Z3Jlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3JhYmJpdG1xLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3JlZGlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3NpdGVfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3NrZXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zbGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb191cHRpbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fd2ViaG9vay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb193aW5kb3dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfaWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX2lucHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9vdXRwdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYWduZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25pZnlXaXRoRXhjbGFtYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25pZnlXaXRoTWludXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25pZnlXaXRoUGx1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFwX21hcmtlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVtb3J5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51RG93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudUxlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnVSaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudVVwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWluaW1pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21pbnVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9taW51c19pbl9jaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NsYXNzaWZpY2F0aW9uX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9kYXRhX3Zpc3VhbGl6ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21vYmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbW9vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbmFtZXNwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9uZXN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL251bWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvb2ZmbGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvb25saW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWNrYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWdlU2VsZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWdlc1NlbGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFpbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhcGVyX2NsaXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhcnRpYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhdXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYXltZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wZW5jaWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BlcmNlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Bpbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGluX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGxheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGxheUZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGx1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BsdXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcG9wb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3F1b3RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZWZyZXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZXBvcnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcmV0dXJuX2tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2F2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2NhbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NoYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zaGFyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc25vd2ZsYWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0TGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydFJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0X2Rvd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRfdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyUGx1c0ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9lbXB0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfZmlsbGVkX3NwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX21pbnVzX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3BfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdG9wX3NsYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdG9yYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N1Ym1vZHVsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3VuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zd2F0Y2hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N5bWxpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFibGVfZGVuc2l0eV9jb21wYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2V4cGFuZGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90ZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGltZVJlZnJlc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RpbWVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lc2xpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFsaWFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFubm90YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQmluYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkJvb2xlYW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Db25zdGFudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5EYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkRlbnNlVmVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRW51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FbnVtTWVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkV2ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GaWVsZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GaWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5HZW8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbklQLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkludGVyZmFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Kb2luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbktleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5LZXl3b3JkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRyaWNDb3VudGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk1ldHJpY0dhdWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5OYW1lc3BhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTmVzdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk51bGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5QYWNrYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblBhcmFtZXRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblJhbmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SZXBvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU2hhcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuVGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuVG9rZW5Db3VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5WYXJpYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdHJhaW5pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy91bmZvbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VubGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlckF2YXRhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3ZlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlkZW9QbGF5ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19hcmVhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19nYXVnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2dvYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19saW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19tYXBfcmVnaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWV0cmljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfcGllLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190YWdfY2xvdWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGltZWxpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc192ZWdhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dvcmRXcmFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93cmVuY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vaWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uX21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3JlYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL25hbWVkX2NvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L2dsb2JhbF9zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX2NvbG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL19oZWxwZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL19wYWRkaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL19zdGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX3R5cG9ncmFwaHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvYW5pbWF0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L3Jlc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2ljb24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pMThuL2kxOG4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbnRleHQvY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaTE4bi9pMThuX3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xvYWRpbmcvX2xvYWRpbmdfc3RyaW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbG9hZGluZy9sb2FkaW5nX3NwaW5uZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZ19zcGlubmVyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9vYnNlcnZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9saW5rL2xpbmsuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90aXRsZS90aXRsZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9jb2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0X2NvbG9yLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0X2FsaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHRfYWxpZ24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2VtcHR5L2J1dHRvbl9lbXB0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9pY29uL2J1dHRvbl9pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbm5lcl90ZXh0L2lubmVyX3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXZpcnR1YWxpemVkLWF1dG8tc2l6ZXIvZGlzdC9yZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYXV0b19zaXplci9hdXRvX3NpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYWRnZS9iYWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29sb3JfcGlja2VyL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYWRnZS9iZXRhX2JhZGdlL2JldGFfYmFkZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Rvb2xfdGlwL3Rvb2xfdGlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3J0YWwvcG9ydGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC90b29sX3RpcF9wb3BvdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC9pY29uX3RpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NoYWRvd3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9zaGFkb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xpbmsvbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9jdXNfdHJhcC9mb2N1c190cmFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvQ29tYmluYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L1VJLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L2Fzc2lnblJlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLWNhbGxiYWNrLXJlZi9kaXN0L2VzMjAxNS91c2VSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1jYWxsYmFjay1yZWYvZGlzdC9lczIwMTUvdXNlTWVyZ2VSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1zaWRlY2FyL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1zaWRlY2FyL2Rpc3QvZXMyMDE1L2V4cG9ydHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L21lZGl1bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9Mb2NrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9Gb2N1c0d1YXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L21lZGl1bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9zY29wZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L1VJLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvVHJhcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1jbGllbnRzaWRlLWVmZmVjdC9saWIvaW5kZXguZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvaXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvdGFiT3JkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvdGFiYmFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYlV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL0RPTXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2FsbC1hZmZlY3RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9zYWZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvZm9jdXNJbnNpZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvZm9jdXNJc0hpZGRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9jb3JyZWN0Rm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvZmlyc3RGb2N1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9zb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvYXV0by1mb2N1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9wYXJlbnRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvZm9jdXNTb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvZm9jdXNhYmxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9jb21tYW5kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9tb3ZlRm9jdXNJbnNpZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvcmV0dXJuLWZvY3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3NpYmxpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvc2lkZWNhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvU2lkZUVmZmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvY29tcG9uZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1zdHlsZS1zaW5nbGV0b24vZGlzdC9lczIwMTUvaG9vay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2V0LW5vbmNlL2Rpc3QvZXMyMDE1L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1zdHlsZS1zaW5nbGV0b24vZGlzdC9lczIwMTUvc2luZ2xldG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1zdHlsZS1zaW5nbGV0b24vZGlzdC9lczIwMTUvY29tcG9uZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsLWJhci9kaXN0L2VzMjAxNS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvYWdncmVzaXZlQ2FwdHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvaGFuZGxlU2Nyb2xsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9zaWRlY2FyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9FZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyaWEtaGlkZGVuL2Rpc3QvZXMyMDE1L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9JbnRlcmFjdGl2aXR5RGlzYWJsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L3NpZGVjYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb2JzZXJ2ZXIvbXV0YXRpb25fb2JzZXJ2ZXIvbXV0YXRpb25fb2JzZXJ2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL291dHNpZGVfY2xpY2tfZGV0ZWN0b3Ivb3V0c2lkZV9jbGlja19kZXRlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX2Fycm93L19wb3BvdmVyX2Fycm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXJfYXJyb3cvX3BvcG92ZXJfYXJyb3cuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXJfcGFuZWwvX3BvcG92ZXJfcGFuZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhbmVsL3BhbmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYW5lbC9wYW5lbC5zdHlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX3BhbmVsL19wb3BvdmVyX3BhbmVsLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NhcmQvY2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY2FyZC9jYXJkX3NlbGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9jaGVja2JveC9jaGVja2JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmxleC9mbGV4X2dyb3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mbGV4L2ZsZXhfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dC9mb3JtX2NvbnRyb2xfbGF5b3V0X2ljb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9jbGVhcl9idXR0b24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dC9mb3JtX2NvbnRyb2xfbGF5b3V0X2N1c3RvbV9pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fbGFiZWwvZm9ybV9sYWJlbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS92YWxpZGF0YWJsZV9jb250cm9sL3ZhbGlkYXRhYmxlX2NvbnRyb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dC9fbnVtX2ljb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2ZpZWxkX3NlYXJjaC9maWVsZF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icm93c2VyL2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9lcnJvcl90ZXh0L2Zvcm1fZXJyb3JfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2hlbHBfdGV4dC9mb3JtX2hlbHBfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX3Jvdy9mb3JtX3Jvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9ob3Jpem9udGFsX3J1bGUvaG9yaXpvbnRhbF9ydWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9ob3Jpem9udGFsX3J1bGUvaG9yaXpvbnRhbF9ydWxlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9zd2l0Y2gvc3dpdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2Rpc3QvbWVtb2l6ZS1vbmUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL3RpbWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2RvbUhlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvY3JlYXRlR3JpZENvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9WYXJpYWJsZVNpemVHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2NyZWF0ZUxpc3RDb21wb25lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvVmFyaWFibGVTaXplTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9GaXhlZFNpemVHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL0ZpeGVkU2l6ZUxpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvc2hhbGxvd0RpZmZlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvYXJlRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvc2hvdWxkQ29tcG9uZW50VXBkYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdmVybGF5X21hc2svb3ZlcmxheV9tYXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zcGFjZXIvc3BhY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zcGFjZXIvc3BhY2VyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9vcHRpb25zX2xpc3QvY29tYm9fYm94X29wdGlvbnNfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGlnaGxpZ2h0L2hpZ2hsaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbWFyay9tYXJrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9tYXJrL21hcmsuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94X29wdGlvbnNfbGlzdC9jb21ib19ib3hfdGl0bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZpbHRlcl9ncm91cC9maWx0ZXJfc2VsZWN0X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9tYXRjaGluZ19vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94X2lucHV0L2NvbWJvX2JveF9pbnB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfcGlsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcGFnaW5hdGlvbi90YWJsZV9wYWdpbmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbl9idXR0b24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbl9idXR0b25fYXJyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJzL3RhYnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFiYmVkX2NvbnRlbnQvdGFiYmVkX2NvbnRlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2RlbGF5X3JlbmRlci9kZWxheV9yZW5kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hlYWx0aC9oZWFsdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hlYWx0aC9oZWFsdGguc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2Vfd3JhcHBlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2Vfd3JhcHBlci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfYnV0dG9uLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfY2FwdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfY2FwdGlvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfZnVsbHNjcmVlbl93cmFwcGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9mdWxsc2NyZWVuX3dyYXBwZXIuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcHJvdmlkZXIvcHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy91dGlsaXR5L3V0aWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Byb3ZpZGVyL2NhY2hlL2NhY2hlX3Byb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90cmVlX3ZpZXcvdHJlZV92aWV3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9zZWFyY2gvc2VsZWN0YWJsZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvbWF0Y2hpbmdfb3B0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX21lc3NhZ2Uvc2VsZWN0YWJsZV9tZXNzYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbGlzdC9zZWxlY3RhYmxlX2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9saXN0L3NlbGVjdGFibGVfbGlzdF9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfYm9keS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfZm9vdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9mb290ZXJfY2VsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2hlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfaGVhZGVyX2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2hlYWRlcl9jZWxsX2NoZWNrYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9tb2JpbGUvdGFibGVfaGVhZGVyX21vYmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX3NvcnRfbW9iaWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9tb2JpbGUvdGFibGVfc29ydF9tb2JpbGVfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9yb3dfY2VsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93X2NlbGxfY2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2Jhc2ljX3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9jb2xsYXBzZWRfaXRlbV9hY3Rpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9leHBhbmRlZF9pdGVtX2FjdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2RlZmF1bHRfaXRlbV9hY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2N1c3RvbV9pdGVtX2FjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvYWN0aW9uX3R5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9wYWdpbmF0aW9uX2Jhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9zdWJzY3JpYmFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvZm9jdXNNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL29ubGluZU1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcmV0cnllci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9ub3RpZnlNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2xvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeUNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL211dGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL211dGF0aW9uQ2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvaW5maW5pdGVRdWVyeUJlaGF2aW9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5Q2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5T2JzZXJ2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3JlYWN0QmF0Y2hlZFVwZGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3NldEJhdGNoVXBkYXRlc0ZuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9sb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3NldExvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvUXVlcnlDbGllbnRQcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91c2VCYXNlUXVlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3VzZVF1ZXJ5LmpzIiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0RhdGFDb250ZW50V2lkZ2V0L0RhdGFDb250ZW50V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0VudGl0eUluZm9XaWRnZXQvRW50aXR5SW5mb1dpZGdldC50c3giLCAiLi4vc3JjL21vZGVsL1N0cnVjdHVyZVJlbmRlcmluZy50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9Kc29uQXBpV2lkZ2V0L0pzb25BcGlXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0lyaVdpZGdldC9JcmlXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L1RhYldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvVGFiUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9IaWVyYXJjaHlXaWRnZXQvSGllcmFyY2h5V2lkZ2V0T0xTLnRzeCIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltL3dpdGgtc2VsZWN0b3IucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vd2l0aC1zZWxlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3Mvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3Mvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvbXVsdGltYXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9FbnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1V0aWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QcmVmaXhlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL01pZGRsZXdhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vd2Vhay1tZW1vaXplL2Rpc3QvZW1vdGlvbi13ZWFrLW1lbW9pemUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvZW1vdGlvbi11dGlscy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy9kaXN0L2Vtb3Rpb24tdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3JlYWN0L2Rpc3QvZW1vdGlvbi1lbGVtZW50LTQzYzZmZWEwLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZm9ybWF0TXVpRXJyb3JNZXNzYWdlL2Zvcm1hdE11aUVycm9yTWVzc2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2Zvcm1hdE11aUVycm9yTWVzc2FnZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaXMtcHJvcC12YWxpZC9kaXN0L2Vtb3Rpb24taXMtcHJvcC12YWxpZC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxlZC9iYXNlL2Rpc3QvZW1vdGlvbi1zdHlsZWQtYmFzZS5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc3R5bGVkL2Rpc3QvZW1vdGlvbi1zdHlsZWQuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC9qc3gtcnVudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL25vZGUvU3R5bGVkRW5naW5lUHJvdmlkZXIvU3R5bGVkRW5naW5lUHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9ub2RlL1N0eWxlZEVuZ2luZVByb3ZpZGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvbm9kZS9HbG9iYWxTdHlsZXMvR2xvYmFsU3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvbm9kZS9HbG9iYWxTdHlsZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9kZWVwbWVyZ2UvZGVlcG1lcmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZGVlcG1lcmdlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvY2FwaXRhbGl6ZS9jYXBpdGFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvY2FwaXRhbGl6ZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2dldERpc3BsYXlOYW1lL2dldERpc3BsYXlOYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZ2V0RGlzcGxheU5hbWUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9jbGFtcC9jbGFtcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2NsYW1wL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9tZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vcmVzcG9uc2l2ZVByb3BUeXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9icmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL21lbW9pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3NwYWNpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NvbXBvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2JvcmRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2Nzc0dyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3BhbGV0dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3NpemluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4L3N0eWxlRnVuY3Rpb25TeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gvZXh0ZW5kU3hQcm9wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lL2NyZWF0ZUJyZWFrcG9pbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVUaGVtZS9zaGFwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUvY3JlYXRlU3BhY2luZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUvYXBwbHlTdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lL2NyZWF0ZVRoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVUaGVtZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlU3R5bGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy93aWRnZXRzL0VudGl0eVRyZWVXaWRnZXQudHN4IiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvcmVhY3RCYXRjaGVkVXBkYXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvYmF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZVNlbGVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VSZWR1eENvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvQ29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvdXNlU3luY0V4dGVybmFsU3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9tZXJnZVByb3BzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy9TdWJzY3JpcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvUHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZVN0b3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VEaXNwYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvYXBwL2hvb2tzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvZXJyb3JzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvY29tbW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvcGx1Z2lucy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvc2NvcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9jb3JlL2ZpbmFsaXplLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvY29yZS9wcm94eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvaW1tZXJDbGFzcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvY3VycmVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3BsdWdpbnMvZXM1LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvcGx1Z2lucy9wYXRjaGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvcGx1Z2lucy9tYXBzZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9wbHVnaW5zL2FsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2ltbWVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvZW52LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVkdXgvZXMvcmVkdXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlZHV4LXRodW5rL2VzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NvbmZpZ3VyZVN0b3JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9kZXZ0b29sc0V4dGVuc2lvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvaXNQbGFpbk9iamVjdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZ2V0RGVmYXVsdE1pZGRsZXdhcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL3RzSGVscGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlQWN0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9hY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvc2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9jcmVhdGVSZWR1Y2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9tYXBCdWlsZGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlU2xpY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL2VudGl0eV9zdGF0ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvc3RhdGVfc2VsZWN0b3JzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9lbnRpdGllcy9zdGF0ZV9hZGFwdGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9lbnRpdGllcy91dGlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvdW5zb3J0ZWRfc3RhdGVfYWRhcHRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvc29ydGVkX3N0YXRlX2FkYXB0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL2NyZWF0ZV9hZGFwdGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9uYW5vaWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NyZWF0ZUFzeW5jVGh1bmsudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL21hdGNoZXJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9saXN0ZW5lck1pZGRsZXdhcmUvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2xpc3RlbmVyTWlkZGxld2FyZS9leGNlcHRpb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9saXN0ZW5lck1pZGRsZXdhcmUvdGFzay50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9hdXRvQmF0Y2hFbmhhbmNlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9kaXN0L3JlZHV4LXRvb2xraXQuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvYXBpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL2hvbWUvaG9tZVNsaWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvdXRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvUmVpZmllZC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvTGlua2VkRW50aXRpZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL1RoaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9FbnRpdHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL0NsYXNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9JbmRpdmlkdWFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9Qcm9wZXJ0eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvT250b2xvZ3kudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvZXh0cmFjdEVudGl0eUhpZXJhcmNoeS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvcGFnZXMvb250b2xvZ2llcy9lbnRpdGllcy9jcmVhdGVUcmVlRnJvbUVudGl0aWVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9wYWdlcy9vbnRvbG9naWVzL29udG9sb2dpZXNTbGljZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvcGFnZXMvc2VhcmNoL3NlYXJjaFNsaWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvc3RvcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvRW50aXR5VHJlZS50c3giLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2NvbW1vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9wdXJwbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2JsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2xpZ2h0Qmx1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JlZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL29yYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvaWRlbnRpZmllci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlVGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVCcmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL3NoYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYnJlYWtwb2ludHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9tZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vbWVtb2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3NwYWNpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVTcGFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L3N0eWxlRnVuY3Rpb25TeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NvbXBvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9ib3JkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3NzR3JpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3BhbGV0dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zaXppbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZUZ1bmN0aW9uU3gvZGVmYXVsdFN4Q29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvYXBwbHlTdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVdpdGhvdXREZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZUZ1bmN0aW9uU3gvZXh0ZW5kU3hQcm9wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL0NsYXNzTmFtZUdlbmVyYXRvci9DbGFzc05hbWVHZW5lcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2Nsc3gvZGlzdC9jbHN4Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcy9nZW5lcmF0ZVV0aWxpdHlDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVTdHlsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvcmVzb2x2ZVByb3BzL3Jlc29sdmVQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lUHJvcHMvZ2V0VGhlbWVQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lUHJvcHMvdXNlVGhlbWVQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VFbmhhbmNlZEVmZmVjdC91c2VFbmhhbmNlZEVmZmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9jcmVhdGVDaGFpbmVkRnVuY3Rpb24vY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2lzTXVpRWxlbWVudC9pc011aUVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvc2V0UmVmL3NldFJlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VJZC91c2VJZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VDb250cm9sbGVkL3VzZUNvbnRyb2xsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlRXZlbnRDYWxsYmFjay91c2VFdmVudENhbGxiYWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3VzZUZvcmtSZWYvdXNlRm9ya1JlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VMYXp5UmVmL3VzZUxhenlSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlT25Nb3VudC91c2VPbk1vdW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3VzZVRpbWVvdXQvdXNlVGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VJc0ZvY3VzVmlzaWJsZS91c2VJc0ZvY3VzVmlzaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcy9jb21wb3NlQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL1N0YWNrL2NyZWF0ZVN0YWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUaGVtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlTWl4aW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVQYWxldHRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUeXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zaGFkb3dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUcmFuc2l0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvekluZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9kZWZhdWx0VGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3VzZVRoZW1lUHJvcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3N0eWxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jYXBpdGFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jcmVhdGVTdmdJY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N2Z0ljb24vU3ZnSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TdmdJY29uL3N2Z0ljb25DbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2lzTXVpRWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VDb250cm9sbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRm9ya1JlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJc0ZvY3VzVmlzaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cENvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9CdXR0b25CYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvVG91Y2hSaXBwbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9SaXBwbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS90b3VjaFJpcHBsZUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9idXR0b25CYXNlQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5L1R5cG9ncmFwaHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS90eXBvZ3JhcGh5Q2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sQ29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2hlY2tib3gvQ2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvU3dpdGNoQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zd2l0Y2hCYXNlQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvQ2hlY2tCb3hPdXRsaW5lQmxhbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL0NoZWNrQm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9JbmRldGVybWluYXRlQ2hlY2tCb3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2hlY2tib3gvY2hlY2tib3hDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NpcmN1bGFyUHJvZ3Jlc3MvQ2lyY3VsYXJQcm9ncmVzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9DaXJjdWxhclByb2dyZXNzL2NpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbExhYmVsL0Zvcm1Db250cm9sTGFiZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3RhY2svU3RhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2xMYWJlbC9mb3JtQ29udHJvbExhYmVsQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtR3JvdXAvRm9ybUdyb3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Hcm91cC9mb3JtR3JvdXBDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1JhZGlvL1JhZGlvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1JhZGlvL1JhZGlvQnV0dG9uSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvUmFkaW9CdXR0b25VbmNoZWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL1JhZGlvQnV0dG9uQ2hlY2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9SYWRpb0dyb3VwL3VzZVJhZGlvR3JvdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUmFkaW9Hcm91cC9SYWRpb0dyb3VwQ29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9SYWRpby9yYWRpb0NsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUmFkaW9Hcm91cC9SYWRpb0dyb3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvbXVpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9jb21wb25lbnRzL05vZGUudHN4IiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3N1YnNjcmliYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9mb2N1c01hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvb25saW5lTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9yZXRyeWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL25vdGlmeU1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbXV0YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbXV0YXRpb25DYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3JlYWN0QmF0Y2hlZFVwZGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3NldEJhdGNoVXBkYXRlc0ZuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9sb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3NldExvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvUXVlcnlDbGllbnRQcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvd2lkZ2V0cy9pbmRleC50cyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9Dcm9zc1JlZldpZGdldC9Dcm9zc1JlZlRhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZC9IaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkLnRzeCIsICIuLi9zcmMvYXBpL2hpZXJhcmNoeV93aWRnZXRfZGVwcmVjYXRlZC50cyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL09udG9sb2d5SW5mb1dpZGdldC9PbnRvbG9neUluZm9XaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0Nyb3NzUmVmV2lkZ2V0L0Nyb3NzUmVmVGFiV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9IaWVyYXJjaHlXaWRnZXRTZW1Mb29rUC9IaWVyYXJjaHlXaWRnZXQudHN4IiwgIi4uL3NyYy9hcGkvU2tvc0FwaS50cyIsICIuLi9zcmMvYXBpL09udG9Qb3J0YWxBcGkudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UaXRsZVdpZGdldC9UaXRsZVdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UaXRsZVdpZGdldC9UaXRsZVByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9NZXRhZGF0YVdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9FbnRpdHlPbnRvTGlzdFdpZGdldC9FbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9FbnRpdHlEZWZpbmVkQnlXaWRnZXQvRW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1Jlc291cmNlc1dpZGdldC9SZXNvdXJjZXNXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoQmFyV2lkZ2V0L1NlYXJjaEJhcldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9TZWFyY2hSZXN1bHRzTGlzdFdpZGdldC9TZWFyY2hSZXN1bHRzTGlzdFdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9TZWFyY2hSZXN1bHRzTGlzdFdpZGdldC9NZXRhZGF0YUNvbXBhY3QudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvRW50aXR5T250b0xpc3RXaWRnZXQvRW50aXR5T250b0xpc3RXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvRW50aXR5RGVmaW5lZEJ5V2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9FbnRpdHlSZWxhdGlvbnNXaWRnZXQvRW50aXR5UmVsYXRpb25zV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1Rlcm1EZXBpY3Rpb25XaWRnZXQvVGVybURlcGljdGlvbldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9HcmFwaFZpZXdXaWRnZXQvR3JhcGhWaWV3V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBUT0RPOiB0aGlzIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBnZXRzIGltcG9ydGVkIGR1cmluZyBidWlsZC5cbnZhciBSZWFjdFZlcnNpb24gPSAnMTcuMC4yJztcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbmV4cG9ydHMuRnJhZ21lbnQgPSAweGVhY2I7XG5leHBvcnRzLlN0cmljdE1vZGUgPSAweGVhY2M7XG5leHBvcnRzLlByb2ZpbGVyID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG5leHBvcnRzLlN1c3BlbnNlID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgZXhwb3J0cy5GcmFnbWVudCA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgZXhwb3J0cy5TdHJpY3RNb2RlID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBleHBvcnRzLlByb2ZpbGVyID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgZXhwb3J0cy5TdXNwZW5zZSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IGRpc3BhdGNoZXIuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgYmF0Y2gncyBjb25maWd1cmF0aW9uIHN1Y2ggYXMgaG93IGxvbmcgYW4gdXBkYXRlXG4gKiBzaG91bGQgc3VzcGVuZCBmb3IgaWYgaXQgbmVlZHMgdG8uXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IHtcbiAgdHJhbnNpdGlvbjogMFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBvd25lci5cbiAqXG4gKiBUaGUgY3VycmVudCBvd25lciBpcyB0aGUgY29tcG9uZW50IHdobyBzaG91bGQgb3duIGFueSBjb21wb25lbnRzIHRoYXQgYXJlXG4gKiBjdXJyZW50bHkgYmVpbmcgY29uc3RydWN0ZWQuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IHt9O1xudmFyIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBudWxsO1xuZnVuY3Rpb24gc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKSB7XG4gIHtcbiAgICBjdXJyZW50RXh0cmFTdGFja0ZyYW1lID0gc3RhY2s7XG4gIH1cbn1cblxue1xuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZSA9IGZ1bmN0aW9uIChzdGFjaykge1xuICAgIHtcbiAgICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgICB9XG4gIH07IC8vIFN0YWNrIGltcGxlbWVudGF0aW9uIGluamVjdGVkIGJ5IHRoZSBjdXJyZW50IHJlbmRlcmVyLlxuXG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBudWxsO1xuXG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhY2sgPSAnJzsgLy8gQWRkIGFuIGV4dHJhIHRvcCBmcmFtZSB3aGlsZSBhbiBlbGVtZW50IGlzIGJlaW5nIHZhbGlkYXRlZFxuXG4gICAgaWYgKGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUpIHtcbiAgICAgIHN0YWNrICs9IGN1cnJlbnRFeHRyYVN0YWNrRnJhbWU7XG4gICAgfSAvLyBEZWxlZ2F0ZSB0byB0aGUgaW5qZWN0ZWQgcmVuZGVyZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cblxuXG4gICAgdmFyIGltcGwgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjaztcblxuICAgIGlmIChpbXBsKSB7XG4gICAgICBzdGFjayArPSBpbXBsKCkgfHwgJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9O1xufVxuXG4vKipcbiAqIFVzZWQgYnkgYWN0KCkgdG8gdHJhY2sgd2hldGhlciB5b3UncmUgaW5zaWRlIGFuIGFjdCgpIHNjb3BlLlxuICovXG52YXIgSXNTb21lUmVuZGVyZXJBY3RpbmcgPSB7XG4gIGN1cnJlbnQ6IGZhbHNlXG59O1xuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXI6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOiBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxcbiAgUmVhY3RDdXJyZW50T3duZXI6IFJlYWN0Q3VycmVudE93bmVyLFxuICBJc1NvbWVSZW5kZXJlckFjdGluZzogSXNTb21lUmVuZGVyZXJBY3RpbmcsXG4gIC8vIFVzZWQgYnkgcmVuZGVyZXJzIHRvIGF2b2lkIGJ1bmRsaW5nIG9iamVjdC1hc3NpZ24gdHdpY2UgaW4gVU1EIGJ1bmRsZXM6XG4gIGFzc2lnbjogX2Fzc2lnblxufTtcblxue1xuICBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbn1cblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSB7fTtcblxuZnVuY3Rpb24gd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIHZhciBfY29uc3RydWN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IF9jb25zdHJ1Y3RvciAmJiAoX2NvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IF9jb25zdHJ1Y3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcyc7XG4gICAgdmFyIHdhcm5pbmdLZXkgPSBjb21wb25lbnROYW1lICsgXCIuXCIgKyBjYWxsZXJOYW1lO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVycm9yKFwiQ2FuJ3QgY2FsbCAlcyBvbiBhIGNvbXBvbmVudCB0aGF0IGlzIG5vdCB5ZXQgbW91bnRlZC4gXCIgKyAnVGhpcyBpcyBhIG5vLW9wLCBidXQgaXQgbWlnaHQgaW5kaWNhdGUgYSBidWcgaW4geW91ciBhcHBsaWNhdGlvbi4gJyArICdJbnN0ZWFkLCBhc3NpZ24gdG8gYHRoaXMuc3RhdGVgIGRpcmVjdGx5IG9yIGRlZmluZSBhIGBzdGF0ZSA9IHt9O2AgJyArICdjbGFzcyBwcm9wZXJ0eSB3aXRoIHRoZSBkZXNpcmVkIHN0YXRlIGluIHRoZSAlcyBjb21wb25lbnQuJywgY2FsbGVyTmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gPSB0cnVlO1xuICB9XG59XG4vKipcbiAqIFRoaXMgaXMgdGhlIGFic3RyYWN0IEFQSSBmb3IgYW4gdXBkYXRlIHF1ZXVlLlxuICovXG5cblxudmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0ge1xuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB3ZSB3YW50IHRvIHRlc3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBmaW5hbFxuICAgKi9cbiAgaXNNb3VudGVkOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAgICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAgICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAgICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnZm9yY2VVcGRhdGUnKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0ZWAgdG8gbXV0YXRlIHN0YXRlLlxuICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gICAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcGxldGVTdGF0ZSBOZXh0IHN0YXRlLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IGNhbGxlck5hbWUgbmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdyZXBsYWNlU3RhdGUnKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRlIGlzXG4gICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcFxuICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXRcbiAgICogZHVyaW5nIHRoZSBtZXJnZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIHN0YXRlLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IE5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3NldFN0YXRlJyk7XG4gIH1cbn07XG5cbnZhciBlbXB0eU9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpO1xufVxuLyoqXG4gKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0OyAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9uZSBnZXRzIGluamVjdGVkIGJ5IHRoZVxuICAvLyByZW5kZXJlci5cblxuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG5Db21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTtcbi8qKlxuICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyB0byBtdXRhdGVcbiAqIHN0YXRlLiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCB3aWxsIHJ1biBzeW5jaHJvbm91c2x5LFxuICogYXMgdGhleSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsXG4gKiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2FsbCB0byBzZXRTdGF0ZSBpcyBhY3R1YWxseVxuICogY29tcGxldGVkLlxuICpcbiAqIFdoZW4gYSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBzZXRTdGF0ZSwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgc29tZSBwb2ludCBpblxuICogdGhlIGZ1dHVyZSAobm90IHN5bmNocm9ub3VzbHkpLiBJdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSB1cCB0byBkYXRlXG4gKiBjb21wb25lbnQgYXJndW1lbnRzIChzdGF0ZSwgcHJvcHMsIGNvbnRleHQpLiBUaGVzZSB2YWx1ZXMgY2FuIGJlIGRpZmZlcmVudFxuICogZnJvbSB0aGlzLiogYmVjYXVzZSB5b3VyIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYWZ0ZXIgcmVjZWl2ZVByb3BzIGJ1dCBiZWZvcmVcbiAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSwgYW5kIHRoaXMgbmV3IHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgd2lsbCBub3QgeWV0IGJlXG4gKiBhc3NpZ25lZCB0byB0aGlzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIG9yIGZ1bmN0aW9uIHRvXG4gKiAgICAgICAgcHJvZHVjZSBuZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggY3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykge1xuICBpZiAoISh0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnZnVuY3Rpb24nIHx8IHBhcnRpYWxTdGF0ZSA9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbn07XG4vKipcbiAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICpcbiAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICpcbiAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gKlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLCBjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG59O1xuLyoqXG4gKiBEZXByZWNhdGVkIEFQSXMuIFRoZXNlIEFQSXMgdXNlZCB0byBleGlzdCBvbiBjbGFzc2ljIFJlYWN0IGNsYXNzZXMgYnV0IHNpbmNlXG4gKiB3ZSB3b3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0aGVtLCB3ZSdyZSBub3QgZ29pbmcgdG8gbW92ZSB0aGVtIG92ZXIgdG8gdGhpc1xuICogbW9kZXJuIGJhc2UgY2xhc3MuIEluc3RlYWQsIHdlIGRlZmluZSBhIGdldHRlciB0aGF0IHdhcm5zIGlmIGl0J3MgYWNjZXNzZWQuXG4gKi9cblxuXG57XG4gIHZhciBkZXByZWNhdGVkQVBJcyA9IHtcbiAgICBpc01vdW50ZWQ6IFsnaXNNb3VudGVkJywgJ0luc3RlYWQsIG1ha2Ugc3VyZSB0byBjbGVhbiB1cCBzdWJzY3JpcHRpb25zIGFuZCBwZW5kaW5nIHJlcXVlc3RzIGluICcgKyAnY29tcG9uZW50V2lsbFVubW91bnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuJ10sXG4gICAgcmVwbGFjZVN0YXRlOiBbJ3JlcGxhY2VTdGF0ZScsICdSZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIHNldFN0YXRlIGluc3RlYWQgKHNlZSAnICsgJ2h0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzIzNikuJ11cbiAgfTtcblxuICB2YXIgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGluZm8pIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJyVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzJywgaW5mb1swXSwgaW5mb1sxXSk7XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBmb3IgKHZhciBmbk5hbWUgaW4gZGVwcmVjYXRlZEFQSXMpIHtcbiAgICBpZiAoZGVwcmVjYXRlZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSkge1xuICAgICAgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKGZuTmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIENvbXBvbmVudER1bW15KCkge31cblxuQ29tcG9uZW50RHVtbXkucHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbi8qKlxuICogQ29udmVuaWVuY2UgY29tcG9uZW50IHdpdGggZGVmYXVsdCBzaGFsbG93IGVxdWFsaXR5IGNoZWNrIGZvciBzQ1UuXG4gKi9cblxuZnVuY3Rpb24gUHVyZUNvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG52YXIgcHVyZUNvbXBvbmVudFByb3RvdHlwZSA9IFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVudER1bW15KCk7XG5wdXJlQ29tcG9uZW50UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHVyZUNvbXBvbmVudDsgLy8gQXZvaWQgYW4gZXh0cmEgcHJvdG90eXBlIGp1bXAgZm9yIHRoZXNlIG1ldGhvZHMuXG5cbl9hc3NpZ24ocHVyZUNvbXBvbmVudFByb3RvdHlwZSwgQ29tcG9uZW50LnByb3RvdHlwZSk7XG5cbnB1cmVDb21wb25lbnRQcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuXG4vLyBhbiBpbW11dGFibGUgb2JqZWN0IHdpdGggYSBzaW5nbGUgbXV0YWJsZSB2YWx1ZVxuZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuICB2YXIgcmVmT2JqZWN0ID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcblxuICB7XG4gICAgT2JqZWN0LnNlYWwocmVmT2JqZWN0KTtcbiAgfVxuXG4gIHJldHVybiByZWZPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIGV4cG9ydHMuUHJvZmlsZXI6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgZXhwb3J0cy5TdHJpY3RNb2RlOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biwgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24sIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHtcbiAgICB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYHJlZmAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIGNvbmZpZy5fX3NlbGYgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5zdGF0ZU5vZGUgIT09IGNvbmZpZy5fX3NlbGYpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiAnICsgJ1N1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiAnICsgJ1RoaXMgY2FzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb24uICcgKyAnV2UgYXNrIHlvdSB0byBtYW51YWxseSBmaXggdGhpcyBjYXNlIGJ5IHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgY29tcG9uZW50TmFtZSwgY29uZmlnLnJlZik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvXG4gKiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcgdG8gY2FsbCBpdC4gQWxzbywgaW5zdGFuY2VvZiBjaGVja1xuICogd2lsbCBub3Qgd29yay4gSW5zdGVhZCB0ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRvIGNoZWNrXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXG4gKiBAcGFyYW0geyp9IG93bmVyXG4gKiBAcGFyYW0geyp9IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0IHBsYWNlcyB3aGVyZSBgdGhpc2AgaXNcbiAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4gUmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2VcbiAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93XG4gKiBmdW5jdGlvbnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIgYXJlIHRoZSBzYW1lLCB0aGVyZSB3aWxsIGJlIG5vXG4gKiBjaGFuZ2UgaW4gYmVoYXZpb3IuXG4gKiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSlcbiAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQvb3Igb3RoZXIgaW5mb3JtYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiByZWYsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uXG4gICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC5cbiAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluXG4gICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTsgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTsgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgLy8gZXF1YWwgZm9yIHRlc3RpbmcgcHVycG9zZXMgYW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVyYXRpb24uXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuLyoqXG4gKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgb2YgdGhlIGdpdmVuIHR5cGUuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2NyZWF0ZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBrZXkgPSBudWxsO1xuICB2YXIgcmVmID0gbnVsbDtcbiAgdmFyIHNlbGYgPSBudWxsO1xuICB2YXIgc291cmNlID0gbnVsbDtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgcmVmID0gY29uZmlnLnJlZjtcblxuICAgICAge1xuICAgICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cblxuICAgIHNlbGYgPSBjb25maWcuX19zZWxmID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc2VsZjtcbiAgICBzb3VyY2UgPSBjb25maWcuX19zb3VyY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zb3VyY2U7IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkQXJyYXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfSAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcblxuXG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbn1cbmZ1bmN0aW9uIGNsb25lQW5kUmVwbGFjZUtleShvbGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50LnByb3BzKTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG4vKipcbiAqIENsb25lIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IHVzaW5nIGVsZW1lbnQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjbG9uZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICBpZiAoISEoZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB1bmRlZmluZWQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuY2xvbmVFbGVtZW50KC4uLik6IFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgXCIgKyBlbGVtZW50ICsgXCIuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvcE5hbWU7IC8vIE9yaWdpbmFsIHByb3BzIGFyZSBjb3BpZWRcblxuICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG5cbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7IC8vIFNlbGYgaXMgcHJlc2VydmVkIHNpbmNlIHRoZSBvd25lciBpcyBwcmVzZXJ2ZWQuXG5cbiAgdmFyIHNlbGYgPSBlbGVtZW50Ll9zZWxmOyAvLyBTb3VyY2UgaXMgcHJlc2VydmVkIHNpbmNlIGNsb25lRWxlbWVudCBpcyB1bmxpa2VseSB0byBiZSB0YXJnZXRlZCBieSBhXG4gIC8vIHRyYW5zcGlsZXIsIGFuZCB0aGUgb3JpZ2luYWwgc291cmNlIGlzIHByb2JhYmx5IGEgYmV0dGVyIGluZGljYXRvciBvZiB0aGVcbiAgLy8gdHJ1ZSBvd25lci5cblxuICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNlOyAvLyBPd25lciB3aWxsIGJlIHByZXNlcnZlZCwgdW5sZXNzIHJlZiBpcyBvdmVycmlkZGVuXG5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH0gLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgb3ZlcnJpZGUgZXhpc3RpbmcgcHJvcHNcblxuXG4gICAgdmFyIGRlZmF1bHRQcm9wcztcblxuICAgIGlmIChlbGVtZW50LnR5cGUgJiYgZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZGVmYXVsdFByb3BzID0gZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcztcbiAgICB9XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBpZiAoY29uZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KGVsZW1lbnQudHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKTtcbn1cbi8qKlxuICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgUmVhY3RFbGVtZW50LlxuICogQGZpbmFsXG4gKi9cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU1VCU0VQQVJBVE9SID0gJzonO1xuLyoqXG4gKiBFc2NhcGUgYW5kIHdyYXAga2V5IHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgcmVhY3RpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gYmUgZXNjYXBlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQga2V5LlxuICovXG5cbmZ1bmN0aW9uIGVzY2FwZShrZXkpIHtcbiAgdmFyIGVzY2FwZVJlZ2V4ID0gL1s9Ol0vZztcbiAgdmFyIGVzY2FwZXJMb29rdXAgPSB7XG4gICAgJz0nOiAnPTAnLFxuICAgICc6JzogJz0yJ1xuICB9O1xuICB2YXIgZXNjYXBlZFN0cmluZyA9IGtleS5yZXBsYWNlKGVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07XG4gIH0pO1xuICByZXR1cm4gJyQnICsgZXNjYXBlZFN0cmluZztcbn1cbi8qKlxuICogVE9ETzogVGVzdCB0aGF0IGEgc2luZ2xlIGNoaWxkIGFuZCBhbiBhcnJheSB3aXRoIG9uZSBpdGVtIGhhdmUgdGhlIHNhbWUga2V5XG4gKiBwYXR0ZXJuLlxuICovXG5cblxudmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbnZhciB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cXC8rL2c7XG5cbmZ1bmN0aW9uIGVzY2FwZVVzZXJQcm92aWRlZEtleSh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsICckJi8nKTtcbn1cbi8qKlxuICogR2VuZXJhdGUgYSBrZXkgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyBhIGVsZW1lbnQgd2l0aGluIGEgc2V0LlxuICpcbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBBIGVsZW1lbnQgdGhhdCBjb3VsZCBjb250YWluIGEgbWFudWFsIGtleS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCB0aGF0IGlzIHVzZWQgaWYgYSBtYW51YWwga2V5IGlzIG5vdCBwcm92aWRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRLZXkoZWxlbWVudCwgaW5kZXgpIHtcbiAgLy8gRG8gc29tZSB0eXBlY2hlY2tpbmcgaGVyZSBzaW5jZSB3ZSBjYWxsIHRoaXMgYmxpbmRseS4gV2Ugd2FudCB0byBlbnN1cmVcbiAgLy8gdGhhdCB3ZSBkb24ndCBibG9jayBwb3RlbnRpYWwgZnV0dXJlIEVTIEFQSXMuXG4gIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ29iamVjdCcgJiYgZWxlbWVudCAhPT0gbnVsbCAmJiBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgLy8gRXhwbGljaXQga2V5XG4gICAgcmV0dXJuIGVzY2FwZSgnJyArIGVsZW1lbnQua2V5KTtcbiAgfSAvLyBJbXBsaWNpdCBrZXkgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggaW4gdGhlIHNldFxuXG5cbiAgcmV0dXJuIGluZGV4LnRvU3RyaW5nKDM2KTtcbn1cblxuZnVuY3Rpb24gbWFwSW50b0FycmF5KGNoaWxkcmVuLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmFtZVNvRmFyLCBjYWxsYmFjaykge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBjaGlsZHJlbjtcblxuICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgLy8gQWxsIG9mIHRoZSBhYm92ZSBhcmUgcGVyY2VpdmVkIGFzIG51bGwuXG4gICAgY2hpbGRyZW4gPSBudWxsO1xuICB9XG5cbiAgdmFyIGludm9rZUNhbGxiYWNrID0gZmFsc2U7XG5cbiAgaWYgKGNoaWxkcmVuID09PSBudWxsKSB7XG4gICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHN3aXRjaCAoY2hpbGRyZW4uJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBpZiAoaW52b2tlQ2FsbGJhY2spIHtcbiAgICB2YXIgX2NoaWxkID0gY2hpbGRyZW47XG4gICAgdmFyIG1hcHBlZENoaWxkID0gY2FsbGJhY2soX2NoaWxkKTsgLy8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzOlxuXG4gICAgdmFyIGNoaWxkS2V5ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiArIGdldEVsZW1lbnRLZXkoX2NoaWxkLCAwKSA6IG5hbWVTb0ZhcjtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG1hcHBlZENoaWxkKSkge1xuICAgICAgdmFyIGVzY2FwZWRDaGlsZEtleSA9ICcnO1xuXG4gICAgICBpZiAoY2hpbGRLZXkgIT0gbnVsbCkge1xuICAgICAgICBlc2NhcGVkQ2hpbGRLZXkgPSBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoY2hpbGRLZXkpICsgJy8nO1xuICAgICAgfVxuXG4gICAgICBtYXBJbnRvQXJyYXkobWFwcGVkQ2hpbGQsIGFycmF5LCBlc2NhcGVkQ2hpbGRLZXksICcnLCBmdW5jdGlvbiAoYykge1xuICAgICAgICByZXR1cm4gYztcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobWFwcGVkQ2hpbGQgIT0gbnVsbCkge1xuICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KG1hcHBlZENoaWxkKSkge1xuICAgICAgICBtYXBwZWRDaGlsZCA9IGNsb25lQW5kUmVwbGFjZUtleShtYXBwZWRDaGlsZCwgLy8gS2VlcCBib3RoIHRoZSAobWFwcGVkKSBhbmQgb2xkIGtleXMgaWYgdGhleSBkaWZmZXIsIGp1c3QgYXNcbiAgICAgICAgLy8gdHJhdmVyc2VBbGxDaGlsZHJlbiB1c2VkIHRvIGRvIGZvciBvYmplY3RzIGFzIGNoaWxkcmVuXG4gICAgICAgIGVzY2FwZWRQcmVmaXggKyAoIC8vICRGbG93Rml4TWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgUmVhY3QuUG9ydGFsIGRvZXNuJ3QgaGF2ZSBhIGtleVxuICAgICAgICBtYXBwZWRDaGlsZC5rZXkgJiYgKCFfY2hpbGQgfHwgX2NoaWxkLmtleSAhPT0gbWFwcGVkQ2hpbGQua2V5KSA/IC8vICRGbG93Rml4TWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgZXhpc3RpbmcgZWxlbWVudCdzIGtleSBjYW4gYmUgYSBudW1iZXJcbiAgICAgICAgZXNjYXBlVXNlclByb3ZpZGVkS2V5KCcnICsgbWFwcGVkQ2hpbGQua2V5KSArICcvJyA6ICcnKSArIGNoaWxkS2V5KTtcbiAgICAgIH1cblxuICAgICAgYXJyYXkucHVzaChtYXBwZWRDaGlsZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICB2YXIgY2hpbGQ7XG4gIHZhciBuZXh0TmFtZTtcbiAgdmFyIHN1YnRyZWVDb3VudCA9IDA7IC8vIENvdW50IG9mIGNoaWxkcmVuIGZvdW5kIGluIHRoZSBjdXJyZW50IHN1YnRyZWUuXG5cbiAgdmFyIG5leHROYW1lUHJlZml4ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiA6IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUjtcblxuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGkpO1xuICAgICAgc3VidHJlZUNvdW50ICs9IG1hcEludG9BcnJheShjaGlsZCwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5leHROYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBpdGVyYWJsZUNoaWxkcmVuID0gY2hpbGRyZW47XG5cbiAgICAgIHtcbiAgICAgICAgLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG4gICAgICAgIGlmIChpdGVyYXRvckZuID09PSBpdGVyYWJsZUNoaWxkcmVuLmVudHJpZXMpIHtcbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1hcHMpIHtcbiAgICAgICAgICAgIHdhcm4oJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHN1cHBvcnRlZC4gJyArICdVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChpdGVyYWJsZUNoaWxkcmVuKTtcbiAgICAgIHZhciBzdGVwO1xuICAgICAgdmFyIGlpID0gMDtcblxuICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICBjaGlsZCA9IHN0ZXAudmFsdWU7XG4gICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRFbGVtZW50S2V5KGNoaWxkLCBpaSsrKTtcbiAgICAgICAgc3VidHJlZUNvdW50ICs9IG1hcEludG9BcnJheShjaGlsZCwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5leHROYW1lLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGNoaWxkcmVuU3RyaW5nID0gJycgKyBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArIChjaGlsZHJlblN0cmluZyA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKCcsICcpICsgJ30nIDogY2hpbGRyZW5TdHJpbmcpICsgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJ0cmVlQ291bnQ7XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVubWFwXG4gKlxuICogVGhlIHByb3ZpZGVkIG1hcEZ1bmN0aW9uKGNoaWxkLCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZ1bmMgVGhlIG1hcCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgY291bnQgPSAwO1xuICBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIHJlc3VsdCwgJycsICcnLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBjb3VudCsrKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhc1xuICogYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5jb3VudFxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuLlxuICovXG5cblxuZnVuY3Rpb24gY291bnRDaGlsZHJlbihjaGlsZHJlbikge1xuICB2YXIgbiA9IDA7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgbisrOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmdcbiAgfSk7XG4gIHJldHVybiBuO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIHRocm91Z2ggY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmZvcmVhY2hcbiAqXG4gKiBUaGUgcHJvdmlkZWQgZm9yRWFjaEZ1bmMoY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZm9yRWFjaEZ1bmNcbiAqIEBwYXJhbSB7Kn0gZm9yRWFjaENvbnRleHQgQ29udGV4dCBmb3IgZm9yRWFjaENvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KSB7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yRWFjaEZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gRG9uJ3QgcmV0dXJuIGFueXRoaW5nLlxuICB9LCBmb3JFYWNoQ29udGV4dCk7XG59XG4vKipcbiAqIEZsYXR0ZW4gYSBjaGlsZHJlbiBvYmplY3QgKHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCkgYW5kXG4gKiByZXR1cm4gYW4gYXJyYXkgd2l0aCBhcHByb3ByaWF0ZWx5IHJlLWtleWVkIGNoaWxkcmVuLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbnRvYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHRvQXJyYXkoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pIHx8IFtdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRoYXQgdGhlcmVcbiAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm9ubHlcbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzXG4gKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0b1xuICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIG9ubHlDaGlsZChjaGlsZHJlbikge1xuICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0KGRlZmF1bHRWYWx1ZSwgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpIHtcbiAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxjdWxhdGVDaGFuZ2VkQml0cyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSBudWxsICYmIHR5cGVvZiBjYWxjdWxhdGVDaGFuZ2VkQml0cyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignY3JlYXRlQ29udGV4dDogRXhwZWN0ZWQgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzJywgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjYWxjdWxhdGVDaGFuZ2VkQml0cyxcbiAgICAvLyBBcyBhIHdvcmthcm91bmQgdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25jdXJyZW50IHJlbmRlcmVycywgd2UgY2F0ZWdvcml6ZVxuICAgIC8vIHNvbWUgcmVuZGVyZXJzIGFzIHByaW1hcnkgYW5kIG90aGVycyBhcyBzZWNvbmRhcnkuIFdlIG9ubHkgZXhwZWN0XG4gICAgLy8gdGhlcmUgdG8gYmUgdHdvIGNvbmN1cnJlbnQgcmVuZGVyZXJzIGF0IG1vc3Q6IFJlYWN0IE5hdGl2ZSAocHJpbWFyeSkgYW5kXG4gICAgLy8gRmFicmljIChzZWNvbmRhcnkpOyBSZWFjdCBET00gKHByaW1hcnkpIGFuZCBSZWFjdCBBUlQgKHNlY29uZGFyeSkuXG4gICAgLy8gU2Vjb25kYXJ5IHJlbmRlcmVycyBzdG9yZSB0aGVpciBjb250ZXh0IHZhbHVlcyBvbiBzZXBhcmF0ZSBmaWVsZHMuXG4gICAgX2N1cnJlbnRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIF9jdXJyZW50VmFsdWUyOiBkZWZhdWx0VmFsdWUsXG4gICAgLy8gVXNlZCB0byB0cmFjayBob3cgbWFueSBjb25jdXJyZW50IHJlbmRlcmVycyB0aGlzIGNvbnRleHQgY3VycmVudGx5XG4gICAgLy8gc3VwcG9ydHMgd2l0aGluIGluIGEgc2luZ2xlIHJlbmRlcmVyLiBTdWNoIGFzIHBhcmFsbGVsIHNlcnZlciByZW5kZXJpbmcuXG4gICAgX3RocmVhZENvdW50OiAwLFxuICAgIC8vIFRoZXNlIGFyZSBjaXJjdWxhclxuICAgIFByb3ZpZGVyOiBudWxsLFxuICAgIENvbnN1bWVyOiBudWxsXG4gIH07XG4gIGNvbnRleHQuUHJvdmlkZXIgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BST1ZJREVSX1RZUEUsXG4gICAgX2NvbnRleHQ6IGNvbnRleHRcbiAgfTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IGZhbHNlO1xuICB2YXIgaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIgPSBmYWxzZTtcblxuICB7XG4gICAgLy8gQSBzZXBhcmF0ZSBvYmplY3QsIGJ1dCBwcm94aWVzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvbnRleHQgb2JqZWN0IGZvclxuICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBJdCBoYXMgYSBkaWZmZXJlbnQgJCR0eXBlb2YsIHNvIHdlIGNhbiBwcm9wZXJseVxuICAgIC8vIHdhcm4gZm9yIHRoZSBpbmNvcnJlY3QgdXNhZ2Ugb2YgQ29udGV4dCBhcyBhIENvbnN1bWVyLlxuICAgIHZhciBDb25zdW1lciA9IHtcbiAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICBfY29udGV4dDogY29udGV4dCxcbiAgICAgIF9jYWxjdWxhdGVDaGFuZ2VkQml0czogY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHNcbiAgICB9OyAvLyAkRmxvd0ZpeE1lOiBGbG93IGNvbXBsYWlucyBhYm91dCBub3Qgc2V0dGluZyBhIHZhbHVlLCB3aGljaCBpcyBpbnRlbnRpb25hbCBoZXJlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb25zdW1lciwge1xuICAgICAgUHJvdmlkZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlcikge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIgPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLlByb3ZpZGVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LlByb3ZpZGVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250ZXh0LlByb3ZpZGVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfUHJvdmlkZXIpIHtcbiAgICAgICAgICBjb250ZXh0LlByb3ZpZGVyID0gX1Byb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fY3VycmVudFZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gX2N1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9jdXJyZW50VmFsdWUyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfY3VycmVudFZhbHVlMikge1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTIgPSBfY3VycmVudFZhbHVlMjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF90aHJlYWRDb3VudDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fdGhyZWFkQ291bnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF90aHJlYWRDb3VudCkge1xuICAgICAgICAgIGNvbnRleHQuX3RocmVhZENvdW50ID0gX3RocmVhZENvdW50O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgQ29uc3VtZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycykge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLkNvbnN1bWVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LkNvbnN1bWVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250ZXh0LkNvbnN1bWVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGlzcGxheU5hbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuZGlzcGxheU5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lcikge1xuICAgICAgICAgICAgd2FybignU2V0dGluZyBgZGlzcGxheU5hbWVgIG9uIENvbnRleHQuQ29uc3VtZXIgaGFzIG5vIGVmZmVjdC4gJyArIFwiWW91IHNob3VsZCBzZXQgaXQgZGlyZWN0bHkgb24gdGhlIGNvbnRleHQgd2l0aCBDb250ZXh0LmRpc3BsYXlOYW1lID0gJyVzJy5cIiwgZGlzcGxheU5hbWUpO1xuXG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgcHJvcGVydGllcyBiZWNhdXNlIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZCBkZWZpbmVQcm9wZXJ0eVxuXG4gICAgY29udGV4dC5Db25zdW1lciA9IENvbnN1bWVyO1xuICB9XG5cbiAge1xuICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IG51bGw7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gY29udGV4dDtcbn1cblxudmFyIFVuaW5pdGlhbGl6ZWQgPSAtMTtcbnZhciBQZW5kaW5nID0gMDtcbnZhciBSZXNvbHZlZCA9IDE7XG52YXIgUmVqZWN0ZWQgPSAyO1xuXG5mdW5jdGlvbiBsYXp5SW5pdGlhbGl6ZXIocGF5bG9hZCkge1xuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBVbmluaXRpYWxpemVkKSB7XG4gICAgdmFyIGN0b3IgPSBwYXlsb2FkLl9yZXN1bHQ7XG4gICAgdmFyIHRoZW5hYmxlID0gY3RvcigpOyAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuXG4gICAgdmFyIHBlbmRpbmcgPSBwYXlsb2FkO1xuICAgIHBlbmRpbmcuX3N0YXR1cyA9IFBlbmRpbmc7XG4gICAgcGVuZGluZy5fcmVzdWx0ID0gdGhlbmFibGU7XG4gICAgdGhlbmFibGUudGhlbihmdW5jdGlvbiAobW9kdWxlT2JqZWN0KSB7XG4gICAgICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBQZW5kaW5nKSB7XG4gICAgICAgIHZhciBkZWZhdWx0RXhwb3J0ID0gbW9kdWxlT2JqZWN0LmRlZmF1bHQ7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmIChkZWZhdWx0RXhwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVycm9yKCdsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXBvcnQoKSBjYWxsLiAnICsgJ0luc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICAnY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcCcgKyBcIm9ydCgnLi9NeUNvbXBvbmVudCcpKVwiLCBtb2R1bGVPYmplY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuXG5cbiAgICAgICAgdmFyIHJlc29sdmVkID0gcGF5bG9hZDtcbiAgICAgICAgcmVzb2x2ZWQuX3N0YXR1cyA9IFJlc29sdmVkO1xuICAgICAgICByZXNvbHZlZC5fcmVzdWx0ID0gZGVmYXVsdEV4cG9ydDtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgLy8gVHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS5cbiAgICAgICAgdmFyIHJlamVjdGVkID0gcGF5bG9hZDtcbiAgICAgICAgcmVqZWN0ZWQuX3N0YXR1cyA9IFJlamVjdGVkO1xuICAgICAgICByZWplY3RlZC5fcmVzdWx0ID0gZXJyb3I7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBSZXNvbHZlZCkge1xuICAgIHJldHVybiBwYXlsb2FkLl9yZXN1bHQ7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgcGF5bG9hZC5fcmVzdWx0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGxhenkoY3Rvcikge1xuICB2YXIgcGF5bG9hZCA9IHtcbiAgICAvLyBXZSB1c2UgdGhlc2UgZmllbGRzIHRvIHN0b3JlIHRoZSByZXN1bHQuXG4gICAgX3N0YXR1czogLTEsXG4gICAgX3Jlc3VsdDogY3RvclxuICB9O1xuICB2YXIgbGF6eVR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0xBWllfVFlQRSxcbiAgICBfcGF5bG9hZDogcGF5bG9hZCxcbiAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gIH07XG5cbiAge1xuICAgIC8vIEluIHByb2R1Y3Rpb24sIHRoaXMgd291bGQganVzdCBzZXQgaXQgb24gdGhlIG9iamVjdC5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuICAgIHZhciBwcm9wVHlwZXM7IC8vICRGbG93Rml4TWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxhenlUeXBlLCB7XG4gICAgICBkZWZhdWx0UHJvcHM6IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZGVmYXVsdFByb3BzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdEZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgICBlcnJvcignUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgZGVmYXVsdFByb3BzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuXG4gICAgICAgICAgZGVmYXVsdFByb3BzID0gbmV3RGVmYXVsdFByb3BzOyAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdkZWZhdWx0UHJvcHMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwcm9wVHlwZXM6IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFR5cGVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcm9wVHlwZXMpIHtcbiAgICAgICAgICBlcnJvcignUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgcHJvcFR5cGVzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuXG4gICAgICAgICAgcHJvcFR5cGVzID0gbmV3UHJvcFR5cGVzOyAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdwcm9wVHlwZXMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsYXp5VHlwZTtcbn1cblxuZnVuY3Rpb24gZm9yd2FyZFJlZihyZW5kZXIpIHtcbiAge1xuICAgIGlmIChyZW5kZXIgIT0gbnVsbCAmJiByZW5kZXIuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHJlY2VpdmVkIGEgYG1lbW9gICcgKyAnY29tcG9uZW50LiBJbnN0ZWFkIG9mIGZvcndhcmRSZWYobWVtbyguLi4pKSwgdXNlICcgKyAnbWVtbyhmb3J3YXJkUmVmKC4uLikpLicpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHdhcyBnaXZlbiAlcy4nLCByZW5kZXIgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgcmVuZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJlbmRlci5sZW5ndGggIT09IDAgJiYgcmVuZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGFjY2VwdCBleGFjdGx5IHR3byBwYXJhbWV0ZXJzOiBwcm9wcyBhbmQgcmVmLiAlcycsIHJlbmRlci5sZW5ndGggPT09IDEgPyAnRGlkIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSByZWYgcGFyYW1ldGVyPycgOiAnQW55IGFkZGl0aW9uYWwgcGFyYW1ldGVyIHdpbGwgYmUgdW5kZWZpbmVkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZW5kZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHJlbmRlci5kZWZhdWx0UHJvcHMgIT0gbnVsbCB8fCByZW5kZXIucHJvcFR5cGVzICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBkbyBub3Qgc3VwcG9ydCBwcm9wVHlwZXMgb3IgZGVmYXVsdFByb3BzLiAnICsgJ0RpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgYSBSZWFjdCBjb21wb25lbnQ/Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLFxuICAgIHJlbmRlcjogcmVuZGVyXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAocmVuZGVyLmRpc3BsYXlOYW1lID09IG51bGwpIHtcbiAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50IHx8IHR5cGUgPT09IGV4cG9ydHMuUHJvZmlsZXIgfHwgdHlwZSA9PT0gUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdHJpY3RNb2RlIHx8IHR5cGUgPT09IGV4cG9ydHMuU3VzcGVuc2UgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1lbW8odHlwZSwgY29tcGFyZSkge1xuICB7XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkpIHtcbiAgICAgIGVycm9yKCdtZW1vOiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGNvbXBvbmVudC4gSW5zdGVhZCAnICsgJ3JlY2VpdmVkOiAlcycsIHR5cGUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb21wYXJlOiBjb21wYXJlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29tcGFyZVxuICB9O1xuXG4gIHtcbiAgICB2YXIgb3duTmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudFR5cGUsICdkaXNwbGF5TmFtZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgb3duTmFtZSA9IG5hbWU7XG5cbiAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHR5cGUuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEaXNwYXRjaGVyKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDtcblxuICBpZiAoIShkaXNwYXRjaGVyICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcblxuICB7XG4gICAgaWYgKHVuc3RhYmxlX29ic2VydmVkQml0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcigndXNlQ29udGV4dCgpIHNlY29uZCBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlICcgKyAndXNlIGluIFJlYWN0LiBQYXNzaW5nIGl0IGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnWW91IHBhc3NlZDogJXMuJXMnLCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMsIHR5cGVvZiB1bnN0YWJsZV9vYnNlcnZlZEJpdHMgPT09ICdudW1iZXInICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzJdKSA/ICdcXG5cXG5EaWQgeW91IGNhbGwgYXJyYXkubWFwKHVzZUNvbnRleHQpPyAnICsgJ0NhbGxpbmcgSG9va3MgaW5zaWRlIGEgbG9vcCBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0xlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzJyA6ICcnKTtcbiAgICB9IC8vIFRPRE86IGFkZCBhIG1vcmUgZ2VuZXJpYyB3YXJuaW5nIGZvciBpbnZhbGlkIHZhbHVlcy5cblxuXG4gICAgaWYgKENvbnRleHQuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJlYWxDb250ZXh0ID0gQ29udGV4dC5fY29udGV4dDsgLy8gRG9uJ3QgZGVkdXBsaWNhdGUgYmVjYXVzZSB0aGlzIGxlZ2l0aW1hdGVseSBjYXVzZXMgYnVnc1xuICAgICAgLy8gYW5kIG5vYm9keSBzaG91bGQgYmUgdXNpbmcgdGhpcyBpbiBleGlzdGluZyBjb2RlLlxuXG4gICAgICBpZiAocmVhbENvbnRleHQuQ29uc3VtZXIgPT09IENvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LkNvbnN1bWVyKSBpcyBub3Qgc3VwcG9ydGVkLCBtYXkgY2F1c2UgYnVncywgYW5kIHdpbGwgYmUgJyArICdyZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH0gZWxzZSBpZiAocmVhbENvbnRleHQuUHJvdmlkZXIgPT09IENvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LlByb3ZpZGVyKSBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDb250ZXh0KENvbnRleHQsIHVuc3RhYmxlX29ic2VydmVkQml0cyk7XG59XG5mdW5jdGlvbiB1c2VTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VTdGF0ZShpbml0aWFsU3RhdGUpO1xufVxuZnVuY3Rpb24gdXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbn1cbmZ1bmN0aW9uIHVzZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWYoaW5pdGlhbFZhbHVlKTtcbn1cbmZ1bmN0aW9uIHVzZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTWVtbyhjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VNZW1vKGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICB7XG4gICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgIHJldHVybiBkaXNwYXRjaGVyLnVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKTtcbiAgfVxufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuU3VzcGVuc2U6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd247XG5cbntcbiAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgIHZhciBsaW5lTnVtYmVyID0gc291cmNlLmxpbmVOdW1iZXI7XG4gICAgcmV0dXJuICdcXG5cXG5DaGVjayB5b3VyIGNvZGUgYXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhlbGVtZW50UHJvcHMpIHtcbiAgaWYgKGVsZW1lbnRQcm9wcyAhPT0gbnVsbCAmJiBlbGVtZW50UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShlbGVtZW50UHJvcHMuX19zb3VyY2UpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cblxuXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gIGlmICghaW5mbykge1xuICAgIHZhciBwYXJlbnROYW1lID0gdHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lO1xuXG4gICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgIGluZm8gPSBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5mbztcbn1cbi8qKlxuICogV2FybiBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQga2V5IGFzc2lnbmVkIHRvIGl0LlxuICogVGhpcyBlbGVtZW50IGlzIGluIGFuIGFycmF5LiBUaGUgYXJyYXkgY291bGQgZ3JvdyBhbmQgc2hyaW5rIG9yIGJlXG4gKiByZW9yZGVyZWQuIEFsbCBjaGlsZHJlbiB0aGF0IGhhdmVuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBhcmUgcmVxdWlyZWQgdG9cbiAqIGhhdmUgYSBcImtleVwiIHByb3BlcnR5IGFzc2lnbmVkIHRvIGl0LiBFcnJvciBzdGF0dXNlcyBhcmUgY2FjaGVkIHNvIGEgd2FybmluZ1xuICogd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKTtcblxuICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAvLyBhc3NpZ25pbmcgaXQgYSBrZXkuXG5cbiAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxuICAgIGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGdldENvbXBvbmVudE5hbWUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgfVxuXG4gIHtcbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICB9XG59XG4vKipcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxuICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuXG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXG4gICAgaWYgKG5vZGUuX3N0b3JlKSB7XG4gICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAvLyBidXQgbm93IHdlIHByaW50IGEgc2VwYXJhdGUgd2FybmluZyBmb3IgdGhlbSBsYXRlci5cbiAgICAgIGlmIChpdGVyYXRvckZuICE9PSBub2RlLmVudHJpZXMpIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICB2YXIgc3RlcDtcblxuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxuICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwgfHwgdHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9wVHlwZXM7XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIE5vdGU6IE1lbW8gb25seSBjaGVja3Mgb3V0ZXIgcHJvcHMgaGVyZS5cbiAgICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wVHlwZXMpIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLlByb3BUeXBlcyAhPT0gdW5kZWZpbmVkICYmICFwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bikge1xuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuXG4gICAgICB2YXIgX25hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpO1xuXG4gICAgICBlcnJvcignQ29tcG9uZW50ICVzIGRlY2xhcmVkIGBQcm9wVHlwZXNgIGluc3RlYWQgb2YgYHByb3BUeXBlc2AuIERpZCB5b3UgbWlzc3BlbGwgdGhlIHByb3BlcnR5IGFzc2lnbm1lbnQ/JywgX25hbWUgfHwgJ1Vua25vd24nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nICYmICF0eXBlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcmFnbWVudC5wcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2tleScpIHtcbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgYHJlZmAgc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4nKTtcblxuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIHZhbGlkVHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKTsgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG9cbiAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci5cblxuICBpZiAoIXZhbGlkVHlwZSkge1xuICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtRm9yUHJvcHMocHJvcHMpO1xuXG4gICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgIGluZm8gKz0gc291cmNlSW5mbztcbiAgICB9IGVsc2Uge1xuICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcbiAgICB9XG5cbiAgICB2YXIgdHlwZVN0cmluZztcblxuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ251bGwnO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgaW5mbyA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD8nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgfVxuXG4gICAge1xuICAgICAgZXJyb3IoJ1JlYWN0LmNyZWF0ZUVsZW1lbnQ6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmcgZXJyb3JzLlxuICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gIC8vIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcblxuXG4gIGlmICh2YWxpZFR5cGUpIHtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZSA9PT0gZXhwb3J0cy5GcmFnbWVudCkge1xuICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxudmFyIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gZmFsc2U7XG5mdW5jdGlvbiBjcmVhdGVGYWN0b3J5V2l0aFZhbGlkYXRpb24odHlwZSkge1xuICB2YXIgdmFsaWRhdGVkRmFjdG9yeSA9IGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbi5iaW5kKG51bGwsIHR5cGUpO1xuICB2YWxpZGF0ZWRGYWN0b3J5LnR5cGUgPSB0eXBlO1xuXG4gIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5KSB7XG4gICAgICBkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ1JlYWN0LmNyZWF0ZUZhY3RvcnkoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBDb25zaWRlciB1c2luZyBKU1ggJyArICdvciB1c2UgUmVhY3QuY3JlYXRlRWxlbWVudCgpIGRpcmVjdGx5IGluc3RlYWQuJyk7XG4gICAgfSAvLyBMZWdhY3kgaG9vazogcmVtb3ZlIGl0XG5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0ZWRGYWN0b3J5LCAndHlwZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJ0ZhY3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhlIGNsYXNzIGRpcmVjdGx5ICcgKyAnYmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4nKTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3R5cGUnLCB7XG4gICAgICAgICAgdmFsdWU6IHR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlZEZhY3Rvcnk7XG59XG5mdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbihlbGVtZW50LCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBjbG9uZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgbmV3RWxlbWVudC50eXBlKTtcbiAgfVxuXG4gIHZhbGlkYXRlUHJvcFR5cGVzKG5ld0VsZW1lbnQpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cblxue1xuXG4gIHRyeSB7XG4gICAgdmFyIGZyb3plbk9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuXG4gICAgbmV3IE1hcChbW2Zyb3plbk9iamVjdCwgbnVsbF1dKTtcbiAgICBuZXcgU2V0KFtmcm96ZW5PYmplY3RdKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAqL1xuICB9IGNhdGNoIChlKSB7XG4gIH1cbn1cblxudmFyIGNyZWF0ZUVsZW1lbnQkMSA9ICBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNsb25lRWxlbWVudCQxID0gIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uIDtcbnZhciBjcmVhdGVGYWN0b3J5ID0gIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbiA7XG52YXIgQ2hpbGRyZW4gPSB7XG4gIG1hcDogbWFwQ2hpbGRyZW4sXG4gIGZvckVhY2g6IGZvckVhY2hDaGlsZHJlbixcbiAgY291bnQ6IGNvdW50Q2hpbGRyZW4sXG4gIHRvQXJyYXk6IHRvQXJyYXksXG4gIG9ubHk6IG9ubHlDaGlsZFxufTtcblxuZXhwb3J0cy5DaGlsZHJlbiA9IENoaWxkcmVuO1xuZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG5leHBvcnRzLlB1cmVDb21wb25lbnQgPSBQdXJlQ29tcG9uZW50O1xuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzO1xuZXhwb3J0cy5jbG9uZUVsZW1lbnQgPSBjbG9uZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ7XG5leHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50JDE7XG5leHBvcnRzLmNyZWF0ZUZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5O1xuZXhwb3J0cy5jcmVhdGVSZWYgPSBjcmVhdGVSZWY7XG5leHBvcnRzLmZvcndhcmRSZWYgPSBmb3J3YXJkUmVmO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudCA9IGlzVmFsaWRFbGVtZW50O1xuZXhwb3J0cy5sYXp5ID0gbGF6eTtcbmV4cG9ydHMubWVtbyA9IG1lbW87XG5leHBvcnRzLnVzZUNhbGxiYWNrID0gdXNlQ2FsbGJhY2s7XG5leHBvcnRzLnVzZUNvbnRleHQgPSB1c2VDb250ZXh0O1xuZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gdXNlRGVidWdWYWx1ZTtcbmV4cG9ydHMudXNlRWZmZWN0ID0gdXNlRWZmZWN0O1xuZXhwb3J0cy51c2VJbXBlcmF0aXZlSGFuZGxlID0gdXNlSW1wZXJhdGl2ZUhhbmRsZTtcbmV4cG9ydHMudXNlTGF5b3V0RWZmZWN0ID0gdXNlTGF5b3V0RWZmZWN0O1xuZXhwb3J0cy51c2VNZW1vID0gdXNlTWVtbztcbmV4cG9ydHMudXNlUmVkdWNlciA9IHVzZVJlZHVjZXI7XG5leHBvcnRzLnVzZVJlZiA9IHVzZVJlZjtcbmV4cG9ydHMudXNlU3RhdGUgPSB1c2VTdGF0ZTtcbmV4cG9ydHMudmVyc2lvbiA9IFJlYWN0VmVyc2lvbjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjAuMjAuMlxuICogc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIGVuYWJsZVNjaGVkdWxlckRlYnVnZ2luZyA9IGZhbHNlO1xudmFyIGVuYWJsZVByb2ZpbGluZyA9IGZhbHNlO1xuXG52YXIgcmVxdWVzdEhvc3RDYWxsYmFjaztcbnZhciByZXF1ZXN0SG9zdFRpbWVvdXQ7XG52YXIgY2FuY2VsSG9zdFRpbWVvdXQ7XG52YXIgcmVxdWVzdFBhaW50O1xudmFyIGhhc1BlcmZvcm1hbmNlTm93ID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xuXG5pZiAoaGFzUGVyZm9ybWFuY2VOb3cpIHtcbiAgdmFyIGxvY2FsUGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZTtcblxuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxQZXJmb3JtYW5jZS5ub3coKTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBsb2NhbERhdGUgPSBEYXRlO1xuICB2YXIgaW5pdGlhbFRpbWUgPSBsb2NhbERhdGUubm93KCk7XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGxvY2FsRGF0ZS5ub3coKSAtIGluaXRpYWxUaW1lO1xuICB9O1xufVxuXG5pZiAoIC8vIElmIFNjaGVkdWxlciBydW5zIGluIGEgbm9uLURPTSBlbnZpcm9ubWVudCwgaXQgZmFsbHMgYmFjayB0byBhIG5haXZlXG4vLyBpbXBsZW1lbnRhdGlvbiB1c2luZyBzZXRUaW1lb3V0LlxudHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgLy8gQ2hlY2sgaWYgTWVzc2FnZUNoYW5uZWwgaXMgc3VwcG9ydGVkLCB0b28uXG50eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICdmdW5jdGlvbicpIHtcbiAgLy8gSWYgdGhpcyBhY2NpZGVudGFsbHkgZ2V0cyBpbXBvcnRlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LCBlLmcuIEphdmFTY3JpcHRDb3JlLFxuICAvLyBmYWxsYmFjayB0byBhIG5haXZlIGltcGxlbWVudGF0aW9uLlxuICB2YXIgX2NhbGxiYWNrID0gbnVsbDtcbiAgdmFyIF90aW1lb3V0SUQgPSBudWxsO1xuXG4gIHZhciBfZmx1c2hDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoX2NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICB2YXIgaGFzUmVtYWluaW5nVGltZSA9IHRydWU7XG5cbiAgICAgICAgX2NhbGxiYWNrKGhhc1JlbWFpbmluZ1RpbWUsIGN1cnJlbnRUaW1lKTtcblxuICAgICAgICBfY2FsbGJhY2sgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzZXRUaW1lb3V0KF9mbHVzaENhbGxiYWNrLCAwKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RDYWxsYmFjayA9IGZ1bmN0aW9uIChjYikge1xuICAgIGlmIChfY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCByZS1lbnRyYW5jeS5cbiAgICAgIHNldFRpbWVvdXQocmVxdWVzdEhvc3RDYWxsYmFjaywgMCwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfY2FsbGJhY2sgPSBjYjtcbiAgICAgIHNldFRpbWVvdXQoX2ZsdXNoQ2FsbGJhY2ssIDApO1xuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoY2IsIG1zKSB7XG4gICAgX3RpbWVvdXRJRCA9IHNldFRpbWVvdXQoY2IsIG1zKTtcbiAgfTtcblxuICBjYW5jZWxIb3N0VGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjbGVhclRpbWVvdXQoX3RpbWVvdXRJRCk7XG4gIH07XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgcmVxdWVzdFBhaW50ID0gZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSA9IGZ1bmN0aW9uICgpIHt9O1xufSBlbHNlIHtcbiAgLy8gQ2FwdHVyZSBsb2NhbCByZWZlcmVuY2VzIHRvIG5hdGl2ZSBBUElzLCBpbiBjYXNlIGEgcG9seWZpbGwgb3ZlcnJpZGVzIHRoZW0uXG4gIHZhciBfc2V0VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0O1xuICB2YXIgX2NsZWFyVGltZW91dCA9IHdpbmRvdy5jbGVhclRpbWVvdXQ7XG5cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIFRPRE86IFNjaGVkdWxlciBubyBsb25nZXIgcmVxdWlyZXMgdGhlc2UgbWV0aG9kcyB0byBiZSBwb2x5ZmlsbGVkLiBCdXRcbiAgICAvLyBtYXliZSB3ZSB3YW50IHRvIGNvbnRpbnVlIHdhcm5pbmcgaWYgdGhleSBkb24ndCBleGlzdCwgdG8gcHJlc2VydmUgdGhlXG4gICAgLy8gb3B0aW9uIHRvIHJlbHkgb24gaXQgaW4gdGhlIGZ1dHVyZT9cbiAgICB2YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgICB2YXIgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XG5cbiAgICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuIFwiICsgJ01ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxscycpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ2Vycm9yJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnZXJyb3InXShcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgY2FuY2VsQW5pbWF0aW9uRnJhbWUuIFwiICsgJ01ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxscycpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICB2YXIgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gbnVsbDtcbiAgdmFyIHRhc2tUaW1lb3V0SUQgPSAtMTsgLy8gU2NoZWR1bGVyIHBlcmlvZGljYWxseSB5aWVsZHMgaW4gY2FzZSB0aGVyZSBpcyBvdGhlciB3b3JrIG9uIHRoZSBtYWluXG4gIC8vIHRocmVhZCwgbGlrZSB1c2VyIGV2ZW50cy4gQnkgZGVmYXVsdCwgaXQgeWllbGRzIG11bHRpcGxlIHRpbWVzIHBlciBmcmFtZS5cbiAgLy8gSXQgZG9lcyBub3QgYXR0ZW1wdCB0byBhbGlnbiB3aXRoIGZyYW1lIGJvdW5kYXJpZXMsIHNpbmNlIG1vc3QgdGFza3MgZG9uJ3RcbiAgLy8gbmVlZCB0byBiZSBmcmFtZSBhbGlnbmVkOyBmb3IgdGhvc2UgdGhhdCBkbywgdXNlIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cblxuICB2YXIgeWllbGRJbnRlcnZhbCA9IDU7XG4gIHZhciBkZWFkbGluZSA9IDA7IC8vIFRPRE86IE1ha2UgdGhpcyBjb25maWd1cmFibGVcblxuICB7XG4gICAgLy8gYGlzSW5wdXRQZW5kaW5nYCBpcyBub3QgYXZhaWxhYmxlLiBTaW5jZSB3ZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIGlmXG4gICAgLy8gdGhlcmUncyBwZW5kaW5nIGlucHV0LCBhbHdheXMgeWllbGQgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUuXG4gICAgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLnVuc3RhYmxlX25vdygpID49IGRlYWRsaW5lO1xuICAgIH07IC8vIFNpbmNlIHdlIHlpZWxkIGV2ZXJ5IGZyYW1lIHJlZ2FyZGxlc3MsIGByZXF1ZXN0UGFpbnRgIGhhcyBubyBlZmZlY3QuXG5cblxuICAgIHJlcXVlc3RQYWludCA9IGZ1bmN0aW9uICgpIHt9O1xuICB9XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSA9IGZ1bmN0aW9uIChmcHMpIHtcbiAgICBpZiAoZnBzIDwgMCB8fCBmcHMgPiAxMjUpIHtcbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ2Vycm9yJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnZXJyb3InXSgnZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsICcgKyAnZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZnBzID4gMCkge1xuICAgICAgeWllbGRJbnRlcnZhbCA9IE1hdGguZmxvb3IoMTAwMCAvIGZwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlc2V0IHRoZSBmcmFtZXJhdGVcbiAgICAgIHlpZWxkSW50ZXJ2YWwgPSA1O1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7IC8vIFlpZWxkIGFmdGVyIGB5aWVsZEludGVydmFsYCBtcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB3ZSBhcmUgaW4gdGhlIHZzeW5jXG4gICAgICAvLyBjeWNsZS4gVGhpcyBtZWFucyB0aGVyZSdzIGFsd2F5cyB0aW1lIHJlbWFpbmluZyBhdCB0aGUgYmVnaW5uaW5nIG9mXG4gICAgICAvLyB0aGUgbWVzc2FnZSBldmVudC5cblxuICAgICAgZGVhZGxpbmUgPSBjdXJyZW50VGltZSArIHlpZWxkSW50ZXJ2YWw7XG4gICAgICB2YXIgaGFzVGltZVJlbWFpbmluZyA9IHRydWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBoYXNNb3JlV29yayA9IHNjaGVkdWxlZEhvc3RDYWxsYmFjayhoYXNUaW1lUmVtYWluaW5nLCBjdXJyZW50VGltZSk7XG5cbiAgICAgICAgaWYgKCFoYXNNb3JlV29yaykge1xuICAgICAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSdzIG1vcmUgd29yaywgc2NoZWR1bGUgdGhlIG5leHQgbWVzc2FnZSBldmVudCBhdCB0aGUgZW5kXG4gICAgICAgICAgLy8gb2YgdGhlIHByZWNlZGluZyBvbmUuXG4gICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgYSBzY2hlZHVsZXIgdGFzayB0aHJvd3MsIGV4aXQgdGhlIGN1cnJlbnQgYnJvd3NlciB0YXNrIHNvIHRoZVxuICAgICAgICAvLyBlcnJvciBjYW4gYmUgb2JzZXJ2ZWQuXG4gICAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICAgIH0gLy8gWWllbGRpbmcgdG8gdGhlIGJyb3dzZXIgd2lsbCBnaXZlIGl0IGEgY2hhbmNlIHRvIHBhaW50LCBzbyB3ZSBjYW5cbiAgfTtcblxuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICB2YXIgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lO1xuXG4gIHJlcXVlc3RIb3N0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgIGlmICghaXNNZXNzYWdlTG9vcFJ1bm5pbmcpIHtcbiAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0VGltZW91dCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgbXMpIHtcbiAgICB0YXNrVGltZW91dElEID0gX3NldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2soZXhwb3J0cy51bnN0YWJsZV9ub3coKSk7XG4gICAgfSwgbXMpO1xuICB9O1xuXG4gIGNhbmNlbEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIF9jbGVhclRpbWVvdXQodGFza1RpbWVvdXRJRCk7XG5cbiAgICB0YXNrVGltZW91dElEID0gLTE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHB1c2goaGVhcCwgbm9kZSkge1xuICB2YXIgaW5kZXggPSBoZWFwLmxlbmd0aDtcbiAgaGVhcC5wdXNoKG5vZGUpO1xuICBzaWZ0VXAoaGVhcCwgbm9kZSwgaW5kZXgpO1xufVxuZnVuY3Rpb24gcGVlayhoZWFwKSB7XG4gIHZhciBmaXJzdCA9IGhlYXBbMF07XG4gIHJldHVybiBmaXJzdCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpcnN0O1xufVxuZnVuY3Rpb24gcG9wKGhlYXApIHtcbiAgdmFyIGZpcnN0ID0gaGVhcFswXTtcblxuICBpZiAoZmlyc3QgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBsYXN0ID0gaGVhcC5wb3AoKTtcblxuICAgIGlmIChsYXN0ICE9PSBmaXJzdCkge1xuICAgICAgaGVhcFswXSA9IGxhc3Q7XG4gICAgICBzaWZ0RG93bihoZWFwLCBsYXN0LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3Q7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lmdFVwKGhlYXAsIG5vZGUsIGkpIHtcbiAgdmFyIGluZGV4ID0gaTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBwYXJlbnRJbmRleCA9IGluZGV4IC0gMSA+Pj4gMTtcbiAgICB2YXIgcGFyZW50ID0gaGVhcFtwYXJlbnRJbmRleF07XG5cbiAgICBpZiAocGFyZW50ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShwYXJlbnQsIG5vZGUpID4gMCkge1xuICAgICAgLy8gVGhlIHBhcmVudCBpcyBsYXJnZXIuIFN3YXAgcG9zaXRpb25zLlxuICAgICAgaGVhcFtwYXJlbnRJbmRleF0gPSBub2RlO1xuICAgICAgaGVhcFtpbmRleF0gPSBwYXJlbnQ7XG4gICAgICBpbmRleCA9IHBhcmVudEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcGFyZW50IGlzIHNtYWxsZXIuIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNpZnREb3duKGhlYXAsIG5vZGUsIGkpIHtcbiAgdmFyIGluZGV4ID0gaTtcbiAgdmFyIGxlbmd0aCA9IGhlYXAubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBsZWZ0SW5kZXggPSAoaW5kZXggKyAxKSAqIDIgLSAxO1xuICAgIHZhciBsZWZ0ID0gaGVhcFtsZWZ0SW5kZXhdO1xuICAgIHZhciByaWdodEluZGV4ID0gbGVmdEluZGV4ICsgMTtcbiAgICB2YXIgcmlnaHQgPSBoZWFwW3JpZ2h0SW5kZXhdOyAvLyBJZiB0aGUgbGVmdCBvciByaWdodCBub2RlIGlzIHNtYWxsZXIsIHN3YXAgd2l0aCB0aGUgc21hbGxlciBvZiB0aG9zZS5cblxuICAgIGlmIChsZWZ0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShsZWZ0LCBub2RlKSA8IDApIHtcbiAgICAgIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocmlnaHQsIGxlZnQpIDwgMCkge1xuICAgICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgICBoZWFwW3JpZ2h0SW5kZXhdID0gbm9kZTtcbiAgICAgICAgaW5kZXggPSByaWdodEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhcFtpbmRleF0gPSBsZWZ0O1xuICAgICAgICBoZWFwW2xlZnRJbmRleF0gPSBub2RlO1xuICAgICAgICBpbmRleCA9IGxlZnRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJpZ2h0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShyaWdodCwgbm9kZSkgPCAwKSB7XG4gICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgaGVhcFtyaWdodEluZGV4XSA9IG5vZGU7XG4gICAgICBpbmRleCA9IHJpZ2h0SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5laXRoZXIgY2hpbGQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gIC8vIENvbXBhcmUgc29ydCBpbmRleCBmaXJzdCwgdGhlbiB0YXNrIGlkLlxuICB2YXIgZGlmZiA9IGEuc29ydEluZGV4IC0gYi5zb3J0SW5kZXg7XG4gIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGEuaWQgLSBiLmlkO1xufVxuXG4vLyBUT0RPOiBVc2Ugc3ltYm9scz9cbnZhciBJbW1lZGlhdGVQcmlvcml0eSA9IDE7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSAyO1xudmFyIE5vcm1hbFByaW9yaXR5ID0gMztcbnZhciBMb3dQcmlvcml0eSA9IDQ7XG52YXIgSWRsZVByaW9yaXR5ID0gNTtcblxuZnVuY3Rpb24gbWFya1Rhc2tFcnJvcmVkKHRhc2ssIG1zKSB7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcblxudmFyIG1heFNpZ25lZDMxQml0SW50ID0gMTA3Mzc0MTgyMzsgLy8gVGltZXMgb3V0IGltbWVkaWF0ZWx5XG5cbnZhciBJTU1FRElBVEVfUFJJT1JJVFlfVElNRU9VVCA9IC0xOyAvLyBFdmVudHVhbGx5IHRpbWVzIG91dFxuXG52YXIgVVNFUl9CTE9DS0lOR19QUklPUklUWV9USU1FT1VUID0gMjUwO1xudmFyIE5PUk1BTF9QUklPUklUWV9USU1FT1VUID0gNTAwMDtcbnZhciBMT1dfUFJJT1JJVFlfVElNRU9VVCA9IDEwMDAwOyAvLyBOZXZlciB0aW1lcyBvdXRcblxudmFyIElETEVfUFJJT1JJVFlfVElNRU9VVCA9IG1heFNpZ25lZDMxQml0SW50OyAvLyBUYXNrcyBhcmUgc3RvcmVkIG9uIGEgbWluIGhlYXBcblxudmFyIHRhc2tRdWV1ZSA9IFtdO1xudmFyIHRpbWVyUXVldWUgPSBbXTsgLy8gSW5jcmVtZW50aW5nIGlkIGNvdW50ZXIuIFVzZWQgdG8gbWFpbnRhaW4gaW5zZXJ0aW9uIG9yZGVyLlxuXG52YXIgdGFza0lkQ291bnRlciA9IDE7IC8vIFBhdXNpbmcgdGhlIHNjaGVkdWxlciBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbnZhciBjdXJyZW50VGFzayA9IG51bGw7XG52YXIgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTsgLy8gVGhpcyBpcyBzZXQgd2hpbGUgcGVyZm9ybWluZyB3b3JrLCB0byBwcmV2ZW50IHJlLWVudHJhbmN5LlxuXG52YXIgaXNQZXJmb3JtaW5nV29yayA9IGZhbHNlO1xudmFyIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gZmFsc2U7XG52YXIgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKSB7XG4gIC8vIENoZWNrIGZvciB0YXNrcyB0aGF0IGFyZSBubyBsb25nZXIgZGVsYXllZCBhbmQgYWRkIHRoZW0gdG8gdGhlIHF1ZXVlLlxuICB2YXIgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gIHdoaWxlICh0aW1lciAhPT0gbnVsbCkge1xuICAgIGlmICh0aW1lci5jYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgLy8gVGltZXIgd2FzIGNhbmNlbGxlZC5cbiAgICAgIHBvcCh0aW1lclF1ZXVlKTtcbiAgICB9IGVsc2UgaWYgKHRpbWVyLnN0YXJ0VGltZSA8PSBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGltZXIgZmlyZWQuIFRyYW5zZmVyIHRvIHRoZSB0YXNrIHF1ZXVlLlxuICAgICAgcG9wKHRpbWVyUXVldWUpO1xuICAgICAgdGltZXIuc29ydEluZGV4ID0gdGltZXIuZXhwaXJhdGlvblRpbWU7XG4gICAgICBwdXNoKHRhc2tRdWV1ZSwgdGltZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW1haW5pbmcgdGltZXJzIGFyZSBwZW5kaW5nLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUaW1lb3V0KGN1cnJlbnRUaW1lKSB7XG4gIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG5cbiAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCkge1xuICAgIGlmIChwZWVrKHRhc2tRdWV1ZSkgIT09IG51bGwpIHtcbiAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gICAgICBpZiAoZmlyc3RUaW1lciAhPT0gbnVsbCkge1xuICAgICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoV29yayhoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSkge1xuXG5cbiAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcblxuICBpZiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCkge1xuICAgIC8vIFdlIHNjaGVkdWxlZCBhIHRpbWVvdXQgYnV0IGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZC4gQ2FuY2VsIGl0LlxuICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICBjYW5jZWxIb3N0VGltZW91dCgpO1xuICB9XG5cbiAgaXNQZXJmb3JtaW5nV29yayA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIGlmIChlbmFibGVQcm9maWxpbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoY3VycmVudFRhc2sgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICAgIG1hcmtUYXNrRXJyb3JlZChjdXJyZW50VGFzaywgY3VycmVudFRpbWUpO1xuICAgICAgICAgIGN1cnJlbnRUYXNrLmlzUXVldWVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gY2F0Y2ggaW4gcHJvZCBjb2RlIHBhdGguXG4gICAgICByZXR1cm4gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50VGFzayA9IG51bGw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgaXNQZXJmb3JtaW5nV29yayA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IGluaXRpYWxUaW1lO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG5cbiAgd2hpbGUgKGN1cnJlbnRUYXNrICE9PSBudWxsICYmICEoZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nICkpIHtcbiAgICBpZiAoY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPiBjdXJyZW50VGltZSAmJiAoIWhhc1RpbWVSZW1haW5pbmcgfHwgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCgpKSkge1xuICAgICAgLy8gVGhpcyBjdXJyZW50VGFzayBoYXNuJ3QgZXhwaXJlZCwgYW5kIHdlJ3ZlIHJlYWNoZWQgdGhlIGRlYWRsaW5lLlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGNhbGxiYWNrID0gY3VycmVudFRhc2suY2FsbGJhY2s7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IG51bGw7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRUYXNrLnByaW9yaXR5TGV2ZWw7XG4gICAgICB2YXIgZGlkVXNlckNhbGxiYWNrVGltZW91dCA9IGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lO1xuXG4gICAgICB2YXIgY29udGludWF0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjayhkaWRVc2VyQ2FsbGJhY2tUaW1lb3V0KTtcbiAgICAgIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcblxuICAgICAgaWYgKHR5cGVvZiBjb250aW51YXRpb25DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IGNvbnRpbnVhdGlvbkNhbGxiYWNrO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBpZiAoY3VycmVudFRhc2sgPT09IHBlZWsodGFza1F1ZXVlKSkge1xuICAgICAgICAgIHBvcCh0YXNrUXVldWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3AodGFza1F1ZXVlKTtcbiAgICB9XG5cbiAgICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcbiAgfSAvLyBSZXR1cm4gd2hldGhlciB0aGVyZSdzIGFkZGl0aW9uYWwgd29ya1xuXG5cbiAgaWYgKGN1cnJlbnRUYXNrICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gICAgaWYgKGZpcnN0VGltZXIgIT09IG51bGwpIHtcbiAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5TGV2ZWwsIGV2ZW50SGFuZGxlcikge1xuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICB9XG5cbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfbmV4dChldmVudEhhbmRsZXIpIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWw7XG5cbiAgc3dpdGNoIChjdXJyZW50UHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgICAgLy8gU2hpZnQgZG93biB0byBub3JtYWwgcHJpb3JpdHlcbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEFueXRoaW5nIGxvd2VyIHRoYW4gbm9ybWFsIHByaW9yaXR5IHNob3VsZCByZW1haW4gYXQgdGhlIGN1cnJlbnQgbGV2ZWwuXG4gICAgICBwcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3dyYXBDYWxsYmFjayhjYWxsYmFjaykge1xuICB2YXIgcGFyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoaXMgaXMgYSBmb3JrIG9mIHJ1bldpdGhQcmlvcml0eSwgaW5saW5lZCBmb3IgcGVyZm9ybWFuY2UuXG4gICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcGFyZW50UHJpb3JpdHlMZXZlbDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gIHZhciBzdGFydFRpbWU7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgdmFyIGRlbGF5ID0gb3B0aW9ucy5kZWxheTtcblxuICAgIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWUgKyBkZWxheTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICB9XG5cbiAgdmFyIHRpbWVvdXQ7XG5cbiAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBJTU1FRElBVEVfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBVU0VSX0JMT0NLSU5HX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IElETEVfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBMT1dfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBkZWZhdWx0OlxuICAgICAgdGltZW91dCA9IE5PUk1BTF9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgZXhwaXJhdGlvblRpbWUgPSBzdGFydFRpbWUgKyB0aW1lb3V0O1xuICB2YXIgbmV3VGFzayA9IHtcbiAgICBpZDogdGFza0lkQ291bnRlcisrLFxuICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICBwcmlvcml0eUxldmVsOiBwcmlvcml0eUxldmVsLFxuICAgIHN0YXJ0VGltZTogc3RhcnRUaW1lLFxuICAgIGV4cGlyYXRpb25UaW1lOiBleHBpcmF0aW9uVGltZSxcbiAgICBzb3J0SW5kZXg6IC0xXG4gIH07XG5cbiAgaWYgKHN0YXJ0VGltZSA+IGN1cnJlbnRUaW1lKSB7XG4gICAgLy8gVGhpcyBpcyBhIGRlbGF5ZWQgdGFzay5cbiAgICBuZXdUYXNrLnNvcnRJbmRleCA9IHN0YXJ0VGltZTtcbiAgICBwdXNoKHRpbWVyUXVldWUsIG5ld1Rhc2spO1xuXG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSA9PT0gbnVsbCAmJiBuZXdUYXNrID09PSBwZWVrKHRpbWVyUXVldWUpKSB7XG4gICAgICAvLyBBbGwgdGFza3MgYXJlIGRlbGF5ZWQsIGFuZCB0aGlzIGlzIHRoZSB0YXNrIHdpdGggdGhlIGVhcmxpZXN0IGRlbGF5LlxuICAgICAgaWYgKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQpIHtcbiAgICAgICAgLy8gQ2FuY2VsIGFuIGV4aXN0aW5nIHRpbWVvdXQuXG4gICAgICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIH0gLy8gU2NoZWR1bGUgYSB0aW1lb3V0LlxuXG5cbiAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBzdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gZXhwaXJhdGlvblRpbWU7XG4gICAgcHVzaCh0YXNrUXVldWUsIG5ld1Rhc2spO1xuICAgIC8vIHdhaXQgdW50aWwgdGhlIG5leHQgdGltZSB3ZSB5aWVsZC5cblxuXG4gICAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCAmJiAhaXNQZXJmb3JtaW5nV29yaykge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdUYXNrO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbigpIHtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY29udGludWVFeGVjdXRpb24oKSB7XG5cbiAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCAmJiAhaXNQZXJmb3JtaW5nV29yaykge1xuICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUoKSB7XG4gIHJldHVybiBwZWVrKHRhc2tRdWV1ZSk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NhbmNlbENhbGxiYWNrKHRhc2spIHtcbiAgLy8gcmVtb3ZlIGZyb20gdGhlIHF1ZXVlIGJlY2F1c2UgeW91IGNhbid0IHJlbW92ZSBhcmJpdHJhcnkgbm9kZXMgZnJvbSBhblxuICAvLyBhcnJheSBiYXNlZCBoZWFwLCBvbmx5IHRoZSBmaXJzdCBvbmUuKVxuXG5cbiAgdGFzay5jYWxsYmFjayA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsKCkge1xuICByZXR1cm4gY3VycmVudFByaW9yaXR5TGV2ZWw7XG59XG5cbnZhciB1bnN0YWJsZV9yZXF1ZXN0UGFpbnQgPSByZXF1ZXN0UGFpbnQ7XG52YXIgdW5zdGFibGVfUHJvZmlsaW5nID0gIG51bGw7XG5cbmV4cG9ydHMudW5zdGFibGVfSWRsZVByaW9yaXR5ID0gSWRsZVByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSA9IEltbWVkaWF0ZVByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Mb3dQcmlvcml0eSA9IExvd1ByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSA9IE5vcm1hbFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Qcm9maWxpbmcgPSB1bnN0YWJsZV9Qcm9maWxpbmc7XG5leHBvcnRzLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gVXNlckJsb2NraW5nUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrID0gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s7XG5leHBvcnRzLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uID0gdW5zdGFibGVfY29udGludWVFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw7XG5leHBvcnRzLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlID0gdW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGU7XG5leHBvcnRzLnVuc3RhYmxlX25leHQgPSB1bnN0YWJsZV9uZXh0O1xuZXhwb3J0cy51bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbiA9IHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9yZXF1ZXN0UGFpbnQgPSB1bnN0YWJsZV9yZXF1ZXN0UGFpbnQ7XG5leHBvcnRzLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSA9IHVuc3RhYmxlX3J1bldpdGhQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayA9IHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s7XG5leHBvcnRzLnVuc3RhYmxlX3dyYXBDYWxsYmFjayA9IHVuc3RhYmxlX3dyYXBDYWxsYmFjaztcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXItdHJhY2luZy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBERUZBVUxUX1RIUkVBRF9JRCA9IDA7IC8vIENvdW50ZXJzIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy5cblxudmFyIGludGVyYWN0aW9uSURDb3VudGVyID0gMDtcbnZhciB0aHJlYWRJRENvdW50ZXIgPSAwOyAvLyBTZXQgb2YgY3VycmVudGx5IHRyYWNlZCBpbnRlcmFjdGlvbnMuXG4vLyBJbnRlcmFjdGlvbnMgXCJzdGFja1wiXHUyMDEzXG4vLyBNZWFuaW5nIHRoYXQgbmV3bHkgdHJhY2VkIGludGVyYWN0aW9ucyBhcmUgYXBwZW5kZWQgdG8gdGhlIHByZXZpb3VzbHkgYWN0aXZlIHNldC5cbi8vIFdoZW4gYW4gaW50ZXJhY3Rpb24gZ29lcyBvdXQgb2Ygc2NvcGUsIHRoZSBwcmV2aW91cyBzZXQgKGlmIGFueSkgaXMgcmVzdG9yZWQuXG5cbmV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYgPSBudWxsOyAvLyBMaXN0ZW5lcihzKSB0byBub3RpZnkgd2hlbiBpbnRlcmFjdGlvbnMgYmVnaW4gYW5kIGVuZC5cblxuZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYgPSBudWxsO1xuXG57XG4gIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYgPSB7XG4gICAgY3VycmVudDogbmV3IFNldCgpXG4gIH07XG4gIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2NsZWFyKGNhbGxiYWNrKSB7XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IG5ldyBTZXQoKTtcblxuICB0cnkge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEN1cnJlbnQoKSB7XG4gIHtcbiAgICByZXR1cm4gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRUaHJlYWRJRCgpIHtcbiAgcmV0dXJuICsrdGhyZWFkSURDb3VudGVyO1xufVxuZnVuY3Rpb24gdW5zdGFibGVfdHJhY2UobmFtZSwgdGltZXN0YW1wLCBjYWxsYmFjaykge1xuICB2YXIgdGhyZWFkSUQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IERFRkFVTFRfVEhSRUFEX0lEO1xuXG4gIHZhciBpbnRlcmFjdGlvbiA9IHtcbiAgICBfX2NvdW50OiAxLFxuICAgIGlkOiBpbnRlcmFjdGlvbklEQ291bnRlcisrLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgdGltZXN0YW1wOiB0aW1lc3RhbXBcbiAgfTtcbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7IC8vIFRyYWNlZCBpbnRlcmFjdGlvbnMgc2hvdWxkIHN0YWNrL2FjY3VtdWxhdGUuXG4gIC8vIFRvIGRvIHRoYXQsIGNsb25lIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cbiAgLy8gVGhlIHByZXZpb3VzIHNldCB3aWxsIGJlIHJlc3RvcmVkIHVwb24gY29tcGxldGlvbi5cblxuICB2YXIgaW50ZXJhY3Rpb25zID0gbmV3IFNldChwcmV2SW50ZXJhY3Rpb25zKTtcbiAgaW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IGludGVyYWN0aW9ucztcbiAgdmFyIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuICB2YXIgcmV0dXJuVmFsdWU7XG5cbiAgdHJ5IHtcbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsYmFjaygpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTsgLy8gSWYgbm8gYXN5bmMgd29yayB3YXMgc2NoZWR1bGVkIGZvciB0aGlzIGludGVyYWN0aW9uLFxuICAgICAgICAgIC8vIE5vdGlmeSBzdWJzY3JpYmVycyB0aGF0IGl0J3MgY29tcGxldGVkLlxuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuZnVuY3Rpb24gdW5zdGFibGVfd3JhcChjYWxsYmFjaykge1xuICB2YXIgdGhyZWFkSUQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IERFRkFVTFRfVEhSRUFEX0lEO1xuXG4gIHZhciB3cmFwcGVkSW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICB2YXIgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICBzdWJzY3JpYmVyLm9uV29ya1NjaGVkdWxlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gIH0gLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cbiAgLy8gVXBkYXRlIGFmdGVyIGNhbGxpbmcgc3Vic2NyaWJlcnMgaW4gY2FzZSBvZiBlcnJvci5cblxuXG4gIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gIH0pO1xuICB2YXIgaGFzUnVuID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gd3JhcHBlZCgpIHtcbiAgICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSB3cmFwcGVkSW50ZXJhY3Rpb25zO1xuICAgIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciByZXR1cm5WYWx1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoIWhhc1J1bikge1xuICAgICAgICAvLyBXZSBvbmx5IGV4cGVjdCBhIHdyYXBwZWQgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgb25jZSxcbiAgICAgICAgLy8gQnV0IGluIHRoZSBldmVudCB0aGF0IGl0J3MgZXhlY3V0ZWQgbW9yZSB0aGFuIG9uY2VcdTIwMTNcbiAgICAgICAgLy8gT25seSBkZWNyZW1lbnQgdGhlIG91dHN0YW5kaW5nIGludGVyYWN0aW9uIGNvdW50cyBvbmNlLlxuICAgICAgICBoYXNSdW4gPSB0cnVlOyAvLyBVcGRhdGUgcGVuZGluZyBhc3luYyBjb3VudHMgZm9yIGFsbCB3cmFwcGVkIGludGVyYWN0aW9ucy5cbiAgICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3Qgc2NoZWR1bGVkIGFzeW5jIHdvcmsgZm9yIGFueSBvZiB0aGVtLFxuICAgICAgICAvLyBNYXJrIHRoZW0gYXMgY29tcGxldGVkLlxuXG4gICAgICAgIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHdyYXBwZWQuY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrQ2FuY2VsZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBVcGRhdGUgcGVuZGluZyBhc3luYyBjb3VudHMgZm9yIGFsbCB3cmFwcGVkIGludGVyYWN0aW9ucy5cbiAgICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IHNjaGVkdWxlZCBhc3luYyB3b3JrIGZvciBhbnkgb2YgdGhlbSxcbiAgICAgIC8vIE1hcmsgdGhlbSBhcyBjb21wbGV0ZWQuXG4gICAgICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICBpZiAoc3Vic2NyaWJlciAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gd3JhcHBlZDtcbn1cblxudmFyIHN1YnNjcmliZXJzID0gbnVsbDtcblxue1xuICBzdWJzY3JpYmVycyA9IG5ldyBTZXQoKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAge1xuICAgIHN1YnNjcmliZXJzLmFkZChzdWJzY3JpYmVyKTtcblxuICAgIGlmIChzdWJzY3JpYmVycy5zaXplID09PSAxKSB7XG4gICAgICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50ID0ge1xuICAgICAgICBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZDogb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQsXG4gICAgICAgIG9uSW50ZXJhY3Rpb25UcmFjZWQ6IG9uSW50ZXJhY3Rpb25UcmFjZWQsXG4gICAgICAgIG9uV29ya0NhbmNlbGVkOiBvbldvcmtDYW5jZWxlZCxcbiAgICAgICAgb25Xb3JrU2NoZWR1bGVkOiBvbldvcmtTY2hlZHVsZWQsXG4gICAgICAgIG9uV29ya1N0YXJ0ZWQ6IG9uV29ya1N0YXJ0ZWQsXG4gICAgICAgIG9uV29ya1N0b3BwZWQ6IG9uV29ya1N0b3BwZWRcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB1bnN0YWJsZV91bnN1YnNjcmliZShzdWJzY3JpYmVyKSB7XG4gIHtcbiAgICBzdWJzY3JpYmVycy5kZWxldGUoc3Vic2NyaWJlcik7XG5cbiAgICBpZiAoc3Vic2NyaWJlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya0NhbmNlbGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya0NhbmNlbGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmV4cG9ydHMudW5zdGFibGVfY2xlYXIgPSB1bnN0YWJsZV9jbGVhcjtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudCA9IHVuc3RhYmxlX2dldEN1cnJlbnQ7XG5leHBvcnRzLnVuc3RhYmxlX2dldFRocmVhZElEID0gdW5zdGFibGVfZ2V0VGhyZWFkSUQ7XG5leHBvcnRzLnVuc3RhYmxlX3N1YnNjcmliZSA9IHVuc3RhYmxlX3N1YnNjcmliZTtcbmV4cG9ydHMudW5zdGFibGVfdHJhY2UgPSB1bnN0YWJsZV90cmFjZTtcbmV4cG9ydHMudW5zdGFibGVfdW5zdWJzY3JpYmUgPSB1bnN0YWJsZV91bnN1YnNjcmliZTtcbmV4cG9ydHMudW5zdGFibGVfd3JhcCA9IHVuc3RhYmxlX3dyYXA7XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci10cmFjaW5nLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWRvbS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbnZhciBTY2hlZHVsZXIgPSByZXF1aXJlKCdzY2hlZHVsZXInKTtcbnZhciB0cmFjaW5nID0gcmVxdWlyZSgnc2NoZWR1bGVyL3RyYWNpbmcnKTtcblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbi8vIGJ5IGNhbGxzIHRvIHRoZXNlIG1ldGhvZHMgYnkgYSBCYWJlbCBwbHVnaW4uXG4vL1xuLy8gSW4gUFJPRCAob3IgaW4gcGFja2FnZXMgd2l0aG91dCBhY2Nlc3MgdG8gUmVhY3QgaW50ZXJuYWxzKSxcbi8vIHRoZXkgYXJlIGxlZnQgYXMgdGhleSBhcmUgaW5zdGVhZC5cblxuZnVuY3Rpb24gd2Fybihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnd2FybicsIGZvcm1hdCwgYXJncyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfVxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiAnJyArIGl0ZW07XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG5pZiAoIVJlYWN0KSB7XG4gIHtcbiAgICB0aHJvdyBFcnJvciggXCJSZWFjdERPTSB3YXMgbG9hZGVkIGJlZm9yZSBSZWFjdC4gTWFrZSBzdXJlIHlvdSBsb2FkIHRoZSBSZWFjdCBwYWNrYWdlIGJlZm9yZSBsb2FkaW5nIFJlYWN0RE9NLlwiICk7XG4gIH1cbn1cblxudmFyIEZ1bmN0aW9uQ29tcG9uZW50ID0gMDtcbnZhciBDbGFzc0NvbXBvbmVudCA9IDE7XG52YXIgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCA9IDI7IC8vIEJlZm9yZSB3ZSBrbm93IHdoZXRoZXIgaXQgaXMgZnVuY3Rpb24gb3IgY2xhc3NcblxudmFyIEhvc3RSb290ID0gMzsgLy8gUm9vdCBvZiBhIGhvc3QgdHJlZS4gQ291bGQgYmUgbmVzdGVkIGluc2lkZSBhbm90aGVyIG5vZGUuXG5cbnZhciBIb3N0UG9ydGFsID0gNDsgLy8gQSBzdWJ0cmVlLiBDb3VsZCBiZSBhbiBlbnRyeSBwb2ludCB0byBhIGRpZmZlcmVudCByZW5kZXJlci5cblxudmFyIEhvc3RDb21wb25lbnQgPSA1O1xudmFyIEhvc3RUZXh0ID0gNjtcbnZhciBGcmFnbWVudCA9IDc7XG52YXIgTW9kZSA9IDg7XG52YXIgQ29udGV4dENvbnN1bWVyID0gOTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSAxMDtcbnZhciBGb3J3YXJkUmVmID0gMTE7XG52YXIgUHJvZmlsZXIgPSAxMjtcbnZhciBTdXNwZW5zZUNvbXBvbmVudCA9IDEzO1xudmFyIE1lbW9Db21wb25lbnQgPSAxNDtcbnZhciBTaW1wbGVNZW1vQ29tcG9uZW50ID0gMTU7XG52YXIgTGF6eUNvbXBvbmVudCA9IDE2O1xudmFyIEluY29tcGxldGVDbGFzc0NvbXBvbmVudCA9IDE3O1xudmFyIERlaHlkcmF0ZWRGcmFnbWVudCA9IDE4O1xudmFyIFN1c3BlbnNlTGlzdENvbXBvbmVudCA9IDE5O1xudmFyIEZ1bmRhbWVudGFsQ29tcG9uZW50ID0gMjA7XG52YXIgU2NvcGVDb21wb25lbnQgPSAyMTtcbnZhciBCbG9jayA9IDIyO1xudmFyIE9mZnNjcmVlbkNvbXBvbmVudCA9IDIzO1xudmFyIExlZ2FjeUhpZGRlbkNvbXBvbmVudCA9IDI0O1xuXG4vLyBGaWx0ZXIgY2VydGFpbiBET00gYXR0cmlidXRlcyAoZS5nLiBzcmMsIGhyZWYpIGlmIHRoZWlyIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncy5cblxudmFyIGVuYWJsZVByb2ZpbGVyVGltZXIgPSB0cnVlOyAvLyBSZWNvcmQgZHVyYXRpb25zIGZvciBjb21taXQgYW5kIHBhc3NpdmUgZWZmZWN0cyBwaGFzZXMuXG5cbnZhciBlbmFibGVGdW5kYW1lbnRhbEFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgU2NvcGUgc3VwcG9ydC5cbnZhciBlbmFibGVOZXdSZWNvbmNpbGVyID0gZmFsc2U7IC8vIEVycm9ycyB0aGF0IGFyZSB0aHJvd24gd2hpbGUgdW5tb3VudGluZyAob3IgYWZ0ZXIgaW4gdGhlIGNhc2Ugb2YgcGFzc2l2ZSBlZmZlY3RzKVxudmFyIHdhcm5BYm91dFN0cmluZ1JlZnMgPSBmYWxzZTtcblxudmFyIGFsbE5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoKTtcbi8qKlxuICogTWFwcGluZyBmcm9tIHJlZ2lzdHJhdGlvbiBuYW1lIHRvIGV2ZW50IG5hbWVcbiAqL1xuXG5cbnZhciByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzID0ge307XG4vKipcbiAqIE1hcHBpbmcgZnJvbSBsb3dlcmNhc2UgcmVnaXN0cmF0aW9uIG5hbWVzIHRvIHRoZSBwcm9wZXJseSBjYXNlZCB2ZXJzaW9uLFxuICogdXNlZCB0byB3YXJuIGluIHRoZSBjYXNlIG9mIG1pc3NpbmcgZXZlbnQgaGFuZGxlcnMuIEF2YWlsYWJsZVxuICogb25seSBpbiB0cnVlLlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuXG52YXIgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyA9ICB7fSA7IC8vIFRydXN0IHRoZSBkZXZlbG9wZXIgdG8gb25seSB1c2UgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyBpbiB0cnVlXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUgKyAnQ2FwdHVyZScsIGRlcGVuZGVuY2llcyk7XG59XG5mdW5jdGlvbiByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICB7XG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0pIHtcbiAgICAgIGVycm9yKCdFdmVudFJlZ2lzdHJ5OiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSAnICsgJ3JlZ2lzdHJhdGlvbiBuYW1lLCBgJXNgLicsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBkZXBlbmRlbmNpZXM7XG5cbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHJlZ2lzdHJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXSA9IHJlZ2lzdHJhdGlvbk5hbWU7XG5cbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSA9PT0gJ29uRG91YmxlQ2xpY2snKSB7XG4gICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLm9uZGJsY2xpY2sgPSByZWdpc3RyYXRpb25OYW1lO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgYWxsTmF0aXZlRXZlbnRzLmFkZChkZXBlbmRlbmNpZXNbaV0pO1xuICB9XG59XG5cbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKTtcblxuLy8gQSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4vLyBJdCBpcyBoYW5kbGVkIGJ5IFJlYWN0IHNlcGFyYXRlbHkgYW5kIHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG52YXIgUkVTRVJWRUQgPSAwOyAvLyBBIHNpbXBsZSBzdHJpbmcgYXR0cmlidXRlLlxuLy8gQXR0cmlidXRlcyB0aGF0IGFyZW4ndCBpbiB0aGUgZmlsdGVyIGFyZSBwcmVzdW1lZCB0byBoYXZlIHRoaXMgdHlwZS5cblxudmFyIFNUUklORyA9IDE7IC8vIEEgc3RyaW5nIGF0dHJpYnV0ZSB0aGF0IGFjY2VwdHMgYm9vbGVhbnMgaW4gUmVhY3QuIEluIEhUTUwsIHRoZXNlIGFyZSBjYWxsZWRcbi8vIFwiZW51bWVyYXRlZFwiIGF0dHJpYnV0ZXMgd2l0aCBcInRydWVcIiBhbmQgXCJmYWxzZVwiIGFzIHBvc3NpYmxlIHZhbHVlcy5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHNldCB0byBhIFwidHJ1ZVwiIHN0cmluZy5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBcImZhbHNlXCIgc3RyaW5nLlxuXG52YXIgQk9PTEVBTklTSF9TVFJJTkcgPSAyOyAvLyBBIHJlYWwgYm9vbGVhbiBhdHRyaWJ1dGUuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBwcmVzZW50IChzZXQgZWl0aGVyIHRvIGFuIGVtcHR5IHN0cmluZyBvciBpdHMgbmFtZSkuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgb21pdHRlZC5cblxudmFyIEJPT0xFQU4gPSAzOyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIGZsYWcgYXMgd2VsbCBhcyB3aXRoIGEgdmFsdWUuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBwcmVzZW50IChzZXQgZWl0aGVyIHRvIGFuIGVtcHR5IHN0cmluZyBvciBpdHMgbmFtZSkuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgb21pdHRlZC5cbi8vIEZvciBhbnkgb3RoZXIgdmFsdWUsIHNob3VsZCBiZSBwcmVzZW50IHdpdGggdGhhdCB2YWx1ZS5cblxudmFyIE9WRVJMT0FERURfQk9PTEVBTiA9IDQ7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IG11c3QgYmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIG51bWVyaWMuXG4vLyBXaGVuIGZhbHN5LCBpdCBzaG91bGQgYmUgcmVtb3ZlZC5cblxudmFyIE5VTUVSSUMgPSA1OyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBtdXN0IGJlIHBvc2l0aXZlIG51bWVyaWMgb3IgcGFyc2UgYXMgYSBwb3NpdGl2ZSBudW1lcmljLlxuLy8gV2hlbiBmYWxzeSwgaXQgc2hvdWxkIGJlIHJlbW92ZWQuXG5cbnZhciBQT1NJVElWRV9OVU1FUklDID0gNjtcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xudmFyIEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgPSBcIjpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcIjtcbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG52YXIgQVRUUklCVVRFX05BTUVfQ0hBUiA9IEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgKyBcIlxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXCI7XG52YXIgUk9PVF9BVFRSSUJVVEVfTkFNRSA9ICdkYXRhLXJlYWN0cm9vdCc7XG52YXIgVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVggPSBuZXcgUmVnRXhwKCdeWycgKyBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSICsgJ11bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fTtcbnZhciB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGlzQXR0cmlidXRlTmFtZVNhZmUoYXR0cmlidXRlTmFtZSkge1xuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWC50ZXN0KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuXG4gIHtcbiAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgbmFtZTogYCVzYCcsIGF0dHJpYnV0ZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkSWdub3JlQXR0cmlidXRlKG5hbWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQ7XG4gIH1cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPiAyICYmIChuYW1lWzBdID09PSAnbycgfHwgbmFtZVswXSA9PT0gJ08nKSAmJiAobmFtZVsxXSA9PT0gJ24nIHx8IG5hbWVbMV0gPT09ICdOJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICBjYXNlICdmdW5jdGlvbic6IC8vICRGbG93SXNzdWUgc3ltYm9sIGlzIHBlcmZlY3RseSB2YWxpZCBoZXJlXG5cbiAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAhcHJvcGVydHlJbmZvLmFjY2VwdHNCb29sZWFucztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJlZml4ID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDUpO1xuICAgICAgICAgIHJldHVybiBwcmVmaXggIT09ICdkYXRhLScgJiYgcHJlZml4ICE9PSAnYXJpYS0nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcblxuICAgIHN3aXRjaCAocHJvcGVydHlJbmZvLnR5cGUpIHtcbiAgICAgIGNhc2UgQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuICF2YWx1ZTtcblxuICAgICAgY2FzZSBPVkVSTE9BREVEX0JPT0xFQU46XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gZmFsc2U7XG5cbiAgICAgIGNhc2UgTlVNRVJJQzpcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKTtcblxuICAgICAgY2FzZSBQT1NJVElWRV9OVU1FUklDOlxuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUluZm8obmFtZSkge1xuICByZXR1cm4gcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHByb3BlcnRpZXNbbmFtZV0gOiBudWxsO1xufVxuXG5mdW5jdGlvbiBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgdHlwZSwgbXVzdFVzZVByb3BlcnR5LCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVOYW1lc3BhY2UsIHNhbml0aXplVVJMLCByZW1vdmVFbXB0eVN0cmluZykge1xuICB0aGlzLmFjY2VwdHNCb29sZWFucyA9IHR5cGUgPT09IEJPT0xFQU5JU0hfU1RSSU5HIHx8IHR5cGUgPT09IEJPT0xFQU4gfHwgdHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOO1xuICB0aGlzLmF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lO1xuICB0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZSA9IGF0dHJpYnV0ZU5hbWVzcGFjZTtcbiAgdGhpcy5tdXN0VXNlUHJvcGVydHkgPSBtdXN0VXNlUHJvcGVydHk7XG4gIHRoaXMucHJvcGVydHlOYW1lID0gbmFtZTtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5zYW5pdGl6ZVVSTCA9IHNhbml0aXplVVJMO1xuICB0aGlzLnJlbW92ZUVtcHR5U3RyaW5nID0gcmVtb3ZlRW1wdHlTdHJpbmc7XG59IC8vIFdoZW4gYWRkaW5nIGF0dHJpYnV0ZXMgdG8gdGhpcyBsaXN0LCBiZSBzdXJlIHRvIGFsc28gYWRkIHRoZW0gdG9cbi8vIHRoZSBgcG9zc2libGVTdGFuZGFyZE5hbWVzYCBtb2R1bGUgdG8gZW5zdXJlIGNhc2luZyBhbmQgaW5jb3JyZWN0XG4vLyBuYW1lIHdhcm5pbmdzLlxuXG5cbnZhciBwcm9wZXJ0aWVzID0ge307IC8vIFRoZXNlIHByb3BzIGFyZSByZXNlcnZlZCBieSBSZWFjdC4gVGhleSBzaG91bGRuJ3QgYmUgd3JpdHRlbiB0byB0aGUgRE9NLlxuXG52YXIgcmVzZXJ2ZWRQcm9wcyA9IFsnY2hpbGRyZW4nLCAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLCAvLyBUT0RPOiBUaGlzIHByZXZlbnRzIHRoZSBhc3NpZ25tZW50IG9mIGRlZmF1bHRWYWx1ZSB0byByZWd1bGFyXG4vLyBlbGVtZW50cyAobm90IGp1c3QgaW5wdXRzKS4gTm93IHRoYXQgUmVhY3RET01JbnB1dCBhc3NpZ25zIHRvIHRoZVxuLy8gZGVmYXVsdFZhbHVlIHByb3BlcnR5IC0tIGRvIHdlIG5lZWQgdGhpcz9cbidkZWZhdWx0VmFsdWUnLCAnZGVmYXVsdENoZWNrZWQnLCAnaW5uZXJIVE1MJywgJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZycsICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnLCAnc3R5bGUnXTtcbnJlc2VydmVkUHJvcHMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBSRVNFUlZFRCwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIEEgZmV3IFJlYWN0IHN0cmluZyBhdHRyaWJ1dGVzIGhhdmUgYSBkaWZmZXJlbnQgbmFtZS5cbi8vIFRoaXMgaXMgYSBtYXBwaW5nIGZyb20gUmVhY3QgcHJvcCBuYW1lcyB0byB0aGUgYXR0cmlidXRlIG5hbWVzLlxuXG5bWydhY2NlcHRDaGFyc2V0JywgJ2FjY2VwdC1jaGFyc2V0J10sIFsnY2xhc3NOYW1lJywgJ2NsYXNzJ10sIFsnaHRtbEZvcicsICdmb3InXSwgWydodHRwRXF1aXYnLCAnaHR0cC1lcXVpdiddXS5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBuYW1lID0gX3JlZlswXSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUgPSBfcmVmWzFdO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgXCJlbnVtZXJhdGVkXCIgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgYWNjZXB0IFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIuXG4vLyBJbiBSZWFjdCwgd2UgbGV0IHVzZXJzIHBhc3MgYHRydWVgIGFuZCBgZmFsc2VgIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5XG4vLyB0aGVzZSBhcmVuJ3QgYm9vbGVhbiBhdHRyaWJ1dGVzICh0aGV5IGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MpLlxuXG5bJ2NvbnRlbnRFZGl0YWJsZScsICdkcmFnZ2FibGUnLCAnc3BlbGxDaGVjaycsICd2YWx1ZSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTklTSF9TVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBcImVudW1lcmF0ZWRcIiBTVkcgYXR0cmlidXRlcyB0aGF0IGFjY2VwdCBcInRydWVcIiBhbmQgXCJmYWxzZVwiLlxuLy8gSW4gUmVhY3QsIHdlIGxldCB1c2VycyBwYXNzIGB0cnVlYCBhbmQgYGZhbHNlYCBldmVuIHRob3VnaCB0ZWNobmljYWxseVxuLy8gdGhlc2UgYXJlbid0IGJvb2xlYW4gYXR0cmlidXRlcyAodGhleSBhcmUgY29lcmNlZCB0byBzdHJpbmdzKS5cbi8vIFNpbmNlIHRoZXNlIGFyZSBTVkcgYXR0cmlidXRlcywgdGhlaXIgYXR0cmlidXRlIG5hbWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cblxuWydhdXRvUmV2ZXJzZScsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2ZvY3VzYWJsZScsICdwcmVzZXJ2ZUFscGhhJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOSVNIX1NUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGJvb2xlYW4gYXR0cmlidXRlcy5cblxuWydhbGxvd0Z1bGxTY3JlZW4nLCAnYXN5bmMnLCAvLyBOb3RlOiB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IHByZXZlbnRzIGl0IGZyb20gYmVpbmcgd3JpdHRlbiB0byB0aGUgRE9NXG4vLyBvbiB0aGUgY2xpZW50IHNpZGUgYmVjYXVzZSB0aGUgYnJvd3NlcnMgYXJlIGluY29uc2lzdGVudC4gSW5zdGVhZCB3ZSBjYWxsIGZvY3VzKCkuXG4nYXV0b0ZvY3VzJywgJ2F1dG9QbGF5JywgJ2NvbnRyb2xzJywgJ2RlZmF1bHQnLCAnZGVmZXInLCAnZGlzYWJsZWQnLCAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnLCAnZGlzYWJsZVJlbW90ZVBsYXliYWNrJywgJ2Zvcm1Ob1ZhbGlkYXRlJywgJ2hpZGRlbicsICdsb29wJywgJ25vTW9kdWxlJywgJ25vVmFsaWRhdGUnLCAnb3BlbicsICdwbGF5c0lubGluZScsICdyZWFkT25seScsICdyZXF1aXJlZCcsICdyZXZlcnNlZCcsICdzY29wZWQnLCAnc2VhbWxlc3MnLCAvLyBNaWNyb2RhdGFcbidpdGVtU2NvcGUnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU4sIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSB0aGUgZmV3IFJlYWN0IHByb3BzIHRoYXQgd2Ugc2V0IGFzIERPTSBwcm9wZXJ0aWVzXG4vLyByYXRoZXIgdGhhbiBhdHRyaWJ1dGVzLiBUaGVzZSBhcmUgYWxsIGJvb2xlYW5zLlxuXG5bJ2NoZWNrZWQnLCAvLyBOb3RlOiBgb3B0aW9uLnNlbGVjdGVkYCBpcyBub3QgdXBkYXRlZCBpZiBgc2VsZWN0Lm11bHRpcGxlYCBpc1xuLy8gZGlzYWJsZWQgd2l0aCBgcmVtb3ZlQXR0cmlidXRlYC4gV2UgaGF2ZSBzcGVjaWFsIGxvZ2ljIGZvciBoYW5kbGluZyB0aGlzLlxuJ211bHRpcGxlJywgJ211dGVkJywgJ3NlbGVjdGVkJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOLCB0cnVlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgYXJlIFwib3ZlcmxvYWRlZCBib29sZWFuc1wiOiB0aGV5IGJlaGF2ZSBsaWtlXG4vLyBib29sZWFucywgYnV0IGNhbiBhbHNvIGFjY2VwdCBhIHN0cmluZyB2YWx1ZS5cblxuWydjYXB0dXJlJywgJ2Rvd25sb2FkJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBPVkVSTE9BREVEX0JPT0xFQU4sIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXJzLlxuXG5bJ2NvbHMnLCAncm93cycsICdzaXplJywgJ3NwYW4nIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFBPU0lUSVZFX05VTUVSSUMsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgbXVzdCBiZSBudW1iZXJzLlxuXG5bJ3Jvd1NwYW4nLCAnc3RhcnQnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIE5VTUVSSUMsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7XG52YXIgQ0FNRUxJWkUgPSAvW1xcLVxcOl0oW2Etel0pL2c7XG5cbnZhciBjYXBpdGFsaXplID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gIHJldHVybiB0b2tlblsxXS50b1VwcGVyQ2FzZSgpO1xufTsgLy8gVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIFNWRyBhdHRyaWJ1dGVzIHRoYXQgbmVlZCBzcGVjaWFsIGNhc2luZywgbmFtZXNwYWNpbmcsXG4vLyBvciBib29sZWFuIHZhbHVlIGFzc2lnbm1lbnQuIFJlZ3VsYXIgYXR0cmlidXRlcyB0aGF0IGp1c3QgYWNjZXB0IHN0cmluZ3Ncbi8vIGFuZCBoYXZlIHRoZSBzYW1lIG5hbWVzIGFyZSBvbWl0dGVkLCBqdXN0IGxpa2UgaW4gdGhlIEhUTUwgYXR0cmlidXRlIGZpbHRlci5cbi8vIFNvbWUgb2YgdGhlc2UgYXR0cmlidXRlcyBjYW4gYmUgaGFyZCB0byBmaW5kLiBUaGlzIGxpc3Qgd2FzIGNyZWF0ZWQgYnlcbi8vIHNjcmFwaW5nIHRoZSBNRE4gZG9jdW1lbnRhdGlvbi5cblxuXG5bJ2FjY2VudC1oZWlnaHQnLCAnYWxpZ25tZW50LWJhc2VsaW5lJywgJ2FyYWJpYy1mb3JtJywgJ2Jhc2VsaW5lLXNoaWZ0JywgJ2NhcC1oZWlnaHQnLCAnY2xpcC1wYXRoJywgJ2NsaXAtcnVsZScsICdjb2xvci1pbnRlcnBvbGF0aW9uJywgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycsICdjb2xvci1wcm9maWxlJywgJ2NvbG9yLXJlbmRlcmluZycsICdkb21pbmFudC1iYXNlbGluZScsICdlbmFibGUtYmFja2dyb3VuZCcsICdmaWxsLW9wYWNpdHknLCAnZmlsbC1ydWxlJywgJ2Zsb29kLWNvbG9yJywgJ2Zsb29kLW9wYWNpdHknLCAnZm9udC1mYW1pbHknLCAnZm9udC1zaXplJywgJ2ZvbnQtc2l6ZS1hZGp1c3QnLCAnZm9udC1zdHJldGNoJywgJ2ZvbnQtc3R5bGUnLCAnZm9udC12YXJpYW50JywgJ2ZvbnQtd2VpZ2h0JywgJ2dseXBoLW5hbWUnLCAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCcsICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcsICdob3Jpei1hZHYteCcsICdob3Jpei1vcmlnaW4teCcsICdpbWFnZS1yZW5kZXJpbmcnLCAnbGV0dGVyLXNwYWNpbmcnLCAnbGlnaHRpbmctY29sb3InLCAnbWFya2VyLWVuZCcsICdtYXJrZXItbWlkJywgJ21hcmtlci1zdGFydCcsICdvdmVybGluZS1wb3NpdGlvbicsICdvdmVybGluZS10aGlja25lc3MnLCAncGFpbnQtb3JkZXInLCAncGFub3NlLTEnLCAncG9pbnRlci1ldmVudHMnLCAncmVuZGVyaW5nLWludGVudCcsICdzaGFwZS1yZW5kZXJpbmcnLCAnc3RvcC1jb2xvcicsICdzdG9wLW9wYWNpdHknLCAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbicsICdzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcycsICdzdHJva2UtZGFzaGFycmF5JywgJ3N0cm9rZS1kYXNob2Zmc2V0JywgJ3N0cm9rZS1saW5lY2FwJywgJ3N0cm9rZS1saW5lam9pbicsICdzdHJva2UtbWl0ZXJsaW1pdCcsICdzdHJva2Utb3BhY2l0eScsICdzdHJva2Utd2lkdGgnLCAndGV4dC1hbmNob3InLCAndGV4dC1kZWNvcmF0aW9uJywgJ3RleHQtcmVuZGVyaW5nJywgJ3VuZGVybGluZS1wb3NpdGlvbicsICd1bmRlcmxpbmUtdGhpY2tuZXNzJywgJ3VuaWNvZGUtYmlkaScsICd1bmljb2RlLXJhbmdlJywgJ3VuaXRzLXBlci1lbScsICd2LWFscGhhYmV0aWMnLCAndi1oYW5naW5nJywgJ3YtaWRlb2dyYXBoaWMnLCAndi1tYXRoZW1hdGljYWwnLCAndmVjdG9yLWVmZmVjdCcsICd2ZXJ0LWFkdi15JywgJ3ZlcnQtb3JpZ2luLXgnLCAndmVydC1vcmlnaW4teScsICd3b3JkLXNwYWNpbmcnLCAnd3JpdGluZy1tb2RlJywgJ3htbG5zOnhsaW5rJywgJ3gtaGVpZ2h0JyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBTdHJpbmcgU1ZHIGF0dHJpYnV0ZXMgd2l0aCB0aGUgeGxpbmsgbmFtZXNwYWNlLlxuXG5bJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lLnJlcGxhY2UoQ0FNRUxJWkUsIGNhcGl0YWxpemUpO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bWwgbmFtZXNwYWNlLlxuXG5bJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lLnJlcGxhY2UoQ0FNRUxJWkUsIGNhcGl0YWxpemUpO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScsIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXR0cmlidXRlIGV4aXN0cyBib3RoIGluIEhUTUwgYW5kIFNWRy5cbi8vIFRoZSBhdHRyaWJ1dGUgbmFtZSBpcyBjYXNlLXNlbnNpdGl2ZSBpbiBTVkcgc28gd2UgY2FuJ3QganVzdCB1c2Vcbi8vIHRoZSBSZWFjdCBuYW1lIGxpa2Ugd2UgZG8gZm9yIGF0dHJpYnV0ZXMgdGhhdCBleGlzdCBvbmx5IGluIEhUTUwuXG5cblsndGFiSW5kZXgnLCAnY3Jvc3NPcmlnaW4nXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHByb3BlcnRpZXNbYXR0cmlidXRlTmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKGF0dHJpYnV0ZU5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXR0cmlidXRlcyBhY2NlcHQgVVJMcy4gVGhlc2UgbXVzdCBub3QgYWxsb3cgamF2YXNjcmlwdDogVVJMUy5cbi8vIFRoZXNlIHdpbGwgYWxzbyBuZWVkIHRvIGFjY2VwdCBUcnVzdGVkIFR5cGVzIG9iamVjdCBpbiB0aGUgZnV0dXJlLlxuXG52YXIgeGxpbmtIcmVmID0gJ3hsaW5rSHJlZic7XG5wcm9wZXJ0aWVzW3hsaW5rSHJlZl0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKCd4bGlua0hyZWYnLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbid4bGluazpocmVmJywgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCB0cnVlLCAvLyBzYW5pdGl6ZVVSTFxuZmFsc2UpO1xuWydzcmMnLCAnaHJlZicsICdhY3Rpb24nLCAnZm9ybUFjdGlvbiddLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcHJvcGVydGllc1thdHRyaWJ1dGVOYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoYXR0cmlidXRlTmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgdHJ1ZSwgLy8gc2FuaXRpemVVUkxcbiAgdHJ1ZSk7XG59KTtcblxuLy8gYW5kIGFueSBuZXdsaW5lIG9yIHRhYiBhcmUgZmlsdGVyZWQgb3V0IGFzIGlmIHRoZXkncmUgbm90IHBhcnQgb2YgdGhlIFVSTC5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsLXBhcnNpbmdcbi8vIFRhYiBvciBuZXdsaW5lIGFyZSBkZWZpbmVkIGFzIFxcclxcblxcdDpcbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNhc2NpaS10YWItb3ItbmV3bGluZVxuLy8gQSBDMCBjb250cm9sIGlzIGEgY29kZSBwb2ludCBpbiB0aGUgcmFuZ2UgXFx1MDAwMCBOVUxMIHRvIFxcdTAwMUZcbi8vIElORk9STUFUSU9OIFNFUEFSQVRPUiBPTkUsIGluY2x1c2l2ZTpcbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNjMC1jb250cm9sLW9yLXNwYWNlXG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxudmFyIGlzSmF2YVNjcmlwdFByb3RvY29sID0gL15bXFx1MDAwMC1cXHUwMDFGIF0qaltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSp2W1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnNbXFxyXFxuXFx0XSpjW1xcclxcblxcdF0qcltcXHJcXG5cXHRdKmlbXFxyXFxuXFx0XSpwW1xcclxcblxcdF0qdFtcXHJcXG5cXHRdKlxcOi9pO1xudmFyIGRpZFdhcm4gPSBmYWxzZTtcblxuZnVuY3Rpb24gc2FuaXRpemVVUkwodXJsKSB7XG4gIHtcbiAgICBpZiAoIWRpZFdhcm4gJiYgaXNKYXZhU2NyaXB0UHJvdG9jb2wudGVzdCh1cmwpKSB7XG4gICAgICBkaWRXYXJuID0gdHJ1ZTtcblxuICAgICAgZXJyb3IoJ0EgZnV0dXJlIHZlcnNpb24gb2YgUmVhY3Qgd2lsbCBibG9jayBqYXZhc2NyaXB0OiBVUkxzIGFzIGEgc2VjdXJpdHkgcHJlY2F1dGlvbi4gJyArICdVc2UgZXZlbnQgaGFuZGxlcnMgaW5zdGVhZCBpZiB5b3UgY2FuLiBJZiB5b3UgbmVlZCB0byBnZW5lcmF0ZSB1bnNhZmUgSFRNTCB0cnkgJyArICd1c2luZyBkYW5nZXJvdXNseVNldElubmVySFRNTCBpbnN0ZWFkLiBSZWFjdCB3YXMgcGFzc2VkICVzLicsIEpTT04uc3RyaW5naWZ5KHVybCkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLiBPbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqIFRoZSBcImV4cGVjdGVkXCIgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhpbnQgb2Ygd2hhdCB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMuXG4gKiBTb21lIHByb3BlcnRpZXMgaGF2ZSBtdWx0aXBsZSBlcXVpdmFsZW50IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvKSB7XG4gIHtcbiAgICBpZiAocHJvcGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eSkge1xuICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWU7XG4gICAgICByZXR1cm4gbm9kZVtwcm9wZXJ0eU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIHByb3BlcnR5SW5mby5zYW5pdGl6ZVVSTCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGZ1bGx5IGRpc2FibGVkIGphdmFzY3JpcHQ6IFVSTHMsIGFuZCBpZlxuICAgICAgICAvLyB0aGUgaHlkcmF0aW9uIGlzIHN1Y2Nlc3NmdWwgb2YgYSBqYXZhc2NyaXB0OiBVUkwsIHdlXG4gICAgICAgIC8vIHN0aWxsIHdhbnQgdG8gd2FybiBvbiB0aGUgY2xpZW50LlxuICAgICAgICBzYW5pdGl6ZVVSTCgnJyArIGV4cGVjdGVkKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZTtcbiAgICAgIHZhciBzdHJpbmdWYWx1ZSA9IG51bGw7XG5cbiAgICAgIGlmIChwcm9wZXJ0eUluZm8udHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOKSB7XG4gICAgICAgIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgICAvLyBXZSBoYWQgYW4gYXR0cmlidXRlIGJ1dCBzaG91bGRuJ3QgaGF2ZSBoYWQgb25lLCBzbyByZWFkIGl0XG4gICAgICAgICAgLy8gZm9yIHRoZSBlcnJvciBtZXNzYWdlLlxuICAgICAgICAgIHJldHVybiBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8udHlwZSA9PT0gQk9PTEVBTikge1xuICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGEgYm9vbGVhbiwgaXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgdmFsdWUgaXNcbiAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIGV4cGVjdGVkLlxuICAgICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgICAgfSAvLyBFdmVuIGlmIHRoaXMgcHJvcGVydHkgdXNlcyBhIG5hbWVzcGFjZSB3ZSB1c2UgZ2V0QXR0cmlidXRlXG4gICAgICAgIC8vIGJlY2F1c2Ugd2UgYXNzdW1lIGl0cyBuYW1lc3BhY2VkIG5hbWUgaXMgdGhlIHNhbWUgYXMgb3VyIGNvbmZpZy5cbiAgICAgICAgLy8gVG8gdXNlIGdldEF0dHJpYnV0ZU5TIHdlIG5lZWQgdGhlIGxvY2FsIG5hbWUgd2hpY2ggd2UgZG9uJ3QgaGF2ZVxuICAgICAgICAvLyBpbiBvdXIgY29uZmlnIGF0bS5cblxuXG4gICAgICAgIHN0cmluZ1ZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZSA9PT0gbnVsbCA/IGV4cGVjdGVkIDogc3RyaW5nVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHN0cmluZ1ZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3IgYSBhdHRyaWJ1dGUgb24gYSBub2RlLiBPbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqIFRoZSB0aGlyZCBhcmd1bWVudCBpcyB1c2VkIGFzIGEgaGludCBvZiB3aGF0IHRoZSBleHBlY3RlZCB2YWx1ZSBpcy4gU29tZVxuICogYXR0cmlidXRlcyBoYXZlIG11bHRpcGxlIGVxdWl2YWxlbnQgdmFsdWVzLlxuICovXG5cbmZ1bmN0aW9uIGdldFZhbHVlRm9yQXR0cmlidXRlKG5vZGUsIG5hbWUsIGV4cGVjdGVkKSB7XG4gIHtcbiAgICBpZiAoIWlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHRoZSBvYmplY3QgaXMgYW4gb3BhcXVlIHJlZmVyZW5jZSBJRCwgaXQncyBleHBlY3RlZCB0aGF0XG4gICAgLy8gdGhlIG5leHQgcHJvcCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgc2VydmVyIHZhbHVlLCBzbyBqdXN0IHJldHVyblxuICAgIC8vIGV4cGVjdGVkXG5cblxuICAgIGlmIChpc09wYXF1ZUh5ZHJhdGluZ09iamVjdChleHBlY3RlZCkpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICB9XG5cbiAgICBpZiAoIW5vZGUuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cbiAgICBpZiAodmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuXG5mdW5jdGlvbiBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUsIHZhbHVlLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKG5hbWUpO1xuXG4gIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1dGUobmFtZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHZhbHVlID0gbnVsbDtcbiAgfSAvLyBJZiB0aGUgcHJvcCBpc24ndCBpbiB0aGUgc3BlY2lhbCBsaXN0LCB0cmVhdCBpdCBhcyBhIHNpbXBsZSBhdHRyaWJ1dGUuXG5cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcgfHwgcHJvcGVydHlJbmZvID09PSBudWxsKSB7XG4gICAgaWYgKGlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgIHZhciBfYXR0cmlidXRlTmFtZSA9IG5hbWU7XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShfYXR0cmlidXRlTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShfYXR0cmlidXRlTmFtZSwgICcnICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtdXN0VXNlUHJvcGVydHkgPSBwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5O1xuXG4gIGlmIChtdXN0VXNlUHJvcGVydHkpIHtcbiAgICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJbmZvLnByb3BlcnR5TmFtZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIHR5cGUgPSBwcm9wZXJ0eUluZm8udHlwZTtcbiAgICAgIG5vZGVbcHJvcGVydHlOYW1lXSA9IHR5cGUgPT09IEJPT0xFQU4gPyBmYWxzZSA6ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb250cmFyeSB0byBgc2V0QXR0cmlidXRlYCwgb2JqZWN0IHByb3BlcnRpZXMgYXJlIHByb3Blcmx5XG4gICAgICAvLyBgdG9TdHJpbmdgZWQgYnkgSUU4LzkuXG4gICAgICBub2RlW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH0gLy8gVGhlIHJlc3QgYXJlIHRyZWF0ZWQgYXMgYXR0cmlidXRlcyB3aXRoIHNwZWNpYWwgY2FzZXMuXG5cblxuICB2YXIgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lLFxuICAgICAgYXR0cmlidXRlTmFtZXNwYWNlID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWVzcGFjZTtcblxuICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX3R5cGUgPSBwcm9wZXJ0eUluZm8udHlwZTtcbiAgICB2YXIgYXR0cmlidXRlVmFsdWU7XG5cbiAgICBpZiAoX3R5cGUgPT09IEJPT0xFQU4gfHwgX3R5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTiAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gSWYgYXR0cmlidXRlIHR5cGUgaXMgYm9vbGVhbiwgd2Uga25vdyBmb3Igc3VyZSBpdCB3b24ndCBiZSBhbiBleGVjdXRpb24gc2lua1xuICAgICAgLy8gYW5kIHdlIHdvbid0IHJlcXVpcmUgVHJ1c3RlZCBUeXBlIGhlcmUuXG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBgc2V0QXR0cmlidXRlYCB3aXRoIG9iamVjdHMgYmVjb21lcyBvbmx5IGBbb2JqZWN0XWAgaW4gSUU4LzksXG4gICAgICAvLyAoJycgKyB2YWx1ZSkgbWFrZXMgaXQgb3V0cHV0IHRoZSBjb3JyZWN0IHRvU3RyaW5nKCktdmFsdWUuXG4gICAgICB7XG4gICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnR5SW5mby5zYW5pdGl6ZVVSTCkge1xuICAgICAgICBzYW5pdGl6ZVVSTChhdHRyaWJ1dGVWYWx1ZS50b1N0cmluZygpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXR0cmlidXRlTmFtZXNwYWNlKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZU5TKGF0dHJpYnV0ZU5hbWVzcGFjZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbiAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvZmlsZXInKTtcbiAgUkVBQ1RfUFJPVklERVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvdmlkZXInKTtcbiAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5jb250ZXh0Jyk7XG4gIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG4gIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG4gIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xuICBSRUFDVF9NRU1PX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm1lbW8nKTtcbiAgUkVBQ1RfTEFaWV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sYXp5Jyk7XG4gIFJFQUNUX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmJsb2NrJyk7XG4gIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zZXJ2ZXIuYmxvY2snKTtcbiAgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnVuZGFtZW50YWwnKTtcbiAgUkVBQ1RfU0NPUEVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2NvcGUnKTtcbiAgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9wYXF1ZS5pZCcpO1xuICBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZGVidWdfdHJhY2VfbW9kZScpO1xuICBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG4gIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGVnYWN5X2hpZGRlbicpO1xufVxuXG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgZGlzYWJsZWREZXB0aCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBkaXNhYmxlZERlcHRoLS07XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgICB9KSxcbiAgICAgICAgd2FybjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IG51bGw7XG4gICAgZGlzYWJsZUxvZ3MoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH07IC8vICRGbG93Rml4TWVcblxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH1cbiAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbC5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICBjLS07XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lKGN0b3IsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoY3RvciwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUZpYmVyKGZpYmVyKSB7XG4gIHZhciBvd25lciA9ICBmaWJlci5fZGVidWdPd25lciA/IGZpYmVyLl9kZWJ1Z093bmVyLnR5cGUgOiBudWxsIDtcbiAgdmFyIHNvdXJjZSA9ICBmaWJlci5fZGVidWdTb3VyY2UgO1xuXG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdMYXp5Jyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuXG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5yZW5kZXIpO1xuXG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5fcmVuZGVyKTtcblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qod29ya0luUHJvZ3Jlc3MpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9ICcnO1xuICAgIHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICBkbyB7XG4gICAgICBpbmZvICs9IGRlc2NyaWJlRmliZXIobm9kZSk7XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobm9kZSk7XG5cbiAgICByZXR1cm4gaW5mbztcbiAgfSBjYXRjaCAoeCkge1xuICAgIHJldHVybiAnXFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogJyArIHgubWVzc2FnZSArICdcXG4nICsgeC5zdGFjaztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIG91dGVyVHlwZS5kaXNwbGF5TmFtZSB8fCAoZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBjdXJyZW50ID0gbnVsbDtcbnZhciBpc1JlbmRlcmluZyA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB7XG4gIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG93bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3duZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldigpIHtcbiAge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSAvLyBTYWZlIGJlY2F1c2UgaWYgY3VycmVudCBmaWJlciBleGlzdHMsIHdlIGFyZSByZWNvbmNpbGluZyxcbiAgICAvLyBhbmQgaXQgaXMgZ3VhcmFudGVlZCB0byBiZSB0aGUgd29yay1pbi1wcm9ncmVzcyB2ZXJzaW9uLlxuXG5cbiAgICByZXR1cm4gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKGN1cnJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q3VycmVudEZpYmVyKCkge1xuICB7XG4gICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBudWxsO1xuICAgIGN1cnJlbnQgPSBudWxsO1xuICAgIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEN1cnJlbnRGaWJlcihmaWJlcikge1xuICB7XG4gICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2O1xuICAgIGN1cnJlbnQgPSBmaWJlcjtcbiAgICBpc1JlbmRlcmluZyA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzZXRJc1JlbmRlcmluZyhyZW5kZXJpbmcpIHtcbiAge1xuICAgIGlzUmVuZGVyaW5nID0gcmVuZGVyaW5nO1xuICB9XG59XG5mdW5jdGlvbiBnZXRJc1JlbmRlcmluZygpIHtcbiAge1xuICAgIHJldHVybiBpc1JlbmRlcmluZztcbiAgfVxufVxuXG4vLyBGbG93IGRvZXMgbm90IGFsbG93IHN0cmluZyBjb25jYXRlbmF0aW9uIG9mIG1vc3Qgbm9uLXN0cmluZyB0eXBlcy4gVG8gd29ya1xuLy8gYXJvdW5kIHRoaXMgbGltaXRhdGlvbiwgd2UgdXNlIGFuIG9wYXF1ZSB0eXBlIHRoYXQgY2FuIG9ubHkgYmUgb2J0YWluZWQgYnlcbi8vIHBhc3NpbmcgdGhlIHZhbHVlIHRocm91Z2ggZ2V0VG9TdHJpbmdWYWx1ZSBmaXJzdC5cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiAnJyArIHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkge1xuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm4gdmFsdWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gZnVuY3Rpb24sIHN5bWJvbCBhcmUgYXNzaWduZWQgYXMgZW1wdHkgc3RyaW5nc1xuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5cbnZhciBoYXNSZWFkT25seVZhbHVlID0ge1xuICBidXR0b246IHRydWUsXG4gIGNoZWNrYm94OiB0cnVlLFxuICBpbWFnZTogdHJ1ZSxcbiAgaGlkZGVuOiB0cnVlLFxuICByYWRpbzogdHJ1ZSxcbiAgcmVzZXQ6IHRydWUsXG4gIHN1Ym1pdDogdHJ1ZVxufTtcbmZ1bmN0aW9uIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHModGFnTmFtZSwgcHJvcHMpIHtcbiAge1xuICAgIGlmICghKGhhc1JlYWRPbmx5VmFsdWVbcHJvcHMudHlwZV0gfHwgcHJvcHMub25DaGFuZ2UgfHwgcHJvcHMub25JbnB1dCB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCB8fCBwcm9wcy52YWx1ZSA9PSBudWxsKSkge1xuICAgICAgZXJyb3IoJ1lvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gICAgfVxuXG4gICAgaWYgKCEocHJvcHMub25DaGFuZ2UgfHwgcHJvcHMucmVhZE9ubHkgfHwgcHJvcHMuZGlzYWJsZWQgfHwgcHJvcHMuY2hlY2tlZCA9PSBudWxsKSkge1xuICAgICAgZXJyb3IoJ1lvdSBwcm92aWRlZCBhIGBjaGVja2VkYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRDaGVja2VkYC4gT3RoZXJ3aXNlLCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NoZWNrYWJsZShlbGVtKSB7XG4gIHZhciB0eXBlID0gZWxlbS50eXBlO1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAodHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0eXBlID09PSAncmFkaW8nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhY2tlcihub2RlKSB7XG4gIHJldHVybiBub2RlLl92YWx1ZVRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIGRldGFjaFRyYWNrZXIobm9kZSkge1xuICBub2RlLl92YWx1ZVRyYWNrZXIgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlID0gJyc7XG5cbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKGlzQ2hlY2thYmxlKG5vZGUpKSB7XG4gICAgdmFsdWUgPSBub2RlLmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gbm9kZS52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gdHJhY2tWYWx1ZU9uTm9kZShub2RlKSB7XG4gIHZhciB2YWx1ZUZpZWxkID0gaXNDaGVja2FibGUobm9kZSkgPyAnY2hlY2tlZCcgOiAndmFsdWUnO1xuICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobm9kZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHZhbHVlRmllbGQpO1xuICB2YXIgY3VycmVudFZhbHVlID0gJycgKyBub2RlW3ZhbHVlRmllbGRdOyAvLyBpZiBzb21lb25lIGhhcyBhbHJlYWR5IGRlZmluZWQgYSB2YWx1ZSBvciBTYWZhcmksIHRoZW4gYmFpbFxuICAvLyBhbmQgZG9uJ3QgdHJhY2sgdmFsdWUgd2lsbCBjYXVzZSBvdmVyIHJlcG9ydGluZyBvZiBjaGFuZ2VzLFxuICAvLyBidXQgaXQncyBiZXR0ZXIgdGhlbiBhIGhhcmQgZmFpbHVyZVxuICAvLyAobmVlZGVkIGZvciBjZXJ0YWluIHRlc3RzIHRoYXQgc3B5T24gaW5wdXQgdmFsdWVzIGFuZCBTYWZhcmkpXG5cbiAgaWYgKG5vZGUuaGFzT3duUHJvcGVydHkodmFsdWVGaWVsZCkgfHwgdHlwZW9mIGRlc2NyaXB0b3IgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkZXNjcmlwdG9yLmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZGVzY3JpcHRvci5zZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXQsXG4gICAgICBzZXQgPSBkZXNjcmlwdG9yLnNldDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0LmNhbGwodGhpcyk7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudFZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9XG4gIH0pOyAvLyBXZSBjb3VsZCd2ZSBwYXNzZWQgdGhpcyB0aGUgZmlyc3QgdGltZVxuICAvLyBidXQgaXQgdHJpZ2dlcnMgYSBidWcgaW4gSUUxMSBhbmQgRWRnZSAxNC8xNS5cbiAgLy8gQ2FsbGluZyBkZWZpbmVQcm9wZXJ0eSgpIGFnYWluIHNob3VsZCBiZSBlcXVpdmFsZW50LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExNzY4XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICBlbnVtZXJhYmxlOiBkZXNjcmlwdG9yLmVudW1lcmFibGVcbiAgfSk7XG4gIHZhciB0cmFja2VyID0ge1xuICAgIGdldFZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgIH0sXG4gICAgc2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudFZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICB9LFxuICAgIHN0b3BUcmFja2luZzogZnVuY3Rpb24gKCkge1xuICAgICAgZGV0YWNoVHJhY2tlcihub2RlKTtcbiAgICAgIGRlbGV0ZSBub2RlW3ZhbHVlRmllbGRdO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIHRyYWNrKG5vZGUpIHtcbiAgaWYgKGdldFRyYWNrZXIobm9kZSkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gVE9ETzogT25jZSBpdCdzIGp1c3QgRmliZXIgd2UgY2FuIG1vdmUgdGhpcyB0byBub2RlLl93cmFwcGVyU3RhdGVcblxuXG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IHRyYWNrVmFsdWVPbk5vZGUobm9kZSk7XG59XG5mdW5jdGlvbiB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChub2RlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0cmFja2VyID0gZ2V0VHJhY2tlcihub2RlKTsgLy8gaWYgdGhlcmUgaXMgbm8gdHJhY2tlciBhdCB0aGlzIHBvaW50IGl0J3MgdW5saWtlbHlcbiAgLy8gdGhhdCB0cnlpbmcgYWdhaW4gd2lsbCBzdWNjZWVkXG5cbiAgaWYgKCF0cmFja2VyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgbGFzdFZhbHVlID0gdHJhY2tlci5nZXRWYWx1ZSgpO1xuICB2YXIgbmV4dFZhbHVlID0gZ2V0VmFsdWVGcm9tTm9kZShub2RlKTtcblxuICBpZiAobmV4dFZhbHVlICE9PSBsYXN0VmFsdWUpIHtcbiAgICB0cmFja2VyLnNldFZhbHVlKG5leHRWYWx1ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnQoZG9jKSB7XG4gIGRvYyA9IGRvYyB8fCAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogdW5kZWZpbmVkKTtcblxuICBpZiAodHlwZW9mIGRvYyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRvYy5hY3RpdmVFbGVtZW50IHx8IGRvYy5ib2R5O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGRvYy5ib2R5O1xuICB9XG59XG5cbnZhciBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gZmFsc2U7XG52YXIgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9IGZhbHNlO1xudmFyIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gaXNDb250cm9sbGVkKHByb3BzKSB7XG4gIHZhciB1c2VzQ2hlY2tlZCA9IHByb3BzLnR5cGUgPT09ICdjaGVja2JveCcgfHwgcHJvcHMudHlwZSA9PT0gJ3JhZGlvJztcbiAgcmV0dXJuIHVzZXNDaGVja2VkID8gcHJvcHMuY2hlY2tlZCAhPSBudWxsIDogcHJvcHMudmFsdWUgIT0gbnVsbDtcbn1cbi8qKlxuICogSW1wbGVtZW50cyBhbiA8aW5wdXQ+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgdGhlc2Ugb3B0aW9uYWxcbiAqIHByb3BzOiBgY2hlY2tlZGAsIGB2YWx1ZWAsIGBkZWZhdWx0Q2hlY2tlZGAsIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqXG4gKiBJZiBgY2hlY2tlZGAgb3IgYHZhbHVlYCBhcmUgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9uc1xuICogdGhhdCBhZmZlY3QgdGhlIGNoZWNrZWQgc3RhdGUgb3IgdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgdGhleSBhcmUgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIG5vdFxuICogdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgcHJvcHMgbXVzdCBjaGFuZ2UgaW4gb3JkZXIgZm9yXG4gKiB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgYXMgdW5jaGVja2VkIChvciBgZGVmYXVsdENoZWNrZWRgKVxuICogd2l0aCBhbiBlbXB0eSB2YWx1ZSAob3IgYGRlZmF1bHRWYWx1ZWApLlxuICpcbiAqIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIxMDI1L3RoZS1pbnB1dC1lbGVtZW50Lmh0bWxcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBjaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblxuICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICBkZWZhdWx0Q2hlY2tlZDogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkLFxuICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgY2hlY2tlZDogY2hlY2tlZCAhPSBudWxsID8gY2hlY2tlZCA6IG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZFxuICB9KTtcblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuZnVuY3Rpb24gaW5pdFdyYXBwZXJTdGF0ZShlbGVtZW50LCBwcm9wcykge1xuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygnaW5wdXQnLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMuY2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRDaGVja2VkICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCBjaGVja2VkIGFuZCBkZWZhdWx0Q2hlY2tlZCBwcm9wcy4gJyArICdJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgY2hlY2tlZCBwcm9wLCBvciB0aGUgZGVmYXVsdENoZWNrZWQgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpO1xuXG4gICAgICBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlKSB7XG4gICAgICBlcnJvcignJXMgY29udGFpbnMgYW4gaW5wdXQgb2YgdHlwZSAlcyB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gJyArICdJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSk7XG5cbiAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlID09IG51bGwgPyAnJyA6IHByb3BzLmRlZmF1bHRWYWx1ZTtcbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIGluaXRpYWxDaGVja2VkOiBwcm9wcy5jaGVja2VkICE9IG51bGwgPyBwcm9wcy5jaGVja2VkIDogcHJvcHMuZGVmYXVsdENoZWNrZWQsXG4gICAgaW5pdGlhbFZhbHVlOiBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlICE9IG51bGwgPyBwcm9wcy52YWx1ZSA6IGRlZmF1bHRWYWx1ZSksXG4gICAgY29udHJvbGxlZDogaXNDb250cm9sbGVkKHByb3BzKVxuICB9O1xufVxuZnVuY3Rpb24gdXBkYXRlQ2hlY2tlZChlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBjaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblxuICBpZiAoY2hlY2tlZCAhPSBudWxsKSB7XG4gICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCAnY2hlY2tlZCcsIGNoZWNrZWQsIGZhbHNlKTtcbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlV3JhcHBlcihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIHZhciBjb250cm9sbGVkID0gaXNDb250cm9sbGVkKHByb3BzKTtcblxuICAgIGlmICghbm9kZS5fd3JhcHBlclN0YXRlLmNvbnRyb2xsZWQgJiYgY29udHJvbGxlZCAmJiAhZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCkge1xuICAgICAgZXJyb3IoJ0EgY29tcG9uZW50IGlzIGNoYW5naW5nIGFuIHVuY29udHJvbGxlZCBpbnB1dCB0byBiZSBjb250cm9sbGVkLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSB0aGUgdmFsdWUgY2hhbmdpbmcgZnJvbSB1bmRlZmluZWQgdG8gJyArICdhIGRlZmluZWQgdmFsdWUsIHdoaWNoIHNob3VsZCBub3QgaGFwcGVuLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlLl93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiAhY29udHJvbGxlZCAmJiAhZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCkge1xuICAgICAgZXJyb3IoJ0EgY29tcG9uZW50IGlzIGNoYW5naW5nIGEgY29udHJvbGxlZCBpbnB1dCB0byBiZSB1bmNvbnRyb2xsZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIGEgZGVmaW5lZCB0byAnICsgJ3VuZGVmaW5lZCwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ2hlY2tlZChlbGVtZW50LCBwcm9wcyk7XG4gIHZhciB2YWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpO1xuICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBub2RlLnZhbHVlID09PSAnJyB8fCAvLyBXZSBleHBsaWNpdGx5IHdhbnQgdG8gY29lcmNlIHRvIG51bWJlciBoZXJlIGlmIHBvc3NpYmxlLlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBub2RlLnZhbHVlICE9IHZhbHVlKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnZhbHVlICE9PSB0b1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIG5vZGUudmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdWJtaXQnIHx8IHR5cGUgPT09ICdyZXNldCcpIHtcbiAgICAvLyBTdWJtaXQvcmVzZXQgaW5wdXRzIG5lZWQgdGhlIGF0dHJpYnV0ZSByZW1vdmVkIGNvbXBsZXRlbHkgdG8gYXZvaWRcbiAgICAvLyBibGFuay10ZXh0IGJ1dHRvbnMuXG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgdmFsdWUgYXR0cmlidXRlLCB0aGUgdmFsdWUgY29tZXMgZnJvbSBhIGNhc2NhZGUgb2ZcbiAgICAvLyBwcm9wZXJ0aWVzOlxuICAgIC8vICAxLiBUaGUgdmFsdWUgUmVhY3QgcHJvcGVydHlcbiAgICAvLyAgMi4gVGhlIGRlZmF1bHRWYWx1ZSBSZWFjdCBwcm9wZXJ0eVxuICAgIC8vICAzLiBPdGhlcndpc2UgdGhlcmUgc2hvdWxkIGJlIG5vIGNoYW5nZVxuICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSkge1xuICAgICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHByb3BzLnR5cGUsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCdkZWZhdWx0VmFsdWUnKSkge1xuICAgICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHByb3BzLnR5cGUsIGdldFRvU3RyaW5nVmFsdWUocHJvcHMuZGVmYXVsdFZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGl0IG9ubHkgY2hhbmdlcyB3aGVuIGl0IG5lZWRzXG4gICAgLy8gdG8gYmUgcmVtb3ZlZCwgc3VjaCBhcyB0cmFuc2l0aW9uaW5nIGZyb20gYSBjaGVja2JveCBpbnRvIGEgdGV4dCBpbnB1dFxuICAgIGlmIChwcm9wcy5jaGVja2VkID09IG51bGwgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT0gbnVsbCkge1xuICAgICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICEhcHJvcHMuZGVmYXVsdENoZWNrZWQ7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyKGVsZW1lbnQsIHByb3BzLCBpc0h5ZHJhdGluZykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7IC8vIERvIG5vdCBhc3NpZ24gdmFsdWUgaWYgaXQgaXMgYWxyZWFkeSBzZXQuIFRoaXMgcHJldmVudHMgdXNlciB0ZXh0IGlucHV0XG4gIC8vIGZyb20gYmVpbmcgbG9zdCBkdXJpbmcgU1NSIGh5ZHJhdGlvbi5cblxuICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgfHwgcHJvcHMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWYWx1ZScpKSB7XG4gICAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuICAgIHZhciBpc0J1dHRvbiA9IHR5cGUgPT09ICdzdWJtaXQnIHx8IHR5cGUgPT09ICdyZXNldCc7IC8vIEF2b2lkIHNldHRpbmcgdmFsdWUgYXR0cmlidXRlIG9uIHN1Ym1pdC9yZXNldCBpbnB1dHMgYXMgaXQgb3ZlcnJpZGVzIHRoZVxuICAgIC8vIGRlZmF1bHQgdmFsdWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIuIFNlZTogIzEyODcyXG5cbiAgICBpZiAoaXNCdXR0b24gJiYgKHByb3BzLnZhbHVlID09PSB1bmRlZmluZWQgfHwgcHJvcHMudmFsdWUgPT09IG51bGwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluaXRpYWxWYWx1ZSA9IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpOyAvLyBEbyBub3QgYXNzaWduIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIHByZXZlbnRzIHVzZXIgdGV4dCBpbnB1dFxuICAgIC8vIGZyb20gYmVpbmcgbG9zdCBkdXJpbmcgU1NSIGh5ZHJhdGlvbi5cblxuICAgIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gV2hlbiBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzaG91bGQgdXNlXG4gICAgICAgIC8vIHRoZSB3cmFwcGVyU3RhdGUuX2luaXRpYWxWYWx1ZSBwcm9wZXJ0eS4gVGhpcyB1c2VzOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgIDEuIFRoZSB2YWx1ZSBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAgICAgLy8gICAyLiBUaGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDMuIEFuIGVtcHR5IHN0cmluZ1xuICAgICAgICBpZiAoaW5pdGlhbFZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICAgICAgbm9kZS52YWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vIE90aGVyd2lzZSwgdGhlIHZhbHVlIGF0dHJpYnV0ZSBpcyBzeW5jaHJvbml6ZWQgdG8gdGhlIHByb3BlcnR5LFxuICAgICAgLy8gc28gd2UgYXNzaWduIGRlZmF1bHRWYWx1ZSB0byB0aGUgc2FtZSB0aGluZyBhcyB0aGUgdmFsdWUgcHJvcGVydHlcbiAgICAgIC8vIGFzc2lnbm1lbnQgc3RlcCBhYm92ZS5cbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIH1cbiAgfSAvLyBOb3JtYWxseSwgd2UnZCBqdXN0IGRvIGBub2RlLmNoZWNrZWQgPSBub2RlLmNoZWNrZWRgIHVwb24gaW5pdGlhbCBtb3VudCwgbGVzcyB0aGlzIGJ1Z1xuICAvLyB0aGlzIGlzIG5lZWRlZCB0byB3b3JrIGFyb3VuZCBhIGNocm9tZSBidWcgd2hlcmUgc2V0dGluZyBkZWZhdWx0Q2hlY2tlZFxuICAvLyB3aWxsIHNvbWV0aW1lcyBpbmZsdWVuY2UgdGhlIHZhbHVlIG9mIGNoZWNrZWQgKGV2ZW4gYWZ0ZXIgZGV0YWNobWVudCkuXG4gIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjA4NDE2XG4gIC8vIFdlIG5lZWQgdG8gdGVtcG9yYXJpbHkgdW5zZXQgbmFtZSB0byBhdm9pZCBkaXNydXB0aW5nIHJhZGlvIGJ1dHRvbiBncm91cHMuXG5cblxuICB2YXIgbmFtZSA9IG5vZGUubmFtZTtcblxuICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICBub2RlLm5hbWUgPSAnJztcbiAgfVxuXG4gIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIGNoZWNrZWQgYXR0cmlidXRlLCBib3RoIHRoZSBjaGVja2VkIHByb3BlcnR5IGFuZFxuICAgIC8vIGF0dHJpYnV0ZSBhcmUgYXNzaWduZWQgYXQgdGhlIHNhbWUgdGltZSB1c2luZyBkZWZhdWx0Q2hlY2tlZC4gVGhpcyB1c2VzOlxuICAgIC8vXG4gICAgLy8gICAxLiBUaGUgY2hlY2tlZCBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAvLyAgIDIuIFRoZSBkZWZhdWx0Q2hlY2tlZCBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAvLyAgIDMuIE90aGVyd2lzZSwgZmFsc2VcbiAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gIW5vZGUuZGVmYXVsdENoZWNrZWQ7XG4gICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICEhbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkO1xuICB9XG5cbiAgaWYgKG5hbWUgIT09ICcnKSB7XG4gICAgbm9kZS5uYW1lID0gbmFtZTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHVwZGF0ZVdyYXBwZXIobm9kZSwgcHJvcHMpO1xuICB1cGRhdGVOYW1lZENvdXNpbnMobm9kZSwgcHJvcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVOYW1lZENvdXNpbnMocm9vdE5vZGUsIHByb3BzKSB7XG4gIHZhciBuYW1lID0gcHJvcHMubmFtZTtcblxuICBpZiAocHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuYW1lICE9IG51bGwpIHtcbiAgICB2YXIgcXVlcnlSb290ID0gcm9vdE5vZGU7XG5cbiAgICB3aGlsZSAocXVlcnlSb290LnBhcmVudE5vZGUpIHtcbiAgICAgIHF1ZXJ5Um9vdCA9IHF1ZXJ5Um9vdC5wYXJlbnROb2RlO1xuICAgIH0gLy8gSWYgYHJvb3ROb2RlLmZvcm1gIHdhcyBub24tbnVsbCwgdGhlbiB3ZSBjb3VsZCB0cnkgYGZvcm0uZWxlbWVudHNgLFxuICAgIC8vIGJ1dCB0aGF0IHNvbWV0aW1lcyBiZWhhdmVzIHN0cmFuZ2VseSBpbiBJRTguIFdlIGNvdWxkIGFsc28gdHJ5IHVzaW5nXG4gICAgLy8gYGZvcm0uZ2V0RWxlbWVudHNCeU5hbWVgLCBidXQgdGhhdCB3aWxsIG9ubHkgcmV0dXJuIGRpcmVjdCBjaGlsZHJlblxuICAgIC8vIGFuZCB3b24ndCBpbmNsdWRlIGlucHV0cyB0aGF0IHVzZSB0aGUgSFRNTDUgYGZvcm09YCBhdHRyaWJ1dGUuIFNpbmNlXG4gICAgLy8gdGhlIGlucHV0IG1pZ2h0IG5vdCBldmVuIGJlIGluIGEgZm9ybS4gSXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gdGhlXG4gICAgLy8gZG9jdW1lbnQuIExldCdzIGp1c3QgdXNlIHRoZSBsb2NhbCBgcXVlcnlTZWxlY3RvckFsbGAgdG8gZW5zdXJlIHdlIGRvbid0XG4gICAgLy8gbWlzcyBhbnl0aGluZy5cblxuXG4gICAgdmFyIGdyb3VwID0gcXVlcnlSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W25hbWU9JyArIEpTT04uc3RyaW5naWZ5KCcnICsgbmFtZSkgKyAnXVt0eXBlPVwicmFkaW9cIl0nKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBvdGhlck5vZGUgPSBncm91cFtpXTtcblxuICAgICAgaWYgKG90aGVyTm9kZSA9PT0gcm9vdE5vZGUgfHwgb3RoZXJOb2RlLmZvcm0gIT09IHJvb3ROb2RlLmZvcm0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIFRoaXMgd2lsbCB0aHJvdyBpZiByYWRpbyBidXR0b25zIHJlbmRlcmVkIGJ5IGRpZmZlcmVudCBjb3BpZXMgb2YgUmVhY3RcbiAgICAgIC8vIGFuZCB0aGUgc2FtZSBuYW1lIGFyZSByZW5kZXJlZCBpbnRvIHRoZSBzYW1lIGZvcm0gKHNhbWUgYXMgIzE5MzkpLlxuICAgICAgLy8gVGhhdCdzIHByb2JhYmx5IG9rYXk7IHdlIGRvbid0IHN1cHBvcnQgaXQganVzdCBhcyB3ZSBkb24ndCBzdXBwb3J0XG4gICAgICAvLyBtaXhpbmcgUmVhY3QgcmFkaW8gYnV0dG9ucyB3aXRoIG5vbi1SZWFjdCBvbmVzLlxuXG5cbiAgICAgIHZhciBvdGhlclByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShvdGhlck5vZGUpO1xuXG4gICAgICBpZiAoIW90aGVyUHJvcHMpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0RE9NSW5wdXQ6IE1peGluZyBSZWFjdCBhbmQgbm9uLVJlYWN0IHJhZGlvIGlucHV0cyB3aXRoIHRoZSBzYW1lIGBuYW1lYCBpcyBub3Qgc3VwcG9ydGVkLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gV2UgbmVlZCB1cGRhdGUgdGhlIHRyYWNrZWQgdmFsdWUgb24gdGhlIG5hbWVkIGNvdXNpbiBzaW5jZSB0aGUgdmFsdWVcbiAgICAgIC8vIHdhcyBjaGFuZ2VkIGJ1dCB0aGUgaW5wdXQgc2F3IG5vIGV2ZW50IG9yIHZhbHVlIHNldFxuXG5cbiAgICAgIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKG90aGVyTm9kZSk7IC8vIElmIHRoaXMgaXMgYSBjb250cm9sbGVkIHJhZGlvIGJ1dHRvbiBncm91cCwgZm9yY2luZyB0aGUgaW5wdXQgdGhhdFxuICAgICAgLy8gd2FzIHByZXZpb3VzbHkgY2hlY2tlZCB0byB1cGRhdGUgd2lsbCBjYXVzZSBpdCB0byBiZSBjb21lIHJlLWNoZWNrZWRcbiAgICAgIC8vIGFzIGFwcHJvcHJpYXRlLlxuXG4gICAgICB1cGRhdGVXcmFwcGVyKG90aGVyTm9kZSwgb3RoZXJQcm9wcyk7XG4gICAgfVxuICB9XG59IC8vIEluIENocm9tZSwgYXNzaWduaW5nIGRlZmF1bHRWYWx1ZSB0byBjZXJ0YWluIGlucHV0IHR5cGVzIHRyaWdnZXJzIGlucHV0IHZhbGlkYXRpb24uXG4vLyBGb3IgbnVtYmVyIGlucHV0cywgdGhlIGRpc3BsYXkgdmFsdWUgbG9zZXMgdHJhaWxpbmcgZGVjaW1hbCBwb2ludHMuIEZvciBlbWFpbCBpbnB1dHMsXG4vLyBDaHJvbWUgcmFpc2VzIFwiVGhlIHNwZWNpZmllZCB2YWx1ZSA8eD4gaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiLlxuLy9cbi8vIEhlcmUgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSBkZWZhdWx0VmFsdWUgaGFzIGFjdHVhbGx5IGNoYW5nZWQsIGF2b2lkaW5nIHRoZXNlIHByb2JsZW1zXG4vLyB3aGVuIHRoZSB1c2VyIGlzIGlucHV0dGluZyB0ZXh0XG4vL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjUzXG5cblxuZnVuY3Rpb24gc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHR5cGUsIHZhbHVlKSB7XG4gIGlmICggLy8gRm9jdXNlZCBudW1iZXIgaW5wdXRzIHN5bmNocm9uaXplIG9uIGJsdXIuIFNlZSBDaGFuZ2VFdmVudFBsdWdpbi5qc1xuICB0eXBlICE9PSAnbnVtYmVyJyB8fCBnZXRBY3RpdmVFbGVtZW50KG5vZGUub3duZXJEb2N1bWVudCkgIT09IG5vZGUpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuZGVmYXVsdFZhbHVlICE9PSB0b1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSBmYWxzZTtcbnZhciBkaWRXYXJuSW52YWxpZENoaWxkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5DaGlsZHJlbihjaGlsZHJlbikge1xuICB2YXIgY29udGVudCA9ICcnOyAvLyBGbGF0dGVuIGNoaWxkcmVuLiBXZSdsbCB3YXJuIGlmIHRoZXkgYXJlIGludmFsaWRcbiAgLy8gZHVyaW5nIHZhbGlkYXRlUHJvcHMoKSB3aGljaCBydW5zIGZvciBoeWRyYXRpb24gdG9vLlxuICAvLyBOb3RlIHRoYXQgdGhpcyB3b3VsZCB0aHJvdyBvbiBub24tZWxlbWVudCBvYmplY3RzLlxuICAvLyBFbGVtZW50cyBhcmUgc3RyaW5naWZpZWQgKHdoaWNoIGlzIG5vcm1hbGx5IGlycmVsZXZhbnRcbiAgLy8gYnV0IG1hdHRlcnMgZm9yIDxmYnQ+KS5cblxuICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRlbnQgKz0gY2hpbGQ7IC8vIE5vdGU6IHdlIGRvbid0IHdhcm4gYWJvdXQgaW52YWxpZCBjaGlsZHJlbiBoZXJlLlxuICAgIC8vIEluc3RlYWQsIHRoaXMgaXMgZG9uZSBzZXBhcmF0ZWx5IGJlbG93IHNvIHRoYXRcbiAgICAvLyBpdCBoYXBwZW5zIGR1cmluZyB0aGUgaHlkcmF0aW9uIGNvZGUgcGF0aCB0b28uXG4gIH0pO1xuICByZXR1cm4gY29udGVudDtcbn1cbi8qKlxuICogSW1wbGVtZW50cyBhbiA8b3B0aW9uPiBob3N0IGNvbXBvbmVudCB0aGF0IHdhcm5zIHdoZW4gYHNlbGVjdGVkYCBpcyBzZXQuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICAvLyBUaGlzIG1pcnJvcnMgdGhlIGNvZGUgcGF0aCBhYm92ZSwgYnV0IHJ1bnMgZm9yIGh5ZHJhdGlvbiB0b28uXG4gICAgLy8gV2FybiBhYm91dCBpbnZhbGlkIGNoaWxkcmVuIGhlcmUgc28gdGhhdCBjbGllbnQgYW5kIGh5ZHJhdGlvbiBhcmUgY29uc2lzdGVudC5cbiAgICAvLyBUT0RPOiB0aGlzIHNlZW1zIGxpa2UgaXQgY291bGQgY2F1c2UgYSBERVYtb25seSB0aHJvdyBmb3IgaHlkcmF0aW9uXG4gICAgLy8gaWYgY2hpbGRyZW4gY29udGFpbnMgYSBub24tZWxlbWVudCBvYmplY3QuIFdlIHNob3VsZCB0cnkgdG8gYXZvaWQgdGhhdC5cbiAgICBpZiAodHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnb2JqZWN0JyAmJiBwcm9wcy5jaGlsZHJlbiAhPT0gbnVsbCkge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGlmIChjaGlsZCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGNoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRpZFdhcm5JbnZhbGlkQ2hpbGQpIHtcbiAgICAgICAgICBkaWRXYXJuSW52YWxpZENoaWxkID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdPbmx5IHN0cmluZ3MgYW5kIG51bWJlcnMgYXJlIHN1cHBvcnRlZCBhcyA8b3B0aW9uPiBjaGlsZHJlbi4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSAvLyBUT0RPOiBSZW1vdmUgc3VwcG9ydCBmb3IgYHNlbGVjdGVkYCBpbiA8b3B0aW9uPi5cblxuXG4gICAgaWYgKHByb3BzLnNlbGVjdGVkICE9IG51bGwgJiYgIWRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uKSB7XG4gICAgICBlcnJvcignVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIG9uIDxzZWxlY3Q+IGluc3RlYWQgb2YgJyArICdzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uJyk7XG5cbiAgICAgIGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMShlbGVtZW50LCBwcm9wcykge1xuICAvLyB2YWx1ZT1cIlwiIHNob3VsZCBtYWtlIGEgdmFsdWUgYXR0cmlidXRlICgjNjIxOSlcbiAgaWYgKHByb3BzLnZhbHVlICE9IG51bGwpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndmFsdWUnLCB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKSkpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7XG4gICAgY2hpbGRyZW46IHVuZGVmaW5lZFxuICB9LCBwcm9wcyk7XG5cbiAgdmFyIGNvbnRlbnQgPSBmbGF0dGVuQ2hpbGRyZW4ocHJvcHMuY2hpbGRyZW4pO1xuXG4gIGlmIChjb250ZW50KSB7XG4gICAgaG9zdFByb3BzLmNoaWxkcmVuID0gY29udGVudDtcbiAgfVxuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5cbnZhciBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMTtcblxue1xuICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHZhciBvd25lck5hbWUgPSBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpO1xuXG4gIGlmIChvd25lck5hbWUpIHtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIHZhbHVlUHJvcE5hbWVzID0gWyd2YWx1ZScsICdkZWZhdWx0VmFsdWUnXTtcbi8qKlxuICogVmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKi9cblxuZnVuY3Rpb24gY2hlY2tTZWxlY3RQcm9wVHlwZXMocHJvcHMpIHtcbiAge1xuICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ3NlbGVjdCcsIHByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVQcm9wTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wTmFtZSA9IHZhbHVlUHJvcE5hbWVzW2ldO1xuXG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShwcm9wc1twcm9wTmFtZV0pO1xuXG4gICAgICBpZiAocHJvcHMubXVsdGlwbGUgJiYgIWlzQXJyYXkpIHtcbiAgICAgICAgZXJyb3IoJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhbiBhcnJheSBpZiAnICsgJ2BtdWx0aXBsZWAgaXMgdHJ1ZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9wcy5tdWx0aXBsZSAmJiBpc0FycmF5KSB7XG4gICAgICAgIGVycm9yKCdUaGUgYCVzYCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYSBzY2FsYXIgJyArICd2YWx1ZSBpZiBgbXVsdGlwbGVgIGlzIGZhbHNlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9ucyhub2RlLCBtdWx0aXBsZSwgcHJvcFZhbHVlLCBzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgdmFyIG9wdGlvbnMgPSBub2RlLm9wdGlvbnM7XG5cbiAgaWYgKG11bHRpcGxlKSB7XG4gICAgdmFyIHNlbGVjdGVkVmFsdWVzID0gcHJvcFZhbHVlO1xuICAgIHZhciBzZWxlY3RlZFZhbHVlID0ge307XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcmVmaXggdG8gYXZvaWQgY2hhb3Mgd2l0aCBzcGVjaWFsIGtleXMuXG4gICAgICBzZWxlY3RlZFZhbHVlWyckJyArIHNlbGVjdGVkVmFsdWVzW2ldXSA9IHRydWU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG9wdGlvbnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlLmhhc093blByb3BlcnR5KCckJyArIG9wdGlvbnNbX2ldLnZhbHVlKTtcblxuICAgICAgaWYgKG9wdGlvbnNbX2ldLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW19pXS5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZWN0ZWQgJiYgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbX2ldLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCBzZXQgYHNlbGVjdC52YWx1ZWAgYXMgZXhhY3QgYmVoYXZpb3IgaXNuJ3QgY29uc2lzdGVudCBhY3Jvc3MgYWxsXG4gICAgLy8gYnJvd3NlcnMgZm9yIGFsbCBjYXNlcy5cbiAgICB2YXIgX3NlbGVjdGVkVmFsdWUgPSB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHByb3BWYWx1ZSkpO1xuXG4gICAgdmFyIGRlZmF1bHRTZWxlY3RlZCA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBvcHRpb25zLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIGlmIChvcHRpb25zW19pMl0udmFsdWUgPT09IF9zZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbnNbX2kyXS5zZWxlY3RlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgICAgIG9wdGlvbnNbX2kyXS5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFNlbGVjdGVkID09PSBudWxsICYmICFvcHRpb25zW19pMl0uZGlzYWJsZWQpIHtcbiAgICAgICAgZGVmYXVsdFNlbGVjdGVkID0gb3B0aW9uc1tfaTJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQgIT09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRTZWxlY3RlZC5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEltcGxlbWVudHMgYSA8c2VsZWN0PiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBvcHRpb25hbGx5IHNldHRpbmcgdGhlXG4gKiBwcm9wcyBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVlYC4gSWYgYG11bHRpcGxlYCBpcyBmYWxzZSwgdGhlIHByb3AgbXVzdCBiZSBhXG4gKiBzdHJpbmdhYmxlLiBJZiBgbXVsdGlwbGVgIGlzIHRydWUsIHRoZSBwcm9wIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nYWJsZXMuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgY2hhbmdlIHRoZVxuICogc2VsZWN0ZWQgb3B0aW9uIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSByZW5kZXJlZCBvcHRpb25zLlxuICpcbiAqIElmIGl0IGlzIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIG9wdGlvbnMgd2lsbCBub3RcbiAqIHVwZGF0ZSBpbiByZXNwb25zZSB0byB1c2VyIGFjdGlvbnMuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgb3B0aW9ucyB0byB1cGRhdGUuXG4gKlxuICogSWYgYGRlZmF1bHRWYWx1ZWAgaXMgcHJvdmlkZWQsIGFueSBvcHRpb25zIHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlcyB3aWxsIGJlXG4gKiBzZWxlY3RlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHJldHVybiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgfSk7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcyk7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgd2FzTXVsdGlwbGU6ICEhcHJvcHMubXVsdGlwbGVcbiAgfTtcblxuICB7XG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxKSB7XG4gICAgICBlcnJvcignU2VsZWN0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBzZWxlY3QgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICBub2RlLm11bHRpcGxlID0gISFwcm9wcy5tdWx0aXBsZTtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLmRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RVcGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHdhc011bHRpcGxlID0gbm9kZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlO1xuICBub2RlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUgPSAhIXByb3BzLm11bHRpcGxlO1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfSBlbHNlIGlmICh3YXNNdWx0aXBsZSAhPT0gISFwcm9wcy5tdWx0aXBsZSkge1xuICAgIC8vIEZvciBzaW1wbGljaXR5LCByZWFwcGx5IGBkZWZhdWx0VmFsdWVgIGlmIGBtdWx0aXBsZWAgaXMgdG9nZ2xlZC5cbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmV2ZXJ0IHRoZSBzZWxlY3QgYmFjayB0byBpdHMgZGVmYXVsdCB1bnNlbGVjdGVkIHN0YXRlLlxuICAgICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5tdWx0aXBsZSA/IFtdIDogJycsIGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9XG59XG5cbnZhciBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IGZhbHNlO1xuXG4vKipcbiAqIEltcGxlbWVudHMgYSA8dGV4dGFyZWE+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgYHZhbHVlYCwgYW5kXG4gKiBgZGVmYXVsdFZhbHVlYC4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIHRyYWRpdGlvbmFsIERPTSBBUEkgYmVjYXVzZSB2YWx1ZSBpc1xuICogdXN1YWxseSBzZXQgYXMgUENEQVRBIGNoaWxkcmVuLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGFmZmVjdCB0aGVcbiAqIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsXG4gKiBub3QgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggYW4gZW1wdHkgdmFsdWUsIHRoZSBwcm9wXG4gKiBgZGVmYXVsdFZhbHVlYCBpZiBzcGVjaWZpZWQsIG9yIHRoZSBjaGlsZHJlbiBjb250ZW50IChkZXByZWNhdGVkKS5cbiAqL1xuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIGlmICghKHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBkb2VzIG5vdCBtYWtlIHNlbnNlIG9uIDx0ZXh0YXJlYT4uXCIgKTtcbiAgICB9XG4gIH0gLy8gQWx3YXlzIHNldCBjaGlsZHJlbiB0byB0aGUgc2FtZSB0aGluZy4gSW4gSUU5LCB0aGUgc2VsZWN0aW9uIHJhbmdlIHdpbGxcbiAgLy8gZ2V0IHJlc2V0IGlmIGB0ZXh0Q29udGVudGAgaXMgbXV0YXRlZC4gIFdlIGNvdWxkIGFkZCBhIGNoZWNrIGluIHNldFRleHRDb250ZW50XG4gIC8vIHRvIG9ubHkgc2V0IHRoZSB2YWx1ZSBpZi93aGVuIHRoZSB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIG5vZGUgdmFsdWUgKHdoaWNoIHdvdWxkXG4gIC8vIGNvbXBsZXRlbHkgc29sdmUgdGhpcyBJRTkgYnVnKSwgYnV0IFNlYmFzdGlhbitTb3BoaWUgc2VlbWVkIHRvIGxpa2UgdGhpc1xuICAvLyBzb2x1dGlvbi4gVGhlIHZhbHVlIGNhbiBiZSBhIGJvb2xlYW4gb3Igb2JqZWN0IHNvIHRoYXQncyB3aHkgaXQncyBmb3JjZWRcbiAgLy8gdG8gYmUgYSBzdHJpbmcuXG5cblxuICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkLFxuICAgIGNoaWxkcmVuOiB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKVxuICB9KTtcblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuZnVuY3Rpb24gaW5pdFdyYXBwZXJTdGF0ZSQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygndGV4dGFyZWEnLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbERlZmF1bHRWYWwpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhIHRleHRhcmVhIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ1RleHRhcmVhIGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCB0ZXh0YXJlYSAnICsgJ2FuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50Jyk7XG5cbiAgICAgIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgaW5pdGlhbFZhbHVlID0gcHJvcHMudmFsdWU7IC8vIE9ubHkgYm90aGVyIGZldGNoaW5nIGRlZmF1bHQgdmFsdWUgaWYgd2UncmUgZ29pbmcgdG8gdXNlIGl0XG5cbiAgaWYgKGluaXRpYWxWYWx1ZSA9PSBudWxsKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIGVycm9yKCdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgaW5zdGVhZCBvZiBzZXR0aW5nICcgKyAnY2hpbGRyZW4gb24gPHRleHRhcmVhPi4nKTtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBpZiAoIShkZWZhdWx0VmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJJZiB5b3Ugc3VwcGx5IGBkZWZhdWx0VmFsdWVgIG9uIGEgPHRleHRhcmVhPiwgZG8gbm90IHBhc3MgY2hpbGRyZW4uXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICBpZiAoIShjaGlsZHJlbi5sZW5ndGggPD0gMSkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiPHRleHRhcmVhPiBjYW4gb25seSBoYXZlIGF0IG1vc3Qgb25lIGNoaWxkLlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlblswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGNoaWxkcmVuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgaW5pdGlhbFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIGluaXRpYWxWYWx1ZTogZ2V0VG9TdHJpbmdWYWx1ZShpbml0aWFsVmFsdWUpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgdmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKTtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMuZGVmYXVsdFZhbHVlKTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5IGRvIHRoaXMgYXMgbmVjZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgIHZhciBuZXdWYWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTsgLy8gVG8gYXZvaWQgc2lkZSBlZmZlY3RzIChzdWNoIGFzIGxvc2luZyB0ZXh0IHNlbGVjdGlvbiksIG9ubHkgc2V0IHZhbHVlIGlmIGNoYW5nZWRcblxuICAgIGlmIChuZXdWYWx1ZSAhPT0gbm9kZS52YWx1ZSkge1xuICAgICAgbm9kZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCAmJiBub2RlLmRlZmF1bHRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyhkZWZhdWx0VmFsdWUpO1xuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50OyAvLyBUaGlzIGlzIGluIHBvc3RNb3VudCBiZWNhdXNlIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBET00gbm9kZSwgd2hpY2ggaXMgbm90XG4gIC8vIGF2YWlsYWJsZSB1bnRpbCBhZnRlciB0aGUgY29tcG9uZW50IGhhcyBtb3VudGVkLlxuXG4gIHZhciB0ZXh0Q29udGVudCA9IG5vZGUudGV4dENvbnRlbnQ7IC8vIE9ubHkgc2V0IG5vZGUudmFsdWUgaWYgdGV4dENvbnRlbnQgaXMgZXF1YWwgdG8gdGhlIGV4cGVjdGVkXG4gIC8vIGluaXRpYWwgdmFsdWUuIEluIElFMTAvSUUxMSB0aGVyZSBpcyBhIGJ1ZyB3aGVyZSB0aGUgcGxhY2Vob2xkZXIgYXR0cmlidXRlXG4gIC8vIHdpbGwgcG9wdWxhdGUgdGV4dENvbnRlbnQgYXMgd2VsbC5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvMTAxNTI1L1xuXG4gIGlmICh0ZXh0Q29udGVudCA9PT0gbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSkge1xuICAgIGlmICh0ZXh0Q29udGVudCAhPT0gJycgJiYgdGV4dENvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUudmFsdWUgPSB0ZXh0Q29udGVudDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMihlbGVtZW50LCBwcm9wcykge1xuICAvLyBET00gY29tcG9uZW50IGlzIHN0aWxsIG1vdW50ZWQ7IHVwZGF0ZVxuICB1cGRhdGVXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpO1xufVxuXG52YXIgSFRNTF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG52YXIgTUFUSF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCc7XG52YXIgU1ZHX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG52YXIgTmFtZXNwYWNlcyA9IHtcbiAgaHRtbDogSFRNTF9OQU1FU1BBQ0UsXG4gIG1hdGhtbDogTUFUSF9OQU1FU1BBQ0UsXG4gIHN2ZzogU1ZHX05BTUVTUEFDRVxufTsgLy8gQXNzdW1lcyB0aGVyZSBpcyBubyBwYXJlbnQgbmFtZXNwYWNlLlxuXG5mdW5jdGlvbiBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdzdmcnOlxuICAgICAgcmV0dXJuIFNWR19OQU1FU1BBQ0U7XG5cbiAgICBjYXNlICdtYXRoJzpcbiAgICAgIHJldHVybiBNQVRIX05BTUVTUEFDRTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gSFRNTF9OQU1FU1BBQ0U7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldENoaWxkTmFtZXNwYWNlKHBhcmVudE5hbWVzcGFjZSwgdHlwZSkge1xuICBpZiAocGFyZW50TmFtZXNwYWNlID09IG51bGwgfHwgcGFyZW50TmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgIC8vIE5vIChvciBkZWZhdWx0KSBwYXJlbnQgbmFtZXNwYWNlOiBwb3RlbnRpYWwgZW50cnkgcG9pbnQuXG4gICAgcmV0dXJuIGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKTtcbiAgfVxuXG4gIGlmIChwYXJlbnROYW1lc3BhY2UgPT09IFNWR19OQU1FU1BBQ0UgJiYgdHlwZSA9PT0gJ2ZvcmVpZ25PYmplY3QnKSB7XG4gICAgLy8gV2UncmUgbGVhdmluZyBTVkcuXG4gICAgcmV0dXJuIEhUTUxfTkFNRVNQQUNFO1xuICB9IC8vIEJ5IGRlZmF1bHQsIHBhc3MgbmFtZXNwYWNlIGJlbG93LlxuXG5cbiAgcmV0dXJuIHBhcmVudE5hbWVzcGFjZTtcbn1cblxuLyogZ2xvYmFscyBNU0FwcCAqL1xuXG4vKipcbiAqIENyZWF0ZSBhIGZ1bmN0aW9uIHdoaWNoIGhhcyAndW5zYWZlJyBwcml2aWxlZ2VzIChyZXF1aXJlZCBieSB3aW5kb3dzOCBhcHBzKVxuICovXG52YXIgY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbiA9IGZ1bmN0aW9uIChmdW5jKSB7XG4gIGlmICh0eXBlb2YgTVNBcHAgIT09ICd1bmRlZmluZWQnICYmIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmdW5jKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuYztcbiAgfVxufTtcblxudmFyIHJldXNhYmxlU1ZHQ29udGFpbmVyO1xuLyoqXG4gKiBTZXQgdGhlIGlubmVySFRNTCBwcm9wZXJ0eSBvZiBhIG5vZGVcbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG52YXIgc2V0SW5uZXJIVE1MID0gY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbiAobm9kZSwgaHRtbCkge1xuICBpZiAobm9kZS5uYW1lc3BhY2VVUkkgPT09IE5hbWVzcGFjZXMuc3ZnKSB7XG5cbiAgICBpZiAoISgnaW5uZXJIVE1MJyBpbiBub2RlKSkge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBpbm5lckhUTUwgZm9yIFNWRyBub2Rlcywgc28gaW5zdGVhZCB3ZSBpbmplY3QgdGhlXG4gICAgICAvLyBuZXcgbWFya3VwIGluIGEgdGVtcCBub2RlIGFuZCB0aGVuIG1vdmUgdGhlIGNoaWxkIG5vZGVzIGFjcm9zcyBpbnRvXG4gICAgICAvLyB0aGUgdGFyZ2V0IG5vZGVcbiAgICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyID0gcmV1c2FibGVTVkdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICByZXVzYWJsZVNWR0NvbnRhaW5lci5pbm5lckhUTUwgPSAnPHN2Zz4nICsgaHRtbC52YWx1ZU9mKCkudG9TdHJpbmcoKSArICc8L3N2Zz4nO1xuICAgICAgdmFyIHN2Z05vZGUgPSByZXVzYWJsZVNWR0NvbnRhaW5lci5maXJzdENoaWxkO1xuXG4gICAgICB3aGlsZSAobm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHN2Z05vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlLmFwcGVuZENoaWxkKHN2Z05vZGUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG59KTtcblxuLyoqXG4gKiBIVE1MIG5vZGVUeXBlIHZhbHVlcyB0aGF0IHJlcHJlc2VudCB0aGUgdHlwZSBvZiB0aGUgbm9kZVxuICovXG52YXIgRUxFTUVOVF9OT0RFID0gMTtcbnZhciBURVhUX05PREUgPSAzO1xudmFyIENPTU1FTlRfTk9ERSA9IDg7XG52YXIgRE9DVU1FTlRfTk9ERSA9IDk7XG52YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERSA9IDExO1xuXG4vKipcbiAqIFNldCB0aGUgdGV4dENvbnRlbnQgcHJvcGVydHkgb2YgYSBub2RlLiBGb3IgdGV4dCB1cGRhdGVzLCBpdCdzIGZhc3RlclxuICogdG8gc2V0IHRoZSBgbm9kZVZhbHVlYCBvZiB0aGUgVGV4dCBub2RlIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmdcbiAqIGAudGV4dENvbnRlbnRgIHdoaWNoIHdpbGwgcmVtb3ZlIHRoZSBleGlzdGluZyBub2RlIGFuZCBjcmVhdGUgYSBuZXcgb25lLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBzZXRUZXh0Q29udGVudCA9IGZ1bmN0aW9uIChub2RlLCB0ZXh0KSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgdmFyIGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cbiAgICBpZiAoZmlyc3RDaGlsZCAmJiBmaXJzdENoaWxkID09PSBub2RlLmxhc3RDaGlsZCAmJiBmaXJzdENoaWxkLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIGZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn07XG5cbi8vIExpc3QgZGVyaXZlZCBmcm9tIEdlY2tvIHNvdXJjZSBjb2RlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvZ2Vja28tZGV2L2Jsb2IvNGU2MzhlZmM3MS9sYXlvdXQvc3R5bGUvdGVzdC9wcm9wZXJ0eV9kYXRhYmFzZS5qc1xudmFyIHNob3J0aGFuZFRvTG9uZ2hhbmQgPSB7XG4gIGFuaW1hdGlvbjogWydhbmltYXRpb25EZWxheScsICdhbmltYXRpb25EaXJlY3Rpb24nLCAnYW5pbWF0aW9uRHVyYXRpb24nLCAnYW5pbWF0aW9uRmlsbE1vZGUnLCAnYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQnLCAnYW5pbWF0aW9uTmFtZScsICdhbmltYXRpb25QbGF5U3RhdGUnLCAnYW5pbWF0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgYmFja2dyb3VuZDogWydiYWNrZ3JvdW5kQXR0YWNobWVudCcsICdiYWNrZ3JvdW5kQ2xpcCcsICdiYWNrZ3JvdW5kQ29sb3InLCAnYmFja2dyb3VuZEltYWdlJywgJ2JhY2tncm91bmRPcmlnaW4nLCAnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJywgJ2JhY2tncm91bmRSZXBlYXQnLCAnYmFja2dyb3VuZFNpemUnXSxcbiAgYmFja2dyb3VuZFBvc2l0aW9uOiBbJ2JhY2tncm91bmRQb3NpdGlvblgnLCAnYmFja2dyb3VuZFBvc2l0aW9uWSddLFxuICBib3JkZXI6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnLCAnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrRW5kOiBbJ2JvcmRlckJsb2NrRW5kQ29sb3InLCAnYm9yZGVyQmxvY2tFbmRTdHlsZScsICdib3JkZXJCbG9ja0VuZFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrU3RhcnQ6IFsnYm9yZGVyQmxvY2tTdGFydENvbG9yJywgJ2JvcmRlckJsb2NrU3RhcnRTdHlsZScsICdib3JkZXJCbG9ja1N0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyQm90dG9tOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG4gIGJvcmRlckNvbG9yOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclRvcENvbG9yJ10sXG4gIGJvcmRlckltYWdlOiBbJ2JvcmRlckltYWdlT3V0c2V0JywgJ2JvcmRlckltYWdlUmVwZWF0JywgJ2JvcmRlckltYWdlU2xpY2UnLCAnYm9yZGVySW1hZ2VTb3VyY2UnLCAnYm9yZGVySW1hZ2VXaWR0aCddLFxuICBib3JkZXJJbmxpbmVFbmQ6IFsnYm9yZGVySW5saW5lRW5kQ29sb3InLCAnYm9yZGVySW5saW5lRW5kU3R5bGUnLCAnYm9yZGVySW5saW5lRW5kV2lkdGgnXSxcbiAgYm9yZGVySW5saW5lU3RhcnQ6IFsnYm9yZGVySW5saW5lU3RhcnRDb2xvcicsICdib3JkZXJJbmxpbmVTdGFydFN0eWxlJywgJ2JvcmRlcklubGluZVN0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyTGVmdDogWydib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlckxlZnRXaWR0aCddLFxuICBib3JkZXJSYWRpdXM6IFsnYm9yZGVyQm90dG9tTGVmdFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVzJ10sXG4gIGJvcmRlclJpZ2h0OiBbJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJ10sXG4gIGJvcmRlclN0eWxlOiBbJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclRvcFN0eWxlJ10sXG4gIGJvcmRlclRvcDogWydib3JkZXJUb3BDb2xvcicsICdib3JkZXJUb3BTdHlsZScsICdib3JkZXJUb3BXaWR0aCddLFxuICBib3JkZXJXaWR0aDogWydib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCcsICdib3JkZXJUb3BXaWR0aCddLFxuICBjb2x1bW5SdWxlOiBbJ2NvbHVtblJ1bGVDb2xvcicsICdjb2x1bW5SdWxlU3R5bGUnLCAnY29sdW1uUnVsZVdpZHRoJ10sXG4gIGNvbHVtbnM6IFsnY29sdW1uQ291bnQnLCAnY29sdW1uV2lkdGgnXSxcbiAgZmxleDogWydmbGV4QmFzaXMnLCAnZmxleEdyb3cnLCAnZmxleFNocmluayddLFxuICBmbGV4RmxvdzogWydmbGV4RGlyZWN0aW9uJywgJ2ZsZXhXcmFwJ10sXG4gIGZvbnQ6IFsnZm9udEZhbWlseScsICdmb250RmVhdHVyZVNldHRpbmdzJywgJ2ZvbnRLZXJuaW5nJywgJ2ZvbnRMYW5ndWFnZU92ZXJyaWRlJywgJ2ZvbnRTaXplJywgJ2ZvbnRTaXplQWRqdXN0JywgJ2ZvbnRTdHJldGNoJywgJ2ZvbnRTdHlsZScsICdmb250VmFyaWFudCcsICdmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJywgJ2ZvbnRXZWlnaHQnLCAnbGluZUhlaWdodCddLFxuICBmb250VmFyaWFudDogWydmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJ10sXG4gIGdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWQ6IFsnZ3JpZEF1dG9Db2x1bW5zJywgJ2dyaWRBdXRvRmxvdycsICdncmlkQXV0b1Jvd3MnLCAnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGdyaWRBcmVhOiBbJ2dyaWRDb2x1bW5FbmQnLCAnZ3JpZENvbHVtblN0YXJ0JywgJ2dyaWRSb3dFbmQnLCAnZ3JpZFJvd1N0YXJ0J10sXG4gIGdyaWRDb2x1bW46IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnXSxcbiAgZ3JpZENvbHVtbkdhcDogWydjb2x1bW5HYXAnXSxcbiAgZ3JpZEdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWRSb3c6IFsnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZFJvd0dhcDogWydyb3dHYXAnXSxcbiAgZ3JpZFRlbXBsYXRlOiBbJ2dyaWRUZW1wbGF0ZUFyZWFzJywgJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnLCAnZ3JpZFRlbXBsYXRlUm93cyddLFxuICBsaXN0U3R5bGU6IFsnbGlzdFN0eWxlSW1hZ2UnLCAnbGlzdFN0eWxlUG9zaXRpb24nLCAnbGlzdFN0eWxlVHlwZSddLFxuICBtYXJnaW46IFsnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luVG9wJ10sXG4gIG1hcmtlcjogWydtYXJrZXJFbmQnLCAnbWFya2VyTWlkJywgJ21hcmtlclN0YXJ0J10sXG4gIG1hc2s6IFsnbWFza0NsaXAnLCAnbWFza0NvbXBvc2l0ZScsICdtYXNrSW1hZ2UnLCAnbWFza01vZGUnLCAnbWFza09yaWdpbicsICdtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknLCAnbWFza1JlcGVhdCcsICdtYXNrU2l6ZSddLFxuICBtYXNrUG9zaXRpb246IFsnbWFza1Bvc2l0aW9uWCcsICdtYXNrUG9zaXRpb25ZJ10sXG4gIG91dGxpbmU6IFsnb3V0bGluZUNvbG9yJywgJ291dGxpbmVTdHlsZScsICdvdXRsaW5lV2lkdGgnXSxcbiAgb3ZlcmZsb3c6IFsnb3ZlcmZsb3dYJywgJ292ZXJmbG93WSddLFxuICBwYWRkaW5nOiBbJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdUb3AnXSxcbiAgcGxhY2VDb250ZW50OiBbJ2FsaWduQ29udGVudCcsICdqdXN0aWZ5Q29udGVudCddLFxuICBwbGFjZUl0ZW1zOiBbJ2FsaWduSXRlbXMnLCAnanVzdGlmeUl0ZW1zJ10sXG4gIHBsYWNlU2VsZjogWydhbGlnblNlbGYnLCAnanVzdGlmeVNlbGYnXSxcbiAgdGV4dERlY29yYXRpb246IFsndGV4dERlY29yYXRpb25Db2xvcicsICd0ZXh0RGVjb3JhdGlvbkxpbmUnLCAndGV4dERlY29yYXRpb25TdHlsZSddLFxuICB0ZXh0RW1waGFzaXM6IFsndGV4dEVtcGhhc2lzQ29sb3InLCAndGV4dEVtcGhhc2lzU3R5bGUnXSxcbiAgdHJhbnNpdGlvbjogWyd0cmFuc2l0aW9uRGVsYXknLCAndHJhbnNpdGlvbkR1cmF0aW9uJywgJ3RyYW5zaXRpb25Qcm9wZXJ0eScsICd0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgd29yZFdyYXA6IFsnb3ZlcmZsb3dXcmFwJ11cbn07XG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG52YXIgaXNVbml0bGVzc051bWJlciA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IHRydWUsXG4gIGJvcmRlckltYWdlT3V0c2V0OiB0cnVlLFxuICBib3JkZXJJbWFnZVNsaWNlOiB0cnVlLFxuICBib3JkZXJJbWFnZVdpZHRoOiB0cnVlLFxuICBib3hGbGV4OiB0cnVlLFxuICBib3hGbGV4R3JvdXA6IHRydWUsXG4gIGJveE9yZGluYWxHcm91cDogdHJ1ZSxcbiAgY29sdW1uQ291bnQ6IHRydWUsXG4gIGNvbHVtbnM6IHRydWUsXG4gIGZsZXg6IHRydWUsXG4gIGZsZXhHcm93OiB0cnVlLFxuICBmbGV4UG9zaXRpdmU6IHRydWUsXG4gIGZsZXhTaHJpbms6IHRydWUsXG4gIGZsZXhOZWdhdGl2ZTogdHJ1ZSxcbiAgZmxleE9yZGVyOiB0cnVlLFxuICBncmlkQXJlYTogdHJ1ZSxcbiAgZ3JpZFJvdzogdHJ1ZSxcbiAgZ3JpZFJvd0VuZDogdHJ1ZSxcbiAgZ3JpZFJvd1NwYW46IHRydWUsXG4gIGdyaWRSb3dTdGFydDogdHJ1ZSxcbiAgZ3JpZENvbHVtbjogdHJ1ZSxcbiAgZ3JpZENvbHVtbkVuZDogdHJ1ZSxcbiAgZ3JpZENvbHVtblNwYW46IHRydWUsXG4gIGdyaWRDb2x1bW5TdGFydDogdHJ1ZSxcbiAgZm9udFdlaWdodDogdHJ1ZSxcbiAgbGluZUNsYW1wOiB0cnVlLFxuICBsaW5lSGVpZ2h0OiB0cnVlLFxuICBvcGFjaXR5OiB0cnVlLFxuICBvcmRlcjogdHJ1ZSxcbiAgb3JwaGFuczogdHJ1ZSxcbiAgdGFiU2l6ZTogdHJ1ZSxcbiAgd2lkb3dzOiB0cnVlLFxuICB6SW5kZXg6IHRydWUsXG4gIHpvb206IHRydWUsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IHRydWUsXG4gIGZsb29kT3BhY2l0eTogdHJ1ZSxcbiAgc3RvcE9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZURhc2hhcnJheTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogdHJ1ZSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogdHJ1ZSxcbiAgc3Ryb2tlT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlV2lkdGg6IHRydWVcbn07XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggdmVuZG9yLXNwZWNpZmljIHByZWZpeCwgZWc6IFdlYmtpdFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBzdHlsZSBuYW1lLCBlZzogdHJhbnNpdGlvbkR1cmF0aW9uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHN0eWxlIG5hbWUgcHJlZml4ZWQgd2l0aCBgcHJlZml4YCwgcHJvcGVybHkgY2FtZWxDYXNlZCwgZWc6XG4gKiBXZWJraXRUcmFuc2l0aW9uRHVyYXRpb25cbiAqL1xuXG5mdW5jdGlvbiBwcmVmaXhLZXkocHJlZml4LCBrZXkpIHtcbiAgcmV0dXJuIHByZWZpeCArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7XG59XG4vKipcbiAqIFN1cHBvcnQgc3R5bGUgbmFtZXMgdGhhdCBtYXkgY29tZSBwYXNzZWQgaW4gcHJlZml4ZWQgYnkgYWRkaW5nIHBlcm11dGF0aW9uc1xuICogb2YgdmVuZG9yIHByZWZpeGVzLlxuICovXG5cblxudmFyIHByZWZpeGVzID0gWydXZWJraXQnLCAnbXMnLCAnTW96JywgJ08nXTsgLy8gVXNpbmcgT2JqZWN0LmtleXMgaGVyZSwgb3IgZWxzZSB0aGUgdmFuaWxsYSBmb3ItaW4gbG9vcCBtYWtlcyBJRTggZ28gaW50byBhblxuLy8gaW5maW5pdGUgbG9vcCwgYmVjYXVzZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBuZXdseSBhZGRlZCBwcm9wcyB0b28uXG5cbk9iamVjdC5rZXlzKGlzVW5pdGxlc3NOdW1iZXIpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgcHJlZml4ZXMuZm9yRWFjaChmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgaXNVbml0bGVzc051bWJlcltwcmVmaXhLZXkocHJlZml4LCBwcm9wKV0gPSBpc1VuaXRsZXNzTnVtYmVyW3Byb3BdO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIHRoZSBwcm9wZXIgY3NzIHdyaXRhYmxlIHZhbHVlLiBUaGUgc3R5bGUgbmFtZSBgbmFtZWBcbiAqIHNob3VsZCBiZSBsb2dpY2FsIChubyBoeXBoZW5zKSwgYXMgc3BlY2lmaWVkXG4gKiBpbiBgQ1NTUHJvcGVydHkuaXNVbml0bGVzc051bWJlcmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQ1NTIHByb3BlcnR5IG5hbWUgc3VjaCBhcyBgdG9wTWFyZ2luYC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQ1NTIHByb3BlcnR5IHZhbHVlIHN1Y2ggYXMgYDEwcHhgLlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIHN0eWxlIHZhbHVlIHdpdGggZGltZW5zaW9ucyBhcHBsaWVkLlxuICovXG5cbmZ1bmN0aW9uIGRhbmdlcm91c1N0eWxlVmFsdWUobmFtZSwgdmFsdWUsIGlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgLy8gTm90ZSB0aGF0IHdlJ3ZlIHJlbW92ZWQgZXNjYXBlVGV4dEZvckJyb3dzZXIoKSBjYWxscyBoZXJlIHNpbmNlIHRoZVxuICAvLyB3aG9sZSBzdHJpbmcgd2lsbCBiZSBlc2NhcGVkIHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBpbmplY3RlZCBpbnRvXG4gIC8vIHRoZSBtYXJrdXAuIElmIHlvdSBwcm92aWRlIHVuc2FmZSB1c2VyIGRhdGEgaGVyZSB0aGV5IGNhbiBpbmplY3RcbiAgLy8gYXJiaXRyYXJ5IENTUyB3aGljaCBtYXkgYmUgcHJvYmxlbWF0aWMgKEkgY291bGRuJ3QgcmVwcm8gdGhpcyk6XG4gIC8vIGh0dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvWFNTX0ZpbHRlcl9FdmFzaW9uX0NoZWF0X1NoZWV0XG4gIC8vIGh0dHA6Ly93d3cudGhlc3Bhbm5lci5jby51ay8yMDA3LzExLzI2L3VsdGltYXRlLXhzcy1jc3MtaW5qZWN0aW9uL1xuICAvLyBUaGlzIGlzIG5vdCBhbiBYU1MgaG9sZSBidXQgaW5zdGVhZCBhIHBvdGVudGlhbCBDU1MgaW5qZWN0aW9uIGlzc3VlXG4gIC8vIHdoaWNoIGhhcyBsZWFkIHRvIGEgZ3JlYXRlciBkaXNjdXNzaW9uIGFib3V0IGhvdyB3ZSdyZSBnb2luZyB0b1xuICAvLyB0cnVzdCBVUkxzIG1vdmluZyBmb3J3YXJkLiBTZWUgIzIxMTU5MDFcbiAgdmFyIGlzRW1wdHkgPSB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJztcblxuICBpZiAoaXNFbXB0eSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICghaXNDdXN0b21Qcm9wZXJ0eSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwICYmICEoaXNVbml0bGVzc051bWJlci5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBpc1VuaXRsZXNzTnVtYmVyW25hbWVdKSkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7IC8vIFByZXN1bWVzIGltcGxpY2l0ICdweCcgc3VmZml4IGZvciB1bml0bGVzcyBudW1iZXJzXG4gIH1cblxuICByZXR1cm4gKCcnICsgdmFsdWUpLnRyaW0oKTtcbn1cblxudmFyIHVwcGVyY2FzZVBhdHRlcm4gPSAvKFtBLVpdKS9nO1xudmFyIG1zUGF0dGVybiA9IC9ebXMtLztcbi8qKlxuICogSHlwaGVuYXRlcyBhIGNhbWVsY2FzZWQgQ1NTIHByb3BlcnR5IG5hbWUsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ01velRyYW5zaXRpb24nKVxuICogICA8IFwiLW1vei10cmFuc2l0aW9uXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ21zVHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbXMtdHJhbnNpdGlvblwiXG4gKlxuICogQXMgTW9kZXJuaXpyIHN1Z2dlc3RzIChodHRwOi8vbW9kZXJuaXpyLmNvbS9kb2NzLyNwcmVmaXhlZCksIGFuIGBtc2AgcHJlZml4XG4gKiBpcyBjb252ZXJ0ZWQgdG8gYC1tcy1gLlxuICovXG5cbmZ1bmN0aW9uIGh5cGhlbmF0ZVN0eWxlTmFtZShuYW1lKSB7XG4gIHJldHVybiBuYW1lLnJlcGxhY2UodXBwZXJjYXNlUGF0dGVybiwgJy0kMScpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShtc1BhdHRlcm4sICctbXMtJyk7XG59XG5cbnZhciB3YXJuVmFsaWRTdHlsZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIC8vICdtc1RyYW5zZm9ybScgaXMgY29ycmVjdCwgYnV0IHRoZSBvdGhlciBwcmVmaXhlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWRcbiAgdmFyIGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybiA9IC9eKD86d2Via2l0fG1venxvKVtBLVpdLztcbiAgdmFyIG1zUGF0dGVybiQxID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nOyAvLyBzdHlsZSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb25cblxuICB2YXIgYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuID0gLztcXHMqJC87XG4gIHZhciB3YXJuZWRTdHlsZU5hbWVzID0ge307XG4gIHZhciB3YXJuZWRTdHlsZVZhbHVlcyA9IHt9O1xuICB2YXIgd2FybmVkRm9yTmFOVmFsdWUgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSBmYWxzZTtcblxuICB2YXIgY2FtZWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChfLCBjaGFyYWN0ZXIpIHtcbiAgICAgIHJldHVybiBjaGFyYWN0ZXIudG9VcHBlckNhc2UoKTtcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdVbnN1cHBvcnRlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIC8vIEFzIEFuZGkgU21pdGggc3VnZ2VzdHNcbiAgICAvLyAoaHR0cDovL3d3dy5hbmRpc21pdGguY29tL2Jsb2cvMjAxMi8wMi9tb2Rlcm5penItcHJlZml4ZWQvKSwgYW4gYC1tc2AgcHJlZml4XG4gICAgLy8gaXMgY29udmVydGVkIHRvIGxvd2VyY2FzZSBgbXNgLlxuICAgIGNhbWVsaXplKG5hbWUucmVwbGFjZShtc1BhdHRlcm4kMSwgJ21zLScpKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Vuc3VwcG9ydGVkIHZlbmRvci1wcmVmaXhlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoXCJTdHlsZSBwcm9wZXJ0eSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb24uIFwiICsgJ1RyeSBcIiVzOiAlc1wiIGluc3RlYWQuJywgbmFtZSwgdmFsdWUucmVwbGFjZShiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4sICcnKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNOYU4gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9yTmFOVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRGb3JOYU5WYWx1ZSA9IHRydWU7XG5cbiAgICBlcnJvcignYE5hTmAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9ySW5maW5pdHlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSB0cnVlO1xuXG4gICAgZXJyb3IoJ2BJbmZpbml0eWAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKG5hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuLnRlc3QobmFtZSkpIHtcbiAgICAgIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uKG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzTmFOKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkobmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlJDEgPSB3YXJuVmFsaWRTdHlsZTtcblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciBkZWFsaW5nIHdpdGggQ1NTIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNyZWF0ZXMgYSBzdHJpbmcgdGhhdCBpcyBleHBlY3RlZCB0byBiZSBlcXVpdmFsZW50IHRvIHRoZSBzdHlsZVxuICogYXR0cmlidXRlIGdlbmVyYXRlZCBieSBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIEl0IGJ5LXBhc3NlcyB3YXJuaW5ncyBhbmRcbiAqIHNlY3VyaXR5IGNoZWNrcyBzbyBpdCdzIG5vdCBzYWZlIHRvIHVzZSB0aGlzIHZhbHVlIGZvciBhbnl0aGluZyBvdGhlciB0aGFuXG4gKiBjb21wYXJpc29uLiBJdCBpcyBvbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEYW5nZXJvdXNTdHJpbmdGb3JTdHlsZXMoc3R5bGVzKSB7XG4gIHtcbiAgICB2YXIgc2VyaWFsaXplZCA9ICcnO1xuICAgIHZhciBkZWxpbWl0ZXIgPSAnJztcblxuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHlsZVZhbHVlID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cbiAgICAgIGlmIChzdHlsZVZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtcbiAgICAgICAgc2VyaWFsaXplZCArPSBkZWxpbWl0ZXIgKyAoaXNDdXN0b21Qcm9wZXJ0eSA/IHN0eWxlTmFtZSA6IGh5cGhlbmF0ZVN0eWxlTmFtZShzdHlsZU5hbWUpKSArICc6JztcbiAgICAgICAgc2VyaWFsaXplZCArPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSwgaXNDdXN0b21Qcm9wZXJ0eSk7XG4gICAgICAgIGRlbGltaXRlciA9ICc7JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VyaWFsaXplZCB8fCBudWxsO1xuICB9XG59XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGZvciBtdWx0aXBsZSBzdHlsZXMgb24gYSBub2RlLiAgSWYgYSB2YWx1ZSBpcyBzcGVjaWZpZWQgYXNcbiAqICcnIChlbXB0eSBzdHJpbmcpLCB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVuc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IHN0eWxlc1xuICovXG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yU3R5bGVzKG5vZGUsIHN0eWxlcykge1xuICB2YXIgc3R5bGUgPSBub2RlLnN0eWxlO1xuXG4gIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuXG4gICAge1xuICAgICAgaWYgKCFpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICAgIHdhcm5WYWxpZFN0eWxlJDEoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlVmFsdWUgPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0sIGlzQ3VzdG9tUHJvcGVydHkpO1xuXG4gICAgaWYgKHN0eWxlTmFtZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgc3R5bGVOYW1lID0gJ2Nzc0Zsb2F0JztcbiAgICB9XG5cbiAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCBzdHlsZVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVbc3R5bGVOYW1lXSA9IHN0eWxlVmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVFbXB0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG59XG4vKipcbiAqIEdpdmVuIHtjb2xvcjogJ3JlZCcsIG92ZXJmbG93OiAnaGlkZGVuJ30gcmV0dXJucyB7XG4gKiAgIGNvbG9yOiAnY29sb3InLFxuICogICBvdmVyZmxvd1g6ICdvdmVyZmxvdycsXG4gKiAgIG92ZXJmbG93WTogJ292ZXJmbG93JyxcbiAqIH0uIFRoaXMgY2FuIGJlIHJlYWQgYXMgXCJ0aGUgb3ZlcmZsb3dZIHByb3BlcnR5IHdhcyBzZXQgYnkgdGhlIG92ZXJmbG93XG4gKiBzaG9ydGhhbmRcIi4gVGhhdCBpcywgdGhlIHZhbHVlcyBhcmUgdGhlIHByb3BlcnR5IHRoYXQgZWFjaCB3YXMgZGVyaXZlZCBmcm9tLlxuICovXG5cblxuZnVuY3Rpb24gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlcykge1xuICB2YXIgZXhwYW5kZWQgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gc3R5bGVzKSB7XG4gICAgdmFyIGxvbmdoYW5kcyA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5XSB8fCBba2V5XTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2hhbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBleHBhbmRlZFtsb25naGFuZHNbaV1dID0ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBhbmRlZDtcbn1cbi8qKlxuICogV2hlbiBtaXhpbmcgc2hvcnRoYW5kIGFuZCBsb25naGFuZCBwcm9wZXJ0eSBuYW1lcywgd2Ugd2FybiBkdXJpbmcgdXBkYXRlcyBpZlxuICogd2UgZXhwZWN0IGFuIGluY29ycmVjdCByZXN1bHQgdG8gb2NjdXIuIEluIHBhcnRpY3VsYXIsIHdlIHdhcm4gZm9yOlxuICpcbiAqIFVwZGF0aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIG92ZXJ3cml0dGVuKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250OiAnYmF6JywgZm9udFZhcmlhbnQ6ICdiYXInfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250ID0gJ2JheidcbiAqIFJlbW92aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIGxvc3QgdG9vKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250VmFyaWFudDogJ2Jhcid9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnQgPSAnJ1xuICogUmVtb3ZpbmcgYSBsb25naGFuZCBwcm9wZXJ0eSAoc2hvdWxkIHJldmVydCB0byBzaG9ydGhhbmQ7IGRvZXNuJ3QpOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnQ6ICdmb28nfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250VmFyaWFudCA9ICcnXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYoc3R5bGVVcGRhdGVzLCBuZXh0U3R5bGVzKSB7XG4gIHtcbiAgICBpZiAoIW5leHRTdHlsZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXhwYW5kZWRVcGRhdGVzID0gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlVXBkYXRlcyk7XG4gICAgdmFyIGV4cGFuZGVkU3R5bGVzID0gZXhwYW5kU2hvcnRoYW5kTWFwKG5leHRTdHlsZXMpO1xuICAgIHZhciB3YXJuZWRBYm91dCA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIGV4cGFuZGVkVXBkYXRlcykge1xuICAgICAgdmFyIG9yaWdpbmFsS2V5ID0gZXhwYW5kZWRVcGRhdGVzW2tleV07XG4gICAgICB2YXIgY29ycmVjdE9yaWdpbmFsS2V5ID0gZXhwYW5kZWRTdHlsZXNba2V5XTtcblxuICAgICAgaWYgKGNvcnJlY3RPcmlnaW5hbEtleSAmJiBvcmlnaW5hbEtleSAhPT0gY29ycmVjdE9yaWdpbmFsS2V5KSB7XG4gICAgICAgIHZhciB3YXJuaW5nS2V5ID0gb3JpZ2luYWxLZXkgKyAnLCcgKyBjb3JyZWN0T3JpZ2luYWxLZXk7XG5cbiAgICAgICAgaWYgKHdhcm5lZEFib3V0W3dhcm5pbmdLZXldKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB3YXJuZWRBYm91dFt3YXJuaW5nS2V5XSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzIGEgc3R5bGUgcHJvcGVydHkgZHVyaW5nIHJlcmVuZGVyICglcykgd2hlbiBhICcgKyAnY29uZmxpY3RpbmcgcHJvcGVydHkgaXMgc2V0ICglcykgY2FuIGxlYWQgdG8gc3R5bGluZyBidWdzLiBUbyAnICsgXCJhdm9pZCB0aGlzLCBkb24ndCBtaXggc2hvcnRoYW5kIGFuZCBub24tc2hvcnRoYW5kIHByb3BlcnRpZXMgXCIgKyAnZm9yIHRoZSBzYW1lIHZhbHVlOyBpbnN0ZWFkLCByZXBsYWNlIHRoZSBzaG9ydGhhbmQgd2l0aCAnICsgJ3NlcGFyYXRlIHZhbHVlcy4nLCBpc1ZhbHVlRW1wdHkoc3R5bGVVcGRhdGVzW29yaWdpbmFsS2V5XSkgPyAnUmVtb3ZpbmcnIDogJ1VwZGF0aW5nJywgb3JpZ2luYWxLZXksIGNvcnJlY3RPcmlnaW5hbEtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEZvciBIVE1MLCBjZXJ0YWluIHRhZ3Mgc2hvdWxkIG9taXQgdGhlaXIgY2xvc2UgdGFnLiBXZSBrZWVwIGEgbGlzdCBmb3Jcbi8vIHRob3NlIHNwZWNpYWwtY2FzZSB0YWdzLlxudmFyIG9taXR0ZWRDbG9zZVRhZ3MgPSB7XG4gIGFyZWE6IHRydWUsXG4gIGJhc2U6IHRydWUsXG4gIGJyOiB0cnVlLFxuICBjb2w6IHRydWUsXG4gIGVtYmVkOiB0cnVlLFxuICBocjogdHJ1ZSxcbiAgaW1nOiB0cnVlLFxuICBpbnB1dDogdHJ1ZSxcbiAga2V5Z2VuOiB0cnVlLFxuICBsaW5rOiB0cnVlLFxuICBtZXRhOiB0cnVlLFxuICBwYXJhbTogdHJ1ZSxcbiAgc291cmNlOiB0cnVlLFxuICB0cmFjazogdHJ1ZSxcbiAgd2JyOiB0cnVlIC8vIE5PVEU6IG1lbnVpdGVtJ3MgY2xvc2UgdGFnIHNob3VsZCBiZSBvbWl0dGVkLCBidXQgdGhhdCBjYXVzZXMgcHJvYmxlbXMuXG5cbn07XG5cbi8vIGBvbWl0dGVkQ2xvc2VUYWdzYCBleGNlcHQgdGhhdCBgbWVudWl0ZW1gIHNob3VsZCBzdGlsbCBoYXZlIGl0cyBjbG9zaW5nIHRhZy5cblxudmFyIHZvaWRFbGVtZW50VGFncyA9IF9hc3NpZ24oe1xuICBtZW51aXRlbTogdHJ1ZVxufSwgb21pdHRlZENsb3NlVGFncyk7XG5cbnZhciBIVE1MID0gJ19faHRtbCc7XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUHJvcHModGFnLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIE5vdGUgdGhlIHVzZSBvZiBgPT1gIHdoaWNoIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWQuXG5cblxuICBpZiAodm9pZEVsZW1lbnRUYWdzW3RhZ10pIHtcbiAgICBpZiAoIShwcm9wcy5jaGlsZHJlbiA9PSBudWxsICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCB0YWcgKyBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICE9IG51bGwpIHtcbiAgICBpZiAoIShwcm9wcy5jaGlsZHJlbiA9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJDYW4gb25seSBzZXQgb25lIG9mIGBjaGlsZHJlbmAgb3IgYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiYgSFRNTCBpbiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIGluIHRoZSBmb3JtIGB7X19odG1sOiAuLi59YC4gUGxlYXNlIHZpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kYW5nZXJvdXNseS1zZXQtaW5uZXItaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoIXByb3BzLnN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyAmJiBwcm9wcy5jb250ZW50RWRpdGFibGUgJiYgcHJvcHMuY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0EgY29tcG9uZW50IGlzIGBjb250ZW50RWRpdGFibGVgIGFuZCBjb250YWlucyBgY2hpbGRyZW5gIG1hbmFnZWQgYnkgJyArICdSZWFjdC4gSXQgaXMgbm93IHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gZ3VhcmFudGVlIHRoYXQgbm9uZSBvZiAnICsgJ3Rob3NlIG5vZGVzIGFyZSB1bmV4cGVjdGVkbHkgbW9kaWZpZWQgb3IgZHVwbGljYXRlZC4gVGhpcyBpcyAnICsgJ3Byb2JhYmx5IG5vdCBpbnRlbnRpb25hbC4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIShwcm9wcy5zdHlsZSA9PSBudWxsIHx8IHR5cGVvZiBwcm9wcy5zdHlsZSA9PT0gJ29iamVjdCcpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIGBzdHlsZWAgcHJvcCBleHBlY3RzIGEgbWFwcGluZyBmcm9tIHN0eWxlIHByb3BlcnRpZXMgdG8gdmFsdWVzLCBub3QgYSBzdHJpbmcuIEZvciBleGFtcGxlLCBzdHlsZT17e21hcmdpblJpZ2h0OiBzcGFjaW5nICsgJ2VtJ319IHdoZW4gdXNpbmcgSlNYLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ3VzdG9tQ29tcG9uZW50KHRhZ05hbWUsIHByb3BzKSB7XG4gIGlmICh0YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gdHlwZW9mIHByb3BzLmlzID09PSAnc3RyaW5nJztcbiAgfVxuXG4gIHN3aXRjaCAodGFnTmFtZSkge1xuICAgIC8vIFRoZXNlIGFyZSByZXNlcnZlZCBTVkcgYW5kIE1hdGhNTCBlbGVtZW50cy5cbiAgICAvLyBXZSBkb24ndCBtaW5kIHRoaXMgbGlzdCB0b28gbXVjaCBiZWNhdXNlIHdlIGV4cGVjdCBpdCB0byBuZXZlciBncm93LlxuICAgIC8vIFRoZSBhbHRlcm5hdGl2ZSBpcyB0byB0cmFjayB0aGUgbmFtZXNwYWNlIGluIGEgZmV3IHBsYWNlcyB3aGljaCBpcyBjb252b2x1dGVkLlxuICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJjb21wb25lbnRzL3NwZWMvY3VzdG9tLyNjdXN0b20tZWxlbWVudHMtY29yZS1jb25jZXB0c1xuICAgIGNhc2UgJ2Fubm90YXRpb24teG1sJzpcbiAgICBjYXNlICdjb2xvci1wcm9maWxlJzpcbiAgICBjYXNlICdmb250LWZhY2UnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1zcmMnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS11cmknOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1mb3JtYXQnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1uYW1lJzpcbiAgICBjYXNlICdtaXNzaW5nLWdseXBoJzpcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vLyBXaGVuIGFkZGluZyBhdHRyaWJ1dGVzIHRvIHRoZSBIVE1MIG9yIFNWRyBhbGxvd2VkIGF0dHJpYnV0ZSBsaXN0LCBiZSBzdXJlIHRvXG4vLyBhbHNvIGFkZCB0aGVtIHRvIHRoaXMgbW9kdWxlIHRvIGVuc3VyZSBjYXNpbmcgYW5kIGluY29ycmVjdCBuYW1lXG4vLyB3YXJuaW5ncy5cbnZhciBwb3NzaWJsZVN0YW5kYXJkTmFtZXMgPSB7XG4gIC8vIEhUTUxcbiAgYWNjZXB0OiAnYWNjZXB0JyxcbiAgYWNjZXB0Y2hhcnNldDogJ2FjY2VwdENoYXJzZXQnLFxuICAnYWNjZXB0LWNoYXJzZXQnOiAnYWNjZXB0Q2hhcnNldCcsXG4gIGFjY2Vzc2tleTogJ2FjY2Vzc0tleScsXG4gIGFjdGlvbjogJ2FjdGlvbicsXG4gIGFsbG93ZnVsbHNjcmVlbjogJ2FsbG93RnVsbFNjcmVlbicsXG4gIGFsdDogJ2FsdCcsXG4gIGFzOiAnYXMnLFxuICBhc3luYzogJ2FzeW5jJyxcbiAgYXV0b2NhcGl0YWxpemU6ICdhdXRvQ2FwaXRhbGl6ZScsXG4gIGF1dG9jb21wbGV0ZTogJ2F1dG9Db21wbGV0ZScsXG4gIGF1dG9jb3JyZWN0OiAnYXV0b0NvcnJlY3QnLFxuICBhdXRvZm9jdXM6ICdhdXRvRm9jdXMnLFxuICBhdXRvcGxheTogJ2F1dG9QbGF5JyxcbiAgYXV0b3NhdmU6ICdhdXRvU2F2ZScsXG4gIGNhcHR1cmU6ICdjYXB0dXJlJyxcbiAgY2VsbHBhZGRpbmc6ICdjZWxsUGFkZGluZycsXG4gIGNlbGxzcGFjaW5nOiAnY2VsbFNwYWNpbmcnLFxuICBjaGFsbGVuZ2U6ICdjaGFsbGVuZ2UnLFxuICBjaGFyc2V0OiAnY2hhclNldCcsXG4gIGNoZWNrZWQ6ICdjaGVja2VkJyxcbiAgY2hpbGRyZW46ICdjaGlsZHJlbicsXG4gIGNpdGU6ICdjaXRlJyxcbiAgY2xhc3M6ICdjbGFzc05hbWUnLFxuICBjbGFzc2lkOiAnY2xhc3NJRCcsXG4gIGNsYXNzbmFtZTogJ2NsYXNzTmFtZScsXG4gIGNvbHM6ICdjb2xzJyxcbiAgY29sc3BhbjogJ2NvbFNwYW4nLFxuICBjb250ZW50OiAnY29udGVudCcsXG4gIGNvbnRlbnRlZGl0YWJsZTogJ2NvbnRlbnRFZGl0YWJsZScsXG4gIGNvbnRleHRtZW51OiAnY29udGV4dE1lbnUnLFxuICBjb250cm9sczogJ2NvbnRyb2xzJyxcbiAgY29udHJvbHNsaXN0OiAnY29udHJvbHNMaXN0JyxcbiAgY29vcmRzOiAnY29vcmRzJyxcbiAgY3Jvc3NvcmlnaW46ICdjcm9zc09yaWdpbicsXG4gIGRhbmdlcm91c2x5c2V0aW5uZXJodG1sOiAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLFxuICBkYXRhOiAnZGF0YScsXG4gIGRhdGV0aW1lOiAnZGF0ZVRpbWUnLFxuICBkZWZhdWx0OiAnZGVmYXVsdCcsXG4gIGRlZmF1bHRjaGVja2VkOiAnZGVmYXVsdENoZWNrZWQnLFxuICBkZWZhdWx0dmFsdWU6ICdkZWZhdWx0VmFsdWUnLFxuICBkZWZlcjogJ2RlZmVyJyxcbiAgZGlyOiAnZGlyJyxcbiAgZGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gIGRpc2FibGVwaWN0dXJlaW5waWN0dXJlOiAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnLFxuICBkaXNhYmxlcmVtb3RlcGxheWJhY2s6ICdkaXNhYmxlUmVtb3RlUGxheWJhY2snLFxuICBkb3dubG9hZDogJ2Rvd25sb2FkJyxcbiAgZHJhZ2dhYmxlOiAnZHJhZ2dhYmxlJyxcbiAgZW5jdHlwZTogJ2VuY1R5cGUnLFxuICBlbnRlcmtleWhpbnQ6ICdlbnRlcktleUhpbnQnLFxuICBmb3I6ICdodG1sRm9yJyxcbiAgZm9ybTogJ2Zvcm0nLFxuICBmb3JtbWV0aG9kOiAnZm9ybU1ldGhvZCcsXG4gIGZvcm1hY3Rpb246ICdmb3JtQWN0aW9uJyxcbiAgZm9ybWVuY3R5cGU6ICdmb3JtRW5jVHlwZScsXG4gIGZvcm1ub3ZhbGlkYXRlOiAnZm9ybU5vVmFsaWRhdGUnLFxuICBmb3JtdGFyZ2V0OiAnZm9ybVRhcmdldCcsXG4gIGZyYW1lYm9yZGVyOiAnZnJhbWVCb3JkZXInLFxuICBoZWFkZXJzOiAnaGVhZGVycycsXG4gIGhlaWdodDogJ2hlaWdodCcsXG4gIGhpZGRlbjogJ2hpZGRlbicsXG4gIGhpZ2g6ICdoaWdoJyxcbiAgaHJlZjogJ2hyZWYnLFxuICBocmVmbGFuZzogJ2hyZWZMYW5nJyxcbiAgaHRtbGZvcjogJ2h0bWxGb3InLFxuICBodHRwZXF1aXY6ICdodHRwRXF1aXYnLFxuICAnaHR0cC1lcXVpdic6ICdodHRwRXF1aXYnLFxuICBpY29uOiAnaWNvbicsXG4gIGlkOiAnaWQnLFxuICBpbm5lcmh0bWw6ICdpbm5lckhUTUwnLFxuICBpbnB1dG1vZGU6ICdpbnB1dE1vZGUnLFxuICBpbnRlZ3JpdHk6ICdpbnRlZ3JpdHknLFxuICBpczogJ2lzJyxcbiAgaXRlbWlkOiAnaXRlbUlEJyxcbiAgaXRlbXByb3A6ICdpdGVtUHJvcCcsXG4gIGl0ZW1yZWY6ICdpdGVtUmVmJyxcbiAgaXRlbXNjb3BlOiAnaXRlbVNjb3BlJyxcbiAgaXRlbXR5cGU6ICdpdGVtVHlwZScsXG4gIGtleXBhcmFtczogJ2tleVBhcmFtcycsXG4gIGtleXR5cGU6ICdrZXlUeXBlJyxcbiAga2luZDogJ2tpbmQnLFxuICBsYWJlbDogJ2xhYmVsJyxcbiAgbGFuZzogJ2xhbmcnLFxuICBsaXN0OiAnbGlzdCcsXG4gIGxvb3A6ICdsb29wJyxcbiAgbG93OiAnbG93JyxcbiAgbWFuaWZlc3Q6ICdtYW5pZmVzdCcsXG4gIG1hcmdpbndpZHRoOiAnbWFyZ2luV2lkdGgnLFxuICBtYXJnaW5oZWlnaHQ6ICdtYXJnaW5IZWlnaHQnLFxuICBtYXg6ICdtYXgnLFxuICBtYXhsZW5ndGg6ICdtYXhMZW5ndGgnLFxuICBtZWRpYTogJ21lZGlhJyxcbiAgbWVkaWFncm91cDogJ21lZGlhR3JvdXAnLFxuICBtZXRob2Q6ICdtZXRob2QnLFxuICBtaW46ICdtaW4nLFxuICBtaW5sZW5ndGg6ICdtaW5MZW5ndGgnLFxuICBtdWx0aXBsZTogJ211bHRpcGxlJyxcbiAgbXV0ZWQ6ICdtdXRlZCcsXG4gIG5hbWU6ICduYW1lJyxcbiAgbm9tb2R1bGU6ICdub01vZHVsZScsXG4gIG5vbmNlOiAnbm9uY2UnLFxuICBub3ZhbGlkYXRlOiAnbm9WYWxpZGF0ZScsXG4gIG9wZW46ICdvcGVuJyxcbiAgb3B0aW11bTogJ29wdGltdW0nLFxuICBwYXR0ZXJuOiAncGF0dGVybicsXG4gIHBsYWNlaG9sZGVyOiAncGxhY2Vob2xkZXInLFxuICBwbGF5c2lubGluZTogJ3BsYXlzSW5saW5lJyxcbiAgcG9zdGVyOiAncG9zdGVyJyxcbiAgcHJlbG9hZDogJ3ByZWxvYWQnLFxuICBwcm9maWxlOiAncHJvZmlsZScsXG4gIHJhZGlvZ3JvdXA6ICdyYWRpb0dyb3VwJyxcbiAgcmVhZG9ubHk6ICdyZWFkT25seScsXG4gIHJlZmVycmVycG9saWN5OiAncmVmZXJyZXJQb2xpY3knLFxuICByZWw6ICdyZWwnLFxuICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgcmV2ZXJzZWQ6ICdyZXZlcnNlZCcsXG4gIHJvbGU6ICdyb2xlJyxcbiAgcm93czogJ3Jvd3MnLFxuICByb3dzcGFuOiAncm93U3BhbicsXG4gIHNhbmRib3g6ICdzYW5kYm94JyxcbiAgc2NvcGU6ICdzY29wZScsXG4gIHNjb3BlZDogJ3Njb3BlZCcsXG4gIHNjcm9sbGluZzogJ3Njcm9sbGluZycsXG4gIHNlYW1sZXNzOiAnc2VhbWxlc3MnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJyxcbiAgc2hhcGU6ICdzaGFwZScsXG4gIHNpemU6ICdzaXplJyxcbiAgc2l6ZXM6ICdzaXplcycsXG4gIHNwYW46ICdzcGFuJyxcbiAgc3BlbGxjaGVjazogJ3NwZWxsQ2hlY2snLFxuICBzcmM6ICdzcmMnLFxuICBzcmNkb2M6ICdzcmNEb2MnLFxuICBzcmNsYW5nOiAnc3JjTGFuZycsXG4gIHNyY3NldDogJ3NyY1NldCcsXG4gIHN0YXJ0OiAnc3RhcnQnLFxuICBzdGVwOiAnc3RlcCcsXG4gIHN0eWxlOiAnc3R5bGUnLFxuICBzdW1tYXJ5OiAnc3VtbWFyeScsXG4gIHRhYmluZGV4OiAndGFiSW5kZXgnLFxuICB0YXJnZXQ6ICd0YXJnZXQnLFxuICB0aXRsZTogJ3RpdGxlJyxcbiAgdHlwZTogJ3R5cGUnLFxuICB1c2VtYXA6ICd1c2VNYXAnLFxuICB2YWx1ZTogJ3ZhbHVlJyxcbiAgd2lkdGg6ICd3aWR0aCcsXG4gIHdtb2RlOiAnd21vZGUnLFxuICB3cmFwOiAnd3JhcCcsXG4gIC8vIFNWR1xuICBhYm91dDogJ2Fib3V0JyxcbiAgYWNjZW50aGVpZ2h0OiAnYWNjZW50SGVpZ2h0JyxcbiAgJ2FjY2VudC1oZWlnaHQnOiAnYWNjZW50SGVpZ2h0JyxcbiAgYWNjdW11bGF0ZTogJ2FjY3VtdWxhdGUnLFxuICBhZGRpdGl2ZTogJ2FkZGl0aXZlJyxcbiAgYWxpZ25tZW50YmFzZWxpbmU6ICdhbGlnbm1lbnRCYXNlbGluZScsXG4gICdhbGlnbm1lbnQtYmFzZWxpbmUnOiAnYWxpZ25tZW50QmFzZWxpbmUnLFxuICBhbGxvd3Jlb3JkZXI6ICdhbGxvd1Jlb3JkZXInLFxuICBhbHBoYWJldGljOiAnYWxwaGFiZXRpYycsXG4gIGFtcGxpdHVkZTogJ2FtcGxpdHVkZScsXG4gIGFyYWJpY2Zvcm06ICdhcmFiaWNGb3JtJyxcbiAgJ2FyYWJpYy1mb3JtJzogJ2FyYWJpY0Zvcm0nLFxuICBhc2NlbnQ6ICdhc2NlbnQnLFxuICBhdHRyaWJ1dGVuYW1lOiAnYXR0cmlidXRlTmFtZScsXG4gIGF0dHJpYnV0ZXR5cGU6ICdhdHRyaWJ1dGVUeXBlJyxcbiAgYXV0b3JldmVyc2U6ICdhdXRvUmV2ZXJzZScsXG4gIGF6aW11dGg6ICdhemltdXRoJyxcbiAgYmFzZWZyZXF1ZW5jeTogJ2Jhc2VGcmVxdWVuY3knLFxuICBiYXNlbGluZXNoaWZ0OiAnYmFzZWxpbmVTaGlmdCcsXG4gICdiYXNlbGluZS1zaGlmdCc6ICdiYXNlbGluZVNoaWZ0JyxcbiAgYmFzZXByb2ZpbGU6ICdiYXNlUHJvZmlsZScsXG4gIGJib3g6ICdiYm94JyxcbiAgYmVnaW46ICdiZWdpbicsXG4gIGJpYXM6ICdiaWFzJyxcbiAgYnk6ICdieScsXG4gIGNhbGNtb2RlOiAnY2FsY01vZGUnLFxuICBjYXBoZWlnaHQ6ICdjYXBIZWlnaHQnLFxuICAnY2FwLWhlaWdodCc6ICdjYXBIZWlnaHQnLFxuICBjbGlwOiAnY2xpcCcsXG4gIGNsaXBwYXRoOiAnY2xpcFBhdGgnLFxuICAnY2xpcC1wYXRoJzogJ2NsaXBQYXRoJyxcbiAgY2xpcHBhdGh1bml0czogJ2NsaXBQYXRoVW5pdHMnLFxuICBjbGlwcnVsZTogJ2NsaXBSdWxlJyxcbiAgJ2NsaXAtcnVsZSc6ICdjbGlwUnVsZScsXG4gIGNvbG9yOiAnY29sb3InLFxuICBjb2xvcmludGVycG9sYXRpb246ICdjb2xvckludGVycG9sYXRpb24nLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbic6ICdjb2xvckludGVycG9sYXRpb24nLFxuICBjb2xvcmludGVycG9sYXRpb25maWx0ZXJzOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gIGNvbG9ycHJvZmlsZTogJ2NvbG9yUHJvZmlsZScsXG4gICdjb2xvci1wcm9maWxlJzogJ2NvbG9yUHJvZmlsZScsXG4gIGNvbG9ycmVuZGVyaW5nOiAnY29sb3JSZW5kZXJpbmcnLFxuICAnY29sb3ItcmVuZGVyaW5nJzogJ2NvbG9yUmVuZGVyaW5nJyxcbiAgY29udGVudHNjcmlwdHR5cGU6ICdjb250ZW50U2NyaXB0VHlwZScsXG4gIGNvbnRlbnRzdHlsZXR5cGU6ICdjb250ZW50U3R5bGVUeXBlJyxcbiAgY3Vyc29yOiAnY3Vyc29yJyxcbiAgY3g6ICdjeCcsXG4gIGN5OiAnY3knLFxuICBkOiAnZCcsXG4gIGRhdGF0eXBlOiAnZGF0YXR5cGUnLFxuICBkZWNlbGVyYXRlOiAnZGVjZWxlcmF0ZScsXG4gIGRlc2NlbnQ6ICdkZXNjZW50JyxcbiAgZGlmZnVzZWNvbnN0YW50OiAnZGlmZnVzZUNvbnN0YW50JyxcbiAgZGlyZWN0aW9uOiAnZGlyZWN0aW9uJyxcbiAgZGlzcGxheTogJ2Rpc3BsYXknLFxuICBkaXZpc29yOiAnZGl2aXNvcicsXG4gIGRvbWluYW50YmFzZWxpbmU6ICdkb21pbmFudEJhc2VsaW5lJyxcbiAgJ2RvbWluYW50LWJhc2VsaW5lJzogJ2RvbWluYW50QmFzZWxpbmUnLFxuICBkdXI6ICdkdXInLFxuICBkeDogJ2R4JyxcbiAgZHk6ICdkeScsXG4gIGVkZ2Vtb2RlOiAnZWRnZU1vZGUnLFxuICBlbGV2YXRpb246ICdlbGV2YXRpb24nLFxuICBlbmFibGViYWNrZ3JvdW5kOiAnZW5hYmxlQmFja2dyb3VuZCcsXG4gICdlbmFibGUtYmFja2dyb3VuZCc6ICdlbmFibGVCYWNrZ3JvdW5kJyxcbiAgZW5kOiAnZW5kJyxcbiAgZXhwb25lbnQ6ICdleHBvbmVudCcsXG4gIGV4dGVybmFscmVzb3VyY2VzcmVxdWlyZWQ6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcbiAgZmlsbDogJ2ZpbGwnLFxuICBmaWxsb3BhY2l0eTogJ2ZpbGxPcGFjaXR5JyxcbiAgJ2ZpbGwtb3BhY2l0eSc6ICdmaWxsT3BhY2l0eScsXG4gIGZpbGxydWxlOiAnZmlsbFJ1bGUnLFxuICAnZmlsbC1ydWxlJzogJ2ZpbGxSdWxlJyxcbiAgZmlsdGVyOiAnZmlsdGVyJyxcbiAgZmlsdGVycmVzOiAnZmlsdGVyUmVzJyxcbiAgZmlsdGVydW5pdHM6ICdmaWx0ZXJVbml0cycsXG4gIGZsb29kb3BhY2l0eTogJ2Zsb29kT3BhY2l0eScsXG4gICdmbG9vZC1vcGFjaXR5JzogJ2Zsb29kT3BhY2l0eScsXG4gIGZsb29kY29sb3I6ICdmbG9vZENvbG9yJyxcbiAgJ2Zsb29kLWNvbG9yJzogJ2Zsb29kQ29sb3InLFxuICBmb2N1c2FibGU6ICdmb2N1c2FibGUnLFxuICBmb250ZmFtaWx5OiAnZm9udEZhbWlseScsXG4gICdmb250LWZhbWlseSc6ICdmb250RmFtaWx5JyxcbiAgZm9udHNpemU6ICdmb250U2l6ZScsXG4gICdmb250LXNpemUnOiAnZm9udFNpemUnLFxuICBmb250c2l6ZWFkanVzdDogJ2ZvbnRTaXplQWRqdXN0JyxcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnOiAnZm9udFNpemVBZGp1c3QnLFxuICBmb250c3RyZXRjaDogJ2ZvbnRTdHJldGNoJyxcbiAgJ2ZvbnQtc3RyZXRjaCc6ICdmb250U3RyZXRjaCcsXG4gIGZvbnRzdHlsZTogJ2ZvbnRTdHlsZScsXG4gICdmb250LXN0eWxlJzogJ2ZvbnRTdHlsZScsXG4gIGZvbnR2YXJpYW50OiAnZm9udFZhcmlhbnQnLFxuICAnZm9udC12YXJpYW50JzogJ2ZvbnRWYXJpYW50JyxcbiAgZm9udHdlaWdodDogJ2ZvbnRXZWlnaHQnLFxuICAnZm9udC13ZWlnaHQnOiAnZm9udFdlaWdodCcsXG4gIGZvcm1hdDogJ2Zvcm1hdCcsXG4gIGZyb206ICdmcm9tJyxcbiAgZng6ICdmeCcsXG4gIGZ5OiAnZnknLFxuICBnMTogJ2cxJyxcbiAgZzI6ICdnMicsXG4gIGdseXBobmFtZTogJ2dseXBoTmFtZScsXG4gICdnbHlwaC1uYW1lJzogJ2dseXBoTmFtZScsXG4gIGdseXBob3JpZW50YXRpb25ob3Jpem9udGFsOiAnZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCc6ICdnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCcsXG4gIGdseXBob3JpZW50YXRpb252ZXJ0aWNhbDogJ2dseXBoT3JpZW50YXRpb25WZXJ0aWNhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCc6ICdnbHlwaE9yaWVudGF0aW9uVmVydGljYWwnLFxuICBnbHlwaHJlZjogJ2dseXBoUmVmJyxcbiAgZ3JhZGllbnR0cmFuc2Zvcm06ICdncmFkaWVudFRyYW5zZm9ybScsXG4gIGdyYWRpZW50dW5pdHM6ICdncmFkaWVudFVuaXRzJyxcbiAgaGFuZ2luZzogJ2hhbmdpbmcnLFxuICBob3JpemFkdng6ICdob3JpekFkdlgnLFxuICAnaG9yaXotYWR2LXgnOiAnaG9yaXpBZHZYJyxcbiAgaG9yaXpvcmlnaW54OiAnaG9yaXpPcmlnaW5YJyxcbiAgJ2hvcml6LW9yaWdpbi14JzogJ2hvcml6T3JpZ2luWCcsXG4gIGlkZW9ncmFwaGljOiAnaWRlb2dyYXBoaWMnLFxuICBpbWFnZXJlbmRlcmluZzogJ2ltYWdlUmVuZGVyaW5nJyxcbiAgJ2ltYWdlLXJlbmRlcmluZyc6ICdpbWFnZVJlbmRlcmluZycsXG4gIGluMjogJ2luMicsXG4gIGluOiAnaW4nLFxuICBpbmxpc3Q6ICdpbmxpc3QnLFxuICBpbnRlcmNlcHQ6ICdpbnRlcmNlcHQnLFxuICBrMTogJ2sxJyxcbiAgazI6ICdrMicsXG4gIGszOiAnazMnLFxuICBrNDogJ2s0JyxcbiAgazogJ2snLFxuICBrZXJuZWxtYXRyaXg6ICdrZXJuZWxNYXRyaXgnLFxuICBrZXJuZWx1bml0bGVuZ3RoOiAna2VybmVsVW5pdExlbmd0aCcsXG4gIGtlcm5pbmc6ICdrZXJuaW5nJyxcbiAga2V5cG9pbnRzOiAna2V5UG9pbnRzJyxcbiAga2V5c3BsaW5lczogJ2tleVNwbGluZXMnLFxuICBrZXl0aW1lczogJ2tleVRpbWVzJyxcbiAgbGVuZ3RoYWRqdXN0OiAnbGVuZ3RoQWRqdXN0JyxcbiAgbGV0dGVyc3BhY2luZzogJ2xldHRlclNwYWNpbmcnLFxuICAnbGV0dGVyLXNwYWNpbmcnOiAnbGV0dGVyU3BhY2luZycsXG4gIGxpZ2h0aW5nY29sb3I6ICdsaWdodGluZ0NvbG9yJyxcbiAgJ2xpZ2h0aW5nLWNvbG9yJzogJ2xpZ2h0aW5nQ29sb3InLFxuICBsaW1pdGluZ2NvbmVhbmdsZTogJ2xpbWl0aW5nQ29uZUFuZ2xlJyxcbiAgbG9jYWw6ICdsb2NhbCcsXG4gIG1hcmtlcmVuZDogJ21hcmtlckVuZCcsXG4gICdtYXJrZXItZW5kJzogJ21hcmtlckVuZCcsXG4gIG1hcmtlcmhlaWdodDogJ21hcmtlckhlaWdodCcsXG4gIG1hcmtlcm1pZDogJ21hcmtlck1pZCcsXG4gICdtYXJrZXItbWlkJzogJ21hcmtlck1pZCcsXG4gIG1hcmtlcnN0YXJ0OiAnbWFya2VyU3RhcnQnLFxuICAnbWFya2VyLXN0YXJ0JzogJ21hcmtlclN0YXJ0JyxcbiAgbWFya2VydW5pdHM6ICdtYXJrZXJVbml0cycsXG4gIG1hcmtlcndpZHRoOiAnbWFya2VyV2lkdGgnLFxuICBtYXNrOiAnbWFzaycsXG4gIG1hc2tjb250ZW50dW5pdHM6ICdtYXNrQ29udGVudFVuaXRzJyxcbiAgbWFza3VuaXRzOiAnbWFza1VuaXRzJyxcbiAgbWF0aGVtYXRpY2FsOiAnbWF0aGVtYXRpY2FsJyxcbiAgbW9kZTogJ21vZGUnLFxuICBudW1vY3RhdmVzOiAnbnVtT2N0YXZlcycsXG4gIG9mZnNldDogJ29mZnNldCcsXG4gIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgb3BlcmF0b3I6ICdvcGVyYXRvcicsXG4gIG9yZGVyOiAnb3JkZXInLFxuICBvcmllbnQ6ICdvcmllbnQnLFxuICBvcmllbnRhdGlvbjogJ29yaWVudGF0aW9uJyxcbiAgb3JpZ2luOiAnb3JpZ2luJyxcbiAgb3ZlcmZsb3c6ICdvdmVyZmxvdycsXG4gIG92ZXJsaW5lcG9zaXRpb246ICdvdmVybGluZVBvc2l0aW9uJyxcbiAgJ292ZXJsaW5lLXBvc2l0aW9uJzogJ292ZXJsaW5lUG9zaXRpb24nLFxuICBvdmVybGluZXRoaWNrbmVzczogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ292ZXJsaW5lLXRoaWNrbmVzcyc6ICdvdmVybGluZVRoaWNrbmVzcycsXG4gIHBhaW50b3JkZXI6ICdwYWludE9yZGVyJyxcbiAgJ3BhaW50LW9yZGVyJzogJ3BhaW50T3JkZXInLFxuICBwYW5vc2UxOiAncGFub3NlMScsXG4gICdwYW5vc2UtMSc6ICdwYW5vc2UxJyxcbiAgcGF0aGxlbmd0aDogJ3BhdGhMZW5ndGgnLFxuICBwYXR0ZXJuY29udGVudHVuaXRzOiAncGF0dGVybkNvbnRlbnRVbml0cycsXG4gIHBhdHRlcm50cmFuc2Zvcm06ICdwYXR0ZXJuVHJhbnNmb3JtJyxcbiAgcGF0dGVybnVuaXRzOiAncGF0dGVyblVuaXRzJyxcbiAgcG9pbnRlcmV2ZW50czogJ3BvaW50ZXJFdmVudHMnLFxuICAncG9pbnRlci1ldmVudHMnOiAncG9pbnRlckV2ZW50cycsXG4gIHBvaW50czogJ3BvaW50cycsXG4gIHBvaW50c2F0eDogJ3BvaW50c0F0WCcsXG4gIHBvaW50c2F0eTogJ3BvaW50c0F0WScsXG4gIHBvaW50c2F0ejogJ3BvaW50c0F0WicsXG4gIHByZWZpeDogJ3ByZWZpeCcsXG4gIHByZXNlcnZlYWxwaGE6ICdwcmVzZXJ2ZUFscGhhJyxcbiAgcHJlc2VydmVhc3BlY3RyYXRpbzogJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLFxuICBwcmltaXRpdmV1bml0czogJ3ByaW1pdGl2ZVVuaXRzJyxcbiAgcHJvcGVydHk6ICdwcm9wZXJ0eScsXG4gIHI6ICdyJyxcbiAgcmFkaXVzOiAncmFkaXVzJyxcbiAgcmVmeDogJ3JlZlgnLFxuICByZWZ5OiAncmVmWScsXG4gIHJlbmRlcmluZ2ludGVudDogJ3JlbmRlcmluZ0ludGVudCcsXG4gICdyZW5kZXJpbmctaW50ZW50JzogJ3JlbmRlcmluZ0ludGVudCcsXG4gIHJlcGVhdGNvdW50OiAncmVwZWF0Q291bnQnLFxuICByZXBlYXRkdXI6ICdyZXBlYXREdXInLFxuICByZXF1aXJlZGV4dGVuc2lvbnM6ICdyZXF1aXJlZEV4dGVuc2lvbnMnLFxuICByZXF1aXJlZGZlYXR1cmVzOiAncmVxdWlyZWRGZWF0dXJlcycsXG4gIHJlc291cmNlOiAncmVzb3VyY2UnLFxuICByZXN0YXJ0OiAncmVzdGFydCcsXG4gIHJlc3VsdDogJ3Jlc3VsdCcsXG4gIHJlc3VsdHM6ICdyZXN1bHRzJyxcbiAgcm90YXRlOiAncm90YXRlJyxcbiAgcng6ICdyeCcsXG4gIHJ5OiAncnknLFxuICBzY2FsZTogJ3NjYWxlJyxcbiAgc2VjdXJpdHk6ICdzZWN1cml0eScsXG4gIHNlZWQ6ICdzZWVkJyxcbiAgc2hhcGVyZW5kZXJpbmc6ICdzaGFwZVJlbmRlcmluZycsXG4gICdzaGFwZS1yZW5kZXJpbmcnOiAnc2hhcGVSZW5kZXJpbmcnLFxuICBzbG9wZTogJ3Nsb3BlJyxcbiAgc3BhY2luZzogJ3NwYWNpbmcnLFxuICBzcGVjdWxhcmNvbnN0YW50OiAnc3BlY3VsYXJDb25zdGFudCcsXG4gIHNwZWN1bGFyZXhwb25lbnQ6ICdzcGVjdWxhckV4cG9uZW50JyxcbiAgc3BlZWQ6ICdzcGVlZCcsXG4gIHNwcmVhZG1ldGhvZDogJ3NwcmVhZE1ldGhvZCcsXG4gIHN0YXJ0b2Zmc2V0OiAnc3RhcnRPZmZzZXQnLFxuICBzdGRkZXZpYXRpb246ICdzdGREZXZpYXRpb24nLFxuICBzdGVtaDogJ3N0ZW1oJyxcbiAgc3RlbXY6ICdzdGVtdicsXG4gIHN0aXRjaHRpbGVzOiAnc3RpdGNoVGlsZXMnLFxuICBzdG9wY29sb3I6ICdzdG9wQ29sb3InLFxuICAnc3RvcC1jb2xvcic6ICdzdG9wQ29sb3InLFxuICBzdG9wb3BhY2l0eTogJ3N0b3BPcGFjaXR5JyxcbiAgJ3N0b3Atb3BhY2l0eSc6ICdzdG9wT3BhY2l0eScsXG4gIHN0cmlrZXRocm91Z2hwb3NpdGlvbjogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJzogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gIHN0cmlrZXRocm91Z2h0aGlja25lc3M6ICdzdHJpa2V0aHJvdWdoVGhpY2tuZXNzJyxcbiAgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJzogJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLFxuICBzdHJpbmc6ICdzdHJpbmcnLFxuICBzdHJva2U6ICdzdHJva2UnLFxuICBzdHJva2VkYXNoYXJyYXk6ICdzdHJva2VEYXNoYXJyYXknLFxuICAnc3Ryb2tlLWRhc2hhcnJheSc6ICdzdHJva2VEYXNoYXJyYXknLFxuICBzdHJva2VkYXNob2Zmc2V0OiAnc3Ryb2tlRGFzaG9mZnNldCcsXG4gICdzdHJva2UtZGFzaG9mZnNldCc6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgc3Ryb2tlbGluZWNhcDogJ3N0cm9rZUxpbmVjYXAnLFxuICAnc3Ryb2tlLWxpbmVjYXAnOiAnc3Ryb2tlTGluZWNhcCcsXG4gIHN0cm9rZWxpbmVqb2luOiAnc3Ryb2tlTGluZWpvaW4nLFxuICAnc3Ryb2tlLWxpbmVqb2luJzogJ3N0cm9rZUxpbmVqb2luJyxcbiAgc3Ryb2tlbWl0ZXJsaW1pdDogJ3N0cm9rZU1pdGVybGltaXQnLFxuICAnc3Ryb2tlLW1pdGVybGltaXQnOiAnc3Ryb2tlTWl0ZXJsaW1pdCcsXG4gIHN0cm9rZXdpZHRoOiAnc3Ryb2tlV2lkdGgnLFxuICAnc3Ryb2tlLXdpZHRoJzogJ3N0cm9rZVdpZHRoJyxcbiAgc3Ryb2tlb3BhY2l0eTogJ3N0cm9rZU9wYWNpdHknLFxuICAnc3Ryb2tlLW9wYWNpdHknOiAnc3Ryb2tlT3BhY2l0eScsXG4gIHN1cHByZXNzY29udGVudGVkaXRhYmxld2FybmluZzogJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZycsXG4gIHN1cHByZXNzaHlkcmF0aW9ud2FybmluZzogJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsXG4gIHN1cmZhY2VzY2FsZTogJ3N1cmZhY2VTY2FsZScsXG4gIHN5c3RlbWxhbmd1YWdlOiAnc3lzdGVtTGFuZ3VhZ2UnLFxuICB0YWJsZXZhbHVlczogJ3RhYmxlVmFsdWVzJyxcbiAgdGFyZ2V0eDogJ3RhcmdldFgnLFxuICB0YXJnZXR5OiAndGFyZ2V0WScsXG4gIHRleHRhbmNob3I6ICd0ZXh0QW5jaG9yJyxcbiAgJ3RleHQtYW5jaG9yJzogJ3RleHRBbmNob3InLFxuICB0ZXh0ZGVjb3JhdGlvbjogJ3RleHREZWNvcmF0aW9uJyxcbiAgJ3RleHQtZGVjb3JhdGlvbic6ICd0ZXh0RGVjb3JhdGlvbicsXG4gIHRleHRsZW5ndGg6ICd0ZXh0TGVuZ3RoJyxcbiAgdGV4dHJlbmRlcmluZzogJ3RleHRSZW5kZXJpbmcnLFxuICAndGV4dC1yZW5kZXJpbmcnOiAndGV4dFJlbmRlcmluZycsXG4gIHRvOiAndG8nLFxuICB0cmFuc2Zvcm06ICd0cmFuc2Zvcm0nLFxuICB0eXBlb2Y6ICd0eXBlb2YnLFxuICB1MTogJ3UxJyxcbiAgdTI6ICd1MicsXG4gIHVuZGVybGluZXBvc2l0aW9uOiAndW5kZXJsaW5lUG9zaXRpb24nLFxuICAndW5kZXJsaW5lLXBvc2l0aW9uJzogJ3VuZGVybGluZVBvc2l0aW9uJyxcbiAgdW5kZXJsaW5ldGhpY2tuZXNzOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ3VuZGVybGluZS10aGlja25lc3MnOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgdW5pY29kZTogJ3VuaWNvZGUnLFxuICB1bmljb2RlYmlkaTogJ3VuaWNvZGVCaWRpJyxcbiAgJ3VuaWNvZGUtYmlkaSc6ICd1bmljb2RlQmlkaScsXG4gIHVuaWNvZGVyYW5nZTogJ3VuaWNvZGVSYW5nZScsXG4gICd1bmljb2RlLXJhbmdlJzogJ3VuaWNvZGVSYW5nZScsXG4gIHVuaXRzcGVyZW06ICd1bml0c1BlckVtJyxcbiAgJ3VuaXRzLXBlci1lbSc6ICd1bml0c1BlckVtJyxcbiAgdW5zZWxlY3RhYmxlOiAndW5zZWxlY3RhYmxlJyxcbiAgdmFscGhhYmV0aWM6ICd2QWxwaGFiZXRpYycsXG4gICd2LWFscGhhYmV0aWMnOiAndkFscGhhYmV0aWMnLFxuICB2YWx1ZXM6ICd2YWx1ZXMnLFxuICB2ZWN0b3JlZmZlY3Q6ICd2ZWN0b3JFZmZlY3QnLFxuICAndmVjdG9yLWVmZmVjdCc6ICd2ZWN0b3JFZmZlY3QnLFxuICB2ZXJzaW9uOiAndmVyc2lvbicsXG4gIHZlcnRhZHZ5OiAndmVydEFkdlknLFxuICAndmVydC1hZHYteSc6ICd2ZXJ0QWR2WScsXG4gIHZlcnRvcmlnaW54OiAndmVydE9yaWdpblgnLFxuICAndmVydC1vcmlnaW4teCc6ICd2ZXJ0T3JpZ2luWCcsXG4gIHZlcnRvcmlnaW55OiAndmVydE9yaWdpblknLFxuICAndmVydC1vcmlnaW4teSc6ICd2ZXJ0T3JpZ2luWScsXG4gIHZoYW5naW5nOiAndkhhbmdpbmcnLFxuICAndi1oYW5naW5nJzogJ3ZIYW5naW5nJyxcbiAgdmlkZW9ncmFwaGljOiAndklkZW9ncmFwaGljJyxcbiAgJ3YtaWRlb2dyYXBoaWMnOiAndklkZW9ncmFwaGljJyxcbiAgdmlld2JveDogJ3ZpZXdCb3gnLFxuICB2aWV3dGFyZ2V0OiAndmlld1RhcmdldCcsXG4gIHZpc2liaWxpdHk6ICd2aXNpYmlsaXR5JyxcbiAgdm1hdGhlbWF0aWNhbDogJ3ZNYXRoZW1hdGljYWwnLFxuICAndi1tYXRoZW1hdGljYWwnOiAndk1hdGhlbWF0aWNhbCcsXG4gIHZvY2FiOiAndm9jYWInLFxuICB3aWR0aHM6ICd3aWR0aHMnLFxuICB3b3Jkc3BhY2luZzogJ3dvcmRTcGFjaW5nJyxcbiAgJ3dvcmQtc3BhY2luZyc6ICd3b3JkU3BhY2luZycsXG4gIHdyaXRpbmdtb2RlOiAnd3JpdGluZ01vZGUnLFxuICAnd3JpdGluZy1tb2RlJzogJ3dyaXRpbmdNb2RlJyxcbiAgeDE6ICd4MScsXG4gIHgyOiAneDInLFxuICB4OiAneCcsXG4gIHhjaGFubmVsc2VsZWN0b3I6ICd4Q2hhbm5lbFNlbGVjdG9yJyxcbiAgeGhlaWdodDogJ3hIZWlnaHQnLFxuICAneC1oZWlnaHQnOiAneEhlaWdodCcsXG4gIHhsaW5rYWN0dWF0ZTogJ3hsaW5rQWN0dWF0ZScsXG4gICd4bGluazphY3R1YXRlJzogJ3hsaW5rQWN0dWF0ZScsXG4gIHhsaW5rYXJjcm9sZTogJ3hsaW5rQXJjcm9sZScsXG4gICd4bGluazphcmNyb2xlJzogJ3hsaW5rQXJjcm9sZScsXG4gIHhsaW5raHJlZjogJ3hsaW5rSHJlZicsXG4gICd4bGluazpocmVmJzogJ3hsaW5rSHJlZicsXG4gIHhsaW5rcm9sZTogJ3hsaW5rUm9sZScsXG4gICd4bGluazpyb2xlJzogJ3hsaW5rUm9sZScsXG4gIHhsaW5rc2hvdzogJ3hsaW5rU2hvdycsXG4gICd4bGluazpzaG93JzogJ3hsaW5rU2hvdycsXG4gIHhsaW5rdGl0bGU6ICd4bGlua1RpdGxlJyxcbiAgJ3hsaW5rOnRpdGxlJzogJ3hsaW5rVGl0bGUnLFxuICB4bGlua3R5cGU6ICd4bGlua1R5cGUnLFxuICAneGxpbms6dHlwZSc6ICd4bGlua1R5cGUnLFxuICB4bWxiYXNlOiAneG1sQmFzZScsXG4gICd4bWw6YmFzZSc6ICd4bWxCYXNlJyxcbiAgeG1sbGFuZzogJ3htbExhbmcnLFxuICAneG1sOmxhbmcnOiAneG1sTGFuZycsXG4gIHhtbG5zOiAneG1sbnMnLFxuICAneG1sOnNwYWNlJzogJ3htbFNwYWNlJyxcbiAgeG1sbnN4bGluazogJ3htbG5zWGxpbmsnLFxuICAneG1sbnM6eGxpbmsnOiAneG1sbnNYbGluaycsXG4gIHhtbHNwYWNlOiAneG1sU3BhY2UnLFxuICB5MTogJ3kxJyxcbiAgeTI6ICd5MicsXG4gIHk6ICd5JyxcbiAgeWNoYW5uZWxzZWxlY3RvcjogJ3lDaGFubmVsU2VsZWN0b3InLFxuICB6OiAneicsXG4gIHpvb21hbmRwYW46ICd6b29tQW5kUGFuJ1xufTtcblxudmFyIGFyaWFQcm9wZXJ0aWVzID0ge1xuICAnYXJpYS1jdXJyZW50JzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtZGV0YWlscyc6IDAsXG4gICdhcmlhLWRpc2FibGVkJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtaGlkZGVuJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtaW52YWxpZCc6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWtleXNob3J0Y3V0cyc6IDAsXG4gICdhcmlhLWxhYmVsJzogMCxcbiAgJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJzogMCxcbiAgLy8gV2lkZ2V0IEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogMCxcbiAgJ2FyaWEtY2hlY2tlZCc6IDAsXG4gICdhcmlhLWV4cGFuZGVkJzogMCxcbiAgJ2FyaWEtaGFzcG9wdXAnOiAwLFxuICAnYXJpYS1sZXZlbCc6IDAsXG4gICdhcmlhLW1vZGFsJzogMCxcbiAgJ2FyaWEtbXVsdGlsaW5lJzogMCxcbiAgJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJzogMCxcbiAgJ2FyaWEtb3JpZW50YXRpb24nOiAwLFxuICAnYXJpYS1wbGFjZWhvbGRlcic6IDAsXG4gICdhcmlhLXByZXNzZWQnOiAwLFxuICAnYXJpYS1yZWFkb25seSc6IDAsXG4gICdhcmlhLXJlcXVpcmVkJzogMCxcbiAgJ2FyaWEtc2VsZWN0ZWQnOiAwLFxuICAnYXJpYS1zb3J0JzogMCxcbiAgJ2FyaWEtdmFsdWVtYXgnOiAwLFxuICAnYXJpYS12YWx1ZW1pbic6IDAsXG4gICdhcmlhLXZhbHVlbm93JzogMCxcbiAgJ2FyaWEtdmFsdWV0ZXh0JzogMCxcbiAgLy8gTGl2ZSBSZWdpb24gQXR0cmlidXRlc1xuICAnYXJpYS1hdG9taWMnOiAwLFxuICAnYXJpYS1idXN5JzogMCxcbiAgJ2FyaWEtbGl2ZSc6IDAsXG4gICdhcmlhLXJlbGV2YW50JzogMCxcbiAgLy8gRHJhZy1hbmQtRHJvcCBBdHRyaWJ1dGVzXG4gICdhcmlhLWRyb3BlZmZlY3QnOiAwLFxuICAnYXJpYS1ncmFiYmVkJzogMCxcbiAgLy8gUmVsYXRpb25zaGlwIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCc6IDAsXG4gICdhcmlhLWNvbGNvdW50JzogMCxcbiAgJ2FyaWEtY29saW5kZXgnOiAwLFxuICAnYXJpYS1jb2xzcGFuJzogMCxcbiAgJ2FyaWEtY29udHJvbHMnOiAwLFxuICAnYXJpYS1kZXNjcmliZWRieSc6IDAsXG4gICdhcmlhLWVycm9ybWVzc2FnZSc6IDAsXG4gICdhcmlhLWZsb3d0byc6IDAsXG4gICdhcmlhLWxhYmVsbGVkYnknOiAwLFxuICAnYXJpYS1vd25zJzogMCxcbiAgJ2FyaWEtcG9zaW5zZXQnOiAwLFxuICAnYXJpYS1yb3djb3VudCc6IDAsXG4gICdhcmlhLXJvd2luZGV4JzogMCxcbiAgJ2FyaWEtcm93c3Bhbic6IDAsXG4gICdhcmlhLXNldHNpemUnOiAwXG59O1xuXG52YXIgd2FybmVkUHJvcGVydGllcyA9IHt9O1xudmFyIHJBUklBID0gbmV3IFJlZ0V4cCgnXihhcmlhKS1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgckFSSUFDYW1lbCA9IG5ldyBSZWdFeHAoJ14oYXJpYSlbQS1aXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciBoYXNPd25Qcm9wZXJ0eSQxID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eSh0YWdOYW1lLCBuYW1lKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkkMS5jYWxsKHdhcm5lZFByb3BlcnRpZXMsIG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyQVJJQUNhbWVsLnRlc3QobmFtZSkpIHtcbiAgICAgIHZhciBhcmlhTmFtZSA9ICdhcmlhLScgKyBuYW1lLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgY29ycmVjdE5hbWUgPSBhcmlhUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShhcmlhTmFtZSkgPyBhcmlhTmFtZSA6IG51bGw7IC8vIElmIHRoaXMgaXMgYW4gYXJpYS0qIGF0dHJpYnV0ZSwgYnV0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGtub3duIERPTVxuICAgICAgLy8gRE9NIHByb3BlcnRpZXMsIHRoZW4gaXQgaXMgYW4gaW52YWxpZCBhcmlhLSogYXR0cmlidXRlLlxuXG4gICAgICBpZiAoY29ycmVjdE5hbWUgPT0gbnVsbCkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBBUklBIGF0dHJpYnV0ZXMgZm9sbG93IHRoZSBwYXR0ZXJuIGFyaWEtKiBhbmQgbXVzdCBiZSBsb3dlcmNhc2UuJywgbmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSAvLyBhcmlhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvbi5cblxuXG4gICAgICBpZiAobmFtZSAhPT0gY29ycmVjdE5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgY29ycmVjdE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAockFSSUEudGVzdChuYW1lKSkge1xuICAgICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IGxvd2VyQ2FzZWROYW1lIDogbnVsbDsgLy8gSWYgdGhpcyBpcyBhbiBhcmlhLSogYXR0cmlidXRlLCBidXQgaXMgbm90IGxpc3RlZCBpbiB0aGUga25vd24gRE9NXG4gICAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG5cbiAgICAgIGlmIChzdGFuZGFyZE5hbWUgPT0gbnVsbCkge1xuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAvLyBhcmlhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvbi5cblxuXG4gICAgICBpZiAobmFtZSAhPT0gc3RhbmRhcmROYW1lKSB7XG4gICAgICAgIGVycm9yKCdVbmtub3duIEFSSUEgYXR0cmlidXRlIGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHN0YW5kYXJkTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB3YXJuSW52YWxpZEFSSUFQcm9wcyh0eXBlLCBwcm9wcykge1xuICB7XG4gICAgdmFyIGludmFsaWRQcm9wcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkodHlwZSwga2V5KTtcblxuICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIGludmFsaWRQcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVua25vd25Qcm9wU3RyaW5nID0gaW52YWxpZFByb3BzLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuICdgJyArIHByb3AgKyAnYCc7XG4gICAgfSkuam9pbignLCAnKTtcblxuICAgIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBhcmlhIHByb3AgJXMgb24gPCVzPiB0YWcuICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1hcmlhLXByb3BzJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH0gZWxzZSBpZiAoaW52YWxpZFByb3BzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGFyaWEgcHJvcHMgJXMgb24gPCVzPiB0YWcuICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1hcmlhLXByb3BzJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXModHlwZSwgcHJvcHMpIHtcbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdhcm5JbnZhbGlkQVJJQVByb3BzKHR5cGUsIHByb3BzKTtcbn1cblxudmFyIGRpZFdhcm5WYWx1ZU51bGwgPSBmYWxzZTtcbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQxKHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAodHlwZSAhPT0gJ2lucHV0JyAmJiB0eXBlICE9PSAndGV4dGFyZWEnICYmIHR5cGUgIT09ICdzZWxlY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BzICE9IG51bGwgJiYgcHJvcHMudmFsdWUgPT09IG51bGwgJiYgIWRpZFdhcm5WYWx1ZU51bGwpIHtcbiAgICAgIGRpZFdhcm5WYWx1ZU51bGwgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdCcgJiYgcHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgZXJyb3IoJ2B2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gJyArICdDb25zaWRlciB1c2luZyBhbiBlbXB0eSBhcnJheSB3aGVuIGBtdWx0aXBsZWAgaXMgc2V0IHRvIGB0cnVlYCAnICsgJ3RvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLicsIHR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJ2B2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gJyArICdDb25zaWRlciB1c2luZyBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCAnICsgJ2ZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbGlkYXRlUHJvcGVydHkkMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIHZhciB3YXJuZWRQcm9wZXJ0aWVzJDEgPSB7fTtcbiAgdmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gIHZhciBFVkVOVF9OQU1FX1JFR0VYID0gL15vbi4vO1xuICB2YXIgSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYID0gL15vblteQS1aXS87XG4gIHZhciByQVJJQSQxID0gbmV3IFJlZ0V4cCgnXihhcmlhKS1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG4gIHZhciByQVJJQUNhbWVsJDEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpW0EtWl1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG5cbiAgdmFsaWRhdGVQcm9wZXJ0eSQxID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWUsIHZhbHVlLCBldmVudFJlZ2lzdHJ5KSB7XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHdhcm5lZFByb3BlcnRpZXMkMSwgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllcyQxW25hbWVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdvbmZvY3VzaW4nIHx8IGxvd2VyQ2FzZWROYW1lID09PSAnb25mb2N1c291dCcpIHtcbiAgICAgIGVycm9yKCdSZWFjdCB1c2VzIG9uRm9jdXMgYW5kIG9uQmx1ciBpbnN0ZWFkIG9mIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dC4gJyArICdBbGwgUmVhY3QgZXZlbnRzIGFyZSBub3JtYWxpemVkIHRvIGJ1YmJsZSwgc28gb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0ICcgKyAnYXJlIG5vdCBuZWVkZWQvc3VwcG9ydGVkIGJ5IFJlYWN0LicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBXZSBjYW4ndCByZWx5IG9uIHRoZSBldmVudCBzeXN0ZW0gYmVpbmcgaW5qZWN0ZWQgb24gdGhlIHNlcnZlci5cblxuXG4gICAgaWYgKGV2ZW50UmVnaXN0cnkgIT0gbnVsbCkge1xuICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSBldmVudFJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMsXG4gICAgICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyA9IGV2ZW50UmVnaXN0cnkucG9zc2libGVSZWdpc3RyYXRpb25OYW1lcztcblxuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lID0gcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgPyBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXSA6IG51bGw7XG5cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKEVWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICBlcnJvcignVW5rbm93biBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIEl0IHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEVWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgLy8gSWYgbm8gZXZlbnQgcGx1Z2lucyBoYXZlIGJlZW4gaW5qZWN0ZWQsIHdlIGFyZSBpbiBhIHNlcnZlciBlbnZpcm9ubWVudC5cbiAgICAgIC8vIFNvIHdlIGNhbid0IHRlbGwgaWYgdGhlIGV2ZW50IG5hbWUgaXMgY29ycmVjdCBmb3Igc3VyZSwgYnV0IHdlIGNhbiBmaWx0ZXJcbiAgICAgIC8vIG91dCBrbm93biBiYWQgb25lcyBsaWtlIGBvbmNsaWNrYC4gV2UgY2FuJ3Qgc3VnZ2VzdCBhIHNwZWNpZmljIHJlcGxhY2VtZW50IHRob3VnaC5cbiAgICAgIGlmIChJTlZBTElEX0VWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuICcgKyAnUmVhY3QgZXZlbnRzIHVzZSB0aGUgY2FtZWxDYXNlIG5hbWluZyBjb252ZW50aW9uLCBmb3IgZXhhbXBsZSBgb25DbGlja2AuJywgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIExldCB0aGUgQVJJQSBhdHRyaWJ1dGUgaG9vayB2YWxpZGF0ZSBBUklBIGF0dHJpYnV0ZXNcblxuXG4gICAgaWYgKHJBUklBJDEudGVzdChuYW1lKSB8fCByQVJJQUNhbWVsJDEudGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnaW5uZXJodG1sJykge1xuICAgICAgZXJyb3IoJ0RpcmVjdGx5IHNldHRpbmcgcHJvcGVydHkgYGlubmVySFRNTGAgaXMgbm90IHBlcm1pdHRlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgbG9va3VwIGRvY3VtZW50YXRpb24gb24gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2FyaWEnKSB7XG4gICAgICBlcnJvcignVGhlIGBhcmlhYCBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgaW4gUmVhY3QuICcgKyAnUGFzcyBpbmRpdmlkdWFsIGBhcmlhLWAgYXR0cmlidXRlcyBpbnN0ZWFkLicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnaXMnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGEgYCVzYCBmb3IgYSBzdHJpbmcgYXR0cmlidXRlIGBpc2AuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgJyArICd0aGUgdmFsdWUgdG8gYSBzdHJpbmcuJywgdHlwZW9mIHZhbHVlKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIE5hTiBmb3IgdGhlIGAlc2AgYXR0cmlidXRlLiBJZiB0aGlzIGlzIGV4cGVjdGVkLCBjYXN0ICcgKyAndGhlIHZhbHVlIHRvIGEgc3RyaW5nLicsIG5hbWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhuYW1lKTtcbiAgICB2YXIgaXNSZXNlcnZlZCA9IHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQ7IC8vIEtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIG1hdGNoIHRoZSBjYXNpbmcgc3BlY2lmaWVkIGluIHRoZSBwcm9wZXJ0eSBjb25maWcuXG5cbiAgICBpZiAocG9zc2libGVTdGFuZGFyZE5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IHBvc3NpYmxlU3RhbmRhcmROYW1lc1tsb3dlckNhc2VkTmFtZV07XG5cbiAgICAgIGlmIChzdGFuZGFyZE5hbWUgIT09IG5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgRE9NIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHN0YW5kYXJkTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNSZXNlcnZlZCAmJiBuYW1lICE9PSBsb3dlckNhc2VkTmFtZSkge1xuICAgICAgLy8gVW5rbm93biBhdHRyaWJ1dGVzIHNob3VsZCBoYXZlIGxvd2VyY2FzZSBjYXNpbmcgc2luY2UgdGhhdCdzIGhvdyB0aGV5XG4gICAgICAvLyB3aWxsIGJlIGNhc2VkIGFueXdheSB3aXRoIHNlcnZlciByZW5kZXJpbmcuXG4gICAgICBlcnJvcignUmVhY3QgZG9lcyBub3QgcmVjb2duaXplIHRoZSBgJXNgIHByb3Agb24gYSBET00gZWxlbWVudC4gSWYgeW91ICcgKyAnaW50ZW50aW9uYWxseSB3YW50IGl0IHRvIGFwcGVhciBpbiB0aGUgRE9NIGFzIGEgY3VzdG9tICcgKyAnYXR0cmlidXRlLCBzcGVsbCBpdCBhcyBsb3dlcmNhc2UgYCVzYCBpbnN0ZWFkLiAnICsgJ0lmIHlvdSBhY2NpZGVudGFsbHkgcGFzc2VkIGl0IGZyb20gYSBwYXJlbnQgY29tcG9uZW50LCByZW1vdmUgJyArICdpdCBmcm9tIHRoZSBET00gZWxlbWVudC4nLCBuYW1lLCBsb3dlckNhc2VkTmFtZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgJiYgc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZXJyb3IoJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuJyArICdJZiB5b3Ugd2FudCB0byB3cml0ZSBpdCB0byB0aGUgRE9NLCBwYXNzIGEgc3RyaW5nIGluc3RlYWQ6ICcgKyAnJXM9XCIlc1wiIG9yICVzPXt2YWx1ZS50b1N0cmluZygpfS4nLCB2YWx1ZSwgbmFtZSwgbmFtZSwgdmFsdWUsIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuJyArICdJZiB5b3Ugd2FudCB0byB3cml0ZSBpdCB0byB0aGUgRE9NLCBwYXNzIGEgc3RyaW5nIGluc3RlYWQ6ICcgKyAnJXM9XCIlc1wiIG9yICVzPXt2YWx1ZS50b1N0cmluZygpfS5cXG5cXG4nICsgJ0lmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCAnICsgJ3Bhc3MgJXM9e2NvbmRpdGlvbiA/IHZhbHVlIDogdW5kZWZpbmVkfSBpbnN0ZWFkLicsIHZhbHVlLCBuYW1lLCBuYW1lLCB2YWx1ZSwgbmFtZSwgbmFtZSwgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIE5vdyB0aGF0IHdlJ3ZlIHZhbGlkYXRlZCBjYXNpbmcsIGRvIG5vdCB2YWxpZGF0ZVxuICAgIC8vIGRhdGEgdHlwZXMgZm9yIHJlc2VydmVkIHByb3BzXG5cblxuICAgIGlmIChpc1Jlc2VydmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIFdhcm4gd2hlbiBhIGtub3duIGF0dHJpYnV0ZSBpcyBhIGJhZCB0eXBlXG5cblxuICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBXYXJuIHdoZW4gcGFzc2luZyB0aGUgc3RyaW5ncyAnZmFsc2UnIG9yICd0cnVlJyBpbnRvIGEgYm9vbGVhbiBwcm9wXG5cblxuICAgIGlmICgodmFsdWUgPT09ICdmYWxzZScgfHwgdmFsdWUgPT09ICd0cnVlJykgJiYgcHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBCT09MRUFOKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgdGhlIHN0cmluZyBgJXNgIGZvciB0aGUgYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC4gJyArICclcyAnICsgJ0RpZCB5b3UgbWVhbiAlcz17JXN9PycsIHZhbHVlLCBuYW1lLCB2YWx1ZSA9PT0gJ2ZhbHNlJyA/ICdUaGUgYnJvd3NlciB3aWxsIGludGVycHJldCBpdCBhcyBhIHRydXRoeSB2YWx1ZS4nIDogJ0FsdGhvdWdoIHRoaXMgd29ya3MsIGl0IHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgaWYgeW91IHBhc3MgdGhlIHN0cmluZyBcImZhbHNlXCIuJywgbmFtZSwgdmFsdWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG5cbnZhciB3YXJuVW5rbm93blByb3BlcnRpZXMgPSBmdW5jdGlvbiAodHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpIHtcbiAge1xuICAgIHZhciB1bmtub3duUHJvcHMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFyIGlzVmFsaWQgPSB2YWxpZGF0ZVByb3BlcnR5JDEodHlwZSwga2V5LCBwcm9wc1trZXldLCBldmVudFJlZ2lzdHJ5KTtcblxuICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIHVua25vd25Qcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVua25vd25Qcm9wU3RyaW5nID0gdW5rbm93blByb3BzLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuICdgJyArIHByb3AgKyAnYCc7XG4gICAgfSkuam9pbignLCAnKTtcblxuICAgIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgcHJvcCAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSBpdCBmcm9tIHRoZSBlbGVtZW50LCAnICsgJ29yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgaXQgaW4gdGhlIERPTS4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9hdHRyaWJ1dGUtYmVoYXZpb3IgJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH0gZWxzZSBpZiAodW5rbm93blByb3BzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIHZhbHVlcyBmb3IgcHJvcHMgJXMgb24gPCVzPiB0YWcuIEVpdGhlciByZW1vdmUgdGhlbSBmcm9tIHRoZSBlbGVtZW50LCAnICsgJ29yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgdGhlbSBpbiB0aGUgRE9NLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciAnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSkge1xuICBpZiAoaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2FyblVua25vd25Qcm9wZXJ0aWVzKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KTtcbn1cblxudmFyIElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFID0gMTtcbnZhciBJU19OT05fREVMRUdBVEVEID0gMSA8PCAxO1xudmFyIElTX0NBUFRVUkVfUEhBU0UgPSAxIDw8IDI7XG52YXIgSVNfUkVQTEFZRUQgPSAxIDw8IDQ7XG4vLyBzZXQgdG8gTEVHQUNZX0ZCX1NVUFBPUlQuIExFR0FDWV9GQl9TVVBQT1JUIG9ubHkgZ2V0cyBzZXQgd2hlblxuLy8gd2UgY2FsbCB3aWxsRGVmZXJMYXRlckZvckxlZ2FjeUZCU3VwcG9ydCwgdGh1cyBub3QgYmFpbGluZyBvdXRcbi8vIHdpbGwgcmVzdWx0IGluIGVuZGxlc3MgY3ljbGVzIGxpa2UgYW4gaW5maW5pdGUgbG9vcC5cbi8vIFdlIGFsc28gZG9uJ3Qgd2FudCB0byBkZWZlciBkdXJpbmcgZXZlbnQgcmVwbGF5aW5nLlxuXG52YXIgU0hPVUxEX05PVF9QUk9DRVNTX1BPTFlGSUxMX0VWRU5UX1BMVUdJTlMgPSBJU19FVkVOVF9IQU5ETEVfTk9OX01BTkFHRURfTk9ERSB8IElTX05PTl9ERUxFR0FURUQgfCBJU19DQVBUVVJFX1BIQVNFO1xuXG4vKipcbiAqIEdldHMgdGhlIHRhcmdldCBub2RlIGZyb20gYSBuYXRpdmUgYnJvd3NlciBldmVudCBieSBhY2NvdW50aW5nIGZvclxuICogaW5jb25zaXN0ZW5jaWVzIGluIGJyb3dzZXIgRE9NIEFQSXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7RE9NRXZlbnRUYXJnZXR9IFRhcmdldCBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSB7XG4gIC8vIEZhbGxiYWNrIHRvIG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgZm9yIElFOVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTA2XG4gIHZhciB0YXJnZXQgPSBuYXRpdmVFdmVudC50YXJnZXQgfHwgbmF0aXZlRXZlbnQuc3JjRWxlbWVudCB8fCB3aW5kb3c7IC8vIE5vcm1hbGl6ZSBTVkcgPHVzZT4gZWxlbWVudCBldmVudHMgIzQ5NjNcblxuICBpZiAodGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSB7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50O1xuICB9IC8vIFNhZmFyaSBtYXkgZmlyZSBldmVudHMgb24gdGV4dCBub2RlcyAoTm9kZS5URVhUX05PREUgaXMgMykuXG4gIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9qcy9ldmVudHNfcHJvcGVydGllcy5odG1sXG5cblxuICByZXR1cm4gdGFyZ2V0Lm5vZGVUeXBlID09PSBURVhUX05PREUgPyB0YXJnZXQucGFyZW50Tm9kZSA6IHRhcmdldDtcbn1cblxudmFyIHJlc3RvcmVJbXBsID0gbnVsbDtcbnZhciByZXN0b3JlVGFyZ2V0ID0gbnVsbDtcbnZhciByZXN0b3JlUXVldWUgPSBudWxsO1xuXG5mdW5jdGlvbiByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpIHtcbiAgLy8gV2UgcGVyZm9ybSB0aGlzIHRyYW5zbGF0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3Agc28gdGhhdCB3ZVxuICAvLyBhbHdheXMgcmVjZWl2ZSB0aGUgY29ycmVjdCBmaWJlciBoZXJlXG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXQpO1xuXG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIC8vIFVubW91bnRlZFxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghKHR5cGVvZiByZXN0b3JlSW1wbCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJzZXRSZXN0b3JlSW1wbGVtZW50YXRpb24oKSBuZWVkcyB0byBiZSBjYWxsZWQgdG8gaGFuZGxlIGEgdGFyZ2V0IGZvciBjb250cm9sbGVkIGV2ZW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGF0ZU5vZGUgPSBpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZTsgLy8gR3VhcmQgYWdhaW5zdCBGaWJlciBiZWluZyB1bm1vdW50ZWQuXG5cbiAgaWYgKHN0YXRlTm9kZSkge1xuICAgIHZhciBfcHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKHN0YXRlTm9kZSk7XG5cbiAgICByZXN0b3JlSW1wbChpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZSwgaW50ZXJuYWxJbnN0YW5jZS50eXBlLCBfcHJvcHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbihpbXBsKSB7XG4gIHJlc3RvcmVJbXBsID0gaW1wbDtcbn1cbmZ1bmN0aW9uIGVucXVldWVTdGF0ZVJlc3RvcmUodGFyZ2V0KSB7XG4gIGlmIChyZXN0b3JlVGFyZ2V0KSB7XG4gICAgaWYgKHJlc3RvcmVRdWV1ZSkge1xuICAgICAgcmVzdG9yZVF1ZXVlLnB1c2godGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdG9yZVF1ZXVlID0gW3RhcmdldF07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlc3RvcmVUYXJnZXQgPSB0YXJnZXQ7XG4gIH1cbn1cbmZ1bmN0aW9uIG5lZWRzU3RhdGVSZXN0b3JlKCkge1xuICByZXR1cm4gcmVzdG9yZVRhcmdldCAhPT0gbnVsbCB8fCByZXN0b3JlUXVldWUgIT09IG51bGw7XG59XG5mdW5jdGlvbiByZXN0b3JlU3RhdGVJZk5lZWRlZCgpIHtcbiAgaWYgKCFyZXN0b3JlVGFyZ2V0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHRhcmdldCA9IHJlc3RvcmVUYXJnZXQ7XG4gIHZhciBxdWV1ZWRUYXJnZXRzID0gcmVzdG9yZVF1ZXVlO1xuICByZXN0b3JlVGFyZ2V0ID0gbnVsbDtcbiAgcmVzdG9yZVF1ZXVlID0gbnVsbDtcbiAgcmVzdG9yZVN0YXRlT2ZUYXJnZXQodGFyZ2V0KTtcblxuICBpZiAocXVldWVkVGFyZ2V0cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWVkVGFyZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdG9yZVN0YXRlT2ZUYXJnZXQocXVldWVkVGFyZ2V0c1tpXSk7XG4gICAgfVxuICB9XG59XG5cbi8vIHRoZSByZW5kZXJlci4gU3VjaCBhcyB3aGVuIHdlJ3JlIGRpc3BhdGNoaW5nIGV2ZW50cyBvciBpZiB0aGlyZCBwYXJ0eVxuLy8gbGlicmFyaWVzIG5lZWQgdG8gY2FsbCBiYXRjaGVkVXBkYXRlcy4gRXZlbnR1YWxseSwgdGhpcyBBUEkgd2lsbCBnbyBhd2F5IHdoZW5cbi8vIGV2ZXJ5dGhpbmcgaXMgYmF0Y2hlZCBieSBkZWZhdWx0LiBXZSdsbCB0aGVuIGhhdmUgYSBzaW1pbGFyIEFQSSB0byBvcHQtb3V0IG9mXG4vLyBzY2hlZHVsZWQgd29yayBhbmQgaW5zdGVhZCBkbyBzeW5jaHJvbm91cyB3b3JrLlxuLy8gRGVmYXVsdHNcblxudmFyIGJhdGNoZWRVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uIChmbiwgYm9va2tlZXBpbmcpIHtcbiAgcmV0dXJuIGZuKGJvb2trZWVwaW5nKTtcbn07XG5cbnZhciBkaXNjcmV0ZVVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHJldHVybiBmbihhLCBiLCBjLCBkKTtcbn07XG5cbnZhciBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIGJhdGNoZWRFdmVudFVwZGF0ZXNJbXBsID0gYmF0Y2hlZFVwZGF0ZXNJbXBsO1xudmFyIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gZmFsc2U7XG52YXIgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmaW5pc2hFdmVudEhhbmRsZXIoKSB7XG4gIC8vIEhlcmUgd2Ugd2FpdCB1bnRpbCBhbGwgdXBkYXRlcyBoYXZlIHByb3BhZ2F0ZWQsIHdoaWNoIGlzIGltcG9ydGFudFxuICAvLyB3aGVuIHVzaW5nIGNvbnRyb2xsZWQgY29tcG9uZW50cyB3aXRoaW4gbGF5ZXJzOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2OThcbiAgLy8gVGhlbiB3ZSByZXN0b3JlIHN0YXRlIG9mIGFueSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgdmFyIGNvbnRyb2xsZWRDb21wb25lbnRzSGF2ZVBlbmRpbmdVcGRhdGVzID0gbmVlZHNTdGF0ZVJlc3RvcmUoKTtcblxuICBpZiAoY29udHJvbGxlZENvbXBvbmVudHNIYXZlUGVuZGluZ1VwZGF0ZXMpIHtcbiAgICAvLyBJZiBhIGNvbnRyb2xsZWQgZXZlbnQgd2FzIGZpcmVkLCB3ZSBtYXkgbmVlZCB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZlxuICAgIC8vIHRoZSBET00gbm9kZSBiYWNrIHRvIHRoZSBjb250cm9sbGVkIHZhbHVlLiBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIFJlYWN0XG4gICAgLy8gYmFpbHMgb3V0IG9mIHRoZSB1cGRhdGUgd2l0aG91dCB0b3VjaGluZyB0aGUgRE9NLlxuICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCgpO1xuICAgIHJlc3RvcmVTdGF0ZUlmTmVlZGVkKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMoZm4sIGJvb2trZWVwaW5nKSB7XG4gIGlmIChpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlIGFub3RoZXIgYmF0Y2gsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdFxuICAgIC8vIGZ1bGx5IGNvbXBsZXRlcyBiZWZvcmUgcmVzdG9yaW5nIHN0YXRlLlxuICAgIHJldHVybiBmbihib29ra2VlcGluZyk7XG4gIH1cblxuICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYmF0Y2hlZFVwZGF0ZXNJbXBsKGZuLCBib29ra2VlcGluZyk7XG4gIH0gZmluYWxseSB7XG4gICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBmYWxzZTtcbiAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gYmF0Y2hlZEV2ZW50VXBkYXRlcyhmbiwgYSwgYikge1xuICBpZiAoaXNCYXRjaGluZ0V2ZW50VXBkYXRlcykge1xuICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlIGFub3RoZXIgYmF0Y2gsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdFxuICAgIC8vIGZ1bGx5IGNvbXBsZXRlcyBiZWZvcmUgcmVzdG9yaW5nIHN0YXRlLlxuICAgIHJldHVybiBmbihhLCBiKTtcbiAgfVxuXG4gIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGJhdGNoZWRFdmVudFVwZGF0ZXNJbXBsKGZuLCBhLCBiKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gZmFsc2U7XG4gICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpc2NyZXRlVXBkYXRlcyhmbiwgYSwgYiwgYywgZCkge1xuICB2YXIgcHJldklzSW5zaWRlRXZlbnRIYW5kbGVyID0gaXNJbnNpZGVFdmVudEhhbmRsZXI7XG4gIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBkaXNjcmV0ZVVwZGF0ZXNJbXBsKGZuLCBhLCBiLCBjLCBkKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IHByZXZJc0luc2lkZUV2ZW50SGFuZGxlcjtcblxuICAgIGlmICghaXNJbnNpZGVFdmVudEhhbmRsZXIpIHtcbiAgICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJZk5lZWRlZCh0aW1lU3RhbXApIHtcbiAge1xuICAgIGlmICghaXNJbnNpZGVFdmVudEhhbmRsZXIpIHtcbiAgICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihfYmF0Y2hlZFVwZGF0ZXNJbXBsLCBfZGlzY3JldGVVcGRhdGVzSW1wbCwgX2ZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCwgX2JhdGNoZWRFdmVudFVwZGF0ZXNJbXBsKSB7XG4gIGJhdGNoZWRVcGRhdGVzSW1wbCA9IF9iYXRjaGVkVXBkYXRlc0ltcGw7XG4gIGRpc2NyZXRlVXBkYXRlc0ltcGwgPSBfZGlzY3JldGVVcGRhdGVzSW1wbDtcbiAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsID0gX2ZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbDtcbiAgYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwgPSBfYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGw7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJhY3RpdmUodGFnKSB7XG4gIHJldHVybiB0YWcgPT09ICdidXR0b24nIHx8IHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICdzZWxlY3QnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJztcbn1cblxuZnVuY3Rpb24gc2hvdWxkUHJldmVudE1vdXNlRXZlbnQobmFtZSwgdHlwZSwgcHJvcHMpIHtcbiAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSAnb25DbGljayc6XG4gICAgY2FzZSAnb25DbGlja0NhcHR1cmUnOlxuICAgIGNhc2UgJ29uRG91YmxlQ2xpY2snOlxuICAgIGNhc2UgJ29uRG91YmxlQ2xpY2tDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlRG93bic6XG4gICAgY2FzZSAnb25Nb3VzZURvd25DYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlTW92ZSc6XG4gICAgY2FzZSAnb25Nb3VzZU1vdmVDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlVXAnOlxuICAgIGNhc2UgJ29uTW91c2VVcENhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VFbnRlcic6XG4gICAgICByZXR1cm4gISEocHJvcHMuZGlzYWJsZWQgJiYgaXNJbnRlcmFjdGl2ZSh0eXBlKSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiBldmVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNrYCkuXG4gKiBAcmV0dXJuIHs/ZnVuY3Rpb259IFRoZSBzdG9yZWQgY2FsbGJhY2suXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKSB7XG4gIHZhciBzdGF0ZU5vZGUgPSBpbnN0LnN0YXRlTm9kZTtcblxuICBpZiAoc3RhdGVOb2RlID09PSBudWxsKSB7XG4gICAgLy8gV29yayBpbiBwcm9ncmVzcyAoZXg6IG9ubG9hZCBldmVudHMgaW4gaW5jcmVtZW50YWwgbW9kZSkuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgcHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKHN0YXRlTm9kZSk7XG5cbiAgaWYgKHByb3BzID09PSBudWxsKSB7XG4gICAgLy8gV29yayBpbiBwcm9ncmVzcy5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IHByb3BzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50TW91c2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBpbnN0LnR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCEoIWxpc3RlbmVyIHx8IHR5cGVvZiBsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBgXCIgKyByZWdpc3RyYXRpb25OYW1lICsgXCJgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYFwiICsgdHlwZW9mIGxpc3RlbmVyICsgXCJgIHR5cGUuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXI7XG59XG5cbnZhciBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IGZhbHNlOyAvLyBDaGVjayBpZiBicm93c2VyIHN1cHBvcnQgZXZlbnRzIHdpdGggcGFzc2l2ZSBsaXN0ZW5lcnNcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudFRhcmdldC9hZGRFdmVudExpc3RlbmVyI1NhZmVseV9kZXRlY3Rpbmdfb3B0aW9uX3N1cHBvcnRcblxuaWYgKGNhblVzZURPTSkge1xuICB0cnkge1xuICAgIHZhciBvcHRpb25zID0ge307IC8vICRGbG93Rml4TWU6IElnbm9yZSBGbG93IGNvbXBsYWluaW5nIGFib3V0IG5lZWRpbmcgYSB2YWx1ZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdGlvbnMsICdwYXNzaXZlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja1Byb2QobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICB2YXIgZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuXG4gIHRyeSB7XG4gICAgZnVuYy5hcHBseShjb250ZXh0LCBmdW5jQXJncyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhpcy5vbkVycm9yKGVycm9yKTtcbiAgfVxufVxuXG52YXIgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCA9IGludm9rZUd1YXJkZWRDYWxsYmFja1Byb2Q7XG5cbntcbiAgLy8gSW4gREVWIG1vZGUsIHdlIHN3YXAgb3V0IGludm9rZUd1YXJkZWRDYWxsYmFjayBmb3IgYSBzcGVjaWFsIHZlcnNpb25cbiAgLy8gdGhhdCBwbGF5cyBtb3JlIG5pY2VseSB3aXRoIHRoZSBicm93c2VyJ3MgRGV2VG9vbHMuIFRoZSBpZGVhIGlzIHRvIHByZXNlcnZlXG4gIC8vIFwiUGF1c2Ugb24gZXhjZXB0aW9uc1wiIGJlaGF2aW9yLiBCZWNhdXNlIFJlYWN0IHdyYXBzIGFsbCB1c2VyLXByb3ZpZGVkXG4gIC8vIGZ1bmN0aW9ucyBpbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssIGFuZCB0aGUgcHJvZHVjdGlvbiB2ZXJzaW9uIG9mXG4gIC8vIGludm9rZUd1YXJkZWRDYWxsYmFjayB1c2VzIGEgdHJ5LWNhdGNoLCBhbGwgdXNlciBleGNlcHRpb25zIGFyZSB0cmVhdGVkXG4gIC8vIGxpa2UgY2F1Z2h0IGV4Y2VwdGlvbnMsIGFuZCB0aGUgRGV2VG9vbHMgd29uJ3QgcGF1c2UgdW5sZXNzIHRoZSBkZXZlbG9wZXJcbiAgLy8gdGFrZXMgdGhlIGV4dHJhIHN0ZXAgb2YgZW5hYmxpbmcgcGF1c2Ugb24gY2F1Z2h0IGV4Y2VwdGlvbnMuIFRoaXMgaXNcbiAgLy8gdW5pbnR1aXRpdmUsIHRob3VnaCwgYmVjYXVzZSBldmVuIHRob3VnaCBSZWFjdCBoYXMgY2F1Z2h0IHRoZSBlcnJvciwgZnJvbVxuICAvLyB0aGUgZGV2ZWxvcGVyJ3MgcGVyc3BlY3RpdmUsIHRoZSBlcnJvciBpcyB1bmNhdWdodC5cbiAgLy9cbiAgLy8gVG8gcHJlc2VydmUgdGhlIGV4cGVjdGVkIFwiUGF1c2Ugb24gZXhjZXB0aW9uc1wiIGJlaGF2aW9yLCB3ZSBkb24ndCB1c2UgYVxuICAvLyB0cnktY2F0Y2ggaW4gREVWLiBJbnN0ZWFkLCB3ZSBzeW5jaHJvbm91c2x5IGRpc3BhdGNoIGEgZmFrZSBldmVudCB0byBhIGZha2VcbiAgLy8gRE9NIG5vZGUsIGFuZCBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrIGZyb20gaW5zaWRlIGFuIGV2ZW50IGhhbmRsZXJcbiAgLy8gZm9yIHRoYXQgZmFrZSBldmVudC4gSWYgdGhlIGNhbGxiYWNrIHRocm93cywgdGhlIGVycm9yIGlzIFwiY2FwdHVyZWRcIiB1c2luZ1xuICAvLyBhIGdsb2JhbCBldmVudCBoYW5kbGVyLiBCdXQgYmVjYXVzZSB0aGUgZXJyb3IgaGFwcGVucyBpbiBhIGRpZmZlcmVudFxuICAvLyBldmVudCBsb29wIGNvbnRleHQsIGl0IGRvZXMgbm90IGludGVycnVwdCB0aGUgbm9ybWFsIHByb2dyYW0gZmxvdy5cbiAgLy8gRWZmZWN0aXZlbHksIHRoaXMgZ2l2ZXMgdXMgdHJ5LWNhdGNoIGJlaGF2aW9yIHdpdGhvdXQgYWN0dWFsbHkgdXNpbmdcbiAgLy8gdHJ5LWNhdGNoLiBOZWF0IVxuICAvLyBDaGVjayB0aGF0IHRoZSBicm93c2VyIHN1cHBvcnRzIHRoZSBBUElzIHdlIG5lZWQgdG8gaW1wbGVtZW50IG91ciBzcGVjaWFsXG4gIC8vIERFViB2ZXJzaW9uIG9mIGludm9rZUd1YXJkZWRDYWxsYmFja1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kaXNwYXRjaEV2ZW50ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGZha2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncmVhY3QnKTtcblxuICAgIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwgPSBmdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tEZXYobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgLy8gSWYgZG9jdW1lbnQgZG9lc24ndCBleGlzdCB3ZSBrbm93IGZvciBzdXJlIHdlIHdpbGwgY3Jhc2ggaW4gdGhpcyBtZXRob2RcbiAgICAgIC8vIHdoZW4gd2UgY2FsbCBkb2N1bWVudC5jcmVhdGVFdmVudCgpLiBIb3dldmVyIHRoaXMgY2FuIGNhdXNlIGNvbmZ1c2luZ1xuICAgICAgLy8gZXJyb3JzOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2tpbmN1YmF0b3IvY3JlYXRlLXJlYWN0LWFwcC9pc3N1ZXMvMzQ4MlxuICAgICAgLy8gU28gd2UgcHJlZW1wdGl2ZWx5IHRocm93IHdpdGggYSBiZXR0ZXIgbWVzc2FnZSBpbnN0ZWFkLlxuICAgICAgaWYgKCEodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSBgZG9jdW1lbnRgIGdsb2JhbCB3YXMgZGVmaW5lZCB3aGVuIFJlYWN0IHdhcyBpbml0aWFsaXplZCwgYnV0IGlzIG5vdCBkZWZpbmVkIGFueW1vcmUuIFRoaXMgY2FuIGhhcHBlbiBpbiBhIHRlc3QgZW52aXJvbm1lbnQgaWYgYSBjb21wb25lbnQgc2NoZWR1bGVzIGFuIHVwZGF0ZSBmcm9tIGFuIGFzeW5jaHJvbm91cyBjYWxsYmFjaywgYnV0IHRoZSB0ZXN0IGhhcyBhbHJlYWR5IGZpbmlzaGVkIHJ1bm5pbmcuIFRvIHNvbHZlIHRoaXMsIHlvdSBjYW4gZWl0aGVyIHVubW91bnQgdGhlIGNvbXBvbmVudCBhdCB0aGUgZW5kIG9mIHlvdXIgdGVzdCAoYW5kIGVuc3VyZSB0aGF0IGFueSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBnZXQgY2FuY2VsZWQgaW4gYGNvbXBvbmVudFdpbGxVbm1vdW50YCksIG9yIHlvdSBjYW4gY2hhbmdlIHRoZSB0ZXN0IGl0c2VsZiB0byBiZSBhc3luY2hyb25vdXMuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICB2YXIgZGlkQ2FsbCA9IGZhbHNlOyAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrIHRocmV3IGFuIGVycm9yLiBXZVxuICAgICAgLy8gc2V0IHRoaXMgdG8gdHJ1ZSBhdCB0aGUgYmVnaW5uaW5nLCB0aGVuIHNldCBpdCB0byBmYWxzZSByaWdodCBhZnRlclxuICAgICAgLy8gY2FsbGluZyB0aGUgZnVuY3Rpb24uIElmIHRoZSBmdW5jdGlvbiBlcnJvcnMsIGBkaWRFcnJvcmAgd2lsbCBuZXZlciBiZVxuICAgICAgLy8gc2V0IHRvIGZhbHNlLiBUaGlzIHN0cmF0ZWd5IHdvcmtzIGV2ZW4gaWYgdGhlIGJyb3dzZXIgaXMgZmxha3kgYW5kXG4gICAgICAvLyBmYWlscyB0byBjYWxsIG91ciBnbG9iYWwgZXJyb3IgaGFuZGxlciwgYmVjYXVzZSBpdCBkb2Vzbid0IHJlbHkgb25cbiAgICAgIC8vIHRoZSBlcnJvciBldmVudCBhdCBhbGwuXG5cbiAgICAgIHZhciBkaWRFcnJvciA9IHRydWU7IC8vIEtlZXBzIHRyYWNrIG9mIHRoZSB2YWx1ZSBvZiB3aW5kb3cuZXZlbnQgc28gdGhhdCB3ZSBjYW4gcmVzZXQgaXRcbiAgICAgIC8vIGR1cmluZyB0aGUgY2FsbGJhY2sgdG8gbGV0IHVzZXIgY29kZSBhY2Nlc3Mgd2luZG93LmV2ZW50IGluIHRoZVxuICAgICAgLy8gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGl0LlxuXG4gICAgICB2YXIgd2luZG93RXZlbnQgPSB3aW5kb3cuZXZlbnQ7IC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHdpbmRvdy5ldmVudCB0byByZXN0b3JlIGl0IGFmdGVyIGV2ZW50XG4gICAgICAvLyBkaXNwYXRjaGluZzogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzY4OFxuXG4gICAgICB2YXIgd2luZG93RXZlbnREZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdldmVudCcpO1xuXG4gICAgICBmdW5jdGlvbiByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpIHtcbiAgICAgICAgLy8gV2UgaW1tZWRpYXRlbHkgcmVtb3ZlIHRoZSBjYWxsYmFjayBmcm9tIGV2ZW50IGxpc3RlbmVycyBzbyB0aGF0XG4gICAgICAgIC8vIG5lc3RlZCBgaW52b2tlR3VhcmRlZENhbGxiYWNrYCBjYWxscyBkbyBub3QgY2xhc2guIE90aGVyd2lzZSwgYVxuICAgICAgICAvLyBuZXN0ZWQgY2FsbCB3b3VsZCB0cmlnZ2VyIHRoZSBmYWtlIGV2ZW50IGhhbmRsZXJzIG9mIGFueSBjYWxsIGhpZ2hlclxuICAgICAgICAvLyBpbiB0aGUgc3RhY2suXG4gICAgICAgIGZha2VOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgY2FsbENhbGxiYWNrLCBmYWxzZSk7IC8vIFdlIGNoZWNrIGZvciB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykgdG8gcHJldmVudCB0aGVcbiAgICAgICAgLy8gd2luZG93LmV2ZW50IGFzc2lnbm1lbnQgaW4gYm90aCBJRSA8PSAxMCBhcyB0aGV5IHRocm93IGFuIGVycm9yXG4gICAgICAgIC8vIFwiTWVtYmVyIG5vdCBmb3VuZFwiIGluIHN0cmljdCBtb2RlLCBhbmQgaW4gRmlyZWZveCB3aGljaCBkb2VzIG5vdFxuICAgICAgICAvLyBzdXBwb3J0IHdpbmRvdy5ldmVudC5cblxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5ldmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lmhhc093blByb3BlcnR5KCdldmVudCcpKSB7XG4gICAgICAgICAgd2luZG93LmV2ZW50ID0gd2luZG93RXZlbnQ7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ3JlYXRlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIG91ciBmYWtlIGV2ZW50LiBXZSB3aWxsIHN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGRpc3BhdGNoIG91ciBmYWtlIGV2ZW50IHVzaW5nIGBkaXNwYXRjaEV2ZW50YC4gSW5zaWRlIHRoZSBoYW5kbGVyLCB3ZVxuICAgICAgLy8gY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjay5cblxuXG4gICAgICB2YXIgZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuXG4gICAgICBmdW5jdGlvbiBjYWxsQ2FsbGJhY2soKSB7XG4gICAgICAgIGRpZENhbGwgPSB0cnVlO1xuICAgICAgICByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpO1xuICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGZ1bmNBcmdzKTtcbiAgICAgICAgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICAgIH0gLy8gQ3JlYXRlIGEgZ2xvYmFsIGVycm9yIGV2ZW50IGhhbmRsZXIuIFdlIHVzZSB0aGlzIHRvIGNhcHR1cmUgdGhlIHZhbHVlXG4gICAgICAvLyB0aGF0IHdhcyB0aHJvd24uIEl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGVycm9yIGhhbmRsZXIgd2lsbCBmaXJlIG1vcmVcbiAgICAgIC8vIHRoYW4gb25jZTsgZm9yIGV4YW1wbGUsIGlmIG5vbi1SZWFjdCBjb2RlIGFsc28gY2FsbHMgYGRpc3BhdGNoRXZlbnRgXG4gICAgICAvLyBhbmQgYSBoYW5kbGVyIGZvciB0aGF0IGV2ZW50IHRocm93cy4gV2Ugc2hvdWxkIGJlIHJlc2lsaWVudCB0byBtb3N0IG9mXG4gICAgICAvLyB0aG9zZSBjYXNlcy4gRXZlbiBpZiBvdXIgZXJyb3IgZXZlbnQgaGFuZGxlciBmaXJlcyBtb3JlIHRoYW4gb25jZSwgdGhlXG4gICAgICAvLyBsYXN0IGVycm9yIGV2ZW50IGlzIGFsd2F5cyB1c2VkLiBJZiB0aGUgY2FsbGJhY2sgYWN0dWFsbHkgZG9lcyBlcnJvcixcbiAgICAgIC8vIHdlIGtub3cgdGhhdCB0aGUgbGFzdCBlcnJvciBldmVudCBpcyB0aGUgY29ycmVjdCBvbmUsIGJlY2F1c2UgaXQncyBub3RcbiAgICAgIC8vIHBvc3NpYmxlIGZvciBhbnl0aGluZyBlbHNlIHRvIGhhdmUgaGFwcGVuZWQgaW4gYmV0d2VlbiBvdXIgY2FsbGJhY2tcbiAgICAgIC8vIGVycm9yaW5nIGFuZCB0aGUgY29kZSB0aGF0IGZvbGxvd3MgdGhlIGBkaXNwYXRjaEV2ZW50YCBjYWxsIGJlbG93LiBJZlxuICAgICAgLy8gdGhlIGNhbGxiYWNrIGRvZXNuJ3QgZXJyb3IsIGJ1dCB0aGUgZXJyb3IgZXZlbnQgd2FzIGZpcmVkLCB3ZSBrbm93IHRvXG4gICAgICAvLyBpZ25vcmUgaXQgYmVjYXVzZSBgZGlkRXJyb3JgIHdpbGwgYmUgZmFsc2UsIGFzIGRlc2NyaWJlZCBhYm92ZS5cblxuXG4gICAgICB2YXIgZXJyb3I7IC8vIFVzZSB0aGlzIHRvIHRyYWNrIHdoZXRoZXIgdGhlIGVycm9yIGV2ZW50IGlzIGV2ZXIgY2FsbGVkLlxuXG4gICAgICB2YXIgZGlkU2V0RXJyb3IgPSBmYWxzZTtcbiAgICAgIHZhciBpc0Nyb3NzT3JpZ2luRXJyb3IgPSBmYWxzZTtcblxuICAgICAgZnVuY3Rpb24gaGFuZGxlV2luZG93RXJyb3IoZXZlbnQpIHtcbiAgICAgICAgZXJyb3IgPSBldmVudC5lcnJvcjtcbiAgICAgICAgZGlkU2V0RXJyb3IgPSB0cnVlO1xuXG4gICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCAmJiBldmVudC5jb2xubyA9PT0gMCAmJiBldmVudC5saW5lbm8gPT09IDApIHtcbiAgICAgICAgICBpc0Nyb3NzT3JpZ2luRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAvLyBTb21lIG90aGVyIGVycm9yIGhhbmRsZXIgaGFzIHByZXZlbnRlZCBkZWZhdWx0LlxuICAgICAgICAgIC8vIEJyb3dzZXJzIHNpbGVuY2UgdGhlIGVycm9yIHJlcG9ydCBpZiB0aGlzIGhhcHBlbnMuXG4gICAgICAgICAgLy8gV2UnbGwgcmVtZW1iZXIgdGhpcyB0byBsYXRlciBkZWNpZGUgd2hldGhlciB0byBsb2cgaXQgb3Igbm90LlxuICAgICAgICAgIGlmIChlcnJvciAhPSBudWxsICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGVycm9yLl9zdXBwcmVzc0xvZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoaW5uZXIpIHsvLyBJZ25vcmUuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIENyZWF0ZSBhIGZha2UgZXZlbnQgdHlwZS5cblxuXG4gICAgICB2YXIgZXZ0VHlwZSA9IFwicmVhY3QtXCIgKyAobmFtZSA/IG5hbWUgOiAnaW52b2tlZ3VhcmRlZGNhbGxiYWNrJyk7IC8vIEF0dGFjaCBvdXIgZXZlbnQgaGFuZGxlcnNcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFuZGxlV2luZG93RXJyb3IpO1xuICAgICAgZmFrZU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTsgLy8gU3luY2hyb25vdXNseSBkaXNwYXRjaCBvdXIgZmFrZSBldmVudC4gSWYgdGhlIHVzZXItcHJvdmlkZWQgZnVuY3Rpb25cbiAgICAgIC8vIGVycm9ycywgaXQgd2lsbCB0cmlnZ2VyIG91ciBnbG9iYWwgZXJyb3IgaGFuZGxlci5cblxuICAgICAgZXZ0LmluaXRFdmVudChldnRUeXBlLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgZmFrZU5vZGUuZGlzcGF0Y2hFdmVudChldnQpO1xuXG4gICAgICBpZiAod2luZG93RXZlbnREZXNjcmlwdG9yKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdldmVudCcsIHdpbmRvd0V2ZW50RGVzY3JpcHRvcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaWRDYWxsICYmIGRpZEVycm9yKSB7XG4gICAgICAgIGlmICghZGlkU2V0RXJyb3IpIHtcbiAgICAgICAgICAvLyBUaGUgY2FsbGJhY2sgZXJyb3JlZCwgYnV0IHRoZSBlcnJvciBldmVudCBuZXZlciBmaXJlZC5cbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignQW4gZXJyb3Igd2FzIHRocm93biBpbnNpZGUgb25lIG9mIHlvdXIgY29tcG9uZW50cywgYnV0IFJlYWN0ICcgKyBcImRvZXNuJ3Qga25vdyB3aGF0IGl0IHdhcy4gVGhpcyBpcyBsaWtlbHkgZHVlIHRvIGJyb3dzZXIgXCIgKyAnZmxha2luZXNzLiBSZWFjdCBkb2VzIGl0cyBiZXN0IHRvIHByZXNlcnZlIHRoZSBcIlBhdXNlIG9uICcgKyAnZXhjZXB0aW9uc1wiIGJlaGF2aW9yIG9mIHRoZSBEZXZUb29scywgd2hpY2ggcmVxdWlyZXMgc29tZSAnICsgXCJERVYtbW9kZSBvbmx5IHRyaWNrcy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXNlIGRvbid0IHdvcmsgaW4gXCIgKyAneW91ciBicm93c2VyLiBUcnkgdHJpZ2dlcmluZyB0aGUgZXJyb3IgaW4gcHJvZHVjdGlvbiBtb2RlLCAnICsgJ29yIHN3aXRjaGluZyB0byBhIG1vZGVybiBicm93c2VyLiBJZiB5b3Ugc3VzcGVjdCB0aGF0IHRoaXMgaXMgJyArICdhY3R1YWxseSBhbiBpc3N1ZSB3aXRoIFJlYWN0LCBwbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Nyb3NzT3JpZ2luRXJyb3IpIHtcbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIkEgY3Jvc3Mtb3JpZ2luIGVycm9yIHdhcyB0aHJvd24uIFJlYWN0IGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gXCIgKyAndGhlIGFjdHVhbCBlcnJvciBvYmplY3QgaW4gZGV2ZWxvcG1lbnQuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jcm9zc29yaWdpbi1lcnJvciBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gICAgICB9IC8vIFJlbW92ZSBvdXIgZXZlbnQgbGlzdGVuZXJzXG5cblxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFuZGxlV2luZG93RXJyb3IpO1xuXG4gICAgICBpZiAoIWRpZENhbGwpIHtcbiAgICAgICAgLy8gU29tZXRoaW5nIHdlbnQgcmVhbGx5IHdyb25nLCBhbmQgb3VyIGV2ZW50IHdhcyBub3QgZGlzcGF0Y2hlZC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjczNFxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2NTg1XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgcHJvZHVjdGlvbiBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTtcbiAgICAgICAgcmV0dXJuIGludm9rZUd1YXJkZWRDYWxsYmFja1Byb2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbnZhciBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsJDEgPSBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsO1xuXG52YXIgaGFzRXJyb3IgPSBmYWxzZTtcbnZhciBjYXVnaHRFcnJvciA9IG51bGw7IC8vIFVzZWQgYnkgZXZlbnQgc3lzdGVtIHRvIGNhcHR1cmUvcmV0aHJvdyB0aGUgZmlyc3QgZXJyb3IuXG5cbnZhciBoYXNSZXRocm93RXJyb3IgPSBmYWxzZTtcbnZhciByZXRocm93RXJyb3IgPSBudWxsO1xudmFyIHJlcG9ydGVyID0ge1xuICBvbkVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgfVxufTtcbi8qKlxuICogQ2FsbCBhIGZ1bmN0aW9uIHdoaWxlIGd1YXJkaW5nIGFnYWluc3QgZXJyb3JzIHRoYXQgaGFwcGVucyB3aXRoaW4gaXQuXG4gKiBSZXR1cm5zIGFuIGVycm9yIGlmIGl0IHRocm93cywgb3RoZXJ3aXNlIG51bGwuXG4gKlxuICogSW4gcHJvZHVjdGlvbiwgdGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIHRyeS1jYXRjaC4gVGhlIHJlYXNvbiB3ZSBkb24ndFxuICogdXNlIGEgdHJ5LWNhdGNoIGRpcmVjdGx5IGlzIHNvIHRoYXQgd2UgY2FuIHN3YXAgb3V0IGEgZGlmZmVyZW50XG4gKiBpbXBsZW1lbnRhdGlvbiBpbiBERVYgbW9kZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsJDEuYXBwbHkocmVwb3J0ZXIsIGFyZ3VtZW50cyk7XG59XG4vKipcbiAqIFNhbWUgYXMgaW52b2tlR3VhcmRlZENhbGxiYWNrLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gZXJyb3IsIGl0IHN0b3Jlc1xuICogaXQgaW4gYSBnbG9iYWwgc28gaXQgY2FuIGJlIHJldGhyb3duIGJ5IGByZXRocm93Q2F1Z2h0RXJyb3JgIGxhdGVyLlxuICogVE9ETzogU2VlIGlmIGNhdWdodEVycm9yIGFuZCByZXRocm93RXJyb3IgY2FuIGJlIHVuaWZpZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhlIGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzIGZvciBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcihuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGlmIChoYXNFcnJvcikge1xuICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgIGlmICghaGFzUmV0aHJvd0Vycm9yKSB7XG4gICAgICBoYXNSZXRocm93RXJyb3IgPSB0cnVlO1xuICAgICAgcmV0aHJvd0Vycm9yID0gZXJyb3I7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIER1cmluZyBleGVjdXRpb24gb2YgZ3VhcmRlZCBmdW5jdGlvbnMgd2Ugd2lsbCBjYXB0dXJlIHRoZSBmaXJzdCBlcnJvciB3aGljaFxuICogd2Ugd2lsbCByZXRocm93IHRvIGJlIGhhbmRsZWQgYnkgdGhlIHRvcCBsZXZlbCBlcnJvciBoYW5kbGVyLlxuICovXG5cbmZ1bmN0aW9uIHJldGhyb3dDYXVnaHRFcnJvcigpIHtcbiAgaWYgKGhhc1JldGhyb3dFcnJvcikge1xuICAgIHZhciBlcnJvciA9IHJldGhyb3dFcnJvcjtcbiAgICBoYXNSZXRocm93RXJyb3IgPSBmYWxzZTtcbiAgICByZXRocm93RXJyb3IgPSBudWxsO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5mdW5jdGlvbiBoYXNDYXVnaHRFcnJvcigpIHtcbiAgcmV0dXJuIGhhc0Vycm9yO1xufVxuZnVuY3Rpb24gY2xlYXJDYXVnaHRFcnJvcigpIHtcbiAgaWYgKGhhc0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gY2F1Z2h0RXJyb3I7XG4gICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICBjYXVnaHRFcnJvciA9IG51bGw7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiY2xlYXJDYXVnaHRFcnJvciB3YXMgY2FsbGVkIGJ1dCBubyBlcnJvciB3YXMgY2FwdHVyZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBgUmVhY3RJbnN0YW5jZU1hcGAgbWFpbnRhaW5zIGEgbWFwcGluZyBmcm9tIGEgcHVibGljIGZhY2luZyBzdGF0ZWZ1bFxuICogaW5zdGFuY2UgKGtleSkgYW5kIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiAodmFsdWUpLiBUaGlzIGFsbG93cyBwdWJsaWNcbiAqIG1ldGhvZHMgdG8gYWNjZXB0IHRoZSB1c2VyIGZhY2luZyBpbnN0YW5jZSBhcyBhbiBhcmd1bWVudCBhbmQgbWFwIHRoZW0gYmFja1xuICogdG8gaW50ZXJuYWwgbWV0aG9kcy5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBtb2R1bGUgaXMgY3VycmVudGx5IHNoYXJlZCBhbmQgYXNzdW1lZCB0byBiZSBzdGF0ZWxlc3MuXG4gKiBJZiB0aGlzIGJlY29tZXMgYW4gYWN0dWFsIE1hcCwgdGhhdCB3aWxsIGJyZWFrLlxuICovXG5mdW5jdGlvbiBnZXQoa2V5KSB7XG4gIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxzO1xufVxuZnVuY3Rpb24gaGFzKGtleSkge1xuICByZXR1cm4ga2V5Ll9yZWFjdEludGVybmFscyAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAga2V5Ll9yZWFjdEludGVybmFscyA9IHZhbHVlO1xufVxuXG4vLyBEb24ndCBjaGFuZ2UgdGhlc2UgdHdvIHZhbHVlcy4gVGhleSdyZSB1c2VkIGJ5IFJlYWN0IERldiBUb29scy5cbnZhciBOb0ZsYWdzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIFBlcmZvcm1lZFdvcmsgPVxuLyogICAgICAgICAgICAgICAgKi9cbjE7IC8vIFlvdSBjYW4gY2hhbmdlIHRoZSByZXN0IChhbmQgYWRkIG1vcmUpLlxuXG52YXIgUGxhY2VtZW50ID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBVcGRhdGUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG40O1xudmFyIFBsYWNlbWVudEFuZFVwZGF0ZSA9XG4vKiAgICAgICAgICAgKi9cbjY7XG52YXIgRGVsZXRpb24gPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuODtcbnZhciBDb250ZW50UmVzZXQgPVxuLyogICAgICAgICAgICAgICAgICovXG4xNjtcbnZhciBDYWxsYmFjayA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4zMjtcbnZhciBEaWRDYXB0dXJlID1cbi8qICAgICAgICAgICAgICAgICAgICovXG42NDtcbnZhciBSZWYgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4xMjg7XG52YXIgU25hcHNob3QgPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuMjU2O1xudmFyIFBhc3NpdmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbjUxMjsgLy8gVE9ETyAoZWZmZWN0cykgUmVtb3ZlIHRoaXMgYml0IG9uY2UgdGhlIG5ldyByZWNvbmNpbGVyIGlzIHN5bmNlZCB0byB0aGUgb2xkLlxuXG52YXIgUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2ID1cbi8qICAgICAqL1xuODE5MjtcbnZhciBIeWRyYXRpbmcgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4xMDI0O1xudmFyIEh5ZHJhdGluZ0FuZFVwZGF0ZSA9XG4vKiAgICAgICAgICAgKi9cbjEwMjg7IC8vIFBhc3NpdmUgJiBVcGRhdGUgJiBDYWxsYmFjayAmIFJlZiAmIFNuYXBzaG90XG5cbnZhciBMaWZlY3ljbGVFZmZlY3RNYXNrID1cbi8qICAgICAgICAgICovXG45MzI7IC8vIFVuaW9uIG9mIGFsbCBob3N0IGVmZmVjdHNcblxudmFyIEhvc3RFZmZlY3RNYXNrID1cbi8qICAgICAgICAgICAgICAgKi9cbjIwNDc7IC8vIFRoZXNlIGFyZSBub3QgcmVhbGx5IHNpZGUgZWZmZWN0cywgYnV0IHdlIHN0aWxsIHJldXNlIHRoaXMgZmllbGQuXG5cbnZhciBJbmNvbXBsZXRlID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4yMDQ4O1xudmFyIFNob3VsZENhcHR1cmUgPVxuLyogICAgICAgICAgICAgICAgKi9cbjQwOTY7XG52YXIgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSA9XG4vKiAqL1xuMTYzODQ7IC8vIFN0YXRpYyB0YWdzIGRlc2NyaWJlIGFzcGVjdHMgb2YgYSBmaWJlciB0aGF0IGFyZSBub3Qgc3BlY2lmaWMgdG8gYSByZW5kZXIsXG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xuZnVuY3Rpb24gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikge1xuICB2YXIgbm9kZSA9IGZpYmVyO1xuICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBmaWJlcjtcblxuICBpZiAoIWZpYmVyLmFsdGVybmF0ZSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSwgdGhpcyBtaWdodCBiZSBhIG5ldyB0cmVlIHRoYXQgaXNuJ3QgaW5zZXJ0ZWRcbiAgICAvLyB5ZXQuIElmIGl0IGlzLCB0aGVuIGl0IHdpbGwgaGF2ZSBhIHBlbmRpbmcgaW5zZXJ0aW9uIGVmZmVjdCBvbiBpdC5cbiAgICB2YXIgbmV4dE5vZGUgPSBub2RlO1xuXG4gICAgZG8ge1xuICAgICAgbm9kZSA9IG5leHROb2RlO1xuXG4gICAgICBpZiAoKG5vZGUuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24gb3IgaW4tcHJvZ3Jlc3MgaHlkcmF0aW9uLiBUaGUgbmVhcmVzdCBwb3NzaWJsZVxuICAgICAgICAvLyBtb3VudGVkIGZpYmVyIGlzIHRoZSBwYXJlbnQgYnV0IHdlIG5lZWQgdG8gY29udGludWUgdG8gZmlndXJlIG91dFxuICAgICAgICAvLyBpZiB0aGF0IG9uZSBpcyBzdGlsbCBtb3VudGVkLlxuICAgICAgICBuZWFyZXN0TW91bnRlZCA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0Tm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5leHROb2RlKTtcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAobm9kZS5yZXR1cm4pIHtcbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAobm9kZS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyB3YXMgYSBuZXN0ZWQgSG9zdFJvb3Qgd2hlbiB1c2VkIHdpdGhcbiAgICAvLyByZW5kZXJDb250YWluZXJJbnRvU3VidHJlZS5cbiAgICByZXR1cm4gbmVhcmVzdE1vdW50ZWQ7XG4gIH0gLy8gSWYgd2UgZGlkbid0IGhpdCB0aGUgcm9vdCwgdGhhdCBtZWFucyB0aGF0IHdlJ3JlIGluIGFuIGRpc2Nvbm5lY3RlZCB0cmVlXG4gIC8vIHRoYXQgaGFzIGJlZW4gdW5tb3VudGVkLlxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBzdXNwZW5zZVN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKGZpYmVyKSB7XG4gIHJldHVybiBmaWJlci50YWcgPT09IEhvc3RSb290ID8gZmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gOiBudWxsO1xufVxuZnVuY3Rpb24gaXNGaWJlck1vdW50ZWQoZmliZXIpIHtcbiAgcmV0dXJuIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcjtcbn1cbmZ1bmN0aW9uIGlzTW91bnRlZChjb21wb25lbnQpIHtcbiAge1xuICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgb3duZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgdmFyIG93bmVyRmliZXIgPSBvd25lcjtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoIWluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcikge1xuICAgICAgICBlcnJvcignJXMgaXMgYWNjZXNzaW5nIGlzTW91bnRlZCBpbnNpZGUgaXRzIHJlbmRlcigpIGZ1bmN0aW9uLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZShvd25lckZpYmVyLnR5cGUpIHx8ICdBIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gIGlmICghZmliZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRJc01vdW50ZWQoZmliZXIpIHtcbiAgaWYgKCEoZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChmaWJlcikge1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmICghYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGVuIHdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiBpdCBpcyBtb3VudGVkLlxuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpO1xuXG4gICAgaWYgKCEobmVhcmVzdE1vdW50ZWQgIT09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gZmliZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBmaWJlcjtcbiAgfSAvLyBJZiB3ZSBoYXZlIHR3byBwb3NzaWJsZSBicmFuY2hlcywgd2UnbGwgd2FsayBiYWNrd2FyZHMgdXAgdG8gdGhlIHJvb3RcbiAgLy8gdG8gc2VlIHdoYXQgcGF0aCB0aGUgcm9vdCBwb2ludHMgdG8uIE9uIHRoZSB3YXkgd2UgbWF5IGhpdCBvbmUgb2YgdGhlXG4gIC8vIHNwZWNpYWwgY2FzZXMgYW5kIHdlJ2xsIGRlYWwgd2l0aCB0aGVtLlxuXG5cbiAgdmFyIGEgPSBmaWJlcjtcbiAgdmFyIGIgPSBhbHRlcm5hdGU7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgcGFyZW50QSA9IGEucmV0dXJuO1xuXG4gICAgaWYgKHBhcmVudEEgPT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIGF0IHRoZSByb290LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIHBhcmVudEIgPSBwYXJlbnRBLmFsdGVybmF0ZTtcblxuICAgIGlmIChwYXJlbnRCID09PSBudWxsKSB7XG4gICAgICAvLyBUaGVyZSBpcyBubyBhbHRlcm5hdGUuIFRoaXMgaXMgYW4gdW51c3VhbCBjYXNlLiBDdXJyZW50bHksIGl0IG9ubHlcbiAgICAgIC8vIGhhcHBlbnMgd2hlbiBhIFN1c3BlbnNlIGNvbXBvbmVudCBpcyBoaWRkZW4uIEFuIGV4dHJhIGZyYWdtZW50IGZpYmVyXG4gICAgICAvLyBpcyBpbnNlcnRlZCBpbiBiZXR3ZWVuIHRoZSBTdXNwZW5zZSBmaWJlciBhbmQgaXRzIGNoaWxkcmVuLiBTa2lwXG4gICAgICAvLyBvdmVyIHRoaXMgZXh0cmEgZnJhZ21lbnQgZmliZXIgYW5kIHByb2NlZWQgdG8gdGhlIG5leHQgcGFyZW50LlxuICAgICAgdmFyIG5leHRQYXJlbnQgPSBwYXJlbnRBLnJldHVybjtcblxuICAgICAgaWYgKG5leHRQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgYSA9IGIgPSBuZXh0UGFyZW50O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gSWYgdGhlcmUncyBubyBwYXJlbnQsIHdlJ3JlIGF0IHRoZSByb290LlxuXG5cbiAgICAgIGJyZWFrO1xuICAgIH0gLy8gSWYgYm90aCBjb3BpZXMgb2YgdGhlIHBhcmVudCBmaWJlciBwb2ludCB0byB0aGUgc2FtZSBjaGlsZCwgd2UgY2FuXG4gICAgLy8gYXNzdW1lIHRoYXQgdGhlIGNoaWxkIGlzIGN1cnJlbnQuIFRoaXMgaGFwcGVucyB3aGVuIHdlIGJhaWxvdXQgb24gbG93XG4gICAgLy8gcHJpb3JpdHk6IHRoZSBiYWlsZWQgb3V0IGZpYmVyJ3MgY2hpbGQgcmV1c2VzIHRoZSBjdXJyZW50IGNoaWxkLlxuXG5cbiAgICBpZiAocGFyZW50QS5jaGlsZCA9PT0gcGFyZW50Qi5jaGlsZCkge1xuICAgICAgdmFyIGNoaWxkID0gcGFyZW50QS5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICAgIGlmIChjaGlsZCA9PT0gYSkge1xuICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBBIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgICBhc3NlcnRJc01vdW50ZWQocGFyZW50QSk7XG4gICAgICAgICAgcmV0dXJuIGZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkID09PSBiKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEIgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gYWx0ZXJuYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgfSAvLyBXZSBzaG91bGQgbmV2ZXIgaGF2ZSBhbiBhbHRlcm5hdGUgZm9yIGFueSBtb3VudGluZyBub2RlLiBTbyB0aGUgb25seVxuICAgICAgLy8gd2F5IHRoaXMgY291bGQgcG9zc2libHkgaGFwcGVuIGlzIGlmIHRoaXMgd2FzIHVubW91bnRlZCwgaWYgYXQgYWxsLlxuXG5cbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGEucmV0dXJuICE9PSBiLnJldHVybikge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVyIG9mIEEgYW5kIHRoZSByZXR1cm4gcG9pbnRlciBvZiBCIHBvaW50IHRvIGRpZmZlcmVudFxuICAgICAgLy8gZmliZXJzLiBXZSBhc3N1bWUgdGhhdCByZXR1cm4gcG9pbnRlcnMgbmV2ZXIgY3Jpc3MtY3Jvc3MsIHNvIEEgbXVzdFxuICAgICAgLy8gYmVsb25nIHRvIHRoZSBjaGlsZCBzZXQgb2YgQS5yZXR1cm4sIGFuZCBCIG11c3QgYmVsb25nIHRvIHRoZSBjaGlsZFxuICAgICAgLy8gc2V0IG9mIEIucmV0dXJuLlxuICAgICAgYSA9IHBhcmVudEE7XG4gICAgICBiID0gcGFyZW50QjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVycyBwb2ludCB0byB0aGUgc2FtZSBmaWJlci4gV2UnbGwgaGF2ZSB0byB1c2UgdGhlXG4gICAgICAvLyBkZWZhdWx0LCBzbG93IHBhdGg6IHNjYW4gdGhlIGNoaWxkIHNldHMgb2YgZWFjaCBwYXJlbnQgYWx0ZXJuYXRlIHRvIHNlZVxuICAgICAgLy8gd2hpY2ggY2hpbGQgYmVsb25ncyB0byB3aGljaCBzZXQuXG4gICAgICAvL1xuICAgICAgLy8gU2VhcmNoIHBhcmVudCBBJ3MgY2hpbGQgc2V0XG4gICAgICB2YXIgZGlkRmluZENoaWxkID0gZmFsc2U7XG4gICAgICB2YXIgX2NoaWxkID0gcGFyZW50QS5jaGlsZDtcblxuICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgIC8vIFNlYXJjaCBwYXJlbnQgQidzIGNoaWxkIHNldFxuICAgICAgICBfY2hpbGQgPSBwYXJlbnRCLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChfY2hpbGQpIHtcbiAgICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkNoaWxkIHdhcyBub3QgZm91bmQgaW4gZWl0aGVyIHBhcmVudCBzZXQuIFRoaXMgaW5kaWNhdGVzIGEgYnVnIGluIFJlYWN0IHJlbGF0ZWQgdG8gdGhlIHJldHVybiBwb2ludGVyLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKGEuYWx0ZXJuYXRlID09PSBiKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJSZXR1cm4gZmliZXJzIHNob3VsZCBhbHdheXMgYmUgZWFjaCBvdGhlcnMnIGFsdGVybmF0ZXMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gSWYgdGhlIHJvb3QgaXMgbm90IGEgaG9zdCBjb250YWluZXIsIHdlJ3JlIGluIGEgZGlzY29ubmVjdGVkIHRyZWUuIEkuZS5cbiAgLy8gdW5tb3VudGVkLlxuXG5cbiAgaWYgKCEoYS50YWcgPT09IEhvc3RSb290KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhLnN0YXRlTm9kZS5jdXJyZW50ID09PSBhKSB7XG4gICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgIHJldHVybiBmaWJlcjtcbiAgfSAvLyBPdGhlcndpc2UgQiBoYXMgdG8gYmUgY3VycmVudCBicmFuY2guXG5cblxuICByZXR1cm4gYWx0ZXJuYXRlO1xufVxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXIocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcblxuICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuXG5cbiAgdmFyIG5vZGUgPSBjdXJyZW50UGFyZW50O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAoIW5vZGUuc2libGluZykge1xuICAgICAgaWYgKCFub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9IC8vIEZsb3cgbmVlZHMgdGhlIHJldHVybiBudWxsIGhlcmUsIGJ1dCBFU0xpbnQgY29tcGxhaW5zIGFib3V0IGl0LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5yZWFjaGFibGVcblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzKHBhcmVudCkge1xuICB2YXIgY3VycmVudFBhcmVudCA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKHBhcmVudCk7XG5cbiAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTmV4dCB3ZSdsbCBkcmlsbCBkb3duIHRoaXMgY29tcG9uZW50IHRvIGZpbmQgdGhlIGZpcnN0IEhvc3RDb21wb25lbnQvVGV4dC5cblxuXG4gIHZhciBub2RlID0gY3VycmVudFBhcmVudDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgJiYgbm9kZS50YWcgIT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICBpZiAoIW5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH0gLy8gRmxvdyBuZWVkcyB0aGUgcmV0dXJuIG51bGwgaGVyZSwgYnV0IEVTTGludCBjb21wbGFpbnMgYWJvdXQgaXQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBkb2VzRmliZXJDb250YWluKHBhcmVudEZpYmVyLCBjaGlsZEZpYmVyKSB7XG4gIHZhciBub2RlID0gY2hpbGRGaWJlcjtcbiAgdmFyIHBhcmVudEZpYmVyQWx0ZXJuYXRlID0gcGFyZW50RmliZXIuYWx0ZXJuYXRlO1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudEZpYmVyIHx8IG5vZGUgPT09IHBhcmVudEZpYmVyQWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uO1xuZnVuY3Rpb24gc2V0QXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihmbikge1xuICBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uID0gZm47XG59XG52YXIgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb247XG5mdW5jdGlvbiBzZXRBdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihmbikge1xuICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiA9IGZuO1xufVxudmFyIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eTtcbmZ1bmN0aW9uIHNldEF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShmbikge1xuICBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkgPSBmbjtcbn1cbnZhciBhdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eTtcbmZ1bmN0aW9uIHNldEF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KGZuKSB7XG4gIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5ID0gZm47XG59IC8vIFRPRE86IFVwZ3JhZGUgdGhpcyBkZWZpbml0aW9uIG9uY2Ugd2UncmUgb24gYSBuZXdlciB2ZXJzaW9uIG9mIEZsb3cgdGhhdFxudmFyIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSBmYWxzZTsgLy8gVGhlIHF1ZXVlIG9mIGRpc2NyZXRlIGV2ZW50cyB0byBiZSByZXBsYXllZC5cblxudmFyIHF1ZXVlZERpc2NyZXRlRXZlbnRzID0gW107IC8vIEluZGljYXRlcyBpZiBhbnkgY29udGludW91cyBldmVudCB0YXJnZXRzIGFyZSBub24tbnVsbCBmb3IgZWFybHkgYmFpbG91dC5cbi8vIGlmIHRoZSBsYXN0IHRhcmdldCB3YXMgZGVoeWRyYXRlZC5cblxudmFyIHF1ZXVlZEZvY3VzID0gbnVsbDtcbnZhciBxdWV1ZWREcmFnID0gbnVsbDtcbnZhciBxdWV1ZWRNb3VzZSA9IG51bGw7IC8vIEZvciBwb2ludGVyIGV2ZW50cyB0aGVyZSBjYW4gYmUgb25lIGxhdGVzdCBldmVudCBwZXIgcG9pbnRlcklkLlxuXG52YXIgcXVldWVkUG9pbnRlcnMgPSBuZXcgTWFwKCk7XG52YXIgcXVldWVkUG9pbnRlckNhcHR1cmVzID0gbmV3IE1hcCgpOyAvLyBXZSBjb3VsZCBjb25zaWRlciByZXBsYXlpbmcgc2VsZWN0aW9uY2hhbmdlIGFuZCB0b3VjaG1vdmVzIHRvby5cblxudmFyIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cyA9IFtdO1xuZnVuY3Rpb24gaGFzUXVldWVkRGlzY3JldGVFdmVudHMoKSB7XG4gIHJldHVybiBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGggPiAwO1xufVxudmFyIGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cyA9IFsnbW91c2Vkb3duJywgJ21vdXNldXAnLCAndG91Y2hjYW5jZWwnLCAndG91Y2hlbmQnLCAndG91Y2hzdGFydCcsICdhdXhjbGljaycsICdkYmxjbGljaycsICdwb2ludGVyY2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJ1cCcsICdkcmFnZW5kJywgJ2RyYWdzdGFydCcsICdkcm9wJywgJ2NvbXBvc2l0aW9uZW5kJywgJ2NvbXBvc2l0aW9uc3RhcnQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdpbnB1dCcsICd0ZXh0SW5wdXQnLCAvLyBJbnRlbnRpb25hbGx5IGNhbWVsQ2FzZVxuJ2NvcHknLCAnY3V0JywgJ3Bhc3RlJywgJ2NsaWNrJywgJ2NoYW5nZScsICdjb250ZXh0bWVudScsICdyZXNldCcsICdzdWJtaXQnXTtcbmZ1bmN0aW9uIGlzUmVwbGF5YWJsZURpc2NyZXRlRXZlbnQoZXZlbnRUeXBlKSB7XG4gIHJldHVybiBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMuaW5kZXhPZihldmVudFR5cGUpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICByZXR1cm4ge1xuICAgIGJsb2NrZWRPbjogYmxvY2tlZE9uLFxuICAgIGRvbUV2ZW50TmFtZTogZG9tRXZlbnROYW1lLFxuICAgIGV2ZW50U3lzdGVtRmxhZ3M6IGV2ZW50U3lzdGVtRmxhZ3MgfCBJU19SRVBMQVlFRCxcbiAgICBuYXRpdmVFdmVudDogbmF0aXZlRXZlbnQsXG4gICAgdGFyZ2V0Q29udGFpbmVyczogW3RhcmdldENvbnRhaW5lcl1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcXVldWVEaXNjcmV0ZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBxdWV1ZWRFdmVudCA9IGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gIHF1ZXVlZERpc2NyZXRlRXZlbnRzLnB1c2gocXVldWVkRXZlbnQpO1xufSAvLyBSZXNldHMgdGhlIHJlcGxheWluZyBmb3IgdGhpcyB0eXBlIG9mIGNvbnRpbnVvdXMgZXZlbnQgdG8gbm8gZXZlbnQuXG5cbmZ1bmN0aW9uIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIHF1ZXVlZEZvY3VzID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZHJhZ2VudGVyJzpcbiAgICBjYXNlICdkcmFnbGVhdmUnOlxuICAgICAgcXVldWVkRHJhZyA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgY2FzZSAnbW91c2VvdXQnOlxuICAgICAgcXVldWVkTW91c2UgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgY2FzZSAncG9pbnRlcm91dCc6XG4gICAgICB7XG4gICAgICAgIHZhciBwb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJzLmRlbGV0ZShwb2ludGVySWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuICAgICAge1xuICAgICAgICB2YXIgX3BvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmRlbGV0ZShfcG9pbnRlcklkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChleGlzdGluZ1F1ZXVlZEV2ZW50LCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICBpZiAoZXhpc3RpbmdRdWV1ZWRFdmVudCA9PT0gbnVsbCB8fCBleGlzdGluZ1F1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50ICE9PSBuYXRpdmVFdmVudCkge1xuICAgIHZhciBxdWV1ZWRFdmVudCA9IGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG5cbiAgICBpZiAoYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICB2YXIgX2ZpYmVyMiA9IGdldEluc3RhbmNlRnJvbU5vZGUoYmxvY2tlZE9uKTtcblxuICAgICAgaWYgKF9maWJlcjIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQXR0ZW1wdCB0byBpbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhpcyB0YXJnZXQuXG4gICAgICAgIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKF9maWJlcjIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWV1ZWRFdmVudDtcbiAgfSAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgcXVldWVkIHRoaXMgZXhhY3QgZXZlbnQsIHRoZW4gaXQncyBiZWNhdXNlXG4gIC8vIHRoZSBkaWZmZXJlbnQgZXZlbnQgc3lzdGVtcyBoYXZlIGRpZmZlcmVudCBET00gZXZlbnQgbGlzdGVuZXJzLlxuICAvLyBXZSBjYW4gYWNjdW11bGF0ZSB0aGUgZmxhZ3MsIGFuZCB0aGUgdGFyZ2V0Q29udGFpbmVycywgYW5kXG4gIC8vIHN0b3JlIGEgc2luZ2xlIGV2ZW50IHRvIGJlIHJlcGxheWVkLlxuXG5cbiAgZXhpc3RpbmdRdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzIHw9IGV2ZW50U3lzdGVtRmxhZ3M7XG4gIHZhciB0YXJnZXRDb250YWluZXJzID0gZXhpc3RpbmdRdWV1ZWRFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gIGlmICh0YXJnZXRDb250YWluZXIgIT09IG51bGwgJiYgdGFyZ2V0Q29udGFpbmVycy5pbmRleE9mKHRhcmdldENvbnRhaW5lcikgPT09IC0xKSB7XG4gICAgdGFyZ2V0Q29udGFpbmVycy5wdXNoKHRhcmdldENvbnRhaW5lcik7XG4gIH1cblxuICByZXR1cm4gZXhpc3RpbmdRdWV1ZWRFdmVudDtcbn1cblxuZnVuY3Rpb24gcXVldWVJZkNvbnRpbnVvdXNFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICAvLyBUaGVzZSBzZXQgcmVsYXRlZFRhcmdldCB0byBudWxsIGJlY2F1c2UgdGhlIHJlcGxheWVkIGV2ZW50IHdpbGwgYmUgdHJlYXRlZCBhcyBpZiB3ZVxuICAvLyBtb3ZlZCBmcm9tIG91dHNpZGUgdGhlIHdpbmRvdyAobm8gdGFyZ2V0KSBvbnRvIHRoZSB0YXJnZXQgb25jZSBpdCBoeWRyYXRlcy5cbiAgLy8gSW5zdGVhZCBvZiBtdXRhdGluZyB3ZSBjb3VsZCBjbG9uZSB0aGUgZXZlbnQuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICB7XG4gICAgICAgIHZhciBmb2N1c0V2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZEZvY3VzID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRGb2N1cywgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgZm9jdXNFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZHJhZ2VudGVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGRyYWdFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWREcmFnID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWREcmFnLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBkcmFnRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBtb3VzZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZE1vdXNlID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRNb3VzZSwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbW91c2VFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgcG9pbnRlckV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHZhciBwb2ludGVySWQgPSBwb2ludGVyRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVycy5zZXQocG9pbnRlcklkLCBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZFBvaW50ZXJzLmdldChwb2ludGVySWQpIHx8IG51bGwsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIHBvaW50ZXJFdmVudCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wb2ludGVyRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgdmFyIF9wb2ludGVySWQyID0gX3BvaW50ZXJFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5zZXQoX3BvaW50ZXJJZDIsIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkUG9pbnRlckNhcHR1cmVzLmdldChfcG9pbnRlcklkMikgfHwgbnVsbCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgX3BvaW50ZXJFdmVudCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn0gLy8gQ2hlY2sgaWYgdGhpcyB0YXJnZXQgaXMgdW5ibG9ja2VkLiBSZXR1cm5zIHRydWUgaWYgaXQncyB1bmJsb2NrZWQuXG5cbmZ1bmN0aW9uIGF0dGVtcHRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldChxdWV1ZWRUYXJnZXQpIHtcbiAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBzaGFyZXMgYSBsb3Qgb2YgbG9naWMgd2l0aCBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50LlxuICAvLyBUcnkgdG8gdW5pZnkgdGhlbS4gSXQncyBhIGJpdCB0cmlja3kgc2luY2UgaXQgd291bGQgcmVxdWlyZSB0d28gcmV0dXJuXG4gIC8vIHZhbHVlcy5cbiAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShxdWV1ZWRUYXJnZXQudGFyZ2V0KTtcblxuICBpZiAodGFyZ2V0SW5zdCAhPT0gbnVsbCkge1xuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0SW5zdCk7XG5cbiAgICBpZiAobmVhcmVzdE1vdW50ZWQgIT09IG51bGwpIHtcbiAgICAgIHZhciB0YWcgPSBuZWFyZXN0TW91bnRlZC50YWc7XG5cbiAgICAgIGlmICh0YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIGJsb2NrZWQgb24gaHlkcmF0aW5nIHRoaXMgYm91bmRhcnkuXG4gICAgICAgICAgLy8gSW5jcmVhc2UgaXRzIHByaW9yaXR5LlxuICAgICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBpbnN0YW5jZTtcbiAgICAgICAgICBhdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eShxdWV1ZWRUYXJnZXQubGFuZVByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KHF1ZXVlZFRhcmdldC5wcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBnZXRDb250YWluZXJGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpOyAvLyBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBpbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2ZcbiAgICAgICAgICAvLyBhIHJvb3Qgb3RoZXIgdGhhbiBzeW5jLlxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRXZlbnQpIHtcbiAgaWYgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0YXJnZXRDb250YWluZXJzID0gcXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICB3aGlsZSAodGFyZ2V0Q29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHRhcmdldENvbnRhaW5lciA9IHRhcmdldENvbnRhaW5lcnNbMF07XG4gICAgdmFyIG5leHRCbG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KHF1ZXVlZEV2ZW50LmRvbUV2ZW50TmFtZSwgcXVldWVkRXZlbnQuZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBxdWV1ZWRFdmVudC5uYXRpdmVFdmVudCk7XG5cbiAgICBpZiAobmV4dEJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC4gVHJ5IGFnYWluIGxhdGVyLlxuICAgICAgdmFyIF9maWJlcjMgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKG5leHRCbG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyMyAhPT0gbnVsbCkge1xuICAgICAgICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihfZmliZXIzKTtcbiAgICAgIH1cblxuICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbmV4dEJsb2NrZWRPbjtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIFRoaXMgdGFyZ2V0IGNvbnRhaW5lciB3YXMgc3VjY2Vzc2Z1bGx5IGRpc3BhdGNoZWQuIFRyeSB0aGUgbmV4dC5cblxuXG4gICAgdGFyZ2V0Q29udGFpbmVycy5zaGlmdCgpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcChxdWV1ZWRFdmVudCwga2V5LCBtYXApIHtcbiAgaWYgKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRXZlbnQpKSB7XG4gICAgbWFwLmRlbGV0ZShrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxheVVuYmxvY2tlZEV2ZW50cygpIHtcbiAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IGZhbHNlOyAvLyBGaXJzdCByZXBsYXkgZGlzY3JldGUgZXZlbnRzLlxuXG4gIHdoaWxlIChxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIG5leHREaXNjcmV0ZUV2ZW50ID0gcXVldWVkRGlzY3JldGVFdmVudHNbMF07XG5cbiAgICBpZiAobmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLlxuICAgICAgLy8gSW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mIHRoaXMgYm91bmRhcnkgdG8gdW5ibG9ja1xuICAgICAgLy8gdGhlIG5leHQgZGlzY3JldGUgZXZlbnQuXG4gICAgICB2YXIgX2ZpYmVyNCA9IGdldEluc3RhbmNlRnJvbU5vZGUobmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uKTtcblxuICAgICAgaWYgKF9maWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihfZmliZXI0KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBuZXh0RGlzY3JldGVFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gICAgd2hpbGUgKHRhcmdldENvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHRhcmdldENvbnRhaW5lciA9IHRhcmdldENvbnRhaW5lcnNbMF07XG4gICAgICB2YXIgbmV4dEJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQobmV4dERpc2NyZXRlRXZlbnQuZG9tRXZlbnROYW1lLCBuZXh0RGlzY3JldGVFdmVudC5ldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5leHREaXNjcmV0ZUV2ZW50Lm5hdGl2ZUV2ZW50KTtcblxuICAgICAgaWYgKG5leHRCbG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC4gVHJ5IGFnYWluIGxhdGVyLlxuICAgICAgICBuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gVGhpcyB0YXJnZXQgY29udGFpbmVyIHdhcyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4gVHJ5IHRoZSBuZXh0LlxuXG5cbiAgICAgIHRhcmdldENvbnRhaW5lcnMuc2hpZnQoKTtcbiAgICB9XG5cbiAgICBpZiAobmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAvLyBXZSd2ZSBzdWNjZXNzZnVsbHkgcmVwbGF5ZWQgdGhlIGZpcnN0IGV2ZW50LiBMZXQncyB0cnkgdGhlIG5leHQgb25lLlxuICAgICAgcXVldWVkRGlzY3JldGVFdmVudHMuc2hpZnQoKTtcbiAgICB9XG4gIH0gLy8gTmV4dCByZXBsYXkgYW55IGNvbnRpbnVvdXMgZXZlbnRzLlxuXG5cbiAgaWYgKHF1ZXVlZEZvY3VzICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRm9jdXMpKSB7XG4gICAgcXVldWVkRm9jdXMgPSBudWxsO1xuICB9XG5cbiAgaWYgKHF1ZXVlZERyYWcgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWREcmFnKSkge1xuICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICB9XG5cbiAgaWYgKHF1ZXVlZE1vdXNlICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkTW91c2UpKSB7XG4gICAgcXVldWVkTW91c2UgPSBudWxsO1xuICB9XG5cbiAgcXVldWVkUG9pbnRlcnMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xuICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRXZlbnQsIHVuYmxvY2tlZCkge1xuICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBudWxsO1xuXG4gICAgaWYgKCFoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0KSB7XG4gICAgICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gdHJ1ZTsgLy8gU2NoZWR1bGUgYSBjYWxsYmFjayB0byBhdHRlbXB0IHJlcGxheWluZyBhcyBtYW55IGV2ZW50cyBhcyBhcmVcbiAgICAgIC8vIG5vdyB1bmJsb2NrZWQuIFRoaXMgZmlyc3QgbWlnaHQgbm90IGFjdHVhbGx5IGJlIHVuYmxvY2tlZCB5ZXQuXG4gICAgICAvLyBXZSBjb3VsZCBjaGVjayBpdCBlYXJseSB0byBhdm9pZCBzY2hlZHVsaW5nIGFuIHVubmVjZXNzYXJ5IGNhbGxiYWNrLlxuXG4gICAgICBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksIHJlcGxheVVuYmxvY2tlZEV2ZW50cyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJldHJ5SWZCbG9ja2VkT24odW5ibG9ja2VkKSB7XG4gIC8vIE1hcmsgYW55dGhpbmcgdGhhdCB3YXMgYmxvY2tlZCBvbiB0aGlzIGFzIG5vIGxvbmdlciBibG9ja2VkXG4gIC8vIGFuZCBlbGlnaWJsZSBmb3IgYSByZXBsYXkuXG4gIGlmIChxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZERpc2NyZXRlRXZlbnRzWzBdLCB1bmJsb2NrZWQpOyAvLyBUaGlzIGlzIGEgZXhwb25lbnRpYWwgc2VhcmNoIGZvciBlYWNoIGJvdW5kYXJ5IHRoYXQgY29tbWl0cy4gSSB0aGluayBpdCdzXG4gICAgLy8gd29ydGggaXQgYmVjYXVzZSB3ZSBleHBlY3QgdmVyeSBmZXcgZGlzY3JldGUgZXZlbnRzIHRvIHF1ZXVlIHVwIGFuZCBvbmNlXG4gICAgLy8gd2UgYXJlIGFjdHVhbGx5IGZ1bGx5IHVuYmxvY2tlZCBpdCB3aWxsIGJlIGZhc3QgdG8gcmVwbGF5IHRoZW0uXG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVldWVkRXZlbnQgPSBxdWV1ZWREaXNjcmV0ZUV2ZW50c1tpXTtcblxuICAgICAgaWYgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHF1ZXVlZEZvY3VzICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEZvY3VzLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgaWYgKHF1ZXVlZERyYWcgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRHJhZywgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIGlmIChxdWV1ZWRNb3VzZSAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRNb3VzZSwgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIHZhciB1bmJsb2NrID0gZnVuY3Rpb24gKHF1ZXVlZEV2ZW50KSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKTtcbiAgfTtcblxuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKHVuYmxvY2spO1xuICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaCh1bmJsb2NrKTtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aDsgX2krKykge1xuICAgIHZhciBxdWV1ZWRUYXJnZXQgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbX2ldO1xuXG4gICAgaWYgKHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIG5leHRFeHBsaWNpdFRhcmdldCA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1swXTtcblxuICAgIGlmIChuZXh0RXhwbGljaXRUYXJnZXQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLlxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dGVtcHRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldChuZXh0RXhwbGljaXRUYXJnZXQpO1xuXG4gICAgICBpZiAobmV4dEV4cGxpY2l0VGFyZ2V0LmJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXZSdyZSB1bmJsb2NrZWQuXG4gICAgICAgIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgRGlzY3JldGVFdmVudCA9IDA7XG52YXIgVXNlckJsb2NraW5nRXZlbnQgPSAxO1xudmFyIENvbnRpbnVvdXNFdmVudCA9IDI7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBtYXBwaW5nIG9mIHN0YW5kYXJkIHZlbmRvciBwcmVmaXhlcyB1c2luZyB0aGUgZGVmaW5lZCBzdHlsZSBwcm9wZXJ0eSBhbmQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVQcm9wXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIG1ha2VQcmVmaXhNYXAoc3R5bGVQcm9wLCBldmVudE5hbWUpIHtcbiAgdmFyIHByZWZpeGVzID0ge307XG4gIHByZWZpeGVzW3N0eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICBwcmVmaXhlc1snV2Via2l0JyArIHN0eWxlUHJvcF0gPSAnd2Via2l0JyArIGV2ZW50TmFtZTtcbiAgcHJlZml4ZXNbJ01veicgKyBzdHlsZVByb3BdID0gJ21veicgKyBldmVudE5hbWU7XG4gIHJldHVybiBwcmVmaXhlcztcbn1cbi8qKlxuICogQSBsaXN0IG9mIGV2ZW50IG5hbWVzIHRvIGEgY29uZmlndXJhYmxlIGxpc3Qgb2YgdmVuZG9yIHByZWZpeGVzLlxuICovXG5cblxudmFyIHZlbmRvclByZWZpeGVzID0ge1xuICBhbmltYXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25FbmQnKSxcbiAgYW5pbWF0aW9uaXRlcmF0aW9uOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uSXRlcmF0aW9uJyksXG4gIGFuaW1hdGlvbnN0YXJ0OiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uU3RhcnQnKSxcbiAgdHJhbnNpdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnVHJhbnNpdGlvbicsICdUcmFuc2l0aW9uRW5kJylcbn07XG4vKipcbiAqIEV2ZW50IG5hbWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0ZWN0ZWQgYW5kIHByZWZpeGVkIChpZiBhcHBsaWNhYmxlKS5cbiAqL1xuXG52YXIgcHJlZml4ZWRFdmVudE5hbWVzID0ge307XG4vKipcbiAqIEVsZW1lbnQgdG8gY2hlY2sgZm9yIHByZWZpeGVzIG9uLlxuICovXG5cbnZhciBzdHlsZSA9IHt9O1xuLyoqXG4gKiBCb290c3RyYXAgaWYgYSBET00gZXhpc3RzLlxuICovXG5cbmlmIChjYW5Vc2VET00pIHtcbiAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTsgLy8gT24gc29tZSBwbGF0Zm9ybXMsIGluIHBhcnRpY3VsYXIgc29tZSByZWxlYXNlcyBvZiBBbmRyb2lkIDQueCxcbiAgLy8gdGhlIHVuLXByZWZpeGVkIFwiYW5pbWF0aW9uXCIgYW5kIFwidHJhbnNpdGlvblwiIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlXG4gIC8vIHN0eWxlIG9iamVjdCBidXQgdGhlIGV2ZW50cyB0aGF0IGZpcmUgd2lsbCBzdGlsbCBiZSBwcmVmaXhlZCwgc28gd2UgbmVlZFxuICAvLyB0byBjaGVjayBpZiB0aGUgdW4tcHJlZml4ZWQgZXZlbnRzIGFyZSB1c2FibGUsIGFuZCBpZiBub3QgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgbWFwLlxuXG4gIGlmICghKCdBbmltYXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25lbmQuYW5pbWF0aW9uO1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uO1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25zdGFydC5hbmltYXRpb247XG4gIH0gLy8gU2FtZSBhcyBhYm92ZVxuXG5cbiAgaWYgKCEoJ1RyYW5zaXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb247XG4gIH1cbn1cbi8qKlxuICogQXR0ZW1wdHMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHZlbmRvciBwcmVmaXhlZCBldmVudCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgaWYgKHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdO1xuICB9IGVsc2UgaWYgKCF2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIGV2ZW50TmFtZTtcbiAgfVxuXG4gIHZhciBwcmVmaXhNYXAgPSB2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdO1xuXG4gIGZvciAodmFyIHN0eWxlUHJvcCBpbiBwcmVmaXhNYXApIHtcbiAgICBpZiAocHJlZml4TWFwLmhhc093blByb3BlcnR5KHN0eWxlUHJvcCkgJiYgc3R5bGVQcm9wIGluIHN0eWxlKSB7XG4gICAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0gPSBwcmVmaXhNYXBbc3R5bGVQcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXZlbnROYW1lO1xufVxuXG52YXIgQU5JTUFUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25lbmQnKTtcbnZhciBBTklNQVRJT05fSVRFUkFUSU9OID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbml0ZXJhdGlvbicpO1xudmFyIEFOSU1BVElPTl9TVEFSVCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25zdGFydCcpO1xudmFyIFRSQU5TSVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ3RyYW5zaXRpb25lbmQnKTtcblxudmFyIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzID0gbmV3IE1hcCgpO1xudmFyIGV2ZW50UHJpb3JpdGllcyA9IG5ldyBNYXAoKTsgLy8gV2Ugc3RvcmUgbW9zdCBvZiB0aGUgZXZlbnRzIGluIHRoaXMgbW9kdWxlIGluIHBhaXJzIG9mIHR3byBzdHJpbmdzIHNvIHdlIGNhbiByZS11c2Vcbi8vIHRoZSBjb2RlIHJlcXVpcmVkIHRvIGFwcGx5IHRoZSBzYW1lIGxvZ2ljIGZvciBldmVudCBwcmlvcml0aXphdGlvbiBhbmQgdGhhdCBvZiB0aGVcbi8vIFNpbXBsZUV2ZW50UGx1Z2luLiBUaGlzIGNvbXBsaWNhdGVzIHRoaW5ncyBzbGlnaHRseSwgYnV0IHRoZSBhaW0gaXMgdG8gcmVkdWNlIGNvZGVcbi8vIGR1cGxpY2F0aW9uIChmb3Igd2hpY2ggdGhlcmUgd291bGQgYmUgcXVpdGUgYSBiaXQpLiBGb3IgdGhlIGV2ZW50cyB0aGF0IGFyZSBub3QgbmVlZGVkXG4vLyBmb3IgdGhlIFNpbXBsZUV2ZW50UGx1Z2luIChvdGhlckRpc2NyZXRlRXZlbnRzKSB3ZSBwcm9jZXNzIHRoZW0gc2VwYXJhdGVseSBhcyBhblxuLy8gYXJyYXkgb2YgdG9wIGxldmVsIGV2ZW50cy5cbi8vIExhc3RseSwgd2UgaWdub3JlIHByZXR0aWVyIHNvIHdlIGNhbiBrZWVwIHRoZSBmb3JtYXR0aW5nIHNhbmUuXG4vLyBwcmV0dGllci1pZ25vcmVcblxudmFyIGRpc2NyZXRlRXZlbnRQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydjYW5jZWwnLCAnY2FuY2VsJywgJ2NsaWNrJywgJ2NsaWNrJywgJ2Nsb3NlJywgJ2Nsb3NlJywgJ2NvbnRleHRtZW51JywgJ2NvbnRleHRNZW51JywgJ2NvcHknLCAnY29weScsICdjdXQnLCAnY3V0JywgJ2F1eGNsaWNrJywgJ2F1eENsaWNrJywgJ2RibGNsaWNrJywgJ2RvdWJsZUNsaWNrJywgLy8gQ2FyZWZ1bCFcbidkcmFnZW5kJywgJ2RyYWdFbmQnLCAnZHJhZ3N0YXJ0JywgJ2RyYWdTdGFydCcsICdkcm9wJywgJ2Ryb3AnLCAnZm9jdXNpbicsICdmb2N1cycsIC8vIENhcmVmdWwhXG4nZm9jdXNvdXQnLCAnYmx1cicsIC8vIENhcmVmdWwhXG4naW5wdXQnLCAnaW5wdXQnLCAnaW52YWxpZCcsICdpbnZhbGlkJywgJ2tleWRvd24nLCAna2V5RG93bicsICdrZXlwcmVzcycsICdrZXlQcmVzcycsICdrZXl1cCcsICdrZXlVcCcsICdtb3VzZWRvd24nLCAnbW91c2VEb3duJywgJ21vdXNldXAnLCAnbW91c2VVcCcsICdwYXN0ZScsICdwYXN0ZScsICdwYXVzZScsICdwYXVzZScsICdwbGF5JywgJ3BsYXknLCAncG9pbnRlcmNhbmNlbCcsICdwb2ludGVyQ2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJEb3duJywgJ3BvaW50ZXJ1cCcsICdwb2ludGVyVXAnLCAncmF0ZWNoYW5nZScsICdyYXRlQ2hhbmdlJywgJ3Jlc2V0JywgJ3Jlc2V0JywgJ3NlZWtlZCcsICdzZWVrZWQnLCAnc3VibWl0JywgJ3N1Ym1pdCcsICd0b3VjaGNhbmNlbCcsICd0b3VjaENhbmNlbCcsICd0b3VjaGVuZCcsICd0b3VjaEVuZCcsICd0b3VjaHN0YXJ0JywgJ3RvdWNoU3RhcnQnLCAndm9sdW1lY2hhbmdlJywgJ3ZvbHVtZUNoYW5nZSddO1xudmFyIG90aGVyRGlzY3JldGVFdmVudHMgPSBbJ2NoYW5nZScsICdzZWxlY3Rpb25jaGFuZ2UnLCAndGV4dElucHV0JywgJ2NvbXBvc2l0aW9uc3RhcnQnLCAnY29tcG9zaXRpb25lbmQnLCAnY29tcG9zaXRpb251cGRhdGUnXTtcblxuXG52YXIgdXNlckJsb2NraW5nUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnZHJhZycsICdkcmFnJywgJ2RyYWdlbnRlcicsICdkcmFnRW50ZXInLCAnZHJhZ2V4aXQnLCAnZHJhZ0V4aXQnLCAnZHJhZ2xlYXZlJywgJ2RyYWdMZWF2ZScsICdkcmFnb3ZlcicsICdkcmFnT3ZlcicsICdtb3VzZW1vdmUnLCAnbW91c2VNb3ZlJywgJ21vdXNlb3V0JywgJ21vdXNlT3V0JywgJ21vdXNlb3ZlcicsICdtb3VzZU92ZXInLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlck1vdmUnLCAncG9pbnRlcm91dCcsICdwb2ludGVyT3V0JywgJ3BvaW50ZXJvdmVyJywgJ3BvaW50ZXJPdmVyJywgJ3Njcm9sbCcsICdzY3JvbGwnLCAndG9nZ2xlJywgJ3RvZ2dsZScsICd0b3VjaG1vdmUnLCAndG91Y2hNb3ZlJywgJ3doZWVsJywgJ3doZWVsJ107IC8vIHByZXR0aWVyLWlnbm9yZVxuXG52YXIgY29udGludW91c1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2Fib3J0JywgJ2Fib3J0JywgQU5JTUFUSU9OX0VORCwgJ2FuaW1hdGlvbkVuZCcsIEFOSU1BVElPTl9JVEVSQVRJT04sICdhbmltYXRpb25JdGVyYXRpb24nLCBBTklNQVRJT05fU1RBUlQsICdhbmltYXRpb25TdGFydCcsICdjYW5wbGF5JywgJ2NhblBsYXknLCAnY2FucGxheXRocm91Z2gnLCAnY2FuUGxheVRocm91Z2gnLCAnZHVyYXRpb25jaGFuZ2UnLCAnZHVyYXRpb25DaGFuZ2UnLCAnZW1wdGllZCcsICdlbXB0aWVkJywgJ2VuY3J5cHRlZCcsICdlbmNyeXB0ZWQnLCAnZW5kZWQnLCAnZW5kZWQnLCAnZXJyb3InLCAnZXJyb3InLCAnZ290cG9pbnRlcmNhcHR1cmUnLCAnZ290UG9pbnRlckNhcHR1cmUnLCAnbG9hZCcsICdsb2FkJywgJ2xvYWRlZGRhdGEnLCAnbG9hZGVkRGF0YScsICdsb2FkZWRtZXRhZGF0YScsICdsb2FkZWRNZXRhZGF0YScsICdsb2Fkc3RhcnQnLCAnbG9hZFN0YXJ0JywgJ2xvc3Rwb2ludGVyY2FwdHVyZScsICdsb3N0UG9pbnRlckNhcHR1cmUnLCAncGxheWluZycsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3Byb2dyZXNzJywgJ3NlZWtpbmcnLCAnc2Vla2luZycsICdzdGFsbGVkJywgJ3N0YWxsZWQnLCAnc3VzcGVuZCcsICdzdXNwZW5kJywgJ3RpbWV1cGRhdGUnLCAndGltZVVwZGF0ZScsIFRSQU5TSVRJT05fRU5ELCAndHJhbnNpdGlvbkVuZCcsICd3YWl0aW5nJywgJ3dhaXRpbmcnXTtcbi8qKlxuICogVHVybnNcbiAqIFsnYWJvcnQnLCAuLi5dXG4gKlxuICogaW50b1xuICpcbiAqIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzID0gbmV3IE1hcChbXG4gKiAgIFsnYWJvcnQnLCAnb25BYm9ydCddLFxuICogXSk7XG4gKlxuICogYW5kIHJlZ2lzdGVycyB0aGVtLlxuICovXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKGV2ZW50VHlwZXMsIHByaW9yaXR5KSB7XG4gIC8vIEFzIHRoZSBldmVudCB0eXBlcyBhcmUgaW4gcGFpcnMgb2YgdHdvLCB3ZSBuZWVkIHRvIGl0ZXJhdGVcbiAgLy8gdGhyb3VnaCBpbiB0d29zLiBUaGUgZXZlbnRzIGFyZSBpbiBwYWlycyBvZiB0d28gdG8gc2F2ZSBjb2RlXG4gIC8vIGFuZCBpbXByb3ZlIGluaXQgcGVyZiBvZiBwcm9jZXNzaW5nIHRoaXMgYXJyYXksIGFzIGl0IHdpbGxcbiAgLy8gcmVzdWx0IGluIGZhciBmZXdlciBvYmplY3QgYWxsb2NhdGlvbnMgYW5kIHByb3BlcnR5IGFjY2Vzc2VzXG4gIC8vIGlmIHdlIG9ubHkgdXNlIHRocmVlIGFycmF5cyB0byBwcm9jZXNzIGFsbCB0aGUgY2F0ZWdvcmllcyBvZlxuICAvLyBpbnN0ZWFkIG9mIHR1cGxlcy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudFR5cGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHRvcEV2ZW50ID0gZXZlbnRUeXBlc1tpXTtcbiAgICB2YXIgZXZlbnQgPSBldmVudFR5cGVzW2kgKyAxXTtcbiAgICB2YXIgY2FwaXRhbGl6ZWRFdmVudCA9IGV2ZW50WzBdLnRvVXBwZXJDYXNlKCkgKyBldmVudC5zbGljZSgxKTtcbiAgICB2YXIgcmVhY3ROYW1lID0gJ29uJyArIGNhcGl0YWxpemVkRXZlbnQ7XG4gICAgZXZlbnRQcmlvcml0aWVzLnNldCh0b3BFdmVudCwgcHJpb3JpdHkpO1xuICAgIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLnNldCh0b3BFdmVudCwgcmVhY3ROYW1lKTtcbiAgICByZWdpc3RlclR3b1BoYXNlRXZlbnQocmVhY3ROYW1lLCBbdG9wRXZlbnRdKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRFdmVudFByaW9yaXRpZXMoZXZlbnRUeXBlcywgcHJpb3JpdHkpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZXZlbnRQcmlvcml0aWVzLnNldChldmVudFR5cGVzW2ldLCBwcmlvcml0eSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRQcmlvcml0eUZvclBsdWdpblN5c3RlbShkb21FdmVudE5hbWUpIHtcbiAgdmFyIHByaW9yaXR5ID0gZXZlbnRQcmlvcml0aWVzLmdldChkb21FdmVudE5hbWUpOyAvLyBEZWZhdWx0IHRvIGEgQ29udGludW91c0V2ZW50LiBOb3RlOiB3ZSBtaWdodFxuICAvLyB3YW50IHRvIHdhcm4gaWYgd2UgY2FuJ3QgZGV0ZWN0IHRoZSBwcmlvcml0eVxuICAvLyBmb3IgdGhlIGV2ZW50LlxuXG4gIHJldHVybiBwcmlvcml0eSA9PT0gdW5kZWZpbmVkID8gQ29udGludW91c0V2ZW50IDogcHJpb3JpdHk7XG59XG5mdW5jdGlvbiByZWdpc3RlclNpbXBsZUV2ZW50cygpIHtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoZGlzY3JldGVFdmVudFBhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIERpc2NyZXRlRXZlbnQpO1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyh1c2VyQmxvY2tpbmdQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luLCBVc2VyQmxvY2tpbmdFdmVudCk7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKGNvbnRpbnVvdXNQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luLCBDb250aW51b3VzRXZlbnQpO1xuICBzZXRFdmVudFByaW9yaXRpZXMob3RoZXJEaXNjcmV0ZUV2ZW50cywgRGlzY3JldGVFdmVudCk7XG59XG5cbnZhciBTY2hlZHVsZXJfbm93ID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdztcblxue1xuICAvLyBQcm92aWRlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2Ugd2hlbiBwcm9kdWN0aW9uK3Byb2ZpbGluZyBidW5kbGUgb2YgZS5nLlxuICAvLyByZWFjdC1kb20gaXMgdXNlZCB3aXRoIHByb2R1Y3Rpb24gKG5vbi1wcm9maWxpbmcpIGJ1bmRsZSBvZlxuICAvLyBzY2hlZHVsZXIvdHJhY2luZ1xuICBpZiAoISh0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmICE9IG51bGwgJiYgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ICE9IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSXQgaXMgbm90IHN1cHBvcnRlZCB0byBydW4gdGhlIHByb2ZpbGluZyB2ZXJzaW9uIG9mIGEgcmVuZGVyZXIgKGZvciBleGFtcGxlLCBgcmVhY3QtZG9tL3Byb2ZpbGluZ2ApIHdpdGhvdXQgYWxzbyByZXBsYWNpbmcgdGhlIGBzY2hlZHVsZXIvdHJhY2luZ2AgbW9kdWxlIHdpdGggYHNjaGVkdWxlci90cmFjaW5nLXByb2ZpbGluZ2AuIFlvdXIgYnVuZGxlciBtaWdodCBoYXZlIGEgc2V0dGluZyBmb3IgYWxpYXNpbmcgYm90aCBtb2R1bGVzLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9wcm9maWxpbmdcIiApO1xuICAgIH1cbiAgfVxufVxuLy8gYXNjZW5kaW5nIG51bWJlcnMgc28gd2UgY2FuIGNvbXBhcmUgdGhlbSBsaWtlIG51bWJlcnMuIFRoZXkgc3RhcnQgYXQgOTAgdG9cbi8vIGF2b2lkIGNsYXNoaW5nIHdpdGggU2NoZWR1bGVyJ3MgcHJpb3JpdGllcy5cblxudmFyIEltbWVkaWF0ZVByaW9yaXR5ID0gOTk7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSA5ODtcbnZhciBOb3JtYWxQcmlvcml0eSA9IDk3O1xudmFyIExvd1ByaW9yaXR5ID0gOTY7XG52YXIgSWRsZVByaW9yaXR5ID0gOTU7IC8vIE5vUHJpb3JpdHkgaXMgdGhlIGFic2VuY2Ugb2YgcHJpb3JpdHkuIEFsc28gUmVhY3Qtb25seS5cblxudmFyIE5vUHJpb3JpdHkgPSA5MDtcbnZhciBpbml0aWFsVGltZU1zID0gU2NoZWR1bGVyX25vdygpOyAvLyBJZiB0aGUgaW5pdGlhbCB0aW1lc3RhbXAgaXMgcmVhc29uYWJseSBzbWFsbCwgdXNlIFNjaGVkdWxlcidzIGBub3dgIGRpcmVjdGx5LlxuXG52YXIgU3luY0xhbmVQcmlvcml0eSA9IDE1O1xudmFyIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5ID0gMTQ7XG52YXIgSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDEzO1xudmFyIElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHkgPSAxMjtcbnZhciBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSAxMTtcbnZhciBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHkgPSAxMDtcbnZhciBEZWZhdWx0SHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gOTtcbnZhciBEZWZhdWx0TGFuZVByaW9yaXR5ID0gODtcbnZhciBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHkgPSA3O1xudmFyIFRyYW5zaXRpb25Qcmlvcml0eSA9IDY7XG52YXIgUmV0cnlMYW5lUHJpb3JpdHkgPSA1O1xudmFyIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDQ7XG52YXIgSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDM7XG52YXIgSWRsZUxhbmVQcmlvcml0eSA9IDI7XG52YXIgT2Zmc2NyZWVuTGFuZVByaW9yaXR5ID0gMTtcbnZhciBOb0xhbmVQcmlvcml0eSA9IDA7XG52YXIgVG90YWxMYW5lcyA9IDMxO1xudmFyIE5vTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBOb0xhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIFN5bmNMYW5lID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgU3luY0JhdGNoZWRMYW5lID1cbi8qICAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICovXG40O1xudmFyIElucHV0RGlzY3JldGVMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjI0O1xudmFyIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICovXG4zMjtcbnZhciBJbnB1dENvbnRpbnVvdXNMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICovXG4xOTI7XG52YXIgRGVmYXVsdEh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAqL1xuMjU2O1xudmFyIERlZmF1bHRMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMzU4NDtcbnZhciBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAqL1xuNDA5NjtcbnZhciBUcmFuc2l0aW9uTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG40MTg2MTEyO1xudmFyIFJldHJ5TGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjYyOTE0NTYwO1xudmFyIFNvbWVSZXRyeUxhbmUgPVxuLyogICAgICAgICAgICAgICAgICAqL1xuMzM1NTQ0MzI7XG52YXIgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAqL1xuNjcxMDg4NjQ7XG52YXIgTm9uSWRsZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjEzNDIxNzcyNztcbnZhciBJZGxlSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICAgICovXG4xMzQyMTc3Mjg7XG52YXIgSWRsZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuODA1MzA2MzY4O1xudmFyIE9mZnNjcmVlbkxhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjEwNzM3NDE4MjQ7XG52YXIgTm9UaW1lc3RhbXAgPSAtMTtcbmZ1bmN0aW9uIHNldEN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkobmV3TGFuZVByaW9yaXR5KSB7XG59IC8vIFwiUmVnaXN0ZXJzXCIgdXNlZCB0byBcInJldHVyblwiIG11bHRpcGxlIHZhbHVlc1xuLy8gVXNlZCBieSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyBhbmQgZ2V0TmV4dExhbmVzOlxuXG52YXIgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuXG5mdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhsYW5lcykge1xuICBpZiAoKFN5bmNMYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTeW5jTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfVxuXG4gIGlmICgoU3luY0JhdGNoZWRMYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU3luY0JhdGNoZWRMYW5lO1xuICB9XG5cbiAgaWYgKChJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgaW5wdXREaXNjcmV0ZUxhbmVzID0gSW5wdXREaXNjcmV0ZUxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlucHV0RGlzY3JldGVMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gaW5wdXREaXNjcmV0ZUxhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgaW5wdXRDb250aW51b3VzTGFuZXMgPSBJbnB1dENvbnRpbnVvdXNMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpbnB1dENvbnRpbnVvdXNMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpbnB1dENvbnRpbnVvdXNMYW5lcztcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBEZWZhdWx0SHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIERlZmF1bHRIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGRlZmF1bHRMYW5lcyA9IERlZmF1bHRMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChkZWZhdWx0TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGRlZmF1bHRMYW5lcztcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eTtcbiAgICByZXR1cm4gVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgdHJhbnNpdGlvbkxhbmVzID0gVHJhbnNpdGlvbkxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKHRyYW5zaXRpb25MYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gVHJhbnNpdGlvblByaW9yaXR5O1xuICAgIHJldHVybiB0cmFuc2l0aW9uTGFuZXM7XG4gIH1cblxuICB2YXIgcmV0cnlMYW5lcyA9IFJldHJ5TGFuZXMgJiBsYW5lcztcblxuICBpZiAocmV0cnlMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gUmV0cnlMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIHJldHJ5TGFuZXM7XG4gIH1cblxuICBpZiAobGFuZXMgJiBTZWxlY3RpdmVIeWRyYXRpb25MYW5lKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgSWRsZUh5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJZGxlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpZGxlTGFuZXMgPSBJZGxlTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaWRsZUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJZGxlTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpZGxlTGFuZXM7XG4gIH1cblxuICBpZiAoKE9mZnNjcmVlbkxhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IE9mZnNjcmVlbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gT2Zmc2NyZWVuTGFuZTtcbiAgfVxuXG4gIHtcbiAgICBlcnJvcignU2hvdWxkIGhhdmUgZm91bmQgbWF0Y2hpbmcgbGFuZXMuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gIH0gLy8gVGhpcyBzaG91bGRuJ3QgYmUgcmVhY2hhYmxlLCBidXQgYXMgYSBmYWxsYmFjaywgcmV0dXJuIHRoZSBlbnRpcmUgYml0bWFzay5cblxuXG4gIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcbiAgcmV0dXJuIGxhbmVzO1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZXJQcmlvcml0eVRvTGFuZVByaW9yaXR5KHNjaGVkdWxlclByaW9yaXR5TGV2ZWwpIHtcbiAgc3dpdGNoIChzY2hlZHVsZXJQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBTeW5jTGFuZVByaW9yaXR5O1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgIHJldHVybiBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICAvLyBUT0RPOiBIYW5kbGUgTG93U2NoZWR1bGVyUHJpb3JpdHksIHNvbWVob3cuIE1heWJlIHRoZSBzYW1lIGxhbmUgYXMgaHlkcmF0aW9uLlxuICAgICAgcmV0dXJuIERlZmF1bHRMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlTGFuZVByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBOb0xhbmVQcmlvcml0eTtcbiAgfVxufVxuZnVuY3Rpb24gbGFuZVByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShsYW5lUHJpb3JpdHkpIHtcbiAgc3dpdGNoIChsYW5lUHJpb3JpdHkpIHtcbiAgICBjYXNlIFN5bmNMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJbW1lZGlhdGVQcmlvcml0eTtcblxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gVXNlckJsb2NraW5nUHJpb3JpdHk7XG5cbiAgICBjYXNlIERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBEZWZhdWx0TGFuZVByaW9yaXR5OlxuICAgIGNhc2UgVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5OlxuICAgIGNhc2UgVHJhbnNpdGlvblByaW9yaXR5OlxuICAgIGNhc2UgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgUmV0cnlMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gTm9ybWFsUHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJZGxlTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgT2Zmc2NyZWVuTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVQcmlvcml0eTtcblxuICAgIGNhc2UgTm9MYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gTm9Qcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIHVwZGF0ZSBwcmlvcml0eTogXCIgKyBsYW5lUHJpb3JpdHkgKyBcIi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuZnVuY3Rpb24gZ2V0TmV4dExhbmVzKHJvb3QsIHdpcExhbmVzKSB7XG4gIC8vIEVhcmx5IGJhaWxvdXQgaWYgdGhlcmUncyBubyBwZW5kaW5nIHdvcmsgbGVmdC5cbiAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuXG4gIGlmIChwZW5kaW5nTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBOb0xhbmVzO1xuICB9XG5cbiAgdmFyIG5leHRMYW5lcyA9IE5vTGFuZXM7XG4gIHZhciBuZXh0TGFuZVByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gIHZhciBleHBpcmVkTGFuZXMgPSByb290LmV4cGlyZWRMYW5lcztcbiAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcbiAgdmFyIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lczsgLy8gQ2hlY2sgaWYgYW55IHdvcmsgaGFzIGV4cGlyZWQuXG5cbiAgaWYgKGV4cGlyZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIG5leHRMYW5lcyA9IGV4cGlyZWRMYW5lcztcbiAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTeW5jTGFuZVByaW9yaXR5O1xuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCB3b3JrIG9uIGFueSBpZGxlIHdvcmsgdW50aWwgYWxsIHRoZSBub24taWRsZSB3b3JrIGhhcyBmaW5pc2hlZCxcbiAgICAvLyBldmVuIGlmIHRoZSB3b3JrIGlzIHN1c3BlbmRlZC5cbiAgICB2YXIgbm9uSWRsZVBlbmRpbmdMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIE5vbklkbGVMYW5lcztcblxuICAgIGlmIChub25JZGxlUGVuZGluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICB2YXIgbm9uSWRsZVVuYmxvY2tlZExhbmVzID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgaWYgKG5vbklkbGVVbmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhub25JZGxlVW5ibG9ja2VkTGFuZXMpO1xuICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbm9uSWRsZVBpbmdlZExhbmVzID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIHBpbmdlZExhbmVzO1xuXG4gICAgICAgIGlmIChub25JZGxlUGluZ2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhub25JZGxlUGluZ2VkTGFuZXMpO1xuICAgICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgb25seSByZW1haW5pbmcgd29yayBpcyBJZGxlLlxuICAgICAgdmFyIHVuYmxvY2tlZExhbmVzID0gcGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICBpZiAodW5ibG9ja2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXModW5ibG9ja2VkTGFuZXMpO1xuICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGluZ2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhwaW5nZWRMYW5lcyk7XG4gICAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG5leHRMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgcmVhY2hhYmxlIGlmIHdlJ3JlIHN1c3BlbmRlZFxuICAgIC8vIFRPRE86IENvbnNpZGVyIHdhcm5pbmcgaW4gdGhpcyBwYXRoIGlmIGEgZmFsbGJhY2sgdGltZXIgaXMgbm90IHNjaGVkdWxlZC5cbiAgICByZXR1cm4gTm9MYW5lcztcbiAgfSAvLyBJZiB0aGVyZSBhcmUgaGlnaGVyIHByaW9yaXR5IGxhbmVzLCB3ZSdsbCBpbmNsdWRlIHRoZW0gZXZlbiBpZiB0aGV5XG4gIC8vIGFyZSBzdXNwZW5kZWQuXG5cblxuICBuZXh0TGFuZXMgPSBwZW5kaW5nTGFuZXMgJiBnZXRFcXVhbE9ySGlnaGVyUHJpb3JpdHlMYW5lcyhuZXh0TGFuZXMpOyAvLyBJZiB3ZSdyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgYSByZW5kZXIsIHN3aXRjaGluZyBsYW5lcyB3aWxsIGludGVycnVwdFxuICAvLyBpdCBhbmQgd2UnbGwgbG9zZSBvdXIgcHJvZ3Jlc3MuIFdlIHNob3VsZCBvbmx5IGRvIHRoaXMgaWYgdGhlIG5ldyBsYW5lcyBhcmVcbiAgLy8gaGlnaGVyIHByaW9yaXR5LlxuXG4gIGlmICh3aXBMYW5lcyAhPT0gTm9MYW5lcyAmJiB3aXBMYW5lcyAhPT0gbmV4dExhbmVzICYmIC8vIElmIHdlIGFscmVhZHkgc3VzcGVuZGVkIHdpdGggYSBkZWxheSwgdGhlbiBpbnRlcnJ1cHRpbmcgaXMgZmluZS4gRG9uJ3RcbiAgLy8gYm90aGVyIHdhaXRpbmcgdW50aWwgdGhlIHJvb3QgaXMgY29tcGxldGUuXG4gICh3aXBMYW5lcyAmIHN1c3BlbmRlZExhbmVzKSA9PT0gTm9MYW5lcykge1xuICAgIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHdpcExhbmVzKTtcbiAgICB2YXIgd2lwTGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG5cbiAgICBpZiAobmV4dExhbmVQcmlvcml0eSA8PSB3aXBMYW5lUHJpb3JpdHkpIHtcbiAgICAgIHJldHVybiB3aXBMYW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBuZXh0TGFuZVByaW9yaXR5O1xuICAgIH1cbiAgfSAvLyBDaGVjayBmb3IgZW50YW5nbGVkIGxhbmVzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmF0Y2guXG4gIC8vXG4gIC8vIEEgbGFuZSBpcyBzYWlkIHRvIGJlIGVudGFuZ2xlZCB3aXRoIGFub3RoZXIgd2hlbiBpdCdzIG5vdCBhbGxvd2VkIHRvIHJlbmRlclxuICAvLyBpbiBhIGJhdGNoIHRoYXQgZG9lcyBub3QgYWxzbyBpbmNsdWRlIHRoZSBvdGhlciBsYW5lLiBUeXBpY2FsbHkgd2UgZG8gdGhpc1xuICAvLyB3aGVuIG11bHRpcGxlIHVwZGF0ZXMgaGF2ZSB0aGUgc2FtZSBzb3VyY2UsIGFuZCB3ZSBvbmx5IHdhbnQgdG8gcmVzcG9uZCB0b1xuICAvLyB0aGUgbW9zdCByZWNlbnQgZXZlbnQgZnJvbSB0aGF0IHNvdXJjZS5cbiAgLy9cbiAgLy8gTm90ZSB0aGF0IHdlIGFwcGx5IGVudGFuZ2xlbWVudHMgKmFmdGVyKiBjaGVja2luZyBmb3IgcGFydGlhbCB3b3JrIGFib3ZlLlxuICAvLyBUaGlzIG1lYW5zIHRoYXQgaWYgYSBsYW5lIGlzIGVudGFuZ2xlZCBkdXJpbmcgYW4gaW50ZXJsZWF2ZWQgZXZlbnQgd2hpbGVcbiAgLy8gaXQncyBhbHJlYWR5IHJlbmRlcmluZywgd2Ugd29uJ3QgaW50ZXJydXB0IGl0LiBUaGlzIGlzIGludGVudGlvbmFsLCBzaW5jZVxuICAvLyBlbnRhbmdsZW1lbnQgaXMgdXN1YWxseSBcImJlc3QgZWZmb3J0XCI6IHdlJ2xsIHRyeSBvdXIgYmVzdCB0byByZW5kZXIgdGhlXG4gIC8vIGxhbmVzIGluIHRoZSBzYW1lIGJhdGNoLCBidXQgaXQncyBub3Qgd29ydGggdGhyb3dpbmcgb3V0IHBhcnRpYWxseVxuICAvLyBjb21wbGV0ZWQgd29yayBpbiBvcmRlciB0byBkbyBpdC5cbiAgLy9cbiAgLy8gRm9yIHRob3NlIGV4Y2VwdGlvbnMgd2hlcmUgZW50YW5nbGVtZW50IGlzIHNlbWFudGljYWxseSBpbXBvcnRhbnQsIGxpa2VcbiAgLy8gdXNlTXV0YWJsZVNvdXJjZSwgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHBhcnRpYWwgd29yayBhdCB0aGVcbiAgLy8gdGltZSB3ZSBhcHBseSB0aGUgZW50YW5nbGVtZW50LlxuXG5cbiAgdmFyIGVudGFuZ2xlZExhbmVzID0gcm9vdC5lbnRhbmdsZWRMYW5lcztcblxuICBpZiAoZW50YW5nbGVkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgICB2YXIgbGFuZXMgPSBuZXh0TGFuZXMgJiBlbnRhbmdsZWRMYW5lcztcblxuICAgIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgbmV4dExhbmVzIHw9IGVudGFuZ2xlbWVudHNbaW5kZXhdO1xuICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRMYW5lcztcbn1cbmZ1bmN0aW9uIGdldE1vc3RSZWNlbnRFdmVudFRpbWUocm9vdCwgbGFuZXMpIHtcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBtb3N0UmVjZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICB2YXIgZXZlbnRUaW1lID0gZXZlbnRUaW1lc1tpbmRleF07XG5cbiAgICBpZiAoZXZlbnRUaW1lID4gbW9zdFJlY2VudEV2ZW50VGltZSkge1xuICAgICAgbW9zdFJlY2VudEV2ZW50VGltZSA9IGV2ZW50VGltZTtcbiAgICB9XG5cbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxuXG4gIHJldHVybiBtb3N0UmVjZW50RXZlbnRUaW1lO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpIHtcbiAgLy8gVE9ETzogRXhwaXJhdGlvbiBoZXVyaXN0aWMgaXMgY29uc3RhbnQgcGVyIGxhbmUsIHNvIGNvdWxkIHVzZSBhIG1hcC5cbiAgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobGFuZSk7XG4gIHZhciBwcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuXG4gIGlmIChwcmlvcml0eSA+PSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHkpIHtcbiAgICAvLyBVc2VyIGludGVyYWN0aW9ucyBzaG91bGQgZXhwaXJlIHNsaWdodGx5IG1vcmUgcXVpY2tseS5cbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgaXMgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbnN0YW50IGFzIGluIFNjaGVkdWxlci5qcy4gV2hlblxuICAgIC8vIHdlIG1hZGUgaXQgbGFyZ2VyLCBhIHByb2R1Y3QgbWV0cmljIGluIHd3dyByZWdyZXNzZWQsIHN1Z2dlc3RpbmcgdGhlcmUnc1xuICAgIC8vIGEgdXNlciBpbnRlcmFjdGlvbiB0aGF0J3MgYmVpbmcgc3RhcnZlZCBieSBhIHNlcmllcyBvZiBzeW5jaHJvbm91c1xuICAgIC8vIHVwZGF0ZXMuIElmIHRoYXQgdGhlb3J5IGlzIGNvcnJlY3QsIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZVxuICAgIC8vIHN0YXJ2YXRpb24uIEhvd2V2ZXIsIHRoaXMgc2NlbmFyaW8gc3VwcG9ydHMgdGhlIGlkZWEgdGhhdCBleHBpcmF0aW9uXG4gICAgLy8gdGltZXMgYXJlIGFuIGltcG9ydGFudCBzYWZlZ3VhcmQgd2hlbiBzdGFydmF0aW9uIGRvZXMgaGFwcGVuLlxuICAgIC8vXG4gICAgLy8gQWxzbyBub3RlIHRoYXQsIGluIHRoZSBjYXNlIG9mIHVzZXIgaW5wdXQgc3BlY2lmaWNhbGx5LCB0aGlzIHdpbGwgc29vbiBub1xuICAgIC8vIGxvbmdlciBiZSBhbiBpc3N1ZSBiZWNhdXNlIHdlIHBsYW4gdG8gbWFrZSB1c2VyIGlucHV0IHN5bmNocm9ub3VzIGJ5XG4gICAgLy8gZGVmYXVsdCAodW50aWwgeW91IGVudGVyIGBzdGFydFRyYW5zaXRpb25gLCBvZiBjb3Vyc2UuKVxuICAgIC8vXG4gICAgLy8gSWYgd2VyZW4ndCBwbGFubmluZyB0byBtYWtlIHRoZXNlIHVwZGF0ZXMgc3luY2hyb25vdXMgc29vbiBhbnl3YXksIElcbiAgICAvLyB3b3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgbnVtYmVyIGEgY29uZmlndXJhYmxlIHBhcmFtZXRlci5cbiAgICByZXR1cm4gY3VycmVudFRpbWUgKyAyNTA7XG4gIH0gZWxzZSBpZiAocHJpb3JpdHkgPj0gVHJhbnNpdGlvblByaW9yaXR5KSB7XG4gICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgNTAwMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBBbnl0aGluZyBpZGxlIHByaW9yaXR5IG9yIGxvd2VyIHNob3VsZCBuZXZlciBleHBpcmUuXG4gICAgcmV0dXJuIE5vVGltZXN0YW1wO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGFydmVkTGFuZXNBc0V4cGlyZWQocm9vdCwgY3VycmVudFRpbWUpIHtcbiAgLy8gVE9ETzogVGhpcyBnZXRzIGNhbGxlZCBldmVyeSB0aW1lIHdlIHlpZWxkLiBXZSBjYW4gb3B0aW1pemUgYnkgc3RvcmluZ1xuICAvLyB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lIG9uIHRoZSByb290LiBUaGVuIHVzZSB0aGF0IHRvIHF1aWNrbHkgYmFpbCBvdXRcbiAgLy8gb2YgdGhpcyBmdW5jdGlvbi5cbiAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzO1xuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7IC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgcGVuZGluZyBsYW5lcyBhbmQgY2hlY2sgaWYgd2UndmUgcmVhY2hlZCB0aGVpclxuICAvLyBleHBpcmF0aW9uIHRpbWUuIElmIHNvLCB3ZSdsbCBhc3N1bWUgdGhlIHVwZGF0ZSBpcyBiZWluZyBzdGFydmVkIGFuZCBtYXJrXG4gIC8vIGl0IGFzIGV4cGlyZWQgdG8gZm9yY2UgaXQgdG8gZmluaXNoLlxuXG4gIHZhciBsYW5lcyA9IHBlbmRpbmdMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIHZhciBleHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lc1tpbmRleF07XG5cbiAgICBpZiAoZXhwaXJhdGlvblRpbWUgPT09IE5vVGltZXN0YW1wKSB7XG4gICAgICAvLyBGb3VuZCBhIHBlbmRpbmcgbGFuZSB3aXRoIG5vIGV4cGlyYXRpb24gdGltZS4gSWYgaXQncyBub3Qgc3VzcGVuZGVkLCBvclxuICAgICAgLy8gaWYgaXQncyBwaW5nZWQsIGFzc3VtZSBpdCdzIENQVS1ib3VuZC4gQ29tcHV0ZSBhIG5ldyBleHBpcmF0aW9uIHRpbWVcbiAgICAgIC8vIHVzaW5nIHRoZSBjdXJyZW50IHRpbWUuXG4gICAgICBpZiAoKGxhbmUgJiBzdXNwZW5kZWRMYW5lcykgPT09IE5vTGFuZXMgfHwgKGxhbmUgJiBwaW5nZWRMYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgLy8gQXNzdW1lcyB0aW1lc3RhbXBzIGFyZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuXG4gICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWUpIHtcbiAgICAgIC8vIFRoaXMgbGFuZSBleHBpcmVkXG4gICAgICByb290LmV4cGlyZWRMYW5lcyB8PSBsYW5lO1xuICAgIH1cblxuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59IC8vIFRoaXMgcmV0dXJucyB0aGUgaGlnaGVzdCBwcmlvcml0eSBwZW5kaW5nIGxhbmVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5XG5mdW5jdGlvbiBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290KSB7XG4gIHZhciBldmVyeXRoaW5nQnV0T2Zmc2NyZWVuID0gcm9vdC5wZW5kaW5nTGFuZXMgJiB+T2Zmc2NyZWVuTGFuZTtcblxuICBpZiAoZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybiBldmVyeXRoaW5nQnV0T2Zmc2NyZWVuO1xuICB9XG5cbiAgaWYgKGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gJiBPZmZzY3JlZW5MYW5lKSB7XG4gICAgcmV0dXJuIE9mZnNjcmVlbkxhbmU7XG4gIH1cblxuICByZXR1cm4gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIHJldHVybk5leHRMYW5lc1ByaW9yaXR5KCkge1xuICByZXR1cm4gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG59XG5mdW5jdGlvbiBpbmNsdWRlc05vbklkbGVXb3JrKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBOb25JZGxlTGFuZXMpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNPbmx5UmV0cmllcyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgUmV0cnlMYW5lcykgPT09IGxhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIFRyYW5zaXRpb25MYW5lcykgPT09IGxhbmVzO1xufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBhIHB1cmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgbGFuZSBmb3IgZ2l2ZW4gaW5wdXRzLlxuXG5mdW5jdGlvbiBmaW5kVXBkYXRlTGFuZShsYW5lUHJpb3JpdHksIHdpcExhbmVzKSB7XG4gIHN3aXRjaCAobGFuZVByaW9yaXR5KSB7XG4gICAgY2FzZSBOb0xhbmVQcmlvcml0eTpcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTeW5jTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNMYW5lO1xuXG4gICAgY2FzZSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBTeW5jQmF0Y2hlZExhbmU7XG5cbiAgICBjYXNlIElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKElucHV0RGlzY3JldGVMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAvLyBTaGlmdCB0byB0aGUgbmV4dCBwcmlvcml0eSBsZXZlbFxuICAgICAgICAgIHJldHVybiBmaW5kVXBkYXRlTGFuZShJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHksIHdpcExhbmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfbGFuZTtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5OlxuICAgICAge1xuICAgICAgICB2YXIgX2xhbmUyID0gcGlja0FyYml0cmFyeUxhbmUoSW5wdXRDb250aW51b3VzTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgIGlmIChfbGFuZTIgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIFNoaWZ0IHRvIHRoZSBuZXh0IHByaW9yaXR5IGxldmVsXG4gICAgICAgICAgcmV0dXJuIGZpbmRVcGRhdGVMYW5lKERlZmF1bHRMYW5lUHJpb3JpdHksIHdpcExhbmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfbGFuZTI7XG4gICAgICB9XG5cbiAgICBjYXNlIERlZmF1bHRMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZTMgPSBwaWNrQXJiaXRyYXJ5TGFuZShEZWZhdWx0TGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgIGlmIChfbGFuZTMgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIElmIGFsbCB0aGUgZGVmYXVsdCBsYW5lcyBhcmUgYWxyZWFkeSBiZWluZyB3b3JrZWQgb24sIGxvb2sgZm9yIGFcbiAgICAgICAgICAvLyBsYW5lIGluIHRoZSB0cmFuc2l0aW9uIHJhbmdlLlxuICAgICAgICAgIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgICBpZiAoX2xhbmUzID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAgIC8vIEFsbCB0aGUgdHJhbnNpdGlvbiBsYW5lcyBhcmUgdGFrZW4sIHRvby4gVGhpcyBzaG91bGQgYmUgdmVyeVxuICAgICAgICAgICAgLy8gcmFyZSwgYnV0IGFzIGEgbGFzdCByZXNvcnQsIHBpY2sgYSBkZWZhdWx0IGxhbmUuIFRoaXMgd2lsbCBoYXZlXG4gICAgICAgICAgICAvLyB0aGUgZWZmZWN0IG9mIGludGVycnVwdGluZyB0aGUgY3VycmVudCB3b3JrLWluLXByb2dyZXNzIHJlbmRlci5cbiAgICAgICAgICAgIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKERlZmF1bHRMYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lMztcbiAgICAgIH1cblxuICAgIGNhc2UgVHJhbnNpdGlvblByaW9yaXR5OiAvLyBTaG91bGQgYmUgaGFuZGxlZCBieSBmaW5kVHJhbnNpdGlvbkxhbmUgaW5zdGVhZFxuXG4gICAgY2FzZSBSZXRyeUxhbmVQcmlvcml0eTpcbiAgICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IGZpbmRSZXRyeUxhbmUgaW5zdGVhZFxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIElkbGVMYW5lUHJpb3JpdHk6XG4gICAgICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKElkbGVMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAgICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKElkbGVMYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYW5lO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgdXBkYXRlIHByaW9yaXR5OiBcIiArIGxhbmVQcmlvcml0eSArIFwiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgfVxuICB9XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIHB1cmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgbGFuZSBmb3IgZ2l2ZW4gaW5wdXRzLlxuXG5mdW5jdGlvbiBmaW5kVHJhbnNpdGlvbkxhbmUod2lwTGFuZXMsIHBlbmRpbmdMYW5lcykge1xuICAvLyBGaXJzdCBsb29rIGZvciBsYW5lcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHVuY2xhaW1lZCwgaS5lLiBoYXZlIG5vXG4gIC8vIHBlbmRpbmcgd29yay5cbiAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMgJiB+cGVuZGluZ0xhbmVzKTtcblxuICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgLy8gSWYgYWxsIGxhbmVzIGhhdmUgcGVuZGluZyB3b3JrLCBsb29rIGZvciBhIGxhbmUgdGhhdCBpc24ndCBjdXJyZW50bHlcbiAgICAvLyBiZWluZyB3b3JrZWQgb24uXG4gICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAvLyBJZiBldmVyeXRoaW5nIGlzIGJlaW5nIHdvcmtlZCBvbiwgcGljayBhbnkgbGFuZS4gVGhpcyBoYXMgdGhlXG4gICAgICAvLyBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHdvcmstaW4tcHJvZ3Jlc3MuXG4gICAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRSZXRyeUxhbmUod2lwTGFuZXMpIHtcbiAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgYGZpbmRVcGRhdGVMYW5lYCBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIFN1c3BlbnNlXG4gIC8vIFwicmV0cmllc1wiIFx1MjAxNCBhIHNwZWNpYWwgdXBkYXRlIHRoYXQgYXR0ZW1wdHMgdG8gZmxpcCBhIFN1c3BlbnNlIGJvdW5kYXJ5XG4gIC8vIGZyb20gaXRzIHBsYWNlaG9sZGVyIHN0YXRlIHRvIGl0cyBwcmltYXJ5L3Jlc29sdmVkIHN0YXRlLlxuICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFJldHJ5TGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoUmV0cnlMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn1cblxuZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShsYW5lcykge1xuICByZXR1cm4gbGFuZXMgJiAtbGFuZXM7XG59XG5cbmZ1bmN0aW9uIGdldExvd2VzdFByaW9yaXR5TGFuZShsYW5lcykge1xuICAvLyBUaGlzIGZpbmRzIHRoZSBtb3N0IHNpZ25pZmljYW50IG5vbi16ZXJvIGJpdC5cbiAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihsYW5lcyk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBOb0xhbmVzIDogMSA8PCBpbmRleDtcbn1cblxuZnVuY3Rpb24gZ2V0RXF1YWxPckhpZ2hlclByaW9yaXR5TGFuZXMobGFuZXMpIHtcbiAgcmV0dXJuIChnZXRMb3dlc3RQcmlvcml0eUxhbmUobGFuZXMpIDw8IDEpIC0gMTtcbn1cblxuZnVuY3Rpb24gcGlja0FyYml0cmFyeUxhbmUobGFuZXMpIHtcbiAgLy8gVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGdldHMgaW5saW5lZC4gT25seSBleGlzdHMgc28gdG8gY29tbXVuaWNhdGUgdGhhdCBpdFxuICAvLyBkb2Vzbid0IG1hdHRlciB3aGljaCBiaXQgaXMgc2VsZWN0ZWQ7IHlvdSBjYW4gcGljayBhbnkgYml0IHdpdGhvdXRcbiAgLy8gYWZmZWN0aW5nIHRoZSBhbGdvcml0aG1zIHdoZXJlIGl0cyB1c2VkLiBIZXJlIEknbSB1c2luZ1xuICAvLyBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lIGJlY2F1c2UgaXQgcmVxdWlyZXMgdGhlIGZld2VzdCBvcGVyYXRpb25zLlxuICByZXR1cm4gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShsYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpIHtcbiAgcmV0dXJuIDMxIC0gY2x6MzIobGFuZXMpO1xufVxuXG5mdW5jdGlvbiBsYW5lVG9JbmRleChsYW5lKSB7XG4gIHJldHVybiBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmUpO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlc1NvbWVMYW5lKGEsIGIpIHtcbiAgcmV0dXJuIChhICYgYikgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpc1N1YnNldE9mTGFuZXMoc2V0LCBzdWJzZXQpIHtcbiAgcmV0dXJuIChzZXQgJiBzdWJzZXQpID09PSBzdWJzZXQ7XG59XG5mdW5jdGlvbiBtZXJnZUxhbmVzKGEsIGIpIHtcbiAgcmV0dXJuIGEgfCBiO1xufVxuZnVuY3Rpb24gcmVtb3ZlTGFuZXMoc2V0LCBzdWJzZXQpIHtcbiAgcmV0dXJuIHNldCAmIH5zdWJzZXQ7XG59IC8vIFNlZW1zIHJlZHVuZGFudCwgYnV0IGl0IGNoYW5nZXMgdGhlIHR5cGUgZnJvbSBhIHNpbmdsZSBsYW5lICh1c2VkIGZvclxuLy8gdXBkYXRlcykgdG8gYSBncm91cCBvZiBsYW5lcyAodXNlZCBmb3IgZmx1c2hpbmcgd29yaykuXG5cbmZ1bmN0aW9uIGxhbmVUb0xhbmVzKGxhbmUpIHtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBoaWdoZXJQcmlvcml0eUxhbmUoYSwgYikge1xuICAvLyBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGJpdCByYW5nZXMgZGVjcmVhc2UgaW4gcHJpb3JpdHkgYXMgeW91IGdvIGxlZnQuXG4gIHJldHVybiBhICE9PSBOb0xhbmUgJiYgYSA8IGIgPyBhIDogYjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxhbmVNYXAoaW5pdGlhbCkge1xuICAvLyBJbnRlbnRpb25hbGx5IHB1c2hpbmcgb25lIGJ5IG9uZS5cbiAgLy8gaHR0cHM6Ly92OC5kZXYvYmxvZy9lbGVtZW50cy1raW5kcyNhdm9pZC1jcmVhdGluZy1ob2xlc1xuICB2YXIgbGFuZU1hcCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgVG90YWxMYW5lczsgaSsrKSB7XG4gICAgbGFuZU1hcC5wdXNoKGluaXRpYWwpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmVNYXA7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgdXBkYXRlTGFuZSwgZXZlbnRUaW1lKSB7XG4gIHJvb3QucGVuZGluZ0xhbmVzIHw9IHVwZGF0ZUxhbmU7IC8vIFRPRE86IFRoZW9yZXRpY2FsbHksIGFueSB1cGRhdGUgdG8gYW55IGxhbmUgY2FuIHVuYmxvY2sgYW55IG90aGVyIGxhbmUuIEJ1dFxuICAvLyBpdCdzIG5vdCBwcmFjdGljYWwgdG8gdHJ5IGV2ZXJ5IHNpbmdsZSBwb3NzaWJsZSBjb21iaW5hdGlvbi4gV2UgbmVlZCBhXG4gIC8vIGhldXJpc3RpYyB0byBkZWNpZGUgd2hpY2ggbGFuZXMgdG8gYXR0ZW1wdCB0byByZW5kZXIsIGFuZCBpbiB3aGljaCBiYXRjaGVzLlxuICAvLyBGb3Igbm93LCB3ZSB1c2UgdGhlIHNhbWUgaGV1cmlzdGljIGFzIGluIHRoZSBvbGQgRXhwaXJhdGlvblRpbWVzIG1vZGVsOlxuICAvLyByZXRyeSBhbnkgbGFuZSBhdCBlcXVhbCBvciBsb3dlciBwcmlvcml0eSwgYnV0IGRvbid0IHRyeSB1cGRhdGVzIGF0IGhpZ2hlclxuICAvLyBwcmlvcml0eSB3aXRob3V0IGFsc28gaW5jbHVkaW5nIHRoZSBsb3dlciBwcmlvcml0eSB1cGRhdGVzLiBUaGlzIHdvcmtzIHdlbGxcbiAgLy8gd2hlbiBjb25zaWRlcmluZyB1cGRhdGVzIGFjcm9zcyBkaWZmZXJlbnQgcHJpb3JpdHkgbGV2ZWxzLCBidXQgaXNuJ3RcbiAgLy8gc3VmZmljaWVudCBmb3IgdXBkYXRlcyB3aXRoaW4gdGhlIHNhbWUgcHJpb3JpdHksIHNpbmNlIHdlIHdhbnQgdG8gdHJlYXRcbiAgLy8gdGhvc2UgdXBkYXRlcyBhcyBwYXJhbGxlbC5cbiAgLy8gVW5zdXNwZW5kIGFueSB1cGRhdGUgYXQgZXF1YWwgb3IgbG93ZXIgcHJpb3JpdHkuXG5cbiAgdmFyIGhpZ2hlclByaW9yaXR5TGFuZXMgPSB1cGRhdGVMYW5lIC0gMTsgLy8gVHVybnMgMGIxMDAwIGludG8gMGIwMTExXG5cbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyAmPSBoaWdoZXJQcmlvcml0eUxhbmVzO1xuICByb290LnBpbmdlZExhbmVzICY9IGhpZ2hlclByaW9yaXR5TGFuZXM7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgaW5kZXggPSBsYW5lVG9JbmRleCh1cGRhdGVMYW5lKTsgLy8gV2UgY2FuIGFsd2F5cyBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdGltZXN0YW1wIGJlY2F1c2Ugd2UgcHJlZmVyIHRoZSBtb3N0XG4gIC8vIHJlY2VudCBldmVudCwgYW5kIHdlIGFzc3VtZSB0aW1lIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy5cblxuICBldmVudFRpbWVzW2luZGV4XSA9IGV2ZW50VGltZTtcbn1cbmZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIHN1c3BlbmRlZExhbmVzKSB7XG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgfD0gc3VzcGVuZGVkTGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gfnN1c3BlbmRlZExhbmVzOyAvLyBUaGUgc3VzcGVuZGVkIGxhbmVzIGFyZSBubyBsb25nZXIgQ1BVLWJvdW5kLiBDbGVhciB0aGVpciBleHBpcmF0aW9uIHRpbWVzLlxuXG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lcztcbiAgdmFyIGxhbmVzID0gc3VzcGVuZGVkTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSb290UGluZ2VkKHJvb3QsIHBpbmdlZExhbmVzLCBldmVudFRpbWUpIHtcbiAgcm9vdC5waW5nZWRMYW5lcyB8PSByb290LnN1c3BlbmRlZExhbmVzICYgcGluZ2VkTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrRGlzY3JldGVVcGRhdGVzRXhwaXJlZChyb290KSB7XG4gIHJvb3QuZXhwaXJlZExhbmVzIHw9IElucHV0RGlzY3JldGVMYW5lcyAmIHJvb3QucGVuZGluZ0xhbmVzO1xufVxuZnVuY3Rpb24gaGFzRGlzY3JldGVMYW5lcyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgSW5wdXREaXNjcmV0ZUxhbmVzKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgdXBkYXRlTGFuZSkge1xuICByb290Lm11dGFibGVSZWFkTGFuZXMgfD0gdXBkYXRlTGFuZSAmIHJvb3QucGVuZGluZ0xhbmVzO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RGaW5pc2hlZChyb290LCByZW1haW5pbmdMYW5lcykge1xuICB2YXIgbm9Mb25nZXJQZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcyAmIH5yZW1haW5pbmdMYW5lcztcbiAgcm9vdC5wZW5kaW5nTGFuZXMgPSByZW1haW5pbmdMYW5lczsgLy8gTGV0J3MgdHJ5IGV2ZXJ5dGhpbmcgYWdhaW5cblxuICByb290LnN1c3BlbmRlZExhbmVzID0gMDtcbiAgcm9vdC5waW5nZWRMYW5lcyA9IDA7XG4gIHJvb3QuZXhwaXJlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICByb290Lm11dGFibGVSZWFkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3QuZW50YW5nbGVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzOyAvLyBDbGVhciB0aGUgbGFuZXMgdGhhdCBubyBsb25nZXIgaGF2ZSBwZW5kaW5nIHdvcmtcblxuICB2YXIgbGFuZXMgPSBub0xvbmdlclBlbmRpbmdMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdID0gTm9MYW5lcztcbiAgICBldmVudFRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgZW50YW5nbGVkTGFuZXMpIHtcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBlbnRhbmdsZWRMYW5lcztcbiAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIHZhciBsYW5lcyA9IGVudGFuZ2xlZExhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZW50YW5nbGVtZW50c1tpbmRleF0gfD0gZW50YW5nbGVkTGFuZXM7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbnZhciBjbHozMiA9IE1hdGguY2x6MzIgPyBNYXRoLmNsejMyIDogY2x6MzJGYWxsYmFjazsgLy8gQ291bnQgbGVhZGluZyB6ZXJvcy4gT25seSB1c2VkIG9uIGxhbmVzLCBzbyBhc3N1bWUgaW5wdXQgaXMgYW4gaW50ZWdlci5cbi8vIEJhc2VkIG9uOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9jbHozMlxuXG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG5cbmZ1bmN0aW9uIGNsejMyRmFsbGJhY2sobGFuZXMpIHtcbiAgaWYgKGxhbmVzID09PSAwKSB7XG4gICAgcmV0dXJuIDMyO1xuICB9XG5cbiAgcmV0dXJuIDMxIC0gKGxvZyhsYW5lcykgLyBMTjIgfCAwKSB8IDA7XG59XG5cbi8vIEludGVudGlvbmFsbHkgbm90IG5hbWVkIGltcG9ydHMgYmVjYXVzZSBSb2xsdXAgd291bGQgdXNlIGR5bmFtaWMgZGlzcGF0Y2ggZm9yXG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkkMSA9IFNjaGVkdWxlci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxcbiAgICBydW5XaXRoUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5OyAvLyBUT0RPOiBjYW4gd2Ugc3RvcCBleHBvcnRpbmcgdGhlc2U/XG5cbnZhciBfZW5hYmxlZCA9IHRydWU7IC8vIFRoaXMgaXMgZXhwb3J0ZWQgaW4gRkIgYnVpbGRzIGZvciB1c2UgYnkgbGVnYWN5IEZCIGxheWVyIGluZnJhLlxuLy8gV2UnZCBsaWtlIHRvIHJlbW92ZSB0aGlzIGJ1dCBpdCdzIG5vdCBjbGVhciBpZiB0aGlzIGlzIHNhZmUuXG5cbmZ1bmN0aW9uIHNldEVuYWJsZWQoZW5hYmxlZCkge1xuICBfZW5hYmxlZCA9ICEhZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGlzRW5hYmxlZCgpIHtcbiAgcmV0dXJuIF9lbmFibGVkO1xufVxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXJXaXRoUHJpb3JpdHkodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgdmFyIGV2ZW50UHJpb3JpdHkgPSBnZXRFdmVudFByaW9yaXR5Rm9yUGx1Z2luU3lzdGVtKGRvbUV2ZW50TmFtZSk7XG4gIHZhciBsaXN0ZW5lcldyYXBwZXI7XG5cbiAgc3dpdGNoIChldmVudFByaW9yaXR5KSB7XG4gICAgY2FzZSBEaXNjcmV0ZUV2ZW50OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ0V2ZW50OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hVc2VyQmxvY2tpbmdVcGRhdGU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGludW91c0V2ZW50OlxuICAgIGRlZmF1bHQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaEV2ZW50O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJXcmFwcGVyLmJpbmQobnVsbCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaERpc2NyZXRlRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHtcbiAgICBmbHVzaERpc2NyZXRlVXBkYXRlc0lmTmVlZGVkKG5hdGl2ZUV2ZW50LnRpbWVTdGFtcCk7XG4gIH1cblxuICBkaXNjcmV0ZVVwZGF0ZXMoZGlzcGF0Y2hFdmVudCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hVc2VyQmxvY2tpbmdVcGRhdGUoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHtcbiAgICBydW5XaXRoUHJpb3JpdHkoVXNlckJsb2NraW5nUHJpb3JpdHkkMSwgZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmICghX2VuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgYWxsb3dSZXBsYXkgPSB0cnVlO1xuXG4gIHtcbiAgICAvLyBUT0RPOiByZXBsYXlpbmcgY2FwdHVyZSBwaGFzZSBldmVudHMgaXMgY3VycmVudGx5IGJyb2tlblxuICAgIC8vIGJlY2F1c2Ugd2UgdXNlZCB0byBkbyBpdCBkdXJpbmcgdG9wLWxldmVsIG5hdGl2ZSBidWJibGUgaGFuZGxlcnNcbiAgICAvLyBidXQgbm93IHdlIHVzZSBkaWZmZXJlbnQgYnViYmxlIGFuZCBjYXB0dXJlIGhhbmRsZXJzLlxuICAgIC8vIEluIGVhZ2VyIG1vZGUsIHdlIGF0dGFjaCBjYXB0dXJlIGxpc3RlbmVycyBlYXJseSwgc28gd2UgbmVlZFxuICAgIC8vIHRvIGZpbHRlciB0aGVtIG91dCB1bnRpbCB3ZSBmaXggdGhlIGxvZ2ljIHRvIGhhbmRsZSB0aGVtIGNvcnJlY3RseS5cbiAgICAvLyBUaGlzIGNvdWxkJ3ZlIGJlZW4gb3V0c2lkZSB0aGUgZmxhZyBidXQgSSBwdXQgaXQgaW5zaWRlIHRvIHJlZHVjZSByaXNrLlxuICAgIGFsbG93UmVwbGF5ID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19DQVBUVVJFX1BIQVNFKSA9PT0gMDtcbiAgfVxuXG4gIGlmIChhbGxvd1JlcGxheSAmJiBoYXNRdWV1ZWREaXNjcmV0ZUV2ZW50cygpICYmIGlzUmVwbGF5YWJsZURpc2NyZXRlRXZlbnQoZG9tRXZlbnROYW1lKSkge1xuICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIHF1ZXVlIG9mIGRpc2NyZXRlIGV2ZW50cywgYW5kIHRoaXMgaXMgYW5vdGhlciBkaXNjcmV0ZVxuICAgIC8vIGV2ZW50LCB0aGVuIHdlIGNhbid0IGRpc3BhdGNoIGl0IHJlZ2FyZGxlc3Mgb2YgaXRzIHRhcmdldCwgc2luY2UgdGhleVxuICAgIC8vIG5lZWQgdG8gZGlzcGF0Y2ggaW4gb3JkZXIuXG4gICAgcXVldWVEaXNjcmV0ZUV2ZW50KG51bGwsIC8vIEZsYWdzIHRoYXQgd2UncmUgbm90IGFjdHVhbGx5IGJsb2NrZWQgb24gYW55dGhpbmcgYXMgZmFyIGFzIHdlIGtub3cuXG4gICAgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgYmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuXG4gIGlmIChibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAvLyBXZSBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZCB0aGlzIGV2ZW50LlxuICAgIGlmIChhbGxvd1JlcGxheSkge1xuICAgICAgY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYWxsb3dSZXBsYXkpIHtcbiAgICBpZiAoaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUpKSB7XG4gICAgICAvLyBUaGlzIHRoaXMgdG8gYmUgcmVwbGF5ZWQgbGF0ZXIgb25jZSB0aGUgdGFyZ2V0IGlzIGF2YWlsYWJsZS5cbiAgICAgIHF1ZXVlRGlzY3JldGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBuZWVkIHRvIGNsZWFyIG9ubHkgaWYgd2UgZGlkbid0IHF1ZXVlIGJlY2F1c2VcbiAgICAvLyBxdWV1ZWluZyBpcyBhY2N1bW11bGF0aXZlLlxuXG5cbiAgICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IC8vIFRoaXMgaXMgbm90IHJlcGxheWFibGUgc28gd2UnbGwgaW52b2tlIGl0IGJ1dCB3aXRob3V0IGEgdGFyZ2V0LFxuICAvLyBpbiBjYXNlIHRoZSBldmVudCBzeXN0ZW0gbmVlZHMgdG8gdHJhY2UgaXQuXG5cblxuICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgbnVsbCwgdGFyZ2V0Q29udGFpbmVyKTtcbn0gLy8gQXR0ZW1wdCBkaXNwYXRjaGluZyBhbiBldmVudC4gUmV0dXJucyBhIFN1c3BlbnNlSW5zdGFuY2Ugb3IgQ29udGFpbmVyIGlmIGl0J3MgYmxvY2tlZC5cblxuZnVuY3Rpb24gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gVE9ETzogV2FybiBpZiBfZW5hYmxlZCBpcyBmYWxzZS5cbiAgdmFyIG5hdGl2ZUV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpO1xuICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAodGFyZ2V0SW5zdCAhPT0gbnVsbCkge1xuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0SW5zdCk7XG5cbiAgICBpZiAobmVhcmVzdE1vdW50ZWQgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgdHJlZSBoYXMgYmVlbiB1bm1vdW50ZWQgYWxyZWFkeS4gRGlzcGF0Y2ggd2l0aG91dCBhIHRhcmdldC5cbiAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdGFnID0gbmVhcmVzdE1vdW50ZWQudGFnO1xuXG4gICAgICBpZiAodGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBRdWV1ZSB0aGUgZXZlbnQgdG8gYmUgcmVwbGF5ZWQgbGF0ZXIuIEFib3J0IGRpc3BhdGNoaW5nIHNpbmNlIHdlXG4gICAgICAgICAgLy8gZG9uJ3Qgd2FudCB0aGlzIGV2ZW50IGRpc3BhdGNoZWQgdHdpY2UgdGhyb3VnaCB0aGUgZXZlbnQgc3lzdGVtLlxuICAgICAgICAgIC8vIFRPRE86IElmIHRoaXMgaXMgdGhlIGZpcnN0IGRpc2NyZXRlIGV2ZW50IGluIHRoZSBxdWV1ZS4gU2NoZWR1bGUgYW4gaW5jcmVhc2VkXG4gICAgICAgICAgLy8gcHJpb3JpdHkgZm9yIHRoaXMgYm91bmRhcnkuXG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9IC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgc29tZXRoaW5nIHdlbnQgd3JvbmcgYnV0IHRvIGF2b2lkIGJsb2NraW5nXG4gICAgICAgIC8vIHRoZSB3aG9sZSBzeXN0ZW0sIGRpc3BhdGNoIHRoZSBldmVudCB3aXRob3V0IGEgdGFyZ2V0LlxuICAgICAgICAvLyBUT0RPOiBXYXJuLlxuXG5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaGFwcGVucyBkdXJpbmcgYSByZXBsYXkgc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIGl0IG1pZ2h0IGJsb2NrXG4gICAgICAgICAgLy8gdGhlIHdob2xlIHN5c3RlbS5cbiAgICAgICAgICByZXR1cm4gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gdGFyZ2V0SW5zdCkge1xuICAgICAgICAvLyBJZiB3ZSBnZXQgYW4gZXZlbnQgKGV4OiBpbWcgb25sb2FkKSBiZWZvcmUgY29tbWl0dGluZyB0aGF0XG4gICAgICAgIC8vIGNvbXBvbmVudCdzIG1vdW50LCBpZ25vcmUgaXQgZm9yIG5vdyAodGhhdCBpcywgdHJlYXQgaXQgYXMgaWYgaXQgd2FzIGFuXG4gICAgICAgIC8vIGV2ZW50IG9uIGEgbm9uLVJlYWN0IHRyZWUpLiBXZSBtaWdodCBhbHNvIGNvbnNpZGVyIHF1ZXVlaW5nIGV2ZW50cyBhbmRcbiAgICAgICAgLy8gZGlzcGF0Y2hpbmcgdGhlbSBhZnRlciB0aGUgbW91bnQuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpOyAvLyBXZSdyZSBub3QgYmxvY2tlZCBvbiBhbnl0aGluZy5cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcih0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcih0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgcGFzc2l2ZSkge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH0pO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgcGFzc2l2ZSkge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB7XG4gICAgcGFzc2l2ZTogcGFzc2l2ZVxuICB9KTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG4vKipcbiAqIFRoZXNlIHZhcmlhYmxlcyBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0ZXh0IGNvbnRlbnQgb2YgYSB0YXJnZXQgbm9kZSxcbiAqIGFsbG93aW5nIGNvbXBhcmlzb24gb2YgY29udGVudCBiZWZvcmUgYW5kIGFmdGVyIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogSWRlbnRpZnkgdGhlIG5vZGUgd2hlcmUgc2VsZWN0aW9uIGN1cnJlbnRseSBiZWdpbnMsIHRoZW4gb2JzZXJ2ZVxuICogYm90aCBpdHMgdGV4dCBjb250ZW50IGFuZCBpdHMgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgRE9NLiBTaW5jZSB0aGVcbiAqIGJyb3dzZXIgbWF5IG5hdGl2ZWx5IHJlcGxhY2UgdGhlIHRhcmdldCBub2RlIGR1cmluZyBjb21wb3NpdGlvbiwgd2UgY2FuXG4gKiB1c2UgaXRzIHBvc2l0aW9uIHRvIGZpbmQgaXRzIHJlcGxhY2VtZW50LlxuICpcbiAqXG4gKi9cbnZhciByb290ID0gbnVsbDtcbnZhciBzdGFydFRleHQgPSBudWxsO1xudmFyIGZhbGxiYWNrVGV4dCA9IG51bGw7XG5mdW5jdGlvbiBpbml0aWFsaXplKG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJvb3QgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgc3RhcnRUZXh0ID0gZ2V0VGV4dCgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlc2V0KCkge1xuICByb290ID0gbnVsbDtcbiAgc3RhcnRUZXh0ID0gbnVsbDtcbiAgZmFsbGJhY2tUZXh0ID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldERhdGEoKSB7XG4gIGlmIChmYWxsYmFja1RleHQpIHtcbiAgICByZXR1cm4gZmFsbGJhY2tUZXh0O1xuICB9XG5cbiAgdmFyIHN0YXJ0O1xuICB2YXIgc3RhcnRWYWx1ZSA9IHN0YXJ0VGV4dDtcbiAgdmFyIHN0YXJ0TGVuZ3RoID0gc3RhcnRWYWx1ZS5sZW5ndGg7XG4gIHZhciBlbmQ7XG4gIHZhciBlbmRWYWx1ZSA9IGdldFRleHQoKTtcbiAgdmFyIGVuZExlbmd0aCA9IGVuZFZhbHVlLmxlbmd0aDtcblxuICBmb3IgKHN0YXJ0ID0gMDsgc3RhcnQgPCBzdGFydExlbmd0aDsgc3RhcnQrKykge1xuICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0XSAhPT0gZW5kVmFsdWVbc3RhcnRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcblxuICBmb3IgKGVuZCA9IDE7IGVuZCA8PSBtaW5FbmQ7IGVuZCsrKSB7XG4gICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRMZW5ndGggLSBlbmRdICE9PSBlbmRWYWx1ZVtlbmRMZW5ndGggLSBlbmRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgc2xpY2VUYWlsID0gZW5kID4gMSA/IDEgLSBlbmQgOiB1bmRlZmluZWQ7XG4gIGZhbGxiYWNrVGV4dCA9IGVuZFZhbHVlLnNsaWNlKHN0YXJ0LCBzbGljZVRhaWwpO1xuICByZXR1cm4gZmFsbGJhY2tUZXh0O1xufVxuZnVuY3Rpb24gZ2V0VGV4dCgpIHtcbiAgaWYgKCd2YWx1ZScgaW4gcm9vdCkge1xuICAgIHJldHVybiByb290LnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QudGV4dENvbnRlbnQ7XG59XG5cbi8qKlxuICogYGNoYXJDb2RlYCByZXByZXNlbnRzIHRoZSBhY3R1YWwgXCJjaGFyYWN0ZXIgY29kZVwiIGFuZCBpcyBzYWZlIHRvIHVzZSB3aXRoXG4gKiBgU3RyaW5nLmZyb21DaGFyQ29kZWAuIEFzIHN1Y2gsIG9ubHkga2V5cyB0aGF0IGNvcnJlc3BvbmQgdG8gcHJpbnRhYmxlXG4gKiBjaGFyYWN0ZXJzIHByb2R1Y2UgYSB2YWxpZCBgY2hhckNvZGVgLCB0aGUgb25seSBleGNlcHRpb24gdG8gdGhpcyBpcyBFbnRlci5cbiAqIFRoZSBUYWIta2V5IGlzIGNvbnNpZGVyZWQgbm9uLXByaW50YWJsZSBhbmQgZG9lcyBub3QgaGF2ZSBhIGBjaGFyQ29kZWAsXG4gKiBwcmVzdW1hYmx5IGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvZHVjZSBhIHRhYi1jaGFyYWN0ZXIgaW4gYnJvd3NlcnMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBOb3JtYWxpemVkIGBjaGFyQ29kZWAgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGNoYXJDb2RlO1xuICB2YXIga2V5Q29kZSA9IG5hdGl2ZUV2ZW50LmtleUNvZGU7XG5cbiAgaWYgKCdjaGFyQ29kZScgaW4gbmF0aXZlRXZlbnQpIHtcbiAgICBjaGFyQ29kZSA9IG5hdGl2ZUV2ZW50LmNoYXJDb2RlOyAvLyBGRiBkb2VzIG5vdCBzZXQgYGNoYXJDb2RlYCBmb3IgdGhlIEVudGVyLWtleSwgY2hlY2sgYWdhaW5zdCBga2V5Q29kZWAuXG5cbiAgICBpZiAoY2hhckNvZGUgPT09IDAgJiYga2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIGNoYXJDb2RlID0gMTM7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElFOCBkb2VzIG5vdCBpbXBsZW1lbnQgYGNoYXJDb2RlYCwgYnV0IGBrZXlDb2RlYCBoYXMgdGhlIGNvcnJlY3QgdmFsdWUuXG4gICAgY2hhckNvZGUgPSBrZXlDb2RlO1xuICB9IC8vIElFIGFuZCBFZGdlIChvbiBXaW5kb3dzKSBhbmQgQ2hyb21lIC8gU2FmYXJpIChvbiBXaW5kb3dzIGFuZCBMaW51eClcbiAgLy8gcmVwb3J0IEVudGVyIGFzIGNoYXJDb2RlIDEwIHdoZW4gY3RybCBpcyBwcmVzc2VkLlxuXG5cbiAgaWYgKGNoYXJDb2RlID09PSAxMCkge1xuICAgIGNoYXJDb2RlID0gMTM7XG4gIH0gLy8gU29tZSBub24tcHJpbnRhYmxlIGtleXMgYXJlIHJlcG9ydGVkIGluIGBjaGFyQ29kZWAvYGtleUNvZGVgLCBkaXNjYXJkIHRoZW0uXG4gIC8vIE11c3Qgbm90IGRpc2NhcmQgdGhlIChub24tKXByaW50YWJsZSBFbnRlci1rZXkuXG5cblxuICBpZiAoY2hhckNvZGUgPj0gMzIgfHwgY2hhckNvZGUgPT09IDEzKSB7XG4gICAgcmV0dXJuIGNoYXJDb2RlO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlKCkge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhIGZhY3Rvcnkgc28gdGhhdCB3ZSBoYXZlIGRpZmZlcmVudCByZXR1cm5lZCBjb25zdHJ1Y3RvcnMuXG4vLyBJZiB3ZSBoYWQgYSBzaW5nbGUgY29uc3RydWN0b3IsIGl0IHdvdWxkIGJlIG1lZ2Ftb3JwaGljIGFuZCBlbmdpbmVzIHdvdWxkIGRlb3B0LlxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEludGVyZmFjZSkge1xuICAvKipcbiAgICogU3ludGhldGljIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBieSBldmVudCBwbHVnaW5zLCB0eXBpY2FsbHkgaW4gcmVzcG9uc2UgdG8gYVxuICAgKiB0b3AtbGV2ZWwgZXZlbnQgZGVsZWdhdGlvbiBoYW5kbGVyLlxuICAgKlxuICAgKiBUaGVzZSBzeXN0ZW1zIHNob3VsZCBnZW5lcmFsbHkgdXNlIHBvb2xpbmcgdG8gcmVkdWNlIHRoZSBmcmVxdWVuY3kgb2YgZ2FyYmFnZVxuICAgKiBjb2xsZWN0aW9uLiBUaGUgc3lzdGVtIHNob3VsZCBjaGVjayBgaXNQZXJzaXN0ZW50YCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbiAgICogZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGludG8gdGhlIHBvb2wgYWZ0ZXIgYmVpbmcgZGlzcGF0Y2hlZC4gVXNlcnMgdGhhdFxuICAgKiBuZWVkIGEgcGVyc2lzdGVkIGV2ZW50IHNob3VsZCBpbnZva2UgYHBlcnNpc3RgLlxuICAgKlxuICAgKiBTeW50aGV0aWMgZXZlbnRzIChhbmQgc3ViY2xhc3NlcykgaW1wbGVtZW50IHRoZSBET00gTGV2ZWwgMyBFdmVudHMgQVBJIGJ5XG4gICAqIG5vcm1hbGl6aW5nIGJyb3dzZXIgcXVpcmtzLiBTdWJjbGFzc2VzIGRvIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGltcGxlbWVudCBhXG4gICAqIERPTSBpbnRlcmZhY2U7IGN1c3RvbSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBldmVudHMgY2FuIGFsc28gc3ViY2xhc3MgdGhpcy5cbiAgICovXG4gIGZ1bmN0aW9uIFN5bnRoZXRpY0Jhc2VFdmVudChyZWFjdE5hbWUsIHJlYWN0RXZlbnRUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICB0aGlzLl9yZWFjdE5hbWUgPSByZWFjdE5hbWU7XG4gICAgdGhpcy5fdGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gICAgdGhpcy50eXBlID0gcmVhY3RFdmVudFR5cGU7XG4gICAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcblxuICAgIGZvciAodmFyIF9wcm9wTmFtZSBpbiBJbnRlcmZhY2UpIHtcbiAgICAgIGlmICghSW50ZXJmYWNlLmhhc093blByb3BlcnR5KF9wcm9wTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBub3JtYWxpemUgPSBJbnRlcmZhY2VbX3Byb3BOYW1lXTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZSkge1xuICAgICAgICB0aGlzW19wcm9wTmFtZV0gPSBub3JtYWxpemUobmF0aXZlRXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tfcHJvcE5hbWVdID0gbmF0aXZlRXZlbnRbX3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgOiBuYXRpdmVFdmVudC5yZXR1cm5WYWx1ZSA9PT0gZmFsc2U7XG5cbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9hc3NpZ24oU3ludGhldGljQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyAkRmxvd0ZpeE1lIC0gZmxvdyBpcyBub3QgYXdhcmUgb2YgYHVua25vd25gIGluIElFXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5yZXR1cm5WYWx1ZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gICAgfSxcbiAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG5cbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyAkRmxvd0ZpeE1lIC0gZmxvdyBpcyBub3QgYXdhcmUgb2YgYHVua25vd25gIGluIElFXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5jYW5jZWxCdWJibGUgIT09ICd1bmtub3duJykge1xuICAgICAgICAvLyBUaGUgQ2hhbmdlRXZlbnRQbHVnaW4gcmVnaXN0ZXJzIGEgXCJwcm9wZXJ0eWNoYW5nZVwiIGV2ZW50IGZvclxuICAgICAgICAvLyBJRS4gVGhpcyBldmVudCBkb2VzIG5vdCBzdXBwb3J0IGJ1YmJsaW5nIG9yIGNhbmNlbGxpbmcsIGFuZFxuICAgICAgICAvLyBhbnkgcmVmZXJlbmNlcyB0byBjYW5jZWxCdWJibGUgdGhyb3cgXCJNZW1iZXIgbm90IGZvdW5kXCIuICBBXG4gICAgICAgIC8vIHR5cGVvZiBjaGVjayBvZiBcInVua25vd25cIiBjaXJjdW12ZW50cyB0aGlzIGlzc3VlIChhbmQgaXMgYWxzb1xuICAgICAgICAvLyBJRSBzcGVjaWZpYykuXG4gICAgICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2UgcmVsZWFzZSBhbGwgZGlzcGF0Y2hlZCBgU3ludGhldGljRXZlbnRgcyBhZnRlciBlYWNoIGV2ZW50IGxvb3AsIGFkZGluZ1xuICAgICAqIHRoZW0gYmFjayBpbnRvIHRoZSBwb29sLiBUaGlzIGFsbG93cyBhIHdheSB0byBob2xkIG9udG8gYSByZWZlcmVuY2UgdGhhdFxuICAgICAqIHdvbid0IGJlIGFkZGVkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICAgKi9cbiAgICBwZXJzaXN0OiBmdW5jdGlvbiAoKSB7Ly8gTW9kZXJuIGV2ZW50IHN5c3RlbSBkb2Vzbid0IHVzZSBwb29saW5nLlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhpcyBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlzIHNob3VsZCBub3QgYmUgcmVsZWFzZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBpc1BlcnNpc3RlbnQ6IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlXG4gIH0pO1xuXG4gIHJldHVybiBTeW50aGV0aWNCYXNlRXZlbnQ7XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIEV2ZW50SW50ZXJmYWNlID0ge1xuICBldmVudFBoYXNlOiAwLFxuICBidWJibGVzOiAwLFxuICBjYW5jZWxhYmxlOiAwLFxuICB0aW1lU3RhbXA6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVmYXVsdFByZXZlbnRlZDogMCxcbiAgaXNUcnVzdGVkOiAwXG59O1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRXZlbnRJbnRlcmZhY2UpO1xuXG52YXIgVUlFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIHZpZXc6IDAsXG4gIGRldGFpbDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVUlFdmVudEludGVyZmFjZSk7XG52YXIgbGFzdE1vdmVtZW50WDtcbnZhciBsYXN0TW92ZW1lbnRZO1xudmFyIGxhc3RNb3VzZUV2ZW50O1xuXG5mdW5jdGlvbiB1cGRhdGVNb3VzZU1vdmVtZW50UG9seWZpbGxTdGF0ZShldmVudCkge1xuICBpZiAoZXZlbnQgIT09IGxhc3RNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGxhc3RNb3VzZUV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdtb3VzZW1vdmUnKSB7XG4gICAgICBsYXN0TW92ZW1lbnRYID0gZXZlbnQuc2NyZWVuWCAtIGxhc3RNb3VzZUV2ZW50LnNjcmVlblg7XG4gICAgICBsYXN0TW92ZW1lbnRZID0gZXZlbnQuc2NyZWVuWSAtIGxhc3RNb3VzZUV2ZW50LnNjcmVlblk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RNb3ZlbWVudFggPSAwO1xuICAgICAgbGFzdE1vdmVtZW50WSA9IDA7XG4gICAgfVxuXG4gICAgbGFzdE1vdXNlRXZlbnQgPSBldmVudDtcbiAgfVxufVxuLyoqXG4gKiBAaW50ZXJmYWNlIE1vdXNlRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIE1vdXNlRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHNjcmVlblg6IDAsXG4gIHNjcmVlblk6IDAsXG4gIGNsaWVudFg6IDAsXG4gIGNsaWVudFk6IDAsXG4gIHBhZ2VYOiAwLFxuICBwYWdlWTogMCxcbiAgY3RybEtleTogMCxcbiAgc2hpZnRLZXk6IDAsXG4gIGFsdEtleTogMCxcbiAgbWV0YUtleTogMCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICBidXR0b246IDAsXG4gIGJ1dHRvbnM6IDAsXG4gIHJlbGF0ZWRUYXJnZXQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0ID09PSB1bmRlZmluZWQpIHJldHVybiBldmVudC5mcm9tRWxlbWVudCA9PT0gZXZlbnQuc3JjRWxlbWVudCA/IGV2ZW50LnRvRWxlbWVudCA6IGV2ZW50LmZyb21FbGVtZW50O1xuICAgIHJldHVybiBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICB9LFxuICBtb3ZlbWVudFg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmICgnbW92ZW1lbnRYJyBpbiBldmVudCkge1xuICAgICAgcmV0dXJuIGV2ZW50Lm1vdmVtZW50WDtcbiAgICB9XG5cbiAgICB1cGRhdGVNb3VzZU1vdmVtZW50UG9seWZpbGxTdGF0ZShldmVudCk7XG4gICAgcmV0dXJuIGxhc3RNb3ZlbWVudFg7XG4gIH0sXG4gIG1vdmVtZW50WTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCdtb3ZlbWVudFknIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQubW92ZW1lbnRZO1xuICAgIH0gLy8gRG9uJ3QgbmVlZCB0byBjYWxsIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKCkgaGVyZVxuICAgIC8vIGJlY2F1c2UgaXQncyBndWFyYW50ZWVkIHRvIGhhdmUgYWxyZWFkeSBydW4gd2hlbiBtb3ZlbWVudFhcbiAgICAvLyB3YXMgY29waWVkLlxuXG5cbiAgICByZXR1cm4gbGFzdE1vdmVtZW50WTtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoTW91c2VFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRHJhZ0V2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgRHJhZ0V2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBkYXRhVHJhbnNmZXI6IDBcbn0pO1xuXG52YXIgU3ludGhldGljRHJhZ0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRHJhZ0V2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBGb2N1c0V2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgRm9jdXNFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgcmVsYXRlZFRhcmdldDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNGb2N1c0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRm9jdXNFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1hbmltYXRpb25zLyNBbmltYXRpb25FdmVudC1pbnRlcmZhY2VcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0FuaW1hdGlvbkV2ZW50XG4gKi9cblxudmFyIEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgYW5pbWF0aW9uTmFtZTogMCxcbiAgZWxhcHNlZFRpbWU6IDAsXG4gIHBzZXVkb0VsZW1lbnQ6IDBcbn0pO1xuXG52YXIgU3ludGhldGljQW5pbWF0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChBbmltYXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY2xpcGJvYXJkLWFwaXMvXG4gKi9cblxudmFyIENsaXBib2FyZEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgY2xpcGJvYXJkRGF0YTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdjbGlwYm9hcmREYXRhJyBpbiBldmVudCA/IGV2ZW50LmNsaXBib2FyZERhdGEgOiB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNDbGlwYm9hcmRFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KENsaXBib2FyZEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1jb21wb3NpdGlvbmV2ZW50c1xuICovXG5cbnZhciBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGF0YTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDVcbiAqICAgICAgLyNldmVudHMtaW5wdXRldmVudHNcbiAqL1xuLy8gSGFwcGVucyB0byBzaGFyZSB0aGUgc2FtZSBsaXN0IGZvciBub3cuXG5cbnZhciBTeW50aGV0aWNJbnB1dEV2ZW50ID0gU3ludGhldGljQ29tcG9zaXRpb25FdmVudDtcbi8qKlxuICogTm9ybWFsaXphdGlvbiBvZiBkZXByZWNhdGVkIEhUTUw1IGBrZXlgIHZhbHVlc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xuXG52YXIgbm9ybWFsaXplS2V5ID0ge1xuICBFc2M6ICdFc2NhcGUnLFxuICBTcGFjZWJhcjogJyAnLFxuICBMZWZ0OiAnQXJyb3dMZWZ0JyxcbiAgVXA6ICdBcnJvd1VwJyxcbiAgUmlnaHQ6ICdBcnJvd1JpZ2h0JyxcbiAgRG93bjogJ0Fycm93RG93bicsXG4gIERlbDogJ0RlbGV0ZScsXG4gIFdpbjogJ09TJyxcbiAgTWVudTogJ0NvbnRleHRNZW51JyxcbiAgQXBwczogJ0NvbnRleHRNZW51JyxcbiAgU2Nyb2xsOiAnU2Nyb2xsTG9jaycsXG4gIE1velByaW50YWJsZUtleTogJ1VuaWRlbnRpZmllZCdcbn07XG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbGVnYWN5IGBrZXlDb2RlYCB0byBIVE1MNSBga2V5YFxuICogT25seSBzcGVjaWFsIGtleXMgc3VwcG9ydGVkLCBhbGwgb3RoZXJzIGRlcGVuZCBvbiBrZXlib2FyZCBsYXlvdXQgb3IgYnJvd3NlclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xuXG52YXIgdHJhbnNsYXRlVG9LZXkgPSB7XG4gICc4JzogJ0JhY2tzcGFjZScsXG4gICc5JzogJ1RhYicsXG4gICcxMic6ICdDbGVhcicsXG4gICcxMyc6ICdFbnRlcicsXG4gICcxNic6ICdTaGlmdCcsXG4gICcxNyc6ICdDb250cm9sJyxcbiAgJzE4JzogJ0FsdCcsXG4gICcxOSc6ICdQYXVzZScsXG4gICcyMCc6ICdDYXBzTG9jaycsXG4gICcyNyc6ICdFc2NhcGUnLFxuICAnMzInOiAnICcsXG4gICczMyc6ICdQYWdlVXAnLFxuICAnMzQnOiAnUGFnZURvd24nLFxuICAnMzUnOiAnRW5kJyxcbiAgJzM2JzogJ0hvbWUnLFxuICAnMzcnOiAnQXJyb3dMZWZ0JyxcbiAgJzM4JzogJ0Fycm93VXAnLFxuICAnMzknOiAnQXJyb3dSaWdodCcsXG4gICc0MCc6ICdBcnJvd0Rvd24nLFxuICAnNDUnOiAnSW5zZXJ0JyxcbiAgJzQ2JzogJ0RlbGV0ZScsXG4gICcxMTInOiAnRjEnLFxuICAnMTEzJzogJ0YyJyxcbiAgJzExNCc6ICdGMycsXG4gICcxMTUnOiAnRjQnLFxuICAnMTE2JzogJ0Y1JyxcbiAgJzExNyc6ICdGNicsXG4gICcxMTgnOiAnRjcnLFxuICAnMTE5JzogJ0Y4JyxcbiAgJzEyMCc6ICdGOScsXG4gICcxMjEnOiAnRjEwJyxcbiAgJzEyMic6ICdGMTEnLFxuICAnMTIzJzogJ0YxMicsXG4gICcxNDQnOiAnTnVtTG9jaycsXG4gICcxNDUnOiAnU2Nyb2xsTG9jaycsXG4gICcyMjQnOiAnTWV0YSdcbn07XG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBga2V5YCBwcm9wZXJ0eS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRFdmVudEtleShuYXRpdmVFdmVudCkge1xuICBpZiAobmF0aXZlRXZlbnQua2V5KSB7XG4gICAgLy8gTm9ybWFsaXplIGluY29uc2lzdGVudCB2YWx1ZXMgcmVwb3J0ZWQgYnkgYnJvd3NlcnMgZHVlIHRvXG4gICAgLy8gaW1wbGVtZW50YXRpb25zIG9mIGEgd29ya2luZyBkcmFmdCBzcGVjaWZpY2F0aW9uLlxuICAgIC8vIEZpcmVGb3ggaW1wbGVtZW50cyBga2V5YCBidXQgcmV0dXJucyBgTW96UHJpbnRhYmxlS2V5YCBmb3IgYWxsXG4gICAgLy8gcHJpbnRhYmxlIGNoYXJhY3RlcnMgKG5vcm1hbGl6ZWQgdG8gYFVuaWRlbnRpZmllZGApLCBpZ25vcmUgaXQuXG4gICAgdmFyIGtleSA9IG5vcm1hbGl6ZUtleVtuYXRpdmVFdmVudC5rZXldIHx8IG5hdGl2ZUV2ZW50LmtleTtcblxuICAgIGlmIChrZXkgIT09ICdVbmlkZW50aWZpZWQnKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfSAvLyBCcm93c2VyIGRvZXMgbm90IGltcGxlbWVudCBga2V5YCwgcG9seWZpbGwgYXMgbXVjaCBvZiBpdCBhcyB3ZSBjYW4uXG5cblxuICBpZiAobmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgIHZhciBjaGFyQ29kZSA9IGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpOyAvLyBUaGUgZW50ZXIta2V5IGlzIHRlY2huaWNhbGx5IGJvdGggcHJpbnRhYmxlIGFuZCBub24tcHJpbnRhYmxlIGFuZCBjYW5cbiAgICAvLyB0aHVzIGJlIGNhcHR1cmVkIGJ5IGBrZXlwcmVzc2AsIG5vIG90aGVyIG5vbi1wcmludGFibGUga2V5IHNob3VsZC5cblxuICAgIHJldHVybiBjaGFyQ29kZSA9PT0gMTMgPyAnRW50ZXInIDogU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSk7XG4gIH1cblxuICBpZiAobmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAvLyBXaGlsZSB1c2VyIGtleWJvYXJkIGxheW91dCBkZXRlcm1pbmVzIHRoZSBhY3R1YWwgbWVhbmluZyBvZiBlYWNoXG4gICAgLy8gYGtleUNvZGVgIHZhbHVlLCBhbG1vc3QgYWxsIGZ1bmN0aW9uIGtleXMgaGF2ZSBhIHVuaXZlcnNhbCB2YWx1ZS5cbiAgICByZXR1cm4gdHJhbnNsYXRlVG9LZXlbbmF0aXZlRXZlbnQua2V5Q29kZV0gfHwgJ1VuaWRlbnRpZmllZCc7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbW9kaWZpZXIga2V5IHRvIHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IGluIHRoZSBldmVudC5cbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNrZXlzLU1vZGlmaWVyc1xuICovXG5cblxudmFyIG1vZGlmaWVyS2V5VG9Qcm9wID0ge1xuICBBbHQ6ICdhbHRLZXknLFxuICBDb250cm9sOiAnY3RybEtleScsXG4gIE1ldGE6ICdtZXRhS2V5JyxcbiAgU2hpZnQ6ICdzaGlmdEtleSdcbn07IC8vIE9sZGVyIGJyb3dzZXJzIChTYWZhcmkgPD0gMTAsIGlPUyBTYWZhcmkgPD0gMTAuMikgZG8gbm90IHN1cHBvcnRcbi8vIGdldE1vZGlmaWVyU3RhdGUuIElmIGdldE1vZGlmaWVyU3RhdGUgaXMgbm90IHN1cHBvcnRlZCwgd2UgbWFwIGl0IHRvIGEgc2V0IG9mXG4vLyBtb2RpZmllciBrZXlzIGV4cG9zZWQgYnkgdGhlIGV2ZW50LiBJbiB0aGlzIGNhc2UsIExvY2sta2V5cyBhcmUgbm90IHN1cHBvcnRlZC5cblxuZnVuY3Rpb24gbW9kaWZpZXJTdGF0ZUdldHRlcihrZXlBcmcpIHtcbiAgdmFyIHN5bnRoZXRpY0V2ZW50ID0gdGhpcztcbiAgdmFyIG5hdGl2ZUV2ZW50ID0gc3ludGhldGljRXZlbnQubmF0aXZlRXZlbnQ7XG5cbiAgaWYgKG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUpIHtcbiAgICByZXR1cm4gbmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZShrZXlBcmcpO1xuICB9XG5cbiAgdmFyIGtleVByb3AgPSBtb2RpZmllcktleVRvUHJvcFtrZXlBcmddO1xuICByZXR1cm4ga2V5UHJvcCA/ICEhbmF0aXZlRXZlbnRba2V5UHJvcF0gOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRNb2RpZmllclN0YXRlKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBtb2RpZmllclN0YXRlR2V0dGVyO1xufVxuLyoqXG4gKiBAaW50ZXJmYWNlIEtleWJvYXJkRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIEtleWJvYXJkRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIGtleTogZ2V0RXZlbnRLZXksXG4gIGNvZGU6IDAsXG4gIGxvY2F0aW9uOiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICByZXBlYXQ6IDAsXG4gIGxvY2FsZTogMCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAvLyBMZWdhY3kgSW50ZXJmYWNlXG4gIGNoYXJDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgY2hhckNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlQcmVzcyBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyB0aGUgYWN0dWFsIHByaW50YWJsZSBjaGFyYWN0ZXIuXG4gICAgLy8gS2V5UHJlc3MgaXMgZGVwcmVjYXRlZCwgYnV0IGl0cyByZXBsYWNlbWVudCBpcyBub3QgeWV0IGZpbmFsIGFuZCBub3RcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBhbnkgbWFqb3IgYnJvd3Nlci4gT25seSBLZXlQcmVzcyBoYXMgY2hhckNvZGUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgIHJldHVybiBnZXRFdmVudENoYXJDb2RlKGV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAga2V5Q29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYGtleUNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlEb3duL1VwIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHBoeXNpY2FsIGtleWJvYXJkIGtleS5cbiAgICAvLyBUaGUgYWN0dWFsIG1lYW5pbmcgb2YgdGhlIHZhbHVlIGRlcGVuZHMgb24gdGhlIHVzZXJzJyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyB3aGljaCBjYW5ub3QgYmUgZGV0ZWN0ZWQuIEFzc3VtaW5nIHRoYXQgaXQgaXMgYSBVUyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyBwcm92aWRlcyBhIHN1cnByaXNpbmdseSBhY2N1cmF0ZSBtYXBwaW5nIGZvciBVUyBhbmQgRXVyb3BlYW4gdXNlcnMuXG4gICAgLy8gRHVlIHRvIHRoaXMsIGl0IGlzIGxlZnQgdG8gdGhlIHVzZXIgdG8gaW1wbGVtZW50IGF0IHRoaXMgdGltZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9LFxuICB3aGljaDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYHdoaWNoYCBpcyBhbiBhbGlhcyBmb3IgZWl0aGVyIGBrZXlDb2RlYCBvciBgY2hhckNvZGVgIGRlcGVuZGluZyBvbiB0aGVcbiAgICAvLyB0eXBlIG9mIHRoZSBldmVudC5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljS2V5Ym9hcmRFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEtleWJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFBvaW50ZXJFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9wb2ludGVyZXZlbnRzL1xuICovXG5cbnZhciBQb2ludGVyRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIHBvaW50ZXJJZDogMCxcbiAgd2lkdGg6IDAsXG4gIGhlaWdodDogMCxcbiAgcHJlc3N1cmU6IDAsXG4gIHRhbmdlbnRpYWxQcmVzc3VyZTogMCxcbiAgdGlsdFg6IDAsXG4gIHRpbHRZOiAwLFxuICB0d2lzdDogMCxcbiAgcG9pbnRlclR5cGU6IDAsXG4gIGlzUHJpbWFyeTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNQb2ludGVyRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChQb2ludGVyRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFRvdWNoRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvdG91Y2gtZXZlbnRzL1xuICovXG5cbnZhciBUb3VjaEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICB0b3VjaGVzOiAwLFxuICB0YXJnZXRUb3VjaGVzOiAwLFxuICBjaGFuZ2VkVG91Y2hlczogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlXG59KTtcblxudmFyIFN5bnRoZXRpY1RvdWNoRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUb3VjaEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA5L1dELWNzczMtdHJhbnNpdGlvbnMtMjAwOTAzMjAvI3RyYW5zaXRpb24tZXZlbnRzLVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVHJhbnNpdGlvbkV2ZW50XG4gKi9cblxudmFyIFRyYW5zaXRpb25FdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIHByb3BlcnR5TmFtZTogMCxcbiAgZWxhcHNlZFRpbWU6IDAsXG4gIHBzZXVkb0VsZW1lbnQ6IDBcbn0pO1xuXG52YXIgU3ludGhldGljVHJhbnNpdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBXaGVlbEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgV2hlZWxFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGVsdGFYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWCcgaW4gZXZlbnQgPyBldmVudC5kZWx0YVggOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVhgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAocmlnaHQgaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWCcgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVggOiAwO1xuICB9LFxuICBkZWx0YVk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFZJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWSA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWWAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YVknIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFgIGZvciBJRTw5IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhIDogMDtcbiAgfSxcbiAgZGVsdGFaOiAwLFxuICAvLyBCcm93c2VycyB3aXRob3V0IFwiZGVsdGFNb2RlXCIgaXMgcmVwb3J0aW5nIGluIHJhdyB3aGVlbCBkZWx0YSB3aGVyZSBvbmVcbiAgLy8gbm90Y2ggb24gdGhlIHNjcm9sbCBpcyBhbHdheXMgKy8tIDEyMCwgcm91Z2hseSBlcXVpdmFsZW50IHRvIHBpeGVscy5cbiAgLy8gQSBnb29kIGFwcHJveGltYXRpb24gb2YgRE9NX0RFTFRBX0xJTkUgKDEpIGlzIDUlIG9mIHZpZXdwb3J0IHNpemUgb3JcbiAgLy8gfjQwIHBpeGVscywgZm9yIERPTV9ERUxUQV9TQ1JFRU4gKDIpIGl0IGlzIDg3LjUlIG9mIHZpZXdwb3J0IHNpemUuXG4gIGRlbHRhTW9kZTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNXaGVlbEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoV2hlZWxFdmVudEludGVyZmFjZSk7XG5cbnZhciBFTkRfS0VZQ09ERVMgPSBbOSwgMTMsIDI3LCAzMl07IC8vIFRhYiwgUmV0dXJuLCBFc2MsIFNwYWNlXG5cbnZhciBTVEFSVF9LRVlDT0RFID0gMjI5O1xudmFyIGNhblVzZUNvbXBvc2l0aW9uRXZlbnQgPSBjYW5Vc2VET00gJiYgJ0NvbXBvc2l0aW9uRXZlbnQnIGluIHdpbmRvdztcbnZhciBkb2N1bWVudE1vZGUgPSBudWxsO1xuXG5pZiAoY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB7XG4gIGRvY3VtZW50TW9kZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn0gLy8gV2Via2l0IG9mZmVycyBhIHZlcnkgdXNlZnVsIGB0ZXh0SW5wdXRgIGV2ZW50IHRoYXQgY2FuIGJlIHVzZWQgdG9cbi8vIGRpcmVjdGx5IHJlcHJlc2VudCBgYmVmb3JlSW5wdXRgLiBUaGUgSUUgYHRleHRpbnB1dGAgZXZlbnQgaXMgbm90IGFzXG4vLyB1c2VmdWwsIHNvIHdlIGRvbid0IHVzZSBpdC5cblxuXG52YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPSBjYW5Vc2VET00gJiYgJ1RleHRFdmVudCcgaW4gd2luZG93ICYmICFkb2N1bWVudE1vZGU7IC8vIEluIElFOSssIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0aW9uIGV2ZW50cywgYnV0IHRoZSBkYXRhIHN1cHBsaWVkXG4vLyBieSB0aGUgbmF0aXZlIGNvbXBvc2l0aW9uZW5kIGV2ZW50IG1heSBiZSBpbmNvcnJlY3QuIEphcGFuZXNlIGlkZW9ncmFwaGljXG4vLyBzcGFjZXMsIGZvciBpbnN0YW5jZSAoXFx1MzAwMCkgYXJlIG5vdCByZWNvcmRlZCBjb3JyZWN0bHkuXG5cbnZhciB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA9IGNhblVzZURPTSAmJiAoIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgfHwgZG9jdW1lbnRNb2RlICYmIGRvY3VtZW50TW9kZSA+IDggJiYgZG9jdW1lbnRNb2RlIDw9IDExKTtcbnZhciBTUEFDRUJBUl9DT0RFID0gMzI7XG52YXIgU1BBQ0VCQVJfQ0hBUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoU1BBQ0VCQVJfQ09ERSk7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQmVmb3JlSW5wdXQnLCBbJ2NvbXBvc2l0aW9uZW5kJywgJ2tleXByZXNzJywgJ3RleHRJbnB1dCcsICdwYXN0ZSddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uRW5kJywgWydjb21wb3NpdGlvbmVuZCcsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uU3RhcnQnLCBbJ2NvbXBvc2l0aW9uc3RhcnQnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25Db21wb3NpdGlvblVwZGF0ZScsIFsnY29tcG9zaXRpb251cGRhdGUnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG59IC8vIFRyYWNrIHdoZXRoZXIgd2UndmUgZXZlciBoYW5kbGVkIGEga2V5cHJlc3Mgb24gdGhlIHNwYWNlIGtleS5cblxuXG52YXIgaGFzU3BhY2VLZXlwcmVzcyA9IGZhbHNlO1xuLyoqXG4gKiBSZXR1cm4gd2hldGhlciBhIG5hdGl2ZSBrZXlwcmVzcyBldmVudCBpcyBhc3N1bWVkIHRvIGJlIGEgY29tbWFuZC5cbiAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBGaXJlZm94IGZpcmVzIGBrZXlwcmVzc2AgZXZlbnRzIGZvciBrZXkgY29tbWFuZHNcbiAqIChjdXQsIGNvcHksIHNlbGVjdC1hbGwsIGV0Yy4pIGV2ZW4gdGhvdWdoIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZC5cbiAqL1xuXG5mdW5jdGlvbiBpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkge1xuICByZXR1cm4gKG5hdGl2ZUV2ZW50LmN0cmxLZXkgfHwgbmF0aXZlRXZlbnQuYWx0S2V5IHx8IG5hdGl2ZUV2ZW50Lm1ldGFLZXkpICYmIC8vIGN0cmxLZXkgJiYgYWx0S2V5IGlzIGVxdWl2YWxlbnQgdG8gQWx0R3IsIGFuZCBpcyBub3QgYSBjb21tYW5kLlxuICAhKG5hdGl2ZUV2ZW50LmN0cmxLZXkgJiYgbmF0aXZlRXZlbnQuYWx0S2V5KTtcbn1cbi8qKlxuICogVHJhbnNsYXRlIG5hdGl2ZSB0b3AgbGV2ZWwgZXZlbnRzIGludG8gZXZlbnQgdHlwZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZShkb21FdmVudE5hbWUpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdjb21wb3NpdGlvbnN0YXJ0JzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvblN0YXJ0JztcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvbkVuZCc7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbnVwZGF0ZSc6XG4gICAgICByZXR1cm4gJ29uQ29tcG9zaXRpb25VcGRhdGUnO1xuICB9XG59XG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIGJlc3QtZ3Vlc3MgbW9kZWwgdGhpbmsgdGhpcyBldmVudCBzaWduaWZpZXMgdGhhdFxuICogY29tcG9zaXRpb24gaGFzIGJlZ3VuP1xuICovXG5cblxuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICByZXR1cm4gZG9tRXZlbnROYW1lID09PSAna2V5ZG93bicgJiYgbmF0aXZlRXZlbnQua2V5Q29kZSA9PT0gU1RBUlRfS0VZQ09ERTtcbn1cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgbW9kZSB0aGluayB0aGF0IHRoaXMgZXZlbnQgaXMgdGhlIGVuZCBvZiBjb21wb3NpdGlvbj9cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgLy8gQ29tbWFuZCBrZXlzIGluc2VydCBvciBjbGVhciBJTUUgaW5wdXQuXG4gICAgICByZXR1cm4gRU5EX0tFWUNPREVTLmluZGV4T2YobmF0aXZlRXZlbnQua2V5Q29kZSkgIT09IC0xO1xuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgICAvLyBFeHBlY3QgSU1FIGtleUNvZGUgb24gZWFjaCBrZXlkb3duLiBJZiB3ZSBnZXQgYW55IG90aGVyXG4gICAgICAvLyBjb2RlIHdlIG11c3QgaGF2ZSBleGl0ZWQgZWFybGllci5cbiAgICAgIHJldHVybiBuYXRpdmVFdmVudC5rZXlDb2RlICE9PSBTVEFSVF9LRVlDT0RFO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgLy8gRXZlbnRzIGFyZSBub3QgcG9zc2libGUgd2l0aG91dCBjYW5jZWxsaW5nIElNRS5cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBHb29nbGUgSW5wdXQgVG9vbHMgcHJvdmlkZXMgY29tcG9zaXRpb24gZGF0YSB2aWEgYSBDdXN0b21FdmVudCxcbiAqIHdpdGggdGhlIGBkYXRhYCBwcm9wZXJ0eSBwb3B1bGF0ZWQgaW4gdGhlIGBkZXRhaWxgIG9iamVjdC4gSWYgdGhpc1xuICogaXMgYXZhaWxhYmxlIG9uIHRoZSBldmVudCBvYmplY3QsIHVzZSBpdC4gSWYgbm90LCB0aGlzIGlzIGEgcGxhaW5cbiAqIGNvbXBvc2l0aW9uIGV2ZW50IGFuZCB3ZSBoYXZlIG5vdGhpbmcgc3BlY2lhbCB0byBleHRyYWN0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRldGFpbCA9IG5hdGl2ZUV2ZW50LmRldGFpbDtcblxuICBpZiAodHlwZW9mIGRldGFpbCA9PT0gJ29iamVjdCcgJiYgJ2RhdGEnIGluIGRldGFpbCkge1xuICAgIHJldHVybiBkZXRhaWwuZGF0YTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBDaGVjayBpZiBhIGNvbXBvc2l0aW9uIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgS29yZWFuIElNRS5cbiAqIE91ciBmYWxsYmFjayBtb2RlIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIElFJ3MgS29yZWFuIElNRSxcbiAqIHNvIGp1c3QgdXNlIG5hdGl2ZSBjb21wb3NpdGlvbiBldmVudHMgd2hlbiBLb3JlYW4gSU1FIGlzIHVzZWQuXG4gKiBBbHRob3VnaCBDb21wb3NpdGlvbkV2ZW50LmxvY2FsZSBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLFxuICogaXQgaXMgYXZhaWxhYmxlIGluIElFLCB3aGVyZSBvdXIgZmFsbGJhY2sgbW9kZSBpcyBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG5hdGl2ZUV2ZW50LmxvY2FsZSA9PT0gJ2tvJztcbn0gLy8gVHJhY2sgdGhlIGN1cnJlbnQgSU1FIGNvbXBvc2l0aW9uIHN0YXR1cywgaWYgYW55LlxuXG5cbnZhciBpc0NvbXBvc2luZyA9IGZhbHNlO1xuLyoqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuXG4gKi9cblxuZnVuY3Rpb24gZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgdmFyIGV2ZW50VHlwZTtcbiAgdmFyIGZhbGxiYWNrRGF0YTtcblxuICBpZiAoY2FuVXNlQ29tcG9zaXRpb25FdmVudCkge1xuICAgIGV2ZW50VHlwZSA9IGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKGRvbUV2ZW50TmFtZSk7XG4gIH0gZWxzZSBpZiAoIWlzQ29tcG9zaW5nKSB7XG4gICAgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICBldmVudFR5cGUgPSAnb25Db21wb3NpdGlvblN0YXJ0JztcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgZXZlbnRUeXBlID0gJ29uQ29tcG9zaXRpb25FbmQnO1xuICB9XG5cbiAgaWYgKCFldmVudFR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJiAhaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkpIHtcbiAgICAvLyBUaGUgY3VycmVudCBjb21wb3NpdGlvbiBpcyBzdG9yZWQgc3RhdGljYWxseSBhbmQgbXVzdCBub3QgYmVcbiAgICAvLyBvdmVyd3JpdHRlbiB3aGlsZSBjb21wb3NpdGlvbiBjb250aW51ZXMuXG4gICAgaWYgKCFpc0NvbXBvc2luZyAmJiBldmVudFR5cGUgPT09ICdvbkNvbXBvc2l0aW9uU3RhcnQnKSB7XG4gICAgICBpc0NvbXBvc2luZyA9IGluaXRpYWxpemUobmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnb25Db21wb3NpdGlvbkVuZCcpIHtcbiAgICAgIGlmIChpc0NvbXBvc2luZykge1xuICAgICAgICBmYWxsYmFja0RhdGEgPSBnZXREYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCBldmVudFR5cGUpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50KGV2ZW50VHlwZSwgZG9tRXZlbnROYW1lLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuXG4gICAgaWYgKGZhbGxiYWNrRGF0YSkge1xuICAgICAgLy8gSW5qZWN0IGRhdGEgZ2VuZXJhdGVkIGZyb20gZmFsbGJhY2sgcGF0aCBpbnRvIHRoZSBzeW50aGV0aWMgZXZlbnQuXG4gICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIHByb3BlcnR5IG9mIG5hdGl2ZSBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlLlxuICAgICAgZXZlbnQuZGF0YSA9IGZhbGxiYWNrRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGN1c3RvbURhdGEgPSBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcblxuICAgICAgaWYgKGN1c3RvbURhdGEgIT09IG51bGwpIHtcbiAgICAgICAgZXZlbnQuZGF0YSA9IGN1c3RvbURhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogSWYgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50cyBhcmUgYXZhaWxhYmxlLCBvdXIgZ29hbCBpcyB0byBtYWtlXG4gICAgICAgKiB1c2Ugb2YgdGhlbS4gSG93ZXZlciwgdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2U6IHRoZSBzcGFjZWJhciBrZXkuXG4gICAgICAgKiBJbiBXZWJraXQsIHByZXZlbnRpbmcgZGVmYXVsdCBvbiBhIHNwYWNlYmFyIGB0ZXh0SW5wdXRgIGV2ZW50XG4gICAgICAgKiBjYW5jZWxzIGNoYXJhY3RlciBpbnNlcnRpb24sIGJ1dCBpdCAqYWxzbyogY2F1c2VzIHRoZSBicm93c2VyXG4gICAgICAgKiB0byBmYWxsIGJhY2sgdG8gaXRzIGRlZmF1bHQgc3BhY2ViYXIgYmVoYXZpb3Igb2Ygc2Nyb2xsaW5nIHRoZVxuICAgICAgICogcGFnZS5cbiAgICAgICAqXG4gICAgICAgKiBUcmFja2luZyBhdDpcbiAgICAgICAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNTUxMDNcbiAgICAgICAqXG4gICAgICAgKiBUbyBhdm9pZCB0aGlzIGlzc3VlLCB1c2UgdGhlIGtleXByZXNzIGV2ZW50IGFzIGlmIG5vIGB0ZXh0SW5wdXRgXG4gICAgICAgKiBldmVudCBpcyBhdmFpbGFibGUuXG4gICAgICAgKi9cbiAgICAgIHZhciB3aGljaCA9IG5hdGl2ZUV2ZW50LndoaWNoO1xuXG4gICAgICBpZiAod2hpY2ggIT09IFNQQUNFQkFSX0NPREUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGhhc1NwYWNlS2V5cHJlc3MgPSB0cnVlO1xuICAgICAgcmV0dXJuIFNQQUNFQkFSX0NIQVI7XG5cbiAgICBjYXNlICd0ZXh0SW5wdXQnOlxuICAgICAgLy8gUmVjb3JkIHRoZSBjaGFyYWN0ZXJzIHRvIGJlIGFkZGVkIHRvIHRoZSBET00uXG4gICAgICB2YXIgY2hhcnMgPSBuYXRpdmVFdmVudC5kYXRhOyAvLyBJZiBpdCdzIGEgc3BhY2ViYXIgY2hhcmFjdGVyLCBhc3N1bWUgdGhhdCB3ZSBoYXZlIGFscmVhZHkgaGFuZGxlZFxuICAgICAgLy8gaXQgYXQgdGhlIGtleXByZXNzIGxldmVsIGFuZCBiYWlsIGltbWVkaWF0ZWx5LiBBbmRyb2lkIENocm9tZVxuICAgICAgLy8gZG9lc24ndCBnaXZlIHVzIGtleWNvZGVzLCBzbyB3ZSBuZWVkIHRvIGlnbm9yZSBpdC5cblxuICAgICAgaWYgKGNoYXJzID09PSBTUEFDRUJBUl9DSEFSICYmIGhhc1NwYWNlS2V5cHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBGb3Igb3RoZXIgbmF0aXZlIGV2ZW50IHR5cGVzLCBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbi8qKlxuICogRm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlIGB0ZXh0SW5wdXRgIGV2ZW50LCBleHRyYWN0IHRoZVxuICogYXBwcm9wcmlhdGUgc3RyaW5nIHRvIHVzZSBmb3IgU3ludGhldGljSW5wdXRFdmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgY29tcG9zaW5nIChJTUUpIGFuZCB1c2luZyBhIGZhbGxiYWNrIHRvIGRvIHNvLFxuICAvLyB0cnkgdG8gZXh0cmFjdCB0aGUgY29tcG9zZWQgY2hhcmFjdGVycyBmcm9tIHRoZSBmYWxsYmFjayBvYmplY3QuXG4gIC8vIElmIGNvbXBvc2l0aW9uIGV2ZW50IGlzIGF2YWlsYWJsZSwgd2UgZXh0cmFjdCBhIHN0cmluZyBvbmx5IGF0XG4gIC8vIGNvbXBvc2l0aW9uZXZlbnQsIG90aGVyd2lzZSBleHRyYWN0IGl0IGF0IGZhbGxiYWNrIGV2ZW50cy5cbiAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NvbXBvc2l0aW9uZW5kJyB8fCAhY2FuVXNlQ29tcG9zaXRpb25FdmVudCAmJiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHZhciBjaGFycyA9IGdldERhdGEoKTtcbiAgICAgIHJlc2V0KCk7XG4gICAgICBpc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGNoYXJzO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdwYXN0ZSc6XG4gICAgICAvLyBJZiBhIHBhc3RlIGV2ZW50IG9jY3VycyBhZnRlciBhIGtleXByZXNzLCB0aHJvdyBvdXQgdGhlIGlucHV0XG4gICAgICAvLyBjaGFycy4gUGFzdGUgZXZlbnRzIHNob3VsZCBub3QgbGVhZCB0byBCZWZvcmVJbnB1dCBldmVudHMuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogQXMgb2YgdjI3LCBGaXJlZm94IG1heSBmaXJlIGtleXByZXNzIGV2ZW50cyBldmVuIHdoZW4gbm8gY2hhcmFjdGVyXG4gICAgICAgKiB3aWxsIGJlIGluc2VydGVkLiBBIGZldyBwb3NzaWJpbGl0aWVzOlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyBgMGAuIEFycm93IGtleXMsIEVzYyBrZXksIGV0Yy5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBubyBjaGFyIGlzIGF2YWlsYWJsZS5cbiAgICAgICAqICAgRXg6ICdBbHRHciArIGRgIGluIFBvbGlzaC4gVGhlcmUgaXMgbm8gbW9kaWZpZWQgY2hhcmFjdGVyIGZvclxuICAgICAgICogICB0aGlzIGtleSBjb21iaW5hdGlvbiBhbmQgbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkIGludG8gdGhlXG4gICAgICAgKiAgIGRvY3VtZW50LCBidXQgRkYgZmlyZXMgdGhlIGtleXByZXNzIGZvciBjaGFyIGNvZGUgYDEwMGAgYW55d2F5LlxuICAgICAgICogICBObyBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgYSBjb21tYW5kIGNvbWJpbmF0aW9uIGlzXG4gICAgICAgKiAgIGJlaW5nIHVzZWQuIEV4OiBgQ21kK0NgLiBObyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGFuZCBub1xuICAgICAgICogICBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKi9cbiAgICAgIGlmICghaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgIC8vIElFIGZpcmVzIHRoZSBga2V5cHJlc3NgIGV2ZW50IHdoZW4gYSB1c2VyIHR5cGVzIGFuIGVtb2ppIHZpYVxuICAgICAgICAvLyBUb3VjaCBrZXlib2FyZCBvZiBXaW5kb3dzLiAgSW4gc3VjaCBhIGNhc2UsIHRoZSBgY2hhcmAgcHJvcGVydHlcbiAgICAgICAgLy8gaG9sZHMgYW4gZW1vamkgY2hhcmFjdGVyIGxpa2UgYFxcdUQ4M0RcXHVERTBBYC4gIEJlY2F1c2UgaXRzIGxlbmd0aFxuICAgICAgICAvLyBpcyAyLCB0aGUgcHJvcGVydHkgYHdoaWNoYCBkb2VzIG5vdCByZXByZXNlbnQgYW4gZW1vamkgY29ycmVjdGx5LlxuICAgICAgICAvLyBJbiBzdWNoIGEgY2FzZSwgd2UgZGlyZWN0bHkgcmV0dXJuIHRoZSBgY2hhcmAgcHJvcGVydHkgaW5zdGVhZCBvZlxuICAgICAgICAvLyB1c2luZyBgd2hpY2hgLlxuICAgICAgICBpZiAobmF0aXZlRXZlbnQuY2hhciAmJiBuYXRpdmVFdmVudC5jaGFyLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICByZXR1cm4gbmF0aXZlRXZlbnQuY2hhcjtcbiAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVFdmVudC53aGljaCkge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50LndoaWNoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJiAhaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkgPyBudWxsIDogbmF0aXZlRXZlbnQuZGF0YTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBFeHRyYWN0IGEgU3ludGhldGljSW5wdXRFdmVudCBmb3IgYGJlZm9yZUlucHV0YCwgYmFzZWQgb24gZWl0aGVyIG5hdGl2ZVxuICogYHRleHRJbnB1dGAgb3IgZmFsbGJhY2sgYmVoYXZpb3IuXG4gKlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgdmFyIGNoYXJzO1xuXG4gIGlmIChjYW5Vc2VUZXh0SW5wdXRFdmVudCkge1xuICAgIGNoYXJzID0gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBjaGFycyA9IGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSAvLyBJZiBubyBjaGFyYWN0ZXJzIGFyZSBiZWluZyBpbnNlcnRlZCwgbm8gQmVmb3JlSW5wdXQgZXZlbnQgc2hvdWxkXG4gIC8vIGJlIGZpcmVkLlxuXG5cbiAgaWYgKCFjaGFycykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCAnb25CZWZvcmVJbnB1dCcpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNJbnB1dEV2ZW50KCdvbkJlZm9yZUlucHV0JywgJ2JlZm9yZWlucHV0JywgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgICBldmVudC5kYXRhID0gY2hhcnM7XG4gIH1cbn1cbi8qKlxuICogQ3JlYXRlIGFuIGBvbkJlZm9yZUlucHV0YCBldmVudCB0byBtYXRjaFxuICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDUvI2V2ZW50cy1pbnB1dGV2ZW50cy5cbiAqXG4gKiBUaGlzIGV2ZW50IHBsdWdpbiBpcyBiYXNlZCBvbiB0aGUgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50XG4gKiBhdmFpbGFibGUgaW4gQ2hyb21lLCBTYWZhcmksIE9wZXJhLCBhbmQgSUUuIFRoaXMgZXZlbnQgZmlyZXMgYWZ0ZXJcbiAqIGBvbktleVByZXNzYCBhbmQgYG9uQ29tcG9zaXRpb25FbmRgLCBidXQgYmVmb3JlIGBvbklucHV0YC5cbiAqXG4gKiBgYmVmb3JlSW5wdXRgIGlzIHNwZWMnZCBidXQgbm90IGltcGxlbWVudGVkIGluIGFueSBicm93c2VycywgYW5kXG4gKiB0aGUgYGlucHV0YCBldmVudCBkb2VzIG5vdCBwcm92aWRlIGFueSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBoYXNcbiAqIGFjdHVhbGx5IGJlZW4gYWRkZWQsIGNvbnRyYXJ5IHRvIHRoZSBzcGVjLiBUaHVzLCBgdGV4dElucHV0YCBpcyB0aGUgYmVzdFxuICogYXZhaWxhYmxlIGV2ZW50IHRvIGlkZW50aWZ5IHRoZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGluc2VydGVkXG4gKiBpbnRvIHRoZSB0YXJnZXQgbm9kZS5cbiAqXG4gKiBUaGlzIHBsdWdpbiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBgY29tcG9zaXRpb25gIGV2ZW50cywgdGh1c1xuICogYWxsb3dpbmcgdXMgdG8gc2hhcmUgY29tcG9zaXRpb24gZmFsbGJhY2sgY29kZSBmb3IgYm90aCBgYmVmb3JlSW5wdXRgIGFuZFxuICogYGNvbXBvc2l0aW9uYCBldmVudCB0eXBlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICBleHRyYWN0Q29tcG9zaXRpb25FdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1pbnB1dC1lbGVtZW50Lmh0bWwjaW5wdXQtdHlwZS1hdHRyLXN1bW1hcnlcbiAqL1xudmFyIHN1cHBvcnRlZElucHV0VHlwZXMgPSB7XG4gIGNvbG9yOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBkYXRldGltZTogdHJ1ZSxcbiAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZSxcbiAgZW1haWw6IHRydWUsXG4gIG1vbnRoOiB0cnVlLFxuICBudW1iZXI6IHRydWUsXG4gIHBhc3N3b3JkOiB0cnVlLFxuICByYW5nZTogdHJ1ZSxcbiAgc2VhcmNoOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIHRleHQ6IHRydWUsXG4gIHRpbWU6IHRydWUsXG4gIHVybDogdHJ1ZSxcbiAgd2VlazogdHJ1ZVxufTtcblxuZnVuY3Rpb24gaXNUZXh0SW5wdXRFbGVtZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBpZiAobm9kZU5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICByZXR1cm4gISFzdXBwb3J0ZWRJbnB1dFR5cGVzW2VsZW0udHlwZV07XG4gIH1cblxuICBpZiAobm9kZU5hbWUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC5cbiAqXG4gKiBOT1RFOiBUaGlzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGZvciBub24tZ2VuZXJpYyBldmVudHMgc3VjaCBhcyBgY2hhbmdlYCxcbiAqIGByZXNldGAsIGBsb2FkYCwgYGVycm9yYCwgYW5kIGBzZWxlY3RgLlxuICpcbiAqIEJvcnJvd3MgZnJvbSBNb2Rlcm5penIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVN1ZmZpeCBFdmVudCBuYW1lLCBlLmcuIFwiY2xpY2tcIi5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IGlzIHN1cHBvcnRlZC5cbiAqIEBpbnRlcm5hbFxuICogQGxpY2Vuc2UgTW9kZXJuaXpyIDMuMC4wcHJlIChDdXN0b20gQnVpbGQpIHwgTUlUXG4gKi9cblxuZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChldmVudE5hbWVTdWZmaXgpIHtcbiAgaWYgKCFjYW5Vc2VET00pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZXZlbnROYW1lID0gJ29uJyArIGV2ZW50TmFtZVN1ZmZpeDtcbiAgdmFyIGlzU3VwcG9ydGVkID0gKGV2ZW50TmFtZSBpbiBkb2N1bWVudCk7XG5cbiAgaWYgKCFpc1N1cHBvcnRlZCkge1xuICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lLCAncmV0dXJuOycpO1xuICAgIGlzU3VwcG9ydGVkID0gdHlwZW9mIGVsZW1lbnRbZXZlbnROYW1lXSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHJldHVybiBpc1N1cHBvcnRlZDtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMSgpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNoYW5nZScsIFsnY2hhbmdlJywgJ2NsaWNrJywgJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnLCAnaW5wdXQnLCAna2V5ZG93bicsICdrZXl1cCcsICdzZWxlY3Rpb25jaGFuZ2UnXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBpbnN0LCBuYXRpdmVFdmVudCwgdGFyZ2V0KSB7XG4gIC8vIEZsYWcgdGhpcyBldmVudCBsb29wIGFzIG5lZWRpbmcgc3RhdGUgcmVzdG9yZS5cbiAgZW5xdWV1ZVN0YXRlUmVzdG9yZSh0YXJnZXQpO1xuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKGluc3QsICdvbkNoYW5nZScpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudCgnb25DaGFuZ2UnLCAnY2hhbmdlJywgbnVsbCwgbmF0aXZlRXZlbnQsIHRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gIH1cbn1cbi8qKlxuICogRm9yIElFIHNoaW1zXG4gKi9cblxuXG52YXIgYWN0aXZlRWxlbWVudCA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNoYW5nZWAgZXZlbnRcbiAqL1xuXG5mdW5jdGlvbiBzaG91bGRVc2VDaGFuZ2VFdmVudChlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbm9kZU5hbWUgPT09ICdzZWxlY3QnIHx8IG5vZGVOYW1lID09PSAnaW5wdXQnICYmIGVsZW0udHlwZSA9PT0gJ2ZpbGUnO1xufVxuXG5mdW5jdGlvbiBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkaXNwYXRjaFF1ZXVlID0gW107XG4gIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBhY3RpdmVFbGVtZW50SW5zdCwgbmF0aXZlRXZlbnQsIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSk7IC8vIElmIGNoYW5nZSBhbmQgcHJvcGVydHljaGFuZ2UgYnViYmxlZCwgd2UnZCBqdXN0IGJpbmQgdG8gaXQgbGlrZSBhbGwgdGhlXG4gIC8vIG90aGVyIGV2ZW50cyBhbmQgaGF2ZSBpdCBnbyB0aHJvdWdoIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci4gU2luY2UgaXRcbiAgLy8gZG9lc24ndCwgd2UgbWFudWFsbHkgbGlzdGVuIGZvciB0aGUgZXZlbnRzIGFuZCBzbyB3ZSBoYXZlIHRvIGVucXVldWUgYW5kXG4gIC8vIHByb2Nlc3MgdGhlIGFic3RyYWN0IGV2ZW50IG1hbnVhbGx5LlxuICAvL1xuICAvLyBCYXRjaGluZyBpcyBuZWNlc3NhcnkgaGVyZSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBhbGwgZXZlbnQgaGFuZGxlcnMgcnVuXG4gIC8vIGJlZm9yZSB0aGUgbmV4dCByZXJlbmRlciAoaW5jbHVkaW5nIGV2ZW50IGhhbmRsZXJzIGF0dGFjaGVkIHRvIGFuY2VzdG9yXG4gIC8vIGVsZW1lbnRzIGluc3RlYWQgb2YgZGlyZWN0bHkgb24gdGhlIGlucHV0KS4gV2l0aG91dCB0aGlzLCBjb250cm9sbGVkXG4gIC8vIGNvbXBvbmVudHMgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBjb25qdW5jdGlvbiB3aXRoIGV2ZW50IGJ1YmJsaW5nIGJlY2F1c2VcbiAgLy8gdGhlIGNvbXBvbmVudCBpcyByZXJlbmRlcmVkIGFuZCB0aGUgdmFsdWUgcmV2ZXJ0ZWQgYmVmb3JlIGFsbCB0aGUgZXZlbnRcbiAgLy8gaGFuZGxlcnMgY2FuIHJ1bi4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzA4LlxuXG4gIGJhdGNoZWRVcGRhdGVzKHJ1bkV2ZW50SW5CYXRjaCwgZGlzcGF0Y2hRdWV1ZSk7XG59XG5cbmZ1bmN0aW9uIHJ1bkV2ZW50SW5CYXRjaChkaXNwYXRjaFF1ZXVlKSB7XG4gIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIDApO1xufVxuXG5mdW5jdGlvbiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCkge1xuICB2YXIgdGFyZ2V0Tm9kZSA9IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCk7XG5cbiAgaWYgKHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKHRhcmdldE5vZGUpKSB7XG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgaW5wdXRgIGV2ZW50XG4gKi9cblxuXG52YXIgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gZmFsc2U7XG5cbmlmIChjYW5Vc2VET00pIHtcbiAgLy8gSUU5IGNsYWltcyB0byBzdXBwb3J0IHRoZSBpbnB1dCBldmVudCBidXQgZmFpbHMgdG8gdHJpZ2dlciBpdCB3aGVuXG4gIC8vIGRlbGV0aW5nIHRleHQsIHNvIHdlIGlnbm9yZSBpdHMgaW5wdXQgZXZlbnRzLlxuICBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBpc0V2ZW50U3VwcG9ydGVkKCdpbnB1dCcpICYmICghZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDkpO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgU3RhcnRzIHRyYWNraW5nIHByb3BlcnR5Y2hhbmdlIGV2ZW50cyBvbiB0aGUgcGFzc2VkLWluIGVsZW1lbnRcbiAqIGFuZCBvdmVycmlkZSB0aGUgdmFsdWUgcHJvcGVydHkgc28gdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggdXNlciBldmVudHMgZnJvbVxuICogdmFsdWUgY2hhbmdlcyBpbiBKUy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgYWN0aXZlRWxlbWVudCA9IHRhcmdldDtcbiAgYWN0aXZlRWxlbWVudEluc3QgPSB0YXJnZXRJbnN0O1xuICBhY3RpdmVFbGVtZW50LmF0dGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgUmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIGZyb20gdGhlIGN1cnJlbnRseS10cmFja2VkIGVsZW1lbnQsXG4gKiBpZiBhbnkgZXhpc3RzLlxuICovXG5cblxuZnVuY3Rpb24gc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKSB7XG4gIGlmICghYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFjdGl2ZUVsZW1lbnQuZGV0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG4gIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBIYW5kbGVzIGEgcHJvcGVydHljaGFuZ2UgZXZlbnQsIHNlbmRpbmcgYSBgY2hhbmdlYCBldmVudCBpZlxuICogdGhlIHZhbHVlIG9mIHRoZSBhY3RpdmUgZWxlbWVudCBoYXMgY2hhbmdlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5Q2hhbmdlKG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5wcm9wZXJ0eU5hbWUgIT09ICd2YWx1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0KSkge1xuICAgIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbChkb21FdmVudE5hbWUsIHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNpbicpIHtcbiAgICAvLyBJbiBJRTksIHByb3BlcnR5Y2hhbmdlIGZpcmVzIGZvciBtb3N0IGlucHV0IGV2ZW50cyBidXQgaXMgYnVnZ3kgYW5kXG4gICAgLy8gZG9lc24ndCBmaXJlIHdoZW4gdGV4dCBpcyBkZWxldGVkLCBidXQgY29udmVuaWVudGx5LCBzZWxlY3Rpb25jaGFuZ2VcbiAgICAvLyBhcHBlYXJzIHRvIGZpcmUgaW4gYWxsIG9mIHRoZSByZW1haW5pbmcgY2FzZXMgc28gd2UgY2F0Y2ggdGhvc2UgYW5kXG4gICAgLy8gZm9yd2FyZCB0aGUgZXZlbnQgaWYgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkXG4gICAgLy8gSW4gZWl0aGVyIGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gY2FsbCB0aGUgZXZlbnQgaGFuZGxlciBpZiB0aGUgdmFsdWVcbiAgICAvLyBpcyBjaGFuZ2VkIGZyb20gSlMgc28gd2UgcmVkZWZpbmUgYSBzZXR0ZXIgZm9yIGAudmFsdWVgIHRoYXQgdXBkYXRlc1xuICAgIC8vIG91ciBhY3RpdmVFbGVtZW50VmFsdWUgdmFyaWFibGUsIGFsbG93aW5nIHVzIHRvIGlnbm9yZSB0aG9zZSBjaGFuZ2VzXG4gICAgLy9cbiAgICAvLyBzdG9wV2F0Y2hpbmcoKSBzaG91bGQgYmUgYSBub29wIGhlcmUgYnV0IHdlIGNhbGwgaXQganVzdCBpbiBjYXNlIHdlXG4gICAgLy8gbWlzc2VkIGEgYmx1ciBldmVudCBzb21laG93LlxuICAgIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gICAgc3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SW5zdCk7XG4gIH0gZWxzZSBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNvdXQnKSB7XG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgfVxufSAvLyBGb3IgSUU4IGFuZCBJRTkuXG5cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3NlbGVjdGlvbmNoYW5nZScgfHwgZG9tRXZlbnROYW1lID09PSAna2V5dXAnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2tleWRvd24nKSB7XG4gICAgLy8gT24gdGhlIHNlbGVjdGlvbmNoYW5nZSBldmVudCwgdGhlIHRhcmdldCBpcyBqdXN0IGRvY3VtZW50IHdoaWNoIGlzbid0XG4gICAgLy8gaGVscGZ1bCBmb3IgdXMgc28ganVzdCBjaGVjayBhY3RpdmVFbGVtZW50IGluc3RlYWQuXG4gICAgLy9cbiAgICAvLyA5OSUgb2YgdGhlIHRpbWUsIGtleWRvd24gYW5kIGtleXVwIGFyZW4ndCBuZWNlc3NhcnkuIElFOCBmYWlscyB0byBmaXJlXG4gICAgLy8gcHJvcGVydHljaGFuZ2Ugb24gdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFmdGVyIHNldHRpbmcgYHZhbHVlYCBmcm9tIGFcbiAgICAvLyBzY3JpcHQgYW5kIGZpcmVzIG9ubHkga2V5ZG93biwga2V5cHJlc3MsIGtleXVwLiBDYXRjaGluZyBrZXl1cCB1c3VhbGx5XG4gICAgLy8gZ2V0cyBpdCBhbmQgY2F0Y2hpbmcga2V5ZG93biBsZXRzIHVzIGZpcmUgYW4gZXZlbnQgZm9yIHRoZSBmaXJzdFxuICAgIC8vIGtleXN0cm9rZSBpZiB1c2VyIGRvZXMgYSBrZXkgcmVwZWF0IChpdCdsbCBiZSBhIGxpdHRsZSBkZWxheWVkOiByaWdodFxuICAgIC8vIGJlZm9yZSB0aGUgc2Vjb25kIGtleXN0cm9rZSkuIE90aGVyIGlucHV0IG1ldGhvZHMgKGUuZy4sIHBhc3RlKSBzZWVtIHRvXG4gICAgLy8gZmlyZSBzZWxlY3Rpb25jaGFuZ2Ugbm9ybWFsbHkuXG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCk7XG4gIH1cbn1cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjbGlja2AgZXZlbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHNob3VsZFVzZUNsaWNrRXZlbnQoZWxlbSkge1xuICAvLyBVc2UgdGhlIGBjbGlja2AgZXZlbnQgdG8gZGV0ZWN0IGNoYW5nZXMgdG8gY2hlY2tib3ggYW5kIHJhZGlvIGlucHV0cy5cbiAgLy8gVGhpcyBhcHByb2FjaCB3b3JrcyBhY3Jvc3MgYWxsIGJyb3dzZXJzLCB3aGVyZWFzIGBjaGFuZ2VgIGRvZXMgbm90IGZpcmVcbiAgLy8gdW50aWwgYGJsdXJgIGluIElFOC5cbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIG5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgJiYgKGVsZW0udHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBlbGVtLnR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NsaWNrJykge1xuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2lucHV0JyB8fCBkb21FdmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fd3JhcHBlclN0YXRlO1xuXG4gIGlmICghc3RhdGUgfHwgIXN0YXRlLmNvbnRyb2xsZWQgfHwgbm9kZS50eXBlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICAvLyBJZiBjb250cm9sbGVkLCBhc3NpZ24gdGhlIHZhbHVlIGF0dHJpYnV0ZSB0byB0aGUgY3VycmVudCB2YWx1ZSBvbiBibHVyXG4gICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsICdudW1iZXInLCBub2RlLnZhbHVlKTtcbiAgfVxufVxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvbkNoYW5nZWAgZXZlbnQgdGhhdCBub3JtYWxpemVzIGNoYW5nZSBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLiBUaGlzIGV2ZW50IGZpcmVzIGF0IGEgdGltZSB3aGVuIGl0J3MgcG9zc2libGUgdG9cbiAqIGNoYW5nZSB0aGUgZWxlbWVudCdzIHZhbHVlIHdpdGhvdXQgc2VlaW5nIGEgZmxpY2tlci5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBzZWxlY3RcbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciB0YXJnZXROb2RlID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG4gIHZhciBnZXRUYXJnZXRJbnN0RnVuYywgaGFuZGxlRXZlbnRGdW5jO1xuXG4gIGlmIChzaG91bGRVc2VDaGFuZ2VFdmVudCh0YXJnZXROb2RlKSkge1xuICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50O1xuICB9IGVsc2UgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0YXJnZXROb2RlKSkge1xuICAgIGlmIChpc0lucHV0RXZlbnRTdXBwb3J0ZWQpIHtcbiAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgICAgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzaG91bGRVc2VDbGlja0V2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudDtcbiAgfVxuXG4gIGlmIChnZXRUYXJnZXRJbnN0RnVuYykge1xuICAgIHZhciBpbnN0ID0gZ2V0VGFyZ2V0SW5zdEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KTtcblxuICAgIGlmIChpbnN0KSB7XG4gICAgICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgaW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoaGFuZGxlRXZlbnRGdW5jKSB7XG4gICAgaGFuZGxlRXZlbnRGdW5jKGRvbUV2ZW50TmFtZSwgdGFyZ2V0Tm9kZSwgdGFyZ2V0SW5zdCk7XG4gIH0gLy8gV2hlbiBibHVycmluZywgc2V0IHRoZSB2YWx1ZSBhdHRyaWJ1dGUgZm9yIG51bWJlciBpbnB1dHNcblxuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c291dCcpIHtcbiAgICBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKHRhcmdldE5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDIoKSB7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uTW91c2VFbnRlcicsIFsnbW91c2VvdXQnLCAnbW91c2VvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvbk1vdXNlTGVhdmUnLCBbJ21vdXNlb3V0JywgJ21vdXNlb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Qb2ludGVyRW50ZXInLCBbJ3BvaW50ZXJvdXQnLCAncG9pbnRlcm92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uUG9pbnRlckxlYXZlJywgWydwb2ludGVyb3V0JywgJ3BvaW50ZXJvdmVyJ10pO1xufVxuLyoqXG4gKiBGb3IgYWxtb3N0IGV2ZXJ5IGludGVyYWN0aW9uIHdlIGNhcmUgYWJvdXQsIHRoZXJlIHdpbGwgYmUgYm90aCBhIHRvcC1sZXZlbFxuICogYG1vdXNlb3ZlcmAgYW5kIGBtb3VzZW91dGAgZXZlbnQgdGhhdCBvY2N1cnMuIE9ubHkgdXNlIGBtb3VzZW91dGAgc28gdGhhdFxuICogd2UgZG8gbm90IGV4dHJhY3QgZHVwbGljYXRlIGV2ZW50cy4gSG93ZXZlciwgbW92aW5nIHRoZSBtb3VzZSBpbnRvIHRoZVxuICogYnJvd3NlciBmcm9tIG91dHNpZGUgd2lsbCBub3QgZmlyZSBhIGBtb3VzZW91dGAgZXZlbnQuIEluIHRoaXMgY2FzZSwgd2UgdXNlXG4gKiB0aGUgYG1vdXNlb3ZlcmAgdG9wLWxldmVsIGV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQyKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGlzT3ZlckV2ZW50ID0gZG9tRXZlbnROYW1lID09PSAnbW91c2VvdmVyJyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3Zlcic7XG4gIHZhciBpc091dEV2ZW50ID0gZG9tRXZlbnROYW1lID09PSAnbW91c2VvdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdXQnO1xuXG4gIGlmIChpc092ZXJFdmVudCAmJiAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX1JFUExBWUVEKSA9PT0gMCkge1xuICAgIC8vIElmIHRoaXMgaXMgYW4gb3ZlciBldmVudCB3aXRoIGEgdGFyZ2V0LCB3ZSBtaWdodCBoYXZlIGFscmVhZHkgZGlzcGF0Y2hlZFxuICAgIC8vIHRoZSBldmVudCBpbiB0aGUgb3V0IGV2ZW50IG9mIHRoZSBvdGhlciB0YXJnZXQuIElmIHRoaXMgaXMgcmVwbGF5ZWQsXG4gICAgLy8gdGhlbiBpdCdzIGJlY2F1c2Ugd2UgY291bGRuJ3QgZGlzcGF0Y2ggYWdhaW5zdCB0aGlzIHRhcmdldCBwcmV2aW91c2x5XG4gICAgLy8gc28gd2UgaGF2ZSB0byBkbyBpdCBub3cgaW5zdGVhZC5cbiAgICB2YXIgcmVsYXRlZCA9IG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQuZnJvbUVsZW1lbnQ7XG5cbiAgICBpZiAocmVsYXRlZCkge1xuICAgICAgLy8gSWYgdGhlIHJlbGF0ZWQgbm9kZSBpcyBtYW5hZ2VkIGJ5IFJlYWN0LCB3ZSBjYW4gYXNzdW1lIHRoYXQgd2UgaGF2ZVxuICAgICAgLy8gYWxyZWFkeSBkaXNwYXRjaGVkIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50cyBkdXJpbmcgaXRzIG1vdXNlb3V0LlxuICAgICAgaWYgKGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHJlbGF0ZWQpIHx8IGlzQ29udGFpbmVyTWFya2VkQXNSb290KHJlbGF0ZWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWlzT3V0RXZlbnQgJiYgIWlzT3ZlckV2ZW50KSB7XG4gICAgLy8gTXVzdCBub3QgYmUgYSBtb3VzZSBvciBwb2ludGVyIGluIG9yIG91dCAtIGlnbm9yaW5nLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB3aW47IC8vIFRPRE86IHdoeSBpcyB0aGlzIG51bGxhYmxlIGluIHRoZSB0eXBlcyBidXQgd2UgcmVhZCBmcm9tIGl0P1xuXG4gIGlmIChuYXRpdmVFdmVudFRhcmdldC53aW5kb3cgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgLy8gYG5hdGl2ZUV2ZW50VGFyZ2V0YCBpcyBwcm9iYWJseSBhIHdpbmRvdyBvYmplY3QuXG4gICAgd2luID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgYG93bmVyRG9jdW1lbnRgIGlzIHNvbWV0aW1lcyB1bmRlZmluZWQgaW4gSUU4LlxuICAgIHZhciBkb2MgPSBuYXRpdmVFdmVudFRhcmdldC5vd25lckRvY3VtZW50O1xuXG4gICAgaWYgKGRvYykge1xuICAgICAgd2luID0gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbiA9IHdpbmRvdztcbiAgICB9XG4gIH1cblxuICB2YXIgZnJvbTtcbiAgdmFyIHRvO1xuXG4gIGlmIChpc091dEV2ZW50KSB7XG4gICAgdmFyIF9yZWxhdGVkID0gbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC50b0VsZW1lbnQ7XG5cbiAgICBmcm9tID0gdGFyZ2V0SW5zdDtcbiAgICB0byA9IF9yZWxhdGVkID8gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoX3JlbGF0ZWQpIDogbnVsbDtcblxuICAgIGlmICh0byAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0byk7XG5cbiAgICAgIGlmICh0byAhPT0gbmVhcmVzdE1vdW50ZWQgfHwgdG8udGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIHRvLnRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgICAgdG8gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBNb3ZpbmcgdG8gYSBub2RlIGZyb20gb3V0c2lkZSB0aGUgd2luZG93LlxuICAgIGZyb20gPSBudWxsO1xuICAgIHRvID0gdGFyZ2V0SW5zdDtcbiAgfVxuXG4gIGlmIChmcm9tID09PSB0bykge1xuICAgIC8vIE5vdGhpbmcgcGVydGFpbnMgdG8gb3VyIG1hbmFnZWQgY29tcG9uZW50cy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgdmFyIGxlYXZlRXZlbnRUeXBlID0gJ29uTW91c2VMZWF2ZSc7XG4gIHZhciBlbnRlckV2ZW50VHlwZSA9ICdvbk1vdXNlRW50ZXInO1xuICB2YXIgZXZlbnRUeXBlUHJlZml4ID0gJ21vdXNlJztcblxuICBpZiAoZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm91dCcgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm92ZXInKSB7XG4gICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgIGxlYXZlRXZlbnRUeXBlID0gJ29uUG9pbnRlckxlYXZlJztcbiAgICBlbnRlckV2ZW50VHlwZSA9ICdvblBvaW50ZXJFbnRlcic7XG4gICAgZXZlbnRUeXBlUHJlZml4ID0gJ3BvaW50ZXInO1xuICB9XG5cbiAgdmFyIGZyb21Ob2RlID0gZnJvbSA9PSBudWxsID8gd2luIDogZ2V0Tm9kZUZyb21JbnN0YW5jZShmcm9tKTtcbiAgdmFyIHRvTm9kZSA9IHRvID09IG51bGwgPyB3aW4gOiBnZXROb2RlRnJvbUluc3RhbmNlKHRvKTtcbiAgdmFyIGxlYXZlID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihsZWF2ZUV2ZW50VHlwZSwgZXZlbnRUeXBlUHJlZml4ICsgJ2xlYXZlJywgZnJvbSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgbGVhdmUudGFyZ2V0ID0gZnJvbU5vZGU7XG4gIGxlYXZlLnJlbGF0ZWRUYXJnZXQgPSB0b05vZGU7XG4gIHZhciBlbnRlciA9IG51bGw7IC8vIFdlIHNob3VsZCBvbmx5IHByb2Nlc3MgdGhpcyBuYXRpdmVFdmVudCBpZiB3ZSBhcmUgcHJvY2Vzc2luZ1xuICAvLyB0aGUgZmlyc3QgYW5jZXN0b3IuIE5leHQgdGltZSwgd2Ugd2lsbCBpZ25vcmUgdGhlIGV2ZW50LlxuXG4gIHZhciBuYXRpdmVUYXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChuYXRpdmVUYXJnZXRJbnN0ID09PSB0YXJnZXRJbnN0KSB7XG4gICAgdmFyIGVudGVyRXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKGVudGVyRXZlbnRUeXBlLCBldmVudFR5cGVQcmVmaXggKyAnZW50ZXInLCB0bywgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBlbnRlckV2ZW50LnRhcmdldCA9IHRvTm9kZTtcbiAgICBlbnRlckV2ZW50LnJlbGF0ZWRUYXJnZXQgPSBmcm9tTm9kZTtcbiAgICBlbnRlciA9IGVudGVyRXZlbnQ7XG4gIH1cblxuICBhY2N1bXVsYXRlRW50ZXJMZWF2ZVR3b1BoYXNlTGlzdGVuZXJzKGRpc3BhdGNoUXVldWUsIGxlYXZlLCBlbnRlciwgZnJvbSwgdG8pO1xufVxuXG4vKipcbiAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICovXG5mdW5jdGlvbiBpcyh4LCB5KSB7XG4gIHJldHVybiB4ID09PSB5ICYmICh4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSkgfHwgeCAhPT0geCAmJiB5ICE9PSB5IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIDtcbn1cblxudmFyIG9iamVjdElzID0gdHlwZW9mIE9iamVjdC5pcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC5pcyA6IGlzO1xuXG52YXIgaGFzT3duUHJvcGVydHkkMiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4vKipcbiAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4gb2JqZWN0IGFuZCByZXR1cm5pbmcgZmFsc2VcbiAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwuXG4gKi9cblxuZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKG9iamVjdElzKG9iakEsIG9iakIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8IG9iakEgPT09IG51bGwgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8IG9iakIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNBLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eSQyLmNhbGwob2JqQiwga2V5c0FbaV0pIHx8ICFvYmplY3RJcyhvYmpBW2tleXNBW2ldXSwgb2JqQltrZXlzQVtpXV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogR2l2ZW4gYW55IG5vZGUgcmV0dXJuIHRoZSBmaXJzdCBsZWFmIG5vZGUgd2l0aG91dCBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cblxuZnVuY3Rpb24gZ2V0TGVhZk5vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSAmJiBub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICBub2RlID0gbm9kZS5maXJzdENoaWxkO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG4vKipcbiAqIEdldCB0aGUgbmV4dCBzaWJsaW5nIHdpdGhpbiBhIGNvbnRhaW5lci4gVGhpcyB3aWxsIHdhbGsgdXAgdGhlXG4gKiBET00gaWYgYSBub2RlJ3Mgc2libGluZ3MgaGF2ZSBiZWVuIGV4aGF1c3RlZC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4gez9ET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0U2libGluZ05vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9XG59XG4vKipcbiAqIEdldCBvYmplY3QgZGVzY3JpYmluZyB0aGUgbm9kZXMgd2hpY2ggY29udGFpbiBjaGFyYWN0ZXJzIGF0IG9mZnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IHJvb3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KHJvb3QsIG9mZnNldCkge1xuICB2YXIgbm9kZSA9IGdldExlYWZOb2RlKHJvb3QpO1xuICB2YXIgbm9kZVN0YXJ0ID0gMDtcbiAgdmFyIG5vZGVFbmQgPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgbm9kZUVuZCA9IG5vZGVTdGFydCArIG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZVN0YXJ0IDw9IG9mZnNldCAmJiBub2RlRW5kID49IG9mZnNldCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQgLSBub2RlU3RhcnRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbm9kZVN0YXJ0ID0gbm9kZUVuZDtcbiAgICB9XG5cbiAgICBub2RlID0gZ2V0TGVhZk5vZGUoZ2V0U2libGluZ05vZGUobm9kZSkpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBvdXRlck5vZGVcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gZ2V0T2Zmc2V0cyhvdXRlck5vZGUpIHtcbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBvdXRlck5vZGUub3duZXJEb2N1bWVudDtcbiAgdmFyIHdpbiA9IG93bmVyRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uICYmIHdpbi5nZXRTZWxlY3Rpb24oKTtcblxuICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGFuY2hvck5vZGUgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQgPSBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7IC8vIEluIEZpcmVmb3gsIGFuY2hvck5vZGUgYW5kIGZvY3VzTm9kZSBjYW4gYmUgXCJhbm9ueW1vdXMgZGl2c1wiLCBlLmcuIHRoZVxuICAvLyB1cC9kb3duIGJ1dHRvbnMgb24gYW4gPGlucHV0IHR5cGU9XCJudW1iZXJcIj4uIEFub255bW91cyBkaXZzIGRvIG5vdCBzZWVtIHRvXG4gIC8vIGV4cG9zZSBwcm9wZXJ0aWVzLCB0cmlnZ2VyaW5nIGEgXCJQZXJtaXNzaW9uIGRlbmllZCBlcnJvclwiIGlmIGFueSBvZiBpdHNcbiAgLy8gcHJvcGVydGllcyBhcmUgYWNjZXNzZWQuIFRoZSBvbmx5IHNlZW1pbmdseSBwb3NzaWJsZSB3YXkgdG8gYXZvaWQgZXJyb3JpbmdcbiAgLy8gaXMgdG8gYWNjZXNzIGEgcHJvcGVydHkgdGhhdCB0eXBpY2FsbHkgd29ya3MgZm9yIG5vbi1hbm9ueW1vdXMgZGl2cyBhbmRcbiAgLy8gY2F0Y2ggYW55IGVycm9yIHRoYXQgbWF5IG90aGVyd2lzZSBhcmlzZS4gU2VlXG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQyN1xuXG4gIHRyeSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gICAgYW5jaG9yTm9kZS5ub2RlVHlwZTtcbiAgICBmb2N1c05vZGUubm9kZVR5cGU7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGdldE1vZGVybk9mZnNldHNGcm9tUG9pbnRzKG91dGVyTm9kZSwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbn1cbi8qKlxuICogUmV0dXJucyB7c3RhcnQsIGVuZH0gd2hlcmUgYHN0YXJ0YCBpcyB0aGUgY2hhcmFjdGVyL2NvZGVwb2ludCBpbmRleCBvZlxuICogKGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCkgd2l0aGluIHRoZSB0ZXh0Q29udGVudCBvZiBgb3V0ZXJOb2RlYCwgYW5kXG4gKiBgZW5kYCBpcyB0aGUgaW5kZXggb2YgKGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpLlxuICpcbiAqIFJldHVybnMgbnVsbCBpZiB5b3UgcGFzcyBpbiBnYXJiYWdlIGlucHV0IGJ1dCB3ZSBzaG91bGQgcHJvYmFibHkganVzdCBjcmFzaC5cbiAqXG4gKiBFeHBvcnRlZCBvbmx5IGZvciB0ZXN0aW5nLlxuICovXG5cbmZ1bmN0aW9uIGdldE1vZGVybk9mZnNldHNGcm9tUG9pbnRzKG91dGVyTm9kZSwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KSB7XG4gIHZhciBsZW5ndGggPSAwO1xuICB2YXIgc3RhcnQgPSAtMTtcbiAgdmFyIGVuZCA9IC0xO1xuICB2YXIgaW5kZXhXaXRoaW5BbmNob3IgPSAwO1xuICB2YXIgaW5kZXhXaXRoaW5Gb2N1cyA9IDA7XG4gIHZhciBub2RlID0gb3V0ZXJOb2RlO1xuICB2YXIgcGFyZW50Tm9kZSA9IG51bGw7XG5cbiAgb3V0ZXI6IHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIG5leHQgPSBudWxsO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlID09PSBhbmNob3JOb2RlICYmIChhbmNob3JPZmZzZXQgPT09IDAgfHwgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSkge1xuICAgICAgICBzdGFydCA9IGxlbmd0aCArIGFuY2hvck9mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZvY3VzTm9kZSAmJiAoZm9jdXNPZmZzZXQgPT09IDAgfHwgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSkge1xuICAgICAgICBlbmQgPSBsZW5ndGggKyBmb2N1c09mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgICBsZW5ndGggKz0gbm9kZS5ub2RlVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAoKG5leHQgPSBub2RlLmZpcnN0Q2hpbGQpID09PSBudWxsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBNb3ZpbmcgZnJvbSBgbm9kZWAgdG8gaXRzIGZpcnN0IGNoaWxkIGBuZXh0YC5cblxuXG4gICAgICBwYXJlbnROb2RlID0gbm9kZTtcbiAgICAgIG5vZGUgPSBuZXh0O1xuICAgIH1cblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZSA9PT0gb3V0ZXJOb2RlKSB7XG4gICAgICAgIC8vIElmIGBvdXRlck5vZGVgIGhhcyBjaGlsZHJlbiwgdGhpcyBpcyBhbHdheXMgdGhlIHNlY29uZCB0aW1lIHZpc2l0aW5nXG4gICAgICAgIC8vIGl0LiBJZiBpdCBoYXMgbm8gY2hpbGRyZW4sIHRoaXMgaXMgc3RpbGwgdGhlIGZpcnN0IGxvb3AsIGFuZCB0aGUgb25seVxuICAgICAgICAvLyB2YWxpZCBzZWxlY3Rpb24gaXMgYW5jaG9yTm9kZSBhbmQgZm9jdXNOb2RlIGJvdGggZXF1YWwgdG8gdGhpcyBub2RlXG4gICAgICAgIC8vIGFuZCBib3RoIG9mZnNldHMgMCwgaW4gd2hpY2ggY2FzZSB3ZSB3aWxsIGhhdmUgaGFuZGxlZCBhYm92ZS5cbiAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnROb2RlID09PSBhbmNob3JOb2RlICYmICsraW5kZXhXaXRoaW5BbmNob3IgPT09IGFuY2hvck9mZnNldCkge1xuICAgICAgICBzdGFydCA9IGxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGZvY3VzTm9kZSAmJiArK2luZGV4V2l0aGluRm9jdXMgPT09IGZvY3VzT2Zmc2V0KSB7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKChuZXh0ID0gbm9kZS5uZXh0U2libGluZykgIT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBwYXJlbnROb2RlO1xuICAgICAgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9IC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgbmV4dCBzaWJsaW5nIGBuZXh0YC5cblxuXG4gICAgbm9kZSA9IG5leHQ7XG4gIH1cblxuICBpZiAoc3RhcnQgPT09IC0xIHx8IGVuZCA9PT0gLTEpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uIChXb3VsZCBoYXBwZW4gaWYgdGhlIGFuY2hvci9mb2N1cyBub2RlcyBhcmVuJ3RcbiAgICAvLyBhY3R1YWxseSBpbnNpZGUgdGhlIHBhc3NlZC1pbiBub2RlLilcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kXG4gIH07XG59XG4vKipcbiAqIEluIG1vZGVybiBub24tSUUgYnJvd3NlcnMsIHdlIGNhbiBzdXBwb3J0IGJvdGggZm9yd2FyZCBhbmQgYmFja3dhcmRcbiAqIHNlbGVjdGlvbnMuXG4gKlxuICogTm90ZTogSUUxMCsgc3VwcG9ydHMgdGhlIFNlbGVjdGlvbiBvYmplY3QsIGJ1dCBpdCBkb2VzIG5vdCBzdXBwb3J0XG4gKiB0aGUgYGV4dGVuZGAgbWV0aG9kLCB3aGljaCBtZWFucyB0aGF0IGV2ZW4gaW4gbW9kZXJuIElFLCBpdCdzIG5vdCBwb3NzaWJsZVxuICogdG8gcHJvZ3JhbW1hdGljYWxseSBjcmVhdGUgYSBiYWNrd2FyZCBzZWxlY3Rpb24uIFRodXMsIGZvciBhbGwgSUVcbiAqIHZlcnNpb25zLCB3ZSB1c2UgdGhlIG9sZCBJRSBBUEkgdG8gY3JlYXRlIG91ciBzZWxlY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IG9mZnNldHNcbiAqL1xuXG5mdW5jdGlvbiBzZXRPZmZzZXRzKG5vZGUsIG9mZnNldHMpIHtcbiAgdmFyIGRvYyA9IG5vZGUub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcbiAgdmFyIHdpbiA9IGRvYyAmJiBkb2MuZGVmYXVsdFZpZXcgfHwgd2luZG93OyAvLyBFZGdlIGZhaWxzIHdpdGggXCJPYmplY3QgZXhwZWN0ZWRcIiBpbiBzb21lIHNjZW5hcmlvcy5cbiAgLy8gKEZvciBpbnN0YW5jZTogVGlueU1DRSBlZGl0b3IgdXNlZCBpbiBhIGxpc3QgY29tcG9uZW50IHRoYXQgc3VwcG9ydHMgcGFzdGluZyB0byBhZGQgbW9yZSxcbiAgLy8gZmFpbHMgd2hlbiBwYXN0aW5nIDEwMCsgaXRlbXMpXG5cbiAgaWYgKCF3aW4uZ2V0U2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24oKTtcbiAgdmFyIGxlbmd0aCA9IG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICB2YXIgc3RhcnQgPSBNYXRoLm1pbihvZmZzZXRzLnN0YXJ0LCBsZW5ndGgpO1xuICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQgPT09IHVuZGVmaW5lZCA/IHN0YXJ0IDogTWF0aC5taW4ob2Zmc2V0cy5lbmQsIGxlbmd0aCk7IC8vIElFIDExIHVzZXMgbW9kZXJuIHNlbGVjdGlvbiwgYnV0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZXh0ZW5kIG1ldGhvZC5cbiAgLy8gRmxpcCBiYWNrd2FyZCBzZWxlY3Rpb25zLCBzbyB3ZSBjYW4gc2V0IHdpdGggYSBzaW5nbGUgcmFuZ2UuXG5cbiAgaWYgKCFzZWxlY3Rpb24uZXh0ZW5kICYmIHN0YXJ0ID4gZW5kKSB7XG4gICAgdmFyIHRlbXAgPSBlbmQ7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSB0ZW1wO1xuICB9XG5cbiAgdmFyIHN0YXJ0TWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBzdGFydCk7XG4gIHZhciBlbmRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIGVuZCk7XG5cbiAgaWYgKHN0YXJ0TWFya2VyICYmIGVuZE1hcmtlcikge1xuICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMSAmJiBzZWxlY3Rpb24uYW5jaG9yTm9kZSA9PT0gc3RhcnRNYXJrZXIubm9kZSAmJiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0ID09PSBzdGFydE1hcmtlci5vZmZzZXQgJiYgc2VsZWN0aW9uLmZvY3VzTm9kZSA9PT0gZW5kTWFya2VyLm5vZGUgJiYgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0ID09PSBlbmRNYXJrZXIub2Zmc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJhbmdlID0gZG9jLmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnRNYXJrZXIubm9kZSwgc3RhcnRNYXJrZXIub2Zmc2V0KTtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgICBzZWxlY3Rpb24uZXh0ZW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2Uuc2V0RW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREU7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICBpZiAoIW91dGVyTm9kZSB8fCAhaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZSA9PT0gaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShvdXRlck5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUoaW5uZXJOb2RlKSkge1xuICAgIHJldHVybiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUucGFyZW50Tm9kZSk7XG4gIH0gZWxzZSBpZiAoJ2NvbnRhaW5zJyBpbiBvdXRlck5vZGUpIHtcbiAgICByZXR1cm4gb3V0ZXJOb2RlLmNvbnRhaW5zKGlubmVyTm9kZSk7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuICEhKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihpbm5lck5vZGUpICYgMTYpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luRG9jdW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm93bmVyRG9jdW1lbnQgJiYgY29udGFpbnNOb2RlKG5vZGUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVPcmlnaW5GcmFtZShpZnJhbWUpIHtcbiAgdHJ5IHtcbiAgICAvLyBBY2Nlc3NpbmcgdGhlIGNvbnRlbnREb2N1bWVudCBvZiBhIEhUTUxJZnJhbWVFbGVtZW50IGNhbiBjYXVzZSB0aGUgYnJvd3NlclxuICAgIC8vIHRvIHRocm93LCBlLmcuIGlmIGl0IGhhcyBhIGNyb3NzLW9yaWdpbiBzcmMgYXR0cmlidXRlLlxuICAgIC8vIFNhZmFyaSB3aWxsIHNob3cgYW4gZXJyb3IgaW4gdGhlIGNvbnNvbGUgd2hlbiB0aGUgYWNjZXNzIHJlc3VsdHMgaW4gXCJCbG9ja2VkIGEgZnJhbWUgd2l0aCBvcmlnaW5cIi4gZS5nOlxuICAgIC8vIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgLy8gQSBzYWZldHkgd2F5IGlzIHRvIGFjY2VzcyBvbmUgb2YgdGhlIGNyb3NzIG9yaWdpbiBwcm9wZXJ0aWVzOiBXaW5kb3cgb3IgTG9jYXRpb25cbiAgICAvLyBXaGljaCBtaWdodCByZXN1bHQgaW4gXCJTZWN1cml0eUVycm9yXCIgRE9NIEV4Y2VwdGlvbiBhbmQgaXQgaXMgY29tcGF0aWJsZSB0byBTYWZhcmkuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvYnJvd3NlcnMuaHRtbCNpbnRlZ3JhdGlvbi13aXRoLWlkbFxuICAgIHJldHVybiB0eXBlb2YgaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9PT0gJ3N0cmluZyc7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50RGVlcCgpIHtcbiAgdmFyIHdpbiA9IHdpbmRvdztcbiAgdmFyIGVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KCk7XG5cbiAgd2hpbGUgKGVsZW1lbnQgaW5zdGFuY2VvZiB3aW4uSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICBpZiAoaXNTYW1lT3JpZ2luRnJhbWUoZWxlbWVudCkpIHtcbiAgICAgIHdpbiA9IGVsZW1lbnQuY29udGVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQod2luLmRvY3VtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuLyoqXG4gKiBAUmVhY3RJbnB1dFNlbGVjdGlvbjogUmVhY3QgaW5wdXQgc2VsZWN0aW9uIG1vZHVsZS4gQmFzZWQgb24gU2VsZWN0aW9uLmpzLFxuICogYnV0IG1vZGlmaWVkIHRvIGJlIHN1aXRhYmxlIGZvciByZWFjdCBhbmQgaGFzIGEgY291cGxlIG9mIGJ1ZyBmaXhlcyAoZG9lc24ndFxuICogYXNzdW1lIGJ1dHRvbnMgaGF2ZSByYW5nZSBzZWxlY3Rpb25zIGFsbG93ZWQpLlxuICogSW5wdXQgc2VsZWN0aW9uIG1vZHVsZSBmb3IgUmVhY3QuXG4gKi9cblxuLyoqXG4gKiBAaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzOiB3ZSBnZXQgdGhlIGVsZW1lbnQgdHlwZXMgdGhhdCBzdXBwb3J0IHNlbGVjdGlvblxuICogZnJvbSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkby1ub3QtYXBwbHksIGxvb2tpbmcgYXQgYHNlbGVjdGlvblN0YXJ0YFxuICogYW5kIGBzZWxlY3Rpb25FbmRgIHJvd3MuXG4gKi9cblxuXG5mdW5jdGlvbiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgKG5vZGVOYW1lID09PSAnaW5wdXQnICYmIChlbGVtLnR5cGUgPT09ICd0ZXh0JyB8fCBlbGVtLnR5cGUgPT09ICdzZWFyY2gnIHx8IGVsZW0udHlwZSA9PT0gJ3RlbCcgfHwgZWxlbS50eXBlID09PSAndXJsJyB8fCBlbGVtLnR5cGUgPT09ICdwYXNzd29yZCcpIHx8IG5vZGVOYW1lID09PSAndGV4dGFyZWEnIHx8IGVsZW0uY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpO1xufVxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24oKSB7XG4gIHZhciBmb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKCk7XG4gIHJldHVybiB7XG4gICAgZm9jdXNlZEVsZW06IGZvY3VzZWRFbGVtLFxuICAgIHNlbGVjdGlvblJhbmdlOiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZm9jdXNlZEVsZW0pID8gZ2V0U2VsZWN0aW9uKGZvY3VzZWRFbGVtKSA6IG51bGxcbiAgfTtcbn1cbi8qKlxuICogQHJlc3RvcmVTZWxlY3Rpb246IElmIGFueSBzZWxlY3Rpb24gaW5mb3JtYXRpb24gd2FzIHBvdGVudGlhbGx5IGxvc3QsXG4gKiByZXN0b3JlIGl0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIHJlbW92ZSBkb21cbiAqIG5vZGVzIGFuZCBwbGFjZSB0aGVtIGJhY2sgaW4sIHJlc3VsdGluZyBpbiBmb2N1cyBiZWluZyBsb3N0LlxuICovXG5cbmZ1bmN0aW9uIHJlc3RvcmVTZWxlY3Rpb24ocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbikge1xuICB2YXIgY3VyRm9jdXNlZEVsZW0gPSBnZXRBY3RpdmVFbGVtZW50RGVlcCgpO1xuICB2YXIgcHJpb3JGb2N1c2VkRWxlbSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uZm9jdXNlZEVsZW07XG4gIHZhciBwcmlvclNlbGVjdGlvblJhbmdlID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5zZWxlY3Rpb25SYW5nZTtcblxuICBpZiAoY3VyRm9jdXNlZEVsZW0gIT09IHByaW9yRm9jdXNlZEVsZW0gJiYgaXNJbkRvY3VtZW50KHByaW9yRm9jdXNlZEVsZW0pKSB7XG4gICAgaWYgKHByaW9yU2VsZWN0aW9uUmFuZ2UgIT09IG51bGwgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKHByaW9yRm9jdXNlZEVsZW0pKSB7XG4gICAgICBzZXRTZWxlY3Rpb24ocHJpb3JGb2N1c2VkRWxlbSwgcHJpb3JTZWxlY3Rpb25SYW5nZSk7XG4gICAgfSAvLyBGb2N1c2luZyBhIG5vZGUgY2FuIGNoYW5nZSB0aGUgc2Nyb2xsIHBvc2l0aW9uLCB3aGljaCBpcyB1bmRlc2lyYWJsZVxuXG5cbiAgICB2YXIgYW5jZXN0b3JzID0gW107XG4gICAgdmFyIGFuY2VzdG9yID0gcHJpb3JGb2N1c2VkRWxlbTtcblxuICAgIHdoaWxlIChhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUpIHtcbiAgICAgIGlmIChhbmNlc3Rvci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIGFuY2VzdG9ycy5wdXNoKHtcbiAgICAgICAgICBlbGVtZW50OiBhbmNlc3RvcixcbiAgICAgICAgICBsZWZ0OiBhbmNlc3Rvci5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHRvcDogYW5jZXN0b3Iuc2Nyb2xsVG9wXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cygpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW5jZXN0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IGFuY2VzdG9yc1tpXTtcbiAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxMZWZ0ID0gaW5mby5sZWZ0O1xuICAgICAgaW5mby5lbGVtZW50LnNjcm9sbFRvcCA9IGluZm8udG9wO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBAZ2V0U2VsZWN0aW9uOiBHZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgZm9jdXNlZCB0ZXh0YXJlYSwgaW5wdXQgb3JcbiAqIGNvbnRlbnRFZGl0YWJsZSBub2RlLlxuICogLUBpbnB1dDogTG9vayB1cCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXRcbiAqIC1AcmV0dXJuIHtzdGFydDogc2VsZWN0aW9uU3RhcnQsIGVuZDogc2VsZWN0aW9uRW5kfVxuICovXG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbihpbnB1dCkge1xuICB2YXIgc2VsZWN0aW9uO1xuXG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgLy8gTW9kZXJuIGJyb3dzZXIgd2l0aCBpbnB1dCBvciB0ZXh0YXJlYS5cbiAgICBzZWxlY3Rpb24gPSB7XG4gICAgICBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gQ29udGVudCBlZGl0YWJsZSBvciBvbGQgSUUgdGV4dGFyZWEuXG4gICAgc2VsZWN0aW9uID0gZ2V0T2Zmc2V0cyhpbnB1dCk7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0aW9uIHx8IHtcbiAgICBzdGFydDogMCxcbiAgICBlbmQ6IDBcbiAgfTtcbn1cbi8qKlxuICogQHNldFNlbGVjdGlvbjogU2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIHRleHRhcmVhIG9yIGlucHV0IGFuZCBmb2N1c2VzXG4gKiB0aGUgaW5wdXQuXG4gKiAtQGlucHV0ICAgICBTZXQgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0IG9yIHRleHRhcmVhXG4gKiAtQG9mZnNldHMgICBPYmplY3Qgb2Ygc2FtZSBmb3JtIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBnZXQqXG4gKi9cblxuZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGlucHV0LCBvZmZzZXRzKSB7XG4gIHZhciBzdGFydCA9IG9mZnNldHMuc3RhcnQ7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZDtcblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSBzdGFydDtcbiAgfVxuXG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcbiAgICBpbnB1dC5zZWxlY3Rpb25FbmQgPSBNYXRoLm1pbihlbmQsIGlucHV0LnZhbHVlLmxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgc2V0T2Zmc2V0cyhpbnB1dCwgb2Zmc2V0cyk7XG4gIH1cbn1cblxudmFyIHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCA9IGNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUgPD0gMTE7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDMoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25TZWxlY3QnLCBbJ2ZvY3Vzb3V0JywgJ2NvbnRleHRtZW51JywgJ2RyYWdlbmQnLCAnZm9jdXNpbicsICdrZXlkb3duJywgJ2tleXVwJywgJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ3NlbGVjdGlvbmNoYW5nZSddKTtcbn1cblxudmFyIGFjdGl2ZUVsZW1lbnQkMSA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGw7XG52YXIgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG52YXIgbW91c2VEb3duID0gZmFsc2U7XG4vKipcbiAqIEdldCBhbiBvYmplY3Qgd2hpY2ggaXMgYSB1bmlxdWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLlxuICpcbiAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBub3QgYmUgY29uc2lzdGVudCBhY3Jvc3Mgbm9kZXMgb3IgYnJvd3NlcnMsIGJ1dFxuICogdHdvIGlkZW50aWNhbCBzZWxlY3Rpb25zIG9uIHRoZSBzYW1lIG5vZGUgd2lsbCByZXR1cm4gaWRlbnRpY2FsIG9iamVjdHMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uJDEobm9kZSkge1xuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBub2RlICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhub2RlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogbm9kZS5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogbm9kZS5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHZhciB3aW4gPSBub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICAgIHJldHVybiB7XG4gICAgICBhbmNob3JOb2RlOiBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgIGFuY2hvck9mZnNldDogc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZTogc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0OiBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICB9O1xuICB9XG59XG4vKipcbiAqIEdldCBkb2N1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50IHRhcmdldC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQoZXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIGV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gZXZlbnRUYXJnZXQgPyBldmVudFRhcmdldC5kb2N1bWVudCA6IGV2ZW50VGFyZ2V0Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gZXZlbnRUYXJnZXQgOiBldmVudFRhcmdldC5vd25lckRvY3VtZW50O1xufVxuLyoqXG4gKiBQb2xsIHNlbGVjdGlvbiB0byBzZWUgd2hldGhlciBpdCdzIGNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRUYXJnZXRcbiAqIEByZXR1cm4gez9TeW50aGV0aWNFdmVudH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZWxlbWVudCwgYW5kIHRoYXQgdGhlIHVzZXIgaXMgbm90IGRyYWdnaW5nIGFcbiAgLy8gc2VsZWN0aW9uICh0aGlzIG1hdGNoZXMgbmF0aXZlIGBzZWxlY3RgIGV2ZW50IGJlaGF2aW9yKS4gSW4gSFRNTDUsIHNlbGVjdFxuICAvLyBmaXJlcyBvbmx5IG9uIGlucHV0IGFuZCB0ZXh0YXJlYSB0aHVzIGlmIHRoZXJlJ3Mgbm8gZm9jdXNlZCBlbGVtZW50IHdlXG4gIC8vIHdvbid0IGRpc3BhdGNoLlxuICB2YXIgZG9jID0gZ2V0RXZlbnRUYXJnZXREb2N1bWVudChuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKG1vdXNlRG93biB8fCBhY3RpdmVFbGVtZW50JDEgPT0gbnVsbCB8fCBhY3RpdmVFbGVtZW50JDEgIT09IGdldEFjdGl2ZUVsZW1lbnQoZG9jKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBPbmx5IGZpcmUgd2hlbiBzZWxlY3Rpb24gaGFzIGFjdHVhbGx5IGNoYW5nZWQuXG5cblxuICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbiQxKGFjdGl2ZUVsZW1lbnQkMSk7XG5cbiAgaWYgKCFsYXN0U2VsZWN0aW9uIHx8ICFzaGFsbG93RXF1YWwobGFzdFNlbGVjdGlvbiwgY3VycmVudFNlbGVjdGlvbikpIHtcbiAgICBsYXN0U2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbjtcbiAgICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKGFjdGl2ZUVsZW1lbnRJbnN0JDEsICdvblNlbGVjdCcpO1xuXG4gICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoJ29uU2VsZWN0JywgJ3NlbGVjdCcsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgICB9KTtcbiAgICAgIGV2ZW50LnRhcmdldCA9IGFjdGl2ZUVsZW1lbnQkMTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyBhbiBgb25TZWxlY3RgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBzZWxlY3QgZXZlbnRzXG4gKiBhY3Jvc3MgZm9ybSBlbGVtZW50cy5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBjb250ZW50RWRpdGFibGVcbiAqXG4gKiBUaGlzIGRpZmZlcnMgZnJvbSBuYXRpdmUgYnJvd3NlciBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB3YXlzOlxuICogLSBGaXJlcyBvbiBjb250ZW50RWRpdGFibGUgZmllbGRzIGFzIHdlbGwgYXMgaW5wdXRzLlxuICogLSBGaXJlcyBmb3IgY29sbGFwc2VkIHNlbGVjdGlvbi5cbiAqIC0gRmlyZXMgYWZ0ZXIgdXNlciBpbnB1dC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG5cbiAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIC8vIFRyYWNrIHRoZSBpbnB1dCBub2RlIHRoYXQgaGFzIGZvY3VzLlxuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0YXJnZXROb2RlKSB8fCB0YXJnZXROb2RlLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQkMSA9IHRhcmdldE5vZGU7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSB0YXJnZXRJbnN0O1xuICAgICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICBhY3RpdmVFbGVtZW50JDEgPSBudWxsO1xuICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGw7XG4gICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuICAgIC8vIERvbid0IGZpcmUgdGhlIGV2ZW50IHdoaWxlIHRoZSB1c2VyIGlzIGRyYWdnaW5nLiBUaGlzIG1hdGNoZXMgdGhlXG4gICAgLy8gc2VtYW50aWNzIG9mIHRoZSBuYXRpdmUgc2VsZWN0IGV2ZW50LlxuXG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICAgIG1vdXNlRG93biA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NvbnRleHRtZW51JzpcbiAgICBjYXNlICdtb3VzZXVwJzpcbiAgICBjYXNlICdkcmFnZW5kJzpcbiAgICAgIG1vdXNlRG93biA9IGZhbHNlO1xuICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIGJyZWFrO1xuICAgIC8vIENocm9tZSBhbmQgSUUgZmlyZSBub24tc3RhbmRhcmQgZXZlbnQgd2hlbiBzZWxlY3Rpb24gaXMgY2hhbmdlZCAoYW5kXG4gICAgLy8gc29tZXRpbWVzIHdoZW4gaXQgaGFzbid0KS4gSUUncyBldmVudCBmaXJlcyBvdXQgb2Ygb3JkZXIgd2l0aCByZXNwZWN0XG4gICAgLy8gdG8ga2V5IGFuZCBpbnB1dCBldmVudHMgb24gZGVsZXRpb24sIHNvIHdlIGRpc2NhcmQgaXQuXG4gICAgLy9cbiAgICAvLyBGaXJlZm94IGRvZXNuJ3Qgc3VwcG9ydCBzZWxlY3Rpb25jaGFuZ2UsIHNvIGNoZWNrIHNlbGVjdGlvbiBzdGF0dXNcbiAgICAvLyBhZnRlciBlYWNoIGtleSBlbnRyeS4gVGhlIHNlbGVjdGlvbiBjaGFuZ2VzIGFmdGVyIGtleWRvd24gYW5kIGJlZm9yZVxuICAgIC8vIGtleXVwLCBidXQgd2UgY2hlY2sgb24ga2V5ZG93biBhcyB3ZWxsIGluIHRoZSBjYXNlIG9mIGhvbGRpbmcgZG93biBhXG4gICAgLy8ga2V5LCB3aGVuIG11bHRpcGxlIGtleWRvd24gZXZlbnRzIGFyZSBmaXJlZCBidXQgb25seSBvbmUga2V5dXAgaXMuXG4gICAgLy8gVGhpcyBpcyBhbHNvIG91ciBhcHByb2FjaCBmb3IgSUUgaGFuZGxpbmcsIGZvciB0aGUgcmVhc29uIGFib3ZlLlxuXG4gICAgY2FzZSAnc2VsZWN0aW9uY2hhbmdlJzpcbiAgICAgIGlmIChza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAvLyBmYWxscyB0aHJvdWdoXG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkNChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciByZWFjdE5hbWUgPSB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcy5nZXQoZG9tRXZlbnROYW1lKTtcblxuICBpZiAocmVhY3ROYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRXZlbnQ7XG4gIHZhciByZWFjdEV2ZW50VHlwZSA9IGRvbUV2ZW50TmFtZTtcblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGtleXByZXNzIGV2ZW50IGZvciBmdW5jdGlvbiBrZXlzIHRvby4gVGhpcyByZW1vdmVzXG4gICAgICAvLyB0aGUgdW53YW50ZWQga2V5cHJlc3MgZXZlbnRzLiBFbnRlciBpcyBob3dldmVyIGJvdGggcHJpbnRhYmxlIGFuZFxuICAgICAgLy8gbm9uLXByaW50YWJsZS4gT25lIHdvdWxkIGV4cGVjdCBUYWIgdG8gYmUgYXMgd2VsbCAoYnV0IGl0IGlzbid0KS5cbiAgICAgIGlmIChnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIHJlYWN0RXZlbnRUeXBlID0gJ2ZvY3VzJztcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIHJlYWN0RXZlbnRUeXBlID0gJ2JsdXInO1xuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYmVmb3JlYmx1cic6XG4gICAgY2FzZSAnYWZ0ZXJibHVyJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGNsaWNrIGV2ZW50IG9uIHJpZ2h0IG1vdXNlIGNsaWNrcy4gVGhpcyByZW1vdmVzIHRoZVxuICAgICAgLy8gdW53YW50ZWQgY2xpY2sgZXZlbnRzLlxuICAgICAgaWYgKG5hdGl2ZUV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdhdXhjbGljayc6XG4gICAgY2FzZSAnZGJsY2xpY2snOlxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgY2FzZSAnbW91c2Vtb3ZlJzpcbiAgICBjYXNlICdtb3VzZXVwJzogLy8gVE9ETzogRGlzYWJsZWQgZWxlbWVudHMgc2hvdWxkIG5vdCByZXNwb25kIHRvIG1vdXNlIGV2ZW50c1xuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAnbW91c2VvdXQnOlxuICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgY2FzZSAnY29udGV4dG1lbnUnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZHJhZyc6XG4gICAgY2FzZSAnZHJhZ2VuZCc6XG4gICAgY2FzZSAnZHJhZ2VudGVyJzpcbiAgICBjYXNlICdkcmFnZXhpdCc6XG4gICAgY2FzZSAnZHJhZ2xlYXZlJzpcbiAgICBjYXNlICdkcmFnb3Zlcic6XG4gICAgY2FzZSAnZHJhZ3N0YXJ0JzpcbiAgICBjYXNlICdkcm9wJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0RyYWdFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndG91Y2hjYW5jZWwnOlxuICAgIGNhc2UgJ3RvdWNoZW5kJzpcbiAgICBjYXNlICd0b3VjaG1vdmUnOlxuICAgIGNhc2UgJ3RvdWNoc3RhcnQnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVG91Y2hFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBBTklNQVRJT05fRU5EOlxuICAgIGNhc2UgQU5JTUFUSU9OX0lURVJBVElPTjpcbiAgICBjYXNlIEFOSU1BVElPTl9TVEFSVDpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFRSQU5TSVRJT05fRU5EOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVHJhbnNpdGlvbkV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzY3JvbGwnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVUlFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnd2hlZWwnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljV2hlZWxFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY29weSc6XG4gICAgY2FzZSAnY3V0JzpcbiAgICBjYXNlICdwYXN0ZSc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNDbGlwYm9hcmRFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ2xvc3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAncG9pbnRlcmNhbmNlbCc6XG4gICAgY2FzZSAncG9pbnRlcmRvd24nOlxuICAgIGNhc2UgJ3BvaW50ZXJtb3ZlJzpcbiAgICBjYXNlICdwb2ludGVyb3V0JzpcbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgY2FzZSAncG9pbnRlcnVwJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIGluQ2FwdHVyZVBoYXNlID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19DQVBUVVJFX1BIQVNFKSAhPT0gMDtcblxuICB7XG4gICAgLy8gU29tZSBldmVudHMgZG9uJ3QgYnViYmxlIGluIHRoZSBicm93c2VyLlxuICAgIC8vIEluIHRoZSBwYXN0LCBSZWFjdCBoYXMgYWx3YXlzIGJ1YmJsZWQgdGhlbSwgYnV0IHRoaXMgY2FuIGJlIHN1cnByaXNpbmcuXG4gICAgLy8gV2UncmUgZ29pbmcgdG8gdHJ5IGFsaWduaW5nIGNsb3NlciB0byB0aGUgYnJvd3NlciBiZWhhdmlvciBieSBub3QgYnViYmxpbmdcbiAgICAvLyB0aGVtIGluIFJlYWN0IGVpdGhlci4gV2UnbGwgc3RhcnQgYnkgbm90IGJ1YmJsaW5nIG9uU2Nyb2xsLCBhbmQgdGhlbiBleHBhbmQuXG4gICAgdmFyIGFjY3VtdWxhdGVUYXJnZXRPbmx5ID0gIWluQ2FwdHVyZVBoYXNlICYmIC8vIFRPRE86IGlkZWFsbHksIHdlJ2QgZXZlbnR1YWxseSBhZGQgYWxsIGV2ZW50cyBmcm9tXG4gICAgLy8gbm9uRGVsZWdhdGVkRXZlbnRzIGxpc3QgaW4gRE9NUGx1Z2luRXZlbnRTeXN0ZW0uXG4gICAgLy8gVGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgc3BlY2lhbCBsaXN0LlxuICAgIC8vIFRoaXMgaXMgYSBicmVha2luZyBjaGFuZ2UgdGhhdCBjYW4gd2FpdCB1bnRpbCBSZWFjdCAxOC5cbiAgICBkb21FdmVudE5hbWUgPT09ICdzY3JvbGwnO1xuXG4gICAgdmFyIF9saXN0ZW5lcnMgPSBhY2N1bXVsYXRlU2luZ2xlUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgcmVhY3ROYW1lLCBuYXRpdmVFdmVudC50eXBlLCBpbkNhcHR1cmVQaGFzZSwgYWNjdW11bGF0ZVRhcmdldE9ubHkpO1xuXG4gICAgaWYgKF9saXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBjcmVhdGUgZXZlbnQgbGF6aWx5LlxuICAgICAgdmFyIF9ldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IocmVhY3ROYW1lLCByZWFjdEV2ZW50VHlwZSwgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgZXZlbnQ6IF9ldmVudCxcbiAgICAgICAgbGlzdGVuZXJzOiBfbGlzdGVuZXJzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETzogcmVtb3ZlIHRvcC1sZXZlbCBzaWRlIGVmZmVjdC5cbnJlZ2lzdGVyU2ltcGxlRXZlbnRzKCk7XG5yZWdpc3RlckV2ZW50cyQyKCk7XG5yZWdpc3RlckV2ZW50cyQxKCk7XG5yZWdpc3RlckV2ZW50cyQzKCk7XG5yZWdpc3RlckV2ZW50cygpO1xuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDUoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICAvLyBUT0RPOiB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBjb25jZXB0IG9mIGEgXCJTaW1wbGVFdmVudFBsdWdpblwiLlxuICAvLyBUaGlzIGlzIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIHRoZSBldmVudCBzeXN0ZW0uIEFsbFxuICAvLyB0aGUgb3RoZXIgcGx1Z2lucyBhcmUgZXNzZW50aWFsbHkgcG9seWZpbGxzLiBTbyB0aGUgcGx1Z2luXG4gIC8vIHNob3VsZCBwcm9iYWJseSBiZSBpbmxpbmVkIHNvbWV3aGVyZSBhbmQgaGF2ZSBpdHMgbG9naWNcbiAgLy8gYmUgY29yZSB0aGUgdG8gZXZlbnQgc3lzdGVtLiBUaGlzIHdvdWxkIHBvdGVudGlhbGx5IGFsbG93XG4gIC8vIHVzIHRvIHNoaXAgYnVpbGRzIG9mIFJlYWN0IHdpdGhvdXQgdGhlIHBvbHlmaWxsZWQgcGx1Z2lucyBiZWxvdy5cbiAgZXh0cmFjdEV2ZW50cyQ0KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgdmFyIHNob3VsZFByb2Nlc3NQb2x5ZmlsbFBsdWdpbnMgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIFNIT1VMRF9OT1RfUFJPQ0VTU19QT0xZRklMTF9FVkVOVF9QTFVHSU5TKSA9PT0gMDsgLy8gV2UgZG9uJ3QgcHJvY2VzcyB0aGVzZSBldmVudHMgdW5sZXNzIHdlIGFyZSBpbiB0aGVcbiAgLy8gZXZlbnQncyBuYXRpdmUgXCJidWJibGVcIiBwaGFzZSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSdyZVxuICAvLyBub3QgaW4gdGhlIGNhcHR1cmUgcGhhc2UuIFRoYXQncyBiZWNhdXNlIHdlIGVtdWxhdGVcbiAgLy8gdGhlIGNhcHR1cmUgcGhhc2UgaGVyZSBzdGlsbC4gVGhpcyBpcyBhIHRyYWRlLW9mZixcbiAgLy8gYmVjYXVzZSBpbiBhbiBpZGVhbCB3b3JsZCB3ZSB3b3VsZCBub3QgZW11bGF0ZSBhbmQgdXNlXG4gIC8vIHRoZSBwaGFzZXMgcHJvcGVybHksIGxpa2Ugd2UgZG8gd2l0aCB0aGUgU2ltcGxlRXZlbnRcbiAgLy8gcGx1Z2luLiBIb3dldmVyLCB0aGUgcGx1Z2lucyBiZWxvdyBlaXRoZXIgZXhwZWN0XG4gIC8vIGVtdWxhdGlvbiAoRW50ZXJMZWF2ZSkgb3IgdXNlIHN0YXRlIGxvY2FsaXplZCB0byB0aGF0XG4gIC8vIHBsdWdpbiAoQmVmb3JlSW5wdXQsIENoYW5nZSwgU2VsZWN0KS4gVGhlIHN0YXRlIGluXG4gIC8vIHRoZXNlIG1vZHVsZXMgY29tcGxpY2F0ZXMgdGhpbmdzLCBhcyB5b3UnbGwgZXNzZW50aWFsbHlcbiAgLy8gZ2V0IHRoZSBjYXNlIHdoZXJlIHRoZSBjYXB0dXJlIHBoYXNlIGV2ZW50IG1pZ2h0IGNoYW5nZVxuICAvLyBzdGF0ZSwgb25seSBmb3IgdGhlIGZvbGxvd2luZyBidWJibGUgZXZlbnQgdG8gY29tZSBpblxuICAvLyBsYXRlciBhbmQgbm90IHRyaWdnZXIgYW55dGhpbmcgYXMgdGhlIHN0YXRlIG5vd1xuICAvLyBpbnZhbGlkYXRlcyB0aGUgaGV1cmlzdGljcyBvZiB0aGUgZXZlbnQgcGx1Z2luLiBXZVxuICAvLyBjb3VsZCBhbHRlciBhbGwgdGhlc2UgcGx1Z2lucyB0byB3b3JrIGluIHN1Y2ggd2F5cywgYnV0XG4gIC8vIHRoYXQgbWlnaHQgY2F1c2Ugb3RoZXIgdW5rbm93biBzaWRlLWVmZmVjdHMgdGhhdCB3ZVxuICAvLyBjYW4ndCBmb3JzZWUgcmlnaHQgbm93LlxuXG4gIGlmIChzaG91bGRQcm9jZXNzUG9seWZpbGxQbHVnaW5zKSB7XG4gICAgZXh0cmFjdEV2ZW50cyQyKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgICBleHRyYWN0RXZlbnRzJDEoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGV4dHJhY3RFdmVudHMkMyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZXh0cmFjdEV2ZW50cyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIH1cbn0gLy8gTGlzdCBvZiBldmVudHMgdGhhdCBuZWVkIHRvIGJlIGluZGl2aWR1YWxseSBhdHRhY2hlZCB0byBtZWRpYSBlbGVtZW50cy5cblxuXG52YXIgbWVkaWFFdmVudFR5cGVzID0gWydhYm9ydCcsICdjYW5wbGF5JywgJ2NhbnBsYXl0aHJvdWdoJywgJ2R1cmF0aW9uY2hhbmdlJywgJ2VtcHRpZWQnLCAnZW5jcnlwdGVkJywgJ2VuZGVkJywgJ2Vycm9yJywgJ2xvYWRlZGRhdGEnLCAnbG9hZGVkbWV0YWRhdGEnLCAnbG9hZHN0YXJ0JywgJ3BhdXNlJywgJ3BsYXknLCAncGxheWluZycsICdwcm9ncmVzcycsICdyYXRlY2hhbmdlJywgJ3NlZWtlZCcsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3VzcGVuZCcsICd0aW1ldXBkYXRlJywgJ3ZvbHVtZWNoYW5nZScsICd3YWl0aW5nJ107IC8vIFdlIHNob3VsZCBub3QgZGVsZWdhdGUgdGhlc2UgZXZlbnRzIHRvIHRoZSBjb250YWluZXIsIGJ1dCByYXRoZXJcbi8vIHNldCB0aGVtIG9uIHRoZSBhY3R1YWwgdGFyZ2V0IGVsZW1lbnQgaXRzZWxmLiBUaGlzIGlzIHByaW1hcmlseVxuLy8gYmVjYXVzZSB0aGVzZSBldmVudHMgZG8gbm90IGNvbnNpc3RlbnRseSBidWJibGUgaW4gdGhlIERPTS5cblxudmFyIG5vbkRlbGVnYXRlZEV2ZW50cyA9IG5ldyBTZXQoWydjYW5jZWwnLCAnY2xvc2UnLCAnaW52YWxpZCcsICdsb2FkJywgJ3Njcm9sbCcsICd0b2dnbGUnXS5jb25jYXQobWVkaWFFdmVudFR5cGVzKSk7XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgdmFyIHR5cGUgPSBldmVudC50eXBlIHx8ICd1bmtub3duLWV2ZW50JztcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcih0eXBlLCBsaXN0ZW5lciwgdW5kZWZpbmVkLCBldmVudCk7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzRGlzcGF0Y2hRdWV1ZUl0ZW1zSW5PcmRlcihldmVudCwgZGlzcGF0Y2hMaXN0ZW5lcnMsIGluQ2FwdHVyZVBoYXNlKSB7XG4gIHZhciBwcmV2aW91c0luc3RhbmNlO1xuXG4gIGlmIChpbkNhcHR1cmVQaGFzZSkge1xuICAgIGZvciAodmFyIGkgPSBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIF9kaXNwYXRjaExpc3RlbmVycyRpID0gZGlzcGF0Y2hMaXN0ZW5lcnNbaV0sXG4gICAgICAgICAgaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5pbnN0YW5jZSxcbiAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuY3VycmVudFRhcmdldCxcbiAgICAgICAgICBsaXN0ZW5lciA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmxpc3RlbmVyO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgIT09IHByZXZpb3VzSW5zdGFuY2UgJiYgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpO1xuICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJF9pID0gZGlzcGF0Y2hMaXN0ZW5lcnNbX2ldLFxuICAgICAgICAgIF9pbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5pbnN0YW5jZSxcbiAgICAgICAgICBfY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgIF9saXN0ZW5lciA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5saXN0ZW5lcjtcblxuICAgICAgaWYgKF9pbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBfbGlzdGVuZXIsIF9jdXJyZW50VGFyZ2V0KTtcbiAgICAgIHByZXZpb3VzSW5zdGFuY2UgPSBfaW5zdGFuY2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgdmFyIGluQ2FwdHVyZVBoYXNlID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19DQVBUVVJFX1BIQVNFKSAhPT0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoUXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX2Rpc3BhdGNoUXVldWUkaSA9IGRpc3BhdGNoUXVldWVbaV0sXG4gICAgICAgIGV2ZW50ID0gX2Rpc3BhdGNoUXVldWUkaS5ldmVudCxcbiAgICAgICAgbGlzdGVuZXJzID0gX2Rpc3BhdGNoUXVldWUkaS5saXN0ZW5lcnM7XG4gICAgcHJvY2Vzc0Rpc3BhdGNoUXVldWVJdGVtc0luT3JkZXIoZXZlbnQsIGxpc3RlbmVycywgaW5DYXB0dXJlUGhhc2UpOyAvLyAgZXZlbnQgc3lzdGVtIGRvZXNuJ3QgdXNlIHBvb2xpbmcuXG4gIH0gLy8gVGhpcyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byByZXRocm93IGlmIGFueSBvZiB0aGUgZXZlbnQgaGFuZGxlcnMgdGhyZXcuXG5cblxuICByZXRocm93Q2F1Z2h0RXJyb3IoKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudHNGb3JQbHVnaW5zKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCk7XG4gIHZhciBkaXNwYXRjaFF1ZXVlID0gW107XG4gIGV4dHJhY3RFdmVudHMkNShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpO1xufVxuXG5mdW5jdGlvbiBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0RWxlbWVudCkge1xuICB2YXIgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciA9IGZhbHNlO1xuICB2YXIgbGlzdGVuZXJTZXQgPSBnZXRFdmVudExpc3RlbmVyU2V0KHRhcmdldEVsZW1lbnQpO1xuICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xuXG4gIGlmICghbGlzdGVuZXJTZXQuaGFzKGxpc3RlbmVyU2V0S2V5KSkge1xuICAgIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldEVsZW1lbnQsIGRvbUV2ZW50TmFtZSwgSVNfTk9OX0RFTEVHQVRFRCwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG4gICAgbGlzdGVuZXJTZXQuYWRkKGxpc3RlbmVyU2V0S2V5KTtcbiAgfVxufVxudmFyIGxpc3RlbmluZ01hcmtlciA9ICdfcmVhY3RMaXN0ZW5pbmcnICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG5mdW5jdGlvbiBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhyb290Q29udGFpbmVyRWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0pIHtcbiAgICAgIC8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogZG9uJ3QgaXRlcmF0ZSB0aHJvdWdoIGV2ZW50c1xuICAgICAgLy8gZm9yIHRoZSBzYW1lIHBvcnRhbCBjb250YWluZXIgb3Igcm9vdCBub2RlIG1vcmUgdGhhbiBvbmNlLlxuICAgICAgLy8gVE9ETzogb25jZSB3ZSByZW1vdmUgdGhlIGZsYWcsIHdlIG1heSBiZSBhYmxlIHRvIGFsc29cbiAgICAgIC8vIHJlbW92ZSBzb21lIG9mIHRoZSBib29ra2VlcGluZyBtYXBzIHVzZWQgZm9yIGxhemluZXNzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0gPSB0cnVlO1xuICAgIGFsbE5hdGl2ZUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChkb21FdmVudE5hbWUpIHtcbiAgICAgIGlmICghbm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpKSB7XG4gICAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCBmYWxzZSwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgdHJ1ZSwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG51bGwpO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciwgcm9vdENvbnRhaW5lckVsZW1lbnQsIHRhcmdldEVsZW1lbnQpIHtcbiAgdmFyIGV2ZW50U3lzdGVtRmxhZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IDA7XG4gIHZhciB0YXJnZXQgPSByb290Q29udGFpbmVyRWxlbWVudDsgLy8gc2VsZWN0aW9uY2hhbmdlIG5lZWRzIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBkb2N1bWVudFxuICAvLyBvdGhlcndpc2UgaXQgd29uJ3QgY2FwdHVyZSBpbmNvbWluZyBldmVudHMgdGhhdCBhcmUgb25seVxuICAvLyB0cmlnZ2VyZWQgb24gdGhlIGRvY3VtZW50IGRpcmVjdGx5LlxuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdzZWxlY3Rpb25jaGFuZ2UnICYmIHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlICE9PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgdGFyZ2V0ID0gcm9vdENvbnRhaW5lckVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgfSAvLyBJZiB0aGUgZXZlbnQgY2FuIGJlIGRlbGVnYXRlZCAob3IgaXMgY2FwdHVyZSBwaGFzZSksIHdlIGNhblxuICAvLyByZWdpc3RlciBpdCB0byB0aGUgcm9vdCBjb250YWluZXIuIE90aGVyd2lzZSwgd2Ugc2hvdWxkXG4gIC8vIHJlZ2lzdGVyIHRoZSBldmVudCB0byB0aGUgdGFyZ2V0IGVsZW1lbnQgYW5kIG1hcmsgaXQgYXNcbiAgLy8gYSBub24tZGVsZWdhdGVkIGV2ZW50LlxuXG5cbiAgaWYgKHRhcmdldEVsZW1lbnQgIT09IG51bGwgJiYgIWlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgJiYgbm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpKSB7XG4gICAgLy8gRm9yIGFsbCBub24tZGVsZWdhdGVkIGV2ZW50cywgYXBhcnQgZnJvbSBzY3JvbGwsIHdlIGF0dGFjaFxuICAgIC8vIHRoZWlyIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgcmVzcGVjdGl2ZSBlbGVtZW50cyB0aGF0IHRoZWlyXG4gICAgLy8gZXZlbnRzIGZpcmUgb24uIFRoYXQgbWVhbnMgd2UgY2FuIHNraXAgdGhpcyBzdGVwLCBhcyBldmVudFxuICAgIC8vIGxpc3RlbmVyIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgcHJldmlvdXNseS4gSG93ZXZlciwgd2VcbiAgICAvLyBzcGVjaWFsIGNhc2UgdGhlIHNjcm9sbCBldmVudCBiZWNhdXNlIHRoZSByZWFsaXR5IGlzIHRoYXQgYW55XG4gICAgLy8gZWxlbWVudCBjYW4gc2Nyb2xsLlxuICAgIC8vIFRPRE86IGlkZWFsbHksIHdlJ2QgZXZlbnR1YWxseSBhcHBseSB0aGUgc2FtZSBsb2dpYyB0byBhbGxcbiAgICAvLyBldmVudHMgZnJvbSB0aGUgbm9uRGVsZWdhdGVkRXZlbnRzIGxpc3QuIFRoZW4gd2UgY2FuIHJlbW92ZVxuICAgIC8vIHRoaXMgc3BlY2lhbCBjYXNlIGFuZCB1c2UgdGhlIHNhbWUgbG9naWMgZm9yIGFsbCBldmVudHMuXG4gICAgaWYgKGRvbUV2ZW50TmFtZSAhPT0gJ3Njcm9sbCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudFN5c3RlbUZsYWdzIHw9IElTX05PTl9ERUxFR0FURUQ7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0RWxlbWVudDtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lclNldCA9IGdldEV2ZW50TGlzdGVuZXJTZXQodGFyZ2V0KTtcbiAgdmFyIGxpc3RlbmVyU2V0S2V5ID0gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTsgLy8gSWYgdGhlIGxpc3RlbmVyIGVudHJ5IGlzIGVtcHR5IG9yIHdlIHNob3VsZCB1cGdyYWRlLCB0aGVuXG4gIC8vIHdlIG5lZWQgdG8gdHJhcCBhbiBldmVudCBsaXN0ZW5lciBvbnRvIHRoZSB0YXJnZXQuXG5cbiAgaWYgKCFsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpKSB7XG4gICAgaWYgKGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpIHtcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MgfD0gSVNfQ0FQVFVSRV9QSEFTRTtcbiAgICB9XG5cbiAgICBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXQsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG4gICAgbGlzdGVuZXJTZXQuYWRkKGxpc3RlbmVyU2V0S2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciwgaXNEZWZlcnJlZExpc3RlbmVyRm9yTGVnYWN5RkJTdXBwb3J0KSB7XG4gIHZhciBsaXN0ZW5lciA9IGNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyV2l0aFByaW9yaXR5KHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzKTsgLy8gSWYgcGFzc2l2ZSBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCwgdGhlbiB0aGUgZXZlbnQgd2lsbCBiZVxuICAvLyBhY3RpdmUgYW5kIG5vdCBwYXNzaXZlLlxuXG4gIHZhciBpc1Bhc3NpdmVMaXN0ZW5lciA9IHVuZGVmaW5lZDtcblxuICBpZiAocGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQpIHtcbiAgICAvLyBCcm93c2VycyBpbnRyb2R1Y2VkIGFuIGludGVydmVudGlvbiwgbWFraW5nIHRoZXNlIGV2ZW50c1xuICAgIC8vIHBhc3NpdmUgYnkgZGVmYXVsdCBvbiBkb2N1bWVudC4gUmVhY3QgZG9lc24ndCBiaW5kIHRoZW1cbiAgICAvLyB0byBkb2N1bWVudCBhbnltb3JlLCBidXQgY2hhbmdpbmcgdGhpcyBub3cgd291bGQgdW5kb1xuICAgIC8vIHRoZSBwZXJmb3JtYW5jZSB3aW5zIGZyb20gdGhlIGNoYW5nZS4gU28gd2UgZW11bGF0ZVxuICAgIC8vIHRoZSBleGlzdGluZyBiZWhhdmlvciBtYW51YWxseSBvbiB0aGUgcm9vdHMgbm93LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTk2NTFcbiAgICBpZiAoZG9tRXZlbnROYW1lID09PSAndG91Y2hzdGFydCcgfHwgZG9tRXZlbnROYW1lID09PSAndG91Y2htb3ZlJyB8fCBkb21FdmVudE5hbWUgPT09ICd3aGVlbCcpIHtcbiAgICAgIGlzUGFzc2l2ZUxpc3RlbmVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0YXJnZXRDb250YWluZXIgPSAgdGFyZ2V0Q29udGFpbmVyO1xuICB2YXIgdW5zdWJzY3JpYmVMaXN0ZW5lcjsgLy8gV2hlbiBsZWdhY3lGQlN1cHBvcnQgaXMgZW5hYmxlZCwgaXQncyBmb3Igd2hlbiB3ZVxuXG5cbiAgaWYgKGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpIHtcbiAgICBpZiAoaXNQYXNzaXZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lciwgaXNQYXNzaXZlTGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXIodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzUGFzc2l2ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lciwgaXNQYXNzaXZlTGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc01hdGNoaW5nUm9vdENvbnRhaW5lcihncmFuZENvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHJldHVybiBncmFuZENvbnRhaW5lciA9PT0gdGFyZ2V0Q29udGFpbmVyIHx8IGdyYW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgJiYgZ3JhbmRDb250YWluZXIucGFyZW50Tm9kZSA9PT0gdGFyZ2V0Q29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBhbmNlc3Rvckluc3QgPSB0YXJnZXRJbnN0O1xuXG4gIGlmICgoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFKSA9PT0gMCAmJiAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX05PTl9ERUxFR0FURUQpID09PSAwKSB7XG4gICAgdmFyIHRhcmdldENvbnRhaW5lck5vZGUgPSB0YXJnZXRDb250YWluZXI7IC8vIElmIHdlIGFyZSB1c2luZyB0aGUgbGVnYWN5IEZCIHN1cHBvcnQgZmxhZywgd2VcblxuICAgIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGUgYmVsb3cgbG9naWMgYXR0ZW1wdHMgdG8gd29yayBvdXQgaWYgd2UgbmVlZCB0byBjaGFuZ2VcbiAgICAgIC8vIHRoZSB0YXJnZXQgZmliZXIgdG8gYSBkaWZmZXJlbnQgYW5jZXN0b3IuIFdlIGhhZCBzaW1pbGFyIGxvZ2ljXG4gICAgICAvLyBpbiB0aGUgbGVnYWN5IGV2ZW50IHN5c3RlbSwgZXhjZXB0IHRoZSBiaWcgZGlmZmVyZW5jZSBiZXR3ZWVuXG4gICAgICAvLyBzeXN0ZW1zIGlzIHRoYXQgdGhlIG1vZGVybiBldmVudCBzeXN0ZW0gbm93IGhhcyBhbiBldmVudCBsaXN0ZW5lclxuICAgICAgLy8gYXR0YWNoZWQgdG8gZWFjaCBSZWFjdCBSb290IGFuZCBSZWFjdCBQb3J0YWwgUm9vdC4gVG9nZXRoZXIsXG4gICAgICAvLyB0aGUgRE9NIG5vZGVzIHJlcHJlc2VudGluZyB0aGVzZSByb290cyBhcmUgdGhlIFwicm9vdENvbnRhaW5lclwiLlxuICAgICAgLy8gVG8gZmlndXJlIG91dCB3aGljaCBhbmNlc3RvciBpbnN0YW5jZSB3ZSBzaG91bGQgdXNlLCB3ZSB0cmF2ZXJzZVxuICAgICAgLy8gdXAgdGhlIGZpYmVyIHRyZWUgZnJvbSB0aGUgdGFyZ2V0IGluc3RhbmNlIGFuZCBhdHRlbXB0IHRvIGZpbmRcbiAgICAgIC8vIHJvb3QgYm91bmRhcmllcyB0aGF0IG1hdGNoIHRoYXQgb2Ygb3VyIGN1cnJlbnQgXCJyb290Q29udGFpbmVyXCIuXG4gICAgICAvLyBJZiB3ZSBmaW5kIHRoYXQgXCJyb290Q29udGFpbmVyXCIsIHdlIGZpbmQgdGhlIHBhcmVudCBmaWJlclxuICAgICAgLy8gc3ViLXRyZWUgZm9yIHRoYXQgcm9vdCBhbmQgbWFrZSB0aGF0IG91ciBhbmNlc3RvciBpbnN0YW5jZS5cbiAgICAgIHZhciBub2RlID0gdGFyZ2V0SW5zdDtcblxuICAgICAgbWFpbkxvb3A6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5vZGVUYWcgPSBub2RlLnRhZztcblxuICAgICAgICBpZiAobm9kZVRhZyA9PT0gSG9zdFJvb3QgfHwgbm9kZVRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgIHZhciBjb250YWluZXIgPSBub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgaWYgKGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGNvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChub2RlVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgICAvLyBUaGUgdGFyZ2V0IGlzIGEgcG9ydGFsLCBidXQgaXQncyBub3QgdGhlIHJvb3RDb250YWluZXIgd2UncmUgbG9va2luZyBmb3IuXG4gICAgICAgICAgICAvLyBOb3JtYWxseSBwb3J0YWxzIGhhbmRsZSB0aGVpciBvd24gZXZlbnRzIGFsbCB0aGUgd2F5IGRvd24gdG8gdGhlIHJvb3QuXG4gICAgICAgICAgICAvLyBTbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBzdG9wIG5vdy4gSG93ZXZlciwgd2UgZG9uJ3Qga25vdyBpZiB0aGlzIHBvcnRhbFxuICAgICAgICAgICAgLy8gd2FzIHBhcnQgb2YgKm91ciogcm9vdC5cbiAgICAgICAgICAgIHZhciBncmFuZE5vZGUgPSBub2RlLnJldHVybjtcblxuICAgICAgICAgICAgd2hpbGUgKGdyYW5kTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgZ3JhbmRUYWcgPSBncmFuZE5vZGUudGFnO1xuXG4gICAgICAgICAgICAgIGlmIChncmFuZFRhZyA9PT0gSG9zdFJvb3QgfHwgZ3JhbmRUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgZ3JhbmRDb250YWluZXIgPSBncmFuZE5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoZ3JhbmRDb250YWluZXIsIHRhcmdldENvbnRhaW5lck5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSByb290Q29udGFpbmVyIHdlJ3JlIGxvb2tpbmcgZm9yIGFuZCB3ZSBmb3VuZCBpdCBhc1xuICAgICAgICAgICAgICAgICAgLy8gYSBwYXJlbnQgb2YgdGhlIFBvcnRhbC4gVGhhdCBtZWFucyB3ZSBjYW4gaWdub3JlIGl0IGJlY2F1c2UgdGhlXG4gICAgICAgICAgICAgICAgICAvLyBQb3J0YWwgd2lsbCBidWJibGUgdGhyb3VnaCB0byB1cy5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBncmFuZE5vZGUgPSBncmFuZE5vZGUucmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gTm93IHdlIG5lZWQgdG8gZmluZCBpdCdzIGNvcnJlc3BvbmRpbmcgaG9zdCBmaWJlciBpbiB0aGUgb3RoZXJcbiAgICAgICAgICAvLyB0cmVlLiBUbyBkbyB0aGlzIHdlIGNhbiB1c2UgZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUsIGJ1dCB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGUgZmliZXIgaXMgYSBob3N0IGluc3RhbmNlLCBvdGhlcndpc2VcbiAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHRyYXZlcnNlIHVwIHRocm91Z2ggdGhlIERPTSB0aWxsIHdlIGZpbmQgdGhlIGNvcnJlY3RcbiAgICAgICAgICAvLyBub2RlIHRoYXQgaXMgZnJvbSB0aGUgb3RoZXIgdHJlZS5cblxuXG4gICAgICAgICAgd2hpbGUgKGNvbnRhaW5lciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHBhcmVudE5vZGUgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShjb250YWluZXIpO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwYXJlbnRUYWcgPSBwYXJlbnROb2RlLnRhZztcblxuICAgICAgICAgICAgaWYgKHBhcmVudFRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBwYXJlbnRUYWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgICAgICAgIG5vZGUgPSBhbmNlc3Rvckluc3QgPSBwYXJlbnROb2RlO1xuICAgICAgICAgICAgICBjb250aW51ZSBtYWluTG9vcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJhdGNoZWRFdmVudFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50c0ZvclBsdWdpbnMoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgYW5jZXN0b3JJbnN0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSB7XG4gIHJldHVybiB7XG4gICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgIGxpc3RlbmVyOiBsaXN0ZW5lcixcbiAgICBjdXJyZW50VGFyZ2V0OiBjdXJyZW50VGFyZ2V0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVTaW5nbGVQaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lLCBuYXRpdmVFdmVudFR5cGUsIGluQ2FwdHVyZVBoYXNlLCBhY2N1bXVsYXRlVGFyZ2V0T25seSkge1xuICB2YXIgY2FwdHVyZU5hbWUgPSByZWFjdE5hbWUgIT09IG51bGwgPyByZWFjdE5hbWUgKyAnQ2FwdHVyZScgOiBudWxsO1xuICB2YXIgcmVhY3RFdmVudE5hbWUgPSBpbkNhcHR1cmVQaGFzZSA/IGNhcHR1cmVOYW1lIDogcmVhY3ROYW1lO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldEZpYmVyO1xuICB2YXIgbGFzdEhvc3RDb21wb25lbnQgPSBudWxsOyAvLyBBY2N1bXVsYXRlIGFsbCBpbnN0YW5jZXMgYW5kIGxpc3RlbmVycyB2aWEgdGhlIHRhcmdldCAtPiByb290IHBhdGguXG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgdmFyIF9pbnN0YW5jZTIgPSBpbnN0YW5jZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlMi5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTIudGFnOyAvLyBIYW5kbGUgbGlzdGVuZXJzIHRoYXQgYXJlIG9uIEhvc3RDb21wb25lbnRzIChpLmUuIDxkaXY+KVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGxhc3RIb3N0Q29tcG9uZW50ID0gc3RhdGVOb2RlOyAvLyBjcmVhdGVFdmVudEhhbmRsZSBsaXN0ZW5lcnNcblxuXG4gICAgICBpZiAocmVhY3RFdmVudE5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlYWN0RXZlbnROYW1lKTtcblxuICAgICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGxpc3RlbmVyLCBsYXN0SG9zdENvbXBvbmVudCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBJZiB3ZSBhcmUgb25seSBhY2N1bXVsYXRpbmcgZXZlbnRzIGZvciB0aGUgdGFyZ2V0LCB0aGVuIHdlIGRvbid0XG4gICAgLy8gY29udGludWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggdGhlIFJlYWN0IGZpYmVyIHRyZWUgdG8gZmluZCBvdGhlclxuICAgIC8vIGxpc3RlbmVycy5cblxuXG4gICAgaWYgKGFjY3VtdWxhdGVUYXJnZXRPbmx5KSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcnM7XG59IC8vIFdlIHNob3VsZCBvbmx5IHVzZSB0aGlzIGZ1bmN0aW9uIGZvcjpcbi8vIC0gQmVmb3JlSW5wdXRFdmVudFBsdWdpblxuLy8gLSBDaGFuZ2VFdmVudFBsdWdpblxuLy8gLSBTZWxlY3RFdmVudFBsdWdpblxuLy8gVGhpcyBpcyBiZWNhdXNlIHdlIG9ubHkgcHJvY2VzcyB0aGVzZSBwbHVnaW5zXG4vLyBpbiB0aGUgYnViYmxlIHBoYXNlLCBzbyB3ZSBuZWVkIHRvIGFjY3VtdWxhdGUgdHdvXG4vLyBwaGFzZSBldmVudCBsaXN0ZW5lcnMgKHZpYSBlbXVsYXRpb24pLlxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0RmliZXIsIHJlYWN0TmFtZSkge1xuICB2YXIgY2FwdHVyZU5hbWUgPSByZWFjdE5hbWUgKyAnQ2FwdHVyZSc7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0RmliZXI7IC8vIEFjY3VtdWxhdGUgYWxsIGluc3RhbmNlcyBhbmQgbGlzdGVuZXJzIHZpYSB0aGUgdGFyZ2V0IC0+IHJvb3QgcGF0aC5cblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICB2YXIgX2luc3RhbmNlMyA9IGluc3RhbmNlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2UzLnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlMy50YWc7IC8vIEhhbmRsZSBsaXN0ZW5lcnMgdGhhdCBhcmUgb24gSG9zdENvbXBvbmVudHMgKGkuZS4gPGRpdj4pXG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUYXJnZXQgPSBzdGF0ZU5vZGU7XG4gICAgICB2YXIgY2FwdHVyZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIGNhcHR1cmVOYW1lKTtcblxuICAgICAgaWYgKGNhcHR1cmVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGNhcHR1cmVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYnViYmxlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVhY3ROYW1lKTtcblxuICAgICAgaWYgKGJ1YmJsZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgYnViYmxlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcnM7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmVudChpbnN0KSB7XG4gIGlmIChpbnN0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkbyB7XG4gICAgaW5zdCA9IGluc3QucmV0dXJuOyAvLyBUT0RPOiBJZiB0aGlzIGlzIGEgSG9zdFJvb3Qgd2UgbWlnaHQgd2FudCB0byBiYWlsIG91dC5cbiAgICAvLyBUaGF0IGlzIGRlcGVuZGluZyBvbiBpZiB3ZSB3YW50IG5lc3RlZCBzdWJ0cmVlcyAobGF5ZXJzKSB0byBidWJibGVcbiAgICAvLyBldmVudHMgdG8gdGhlaXIgcGFyZW50LiBXZSBjb3VsZCBhbHNvIGdvIHRocm91Z2ggcGFyZW50Tm9kZSBvbiB0aGVcbiAgICAvLyBob3N0IG5vZGUgYnV0IHRoYXQgd291bGRuJ3Qgd29yayBmb3IgUmVhY3QgTmF0aXZlIGFuZCBkb2Vzbid0IGxldCB1c1xuICAgIC8vIGRvIHRoZSBwb3J0YWwgZmVhdHVyZS5cbiAgfSB3aGlsZSAoaW5zdCAmJiBpbnN0LnRhZyAhPT0gSG9zdENvbXBvbmVudCk7XG5cbiAgaWYgKGluc3QpIHtcbiAgICByZXR1cm4gaW5zdDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBSZXR1cm4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgQSBhbmQgQiwgb3IgbnVsbCBpZiB0aGV5IGFyZSBpblxuICogZGlmZmVyZW50IHRyZWVzLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoaW5zdEEsIGluc3RCKSB7XG4gIHZhciBub2RlQSA9IGluc3RBO1xuICB2YXIgbm9kZUIgPSBpbnN0QjtcbiAgdmFyIGRlcHRoQSA9IDA7XG5cbiAgZm9yICh2YXIgdGVtcEEgPSBub2RlQTsgdGVtcEE7IHRlbXBBID0gZ2V0UGFyZW50KHRlbXBBKSkge1xuICAgIGRlcHRoQSsrO1xuICB9XG5cbiAgdmFyIGRlcHRoQiA9IDA7XG5cbiAgZm9yICh2YXIgdGVtcEIgPSBub2RlQjsgdGVtcEI7IHRlbXBCID0gZ2V0UGFyZW50KHRlbXBCKSkge1xuICAgIGRlcHRoQisrO1xuICB9IC8vIElmIEEgaXMgZGVlcGVyLCBjcmF3bCB1cC5cblxuXG4gIHdoaWxlIChkZXB0aEEgLSBkZXB0aEIgPiAwKSB7XG4gICAgbm9kZUEgPSBnZXRQYXJlbnQobm9kZUEpO1xuICAgIGRlcHRoQS0tO1xuICB9IC8vIElmIEIgaXMgZGVlcGVyLCBjcmF3bCB1cC5cblxuXG4gIHdoaWxlIChkZXB0aEIgLSBkZXB0aEEgPiAwKSB7XG4gICAgbm9kZUIgPSBnZXRQYXJlbnQobm9kZUIpO1xuICAgIGRlcHRoQi0tO1xuICB9IC8vIFdhbGsgaW4gbG9ja3N0ZXAgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuXG5cbiAgdmFyIGRlcHRoID0gZGVwdGhBO1xuXG4gIHdoaWxlIChkZXB0aC0tKSB7XG4gICAgaWYgKG5vZGVBID09PSBub2RlQiB8fCBub2RlQiAhPT0gbnVsbCAmJiBub2RlQSA9PT0gbm9kZUIuYWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gbm9kZUE7XG4gICAgfVxuXG4gICAgbm9kZUEgPSBnZXRQYXJlbnQobm9kZUEpO1xuICAgIG5vZGVCID0gZ2V0UGFyZW50KG5vZGVCKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGV2ZW50LCB0YXJnZXQsIGNvbW1vbiwgaW5DYXB0dXJlUGhhc2UpIHtcbiAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5fcmVhY3ROYW1lO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldDtcblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICBpZiAoaW5zdGFuY2UgPT09IGNvbW1vbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIF9pbnN0YW5jZTQgPSBpbnN0YW5jZSxcbiAgICAgICAgYWx0ZXJuYXRlID0gX2luc3RhbmNlNC5hbHRlcm5hdGUsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTQuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2U0LnRhZztcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlID09PSBjb21tb24pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IHN0YXRlTm9kZTtcblxuICAgICAgaWYgKGluQ2FwdHVyZVBoYXNlKSB7XG4gICAgICAgIHZhciBjYXB0dXJlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKGNhcHR1cmVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWluQ2FwdHVyZVBoYXNlKSB7XG4gICAgICAgIHZhciBidWJibGVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICBpZiAoYnViYmxlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGJ1YmJsZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgfVxuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gIH1cbn0gLy8gV2Ugc2hvdWxkIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gZm9yOlxuLy8gLSBFbnRlckxlYXZlRXZlbnRQbHVnaW5cbi8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBvbmx5IHByb2Nlc3MgdGhpcyBwbHVnaW5cbi8vIGluIHRoZSBidWJibGUgcGhhc2UsIHNvIHdlIG5lZWQgdG8gYWNjdW11bGF0ZSB0d29cbi8vIHBoYXNlIGV2ZW50IGxpc3RlbmVycy5cblxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZVR3b1BoYXNlTGlzdGVuZXJzKGRpc3BhdGNoUXVldWUsIGxlYXZlRXZlbnQsIGVudGVyRXZlbnQsIGZyb20sIHRvKSB7XG4gIHZhciBjb21tb24gPSBmcm9tICYmIHRvID8gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoZnJvbSwgdG8pIDogbnVsbDtcblxuICBpZiAoZnJvbSAhPT0gbnVsbCkge1xuICAgIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbGVhdmVFdmVudCwgZnJvbSwgY29tbW9uLCBmYWxzZSk7XG4gIH1cblxuICBpZiAodG8gIT09IG51bGwgJiYgZW50ZXJFdmVudCAhPT0gbnVsbCkge1xuICAgIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZW50ZXJFdmVudCwgdG8sIGNvbW1vbiwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgY2FwdHVyZSkge1xuICByZXR1cm4gZG9tRXZlbnROYW1lICsgXCJfX1wiICsgKGNhcHR1cmUgPyAnY2FwdHVyZScgOiAnYnViYmxlJyk7XG59XG5cbnZhciBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IGZhbHNlO1xudmFyIERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MID0gJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJztcbnZhciBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgPSAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJztcbnZhciBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyA9ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnO1xudmFyIEFVVE9GT0NVUyA9ICdhdXRvRm9jdXMnO1xudmFyIENISUxEUkVOID0gJ2NoaWxkcmVuJztcbnZhciBTVFlMRSA9ICdzdHlsZSc7XG52YXIgSFRNTCQxID0gJ19faHRtbCc7XG52YXIgSFRNTF9OQU1FU1BBQ0UkMSA9IE5hbWVzcGFjZXMuaHRtbDtcbnZhciB3YXJuZWRVbmtub3duVGFncztcbnZhciBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmc7XG52YXIgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudDtcbnZhciB3YXJuRm9yVGV4dERpZmZlcmVuY2U7XG52YXIgd2FybkZvclByb3BEaWZmZXJlbmNlO1xudmFyIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXM7XG52YXIgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyO1xudmFyIGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmc7XG52YXIgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlO1xudmFyIG5vcm1hbGl6ZUhUTUw7XG5cbntcbiAgd2FybmVkVW5rbm93blRhZ3MgPSB7XG4gICAgLy8gVGhlcmUgYXJlIHdvcmtpbmcgcG9seWZpbGxzIGZvciA8ZGlhbG9nPi4gTGV0IHBlb3BsZSB1c2UgaXQuXG4gICAgZGlhbG9nOiB0cnVlLFxuICAgIC8vIEVsZWN0cm9uIHNoaXBzIGEgY3VzdG9tIDx3ZWJ2aWV3PiB0YWcgdG8gZGlzcGxheSBleHRlcm5hbCB3ZWIgY29udGVudCBpblxuICAgIC8vIGFuIGlzb2xhdGVkIGZyYW1lIGFuZCBwcm9jZXNzLlxuICAgIC8vIFRoaXMgdGFnIGlzIG5vdCBwcmVzZW50IGluIG5vbiBFbGVjdHJvbiBlbnZpcm9ubWVudHMgc3VjaCBhcyBKU0RvbSB3aGljaFxuICAgIC8vIGlzIG9mdGVuIHVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gICAgLy8gQHNlZSBodHRwczovL2VsZWN0cm9uanMub3JnL2RvY3MvYXBpL3dlYnZpZXctdGFnXG4gICAgd2VidmlldzogdHJ1ZVxuICB9O1xuXG4gIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQgPSBmdW5jdGlvbiAodHlwZSwgcHJvcHMpIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXModHlwZSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyQxKHR5cGUsIHByb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcywge1xuICAgICAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llczogcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyxcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM6IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNcbiAgICB9KTtcbiAgfTsgLy8gSUUgMTEgcGFyc2VzICYgbm9ybWFsaXplcyB0aGUgc3R5bGUgYXR0cmlidXRlIGFzIG9wcG9zZWQgdG8gb3RoZXJcbiAgLy8gYnJvd3NlcnMuIEl0IGFkZHMgc3BhY2VzIGFuZCBzb3J0cyB0aGUgcHJvcGVydGllcyBpbiBzb21lXG4gIC8vIG5vbi1hbHBoYWJldGljYWwgb3JkZXIuIEhhbmRsaW5nIHRoYXQgd291bGQgcmVxdWlyZSBzb3J0aW5nIENTU1xuICAvLyBwcm9wZXJ0aWVzIGluIHRoZSBjbGllbnQgJiBzZXJ2ZXIgdmVyc2lvbnMgb3IgYXBwbHlpbmdcbiAgLy8gYGV4cGVjdGVkU3R5bGVgIHRvIGEgdGVtcG9yYXJ5IERPTSBub2RlIHRvIHJlYWQgaXRzIGBzdHlsZWAgYXR0cmlidXRlXG4gIC8vIG5vcm1hbGl6ZWQuIFNpbmNlIGl0IG9ubHkgYWZmZWN0cyBJRSwgd2UncmUgc2tpcHBpbmcgc3R5bGUgd2FybmluZ3NcbiAgLy8gaW4gdGhhdCBicm93c2VyIGNvbXBsZXRlbHkgaW4gZmF2b3Igb2YgZG9pbmcgYWxsIHRoYXQgd29yay5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE4MDdcblxuXG4gIGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmcgPSBjYW5Vc2VET00gJiYgIWRvY3VtZW50LmRvY3VtZW50TW9kZTsgLy8gSFRNTCBwYXJzaW5nIG5vcm1hbGl6ZXMgQ1IgYW5kIENSTEYgdG8gTEYuXG4gIC8vIEl0IGFsc28gY2FuIHR1cm4gXFx1MDAwMCBpbnRvIFxcdUZGRkQgaW5zaWRlIGF0dHJpYnV0ZXMuXG4gIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9zaW5nbGUtcGFnZS5odG1sI3ByZXByb2Nlc3NpbmctdGhlLWlucHV0LXN0cmVhbVxuICAvLyBJZiB3ZSBoYXZlIGEgbWlzbWF0Y2gsIGl0IG1pZ2h0IGJlIGNhdXNlZCBieSB0aGF0LlxuICAvLyBXZSB3aWxsIHN0aWxsIHBhdGNoIHVwIGluIHRoaXMgY2FzZSBidXQgbm90IGZpcmUgdGhlIHdhcm5pbmcuXG5cbiAgdmFyIE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCA9IC9cXHJcXG4/L2c7XG4gIHZhciBOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVggPSAvXFx1MDAwMHxcXHVGRkZEL2c7XG5cbiAgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlID0gZnVuY3Rpb24gKG1hcmt1cCkge1xuICAgIHZhciBtYXJrdXBTdHJpbmcgPSB0eXBlb2YgbWFya3VwID09PSAnc3RyaW5nJyA/IG1hcmt1cCA6ICcnICsgbWFya3VwO1xuICAgIHJldHVybiBtYXJrdXBTdHJpbmcucmVwbGFjZShOT1JNQUxJWkVfTkVXTElORVNfUkVHRVgsICdcXG4nKS5yZXBsYWNlKE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCwgJycpO1xuICB9O1xuXG4gIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChzZXJ2ZXJUZXh0LCBjbGllbnRUZXh0KSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWRDbGllbnRUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFRleHQpO1xuICAgIHZhciBub3JtYWxpemVkU2VydmVyVGV4dCA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJUZXh0KTtcblxuICAgIGlmIChub3JtYWxpemVkU2VydmVyVGV4dCA9PT0gbm9ybWFsaXplZENsaWVudFRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignVGV4dCBjb250ZW50IGRpZCBub3QgbWF0Y2guIFNlcnZlcjogXCIlc1wiIENsaWVudDogXCIlc1wiJywgbm9ybWFsaXplZFNlcnZlclRleHQsIG5vcm1hbGl6ZWRDbGllbnRUZXh0KTtcbiAgfTtcblxuICB3YXJuRm9yUHJvcERpZmZlcmVuY2UgPSBmdW5jdGlvbiAocHJvcE5hbWUsIHNlcnZlclZhbHVlLCBjbGllbnRWYWx1ZSkge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBub3JtYWxpemVkQ2xpZW50VmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VmFsdWUpO1xuICAgIHZhciBub3JtYWxpemVkU2VydmVyVmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVmFsdWUpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSA9PT0gbm9ybWFsaXplZENsaWVudFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Byb3AgYCVzYCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6ICVzIENsaWVudDogJXMnLCBwcm9wTmFtZSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZFNlcnZlclZhbHVlKSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZENsaWVudFZhbHVlKSk7XG4gIH07XG5cbiAgd2FybkZvckV4dHJhQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lcykge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBhdHRyaWJ1dGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgIH0pO1xuXG4gICAgZXJyb3IoJ0V4dHJhIGF0dHJpYnV0ZXMgZnJvbSB0aGUgc2VydmVyOiAlcycsIG5hbWVzKTtcbiAgfTtcblxuICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAocmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHtcbiAgICBpZiAobGlzdGVuZXIgPT09IGZhbHNlKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBgZmFsc2VgLlxcblxcbicgKyAnSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sICcgKyAncGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuJywgcmVnaXN0cmF0aW9uTmFtZSwgcmVnaXN0cmF0aW9uTmFtZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYCVzYCB0eXBlLicsIHJlZ2lzdHJhdGlvbk5hbWUsIHR5cGVvZiBsaXN0ZW5lcik7XG4gICAgfVxuICB9OyAvLyBQYXJzZSB0aGUgSFRNTCBhbmQgcmVhZCBpdCBiYWNrIHRvIG5vcm1hbGl6ZSB0aGUgSFRNTCBzdHJpbmcgc28gdGhhdCBpdFxuICAvLyBjYW4gYmUgdXNlZCBmb3IgY29tcGFyaXNvbi5cblxuXG4gIG5vcm1hbGl6ZUhUTUwgPSBmdW5jdGlvbiAocGFyZW50LCBodG1sKSB7XG4gICAgLy8gV2UgY291bGQgaGF2ZSBjcmVhdGVkIGEgc2VwYXJhdGUgZG9jdW1lbnQgaGVyZSB0byBhdm9pZFxuICAgIC8vIHJlLWluaXRpYWxpemluZyBjdXN0b20gZWxlbWVudHMgaWYgdGhleSBleGlzdC4gQnV0IHRoaXMgYnJlYWtzXG4gICAgLy8gaG93IDxub3NjcmlwdD4gaXMgYmVpbmcgaGFuZGxlZC4gU28gd2UgdXNlIHRoZSBzYW1lIGRvY3VtZW50LlxuICAgIC8vIFNlZSB0aGUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMTE1Ny5cbiAgICB2YXIgdGVzdEVsZW1lbnQgPSBwYXJlbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxID8gcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChwYXJlbnQudGFnTmFtZSkgOiBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocGFyZW50Lm5hbWVzcGFjZVVSSSwgcGFyZW50LnRhZ05hbWUpO1xuICAgIHRlc3RFbGVtZW50LmlubmVySFRNTCA9IGh0bWw7XG4gICAgcmV0dXJuIHRlc3RFbGVtZW50LmlubmVySFRNTDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHJldHVybiByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/IHJvb3RDb250YWluZXJFbGVtZW50IDogcm9vdENvbnRhaW5lckVsZW1lbnQub3duZXJEb2N1bWVudDtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmZ1bmN0aW9uIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KG5vZGUpIHtcbiAgLy8gTW9iaWxlIFNhZmFyaSBkb2VzIG5vdCBmaXJlIHByb3Blcmx5IGJ1YmJsZSBjbGljayBldmVudHMgb25cbiAgLy8gbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzLCB3aGljaCBtZWFucyBkZWxlZ2F0ZWQgY2xpY2sgbGlzdGVuZXJzIGRvIG5vdFxuICAvLyBmaXJlLiBUaGUgd29ya2Fyb3VuZCBmb3IgdGhpcyBidWcgaW52b2x2ZXMgYXR0YWNoaW5nIGFuIGVtcHR5IGNsaWNrXG4gIC8vIGxpc3RlbmVyIG9uIHRoZSB0YXJnZXQgbm9kZS5cbiAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDEwLzA5L2NsaWNrX2V2ZW50X2RlbC5odG1sXG4gIC8vIEp1c3Qgc2V0IGl0IHVzaW5nIHRoZSBvbmNsaWNrIHByb3BlcnR5IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBtYW5hZ2UgYW55XG4gIC8vIGJvb2trZWVwaW5nIGZvciBpdC4gTm90IHN1cmUgaWYgd2UgbmVlZCB0byBjbGVhciBpdCB3aGVuIHRoZSBsaXN0ZW5lciBpc1xuICAvLyByZW1vdmVkLlxuICAvLyBUT0RPOiBPbmx5IGRvIHRoaXMgZm9yIHRoZSByZWxldmFudCBTYWZhcmlzIG1heWJlP1xuICBub2RlLm9uY2xpY2sgPSBub29wO1xufVxuXG5mdW5jdGlvbiBzZXRJbml0aWFsRE9NUHJvcGVydGllcyh0YWcsIGRvbUVsZW1lbnQsIHJvb3RDb250YWluZXJFbGVtZW50LCBuZXh0UHJvcHMsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGZvciAodmFyIHByb3BLZXkgaW4gbmV4dFByb3BzKSB7XG4gICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICAvLyBGcmVlemUgdGhlIG5leHQgc3R5bGUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBiZVxuICAgICAgICAgIC8vIG11dGF0ZWQuIFdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgZm9yIHRoaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgICAgT2JqZWN0LmZyZWV6ZShuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVsaWVzIG9uIGB1cGRhdGVTdHlsZXNCeUlEYCBub3QgbXV0YXRpbmcgYHN0eWxlVXBkYXRlc2AuXG5cblxuICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgbmV4dFByb3ApO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgc2V0SW5uZXJIVE1MKGRvbUVsZW1lbnQsIG5leHRIdG1sKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIGluaXRpYWwgdGV4dENvbnRlbnQgd2hlbiB0aGUgdGV4dCBpcyBlbXB0eS4gSW4gSUUxMSBzZXR0aW5nXG4gICAgICAgIC8vIHRleHRDb250ZW50IG9uIGEgPHRleHRhcmVhPiB3aWxsIGNhdXNlIHRoZSBwbGFjZWhvbGRlciB0byBub3RcbiAgICAgICAgLy8gc2hvdyB3aXRoaW4gdGhlIDx0ZXh0YXJlYT4gdW50aWwgaXQgaGFzIGJlZW4gZm9jdXNlZCBhbmQgYmx1cnJlZCBhZ2Fpbi5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82NzMxI2lzc3VlY29tbWVudC0yNTQ4NzQ1NTNcbiAgICAgICAgdmFyIGNhblNldFRleHRDb250ZW50ID0gdGFnICE9PSAndGV4dGFyZWEnIHx8IG5leHRQcm9wICE9PSAnJztcblxuICAgICAgICBpZiAoY2FuU2V0VGV4dENvbnRlbnQpIHtcbiAgICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCAnJyArIG5leHRQcm9wKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBBVVRPRk9DVVMpIDsgZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCwgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVET01Qcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHdhc0N1c3RvbUNvbXBvbmVudFRhZywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgLy8gVE9ETzogSGFuZGxlIHdhc0N1c3RvbUNvbXBvbmVudFRhZ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHVwZGF0ZVBheWxvYWQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgcHJvcEtleSA9IHVwZGF0ZVBheWxvYWRbaV07XG4gICAgdmFyIHByb3BWYWx1ZSA9IHVwZGF0ZVBheWxvYWRbaSArIDFdO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHNldElubmVySFRNTChkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgcHJvcFZhbHVlLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50LCBwYXJlbnROYW1lc3BhY2UpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnOyAvLyBXZSBjcmVhdGUgdGFncyBpbiB0aGUgbmFtZXNwYWNlIG9mIHRoZWlyIHBhcmVudCBjb250YWluZXIsIGV4Y2VwdCBIVE1MXG4gIC8vIHRhZ3MgZ2V0IG5vIG5hbWVzcGFjZS5cblxuICB2YXIgb3duZXJEb2N1bWVudCA9IGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCk7XG4gIHZhciBkb21FbGVtZW50O1xuICB2YXIgbmFtZXNwYWNlVVJJID0gcGFyZW50TmFtZXNwYWNlO1xuXG4gIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICBuYW1lc3BhY2VVUkkgPSBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSk7XG4gIH1cblxuICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAge1xuICAgICAgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcyk7IC8vIFNob3VsZCB0aGlzIGNoZWNrIGJlIGdhdGVkIGJ5IHBhcmVudCBuYW1lc3BhY2U/IE5vdCBzdXJlIHdlIHdhbnQgdG9cbiAgICAgIC8vIGFsbG93IDxTVkc+IG9yIDxtQVRIPi5cblxuICAgICAgaWYgKCFpc0N1c3RvbUNvbXBvbmVudFRhZyAmJiB0eXBlICE9PSB0eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgZXJyb3IoJzwlcyAvPiBpcyB1c2luZyBpbmNvcnJlY3QgY2FzaW5nLiAnICsgJ1VzZSBQYXNjYWxDYXNlIGZvciBSZWFjdCBjb21wb25lbnRzLCAnICsgJ29yIGxvd2VyY2FzZSBmb3IgSFRNTCBlbGVtZW50cy4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgc2NyaXB0IHZpYSAuaW5uZXJIVE1MIHNvIGl0cyBcInBhcnNlci1pbnNlcnRlZFwiIGZsYWcgaXNcbiAgICAgIC8vIHNldCB0byB0cnVlIGFuZCBpdCBkb2VzIG5vdCBleGVjdXRlXG4gICAgICB2YXIgZGl2ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgZGl2LmlubmVySFRNTCA9ICc8c2NyaXB0PjwnICsgJy9zY3JpcHQ+JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIHlpZWxkIGEgc2NyaXB0IGVsZW1lbnQuXG5cbiAgICAgIHZhciBmaXJzdENoaWxkID0gZGl2LmZpcnN0Q2hpbGQ7XG4gICAgICBkb21FbGVtZW50ID0gZGl2LnJlbW92ZUNoaWxkKGZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHByb3BzLmlzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gJEZsb3dJc3N1ZSBgY3JlYXRlRWxlbWVudGAgc2hvdWxkIGJlIHVwZGF0ZWQgZm9yIFdlYiBDb21wb25lbnRzXG4gICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUsIHtcbiAgICAgICAgaXM6IHByb3BzLmlzXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VwYXJhdGUgZWxzZSBicmFuY2ggaW5zdGVhZCBvZiB1c2luZyBgcHJvcHMuaXMgfHwgdW5kZWZpbmVkYCBhYm92ZSBiZWNhdXNlIG9mIGEgRmlyZWZveCBidWcuXG4gICAgICAvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC82ODk2XG4gICAgICAvLyBhbmQgZGlzY3Vzc2lvbiBpbiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjQwXG4gICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpOyAvLyBOb3JtYWxseSBhdHRyaWJ1dGVzIGFyZSBhc3NpZ25lZCBpbiBgc2V0SW5pdGlhbERPTVByb3BlcnRpZXNgLCBob3dldmVyIHRoZSBgbXVsdGlwbGVgIGFuZCBgc2l6ZWBcbiAgICAgIC8vIGF0dHJpYnV0ZXMgb24gYHNlbGVjdGBzIG5lZWRzIHRvIGJlIGFkZGVkIGJlZm9yZSBgb3B0aW9uYHMgYXJlIGluc2VydGVkLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50czpcbiAgICAgIC8vIC0gYSBidWcgd2hlcmUgdGhlIGBzZWxlY3RgIGRvZXMgbm90IHNjcm9sbCB0byB0aGUgY29ycmVjdCBvcHRpb24gYmVjYXVzZSBzaW5ndWxhclxuICAgICAgLy8gIGBzZWxlY3RgIGVsZW1lbnRzIGF1dG9tYXRpY2FsbHkgcGljayB0aGUgZmlyc3QgaXRlbSAjMTMyMjJcbiAgICAgIC8vIC0gYSBidWcgd2hlcmUgdGhlIGBzZWxlY3RgIHNldCB0aGUgZmlyc3QgaXRlbSBhcyBzZWxlY3RlZCBkZXNwaXRlIHRoZSBgc2l6ZWAgYXR0cmlidXRlICMxNDIzOVxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTMyMjJcbiAgICAgIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MjM5XG5cbiAgICAgIGlmICh0eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgICB2YXIgbm9kZSA9IGRvbUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgICAgbm9kZS5tdWx0aXBsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMuc2l6ZSkge1xuICAgICAgICAgIC8vIFNldHRpbmcgYSBzaXplIGdyZWF0ZXIgdGhhbiAxIGNhdXNlcyBhIHNlbGVjdCB0byBiZWhhdmUgbGlrZSBgbXVsdGlwbGU9dHJ1ZWAsIHdoZXJlXG4gICAgICAgICAgLy8gaXQgaXMgcG9zc2libGUgdGhhdCBubyBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHdoZW4gYSBzZWxlY3QgaW4gXCJzaW5nbGUgc2VsZWN0aW9uIG1vZGVcIi5cbiAgICAgICAgICBub2RlLnNpemUgPSBwcm9wcy5zaXplO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHR5cGUpO1xuICB9XG5cbiAge1xuICAgIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgIGlmICghaXNDdXN0b21Db21wb25lbnRUYWcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvbUVsZW1lbnQpID09PSAnW29iamVjdCBIVE1MVW5rbm93bkVsZW1lbnRdJyAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHdhcm5lZFVua25vd25UYWdzLCB0eXBlKSkge1xuICAgICAgICB3YXJuZWRVbmtub3duVGFnc1t0eXBlXSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1RoZSB0YWcgPCVzPiBpcyB1bnJlY29nbml6ZWQgaW4gdGhpcyBicm93c2VyLiAnICsgJ0lmIHlvdSBtZWFudCB0byByZW5kZXIgYSBSZWFjdCBjb21wb25lbnQsIHN0YXJ0IGl0cyBuYW1lIHdpdGggJyArICdhbiB1cHBlcmNhc2UgbGV0dGVyLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb21FbGVtZW50O1xufVxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUodGV4dCwgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG59XG5mdW5jdGlvbiBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHJhd1Byb3BzLCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIHJhd1Byb3BzKTtcblxuICB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIHJhd1Byb3BzKTtcbiAgfSAvLyBUT0RPOiBNYWtlIHN1cmUgdGhhdCB3ZSBjaGVjayBpc01vdW50ZWQgYmVmb3JlIGZpcmluZyBhbnkgb2YgdGhlc2UgZXZlbnRzLlxuXG5cbiAgdmFyIHByb3BzO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2NhbmNlbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2xvc2UnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lmcmFtZSc6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdlbWJlZCc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgbG9hZCBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICBjYXNlICdhdWRpbyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGFsbCB0aGUgbWVkaWEgZXZlbnRzLlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWRpYUV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChtZWRpYUV2ZW50VHlwZXNbaV0sIGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzb3VyY2UnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGVycm9yIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ltZyc6XG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBlcnJvciBhbmQgbG9hZCBldmVudHMuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgdG9nZ2xlIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgndG9nZ2xlJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgcHJvcHMpO1xuICBzZXRJbml0aWFsRE9NUHJvcGVydGllcyh0YWcsIGRvbUVsZW1lbnQsIHJvb3RDb250YWluZXJFbGVtZW50LCBwcm9wcywgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlcihkb21FbGVtZW50LCByYXdQcm9wcywgZmFsc2UpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDMoZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgcG9zdE1vdW50V3JhcHBlciQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cbn0gLy8gQ2FsY3VsYXRlIHRoZSBkaWZmIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuXG5mdW5jdGlvbiBkaWZmUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIGxhc3RSYXdQcm9wcywgbmV4dFJhd1Byb3BzLCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIG5leHRSYXdQcm9wcyk7XG4gIH1cblxuICB2YXIgdXBkYXRlUGF5bG9hZCA9IG51bGw7XG4gIHZhciBsYXN0UHJvcHM7XG4gIHZhciBuZXh0UHJvcHM7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBsYXN0UHJvcHMgPSBsYXN0UmF3UHJvcHM7XG4gICAgICBuZXh0UHJvcHMgPSBuZXh0UmF3UHJvcHM7XG5cbiAgICAgIGlmICh0eXBlb2YgbGFzdFByb3BzLm9uQ2xpY2sgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG5leHRQcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCBuZXh0UHJvcHMpO1xuICB2YXIgcHJvcEtleTtcbiAgdmFyIHN0eWxlTmFtZTtcbiAgdmFyIHN0eWxlVXBkYXRlcyA9IG51bGw7XG5cbiAgZm9yIChwcm9wS2V5IGluIGxhc3RQcm9wcykge1xuICAgIGlmIChuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgIWxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCBsYXN0UHJvcHNbcHJvcEtleV0gPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB2YXIgbGFzdFN0eWxlID0gbGFzdFByb3BzW3Byb3BLZXldO1xuXG4gICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0U3R5bGUpIHtcbiAgICAgICAgaWYgKGxhc3RTdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MIHx8IHByb3BLZXkgPT09IENISUxEUkVOKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBBVVRPRk9DVVMpIDsgZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZS4gSWYgYW55IGxpc3RlbmVyIHVwZGF0ZXMgd2UgbmVlZCB0byBlbnN1cmVcbiAgICAgIC8vIHRoYXQgdGhlIFwiY3VycmVudFwiIGZpYmVyIHBvaW50ZXIgZ2V0cyB1cGRhdGVkIHNvIHdlIG5lZWQgYSBjb21taXRcbiAgICAgIC8vIHRvIHVwZGF0ZSB0aGlzIGVsZW1lbnQuXG4gICAgICBpZiAoIXVwZGF0ZVBheWxvYWQpIHtcbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgYWxsIG90aGVyIGRlbGV0ZWQgcHJvcGVydGllcyB3ZSBhZGQgaXQgdG8gdGhlIHF1ZXVlLiBXZSB1c2VcbiAgICAgIC8vIHRoZSBhbGxvd2VkIHByb3BlcnR5IGxpc3QgaW4gdGhlIGNvbW1pdCBwaGFzZSBpbnN0ZWFkLlxuICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAocHJvcEtleSBpbiBuZXh0UHJvcHMpIHtcbiAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG4gICAgdmFyIGxhc3RQcm9wID0gbGFzdFByb3BzICE9IG51bGwgPyBsYXN0UHJvcHNbcHJvcEtleV0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCBuZXh0UHJvcCA9PT0gbGFzdFByb3AgfHwgbmV4dFByb3AgPT0gbnVsbCAmJiBsYXN0UHJvcCA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKG5leHRQcm9wKSB7XG4gICAgICAgICAgLy8gRnJlZXplIHRoZSBuZXh0IHN0eWxlIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBhc3N1bWUgaXQgd29uJ3QgYmVcbiAgICAgICAgICAvLyBtdXRhdGVkLiBXZSBoYXZlIGFscmVhZHkgd2FybmVkIGZvciB0aGlzIGluIHRoZSBwYXN0LlxuICAgICAgICAgIE9iamVjdC5mcmVlemUobmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChsYXN0UHJvcCkge1xuICAgICAgICAvLyBVbnNldCBzdHlsZXMgb24gYGxhc3RQcm9wYCBidXQgbm90IG9uIGBuZXh0UHJvcGAuXG4gICAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RQcm9wKSB7XG4gICAgICAgICAgaWYgKGxhc3RQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiYgKCFuZXh0UHJvcCB8fCAhbmV4dFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkpIHtcbiAgICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBVcGRhdGUgc3R5bGVzIHRoYXQgY2hhbmdlZCBzaW5jZSBgbGFzdFByb3BgLlxuXG5cbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAobmV4dFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiBsYXN0UHJvcFtzdHlsZU5hbWVdICE9PSBuZXh0UHJvcFtzdHlsZU5hbWVdKSB7XG4gICAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSBuZXh0UHJvcFtzdHlsZU5hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVsaWVzIG9uIGB1cGRhdGVTdHlsZXNCeUlEYCBub3QgbXV0YXRpbmcgYHN0eWxlVXBkYXRlc2AuXG4gICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkKSB7XG4gICAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZC5wdXNoKHByb3BLZXksIHN0eWxlVXBkYXRlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZVVwZGF0ZXMgPSBuZXh0UHJvcDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgbGFzdEh0bWwgPSBsYXN0UHJvcCA/IGxhc3RQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChsYXN0SHRtbCAhPT0gbmV4dEh0bWwpIHtcbiAgICAgICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbmV4dEh0bWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgJycgKyBuZXh0UHJvcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcpIDsgZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgLy8gV2UgZWFnZXJseSBsaXN0ZW4gdG8gdGhpcyBldmVuIHRob3VnaCB3ZSBoYXZlbid0IGNvbW1pdHRlZCB5ZXQuXG4gICAgICAgIGlmICggdHlwZW9mIG5leHRQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wS2V5ID09PSAnb25TY3JvbGwnKSB7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnc2Nyb2xsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkICYmIGxhc3RQcm9wICE9PSBuZXh0UHJvcCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBJZiBhbnkgbGlzdGVuZXIgdXBkYXRlcyB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IHRoZSBcImN1cnJlbnRcIiBwcm9wcyBwb2ludGVyIGdldHMgdXBkYXRlZCBzbyB3ZSBuZWVkIGEgY29tbWl0XG4gICAgICAgIC8vIHRvIHVwZGF0ZSB0aGlzIGVsZW1lbnQuXG4gICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ29iamVjdCcgJiYgbmV4dFByb3AgIT09IG51bGwgJiYgbmV4dFByb3AuJCR0eXBlb2YgPT09IFJFQUNUX09QQVFVRV9JRF9UWVBFKSB7XG4gICAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgdXNlT3BhcXVlUmVmZXJlbmNlJ3Mgb3BhcXVlIG9iamVjdCwgdGhpcyBtZWFucyB3ZSBhcmUgaHlkcmF0aW5nLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCBjYWxsIHRoZSBvcGFxdWUgb2JqZWN0J3MgdG9TdHJpbmcgZnVuY3Rpb24gd2hpY2ggZ2VuZXJhdGVzIGEgbmV3IGNsaWVudFxuICAgICAgLy8gSUQgc28gY2xpZW50IGFuZCBzZXJ2ZXIgSURzIG1hdGNoIGFuZCB0aHJvd3MgdG8gcmVyZW5kZXIuXG4gICAgICBuZXh0UHJvcC50b1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgYW55IG90aGVyIHByb3BlcnR5IHdlIGFsd2F5cyBhZGQgaXQgdG8gdGhlIHF1ZXVlIGFuZCB0aGVuIHdlXG4gICAgICAvLyBmaWx0ZXIgaXQgb3V0IHVzaW5nIHRoZSBhbGxvd2VkIHByb3BlcnR5IGxpc3QgZHVyaW5nIHRoZSBjb21taXQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbmV4dFByb3ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZVVwZGF0ZXMpIHtcbiAgICB7XG4gICAgICB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYoc3R5bGVVcGRhdGVzLCBuZXh0UHJvcHNbU1RZTEVdKTtcbiAgICB9XG5cbiAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2goU1RZTEUsIHN0eWxlVXBkYXRlcyk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn0gLy8gQXBwbHkgdGhlIGRpZmYuXG5cbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdGFnLCBsYXN0UmF3UHJvcHMsIG5leHRSYXdQcm9wcykge1xuICAvLyBVcGRhdGUgY2hlY2tlZCAqYmVmb3JlKiBuYW1lLlxuICAvLyBJbiB0aGUgbWlkZGxlIG9mIGFuIHVwZGF0ZSwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBjaGVja2VkLlxuICAvLyBXaGVuIGEgY2hlY2tlZCByYWRpbyB0cmllcyB0byBjaGFuZ2UgbmFtZSwgYnJvd3NlciBtYWtlcyBhbm90aGVyIHJhZGlvJ3MgY2hlY2tlZCBmYWxzZS5cbiAgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiBuZXh0UmF3UHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuZXh0UmF3UHJvcHMubmFtZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlQ2hlY2tlZChkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICB9XG5cbiAgdmFyIHdhc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgbGFzdFJhd1Byb3BzKTtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCBuZXh0UmF3UHJvcHMpOyAvLyBBcHBseSB0aGUgZGlmZi5cblxuICB1cGRhdGVET01Qcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHdhc0N1c3RvbUNvbXBvbmVudFRhZywgaXNDdXN0b21Db21wb25lbnRUYWcpOyAvLyBUT0RPOiBFbnN1cmUgdGhhdCBhbiB1cGRhdGUgZ2V0cyBzY2hlZHVsZWQgaWYgYW55IG9mIHRoZSBzcGVjaWFsIHByb3BzXG4gIC8vIGNoYW5nZWQuXG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBVcGRhdGUgdGhlIHdyYXBwZXIgYXJvdW5kIGlucHV0cyAqYWZ0ZXIqIHVwZGF0aW5nIHByb3BzLiBUaGlzIGhhcyB0b1xuICAgICAgLy8gaGFwcGVuIGFmdGVyIGB1cGRhdGVET01Qcm9wZXJ0aWVzYC4gT3RoZXJ3aXNlIEhUTUw1IGlucHV0IHZhbGlkYXRpb25zXG4gICAgICAvLyByYWlzZSB3YXJuaW5ncyBhbmQgcHJldmVudCB0aGUgbmV3IHZhbHVlIGZyb20gYmVpbmcgYXNzaWduZWQuXG4gICAgICB1cGRhdGVXcmFwcGVyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHVwZGF0ZVdyYXBwZXIkMShkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgLy8gPHNlbGVjdD4gdmFsdWUgdXBkYXRlIG5lZWRzIHRvIG9jY3VyIGFmdGVyIDxvcHRpb24+IGNoaWxkcmVuXG4gICAgICAvLyByZWNvbmNpbGlhdGlvblxuICAgICAgcG9zdFVwZGF0ZVdyYXBwZXIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBvc3NpYmxlU3RhbmRhcmROYW1lKHByb3BOYW1lKSB7XG4gIHtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKCFwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXSB8fCBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCByYXdQcm9wcywgcGFyZW50TmFtZXNwYWNlLCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWc7XG4gIHZhciBleHRyYUF0dHJpYnV0ZU5hbWVzO1xuXG4gIHtcbiAgICBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgPSByYXdQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklOR10gPT09IHRydWU7XG4gICAgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIHJhd1Byb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcmF3UHJvcHMpO1xuICB9IC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG5cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjYW5jZWwnLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Nsb3NlJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lmcmFtZSc6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdlbWJlZCc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgbG9hZCBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgYWxsIHRoZSBtZWRpYSBldmVudHMuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1tpXSwgZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc291cmNlJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBlcnJvciBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ltZyc6XG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBlcnJvciBhbmQgbG9hZCBldmVudHMuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSB0b2dnbGUgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCd0b2dnbGUnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZShkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHZhbGlkYXRlUHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCByYXdQcm9wcyk7XG5cbiAge1xuICAgIGV4dHJhQXR0cmlidXRlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmF0dHJpYnV0ZXM7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXR0cmlidXRlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlc1tfaV0ubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgLy8gQnVpbHQtaW4gU1NSIGF0dHJpYnV0ZSBpcyBhbGxvd2VkXG4gICAgICAgIGNhc2UgJ2RhdGEtcmVhY3Ryb290JzpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gQ29udHJvbGxlZCBhdHRyaWJ1dGVzIGFyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgIC8vIFRPRE86IE9ubHkgaWdub3JlIHRoZW0gb24gY29udHJvbGxlZCB0YWdzLlxuXG4gICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjaGVja2VkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzZWxlY3RlZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IHVzZSB0aGUgb3JpZ2luYWwgbmFtZS5cbiAgICAgICAgICAvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMDY3Ni5cbiAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmFkZChhdHRyaWJ1dGVzW19pXS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlUGF5bG9hZCA9IG51bGw7XG5cbiAgZm9yICh2YXIgcHJvcEtleSBpbiByYXdQcm9wcykge1xuICAgIGlmICghcmF3UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBuZXh0UHJvcCA9IHJhd1Byb3BzW3Byb3BLZXldO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICAvLyBGb3IgdGV4dCBjb250ZW50IGNoaWxkcmVuIHdlIGNvbXBhcmUgYWdhaW5zdCB0ZXh0Q29udGVudC4gVGhpc1xuICAgICAgLy8gbWlnaHQgbWF0Y2ggYWRkaXRpb25hbCBIVE1MIHRoYXQgaXMgaGlkZGVuIHdoZW4gd2UgcmVhZCBpdCB1c2luZ1xuICAgICAgLy8gdGV4dENvbnRlbnQuIEUuZy4gXCJmb29cIiB3aWxsIG1hdGNoIFwiZjxzcGFuPm9vPC9zcGFuPlwiIGJ1dCB0aGF0IHN0aWxsXG4gICAgICAvLyBzYXRpc2ZpZXMgb3VyIHJlcXVpcmVtZW50LiBPdXIgcmVxdWlyZW1lbnQgaXMgbm90IHRvIHByb2R1Y2UgcGVyZmVjdFxuICAgICAgLy8gSFRNTCBhbmQgYXR0cmlidXRlcy4gSWRlYWxseSB3ZSBzaG91bGQgcHJlc2VydmUgc3RydWN0dXJlIGJ1dCBpdCdzXG4gICAgICAvLyBvayBub3QgdG8gaWYgdGhlIHZpc2libGUgY29udGVudCBpcyBzdGlsbCBlbm91Z2ggdG8gaW5kaWNhdGUgd2hhdFxuICAgICAgLy8gZXZlbiBsaXN0ZW5lcnMgdGhlc2Ugbm9kZXMgbWlnaHQgYmUgd2lyZWQgdXAgdG8uXG4gICAgICAvLyBUT0RPOiBXYXJuIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBhIHNpbmdsZSB0ZXh0Tm9kZSBhcyBhIGNoaWxkLlxuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIHVzZSBkb21FbGVtZW50LmZpcnN0Q2hpbGQubm9kZVZhbHVlIHRvIGNvbXBhcmU/XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudC50ZXh0Q29udGVudCAhPT0gbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAoICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZShkb21FbGVtZW50LnRleHRDb250ZW50LCBuZXh0UHJvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtDSElMRFJFTiwgbmV4dFByb3BdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnQudGV4dENvbnRlbnQgIT09ICcnICsgbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAoICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZShkb21FbGVtZW50LnRleHRDb250ZW50LCBuZXh0UHJvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtDSElMRFJFTiwgJycgKyBuZXh0UHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIGlmICggdHlwZW9mIG5leHRQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wS2V5ID09PSAnb25TY3JvbGwnKSB7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnc2Nyb2xsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCAvLyBDb252aW5jZSBGbG93IHdlJ3ZlIGNhbGN1bGF0ZWQgaXQgKGl0J3MgREVWLW9ubHkgaW4gdGhpcyBtZXRob2QuKVxuICAgIHR5cGVvZiBpc0N1c3RvbUNvbXBvbmVudFRhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBwcm9wZXJ0aWVzIGNvcnJlc3BvbmQgdG8gdGhlaXIgZXhwZWN0ZWQgdmFsdWVzLlxuICAgICAgdmFyIHNlcnZlclZhbHVlID0gdm9pZCAwO1xuICAgICAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhwcm9wS2V5KTtcblxuICAgICAgaWYgKHN1cHByZXNzSHlkcmF0aW9uV2FybmluZykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcgfHwgLy8gQ29udHJvbGxlZCBhdHRyaWJ1dGVzIGFyZSBub3QgdmFsaWRhdGVkXG4gICAgICAvLyBUT0RPOiBPbmx5IGlnbm9yZSB0aGVtIG9uIGNvbnRyb2xsZWQgdGFncy5cbiAgICAgIHByb3BLZXkgPT09ICd2YWx1ZScgfHwgcHJvcEtleSA9PT0gJ2NoZWNrZWQnIHx8IHByb3BLZXkgPT09ICdzZWxlY3RlZCcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgICAgdmFyIHNlcnZlckhUTUwgPSBkb21FbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIGV4cGVjdGVkSFRNTCA9IG5vcm1hbGl6ZUhUTUwoZG9tRWxlbWVudCwgbmV4dEh0bWwpO1xuXG4gICAgICAgICAgaWYgKGV4cGVjdGVkSFRNTCAhPT0gc2VydmVySFRNTCkge1xuICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlckhUTUwsIGV4cGVjdGVkSFRNTCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleSk7XG5cbiAgICAgICAgaWYgKGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRTdHlsZSA9IGNyZWF0ZURhbmdlcm91c1N0cmluZ0ZvclN0eWxlcyhuZXh0UHJvcCk7XG4gICAgICAgICAgc2VydmVyVmFsdWUgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcblxuICAgICAgICAgIGlmIChleHBlY3RlZFN0eWxlICE9PSBzZXJ2ZXJWYWx1ZSkge1xuICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBleHBlY3RlZFN0eWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wKTtcblxuICAgICAgICBpZiAobmV4dFByb3AgIT09IHNlcnZlclZhbHVlKSB7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXNob3VsZElnbm9yZUF0dHJpYnV0ZShwcm9wS2V5LCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSAmJiAhc2hvdWxkUmVtb3ZlQXR0cmlidXRlKHByb3BLZXksIG5leHRQcm9wLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgICAgICB2YXIgaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wLCBwcm9wZXJ0eUluZm8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBvd25OYW1lc3BhY2UgPSBwYXJlbnROYW1lc3BhY2U7XG5cbiAgICAgICAgICBpZiAob3duTmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgICAgICAgICBvd25OYW1lc3BhY2UgPSBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodGFnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3duTmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc3RhbmRhcmROYW1lID0gZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUocHJvcEtleSk7XG5cbiAgICAgICAgICAgIGlmIChzdGFuZGFyZE5hbWUgIT09IG51bGwgJiYgc3RhbmRhcmROYW1lICE9PSBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgIC8vIElmIGFuIFNWRyBwcm9wIGlzIHN1cHBsaWVkIHdpdGggYmFkIGNhc2luZywgaXQgd2lsbFxuICAgICAgICAgICAgICAvLyBiZSBzdWNjZXNzZnVsbHkgcGFyc2VkIGZyb20gSFRNTCwgYnV0IHdpbGwgcHJvZHVjZSBhIG1pc21hdGNoXG4gICAgICAgICAgICAgIC8vIChhbmQgd291bGQgYmUgaW5jb3JyZWN0bHkgcmVuZGVyZWQgb24gdGhlIGNsaWVudCkuXG4gICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFscmVhZHkgd2FybiBhYm91dCBiYWQgY2FzaW5nIGVsc2V3aGVyZS5cbiAgICAgICAgICAgICAgLy8gU28gd2UnbGwgc2tpcCB0aGUgbWlzbGVhZGluZyBleHRyYSBtaXNtYXRjaCB3YXJuaW5nIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgICAgaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nID0gdHJ1ZTsgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuXG4gICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHN0YW5kYXJkTmFtZSk7XG4gICAgICAgICAgICB9IC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cblxuXG4gICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0UHJvcCAhPT0gc2VydmVyVmFsdWUgJiYgIWlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZykge1xuICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICBpZiAoZXh0cmFBdHRyaWJ1dGVOYW1lcy5zaXplID4gMCAmJiAhc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzKGV4dHJhQXR0cmlidXRlTmFtZXMpO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlcihkb21FbGVtZW50LCByYXdQcm9wcywgdHJ1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMyhkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgLy8gRm9yIGlucHV0IGFuZCB0ZXh0YXJlYSB3ZSBjdXJyZW50IGFsd2F5cyBzZXQgdGhlIHZhbHVlIHByb3BlcnR5IGF0XG4gICAgICAvLyBwb3N0IG1vdW50IHRvIGZvcmNlIGl0IHRvIGRpdmVyZ2UgZnJvbSBhdHRyaWJ1dGVzLiBIb3dldmVyLCBmb3JcbiAgICAgIC8vIG9wdGlvbiBhbmQgc2VsZWN0IHdlIGRvbid0IHF1aXRlIGRvIHRoZSBzYW1lIHRoaW5nIGFuZCBzZWxlY3RcbiAgICAgIC8vIGlzIG5vdCByZXNpbGllbnQgdG8gdGhlIERPTSBzdGF0ZSBjaGFuZ2luZyBzbyB3ZSBkb24ndCBkbyB0aGF0IGhlcmUuXG4gICAgICAvLyBUT0RPOiBDb25zaWRlciBub3QgZG9pbmcgdGhpcyBmb3IgaW5wdXQgYW5kIHRleHRhcmVhLlxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHR5cGVvZiByYXdQcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufVxuZnVuY3Rpb24gZGlmZkh5ZHJhdGVkVGV4dCh0ZXh0Tm9kZSwgdGV4dCkge1xuICB2YXIgaXNEaWZmZXJlbnQgPSB0ZXh0Tm9kZS5ub2RlVmFsdWUgIT09IHRleHQ7XG4gIHJldHVybiBpc0RpZmZlcmVudDtcbn1cbmZ1bmN0aW9uIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHROb2RlLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9yVGV4dERpZmZlcmVuY2UodGV4dE5vZGUubm9kZVZhbHVlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnROb2RlLCBjaGlsZCkge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSA8JXM+IGluIDwlcz4uJywgY2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnROb2RlLCBjaGlsZCkge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gdGhlIHRleHQgbm9kZSBcIiVzXCIgaW4gPCVzPi4nLCBjaGlsZC5ub2RlVmFsdWUsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnROb2RlLCB0YWcsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIDwlcz4gaW4gPCVzPi4nLCB0YWcsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnROb2RlLCB0ZXh0KSB7XG4gIHtcbiAgICBpZiAodGV4dCA9PT0gJycpIHtcbiAgICAgIC8vIFdlIGV4cGVjdCB0byBpbnNlcnQgZW1wdHkgdGV4dCBub2RlcyBzaW5jZSB0aGV5J3JlIG5vdCByZXByZXNlbnRlZCBpblxuICAgICAgLy8gdGhlIEhUTUwuXG4gICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBzcGVjaWFsIGNhc2UgaWYgd2UgY2FuIGp1c3QgYXZvaWQgaW5zZXJ0aW5nIGVtcHR5XG4gICAgICAvLyB0ZXh0IG5vZGVzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgdGV4dCBub2RlIGZvciBcIiVzXCIgaW4gPCVzPi4nLCB0ZXh0LCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDMoZG9tRWxlbWVudCwgdGFnLCBwcm9wcykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQyKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDEoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuICB9XG59XG5cbnZhciB2YWxpZGF0ZURPTU5lc3RpbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIHVwZGF0ZWRBbmNlc3RvckluZm8gPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICAvLyBUaGlzIHZhbGlkYXRpb24gY29kZSB3YXMgd3JpdHRlbiBiYXNlZCBvbiB0aGUgSFRNTDUgcGFyc2luZyBzcGVjOlxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29wZVxuICAvL1xuICAvLyBOb3RlOiB0aGlzIGRvZXMgbm90IGNhdGNoIGFsbCBpbnZhbGlkIG5lc3RpbmcsIG5vciBkb2VzIGl0IHRyeSB0byAoYXMgaXQnc1xuICAvLyBub3QgY2xlYXIgd2hhdCBwcmFjdGljYWwgYmVuZWZpdCBkb2luZyBzbyBwcm92aWRlcyk7IGluc3RlYWQsIHdlIHdhcm4gb25seVxuICAvLyBmb3IgY2FzZXMgd2hlcmUgdGhlIHBhcnNlciB3aWxsIGdpdmUgYSBwYXJzZSB0cmVlIGRpZmZlcmluZyBmcm9tIHdoYXQgUmVhY3RcbiAgLy8gaW50ZW5kZWQuIEZvciBleGFtcGxlLCA8Yj48ZGl2PjwvZGl2PjwvYj4gaXMgaW52YWxpZCBidXQgd2UgZG9uJ3Qgd2FyblxuICAvLyBiZWNhdXNlIGl0IHN0aWxsIHBhcnNlcyBjb3JyZWN0bHk7IHdlIGRvIHdhcm4gZm9yIG90aGVyIGNhc2VzIGxpa2UgbmVzdGVkXG4gIC8vIDxwPiB0YWdzIHdoZXJlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY29uZCBlbGVtZW50IGltcGxpY2l0bHkgY2xvc2VzIHRoZVxuICAvLyBmaXJzdCwgY2F1c2luZyBhIGNvbmZ1c2luZyBtZXNzLlxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNzcGVjaWFsXG4gIHZhciBzcGVjaWFsVGFncyA9IFsnYWRkcmVzcycsICdhcHBsZXQnLCAnYXJlYScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2Jhc2UnLCAnYmFzZWZvbnQnLCAnYmdzb3VuZCcsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnY2VudGVyJywgJ2NvbCcsICdjb2xncm91cCcsICdkZCcsICdkZXRhaWxzJywgJ2RpcicsICdkaXYnLCAnZGwnLCAnZHQnLCAnZW1iZWQnLCAnZmllbGRzZXQnLCAnZmlnY2FwdGlvbicsICdmaWd1cmUnLCAnZm9vdGVyJywgJ2Zvcm0nLCAnZnJhbWUnLCAnZnJhbWVzZXQnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLCAnaWZyYW1lJywgJ2ltZycsICdpbnB1dCcsICdpc2luZGV4JywgJ2xpJywgJ2xpbmsnLCAnbGlzdGluZycsICdtYWluJywgJ21hcnF1ZWUnLCAnbWVudScsICdtZW51aXRlbScsICdtZXRhJywgJ25hdicsICdub2VtYmVkJywgJ25vZnJhbWVzJywgJ25vc2NyaXB0JywgJ29iamVjdCcsICdvbCcsICdwJywgJ3BhcmFtJywgJ3BsYWludGV4dCcsICdwcmUnLCAnc2NyaXB0JywgJ3NlY3Rpb24nLCAnc2VsZWN0JywgJ3NvdXJjZScsICdzdHlsZScsICdzdW1tYXJ5JywgJ3RhYmxlJywgJ3Rib2R5JywgJ3RkJywgJ3RlbXBsYXRlJywgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpdGxlJywgJ3RyJywgJ3RyYWNrJywgJ3VsJywgJ3dicicsICd4bXAnXTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcblxuICB2YXIgaW5TY29wZVRhZ3MgPSBbJ2FwcGxldCcsICdjYXB0aW9uJywgJ2h0bWwnLCAndGFibGUnLCAndGQnLCAndGgnLCAnbWFycXVlZScsICdvYmplY3QnLCAndGVtcGxhdGUnLCAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNodG1sLWludGVncmF0aW9uLXBvaW50XG4gIC8vIFRPRE86IERpc3Rpbmd1aXNoIGJ5IG5hbWVzcGFjZSBoZXJlIC0tIGZvciA8dGl0bGU+LCBpbmNsdWRpbmcgaXQgaGVyZVxuICAvLyBlcnJzIG9uIHRoZSBzaWRlIG9mIGZld2VyIHdhcm5pbmdzXG4gICdmb3JlaWduT2JqZWN0JywgJ2Rlc2MnLCAndGl0bGUnXTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tYnV0dG9uLXNjb3BlXG5cbiAgdmFyIGJ1dHRvblNjb3BlVGFncyA9IGluU2NvcGVUYWdzLmNvbmNhdChbJ2J1dHRvbiddKTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjZ2VuZXJhdGUtaW1wbGllZC1lbmQtdGFnc1xuXG4gIHZhciBpbXBsaWVkRW5kVGFncyA9IFsnZGQnLCAnZHQnLCAnbGknLCAnb3B0aW9uJywgJ29wdGdyb3VwJywgJ3AnLCAncnAnLCAncnQnXTtcbiAgdmFyIGVtcHR5QW5jZXN0b3JJbmZvID0ge1xuICAgIGN1cnJlbnQ6IG51bGwsXG4gICAgZm9ybVRhZzogbnVsbCxcbiAgICBhVGFnSW5TY29wZTogbnVsbCxcbiAgICBidXR0b25UYWdJblNjb3BlOiBudWxsLFxuICAgIG5vYnJUYWdJblNjb3BlOiBudWxsLFxuICAgIHBUYWdJbkJ1dHRvblNjb3BlOiBudWxsLFxuICAgIGxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gICAgZGxJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGxcbiAgfTtcblxuICB1cGRhdGVkQW5jZXN0b3JJbmZvID0gZnVuY3Rpb24gKG9sZEluZm8sIHRhZykge1xuICAgIHZhciBhbmNlc3RvckluZm8gPSBfYXNzaWduKHt9LCBvbGRJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvKTtcblxuICAgIHZhciBpbmZvID0ge1xuICAgICAgdGFnOiB0YWdcbiAgICB9O1xuXG4gICAgaWYgKGluU2NvcGVUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChidXR0b25TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gbnVsbDtcbiAgICB9IC8vIFNlZSBydWxlcyBmb3IgJ2xpJywgJ2RkJywgJ2R0JyBzdGFydCB0YWdzIGluXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuXG5cbiAgICBpZiAoc3BlY2lhbFRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSAmJiB0YWcgIT09ICdhZGRyZXNzJyAmJiB0YWcgIT09ICdkaXYnICYmIHRhZyAhPT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsO1xuICAgIH1cblxuICAgIGFuY2VzdG9ySW5mby5jdXJyZW50ID0gaW5mbztcblxuICAgIGlmICh0YWcgPT09ICdmb3JtJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmZvcm1UYWcgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdhJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnYnV0dG9uJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdub2JyJykge1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2xpJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdkZCcgfHwgdGFnID09PSAnZHQnKSB7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIHJldHVybiBhbmNlc3RvckluZm87XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXJcbiAgICovXG5cblxuICB2YXIgaXNUYWdWYWxpZFdpdGhQYXJlbnQgPSBmdW5jdGlvbiAodGFnLCBwYXJlbnRUYWcpIHtcbiAgICAvLyBGaXJzdCwgbGV0J3MgY2hlY2sgaWYgd2UncmUgaW4gYW4gdW51c3VhbCBwYXJzaW5nIG1vZGUuLi5cbiAgICBzd2l0Y2ggKHBhcmVudFRhZykge1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluc2VsZWN0XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnb3B0aW9uJyB8fCB0YWcgPT09ICdvcHRncm91cCcgfHwgdGFnID09PSAnI3RleHQnO1xuXG4gICAgICBjYXNlICdvcHRncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdvcHRpb24nIHx8IHRhZyA9PT0gJyN0ZXh0JztcbiAgICAgIC8vIFN0cmljdGx5IHNwZWFraW5nLCBzZWVpbmcgYW4gPG9wdGlvbj4gZG9lc24ndCBtZWFuIHdlJ3JlIGluIGEgPHNlbGVjdD5cbiAgICAgIC8vIGJ1dFxuXG4gICAgICBjYXNlICdvcHRpb24nOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGRcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNhcHRpb25cbiAgICAgIC8vIE5vIHNwZWNpYWwgYmVoYXZpb3Igc2luY2UgdGhlc2UgcnVsZXMgZmFsbCBiYWNrIHRvIFwiaW4gYm9keVwiIG1vZGUgZm9yXG4gICAgICAvLyBhbGwgZXhjZXB0IHNwZWNpYWwgdGFibGUgbm9kZXMgd2hpY2ggY2F1c2UgYmFkIHBhcnNpbmcgYmVoYXZpb3IgYW55d2F5LlxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludHJcblxuICAgICAgY2FzZSAndHInOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndGgnIHx8IHRhZyA9PT0gJ3RkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50Ym9keVxuXG4gICAgICBjYXNlICd0Ym9keSc6XG4gICAgICBjYXNlICd0aGVhZCc6XG4gICAgICBjYXNlICd0Zm9vdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0cicgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY29sZ3JvdXBcblxuICAgICAgY2FzZSAnY29sZ3JvdXAnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnY29sJyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50YWJsZVxuXG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjYXB0aW9uJyB8fCB0YWcgPT09ICdjb2xncm91cCcgfHwgdGFnID09PSAndGJvZHknIHx8IHRhZyA9PT0gJ3Rmb290JyB8fCB0YWcgPT09ICd0aGVhZCcgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluaGVhZFxuXG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2Jhc2UnIHx8IHRhZyA9PT0gJ2Jhc2Vmb250JyB8fCB0YWcgPT09ICdiZ3NvdW5kJyB8fCB0YWcgPT09ICdsaW5rJyB8fCB0YWcgPT09ICdtZXRhJyB8fCB0YWcgPT09ICd0aXRsZScgfHwgdGFnID09PSAnbm9zY3JpcHQnIHx8IHRhZyA9PT0gJ25vZnJhbWVzJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZW1hbnRpY3MuaHRtbCN0aGUtaHRtbC1lbGVtZW50XG5cbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnaGVhZCcgfHwgdGFnID09PSAnYm9keScgfHwgdGFnID09PSAnZnJhbWVzZXQnO1xuXG4gICAgICBjYXNlICdmcmFtZXNldCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdmcmFtZSc7XG5cbiAgICAgIGNhc2UgJyNkb2N1bWVudCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdodG1sJztcbiAgICB9IC8vIFByb2JhYmx5IGluIHRoZSBcImluIGJvZHlcIiBwYXJzaW5nIG1vZGUsIHNvIHdlIG91dGxhdyBvbmx5IHRhZyBjb21ib3NcbiAgICAvLyB3aGVyZSB0aGUgcGFyc2luZyBydWxlcyBjYXVzZSBpbXBsaWNpdCBvcGVucyBvciBjbG9zZXMgdG8gYmUgYWRkZWQuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuXG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gcGFyZW50VGFnICE9PSAnaDEnICYmIHBhcmVudFRhZyAhPT0gJ2gyJyAmJiBwYXJlbnRUYWcgIT09ICdoMycgJiYgcGFyZW50VGFnICE9PSAnaDQnICYmIHBhcmVudFRhZyAhPT0gJ2g1JyAmJiBwYXJlbnRUYWcgIT09ICdoNic7XG5cbiAgICAgIGNhc2UgJ3JwJzpcbiAgICAgIGNhc2UgJ3J0JzpcbiAgICAgICAgcmV0dXJuIGltcGxpZWRFbmRUYWdzLmluZGV4T2YocGFyZW50VGFnKSA9PT0gLTE7XG5cbiAgICAgIGNhc2UgJ2JvZHknOlxuICAgICAgY2FzZSAnY2FwdGlvbic6XG4gICAgICBjYXNlICdjb2wnOlxuICAgICAgY2FzZSAnY29sZ3JvdXAnOlxuICAgICAgY2FzZSAnZnJhbWVzZXQnOlxuICAgICAgY2FzZSAnZnJhbWUnOlxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICBjYXNlICdodG1sJzpcbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgIGNhc2UgJ3RoJzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgLy8gVGhlc2UgdGFncyBhcmUgb25seSB2YWxpZCB3aXRoIGEgZmV3IHBhcmVudHMgdGhhdCBoYXZlIHNwZWNpYWwgY2hpbGRcbiAgICAgICAgLy8gcGFyc2luZyBydWxlcyAtLSBpZiB3ZSdyZSBkb3duIGhlcmUsIHRoZW4gbm9uZSBvZiB0aG9zZSBtYXRjaGVkIGFuZFxuICAgICAgICAvLyBzbyB3ZSBhbGxvdyBpdCBvbmx5IGlmIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcGFyZW50IGlzLCBhcyBhbGwgb3RoZXJcbiAgICAgICAgLy8gY2FzZXMgYXJlIGludmFsaWQuXG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgPT0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cblxuXG4gIHZhciBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnID0gZnVuY3Rpb24gKHRhZywgYW5jZXN0b3JJbmZvKSB7XG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnYXJ0aWNsZSc6XG4gICAgICBjYXNlICdhc2lkZSc6XG4gICAgICBjYXNlICdibG9ja3F1b3RlJzpcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBjYXNlICdkaXInOlxuICAgICAgY2FzZSAnZGl2JzpcbiAgICAgIGNhc2UgJ2RsJzpcbiAgICAgIGNhc2UgJ2ZpZWxkc2V0JzpcbiAgICAgIGNhc2UgJ2ZpZ2NhcHRpb24nOlxuICAgICAgY2FzZSAnZmlndXJlJzpcbiAgICAgIGNhc2UgJ2Zvb3Rlcic6XG4gICAgICBjYXNlICdoZWFkZXInOlxuICAgICAgY2FzZSAnaGdyb3VwJzpcbiAgICAgIGNhc2UgJ21haW4nOlxuICAgICAgY2FzZSAnbWVudSc6XG4gICAgICBjYXNlICduYXYnOlxuICAgICAgY2FzZSAnb2wnOlxuICAgICAgY2FzZSAncCc6XG4gICAgICBjYXNlICdzZWN0aW9uJzpcbiAgICAgIGNhc2UgJ3N1bW1hcnknOlxuICAgICAgY2FzZSAndWwnOlxuICAgICAgY2FzZSAncHJlJzpcbiAgICAgIGNhc2UgJ2xpc3RpbmcnOlxuICAgICAgY2FzZSAndGFibGUnOlxuICAgICAgY2FzZSAnaHInOlxuICAgICAgY2FzZSAneG1wJzpcbiAgICAgIGNhc2UgJ2gxJzpcbiAgICAgIGNhc2UgJ2gyJzpcbiAgICAgIGNhc2UgJ2gzJzpcbiAgICAgIGNhc2UgJ2g0JzpcbiAgICAgIGNhc2UgJ2g1JzpcbiAgICAgIGNhc2UgJ2g2JzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnZm9ybSc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZm9ybVRhZyB8fCBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2xpJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdkZCc6XG4gICAgICBjYXNlICdkdCc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnYSc6XG4gICAgICAgIC8vIFNwZWMgc2F5cyBzb21ldGhpbmcgYWJvdXQgc3RvcmluZyBhIGxpc3Qgb2YgbWFya2VycywgYnV0IGl0IHNvdW5kc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIHRoaXMgY2hlY2suXG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ25vYnInOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHZhciBkaWRXYXJuJDEgPSB7fTtcblxuICB2YWxpZGF0ZURPTU5lc3RpbmcgPSBmdW5jdGlvbiAoY2hpbGRUYWcsIGNoaWxkVGV4dCwgYW5jZXN0b3JJbmZvKSB7XG4gICAgYW5jZXN0b3JJbmZvID0gYW5jZXN0b3JJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvO1xuICAgIHZhciBwYXJlbnRJbmZvID0gYW5jZXN0b3JJbmZvLmN1cnJlbnQ7XG4gICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudEluZm8gJiYgcGFyZW50SW5mby50YWc7XG5cbiAgICBpZiAoY2hpbGRUZXh0ICE9IG51bGwpIHtcbiAgICAgIGlmIChjaGlsZFRhZyAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3Rpbmc6IHdoZW4gY2hpbGRUZXh0IGlzIHBhc3NlZCwgY2hpbGRUYWcgc2hvdWxkIGJlIG51bGwnKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGRUYWcgPSAnI3RleHQnO1xuICAgIH1cblxuICAgIHZhciBpbnZhbGlkUGFyZW50ID0gaXNUYWdWYWxpZFdpdGhQYXJlbnQoY2hpbGRUYWcsIHBhcmVudFRhZykgPyBudWxsIDogcGFyZW50SW5mbztcbiAgICB2YXIgaW52YWxpZEFuY2VzdG9yID0gaW52YWxpZFBhcmVudCA/IG51bGwgOiBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnKGNoaWxkVGFnLCBhbmNlc3RvckluZm8pO1xuICAgIHZhciBpbnZhbGlkUGFyZW50T3JBbmNlc3RvciA9IGludmFsaWRQYXJlbnQgfHwgaW52YWxpZEFuY2VzdG9yO1xuXG4gICAgaWYgKCFpbnZhbGlkUGFyZW50T3JBbmNlc3Rvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhbmNlc3RvclRhZyA9IGludmFsaWRQYXJlbnRPckFuY2VzdG9yLnRhZztcbiAgICB2YXIgd2FybktleSA9ICEhaW52YWxpZFBhcmVudCArICd8JyArIGNoaWxkVGFnICsgJ3wnICsgYW5jZXN0b3JUYWc7XG5cbiAgICBpZiAoZGlkV2FybiQxW3dhcm5LZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybiQxW3dhcm5LZXldID0gdHJ1ZTtcbiAgICB2YXIgdGFnRGlzcGxheU5hbWUgPSBjaGlsZFRhZztcbiAgICB2YXIgd2hpdGVzcGFjZUluZm8gPSAnJztcblxuICAgIGlmIChjaGlsZFRhZyA9PT0gJyN0ZXh0Jykge1xuICAgICAgaWYgKC9cXFMvLnRlc3QoY2hpbGRUZXh0KSkge1xuICAgICAgICB0YWdEaXNwbGF5TmFtZSA9ICdUZXh0IG5vZGVzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJ1doaXRlc3BhY2UgdGV4dCBub2Rlcyc7XG4gICAgICAgIHdoaXRlc3BhY2VJbmZvID0gXCIgTWFrZSBzdXJlIHlvdSBkb24ndCBoYXZlIGFueSBleHRyYSB3aGl0ZXNwYWNlIGJldHdlZW4gdGFncyBvbiBcIiArICdlYWNoIGxpbmUgb2YgeW91ciBzb3VyY2UgY29kZS4nO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWdEaXNwbGF5TmFtZSA9ICc8JyArIGNoaWxkVGFnICsgJz4nO1xuICAgIH1cblxuICAgIGlmIChpbnZhbGlkUGFyZW50KSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgICBpZiAoYW5jZXN0b3JUYWcgPT09ICd0YWJsZScgJiYgY2hpbGRUYWcgPT09ICd0cicpIHtcbiAgICAgICAgaW5mbyArPSAnIEFkZCBhIDx0Ym9keT4sIDx0aGVhZD4gb3IgPHRmb290PiB0byB5b3VyIGNvZGUgdG8gbWF0Y2ggdGhlIERPTSB0cmVlIGdlbmVyYXRlZCBieSAnICsgJ3RoZSBicm93c2VyLic7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGNoaWxkIG9mIDwlcz4uJXMlcycsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZywgd2hpdGVzcGFjZUluZm8sIGluZm8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBkZXNjZW5kYW50IG9mICcgKyAnPCVzPi4nLCB0YWdEaXNwbGF5TmFtZSwgYW5jZXN0b3JUYWcpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDE7XG5cbntcbiAgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMSA9ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnO1xufVxuXG52YXIgU1VTUEVOU0VfU1RBUlRfREFUQSA9ICckJztcbnZhciBTVVNQRU5TRV9FTkRfREFUQSA9ICcvJCc7XG52YXIgU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBID0gJyQ/JztcbnZhciBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBID0gJyQhJztcbnZhciBTVFlMRSQxID0gJ3N0eWxlJztcbnZhciBldmVudHNFbmFibGVkID0gbnVsbDtcbnZhciBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IG51bGw7XG5cbmZ1bmN0aW9uIHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgcHJvcHMpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnYnV0dG9uJzpcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICByZXR1cm4gISFwcm9wcy5hdXRvRm9jdXM7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRSb290SG9zdENvbnRleHQocm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gIHZhciB0eXBlO1xuICB2YXIgbmFtZXNwYWNlO1xuICB2YXIgbm9kZVR5cGUgPSByb290Q29udGFpbmVySW5zdGFuY2Uubm9kZVR5cGU7XG5cbiAgc3dpdGNoIChub2RlVHlwZSkge1xuICAgIGNhc2UgRE9DVU1FTlRfTk9ERTpcbiAgICBjYXNlIERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6XG4gICAgICB7XG4gICAgICAgIHR5cGUgPSBub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/ICcjZG9jdW1lbnQnIDogJyNmcmFnbWVudCc7XG4gICAgICAgIHZhciByb290ID0gcm9vdENvbnRhaW5lckluc3RhbmNlLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgbmFtZXNwYWNlID0gcm9vdCA/IHJvb3QubmFtZXNwYWNlVVJJIDogZ2V0Q2hpbGROYW1lc3BhY2UobnVsbCwgJycpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHZhciBjb250YWluZXIgPSBub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gcm9vdENvbnRhaW5lckluc3RhbmNlLnBhcmVudE5vZGUgOiByb290Q29udGFpbmVySW5zdGFuY2U7XG4gICAgICAgIHZhciBvd25OYW1lc3BhY2UgPSBjb250YWluZXIubmFtZXNwYWNlVVJJIHx8IG51bGw7XG4gICAgICAgIHR5cGUgPSBjb250YWluZXIudGFnTmFtZTtcbiAgICAgICAgbmFtZXNwYWNlID0gZ2V0Q2hpbGROYW1lc3BhY2Uob3duTmFtZXNwYWNlLCB0eXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIHZhbGlkYXRlZFRhZyA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhudWxsLCB2YWxpZGF0ZWRUYWcpO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgIGFuY2VzdG9ySW5mbzogYW5jZXN0b3JJbmZvXG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0Q2hpbGRIb3N0Q29udGV4dChwYXJlbnRIb3N0Q29udGV4dCwgdHlwZSwgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gIHtcbiAgICB2YXIgcGFyZW50SG9zdENvbnRleHREZXYgPSBwYXJlbnRIb3N0Q29udGV4dDtcbiAgICB2YXIgbmFtZXNwYWNlID0gZ2V0Q2hpbGROYW1lc3BhY2UocGFyZW50SG9zdENvbnRleHREZXYubmFtZXNwYWNlLCB0eXBlKTtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhwYXJlbnRIb3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgIGFuY2VzdG9ySW5mbzogYW5jZXN0b3JJbmZvXG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gcHJlcGFyZUZvckNvbW1pdChjb250YWluZXJJbmZvKSB7XG4gIGV2ZW50c0VuYWJsZWQgPSBpc0VuYWJsZWQoKTtcbiAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbigpO1xuICB2YXIgYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xuXG4gIHNldEVuYWJsZWQoZmFsc2UpO1xuICByZXR1cm4gYWN0aXZlSW5zdGFuY2U7XG59XG5mdW5jdGlvbiByZXNldEFmdGVyQ29tbWl0KGNvbnRhaW5lckluZm8pIHtcbiAgcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb25JbmZvcm1hdGlvbik7XG4gIHNldEVuYWJsZWQoZXZlbnRzRW5hYmxlZCk7XG4gIGV2ZW50c0VuYWJsZWQgPSBudWxsO1xuICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IG51bGw7XG59XG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZSh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICB2YXIgcGFyZW50TmFtZXNwYWNlO1xuXG4gIHtcbiAgICAvLyBUT0RPOiB0YWtlIG5hbWVzcGFjZSBpbnRvIGFjY291bnQgd2hlbiB2YWxpZGF0aW5nLlxuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIHZhbGlkYXRlRE9NTmVzdGluZyh0eXBlLCBudWxsLCBob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8pO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJykge1xuICAgICAgdmFyIHN0cmluZyA9ICcnICsgcHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgb3duQW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHN0cmluZywgb3duQW5jZXN0b3JJbmZvKTtcbiAgICB9XG5cbiAgICBwYXJlbnROYW1lc3BhY2UgPSBob3N0Q29udGV4dERldi5uYW1lc3BhY2U7XG4gIH1cblxuICB2YXIgZG9tRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgcGFyZW50TmFtZXNwYWNlKTtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgZG9tRWxlbWVudCk7XG4gIHVwZGF0ZUZpYmVyUHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICByZXR1cm4gZG9tRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGFwcGVuZEluaXRpYWxDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gZmluYWxpemVJbml0aWFsQ2hpbGRyZW4oZG9tRWxlbWVudCwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAgc2V0SW5pdGlhbFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gIHJldHVybiBzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIHByb3BzKTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVVcGRhdGUoZG9tRWxlbWVudCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcblxuICAgIGlmICh0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gIT09IHR5cGVvZiBvbGRQcm9wcy5jaGlsZHJlbiAmJiAodHlwZW9mIG5ld1Byb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInKSkge1xuICAgICAgdmFyIHN0cmluZyA9ICcnICsgbmV3UHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgb3duQW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHN0cmluZywgb3duQW5jZXN0b3JJbmZvKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlmZlByb3BlcnRpZXMoZG9tRWxlbWVudCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbn1cbmZ1bmN0aW9uIHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIHByb3BzKSB7XG4gIHJldHVybiB0eXBlID09PSAndGV4dGFyZWEnIHx8IHR5cGUgPT09ICdvcHRpb24nIHx8IHR5cGUgPT09ICdub3NjcmlwdCcgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInIHx8IHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sICE9IG51bGw7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0SW5zdGFuY2UodGV4dCwgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHRleHQsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG4gIH1cblxuICB2YXIgdGV4dE5vZGUgPSBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCB0ZXh0Tm9kZSk7XG4gIHJldHVybiB0ZXh0Tm9kZTtcbn1cbi8vIGlmIGEgY29tcG9uZW50IGp1c3QgaW1wb3J0cyBSZWFjdERPTSAoZS5nLiBmb3IgZmluZERPTU5vZGUpLlxuLy8gU29tZSBlbnZpcm9ubWVudHMgbWlnaHQgbm90IGhhdmUgc2V0VGltZW91dCBvciBjbGVhclRpbWVvdXQuXG5cbnZhciBzY2hlZHVsZVRpbWVvdXQgPSB0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IHNldFRpbWVvdXQgOiB1bmRlZmluZWQ7XG52YXIgY2FuY2VsVGltZW91dCA9IHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicgPyBjbGVhclRpbWVvdXQgOiB1bmRlZmluZWQ7XG52YXIgbm9UaW1lb3V0ID0gLTE7IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGNvbW1pdE1vdW50KGRvbUVsZW1lbnQsIHR5cGUsIG5ld1Byb3BzLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIC8vIERlc3BpdGUgdGhlIG5hbWluZyB0aGF0IG1pZ2h0IGltcGx5IG90aGVyd2lzZSwgdGhpcyBtZXRob2Qgb25seVxuICAvLyBmaXJlcyBpZiB0aGVyZSBpcyBhbiBgVXBkYXRlYCBlZmZlY3Qgc2NoZWR1bGVkIGR1cmluZyBtb3VudGluZy5cbiAgLy8gVGhpcyBoYXBwZW5zIGlmIGBmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbmAgcmV0dXJucyBgdHJ1ZWAgKHdoaWNoIGl0XG4gIC8vIGRvZXMgdG8gaW1wbGVtZW50IHRoZSBgYXV0b0ZvY3VzYCBhdHRyaWJ1dGUgb24gdGhlIGNsaWVudCkuIEJ1dFxuICAvLyB0aGVyZSBhcmUgYWxzbyBvdGhlciBjYXNlcyB3aGVuIHRoaXMgbWlnaHQgaGFwcGVuIChzdWNoIGFzIHBhdGNoaW5nXG4gIC8vIHVwIHRleHQgY29udGVudCBkdXJpbmcgaHlkcmF0aW9uIG1pc21hdGNoKS4gU28gd2UnbGwgY2hlY2sgdGhpcyBhZ2Fpbi5cbiAgaWYgKHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgbmV3UHJvcHMpKSB7XG4gICAgZG9tRWxlbWVudC5mb2N1cygpO1xuICB9XG59XG5mdW5jdGlvbiBjb21taXRVcGRhdGUoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIC8vIFVwZGF0ZSB0aGUgcHJvcHMgaGFuZGxlIHNvIHRoYXQgd2Uga25vdyB3aGljaCBwcm9wcyBhcmUgdGhlIG9uZXMgd2l0aFxuICAvLyB3aXRoIGN1cnJlbnQgZXZlbnQgaGFuZGxlcnMuXG4gIHVwZGF0ZUZpYmVyUHJvcHMoZG9tRWxlbWVudCwgbmV3UHJvcHMpOyAvLyBBcHBseSB0aGUgZGlmZiB0byB0aGUgRE9NIG5vZGUuXG5cbiAgdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xufVxuZnVuY3Rpb24gcmVzZXRUZXh0Q29udGVudChkb21FbGVtZW50KSB7XG4gIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsICcnKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFRleHRVcGRhdGUodGV4dEluc3RhbmNlLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSBuZXdUZXh0O1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkVG9Db250YWluZXIoY29udGFpbmVyLCBjaGlsZCkge1xuICB2YXIgcGFyZW50Tm9kZTtcblxuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBwYXJlbnROb2RlID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGNvbnRhaW5lcik7XG4gIH0gZWxzZSB7XG4gICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lcjtcbiAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgfSAvLyBUaGlzIGNvbnRhaW5lciBtaWdodCBiZSB1c2VkIGZvciBhIHBvcnRhbC5cbiAgLy8gSWYgc29tZXRoaW5nIGluc2lkZSBhIHBvcnRhbCBpcyBjbGlja2VkLCB0aGF0IGNsaWNrIHNob3VsZCBidWJibGVcbiAgLy8gdGhyb3VnaCB0aGUgUmVhY3QgdHJlZS4gSG93ZXZlciwgb24gTW9iaWxlIFNhZmFyaSB0aGUgY2xpY2sgd291bGRcbiAgLy8gbmV2ZXIgYnViYmxlIHRocm91Z2ggdGhlICpET00qIHRyZWUgdW5sZXNzIGFuIGFuY2VzdG9yIHdpdGggb25jbGlja1xuICAvLyBldmVudCBleGlzdHMuIFNvIHdlIHdvdWxkbid0IHNlZSBpdCBhbmQgZGlzcGF0Y2ggaXQuXG4gIC8vIFRoaXMgaXMgd2h5IHdlIGVuc3VyZSB0aGF0IG5vbiBSZWFjdCByb290IGNvbnRhaW5lcnMgaGF2ZSBpbmxpbmUgb25jbGlja1xuICAvLyBkZWZpbmVkLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExOTE4XG5cblxuICB2YXIgcmVhY3RSb290Q29udGFpbmVyID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG5cbiAgaWYgKChyZWFjdFJvb3RDb250YWluZXIgPT09IG51bGwgfHwgcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQpICYmIHBhcmVudE5vZGUub25jbGljayA9PT0gbnVsbCkge1xuICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQocGFyZW50Tm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc2VydEJlZm9yZShwYXJlbnRJbnN0YW5jZSwgY2hpbGQsIGJlZm9yZUNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xufVxuZnVuY3Rpb24gaW5zZXJ0SW5Db250YWluZXJCZWZvcmUoY29udGFpbmVyLCBjaGlsZCwgYmVmb3JlQ2hpbGQpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiByZW1vdmVDaGlsZEZyb21Db250YWluZXIoY29udGFpbmVyLCBjaGlsZCkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfVxufVxuZnVuY3Rpb24gaGlkZUluc3RhbmNlKGluc3RhbmNlKSB7XG4gIC8vIFRPRE86IERvZXMgdGhpcyB3b3JrIGZvciBhbGwgZWxlbWVudCB0eXBlcz8gV2hhdCBhYm91dCBNYXRoTUw/IFNob3VsZCB3ZVxuICAvLyBwYXNzIGhvc3QgY29udGV4dCB0byB0aGlzIG1ldGhvZD9cbiAgaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgdmFyIHN0eWxlID0gaW5zdGFuY2Uuc3R5bGU7XG5cbiAgaWYgKHR5cGVvZiBzdHlsZS5zZXRQcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0eWxlLnNldFByb3BlcnR5KCdkaXNwbGF5JywgJ25vbmUnLCAnaW1wb3J0YW50Jyk7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxufVxuZnVuY3Rpb24gaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9ICcnO1xufVxuZnVuY3Rpb24gdW5oaWRlSW5zdGFuY2UoaW5zdGFuY2UsIHByb3BzKSB7XG4gIGluc3RhbmNlID0gaW5zdGFuY2U7XG4gIHZhciBzdHlsZVByb3AgPSBwcm9wc1tTVFlMRSQxXTtcbiAgdmFyIGRpc3BsYXkgPSBzdHlsZVByb3AgIT09IHVuZGVmaW5lZCAmJiBzdHlsZVByb3AgIT09IG51bGwgJiYgc3R5bGVQcm9wLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykgPyBzdHlsZVByb3AuZGlzcGxheSA6IG51bGw7XG4gIGluc3RhbmNlLnN0eWxlLmRpc3BsYXkgPSBkYW5nZXJvdXNTdHlsZVZhbHVlKCdkaXNwbGF5JywgZGlzcGxheSk7XG59XG5mdW5jdGlvbiB1bmhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSB0ZXh0O1xufVxuZnVuY3Rpb24gY2xlYXJDb250YWluZXIoY29udGFpbmVyKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci50ZXh0Q29udGVudCA9ICcnO1xuICB9IGVsc2UgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHZhciBib2R5ID0gY29udGFpbmVyLmJvZHk7XG5cbiAgICBpZiAoYm9keSAhPSBudWxsKSB7XG4gICAgICBib2R5LnRleHRDb250ZW50ID0gJyc7XG4gICAgfVxuICB9XG59IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGNhbkh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMpIHtcbiAgaWYgKGluc3RhbmNlLm5vZGVUeXBlICE9PSBFTEVNRU5UX05PREUgfHwgdHlwZS50b0xvd2VyQ2FzZSgpICE9PSBpbnN0YW5jZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBoYXMgbm93IGJlZW4gcmVmaW5lZCB0byBhbiBlbGVtZW50IG5vZGUuXG5cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKGluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICh0ZXh0ID09PSAnJyB8fCBpbnN0YW5jZS5ub2RlVHlwZSAhPT0gVEVYVF9OT0RFKSB7XG4gICAgLy8gRW1wdHkgc3RyaW5ncyBhcmUgbm90IHBhcnNlZCBieSBIVE1MIHNvIHRoZXJlIHdvbid0IGJlIGEgY29ycmVjdCBtYXRjaCBoZXJlLlxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFRoaXMgaGFzIG5vdyBiZWVuIHJlZmluZWQgdG8gYSB0ZXh0IG5vZGUuXG5cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEE7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQTtcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGUobm9kZSkge1xuICAvLyBTa2lwIG5vbi1oeWRyYXRhYmxlIG5vZGVzLlxuICBmb3IgKDsgbm9kZSAhPSBudWxsOyBub2RlID0gbm9kZS5uZXh0U2libGluZykge1xuICAgIHZhciBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGU7XG5cbiAgICBpZiAobm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSB8fCBub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGluc3RhbmNlKSB7XG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShpbnN0YW5jZS5uZXh0U2libGluZyk7XG59XG5mdW5jdGlvbiBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChwYXJlbnRJbnN0YW5jZSkge1xuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGUocGFyZW50SW5zdGFuY2UuZmlyc3RDaGlsZCk7XG59XG5mdW5jdGlvbiBoeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIGluc3RhbmNlKTsgLy8gVE9ETzogUG9zc2libHkgZGVmZXIgdGhpcyB1bnRpbCB0aGUgY29tbWl0IHBoYXNlIHdoZXJlIGFsbCB0aGUgZXZlbnRzXG4gIC8vIGdldCBhdHRhY2hlZC5cblxuICB1cGRhdGVGaWJlclByb3BzKGluc3RhbmNlLCBwcm9wcyk7XG4gIHZhciBwYXJlbnROYW1lc3BhY2U7XG5cbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIHBhcmVudE5hbWVzcGFjZSA9IGhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZTtcbiAgfVxuXG4gIHJldHVybiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgcGFyZW50TmFtZXNwYWNlKTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHRleHRJbnN0YW5jZSk7XG4gIHJldHVybiBkaWZmSHlkcmF0ZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG59XG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSBzdXNwZW5zZUluc3RhbmNlLm5leHRTaWJsaW5nOyAvLyBTa2lwIHBhc3QgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cblxuICB2YXIgZGVwdGggPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGRhdGEgPSBub2RlLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICB9IC8vIFRPRE86IFdhcm4sIHdlIGRpZG4ndCBmaW5kIHRoZSBlbmQgY29tbWVudCBib3VuZGFyeS5cblxuXG4gIHJldHVybiBudWxsO1xufSAvLyBSZXR1cm5zIHRoZSBTdXNwZW5zZUluc3RhbmNlIGlmIHRoaXMgbm9kZSBpcyBhIGRpcmVjdCBjaGlsZCBvZiBhXG4vLyBTdXNwZW5zZUluc3RhbmNlLiBJLmUuIGlmIGl0cyBwcmV2aW91cyBzaWJsaW5nIGlzIGEgQ29tbWVudCB3aXRoXG4vLyBTVVNQRU5TRV94X1NUQVJUX0RBVEEuIE90aGVyd2lzZSwgbnVsbC5cblxuZnVuY3Rpb24gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXRJbnN0YW5jZSkge1xuICB2YXIgbm9kZSA9IHRhcmdldEluc3RhbmNlLnByZXZpb3VzU2libGluZzsgLy8gU2tpcCBwYXN0IGFsbCBub2RlcyB3aXRoaW4gdGhpcyBzdXNwZW5zZSBib3VuZGFyeS5cbiAgLy8gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIG5vZGVzIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3dcbiAgLy8gZGVlcCB3ZSBhcmUgYW5kIG9ubHkgYnJlYWsgb3V0IHdoZW4gd2UncmUgYmFjayBvbiB0b3AuXG5cbiAgdmFyIGRlcHRoID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBkYXRhID0gbm9kZS5kYXRhO1xuXG4gICAgICBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSkge1xuICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBjb21taXRIeWRyYXRlZENvbnRhaW5lcihjb250YWluZXIpIHtcbiAgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuICByZXRyeUlmQmxvY2tlZE9uKGNvbnRhaW5lcik7XG59XG5mdW5jdGlvbiBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSkge1xuICAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG4gIHJldHJ5SWZCbG9ja2VkT24oc3VzcGVuc2VJbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBkaWROb3RNYXRjaEh5ZHJhdGVkQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RNYXRjaEh5ZHJhdGVkVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RIeWRyYXRlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSkge1xuICB7XG4gICAgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSA7IGVsc2Uge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEh5ZHJhdGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkgOyBlbHNlIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0eXBlLCBwcm9wcykge1xuICB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudENvbnRhaW5lciwgdHlwZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudENvbnRhaW5lciwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0eXBlLCBwcm9wcykge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudEluc3RhbmNlLCB0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZVN1c3BlbnNlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIDtcbn1cbnZhciBjbGllbnRJZCA9IDA7XG5mdW5jdGlvbiBtYWtlQ2xpZW50SWRJbkRFVih3YXJuT25BY2Nlc3NJbkRFVikge1xuICB2YXIgaWQgPSAncjonICsgKGNsaWVudElkKyspLnRvU3RyaW5nKDM2KTtcbiAgcmV0dXJuIHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgd2Fybk9uQWNjZXNzSW5ERVYoKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9LFxuICAgIHZhbHVlT2Y6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm5PbkFjY2Vzc0luREVWKCk7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gaXNPcGFxdWVIeWRyYXRpbmdPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX09QQVFVRV9JRF9UWVBFO1xufVxuZnVuY3Rpb24gbWFrZU9wYXF1ZUh5ZHJhdGluZ09iamVjdChhdHRlbXB0VG9SZWFkVmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfT1BBUVVFX0lEX1RZUEUsXG4gICAgdG9TdHJpbmc6IGF0dGVtcHRUb1JlYWRWYWx1ZSxcbiAgICB2YWx1ZU9mOiBhdHRlbXB0VG9SZWFkVmFsdWVcbiAgfTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVQb3J0YWxNb3VudChwb3J0YWxJbnN0YW5jZSkge1xuICB7XG4gICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocG9ydGFsSW5zdGFuY2UpO1xuICB9XG59XG5cbnZhciByYW5kb21LZXkgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcbnZhciBpbnRlcm5hbEluc3RhbmNlS2V5ID0gJ19fcmVhY3RGaWJlciQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsUHJvcHNLZXkgPSAnX19yZWFjdFByb3BzJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleSA9ICdfX3JlYWN0Q29udGFpbmVyJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5ID0gJ19fcmVhY3RFdmVudHMkJyArIHJhbmRvbUtleTtcbmZ1bmN0aW9uIHByZWNhY2hlRmliZXJOb2RlKGhvc3RJbnN0LCBub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBob3N0SW5zdDtcbn1cbmZ1bmN0aW9uIG1hcmtDb250YWluZXJBc1Jvb3QoaG9zdFJvb3QsIG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IGhvc3RSb290O1xufVxuZnVuY3Rpb24gdW5tYXJrQ29udGFpbmVyQXNSb290KG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IG51bGw7XG59XG5mdW5jdGlvbiBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChub2RlKSB7XG4gIHJldHVybiAhIW5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV07XG59IC8vIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVybiB0aGUgY2xvc2VzdCBIb3N0Q29tcG9uZW50IG9yIEhvc3RUZXh0IGZpYmVyIGFuY2VzdG9yLlxuLy8gSWYgdGhlIHRhcmdldCBub2RlIGlzIHBhcnQgb2YgYSBoeWRyYXRlZCBvciBub3QgeWV0IHJlbmRlcmVkIHN1YnRyZWUsIHRoZW5cbi8vIHRoaXMgbWF5IGFsc28gcmV0dXJuIGEgU3VzcGVuc2VDb21wb25lbnQgb3IgSG9zdFJvb3QgdG8gaW5kaWNhdGUgdGhhdC5cbi8vIENvbmNlcHR1YWxseSB0aGUgSG9zdFJvb3QgZmliZXIgaXMgYSBjaGlsZCBvZiB0aGUgQ29udGFpbmVyIG5vZGUuIFNvIGlmIHlvdVxuLy8gcGFzcyB0aGUgQ29udGFpbmVyIG5vZGUgYXMgdGhlIHRhcmdldE5vZGUsIHlvdSB3aWxsIG5vdCBhY3R1YWxseSBnZXQgdGhlXG4vLyBIb3N0Um9vdCBiYWNrLiBUbyBnZXQgdG8gdGhlIEhvc3RSb290LCB5b3UgbmVlZCB0byBwYXNzIGEgY2hpbGQgb2YgaXQuXG4vLyBUaGUgc2FtZSB0aGluZyBhcHBsaWVzIHRvIFN1c3BlbnNlIGJvdW5kYXJpZXMuXG5cbmZ1bmN0aW9uIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpIHtcbiAgdmFyIHRhcmdldEluc3QgPSB0YXJnZXROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gIGlmICh0YXJnZXRJbnN0KSB7XG4gICAgLy8gRG9uJ3QgcmV0dXJuIEhvc3RSb290IG9yIFN1c3BlbnNlQ29tcG9uZW50IGhlcmUuXG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH0gLy8gSWYgdGhlIGRpcmVjdCBldmVudCB0YXJnZXQgaXNuJ3QgYSBSZWFjdCBvd25lZCBET00gbm9kZSwgd2UgbmVlZCB0byBsb29rXG4gIC8vIHRvIHNlZSBpZiBvbmUgb2YgaXRzIHBhcmVudHMgaXMgYSBSZWFjdCBvd25lZCBET00gbm9kZS5cblxuXG4gIHZhciBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuXG4gIHdoaWxlIChwYXJlbnROb2RlKSB7XG4gICAgLy8gV2UnbGwgY2hlY2sgaWYgdGhpcyBpcyBhIGNvbnRhaW5lciByb290IHRoYXQgY291bGQgaW5jbHVkZVxuICAgIC8vIFJlYWN0IG5vZGVzIGluIHRoZSBmdXR1cmUuIFdlIG5lZWQgdG8gY2hlY2sgdGhpcyBmaXJzdCBiZWNhdXNlXG4gICAgLy8gaWYgd2UncmUgYSBjaGlsZCBvZiBhIGRlaHlkcmF0ZWQgY29udGFpbmVyLCB3ZSBuZWVkIHRvIGZpcnN0XG4gICAgLy8gZmluZCB0aGF0IGlubmVyIGNvbnRhaW5lciBiZWZvcmUgbW92aW5nIG9uIHRvIGZpbmRpbmcgdGhlIHBhcmVudFxuICAgIC8vIGluc3RhbmNlLiBOb3RlIHRoYXQgd2UgZG9uJ3QgY2hlY2sgdGhpcyBmaWVsZCBvbiAgdGhlIHRhcmdldE5vZGVcbiAgICAvLyBpdHNlbGYgYmVjYXVzZSB0aGUgZmliZXJzIGFyZSBjb25jZXB0dWFsbHkgYmV0d2VlbiB0aGUgY29udGFpbmVyXG4gICAgLy8gbm9kZSBhbmQgdGhlIGZpcnN0IGNoaWxkLiBJdCBpc24ndCBzdXJyb3VuZGluZyB0aGUgY29udGFpbmVyIG5vZGUuXG4gICAgLy8gSWYgaXQncyBub3QgYSBjb250YWluZXIsIHdlIGNoZWNrIGlmIGl0J3MgYW4gaW5zdGFuY2UuXG4gICAgdGFyZ2V0SW5zdCA9IHBhcmVudE5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gfHwgcGFyZW50Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICAgIGlmICh0YXJnZXRJbnN0KSB7XG4gICAgICAvLyBTaW5jZSB0aGlzIHdhc24ndCB0aGUgZGlyZWN0IHRhcmdldCBvZiB0aGUgZXZlbnQsIHdlIG1pZ2h0IGhhdmVcbiAgICAgIC8vIHN0ZXBwZWQgcGFzdCBkZWh5ZHJhdGVkIERPTSBub2RlcyB0byBnZXQgaGVyZS4gSG93ZXZlciB0aGV5IGNvdWxkXG4gICAgICAvLyBhbHNvIGhhdmUgYmVlbiBub24tUmVhY3Qgbm9kZXMuIFdlIG5lZWQgdG8gYW5zd2VyIHdoaWNoIG9uZS5cbiAgICAgIC8vIElmIHdlIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGhhdmUgYW55IGNoaWxkcmVuLCB0aGVuIHRoZXJlIGNhbid0IGJlXG4gICAgICAvLyBhIG5lc3RlZCBzdXNwZW5zZSBib3VuZGFyeSB3aXRoaW4gaXQuIFNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIGZhc3RcbiAgICAgIC8vIGJhaWxvdXQuIE1vc3Qgb2YgdGhlIHRpbWUsIHdoZW4gcGVvcGxlIGFkZCBub24tUmVhY3QgY2hpbGRyZW4gdG9cbiAgICAgIC8vIHRoZSB0cmVlLCBpdCBpcyB1c2luZyBhIHJlZiB0byBhIGNoaWxkLWxlc3MgRE9NIG5vZGUuXG4gICAgICAvLyBOb3JtYWxseSB3ZSdkIG9ubHkgbmVlZCB0byBjaGVjayBvbmUgb2YgdGhlIGZpYmVycyBiZWNhdXNlIGlmIGl0XG4gICAgICAvLyBoYXMgZXZlciBnb25lIGZyb20gaGF2aW5nIGNoaWxkcmVuIHRvIGRlbGV0aW5nIHRoZW0gb3IgdmljZSB2ZXJzYVxuICAgICAgLy8gaXQgd291bGQgaGF2ZSBkZWxldGVkIHRoZSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IG5lc3RlZCBpbnNpZGUgYWxyZWFkeS5cbiAgICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSBIb3N0Um9vdCBzdGFydHMgb3V0IHdpdGggYW4gYWx0ZXJuYXRlIGl0IG1pZ2h0XG4gICAgICAvLyBoYXZlIG9uZSBvbiB0aGUgYWx0ZXJuYXRlIHNvIHdlIG5lZWQgdG8gY2hlY2sgaW4gY2FzZSB0aGlzIHdhcyBhXG4gICAgICAvLyByb290LlxuICAgICAgdmFyIGFsdGVybmF0ZSA9IHRhcmdldEluc3QuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAodGFyZ2V0SW5zdC5jaGlsZCAhPT0gbnVsbCB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIE5leHQgd2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBub2RlIHRoYXQgc2tpcHBlZCBwYXN0IGlzXG4gICAgICAgIC8vIG5lc3RlZCB3aXRoaW4gYSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IGFuZCBpZiBzbywgd2hpY2ggb25lLlxuICAgICAgICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0Tm9kZSk7XG5cbiAgICAgICAgd2hpbGUgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBmb3VuZCBhIHN1c3BlbnNlIGluc3RhbmNlLiBUaGF0IG1lYW5zIHRoYXQgd2UgaGF2ZW4ndFxuICAgICAgICAgIC8vIGh5ZHJhdGVkIGl0IHlldC4gRXZlbiB0aG91Z2ggd2UgbGVhdmUgdGhlIGNvbW1lbnRzIGluIHRoZVxuICAgICAgICAgIC8vIERPTSBhZnRlciBoeWRyYXRpbmcsIGFuZCB0aGVyZSBhcmUgYm91bmRhcmllcyBpbiB0aGUgRE9NXG4gICAgICAgICAgLy8gdGhhdCBjb3VsZCBhbHJlYWR5IGJlIGh5ZHJhdGVkLCB3ZSB3b3VsZG4ndCBoYXZlIGZvdW5kIHRoZW1cbiAgICAgICAgICAvLyB0aHJvdWdoIHRoaXMgcGFzcyBzaW5jZSBpZiB0aGUgdGFyZ2V0IGlzIGh5ZHJhdGVkIGl0IHdvdWxkXG4gICAgICAgICAgLy8gaGF2ZSBoYWQgYW4gaW50ZXJuYWxJbnN0YW5jZUtleSBvbiBpdC5cbiAgICAgICAgICAvLyBMZXQncyBnZXQgdGhlIGZpYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgU3VzcGVuc2VDb21wb25lbnRcbiAgICAgICAgICAvLyBhcyB0aGUgZGVlcGVzdCBpbnN0YW5jZS5cbiAgICAgICAgICB2YXIgdGFyZ2V0U3VzcGVuc2VJbnN0ID0gc3VzcGVuc2VJbnN0YW5jZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICAgICAgICAgIGlmICh0YXJnZXRTdXNwZW5zZUluc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRTdXNwZW5zZUluc3Q7XG4gICAgICAgICAgfSAvLyBJZiB3ZSBkb24ndCBmaW5kIGEgRmliZXIgb24gdGhlIGNvbW1lbnQsIGl0IG1pZ2h0IGJlIGJlY2F1c2VcbiAgICAgICAgICAvLyB3ZSBoYXZlbid0IGdvdHRlbiB0byBoeWRyYXRlIGl0IHlldC4gVGhlcmUgbWlnaHQgc3RpbGwgYmUgYVxuICAgICAgICAgIC8vIHBhcmVudCBib3VuZGFyeSB0aGF0IGhhc24ndCBhYm92ZSB0aGlzIG9uZSBzbyB3ZSBuZWVkIHRvIGZpbmRcbiAgICAgICAgICAvLyB0aGUgb3V0ZXIgbW9zdCB0aGF0IGlzIGtub3duLlxuXG5cbiAgICAgICAgICBzdXNwZW5zZUluc3RhbmNlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTsgLy8gSWYgd2UgZG9uJ3QgZmluZCBvbmUsIHRoZW4gdGhhdCBzaG91bGQgbWVhbiB0aGF0IHRoZSBwYXJlbnRcbiAgICAgICAgICAvLyBob3N0IGNvbXBvbmVudCBhbHNvIGhhc24ndCBoeWRyYXRlZCB5ZXQuIFdlIGNhbiByZXR1cm4gaXRcbiAgICAgICAgICAvLyBiZWxvdyBzaW5jZSBpdCB3aWxsIGJhaWwgb3V0IG9uIHRoZSBpc01vdW50ZWQgY2hlY2sgbGF0ZXIuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gICAgfVxuXG4gICAgdGFyZ2V0Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIFJlYWN0RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICogaW5zdGFuY2UsIG9yIG51bGwgaWYgdGhlIG5vZGUgd2FzIG5vdCByZW5kZXJlZCBieSB0aGlzIFJlYWN0LlxuICovXG5cbmZ1bmN0aW9uIGdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkge1xuICB2YXIgaW5zdCA9IG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gfHwgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XTtcblxuICBpZiAoaW5zdCkge1xuICAgIGlmIChpbnN0LnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFRleHQgfHwgaW5zdC50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgcmV0dXJuIGluc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHaXZlbiBhIFJlYWN0RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudCwgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nXG4gKiBET00gbm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXROb2RlRnJvbUluc3RhbmNlKGluc3QpIHtcbiAgaWYgKGluc3QudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0VGV4dCkge1xuICAgIC8vIEluIEZpYmVyIHRoaXMsIGlzIGp1c3QgdGhlIHN0YXRlIG5vZGUgcmlnaHQgbm93LiBXZSBhc3N1bWUgaXQgd2lsbCBiZVxuICAgIC8vIGEgaG9zdCBjb21wb25lbnQgb3IgaG9zdCB0ZXh0LlxuICAgIHJldHVybiBpbnN0LnN0YXRlTm9kZTtcbiAgfSAvLyBXaXRob3V0IHRoaXMgZmlyc3QgaW52YXJpYW50LCBwYXNzaW5nIGEgbm9uLURPTS1jb21wb25lbnQgdHJpZ2dlcnMgdGhlIG5leHRcbiAgLy8gaW52YXJpYW50IGZvciBhIG1pc3NpbmcgcGFyZW50LCB3aGljaCBpcyBzdXBlciBjb25mdXNpbmcuXG5cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiZ2V0Tm9kZUZyb21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC5cIiApO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG59XG5mdW5jdGlvbiB1cGRhdGVGaWJlclByb3BzKG5vZGUsIHByb3BzKSB7XG4gIG5vZGVbaW50ZXJuYWxQcm9wc0tleV0gPSBwcm9wcztcbn1cbmZ1bmN0aW9uIGdldEV2ZW50TGlzdGVuZXJTZXQobm9kZSkge1xuICB2YXIgZWxlbWVudExpc3RlbmVyU2V0ID0gbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldO1xuXG4gIGlmIChlbGVtZW50TGlzdGVuZXJTZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVsZW1lbnRMaXN0ZW5lclNldCA9IG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XSA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50TGlzdGVuZXJTZXQ7XG59XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCkge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgKyAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJyk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvciQxID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciQxID0gZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSAmJiAhKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IkMS5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvciQxLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCdGYWlsZWQgJXMgdHlwZTogJXMnLCBsb2NhdGlvbiwgZXJyb3IkMS5tZXNzYWdlKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWx1ZVN0YWNrID0gW107XG52YXIgZmliZXJTdGFjaztcblxue1xuICBmaWJlclN0YWNrID0gW107XG59XG5cbnZhciBpbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjcmVhdGVDdXJzb3IoZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgY3VycmVudDogZGVmYXVsdFZhbHVlXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBvcChjdXJzb3IsIGZpYmVyKSB7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICB7XG4gICAgICBlcnJvcignVW5leHBlY3RlZCBwb3AuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIGlmIChmaWJlciAhPT0gZmliZXJTdGFja1tpbmRleF0pIHtcbiAgICAgIGVycm9yKCdVbmV4cGVjdGVkIEZpYmVyIHBvcHBlZC4nKTtcbiAgICB9XG4gIH1cblxuICBjdXJzb3IuY3VycmVudCA9IHZhbHVlU3RhY2tbaW5kZXhdO1xuICB2YWx1ZVN0YWNrW2luZGV4XSA9IG51bGw7XG5cbiAge1xuICAgIGZpYmVyU3RhY2tbaW5kZXhdID0gbnVsbDtcbiAgfVxuXG4gIGluZGV4LS07XG59XG5cbmZ1bmN0aW9uIHB1c2goY3Vyc29yLCB2YWx1ZSwgZmliZXIpIHtcbiAgaW5kZXgrKztcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBjdXJzb3IuY3VycmVudDtcblxuICB7XG4gICAgZmliZXJTdGFja1tpbmRleF0gPSBmaWJlcjtcbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWU7XG59XG5cbnZhciB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQ7XG5cbntcbiAgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0ID0ge307XG59XG5cbnZhciBlbXB0eUNvbnRleHRPYmplY3QgPSB7fTtcblxue1xuICBPYmplY3QuZnJlZXplKGVtcHR5Q29udGV4dE9iamVjdCk7XG59IC8vIEEgY3Vyc29yIHRvIHRoZSBjdXJyZW50IG1lcmdlZCBjb250ZXh0IG9iamVjdCBvbiB0aGUgc3RhY2suXG5cblxudmFyIGNvbnRleHRTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihlbXB0eUNvbnRleHRPYmplY3QpOyAvLyBBIGN1cnNvciB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuXG52YXIgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihmYWxzZSk7IC8vIEtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIGNvbnRleHQgb2JqZWN0IHRoYXQgd2FzIG9uIHRoZSBzdGFjay5cbi8vIFdlIHVzZSB0aGlzIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHBhcmVudCBjb250ZXh0IGFmdGVyIHdlIGhhdmUgYWxyZWFkeVxuLy8gcHVzaGVkIHRoZSBuZXh0IGNvbnRleHQgcHJvdmlkZXIsIGFuZCBub3cgbmVlZCB0byBtZXJnZSB0aGVpciBjb250ZXh0cy5cblxudmFyIHByZXZpb3VzQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuZnVuY3Rpb24gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGRpZFB1c2hPd25Db250ZXh0SWZQcm92aWRlcikge1xuICB7XG4gICAgaWYgKGRpZFB1c2hPd25Db250ZXh0SWZQcm92aWRlciAmJiBpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAvLyBJZiB0aGUgZmliZXIgaXMgYSBjb250ZXh0IHByb3ZpZGVyIGl0c2VsZiwgd2hlbiB3ZSByZWFkIGl0cyBjb250ZXh0XG4gICAgICAvLyB3ZSBtYXkgaGF2ZSBhbHJlYWR5IHB1c2hlZCBpdHMgb3duIGNoaWxkIGNvbnRleHQgb24gdGhlIHN0YWNrLiBBIGNvbnRleHRcbiAgICAgIC8vIHByb3ZpZGVyIHNob3VsZCBub3QgXCJzZWVcIiBpdHMgb3duIGNoaWxkIGNvbnRleHQuIFRoZXJlZm9yZSB3ZSByZWFkIHRoZVxuICAgICAgLy8gcHJldmlvdXMgKHBhcmVudCkgY29udGV4dCBpbnN0ZWFkIGZvciBhIGNvbnRleHQgcHJvdmlkZXIuXG4gICAgICByZXR1cm4gcHJldmlvdXNDb250ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgbWFza2VkQ29udGV4dCkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPSB1bm1hc2tlZENvbnRleHQ7XG4gICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQgPSBtYXNrZWRDb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgIHZhciBjb250ZXh0VHlwZXMgPSB0eXBlLmNvbnRleHRUeXBlcztcblxuICAgIGlmICghY29udGV4dFR5cGVzKSB7XG4gICAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICAgIH0gLy8gQXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgdW5tYXNrZWQgY29udGV4dCBoYXMgY2hhbmdlZC5cbiAgICAvLyBGYWlsaW5nIHRvIGRvIHRoaXMgd2lsbCByZXN1bHQgaW4gdW5uZWNlc3NhcnkgY2FsbHMgdG8gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5cbiAgICAvLyBUaGlzIG1heSB0cmlnZ2VyIGluZmluaXRlIGxvb3BzIGlmIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgY2FsbHMgc2V0U3RhdGUuXG5cblxuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID09PSB1bm1hc2tlZENvbnRleHQpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIGNvbnRleHRUeXBlcykge1xuICAgICAgY29udGV4dFtrZXldID0gdW5tYXNrZWRDb250ZXh0W2tleV07XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcbiAgICAgIGNoZWNrUHJvcFR5cGVzKGNvbnRleHRUeXBlcywgY29udGV4dCwgJ2NvbnRleHQnLCBuYW1lKTtcbiAgICB9IC8vIENhY2hlIHVubWFza2VkIGNvbnRleHQgc28gd2UgY2FuIGF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIG5lY2Vzc2FyeS5cbiAgICAvLyBDb250ZXh0IGlzIGNyZWF0ZWQgYmVmb3JlIHRoZSBjbGFzcyBjb21wb25lbnQgaXMgaW5zdGFudGlhdGVkIHNvIGNoZWNrIGZvciBpbnN0YW5jZS5cblxuXG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzQ29udGV4dENoYW5nZWQoKSB7XG4gIHtcbiAgICByZXR1cm4gZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKHR5cGUpIHtcbiAge1xuICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IHR5cGUuY2hpbGRDb250ZXh0VHlwZXM7XG4gICAgcmV0dXJuIGNoaWxkQ29udGV4dFR5cGVzICE9PSBudWxsICYmIGNoaWxkQ29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wQ29udGV4dChmaWJlcikge1xuICB7XG4gICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyKSB7XG4gIHtcbiAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZmliZXIpO1xuICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyLCBjb250ZXh0LCBkaWRDaGFuZ2UpIHtcbiAge1xuICAgIGlmICghKGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50ID09PSBlbXB0eUNvbnRleHRPYmplY3QpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlVuZXhwZWN0ZWQgY29udGV4dCBmb3VuZCBvbiBzdGFjay4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBjb250ZXh0LCBmaWJlcik7XG4gICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCB0eXBlLCBwYXJlbnRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlczsgLy8gVE9ETyAoYnZhdWdobikgUmVwbGFjZSB0aGlzIGJlaGF2aW9yIHdpdGggYW4gaW52YXJpYW50KCkgaW4gdGhlIGZ1dHVyZS5cbiAgICAvLyBJdCBoYXMgb25seSBiZWVuIGFkZGVkIGluIEZpYmVyIHRvIG1hdGNoIHRoZSAodW5pbnRlbnRpb25hbCkgYmVoYXZpb3IgaW4gU3RhY2suXG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgICAgIGlmICghd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0W2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgICAgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0W2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCclcy5jaGlsZENvbnRleHRUeXBlcyBpcyBzcGVjaWZpZWQgYnV0IHRoZXJlIGlzIG5vIGdldENoaWxkQ29udGV4dCgpIG1ldGhvZCAnICsgJ29uIHRoZSBpbnN0YW5jZS4gWW91IGNhbiBlaXRoZXIgZGVmaW5lIGdldENoaWxkQ29udGV4dCgpIG9uICVzIG9yIHJlbW92ZSAnICsgJ2NoaWxkQ29udGV4dFR5cGVzIGZyb20gaXQuJywgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkQ29udGV4dCA9IGluc3RhbmNlLmdldENoaWxkQ29udGV4dCgpO1xuXG4gICAgZm9yICh2YXIgY29udGV4dEtleSBpbiBjaGlsZENvbnRleHQpIHtcbiAgICAgIGlmICghKGNvbnRleHRLZXkgaW4gY2hpbGRDb250ZXh0VHlwZXMpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggKGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nKSArIFwiLmdldENoaWxkQ29udGV4dCgpOiBrZXkgXFxcIlwiICsgY29udGV4dEtleSArIFwiXFxcIiBpcyBub3QgZGVmaW5lZCBpbiBjaGlsZENvbnRleHRUeXBlcy5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcbiAgICAgIGNoZWNrUHJvcFR5cGVzKGNoaWxkQ29udGV4dFR5cGVzLCBjaGlsZENvbnRleHQsICdjaGlsZCBjb250ZXh0JywgbmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9hc3NpZ24oe30sIHBhcmVudENvbnRleHQsIGNoaWxkQ29udGV4dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcykge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBXZSBwdXNoIHRoZSBjb250ZXh0IGFzIGVhcmx5IGFzIHBvc3NpYmxlIHRvIGVuc3VyZSBzdGFjayBpbnRlZ3JpdHkuXG4gICAgLy8gSWYgdGhlIGluc3RhbmNlIGRvZXMgbm90IGV4aXN0IHlldCwgd2Ugd2lsbCBwdXNoIG51bGwgYXQgZmlyc3QsXG4gICAgLy8gYW5kIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIGxhdGVyIHdoZW4gaW52YWxpZGF0aW5nIHRoZSBjb250ZXh0LlxuXG4gICAgdmFyIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgfHwgZW1wdHlDb250ZXh0T2JqZWN0OyAvLyBSZW1lbWJlciB0aGUgcGFyZW50IGNvbnRleHQgc28gd2UgY2FuIG1lcmdlIHdpdGggaXQgbGF0ZXIuXG4gICAgLy8gSW5oZXJpdCB0aGUgcGFyZW50J3MgZGlkLXBlcmZvcm0td29yayB2YWx1ZSB0byBhdm9pZCBpbmFkdmVydGVudGx5IGJsb2NraW5nIHVwZGF0ZXMuXG5cbiAgICBwcmV2aW91c0NvbnRleHQgPSBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIHR5cGUsIGRpZENoYW5nZSkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBoYXZlIGFuIGluc3RhbmNlIGJ5IHRoaXMgcG9pbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlkQ2hhbmdlKSB7XG4gICAgICAvLyBNZXJnZSBwYXJlbnQgYW5kIG93biBjb250ZXh0LlxuICAgICAgLy8gU2tpcCB0aGlzIGlmIHdlJ3JlIG5vdCB1cGRhdGluZyBkdWUgdG8gc0NVLlxuICAgICAgLy8gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcmlseSByZWNvbXB1dGluZyBtZW1vaXplZCB2YWx1ZXMuXG4gICAgICB2YXIgbWVyZ2VkQ29udGV4dCA9IHByb2Nlc3NDaGlsZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHR5cGUsIHByZXZpb3VzQ29udGV4dCk7XG4gICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCA9IG1lcmdlZENvbnRleHQ7IC8vIFJlcGxhY2UgdGhlIG9sZCAob3IgZW1wdHkpIGNvbnRleHQgd2l0aCB0aGUgbmV3IG9uZS5cbiAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byB1bndpbmQgdGhlIGNvbnRleHQgaW4gdGhlIHJldmVyc2Ugb3JkZXIuXG5cbiAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7IC8vIE5vdyBwdXNoIHRoZSBuZXcgY29udGV4dCBhbmQgbWFyayB0aGF0IGl0IGhhcyBjaGFuZ2VkLlxuXG4gICAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbWVyZ2VkQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXJyZW50VW5tYXNrZWRDb250ZXh0KGZpYmVyKSB7XG4gIHtcbiAgICAvLyBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IHVzZWQgd2l0aCByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjsgbm90IHN1cmUgaWYgaXRcbiAgICAvLyBtYWtlcyBzZW5zZSBlbHNld2hlcmVcbiAgICBpZiAoIShpc0ZpYmVyTW91bnRlZChmaWJlcikgJiYgZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgc3VidHJlZSBwYXJlbnQgdG8gYmUgYSBtb3VudGVkIGNsYXNzIGNvbXBvbmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICBkbyB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLmNvbnRleHQ7XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gbm9kZS50eXBlO1xuXG4gICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5vZGUgIT09IG51bGwpO1xuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJGb3VuZCB1bmV4cGVjdGVkIGRldGFjaGVkIHN1YnRyZWUgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBMZWdhY3lSb290ID0gMDtcbnZhciBCbG9ja2luZ1Jvb3QgPSAxO1xudmFyIENvbmN1cnJlbnRSb290ID0gMjtcblxudmFyIHJlbmRlcmVySUQgPSBudWxsO1xudmFyIGluamVjdGVkSG9vayA9IG51bGw7XG52YXIgaGFzTG9nZ2VkRXJyb3IgPSBmYWxzZTtcbnZhciBpc0RldlRvb2xzUHJlc2VudCA9IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnO1xuZnVuY3Rpb24gaW5qZWN0SW50ZXJuYWxzKGludGVybmFscykge1xuICBpZiAodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBObyBEZXZUb29sc1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBob29rID0gX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG4gIGlmIChob29rLmlzRGlzYWJsZWQpIHtcbiAgICAvLyBUaGlzIGlzbid0IGEgcmVhbCBwcm9wZXJ0eSBvbiB0aGUgaG9vaywgYnV0IGl0IGNhbiBiZSBzZXQgdG8gb3B0IG91dFxuICAgIC8vIG9mIERldlRvb2xzIGludGVncmF0aW9uIGFuZCBhc3NvY2lhdGVkIHdhcm5pbmdzIGFuZCBsb2dzLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzg3N1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFob29rLnN1cHBvcnRzRmliZXIpIHtcbiAgICB7XG4gICAgICBlcnJvcignVGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIFJlYWN0IERldlRvb2xzIGlzIHRvbyBvbGQgYW5kIHdpbGwgbm90IHdvcmsgJyArICd3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUmVhY3QuIFBsZWFzZSB1cGRhdGUgUmVhY3QgRGV2VG9vbHMuICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzJyk7XG4gICAgfSAvLyBEZXZUb29scyBleGlzdHMsIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3Qgc3VwcG9ydCBGaWJlci5cblxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0cnkge1xuICAgIHJlbmRlcmVySUQgPSBob29rLmluamVjdChpbnRlcm5hbHMpOyAvLyBXZSBoYXZlIHN1Y2Nlc3NmdWxseSBpbmplY3RlZCwgc28gbm93IGl0IGlzIHNhZmUgdG8gc2V0IHVwIGhvb2tzLlxuXG4gICAgaW5qZWN0ZWRIb29rID0gaG9vaztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gQ2F0Y2ggYWxsIGVycm9ycyBiZWNhdXNlIGl0IGlzIHVuc2FmZSB0byB0aHJvdyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uXG4gICAge1xuICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMuJywgZXJyKTtcbiAgICB9XG4gIH0gLy8gRGV2VG9vbHMgZXhpc3RzXG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIG9uU2NoZWR1bGVSb290KHJvb3QsIGNoaWxkcmVuKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgY2hpbGRyZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICggIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvbkNvbW1pdFJvb3Qocm9vdCwgcHJpb3JpdHlMZXZlbCkge1xuICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGRpZEVycm9yID0gKHJvb3QuY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBEaWRDYXB0dXJlO1xuXG4gICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgcHJpb3JpdHlMZXZlbCwgZGlkRXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QsIHVuZGVmaW5lZCwgZGlkRXJyb3IpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAge1xuICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvbkNvbW1pdFVubW91bnQoZmliZXIpIHtcbiAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudChyZW5kZXJlcklELCBmaWJlcik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIFNjaGVkdWxlcl9ydW5XaXRoUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrID0gU2NoZWR1bGVyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssXG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrID0gU2NoZWR1bGVyLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLFxuICAgIFNjaGVkdWxlcl9zaG91bGRZaWVsZCA9IFNjaGVkdWxlci51bnN0YWJsZV9zaG91bGRZaWVsZCxcbiAgICBTY2hlZHVsZXJfcmVxdWVzdFBhaW50ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3JlcXVlc3RQYWludCxcbiAgICBTY2hlZHVsZXJfbm93JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93LFxuICAgIFNjaGVkdWxlcl9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IFNjaGVkdWxlci51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxcbiAgICBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfTG93UHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTG93UHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX0lkbGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JZGxlUHJpb3JpdHk7XG5cbntcbiAgLy8gUHJvdmlkZSBleHBsaWNpdCBlcnJvciBtZXNzYWdlIHdoZW4gcHJvZHVjdGlvbitwcm9maWxpbmcgYnVuZGxlIG9mIGUuZy5cbiAgLy8gcmVhY3QtZG9tIGlzIHVzZWQgd2l0aCBwcm9kdWN0aW9uIChub24tcHJvZmlsaW5nKSBidW5kbGUgb2ZcbiAgLy8gc2NoZWR1bGVyL3RyYWNpbmdcbiAgaWYgKCEodHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZiAhPSBudWxsICYmIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCAhPSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gcnVuIHRoZSBwcm9maWxpbmcgdmVyc2lvbiBvZiBhIHJlbmRlcmVyIChmb3IgZXhhbXBsZSwgYHJlYWN0LWRvbS9wcm9maWxpbmdgKSB3aXRob3V0IGFsc28gcmVwbGFjaW5nIHRoZSBgc2NoZWR1bGVyL3RyYWNpbmdgIG1vZHVsZSB3aXRoIGBzY2hlZHVsZXIvdHJhY2luZy1wcm9maWxpbmdgLiBZb3VyIGJ1bmRsZXIgbWlnaHQgaGF2ZSBhIHNldHRpbmcgZm9yIGFsaWFzaW5nIGJvdGggbW9kdWxlcy4gTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcHJvZmlsaW5nXCIgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGZha2VDYWxsYmFja05vZGUgPSB7fTsgLy8gRXhjZXB0IGZvciBOb1ByaW9yaXR5LCB0aGVzZSBjb3JyZXNwb25kIHRvIFNjaGVkdWxlciBwcmlvcml0aWVzLiBXZSB1c2Vcbi8vIGFzY2VuZGluZyBudW1iZXJzIHNvIHdlIGNhbiBjb21wYXJlIHRoZW0gbGlrZSBudW1iZXJzLiBUaGV5IHN0YXJ0IGF0IDkwIHRvXG4vLyBhdm9pZCBjbGFzaGluZyB3aXRoIFNjaGVkdWxlcidzIHByaW9yaXRpZXMuXG5cbnZhciBJbW1lZGlhdGVQcmlvcml0eSQxID0gOTk7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkkMiA9IDk4O1xudmFyIE5vcm1hbFByaW9yaXR5JDEgPSA5NztcbnZhciBMb3dQcmlvcml0eSQxID0gOTY7XG52YXIgSWRsZVByaW9yaXR5JDEgPSA5NTsgLy8gTm9Qcmlvcml0eSBpcyB0aGUgYWJzZW5jZSBvZiBwcmlvcml0eS4gQWxzbyBSZWFjdC1vbmx5LlxuXG52YXIgTm9Qcmlvcml0eSQxID0gOTA7XG52YXIgc2hvdWxkWWllbGQgPSBTY2hlZHVsZXJfc2hvdWxkWWllbGQ7XG52YXIgcmVxdWVzdFBhaW50ID0gLy8gRmFsbCBiYWNrIGdyYWNlZnVsbHkgaWYgd2UncmUgcnVubmluZyBhbiBvbGRlciB2ZXJzaW9uIG9mIFNjaGVkdWxlci5cblNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgIT09IHVuZGVmaW5lZCA/IFNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgOiBmdW5jdGlvbiAoKSB7fTtcbnZhciBzeW5jUXVldWUgPSBudWxsO1xudmFyIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gbnVsbDtcbnZhciBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gZmFsc2U7XG52YXIgaW5pdGlhbFRpbWVNcyQxID0gU2NoZWR1bGVyX25vdyQxKCk7IC8vIElmIHRoZSBpbml0aWFsIHRpbWVzdGFtcCBpcyByZWFzb25hYmx5IHNtYWxsLCB1c2UgU2NoZWR1bGVyJ3MgYG5vd2AgZGlyZWN0bHkuXG4vLyBUaGlzIHdpbGwgYmUgdGhlIGNhc2UgZm9yIG1vZGVybiBicm93c2VycyB0aGF0IHN1cHBvcnQgYHBlcmZvcm1hbmNlLm5vd2AuIEluXG4vLyBvbGRlciBicm93c2VycywgU2NoZWR1bGVyIGZhbGxzIGJhY2sgdG8gYERhdGUubm93YCwgd2hpY2ggcmV0dXJucyBhIFVuaXhcbi8vIHRpbWVzdGFtcC4gSW4gdGhhdCBjYXNlLCBzdWJ0cmFjdCB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIHRpbWUgdG8gc2ltdWxhdGVcbi8vIHRoZSBiZWhhdmlvciBvZiBwZXJmb3JtYW5jZS5ub3cgYW5kIGtlZXAgb3VyIHRpbWVzIHNtYWxsIGVub3VnaCB0byBmaXRcbi8vIHdpdGhpbiAzMiBiaXRzLlxuLy8gVE9ETzogQ29uc2lkZXIgbGlmdGluZyB0aGlzIGludG8gU2NoZWR1bGVyLlxuXG52YXIgbm93ID0gaW5pdGlhbFRpbWVNcyQxIDwgMTAwMDAgPyBTY2hlZHVsZXJfbm93JDEgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBTY2hlZHVsZXJfbm93JDEoKSAtIGluaXRpYWxUaW1lTXMkMTtcbn07XG5mdW5jdGlvbiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpIHtcbiAgc3dpdGNoIChTY2hlZHVsZXJfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSkge1xuICAgIGNhc2UgU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIEltbWVkaWF0ZVByaW9yaXR5JDE7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Vc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgIHJldHVybiBVc2VyQmxvY2tpbmdQcmlvcml0eSQyO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfTm9ybWFsUHJpb3JpdHk6XG4gICAgICByZXR1cm4gTm9ybWFsUHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX0xvd1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIExvd1ByaW9yaXR5JDE7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZVByaW9yaXR5JDE7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biBwcmlvcml0eSBsZXZlbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuXG5mdW5jdGlvbiByZWFjdFByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShyZWFjdFByaW9yaXR5TGV2ZWwpIHtcbiAgc3dpdGNoIChyZWFjdFByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5O1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eSQyOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Vc2VyQmxvY2tpbmdQcmlvcml0eTtcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfTm9ybWFsUHJpb3JpdHk7XG5cbiAgICBjYXNlIExvd1ByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0xvd1ByaW9yaXR5O1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfSWRsZVByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gcHJpb3JpdHkgbGV2ZWwuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cbn1cblxuZnVuY3Rpb24gcnVuV2l0aFByaW9yaXR5JDEocmVhY3RQcmlvcml0eUxldmVsLCBmbikge1xuICB2YXIgcHJpb3JpdHlMZXZlbCA9IHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCk7XG4gIHJldHVybiBTY2hlZHVsZXJfcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5TGV2ZWwsIGZuKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2socmVhY3RQcmlvcml0eUxldmVsLCBjYWxsYmFjaywgb3B0aW9ucykge1xuICB2YXIgcHJpb3JpdHlMZXZlbCA9IHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCk7XG4gIHJldHVybiBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhwcmlvcml0eUxldmVsLCBjYWxsYmFjaywgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBzY2hlZHVsZVN5bmNDYWxsYmFjayhjYWxsYmFjaykge1xuICAvLyBQdXNoIHRoaXMgY2FsbGJhY2sgaW50byBhbiBpbnRlcm5hbCBxdWV1ZS4gV2UnbGwgZmx1c2ggdGhlc2UgZWl0aGVyIGluXG4gIC8vIHRoZSBuZXh0IHRpY2ssIG9yIGVhcmxpZXIgaWYgc29tZXRoaW5nIGNhbGxzIGBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlYC5cbiAgaWYgKHN5bmNRdWV1ZSA9PT0gbnVsbCkge1xuICAgIHN5bmNRdWV1ZSA9IFtjYWxsYmFja107IC8vIEZsdXNoIHRoZSBxdWV1ZSBpbiB0aGUgbmV4dCB0aWNrLCBhdCB0aGUgZWFybGllc3QuXG5cbiAgICBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSwgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwpO1xuICB9IGVsc2Uge1xuICAgIC8vIFB1c2ggb250byBleGlzdGluZyBxdWV1ZS4gRG9uJ3QgbmVlZCB0byBzY2hlZHVsZSBhIGNhbGxiYWNrIGJlY2F1c2VcbiAgICAvLyB3ZSBhbHJlYWR5IHNjaGVkdWxlZCBvbmUgd2hlbiB3ZSBjcmVhdGVkIHRoZSBxdWV1ZS5cbiAgICBzeW5jUXVldWUucHVzaChjYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gZmFrZUNhbGxiYWNrTm9kZTtcbn1cbmZ1bmN0aW9uIGNhbmNlbENhbGxiYWNrKGNhbGxiYWNrTm9kZSkge1xuICBpZiAoY2FsbGJhY2tOb2RlICE9PSBmYWtlQ2FsbGJhY2tOb2RlKSB7XG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrKGNhbGxiYWNrTm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKSB7XG4gIGlmIChpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBub2RlID0gaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGU7XG4gICAgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBudWxsO1xuICAgIFNjaGVkdWxlcl9jYW5jZWxDYWxsYmFjayhub2RlKTtcbiAgfVxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWVJbXBsKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoU3luY0NhbGxiYWNrUXVldWVJbXBsKCkge1xuICBpZiAoIWlzRmx1c2hpbmdTeW5jUXVldWUgJiYgc3luY1F1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gUHJldmVudCByZS1lbnRyYW5jeS5cbiAgICBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gdHJ1ZTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgX2lzU3luYzIgPSB0cnVlO1xuICAgICAgICB2YXIgX3F1ZXVlID0gc3luY1F1ZXVlO1xuICAgICAgICBydW5XaXRoUHJpb3JpdHkkMShJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZm9yICg7IGkgPCBfcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IF9xdWV1ZVtpXTtcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrKF9pc1N5bmMyKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKGNhbGxiYWNrICE9PSBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzeW5jUXVldWUgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgc29tZXRoaW5nIHRocm93cywgbGVhdmUgdGhlIHJlbWFpbmluZyBjYWxsYmFja3Mgb24gdGhlIHF1ZXVlLlxuICAgICAgICBpZiAoc3luY1F1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgc3luY1F1ZXVlID0gc3luY1F1ZXVlLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgfSAvLyBSZXN1bWUgZmx1c2hpbmcgaW4gdGhlIG5leHQgdGlja1xuXG5cbiAgICAgICAgU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5LCBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNy4wLjInO1xuXG52YXIgTm9Nb2RlID0gMDtcbnZhciBTdHJpY3RNb2RlID0gMTsgLy8gVE9ETzogUmVtb3ZlIEJsb2NraW5nTW9kZSBhbmQgQ29uY3VycmVudE1vZGUgYnkgcmVhZGluZyBmcm9tIHRoZSByb290XG4vLyB0YWcgaW5zdGVhZFxuXG52YXIgQmxvY2tpbmdNb2RlID0gMjtcbnZhciBDb25jdXJyZW50TW9kZSA9IDQ7XG52YXIgUHJvZmlsZU1vZGUgPSA4O1xudmFyIERlYnVnVHJhY2luZ01vZGUgPSAxNjtcblxudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG52YXIgTm9UcmFuc2l0aW9uID0gMDtcbmZ1bmN0aW9uIHJlcXVlc3RDdXJyZW50VHJhbnNpdGlvbigpIHtcbiAgcmV0dXJuIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb247XG59XG5cbnZhciBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncyA9IHtcbiAgcmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3M6IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHt9LFxuICBmbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKCkge30sXG4gIHJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKCkge30sXG4gIGRpc2NhcmRQZW5kaW5nV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9XG59O1xuXG57XG4gIHZhciBmaW5kU3RyaWN0Um9vdCA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgIHZhciBtYXliZVN0cmljdFJvb3QgPSBudWxsO1xuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgbWF5YmVTdHJpY3RSb290ID0gbm9kZTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBtYXliZVN0cmljdFJvb3Q7XG4gIH07XG5cbiAgdmFyIHNldFRvU29ydGVkU3RyaW5nID0gZnVuY3Rpb24gKHNldCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgYXJyYXkucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFycmF5LnNvcnQoKS5qb2luKCcsICcpO1xuICB9O1xuXG4gIHZhciBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdOyAvLyBUcmFja3MgY29tcG9uZW50cyB3ZSBoYXZlIGFscmVhZHkgd2FybmVkIGFib3V0LlxuXG4gIHZhciBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzID0gbmV3IFNldCgpO1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge1xuICAgIC8vIERlZHVwIHN0cmF0ZWd5OiBXYXJuIG9uY2UgcGVyIGNvbXBvbmVudC5cbiAgICBpZiAoZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5oYXMoZmliZXIudHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cy5cbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFdlIGRvIGFuIGluaXRpYWwgcGFzcyB0byBnYXRoZXIgY29tcG9uZW50IG5hbWVzXG4gICAgdmFyIGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICB9IC8vIEZpbmFsbHksIHdlIGZsdXNoIGFsbCB0aGUgd2FybmluZ3NcbiAgICAvLyBVTlNBRkVfIG9uZXMgYmVmb3JlIHRoZSBkZXByZWNhdGVkIG9uZXMsIHNpbmNlIHRoZXknbGwgYmUgJ2xvdWRlcidcblxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIHNvcnRlZE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkICcgKyAnYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIFwiICsgJ3JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvICcgKyAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lcyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMyID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzMik7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzMyA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbE1vdW50IGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbE1vdW50IHRvIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczMpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXM0ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArIFwiKiBJZiB5b3UncmUgdXBkYXRpbmcgc3RhdGUgd2hlbmV2ZXIgcHJvcHMgY2hhbmdlLCByZWZhY3RvciB5b3VyIFwiICsgJ2NvZGUgdG8gdXNlIG1lbW9pemF0aW9uIHRlY2huaXF1ZXMgb3IgbW92ZSBpdCB0byAnICsgJ3N0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kZXJpdmVkLXN0YXRlXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXM0KTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzNSA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyk7XG5cbiAgICAgIHdhcm4oJ2NvbXBvbmVudFdpbGxVcGRhdGUgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbFVwZGF0ZSB0byBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzNSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCk7IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgdmFyIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQgPSBuZXcgU2V0KCk7XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgdmFyIHN0cmljdFJvb3QgPSBmaW5kU3RyaWN0Um9vdChmaWJlcik7XG5cbiAgICBpZiAoc3RyaWN0Um9vdCA9PT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgYSBTdHJpY3RNb2RlIGNvbXBvbmVudCBpbiBhIHN0cmljdCBtb2RlIHRyZWUuICcgKyAnVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuXG5cbiAgICBpZiAoZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5oYXMoZmliZXIudHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgd2FybmluZ3NGb3JSb290ID0gcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmdldChzdHJpY3RSb290KTtcblxuICAgIGlmIChmaWJlci50eXBlLmNvbnRleHRUeXBlcyAhPSBudWxsIHx8IGZpYmVyLnR5cGUuY2hpbGRDb250ZXh0VHlwZXMgIT0gbnVsbCB8fCBpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAod2FybmluZ3NGb3JSb290ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgd2FybmluZ3NGb3JSb290ID0gW107XG4gICAgICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5zZXQoc3RyaWN0Um9vdCwgd2FybmluZ3NGb3JSb290KTtcbiAgICAgIH1cblxuICAgICAgd2FybmluZ3NGb3JSb290LnB1c2goZmliZXIpO1xuICAgIH1cbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlckFycmF5LCBzdHJpY3RSb290KSB7XG4gICAgICBpZiAoZmliZXJBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RGaWJlciA9IGZpYmVyQXJyYXlbMF07XG4gICAgICB2YXIgdW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICBmaWJlckFycmF5LmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIHVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKHVuaXF1ZU5hbWVzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpcnN0RmliZXIpO1xuXG4gICAgICAgIGVycm9yKCdMZWdhY3kgY29udGV4dCBBUEkgaGFzIGJlZW4gZGV0ZWN0ZWQgd2l0aGluIGEgc3RyaWN0LW1vZGUgdHJlZS4nICsgJ1xcblxcblRoZSBvbGQgQVBJIHdpbGwgYmUgc3VwcG9ydGVkIGluIGFsbCAxNi54IHJlbGVhc2VzLCBidXQgYXBwbGljYXRpb25zICcgKyAndXNpbmcgaXQgc2hvdWxkIG1pZ3JhdGUgdG8gdGhlIG5ldyB2ZXJzaW9uLicgKyAnXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJyArICdcXG5cXG5MZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvbGVnYWN5LWNvbnRleHQnLCBzb3J0ZWROYW1lcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGJhc2VQcm9wcykge1xuICBpZiAoQ29tcG9uZW50ICYmIENvbXBvbmVudC5kZWZhdWx0UHJvcHMpIHtcbiAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHMuIFRha2VuIGZyb20gUmVhY3RFbGVtZW50XG4gICAgdmFyIHByb3BzID0gX2Fzc2lnbih7fSwgYmFzZVByb3BzKTtcblxuICAgIHZhciBkZWZhdWx0UHJvcHMgPSBDb21wb25lbnQuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxuICByZXR1cm4gYmFzZVByb3BzO1xufVxuXG4vLyBNYXggMzEgYml0IGludGVnZXIuIFRoZSBtYXggaW50ZWdlciBzaXplIGluIFY4IGZvciAzMi1iaXQgc3lzdGVtcy5cbi8vIE1hdGgucG93KDIsIDMwKSAtIDFcbi8vIDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXG52YXIgTUFYX1NJR05FRF8zMV9CSVRfSU5UID0gMTA3Mzc0MTgyMztcblxudmFyIHZhbHVlQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xudmFyIHJlbmRlcmVyU2lnaWw7XG5cbntcbiAgLy8gVXNlIHRoaXMgdG8gZGV0ZWN0IG11bHRpcGxlIHJlbmRlcmVycyB1c2luZyB0aGUgc2FtZSBjb250ZXh0XG4gIHJlbmRlcmVyU2lnaWwgPSB7fTtcbn1cblxudmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gbnVsbDtcbnZhciBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xudmFyIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IG51bGw7XG52YXIgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuZnVuY3Rpb24gcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCkge1xuICAvLyBUaGlzIGlzIGNhbGxlZCByaWdodCBiZWZvcmUgUmVhY3QgeWllbGRzIGV4ZWN1dGlvbiwgdG8gZW5zdXJlIGByZWFkQ29udGV4dGBcbiAgLy8gY2Fubm90IGJlIGNhbGxlZCBvdXRzaWRlIHRoZSByZW5kZXIgcGhhc2UuXG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gbnVsbDtcbiAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcblxuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCkge1xuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IHRydWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpIHtcbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gcHVzaFByb3ZpZGVyKHByb3ZpZGVyRmliZXIsIG5leHRWYWx1ZSkge1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyRmliZXIudHlwZS5fY29udGV4dDtcblxuICB7XG4gICAgcHVzaCh2YWx1ZUN1cnNvciwgY29udGV4dC5fY3VycmVudFZhbHVlLCBwcm92aWRlckZpYmVyKTtcbiAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBuZXh0VmFsdWU7XG5cbiAgICB7XG4gICAgICBpZiAoY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSB1bmRlZmluZWQgJiYgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSBudWxsICYmIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gcmVuZGVyZXJTaWdpbCkge1xuICAgICAgICBlcnJvcignRGV0ZWN0ZWQgbXVsdGlwbGUgcmVuZGVyZXJzIGNvbmN1cnJlbnRseSByZW5kZXJpbmcgdGhlICcgKyAnc2FtZSBjb250ZXh0IHByb3ZpZGVyLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4nKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gcmVuZGVyZXJTaWdpbDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvcFByb3ZpZGVyKHByb3ZpZGVyRmliZXIpIHtcbiAgdmFyIGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ3Vyc29yLmN1cnJlbnQ7XG4gIHBvcCh2YWx1ZUN1cnNvciwgcHJvdmlkZXJGaWJlcik7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJGaWJlci50eXBlLl9jb250ZXh0O1xuXG4gIHtcbiAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZUNoYW5nZWRCaXRzKGNvbnRleHQsIG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICBpZiAob2JqZWN0SXMob2xkVmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgIC8vIE5vIGNoYW5nZVxuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIHZhciBjaGFuZ2VkQml0cyA9IHR5cGVvZiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0cyA9PT0gJ2Z1bmN0aW9uJyA/IGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzKG9sZFZhbHVlLCBuZXdWYWx1ZSkgOiBNQVhfU0lHTkVEXzMxX0JJVF9JTlQ7XG5cbiAgICB7XG4gICAgICBpZiAoKGNoYW5nZWRCaXRzICYgTUFYX1NJR05FRF8zMV9CSVRfSU5UKSAhPT0gY2hhbmdlZEJpdHMpIHtcbiAgICAgICAgZXJyb3IoJ2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBFeHBlY3RlZCB0aGUgcmV0dXJuIHZhbHVlIHRvIGJlIGEgJyArICczMS1iaXQgaW50ZWdlci4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjaGFuZ2VkQml0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZWRCaXRzIHwgMDtcbiAgfVxufVxuZnVuY3Rpb24gc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKHBhcmVudCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVXBkYXRlIHRoZSBjaGlsZCBsYW5lcyBvZiBhbGwgdGhlIGFuY2VzdG9ycywgaW5jbHVkaW5nIHRoZSBhbHRlcm5hdGVzLlxuICB2YXIgbm9kZSA9IHBhcmVudDtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBhbHRlcm5hdGUgPSBub2RlLmFsdGVybmF0ZTtcblxuICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKG5vZGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICBub2RlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5vZGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmICFpc1N1YnNldE9mTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5laXRoZXIgYWx0ZXJuYXRlIHdhcyB1cGRhdGVkLCB3aGljaCBtZWFucyB0aGUgcmVzdCBvZiB0aGVcbiAgICAgIC8vIGFuY2VzdG9yIHBhdGggYWxyZWFkeSBoYXMgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgfVxufVxuZnVuY3Rpb24gcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgY2hhbmdlZEJpdHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBmaWJlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gIGlmIChmaWJlciAhPT0gbnVsbCkge1xuICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgIGZpYmVyLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB9XG5cbiAgd2hpbGUgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgdmFyIG5leHRGaWJlciA9IHZvaWQgMDsgLy8gVmlzaXQgdGhpcyBmaWJlci5cblxuICAgIHZhciBsaXN0ID0gZmliZXIuZGVwZW5kZW5jaWVzO1xuXG4gICAgaWYgKGxpc3QgIT09IG51bGwpIHtcbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgdmFyIGRlcGVuZGVuY3kgPSBsaXN0LmZpcnN0Q29udGV4dDtcblxuICAgICAgd2hpbGUgKGRlcGVuZGVuY3kgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRleHQgbWF0Y2hlcy5cbiAgICAgICAgaWYgKGRlcGVuZGVuY3kuY29udGV4dCA9PT0gY29udGV4dCAmJiAoZGVwZW5kZW5jeS5vYnNlcnZlZEJpdHMgJiBjaGFuZ2VkQml0cykgIT09IDApIHtcbiAgICAgICAgICAvLyBNYXRjaCEgU2NoZWR1bGUgYW4gdXBkYXRlIG9uIHRoaXMgZmliZXIuXG4gICAgICAgICAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGEgZm9yY2UgdXBkYXRlIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzLlxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgcGlja0FyYml0cmFyeUxhbmUocmVuZGVyTGFuZXMpKTtcbiAgICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTsgLy8gVE9ETzogQmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgd29yay1pbi1wcm9ncmVzcywgdGhpcyB3aWxsIGFkZCB0aGVcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0byB0aGUgY3VycmVudCBmaWJlciwgdG9vLCB3aGljaCBtZWFucyBpdCB3aWxsIHBlcnNpc3QgZXZlbiBpZlxuICAgICAgICAgICAgLy8gdGhpcyByZW5kZXIgaXMgdGhyb3duIGF3YXkuIFNpbmNlIGl0J3MgYSByYWNlIGNvbmRpdGlvbiwgbm90IHN1cmUgaXQnc1xuICAgICAgICAgICAgLy8gd29ydGggZml4aW5nLlxuXG4gICAgICAgICAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChmaWJlci5yZXR1cm4sIHJlbmRlckxhbmVzKTsgLy8gTWFyayB0aGUgdXBkYXRlZCBsYW5lcyBvbiB0aGUgbGlzdCwgdG9vLlxuXG4gICAgICAgICAgbGlzdC5sYW5lcyA9IG1lcmdlTGFuZXMobGlzdC5sYW5lcywgcmVuZGVyTGFuZXMpOyAvLyBTaW5jZSB3ZSBhbHJlYWR5IGZvdW5kIGEgbWF0Y2gsIHdlIGNhbiBzdG9wIHRyYXZlcnNpbmcgdGhlXG4gICAgICAgICAgLy8gZGVwZW5kZW5jeSBsaXN0LlxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZXBlbmRlbmN5ID0gZGVwZW5kZW5jeS5uZXh0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmliZXIudGFnID09PSBDb250ZXh0UHJvdmlkZXIpIHtcbiAgICAgIC8vIERvbid0IHNjYW4gZGVlcGVyIGlmIHRoaXMgaXMgYSBtYXRjaGluZyBwcm92aWRlclxuICAgICAgbmV4dEZpYmVyID0gZmliZXIudHlwZSA9PT0gd29ya0luUHJvZ3Jlc3MudHlwZSA/IG51bGwgOiBmaWJlci5jaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJhdmVyc2UgZG93bi5cbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgIH1cblxuICAgIGlmIChuZXh0RmliZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgbmV4dEZpYmVyLnJldHVybiA9IGZpYmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBjaGlsZC4gVHJhdmVyc2UgdG8gbmV4dCBzaWJsaW5nLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXI7XG5cbiAgICAgIHdoaWxlIChuZXh0RmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHRGaWJlciA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAvLyBXZSdyZSBiYWNrIHRvIHRoZSByb290IG9mIHRoaXMgc3VidHJlZS4gRXhpdC5cbiAgICAgICAgICBuZXh0RmliZXIgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpYmxpbmcgPSBuZXh0RmliZXIuc2libGluZztcblxuICAgICAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIHNpYmxpbmcgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICAgICAgc2libGluZy5yZXR1cm4gPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgICAgIG5leHRGaWJlciA9IHNpYmxpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gTm8gbW9yZSBzaWJsaW5ncy4gVHJhdmVyc2UgdXAuXG5cblxuICAgICAgICBuZXh0RmliZXIgPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpYmVyID0gbmV4dEZpYmVyO1xuICB9XG59XG5mdW5jdGlvbiBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcbiAgdmFyIGRlcGVuZGVuY2llcyA9IHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcztcblxuICBpZiAoZGVwZW5kZW5jaWVzICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0Q29udGV4dCA9IGRlcGVuZGVuY2llcy5maXJzdENvbnRleHQ7XG5cbiAgICBpZiAoZmlyc3RDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShkZXBlbmRlbmNpZXMubGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgICAvLyBDb250ZXh0IGxpc3QgaGFzIGEgcGVuZGluZyB1cGRhdGUuIE1hcmsgdGhhdCB0aGlzIGZpYmVyIHBlcmZvcm1lZCB3b3JrLlxuICAgICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgICAgfSAvLyBSZXNldCB0aGUgd29yay1pbi1wcm9ncmVzcyBsaXN0XG5cblxuICAgICAgZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAge1xuICAgIC8vIFRoaXMgd2FybmluZyB3b3VsZCBmaXJlIGlmIHlvdSByZWFkIGNvbnRleHQgaW5zaWRlIGEgSG9vayBsaWtlIHVzZU1lbW8uXG4gICAgLy8gVW5saWtlIHRoZSBjbGFzcyBjaGVjayBiZWxvdywgaXQncyBub3QgZW5mb3JjZWQgaW4gcHJvZHVjdGlvbiBmb3IgcGVyZi5cbiAgICBpZiAoaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVikge1xuICAgICAgZXJyb3IoJ0NvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuICcgKyAnSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gJyArICdJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgJyArICdpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPT09IGNvbnRleHQpIDsgZWxzZSBpZiAob2JzZXJ2ZWRCaXRzID09PSBmYWxzZSB8fCBvYnNlcnZlZEJpdHMgPT09IDApIDsgZWxzZSB7XG4gICAgdmFyIHJlc29sdmVkT2JzZXJ2ZWRCaXRzOyAvLyBBdm9pZCBkZW9wdGluZyBvbiBvYnNlcnZhYmxlIGFyZ3VtZW50cyBvciBoZXRlcm9nZW5lb3VzIHR5cGVzLlxuXG4gICAgaWYgKHR5cGVvZiBvYnNlcnZlZEJpdHMgIT09ICdudW1iZXInIHx8IG9ic2VydmVkQml0cyA9PT0gTUFYX1NJR05FRF8zMV9CSVRfSU5UKSB7XG4gICAgICAvLyBPYnNlcnZlIGFsbCB1cGRhdGVzLlxuICAgICAgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gY29udGV4dDtcbiAgICAgIHJlc29sdmVkT2JzZXJ2ZWRCaXRzID0gTUFYX1NJR05FRF8zMV9CSVRfSU5UO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlZE9ic2VydmVkQml0cyA9IG9ic2VydmVkQml0cztcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dEl0ZW0gPSB7XG4gICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgb2JzZXJ2ZWRCaXRzOiByZXNvbHZlZE9ic2VydmVkQml0cyxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9PT0gbnVsbCkge1xuICAgICAgaWYgKCEoY3VycmVudGx5UmVuZGVyaW5nRmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiBJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS5cIiApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFRoaXMgaXMgdGhlIGZpcnN0IGRlcGVuZGVuY3kgZm9yIHRoaXMgY29tcG9uZW50LiBDcmVhdGUgYSBuZXcgbGlzdC5cblxuXG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBjb250ZXh0SXRlbTtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmRlcGVuZGVuY2llcyA9IHtcbiAgICAgICAgbGFuZXM6IE5vTGFuZXMsXG4gICAgICAgIGZpcnN0Q29udGV4dDogY29udGV4dEl0ZW0sXG4gICAgICAgIHJlc3BvbmRlcnM6IG51bGxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFwcGVuZCBhIG5ldyBjb250ZXh0IGl0ZW0uXG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBsYXN0Q29udGV4dERlcGVuZGVuY3kubmV4dCA9IGNvbnRleHRJdGVtO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAgY29udGV4dC5fY3VycmVudFZhbHVlIDtcbn1cblxudmFyIFVwZGF0ZVN0YXRlID0gMDtcbnZhciBSZXBsYWNlU3RhdGUgPSAxO1xudmFyIEZvcmNlVXBkYXRlID0gMjtcbnZhciBDYXB0dXJlVXBkYXRlID0gMzsgLy8gR2xvYmFsIHN0YXRlIHRoYXQgaXMgcmVzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBjYWxsaW5nIGBwcm9jZXNzVXBkYXRlUXVldWVgLlxuLy8gSXQgc2hvdWxkIG9ubHkgYmUgcmVhZCByaWdodCBhZnRlciBjYWxsaW5nIGBwcm9jZXNzVXBkYXRlUXVldWVgLCB2aWFcbi8vIGBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nYC5cblxudmFyIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG52YXIgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZTtcbnZhciBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWU7XG5cbntcbiAgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSA9IGZhbHNlO1xuICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplVXBkYXRlUXVldWUoZmliZXIpIHtcbiAgdmFyIHF1ZXVlID0ge1xuICAgIGJhc2VTdGF0ZTogZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICBmaXJzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgbGFzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgc2hhcmVkOiB7XG4gICAgICBwZW5kaW5nOiBudWxsXG4gICAgfSxcbiAgICBlZmZlY3RzOiBudWxsXG4gIH07XG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gcXVldWU7XG59XG5mdW5jdGlvbiBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIC8vIENsb25lIHRoZSB1cGRhdGUgcXVldWUgZnJvbSBjdXJyZW50LiBVbmxlc3MgaXQncyBhbHJlYWR5IGEgY2xvbmUuXG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcblxuICBpZiAocXVldWUgPT09IGN1cnJlbnRRdWV1ZSkge1xuICAgIHZhciBjbG9uZSA9IHtcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudFF1ZXVlLmJhc2VTdGF0ZSxcbiAgICAgIGZpcnN0QmFzZVVwZGF0ZTogY3VycmVudFF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSxcbiAgICAgIGxhc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGUsXG4gICAgICBzaGFyZWQ6IGN1cnJlbnRRdWV1ZS5zaGFyZWQsXG4gICAgICBlZmZlY3RzOiBjdXJyZW50UXVldWUuZWZmZWN0c1xuICAgIH07XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjbG9uZTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSkge1xuICB2YXIgdXBkYXRlID0ge1xuICAgIGV2ZW50VGltZTogZXZlbnRUaW1lLFxuICAgIGxhbmU6IGxhbmUsXG4gICAgdGFnOiBVcGRhdGVTdGF0ZSxcbiAgICBwYXlsb2FkOiBudWxsLFxuICAgIGNhbGxiYWNrOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSkge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaWJlci51cGRhdGVRdWV1ZTtcblxuICBpZiAodXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICAvLyBPbmx5IG9jY3VycyBpZiB0aGUgZmliZXIgaGFzIGJlZW4gdW5tb3VudGVkLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzaGFyZWRRdWV1ZSA9IHVwZGF0ZVF1ZXVlLnNoYXJlZDtcbiAgdmFyIHBlbmRpbmcgPSBzaGFyZWRRdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgIHBlbmRpbmcubmV4dCA9IHVwZGF0ZTtcbiAgfVxuXG4gIHNoYXJlZFF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG5cbiAge1xuICAgIGlmIChjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPT09IHNoYXJlZFF1ZXVlICYmICFkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlKSB7XG4gICAgICBlcnJvcignQW4gdXBkYXRlIChzZXRTdGF0ZSwgcmVwbGFjZVN0YXRlLCBvciBmb3JjZVVwZGF0ZSkgd2FzIHNjaGVkdWxlZCAnICsgJ2Zyb20gaW5zaWRlIGFuIHVwZGF0ZSBmdW5jdGlvbi4gVXBkYXRlIGZ1bmN0aW9ucyBzaG91bGQgYmUgcHVyZSwgJyArICd3aXRoIHplcm8gc2lkZS1lZmZlY3RzLiBDb25zaWRlciB1c2luZyBjb21wb25lbnREaWRVcGRhdGUgb3IgYSAnICsgJ2NhbGxiYWNrLicpO1xuXG4gICAgICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY2FwdHVyZWRVcGRhdGUpIHtcbiAgLy8gQ2FwdHVyZWQgdXBkYXRlcyBhcmUgdXBkYXRlcyB0aGF0IGFyZSB0aHJvd24gYnkgYSBjaGlsZCBkdXJpbmcgdGhlIHJlbmRlclxuICAvLyBwaGFzZS4gVGhleSBzaG91bGQgYmUgZGlzY2FyZGVkIGlmIHRoZSByZW5kZXIgaXMgYWJvcnRlZC4gVGhlcmVmb3JlLFxuICAvLyB3ZSBzaG91bGQgb25seSBwdXQgdGhlbSBvbiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSwgbm90IHRoZSBjdXJyZW50IG9uZS5cbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7IC8vIENoZWNrIGlmIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGlzIGEgY2xvbmUuXG5cbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcblxuICAgIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgICAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyB0aGUgc2FtZSBhcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlblxuICAgICAgLy8gd2UgYmFpbCBvdXQgb24gYSBwYXJlbnQgZmliZXIgdGhhdCB0aGVuIGNhcHR1cmVzIGFuIGVycm9yIHRocm93biBieVxuICAgICAgLy8gYSBjaGlsZC4gU2luY2Ugd2Ugd2FudCB0byBhcHBlbmQgdGhlIHVwZGF0ZSBvbmx5IHRvIHRoZSB3b3JrLWluXG4gICAgICAvLyAtcHJvZ3Jlc3MgcXVldWUsIHdlIG5lZWQgdG8gY2xvbmUgdGhlIHVwZGF0ZXMuIFdlIHVzdWFsbHkgY2xvbmUgZHVyaW5nXG4gICAgICAvLyBwcm9jZXNzVXBkYXRlUXVldWUsIGJ1dCB0aGF0IGRpZG4ndCBoYXBwZW4gaW4gdGhpcyBjYXNlIGJlY2F1c2Ugd2VcbiAgICAgIC8vIHNraXBwZWQgb3ZlciB0aGUgcGFyZW50IHdoZW4gd2UgYmFpbGVkIG91dC5cbiAgICAgIHZhciBuZXdGaXJzdCA9IG51bGw7XG4gICAgICB2YXIgbmV3TGFzdCA9IG51bGw7XG4gICAgICB2YXIgZmlyc3RCYXNlVXBkYXRlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgICBpZiAoZmlyc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgdXBkYXRlcyBhbmQgY2xvbmUgdGhlbS5cbiAgICAgICAgdmFyIHVwZGF0ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgICAgZXZlbnRUaW1lOiB1cGRhdGUuZXZlbnRUaW1lLFxuICAgICAgICAgICAgbGFuZTogdXBkYXRlLmxhbmUsXG4gICAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChuZXdMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjbG9uZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TGFzdC5uZXh0ID0gY2xvbmU7XG4gICAgICAgICAgICBuZXdMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gbnVsbCk7IC8vIEFwcGVuZCB0aGUgY2FwdHVyZWQgdXBkYXRlIHRoZSBlbmQgb2YgdGhlIGNsb25lZCBsaXN0LlxuXG5cbiAgICAgICAgaWYgKG5ld0xhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdMYXN0Lm5leHQgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgICBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSBubyBiYXNlIHVwZGF0ZXMuXG4gICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZSA9IHtcbiAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgICAgICBmaXJzdEJhc2VVcGRhdGU6IG5ld0ZpcnN0LFxuICAgICAgICBsYXN0QmFzZVVwZGF0ZTogbmV3TGFzdCxcbiAgICAgICAgc2hhcmVkOiBjdXJyZW50UXVldWUuc2hhcmVkLFxuICAgICAgICBlZmZlY3RzOiBjdXJyZW50UXVldWUuZWZmZWN0c1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gcXVldWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IC8vIEFwcGVuZCB0aGUgdXBkYXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG5cblxuICB2YXIgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZTtcblxuICBpZiAobGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICBxdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gY2FwdHVyZWRVcGRhdGU7XG4gIH1cblxuICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBnZXRTdGF0ZUZyb21VcGRhdGUod29ya0luUHJvZ3Jlc3MsIHF1ZXVlLCB1cGRhdGUsIHByZXZTdGF0ZSwgbmV4dFByb3BzLCBpbnN0YW5jZSkge1xuICBzd2l0Y2ggKHVwZGF0ZS50YWcpIHtcbiAgICBjYXNlIFJlcGxhY2VTdGF0ZTpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcblxuICAgICAgICBpZiAodHlwZW9mIHBheWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSBwYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICAgIH0gLy8gU3RhdGUgb2JqZWN0XG5cblxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2FwdHVyZVVwZGF0ZTpcbiAgICAgIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgIH1cbiAgICAvLyBJbnRlbnRpb25hbCBmYWxsdGhyb3VnaFxuXG4gICAgY2FzZSBVcGRhdGVTdGF0ZTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wYXlsb2FkID0gdXBkYXRlLnBheWxvYWQ7XG4gICAgICAgIHZhciBwYXJ0aWFsU3RhdGU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfcGF5bG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIFVwZGF0ZXIgZnVuY3Rpb25cbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgX3BheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQYXJ0aWFsIHN0YXRlIG9iamVjdFxuICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IF9wYXlsb2FkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gbnVsbCB8fCBwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIE51bGwgYW5kIHVuZGVmaW5lZCBhcmUgdHJlYXRlZCBhcyBuby1vcHMuXG4gICAgICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICAgICAgfSAvLyBNZXJnZSB0aGUgcGFydGlhbCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzIHN0YXRlLlxuXG5cbiAgICAgICAgcmV0dXJuIF9hc3NpZ24oe30sIHByZXZTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRm9yY2VVcGRhdGU6XG4gICAgICB7XG4gICAgICAgIGhhc0ZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcmV2U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgcHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIGlzIGFsd2F5cyBub24tbnVsbCBvbiBhIENsYXNzQ29tcG9uZW50IG9yIEhvc3RSb290XG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuXG4gIHtcbiAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQ7XG4gIH1cblxuICB2YXIgZmlyc3RCYXNlVXBkYXRlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlO1xuICB2YXIgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZTsgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIHBlbmRpbmcgdXBkYXRlcy4gSWYgc28sIHRyYW5zZmVyIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG5cbiAgdmFyIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nUXVldWUgIT09IG51bGwpIHtcbiAgICBxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGw7IC8vIFRoZSBwZW5kaW5nIHF1ZXVlIGlzIGNpcmN1bGFyLiBEaXNjb25uZWN0IHRoZSBwb2ludGVyIGJldHdlZW4gZmlyc3RcbiAgICAvLyBhbmQgbGFzdCBzbyB0aGF0IGl0J3Mgbm9uLWNpcmN1bGFyLlxuXG4gICAgdmFyIGxhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgIHZhciBmaXJzdFBlbmRpbmdVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZS5uZXh0O1xuICAgIGxhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsOyAvLyBBcHBlbmQgcGVuZGluZyB1cGRhdGVzIHRvIGJhc2UgcXVldWVcblxuICAgIGlmIChsYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgIH1cblxuICAgIGxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7IC8vIElmIHRoZXJlJ3MgYSBjdXJyZW50IHF1ZXVlLCBhbmQgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgYmFzZSBxdWV1ZSwgdGhlblxuICAgIC8vIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHVwZGF0ZXMgdG8gdGhhdCBxdWV1ZSwgdG9vLiBCZWNhdXNlIHRoZSBiYXNlXG4gICAgLy8gcXVldWUgaXMgYSBzaW5nbHktbGlua2VkIGxpc3Qgd2l0aCBubyBjeWNsZXMsIHdlIGNhbiBhcHBlbmQgdG8gYm90aFxuICAgIC8vIGxpc3RzIGFuZCB0YWtlIGFkdmFudGFnZSBvZiBzdHJ1Y3R1cmFsIHNoYXJpbmcuXG4gICAgLy8gVE9ETzogUGFzcyBgY3VycmVudGAgYXMgYXJndW1lbnRcblxuICAgIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgYWx3YXlzIG5vbi1udWxsIG9uIGEgQ2xhc3NDb21wb25lbnQgb3IgSG9zdFJvb3RcbiAgICAgIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICAgICAgdmFyIGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSA9IGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSAhPT0gbGFzdEJhc2VVcGRhdGUpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGN1cnJlbnRRdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudExhc3RCYXNlVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gVGhlc2UgdmFsdWVzIG1heSBjaGFuZ2UgYXMgd2UgcHJvY2VzcyB0aGUgcXVldWUuXG5cblxuICBpZiAoZmlyc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIHVwZGF0ZXMgdG8gY29tcHV0ZSB0aGUgcmVzdWx0LlxuICAgIHZhciBuZXdTdGF0ZSA9IHF1ZXVlLmJhc2VTdGF0ZTsgLy8gVE9ETzogRG9uJ3QgbmVlZCB0byBhY2N1bXVsYXRlIHRoaXMuIEluc3RlYWQsIHdlIGNhbiByZW1vdmUgcmVuZGVyTGFuZXNcbiAgICAvLyBmcm9tIHRoZSBvcmlnaW5hbCBsYW5lcy5cblxuICAgIHZhciBuZXdMYW5lcyA9IE5vTGFuZXM7XG4gICAgdmFyIG5ld0Jhc2VTdGF0ZSA9IG51bGw7XG4gICAgdmFyIG5ld0ZpcnN0QmFzZVVwZGF0ZSA9IG51bGw7XG4gICAgdmFyIG5ld0xhc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgZG8ge1xuICAgICAgdmFyIHVwZGF0ZUxhbmUgPSB1cGRhdGUubGFuZTtcbiAgICAgIHZhciB1cGRhdGVFdmVudFRpbWUgPSB1cGRhdGUuZXZlbnRUaW1lO1xuXG4gICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSkpIHtcbiAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAvLyBza2lwcGVkIHVwZGF0ZSwgdGhlIHByZXZpb3VzIHVwZGF0ZS9zdGF0ZSBpcyB0aGUgbmV3IGJhc2VcbiAgICAgICAgLy8gdXBkYXRlL3N0YXRlLlxuICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgZXZlbnRUaW1lOiB1cGRhdGVFdmVudFRpbWUsXG4gICAgICAgICAgbGFuZTogdXBkYXRlTGFuZSxcbiAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3Rmlyc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUgPSBjbG9uZTtcbiAgICAgICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdMYXN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlLm5leHQgPSBjbG9uZTtcbiAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG5cblxuICAgICAgICBuZXdMYW5lcyA9IG1lcmdlTGFuZXMobmV3TGFuZXMsIHVwZGF0ZUxhbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyB1cGRhdGUgZG9lcyBoYXZlIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfY2xvbmUgPSB7XG4gICAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZUV2ZW50VGltZSxcbiAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGlzIGdvaW5nIHRvIGJlIGNvbW1pdHRlZCBzbyB3ZSBuZXZlciB3YW50IHVuY29tbWl0XG4gICAgICAgICAgICAvLyBpdC4gVXNpbmcgTm9MYW5lIHdvcmtzIGJlY2F1c2UgMCBpcyBhIHN1YnNldCBvZiBhbGwgYml0bWFza3MsIHNvXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgbmV2ZXIgYmUgc2tpcHBlZCBieSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICBsYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBuZXdMYXN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlLm5leHQgPSBfY2xvbmU7XG4gICAgICAgIH0gLy8gUHJvY2VzcyB0aGlzIHVwZGF0ZS5cblxuXG4gICAgICAgIG5ld1N0YXRlID0gZ2V0U3RhdGVGcm9tVXBkYXRlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgdXBkYXRlLCBuZXdTdGF0ZSwgcHJvcHMsIGluc3RhbmNlKTtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdXBkYXRlLmNhbGxiYWNrO1xuXG4gICAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IENhbGxiYWNrO1xuICAgICAgICAgIHZhciBlZmZlY3RzID0gcXVldWUuZWZmZWN0cztcblxuICAgICAgICAgIGlmIChlZmZlY3RzID09PSBudWxsKSB7XG4gICAgICAgICAgICBxdWV1ZS5lZmZlY3RzID0gW3VwZGF0ZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVmZmVjdHMucHVzaCh1cGRhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcblxuICAgICAgaWYgKHVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICBwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZztcblxuICAgICAgICBpZiAocGVuZGluZ1F1ZXVlID09PSBudWxsKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgZnJvbSBpbnNpZGUgYSByZWR1Y2VyLiBBZGQgdGhlIG5ld1xuICAgICAgICAgIC8vIHBlbmRpbmcgdXBkYXRlcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGFuZCBrZWVwIHByb2Nlc3NpbmcuXG4gICAgICAgICAgdmFyIF9sYXN0UGVuZGluZ1VwZGF0ZSA9IHBlbmRpbmdRdWV1ZTsgLy8gSW50ZW50aW9uYWxseSB1bnNvdW5kLiBQZW5kaW5nIHVwZGF0ZXMgZm9ybSBhIGNpcmN1bGFyIGxpc3QsIGJ1dCB3ZVxuICAgICAgICAgIC8vIHVucmF2ZWwgdGhlbSB3aGVuIHRyYW5zZmVycmluZyB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuXG4gICAgICAgICAgdmFyIF9maXJzdFBlbmRpbmdVcGRhdGUgPSBfbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICAgICAgICBfbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7XG4gICAgICAgICAgdXBkYXRlID0gX2ZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IF9sYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICBxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlICh0cnVlKTtcblxuICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgcXVldWUuYmFzZVN0YXRlID0gbmV3QmFzZVN0YXRlO1xuICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IG5ld0ZpcnN0QmFzZVVwZGF0ZTtcbiAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlOyAvLyBTZXQgdGhlIHJlbWFpbmluZyBleHBpcmF0aW9uIHRpbWUgdG8gYmUgd2hhdGV2ZXIgaXMgcmVtYWluaW5nIGluIHRoZSBxdWV1ZS5cbiAgICAvLyBUaGlzIHNob3VsZCBiZSBmaW5lIGJlY2F1c2UgdGhlIG9ubHkgdHdvIG90aGVyIHRoaW5ncyB0aGF0IGNvbnRyaWJ1dGUgdG9cbiAgICAvLyBleHBpcmF0aW9uIHRpbWUgYXJlIHByb3BzIGFuZCBjb250ZXh0LiBXZSdyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgdGhlXG4gICAgLy8gYmVnaW4gcGhhc2UgYnkgdGhlIHRpbWUgd2Ugc3RhcnQgcHJvY2Vzc2luZyB0aGUgcXVldWUsIHNvIHdlJ3ZlIGFscmVhZHlcbiAgICAvLyBkZWFsdCB3aXRoIHRoZSBwcm9wcy4gQ29udGV4dCBpbiBjb21wb25lbnRzIHRoYXQgc3BlY2lmeVxuICAgIC8vIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB0cmlja3k7IGJ1dCB3ZSdsbCBoYXZlIHRvIGFjY291bnQgZm9yXG4gICAgLy8gdGhhdCByZWdhcmRsZXNzLlxuXG4gICAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyhuZXdMYW5lcyk7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBuZXdMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICB7XG4gICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ2FsbGJhY2soY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgaWYgKCEodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIGFzIGNhbGxiYWNrLiBFeHBlY3RlZCBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiBcIiArIGNhbGxiYWNrICk7XG4gICAgfVxuICB9XG5cbiAgY2FsbGJhY2suY2FsbChjb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKSB7XG4gIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG59XG5mdW5jdGlvbiBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkge1xuICByZXR1cm4gaGFzRm9yY2VVcGRhdGU7XG59XG5mdW5jdGlvbiBjb21taXRVcGRhdGVRdWV1ZShmaW5pc2hlZFdvcmssIGZpbmlzaGVkUXVldWUsIGluc3RhbmNlKSB7XG4gIC8vIENvbW1pdCB0aGUgZWZmZWN0c1xuICB2YXIgZWZmZWN0cyA9IGZpbmlzaGVkUXVldWUuZWZmZWN0cztcbiAgZmluaXNoZWRRdWV1ZS5lZmZlY3RzID0gbnVsbDtcblxuICBpZiAoZWZmZWN0cyAhPT0gbnVsbCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWZmZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVmZmVjdCA9IGVmZmVjdHNbaV07XG4gICAgICB2YXIgY2FsbGJhY2sgPSBlZmZlY3QuY2FsbGJhY2s7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBlZmZlY3QuY2FsbGJhY2sgPSBudWxsO1xuICAgICAgICBjYWxsQ2FsbGJhY2soY2FsbGJhY2ssIGluc3RhbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGZha2VJbnRlcm5hbEluc3RhbmNlID0ge307XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7IC8vIFJlYWN0LkNvbXBvbmVudCB1c2VzIGEgc2hhcmVkIGZyb3plbiBvYmplY3QgYnkgZGVmYXVsdC5cbi8vIFdlJ2xsIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIGluaXRpYWxpemUgbGVnYWN5IHJlZnMuXG5cbnZhciBlbXB0eVJlZnNPYmplY3QgPSBuZXcgUmVhY3QuQ29tcG9uZW50KCkucmVmcztcbnZhciBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlO1xudmFyIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlO1xudmFyIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZTtcbnZhciB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGU7XG52YXIgd2Fybk9uSW52YWxpZENhbGxiYWNrO1xudmFyIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlO1xudmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzO1xudmFyIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZTtcblxue1xuICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcyA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlID0gbmV3IFNldCgpO1xuICB2YXIgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrID0gbmV3IFNldCgpO1xuXG4gIHdhcm5PbkludmFsaWRDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCB8fCB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIga2V5ID0gY2FsbGVyTmFtZSArICdfJyArIGNhbGxiYWNrO1xuXG4gICAgaWYgKCFkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suaGFzKGtleSkpIHtcbiAgICAgIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5hZGQoa2V5KTtcblxuICAgICAgZXJyb3IoJyVzKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsZXJOYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9O1xuXG4gIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZSA9IGZ1bmN0aW9uICh0eXBlLCBwYXJ0aWFsU3RhdGUpIHtcbiAgICBpZiAocGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpOiBBIHZhbGlkIHN0YXRlIG9iamVjdCAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZC4gJyArICdZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9OyAvLyBUaGlzIGlzIHNvIGdyb3NzIGJ1dCBpdCdzIGF0IGxlYXN0IG5vbi1jcml0aWNhbCBhbmQgY2FuIGJlIHJlbW92ZWQgaWZcbiAgLy8gaXQgY2F1c2VzIHByb2JsZW1zLiBUaGlzIGlzIG1lYW50IHRvIGdpdmUgYSBuaWNlciBlcnJvciBtZXNzYWdlIGZvclxuICAvLyBSZWFjdERPTTE1LnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHJlYWN0RE9NMTZDb21wb25lbnQsXG4gIC8vIC4uLikpIHdoaWNoIG90aGVyd2lzZSB0aHJvd3MgYSBcIl9wcm9jZXNzQ2hpbGRDb250ZXh0IGlzIG5vdCBhIGZ1bmN0aW9uXCJcbiAgLy8gZXhjZXB0aW9uLlxuXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZha2VJbnRlcm5hbEluc3RhbmNlLCAnX3Byb2Nlc3NDaGlsZENvbnRleHQnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIl9wcm9jZXNzQ2hpbGRDb250ZXh0IGlzIG5vdCBhdmFpbGFibGUgaW4gUmVhY3QgMTYrLiBUaGlzIGxpa2VseSBtZWFucyB5b3UgaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2YgUmVhY3QgYW5kIGFyZSBhdHRlbXB0aW5nIHRvIG5lc3QgYSBSZWFjdCAxNSB0cmVlIGluc2lkZSBhIFJlYWN0IDE2IHRyZWUgdXNpbmcgdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIsIHdoaWNoIGlzbid0IHN1cHBvcnRlZC4gVHJ5IHRvIG1ha2Ugc3VyZSB5b3UgaGF2ZSBvbmx5IG9uZSBjb3B5IG9mIFJlYWN0IChhbmQgaWRlYWxseSwgc3dpdGNoIHRvIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbCkuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5mcmVlemUoZmFrZUludGVybmFsSW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXh0UHJvcHMpIHtcbiAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAge1xuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEludm9rZSB0aGUgZnVuY3Rpb24gYW4gZXh0cmEgdGltZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG4gICAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcGFydGlhbFN0YXRlID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcblxuICB7XG4gICAgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlKGN0b3IsIHBhcnRpYWxTdGF0ZSk7XG4gIH0gLy8gTWVyZ2UgdGhlIHBhcnRpYWwgc3RhdGUgYW5kIHRoZSBwcmV2aW91cyBzdGF0ZS5cblxuXG4gIHZhciBtZW1vaXplZFN0YXRlID0gcGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkID8gcHJldlN0YXRlIDogX2Fzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbWVtb2l6ZWRTdGF0ZTsgLy8gT25jZSB0aGUgdXBkYXRlIHF1ZXVlIGlzIGVtcHR5LCBwZXJzaXN0IHRoZSBkZXJpdmVkIHN0YXRlIG9udG8gdGhlXG4gIC8vIGJhc2Ugc3RhdGUuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzLmxhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gUXVldWUgaXMgYWx3YXlzIG5vbi1udWxsIGZvciBjbGFzc2VzXG4gICAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gICAgdXBkYXRlUXVldWUuYmFzZVN0YXRlID0gbWVtb2l6ZWRTdGF0ZTtcbiAgfVxufVxudmFyIGNsYXNzQ29tcG9uZW50VXBkYXRlciA9IHtcbiAgaXNNb3VudGVkOiBpc01vdW50ZWQsXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpO1xuICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ3NldFN0YXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9LFxuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IFJlcGxhY2VTdGF0ZTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdyZXBsYWNlU3RhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH0sXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKGluc3QsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpO1xuICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEludm9rZSB0aGUgZnVuY3Rpb24gYW4gZXh0cmEgdGltZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG4gICAgICAgICAgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNob3VsZFVwZGF0ZSA9IGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICAgIHtcbiAgICAgIGlmIChzaG91bGRVcGRhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvcignJXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk6IFJldHVybmVkIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIGEgJyArICdib29sZWFuIHZhbHVlLiBNYWtlIHN1cmUgdG8gcmV0dXJuIHRydWUgb3IgZmFsc2UuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCkge1xuICAgIHJldHVybiAhc2hhbGxvd0VxdWFsKG9sZFByb3BzLCBuZXdQcm9wcykgfHwgIXNoYWxsb3dFcXVhbChvbGRTdGF0ZSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQ2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIHtcbiAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG4gICAgdmFyIHJlbmRlclByZXNlbnQgPSBpbnN0YW5jZS5yZW5kZXI7XG5cbiAgICBpZiAoIXJlbmRlclByZXNlbnQpIHtcbiAgICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiB0eXBlb2YgY3Rvci5wcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICsgJ2luc3RhbmNlOiBkaWQgeW91IGFjY2lkZW50YWxseSByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yPycsIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IHlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gZGVmaW5lIGByZW5kZXJgLicsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUgJiYgIWluc3RhbmNlLmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCAmJiAhaW5zdGFuY2Uuc3RhdGUpIHtcbiAgICAgIGVycm9yKCdnZXRJbml0aWFsU3RhdGUgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGRlZmluZSBhIHN0YXRlIHByb3BlcnR5IGluc3RlYWQ/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmdldERlZmF1bHRQcm9wcyAmJiAhaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ1VzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLnByb3BUeXBlcykge1xuICAgICAgZXJyb3IoJ3Byb3BUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIHByb3BUeXBlcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5jb250ZXh0VHlwZSkge1xuICAgICAgZXJyb3IoJ2NvbnRleHRUeXBlIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgY29udGV4dFR5cGUgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoaW5zdGFuY2UuY29udGV4dFR5cGVzKSB7XG4gICAgICAgIGVycm9yKCdjb250ZXh0VHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZXMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN0b3IuY29udGV4dFR5cGUgJiYgY3Rvci5jb250ZXh0VHlwZXMgJiYgIWRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzLmhhcyhjdG9yKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcy5hZGQoY3Rvcik7XG5cbiAgICAgICAgZXJyb3IoJyVzIGRlY2xhcmVzIGJvdGggY29udGV4dFR5cGVzIGFuZCBjb250ZXh0VHlwZSBzdGF0aWMgcHJvcGVydGllcy4gJyArICdUaGUgbGVnYWN5IGNvbnRleHRUeXBlcyBwcm9wZXJ0eSB3aWxsIGJlIGlnbm9yZWQuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRTaG91bGRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gJyArICdUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArICdleHBlY3RlZCB0byByZXR1cm4gYSB2YWx1ZS4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgJiYgdHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpLiAnICsgJ3Nob3VsZENvbXBvbmVudFVwZGF0ZSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBleHRlbmRpbmcgUmVhY3QuUHVyZUNvbXBvbmVudC4gJyArICdQbGVhc2UgZXh0ZW5kIFJlYWN0LkNvbXBvbmVudCBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgaXMgdXNlZC4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdBIHB1cmUgY29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFVubW91bnQoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gJyArICdEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFVubW91bnQoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnREaWRSZWNlaXZlUHJvcHMoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gJyArICdJZiB5b3UgbWVhbnQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBpbiByZXNwb25zZSB0byBjaGFuZ2luZyBwcm9wcywgJyArICd1c2UgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpLiBJZiB5b3UgbWVhbnQgdG8gZmV0Y2ggZGF0YSBvciAnICsgJ3J1biBzaWRlLWVmZmVjdHMgb3IgbXV0YXRpb25zIGFmdGVyIFJlYWN0IGhhcyB1cGRhdGVkIHRoZSBVSSwgdXNlIGNvbXBvbmVudERpZFVwZGF0ZSgpLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgaGFzTXV0YXRlZFByb3BzID0gaW5zdGFuY2UucHJvcHMgIT09IG5ld1Byb3BzO1xuXG4gICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSB1bmRlZmluZWQgJiYgaGFzTXV0YXRlZFByb3BzKSB7XG4gICAgICBlcnJvcignJXMoLi4uKTogV2hlbiBjYWxsaW5nIHN1cGVyKCkgaW4gYCVzYCwgbWFrZSBzdXJlIHRvIHBhc3MgJyArIFwidXAgdGhlIHNhbWUgcHJvcHMgdGhhdCB5b3VyIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIHdhcyBwYXNzZWQuXCIsIG5hbWUsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5kZWZhdWx0UHJvcHMpIHtcbiAgICAgIGVycm9yKCdTZXR0aW5nIGRlZmF1bHRQcm9wcyBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIGlnbm9yZWQuJyArICcgSW5zdGVhZCwgZGVmaW5lIGRlZmF1bHRQcm9wcyBhcyBhIHN0YXRpYyBwcm9wZXJ0eSBvbiAlcy4nLCBuYW1lLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgIT09ICdmdW5jdGlvbicgJiYgIWRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZS5oYXMoY3RvcikpIHtcbiAgICAgIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZS5hZGQoY3Rvcik7XG5cbiAgICAgIGVycm9yKCclczogZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBzaG91bGQgYmUgdXNlZCB3aXRoIGNvbXBvbmVudERpZFVwZGF0ZSgpLiAnICsgJ1RoaXMgY29tcG9uZW50IGRlZmluZXMgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBvbmx5LicsIGdldENvbXBvbmVudE5hbWUoY3RvcikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBfc3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICAgIGlmIChfc3RhdGUgJiYgKHR5cGVvZiBfc3RhdGUgIT09ICdvYmplY3QnIHx8IGlzQXJyYXkoX3N0YXRlKSkpIHtcbiAgICAgIGVycm9yKCclcy5zdGF0ZTogbXVzdCBiZSBzZXQgdG8gYW4gb2JqZWN0IG9yIG51bGwnLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY3Rvci5jaGlsZENvbnRleHRUeXBlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVycm9yKCclcy5nZXRDaGlsZENvbnRleHQoKTogY2hpbGRDb250ZXh0VHlwZXMgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvICcgKyAndXNlIGdldENoaWxkQ29udGV4dCgpLicsIG5hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnVwZGF0ZXIgPSBjbGFzc0NvbXBvbmVudFVwZGF0ZXI7XG4gIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGluc3RhbmNlOyAvLyBUaGUgaW5zdGFuY2UgbmVlZHMgYWNjZXNzIHRvIHRoZSBmaWJlciBzbyB0aGF0IGl0IGNhbiBzY2hlZHVsZSB1cGRhdGVzXG5cbiAgc2V0KGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAge1xuICAgIGluc3RhbmNlLl9yZWFjdEludGVybmFsSW5zdGFuY2UgPSBmYWtlSW50ZXJuYWxJbnN0YW5jZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBwcm9wcykge1xuICB2YXIgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBmYWxzZTtcbiAgdmFyIHVubWFza2VkQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG5cbiAge1xuICAgIGlmICgnY29udGV4dFR5cGUnIGluIGN0b3IpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gLy8gQWxsb3cgbnVsbCBmb3IgY29uZGl0aW9uYWwgZGVjbGFyYXRpb25cbiAgICAgIGNvbnRleHRUeXBlID09PSBudWxsIHx8IGNvbnRleHRUeXBlICE9PSB1bmRlZmluZWQgJiYgY29udGV4dFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSAmJiBjb250ZXh0VHlwZS5fY29udGV4dCA9PT0gdW5kZWZpbmVkOyAvLyBOb3QgYSA8Q29udGV4dC5Db25zdW1lcj5cblxuICAgICAgaWYgKCFpc1ZhbGlkICYmICFkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuaGFzKGN0b3IpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5hZGQoY3Rvcik7XG4gICAgICAgIHZhciBhZGRlbmR1bSA9ICcnO1xuXG4gICAgICAgIGlmIChjb250ZXh0VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byB1bmRlZmluZWQuICcgKyAnVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGEgdHlwbyBvciBieSBtaXhpbmcgdXAgbmFtZWQgYW5kIGRlZmF1bHQgaW1wb3J0cy4gJyArICdUaGlzIGNhbiBhbHNvIGhhcHBlbiBkdWUgdG8gYSBjaXJjdWxhciBkZXBlbmRlbmN5LCBzbyAnICsgJ3RyeSBtb3ZpbmcgdGhlIGNyZWF0ZUNvbnRleHQoKSBjYWxsIHRvIGEgc2VwYXJhdGUgZmlsZS4nO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGEgJyArIHR5cGVvZiBjb250ZXh0VHlwZSArICcuJztcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSkge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIHRoZSBDb250ZXh0LlByb3ZpZGVyIGluc3RlYWQ/JztcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZS5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gPENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuQ29uc3VtZXIgaW5zdGVhZD8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYW4gb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNvbnRleHRUeXBlKS5qb2luKCcsICcpICsgJ30uJztcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yKCclcyBkZWZpbmVzIGFuIGludmFsaWQgY29udGV4dFR5cGUuICcgKyAnY29udGV4dFR5cGUgc2hvdWxkIHBvaW50IHRvIHRoZSBDb250ZXh0IG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVDb250ZXh0KCkuJXMnLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnLCBhZGRlbmR1bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBjb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IGN0b3IuY29udGV4dFR5cGVzO1xuICAgIGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID0gY29udGV4dFR5cGVzICE9PSBudWxsICYmIGNvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnRleHQgPSBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA/IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCkgOiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIH0gLy8gSW5zdGFudGlhdGUgdHdpY2UgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuXG5cbiAge1xuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTtcbiAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlICE9PSBudWxsICYmIGluc3RhbmNlLnN0YXRlICE9PSB1bmRlZmluZWQgPyBpbnN0YW5jZS5zdGF0ZSA6IG51bGw7XG4gIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nICYmIHN0YXRlID09PSBudWxsKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCdgJXNgIHVzZXMgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYnV0IGl0cyBpbml0aWFsIHN0YXRlIGlzICcgKyAnJXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkLiBJbnN0ZWFkLCBkZWZpbmUgdGhlIGluaXRpYWwgc3RhdGUgYnkgJyArICdhc3NpZ25pbmcgYW4gb2JqZWN0IHRvIGB0aGlzLnN0YXRlYCBpbiB0aGUgY29uc3RydWN0b3Igb2YgYCVzYC4gJyArICdUaGlzIGVuc3VyZXMgdGhhdCBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBhcmd1bWVudHMgaGF2ZSBhIGNvbnNpc3RlbnQgc2hhcGUuJywgY29tcG9uZW50TmFtZSwgaW5zdGFuY2Uuc3RhdGUgPT09IG51bGwgPyAnbnVsbCcgOiAndW5kZWZpbmVkJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfSAvLyBJZiBuZXcgY29tcG9uZW50IEFQSXMgYXJlIGRlZmluZWQsIFwidW5zYWZlXCIgbGlmZWN5Y2xlcyB3b24ndCBiZSBjYWxsZWQuXG4gICAgLy8gV2FybiBhYm91dCB0aGVzZSBsaWZlY3ljbGVzIGlmIHRoZXkgYXJlIHByZXNlbnQuXG4gICAgLy8gRG9uJ3Qgd2FybiBhYm91dCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIG1ldGhvZHMgdGhvdWdoLlxuXG5cbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGZvdW5kV2lsbE1vdW50TmFtZSA9IG51bGw7XG4gICAgICB2YXIgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9IG51bGw7XG4gICAgICB2YXIgZm91bmRXaWxsVXBkYXRlTmFtZSA9IG51bGw7XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kV2lsbE1vdW50TmFtZSA9ICdjb21wb25lbnRXaWxsTW91bnQnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSAnY29tcG9uZW50V2lsbFVwZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJztcbiAgICAgIH1cblxuICAgICAgaWYgKGZvdW5kV2lsbE1vdW50TmFtZSAhPT0gbnVsbCB8fCBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lICE9PSBudWxsIHx8IGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIF9jb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgICB2YXIgbmV3QXBpTmFtZSA9IHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/ICdnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKScgOiAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSc7XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmhhcyhfY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmFkZChfY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgICBlcnJvcignVW5zYWZlIGxlZ2FjeSBsaWZlY3ljbGVzIHdpbGwgbm90IGJlIGNhbGxlZCBmb3IgY29tcG9uZW50cyB1c2luZyBuZXcgY29tcG9uZW50IEFQSXMuXFxuXFxuJyArICclcyB1c2VzICVzIGJ1dCBhbHNvIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbGVnYWN5IGxpZmVjeWNsZXM6JXMlcyVzXFxuXFxuJyArICdUaGUgYWJvdmUgbGlmZWN5Y2xlcyBzaG91bGQgYmUgcmVtb3ZlZC4gTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTpcXG4nICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMnLCBfY29tcG9uZW50TmFtZSwgbmV3QXBpTmFtZSwgZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsTW91bnROYW1lIDogJycsIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lIDogJycsIGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxVcGRhdGVOYW1lIDogJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENhY2hlIHVubWFza2VkIGNvbnRleHQgc28gd2UgY2FuIGF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIG5lY2Vzc2FyeS5cbiAgLy8gUmVhY3RGaWJlckNvbnRleHQgdXN1YWxseSB1cGRhdGVzIHRoaXMgY2FjaGUgYnV0IGNhbid0IGZvciBuZXdseS1jcmVhdGVkIGluc3RhbmNlcy5cblxuXG4gIGlmIChpc0xlZ2FjeUNvbnRleHRDb25zdW1lcikge1xuICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuZnVuY3Rpb24gY2FsbENvbXBvbmVudFdpbGxNb3VudCh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpIHtcbiAgdmFyIG9sZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgfVxuXG4gIGlmIChvbGRTdGF0ZSAhPT0gaW5zdGFuY2Uuc3RhdGUpIHtcbiAgICB7XG4gICAgICBlcnJvcignJXMuY29tcG9uZW50V2lsbE1vdW50KCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byB0aGlzLnN0YXRlIGlzICcgKyBcImRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBcIiArICdjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgIH1cblxuICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpIHtcbiAgdmFyIG9sZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIH1cblxuICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IG9sZFN0YXRlKSB7XG4gICAge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gJyArIFwidGhpcy5zdGF0ZSBpcyBkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgKyAnY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShpbnN0YW5jZSwgaW5zdGFuY2Uuc3RhdGUsIG51bGwpO1xuICB9XG59IC8vIEludm9rZXMgdGhlIG1vdW50IGxpZmUtY3ljbGVzIG9uIGEgcHJldmlvdXNseSBuZXZlciByZW5kZXJlZCBpbnN0YW5jZS5cblxuXG5mdW5jdGlvbiBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcyk7XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgaW5zdGFuY2UucmVmcyA9IGVtcHR5UmVmc09iamVjdDtcbiAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGluc3RhbmNlLmNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgaW5zdGFuY2UuY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB7XG4gICAgaWYgKGluc3RhbmNlLnN0YXRlID09PSBuZXdQcm9wcykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gYXNzaWduIHByb3BzIGRpcmVjdGx5IHRvIHN0YXRlICcgKyBcImJlY2F1c2UgdXBkYXRlcyB0byBwcm9wcyB3b24ndCBiZSByZWZsZWN0ZWQgaW4gc3RhdGUuIFwiICsgJ0luIG1vc3QgY2FzZXMsIGl0IGlzIGJldHRlciB0byB1c2UgcHJvcHMgZGlyZWN0bHkuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9IC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG5cbiAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgIT09ICdmdW5jdGlvbicgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgY2FsbENvbXBvbmVudFdpbGxNb3VudCh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpOyAvLyBJZiB3ZSBoYWQgYWRkaXRpb25hbCBzdGF0ZSB1cGRhdGVzIGR1cmluZyB0aGlzIGxpZmUtY3ljbGUsIGxldCdzXG4gICAgLy8gcHJvY2VzcyB0aGVtIG5vdy5cblxuICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gICAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHRMZWdhY3lVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7IC8vIE5vdGU6IER1cmluZyB0aGVzZSBsaWZlLWN5Y2xlcywgaW5zdGFuY2UucHJvcHMvaW5zdGFuY2Uuc3RhdGUgYXJlIHdoYXRcbiAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgLy8gZHVyaW5nIGNvbXBvbmVudERpZFVwZGF0ZSB3ZSBwYXNzIHRoZSBcImN1cnJlbnRcIiBwcm9wcy5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dCkge1xuICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCk7XG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAob2xkUHJvcHMgPT09IG5ld1Byb3BzICYmIG9sZFN0YXRlID09PSBuZXdTdGF0ZSAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSAmJiAhY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpKSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB8fCBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cbiAgICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn0gLy8gSW52b2tlcyB0aGUgdXBkYXRlIGxpZmUtY3ljbGVzIGFuZCByZXR1cm5zIGZhbHNlIGlmIGl0IHNob3VsZG4ndCByZXJlbmRlci5cblxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0luc3RhbmNlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHVucmVzb2x2ZWRPbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID8gdW5yZXNvbHZlZE9sZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh3b3JrSW5Qcm9ncmVzcy50eXBlLCB1bnJlc29sdmVkT2xkUHJvcHMpO1xuICBpbnN0YW5jZS5wcm9wcyA9IG9sZFByb3BzO1xuICB2YXIgdW5yZXNvbHZlZE5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgb2xkQ29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQ7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG4gIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIG5leHRDb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXh0VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIG5leHRVbm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nOyAvLyBOb3RlOiBEdXJpbmcgdGhlc2UgbGlmZS1jeWNsZXMsIGluc3RhbmNlLnByb3BzL2luc3RhbmNlLnN0YXRlIGFyZSB3aGF0XG4gIC8vIGV2ZXIgdGhlIHByZXZpb3VzbHkgYXR0ZW1wdGVkIHRvIHJlbmRlciAtIG5vdCB0aGUgXCJjdXJyZW50XCIuIEhvd2V2ZXIsXG4gIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG4gIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IHVucmVzb2x2ZWROZXdQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dCkge1xuICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCk7XG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAodW5yZXNvbHZlZE9sZFByb3BzID09PSB1bnJlc29sdmVkTmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkpIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB8fCBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cbiAgICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9IC8vIElmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5lZCBmYWxzZSwgd2Ugc2hvdWxkIHN0aWxsIHVwZGF0ZSB0aGVcbiAgICAvLyBtZW1vaXplZCBwcm9wcy9zdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgd29yayBjYW4gYmUgcmV1c2VkLlxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV3UHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9IC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UncyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHBvaW50ZXJzIGV2ZW5cbiAgLy8gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2UuXG5cblxuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IG5ld1N0YXRlO1xuICBpbnN0YW5jZS5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59XG5cbnZhciBkaWRXYXJuQWJvdXRNYXBzO1xudmFyIGRpZFdhcm5BYm91dEdlbmVyYXRvcnM7XG52YXIgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmc7XG52YXIgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nO1xuXG52YXIgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQsIHJldHVybkZpYmVyKSB7fTtcblxue1xuICBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xuICAvKipcbiAgICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICAgKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAgICogdXBkYXRlcy5cbiAgICovXG5cbiAgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG4gIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZyA9IHt9O1xuXG4gIHdhcm5Gb3JNaXNzaW5nS2V5ID0gZnVuY3Rpb24gKGNoaWxkLCByZXR1cm5GaWJlcikge1xuICAgIGlmIChjaGlsZCA9PT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjaGlsZC5fc3RvcmUgfHwgY2hpbGQuX3N0b3JlLnZhbGlkYXRlZCB8fCBjaGlsZC5rZXkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKHR5cGVvZiBjaGlsZC5fc3RvcmUgPT09ICdvYmplY3QnKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJSZWFjdCBDb21wb25lbnQgaW4gd2FybkZvck1pc3NpbmdLZXkgc2hvdWxkIGhhdmUgYSBfc3RvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGlsZC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSAnICsgJ1wia2V5XCIgcHJvcC4gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yICcgKyAnbW9yZSBpbmZvcm1hdGlvbi4nKTtcbiAgfTtcbn1cblxudmFyIGlzQXJyYXkkMSA9IEFycmF5LmlzQXJyYXk7XG5cbmZ1bmN0aW9uIGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCkge1xuICB2YXIgbWl4ZWRSZWYgPSBlbGVtZW50LnJlZjtcblxuICBpZiAobWl4ZWRSZWYgIT09IG51bGwgJiYgdHlwZW9mIG1peGVkUmVmICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBtaXhlZFJlZiAhPT0gJ29iamVjdCcpIHtcbiAgICB7XG4gICAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIG9uY2Ugd2UgdHVybiBvbiB0aGUgc3RyaW5nIHJlZiB3YXJuaW5nIGZvclxuICAgICAgLy8gZXZlcnlvbmUsIGJlY2F1c2UgdGhlIHN0cmljdCBtb2RlIGNhc2Ugd2lsbCBubyBsb25nZXIgYmUgcmVsZXZhbnRcbiAgICAgIGlmICgocmV0dXJuRmliZXIubW9kZSAmIFN0cmljdE1vZGUgfHwgd2FybkFib3V0U3RyaW5nUmVmcykgJiYgLy8gV2Ugd2FybiBpbiBSZWFjdEVsZW1lbnQuanMgaWYgb3duZXIgYW5kIHNlbGYgYXJlIGVxdWFsIGZvciBzdHJpbmcgcmVmc1xuICAgICAgLy8gYmVjYXVzZSB0aGVzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb25cbiAgICAgIC8vIHVzaW5nIGEgY29kZW1vZC4gVGhlcmVmb3JlLCB3ZSBkb24ndCBoYXZlIHRvIHdhcm4gYWJvdXQgc3RyaW5nIHJlZnMgYWdhaW4uXG4gICAgICAhKGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX3NlbGYgJiYgZWxlbWVudC5fb3duZXIuc3RhdGVOb2RlICE9PSBlbGVtZW50Ll9zZWxmKSkge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgZXJyb3IoJ0Egc3RyaW5nIHJlZiwgXCIlc1wiLCBoYXMgYmVlbiBmb3VuZCB3aXRoaW4gYSBzdHJpY3QgbW9kZSB0cmVlLiAnICsgJ1N0cmluZyByZWZzIGFyZSBhIHNvdXJjZSBvZiBwb3RlbnRpYWwgYnVncyBhbmQgc2hvdWxkIGJlIGF2b2lkZWQuICcgKyAnV2UgcmVjb21tZW5kIHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgbWl4ZWRSZWYpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQuX293bmVyKSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBpbnN0O1xuXG4gICAgICBpZiAob3duZXIpIHtcbiAgICAgICAgdmFyIG93bmVyRmliZXIgPSBvd25lcjtcblxuICAgICAgICBpZiAoIShvd25lckZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgaGF2ZSBzdHJpbmcgcmVmcy4gV2UgcmVjb21tZW5kIHVzaW5nIHVzZVJlZigpIGluc3RlYWQuIExlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWZcIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluc3QgPSBvd25lckZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpbnN0KSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJNaXNzaW5nIG93bmVyIGZvciBzdHJpbmcgcmVmIFwiICsgbWl4ZWRSZWYgKyBcIi4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHJpbmdSZWYgPSAnJyArIG1peGVkUmVmOyAvLyBDaGVjayBpZiBwcmV2aW91cyBzdHJpbmcgcmVmIG1hdGNoZXMgbmV3IHN0cmluZyByZWZcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5yZWYgIT09IG51bGwgJiYgdHlwZW9mIGN1cnJlbnQucmVmID09PSAnZnVuY3Rpb24nICYmIGN1cnJlbnQucmVmLl9zdHJpbmdSZWYgPT09IHN0cmluZ1JlZikge1xuICAgICAgICByZXR1cm4gY3VycmVudC5yZWY7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWYgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHJlZnMgPSBpbnN0LnJlZnM7XG5cbiAgICAgICAgaWYgKHJlZnMgPT09IGVtcHR5UmVmc09iamVjdCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSBsYXp5IHBvb2xlZCBmcm96ZW4gb2JqZWN0LCBzbyB3ZSBuZWVkIHRvIGluaXRpYWxpemUuXG4gICAgICAgICAgcmVmcyA9IGluc3QucmVmcyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgZGVsZXRlIHJlZnNbc3RyaW5nUmVmXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZzW3N0cmluZ1JlZl0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmVmLl9zdHJpbmdSZWYgPSBzdHJpbmdSZWY7XG4gICAgICByZXR1cm4gcmVmO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoISh0eXBlb2YgbWl4ZWRSZWYgPT09ICdzdHJpbmcnKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgcmVmIHRvIGJlIGEgZnVuY3Rpb24sIGEgc3RyaW5nLCBhbiBvYmplY3QgcmV0dXJuZWQgYnkgUmVhY3QuY3JlYXRlUmVmKCksIG9yIG51bGwuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWVsZW1lbnQuX293bmVyKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJFbGVtZW50IHJlZiB3YXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIChcIiArIG1peGVkUmVmICsgXCIpIGJ1dCBubyBvd25lciB3YXMgc2V0LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWF5IGJlIGFkZGluZyBhIHJlZiB0byBhIGZ1bmN0aW9uIGNvbXBvbmVudFxcbjIuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgY29tcG9uZW50IHRoYXQgd2FzIG5vdCBjcmVhdGVkIGluc2lkZSBhIGNvbXBvbmVudCdzIHJlbmRlciBtZXRob2RcXG4zLiBZb3UgaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2YgUmVhY3QgbG9hZGVkXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWZzLW11c3QtaGF2ZS1vd25lciBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1peGVkUmVmO1xufVxuXG5mdW5jdGlvbiB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKSB7XG4gIGlmIChyZXR1cm5GaWJlci50eXBlICE9PSAndGV4dGFyZWEnKSB7XG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXdDaGlsZCkgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhuZXdDaGlsZCkuam9pbignLCAnKSArICd9JyA6IG5ld0NoaWxkKSArIFwiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcikge1xuICB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgaWYgKG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1tjb21wb25lbnROYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1tjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignRnVuY3Rpb25zIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC4gVGhpcyBtYXkgaGFwcGVuIGlmICcgKyAneW91IHJldHVybiBhIENvbXBvbmVudCBpbnN0ZWFkIG9mIDxDb21wb25lbnQgLz4gZnJvbSByZW5kZXIuICcgKyAnT3IgbWF5YmUgeW91IG1lYW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiByZXR1cm4gaXQuJyk7XG4gIH1cbn0gLy8gV2UgYXZvaWQgaW5saW5pbmcgdGhpcyB0byBhdm9pZCBwb3RlbnRpYWwgZGVvcHRzIGZyb20gdXNpbmcgdHJ5L2NhdGNoLlxuLy8gdG8gYmUgYWJsZSB0byBvcHRpbWl6ZSBlYWNoIHBhdGggaW5kaXZpZHVhbGx5IGJ5IGJyYW5jaGluZyBlYXJseS4gVGhpcyBuZWVkc1xuLy8gYSBjb21waWxlciBvciB3ZSBjYW4gZG8gaXQgbWFudWFsbHkuIEhlbHBlcnMgdGhhdCBkb24ndCBuZWVkIHRoaXMgYnJhbmNoaW5nXG4vLyBsaXZlIG91dHNpZGUgb2YgdGhpcyBmdW5jdGlvbi5cblxuXG5mdW5jdGlvbiBDaGlsZFJlY29uY2lsZXIoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICBmdW5jdGlvbiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSkge1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIERlbGV0aW9ucyBhcmUgYWRkZWQgaW4gcmV2ZXJzZWQgb3JkZXIgc28gd2UgYWRkIGl0IHRvIHRoZSBmcm9udC5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgcmV0dXJuIGZpYmVyJ3MgZWZmZWN0IGxpc3QgaXMgZW1wdHkgZXhjZXB0IGZvclxuICAgIC8vIGRlbGV0aW9ucywgc28gd2UgY2FuIGp1c3QgYXBwZW5kIHRoZSBkZWxldGlvbiB0byB0aGUgbGlzdC4gVGhlIHJlbWFpbmluZ1xuICAgIC8vIGVmZmVjdHMgYXJlbid0IGFkZGVkIHVudGlsIHRoZSBjb21wbGV0ZSBwaGFzZS4gT25jZSB3ZSBpbXBsZW1lbnRcbiAgICAvLyByZXN1bWluZywgdGhpcyBtYXkgbm90IGJlIHRydWUuXG5cblxuICAgIHZhciBsYXN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0ICE9PSBudWxsKSB7XG4gICAgICBsYXN0Lm5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgfVxuXG4gICAgY2hpbGRUb0RlbGV0ZS5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBjaGlsZFRvRGVsZXRlLmZsYWdzID0gRGVsZXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIFRPRE86IEZvciB0aGUgc2hvdWxkQ2xvbmUgY2FzZSwgdGhpcyBjb3VsZCBiZSBtaWNyby1vcHRpbWl6ZWQgYSBiaXQgYnlcbiAgICAvLyBhc3N1bWluZyB0aGF0IGFmdGVyIHRoZSBmaXJzdCBjaGlsZCB3ZSd2ZSBhbHJlYWR5IGFkZGVkIGV2ZXJ5dGhpbmcuXG5cblxuICAgIHZhciBjaGlsZFRvRGVsZXRlID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGRUb0RlbGV0ZSAhPT0gbnVsbCkge1xuICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpO1xuICAgICAgY2hpbGRUb0RlbGV0ZSA9IGNoaWxkVG9EZWxldGUuc2libGluZztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIC8vIEFkZCB0aGUgcmVtYWluaW5nIGNoaWxkcmVuIHRvIGEgdGVtcG9yYXJ5IG1hcCBzbyB0aGF0IHdlIGNhbiBmaW5kIHRoZW0gYnlcbiAgICAvLyBrZXlzIHF1aWNrbHkuIEltcGxpY2l0IChudWxsKSBrZXlzIGdldCBhZGRlZCB0byB0aGlzIHNldCB3aXRoIHRoZWlyIGluZGV4XG4gICAgLy8gaW5zdGVhZC5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG5ldyBNYXAoKTtcbiAgICB2YXIgZXhpc3RpbmdDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGV4aXN0aW5nQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGlmIChleGlzdGluZ0NoaWxkLmtleSAhPT0gbnVsbCkge1xuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLnNldChleGlzdGluZ0NoaWxkLmtleSwgZXhpc3RpbmdDaGlsZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLnNldChleGlzdGluZ0NoaWxkLmluZGV4LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH1cblxuICAgICAgZXhpc3RpbmdDaGlsZCA9IGV4aXN0aW5nQ2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICByZXR1cm4gZXhpc3RpbmdDaGlsZHJlbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZUZpYmVyKGZpYmVyLCBwZW5kaW5nUHJvcHMpIHtcbiAgICAvLyBXZSBjdXJyZW50bHkgc2V0IHNpYmxpbmcgdG8gbnVsbCBhbmQgaW5kZXggdG8gMCBoZXJlIGJlY2F1c2UgaXQgaXMgZWFzeVxuICAgIC8vIHRvIGZvcmdldCB0byBkbyBiZWZvcmUgcmV0dXJuaW5nIGl0LiBFLmcuIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuXG4gICAgdmFyIGNsb25lID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoZmliZXIsIHBlbmRpbmdQcm9wcyk7XG4gICAgY2xvbmUuaW5kZXggPSAwO1xuICAgIGNsb25lLnNpYmxpbmcgPSBudWxsO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SW5kZXgpIHtcbiAgICBuZXdGaWJlci5pbmRleCA9IG5ld0luZGV4O1xuXG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudCA9IG5ld0ZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICB2YXIgb2xkSW5kZXggPSBjdXJyZW50LmluZGV4O1xuXG4gICAgICBpZiAob2xkSW5kZXggPCBsYXN0UGxhY2VkSW5kZXgpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG1vdmUuXG4gICAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpdGVtIGNhbiBzdGF5IGluIHBsYWNlLlxuICAgICAgICByZXR1cm4gb2xkSW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gaW5zZXJ0aW9uLlxuICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYWNlU2luZ2xlQ2hpbGQobmV3RmliZXIpIHtcbiAgICAvLyBUaGlzIGlzIHNpbXBsZXIgZm9yIHRoZSBzaW5nbGUgY2hpbGQgY2FzZS4gV2Ugb25seSBuZWVkIHRvIGRvIGFcbiAgICAvLyBwbGFjZW1lbnQgZm9yIGluc2VydGluZyBuZXcgY2hpbGRyZW4uXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RmliZXI7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudCwgdGV4dENvbnRlbnQsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEhvc3RUZXh0KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIHRleHRDb250ZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChjdXJyZW50LmVsZW1lbnRUeXBlID09PSBlbGVtZW50LnR5cGUgfHwgKCAvLyBLZWVwIHRoaXMgY2hlY2sgaW5saW5lIHNvIGl0IG9ubHkgcnVucyBvbiB0aGUgZmFsc2UgcGF0aDpcbiAgICAgICBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoY3VycmVudCwgZWxlbWVudCkgKSkge1xuICAgICAgICAvLyBNb3ZlIGJhc2VkIG9uIGluZGV4XG4gICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIGVsZW1lbnQucHJvcHMpO1xuICAgICAgICBleGlzdGluZy5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpO1xuICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICB9XG4gICAgfSAvLyBJbnNlcnRcblxuXG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudCwgcG9ydGFsLCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBIb3N0UG9ydGFsIHx8IGN1cnJlbnQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gIT09IHBvcnRhbC5jb250YWluZXJJbmZvIHx8IGN1cnJlbnQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uICE9PSBwb3J0YWwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBmcmFnbWVudCwgbGFuZXMsIGtleSkge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBGcmFnbWVudCkge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZyYWdtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywga2V5KTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBmcmFnbWVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMuIElmIHRoZSBwcmV2aW91cyBub2RlIGlzIGltcGxpY2l0bHkga2V5ZWRcbiAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAvLyBub2RlLlxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KCcnICsgbmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgbnVsbCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgX2NyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICByZXR1cm4gX2NyZWF0ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9jcmVhdGVkMiA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICAgICAgICBfY3JlYXRlZDIucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICByZXR1cm4gX2NyZWF0ZWQyO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgdmFyIF9jcmVhdGVkMyA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywgbnVsbCk7XG5cbiAgICAgICAgX2NyZWF0ZWQzLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICByZXR1cm4gX2NyZWF0ZWQzO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgLy8gVXBkYXRlIHRoZSBmaWJlciBpZiB0aGUga2V5cyBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiBudWxsLlxuICAgIHZhciBrZXkgPSBvbGRGaWJlciAhPT0gbnVsbCA/IG9sZEZpYmVyLmtleSA6IG51bGw7XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cy4gSWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgaW1wbGljaXRseSBrZXllZFxuICAgICAgLy8gd2UgY2FuIGNvbnRpbnVlIHRvIHJlcGxhY2UgaXQgd2l0aG91dCBhYm9ydGluZyBldmVuIGlmIGl0IGlzIG5vdCBhIHRleHRcbiAgICAgIC8vIG5vZGUuXG4gICAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG9sZEZpYmVyLCAnJyArIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgIGlmIChuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sIGxhbmVzLCBrZXkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLCBzbyB3ZSBuZWl0aGVyIGhhdmUgdG8gY2hlY2sgdGhlIG9sZCBub3JcbiAgICAgIC8vIG5ldyBub2RlIGZvciB0aGUga2V5LiBJZiBib3RoIGFyZSB0ZXh0IG5vZGVzLCB0aGV5IG1hdGNoLlxuICAgICAgdmFyIG1hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcbiAgICAgIHJldHVybiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgbWF0Y2hlZEZpYmVyLCAnJyArIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdDaGlsZC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXkpIHx8IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlciwgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sIGxhbmVzLCBuZXdDaGlsZC5rZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlcjIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdDaGlsZC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXkpIHx8IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICB2YXIgX21hdGNoZWRGaWJlcjMgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyMywgbmV3Q2hpbGQsIGxhbmVzLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBXYXJucyBpZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSBvciBtaXNzaW5nIGtleVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JyB8fCBjaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ga25vd25LZXlzO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGNoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHdhcm5Gb3JNaXNzaW5nS2V5KGNoaWxkLCByZXR1cm5GaWJlcik7XG4gICAgICAgICAgdmFyIGtleSA9IGNoaWxkLmtleTtcblxuICAgICAgICAgIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGtub3duS2V5cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAga25vd25LZXlzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFrbm93bktleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yKCdFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksIGAlc2AuICcgKyAnS2V5cyBzaG91bGQgYmUgdW5pcXVlIHNvIHRoYXQgY29tcG9uZW50cyBtYWludGFpbiB0aGVpciBpZGVudGl0eSAnICsgJ2Fjcm9zcyB1cGRhdGVzLiBOb24tdW5pcXVlIGtleXMgbWF5IGNhdXNlIGNoaWxkcmVuIHRvIGJlICcgKyAnZHVwbGljYXRlZCBhbmQvb3Igb21pdHRlZCBcdTIwMTQgdGhlIGJlaGF2aW9yIGlzIHVuc3VwcG9ydGVkIGFuZCAnICsgJ2NvdWxkIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLicsIGtleSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ga25vd25LZXlzO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkcmVuLCBsYW5lcykge1xuICAgIC8vIFRoaXMgYWxnb3JpdGhtIGNhbid0IG9wdGltaXplIGJ5IHNlYXJjaGluZyBmcm9tIGJvdGggZW5kcyBzaW5jZSB3ZVxuICAgIC8vIGRvbid0IGhhdmUgYmFja3BvaW50ZXJzIG9uIGZpYmVycy4gSSdtIHRyeWluZyB0byBzZWUgaG93IGZhciB3ZSBjYW4gZ2V0XG4gICAgLy8gd2l0aCB0aGF0IG1vZGVsLiBJZiBpdCBlbmRzIHVwIG5vdCBiZWluZyB3b3J0aCB0aGUgdHJhZGVvZmZzLCB3ZSBjYW5cbiAgICAvLyBhZGQgaXQgbGF0ZXIuXG4gICAgLy8gRXZlbiB3aXRoIGEgdHdvIGVuZGVkIG9wdGltaXphdGlvbiwgd2UnZCB3YW50IHRvIG9wdGltaXplIGZvciB0aGUgY2FzZVxuICAgIC8vIHdoZXJlIHRoZXJlIGFyZSBmZXcgY2hhbmdlcyBhbmQgYnJ1dGUgZm9yY2UgdGhlIGNvbXBhcmlzb24gaW5zdGVhZCBvZlxuICAgIC8vIGdvaW5nIGZvciB0aGUgTWFwLiBJdCdkIGxpa2UgdG8gZXhwbG9yZSBoaXR0aW5nIHRoYXQgcGF0aCBmaXJzdCBpblxuICAgIC8vIGZvcndhcmQtb25seSBtb2RlIGFuZCBvbmx5IGdvIGZvciB0aGUgTWFwIG9uY2Ugd2Ugbm90aWNlIHRoYXQgd2UgbmVlZFxuICAgIC8vIGxvdHMgb2YgbG9vayBhaGVhZC4gVGhpcyBkb2Vzbid0IGhhbmRsZSByZXZlcnNhbCBhcyB3ZWxsIGFzIHR3byBlbmRlZFxuICAgIC8vIHNlYXJjaCBidXQgdGhhdCdzIHVudXN1YWwuIEJlc2lkZXMsIGZvciB0aGUgdHdvIGVuZGVkIG9wdGltaXphdGlvbiB0b1xuICAgIC8vIHdvcmsgb24gSXRlcmFibGVzLCB3ZSdkIG5lZWQgdG8gY29weSB0aGUgd2hvbGUgc2V0LlxuICAgIC8vIEluIHRoaXMgZmlyc3QgaXRlcmF0aW9uLCB3ZSdsbCBqdXN0IGxpdmUgd2l0aCBoaXR0aW5nIHRoZSBiYWQgY2FzZVxuICAgIC8vIChhZGRpbmcgZXZlcnl0aGluZyB0byBhIE1hcCkgaW4gZm9yIGV2ZXJ5IGluc2VydC9tb3ZlLlxuICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhpcyBjb2RlLCBhbHNvIHVwZGF0ZSByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKCkgd2hpY2hcbiAgICAvLyB1c2VzIHRoZSBzYW1lIGFsZ29yaXRobS5cbiAgICB7XG4gICAgICAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5ld0NoaWxkcmVuW2ldO1xuICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzTmV3RmliZXIgPSBudWxsO1xuICAgIHZhciBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgIHZhciBuZXdJZHggPSAwO1xuICAgIHZhciBuZXh0T2xkRmliZXIgPSBudWxsO1xuXG4gICAgZm9yICg7IG9sZEZpYmVyICE9PSBudWxsICYmIG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgIGlmIChvbGRGaWJlci5pbmRleCA+IG5ld0lkeCkge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKTtcblxuICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgYnJlYWtzIG9uIGVtcHR5IHNsb3RzIGxpa2UgbnVsbCBjaGlsZHJlbi4gVGhhdCdzXG4gICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgIC8vIGJvb2xlYW4sIHVuZGVmaW5lZCwgZXRjLlxuICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGNoaWxkLlxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERlZmVyIHNpYmxpbmdzIGlmIHdlJ3JlIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXggZm9yIHRoaXMgc2xvdC5cbiAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgIC8vIHdpdGggdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cblxuICAgIGlmIChuZXdJZHggPT09IG5ld0NoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBuZXcgY2hpbGRyZW4uIFdlIGNhbiBkZWxldGUgdGhlIHJlc3QuXG4gICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBtb3JlIGV4aXN0aW5nIGNoaWxkcmVuIHdlIGNhbiBjaG9vc2UgYSBmYXN0IHBhdGhcbiAgICAgIC8vIHNpbmNlIHRoZSByZXN0IHdpbGwgYWxsIGJlIGluc2VydGlvbnMuXG4gICAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgICB2YXIgX25ld0ZpYmVyID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKTtcblxuICAgICAgICBpZiAoX25ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfSAvLyBBZGQgYWxsIGNoaWxkcmVuIHRvIGEga2V5IG1hcCBmb3IgcXVpY2sgbG9va3Vwcy5cblxuXG4gICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpOyAvLyBLZWVwIHNjYW5uaW5nIGFuZCB1c2UgdGhlIG1hcCB0byByZXN0b3JlIGRlbGV0ZWQgaXRlbXMgYXMgbW92ZXMuXG5cbiAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgdmFyIF9uZXdGaWJlcjIgPSB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKTtcblxuICAgICAgaWYgKF9uZXdGaWJlcjIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoX25ld0ZpYmVyMi5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuZXcgZmliZXIgaXMgYSB3b3JrIGluIHByb2dyZXNzLCBidXQgaWYgdGhlcmUgZXhpc3RzIGFcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgIC8vIGxpc3QuXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShfbmV3RmliZXIyLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IF9uZXdGaWJlcjIua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXIyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgZXhpc3RpbmdDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkcmVuSXRlcmFibGUsIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyByZWNvbmNpbGVDaGlsZHJlbkFycmF5KCksXG4gICAgLy8gYnV0IHVzaW5nIHRoZSBpdGVyYXRvciBpbnN0ZWFkLlxuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgIGlmICghKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJBbiBvYmplY3QgaXMgbm90IGFuIGl0ZXJhYmxlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCByZW5kZXJpbmcgR2VuZXJhdG9ycyBiZWNhdXNlIGl0J3MgYSBtdXRhdGlvbi5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyOTk1XG4gICAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyAkRmxvd0ZpeE1lIEZsb3cgZG9lc24ndCBrbm93IGFib3V0IHRvU3RyaW5nVGFnXG4gICAgICBuZXdDaGlsZHJlbkl0ZXJhYmxlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdHZW5lcmF0b3InKSB7XG4gICAgICAgIGlmICghZGlkV2FybkFib3V0R2VuZXJhdG9ycykge1xuICAgICAgICAgIGVycm9yKCdVc2luZyBHZW5lcmF0b3JzIGFzIGNoaWxkcmVuIGlzIHVuc3VwcG9ydGVkIGFuZCB3aWxsIGxpa2VseSB5aWVsZCAnICsgJ3VuZXhwZWN0ZWQgcmVzdWx0cyBiZWNhdXNlIGVudW1lcmF0aW5nIGEgZ2VuZXJhdG9yIG11dGF0ZXMgaXQuICcgKyAnWW91IG1heSBjb252ZXJ0IGl0IHRvIGFuIGFycmF5IHdpdGggYEFycmF5LmZyb20oKWAgb3IgdGhlICcgKyAnYFsuLi5zcHJlYWRdYCBvcGVyYXRvciBiZWZvcmUgcmVuZGVyaW5nLiBLZWVwIGluIG1pbmQgJyArICd5b3UgbWlnaHQgbmVlZCB0byBwb2x5ZmlsbCB0aGVzZSBmZWF0dXJlcyBmb3Igb2xkZXIgYnJvd3NlcnMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gdHJ1ZTtcbiAgICAgIH0gLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG5cblxuICAgICAgaWYgKG5ld0NoaWxkcmVuSXRlcmFibGUuZW50cmllcyA9PT0gaXRlcmF0b3JGbikge1xuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1hcHMpIHtcbiAgICAgICAgICBlcnJvcignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgIH0gLy8gRmlyc3QsIHZhbGlkYXRlIGtleXMuXG4gICAgICAvLyBXZSdsbCBnZXQgYSBkaWZmZXJlbnQgaXRlcmF0b3IgbGF0ZXIgZm9yIHRoZSBtYWluIHBhc3MuXG5cblxuICAgICAgdmFyIF9uZXdDaGlsZHJlbiA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgICAgaWYgKF9uZXdDaGlsZHJlbikge1xuICAgICAgICB2YXIga25vd25LZXlzID0gbnVsbDtcblxuICAgICAgICB2YXIgX3N0ZXAgPSBfbmV3Q2hpbGRyZW4ubmV4dCgpO1xuXG4gICAgICAgIGZvciAoOyAhX3N0ZXAuZG9uZTsgX3N0ZXAgPSBfbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAga25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmV3Q2hpbGRyZW4gPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICBpZiAoIShuZXdDaGlsZHJlbiAhPSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJBbiBpdGVyYWJsZSBvYmplY3QgcHJvdmlkZWQgbm8gaXRlcmF0b3IuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzTmV3RmliZXIgPSBudWxsO1xuICAgIHZhciBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgIHZhciBuZXdJZHggPSAwO1xuICAgIHZhciBuZXh0T2xkRmliZXIgPSBudWxsO1xuICAgIHZhciBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpO1xuXG4gICAgZm9yICg7IG9sZEZpYmVyICE9PSBudWxsICYmICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICBpZiAob2xkRmliZXIuaW5kZXggPiBuZXdJZHgpIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXI7XG4gICAgICAgIG9sZEZpYmVyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgIGlmIChuZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGJyZWFrcyBvbiBlbXB0eSBzbG90cyBsaWtlIG51bGwgY2hpbGRyZW4uIFRoYXQnc1xuICAgICAgICAvLyB1bmZvcnR1bmF0ZSBiZWNhdXNlIGl0IHRyaWdnZXJzIHRoZSBzbG93IHBhdGggYWxsIHRoZSB0aW1lLiBXZSBuZWVkXG4gICAgICAgIC8vIGEgYmV0dGVyIHdheSB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIHRoaXMgd2FzIGEgbWlzcyBvciBudWxsLFxuICAgICAgICAvLyBib29sZWFuLCB1bmRlZmluZWQsIGV0Yy5cbiAgICAgICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgaWYgKG9sZEZpYmVyICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIHNsb3QsIGJ1dCB3ZSBkaWRuJ3QgcmV1c2UgdGhlIGV4aXN0aW5nIGZpYmVyLCBzbyB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBjaGlsZC5cbiAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBEZWZlciBzaWJsaW5ncyBpZiB3ZSdyZSBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IGZvciB0aGlzIHNsb3QuXG4gICAgICAgIC8vIEkuZS4gaWYgd2UgaGFkIG51bGwgdmFsdWVzIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIGRlZmVyIHRoaXNcbiAgICAgICAgLy8gZm9yIGVhY2ggbnVsbCB2YWx1ZS4gSG93ZXZlciwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgdXBkYXRlU2xvdFxuICAgICAgICAvLyB3aXRoIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICB9XG5cbiAgICBpZiAoc3RlcC5kb25lKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgICB2YXIgX25ld0ZpYmVyMyA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKF9uZXdGaWJlcjMgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMywgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXIzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyMztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfSAvLyBBZGQgYWxsIGNoaWxkcmVuIHRvIGEga2V5IG1hcCBmb3IgcXVpY2sgbG9va3Vwcy5cblxuXG4gICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpOyAvLyBLZWVwIHNjYW5uaW5nIGFuZCB1c2UgdGhlIG1hcCB0byByZXN0b3JlIGRlbGV0ZWQgaXRlbXMgYXMgbW92ZXMuXG5cbiAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgIHZhciBfbmV3RmliZXI0ID0gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgIGlmIChfbmV3RmliZXI0ICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgaWYgKF9uZXdGaWJlcjQuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmV3IGZpYmVyIGlzIGEgd29yayBpbiBwcm9ncmVzcywgYnV0IGlmIHRoZXJlIGV4aXN0cyBhXG4gICAgICAgICAgICAvLyBjdXJyZW50LCB0aGF0IG1lYW5zIHRoYXQgd2UgcmV1c2VkIHRoZSBmaWJlci4gV2UgbmVlZCB0byBkZWxldGVcbiAgICAgICAgICAgIC8vIGl0IGZyb20gdGhlIGNoaWxkIGxpc3Qgc28gdGhhdCB3ZSBkb24ndCBhZGQgaXQgdG8gdGhlIGRlbGV0aW9uXG4gICAgICAgICAgICAvLyBsaXN0LlxuICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5kZWxldGUoX25ld0ZpYmVyNC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBfbmV3RmliZXI0LmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXI0LCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXI0O1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIEFueSBleGlzdGluZyBjaGlsZHJlbiB0aGF0IHdlcmVuJ3QgY29uc3VtZWQgYWJvdmUgd2VyZSBkZWxldGVkLiBXZSBuZWVkXG4gICAgICAvLyB0byBhZGQgdGhlbSB0byB0aGUgZGVsZXRpb24gbGlzdC5cbiAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgdGV4dENvbnRlbnQsIGxhbmVzKSB7XG4gICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIGNoZWNrIGZvciBrZXlzIG9uIHRleHQgbm9kZXMgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhXG4gICAgLy8gd2F5IHRvIGRlZmluZSB0aGVtLlxuICAgIGlmIChjdXJyZW50Rmlyc3RDaGlsZCAhPT0gbnVsbCAmJiBjdXJyZW50Rmlyc3RDaGlsZC50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZXhpc3Rpbmcgbm9kZSBzbyBsZXQncyBqdXN0IHVwZGF0ZSBpdCBhbmQgZGVsZXRlXG4gICAgICAvLyB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nKTtcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnRGaXJzdENoaWxkLCB0ZXh0Q29udGVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9IC8vIFRoZSBleGlzdGluZyBmaXJzdCBjaGlsZCBpcyBub3QgYSB0ZXh0IG5vZGUgc28gd2UgbmVlZCB0byBjcmVhdGUgb25lXG4gICAgLy8gYW5kIGRlbGV0ZSB0aGUgZXhpc3Rpbmcgb25lcy5cblxuXG4gICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQodGV4dENvbnRlbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIGVsZW1lbnQsIGxhbmVzKSB7XG4gICAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICAgIHZhciBjaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAvLyBUT0RPOiBJZiBrZXkgPT09IG51bGwgYW5kIGNoaWxkLmtleSA9PT0gbnVsbCwgdGhlbiB0aGlzIG9ubHkgYXBwbGllcyB0b1xuICAgICAgLy8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICBpZiAoY2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChjaGlsZC50YWcpIHtcbiAgICAgICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBlbGVtZW50LnByb3BzLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIEJsb2NrOlxuXG4gICAgICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSBmYWxsdGhyb3VnaCBoZXJlIGlmIGVuYWJsZUJsb2Nrc0FQSSBpcyBub3Qgb24uXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lZCBuby1mYWxsdGhyb3VnaFxuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGNoaWxkLmVsZW1lbnRUeXBlID09PSBlbGVtZW50LnR5cGUgfHwgKCAvLyBLZWVwIHRoaXMgY2hlY2sgaW5saW5lIHNvIGl0IG9ubHkgcnVucyBvbiB0aGUgZmFsc2UgcGF0aDpcbiAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjaGlsZCwgZWxlbWVudCkgKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcblxuICAgICAgICAgICAgICAgIHZhciBfZXhpc3RpbmczID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQucHJvcHMpO1xuXG4gICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGNoaWxkLCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBfZXhpc3RpbmczLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgICAgICAgICBfZXhpc3RpbmczLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9leGlzdGluZzM7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBEaWRuJ3QgbWF0Y2guXG5cblxuICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnQucHJvcHMuY2hpbGRyZW4sIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBlbGVtZW50LmtleSk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfY3JlYXRlZDQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgX2NyZWF0ZWQ0LnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIGVsZW1lbnQpO1xuICAgICAgX2NyZWF0ZWQ0LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIF9jcmVhdGVkNDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgdmFyIGtleSA9IHBvcnRhbC5rZXk7XG4gICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoY2hpbGQudGFnID09PSBIb3N0UG9ydGFsICYmIGNoaWxkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvID09PSBwb3J0YWwuY29udGFpbmVySW5mbyAmJiBjaGlsZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gPT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH0gLy8gVGhpcyBBUEkgd2lsbCB0YWcgdGhlIGNoaWxkcmVuIHdpdGggdGhlIHNpZGUtZWZmZWN0IG9mIHRoZSByZWNvbmNpbGlhdGlvblxuICAvLyBpdHNlbGYuIFRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGUgc2lkZS1lZmZlY3QgbGlzdCBhcyB3ZSBwYXNzIHRocm91Z2ggdGhlXG4gIC8vIGNoaWxkcmVuIGFuZCB0aGUgcGFyZW50LlxuXG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRGaWJlcnMocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZWN1cnNpdmUuXG4gICAgLy8gSWYgdGhlIHRvcCBsZXZlbCBpdGVtIGlzIGFuIGFycmF5LCB3ZSB0cmVhdCBpdCBhcyBhIHNldCBvZiBjaGlsZHJlbixcbiAgICAvLyBub3QgYXMgYSBmcmFnbWVudC4gTmVzdGVkIGFycmF5cyBvbiB0aGUgb3RoZXIgaGFuZCB3aWxsIGJlIHRyZWF0ZWQgYXNcbiAgICAvLyBmcmFnbWVudCBub2Rlcy4gUmVjdXJzaW9uIGhhcHBlbnMgYXQgdGhlIG5vcm1hbCBmbG93LlxuICAgIC8vIEhhbmRsZSB0b3AgbGV2ZWwgdW5rZXllZCBmcmFnbWVudHMgYXMgaWYgdGhleSB3ZXJlIGFycmF5cy5cbiAgICAvLyBUaGlzIGxlYWRzIHRvIGFuIGFtYmlndWl0eSBiZXR3ZWVuIDw+e1suLi5dfTwvPiBhbmQgPD4uLi48Lz4uXG4gICAgLy8gV2UgdHJlYXQgdGhlIGFtYmlndW91cyBjYXNlcyBhYm92ZSB0aGUgc2FtZS5cbiAgICB2YXIgaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCA9IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwgJiYgbmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSAmJiBuZXdDaGlsZC5rZXkgPT09IG51bGw7XG5cbiAgICBpZiAoaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCkge1xuICAgICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbjtcbiAgICB9IC8vIEhhbmRsZSBvYmplY3QgdHlwZXNcblxuXG4gICAgdmFyIGlzT2JqZWN0ID0gdHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbDtcblxuICAgIGlmIChpc09iamVjdCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSk7XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpKTtcblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgJycgKyBuZXdDaGlsZCwgbGFuZXMpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmIChnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCkge1xuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICd1bmRlZmluZWQnICYmICFpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50KSB7XG4gICAgICAvLyBJZiB0aGUgbmV3IGNoaWxkIGlzIHVuZGVmaW5lZCwgYW5kIHRoZSByZXR1cm4gZmliZXIgaXMgYSBjb21wb3NpdGVcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhyb3cgYW4gZXJyb3IuIElmIEZpYmVyIHJldHVybiB0eXBlcyBhcmUgZGlzYWJsZWQsXG4gICAgICAvLyB3ZSBhbHJlYWR5IHRocmV3IGFib3ZlLlxuICAgICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucmVuZGVyLl9pc01vY2tGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIC8vIFdlIGFsbG93IGF1dG8tbW9ja3MgdG8gcHJvY2VlZCBhcyBpZiB0aGV5J3JlIHJldHVybmluZyBudWxsLlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBjYXNlLCB3aGljaCBoYW5kbGVzIGJvdGhcbiAgICAgICAgLy8gZnVuY3Rpb25zIGFuZCBjbGFzc2VzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZWQgbm8tZmFsbHRocm91Z2hcblxuICAgICAgICBjYXNlIEJsb2NrOlxuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciggKGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpICsgXCIoLi4uKTogTm90aGluZyB3YXMgcmV0dXJuZWQgZnJvbSByZW5kZXIuIFRoaXMgdXN1YWxseSBtZWFucyBhIHJldHVybiBzdGF0ZW1lbnQgaXMgbWlzc2luZy4gT3IsIHRvIHJlbmRlciBub3RoaW5nLCByZXR1cm4gbnVsbC5cIiApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gUmVtYWluaW5nIGNhc2VzIGFyZSBhbGwgdHJlYXRlZCBhcyBlbXB0eS5cblxuXG4gICAgcmV0dXJuIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gIH1cblxuICByZXR1cm4gcmVjb25jaWxlQ2hpbGRGaWJlcnM7XG59XG5cbnZhciByZWNvbmNpbGVDaGlsZEZpYmVycyA9IENoaWxkUmVjb25jaWxlcih0cnVlKTtcbnZhciBtb3VudENoaWxkRmliZXJzID0gQ2hpbGRSZWNvbmNpbGVyKGZhbHNlKTtcbmZ1bmN0aW9uIGNsb25lQ2hpbGRGaWJlcnMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgaWYgKCEoY3VycmVudCA9PT0gbnVsbCB8fCB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gY3VycmVudC5jaGlsZCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZXN1bWluZyB3b3JrIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXCIgKTtcbiAgICB9XG4gIH1cblxuICBpZiAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY3VycmVudENoaWxkID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgY3VycmVudENoaWxkLnBlbmRpbmdQcm9wcyk7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG4gIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuXG4gIHdoaWxlIChjdXJyZW50Q2hpbGQuc2libGluZyAhPT0gbnVsbCkge1xuICAgIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnRDaGlsZC5zaWJsaW5nO1xuICAgIG5ld0NoaWxkID0gbmV3Q2hpbGQuc2libGluZyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgY3VycmVudENoaWxkLnBlbmRpbmdQcm9wcyk7XG4gICAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIH1cblxuICBuZXdDaGlsZC5zaWJsaW5nID0gbnVsbDtcbn0gLy8gUmVzZXQgYSB3b3JrSW5Qcm9ncmVzcyBjaGlsZCBzZXQgdG8gcHJlcGFyZSBpdCBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbGFuZXMpIHtcbiAgdmFyIGNoaWxkID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgcmVzZXRXb3JrSW5Qcm9ncmVzcyhjaGlsZCwgbGFuZXMpO1xuICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgfVxufVxuXG52YXIgTk9fQ09OVEVYVCA9IHt9O1xudmFyIGNvbnRleHRTdGFja0N1cnNvciQxID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xudmFyIGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xudmFyIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xuXG5mdW5jdGlvbiByZXF1aXJlZENvbnRleHQoYykge1xuICBpZiAoIShjICE9PSBOT19DT05URVhUKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGhvc3QgY29udGV4dCB0byBleGlzdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBnZXRSb290SG9zdENvbnRhaW5lcigpIHtcbiAgdmFyIHJvb3RJbnN0YW5jZSA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgcmV0dXJuIHJvb3RJbnN0YW5jZTtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RDb250YWluZXIoZmliZXIsIG5leHRSb290SW5zdGFuY2UpIHtcbiAgLy8gUHVzaCBjdXJyZW50IHJvb3QgaW5zdGFuY2Ugb250byB0aGUgc3RhY2s7XG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHJlc2V0IHJvb3Qgd2hlbiBwb3J0YWxzIGFyZSBwb3BwZWQuXG4gIHB1c2gocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIG5leHRSb290SW5zdGFuY2UsIGZpYmVyKTsgLy8gVHJhY2sgdGhlIGNvbnRleHQgYW5kIHRoZSBGaWJlciB0aGF0IHByb3ZpZGVkIGl0LlxuICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG5cbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTsgLy8gRmluYWxseSwgd2UgbmVlZCB0byBwdXNoIHRoZSBob3N0IGNvbnRleHQgdG8gdGhlIHN0YWNrLlxuICAvLyBIb3dldmVyLCB3ZSBjYW4ndCBqdXN0IGNhbGwgZ2V0Um9vdEhvc3RDb250ZXh0KCkgYW5kIHB1c2ggaXQgYmVjYXVzZVxuICAvLyB3ZSdkIGhhdmUgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGVudHJpZXMgb24gdGhlIHN0YWNrIGRlcGVuZGluZyBvblxuICAvLyB3aGV0aGVyIGdldFJvb3RIb3N0Q29udGV4dCgpIHRocm93cyBzb21ld2hlcmUgaW4gcmVuZGVyZXIgY29kZSBvciBub3QuXG4gIC8vIFNvIHdlIHB1c2ggYW4gZW1wdHkgdmFsdWUgZmlyc3QuIFRoaXMgbGV0cyB1cyBzYWZlbHkgdW53aW5kIG9uIGVycm9ycy5cblxuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBOT19DT05URVhULCBmaWJlcik7XG4gIHZhciBuZXh0Um9vdENvbnRleHQgPSBnZXRSb290SG9zdENvbnRleHQobmV4dFJvb3RJbnN0YW5jZSk7IC8vIE5vdyB0aGF0IHdlIGtub3cgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IHRocm93LCByZXBsYWNlIGl0LlxuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBuZXh0Um9vdENvbnRleHQsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcG9wSG9zdENvbnRhaW5lcihmaWJlcikge1xuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIHBvcChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBnZXRIb3N0Q29udGV4dCgpIHtcbiAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCk7XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdENvbnRleHQoZmliZXIpIHtcbiAgdmFyIHJvb3RJbnN0YW5jZSA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCk7XG4gIHZhciBuZXh0Q29udGV4dCA9IGdldENoaWxkSG9zdENvbnRleHQoY29udGV4dCwgZmliZXIudHlwZSk7IC8vIERvbid0IHB1c2ggdGhpcyBGaWJlcidzIGNvbnRleHQgdW5sZXNzIGl0J3MgdW5pcXVlLlxuXG4gIGlmIChjb250ZXh0ID09PSBuZXh0Q29udGV4dCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBwb3Agb25seSBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cblxuXG4gIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG5leHRDb250ZXh0LCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIC8vIERvIG5vdCBwb3AgdW5sZXNzIHRoaXMgRmliZXIgcHJvdmlkZWQgdGhlIGN1cnJlbnQgY29udGV4dC5cbiAgLy8gcHVzaEhvc3RDb250ZXh0KCkgb25seSBwdXNoZXMgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG4gIGlmIChjb250ZXh0RmliZXJTdGFja0N1cnNvci5jdXJyZW50ICE9PSBmaWJlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxudmFyIERlZmF1bHRTdXNwZW5zZUNvbnRleHQgPSAwOyAvLyBUaGUgU3VzcGVuc2UgQ29udGV4dCBpcyBzcGxpdCBpbnRvIHR3byBwYXJ0cy4gVGhlIGxvd2VyIGJpdHMgaXNcbi8vIGluaGVyaXRlZCBkZWVwbHkgZG93biB0aGUgc3VidHJlZS4gVGhlIHVwcGVyIGJpdHMgb25seSBhZmZlY3Rcbi8vIHRoaXMgaW1tZWRpYXRlIHN1c3BlbnNlIGJvdW5kYXJ5IGFuZCBnZXRzIHJlc2V0IGVhY2ggbmV3XG4vLyBib3VuZGFyeSBvciBzdXNwZW5zZSBsaXN0LlxuXG52YXIgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgPSAxOyAvLyBTdWJ0cmVlIEZsYWdzOlxuLy8gSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0IGluZGljYXRlcyB0aGF0IG9uZSBvZiBvdXIgcGFyZW50IFN1c3BlbnNlXG4vLyBib3VuZGFyaWVzIGlzIG5vdCBjdXJyZW50bHkgc2hvd2luZyB2aXNpYmxlIG1haW4gY29udGVudC5cbi8vIEVpdGhlciBiZWNhdXNlIGl0IGlzIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIG9yIGlzIG5vdCBtb3VudGVkIGF0IGFsbC5cbi8vIFdlIGNhbiB1c2UgdGhpcyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgZGVzaXJhYmxlIHRvIHRyaWdnZXIgYSBmYWxsYmFjayBhdFxuLy8gdGhlIHBhcmVudC4gSWYgbm90LCB0aGVuIHdlIG1pZ2h0IG5lZWQgdG8gdHJpZ2dlciB1bmRlc2lyYWJsZSBib3VuZGFyaWVzXG4vLyBhbmQvb3Igc3VzcGVuZCB0aGUgY29tbWl0IHRvIGF2b2lkIGhpZGluZyB0aGUgcGFyZW50IGNvbnRlbnQuXG5cbnZhciBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQgPSAxOyAvLyBTaGFsbG93IEZsYWdzOlxuLy8gRm9yY2VTdXNwZW5zZUZhbGxiYWNrIGNhbiBiZSB1c2VkIGJ5IFN1c3BlbnNlTGlzdCB0byBmb3JjZSBuZXdseSBhZGRlZFxuLy8gaXRlbXMgaW50byB0aGVpciBmYWxsYmFjayBzdGF0ZSBkdXJpbmcgb25lIG9mIHRoZSByZW5kZXIgcGFzc2VzLlxuXG52YXIgRm9yY2VTdXNwZW5zZUZhbGxiYWNrID0gMjtcbnZhciBzdXNwZW5zZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKERlZmF1bHRTdXNwZW5zZUNvbnRleHQpO1xuZnVuY3Rpb24gaGFzU3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIGZsYWcpIHtcbiAgcmV0dXJuIChwYXJlbnRDb250ZXh0ICYgZmxhZykgIT09IDA7XG59XG5mdW5jdGlvbiBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2s7XG59XG5mdW5jdGlvbiBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIHNoYWxsb3dDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgfCBzaGFsbG93Q29udGV4dDtcbn1cbmZ1bmN0aW9uIGFkZFN1YnRyZWVTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgc3VidHJlZUNvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgfCBzdWJ0cmVlQ29udGV4dDtcbn1cbmZ1bmN0aW9uIHB1c2hTdXNwZW5zZUNvbnRleHQoZmliZXIsIG5ld0NvbnRleHQpIHtcbiAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBuZXdDb250ZXh0LCBmaWJlcik7XG59XG5mdW5jdGlvbiBwb3BTdXNwZW5zZUNvbnRleHQoZmliZXIpIHtcbiAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQ2FwdHVyZVN1c3BlbnNlKHdvcmtJblByb2dyZXNzLCBoYXNJbnZpc2libGVQYXJlbnQpIHtcbiAgLy8gSWYgaXQgd2FzIHRoZSBwcmltYXJ5IGNoaWxkcmVuIHRoYXQganVzdCBzdXNwZW5kZWQsIGNhcHR1cmUgYW5kIHJlbmRlciB0aGVcbiAgLy8gZmFsbGJhY2suIE90aGVyd2lzZSwgZG9uJ3QgY2FwdHVyZSBhbmQgYnViYmxlIHRvIHRoZSBuZXh0IGJvdW5kYXJ5LlxuICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV4dFN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5leHRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGRlaHlkcmF0ZWQgYm91bmRhcnkgYWx3YXlzIGNhcHR1cmVzLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wczsgLy8gSW4gb3JkZXIgdG8gY2FwdHVyZSwgdGhlIFN1c3BlbnNlIGNvbXBvbmVudCBtdXN0IGhhdmUgYSBmYWxsYmFjayBwcm9wLlxuXG4gIGlmIChwcm9wcy5mYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFJlZ3VsYXIgYm91bmRhcmllcyBhbHdheXMgY2FwdHVyZS5cblxuXG4gIGlmIChwcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIElmIGl0J3MgYSBib3VuZGFyeSB3ZSBzaG91bGQgYXZvaWQsIHRoZW4gd2UgcHJlZmVyIHRvIGJ1YmJsZSB1cCB0byB0aGVcbiAgLy8gcGFyZW50IGJvdW5kYXJ5IGlmIGl0IGlzIGN1cnJlbnRseSBpbnZpc2libGUuXG5cblxuICBpZiAoaGFzSW52aXNpYmxlUGFyZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIHRoZSBwYXJlbnQgaXMgbm90IGFibGUgdG8gaGFuZGxlIGl0LCB3ZSBtdXN0IGhhbmRsZSBpdC5cblxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZmluZEZpcnN0U3VzcGVuZGVkKHJvdykge1xuICB2YXIgbm9kZSA9IHJvdztcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IG5vZGUubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBkZWh5ZHJhdGVkID0gc3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICBpZiAoZGVoeWRyYXRlZCA9PT0gbnVsbCB8fCBpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nKGRlaHlkcmF0ZWQpIHx8IGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKGRlaHlkcmF0ZWQpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQgJiYgLy8gcmV2ZWFsT3JkZXIgdW5kZWZpbmVkIGNhbid0IGJlIHRydXN0ZWQgYmVjYXVzZSBpdCBkb24ndFxuICAgIC8vIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBpdCBzdXNwZW5kZWQgb3Igbm90LlxuICAgIG5vZGUubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZGlkU3VzcGVuZCA9IChub2RlLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICAgIGlmIChkaWRTdXNwZW5kKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gcm93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHJvdykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBOb0ZsYWdzJDEgPVxuLyogICovXG4wOyAvLyBSZXByZXNlbnRzIHdoZXRoZXIgZWZmZWN0IHNob3VsZCBmaXJlLlxuXG52YXIgSGFzRWZmZWN0ID1cbi8qICovXG4xOyAvLyBSZXByZXNlbnRzIHRoZSBwaGFzZSBpbiB3aGljaCB0aGUgZWZmZWN0IChub3QgdGhlIGNsZWFuLXVwKSBmaXJlcy5cblxudmFyIExheW91dCA9XG4vKiAgICAqL1xuMjtcbnZhciBQYXNzaXZlJDEgPVxuLyogICAqL1xuNDtcblxuLy8gVGhpcyBtYXkgaGF2ZSBiZWVuIGFuIGluc2VydGlvbiBvciBhIGh5ZHJhdGlvbi5cblxudmFyIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbDtcbnZhciBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbDtcbnZhciBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBlbnRlckh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG5cbiAgdmFyIHBhcmVudEluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChwYXJlbnRJbnN0YW5jZSk7XG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShyZXR1cm5GaWJlciwgaW5zdGFuY2UpIHtcbiAge1xuICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICBkaWROb3RIeWRyYXRlQ29udGFpbmVySW5zdGFuY2UocmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sIGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgZGlkTm90SHlkcmF0ZUluc3RhbmNlKHJldHVybkZpYmVyLnR5cGUsIHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHMsIHJldHVybkZpYmVyLnN0YXRlTm9kZSwgaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGNyZWF0ZUZpYmVyRnJvbUhvc3RJbnN0YW5jZUZvckRlbGV0aW9uKCk7XG4gIGNoaWxkVG9EZWxldGUuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gIGNoaWxkVG9EZWxldGUucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gIGNoaWxkVG9EZWxldGUuZmxhZ3MgPSBEZWxldGlvbjsgLy8gVGhpcyBtaWdodCBzZWVtIGxpa2UgaXQgYmVsb25ncyBvbiBwcm9ncmVzc2VkRmlyc3REZWxldGlvbi4gSG93ZXZlcixcbiAgLy8gdGhlc2UgY2hpbGRyZW4gYXJlIG5vdCBwYXJ0IG9mIHRoZSByZWNvbmNpbGlhdGlvbiBsaXN0IG9mIGNoaWxkcmVuLlxuICAvLyBFdmVuIGlmIHdlIGFib3J0IGFuZCByZXJlY29uY2lsZSB0aGUgY2hpbGRyZW4sIHRoYXQgd2lsbCB0cnkgdG8gaHlkcmF0ZVxuICAvLyBhZ2FpbiBhbmQgdGhlIG5vZGVzIGFyZSBzdGlsbCBpbiB0aGUgaG9zdCB0cmVlIHNvIHRoZXNlIHdpbGwgYmVcbiAgLy8gcmVjcmVhdGVkLlxuXG4gIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UocmV0dXJuRmliZXIsIGZpYmVyKSB7XG4gIGZpYmVyLmZsYWdzID0gZmliZXIuZmxhZ3MgJiB+SHlkcmF0aW5nIHwgUGxhY2VtZW50O1xuXG4gIHtcbiAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBwYXJlbnRDb250YWluZXIgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgIHZhciB0eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgICAgICAgdmFyIHByb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lckluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdHlwZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB2YXIgdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHBhcmVudFR5cGUgPSByZXR1cm5GaWJlci50eXBlO1xuICAgICAgICAgIHZhciBwYXJlbnRQcm9wcyA9IHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgdmFyIHBhcmVudEluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgdmFyIF90eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgICAgICAgdmFyIF9wcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIF90eXBlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgICAgIHZhciBfdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBfdGV4dCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZVN1c3BlbnNlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkge1xuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICB2YXIgcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGNhbkh5ZHJhdGVJbnN0YW5jZShuZXh0SW5zdGFuY2UsIHR5cGUpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IGluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHRleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciB0ZXh0SW5zdGFuY2UgPSBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKG5leHRJbnN0YW5jZSwgdGV4dCk7XG5cbiAgICAgICAgaWYgKHRleHRJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IHRleHRJbnN0YW5jZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZShmaWJlcikge1xuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5leHRJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG5cbiAgaWYgKCFuZXh0SW5zdGFuY2UpIHtcbiAgICAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuICAgIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpYmVyKTtcbiAgICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UgPSBuZXh0SW5zdGFuY2U7XG5cbiAgaWYgKCF0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpKSB7XG4gICAgLy8gSWYgd2UgY2FuJ3QgaHlkcmF0ZSB0aGlzIGluc3RhbmNlIGxldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgLy8gV2UgdXNlIHRoaXMgYXMgYSBoZXVyaXN0aWMuIEl0J3MgYmFzZWQgb24gaW50dWl0aW9uIGFuZCBub3QgZGF0YSBzbyBpdFxuICAgIC8vIG1pZ2h0IGJlIGZsYXdlZCBvciB1bm5lY2Vzc2FyeS5cbiAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSk7XG5cbiAgICBpZiAoIW5leHRJbnN0YW5jZSB8fCAhdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSkge1xuICAgICAgLy8gTm90aGluZyB0byBoeWRyYXRlLiBNYWtlIGl0IGFuIGluc2VydGlvbi5cbiAgICAgIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpYmVyKTtcbiAgICAgIGlzSHlkcmF0aW5nID0gZmFsc2U7XG4gICAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2UgbWF0Y2hlZCB0aGUgbmV4dCBvbmUsIHdlJ2xsIG5vdyBhc3N1bWUgdGhhdCB0aGUgZmlyc3Qgb25lIHdhc1xuICAgIC8vIHN1cGVyZmx1b3VzIGFuZCB3ZSdsbCBkZWxldGUgaXQuIFNpbmNlIHdlIGNhbid0IGVhZ2VybHkgZGVsZXRlIGl0XG4gICAgLy8gd2UnbGwgaGF2ZSB0byBzY2hlZHVsZSBhIGRlbGV0aW9uLiBUbyBkbyB0aGF0LCB0aGlzIG5vZGUgbmVlZHMgYSBkdW1teVxuICAgIC8vIGZpYmVyIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuXG4gICAgZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcbiAgfVxuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChuZXh0SW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKGZpYmVyLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG5cbiAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB2YXIgdXBkYXRlUGF5bG9hZCA9IGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgZmliZXIudHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgZmliZXIpOyAvLyBUT0RPOiBUeXBlIHRoaXMgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGNvbXBvbmVudC5cblxuICBmaWJlci51cGRhdGVRdWV1ZSA9IHVwZGF0ZVBheWxvYWQ7IC8vIElmIHRoZSB1cGRhdGUgcGF5bG9hZCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIGNoYW5nZSBvciBpZiB0aGVyZVxuICAvLyBpcyBhIG5ldyByZWYgd2UgbWFyayB0aGlzIGFzIGFuIHVwZGF0ZS5cblxuICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZShmaWJlcikge1xuXG4gIHZhciB0ZXh0SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIHZhciB0ZXh0Q29udGVudCA9IGZpYmVyLm1lbW9pemVkUHJvcHM7XG4gIHZhciBzaG91bGRVcGRhdGUgPSBoeWRyYXRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQsIGZpYmVyKTtcblxuICB7XG4gICAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgcHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2UgaXMgY2FsbGVkIGluIGEgY29udGV4dCB3aGVyZSB0aGVcbiAgICAgIC8vIGh5ZHJhdGlvbiBwYXJlbnQgaXMgdGhlIHBhcmVudCBob3N0IGNvbXBvbmVudCBvZiB0aGlzIGhvc3QgdGV4dC5cbiAgICAgIHZhciByZXR1cm5GaWJlciA9IGh5ZHJhdGlvblBhcmVudEZpYmVyO1xuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50Q29udGFpbmVyID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICAgIGRpZE5vdE1hdGNoSHlkcmF0ZWRDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRUeXBlID0gcmV0dXJuRmliZXIudHlwZTtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgICAgdmFyIHBhcmVudEluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBkaWROb3RNYXRjaEh5ZHJhdGVkVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gc2tpcFBhc3REZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShmaWJlcikge1xuXG4gIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBzdXNwZW5zZVN0YXRlICE9PSBudWxsID8gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkIDogbnVsbDtcblxuICBpZiAoIXN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBoYXZlIGEgaHlkcmF0ZWQgc3VzcGVuc2UgaW5zdGFuY2UuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVyU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcikge1xuICB2YXIgcGFyZW50ID0gZmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwgJiYgcGFyZW50LnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiBwYXJlbnQudGFnICE9PSBIb3N0Um9vdCAmJiBwYXJlbnQudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cblxuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IHBhcmVudDtcbn1cblxuZnVuY3Rpb24gcG9wSHlkcmF0aW9uU3RhdGUoZmliZXIpIHtcblxuICBpZiAoZmliZXIgIT09IGh5ZHJhdGlvblBhcmVudEZpYmVyKSB7XG4gICAgLy8gV2UncmUgZGVlcGVyIHRoYW4gdGhlIGN1cnJlbnQgaHlkcmF0aW9uIGNvbnRleHQsIGluc2lkZSBhbiBpbnNlcnRlZFxuICAgIC8vIHRyZWUuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgIC8vIElmIHdlJ3JlIG5vdCBjdXJyZW50bHkgaHlkcmF0aW5nIGJ1dCB3ZSdyZSBpbiBhIGh5ZHJhdGlvbiBjb250ZXh0LCB0aGVuXG4gICAgLy8gd2Ugd2VyZSBhbiBpbnNlcnRpb24gYW5kIG5vdyBuZWVkIHRvIHBvcCB1cCByZWVudGVyIGh5ZHJhdGlvbiBvZiBvdXJcbiAgICAvLyBzaWJsaW5ncy5cbiAgICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcbiAgICBpc0h5ZHJhdGluZyA9IHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBmaWJlci50eXBlOyAvLyBJZiB3ZSBoYXZlIGFueSByZW1haW5pbmcgaHlkcmF0YWJsZSBub2Rlcywgd2UgbmVlZCB0byBkZWxldGUgdGhlbSBub3cuXG4gIC8vIFdlIG9ubHkgZG8gdGhpcyBkZWVwZXIgdGhhbiBoZWFkIGFuZCBib2R5IHNpbmNlIHRoZXkgdGVuZCB0byBoYXZlIHJhbmRvbVxuICAvLyBvdGhlciBub2RlcyBpbiB0aGVtLiBXZSBhbHNvIGlnbm9yZSBjb21wb25lbnRzIHdpdGggcHVyZSB0ZXh0IGNvbnRlbnQgaW5cbiAgLy8gc2lkZSBvZiB0aGVtLlxuICAvLyBUT0RPOiBCZXR0ZXIgaGV1cmlzdGljLlxuXG4gIGlmIChmaWJlci50YWcgIT09IEhvc3RDb21wb25lbnQgfHwgdHlwZSAhPT0gJ2hlYWQnICYmIHR5cGUgIT09ICdib2R5JyAmJiAhc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcykpIHtcbiAgICB2YXIgbmV4dEluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcblxuICAgIHdoaWxlIChuZXh0SW5zdGFuY2UpIHtcbiAgICAgIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShmaWJlciwgbmV4dEluc3RhbmNlKTtcbiAgICAgIG5leHRJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhuZXh0SW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuXG4gIGlmIChmaWJlci50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IHNraXBQYXN0RGVoeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpO1xuICB9IGVsc2Uge1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBoeWRyYXRpb25QYXJlbnRGaWJlciA/IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhmaWJlci5zdGF0ZU5vZGUpIDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXNldEh5ZHJhdGlvblN0YXRlKCkge1xuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbDtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG4gIGlzSHlkcmF0aW5nID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldElzSHlkcmF0aW5nKCkge1xuICByZXR1cm4gaXNIeWRyYXRpbmc7XG59XG5cbi8vIGFuZCBzaG91bGQgYmUgcmVzZXQgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IHJlbmRlci5cbi8vIFRoaXMgdHJhY2tzIHdoaWNoIG11dGFibGUgc291cmNlcyBuZWVkIHRvIGJlIHJlc2V0IGFmdGVyIGEgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NTb3VyY2VzID0gW107XG52YXIgcmVuZGVyZXJTaWdpbCQxO1xuXG57XG4gIC8vIFVzZWQgdG8gZGV0ZWN0IG11bHRpcGxlIHJlbmRlcmVycyB1c2luZyB0aGUgc2FtZSBtdXRhYmxlIHNvdXJjZS5cbiAgcmVuZGVyZXJTaWdpbCQxID0ge307XG59XG5cbmZ1bmN0aW9uIG1hcmtTb3VyY2VBc0RpcnR5KG11dGFibGVTb3VyY2UpIHtcbiAgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLnB1c2gobXV0YWJsZVNvdXJjZSk7XG59XG5mdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG11dGFibGVTb3VyY2UgPSB3b3JrSW5Qcm9ncmVzc1NvdXJjZXNbaV07XG5cbiAgICB7XG4gICAgICBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMubGVuZ3RoID0gMDtcbn1cbmZ1bmN0aW9uIGdldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlKSB7XG4gIHtcbiAgICByZXR1cm4gbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UsIHZlcnNpb24pIHtcbiAge1xuICAgIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnkgPSB2ZXJzaW9uO1xuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLnB1c2gobXV0YWJsZVNvdXJjZSk7XG59XG5mdW5jdGlvbiB3YXJuQWJvdXRNdWx0aXBsZVJlbmRlcmVyc0RFVihtdXRhYmxlU291cmNlKSB7XG4gIHtcbiAgICB7XG4gICAgICBpZiAobXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIG11dGFibGVTb3VyY2UuX2N1cnJlbnRQcmltYXJ5UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsJDE7XG4gICAgICB9IGVsc2UgaWYgKG11dGFibGVTb3VyY2UuX2N1cnJlbnRQcmltYXJ5UmVuZGVyZXIgIT09IHJlbmRlcmVyU2lnaWwkMSkge1xuICAgICAgICBlcnJvcignRGV0ZWN0ZWQgbXVsdGlwbGUgcmVuZGVyZXJzIGNvbmN1cnJlbnRseSByZW5kZXJpbmcgdGhlICcgKyAnc2FtZSBtdXRhYmxlIHNvdXJjZS4gVGhpcyBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIEVhZ2VyIHJlYWRzIHRoZSB2ZXJzaW9uIG9mIGEgbXV0YWJsZSBzb3VyY2UgYW5kIHN0b3JlcyBpdCBvbiB0aGUgcm9vdC5cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO1xudmFyIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyO1xuXG57XG4gIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXIgPSB7fTtcbiAgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xufVxuXG4vLyBUaGVzZSBhcmUgc2V0IHJpZ2h0IGJlZm9yZSBjYWxsaW5nIHRoZSBjb21wb25lbnQuXG52YXIgcmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci4gSSd2ZSBuYW1lZCBpdCBkaWZmZXJlbnRseSB0byBkaXN0aW5ndWlzaCBpdCBmcm9tXG4vLyB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7IC8vIEhvb2tzIGFyZSBzdG9yZWQgYXMgYSBsaW5rZWQgbGlzdCBvbiB0aGUgZmliZXIncyBtZW1vaXplZFN0YXRlIGZpZWxkLiBUaGVcbi8vIGN1cnJlbnQgaG9vayBsaXN0IGlzIHRoZSBsaXN0IHRoYXQgYmVsb25ncyB0byB0aGUgY3VycmVudCBmaWJlci4gVGhlXG4vLyB3b3JrLWluLXByb2dyZXNzIGhvb2sgbGlzdCBpcyBhIG5ldyBsaXN0IHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG5cbnZhciBjdXJyZW50SG9vayA9IG51bGw7XG52YXIgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDsgLy8gV2hldGhlciBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuIFRoaXNcbi8vIGRvZXMgbm90IGdldCByZXNldCBpZiB3ZSBkbyBhbm90aGVyIHJlbmRlciBwYXNzOyBvbmx5IHdoZW4gd2UncmUgY29tcGxldGVseVxuLy8gZmluaXNoZWQgZXZhbHVhdGluZyB0aGlzIGNvbXBvbmVudC4gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gd2Uga25vd1xuLy8gd2hldGhlciB3ZSBuZWVkIHRvIGNsZWFyIHJlbmRlciBwaGFzZSB1cGRhdGVzIGFmdGVyIGEgdGhyb3cuXG5cbnZhciBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7IC8vIFdoZXJlIGFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIG9ubHkgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciBwYXNzLiBUaGlzXG4vLyBnZXRzIHJlc2V0IGFmdGVyIGVhY2ggYXR0ZW1wdC5cbi8vIFRPRE86IE1heWJlIHRoZXJlJ3Mgc29tZSB3YXkgdG8gY29uc29saWRhdGUgdGhpcyB3aXRoXG4vLyBgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZWAuIE9yIHdpdGggYG51bWJlck9mUmVSZW5kZXJzYC5cblxudmFyIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xudmFyIFJFX1JFTkRFUl9MSU1JVCA9IDI1OyAvLyBJbiBERVYsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcHJpbWl0aXZlIGhvb2tcblxudmFyIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDsgLy8gSW4gREVWLCB0aGlzIGxpc3QgZW5zdXJlcyB0aGF0IGhvb2tzIGFyZSBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgYmV0d2VlbiByZW5kZXJzLlxuLy8gVGhlIGxpc3Qgc3RvcmVzIHRoZSBvcmRlciBvZiBob29rcyB1c2VkIGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXIgKG1vdW50KS5cbi8vIFN1YnNlcXVlbnQgcmVuZGVycyAodXBkYXRlcykgcmVmZXJlbmNlIHRoaXMgbGlzdC5cblxudmFyIGhvb2tUeXBlc0RldiA9IG51bGw7XG52YXIgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTsgLy8gSW4gREVWLCB0aGlzIHRyYWNrcyB3aGV0aGVyIGN1cnJlbnRseSByZW5kZXJpbmcgY29tcG9uZW50IG5lZWRzIHRvIGlnbm9yZVxuLy8gdGhlIGRlcGVuZGVuY2llcyBmb3IgSG9va3MgdGhhdCBuZWVkIHRoZW0gKGUuZy4gdXNlRWZmZWN0IG9yIHVzZU1lbW8pLlxuLy8gV2hlbiB0cnVlLCBzdWNoIEhvb2tzIHdpbGwgYWx3YXlzIGJlIFwicmVtb3VudGVkXCIuIE9ubHkgdXNlZCBkdXJpbmcgaG90IHJlbG9hZC5cblxudmFyIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIG1vdW50SG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ID09PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNEZXYgPSBbaG9va05hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBob29rVHlwZXNEZXYucHVzaChob29rTmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvb2tUeXBlc0RldigpIHtcbiAge1xuICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYrKztcblxuICAgICAgaWYgKGhvb2tUeXBlc0Rldltob29rVHlwZXNVcGRhdGVJbmRleERldl0gIT09IGhvb2tOYW1lKSB7XG4gICAgICAgIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGhvb2tOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcykge1xuICB7XG4gICAgaWYgKGRlcHMgIT09IHVuZGVmaW5lZCAmJiBkZXBzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGRlcHMpKSB7XG4gICAgICAvLyBWZXJpZnkgZGVwcywgYnV0IG9ubHkgb24gbW91bnQgdG8gYXZvaWQgZXh0cmEgY2hlY2tzLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGVpciB0eXBlIHdvdWxkIGNoYW5nZSBhcyB1c3VhbGx5IHlvdSBkZWZpbmUgdGhlbSBpbmxpbmUuXG4gICAgICBlcnJvcignJXMgcmVjZWl2ZWQgYSBmaW5hbCBhcmd1bWVudCB0aGF0IGlzIG5vdCBhbiBhcnJheSAoaW5zdGVhZCwgcmVjZWl2ZWQgYCVzYCkuIFdoZW4gJyArICdzcGVjaWZpZWQsIHRoZSBmaW5hbCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5LicsIGN1cnJlbnRIb29rTmFtZUluRGV2LCB0eXBlb2YgZGVwcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGN1cnJlbnRIb29rTmFtZSkge1xuICB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudHlwZSk7XG5cbiAgICBpZiAoIWRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgIGlmIChob29rVHlwZXNEZXYgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHRhYmxlID0gJyc7XG4gICAgICAgIHZhciBzZWNvbmRDb2x1bW5TdGFydCA9IDMwO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2OyBpKyspIHtcbiAgICAgICAgICB2YXIgb2xkSG9va05hbWUgPSBob29rVHlwZXNEZXZbaV07XG4gICAgICAgICAgdmFyIG5ld0hvb2tOYW1lID0gaSA9PT0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPyBjdXJyZW50SG9va05hbWUgOiBvbGRIb29rTmFtZTtcbiAgICAgICAgICB2YXIgcm93ID0gaSArIDEgKyBcIi4gXCIgKyBvbGRIb29rTmFtZTsgLy8gRXh0cmEgc3BhY2Ugc28gc2Vjb25kIGNvbHVtbiBsaW5lcyB1cFxuICAgICAgICAgIC8vIGxvbCBAIElFIG5vdCBzdXBwb3J0aW5nIFN0cmluZyNyZXBlYXRcblxuICAgICAgICAgIHdoaWxlIChyb3cubGVuZ3RoIDwgc2Vjb25kQ29sdW1uU3RhcnQpIHtcbiAgICAgICAgICAgIHJvdyArPSAnICc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcm93ICs9IG5ld0hvb2tOYW1lICsgJ1xcbic7XG4gICAgICAgICAgdGFibGUgKz0gcm93O1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3IoJ1JlYWN0IGhhcyBkZXRlY3RlZCBhIGNoYW5nZSBpbiB0aGUgb3JkZXIgb2YgSG9va3MgY2FsbGVkIGJ5ICVzLiAnICsgJ1RoaXMgd2lsbCBsZWFkIHRvIGJ1Z3MgYW5kIGVycm9ycyBpZiBub3QgZml4ZWQuICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgdGhlIFJ1bGVzIG9mIEhvb2tzOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3NcXG5cXG4nICsgJyAgIFByZXZpb3VzIHJlbmRlciAgICAgICAgICAgIE5leHQgcmVuZGVyXFxuJyArICcgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4nICsgJyVzJyArICcgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5cXG4nLCBjb21wb25lbnROYW1lLCB0YWJsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SW52YWxpZEhvb2tFcnJvcigpIHtcbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpIHtcbiAge1xuICAgIGlmIChpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcykge1xuICAgICAgLy8gT25seSB0cnVlIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgYmVpbmcgaG90IHJlbG9hZGVkLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcmV2RGVwcyA9PT0gbnVsbCkge1xuICAgIHtcbiAgICAgIGVycm9yKCclcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IGR1cmluZyB0aGlzIHJlbmRlciwgYnV0IG5vdCBkdXJpbmcgJyArICd0aGUgcHJldmlvdXMgcmVuZGVyLiBFdmVuIHRob3VnaCB0aGUgZmluYWwgYXJndW1lbnQgaXMgb3B0aW9uYWwsICcgKyAnaXRzIHR5cGUgY2Fubm90IGNoYW5nZSBiZXR3ZWVuIHJlbmRlcnMuJywgY3VycmVudEhvb2tOYW1lSW5EZXYpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHtcbiAgICAvLyBEb24ndCBib3RoZXIgY29tcGFyaW5nIGxlbmd0aHMgaW4gcHJvZCBiZWNhdXNlIHRoZXNlIGFycmF5cyBzaG91bGQgYmVcbiAgICAvLyBwYXNzZWQgaW5saW5lLlxuICAgIGlmIChuZXh0RGVwcy5sZW5ndGggIT09IHByZXZEZXBzLmxlbmd0aCkge1xuICAgICAgZXJyb3IoJ1RoZSBmaW5hbCBhcmd1bWVudCBwYXNzZWQgdG8gJXMgY2hhbmdlZCBzaXplIGJldHdlZW4gcmVuZGVycy4gVGhlICcgKyAnb3JkZXIgYW5kIHNpemUgb2YgdGhpcyBhcnJheSBtdXN0IHJlbWFpbiBjb25zdGFudC5cXG5cXG4nICsgJ1ByZXZpb3VzOiAlc1xcbicgKyAnSW5jb21pbmc6ICVzJywgY3VycmVudEhvb2tOYW1lSW5EZXYsIFwiW1wiICsgcHJldkRlcHMuam9pbignLCAnKSArIFwiXVwiLCBcIltcIiArIG5leHREZXBzLmpvaW4oJywgJykgKyBcIl1cIik7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2RGVwcy5sZW5ndGggJiYgaSA8IG5leHREZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG9iamVjdElzKG5leHREZXBzW2ldLCBwcmV2RGVwc1tpXSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIHNlY29uZEFyZywgbmV4dFJlbmRlckxhbmVzKSB7XG4gIHJlbmRlckxhbmVzID0gbmV4dFJlbmRlckxhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAge1xuICAgIGhvb2tUeXBlc0RldiA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcyA6IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTsgLy8gVXNlZCBmb3IgaG90IHJlbG9hZGluZzpcblxuICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnR5cGUgIT09IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlc2V0XG4gIC8vIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgLy8gd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgLy8gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICAvLyBUT0RPIFdhcm4gaWYgbm8gaG9va3MgYXJlIHVzZWQgYXQgYWxsIGR1cmluZyBtb3VudCwgdGhlbiBzb21lIGFyZSB1c2VkIGR1cmluZyB1cGRhdGUuXG4gIC8vIEN1cnJlbnRseSB3ZSB3aWxsIGlkZW50aWZ5IHRoZSB1cGRhdGUgcmVuZGVyIGFzIGEgbW91bnQgYmVjYXVzZSBtZW1vaXplZFN0YXRlID09PSBudWxsLlxuICAvLyBUaGlzIGlzIHRyaWNreSBiZWNhdXNlIGl0J3MgdmFsaWQgZm9yIGNlcnRhaW4gdHlwZXMgb2YgY29tcG9uZW50cyAoZS5nLiBSZWFjdC5sYXp5KVxuICAvLyBVc2luZyBtZW1vaXplZFN0YXRlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBtb3VudC91cGRhdGUgb25seSB3b3JrcyBpZiBhdCBsZWFzdCBvbmUgc3RhdGVmdWwgaG9vayBpcyB1c2VkLlxuICAvLyBOb24tc3RhdGVmdWwgaG9va3MgKGUuZy4gY29udGV4dCkgZG9uJ3QgZ2V0IGFkZGVkIHRvIG1lbW9pemVkU3RhdGUsXG4gIC8vIHNvIG1lbW9pemVkU3RhdGUgd291bGQgYmUgbnVsbCBkdXJpbmcgdXBkYXRlcyBhbmQgbW91bnRzLlxuXG4gIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICB9IGVsc2UgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBkaXNwYXRjaGVyIGhhbmRsZXMgYW4gZWRnZSBjYXNlIHdoZXJlIGEgY29tcG9uZW50IGlzIHVwZGF0aW5nLFxuICAgICAgLy8gYnV0IG5vIHN0YXRlZnVsIGhvb2tzIGhhdmUgYmVlbiB1c2VkLlxuICAgICAgLy8gV2Ugd2FudCB0byBtYXRjaCB0aGUgcHJvZHVjdGlvbiBjb2RlIGJlaGF2aW9yICh3aGljaCB3aWxsIHVzZSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50KSxcbiAgICAgIC8vIGJ1dCB3aXRoIHRoZSBleHRyYSBERVYgdmFsaWRhdGlvbiB0byBlbnN1cmUgaG9va3Mgb3JkZXJpbmcgaGFzbid0IGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIGRpc3BhdGNoZXIgZG9lcyB0aGF0LlxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICB9XG4gIH1cblxuICB2YXIgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7IC8vIENoZWNrIGlmIHRoZXJlIHdhcyBhIHJlbmRlciBwaGFzZSB1cGRhdGVcblxuICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzKSB7XG4gICAgLy8gS2VlcCByZW5kZXJpbmcgaW4gYSBsb29wIGZvciBhcyBsb25nIGFzIHJlbmRlciBwaGFzZSB1cGRhdGVzIGNvbnRpbnVlIHRvXG4gICAgLy8gYmUgc2NoZWR1bGVkLiBVc2UgYSBjb3VudGVyIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXG4gICAgdmFyIG51bWJlck9mUmVSZW5kZXJzID0gMDtcblxuICAgIGRvIHtcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xuXG4gICAgICBpZiAoIShudW1iZXJPZlJlUmVuZGVycyA8IFJFX1JFTkRFUl9MSU1JVCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRvbyBtYW55IHJlLXJlbmRlcnMuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHJlbmRlcnMgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbnVtYmVyT2ZSZVJlbmRlcnMgKz0gMTtcblxuICAgICAge1xuICAgICAgICAvLyBFdmVuIHdoZW4gaG90IHJlbG9hZGluZywgYWxsb3cgZGVwZW5kZW5jaWVzIHRvIHN0YWJpbGl6ZVxuICAgICAgICAvLyBhZnRlciBmaXJzdCByZW5kZXIgdG8gcHJldmVudCBpbmZpbml0ZSByZW5kZXIgcGhhc2UgdXBkYXRlcy5cbiAgICAgICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBmYWxzZTtcbiAgICAgIH0gLy8gU3RhcnQgb3ZlciBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3RcblxuXG4gICAgICBjdXJyZW50SG9vayA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gICAgICB7XG4gICAgICAgIC8vIEFsc28gdmFsaWRhdGUgaG9vayBvcmRlciBmb3IgY2FzY2FkaW5nIHVwZGF0ZXMuXG4gICAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgICB9XG5cbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA7XG4gICAgICBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTtcbiAgICB9IHdoaWxlIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpO1xuICB9IC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmN5LlxuXG5cbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGhvb2tUeXBlc0RldjtcbiAgfSAvLyBUaGlzIGNoZWNrIHVzZXMgY3VycmVudEhvb2sgc28gdGhhdCBpdCB3b3JrcyB0aGUgc2FtZSBpbiBERVYgYW5kIHByb2QgYnVuZGxlcy5cbiAgLy8gaG9va1R5cGVzRGV2IGNvdWxkIGNhdGNoIG1vcmUgY2FzZXMgKGUuZy4gY29udGV4dCkgYnV0IG9ubHkgaW4gREVWIGJ1bmRsZXMuXG5cblxuICB2YXIgZGlkUmVuZGVyVG9vRmV3SG9va3MgPSBjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBjdXJyZW50SG9vay5uZXh0ICE9PSBudWxsO1xuICByZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBjdXJyZW50SG9vayA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG5cbiAge1xuICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gIH1cblxuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG5cbiAgaWYgKCEhZGlkUmVuZGVyVG9vRmV3SG9va3MpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZW5kZXJlZCBmZXdlciBob29rcyB0aGFuIGV4cGVjdGVkLiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgYW4gYWNjaWRlbnRhbCBlYXJseSByZXR1cm4gc3RhdGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuZnVuY3Rpb24gYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH4oUGFzc2l2ZSB8IFVwZGF0ZSk7XG4gIGN1cnJlbnQubGFuZXMgPSByZW1vdmVMYW5lcyhjdXJyZW50LmxhbmVzLCBsYW5lcyk7XG59XG5mdW5jdGlvbiByZXNldEhvb2tzQWZ0ZXJUaHJvdygpIHtcbiAgLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY3kuXG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlKSB7XG4gICAgLy8gVGhlcmUgd2VyZSByZW5kZXIgcGhhc2UgdXBkYXRlcy4gVGhlc2UgYXJlIG9ubHkgdmFsaWQgZm9yIHRoaXMgcmVuZGVyXG4gICAgLy8gcGhhc2UsIHdoaWNoIHdlIGFyZSBub3cgYWJvcnRpbmcuIFJlbW92ZSB0aGUgdXBkYXRlcyBmcm9tIHRoZSBxdWV1ZXMgc29cbiAgICAvLyB0aGV5IGRvIG5vdCBwZXJzaXN0IHRvIHRoZSBuZXh0IHJlbmRlci4gRG8gbm90IHJlbW92ZSB1cGRhdGVzIGZyb20gaG9va3NcbiAgICAvLyB0aGF0IHdlcmVuJ3QgcHJvY2Vzc2VkLlxuICAgIC8vXG4gICAgLy8gT25seSByZXNldCB0aGUgdXBkYXRlcyBmcm9tIHRoZSBxdWV1ZSBpZiBpdCBoYXMgYSBjbG9uZS4gSWYgaXQgZG9lc1xuICAgIC8vIG5vdCBoYXZlIGEgY2xvbmUsIHRoYXQgbWVhbnMgaXQgd2Fzbid0IHByb2Nlc3NlZCwgYW5kIHRoZSB1cGRhdGVzIHdlcmVcbiAgICAvLyBzY2hlZHVsZWQgYmVmb3JlIHdlIGVudGVyZWQgdGhlIHJlbmRlciBwaGFzZS5cbiAgICB2YXIgaG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZTtcblxuICAgIHdoaWxlIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gICAgICBpZiAocXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGhvb2sgPSBob29rLm5leHQ7XG4gICAgfVxuXG4gICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgcmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcbiAgY3VycmVudEhvb2sgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuXG4gIHtcbiAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbiAgfVxuXG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgdmFyIGhvb2sgPSB7XG4gICAgbWVtb2l6ZWRTdGF0ZTogbnVsbCxcbiAgICBiYXNlU3RhdGU6IG51bGwsXG4gICAgYmFzZVF1ZXVlOiBudWxsLFxuICAgIHF1ZXVlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBpbiB0aGUgbGlzdFxuICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IGhvb2s7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IGhvb2s7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBib3RoIGZvciB1cGRhdGVzIGFuZCBmb3IgcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgYVxuICAvLyByZW5kZXIgcGhhc2UgdXBkYXRlLiBJdCBhc3N1bWVzIHRoZXJlIGlzIGVpdGhlciBhIGN1cnJlbnQgaG9vayB3ZSBjYW5cbiAgLy8gY2xvbmUsIG9yIGEgd29yay1pbi1wcm9ncmVzcyBob29rIGZyb20gYSBwcmV2aW91cyByZW5kZXIgcGFzcyB0aGF0IHdlIGNhblxuICAvLyB1c2UgYXMgYSBiYXNlLiBXaGVuIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGJhc2UgbGlzdCwgd2UgbXVzdCBzd2l0Y2ggdG9cbiAgLy8gdGhlIGRpc3BhdGNoZXIgdXNlZCBmb3IgbW91bnRzLlxuICB2YXIgbmV4dEN1cnJlbnRIb29rO1xuXG4gIGlmIChjdXJyZW50SG9vayA9PT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q3VycmVudEhvb2sgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50SG9vay5uZXh0O1xuICB9XG5cbiAgdmFyIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2s7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGU7XG4gIH0gZWxzZSB7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0O1xuICB9XG5cbiAgaWYgKG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgIT09IG51bGwpIHtcbiAgICAvLyBUaGVyZSdzIGFscmVhZHkgYSB3b3JrLWluLXByb2dyZXNzLiBSZXVzZSBpdC5cbiAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgICBjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vaztcbiAgfSBlbHNlIHtcbiAgICAvLyBDbG9uZSBmcm9tIHRoZSBjdXJyZW50IGhvb2suXG4gICAgaWYgKCEobmV4dEN1cnJlbnRIb29rICE9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJSZW5kZXJlZCBtb3JlIGhvb2tzIHRoYW4gZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vaztcbiAgICB2YXIgbmV3SG9vayA9IHtcbiAgICAgIG1lbW9pemVkU3RhdGU6IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICBiYXNlU3RhdGU6IGN1cnJlbnRIb29rLmJhc2VTdGF0ZSxcbiAgICAgIGJhc2VRdWV1ZTogY3VycmVudEhvb2suYmFzZVF1ZXVlLFxuICAgICAgcXVldWU6IGN1cnJlbnRIb29rLnF1ZXVlLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBob29rIGluIHRoZSBsaXN0LlxuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gbmV3SG9vaztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IG5ld0hvb2s7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBsYXN0RWZmZWN0OiBudWxsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJhc2ljU3RhdGVSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgLy8gJEZsb3dGaXhNZTogRmxvdyBkb2Vzbid0IGxpa2UgbWl4ZWQgdHlwZXNcbiAgcmV0dXJuIHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicgPyBhY3Rpb24oc3RhdGUpIDogYWN0aW9uO1xufVxuXG5mdW5jdGlvbiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBpbml0aWFsU3RhdGU7XG5cbiAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXQoaW5pdGlhbEFyZyk7XG4gIH0gZWxzZSB7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbEFyZztcbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlID0ge1xuICAgIHBlbmRpbmc6IG51bGwsXG4gICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogcmVkdWNlcixcbiAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gIH07XG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoID0gZGlzcGF0Y2hBY3Rpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBxdWV1ZSk7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gIGlmICghKHF1ZXVlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBoYXZlIGEgcXVldWUuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyO1xuICB2YXIgY3VycmVudCA9IGN1cnJlbnRIb29rOyAvLyBUaGUgbGFzdCByZWJhc2UgdXBkYXRlIHRoYXQgaXMgTk9UIHBhcnQgb2YgdGhlIGJhc2Ugc3RhdGUuXG5cbiAgdmFyIGJhc2VRdWV1ZSA9IGN1cnJlbnQuYmFzZVF1ZXVlOyAvLyBUaGUgbGFzdCBwZW5kaW5nIHVwZGF0ZSB0aGF0IGhhc24ndCBiZWVuIHByb2Nlc3NlZCB5ZXQuXG5cbiAgdmFyIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmdRdWV1ZSAhPT0gbnVsbCkge1xuICAgIC8vIFdlIGhhdmUgbmV3IHVwZGF0ZXMgdGhhdCBoYXZlbid0IGJlZW4gcHJvY2Vzc2VkIHlldC5cbiAgICAvLyBXZSdsbCBhZGQgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cbiAgICBpZiAoYmFzZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAvLyBNZXJnZSB0aGUgcGVuZGluZyBxdWV1ZSBhbmQgdGhlIGJhc2UgcXVldWUuXG4gICAgICB2YXIgYmFzZUZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgICB2YXIgcGVuZGluZ0ZpcnN0ID0gcGVuZGluZ1F1ZXVlLm5leHQ7XG4gICAgICBiYXNlUXVldWUubmV4dCA9IHBlbmRpbmdGaXJzdDtcbiAgICAgIHBlbmRpbmdRdWV1ZS5uZXh0ID0gYmFzZUZpcnN0O1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChjdXJyZW50LmJhc2VRdWV1ZSAhPT0gYmFzZVF1ZXVlKSB7XG4gICAgICAgIC8vIEludGVybmFsIGludmFyaWFudCB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBmZWFzaWJseSBjb3VsZCBpblxuICAgICAgICAvLyB0aGUgZnV0dXJlIGlmIHdlIGltcGxlbWVudCByZXN1bWluZywgb3Igc29tZSBmb3JtIG9mIHRoYXQuXG4gICAgICAgIGVycm9yKCdJbnRlcm5hbCBlcnJvcjogRXhwZWN0ZWQgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSB0byBiZSBhIGNsb25lLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudC5iYXNlUXVldWUgPSBiYXNlUXVldWUgPSBwZW5kaW5nUXVldWU7XG4gICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoYmFzZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gV2UgaGF2ZSBhIHF1ZXVlIHRvIHByb2Nlc3MuXG4gICAgdmFyIGZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgdmFyIG5ld1N0YXRlID0gY3VycmVudC5iYXNlU3RhdGU7XG4gICAgdmFyIG5ld0Jhc2VTdGF0ZSA9IG51bGw7XG4gICAgdmFyIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbnVsbDtcbiAgICB2YXIgbmV3QmFzZVF1ZXVlTGFzdCA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0O1xuXG4gICAgZG8ge1xuICAgICAgdmFyIHVwZGF0ZUxhbmUgPSB1cGRhdGUubGFuZTtcblxuICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmUpKSB7XG4gICAgICAgIC8vIFByaW9yaXR5IGlzIGluc3VmZmljaWVudC4gU2tpcCB0aGlzIHVwZGF0ZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3RcbiAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgIC8vIHVwZGF0ZS9zdGF0ZS5cbiAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgIGVhZ2VyUmVkdWNlcjogdXBkYXRlLmVhZ2VyUmVkdWNlcixcbiAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdCYXNlUXVldWVGaXJzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QgPSBjbG9uZTtcbiAgICAgICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gY2xvbmU7XG4gICAgICAgIH0gLy8gVXBkYXRlIHRoZSByZW1haW5pbmcgcHJpb3JpdHkgaW4gdGhlIHF1ZXVlLlxuICAgICAgICAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZVxuICAgICAgICAvLyByZW5kZXJMYW5lcyBmcm9tIHRoZSBvcmlnaW5hbCBsYW5lcy5cblxuXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgPSBtZXJnZUxhbmVzKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMsIHVwZGF0ZUxhbmUpO1xuICAgICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHVwZGF0ZUxhbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyB1cGRhdGUgZG9lcyBoYXZlIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGlzIGdvaW5nIHRvIGJlIGNvbW1pdHRlZCBzbyB3ZSBuZXZlciB3YW50IHVuY29tbWl0XG4gICAgICAgICAgICAvLyBpdC4gVXNpbmcgTm9MYW5lIHdvcmtzIGJlY2F1c2UgMCBpcyBhIHN1YnNldCBvZiBhbGwgYml0bWFza3MsIHNvXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgbmV2ZXIgYmUgc2tpcHBlZCBieSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICBsYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICBlYWdlclJlZHVjZXI6IHVwZGF0ZS5lYWdlclJlZHVjZXIsXG4gICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBfY2xvbmU7XG4gICAgICAgIH0gLy8gUHJvY2VzcyB0aGlzIHVwZGF0ZS5cblxuXG4gICAgICAgIGlmICh1cGRhdGUuZWFnZXJSZWR1Y2VyID09PSByZWR1Y2VyKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyB1cGRhdGUgd2FzIHByb2Nlc3NlZCBlYWdlcmx5LCBhbmQgaXRzIHJlZHVjZXIgbWF0Y2hlcyB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IHJlZHVjZXIsIHdlIGNhbiB1c2UgdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUuXG4gICAgICAgICAgbmV3U3RhdGUgPSB1cGRhdGUuZWFnZXJTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYWN0aW9uID0gdXBkYXRlLmFjdGlvbjtcbiAgICAgICAgICBuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsICYmIHVwZGF0ZSAhPT0gZmlyc3QpO1xuXG4gICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgPT09IG51bGwpIHtcbiAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBuZXdCYXNlUXVldWVGaXJzdDtcbiAgICB9IC8vIE1hcmsgdGhhdCB0aGUgZmliZXIgcGVyZm9ybWVkIHdvcmssIGJ1dCBvbmx5IGlmIHRoZSBuZXcgc3RhdGUgaXNcbiAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuXG4gICAgaWYgKCFvYmplY3RJcyhuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSkge1xuICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICB9XG5cbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICBob29rLmJhc2VTdGF0ZSA9IG5ld0Jhc2VTdGF0ZTtcbiAgICBob29rLmJhc2VRdWV1ZSA9IG5ld0Jhc2VRdWV1ZUxhc3Q7XG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gIGlmICghKHF1ZXVlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBoYXZlIGEgcXVldWUuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyOyAvLyBUaGlzIGlzIGEgcmUtcmVuZGVyLiBBcHBseSB0aGUgbmV3IHJlbmRlciBwaGFzZSB1cGRhdGVzIHRvIHRoZSBwcmV2aW91c1xuICAvLyB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2g7XG4gIHZhciBsYXN0UmVuZGVyUGhhc2VVcGRhdGUgPSBxdWV1ZS5wZW5kaW5nO1xuICB2YXIgbmV3U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSBxdWV1ZSBkb2Vzbid0IHBlcnNpc3QgcGFzdCB0aGlzIHJlbmRlciBwYXNzLlxuICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgIHZhciBmaXJzdFJlbmRlclBoYXNlVXBkYXRlID0gbGFzdFJlbmRlclBoYXNlVXBkYXRlLm5leHQ7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0UmVuZGVyUGhhc2VVcGRhdGU7XG5cbiAgICBkbyB7XG4gICAgICAvLyBQcm9jZXNzIHRoaXMgcmVuZGVyIHBoYXNlIHVwZGF0ZS4gV2UgZG9uJ3QgaGF2ZSB0byBjaGVjayB0aGVcbiAgICAgIC8vIHByaW9yaXR5IGJlY2F1c2UgaXQgd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnRcbiAgICAgIC8vIHJlbmRlcidzLlxuICAgICAgdmFyIGFjdGlvbiA9IHVwZGF0ZS5hY3Rpb247XG4gICAgICBuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIGFjdGlvbik7XG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlICh1cGRhdGUgIT09IGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUpOyAvLyBNYXJrIHRoYXQgdGhlIGZpYmVyIHBlcmZvcm1lZCB3b3JrLCBidXQgb25seSBpZiB0aGUgbmV3IHN0YXRlIGlzXG4gICAgLy8gZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUuXG5cblxuICAgIGlmICghb2JqZWN0SXMobmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkpIHtcbiAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7IC8vIERvbid0IHBlcnNpc3QgdGhlIHN0YXRlIGFjY3VtdWxhdGVkIGZyb20gdGhlIHJlbmRlciBwaGFzZSB1cGRhdGVzIHRvXG4gICAgLy8gdGhlIGJhc2Ugc3RhdGUgdW5sZXNzIHRoZSBxdWV1ZSBpcyBlbXB0eS5cbiAgICAvLyBUT0RPOiBOb3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSBkZXNpcmVkIHNlbWFudGljcywgYnV0IGl0J3Mgd2hhdCB3ZVxuICAgIC8vIGRvIGZvciBnRFNGUC4gSSBjYW4ndCByZW1lbWJlciB3aHkuXG5cbiAgICBpZiAoaG9vay5iYXNlUXVldWUgPT09IG51bGwpIHtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBbbmV3U3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCkge1xuICB7XG4gICAgd2FybkFib3V0TXVsdGlwbGVSZW5kZXJlcnNERVYoc291cmNlKTtcbiAgfVxuXG4gIHZhciBnZXRWZXJzaW9uID0gc291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24oc291cmNlLl9zb3VyY2UpOyAvLyBJcyBpdCBzYWZlIGZvciB0aGlzIGNvbXBvbmVudCB0byByZWFkIGZyb20gdGhpcyBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlcj9cblxuICB2YXIgaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSA9IGZhbHNlOyAvLyBDaGVjayB0aGUgdmVyc2lvbiBmaXJzdC5cbiAgLy8gSWYgdGhpcyByZW5kZXIgaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkIHdpdGggYSBzcGVjaWZpYyB2ZXJzaW9uLFxuICAvLyB3ZSBjYW4gdXNlIGl0IGFsb25lIHRvIGRldGVybWluZSBpZiB3ZSBjYW4gc2FmZWx5IHJlYWQgZnJvbSB0aGUgc291cmNlLlxuXG4gIHZhciBjdXJyZW50UmVuZGVyVmVyc2lvbiA9IGdldFdvcmtJblByb2dyZXNzVmVyc2lvbihzb3VyY2UpO1xuXG4gIGlmIChjdXJyZW50UmVuZGVyVmVyc2lvbiAhPT0gbnVsbCkge1xuICAgIC8vIEl0J3Mgc2FmZSB0byByZWFkIGlmIHRoZSBzdG9yZSBoYXNuJ3QgYmVlbiBtdXRhdGVkIHNpbmNlIHRoZSBsYXN0IHRpbWVcbiAgICAvLyB3ZSByZWFkIHNvbWV0aGluZy5cbiAgICBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gY3VycmVudFJlbmRlclZlcnNpb24gPT09IHZlcnNpb247XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlcmUncyBubyB2ZXJzaW9uLCB0aGVuIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgcmVhZCBmcm9tIHRoZVxuICAgIC8vIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MsIHNvIHdlIG5lZWQgdG8gZG8gYSBiaXQgbW9yZSB3b3JrLlxuICAgIC8vIFdoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaXMgaWYgdGhlcmUgYXJlIGFueSBob29rcyB0aGF0IGFscmVhZHlcbiAgICAvLyBzdWJzY3JpYmVkIHRvIHRoZSBzb3VyY2UsIGFuZCBpZiBzbywgd2hldGhlciB0aGVyZSBhcmUgYW55IHBlbmRpbmdcbiAgICAvLyBtdXRhdGlvbnMgdGhhdCBoYXZlbid0IGJlZW4gc3luY2hyb25pemVkIHlldC5cbiAgICAvL1xuICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIG11dGF0aW9ucywgdGhlbiBgcm9vdC5tdXRhYmxlUmVhZExhbmVzYCB3aWxsIGJlXG4gICAgLy8gZW1wdHksIGFuZCB3ZSBrbm93IHdlIGNhbiBzYWZlbHkgcmVhZC5cbiAgICAvL1xuICAgIC8vIElmIHRoZXJlICphcmUqIHBlbmRpbmcgbXV0YXRpb25zLCB3ZSBtYXkgc3RpbGwgYmUgYWJsZSB0byBzYWZlbHkgcmVhZFxuICAgIC8vIGlmIHRoZSBjdXJyZW50bHkgcmVuZGVyaW5nIGxhbmVzIGFyZSBpbmNsdXNpdmUgb2YgdGhlIHBlbmRpbmcgbXV0YXRpb25cbiAgICAvLyBsYW5lcywgc2luY2UgdGhhdCBndWFyYW50ZWVzIHRoYXQgdGhlIHZhbHVlIHdlJ3JlIGFib3V0IHRvIHJlYWQgZnJvbVxuICAgIC8vIHRoZSBzb3VyY2UgaXMgY29uc2lzdGVudCB3aXRoIHRoZSB2YWx1ZXMgdGhhdCB3ZSByZWFkIGR1cmluZyB0aGUgbW9zdFxuICAgIC8vIHJlY2VudCBtdXRhdGlvbi5cbiAgICBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCByb290Lm11dGFibGVSZWFkTGFuZXMpO1xuXG4gICAgaWYgKGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UpIHtcbiAgICAgIC8vIElmIGl0J3Mgc2FmZSB0byByZWFkIGZyb20gdGhpcyBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlcixcbiAgICAgIC8vIHN0b3JlIHRoZSB2ZXJzaW9uIGluIGNhc2Ugb3RoZXIgY29tcG9uZW50cyByZWFkIGZyb20gaXQuXG4gICAgICAvLyBBIGNoYW5nZWQgdmVyc2lvbiBudW1iZXIgd2lsbCBsZXQgdGhvc2UgY29tcG9uZW50cyBrbm93IHRvIHRocm93IGFuZCByZXN0YXJ0IHRoZSByZW5kZXIuXG4gICAgICBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24oc291cmNlLCB2ZXJzaW9uKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSkge1xuICAgIHZhciBzbmFwc2hvdCA9IGdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKTtcblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2Ygc25hcHNob3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHNob3VsZCBub3QgcmV0dXJuIGEgZnVuY3Rpb24gYXMgdGhlIHNuYXBzaG90IHZhbHVlLiAnICsgJ0Z1bmN0aW9ucyBtYXkgY2xvc2Ugb3ZlciBtdXRhYmxlIHZhbHVlcyBhbmQgY2F1c2UgdGVhcmluZy4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc25hcHNob3Q7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSBtdXRhYmxlIHNvdXJjZSBiZWluZyBzaGFyZWQgYmV0d2VlbiByZW5kZXJlcnMuXG4gICAgLy8gSW4gdGhhdCBjYXNlLCBpZiB0aGUgc291cmNlIGlzIG11dGF0ZWQgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHNlY29uZCByZW5kZXJlcixcbiAgICAvLyBUaGUgc2Vjb25kIHJlbmRlcmVyIGRvbid0IGtub3cgdGhhdCBpdCBuZWVkcyB0byByZXNldCB0aGUgV0lQIHZlcnNpb24gZHVyaW5nIHVud2luZCxcbiAgICAvLyAoYmVjYXVzZSB0aGUgaG9vayBvbmx5IG1hcmtzIHNvdXJjZXMgYXMgZGlydHkgaWYgaXQncyB3cml0dGVuIHRvIHRoZWlyIFdJUCB2ZXJzaW9uKS5cbiAgICAvLyBUaGF0IHdvdWxkIGNhdXNlIHRoaXMgdGVhciBjaGVjayB0byB0aHJvdyBhZ2FpbiBhbmQgZXZlbnR1YWxseSBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyLlxuICAgIC8vIFdlIGNhbiBhdm9pZCB0aGlzIGluZmluaXRlIGxvb3AgYnkgZXhwbGljaXRseSBtYXJraW5nIHRoZSBzb3VyY2UgYXMgZGlydHkuXG4gICAgLy9cbiAgICAvLyBUaGlzIGNhbiBsZWFkIHRvIHRlYXJpbmcgaW4gdGhlIGZpcnN0IHJlbmRlcmVyIHdoZW4gaXQgcmVzdW1lcyxcbiAgICAvLyBidXQgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCB0aGF0IChzaG9ydCBvZiB0aHJvd2luZyBoZXJlIGFuZCByZWZ1c2luZyB0byBjb250aW51ZSB0aGUgcmVuZGVyKS5cbiAgICBtYXJrU291cmNlQXNEaXJ0eShzb3VyY2UpO1xuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgcmVhZCBmcm9tIG11dGFibGUgc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgd2l0aG91dCB0ZWFyaW5nLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICB2YXIgcm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuXG4gIGlmICghKHJvb3QgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgYSB3b3JrLWluLXByb2dyZXNzIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGdldFZlcnNpb24gPSBzb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcblxuICB2YXIgX2Rpc3BhdGNoZXIkdXNlU3RhdGUgPSBkaXNwYXRjaGVyLnVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCk7XG4gIH0pLFxuICAgICAgY3VycmVudFNuYXBzaG90ID0gX2Rpc3BhdGNoZXIkdXNlU3RhdGVbMF0sXG4gICAgICBzZXRTbmFwc2hvdCA9IF9kaXNwYXRjaGVyJHVzZVN0YXRlWzFdO1xuXG4gIHZhciBzbmFwc2hvdCA9IGN1cnJlbnRTbmFwc2hvdDsgLy8gR3JhYiBhIGhhbmRsZSB0byB0aGUgc3RhdGUgaG9vayBhcyB3ZWxsLlxuICAvLyBXZSB1c2UgaXQgdG8gY2xlYXIgdGhlIHBlbmRpbmcgdXBkYXRlIHF1ZXVlIGlmIHdlIGhhdmUgYSBuZXcgc291cmNlLlxuXG4gIHZhciBzdGF0ZUhvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2s7XG4gIHZhciBtZW1vaXplZFN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICB2YXIgcmVmcyA9IG1lbW9pemVkU3RhdGUucmVmcztcbiAgdmFyIHByZXZHZXRTbmFwc2hvdCA9IHJlZnMuZ2V0U25hcHNob3Q7XG4gIHZhciBwcmV2U291cmNlID0gbWVtb2l6ZWRTdGF0ZS5zb3VyY2U7XG4gIHZhciBwcmV2U3Vic2NyaWJlID0gbWVtb2l6ZWRTdGF0ZS5zdWJzY3JpYmU7XG4gIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICByZWZzOiByZWZzLFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlXG4gIH07IC8vIFN5bmMgdGhlIHZhbHVlcyBuZWVkZWQgYnkgb3VyIHN1YnNjcmlwdGlvbiBoYW5kbGVyIGFmdGVyIGVhY2ggY29tbWl0LlxuXG4gIGRpc3BhdGNoZXIudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZWZzLmdldFNuYXBzaG90ID0gZ2V0U25hcHNob3Q7IC8vIE5vcm1hbGx5IHRoZSBkaXNwYXRjaCBmdW5jdGlvbiBmb3IgYSBzdGF0ZSBob29rIG5ldmVyIGNoYW5nZXMsXG4gICAgLy8gYnV0IHRoaXMgaG9vayByZWNyZWF0ZXMgdGhlIHF1ZXVlIGluIGNlcnRhaW4gY2FzZXMgIHRvIGF2b2lkIHVwZGF0ZXMgZnJvbSBzdGFsZSBzb3VyY2VzLlxuICAgIC8vIGhhbmRsZUNoYW5nZSgpIGJlbG93IG5lZWRzIHRvIHJlZmVyZW5jZSB0aGUgZGlzcGF0Y2ggZnVuY3Rpb24gd2l0aG91dCByZS1zdWJzY3JpYmluZyxcbiAgICAvLyBzbyB3ZSB1c2UgYSByZWYgdG8gZW5zdXJlIHRoYXQgaXQgYWx3YXlzIGhhcyB0aGUgbGF0ZXN0IHZlcnNpb24uXG5cbiAgICByZWZzLnNldFNuYXBzaG90ID0gc2V0U25hcHNob3Q7IC8vIENoZWNrIGZvciBhIHBvc3NpYmxlIGNoYW5nZSBiZXR3ZWVuIHdoZW4gd2UgbGFzdCByZW5kZXJlZCBub3cuXG5cbiAgICB2YXIgbWF5YmVOZXdWZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICBpZiAoIW9iamVjdElzKHZlcnNpb24sIG1heWJlTmV3VmVyc2lvbikpIHtcbiAgICAgIHZhciBtYXliZU5ld1NuYXBzaG90ID0gZ2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpO1xuXG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgbWF5YmVOZXdTbmFwc2hvdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzaG91bGQgbm90IHJldHVybiBhIGZ1bmN0aW9uIGFzIHRoZSBzbmFwc2hvdCB2YWx1ZS4gJyArICdGdW5jdGlvbnMgbWF5IGNsb3NlIG92ZXIgbXV0YWJsZSB2YWx1ZXMgYW5kIGNhdXNlIHRlYXJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFvYmplY3RJcyhzbmFwc2hvdCwgbWF5YmVOZXdTbmFwc2hvdCkpIHtcbiAgICAgICAgc2V0U25hcHNob3QobWF5YmVOZXdTbmFwc2hvdCk7XG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgICBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIGxhbmUpO1xuICAgICAgfSAvLyBJZiB0aGUgc291cmNlIG11dGF0ZWQgYmV0d2VlbiByZW5kZXIgYW5kIG5vdyxcbiAgICAgIC8vIHRoZXJlIG1heSBiZSBzdGF0ZSB1cGRhdGVzIGFscmVhZHkgc2NoZWR1bGVkIGZyb20gdGhlIG9sZCBzb3VyY2UuXG4gICAgICAvLyBFbnRhbmdsZSB0aGUgdXBkYXRlcyBzbyB0aGF0IHRoZXkgcmVuZGVyIGluIHRoZSBzYW1lIGJhdGNoLlxuXG5cbiAgICAgIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIHJvb3QubXV0YWJsZVJlYWRMYW5lcyk7XG4gICAgfVxuICB9LCBbZ2V0U25hcHNob3QsIHNvdXJjZSwgc3Vic2NyaWJlXSk7IC8vIElmIHdlIGdvdCBhIG5ldyBzb3VyY2Ugb3Igc3Vic2NyaWJlIGZ1bmN0aW9uLCByZS1zdWJzY3JpYmUgaW4gYSBwYXNzaXZlIGVmZmVjdC5cblxuICBkaXNwYXRjaGVyLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBsYXRlc3RHZXRTbmFwc2hvdCA9IHJlZnMuZ2V0U25hcHNob3Q7XG4gICAgICB2YXIgbGF0ZXN0U2V0U25hcHNob3QgPSByZWZzLnNldFNuYXBzaG90O1xuXG4gICAgICB0cnkge1xuICAgICAgICBsYXRlc3RTZXRTbmFwc2hvdChsYXRlc3RHZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSkpOyAvLyBSZWNvcmQgYSBwZW5kaW5nIG11dGFibGUgc291cmNlIHVwZGF0ZSB3aXRoIHRoZSBzYW1lIGV4cGlyYXRpb24gdGltZS5cblxuICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgICAgbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCBsYW5lKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEEgc2VsZWN0b3IgbWlnaHQgdGhyb3cgYWZ0ZXIgYSBzb3VyY2UgbXV0YXRpb24uXG4gICAgICAgIC8vIGUuZy4gaXQgbWlnaHQgdHJ5IHRvIHJlYWQgZnJvbSBhIHBhcnQgb2YgdGhlIHN0b3JlIHRoYXQgbm8gbG9uZ2VyIGV4aXN0cy5cbiAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBzdGlsbCBzY2hlZHVsZSBhbiB1cGRhdGUgd2l0aCBSZWFjdC5cbiAgICAgICAgLy8gV29yc3QgY2FzZSB0aGUgc2VsZWN0b3Igd2lsbCB0aHJvdyBhZ2FpbiBhbmQgdGhlbiBhbiBlcnJvciBib3VuZGFyeSB3aWxsIGhhbmRsZSBpdC5cbiAgICAgICAgbGF0ZXN0U2V0U25hcHNob3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIHVuc3Vic2NyaWJlID0gc3Vic2NyaWJlKHNvdXJjZS5fc291cmNlLCBoYW5kbGVDaGFuZ2UpO1xuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiB1bnN1YnNjcmliZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc3Vic2NyaWJlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGFuIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgfSwgW3NvdXJjZSwgc3Vic2NyaWJlXSk7IC8vIElmIGFueSBvZiB0aGUgaW5wdXRzIHRvIHVzZU11dGFibGVTb3VyY2UgY2hhbmdlLCByZWFkaW5nIGlzIHBvdGVudGlhbGx5IHVuc2FmZS5cbiAgLy9cbiAgLy8gSWYgZWl0aGVyIHRoZSBzb3VyY2Ugb3IgdGhlIHN1YnNjcmlwdGlvbiBoYXZlIGNoYW5nZWQgd2UgY2FuJ3QgY2FuJ3QgdHJ1c3QgdGhlIHVwZGF0ZSBxdWV1ZS5cbiAgLy8gTWF5YmUgdGhlIHNvdXJjZSBjaGFuZ2VkIGluIGEgd2F5IHRoYXQgdGhlIG9sZCBzdWJzY3JpcHRpb24gaWdub3JlZCBidXQgdGhlIG5ldyBvbmUgZGVwZW5kcyBvbi5cbiAgLy9cbiAgLy8gSWYgdGhlIGdldFNuYXBzaG90IGZ1bmN0aW9uIGNoYW5nZWQsIHdlIGFsc28gc2hvdWxkbid0IHJlbHkgb24gdGhlIHVwZGF0ZSBxdWV1ZS5cbiAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSB1bmRlcmx5aW5nIHNvdXJjZSB3YXMgbXV0YXRlZCBiZXR3ZWVuIHRoZSB3aGVuIHRoZSBsYXN0IFwiY2hhbmdlXCIgZXZlbnQgZmlyZWQsXG4gIC8vIGFuZCB3aGVuIHRoZSBjdXJyZW50IHJlbmRlciAod2l0aCB0aGUgbmV3IGdldFNuYXBzaG90IGZ1bmN0aW9uKSBpcyBwcm9jZXNzZWQuXG4gIC8vXG4gIC8vIEluIGJvdGggY2FzZXMsIHdlIG5lZWQgdG8gdGhyb3cgYXdheSBwZW5kaW5nIHVwZGF0ZXMgKHNpbmNlIHRoZXkgYXJlIG5vIGxvbmdlciByZWxldmFudClcbiAgLy8gYW5kIHRyZWF0IHJlYWRpbmcgZnJvbSB0aGUgc291cmNlIGFzIHdlIGRvIGluIHRoZSBtb3VudCBjYXNlLlxuXG4gIGlmICghb2JqZWN0SXMocHJldkdldFNuYXBzaG90LCBnZXRTbmFwc2hvdCkgfHwgIW9iamVjdElzKHByZXZTb3VyY2UsIHNvdXJjZSkgfHwgIW9iamVjdElzKHByZXZTdWJzY3JpYmUsIHN1YnNjcmliZSkpIHtcbiAgICAvLyBDcmVhdGUgYSBuZXcgcXVldWUgYW5kIHNldFN0YXRlIG1ldGhvZCxcbiAgICAvLyBTbyBpZiB0aGVyZSBhcmUgaW50ZXJsZWF2ZWQgdXBkYXRlcywgdGhleSBnZXQgcHVzaGVkIHRvIHRoZSBvbGRlciBxdWV1ZS5cbiAgICAvLyBXaGVuIHRoaXMgYmVjb21lcyBjdXJyZW50LCB0aGUgcHJldmlvdXMgcXVldWUgYW5kIGRpc3BhdGNoIG1ldGhvZCB3aWxsIGJlIGRpc2NhcmRlZCxcbiAgICAvLyBpbmNsdWRpbmcgYW55IGludGVybGVhdmluZyB1cGRhdGVzIHRoYXQgb2NjdXIuXG4gICAgdmFyIG5ld1F1ZXVlID0ge1xuICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogc25hcHNob3RcbiAgICB9O1xuICAgIG5ld1F1ZXVlLmRpc3BhdGNoID0gc2V0U25hcHNob3QgPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIG5ld1F1ZXVlKTtcbiAgICBzdGF0ZUhvb2sucXVldWUgPSBuZXdRdWV1ZTtcbiAgICBzdGF0ZUhvb2suYmFzZVF1ZXVlID0gbnVsbDtcbiAgICBzbmFwc2hvdCA9IHJlYWRGcm9tVW5zdWJjcmliZWRNdXRhYmxlU291cmNlKHJvb3QsIHNvdXJjZSwgZ2V0U25hcHNob3QpO1xuICAgIHN0YXRlSG9vay5tZW1vaXplZFN0YXRlID0gc3RhdGVIb29rLmJhc2VTdGF0ZSA9IHNuYXBzaG90O1xuICB9XG5cbiAgcmV0dXJuIHNuYXBzaG90O1xufVxuXG5mdW5jdGlvbiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0ge1xuICAgIHJlZnM6IHtcbiAgICAgIGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCxcbiAgICAgIHNldFNuYXBzaG90OiBudWxsXG4gICAgfSxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdWJzY3JpYmU6IHN1YnNjcmliZVxuICB9O1xuICByZXR1cm4gdXNlTXV0YWJsZVNvdXJjZShob29rLCBzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICByZXR1cm4gdXNlTXV0YWJsZVNvdXJjZShob29rLCBzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xufVxuXG5mdW5jdGlvbiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG5cbiAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWUgPSB7XG4gICAgcGVuZGluZzogbnVsbCxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gIH07XG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoID0gZGlzcGF0Y2hBY3Rpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBxdWV1ZSk7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICByZXR1cm4gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHJldHVybiByZXJlbmRlclJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xufVxuXG5mdW5jdGlvbiBwdXNoRWZmZWN0KHRhZywgY3JlYXRlLCBkZXN0cm95LCBkZXBzKSB7XG4gIHZhciBlZmZlY3QgPSB7XG4gICAgdGFnOiB0YWcsXG4gICAgY3JlYXRlOiBjcmVhdGUsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICBkZXBzOiBkZXBzLFxuICAgIC8vIENpcmN1bGFyXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICB2YXIgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmIChjb21wb25lbnRVcGRhdGVRdWV1ZSA9PT0gbnVsbCkge1xuICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpO1xuICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWUgPSBjb21wb25lbnRVcGRhdGVRdWV1ZTtcbiAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxhc3RFZmZlY3QgPSBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgbGFzdEVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgICAgZWZmZWN0Lm5leHQgPSBmaXJzdEVmZmVjdDtcbiAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3Q7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVmZmVjdDtcbn1cblxuZnVuY3Rpb24gbW91bnRSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHJlZiA9IHtcbiAgICBjdXJyZW50OiBpbml0aWFsVmFsdWVcbiAgfTtcblxuICB7XG4gICAgT2JqZWN0LnNlYWwocmVmKTtcbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHJlZjtcbiAgcmV0dXJuIHJlZjtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICByZXR1cm4gaG9vay5tZW1vaXplZFN0YXRlO1xufVxuXG5mdW5jdGlvbiBtb3VudEVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IGhvb2tGbGFncywgY3JlYXRlLCB1bmRlZmluZWQsIG5leHREZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIGRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGN1cnJlbnRIb29rICE9PSBudWxsKSB7XG4gICAgdmFyIHByZXZFZmZlY3QgPSBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlO1xuICAgIGRlc3Ryb3kgPSBwcmV2RWZmZWN0LmRlc3Ryb3k7XG5cbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZFZmZlY3QuZGVwcztcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHB1c2hFZmZlY3QoaG9va0ZsYWdzLCBjcmVhdGUsIGRlc3Ryb3ksIG5leHREZXBzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gZmliZXJGbGFncztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVzdHJveSwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdFZmZlY3RzSW5ERVYoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUgfCBQYXNzaXZlLCBQYXNzaXZlJDEsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdFZmZlY3RzSW5ERVYoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlIHwgUGFzc2l2ZSwgUGFzc2l2ZSQxLCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdChjcmVhdGUsIHJlZikge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZWZDYWxsYmFjayA9IHJlZjtcblxuICAgIHZhciBfaW5zdCA9IGNyZWF0ZSgpO1xuXG4gICAgcmVmQ2FsbGJhY2soX2luc3QpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZWZDYWxsYmFjayhudWxsKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKHJlZiAhPT0gbnVsbCAmJiByZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZWZPYmplY3QgPSByZWY7XG5cbiAgICB7XG4gICAgICBpZiAoIXJlZk9iamVjdC5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgZmlyc3QgYXJndW1lbnQgdG8gZWl0aGVyIGJlIGEgJyArICdyZWYgY2FsbGJhY2sgb3IgUmVhY3QuY3JlYXRlUmVmKCkgb2JqZWN0LiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCAnYW4gb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKHJlZk9iamVjdCkuam9pbignLCAnKSArICd9Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIF9pbnN0MiA9IGNyZWF0ZSgpO1xuXG4gICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBfaW5zdDI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZk9iamVjdC5jdXJyZW50ID0gbnVsbDtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gJyArICd0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNyZWF0ZSAhPT0gbnVsbCA/IHR5cGVvZiBjcmVhdGUgOiAnbnVsbCcpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG5cbiAgdmFyIGVmZmVjdERlcHMgPSBkZXBzICE9PSBudWxsICYmIGRlcHMgIT09IHVuZGVmaW5lZCA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksIGVmZmVjdERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiAnICsgJ3RoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6ICdudWxsJyk7XG4gICAgfVxuICB9IC8vIFRPRE86IElmIGRlcHMgYXJlIHByb3ZpZGVkLCBzaG91bGQgd2Ugc2tpcCBjb21wYXJpbmcgdGhlIHJlZiBpdHNlbGY/XG5cblxuICB2YXIgZWZmZWN0RGVwcyA9IGRlcHMgIT09IG51bGwgJiYgZGVwcyAhPT0gdW5kZWZpbmVkID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksIGVmZmVjdERlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudERlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7Ly8gVGhpcyBob29rIGlzIG5vcm1hbGx5IGEgbm8tb3AuXG4gIC8vIFRoZSByZWFjdC1kZWJ1Zy1ob29rcyBwYWNrYWdlIGluamVjdHMgaXRzIG93biBpbXBsZW1lbnRhdGlvblxuICAvLyBzbyB0aGF0IGUuZy4gRGV2VG9vbHMgY2FuIGRpc3BsYXkgY3VzdG9tIGhvb2sgdmFsdWVzLlxufVxuXG52YXIgdXBkYXRlRGVidWdWYWx1ZSA9IG1vdW50RGVidWdWYWx1ZTtcblxuZnVuY3Rpb24gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIG5leHREZXBzXTtcbiAgcmV0dXJuIGNhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIG1vdW50TWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIG5leHREZXBzXTtcbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAvLyBBc3N1bWUgdGhlc2UgYXJlIGRlZmluZWQuIElmIHRoZXkncmUgbm90LCBhcmVIb29rSW5wdXRzRXF1YWwgd2lsbCB3YXJuLlxuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBuZXh0RGVwc107XG4gIHJldHVybiBuZXh0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSkge1xuICB2YXIgX21vdW50U3RhdGUgPSBtb3VudFN0YXRlKHZhbHVlKSxcbiAgICAgIHByZXZWYWx1ZSA9IF9tb3VudFN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfbW91bnRTdGF0ZVsxXTtcblxuICBtb3VudEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICB0cnkge1xuICAgICAgc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICB9XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfdXBkYXRlU3RhdGUgPSB1cGRhdGVTdGF0ZSgpLFxuICAgICAgcHJldlZhbHVlID0gX3VwZGF0ZVN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfdXBkYXRlU3RhdGVbMV07XG5cbiAgdXBkYXRlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSkge1xuICB2YXIgX3JlcmVuZGVyU3RhdGUgPSByZXJlbmRlclN0YXRlKCksXG4gICAgICBwcmV2VmFsdWUgPSBfcmVyZW5kZXJTdGF0ZVswXSxcbiAgICAgIHNldFZhbHVlID0gX3JlcmVuZGVyU3RhdGVbMV07XG5cbiAgdXBkYXRlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihzZXRQZW5kaW5nLCBjYWxsYmFjaykge1xuICB2YXIgcHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG5cbiAge1xuICAgIHJ1bldpdGhQcmlvcml0eSQxKHByaW9yaXR5TGV2ZWwgPCBVc2VyQmxvY2tpbmdQcmlvcml0eSQyID8gVXNlckJsb2NraW5nUHJpb3JpdHkkMiA6IHByaW9yaXR5TGV2ZWwsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldFBlbmRpbmcodHJ1ZSk7XG4gICAgfSk7XG4gICAgcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCA+IE5vcm1hbFByaW9yaXR5JDEgPyBOb3JtYWxQcmlvcml0eSQxIDogcHJpb3JpdHlMZXZlbCwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0UGVuZGluZyhmYWxzZSk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudFRyYW5zaXRpb24oKSB7XG4gIHZhciBfbW91bnRTdGF0ZTIgPSBtb3VudFN0YXRlKGZhbHNlKSxcbiAgICAgIGlzUGVuZGluZyA9IF9tb3VudFN0YXRlMlswXSxcbiAgICAgIHNldFBlbmRpbmcgPSBfbW91bnRTdGF0ZTJbMV07IC8vIFRoZSBgc3RhcnRgIG1ldGhvZCBjYW4gYmUgc3RvcmVkIG9uIGEgcmVmLCBzaW5jZSBgc2V0UGVuZGluZ2BcbiAgLy8gbmV2ZXIgY2hhbmdlcy5cblxuXG4gIHZhciBzdGFydCA9IHN0YXJ0VHJhbnNpdGlvbi5iaW5kKG51bGwsIHNldFBlbmRpbmcpO1xuICBtb3VudFJlZihzdGFydCk7XG4gIHJldHVybiBbc3RhcnQsIGlzUGVuZGluZ107XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRyYW5zaXRpb24oKSB7XG4gIHZhciBfdXBkYXRlU3RhdGUyID0gdXBkYXRlU3RhdGUoKSxcbiAgICAgIGlzUGVuZGluZyA9IF91cGRhdGVTdGF0ZTJbMF07XG5cbiAgdmFyIHN0YXJ0UmVmID0gdXBkYXRlUmVmKCk7XG4gIHZhciBzdGFydCA9IHN0YXJ0UmVmLmN1cnJlbnQ7XG4gIHJldHVybiBbc3RhcnQsIGlzUGVuZGluZ107XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyVHJhbnNpdGlvbigpIHtcbiAgdmFyIF9yZXJlbmRlclN0YXRlMiA9IHJlcmVuZGVyU3RhdGUoKSxcbiAgICAgIGlzUGVuZGluZyA9IF9yZXJlbmRlclN0YXRlMlswXTtcblxuICB2YXIgc3RhcnRSZWYgPSB1cGRhdGVSZWYoKTtcbiAgdmFyIHN0YXJ0ID0gc3RhcnRSZWYuY3VycmVudDtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxudmFyIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldElzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2VJbkRFVigpIHtcbiAge1xuICAgIHJldHVybiBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVihmaWJlcikge1xuICB7XG4gICAgLy8gVE9ETzogU2hvdWxkIHdhcm4gaW4gZWZmZWN0cyBhbmQgY2FsbGJhY2tzLCB0b29cbiAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgaWYgKGdldElzUmVuZGVyaW5nKCkgJiYgIWRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXJbbmFtZV0pIHtcbiAgICAgIGVycm9yKCdUaGUgb2JqZWN0IHBhc3NlZCBiYWNrIGZyb20gdXNlT3BhcXVlSWRlbnRpZmllciBpcyBtZWFudCB0byBiZSAnICsgJ3Bhc3NlZCB0aHJvdWdoIHRvIGF0dHJpYnV0ZXMgb25seS4gRG8gbm90IHJlYWQgdGhlICcgKyAndmFsdWUgZGlyZWN0bHkuJyk7XG5cbiAgICAgIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXJbbmFtZV0gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBtYWtlSWQgPSAgbWFrZUNsaWVudElkSW5ERVYuYmluZChudWxsLCB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYuYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKSkgO1xuXG4gIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgdmFyIGRpZFVwZ3JhZGUgPSBmYWxzZTtcbiAgICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuXG4gICAgdmFyIHJlYWRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghZGlkVXBncmFkZSkge1xuICAgICAgICAvLyBPbmx5IHVwZ3JhZGUgb25jZS4gVGhpcyB3b3JrcyBldmVuIGluc2lkZSB0aGUgcmVuZGVyIHBoYXNlIGJlY2F1c2VcbiAgICAgICAgLy8gdGhlIHVwZGF0ZSBpcyBhZGRlZCB0byBhIHNoYXJlZCBxdWV1ZSwgd2hpY2ggb3V0bGFzdHMgdGhlXG4gICAgICAgIC8vIGluLXByb2dyZXNzIHJlbmRlci5cbiAgICAgICAgZGlkVXBncmFkZSA9IHRydWU7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSB0cnVlO1xuICAgICAgICAgIHNldElkKG1ha2VJZCgpKTtcbiAgICAgICAgICBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gZmFsc2U7XG4gICAgICAgICAgd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWKGZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgb2JqZWN0IHBhc3NlZCBiYWNrIGZyb20gdXNlT3BhcXVlSWRlbnRpZmllciBpcyBtZWFudCB0byBiZSBwYXNzZWQgdGhyb3VnaCB0byBhdHRyaWJ1dGVzIG9ubHkuIERvIG5vdCByZWFkIHRoZSB2YWx1ZSBkaXJlY3RseS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBpZCA9IG1ha2VPcGFxdWVIeWRyYXRpbmdPYmplY3QocmVhZFZhbHVlKTtcbiAgICB2YXIgc2V0SWQgPSBtb3VudFN0YXRlKGlkKVsxXTtcblxuICAgIGlmICgoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IFVwZGF0ZSB8IFBhc3NpdmU7XG4gICAgICBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IFBhc3NpdmUkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRJZChtYWtlSWQoKSk7XG4gICAgICB9LCB1bmRlZmluZWQsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiBpZDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX2lkID0gbWFrZUlkKCk7XG5cbiAgICBtb3VudFN0YXRlKF9pZCk7XG4gICAgcmV0dXJuIF9pZDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgaWQgPSB1cGRhdGVTdGF0ZSgpWzBdO1xuICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIGlkID0gcmVyZW5kZXJTdGF0ZSgpWzBdO1xuICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQWN0aW9uKGZpYmVyLCBxdWV1ZSwgYWN0aW9uKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1szXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoXCJTdGF0ZSB1cGRhdGVzIGZyb20gdGhlIHVzZVN0YXRlKCkgYW5kIHVzZVJlZHVjZXIoKSBIb29rcyBkb24ndCBzdXBwb3J0IHRoZSBcIiArICdzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciAnICsgJ3JlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICBsYW5lOiBsYW5lLFxuICAgIGFjdGlvbjogYWN0aW9uLFxuICAgIGVhZ2VyUmVkdWNlcjogbnVsbCxcbiAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTsgLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cblxuICB2YXIgcGVuZGluZyA9IHF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgdXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgcGVuZGluZy5uZXh0ID0gdXBkYXRlO1xuICB9XG5cbiAgcXVldWUucGVuZGluZyA9IHVwZGF0ZTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoZmliZXIgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZSA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSkge1xuICAgIC8vIFRoaXMgaXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlLiBTdGFzaCBpdCBpbiBhIGxhemlseS1jcmVhdGVkIG1hcCBvZlxuICAgIC8vIHF1ZXVlIC0+IGxpbmtlZCBsaXN0IG9mIHVwZGF0ZXMuIEFmdGVyIHRoaXMgcmVuZGVyIHBhc3MsIHdlJ2xsIHJlc3RhcnRcbiAgICAvLyBhbmQgYXBwbHkgdGhlIHN0YXNoZWQgdXBkYXRlcyBvbiB0b3Agb2YgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZmliZXIubGFuZXMgPT09IE5vTGFuZXMgJiYgKGFsdGVybmF0ZSA9PT0gbnVsbCB8fCBhbHRlcm5hdGUubGFuZXMgPT09IE5vTGFuZXMpKSB7XG4gICAgICAvLyBUaGUgcXVldWUgaXMgY3VycmVudGx5IGVtcHR5LCB3aGljaCBtZWFucyB3ZSBjYW4gZWFnZXJseSBjb21wdXRlIHRoZVxuICAgICAgLy8gbmV4dCBzdGF0ZSBiZWZvcmUgZW50ZXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gSWYgdGhlIG5ldyBzdGF0ZSBpcyB0aGVcbiAgICAgIC8vIHNhbWUgYXMgdGhlIGN1cnJlbnQgc3RhdGUsIHdlIG1heSBiZSBhYmxlIHRvIGJhaWwgb3V0IGVudGlyZWx5LlxuICAgICAgdmFyIGxhc3RSZW5kZXJlZFJlZHVjZXIgPSBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyO1xuXG4gICAgICBpZiAobGFzdFJlbmRlcmVkUmVkdWNlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXI7XG5cbiAgICAgICAge1xuICAgICAgICAgIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlO1xuICAgICAgICAgIHZhciBlYWdlclN0YXRlID0gbGFzdFJlbmRlcmVkUmVkdWNlcihjdXJyZW50U3RhdGUsIGFjdGlvbik7IC8vIFN0YXNoIHRoZSBlYWdlcmx5IGNvbXB1dGVkIHN0YXRlLCBhbmQgdGhlIHJlZHVjZXIgdXNlZCB0byBjb21wdXRlXG4gICAgICAgICAgLy8gaXQsIG9uIHRoZSB1cGRhdGUgb2JqZWN0LiBJZiB0aGUgcmVkdWNlciBoYXNuJ3QgY2hhbmdlZCBieSB0aGVcbiAgICAgICAgICAvLyB0aW1lIHdlIGVudGVyIHRoZSByZW5kZXIgcGhhc2UsIHRoZW4gdGhlIGVhZ2VyIHN0YXRlIGNhbiBiZSB1c2VkXG4gICAgICAgICAgLy8gd2l0aG91dCBjYWxsaW5nIHRoZSByZWR1Y2VyIGFnYWluLlxuXG4gICAgICAgICAgdXBkYXRlLmVhZ2VyUmVkdWNlciA9IGxhc3RSZW5kZXJlZFJlZHVjZXI7XG4gICAgICAgICAgdXBkYXRlLmVhZ2VyU3RhdGUgPSBlYWdlclN0YXRlO1xuXG4gICAgICAgICAgaWYgKG9iamVjdElzKGVhZ2VyU3RhdGUsIGN1cnJlbnRTdGF0ZSkpIHtcbiAgICAgICAgICAgIC8vIEZhc3QgcGF0aC4gV2UgY2FuIGJhaWwgb3V0IHdpdGhvdXQgc2NoZWR1bGluZyBSZWFjdCB0byByZS1yZW5kZXIuXG4gICAgICAgICAgICAvLyBJdCdzIHN0aWxsIHBvc3NpYmxlIHRoYXQgd2UnbGwgbmVlZCB0byByZWJhc2UgdGhpcyB1cGRhdGUgbGF0ZXIsXG4gICAgICAgICAgICAvLyBpZiB0aGUgY29tcG9uZW50IHJlLXJlbmRlcnMgZm9yIGEgZGlmZmVyZW50IHJlYXNvbiBhbmQgYnkgdGhhdFxuICAgICAgICAgICAgLy8gdGltZSB0aGUgcmVkdWNlciBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7Ly8gU3VwcHJlc3MgdGhlIGVycm9yLiBJdCB3aWxsIHRocm93IGFnYWluIGluIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICAgIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChmaWJlcik7XG4gICAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRldihmaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9XG59XG5cbnZhciBDb250ZXh0T25seURpc3BhdGNoZXIgPSB7XG4gIHJlYWRDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2s6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlQ29udGV4dDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VMYXlvdXRFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTWVtbzogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VSZWR1Y2VyOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVJlZjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VTdGF0ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VEZWJ1Z1ZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZURlZmVycmVkVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlVHJhbnNpdGlvbjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VNdXRhYmxlU291cmNlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU9wYXF1ZUlkZW50aWZpZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG59O1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGw7XG5cbntcbiAgdmFyIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBlcnJvcignQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gIH07XG5cbiAgdmFyIHdhcm5JbnZhbGlkSG9va0FjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBlcnJvcignRG8gbm90IGNhbGwgSG9va3MgaW5zaWRlIHVzZUVmZmVjdCguLi4pLCB1c2VNZW1vKC4uLiksIG9yIG90aGVyIGJ1aWx0LWluIEhvb2tzLiAnICsgJ1lvdSBjYW4gb25seSBjYWxsIEhvb2tzIGF0IHRoZSB0b3AgbGV2ZWwgb2YgeW91ciBSZWFjdCBmdW5jdGlvbi4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzJyk7XG4gIH07XG5cbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xufVxuXG52YXIgbm93JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xudmFyIGNvbW1pdFRpbWUgPSAwO1xudmFyIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG5cbmZ1bmN0aW9uIGdldENvbW1pdFRpbWUoKSB7XG4gIHJldHVybiBjb21taXRUaW1lO1xufVxuXG5mdW5jdGlvbiByZWNvcmRDb21taXRUaW1lKCkge1xuXG4gIGNvbW1pdFRpbWUgPSBub3ckMSgpO1xufVxuXG5mdW5jdGlvbiBzdGFydFByb2ZpbGVyVGltZXIoZmliZXIpIHtcblxuICBwcm9maWxlclN0YXJ0VGltZSA9IG5vdyQxKCk7XG5cbiAgaWYgKGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA8IDApIHtcbiAgICBmaWJlci5hY3R1YWxTdGFydFRpbWUgPSBub3ckMSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKGZpYmVyKSB7XG5cbiAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShmaWJlciwgb3ZlcnJpZGVCYXNlVGltZSkge1xuXG4gIGlmIChwcm9maWxlclN0YXJ0VGltZSA+PSAwKSB7XG4gICAgdmFyIGVsYXBzZWRUaW1lID0gbm93JDEoKSAtIHByb2ZpbGVyU3RhcnRUaW1lO1xuICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuXG4gICAgaWYgKG92ZXJyaWRlQmFzZVRpbWUpIHtcbiAgICAgIGZpYmVyLnNlbGZCYXNlRHVyYXRpb24gPSBlbGFwc2VkVGltZTtcbiAgICB9XG5cbiAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24oZmliZXIpIHtcbiAgLy8gVHJhbnNmZXIgdGltZSBzcGVudCByZW5kZXJpbmcgdGhlc2UgY2hpbGRyZW4gc28gd2UgZG9uJ3QgbG9zZSBpdFxuICAvLyBhZnRlciB3ZSByZXJlbmRlci4gVGhpcyBpcyB1c2VkIGFzIGEgaGVscGVyIGluIHNwZWNpYWwgY2FzZXNcbiAgLy8gd2hlcmUgd2Ugc2hvdWxkIGNvdW50IHRoZSB3b3JrIG9mIG11bHRpcGxlIHBhc3Nlcy5cbiAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkKSB7XG4gICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5BYm91dEJhZENsYXNzO1xudmFyIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzO1xudmFyIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHM7XG52YXIgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXI7XG52YXIgZGlkV2FybkFib3V0VGFpbE9wdGlvbnM7XG5cbntcbiAgZGlkV2FybkFib3V0QmFkQ2xhc3MgPSB7fTtcbiAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnMgPSB7fTtcbiAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlciA9IHt9O1xuICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucyA9IHt9O1xufVxuXG5mdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgaXMgYSBmcmVzaCBuZXcgY29tcG9uZW50IHRoYXQgaGFzbid0IGJlZW4gcmVuZGVyZWQgeWV0LCB3ZVxuICAgIC8vIHdvbid0IHVwZGF0ZSBpdHMgY2hpbGQgc2V0IGJ5IGFwcGx5aW5nIG1pbmltYWwgc2lkZS1lZmZlY3RzLiBJbnN0ZWFkLFxuICAgIC8vIHdlIHdpbGwgYWRkIHRoZW0gYWxsIHRvIHRoZSBjaGlsZCBiZWZvcmUgaXQgZ2V0cyByZW5kZXJlZC4gVGhhdCBtZWFuc1xuICAgIC8vIHdlIGNhbiBvcHRpbWl6ZSB0aGlzIHJlY29uY2lsaWF0aW9uIHBhc3MgYnkgbm90IHRyYWNraW5nIHNpZGUtZWZmZWN0cy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZSBjdXJyZW50IGNoaWxkIGlzIHRoZSBzYW1lIGFzIHRoZSB3b3JrIGluIHByb2dyZXNzLCBpdCBtZWFucyB0aGF0XG4gICAgLy8gd2UgaGF2ZW4ndCB5ZXQgc3RhcnRlZCBhbnkgd29yayBvbiB0aGVzZSBjaGlsZHJlbi4gVGhlcmVmb3JlLCB3ZSB1c2VcbiAgICAvLyB0aGUgY2xvbmUgYWxnb3JpdGhtIHRvIGNyZWF0ZSBhIGNvcHkgb2YgYWxsIHRoZSBjdXJyZW50IGNoaWxkcmVuLlxuICAgIC8vIElmIHdlIGhhZCBhbnkgcHJvZ3Jlc3NlZCB3b3JrIGFscmVhZHksIHRoYXQgaXMgaW52YWxpZCBhdCB0aGlzIHBvaW50IHNvXG4gICAgLy8gbGV0J3MgdGhyb3cgaXQgb3V0LlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3JrIG9mIHJlY29uY2lsZUNoaWxkcmVuLiBJdCdzIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2VcbiAgLy8gd2FudCB0byByZWNvbmNpbGUgd2l0aG91dCBtYXRjaGluZyBhZ2FpbnN0IHRoZSBleGlzdGluZyBzZXQuIFRoaXMgaGFzIHRoZVxuICAvLyBlZmZlY3Qgb2YgYWxsIGN1cnJlbnQgY2hpbGRyZW4gYmVpbmcgdW5tb3VudGVkOyBldmVuIGlmIHRoZSB0eXBlIGFuZCBrZXlcbiAgLy8gYXJlIHRoZSBzYW1lLCB0aGUgb2xkIGNoaWxkIGlzIHVubW91bnRlZCBhbmQgYSBuZXcgY2hpbGQgaXMgY3JlYXRlZC5cbiAgLy9cbiAgLy8gVG8gZG8gdGhpcywgd2UncmUgZ29pbmcgdG8gZ28gdGhyb3VnaCB0aGUgcmVjb25jaWxlIGFsZ29yaXRobSB0d2ljZS4gSW5cbiAgLy8gdGhlIGZpcnN0IHBhc3MsIHdlIHNjaGVkdWxlIGEgZGVsZXRpb24gZm9yIGFsbCB0aGUgY3VycmVudCBjaGlsZHJlbiBieVxuICAvLyBwYXNzaW5nIG51bGwuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTsgLy8gSW4gdGhlIHNlY29uZCBwYXNzLCB3ZSBtb3VudCB0aGUgbmV3IGNoaWxkcmVuLiBUaGUgdHJpY2sgaGVyZSBpcyB0aGF0IHdlXG4gIC8vIHBhc3MgbnVsbCBpbiBwbGFjZSBvZiB3aGVyZSB3ZSB1c3VhbGx5IHBhc3MgdGhlIGN1cnJlbnQgY2hpbGQgc2V0LiBUaGlzIGhhc1xuICAvLyB0aGUgZWZmZWN0IG9mIHJlbW91bnRpbmcgYWxsIGNoaWxkcmVuIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVpclxuICAvLyBpZGVudGl0aWVzIG1hdGNoLlxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVGb3J3YXJkUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogY3VycmVudCBjYW4gYmUgbm9uLW51bGwgaGVyZSBldmVuIGlmIHRoZSBjb21wb25lbnRcbiAgLy8gaGFzbid0IHlldCBtb3VudGVkLiBUaGlzIGhhcHBlbnMgYWZ0ZXIgdGhlIGZpcnN0IHJlbmRlciBzdXNwZW5kcy5cbiAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcmVuZGVyID0gQ29tcG9uZW50LnJlbmRlcjtcbiAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjsgLy8gVGhlIHJlc3QgaXMgYSBmb3JrIG9mIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50XG5cbiAgdmFyIG5leHRDaGlsZHJlbjtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXIsIG5leHRQcm9wcywgcmVmLCByZW5kZXJMYW5lcyk7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlciwgbmV4dFByb3BzLCByZWYsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFkaWRSZWNlaXZlVXBkYXRlKSB7XG4gICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHZhciB0eXBlID0gQ29tcG9uZW50LnR5cGU7XG5cbiAgICBpZiAoaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSAmJiBDb21wb25lbnQuY29tcGFyZSA9PT0gbnVsbCAmJiAvLyBTaW1wbGVNZW1vQ29tcG9uZW50IGNvZGVwYXRoIGRvZXNuJ3QgcmVzb2x2ZSBvdXRlciBwcm9wcyBlaXRoZXIuXG4gICAgQ29tcG9uZW50LmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVzb2x2ZWRUeXBlID0gdHlwZTtcblxuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSk7XG4gICAgICB9IC8vIElmIHRoaXMgaXMgYSBwbGFpbiBmdW5jdGlvbiBjb21wb25lbnQgd2l0aG91dCBkZWZhdWx0IHByb3BzLFxuICAgICAgLy8gYW5kIHdpdGggb25seSB0aGUgZGVmYXVsdCBzaGFsbG93IGNvbXBhcmlzb24sIHdlIHVwZ3JhZGUgaXRcbiAgICAgIC8vIHRvIGEgU2ltcGxlTWVtb0NvbXBvbmVudCB0byBhbGxvdyBmYXN0IHBhdGggdXBkYXRlcy5cblxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBTaW1wbGVNZW1vQ29tcG9uZW50O1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVkVHlwZTtcblxuICAgICAge1xuICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIHR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVzb2x2ZWRUeXBlLCBuZXh0UHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUodHlwZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhDb21wb25lbnQudHlwZSwgbnVsbCwgbmV4dFByb3BzLCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MubW9kZSwgcmVuZGVyTGFuZXMpO1xuICAgIGNoaWxkLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICBjaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGNoaWxkO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHtcbiAgICB2YXIgX3R5cGUgPSBDb21wb25lbnQudHlwZTtcbiAgICB2YXIgX2lubmVyUHJvcFR5cGVzID0gX3R5cGUucHJvcFR5cGVzO1xuXG4gICAgaWYgKF9pbm5lclByb3BUeXBlcykge1xuICAgICAgLy8gSW5uZXIgbWVtbyBjb21wb25lbnQgcHJvcHMgYXJlbid0IGN1cnJlbnRseSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudC5cbiAgICAgIC8vIFdlIGNvdWxkIG1vdmUgaXQgdGhlcmUsIGJ1dCB3ZSdkIHN0aWxsIG5lZWQgdGhpcyBmb3IgbGF6eSBjb2RlIHBhdGguXG4gICAgICBjaGVja1Byb3BUeXBlcyhfaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShfdHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjdXJyZW50Q2hpbGQgPSBjdXJyZW50LmNoaWxkOyAvLyBUaGlzIGlzIGFsd2F5cyBleGFjdGx5IG9uZSBjaGlsZFxuXG4gIGlmICghaW5jbHVkZXNTb21lTGFuZSh1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgLy8gVGhpcyB3aWxsIGJlIHRoZSBwcm9wcyB3aXRoIHJlc29sdmVkIGRlZmF1bHRQcm9wcyxcbiAgICAvLyB1bmxpa2UgY3VycmVudC5tZW1vaXplZFByb3BzIHdoaWNoIHdpbGwgYmUgdGhlIHVucmVzb2x2ZWQgb25lcy5cbiAgICB2YXIgcHJldlByb3BzID0gY3VycmVudENoaWxkLm1lbW9pemVkUHJvcHM7IC8vIERlZmF1bHQgdG8gc2hhbGxvdyBjb21wYXJpc29uXG5cbiAgICB2YXIgY29tcGFyZSA9IENvbXBvbmVudC5jb21wYXJlO1xuICAgIGNvbXBhcmUgPSBjb21wYXJlICE9PSBudWxsID8gY29tcGFyZSA6IHNoYWxsb3dFcXVhbDtcblxuICAgIGlmIChjb21wYXJlKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJiBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmKSB7XG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIG5leHRQcm9wcyk7XG4gIG5ld0NoaWxkLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG4gIHJldHVybiBuZXdDaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAvLyBoYXNuJ3QgeWV0IG1vdW50ZWQuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBpbm5lciByZW5kZXIgc3VzcGVuZHMuXG4gIC8vIFdlJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZpbmUgb3IgY2FuIGNhdXNlIGlzc3Vlcy5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBvdXRlck1lbW9UeXBlID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGU7XG5cbiAgICAgIGlmIChvdXRlck1lbW9UeXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgLy8gV2Ugd2FybiB3aGVuIHlvdSBkZWZpbmUgcHJvcFR5cGVzIG9uIGxhenkoKVxuICAgICAgICAvLyBzbyBsZXQncyBqdXN0IHNraXAgb3ZlciBpdCB0byBmaW5kIG1lbW8oKSBvdXRlciB3cmFwcGVyLlxuICAgICAgICAvLyBJbm5lciBwcm9wcyBmb3IgbWVtbyBhcmUgdmFsaWRhdGVkIGxhdGVyLlxuICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IG91dGVyTWVtb1R5cGU7XG4gICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgb3V0ZXJNZW1vVHlwZSA9IGluaXQocGF5bG9hZCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBvdXRlck1lbW9UeXBlID0gbnVsbDtcbiAgICAgICAgfSAvLyBJbm5lciBwcm9wVHlwZXMgd2lsbCBiZSB2YWxpZGF0ZWQgaW4gdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCBwYXRoLlxuXG5cbiAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gb3V0ZXJNZW1vVHlwZSAmJiBvdXRlck1lbW9UeXBlLnByb3BUeXBlcztcblxuICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCAoU2ltcGxlTWVtb0NvbXBvbmVudCBoYXMgbm8gZGVmYXVsdFByb3BzKVxuICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShvdXRlck1lbW9UeXBlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICBpZiAoc2hhbGxvd0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJiBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmICYmICggLy8gUHJldmVudCBiYWlsb3V0IGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkLlxuICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID09PSBjdXJyZW50LnR5cGUgKSkge1xuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmVzKSkge1xuICAgICAgICAvLyBUaGUgcGVuZGluZyBsYW5lcyB3ZXJlIGNsZWFyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBiZWdpbldvcmsuIFdlJ3JlXG4gICAgICAgIC8vIGFib3V0IHRvIGJhaWwgb3V0LCBidXQgdGhlcmUgbWlnaHQgYmUgb3RoZXIgbGFuZXMgdGhhdCB3ZXJlbid0XG4gICAgICAgIC8vIGluY2x1ZGVkIGluIHRoZSBjdXJyZW50IHJlbmRlci4gVXN1YWxseSwgdGhlIHByaW9yaXR5IGxldmVsIG9mIHRoZVxuICAgICAgICAvLyByZW1haW5pbmcgdXBkYXRlcyBpcyBhY2N1bWxhdGVkIGR1cmluZyB0aGUgZXZhbHVhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gY29tcG9uZW50IChpLmUuIHdoZW4gcHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlKS4gQnV0IHNpbmNlIHNpbmNlXG4gICAgICAgIC8vIHdlJ3JlIGJhaWxpbmcgb3V0IGVhcmx5ICp3aXRob3V0KiBldmFsdWF0aW5nIHRoZSBjb21wb25lbnQsIHdlIG5lZWRcbiAgICAgICAgLy8gdG8gYWNjb3VudCBmb3IgaXQgaGVyZSwgdG9vLiBSZXNldCB0byB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgZmliZXIuXG4gICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBhcHBsaWVzIHRvIFNpbXBsZU1lbW9Db21wb25lbnQsIG5vdCBNZW1vQ29tcG9uZW50LFxuICAgICAgICAvLyBiZWNhdXNlIGEgTWVtb0NvbXBvbmVudCBmaWJlciBkb2VzIG5vdCBoYXZlIGhvb2tzIG9yIGFuIHVwZGF0ZSBxdWV1ZTtcbiAgICAgICAgLy8gcmF0aGVyLCBpdCB3cmFwcyBhcm91bmQgYW4gaW5uZXIgY29tcG9uZW50LCB3aGljaCBtYXkgb3IgbWF5IG5vdFxuICAgICAgICAvLyBjb250YWlucyBob29rcy5cbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGUgcmVzZXQgYXQgaW4gYmVnaW5Xb3JrIG91dCBvZiB0aGUgY29tbW9uIHBhdGggc28gdGhhdFxuICAgICAgICAvLyB0aGlzIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSBpZiAoKGN1cnJlbnQuZmxhZ3MgJiBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgb25seSBleGlzdHMgZm9yIGxlZ2FjeSBtb2RlLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkyMTYuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YXIgcHJldlN0YXRlID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG5cbiAgaWYgKG5leHRQcm9wcy5tb2RlID09PSAnaGlkZGVuJyB8fCBuZXh0UHJvcHMubW9kZSA9PT0gJ3Vuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nJykge1xuICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAvLyBJbiBsZWdhY3kgc3luYyBtb2RlLCBkb24ndCBkZWZlciB0aGUgc3VidHJlZS4gUmVuZGVyIGl0IG5vdy5cbiAgICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2hhdCB3ZSBzaG91bGQgZG8gaW4gQmxvY2tpbmcgbW9kZS5cbiAgICAgIHZhciBuZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogTm9MYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2UgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKSkge1xuICAgICAgdmFyIG5leHRCYXNlTGFuZXM7XG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHByZXZCYXNlTGFuZXMgPSBwcmV2U3RhdGUuYmFzZUxhbmVzO1xuICAgICAgICBuZXh0QmFzZUxhbmVzID0gbWVyZ2VMYW5lcyhwcmV2QmFzZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0QmFzZUxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgICB9IC8vIFNjaGVkdWxlIHRoaXMgZmliZXIgdG8gcmUtcmVuZGVyIGF0IG9mZnNjcmVlbiBwcmlvcml0eS4gVGhlbiBiYWlsb3V0LlxuXG5cbiAgICAgIHtcbiAgICAgICAgbWFya1NwYXduZWRXb3JrKE9mZnNjcmVlbkxhbmUpO1xuICAgICAgfVxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBsYW5lVG9MYW5lcyhPZmZzY3JlZW5MYW5lKTtcbiAgICAgIHZhciBfbmV4dFN0YXRlID0ge1xuICAgICAgICBiYXNlTGFuZXM6IG5leHRCYXNlTGFuZXNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gX25leHRTdGF0ZTsgLy8gV2UncmUgYWJvdXQgdG8gYmFpbCBvdXQsIGJ1dCB3ZSBuZWVkIHRvIHB1c2ggdGhpcyB0byB0aGUgc3RhY2sgYW55d2F5XG4gICAgICAvLyB0byBhdm9pZCBhIHB1c2gvcG9wIG1pc2FsaWdubWVudC5cblxuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBuZXh0QmFzZUxhbmVzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW5kZXJpbmcgYXQgb2Zmc2NyZWVuLCBzbyB3ZSBjYW4gY2xlYXIgdGhlIGJhc2UgbGFuZXMuXG4gICAgICB2YXIgX25leHRTdGF0ZTIgPSB7XG4gICAgICAgIGJhc2VMYW5lczogTm9MYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBfbmV4dFN0YXRlMjsgLy8gUHVzaCB0aGUgbGFuZXMgdGhhdCB3ZXJlIHNraXBwZWQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuXG4gICAgICB2YXIgc3VidHJlZVJlbmRlckxhbmVzID0gcHJldlN0YXRlICE9PSBudWxsID8gcHJldlN0YXRlLmJhc2VMYW5lcyA6IHJlbmRlckxhbmVzO1xuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgX3N1YnRyZWVSZW5kZXJMYW5lcztcblxuICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgIF9zdWJ0cmVlUmVuZGVyTGFuZXMgPSBtZXJnZUxhbmVzKHByZXZTdGF0ZS5iYXNlTGFuZXMsIHJlbmRlckxhbmVzKTsgLy8gU2luY2Ugd2UncmUgbm90IGhpZGRlbiBhbnltb3JlLCByZXNldCB0aGUgc3RhdGVcblxuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIHdlcmVuJ3QgcHJldmlvdXNseSBoaWRkZW4sIGFuZCB3ZSBzdGlsbCBhcmVuJ3QsIHNvIHRoZXJlJ3Mgbm90aGluZ1xuICAgICAgLy8gc3BlY2lhbCB0byBkby4gTmVlZCB0byBwdXNoIHRvIHRoZSBzdGFjayByZWdhcmRsZXNzLCB0aG91Z2gsIHRvIGF2b2lkXG4gICAgICAvLyBhIHB1c2gvcG9wIG1pc2FsaWdubWVudC5cbiAgICAgIF9zdWJ0cmVlUmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICB9XG5cbiAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIF9zdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59IC8vIE5vdGU6IFRoZXNlIGhhcHBlbiB0byBoYXZlIGlkZW50aWNhbCBiZWdpbiBwaGFzZXMsIGZvciBub3cuIFdlIHNob3VsZG4ndCBob2xkXG4vLyBvdXJzZWx2ZXMgdG8gdGhpcyBjb25zdHJhaW50LCB0aG91Z2guIElmIHRoZSBiZWhhdmlvciBkaXZlcmdlcywgd2Ugc2hvdWxkXG4vLyBmb3JrIHRoZSBmdW5jdGlvbi5cblxuXG52YXIgdXBkYXRlTGVnYWN5SGlkZGVuQ29tcG9uZW50ID0gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50O1xuXG5mdW5jdGlvbiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVQcm9maWxlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTsgLy8gUmVzZXQgZWZmZWN0IGR1cmF0aW9ucyBmb3IgdGhlIG5leHQgZXZlbnR1YWwgZWZmZWN0IHBoYXNlLlxuICAgIC8vIFRoZXNlIGFyZSByZXNldCBkdXJpbmcgcmVuZGVyIHRvIGFsbG93IHRoZSBEZXZUb29scyBjb21taXQgaG9vayBhIGNoYW5jZSB0byByZWFkIHRoZW0sXG5cbiAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gIH1cblxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsICYmIHJlZiAhPT0gbnVsbCB8fCBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQucmVmICE9PSByZWYpIHtcbiAgICAvLyBTY2hlZHVsZSBhIFJlZiBlZmZlY3RcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWY7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgY29udGV4dDtcblxuICB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlKTtcbiAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBuZXh0Q2hpbGRyZW47XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFkaWRSZWNlaXZlVXBkYXRlKSB7XG4gICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cblxuICB2YXIgaGFzQ29udGV4dDtcblxuICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2Uge1xuICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgdmFyIHNob3VsZFVwZGF0ZTtcblxuICBpZiAoaW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gQSBjbGFzcyBjb21wb25lbnQgd2l0aG91dCBhbiBpbnN0YW5jZSBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWRcbiAgICAgIC8vIGluc2lkZSBhIG5vbi1jb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0b1xuICAgICAgLy8gdHJlYXQgaXQgbGlrZSBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5XG4gICAgICAvLyBjb21taXR0ZWQuIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICAgIH0gLy8gSW4gdGhlIGluaXRpYWwgcGFzcyB3ZSBtaWdodCBuZWVkIHRvIGNvbnN0cnVjdCB0aGUgaW5zdGFuY2UuXG5cblxuICAgIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKTtcbiAgICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgc2hvdWxkVXBkYXRlID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSW4gYSByZXN1bWUsIHdlJ2xsIGFscmVhZHkgaGF2ZSBhbiBpbnN0YW5jZSB3ZSBjYW4gcmV1c2UuXG4gICAgc2hvdWxkVXBkYXRlID0gcmVzdW1lTW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFVwZGF0ZSA9IHVwZGF0ZUNsYXNzSW5zdGFuY2UoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgbmV4dFVuaXRPZldvcmsgPSBmaW5pc2hDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBzaG91bGRVcGRhdGUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgdmFyIGluc3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoc2hvdWxkVXBkYXRlICYmIGluc3QucHJvcHMgIT09IG5leHRQcm9wcykge1xuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgIGVycm9yKCdJdCBsb29rcyBsaWtlICVzIGlzIHJlYXNzaWduaW5nIGl0cyBvd24gYHRoaXMucHJvcHNgIHdoaWxlIHJlbmRlcmluZy4gJyArICdUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGNhbiBsZWFkIHRvIGNvbmZ1c2luZyBidWdzLicsIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ2EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0VW5pdE9mV29yaztcbn1cblxuZnVuY3Rpb24gZmluaXNoQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgc2hvdWxkVXBkYXRlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcykge1xuICAvLyBSZWZzIHNob3VsZCB1cGRhdGUgZXZlbiBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZVxuICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIGRpZENhcHR1cmVFcnJvciA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gIGlmICghc2hvdWxkVXBkYXRlICYmICFkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBDb250ZXh0IHByb3ZpZGVycyBzaG91bGQgZGVmZXIgdG8gc0NVIGZvciByZW5kZXJpbmdcbiAgICBpZiAoaGFzQ29udGV4dCkge1xuICAgICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTsgLy8gUmVyZW5kZXJcblxuICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgdmFyIG5leHRDaGlsZHJlbjtcblxuICBpZiAoZGlkQ2FwdHVyZUVycm9yICYmIHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYgd2UgY2FwdHVyZWQgYW4gZXJyb3IsIGJ1dCBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgaXMgbm90IGRlZmluZWQsXG4gICAgLy8gdW5tb3VudCBhbGwgdGhlIGNoaWxkcmVuLiBjb21wb25lbnREaWRDYXRjaCB3aWxsIHNjaGVkdWxlIGFuIHVwZGF0ZSB0b1xuICAgIC8vIHJlLXJlbmRlciBhIGZhbGxiYWNrLiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCB3ZSBtaWdyYXRlIGV2ZXJ5b25lIHRvXG4gICAgLy8gdGhlIG5ldyBBUEkuXG4gICAgLy8gVE9ETzogV2FybiBpbiBhIGZ1dHVyZSByZWxlYXNlLlxuICAgIG5leHRDaGlsZHJlbiA9IG51bGw7XG5cbiAgICB7XG4gICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZygpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICAgIG5leHRDaGlsZHJlbiA9IGluc3RhbmNlLnJlbmRlcigpO1xuXG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbnN0YW5jZS5yZW5kZXIoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgZGlkQ2FwdHVyZUVycm9yKSB7XG4gICAgLy8gSWYgd2UncmUgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZWNvbmNpbGUgd2l0aG91dCByZXVzaW5nIGFueSBvZlxuICAgIC8vIHRoZSBleGlzdGluZyBjaGlsZHJlbi4gQ29uY2VwdHVhbGx5LCB0aGUgbm9ybWFsIGNoaWxkcmVuIGFuZCB0aGUgY2hpbGRyZW5cbiAgICAvLyB0aGF0IGFyZSBzaG93biBvbiBlcnJvciBhcmUgdHdvIGRpZmZlcmVudCBzZXRzLCBzbyB3ZSBzaG91bGRuJ3QgcmV1c2VcbiAgICAvLyBub3JtYWwgY2hpbGRyZW4gZXZlbiBpZiB0aGVpciBpZGVudGl0aWVzIG1hdGNoLlxuICAgIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSAvLyBNZW1vaXplIHN0YXRlIHVzaW5nIHRoZSB2YWx1ZXMgd2UganVzdCB1c2VkIHRvIHJlbmRlci5cbiAgLy8gVE9ETzogUmVzdHJ1Y3R1cmUgc28gd2UgbmV2ZXIgcmVhZCB2YWx1ZXMgZnJvbSB0aGUgaW5zdGFuY2UuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7IC8vIFRoZSBjb250ZXh0IG1pZ2h0IGhhdmUgY2hhbmdlZCBzbyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGl0LlxuXG4gIGlmIChoYXNDb250ZXh0KSB7XG4gICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAocm9vdC5wZW5kaW5nQ29udGV4dCkge1xuICAgIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MsIHJvb3QucGVuZGluZ0NvbnRleHQsIHJvb3QucGVuZGluZ0NvbnRleHQgIT09IHJvb3QuY29udGV4dCk7XG4gIH0gZWxzZSBpZiAocm9vdC5jb250ZXh0KSB7XG4gICAgLy8gU2hvdWxkIGFsd2F5cyBiZSBzZXRcbiAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LmNvbnRleHQsIGZhbHNlKTtcbiAgfVxuXG4gIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCByb290LmNvbnRhaW5lckluZm8pO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0Um9vdChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICghKGN1cnJlbnQgIT09IG51bGwgJiYgdXBkYXRlUXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSWYgdGhlIHJvb3QgZG9lcyBub3QgaGF2ZSBhbiB1cGRhdGVRdWV1ZSwgd2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBiYWlsZWQgb3V0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBwcmV2Q2hpbGRyZW4gPSBwcmV2U3RhdGUgIT09IG51bGwgPyBwcmV2U3RhdGUuZWxlbWVudCA6IG51bGw7XG4gIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgbnVsbCwgcmVuZGVyTGFuZXMpO1xuICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRTdGF0ZS5lbGVtZW50O1xuXG4gIGlmIChuZXh0Q2hpbGRyZW4gPT09IHByZXZDaGlsZHJlbikge1xuICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIHJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHJvb3QuaHlkcmF0ZSAmJiBlbnRlckh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKSkge1xuICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IGN1cnJlbnQgY2hpbGRyZW4gdGhpcyBtaWdodCBiZSB0aGUgZmlyc3QgcGFzcy5cbiAgICAvLyBXZSBhbHdheXMgdHJ5IHRvIGh5ZHJhdGUuIElmIHRoaXMgaXNuJ3QgYSBoeWRyYXRpb24gcGFzcyB0aGVyZSB3b24ndFxuICAgIC8vIGJlIGFueSBjaGlsZHJlbiB0byBoeWRyYXRlIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIHRoaW5nIGFzXG4gICAgLy8gbm90IGh5ZHJhdGluZy5cbiAgICB7XG4gICAgICB2YXIgbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YTtcblxuICAgICAgaWYgKG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgIT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGFbaV07XG4gICAgICAgICAgdmFyIHZlcnNpb24gPSBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhW2kgKyAxXTtcbiAgICAgICAgICBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSwgdmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hpbGQgPSBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGNoaWxkO1xuICAgIHZhciBub2RlID0gY2hpbGQ7XG5cbiAgICB3aGlsZSAobm9kZSkge1xuICAgICAgLy8gTWFyayBlYWNoIGNoaWxkIGFzIGh5ZHJhdGluZy4gVGhpcyBpcyBhIGZhc3QgcGF0aCB0byBrbm93IHdoZXRoZXIgdGhpc1xuICAgICAgLy8gdHJlZSBpcyBwYXJ0IG9mIGEgaHlkcmF0aW5nIHRyZWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBjaGlsZFxuICAgICAgLy8gbm9kZSBoYXMgZnVsbHkgbW91bnRlZCB5ZXQsIGFuZCBmb3Igc2NoZWR1bGluZyBldmVudCByZXBsYXlpbmcuXG4gICAgICAvLyBDb25jZXB0dWFsbHkgdGhpcyBpcyBzaW1pbGFyIHRvIFBsYWNlbWVudCBpbiB0aGF0IGEgbmV3IHN1YnRyZWUgaXNcbiAgICAgIC8vIGluc2VydGVkIGludG8gdGhlIFJlYWN0IHRyZWUgaGVyZS4gSXQganVzdCBoYXBwZW5zIHRvIG5vdCBuZWVkIERPTVxuICAgICAgLy8gbXV0YXRpb25zIGJlY2F1c2UgaXQgYWxyZWFkeSBleGlzdHMuXG4gICAgICBub2RlLmZsYWdzID0gbm9kZS5mbGFncyAmIH5QbGFjZW1lbnQgfCBIeWRyYXRpbmc7XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UgcmVzZXQgaHlkcmF0aW9uIHN0YXRlIGluIGNhc2Ugd2UgYWJvcnRlZCBhbmQgcmVzdW1lZCBhbm90aGVyXG4gICAgLy8gcm9vdC5cbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpO1xuICB9XG5cbiAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcHJldlByb3BzID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG51bGw7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhciBpc0RpcmVjdFRleHRDaGlsZCA9IHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIG5leHRQcm9wcyk7XG5cbiAgaWYgKGlzRGlyZWN0VGV4dENoaWxkKSB7XG4gICAgLy8gV2Ugc3BlY2lhbCBjYXNlIGEgZGlyZWN0IHRleHQgY2hpbGQgb2YgYSBob3N0IG5vZGUuIFRoaXMgaXMgYSBjb21tb25cbiAgICAvLyBjYXNlLiBXZSB3b24ndCBoYW5kbGUgaXQgYXMgYSByZWlmaWVkIGNoaWxkLiBXZSB3aWxsIGluc3RlYWQgaGFuZGxlXG4gICAgLy8gdGhpcyBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudCB0aGF0IGFsc28gaGFzIGFjY2VzcyB0byB0aGlzIHByb3AuIFRoYXRcbiAgICAvLyBhdm9pZHMgYWxsb2NhdGluZyBhbm90aGVyIEhvc3RUZXh0IGZpYmVyIGFuZCB0cmF2ZXJzaW5nIGl0LlxuICAgIG5leHRDaGlsZHJlbiA9IG51bGw7XG4gIH0gZWxzZSBpZiAocHJldlByb3BzICE9PSBudWxsICYmIHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIHByZXZQcm9wcykpIHtcbiAgICAvLyBJZiB3ZSdyZSBzd2l0Y2hpbmcgZnJvbSBhIGRpcmVjdCB0ZXh0IGNoaWxkIHRvIGEgbm9ybWFsIGNoaWxkLCBvciB0b1xuICAgIC8vIGVtcHR5LCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHRoZSB0ZXh0IGNvbnRlbnQgdG8gYmUgcmVzZXQuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ29udGVudFJlc2V0O1xuICB9XG5cbiAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0VGV4dChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcbiAgfSAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIFRoaXMgaXMgdGVybWluYWwuIFdlJ2xsIGRvIHRoZSBjb21wbGV0aW9uIHN0ZXBcbiAgLy8gaW1tZWRpYXRlbHkgYWZ0ZXIuXG5cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbW91bnRMYXp5Q29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZWxlbWVudFR5cGUsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBIGxhenkgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIGxhenlDb21wb25lbnQgPSBlbGVtZW50VHlwZTtcbiAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG4gIHZhciBDb21wb25lbnQgPSBpbml0KHBheWxvYWQpOyAvLyBTdG9yZSB0aGUgdW53cmFwcGVkIGNvbXBvbmVudCBpbiB0aGUgdHlwZS5cblxuICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50O1xuICB2YXIgcmVzb2x2ZWRUYWcgPSB3b3JrSW5Qcm9ncmVzcy50YWcgPSByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpO1xuICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBwcm9wcyk7XG4gIHZhciBjaGlsZDtcblxuICBzd2l0Y2ggKHJlc29sdmVkVGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRm9yd2FyZFJlZihudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCByZXNvbHZlZFByb3BzLCAvLyBSZXNvbHZlZCBmb3Igb3V0ZXIgb25seVxuICAgICAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVNZW1vQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LnR5cGUsIHJlc29sdmVkUHJvcHMpLCAvLyBUaGUgaW5uZXIgdHlwZSBjYW4gaGF2ZSBkZWZhdWx0cyB0b29cbiAgICAgICAgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICB9XG5cbiAgdmFyIGhpbnQgPSAnJztcblxuICB7XG4gICAgaWYgKENvbXBvbmVudCAhPT0gbnVsbCAmJiB0eXBlb2YgQ29tcG9uZW50ID09PSAnb2JqZWN0JyAmJiBDb21wb25lbnQuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgaGludCA9ICcgRGlkIHlvdSB3cmFwIGEgY29tcG9uZW50IGluIFJlYWN0LmxhenkoKSBtb3JlIHRoYW4gb25jZT8nO1xuICAgIH1cbiAgfSAvLyBUaGlzIG1lc3NhZ2UgaW50ZW50aW9uYWxseSBkb2Vzbid0IG1lbnRpb24gRm9yd2FyZFJlZiBvciBNZW1vQ29tcG9uZW50XG4gIC8vIGJlY2F1c2UgdGhlIGZhY3QgdGhhdCBpdCdzIGEgc2VwYXJhdGUgdHlwZSBvZiB3b3JrIGlzIGFuXG4gIC8vIGltcGxlbWVudGF0aW9uIGRldGFpbC5cblxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZC4gUmVjZWl2ZWQgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG86IFwiICsgQ29tcG9uZW50ICsgXCIuIExhenkgZWxlbWVudCB0eXBlIG11c3QgcmVzb2x2ZSB0byBhIGNsYXNzIG9yIGZ1bmN0aW9uLlwiICsgaGludCApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBbiBpbmNvbXBsZXRlIGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH0gLy8gUHJvbW90ZSB0aGUgZmliZXIgdG8gYSBjbGFzcyBhbmQgdHJ5IHJlbmRlcmluZyBhZ2Fpbi5cblxuXG4gIHdvcmtJblByb2dyZXNzLnRhZyA9IENsYXNzQ29tcG9uZW50OyAvLyBUaGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGEgZm9yayBvZiBgdXBkYXRlQ2xhc3NDb21wb25lbnRgXG4gIC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG4gIHZhciBoYXNDb250ZXh0O1xuXG4gIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gZWxzZSB7XG4gICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpO1xuICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiBmaW5pc2hDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKF9jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gQW4gaW5kZXRlcm1pbmF0ZSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgY29udGV4dDtcblxuICB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBmYWxzZSk7XG4gICAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgdmFsdWU7XG5cbiAge1xuICAgIGlmIChDb21wb25lbnQucHJvdG90eXBlICYmIHR5cGVvZiBDb21wb25lbnQucHJvdG90eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEJhZENsYXNzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKFwiVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBoYXZlIGEgcmVuZGVyIG1ldGhvZCwgYnV0IGRvZXNuJ3QgZXh0ZW5kIFJlYWN0LkNvbXBvbmVudC4gXCIgKyAnVGhpcyBpcyBsaWtlbHkgdG8gY2F1c2UgZXJyb3JzLiBDaGFuZ2UgJXMgdG8gZXh0ZW5kIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dEJhZENsYXNzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKHdvcmtJblByb2dyZXNzLCBudWxsKTtcbiAgICB9XG5cbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICB2YWx1ZSA9IHJlbmRlcldpdGhIb29rcyhudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuXG4gIHtcbiAgICAvLyBTdXBwb3J0IGZvciBtb2R1bGUgY29tcG9uZW50cyBpcyBkZXByZWNhdGVkIGFuZCBpcyByZW1vdmVkIGJlaGluZCBhIGZsYWcuXG4gICAgLy8gV2hldGhlciBvciBub3QgaXQgd291bGQgY3Jhc2ggbGF0ZXIsIHdlIHdhbnQgdG8gc2hvdyBhIGdvb2QgbWVzc2FnZSBpbiBERVYgZmlyc3QuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb24gY29tcG9uZW50IHRoYXQgcmV0dXJucyBhIGNsYXNzIGluc3RhbmNlLiAnICsgJ0NoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gJyArIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArIFwiYCVzLnByb3RvdHlwZSA9IFJlYWN0LkNvbXBvbmVudC5wcm90b3R5cGVgLiBEb24ndCB1c2UgYW4gYXJyb3cgZnVuY3Rpb24gc2luY2UgaXQgXCIgKyAnY2Fubm90IGJlIGNhbGxlZCB3aXRoIGBuZXdgIGJ5IFJlYWN0LicsIF9jb21wb25lbnROYW1lLCBfY29tcG9uZW50TmFtZSwgX2NvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIC8vIFJ1biB0aGVzZSBjaGVja3MgaW4gcHJvZHVjdGlvbiBvbmx5IGlmIHRoZSBmbGFnIGlzIG9mZi5cbiAgLy8gRXZlbnR1YWxseSB3ZSdsbCBkZWxldGUgdGhpcyBicmFuY2ggYWx0b2dldGhlci5cbiAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lMiA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTJdKSB7XG4gICAgICAgIGVycm9yKCdUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb24gY29tcG9uZW50IHRoYXQgcmV0dXJucyBhIGNsYXNzIGluc3RhbmNlLiAnICsgJ0NoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gJyArIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArIFwiYCVzLnByb3RvdHlwZSA9IFJlYWN0LkNvbXBvbmVudC5wcm90b3R5cGVgLiBEb24ndCB1c2UgYW4gYXJyb3cgZnVuY3Rpb24gc2luY2UgaXQgXCIgKyAnY2Fubm90IGJlIGNhbGxlZCB3aXRoIGBuZXdgIGJ5IFJlYWN0LicsIF9jb21wb25lbnROYW1lMiwgX2NvbXBvbmVudE5hbWUyLCBfY29tcG9uZW50TmFtZTIpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWUyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSAvLyBQcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIGNsYXNzIGluc3RhbmNlXG5cblxuICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IENsYXNzQ29tcG9uZW50OyAvLyBUaHJvdyBvdXQgYW55IGhvb2tzIHRoYXQgd2VyZSB1c2VkLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsOyAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAgIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgICB2YXIgaGFzQ29udGV4dCA9IGZhbHNlO1xuXG4gICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gdmFsdWUuc3RhdGUgIT09IG51bGwgJiYgdmFsdWUuc3RhdGUgIT09IHVuZGVmaW5lZCA/IHZhbHVlLnN0YXRlIDogbnVsbDtcbiAgICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICAgIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuXG4gICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgcHJvcHMpO1xuICAgIH1cblxuICAgIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgdmFsdWUpO1xuICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBmaW5pc2hDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHJvY2VlZCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbiBjb21wb25lbnRcbiAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBGdW5jdGlvbkNvbXBvbmVudDtcblxuICAgIHtcblxuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsdWUgPSByZW5kZXJXaXRoSG9va3MobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlY29uY2lsZUNoaWxkcmVuKG51bGwsIHdvcmtJblByb2dyZXNzLCB2YWx1ZSwgcmVuZGVyTGFuZXMpO1xuXG4gICAge1xuICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCkge1xuICB7XG4gICAgaWYgKENvbXBvbmVudCkge1xuICAgICAgaWYgKENvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcykge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogY2hpbGRDb250ZXh0VHlwZXMgY2Fubm90IGJlIGRlZmluZWQgb24gYSBmdW5jdGlvbiBjb21wb25lbnQuJywgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuICAgICAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG5cbiAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgICAgfVxuXG4gICAgICB2YXIgd2FybmluZ0tleSA9IG93bmVyTmFtZSB8fCB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJRCB8fCAnJztcbiAgICAgIHZhciBkZWJ1Z1NvdXJjZSA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZTtcblxuICAgICAgaWYgKGRlYnVnU291cmNlKSB7XG4gICAgICAgIHdhcm5pbmdLZXkgPSBkZWJ1Z1NvdXJjZS5maWxlTmFtZSArICc6JyArIGRlYnVnU291cmNlLmxpbmVOdW1iZXI7XG4gICAgICB9XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmc1t3YXJuaW5nS2V5XSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ0Z1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGJlIGdpdmVuIHJlZnMuICcgKyAnQXR0ZW1wdHMgdG8gYWNjZXNzIHRoaXMgcmVmIHdpbGwgZmFpbC4gJyArICdEaWQgeW91IG1lYW4gdG8gdXNlIFJlYWN0LmZvcndhcmRSZWYoKT8lcycsIGluZm8pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lMyA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTNdKSB7XG4gICAgICAgIGVycm9yKCclczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuJywgX2NvbXBvbmVudE5hbWUzKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgQ29tcG9uZW50LmNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBDb21wb25lbnQuY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTQgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTRdKSB7XG4gICAgICAgIGVycm9yKCclczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBjb250ZXh0VHlwZS4nLCBfY29tcG9uZW50TmFtZTQpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIFNVU1BFTkRFRF9NQVJLRVIgPSB7XG4gIGRlaHlkcmF0ZWQ6IG51bGwsXG4gIHJldHJ5TGFuZTogTm9MYW5lXG59O1xuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlTGFuZXM6IHJlbmRlckxhbmVzXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcykge1xuICByZXR1cm4ge1xuICAgIGJhc2VMYW5lczogbWVyZ2VMYW5lcyhwcmV2T2Zmc2NyZWVuU3RhdGUuYmFzZUxhbmVzLCByZW5kZXJMYW5lcylcbiAgfTtcbn0gLy8gVE9ETzogUHJvYmFibHkgc2hvdWxkIGlubGluZSB0aGlzIGJhY2tcblxuXG5mdW5jdGlvbiBzaG91bGRSZW1haW5PbkZhbGxiYWNrKHN1c3BlbnNlQ29udGV4dCwgY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIC8vIElmIHdlJ3JlIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0b1xuICAvLyByZW1haW4gb24gdGhhdCBmYWxsYmFjayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGNvbnRlbnQgaGFzIHJlc29sdmVkLlxuICAvLyBGb3IgZXhhbXBsZSwgU3VzcGVuc2VMaXN0IGNvb3JkaW5hdGVzIHdoZW4gbmVzdGVkIGNvbnRlbnQgYXBwZWFycy5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChzdXNwZW5zZVN0YXRlID09PSBudWxsKSB7XG4gICAgICAvLyBDdXJyZW50bHkgc2hvd2luZyBjb250ZW50LiBEb24ndCBoaWRlIGl0LCBldmVuIGlmIEZvcmNlU3VzcGVuc2VGYWxsYWNrXG4gICAgICAvLyBpcyB0cnVlLiBNb3JlIHByZWNpc2UgbmFtZSBtaWdodCBiZSBcIkZvcmNlUmVtYWluU3VzcGVuc2VGYWxsYmFja1wiLlxuICAgICAgLy8gTm90ZTogVGhpcyBpcyBhIGZhY3RvcmluZyBzbWVsbC4gQ2FuJ3QgcmVtYWluIG9uIGEgZmFsbGJhY2sgaWYgdGhlcmUnc1xuICAgICAgLy8gbm8gZmFsbGJhY2sgdG8gcmVtYWluIG9uLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSAvLyBOb3QgY3VycmVudGx5IHNob3dpbmcgY29udGVudC4gQ29uc3VsdCB0aGUgU3VzcGVuc2UgY29udGV4dC5cblxuXG4gIHJldHVybiBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBTaG91bGQgbm90IHJlbW92ZSByZW5kZXIgbGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCBkdXJpbmcgdGhpcyByZW5kZXJcbiAgcmV0dXJuIHJlbW92ZUxhbmVzKGN1cnJlbnQuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wczsgLy8gVGhpcyBpcyB1c2VkIGJ5IERldlRvb2xzIHRvIGZvcmNlIGEgYm91bmRhcnkgdG8gc3VzcGVuZC5cblxuICB7XG4gICAgaWYgKHNob3VsZFN1c3BlbmQod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBzaG93RmFsbGJhY2sgPSBmYWxzZTtcbiAgdmFyIGRpZFN1c3BlbmQgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICBpZiAoZGlkU3VzcGVuZCB8fCBzaG91bGRSZW1haW5PbkZhbGxiYWNrKHN1c3BlbnNlQ29udGV4dCwgY3VycmVudCkpIHtcbiAgICAvLyBTb21ldGhpbmcgaW4gdGhpcyBib3VuZGFyeSdzIHN1YnRyZWUgYWxyZWFkeSBzdXNwZW5kZWQuIFN3aXRjaCB0b1xuICAgIC8vIHJlbmRlcmluZyB0aGUgZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgc2hvd0ZhbGxiYWNrID0gdHJ1ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+RGlkQ2FwdHVyZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBBdHRlbXB0aW5nIHRoZSBtYWluIGNvbnRlbnRcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBuZXcgbW91bnQgb3IgdGhpcyBib3VuZGFyeSBpcyBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBzdGF0ZS5cbiAgICAgIC8vIE1hcmsgdGhpcyBzdWJ0cmVlIGNvbnRleHQgYXMgaGF2aW5nIGF0IGxlYXN0IG9uZSBpbnZpc2libGUgcGFyZW50IHRoYXQgY291bGRcbiAgICAgIC8vIGhhbmRsZSB0aGUgZmFsbGJhY2sgc3RhdGUuXG4gICAgICAvLyBCb3VuZGFyaWVzIHdpdGhvdXQgZmFsbGJhY2tzIG9yIHNob3VsZCBiZSBhdm9pZGVkIGFyZSBub3QgY29uc2lkZXJlZCBzaW5jZVxuICAgICAgLy8gdGhleSBjYW5ub3QgaGFuZGxlIHByZWZlcnJlZCBmYWxsYmFjayBzdGF0ZXMuXG4gICAgICBpZiAobmV4dFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgbmV4dFByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlKSB7XG4gICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IGFkZFN1YnRyZWVTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7IC8vIE9LLCB0aGUgbmV4dCBwYXJ0IGlzIGNvbmZ1c2luZy4gV2UncmUgYWJvdXQgdG8gcmVjb25jaWxlIHRoZSBTdXNwZW5zZVxuICAvLyBib3VuZGFyeSdzIGNoaWxkcmVuLiBUaGlzIGludm9sdmVzIHNvbWUgY3VzdG9tIHJlY29uY2lsYXRpb24gbG9naWMuIFR3b1xuICAvLyBtYWluIHJlYXNvbnMgdGhpcyBpcyBzbyBjb21wbGljYXRlZC5cbiAgLy9cbiAgLy8gRmlyc3QsIExlZ2FjeSBNb2RlIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhlXG4gIC8vIHByaW1hcnkgdHJlZSB3aWxsIGNvbW1pdCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUsIHNvIHdoZW4gd2UgZG8gdGhlXG4gIC8vIHNlY29uZCBwYXNzIHRvIHJlbmRlciB0aGUgZmFsbGJhY2ssIHdlIGRvIHNvbWUgZXhjZWVkaW5nbHksIHVoLCBjbGV2ZXJcbiAgLy8gaGFja3MgdG8gbWFrZSB0aGF0IG5vdCB0b3RhbGx5IGJyZWFrLiBMaWtlIHRyYW5zZmVycmluZyBlZmZlY3RzIGFuZFxuICAvLyBkZWxldGlvbnMgZnJvbSBoaWRkZW4gdHJlZS4gSW4gQ29uY3VycmVudCBNb2RlLCBpdCdzIG11Y2ggc2ltcGxlcixcbiAgLy8gYmVjYXVzZSB3ZSBiYWlsb3V0IG9uIHRoZSBwcmltYXJ5IHRyZWUgY29tcGxldGVseSBhbmQgbGVhdmUgaXQgaW4gaXRzIG9sZFxuICAvLyBzdGF0ZSwgbm8gZWZmZWN0cy4gU2FtZSBhcyB3aGF0IHdlIGRvIGZvciBPZmZzY3JlZW4gKGV4Y2VwdCB0aGF0XG4gIC8vIE9mZnNjcmVlbiBkb2Vzbid0IGhhdmUgdGhlIGZpcnN0IHJlbmRlciBwYXNzKS5cbiAgLy9cbiAgLy8gU2Vjb25kIGlzIGh5ZHJhdGlvbi4gRHVyaW5nIGh5ZHJhdGlvbiwgdGhlIFN1c3BlbnNlIGZpYmVyIGhhcyBhIHNsaWdodGx5XG4gIC8vIGRpZmZlcmVudCBsYXlvdXQsIHdoZXJlIHRoZSBjaGlsZCBwb2ludHMgdG8gYSBkZWh5ZHJhdGVkIGZyYWdtZW50LCB3aGljaFxuICAvLyBjb250YWlucyB0aGUgRE9NIHJlbmRlcmVkIGJ5IHRoZSBzZXJ2ZXIuXG4gIC8vXG4gIC8vIFRoaXJkLCBldmVuIGlmIHlvdSBzZXQgYWxsIHRoYXQgYXNpZGUsIFN1c3BlbnNlIGlzIGxpa2UgZXJyb3IgYm91bmRhcmllcyBpblxuICAvLyB0aGF0IHdlIGZpcnN0IHdlIHRyeSB0byByZW5kZXIgb25lIHRyZWUsIGFuZCBpZiB0aGF0IGZhaWxzLCB3ZSByZW5kZXIgYWdhaW5cbiAgLy8gYW5kIHN3aXRjaCB0byBhIGRpZmZlcmVudCB0cmVlLiBMaWtlIGEgdHJ5L2NhdGNoIGJsb2NrLiBTbyB3ZSBoYXZlIHRvIHRyYWNrXG4gIC8vIHdoaWNoIGJyYW5jaCB3ZSdyZSBjdXJyZW50bHkgcmVuZGVyaW5nLiBJZGVhbGx5IHdlIHdvdWxkIG1vZGVsIHRoaXMgdXNpbmdcbiAgLy8gYSBzdGFjay5cblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICAvLyBJZiB3ZSdyZSBjdXJyZW50bHkgaHlkcmF0aW5nLCB0cnkgdG8gaHlkcmF0ZSB0aGlzIGJvdW5kYXJ5LlxuICAgIC8vIEJ1dCBvbmx5IGlmIHRoaXMgaGFzIGEgZmFsbGJhY2suXG4gICAgaWYgKG5leHRQcm9wcy5mYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7IC8vIFRoaXMgY291bGQndmUgYmVlbiBhIGRlaHlkcmF0ZWQgc3VzcGVuc2UgY29tcG9uZW50LlxuICAgIH1cblxuICAgIHZhciBuZXh0UHJpbWFyeUNoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBuZXh0RmFsbGJhY2tDaGlsZHJlbiA9IG5leHRQcm9wcy5mYWxsYmFjaztcblxuICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgIHZhciBmYWxsYmFja0ZyYWdtZW50ID0gbW91bnRTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIG5leHRGYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50Lm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICByZXR1cm4gZmFsbGJhY2tGcmFnbWVudDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcHMudW5zdGFibGVfZXhwZWN0ZWRMb2FkVGltZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBDUFUtYm91bmQgdHJlZS4gU2tpcCB0aGlzIHRyZWUgYW5kIHNob3cgYSBwbGFjZWhvbGRlciB0b1xuICAgICAgLy8gdW5ibG9jayB0aGUgc3Vycm91bmRpbmcgY29udGVudC4gVGhlbiBpbW1lZGlhdGVseSByZXRyeSBhZnRlciB0aGVcbiAgICAgIC8vIGluaXRpYWwgY29tbWl0LlxuICAgICAgdmFyIF9mYWxsYmFja0ZyYWdtZW50ID0gbW91bnRTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIG5leHRGYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudC5tZW1vaXplZFN0YXRlID0gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpcyB0b1xuICAgICAgLy8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zIG9mXG4gICAgICAvLyBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsIGl0J3NcbiAgICAgIC8vIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXMgY29tbWl0dGVkLiBJZlxuICAgICAgLy8gaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlIHBhaW50ZWQuXG4gICAgICAvLyBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuIFdlIGNhbiB1c2UgYW55XG4gICAgICAvLyBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZyBzaW5jZSB3ZSdyZSBsZWF2aW5nXG4gICAgICAvLyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgIHtcbiAgICAgICAgbWFya1NwYXduZWRXb3JrKFNvbWVSZXRyeUxhbmUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2ZhbGxiYWNrRnJhZ21lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYW4gdXBkYXRlLlxuICAgIC8vIElmIHRoZSBjdXJyZW50IGZpYmVyIGhhcyBhIFN1c3BlbnNlU3RhdGUsIHRoYXQgbWVhbnMgaXQncyBhbHJlYWR5IHNob3dpbmdcbiAgICAvLyBhIGZhbGxiYWNrLlxuICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG5cbiAgICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgICAgdmFyIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjIgPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjIgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQgPSB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiwgX25leHRGYWxsYmFja0NoaWxkcmVuMiwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgIHZhciBwcmV2T2Zmc2NyZWVuU3RhdGUgPSBjdXJyZW50LmNoaWxkLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMubWVtb2l6ZWRTdGF0ZSA9IHByZXZPZmZzY3JlZW5TdGF0ZSA9PT0gbnVsbCA/IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykgOiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzLmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgICByZXR1cm4gX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjMgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDQgPSB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW4zLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY3VycmVudCB0cmVlIGlzIG5vdCBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjay5cbiAgICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgICAgLy8gVGltZWQgb3V0LlxuICAgICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkcmVuMyA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuNCA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDIgPSB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuNCwgX25leHRGYWxsYmFja0NoaWxkcmVuMywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ1ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgIHZhciBfcHJldk9mZnNjcmVlblN0YXRlID0gY3VycmVudC5jaGlsZC5tZW1vaXplZFN0YXRlO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ1Lm1lbW9pemVkU3RhdGUgPSBfcHJldk9mZnNjcmVlblN0YXRlID09PSBudWxsID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSA6IHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUoX3ByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ1LmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCByZW5kZXJMYW5lcyk7IC8vIFNraXAgdGhlIHByaW1hcnkgY2hpbGRyZW4sIGFuZCBjb250aW51ZSB3b3JraW5nIG9uIHRoZVxuICAgICAgICAvLyBmYWxsYmFjayBjaGlsZHJlbi5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgcmV0dXJuIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU3RpbGwgaGF2ZW4ndCB0aW1lZCBvdXQuIENvbnRpbnVlIHJlbmRlcmluZyB0aGUgY2hpbGRyZW4sIGxpa2Ugd2VcbiAgICAgICAgLy8gbm9ybWFsbHkgZG8uXG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjUgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDYgPSB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW41LCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ2O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICd2aXNpYmxlJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwcmltYXJ5Q2hpbGRQcm9wcywgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCBmYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAnaGlkZGVuJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUgJiYgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIC8vIEluIGxlZ2FjeSBtb2RlLCB3ZSBjb21taXQgdGhlIHByaW1hcnkgdHJlZSBhcyBpZiBpdCBzdWNjZXNzZnVsbHlcbiAgICAvLyBjb21wbGV0ZWQsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5wZW5kaW5nUHJvcHMgPSBwcmltYXJ5Q2hpbGRQcm9wcztcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAvLyBSZXNldCB0aGUgZHVyYXRpb25zIGZyb20gdGhlIGZpcnN0IHBhc3Mgc28gdGhleSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlXG4gICAgICAvLyBmaW5hbCBhbW91bnRzLiBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUsIHNpbmNlIHdlJ3JlIGludGVudGlvbmFsbHlcbiAgICAgIC8vIG5vdCBtZWFzdXJpbmcgcGFydCBvZiB0aGUgcmVuZGVyIHBoYXNlLCBidXQgdGhpcyBtYWtlcyBpdCBtYXRjaCB3aGF0IHdlXG4gICAgICAvLyBkbyBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gICAgfVxuXG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICB9IGVsc2Uge1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHByaW1hcnlDaGlsZFByb3BzLCBtb2RlLCBOb0xhbmVzLCBudWxsKTtcbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIH1cblxuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnQsIG9mZnNjcmVlblByb3BzKSB7XG4gIC8vIFRoZSBwcm9wcyBhcmd1bWVudCB0byBgY3JlYXRlV29ya0luUHJvZ3Jlc3NgIGlzIGBhbnlgIHR5cGVkLCBzbyB3ZSB1c2UgdGhpc1xuICAvLyB3cmFwcGVyIGZ1bmN0aW9uIHRvIGNvbnN0cmFpbiBpdC5cbiAgcmV0dXJuIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIG9mZnNjcmVlblByb3BzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHZhciBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmc7XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LCB7XG4gICAgbW9kZTogJ3Zpc2libGUnLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfSk7XG5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubGFuZXMgPSByZW5kZXJMYW5lcztcbiAgfVxuXG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gbnVsbDtcblxuICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIC8vIERlbGV0ZSB0aGUgZmFsbGJhY2sgY2hpbGQgZnJhZ21lbnRcbiAgICBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQuZmxhZ3MgPSBEZWxldGlvbjtcbiAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgZmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZztcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICdoaWRkZW4nLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuXG4gIGlmICggLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAvLyBjb21wbGV0ZWQsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuICAobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSAmJiAvLyBNYWtlIHN1cmUgd2UncmUgb24gdGhlIHNlY29uZCBwYXNzLCBpLmUuIHRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50IHdhc1xuICAvLyBhbHJlYWR5IGNsb25lZC4gSW4gbGVnYWN5IG1vZGUsIHRoZSBvbmx5IGNhc2Ugd2hlcmUgdGhpcyBpc24ndCB0cnVlIGlzXG4gIC8vIHdoZW4gRGV2VG9vbHMgZm9yY2VzIHVzIHRvIGRpc3BsYXkgYSBmYWxsYmFjazsgd2Ugc2tpcCB0aGUgZmlyc3QgcmVuZGVyXG4gIC8vIHBhc3MgZW50aXJlbHkgYW5kIGdvIHN0cmFpZ2h0IHRvIHJlbmRlcmluZyB0aGUgZmFsbGJhY2suIChJbiBDb25jdXJyZW50XG4gIC8vIE1vZGUsIFN1c3BlbnNlTGlzdCBjYW4gYWxzbyB0cmlnZ2VyIHRoaXMgc2NlbmFyaW8sIGJ1dCB0aGlzIGlzIGEgbGVnYWN5LVxuICAvLyBvbmx5IGNvZGVwYXRoLilcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgIT09IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCkge1xuICAgIHZhciBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50O1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBkdXJhdGlvbnMgZnJvbSB0aGUgZmlyc3QgcGFzcyBzbyB0aGV5IGFyZW4ndCBpbmNsdWRlZCBpbiB0aGVcbiAgICAgIC8vIGZpbmFsIGFtb3VudHMuIFRoaXMgc2VlbXMgY291bnRlcmludHVpdGl2ZSwgc2luY2Ugd2UncmUgaW50ZW50aW9uYWxseVxuICAgICAgLy8gbm90IG1lYXN1cmluZyBwYXJ0IG9mIHRoZSByZW5kZXIgcGhhc2UsIGJ1dCB0aGlzIG1ha2VzIGl0IG1hdGNoIHdoYXQgd2VcbiAgICAgIC8vIGRvIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgIH0gLy8gVGhlIGZhbGxiYWNrIGZpYmVyIHdhcyBhZGRlZCBhcyBhIGRlbGV0aW9uIGVmZmVjdCBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuXG4gICAgLy8gSG93ZXZlciwgc2luY2Ugd2UncmUgZ29pbmcgdG8gcmVtYWluIG9uIHRoZSBmYWxsYmFjaywgd2Ugbm8gbG9uZ2VyIHdhbnRcbiAgICAvLyB0byBkZWxldGUgaXQuIFNvIHdlIG5lZWQgdG8gcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QuIERlbGV0aW9ucyBhcmUgc3RvcmVkXG4gICAgLy8gb24gdGhlIHNhbWUgbGlzdCBhcyBlZmZlY3RzLiBXZSB3YW50IHRvIGtlZXAgdGhlIGVmZmVjdHMgZnJvbSB0aGUgcHJpbWFyeVxuICAgIC8vIHRyZWUuIFNvIHdlIGNvcHkgdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQncyBlZmZlY3QgbGlzdCwgd2hpY2ggZG9lcyBub3RcbiAgICAvLyBpbmNsdWRlIHRoZSBmYWxsYmFjayBkZWxldGlvbiBlZmZlY3QuXG5cblxuICAgIHZhciBwcm9ncmVzc2VkTGFzdEVmZmVjdCA9IHByaW1hcnlDaGlsZEZyYWdtZW50Lmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAocHJvZ3Jlc3NlZExhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQuZmlyc3RFZmZlY3Q7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcHJvZ3Jlc3NlZExhc3RFZmZlY3Q7XG4gICAgICBwcm9ncmVzc2VkTGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETzogUmVzZXQgdGhpcyBzb21ld2hlcmUgZWxzZT8gTG9sIGxlZ2FjeSBtb2RlIGlzIHNvIHdlaXJkLlxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCwgcHJpbWFyeUNoaWxkUHJvcHMpO1xuICB9XG5cbiAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQsIGZhbGxiYWNrQ2hpbGRyZW4pO1xuICB9IGVsc2Uge1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTsgLy8gTmVlZHMgYSBwbGFjZW1lbnQgZWZmZWN0IGJlY2F1c2UgdGhlIHBhcmVudCAodGhlIFN1c3BlbnNlIGJvdW5kYXJ5KSBhbHJlYWR5XG4gICAgLy8gbW91bnRlZCBidXQgdGhpcyBpcyBhIG5ldyBmaWJlci5cblxuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVdvcmtPbkZpYmVyKGZpYmVyLCByZW5kZXJMYW5lcykge1xuICBmaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoZmliZXIubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChmaWJlci5yZXR1cm4sIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gcHJvcGFnYXRlU3VzcGVuc2VDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBmaXJzdENoaWxkLCByZW5kZXJMYW5lcykge1xuICAvLyBNYXJrIGFueSBTdXNwZW5zZSBib3VuZGFyaWVzIHdpdGggZmFsbGJhY2tzIGFzIGhhdmluZyB3b3JrIHRvIGRvLlxuICAvLyBJZiB0aGV5IHdlcmUgcHJldmlvdXNseSBmb3JjZWQgaW50byBmYWxsYmFja3MsIHRoZXkgbWF5IG5vdyBiZSBhYmxlXG4gIC8vIHRvIHVuYmxvY2suXG4gIHZhciBub2RlID0gZmlyc3RDaGlsZDtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IG5vZGUubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHNjaGVkdWxlV29ya09uRmliZXIobm9kZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlTGlzdENvbXBvbmVudCkge1xuICAgICAgLy8gSWYgdGhlIHRhaWwgaXMgaGlkZGVuIHRoZXJlIG1pZ2h0IG5vdCBiZSBhbiBTdXNwZW5zZSBib3VuZGFyaWVzXG4gICAgICAvLyB0byBzY2hlZHVsZSB3b3JrIG9uLiBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBzY2hlZHVsZSBpdCBvbiB0aGVcbiAgICAgIC8vIGxpc3QgaXRzZWxmLlxuICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB0cmF2ZXJzZSB0byB0aGUgY2hpbGRyZW4gb2YgdGhlIGxpc3Qgc2luY2VcbiAgICAgIC8vIHRoZSBsaXN0IHdpbGwgcHJvcGFnYXRlIHRoZSBjaGFuZ2Ugd2hlbiBpdCByZXJlbmRlcnMuXG4gICAgICBzY2hlZHVsZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kTGFzdENvbnRlbnRSb3coZmlyc3RDaGlsZCkge1xuICAvLyBUaGlzIGlzIGdvaW5nIHRvIGZpbmQgdGhlIGxhc3Qgcm93IGFtb25nIHRoZXNlIGNoaWxkcmVuIHRoYXQgaXMgYWxyZWFkeVxuICAvLyBzaG93aW5nIGNvbnRlbnQgb24gdGhlIHNjcmVlbiwgYXMgb3Bwb3NlZCB0byBiZWluZyBpbiBmYWxsYmFjayBzdGF0ZSBvclxuICAvLyBuZXcuIElmIGEgcm93IGhhcyBtdWx0aXBsZSBTdXNwZW5zZSBib3VuZGFyaWVzLCBhbnkgb2YgdGhlbSBiZWluZyBpbiB0aGVcbiAgLy8gZmFsbGJhY2sgc3RhdGUsIGNvdW50cyBhcyB0aGUgd2hvbGUgcm93IGJlaW5nIGluIGEgZmFsbGJhY2sgc3RhdGUuXG4gIC8vIE5vdGUgdGhhdCB0aGUgXCJyb3dzXCIgd2lsbCBiZSB3b3JrSW5Qcm9ncmVzcywgYnV0IGFueSBuZXN0ZWQgY2hpbGRyZW5cbiAgLy8gd2lsbCBzdGlsbCBiZSBjdXJyZW50IHNpbmNlIHdlIGhhdmVuJ3QgcmVuZGVyZWQgdGhlbSB5ZXQuIFRoZSBtb3VudGVkXG4gIC8vIG9yZGVyIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIG5ldyBvcmRlci4gV2UgdXNlIHRoZSBuZXcgb3JkZXIuXG4gIHZhciByb3cgPSBmaXJzdENoaWxkO1xuICB2YXIgbGFzdENvbnRlbnRSb3cgPSBudWxsO1xuXG4gIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgIGlmIChjdXJyZW50Um93ICE9PSBudWxsICYmIGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50Um93KSA9PT0gbnVsbCkge1xuICAgICAgbGFzdENvbnRlbnRSb3cgPSByb3c7XG4gICAgfVxuXG4gICAgcm93ID0gcm93LnNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbGFzdENvbnRlbnRSb3c7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmV2ZWFsT3JkZXIocmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmIChyZXZlYWxPcmRlciAhPT0gdW5kZWZpbmVkICYmIHJldmVhbE9yZGVyICE9PSAnZm9yd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAnYmFja3dhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ3RvZ2V0aGVyJyAmJiAhZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdKSB7XG4gICAgICBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcltyZXZlYWxPcmRlcl0gPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIHJldmVhbE9yZGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjYXNlICd0b2dldGhlcic6XG4gICAgICAgICAgY2FzZSAnZm9yd2FyZHMnOlxuICAgICAgICAgIGNhc2UgJ2JhY2t3YXJkcyc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnVXNlIGxvd2VyY2FzZSBcIiVzXCIgaW5zdGVhZC4nLCByZXZlYWxPcmRlciwgcmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdmb3J3YXJkJzpcbiAgICAgICAgICBjYXNlICdiYWNrd2FyZCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnUmVhY3QgdXNlcyB0aGUgLXMgc3VmZml4IGluIHRoZSBzcGVsbGluZy4gVXNlIFwiJXNzXCIgaW5zdGVhZC4nLCByZXZlYWxPcmRlciwgcmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLCByZXZlYWxPcmRlcik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignJXMgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsIHJldmVhbE9yZGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUYWlsT3B0aW9ucyh0YWlsTW9kZSwgcmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmICh0YWlsTW9kZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0pIHtcbiAgICAgIGlmICh0YWlsTW9kZSAhPT0gJ2NvbGxhcHNlZCcgJiYgdGFpbE1vZGUgIT09ICdoaWRkZW4nKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHRhaWwgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJjb2xsYXBzZWRcIiBvciBcImhpZGRlblwiPycsIHRhaWxNb2RlKTtcbiAgICAgIH0gZWxzZSBpZiAocmV2ZWFsT3JkZXIgIT09ICdmb3J3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICdiYWNrd2FyZHMnKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJzxTdXNwZW5zZUxpc3QgdGFpbD1cIiVzXCIgLz4gaXMgb25seSB2YWxpZCBpZiByZXZlYWxPcmRlciBpcyAnICsgJ1wiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBzcGVjaWZ5IHJldmVhbE9yZGVyPVwiZm9yd2FyZHNcIj8nLCB0YWlsTW9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRTbG90LCBpbmRleCkge1xuICB7XG4gICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGNoaWxkU2xvdCk7XG4gICAgdmFyIGlzSXRlcmFibGUgPSAhaXNBcnJheSAmJiB0eXBlb2YgZ2V0SXRlcmF0b3JGbihjaGlsZFNsb3QpID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKGlzQXJyYXkgfHwgaXNJdGVyYWJsZSkge1xuICAgICAgdmFyIHR5cGUgPSBpc0FycmF5ID8gJ2FycmF5JyA6ICdpdGVyYWJsZSc7XG5cbiAgICAgIGVycm9yKCdBIG5lc3RlZCAlcyB3YXMgcGFzc2VkIHRvIHJvdyAjJXMgaW4gPFN1c3BlbnNlTGlzdCAvPi4gV3JhcCBpdCBpbiAnICsgJ2FuIGFkZGl0aW9uYWwgU3VzcGVuc2VMaXN0IHRvIGNvbmZpZ3VyZSBpdHMgcmV2ZWFsT3JkZXI6ICcgKyAnPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+IC4uLiAnICsgJzxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPnslc308L1N1c3BlbnNlTGlzdD4gLi4uICcgKyAnPC9TdXNwZW5zZUxpc3Q+JywgdHlwZSwgaW5kZXgsIHR5cGUpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4oY2hpbGRyZW4sIHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAoKHJldmVhbE9yZGVyID09PSAnZm9yd2FyZHMnIHx8IHJldmVhbE9yZGVyID09PSAnYmFja3dhcmRzJykgJiYgY2hpbGRyZW4gIT09IHVuZGVmaW5lZCAmJiBjaGlsZHJlbiAhPT0gbnVsbCAmJiBjaGlsZHJlbiAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkcmVuW2ldLCBpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2hpbGRyZW5JdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChjaGlsZHJlbik7XG5cbiAgICAgICAgICBpZiAoY2hpbGRyZW5JdGVyYXRvcikge1xuICAgICAgICAgICAgdmFyIHN0ZXAgPSBjaGlsZHJlbkl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIHZhciBfaSA9IDA7XG5cbiAgICAgICAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKHN0ZXAudmFsdWUsIF9pKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIF9pKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yKCdBIHNpbmdsZSByb3cgd2FzIHBhc3NlZCB0byBhIDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9XCIlc1wiIC8+LiAnICsgJ1RoaXMgaXMgbm90IHVzZWZ1bCBzaW5jZSBpdCBuZWVkcyBtdWx0aXBsZSByb3dzLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBwYXNzIG11bHRpcGxlIGNoaWxkcmVuIG9yIGFuIGFycmF5PycsIHJldmVhbE9yZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGlzQmFja3dhcmRzLCB0YWlsLCBsYXN0Q29udGVudFJvdywgdGFpbE1vZGUsIGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmcpIHtcbiAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocmVuZGVyU3RhdGUgPT09IG51bGwpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgaXNCYWNrd2FyZHM6IGlzQmFja3dhcmRzLFxuICAgICAgcmVuZGVyaW5nOiBudWxsLFxuICAgICAgcmVuZGVyaW5nU3RhcnRUaW1lOiAwLFxuICAgICAgbGFzdDogbGFzdENvbnRlbnRSb3csXG4gICAgICB0YWlsOiB0YWlsLFxuICAgICAgdGFpbE1vZGU6IHRhaWxNb2RlLFxuICAgICAgbGFzdEVmZmVjdDogbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZ1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgY2FuIHJldXNlIHRoZSBleGlzdGluZyBvYmplY3QgZnJvbSBwcmV2aW91cyByZW5kZXJzLlxuICAgIHJlbmRlclN0YXRlLmlzQmFja3dhcmRzID0gaXNCYWNrd2FyZHM7XG4gICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbnVsbDtcbiAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSAwO1xuICAgIHJlbmRlclN0YXRlLmxhc3QgPSBsYXN0Q29udGVudFJvdztcbiAgICByZW5kZXJTdGF0ZS50YWlsID0gdGFpbDtcbiAgICByZW5kZXJTdGF0ZS50YWlsTW9kZSA9IHRhaWxNb2RlO1xuICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nO1xuICB9XG59IC8vIFRoaXMgY2FuIGVuZCB1cCByZW5kZXJpbmcgdGhpcyBjb21wb25lbnQgbXVsdGlwbGUgcGFzc2VzLlxuLy8gVGhlIGZpcnN0IHBhc3Mgc3BsaXRzIHRoZSBjaGlsZHJlbiBmaWJlcnMgaW50byB0d28gc2V0cy4gQSBoZWFkIGFuZCB0YWlsLlxuLy8gV2UgZmlyc3QgcmVuZGVyIHRoZSBoZWFkLiBJZiBhbnl0aGluZyBpcyBpbiBmYWxsYmFjayBzdGF0ZSwgd2UgZG8gYW5vdGhlclxuLy8gcGFzcyB0aHJvdWdoIGJlZ2luV29yayB0byByZXJlbmRlciBhbGwgY2hpbGRyZW4gKGluY2x1ZGluZyB0aGUgdGFpbCkgd2l0aFxuLy8gdGhlIGZvcmNlIHN1c3BlbmQgY29udGV4dC4gSWYgdGhlIGZpcnN0IHJlbmRlciBkaWRuJ3QgaGF2ZSBhbnl0aGluZyBpblxuLy8gaW4gZmFsbGJhY2sgc3RhdGUuIFRoZW4gd2UgcmVuZGVyIGVhY2ggcm93IGluIHRoZSB0YWlsIG9uZS1ieS1vbmUuXG4vLyBUaGF0IGhhcHBlbnMgaW4gdGhlIGNvbXBsZXRlV29yayBwaGFzZSB3aXRob3V0IGdvaW5nIGJhY2sgdG8gYmVnaW5Xb3JrLlxuXG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHJldmVhbE9yZGVyID0gbmV4dFByb3BzLnJldmVhbE9yZGVyO1xuICB2YXIgdGFpbE1vZGUgPSBuZXh0UHJvcHMudGFpbDtcbiAgdmFyIG5ld0NoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YWxpZGF0ZVJldmVhbE9yZGVyKHJldmVhbE9yZGVyKTtcbiAgdmFsaWRhdGVUYWlsT3B0aW9ucyh0YWlsTW9kZSwgcmV2ZWFsT3JkZXIpO1xuICB2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuKG5ld0NoaWxkcmVuLCByZXZlYWxPcmRlcik7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuICB2YXIgc2hvdWxkRm9yY2VGYWxsYmFjayA9IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG5cbiAgaWYgKHNob3VsZEZvcmNlRmFsbGJhY2spIHtcbiAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICB9IGVsc2Uge1xuICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gY3VycmVudCAhPT0gbnVsbCAmJiAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgaWYgKGRpZFN1c3BlbmRCZWZvcmUpIHtcbiAgICAgIC8vIElmIHdlIHByZXZpb3VzbHkgZm9yY2VkIGEgZmFsbGJhY2ssIHdlIG5lZWQgdG8gc2NoZWR1bGUgd29ya1xuICAgICAgLy8gb24gYW55IG5lc3RlZCBib3VuZGFyaWVzIHRvIGxldCB0aGVtIGtub3cgdG8gdHJ5IHRvIHJlbmRlclxuICAgICAgLy8gYWdhaW4uIFRoaXMgaXMgdGhlIHNhbWUgYXMgY29udGV4dCB1cGRhdGluZy5cbiAgICAgIHByb3BhZ2F0ZVN1c3BlbnNlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MuY2hpbGQsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICB9XG5cbiAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTtcblxuICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAvLyBJbiBsZWdhY3kgbW9kZSwgU3VzcGVuc2VMaXN0IGRvZXNuJ3Qgd29yayBzbyB3ZSBqdXN0XG4gICAgLy8gdXNlIG1ha2UgaXQgYSBub29wIGJ5IHRyZWF0aW5nIGl0IGFzIHRoZSBkZWZhdWx0IHJldmVhbE9yZGVyLlxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIpIHtcbiAgICAgIGNhc2UgJ2ZvcndhcmRzJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXN0Q29udGVudFJvdyA9IGZpbmRMYXN0Q29udGVudFJvdyh3b3JrSW5Qcm9ncmVzcy5jaGlsZCk7XG4gICAgICAgICAgdmFyIHRhaWw7XG5cbiAgICAgICAgICBpZiAobGFzdENvbnRlbnRSb3cgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSB3aG9sZSBsaXN0IGlzIHBhcnQgb2YgdGhlIHRhaWwuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBjb3VsZCBmYXN0IHBhdGggYnkganVzdCByZW5kZXJpbmcgdGhlIHRhaWwgbm93LlxuICAgICAgICAgICAgdGFpbCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEaXNjb25uZWN0IHRoZSB0YWlsIHJvd3MgYWZ0ZXIgdGhlIGNvbnRlbnQgcm93LlxuICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gcmVuZGVyIHRoZW0gc2VwYXJhdGVseSBsYXRlci5cbiAgICAgICAgICAgIHRhaWwgPSBsYXN0Q29udGVudFJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgbGFzdENvbnRlbnRSb3cuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBmYWxzZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICB0YWlsLCBsYXN0Q29udGVudFJvdywgdGFpbE1vZGUsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2JhY2t3YXJkcyc6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBmaW5kIHRoZSBmaXJzdCByb3cgdGhhdCBoYXMgZXhpc3RpbmcgY29udGVudC5cbiAgICAgICAgICAvLyBBdCB0aGUgc2FtZSB0aW1lIHdlJ3JlIGdvaW5nIHRvIHJldmVyc2UgdGhlIGxpc3Qgb2YgZXZlcnl0aGluZ1xuICAgICAgICAgIC8vIHdlIHBhc3MgaW4gdGhlIG1lYW50aW1lLiBUaGF0J3MgZ29pbmcgdG8gYmUgb3VyIHRhaWwgaW4gcmV2ZXJzZVxuICAgICAgICAgIC8vIG9yZGVyLlxuICAgICAgICAgIHZhciBfdGFpbCA9IG51bGw7XG4gICAgICAgICAgdmFyIHJvdyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcblxuICAgICAgICAgIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Um93ID0gcm93LmFsdGVybmF0ZTsgLy8gTmV3IHJvd3MgY2FuJ3QgYmUgY29udGVudCByb3dzLlxuXG4gICAgICAgICAgICBpZiAoY3VycmVudFJvdyAhPT0gbnVsbCAmJiBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudFJvdykgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtYWluIGNvbnRlbnQuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcm93O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5leHRSb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgIHJvdy5zaWJsaW5nID0gX3RhaWw7XG4gICAgICAgICAgICBfdGFpbCA9IHJvdztcbiAgICAgICAgICAgIHJvdyA9IG5leHRSb3c7XG4gICAgICAgICAgfSAvLyBUT0RPOiBJZiB3b3JrSW5Qcm9ncmVzcy5jaGlsZCBpcyBudWxsLCB3ZSBjYW4gY29udGludWUgb24gdGhlIHRhaWwgaW1tZWRpYXRlbHkuXG5cblxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgdHJ1ZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICBfdGFpbCwgbnVsbCwgLy8gbGFzdFxuICAgICAgICAgIHRhaWxNb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICd0b2dldGhlcic6XG4gICAgICAgIHtcbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGZhbHNlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIG51bGwsIC8vIHRhaWxcbiAgICAgICAgICBudWxsLCAvLyBsYXN0XG4gICAgICAgICAgdW5kZWZpbmVkLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgLy8gVGhlIGRlZmF1bHQgcmV2ZWFsIG9yZGVyIGlzIHRoZSBzYW1lIGFzIG5vdCBoYXZpbmdcbiAgICAgICAgICAvLyBhIGJvdW5kYXJ5LlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVQb3J0YWxDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBQb3J0YWxzIGFyZSBzcGVjaWFsIGJlY2F1c2Ugd2UgZG9uJ3QgYXBwZW5kIHRoZSBjaGlsZHJlbiBkdXJpbmcgbW91bnRcbiAgICAvLyBidXQgYXQgY29tbWl0LiBUaGVyZWZvcmUgd2UgbmVlZCB0byB0cmFjayBpbnNlcnRpb25zIHdoaWNoIHRoZSBub3JtYWxcbiAgICAvLyBmbG93IGRvZXNuJ3QgZG8gZHVyaW5nIG1vdW50LiBUaGlzIGRvZXNuJ3QgaGFwcGVuIGF0IHRoZSByb290IGJlY2F1c2VcbiAgICAvLyB0aGUgcm9vdCBhbHdheXMgc3RhcnRzIHdpdGggYSBcImN1cnJlbnRcIiB3aXRoIGEgbnVsbCBjaGlsZC5cbiAgICAvLyBUT0RPOiBDb25zaWRlciB1bmlmeWluZyB0aGlzIHdpdGggaG93IHRoZSByb290IHdvcmtzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxudmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIHByb3ZpZGVyVHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJUeXBlLl9jb250ZXh0O1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIHZhciBuZXdWYWx1ZSA9IG5ld1Byb3BzLnZhbHVlO1xuXG4gIHtcbiAgICBpZiAoISgndmFsdWUnIGluIG5ld1Byb3BzKSkge1xuICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlcikge1xuICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1RoZSBgdmFsdWVgIHByb3AgaXMgcmVxdWlyZWQgZm9yIHRoZSBgPENvbnRleHQuUHJvdmlkZXI+YC4gRGlkIHlvdSBtaXNzcGVsbCBpdCBvciBmb3JnZXQgdG8gcGFzcyBpdD8nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvdmlkZXJQcm9wVHlwZXMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLnByb3BUeXBlcztcblxuICAgIGlmIChwcm92aWRlclByb3BUeXBlcykge1xuICAgICAgY2hlY2tQcm9wVHlwZXMocHJvdmlkZXJQcm9wVHlwZXMsIG5ld1Byb3BzLCAncHJvcCcsICdDb250ZXh0LlByb3ZpZGVyJyk7XG4gICAgfVxuICB9XG5cbiAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBuZXdWYWx1ZSk7XG5cbiAgaWYgKG9sZFByb3BzICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFZhbHVlID0gb2xkUHJvcHMudmFsdWU7XG4gICAgdmFyIGNoYW5nZWRCaXRzID0gY2FsY3VsYXRlQ2hhbmdlZEJpdHMoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcblxuICAgIGlmIChjaGFuZ2VkQml0cyA9PT0gMCkge1xuICAgICAgLy8gTm8gY2hhbmdlLiBCYWlsb3V0IGVhcmx5IGlmIGNoaWxkcmVuIGFyZSB0aGUgc2FtZS5cbiAgICAgIGlmIChvbGRQcm9wcy5jaGlsZHJlbiA9PT0gbmV3UHJvcHMuY2hpbGRyZW4gJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkpIHtcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGNvbnRleHQgdmFsdWUgY2hhbmdlZC4gU2VhcmNoIGZvciBtYXRjaGluZyBjb25zdW1lcnMgYW5kIHNjaGVkdWxlXG4gICAgICAvLyB0aGVtIHRvIHVwZGF0ZS5cbiAgICAgIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIGNoYW5nZWRCaXRzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld0NoaWxkcmVuID0gbmV3UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbnZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnR5cGU7IC8vIFRoZSBsb2dpYyBiZWxvdyBmb3IgQ29udGV4dCBkaWZmZXJzIGRlcGVuZGluZyBvbiBQUk9EIG9yIERFViBtb2RlLiBJblxuICAvLyBERVYgbW9kZSwgd2UgY3JlYXRlIGEgc2VwYXJhdGUgb2JqZWN0IGZvciBDb250ZXh0LkNvbnN1bWVyIHRoYXQgYWN0c1xuICAvLyBsaWtlIGEgcHJveHkgdG8gQ29udGV4dC4gVGhpcyBwcm94eSBvYmplY3QgYWRkcyB1bm5lY2Vzc2FyeSBjb2RlIGluIFBST0RcbiAgLy8gc28gd2UgdXNlIHRoZSBvbGQgYmVoYXZpb3VyIChDb250ZXh0LkNvbnN1bWVyIHJlZmVyZW5jZXMgQ29udGV4dCkgdG9cbiAgLy8gcmVkdWNlIHNpemUgYW5kIG92ZXJoZWFkLiBUaGUgc2VwYXJhdGUgb2JqZWN0IHJlZmVyZW5jZXMgY29udGV4dCB2aWFcbiAgLy8gYSBwcm9wZXJ0eSBjYWxsZWQgXCJfY29udGV4dFwiLCB3aGljaCBhbHNvIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrXG4gIC8vIGluIERFViBtb2RlIGlmIHRoaXMgcHJvcGVydHkgZXhpc3RzIG9yIG5vdCBhbmQgd2FybiBpZiBpdCBkb2VzIG5vdC5cblxuICB7XG4gICAgaWYgKGNvbnRleHQuX2NvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVGhpcyBtYXkgYmUgYmVjYXVzZSBpdCdzIGEgQ29udGV4dCAocmF0aGVyIHRoYW4gYSBDb25zdW1lcikuXG4gICAgICAvLyBPciBpdCBtYXkgYmUgYmVjYXVzZSBpdCdzIG9sZGVyIFJlYWN0IHdoZXJlIHRoZXkncmUgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gd2FybiBpZiB3ZSdyZSBzdXJlIGl0J3MgYSBuZXcgUmVhY3QuXG4gICAgICBpZiAoY29udGV4dCAhPT0gY29udGV4dC5Db25zdW1lcikge1xuICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lcikge1xuICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0PiBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LkNvbnN1bWVyPiBpbnN0ZWFkPycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0Ll9jb250ZXh0O1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHJlbmRlciA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIHJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0EgY29udGV4dCBjb25zdW1lciB3YXMgcmVuZGVyZWQgd2l0aCBtdWx0aXBsZSBjaGlsZHJlbiwgb3IgYSBjaGlsZCAnICsgXCJ0aGF0IGlzbid0IGEgZnVuY3Rpb24uIEEgY29udGV4dCBjb25zdW1lciBleHBlY3RzIGEgc2luZ2xlIGNoaWxkIFwiICsgJ3RoYXQgaXMgYSBmdW5jdGlvbi4gSWYgeW91IGRpZCBwYXNzIGEgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0aGVyZSAnICsgJ2lzIG5vIHRyYWlsaW5nIG9yIGxlYWRpbmcgd2hpdGVzcGFjZSBhcm91bmQgaXQuJyk7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIG5ld1ZhbHVlID0gcmVhZENvbnRleHQoY29udGV4dCwgbmV3UHJvcHMudW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbiAgdmFyIG5ld0NoaWxkcmVuO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXdDaGlsZHJlbiA9IHJlbmRlcihuZXdWYWx1ZSk7XG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCkge1xuICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBSZXVzZSBwcmV2aW91cyBkZXBlbmRlbmNpZXNcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgfVxuXG4gIHtcbiAgICAvLyBEb24ndCB1cGRhdGUgXCJiYXNlXCIgcmVuZGVyIHRpbWVzIGZvciBiYWlsb3V0cy5cbiAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZygpO1xuICB9XG5cbiAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcyk7IC8vIENoZWNrIGlmIHRoZSBjaGlsZHJlbiBoYXZlIGFueSBwZW5kaW5nIHdvcmsuXG5cbiAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSkge1xuICAgIC8vIFRoZSBjaGlsZHJlbiBkb24ndCBoYXZlIGFueSB3b3JrIGVpdGhlci4gV2UgY2FuIHNraXAgdGhlbS5cbiAgICAvLyBUT0RPOiBPbmNlIHdlIGFkZCBiYWNrIHJlc3VtaW5nLCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIGNoaWxkcmVuIGFyZVxuICAgIC8vIGEgd29yay1pbi1wcm9ncmVzcyBzZXQuIElmIHNvLCB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZWlyIGVmZmVjdHMuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBmaWJlciBkb2Vzbid0IGhhdmUgd29yaywgYnV0IGl0cyBzdWJ0cmVlIGRvZXMuIENsb25lIHRoZSBjaGlsZFxuICAgIC8vIGZpYmVycyBhbmQgY29udGludWUuXG4gICAgY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW91bnRGaWJlcihjdXJyZW50LCBvbGRXb3JrSW5Qcm9ncmVzcywgbmV3V29ya0luUHJvZ3Jlc3MpIHtcbiAge1xuICAgIHZhciByZXR1cm5GaWJlciA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcblxuICAgIGlmIChyZXR1cm5GaWJlciA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3dhcCB0aGUgcm9vdCBmaWJlci4nKTtcbiAgICB9IC8vIERpc2Nvbm5lY3QgZnJvbSB0aGUgb2xkIGN1cnJlbnQuXG4gICAgLy8gSXQgd2lsbCBnZXQgZGVsZXRlZC5cblxuXG4gICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIG9sZFdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIENvbm5lY3QgdG8gdGhlIG5ldyB0cmVlLlxuXG4gICAgbmV3V29ya0luUHJvZ3Jlc3MuaW5kZXggPSBvbGRXb3JrSW5Qcm9ncmVzcy5pbmRleDtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gb2xkV29ya0luUHJvZ3Jlc3Muc2libGluZztcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5yZXR1cm4gPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MucmVmID0gb2xkV29ya0luUHJvZ3Jlc3MucmVmOyAvLyBSZXBsYWNlIHRoZSBjaGlsZC9zaWJsaW5nIHBvaW50ZXJzIGFib3ZlIGl0LlxuXG4gICAgaWYgKG9sZFdvcmtJblByb2dyZXNzID09PSByZXR1cm5GaWJlci5jaGlsZCkge1xuICAgICAgcmV0dXJuRmliZXIuY2hpbGQgPSBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHByZXZTaWJsaW5nID0gcmV0dXJuRmliZXIuY2hpbGQ7XG5cbiAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBhcmVudCB0byBoYXZlIGEgY2hpbGQuJyk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChwcmV2U2libGluZy5zaWJsaW5nICE9PSBvbGRXb3JrSW5Qcm9ncmVzcykge1xuICAgICAgICBwcmV2U2libGluZyA9IHByZXZTaWJsaW5nLnNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byBmaW5kIHRoZSBwcmV2aW91cyBzaWJsaW5nLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByZXZTaWJsaW5nLnNpYmxpbmcgPSBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgICB9IC8vIERlbGV0ZSB0aGUgb2xkIGZpYmVyIGFuZCBwbGFjZSB0aGUgbmV3IG9uZS5cbiAgICAvLyBTaW5jZSB0aGUgb2xkIGZpYmVyIGlzIGRpc2Nvbm5lY3RlZCwgd2UgaGF2ZSB0byBzY2hlZHVsZSBpdCBtYW51YWxseS5cblxuXG4gICAgdmFyIGxhc3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIGxhc3QubmV4dEVmZmVjdCA9IGN1cnJlbnQ7XG4gICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY3VycmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY3VycmVudDtcbiAgICB9XG5cbiAgICBjdXJyZW50Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGN1cnJlbnQuZmxhZ3MgPSBEZWxldGlvbjtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7IC8vIFJlc3RhcnQgd29yayBmcm9tIHRoZSBuZXcgZmliZXIuXG5cbiAgICByZXR1cm4gbmV3V29ya0luUHJvZ3Jlc3M7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmVnaW5Xb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgdXBkYXRlTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5sYW5lcztcblxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z05lZWRzUmVtb3VudCAmJiBjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIHdpbGwgcmVzdGFydCB0aGUgYmVnaW4gcGhhc2Ugd2l0aCBhIG5ldyBmaWJlci5cbiAgICAgIHJldHVybiByZW1vdW50RmliZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcy5rZXksIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcywgd29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgfHwgbnVsbCwgd29ya0luUHJvZ3Jlc3MubW9kZSwgd29ya0luUHJvZ3Jlc3MubGFuZXMpKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IGhhc0NvbnRleHRDaGFuZ2VkKCkgfHwgKCAvLyBGb3JjZSBhIHJlLXJlbmRlciBpZiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlZCBkdWUgdG8gaG90IHJlbG9hZDpcbiAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gY3VycmVudC50eXBlICkpIHtcbiAgICAgIC8vIElmIHByb3BzIG9yIGNvbnRleHQgY2hhbmdlZCwgbWFyayB0aGUgZmliZXIgYXMgaGF2aW5nIHBlcmZvcm1lZCB3b3JrLlxuICAgICAgLy8gVGhpcyBtYXkgYmUgdW5zZXQgaWYgdGhlIHByb3BzIGFyZSBkZXRlcm1pbmVkIHRvIGJlIGVxdWFsIGxhdGVyIChtZW1vKS5cbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmVzKSkge1xuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlOyAvLyBUaGlzIGZpYmVyIGRvZXMgbm90IGhhdmUgYW55IHBlbmRpbmcgd29yay4gQmFpbG91dCB3aXRob3V0IGVudGVyaW5nXG4gICAgICAvLyB0aGUgYmVnaW4gcGhhc2UuIFRoZXJlJ3Mgc3RpbGwgc29tZSBib29ra2VlcGluZyB3ZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmVcbiAgICAgIC8vIGluIHRoaXMgb3B0aW1pemVkIHBhdGgsIG1vc3RseSBwdXNoaW5nIHN0dWZmIG9udG8gdGhlIHN0YWNrLlxuXG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMudmFsdWU7XG4gICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIFByb2ZpbGVyIHNob3VsZCBvbmx5IGNhbGwgb25SZW5kZXIgd2hlbiBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgICAgICAgICAgdmFyIGhhc0NoaWxkV29yayA9IGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAoaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICAgIH0gLy8gUmVzZXQgZWZmZWN0IGR1cmF0aW9ucyBmb3IgdGhlIG5leHQgZXZlbnR1YWwgZWZmZWN0IHBoYXNlLlxuICAgICAgICAgICAgLy8gVGhlc2UgYXJlIHJlc2V0IGR1cmluZyByZW5kZXIgdG8gYWxsb3cgdGhlIERldlRvb2xzIGNvbW1pdCBob29rIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSxcblxuXG4gICAgICAgICAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIHdoZXRoZXIgdG8gcmV0cnkgdGhlIHByaW1hcnkgY2hpbGRyZW4sIG9yIHRvIHNraXAgb3ZlciBpdCBhbmRcbiAgICAgICAgICAgICAgLy8gZ28gc3RyYWlnaHQgdG8gdGhlIGZhbGxiYWNrLiBDaGVjayB0aGUgcHJpb3JpdHkgb2YgdGhlIHByaW1hcnlcbiAgICAgICAgICAgICAgLy8gY2hpbGQgZnJhZ21lbnQuXG5cblxuICAgICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZExhbmVzID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcztcblxuICAgICAgICAgICAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgcHJpbWFyeUNoaWxkTGFuZXMpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gaGF2ZSBwZW5kaW5nIHdvcmsuIFVzZSB0aGUgbm9ybWFsIHBhdGhcbiAgICAgICAgICAgICAgICAvLyB0byBhdHRlbXB0IHRvIHJlbmRlciB0aGUgcHJpbWFyeSBjaGlsZHJlbiBhZ2Fpbi5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCBkb2VzIG5vdCBoYXZlIHBlbmRpbmcgd29yayBtYXJrZWRcbiAgICAgICAgICAgICAgICAvLyBvbiBpdFxuICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCkpOyAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBkbyBub3QgaGF2ZSBwZW5kaW5nIHdvcmsgd2l0aCBzdWZmaWNpZW50XG4gICAgICAgICAgICAgICAgLy8gcHJpb3JpdHkuIEJhaWxvdXQuXG5cbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBmYWxsYmFjayBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gU2tpcCBvdmVyIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gcHJpbWFyeSBjaGlsZHJlbiBhbmQgd29yayBvbiB0aGUgZmFsbGJhY2suXG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQuc2libGluZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgICAgICAgICAgdmFyIF9oYXNDaGlsZFdvcmsgPSBpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKTtcblxuICAgICAgICAgICAgaWYgKGRpZFN1c3BlbmRCZWZvcmUpIHtcbiAgICAgICAgICAgICAgaWYgKF9oYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBzb21ldGhpbmcgd2FzIGluIGZhbGxiYWNrIHN0YXRlIGxhc3QgdGltZSwgYW5kIHdlIGhhdmUgYWxsIHRoZVxuICAgICAgICAgICAgICAgIC8vIHNhbWUgY2hpbGRyZW4gdGhlbiB3ZSdyZSBzdGlsbCBpbiBwcm9ncmVzc2l2ZSBsb2FkaW5nIHN0YXRlLlxuICAgICAgICAgICAgICAgIC8vIFNvbWV0aGluZyBtaWdodCBnZXQgdW5ibG9ja2VkIGJ5IHN0YXRlIHVwZGF0ZXMgb3IgcmV0cmllcyBpbiB0aGVcbiAgICAgICAgICAgICAgICAvLyB0cmVlIHdoaWNoIHdpbGwgYWZmZWN0IHRoZSB0YWlsLiBTbyB3ZSBuZWVkIHRvIHVzZSB0aGUgbm9ybWFsXG4gICAgICAgICAgICAgICAgLy8gcGF0aCB0byBjb21wdXRlIHRoZSBjb3JyZWN0IHRhaWwuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICB9IC8vIElmIG5vbmUgb2YgdGhlIGNoaWxkcmVuIGhhZCBhbnkgd29yaywgdGhhdCBtZWFucyB0aGF0IG5vbmUgb2ZcbiAgICAgICAgICAgICAgLy8gdGhlbSBnb3QgcmV0cmllZCBzbyB0aGV5J2xsIHN0aWxsIGJlIGJsb2NrZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgICAgICAgICAgIC8vIGFzIGJlZm9yZS4gV2UgY2FuIGZhc3QgYmFpbCBvdXQuXG5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgfSAvLyBJZiBub3RoaW5nIHN1c3BlbmRlZCBiZWZvcmUgYW5kIHdlJ3JlIHJlbmRlcmluZyB0aGUgc2FtZSBjaGlsZHJlbixcbiAgICAgICAgICAgIC8vIHRoZW4gdGhlIHRhaWwgZG9lc24ndCBtYXR0ZXIuIEFueXRoaW5nIG5ldyB0aGF0IHN1c3BlbmRzIHdpbGwgd29ya1xuICAgICAgICAgICAgLy8gaW4gdGhlIFwidG9nZXRoZXJcIiBtb2RlLCBzbyB3ZSBjYW4gY29udGludWUgZnJvbSB0aGUgc3RhdGUgd2UgaGFkLlxuXG5cbiAgICAgICAgICAgIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBSZXNldCB0byB0aGUgXCJ0b2dldGhlclwiIG1vZGUgaW4gY2FzZSB3ZSd2ZSBzdGFydGVkIGEgZGlmZmVyZW50XG4gICAgICAgICAgICAgIC8vIHVwZGF0ZSBpbiB0aGUgcGFzdCBidXQgZGlkbid0IGNvbXBsZXRlIGl0LlxuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG5cbiAgICAgICAgICAgIGlmIChfaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgICAvLyB0aGVtIGdvdCByZXRyaWVkIHNvIHRoZXknbGwgc3RpbGwgYmUgYmxvY2tlZCBpbiB0aGUgc2FtZSB3YXlcbiAgICAgICAgICAgICAgLy8gYXMgYmVmb3JlLiBXZSBjYW4gZmFzdCBiYWlsIG91dC5cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIGlmIHRoZSB0cmVlIHN0aWxsIG5lZWRzIHRvIGJlIGRlZmVycmVkLiBUaGlzIGlzXG4gICAgICAgICAgICAvLyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBsb2dpYyB1c2VkIGluIHRoZSBub3JtYWwgdXBkYXRlIHBhdGgsXG4gICAgICAgICAgICAvLyBzbyB3ZSdsbCBqdXN0IGVudGVyIHRoYXQuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgd2UnbGwgYmFpbCBvdXRcbiAgICAgICAgICAgIC8vIGF0IHRoZSBuZXh0IGxldmVsIGluc3RlYWQgb2YgdGhpcyBvbmUsIGJlY2F1c2UgdGhlIGNoaWxkIHByb3BzXG4gICAgICAgICAgICAvLyBoYXZlIG5vdCBjaGFuZ2VkLiBXaGljaCBpcyBmaW5lLlxuICAgICAgICAgICAgLy8gVE9ETzogUHJvYmFibHkgc2hvdWxkIHJlZmFjdG9yIGBiZWdpbldvcmtgIHRvIHNwbGl0IHRoZSBiYWlsb3V0XG4gICAgICAgICAgICAvLyBwYXRoIGZyb20gdGhlIG5vcm1hbCBwYXRoLiBJJ20gdGVtcHRlZCB0byBkbyBhIGxhYmVsZWQgYnJlYWsgaGVyZVxuICAgICAgICAgICAgLy8gYnV0IEkgd29uJ3QgOilcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgoY3VycmVudC5mbGFncyAmIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGV4aXN0cyBmb3IgbGVnYWN5IG1vZGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTIxNi5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBvbiB0aGlzIGZpYmVyLCBidXQgdGhlcmUgYXJlIG5vIG5ldyBwcm9wc1xuICAgICAgICAvLyBub3IgbGVnYWN5IGNvbnRleHQuIFNldCB0aGlzIHRvIGZhbHNlLiBJZiBhbiB1cGRhdGUgcXVldWUgb3IgY29udGV4dFxuICAgICAgICAvLyBjb25zdW1lciBwcm9kdWNlcyBhIGNoYW5nZWQgdmFsdWUsIGl0IHdpbGwgc2V0IHRoaXMgdG8gdHJ1ZS4gT3RoZXJ3aXNlLFxuICAgICAgICAvLyB0aGUgY29tcG9uZW50IHdpbGwgYXNzdW1lIHRoZSBjaGlsZHJlbiBoYXZlIG5vdCBjaGFuZ2VkIGFuZCBiYWlsIG91dC5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gIH0gLy8gQmVmb3JlIGVudGVyaW5nIHRoZSBiZWdpbiBwaGFzZSwgY2xlYXIgcGVuZGluZyB1cGRhdGUgcHJpb3JpdHkuXG4gIC8vIFRPRE86IFRoaXMgYXNzdW1lcyB0aGF0IHdlJ3JlIGFib3V0IHRvIGV2YWx1YXRlIHRoZSBjb21wb25lbnQgYW5kIHByb2Nlc3NcbiAgLy8gdGhlIHVwZGF0ZSBxdWV1ZS4gSG93ZXZlciwgdGhlcmUncyBhbiBleGNlcHRpb246IFNpbXBsZU1lbW9Db21wb25lbnRcbiAgLy8gc29tZXRpbWVzIGJhaWxzIG91dCBsYXRlciBpbiB0aGUgYmVnaW4gcGhhc2UuIFRoaXMgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkXG4gIC8vIG1vdmUgdGhpcyBhc3NpZ25tZW50IG91dCBvZiB0aGUgY29tbW9uIHBhdGggYW5kIGludG8gZWFjaCBicmFuY2guXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnR5cGUsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGVsZW1lbnRUeXBlID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGU7XG4gICAgICAgIHJldHVybiBtb3VudExhenlDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGVsZW1lbnRUeXBlLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50ID8gdW5yZXNvbHZlZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50LCB1bnJlc29sdmVkUHJvcHMpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50MiA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MiA/IF91bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQyLCBfdW5yZXNvbHZlZFByb3BzKTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQyLCBfcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0Um9vdChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdFRleHQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzMiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IHR5cGUgPyBfdW5yZXNvbHZlZFByb3BzMiA6IHJlc29sdmVEZWZhdWx0UHJvcHModHlwZSwgX3VucmVzb2x2ZWRQcm9wczIpO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVGb3J3YXJkUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBfcmVzb2x2ZWRQcm9wczIsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgTW9kZTpcbiAgICAgIHJldHVybiB1cGRhdGVNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRDb25zdW1lcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX3R5cGUyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBSZXNvbHZlIG91dGVyIHByb3BzIGZpcnN0LCB0aGVuIHJlc29sdmUgaW5uZXIgcHJvcHMuXG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLCBfdW5yZXNvbHZlZFByb3BzMyk7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gX3R5cGUyLnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBfcmVzb2x2ZWRQcm9wczMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShfdHlwZTIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfcmVzb2x2ZWRQcm9wczMgPSByZXNvbHZlRGVmYXVsdFByb3BzKF90eXBlMi50eXBlLCBfcmVzb2x2ZWRQcm9wczMpO1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX3R5cGUyLCBfcmVzb2x2ZWRQcm9wczMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQzID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHM0ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudDMgPyBfdW5yZXNvbHZlZFByb3BzNCA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudDMsIF91bnJlc29sdmVkUHJvcHM0KTtcblxuICAgICAgICByZXR1cm4gbW91bnRJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQzLCBfcmVzb2x2ZWRQcm9wczQsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVMZWdhY3lIaWRkZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICsgd29ya0luUHJvZ3Jlc3MudGFnICsgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpIHtcbiAgLy8gVGFnIHRoZSBmaWJlciB3aXRoIGFuIHVwZGF0ZSBlZmZlY3QuIFRoaXMgdHVybnMgYSBQbGFjZW1lbnQgaW50b1xuICAvLyBhIFBsYWNlbWVudEFuZFVwZGF0ZS5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpIHtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUmVmO1xufVxuXG52YXIgYXBwZW5kQWxsQ2hpbGRyZW47XG52YXIgdXBkYXRlSG9zdENvbnRhaW5lcjtcbnZhciB1cGRhdGVIb3N0Q29tcG9uZW50JDE7XG52YXIgdXBkYXRlSG9zdFRleHQkMTtcblxue1xuICAvLyBNdXRhdGlvbiBtb2RlXG4gIGFwcGVuZEFsbENoaWxkcmVuID0gZnVuY3Rpb24gKHBhcmVudCwgd29ya0luUHJvZ3Jlc3MsIG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSwgaXNIaWRkZW4pIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBjcmVhdGVkIGJ1dCB3ZSBuZWVkIHJlY3Vyc2UgZG93biBpdHNcbiAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgIGFwcGVuZEluaXRpYWxDaGlsZChwYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVIb3N0Q29udGFpbmVyID0gZnVuY3Rpb24gKHdvcmtJblByb2dyZXNzKSB7Ly8gTm9vcFxuICB9O1xuXG4gIHVwZGF0ZUhvc3RDb21wb25lbnQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gYWx0ZXJuYXRlLCB0aGF0IG1lYW5zIHRoaXMgaXMgYW4gdXBkYXRlIGFuZCB3ZSBuZWVkIHRvXG4gICAgLy8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cbiAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICBpZiAob2xkUHJvcHMgPT09IG5ld1Byb3BzKSB7XG4gICAgICAvLyBJbiBtdXRhdGlvbiBtb2RlLCB0aGlzIGlzIHN1ZmZpY2llbnQgZm9yIGEgYmFpbG91dCBiZWNhdXNlXG4gICAgICAvLyB3ZSB3b24ndCB0b3VjaCB0aGlzIG5vZGUgZXZlbiBpZiBjaGlsZHJlbiBjaGFuZ2VkLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UgZ2V0IHVwZGF0ZWQgYmVjYXVzZSBvbmUgb2Ygb3VyIGNoaWxkcmVuIHVwZGF0ZWQsIHdlIGRvbid0XG4gICAgLy8gaGF2ZSBuZXdQcm9wcyBzbyB3ZSdsbCBoYXZlIHRvIHJldXNlIHRoZW0uXG4gICAgLy8gVE9ETzogU3BsaXQgdGhlIHVwZGF0ZSBBUEkgYXMgc2VwYXJhdGUgZm9yIHRoZSBwcm9wcyB2cy4gY2hpbGRyZW4uXG4gICAgLy8gRXZlbiBiZXR0ZXIgd291bGQgYmUgaWYgY2hpbGRyZW4gd2VyZW4ndCBzcGVjaWFsIGNhc2VkIGF0IGFsbCB0aG8uXG5cblxuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICB2YXIgY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTsgLy8gVE9ETzogRXhwZXJpZW5jaW5nIGFuIGVycm9yIHdoZXJlIG9sZFByb3BzIGlzIG51bGwuIFN1Z2dlc3RzIGEgaG9zdFxuICAgIC8vIGNvbXBvbmVudCBpcyBoaXR0aW5nIHRoZSByZXN1bWUgcGF0aC4gRmlndXJlIG91dCB3aHkuIFBvc3NpYmx5XG4gICAgLy8gcmVsYXRlZCB0byBgaGlkZGVuYC5cblxuICAgIHZhciB1cGRhdGVQYXlsb2FkID0gcHJlcGFyZVVwZGF0ZShpbnN0YW5jZSwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCk7IC8vIFRPRE86IFR5cGUgdGhpcyBzcGVjaWZpYyB0byB0aGlzIHR5cGUgb2YgY29tcG9uZW50LlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSB1cGRhdGVQYXlsb2FkOyAvLyBJZiB0aGUgdXBkYXRlIHBheWxvYWQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSBjaGFuZ2Ugb3IgaWYgdGhlcmVcbiAgICAvLyBpcyBhIG5ldyByZWYgd2UgbWFyayB0aGlzIGFzIGFuIHVwZGF0ZS4gQWxsIHRoZSB3b3JrIGlzIGRvbmUgaW4gY29tbWl0V29yay5cblxuICAgIGlmICh1cGRhdGVQYXlsb2FkKSB7XG4gICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlSG9zdFRleHQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgb2xkVGV4dCwgbmV3VGV4dCkge1xuICAgIC8vIElmIHRoZSB0ZXh0IGRpZmZlcnMsIG1hcmsgaXQgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaW4gZG9uZSBpbiBjb21taXRXb3JrLlxuICAgIGlmIChvbGRUZXh0ICE9PSBuZXdUZXh0KSB7XG4gICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrKSB7XG4gIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgLy8gSWYgd2UncmUgaHlkcmF0aW5nLCB3ZSBzaG91bGQgY29uc3VtZSBhcyBtYW55IGl0ZW1zIGFzIHdlIGNhblxuICAgIC8vIHNvIHdlIGRvbid0IGxlYXZlIGFueSBiZWhpbmQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoIChyZW5kZXJTdGF0ZS50YWlsTW9kZSkge1xuICAgIGNhc2UgJ2hpZGRlbic6XG4gICAgICB7XG4gICAgICAgIC8vIEFueSBpbnNlcnRpb25zIGF0IHRoZSBlbmQgb2YgdGhlIHRhaWwgbGlzdCBhZnRlciB0aGlzIHBvaW50XG4gICAgICAgIC8vIHNob3VsZCBiZSBpbnZpc2libGUuIElmIHRoZXJlIGFyZSBhbHJlYWR5IG1vdW50ZWQgYm91bmRhcmllc1xuICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHdob2xlIHRhaWwgdG8gZmluZCBpZlxuICAgICAgICAvLyB0aGVyZSBhcmUgYW55LlxuICAgICAgICB2YXIgdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICB2YXIgbGFzdFRhaWxOb2RlID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAodGFpbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAodGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsYXN0VGFpbE5vZGUgPSB0YWlsTm9kZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0YWlsTm9kZSA9IHRhaWxOb2RlLnNpYmxpbmc7XG4gICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBzaW1wbHkgZ29pbmcgdG8gZGVsZXRlIGFsbCBpbnNlcnRpb25zIGFmdGVyIHRoZVxuICAgICAgICAvLyBsYXN0IHJlbmRlcmVkIGl0ZW0uXG5cblxuICAgICAgICBpZiAobGFzdFRhaWxOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICBsYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2NvbGxhcHNlZCc6XG4gICAgICB7XG4gICAgICAgIC8vIEFueSBpbnNlcnRpb25zIGF0IHRoZSBlbmQgb2YgdGhlIHRhaWwgbGlzdCBhZnRlciB0aGlzIHBvaW50XG4gICAgICAgIC8vIHNob3VsZCBiZSBpbnZpc2libGUuIElmIHRoZXJlIGFyZSBhbHJlYWR5IG1vdW50ZWQgYm91bmRhcmllc1xuICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHdob2xlIHRhaWwgdG8gZmluZCBpZlxuICAgICAgICAvLyB0aGVyZSBhcmUgYW55LlxuICAgICAgICB2YXIgX3RhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgdmFyIF9sYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgIHdoaWxlIChfdGFpbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoX3RhaWxOb2RlLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX2xhc3RUYWlsTm9kZSA9IF90YWlsTm9kZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGFpbE5vZGUgPSBfdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIGxhc3QgcmVuZGVyZWQgaXRlbS5cblxuXG4gICAgICAgIGlmIChfbGFzdFRhaWxOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICBpZiAoIWhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayAmJiByZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBzdXNwZW5kZWQgZHVyaW5nIHRoZSBoZWFkLiBXZSB3YW50IHRvIHNob3cgYXQgbGVhc3Qgb25lXG4gICAgICAgICAgICAvLyByb3cgYXQgdGhlIHRhaWwuIFNvIHdlJ2xsIGtlZXAgb24gYW5kIGN1dCBvZmYgdGhlIHJlc3QuXG4gICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRGV0YWNoIHRoZSBpbnNlcnRpb24gYWZ0ZXIgdGhlIGxhc3Qgbm9kZSB0aGF0IHdhcyBhbHJlYWR5XG4gICAgICAgICAgLy8gaW5zZXJ0ZWQuXG4gICAgICAgICAgX2xhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBsZXRlV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBGcmFnbWVudDpcbiAgICBjYXNlIE1vZGU6XG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICBjYXNlIENvbnRleHRDb25zdW1lcjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgdmFyIGZpYmVyUm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoZmliZXJSb290LnBlbmRpbmdDb250ZXh0KSB7XG4gICAgICAgICAgZmliZXJSb290LmNvbnRleHQgPSBmaWJlclJvb3QucGVuZGluZ0NvbnRleHQ7XG4gICAgICAgICAgZmliZXJSb290LnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQuY2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgcG9wIHNvIHRoYXQgd2UgY2FuIGRlbGV0ZSBhbnkgcmVtYWluaW5nIGNoaWxkcmVuXG4gICAgICAgICAgLy8gdGhhdCB3ZXJlbid0IGh5ZHJhdGVkLlxuICAgICAgICAgIHZhciB3YXNIeWRyYXRlZCA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmICh3YXNIeWRyYXRlZCkge1xuICAgICAgICAgICAgLy8gSWYgd2UgaHlkcmF0ZWQsIHRoZW4gd2UnbGwgbmVlZCB0byBzY2hlZHVsZSBhbiB1cGRhdGUgZm9yXG4gICAgICAgICAgICAvLyB0aGUgY29tbWl0IHNpZGUtZWZmZWN0cyBvbiB0aGUgcm9vdC5cbiAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWZpYmVyUm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgICAvLyBTY2hlZHVsZSBhbiBlZmZlY3QgdG8gY2xlYXIgdGhpcyBjb250YWluZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGNvbW1pdC5cbiAgICAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSBvZiBSZWFjdCByZW5kZXJpbmcgaW50byBhIGNvbnRhaW5lciB3aXRoIHByZXZpb3VzIGNoaWxkcmVuLlxuICAgICAgICAgICAgLy8gSXQncyBhbHNvIHNhZmUgdG8gZG8gZm9yIHVwZGF0ZXMgdG9vLCBiZWNhdXNlIGN1cnJlbnQuY2hpbGQgd291bGQgb25seSBiZSBudWxsXG4gICAgICAgICAgICAvLyBpZiB0aGUgcHJldmlvdXMgcmVuZGVyIHdhcyBudWxsIChzbyB0aGUgdGhlIGNvbnRhaW5lciB3b3VsZCBhbHJlYWR5IGJlIGVtcHR5KS5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZUhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgcm9vdENvbnRhaW5lckluc3RhbmNlID0gZ2V0Um9vdEhvc3RDb250YWluZXIoKTtcbiAgICAgICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdXBkYXRlSG9zdENvbXBvbmVudCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcblxuICAgICAgICAgIGlmIChjdXJyZW50LnJlZiAhPT0gd29ya0luUHJvZ3Jlc3MucmVmKSB7XG4gICAgICAgICAgICBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW5ld1Byb3BzKSB7XG4gICAgICAgICAgICBpZiAoISh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gd2UgYWJvcnQgd29yay5cblxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTsgLy8gVE9ETzogTW92ZSBjcmVhdGVJbnN0YW5jZSB0byBiZWdpbldvcmsgYW5kIGtlZXAgaXQgb24gYSBjb250ZXh0XG4gICAgICAgICAgLy8gXCJzdGFja1wiIGFzIHRoZSBwYXJlbnQuIFRoZW4gYXBwZW5kIGNoaWxkcmVuIGFzIHdlIGdvIGluIGJlZ2luV29ya1xuICAgICAgICAgIC8vIG9yIGNvbXBsZXRlV29yayBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSB3YW50IHRvIGFkZCB0aGVtIHRvcC0+ZG93biBvclxuICAgICAgICAgIC8vIGJvdHRvbS0+dXAuIFRvcC0+ZG93biBpcyBmYXN0ZXIgaW4gSUUxMS5cblxuICAgICAgICAgIHZhciBfd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgYW5kIGNyZWF0ZUluc3RhbmNlIHN0ZXAgaW50byB0aGUgYmVnaW5QaGFzZVxuICAgICAgICAgICAgLy8gdG8gY29uc29saWRhdGUuXG4gICAgICAgICAgICBpZiAocHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQpKSB7XG4gICAgICAgICAgICAgIC8vIElmIGNoYW5nZXMgdG8gdGhlIGh5ZHJhdGVkIG5vZGUgbmVlZCB0byBiZSBhcHBsaWVkIGF0IHRoZVxuICAgICAgICAgICAgICAvLyBjb21taXQtcGhhc2Ugd2UgbWFyayB0aGlzIGFzIHN1Y2guXG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGVJbnN0YW5jZSh0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIGFwcGVuZEFsbENoaWxkcmVuKGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGluc3RhbmNlOyAvLyBDZXJ0YWluIHJlbmRlcmVycyByZXF1aXJlIGNvbW1pdC10aW1lIGVmZmVjdHMgZm9yIGluaXRpYWwgbW91bnQuXG4gICAgICAgICAgICAvLyAoZWcgRE9NIHJlbmRlcmVyIHN1cHBvcnRzIGF1dG8tZm9jdXMgZm9yIGNlcnRhaW4gZWxlbWVudHMpLlxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHN1Y2ggcmVuZGVyZXJzIGdldCBzY2hlZHVsZWQgZm9yIGxhdGVyIHdvcmsuXG5cbiAgICAgICAgICAgIGlmIChmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbihpbnN0YW5jZSwgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSByZWYgb24gYSBob3N0IG5vZGUgd2UgbmVlZCB0byBzY2hlZHVsZSBhIGNhbGxiYWNrXG4gICAgICAgICAgICBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgdmFyIG5ld1RleHQgPSBuZXdQcm9wcztcblxuICAgICAgICBpZiAoY3VycmVudCAmJiB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBvbGRUZXh0ID0gY3VycmVudC5tZW1vaXplZFByb3BzOyAvLyBJZiB3ZSBoYXZlIGFuIGFsdGVybmF0ZSwgdGhhdCBtZWFucyB0aGlzIGlzIGFuIHVwZGF0ZSBhbmQgd2UgbmVlZFxuICAgICAgICAgIC8vIHRvIHNjaGVkdWxlIGEgc2lkZS1lZmZlY3QgdG8gZG8gdGhlIHVwZGF0ZXMuXG5cbiAgICAgICAgICB1cGRhdGVIb3N0VGV4dCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5ld1RleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoISh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gd2UgYWJvcnQgd29yay5cblxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfcm9vdENvbnRhaW5lckluc3RhbmNlID0gZ2V0Um9vdEhvc3RDb250YWluZXIoKTtcblxuICAgICAgICAgIHZhciBfY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTtcblxuICAgICAgICAgIHZhciBfd2FzSHlkcmF0ZWQyID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKF93YXNIeWRyYXRlZDIpIHtcbiAgICAgICAgICAgIGlmIChwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGNyZWF0ZVRleHRJbnN0YW5jZShuZXdUZXh0LCBfcm9vdENvbnRhaW5lckluc3RhbmNlLCBfY3VycmVudEhvc3RDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc3VzcGVuZGVkLiBSZS1yZW5kZXIgd2l0aCB0aGUgZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lczsgLy8gRG8gbm90IHJlc2V0IHRoZSBlZmZlY3QgbGlzdC5cblxuICAgICAgICAgIGlmICggKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5leHREaWRUaW1lb3V0ID0gbmV4dFN0YXRlICE9PSBudWxsO1xuICAgICAgICB2YXIgcHJldkRpZFRpbWVvdXQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBwcmV2RGlkVGltZW91dCA9IHByZXZTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0RGlkVGltZW91dCAmJiAhcHJldkRpZFRpbWVvdXQpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHN1YnRyZWVlIGlzIHJ1bm5pbmcgaW4gYmxvY2tpbmcgbW9kZSB3ZSBjYW4gc3VzcGVuZCxcbiAgICAgICAgICAvLyBvdGhlcndpc2Ugd2Ugd29uJ3Qgc3VzcGVuZC5cbiAgICAgICAgICAvLyBUT0RPOiBUaGlzIHdpbGwgc3RpbGwgc3VzcGVuZCBhIHN5bmNocm9ub3VzIHRyZWUgaWYgYW55dGhpbmdcbiAgICAgICAgICAvLyBpbiB0aGUgY29uY3VycmVudCB0cmVlIGFscmVhZHkgc3VzcGVuZGVkIGR1cmluZyB0aGlzIHJlbmRlci5cbiAgICAgICAgICAvLyBUaGlzIGlzIGEga25vd24gYnVnLlxuICAgICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIGJhY2sgdG8gdGhyb3dFeGNlcHRpb24gYmVjYXVzZSB0aGlzIGlzIHRvbyBsYXRlXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgbGFyZ2UgdHJlZSB3aGljaCBpcyBjb21tb24gZm9yIGluaXRpYWwgbG9hZHMuIFdlXG4gICAgICAgICAgICAvLyBkb24ndCBrbm93IGlmIHdlIHNob3VsZCByZXN0YXJ0IGEgcmVuZGVyIG9yIG5vdCB1bnRpbCB3ZSBnZXRcbiAgICAgICAgICAgIC8vIHRoaXMgbWFya2VyLCBhbmQgdGhpcyBpcyB0b28gbGF0ZS5cbiAgICAgICAgICAgIC8vIElmIHRoaXMgcmVuZGVyIGFscmVhZHkgaGFkIGEgcGluZyBvciBsb3dlciBwcmkgdXBkYXRlcyxcbiAgICAgICAgICAgIC8vIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIGtub3cgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3ZVxuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGFibGUgdG8gaW1tZWRpYXRlbHkgcmVzdGFydCBmcm9tIHdpdGhpbiB0aHJvd0V4Y2VwdGlvbi5cbiAgICAgICAgICAgIHZhciBoYXNJbnZpc2libGVDaGlsZENvbnRleHQgPSBjdXJyZW50ID09PSBudWxsICYmIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChoYXNJbnZpc2libGVDaGlsZENvbnRleHQgfHwgaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KSkge1xuICAgICAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBpbiBhbiBpbnZpc2libGUgdHJlZSBvciBhIG5ldyByZW5kZXIsIHRoZW4gc2hvd2luZ1xuICAgICAgICAgICAgICAvLyB0aGlzIGJvdW5kYXJ5IGlzIG9rLlxuICAgICAgICAgICAgICByZW5kZXJEaWRTdXNwZW5kKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlJ3JlIGdvaW5nIHRvIGhhdmUgdG8gaGlkZSBjb250ZW50IHNvIHdlIHNob3VsZFxuICAgICAgICAgICAgICAvLyBzdXNwZW5kIGZvciBsb25nZXIgaWYgcG9zc2libGUuXG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgLy8gVE9ETzogT25seSBzY2hlZHVsZSB1cGRhdGVzIGlmIHRoZXNlIHZhbHVlcyBhcmUgbm9uIGVxdWFsLCBpLmUuIGl0IGNoYW5nZWQuXG4gICAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0IHx8IHByZXZEaWRUaW1lb3V0KSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGp1c3QgdGltZWQgb3V0LCBzY2hlZHVsZSBhbiBlZmZlY3QgdG8gYXR0YWNoIGFcbiAgICAgICAgICAgIC8vIHJldHJ5IGxpc3RlbmVyIHRvIHRoZSBwcm9taXNlLiBUaGlzIGZsYWcgaXMgYWxzbyB1c2VkIHRvIGhpZGUgdGhlXG4gICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuLiBJbiBtdXRhdGlvbiBtb2RlLCB3ZSBhbHNvIG5lZWQgdGhlIGZsYWcgdG9cbiAgICAgICAgICAgIC8vICp1bmhpZGUqIGNoaWxkcmVuIHRoYXQgd2VyZSBwcmV2aW91c2x5IGhpZGRlbiwgc28gY2hlY2sgaWYgdGhpc1xuICAgICAgICAgICAgLy8gaXMgY3VycmVudGx5IHRpbWVkIG91dCwgdG9vLlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgcHJlcGFyZVBvcnRhbE1vdW50KHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIC8vIFBvcCBwcm92aWRlciBmaWJlclxuICAgICAgcG9wUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gU2FtZSBhcyBjbGFzcyBjb21wb25lbnQgY2FzZS4gSSBwdXQgaXQgZG93biBoZXJlIHNvIHRoYXQgdGhlIHRhZ3MgYXJlXG4gICAgICAgIC8vIHNlcXVlbnRpYWwgdG8gZW5zdXJlIHRoaXMgc3dpdGNoIGlzIGNvbXBpbGVkIHRvIGEganVtcCB0YWJsZS5cbiAgICAgICAgdmFyIF9Db21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihfQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAocmVuZGVyU3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIGluIHRoZSBkZWZhdWx0LCBcImluZGVwZW5kZW50XCIgbW9kZS5cbiAgICAgICAgICAvLyBXZSBkb24ndCBkbyBhbnl0aGluZyBpbiB0aGlzIG1vZGUuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGlkU3VzcGVuZEFscmVhZHkgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcbiAgICAgICAgdmFyIHJlbmRlcmVkVGFpbCA9IHJlbmRlclN0YXRlLnJlbmRlcmluZztcblxuICAgICAgICBpZiAocmVuZGVyZWRUYWlsID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UganVzdCByZW5kZXJlZCB0aGUgaGVhZC5cbiAgICAgICAgICBpZiAoIWRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBwYXNzLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYW55dGhpbmcgaXMgc3RpbGxcbiAgICAgICAgICAgIC8vIHN1c3BlbmRlZCBpbiB0aGUgcmVuZGVyZWQgc2V0LlxuICAgICAgICAgICAgLy8gSWYgbmV3IGNvbnRlbnQgdW5zdXNwZW5kZWQsIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgY29udGVudCB0aGF0XG4gICAgICAgICAgICAvLyBkaWRuJ3QuIFRoZW4gd2UgbmVlZCB0byBkbyBhIHNlY29uZCBwYXNzIHRoYXQgZm9yY2VzIGV2ZXJ5dGhpbmdcbiAgICAgICAgICAgIC8vIHRvIGtlZXAgc2hvd2luZyB0aGVpciBmYWxsYmFja3MuXG4gICAgICAgICAgICAvLyBXZSBtaWdodCBiZSBzdXNwZW5kZWQgaWYgc29tZXRoaW5nIGluIHRoaXMgcmVuZGVyIHBhc3Mgc3VzcGVuZGVkLCBvclxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGluIHRoZSBwcmV2aW91cyBjb21taXR0ZWQgcGFzcyBzdXNwZW5kZWQuIE90aGVyd2lzZSxcbiAgICAgICAgICAgIC8vIHRoZXJlJ3Mgbm8gY2hhbmNlIHNvIHdlIGNhbiBza2lwIHRoZSBleHBlbnNpdmUgY2FsbCB0b1xuICAgICAgICAgICAgLy8gZmluZEZpcnN0U3VzcGVuZGVkLlxuICAgICAgICAgICAgdmFyIGNhbm5vdEJlU3VzcGVuZGVkID0gcmVuZGVySGFzTm90U3VzcGVuZGVkWWV0KCkgJiYgKGN1cnJlbnQgPT09IG51bGwgfHwgKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyk7XG5cbiAgICAgICAgICAgIGlmICghY2Fubm90QmVTdXNwZW5kZWQpIHtcbiAgICAgICAgICAgICAgdmFyIHJvdyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgICAgICAgICAgIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VzcGVuZGVkID0gZmluZEZpcnN0U3VzcGVuZGVkKHJvdyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3VzcGVuZGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIElmIHRoaXMgaXMgYSBuZXdseSBzdXNwZW5kZWQgdHJlZSwgaXQgbWlnaHQgbm90IGdldCBjb21taXR0ZWQgYXNcbiAgICAgICAgICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIHNlY29uZCBwYXNzLiBJbiB0aGF0IGNhc2Ugbm90aGluZyB3aWxsIHN1YnNjcmliZSB0b1xuICAgICAgICAgICAgICAgICAgLy8gaXRzIHRoZW5uYWJsZXMuIEluc3RlYWQsIHdlJ2xsIHRyYW5zZmVyIGl0cyB0aGVubmFibGVzIHRvIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gU3VzcGVuc2VMaXN0IHNvIHRoYXQgaXQgY2FuIHJldHJ5IGlmIHRoZXkgcmVzb2x2ZS5cbiAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIG9mIHRoZXNlIGluIHRoZSBsaXN0IGJ1dCBzaW5jZSB3ZSdyZVxuICAgICAgICAgICAgICAgICAgLy8gZ29pbmcgdG8gd2FpdCBmb3IgYWxsIG9mIHRoZW0gYW55d2F5LCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXJcbiAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIG9uZXMgZ2V0cyB0byBwaW5nLiBJbiB0aGVvcnkgd2UgY291bGQgZ2V0IGNsZXZlciBhbmQga2VlcFxuICAgICAgICAgICAgICAgICAgLy8gdHJhY2sgb2YgaG93IG1hbnkgZGVwZW5kZW5jaWVzIHJlbWFpbiBidXQgaXQgZ2V0cyB0cmlja3kgYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIG1lYW50aW1lLCB3ZSBjYW4gYWRkL3JlbW92ZS9jaGFuZ2UgaXRlbXMgYW5kIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJhaWwgb3V0IG9mIHRoZSBsb29wIGJlZm9yZSBmaW5kaW5nIGFueSBidXQgdGhhdFxuICAgICAgICAgICAgICAgICAgLy8gZG9lc24ndCBtYXR0ZXIgc2luY2UgdGhhdCBtZWFucyB0aGF0IHRoZSBvdGhlciBib3VuZGFyaWVzIHRoYXRcbiAgICAgICAgICAgICAgICAgIC8vIHdlIGRpZCBmaW5kIGFscmVhZHkgaGFzIHRoZWlyIGxpc3RlbmVycyBhdHRhY2hlZC5cblxuICAgICAgICAgICAgICAgICAgdmFyIG5ld1RoZW5uYWJsZXMgPSBzdXNwZW5kZWQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChuZXdUaGVubmFibGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbmV3VGhlbm5hYmxlcztcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgICAgICAgfSAvLyBSZXJlbmRlciB0aGUgd2hvbGUgbGlzdCwgYnV0IHRoaXMgdGltZSwgd2UnbGwgZm9yY2UgZmFsbGJhY2tzXG4gICAgICAgICAgICAgICAgICAvLyB0byBzdGF5IGluIHBsYWNlLlxuICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGVmZmVjdCBsaXN0IGJlZm9yZSBkb2luZyB0aGUgc2Vjb25kIHBhc3Mgc2luY2UgdGhhdCdzIG5vdyBpbnZhbGlkLlxuXG5cbiAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IHJlbmRlclN0YXRlLmxhc3RFZmZlY3Q7IC8vIFJlc2V0IHRoZSBjaGlsZCBmaWJlcnMgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUuXG5cbiAgICAgICAgICAgICAgICAgIHJlc2V0Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTsgLy8gU2V0IHVwIHRoZSBTdXNwZW5zZSBDb250ZXh0IHRvIGZvcmNlIHN1c3BlbnNlIGFuZCBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAgICAgLy8gcmVyZW5kZXIgdGhlIGNoaWxkcmVuLlxuXG4gICAgICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcm93ID0gcm93LnNpYmxpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwgJiYgbm93KCkgPiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IHBhc3NlZCBvdXIgQ1BVIGRlYWRsaW5lIGJ1dCB3ZSBzdGlsbCBoYXZlIHJvd3NcbiAgICAgICAgICAgICAgLy8gbGVmdCBpbiB0aGUgdGFpbC4gV2UnbGwganVzdCBnaXZlIHVwIGZ1cnRoZXIgYXR0ZW1wdHMgdG8gcmVuZGVyXG4gICAgICAgICAgICAgIC8vIHRoZSBtYWluIGNvbnRlbnQgYW5kIG9ubHkgcmVuZGVyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXNcbiAgICAgICAgICAgICAgLy8gdG8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zXG4gICAgICAgICAgICAgIC8vIG9mIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlcixcbiAgICAgICAgICAgICAgLy8gaXQncyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzXG4gICAgICAgICAgICAgIC8vIGNvbW1pdHRlZC4gSWYgaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlXG4gICAgICAgICAgICAgIC8vIHBhaW50ZWQuIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy5cbiAgICAgICAgICAgICAgLy8gV2UgY2FuIHVzZSBhbnkgUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmdcbiAgICAgICAgICAgICAgLy8gc2luY2Ugd2UncmUgbGVhdmluZyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFya1NwYXduZWRXb3JrKFNvbWVSZXRyeUxhbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpO1xuICAgICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBnb2luZyB0byByZW5kZXIgdGhlIHRhaWwuXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBcHBlbmQgdGhlIHJlbmRlcmVkIHJvdyB0byB0aGUgY2hpbGQgbGlzdC5cbiAgICAgICAgICBpZiAoIWRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICB2YXIgX3N1c3BlbmRlZCA9IGZpbmRGaXJzdFN1c3BlbmRlZChyZW5kZXJlZFRhaWwpO1xuXG4gICAgICAgICAgICBpZiAoX3N1c3BlbmRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7IC8vIEVuc3VyZSB3ZSB0cmFuc2ZlciB0aGUgdXBkYXRlIHF1ZXVlIHRvIHRoZSBwYXJlbnQgc28gdGhhdCBpdCBkb2Vzbid0XG4gICAgICAgICAgICAgIC8vIGdldCBsb3N0IGlmIHRoaXMgcm93IGVuZHMgdXAgZHJvcHBlZCBkdXJpbmcgYSBzZWNvbmQgcGFzcy5cblxuICAgICAgICAgICAgICB2YXIgX25ld1RoZW5uYWJsZXMgPSBfc3VzcGVuZGVkLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICAgIGlmIChfbmV3VGhlbm5hYmxlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gX25ld1RoZW5uYWJsZXM7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCB0cnVlKTsgLy8gVGhpcyBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQuXG5cbiAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgPT09IG51bGwgJiYgcmVuZGVyU3RhdGUudGFpbE1vZGUgPT09ICdoaWRkZW4nICYmICFyZW5kZXJlZFRhaWwuYWx0ZXJuYXRlICYmICFnZXRJc0h5ZHJhdGluZygpIC8vIFdlIGRvbid0IGN1dCBpdCBpZiB3ZSdyZSBoeWRyYXRpbmcuXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkZWxldGUgdGhlIHJvdyB3ZSBqdXN0IHJlbmRlcmVkLlxuICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGVmZmVjdCBsaXN0IHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB3ZSByZW5kZXJlZCB0aGlzXG4gICAgICAgICAgICAgICAgICAvLyBjaGlsZC4gVGhlIG5lc3RlZCBjaGlsZHJlbiBoYXZlIGFscmVhZHkgYXBwZW5kZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IHJlbmRlclN0YXRlLmxhc3RFZmZlY3Q7IC8vIFJlbW92ZSBhbnkgZWZmZWN0cyB0aGF0IHdlcmUgYXBwZW5kZWQgYWZ0ZXIgdGhpcyBwb2ludC5cblxuICAgICAgICAgICAgICAgICAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIH0gLy8gV2UncmUgZG9uZS5cblxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCAvLyBUaGUgdGltZSBpdCB0b29rIHRvIHJlbmRlciBsYXN0IHJvdyBpcyBncmVhdGVyIHRoYW4gdGhlIHJlbWFpbmluZ1xuICAgICAgICAgICAgLy8gdGltZSB3ZSBoYXZlIHRvIHJlbmRlci4gU28gcmVuZGVyaW5nIG9uZSBtb3JlIHJvdyB3b3VsZCBsaWtlbHlcbiAgICAgICAgICAgIC8vIGV4Y2VlZCBpdC5cbiAgICAgICAgICAgIG5vdygpICogMiAtIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA+IGdldFJlbmRlclRhcmdldFRpbWUoKSAmJiByZW5kZXJMYW5lcyAhPT0gT2Zmc2NyZWVuTGFuZSkge1xuICAgICAgICAgICAgICAvLyBXZSBoYXZlIG5vdyBwYXNzZWQgb3VyIENQVSBkZWFkbGluZSBhbmQgd2UnbGwganVzdCBnaXZlIHVwIGZ1cnRoZXJcbiAgICAgICAgICAgICAgLy8gYXR0ZW1wdHMgdG8gcmVuZGVyIHRoZSBtYWluIGNvbnRlbnQgYW5kIG9ubHkgcmVuZGVyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgICAgLy8gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGlzIHVzdWFsbHkgZmFzdGVyLlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpc1xuICAgICAgICAgICAgICAvLyB0byBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXNcbiAgICAgICAgICAgICAgLy8gb2YgcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXNcbiAgICAgICAgICAgICAgLy8gY29tbWl0dGVkLiBJZiBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmVcbiAgICAgICAgICAgICAgLy8gcGFpbnRlZC4gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLlxuICAgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIGFueSBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZ1xuICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSdyZSBsZWF2aW5nIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIC8vIFRoZSBlZmZlY3QgbGlzdCBvZiB0aGUgYmFja3dhcmRzIHRhaWwgd2lsbCBoYXZlIGJlZW4gYWRkZWRcbiAgICAgICAgICAgIC8vIHRvIHRoZSBlbmQuIFRoaXMgYnJlYWtzIHRoZSBndWFyYW50ZWUgdGhhdCBsaWZlLWN5Y2xlcyBmaXJlIGluXG4gICAgICAgICAgICAvLyBzaWJsaW5nIG9yZGVyIGJ1dCB0aGF0IGlzbid0IGEgc3Ryb25nIGd1YXJhbnRlZSBwcm9taXNlZCBieSBSZWFjdC5cbiAgICAgICAgICAgIC8vIEVzcGVjaWFsbHkgc2luY2UgdGhlc2UgbWlnaHQgYWxzbyBqdXN0IHBvcCBpbiBkdXJpbmcgZnV0dXJlIGNvbW1pdHMuXG4gICAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC5cbiAgICAgICAgICAgIHJlbmRlcmVkVGFpbC5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZXZpb3VzU2libGluZyA9IHJlbmRlclN0YXRlLmxhc3Q7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nLnNpYmxpbmcgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyU3RhdGUubGFzdCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgdGFpbCByb3dzIHRvIHJlbmRlci5cbiAgICAgICAgICAvLyBQb3AgYSByb3cuXG4gICAgICAgICAgdmFyIG5leHQgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG5leHQ7XG4gICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG5leHQuc2libGluZztcbiAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSBub3coKTtcbiAgICAgICAgICBuZXh0LnNpYmxpbmcgPSBudWxsOyAvLyBSZXN0b3JlIHRoZSBjb250ZXh0LlxuICAgICAgICAgIC8vIFRPRE86IFdlIGNhbiBwcm9iYWJseSBqdXN0IGF2b2lkIHBvcHBpbmcgaXQgaW5zdGVhZCBhbmQgb25seVxuICAgICAgICAgIC8vIHNldHRpbmcgaXQgdGhlIGZpcnN0IHRpbWUgd2UgZ28gZnJvbSBub3Qgc3VzcGVuZGVkIHRvIHN1c3BlbmRlZC5cblxuICAgICAgICAgIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG5cbiAgICAgICAgICBpZiAoZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7IC8vIERvIGEgcGFzcyBvdmVyIHRoZSBuZXh0IHJvdy5cblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgQmxvY2s6XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgX3ByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgcHJldklzSGlkZGVuID0gX3ByZXZTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgICB2YXIgbmV4dElzSGlkZGVuID0gX25leHRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgIGlmIChwcmV2SXNIaWRkZW4gIT09IG5leHRJc0hpZGRlbiAmJiBuZXdQcm9wcy5tb2RlICE9PSAndW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmcnKSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArIHdvcmtJblByb2dyZXNzLnRhZyArIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bndpbmRXb3JrKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoZmxhZ3MgJiBTaG91bGRDYXB0dXJlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBmbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcblxuICAgICAgICAgIGlmICggKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCk7XG4gICAgICAgIHZhciBfZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoISgoX2ZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIHJvb3QgZmFpbGVkIHRvIHVubW91bnQgYWZ0ZXIgYW4gZXJyb3IuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gX2ZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IHBvcEh5ZHJhdGlvblN0YXRlXG4gICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgIHZhciBfZmxhZ3MyID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKF9mbGFnczIgJiBTaG91bGRDYXB0dXJlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBfZmxhZ3MyICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlOyAvLyBDYXB0dXJlZCBhIHN1c3BlbnNlIGVmZmVjdC4gUmUtcmVuZGVyIHRoZSBib3VuZGFyeS5cblxuICAgICAgICAgIGlmICggKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTsgLy8gU3VzcGVuc2VMaXN0IGRvZXNuJ3QgYWN0dWFsbHkgY2F0Y2ggYW55dGhpbmcuIEl0IHNob3VsZCd2ZSBiZWVuXG4gICAgICAgIC8vIGNhdWdodCBieSBhIG5lc3RlZCBib3VuZGFyeS4gSWYgbm90LCBpdCBzaG91bGQgYnViYmxlIHRocm91Z2guXG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcG9wUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW53aW5kSW50ZXJydXB0ZWRXb3JrKGludGVycnVwdGVkV29yaykge1xuICBzd2l0Y2ggKGludGVycnVwdGVkV29yay50YWcpIHtcbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSBpbnRlcnJ1cHRlZFdvcmsudHlwZS5jaGlsZENvbnRleHRUeXBlcztcblxuICAgICAgICBpZiAoY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBvcENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHBvcFN1c3BlbnNlQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHBvcFN1c3BlbnNlQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHBvcFByb3ZpZGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcG9wUmVuZGVyTGFuZXMoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhcHR1cmVkVmFsdWUodmFsdWUsIHNvdXJjZSkge1xuICAvLyBJZiB0aGUgdmFsdWUgaXMgYW4gZXJyb3IsIGNhbGwgdGhpcyBmdW5jdGlvbiBpbW1lZGlhdGVseSBhZnRlciBpdCBpcyB0aHJvd25cbiAgLy8gc28gdGhlIHN0YWNrIGlzIGFjY3VyYXRlLlxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdGFjazogZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHNvdXJjZSlcbiAgfTtcbn1cblxuLy8gVGhpcyBtb2R1bGUgaXMgZm9ya2VkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuXG4vLyBCeSBkZWZhdWx0LCByZXR1cm4gYHRydWVgIHRvIGxvZyBlcnJvcnMgdG8gdGhlIGNvbnNvbGUuXG4vLyBGb3JrcyBjYW4gcmV0dXJuIGBmYWxzZWAgaWYgdGhpcyBpc24ndCBkZXNpcmFibGUuXG5mdW5jdGlvbiBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbykge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbG9nQ2FwdHVyZWRFcnJvcihib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gIHRyeSB7XG4gICAgdmFyIGxvZ0Vycm9yID0gc2hvd0Vycm9yRGlhbG9nKGJvdW5kYXJ5LCBlcnJvckluZm8pOyAvLyBBbGxvdyBpbmplY3RlZCBzaG93RXJyb3JEaWFsb2coKSB0byBwcmV2ZW50IGRlZmF1bHQgY29uc29sZS5lcnJvciBsb2dnaW5nLlxuICAgIC8vIFRoaXMgZW5hYmxlcyByZW5kZXJlcnMgbGlrZSBSZWFjdE5hdGl2ZSB0byBiZXR0ZXIgbWFuYWdlIHJlZGJveCBiZWhhdmlvci5cblxuICAgIGlmIChsb2dFcnJvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgICBpZiAodHJ1ZSkge1xuICAgICAgdmFyIHNvdXJjZSA9IGVycm9ySW5mby5zb3VyY2U7XG4gICAgICB2YXIgc3RhY2sgPSBlcnJvckluZm8uc3RhY2s7XG4gICAgICB2YXIgY29tcG9uZW50U3RhY2sgPSBzdGFjayAhPT0gbnVsbCA/IHN0YWNrIDogJyc7IC8vIEJyb3dzZXJzIHN1cHBvcnQgc2lsZW5jaW5nIHVuY2F1Z2h0IGVycm9ycyBieSBjYWxsaW5nXG4gICAgICAvLyBgcHJldmVudERlZmF1bHQoKWAgaW4gd2luZG93IGBlcnJvcmAgaGFuZGxlci5cbiAgICAgIC8vIFdlIHJlY29yZCB0aGlzIGluZm9ybWF0aW9uIGFzIGFuIGV4cGFuZG8gb24gdGhlIGVycm9yLlxuXG4gICAgICBpZiAoZXJyb3IgIT0gbnVsbCAmJiBlcnJvci5fc3VwcHJlc3NMb2dnaW5nKSB7XG4gICAgICAgIGlmIChib3VuZGFyeS50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgLy8gVGhlIGVycm9yIGlzIHJlY292ZXJhYmxlIGFuZCB3YXMgc2lsZW5jZWQuXG4gICAgICAgICAgLy8gSWdub3JlIGl0IGFuZCBkb24ndCBwcmludCB0aGUgc3RhY2sgYWRkZW5kdW0uXG4gICAgICAgICAgLy8gVGhpcyBpcyBoYW5keSBmb3IgdGVzdGluZyBlcnJvciBib3VuZGFyaWVzIHdpdGhvdXQgbm9pc2UuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFRoZSBlcnJvciBpcyBmYXRhbC4gU2luY2UgdGhlIHNpbGVuY2luZyBtaWdodCBoYXZlXG4gICAgICAgIC8vIGJlZW4gYWNjaWRlbnRhbCwgd2UnbGwgc3VyZmFjZSBpdCBhbnl3YXkuXG4gICAgICAgIC8vIEhvd2V2ZXIsIHRoZSBicm93c2VyIHdvdWxkIGhhdmUgc2lsZW5jZWQgdGhlIG9yaWdpbmFsIGVycm9yXG4gICAgICAgIC8vIHNvIHdlJ2xsIHByaW50IGl0IGZpcnN0LCBhbmQgdGhlbiBwcmludCB0aGUgc3RhY2sgYWRkZW5kdW0uXG5cblxuICAgICAgICBjb25zb2xlWydlcnJvciddKGVycm9yKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgICAgIC8vIEZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhpcyBibG9jaywgc2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMzM4NFxuICAgICAgfVxuXG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IHNvdXJjZSA/IGdldENvbXBvbmVudE5hbWUoc291cmNlLnR5cGUpIDogbnVsbDtcbiAgICAgIHZhciBjb21wb25lbnROYW1lTWVzc2FnZSA9IGNvbXBvbmVudE5hbWUgPyBcIlRoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiB0aGUgPFwiICsgY29tcG9uZW50TmFtZSArIFwiPiBjb21wb25lbnQ6XCIgOiAnVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIG9uZSBvZiB5b3VyIFJlYWN0IGNvbXBvbmVudHM6JztcbiAgICAgIHZhciBlcnJvckJvdW5kYXJ5TWVzc2FnZTtcbiAgICAgIHZhciBlcnJvckJvdW5kYXJ5TmFtZSA9IGdldENvbXBvbmVudE5hbWUoYm91bmRhcnkudHlwZSk7XG5cbiAgICAgIGlmIChlcnJvckJvdW5kYXJ5TmFtZSkge1xuICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9IFwiUmVhY3Qgd2lsbCB0cnkgdG8gcmVjcmVhdGUgdGhpcyBjb21wb25lbnQgdHJlZSBmcm9tIHNjcmF0Y2ggXCIgKyAoXCJ1c2luZyB0aGUgZXJyb3IgYm91bmRhcnkgeW91IHByb3ZpZGVkLCBcIiArIGVycm9yQm91bmRhcnlOYW1lICsgXCIuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU1lc3NhZ2UgPSAnQ29uc2lkZXIgYWRkaW5nIGFuIGVycm9yIGJvdW5kYXJ5IHRvIHlvdXIgdHJlZSB0byBjdXN0b21pemUgZXJyb3IgaGFuZGxpbmcgYmVoYXZpb3IuXFxuJyArICdWaXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZXJyb3ItYm91bmRhcmllcyB0byBsZWFybiBtb3JlIGFib3V0IGVycm9yIGJvdW5kYXJpZXMuJztcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbWJpbmVkTWVzc2FnZSA9IGNvbXBvbmVudE5hbWVNZXNzYWdlICsgXCJcXG5cIiArIGNvbXBvbmVudFN0YWNrICsgXCJcXG5cXG5cIiArIChcIlwiICsgZXJyb3JCb3VuZGFyeU1lc3NhZ2UpOyAvLyBJbiBkZXZlbG9wbWVudCwgd2UgcHJvdmlkZSBvdXIgb3duIG1lc3NhZ2Ugd2l0aCBqdXN0IHRoZSBjb21wb25lbnQgc3RhY2suXG4gICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRoZSBvcmlnaW5hbCBlcnJvciBtZXNzYWdlIGFuZCBKUyBzdGFjayBiZWNhdXNlIHRoZSBicm93c2VyXG4gICAgICAvLyBoYXMgYWxyZWFkeSBwcmludGVkIGl0LiBFdmVuIGlmIHRoZSBhcHBsaWNhdGlvbiBzd2FsbG93cyB0aGUgZXJyb3IsIGl0IGlzIHN0aWxsXG4gICAgICAvLyBkaXNwbGF5ZWQgYnkgdGhlIGJyb3dzZXIgdGhhbmtzIHRvIHRoZSBERVYtb25seSBmYWtlIGV2ZW50IHRyaWNrIGluIFJlYWN0RXJyb3JVdGlscy5cblxuICAgICAgY29uc29sZVsnZXJyb3InXShjb21iaW5lZE1lc3NhZ2UpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW4gcHJvZHVjdGlvbiwgd2UgcHJpbnQgdGhlIGVycm9yIGRpcmVjdGx5LlxuICAgICAgLy8gVGhpcyB3aWxsIGluY2x1ZGUgdGhlIG1lc3NhZ2UsIHRoZSBKUyBzdGFjaywgYW5kIGFueXRoaW5nIHRoZSBicm93c2VyIHdhbnRzIHRvIHNob3cuXG4gICAgICAvLyBXZSBwYXNzIHRoZSBlcnJvciBvYmplY3QgaW5zdGVhZCBvZiBjdXN0b20gbWVzc2FnZSBzbyB0aGF0IHRoZSBicm93c2VyIGRpc3BsYXlzIHRoZSBlcnJvciBuYXRpdmVseS5cbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oZXJyb3IpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUaGlzIG1ldGhvZCBtdXN0IG5vdCB0aHJvdywgb3IgUmVhY3QgaW50ZXJuYWwgc3RhdGUgd2lsbCBnZXQgbWVzc2VkIHVwLlxuICAgIC8vIElmIGNvbnNvbGUuZXJyb3IgaXMgb3ZlcnJpZGRlbiwgb3IgbG9nQ2FwdHVyZWRFcnJvcigpIHNob3dzIGEgZGlhbG9nIHRoYXQgdGhyb3dzLFxuICAgIC8vIHdlIHdhbnQgdG8gcmVwb3J0IHRoaXMgZXJyb3Igb3V0c2lkZSBvZiB0aGUgbm9ybWFsIHN0YWNrIGFzIGEgbGFzdCByZXNvcnQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzE4OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgUG9zc2libHlXZWFrTWFwJDEgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIGxhbmUpOyAvLyBVbm1vdW50IHRoZSByb290IGJ5IHJlbmRlcmluZyBudWxsLlxuXG4gIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB1cGRhdGUucGF5bG9hZCA9IHtcbiAgICBlbGVtZW50OiBudWxsXG4gIH07XG4gIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcblxuICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgb25VbmNhdWdodEVycm9yKGVycm9yKTtcbiAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICB9O1xuXG4gIHJldHVybiB1cGRhdGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgbGFuZSkge1xuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBsYW5lKTtcbiAgdXBkYXRlLnRhZyA9IENhcHR1cmVVcGRhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPSBmaWJlci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBlcnJvciQxID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgdXBkYXRlLnBheWxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgcmV0dXJuIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvciQxKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGluc3QgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgaWYgKGluc3QgIT09IG51bGwgJiYgdHlwZW9mIGluc3QuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHtcbiAgICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUbyBwcmVzZXJ2ZSB0aGUgcHJlZXhpc3RpbmcgcmV0cnkgYmVoYXZpb3Igb2YgZXJyb3IgYm91bmRhcmllcyxcbiAgICAgICAgLy8gd2Uga2VlcCB0cmFjayBvZiB3aGljaCBvbmVzIGFscmVhZHkgZmFpbGVkIGR1cmluZyB0aGlzIGJhdGNoLlxuICAgICAgICAvLyBUaGlzIGdldHMgcmVzZXQgYmVmb3JlIHdlIHlpZWxkIGJhY2sgdG8gdGhlIGJyb3dzZXIuXG4gICAgICAgIC8vIFRPRE86IFdhcm4gaW4gc3RyaWN0IG1vZGUgaWYgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzXG4gICAgICAgIC8vIG5vdCBkZWZpbmVkLlxuICAgICAgICBtYXJrTGVnYWN5RXJyb3JCb3VuZGFyeUFzRmFpbGVkKHRoaXMpOyAvLyBPbmx5IGxvZyBoZXJlIGlmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkXG5cbiAgICAgICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVycm9yJDEgPSBlcnJvckluZm8udmFsdWU7XG4gICAgICB2YXIgc3RhY2sgPSBlcnJvckluZm8uc3RhY2s7XG4gICAgICB0aGlzLmNvbXBvbmVudERpZENhdGNoKGVycm9yJDEsIHtcbiAgICAgICAgY29tcG9uZW50U3RhY2s6IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiAnJ1xuICAgICAgfSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBJZiBjb21wb25lbnREaWRDYXRjaCBpcyB0aGUgb25seSBlcnJvciBib3VuZGFyeSBtZXRob2QgZGVmaW5lZCxcbiAgICAgICAgICAvLyB0aGVuIGl0IG5lZWRzIHRvIGNhbGwgc2V0U3RhdGUgdG8gcmVjb3ZlciBmcm9tIGVycm9ycy5cbiAgICAgICAgICAvLyBJZiBubyBzdGF0ZSB1cGRhdGUgaXMgc2NoZWR1bGVkIHRoZW4gdGhlIGJvdW5kYXJ5IHdpbGwgc3dhbGxvdyB0aGUgZXJyb3IuXG4gICAgICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKGZpYmVyLmxhbmVzLCBTeW5jTGFuZSkpIHtcbiAgICAgICAgICAgIGVycm9yKCclczogRXJyb3IgYm91bmRhcmllcyBzaG91bGQgaW1wbGVtZW50IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpLiAnICsgJ0luIHRoYXQgbWV0aG9kLCByZXR1cm4gYSBzdGF0ZSB1cGRhdGUgdG8gZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIG9yIGZhbGxiYWNrIFVJLicsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCBsYW5lcykge1xuICAvLyBBdHRhY2ggYSBsaXN0ZW5lciB0byB0aGUgcHJvbWlzZSB0byBcInBpbmdcIiB0aGUgcm9vdCBhbmQgcmV0cnkuIEJ1dCBvbmx5IGlmXG4gIC8vIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGZvciB0aGUgbGFuZXMgd2UncmUgY3VycmVudGx5IHJlbmRlcmluZyAod2hpY2hcbiAgLy8gYWN0cyBsaWtlIGEgXCJ0aHJlYWQgSURcIiBoZXJlKS5cbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICB2YXIgdGhyZWFkSURzO1xuXG4gIGlmIChwaW5nQ2FjaGUgPT09IG51bGwpIHtcbiAgICBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAkMSgpO1xuICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpO1xuICB9IGVsc2Uge1xuICAgIHRocmVhZElEcyA9IHBpbmdDYWNoZS5nZXQod2FrZWFibGUpO1xuXG4gICAgaWYgKHRocmVhZElEcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgICBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghdGhyZWFkSURzLmhhcyhsYW5lcykpIHtcbiAgICAvLyBNZW1vaXplIHVzaW5nIHRoZSB0aHJlYWQgSUQgdG8gcHJldmVudCByZWR1bmRhbnQgbGlzdGVuZXJzLlxuICAgIHRocmVhZElEcy5hZGQobGFuZXMpO1xuICAgIHZhciBwaW5nID0gcGluZ1N1c3BlbmRlZFJvb3QuYmluZChudWxsLCByb290LCB3YWtlYWJsZSwgbGFuZXMpO1xuICAgIHdha2VhYmxlLnRoZW4ocGluZywgcGluZyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFeGNlcHRpb24ocm9vdCwgcmV0dXJuRmliZXIsIHNvdXJjZUZpYmVyLCB2YWx1ZSwgcm9vdFJlbmRlckxhbmVzKSB7XG4gIC8vIFRoZSBzb3VyY2UgZmliZXIgZGlkIG5vdCBjb21wbGV0ZS5cbiAgc291cmNlRmliZXIuZmxhZ3MgfD0gSW5jb21wbGV0ZTsgLy8gSXRzIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICBzb3VyY2VGaWJlci5maXJzdEVmZmVjdCA9IHNvdXJjZUZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuXG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVGhpcyBpcyBhIHdha2VhYmxlLlxuICAgIHZhciB3YWtlYWJsZSA9IHZhbHVlO1xuXG4gICAgaWYgKChzb3VyY2VGaWJlci5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAvLyBSZXNldCB0aGUgbWVtb2l6ZWRTdGF0ZSB0byB3aGF0IGl0IHdhcyBiZWZvcmUgd2UgYXR0ZW1wdGVkXG4gICAgICAvLyB0byByZW5kZXIgaXQuXG4gICAgICB2YXIgY3VycmVudFNvdXJjZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnRTb3VyY2UpIHtcbiAgICAgICAgc291cmNlRmliZXIudXBkYXRlUXVldWUgPSBjdXJyZW50U291cmNlLnVwZGF0ZVF1ZXVlO1xuICAgICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gY3VycmVudFNvdXJjZS5tZW1vaXplZFN0YXRlO1xuICAgICAgICBzb3VyY2VGaWJlci5sYW5lcyA9IGN1cnJlbnRTb3VyY2UubGFuZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICAgIHNvdXJjZUZpYmVyLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBoYXNJbnZpc2libGVQYXJlbnRCb3VuZGFyeSA9IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCk7IC8vIFNjaGVkdWxlIHRoZSBuZWFyZXN0IFN1c3BlbnNlIHRvIHJlLXJlbmRlciB0aGUgdGltZWQgb3V0IHZpZXcuXG5cbiAgICB2YXIgX3dvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoX3dvcmtJblByb2dyZXNzLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgc2hvdWxkQ2FwdHVyZVN1c3BlbnNlKF93b3JrSW5Qcm9ncmVzcywgaGFzSW52aXNpYmxlUGFyZW50Qm91bmRhcnkpKSB7XG4gICAgICAgIC8vIEZvdW5kIHRoZSBuZWFyZXN0IGJvdW5kYXJ5LlxuICAgICAgICAvLyBTdGFzaCB0aGUgcHJvbWlzZSBvbiB0aGUgYm91bmRhcnkgZmliZXIuIElmIHRoZSBib3VuZGFyeSB0aW1lcyBvdXQsIHdlJ2xsXG4gICAgICAgIC8vIGF0dGFjaCBhbm90aGVyIGxpc3RlbmVyIHRvIGZsaXAgdGhlIGJvdW5kYXJ5IGJhY2sgdG8gaXRzIG5vcm1hbCBzdGF0ZS5cbiAgICAgICAgdmFyIHdha2VhYmxlcyA9IF93b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAod2FrZWFibGVzID09PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gbmV3IFNldCgpO1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgICAgX3dvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FrZWFibGVzLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgIH0gLy8gSWYgdGhlIGJvdW5kYXJ5IGlzIG91dHNpZGUgb2YgYmxvY2tpbmcgbW9kZSwgd2Ugc2hvdWxkICpub3QqXG4gICAgICAgIC8vIHN1c3BlbmQgdGhlIGNvbW1pdC4gUHJldGVuZCBhcyBpZiB0aGUgc3VzcGVuZGVkIGNvbXBvbmVudCByZW5kZXJlZFxuICAgICAgICAvLyBudWxsIGFuZCBrZWVwIHJlbmRlcmluZy4gSW4gdGhlIGNvbW1pdCBwaGFzZSwgd2UnbGwgc2NoZWR1bGUgYVxuICAgICAgICAvLyBzdWJzZXF1ZW50IHN5bmNocm9ub3VzIHVwZGF0ZSB0byByZS1yZW5kZXIgdGhlIFN1c3BlbnNlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBOb3RlOiBJdCBkb2Vzbid0IG1hdHRlciB3aGV0aGVyIHRoZSBjb21wb25lbnQgdGhhdCBzdXNwZW5kZWQgd2FzXG4gICAgICAgIC8vIGluc2lkZSBhIGJsb2NraW5nIG1vZGUgdHJlZS4gSWYgdGhlIFN1c3BlbnNlIGlzIG91dHNpZGUgb2YgaXQsIHdlXG4gICAgICAgIC8vIHNob3VsZCAqbm90KiBzdXNwZW5kIHRoZSBjb21taXQuXG5cblxuICAgICAgICBpZiAoKF93b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgICAgX3dvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgc291cmNlRmliZXIuZmxhZ3MgfD0gRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZTsgLy8gV2UncmUgZ29pbmcgdG8gY29tbWl0IHRoaXMgZmliZXIgZXZlbiB0aG91Z2ggaXQgZGlkbid0IGNvbXBsZXRlLlxuICAgICAgICAgIC8vIEJ1dCB3ZSBzaG91bGRuJ3QgY2FsbCBhbnkgbGlmZWN5Y2xlIG1ldGhvZHMgb3IgY2FsbGJhY2tzLiBSZW1vdmVcbiAgICAgICAgICAvLyBhbGwgbGlmZWN5Y2xlIGVmZmVjdCB0YWdzLlxuXG4gICAgICAgICAgc291cmNlRmliZXIuZmxhZ3MgJj0gfihMaWZlY3ljbGVFZmZlY3RNYXNrIHwgSW5jb21wbGV0ZSk7XG5cbiAgICAgICAgICBpZiAoc291cmNlRmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRTb3VyY2VGaWJlciA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTb3VyY2VGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IG1vdW50LiBDaGFuZ2UgdGhlIHRhZyBzbyBpdCdzIG5vdCBtaXN0YWtlbiBmb3IgYVxuICAgICAgICAgICAgICAvLyBjb21wbGV0ZWQgY2xhc3MgY29tcG9uZW50LiBGb3IgZXhhbXBsZSwgd2Ugc2hvdWxkIG5vdCBjYWxsXG4gICAgICAgICAgICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50IGlmIGl0IGlzIGRlbGV0ZWQuXG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyLnRhZyA9IEluY29tcGxldGVDbGFzc0NvbXBvbmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gd2UgdHJ5IHJlbmRlcmluZyBhZ2Fpbiwgd2Ugc2hvdWxkIG5vdCByZXVzZSB0aGUgY3VycmVudCBmaWJlcixcbiAgICAgICAgICAgICAgLy8gc2luY2UgaXQncyBrbm93biB0byBiZSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFVzZSBhIGZvcmNlIHVwZGF0ZSB0b1xuICAgICAgICAgICAgICAvLyBwcmV2ZW50IGEgYmFpbCBvdXQuXG4gICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIFN5bmNMYW5lKTtcbiAgICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuICAgICAgICAgICAgICBlbnF1ZXVlVXBkYXRlKHNvdXJjZUZpYmVyLCB1cGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLiBNYXJrIGl0IHdpdGggU3luYyBwcmlvcml0eSB0b1xuICAgICAgICAgIC8vIGluZGljYXRlIHRoYXQgaXQgc3RpbGwgaGFzIHBlbmRpbmcgd29yay5cblxuXG4gICAgICAgICAgc291cmNlRmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKHNvdXJjZUZpYmVyLmxhbmVzLCBTeW5jTGFuZSk7IC8vIEV4aXQgd2l0aG91dCBzdXNwZW5kaW5nLlxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIENvbmZpcm1lZCB0aGF0IHRoZSBib3VuZGFyeSBpcyBpbiBhIGNvbmN1cnJlbnQgbW9kZSB0cmVlLiBDb250aW51ZVxuICAgICAgICAvLyB3aXRoIHRoZSBub3JtYWwgc3VzcGVuZCBwYXRoLlxuICAgICAgICAvL1xuICAgICAgICAvLyBBZnRlciB0aGlzIHdlJ2xsIHVzZSBhIHNldCBvZiBoZXVyaXN0aWNzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXNcbiAgICAgICAgLy8gcmVuZGVyIHBhc3Mgd2lsbCBydW4gdG8gY29tcGxldGlvbiBvciByZXN0YXJ0IG9yIFwic3VzcGVuZFwiIHRoZSBjb21taXQuXG4gICAgICAgIC8vIFRoZSBhY3R1YWwgbG9naWMgZm9yIHRoaXMgaXMgc3ByZWFkIG91dCBpbiBkaWZmZXJlbnQgcGxhY2VzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGlzIGZpcnN0IHByaW5jaXBsZSBpcyB0aGF0IGlmIHdlJ3JlIGdvaW5nIHRvIHN1c3BlbmQgd2hlbiB3ZSBjb21wbGV0ZVxuICAgICAgICAvLyBhIHJvb3QsIHRoZW4gd2Ugc2hvdWxkIGFsc28gcmVzdGFydCBpZiB3ZSBnZXQgYW4gdXBkYXRlIG9yIHBpbmcgdGhhdFxuICAgICAgICAvLyBtaWdodCB1bnN1c3BlbmQgaXQsIGFuZCB2aWNlIHZlcnNhLiBUaGUgb25seSByZWFzb24gdG8gc3VzcGVuZCBpc1xuICAgICAgICAvLyBiZWNhdXNlIHlvdSB0aGluayB5b3UgbWlnaHQgd2FudCB0byByZXN0YXJ0IGJlZm9yZSBjb21taXR0aW5nLiBIb3dldmVyLFxuICAgICAgICAvLyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gcmVzdGFydCBvbmx5IHdoaWxlIGluIHRoZSBwZXJpb2Qgd2UncmUgc3VzcGVuZGVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBSZXN0YXJ0aW5nIHRvbyBhZ2dyZXNzaXZlbHkgaXMgYWxzbyBub3QgZ29vZCBiZWNhdXNlIGl0IHN0YXJ2ZXMgb3V0IGFueVxuICAgICAgICAvLyBpbnRlcm1lZGlhdGUgbG9hZGluZyBzdGF0ZS4gU28gd2UgdXNlIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZW4uXG4gICAgICAgIC8vIFN1c3BlbnNlIEhldXJpc3RpY3NcbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgbm90aGluZyB0aHJldyBhIFByb21pc2Ugb3IgYWxsIHRoZSBzYW1lIGZhbGxiYWNrcyBhcmUgYWxyZWFkeSBzaG93aW5nLFxuICAgICAgICAvLyB0aGVuIGRvbid0IHN1c3BlbmQvcmVzdGFydC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBpbml0aWFsIHJlbmRlciBvZiBhIG5ldyB0cmVlIG9mIFN1c3BlbnNlIGJvdW5kYXJpZXMgYW5kXG4gICAgICAgIC8vIHRob3NlIHRyaWdnZXIgYSBmYWxsYmFjaywgdGhlbiBkb24ndCBzdXNwZW5kL3Jlc3RhcnQuIFdlIHdhbnQgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgd2UgY2FuIHNob3cgdGhlIGluaXRpYWwgbG9hZGluZyBzdGF0ZSBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB3ZSBoaXQgYSBcIkRlbGF5ZWRcIiBjYXNlLCBzdWNoIGFzIHdoZW4gd2UnZCBzd2l0Y2ggZnJvbSBjb250ZW50IGJhY2sgaW50b1xuICAgICAgICAvLyBhIGZhbGxiYWNrLCB0aGVuIHdlIHNob3VsZCBhbHdheXMgc3VzcGVuZC9yZXN0YXJ0LiBUcmFuc2l0aW9ucyBhcHBseVxuICAgICAgICAvLyB0byB0aGlzIGNhc2UuIElmIG5vbmUgaXMgZGVmaW5lZCwgSk5EIGlzIHVzZWQgaW5zdGVhZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgd2UncmUgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgYW5kIGl0IGdldHMgXCJyZXRyaWVkXCIsIGFsbG93aW5nIHVzIHRvIHNob3dcbiAgICAgICAgLy8gYW5vdGhlciBsZXZlbCwgYnV0IHRoZXJlJ3Mgc3RpbGwgYW4gaW5uZXIgYm91bmRhcnkgdGhhdCB3b3VsZCBzaG93IGEgZmFsbGJhY2ssXG4gICAgICAgIC8vIHRoZW4gd2Ugc3VzcGVuZC9yZXN0YXJ0IGZvciA1MDBtcyBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIHNob3dlZCBhIGZhbGxiYWNrXG4gICAgICAgIC8vIGFueXdoZXJlIGluIHRoZSB0cmVlLiBUaGlzIGVmZmVjdGl2ZWx5IHRocm90dGxlcyBwcm9ncmVzc2l2ZSBsb2FkaW5nIGludG8gYVxuICAgICAgICAvLyBjb25zaXN0ZW50IHRyYWluIG9mIGNvbW1pdHMuIFRoaXMgYWxzbyBnaXZlcyB1cyBhbiBvcHBvcnR1bml0eSB0byByZXN0YXJ0IHRvXG4gICAgICAgIC8vIGdldCB0byB0aGUgY29tcGxldGVkIHN0YXRlIHNsaWdodGx5IGVhcmxpZXIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHRoZXJlJ3MgYW1iaWd1aXR5IGR1ZSB0byBiYXRjaGluZyBpdCdzIHJlc29sdmVkIGluIHByZWZlcmVuY2Ugb2Y6XG4gICAgICAgIC8vIDEpIFwiZGVsYXllZFwiLCAyKSBcImluaXRpYWwgcmVuZGVyXCIsIDMpIFwicmV0cnlcIi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBhIFwiYnVzeVwiIHN0YXRlIGRvZXNuJ3QgZ2V0IGZvcmNlIGNvbW1pdHRlZC4gV2Ugd2FudCB0b1xuICAgICAgICAvLyBlbnN1cmUgdGhhdCBuZXcgaW5pdGlhbCBsb2FkaW5nIHN0YXRlcyBjYW4gY29tbWl0IGFzIHNvb24gYXMgcG9zc2libGUuXG5cblxuICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgIF93b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuICAgICAgICBfd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByb290UmVuZGVyTGFuZXM7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gVGhpcyBib3VuZGFyeSBhbHJlYWR5IGNhcHR1cmVkIGR1cmluZyB0aGlzIHJlbmRlci4gQ29udGludWUgdG8gdGhlIG5leHRcbiAgICAgIC8vIGJvdW5kYXJ5LlxuXG5cbiAgICAgIF93b3JrSW5Qcm9ncmVzcyA9IF93b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgfSB3aGlsZSAoX3dvcmtJblByb2dyZXNzICE9PSBudWxsKTsgLy8gTm8gYm91bmRhcnkgd2FzIGZvdW5kLiBGYWxsdGhyb3VnaCB0byBlcnJvciBtb2RlLlxuICAgIC8vIFRPRE86IFVzZSBpbnZhcmlhbnQgc28gdGhlIG1lc3NhZ2UgaXMgc3RyaXBwZWQgaW4gcHJvZD9cblxuXG4gICAgdmFsdWUgPSBuZXcgRXJyb3IoKGdldENvbXBvbmVudE5hbWUoc291cmNlRmliZXIudHlwZSkgfHwgJ0EgUmVhY3QgY29tcG9uZW50JykgKyAnIHN1c3BlbmRlZCB3aGlsZSByZW5kZXJpbmcsIGJ1dCBubyBmYWxsYmFjayBVSSB3YXMgc3BlY2lmaWVkLlxcbicgKyAnXFxuJyArICdBZGQgYSA8U3VzcGVuc2UgZmFsbGJhY2s9Li4uPiBjb21wb25lbnQgaGlnaGVyIGluIHRoZSB0cmVlIHRvICcgKyAncHJvdmlkZSBhIGxvYWRpbmcgaW5kaWNhdG9yIG9yIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkuJyk7XG4gIH0gLy8gV2UgZGlkbid0IGZpbmQgYSBib3VuZGFyeSB0aGF0IGNvdWxkIGhhbmRsZSB0aGlzIHR5cGUgb2YgZXhjZXB0aW9uLiBTdGFydFxuICAvLyBvdmVyIGFuZCB0cmF2ZXJzZSBwYXJlbnQgcGF0aCBhZ2FpbiwgdGhpcyB0aW1lIHRyZWF0aW5nIHRoZSBleGNlcHRpb25cbiAgLy8gYXMgYW4gZXJyb3IuXG5cblxuICByZW5kZXJEaWRFcnJvcigpO1xuICB2YWx1ZSA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUodmFsdWUsIHNvdXJjZUZpYmVyKTtcbiAgdmFyIHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9lcnJvckluZm8gPSB2YWx1ZTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuICAgICAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUocm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMsIGxhbmUpO1xuXG4gICAgICAgICAgdmFyIF91cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF9lcnJvckluZm8sIGxhbmUpO1xuXG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfdXBkYXRlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgLy8gQ2FwdHVyZSBhbmQgcmV0cnlcbiAgICAgICAgdmFyIGVycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICB2YXIgY3RvciA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MgJiYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJyB8fCBpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG5cbiAgICAgICAgICB2YXIgX2xhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBfbGFuZSk7IC8vIFNjaGVkdWxlIHRoZSBlcnJvciBib3VuZGFyeSB0byByZS1yZW5kZXIgdXNpbmcgdXBkYXRlZCBzdGF0ZVxuXG4gICAgICAgICAgdmFyIF91cGRhdGUyID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgZXJyb3JJbmZvLCBfbGFuZSk7XG5cbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgfSB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpO1xufVxuXG52YXIgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBudWxsO1xuXG57XG4gIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbmV3IFNldCgpO1xufVxuXG52YXIgUG9zc2libHlXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbicgPyBXZWFrU2V0IDogU2V0O1xuXG52YXIgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50V2l0aFRpbWVyID0gZnVuY3Rpb24gKGN1cnJlbnQsIGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgfVxufTsgLy8gQ2FwdHVyZSBlcnJvcnMgc28gdGhleSBkb24ndCBpbnRlcnJ1cHQgdW5tb3VudGluZy5cblxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoY3VycmVudCwgaW5zdGFuY2UpIHtcbiAge1xuICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIsIG51bGwsIGN1cnJlbnQsIGluc3RhbmNlKTtcblxuICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICB2YXIgdW5tb3VudEVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgdW5tb3VudEVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpIHtcbiAgdmFyIHJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIGlmIChyZWYgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgcmVmLCBudWxsLCBudWxsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIHZhciByZWZFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCByZWZFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsRGVzdHJveShjdXJyZW50LCBkZXN0cm95KSB7XG4gIHtcbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgZGVzdHJveSwgbnVsbCk7XG5cbiAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkxpZmVDeWNsZXMoY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgU25hcHNob3QpIHtcbiAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc25hcHNob3QgPSBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgPT09IGZpbmlzaGVkV29yay50eXBlID8gcHJldlByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhmaW5pc2hlZFdvcmsudHlwZSwgcHJldlByb3BzKSwgcHJldlN0YXRlKTtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgZGlkV2FyblNldCA9IGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlO1xuXG4gICAgICAgICAgICAgIGlmIChzbmFwc2hvdCA9PT0gdW5kZWZpbmVkICYmICFkaWRXYXJuU2V0LmhhcyhmaW5pc2hlZFdvcmsudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBkaWRXYXJuU2V0LmFkZChmaW5pc2hlZFdvcmsudHlwZSk7XG5cbiAgICAgICAgICAgICAgICBlcnJvcignJXMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKTogQSBzbmFwc2hvdCB2YWx1ZSAob3IgbnVsbCkgJyArICdtdXN0IGJlIHJldHVybmVkLiBZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlID0gc25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBTbmFwc2hvdCkge1xuICAgICAgICAgICAgdmFyIHJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICAvLyBOb3RoaW5nIHRvIGRvIGZvciB0aGVzZSBjb21wb25lbnQgdHlwZXNcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQodGFnLCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgdGFnKSA9PT0gdGFnKSB7XG4gICAgICAgIC8vIFVubW91bnRcbiAgICAgICAgdmFyIGRlc3Ryb3kgPSBlZmZlY3QuZGVzdHJveTtcbiAgICAgICAgZWZmZWN0LmRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KHRhZywgZmluaXNoZWRXb3JrKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIGlmICgoZWZmZWN0LnRhZyAmIHRhZykgPT09IHRhZykge1xuICAgICAgICAvLyBNb3VudFxuICAgICAgICB2YXIgY3JlYXRlID0gZWZmZWN0LmNyZWF0ZTtcbiAgICAgICAgZWZmZWN0LmRlc3Ryb3kgPSBjcmVhdGUoKTtcblxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGRlc3Ryb3kgPSBlZmZlY3QuZGVzdHJveTtcblxuICAgICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGRlc3Ryb3kgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBhZGRlbmR1bSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgaWYgKGRlc3Ryb3kgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnIFlvdSByZXR1cm5lZCBudWxsLiBJZiB5b3VyIGVmZmVjdCBkb2VzIG5vdCByZXF1aXJlIGNsZWFuICcgKyAndXAsIHJldHVybiB1bmRlZmluZWQgKG9yIG5vdGhpbmcpLic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZXN0cm95LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnXFxuXFxuSXQgbG9va3MgbGlrZSB5b3Ugd3JvdGUgdXNlRWZmZWN0KGFzeW5jICgpID0+IC4uLikgb3IgcmV0dXJuZWQgYSBQcm9taXNlLiAnICsgJ0luc3RlYWQsIHdyaXRlIHRoZSBhc3luYyBmdW5jdGlvbiBpbnNpZGUgeW91ciBlZmZlY3QgJyArICdhbmQgY2FsbCBpdCBpbW1lZGlhdGVseTpcXG5cXG4nICsgJ3VzZUVmZmVjdCgoKSA9PiB7XFxuJyArICcgIGFzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YSgpIHtcXG4nICsgJyAgICAvLyBZb3UgY2FuIGF3YWl0IGhlcmVcXG4nICsgJyAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IE15QVBJLmdldERhdGEoc29tZUlkKTtcXG4nICsgJyAgICAvLyAuLi5cXG4nICsgJyAgfVxcbicgKyAnICBmZXRjaERhdGEoKTtcXG4nICsgXCJ9LCBbc29tZUlkXSk7IC8vIE9yIFtdIGlmIGVmZmVjdCBkb2Vzbid0IG5lZWQgcHJvcHMgb3Igc3RhdGVcXG5cXG5cIiArICdMZWFybiBtb3JlIGFib3V0IGRhdGEgZmV0Y2hpbmcgd2l0aCBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2hvb2tzLWRhdGEtZmV0Y2hpbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnIFlvdSByZXR1cm5lZDogJyArIGRlc3Ryb3k7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yKCdBbiBlZmZlY3QgZnVuY3Rpb24gbXVzdCBub3QgcmV0dXJuIGFueXRoaW5nIGJlc2lkZXMgYSBmdW5jdGlvbiwgJyArICd3aGljaCBpcyB1c2VkIGZvciBjbGVhbi11cC4lcycsIGFkZGVuZHVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgdmFyIF9lZmZlY3QgPSBlZmZlY3QsXG4gICAgICAgICAgbmV4dCA9IF9lZmZlY3QubmV4dCxcbiAgICAgICAgICB0YWcgPSBfZWZmZWN0LnRhZztcblxuICAgICAgaWYgKCh0YWcgJiBQYXNzaXZlJDEpICE9PSBOb0ZsYWdzJDEgJiYgKHRhZyAmIEhhc0VmZmVjdCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChmaW5pc2hlZFdvcmssIGVmZmVjdCk7XG4gICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RNb3VudChmaW5pc2hlZFdvcmssIGVmZmVjdCk7XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IG5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TGlmZUN5Y2xlcyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIGZpbmlzaGVkV29yaywgY29tbWl0dGVkTGFuZXMpIHtcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgbGF5b3V0IGVmZmVjdHMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIChkdXJpbmcgbXV0YXRpb24gcGhhc2UpLlxuICAgICAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzaWJsaW5nIGNvbXBvbmVudCBlZmZlY3RzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLFxuICAgICAgICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IHNob3VsZCBuZXZlciBvdmVycmlkZSBhIHJlZiBzZXRcbiAgICAgICAgLy8gYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQgZHVyaW5nIHRoZSBzYW1lIGNvbW1pdC5cbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoTGF5b3V0IHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgc2NoZWR1bGVQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZE1vdW50LiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZE1vdW50LiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGUgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBjdXJyZW50Lm1lbW9pemVkUHJvcHMpO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTsgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgbm93IGFsd2F5cyBub24tbnVsbCBieSB0aGUgdGltZSBpdCByZWFjaGVzIHRoZVxuICAgICAgICAvLyBjb21taXQgcGhhc2UuIENvbnNpZGVyIHJlbW92aW5nIHRoZSB0eXBlIGNoZWNrLlxuXG5cbiAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAncHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ3Byb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG5cbiAgICAgICAgICBjb21taXRVcGRhdGVRdWV1ZShmaW5pc2hlZFdvcmssIHVwZGF0ZVF1ZXVlLCBpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgbm93IGFsd2F5cyBub24tbnVsbCBieSB0aGUgdGltZSBpdCByZWFjaGVzIHRoZVxuICAgICAgICAvLyBjb21taXQgcGhhc2UuIENvbnNpZGVyIHJlbW92aW5nIHRoZSB0eXBlIGNoZWNrLlxuICAgICAgICB2YXIgX3VwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmIChfdXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2luc3RhbmNlID0gbnVsbDtcblxuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLmNoaWxkLnRhZykge1xuICAgICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgICAgX2luc3RhbmNlID0gZ2V0UHVibGljSW5zdGFuY2UoZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgX3VwZGF0ZVF1ZXVlLCBfaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX2luc3RhbmNlMiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFJlbmRlcmVycyBtYXkgc2NoZWR1bGUgd29yayB0byBiZSBkb25lIGFmdGVyIGhvc3QgY29tcG9uZW50cyBhcmUgbW91bnRlZFxuICAgICAgICAvLyAoZWcgRE9NIHJlbmRlcmVyIG1heSBzY2hlZHVsZSBhdXRvLWZvY3VzIGZvciBpbnB1dHMgYW5kIGZvcm0gY29udHJvbHMpLlxuICAgICAgICAvLyBUaGVzZSBlZmZlY3RzIHNob3VsZCBvbmx5IGJlIGNvbW1pdHRlZCB3aGVuIGNvbXBvbmVudHMgYXJlIGZpcnN0IG1vdW50ZWQsXG4gICAgICAgIC8vIGFrYSB3aGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQvYWx0ZXJuYXRlLlxuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsICYmIGZpbmlzaGVkV29yay5mbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGU7XG4gICAgICAgICAgdmFyIHByb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgY29tbWl0TW91bnQoX2luc3RhbmNlMiwgdHlwZSwgcHJvcHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBubyBsaWZlLWN5Y2xlcyBhc3NvY2lhdGVkIHdpdGggdGV4dC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAge1xuICAgICAgICAvLyBXZSBoYXZlIG5vIGxpZmUtY3ljbGVzIGFzc29jaWF0ZWQgd2l0aCBwb3J0YWxzLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgb25Db21taXQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uQ29tbWl0LFxuICAgICAgICAgICAgICBvblJlbmRlciA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIub25SZW5kZXI7XG4gICAgICAgICAgdmFyIGVmZmVjdER1cmF0aW9uID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbjtcbiAgICAgICAgICB2YXIgY29tbWl0VGltZSA9IGdldENvbW1pdFRpbWUoKTtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb25SZW5kZXIoZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMuaWQsIGN1cnJlbnQgPT09IG51bGwgPyAnbW91bnQnIDogJ3VwZGF0ZScsIGZpbmlzaGVkV29yay5hY3R1YWxEdXJhdGlvbiwgZmluaXNoZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24sIGZpbmlzaGVkV29yay5hY3R1YWxTdGFydFRpbWUsIGNvbW1pdFRpbWUsIGZpbmlzaGVkUm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4oZmluaXNoZWRXb3JrLCBpc0hpZGRlbikge1xuICB7XG4gICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IGZpbmlzaGVkV29yaztcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgaGlkZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bmhpZGVJbnN0YW5jZShub2RlLnN0YXRlTm9kZSwgbm9kZS5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTMgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaGlkZVRleHRJbnN0YW5jZShfaW5zdGFuY2UzLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKChub2RlLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50IHx8IG5vZGUudGFnID09PSBMZWdhY3lIaWRkZW5Db21wb25lbnQpICYmIG5vZGUubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAmJiBub2RlICE9PSBmaW5pc2hlZFdvcmspIDsgZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEF0dGFjaFJlZihmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHJlZiA9IGZpbmlzaGVkV29yay5yZWY7XG5cbiAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgdmFyIGluc3RhbmNlVG9Vc2U7XG5cbiAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGdldFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGluc3RhbmNlVG9Vc2UgPSBpbnN0YW5jZTtcbiAgICB9IC8vIE1vdmVkIG91dHNpZGUgdG8gZW5zdXJlIERDRSB3b3JrcyB3aXRoIHRoaXMgZmxhZ1xuXG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlZihpbnN0YW5jZVRvVXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICBpZiAoIXJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgcmVmIG9iamVjdCBwcm92aWRlZCBmb3IgJXMuICcgKyAnVXNlIGVpdGhlciBhIHJlZi1zZXR0ZXIgZnVuY3Rpb24gb3IgUmVhY3QuY3JlYXRlUmVmKCkuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlZi5jdXJyZW50ID0gaW5zdGFuY2VUb1VzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGV0YWNoUmVmKGN1cnJlbnQpIHtcbiAgdmFyIGN1cnJlbnRSZWYgPSBjdXJyZW50LnJlZjtcblxuICBpZiAoY3VycmVudFJlZiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgY3VycmVudFJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY3VycmVudFJlZihudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn0gLy8gVXNlci1vcmlnaW5hdGluZyBlcnJvcnMgKGxpZmVjeWNsZXMgYW5kIHJlZnMpIHNob3VsZCBub3QgaW50ZXJydXB0XG4vLyBkZWxldGlvbiwgc28gZG9uJ3QgbGV0IHRoZW0gdGhyb3cuIEhvc3Qtb3JpZ2luYXRpbmcgZXJyb3JzIHNob3VsZFxuLy8gaW50ZXJydXB0IGRlbGV0aW9uLCBzbyBpdCdzIG9rYXlcblxuXG5mdW5jdGlvbiBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgY3VycmVudCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICBvbkNvbW1pdFVubW91bnQoY3VycmVudCk7XG5cbiAgc3dpdGNoIChjdXJyZW50LnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG5cbiAgICAgICAgICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgICAgICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHZhciBfZWZmZWN0MiA9IGVmZmVjdCxcbiAgICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfZWZmZWN0Mi5kZXN0cm95LFxuICAgICAgICAgICAgICAgICAgdGFnID0gX2VmZmVjdDIudGFnO1xuXG4gICAgICAgICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoKHRhZyAmIFBhc3NpdmUkMSkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoY3VycmVudCwgZWZmZWN0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzYWZlbHlDYWxsRGVzdHJveShjdXJyZW50LCBkZXN0cm95KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50KTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY3VycmVudC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChjdXJyZW50LCBpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiB0aGlzIGlzIHJlY3Vyc2l2ZS5cbiAgICAgICAgLy8gV2UgYXJlIGFsc28gbm90IHVzaW5nIHRoaXMgcGFyZW50IGJlY2F1c2VcbiAgICAgICAgLy8gdGhlIHBvcnRhbCB3aWxsIGdldCBwdXNoZWQgaW1tZWRpYXRlbHkuXG4gICAgICAgIHtcbiAgICAgICAgICB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBEZWh5ZHJhdGVkRnJhZ21lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TmVzdGVkVW5tb3VudHMoZmluaXNoZWRSb290LCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFdoaWxlIHdlJ3JlIGluc2lkZSBhIHJlbW92ZWQgaG9zdCBub2RlIHdlIGRvbid0IHdhbnQgdG8gY2FsbFxuICAvLyByZW1vdmVDaGlsZCBvbiB0aGUgaW5uZXIgbm9kZXMgYmVjYXVzZSB0aGV5J3JlIHJlbW92ZWQgYnkgdGhlIHRvcFxuICAvLyBjYWxsIGFueXdheS4gV2UgYWxzbyB3YW50IHRvIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQgb24gYWxsXG4gIC8vIGNvbXBvc2l0ZXMgYmVmb3JlIHRoaXMgaG9zdCBub2RlIGlzIHJlbW92ZWQgZnJvbSB0aGUgdHJlZS4gVGhlcmVmb3JlXG4gIC8vIHdlIGRvIGFuIGlubmVyIGxvb3Agd2hpbGUgd2UncmUgc3RpbGwgaW5zaWRlIHRoZSBob3N0IG5vZGUuXG4gIHZhciBub2RlID0gcm9vdDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBub2RlKTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB0aGV5IG1heSBjb250YWluIG1vcmUgY29tcG9zaXRlIG9yIGhvc3Qgbm9kZXMuXG4gICAgLy8gU2tpcCBwb3J0YWxzIGJlY2F1c2UgY29tbWl0VW5tb3VudCgpIGN1cnJlbnRseSB2aXNpdHMgdGhlbSByZWN1cnNpdmVseS5cblxuICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsICYmICggLy8gSWYgd2UgdXNlIG11dGF0aW9uIHdlIGRyaWxsIGRvd24gaW50byBwb3J0YWxzIHVzaW5nIGNvbW1pdFVubW91bnQgYWJvdmUuXG4gICAgLy8gSWYgd2UgZG9uJ3QgdXNlIG11dGF0aW9uIHdlIGRyaWxsIGRvd24gaW50byBwb3J0YWxzIGhlcmUgaW5zdGVhZC5cbiAgICAgbm9kZS50YWcgIT09IEhvc3RQb3J0YWwpKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSByb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSByb290KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGFjaEZpYmVyTXV0YXRpb24oZmliZXIpIHtcbiAgLy8gQ3V0IG9mZiB0aGUgcmV0dXJuIHBvaW50ZXJzIHRvIGRpc2Nvbm5lY3QgaXQgZnJvbSB0aGUgdHJlZS4gSWRlYWxseSwgd2VcbiAgLy8gc2hvdWxkIGNsZWFyIHRoZSBjaGlsZCBwb2ludGVyIG9mIHRoZSBwYXJlbnQgYWx0ZXJuYXRlIHRvIGxldCB0aGlzXG4gIC8vIGdldCBHQzplZCBidXQgd2UgZG9uJ3Qga25vdyB3aGljaCBmb3Igc3VyZSB3aGljaCBwYXJlbnQgaXMgdGhlIGN1cnJlbnRcbiAgLy8gb25lIHNvIHdlJ2xsIHNldHRsZSBmb3IgR0M6aW5nIHRoZSBzdWJ0cmVlIG9mIHRoaXMgY2hpbGQuIFRoaXMgY2hpbGRcbiAgLy8gaXRzZWxmIHdpbGwgYmUgR0M6ZWQgd2hlbiB0aGUgcGFyZW50IHVwZGF0ZXMgdGhlIG5leHQgdGltZS5cbiAgLy8gTm90ZTogd2UgY2Fubm90IG51bGwgb3V0IHNpYmxpbmcgaGVyZSwgb3RoZXJ3aXNlIGl0IGNhbiBjYXVzZSBpc3N1ZXNcbiAgLy8gd2l0aCBmaW5kRE9NTm9kZSBhbmQgaG93IGl0IHJlcXVpcmVzIHRoZSBzaWJsaW5nIGZpZWxkIHRvIGNhcnJ5IG91dFxuICAvLyB0cmF2ZXJzYWwgaW4gYSBsYXRlciBlZmZlY3QuIFNlZSBQUiAjMTY4MjAuIFdlIG5vdyBjbGVhciB0aGUgc2libGluZ1xuICAvLyBmaWVsZCBhZnRlciBlZmZlY3RzLCBzZWU6IGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzLlxuICAvL1xuICAvLyBEb24ndCBkaXNjb25uZWN0IHN0YXRlTm9kZSBub3c7IGl0IHdpbGwgYmUgZGV0YWNoZWQgaW4gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMuXG4gIC8vIEl0IG1heSBiZSByZXF1aXJlZCBpZiB0aGUgY3VycmVudCBjb21wb25lbnQgaXMgYW4gZXJyb3IgYm91bmRhcnksXG4gIC8vIGFuZCBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIHRocm93cyB3aGlsZSB1bm1vdW50aW5nIGEgcGFzc2l2ZSBlZmZlY3QuXG4gIGZpYmVyLmFsdGVybmF0ZSA9IG51bGw7XG4gIGZpYmVyLmNoaWxkID0gbnVsbDtcbiAgZmliZXIuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgZmliZXIuZmlyc3RFZmZlY3QgPSBudWxsO1xuICBmaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gIGZpYmVyLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICBmaWJlci5wZW5kaW5nUHJvcHMgPSBudWxsO1xuICBmaWJlci5yZXR1cm4gPSBudWxsO1xuICBmaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAge1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRIb3N0UGFyZW50RmliZXIoZmliZXIpIHtcbiAgdmFyIHBhcmVudCA9IGZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKGlzSG9zdFBhcmVudChwYXJlbnQpKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gZmluZCBhIGhvc3QgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzSG9zdFBhcmVudChmaWJlcikge1xuICByZXR1cm4gZmliZXIudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QgfHwgZmliZXIudGFnID09PSBIb3N0UG9ydGFsO1xufVxuXG5mdW5jdGlvbiBnZXRIb3N0U2libGluZyhmaWJlcikge1xuICAvLyBXZSdyZSBnb2luZyB0byBzZWFyY2ggZm9yd2FyZCBpbnRvIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgYSBzaWJsaW5nIGhvc3RcbiAgLy8gbm9kZS4gVW5mb3J0dW5hdGVseSwgaWYgbXVsdGlwbGUgaW5zZXJ0aW9ucyBhcmUgZG9uZSBpbiBhIHJvdyB3ZSBoYXZlIHRvXG4gIC8vIHNlYXJjaCBwYXN0IHRoZW0uIFRoaXMgbGVhZHMgdG8gZXhwb25lbnRpYWwgc2VhcmNoIGZvciB0aGUgbmV4dCBzaWJsaW5nLlxuICAvLyBUT0RPOiBGaW5kIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMuXG4gIHZhciBub2RlID0gZmliZXI7XG5cbiAgc2libGluZ3M6IHdoaWxlICh0cnVlKSB7XG4gICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcsIGxldCdzIHRyeSB0aGUgbmV4dCBzaWJsaW5nLlxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBpc0hvc3RQYXJlbnQobm9kZS5yZXR1cm4pKSB7XG4gICAgICAgIC8vIElmIHdlIHBvcCBvdXQgb2YgdGhlIHJvb3Qgb3IgaGl0IHRoZSBwYXJlbnQgdGhlIGZpYmVyIHdlIGFyZSB0aGVcbiAgICAgICAgLy8gbGFzdCBzaWJsaW5nLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuXG4gICAgd2hpbGUgKG5vZGUudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIG5vZGUudGFnICE9PSBIb3N0VGV4dCAmJiBub2RlLnRhZyAhPT0gRGVoeWRyYXRlZEZyYWdtZW50KSB7XG4gICAgICAvLyBJZiBpdCBpcyBub3QgaG9zdCBub2RlIGFuZCwgd2UgbWlnaHQgaGF2ZSBhIGhvc3Qgbm9kZSBpbnNpZGUgaXQuXG4gICAgICAvLyBUcnkgdG8gc2VhcmNoIGRvd24gdW50aWwgd2UgZmluZCBvbmUuXG4gICAgICBpZiAobm9kZS5mbGFncyAmIFBsYWNlbWVudCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgY2hpbGQsIHRyeSB0aGUgc2libGluZ3MgaW5zdGVhZC5cbiAgICAgICAgY29udGludWUgc2libGluZ3M7XG4gICAgICB9IC8vIElmIHdlIGRvbid0IGhhdmUgYSBjaGlsZCwgdHJ5IHRoZSBzaWJsaW5ncyBpbnN0ZWFkLlxuICAgICAgLy8gV2UgYWxzbyBza2lwIHBvcnRhbHMgYmVjYXVzZSB0aGV5IGFyZSBub3QgcGFydCBvZiB0aGlzIGhvc3QgdHJlZS5cblxuXG4gICAgICBpZiAobm9kZS5jaGlsZCA9PT0gbnVsbCB8fCBub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICBjb250aW51ZSBzaWJsaW5ncztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICB9XG4gICAgfSAvLyBDaGVjayBpZiB0aGlzIGhvc3Qgbm9kZSBpcyBzdGFibGUgb3IgYWJvdXQgdG8gYmUgcGxhY2VkLlxuXG5cbiAgICBpZiAoIShub2RlLmZsYWdzICYgUGxhY2VtZW50KSkge1xuICAgICAgLy8gRm91bmQgaXQhXG4gICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFBsYWNlbWVudChmaW5pc2hlZFdvcmspIHtcblxuXG4gIHZhciBwYXJlbnRGaWJlciA9IGdldEhvc3RQYXJlbnRGaWJlcihmaW5pc2hlZFdvcmspOyAvLyBOb3RlOiB0aGVzZSB0d28gdmFyaWFibGVzICptdXN0KiBhbHdheXMgYmUgdXBkYXRlZCB0b2dldGhlci5cblxuICB2YXIgcGFyZW50O1xuICB2YXIgaXNDb250YWluZXI7XG4gIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG5cbiAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGU7XG4gICAgICBpc0NvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBpc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgaXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lLW5vLWZhbGx0aHJvdWdoXG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob3N0IHBhcmVudCBmaWJlci4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxuXG4gIGlmIChwYXJlbnRGaWJlci5mbGFncyAmIENvbnRlbnRSZXNldCkge1xuICAgIC8vIFJlc2V0IHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIHBhcmVudCBiZWZvcmUgZG9pbmcgYW55IGluc2VydGlvbnNcbiAgICByZXNldFRleHRDb250ZW50KHBhcmVudCk7IC8vIENsZWFyIENvbnRlbnRSZXNldCBmcm9tIHRoZSBlZmZlY3QgdGFnXG5cbiAgICBwYXJlbnRGaWJlci5mbGFncyAmPSB+Q29udGVudFJlc2V0O1xuICB9XG5cbiAgdmFyIGJlZm9yZSA9IGdldEhvc3RTaWJsaW5nKGZpbmlzaGVkV29yayk7IC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGluc2VydGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuXG4gIGlmIChpc0NvbnRhaW5lcikge1xuICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoZmluaXNoZWRXb3JrLCBiZWZvcmUsIHBhcmVudCk7XG4gIH0gZWxzZSB7XG4gICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKGZpbmlzaGVkV29yaywgYmVmb3JlLCBwYXJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICB2YXIgaXNIb3N0ID0gdGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHRhZyA9PT0gSG9zdFRleHQ7XG5cbiAgaWYgKGlzSG9zdCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICB2YXIgc3RhdGVOb2RlID0gaXNIb3N0ID8gbm9kZS5zdGF0ZU5vZGUgOiBub2RlLnN0YXRlTm9kZS5pbnN0YW5jZTtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIGluc2VydEluQ29udGFpbmVyQmVmb3JlKHBhcmVudCwgc3RhdGVOb2RlLCBiZWZvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKHBhcmVudCwgc3RhdGVOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2Uge1xuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoY2hpbGQsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgIHZhciBzaWJsaW5nID0gY2hpbGQuc2libGluZztcblxuICAgICAgd2hpbGUgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihzaWJsaW5nLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIHZhciBpc0hvc3QgPSB0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dDtcblxuICBpZiAoaXNIb3N0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgIHZhciBzdGF0ZU5vZGUgPSBpc0hvc3QgPyBub2RlLnN0YXRlTm9kZSA6IG5vZGUuc3RhdGVOb2RlLmluc3RhbmNlO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudCwgc3RhdGVOb2RlLCBiZWZvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRDaGlsZChwYXJlbnQsIHN0YXRlTm9kZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIHtcbiAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkO1xuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoY2hpbGQsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgIHZhciBzaWJsaW5nID0gY2hpbGQuc2libGluZztcblxuICAgICAgd2hpbGUgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKHNpYmxpbmcsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgc2libGluZyA9IHNpYmxpbmcuc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBkZWxldGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICB2YXIgbm9kZSA9IGN1cnJlbnQ7IC8vIEVhY2ggaXRlcmF0aW9uLCBjdXJyZW50UGFyZW50IGlzIHBvcHVsYXRlZCB3aXRoIG5vZGUncyBob3N0IHBhcmVudCBpZiBub3RcbiAgLy8gY3VycmVudFBhcmVudElzVmFsaWQuXG5cbiAgdmFyIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gZmFsc2U7IC8vIE5vdGU6IHRoZXNlIHR3byB2YXJpYWJsZXMgKm11c3QqIGFsd2F5cyBiZSB1cGRhdGVkIHRvZ2V0aGVyLlxuXG4gIHZhciBjdXJyZW50UGFyZW50O1xuICB2YXIgY3VycmVudFBhcmVudElzQ29udGFpbmVyO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKCFjdXJyZW50UGFyZW50SXNWYWxpZCkge1xuICAgICAgdmFyIHBhcmVudCA9IG5vZGUucmV0dXJuO1xuXG4gICAgICBmaW5kUGFyZW50OiB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAoIShwYXJlbnQgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gZmluZCBhIGhvc3QgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgc3dpdGNoIChwYXJlbnQudGFnKSB7XG4gICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZTtcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWsgZmluZFBhcmVudDtcblxuICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWsgZmluZFBhcmVudDtcblxuICAgICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50UGFyZW50SXNWYWxpZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgY29tbWl0TmVzdGVkVW5tb3VudHMoZmluaXNoZWRSb290LCBub2RlKTsgLy8gQWZ0ZXIgYWxsIHRoZSBjaGlsZHJlbiBoYXZlIHVubW91bnRlZCwgaXQgaXMgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZVxuICAgICAgLy8gbm9kZSBmcm9tIHRoZSB0cmVlLlxuXG4gICAgICBpZiAoY3VycmVudFBhcmVudElzQ29udGFpbmVyKSB7XG4gICAgICAgIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVDaGlsZChjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IC8vIERvbid0IHZpc2l0IGNoaWxkcmVuIGJlY2F1c2Ugd2UgYWxyZWFkeSB2aXNpdGVkIHRoZW0uXG5cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBXaGVuIHdlIGdvIGludG8gYSBwb3J0YWwsIGl0IGJlY29tZXMgdGhlIHBhcmVudCB0byByZW1vdmUgZnJvbS5cbiAgICAgICAgLy8gV2Ugd2lsbCByZWFzc2lnbiBpdCBiYWNrIHdoZW4gd2UgcG9wIHRoZSBwb3J0YWwgb24gdGhlIHdheSB1cC5cbiAgICAgICAgY3VycmVudFBhcmVudCA9IG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2UgcG9ydGFscyBtaWdodCBjb250YWluIGhvc3QgY29tcG9uZW50cy5cblxuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHdlIG1heSBmaW5kIG1vcmUgaG9zdCBjb21wb25lbnRzIGJlbG93LlxuXG4gICAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcblxuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgIC8vIFdoZW4gd2UgZ28gb3V0IG9mIHRoZSBwb3J0YWwsIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgcGFyZW50LlxuICAgICAgICAvLyBTaW5jZSB3ZSBkb24ndCBrZWVwIGEgc3RhY2sgb2YgdGhlbSwgd2Ugd2lsbCBzZWFyY2ggZm9yIGl0LlxuICAgICAgICBjdXJyZW50UGFyZW50SXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdERlbGV0aW9uKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICB7XG4gICAgLy8gUmVjdXJzaXZlbHkgZGVsZXRlIGFsbCBob3N0IG5vZGVzIGZyb20gdGhlIHBhcmVudC5cbiAgICAvLyBEZXRhY2ggcmVmcyBhbmQgY2FsbCBjb21wb25lbnRXaWxsVW5tb3VudCgpIG9uIHRoZSB3aG9sZSBzdWJ0cmVlLlxuICAgIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQpO1xuICB9XG5cbiAgdmFyIGFsdGVybmF0ZSA9IGN1cnJlbnQuYWx0ZXJuYXRlO1xuICBkZXRhY2hGaWJlck11dGF0aW9uKGN1cnJlbnQpO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBkZXRhY2hGaWJlck11dGF0aW9uKGFsdGVybmF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0V29yayhjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcblxuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIC8vIExheW91dCBlZmZlY3RzIGFyZSBkZXN0cm95ZWQgZHVyaW5nIHRoZSBtdXRhdGlvbiBwaGFzZSBzbyB0aGF0IGFsbFxuICAgICAgICAvLyBkZXN0cm95IGZ1bmN0aW9ucyBmb3IgYWxsIGZpYmVycyBhcmUgY2FsbGVkIGJlZm9yZSBhbnkgY3JlYXRlIGZ1bmN0aW9ucy5cbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBzaWJsaW5nIGNvbXBvbmVudCBlZmZlY3RzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLFxuICAgICAgICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IHNob3VsZCBuZXZlciBvdmVycmlkZSBhIHJlZiBzZXRcbiAgICAgICAgLy8gYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQgZHVyaW5nIHRoZSBzYW1lIGNvbW1pdC5cbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDb21taXQgdGhlIHdvcmsgcHJlcGFyZWQgZWFybGllci5cbiAgICAgICAgICB2YXIgbmV3UHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wczsgLy8gRm9yIGh5ZHJhdGlvbiB3ZSByZXVzZSB0aGUgdXBkYXRlIHBhdGggYnV0IHdlIHRyZWF0IHRoZSBvbGRQcm9wc1xuICAgICAgICAgIC8vIGFzIHRoZSBuZXdQcm9wcy4gVGhlIHVwZGF0ZVBheWxvYWQgd2lsbCBjb250YWluIHRoZSByZWFsIGNoYW5nZSBpblxuICAgICAgICAgIC8vIHRoaXMgY2FzZS5cblxuICAgICAgICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBuZXdQcm9wcztcbiAgICAgICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlOyAvLyBUT0RPOiBUeXBlIHRoZSB1cGRhdGVRdWV1ZSB0byBiZSBzcGVjaWZpYyB0byBob3N0IGNvbXBvbmVudHMuXG5cbiAgICAgICAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZVBheWxvYWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbW1pdFVwZGF0ZShpbnN0YW5jZSwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICBpZiAoIShmaW5pc2hlZFdvcmsuc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgc2hvdWxkIGhhdmUgYSB0ZXh0IG5vZGUgaW5pdGlhbGl6ZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGV4dEluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgdmFyIG5ld1RleHQgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wczsgLy8gRm9yIGh5ZHJhdGlvbiB3ZSByZXVzZSB0aGUgdXBkYXRlIHBhdGggYnV0IHdlIHRyZWF0IHRoZSBvbGRQcm9wc1xuICAgICAgICAvLyBhcyB0aGUgbmV3UHJvcHMuIFRoZSB1cGRhdGVQYXlsb2FkIHdpbGwgY29udGFpbiB0aGUgcmVhbCBjaGFuZ2UgaW5cbiAgICAgICAgLy8gdGhpcyBjYXNlLlxuXG4gICAgICAgIHZhciBvbGRUZXh0ID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG5ld1RleHQ7XG4gICAgICAgIGNvbW1pdFRleHRVcGRhdGUodGV4dEluc3RhbmNlLCBvbGRUZXh0LCBuZXdUZXh0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBpZiAoX3Jvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgICAgLy8gV2UndmUganVzdCBoeWRyYXRlZC4gTm8gbmVlZCB0byBoeWRyYXRlIGFnYWluLlxuICAgICAgICAgICAgX3Jvb3QuaHlkcmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgY29tbWl0SHlkcmF0ZWRDb250YWluZXIoX3Jvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgY29tbWl0U3VzcGVuc2VDb21wb25lbnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHZhciBpc0hpZGRlbiA9IG5ld1N0YXRlICE9PSBudWxsO1xuICAgICAgICBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihmaW5pc2hlZFdvcmssIGlzSGlkZGVuKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlQ29tcG9uZW50KGZpbmlzaGVkV29yaykge1xuICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV3U3RhdGUgIT09IG51bGwpIHtcbiAgICBtYXJrQ29tbWl0VGltZU9mRmFsbGJhY2soKTtcblxuICAgIHtcbiAgICAgIC8vIEhpZGUgdGhlIE9mZnNjcmVlbiBjb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgcHJpbWFyeSBjaGlsZHJlbi4gVE9ETzpcbiAgICAgIC8vIElkZWFsbHksIHRoaXMgZWZmZWN0IHdvdWxkIGhhdmUgYmVlbiBzY2hlZHVsZWQgb24gdGhlIE9mZnNjcmVlbiBmaWJlclxuICAgICAgLy8gaXRzZWxmLiBUaGF0J3MgaG93IHVuaGlkaW5nIHdvcmtzOiB0aGUgT2Zmc2NyZWVuIGNvbXBvbmVudCBzY2hlZHVsZXMgYW5cbiAgICAgIC8vIGVmZmVjdCBvbiBpdHNlbGYuIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSwgdGhlIGNvbXBvbmVudCBkaWRuJ3QgY29tcGxldGUsXG4gICAgICAvLyBzbyB0aGUgZmliZXIgd2FzIG5ldmVyIGFkZGVkIHRvIHRoZSBlZmZlY3QgbGlzdCBpbiB0aGUgbm9ybWFsIHBhdGguIFdlXG4gICAgICAvLyBjb3VsZCBoYXZlIGFwcGVuZGVkIGl0IHRvIHRoZSBlZmZlY3QgbGlzdCBpbiB0aGUgU3VzcGVuc2UgY29tcG9uZW50J3NcbiAgICAgIC8vIHNlY29uZCBwYXNzLCBidXQgZG9pbmcgaXQgdGhpcyB3YXkgaXMgbGVzcyBjb21wbGljYXRlZC4gVGhpcyB3b3VsZCBiZVxuICAgICAgLy8gc2ltcGxlciBpZiB3ZSBnb3QgcmlkIG9mIHRoZSBlZmZlY3QgbGlzdCBhbmQgdHJhdmVyc2VkIHRoZSB0cmVlLCBsaWtlXG4gICAgICAvLyB3ZSdyZSBwbGFubmluZyB0byBkby5cbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRQYXJlbnQgPSBmaW5pc2hlZFdvcmsuY2hpbGQ7XG4gICAgICBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihwcmltYXJ5Q2hpbGRQYXJlbnQsIHRydWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaykge1xuXG4gIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXdTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBzdXNwZW5zZUluc3RhbmNlID0gcHJldlN0YXRlLmRlaHlkcmF0ZWQ7XG5cbiAgICAgICAgaWYgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspIHtcbiAgLy8gSWYgdGhpcyBib3VuZGFyeSBqdXN0IHRpbWVkIG91dCwgdGhlbiBpdCB3aWxsIGhhdmUgYSBzZXQgb2Ygd2FrZWFibGVzLlxuICAvLyBGb3IgZWFjaCB3YWtlYWJsZSwgYXR0YWNoIGEgbGlzdGVuZXIgc28gdGhhdCB3aGVuIGl0IHJlc29sdmVzLCBSZWFjdFxuICAvLyBhdHRlbXB0cyB0byByZS1yZW5kZXIgdGhlIGJvdW5kYXJ5IGluIHRoZSBwcmltYXJ5IChwcmUtdGltZW91dCkgc3RhdGUuXG4gIHZhciB3YWtlYWJsZXMgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgaWYgKHdha2VhYmxlcyAhPT0gbnVsbCkge1xuICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgdmFyIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgaWYgKHJldHJ5Q2FjaGUgPT09IG51bGwpIHtcbiAgICAgIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpO1xuICAgIH1cblxuICAgIHdha2VhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uICh3YWtlYWJsZSkge1xuICAgICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgYm91bmRhcnkgZmliZXIgdG8gcHJldmVudCByZWR1bmRhbnQgbGlzdGVuZXJzLlxuICAgICAgdmFyIHJldHJ5ID0gcmVzb2x2ZVJldHJ5V2FrZWFibGUuYmluZChudWxsLCBmaW5pc2hlZFdvcmssIHdha2VhYmxlKTtcblxuICAgICAgaWYgKCFyZXRyeUNhY2hlLmhhcyh3YWtlYWJsZSkpIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh3YWtlYWJsZS5fX3JlYWN0RG9Ob3RUcmFjZUludGVyYWN0aW9ucyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0cnkgPSB0cmFjaW5nLnVuc3RhYmxlX3dyYXAocmV0cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHJ5Q2FjaGUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgd2FrZWFibGUudGhlbihyZXRyeSwgcmV0cnkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59IC8vIFRoaXMgZnVuY3Rpb24gZGV0ZWN0cyB3aGVuIGEgU3VzcGVuc2UgYm91bmRhcnkgZ29lcyBmcm9tIHZpc2libGUgdG8gaGlkZGVuLlxuLy8gSXQgcmV0dXJucyBmYWxzZSBpZiB0aGUgYm91bmRhcnkgaXMgYWxyZWFkeSBoaWRkZW4uXG4vLyBUT0RPOiBVc2UgYW4gZWZmZWN0IHRhZy5cblxuXG5mdW5jdGlvbiBpc1N1c3BlbnNlQm91bmRhcnlCZWluZ0hpZGRlbihjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAob2xkU3RhdGUgPT09IG51bGwgfHwgb2xkU3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICByZXR1cm4gbmV3U3RhdGUgIT09IG51bGwgJiYgbmV3U3RhdGUuZGVoeWRyYXRlZCA9PT0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJlc2V0VGV4dENvbnRlbnQoY3VycmVudCkge1xuXG4gIHJlc2V0VGV4dENvbnRlbnQoY3VycmVudC5zdGF0ZU5vZGUpO1xufVxuXG52YXIgQ09NUE9ORU5UX1RZUEUgPSAwO1xudmFyIEhBU19QU0VVRE9fQ0xBU1NfVFlQRSA9IDE7XG52YXIgUk9MRV9UWVBFID0gMjtcbnZhciBURVNUX05BTUVfVFlQRSA9IDM7XG52YXIgVEVYVF9UWVBFID0gNDtcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yJDEgPSBTeW1ib2wuZm9yO1xuICBDT01QT05FTlRfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci5jb21wb25lbnQnKTtcbiAgSEFTX1BTRVVET19DTEFTU19UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLmhhc19wc2V1ZG9fY2xhc3MnKTtcbiAgUk9MRV9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLnJvbGUnKTtcbiAgVEVTVF9OQU1FX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IudGVzdF9pZCcpO1xuICBURVhUX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IudGV4dCcpO1xufVxudmFyIGNvbW1pdEhvb2tzID0gW107XG5mdW5jdGlvbiBvbkNvbW1pdFJvb3QkMSgpIHtcbiAge1xuICAgIGNvbW1pdEhvb2tzLmZvckVhY2goZnVuY3Rpb24gKGNvbW1pdEhvb2spIHtcbiAgICAgIHJldHVybiBjb21taXRIb29rKCk7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBSZWFjdEN1cnJlbnRPd25lciQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXIsXG4gICAgSXNTb21lUmVuZGVyZXJBY3RpbmcgPSBSZWFjdFNoYXJlZEludGVybmFscy5Jc1NvbWVSZW5kZXJlckFjdGluZztcbnZhciBOb0NvbnRleHQgPVxuLyogICAgICAgICAgICAgKi9cbjA7XG52YXIgQmF0Y2hlZENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAqL1xuMTtcbnZhciBFdmVudENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgICovXG4yO1xudmFyIERpc2NyZXRlRXZlbnRDb250ZXh0ID1cbi8qICAgICAgICAgKi9cbjQ7XG52YXIgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCA9XG4vKiAgICAgICAqL1xuODtcbnZhciBSZW5kZXJDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICovXG4xNjtcbnZhciBDb21taXRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICovXG4zMjtcbnZhciBSZXRyeUFmdGVyRXJyb3IgPVxuLyogICAgICAgKi9cbjY0O1xudmFyIFJvb3RJbmNvbXBsZXRlID0gMDtcbnZhciBSb290RmF0YWxFcnJvcmVkID0gMTtcbnZhciBSb290RXJyb3JlZCA9IDI7XG52YXIgUm9vdFN1c3BlbmRlZCA9IDM7XG52YXIgUm9vdFN1c3BlbmRlZFdpdGhEZWxheSA9IDQ7XG52YXIgUm9vdENvbXBsZXRlZCA9IDU7IC8vIERlc2NyaWJlcyB3aGVyZSB3ZSBhcmUgaW4gdGhlIFJlYWN0IGV4ZWN1dGlvbiBzdGFja1xuXG52YXIgZXhlY3V0aW9uQ29udGV4dCA9IE5vQ29udGV4dDsgLy8gVGhlIHJvb3Qgd2UncmUgd29ya2luZyBvblxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDsgLy8gVGhlIGZpYmVyIHdlJ3JlIHdvcmtpbmcgb25cblxudmFyIHdvcmtJblByb2dyZXNzID0gbnVsbDsgLy8gVGhlIGxhbmVzIHdlJ3JlIHJlbmRlcmluZ1xuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBTdGFjayB0aGF0IGFsbG93cyBjb21wb25lbnRzIHRvIGNoYW5nZSB0aGUgcmVuZGVyIGxhbmVzIGZvciBpdHMgc3VidHJlZVxuLy8gVGhpcyBpcyBhIHN1cGVyc2V0IG9mIHRoZSBsYW5lcyB3ZSBzdGFydGVkIHdvcmtpbmcgb24gYXQgdGhlIHJvb3QuIFRoZSBvbmx5XG4vLyBjYXNlIHdoZXJlIGl0J3MgZGlmZmVyZW50IGZyb20gYHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzYCBpcyB3aGVuIHdlXG4vLyBlbnRlciBhIHN1YnRyZWUgdGhhdCBpcyBoaWRkZW4gYW5kIG5lZWRzIHRvIGJlIHVuaGlkZGVuOiBTdXNwZW5zZSBhbmRcbi8vIE9mZnNjcmVlbiBjb21wb25lbnQuXG4vL1xuLy8gTW9zdCB0aGluZ3MgaW4gdGhlIHdvcmsgbG9vcCBzaG91bGQgZGVhbCB3aXRoIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLlxuLy8gTW9zdCB0aGluZ3MgaW4gYmVnaW4vY29tcGxldGUgcGhhc2VzIHNob3VsZCBkZWFsIHdpdGggc3VidHJlZVJlbmRlckxhbmVzLlxuXG52YXIgc3VidHJlZVJlbmRlckxhbmVzID0gTm9MYW5lcztcbnZhciBzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTm9MYW5lcyk7IC8vIFdoZXRoZXIgdG8gcm9vdCBjb21wbGV0ZWQsIGVycm9yZWQsIHN1c3BlbmRlZCwgZXRjLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJbmNvbXBsZXRlOyAvLyBBIGZhdGFsIGVycm9yLCBpZiBvbmUgaXMgdGhyb3duXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbDsgLy8gXCJJbmNsdWRlZFwiIGxhbmVzIHJlZmVyIHRvIGxhbmVzIHRoYXQgd2VyZSB3b3JrZWQgb24gZHVyaW5nIHRoaXMgcmVuZGVyLiBJdCdzXG4vLyBzbGlnaHRseSBkaWZmZXJlbnQgdGhhbiBgcmVuZGVyTGFuZXNgIGJlY2F1c2UgYHJlbmRlckxhbmVzYCBjYW4gY2hhbmdlIGFzIHlvdVxuLy8gZW50ZXIgYW5kIGV4aXQgYW4gT2Zmc2NyZWVuIHRyZWUuIFRoaXMgdmFsdWUgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZW5kZXJcbi8vIGxhbmVzIGZvciB0aGUgZW50aXJlIHJlbmRlciBwaGFzZS5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgd29yayBsZWZ0IG92ZXIgYnkgY29tcG9uZW50cyB0aGF0IHdlcmUgdmlzaXRlZCBkdXJpbmcgdGhpcyByZW5kZXIuIE9ubHlcbi8vIGluY2x1ZGVzIHVucHJvY2Vzc2VkIHVwZGF0ZXMsIG5vdCB3b3JrIGluIGJhaWxlZCBvdXQgY2hpbGRyZW4uXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBMYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCAoaW4gYW4gaW50ZXJsZWF2ZWQgZXZlbnQpIGR1cmluZyB0aGlzIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IE5vTGFuZXM7IC8vIExhbmVzIHRoYXQgd2VyZSBwaW5nZWQgKGluIGFuIGludGVybGVhdmVkIGV2ZW50KSBkdXJpbmcgdGhpcyByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IE5vTGFuZXM7XG52YXIgbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgPSBudWxsOyAvLyBUaGUgbW9zdCByZWNlbnQgdGltZSB3ZSBjb21taXR0ZWQgYSBmYWxsYmFjay4gVGhpcyBsZXRzIHVzIGVuc3VyZSBhIHRyYWluXG4vLyBtb2RlbCB3aGVyZSB3ZSBkb24ndCBjb21taXQgbmV3IGxvYWRpbmcgc3RhdGVzIGluIHRvbyBxdWljayBzdWNjZXNzaW9uLlxuXG52YXIgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IDA7XG52YXIgRkFMTEJBQ0tfVEhST1RUTEVfTVMgPSA1MDA7IC8vIFRoZSBhYnNvbHV0ZSB0aW1lIGZvciB3aGVuIHdlIHNob3VsZCBzdGFydCBnaXZpbmcgdXAgb24gcmVuZGVyaW5nXG4vLyBtb3JlIGFuZCBwcmVmZXIgQ1BVIHN1c3BlbnNlIGhldXJpc3RpY3MgaW5zdGVhZC5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBJbmZpbml0eTsgLy8gSG93IGxvbmcgYSByZW5kZXIgaXMgc3VwcG9zZWQgdG8gdGFrZSBiZWZvcmUgd2Ugc3RhcnQgZm9sbG93aW5nIENQVVxuLy8gc3VzcGVuc2UgaGV1cmlzdGljcyBhbmQgb3B0IG91dCBvZiByZW5kZXJpbmcgbW9yZSBjb250ZW50LlxuXG52YXIgUkVOREVSX1RJTUVPVVRfTVMgPSA1MDA7XG5cbmZ1bmN0aW9uIHJlc2V0UmVuZGVyVGltZXIoKSB7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBub3coKSArIFJFTkRFUl9USU1FT1VUX01TO1xufVxuXG5mdW5jdGlvbiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZTtcbn1cbnZhciBuZXh0RWZmZWN0ID0gbnVsbDtcbnZhciBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG52YXIgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbDtcbnZhciBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7XG52YXIgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbnZhciByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGw7XG52YXIgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSBOb1ByaW9yaXR5JDE7XG52YXIgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBOb0xhbmVzO1xudmFyIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudCA9IFtdO1xudmFyIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50ID0gW107XG52YXIgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG51bGw7IC8vIFVzZSB0aGVzZSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agb2YgbmVzdGVkIHVwZGF0ZXNcblxudmFyIE5FU1RFRF9VUERBVEVfTElNSVQgPSA1MDtcbnZhciBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG52YXIgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcbnZhciBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQgPSA1MDtcbnZhciBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwOyAvLyBNYXJrcyB0aGUgbmVlZCB0byByZXNjaGVkdWxlIHBlbmRpbmcgaW50ZXJhY3Rpb25zIGF0IHRoZXNlIGxhbmVzXG4vLyBkdXJpbmcgdGhlIGNvbW1pdCBwaGFzZS4gVGhpcyBlbmFibGVzIHRoZW0gdG8gYmUgdHJhY2VkIGFjcm9zcyBjb21wb25lbnRzXG4vLyB0aGF0IHNwYXduIG5ldyB3b3JrIGR1cmluZyByZW5kZXIuIEUuZy4gaGlkZGVuIGJvdW5kYXJpZXMsIHN1c3BlbmRlZCBTU1Jcbi8vIGh5ZHJhdGlvbiBvciBTdXNwZW5zZUxpc3QuXG4vLyBUT0RPOiBDYW4gdXNlIGEgYml0bWFzayBpbnN0ZWFkIG9mIGFuIGFycmF5XG5cbnZhciBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7IC8vIElmIHR3byB1cGRhdGVzIGFyZSBzY2hlZHVsZWQgd2l0aGluIHRoZSBzYW1lIGV2ZW50LCB3ZSBzaG91bGQgdHJlYXQgdGhlaXJcbi8vIGV2ZW50IHRpbWVzIGFzIHNpbXVsdGFuZW91cywgZXZlbiBpZiB0aGUgYWN0dWFsIGNsb2NrIHRpbWUgaGFzIGFkdmFuY2VkXG4vLyBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGwuXG5cbnZhciBjdXJyZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG52YXIgY3VycmVudEV2ZW50V2lwTGFuZXMgPSBOb0xhbmVzO1xudmFyIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7IC8vIERldiBvbmx5IGZsYWcgdGhhdCB0cmFja3MgaWYgcGFzc2l2ZSBlZmZlY3RzIGFyZSBjdXJyZW50bHkgYmVpbmcgZmx1c2hlZC5cbi8vIFdlIHdhcm4gYWJvdXQgc3RhdGUgdXBkYXRlcyBmb3IgdW5tb3VudGVkIGNvbXBvbmVudHMgZGlmZmVyZW50bHkgaW4gdGhpcyBjYXNlLlxuXG52YXIgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG52YXIgZm9jdXNlZEluc3RhbmNlSGFuZGxlID0gbnVsbDtcbnZhciBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldFdvcmtJblByb2dyZXNzUm9vdCgpIHtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdDtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RFdmVudFRpbWUoKSB7XG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICAvLyBXZSdyZSBpbnNpZGUgUmVhY3QsIHNvIGl0J3MgZmluZSB0byByZWFkIHRoZSBhY3R1YWwgdGltZS5cbiAgICByZXR1cm4gbm93KCk7XG4gIH0gLy8gV2UncmUgbm90IGluc2lkZSBSZWFjdCwgc28gd2UgbWF5IGJlIGluIHRoZSBtaWRkbGUgb2YgYSBicm93c2VyIGV2ZW50LlxuXG5cbiAgaWYgKGN1cnJlbnRFdmVudFRpbWUgIT09IE5vVGltZXN0YW1wKSB7XG4gICAgLy8gVXNlIHRoZSBzYW1lIHN0YXJ0IHRpbWUgZm9yIGFsbCB1cGRhdGVzIHVudGlsIHdlIGVudGVyIFJlYWN0IGFnYWluLlxuICAgIHJldHVybiBjdXJyZW50RXZlbnRUaW1lO1xuICB9IC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZSBzaW5jZSBSZWFjdCB5aWVsZGVkLiBDb21wdXRlIGEgbmV3IHN0YXJ0IHRpbWUuXG5cblxuICBjdXJyZW50RXZlbnRUaW1lID0gbm93KCk7XG4gIHJldHVybiBjdXJyZW50RXZlbnRUaW1lO1xufVxuZnVuY3Rpb24gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpIHtcbiAgLy8gU3BlY2lhbCBjYXNlc1xuICB2YXIgbW9kZSA9IGZpYmVyLm1vZGU7XG5cbiAgaWYgKChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9IGVsc2UgaWYgKChtb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSA/IFN5bmNMYW5lIDogU3luY0JhdGNoZWRMYW5lO1xuICB9IC8vIFRoZSBhbGdvcml0aG0gZm9yIGFzc2lnbmluZyBhbiB1cGRhdGUgdG8gYSBsYW5lIHNob3VsZCBiZSBzdGFibGUgZm9yIGFsbFxuICAvLyB1cGRhdGVzIGF0IHRoZSBzYW1lIHByaW9yaXR5IHdpdGhpbiB0aGUgc2FtZSBldmVudC4gVG8gZG8gdGhpcywgdGhlIGlucHV0c1xuICAvLyB0byB0aGUgYWxnb3JpdGhtIG11c3QgYmUgdGhlIHNhbWUuIEZvciBleGFtcGxlLCB3ZSB1c2UgdGhlIGByZW5kZXJMYW5lc2BcbiAgLy8gdG8gYXZvaWQgY2hvb3NpbmcgYSBsYW5lIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIHJlbmRlcmluZy5cbiAgLy9cbiAgLy8gSG93ZXZlciwgdGhlIFwiaW5jbHVkZWRcIiBsYW5lcyBjb3VsZCBiZSBtdXRhdGVkIGluIGJldHdlZW4gdXBkYXRlcyBpbiB0aGVcbiAgLy8gc2FtZSBldmVudCwgbGlrZSBpZiB5b3UgcGVyZm9ybSBhbiB1cGRhdGUgaW5zaWRlIGBmbHVzaFN5bmNgLiBPciBhbnkgb3RoZXJcbiAgLy8gY29kZSBwYXRoIHRoYXQgbWlnaHQgY2FsbCBgcHJlcGFyZUZyZXNoU3RhY2tgLlxuICAvL1xuICAvLyBUaGUgdHJpY2sgd2UgdXNlIGlzIHRvIGNhY2hlIHRoZSBmaXJzdCBvZiBlYWNoIG9mIHRoZXNlIGlucHV0cyB3aXRoaW4gYW5cbiAgLy8gZXZlbnQuIFRoZW4gcmVzZXQgdGhlIGNhY2hlZCB2YWx1ZXMgb25jZSB3ZSBjYW4gYmUgc3VyZSB0aGUgZXZlbnQgaXMgb3Zlci5cbiAgLy8gT3VyIGhldXJpc3RpYyBmb3IgdGhhdCBpcyB3aGVuZXZlciB3ZSBlbnRlciBhIGNvbmN1cnJlbnQgd29yayBsb29wLlxuICAvL1xuICAvLyBXZSdsbCBkbyB0aGUgc2FtZSBmb3IgYGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lc2AgYmVsb3cuXG5cblxuICBpZiAoY3VycmVudEV2ZW50V2lwTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXM7XG4gIH1cblxuICB2YXIgaXNUcmFuc2l0aW9uID0gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkgIT09IE5vVHJhbnNpdGlvbjtcblxuICBpZiAoaXNUcmFuc2l0aW9uKSB7XG4gICAgaWYgKGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgIT09IG51bGwgPyBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdC5wZW5kaW5nTGFuZXMgOiBOb0xhbmVzO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5kVHJhbnNpdGlvbkxhbmUoY3VycmVudEV2ZW50V2lwTGFuZXMsIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyk7XG4gIH0gLy8gVE9ETzogUmVtb3ZlIHRoaXMgZGVwZW5kZW5jeSBvbiB0aGUgU2NoZWR1bGVyIHByaW9yaXR5LlxuICAvLyBUbyBkbyB0aGF0LCB3ZSdyZSByZXBsYWNpbmcgaXQgd2l0aCBhbiB1cGRhdGUgbGFuZSBwcmlvcml0eS5cblxuXG4gIHZhciBzY2hlZHVsZXJQcmlvcml0eSA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7IC8vIFRoZSBvbGQgYmVoYXZpb3Igd2FzIHVzaW5nIHRoZSBwcmlvcml0eSBsZXZlbCBvZiB0aGUgU2NoZWR1bGVyLlxuICAvLyBUaGlzIGNvdXBsZXMgUmVhY3QgdG8gdGhlIFNjaGVkdWxlciBpbnRlcm5hbHMsIHNvIHdlJ3JlIHJlcGxhY2luZyBpdFxuICAvLyB3aXRoIHRoZSBjdXJyZW50VXBkYXRlTGFuZVByaW9yaXR5IGFib3ZlLiBBcyBhbiBleGFtcGxlIG9mIGhvdyB0aGlzXG4gIC8vIGNvdWxkIGJlIHByb2JsZW1hdGljLCBpZiB3ZSdyZSBub3QgaW5zaWRlIGBTY2hlZHVsZXIucnVuV2l0aFByaW9yaXR5YCxcbiAgLy8gdGhlbiB3ZSdsbCBnZXQgdGhlIHByaW9yaXR5IG9mIHRoZSBjdXJyZW50IHJ1bm5pbmcgU2NoZWR1bGVyIHRhc2ssXG4gIC8vIHdoaWNoIGlzIHByb2JhYmx5IG5vdCB3aGF0IHdlIHdhbnQuXG5cbiAgdmFyIGxhbmU7XG5cbiAgaWYgKCAvLyBUT0RPOiBUZW1wb3JhcnkuIFdlJ3JlIHJlbW92aW5nIHRoZSBjb25jZXB0IG9mIGRpc2NyZXRlIHVwZGF0ZXMuXG4gIChleGVjdXRpb25Db250ZXh0ICYgRGlzY3JldGVFdmVudENvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgc2NoZWR1bGVyUHJpb3JpdHkgPT09IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIpIHtcbiAgICBsYW5lID0gZmluZFVwZGF0ZUxhbmUoSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eSwgY3VycmVudEV2ZW50V2lwTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzY2hlZHVsZXJMYW5lUHJpb3JpdHkgPSBzY2hlZHVsZXJQcmlvcml0eVRvTGFuZVByaW9yaXR5KHNjaGVkdWxlclByaW9yaXR5KTtcblxuICAgIGxhbmUgPSBmaW5kVXBkYXRlTGFuZShzY2hlZHVsZXJMYW5lUHJpb3JpdHksIGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0UmV0cnlMYW5lKGZpYmVyKSB7XG4gIC8vIFRoaXMgaXMgYSBmb3JrIG9mIGByZXF1ZXN0VXBkYXRlTGFuZWAgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBTdXNwZW5zZVxuICAvLyBcInJldHJpZXNcIiBcdTIwMTQgYSBzcGVjaWFsIHVwZGF0ZSB0aGF0IGF0dGVtcHRzIHRvIGZsaXAgYSBTdXNwZW5zZSBib3VuZGFyeVxuICAvLyBmcm9tIGl0cyBwbGFjZWhvbGRlciBzdGF0ZSB0byBpdHMgcHJpbWFyeS9yZXNvbHZlZCBzdGF0ZS5cbiAgLy8gU3BlY2lhbCBjYXNlc1xuICB2YXIgbW9kZSA9IGZpYmVyLm1vZGU7XG5cbiAgaWYgKChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9IGVsc2UgaWYgKChtb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSA/IFN5bmNMYW5lIDogU3luY0JhdGNoZWRMYW5lO1xuICB9IC8vIFNlZSBgcmVxdWVzdFVwZGF0ZUxhbmVgIGZvciBleHBsYW5hdGlvbiBvZiBgY3VycmVudEV2ZW50V2lwTGFuZXNgXG5cblxuICBpZiAoY3VycmVudEV2ZW50V2lwTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXM7XG4gIH1cblxuICByZXR1cm4gZmluZFJldHJ5TGFuZShjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKSB7XG4gIGNoZWNrRm9yTmVzdGVkVXBkYXRlcygpO1xuICB3YXJuQWJvdXRSZW5kZXJQaGFzZVVwZGF0ZXNJbkRFVihmaWJlcik7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIGxhbmUpO1xuXG4gIGlmIChyb290ID09PSBudWxsKSB7XG4gICAgd2FybkFib3V0VXBkYXRlT25Vbm1vdW50ZWRGaWJlckluREVWKGZpYmVyKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBNYXJrIHRoYXQgdGhlIHJvb3QgaGFzIGEgcGVuZGluZyB1cGRhdGUuXG5cblxuICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgbGFuZSwgZXZlbnRUaW1lKTtcblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgLy8gUmVjZWl2ZWQgYW4gdXBkYXRlIHRvIGEgdHJlZSB0aGF0J3MgaW4gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcuIE1hcmtcbiAgICAvLyB0aGF0IHRoZXJlIHdhcyBhbiBpbnRlcmxlYXZlZCB1cGRhdGUgd29yayBvbiB0aGlzIHJvb3QuIFVubGVzcyB0aGVcbiAgICAvLyBgZGVmZXJSZW5kZXJQaGFzZVVwZGF0ZVRvTmV4dEJhdGNoYCBmbGFnIGlzIG9mZiBhbmQgdGhpcyBpcyBhIHJlbmRlclxuICAgIC8vIHBoYXNlIHVwZGF0ZS4gSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB0cmVhdCByZW5kZXIgcGhhc2UgdXBkYXRlcyBhcyBpZlxuICAgIC8vIHRoZXkgd2VyZSBpbnRlcmxlYXZlZCwgZm9yIGJhY2t3YXJkcyBjb21wYXQgcmVhc29ucy5cbiAgICB7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcywgbGFuZSk7XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkpIHtcbiAgICAgIC8vIFRoZSByb290IGFscmVhZHkgc3VzcGVuZGVkIHdpdGggYSBkZWxheSwgd2hpY2ggbWVhbnMgdGhpcyByZW5kZXJcbiAgICAgIC8vIGRlZmluaXRlbHkgd29uJ3QgZmluaXNoLiBTaW5jZSB3ZSBoYXZlIGEgbmV3IHVwZGF0ZSwgbGV0J3MgbWFyayBpdCBhc1xuICAgICAgLy8gc3VzcGVuZGVkIG5vdywgcmlnaHQgYmVmb3JlIG1hcmtpbmcgdGhlIGluY29taW5nIHVwZGF0ZS4gVGhpcyBoYXMgdGhlXG4gICAgICAvLyBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHJlbmRlciBhbmQgc3dpdGNoaW5nIHRvIHRoZSB1cGRhdGUuXG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgdGhpcyBkb2Vzbid0IG92ZXJyaWRlIHBpbmdzIHRoYXQgaGFwcGVuIHdoaWxlIHdlJ3ZlXG4gICAgICAvLyBhbHJlYWR5IHN0YXJ0ZWQgcmVuZGVyaW5nLlxuICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IC8vIFRPRE86IHJlcXVlc3RVcGRhdGVMYW5lUHJpb3JpdHkgYWxzbyByZWFkcyB0aGUgcHJpb3JpdHkuIFBhc3MgdGhlXG4gIC8vIHByaW9yaXR5IGFzIGFuIGFyZ3VtZW50IHRvIHRoYXQgZnVuY3Rpb24gYW5kIHRoaXMgb25lLlxuXG5cbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuXG4gIGlmIChsYW5lID09PSBTeW5jTGFuZSkge1xuICAgIGlmICggLy8gQ2hlY2sgaWYgd2UncmUgaW5zaWRlIHVuYmF0Y2hlZFVwZGF0ZXNcbiAgICAoZXhlY3V0aW9uQ29udGV4dCAmIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgLy8gQ2hlY2sgaWYgd2UncmUgbm90IGFscmVhZHkgcmVuZGVyaW5nXG4gICAgKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBSZWdpc3RlciBwZW5kaW5nIGludGVyYWN0aW9ucyBvbiB0aGUgcm9vdCB0byBhdm9pZCBsb3NpbmcgdHJhY2VkIGludGVyYWN0aW9uIGRhdGEuXG4gICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSk7IC8vIFRoaXMgaXMgYSBsZWdhY3kgZWRnZSBjYXNlLiBUaGUgaW5pdGlhbCBtb3VudCBvZiBhIFJlYWN0RE9NLnJlbmRlci1lZFxuICAgICAgLy8gcm9vdCBpbnNpZGUgb2YgYmF0Y2hlZFVwZGF0ZXMgc2hvdWxkIGJlIHN5bmNocm9ub3VzLCBidXQgbGF5b3V0IHVwZGF0ZXNcbiAgICAgIC8vIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBiYXRjaC5cblxuICAgICAgcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTtcblxuICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgICAvLyBGbHVzaCB0aGUgc3luY2hyb25vdXMgd29yayBub3csIHVubGVzcyB3ZSdyZSBhbHJlYWR5IHdvcmtpbmcgb3IgaW5zaWRlXG4gICAgICAgIC8vIGEgYmF0Y2guIFRoaXMgaXMgaW50ZW50aW9uYWxseSBpbnNpZGUgc2NoZWR1bGVVcGRhdGVPbkZpYmVyIGluc3RlYWQgb2ZcbiAgICAgICAgLy8gc2NoZWR1bGVDYWxsYmFja0ZvckZpYmVyIHRvIHByZXNlcnZlIHRoZSBhYmlsaXR5IHRvIHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAgICAgICAgLy8gd2l0aG91dCBpbW1lZGlhdGVseSBmbHVzaGluZyBpdC4gV2Ugb25seSBkbyB0aGlzIGZvciB1c2VyLWluaXRpYXRlZFxuICAgICAgICAvLyB1cGRhdGVzLCB0byBwcmVzZXJ2ZSBoaXN0b3JpY2FsIGJlaGF2aW9yIG9mIGxlZ2FjeSBtb2RlLlxuICAgICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU2NoZWR1bGUgYSBkaXNjcmV0ZSB1cGRhdGUgYnV0IG9ubHkgaWYgaXQncyBub3QgU3luYy5cbiAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBEaXNjcmV0ZUV2ZW50Q29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAoIC8vIE9ubHkgdXBkYXRlcyBhdCB1c2VyLWJsb2NraW5nIHByaW9yaXR5IG9yIGdyZWF0ZXIgYXJlIGNvbnNpZGVyZWRcbiAgICAvLyBkaXNjcmV0ZSwgZXZlbiBpbnNpZGUgYSBkaXNjcmV0ZSBldmVudC5cbiAgICBwcmlvcml0eUxldmVsID09PSBVc2VyQmxvY2tpbmdQcmlvcml0eSQyIHx8IHByaW9yaXR5TGV2ZWwgPT09IEltbWVkaWF0ZVByaW9yaXR5JDEpKSB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSByZXN1bHQgb2YgYSBkaXNjcmV0ZSBldmVudC4gVHJhY2sgdGhlIGxvd2VzdCBwcmlvcml0eVxuICAgICAgLy8gZGlzY3JldGUgdXBkYXRlIHBlciByb290IHNvIHdlIGNhbiBmbHVzaCB0aGVtIGVhcmx5LCBpZiBuZWVkZWQuXG4gICAgICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9PT0gbnVsbCkge1xuICAgICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbmV3IFNldChbcm9vdF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcy5hZGQocm9vdCk7XG4gICAgICB9XG4gICAgfSAvLyBTY2hlZHVsZSBvdGhlciB1cGRhdGVzIGFmdGVyIGluIGNhc2UgdGhlIGNhbGxiYWNrIGlzIHN5bmMuXG5cblxuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTtcbiAgfSAvLyBXZSB1c2UgdGhpcyB3aGVuIGFzc2lnbmluZyBhIGxhbmUgZm9yIGEgdHJhbnNpdGlvbiBpbnNpZGVcbiAgLy8gYHJlcXVlc3RVcGRhdGVMYW5lYC4gV2UgYXNzdW1lIGl0J3MgdGhlIHNhbWUgYXMgdGhlIHJvb3QgYmVpbmcgdXBkYXRlZCxcbiAgLy8gc2luY2UgaW4gdGhlIGNvbW1vbiBjYXNlIG9mIGEgc2luZ2xlIHJvb3QgYXBwIGl0IHByb2JhYmx5IGlzLiBJZiBpdCdzIG5vdFxuICAvLyB0aGUgc2FtZSByb290LCB0aGVuIGl0J3Mgbm90IGEgaHVnZSBkZWFsLCB3ZSBqdXN0IG1pZ2h0IGJhdGNoIG1vcmUgc3R1ZmZcbiAgLy8gdG9nZXRoZXIgbW9yZSB0aGFuIG5lY2Vzc2FyeS5cblxuXG4gIG1vc3RSZWNlbnRseVVwZGF0ZWRSb290ID0gcm9vdDtcbn0gLy8gVGhpcyBpcyBzcGxpdCBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gd2UgY2FuIG1hcmsgYSBmaWJlciB3aXRoIHBlbmRpbmdcbi8vIHdvcmsgd2l0aG91dCB0cmVhdGluZyBpdCBhcyBhIHR5cGljYWwgdXBkYXRlIHRoYXQgb3JpZ2luYXRlcyBmcm9tIGFuIGV2ZW50O1xuLy8gZS5nLiByZXRyeWluZyBhIFN1c3BlbnNlIGJvdW5kYXJ5IGlzbid0IGFuIHVwZGF0ZSwgYnV0IGl0IGRvZXMgc2NoZWR1bGUgd29ya1xuLy8gb24gYSBmaWJlci5cblxuZnVuY3Rpb24gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qoc291cmNlRmliZXIsIGxhbmUpIHtcbiAgLy8gVXBkYXRlIHRoZSBzb3VyY2UgZmliZXIncyBsYW5lc1xuICBzb3VyY2VGaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoc291cmNlRmliZXIubGFuZXMsIGxhbmUpO1xuICB2YXIgYWx0ZXJuYXRlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgbGFuZSk7XG4gIH1cblxuICB7XG4gICAgaWYgKGFsdGVybmF0ZSA9PT0gbnVsbCAmJiAoc291cmNlRmliZXIuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpO1xuICAgIH1cbiAgfSAvLyBXYWxrIHRoZSBwYXJlbnQgcGF0aCB0byB0aGUgcm9vdCBhbmQgdXBkYXRlIHRoZSBjaGlsZCBleHBpcmF0aW9uIHRpbWUuXG5cblxuICB2YXIgbm9kZSA9IHNvdXJjZUZpYmVyO1xuICB2YXIgcGFyZW50ID0gc291cmNlRmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICBwYXJlbnQuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMocGFyZW50LmNoaWxkTGFuZXMsIGxhbmUpO1xuICAgIGFsdGVybmF0ZSA9IHBhcmVudC5hbHRlcm5hdGU7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIGxhbmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIGlmICgocGFyZW50LmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gcGFyZW50O1xuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cblxuICBpZiAobm9kZS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgdmFyIHJvb3QgPSBub2RlLnN0YXRlTm9kZTtcbiAgICByZXR1cm4gcm9vdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSAvLyBVc2UgdGhpcyBmdW5jdGlvbiB0byBzY2hlZHVsZSBhIHRhc2sgZm9yIGEgcm9vdC4gVGhlcmUncyBvbmx5IG9uZSB0YXNrIHBlclxuLy8gcm9vdDsgaWYgYSB0YXNrIHdhcyBhbHJlYWR5IHNjaGVkdWxlZCwgd2UnbGwgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBwcmlvcml0eVxuLy8gb2YgdGhlIGV4aXN0aW5nIHRhc2sgaXMgdGhlIHNhbWUgYXMgdGhlIHByaW9yaXR5IG9mIHRoZSBuZXh0IGxldmVsIHRoYXQgdGhlXG4vLyByb290IGhhcyB3b3JrIG9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBldmVyeSB1cGRhdGUsIGFuZCByaWdodCBiZWZvcmVcbi8vIGV4aXRpbmcgYSB0YXNrLlxuXG5cbmZ1bmN0aW9uIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBjdXJyZW50VGltZSkge1xuICB2YXIgZXhpc3RpbmdDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTsgLy8gQ2hlY2sgaWYgYW55IGxhbmVzIGFyZSBiZWluZyBzdGFydmVkIGJ5IG90aGVyIHdvcmsuIElmIHNvLCBtYXJrIHRoZW0gYXNcbiAgLy8gZXhwaXJlZCBzbyB3ZSBrbm93IHRvIHdvcmsgb24gdGhvc2UgbmV4dC5cblxuICBtYXJrU3RhcnZlZExhbmVzQXNFeHBpcmVkKHJvb3QsIGN1cnJlbnRUaW1lKTsgLy8gRGV0ZXJtaW5lIHRoZSBuZXh0IGxhbmVzIHRvIHdvcmsgb24sIGFuZCB0aGVpciBwcmlvcml0eS5cblxuICB2YXIgbmV4dExhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lcyk7IC8vIFRoaXMgcmV0dXJucyB0aGUgcHJpb3JpdHkgbGV2ZWwgY29tcHV0ZWQgZHVyaW5nIHRoZSBgZ2V0TmV4dExhbmVzYCBjYWxsLlxuXG4gIHZhciBuZXdDYWxsYmFja1ByaW9yaXR5ID0gcmV0dXJuTmV4dExhbmVzUHJpb3JpdHkoKTtcblxuICBpZiAobmV4dExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBUaGVyZSdzIG5vdGhpbmcgdG8gd29yayBvbi5cbiAgICBpZiAoZXhpc3RpbmdDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgICAgIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICAgIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfSAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHRhc2suIFdlIG1heSBiZSBhYmxlIHRvIHJldXNlIGl0LlxuXG5cbiAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyIGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSA9IHJvb3QuY2FsbGJhY2tQcmlvcml0eTtcblxuICAgIGlmIChleGlzdGluZ0NhbGxiYWNrUHJpb3JpdHkgPT09IG5ld0NhbGxiYWNrUHJpb3JpdHkpIHtcbiAgICAgIC8vIFRoZSBwcmlvcml0eSBoYXNuJ3QgY2hhbmdlZC4gV2UgY2FuIHJldXNlIHRoZSBleGlzdGluZyB0YXNrLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gVGhlIHByaW9yaXR5IGNoYW5nZWQuIENhbmNlbCB0aGUgZXhpc3RpbmcgY2FsbGJhY2suIFdlJ2xsIHNjaGVkdWxlIGEgbmV3XG4gICAgLy8gb25lIGJlbG93LlxuXG5cbiAgICBjYW5jZWxDYWxsYmFjayhleGlzdGluZ0NhbGxiYWNrTm9kZSk7XG4gIH0gLy8gU2NoZWR1bGUgYSBuZXcgY2FsbGJhY2suXG5cblxuICB2YXIgbmV3Q2FsbGJhY2tOb2RlO1xuXG4gIGlmIChuZXdDYWxsYmFja1ByaW9yaXR5ID09PSBTeW5jTGFuZVByaW9yaXR5KSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBTeW5jIFJlYWN0IGNhbGxiYWNrcyBhcmUgc2NoZWR1bGVkIG9uIGEgc3BlY2lhbFxuICAgIC8vIGludGVybmFsIHF1ZXVlXG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVTeW5jQ2FsbGJhY2socGVyZm9ybVN5bmNXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICB9IGVsc2UgaWYgKG5ld0NhbGxiYWNrUHJpb3JpdHkgPT09IFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5KSB7XG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBwZXJmb3JtU3luY1dvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVkdWxlclByaW9yaXR5TGV2ZWwgPSBsYW5lUHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KG5ld0NhbGxiYWNrUHJpb3JpdHkpO1xuICAgIG5ld0NhbGxiYWNrTm9kZSA9IHNjaGVkdWxlQ2FsbGJhY2soc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCwgcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICB9XG5cbiAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gbmV3Q2FsbGJhY2tQcmlvcml0eTtcbiAgcm9vdC5jYWxsYmFja05vZGUgPSBuZXdDYWxsYmFja05vZGU7XG59IC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBldmVyeSBjb25jdXJyZW50IHRhc2ssIGkuZS4gYW55dGhpbmcgdGhhdFxuLy8gZ29lcyB0aHJvdWdoIFNjaGVkdWxlci5cblxuXG5mdW5jdGlvbiBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3Qocm9vdCkge1xuICAvLyBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIGEgUmVhY3QgZXZlbnQsIHdlIGNhbiBjbGVhciB0aGUgY3VycmVudFxuICAvLyBldmVudCB0aW1lLiBUaGUgbmV4dCB1cGRhdGUgd2lsbCBjb21wdXRlIGEgbmV3IGV2ZW50IHRpbWUuXG4gIGN1cnJlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcbiAgY3VycmVudEV2ZW50V2lwTGFuZXMgPSBOb0xhbmVzO1xuICBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfSAvLyBGbHVzaCBhbnkgcGVuZGluZyBwYXNzaXZlIGVmZmVjdHMgYmVmb3JlIGRlY2lkaW5nIHdoaWNoIGxhbmVzIHRvIHdvcmsgb24sXG4gIC8vIGluIGNhc2UgdGhleSBzY2hlZHVsZSBhZGRpdGlvbmFsIHdvcmsuXG5cblxuICB2YXIgb3JpZ2luYWxDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTtcbiAgdmFyIGRpZEZsdXNoUGFzc2l2ZUVmZmVjdHMgPSBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG5cbiAgaWYgKGRpZEZsdXNoUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAvLyBTb21ldGhpbmcgaW4gdGhlIHBhc3NpdmUgZWZmZWN0IHBoYXNlIG1heSBoYXZlIGNhbmNlbGVkIHRoZSBjdXJyZW50IHRhc2suXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhc2sgbm9kZSBmb3IgdGhpcyByb290IHdhcyBjaGFuZ2VkLlxuICAgIGlmIChyb290LmNhbGxiYWNrTm9kZSAhPT0gb3JpZ2luYWxDYWxsYmFja05vZGUpIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50IHRhc2sgd2FzIGNhbmNlbGVkLiBFeGl0LiBXZSBkb24ndCBuZWVkIHRvIGNhbGxcbiAgICAgIC8vIGBlbnN1cmVSb290SXNTY2hlZHVsZWRgIGJlY2F1c2UgdGhlIGNoZWNrIGFib3ZlIGltcGxpZXMgZWl0aGVyIHRoYXRcbiAgICAgIC8vIHRoZXJlJ3MgYSBuZXcgdGFzaywgb3IgdGhhdCB0aGVyZSdzIG5vIHJlbWFpbmluZyB3b3JrIG9uIHRoaXMgcm9vdC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSAvLyBEZXRlcm1pbmUgdGhlIG5leHQgZXhwaXJhdGlvbiB0aW1lIHRvIHdvcmsgb24sIHVzaW5nIHRoZSBmaWVsZHMgc3RvcmVkXG4gIC8vIG9uIHRoZSByb290LlxuXG5cbiAgdmFyIGxhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lcyk7XG5cbiAgaWYgKGxhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gRGVmZW5zaXZlIGNvZGluZy4gVGhpcyBpcyBuZXZlciBleHBlY3RlZCB0byBoYXBwZW4uXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKTtcblxuICBpZiAoaW5jbHVkZXNTb21lTGFuZSh3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpKSB7XG4gICAgLy8gVGhlIHJlbmRlciBpbmNsdWRlZCBsYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAvLyBGb3IgZXhhbXBsZSwgd2hlbiB1bmhpZGluZyBhIGhpZGRlbiB0cmVlLCB3ZSBpbmNsdWRlIGFsbCB0aGUgbGFuZXNcbiAgICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBza2lwcGVkIHdoZW4gdGhlIHRyZWUgd2FzIGhpZGRlbi4gVGhhdCBzZXQgb2ZcbiAgICAvLyBsYW5lcyBpcyBhIHN1cGVyc2V0IG9mIHRoZSBsYW5lcyB3ZSBzdGFydGVkIHJlbmRlcmluZyB3aXRoLlxuICAgIC8vXG4gICAgLy8gU28gd2UnbGwgdGhyb3cgb3V0IHRoZSBjdXJyZW50IHdvcmsgYW5kIHJlc3RhcnQuXG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gIH0gZWxzZSBpZiAoZXhpdFN0YXR1cyAhPT0gUm9vdEluY29tcGxldGUpIHtcbiAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEVycm9yZWQpIHtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmV0cnlBZnRlckVycm9yOyAvLyBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgaHlkcmF0aW9uLFxuICAgICAgLy8gZGlzY2FyZCBzZXJ2ZXIgcmVzcG9uc2UgYW5kIGZhbGwgYmFjayB0byBjbGllbnQgc2lkZSByZW5kZXIuXG5cbiAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICB9IC8vIElmIHNvbWV0aGluZyB0aHJldyBhbiBlcnJvciwgdHJ5IHJlbmRlcmluZyBvbmUgbW9yZSB0aW1lLiBXZSdsbCByZW5kZXJcbiAgICAgIC8vIHN5bmNocm9ub3VzbHkgdG8gYmxvY2sgY29uY3VycmVudCBkYXRhIG11dGF0aW9ucywgYW5kIHdlJ2xsIGluY2x1ZGVzXG4gICAgICAvLyBhbGwgcGVuZGluZyB1cGRhdGVzIGFyZSBpbmNsdWRlZC4gSWYgaXQgc3RpbGwgZmFpbHMgYWZ0ZXIgdGhlIHNlY29uZFxuICAgICAgLy8gYXR0ZW1wdCwgd2UnbGwgZ2l2ZSB1cCBhbmQgY29tbWl0IHRoZSByZXN1bHRpbmcgdHJlZS5cblxuXG4gICAgICBsYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpO1xuXG4gICAgICBpZiAobGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEZhdGFsRXJyb3JlZCkge1xuICAgICAgdmFyIGZhdGFsRXJyb3IgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yO1xuICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgICB0aHJvdyBmYXRhbEVycm9yO1xuICAgIH0gLy8gV2Ugbm93IGhhdmUgYSBjb25zaXN0ZW50IHRyZWUuIFRoZSBuZXh0IHN0ZXAgaXMgZWl0aGVyIHRvIGNvbW1pdCBpdCxcbiAgICAvLyBvciwgaWYgc29tZXRoaW5nIHN1c3BlbmRlZCwgd2FpdCB0byBjb21taXQgaXQgYWZ0ZXIgYSB0aW1lb3V0LlxuXG5cbiAgICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgICByb290LmZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yaztcbiAgICByb290LmZpbmlzaGVkTGFuZXMgPSBsYW5lcztcbiAgICBmaW5pc2hDb25jdXJyZW50UmVuZGVyKHJvb3QsIGV4aXRTdGF0dXMsIGxhbmVzKTtcbiAgfVxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG5cbiAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlID09PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgIC8vIFRoZSB0YXNrIG5vZGUgc2NoZWR1bGVkIGZvciB0aGlzIHJvb3QgaXMgdGhlIHNhbWUgb25lIHRoYXQnc1xuICAgIC8vIGN1cnJlbnRseSBleGVjdXRlZC4gTmVlZCB0byByZXR1cm4gYSBjb250aW51YXRpb24uXG4gICAgcmV0dXJuIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgbGFuZXMpIHtcbiAgc3dpdGNoIChleGl0U3RhdHVzKSB7XG4gICAgY2FzZSBSb290SW5jb21wbGV0ZTpcbiAgICBjYXNlIFJvb3RGYXRhbEVycm9yZWQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJSb290IGRpZCBub3QgY29tcGxldGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAvLyBGbG93IGtub3dzIGFib3V0IGludmFyaWFudCwgc28gaXQgY29tcGxhaW5zIGlmIEkgYWRkIGEgYnJlYWtcbiAgICAvLyBzdGF0ZW1lbnQsIGJ1dCBlc2xpbnQgZG9lc24ndCBrbm93IGFib3V0IGludmFyaWFudCwgc28gaXQgY29tcGxhaW5zXG4gICAgLy8gaWYgSSBkby4gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG5cbiAgICBjYXNlIFJvb3RFcnJvcmVkOlxuICAgICAge1xuICAgICAgICAvLyBXZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGF0dGVtcHRlZCB0byByZXRyeSB0aGlzIHRyZWUuIElmIHdlIHJlYWNoZWRcbiAgICAgICAgLy8gdGhpcyBwb2ludCwgaXQgZXJyb3JlZCBhZ2Fpbi4gQ29tbWl0IGl0LlxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUm9vdFN1c3BlbmRlZDpcbiAgICAgIHtcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7IC8vIFdlIGhhdmUgYW4gYWNjZXB0YWJsZSBsb2FkaW5nIHN0YXRlLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgd2VcbiAgICAgICAgLy8gc2hvdWxkIGltbWVkaWF0ZWx5IGNvbW1pdCBpdCBvciB3YWl0IGEgYml0LlxuXG4gICAgICAgIGlmIChpbmNsdWRlc09ubHlSZXRyaWVzKGxhbmVzKSAmJiAvLyBkbyBub3QgZGVsYXkgaWYgd2UncmUgaW5zaWRlIGFuIGFjdCgpIHNjb3BlXG4gICAgICAgICFzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSkge1xuICAgICAgICAgIC8vIFRoaXMgcmVuZGVyIG9ubHkgaW5jbHVkZWQgcmV0cmllcywgbm8gdXBkYXRlcy4gVGhyb3R0bGUgY29tbWl0dGluZ1xuICAgICAgICAgIC8vIHJldHJpZXMgc28gdGhhdCB3ZSBkb24ndCBzaG93IHRvbyBtYW55IGxvYWRpbmcgc3RhdGVzIHRvbyBxdWlja2x5LlxuICAgICAgICAgIHZhciBtc1VudGlsVGltZW91dCA9IGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgKyBGQUxMQkFDS19USFJPVFRMRV9NUyAtIG5vdygpOyAvLyBEb24ndCBib3RoZXIgd2l0aCBhIHZlcnkgc2hvcnQgc3VzcGVuc2UgdGltZS5cblxuICAgICAgICAgIGlmIChtc1VudGlsVGltZW91dCA+IDEwKSB7XG4gICAgICAgICAgICB2YXIgbmV4dExhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIE5vTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAobmV4dExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgICAgIC8vIFRoZXJlJ3MgYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgcm9vdC5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgICAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHN1c3BlbmRlZExhbmVzLCBsYW5lcykpIHtcbiAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIHByZWZlciB0byByZW5kZXIgdGhlIGZhbGxiYWNrIG9mIGF0IHRoZSBsYXN0XG4gICAgICAgICAgICAgIC8vIHN1c3BlbmRlZCBsZXZlbC4gUGluZyB0aGUgbGFzdCBzdXNwZW5kZWQgbGV2ZWwgdG8gdHJ5XG4gICAgICAgICAgICAgIC8vIHJlbmRlcmluZyBpdCBhZ2Fpbi5cbiAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIHN1c3BlbmRlZCBsYW5lcyBhcmUgSWRsZT8gU2hvdWxkIG5vdCByZXN0YXJ0LlxuICAgICAgICAgICAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgICAgICAgICAgICBtYXJrUm9vdFBpbmdlZChyb290LCBzdXNwZW5kZWRMYW5lcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSAvLyBUaGUgcmVuZGVyIGlzIHN1c3BlbmRlZCwgaXQgaGFzbid0IHRpbWVkIG91dCwgYW5kIHRoZXJlJ3Mgbm9cbiAgICAgICAgICAgIC8vIGxvd2VyIHByaW9yaXR5IHdvcmsgdG8gZG8uIEluc3RlYWQgb2YgY29tbWl0dGluZyB0aGUgZmFsbGJhY2tcbiAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5LCB3YWl0IGZvciBtb3JlIGRhdGEgdG8gYXJyaXZlLlxuXG5cbiAgICAgICAgICAgIHJvb3QudGltZW91dEhhbmRsZSA9IHNjaGVkdWxlVGltZW91dChjb21taXRSb290LmJpbmQobnVsbCwgcm9vdCksIG1zVW50aWxUaW1lb3V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUaGUgd29yayBleHBpcmVkLiBDb21taXQgaW1tZWRpYXRlbHkuXG5cblxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUm9vdFN1c3BlbmRlZFdpdGhEZWxheTpcbiAgICAgIHtcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKGluY2x1ZGVzT25seVRyYW5zaXRpb25zKGxhbmVzKSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSB0cmFuc2l0aW9uLCBzbyB3ZSBzaG91bGQgZXhpdCB3aXRob3V0IGNvbW1pdHRpbmcgYVxuICAgICAgICAgIC8vIHBsYWNlaG9sZGVyIGFuZCB3aXRob3V0IHNjaGVkdWxpbmcgYSB0aW1lb3V0LiBEZWxheSBpbmRlZmluaXRlbHlcbiAgICAgICAgICAvLyB1bnRpbCB3ZSByZWNlaXZlIG1vcmUgZGF0YS5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHRyYW5zaXRpb24sIGJ1dCB3ZSBkaWQgdHJpZ2dlciBhbiBhdm9pZGVkIHN0YXRlLlxuICAgICAgICAgIC8vIFNjaGVkdWxlIGEgcGxhY2Vob2xkZXIgdG8gZGlzcGxheSBhZnRlciBhIHNob3J0IGRlbGF5LCB1c2luZyB0aGUgSnVzdFxuICAgICAgICAgIC8vIE5vdGljZWFibGUgRGlmZmVyZW5jZS5cbiAgICAgICAgICAvLyBUT0RPOiBJcyB0aGUgSk5EIG9wdGltaXphdGlvbiB3b3J0aCB0aGUgYWRkZWQgY29tcGxleGl0eT8gSWYgdGhpcyBpc1xuICAgICAgICAgIC8vIHRoZSBvbmx5IHJlYXNvbiB3ZSB0cmFjayB0aGUgZXZlbnQgdGltZSwgdGhlbiBwcm9iYWJseSBub3QuXG4gICAgICAgICAgLy8gQ29uc2lkZXIgcmVtb3ZpbmcuXG4gICAgICAgICAgdmFyIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBnZXRNb3N0UmVjZW50RXZlbnRUaW1lKHJvb3QsIGxhbmVzKTtcbiAgICAgICAgICB2YXIgZXZlbnRUaW1lTXMgPSBtb3N0UmVjZW50RXZlbnRUaW1lO1xuICAgICAgICAgIHZhciB0aW1lRWxhcHNlZE1zID0gbm93KCkgLSBldmVudFRpbWVNcztcblxuICAgICAgICAgIHZhciBfbXNVbnRpbFRpbWVvdXQgPSBqbmQodGltZUVsYXBzZWRNcykgLSB0aW1lRWxhcHNlZE1zOyAvLyBEb24ndCBib3RoZXIgd2l0aCBhIHZlcnkgc2hvcnQgc3VzcGVuc2UgdGltZS5cblxuXG4gICAgICAgICAgaWYgKF9tc1VudGlsVGltZW91dCA+IDEwKSB7XG4gICAgICAgICAgICAvLyBJbnN0ZWFkIG9mIGNvbW1pdHRpbmcgdGhlIGZhbGxiYWNrIGltbWVkaWF0ZWx5LCB3YWl0IGZvciBtb3JlIGRhdGFcbiAgICAgICAgICAgIC8vIHRvIGFycml2ZS5cbiAgICAgICAgICAgIHJvb3QudGltZW91dEhhbmRsZSA9IHNjaGVkdWxlVGltZW91dChjb21taXRSb290LmJpbmQobnVsbCwgcm9vdCksIF9tc1VudGlsVGltZW91dCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gQ29tbWl0IHRoZSBwbGFjZWhvbGRlci5cblxuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290Q29tcGxldGVkOlxuICAgICAge1xuICAgICAgICAvLyBUaGUgd29yayBjb21wbGV0ZWQuIFJlYWR5IHRvIGNvbW1pdC5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biByb290IGV4aXQgc3RhdHVzLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBzdXNwZW5kZWRMYW5lcykge1xuICAvLyBXaGVuIHN1c3BlbmRpbmcsIHdlIHNob3VsZCBhbHdheXMgZXhjbHVkZSBsYW5lcyB0aGF0IHdlcmUgcGluZ2VkIG9yIChtb3JlXG4gIC8vIHJhcmVseSwgc2luY2Ugd2UgdHJ5IHRvIGF2b2lkIGl0KSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAvLyBUT0RPOiBMb2wgbWF5YmUgdGhlcmUncyBhIGJldHRlciB3YXkgdG8gZmFjdG9yIHRoaXMgYmVzaWRlcyB0aGlzXG4gIC8vIG9ibm94aW91c2x5IG5hbWVkIGZ1bmN0aW9uIDopXG4gIHN1c3BlbmRlZExhbmVzID0gcmVtb3ZlTGFuZXMoc3VzcGVuZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzKTtcbiAgc3VzcGVuZGVkTGFuZXMgPSByZW1vdmVMYW5lcyhzdXNwZW5kZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKTtcbiAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpO1xufSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igc3luY2hyb25vdXMgdGFza3MgdGhhdCBkb24ndCBnb1xuLy8gdGhyb3VnaCBTY2hlZHVsZXJcblxuXG5mdW5jdGlvbiBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCkge1xuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIgKTtcbiAgICB9XG4gIH1cblxuICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIHZhciBsYW5lcztcbiAgdmFyIGV4aXRTdGF0dXM7XG5cbiAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJiBpbmNsdWRlc1NvbWVMYW5lKHJvb3QuZXhwaXJlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykpIHtcbiAgICAvLyBUaGVyZSdzIGEgcGFydGlhbCB0cmVlLCBhbmQgYXQgbGVhc3Qgb25lIG9mIGl0cyBsYW5lcyBoYXMgZXhwaXJlZC4gRmluaXNoXG4gICAgLy8gcmVuZGVyaW5nIGl0IGJlZm9yZSByZW5kZXJpbmcgdGhlIHJlc3Qgb2YgdGhlIGV4cGlyZWQgd29yay5cbiAgICBsYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzO1xuICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG5cbiAgICBpZiAoaW5jbHVkZXNTb21lTGFuZSh3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpKSB7XG4gICAgICAvLyBUaGUgcmVuZGVyIGluY2x1ZGVkIGxhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgLy8gRm9yIGV4YW1wbGUsIHdoZW4gdW5oaWRpbmcgYSBoaWRkZW4gdHJlZSwgd2UgaW5jbHVkZSBhbGwgdGhlIGxhbmVzXG4gICAgICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBza2lwcGVkIHdoZW4gdGhlIHRyZWUgd2FzIGhpZGRlbi4gVGhhdCBzZXQgb2ZcbiAgICAgIC8vIGxhbmVzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgcmVuZGVyaW5nIHdpdGguXG4gICAgICAvL1xuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgb25seSBoYXBwZW5zIHdoZW4gcGFydCBvZiB0aGUgdHJlZSBpcyByZW5kZXJlZFxuICAgICAgLy8gY29uY3VycmVudGx5LiBJZiB0aGUgd2hvbGUgdHJlZSBpcyByZW5kZXJlZCBzeW5jaHJvbm91c2x5LCB0aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbm8gaW50ZXJsZWF2ZWQgZXZlbnRzLlxuICAgICAgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgbGFuZXMpO1xuICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgTm9MYW5lcyk7XG4gICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIGlmIChyb290LnRhZyAhPT0gTGVnYWN5Um9vdCAmJiBleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmV0cnlBZnRlckVycm9yOyAvLyBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgaHlkcmF0aW9uLFxuICAgIC8vIGRpc2NhcmQgc2VydmVyIHJlc3BvbnNlIGFuZCBmYWxsIGJhY2sgdG8gY2xpZW50IHNpZGUgcmVuZGVyLlxuXG4gICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgIH0gLy8gSWYgc29tZXRoaW5nIHRocmV3IGFuIGVycm9yLCB0cnkgcmVuZGVyaW5nIG9uZSBtb3JlIHRpbWUuIFdlJ2xsIHJlbmRlclxuICAgIC8vIHN5bmNocm9ub3VzbHkgdG8gYmxvY2sgY29uY3VycmVudCBkYXRhIG11dGF0aW9ucywgYW5kIHdlJ2xsIGluY2x1ZGVzXG4gICAgLy8gYWxsIHBlbmRpbmcgdXBkYXRlcyBhcmUgaW5jbHVkZWQuIElmIGl0IHN0aWxsIGZhaWxzIGFmdGVyIHRoZSBzZWNvbmRcbiAgICAvLyBhdHRlbXB0LCB3ZSdsbCBnaXZlIHVwIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB0cmVlLlxuXG5cbiAgICBsYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpO1xuXG4gICAgaWYgKGxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChleGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgdmFyIGZhdGFsRXJyb3IgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yO1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgdGhyb3cgZmF0YWxFcnJvcjtcbiAgfSAvLyBXZSBub3cgaGF2ZSBhIGNvbnNpc3RlbnQgdHJlZS4gQmVjYXVzZSB0aGlzIGlzIGEgc3luYyByZW5kZXIsIHdlXG4gIC8vIHdpbGwgY29tbWl0IGl0IGV2ZW4gaWYgc29tZXRoaW5nIHN1c3BlbmRlZC5cblxuXG4gIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICByb290LmZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yaztcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gbGFuZXM7XG4gIGNvbW1pdFJvb3Qocm9vdCk7IC8vIEJlZm9yZSBleGl0aW5nLCBtYWtlIHN1cmUgdGhlcmUncyBhIGNhbGxiYWNrIHNjaGVkdWxlZCBmb3IgdGhlIG5leHRcbiAgLy8gcGVuZGluZyBsZXZlbC5cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGZsdXNoRGlzY3JldGVVcGRhdGVzKCkge1xuICAvLyBUT0RPOiBTaG91bGQgYmUgYWJsZSB0byBmbHVzaCBpbnNpZGUgYmF0Y2hlZFVwZGF0ZXMsIGJ1dCBub3QgaW5zaWRlIGBhY3RgLlxuICAvLyBIb3dldmVyLCBgYWN0YCB1c2VzIGBiYXRjaGVkVXBkYXRlc2AsIHNvIHRoZXJlJ3Mgbm8gd2F5IHRvIGRpc3Rpbmd1aXNoXG4gIC8vIHRob3NlIHR3byBjYXNlcy4gTmVlZCB0byBmaXggdGhpcyBiZWZvcmUgZXhwb3NpbmcgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNcbiAgLy8gYXMgYSBwdWJsaWMgQVBJLlxuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoQmF0Y2hlZENvbnRleHQgfCBSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICB7XG4gICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAgIGVycm9yKCd1bnN0YWJsZV9mbHVzaERpc2NyZXRlVXBkYXRlczogQ2Fubm90IGZsdXNoIHVwZGF0ZXMgd2hlbiBSZWFjdCBpcyAnICsgJ2FscmVhZHkgcmVuZGVyaW5nLicpO1xuICAgICAgfVxuICAgIH0gLy8gV2UncmUgYWxyZWFkeSByZW5kZXJpbmcsIHNvIHdlIGNhbid0IHN5bmNocm9ub3VzbHkgZmx1c2ggcGVuZGluZyB3b3JrLlxuICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYSBuZXN0ZWQgZXZlbnQgZGlzcGF0Y2ggdHJpZ2dlcmVkIGJ5IGEgbGlmZWN5Y2xlL2VmZmVjdCxcbiAgICAvLyBsaWtlIGBlbC5mb2N1cygpYC4gRXhpdC5cblxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZmx1c2hQZW5kaW5nRGlzY3JldGVVcGRhdGVzKCk7IC8vIElmIHRoZSBkaXNjcmV0ZSB1cGRhdGVzIHNjaGVkdWxlZCBwYXNzaXZlIGVmZmVjdHMsIGZsdXNoIHRoZW0gbm93IHNvIHRoYXRcbiAgLy8gdGhleSBmaXJlIGJlZm9yZSB0aGUgbmV4dCBzZXJpYWwgZXZlbnQuXG5cbiAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMoKSB7XG4gIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzICE9PSBudWxsKSB7XG4gICAgLy8gRm9yIGVhY2ggcm9vdCB3aXRoIHBlbmRpbmcgZGlzY3JldGUgdXBkYXRlcywgc2NoZWR1bGUgYSBjYWxsYmFjayB0b1xuICAgIC8vIGltbWVkaWF0ZWx5IGZsdXNoIHRoZW0uXG4gICAgdmFyIHJvb3RzID0gcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcztcbiAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbnVsbDtcbiAgICByb290cy5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICBtYXJrRGlzY3JldGVVcGRhdGVzRXhwaXJlZChyb290KTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgfSk7XG4gIH0gLy8gTm93IGZsdXNoIHRoZSBpbW1lZGlhdGUgcXVldWUuXG5cblxuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG59XG5cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzJDEoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBiYXRjaGVkRXZlbnRVcGRhdGVzJDEoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBFdmVudENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlzY3JldGVVcGRhdGVzJDEoZm4sIGEsIGIsIGMsIGQpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBEaXNjcmV0ZUV2ZW50Q29udGV4dDtcblxuICB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMShVc2VyQmxvY2tpbmdQcmlvcml0eSQyLCBmbi5iaW5kKG51bGwsIGEsIGIsIGMsIGQpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB1bmJhdGNoZWRVcGRhdGVzKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgJj0gfkJhdGNoZWRDb250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IExlZ2FjeVVuYmF0Y2hlZENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hTeW5jKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgaWYgKChwcmV2RXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICB7XG4gICAgICBlcnJvcignZmx1c2hTeW5jIHdhcyBjYWxsZWQgZnJvbSBpbnNpZGUgYSBsaWZlY3ljbGUgbWV0aG9kLiBSZWFjdCBjYW5ub3QgJyArICdmbHVzaCB3aGVuIFJlYWN0IGlzIGFscmVhZHkgcmVuZGVyaW5nLiBDb25zaWRlciBtb3ZpbmcgdGhpcyBjYWxsIHRvICcgKyAnYSBzY2hlZHVsZXIgdGFzayBvciBtaWNybyB0YXNrLicpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihhKTtcbiAgfVxuXG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQmF0Y2hlZENvbnRleHQ7XG5cbiAge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZuLmJpbmQobnVsbCwgYSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0OyAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoLlxuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBoYXBwZW4gZXZlbiBpZiBiYXRjaGVkVXBkYXRlcyBpcyBoaWdoZXIgdXBcbiAgICAgIC8vIHRoZSBzdGFjay5cblxuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHVzaFJlbmRlckxhbmVzKGZpYmVyLCBsYW5lcykge1xuICBwdXNoKHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciwgc3VidHJlZVJlbmRlckxhbmVzLCBmaWJlcik7XG4gIHN1YnRyZWVSZW5kZXJMYW5lcyA9IG1lcmdlTGFuZXMoc3VidHJlZVJlbmRlckxhbmVzLCBsYW5lcyk7XG4gIHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIGxhbmVzKTtcbn1cbmZ1bmN0aW9uIHBvcFJlbmRlckxhbmVzKGZpYmVyKSB7XG4gIHN1YnRyZWVSZW5kZXJMYW5lcyA9IHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvci5jdXJyZW50O1xuICBwb3Aoc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKSB7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcbiAgdmFyIHRpbWVvdXRIYW5kbGUgPSByb290LnRpbWVvdXRIYW5kbGU7XG5cbiAgaWYgKHRpbWVvdXRIYW5kbGUgIT09IG5vVGltZW91dCkge1xuICAgIC8vIFRoZSByb290IHByZXZpb3VzIHN1c3BlbmRlZCBhbmQgc2NoZWR1bGVkIGEgdGltZW91dCB0byBjb21taXQgYSBmYWxsYmFja1xuICAgIC8vIHN0YXRlLiBOb3cgdGhhdCB3ZSBoYXZlIGFkZGl0aW9uYWwgd29yaywgY2FuY2VsIHRoZSB0aW1lb3V0LlxuICAgIHJvb3QudGltZW91dEhhbmRsZSA9IG5vVGltZW91dDsgLy8gJEZsb3dGaXhNZSBDb21wbGFpbnMgbm9UaW1lb3V0IGlzIG5vdCBhIFRpbWVvdXRJRCwgZGVzcGl0ZSB0aGUgY2hlY2sgYWJvdmVcblxuICAgIGNhbmNlbFRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gIH1cblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICB2YXIgaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gICAgd2hpbGUgKGludGVycnVwdGVkV29yayAhPT0gbnVsbCkge1xuICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGludGVycnVwdGVkV29yayk7XG4gICAgICBpbnRlcnJ1cHRlZFdvcmsgPSBpbnRlcnJ1cHRlZFdvcmsucmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IHJvb3Q7XG4gIHdvcmtJblByb2dyZXNzID0gY3JlYXRlV29ya0luUHJvZ3Jlc3Mocm9vdC5jdXJyZW50LCBudWxsKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBzdWJ0cmVlUmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzID0gbGFuZXM7XG4gIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5jb21wbGV0ZTtcbiAgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gTm9MYW5lcztcblxuICB7XG4gICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBudWxsO1xuICB9XG5cbiAge1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSkge1xuICBkbyB7XG4gICAgdmFyIGVycm9yZWRXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUmVzZXQgbW9kdWxlLWxldmVsIHN0YXRlIHRoYXQgd2FzIHNldCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rc0FmdGVyVGhyb3coKTtcbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7IC8vIFRPRE86IEkgZm91bmQgYW5kIGFkZGVkIHRoaXMgbWlzc2luZyBsaW5lIHdoaWxlIGludmVzdGlnYXRpbmcgYVxuICAgICAgLy8gc2VwYXJhdGUgaXNzdWUuIFdyaXRlIGEgcmVncmVzc2lvbiB0ZXN0IHVzaW5nIHN0cmluZyByZWZzLlxuXG4gICAgICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsO1xuXG4gICAgICBpZiAoZXJyb3JlZFdvcmsgPT09IG51bGwgfHwgZXJyb3JlZFdvcmsucmV0dXJuID09PSBudWxsKSB7XG4gICAgICAgIC8vIEV4cGVjdGVkIHRvIGJlIHdvcmtpbmcgb24gYSBub24tcm9vdCBmaWJlci4gVGhpcyBpcyBhIGZhdGFsIGVycm9yXG4gICAgICAgIC8vIGJlY2F1c2UgdGhlcmUncyBubyBhbmNlc3RvciB0aGF0IGNhbiBoYW5kbGUgaXQ7IHRoZSByb290IGlzXG4gICAgICAgIC8vIHN1cHBvc2VkIHRvIGNhcHR1cmUgYWxsIGVycm9ycyB0aGF0IHdlcmVuJ3QgY2F1Z2h0IGJ5IGFuIGVycm9yXG4gICAgICAgIC8vIGJvdW5kYXJ5LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IHRocm93blZhbHVlOyAvLyBTZXQgYHdvcmtJblByb2dyZXNzYCB0byBudWxsLiBUaGlzIHJlcHJlc2VudHMgYWR2YW5jaW5nIHRvIHRoZSBuZXh0XG4gICAgICAgIC8vIHNpYmxpbmcsIG9yIHRoZSBwYXJlbnQgaWYgdGhlcmUgYXJlIG5vIHNpYmxpbmdzLiBCdXQgc2luY2UgdGhlIHJvb3RcbiAgICAgICAgLy8gaGFzIG5vIHNpYmxpbmdzIG5vciBhIHBhcmVudCwgd2Ugc2V0IGl0IHRvIG51bGwuIFVzdWFsbHkgdGhpcyBpc1xuICAgICAgICAvLyBoYW5kbGVkIGJ5IGBjb21wbGV0ZVVuaXRPZldvcmtgIG9yIGB1bndpbmRXb3JrYCwgYnV0IHNpbmNlIHdlJ3JlXG4gICAgICAgIC8vIGludGVudGlvbmFsbHkgbm90IGNhbGxpbmcgdGhvc2UsIHdlIG5lZWQgc2V0IGl0IGhlcmUuXG4gICAgICAgIC8vIFRPRE86IENvbnNpZGVyIGNhbGxpbmcgYHVud2luZFdvcmtgIHRvIHBvcCB0aGUgY29udGV4dHMuXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyICYmIGVycm9yZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHRpbWUgc3BlbnQgcmVuZGVyaW5nIGJlZm9yZSBhbiBlcnJvciB3YXMgdGhyb3duLiBUaGlzXG4gICAgICAgIC8vIGF2b2lkcyBpbmFjY3VyYXRlIFByb2ZpbGVyIGR1cmF0aW9ucyBpbiB0aGUgY2FzZSBvZiBhXG4gICAgICAgIC8vIHN1c3BlbmRlZCByZW5kZXIuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoZXJyb3JlZFdvcmssIHRydWUpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd0V4Y2VwdGlvbihyb290LCBlcnJvcmVkV29yay5yZXR1cm4sIGVycm9yZWRXb3JrLCB0aHJvd25WYWx1ZSwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgICAgY29tcGxldGVVbml0T2ZXb3JrKGVycm9yZWRXb3JrKTtcbiAgICB9IGNhdGNoICh5ZXRBbm90aGVyVGhyb3duVmFsdWUpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcmV0dXJuIHBhdGggYWxzbyB0aHJldy5cbiAgICAgIHRocm93blZhbHVlID0geWV0QW5vdGhlclRocm93blZhbHVlO1xuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IGVycm9yZWRXb3JrICYmIGVycm9yZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICAgIC8vIElmIHRoaXMgYm91bmRhcnkgaGFzIGFscmVhZHkgZXJyb3JlZCwgdGhlbiB3ZSBoYWQgdHJvdWJsZSBwcm9jZXNzaW5nXG4gICAgICAgIC8vIHRoZSBlcnJvci4gQnViYmxlIGl0IHRvIHRoZSBuZXh0IGJvdW5kYXJ5LlxuICAgICAgICBlcnJvcmVkV29yayA9IGVycm9yZWRXb3JrLnJldHVybjtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBlcnJvcmVkV29yaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yZWRXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gLy8gUmV0dXJuIHRvIHRoZSBub3JtYWwgd29yayBsb29wLlxuXG5cbiAgICByZXR1cm47XG4gIH0gd2hpbGUgKHRydWUpO1xufVxuXG5mdW5jdGlvbiBwdXNoRGlzcGF0Y2hlcigpIHtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQ7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIGlmIChwcmV2RGlzcGF0Y2hlciA9PT0gbnVsbCkge1xuICAgIC8vIFRoZSBSZWFjdCBpc29tb3JwaGljIHBhY2thZ2UgZG9lcyBub3QgaW5jbHVkZSBhIGRlZmF1bHQgZGlzcGF0Y2hlci5cbiAgICAvLyBJbnN0ZWFkIHRoZSBmaXJzdCByZW5kZXJlciB3aWxsIGxhemlseSBhdHRhY2ggb25lLCBpbiBvcmRlciB0byBnaXZlXG4gICAgLy8gbmljZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgcmV0dXJuIENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJldkRpc3BhdGNoZXI7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcikge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xufVxuXG5mdW5jdGlvbiBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpIHtcbiAge1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICAgIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnM7XG4gICAgcmV0dXJuIHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpIHtcbiAge1xuICAgIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrKCkge1xuICBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gbm93KCk7XG59XG5mdW5jdGlvbiBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKGxhbmUpIHtcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gbWVyZ2VMYW5lcyhsYW5lLCB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMpO1xufVxuZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZCgpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk7XG4gIH0gLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIHVwZGF0ZXMgdGhhdCB3ZSBza2lwcGVkIHRyZWUgdGhhdCBtaWdodCBoYXZlIHVuYmxvY2tlZFxuICAvLyB0aGlzIHJlbmRlci5cblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IG51bGwgJiYgKGluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzKSB8fCBpbmNsdWRlc05vbklkbGVXb3JrKHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpKSB7XG4gICAgLy8gTWFyayB0aGUgY3VycmVudCByZW5kZXIgYXMgc3VzcGVuZGVkIHNvIHRoYXQgd2Ugc3dpdGNoIHRvIHdvcmtpbmcgb25cbiAgICAvLyB0aGUgdXBkYXRlcyB0aGF0IHdlcmUgc2tpcHBlZC4gVXN1YWxseSB3ZSBvbmx5IHN1c3BlbmQgYXQgdGhlIGVuZCBvZlxuICAgIC8vIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgLy8gVE9ETzogV2Ugc2hvdWxkIHByb2JhYmx5IGFsd2F5cyBtYXJrIHRoZSByb290IGFzIHN1c3BlbmRlZCBpbW1lZGlhdGVseVxuICAgIC8vIChpbnNpZGUgdGhpcyBmdW5jdGlvbiksIHNpbmNlIGJ5IHN1c3BlbmRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgcmVuZGVyXG4gICAgLy8gcGhhc2UgaW50cm9kdWNlcyBhIHBvdGVudGlhbCBtaXN0YWtlIHdoZXJlIHdlIHN1c3BlbmQgbGFuZXMgdGhhdCB3ZXJlXG4gICAgLy8gcGluZ2VkIG9yIHVwZGF0ZWQgd2hpbGUgd2Ugd2VyZSByZW5kZXJpbmcuXG4gICAgbWFya1Jvb3RTdXNwZW5kZWQkMSh3b3JrSW5Qcm9ncmVzc1Jvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyRGlkRXJyb3IoKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzICE9PSBSb290Q29tcGxldGVkKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RFcnJvcmVkO1xuICB9XG59IC8vIENhbGxlZCBkdXJpbmcgcmVuZGVyIHRvIGRldGVybWluZSBpZiBhbnl0aGluZyBoYXMgc3VzcGVuZGVkLlxuLy8gUmV0dXJucyBmYWxzZSBpZiB3ZSdyZSBub3Qgc3VyZS5cblxuZnVuY3Rpb24gcmVuZGVySGFzTm90U3VzcGVuZGVkWWV0KCkge1xuICAvLyBJZiBzb21ldGhpbmcgZXJyb3JlZCBvciBjb21wbGV0ZWQsIHdlIGNhbid0IHJlYWxseSBiZSBzdXJlLFxuICAvLyBzbyB0aG9zZSBhcmUgZmFsc2UuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpOyAvLyBJZiB0aGUgcm9vdCBvciBsYW5lcyBoYXZlIGNoYW5nZWQsIHRocm93IG91dCB0aGUgZXhpc3Rpbmcgc3RhY2tcbiAgLy8gYW5kIHByZXBhcmUgYSBmcmVzaCBvbmUuIE90aGVyd2lzZSB3ZSdsbCBjb250aW51ZSB3aGVyZSB3ZSBsZWZ0IG9mZi5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lcykge1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpO1xuXG4gIGRvIHtcbiAgICB0cnkge1xuICAgICAgd29ya0xvb3BTeW5jKCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgfVxuXG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyBhIHN5bmMgcmVuZGVyLCBzbyB3ZSBzaG91bGQgaGF2ZSBmaW5pc2hlZCB0aGUgd2hvbGUgdHJlZS5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCBjb21taXQgYW4gaW5jb21wbGV0ZSByb290LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xufSAvLyBUaGUgd29yayBsb29wIGlzIGFuIGV4dHJlbWVseSBob3QgcGF0aC4gVGVsbCBDbG9zdXJlIG5vdCB0byBpbmxpbmUgaXQuXG5cbi8qKiBAbm9pbmxpbmUgKi9cblxuXG5mdW5jdGlvbiB3b3JrTG9vcFN5bmMoKSB7XG4gIC8vIEFscmVhZHkgdGltZWQgb3V0LCBzbyBwZXJmb3JtIHdvcmsgd2l0aG91dCBjaGVja2luZyBpZiB3ZSBuZWVkIHRvIHlpZWxkLlxuICB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpOyAvLyBJZiB0aGUgcm9vdCBvciBsYW5lcyBoYXZlIGNoYW5nZWQsIHRocm93IG91dCB0aGUgZXhpc3Rpbmcgc3RhY2tcbiAgLy8gYW5kIHByZXBhcmUgYSBmcmVzaCBvbmUuIE90aGVyd2lzZSB3ZSdsbCBjb250aW51ZSB3aGVyZSB3ZSBsZWZ0IG9mZi5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lcykge1xuICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gICAgc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTtcblxuICBkbyB7XG4gICAgdHJ5IHtcbiAgICAgIHdvcmtMb29wQ29uY3VycmVudCgpO1xuICAgICAgYnJlYWs7XG4gICAgfSBjYXRjaCAodGhyb3duVmFsdWUpIHtcbiAgICAgIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKTtcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUpO1xuXG4gIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuXG4gIHtcbiAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gIH1cblxuICBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKTtcbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG5cbiAgICByZXR1cm4gUm9vdEluY29tcGxldGU7XG4gIH0gZWxzZSB7XG5cblxuICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBSZXR1cm4gdGhlIGZpbmFsIGV4aXQgc3RhdHVzLlxuXG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG4gIH1cbn1cbi8qKiBAbm9pbmxpbmUgKi9cblxuXG5mdW5jdGlvbiB3b3JrTG9vcENvbmN1cnJlbnQoKSB7XG4gIC8vIFBlcmZvcm0gd29yayB1bnRpbCBTY2hlZHVsZXIgYXNrcyB1cyB0byB5aWVsZFxuICB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwgJiYgIXNob3VsZFlpZWxkKCkpIHtcbiAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVyZm9ybVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAvLyBUaGUgY3VycmVudCwgZmx1c2hlZCwgc3RhdGUgb2YgdGhpcyBmaWJlciBpcyB0aGUgYWx0ZXJuYXRlLiBJZGVhbGx5XG4gIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gIC8vIG5lZWQgYW4gYWRkaXRpb25hbCBmaWVsZCBvbiB0aGUgd29yayBpbiBwcm9ncmVzcy5cbiAgdmFyIGN1cnJlbnQgPSB1bml0T2ZXb3JrLmFsdGVybmF0ZTtcbiAgc2V0Q3VycmVudEZpYmVyKHVuaXRPZldvcmspO1xuICB2YXIgbmV4dDtcblxuICBpZiAoICh1bml0T2ZXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgICBuZXh0ID0gYmVnaW5Xb3JrJDEoY3VycmVudCwgdW5pdE9mV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKHVuaXRPZldvcmssIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIG5leHQgPSBiZWdpbldvcmskMShjdXJyZW50LCB1bml0T2ZXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgdW5pdE9mV29yay5tZW1vaXplZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG5cbiAgaWYgKG5leHQgPT09IG51bGwpIHtcbiAgICAvLyBJZiB0aGlzIGRvZXNuJ3Qgc3Bhd24gbmV3IHdvcmssIGNvbXBsZXRlIHRoZSBjdXJyZW50IHdvcmsuXG4gICAgY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspO1xuICB9IGVsc2Uge1xuICAgIHdvcmtJblByb2dyZXNzID0gbmV4dDtcbiAgfVxuXG4gIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIC8vIEF0dGVtcHQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgdW5pdCBvZiB3b3JrLCB0aGVuIG1vdmUgdG8gdGhlIG5leHRcbiAgLy8gc2libGluZy4gSWYgdGhlcmUgYXJlIG5vIG1vcmUgc2libGluZ3MsIHJldHVybiB0byB0aGUgcGFyZW50IGZpYmVyLlxuICB2YXIgY29tcGxldGVkV29yayA9IHVuaXRPZldvcms7XG5cbiAgZG8ge1xuICAgIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgICAvLyBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoaXMsIGJ1dCByZWx5aW5nIG9uIGl0IGhlcmUgbWVhbnMgdGhhdCB3ZSBkb24ndFxuICAgIC8vIG5lZWQgYW4gYWRkaXRpb25hbCBmaWVsZCBvbiB0aGUgd29yayBpbiBwcm9ncmVzcy5cbiAgICB2YXIgY3VycmVudCA9IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlO1xuICAgIHZhciByZXR1cm5GaWJlciA9IGNvbXBsZXRlZFdvcmsucmV0dXJuOyAvLyBDaGVjayBpZiB0aGUgd29yayBjb21wbGV0ZWQgb3IgaWYgc29tZXRoaW5nIHRocmV3LlxuXG4gICAgaWYgKChjb21wbGV0ZWRXb3JrLmZsYWdzICYgSW5jb21wbGV0ZSkgPT09IE5vRmxhZ3MpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgIHZhciBuZXh0ID0gdm9pZCAwO1xuXG4gICAgICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICBuZXh0ID0gY29tcGxldGVXb3JrKGN1cnJlbnQsIGNvbXBsZXRlZFdvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIoY29tcGxldGVkV29yayk7XG4gICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCwgY29tcGxldGVkV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTsgLy8gVXBkYXRlIHJlbmRlciBkdXJhdGlvbiBhc3N1bWluZyB3ZSBkaWRuJ3QgZXJyb3IuXG5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShjb21wbGV0ZWRXb3JrLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG5cbiAgICAgIGlmIChuZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIENvbXBsZXRpbmcgdGhpcyBmaWJlciBzcGF3bmVkIG5ldyB3b3JrLiBXb3JrIG9uIHRoYXQgbmV4dC5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q2hpbGRMYW5lcyhjb21wbGV0ZWRXb3JrKTtcblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsICYmIC8vIERvIG5vdCBhcHBlbmQgZWZmZWN0cyB0byBwYXJlbnRzIGlmIGEgc2libGluZyBmYWlsZWQgdG8gY29tcGxldGVcbiAgICAgIChyZXR1cm5GaWJlci5mbGFncyAmIEluY29tcGxldGUpID09PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIEFwcGVuZCBhbGwgdGhlIGVmZmVjdHMgb2YgdGhlIHN1YnRyZWUgYW5kIHRoaXMgZmliZXIgb250byB0aGUgZWZmZWN0XG4gICAgICAgIC8vIGxpc3Qgb2YgdGhlIHBhcmVudC4gVGhlIGNvbXBsZXRpb24gb3JkZXIgb2YgdGhlIGNoaWxkcmVuIGFmZmVjdHMgdGhlXG4gICAgICAgIC8vIHNpZGUtZWZmZWN0IG9yZGVyLlxuICAgICAgICBpZiAocmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkV29yay5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGNvbXBsZXRlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcmsubGFzdEVmZmVjdDtcbiAgICAgICAgfSAvLyBJZiB0aGlzIGZpYmVyIGhhZCBzaWRlLWVmZmVjdHMsIHdlIGFwcGVuZCBpdCBBRlRFUiB0aGUgY2hpbGRyZW4nc1xuICAgICAgICAvLyBzaWRlLWVmZmVjdHMuIFdlIGNhbiBwZXJmb3JtIGNlcnRhaW4gc2lkZS1lZmZlY3RzIGVhcmxpZXIgaWYgbmVlZGVkLFxuICAgICAgICAvLyBieSBkb2luZyBtdWx0aXBsZSBwYXNzZXMgb3ZlciB0aGUgZWZmZWN0IGxpc3QuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gc2NoZWR1bGUgb3VyIG93biBzaWRlLWVmZmVjdCBvbiBvdXIgb3duIGxpc3QgYmVjYXVzZSBpZiBlbmQgdXBcbiAgICAgICAgLy8gcmV1c2luZyBjaGlsZHJlbiB3ZSdsbCBzY2hlZHVsZSB0aGlzIGVmZmVjdCBvbnRvIGl0c2VsZiBzaW5jZSB3ZSdyZVxuICAgICAgICAvLyBhdCB0aGUgZW5kLlxuXG5cbiAgICAgICAgdmFyIGZsYWdzID0gY29tcGxldGVkV29yay5mbGFnczsgLy8gU2tpcCBib3RoIE5vV29yayBhbmQgUGVyZm9ybWVkV29yayB0YWdzIHdoZW4gY3JlYXRpbmcgdGhlIGVmZmVjdFxuICAgICAgICAvLyBsaXN0LiBQZXJmb3JtZWRXb3JrIGVmZmVjdCBpcyByZWFkIGJ5IFJlYWN0IERldlRvb2xzIGJ1dCBzaG91bGRuJ3QgYmVcbiAgICAgICAgLy8gY29tbWl0dGVkLlxuXG4gICAgICAgIGlmIChmbGFncyA+IFBlcmZvcm1lZFdvcmspIHtcbiAgICAgICAgICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY29tcGxldGVkV29yaztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgZmliZXIgZGlkIG5vdCBjb21wbGV0ZSBiZWNhdXNlIHNvbWV0aGluZyB0aHJldy4gUG9wIHZhbHVlcyBvZmZcbiAgICAgIC8vIHRoZSBzdGFjayB3aXRob3V0IGVudGVyaW5nIHRoZSBjb21wbGV0ZSBwaGFzZS4gSWYgdGhpcyBpcyBhIGJvdW5kYXJ5LFxuICAgICAgLy8gY2FwdHVyZSB2YWx1ZXMgaWYgcG9zc2libGUuXG4gICAgICB2YXIgX25leHQgPSB1bndpbmRXb3JrKGNvbXBsZXRlZFdvcmspOyAvLyBCZWNhdXNlIHRoaXMgZmliZXIgZGlkIG5vdCBjb21wbGV0ZSwgZG9uJ3QgcmVzZXQgaXRzIGV4cGlyYXRpb24gdGltZS5cblxuXG4gICAgICBpZiAoX25leHQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgY29tcGxldGluZyB0aGlzIHdvcmsgc3Bhd25lZCBuZXcgd29yaywgZG8gdGhhdCBuZXh0LiBXZSdsbCBjb21lXG4gICAgICAgIC8vIGJhY2sgaGVyZSBhZ2Fpbi5cbiAgICAgICAgLy8gU2luY2Ugd2UncmUgcmVzdGFydGluZywgcmVtb3ZlIGFueXRoaW5nIHRoYXQgaXMgbm90IGEgaG9zdCBlZmZlY3RcbiAgICAgICAgLy8gZnJvbSB0aGUgZWZmZWN0IHRhZy5cbiAgICAgICAgX25leHQuZmxhZ3MgJj0gSG9zdEVmZmVjdE1hc2s7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gX25leHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgLy8gUmVjb3JkIHRoZSByZW5kZXIgZHVyYXRpb24gZm9yIHRoZSBmaWJlciB0aGF0IGVycm9yZWQuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoY29tcGxldGVkV29yaywgZmFsc2UpOyAvLyBJbmNsdWRlIHRoZSB0aW1lIHNwZW50IHdvcmtpbmcgb24gZmFpbGVkIGNoaWxkcmVuIGJlZm9yZSBjb250aW51aW5nLlxuXG4gICAgICAgIHZhciBhY3R1YWxEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgICAgIHZhciBjaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTWFyayB0aGUgcGFyZW50IGZpYmVyIGFzIGluY29tcGxldGUgYW5kIGNsZWFyIGl0cyBlZmZlY3QgbGlzdC5cbiAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuRmliZXIuZmxhZ3MgfD0gSW5jb21wbGV0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2libGluZ0ZpYmVyID0gY29tcGxldGVkV29yay5zaWJsaW5nO1xuXG4gICAgaWYgKHNpYmxpbmdGaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGRvIGluIHRoaXMgcmV0dXJuRmliZXIsIGRvIHRoYXQgbmV4dC5cbiAgICAgIHdvcmtJblByb2dyZXNzID0gc2libGluZ0ZpYmVyO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gT3RoZXJ3aXNlLCByZXR1cm4gdG8gdGhlIHBhcmVudFxuXG5cbiAgICBjb21wbGV0ZWRXb3JrID0gcmV0dXJuRmliZXI7IC8vIFVwZGF0ZSB0aGUgbmV4dCB0aGluZyB3ZSdyZSB3b3JraW5nIG9uIGluIGNhc2Ugc29tZXRoaW5nIHRocm93cy5cblxuICAgIHdvcmtJblByb2dyZXNzID0gY29tcGxldGVkV29yaztcbiAgfSB3aGlsZSAoY29tcGxldGVkV29yayAhPT0gbnVsbCk7IC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIHJvb3QuXG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdENvbXBsZXRlZDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldENoaWxkTGFuZXMoY29tcGxldGVkV29yaykge1xuICBpZiAoIC8vIFRPRE86IE1vdmUgdGhpcyBjaGVjayBvdXQgb2YgdGhlIGhvdCBwYXRoIGJ5IG1vdmluZyBgcmVzZXRDaGlsZExhbmVzYFxuICAvLyB0byBzd2l0Y2ggc3RhdGVtZW50IGluIGBjb21wbGV0ZVdvcmtgLlxuICAoY29tcGxldGVkV29yay50YWcgPT09IExlZ2FjeUhpZGRlbkNvbXBvbmVudCB8fCBjb21wbGV0ZWRXb3JrLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50KSAmJiBjb21wbGV0ZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgIWluY2x1ZGVzU29tZUxhbmUoc3VidHJlZVJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKSAmJiAoY29tcGxldGVkV29yay5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb0xhbmVzKSB7XG4gICAgLy8gVGhlIGNoaWxkcmVuIG9mIHRoaXMgY29tcG9uZW50IGFyZSBoaWRkZW4uIERvbid0IGJ1YmJsZSB0aGVpclxuICAgIC8vIGV4cGlyYXRpb24gdGltZXMuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5ld0NoaWxkTGFuZXMgPSBOb0xhbmVzOyAvLyBCdWJibGUgdXAgdGhlIGVhcmxpZXN0IGV4cGlyYXRpb24gdGltZS5cblxuICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgIC8vIEluIHByb2ZpbGluZyBtb2RlLCByZXNldENoaWxkRXhwaXJhdGlvblRpbWUgaXMgYWxzbyB1c2VkIHRvIHJlc2V0XG4gICAgLy8gcHJvZmlsZXIgZHVyYXRpb25zLlxuICAgIHZhciBhY3R1YWxEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgdmFyIHRyZWVCYXNlRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLnNlbGZCYXNlRHVyYXRpb247IC8vIFdoZW4gYSBmaWJlciBpcyBjbG9uZWQsIGl0cyBhY3R1YWxEdXJhdGlvbiBpcyByZXNldCB0byAwLiBUaGlzIHZhbHVlIHdpbGxcbiAgICAvLyBvbmx5IGJlIHVwZGF0ZWQgaWYgd29yayBpcyBkb25lIG9uIHRoZSBmaWJlciAoaS5lLiBpdCBkb2Vzbid0IGJhaWxvdXQpLlxuICAgIC8vIFdoZW4gd29yayBpcyBkb25lLCBpdCBzaG91bGQgYnViYmxlIHRvIHRoZSBwYXJlbnQncyBhY3R1YWxEdXJhdGlvbi4gSWZcbiAgICAvLyB0aGUgZmliZXIgaGFzIG5vdCBiZWVuIGNsb25lZCB0aG91Z2gsIChtZWFuaW5nIG5vIHdvcmsgd2FzIGRvbmUpLCB0aGVuXG4gICAgLy8gdGhpcyB2YWx1ZSB3aWxsIHJlZmxlY3QgdGhlIGFtb3VudCBvZiB0aW1lIHNwZW50IHdvcmtpbmcgb24gYSBwcmV2aW91c1xuICAgIC8vIHJlbmRlci4gSW4gdGhhdCBjYXNlIGl0IHNob3VsZCBub3QgYnViYmxlLiBXZSBkZXRlcm1pbmUgd2hldGhlciBpdCB3YXNcbiAgICAvLyBjbG9uZWQgYnkgY29tcGFyaW5nIHRoZSBjaGlsZCBwb2ludGVyLlxuXG4gICAgdmFyIHNob3VsZEJ1YmJsZUFjdHVhbER1cmF0aW9ucyA9IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlID09PSBudWxsIHx8IGNvbXBsZXRlZFdvcmsuY2hpbGQgIT09IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlLmNoaWxkO1xuICAgIHZhciBjaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5ld0NoaWxkTGFuZXMsIG1lcmdlTGFuZXMoY2hpbGQubGFuZXMsIGNoaWxkLmNoaWxkTGFuZXMpKTtcblxuICAgICAgaWYgKHNob3VsZEJ1YmJsZUFjdHVhbER1cmF0aW9ucykge1xuICAgICAgICBhY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgdHJlZUJhc2VEdXJhdGlvbiArPSBjaGlsZC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHZhciBpc1RpbWVkT3V0U3VzcGVuc2UgPSBjb21wbGV0ZWRXb3JrLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgY29tcGxldGVkV29yay5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgaWYgKGlzVGltZWRPdXRTdXNwZW5zZSkge1xuICAgICAgLy8gRG9uJ3QgY291bnQgdGltZSBzcGVudCBpbiBhIHRpbWVkIG91dCBTdXNwZW5zZSBzdWJ0cmVlIGFzIHBhcnQgb2YgdGhlIGJhc2UgZHVyYXRpb24uXG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICBpZiAocHJpbWFyeUNoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAgICAgdHJlZUJhc2VEdXJhdGlvbiAtPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb24gPSBhY3R1YWxEdXJhdGlvbjtcbiAgICBjb21wbGV0ZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24gPSB0cmVlQmFzZUR1cmF0aW9uO1xuICB9IGVsc2Uge1xuICAgIHZhciBfY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgd2hpbGUgKF9jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbmV3Q2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobmV3Q2hpbGRMYW5lcywgbWVyZ2VMYW5lcyhfY2hpbGQubGFuZXMsIF9jaGlsZC5jaGlsZExhbmVzKSk7XG4gICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICB9XG4gIH1cblxuICBjb21wbGV0ZWRXb3JrLmNoaWxkTGFuZXMgPSBuZXdDaGlsZExhbmVzO1xufVxuXG5mdW5jdGlvbiBjb21taXRSb290KHJvb3QpIHtcbiAgdmFyIHJlbmRlclByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuICBydW5XaXRoUHJpb3JpdHkkMShJbW1lZGlhdGVQcmlvcml0eSQxLCBjb21taXRSb290SW1wbC5iaW5kKG51bGwsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpKTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3RJbXBsKHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgZG8ge1xuICAgIC8vIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCB3aWxsIGNhbGwgYGZsdXNoU3luY1VwZGF0ZVF1ZXVlYCBhdCB0aGUgZW5kLCB3aGljaFxuICAgIC8vIG1lYW5zIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCB3aWxsIHNvbWV0aW1lcyByZXN1bHQgaW4gYWRkaXRpb25hbFxuICAgIC8vIHBhc3NpdmUgZWZmZWN0cy4gU28gd2UgbmVlZCB0byBrZWVwIGZsdXNoaW5nIGluIGEgbG9vcCB1bnRpbCB0aGVyZSBhcmVcbiAgICAvLyBubyBtb3JlIHBlbmRpbmcgZWZmZWN0cy5cbiAgICAvLyBUT0RPOiBNaWdodCBiZSBiZXR0ZXIgaWYgYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIGRpZCBub3QgYXV0b21hdGljYWxseVxuICAgIC8vIGZsdXNoIHN5bmNocm9ub3VzIHdvcmsgYXQgdGhlIGVuZCwgdG8gYXZvaWQgZmFjdG9yaW5nIGhhemFyZHMgbGlrZSB0aGlzLlxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgfSB3aGlsZSAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgIT09IG51bGwpO1xuXG4gIGZsdXNoUmVuZGVyUGhhc2VTdHJpY3RNb2RlV2FybmluZ3NJbkRFVigpO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmZpbmlzaGVkV29yaztcbiAgdmFyIGxhbmVzID0gcm9vdC5maW5pc2hlZExhbmVzO1xuXG4gIGlmIChmaW5pc2hlZFdvcmsgPT09IG51bGwpIHtcblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKGZpbmlzaGVkV29yayAhPT0gcm9vdC5jdXJyZW50KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCBjb21taXQgdGhlIHNhbWUgdHJlZSBhcyBiZWZvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH0gLy8gY29tbWl0Um9vdCBuZXZlciByZXR1cm5zIGEgY29udGludWF0aW9uOyBpdCBhbHdheXMgZmluaXNoZXMgc3luY2hyb25vdXNseS5cbiAgLy8gU28gd2UgY2FuIGNsZWFyIHRoZXNlIG5vdyB0byBhbGxvdyBhIG5ldyBjYWxsYmFjayB0byBiZSBzY2hlZHVsZWQuXG5cblxuICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7IC8vIFVwZGF0ZSB0aGUgZmlyc3QgYW5kIGxhc3QgcGVuZGluZyB0aW1lcyBvbiB0aGlzIHJvb3QuIFRoZSBuZXcgZmlyc3RcbiAgLy8gcGVuZGluZyB0aW1lIGlzIHdoYXRldmVyIGlzIGxlZnQgb24gdGhlIHJvb3QgZmliZXIuXG5cbiAgdmFyIHJlbWFpbmluZ0xhbmVzID0gbWVyZ2VMYW5lcyhmaW5pc2hlZFdvcmsubGFuZXMsIGZpbmlzaGVkV29yay5jaGlsZExhbmVzKTtcbiAgbWFya1Jvb3RGaW5pc2hlZChyb290LCByZW1haW5pbmdMYW5lcyk7IC8vIENsZWFyIGFscmVhZHkgZmluaXNoZWQgZGlzY3JldGUgdXBkYXRlcyBpbiBjYXNlIHRoYXQgYSBsYXRlciBjYWxsIG9mXG4gIC8vIGBmbHVzaERpc2NyZXRlVXBkYXRlc2Agc3RhcnRzIGEgdXNlbGVzcyByZW5kZXIgcGFzcyB3aGljaCBtYXkgY2FuY2Vsc1xuICAvLyBhIHNjaGVkdWxlZCB0aW1lb3V0LlxuXG4gIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzICE9PSBudWxsKSB7XG4gICAgaWYgKCFoYXNEaXNjcmV0ZUxhbmVzKHJlbWFpbmluZ0xhbmVzKSAmJiByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmhhcyhyb290KSkge1xuICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcy5kZWxldGUocm9vdCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCkge1xuICAgIC8vIFdlIGNhbiByZXNldCB0aGVzZSBub3cgdGhhdCB0aGV5IGFyZSBmaW5pc2hlZC5cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIH0gLy8gR2V0IHRoZSBsaXN0IG9mIGVmZmVjdHMuXG5cblxuICB2YXIgZmlyc3RFZmZlY3Q7XG5cbiAgaWYgKGZpbmlzaGVkV29yay5mbGFncyA+IFBlcmZvcm1lZFdvcmspIHtcbiAgICAvLyBBIGZpYmVyJ3MgZWZmZWN0IGxpc3QgY29uc2lzdHMgb25seSBvZiBpdHMgY2hpbGRyZW4sIG5vdCBpdHNlbGYuIFNvIGlmXG4gICAgLy8gdGhlIHJvb3QgaGFzIGFuIGVmZmVjdCwgd2UgbmVlZCB0byBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4gVGhlXG4gICAgLy8gcmVzdWx0aW5nIGxpc3QgaXMgdGhlIHNldCB0aGF0IHdvdWxkIGJlbG9uZyB0byB0aGUgcm9vdCdzIHBhcmVudCwgaWYgaXRcbiAgICAvLyBoYWQgb25lOyB0aGF0IGlzLCBhbGwgdGhlIGVmZmVjdHMgaW4gdGhlIHRyZWUgaW5jbHVkaW5nIHRoZSByb290LlxuICAgIGlmIChmaW5pc2hlZFdvcmsubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgZmluaXNoZWRXb3JrLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGZpbmlzaGVkV29yaztcbiAgICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrLmZpcnN0RWZmZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yaztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlcmUgaXMgbm8gZWZmZWN0IG9uIHRoZSByb290LlxuICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrLmZpcnN0RWZmZWN0O1xuICB9XG5cbiAgaWYgKGZpcnN0RWZmZWN0ICE9PSBudWxsKSB7XG5cbiAgICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7IC8vIFJlc2V0IHRoaXMgdG8gbnVsbCBiZWZvcmUgY2FsbGluZyBsaWZlY3ljbGVzXG5cbiAgICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsOyAvLyBUaGUgY29tbWl0IHBoYXNlIGlzIGJyb2tlbiBpbnRvIHNldmVyYWwgc3ViLXBoYXNlcy4gV2UgZG8gYSBzZXBhcmF0ZSBwYXNzXG4gICAgLy8gb2YgdGhlIGVmZmVjdCBsaXN0IGZvciBlYWNoIHBoYXNlOiBhbGwgbXV0YXRpb24gZWZmZWN0cyBjb21lIGJlZm9yZSBhbGxcbiAgICAvLyBsYXlvdXQgZWZmZWN0cywgYW5kIHNvIG9uLlxuICAgIC8vIFRoZSBmaXJzdCBwaGFzZSBhIFwiYmVmb3JlIG11dGF0aW9uXCIgcGhhc2UuIFdlIHVzZSB0aGlzIHBoYXNlIHRvIHJlYWQgdGhlXG4gICAgLy8gc3RhdGUgb2YgdGhlIGhvc3QgdHJlZSByaWdodCBiZWZvcmUgd2UgbXV0YXRlIGl0LiBUaGlzIGlzIHdoZXJlXG4gICAgLy8gZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgaXMgY2FsbGVkLlxuXG4gICAgZm9jdXNlZEluc3RhbmNlSGFuZGxlID0gcHJlcGFyZUZvckNvbW1pdChyb290LmNvbnRhaW5lckluZm8pO1xuICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IGZhbHNlO1xuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cywgbnVsbCk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShuZXh0RWZmZWN0ICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgZXJyb3IpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTsgLy8gV2Ugbm8gbG9uZ2VyIG5lZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSBpbnN0YW5jZSBmaWJlclxuXG5cbiAgICBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gTWFyayB0aGUgY3VycmVudCBjb21taXQgdGltZSB0byBiZSBzaGFyZWQgYnkgYWxsIFByb2ZpbGVycyBpbiB0aGlzXG4gICAgICAvLyBiYXRjaC4gVGhpcyBlbmFibGVzIHRoZW0gdG8gYmUgZ3JvdXBlZCBsYXRlci5cbiAgICAgIHJlY29yZENvbW1pdFRpbWUoKTtcbiAgICB9IC8vIFRoZSBuZXh0IHBoYXNlIGlzIHRoZSBtdXRhdGlvbiBwaGFzZSwgd2hlcmUgd2UgbXV0YXRlIHRoZSBob3N0IHRyZWUuXG5cblxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdE11dGF0aW9uRWZmZWN0cywgbnVsbCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShuZXh0RWZmZWN0ICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2Vycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgX2Vycm9yKTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCk7XG5cbiAgICByZXNldEFmdGVyQ29tbWl0KHJvb3QuY29udGFpbmVySW5mbyk7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIHRyZWUgaXMgbm93IHRoZSBjdXJyZW50IHRyZWUuIFRoaXMgbXVzdCBjb21lIGFmdGVyXG4gICAgLy8gdGhlIG11dGF0aW9uIHBoYXNlLCBzbyB0aGF0IHRoZSBwcmV2aW91cyB0cmVlIGlzIHN0aWxsIGN1cnJlbnQgZHVyaW5nXG4gICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQsIGJ1dCBiZWZvcmUgdGhlIGxheW91dCBwaGFzZSwgc28gdGhhdCB0aGUgZmluaXNoZWRcbiAgICAvLyB3b3JrIGlzIGN1cnJlbnQgZHVyaW5nIGNvbXBvbmVudERpZE1vdW50L1VwZGF0ZS5cblxuICAgIHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gVGhlIG5leHQgcGhhc2UgaXMgdGhlIGxheW91dCBwaGFzZSwgd2hlcmUgd2UgY2FsbCBlZmZlY3RzIHRoYXQgcmVhZFxuICAgIC8vIHRoZSBob3N0IHRyZWUgYWZ0ZXIgaXQncyBiZWVuIG11dGF0ZWQuIFRoZSBpZGlvbWF0aWMgdXNlIGNhc2UgZm9yIHRoaXMgaXNcbiAgICAvLyBsYXlvdXQsIGJ1dCBjbGFzcyBjb21wb25lbnQgbGlmZWN5Y2xlcyBhbHNvIGZpcmUgaGVyZSBmb3IgbGVnYWN5IHJlYXNvbnMuXG5cbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRMYXlvdXRFZmZlY3RzLCBudWxsLCByb290LCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShuZXh0RWZmZWN0ICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2Vycm9yMiA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKG5leHRFZmZlY3QsIF9lcnJvcjIpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTtcblxuICAgIG5leHRFZmZlY3QgPSBudWxsOyAvLyBUZWxsIFNjaGVkdWxlciB0byB5aWVsZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtZSwgc28gdGhlIGJyb3dzZXIgaGFzIGFuXG4gICAgLy8gb3Bwb3J0dW5pdHkgdG8gcGFpbnQuXG5cbiAgICByZXF1ZXN0UGFpbnQoKTtcblxuICAgIHtcbiAgICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgICB9XG5cbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gTm8gZWZmZWN0cy5cbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIE1lYXN1cmUgdGhlc2UgYW55d2F5IHNvIHRoZSBmbGFtZWdyYXBoIGV4cGxpY2l0bHkgc2hvd3MgdGhhdCB0aGVyZSB3ZXJlXG4gICAgLy8gbm8gZWZmZWN0cy5cbiAgICAvLyBUT0RPOiBNYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byByZXBvcnQgdGhpcy5cblxuICAgIHtcbiAgICAgIHJlY29yZENvbW1pdFRpbWUoKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cyA9IHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzO1xuXG4gIGlmIChyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFRoaXMgY29tbWl0IGhhcyBwYXNzaXZlIGVmZmVjdHMuIFN0YXNoIGEgcmVmZXJlbmNlIHRvIHRoZW0uIEJ1dCBkb24ndFxuICAgIC8vIHNjaGVkdWxlIGEgY2FsbGJhY2sgdW50aWwgYWZ0ZXIgZmx1c2hpbmcgbGF5b3V0IHdvcmsuXG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IHJvb3Q7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBsYW5lcztcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IHJlbmRlclByaW9yaXR5TGV2ZWw7XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgYXJlIGRvbmUgd2l0aCB0aGUgZWZmZWN0IGNoYWluIGF0IHRoaXMgcG9pbnQgc28gbGV0J3MgY2xlYXIgdGhlXG4gICAgLy8gbmV4dEVmZmVjdCBwb2ludGVycyB0byBhc3Npc3Qgd2l0aCBHQy4gSWYgd2UgaGF2ZSBwYXNzaXZlIGVmZmVjdHMsIHdlJ2xsXG4gICAgLy8gY2xlYXIgdGhpcyBpbiBmbHVzaFBhc3NpdmVFZmZlY3RzLlxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV4dE5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICBuZXh0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuXG4gICAgICBpZiAobmV4dEVmZmVjdC5mbGFncyAmIERlbGV0aW9uKSB7XG4gICAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKG5leHRFZmZlY3QpO1xuICAgICAgfVxuXG4gICAgICBuZXh0RWZmZWN0ID0gbmV4dE5leHRFZmZlY3Q7XG4gICAgfVxuICB9IC8vIFJlYWQgdGhpcyBhZ2Fpbiwgc2luY2UgYW4gZWZmZWN0IG1pZ2h0IGhhdmUgdXBkYXRlZCBpdFxuXG5cbiAgcmVtYWluaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lczsgLy8gQ2hlY2sgaWYgdGhlcmUncyByZW1haW5pbmcgd29yayBvbiB0aGlzIHJvb3RcblxuICBpZiAocmVtYWluaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICB7XG4gICAgICBpZiAoc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyO1xuICAgICAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBpcmF0aW9uVGltZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUludGVyYWN0aW9ucyhyb290LCBleHBpcmF0aW9uVGltZXNbaV0sIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCByZW1haW5pbmdMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmssIHdlIGNhbiBjbGVhciB0aGUgc2V0IG9mIGFscmVhZHkgZmFpbGVkXG4gICAgLy8gZXJyb3IgYm91bmRhcmllcy5cbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKCFyb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGFzc2l2ZSBlZmZlY3RzLCB0aGVuIHdlIGNhbiBjb21wbGV0ZSB0aGUgcGVuZGluZyBpbnRlcmFjdGlvbnMuXG4gICAgICAvLyBPdGhlcndpc2UsIHdlJ2xsIHdhaXQgdW50aWwgYWZ0ZXIgdGhlIHBhc3NpdmUgZWZmZWN0cyBhcmUgZmx1c2hlZC5cbiAgICAgIC8vIFdhaXQgdG8gZG8gdGhpcyB1bnRpbCBhZnRlciByZW1haW5pbmcgd29yayBoYXMgYmVlbiBzY2hlZHVsZWQsXG4gICAgICAvLyBzbyB0aGF0IHdlIGRvbid0IHByZW1hdHVyZWx5IHNpZ25hbCBjb21wbGV0ZSBmb3IgaW50ZXJhY3Rpb25zIHdoZW4gdGhlcmUncyBlLmcuIGhpZGRlbiB3b3JrLlxuICAgICAgZmluaXNoUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlbWFpbmluZ0xhbmVzID09PSBTeW5jTGFuZSkge1xuICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHJvb3Qgc3luY2hyb25vdXNseSByZS1yZW5kZXJzIHdpdGhvdXRcbiAgICAvLyBmaW5pc2hpbmcuIElmIHRoZXJlIGFyZSB0b28gbWFueSwgaXQgaW5kaWNhdGVzIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wLlxuICAgIGlmIChyb290ID09PSByb290V2l0aE5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgIG5lc3RlZFVwZGF0ZUNvdW50Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgICAgIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IHJvb3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgfVxuXG4gIG9uQ29tbWl0Um9vdChmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLCByZW5kZXJQcmlvcml0eUxldmVsKTtcblxuICB7XG4gICAgb25Db21taXRSb290JDEoKTtcbiAgfSAvLyBBbHdheXMgY2FsbCB0aGlzIGJlZm9yZSBleGl0aW5nIGBjb21taXRSb290YCwgdG8gZW5zdXJlIHRoYXQgYW55XG4gIC8vIGFkZGl0aW9uYWwgd29yayBvbiB0aGlzIHJvb3QgaXMgc2NoZWR1bGVkLlxuXG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcblxuICBpZiAoaGFzVW5jYXVnaHRFcnJvcikge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSBmYWxzZTtcbiAgICB2YXIgX2Vycm9yMyA9IGZpcnN0VW5jYXVnaHRFcnJvcjtcbiAgICBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBudWxsO1xuICAgIHRocm93IF9lcnJvcjM7XG4gIH1cblxuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBMZWdhY3lVbmJhdGNoZWRDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgLy8gYSBSZWFjdERPTS5yZW5kZXItZWQgcm9vdCBpbnNpZGUgb2YgYmF0Y2hlZFVwZGF0ZXMuIFRoZSBjb21taXQgZmlyZWRcbiAgICAvLyBzeW5jaHJvbm91c2x5LCBidXQgbGF5b3V0IHVwZGF0ZXMgc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIHRoZSBlbmRcbiAgICAvLyBvZiB0aGUgYmF0Y2guXG5cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIElmIGxheW91dCB3b3JrIHdhcyBzY2hlZHVsZWQsIGZsdXNoIGl0IG5vdy5cblxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKCkge1xuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG5cbiAgICBpZiAoIXNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciAmJiBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgIT09IG51bGwpIHtcbiAgICAgIGlmICgobmV4dEVmZmVjdC5mbGFncyAmIERlbGV0aW9uKSAhPT0gTm9GbGFncykge1xuICAgICAgICBpZiAoZG9lc0ZpYmVyQ29udGFpbihuZXh0RWZmZWN0LCBmb2N1c2VkSW5zdGFuY2VIYW5kbGUpKSB7XG4gICAgICAgICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIG91dCBvZiB0aGUgaG90IHBhdGggdXNpbmcgYSBkZWRpY2F0ZWQgZWZmZWN0IHRhZy5cbiAgICAgICAgaWYgKG5leHRFZmZlY3QudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBpc1N1c3BlbnNlQm91bmRhcnlCZWluZ0hpZGRlbihjdXJyZW50LCBuZXh0RWZmZWN0KSAmJiBkb2VzRmliZXJDb250YWluKG5leHRFZmZlY3QsIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSkpIHtcbiAgICAgICAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZsYWdzID0gbmV4dEVmZmVjdC5mbGFncztcblxuICAgIGlmICgoZmxhZ3MgJiBTbmFwc2hvdCkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICAgIGNvbW1pdEJlZm9yZU11dGF0aW9uTGlmZUN5Y2xlcyhjdXJyZW50LCBuZXh0RWZmZWN0KTtcbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKChmbGFncyAmIFBhc3NpdmUpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgcGFzc2l2ZSBlZmZlY3RzLCBzY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGZsdXNoIGF0XG4gICAgICAvLyB0aGUgZWFybGllc3Qgb3Bwb3J0dW5pdHkuXG4gICAgICBpZiAoIXJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdE11dGF0aW9uRWZmZWN0cyhyb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFRPRE86IFNob3VsZCBwcm9iYWJseSBtb3ZlIHRoZSBidWxrIG9mIHRoaXMgZnVuY3Rpb24gdG8gY29tbWl0V29yay5cbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgdmFyIGZsYWdzID0gbmV4dEVmZmVjdC5mbGFncztcblxuICAgIGlmIChmbGFncyAmIENvbnRlbnRSZXNldCkge1xuICAgICAgY29tbWl0UmVzZXRUZXh0Q29udGVudChuZXh0RWZmZWN0KTtcbiAgICB9XG5cbiAgICBpZiAoZmxhZ3MgJiBSZWYpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbW1pdERldGFjaFJlZihjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBmb2xsb3dpbmcgc3dpdGNoIHN0YXRlbWVudCBpcyBvbmx5IGNvbmNlcm5lZCBhYm91dCBwbGFjZW1lbnQsXG4gICAgLy8gdXBkYXRlcywgYW5kIGRlbGV0aW9ucy4gVG8gYXZvaWQgbmVlZGluZyB0byBhZGQgYSBjYXNlIGZvciBldmVyeSBwb3NzaWJsZVxuICAgIC8vIGJpdG1hcCB2YWx1ZSwgd2UgcmVtb3ZlIHRoZSBzZWNvbmRhcnkgZWZmZWN0cyBmcm9tIHRoZSBlZmZlY3QgdGFnIGFuZFxuICAgIC8vIHN3aXRjaCBvbiB0aGF0IHZhbHVlLlxuXG5cbiAgICB2YXIgcHJpbWFyeUZsYWdzID0gZmxhZ3MgJiAoUGxhY2VtZW50IHwgVXBkYXRlIHwgRGVsZXRpb24gfCBIeWRyYXRpbmcpO1xuXG4gICAgc3dpdGNoIChwcmltYXJ5RmxhZ3MpIHtcbiAgICAgIGNhc2UgUGxhY2VtZW50OlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0UGxhY2VtZW50KG5leHRFZmZlY3QpOyAvLyBDbGVhciB0aGUgXCJwbGFjZW1lbnRcIiBmcm9tIGVmZmVjdCB0YWcgc28gdGhhdCB3ZSBrbm93IHRoYXQgdGhpcyBpc1xuICAgICAgICAgIC8vIGluc2VydGVkLCBiZWZvcmUgYW55IGxpZmUtY3ljbGVzIGxpa2UgY29tcG9uZW50RGlkTW91bnQgZ2V0cyBjYWxsZWQuXG4gICAgICAgICAgLy8gVE9ETzogZmluZERPTU5vZGUgZG9lc24ndCByZWx5IG9uIHRoaXMgYW55IG1vcmUgYnV0IGlzTW91bnRlZCBkb2VzXG4gICAgICAgICAgLy8gYW5kIGlzTW91bnRlZCBpcyBkZXByZWNhdGVkIGFueXdheSBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBraWxsIHRoaXMuXG5cbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5QbGFjZW1lbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBQbGFjZW1lbnRBbmRVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBQbGFjZW1lbnRcbiAgICAgICAgICBjb21taXRQbGFjZW1lbnQobmV4dEVmZmVjdCk7IC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzXG4gICAgICAgICAgLy8gaW5zZXJ0ZWQsIGJlZm9yZSBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cblxuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gflBsYWNlbWVudDsgLy8gVXBkYXRlXG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50LCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEh5ZHJhdGluZzpcbiAgICAgICAge1xuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gfkh5ZHJhdGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEh5ZHJhdGluZ0FuZFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gfkh5ZHJhdGluZzsgLy8gVXBkYXRlXG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnQyID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudDIsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9jdXJyZW50MyA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQzLCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIERlbGV0aW9uOlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0RGVsZXRpb24ocm9vdCwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TGF5b3V0RWZmZWN0cyhyb290LCBjb21taXR0ZWRMYW5lcykge1xuXG5cbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgdmFyIGZsYWdzID0gbmV4dEVmZmVjdC5mbGFncztcblxuICAgIGlmIChmbGFncyAmIChVcGRhdGUgfCBDYWxsYmFjaykpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICBjb21taXRMaWZlQ3ljbGVzKHJvb3QsIGN1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICBjb21taXRBdHRhY2hSZWYobmV4dEVmZmVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKSB7XG4gIC8vIFJldHVybnMgd2hldGhlciBwYXNzaXZlIGVmZmVjdHMgd2VyZSBmbHVzaGVkLlxuICBpZiAocGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgIT09IE5vUHJpb3JpdHkkMSkge1xuICAgIHZhciBwcmlvcml0eUxldmVsID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPiBOb3JtYWxQcmlvcml0eSQxID8gTm9ybWFsUHJpb3JpdHkkMSA6IHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5O1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gTm9Qcmlvcml0eSQxO1xuXG4gICAge1xuICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKHByaW9yaXR5TGV2ZWwsIGZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0TW91bnQoZmliZXIsIGVmZmVjdCkge1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQucHVzaChlZmZlY3QsIGZpYmVyKTtcblxuICBpZiAoIXJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGZpYmVyLCBlZmZlY3QpIHtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQucHVzaChlZmZlY3QsIGZpYmVyKTtcblxuICB7XG4gICAgZmliZXIuZmxhZ3MgfD0gUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICBhbHRlcm5hdGUuZmxhZ3MgfD0gUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgIH1cbiAgfVxuXG4gIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VQYXNzaXZlRWZmZWN0Q3JlYXRlKGVmZmVjdCkge1xuICB2YXIgY3JlYXRlID0gZWZmZWN0LmNyZWF0ZTtcbiAgZWZmZWN0LmRlc3Ryb3kgPSBjcmVhdGUoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0c0ltcGwoKSB7XG4gIGlmIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciByb290ID0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHM7XG4gIHZhciBsYW5lcyA9IHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzO1xuICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGw7XG4gIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gTm9MYW5lcztcblxuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGZsdXNoIHBhc3NpdmUgZWZmZWN0cyB3aGlsZSBhbHJlYWR5IHJlbmRlcmluZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7IC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgQUxMIHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3QgZGVzdHJveSBmdW5jdGlvbnMgYXJlIGNhbGxlZFxuICAvLyBiZWZvcmUgQU5ZIHBhc3NpdmUgZWZmZWN0IGNyZWF0ZSBmdW5jdGlvbnMgYXJlIGNhbGxlZC5cbiAgLy8gT3RoZXJ3aXNlIGVmZmVjdHMgaW4gc2libGluZyBjb21wb25lbnRzIG1pZ2h0IGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIuXG4gIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgbWF5IHVuaW50ZW50aW9uYWxseSBvdmVycmlkZSBhIHJlZlxuICAvLyB2YWx1ZSBzZXQgYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQuXG4gIC8vIExheW91dCBlZmZlY3RzIGhhdmUgdGhlIHNhbWUgY29uc3RyYWludC5cbiAgLy8gRmlyc3QgcGFzczogRGVzdHJveSBzdGFsZSBwYXNzaXZlIGVmZmVjdHMuXG5cbiAgdmFyIHVubW91bnRFZmZlY3RzID0gcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQ7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50ID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bm1vdW50RWZmZWN0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBfZWZmZWN0ID0gdW5tb3VudEVmZmVjdHNbaV07XG4gICAgdmFyIGZpYmVyID0gdW5tb3VudEVmZmVjdHNbaSArIDFdO1xuICAgIHZhciBkZXN0cm95ID0gX2VmZmVjdC5kZXN0cm95O1xuICAgIF9lZmZlY3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICAgIHtcbiAgICAgIGZpYmVyLmZsYWdzICY9IH5QYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0ZS5mbGFncyAmPSB+UGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgZGVzdHJveSwgbnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKGZpYmVyICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFNlY29uZCBwYXNzOiBDcmVhdGUgbmV3IHBhc3NpdmUgZWZmZWN0cy5cblxuXG4gIHZhciBtb3VudEVmZmVjdHMgPSBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQ7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudCA9IFtdO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb3VudEVmZmVjdHMubGVuZ3RoOyBfaSArPSAyKSB7XG4gICAgdmFyIF9lZmZlY3QyID0gbW91bnRFZmZlY3RzW19pXTtcbiAgICB2YXIgX2ZpYmVyID0gbW91bnRFZmZlY3RzW19pICsgMV07XG5cbiAgICB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoX2ZpYmVyKTtcblxuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgaW52b2tlUGFzc2l2ZUVmZmVjdENyZWF0ZSwgbnVsbCwgX2VmZmVjdDIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICBpZiAoIShfZmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9lcnJvcjQgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoX2ZpYmVyLCBfZXJyb3I0KTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9XG4gIH0gLy8gTm90ZTogVGhpcyBjdXJyZW50bHkgYXNzdW1lcyB0aGVyZSBhcmUgbm8gcGFzc2l2ZSBlZmZlY3RzIG9uIHRoZSByb290IGZpYmVyXG4gIC8vIGJlY2F1c2UgdGhlIHJvb3QgaXMgbm90IHBhcnQgb2YgaXRzIG93biBlZmZlY3QgbGlzdC5cbiAgLy8gVGhpcyBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxuXG4gIHZhciBlZmZlY3QgPSByb290LmN1cnJlbnQuZmlyc3RFZmZlY3Q7XG5cbiAgd2hpbGUgKGVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBuZXh0TmV4dEVmZmVjdCA9IGVmZmVjdC5uZXh0RWZmZWN0OyAvLyBSZW1vdmUgbmV4dEVmZmVjdCBwb2ludGVyIHRvIGFzc2lzdCBHQ1xuXG4gICAgZWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuXG4gICAgaWYgKGVmZmVjdC5mbGFncyAmIERlbGV0aW9uKSB7XG4gICAgICBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhlZmZlY3QpO1xuICAgIH1cblxuICAgIGVmZmVjdCA9IG5leHROZXh0RWZmZWN0O1xuICB9XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgICBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIHtcbiAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgfVxuXG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpOyAvLyBJZiBhZGRpdGlvbmFsIHBhc3NpdmUgZWZmZWN0cyB3ZXJlIHNjaGVkdWxlZCwgaW5jcmVtZW50IGEgY291bnRlci4gSWYgdGhpc1xuICAvLyBleGNlZWRzIHRoZSBsaW1pdCwgd2UnbGwgZmlyZSBhIHdhcm5pbmcuXG5cbiAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPT09IG51bGwgPyAwIDogbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ICsgMTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkICE9PSBudWxsICYmIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhpbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBtYXJrTGVnYWN5RXJyb3JCb3VuZGFyeUFzRmFpbGVkKGluc3RhbmNlKSB7XG4gIGlmIChsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9PT0gbnVsbCkge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbmV3IFNldChbaW5zdGFuY2VdKTtcbiAgfSBlbHNlIHtcbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5hZGQoaW5zdGFuY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb1Rocm93VW5jYXVnaHRFcnJvcihlcnJvcikge1xuICBpZiAoIWhhc1VuY2F1Z2h0RXJyb3IpIHtcbiAgICBoYXNVbmNhdWdodEVycm9yID0gdHJ1ZTtcbiAgICBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgfVxufVxuXG52YXIgb25VbmNhdWdodEVycm9yID0gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yO1xuXG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChyb290RmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcikge1xuICB2YXIgZXJyb3JJbmZvID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZShlcnJvciwgc291cmNlRmliZXIpO1xuICB2YXIgdXBkYXRlID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHJvb3RGaWJlciwgZXJyb3JJbmZvLCBTeW5jTGFuZSk7XG4gIGVucXVldWVVcGRhdGUocm9vdEZpYmVyLCB1cGRhdGUpO1xuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHJvb3RGaWJlciwgU3luY0xhbmUpO1xuXG4gIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIFN5bmNMYW5lLCBldmVudFRpbWUpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBTeW5jTGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3Ioc291cmNlRmliZXIsIGVycm9yKSB7XG4gIGlmIChzb3VyY2VGaWJlci50YWcgPT09IEhvc3RSb290KSB7XG4gICAgLy8gRXJyb3Igd2FzIHRocm93biBhdCB0aGUgcm9vdC4gVGhlcmUgaXMgbm8gcGFyZW50LCBzbyB0aGUgcm9vdFxuICAgIC8vIGl0c2VsZiBzaG91bGQgY2FwdHVyZSBpdC5cbiAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChzb3VyY2VGaWJlciwgc291cmNlRmliZXIsIGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZmliZXIgPSBzb3VyY2VGaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgaWYgKGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KGZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgdmFyIGN0b3IgPSBmaWJlci50eXBlO1xuICAgICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpIHtcbiAgICAgICAgdmFyIGVycm9ySW5mbyA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgU3luY0xhbmUpO1xuICAgICAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgICAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgICAgICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgU3luY0xhbmUsIGV2ZW50VGltZSk7XG4gICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIFN5bmNMYW5lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubW91bnRlZC5cbiAgICAgICAgICAvLyBXZSBjYW4ndCBzY2hlZHVsZSBhbnkgZm9sbG93IHVwIHdvcmsgZm9yIHRoZSByb290IGJlY2F1c2UgdGhlIGZpYmVyIGlzIGFscmVhZHkgdW5tb3VudGVkLFxuICAgICAgICAgIC8vIGJ1dCB3ZSBjYW4gc3RpbGwgY2FsbCB0aGUgbG9nLW9ubHkgYm91bmRhcnkgc28gdGhlIGVycm9yIGlzbid0IHN3YWxsb3dlZC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRPRE8gVGhpcyBpcyBvbmx5IGEgdGVtcG9yYXJ5IGJhbmRhaWQgZm9yIHRoZSBvbGQgcmVjb25jaWxlciBmb3JrLlxuICAgICAgICAgIC8vIFdlIGNhbiBkZWxldGUgdGhpcyBzcGVjaWFsIGNhc2Ugb25jZSB0aGUgbmV3IGZvcmsgaXMgbWVyZ2VkLlxuICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaChlcnJvciwgZXJyb3JJbmZvKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yVG9JZ25vcmUpIHsvLyBUT0RPIElnbm9yZSB0aGlzIGVycm9yPyBSZXRocm93IGl0P1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGtpbmQgb2YgYW4gZWRnZSBjYXNlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgfVxufVxuZnVuY3Rpb24gcGluZ1N1c3BlbmRlZFJvb3Qocm9vdCwgd2FrZWFibGUsIHBpbmdlZExhbmVzKSB7XG4gIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcblxuICBpZiAocGluZ0NhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHdha2VhYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcGluZ0NhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICBtYXJrUm9vdFBpbmdlZChyb290LCBwaW5nZWRMYW5lcyk7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCA9PT0gcm9vdCAmJiBpc1N1YnNldE9mTGFuZXMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsIHBpbmdlZExhbmVzKSkge1xuICAgIC8vIFJlY2VpdmVkIGEgcGluZyBhdCB0aGUgc2FtZSBwcmlvcml0eSBsZXZlbCBhdCB3aGljaCB3ZSdyZSBjdXJyZW50bHlcbiAgICAvLyByZW5kZXJpbmcuIFdlIG1pZ2h0IHdhbnQgdG8gcmVzdGFydCB0aGlzIHJlbmRlci4gVGhpcyBzaG91bGQgbWlycm9yXG4gICAgLy8gdGhlIGxvZ2ljIG9mIHdoZXRoZXIgb3Igbm90IGEgcm9vdCBzdXNwZW5kcyBvbmNlIGl0IGNvbXBsZXRlcy5cbiAgICAvLyBUT0RPOiBJZiB3ZSdyZSByZW5kZXJpbmcgc3luYyBlaXRoZXIgZHVlIHRvIFN5bmMsIEJhdGNoZWQgb3IgZXhwaXJlZCxcbiAgICAvLyB3ZSBzaG91bGQgcHJvYmFibHkgbmV2ZXIgcmVzdGFydC5cbiAgICAvLyBJZiB3ZSdyZSBzdXNwZW5kZWQgd2l0aCBkZWxheSwgb3IgaWYgaXQncyBhIHJldHJ5LCB3ZSdsbCBhbHdheXMgc3VzcGVuZFxuICAgIC8vIHNvIHdlIGNhbiBhbHdheXMgcmVzdGFydC5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkICYmIGluY2x1ZGVzT25seVJldHJpZXMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpICYmIG5vdygpIC0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA8IEZBTExCQUNLX1RIUk9UVExFX01TKSB7XG4gICAgICAvLyBSZXN0YXJ0IGZyb20gdGhlIHJvb3QuXG4gICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRXZlbiB0aG91Z2ggd2UgY2FuJ3QgcmVzdGFydCByaWdodCBub3csIHdlIG1pZ2h0IGdldCBhblxuICAgICAgLy8gb3Bwb3J0dW5pdHkgbGF0ZXIuIFNvIHdlIG1hcmsgdGhpcyByZW5kZXIgYXMgaGF2aW5nIGEgcGluZy5cbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcywgcGluZ2VkTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgcGluZ2VkTGFuZXMpO1xufVxuXG5mdW5jdGlvbiByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKSB7XG4gIC8vIFRoZSBib3VuZGFyeSBmaWJlciAoYSBTdXNwZW5zZSBjb21wb25lbnQgb3IgU3VzcGVuc2VMaXN0IGNvbXBvbmVudClcbiAgLy8gcHJldmlvdXNseSB3YXMgcmVuZGVyZWQgaW4gaXRzIGZhbGxiYWNrIHN0YXRlLiBPbmUgb2YgdGhlIHByb21pc2VzIHRoYXRcbiAgLy8gc3VzcGVuZGVkIGl0IGhhcyByZXNvbHZlZCwgd2hpY2ggbWVhbnMgYXQgbGVhc3QgcGFydCBvZiB0aGUgdHJlZSB3YXNcbiAgLy8gbGlrZWx5IHVuYmxvY2tlZC4gVHJ5IHJlbmRlcmluZyBhZ2FpbiwgYXQgYSBuZXcgZXhwaXJhdGlvbiB0aW1lLlxuICBpZiAocmV0cnlMYW5lID09PSBOb0xhbmUpIHtcbiAgICByZXRyeUxhbmUgPSByZXF1ZXN0UmV0cnlMYW5lKGJvdW5kYXJ5RmliZXIpO1xuICB9IC8vIFRPRE86IFNwZWNpYWwgY2FzZSBpZGxlIHByaW9yaXR5P1xuXG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xuXG4gIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIHJldHJ5TGFuZSwgZXZlbnRUaW1lKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgcmV0cnlMYW5lKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZVJldHJ5V2FrZWFibGUoYm91bmRhcnlGaWJlciwgd2FrZWFibGUpIHtcbiAgdmFyIHJldHJ5TGFuZSA9IE5vTGFuZTsgLy8gRGVmYXVsdFxuXG4gIHZhciByZXRyeUNhY2hlO1xuXG4gIHtcbiAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGU7XG4gIH1cblxuICBpZiAocmV0cnlDYWNoZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSB3YWtlYWJsZSByZXNvbHZlZCwgc28gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gbWVtb2l6ZSwgYmVjYXVzZSBpdCB3aWxsXG4gICAgLy8gbmV2ZXIgYmUgdGhyb3duIGFnYWluLlxuICAgIHJldHJ5Q2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgfVxuXG4gIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xufSAvLyBDb21wdXRlcyB0aGUgbmV4dCBKdXN0IE5vdGljZWFibGUgRGlmZmVyZW5jZSAoSk5EKSBib3VuZGFyeS5cbi8vIFRoZSB0aGVvcnkgaXMgdGhhdCBhIHBlcnNvbiBjYW4ndCB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc21hbGwgZGlmZmVyZW5jZXMgaW4gdGltZS5cbi8vIFRoZXJlZm9yZSwgaWYgd2Ugd2FpdCBhIGJpdCBsb25nZXIgdGhhbiBuZWNlc3NhcnkgdGhhdCB3b24ndCB0cmFuc2xhdGUgdG8gYSBub3RpY2VhYmxlXG4vLyBkaWZmZXJlbmNlIGluIHRoZSBleHBlcmllbmNlLiBIb3dldmVyLCB3YWl0aW5nIGZvciBsb25nZXIgbWlnaHQgbWVhbiB0aGF0IHdlIGNhbiBhdm9pZFxuLy8gc2hvd2luZyBhbiBpbnRlcm1lZGlhdGUgbG9hZGluZyBzdGF0ZS4gVGhlIGxvbmdlciB3ZSBoYXZlIGFscmVhZHkgd2FpdGVkLCB0aGUgaGFyZGVyIGl0XG4vLyBpcyB0byB0ZWxsIHNtYWxsIGRpZmZlcmVuY2VzIGluIHRpbWUuIFRoZXJlZm9yZSwgdGhlIGxvbmdlciB3ZSd2ZSBhbHJlYWR5IHdhaXRlZCxcbi8vIHRoZSBsb25nZXIgd2UgY2FuIHdhaXQgYWRkaXRpb25hbGx5LiBBdCBzb21lIHBvaW50IHdlIGhhdmUgdG8gZ2l2ZSB1cCB0aG91Z2guXG4vLyBXZSBwaWNrIGEgdHJhaW4gbW9kZWwgd2hlcmUgdGhlIG5leHQgYm91bmRhcnkgY29tbWl0cyBhdCBhIGNvbnNpc3RlbnQgc2NoZWR1bGUuXG4vLyBUaGVzZSBwYXJ0aWN1bGFyIG51bWJlcnMgYXJlIHZhZ3VlIGVzdGltYXRlcy4gV2UgZXhwZWN0IHRvIGFkanVzdCB0aGVtIGJhc2VkIG9uIHJlc2VhcmNoLlxuXG5mdW5jdGlvbiBqbmQodGltZUVsYXBzZWQpIHtcbiAgcmV0dXJuIHRpbWVFbGFwc2VkIDwgMTIwID8gMTIwIDogdGltZUVsYXBzZWQgPCA0ODAgPyA0ODAgOiB0aW1lRWxhcHNlZCA8IDEwODAgPyAxMDgwIDogdGltZUVsYXBzZWQgPCAxOTIwID8gMTkyMCA6IHRpbWVFbGFwc2VkIDwgMzAwMCA/IDMwMDAgOiB0aW1lRWxhcHNlZCA8IDQzMjAgPyA0MzIwIDogY2VpbCh0aW1lRWxhcHNlZCAvIDE5NjApICogMTk2MDtcbn1cblxuZnVuY3Rpb24gY2hlY2tGb3JOZXN0ZWRVcGRhdGVzKCkge1xuICBpZiAobmVzdGVkVXBkYXRlQ291bnQgPiBORVNURURfVVBEQVRFX0xJTUlUKSB7XG4gICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICAgIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGw7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGNvbXBvbmVudCByZXBlYXRlZGx5IGNhbGxzIHNldFN0YXRlIGluc2lkZSBjb21wb25lbnRXaWxsVXBkYXRlIG9yIGNvbXBvbmVudERpZFVwZGF0ZS4gUmVhY3QgbGltaXRzIHRoZSBudW1iZXIgb2YgbmVzdGVkIHVwZGF0ZXMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID4gTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUKSB7XG4gICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwO1xuXG4gICAgICBlcnJvcignTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50ICcgKyBcImNhbGxzIHNldFN0YXRlIGluc2lkZSB1c2VFZmZlY3QsIGJ1dCB1c2VFZmZlY3QgZWl0aGVyIGRvZXNuJ3QgXCIgKyAnaGF2ZSBhIGRlcGVuZGVuY3kgYXJyYXksIG9yIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZXMgb24gJyArICdldmVyeSByZW5kZXIuJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoUmVuZGVyUGhhc2VTdHJpY3RNb2RlV2FybmluZ3NJbkRFVigpIHtcbiAge1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcoKTtcblxuICAgIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ID0gbnVsbDtcblxuZnVuY3Rpb24gd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gV2UgbGV0IHRoZSBvdGhlciB3YXJuaW5nIGFib3V0IHJlbmRlciBwaGFzZSB1cGRhdGVzIGRlYWwgd2l0aCB0aGlzIG9uZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIShmaWJlci5tb2RlICYgKEJsb2NraW5nTW9kZSB8IENvbmN1cnJlbnRNb2RlKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gZmliZXIudGFnO1xuXG4gICAgaWYgKHRhZyAhPT0gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCAmJiB0YWcgIT09IEhvc3RSb290ICYmIHRhZyAhPT0gQ2xhc3NDb21wb25lbnQgJiYgdGFnICE9PSBGdW5jdGlvbkNvbXBvbmVudCAmJiB0YWcgIT09IEZvcndhcmRSZWYgJiYgdGFnICE9PSBNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gU2ltcGxlTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IEJsb2NrKSB7XG4gICAgICAvLyBPbmx5IHdhcm4gZm9yIHVzZXItZGVmaW5lZCBjb21wb25lbnRzLCBub3QgaW50ZXJuYWwgb25lcyBsaWtlIFN1c3BlbnNlLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2Ugc2hvdyB0aGUgd2hvbGUgc3RhY2sgYnV0IGRlZHVwZSBvbiB0aGUgdG9wIGNvbXBvbmVudCdzIG5hbWUgYmVjYXVzZVxuICAgIC8vIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFsbW9zdCBhbHdheXMgbGllcyBpbnNpZGUgdGhhdCBjb21wb25lbnQuXG5cblxuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnUmVhY3RDb21wb25lbnQnO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ID0gbmV3IFNldChbY29tcG9uZW50TmFtZV0pO1xuICAgIH1cblxuICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICBlcnJvcihcIkNhbid0IHBlcmZvcm0gYSBSZWFjdCBzdGF0ZSB1cGRhdGUgb24gYSBjb21wb25lbnQgdGhhdCBoYXNuJ3QgbW91bnRlZCB5ZXQuIFwiICsgJ1RoaXMgaW5kaWNhdGVzIHRoYXQgeW91IGhhdmUgYSBzaWRlLWVmZmVjdCBpbiB5b3VyIHJlbmRlciBmdW5jdGlvbiB0aGF0ICcgKyAnYXN5bmNocm9ub3VzbHkgbGF0ZXIgY2FsbHMgdHJpZXMgdG8gdXBkYXRlIHRoZSBjb21wb25lbnQuIE1vdmUgdGhpcyB3b3JrIHRvICcgKyAndXNlRWZmZWN0IGluc3RlYWQuJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0gbnVsbDtcblxuZnVuY3Rpb24gd2FybkFib3V0VXBkYXRlT25Vbm1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gIHtcbiAgICB2YXIgdGFnID0gZmliZXIudGFnO1xuXG4gICAgaWYgKHRhZyAhPT0gSG9zdFJvb3QgJiYgdGFnICE9PSBDbGFzc0NvbXBvbmVudCAmJiB0YWcgIT09IEZ1bmN0aW9uQ29tcG9uZW50ICYmIHRhZyAhPT0gRm9yd2FyZFJlZiAmJiB0YWcgIT09IE1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gQmxvY2spIHtcbiAgICAgIC8vIE9ubHkgd2FybiBmb3IgdXNlci1kZWZpbmVkIGNvbXBvbmVudHMsIG5vdCBpbnRlcm5hbCBvbmVzIGxpa2UgU3VzcGVuc2UuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB0aGVyZSBhcmUgcGVuZGluZyBwYXNzaXZlIGVmZmVjdHMgdW5tb3VudHMgZm9yIHRoaXMgRmliZXIsXG4gICAgLy8gd2UgY2FuIGFzc3VtZSB0aGF0IHRoZXkgd291bGQgaGF2ZSBwcmV2ZW50ZWQgdGhpcyB1cGRhdGUuXG5cblxuICAgIGlmICgoZmliZXIuZmxhZ3MgJiBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXYpICE9PSBOb0ZsYWdzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBzaG93IHRoZSB3aG9sZSBzdGFjayBidXQgZGVkdXBlIG9uIHRoZSB0b3AgY29tcG9uZW50J3MgbmFtZSBiZWNhdXNlXG4gICAgLy8gdGhlIHByb2JsZW1hdGljIGNvZGUgYWxtb3N0IGFsd2F5cyBsaWVzIGluc2lkZSB0aGF0IGNvbXBvbmVudC5cblxuXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdSZWFjdENvbXBvbmVudCc7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IG5ldyBTZXQoW2NvbXBvbmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICBpZiAoaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzKSA7IGVsc2Uge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LiBUaGlzIFwiICsgJ2lzIGEgbm8tb3AsIGJ1dCBpdCBpbmRpY2F0ZXMgYSBtZW1vcnkgbGVhayBpbiB5b3VyIGFwcGxpY2F0aW9uLiBUbyAnICsgJ2ZpeCwgY2FuY2VsIGFsbCBzdWJzY3JpcHRpb25zIGFuZCBhc3luY2hyb25vdXMgdGFza3MgaW4gJXMuJywgdGFnID09PSBDbGFzc0NvbXBvbmVudCA/ICd0aGUgY29tcG9uZW50V2lsbFVubW91bnQgbWV0aG9kJyA6ICdhIHVzZUVmZmVjdCBjbGVhbnVwIGZ1bmN0aW9uJyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgYmVnaW5Xb3JrJDE7XG5cbntcbiAgdmFyIGR1bW15RmliZXIgPSBudWxsO1xuXG4gIGJlZ2luV29yayQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKSB7XG4gICAgLy8gSWYgYSBjb21wb25lbnQgdGhyb3dzIGFuIGVycm9yLCB3ZSByZXBsYXkgaXQgYWdhaW4gaW4gYSBzeW5jaHJvbm91c2x5XG4gICAgLy8gZGlzcGF0Y2hlZCBldmVudCwgc28gdGhhdCB0aGUgZGVidWdnZXIgd2lsbCB0cmVhdCBpdCBhcyBhbiB1bmNhdWdodFxuICAgIC8vIGVycm9yIFNlZSBSZWFjdEVycm9yVXRpbHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgLy8gQmVmb3JlIGVudGVyaW5nIHRoZSBiZWdpbiBwaGFzZSwgY29weSB0aGUgd29yay1pbi1wcm9ncmVzcyBvbnRvIGEgZHVtbXlcbiAgICAvLyBmaWJlci4gSWYgYmVnaW5Xb3JrIHRocm93cywgd2UnbGwgdXNlIHRoaXMgdG8gcmVzZXQgdGhlIHN0YXRlLlxuICAgIHZhciBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSA9IGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKGR1bW15RmliZXIsIHVuaXRPZldvcmspO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBiZWdpbldvcmsoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpO1xuICAgIH0gY2F0Y2ggKG9yaWdpbmFsRXJyb3IpIHtcbiAgICAgIGlmIChvcmlnaW5hbEVycm9yICE9PSBudWxsICYmIHR5cGVvZiBvcmlnaW5hbEVycm9yID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3JpZ2luYWxFcnJvci50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIERvbid0IHJlcGxheSBwcm9taXNlcy4gVHJlYXQgZXZlcnl0aGluZyBlbHNlIGxpa2UgYW4gZXJyb3IuXG4gICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICB9IC8vIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgd2l0aCBoYW5kbGVFcnJvcjsgYW55IGNoYW5nZXMgaGVyZSBtdXN0IGhhdmVcbiAgICAgIC8vIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0aGVyZS5cblxuXG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHJlc2V0SG9va3NBZnRlclRocm93KCk7IC8vIERvbid0IHJlc2V0IGN1cnJlbnQgZGVidWcgZmliZXIsIHNpbmNlIHdlJ3JlIGFib3V0IHRvIHdvcmsgb24gdGhlXG4gICAgICAvLyBzYW1lIGZpYmVyIGFnYWluLlxuICAgICAgLy8gVW53aW5kIHRoZSBmYWlsZWQgc3RhY2sgZnJhbWVcblxuICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKHVuaXRPZldvcmspOyAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm9wZXJ0aWVzIG9mIHRoZSBmaWJlci5cblxuICAgICAgYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodW5pdE9mV29yaywgb3JpZ2luYWxXb3JrSW5Qcm9ncmVzc0NvcHkpO1xuXG4gICAgICBpZiAoIHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIC8vIFJlc2V0IHRoZSBwcm9maWxlciB0aW1lci5cbiAgICAgICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgICAgfSAvLyBSdW4gYmVnaW5Xb3JrIGFnYWluLlxuXG5cbiAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBiZWdpbldvcmssIG51bGwsIGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKTtcblxuICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgdmFyIHJlcGxheUVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpOyAvLyBgaW52b2tlR3VhcmRlZENhbGxiYWNrYCBzb21ldGltZXMgc2V0cyBhbiBleHBhbmRvIGBfc3VwcHJlc3NMb2dnaW5nYC5cbiAgICAgICAgLy8gUmV0aHJvdyB0aGlzIGVycm9yIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIG9uZS5cblxuICAgICAgICB0aHJvdyByZXBsYXlFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgYnJhbmNoIGlzIHJlYWNoYWJsZSBpZiB0aGUgcmVuZGVyIHBoYXNlIGlzIGltcHVyZS5cbiAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9IGZhbHNlO1xudmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudDtcblxue1xuICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQgPSBuZXcgU2V0KCk7XG59XG5cbmZ1bmN0aW9uIHdhcm5BYm91dFJlbmRlclBoYXNlVXBkYXRlc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoaXNSZW5kZXJpbmcgJiYgKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmICFnZXRJc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlSW5ERVYoKSkge1xuICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlbmRlcmluZ0NvbXBvbmVudE5hbWUgPSB3b3JrSW5Qcm9ncmVzcyAmJiBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdVbmtub3duJzsgLy8gRGVkdXBlIGJ5IHRoZSByZW5kZXJpbmcgY29tcG9uZW50IGJlY2F1c2UgaXQncyB0aGUgb25lIHRoYXQgbmVlZHMgdG8gYmUgZml4ZWQuXG5cbiAgICAgICAgICAgIHZhciBkZWR1cGVLZXkgPSByZW5kZXJpbmdDb21wb25lbnROYW1lO1xuXG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5oYXMoZGVkdXBlS2V5KSkge1xuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuYWRkKGRlZHVwZUtleSk7XG4gICAgICAgICAgICAgIHZhciBzZXRTdGF0ZUNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJztcblxuICAgICAgICAgICAgICBlcnJvcignQ2Fubm90IHVwZGF0ZSBhIGNvbXBvbmVudCAoYCVzYCkgd2hpbGUgcmVuZGVyaW5nIGEgJyArICdkaWZmZXJlbnQgY29tcG9uZW50IChgJXNgKS4gVG8gbG9jYXRlIHRoZSBiYWQgc2V0U3RhdGUoKSBjYWxsIGluc2lkZSBgJXNgLCAnICsgJ2ZvbGxvdyB0aGUgc3RhY2sgdHJhY2UgYXMgZGVzY3JpYmVkIGluIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zZXRzdGF0ZS1pbi1yZW5kZXInLCBzZXRTdGF0ZUNvbXBvbmVudE5hbWUsIHJlbmRlcmluZ0NvbXBvbmVudE5hbWUsIHJlbmRlcmluZ0NvbXBvbmVudE5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdDYW5ub3QgdXBkYXRlIGR1cmluZyBhbiBleGlzdGluZyBzdGF0ZSB0cmFuc2l0aW9uIChzdWNoIGFzICcgKyAnd2l0aGluIGByZW5kZXJgKS4gUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSAnICsgJ2Z1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4nKTtcblxuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gYSAnc2hhcmVkJyB2YXJpYWJsZSB0aGF0IGNoYW5nZXMgd2hlbiBhY3QoKSBvcGVucy9jbG9zZXMgaW4gdGVzdHMuXG5cblxudmFyIElzVGhpc1JlbmRlcmVyQWN0aW5nID0ge1xuICBjdXJyZW50OiBmYWxzZVxufTtcbmZ1bmN0aW9uIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChmaWJlcikge1xuICB7XG4gICAgaWYgKCBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSB0cnVlICYmIElzVGhpc1JlbmRlcmVyQWN0aW5nLmN1cnJlbnQgIT09IHRydWUpIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBlcnJvcihcIkl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIHRoZSB3cm9uZyBhY3QoKSBhcm91bmQgeW91ciB0ZXN0IGludGVyYWN0aW9ucy5cXG5cIiArICdCZSBzdXJlIHRvIHVzZSB0aGUgbWF0Y2hpbmcgdmVyc2lvbiBvZiBhY3QoKSBjb3JyZXNwb25kaW5nIHRvIHlvdXIgcmVuZGVyZXI6XFxuXFxuJyArICcvLyBmb3IgcmVhY3QtZG9tOlxcbicgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAnaW1wb3J0IHthY3R9IGZyJyArIFwib20gJ3JlYWN0LWRvbS90ZXN0LXV0aWxzJztcXG5cIiArICcvLyAuLi5cXG4nICsgJ2FjdCgoKSA9PiAuLi4pO1xcblxcbicgKyAnLy8gZm9yIHJlYWN0LXRlc3QtcmVuZGVyZXI6XFxuJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICdpbXBvcnQgVGVzdFJlbmRlcmVyIGZyJyArIFwib20gcmVhY3QtdGVzdC1yZW5kZXJlcic7XFxuXCIgKyAnY29uc3Qge2FjdH0gPSBUZXN0UmVuZGVyZXI7XFxuJyArICcvLyAuLi5cXG4nICsgJ2FjdCgoKSA9PiAuLi4pOycpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKCAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUpICE9PSBOb01vZGUgJiYgSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIGVycm9yKCdBbiB1cGRhdGUgdG8gJXMgcmFuIGFuIGVmZmVjdCwgYnV0IHdhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG4nICsgJ1doZW4gdGVzdGluZywgY29kZSB0aGF0IGNhdXNlcyBSZWFjdCBzdGF0ZSB1cGRhdGVzIHNob3VsZCBiZSAnICsgJ3dyYXBwZWQgaW50byBhY3QoLi4uKTpcXG5cXG4nICsgJ2FjdCgoKSA9PiB7XFxuJyArICcgIC8qIGZpcmUgZXZlbnRzIHRoYXQgdXBkYXRlIHN0YXRlICovXFxuJyArICd9KTtcXG4nICsgJy8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuJyArIFwiVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBcIiArICdpbiB0aGUgYnJvd3Nlci4nICsgJyBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0JywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKCBleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQgJiYgSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBlcnJvcignQW4gdXBkYXRlIHRvICVzIGluc2lkZSBhIHRlc3Qgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbicgKyAnV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlICcgKyAnd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbicgKyAnYWN0KCgpID0+IHtcXG4nICsgJyAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG4nICsgJ30pO1xcbicgKyAnLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG4nICsgXCJUaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIFwiICsgJ2luIHRoZSBicm93c2VyLicgKyAnIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3QnLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5EZXYgPSB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5ERVY7IC8vIEluIHRlc3RzLCB3ZSB3YW50IHRvIGVuZm9yY2UgYSBtb2NrZWQgc2NoZWR1bGVyLlxuXG52YXIgZGlkV2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPSBmYWxzZTsgLy8gVE9ETyBCZWZvcmUgd2UgcmVsZWFzZSBjb25jdXJyZW50IG1vZGUsIHJldmlzaXQgdGhpcyBhbmQgZGVjaWRlIHdoZXRoZXIgYSBtb2NrZWRcbi8vIHNjaGVkdWxlciBpcyB0aGUgYWN0dWFsIHJlY29tbWVuZGF0aW9uLiBUaGUgYWx0ZXJuYXRpdmUgY291bGQgYmUgYSB0ZXN0aW5nIGJ1aWxkLFxuLy8gYSBuZXcgbGliLCBvciB3aGF0ZXZlcjsgd2UgZHVubm8ganVzdCB5ZXQuIFRoaXMgbWVzc2FnZSBpcyBmb3IgZWFybHkgYWRvcHRlcnNcbi8vIHRvIGdldCB0aGVpciB0ZXN0cyByaWdodC5cblxuZnVuY3Rpb24gd2FybklmVW5tb2NrZWRTY2hlZHVsZXIoZmliZXIpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9PT0gZmFsc2UgJiYgU2NoZWR1bGVyLnVuc3RhYmxlX2ZsdXNoQWxsV2l0aG91dEFzc2VydGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZmliZXIubW9kZSAmIEJsb2NraW5nTW9kZSB8fCBmaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdJbiBDb25jdXJyZW50IG9yIFN5bmMgbW9kZXMsIHRoZSBcInNjaGVkdWxlclwiIG1vZHVsZSBuZWVkcyB0byBiZSBtb2NrZWQgJyArICd0byBndWFyYW50ZWUgY29uc2lzdGVudCBiZWhhdmlvdXIgYWNyb3NzIHRlc3RzIGFuZCBicm93c2Vycy4gJyArICdGb3IgZXhhbXBsZSwgd2l0aCBqZXN0OiBcXG4nICsgLy8gQnJlYWsgdXAgcmVxdWlyZXMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgIFwiamVzdC5tb2NrKCdzY2hlZHVsZXInLCAoKSA9PiByZXF1aXJlXCIgKyBcIignc2NoZWR1bGVyL3Vuc3RhYmxlX21vY2snKSk7XFxuXFxuXCIgKyAnRm9yIG1vcmUgaW5mbywgdmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL21vY2stc2NoZWR1bGVyJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lKSB7XG4gIC8vIEludGVyYWN0aW9uIHRocmVhZHMgYXJlIHVuaXF1ZSBwZXIgcm9vdCBhbmQgZXhwaXJhdGlvbiB0aW1lLlxuICAvLyBOT1RFOiBJbnRlbnRpb25hbGx5IHVuc291bmQgY2FzdC4gQWxsIHRoYXQgbWF0dGVycyBpcyB0aGF0IGl0J3MgYSBudW1iZXJcbiAgLy8gYW5kIGl0IHJlcHJlc2VudHMgYSBiYXRjaCBvZiB3b3JrLiBDb3VsZCBtYWtlIGEgaGVscGVyIGZ1bmN0aW9uIGluc3RlYWQsXG4gIC8vIGJ1dCBtZWggdGhpcyBpcyBmaW5lIGZvciBub3cuXG4gIHJldHVybiBsYW5lICogMTAwMCArIHJvb3QuaW50ZXJhY3Rpb25UaHJlYWRJRDtcbn1cblxuZnVuY3Rpb24gbWFya1NwYXduZWRXb3JrKGxhbmUpIHtcblxuICBpZiAoc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPT09IG51bGwpIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IFtsYW5lXTtcbiAgfSBlbHNlIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlci5wdXNoKGxhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUsIGludGVyYWN0aW9ucykge1xuXG4gIGlmIChpbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9uTWFwID0gcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXA7XG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbnMgPSBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuZ2V0KGxhbmUpO1xuXG4gICAgaWYgKHBlbmRpbmdJbnRlcmFjdGlvbnMgIT0gbnVsbCkge1xuICAgICAgaW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGlmICghcGVuZGluZ0ludGVyYWN0aW9ucy5oYXMoaW50ZXJhY3Rpb24pKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHByZXZpb3VzbHkgdW5zY2hlZHVsZWQgaW50ZXJhY3Rpb24uXG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVuZGluZ0ludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5zZXQobGFuZSwgbmV3IFNldChpbnRlcmFjdGlvbnMpKTsgLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cblxuICAgICAgaW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgbGFuZSk7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpIHtcblxuICBzY2hlZHVsZUludGVyYWN0aW9ucyhyb290LCBsYW5lLCB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQpO1xufVxuXG5mdW5jdGlvbiBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpIHtcbiAgLy8gd2UgY2FuIGFjY3VyYXRlbHkgYXR0cmlidXRlIHRpbWUgc3BlbnQgd29ya2luZyBvbiBpdCwgQW5kIHNvIHRoYXQgY2FzY2FkaW5nXG4gIC8vIHdvcmsgdHJpZ2dlcmVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgdmFyIGludGVyYWN0aW9ucyA9IG5ldyBTZXQoKTtcbiAgcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXAuZm9yRWFjaChmdW5jdGlvbiAoc2NoZWR1bGVkSW50ZXJhY3Rpb25zLCBzY2hlZHVsZWRMYW5lKSB7XG4gICAgaWYgKGluY2x1ZGVzU29tZUxhbmUobGFuZXMsIHNjaGVkdWxlZExhbmUpKSB7XG4gICAgICBzY2hlZHVsZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTsgLy8gU3RvcmUgdGhlIGN1cnJlbnQgc2V0IG9mIGludGVyYWN0aW9ucyBvbiB0aGUgRmliZXJSb290IGZvciBhIGZldyByZWFzb25zOlxuICAvLyBXZSBjYW4gcmUtdXNlIGl0IGluIGhvdCBmdW5jdGlvbnMgbGlrZSBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QoKVxuICAvLyB3aXRob3V0IGhhdmluZyB0byByZWNhbGN1bGF0ZSBpdC4gV2Ugd2lsbCBhbHNvIHVzZSBpdCBpbiBjb21taXRXb3JrKCkgdG9cbiAgLy8gcGFzcyB0byBhbnkgUHJvZmlsZXIgb25SZW5kZXIoKSBob29rcy4gVGhpcyBhbHNvIHByb3ZpZGVzIERldlRvb2xzIHdpdGggYVxuICAvLyB3YXkgdG8gYWNjZXNzIGl0IHdoZW4gdGhlIG9uQ29tbWl0Um9vdCgpIGhvb2sgaXMgY2FsbGVkLlxuXG4gIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMgPSBpbnRlcmFjdGlvbnM7XG5cbiAgaWYgKGludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgIHZhciBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgbGFuZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB0aHJvd3MsIHJldGhyb3cgaXQgaW4gYSBzZXBhcmF0ZSB0YXNrXG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBjb21taXR0ZWRMYW5lcykge1xuXG4gIHZhciByZW1haW5pbmdMYW5lc0FmdGVyQ29tbWl0ID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIHZhciBzdWJzY3JpYmVyO1xuXG4gIHRyeSB7XG4gICAgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgICAvLyBGSVhNRTogTW9yZSB0aGFuIG9uZSBsYW5lIGNhbiBmaW5pc2ggaW4gYSBzaW5nbGUgY29tbWl0LlxuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGNvbW1pdHRlZExhbmVzKTtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChyb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIENsZWFyIGNvbXBsZXRlZCBpbnRlcmFjdGlvbnMgZnJvbSB0aGUgcGVuZGluZyBNYXAuXG4gICAgLy8gVW5sZXNzIHRoZSByZW5kZXIgd2FzIHN1c3BlbmRlZCBvciBjYXNjYWRpbmcgd29yayB3YXMgc2NoZWR1bGVkLFxuICAgIC8vIEluIHdoaWNoIGNhc2VcdTIwMTMgbGVhdmUgcGVuZGluZyBpbnRlcmFjdGlvbnMgdW50aWwgdGhlIHN1YnNlcXVlbnQgcmVuZGVyLlxuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcDtcbiAgICBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuZm9yRWFjaChmdW5jdGlvbiAoc2NoZWR1bGVkSW50ZXJhY3Rpb25zLCBsYW5lKSB7XG4gICAgICAvLyBPbmx5IGRlY3JlbWVudCB0aGUgcGVuZGluZyBpbnRlcmFjdGlvbiBjb3VudCBpZiB3ZSdyZSBkb25lLlxuICAgICAgLy8gSWYgdGhlcmUncyBzdGlsbCB3b3JrIGF0IHRoZSBjdXJyZW50IHByaW9yaXR5LFxuICAgICAgLy8gVGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igc3VzcGVuc2UgZGF0YS5cbiAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW1haW5pbmdMYW5lc0FmdGVyQ29tbWl0LCBsYW5lKSkge1xuICAgICAgICBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuZGVsZXRlKGxhbmUpO1xuICAgICAgICBzY2hlZHVsZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICAgICAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0gLy8gYGFjdGAgdGVzdGluZyBBUElcblxuZnVuY3Rpb24gc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkge1xuICAvLyBOZXZlciBmb3JjZSBmbHVzaCBpbiBwcm9kdWN0aW9uLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBnZXQgc3RyaXBwZWQgb3V0LlxuICByZXR1cm4gIGFjdGluZ1VwZGF0ZXNTY29wZURlcHRoID4gMDtcbn1cbi8vIHNvIHdlIGNhbiB0ZWxsIGlmIGFueSBhc3luYyBhY3QoKSBjYWxscyB0cnkgdG8gcnVuIGluIHBhcmFsbGVsLlxuXG5cbnZhciBhY3RpbmdVcGRhdGVzU2NvcGVEZXB0aCA9IDA7XG5cbmZ1bmN0aW9uIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGZpYmVyKSB7XG4gIGZpYmVyLnNpYmxpbmcgPSBudWxsO1xuICBmaWJlci5zdGF0ZU5vZGUgPSBudWxsO1xufVxuXG52YXIgcmVzb2x2ZUZhbWlseSA9IG51bGw7IC8vICRGbG93Rml4TWUgRmxvdyBnZXRzIGNvbmZ1c2VkIGJ5IGEgV2Vha1NldCBmZWF0dXJlIGNoZWNrIGJlbG93LlxuXG52YXIgZmFpbGVkQm91bmRhcmllcyA9IG51bGw7XG52YXIgc2V0UmVmcmVzaEhhbmRsZXIgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICB7XG4gICAgcmVzb2x2ZUZhbWlseSA9IGhhbmRsZXI7XG4gIH1cbn07XG5mdW5jdGlvbiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSAvLyBVc2UgdGhlIGxhdGVzdCBrbm93biBpbXBsZW1lbnRhdGlvbi5cblxuXG4gICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICAvLyBObyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJlbmNlcy5cbiAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlYWwgZm9yd2FyZFJlZi4gRG9uJ3Qgd2FudCB0byBjcmFzaCBlYXJseS5cbiAgICAgIGlmICh0eXBlICE9PSBudWxsICYmIHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRm9yd2FyZFJlZiBpcyBzcGVjaWFsIGJlY2F1c2UgaXRzIHJlc29sdmVkIC50eXBlIGlzIGFuIG9iamVjdCxcbiAgICAgICAgLy8gYnV0IGl0J3MgcG9zc2libGUgdGhhdCB3ZSBvbmx5IGhhdmUgaXRzIGlubmVyIHJlbmRlciBmdW5jdGlvbiBpbiB0aGUgbWFwLlxuICAgICAgICAvLyBJZiB0aGF0IGlubmVyIHJlbmRlciBmdW5jdGlvbiBpcyBkaWZmZXJlbnQsIHdlJ2xsIGJ1aWxkIGEgbmV3IGZvcndhcmRSZWYgdHlwZS5cbiAgICAgICAgdmFyIGN1cnJlbnRSZW5kZXIgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZS5yZW5kZXIpO1xuXG4gICAgICAgIGlmICh0eXBlLnJlbmRlciAhPT0gY3VycmVudFJlbmRlcikge1xuICAgICAgICAgIHZhciBzeW50aGV0aWNUeXBlID0ge1xuICAgICAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgICAgICAgICByZW5kZXI6IGN1cnJlbnRSZW5kZXJcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3ludGhldGljVHlwZS5kaXNwbGF5TmFtZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN5bnRoZXRpY1R5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSAvLyBVc2UgdGhlIGxhdGVzdCBrbm93biBpbXBsZW1lbnRhdGlvbi5cblxuXG4gICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoZmliZXIsIGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBwcmV2VHlwZSA9IGZpYmVyLmVsZW1lbnRUeXBlO1xuICAgIHZhciBuZXh0VHlwZSA9IGVsZW1lbnQudHlwZTsgLy8gSWYgd2UgZ290IGhlcmUsIHdlIGtub3cgdHlwZXMgYXJlbid0ID09PSBlcXVhbC5cblxuICAgIHZhciBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IGZhbHNlO1xuICAgIHZhciAkJHR5cGVvZk5leHRUeXBlID0gdHlwZW9mIG5leHRUeXBlID09PSAnb2JqZWN0JyAmJiBuZXh0VHlwZSAhPT0gbnVsbCA/IG5leHRUeXBlLiQkdHlwZW9mIDogbnVsbDtcblxuICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXh0VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIGlubmVyIHR5cGUgeWV0LlxuICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoYXQgdGhlIGxhenkgaW5uZXIgdHlwZSBpcyBzdGFibGUsXG4gICAgICAgICAgICAvLyBhbmQgc28gaXQgaXMgc3VmZmljaWVudCB0byBhdm9pZCByZWNvbmNpbGluZyBpdCBhd2F5LlxuICAgICAgICAgICAgLy8gV2UncmUgbm90IGdvaW5nIHRvIHVud3JhcCBvciBhY3R1YWxseSB1c2UgdGhlIG5ldyBsYXp5IHR5cGUuXG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IGlmIGl0IHdhcyBidXQgY2FuIG5vIGxvbmdlciBiZSBzaW1wbGUsXG4gICAgICAgICAgICAvLyB3ZSBzaG91bGRuJ3Qgc2V0IHRoaXMuXG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBDaGVjayBpZiBib3RoIHR5cGVzIGhhdmUgYSBmYW1pbHkgYW5kIGl0J3MgdGhlIHNhbWUgb25lLlxuXG5cbiAgICBpZiAobmVlZHNDb21wYXJlRmFtaWxpZXMpIHtcbiAgICAgIC8vIE5vdGU6IG1lbW8oKSBhbmQgZm9yd2FyZFJlZigpIHdlJ2xsIGNvbXBhcmUgb3V0ZXIgcmF0aGVyIHRoYW4gaW5uZXIgdHlwZS5cbiAgICAgIC8vIFRoaXMgbWVhbnMgYm90aCBvZiB0aGVtIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCB0byBwcmVzZXJ2ZSBzdGF0ZS5cbiAgICAgIC8vIElmIHdlIHVud3JhcHBlZCBhbmQgY29tcGFyZWQgdGhlIGlubmVyIHR5cGVzIGZvciB3cmFwcGVycyBpbnN0ZWFkLFxuICAgICAgLy8gdGhlbiB3ZSB3b3VsZCByaXNrIGZhbHNlbHkgc2F5aW5nIHR3byBzZXBhcmF0ZSBtZW1vKEZvbylcbiAgICAgIC8vIGNhbGxzIGFyZSBlcXVpdmFsZW50IGJlY2F1c2UgdGhleSB3cmFwIHRoZSBzYW1lIEZvbyBmdW5jdGlvbi5cbiAgICAgIHZhciBwcmV2RmFtaWx5ID0gcmVzb2x2ZUZhbWlseShwcmV2VHlwZSk7XG5cbiAgICAgIGlmIChwcmV2RmFtaWx5ICE9PSB1bmRlZmluZWQgJiYgcHJldkZhbWlseSA9PT0gcmVzb2x2ZUZhbWlseShuZXh0VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcikge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBXZWFrU2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgPT09IG51bGwpIHtcbiAgICAgIGZhaWxlZEJvdW5kYXJpZXMgPSBuZXcgV2Vha1NldCgpO1xuICAgIH1cblxuICAgIGZhaWxlZEJvdW5kYXJpZXMuYWRkKGZpYmVyKTtcbiAgfVxufVxudmFyIHNjaGVkdWxlUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCB1cGRhdGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzdGFsZUZhbWlsaWVzID0gdXBkYXRlLnN0YWxlRmFtaWxpZXMsXG4gICAgICAgIHVwZGF0ZWRGYW1pbGllcyA9IHVwZGF0ZS51cGRhdGVkRmFtaWxpZXM7XG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KHJvb3QuY3VycmVudCwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBzY2hlZHVsZVJvb3QgPSBmdW5jdGlvbiAocm9vdCwgZWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJvb3QuY29udGV4dCAhPT0gZW1wdHlDb250ZXh0T2JqZWN0KSB7XG4gICAgICAvLyBTdXBlciBlZGdlIGNhc2U6IHJvb3QgaGFzIGEgbGVnYWN5IF9yZW5kZXJTdWJ0cmVlIGNvbnRleHRcbiAgICAgIC8vIGJ1dCB3ZSBkb24ndCBrbm93IHRoZSBwYXJlbnRDb21wb25lbnQgc28gd2UgY2FuJ3QgcGFzcyBpdC5cbiAgICAgIC8vIEp1c3QgaWdub3JlLiBXZSdsbCBkZWxldGUgdGhpcyB3aXRoIF9yZW5kZXJTdWJ0cmVlIGNvZGUgcGF0aCBsYXRlci5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgZmx1c2hTeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCByb290LCBudWxsLCBudWxsKTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShmaWJlciwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlLFxuICAgICAgICBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICBzaWJsaW5nID0gZmliZXIuc2libGluZyxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcbiAgICB2YXIgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHJlc29sdmVGYW1pbHkgdG8gYmUgc2V0IGR1cmluZyBob3QgcmVsb2FkLicpO1xuICAgIH1cblxuICAgIHZhciBuZWVkc1JlbmRlciA9IGZhbHNlO1xuICAgIHZhciBuZWVkc1JlbW91bnQgPSBmYWxzZTtcblxuICAgIGlmIChjYW5kaWRhdGVUeXBlICE9PSBudWxsKSB7XG4gICAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseShjYW5kaWRhdGVUeXBlKTtcblxuICAgICAgaWYgKGZhbWlseSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChzdGFsZUZhbWlsaWVzLmhhcyhmYW1pbHkpKSB7XG4gICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1cGRhdGVkRmFtaWxpZXMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICBpZiAodGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmVlZHNSZW5kZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzICE9PSBudWxsKSB7XG4gICAgICBpZiAoZmFpbGVkQm91bmRhcmllcy5oYXMoZmliZXIpIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBmYWlsZWRCb3VuZGFyaWVzLmhhcyhhbHRlcm5hdGUpKSB7XG4gICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lZWRzUmVtb3VudCkge1xuICAgICAgZmliZXIuX2RlYnVnTmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW1vdW50IHx8IG5lZWRzUmVuZGVyKSB7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsICYmICFuZWVkc1JlbW91bnQpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoY2hpbGQsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfVxuXG4gICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoc2libGluZywgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCBmYW1pbGllcykge1xuICB7XG4gICAgdmFyIGhvc3RJbnN0YW5jZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHR5cGVzID0gbmV3IFNldChmYW1pbGllcy5tYXAoZnVuY3Rpb24gKGZhbWlseSkge1xuICAgICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICAgIH0pKTtcbiAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkocm9vdC5jdXJyZW50LCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgcmV0dXJuIGhvc3RJbnN0YW5jZXM7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShmaWJlciwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICBzaWJsaW5nID0gZmliZXIuc2libGluZyxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcbiAgICB2YXIgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBkaWRNYXRjaCA9IGZhbHNlO1xuXG4gICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT09IG51bGwpIHtcbiAgICAgIGlmICh0eXBlcy5oYXMoY2FuZGlkYXRlVHlwZSkpIHtcbiAgICAgICAgZGlkTWF0Y2ggPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaWRNYXRjaCkge1xuICAgICAgLy8gV2UgaGF2ZSBhIG1hdGNoLiBUaGlzIG9ubHkgZHJpbGxzIGRvd24gdG8gdGhlIGNsb3Nlc3QgaG9zdCBjb21wb25lbnRzLlxuICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIHNlYXJjaCBkZWVwZXIgYmVjYXVzZSBmb3IgdGhlIHB1cnBvc2Ugb2YgZ2l2aW5nXG4gICAgICAvLyB2aXN1YWwgZmVlZGJhY2ssIFwiZmxhc2hpbmdcIiBvdXRlcm1vc3QgcGFyZW50IHJlY3RhbmdsZXMgaXMgc3VmZmljaWVudC5cbiAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGVyZSdzIG5vIG1hdGNoLCBtYXliZSB0aGVyZSB3aWxsIGJlIG9uZSBmdXJ0aGVyIGRvd24gaW4gdGhlIGNoaWxkIHRyZWUuXG4gICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KGNoaWxkLCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShzaWJsaW5nLCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBmb3VuZEhvc3RJbnN0YW5jZXMgPSBmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpO1xuXG4gICAgaWYgKGZvdW5kSG9zdEluc3RhbmNlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55IGhvc3QgY2hpbGRyZW4sIGZhbGxiYWNrIHRvIGNsb3Nlc3QgaG9zdCBwYXJlbnQuXG5cblxuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc3dpdGNoIChub2RlLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byByZWFjaCByb290IGZpcnN0LicpO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcbiAgICB2YXIgZm91bmRIb3N0SW5zdGFuY2VzID0gZmFsc2U7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50KSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIG1hdGNoLlxuICAgICAgICBmb3VuZEhvc3RJbnN0YW5jZXMgPSB0cnVlO1xuICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZSk7IC8vIFRoZXJlIG1heSBzdGlsbCBiZSBtb3JlLCBzbyBrZWVwIHNlYXJjaGluZy5cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZpYmVyKSB7XG4gICAgICAgIHJldHVybiBmb3VuZEhvc3RJbnN0YW5jZXM7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBmaWJlcikge1xuICAgICAgICAgIHJldHVybiBmb3VuZEhvc3RJbnN0YW5jZXM7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgaGFzQmFkTWFwUG9seWZpbGw7XG5cbntcbiAgaGFzQmFkTWFwUG9seWZpbGwgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIHZhciBub25FeHRlbnNpYmxlT2JqZWN0ID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cblxuICAgIG5ldyBNYXAoW1tub25FeHRlbnNpYmxlT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW25vbkV4dGVuc2libGVPYmplY3RdKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAqL1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVE9ETzogQ29uc2lkZXIgd2FybmluZyBhYm91dCBiYWQgcG9seWZpbGxzXG4gICAgaGFzQmFkTWFwUG9seWZpbGwgPSB0cnVlO1xuICB9XG59XG5cbnZhciBkZWJ1Z0NvdW50ZXIgPSAxO1xuXG5mdW5jdGlvbiBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAvLyBJbnN0YW5jZVxuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5rZXkgPSBrZXk7XG4gIHRoaXMuZWxlbWVudFR5cGUgPSBudWxsO1xuICB0aGlzLnR5cGUgPSBudWxsO1xuICB0aGlzLnN0YXRlTm9kZSA9IG51bGw7IC8vIEZpYmVyXG5cbiAgdGhpcy5yZXR1cm4gPSBudWxsO1xuICB0aGlzLmNoaWxkID0gbnVsbDtcbiAgdGhpcy5zaWJsaW5nID0gbnVsbDtcbiAgdGhpcy5pbmRleCA9IDA7XG4gIHRoaXMucmVmID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7XG4gIHRoaXMubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gIHRoaXMudXBkYXRlUXVldWUgPSBudWxsO1xuICB0aGlzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB0aGlzLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gIHRoaXMubW9kZSA9IG1vZGU7IC8vIEVmZmVjdHNcblxuICB0aGlzLmZsYWdzID0gTm9GbGFncztcbiAgdGhpcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gIHRoaXMubGFzdEVmZmVjdCA9IG51bGw7XG4gIHRoaXMubGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmFsdGVybmF0ZSA9IG51bGw7XG5cbiAge1xuICAgIC8vIE5vdGU6IFRoZSBmb2xsb3dpbmcgaXMgZG9uZSB0byBhdm9pZCBhIHY4IHBlcmZvcm1hbmNlIGNsaWZmLlxuICAgIC8vXG4gICAgLy8gSW5pdGlhbGl6aW5nIHRoZSBmaWVsZHMgYmVsb3cgdG8gc21pcyBhbmQgbGF0ZXIgdXBkYXRpbmcgdGhlbSB3aXRoXG4gICAgLy8gZG91YmxlIHZhbHVlcyB3aWxsIGNhdXNlIEZpYmVycyB0byBlbmQgdXAgaGF2aW5nIHNlcGFyYXRlIHNoYXBlcy5cbiAgICAvLyBUaGlzIGJlaGF2aW9yL2J1ZyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggT2JqZWN0LnByZXZlbnRFeHRlbnNpb24oKS5cbiAgICAvLyBGb3J0dW5hdGVseSB0aGlzIG9ubHkgaW1wYWN0cyBERVYgYnVpbGRzLlxuICAgIC8vIFVuZm9ydHVuYXRlbHkgaXQgbWFrZXMgUmVhY3QgdW51c2FibHkgc2xvdyBmb3Igc29tZSBhcHBsaWNhdGlvbnMuXG4gICAgLy8gVG8gd29yayBhcm91bmQgdGhpcywgaW5pdGlhbGl6ZSB0aGUgZmllbGRzIGJlbG93IHdpdGggZG91Ymxlcy5cbiAgICAvL1xuICAgIC8vIExlYXJuIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTQzNjVcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD04NTM4XG4gICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IE51bWJlci5OYU47XG4gICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IE51bWJlci5OYU47XG4gICAgdGhpcy50cmVlQmFzZUR1cmF0aW9uID0gTnVtYmVyLk5hTjsgLy8gSXQncyBva2F5IHRvIHJlcGxhY2UgdGhlIGluaXRpYWwgZG91YmxlcyB3aXRoIHNtaXMgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXG4gICAgLy8gVGhpcyB3b24ndCB0cmlnZ2VyIHRoZSBwZXJmb3JtYW5jZSBjbGlmZiBtZW50aW9uZWQgYWJvdmUsXG4gICAgLy8gYW5kIGl0IHNpbXBsaWZpZXMgb3RoZXIgcHJvZmlsZXIgY29kZSAoaW5jbHVkaW5nIERldlRvb2xzKS5cblxuICAgIHRoaXMuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgIHRoaXMuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICB9XG5cbiAge1xuICAgIC8vIFRoaXMgaXNuJ3QgZGlyZWN0bHkgdXNlZCBidXQgaXMgaGFuZHkgZm9yIGRlYnVnZ2luZyBpbnRlcm5hbHM6XG4gICAgdGhpcy5fZGVidWdJRCA9IGRlYnVnQ291bnRlcisrO1xuICAgIHRoaXMuX2RlYnVnU291cmNlID0gbnVsbDtcbiAgICB0aGlzLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgICB0aGlzLl9kZWJ1Z05lZWRzUmVtb3VudCA9IGZhbHNlO1xuICAgIHRoaXMuX2RlYnVnSG9va1R5cGVzID0gbnVsbDtcblxuICAgIGlmICghaGFzQmFkTWFwUG9seWZpbGwgJiYgdHlwZW9mIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHRoaXMpO1xuICAgIH1cbiAgfVxufSAvLyBUaGlzIGlzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24sIHJhdGhlciB0aGFuIGEgUE9KTyBjb25zdHJ1Y3Rvciwgc3RpbGxcbi8vIHBsZWFzZSBlbnN1cmUgd2UgZG8gdGhlIGZvbGxvd2luZzpcbi8vIDEpIE5vYm9keSBzaG91bGQgYWRkIGFueSBpbnN0YW5jZSBtZXRob2RzIG9uIHRoaXMuIEluc3RhbmNlIG1ldGhvZHMgY2FuIGJlXG4vLyAgICBtb3JlIGRpZmZpY3VsdCB0byBwcmVkaWN0IHdoZW4gdGhleSBnZXQgb3B0aW1pemVkIGFuZCB0aGV5IGFyZSBhbG1vc3Rcbi8vICAgIG5ldmVyIGlubGluZWQgcHJvcGVybHkgaW4gc3RhdGljIGNvbXBpbGVycy5cbi8vIDIpIE5vYm9keSBzaG91bGQgcmVseSBvbiBgaW5zdGFuY2VvZiBGaWJlcmAgZm9yIHR5cGUgdGVzdGluZy4gV2Ugc2hvdWxkXG4vLyAgICBhbHdheXMga25vdyB3aGVuIGl0IGlzIGEgZmliZXIuXG4vLyAzKSBXZSBtaWdodCB3YW50IHRvIGV4cGVyaW1lbnQgd2l0aCB1c2luZyBudW1lcmljIGtleXMgc2luY2UgdGhleSBhcmUgZWFzaWVyXG4vLyAgICB0byBvcHRpbWl6ZSBpbiBhIG5vbi1KSVQgZW52aXJvbm1lbnQuXG4vLyA0KSBXZSBjYW4gZWFzaWx5IGdvIGZyb20gYSBjb25zdHJ1Y3RvciB0byBhIGNyZWF0ZUZpYmVyIG9iamVjdCBsaXRlcmFsIGlmIHRoYXRcbi8vICAgIGlzIGZhc3Rlci5cbi8vIDUpIEl0IHNob3VsZCBiZSBlYXN5IHRvIHBvcnQgdGhpcyB0byBhIEMgc3RydWN0IGFuZCBrZWVwIGEgQyBpbXBsZW1lbnRhdGlvblxuLy8gICAgY29tcGF0aWJsZS5cblxuXG52YXIgY3JlYXRlRmliZXIgPSBmdW5jdGlvbiAodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAvLyAkRmxvd0ZpeE1lOiB0aGUgc2hhcGVzIGFyZSBleGFjdCBoZXJlIGJ1dCBGbG93IGRvZXNuJ3QgbGlrZSBjb25zdHJ1Y3RvcnNcbiAgcmV0dXJuIG5ldyBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG59O1xuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QkMShDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZUZ1bmN0aW9uQ29tcG9uZW50KHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmICFzaG91bGRDb25zdHJ1Y3QkMSh0eXBlKSAmJiB0eXBlLmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUxhenlDb21wb25lbnRUYWcoQ29tcG9uZW50KSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHNob3VsZENvbnN0cnVjdCQxKENvbXBvbmVudCkgPyBDbGFzc0NvbXBvbmVudCA6IEZ1bmN0aW9uQ29tcG9uZW50O1xuICB9IGVsc2UgaWYgKENvbXBvbmVudCAhPT0gdW5kZWZpbmVkICYmIENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IENvbXBvbmVudC4kJHR5cGVvZjtcblxuICAgIGlmICgkJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSkge1xuICAgICAgcmV0dXJuIEZvcndhcmRSZWY7XG4gICAgfVxuXG4gICAgaWYgKCQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgIHJldHVybiBNZW1vQ29tcG9uZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBJbmRldGVybWluYXRlQ29tcG9uZW50O1xufSAvLyBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGFsdGVybmF0ZSBmaWJlciB0byBkbyB3b3JrIG9uLlxuXG5mdW5jdGlvbiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBwZW5kaW5nUHJvcHMpIHtcbiAgdmFyIHdvcmtJblByb2dyZXNzID0gY3VycmVudC5hbHRlcm5hdGU7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzID09PSBudWxsKSB7XG4gICAgLy8gV2UgdXNlIGEgZG91YmxlIGJ1ZmZlcmluZyBwb29saW5nIHRlY2huaXF1ZSBiZWNhdXNlIHdlIGtub3cgdGhhdCB3ZSdsbFxuICAgIC8vIG9ubHkgZXZlciBuZWVkIGF0IG1vc3QgdHdvIHZlcnNpb25zIG9mIGEgdHJlZS4gV2UgcG9vbCB0aGUgXCJvdGhlclwiIHVudXNlZFxuICAgIC8vIG5vZGUgdGhhdCB3ZSdyZSBmcmVlIHRvIHJldXNlLiBUaGlzIGlzIGxhemlseSBjcmVhdGVkIHRvIGF2b2lkIGFsbG9jYXRpbmdcbiAgICAvLyBleHRyYSBvYmplY3RzIGZvciB0aGluZ3MgdGhhdCBhcmUgbmV2ZXIgdXBkYXRlZC4gSXQgYWxzbyBhbGxvdyB1cyB0b1xuICAgIC8vIHJlY2xhaW0gdGhlIGV4dHJhIG1lbW9yeSBpZiBuZWVkZWQuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVGaWJlcihjdXJyZW50LnRhZywgcGVuZGluZ1Byb3BzLCBjdXJyZW50LmtleSwgY3VycmVudC5tb2RlKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9IGN1cnJlbnQuZWxlbWVudFR5cGU7XG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50LnN0YXRlTm9kZTtcblxuICAgIHtcbiAgICAgIC8vIERFVi1vbmx5IGZpZWxkc1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSUQgPSBjdXJyZW50Ll9kZWJ1Z0lEO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnU291cmNlID0gY3VycmVudC5fZGVidWdTb3VyY2U7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcztcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBjdXJyZW50O1xuICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gd29ya0luUHJvZ3Jlc3M7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzOyAvLyBOZWVkZWQgYmVjYXVzZSBCbG9ja3Mgc3RvcmUgZGF0YSBvbiB0eXBlLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTsgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGFsdGVybmF0ZS5cbiAgICAvLyBSZXNldCB0aGUgZWZmZWN0IHRhZy5cblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gTm9GbGFnczsgLy8gVGhlIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICAgIHdvcmtJblByb2dyZXNzLm5leHRFZmZlY3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcblxuICAgIHtcbiAgICAgIC8vIFdlIGludGVudGlvbmFsbHkgcmVzZXQsIHJhdGhlciB0aGFuIGNvcHksIGFjdHVhbER1cmF0aW9uICYgYWN0dWFsU3RhcnRUaW1lLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aW1lIGZyb20gZW5kbGVzc2x5IGFjY3VtdWxhdGluZyBpbiBuZXcgY29tbWl0cy5cbiAgICAgIC8vIFRoaXMgaGFzIHRoZSBkb3duc2lkZSBvZiByZXNldHRpbmcgdmFsdWVzIGZvciBkaWZmZXJlbnQgcHJpb3JpdHkgcmVuZGVycyxcbiAgICAgIC8vIEJ1dCB3b3JrcyBmb3IgeWllbGRpbmcgKHRoZSBjb21tb24gY2FzZSkgYW5kIHNob3VsZCBzdXBwb3J0IHJlc3VtaW5nLlxuICAgICAgd29ya0luUHJvZ3Jlc3MuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcztcbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gQ2xvbmUgdGhlIGRlcGVuZGVuY2llcyBvYmplY3QuIFRoaXMgaXMgbXV0YXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgc29cbiAgLy8gaXQgY2Fubm90IGJlIHNoYXJlZCB3aXRoIHRoZSBjdXJyZW50IGZpYmVyLlxuXG4gIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMgPT09IG51bGwgPyBudWxsIDoge1xuICAgIGxhbmVzOiBjdXJyZW50RGVwZW5kZW5jaWVzLmxhbmVzLFxuICAgIGZpcnN0Q29udGV4dDogY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHRcbiAgfTsgLy8gVGhlc2Ugd2lsbCBiZSBvdmVycmlkZGVuIGR1cmluZyB0aGUgcGFyZW50J3MgcmVjb25jaWxpYXRpb25cblxuICB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gY3VycmVudC5zaWJsaW5nO1xuICB3b3JrSW5Qcm9ncmVzcy5pbmRleCA9IGN1cnJlbnQuaW5kZXg7XG4gIHdvcmtJblByb2dyZXNzLnJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gIH1cblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ID0gY3VycmVudC5fZGVidWdOZWVkc1JlbW91bnQ7XG5cbiAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xufSAvLyBVc2VkIHRvIHJldXNlIGEgRmliZXIgZm9yIGEgc2Vjb25kIHBhc3MuXG5cbmZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3Mod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgcmVzZXRzIHRoZSBGaWJlciB0byB3aGF0IGNyZWF0ZUZpYmVyIG9yIGNyZWF0ZVdvcmtJblByb2dyZXNzIHdvdWxkXG4gIC8vIGhhdmUgc2V0IHRoZSB2YWx1ZXMgdG8gYmVmb3JlIGR1cmluZyB0aGUgZmlyc3QgcGFzcy4gSWRlYWxseSB0aGlzIHdvdWxkbid0XG4gIC8vIGJlIG5lY2Vzc2FyeSBidXQgdW5mb3J0dW5hdGVseSBtYW55IGNvZGUgcGF0aHMgcmVhZHMgZnJvbSB0aGUgd29ya0luUHJvZ3Jlc3NcbiAgLy8gd2hlbiB0aGV5IHNob3VsZCBiZSByZWFkaW5nIGZyb20gY3VycmVudCBhbmQgd3JpdGluZyB0byB3b3JrSW5Qcm9ncmVzcy5cbiAgLy8gV2UgYXNzdW1lIHBlbmRpbmdQcm9wcywgaW5kZXgsIGtleSwgcmVmLCByZXR1cm4gYXJlIHN0aWxsIHVudG91Y2hlZCB0b1xuICAvLyBhdm9pZCBkb2luZyBhbm90aGVyIHJlY29uY2lsaWF0aW9uLlxuICAvLyBSZXNldCB0aGUgZWZmZWN0IHRhZyBidXQga2VlcCBhbnkgUGxhY2VtZW50IHRhZ3MsIHNpbmNlIHRoYXQncyBzb21ldGhpbmdcbiAgLy8gdGhhdCBjaGlsZCBmaWJlciBpcyBzZXR0aW5nLCBub3QgdGhlIHJlY29uY2lsaWF0aW9uLlxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSBQbGFjZW1lbnQ7IC8vIFRoZSBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgd29ya0luUHJvZ3Jlc3MubmV4dEVmZmVjdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG4gIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gUmVzZXQgdG8gY3JlYXRlRmliZXIncyBpbml0aWFsIHZhbHVlcy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgcmVzZXQgdGhlIGFjdHVhbFRpbWUgY291bnRzLiBJdCdzIHVzZWZ1bCB0byBhY2N1bXVsYXRlXG4gICAgICAvLyBhY3R1YWwgdGltZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyIHBhc3Nlcy5cbiAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFJlc2V0IHRvIHRoZSBjbG9uZWQgdmFsdWVzIHRoYXQgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGQndmUuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7IC8vIE5lZWRlZCBiZWNhdXNlIEJsb2NrcyBzdG9yZSBkYXRhIG9uIHR5cGUuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAgIC8vIGl0IGNhbm5vdCBiZSBzaGFyZWQgd2l0aCB0aGUgY3VycmVudCBmaWJlci5cblxuICAgIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgICBsYW5lczogY3VycmVudERlcGVuZGVuY2llcy5sYW5lcyxcbiAgICAgIGZpcnN0Q29udGV4dDogY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHRcbiAgICB9O1xuXG4gICAge1xuICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgcmVzZXQgdGhlIGFjdHVhbFRpbWUgY291bnRzLiBJdCdzIHVzZWZ1bCB0byBhY2N1bXVsYXRlXG4gICAgICAvLyBhY3R1YWwgdGltZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyIHBhc3Nlcy5cbiAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUhvc3RSb290RmliZXIodGFnKSB7XG4gIHZhciBtb2RlO1xuXG4gIGlmICh0YWcgPT09IENvbmN1cnJlbnRSb290KSB7XG4gICAgbW9kZSA9IENvbmN1cnJlbnRNb2RlIHwgQmxvY2tpbmdNb2RlIHwgU3RyaWN0TW9kZTtcbiAgfSBlbHNlIGlmICh0YWcgPT09IEJsb2NraW5nUm9vdCkge1xuICAgIG1vZGUgPSBCbG9ja2luZ01vZGUgfCBTdHJpY3RNb2RlO1xuICB9IGVsc2Uge1xuICAgIG1vZGUgPSBOb01vZGU7XG4gIH1cblxuICBpZiAoIGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgLy8gQWx3YXlzIGNvbGxlY3QgcHJvZmlsZSB0aW1pbmdzIHdoZW4gRGV2VG9vbHMgYXJlIHByZXNlbnQuXG4gICAgLy8gVGhpcyBlbmFibGVzIERldlRvb2xzIHRvIHN0YXJ0IGNhcHR1cmluZyB0aW1pbmcgYXQgYW55IHBvaW50XHUyMDEzXG4gICAgLy8gV2l0aG91dCBzb21lIG5vZGVzIGluIHRoZSB0cmVlIGhhdmluZyBlbXB0eSBiYXNlIHRpbWVzLlxuICAgIG1vZGUgfD0gUHJvZmlsZU1vZGU7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlRmliZXIoSG9zdFJvb3QsIG51bGwsIG51bGwsIG1vZGUpO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHR5cGUsIC8vIFJlYWN0JEVsZW1lbnRUeXBlXG5rZXksIHBlbmRpbmdQcm9wcywgb3duZXIsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBmaWJlclRhZyA9IEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7IC8vIFRoZSByZXNvbHZlZCB0eXBlIGlzIHNldCBpZiB3ZSBrbm93IHdoYXQgdGhlIGZpbmFsIHR5cGUgd2lsbCBiZS4gSS5lLiBpdCdzIG5vdCBsYXp5LlxuXG4gIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChzaG91bGRDb25zdHJ1Y3QkMSh0eXBlKSkge1xuICAgICAgZmliZXJUYWcgPSBDbGFzc0NvbXBvbmVudDtcblxuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgZmliZXJUYWcgPSBIb3N0Q29tcG9uZW50O1xuICB9IGVsc2Uge1xuICAgIGdldFRhZzogc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChwZW5kaW5nUHJvcHMuY2hpbGRyZW4sIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFOlxuICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgIG1vZGUgfD0gRGVidWdUcmFjaW5nTW9kZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgZmliZXJUYWcgPSBNb2RlO1xuICAgICAgICBtb2RlIHw9IFN0cmljdE1vZGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21Qcm9maWxlcihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZShwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlTGlzdChwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX09GRlNDUkVFTl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tTGVnYWN5SGlkZGVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU0NPUEVfVFlQRTpcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBDb250ZXh0UHJvdmlkZXI7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBjb25zdW1lclxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQ29udGV4dENvbnN1bWVyO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBGb3J3YXJkUmVmO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBNZW1vQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IExhenlDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQmxvY2s7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBcIiArICduYW1lZCBpbXBvcnRzLic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvd25lck5hbWUgPSBvd25lciA/IGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSkgOiBudWxsO1xuXG4gICAgICAgICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkOiBleHBlY3RlZCBhIHN0cmluZyAoZm9yIGJ1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgY29tcG9uZW50cykgYnV0IGdvdDogXCIgKyAodHlwZSA9PSBudWxsID8gdHlwZSA6IHR5cGVvZiB0eXBlKSArIFwiLlwiICsgaW5mbyApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKGZpYmVyVGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gdHlwZTtcbiAgZmliZXIudHlwZSA9IHJlc29sdmVkVHlwZTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcblxuICB7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBvd25lcjtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIG93bmVyID0gbnVsbDtcblxuICB7XG4gICAgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgfVxuXG4gIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciBwZW5kaW5nUHJvcHMgPSBlbGVtZW50LnByb3BzO1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHModHlwZSwga2V5LCBwZW5kaW5nUHJvcHMsIG93bmVyLCBtb2RlLCBsYW5lcyk7XG5cbiAge1xuICAgIGZpYmVyLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZWxlbWVudHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoRnJhZ21lbnQsIGVsZW1lbnRzLCBrZXksIG1vZGUpO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBwZW5kaW5nUHJvcHMuaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcignUHJvZmlsZXIgbXVzdCBzcGVjaWZ5IGFuIFwiaWRcIiBhcyBhIHByb3AnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihQcm9maWxlciwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUgfCBQcm9maWxlTW9kZSk7IC8vIFRPRE86IFRoZSBQcm9maWxlciBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIGZpYmVyLnR5cGUgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuXG4gIHtcbiAgICBmaWJlci5zdGF0ZU5vZGUgPSB7XG4gICAgICBlZmZlY3REdXJhdGlvbjogMCxcbiAgICAgIHBhc3NpdmVFZmZlY3REdXJhdGlvbjogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihTdXNwZW5zZUNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpOyAvLyBUT0RPOiBUaGUgU3VzcGVuc2VDb21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAgZmliZXIudHlwZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihTdXNwZW5zZUxpc3RDb21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcblxuICB7XG4gICAgLy8gVE9ETzogVGhlIFN1c3BlbnNlTGlzdENvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAgIC8vIGluc3RlYWQuXG4gICAgZmliZXIudHlwZSA9IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKE9mZnNjcmVlbkNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpOyAvLyBUT0RPOiBUaGUgT2Zmc2NyZWVuQ29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAvLyBpbnN0ZWFkLlxuXG4gIHtcbiAgICBmaWJlci50eXBlID0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX09GRlNDUkVFTl9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21MZWdhY3lIaWRkZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKExlZ2FjeUhpZGRlbkNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpOyAvLyBUT0RPOiBUaGUgTGVnYWN5SGlkZGVuIGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAvLyBpbnN0ZWFkLlxuXG4gIHtcbiAgICBmaWJlci50eXBlID0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVRleHQoY29udGVudCwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFRleHQsIGNvbnRlbnQsIG51bGwsIG1vZGUpO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Ib3N0SW5zdGFuY2VGb3JEZWxldGlvbigpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdENvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTsgLy8gVE9ETzogVGhlc2Ugc2hvdWxkIG5vdCBuZWVkIGEgdHlwZS5cblxuICBmaWJlci5lbGVtZW50VHlwZSA9ICdERUxFVEVEJztcbiAgZmliZXIudHlwZSA9ICdERUxFVEVEJztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIHBlbmRpbmdQcm9wcyA9IHBvcnRhbC5jaGlsZHJlbiAhPT0gbnVsbCA/IHBvcnRhbC5jaGlsZHJlbiA6IFtdO1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0UG9ydGFsLCBwZW5kaW5nUHJvcHMsIHBvcnRhbC5rZXksIG1vZGUpO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICBmaWJlci5zdGF0ZU5vZGUgPSB7XG4gICAgY29udGFpbmVySW5mbzogcG9ydGFsLmNvbnRhaW5lckluZm8sXG4gICAgcGVuZGluZ0NoaWxkcmVuOiBudWxsLFxuICAgIC8vIFVzZWQgYnkgcGVyc2lzdGVudCB1cGRhdGVzXG4gICAgaW1wbGVtZW50YXRpb246IHBvcnRhbC5pbXBsZW1lbnRhdGlvblxuICB9O1xuICByZXR1cm4gZmliZXI7XG59IC8vIFVzZWQgZm9yIHN0YXNoaW5nIFdJUCBwcm9wZXJ0aWVzIHRvIHJlcGxheSBmYWlsZWQgd29yayBpbiBERVYuXG5cbmZ1bmN0aW9uIGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKHRhcmdldCwgc291cmNlKSB7XG4gIGlmICh0YXJnZXQgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIEZpYmVyJ3MgaW5pdGlhbCBwcm9wZXJ0aWVzIHdpbGwgYWx3YXlzIGJlIG92ZXJ3cml0dGVuLlxuICAgIC8vIFdlIG9ubHkgdXNlIGEgRmliZXIgdG8gZW5zdXJlIHRoZSBzYW1lIGhpZGRlbiBjbGFzcyBzbyBERVYgaXNuJ3Qgc2xvdy5cbiAgICB0YXJnZXQgPSBjcmVhdGVGaWJlcihJbmRldGVybWluYXRlQ29tcG9uZW50LCBudWxsLCBudWxsLCBOb01vZGUpO1xuICB9IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSB3cml0dGVuIGFzIGEgbGlzdCBvZiBhbGwgcHJvcGVydGllcy5cbiAgLy8gV2UgdHJpZWQgdG8gdXNlIE9iamVjdC5hc3NpZ24oKSBpbnN0ZWFkIGJ1dCB0aGlzIGlzIGNhbGxlZCBpblxuICAvLyB0aGUgaG90dGVzdCBwYXRoLCBhbmQgT2JqZWN0LmFzc2lnbigpIHdhcyB0b28gc2xvdzpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjUwMlxuICAvLyBUaGlzIGNvZGUgaXMgREVWLW9ubHkgc28gc2l6ZSBpcyBub3QgYSBjb25jZXJuLlxuXG5cbiAgdGFyZ2V0LnRhZyA9IHNvdXJjZS50YWc7XG4gIHRhcmdldC5rZXkgPSBzb3VyY2Uua2V5O1xuICB0YXJnZXQuZWxlbWVudFR5cGUgPSBzb3VyY2UuZWxlbWVudFR5cGU7XG4gIHRhcmdldC50eXBlID0gc291cmNlLnR5cGU7XG4gIHRhcmdldC5zdGF0ZU5vZGUgPSBzb3VyY2Uuc3RhdGVOb2RlO1xuICB0YXJnZXQucmV0dXJuID0gc291cmNlLnJldHVybjtcbiAgdGFyZ2V0LmNoaWxkID0gc291cmNlLmNoaWxkO1xuICB0YXJnZXQuc2libGluZyA9IHNvdXJjZS5zaWJsaW5nO1xuICB0YXJnZXQuaW5kZXggPSBzb3VyY2UuaW5kZXg7XG4gIHRhcmdldC5yZWYgPSBzb3VyY2UucmVmO1xuICB0YXJnZXQucGVuZGluZ1Byb3BzID0gc291cmNlLnBlbmRpbmdQcm9wcztcbiAgdGFyZ2V0Lm1lbW9pemVkUHJvcHMgPSBzb3VyY2UubWVtb2l6ZWRQcm9wcztcbiAgdGFyZ2V0LnVwZGF0ZVF1ZXVlID0gc291cmNlLnVwZGF0ZVF1ZXVlO1xuICB0YXJnZXQubWVtb2l6ZWRTdGF0ZSA9IHNvdXJjZS5tZW1vaXplZFN0YXRlO1xuICB0YXJnZXQuZGVwZW5kZW5jaWVzID0gc291cmNlLmRlcGVuZGVuY2llcztcbiAgdGFyZ2V0Lm1vZGUgPSBzb3VyY2UubW9kZTtcbiAgdGFyZ2V0LmZsYWdzID0gc291cmNlLmZsYWdzO1xuICB0YXJnZXQubmV4dEVmZmVjdCA9IHNvdXJjZS5uZXh0RWZmZWN0O1xuICB0YXJnZXQuZmlyc3RFZmZlY3QgPSBzb3VyY2UuZmlyc3RFZmZlY3Q7XG4gIHRhcmdldC5sYXN0RWZmZWN0ID0gc291cmNlLmxhc3RFZmZlY3Q7XG4gIHRhcmdldC5sYW5lcyA9IHNvdXJjZS5sYW5lcztcbiAgdGFyZ2V0LmNoaWxkTGFuZXMgPSBzb3VyY2UuY2hpbGRMYW5lcztcbiAgdGFyZ2V0LmFsdGVybmF0ZSA9IHNvdXJjZS5hbHRlcm5hdGU7XG5cbiAge1xuICAgIHRhcmdldC5hY3R1YWxEdXJhdGlvbiA9IHNvdXJjZS5hY3R1YWxEdXJhdGlvbjtcbiAgICB0YXJnZXQuYWN0dWFsU3RhcnRUaW1lID0gc291cmNlLmFjdHVhbFN0YXJ0VGltZTtcbiAgICB0YXJnZXQuc2VsZkJhc2VEdXJhdGlvbiA9IHNvdXJjZS5zZWxmQmFzZUR1cmF0aW9uO1xuICAgIHRhcmdldC50cmVlQmFzZUR1cmF0aW9uID0gc291cmNlLnRyZWVCYXNlRHVyYXRpb247XG4gIH1cblxuICB0YXJnZXQuX2RlYnVnSUQgPSBzb3VyY2UuX2RlYnVnSUQ7XG4gIHRhcmdldC5fZGVidWdTb3VyY2UgPSBzb3VyY2UuX2RlYnVnU291cmNlO1xuICB0YXJnZXQuX2RlYnVnT3duZXIgPSBzb3VyY2UuX2RlYnVnT3duZXI7XG4gIHRhcmdldC5fZGVidWdOZWVkc1JlbW91bnQgPSBzb3VyY2UuX2RlYnVnTmVlZHNSZW1vdW50O1xuICB0YXJnZXQuX2RlYnVnSG9va1R5cGVzID0gc291cmNlLl9kZWJ1Z0hvb2tUeXBlcztcbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gRmliZXJSb290Tm9kZShjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpIHtcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMuY29udGFpbmVySW5mbyA9IGNvbnRhaW5lckluZm87XG4gIHRoaXMucGVuZGluZ0NoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5jdXJyZW50ID0gbnVsbDtcbiAgdGhpcy5waW5nQ2FjaGUgPSBudWxsO1xuICB0aGlzLmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHRoaXMudGltZW91dEhhbmRsZSA9IG5vVGltZW91dDtcbiAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IG51bGw7XG4gIHRoaXMuaHlkcmF0ZSA9IGh5ZHJhdGU7XG4gIHRoaXMuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgdGhpcy5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gIHRoaXMuZXZlbnRUaW1lcyA9IGNyZWF0ZUxhbmVNYXAoTm9MYW5lcyk7XG4gIHRoaXMuZXhwaXJhdGlvblRpbWVzID0gY3JlYXRlTGFuZU1hcChOb1RpbWVzdGFtcCk7XG4gIHRoaXMucGVuZGluZ0xhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5zdXNwZW5kZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMucGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmV4cGlyZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMubXV0YWJsZVJlYWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZW50YW5nbGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmVudGFuZ2xlbWVudHMgPSBjcmVhdGVMYW5lTWFwKE5vTGFuZXMpO1xuXG4gIHtcbiAgICB0aGlzLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPSBudWxsO1xuICB9XG5cbiAge1xuICAgIHRoaXMuaW50ZXJhY3Rpb25UaHJlYWRJRCA9IHRyYWNpbmcudW5zdGFibGVfZ2V0VGhyZWFkSUQoKTtcbiAgICB0aGlzLm1lbW9pemVkSW50ZXJhY3Rpb25zID0gbmV3IFNldCgpO1xuICAgIHRoaXMucGVuZGluZ0ludGVyYWN0aW9uTWFwID0gbmV3IE1hcCgpO1xuICB9XG5cbiAge1xuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEJsb2NraW5nUm9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVCbG9ja2luZ1Jvb3QoKSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIENvbmN1cnJlbnRSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZVJvb3QoKSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIExlZ2FjeVJvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlTGVnYWN5Um9vdCgpJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGh5ZHJhdGlvbkNhbGxiYWNrcykge1xuICB2YXIgcm9vdCA9IG5ldyBGaWJlclJvb3ROb2RlKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSk7XG4gIC8vIHN0YXRlTm9kZSBpcyBhbnkuXG5cblxuICB2YXIgdW5pbml0aWFsaXplZEZpYmVyID0gY3JlYXRlSG9zdFJvb3RGaWJlcih0YWcpO1xuICByb290LmN1cnJlbnQgPSB1bmluaXRpYWxpemVkRmliZXI7XG4gIHVuaW5pdGlhbGl6ZWRGaWJlci5zdGF0ZU5vZGUgPSByb290O1xuICBpbml0aWFsaXplVXBkYXRlUXVldWUodW5pbml0aWFsaXplZEZpYmVyKTtcbiAgcmV0dXJuIHJvb3Q7XG59XG5cbi8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2ZXJzaW9uIHVzZWQgZm9yIHNlcnZlciByZW5kZXJpbmcgbWF0Y2hlcyB0aGUgb25lXG4vLyB0aGF0IGlzIGV2ZW50dWFsbHkgcmVhZCBkdXJpbmcgaHlkcmF0aW9uLlxuLy8gSWYgdGhleSBkb24ndCBtYXRjaCB0aGVyZSdzIGEgcG90ZW50aWFsIHRlYXIgYW5kIGEgZnVsbCBkZW9wdCByZW5kZXIgaXMgcmVxdWlyZWQuXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTXV0YWJsZVNvdXJjZUZvckh5ZHJhdGlvbihyb290LCBtdXRhYmxlU291cmNlKSB7XG4gIHZhciBnZXRWZXJzaW9uID0gbXV0YWJsZVNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKG11dGFibGVTb3VyY2UuX3NvdXJjZSk7IC8vIFRPRE8gQ2xlYXIgdGhpcyBkYXRhIG9uY2UgYWxsIHBlbmRpbmcgaHlkcmF0aW9uIHdvcmsgaXMgZmluaXNoZWQuXG4gIC8vIFJldGFpbmluZyBpdCBmb3JldmVyIG1heSBpbnRlcmZlcmUgd2l0aCBHQy5cblxuICBpZiAocm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID09IG51bGwpIHtcbiAgICByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPSBbbXV0YWJsZVNvdXJjZSwgdmVyc2lvbl07XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLnB1c2gobXV0YWJsZVNvdXJjZSwgdmVyc2lvbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXJJbmZvLCAvLyBUT0RPOiBmaWd1cmUgb3V0IHRoZSBBUEkgZm9yIGNyb3NzLXJlbmRlcmVyIGltcGxlbWVudGF0aW9uLlxuaW1wbGVtZW50YXRpb24pIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcbiAgcmV0dXJuIHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvdyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgUG9ydGFsXG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BPUlRBTF9UWVBFLFxuICAgIGtleToga2V5ID09IG51bGwgPyBudWxsIDogJycgKyBrZXksXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lckluZm86IGNvbnRhaW5lckluZm8sXG4gICAgaW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uXG4gIH07XG59XG5cbnZhciBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzO1xudmFyIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlO1xuXG57XG4gIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGUgPSB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KSB7XG4gIGlmICghcGFyZW50Q29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfVxuXG4gIHZhciBmaWJlciA9IGdldChwYXJlbnRDb21wb25lbnQpO1xuICB2YXIgcGFyZW50Q29udGV4dCA9IGZpbmRDdXJyZW50VW5tYXNrZWRDb250ZXh0KGZpYmVyKTtcblxuICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgIHZhciBDb21wb25lbnQgPSBmaWJlci50eXBlO1xuXG4gICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCBDb21wb25lbnQsIHBhcmVudENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnRDb250ZXh0O1xufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlV2l0aFdhcm5pbmcoY29tcG9uZW50LCBtZXRob2ROYW1lKSB7XG4gIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoY29tcG9uZW50KTtcblxuICAgIGlmIChmaWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkFyZ3VtZW50IGFwcGVhcnMgdG8gbm90IGJlIGEgUmVhY3RDb21wb25lbnQuIEtleXM6IFwiICsgT2JqZWN0LmtleXMoY29tcG9uZW50KSApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG5cbiAgICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaG9zdEZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoaG9zdEZpYmVyKTtcblxuICAgICAgICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgZXJyb3IoJyVzIGlzIGRlcHJlY2F0ZWQgaW4gU3RyaWN0TW9kZS4gJyArICclcyB3YXMgcGFzc2VkIGFuIGluc3RhbmNlIG9mICVzIHdoaWNoIGlzIGluc2lkZSBTdHJpY3RNb2RlLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1maW5kLW5vZGUnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJyVzIGlzIGRlcHJlY2F0ZWQgaW4gU3RyaWN0TW9kZS4gJyArICclcyB3YXMgcGFzc2VkIGFuIGluc3RhbmNlIG9mICVzIHdoaWNoIHJlbmRlcnMgU3RyaWN0TW9kZSBjaGlsZHJlbi4gJyArICdJbnN0ZWFkLCBhZGQgYSByZWYgZGlyZWN0bHkgdG8gdGhlIGVsZW1lbnQgeW91IHdhbnQgdG8gcmVmZXJlbmNlLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtZmluZC1ub2RlJywgbWV0aG9kTmFtZSwgbWV0aG9kTmFtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIC8vIElkZWFsbHkgdGhpcyBzaG91bGQgcmVzZXQgdG8gcHJldmlvdXMgYnV0IHRoaXMgc2hvdWxkbid0IGJlIGNhbGxlZCBpblxuICAgICAgICAgIC8vIHJlbmRlciBhbmQgdGhlcmUncyBhbm90aGVyIHdhcm5pbmcgZm9yIHRoYXQgYW55d2F5LlxuICAgICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgICBzZXRDdXJyZW50RmliZXIocHJldmlvdXNGaWJlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSwgaHlkcmF0aW9uQ2FsbGJhY2tzKSB7XG4gIHJldHVybiBjcmVhdGVGaWJlclJvb3QoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCBjb250YWluZXIsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spIHtcbiAge1xuICAgIG9uU2NoZWR1bGVSb290KGNvbnRhaW5lciwgZWxlbWVudCk7XG4gIH1cblxuICB2YXIgY3VycmVudCQxID0gY29udGFpbmVyLmN1cnJlbnQ7XG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG5cbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZVbm1vY2tlZFNjaGVkdWxlcihjdXJyZW50JDEpO1xuICAgICAgd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGN1cnJlbnQkMSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShjdXJyZW50JDEpO1xuXG4gIHZhciBjb250ZXh0ID0gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KTtcblxuICBpZiAoY29udGFpbmVyLmNvbnRleHQgPT09IG51bGwpIHtcbiAgICBjb250YWluZXIuY29udGV4dCA9IGNvbnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLnBlbmRpbmdDb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIHtcbiAgICBpZiAoaXNSZW5kZXJpbmcgJiYgY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcykge1xuICAgICAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IHRydWU7XG5cbiAgICAgIGVycm9yKCdSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZTsgJyArICd0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tIHJlbmRlciBpcyBub3QgYWxsb3dlZC4gJyArICdJZiBuZWNlc3NhcnksIHRyaWdnZXIgbmVzdGVkIHVwZGF0ZXMgaW4gY29tcG9uZW50RGlkVXBkYXRlLlxcblxcbicgKyAnQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgJXMuJywgZ2V0Q29tcG9uZW50TmFtZShjdXJyZW50LnR5cGUpIHx8ICdVbmtub3duJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB1cGRhdGUucGF5bG9hZCA9IHtcbiAgICBlbGVtZW50OiBlbGVtZW50XG4gIH07XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaztcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuXG4gIGVucXVldWVVcGRhdGUoY3VycmVudCQxLCB1cGRhdGUpO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoY3VycmVudCQxLCBsYW5lLCBldmVudFRpbWUpO1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGdldFB1YmxpY1Jvb3RJbnN0YW5jZShjb250YWluZXIpIHtcbiAgdmFyIGNvbnRhaW5lckZpYmVyID0gY29udGFpbmVyLmN1cnJlbnQ7XG5cbiAgaWYgKCFjb250YWluZXJGaWJlci5jaGlsZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoIChjb250YWluZXJGaWJlci5jaGlsZC50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZ2V0UHVibGljSW5zdGFuY2UoY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsICYmIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgIHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lID0gaGlnaGVyUHJpb3JpdHlMYW5lKHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lLCByZXRyeUxhbmUpO1xuICB9XG59IC8vIEluY3JlYXNlcyB0aGUgcHJpb3JpdHkgb2YgdGhlbm5hYmxlcyB3aGVuIHRoZXkgcmVzb2x2ZSB3aXRoaW4gdGhpcyBib3VuZGFyeS5cblxuXG5mdW5jdGlvbiBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgcmV0cnlMYW5lKSB7XG4gIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUpIHtcbiAgICBtYXJrUmV0cnlMYW5lSW1wbChhbHRlcm5hdGUsIHJldHJ5TGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbiQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBhbmQgdGhleSBzaG91bGQgbm90IHN1c3BlbmQgb24gSS9PLFxuICAgIC8vIHNpbmNlIHlvdSBoYXZlIHRvIHdyYXAgYW55dGhpbmcgdGhhdCBtaWdodCBzdXNwZW5kIGluXG4gICAgLy8gU3VzcGVuc2UuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBhbmQgdGhleSBzaG91bGQgbm90IHN1c3BlbmQgb24gSS9PLFxuICAgIC8vIHNpbmNlIHlvdSBoYXZlIHRvIHdyYXAgYW55dGhpbmcgdGhhdCBtaWdodCBzdXNwZW5kIGluXG4gICAgLy8gU3VzcGVuc2UuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBvdGhlciB0aGFuIHN5bmNocm9ub3VzbHkgZmx1c2ggaXQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gcnVuV2l0aFByaW9yaXR5JDIocHJpb3JpdHksIGZuKSB7XG5cbiAgdHJ5IHtcbiAgICBzZXRDdXJyZW50VXBkYXRlTGFuZVByaW9yaXR5KHByaW9yaXR5KTtcbiAgICByZXR1cm4gZm4oKTtcbiAgfSBmaW5hbGx5IHtcbiAgfVxufVxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMoZmliZXIpIHtcbiAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyV2l0aE5vUG9ydGFscyhmaWJlcik7XG5cbiAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGhvc3RGaWJlci50YWcgPT09IEZ1bmRhbWVudGFsQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGUuaW5zdGFuY2U7XG4gIH1cblxuICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbn1cblxudmFyIHNob3VsZFN1c3BlbmRJbXBsID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZFN1c3BlbmQoZmliZXIpIHtcbiAgcmV0dXJuIHNob3VsZFN1c3BlbmRJbXBsKGZpYmVyKTtcbn1cbnZhciBvdmVycmlkZUhvb2tTdGF0ZSA9IG51bGw7XG52YXIgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHMgPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IG51bGw7XG52YXIgc2NoZWR1bGVVcGRhdGUgPSBudWxsO1xudmFyIHNldFN1c3BlbnNlSGFuZGxlciA9IG51bGw7XG5cbntcbiAgdmFyIGNvcHlXaXRoRGVsZXRlSW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGluZGV4KSB7XG4gICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdO1xuICAgIHZhciB1cGRhdGVkID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfYXNzaWduKHt9LCBvYmopO1xuXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gcGF0aC5sZW5ndGgpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICAgIHVwZGF0ZWQuc3BsaWNlKGtleSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtrZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9IC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhEZWxldGVJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEpO1xuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aERlbGV0ZSA9IGZ1bmN0aW9uIChvYmosIHBhdGgpIHtcbiAgICByZXR1cm4gY29weVdpdGhEZWxldGVJbXBsKG9iaiwgcGF0aCwgMCk7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoUmVuYW1lSW1wbCA9IGZ1bmN0aW9uIChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4KSB7XG4gICAgdmFyIG9sZEtleSA9IG9sZFBhdGhbaW5kZXhdO1xuICAgIHZhciB1cGRhdGVkID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfYXNzaWduKHt9LCBvYmopO1xuXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gb2xkUGF0aC5sZW5ndGgpIHtcbiAgICAgIHZhciBuZXdLZXkgPSBuZXdQYXRoW2luZGV4XTsgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgICB1cGRhdGVkW25ld0tleV0gPSB1cGRhdGVkW29sZEtleV07XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICAgIHVwZGF0ZWQuc3BsaWNlKG9sZEtleSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtvbGRLZXldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG4gICAgICB1cGRhdGVkW29sZEtleV0gPSBjb3B5V2l0aFJlbmFtZUltcGwoIC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICAgIG9ialtvbGRLZXldLCBvbGRQYXRoLCBuZXdQYXRoLCBpbmRleCArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFJlbmFtZSA9IGZ1bmN0aW9uIChvYmosIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICBpZiAob2xkUGF0aC5sZW5ndGggIT09IG5ld1BhdGgubGVuZ3RoKSB7XG4gICAgICB3YXJuKCdjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgb2YgdGhlIHNhbWUgbGVuZ3RoJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdQYXRoLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBpZiAob2xkUGF0aFtpXSAhPT0gbmV3UGF0aFtpXSkge1xuICAgICAgICAgIHdhcm4oJ2NvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyB0byBiZSB0aGUgc2FtZSBleGNlcHQgZm9yIHRoZSBkZWVwZXN0IGtleScpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvcHlXaXRoUmVuYW1lSW1wbChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIDApO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFNldEltcGwgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCBpbmRleCwgdmFsdWUpIHtcbiAgICBpZiAoaW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7IC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoU2V0SW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoU2V0ID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgdmFsdWUpIHtcbiAgICByZXR1cm4gY29weVdpdGhTZXRJbXBsKG9iaiwgcGF0aCwgMCwgdmFsdWUpO1xuICB9O1xuXG4gIHZhciBmaW5kSG9vayA9IGZ1bmN0aW9uIChmaWJlciwgaWQpIHtcbiAgICAvLyBGb3Igbm93LCB0aGUgXCJpZFwiIG9mIHN0YXRlZnVsIGhvb2tzIGlzIGp1c3QgdGhlIHN0YXRlZnVsIGhvb2sgaW5kZXguXG4gICAgLy8gVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUgd2l0aCBlLmcuIG5lc3RlZCBob29rcy5cbiAgICB2YXIgY3VycmVudEhvb2sgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gICAgd2hpbGUgKGN1cnJlbnRIb29rICE9PSBudWxsICYmIGlkID4gMCkge1xuICAgICAgY3VycmVudEhvb2sgPSBjdXJyZW50SG9vay5uZXh0O1xuICAgICAgaWQtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudEhvb2s7XG4gIH07IC8vIFN1cHBvcnQgRGV2VG9vbHMgZWRpdGFibGUgdmFsdWVzIGZvciB1c2VTdGF0ZSBhbmQgdXNlUmVkdWNlci5cblxuXG4gIG92ZXJyaWRlSG9va1N0YXRlID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgcGF0aCwgdmFsdWUpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhTZXQoaG9vay5tZW1vaXplZFN0YXRlLCBwYXRoLCB2YWx1ZSk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07XG5cbiAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgcGF0aCkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aERlbGV0ZShob29rLm1lbW9pemVkU3RhdGUsIHBhdGgpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhSZW5hbWUoaG9vay5tZW1vaXplZFN0YXRlLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTsgLy8gU3VwcG9ydCBEZXZUb29scyBwcm9wcyBmb3IgZnVuY3Rpb24gY29tcG9uZW50cywgZm9yd2FyZFJlZiwgbWVtbywgaG9zdCBjb21wb25lbnRzLCBldGMuXG5cblxuICBvdmVycmlkZVByb3BzID0gZnVuY3Rpb24gKGZpYmVyLCBwYXRoLCB2YWx1ZSkge1xuICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoU2V0KGZpYmVyLm1lbW9pemVkUHJvcHMsIHBhdGgsIHZhbHVlKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBwYXRoKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhEZWxldGUoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoUmVuYW1lKGZpYmVyLm1lbW9pemVkUHJvcHMsIG9sZFBhdGgsIG5ld1BhdGgpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgc2NoZWR1bGVVcGRhdGUgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgc2V0U3VzcGVuc2VIYW5kbGVyID0gZnVuY3Rpb24gKG5ld1Nob3VsZFN1c3BlbmRJbXBsKSB7XG4gICAgc2hvdWxkU3VzcGVuZEltcGwgPSBuZXdTaG91bGRTdXNwZW5kSW1wbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIoZmliZXIpIHtcbiAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcblxuICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGaW5kRmliZXJCeUhvc3RJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMoKSB7XG4gIHJldHVybiBjdXJyZW50O1xufVxuXG5mdW5jdGlvbiBpbmplY3RJbnRvRGV2VG9vbHMoZGV2VG9vbHNDb25maWcpIHtcbiAgdmFyIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlID0gZGV2VG9vbHNDb25maWcuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U7XG4gIHZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbiAgcmV0dXJuIGluamVjdEludGVybmFscyh7XG4gICAgYnVuZGxlVHlwZTogZGV2VG9vbHNDb25maWcuYnVuZGxlVHlwZSxcbiAgICB2ZXJzaW9uOiBkZXZUb29sc0NvbmZpZy52ZXJzaW9uLFxuICAgIHJlbmRlcmVyUGFja2FnZU5hbWU6IGRldlRvb2xzQ29uZmlnLnJlbmRlcmVyUGFja2FnZU5hbWUsXG4gICAgcmVuZGVyZXJDb25maWc6IGRldlRvb2xzQ29uZmlnLnJlbmRlcmVyQ29uZmlnLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlOiBvdmVycmlkZUhvb2tTdGF0ZSxcbiAgICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6IG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCxcbiAgICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6IG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCxcbiAgICBvdmVycmlkZVByb3BzOiBvdmVycmlkZVByb3BzLFxuICAgIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOiBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCxcbiAgICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aDogb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGgsXG4gICAgc2V0U3VzcGVuc2VIYW5kbGVyOiBzZXRTdXNwZW5zZUhhbmRsZXIsXG4gICAgc2NoZWR1bGVVcGRhdGU6IHNjaGVkdWxlVXBkYXRlLFxuICAgIGN1cnJlbnREaXNwYXRjaGVyUmVmOiBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOiBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcixcbiAgICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTogZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgfHwgZW1wdHlGaW5kRmliZXJCeUhvc3RJbnN0YW5jZSxcbiAgICAvLyBSZWFjdCBSZWZyZXNoXG4gICAgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOiAgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoICxcbiAgICBzY2hlZHVsZVJlZnJlc2g6ICBzY2hlZHVsZVJlZnJlc2ggLFxuICAgIHNjaGVkdWxlUm9vdDogIHNjaGVkdWxlUm9vdCAsXG4gICAgc2V0UmVmcmVzaEhhbmRsZXI6ICBzZXRSZWZyZXNoSGFuZGxlciAsXG4gICAgLy8gRW5hYmxlcyBEZXZUb29scyB0byBhcHBlbmQgb3duZXIgc3RhY2tzIHRvIGVycm9yIG1lc3NhZ2VzIGluIERFViBtb2RlLlxuICAgIGdldEN1cnJlbnRGaWJlcjogIGdldEN1cnJlbnRGaWJlckZvckRldlRvb2xzIFxuICB9KTtcbn1cblxuZnVuY3Rpb24gUmVhY3RET01Sb290KGNvbnRhaW5lciwgb3B0aW9ucykge1xuICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBjcmVhdGVSb290SW1wbChjb250YWluZXIsIENvbmN1cnJlbnRSb290LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gUmVhY3RET01CbG9ja2luZ1Jvb3QoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpIHtcbiAgdGhpcy5faW50ZXJuYWxSb290ID0gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpO1xufVxuXG5SZWFjdERPTVJvb3QucHJvdG90eXBlLnJlbmRlciA9IFJlYWN0RE9NQmxvY2tpbmdSb290LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgdmFyIHJvb3QgPSB0aGlzLl9pbnRlcm5hbFJvb3Q7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcigncmVuZGVyKC4uLik6IGRvZXMgbm90IHN1cHBvcnQgdGhlIHNlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gJyArICdUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIGEgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG5cbiAgICB2YXIgY29udGFpbmVyID0gcm9vdC5jb250YWluZXJJbmZvO1xuXG4gICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgaG9zdEluc3RhbmNlID0gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMocm9vdC5jdXJyZW50KTtcblxuICAgICAgaWYgKGhvc3RJbnN0YW5jZSkge1xuICAgICAgICBpZiAoaG9zdEluc3RhbmNlLnBhcmVudE5vZGUgIT09IGNvbnRhaW5lcikge1xuICAgICAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogSXQgbG9va3MgbGlrZSB0aGUgUmVhY3QtcmVuZGVyZWQgY29udGVudCBvZiB0aGUgJyArICdyb290IGNvbnRhaW5lciB3YXMgcmVtb3ZlZCB3aXRob3V0IHVzaW5nIFJlYWN0LiBUaGlzIGlzIG5vdCAnICsgJ3N1cHBvcnRlZCBhbmQgd2lsbCBjYXVzZSBlcnJvcnMuIEluc3RlYWQsIGNhbGwgJyArIFwicm9vdC51bm1vdW50KCkgdG8gZW1wdHkgYSByb290J3MgY29udGFpbmVyLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgcm9vdCwgbnVsbCwgbnVsbCk7XG59O1xuXG5SZWFjdERPTVJvb3QucHJvdG90eXBlLnVubW91bnQgPSBSZWFjdERPTUJsb2NraW5nUm9vdC5wcm90b3R5cGUudW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcigndW5tb3VudCguLi4pOiBkb2VzIG5vdCBzdXBwb3J0IGEgY2FsbGJhY2sgYXJndW1lbnQuICcgKyAnVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiBhIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvb3QgPSB0aGlzLl9pbnRlcm5hbFJvb3Q7XG4gIHZhciBjb250YWluZXIgPSByb290LmNvbnRhaW5lckluZm87XG4gIHVwZGF0ZUNvbnRhaW5lcihudWxsLCByb290LCBudWxsLCBmdW5jdGlvbiAoKSB7XG4gICAgdW5tYXJrQ29udGFpbmVyQXNSb290KGNvbnRhaW5lcik7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpIHtcbiAgLy8gVGFnIGlzIGVpdGhlciBMZWdhY3lSb290IG9yIENvbmN1cnJlbnQgUm9vdFxuICB2YXIgaHlkcmF0ZSA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGUgPT09IHRydWU7XG4gIHZhciBoeWRyYXRpb25DYWxsYmFja3MgPSBvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRpb25PcHRpb25zIHx8IG51bGw7XG4gIHZhciBtdXRhYmxlU291cmNlcyA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMubXV0YWJsZVNvdXJjZXMgfHwgbnVsbDtcbiAgdmFyIHJvb3QgPSBjcmVhdGVDb250YWluZXIoY29udGFpbmVyLCB0YWcsIGh5ZHJhdGUpO1xuICBtYXJrQ29udGFpbmVyQXNSb290KHJvb3QuY3VycmVudCwgY29udGFpbmVyKTtcbiAgdmFyIGNvbnRhaW5lck5vZGVUeXBlID0gY29udGFpbmVyLm5vZGVUeXBlO1xuXG4gIHtcbiAgICB2YXIgcm9vdENvbnRhaW5lckVsZW1lbnQgPSBjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSA/IGNvbnRhaW5lci5wYXJlbnROb2RlIDogY29udGFpbmVyO1xuICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KTtcbiAgfVxuXG4gIGlmIChtdXRhYmxlU291cmNlcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXV0YWJsZVNvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBtdXRhYmxlU291cmNlID0gbXV0YWJsZVNvdXJjZXNbaV07XG4gICAgICByZWdpc3Rlck11dGFibGVTb3VyY2VGb3JIeWRyYXRpb24ocm9vdCwgbXV0YWJsZVNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3Q7XG59XG5mdW5jdGlvbiBjcmVhdGVMZWdhY3lSb290KGNvbnRhaW5lciwgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IFJlYWN0RE9NQmxvY2tpbmdSb290KGNvbnRhaW5lciwgTGVnYWN5Um9vdCwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBpc1ZhbGlkQ29udGFpbmVyKG5vZGUpIHtcbiAgcmV0dXJuICEhKG5vZGUgJiYgKG5vZGUubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFICYmIG5vZGUubm9kZVZhbHVlID09PSAnIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlICcpKTtcbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDMgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzO1xudmFyIHdhcm5lZEFib3V0SHlkcmF0ZUFQSSA9IGZhbHNlO1xuXG57XG4gIHRvcExldmVsVXBkYXRlV2FybmluZ3MgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgaWYgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyICYmIGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgaG9zdEluc3RhbmNlID0gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIuX2ludGVybmFsUm9vdC5jdXJyZW50KTtcblxuICAgICAgaWYgKGhvc3RJbnN0YW5jZSkge1xuICAgICAgICBpZiAoaG9zdEluc3RhbmNlLnBhcmVudE5vZGUgIT09IGNvbnRhaW5lcikge1xuICAgICAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogSXQgbG9va3MgbGlrZSB0aGUgUmVhY3QtcmVuZGVyZWQgY29udGVudCBvZiB0aGlzICcgKyAnY29udGFpbmVyIHdhcyByZW1vdmVkIHdpdGhvdXQgdXNpbmcgUmVhY3QuIFRoaXMgaXMgbm90ICcgKyAnc3VwcG9ydGVkIGFuZCB3aWxsIGNhdXNlIGVycm9ycy4gSW5zdGVhZCwgY2FsbCAnICsgJ1JlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUgdG8gZW1wdHkgYSBjb250YWluZXIuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaXNSb290UmVuZGVyZWRCeVNvbWVSZWFjdCA9ICEhY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG4gICAgdmFyIHJvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIHZhciBoYXNOb25Sb290UmVhY3RDaGlsZCA9ICEhKHJvb3RFbCAmJiBnZXRJbnN0YW5jZUZyb21Ob2RlKHJvb3RFbCkpO1xuXG4gICAgaWYgKGhhc05vblJvb3RSZWFjdENoaWxkICYmICFpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0KSB7XG4gICAgICBlcnJvcigncmVuZGVyKC4uLik6IFJlcGxhY2luZyBSZWFjdC1yZW5kZXJlZCBjaGlsZHJlbiB3aXRoIGEgbmV3IHJvb3QgJyArICdjb21wb25lbnQuIElmIHlvdSBpbnRlbmRlZCB0byB1cGRhdGUgdGhlIGNoaWxkcmVuIG9mIHRoaXMgbm9kZSwgJyArICd5b3Ugc2hvdWxkIGluc3RlYWQgaGF2ZSB0aGUgZXhpc3RpbmcgY2hpbGRyZW4gdXBkYXRlIHRoZWlyIHN0YXRlICcgKyAnYW5kIHJlbmRlciB0aGUgbmV3IGNvbXBvbmVudHMgaW5zdGVhZCBvZiBjYWxsaW5nIFJlYWN0RE9NLnJlbmRlci4nKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgY29udGFpbmVyLnRhZ05hbWUgJiYgY29udGFpbmVyLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknKSB7XG4gICAgICBlcnJvcigncmVuZGVyKCk6IFJlbmRlcmluZyBjb21wb25lbnRzIGRpcmVjdGx5IGludG8gZG9jdW1lbnQuYm9keSBpcyAnICsgJ2Rpc2NvdXJhZ2VkLCBzaW5jZSBpdHMgY2hpbGRyZW4gYXJlIG9mdGVuIG1hbmlwdWxhdGVkIGJ5IHRoaXJkLXBhcnR5ICcgKyAnc2NyaXB0cyBhbmQgYnJvd3NlciBleHRlbnNpb25zLiBUaGlzIG1heSBsZWFkIHRvIHN1YnRsZSAnICsgJ3JlY29uY2lsaWF0aW9uIGlzc3Vlcy4gVHJ5IHJlbmRlcmluZyBpbnRvIGEgY29udGFpbmVyIGVsZW1lbnQgY3JlYXRlZCAnICsgJ2ZvciB5b3VyIGFwcC4nKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmRvY3VtZW50RWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkSHlkcmF0ZUR1ZVRvTGVnYWN5SGV1cmlzdGljKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgcmV0dXJuICEhKHJvb3RFbGVtZW50ICYmIHJvb3RFbGVtZW50Lm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgcm9vdEVsZW1lbnQuaGFzQXR0cmlidXRlKFJPT1RfQVRUUklCVVRFX05BTUUpKTtcbn1cblxuZnVuY3Rpb24gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUpIHtcbiAgdmFyIHNob3VsZEh5ZHJhdGUgPSBmb3JjZUh5ZHJhdGUgfHwgc2hvdWxkSHlkcmF0ZUR1ZVRvTGVnYWN5SGV1cmlzdGljKGNvbnRhaW5lcik7IC8vIEZpcnN0IGNsZWFyIGFueSBleGlzdGluZyBjb250ZW50LlxuXG4gIGlmICghc2hvdWxkSHlkcmF0ZSkge1xuICAgIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgICB2YXIgcm9vdFNpYmxpbmc7XG5cbiAgICB3aGlsZSAocm9vdFNpYmxpbmcgPSBjb250YWluZXIubGFzdENoaWxkKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghd2FybmVkICYmIHJvb3RTaWJsaW5nLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgcm9vdFNpYmxpbmcuaGFzQXR0cmlidXRlKFJPT1RfQVRUUklCVVRFX05BTUUpKSB7XG4gICAgICAgICAgd2FybmVkID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdyZW5kZXIoKTogVGFyZ2V0IG5vZGUgaGFzIG1hcmt1cCByZW5kZXJlZCBieSBSZWFjdCwgYnV0IHRoZXJlICcgKyAnYXJlIHVucmVsYXRlZCBub2RlcyBhcyB3ZWxsLiBUaGlzIGlzIG1vc3QgY29tbW9ubHkgY2F1c2VkIGJ5ICcgKyAnd2hpdGUtc3BhY2UgaW5zZXJ0ZWQgYXJvdW5kIHNlcnZlci1yZW5kZXJlZCBtYXJrdXAuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKHJvb3RTaWJsaW5nKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKHNob3VsZEh5ZHJhdGUgJiYgIWZvcmNlSHlkcmF0ZSAmJiAhd2FybmVkQWJvdXRIeWRyYXRlQVBJKSB7XG4gICAgICB3YXJuZWRBYm91dEh5ZHJhdGVBUEkgPSB0cnVlO1xuXG4gICAgICB3YXJuKCdyZW5kZXIoKTogQ2FsbGluZyBSZWFjdERPTS5yZW5kZXIoKSB0byBoeWRyYXRlIHNlcnZlci1yZW5kZXJlZCBtYXJrdXAgJyArICd3aWxsIHN0b3Agd29ya2luZyBpbiBSZWFjdCB2MTguIFJlcGxhY2UgdGhlIFJlYWN0RE9NLnJlbmRlcigpIGNhbGwgJyArICd3aXRoIFJlYWN0RE9NLmh5ZHJhdGUoKSBpZiB5b3Ugd2FudCBSZWFjdCB0byBhdHRhY2ggdG8gdGhlIHNlcnZlciBIVE1MLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVMZWdhY3lSb290KGNvbnRhaW5lciwgc2hvdWxkSHlkcmF0ZSA/IHtcbiAgICBoeWRyYXRlOiB0cnVlXG4gIH0gOiB1bmRlZmluZWQpO1xufVxuXG5mdW5jdGlvbiB3YXJuT25JbnZhbGlkQ2FsbGJhY2skMShjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsZXJOYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgY2hpbGRyZW4sIGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlLCBjYWxsYmFjaykge1xuICB7XG4gICAgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncyhjb250YWluZXIpO1xuICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogY2FsbGJhY2ssICdyZW5kZXInKTtcbiAgfSAvLyBUT0RPOiBXaXRob3V0IGBhbnlgIHR5cGUsIEZsb3cgc2F5cyBcIlByb3BlcnR5IGNhbm5vdCBiZSBhY2Nlc3NlZCBvbiBhbnlcbiAgLy8gbWVtYmVyIG9mIGludGVyc2VjdGlvbiB0eXBlLlwiIFdoeXl5eXl5LlxuXG5cbiAgdmFyIHJvb3QgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgdmFyIGZpYmVyUm9vdDtcblxuICBpZiAoIXJvb3QpIHtcbiAgICAvLyBJbml0aWFsIG1vdW50XG4gICAgcm9vdCA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID0gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUpO1xuICAgIGZpYmVyUm9vdCA9IHJvb3QuX2ludGVybmFsUm9vdDtcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBvcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRQdWJsaWNSb290SW5zdGFuY2UoZmliZXJSb290KTtcbiAgICAgICAgb3JpZ2luYWxDYWxsYmFjay5jYWxsKGluc3RhbmNlKTtcbiAgICAgIH07XG4gICAgfSAvLyBJbml0aWFsIG1vdW50IHNob3VsZCBub3QgYmUgYmF0Y2hlZC5cblxuXG4gICAgdW5iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIGZpYmVyUm9vdCwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZmliZXJSb290ID0gcm9vdC5faW50ZXJuYWxSb290O1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIF9vcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRQdWJsaWNSb290SW5zdGFuY2UoZmliZXJSb290KTtcblxuICAgICAgICBfb3JpZ2luYWxDYWxsYmFjay5jYWxsKGluc3RhbmNlKTtcbiAgICAgIH07XG4gICAgfSAvLyBVcGRhdGVcblxuXG4gICAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCBmaWJlclJvb3QsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgcmV0dXJuIGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xufVxuXG5mdW5jdGlvbiBmaW5kRE9NTm9kZShjb21wb25lbnRPckVsZW1lbnQpIHtcbiAge1xuICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyJDMuY3VycmVudDtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci5zdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciB3YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXI7XG5cbiAgICAgIGlmICghd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIpIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIGFjY2Vzc2luZyBmaW5kRE9NTm9kZSBpbnNpZGUgaXRzIHJlbmRlcigpLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSB8fCAnQSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgb3duZXIuc3RhdGVOb2RlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbXBvbmVudE9yRWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50Lm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gY29tcG9uZW50T3JFbGVtZW50O1xuICB9XG5cbiAge1xuICAgIHJldHVybiBmaW5kSG9zdEluc3RhbmNlV2l0aFdhcm5pbmcoY29tcG9uZW50T3JFbGVtZW50LCAnZmluZERPTU5vZGUnKTtcbiAgfVxufVxuZnVuY3Rpb24gaHlkcmF0ZShlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS5oeWRyYXRlKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCBjcmVhdGVSb290KGNvbnRhaW5lciwge2h5ZHJhdGU6IHRydWV9KS5yZW5kZXIoZWxlbWVudCk/Jyk7XG4gICAgfVxuICB9IC8vIFRPRE86IHRocm93IG9yIHdhcm4gaWYgd2UgY291bGRuJ3QgaHlkcmF0ZT9cblxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBlbGVtZW50LCBjb250YWluZXIsIHRydWUsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHJlbmRlcihlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QucmVuZGVyKGVsZW1lbnQpPycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBlbGVtZW50LCBjb250YWluZXIsIGZhbHNlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXJOb2RlKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIShwYXJlbnRDb21wb25lbnQgIT0gbnVsbCAmJiBoYXMocGFyZW50Q29tcG9uZW50KSkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJwYXJlbnRDb21wb25lbnQgbXVzdCBiZSBhIHZhbGlkIFJlYWN0IENvbXBvbmVudFwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgZmFsc2UsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBEaWQgeW91IG1lYW4gdG8gY2FsbCByb290LnVubW91bnQoKT8nKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIpIHtcbiAgICB7XG4gICAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgICB2YXIgcmVuZGVyZWRCeURpZmZlcmVudFJlYWN0ID0gcm9vdEVsICYmICFnZXRJbnN0YW5jZUZyb21Ob2RlKHJvb3RFbCk7XG5cbiAgICAgIGlmIChyZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QpIHtcbiAgICAgICAgZXJyb3IoXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IGFub3RoZXIgY29weSBvZiBSZWFjdC4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFVubW91bnQgc2hvdWxkIG5vdCBiZSBiYXRjaGVkLlxuXG5cbiAgICB1bmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIG51bGwsIGNvbnRhaW5lciwgZmFsc2UsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSBUaGlzIHNob3VsZCBwcm9iYWJseSB1c2UgYGRlbGV0ZSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcmBcbiAgICAgICAgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPSBudWxsO1xuICAgICAgICB1bm1hcmtDb250YWluZXJBc1Jvb3QoY29udGFpbmVyKTtcbiAgICAgIH0pO1xuICAgIH0pOyAvLyBJZiB5b3UgY2FsbCB1bm1vdW50Q29tcG9uZW50QXROb2RlIHR3aWNlIGluIHF1aWNrIHN1Y2Nlc3Npb24sIHlvdSdsbFxuICAgIC8vIGdldCBgdHJ1ZWAgdHdpY2UuIFRoYXQncyBwcm9iYWJseSBmaW5lP1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgdmFyIF9yb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcblxuICAgICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEoX3Jvb3RFbCAmJiBnZXRJbnN0YW5jZUZyb21Ob2RlKF9yb290RWwpKTsgLy8gQ2hlY2sgaWYgdGhlIGNvbnRhaW5lciBpdHNlbGYgaXMgYSBSZWFjdCByb290IG5vZGUuXG5cbiAgICAgIHZhciBpc0NvbnRhaW5lclJlYWN0Um9vdCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIGlzVmFsaWRDb250YWluZXIoY29udGFpbmVyLnBhcmVudE5vZGUpICYmICEhY29udGFpbmVyLnBhcmVudE5vZGUuX3JlYWN0Um9vdENvbnRhaW5lcjtcblxuICAgICAgaWYgKGhhc05vblJvb3RSZWFjdENoaWxkKSB7XG4gICAgICAgIGVycm9yKFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSgpOiBUaGUgbm9kZSB5b3UncmUgYXR0ZW1wdGluZyB0byB1bm1vdW50IFwiICsgJ3dhcyByZW5kZXJlZCBieSBSZWFjdCBhbmQgaXMgbm90IGEgdG9wLWxldmVsIGNvbnRhaW5lci4gJXMnLCBpc0NvbnRhaW5lclJlYWN0Um9vdCA/ICdZb3UgbWF5IGhhdmUgYWNjaWRlbnRhbGx5IHBhc3NlZCBpbiBhIFJlYWN0IHJvb3Qgbm9kZSBpbnN0ZWFkICcgKyAnb2YgaXRzIGNvbnRhaW5lci4nIDogJ0luc3RlYWQsIGhhdmUgdGhlIHBhcmVudCBjb21wb25lbnQgdXBkYXRlIGl0cyBzdGF0ZSBhbmQgJyArICdyZXJlbmRlciBpbiBvcmRlciB0byByZW1vdmUgdGhpcyBjb21wb25lbnQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbnNldEF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24oYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbiQxKTtcbnNldEF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uJDEpO1xuc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSQxKTtcbnNldEF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KHJ1bldpdGhQcmlvcml0eSQyKTtcbnZhciBkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCA9IGZhbHNlO1xuXG57XG4gIGlmICh0eXBlb2YgTWFwICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93SXNzdWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgTWFwIGhhcyBubyBwcm90b3R5cGVcbiAgTWFwLnByb3RvdHlwZSA9PSBudWxsIHx8IHR5cGVvZiBNYXAucHJvdG90eXBlLmZvckVhY2ggIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIFNldCAhPT0gJ2Z1bmN0aW9uJyB8fCAvLyAkRmxvd0lzc3VlIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIFNldCBoYXMgbm8gcHJvdG90eXBlXG4gIFNldC5wcm90b3R5cGUgPT0gbnVsbCB8fCB0eXBlb2YgU2V0LnByb3RvdHlwZS5jbGVhciAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgU2V0LnByb3RvdHlwZS5mb3JFYWNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgZXJyb3IoJ1JlYWN0IGRlcGVuZHMgb24gTWFwIGFuZCBTZXQgYnVpbHQtaW4gdHlwZXMuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxscycpO1xuICB9XG59XG5cbnNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbihyZXN0b3JlQ29udHJvbGxlZFN0YXRlJDMpO1xuc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihiYXRjaGVkVXBkYXRlcyQxLCBkaXNjcmV0ZVVwZGF0ZXMkMSwgZmx1c2hEaXNjcmV0ZVVwZGF0ZXMsIGJhdGNoZWRFdmVudFVwZGF0ZXMkMSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXIpIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogcGFzcyBSZWFjdERPTSBwb3J0YWwgaW1wbGVtZW50YXRpb24gYXMgdGhpcmQgYXJndW1lbnRcbiAgLy8gJEZsb3dGaXhNZSBUaGUgRmxvdyB0eXBlIGlzIG9wYXF1ZSBidXQgdGhlcmUncyBubyB3YXkgdG8gYWN0dWFsbHkgY3JlYXRlIGl0LlxuXG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVyLCBudWxsLCBrZXkpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKSB7XG5cbiAgcmV0dXJuIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsKSB7XG4gICAgICBkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ1RoZSBSZWFjdERPTS51bnN0YWJsZV9jcmVhdGVQb3J0YWwoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0RE9NLmNyZWF0ZVBvcnRhbCgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEksICcgKyAnYnV0IHdpdGhvdXQgdGhlIFwidW5zdGFibGVfXCIgcHJlZml4LicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVyLCBrZXkpO1xufVxuXG52YXIgSW50ZXJuYWxzID0ge1xuICAvLyBLZWVwIGluIHN5bmMgd2l0aCBSZWFjdFRlc3RVdGlscy5qcywgYW5kIFJlYWN0VGVzdFV0aWxzQWN0LmpzLlxuICAvLyBUaGlzIGlzIGFuIGFycmF5IGZvciBiZXR0ZXIgbWluaWZpY2F0aW9uLlxuICBFdmVudHM6IFtnZXRJbnN0YW5jZUZyb21Ob2RlLCBnZXROb2RlRnJvbUluc3RhbmNlLCBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlLCBlbnF1ZXVlU3RhdGVSZXN0b3JlLCByZXN0b3JlU3RhdGVJZk5lZWRlZCwgZmx1c2hQYXNzaXZlRWZmZWN0cywgLy8gVE9ETzogVGhpcyBpcyByZWxhdGVkIHRvIGBhY3RgLCBub3QgZXZlbnRzLiBNb3ZlIHRvIHNlcGFyYXRlIGtleT9cbiAgSXNUaGlzUmVuZGVyZXJBY3RpbmddXG59O1xudmFyIGZvdW5kRGV2VG9vbHMgPSBpbmplY3RJbnRvRGV2VG9vbHMoe1xuICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTogZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUsXG4gIGJ1bmRsZVR5cGU6ICAxICxcbiAgdmVyc2lvbjogUmVhY3RWZXJzaW9uLFxuICByZW5kZXJlclBhY2thZ2VOYW1lOiAncmVhY3QtZG9tJ1xufSk7XG5cbntcbiAgaWYgKCFmb3VuZERldlRvb2xzICYmIGNhblVzZURPTSAmJiB3aW5kb3cudG9wID09PSB3aW5kb3cuc2VsZikge1xuICAgIC8vIElmIHdlJ3JlIGluIENocm9tZSBvciBGaXJlZm94LCBwcm92aWRlIGEgZG93bmxvYWQgbGluayBpZiBub3QgaW5zdGFsbGVkLlxuICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpID4gLTEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdFZGdlJykgPT09IC0xIHx8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID4gLTEpIHtcbiAgICAgIHZhciBwcm90b2NvbCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbDsgLy8gRG9uJ3Qgd2FybiBpbiBleG90aWMgY2FzZXMgbGlrZSBjaHJvbWUtZXh0ZW5zaW9uOi8vLlxuXG4gICAgICBpZiAoL14oaHR0cHM/fGZpbGUpOiQvLnRlc3QocHJvdG9jb2wpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcbiAgICAgICAgY29uc29sZS5pbmZvKCclY0Rvd25sb2FkIHRoZSBSZWFjdCBEZXZUb29scyAnICsgJ2ZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scycgKyAocHJvdG9jb2wgPT09ICdmaWxlOicgPyAnXFxuWW91IG1pZ2h0IG5lZWQgdG8gdXNlIGEgbG9jYWwgSFRUUCBzZXJ2ZXIgKGluc3RlYWQgb2YgZmlsZTovLyk6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzLWZhcScgOiAnJyksICdmb250LXdlaWdodDpib2xkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQgPSBJbnRlcm5hbHM7XG5leHBvcnRzLmNyZWF0ZVBvcnRhbCA9IGNyZWF0ZVBvcnRhbCQxO1xuZXhwb3J0cy5maW5kRE9NTm9kZSA9IGZpbmRET01Ob2RlO1xuZXhwb3J0cy5mbHVzaFN5bmMgPSBmbHVzaFN5bmM7XG5leHBvcnRzLmh5ZHJhdGUgPSBoeWRyYXRlO1xuZXhwb3J0cy5yZW5kZXIgPSByZW5kZXI7XG5leHBvcnRzLnVubW91bnRDb21wb25lbnRBdE5vZGUgPSB1bm1vdW50Q29tcG9uZW50QXROb2RlO1xuZXhwb3J0cy51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IGJhdGNoZWRVcGRhdGVzJDE7XG5leHBvcnRzLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbCA9IHVuc3RhYmxlX2NyZWF0ZVBvcnRhbDtcbmV4cG9ydHMudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIgPSByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjtcbmV4cG9ydHMudmVyc2lvbiA9IFJlYWN0VmVyc2lvbjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGNoZWNrRENFKCkge1xuICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gIGlmIChcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJyB8fFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkXG4gICAgLy8gaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBvbmx5IGluIGRldmVsb3BtZW50LlxuICAgIC8vIFRoZXJlZm9yZSBpZiB0aGUgYnJhbmNoIGlzIHN0aWxsIGhlcmUsIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3YXNuJ3RcbiAgICAvLyBwcm9wZXJseSBhcHBsaWVkLlxuICAgIC8vIERvbid0IGNoYW5nZSB0aGUgbWVzc2FnZS4gUmVhY3QgRGV2VG9vbHMgcmVsaWVzIG9uIGl0LiBBbHNvIG1ha2Ugc3VyZVxuICAgIC8vIHRoaXMgbWVzc2FnZSBkb2Vzbid0IG9jY3VyIGVsc2V3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLCBvciBpdCB3aWxsIGNhdXNlXG4gICAgLy8gYSBmYWxzZSBwb3NpdGl2ZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ15fXicpO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvZGUgYWJvdmUgaGFzIGJlZW4gZGVhZCBjb2RlIGVsaW1pbmF0ZWQgKERDRSdkKS5cbiAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoY2hlY2tEQ0UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEZXZUb29scyBzaG91bGRuJ3QgY3Jhc2ggUmVhY3QsIG5vIG1hdHRlciB3aGF0LlxuICAgIC8vIFdlIHNob3VsZCBzdGlsbCByZXBvcnQgaW4gY2FzZSB3ZSBicmVhayB0aGlzIGNvZGUuXG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIERDRSBjaGVjayBzaG91bGQgaGFwcGVuIGJlZm9yZSBSZWFjdERPTSBidW5kbGUgZXhlY3V0ZXMgc28gdGhhdFxuICAvLyBEZXZUb29scyBjYW4gcmVwb3J0IGJhZCBtaW5pZmljYXRpb24gZHVyaW5nIGluamVjdGlvbi5cbiAgY2hlY2tEQ0UoKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKSA6IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKSA6IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKSA6IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKSA6IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKSA6IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0JykgOiAweGVhY2U7IC8vIFRPRE86IFdlIGRvbid0IHVzZSBBc3luY01vZGUgb3IgQ29uY3VycmVudE1vZGUgYW55bW9yZS4gVGhleSB3ZXJlIHRlbXBvcmFyeVxuLy8gKHVuc3RhYmxlKSBBUElzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuIENhbiB3ZSByZW1vdmUgdGhlIHN5bWJvbHM/XG5cbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0JykgOiAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYmxvY2snKSA6IDB4ZWFkOTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnVuZGFtZW50YWwnKSA6IDB4ZWFkNTtcbnZhciBSRUFDVF9SRVNQT05ERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnJlc3BvbmRlcicpIDogMHhlYWQ2O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zY29wZScpIDogMHhlYWQ3O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9SRVNQT05ERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9TQ09QRV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUpO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FTWU5DX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0gLy8gQXN5bmNNb2RlIGlzIGRlcHJlY2F0ZWQgYWxvbmcgd2l0aCBpc0FzeW5jTW9kZVxuXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE3Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkgfHwgdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQXN5bmNNb2RlID0gQXN5bmNNb2RlO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkgeyAvKiovIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgK1xuICAgICAgICAgICAgICAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcbiAgICAgICAgICAgIGxvY2F0aW9uICsgJyBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBiaWdpbnQ6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdiaWdpbnQnKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSwgZGF0YSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5kYXRhID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhOiB7fTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSxcbiAgICAgICAgICB7ZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGV9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIHZhciBjaGVja2VyUmVzdWx0ID0gY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VyUmVzdWx0LmRhdGEgJiYgaGFzKGNoZWNrZXJSZXN1bHQuZGF0YSwgJ2V4cGVjdGVkVHlwZScpKSB7XG4gICAgICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGNoZWNrZXJSZXN1bHQuZGF0YS5leHBlY3RlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgPSAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPiAwKSA/ICcsIGV4cGVjdGVkIG9uZSBvZiB0eXBlIFsnICsgZXhwZWN0ZWRUeXBlcy5qb2luKCcsICcpICsgJ10nOiAnJztcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AnICsgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIHR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHByb3BGdWxsTmFtZSArICcuJyArIGtleSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZSArICdgLidcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb20gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoaGFzKHNoYXBlVHlwZXMsIGtleSkgJiYgdHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgZ2V0UHJlY2lzZVR5cGUoY2hlY2tlcikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsICIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKGFyZykge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlVmFsdWUgKGFyZykge1xuXHRcdGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuXHRcdFx0cmV0dXJuIGFyZztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdH1cblxuXHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdHJldHVybiBhcmcudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3Nlcywga2V5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZENsYXNzICh2YWx1ZSwgbmV3Q2xhc3MpIHtcblx0XHRpZiAoIW5ld0NsYXNzKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSArICcgJyArIG5ld0NsYXNzO1xuXHRcdH1cblx0XG5cdFx0cmV0dXJuIHZhbHVlICsgbmV3Q2xhc3M7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKSA6IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKSA6IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKSA6IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKSA6IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKSA6IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0JykgOiAweGVhY2U7IC8vIFRPRE86IFdlIGRvbid0IHVzZSBBc3luY01vZGUgb3IgQ29uY3VycmVudE1vZGUgYW55bW9yZS4gVGhleSB3ZXJlIHRlbXBvcmFyeVxuLy8gKHVuc3RhYmxlKSBBUElzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuIENhbiB3ZSByZW1vdmUgdGhlIHN5bWJvbHM/XG5cbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0JykgOiAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYmxvY2snKSA6IDB4ZWFkOTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnVuZGFtZW50YWwnKSA6IDB4ZWFkNTtcbnZhciBSRUFDVF9SRVNQT05ERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnJlc3BvbmRlcicpIDogMHhlYWQ2O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zY29wZScpIDogMHhlYWQ3O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9SRVNQT05ERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9TQ09QRV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUpO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FTWU5DX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0gLy8gQXN5bmNNb2RlIGlzIGRlcHJlY2F0ZWQgYWxvbmcgd2l0aCBpc0FzeW5jTW9kZVxuXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE3Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkgfHwgdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQXN5bmNNb2RlID0gQXN5bmNNb2RlO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbnZhciBSRUFDVF9TVEFUSUNTID0ge1xuICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgY29udGV4dFR5cGU6IHRydWUsXG4gIGNvbnRleHRUeXBlczogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgZ2V0RGVmYXVsdFByb3BzOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogdHJ1ZSxcbiAgbWl4aW5zOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgS05PV05fU1RBVElDUyA9IHtcbiAgbmFtZTogdHJ1ZSxcbiAgbGVuZ3RoOiB0cnVlLFxuICBwcm90b3R5cGU6IHRydWUsXG4gIGNhbGxlcjogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBhcmd1bWVudHM6IHRydWUsXG4gIGFyaXR5OiB0cnVlXG59O1xudmFyIEZPUldBUkRfUkVGX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIHJlbmRlcjogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlXG59O1xudmFyIE1FTU9fU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgY29tcGFyZTogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIFRZUEVfU1RBVElDUyA9IHt9O1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuRm9yd2FyZFJlZl0gPSBGT1JXQVJEX1JFRl9TVEFUSUNTO1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuTWVtb10gPSBNRU1PX1NUQVRJQ1M7XG5cbmZ1bmN0aW9uIGdldFN0YXRpY3MoY29tcG9uZW50KSB7XG4gIC8vIFJlYWN0IHYxNi4xMSBhbmQgYmVsb3dcbiAgaWYgKHJlYWN0SXMuaXNNZW1vKGNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gTUVNT19TVEFUSUNTO1xuICB9IC8vIFJlYWN0IHYxNi4xMiBhbmQgYWJvdmVcblxuXG4gIHJldHVybiBUWVBFX1NUQVRJQ1NbY29tcG9uZW50WyckJHR5cGVvZiddXSB8fCBSRUFDVF9TVEFUSUNTO1xufVxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBvYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuZnVuY3Rpb24gaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21wb25lbnQsIGJsYWNrbGlzdCkge1xuICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xuICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgICBpZiAoaW5oZXJpdGVkQ29tcG9uZW50ICYmIGluaGVyaXRlZENvbXBvbmVudCAhPT0gb2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICAgIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgaW5oZXJpdGVkQ29tcG9uZW50LCBibGFja2xpc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0U3RhdGljcyA9IGdldFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50KTtcbiAgICB2YXIgc291cmNlU3RhdGljcyA9IGdldFN0YXRpY3Moc291cmNlQ29tcG9uZW50KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghS05PV05fU1RBVElDU1trZXldICYmICEoYmxhY2tsaXN0ICYmIGJsYWNrbGlzdFtrZXldKSAmJiAhKHNvdXJjZVN0YXRpY3MgJiYgc291cmNlU3RhdGljc1trZXldKSAmJiAhKHRhcmdldFN0YXRpY3MgJiYgdGFyZ2V0U3RhdGljc1trZXldKSkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBBdm9pZCBmYWlsdXJlcyBmcm9tIHJlYWQtb25seSBwcm9wZXJ0aWVzXG4gICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaG9pc3ROb25SZWFjdFN0YXRpY3M7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUNsZWFyO1xuIiwgIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwgInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwgInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCAidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrRGVsZXRlO1xuIiwgIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwgIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsICJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCAidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLCAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwgInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCAiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCAidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwgIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwgInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwgInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwgInZhciBpc0tleWFibGUgPSByZXF1aXJlKCcuL19pc0tleWFibGUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcERhdGE7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsICJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwgInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrU2V0O1xuIiwgInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwgIi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlQWRkO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUhhcztcbiIsICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpLFxuICAgIHNldENhY2hlQWRkID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVBZGQnKSxcbiAgICBzZXRDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX3NldENhY2hlSGFzJyk7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRDYWNoZTtcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5U29tZTtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBjYWNoZUhhcyhjYWNoZSwga2V5KSB7XG4gIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWNoZUhhcztcbiIsICJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXk7XG4iLCAiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwgIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCAiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwgInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlGaWx0ZXI7XG4iLCAiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCAidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9scztcbiIsICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCAidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwgInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwgInZhciBiYXNlVGltZXMgPSByZXF1aXJlKCcuL19iYXNlVGltZXMnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlMaWtlS2V5cztcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCAiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsICJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXM7XG4iLCAidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLCAidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwgInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsICJ2YXIgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIG9ialN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAob2JqU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIG9ialN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBvYmplY3Q7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxPYmplY3RzO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YVZpZXc7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYWtNYXA7XG4iLCAidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwgInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIGVxdWFsQnlUYWcgPSByZXF1aXJlKCcuL19lcXVhbEJ5VGFnJyksXG4gICAgZXF1YWxPYmplY3RzID0gcmVxdWlyZSgnLi9fZXF1YWxPYmplY3RzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsRGVlcDtcbiIsICJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCAidmFyIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gKiBlcXVpdmFsZW50LlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAqIGRhdGUgb2JqZWN0cywgZXJyb3Igb2JqZWN0cywgbWFwcywgbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcyxcbiAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAqIG5vZGVzIGFyZSBjb21wYXJlZCBieSBzdHJpY3QgZXF1YWxpdHksIGkuZS4gYD09PWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBvYmplY3QgPT09IG90aGVyO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFcXVhbDtcbiIsICIvLyEgbW9tZW50LmpzXG4vLyEgdmVyc2lvbiA6IDIuMzAuMVxuLy8hIGF1dGhvcnMgOiBUaW0gV29vZCwgSXNrcmVuIENoZXJuZXYsIE1vbWVudC5qcyBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgbW9tZW50anMuY29tXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgICAgICByZXR1cm4gaG9va0NhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBkb25lIHRvIHJlZ2lzdGVyIHRoZSBtZXRob2QgY2FsbGVkIHdpdGggbW9tZW50KClcbiAgICAvLyB3aXRob3V0IGNyZWF0aW5nIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICBmdW5jdGlvbiBzZXRIb29rQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBBcnJheSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgICAgIC8vIElFOCB3aWxsIHRyZWF0IHVuZGVmaW5lZCBhbmQgbnVsbCBhcyBvYmplY3QgaWYgaXQgd2Fzbid0IGZvclxuICAgICAgICAvLyBpbnB1dCAhPSBudWxsXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCAhPSBudWxsICYmXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBPYmplY3RdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc093blByb3AoYSwgYikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICBmb3IgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09IHZvaWQgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RhdGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwKGFyciwgZm4pIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGFyckxlbiA9IGFyci5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnJMZW47ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIHRydWUpLnV0YygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmF1bHRQYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZGVlcCBjbG9uZSB0aGlzIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtcHR5OiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VuczogW10sXG4gICAgICAgICAgICB1bnVzZWRJbnB1dDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdzogLTIsXG4gICAgICAgICAgICBjaGFyc0xlZnRPdmVyOiAwLFxuICAgICAgICAgICAgbnVsbElucHV0OiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRFcmE6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkTW9udGg6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0OiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgICBpc286IGZhbHNlLFxuICAgICAgICAgICAgcGFyc2VkRGF0ZVBhcnRzOiBbXSxcbiAgICAgICAgICAgIGVyYTogbnVsbCxcbiAgICAgICAgICAgIG1lcmlkaWVtOiBudWxsLFxuICAgICAgICAgICAgcmZjMjgyMjogZmFsc2UsXG4gICAgICAgICAgICB3ZWVrZGF5TWlzbWF0Y2g6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNpbmdGbGFncyhtKSB7XG4gICAgICAgIGlmIChtLl9wZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBtLl9wZiA9IGRlZmF1bHRQYXJzaW5nRmxhZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5fcGY7XG4gICAgfVxuXG4gICAgdmFyIHNvbWU7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgICAgIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzb21lID0gZnVuY3Rpb24gKGZ1bikge1xuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgaW4gdCAmJiBmdW4uY2FsbCh0aGlzLCB0W2ldLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkKG0pIHtcbiAgICAgICAgdmFyIGZsYWdzID0gbnVsbCxcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gZmFsc2UsXG4gICAgICAgICAgICBpc05vd1ZhbGlkID0gbS5fZCAmJiAhaXNOYU4obS5fZC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoaXNOb3dWYWxpZCkge1xuICAgICAgICAgICAgZmxhZ3MgPSBnZXRQYXJzaW5nRmxhZ3MobSk7XG4gICAgICAgICAgICBwYXJzZWRQYXJ0cyA9IHNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRFcmEgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZE1vbnRoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRXZWVrZGF5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLndlZWtkYXlNaXNtYXRjaCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5udWxsSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy51c2VySW52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAoIWZsYWdzLm1lcmlkaWVtIHx8IChmbGFncy5tZXJpZGllbSAmJiBwYXJzZWRQYXJ0cykpO1xuICAgICAgICAgICAgaWYgKG0uX3N0cmljdCkge1xuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgICAgICBpc05vd1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MudW51c2VkVG9rZW5zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5iaWdIb3VyID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbiA9PSBudWxsIHx8ICFPYmplY3QuaXNGcm96ZW4obSkpIHtcbiAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBpc05vd1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTm93VmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQbHVnaW5zIHRoYXQgYWRkIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYWRkIHRoZSBrZXkgaGVyZSAobnVsbCB2YWx1ZSksXG4gICAgLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IChob29rcy5tb21lbnRQcm9wZXJ0aWVzID0gW10pLFxuICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIG1vbWVudFByb3BlcnRpZXNMZW4gPSBtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXNMZW4gPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbW9tZW50UHJvcGVydGllc0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IG1vbWVudFByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgdmFsID0gZnJvbVtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIC8vIE1vbWVudCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xuICAgICAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShjb25maWcuX2QgIT0gbnVsbCA/IGNvbmZpZy5fZC5nZXRUaW1lKCkgOiBOYU4pO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XG4gICAgICAgIC8vIG9iamVjdHMuXG4gICAgICAgIGlmICh1cGRhdGVJblByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudChvYmopIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIE1vbWVudCB8fCAob2JqICE9IG51bGwgJiYgb2JqLl9pc0FNb21lbnRPYmplY3QgIT0gbnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuKG1zZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FyblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogJyArIG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGUobXNnLCBmbikge1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBhcmdMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdMZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gJ1xcblsnICsgaSArICddICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChhcmd1bWVudHNbMF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9IGtleSArICc6ICcgKyBhcmd1bWVudHNbMF1ba2V5XSArICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDAsIC0yKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFuZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICAgICBtc2cgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbkFyZ3VtZW50czogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKS5qb2luKCcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoKS5zdGFja1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgZm4pO1xuICAgIH1cblxuICAgIHZhciBkZXByZWNhdGlvbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCBtc2cpIHtcbiAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobmFtZSwgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZhbHNlO1xuICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodHlwZW9mIEZ1bmN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldChjb25maWcpIHtcbiAgICAgICAgdmFyIHByb3AsIGk7XG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNvbmZpZywgaSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0b1xuICAgICAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZSB8fCB0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSArXG4gICAgICAgICAgICAgICAgJ3wnICtcbiAgICAgICAgICAgICAgICAvXFxkezEsMn0vLnNvdXJjZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksXG4gICAgICAgICAgICBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gY2hpbGRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pICYmIGlzT2JqZWN0KGNoaWxkQ29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgY2hpbGRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChwYXJlbnRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGV4dGVuZCh7fSwgcmVzW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB6ZXJvRmlsbChudW1iZXIsIHRhcmdldExlbmd0aCwgZm9yY2VTaWduKSB7XG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgICAgICB6ZXJvc1RvRmlsbCA9IHRhcmdldExlbmd0aCAtIGFic051bWJlci5sZW5ndGgsXG4gICAgICAgICAgICBzaWduID0gbnVtYmVyID49IDA7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcbiAgICAgICAgICAgIE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCB6ZXJvc1RvRmlsbCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpICtcbiAgICAgICAgICAgIGFic051bWJlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0aW5nVG9rZW5zID1cbiAgICAgICAgICAgIC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98TnsxLDV9fFlZWVlZWXxZWVlZWXxZWVlZfFlZfHl7Miw0fXx5bz98Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csXG4gICAgICAgIGZvcm1hdEZ1bmN0aW9ucyA9IHt9LFxuICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgLy8gdG9rZW46ICAgICdNJ1xuICAgIC8vIHBhZGRlZDogICBbJ01NJywgMl1cbiAgICAvLyBvcmRpbmFsOiAgJ01vJ1xuICAgIC8vIGNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7IHRoaXMubW9udGgoKSArIDEgfVxuICAgIGZ1bmN0aW9uIGFkZEZvcm1hdFRva2VuKHRva2VuLCBwYWRkZWQsIG9yZGluYWwsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmdW5jID0gY2FsbGJhY2s7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2NhbGxiYWNrXSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZGRlZCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbcGFkZGVkWzBdXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gemVyb0ZpbGwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBwYWRkZWRbMV0sIHBhZGRlZFsyXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmRpbmFsKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1tvcmRpbmFsXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChcbiAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgICAgICB0b2tlblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQubWF0Y2goL1xcW1tcXHNcXFNdLykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIHZhciBhcnJheSA9IGZvcm1hdC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGFycmF5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobW9tKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gJycsXG4gICAgICAgICAgICAgICAgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKVxuICAgICAgICAgICAgICAgICAgICA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIDogYXJyYXlbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID1cbiAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdIHx8IG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGkgPSA1O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5sb25nRGF0ZUZvcm1hdChpbnB1dCkgfHwgaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBsb2NhbEZvcm1hdHRpbmdUb2tlbnMudGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMsXG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBpIC09IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQgPSB7XG4gICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgTDogJ01NL0REL1lZWVknLFxuICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0KGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSxcbiAgICAgICAgICAgIGZvcm1hdFVwcGVyID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5LnRvVXBwZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChmb3JtYXQgfHwgIWZvcm1hdFVwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSA9IGZvcm1hdFVwcGVyXG4gICAgICAgICAgICAubWF0Y2goZm9ybWF0dGluZ1Rva2VucylcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHRvaykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU1NTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ0REJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdkZGRkJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdEludmFsaWREYXRlID0gJ0ludmFsaWQgZGF0ZSc7XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmFsaWREYXRlO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0T3JkaW5hbCA9ICclZCcsXG4gICAgICAgIGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlID0gL1xcZHsxLDJ9LztcblxuICAgIGZ1bmN0aW9uIG9yZGluYWwobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICB3OiAnYSB3ZWVrJyxcbiAgICAgICAgd3c6ICclZCB3ZWVrcycsXG4gICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX3JlbGF0aXZlVGltZVtzdHJpbmddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpXG4gICAgICAgICAgICA/IG91dHB1dChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpXG4gICAgICAgICAgICA6IG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhc3RGdXR1cmUoZGlmZiwgb3V0cHV0KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbZGlmZiA+IDAgPyAnZnV0dXJlJyA6ICdwYXN0J107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGZvcm1hdCkgPyBmb3JtYXQob3V0cHV0KSA6IGZvcm1hdC5yZXBsYWNlKC8lcy9pLCBvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhbGlhc2VzID0ge1xuICAgICAgICBEOiAnZGF0ZScsXG4gICAgICAgIGRhdGVzOiAnZGF0ZScsXG4gICAgICAgIGRhdGU6ICdkYXRlJyxcbiAgICAgICAgZDogJ2RheScsXG4gICAgICAgIGRheXM6ICdkYXknLFxuICAgICAgICBkYXk6ICdkYXknLFxuICAgICAgICBlOiAnd2Vla2RheScsXG4gICAgICAgIHdlZWtkYXlzOiAnd2Vla2RheScsXG4gICAgICAgIHdlZWtkYXk6ICd3ZWVrZGF5JyxcbiAgICAgICAgRTogJ2lzb1dlZWtkYXknLFxuICAgICAgICBpc293ZWVrZGF5czogJ2lzb1dlZWtkYXknLFxuICAgICAgICBpc293ZWVrZGF5OiAnaXNvV2Vla2RheScsXG4gICAgICAgIERERDogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcnM6ICdkYXlPZlllYXInLFxuICAgICAgICBkYXlvZnllYXI6ICdkYXlPZlllYXInLFxuICAgICAgICBoOiAnaG91cicsXG4gICAgICAgIGhvdXJzOiAnaG91cicsXG4gICAgICAgIGhvdXI6ICdob3VyJyxcbiAgICAgICAgbXM6ICdtaWxsaXNlY29uZCcsXG4gICAgICAgIG1pbGxpc2Vjb25kczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmQ6ICdtaWxsaXNlY29uZCcsXG4gICAgICAgIG06ICdtaW51dGUnLFxuICAgICAgICBtaW51dGVzOiAnbWludXRlJyxcbiAgICAgICAgbWludXRlOiAnbWludXRlJyxcbiAgICAgICAgTTogJ21vbnRoJyxcbiAgICAgICAgbW9udGhzOiAnbW9udGgnLFxuICAgICAgICBtb250aDogJ21vbnRoJyxcbiAgICAgICAgUTogJ3F1YXJ0ZXInLFxuICAgICAgICBxdWFydGVyczogJ3F1YXJ0ZXInLFxuICAgICAgICBxdWFydGVyOiAncXVhcnRlcicsXG4gICAgICAgIHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmRzOiAnc2Vjb25kJyxcbiAgICAgICAgc2Vjb25kOiAnc2Vjb25kJyxcbiAgICAgICAgZ2c6ICd3ZWVrWWVhcicsXG4gICAgICAgIHdlZWt5ZWFyczogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXI6ICd3ZWVrWWVhcicsXG4gICAgICAgIEdHOiAnaXNvV2Vla1llYXInLFxuICAgICAgICBpc293ZWVreWVhcnM6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyOiAnaXNvV2Vla1llYXInLFxuICAgICAgICB3OiAnd2VlaycsXG4gICAgICAgIHdlZWtzOiAnd2VlaycsXG4gICAgICAgIHdlZWs6ICd3ZWVrJyxcbiAgICAgICAgVzogJ2lzb1dlZWsnLFxuICAgICAgICBpc293ZWVrczogJ2lzb1dlZWsnLFxuICAgICAgICBpc293ZWVrOiAnaXNvV2VlaycsXG4gICAgICAgIHk6ICd5ZWFyJyxcbiAgICAgICAgeWVhcnM6ICd5ZWFyJyxcbiAgICAgICAgeWVhcjogJ3llYXInLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVVbml0cyh1bml0cykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHVuaXRzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sXG4gICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgIHByb3A7XG5cbiAgICAgICAgZm9yIChwcm9wIGluIGlucHV0T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRJbnB1dDtcbiAgICB9XG5cbiAgICB2YXIgcHJpb3JpdGllcyA9IHtcbiAgICAgICAgZGF0ZTogOSxcbiAgICAgICAgZGF5OiAxMSxcbiAgICAgICAgd2Vla2RheTogMTEsXG4gICAgICAgIGlzb1dlZWtkYXk6IDExLFxuICAgICAgICBkYXlPZlllYXI6IDQsXG4gICAgICAgIGhvdXI6IDEzLFxuICAgICAgICBtaWxsaXNlY29uZDogMTYsXG4gICAgICAgIG1pbnV0ZTogMTQsXG4gICAgICAgIG1vbnRoOiA4LFxuICAgICAgICBxdWFydGVyOiA3LFxuICAgICAgICBzZWNvbmQ6IDE1LFxuICAgICAgICB3ZWVrWWVhcjogMSxcbiAgICAgICAgaXNvV2Vla1llYXI6IDEsXG4gICAgICAgIHdlZWs6IDUsXG4gICAgICAgIGlzb1dlZWs6IDUsXG4gICAgICAgIHllYXI6IDEsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldFByaW9yaXRpemVkVW5pdHModW5pdHNPYmopIHtcbiAgICAgICAgdmFyIHVuaXRzID0gW10sXG4gICAgICAgICAgICB1O1xuICAgICAgICBmb3IgKHUgaW4gdW5pdHNPYmopIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKHVuaXRzT2JqLCB1KSkge1xuICAgICAgICAgICAgICAgIHVuaXRzLnB1c2goeyB1bml0OiB1LCBwcmlvcml0eTogcHJpb3JpdGllc1t1XSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1bml0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdW5pdHM7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoMSA9IC9cXGQvLCAvLyAgICAgICAwIC0gOVxuICAgICAgICBtYXRjaDIgPSAvXFxkXFxkLywgLy8gICAgICAwMCAtIDk5XG4gICAgICAgIG1hdGNoMyA9IC9cXGR7M30vLCAvLyAgICAgMDAwIC0gOTk5XG4gICAgICAgIG1hdGNoNCA9IC9cXGR7NH0vLCAvLyAgICAwMDAwIC0gOTk5OVxuICAgICAgICBtYXRjaDYgPSAvWystXT9cXGR7Nn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMiA9IC9cXGRcXGQ/LywgLy8gICAgICAgMCAtIDk5XG4gICAgICAgIG1hdGNoM3RvNCA9IC9cXGRcXGRcXGRcXGQ/LywgLy8gICAgIDk5OSAtIDk5OTlcbiAgICAgICAgbWF0Y2g1dG82ID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vLCAvLyAgIDk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMyA9IC9cXGR7MSwzfS8sIC8vICAgICAgIDAgLSA5OTlcbiAgICAgICAgbWF0Y2gxdG80ID0gL1xcZHsxLDR9LywgLy8gICAgICAgMCAtIDk5OTlcbiAgICAgICAgbWF0Y2gxdG82ID0gL1srLV0/XFxkezEsNn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoVW5zaWduZWQgPSAvXFxkKy8sIC8vICAgICAgIDAgLSBpbmZcbiAgICAgICAgbWF0Y2hTaWduZWQgPSAvWystXT9cXGQrLywgLy8gICAgLWluZiAtIGluZlxuICAgICAgICBtYXRjaE9mZnNldCA9IC9afFsrLV1cXGRcXGQ6P1xcZFxcZC9naSwgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naSwgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hUaW1lc3RhbXAgPSAvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vLCAvLyAxMjM0NTY3ODkgMTIzNDU2Nzg5LjEyM1xuICAgICAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICAgICAgLy8gaW5jbHVkZXMgc2NvdHRpc2ggZ2FlbGljIHR3byB3b3JkIGFuZCBoeXBoZW5hdGVkIG1vbnRoc1xuICAgICAgICBtYXRjaFdvcmQgPVxuICAgICAgICAgICAgL1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksXG4gICAgICAgIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8gPSAvXlsxLTldXFxkPy8sIC8vICAgICAgICAgMS05OVxuICAgICAgICBtYXRjaDF0bzJIYXNaZXJvID0gL14oWzEtOV1cXGR8XFxkKS8sIC8vICAgICAgICAgICAwLTk5XG4gICAgICAgIHJlZ2V4ZXM7XG5cbiAgICByZWdleGVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRSZWdleFRva2VuKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KVxuICAgICAgICAgICAgPyByZWdleFxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpc1N0cmljdCAmJiBzdHJpY3RSZWdleCA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHJlZ2V4ZXMsIHRva2VuKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodW5lc2NhcGVGb3JtYXQodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWdleGVzW3Rva2VuXShjb25maWcuX3N0cmljdCwgY29uZmlnLl9sb2NhbGUpO1xuICAgIH1cblxuICAgIC8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjE0OTMvaXMtdGhlcmUtYS1yZWdleHAtZXNjYXBlLWZ1bmN0aW9uLWluLWphdmFzY3JpcHRcbiAgICBmdW5jdGlvbiB1bmVzY2FwZUZvcm1hdChzKSB7XG4gICAgICAgIHJldHVybiByZWdleEVzY2FwZShcbiAgICAgICAgICAgIHNcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxcXCcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvXFxcXChcXFspfFxcXFwoXFxdKXxcXFsoW15cXF1cXFtdKilcXF18XFxcXCguKS9nLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAobWF0Y2hlZCwgcDEsIHAyLCBwMywgcDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwMSB8fCBwMiB8fCBwMyB8fCBwNDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0Zsb29yKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgLy8gLTAgLT4gMFxuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpIHx8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JbnQoYXJndW1lbnRGb3JDb2VyY2lvbikge1xuICAgICAgICB2YXIgY29lcmNlZE51bWJlciA9ICthcmd1bWVudEZvckNvZXJjaW9uLFxuICAgICAgICAgICAgdmFsdWUgPSAwO1xuXG4gICAgICAgIGlmIChjb2VyY2VkTnVtYmVyICE9PSAwICYmIGlzRmluaXRlKGNvZXJjZWROdW1iZXIpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGFic0Zsb29yKGNvZXJjZWROdW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZnVuYyA9IGNhbGxiYWNrLFxuICAgICAgICAgICAgdG9rZW5MZW47XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0b2tlbiA9IFt0b2tlbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTnVtYmVyKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBhcnJheVtjYWxsYmFja10gPSB0b0ludChpbnB1dCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRva2VuTGVuID0gdG9rZW4ubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5MZW47IGkrKykge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuW2ldXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgY29uZmlnLl93ID0gY29uZmlnLl93IHx8IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2soaW5wdXQsIGNvbmZpZy5fdywgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBpbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGhhc093blByb3AodG9rZW5zLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbl0oaW5wdXQsIGNvbmZpZy5fYSwgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH1cblxuICAgIHZhciBZRUFSID0gMCxcbiAgICAgICAgTU9OVEggPSAxLFxuICAgICAgICBEQVRFID0gMixcbiAgICAgICAgSE9VUiA9IDMsXG4gICAgICAgIE1JTlVURSA9IDQsXG4gICAgICAgIFNFQ09ORCA9IDUsXG4gICAgICAgIE1JTExJU0VDT05EID0gNixcbiAgICAgICAgV0VFSyA9IDcsXG4gICAgICAgIFdFRUtEQVkgPSA4O1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyB6ZXJvRmlsbCh5LCA0KSA6ICcrJyArIHk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZJywgNF0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsIDVdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdZJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVknLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ1lZWVlZJywgJ1lZWVlZWSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9XG4gICAgICAgICAgICBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTtcbiAgICB9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFllYXIgPSBtYWtlR2V0U2V0KCdGdWxsWWVhcicsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNMZWFwWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXRTZXQodW5pdCwga2VlcFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzZXQkMSh0aGlzLCB1bml0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIGtlZXBUaW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQobW9tLCB1bml0KSB7XG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkID0gbW9tLl9kLFxuICAgICAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ01pbGxpc2Vjb25kcygpIDogZC5nZXRNaWxsaXNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ1NlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDU2Vjb25kcygpIDogZC5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgICBjYXNlICdNaW51dGVzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ01pbnV0ZXMoKSA6IGQuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDSG91cnMoKSA6IGQuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRGF0ZSgpIDogZC5nZXREYXRlKCk7XG4gICAgICAgICAgICBjYXNlICdEYXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRGF5KCkgOiBkLmdldERheSgpO1xuICAgICAgICAgICAgY2FzZSAnTW9udGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTW9udGgoKSA6IGQuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ0Z1bGxZZWFyKCkgOiBkLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBOYU47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0JDEobW9tLCB1bml0LCB2YWx1ZSkge1xuICAgICAgICB2YXIgZCwgaXNVVEMsIHllYXIsIG1vbnRoLCBkYXRlO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGQgPSBtb20uX2Q7XG4gICAgICAgIGlzVVRDID0gbW9tLl9pc1VUQztcblxuICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgICAgIGNhc2UgJ01pbGxpc2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDXG4gICAgICAgICAgICAgICAgICAgID8gZC5zZXRVVENNaWxsaXNlY29uZHModmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogZC5zZXRNaWxsaXNlY29uZHModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ1NlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDU2Vjb25kcyh2YWx1ZSkgOiBkLnNldFNlY29uZHModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDTWludXRlcyh2YWx1ZSkgOiBkLnNldE1pbnV0ZXModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0hvdXJzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ0hvdXJzKHZhbHVlKSA6IGQuc2V0SG91cnModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF0ZSh2YWx1ZSkgOiBkLnNldERhdGUodmFsdWUpKTtcbiAgICAgICAgICAgIC8vIGNhc2UgJ0RheSc6IC8vIE5vdCByZWFsXG4gICAgICAgICAgICAvLyAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ0RheSh2YWx1ZSkgOiBkLnNldERheSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnTW9udGgnOiAvLyBOb3QgdXNlZCBiZWNhdXNlIHdlIG5lZWQgdG8gcGFzcyB0d28gdmFyaWFibGVzXG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNb250aCh2YWx1ZSkgOiBkLnNldE1vbnRoKHZhbHVlKSk7XG4gICAgICAgICAgICBjYXNlICdGdWxsWWVhcic6XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIFNlZSBiZWxvdyAuLi5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBKdXN0IGluIGNhc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHllYXIgPSB2YWx1ZTtcbiAgICAgICAgbW9udGggPSBtb20ubW9udGgoKTtcbiAgICAgICAgZGF0ZSA9IG1vbS5kYXRlKCk7XG4gICAgICAgIGRhdGUgPSBkYXRlID09PSAyOSAmJiBtb250aCA9PT0gMSAmJiAhaXNMZWFwWWVhcih5ZWFyKSA/IDI4IDogZGF0ZTtcbiAgICAgICAgdm9pZCAoaXNVVENcbiAgICAgICAgICAgID8gZC5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF0ZSlcbiAgICAgICAgICAgIDogZC5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF0ZSkpO1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHN0cmluZ0dldCh1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTZXQodW5pdHMsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdW5pdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIHZhciBwcmlvcml0aXplZCA9IGdldFByaW9yaXRpemVkVW5pdHModW5pdHMpLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgcHJpb3JpdGl6ZWRMZW4gPSBwcmlvcml0aXplZC5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpb3JpdGl6ZWRMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXNbcHJpb3JpdGl6ZWRbaV0udW5pdF0odW5pdHNbcHJpb3JpdGl6ZWRbaV0udW5pdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vZChuLCB4KSB7XG4gICAgICAgIHJldHVybiAoKG4gJSB4KSArIHgpICUgeDtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXhPZjtcblxuICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xuICAgICAgICBpbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXhPZiA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAvLyBJIGtub3dcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tpXSA9PT0gbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgICAgaWYgKGlzTmFOKHllYXIpIHx8IGlzTmFOKG1vbnRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbW9kTW9udGggPSBtb2QobW9udGgsIDEyKTtcbiAgICAgICAgeWVhciArPSAobW9udGggLSBtb2RNb250aCkgLyAxMjtcbiAgICAgICAgcmV0dXJuIG1vZE1vbnRoID09PSAxXG4gICAgICAgICAgICA/IGlzTGVhcFllYXIoeWVhcilcbiAgICAgICAgICAgICAgICA/IDI5XG4gICAgICAgICAgICAgICAgOiAyOFxuICAgICAgICAgICAgOiAzMSAtICgobW9kTW9udGggJSA3KSAlIDIpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNJywgWydNTScsIDJdLCAnTW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoKCkgKyAxO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignTScsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignTU0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTScsICdNTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9IHRvSW50KGlucHV0KSAtIDE7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTU1NJywgJ01NTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbW9udGggPSBjb25maWcuX2xvY2FsZS5tb250aHNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgYSBtb250aCBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWQuXG4gICAgICAgIGlmIChtb250aCAhPSBudWxsKSB7XG4gICAgICAgICAgICBhcnJheVtNT05USF0gPSBtb250aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRNb250aCA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRocyA9XG4gICAgICAgICAgICAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQgPVxuICAgICAgICAgICAgJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICBNT05USFNfSU5fRk9STUFUID0gL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT8vLFxuICAgICAgICBkZWZhdWx0TW9udGhzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1JlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzWydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbXG4gICAgICAgICAgICAgICAgICAodGhpcy5fbW9udGhzLmlzRm9ybWF0IHx8IE1PTlRIU19JTl9GT1JNQVQpLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzU2hvcnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFtcbiAgICAgICAgICAgICAgICAgIE1PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IG1vbnRoTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkXG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRoc1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1BhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZS5jYWxsKHRoaXMsIG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogYWRkIHNvcnRpbmdcbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlclxuICAgICAgICAvLyBzZWUgc29ydGluZyBpbiBjb21wdXRlTW9udGhzUGFyc2VcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiAhdGhpcy5fbW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzZXRNb250aChtb20sIHZhbHVlKSB7XG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQW5vdGhlciBzaWxlbnQgZmFpbHVyZT9cbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtb250aCA9IHZhbHVlLFxuICAgICAgICAgICAgZGF0ZSA9IG1vbS5kYXRlKCk7XG5cbiAgICAgICAgZGF0ZSA9IGRhdGUgPCAyOSA/IGRhdGUgOiBNYXRoLm1pbihkYXRlLCBkYXlzSW5Nb250aChtb20ueWVhcigpLCBtb250aCkpO1xuICAgICAgICB2b2lkIChtb20uX2lzVVRDXG4gICAgICAgICAgICA/IG1vbS5fZC5zZXRVVENNb250aChtb250aCwgZGF0ZSlcbiAgICAgICAgICAgIDogbW9tLl9kLnNldE1vbnRoKG1vbnRoLCBkYXRlKSk7XG4gICAgICAgIHJldHVybiBtb207XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TW9udGgodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnTW9udGgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERheXNJbk1vbnRoKCkge1xuICAgICAgICByZXR1cm4gZGF5c0luTW9udGgodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBkZWZhdWx0TW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVNb250aHNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIHNob3J0UCxcbiAgICAgICAgICAgIGxvbmdQO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIHNob3J0UCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ1AgPSByZWdleEVzY2FwZSh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0UCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ1ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0UCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xuICAgICAgICAvLyBjYW4ndCBqdXN0IGFwcGx5KCkgdG8gY3JlYXRlIGEgZGF0ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSh5KSB7XG4gICAgICAgIHZhciBkYXRlLCBhcmdzO1xuICAgICAgICAvLyB0aGUgRGF0ZS5VVEMgZnVuY3Rpb24gcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgYXJnc1swXSA9IHkgKyA0MDA7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQtb2YtZmlyc3Qtd2VlayAtIHN0YXJ0LW9mLXllYXJcbiAgICBmdW5jdGlvbiBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIC8vIGZpcnN0LXdlZWsgZGF5IC0tIHdoaWNoIGphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrICg0IGZvciBpc28sIDEgZm9yIG90aGVyKVxuICAgICAgICAgICAgZndkID0gNyArIGRvdyAtIGRveSxcbiAgICAgICAgICAgIC8vIGZpcnN0LXdlZWsgZGF5IGxvY2FsIHdlZWtkYXkgLS0gd2hpY2ggbG9jYWwgd2Vla2RheSBpcyBmd2RcbiAgICAgICAgICAgIGZ3ZGx3ID0gKDcgKyBjcmVhdGVVVENEYXRlKHllYXIsIDAsIGZ3ZCkuZ2V0VVRDRGF5KCkgLSBkb3cpICUgNztcblxuICAgICAgICByZXR1cm4gLWZ3ZGx3ICsgZndkIC0gMTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlI0NhbGN1bGF0aW5nX2FfZGF0ZV9naXZlbl90aGVfeWVhci4yQ193ZWVrX251bWJlcl9hbmRfd2Vla2RheVxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgbG9jYWxXZWVrZGF5ID0gKDcgKyB3ZWVrZGF5IC0gZG93KSAlIDcsXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRheU9mWWVhciA9IDEgKyA3ICogKHdlZWsgLSAxKSArIGxvY2FsV2Vla2RheSArIHdlZWtPZmZzZXQsXG4gICAgICAgICAgICByZXNZZWFyLFxuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyO1xuXG4gICAgICAgIGlmIChkYXlPZlllYXIgPD0gMCkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgLSAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5c0luWWVhcihyZXNZZWFyKSArIGRheU9mWWVhcjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXIpKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciArIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXIgLSBkYXlzSW5ZZWFyKHllYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXI7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgICAgIGRheU9mWWVhcjogcmVzRGF5T2ZZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldChtb20ueWVhcigpLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrID0gTWF0aC5mbG9vcigobW9tLmRheU9mWWVhcigpIC0gd2Vla09mZnNldCAtIDEpIC8gNykgKyAxLFxuICAgICAgICAgICAgcmVzV2VlayxcbiAgICAgICAgICAgIHJlc1llYXI7XG5cbiAgICAgICAgaWYgKHdlZWsgPCAxKSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSAtIDE7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayArIHdlZWtzSW5ZZWFyKHJlc1llYXIsIGRvdywgZG95KTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrID4gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayAtIHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KTtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2VlazogcmVzV2VlayxcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla3NJblllYXIoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2Vla09mZnNldE5leHQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciArIDEsIGRvdywgZG95KTtcbiAgICAgICAgcmV0dXJuIChkYXlzSW5ZZWFyKHllYXIpIC0gd2Vla09mZnNldCArIHdlZWtPZmZzZXROZXh0KSAvIDc7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3cnLCBbJ3d3JywgMl0sICd3bycsICd3ZWVrJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ1cnLCBbJ1dXJywgMl0sICdXbycsICdpc29XZWVrJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCd3dycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdXJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ3cnLCAnd3cnLCAnVycsICdXVyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDEpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mV2VlaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdlJywgMCwgMCwgJ3dlZWtkYXknKTtcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdkJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdlJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdFJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNNaW5SZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkZCcsICdkZGQnLCAnZGRkZCddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIHdlZWtkYXkgPSBjb25maWcuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgd2Vla2RheSBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWRcbiAgICAgICAgaWYgKHdlZWtkYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2Vlay5kID0gd2Vla2RheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRXZWVrZGF5ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZCcsICdlJywgJ0UnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0ID0gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VJc29XZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCkgJSA3IHx8IDc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTmFOKGlucHV0KSA/IG51bGwgOiBpbnB1dDtcbiAgICB9XG5cbiAgICAvLyBMT0NBTEVTXG4gICAgZnVuY3Rpb24gc2hpZnRXZWVrZGF5cyh3cywgbikge1xuICAgICAgICByZXR1cm4gd3Muc2xpY2UobiwgNykuY29uY2F0KHdzLnNsaWNlKDAsIG4pKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzID1cbiAgICAgICAgICAgICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQgPSAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4gPSAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1JlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNNaW5SZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKVxuICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1xuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1tcbiAgICAgICAgICAgICAgICAgIG0gJiYgbSAhPT0gdHJ1ZSAmJiB0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh3ZWVrZGF5cywgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB3ZWVrZGF5c1ttLmRheSgpXVxuICAgICAgICAgICAgICA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzU2hvcnQobSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzU2hvcnQsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXVxuICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNNaW4obSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzTWluLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IHdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNNaW4oXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1BhcnNlKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UkMS5jYWxsKHRoaXMsIHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuXG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXMobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRheSA9IGdldCh0aGlzLCAnRGF5Jyk7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHBhcnNlV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGlucHV0IC0gZGF5LCAnZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRheTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldExvY2FsZURheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdlZWtkYXkgPSAodGhpcy5kYXkoKSArIDcgLSB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpICUgNztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrZGF5IDogdGhpcy5hZGQoaW5wdXQgLSB3ZWVrZGF5LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT0RheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vbWVudCNkYXkgZXhjZXB0XG4gICAgICAgIC8vIGFzIGEgZ2V0dGVyLCByZXR1cm5zIDcgaW5zdGVhZCBvZiAwICgxLTcgcmFuZ2UgaW5zdGVhZCBvZiAwLTYpXG4gICAgICAgIC8vIGFzIGEgc2V0dGVyLCBzdW5kYXkgc2hvdWxkIGJlbG9uZyB0byB0aGUgcHJldmlvdXMgd2Vlay5cblxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHdlZWtkYXkgPSBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSh0aGlzLmRheSgpICUgNyA/IHdlZWtkYXkgOiB3ZWVrZGF5IC0gNyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSB8fCA3O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzTWluUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSBkZWZhdWx0V2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZVdlZWtkYXlzUGFyc2UoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5QaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIG1pbnAsXG4gICAgICAgICAgICBzaG9ydHAsXG4gICAgICAgICAgICBsb25ncDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBtaW5wID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c01pbihtb20sICcnKSk7XG4gICAgICAgICAgICBzaG9ydHAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ3AgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1pblBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIHdlZWtkYXkgKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBtaW5QaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbWluUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIGhGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgJSAxMiB8fCAxMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpIHx8IDI0O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdIJywgWydISCcsIDJdLCAwLCAnaG91cicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdoJywgWydoaCcsIDJdLCAwLCBoRm9ybWF0KTtcbiAgICBhZGRGb3JtYXRUb2tlbignaycsIFsna2snLCAyXSwgMCwga0Zvcm1hdCk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgaEZvcm1hdC5hcHBseSh0aGlzKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyB0aGlzLmhvdXJzKCkgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICB0aGlzLmhvdXJzKCkgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW0odG9rZW4sIGxvd2VyY2FzZSkge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKFxuICAgICAgICAgICAgICAgIHRoaXMuaG91cnMoKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgICAgICBsb3dlcmNhc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lcmlkaWVtKCdhJywgdHJ1ZSk7XG4gICAgbWVyaWRpZW0oJ0EnLCBmYWxzZSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBmdW5jdGlvbiBtYXRjaE1lcmlkaWVtKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fbWVyaWRpZW1QYXJzZTtcbiAgICB9XG5cbiAgICBhZGRSZWdleFRva2VuKCdhJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignQScsIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0gnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMkhhc1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2gnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2snLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0hIJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2hoJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2trJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignaG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdobW1zcycsIG1hdGNoNXRvNik7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW1zcycsIG1hdGNoNXRvNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnSCcsICdISCddLCBIT1VSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaycsICdrayddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIGtJbnB1dCA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSBrSW5wdXQgPT09IDI0ID8gMCA6IGtJbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnYScsICdBJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2lzUG0gPSBjb25maWcuX2xvY2FsZS5pc1BNKGlucHV0KTtcbiAgICAgICAgY29uZmlnLl9tZXJpZGllbSA9IGlucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydoJywgJ2hoJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgICAgIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUlzUE0oaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IFF1aXJrcyBNb2RlICYgSUU3IFN0YW5kYXJkcyBNb2RlIGRvIG5vdCBhbGxvdyBhY2Nlc3Npbmcgc3RyaW5ncyBsaWtlIGFycmF5c1xuICAgICAgICAvLyBVc2luZyBjaGFyQXQgc2hvdWxkIGJlIG1vcmUgY29tcGF0aWJsZS5cbiAgICAgICAgcmV0dXJuIChpbnB1dCArICcnKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSA9PT0gJ3AnO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSA9IC9bYXBdXFwuP20/XFwuPy9pLFxuICAgICAgICAvLyBTZXR0aW5nIHRoZSBob3VyIHNob3VsZCBrZWVwIHRoZSB0aW1lLCBiZWNhdXNlIHRoZSB1c2VyIGV4cGxpY2l0bHlcbiAgICAgICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgdGhleSB3YW50LiBTbyB0cnlpbmcgdG8gbWFpbnRhaW4gdGhlIHNhbWUgaG91ciAoaW5cbiAgICAgICAgLy8gYSBuZXcgdGltZXpvbmUpIG1ha2VzIHNlbnNlLiBBZGRpbmcvc3VidHJhY3RpbmcgaG91cnMgZG9lcyBub3QgZm9sbG93XG4gICAgICAgIC8vIHRoaXMgcnVsZS5cbiAgICAgICAgZ2V0U2V0SG91ciA9IG1ha2VHZXRTZXQoJ0hvdXJzJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNZXJpZGllbShob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncG0nIDogJ1BNJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2FtJyA6ICdBTSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYmFzZUNvbmZpZyA9IHtcbiAgICAgICAgY2FsZW5kYXI6IGRlZmF1bHRDYWxlbmRhcixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IGRlZmF1bHRMb25nRGF0ZUZvcm1hdCxcbiAgICAgICAgaW52YWxpZERhdGU6IGRlZmF1bHRJbnZhbGlkRGF0ZSxcbiAgICAgICAgb3JkaW5hbDogZGVmYXVsdE9yZGluYWwsXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlLFxuICAgICAgICByZWxhdGl2ZVRpbWU6IGRlZmF1bHRSZWxhdGl2ZVRpbWUsXG5cbiAgICAgICAgbW9udGhzOiBkZWZhdWx0TG9jYWxlTW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LFxuXG4gICAgICAgIHdlZWs6IGRlZmF1bHRMb2NhbGVXZWVrLFxuXG4gICAgICAgIHdlZWtkYXlzOiBkZWZhdWx0TG9jYWxlV2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LFxuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlLFxuICAgIH07XG5cbiAgICAvLyBpbnRlcm5hbCBzdG9yYWdlIGZvciBsb2NhbGUgY29uZmlnIGZpbGVzXG4gICAgdmFyIGxvY2FsZXMgPSB7fSxcbiAgICAgICAgbG9jYWxlRmFtaWxpZXMgPSB7fSxcbiAgICAgICAgZ2xvYmFsTG9jYWxlO1xuXG4gICAgZnVuY3Rpb24gY29tbW9uUHJlZml4KGFycjEsIGFycjIpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBtaW5sID0gTWF0aC5taW4oYXJyMS5sZW5ndGgsIGFycjIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG1pbmw7IGkgKz0gMSkge1xuICAgICAgICAgICAgaWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlubDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVMb2NhbGUoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgPyBrZXkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdfJywgJy0nKSA6IGtleTtcbiAgICB9XG5cbiAgICAvLyBwaWNrIHRoZSBsb2NhbGUgZnJvbSB0aGUgYXJyYXlcbiAgICAvLyB0cnkgWydlbi1hdScsICdlbi1nYiddIGFzICdlbi1hdScsICdlbi1nYicsICdlbicsIGFzIGluIG1vdmUgdGhyb3VnaCB0aGUgbGlzdCB0cnlpbmcgZWFjaFxuICAgIC8vIHN1YnN0cmluZyBmcm9tIG1vc3Qgc3BlY2lmaWMgdG8gbGVhc3QsIGJ1dCBtb3ZlIHRvIHRoZSBuZXh0IGFycmF5IGl0ZW0gaWYgaXQncyBhIG1vcmUgc3BlY2lmaWMgdmFyaWFudCB0aGFuIHRoZSBjdXJyZW50IHJvb3RcbiAgICBmdW5jdGlvbiBjaG9vc2VMb2NhbGUobmFtZXMpIHtcbiAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgaixcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBzcGxpdDtcblxuICAgICAgICB3aGlsZSAoaSA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3BsaXQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaV0pLnNwbGl0KCctJyk7XG4gICAgICAgICAgICBqID0gc3BsaXQubGVuZ3RoO1xuICAgICAgICAgICAgbmV4dCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpICsgMV0pO1xuICAgICAgICAgICAgbmV4dCA9IG5leHQgPyBuZXh0LnNwbGl0KCctJykgOiBudWxsO1xuICAgICAgICAgICAgd2hpbGUgKGogPiAwKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShzcGxpdC5zbGljZSgwLCBqKS5qb2luKCctJykpO1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBuZXh0ICYmXG4gICAgICAgICAgICAgICAgICAgIG5leHQubGVuZ3RoID49IGogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uUHJlZml4KHNwbGl0LCBuZXh0KSA+PSBqIC0gMVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvL3RoZSBuZXh0IGFycmF5IGl0ZW0gaXMgYmV0dGVyIHRoYW4gYSBzaGFsbG93ZXIgc3Vic3RyaW5nIG9mIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsZU5hbWVTYW5lKG5hbWUpIHtcbiAgICAgICAgLy8gUHJldmVudCBuYW1lcyB0aGF0IGxvb2sgbGlrZSBmaWxlc3lzdGVtIHBhdGhzLCBpLmUgY29udGFpbiAnLycgb3IgJ1xcJ1xuICAgICAgICAvLyBFbnN1cmUgbmFtZSBpcyBhdmFpbGFibGUgYW5kIGZ1bmN0aW9uIHJldHVybnMgYm9vbGVhblxuICAgICAgICByZXR1cm4gISEobmFtZSAmJiBuYW1lLm1hdGNoKCdeW14vXFxcXFxcXFxdKiQnKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZExvY2FsZShuYW1lKSB7XG4gICAgICAgIHZhciBvbGRMb2NhbGUgPSBudWxsLFxuICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmU7XG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIG1vZHVsZSAmJlxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgJiZcbiAgICAgICAgICAgIGlzTG9jYWxlTmFtZVNhbmUobmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUoJy4vbG9jYWxlLycgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUob2xkTG9jYWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGFzIG5vdCBmb3VuZCB0byBhdm9pZCByZXBlYXRpbmcgZXhwZW5zaXZlIGZpbGUgcmVxdWlyZSBjYWxsIGNhdXNpbmcgaGlnaCBDUFVcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBmaW5kIGVuLVVTLCBlbl9VUywgZW4tdXMgZm9yIGV2ZXJ5IGZvcm1hdCBjYWxsXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG51bGw7IC8vIG51bGwgbWVhbnMgbm90IGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGxvYWQgbG9jYWxlIGFuZCB0aGVuIHNldCB0aGUgZ2xvYmFsIGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIGZ1bmN0aW9uIGdldFNldEdsb2JhbExvY2FsZShrZXksIHZhbHVlcykge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vd2FybiB1c2VyIGlmIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGJ1dCB0aGUgbG9jYWxlIGNvdWxkIG5vdCBiZSBzZXRcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0xvY2FsZSAnICsga2V5ICsgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/J1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmaW5lTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICAnZGVmaW5lTG9jYWxlT3ZlcnJpZGUnLFxuICAgICAgICAgICAgICAgICAgICAndXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tuYW1lXS5fY29uZmlnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0uX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGNvbmZpZy5wYXJlbnRMb2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBuZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZykpO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlRmFtaWxpZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZUxvY2FsZSh4Lm5hbWUsIHguY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBsb2NhbGUgQUZURVIgYWxsIGNoaWxkIGxvY2FsZXMgaGF2ZSBiZWVuXG4gICAgICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB1c2VmdWwgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcblxuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCAmJiBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNoaWxkIGxvY2FsZSBpbi1wbGFjZSB0byBhdm9pZCBtZW1vcnktbGVha3NcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdLnNldChtZXJnZUNvbmZpZ3MobG9jYWxlc1tuYW1lXS5fY29uZmlnLCBjb25maWcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTUVSR0VcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUgPSBsb2FkTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSB0bXBMb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uZmlnID0gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlTG9jYWxlIGlzIGNhbGxlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBhYmJyIHNvIGl0IHdpbGwgaGF2ZSBhIG5hbWUgKGdldHRlcnMgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBvdGhlcndpc2UpLlxuICAgICAgICAgICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgICAgICBsb2NhbGUucGFyZW50TG9jYWxlID0gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHBhc3MgbnVsbCBmb3IgY29uZmlnIHRvIHVudXBkYXRlLCB1c2VmdWwgZm9yIHRlc3RzXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZ2V0U2V0R2xvYmFsTG9jYWxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxvY2FsZSBkYXRhXG4gICAgZnVuY3Rpb24gZ2V0TG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbG9jYWxlO1xuXG4gICAgICAgIGlmIChrZXkgJiYga2V5Ll9sb2NhbGUgJiYga2V5Ll9sb2NhbGUuX2FiYnIpIHtcbiAgICAgICAgICAgIGtleSA9IGtleS5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAgLy9zaG9ydC1jaXJjdWl0IGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXkgPSBba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaG9vc2VMb2NhbGUoa2V5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TG9jYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIGtleXMobG9jYWxlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tPdmVyZmxvdyhtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdyxcbiAgICAgICAgICAgIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSA8IDAgfHwgYVtNT05USF0gPiAxMVxuICAgICAgICAgICAgICAgICAgICA/IE1PTlRIXG4gICAgICAgICAgICAgICAgICAgIDogYVtEQVRFXSA8IDEgfHwgYVtEQVRFXSA+IGRheXNJbk1vbnRoKGFbWUVBUl0sIGFbTU9OVEhdKVxuICAgICAgICAgICAgICAgICAgICAgID8gREFURVxuICAgICAgICAgICAgICAgICAgICAgIDogYVtIT1VSXSA8IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYVtIT1VSXSA+IDI0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIChhW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbTUlOVVRFXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbU0VDT05EXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbTUlMTElTRUNPTkRdICE9PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gSE9VUlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhW01JTlVURV0gPCAwIHx8IGFbTUlOVVRFXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gTUlOVVRFXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYVtTRUNPTkRdIDwgMCB8fCBhW1NFQ09ORF0gPiA1OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU0VDT05EXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW01JTExJU0VDT05EXSA8IDAgfHwgYVtNSUxMSVNFQ09ORF0gPiA5OTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUlMTElTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93RGF5T2ZZZWFyICYmXG4gICAgICAgICAgICAgICAgKG92ZXJmbG93IDwgWUVBUiB8fCBvdmVyZmxvdyA+IERBVEUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtzICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFSztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla2RheSAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUtEQVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gaXNvIDg2MDEgcmVnZXhcbiAgICAvLyAwMDAwLTAwLTAwIDAwMDAtVzAwIG9yIDAwMDAtVzAwLTAgKyBUICsgMDAgb3IgMDA6MDAgb3IgMDA6MDA6MDAgb3IgMDA6MDA6MDAuMDAwICsgKzAwOjAwIG9yICswMDAwIG9yICswMClcbiAgICB2YXIgZXh0ZW5kZWRJc29SZWdleCA9XG4gICAgICAgICAgICAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICAgICAgYmFzaWNJc29SZWdleCA9XG4gICAgICAgICAgICAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pKD86XFxkXFxkXFxkXFxkfFdcXGRcXGRcXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkfCkpKD86KFR8ICkoXFxkXFxkKD86XFxkXFxkKD86XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICB0elJlZ2V4ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vLFxuICAgICAgICBpc29EYXRlcyA9IFtcbiAgICAgICAgICAgIFsnWVlZWVlZLU1NLUREJywgL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydZWVlZLU1NLUREJywgL1xcZHs0fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cXGR7NH0tV1xcZFxcZC1cXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVycsIC9cXGR7NH0tV1xcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWS1EREQnLCAvXFxkezR9LVxcZHszfS9dLFxuICAgICAgICAgICAgWydZWVlZLU1NJywgL1xcZHs0fS1cXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlZWU1NREQnLCAvWystXVxcZHsxMH0vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NREQnLCAvXFxkezh9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XV0UnLCAvXFxkezR9V1xcZHszfS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1cnLCAvXFxkezR9V1xcZHsyfS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWURERCcsIC9cXGR7N30vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NJywgL1xcZHs2fS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWScsIC9cXGR7NH0vLCBmYWxzZV0sXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGlzbyB0aW1lIGZvcm1hdHMgYW5kIHJlZ2V4ZXNcbiAgICAgICAgaXNvVGltZXMgPSBbXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLlNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLFNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISDptbScsIC9cXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW1zcy5TU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLFNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzJywgL1xcZFxcZFxcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tJywgL1xcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISCcsIC9cXGRcXGQvXSxcbiAgICAgICAgXSxcbiAgICAgICAgYXNwTmV0SnNvblJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2ksXG4gICAgICAgIC8vIFJGQyAyODIyIHJlZ2V4OiBGb3IgZGV0YWlscyBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4MjIjc2VjdGlvbi0zLjNcbiAgICAgICAgcmZjMjgyMiA9XG4gICAgICAgICAgICAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9cXHMpPyhcXGR7MSwyfSlcXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXFxzKFxcZHsyLDR9KVxccyhcXGRcXGQpOihcXGRcXGQpKD86OihcXGRcXGQpKT9cXHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cXGR7NH0pKSQvLFxuICAgICAgICBvYnNPZmZzZXRzID0ge1xuICAgICAgICAgICAgVVQ6IDAsXG4gICAgICAgICAgICBHTVQ6IDAsXG4gICAgICAgICAgICBFRFQ6IC00ICogNjAsXG4gICAgICAgICAgICBFU1Q6IC01ICogNjAsXG4gICAgICAgICAgICBDRFQ6IC01ICogNjAsXG4gICAgICAgICAgICBDU1Q6IC02ICogNjAsXG4gICAgICAgICAgICBNRFQ6IC02ICogNjAsXG4gICAgICAgICAgICBNU1Q6IC03ICogNjAsXG4gICAgICAgICAgICBQRFQ6IC03ICogNjAsXG4gICAgICAgICAgICBQU1Q6IC04ICogNjAsXG4gICAgICAgIH07XG5cbiAgICAvLyBkYXRlIGZyb20gaXNvIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JU08oY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIG1hdGNoID0gZXh0ZW5kZWRJc29SZWdleC5leGVjKHN0cmluZykgfHwgYmFzaWNJc29SZWdleC5leGVjKHN0cmluZyksXG4gICAgICAgICAgICBhbGxvd1RpbWUsXG4gICAgICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICAgICAgdGltZUZvcm1hdCxcbiAgICAgICAgICAgIHR6Rm9ybWF0LFxuICAgICAgICAgICAgaXNvRGF0ZXNMZW4gPSBpc29EYXRlcy5sZW5ndGgsXG4gICAgICAgICAgICBpc29UaW1lc0xlbiA9IGlzb1RpbWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmlzbyA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvRGF0ZXNMZW47IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNvRGF0ZXNbaV1bMV0uZXhlYyhtYXRjaFsxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IGlzb0RhdGVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICBhbGxvd1RpbWUgPSBpc29EYXRlc1tpXVsyXSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvVGltZXNMZW47IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzb1RpbWVzW2ldWzFdLmV4ZWMobWF0Y2hbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaFsyXSBzaG91bGQgYmUgJ1QnIG9yIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0ID0gKG1hdGNoWzJdIHx8ICcgJykgKyBpc29UaW1lc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFsbG93VGltZSAmJiB0aW1lRm9ybWF0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbNF0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHpSZWdleC5leGVjKG1hdGNoWzRdKSkge1xuICAgICAgICAgICAgICAgICAgICB0ekZvcm1hdCA9ICdaJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZy5fZiA9IGRhdGVGb3JtYXQgKyAodGltZUZvcm1hdCB8fCAnJykgKyAodHpGb3JtYXQgfHwgJycpO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICB5ZWFyU3RyLFxuICAgICAgICBtb250aFN0cixcbiAgICAgICAgZGF5U3RyLFxuICAgICAgICBob3VyU3RyLFxuICAgICAgICBtaW51dGVTdHIsXG4gICAgICAgIHNlY29uZFN0clxuICAgICkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW1xuICAgICAgICAgICAgdW50cnVuY2F0ZVllYXIoeWVhclN0ciksXG4gICAgICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0ciksXG4gICAgICAgICAgICBwYXJzZUludChkYXlTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGhvdXJTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbnV0ZVN0ciwgMTApLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChzZWNvbmRTdHIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlSW50KHNlY29uZFN0ciwgMTApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhclN0cikge1xuICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KHllYXJTdHIsIDEwKTtcbiAgICAgICAgaWYgKHllYXIgPD0gNDkpIHtcbiAgICAgICAgICAgIHJldHVybiAyMDAwICsgeWVhcjtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyIDw9IDk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIDE5MDAgKyB5ZWFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXByb2Nlc3NSRkMyODIyKHMpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGNvbW1lbnRzIGFuZCBmb2xkaW5nIHdoaXRlc3BhY2UgYW5kIHJlcGxhY2UgbXVsdGlwbGUtc3BhY2VzIHdpdGggYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgcmV0dXJuIHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXigpXSpcXCl8W1xcblxcdF0vZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvXlxcc1xccyovLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1dlZWtkYXkod2Vla2RheVN0ciwgcGFyc2VkSW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAod2Vla2RheVN0cikge1xuICAgICAgICAgICAgLy8gVE9ETzogUmVwbGFjZSB0aGUgdmFuaWxsYSBKUyBEYXRlIG9iamVjdCB3aXRoIGFuIGluZGVwZW5kZW50IGRheS1vZi13ZWVrIGNoZWNrLlxuICAgICAgICAgICAgdmFyIHdlZWtkYXlQcm92aWRlZCA9IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0ciksXG4gICAgICAgICAgICAgICAgd2Vla2RheUFjdHVhbCA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFswXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMV0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzJdXG4gICAgICAgICAgICAgICAgKS5nZXREYXkoKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5UHJvdmlkZWQgIT09IHdlZWtkYXlBY3R1YWwpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVPZmZzZXQob2JzT2Zmc2V0LCBtaWxpdGFyeU9mZnNldCwgbnVtT2Zmc2V0KSB7XG4gICAgICAgIGlmIChvYnNPZmZzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNPZmZzZXRzW29ic09mZnNldF07XG4gICAgICAgIH0gZWxzZSBpZiAobWlsaXRhcnlPZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGFsbG93ZWQgbWlsaXRhcnkgdHogaXMgWlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBwYXJzZUludChudW1PZmZzZXQsIDEwKSxcbiAgICAgICAgICAgICAgICBtID0gaG0gJSAxMDAsXG4gICAgICAgICAgICAgICAgaCA9IChobSAtIG0pIC8gMTAwO1xuICAgICAgICAgICAgcmV0dXJuIGggKiA2MCArIG07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGFuZCB0aW1lIGZyb20gcmVmIDI4MjIgZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHJmYzI4MjIuZXhlYyhwcmVwcm9jZXNzUkZDMjgyMihjb25maWcuX2kpKSxcbiAgICAgICAgICAgIHBhcnNlZEFycmF5O1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHBhcnNlZEFycmF5ID0gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgICAgICAgICBtYXRjaFs0XSxcbiAgICAgICAgICAgICAgICBtYXRjaFszXSxcbiAgICAgICAgICAgICAgICBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICBtYXRjaFs1XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs2XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs3XVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghY2hlY2tXZWVrZGF5KG1hdGNoWzFdLCBwYXJzZWRBcnJheSwgY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uZmlnLl9hID0gcGFyc2VkQXJyYXk7XG4gICAgICAgICAgICBjb25maWcuX3R6bSA9IGNhbGN1bGF0ZU9mZnNldChtYXRjaFs4XSwgbWF0Y2hbOV0sIG1hdGNoWzEwXSk7XG5cbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGNyZWF0ZVVUQ0RhdGUuYXBwbHkobnVsbCwgY29uZmlnLl9hKTtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnJmYzI4MjIgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gMSkgQVNQLk5FVCwgMikgSVNPLCAzKSBSRkMgMjgyMiBmb3JtYXRzLCBvciA0KSBvcHRpb25hbCBmYWxsYmFjayBpZiBwYXJzaW5nIGlzbid0IHN0cmljdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gYXNwTmV0SnNvblJlZ2V4LmV4ZWMoY29uZmlnLl9pKTtcbiAgICAgICAgaWYgKG1hdGNoZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX3N0cmljdCkge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaW5hbCBhdHRlbXB0LCB1c2UgSW5wdXQgRmFsbGJhY2tcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3ZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCAnICtcbiAgICAgICAgICAgICd3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlICcgK1xuICAgICAgICAgICAgJ2Rpc2NvdXJhZ2VkLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLicsXG4gICAgICAgIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5faSArIChjb25maWcuX3VzZVVUQyA/ICcgVVRDJyA6ICcnKSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxuICAgIGZ1bmN0aW9uIGRlZmF1bHRzKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3VycmVudERhdGVBcnJheShjb25maWcpIHtcbiAgICAgICAgLy8gaG9va3MgaXMgYWN0dWFsbHkgdGhlIGV4cG9ydGVkIG1vbWVudCBvYmplY3RcbiAgICAgICAgdmFyIG5vd1ZhbHVlID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENNb250aCgpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtub3dWYWx1ZS5nZXRGdWxsWWVhcigpLCBub3dWYWx1ZS5nZXRNb250aCgpLCBub3dWYWx1ZS5nZXREYXRlKCldO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBkYXRlLlxuICAgIC8vIHRoZSBhcnJheSBzaG91bGQgbWlycm9yIHRoZSBwYXJhbWV0ZXJzIGJlbG93XG4gICAgLy8gbm90ZTogYWxsIHZhbHVlcyBwYXN0IHRoZSB5ZWFyIGFyZSBvcHRpb25hbCBhbmQgd2lsbCBkZWZhdWx0IHRvIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUuXG4gICAgLy8gW3llYXIsIG1vbnRoLCBkYXkgLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBpbnB1dCA9IFtdLFxuICAgICAgICAgICAgY3VycmVudERhdGUsXG4gICAgICAgICAgICBleHBlY3RlZFdlZWtkYXksXG4gICAgICAgICAgICB5ZWFyVG9Vc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZyk7XG5cbiAgICAgICAgLy9jb21wdXRlIGRheSBvZiB0aGUgeWVhciBmcm9tIHdlZWtzIGFuZCB3ZWVrZGF5c1xuICAgICAgICBpZiAoY29uZmlnLl93ICYmIGNvbmZpZy5fYVtEQVRFXSA9PSBudWxsICYmIGNvbmZpZy5fYVtNT05USF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHRoZSBkYXkgb2YgdGhlIHllYXIgaXMgc2V0LCBmaWd1cmUgb3V0IHdoYXQgaXQgaXNcbiAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHllYXJUb1VzZSA9IGRlZmF1bHRzKGNvbmZpZy5fYVtZRUFSXSwgY3VycmVudERhdGVbWUVBUl0pO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXJUb1VzZSkgfHxcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7XG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgY29uZmlnLl9hW0RBVEVdID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheVxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxuICAgICAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmdcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFplcm8gb3V0IHdoYXRldmVyIHdhcyBub3QgZGVmYXVsdGVkLCBpbmNsdWRpbmcgdGltZVxuICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9PSBudWxsID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSU5VVEVdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTExJU0VDT05EXSA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdGVkV2Vla2RheSA9IGNvbmZpZy5fdXNlVVRDXG4gICAgICAgICAgICA/IGNvbmZpZy5fZC5nZXRVVENEYXkoKVxuICAgICAgICAgICAgOiBjb25maWcuX2QuZ2V0RGF5KCk7XG5cbiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgICAgIC8vIHdpdGggcGFyc2Vab25lLlxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX25leHREYXkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIG1pc21hdGNoaW5nIGRheSBvZiB3ZWVrXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fdyAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbmZpZy5fdy5kICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uZmlnLl93LmQgIT09IGV4cGVjdGVkV2Vla2RheVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKSB7XG4gICAgICAgIHZhciB3LCB3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3ksIHRlbXAsIHdlZWtkYXlPdmVyZmxvdywgY3VyV2VlaztcblxuICAgICAgICB3ID0gY29uZmlnLl93O1xuICAgICAgICBpZiAody5HRyAhPSBudWxsIHx8IHcuVyAhPSBudWxsIHx8IHcuRSAhPSBudWxsKSB7XG4gICAgICAgICAgICBkb3cgPSAxO1xuICAgICAgICAgICAgZG95ID0gNDtcblxuICAgICAgICAgICAgLy8gVE9ETzogV2UgbmVlZCB0byB0YWtlIHRoZSBjdXJyZW50IGlzb1dlZWtZZWFyLCBidXQgdGhhdCBkZXBlbmRzIG9uXG4gICAgICAgICAgICAvLyBob3cgd2UgaW50ZXJwcmV0IG5vdyAobG9jYWwsIHV0YywgZml4ZWQgb2Zmc2V0KS4gU28gY3JlYXRlXG4gICAgICAgICAgICAvLyBhIG5vdyB2ZXJzaW9uIG9mIGN1cnJlbnQgY29uZmlnICh0YWtlIGxvY2FsL3V0Yy9vZmZzZXQgZmxhZ3MsIGFuZFxuICAgICAgICAgICAgLy8gY3JlYXRlIG5vdykuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKFxuICAgICAgICAgICAgICAgIHcuR0csXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdLFxuICAgICAgICAgICAgICAgIHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgMSwgNCkueWVhclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LlcsIDEpO1xuICAgICAgICAgICAgd2Vla2RheSA9IGRlZmF1bHRzKHcuRSwgMSk7XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IDEgfHwgd2Vla2RheSA+IDcpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG93ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG93O1xuICAgICAgICAgICAgZG95ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG95O1xuXG4gICAgICAgICAgICBjdXJXZWVrID0gd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCBkb3csIGRveSk7XG5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5nZywgY29uZmlnLl9hW1lFQVJdLCBjdXJXZWVrLnllYXIpO1xuXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgd2Vlay5cbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LncsIGN1cldlZWsud2Vlayk7XG5cbiAgICAgICAgICAgIGlmICh3LmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIHdlZWtkYXkgLS0gbG93IGRheSBudW1iZXJzIGFyZSBjb25zaWRlcmVkIG5leHQgd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmQ7XG4gICAgICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAwIHx8IHdlZWtkYXkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh3LmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGxvY2FsIHdlZWtkYXkgLS0gY291bnRpbmcgc3RhcnRzIGZyb20gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5lICsgZG93O1xuICAgICAgICAgICAgICAgIGlmICh3LmUgPCAwIHx8IHcuZSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gZG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3ZWVrIDwgMSB8fCB3ZWVrID4gd2Vla3NJblllYXIod2Vla1llYXIsIGRvdywgZG95KSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla3MgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWtkYXlPdmVyZmxvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrZGF5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlbXAgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IHRlbXAueWVhcjtcbiAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdGVtcC5kYXlPZlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgSVNPIHN0YW5kYXJkXG4gICAgaG9va3MuSVNPXzg2MDEgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBSRkMgMjgyMiBmb3JtXG4gICAgaG9va3MuUkZDXzI4MjIgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmdcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gYW5vdGhlciBwYXJ0IG9mIHRoZSBjcmVhdGlvbiBmbG93IHRvIHByZXZlbnQgY2lyY3VsYXIgZGVwc1xuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5JU09fODYwMSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLlJGQ18yODIyKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbmZpZy5fYSA9IFtdO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gVGhpcyBhcnJheSBpcyB1c2VkIHRvIG1ha2UgYSBEYXRlLCBlaXRoZXIgd2l0aCBgbmV3IERhdGVgIG9yIGBEYXRlLlVUQ2BcbiAgICAgICAgdmFyIHN0cmluZyA9ICcnICsgY29uZmlnLl9pLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHBhcnNlZElucHV0LFxuICAgICAgICAgICAgdG9rZW5zLFxuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICBza2lwcGVkLFxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggPSAwLFxuICAgICAgICAgICAgZXJhLFxuICAgICAgICAgICAgdG9rZW5MZW47XG5cbiAgICAgICAgdG9rZW5zID1cbiAgICAgICAgICAgIGV4cGFuZEZvcm1hdChjb25maWcuX2YsIGNvbmZpZy5fbG9jYWxlKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSB8fCBbXTtcbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbnMubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5MZW47IGkrKykge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICBwYXJzZWRJbnB1dCA9IChzdHJpbmcubWF0Y2goZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKSB8fFxuICAgICAgICAgICAgICAgIFtdKVswXTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNraXBwZWQgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSk7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHNraXBwZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSArIHBhcnNlZElucHV0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCArPSBwYXJzZWRJbnB1dC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkb24ndCBwYXJzZSBpZiBpdCdzIG5vdCBhIGtub3duIHRva2VuXG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgcGFyc2VkSW5wdXQsIGNvbmZpZyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5fc3RyaWN0ICYmICFwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCByZW1haW5pbmcgdW5wYXJzZWQgaW5wdXQgbGVuZ3RoIHRvIHRoZSBzdHJpbmdcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuY2hhcnNMZWZ0T3ZlciA9XG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggLSB0b3RhbFBhcnNlZElucHV0TGVuZ3RoO1xuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIF8xMmggZmxhZyBpZiBob3VyIGlzIDw9IDEyXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA8PSAxMiAmJlxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5wYXJzZWREYXRlUGFydHMgPSBjb25maWcuX2Euc2xpY2UoMCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLm1lcmlkaWVtID0gY29uZmlnLl9tZXJpZGllbTtcbiAgICAgICAgLy8gaGFuZGxlIG1lcmlkaWVtXG4gICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IG1lcmlkaWVtRml4V3JhcChcbiAgICAgICAgICAgIGNvbmZpZy5fbG9jYWxlLFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdLFxuICAgICAgICAgICAgY29uZmlnLl9tZXJpZGllbVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGhhbmRsZSBlcmFcbiAgICAgICAgZXJhID0gZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhO1xuICAgICAgICBpZiAoZXJhICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFzQ29udmVydFllYXIoZXJhLCBjb25maWcuX2FbWUVBUl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIGNoZWNrT3ZlcmZsb3coY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbUZpeFdyYXAobG9jYWxlLCBob3VyLCBtZXJpZGllbSkge1xuICAgICAgICB2YXIgaXNQbTtcblxuICAgICAgICBpZiAobWVyaWRpZW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsZS5tZXJpZGllbUhvdXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5tZXJpZGllbUhvdXIoaG91ciwgbWVyaWRpZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZS5pc1BNICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgICAgICBpc1BtID0gbG9jYWxlLmlzUE0obWVyaWRpZW0pO1xuICAgICAgICAgICAgaWYgKGlzUG0gJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQbSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW5cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgYXJyYXkgb2YgZm9ybWF0IHN0cmluZ3NcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciB0ZW1wQ29uZmlnLFxuICAgICAgICAgICAgYmVzdE1vbWVudCxcbiAgICAgICAgICAgIHNjb3JlVG9CZWF0LFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSxcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQsXG4gICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlnZkxlbiA9IGNvbmZpZy5fZi5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGNvbmZpZ2ZMZW4gPT09IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25maWdmTGVuOyBpKyspIHtcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSA9IDA7XG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICB0ZW1wQ29uZmlnID0gY29weUNvbmZpZyh7fSwgY29uZmlnKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuX3VzZVVUQyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGVtcENvbmZpZy5fdXNlVVRDID0gY29uZmlnLl91c2VVVEM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ29uZmlnLl9mID0gY29uZmlnLl9mW2ldO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCh0ZW1wQ29uZmlnKTtcblxuICAgICAgICAgICAgaWYgKGlzVmFsaWQodGVtcENvbmZpZykpIHtcbiAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55IGlucHV0IHRoYXQgd2FzIG5vdCBwYXJzZWQgYWRkIGEgcGVuYWx0eSBmb3IgdGhhdCBmb3JtYXRcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuY2hhcnNMZWZ0T3ZlcjtcblxuICAgICAgICAgICAgLy9vciB0b2tlbnNcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykudW51c2VkVG9rZW5zLmxlbmd0aCAqIDEwO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuc2NvcmUgPSBjdXJyZW50U2NvcmU7XG5cbiAgICAgICAgICAgIGlmICghYmVzdEZvcm1hdElzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQgfHxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZEZvcm1hdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXh0ZW5kKGNvbmZpZywgYmVzdE1vbWVudCB8fCB0ZW1wQ29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tT2JqZWN0KGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGNvbmZpZy5faSksXG4gICAgICAgICAgICBkYXlPckRhdGUgPSBpLmRheSA9PT0gdW5kZWZpbmVkID8gaS5kYXRlIDogaS5kYXk7XG4gICAgICAgIGNvbmZpZy5fYSA9IG1hcChcbiAgICAgICAgICAgIFtpLnllYXIsIGkubW9udGgsIGRheU9yRGF0ZSwgaS5ob3VyLCBpLm1pbnV0ZSwgaS5zZWNvbmQsIGkubWlsbGlzZWNvbmRdLFxuICAgICAgICAgICAgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogJiYgcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRnJvbUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhwcmVwYXJlQ29uZmlnKGNvbmZpZykpKTtcbiAgICAgICAgaWYgKHJlcy5fbmV4dERheSkge1xuICAgICAgICAgICAgLy8gQWRkaW5nIGlzIHNtYXJ0IGVub3VnaCBhcm91bmQgRFNUXG4gICAgICAgICAgICByZXMuYWRkKDEsICdkJyk7XG4gICAgICAgICAgICByZXMuX25leHREYXkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVDb25maWcoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGNvbmZpZy5fZjtcblxuICAgICAgICBjb25maWcuX2xvY2FsZSA9IGNvbmZpZy5fbG9jYWxlIHx8IGdldExvY2FsZShjb25maWcuX2wpO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCAoZm9ybWF0ID09PSB1bmRlZmluZWQgJiYgaW5wdXQgPT09ICcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoeyBudWxsSW5wdXQ6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnLl9pID0gaW5wdXQgPSBjb25maWcuX2xvY2FsZS5wcmVwYXJzZShpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNb21lbnQoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vbWVudChjaGVja092ZXJmbG93KGlucHV0KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gaW5wdXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShmb3JtYXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pO1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQudmFsdWVPZigpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IG1hcChpbnB1dC5zbGljZSgwKSwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAvLyBmcm9tIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGlzVVRDKSB7XG4gICAgICAgIHZhciBjID0ge307XG5cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gdHJ1ZSB8fCBmb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9jYWxlID09PSB0cnVlIHx8IGxvY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGxvY2FsZTtcbiAgICAgICAgICAgIGxvY2FsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChpc09iamVjdChpbnB1dCkgJiYgaXNPYmplY3RFbXB0eShpbnB1dCkpIHx8XG4gICAgICAgICAgICAoaXNBcnJheShpbnB1dCkgJiYgaW5wdXQubGVuZ3RoID09PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gbXVzdCBiZSBkb25lIHRoaXMgd2F5LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyM1xuICAgICAgICBjLl9pc0FNb21lbnRPYmplY3QgPSB0cnVlO1xuICAgICAgICBjLl91c2VVVEMgPSBjLl9pc1VUQyA9IGlzVVRDO1xuICAgICAgICBjLl9sID0gbG9jYWxlO1xuICAgICAgICBjLl9pID0gaW5wdXQ7XG4gICAgICAgIGMuX2YgPSBmb3JtYXQ7XG4gICAgICAgIGMuX3N0cmljdCA9IHN0cmljdDtcblxuICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUNvbmZpZyhjKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHZhciBwcm90b3R5cGVNaW4gPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPCB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICBwcm90b3R5cGVNYXggPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPiB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgLy8gUGljayBhIG1vbWVudCBtIGZyb20gbW9tZW50cyBzbyB0aGF0IG1bZm5dKG90aGVyKSBpcyB0cnVlIGZvciBhbGxcbiAgICAvLyBvdGhlci4gVGhpcyByZWxpZXMgb24gdGhlIGZ1bmN0aW9uIGZuIHRvIGJlIHRyYW5zaXRpdmUuXG4gICAgLy9cbiAgICAvLyBtb21lbnRzIHNob3VsZCBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMgb3IgYW4gYXJyYXksIHdob3NlXG4gICAgLy8gZmlyc3QgZWxlbWVudCBpcyBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cy5cbiAgICBmdW5jdGlvbiBwaWNrQnkoZm4sIG1vbWVudHMpIHtcbiAgICAgICAgdmFyIHJlcywgaTtcbiAgICAgICAgaWYgKG1vbWVudHMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkobW9tZW50c1swXSkpIHtcbiAgICAgICAgICAgIG1vbWVudHMgPSBtb21lbnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IG1vbWVudHNbMF07XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBtb21lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoIW1vbWVudHNbaV0uaXNWYWxpZCgpIHx8IG1vbWVudHNbaV1bZm5dKHJlcykpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBtb21lbnRzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIFtdLnNvcnQgaW5zdGVhZD9cbiAgICBmdW5jdGlvbiBtaW4oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQmVmb3JlJywgYXJncyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF4KCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0FmdGVyJywgYXJncyk7XG4gICAgfVxuXG4gICAgdmFyIG5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93ID8gRGF0ZS5ub3coKSA6ICtuZXcgRGF0ZSgpO1xuICAgIH07XG5cbiAgICB2YXIgb3JkZXJpbmcgPSBbXG4gICAgICAgICd5ZWFyJyxcbiAgICAgICAgJ3F1YXJ0ZXInLFxuICAgICAgICAnbW9udGgnLFxuICAgICAgICAnd2VlaycsXG4gICAgICAgICdkYXknLFxuICAgICAgICAnaG91cicsXG4gICAgICAgICdtaW51dGUnLFxuICAgICAgICAnc2Vjb25kJyxcbiAgICAgICAgJ21pbGxpc2Vjb25kJyxcbiAgICBdO1xuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvblZhbGlkKG0pIHtcbiAgICAgICAgdmFyIGtleSxcbiAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gZmFsc2UsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3JkZXJMZW4gPSBvcmRlcmluZy5sZW5ndGg7XG4gICAgICAgIGZvciAoa2V5IGluIG0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKG0sIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICBpbmRleE9mLmNhbGwob3JkZXJpbmcsIGtleSkgIT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIChtW2tleV0gPT0gbnVsbCB8fCAhaXNOYU4obVtrZXldKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3JkZXJMZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKG1bb3JkZXJpbmdbaV1dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaXRIYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gb25seSBhbGxvdyBub24taW50ZWdlcnMgZm9yIHNtYWxsZXN0IHVuaXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQobVtvcmRlcmluZ1tpXV0pICE9PSB0b0ludChtW29yZGVyaW5nW2ldXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oTmFOKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBEdXJhdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoZHVyYXRpb24pLFxuICAgICAgICAgICAgeWVhcnMgPSBub3JtYWxpemVkSW5wdXQueWVhciB8fCAwLFxuICAgICAgICAgICAgcXVhcnRlcnMgPSBub3JtYWxpemVkSW5wdXQucXVhcnRlciB8fCAwLFxuICAgICAgICAgICAgbW9udGhzID0gbm9ybWFsaXplZElucHV0Lm1vbnRoIHx8IDAsXG4gICAgICAgICAgICB3ZWVrcyA9IG5vcm1hbGl6ZWRJbnB1dC53ZWVrIHx8IG5vcm1hbGl6ZWRJbnB1dC5pc29XZWVrIHx8IDAsXG4gICAgICAgICAgICBkYXlzID0gbm9ybWFsaXplZElucHV0LmRheSB8fCAwLFxuICAgICAgICAgICAgaG91cnMgPSBub3JtYWxpemVkSW5wdXQuaG91ciB8fCAwLFxuICAgICAgICAgICAgbWludXRlcyA9IG5vcm1hbGl6ZWRJbnB1dC5taW51dGUgfHwgMCxcbiAgICAgICAgICAgIHNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQuc2Vjb25kIHx8IDAsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQubWlsbGlzZWNvbmQgfHwgMDtcblxuICAgICAgICB0aGlzLl9pc1ZhbGlkID0gaXNEdXJhdGlvblZhbGlkKG5vcm1hbGl6ZWRJbnB1dCk7XG5cbiAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIGRhdGVBZGRSZW1vdmVcbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID1cbiAgICAgICAgICAgICttaWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgc2Vjb25kcyAqIDFlMyArIC8vIDEwMDBcbiAgICAgICAgICAgIG1pbnV0ZXMgKiA2ZTQgKyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGhvdXJzICogMTAwMCAqIDYwICogNjA7IC8vdXNpbmcgMTAwMCAqIDYwICogNjAgaW5zdGVhZCBvZiAzNmU1IHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjk3OFxuICAgICAgICAvLyBCZWNhdXNlIG9mIGRhdGVBZGRSZW1vdmUgdHJlYXRzIDI0IGhvdXJzIGFzIGRpZmZlcmVudCBmcm9tIGFcbiAgICAgICAgLy8gZGF5IHdoZW4gd29ya2luZyBhcm91bmQgRFNULCB3ZSBuZWVkIHRvIHN0b3JlIHRoZW0gc2VwYXJhdGVseVxuICAgICAgICB0aGlzLl9kYXlzID0gK2RheXMgKyB3ZWVrcyAqIDc7XG4gICAgICAgIC8vIEl0IGlzIGltcG9zc2libGUgdG8gdHJhbnNsYXRlIG1vbnRocyBpbnRvIGRheXMgd2l0aG91dCBrbm93aW5nXG4gICAgICAgIC8vIHdoaWNoIG1vbnRocyB5b3UgYXJlIGFyZSB0YWxraW5nIGFib3V0LCBzbyB3ZSBoYXZlIHRvIHN0b3JlXG4gICAgICAgIC8vIGl0IHNlcGFyYXRlbHkuXG4gICAgICAgIHRoaXMuX21vbnRocyA9ICttb250aHMgKyBxdWFydGVycyAqIDMgKyB5ZWFycyAqIDEyO1xuXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcblxuICAgICAgICB0aGlzLl9sb2NhbGUgPSBnZXRMb2NhbGUoKTtcblxuICAgICAgICB0aGlzLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzUm91bmQobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgtMSAqIG51bWJlcikgKiAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb21wYXJlIHR3byBhcnJheXMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhhcnJheTEsIGFycmF5MiwgZG9udENvbnZlcnQpIHtcbiAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKGFycmF5MS5sZW5ndGgsIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGRpZmZzID0gMCxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChkb250Q29udmVydCAmJiBhcnJheTFbaV0gIT09IGFycmF5MltpXSkgfHxcbiAgICAgICAgICAgICAgICAoIWRvbnRDb252ZXJ0ICYmIHRvSW50KGFycmF5MVtpXSkgIT09IHRvSW50KGFycmF5MltpXSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkaWZmcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWZmcyArIGxlbmd0aERpZmY7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0KHRva2VuLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLnV0Y09mZnNldCgpLFxuICAgICAgICAgICAgICAgIHNpZ24gPSAnKyc7XG4gICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7XG4gICAgICAgICAgICAgICAgc2lnbiA9ICctJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgc2lnbiArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn4ob2Zmc2V0IC8gNjApLCAyKSArXG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fm9mZnNldCAlIDYwLCAyKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb2Zmc2V0KCdaJywgJzonKTtcbiAgICBvZmZzZXQoJ1paJywgJycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1paJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ1onLCAnWlonXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fdXNlVVRDID0gdHJ1ZTtcbiAgICAgICAgY29uZmlnLl90em0gPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIHRpbWV6b25lIGNodW5rZXJcbiAgICAvLyAnKzEwOjAwJyA+IFsnMTAnLCAgJzAwJ11cbiAgICAvLyAnLTE1MzAnICA+IFsnLTE1JywgJzMwJ11cbiAgICB2YXIgY2h1bmtPZmZzZXQgPSAvKFtcXCtcXC1dfFxcZFxcZCkvZ2k7XG5cbiAgICBmdW5jdGlvbiBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoZXIsIHN0cmluZykge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IChzdHJpbmcgfHwgJycpLm1hdGNoKG1hdGNoZXIpLFxuICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICBwYXJ0cyxcbiAgICAgICAgICAgIG1pbnV0ZXM7XG5cbiAgICAgICAgaWYgKG1hdGNoZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2h1bmsgPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0gfHwgW107XG4gICAgICAgIHBhcnRzID0gKGNodW5rICsgJycpLm1hdGNoKGNodW5rT2Zmc2V0KSB8fCBbJy0nLCAwLCAwXTtcbiAgICAgICAgbWludXRlcyA9ICsocGFydHNbMV0gKiA2MCkgKyB0b0ludChwYXJ0c1syXSk7XG5cbiAgICAgICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgPyAwIDogcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBtb21lbnQgZnJvbSBpbnB1dCwgdGhhdCBpcyBsb2NhbC91dGMvem9uZSBlcXVpdmFsZW50IHRvIG1vZGVsLlxuICAgIGZ1bmN0aW9uIGNsb25lV2l0aE9mZnNldChpbnB1dCwgbW9kZWwpIHtcbiAgICAgICAgdmFyIHJlcywgZGlmZjtcbiAgICAgICAgaWYgKG1vZGVsLl9pc1VUQykge1xuICAgICAgICAgICAgcmVzID0gbW9kZWwuY2xvbmUoKTtcbiAgICAgICAgICAgIGRpZmYgPVxuICAgICAgICAgICAgICAgIChpc01vbWVudChpbnB1dCkgfHwgaXNEYXRlKGlucHV0KVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZUxvY2FsKGlucHV0KS52YWx1ZU9mKCkpIC0gcmVzLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIC8vIFVzZSBsb3ctbGV2ZWwgYXBpLCBiZWNhdXNlIHRoaXMgZm4gaXMgbG93LWxldmVsIGFwaS5cbiAgICAgICAgICAgIHJlcy5fZC5zZXRUaW1lKHJlcy5fZC52YWx1ZU9mKCkgKyBkaWZmKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQpLmxvY2FsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXRlT2Zmc2V0KG0pIHtcbiAgICAgICAgLy8gT24gRmlyZWZveC4yNCBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgYSBmbG9hdGluZyBwb2ludC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvcHVsbC8xODcxXG4gICAgICAgIHJldHVybiAtTWF0aC5yb3VuZChtLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbW9tZW50IGlzIG11dGF0ZWQuXG4gICAgLy8gSXQgaXMgaW50ZW5kZWQgdG8ga2VlcCB0aGUgb2Zmc2V0IGluIHN5bmMgd2l0aCB0aGUgdGltZXpvbmUuXG4gICAgaG9va3MudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICAvLyBrZWVwTG9jYWxUaW1lID0gdHJ1ZSBtZWFucyBvbmx5IGNoYW5nZSB0aGUgdGltZXpvbmUsIHdpdGhvdXRcbiAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bdXRjT2Zmc2V0KDIsIHRydWUpXS0tPlxuICAgIC8vIDU6MzE6MjYgKzAyMDAgSXQgaXMgcG9zc2libGUgdGhhdCA1OjMxOjI2IGRvZXNuJ3QgZXhpc3Qgd2l0aCBvZmZzZXRcbiAgICAvLyArMDIwMCwgc28gd2UgYWRqdXN0IHRoZSB0aW1lIGFzIG5lZWRlZCwgdG8gYmUgdmFsaWQuXG4gICAgLy9cbiAgICAvLyBLZWVwaW5nIHRoZSB0aW1lIGFjdHVhbGx5IGFkZHMvc3VidHJhY3RzIChvbmUgaG91cilcbiAgICAvLyBmcm9tIHRoZSBhY3R1YWwgcmVwcmVzZW50ZWQgdGltZS4gVGhhdCBpcyB3aHkgd2UgY2FsbCB1cGRhdGVPZmZzZXRcbiAgICAvLyBhIHNlY29uZCB0aW1lLiBJbiBjYXNlIGl0IHdhbnRzIHVzIHRvIGNoYW5nZSB0aGUgb2Zmc2V0IGFnYWluXG4gICAgLy8gX2NoYW5nZUluUHJvZ3Jlc3MgPT0gdHJ1ZSBjYXNlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0LCBiZWNhdXNlXG4gICAgLy8gdGhlcmUgaXMgbm8gc3VjaCB0aW1lIGluIHRoZSBnaXZlbiB0aW1lem9uZS5cbiAgICBmdW5jdGlvbiBnZXRTZXRPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUsIGtlZXBNaW51dGVzKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9vZmZzZXQgfHwgMCxcbiAgICAgICAgICAgIGxvY2FsQWRqdXN0O1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhpbnB1dCkgPCAxNiAmJiAha2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0ICogNjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzVVRDICYmIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICBsb2NhbEFkanVzdCA9IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBpbnB1dDtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChsb2NhbEFkanVzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQobG9jYWxBZGp1c3QsICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmICgha2VlcExvY2FsVGltZSB8fCB0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN1YnRyYWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUR1cmF0aW9uKGlucHV0IC0gb2Zmc2V0LCAnbScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/IG9mZnNldCA6IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRab25lKGlucHV0LCBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gLWlucHV0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC10aGlzLnV0Y09mZnNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9VVEMoa2VlcExvY2FsVGltZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9Mb2NhbChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1VUQykge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzKSwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5faSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciB0Wm9uZSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hPZmZzZXQsIHRoaXMuX2kpO1xuICAgICAgICAgICAgaWYgKHRab25lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0Wm9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc0FsaWduZWRIb3VyT2Zmc2V0KGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbnB1dCA9IGlucHV0ID8gY3JlYXRlTG9jYWwoaW5wdXQpLnV0Y09mZnNldCgpIDogMDtcblxuICAgICAgICByZXR1cm4gKHRoaXMudXRjT2Zmc2V0KCkgLSBpbnB1dCkgJSA2MCA9PT0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCkgfHxcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQoKSB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5faXNEU1RTaGlmdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjID0ge30sXG4gICAgICAgICAgICBvdGhlcjtcblxuICAgICAgICBjb3B5Q29uZmlnKGMsIHRoaXMpO1xuICAgICAgICBjID0gcHJlcGFyZUNvbmZpZyhjKTtcblxuICAgICAgICBpZiAoYy5fYSkge1xuICAgICAgICAgICAgb3RoZXIgPSBjLl9pc1VUQyA/IGNyZWF0ZVVUQyhjLl9hKSA6IGNyZWF0ZUxvY2FsKGMuX2EpO1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID1cbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJiBjb21wYXJlQXJyYXlzKGMuX2EsIG90aGVyLnRvQXJyYXkoKSkgPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/ICF0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBU1AuTkVUIGpzb24gZGF0ZSBmb3JtYXQgcmVnZXhcbiAgICB2YXIgYXNwTmV0UmVnZXggPSAvXigtfFxcKyk/KD86KFxcZCopWy4gXSk/KFxcZCspOihcXGQrKSg/OjooXFxkKykoXFwuXFxkKik/KT8kLyxcbiAgICAgICAgLy8gZnJvbSBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vZ2l0L2Nsb3N1cmVfZ29vZ19kYXRlX2RhdGUuanMuc291cmNlLmh0bWxcbiAgICAgICAgLy8gc29tZXdoYXQgbW9yZSBpbiBsaW5lIHdpdGggNC40LjMuMiAyMDA0IHNwZWMsIGJ1dCBhbGxvd3MgZGVjaW1hbCBhbnl3aGVyZVxuICAgICAgICAvLyBhbmQgZnVydGhlciBtb2RpZmllZCB0byBhbGxvdyBmb3Igc3RyaW5ncyBjb250YWluaW5nIGJvdGggd2VlayBhbmQgZGF5XG4gICAgICAgIGlzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEdXJhdGlvbihpbnB1dCwga2V5KSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGlucHV0LFxuICAgICAgICAgICAgLy8gbWF0Y2hpbmcgYWdhaW5zdCByZWdleHAgaXMgZXhwZW5zaXZlLCBkbyBpdCBvbiBkZW1hbmRcbiAgICAgICAgICAgIG1hdGNoID0gbnVsbCxcbiAgICAgICAgICAgIHNpZ24sXG4gICAgICAgICAgICByZXQsXG4gICAgICAgICAgICBkaWZmUmVzO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbXM6IGlucHV0Ll9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICAgICAgZDogaW5wdXQuX2RheXMsXG4gICAgICAgICAgICAgICAgTTogaW5wdXQuX21vbnRocyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpIHx8ICFpc05hTigraW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uW2tleV0gPSAraW5wdXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kcyA9ICtpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICBkOiB0b0ludChtYXRjaFtEQVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIGg6IHRvSW50KG1hdGNoW0hPVVJdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbTogdG9JbnQobWF0Y2hbTUlOVVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIHM6IHRvSW50KG1hdGNoW1NFQ09ORF0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtczogdG9JbnQoYWJzUm91bmQobWF0Y2hbTUlMTElTRUNPTkRdICogMTAwMCkpICogc2lnbiwgLy8gdGhlIG1pbGxpc2Vjb25kIGRlY2ltYWwgcG9pbnQgaXMgaW5jbHVkZWQgaW4gdGhlIG1hdGNoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGlzb1JlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiBwYXJzZUlzbyhtYXRjaFsyXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgTTogcGFyc2VJc28obWF0Y2hbM10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHc6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkOiBwYXJzZUlzbyhtYXRjaFs1XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgaDogcGFyc2VJc28obWF0Y2hbNl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIG06IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzOiBwYXJzZUlzbyhtYXRjaFs4XSwgc2lnbiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZHVyYXRpb24gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoJ2Zyb20nIGluIGR1cmF0aW9uIHx8ICd0bycgaW4gZHVyYXRpb24pXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLnRvKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1zID0gZGlmZlJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICBkdXJhdGlvbi5NID0gZGlmZlJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXQgPSBuZXcgRHVyYXRpb24oZHVyYXRpb24pO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2xvY2FsZScpKSB7XG4gICAgICAgICAgICByZXQuX2xvY2FsZSA9IGlucHV0Ll9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19pc1ZhbGlkJykpIHtcbiAgICAgICAgICAgIHJldC5faXNWYWxpZCA9IGlucHV0Ll9pc1ZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBjcmVhdGVEdXJhdGlvbi5mbiA9IER1cmF0aW9uLnByb3RvdHlwZTtcbiAgICBjcmVhdGVEdXJhdGlvbi5pbnZhbGlkID0gY3JlYXRlSW52YWxpZCQxO1xuXG4gICAgZnVuY3Rpb24gcGFyc2VJc28oaW5wLCBzaWduKSB7XG4gICAgICAgIC8vIFdlJ2Qgbm9ybWFsbHkgdXNlIH5+aW5wIGZvciB0aGlzLCBidXQgdW5mb3J0dW5hdGVseSBpdCBhbHNvXG4gICAgICAgIC8vIGNvbnZlcnRzIGZsb2F0cyB0byBpbnRzLlxuICAgICAgICAvLyBpbnAgbWF5IGJlIHVuZGVmaW5lZCwgc28gY2FyZWZ1bCBjYWxsaW5nIHJlcGxhY2Ugb24gaXQuXG4gICAgICAgIHZhciByZXMgPSBpbnAgJiYgcGFyc2VGbG9hdChpbnAucmVwbGFjZSgnLCcsICcuJykpO1xuICAgICAgICAvLyBhcHBseSBzaWduIHdoaWxlIHdlJ3JlIGF0IGl0XG4gICAgICAgIHJldHVybiAoaXNOYU4ocmVzKSA/IDAgOiByZXMpICogc2lnbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXMgPSB7fTtcblxuICAgICAgICByZXMubW9udGhzID1cbiAgICAgICAgICAgIG90aGVyLm1vbnRoKCkgLSBiYXNlLm1vbnRoKCkgKyAob3RoZXIueWVhcigpIC0gYmFzZS55ZWFyKCkpICogMTI7XG4gICAgICAgIGlmIChiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykuaXNBZnRlcihvdGhlcikpIHtcbiAgICAgICAgICAgIC0tcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSArb3RoZXIgLSArYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgaWYgKCEoYmFzZS5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWlsbGlzZWNvbmRzOiAwLCBtb250aHM6IDAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyID0gY2xvbmVXaXRoT2Zmc2V0KG90aGVyLCBiYXNlKTtcbiAgICAgICAgaWYgKGJhc2UuaXNCZWZvcmUob3RoZXIpKSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2Uob3RoZXIsIGJhc2UpO1xuICAgICAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9IC1yZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgcmVzLm1vbnRocyA9IC1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgJ25hbWUnIGFyZyBhZnRlciBkZXByZWNhdGlvbiBpcyByZW1vdmVkXG4gICAgZnVuY3Rpb24gY3JlYXRlQWRkZXIoZGlyZWN0aW9uLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBkdXIsIHRtcDtcbiAgICAgICAgICAgIC8vaW52ZXJ0IHRoZSBhcmd1bWVudHMsIGJ1dCBjb21wbGFpbiBhYm91dCBpdFxuICAgICAgICAgICAgaWYgKHBlcmlvZCAhPT0gbnVsbCAmJiAhaXNOYU4oK3BlcmlvZCkpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICdtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhudW1iZXIsIHBlcmlvZCkuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0bXAgPSB2YWw7XG4gICAgICAgICAgICAgICAgdmFsID0gcGVyaW9kO1xuICAgICAgICAgICAgICAgIHBlcmlvZCA9IHRtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZHVyID0gY3JlYXRlRHVyYXRpb24odmFsLCBwZXJpb2QpO1xuICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgZHVyLCBkaXJlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QobW9tLCBkdXJhdGlvbiwgaXNBZGRpbmcsIHVwZGF0ZU9mZnNldCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSBhYnNSb3VuZChkdXJhdGlvbi5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnNSb3VuZChkdXJhdGlvbi5fbW9udGhzKTtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVPZmZzZXQgPSB1cGRhdGVPZmZzZXQgPT0gbnVsbCA/IHRydWUgOiB1cGRhdGVPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG1vbnRocykge1xuICAgICAgICAgICAgc2V0TW9udGgobW9tLCBnZXQobW9tLCAnTW9udGgnKSArIG1vbnRocyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5cykge1xuICAgICAgICAgICAgc2V0JDEobW9tLCAnRGF0ZScsIGdldChtb20sICdEYXRlJykgKyBkYXlzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIG1vbS5fZC5zZXRUaW1lKG1vbS5fZC52YWx1ZU9mKCkgKyBtaWxsaXNlY29uZHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZU9mZnNldCkge1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KG1vbSwgZGF5cyB8fCBtb250aHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFkZCA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKSxcbiAgICAgICAgc3VidHJhY3QgPSBjcmVhdGVBZGRlcigtMSwgJ3N1YnRyYWN0Jyk7XG5cbiAgICBmdW5jdGlvbiBpc1N0cmluZyhpbnB1dCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCBpbnB1dCBpbnN0YW5jZW9mIFN0cmluZztcbiAgICB9XG5cbiAgICAvLyB0eXBlIE1vbWVudElucHV0ID0gTW9tZW50IHwgRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IChudW1iZXIgfCBzdHJpbmcpW10gfCBNb21lbnRJbnB1dE9iamVjdCB8IHZvaWQ7IC8vIG51bGwgfCB1bmRlZmluZWRcbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc01vbWVudChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzRGF0ZShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzU3RyaW5nKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXIoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAneWVhcnMnLFxuICAgICAgICAgICAgICAgICd5ZWFyJyxcbiAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgJ21vbnRocycsXG4gICAgICAgICAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgICAgICAgICAnTScsXG4gICAgICAgICAgICAgICAgJ2RheXMnLFxuICAgICAgICAgICAgICAgICdkYXknLFxuICAgICAgICAgICAgICAgICdkJyxcbiAgICAgICAgICAgICAgICAnZGF0ZXMnLFxuICAgICAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICAgICAnRCcsXG4gICAgICAgICAgICAgICAgJ2hvdXJzJyxcbiAgICAgICAgICAgICAgICAnaG91cicsXG4gICAgICAgICAgICAgICAgJ2gnLFxuICAgICAgICAgICAgICAgICdtaW51dGVzJyxcbiAgICAgICAgICAgICAgICAnbWludXRlJyxcbiAgICAgICAgICAgICAgICAnbScsXG4gICAgICAgICAgICAgICAgJ3NlY29uZHMnLFxuICAgICAgICAgICAgICAgICdzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdtcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgcHJvcGVydHlMZW4gPSBwcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydHlMZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gcHJvcGVydHlUZXN0IHx8IGhhc093blByb3AoaW5wdXQsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgdmFyIGFycmF5VGVzdCA9IGlzQXJyYXkoaW5wdXQpLFxuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID0gZmFsc2U7XG4gICAgICAgIGlmIChhcnJheVRlc3QpIHtcbiAgICAgICAgICAgIGRhdGFUeXBlVGVzdCA9XG4gICAgICAgICAgICAgICAgaW5wdXQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNOdW1iZXIoaXRlbSkgJiYgaXNTdHJpbmcoaW5wdXQpO1xuICAgICAgICAgICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXlUZXN0ICYmIGRhdGFUeXBlVGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0NhbGVuZGFyU3BlYyhpbnB1dCkge1xuICAgICAgICB2YXIgb2JqZWN0VGVzdCA9IGlzT2JqZWN0KGlucHV0KSAmJiAhaXNPYmplY3RFbXB0eShpbnB1dCksXG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAgICAgJ3NhbWVEYXknLFxuICAgICAgICAgICAgICAgICduZXh0RGF5JyxcbiAgICAgICAgICAgICAgICAnbGFzdERheScsXG4gICAgICAgICAgICAgICAgJ25leHRXZWVrJyxcbiAgICAgICAgICAgICAgICAnbGFzdFdlZWsnLFxuICAgICAgICAgICAgICAgICdzYW1lRWxzZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENhbGVuZGFyRm9ybWF0KG15TW9tZW50LCBub3cpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBteU1vbWVudC5kaWZmKG5vdywgJ2RheXMnLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGRpZmYgPCAtNlxuICAgICAgICAgICAgPyAnc2FtZUVsc2UnXG4gICAgICAgICAgICA6IGRpZmYgPCAtMVxuICAgICAgICAgICAgICA/ICdsYXN0V2VlaydcbiAgICAgICAgICAgICAgOiBkaWZmIDwgMFxuICAgICAgICAgICAgICAgID8gJ2xhc3REYXknXG4gICAgICAgICAgICAgICAgOiBkaWZmIDwgMVxuICAgICAgICAgICAgICAgICAgPyAnc2FtZURheSdcbiAgICAgICAgICAgICAgICAgIDogZGlmZiA8IDJcbiAgICAgICAgICAgICAgICAgICAgPyAnbmV4dERheSdcbiAgICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgN1xuICAgICAgICAgICAgICAgICAgICAgID8gJ25leHRXZWVrJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3NhbWVFbHNlJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciQxKHRpbWUsIGZvcm1hdHMpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBmb3Igc2luZ2xlIHBhcmFtZXRlciwgZm9ybWF0cyBvbmx5IG92ZXJsb2FkIHRvIHRoZSBjYWxlbmRhciBmdW5jdGlvblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTW9tZW50SW5wdXQoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNDYWxlbmRhclNwZWMoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBXZSB3YW50IHRvIGNvbXBhcmUgdGhlIHN0YXJ0IG9mIHRvZGF5LCB2cyB0aGlzLlxuICAgICAgICAvLyBHZXR0aW5nIHN0YXJ0LW9mLXRvZGF5IGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBsb2NhbC91dGMvb2Zmc2V0IG9yIG5vdC5cbiAgICAgICAgdmFyIG5vdyA9IHRpbWUgfHwgY3JlYXRlTG9jYWwoKSxcbiAgICAgICAgICAgIHNvZCA9IGNsb25lV2l0aE9mZnNldChub3csIHRoaXMpLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgICAgICAgZm9ybWF0ID0gaG9va3MuY2FsZW5kYXJGb3JtYXQodGhpcywgc29kKSB8fCAnc2FtZUVsc2UnLFxuICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICBmb3JtYXRzICYmXG4gICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZm9ybWF0c1tmb3JtYXRdKVxuICAgICAgICAgICAgICAgICAgICA/IGZvcm1hdHNbZm9ybWF0XS5jYWxsKHRoaXMsIG5vdylcbiAgICAgICAgICAgICAgICAgICAgOiBmb3JtYXRzW2Zvcm1hdF0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChcbiAgICAgICAgICAgIG91dHB1dCB8fCB0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihmb3JtYXQsIHRoaXMsIGNyZWF0ZUxvY2FsKG5vdykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9tZW50KHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWZ0ZXIoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID4gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxJbnB1dC52YWx1ZU9mKCkgPCB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmV0d2Vlbihmcm9tLCB0bywgdW5pdHMsIGluY2x1c2l2aXR5KSB7XG4gICAgICAgIHZhciBsb2NhbEZyb20gPSBpc01vbWVudChmcm9tKSA/IGZyb20gOiBjcmVhdGVMb2NhbChmcm9tKSxcbiAgICAgICAgICAgIGxvY2FsVG8gPSBpc01vbWVudCh0bykgPyB0byA6IGNyZWF0ZUxvY2FsKHRvKTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxGcm9tLmlzVmFsaWQoKSAmJiBsb2NhbFRvLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbmNsdXNpdml0eSA9IGluY2x1c2l2aXR5IHx8ICcoKSc7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMF0gPT09ICcoJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5pc0FmdGVyKGxvY2FsRnJvbSwgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0JlZm9yZShsb2NhbEZyb20sIHVuaXRzKSkgJiZcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVsxXSA9PT0gJyknXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQmVmb3JlKGxvY2FsVG8sIHVuaXRzKVxuICAgICAgICAgICAgICAgIDogIXRoaXMuaXNBZnRlcihsb2NhbFRvLCB1bml0cykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpLFxuICAgICAgICAgICAgaW5wdXRNcztcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRNcyA9IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpIDw9IGlucHV0TXMgJiZcbiAgICAgICAgICAgICAgICBpbnB1dE1zIDw9IHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0FmdGVyKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNCZWZvcmUoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmKGlucHV0LCB1bml0cywgYXNGbG9hdCkge1xuICAgICAgICB2YXIgdGhhdCwgem9uZURlbHRhLCBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpO1xuXG4gICAgICAgIGlmICghdGhhdC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0O1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDEyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAxZTM7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDBcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDZlNDtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMzZlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDg2NGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0ICogNywgbmVnYXRlIGRzdFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSB0aGlzIC0gdGhhdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc0Zsb2F0ID8gb3V0cHV0IDogYWJzRmxvb3Iob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aERpZmYoYSwgYikge1xuICAgICAgICBpZiAoYS5kYXRlKCkgPCBiLmRhdGUoKSkge1xuICAgICAgICAgICAgLy8gZW5kLW9mLW1vbnRoIGNhbGN1bGF0aW9ucyB3b3JrIGNvcnJlY3Qgd2hlbiB0aGUgc3RhcnQgbW9udGggaGFzIG1vcmVcbiAgICAgICAgICAgIC8vIGRheXMgdGhhbiB0aGUgZW5kIG1vbnRoLlxuICAgICAgICAgICAgcmV0dXJuIC1tb250aERpZmYoYiwgYSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlmZmVyZW5jZSBpbiBtb250aHNcbiAgICAgICAgdmFyIHdob2xlTW9udGhEaWZmID0gKGIueWVhcigpIC0gYS55ZWFyKCkpICogMTIgKyAoYi5tb250aCgpIC0gYS5tb250aCgpKSxcbiAgICAgICAgICAgIC8vIGIgaXMgaW4gKGFuY2hvciAtIDEgbW9udGgsIGFuY2hvciArIDEgbW9udGgpXG4gICAgICAgICAgICBhbmNob3IgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmLCAnbW9udGhzJyksXG4gICAgICAgICAgICBhbmNob3IyLFxuICAgICAgICAgICAgYWRqdXN0O1xuXG4gICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvcjIgLSBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jaGVjayBmb3IgbmVnYXRpdmUgemVybywgcmV0dXJuIHplcm8gaWYgbmVnYXRpdmUgemVyb1xuICAgICAgICByZXR1cm4gLSh3aG9sZU1vbnRoRGlmZiArIGFkanVzdCkgfHwgMDtcbiAgICB9XG5cbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0VXRjID0gJ1lZWVktTU0tRERUSEg6bW06c3NbWl0nO1xuXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCdlbicpLmZvcm1hdCgnZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWlonKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyhrZWVwT2Zmc2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1dGMgPSBrZWVwT2Zmc2V0ICE9PSB0cnVlLFxuICAgICAgICAgICAgbSA9IHV0YyA/IHRoaXMuY2xvbmUoKS51dGMoKSA6IHRoaXM7XG4gICAgICAgIGlmIChtLnllYXIoKSA8IDAgfHwgbS55ZWFyKCkgPiA5OTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgICAgIG0sXG4gICAgICAgICAgICAgICAgdXRjXG4gICAgICAgICAgICAgICAgICAgID8gJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSdcbiAgICAgICAgICAgICAgICAgICAgOiAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpKSB7XG4gICAgICAgICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhblxuICAgICAgICAgICAgaWYgKHV0Yykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIHRoaXMudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDApXG4gICAgICAgICAgICAgICAgICAgIC50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdaJywgZm9ybWF0TW9tZW50KG0sICdaJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICBtLFxuICAgICAgICAgICAgdXRjID8gJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nIDogJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9tZW50IHRoYXQgY2FuXG4gICAgICogYWxzbyBiZSBldmFsdWF0ZWQgdG8gZ2V0IGEgbmV3IG1vbWVudCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0L2RvY3MvYXBpL3V0aWwuaHRtbCN1dGlsX2N1c3RvbV9pbnNwZWN0X2Z1bmN0aW9uX29uX29iamVjdHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ21vbWVudC5pbnZhbGlkKC8qICcgKyB0aGlzLl9pICsgJyAqLyknO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmdW5jID0gJ21vbWVudCcsXG4gICAgICAgICAgICB6b25lID0gJycsXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgZGF0ZXRpbWUsXG4gICAgICAgICAgICBzdWZmaXg7XG4gICAgICAgIGlmICghdGhpcy5pc0xvY2FsKCkpIHtcbiAgICAgICAgICAgIGZ1bmMgPSB0aGlzLnV0Y09mZnNldCgpID09PSAwID8gJ21vbWVudC51dGMnIDogJ21vbWVudC5wYXJzZVpvbmUnO1xuICAgICAgICAgICAgem9uZSA9ICdaJztcbiAgICAgICAgfVxuICAgICAgICBwcmVmaXggPSAnWycgKyBmdW5jICsgJyhcIl0nO1xuICAgICAgICB5ZWFyID0gMCA8PSB0aGlzLnllYXIoKSAmJiB0aGlzLnllYXIoKSA8PSA5OTk5ID8gJ1lZWVknIDogJ1lZWVlZWSc7XG4gICAgICAgIGRhdGV0aW1lID0gJy1NTS1ERFtUXUhIOm1tOnNzLlNTUyc7XG4gICAgICAgIHN1ZmZpeCA9IHpvbmUgKyAnW1wiKV0nO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChwcmVmaXggKyB5ZWFyICsgZGF0ZXRpbWUgKyBzdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdChpbnB1dFN0cmluZykge1xuICAgICAgICBpZiAoIWlucHV0U3RyaW5nKSB7XG4gICAgICAgICAgICBpbnB1dFN0cmluZyA9IHRoaXMuaXNVdGMoKVxuICAgICAgICAgICAgICAgID8gaG9va3MuZGVmYXVsdEZvcm1hdFV0Y1xuICAgICAgICAgICAgICAgIDogaG9va3MuZGVmYXVsdEZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3V0cHV0ID0gZm9ybWF0TW9tZW50KHRoaXMsIGlucHV0U3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyB0bzogdGhpcywgZnJvbTogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbShjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0byh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgZnJvbTogdGhpcywgdG86IHRpbWUgfSlcbiAgICAgICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAgICAgLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy50byhjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICAvLyBJZiBwYXNzZWQgYSBsb2NhbGUga2V5LCBpdCB3aWxsIHNldCB0aGUgbG9jYWxlIGZvciB0aGlzXG4gICAgLy8gaW5zdGFuY2UuICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBsb2NhbGUgY29uZmlndXJhdGlvblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICBmdW5jdGlvbiBsb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBuZXdMb2NhbGVEYXRhO1xuXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xvY2FsZURhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChuZXdMb2NhbGVEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2NhbGUgPSBuZXdMb2NhbGVEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuJyxcbiAgICAgICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIHZhciBNU19QRVJfU0VDT05EID0gMTAwMCxcbiAgICAgICAgTVNfUEVSX01JTlVURSA9IDYwICogTVNfUEVSX1NFQ09ORCxcbiAgICAgICAgTVNfUEVSX0hPVVIgPSA2MCAqIE1TX1BFUl9NSU5VVEUsXG4gICAgICAgIE1TX1BFUl80MDBfWUVBUlMgPSAoMzY1ICogNDAwICsgOTcpICogMjQgKiBNU19QRVJfSE9VUjtcblxuICAgIC8vIGFjdHVhbCBtb2R1bG8gLSBoYW5kbGVzIG5lZ2F0aXZlIG51bWJlcnMgKGZvciBkYXRlcyBiZWZvcmUgMTk3MCk6XG4gICAgZnVuY3Rpb24gbW9kJDEoZGl2aWRlbmQsIGRpdmlzb3IpIHtcbiAgICAgICAgcmV0dXJuICgoZGl2aWRlbmQgJSBkaXZpc29yKSArIGRpdmlzb3IpICUgZGl2aXNvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbFN0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSwgbSwgZCkudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXRjU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyBEYXRlLlVUQyByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5LCBtLCBkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0T2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKFxuICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kT2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpICsgMSwgMCwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMykgKyAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSArIDEsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSkgKyA3XG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSArIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9XG4gICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSIC1cbiAgICAgICAgICAgICAgICAgICAgbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSXG4gICAgICAgICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfTUlOVVRFIC0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfU0VDT05EIC0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbHVlT2YoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kLnZhbHVlT2YoKSAtICh0aGlzLl9vZmZzZXQgfHwgMCkgKiA2MDAwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bml4KCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKSAvIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBtLnllYXIoKSxcbiAgICAgICAgICAgIG0ubW9udGgoKSxcbiAgICAgICAgICAgIG0uZGF0ZSgpLFxuICAgICAgICAgICAgbS5ob3VyKCksXG4gICAgICAgICAgICBtLm1pbnV0ZSgpLFxuICAgICAgICAgICAgbS5zZWNvbmQoKSxcbiAgICAgICAgICAgIG0ubWlsbGlzZWNvbmQoKSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b09iamVjdCgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcnM6IG0ueWVhcigpLFxuICAgICAgICAgICAgbW9udGhzOiBtLm1vbnRoKCksXG4gICAgICAgICAgICBkYXRlOiBtLmRhdGUoKSxcbiAgICAgICAgICAgIGhvdXJzOiBtLmhvdXJzKCksXG4gICAgICAgICAgICBtaW51dGVzOiBtLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgIHNlY29uZHM6IG0uc2Vjb25kcygpLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzOiBtLm1pbGxpc2Vjb25kcygpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgLy8gbmV3IERhdGUoTmFOKS50b0pTT04oKSA9PT0gbnVsbFxuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLnRvSVNPU3RyaW5nKCkgOiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMigpIHtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBnZXRQYXJzaW5nRmxhZ3ModGhpcykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludmFsaWRBdCgpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcnNpbmdGbGFncyh0aGlzKS5vdmVyZmxvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGlvbkRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbnB1dDogdGhpcy5faSxcbiAgICAgICAgICAgIGZvcm1hdDogdGhpcy5fZixcbiAgICAgICAgICAgIGxvY2FsZTogdGhpcy5fbG9jYWxlLFxuICAgICAgICAgICAgaXNVVEM6IHRoaXMuX2lzVVRDLFxuICAgICAgICAgICAgc3RyaWN0OiB0aGlzLl9zdHJpY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ04nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk4nLCAwLCAwLCAnZXJhTmFtZScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk5OTicsIDAsIDAsICdlcmFOYXJyb3cnKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5JywgMV0sICd5bycsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5JywgMl0sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eScsIDNdLCAwLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eXl5JywgNF0sIDAsICdlcmFZZWFyJyk7XG5cbiAgICBhZGRSZWdleFRva2VuKCdOJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OJywgbWF0Y2hFcmFOYW1lKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OTicsIG1hdGNoRXJhTmFycm93KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oXG4gICAgICAgIFsnTicsICdOTicsICdOTk4nLCAnTk5OTicsICdOTk5OTiddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICB2YXIgZXJhID0gY29uZmlnLl9sb2NhbGUuZXJhc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAgICAgaWYgKGVyYSkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYSA9IGVyYTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEVyYSA9IGlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3knLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5bycsIG1hdGNoRXJhWWVhck9yZGluYWwpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ3knLCAneXknLCAneXl5JywgJ3l5eXknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3lvJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1hdGNoO1xuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpIHtcbiAgICAgICAgICAgIG1hdGNoID0gaW5wdXQubWF0Y2goY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UpIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZShpbnB1dCwgbWF0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuX2VyYXMgfHwgZ2V0TG9jYWxlKCdlbicpLl9lcmFzO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnNpbmNlKS5zdGFydE9mKCdkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5zaW5jZSA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSArSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0udW50aWwpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJhcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzUGFyc2UoZXJhTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFiYnIsXG4gICAgICAgICAgICBuYXJyb3c7XG4gICAgICAgIGVyYU5hbWUgPSBlcmFOYW1lLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBuYW1lID0gZXJhc1tpXS5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBhYmJyID0gZXJhc1tpXS5hYmJyLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBuYXJyb3cgPSBlcmFzW2ldLm5hcnJvdy50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYmJyID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFycm93ID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFtuYW1lLCBhYmJyLCBuYXJyb3ddLmluZGV4T2YoZXJhTmFtZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc0NvbnZlcnRZZWFyKGVyYSwgeWVhcikge1xuICAgICAgICB2YXIgZGlyID0gZXJhLnNpbmNlIDw9IGVyYS51bnRpbCA/ICsxIDogLTE7XG4gICAgICAgIGlmICh5ZWFyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKSArICh5ZWFyIC0gZXJhLm9mZnNldCkgKiBkaXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYW1lKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hcnJvdygpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhQWJicigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFZZWFyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkaXIsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGRpciA9IGVyYXNbaV0uc2luY2UgPD0gZXJhc1tpXS51bnRpbCA/ICsxIDogLTE7XG5cbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHx8XG4gICAgICAgICAgICAgICAgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMueWVhcigpIC0gaG9va3MoZXJhc1tpXS5zaW5jZSkueWVhcigpKSAqIGRpciArXG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0ub2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYW1lUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYW1lUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc0FiYnJSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzQWJiclJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzQWJiclJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYXJyb3dSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFycm93UmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYXJyb3dSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYUFiYnIoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFtZShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hbWVSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYXJyb3coaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYXJyb3dSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFZZWFyT3JkaW5hbChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXggfHwgbWF0Y2hVbnNpZ25lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlRXJhc1BhcnNlKCkge1xuICAgICAgICB2YXIgYWJiclBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFtZVBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFycm93UGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzTmFtZSxcbiAgICAgICAgICAgIGVyYXNBYmJyLFxuICAgICAgICAgICAgZXJhc05hcnJvdyxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGVyYXNOYW1lID0gcmVnZXhFc2NhcGUoZXJhc1tpXS5uYW1lKTtcbiAgICAgICAgICAgIGVyYXNBYmJyID0gcmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKTtcbiAgICAgICAgICAgIGVyYXNOYXJyb3cgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hcnJvdyk7XG5cbiAgICAgICAgICAgIG5hbWVQaWVjZXMucHVzaChlcmFzTmFtZSk7XG4gICAgICAgICAgICBhYmJyUGllY2VzLnB1c2goZXJhc0FiYnIpO1xuICAgICAgICAgICAgbmFycm93UGllY2VzLnB1c2goZXJhc05hcnJvdyk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc0FiYnIpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VyYXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hbWVSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG5hbWVQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzQWJiclJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgYWJiclBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYXJyb3dSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbmFycm93UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnZ2cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53ZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydHRycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzb1dlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrWWVhckZvcm1hdFRva2VuKHRva2VuLCBnZXR0ZXIpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4oMCwgW3Rva2VuLCB0b2tlbi5sZW5ndGhdLCAwLCBnZXR0ZXIpO1xuICAgIH1cblxuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0cnLCAnaXNvV2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHRycsICdpc29XZWVrWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdnJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHRycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnZycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ2dnZ2cnLCAnZ2dnZ2cnLCAnR0dHRycsICdHR0dHRyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDIpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnJywgJ0dHJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy53ZWVrKCksXG4gICAgICAgICAgICB0aGlzLndlZWtkYXkoKSArIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy5pc29XZWVrKCksXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWtkYXkoKSxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICA0XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy5pc29XZWVrWWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5XZWVrWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLndlZWtZZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhckhlbHBlcihpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtzVGFyZ2V0O1xuICAgICAgICBpZiAoaW5wdXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIodGhpcywgZG93LCBkb3kpLnllYXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3ZWVrc1RhcmdldCA9IHdlZWtzSW5ZZWFyKGlucHV0LCBkb3csIGRveSk7XG4gICAgICAgICAgICBpZiAod2VlayA+IHdlZWtzVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgd2VlayA9IHdlZWtzVGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNldFdlZWtBbGwuY2FsbCh0aGlzLCBpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0V2Vla0FsbCh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhckRhdGEgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKGRheU9mWWVhckRhdGEueWVhciwgMCwgZGF5T2ZZZWFyRGF0YS5kYXlPZlllYXIpO1xuXG4gICAgICAgIHRoaXMueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpO1xuICAgICAgICB0aGlzLm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSk7XG4gICAgICAgIHRoaXMuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdRJywgMCwgJ1FvJywgJ3F1YXJ0ZXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsXG4gICAgICAgICAgICA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKVxuICAgICAgICAgICAgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArICh0aGlzLm1vbnRoKCkgJSAzKSk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdERCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdEbycsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0XG4gICAgICAgICAgICA/IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZSB8fCBsb2NhbGUuX29yZGluYWxQYXJzZVxuICAgICAgICAgICAgOiBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50O1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0QnLCAnREQnXSwgREFURSk7XG4gICAgYWRkUGFyc2VUb2tlbignRG8nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W0RBVEVdID0gdG9JbnQoaW5wdXQubWF0Y2gobWF0Y2gxdG8yKVswXSk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0RGF5T2ZNb250aCA9IG1ha2VHZXRTZXQoJ0RhdGUnLCB0cnVlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEREQnLCBbJ0REREQnLCAzXSwgJ0RERG8nLCAnZGF5T2ZZZWFyJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEREQnLCBtYXRjaDF0bzMpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REREQnLCBtYXRjaDMpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIoaW5wdXQpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhciA9XG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAgICh0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykgLSB0aGlzLmNsb25lKCkuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1XG4gICAgICAgICAgICApICsgMTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyBkYXlPZlllYXIgOiB0aGlzLmFkZChpbnB1dCAtIGRheU9mWWVhciwgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignbScsIFsnbW0nLCAyXSwgMCwgJ21pbnV0ZScpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignbScsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignbW0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ20nLCAnbW0nXSwgTUlOVVRFKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaW51dGUgPSBtYWtlR2V0U2V0KCdNaW51dGVzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3MnLCBbJ3NzJywgMl0sIDAsICdzZWNvbmQnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3MnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMkhhc1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3NzJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydzJywgJ3NzJ10sIFNFQ09ORCk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0U2Vjb25kID0gbWFrZUdldFNldCgnU2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdTJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTAwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1MnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1MnLCAzXSwgMCwgJ21pbGxpc2Vjb25kJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTJywgNF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1MnLCA1XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTJywgNl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTJywgN10sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1MnLCA4XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1NTJywgOV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbiwgZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0TWlsbGlzZWNvbmQgPSBtYWtlR2V0U2V0KCdNaWxsaXNlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigneicsIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZScgOiAnJztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8gPSBNb21lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8uYWRkID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgPSBkaWZmO1xuICAgIHByb3RvLmVuZE9mID0gZW5kT2Y7XG4gICAgcHJvdG8uZm9ybWF0ID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gPSBmcm9tO1xuICAgIHByb3RvLmZyb21Ob3cgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvID0gdG87XG4gICAgcHJvdG8udG9Ob3cgPSB0b05vdztcbiAgICBwcm90by5nZXQgPSBzdHJpbmdHZXQ7XG4gICAgcHJvdG8uaW52YWxpZEF0ID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgPSBpc0FmdGVyO1xuICAgIHByb3RvLmlzQmVmb3JlID0gaXNCZWZvcmU7XG4gICAgcHJvdG8uaXNCZXR3ZWVuID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgPSBpc1ZhbGlkJDI7XG4gICAgcHJvdG8ubGFuZyA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCA9IHByb3RvdHlwZU1heDtcbiAgICBwcm90by5taW4gPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCA9IHN0cmluZ1NldDtcbiAgICBwcm90by5zdGFydE9mID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgIT0gbnVsbCkge1xuICAgICAgICBwcm90b1tTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW9tZW50PCcgKyB0aGlzLmZvcm1hdCgpICsgJz4nO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm90by50b0pTT04gPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ID0gdW5peDtcbiAgICBwcm90by52YWx1ZU9mID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgPSBjcmVhdGlvbkRhdGE7XG4gICAgcHJvdG8uZXJhTmFtZSA9IGdldEVyYU5hbWU7XG4gICAgcHJvdG8uZXJhTmFycm93ID0gZ2V0RXJhTmFycm93O1xuICAgIHByb3RvLmVyYUFiYnIgPSBnZXRFcmFBYmJyO1xuICAgIHByb3RvLmVyYVllYXIgPSBnZXRFcmFZZWFyO1xuICAgIHByb3RvLnllYXIgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrID0gcHJvdG8ud2Vla3MgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgPSBwcm90by5pc29XZWVrcyA9IGdldFNldElTT1dlZWs7XG4gICAgcHJvdG8ud2Vla3NJblllYXIgPSBnZXRXZWVrc0luWWVhcjtcbiAgICBwcm90by53ZWVrc0luV2Vla1llYXIgPSBnZXRXZWVrc0luV2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luSVNPV2Vla1llYXIgPSBnZXRJU09XZWVrc0luSVNPV2Vla1llYXI7XG4gICAgcHJvdG8uZGF0ZSA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ID0gcHJvdG8uZGF5cyA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyID0gZ2V0U2V0RGF5T2ZZZWFyO1xuICAgIHByb3RvLmhvdXIgPSBwcm90by5ob3VycyA9IGdldFNldEhvdXI7XG4gICAgcHJvdG8ubWludXRlID0gcHJvdG8ubWludXRlcyA9IGdldFNldE1pbnV0ZTtcbiAgICBwcm90by5zZWNvbmQgPSBwcm90by5zZWNvbmRzID0gZ2V0U2V0U2Vjb25kO1xuICAgIHByb3RvLm1pbGxpc2Vjb25kID0gcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgcHJvdG8udXRjT2Zmc2V0ID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldDtcbiAgICBwcm90by5oYXNBbGlnbmVkSG91ck9mZnNldCA9IGhhc0FsaWduZWRIb3VyT2Zmc2V0O1xuICAgIHByb3RvLmlzRFNUID0gaXNEYXlsaWdodFNhdmluZ1RpbWU7XG4gICAgcHJvdG8uaXNMb2NhbCA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzID0gZGVwcmVjYXRlKFxuICAgICAgICAnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXREYXlPZk1vbnRoXG4gICAgKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRNb250aFxuICAgICk7XG4gICAgcHJvdG8ueWVhcnMgPSBkZXByZWNhdGUoXG4gICAgICAgICd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0WWVhclxuICAgICk7XG4gICAgcHJvdG8uem9uZSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJyxcbiAgICAgICAgZ2V0U2V0Wm9uZVxuICAgICk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKFxuICAgICAgICAnaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbicsXG4gICAgICAgIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVbml4KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0KHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm90byQxID0gTG9jYWxlLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDEuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSA9IGludmFsaWREYXRlO1xuICAgIHByb3RvJDEub3JkaW5hbCA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnBvc3Rmb3JtYXQgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCA9IHNldDtcbiAgICBwcm90byQxLmVyYXMgPSBsb2NhbGVFcmFzO1xuICAgIHByb3RvJDEuZXJhc1BhcnNlID0gbG9jYWxlRXJhc1BhcnNlO1xuICAgIHByb3RvJDEuZXJhc0NvbnZlcnRZZWFyID0gbG9jYWxlRXJhc0NvbnZlcnRZZWFyO1xuICAgIHByb3RvJDEuZXJhc0FiYnJSZWdleCA9IGVyYXNBYmJyUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFtZVJlZ2V4ID0gZXJhc05hbWVSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYXJyb3dSZWdleCA9IGVyYXNOYXJyb3dSZWdleDtcblxuICAgIHByb3RvJDEubW9udGhzID0gbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgPSBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlID0gbG9jYWxlTW9udGhzUGFyc2U7XG4gICAgcHJvdG8kMS5tb250aHNSZWdleCA9IG1vbnRoc1JlZ2V4O1xuICAgIHByb3RvJDEubW9udGhzU2hvcnRSZWdleCA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyA9IGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gPSBsb2NhbGVXZWVrZGF5c01pbjtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnQgPSBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSA9IGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggPSB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ID0gd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCA9IHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgdXRjID0gY3JlYXRlVVRDKCkuc2V0KHNldHRlciwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbG9jYWxlW2ZpZWxkXSh1dGMsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDAsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRocycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNTaG9ydChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNNaW4obG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZXJhczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICtJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0Fubm8gRG9taW5pJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQmVmb3JlIENocmlzdCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdCQycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB0b0ludCgobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgaG9va3MubGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlXG4gICAgKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLFxuICAgICAgICBnZXRMb2NhbGVcbiAgICApO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicygpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9IG1hdGhBYnModGhpcy5fbWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5fZGF5cyA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5taWxsaXNlY29uZHMpO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBtYXRoQWJzKGRhdGEuc2Vjb25kcyk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1hdGhBYnMoZGF0YS5taW51dGVzKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzID0gbWF0aEFicyhkYXRhLm1vbnRocyk7XG4gICAgICAgIGRhdGEueWVhcnMgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEoZHVyYXRpb24sIGlucHV0LCB2YWx1ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUR1cmF0aW9uKGlucHV0LCB2YWx1ZSk7XG5cbiAgICAgICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xuICAgICAgICBkdXJhdGlvbi5fZGF5cyArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIDEpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gc3VidHJhY3QkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyxcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgbW9udGhzRnJvbURheXM7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1peCBvZiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzLCBidWJibGUgZG93biBmaXJzdFxuICAgICAgICAvLyBjaGVjazogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIxNjZcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzKGRheXMpIHtcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTQ2MDk3IGRheXMgKHRha2luZyBpbnRvIGFjY291bnQgbGVhcCB5ZWFyIHJ1bGVzKVxuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxMiBtb250aHMgPT09IDQ4MDBcbiAgICAgICAgcmV0dXJuIChkYXlzICogNDgwMCkgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIChtb250aHMgKiAxNDYwOTcpIC8gNDgwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcyh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzLFxuICAgICAgICAgICAgbW9udGhzLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMztcbiAgICAgICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKG1vbnRoc1RvRGF5cyh0aGlzLl9tb250aHMpKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgLyA3ICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMjQgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMTQ0MCArIG1pbGxpc2Vjb25kcyAvIDZlNDtcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VBcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKSxcbiAgICAgICAgYXNTZWNvbmRzID0gbWFrZUFzKCdzJyksXG4gICAgICAgIGFzTWludXRlcyA9IG1ha2VBcygnbScpLFxuICAgICAgICBhc0hvdXJzID0gbWFrZUFzKCdoJyksXG4gICAgICAgIGFzRGF5cyA9IG1ha2VBcygnZCcpLFxuICAgICAgICBhc1dlZWtzID0gbWFrZUFzKCd3JyksXG4gICAgICAgIGFzTW9udGhzID0gbWFrZUFzKCdNJyksXG4gICAgICAgIGFzUXVhcnRlcnMgPSBtYWtlQXMoJ1EnKSxcbiAgICAgICAgYXNZZWFycyA9IG1ha2VBcygneScpLFxuICAgICAgICB2YWx1ZU9mJDEgPSBhc01pbGxpc2Vjb25kcztcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQkMih1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpc1t1bml0cyArICdzJ10oKSA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0dGVyKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2RhdGFbbmFtZV0gOiBOYU47XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpLFxuICAgICAgICBzZWNvbmRzID0gbWFrZUdldHRlcignc2Vjb25kcycpLFxuICAgICAgICBtaW51dGVzID0gbWFrZUdldHRlcignbWludXRlcycpLFxuICAgICAgICBob3VycyA9IG1ha2VHZXR0ZXIoJ2hvdXJzJyksXG4gICAgICAgIGRheXMgPSBtYWtlR2V0dGVyKCdkYXlzJyksXG4gICAgICAgIG1vbnRocyA9IG1ha2VHZXR0ZXIoJ21vbnRocycpLFxuICAgICAgICB5ZWFycyA9IG1ha2VHZXR0ZXIoJ3llYXJzJyk7XG5cbiAgICBmdW5jdGlvbiB3ZWVrcygpIHtcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XG4gICAgfVxuXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgICAgdGhyZXNob2xkcyA9IHtcbiAgICAgICAgICAgIHNzOiA0NCwgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgICAgICBzOiA0NSwgLy8gc2Vjb25kcyB0byBtaW51dGVcbiAgICAgICAgICAgIG06IDQ1LCAvLyBtaW51dGVzIHRvIGhvdXJcbiAgICAgICAgICAgIGg6IDIyLCAvLyBob3VycyB0byBkYXlcbiAgICAgICAgICAgIGQ6IDI2LCAvLyBkYXlzIHRvIG1vbnRoL3dlZWtcbiAgICAgICAgICAgIHc6IG51bGwsIC8vIHdlZWtzIHRvIG1vbnRoXG4gICAgICAgICAgICBNOiAxMSwgLy8gbW9udGhzIHRvIHllYXJcbiAgICAgICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEocG9zTmVnRHVyYXRpb24sIHdpdGhvdXRTdWZmaXgsIHRocmVzaG9sZHMsIGxvY2FsZSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCksXG4gICAgICAgICAgICBzZWNvbmRzID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSksXG4gICAgICAgICAgICBtaW51dGVzID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSksXG4gICAgICAgICAgICBob3VycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpLFxuICAgICAgICAgICAgZGF5cyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpLFxuICAgICAgICAgICAgbW9udGhzID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSksXG4gICAgICAgICAgICB3ZWVrcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd3JykpLFxuICAgICAgICAgICAgeWVhcnMgPSByb3VuZChkdXJhdGlvbi5hcygneScpKSxcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDw9IHRocmVzaG9sZHMuc3MgJiYgWydzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgJiYgWydzcycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDw9IDEgJiYgWydtJ10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPCB0aHJlc2hvbGRzLm0gJiYgWydtbScsIG1pbnV0ZXNdKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8PSAxICYmIFsnaCddKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8IHRocmVzaG9sZHMuaCAmJiBbJ2hoJywgaG91cnNdKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDw9IDEgJiYgWydkJ10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPCB0aHJlc2hvbGRzLmQgJiYgWydkZCcsIGRheXNdKTtcblxuICAgICAgICBpZiAodGhyZXNob2xkcy53ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIGEgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPD0gMSAmJiBbJ3cnXSkgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPCB0aHJlc2hvbGRzLncgJiYgWyd3dycsIHdlZWtzXSk7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEgfHxcbiAgICAgICAgICAgIChtb250aHMgPD0gMSAmJiBbJ00nXSkgfHxcbiAgICAgICAgICAgIChtb250aHMgPCB0aHJlc2hvbGRzLk0gJiYgWydNTScsIG1vbnRoc10pIHx8XG4gICAgICAgICAgICAoeWVhcnMgPD0gMSAmJiBbJ3knXSkgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcocm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICBpZiAocm91bmRpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3VuZGluZ0Z1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb3VuZCA9IHJvdW5kaW5nRnVuY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZShhcmdXaXRoU3VmZml4LCBhcmdUaHJlc2hvbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpdGhTdWZmaXggPSBmYWxzZSxcbiAgICAgICAgICAgIHRoID0gdGhyZXNob2xkcyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhcmdUaHJlc2hvbGRzID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgICAgIGFyZ1dpdGhTdWZmaXggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgd2l0aFN1ZmZpeCA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdUaHJlc2hvbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGggPSBPYmplY3QuYXNzaWduKHt9LCB0aHJlc2hvbGRzLCBhcmdUaHJlc2hvbGRzKTtcbiAgICAgICAgICAgIGlmIChhcmdUaHJlc2hvbGRzLnMgIT0gbnVsbCAmJiBhcmdUaHJlc2hvbGRzLnNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aC5zcyA9IGFyZ1RocmVzaG9sZHMucyAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgb3V0cHV0ID0gcmVsYXRpdmVUaW1lJDEodGhpcywgIXdpdGhTdWZmaXgsIHRoLCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyQxKCkge1xuICAgICAgICAvLyBmb3IgSVNPIHN0cmluZ3Mgd2UgZG8gbm90IHVzZSB0aGUgbm9ybWFsIGJ1YmJsaW5nIHJ1bGVzOlxuICAgICAgICAvLyAgKiBtaWxsaXNlY29uZHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIGhvdXJzXG4gICAgICAgIC8vICAqIGRheXMgZG8gbm90IGJ1YmJsZSBhdCBhbGxcbiAgICAgICAgLy8gICogbW9udGhzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSB5ZWFyc1xuICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29udGV4dC1mcmVlIGNvbnZlcnNpb24gYmV0d2VlbiBob3VycyBhbmQgZGF5c1xuICAgICAgICAvLyAodGhpbmsgb2YgY2xvY2sgY2hhbmdlcylcbiAgICAgICAgLy8gYW5kIGFsc28gbm90IGJldHdlZW4gZGF5cyBhbmQgbW9udGhzICgyOC0zMSBkYXlzIHBlciBtb250aClcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2Vjb25kcyA9IGFicyQxKHRoaXMuX21pbGxpc2Vjb25kcykgLyAxMDAwLFxuICAgICAgICAgICAgZGF5cyA9IGFicyQxKHRoaXMuX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzJDEodGhpcy5fbW9udGhzKSxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIHRvdGFsID0gdGhpcy5hc1NlY29uZHMoKSxcbiAgICAgICAgICAgIHRvdGFsU2lnbixcbiAgICAgICAgICAgIHltU2lnbixcbiAgICAgICAgICAgIGRheXNTaWduLFxuICAgICAgICAgICAgaG1zU2lnbjtcblxuICAgICAgICBpZiAoIXRvdGFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIEMjJ3MgKE5vZGEpIGFuZCBweXRob24gKGlzb2RhdGUpLi4uXG4gICAgICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXG4gICAgICAgICAgICByZXR1cm4gJ1AwRCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzNjAwIHNlY29uZHMgLT4gNjAgbWludXRlcyAtPiAxIGhvdXJcbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcbiAgICAgICAgbWludXRlcyAlPSA2MDtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2RvcmRpbGxlL21vbWVudC1pc29kdXJhdGlvbi9ibG9iL21hc3Rlci9tb21lbnQuaXNvZHVyYXRpb24uanNcbiAgICAgICAgcyA9IHNlY29uZHMgPyBzZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sICcnKSA6ICcnO1xuXG4gICAgICAgIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB5bVNpZ24gPSBzaWduKHRoaXMuX21vbnRocykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGRheXNTaWduID0gc2lnbih0aGlzLl9kYXlzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdG90YWxTaWduICtcbiAgICAgICAgICAgICdQJyArXG4gICAgICAgICAgICAoeWVhcnMgPyB5bVNpZ24gKyB5ZWFycyArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAobW9udGhzID8geW1TaWduICsgbW9udGhzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChkYXlzID8gZGF5c1NpZ24gKyBkYXlzICsgJ0QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyB8fCBtaW51dGVzIHx8IHNlY29uZHMgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzID8gaG1zU2lnbiArIGhvdXJzICsgJ0gnIDogJycpICtcbiAgICAgICAgICAgIChtaW51dGVzID8gaG1zU2lnbiArIG1pbnV0ZXMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKHNlY29uZHMgPyBobXNTaWduICsgcyArICdTJyA6ICcnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBwcm90byQyID0gRHVyYXRpb24ucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMi5pc1ZhbGlkID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzID0gYWJzO1xuICAgIHByb3RvJDIuYWRkID0gYWRkJDE7XG4gICAgcHJvdG8kMi5zdWJ0cmFjdCA9IHN1YnRyYWN0JDE7XG4gICAgcHJvdG8kMi5hcyA9IGFzO1xuICAgIHByb3RvJDIuYXNNaWxsaXNlY29uZHMgPSBhc01pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLmFzU2Vjb25kcyA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyA9IGFzTWludXRlcztcbiAgICBwcm90byQyLmFzSG91cnMgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzID0gYXNEYXlzO1xuICAgIHByb3RvJDIuYXNXZWVrcyA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyA9IGFzUXVhcnRlcnM7XG4gICAgcHJvdG8kMi5hc1llYXJzID0gYXNZZWFycztcbiAgICBwcm90byQyLnZhbHVlT2YgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlID0gYnViYmxlO1xuICAgIHByb3RvJDIuY2xvbmUgPSBjbG9uZSQxO1xuICAgIHByb3RvJDIuZ2V0ID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5zZWNvbmRzID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgPSBtaW51dGVzO1xuICAgIHByb3RvJDIuaG91cnMgPSBob3VycztcbiAgICBwcm90byQyLmRheXMgPSBkYXlzO1xuICAgIHByb3RvJDIud2Vla3MgPSB3ZWVrcztcbiAgICBwcm90byQyLm1vbnRocyA9IG1vbnRocztcbiAgICBwcm90byQyLnllYXJzID0geWVhcnM7XG4gICAgcHJvdG8kMi5odW1hbml6ZSA9IGh1bWFuaXplO1xuICAgIHByb3RvJDIudG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9KU09OID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90byQyLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3RvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpJyxcbiAgICAgICAgdG9JU09TdHJpbmckMVxuICAgICk7XG4gICAgcHJvdG8kMi5sYW5nID0gbGFuZztcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd4JywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG4gICAgYWRkUGFyc2VUb2tlbignWCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShwYXJzZUZsb2F0KGlucHV0KSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vISBtb21lbnQuanNcblxuICAgIGhvb2tzLnZlcnNpb24gPSAnMi4zMC4xJztcblxuICAgIHNldEhvb2tDYWxsYmFjayhjcmVhdGVMb2NhbCk7XG5cbiAgICBob29rcy5mbiA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiA9IG1pbjtcbiAgICBob29rcy5tYXggPSBtYXg7XG4gICAgaG9va3Mubm93ID0gbm93O1xuICAgIGhvb2tzLnV0YyA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ID0gY3JlYXRlVW5peDtcbiAgICBob29rcy5tb250aHMgPSBsaXN0TW9udGhzO1xuICAgIGhvb2tzLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBob29rcy5sb2NhbGUgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG4gICAgaG9va3MuaW52YWxpZCA9IGNyZWF0ZUludmFsaWQ7XG4gICAgaG9va3MuZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbjtcbiAgICBob29rcy5pc01vbWVudCA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzID0gbGlzdFdlZWtkYXlzO1xuICAgIGhvb2tzLnBhcnNlWm9uZSA9IGNyZWF0ZUluWm9uZTtcbiAgICBob29rcy5sb2NhbGVEYXRhID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuICAgIGhvb2tzLm1vbnRoc1Nob3J0ID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluID0gbGlzdFdlZWtkYXlzTWluO1xuICAgIGhvb2tzLmRlZmluZUxvY2FsZSA9IGRlZmluZUxvY2FsZTtcbiAgICBob29rcy51cGRhdGVMb2NhbGUgPSB1cGRhdGVMb2NhbGU7XG4gICAgaG9va3MubG9jYWxlcyA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgPSBsaXN0V2Vla2RheXNTaG9ydDtcbiAgICBob29rcy5ub3JtYWxpemVVbml0cyA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nID0gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmc7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkO1xuICAgIGhvb2tzLmNhbGVuZGFyRm9ybWF0ID0gZ2V0Q2FsZW5kYXJGb3JtYXQ7XG4gICAgaG9va3MucHJvdG90eXBlID0gcHJvdG87XG5cbiAgICAvLyBjdXJyZW50bHkgSFRNTDUgaW5wdXQgdHlwZSBvbmx5IHN1cHBvcnRzIDI0LWhvdXIgZm9ybWF0c1xuICAgIGhvb2tzLkhUTUw1X0ZNVCA9IHtcbiAgICAgICAgREFURVRJTUVfTE9DQUw6ICdZWVlZLU1NLUREVEhIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6ICdZWVlZLU1NLUREVEhIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBEQVRFOiAnWVlZWS1NTS1ERCcsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBUSU1FX01TOiAnSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAvLyA8aW5wdXQgdHlwZT1cIndlZWtcIiAvPlxuICAgICAgICBNT05USDogJ1lZWVktTU0nLCAvLyA8aW5wdXQgdHlwZT1cIm1vbnRoXCIgLz5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGhvb2tzO1xuXG59KSkpO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYm9vbGVhbiBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYm9vbGVhbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQm9vbGVhbihmYWxzZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Jvb2xlYW4obnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGJvb2xUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQm9vbGVhbjtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBOdW1iZXJgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIFRvIGV4Y2x1ZGUgYEluZmluaXR5YCwgYC1JbmZpbml0eWAsIGFuZCBgTmFOYCwgd2hpY2ggYXJlXG4gKiBjbGFzc2lmaWVkIGFzIG51bWJlcnMsIHVzZSB0aGUgYF8uaXNGaW5pdGVgIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG51bWJlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTnVtYmVyKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc051bWJlcignMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IG51bWJlclRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOdW1iZXI7XG4iLCAidmFyIGlzTnVtYmVyID0gcmVxdWlyZSgnLi9pc051bWJlcicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBOYU5gLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICogW2BOdW1iZXIuaXNOYU5gXShodHRwczovL21kbi5pby9OdW1iZXIvaXNOYU4pIGFuZCBpcyBub3QgdGhlIHNhbWUgYXNcbiAqIGdsb2JhbCBbYGlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vaXNOYU4pIHdoaWNoIHJldHVybnMgYHRydWVgIGZvclxuICogYHVuZGVmaW5lZGAgYW5kIG90aGVyIG5vbi1udW1iZXIgdmFsdWVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNOYU4oTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTmFOKG5ldyBOdW1iZXIoTmFOKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNOYU4odW5kZWZpbmVkKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTmFOKHVuZGVmaW5lZCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICAvLyBBbiBgTmFOYCBwcmltaXRpdmUgaXMgdGhlIG9ubHkgdmFsdWUgdGhhdCBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLlxuICAvLyBQZXJmb3JtIHRoZSBgdG9TdHJpbmdUYWdgIGNoZWNrIGZpcnN0IHRvIGF2b2lkIGVycm9ycyB3aXRoIHNvbWVcbiAgLy8gQWN0aXZlWCBvYmplY3RzIGluIElFLlxuICByZXR1cm4gaXNOdW1iZXIodmFsdWUpICYmIHZhbHVlICE9ICt2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc05hTjtcbiIsICIvKiEgQHByZXNlcnZlXG4gKiBudW1lcmFsLmpzXG4gKiB2ZXJzaW9uIDogMi4wLjZcbiAqIGF1dGhvciA6IEFkYW0gRHJhcGVyXG4gKiBsaWNlbnNlIDogTUlUXG4gKiBodHRwOi8vYWRhbXdkcmFwZXIuZ2l0aHViLmNvbS9OdW1lcmFsLWpzL1xuICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBnbG9iYWwubnVtZXJhbCA9IGZhY3RvcnkoKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIFZhcmlhYmxlc1xuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHZhciBudW1lcmFsLFxuICAgICAgICBfLFxuICAgICAgICBWRVJTSU9OID0gJzIuMC42JyxcbiAgICAgICAgZm9ybWF0cyA9IHt9LFxuICAgICAgICBsb2NhbGVzID0ge30sXG4gICAgICAgIGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgY3VycmVudExvY2FsZTogJ2VuJyxcbiAgICAgICAgICAgIHplcm9Gb3JtYXQ6IG51bGwsXG4gICAgICAgICAgICBudWxsRm9ybWF0OiBudWxsLFxuICAgICAgICAgICAgZGVmYXVsdEZvcm1hdDogJzAsMCcsXG4gICAgICAgICAgICBzY2FsZVBlcmNlbnRCeTEwMDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgY3VycmVudExvY2FsZTogZGVmYXVsdHMuY3VycmVudExvY2FsZSxcbiAgICAgICAgICAgIHplcm9Gb3JtYXQ6IGRlZmF1bHRzLnplcm9Gb3JtYXQsXG4gICAgICAgICAgICBudWxsRm9ybWF0OiBkZWZhdWx0cy5udWxsRm9ybWF0LFxuICAgICAgICAgICAgZGVmYXVsdEZvcm1hdDogZGVmYXVsdHMuZGVmYXVsdEZvcm1hdCxcbiAgICAgICAgICAgIHNjYWxlUGVyY2VudEJ5MTAwOiBkZWZhdWx0cy5zY2FsZVBlcmNlbnRCeTEwMFxuICAgICAgICB9O1xuXG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIENvbnN0cnVjdG9yc1xuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIC8vIE51bWVyYWwgcHJvdG90eXBlIG9iamVjdFxuICAgIGZ1bmN0aW9uIE51bWVyYWwoaW5wdXQsIG51bWJlcikge1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gbnVtYmVyO1xuICAgIH1cblxuICAgIG51bWVyYWwgPSBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgdmFsdWUsXG4gICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgdW5mb3JtYXRGdW5jdGlvbixcbiAgICAgICAgICAgIHJlZ2V4cDtcblxuICAgICAgICBpZiAobnVtZXJhbC5pc051bWVyYWwoaW5wdXQpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGlucHV0LnZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IDAgfHwgdHlwZW9mIGlucHV0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBudWxsIHx8IF8uaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuemVyb0Zvcm1hdCAmJiBpbnB1dCA9PT0gb3B0aW9ucy56ZXJvRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm51bGxGb3JtYXQgJiYgaW5wdXQgPT09IG9wdGlvbnMubnVsbEZvcm1hdCB8fCAhaW5wdXQucmVwbGFjZSgvW14wLTldKy9nLCAnJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGtpbmQgaW4gZm9ybWF0cykge1xuICAgICAgICAgICAgICAgICAgICByZWdleHAgPSB0eXBlb2YgZm9ybWF0c1traW5kXS5yZWdleHBzLnVuZm9ybWF0ID09PSAnZnVuY3Rpb24nID8gZm9ybWF0c1traW5kXS5yZWdleHBzLnVuZm9ybWF0KCkgOiBmb3JtYXRzW2tpbmRdLnJlZ2V4cHMudW5mb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2V4cCAmJiBpbnB1dC5tYXRjaChyZWdleHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uID0gZm9ybWF0c1traW5kXS51bmZvcm1hdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uID0gdW5mb3JtYXRGdW5jdGlvbiB8fCBudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXI7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZm9ybWF0RnVuY3Rpb24oaW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoaW5wdXQpfHwgbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTnVtZXJhbChpbnB1dCwgdmFsdWUpO1xuICAgIH07XG5cbiAgICAvLyB2ZXJzaW9uIG51bWJlclxuICAgIG51bWVyYWwudmVyc2lvbiA9IFZFUlNJT047XG5cbiAgICAvLyBjb21wYXJlIG51bWVyYWwgb2JqZWN0XG4gICAgbnVtZXJhbC5pc051bWVyYWwgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE51bWVyYWw7XG4gICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbnNcbiAgICBudW1lcmFsLl8gPSBfID0ge1xuICAgICAgICAvLyBmb3JtYXRzIG51bWJlcnMgc2VwYXJhdG9ycywgZGVjaW1hbHMgcGxhY2VzLCBzaWducywgYWJicmV2aWF0aW9uc1xuICAgICAgICBudW1iZXJUb0Zvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGxvY2FsZXNbbnVtZXJhbC5vcHRpb25zLmN1cnJlbnRMb2NhbGVdLFxuICAgICAgICAgICAgICAgIG5lZ1AgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBvcHREZWMgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBsZWFkaW5nQ291bnQgPSAwLFxuICAgICAgICAgICAgICAgIGFiYnIgPSAnJyxcbiAgICAgICAgICAgICAgICB0cmlsbGlvbiA9IDEwMDAwMDAwMDAwMDAsXG4gICAgICAgICAgICAgICAgYmlsbGlvbiA9IDEwMDAwMDAwMDAsXG4gICAgICAgICAgICAgICAgbWlsbGlvbiA9IDEwMDAwMDAsXG4gICAgICAgICAgICAgICAgdGhvdXNhbmQgPSAxMDAwLFxuICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJyxcbiAgICAgICAgICAgICAgICBuZWcgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UsIC8vIGZvcmNlIGFiYnJldmlhdGlvblxuICAgICAgICAgICAgICAgIGFicyxcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4LFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIGludCxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb24sXG4gICAgICAgICAgICAgICAgc2lnbmVkLFxuICAgICAgICAgICAgICAgIHRob3VzYW5kcyxcbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBuZXZlciBmb3JtYXQgYSBudWxsIHZhbHVlXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIHx8IDA7XG5cbiAgICAgICAgICAgIGFicyA9IE1hdGguYWJzKHZhbHVlKTtcblxuICAgICAgICAgICAgLy8gc2VlIGlmIHdlIHNob3VsZCB1c2UgcGFyZW50aGVzZXMgZm9yIG5lZ2F0aXZlIG51bWJlciBvciBpZiB3ZSBzaG91bGQgcHJlZml4IHdpdGggYSBzaWduXG4gICAgICAgICAgICAvLyBpZiBib3RoIGFyZSBwcmVzZW50IHdlIGRlZmF1bHQgdG8gcGFyZW50aGVzZXNcbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnKCcpKSB7XG4gICAgICAgICAgICAgICAgbmVnUCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1tcXCh8XFwpXS9nLCAnJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcrJykgfHwgbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJy0nKSkge1xuICAgICAgICAgICAgICAgIHNpZ25lZCA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcrJykgPyBmb3JtYXQuaW5kZXhPZignKycpIDogdmFsdWUgPCAwID8gZm9ybWF0LmluZGV4T2YoJy0nKSA6IC0xO1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9bXFwrfFxcLV0vZywgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzZWUgaWYgYWJicmV2aWF0aW9uIGlzIHdhbnRlZFxuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdhJykpIHtcbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UgPSBmb3JtYXQubWF0Y2goL2Eoa3xtfGJ8dCk/Lyk7XG5cbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UgPSBhYmJyRm9yY2UgPyBhYmJyRm9yY2VbMV0gOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgYWJicmV2aWF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgYScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFiYnIgPSAnICc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UobmV3IFJlZ0V4cChhYmJyICsgJ2Fba21idF0/JyksICcnKTtcblxuICAgICAgICAgICAgICAgIGlmIChhYnMgPj0gdHJpbGxpb24gJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICd0Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0cmlsbGlvblxuICAgICAgICAgICAgICAgICAgICBhYmJyICs9IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gdHJpbGxpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhYnMgPCB0cmlsbGlvbiAmJiBhYnMgPj0gYmlsbGlvbiAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ2InKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGJpbGxpb25cbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gYmlsbGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFicyA8IGJpbGxpb24gJiYgYWJzID49IG1pbGxpb24gJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICdtJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBtaWxsaW9uXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMubWlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIG1pbGxpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhYnMgPCBtaWxsaW9uICYmIGFicyA+PSB0aG91c2FuZCAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ2snKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRob3VzYW5kXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMudGhvdXNhbmQ7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyB0aG91c2FuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBvcHRpb25hbCBkZWNpbWFsc1xuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdbLl0nKSkge1xuICAgICAgICAgICAgICAgIG9wdERlYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoJ1suXScsICcuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJyZWFrIG51bWJlciBhbmQgZm9ybWF0XG4gICAgICAgICAgICBpbnQgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJylbMF07XG4gICAgICAgICAgICBwcmVjaXNpb24gPSBmb3JtYXQuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgICAgIHRob3VzYW5kcyA9IGZvcm1hdC5pbmRleE9mKCcsJyk7XG4gICAgICAgICAgICBsZWFkaW5nQ291bnQgPSAoZm9ybWF0LnNwbGl0KCcuJylbMF0uc3BsaXQoJywnKVswXS5tYXRjaCgvMC9nKSB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICAgICAgICBpZiAocHJlY2lzaW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhwcmVjaXNpb24sICdbJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uLnJlcGxhY2UoJ10nLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbi5zcGxpdCgnWycpO1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gbnVtZXJhbC5fLnRvRml4ZWQodmFsdWUsIChwcmVjaXNpb25bMF0ubGVuZ3RoICsgcHJlY2lzaW9uWzFdLmxlbmd0aCksIHJvdW5kaW5nRnVuY3Rpb24sIHByZWNpc2lvblsxXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uLmxlbmd0aCwgcm91bmRpbmdGdW5jdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaW50ID0gZGVjaW1hbC5zcGxpdCgnLicpWzBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhkZWNpbWFsLCAnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsICsgZGVjaW1hbC5zcGxpdCgnLicpWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0RGVjICYmIE51bWJlcihkZWNpbWFsLnNsaWNlKDEpKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnQgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgMCwgcm91bmRpbmdGdW5jdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGFiYnJldmlhdGlvbiBhZ2FpbiBhZnRlciByb3VuZGluZ1xuICAgICAgICAgICAgaWYgKGFiYnIgJiYgIWFiYnJGb3JjZSAmJiBOdW1iZXIoaW50KSA+PSAxMDAwICYmIGFiYnIgIT09IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gU3RyaW5nKE51bWJlcihpbnQpIC8gMTAwMCk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFiYnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBsb2NhbGUuYWJicmV2aWF0aW9ucy50aG91c2FuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5taWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgbG9jYWxlLmFiYnJldmlhdGlvbnMubWlsbGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgbG9jYWxlLmFiYnJldmlhdGlvbnMuYmlsbGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy50cmlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAvLyBmb3JtYXQgbnVtYmVyXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGludCwgJy0nKSkge1xuICAgICAgICAgICAgICAgIGludCA9IGludC5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICBuZWcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW50Lmxlbmd0aCA8IGxlYWRpbmdDb3VudCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBsZWFkaW5nQ291bnQgLSBpbnQubGVuZ3RoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGludCA9ICcwJyArIGludDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aG91c2FuZHMgPiAtMSkge1xuICAgICAgICAgICAgICAgIGludCA9IGludC50b1N0cmluZygpLnJlcGxhY2UoLyhcXGQpKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJyQxJyArIGxvY2FsZS5kZWxpbWl0ZXJzLnRob3VzYW5kcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmb3JtYXQuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG91dHB1dCA9IGludCArIGRlY2ltYWwgKyAoYWJiciA/IGFiYnIgOiAnJyk7XG5cbiAgICAgICAgICAgIGlmIChuZWdQKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKG5lZ1AgJiYgbmVnID8gJygnIDogJycpICsgb3V0cHV0ICsgKG5lZ1AgJiYgbmVnID8gJyknIDogJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc2lnbmVkID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gc2lnbmVkID09PSAwID8gKG5lZyA/ICctJyA6ICcrJykgKyBvdXRwdXQgOiBvdXRwdXQgKyAobmVnID8gJy0nIDogJysnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5lZykge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnLScgKyBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICAvLyB1bmZvcm1hdHMgbnVtYmVycyBzZXBhcmF0b3JzLCBkZWNpbWFscyBwbGFjZXMsIHNpZ25zLCBhYmJyZXZpYXRpb25zXG4gICAgICAgIHN0cmluZ1RvTnVtYmVyOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBsb2NhbGVzW29wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgc3RyaW5nT3JpZ2luYWwgPSBzdHJpbmcsXG4gICAgICAgICAgICAgICAgYWJicmV2aWF0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmQ6IDMsXG4gICAgICAgICAgICAgICAgICAgIG1pbGxpb246IDYsXG4gICAgICAgICAgICAgICAgICAgIGJpbGxpb246IDksXG4gICAgICAgICAgICAgICAgICAgIHRyaWxsaW9uOiAxMlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWJicmV2aWF0aW9uLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgcmVnZXhwO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy56ZXJvRm9ybWF0ICYmIHN0cmluZyA9PT0gb3B0aW9ucy56ZXJvRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm51bGxGb3JtYXQgJiYgc3RyaW5nID09PSBvcHRpb25zLm51bGxGb3JtYXQgfHwgIXN0cmluZy5yZXBsYWNlKC9bXjAtOV0rL2csICcnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcLi9nLCAnJykucmVwbGFjZShsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsLCAnLicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoYWJicmV2aWF0aW9uIGluIGFiYnJldmlhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnZXhwID0gbmV3IFJlZ0V4cCgnW15hLXpBLVpdJyArIGxvY2FsZS5hYmJyZXZpYXRpb25zW2FiYnJldmlhdGlvbl0gKyAnKD86XFxcXCl8KFxcXFwnICsgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbCArICcpPyg/OlxcXFwpKT8pPyQnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nT3JpZ2luYWwubWF0Y2gocmVnZXhwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKj0gTWF0aC5wb3coMTAsIGFiYnJldmlhdGlvbnNbYWJicmV2aWF0aW9uXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBuZWdhdGl2ZSBudW1iZXJcbiAgICAgICAgICAgICAgICB2YWx1ZSAqPSAoc3RyaW5nLnNwbGl0KCctJykubGVuZ3RoICsgTWF0aC5taW4oc3RyaW5nLnNwbGl0KCcoJykubGVuZ3RoIC0gMSwgc3RyaW5nLnNwbGl0KCcpJykubGVuZ3RoIC0gMSkpICUgMiA/IDEgOiAtMTtcblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBub24gbnVtYmVyc1xuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9bXjAtOVxcLl0rL2csICcnKTtcblxuICAgICAgICAgICAgICAgIHZhbHVlICo9IE51bWJlcihzdHJpbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGlzTmFOOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4odmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBpbmNsdWRlczogZnVuY3Rpb24oc3RyaW5nLCBzZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuaW5kZXhPZihzZWFyY2gpICE9PSAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0OiBmdW5jdGlvbihzdHJpbmcsIHN1YlN0cmluZywgc3RhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UoMCwgc3RhcnQpICsgc3ViU3RyaW5nICsgc3RyaW5nLnNsaWNlKHN0YXJ0KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVkdWNlOiBmdW5jdGlvbihhcnJheSwgY2FsbGJhY2sgLyosIGluaXRpYWxWYWx1ZSovKSB7XG4gICAgICAgICAgICBpZiAodGhpcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5LnByb3RvdHlwZS5yZWR1Y2UgY2FsbGVkIG9uIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdChhcnJheSksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgayA9IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBhcmd1bWVudHNbMl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdoaWxlIChrIDwgbGVuICYmICEoayBpbiB0KSkge1xuICAgICAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGsgPj0gbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRbaysrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoayBpbiB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIHRba10sIGssIHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXB1dGVzIHRoZSBtdWx0aXBsaWVyIG5lY2Vzc2FyeSB0byBtYWtlIHggPj0gMSxcbiAgICAgICAgICogZWZmZWN0aXZlbHkgZWxpbWluYXRpbmcgbWlzY2FsY3VsYXRpb25zIGNhdXNlZCBieVxuICAgICAgICAgKiBmaW5pdGUgcHJlY2lzaW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgbXVsdGlwbGllcjogZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IHgudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoIDwgMiA/IDEgOiBNYXRoLnBvdygxMCwgcGFydHNbMV0ubGVuZ3RoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgcmV0dXJucyB0aGUgbWF4aW11bVxuICAgICAgICAgKiBtdWx0aXBsaWVyIHRoYXQgbXVzdCBiZSB1c2VkIHRvIG5vcm1hbGl6ZSBhbiBvcGVyYXRpb24gaW52b2x2aW5nXG4gICAgICAgICAqIGFsbCBvZiB0aGVtLlxuICAgICAgICAgKi9cbiAgICAgICAgY29ycmVjdGlvbkZhY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgICAgICAgICByZXR1cm4gYXJncy5yZWR1Y2UoZnVuY3Rpb24oYWNjdW0sIG5leHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbW4gPSBfLm11bHRpcGxpZXIobmV4dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtID4gbW4gPyBhY2N1bSA6IG1uO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0b0ZpeGVkKCkgdGhhdCB0cmVhdHMgZmxvYXRzIG1vcmUgbGlrZSBkZWNpbWFsc1xuICAgICAgICAgKlxuICAgICAgICAgKiBGaXhlcyBiaW5hcnkgcm91bmRpbmcgaXNzdWVzIChlZy4gKDAuNjE1KS50b0ZpeGVkKDIpID09PSAnMC42MScpIHRoYXQgcHJlc2VudFxuICAgICAgICAgKiBwcm9ibGVtcyBmb3IgYWNjb3VudGluZy0gYW5kIGZpbmFuY2UtcmVsYXRlZCBzb2Z0d2FyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRvRml4ZWQ6IGZ1bmN0aW9uKHZhbHVlLCBtYXhEZWNpbWFscywgcm91bmRpbmdGdW5jdGlvbiwgb3B0aW9uYWxzKSB7XG4gICAgICAgICAgICB2YXIgc3BsaXRWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKSxcbiAgICAgICAgICAgICAgICBtaW5EZWNpbWFscyA9IG1heERlY2ltYWxzIC0gKG9wdGlvbmFscyB8fCAwKSxcbiAgICAgICAgICAgICAgICBib3VuZGVkUHJlY2lzaW9uLFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsc1JlZ0V4cCxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgIC8vIFVzZSB0aGUgc21hbGxlc3QgcHJlY2lzaW9uIHZhbHVlIHBvc3NpYmxlIHRvIGF2b2lkIGVycm9ycyBmcm9tIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uXG4gICAgICAgICAgICBpZiAoc3BsaXRWYWx1ZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgYm91bmRlZFByZWNpc2lvbiA9IE1hdGgubWluKE1hdGgubWF4KHNwbGl0VmFsdWVbMV0ubGVuZ3RoLCBtaW5EZWNpbWFscyksIG1heERlY2ltYWxzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJvdW5kZWRQcmVjaXNpb24gPSBtaW5EZWNpbWFscztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG93ZXIgPSBNYXRoLnBvdygxMCwgYm91bmRlZFByZWNpc2lvbik7XG5cbiAgICAgICAgICAgIC8vIE11bHRpcGx5IHVwIGJ5IHByZWNpc2lvbiwgcm91bmQgYWNjdXJhdGVseSwgdGhlbiBkaXZpZGUgYW5kIHVzZSBuYXRpdmUgdG9GaXhlZCgpOlxuICAgICAgICAgICAgb3V0cHV0ID0gKHJvdW5kaW5nRnVuY3Rpb24odmFsdWUgKyAnZSsnICsgYm91bmRlZFByZWNpc2lvbikgLyBwb3dlcikudG9GaXhlZChib3VuZGVkUHJlY2lzaW9uKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbmFscyA+IG1heERlY2ltYWxzIC0gYm91bmRlZFByZWNpc2lvbikge1xuICAgICAgICAgICAgICAgIG9wdGlvbmFsc1JlZ0V4cCA9IG5ldyBSZWdFeHAoJ1xcXFwuPzB7MSwnICsgKG9wdGlvbmFscyAtIChtYXhEZWNpbWFscyAtIGJvdW5kZWRQcmVjaXNpb24pKSArICd9JCcpO1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKG9wdGlvbmFsc1JlZ0V4cCwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIGF2YWxpYWJsZSBvcHRpb25zXG4gICAgbnVtZXJhbC5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIC8vIGF2YWxpYWJsZSBmb3JtYXRzXG4gICAgbnVtZXJhbC5mb3JtYXRzID0gZm9ybWF0cztcblxuICAgIC8vIGF2YWxpYWJsZSBmb3JtYXRzXG4gICAgbnVtZXJhbC5sb2NhbGVzID0gbG9jYWxlcztcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY3VycmVudCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBudW1lcmFsLmxvY2FsZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBvcHRpb25zLmN1cnJlbnRMb2NhbGUgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zLmN1cnJlbnRMb2NhbGU7XG4gICAgfTtcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBsb2FkZWQgbG9jYWxlIGRhdGEuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnRcbiAgICAvLyBnbG9iYWwgbG9jYWxlIG9iamVjdC5cbiAgICBudW1lcmFsLmxvY2FsZURhdGEgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW29wdGlvbnMuY3VycmVudExvY2FsZV07XG4gICAgICAgIH1cblxuICAgICAgICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAoIWxvY2FsZXNba2V5XSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxvY2FsZSA6ICcgKyBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNba2V5XTtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkZWZhdWx0cykge1xuICAgICAgICAgICAgb3B0aW9uc1twcm9wZXJ0eV0gPSBkZWZhdWx0c1twcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbnVtZXJhbC56ZXJvRm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIG9wdGlvbnMuemVyb0Zvcm1hdCA9IHR5cGVvZihmb3JtYXQpID09PSAnc3RyaW5nJyA/IGZvcm1hdCA6IG51bGw7XG4gICAgfTtcblxuICAgIG51bWVyYWwubnVsbEZvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgb3B0aW9ucy5udWxsRm9ybWF0ID0gdHlwZW9mKGZvcm1hdCkgPT09ICdzdHJpbmcnID8gZm9ybWF0IDogbnVsbDtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5kZWZhdWx0Rm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIG9wdGlvbnMuZGVmYXVsdEZvcm1hdCA9IHR5cGVvZihmb3JtYXQpID09PSAnc3RyaW5nJyA/IGZvcm1hdCA6ICcwLjAnO1xuICAgIH07XG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgZm9ybWF0KSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgaWYgKHRoaXNbdHlwZSArICdzJ11bbmFtZV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IobmFtZSArICcgJyArIHR5cGUgKyAnIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXNbdHlwZSArICdzJ11bbmFtZV0gPSBmb3JtYXQ7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9O1xuXG5cbiAgICBudW1lcmFsLnZhbGlkYXRlID0gZnVuY3Rpb24odmFsLCBjdWx0dXJlKSB7XG4gICAgICAgIHZhciBfZGVjaW1hbFNlcCxcbiAgICAgICAgICAgIF90aG91c2FuZFNlcCxcbiAgICAgICAgICAgIF9jdXJyU3ltYm9sLFxuICAgICAgICAgICAgX3ZhbEFycmF5LFxuICAgICAgICAgICAgX2FiYnJPYmosXG4gICAgICAgICAgICBfdGhvdXNhbmRSZWdFeCxcbiAgICAgICAgICAgIGxvY2FsZURhdGEsXG4gICAgICAgICAgICB0ZW1wO1xuXG4gICAgICAgIC8vY29lcmNlIHZhbCB0byBzdHJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWwgKz0gJyc7XG5cbiAgICAgICAgICAgIGlmIChjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ051bWVyYWwuanM6IFZhbHVlIGlzIG5vdCBzdHJpbmcuIEl0IGhhcyBiZWVuIGNvLWVyY2VkIHRvOiAnLCB2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy90cmltIHdoaXRlc3BhY2VzIGZyb20gZWl0aGVyIHNpZGVzXG4gICAgICAgIHZhbCA9IHZhbC50cmltKCk7XG5cbiAgICAgICAgLy9pZiB2YWwgaXMganVzdCBkaWdpdHMgcmV0dXJuIHRydWVcbiAgICAgICAgaWYgKCEhdmFsLm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHZhbCBpcyBlbXB0eSByZXR1cm4gZmFsc2VcbiAgICAgICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vZ2V0IHRoZSBkZWNpbWFsIGFuZCB0aG91c2FuZHMgc2VwYXJhdG9yIGZyb20gbnVtZXJhbC5sb2NhbGVEYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvL2NoZWNrIGlmIHRoZSBjdWx0dXJlIGlzIHVuZGVyc3Rvb2QgYnkgbnVtZXJhbC4gaWYgbm90LCBkZWZhdWx0IGl0IHRvIGN1cnJlbnQgbG9jYWxlXG4gICAgICAgICAgICBsb2NhbGVEYXRhID0gbnVtZXJhbC5sb2NhbGVEYXRhKGN1bHR1cmUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2NhbGVEYXRhID0gbnVtZXJhbC5sb2NhbGVEYXRhKG51bWVyYWwubG9jYWxlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9zZXR1cCB0aGUgZGVsaW1pdGVycyBhbmQgY3VycmVuY3kgc3ltYm9sIGJhc2VkIG9uIGN1bHR1cmUvbG9jYWxlXG4gICAgICAgIF9jdXJyU3ltYm9sID0gbG9jYWxlRGF0YS5jdXJyZW5jeS5zeW1ib2w7XG4gICAgICAgIF9hYmJyT2JqID0gbG9jYWxlRGF0YS5hYmJyZXZpYXRpb25zO1xuICAgICAgICBfZGVjaW1hbFNlcCA9IGxvY2FsZURhdGEuZGVsaW1pdGVycy5kZWNpbWFsO1xuICAgICAgICBpZiAobG9jYWxlRGF0YS5kZWxpbWl0ZXJzLnRob3VzYW5kcyA9PT0gJy4nKSB7XG4gICAgICAgICAgICBfdGhvdXNhbmRTZXAgPSAnXFxcXC4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3Rob3VzYW5kU2VwID0gbG9jYWxlRGF0YS5kZWxpbWl0ZXJzLnRob3VzYW5kcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkYXRpbmcgY3VycmVuY3kgc3ltYm9sXG4gICAgICAgIHRlbXAgPSB2YWwubWF0Y2goL15bXlxcZF0rLyk7XG4gICAgICAgIGlmICh0ZW1wICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwuc3Vic3RyKDEpO1xuICAgICAgICAgICAgaWYgKHRlbXBbMF0gIT09IF9jdXJyU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy92YWxpZGF0aW5nIGFiYnJldmlhdGlvbiBzeW1ib2xcbiAgICAgICAgdGVtcCA9IHZhbC5tYXRjaCgvW15cXGRdKyQvKTtcbiAgICAgICAgaWYgKHRlbXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICBpZiAodGVtcFswXSAhPT0gX2FiYnJPYmoudGhvdXNhbmQgJiYgdGVtcFswXSAhPT0gX2FiYnJPYmoubWlsbGlvbiAmJiB0ZW1wWzBdICE9PSBfYWJick9iai5iaWxsaW9uICYmIHRlbXBbMF0gIT09IF9hYmJyT2JqLnRyaWxsaW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3Rob3VzYW5kUmVnRXggPSBuZXcgUmVnRXhwKF90aG91c2FuZFNlcCArICd7Mn0nKTtcblxuICAgICAgICBpZiAoIXZhbC5tYXRjaCgvW15cXGQuLF0vZykpIHtcbiAgICAgICAgICAgIF92YWxBcnJheSA9IHZhbC5zcGxpdChfZGVjaW1hbFNlcCk7XG4gICAgICAgICAgICBpZiAoX3ZhbEFycmF5Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChfdmFsQXJyYXkubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrLipcXGQkLykgJiYgIV92YWxBcnJheVswXS5tYXRjaChfdGhvdXNhbmRSZWdFeCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdmFsQXJyYXlbMF0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrJC8pICYmICFfdmFsQXJyYXlbMF0ubWF0Y2goX3Rob3VzYW5kUmVnRXgpICYmICEhIF92YWxBcnJheVsxXS5tYXRjaCgvXlxcZCskLykpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggISEgX3ZhbEFycmF5WzBdLm1hdGNoKC9eXFxkKy4qXFxkJC8pICYmICFfdmFsQXJyYXlbMF0ubWF0Y2goX3Rob3VzYW5kUmVnRXgpICYmICEhIF92YWxBcnJheVsxXS5tYXRjaCgvXlxcZCskLykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgTnVtZXJhbCBQcm90b3R5cGVcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBudW1lcmFsLmZuID0gTnVtZXJhbC5wcm90b3R5cGUgPSB7XG4gICAgICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1lcmFsKHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKGlucHV0U3RyaW5nLCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl92YWx1ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBpbnB1dFN0cmluZyB8fCBvcHRpb25zLmRlZmF1bHRGb3JtYXQsXG4gICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb247XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcm91bmRpbmdGdW5jdGlvblxuICAgICAgICAgICAgcm91bmRpbmdGdW5jdGlvbiA9IHJvdW5kaW5nRnVuY3Rpb24gfHwgTWF0aC5yb3VuZDtcblxuICAgICAgICAgICAgLy8gZm9ybWF0IGJhc2VkIG9uIHZhbHVlXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IDAgJiYgb3B0aW9ucy56ZXJvRm9ybWF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3B0aW9ucy56ZXJvRm9ybWF0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiBvcHRpb25zLm51bGxGb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvcHRpb25zLm51bGxGb3JtYXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoa2luZCBpbiBmb3JtYXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXQubWF0Y2goZm9ybWF0c1traW5kXS5yZWdleHBzLmZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uID0gZm9ybWF0c1traW5kXS5mb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb24gPSBmb3JtYXRGdW5jdGlvbiB8fCBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBmb3JtYXRGdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBpbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGFkZDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yLmNhbGwobnVsbCwgdGhpcy5fdmFsdWUsIHZhbHVlKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtICsgTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY3Vycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrLCAwKSAvIGNvcnJGYWN0b3I7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBzdWJ0cmFjdDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yLmNhbGwobnVsbCwgdGhpcy5fdmFsdWUsIHZhbHVlKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtIC0gTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY3Vycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3ZhbHVlXSwgY2JhY2ssIE1hdGgucm91bmQodGhpcy5fdmFsdWUgKiBjb3JyRmFjdG9yKSkgLyBjb3JyRmFjdG9yO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgbXVsdGlwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICB2YXIgY29yckZhY3RvciA9IF8uY29ycmVjdGlvbkZhY3RvcihhY2N1bSwgY3Vycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoYWNjdW0gKiBjb3JyRmFjdG9yKSAqIE1hdGgucm91bmQoY3VyciAqIGNvcnJGYWN0b3IpIC8gTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrLCAxKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGRpdmlkZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yKGFjY3VtLCBjdXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChhY2N1bSAqIGNvcnJGYWN0b3IpIC8gTWF0aC5yb3VuZChjdXJyICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGRpZmZlcmVuY2U6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMobnVtZXJhbCh0aGlzLl92YWx1ZSkuc3VidHJhY3QodmFsdWUpLnZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgRGVmYXVsdCBMb2NhbGUgJiYgRm9ybWF0XG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgbnVtZXJhbC5yZWdpc3RlcignbG9jYWxlJywgJ2VuJywge1xuICAgICAgICBkZWxpbWl0ZXJzOiB7XG4gICAgICAgICAgICB0aG91c2FuZHM6ICcsJyxcbiAgICAgICAgICAgIGRlY2ltYWw6ICcuJ1xuICAgICAgICB9LFxuICAgICAgICBhYmJyZXZpYXRpb25zOiB7XG4gICAgICAgICAgICB0aG91c2FuZDogJ2snLFxuICAgICAgICAgICAgbWlsbGlvbjogJ20nLFxuICAgICAgICAgICAgYmlsbGlvbjogJ2InLFxuICAgICAgICAgICAgdHJpbGxpb246ICd0J1xuICAgICAgICB9LFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbihudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTA7XG4gICAgICAgICAgICByZXR1cm4gKH5+KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgfSxcbiAgICAgICAgY3VycmVuY3k6IHtcbiAgICAgICAgICAgIHN5bWJvbDogJyQnXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIFxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdicHMnLCB7XG4gICAgICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiAvKEJQUykvLFxuICAgICAgICAgICAgICAgIHVuZm9ybWF0OiAvKEJQUykvXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNwYWNlID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBCUFMnKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICogMTAwMDA7XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlIEJQU1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/QlBTLywgJycpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhvdXRwdXQsICcpJykpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNwbGl0KCcnKTtcblxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQuc3BsaWNlKC0xLCAwLCBzcGFjZSArICdCUFMnKTtcblxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuam9pbignJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0ICsgc3BhY2UgKyAnQlBTJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKyhudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXIoc3RyaW5nKSAqIDAuMDAwMSkudG9GaXhlZCgxNSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkZWNpbWFsID0ge1xuICAgICAgICAgICAgYmFzZTogMTAwMCxcbiAgICAgICAgICAgIHN1ZmZpeGVzOiBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXVxuICAgICAgICB9LFxuICAgICAgICBiaW5hcnkgPSB7XG4gICAgICAgICAgICBiYXNlOiAxMDI0LFxuICAgICAgICAgICAgc3VmZml4ZXM6IFsnQicsICdLaUInLCAnTWlCJywgJ0dpQicsICdUaUInLCAnUGlCJywgJ0VpQicsICdaaUInLCAnWWlCJ11cbiAgICAgICAgfTtcblxuICAgIHZhciBhbGxTdWZmaXhlcyA9ICBkZWNpbWFsLnN1ZmZpeGVzLmNvbmNhdChiaW5hcnkuc3VmZml4ZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjaW1hbC5zdWZmaXhlcy5pbmRleE9mKGl0ZW0pIDwgMDtcbiAgICAgICAgfSkpO1xuICAgICAgICB2YXIgdW5mb3JtYXRSZWdleCA9IGFsbFN1ZmZpeGVzLmpvaW4oJ3wnKTtcbiAgICAgICAgLy8gQWxsb3cgc3VwcG9ydCBmb3IgQlBTIChodHRwOi8vd3d3LmludmVzdG9wZWRpYS5jb20vdGVybXMvYi9iYXNpc3BvaW50LmFzcClcbiAgICAgICAgdW5mb3JtYXRSZWdleCA9ICcoJyArIHVuZm9ybWF0UmVnZXgucmVwbGFjZSgnQicsICdCKD8hUFMpJykgKyAnKSc7XG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnYnl0ZXMnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhbMFxcc11pP2IpLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiBuZXcgUmVnRXhwKHVuZm9ybWF0UmVnZXgpXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIG91dHB1dCxcbiAgICAgICAgICAgICAgICBieXRlcyA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdpYicpID8gYmluYXJ5IDogZGVjaW1hbCxcbiAgICAgICAgICAgICAgICBzdWZmaXggPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIGInKSB8fCBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIGliJykgPyAnICcgOiAnJyxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4O1xuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP2k/Yi8sICcnKTtcblxuICAgICAgICAgICAgZm9yIChwb3dlciA9IDA7IHBvd2VyIDw9IGJ5dGVzLnN1ZmZpeGVzLmxlbmd0aDsgcG93ZXIrKykge1xuICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgucG93KGJ5dGVzLmJhc2UsIHBvd2VyKTtcbiAgICAgICAgICAgICAgICBtYXggPSBNYXRoLnBvdyhieXRlcy5iYXNlLCBwb3dlciArIDEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAwIHx8IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8IG1heCkge1xuICAgICAgICAgICAgICAgICAgICBzdWZmaXggKz0gYnl0ZXMuc3VmZml4ZXNbcG93ZXJdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW4gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gbWluO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyBzdWZmaXg7XG4gICAgICAgIH0sXG4gICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpLFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllcjtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZm9yIChwb3dlciA9IGRlY2ltYWwuc3VmZml4ZXMubGVuZ3RoIC0gMTsgcG93ZXIgPj0gMDsgcG93ZXItLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgZGVjaW1hbC5zdWZmaXhlc1twb3dlcl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBieXRlc011bHRpcGxpZXIgPSBNYXRoLnBvdyhkZWNpbWFsLmJhc2UsIHBvd2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgYmluYXJ5LnN1ZmZpeGVzW3Bvd2VyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllciA9IE1hdGgucG93KGJpbmFyeS5iYXNlLCBwb3dlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFsdWUgKj0gKGJ5dGVzTXVsdGlwbGllciB8fCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ2N1cnJlbmN5Jywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oXFwkKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbnVtZXJhbC5sb2NhbGVzW251bWVyYWwub3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBzeW1ib2xzID0ge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmU6IGZvcm1hdC5tYXRjaCgvXihbXFwrfFxcLXxcXCh8XFxzfFxcJF0qKS8pWzBdLFxuICAgICAgICAgICAgICAgICAgICBhZnRlcjogZm9ybWF0Lm1hdGNoKC8oW1xcK3xcXC18XFwpfFxcc3xcXCRdKikkLylbMF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBzeW1ib2wsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgLy8gc3RyaXAgZm9ybWF0IG9mIHNwYWNlcyBhbmQgJFxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9cXCRcXHM/LywgJycpO1xuXG4gICAgICAgICAgICAvLyBmb3JtYXQgdGhlIG51bWJlclxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgYmFzZWQgb24gdmFsdWVcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9scy5iZWZvcmUgPSBzeW1ib2xzLmJlZm9yZS5yZXBsYWNlKC9bXFwtXFwoXS8sICcnKTtcbiAgICAgICAgICAgICAgICBzeW1ib2xzLmFmdGVyID0gc3ltYm9scy5hZnRlci5yZXBsYWNlKC9bXFwtXFwpXS8sICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwICYmICghbnVtZXJhbC5fLmluY2x1ZGVzKHN5bWJvbHMuYmVmb3JlLCAnLScpICYmICFudW1lcmFsLl8uaW5jbHVkZXMoc3ltYm9scy5iZWZvcmUsICcoJykpKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9scy5iZWZvcmUgPSAnLScgKyBzeW1ib2xzLmJlZm9yZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGVhY2ggYmVmb3JlIHN5bWJvbFxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN5bWJvbHMuYmVmb3JlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gc3ltYm9scy5iZWZvcmVbaV07XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCAnICcsIGkgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggZWFjaCBhZnRlciBzeW1ib2xcbiAgICAgICAgICAgIGZvciAoaSA9IHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBzeW1ib2xzLmFmdGVyW2ldO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBpID09PSBzeW1ib2xzLmFmdGVyLmxlbmd0aCAtIDEgPyBvdXRwdXQgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sIDogbnVtZXJhbC5fLmluc2VydChvdXRwdXQsIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wsIC0oc3ltYm9scy5hZnRlci5sZW5ndGggLSAoMSArIGkpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBpID09PSBzeW1ib2xzLmFmdGVyLmxlbmd0aCAtIDEgPyBvdXRwdXQgKyAnICcgOiBudW1lcmFsLl8uaW5zZXJ0KG91dHB1dCwgJyAnLCAtKHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gKDEgKyBpKSArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wubGVuZ3RoIC0gMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnZXhwb25lbnRpYWwnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhlXFwrfGUtKS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyhlXFwrfGUtKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0LFxuICAgICAgICAgICAgICAgIGV4cG9uZW50aWFsID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhbnVtZXJhbC5fLmlzTmFOKHZhbHVlKSA/IHZhbHVlLnRvRXhwb25lbnRpYWwoKSA6ICcwZSswJyxcbiAgICAgICAgICAgICAgICBwYXJ0cyA9IGV4cG9uZW50aWFsLnNwbGl0KCdlJyk7XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9lW1xcK3xcXC1dezF9MC8sICcnKTtcblxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KE51bWJlcihwYXJ0c1swXSksIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyAnZScgKyBwYXJ0c1sxXTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gbnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgJ2UrJykgPyBzdHJpbmcuc3BsaXQoJ2UrJykgOiBzdHJpbmcuc3BsaXQoJ2UtJyksXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIocGFydHNbMF0pLFxuICAgICAgICAgICAgICAgIHBvd2VyID0gTnVtYmVyKHBhcnRzWzFdKTtcblxuICAgICAgICAgICAgcG93ZXIgPSBudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCAnZS0nKSA/IHBvd2VyICo9IC0xIDogcG93ZXI7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gbnVtZXJhbC5fLmNvcnJlY3Rpb25GYWN0b3IoYWNjdW0sIGN1cnIpLFxuICAgICAgICAgICAgICAgICAgICBudW0gPSAoYWNjdW0gKiBjb3JyRmFjdG9yKSAqIChjdXJyICogY29yckZhY3RvcikgLyAoY29yckZhY3RvciAqIGNvcnJGYWN0b3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudW1lcmFsLl8ucmVkdWNlKFt2YWx1ZSwgTWF0aC5wb3coMTAsIHBvd2VyKV0sIGNiYWNrLCAxKTtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdvcmRpbmFsJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8obykvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IG51bWVyYWwubG9jYWxlc1tudW1lcmFsLm9wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIG9yZGluYWwgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIG8nKSA/ICcgJyA6ICcnO1xuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP28vLCAnJyk7XG5cbiAgICAgICAgICAgIG9yZGluYWwgKz0gbG9jYWxlLm9yZGluYWwodmFsdWUpO1xuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyBvcmRpbmFsO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ3BlcmNlbnRhZ2UnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyglKS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyglKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgc3BhY2UgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnICUnKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgaWYgKG51bWVyYWwub3B0aW9ucy5zY2FsZVBlcmNlbnRCeTEwMCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAxMDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgJVxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9cXCUvLCAnJyk7XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhvdXRwdXQsICcpJykpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXQoJycpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0LnNwbGljZSgtMSwgMCwgc3BhY2UgKyAnJScpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmpvaW4oJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQgKyBzcGFjZSArICclJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIG51bWJlciA9IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpO1xuICAgICAgICAgICAgaWYgKG51bWVyYWwub3B0aW9ucy5zY2FsZVBlcmNlbnRCeTEwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKiAwLjAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICd0aW1lJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oOikvLFxuICAgICAgICAgICAgdW5mb3JtYXQ6IC8oOikvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcih2YWx1ZSAvIDYwIC8gNjApLFxuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh2YWx1ZSAtIChob3VycyAqIDYwICogNjApKSAvIDYwKSxcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5yb3VuZCh2YWx1ZSAtIChob3VycyAqIDYwICogNjApIC0gKG1pbnV0ZXMgKiA2MCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gaG91cnMgKyAnOicgKyAobWludXRlcyA8IDEwID8gJzAnICsgbWludXRlcyA6IG1pbnV0ZXMpICsgJzonICsgKHNlY29uZHMgPCAxMCA/ICcwJyArIHNlY29uZHMgOiBzZWNvbmRzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHRpbWVBcnJheSA9IHN0cmluZy5zcGxpdCgnOicpLFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPSAwO1xuXG4gICAgICAgICAgICAvLyB0dXJuIGhvdXJzIGFuZCBtaW51dGVzIGludG8gc2Vjb25kcyBhbmQgYWRkIHRoZW0gYWxsIHVwXG4gICAgICAgICAgICBpZiAodGltZUFycmF5Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIC8vIGhvdXJzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVswXSkgKiA2MCAqIDYwKTtcbiAgICAgICAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVsxXSkgKiA2MCk7XG4gICAgICAgICAgICAgICAgLy8gc2Vjb25kc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgTnVtYmVyKHRpbWVBcnJheVsyXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVBcnJheS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVswXSkgKiA2MCk7XG4gICAgICAgICAgICAgICAgLy8gc2Vjb25kc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgTnVtYmVyKHRpbWVBcnJheVsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlY29uZHMpO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5yZXR1cm4gbnVtZXJhbDtcbn0pKTtcbiIsICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZTtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCAidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwgInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIiwgInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwgInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwgInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHN0cmluZ1RvUGF0aCA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvUGF0aCcpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhc3RQYXRoO1xuIiwgInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCAidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldDtcbiIsICJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCAidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICogdmFsdWUgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduVmFsdWU7XG4iLCAidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwgInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCAidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbjtcbiIsICIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCAidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwgInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzSW4gPSByZXF1aXJlKCcuL19iYXNlS2V5c0luJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXNJbihuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICovXG5mdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QsIHRydWUpIDogYmFzZUtleXNJbihvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXNJbjtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbkluYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbkluO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICBidWZmZXIuY29weShyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQnVmZmVyO1xuIiwgIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpO1xuXG4vKipcbiAqIENvcGllcyBvd24gc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHM7XG4iLCAidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsICJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHdoaWxlIChvYmplY3QpIHtcbiAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpO1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHNJbjtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzSW47XG4iLCAidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0luLCBnZXRTeW1ib2xzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFsbEtleXNJbjtcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIGFycmF5IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVBcnJheShhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gbmV3IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgLy8gQWRkIHByb3BlcnRpZXMgYXNzaWduZWQgYnkgYFJlZ0V4cCNleGVjYC5cbiAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJyYXlbMF0gPT0gJ3N0cmluZycgJiYgaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgJ2luZGV4JykpIHtcbiAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDtcbiAgICByZXN1bHQuaW5wdXQgPSBhcnJheS5pbnB1dDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZUFycmF5O1xuIiwgInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsICJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGRhdGFWaWV3YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFWaWV3IFRoZSBkYXRhIHZpZXcgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGRhdGEgdmlldy5cbiAqL1xuZnVuY3Rpb24gY2xvbmVEYXRhVmlldyhkYXRhVmlldywgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7XG4gIHJldHVybiBuZXcgZGF0YVZpZXcuY29uc3RydWN0b3IoYnVmZmVyLCBkYXRhVmlldy5ieXRlT2Zmc2V0LCBkYXRhVmlldy5ieXRlTGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZURhdGFWaWV3O1xuIiwgIi8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZsYWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlRmxhZ3MgPSAvXFx3KiQvO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgcmVnZXhwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHJlZ2V4cCBUaGUgcmVnZXhwIHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHJlZ2V4cC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgcmVnZXhwLmNvbnN0cnVjdG9yKHJlZ2V4cC5zb3VyY2UsIHJlRmxhZ3MuZXhlYyhyZWdleHApKTtcbiAgcmVzdWx0Lmxhc3RJbmRleCA9IHJlZ2V4cC5sYXN0SW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVSZWdFeHA7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVTeW1ib2w7XG4iLCAidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVUeXBlZEFycmF5O1xuIiwgInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpLFxuICAgIGNsb25lRGF0YVZpZXcgPSByZXF1aXJlKCcuL19jbG9uZURhdGFWaWV3JyksXG4gICAgY2xvbmVSZWdFeHAgPSByZXF1aXJlKCcuL19jbG9uZVJlZ0V4cCcpLFxuICAgIGNsb25lU3ltYm9sID0gcmVxdWlyZSgnLi9fY2xvbmVTeW1ib2wnKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICBjYXNlIHVpbnQ4VGFnOiBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzogY2FzZSB1aW50MTZUYWc6IGNhc2UgdWludDMyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQnlUYWc7XG4iLCAidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCAidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkpXG4gICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxuICAgIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lT2JqZWN0O1xuIiwgInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXBgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hcCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IG1hcFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNNYXA7XG4iLCAidmFyIGJhc2VJc01hcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc01hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNNYXAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc01hcDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE1hcGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNNYXAobmV3IE1hcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5hcnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc01hcDtcbiIsICJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzU2V0YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNTZXQodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBzZXRUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzU2V0O1xuIiwgInZhciBiYXNlSXNTZXQgPSByZXF1aXJlKCcuL19iYXNlSXNTZXQnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzU2V0ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNTZXQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTZXRgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU2V0KG5ldyBTZXQpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTZXQobmV3IFdlYWtTZXQpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzU2V0ID0gbm9kZUlzU2V0ID8gYmFzZVVuYXJ5KG5vZGVJc1NldCkgOiBiYXNlSXNTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTZXQ7XG4iLCAidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ24nKSxcbiAgICBiYXNlQXNzaWduSW4gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduSW4nKSxcbiAgICBjbG9uZUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQnVmZmVyJyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgY29weVN5bWJvbHMgPSByZXF1aXJlKCcuL19jb3B5U3ltYm9scycpLFxuICAgIGNvcHlTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19jb3B5U3ltYm9sc0luJyksXG4gICAgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKSxcbiAgICBnZXRBbGxLZXlzSW4gPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzSW4nKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpbml0Q2xvbmVBcnJheSA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUFycmF5JyksXG4gICAgaW5pdENsb25lQnlUYWcgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVCeVRhZycpLFxuICAgIGluaXRDbG9uZU9iamVjdCA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZU9iamVjdCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc01hcCA9IHJlcXVpcmUoJy4vaXNNYXAnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1NldCA9IHJlcXVpcmUoJy4vaXNTZXQnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xudmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbmNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9XG5jbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbmNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID1cbmNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9XG5jbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbmNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuY2xvbmVhYmxlVGFnc1tlcnJvclRhZ10gPSBjbG9uZWFibGVUYWdzW2Z1bmNUYWddID1cbmNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gKiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIERlZXAgY2xvbmVcbiAqICAyIC0gRmxhdHRlbiBpbmhlcml0ZWQgcHJvcGVydGllc1xuICogIDQgLSBDbG9uZSBzeW1ib2xzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIFRoZSBrZXkgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgcGFyZW50IG9iamVjdCBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICB2YXIgcmVzdWx0LFxuICAgICAgaXNEZWVwID0gYml0bWFzayAmIENMT05FX0RFRVBfRkxBRyxcbiAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICBpc0Z1bGwgPSBiaXRtYXNrICYgQ0xPTkVfU1lNQk9MU19GTEFHO1xuXG4gIGlmIChjdXN0b21pemVyKSB7XG4gICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICB9XG4gIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSk7XG4gIGlmIChpc0Fycikge1xuICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcbiAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG5cbiAgICBpZiAoaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgfVxuICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IChpc0Z1bmMgJiYgIW9iamVjdCkpIHtcbiAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgIHJldHVybiBpc0ZsYXRcbiAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICA6IGNvcHlTeW1ib2xzKHZhbHVlLCBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlIDoge307XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZSwgdGFnLCBpc0RlZXApO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgcmV0dXJuIGl0cyBjb3JyZXNwb25kaW5nIGNsb25lLlxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gIGlmIChzdGFja2VkKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQ7XG4gIH1cbiAgc3RhY2suc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gIGlmIChpc1NldCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICByZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3ViVmFsdWUsIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBrZXlzRnVuYyA9IGlzRnVsbFxuICAgID8gKGlzRmxhdCA/IGdldEFsbEtleXNJbiA6IGdldEFsbEtleXMpXG4gICAgOiAoaXNGbGF0ID8ga2V5c0luIDoga2V5cyk7XG5cbiAgdmFyIHByb3BzID0gaXNBcnIgPyB1bmRlZmluZWQgOiBrZXlzRnVuYyh2YWx1ZSk7XG4gIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgIGlmIChwcm9wcykge1xuICAgICAga2V5ID0gc3ViVmFsdWU7XG4gICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IHBvcHVsYXRlIGNsb25lIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNsb25lO1xuIiwgIi8qKlxuICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubGFzdChbMSwgMiwgM10pO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxhc3Q7XG4iLCAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuZ3RoO1xuICB9XG4gIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTbGljZTtcbiIsICJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKSxcbiAgICBiYXNlU2xpY2UgPSByZXF1aXJlKCcuL19iYXNlU2xpY2UnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwYXJlbnQgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IHZhbHVlIG9mLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBhcmVudCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcGFyZW50KG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gcGF0aC5sZW5ndGggPCAyID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIGJhc2VTbGljZShwYXRoLCAwLCAtMSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKSxcbiAgICBwYXJlbnQgPSByZXF1aXJlKCcuL19wYXJlbnQnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5zZXQ7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLCAidmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PbWl0Q2xvbmU7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGbGF0dGVuYWJsZTtcbiIsICJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLCAidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKTtcblxuLyoqXG4gKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbjtcbiIsICIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCAidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsICIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwgInZhciBjb25zdGFudCA9IHJlcXVpcmUoJy4vY29uc3RhbnQnKSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5JyksXG4gICAgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXRUb1N0cmluZztcbiIsICIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCAidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsICJ2YXIgZmxhdHRlbiA9IHJlcXVpcmUoJy4vZmxhdHRlbicpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0UmVzdDtcbiIsICJ2YXIgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VDbG9uZSA9IHJlcXVpcmUoJy4vX2Jhc2VDbG9uZScpLFxuICAgIGJhc2VVbnNldCA9IHJlcXVpcmUoJy4vX2Jhc2VVbnNldCcpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGN1c3RvbU9taXRDbG9uZSA9IHJlcXVpcmUoJy4vX2N1c3RvbU9taXRDbG9uZScpLFxuICAgIGZsYXRSZXN0ID0gcmVxdWlyZSgnLi9fZmxhdFJlc3QnKSxcbiAgICBnZXRBbGxLZXlzSW4gPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzSW4nKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZVxuICogb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBwYXRocyBvZiBgb2JqZWN0YCB0aGF0IGFyZSBub3Qgb21pdHRlZC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgY29uc2lkZXJhYmx5IHNsb3dlciB0aGFuIGBfLnBpY2tgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBvbWl0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gKlxuICogXy5vbWl0KG9iamVjdCwgWydhJywgJ2MnXSk7XG4gKiAvLyA9PiB7ICdiJzogJzInIH1cbiAqL1xudmFyIG9taXQgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIHBhdGhzKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB2YXIgaXNEZWVwID0gZmFsc2U7XG4gIHBhdGhzID0gYXJyYXlNYXAocGF0aHMsIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICBpc0RlZXAgfHwgKGlzRGVlcCA9IHBhdGgubGVuZ3RoID4gMSk7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH0pO1xuICBjb3B5T2JqZWN0KG9iamVjdCwgZ2V0QWxsS2V5c0luKG9iamVjdCksIHJlc3VsdCk7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXN1bHQgPSBiYXNlQ2xvbmUocmVzdWx0LCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9GTEFUX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbU9taXRDbG9uZSk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IHBhdGhzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgYmFzZVVuc2V0KHJlc3VsdCwgcGF0aHNbbGVuZ3RoXSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9taXQ7XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IDB4ZWFjZTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgfHwgZW5hYmxlU2NvcGVBUEkgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSB8fCB0eXBlWzBdID09PSBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2hlY2sgaWYgd2UncmUgcmVxdWlyZWQgdG8gYWRkIGEgcG9ydCBudW1iZXIuXG4gKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RlZmF1bHQtcG9ydFxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSBwb3J0IFBvcnQgbnVtYmVyIHdlIG5lZWQgdG8gY2hlY2tcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm90b2NvbCBQcm90b2NvbCB3ZSBuZWVkIHRvIGNoZWNrIGFnYWluc3QuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSXMgaXQgYSBkZWZhdWx0IHBvcnQgZm9yIHRoZSBnaXZlbiBwcm90b2NvbFxuICogQGFwaSBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVxdWlyZWQocG9ydCwgcHJvdG9jb2wpIHtcbiAgcHJvdG9jb2wgPSBwcm90b2NvbC5zcGxpdCgnOicpWzBdO1xuICBwb3J0ID0gK3BvcnQ7XG5cbiAgaWYgKCFwb3J0KSByZXR1cm4gZmFsc2U7XG5cbiAgc3dpdGNoIChwcm90b2NvbCkge1xuICAgIGNhc2UgJ2h0dHAnOlxuICAgIGNhc2UgJ3dzJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gODA7XG5cbiAgICBjYXNlICdodHRwcyc6XG4gICAgY2FzZSAnd3NzJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gNDQzO1xuXG4gICAgY2FzZSAnZnRwJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gMjE7XG5cbiAgICBjYXNlICdnb3BoZXInOlxuICAgIHJldHVybiBwb3J0ICE9PSA3MDtcblxuICAgIGNhc2UgJ2ZpbGUnOlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBwb3J0ICE9PSAwO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgdW5kZWY7XG5cbi8qKlxuICogRGVjb2RlIGEgVVJJIGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgVVJJIGVuY29kZWQgc3RyaW5nLlxuICogQHJldHVybnMge1N0cmluZ3xOdWxsfSBUaGUgZGVjb2RlZCBzdHJpbmcuXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChpbnB1dC5yZXBsYWNlKC9cXCsvZywgJyAnKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGVuY29kZSBhIGdpdmVuIGlucHV0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgZW5jb2RlZC5cbiAqIEByZXR1cm5zIHtTdHJpbmd8TnVsbH0gVGhlIGVuY29kZWQgc3RyaW5nLlxuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuICB0cnkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBTaW1wbGUgcXVlcnkgc3RyaW5nIHBhcnNlci5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgVGhlIHF1ZXJ5IHN0cmluZyB0aGF0IG5lZWRzIHRvIGJlIHBhcnNlZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBxdWVyeXN0cmluZyhxdWVyeSkge1xuICB2YXIgcGFyc2VyID0gLyhbXj0/IyZdKyk9PyhbXiZdKikvZ1xuICAgICwgcmVzdWx0ID0ge31cbiAgICAsIHBhcnQ7XG5cbiAgd2hpbGUgKHBhcnQgPSBwYXJzZXIuZXhlYyhxdWVyeSkpIHtcbiAgICB2YXIga2V5ID0gZGVjb2RlKHBhcnRbMV0pXG4gICAgICAsIHZhbHVlID0gZGVjb2RlKHBhcnRbMl0pO1xuXG4gICAgLy9cbiAgICAvLyBQcmV2ZW50IG92ZXJyaWRpbmcgb2YgZXhpc3RpbmcgcHJvcGVydGllcy4gVGhpcyBlbnN1cmVzIHRoYXQgYnVpbGQtaW5cbiAgICAvLyBtZXRob2RzIGxpa2UgYHRvU3RyaW5nYCBvciBfX3Byb3RvX18gYXJlIG5vdCBvdmVycmlkZW4gYnkgbWFsaWNpb3VzXG4gICAgLy8gcXVlcnlzdHJpbmdzLlxuICAgIC8vXG4gICAgLy8gSW4gdGhlIGNhc2UgaWYgZmFpbGVkIGRlY29kaW5nLCB3ZSB3YW50IHRvIG9taXQgdGhlIGtleS92YWx1ZSBwYWlyc1xuICAgIC8vIGZyb20gdGhlIHJlc3VsdC5cbiAgICAvL1xuICAgIGlmIChrZXkgPT09IG51bGwgfHwgdmFsdWUgPT09IG51bGwgfHwga2V5IGluIHJlc3VsdCkgY29udGludWU7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGEgcXVlcnkgc3RyaW5nIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0aGF0IHNob3VsZCBiZSB0cmFuc2Zvcm1lZC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBwcmVmaXggT3B0aW9uYWwgcHJlZml4LlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5c3RyaW5naWZ5KG9iaiwgcHJlZml4KSB7XG4gIHByZWZpeCA9IHByZWZpeCB8fCAnJztcblxuICB2YXIgcGFpcnMgPSBbXVxuICAgICwgdmFsdWVcbiAgICAsIGtleTtcblxuICAvL1xuICAvLyBPcHRpb25hbGx5IHByZWZpeCB3aXRoIGEgJz8nIGlmIG5lZWRlZFxuICAvL1xuICBpZiAoJ3N0cmluZycgIT09IHR5cGVvZiBwcmVmaXgpIHByZWZpeCA9ICc/JztcblxuICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICBpZiAoaGFzLmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICB2YWx1ZSA9IG9ialtrZXldO1xuXG4gICAgICAvL1xuICAgICAgLy8gRWRnZSBjYXNlcyB3aGVyZSB3ZSBhY3R1YWxseSB3YW50IHRvIGVuY29kZSB0aGUgdmFsdWUgdG8gYW4gZW1wdHlcbiAgICAgIC8vIHN0cmluZyBpbnN0ZWFkIG9mIHRoZSBzdHJpbmdpZmllZCB2YWx1ZS5cbiAgICAgIC8vXG4gICAgICBpZiAoIXZhbHVlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWYgfHwgaXNOYU4odmFsdWUpKSkge1xuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSBlbmNvZGUoa2V5KTtcbiAgICAgIHZhbHVlID0gZW5jb2RlKHZhbHVlKTtcblxuICAgICAgLy9cbiAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBlbmNvZGUgdGhlIHN0cmluZ3MsIHdlIHNob3VsZCBiYWlsIG91dCBhcyB3ZSBkb24ndFxuICAgICAgLy8gd2FudCB0byBhZGQgaW52YWxpZCBzdHJpbmdzIHRvIHRoZSBxdWVyeS5cbiAgICAgIC8vXG4gICAgICBpZiAoa2V5ID09PSBudWxsIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgIHBhaXJzLnB1c2goa2V5ICsnPScrIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFpcnMubGVuZ3RoID8gcHJlZml4ICsgcGFpcnMuam9pbignJicpIDogJyc7XG59XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5leHBvcnRzLnN0cmluZ2lmeSA9IHF1ZXJ5c3RyaW5naWZ5O1xuZXhwb3J0cy5wYXJzZSA9IHF1ZXJ5c3RyaW5nO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHJlcXVpcmVkID0gcmVxdWlyZSgncmVxdWlyZXMtcG9ydCcpXG4gICwgcXMgPSByZXF1aXJlKCdxdWVyeXN0cmluZ2lmeScpXG4gICwgY29udHJvbE9yV2hpdGVzcGFjZSA9IC9eW1xceDAwLVxceDIwXFx1MDBhMFxcdTE2ODBcXHUyMDAwLVxcdTIwMGFcXHUyMDI4XFx1MjAyOVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdWZlZmZdKy9cbiAgLCBDUkhUTEYgPSAvW1xcblxcclxcdF0vZ1xuICAsIHNsYXNoZXMgPSAvXltBLVphLXpdW0EtWmEtejAtOSstLl0qOlxcL1xcLy9cbiAgLCBwb3J0ID0gLzpcXGQrJC9cbiAgLCBwcm90b2NvbHJlID0gL14oW2Etel1bYS16MC05ListXSo6KT8oXFwvXFwvKT8oW1xcXFwvXSspPyhbXFxTXFxzXSopL2lcbiAgLCB3aW5kb3dzRHJpdmVMZXR0ZXIgPSAvXlthLXpBLVpdOi87XG5cbi8qKlxuICogUmVtb3ZlIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgd2hpdGVzcGFjZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBzdHIgU3RyaW5nIHRvIHRyaW0uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBBIG5ldyBzdHJpbmcgcmVwcmVzZW50aW5nIGBzdHJgIHN0cmlwcGVkIG9mIGNvbnRyb2xcbiAqICAgICBjaGFyYWN0ZXJzIGFuZCB3aGl0ZXNwYWNlIGZyb20gaXRzIGJlZ2lubmluZy5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdHJpbUxlZnQoc3RyKSB7XG4gIHJldHVybiAoc3RyID8gc3RyIDogJycpLnRvU3RyaW5nKCkucmVwbGFjZShjb250cm9sT3JXaGl0ZXNwYWNlLCAnJyk7XG59XG5cbi8qKlxuICogVGhlc2UgYXJlIHRoZSBwYXJzZSBydWxlcyBmb3IgdGhlIFVSTCBwYXJzZXIsIGl0IGluZm9ybXMgdGhlIHBhcnNlclxuICogYWJvdXQ6XG4gKlxuICogMC4gVGhlIGNoYXIgaXQgTmVlZHMgdG8gcGFyc2UsIGlmIGl0J3MgYSBzdHJpbmcgaXQgc2hvdWxkIGJlIGRvbmUgdXNpbmdcbiAqICAgIGluZGV4T2YsIFJlZ0V4cCB1c2luZyBleGVjIGFuZCBOYU4gbWVhbnMgc2V0IGFzIGN1cnJlbnQgdmFsdWUuXG4gKiAxLiBUaGUgcHJvcGVydHkgd2Ugc2hvdWxkIHNldCB3aGVuIHBhcnNpbmcgdGhpcyB2YWx1ZS5cbiAqIDIuIEluZGljYXRpb24gaWYgaXQncyBiYWNrd2FyZHMgb3IgZm9yd2FyZCBwYXJzaW5nLCB3aGVuIHNldCBhcyBudW1iZXIgaXQnc1xuICogICAgdGhlIHZhbHVlIG9mIGV4dHJhIGNoYXJzIHRoYXQgc2hvdWxkIGJlIHNwbGl0IG9mZi5cbiAqIDMuIEluaGVyaXQgZnJvbSBsb2NhdGlvbiBpZiBub24gZXhpc3RpbmcgaW4gdGhlIHBhcnNlci5cbiAqIDQuIGB0b0xvd2VyQ2FzZWAgdGhlIHJlc3VsdGluZyB2YWx1ZS5cbiAqL1xudmFyIHJ1bGVzID0gW1xuICBbJyMnLCAnaGFzaCddLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgWyc/JywgJ3F1ZXJ5J10sICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGJhY2suXG4gIGZ1bmN0aW9uIHNhbml0aXplKGFkZHJlc3MsIHVybCkgeyAgICAgLy8gU2FuaXRpemUgd2hhdCBpcyBsZWZ0IG9mIHRoZSBhZGRyZXNzXG4gICAgcmV0dXJuIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpID8gYWRkcmVzcy5yZXBsYWNlKC9cXFxcL2csICcvJykgOiBhZGRyZXNzO1xuICB9LFxuICBbJy8nLCAncGF0aG5hbWUnXSwgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgWydAJywgJ2F1dGgnLCAxXSwgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGZyb250LlxuICBbTmFOLCAnaG9zdCcsIHVuZGVmaW5lZCwgMSwgMV0sICAgICAgIC8vIFNldCBsZWZ0IG92ZXIgdmFsdWUuXG4gIFsvOihcXGQqKSQvLCAncG9ydCcsIHVuZGVmaW5lZCwgMV0sICAgIC8vIFJlZ0V4cCB0aGUgYmFjay5cbiAgW05hTiwgJ2hvc3RuYW1lJywgdW5kZWZpbmVkLCAxLCAxXSAgICAvLyBTZXQgbGVmdCBvdmVyLlxuXTtcblxuLyoqXG4gKiBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgY29waWVkIG9yIGluaGVyaXRlZCBmcm9tLiBUaGlzIGlzIG9ubHkgbmVlZGVkXG4gKiBmb3IgYWxsIG5vbiBibG9iIFVSTCdzIGFzIGEgYmxvYiBVUkwgZG9lcyBub3QgaW5jbHVkZSBhIGhhc2gsIG9ubHkgdGhlXG4gKiBvcmlnaW4uXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbnZhciBpZ25vcmUgPSB7IGhhc2g6IDEsIHF1ZXJ5OiAxIH07XG5cbi8qKlxuICogVGhlIGxvY2F0aW9uIG9iamVjdCBkaWZmZXJzIHdoZW4geW91ciBjb2RlIGlzIGxvYWRlZCB0aHJvdWdoIGEgbm9ybWFsIHBhZ2UsXG4gKiBXb3JrZXIgb3IgdGhyb3VnaCBhIHdvcmtlciB1c2luZyBhIGJsb2IuIEFuZCB3aXRoIHRoZSBibG9iYmxlIGJlZ2lucyB0aGVcbiAqIHRyb3VibGUgYXMgdGhlIGxvY2F0aW9uIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIFVSTCBvZiB0aGUgYmxvYiwgbm90IHRoZVxuICogbG9jYXRpb24gb2YgdGhlIHBhZ2Ugd2hlcmUgb3VyIGNvZGUgaXMgbG9hZGVkIGluLiBUaGUgYWN0dWFsIG9yaWdpbiBpc1xuICogZW5jb2RlZCBpbiB0aGUgYHBhdGhuYW1lYCBzbyB3ZSBjYW4gdGhhbmtmdWxseSBnZW5lcmF0ZSBhIGdvb2QgXCJkZWZhdWx0XCJcbiAqIGxvY2F0aW9uIGZyb20gaXQgc28gd2UgY2FuIGdlbmVyYXRlIHByb3BlciByZWxhdGl2ZSBVUkwncyBhZ2Fpbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGxvYyBPcHRpb25hbCBkZWZhdWx0IGxvY2F0aW9uIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IGxvbGNhdGlvbiBvYmplY3QuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGxvbGNhdGlvbihsb2MpIHtcbiAgdmFyIGdsb2JhbFZhcjtcblxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IHdpbmRvdztcbiAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IGdsb2JhbDtcbiAgZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSBnbG9iYWxWYXIgPSBzZWxmO1xuICBlbHNlIGdsb2JhbFZhciA9IHt9O1xuXG4gIHZhciBsb2NhdGlvbiA9IGdsb2JhbFZhci5sb2NhdGlvbiB8fCB7fTtcbiAgbG9jID0gbG9jIHx8IGxvY2F0aW9uO1xuXG4gIHZhciBmaW5hbGRlc3RpbmF0aW9uID0ge31cbiAgICAsIHR5cGUgPSB0eXBlb2YgbG9jXG4gICAgLCBrZXk7XG5cbiAgaWYgKCdibG9iOicgPT09IGxvYy5wcm90b2NvbCkge1xuICAgIGZpbmFsZGVzdGluYXRpb24gPSBuZXcgVXJsKHVuZXNjYXBlKGxvYy5wYXRobmFtZSksIHt9KTtcbiAgfSBlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlwZSkge1xuICAgIGZpbmFsZGVzdGluYXRpb24gPSBuZXcgVXJsKGxvYywge30pO1xuICAgIGZvciAoa2V5IGluIGlnbm9yZSkgZGVsZXRlIGZpbmFsZGVzdGluYXRpb25ba2V5XTtcbiAgfSBlbHNlIGlmICgnb2JqZWN0JyA9PT0gdHlwZSkge1xuICAgIGZvciAoa2V5IGluIGxvYykge1xuICAgICAgaWYgKGtleSBpbiBpZ25vcmUpIGNvbnRpbnVlO1xuICAgICAgZmluYWxkZXN0aW5hdGlvbltrZXldID0gbG9jW2tleV07XG4gICAgfVxuXG4gICAgaWYgKGZpbmFsZGVzdGluYXRpb24uc2xhc2hlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaW5hbGRlc3RpbmF0aW9uLnNsYXNoZXMgPSBzbGFzaGVzLnRlc3QobG9jLmhyZWYpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaW5hbGRlc3RpbmF0aW9uO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBwcm90b2NvbCBzY2hlbWUgaXMgc3BlY2lhbC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gVGhlIHByb3RvY29sIHNjaGVtZSBvZiB0aGUgVVJMXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIHByb3RvY29sIHNjaGVtZSBpcyBzcGVjaWFsLCBlbHNlIGBmYWxzZWBcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzU3BlY2lhbChzY2hlbWUpIHtcbiAgcmV0dXJuIChcbiAgICBzY2hlbWUgPT09ICdmaWxlOicgfHxcbiAgICBzY2hlbWUgPT09ICdmdHA6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ2h0dHA6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ2h0dHBzOicgfHxcbiAgICBzY2hlbWUgPT09ICd3czonIHx8XG4gICAgc2NoZW1lID09PSAnd3NzOidcbiAgKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBQcm90b2NvbEV4dHJhY3RcbiAqIEB0eXBlIE9iamVjdFxuICogQHByb3BlcnR5IHtTdHJpbmd9IHByb3RvY29sIFByb3RvY29sIG1hdGNoZWQgaW4gdGhlIFVSTCwgaW4gbG93ZXJjYXNlLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBzbGFzaGVzIGB0cnVlYCBpZiBwcm90b2NvbCBpcyBmb2xsb3dlZCBieSBcIi8vXCIsIGVsc2UgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZXN0IFJlc3Qgb2YgdGhlIFVSTCB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBwcm90b2NvbC5cbiAqL1xuXG4vKipcbiAqIEV4dHJhY3QgcHJvdG9jb2wgaW5mb3JtYXRpb24gZnJvbSBhIFVSTCB3aXRoL3dpdGhvdXQgZG91YmxlIHNsYXNoIChcIi8vXCIpLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIFVSTCB3ZSB3YW50IHRvIGV4dHJhY3QgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBsb2NhdGlvblxuICogQHJldHVybiB7UHJvdG9jb2xFeHRyYWN0fSBFeHRyYWN0ZWQgaW5mb3JtYXRpb24uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBleHRyYWN0UHJvdG9jb2woYWRkcmVzcywgbG9jYXRpb24pIHtcbiAgYWRkcmVzcyA9IHRyaW1MZWZ0KGFkZHJlc3MpO1xuICBhZGRyZXNzID0gYWRkcmVzcy5yZXBsYWNlKENSSFRMRiwgJycpO1xuICBsb2NhdGlvbiA9IGxvY2F0aW9uIHx8IHt9O1xuXG4gIHZhciBtYXRjaCA9IHByb3RvY29scmUuZXhlYyhhZGRyZXNzKTtcbiAgdmFyIHByb3RvY29sID0gbWF0Y2hbMV0gPyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIDogJyc7XG4gIHZhciBmb3J3YXJkU2xhc2hlcyA9ICEhbWF0Y2hbMl07XG4gIHZhciBvdGhlclNsYXNoZXMgPSAhIW1hdGNoWzNdO1xuICB2YXIgc2xhc2hlc0NvdW50ID0gMDtcbiAgdmFyIHJlc3Q7XG5cbiAgaWYgKGZvcndhcmRTbGFzaGVzKSB7XG4gICAgaWYgKG90aGVyU2xhc2hlcykge1xuICAgICAgcmVzdCA9IG1hdGNoWzJdICsgbWF0Y2hbM10gKyBtYXRjaFs0XTtcbiAgICAgIHNsYXNoZXNDb3VudCA9IG1hdGNoWzJdLmxlbmd0aCArIG1hdGNoWzNdLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdCA9IG1hdGNoWzJdICsgbWF0Y2hbNF07XG4gICAgICBzbGFzaGVzQ291bnQgPSBtYXRjaFsyXS5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChvdGhlclNsYXNoZXMpIHtcbiAgICAgIHJlc3QgPSBtYXRjaFszXSArIG1hdGNoWzRdO1xuICAgICAgc2xhc2hlc0NvdW50ID0gbWF0Y2hbM10ubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0ID0gbWF0Y2hbNF1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvdG9jb2wgPT09ICdmaWxlOicpIHtcbiAgICBpZiAoc2xhc2hlc0NvdW50ID49IDIpIHtcbiAgICAgIHJlc3QgPSByZXN0LnNsaWNlKDIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1NwZWNpYWwocHJvdG9jb2wpKSB7XG4gICAgcmVzdCA9IG1hdGNoWzRdO1xuICB9IGVsc2UgaWYgKHByb3RvY29sKSB7XG4gICAgaWYgKGZvcndhcmRTbGFzaGVzKSB7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZSgyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2xhc2hlc0NvdW50ID49IDIgJiYgaXNTcGVjaWFsKGxvY2F0aW9uLnByb3RvY29sKSkge1xuICAgIHJlc3QgPSBtYXRjaFs0XTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgIHNsYXNoZXM6IGZvcndhcmRTbGFzaGVzIHx8IGlzU3BlY2lhbChwcm90b2NvbCksXG4gICAgc2xhc2hlc0NvdW50OiBzbGFzaGVzQ291bnQsXG4gICAgcmVzdDogcmVzdFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSByZWxhdGl2ZSBVUkwgcGF0aG5hbWUgYWdhaW5zdCBhIGJhc2UgVVJMIHBhdGhuYW1lLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByZWxhdGl2ZSBQYXRobmFtZSBvZiB0aGUgcmVsYXRpdmUgVVJMLlxuICogQHBhcmFtIHtTdHJpbmd9IGJhc2UgUGF0aG5hbWUgb2YgdGhlIGJhc2UgVVJMLlxuICogQHJldHVybiB7U3RyaW5nfSBSZXNvbHZlZCBwYXRobmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmUocmVsYXRpdmUsIGJhc2UpIHtcbiAgaWYgKHJlbGF0aXZlID09PSAnJykgcmV0dXJuIGJhc2U7XG5cbiAgdmFyIHBhdGggPSAoYmFzZSB8fCAnLycpLnNwbGl0KCcvJykuc2xpY2UoMCwgLTEpLmNvbmNhdChyZWxhdGl2ZS5zcGxpdCgnLycpKVxuICAgICwgaSA9IHBhdGgubGVuZ3RoXG4gICAgLCBsYXN0ID0gcGF0aFtpIC0gMV1cbiAgICAsIHVuc2hpZnQgPSBmYWxzZVxuICAgICwgdXAgPSAwO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBpZiAocGF0aFtpXSA9PT0gJy4nKSB7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKHBhdGhbaV0gPT09ICcuLicpIHtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBpZiAoaSA9PT0gMCkgdW5zaGlmdCA9IHRydWU7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgaWYgKHVuc2hpZnQpIHBhdGgudW5zaGlmdCgnJyk7XG4gIGlmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgcGF0aC5wdXNoKCcnKTtcblxuICByZXR1cm4gcGF0aC5qb2luKCcvJyk7XG59XG5cbi8qKlxuICogVGhlIGFjdHVhbCBVUkwgaW5zdGFuY2UuIEluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIG9iamVjdCB3ZSd2ZSBvcHRlZC1pbiB0b1xuICogY3JlYXRlIGFuIGFjdHVhbCBjb25zdHJ1Y3RvciBhcyBpdCdzIG11Y2ggbW9yZSBtZW1vcnkgZWZmaWNpZW50IGFuZFxuICogZmFzdGVyIGFuZCBpdCBwbGVhc2VzIG15IE9DRC5cbiAqXG4gKiBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB3ZSBzaG91bGQgbm90IHVzZSBgVVJMYCBhcyBjbGFzcyBuYW1lIHRvIHByZXZlbnRcbiAqIGNsYXNoZXMgd2l0aCB0aGUgZ2xvYmFsIFVSTCBpbnN0YW5jZSB0aGF0IGdvdCBpbnRyb2R1Y2VkIGluIGJyb3dzZXJzLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgVVJMIHdlIHdhbnQgdG8gcGFyc2UuXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IFtsb2NhdGlvbl0gTG9jYXRpb24gZGVmYXVsdHMgZm9yIHJlbGF0aXZlIHBhdGhzLlxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSBbcGFyc2VyXSBQYXJzZXIgZm9yIHRoZSBxdWVyeSBzdHJpbmcuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBVcmwoYWRkcmVzcywgbG9jYXRpb24sIHBhcnNlcikge1xuICBhZGRyZXNzID0gdHJpbUxlZnQoYWRkcmVzcyk7XG4gIGFkZHJlc3MgPSBhZGRyZXNzLnJlcGxhY2UoQ1JIVExGLCAnJyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVybCkpIHtcbiAgICByZXR1cm4gbmV3IFVybChhZGRyZXNzLCBsb2NhdGlvbiwgcGFyc2VyKTtcbiAgfVxuXG4gIHZhciByZWxhdGl2ZSwgZXh0cmFjdGVkLCBwYXJzZSwgaW5zdHJ1Y3Rpb24sIGluZGV4LCBrZXlcbiAgICAsIGluc3RydWN0aW9ucyA9IHJ1bGVzLnNsaWNlKClcbiAgICAsIHR5cGUgPSB0eXBlb2YgbG9jYXRpb25cbiAgICAsIHVybCA9IHRoaXNcbiAgICAsIGkgPSAwO1xuXG4gIC8vXG4gIC8vIFRoZSBmb2xsb3dpbmcgaWYgc3RhdGVtZW50cyBhbGxvd3MgdGhpcyBtb2R1bGUgdHdvIGhhdmUgY29tcGF0aWJpbGl0eSB3aXRoXG4gIC8vIDIgZGlmZmVyZW50IEFQSTpcbiAgLy9cbiAgLy8gMS4gTm9kZS5qcydzIGB1cmwucGFyc2VgIGFwaSB3aGljaCBhY2NlcHRzIGEgVVJMLCBib29sZWFuIGFzIGFyZ3VtZW50c1xuICAvLyAgICB3aGVyZSB0aGUgYm9vbGVhbiBpbmRpY2F0ZXMgdGhhdCB0aGUgcXVlcnkgc3RyaW5nIHNob3VsZCBhbHNvIGJlIHBhcnNlZC5cbiAgLy9cbiAgLy8gMi4gVGhlIGBVUkxgIGludGVyZmFjZSBvZiB0aGUgYnJvd3NlciB3aGljaCBhY2NlcHRzIGEgVVJMLCBvYmplY3QgYXNcbiAgLy8gICAgYXJndW1lbnRzLiBUaGUgc3VwcGxpZWQgb2JqZWN0IHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0IHZhbHVlcyAvIGZhbGwtYmFja1xuICAvLyAgICBmb3IgcmVsYXRpdmUgcGF0aHMuXG4gIC8vXG4gIGlmICgnb2JqZWN0JyAhPT0gdHlwZSAmJiAnc3RyaW5nJyAhPT0gdHlwZSkge1xuICAgIHBhcnNlciA9IGxvY2F0aW9uO1xuICAgIGxvY2F0aW9uID0gbnVsbDtcbiAgfVxuXG4gIGlmIChwYXJzZXIgJiYgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHBhcnNlcikgcGFyc2VyID0gcXMucGFyc2U7XG5cbiAgbG9jYXRpb24gPSBsb2xjYXRpb24obG9jYXRpb24pO1xuXG4gIC8vXG4gIC8vIEV4dHJhY3QgcHJvdG9jb2wgaW5mb3JtYXRpb24gYmVmb3JlIHJ1bm5pbmcgdGhlIGluc3RydWN0aW9ucy5cbiAgLy9cbiAgZXh0cmFjdGVkID0gZXh0cmFjdFByb3RvY29sKGFkZHJlc3MgfHwgJycsIGxvY2F0aW9uKTtcbiAgcmVsYXRpdmUgPSAhZXh0cmFjdGVkLnByb3RvY29sICYmICFleHRyYWN0ZWQuc2xhc2hlcztcbiAgdXJsLnNsYXNoZXMgPSBleHRyYWN0ZWQuc2xhc2hlcyB8fCByZWxhdGl2ZSAmJiBsb2NhdGlvbi5zbGFzaGVzO1xuICB1cmwucHJvdG9jb2wgPSBleHRyYWN0ZWQucHJvdG9jb2wgfHwgbG9jYXRpb24ucHJvdG9jb2wgfHwgJyc7XG4gIGFkZHJlc3MgPSBleHRyYWN0ZWQucmVzdDtcblxuICAvL1xuICAvLyBXaGVuIHRoZSBhdXRob3JpdHkgY29tcG9uZW50IGlzIGFic2VudCB0aGUgVVJMIHN0YXJ0cyB3aXRoIGEgcGF0aFxuICAvLyBjb21wb25lbnQuXG4gIC8vXG4gIGlmIChcbiAgICBleHRyYWN0ZWQucHJvdG9jb2wgPT09ICdmaWxlOicgJiYgKFxuICAgICAgZXh0cmFjdGVkLnNsYXNoZXNDb3VudCAhPT0gMiB8fCB3aW5kb3dzRHJpdmVMZXR0ZXIudGVzdChhZGRyZXNzKSkgfHxcbiAgICAoIWV4dHJhY3RlZC5zbGFzaGVzICYmXG4gICAgICAoZXh0cmFjdGVkLnByb3RvY29sIHx8XG4gICAgICAgIGV4dHJhY3RlZC5zbGFzaGVzQ291bnQgPCAyIHx8XG4gICAgICAgICFpc1NwZWNpYWwodXJsLnByb3RvY29sKSkpXG4gICkge1xuICAgIGluc3RydWN0aW9uc1szXSA9IFsvKC4qKS8sICdwYXRobmFtZSddO1xuICB9XG5cbiAgZm9yICg7IGkgPCBpbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc1tpXTtcblxuICAgIGlmICh0eXBlb2YgaW5zdHJ1Y3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFkZHJlc3MgPSBpbnN0cnVjdGlvbihhZGRyZXNzLCB1cmwpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcGFyc2UgPSBpbnN0cnVjdGlvblswXTtcbiAgICBrZXkgPSBpbnN0cnVjdGlvblsxXTtcblxuICAgIGlmIChwYXJzZSAhPT0gcGFyc2UpIHtcbiAgICAgIHVybFtrZXldID0gYWRkcmVzcztcbiAgICB9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgcGFyc2UpIHtcbiAgICAgIGluZGV4ID0gcGFyc2UgPT09ICdAJ1xuICAgICAgICA/IGFkZHJlc3MubGFzdEluZGV4T2YocGFyc2UpXG4gICAgICAgIDogYWRkcmVzcy5pbmRleE9mKHBhcnNlKTtcblxuICAgICAgaWYgKH5pbmRleCkge1xuICAgICAgICBpZiAoJ251bWJlcicgPT09IHR5cGVvZiBpbnN0cnVjdGlvblsyXSkge1xuICAgICAgICAgIHVybFtrZXldID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoaW5kZXggKyBpbnN0cnVjdGlvblsyXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXJsW2tleV0gPSBhZGRyZXNzLnNsaWNlKGluZGV4KTtcbiAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChpbmRleCA9IHBhcnNlLmV4ZWMoYWRkcmVzcykpKSB7XG4gICAgICB1cmxba2V5XSA9IGluZGV4WzFdO1xuICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXguaW5kZXgpO1xuICAgIH1cblxuICAgIHVybFtrZXldID0gdXJsW2tleV0gfHwgKFxuICAgICAgcmVsYXRpdmUgJiYgaW5zdHJ1Y3Rpb25bM10gPyBsb2NhdGlvbltrZXldIHx8ICcnIDogJydcbiAgICApO1xuXG4gICAgLy9cbiAgICAvLyBIb3N0bmFtZSwgaG9zdCBhbmQgcHJvdG9jb2wgc2hvdWxkIGJlIGxvd2VyY2FzZWQgc28gdGhleSBjYW4gYmUgdXNlZCB0b1xuICAgIC8vIGNyZWF0ZSBhIHByb3BlciBgb3JpZ2luYC5cbiAgICAvL1xuICAgIGlmIChpbnN0cnVjdGlvbls0XSkgdXJsW2tleV0gPSB1cmxba2V5XS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLy9cbiAgLy8gQWxzbyBwYXJzZSB0aGUgc3VwcGxpZWQgcXVlcnkgc3RyaW5nIGluIHRvIGFuIG9iamVjdC4gSWYgd2UncmUgc3VwcGxpZWRcbiAgLy8gd2l0aCBhIGN1c3RvbSBwYXJzZXIgYXMgZnVuY3Rpb24gdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBidWlsZC1pblxuICAvLyBwYXJzZXIuXG4gIC8vXG4gIGlmIChwYXJzZXIpIHVybC5xdWVyeSA9IHBhcnNlcih1cmwucXVlcnkpO1xuXG4gIC8vXG4gIC8vIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUsIHJlc29sdmUgdGhlIHBhdGhuYW1lIGFnYWluc3QgdGhlIGJhc2UgVVJMLlxuICAvL1xuICBpZiAoXG4gICAgICByZWxhdGl2ZVxuICAgICYmIGxvY2F0aW9uLnNsYXNoZXNcbiAgICAmJiB1cmwucGF0aG5hbWUuY2hhckF0KDApICE9PSAnLydcbiAgICAmJiAodXJsLnBhdGhuYW1lICE9PSAnJyB8fCBsb2NhdGlvbi5wYXRobmFtZSAhPT0gJycpXG4gICkge1xuICAgIHVybC5wYXRobmFtZSA9IHJlc29sdmUodXJsLnBhdGhuYW1lLCBsb2NhdGlvbi5wYXRobmFtZSk7XG4gIH1cblxuICAvL1xuICAvLyBEZWZhdWx0IHRvIGEgLyBmb3IgcGF0aG5hbWUgaWYgbm9uZSBleGlzdHMuIFRoaXMgbm9ybWFsaXplcyB0aGUgVVJMXG4gIC8vIHRvIGFsd2F5cyBoYXZlIGEgL1xuICAvL1xuICBpZiAodXJsLnBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nICYmIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpKSB7XG4gICAgdXJsLnBhdGhuYW1lID0gJy8nICsgdXJsLnBhdGhuYW1lO1xuICB9XG5cbiAgLy9cbiAgLy8gV2Ugc2hvdWxkIG5vdCBhZGQgcG9ydCBudW1iZXJzIGlmIHRoZXkgYXJlIGFscmVhZHkgdGhlIGRlZmF1bHQgcG9ydCBudW1iZXJcbiAgLy8gZm9yIGEgZ2l2ZW4gcHJvdG9jb2wuIEFzIHRoZSBob3N0IGFsc28gY29udGFpbnMgdGhlIHBvcnQgbnVtYmVyIHdlJ3JlIGdvaW5nXG4gIC8vIG92ZXJyaWRlIGl0IHdpdGggdGhlIGhvc3RuYW1lIHdoaWNoIGNvbnRhaW5zIG5vIHBvcnQgbnVtYmVyLlxuICAvL1xuICBpZiAoIXJlcXVpcmVkKHVybC5wb3J0LCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWU7XG4gICAgdXJsLnBvcnQgPSAnJztcbiAgfVxuXG4gIC8vXG4gIC8vIFBhcnNlIGRvd24gdGhlIGBhdXRoYCBmb3IgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAgLy9cbiAgdXJsLnVzZXJuYW1lID0gdXJsLnBhc3N3b3JkID0gJyc7XG5cbiAgaWYgKHVybC5hdXRoKSB7XG4gICAgaW5kZXggPSB1cmwuYXV0aC5pbmRleE9mKCc6Jyk7XG5cbiAgICBpZiAofmluZGV4KSB7XG4gICAgICB1cmwudXNlcm5hbWUgPSB1cmwuYXV0aC5zbGljZSgwLCBpbmRleCk7XG4gICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC51c2VybmFtZSkpO1xuXG4gICAgICB1cmwucGFzc3dvcmQgPSB1cmwuYXV0aC5zbGljZShpbmRleCArIDEpO1xuICAgICAgdXJsLnBhc3N3b3JkID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwucGFzc3dvcmQpKVxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC5hdXRoKSk7XG4gICAgfVxuXG4gICAgdXJsLmF1dGggPSB1cmwucGFzc3dvcmQgPyB1cmwudXNlcm5hbWUgKyc6JysgdXJsLnBhc3N3b3JkIDogdXJsLnVzZXJuYW1lO1xuICB9XG5cbiAgdXJsLm9yaWdpbiA9IHVybC5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJiBpc1NwZWNpYWwodXJsLnByb3RvY29sKSAmJiB1cmwuaG9zdFxuICAgID8gdXJsLnByb3RvY29sICsnLy8nKyB1cmwuaG9zdFxuICAgIDogJ251bGwnO1xuXG4gIC8vXG4gIC8vIFRoZSBocmVmIGlzIGp1c3QgdGhlIGNvbXBpbGVkIHJlc3VsdC5cbiAgLy9cbiAgdXJsLmhyZWYgPSB1cmwudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGNvbnZlbmllbmNlIG1ldGhvZCBmb3IgY2hhbmdpbmcgcHJvcGVydGllcyBpbiB0aGUgVVJMIGluc3RhbmNlIHRvXG4gKiBpbnN1cmUgdGhhdCB0aGV5IGFsbCBwcm9wYWdhdGUgY29ycmVjdGx5LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXJ0ICAgICAgICAgIFByb3BlcnR5IHdlIG5lZWQgdG8gYWRqdXN0LlxuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgICAgICAgICAgVGhlIG5ld2x5IGFzc2lnbmVkIHZhbHVlLlxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSBmbiAgV2hlbiBzZXR0aW5nIHRoZSBxdWVyeSwgaXQgd2lsbCBiZSB0aGUgZnVuY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gcGFyc2UgdGhlIHF1ZXJ5LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXR0aW5nIHRoZSBwcm90b2NvbCwgZG91YmxlIHNsYXNoIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgZmluYWwgdXJsIGlmIGl0IGlzIHRydWUuXG4gKiBAcmV0dXJucyB7VVJMfSBVUkwgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBzZXQocGFydCwgdmFsdWUsIGZuKSB7XG4gIHZhciB1cmwgPSB0aGlzO1xuXG4gIHN3aXRjaCAocGFydCkge1xuICAgIGNhc2UgJ3F1ZXJ5JzpcbiAgICAgIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IChmbiB8fCBxcy5wYXJzZSkodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncG9ydCc6XG4gICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcblxuICAgICAgaWYgKCFyZXF1aXJlZCh2YWx1ZSwgdXJsLnByb3RvY29sKSkge1xuICAgICAgICB1cmwuaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgICAgICAgdXJsW3BhcnRdID0gJyc7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lICsnOicrIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hvc3RuYW1lJzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAodXJsLnBvcnQpIHZhbHVlICs9ICc6JysgdXJsLnBvcnQ7XG4gICAgICB1cmwuaG9zdCA9IHZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdob3N0JzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAocG9ydC50ZXN0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgIHVybC5wb3J0ID0gdmFsdWUucG9wKCk7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlLmpvaW4oJzonKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlO1xuICAgICAgICB1cmwucG9ydCA9ICcnO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Byb3RvY29sJzpcbiAgICAgIHVybC5wcm90b2NvbCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICB1cmwuc2xhc2hlcyA9ICFmbjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncGF0aG5hbWUnOlxuICAgIGNhc2UgJ2hhc2gnOlxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhciBjaGFyID0gcGFydCA9PT0gJ3BhdGhuYW1lJyA/ICcvJyA6ICcjJztcbiAgICAgICAgdXJsW3BhcnRdID0gdmFsdWUuY2hhckF0KDApICE9PSBjaGFyID8gY2hhciArIHZhbHVlIDogdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndXNlcm5hbWUnOlxuICAgIGNhc2UgJ3Bhc3N3b3JkJzpcbiAgICAgIHVybFtwYXJ0XSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2F1dGgnOlxuICAgICAgdmFyIGluZGV4ID0gdmFsdWUuaW5kZXhPZignOicpO1xuXG4gICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgIHVybC51c2VybmFtZSA9IHZhbHVlLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgdXJsLnVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwudXNlcm5hbWUpKTtcblxuICAgICAgICB1cmwucGFzc3dvcmQgPSB2YWx1ZS5zbGljZShpbmRleCArIDEpO1xuICAgICAgICB1cmwucGFzc3dvcmQgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC5wYXNzd29yZCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsLnVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICAgICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpbnMgPSBydWxlc1tpXTtcblxuICAgIGlmIChpbnNbNF0pIHVybFtpbnNbMV1dID0gdXJsW2luc1sxXV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHVybC5hdXRoID0gdXJsLnBhc3N3b3JkID8gdXJsLnVzZXJuYW1lICsnOicrIHVybC5wYXNzd29yZCA6IHVybC51c2VybmFtZTtcblxuICB1cmwub3JpZ2luID0gdXJsLnByb3RvY29sICE9PSAnZmlsZTonICYmIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpICYmIHVybC5ob3N0XG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgdXJsLmhyZWYgPSB1cmwudG9TdHJpbmcoKTtcblxuICByZXR1cm4gdXJsO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgcHJvcGVydGllcyBiYWNrIGluIHRvIGEgdmFsaWQgYW5kIGZ1bGwgVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmdpZnkgT3B0aW9uYWwgcXVlcnkgc3RyaW5naWZ5IGZ1bmN0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gQ29tcGlsZWQgdmVyc2lvbiBvZiB0aGUgVVJMLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyhzdHJpbmdpZnkpIHtcbiAgaWYgKCFzdHJpbmdpZnkgfHwgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHN0cmluZ2lmeSkgc3RyaW5naWZ5ID0gcXMuc3RyaW5naWZ5O1xuXG4gIHZhciBxdWVyeVxuICAgICwgdXJsID0gdGhpc1xuICAgICwgaG9zdCA9IHVybC5ob3N0XG4gICAgLCBwcm90b2NvbCA9IHVybC5wcm90b2NvbDtcblxuICBpZiAocHJvdG9jb2wgJiYgcHJvdG9jb2wuY2hhckF0KHByb3RvY29sLmxlbmd0aCAtIDEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICB2YXIgcmVzdWx0ID1cbiAgICBwcm90b2NvbCArXG4gICAgKCh1cmwucHJvdG9jb2wgJiYgdXJsLnNsYXNoZXMpIHx8IGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpID8gJy8vJyA6ICcnKTtcblxuICBpZiAodXJsLnVzZXJuYW1lKSB7XG4gICAgcmVzdWx0ICs9IHVybC51c2VybmFtZTtcbiAgICBpZiAodXJsLnBhc3N3b3JkKSByZXN1bHQgKz0gJzonKyB1cmwucGFzc3dvcmQ7XG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfSBlbHNlIGlmICh1cmwucGFzc3dvcmQpIHtcbiAgICByZXN1bHQgKz0gJzonKyB1cmwucGFzc3dvcmQ7XG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfSBlbHNlIGlmIChcbiAgICB1cmwucHJvdG9jb2wgIT09ICdmaWxlOicgJiZcbiAgICBpc1NwZWNpYWwodXJsLnByb3RvY29sKSAmJlxuICAgICFob3N0ICYmXG4gICAgdXJsLnBhdGhuYW1lICE9PSAnLydcbiAgKSB7XG4gICAgLy9cbiAgICAvLyBBZGQgYmFjayB0aGUgZW1wdHkgdXNlcmluZm8sIG90aGVyd2lzZSB0aGUgb3JpZ2luYWwgaW52YWxpZCBVUkxcbiAgICAvLyBtaWdodCBiZSB0cmFuc2Zvcm1lZCBpbnRvIGEgdmFsaWQgb25lIHdpdGggYHVybC5wYXRobmFtZWAgYXMgaG9zdC5cbiAgICAvL1xuICAgIHJlc3VsdCArPSAnQCc7XG4gIH1cblxuICAvL1xuICAvLyBUcmFpbGluZyBjb2xvbiBpcyByZW1vdmVkIGZyb20gYHVybC5ob3N0YCB3aGVuIGl0IGlzIHBhcnNlZC4gSWYgaXQgc3RpbGxcbiAgLy8gZW5kcyB3aXRoIGEgY29sb24sIHRoZW4gYWRkIGJhY2sgdGhlIHRyYWlsaW5nIGNvbG9uIHRoYXQgd2FzIHJlbW92ZWQuIFRoaXNcbiAgLy8gcHJldmVudHMgYW4gaW52YWxpZCBVUkwgZnJvbSBiZWluZyB0cmFuc2Zvcm1lZCBpbnRvIGEgdmFsaWQgb25lLlxuICAvL1xuICBpZiAoaG9zdFtob3N0Lmxlbmd0aCAtIDFdID09PSAnOicgfHwgKHBvcnQudGVzdCh1cmwuaG9zdG5hbWUpICYmICF1cmwucG9ydCkpIHtcbiAgICBob3N0ICs9ICc6JztcbiAgfVxuXG4gIHJlc3VsdCArPSBob3N0ICsgdXJsLnBhdGhuYW1lO1xuXG4gIHF1ZXJ5ID0gJ29iamVjdCcgPT09IHR5cGVvZiB1cmwucXVlcnkgPyBzdHJpbmdpZnkodXJsLnF1ZXJ5KSA6IHVybC5xdWVyeTtcbiAgaWYgKHF1ZXJ5KSByZXN1bHQgKz0gJz8nICE9PSBxdWVyeS5jaGFyQXQoMCkgPyAnPycrIHF1ZXJ5IDogcXVlcnk7XG5cbiAgaWYgKHVybC5oYXNoKSByZXN1bHQgKz0gdXJsLmhhc2g7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuVXJsLnByb3RvdHlwZSA9IHsgc2V0OiBzZXQsIHRvU3RyaW5nOiB0b1N0cmluZyB9O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBVUkwgcGFyc2VyIGFuZCBzb21lIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCBmb3Jcbi8vIG90aGVycyBvciB0ZXN0aW5nLlxuLy9cblVybC5leHRyYWN0UHJvdG9jb2wgPSBleHRyYWN0UHJvdG9jb2w7XG5VcmwubG9jYXRpb24gPSBsb2xjYXRpb247XG5VcmwudHJpbUxlZnQgPSB0cmltTGVmdDtcblVybC5xcyA9IHFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVybDtcbiIsICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuXHR2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKCdwcm9wLXR5cGVzJyk7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgc2l6ZXJTdHlsZSA9IHtcblx0cG9zaXRpb246ICdhYnNvbHV0ZScsXG5cdHRvcDogMCxcblx0bGVmdDogMCxcblx0dmlzaWJpbGl0eTogJ2hpZGRlbicsXG5cdGhlaWdodDogMCxcblx0b3ZlcmZsb3c6ICdzY3JvbGwnLFxuXHR3aGl0ZVNwYWNlOiAncHJlJ1xufTtcblxudmFyIElOUFVUX1BST1BTX0JMQUNLTElTVCA9IFsnZXh0cmFXaWR0aCcsICdpbmplY3RTdHlsZXMnLCAnaW5wdXRDbGFzc05hbWUnLCAnaW5wdXRSZWYnLCAnaW5wdXRTdHlsZScsICdtaW5XaWR0aCcsICdvbkF1dG9zaXplJywgJ3BsYWNlaG9sZGVySXNNaW5XaWR0aCddO1xuXG52YXIgY2xlYW5JbnB1dFByb3BzID0gZnVuY3Rpb24gY2xlYW5JbnB1dFByb3BzKGlucHV0UHJvcHMpIHtcblx0SU5QVVRfUFJPUFNfQkxBQ0tMSVNULmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG5cdFx0cmV0dXJuIGRlbGV0ZSBpbnB1dFByb3BzW2ZpZWxkXTtcblx0fSk7XG5cdHJldHVybiBpbnB1dFByb3BzO1xufTtcblxudmFyIGNvcHlTdHlsZXMgPSBmdW5jdGlvbiBjb3B5U3R5bGVzKHN0eWxlcywgbm9kZSkge1xuXHRub2RlLnN0eWxlLmZvbnRTaXplID0gc3R5bGVzLmZvbnRTaXplO1xuXHRub2RlLnN0eWxlLmZvbnRGYW1pbHkgPSBzdHlsZXMuZm9udEZhbWlseTtcblx0bm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gc3R5bGVzLmZvbnRXZWlnaHQ7XG5cdG5vZGUuc3R5bGUuZm9udFN0eWxlID0gc3R5bGVzLmZvbnRTdHlsZTtcblx0bm9kZS5zdHlsZS5sZXR0ZXJTcGFjaW5nID0gc3R5bGVzLmxldHRlclNwYWNpbmc7XG5cdG5vZGUuc3R5bGUudGV4dFRyYW5zZm9ybSA9IHN0eWxlcy50ZXh0VHJhbnNmb3JtO1xufTtcblxudmFyIGlzSUUgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yID8gL01TSUUgfFRyaWRlbnRcXC98RWRnZVxcLy8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkgOiBmYWxzZTtcblxudmFyIGdlbmVyYXRlSWQgPSBmdW5jdGlvbiBnZW5lcmF0ZUlkKCkge1xuXHQvLyB3ZSBvbmx5IG5lZWQgYW4gYXV0by1nZW5lcmF0ZWQgSUQgZm9yIHN0eWxlc2hlZXQgaW5qZWN0aW9uLCB3aGljaCBpcyBvbmx5XG5cdC8vIHVzZWQgZm9yIElFLiBzbyBpZiB0aGUgYnJvd3NlciBpcyBub3QgSUUsIHRoaXMgc2hvdWxkIHJldHVybiB1bmRlZmluZWQuXG5cdHJldHVybiBpc0lFID8gJ18nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDEyKSA6IHVuZGVmaW5lZDtcbn07XG5cbnZhciBBdXRvc2l6ZUlucHV0ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcblx0X2luaGVyaXRzKEF1dG9zaXplSW5wdXQsIF9Db21wb25lbnQpO1xuXG5cdF9jcmVhdGVDbGFzcyhBdXRvc2l6ZUlucHV0LCBudWxsLCBbe1xuXHRcdGtleTogJ2dldERlcml2ZWRTdGF0ZUZyb21Qcm9wcycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcblx0XHRcdHZhciBpZCA9IHByb3BzLmlkO1xuXG5cdFx0XHRyZXR1cm4gaWQgIT09IHN0YXRlLnByZXZJZCA/IHsgaW5wdXRJZDogaWQgfHwgZ2VuZXJhdGVJZCgpLCBwcmV2SWQ6IGlkIH0gOiBudWxsO1xuXHRcdH1cblx0fV0pO1xuXG5cdGZ1bmN0aW9uIEF1dG9zaXplSW5wdXQocHJvcHMpIHtcblx0XHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgQXV0b3NpemVJbnB1dCk7XG5cblx0XHR2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQXV0b3NpemVJbnB1dC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEF1dG9zaXplSW5wdXQpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cblx0XHRfdGhpcy5pbnB1dFJlZiA9IGZ1bmN0aW9uIChlbCkge1xuXHRcdFx0X3RoaXMuaW5wdXQgPSBlbDtcblx0XHRcdGlmICh0eXBlb2YgX3RoaXMucHJvcHMuaW5wdXRSZWYgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0X3RoaXMucHJvcHMuaW5wdXRSZWYoZWwpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRfdGhpcy5wbGFjZUhvbGRlclNpemVyUmVmID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRfdGhpcy5wbGFjZUhvbGRlclNpemVyID0gZWw7XG5cdFx0fTtcblxuXHRcdF90aGlzLnNpemVyUmVmID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRfdGhpcy5zaXplciA9IGVsO1xuXHRcdH07XG5cblx0XHRfdGhpcy5zdGF0ZSA9IHtcblx0XHRcdGlucHV0V2lkdGg6IHByb3BzLm1pbldpZHRoLFxuXHRcdFx0aW5wdXRJZDogcHJvcHMuaWQgfHwgZ2VuZXJhdGVJZCgpLFxuXHRcdFx0cHJldklkOiBwcm9wcy5pZFxuXHRcdH07XG5cdFx0cmV0dXJuIF90aGlzO1xuXHR9XG5cblx0X2NyZWF0ZUNsYXNzKEF1dG9zaXplSW5wdXQsIFt7XG5cdFx0a2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcblx0XHRcdHRoaXMubW91bnRlZCA9IHRydWU7XG5cdFx0XHR0aGlzLmNvcHlJbnB1dFN0eWxlcygpO1xuXHRcdFx0dGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29tcG9uZW50RGlkVXBkYXRlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG5cdFx0XHRpZiAocHJldlN0YXRlLmlucHV0V2lkdGggIT09IHRoaXMuc3RhdGUuaW5wdXRXaWR0aCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIHRoaXMucHJvcHMub25BdXRvc2l6ZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHRoaXMucHJvcHMub25BdXRvc2l6ZSh0aGlzLnN0YXRlLmlucHV0V2lkdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuXHRcdFx0dGhpcy5tb3VudGVkID0gZmFsc2U7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29weUlucHV0U3R5bGVzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29weUlucHV0U3R5bGVzKCkge1xuXHRcdFx0aWYgKCF0aGlzLm1vdW50ZWQgfHwgIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBpbnB1dFN0eWxlcyA9IHRoaXMuaW5wdXQgJiYgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5pbnB1dCk7XG5cdFx0XHRpZiAoIWlucHV0U3R5bGVzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvcHlTdHlsZXMoaW5wdXRTdHlsZXMsIHRoaXMuc2l6ZXIpO1xuXHRcdFx0aWYgKHRoaXMucGxhY2VIb2xkZXJTaXplcikge1xuXHRcdFx0XHRjb3B5U3R5bGVzKGlucHV0U3R5bGVzLCB0aGlzLnBsYWNlSG9sZGVyU2l6ZXIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3VwZGF0ZUlucHV0V2lkdGgnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVJbnB1dFdpZHRoKCkge1xuXHRcdFx0aWYgKCF0aGlzLm1vdW50ZWQgfHwgIXRoaXMuc2l6ZXIgfHwgdHlwZW9mIHRoaXMuc2l6ZXIuc2Nyb2xsV2lkdGggPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBuZXdJbnB1dFdpZHRoID0gdm9pZCAwO1xuXHRcdFx0aWYgKHRoaXMucHJvcHMucGxhY2Vob2xkZXIgJiYgKCF0aGlzLnByb3BzLnZhbHVlIHx8IHRoaXMucHJvcHMudmFsdWUgJiYgdGhpcy5wcm9wcy5wbGFjZWhvbGRlcklzTWluV2lkdGgpKSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSBNYXRoLm1heCh0aGlzLnNpemVyLnNjcm9sbFdpZHRoLCB0aGlzLnBsYWNlSG9sZGVyU2l6ZXIuc2Nyb2xsV2lkdGgpICsgMjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSB0aGlzLnNpemVyLnNjcm9sbFdpZHRoICsgMjtcblx0XHRcdH1cblx0XHRcdC8vIGFkZCBleHRyYVdpZHRoIHRvIHRoZSBkZXRlY3RlZCB3aWR0aC4gZm9yIG51bWJlciB0eXBlcywgdGhpcyBkZWZhdWx0cyB0byAxNiB0byBhbGxvdyBmb3IgdGhlIHN0ZXBwZXIgVUlcblx0XHRcdHZhciBleHRyYVdpZHRoID0gdGhpcy5wcm9wcy50eXBlID09PSAnbnVtYmVyJyAmJiB0aGlzLnByb3BzLmV4dHJhV2lkdGggPT09IHVuZGVmaW5lZCA/IDE2IDogcGFyc2VJbnQodGhpcy5wcm9wcy5leHRyYVdpZHRoKSB8fCAwO1xuXHRcdFx0bmV3SW5wdXRXaWR0aCArPSBleHRyYVdpZHRoO1xuXHRcdFx0aWYgKG5ld0lucHV0V2lkdGggPCB0aGlzLnByb3BzLm1pbldpZHRoKSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSB0aGlzLnByb3BzLm1pbldpZHRoO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG5ld0lucHV0V2lkdGggIT09IHRoaXMuc3RhdGUuaW5wdXRXaWR0aCkge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRpbnB1dFdpZHRoOiBuZXdJbnB1dFdpZHRoXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2dldElucHV0Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0SW5wdXQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnB1dDtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdmb2N1cycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZvY3VzKCkge1xuXHRcdFx0dGhpcy5pbnB1dC5mb2N1cygpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2JsdXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBibHVyKCkge1xuXHRcdFx0dGhpcy5pbnB1dC5ibHVyKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnc2VsZWN0Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc2VsZWN0KCkge1xuXHRcdFx0dGhpcy5pbnB1dC5zZWxlY3QoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXJTdHlsZXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG5cdFx0XHQvLyB0aGlzIG1ldGhvZCBpbmplY3RzIHN0eWxlcyB0byBoaWRlIElFJ3MgY2xlYXIgaW5kaWNhdG9yLCB3aGljaCBtZXNzZXNcblx0XHRcdC8vIHdpdGggaW5wdXQgc2l6ZSBkZXRlY3Rpb24uIHRoZSBzdHlsZXNoZWV0IGlzIG9ubHkgaW5qZWN0ZWQgd2hlbiB0aGVcblx0XHRcdC8vIGJyb3dzZXIgaXMgSUUsIGFuZCBjYW4gYWxzbyBiZSBkaXNhYmxlZCBieSB0aGUgYGluamVjdFN0eWxlc2AgcHJvcC5cblx0XHRcdHZhciBpbmplY3RTdHlsZXMgPSB0aGlzLnByb3BzLmluamVjdFN0eWxlcztcblxuXHRcdFx0cmV0dXJuIGlzSUUgJiYgaW5qZWN0U3R5bGVzID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJywgeyBkYW5nZXJvdXNseVNldElubmVySFRNTDoge1xuXHRcdFx0XHRcdF9faHRtbDogJ2lucHV0IycgKyB0aGlzLnN0YXRlLmlucHV0SWQgKyAnOjotbXMtY2xlYXIge2Rpc3BsYXk6IG5vbmU7fSdcblx0XHRcdFx0fSB9KSA6IG51bGw7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0dmFyIHNpemVyVmFsdWUgPSBbdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUsIHRoaXMucHJvcHMudmFsdWUsICcnXS5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRpZiAocHJldmlvdXNWYWx1ZSAhPT0gbnVsbCAmJiBwcmV2aW91c1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY3VycmVudFZhbHVlO1xuXHRcdFx0fSk7XG5cblx0XHRcdHZhciB3cmFwcGVyU3R5bGUgPSBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcy5zdHlsZSk7XG5cdFx0XHRpZiAoIXdyYXBwZXJTdHlsZS5kaXNwbGF5KSB3cmFwcGVyU3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuXG5cdFx0XHR2YXIgaW5wdXRTdHlsZSA9IF9leHRlbmRzKHtcblx0XHRcdFx0Ym94U2l6aW5nOiAnY29udGVudC1ib3gnLFxuXHRcdFx0XHR3aWR0aDogdGhpcy5zdGF0ZS5pbnB1dFdpZHRoICsgJ3B4J1xuXHRcdFx0fSwgdGhpcy5wcm9wcy5pbnB1dFN0eWxlKTtcblxuXHRcdFx0dmFyIGlucHV0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXModGhpcy5wcm9wcywgW10pO1xuXG5cdFx0XHRjbGVhbklucHV0UHJvcHMoaW5wdXRQcm9wcyk7XG5cdFx0XHRpbnB1dFByb3BzLmNsYXNzTmFtZSA9IHRoaXMucHJvcHMuaW5wdXRDbGFzc05hbWU7XG5cdFx0XHRpbnB1dFByb3BzLmlkID0gdGhpcy5zdGF0ZS5pbnB1dElkO1xuXHRcdFx0aW5wdXRQcm9wcy5zdHlsZSA9IGlucHV0U3R5bGU7XG5cblx0XHRcdHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdHsgY2xhc3NOYW1lOiB0aGlzLnByb3BzLmNsYXNzTmFtZSwgc3R5bGU6IHdyYXBwZXJTdHlsZSB9LFxuXHRcdFx0XHR0aGlzLnJlbmRlclN0eWxlcygpLFxuXHRcdFx0XHRfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgnaW5wdXQnLCBfZXh0ZW5kcyh7fSwgaW5wdXRQcm9wcywgeyByZWY6IHRoaXMuaW5wdXRSZWYgfSkpLFxuXHRcdFx0XHRfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHR7IHJlZjogdGhpcy5zaXplclJlZiwgc3R5bGU6IHNpemVyU3R5bGUgfSxcblx0XHRcdFx0XHRzaXplclZhbHVlXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRoaXMucHJvcHMucGxhY2Vob2xkZXIgPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHR7IHJlZjogdGhpcy5wbGFjZUhvbGRlclNpemVyUmVmLCBzdHlsZTogc2l6ZXJTdHlsZSB9LFxuXHRcdFx0XHRcdHRoaXMucHJvcHMucGxhY2Vob2xkZXJcblx0XHRcdFx0KSA6IG51bGxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIEF1dG9zaXplSW5wdXQ7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5BdXRvc2l6ZUlucHV0LnByb3BUeXBlcyA9IHtcblx0Y2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gY2xhc3NOYW1lIGZvciB0aGUgb3V0ZXIgZWxlbWVudFxuXHRkZWZhdWx0VmFsdWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55LCAvLyBkZWZhdWx0IGZpZWxkIHZhbHVlXG5cdGV4dHJhV2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2ZUeXBlKFsvLyBhZGRpdGlvbmFsIHdpZHRoIGZvciBpbnB1dCBlbGVtZW50XG5cdF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLCBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZ10pLFxuXHRpZDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIC8vIGlkIHRvIHVzZSBmb3IgdGhlIGlucHV0LCBjYW4gYmUgc2V0IGZvciBjb25zaXN0ZW50IHNuYXBzaG90c1xuXHRpbmplY3RTdHlsZXM6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCwgLy8gaW5qZWN0IHRoZSBjdXN0b20gc3R5bGVzaGVldCB0byBoaWRlIGNsZWFyIFVJLCBkZWZhdWx0cyB0byB0cnVlXG5cdGlucHV0Q2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gY2xhc3NOYW1lIGZvciB0aGUgaW5wdXQgZWxlbWVudFxuXHRpbnB1dFJlZjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLCAvLyByZWYgY2FsbGJhY2sgZm9yIHRoZSBpbnB1dCBlbGVtZW50XG5cdGlucHV0U3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LCAvLyBjc3Mgc3R5bGVzIGZvciB0aGUgaW5wdXQgZWxlbWVudFxuXHRtaW5XaWR0aDogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoWy8vIG1pbmltdW0gd2lkdGggZm9yIGlucHV0IGVsZW1lbnRcblx0X3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsIF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nXSksXG5cdG9uQXV0b3NpemU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gb25BdXRvc2l6ZSBoYW5kbGVyOiBmdW5jdGlvbihuZXdXaWR0aCkge31cblx0b25DaGFuZ2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gb25DaGFuZ2UgaGFuZGxlcjogZnVuY3Rpb24oZXZlbnQpIHt9XG5cdHBsYWNlaG9sZGVyOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gcGxhY2Vob2xkZXIgdGV4dFxuXHRwbGFjZWhvbGRlcklzTWluV2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCwgLy8gZG9uJ3QgY29sbGFwc2Ugc2l6ZSB0byBsZXNzIHRoYW4gdGhlIHBsYWNlaG9sZGVyXG5cdHN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCwgLy8gY3NzIHN0eWxlcyBmb3IgdGhlIG91dGVyIGVsZW1lbnRcblx0dmFsdWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55IC8vIGZpZWxkIHZhbHVlXG59O1xuQXV0b3NpemVJbnB1dC5kZWZhdWx0UHJvcHMgPSB7XG5cdG1pbldpZHRoOiAxLFxuXHRpbmplY3RTdHlsZXM6IHRydWVcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IEF1dG9zaXplSW5wdXQ7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCB0aGlzIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgSVNfSFRNTEREQSA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWxsOiBkb2N1bWVudEFsbCxcbiAgSVNfSFRNTEREQTogSVNfSFRNTEREQVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRkb2N1bWVudEFsbC5JU19IVE1MRERBID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpIHx8IGl0ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodmFyaWFibGUpID8gdmFyaWFibGUgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24ocGF0aFtuYW1lc3BhY2VdKSB8fCBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pXG4gICAgOiBwYXRoW25hbWVzcGFjZV0gJiYgcGF0aFtuYW1lc3BhY2VdW21ldGhvZF0gfHwgZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIG5hdmlnYXRvciAhPSAndW5kZWZpbmVkJyAmJiBTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjMzLjInLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyMyBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjMzLjIvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyYXBwZXIpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gYXBwbHkoTmF0aXZlQ29uc3RydWN0b3IsIHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbCA6IFNUQVRJQyA/IGdsb2JhbFtUQVJHRVRdIDogKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFRBUkdFVCwge30pW1RBUkdFVF07XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXNPd24obmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgbWV0aG9kcyB0byBnbG9iYWwgZm9yIGNhbGxpbmcgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2VzIGluIHRoaXMgdmVyc2lvblxuICAgIGVsc2UgaWYgKG9wdGlvbnMud3JhcCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IHdyYXBDb25zdHJ1Y3Rvcihzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgZWxzZSBpZiAoUFJPVE8gJiYgaXNDYWxsYWJsZShzb3VyY2VQcm9wZXJ0eSkpIHJlc3VsdFByb3BlcnR5ID0gdW5jdXJyeVRoaXMoc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHRQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHJlc3VsdFByb3BlcnR5KTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzT3duKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aFtWSVJUVUFMX1BST1RPVFlQRV0sIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgLy8gZXhwb3J0IHJlYWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGlmIChvcHRpb25zLnJlYWwgJiYgdGFyZ2V0UHJvdG90eXBlICYmIChGT1JDRUQgfHwgIXRhcmdldFByb3RvdHlwZVtrZXldKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0UHJvdG90eXBlLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eS5zaGFtKSBkZWZpbmVQcm9wZXJ0eS5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KSwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKHByb3BlcnR5S2V5IGluIG9iamVjdCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbcHJvcGVydHlLZXldID0gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgZW1wdHkgPSBbXTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoY29uc3RydWN0b3JSZWdFeHAuZXhlYyk7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC50ZXN0KG5vb3ApO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChub29wLCBlbXB0eSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICAgIC8vIGBGdW5jdGlvbiN0b1N0cmluZ2AgdGhyb3dzIG9uIHNvbWUgYnVpbHQtaXQgZnVuY3Rpb24gaW4gc29tZSBsZWdhY3kgZW5naW5lc1xuICAgIC8vIChmb3IgZXhhbXBsZSwgYERPTVF1YWRgIGFuZCBzaW1pbGFyIGluIEZGNDEtKVxuICAgIHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYyhjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5pc0NvbnN0cnVjdG9yTGVnYWN5LnNoYW0gPSB0cnVlO1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIGxlbik7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgMSk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gIHZhciByZXN1bHQgPSAkQXJyYXkobWF4KGZpbiAtIGssIDApKTtcbiAgdmFyIG4gPSAwO1xuICBmb3IgKDsgayA8IGZpbjsgaysrLCBuKyspIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gIHJlc3VsdC5sZW5ndGggPSBuO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW51bWVyYWJsZSkgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBuYXRpdmVPYmplY3RDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgSElEREVOID0gc2hhcmVkS2V5KCdoaWRkZW4nKTtcbnZhciBTWU1CT0wgPSAnU3ltYm9sJztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcblxudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2wgJiYgJFN5bWJvbFtQUk9UT1RZUEVdO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mO1xudmFyIG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIFVTRV9TRVRURVIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBmYWxsYmFja0RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgdmFyIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCBQKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpIGRlbGV0ZSBPYmplY3RQcm90b3R5cGVbUF07XG4gIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciAmJiBPICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGUsIFAsIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpO1xuICB9XG59O1xuXG52YXIgc2V0U3ltYm9sRGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdENyZWF0ZShuYXRpdmVEZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPT0gNztcbn0pID8gZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA6IG5hdGl2ZURlZmluZVByb3BlcnR5O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcsIGRlc2NyaXB0aW9uKSB7XG4gIHZhciBzeW1ib2wgPSBBbGxTeW1ib2xzW3RhZ10gPSBuYXRpdmVPYmplY3RDcmVhdGUoU3ltYm9sUHJvdG90eXBlKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZShzeW1ib2wsIHtcbiAgICB0eXBlOiBTWU1CT0wsXG4gICAgdGFnOiB0YWcsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gIH0pO1xuICBpZiAoIURFU0NSSVBUT1JTKSBzeW1ib2wuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGlmIChPID09PSBPYmplY3RQcm90b3R5cGUpICRkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQLCBBdHRyaWJ1dGVzKTtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFBdHRyaWJ1dGVzLmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzT3duKE8sIEhJRERFTikpIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIEhJRERFTiwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHt9KSk7XG4gICAgICBPW0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNPd24oTywgSElEREVOKSAmJiBPW0hJRERFTl1ba2V5XSkgT1tISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSBuYXRpdmVPYmplY3RDcmVhdGUoQXR0cmlidXRlcywgeyBlbnVtZXJhYmxlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2NyaXB0b3IoTywga2V5LCBBdHRyaWJ1dGVzKTtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywga2V5LCBBdHRyaWJ1dGVzKTtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhwcm9wZXJ0aWVzKS5jb25jYXQoJGdldE93blByb3BlcnR5U3ltYm9scyhwcm9wZXJ0aWVzKSk7XG4gICRmb3JFYWNoKGtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwoJHByb3BlcnR5SXNFbnVtZXJhYmxlLCBwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1Byb3BlcnR5S2V5KFYpO1xuICB2YXIgZW51bWVyYWJsZSA9IGNhbGwobmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUsIHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBQKSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXNPd24odGhpcywgUCkgfHwgIWhhc093bihBbGxTeW1ib2xzLCBQKSB8fCBoYXNPd24odGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF1cbiAgICA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzT3duKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpKSBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBJU19PQkpFQ1RfUFJPVE9UWVBFID0gTyA9PT0gT2JqZWN0UHJvdG90eXBlO1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKElTX09CSkVDVF9QUk9UT1RZUEUgPyBPYmplY3RQcm90b3R5cGVTeW1ib2xzIDogdG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAoIUlTX09CSkVDVF9QUk9UT1RZUEUgfHwgaGFzT3duKE9iamVjdFByb3RvdHlwZSwga2V5KSkpIHtcbiAgICAgIHB1c2gocmVzdWx0LCBBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmIChpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICFhcmd1bWVudHMubGVuZ3RoIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogJHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHRhZyA9IHVpZChkZXNjcmlwdGlvbik7XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyICR0aGlzID0gdGhpcyA9PT0gdW5kZWZpbmVkID8gZ2xvYmFsIDogdGhpcztcbiAgICAgIGlmICgkdGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bigkdGhpcywgSElEREVOKSAmJiBoYXNPd24oJHRoaXNbSElEREVOXSwgdGFnKSkgJHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZXBsYWNlcikge1xuICBpZiAoaXNDYWxsYWJsZShyZXBsYWNlcikpIHJldHVybiByZXBsYWNlcjtcbiAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmV0dXJuO1xuICB2YXIgcmF3TGVuZ3RoID0gcmVwbGFjZXIubGVuZ3RoO1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0xlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZW1lbnQgPSByZXBsYWNlcltpXTtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ3N0cmluZycpIHB1c2goa2V5cywgZWxlbWVudCk7XG4gICAgZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ251bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ051bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ1N0cmluZycpIHB1c2goa2V5cywgdG9TdHJpbmcoZWxlbWVudCkpO1xuICB9XG4gIHZhciBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciByb290ID0gdHJ1ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHJvb3QpIHtcbiAgICAgIHJvb3QgPSBmYWxzZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHJldHVybiB2YWx1ZTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXNMZW5ndGg7IGorKykgaWYgKGtleXNbal0gPT09IGtleSkgcmV0dXJuIHZhbHVlO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGdldFJlcGxhY2VyRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24nKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJHN0cmluZ2lmeSA9IGdldEJ1aWx0SW4oJ0pTT04nLCAnc3RyaW5naWZ5Jyk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKC8uLy5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbnVtYmVyVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG52YXIgdGVzdGVyID0gL1tcXHVEODAwLVxcdURGRkZdL2c7XG52YXIgbG93ID0gL15bXFx1RDgwMC1cXHVEQkZGXSQvO1xudmFyIGhpID0gL15bXFx1REMwMC1cXHVERkZGXSQvO1xuXG52YXIgV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoJ3N0cmluZ2lmeSBkZXRlY3Rpb24nKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgcmV0dXJuICRzdHJpbmdpZnkoW3N5bWJvbF0pICE9PSAnW251bGxdJ1xuICAgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAgIHx8ICRzdHJpbmdpZnkoeyBhOiBzeW1ib2wgfSkgIT09ICd7fSdcbiAgICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICAgIHx8ICRzdHJpbmdpZnkoT2JqZWN0KHN5bWJvbCkpICE9PSAne30nO1xufSk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXdlbGwtZm9ybWVkLXN0cmluZ2lmeVxudmFyIElMTF9GT1JNRURfVU5JQ09ERSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRzdHJpbmdpZnkoJ1xcdURGMDZcXHVEODM0JykgIT09ICdcIlxcXFx1ZGYwNlxcXFx1ZDgzNFwiJ1xuICAgIHx8ICRzdHJpbmdpZnkoJ1xcdURFQUQnKSAhPT0gJ1wiXFxcXHVkZWFkXCInO1xufSk7XG5cbnZhciBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA9IGZ1bmN0aW9uIChpdCwgcmVwbGFjZXIpIHtcbiAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gIHZhciAkcmVwbGFjZXIgPSBnZXRSZXBsYWNlckZ1bmN0aW9uKHJlcGxhY2VyKTtcbiAgaWYgKCFpc0NhbGxhYmxlKCRyZXBsYWNlcikgJiYgKGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gIGFyZ3NbMV0gPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIHNvbWUgb2xkIGltcGxlbWVudGF0aW9ucyAobGlrZSBXZWJLaXQpIGNvdWxkIHBhc3MgbnVtYmVycyBhcyBrZXlzXG4gICAgaWYgKGlzQ2FsbGFibGUoJHJlcGxhY2VyKSkgdmFsdWUgPSBjYWxsKCRyZXBsYWNlciwgdGhpcywgJFN0cmluZyhrZXkpLCB2YWx1ZSk7XG4gICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbiAgcmV0dXJuIGFwcGx5KCRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xufTtcblxudmFyIGZpeElsbEZvcm1lZCA9IGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0LCBzdHJpbmcpIHtcbiAgdmFyIHByZXYgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgLSAxKTtcbiAgdmFyIG5leHQgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgKyAxKTtcbiAgaWYgKChleGVjKGxvdywgbWF0Y2gpICYmICFleGVjKGhpLCBuZXh0KSkgfHwgKGV4ZWMoaGksIG1hdGNoKSAmJiAhZXhlYyhsb3csIHByZXYpKSkge1xuICAgIHJldHVybiAnXFxcXHUnICsgbnVtYmVyVG9TdHJpbmcoY2hhckNvZGVBdChtYXRjaCwgMCksIDE2KTtcbiAgfSByZXR1cm4gbWF0Y2g7XG59O1xuXG5pZiAoJHN0cmluZ2lmeSkge1xuICAvLyBgSlNPTi5zdHJpbmdpZnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24uc3RyaW5naWZ5XG4gICQoeyB0YXJnZXQ6ICdKU09OJywgc3RhdDogdHJ1ZSwgYXJpdHk6IDMsIGZvcmNlZDogV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIHx8IElMTF9GT1JNRURfVU5JQ09ERSB9LCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgICAgIHZhciByZXN1bHQgPSBhcHBseShXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPyBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA6ICRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xuICAgICAgcmV0dXJuIElMTF9GT1JNRURfVU5JQ09ERSAmJiB0eXBlb2YgcmVzdWx0ID09ICdzdHJpbmcnID8gcmVwbGFjZShyZXN1bHQsIHRlc3RlciwgZml4SWxsRm9ybWVkKSA6IHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxuLy8gVjggfiBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRk9SQ0VEID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5c3ltYm9sc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICB2YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gJGdldE93blByb3BlcnR5U3ltYm9scyh0b09iamVjdChpdCkpIDogW107XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNJdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmFzeW5jaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNJdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaGFzSW5zdGFuY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5oYXNpbnN0YW5jZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdoYXNJbnN0YW5jZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXNjb25jYXRzcHJlYWRhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hBbGxgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaGFsbFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaEFsbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucmVwbGFjZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnJlcGxhY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc2VhcmNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc2VhcmNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NlYXJjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BlY2llc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwZWNpZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BsaXRgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGxpdFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGxpdCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC50b1ByaW1pdGl2ZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvcHJpbWl0aXZlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9zdHJpbmd0YWdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2V0QnVpbHRJbignU3ltYm9sJyksICdTeW1ib2wnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnVuc2NvcGFibGVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudW5zY29wYWJsZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIEpTT05bQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wucmVwbGFjZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGxpdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC51bnNjb3BhYmxlcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QudG8tc3RyaW5nLXRhZycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIE9iamVjdFByb3RvdHlwZSA9ICRPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gJE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChPKTtcbiAgaWYgKGhhc093bihvYmplY3QsIElFX1BST1RPKSkgcmV0dXJuIG9iamVjdFtJRV9QUk9UT107XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgaWYgKGlzQ2FsbGFibGUoY29uc3RydWN0b3IpICYmIG9iamVjdCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgJE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSAhaXNPYmplY3QoSXRlcmF0b3JQcm90b3R5cGUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgZGVmaW5lQnVpbHRJbihJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgYXJndW1lbnQgPT0gJ29iamVjdCcgfHwgaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuUFJPUEVSO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcblxuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNDYWxsYWJsZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICAgICAgICAgIGRlZmluZUJ1aWx0SW4oQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkucHJvdG90eXBlLnsgdmFsdWVzLCBAQGl0ZXJhdG9yIH0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBERUZBVUxUID09PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgaWYgKCFJU19QVVJFICYmIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsICduYW1lJywgVkFMVUVTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIGNhbGwobmF0aXZlSXRlcmF0b3IsIHRoaXMpOyB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uUHJvdG90eXBlID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUgJiYgY2xhc3NvZihDb2xsZWN0aW9uUHJvdG90eXBlKSAhPT0gVE9fU1RSSU5HX1RBRykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCBDT0xMRUNUSU9OX05BTUUpO1xuICB9XG4gIEl0ZXJhdG9yc1tDT0xMRUNUSU9OX05BTUVdID0gSXRlcmF0b3JzLkFycmF5O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBNRVRBREFUQSA9IHdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLy8gRnVuY3Rpb24ucHJvdG90eXBlW0BAbWV0YWRhdGFdXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmlmIChGdW5jdGlvblByb3RvdHlwZVtNRVRBREFUQV0gPT09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShGdW5jdGlvblByb3RvdHlwZSwgTUVUQURBVEEsIHtcbiAgICB2YWx1ZTogbnVsbFxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFzeW5jLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNEaXNwb3NlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5kaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdkaXNwb3NlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvcnNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3N5bWJvbCcpO1xuXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5mdW5jdGlvbi5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciBrZXlGb3IgPSBTeW1ib2wua2V5Rm9yO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbCB8fCBmdW5jdGlvbiBpc1JlZ2lzdGVyZWRTeW1ib2wodmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4ga2V5Rm9yKHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSkpICE9PSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzUmVnaXN0ZXJlZFN5bWJvbDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciAkaXNXZWxsS25vd25TeW1ib2wgPSBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2w7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldEJ1aWx0SW4oJ09iamVjdCcsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyk7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG5mb3IgKHZhciBpID0gMCwgc3ltYm9sS2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKSwgc3ltYm9sS2V5c0xlbmd0aCA9IHN5bWJvbEtleXMubGVuZ3RoOyBpIDwgc3ltYm9sS2V5c0xlbmd0aDsgaSsrKSB7XG4gIC8vIHNvbWUgb2xkIGVuZ2luZXMgdGhyb3dzIG9uIGFjY2VzcyB0byBzb21lIGtleXMgbGlrZSBgYXJndW1lbnRzYCBvciBgY2FsbGVyYFxuICB0cnkge1xuICAgIHZhciBzeW1ib2xLZXkgPSBzeW1ib2xLZXlzW2ldO1xuICAgIGlmIChpc1N5bWJvbChTeW1ib2xbc3ltYm9sS2V5XSkpIHdlbGxLbm93blN5bWJvbChzeW1ib2xLZXkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNXZWxsS25vd25TeW1ib2wodmFsdWUpIHtcbiAgaWYgKCRpc1dlbGxLbm93blN5bWJvbCAmJiAkaXNXZWxsS25vd25TeW1ib2wodmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICB2YXIgc3ltYm9sID0gdGhpc1N5bWJvbFZhbHVlKHZhbHVlKTtcbiAgICBmb3IgKHZhciBqID0gMCwga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoOyBqIDwga2V5c0xlbmd0aDsgaisrKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxIC0tIHBvbHlmaWxsZWQgc3ltYm9scyBjYXNlXG4gICAgICBpZiAoV2VsbEtub3duU3ltYm9sc1N0b3JlW2tleXNbal1dID09IHN5bWJvbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duU3ltYm9sOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGVyYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaGVyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5vYnNlcnZhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1JlZ2lzdGVyZWRTeW1ib2wnIH0sIHtcbiAgaXNSZWdpc3RlcmVkOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duJyk7XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25gIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1dlbGxLbm93blN5bWJvbCcsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWV0YWRhdGFLZXlgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGFLZXknKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5wYXR0ZXJuTWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3BhdHRlcm5NYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2VBbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQtc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZScpO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLWtleScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHBvaW50LCBmYWxzZSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZignaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sL2l0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbC9pdGVyYXRvcicpO1xuIiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX1N5bWJvbCRpdGVyYXRvciBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBfU3ltYm9sJGl0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBfU3ltYm9sICYmIG8gIT09IF9TeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ3RvUHJpbWl0aXZlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbC90by1wcmltaXRpdmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvdG8tcHJpbWl0aXZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuIiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkdG9QcmltaXRpdmUgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbX1N5bWJvbCR0b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufSIsICJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIjtcbmltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodGFyZ2V0LCB0b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsICJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIjtcbmltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEMsIGFyZ3NMZW5ndGgsIGFyZ3MpIHtcbiAgaWYgKCFoYXNPd24oZmFjdG9yaWVzLCBhcmdzTGVuZ3RoKSkge1xuICAgIHZhciBsaXN0ID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSBsaXN0W2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgZmFjdG9yaWVzW2FyZ3NMZW5ndGhdID0gJEZ1bmN0aW9uKCdDLGEnLCAncmV0dXJuIG5ldyBDKCcgKyBqb2luKGxpc3QsICcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/ICRGdW5jdGlvbi5iaW5kIDogZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgRiA9IGFDYWxsYWJsZSh0aGlzKTtcbiAgdmFyIFByb3RvdHlwZSA9IEYucHJvdG90eXBlO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gZnVuY3Rpb24gYm91bmQoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gY29uY2F0KHBhcnRBcmdzLCBhcnJheVNsaWNlKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChGLCBhcmdzLmxlbmd0aCwgYXJncykgOiBGLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoUHJvdG90eXBlKSkgYm91bmRGdW5jdGlvbi5wcm90b3R5cGUgPSBQcm90b3R5cGU7XG4gIHJldHVybiBib3VuZEZ1bmN0aW9uO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gZGV0ZWN0aW9uXG4kKHsgdGFyZ2V0OiAnRnVuY3Rpb24nLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGdW5jdGlvbi5iaW5kICE9PSBiaW5kIH0sIHtcbiAgYmluZDogYmluZFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IsIE1FVEhPRCkge1xuICB2YXIgTmFtZXNwYWNlID0gcGF0aFtDT05TVFJVQ1RPUiArICdQcm90b3R5cGUnXTtcbiAgdmFyIHB1cmVNZXRob2QgPSBOYW1lc3BhY2UgJiYgTmFtZXNwYWNlW01FVEhPRF07XG4gIGlmIChwdXJlTWV0aG9kKSByZXR1cm4gcHVyZU1ldGhvZDtcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIE5hdGl2ZVByb3RvdHlwZSAmJiBOYXRpdmVQcm90b3R5cGVbTUVUSE9EXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0Z1bmN0aW9uJywgJ2JpbmQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vZnVuY3Rpb24vdmlydHVhbC9iaW5kJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmJpbmQ7XG4gIHJldHVybiBpdCA9PT0gRnVuY3Rpb25Qcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoRnVuY3Rpb25Qcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmRcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IHJlZHVjZSwgcmVkdWNlUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19SSUdIVCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c0xlbmd0aCwgbWVtbykge1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gSVNfUklHSFQgPyBsZW5ndGggLSAxIDogMDtcbiAgICB2YXIgaSA9IElTX1JJR0hUID8gLTEgOiAxO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPCAyKSB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBpZiAoSVNfUklHSFQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7SVNfUklHSFQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuICBsZWZ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3NvZihnbG9iYWwucHJvY2VzcykgPT09ICdwcm9jZXNzJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgQ0hST01FX1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbi8vIENocm9tZSA4MC04MiBoYXMgYSBjcml0aWNhbCBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNDk5ODJcbnZhciBDSFJPTUVfQlVHID0gIUlTX05PREUgJiYgQ0hST01FX1ZFUlNJT04gPiA3OSAmJiBDSFJPTUVfVkVSU0lPTiA8IDgzO1xudmFyIEZPUkNFRCA9IENIUk9NRV9CVUcgfHwgIWFycmF5TWV0aG9kSXNTdHJpY3QoJ3JlZHVjZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBsZW5ndGgsIGxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdyZWR1Y2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZWR1Y2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmVkdWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZWR1Y2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmVkdWNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZpbHRlcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbHRlcikgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWx0ZXJcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5tYXAnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnbWFwJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvbWFwJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0Lm1hcDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUubWFwKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL21hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL21hcFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcblxuLy8gYEZsYXR0ZW5JbnRvQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBiaW5kKG1hcHBlciwgdGhpc0FyZykgOiBmYWxzZTtcbiAgdmFyIGVsZW1lbnQsIGVsZW1lbnRMZW47XG5cbiAgd2hpbGUgKHNvdXJjZUluZGV4IDwgc291cmNlTGVuKSB7XG4gICAgaWYgKHNvdXJjZUluZGV4IGluIHNvdXJjZSkge1xuICAgICAgZWxlbWVudCA9IG1hcEZuID8gbWFwRm4oc291cmNlW3NvdXJjZUluZGV4XSwgc291cmNlSW5kZXgsIG9yaWdpbmFsKSA6IHNvdXJjZVtzb3VyY2VJbmRleF07XG5cbiAgICAgIGlmIChkZXB0aCA+IDAgJiYgaXNBcnJheShlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50TGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoZWxlbWVudCk7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCBlbGVtZW50TGVuLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIodGFyZ2V0SW5kZXggKyAxKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZsYXRNYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmxhdG1hcFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIEE7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgQS5sZW5ndGggPSBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgMSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnVuc2NvcGFibGVzLmZsYXQtbWFwJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZsYXRNYXAnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mbGF0LW1hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5mbGF0TWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mbGF0TWFwKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZsYXQtbWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmxhdC1tYXBcIik7IiwgImltcG9ydCB7IERhdGFJbnRlcmZhY2UsIEV2ZW50Q2FsbGJhY2tzLCBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcblxuLyoqXG4gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVBpcGUge1xuICAvKipcbiAgICogVGFrZSBhbGwgaXRlbXMgZnJvbSB0aGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldywgdHJhbnNmb3JtIHRoZW0gYXNcbiAgICogY29uZmlndXJlZCBhbmQgdXBkYXRlIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBhbGwoKTogdGhpcztcblxuICAvKipcbiAgICogU3RhcnQgb2JzZXJ2aW5nIHRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LCB0cmFuc2Zvcm1pbmcgdGhlIGl0ZW1zXG4gICAqIGFuZCB1cGRhdGluZyB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBzb3VyY2UgZGF0YSBzZXQgd2lsbCBiZSBpZ25vcmVkLiBJZiB5b3UgZm9yXG4gICAqIGV4YW1wbGUgd2FudCB0byBwcm9jZXNzIGFsbCB0aGUgaXRlbXMgdGhhdCBhcmUgYWxyZWFkeSB0aGVyZSB1c2U6XG4gICAqIGBwaXBlLmFsbCgpLnN0YXJ0KClgLlxuICAgKi9cbiAgc3RhcnQoKTogdGhpcztcblxuICAvKipcbiAgICogU3RvcCBvYnNlcnZpbmcgdGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcsIHRyYW5zZm9ybWluZyB0aGUgaXRlbXNcbiAgICogYW5kIHVwZGF0aW5nIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBzdG9wKCk6IHRoaXM7XG59XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFQaXBlRmFjdG9yeSA9IEluc3RhbmNlVHlwZTx0eXBlb2YgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbj47XG5cbi8qKlxuICogQ3JlYXRlIG5ldyBkYXRhIHBpcGUuXG4gKlxuICogQHBhcmFtIGZyb20gLSBUaGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldy5cbiAqIEByZW1hcmtzXG4gKiBFeGFtcGxlIHVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIEFwcEl0ZW0ge1xuICogICB3aG9hbWk6IHN0cmluZztcbiAqICAgYXBwRGF0YTogdW5rbm93bjtcbiAqICAgdmlzRGF0YTogVmlzSXRlbTtcbiAqIH1cbiAqIGludGVyZmFjZSBWaXNJdGVtIHtcbiAqICAgaWQ6IG51bWJlcjtcbiAqICAgbGFiZWw6IHN0cmluZztcbiAqICAgY29sb3I6IHN0cmluZztcbiAqICAgeDogbnVtYmVyO1xuICogICB5OiBudW1iZXI7XG4gKiB9XG4gKlxuICogY29uc3QgZHMxID0gbmV3IERhdGFTZXQ8QXBwSXRlbSwgXCJ3aG9hbWlcIj4oW10sIHsgZmllbGRJZDogXCJ3aG9hbWlcIiB9KTtcbiAqIGNvbnN0IGRzMiA9IG5ldyBEYXRhU2V0PFZpc0l0ZW0sIFwiaWRcIj4oKTtcbiAqXG4gKiBjb25zdCBwaXBlID0gY3JlYXRlTmV3RGF0YVBpcGVGcm9tKGRzMSlcbiAqICAgLmZpbHRlcigoaXRlbSk6IGJvb2xlYW4gPT4gaXRlbS5lbmFibGVkID09PSB0cnVlKVxuICogICAubWFwPFZpc0l0ZW0sIFwiaWRcIj4oKGl0ZW0pOiBWaXNJdGVtID0+IGl0ZW0udmlzRGF0YSlcbiAqICAgLnRvKGRzMik7XG4gKlxuICogcGlwZS5zdGFydCgpO1xuICogYGBgXG4gKiBAcmV0dXJucyBBIGZhY3Rvcnkgd2hvc2UgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdEYXRhUGlwZUZyb208XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihmcm9tOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFNJLCBTUD4ge1xuICByZXR1cm4gbmV3IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24oZnJvbSk7XG59XG5cbnR5cGUgVHJhbnNmb3JtZXI8VD4gPSAoaW5wdXQ6IFRbXSkgPT4gVFtdO1xuXG4vKipcbiAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwaXBlLiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlIG9ubHkgdGhyb3VnaFxuICogYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFNJIC0gU291cmNlIGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gU1AgLSBTb3VyY2UgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICogQHR5cGVQYXJhbSBUUCAtIFRhcmdldCBpdGVtIHR5cGUncyBpZCBwcm9wZXJ0eSBuYW1lLlxuICovXG5jbGFzcyBTaW1wbGVEYXRhUGlwZTxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nLFxuICBUSSBleHRlbmRzIFBhcnRJdGVtPFRQPixcbiAgVFAgZXh0ZW5kcyBzdHJpbmdcbj4gaW1wbGVtZW50cyBEYXRhUGlwZVxue1xuICAvKipcbiAgICogQm91bmQgbGlzdGVuZXJzIGZvciB1c2Ugd2l0aCBgRGF0YUludGVyZmFjZVsnb24nIHwgJ29mZiddYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogRXZlbnRDYWxsYmFja3M8U0ksIFNQPiA9IHtcbiAgICBhZGQ6IHRoaXMuX2FkZC5iaW5kKHRoaXMpLFxuICAgIHJlbW92ZTogdGhpcy5fcmVtb3ZlLmJpbmQodGhpcyksXG4gICAgdXBkYXRlOiB0aGlzLl91cGRhdGUuYmluZCh0aGlzKSxcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZS5cbiAgICpcbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IHRoYXQgd2lsbCBiZSBvYnNlcnZlZC5cbiAgICogQHBhcmFtIF90cmFuc2Zvcm1lcnMgLSBBbiBhcnJheSBvZiB0cmFuc2Zvcm1pbmcgZnVuY3Rpb25zIHRvIGJlIHVzZWQgdG9cbiAgICogZmlsdGVyIG9yIHRyYW5zZm9ybSB0aGUgaXRlbXMgaW4gdGhlIHBpcGUuXG4gICAqIEBwYXJhbSBfdGFyZ2V0IC0gVGhlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiByZWFkb25seSBUcmFuc2Zvcm1lcjx1bmtub3duPltdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhcmdldDogRGF0YVNldDxUSSwgVFA+XG4gICkge31cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGFsbCgpOiB0aGlzIHtcbiAgICB0aGlzLl90YXJnZXQudXBkYXRlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQoKSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdGFydCgpOiB0aGlzIHtcbiAgICB0aGlzLl9zb3VyY2Uub24oXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9uKFwicmVtb3ZlXCIsIHRoaXMuX2xpc3RlbmVycy5yZW1vdmUpO1xuICAgIHRoaXMuX3NvdXJjZS5vbihcInVwZGF0ZVwiLCB0aGlzLl9saXN0ZW5lcnMudXBkYXRlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdG9wKCk6IHRoaXMge1xuICAgIHRoaXMuX3NvdXJjZS5vZmYoXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9mZihcInJlbW92ZVwiLCB0aGlzLl9saXN0ZW5lcnMucmVtb3ZlKTtcbiAgICB0aGlzLl9zb3VyY2Uub2ZmKFwidXBkYXRlXCIsIHRoaXMuX2xpc3RlbmVycy51cGRhdGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdGhlIHRyYW5zZm9ybWVycyB0byB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIFRoZSBpdGVtcyB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdHJhbnNmb3JtSXRlbXMoaXRlbXM6IHVua25vd25bXSk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtZXJzLnJlZHVjZSgoaXRlbXMsIHRyYW5zZm9ybSk6IHVua25vd25bXSA9PiB7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtKGl0ZW1zKTtcbiAgICB9LCBpdGVtcyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGFkZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBpZHMgb2YgdGhlIGFkZGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJhZGRcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcImFkZFwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5hZGQodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiB1cGRhdGUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSB1cGRhdGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJ1cGRhdGVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInVwZGF0ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC51cGRhdGUodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHJlbW92ZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBkYXRhIG9mIHRoZSByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJyZW1vdmVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInJlbW92ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5yZW1vdmUodGhpcy5fdHJhbnNmb3JtSXRlbXMocGF5bG9hZC5vbGREYXRhKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGlwZSBmYWN0b3J5LiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlXG4gKiBvbmx5IHRocm91Z2ggYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqL1xuY2xhc3MgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+IHtcbiAgLyoqXG4gICAqIEFycmF5IHRyYW5zZm9ybWVycyB1c2VkIHRvIHRyYW5zZm9ybSBpdGVtcyB3aXRoaW4gdGhlIHBpcGUuIFRoaXMgaXMgdHlwZWRcbiAgICogYXMgYW55IGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiBUcmFuc2Zvcm1lcjxhbnk+W10gPSBbXTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZSBmYWN0b3J5LiBUaGlzIGlzIGFuIGludGVybmFsIGNvbnN0cnVjdG9yIHRoYXRcbiAgICogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhpcyBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IGZvciB0aGlzIHBpcGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pIHt9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgZmlsdGVyaW5nIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGdpdmVuIGl0ZW1cbiAgICogc2hvdWxkIGJlIHBpcGVkIGFuZCBmYWxzZSBpZiBub3QuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZpbHRlcihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBib29sZWFuXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248U0ksIFNQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZpbHRlcihjYWxsYmFjaykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBlYWNoIHNvdXJjZSBpdGVtIHRvIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbS5cbiAgICogQHR5cGVQYXJhbSBUSSAtIFRhcmdldCBpdGVtIHR5cGUuXG4gICAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAgICogQHJldHVybnMgVGhpcyBmYWN0b3J5IGZvciBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgbWFwPFRJIGV4dGVuZHMgUGFydEl0ZW08VFA+LCBUUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIj4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gVElcbiAgKTogRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxUSSwgVFA+IHtcbiAgICB0aGlzLl90cmFuc2Zvcm1lcnMucHVzaCgoaW5wdXQpOiB1bmtub3duW10gPT4gaW5wdXQubWFwKGNhbGxiYWNrKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD47XG4gIH1cblxuICAvKipcbiAgICogTWFwIGVhY2ggc291cmNlIGl0ZW0gdG8gemVybyBvciBtb3JlIGl0ZW1zIG9mIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogYW4gYXJyYXkgb2YgY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbXMuXG4gICAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICAgKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZsYXRNYXA8VEkgZXh0ZW5kcyBQYXJ0SXRlbTxUUD4sIFRQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiPihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBUSVtdXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZsYXRNYXAoY2FsbGJhY2spKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IHRoaXMgcGlwZSB0byBnaXZlbiBkYXRhIHNldC5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBkYXRhIHNldCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMgZnJvbSB0aGlzIHBpcGUuXG4gICAqIEByZXR1cm5zIFRoZSBwaXBlIGNvbm5lY3RlZCBiZXR3ZWVuIGdpdmVuIGRhdGEgc2V0cyBhbmQgcGVyZm9ybWluZ1xuICAgKiBjb25maWd1cmVkIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBwcm9jZXNzZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgdG8odGFyZ2V0OiBEYXRhU2V0PFNJLCBTUD4pOiBEYXRhUGlwZSB7XG4gICAgcmV0dXJuIG5ldyBTaW1wbGVEYXRhUGlwZSh0aGlzLl9zb3VyY2UsIHRoaXMuX3RyYW5zZm9ybWVycywgdGFyZ2V0KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZyb20nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmZyb207XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvck1ldGhvZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi9zdGFibGUvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vYWN0dWFsL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9mdWxsL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmlzYXJyYXlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBpc0FycmF5OiBpc0FycmF5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5pc0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2FycmF5L2lzLWFycmF5Jyk7XG4iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggYW5kIFNhZmFyaSA8PSAxNS40LCBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5wdXNoJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3B1c2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9wdXNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnB1c2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnB1c2gpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcHVzaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3B1c2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9pbnN0YW5jZS9wdXNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9wdXNoJyk7XG4iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX3B1c2hJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcHVzaC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgX1N5bWJvbCAmJiBfZ2V0SXRlcmF0b3JNZXRob2QocikgfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChfcHVzaEluc3RhbmNlUHJvcGVydHkoYSkuY2FsbChhLCBlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufSIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIG5hdGl2ZVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKGlzQ29uc3RydWN0b3IoQ29uc3RydWN0b3IpICYmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQ29uc3RydWN0b3IucHJvdG90eXBlKSkpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KENvbnN0cnVjdG9yKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yW1NQRUNJRVNdO1xuICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IG51bGwpIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQ29uc3RydWN0b3IpKG1heChmaW4gLSBrLCAwKSk7XG4gICAgZm9yIChuID0gMDsgayA8IGZpbjsgaysrLCBuKyspIGlmIChrIGluIE8pIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zbGljZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNsaWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL3NsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvYXJyYXkvZnJvbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvYXJyYXkvZnJvbScpO1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufSIsICJpbXBvcnQgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5pbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIHZhciBfY29udGV4dDtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBfc2xpY2VJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKS5jYWxsKF9jb250ZXh0LCA4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBfQXJyYXkkZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsICJpbXBvcnQgX0FycmF5JGlzQXJyYXkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoX0FycmF5JGlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn0iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBfU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIF9nZXRJdGVyYXRvck1ldGhvZChpdGVyKSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBfQXJyYXkkZnJvbShpdGVyKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aG91dEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVTcHJlYWQgZnJvbSBcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufSIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnY29uY2F0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvY29uY2F0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmNvbmNhdDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuY29uY2F0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2NvbmNhdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2NvbmNhdFwiKTsiLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zbGljZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xuXG4vLyBgUmVmbGVjdC5vd25LZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5vd25rZXlzXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBvd25LZXlzOiBvd25LZXlzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlJlZmxlY3Qub3duS2V5cztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcmVmbGVjdC9vd24ta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3JlZmxlY3Qvb3duLWtleXNcIik7IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXlcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3Qva2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9rZXlzXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICFTVFJJQ1RfTUVUSE9EID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9PSBmb3JFYWNoIH0sIHtcbiAgZm9yRWFjaDogZm9yRWFjaFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmb3JFYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZvckVhY2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciBuYXRpdmVSZXZlcnNlID0gdW5jdXJyeVRoaXMoW10ucmV2ZXJzZSk7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJldmVyc2Vcbi8vIGZpeCBmb3IgU2FmYXJpIDEyLjAgYnVnXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4Nzk0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTdHJpbmcodGVzdCkgPT09IFN0cmluZyh0ZXN0LnJldmVyc2UoKSkgfSwge1xuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnbiAtLSBkaXJ0eSBoYWNrXG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgcmV0dXJuIG5hdGl2ZVJldmVyc2UodGhpcyk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdyZXZlcnNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZXZlcnNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZXZlcnNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgUCkge1xuICBpZiAoIWRlbGV0ZSBPW1BdKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzcGxpY2UnKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNwbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zcGxpY2Vcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNwbGljZTogZnVuY3Rpb24gc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCAvKiAsIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFjdHVhbFN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpbnNlcnRDb3VudCwgYWN0dWFsRGVsZXRlQ291bnQsIEEsIGssIGZyb20sIHRvO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgIGluc2VydENvdW50ID0gYWN0dWFsRGVsZXRlQ291bnQgPSAwO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgICBpbnNlcnRDb3VudCA9IDA7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IGxlbiAtIGFjdHVhbFN0YXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnNlcnRDb3VudCA9IGFyZ3VtZW50c0xlbmd0aCAtIDI7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IG1pbihtYXgodG9JbnRlZ2VyT3JJbmZpbml0eShkZWxldGVDb3VudCksIDApLCBsZW4gLSBhY3R1YWxTdGFydCk7XG4gICAgfVxuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBpbnNlcnRDb3VudCAtIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBmb3IgKGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgZnJvbSA9IGFjdHVhbFN0YXJ0ICsgaztcbiAgICAgIGlmIChmcm9tIGluIE8pIGNyZWF0ZVByb3BlcnR5KEEsIGssIE9bZnJvbV0pO1xuICAgIH1cbiAgICBBLmxlbmd0aCA9IGFjdHVhbERlbGV0ZUNvdW50O1xuICAgIGlmIChpbnNlcnRDb3VudCA8IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBhY3R1YWxTdGFydDsgayA8IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50OyBrKyspIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudDtcbiAgICAgICAgdG8gPSBrICsgaW5zZXJ0Q291bnQ7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgICAgZm9yIChrID0gbGVuOyBrID4gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudDsgay0tKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgayAtIDEpO1xuICAgIH0gZWxzZSBpZiAoaW5zZXJ0Q291bnQgPiBhY3R1YWxEZWxldGVDb3VudCkge1xuICAgICAgZm9yIChrID0gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsgPiBhY3R1YWxTdGFydDsgay0tKSB7XG4gICAgICAgIGZyb20gPSBrICsgYWN0dWFsRGVsZXRlQ291bnQgLSAxO1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudCAtIDE7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGsgPSAwOyBrIDwgaW5zZXJ0Q291bnQ7IGsrKykge1xuICAgICAgT1trICsgYWN0dWFsU3RhcnRdID0gYXJndW1lbnRzW2sgKyAyXTtcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudCk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NwbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NwbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zcGxpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNwbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zcGxpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zcGxpY2VcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBzaG91bGQgaGF2ZSBjb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgKEVkZ2UgYnVnKVxuICBpZiAoREVTQ1JJUFRPUlMgJiYgJGFzc2lnbih7IGI6IDEgfSwgJGFzc2lnbihkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICdiJywge1xuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksIHsgYjogMiB9KSkuYiAhPT0gMSkgcmV0dXJuIHRydWU7XG4gIC8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3ltYm9sIC0tIHNhZmVcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnYXNzaWduIGRldGVjdGlvbicpO1xuICB2YXIgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW3N5bWJvbF0gPSA3O1xuICBhbHBoYWJldC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoY2hyKSB7IEJbY2hyXSA9IGNocjsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtzeW1ib2xdICE9PSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9PSBhbHBoYWJldDtcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG4gIHdoaWxlIChhcmd1bWVudHNMZW5ndGggPiBpbmRleCkge1xuICAgIHZhciBTID0gSW5kZXhlZE9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KG9iamVjdEtleXMoUyksIGdldE93blByb3BlcnR5U3ltYm9scyhTKSkgOiBvYmplY3RLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlLCBTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24nKTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGFyaXR5OiAyLCBmb3JjZWQ6IE9iamVjdC5hc3NpZ24gIT09IGFzc2lnbiB9LCB7XG4gIGFzc2lnbjogYXNzaWduXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5hc3NpZ247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9hc3NpZ24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvYXNzaWduXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBjcmVhdGU6IGNyZWF0ZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWpzb24gLS0gc2FmZVxuaWYgKCFwYXRoLkpTT04pIHBhdGguSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICByZXR1cm4gYXBwbHkocGF0aC5KU09OLnN0cmluZ2lmeSwgbnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvanNvbi9zdHJpbmdpZnlcIik7IiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBCdW4gPT0gJ2Z1bmN0aW9uJyAmJiBCdW4gJiYgdHlwZW9mIEJ1bi52ZXJzaW9uID09ICdzdHJpbmcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgRU5HSU5FX0lTX0JVTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnVuJyk7XG52YXIgVVNFUl9BR0VOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciBGdW5jdGlvbiA9IGdsb2JhbC5GdW5jdGlvbjtcbi8vIGRpcnR5IElFOS0gYW5kIEJ1biAwLjMuMC0gY2hlY2tzXG52YXIgV1JBUCA9IC9NU0lFIC5cXC4vLnRlc3QoVVNFUl9BR0VOVCkgfHwgRU5HSU5FX0lTX0JVTiAmJiAoZnVuY3Rpb24gKCkge1xuICB2YXIgdmVyc2lvbiA9IGdsb2JhbC5CdW4udmVyc2lvbi5zcGxpdCgnLicpO1xuICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPCAzIHx8IHZlcnNpb25bMF0gPT09ICcwJyAmJiAodmVyc2lvblsxXSA8IDMgfHwgdmVyc2lvblsxXSA9PT0gJzMnICYmIHZlcnNpb25bMl0gPT09ICcwJyk7XG59KSgpO1xuXG4vLyBJRTktIC8gQnVuIDAuMy4wLSBzZXRUaW1lb3V0IC8gc2V0SW50ZXJ2YWwgLyBzZXRJbW1lZGlhdGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvMTYzM1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBoYXNUaW1lQXJnKSB7XG4gIHZhciBmaXJzdFBhcmFtSW5kZXggPSBoYXNUaW1lQXJnID8gMiA6IDE7XG4gIHJldHVybiBXUkFQID8gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSkgPiBmaXJzdFBhcmFtSW5kZXg7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgcGFyYW1zID0gYm91bmRBcmdzID8gYXJyYXlTbGljZShhcmd1bWVudHMsIGZpcnN0UGFyYW1JbmRleCkgOiBbXTtcbiAgICB2YXIgY2FsbGJhY2sgPSBib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdGhpcywgcGFyYW1zKTtcbiAgICB9IDogZm47XG4gICAgcmV0dXJuIGhhc1RpbWVBcmcgPyBzY2hlZHVsZXIoY2FsbGJhY2ssIHRpbWVvdXQpIDogc2NoZWR1bGVyKGNhbGxiYWNrKTtcbiAgfSA6IHNjaGVkdWxlcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxudmFyIHNldEludGVydmFsID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0SW50ZXJ2YWwsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldGludGVydmFsXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRJbnRlcnZhbCAhPT0gc2V0SW50ZXJ2YWwgfSwge1xuICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWxcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRUaW1lb3V0ID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0VGltZW91dCwgdHJ1ZSk7XG5cbi8vIEJ1biAvIElFOS0gc2V0VGltZW91dCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRUaW1lb3V0ICE9PSBzZXRUaW1lb3V0IH0sIHtcbiAgc2V0VGltZW91dDogc2V0VGltZW91dFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRUaW1lb3V0O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXRcIik7IiwgImZ1bmN0aW9uIEVtaXR0ZXIob2JqZWN0KSB7XG5cdGlmIChvYmplY3QpIHtcblx0XHRyZXR1cm4gbWl4aW4ob2JqZWN0KTtcblx0fVxuXG5cdHRoaXMuX2NhbGxiYWNrcyA9IG5ldyBNYXAoKTtcbn1cblxuZnVuY3Rpb24gbWl4aW4ob2JqZWN0KSB7XG5cdE9iamVjdC5hc3NpZ24ob2JqZWN0LCBFbWl0dGVyLnByb3RvdHlwZSk7XG5cdG9iamVjdC5fY2FsbGJhY2tzID0gbmV3IE1hcCgpO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5FbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCkgPz8gW107XG5cdGNhbGxiYWNrcy5wdXNoKGxpc3RlbmVyKTtcblx0dGhpcy5fY2FsbGJhY2tzLnNldChldmVudCwgY2FsbGJhY2tzKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRjb25zdCBvbiA9ICguLi5hcmd1bWVudHNfKSA9PiB7XG5cdFx0dGhpcy5vZmYoZXZlbnQsIG9uKTtcblx0XHRsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0fTtcblxuXHRvbi5mbiA9IGxpc3RlbmVyO1xuXHR0aGlzLm9uKGV2ZW50LCBvbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCAmJiBsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5fY2FsbGJhY2tzLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2NhbGxiYWNrcy5kZWxldGUoZXZlbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCk7XG5cdGlmIChjYWxsYmFja3MpIHtcblx0XHRmb3IgKGNvbnN0IFtpbmRleCwgY2FsbGJhY2tdIG9mIGNhbGxiYWNrcy5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChjYWxsYmFjayA9PT0gbGlzdGVuZXIgfHwgY2FsbGJhY2suZm4gPT09IGxpc3RlbmVyKSB7XG5cdFx0XHRcdGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5fY2FsbGJhY2tzLmRlbGV0ZShldmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2NhbGxiYWNrcy5zZXQoZXZlbnQsIGNhbGxiYWNrcyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50LCAuLi5hcmd1bWVudHNfKSB7XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpO1xuXHRpZiAoY2FsbGJhY2tzKSB7XG5cdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiB0aGUgY2FsbGJhY2tzIGFycmF5IHRvIGF2b2lkIGlzc3VlcyBpZiBpdCdzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb25cblx0XHRjb25zdCBjYWxsYmFja3NDb3B5ID0gWy4uLmNhbGxiYWNrc107XG5cblx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrc0NvcHkpIHtcblx0XHRcdGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50c18pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLl9jYWxsYmFja3MuZ2V0KGV2ZW50KSA/PyBbXTtcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0aWYgKGV2ZW50KSB7XG5cdFx0cmV0dXJuIHRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XG5cdH1cblxuXHRsZXQgdG90YWxDb3VudCA9IDA7XG5cdGZvciAoY29uc3QgY2FsbGJhY2tzIG9mIHRoaXMuX2NhbGxiYWNrcy52YWx1ZXMoKSkge1xuXHRcdHRvdGFsQ291bnQgKz0gY2FsbGJhY2tzLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiB0b3RhbENvdW50O1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUuaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLmxpc3RlbmVyQ291bnQoZXZlbnQpID4gMDtcbn07XG5cbi8vIEFsaWFzZXNcbkVtaXR0ZXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vbjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub2ZmO1xuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gRW1pdHRlcjtcbn1cbiIsICIvKiEgSGFtbWVyLkpTIC0gdjIuMC4xNy1yYyAtIDIwMTktMTItMTZcbiAqIGh0dHA6Ly9uYXZlci5naXRodWIuaW8vZWdqc1xuICpcbiAqIEZvcmtlZCBCeSBOYXZlciBlZ2pzXG4gKiBDb3B5cmlnaHQgKGMpIGhhbW1lcmpzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKi9cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IG9iamVjdHNfdG9fYXNzaWduXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB0YXJnZXRcbiAqL1xudmFyIGFzc2lnbjtcblxuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF07XG5cbiAgICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSB7XG4gICAgICAgICAgICBvdXRwdXRbbmV4dEtleV0gPSBzb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcbn0gZWxzZSB7XG4gIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbnZhciBhc3NpZ24kMSA9IGFzc2lnbjtcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IHtcbiAgc3R5bGU6IHt9XG59IDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG52YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgIGFicyA9IE1hdGguYWJzO1xudmFyIG5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHByZWZpeGVkIHByb3BlcnR5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfSBwcmVmaXhlZFxuICovXG5cbmZ1bmN0aW9uIHByZWZpeGVkKG9iaiwgcHJvcGVydHkpIHtcbiAgdmFyIHByZWZpeDtcbiAgdmFyIHByb3A7XG4gIHZhciBjYW1lbFByb3AgPSBwcm9wZXJ0eVswXS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICBwcmVmaXggPSBWRU5ET1JfUFJFRklYRVNbaV07XG4gICAgcHJvcCA9IHByZWZpeCA/IHByZWZpeCArIGNhbWVsUHJvcCA6IHByb3BlcnR5O1xuXG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYywgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbnZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gIC8vIHdpbmRvdyBpcyB1bmRlZmluZWQgaW4gbm9kZS5qc1xuICB3aW4gPSB7fTtcbn0gZWxzZSB7XG4gIHdpbiA9IHdpbmRvdztcbn1cblxudmFyIFBSRUZJWEVEX1RPVUNIX0FDVElPTiA9IHByZWZpeGVkKFRFU1RfRUxFTUVOVC5zdHlsZSwgJ3RvdWNoQWN0aW9uJyk7XG52YXIgTkFUSVZFX1RPVUNIX0FDVElPTiA9IFBSRUZJWEVEX1RPVUNIX0FDVElPTiAhPT0gdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpIHtcbiAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRvdWNoTWFwID0ge307XG4gIHZhciBjc3NTdXBwb3J0cyA9IHdpbi5DU1MgJiYgd2luLkNTUy5zdXBwb3J0cztcbiAgWydhdXRvJywgJ21hbmlwdWxhdGlvbicsICdwYW4teScsICdwYW4teCcsICdwYW4teCBwYW4teScsICdub25lJ10uZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgLy8gYWxsIHZhbHVlcy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgSUUgMTAgYW5kIDExLlxuICAgIHJldHVybiB0b3VjaE1hcFt2YWxdID0gY3NzU3VwcG9ydHMgPyB3aW4uQ1NTLnN1cHBvcnRzKCd0b3VjaC1hY3Rpb24nLCB2YWwpIDogdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiB0b3VjaE1hcDtcbn1cblxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG5cbnZhciBUT1VDSF9BQ1RJT05fTk9ORSA9ICdub25lJztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1ggPSAncGFuLXgnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWSA9ICdwYW4teSc7XG52YXIgVE9VQ0hfQUNUSU9OX01BUCA9IGdldFRvdWNoQWN0aW9uUHJvcHMoKTtcblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcbnZhciBTVVBQT1JUX1RPVUNIID0gJ29udG91Y2hzdGFydCcgaW4gd2luO1xudmFyIFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMgPSBwcmVmaXhlZCh3aW4sICdQb2ludGVyRXZlbnQnKSAhPT0gdW5kZWZpbmVkO1xudmFyIFNVUFBPUlRfT05MWV9UT1VDSCA9IFNVUFBPUlRfVE9VQ0ggJiYgTU9CSUxFX1JFR0VYLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xudmFyIENPTVBVVEVfSU5URVJWQUwgPSAyNTtcbnZhciBJTlBVVF9TVEFSVCA9IDE7XG52YXIgSU5QVVRfTU9WRSA9IDI7XG52YXIgSU5QVVRfRU5EID0gNDtcbnZhciBJTlBVVF9DQU5DRUwgPSA4O1xudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG52YXIgRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fTEVGVCB8IERJUkVDVElPTl9SSUdIVDtcbnZhciBESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVVAgfCBESVJFQ1RJT05fRE9XTjtcbnZhciBESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUw7XG52YXIgUFJPUFNfWFkgPSBbJ3gnLCAneSddO1xudmFyIFBST1BTX0NMSUVOVF9YWSA9IFsnY2xpZW50WCcsICdjbGllbnRZJ107XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdhbGsgb2JqZWN0cyBhbmQgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gIHZhciBpO1xuXG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9iai5mb3JFYWNoKSB7XG4gICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICB9IGVsc2UgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBvYmoubGVuZ3RoKSB7XG4gICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpIGluIG9iaikge1xuICAgICAgb2JqLmhhc093blByb3BlcnR5KGkpICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBsZXQgYSBib29sZWFuIHZhbHVlIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IG11c3QgcmV0dXJuIGEgYm9vbGVhblxuICogdGhpcyBmaXJzdCBpdGVtIGluIGFyZ3Mgd2lsbCBiZSB1c2VkIGFzIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IHZhbFxuICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFRZUEVfRlVOQ1RJT04pIHtcbiAgICByZXR1cm4gdmFsLmFwcGx5KGFyZ3MgPyBhcmdzWzBdIHx8IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzbWFsbCBpbmRleE9mIHdyYXBwZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaW5TdHIoc3RyLCBmaW5kKSB7XG4gIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3aGVuIHRoZSB0b3VjaEFjdGlvbnMgYXJlIGNvbGxlY3RlZCB0aGV5IGFyZSBub3QgYSB2YWxpZCB2YWx1ZSwgc28gd2UgbmVlZCB0byBjbGVhbiB0aGluZ3MgdXAuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuXG5mdW5jdGlvbiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zKSB7XG4gIC8vIG5vbmVcbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfVxuXG4gIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpOyAvLyBpZiBib3RoIHBhbi14IGFuZCBwYW4teSBhcmUgc2V0IChkaWZmZXJlbnQgcmVjb2duaXplcnNcbiAgLy8gZm9yIGRpZmZlcmVudCBkaXJlY3Rpb25zLCBlLmcuIGhvcml6b250YWwgcGFuIGJ1dCB2ZXJ0aWNhbCBzd2lwZT8pXG4gIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAvLyByZWNvZ25pemVycyB3aWxsIHdvcmssIHNpbmNlIHRoZSBicm93c2VyIHdvdWxkIGhhbmRsZSBhbGwgcGFubmluZ1xuXG4gIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH0gLy8gcGFuLXggT1IgcGFuLXlcblxuXG4gIGlmIChoYXNQYW5YIHx8IGhhc1BhblkpIHtcbiAgICByZXR1cm4gaGFzUGFuWCA/IFRPVUNIX0FDVElPTl9QQU5fWCA6IFRPVUNIX0FDVElPTl9QQU5fWTtcbiAgfSAvLyBtYW5pcHVsYXRpb25cblxuXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OO1xuICB9XG5cbiAgcmV0dXJuIFRPVUNIX0FDVElPTl9BVVRPO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBBY3Rpb25cbiAqIHNldHMgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IG9yIHVzZXMgdGhlIGpzIGFsdGVybmF0aXZlXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIFRvdWNoQWN0aW9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG91Y2hBY3Rpb24obWFuYWdlciwgdmFsdWUpIHtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2V0KHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaEFjdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIGZpbmQgb3V0IHRoZSB0b3VjaC1hY3Rpb24gYnkgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKHZhbHVlID09PSBUT1VDSF9BQ1RJT05fQ09NUFVURSkge1xuICAgICAgdmFsdWUgPSB0aGlzLmNvbXB1dGUoKTtcbiAgICB9XG5cbiAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICoganVzdCByZS1zZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjb21wdXRlIHRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IGJhc2VkIG9uIHRoZSByZWNvZ25pemVyJ3Mgc2V0dGluZ3NcbiAgICogQHJldHVybnMge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8uY29tcHV0ZSA9IGZ1bmN0aW9uIGNvbXB1dGUoKSB7XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICBlYWNoKHRoaXMubWFuYWdlci5yZWNvZ25pemVycywgZnVuY3Rpb24gKHJlY29nbml6ZXIpIHtcbiAgICAgIGlmIChib29sT3JGbihyZWNvZ25pemVyLm9wdGlvbnMuZW5hYmxlLCBbcmVjb2duaXplcl0pKSB7XG4gICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zLmpvaW4oJyAnKSk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gZWFjaCBpbnB1dCBjeWNsZSBhbmQgcHJvdmlkZXMgdGhlIHByZXZlbnRpbmcgb2YgdGhlIGJyb3dzZXIgYmVoYXZpb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnREZWZhdWx0cyA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhpbnB1dCkge1xuICAgIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5vZmZzZXREaXJlY3Rpb247IC8vIGlmIHRoZSB0b3VjaCBhY3Rpb24gZGlkIHByZXZlbnRlZCBvbmNlIHRoaXMgc2Vzc2lvblxuXG4gICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWV07XG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWF07XG5cbiAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgLy8gZG8gbm90IHByZXZlbnQgZGVmYXVsdHMgaWYgdGhpcyBpcyBhIHRhcCBnZXN0dXJlXG4gICAgICB2YXIgaXNUYXBQb2ludGVyID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSAxO1xuICAgICAgdmFyIGlzVGFwTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IDI7XG4gICAgICB2YXIgaXNUYXBUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCAyNTA7XG5cbiAgICAgIGlmIChpc1RhcFBvaW50ZXIgJiYgaXNUYXBNb3ZlbWVudCAmJiBpc1RhcFRvdWNoVGltZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgLy8gYHBhbi14IHBhbi15YCBtZWFucyBicm93c2VyIGhhbmRsZXMgYWxsIHNjcm9sbGluZy9wYW5uaW5nLCBkbyBub3QgcHJldmVudFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChoYXNOb25lIHx8IGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwgfHwgaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZlbnRTcmMoc3JjRXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGwgcHJldmVudERlZmF1bHQgdG8gcHJldmVudCB0aGUgYnJvd3NlcidzIGRlZmF1bHQgYmVoYXZpb3IgKHNjcm9sbGluZyBpbiBtb3N0IGNhc2VzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudFNyYyA9IGZ1bmN0aW9uIHByZXZlbnRTcmMoc3JjRXZlbnQpIHtcbiAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoQWN0aW9uO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBjZW50ZXIgb2YgYWxsIHRoZSBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gcG9pbnRlcnNcbiAqIEByZXR1cm4ge09iamVjdH0gY2VudGVyIGNvbnRhaW5zIGB4YCBhbmQgYHlgIHByb3BlcnRpZXNcbiAqL1xuXG5mdW5jdGlvbiBnZXRDZW50ZXIocG9pbnRlcnMpIHtcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBubyBuZWVkIHRvIGxvb3Agd2hlbiBvbmx5IG9uZSB0b3VjaFxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgfTtcbiAgfVxuXG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgIHggKz0gcG9pbnRlcnNbaV0uY2xpZW50WDtcbiAgICB5ICs9IHBvaW50ZXJzW2ldLmNsaWVudFk7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4IC8gcG9pbnRlcnNMZW5ndGgpLFxuICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIGEgc2ltcGxlIGNsb25lIGZyb20gdGhlIGlucHV0IHVzZWQgZm9yIHN0b3JhZ2Ugb2YgZmlyc3RJbnB1dCBhbmQgZmlyc3RNdWx0aXBsZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBjbG9uZWRJbnB1dERhdGFcbiAqL1xuXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAvLyBtYWtlIGEgc2ltcGxlIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgYSByZWZlcmVuY2UgaWYgd2UgZG9uJ3RcbiAgLy8gd2Ugb25seSBuZWVkIGNsaWVudFhZIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gIHZhciBwb2ludGVycyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBpbnB1dC5wb2ludGVycy5sZW5ndGgpIHtcbiAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICB9O1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGltZVN0YW1wOiBub3coKSxcbiAgICBwb2ludGVyczogcG9pbnRlcnMsXG4gICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgIGRlbHRhWDogaW5wdXQuZGVsdGFYLFxuICAgIGRlbHRhWTogaW5wdXQuZGVsdGFZXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gcDEge3gsIHl9XG4gKiBAcGFyYW0ge09iamVjdH0gcDIge3gsIHl9XG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIHR3byBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IHAxXG4gKiBAcGFyYW0ge09iamVjdH0gcDJcbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRBbmdsZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KSAqIDE4MCAvIE1hdGguUEk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgZGlyZWN0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpcmVjdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICB9XG5cbiAgaWYgKGFicyh4KSA+PSBhYnMoeSkpIHtcbiAgICByZXR1cm4geCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgfVxuXG4gIHJldHVybiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyOyAvLyBsZXQgeyBvZmZzZXREZWx0YTpvZmZzZXQgPSB7fSwgcHJldkRlbHRhID0ge30sIHByZXZJbnB1dCA9IHt9IH0gPSBzZXNzaW9uO1xuICAvLyBqc2NzIHRocm93aW5nIGVycm9yIG9uIGRlZmFsdXQgZGVzdHJ1Y3R1cmVkIHZhbHVlcyBhbmQgd2l0aG91dCBkZWZhdWx0cyB0ZXN0cyBmYWlsXG5cbiAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gIHZhciBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZJbnB1dCA9IHNlc3Npb24ucHJldklucHV0IHx8IHt9O1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhID0ge1xuICAgICAgeDogcHJldklucHV0LmRlbHRhWCB8fCAwLFxuICAgICAgeTogcHJldklucHV0LmRlbHRhWSB8fCAwXG4gICAgfTtcbiAgICBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhID0ge1xuICAgICAgeDogY2VudGVyLngsXG4gICAgICB5OiBjZW50ZXIueVxuICAgIH07XG4gIH1cblxuICBpbnB1dC5kZWx0YVggPSBwcmV2RGVsdGEueCArIChjZW50ZXIueCAtIG9mZnNldC54KTtcbiAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgeTogeSAvIGRlbHRhVGltZSB8fCAwXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgc2NhbGUgZmFjdG9yIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBubyBzY2FsZSBpcyAxLCBhbmQgZ29lcyBkb3duIHRvIDAgd2hlbiBwaW5jaGVkIHRvZ2V0aGVyLCBhbmQgYmlnZ2VyIHdoZW4gcGluY2hlZCBvdXRcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gc2NhbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRTY2FsZShzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXREaXN0YW5jZShlbmRbMF0sIGVuZFsxXSwgUFJPUFNfQ0xJRU5UX1hZKSAvIGdldERpc3RhbmNlKHN0YXJ0WzBdLCBzdGFydFsxXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSByb3RhdGlvbiBkZWdyZWVzIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHJvdGF0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0QW5nbGUoZW5kWzFdLCBlbmRbMF0sIFBST1BTX0NMSUVOVF9YWSkgKyBnZXRBbmdsZShzdGFydFsxXSwgc3RhcnRbMF0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHZlbG9jaXR5IGlzIGNhbGN1bGF0ZWQgZXZlcnkgeCBtc1xuICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgbGFzdCA9IHNlc3Npb24ubGFzdEludGVydmFsIHx8IGlucHV0O1xuICB2YXIgZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gbGFzdC50aW1lU3RhbXA7XG4gIHZhciB2ZWxvY2l0eTtcbiAgdmFyIHZlbG9jaXR5WDtcbiAgdmFyIHZlbG9jaXR5WTtcbiAgdmFyIGRpcmVjdGlvbjtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9DQU5DRUwgJiYgKGRlbHRhVGltZSA+IENPTVBVVEVfSU5URVJWQUwgfHwgbGFzdC52ZWxvY2l0eSA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHZhciBkZWx0YVggPSBpbnB1dC5kZWx0YVggLSBsYXN0LmRlbHRhWDtcbiAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG4gICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICB2ZWxvY2l0eVggPSB2Lng7XG4gICAgdmVsb2NpdHlZID0gdi55O1xuICAgIHZlbG9jaXR5ID0gYWJzKHYueCkgPiBhYnModi55KSA/IHYueCA6IHYueTtcbiAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgIHZlbG9jaXR5ID0gbGFzdC52ZWxvY2l0eTtcbiAgICB2ZWxvY2l0eVggPSBsYXN0LnZlbG9jaXR5WDtcbiAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICBkaXJlY3Rpb24gPSBsYXN0LmRpcmVjdGlvbjtcbiAgfVxuXG4gIGlucHV0LnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIGlucHV0LnZlbG9jaXR5WCA9IHZlbG9jaXR5WDtcbiAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG59XG5cbi8qKlxuKiBAcHJpdmF0ZVxuICogZXh0ZW5kIHRoZSBkYXRhIHdpdGggc29tZSB1c2FibGUgcHJvcGVydGllcyBsaWtlIHNjYWxlLCByb3RhdGUsIHZlbG9jaXR5IGV0Y1xuICogQHBhcmFtIHtPYmplY3R9IG1hbmFnZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpIHtcbiAgdmFyIHNlc3Npb24gPSBtYW5hZ2VyLnNlc3Npb247XG4gIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cblxuICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgIHNlc3Npb24uZmlyc3RJbnB1dCA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSAvLyB0byBjb21wdXRlIHNjYWxlIGFuZCByb3RhdGlvbiB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBtdWx0aXBsZSB0b3VjaGVzXG5cblxuICBpZiAocG9pbnRlcnNMZW5ndGggPiAxICYmICFzZXNzaW9uLmZpcnN0TXVsdGlwbGUpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gZWxzZSBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBmaXJzdElucHV0ID0gc2Vzc2lvbi5maXJzdElucHV0LFxuICAgICAgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgdmFyIG9mZnNldENlbnRlciA9IGZpcnN0TXVsdGlwbGUgPyBmaXJzdE11bHRpcGxlLmNlbnRlciA6IGZpcnN0SW5wdXQuY2VudGVyO1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgaW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gIGlucHV0LmRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGZpcnN0SW5wdXQudGltZVN0YW1wO1xuICBpbnB1dC5hbmdsZSA9IGdldEFuZ2xlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgaW5wdXQuZGlzdGFuY2UgPSBnZXREaXN0YW5jZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KTtcbiAgaW5wdXQub2Zmc2V0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgdmFyIG92ZXJhbGxWZWxvY2l0eSA9IGdldFZlbG9jaXR5KGlucHV0LmRlbHRhVGltZSwgaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYID0gb3ZlcmFsbFZlbG9jaXR5Lng7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5ID0gYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkgPyBvdmVyYWxsVmVsb2NpdHkueCA6IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5zY2FsZSA9IGZpcnN0TXVsdGlwbGUgPyBnZXRTY2FsZShmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAxO1xuICBpbnB1dC5yb3RhdGlvbiA9IGZpcnN0TXVsdGlwbGUgPyBnZXRSb3RhdGlvbihmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAwO1xuICBpbnB1dC5tYXhQb2ludGVycyA9ICFzZXNzaW9uLnByZXZJbnB1dCA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA+IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnM7XG4gIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCk7IC8vIGZpbmQgdGhlIGNvcnJlY3QgdGFyZ2V0XG5cbiAgdmFyIHRhcmdldCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gIHZhciBzcmNFdmVudFRhcmdldDtcblxuICBpZiAoc3JjRXZlbnQuY29tcG9zZWRQYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5jb21wb3NlZFBhdGgoKVswXTtcbiAgfSBlbHNlIGlmIChzcmNFdmVudC5wYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5wYXRoWzBdO1xuICB9IGVsc2Uge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgaWYgKGhhc1BhcmVudChzcmNFdmVudFRhcmdldCwgdGFyZ2V0KSkge1xuICAgIHRhcmdldCA9IHNyY0V2ZW50VGFyZ2V0O1xuICB9XG5cbiAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBoYW5kbGUgaW5wdXQgZXZlbnRzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gIHZhciBwb2ludGVyc0xlbiA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGNoYW5nZWRQb2ludGVyc0xlbiA9IGlucHV0LmNoYW5nZWRQb2ludGVycy5sZW5ndGg7XG4gIHZhciBpc0ZpcnN0ID0gZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIHZhciBpc0ZpbmFsID0gZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIGlucHV0LmlzRmlyc3QgPSAhIWlzRmlyc3Q7XG4gIGlucHV0LmlzRmluYWwgPSAhIWlzRmluYWw7XG5cbiAgaWYgKGlzRmlyc3QpIHtcbiAgICBtYW5hZ2VyLnNlc3Npb24gPSB7fTtcbiAgfSAvLyBzb3VyY2UgZXZlbnQgaXMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2YgdGhlIGRvbUV2ZW50c1xuICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcblxuXG4gIGlucHV0LmV2ZW50VHlwZSA9IGV2ZW50VHlwZTsgLy8gY29tcHV0ZSBzY2FsZSwgcm90YXRpb24gZXRjXG5cbiAgY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCk7IC8vIGVtaXQgc2VjcmV0IGV2ZW50XG5cbiAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG4gIG1hbmFnZXIucmVjb2duaXplKGlucHV0KTtcbiAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzcGxpdCBzdHJpbmcgb24gd2hpdGVzcGFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge0FycmF5fSB3b3Jkc1xuICovXG5mdW5jdGlvbiBzcGxpdFN0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltKCkuc3BsaXQoL1xccysvZyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZEV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZWxlbWVudDtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93IHx8IHdpbmRvdztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIElucHV0KG1hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICB0aGlzLnRhcmdldCA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dFRhcmdldDsgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuXG4gICAgdGhpcy5kb21IYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICBpZiAoYm9vbE9yRm4obWFuYWdlci5vcHRpb25zLmVuYWJsZSwgW21hbmFnZXJdKSkge1xuICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2hvdWxkIGhhbmRsZSB0aGUgaW5wdXRFdmVudCBkYXRhIGFuZCB0cmlnZ2VyIHRoZSBjYWxsYmFja1xuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5ldkVsICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiBhZGRFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4gSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICBpZiAoc3JjLmluZGV4T2YgJiYgIWZpbmRCeUtleSkge1xuICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgIGlmIChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCB8fCAhZmluZEJ5S2V5ICYmIHNyY1tpXSA9PT0gZmluZCkge1xuICAgICAgICAvLyBkbyBub3QgdXNlID09PSBoZXJlLCB0ZXN0IGZhaWxzXG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgcG9pbnRlcmRvd246IElOUFVUX1NUQVJULFxuICBwb2ludGVybW92ZTogSU5QVVRfTU9WRSxcbiAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gIHBvaW50ZXJjYW5jZWw6IElOUFVUX0NBTkNFTCxcbiAgcG9pbnRlcm91dDogSU5QVVRfQ0FOQ0VMXG59OyAvLyBpbiBJRTEwIHRoZSBwb2ludGVyIHR5cGVzIGlzIGRlZmluZWQgYXMgYW4gZW51bVxuXG52YXIgSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSA9IHtcbiAgMjogSU5QVVRfVFlQRV9UT1VDSCxcbiAgMzogSU5QVVRfVFlQRV9QRU4sXG4gIDQ6IElOUFVUX1RZUEVfTU9VU0UsXG4gIDU6IElOUFVUX1RZUEVfS0lORUNUIC8vIHNlZSBodHRwczovL3R3aXR0ZXIuY29tL2phY29icm9zc2kvc3RhdHVzLzQ4MDU5NjQzODQ4OTg5MDgxNlxuXG59O1xudmFyIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAncG9pbnRlcmRvd24nO1xudmFyIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdwb2ludGVybW92ZSBwb2ludGVydXAgcG9pbnRlcmNhbmNlbCc7IC8vIElFMTAgaGFzIHByZWZpeGVkIHN1cHBvcnQsIGFuZCBjYXNlLXNlbnNpdGl2ZVxuXG5pZiAod2luLk1TUG9pbnRlckV2ZW50ICYmICF3aW4uUG9pbnRlckV2ZW50KSB7XG4gIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAnTVNQb2ludGVyRG93bic7XG4gIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBQb2ludGVyIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cblxudmFyIFBvaW50ZXJFdmVudElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUG9pbnRlckV2ZW50SW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdG9yZSA9IF90aGlzLm1hbmFnZXIuc2Vzc2lvbi5wb2ludGVyRXZlbnRzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZhbHNlO1xuICAgIHZhciBldmVudFR5cGVOb3JtYWxpemVkID0gZXYudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ21zJywgJycpO1xuICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICB2YXIgcG9pbnRlclR5cGUgPSBJRTEwX1BPSU5URVJfVFlQRV9FTlVNW2V2LnBvaW50ZXJUeXBlXSB8fCBldi5wb2ludGVyVHlwZTtcbiAgICB2YXIgaXNUb3VjaCA9IHBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIOyAvLyBnZXQgaW5kZXggb2YgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG4gICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTsgLy8gc3RhcnQgYW5kIG1vdXNlIG11c3QgYmUgZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChldi5idXR0b24gPT09IDAgfHwgaXNUb3VjaCkpIHtcbiAgICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgc3RvcmVJbmRleCA9IHN0b3JlLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgfSAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcblxuXG4gICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG5cbiAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuXG4gICAgaWYgKHJlbW92ZVBvaW50ZXIpIHtcbiAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBzdG9yZVxuICAgICAgc3RvcmUuc3BsaWNlKHN0b3JlSW5kZXgsIDEpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUG9pbnRlckV2ZW50SW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaiwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHVuaXF1ZSBhcnJheSB3aXRoIG9iamVjdHMgYmFzZWQgb24gYSBrZXkgKGxpa2UgJ2lkJykgb3IganVzdCBieSB0aGUgYXJyYXkncyB2YWx1ZVxuICogQHBhcmFtIHtBcnJheX0gc3JjIFt7aWQ6MX0se2lkOjJ9LHtpZDoxfV1cbiAqIEBwYXJhbSB7U3RyaW5nfSBba2V5XVxuICogQHBhcmFtIHtCb29sZWFufSBbc29ydD1GYWxzZV1cbiAqIEByZXR1cm5zIHtBcnJheX0gW3tpZDoxfSx7aWQ6Mn1dXG4gKi9cblxuZnVuY3Rpb24gdW5pcXVlQXJyYXkoc3JjLCBrZXksIHNvcnQpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgdmFyIHZhbCA9IGtleSA/IHNyY1tpXVtrZXldIDogc3JjW2ldO1xuXG4gICAgaWYgKGluQXJyYXkodmFsdWVzLCB2YWwpIDwgMCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHNyY1tpXSk7XG4gICAgfVxuXG4gICAgdmFsdWVzW2ldID0gdmFsO1xuICAgIGkrKztcbiAgfVxuXG4gIGlmIChzb3J0KSB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYVtrZXldID4gYltrZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNdWx0aS11c2VyIHRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIFRvdWNoSW5wdXQucHJvdG90eXBlLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMudGFyZ2V0SWRzID0ge307IC8vIHRoaXMuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgIHZhciB0b3VjaGVzID0gZ2V0VG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTtcblxuICAgIGlmICghdG91Y2hlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gZ2V0VG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciB0YXJnZXRJZHMgPSB0aGlzLnRhcmdldElkczsgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcblxuICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgdGFyZ2V0SWRzW2FsbFRvdWNoZXNbMF0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgIHJldHVybiBbYWxsVG91Y2hlcywgYWxsVG91Y2hlc107XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIHRhcmdldFRvdWNoZXM7XG4gIHZhciBjaGFuZ2VkVG91Y2hlcyA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXTtcbiAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0OyAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG5cbiAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uICh0b3VjaCkge1xuICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICB9KTsgLy8gY29sbGVjdCB0b3VjaGVzXG5cbiAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICBpKys7XG4gICAgfVxuICB9IC8vIGZpbHRlciBjaGFuZ2VkIHRvdWNoZXMgdG8gb25seSBjb250YWluIHRvdWNoZXMgdGhhdCBleGlzdCBpbiB0aGUgY29sbGVjdGVkIHRhcmdldCBpZHNcblxuXG4gIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgY2hhbmdlZFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgfSAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIGlmICghY2hhbmdlZFRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIFsvLyBtZXJnZSB0YXJnZXRUb3VjaGVzIHdpdGggY2hhbmdlZFRhcmdldFRvdWNoZXMgc28gaXQgY29udGFpbnMgQUxMIHRvdWNoZXMsIGluY2x1ZGluZyAnZW5kJyBhbmQgJ2NhbmNlbCdcbiAgdW5pcXVlQXJyYXkodGFyZ2V0VG91Y2hlcy5jb25jYXQoY2hhbmdlZFRhcmdldFRvdWNoZXMpLCAnaWRlbnRpZmllcicsIHRydWUpLCBjaGFuZ2VkVGFyZ2V0VG91Y2hlc107XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gIG1vdXNlZG93bjogSU5QVVRfU1RBUlQsXG4gIG1vdXNlbW92ZTogSU5QVVRfTU9WRSxcbiAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xudmFyIE1PVVNFX0VMRU1FTlRfRVZFTlRTID0gJ21vdXNlZG93bic7XG52YXIgTU9VU0VfV0lORE9XX0VWRU5UUyA9ICdtb3VzZW1vdmUgbW91c2V1cCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gTU9VU0VfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBNT1VTRV9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5wcmVzc2VkID0gZmFsc2U7IC8vIG1vdXNlZG93biBzdGF0ZVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBvbiBzdGFydCB3ZSB3YW50IHRvIGhhdmUgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX01PVkUgJiYgZXYud2hpY2ggIT09IDEpIHtcbiAgICAgIGV2ZW50VHlwZSA9IElOUFVUX0VORDtcbiAgICB9IC8vIG1vdXNlIG11c3QgYmUgZG93blxuXG5cbiAgICBpZiAoIXRoaXMucHJlc3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTW91c2VJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDb21iaW5lZCB0b3VjaCBhbmQgbW91c2UgaW5wdXRcbiAqXG4gKiBUb3VjaCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhlbiBtb3VzZSwgYW5kIHdoaWxlIHRvdWNoaW5nIG5vIG1vdXNlIGV2ZW50cyBhcmUgYWxsb3dlZC5cbiAqIFRoaXMgYmVjYXVzZSB0b3VjaCBkZXZpY2VzIGFsc28gZW1pdCBtb3VzZSBldmVudHMgd2hpbGUgZG9pbmcgYSB0b3VjaC5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIERFRFVQX1RJTUVPVVQgPSAyNTAwO1xudmFyIERFRFVQX0RJU1RBTkNFID0gMjU7XG5cbmZ1bmN0aW9uIHNldExhc3RUb3VjaChldmVudERhdGEpIHtcbiAgdmFyIF9ldmVudERhdGEkY2hhbmdlZFBvaSA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnMsXG4gICAgICB0b3VjaCA9IF9ldmVudERhdGEkY2hhbmdlZFBvaVswXTtcblxuICBpZiAodG91Y2guaWRlbnRpZmllciA9PT0gdGhpcy5wcmltYXJ5VG91Y2gpIHtcbiAgICB2YXIgbGFzdFRvdWNoID0ge1xuICAgICAgeDogdG91Y2guY2xpZW50WCxcbiAgICAgIHk6IHRvdWNoLmNsaWVudFlcbiAgICB9O1xuICAgIHZhciBsdHMgPSB0aGlzLmxhc3RUb3VjaGVzO1xuICAgIHRoaXMubGFzdFRvdWNoZXMucHVzaChsYXN0VG91Y2gpO1xuXG4gICAgdmFyIHJlbW92ZUxhc3RUb3VjaCA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RUb3VjaCgpIHtcbiAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcblxuICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICB2YXIgeCA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRYO1xuICB2YXIgeSA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRZO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYXN0VG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0ID0gdGhpcy5sYXN0VG91Y2hlc1tpXTtcbiAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KTtcbiAgICB2YXIgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcblxuICAgIGlmIChkeCA8PSBERURVUF9ESVNUQU5DRSAmJiBkeSA8PSBERURVUF9ESVNUQU5DRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgVG91Y2hNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIFRvdWNoTW91c2VJbnB1dCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9JbnB1dCkge1xuICAgIF9pbmhlcml0c0xvb3NlKFRvdWNoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICAgIGZ1bmN0aW9uIFRvdWNoTW91c2VJbnB1dChfbWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfSW5wdXQuY2FsbCh0aGlzLCBfbWFuYWdlciwgY2FsbGJhY2spIHx8IHRoaXM7XG5cbiAgICAgIF90aGlzLmhhbmRsZXIgPSBmdW5jdGlvbiAobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIO1xuICAgICAgICB2YXIgaXNNb3VzZSA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9NT1VTRTtcblxuICAgICAgICBpZiAoaXNNb3VzZSAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuXG5cbiAgICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgICByZWNvcmRUb3VjaGVzLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RGF0YSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLm1vdXNlID0gbmV3IE1vdXNlSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgICAgX3RoaXMubGFzdFRvdWNoZXMgPSBbXTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBoYW5kbGUgbW91c2UgYW5kIHRvdWNoIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0RXZlbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb3VjaE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgdGhpcy5tb3VzZS5kZXN0cm95KCk7XG4gICAgfTtcblxuICAgIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG4gIH0oSW5wdXQpO1xuXG4gIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBjYWxsZWQgYnkgdGhlIE1hbmFnZXIgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gIHZhciBUeXBlOyAvLyBsZXQgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIHZhciBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgaWYgKGlucHV0Q2xhc3MpIHtcbiAgICBUeXBlID0gaW5wdXRDbGFzcztcbiAgfSBlbHNlIGlmIChTVVBQT1JUX1BPSU5URVJfRVZFTlRTKSB7XG4gICAgVHlwZSA9IFBvaW50ZXJFdmVudElucHV0O1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfT05MWV9UT1VDSCkge1xuICAgIFR5cGUgPSBUb3VjaElucHV0O1xuICB9IGVsc2UgaWYgKCFTVVBQT1JUX1RPVUNIKSB7XG4gICAgVHlwZSA9IE1vdXNlSW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgVHlwZSA9IFRvdWNoTW91c2VJbnB1dDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZm4gb24gZWFjaCBlbnRyeVxuICogaWYgaXQgYWludCBhbiBhcnJheSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGhpbmcuXG4gKiB0aGlzIGlzIHVzZWQgYnkgYWxsIHRoZSBtZXRob2RzIHRoYXQgYWNjZXB0IGEgc2luZ2xlIGFuZCBhcnJheSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7KnxBcnJheX0gYXJnXG4gKiBAcGFyYW0ge1N0cmluZ30gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGludm9rZUFycmF5QXJnKGFyZywgZm4sIGNvbnRleHQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIGVhY2goYXJnLCBjb250ZXh0W2ZuXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVuaXF1ZSBpZFxuICogQHJldHVybnMge251bWJlcn0gdW5pcXVlSWRcbiAqL1xudmFyIF91bmlxdWVJZCA9IDE7XG5mdW5jdGlvbiB1bmlxdWVJZCgpIHtcbiAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSByZWNvZ25pemVyIGJ5IG5hbWUgaWYgaXQgaXMgYm91bmQgdG8gYSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSBvdGhlclJlY29nbml6ZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICogQHJldHVybnMge1JlY29nbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCByZWNvZ25pemVyKSB7XG4gIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuXG4gIGlmIChtYW5hZ2VyKSB7XG4gICAgcmV0dXJuIG1hbmFnZXIuZ2V0KG90aGVyUmVjb2duaXplcik7XG4gIH1cblxuICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1c2FibGUgc3RyaW5nLCB1c2VkIGFzIGV2ZW50IHBvc3RmaXhcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IHN0YXRlXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdGF0ZVxuICovXG5cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gIGlmIChzdGF0ZSAmIFNUQVRFX0NBTkNFTExFRCkge1xuICAgIHJldHVybiAnY2FuY2VsJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0VOREVEKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQ0hBTkdFRCkge1xuICAgIHJldHVybiAnbW92ZSc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9CRUdBTikge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyIGZsb3cgZXhwbGFpbmVkOyAqXG4gKiBBbGwgcmVjb2duaXplcnMgaGF2ZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBQT1NTSUJMRSB3aGVuIGEgaW5wdXQgc2Vzc2lvbiBzdGFydHMuXG4gKiBUaGUgZGVmaW5pdGlvbiBvZiBhIGlucHV0IHNlc3Npb24gaXMgZnJvbSB0aGUgZmlyc3QgaW5wdXQgdW50aWwgdGhlIGxhc3QgaW5wdXQsIHdpdGggYWxsIGl0J3MgbW92ZW1lbnQgaW4gaXQuICpcbiAqIEV4YW1wbGUgc2Vzc2lvbiBmb3IgbW91c2UtaW5wdXQ6IG1vdXNlZG93biAtPiBtb3VzZW1vdmUgLT4gbW91c2V1cFxuICpcbiAqIE9uIGVhY2ggcmVjb2duaXppbmcgY3ljbGUgKHNlZSBNYW5hZ2VyLnJlY29nbml6ZSkgdGhlIC5yZWNvZ25pemUoKSBtZXRob2QgaXMgZXhlY3V0ZWRcbiAqIHdoaWNoIGRldGVybWluZXMgd2l0aCBzdGF0ZSBpdCBzaG91bGQgYmUuXG4gKlxuICogSWYgdGhlIHJlY29nbml6ZXIgaGFzIHRoZSBzdGF0ZSBGQUlMRUQsIENBTkNFTExFRCBvciBSRUNPR05JWkVEIChlcXVhbHMgRU5ERUQpLCBpdCBpcyByZXNldCB0b1xuICogUE9TU0lCTEUgdG8gZ2l2ZSBpdCBhbm90aGVyIGNoYW5nZSBvbiB0aGUgbmV4dCBjeWNsZS5cbiAqXG4gKiAgICAgICAgICAgICAgIFBvc3NpYmxlXG4gKiAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgKy0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgKy0tLS0tKy0tLS0tKyAgICAgICAgICAgICAgIHxcbiAqICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHxcbiAqICAgRmFpbGVkICAgICAgQ2FuY2VsbGVkICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgUmVjb2duaXplZCAgICAgICBCZWdhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kZWQvUmVjb2duaXplZFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXJcbiAqIEV2ZXJ5IHJlY29nbml6ZXIgbmVlZHMgdG8gZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuXG52YXIgUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7XG4gICAgICBlbmFibGU6IHRydWVcbiAgICB9LCBvcHRpb25zKTtcbiAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsOyAvLyBkZWZhdWx0IGlzIGVuYWJsZSB0cnVlXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgdGhpcy5zaW11bHRhbmVvdXMgPSB7fTtcbiAgICB0aGlzLnJlcXVpcmVGYWlsID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG5cbiAgICB0aGlzLm1hbmFnZXIgJiYgdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiByZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzaW11bHRhbmVvdXMgPSB0aGlzLnNpbXVsdGFuZW91cztcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoIXNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdKSB7XG4gICAgICBzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSA9IG90aGVyUmVjb2duaXplcjtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZWNvZ25pemVXaXRoKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgc2ltdWx0YW5lb3VzIGxpbmsuIGl0IGRvZXNudCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gZHJvcFJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICBkZWxldGUgdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZXIgY2FuIG9ubHkgcnVuIHdoZW4gYW4gb3RoZXIgaXMgZmFpbGluZ1xuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIHJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgcmVxdWlyZUZhaWx1cmUgbGluay4gaXQgZG9lcyBub3QgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiBkcm9wUmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgdmFyIGluZGV4ID0gaW5BcnJheSh0aGlzLnJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhcyByZXF1aXJlIGZhaWx1cmVzIGJvb2xlYW5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmhhc1JlcXVpcmVGYWlsdXJlcyA9IGZ1bmN0aW9uIGhhc1JlcXVpcmVGYWlsdXJlcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaWYgdGhlIHJlY29nbml6ZXIgY2FuIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5SZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gY2FuUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gISF0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogWW91IHNob3VsZCB1c2UgYHRyeUVtaXRgIGluc3RlYWQgb2YgYGVtaXRgIGRpcmVjdGx5IHRvIGNoZWNrXG4gICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgc2VsZi5tYW5hZ2VyLmVtaXQoZXZlbnQsIGlucHV0KTtcbiAgICB9IC8vICdwYW5zdGFydCcgYW5kICdwYW5tb3ZlJ1xuXG5cbiAgICBpZiAoc3RhdGUgPCBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cblxuICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgaWYgKGlucHV0LmFkZGl0aW9uYWxFdmVudCkge1xuICAgICAgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgfSAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuXG5cbiAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAqIGlmIHRydWUsIGl0IGVtaXRzIGEgZ2VzdHVyZSBldmVudCxcbiAgICogb3RoZXJ3aXNlLCBzZXR1cCB0aGUgc3RhdGUgdG8gRkFJTEVELlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8udHJ5RW1pdCA9IGZ1bmN0aW9uIHRyeUVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgIH0gLy8gaXQncyBmYWlsaW5nIGFueXdheVxuXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FuIHdlIGVtaXQ/XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5FbWl0ID0gZnVuY3Rpb24gY2FuRW1pdCgpIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoKSB7XG4gICAgICBpZiAoISh0aGlzLnJlcXVpcmVGYWlsW2ldLnN0YXRlICYgKFNUQVRFX0ZBSUxFRCB8IFNUQVRFX1BPU1NJQkxFKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAvLyBzbyB3ZSBjYW4gY2hhbmdlIHRoZSBpbnB1dERhdGEgd2l0aG91dCBtZXNzaW5nIHVwIHRoZSBvdGhlciByZWNvZ25pemVyc1xuICAgIHZhciBpbnB1dERhdGFDbG9uZSA9IGFzc2lnbiQxKHt9LCBpbnB1dERhdGEpOyAvLyBpcyBpcyBlbmFibGVkIGFuZCBhbGxvdyByZWNvZ25pemluZz9cblxuICAgIGlmICghYm9vbE9yRm4odGhpcy5vcHRpb25zLmVuYWJsZSwgW3RoaXMsIGlucHV0RGF0YUNsb25lXSkpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyByZXNldCB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZFxuXG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9SRUNPR05JWkVEIHwgU1RBVEVfQ0FOQ0VMTEVEIHwgU1RBVEVfRkFJTEVEKSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpOyAvLyB0aGUgcmVjb2duaXplciBoYXMgcmVjb2duaXplZCBhIGdlc3R1cmVcbiAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCB8IFNUQVRFX0NBTkNFTExFRCkpIHtcbiAgICAgIHRoaXMudHJ5RW1pdChpbnB1dERhdGFDbG9uZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgcmVjb2duaXplclxuICAgKiB0aGUgYWN0dWFsIHJlY29nbml6aW5nIGhhcHBlbnMgaW4gdGhpcyBtZXRob2RcbiAgICogQHZpcnR1YWxcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKiBAcmV0dXJucyB7Y29uc3RhbnR9IFNUQVRFXG4gICAqL1xuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dERhdGEpIHt9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHByZWZlcnJlZCB0b3VjaC1hY3Rpb25cbiAgICogQHZpcnR1YWxcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cblxuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsZWQgd2hlbiB0aGUgZ2VzdHVyZSBpc24ndCBhbGxvd2VkIHRvIHJlY29nbml6ZVxuICAgKiBsaWtlIHdoZW4gYW5vdGhlciBpcyBiZWluZyByZWNvZ25pemVkIG9yIGl0IGlzIGRpc2FibGVkXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7fTtcblxuICByZXR1cm4gUmVjb2duaXplcjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQSB0YXAgaXMgcmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvaW5nIGEgc21hbGwgdGFwL2NsaWNrLiBNdWx0aXBsZSB0YXBzIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgb2NjdXJcbiAqIGJldHdlZW4gdGhlIGdpdmVuIGludGVydmFsIGFuZCBwb3NpdGlvbi4gVGhlIGRlbGF5IG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvZ25pemUgbXVsdGktdGFwcyB3aXRob3V0IGZpcmluZ1xuICogYSBzaW5nbGUgdGFwLlxuICpcbiAqIFRoZSBldmVudERhdGEgZnJvbSB0aGUgZW1pdHRlZCBldmVudCBjb250YWlucyB0aGUgcHJvcGVydHkgYHRhcENvdW50YCwgd2hpY2ggY29udGFpbnMgdGhlIGFtb3VudCBvZlxuICogbXVsdGktdGFwcyBiZWluZyByZWNvZ25pemVkLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFRhcFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFRhcFJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBUYXBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAndGFwJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGFwczogMSxcbiAgICAgIGludGVydmFsOiAzMDAsXG4gICAgICAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgdGltZTogMjUwLFxuICAgICAgLy8gbWF4IHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgZG93biAobGlrZSBmaW5nZXIgb24gdGhlIHNjcmVlbilcbiAgICAgIHRocmVzaG9sZDogOSxcbiAgICAgIC8vIGEgbWluaW1hbCBtb3ZlbWVudCBpcyBvaywgYnV0IGtlZXAgaXQgbG93XG4gICAgICBwb3NUaHJlc2hvbGQ6IDEwXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7IC8vIHByZXZpb3VzIHRpbWUgYW5kIGNlbnRlcixcbiAgICAvLyB1c2VkIGZvciB0YXAgY291bnRpbmdcblxuICAgIF90aGlzLnBUaW1lID0gZmFsc2U7XG4gICAgX3RoaXMucENlbnRlciA9IGZhbHNlO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICBfdGhpcy5jb3VudCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRhcFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTl07XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiB0aGlzLmNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgIH0gLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cblxuICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsaWRJbnRlcnZhbCA9IHRoaXMucFRpbWUgPyBpbnB1dC50aW1lU3RhbXAgLSB0aGlzLnBUaW1lIDwgb3B0aW9ucy5pbnRlcnZhbCA6IHRydWU7XG4gICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG4gICAgICB0aGlzLnBUaW1lID0gaW5wdXQudGltZVN0YW1wO1xuICAgICAgdGhpcy5wQ2VudGVyID0gaW5wdXQuY2VudGVyO1xuXG4gICAgICBpZiAoIXZhbGlkTXVsdGlUYXAgfHwgIXZhbGlkSW50ZXJ2YWwpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG5cbiAgICAgIHZhciB0YXBDb3VudCA9IHRoaXMuY291bnQgJSBvcHRpb25zLnRhcHM7XG5cbiAgICAgIGlmICh0YXBDb3VudCA9PT0gMCkge1xuICAgICAgICAvLyBubyBmYWlsaW5nIHJlcXVpcmVtZW50cywgaW1tZWRpYXRlbHkgdHJpZ2dlciB0aGUgdGFwIGV2ZW50XG4gICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZUZhaWx1cmVzKCkpIHtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgICAgICB9LCBvcHRpb25zLmludGVydmFsKTtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5mYWlsVGltZW91dCA9IGZ1bmN0aW9uIGZhaWxUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHRoaXMuX2lucHV0LnRhcENvdW50ID0gdGhpcy5jb3VudDtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVGFwUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBBdHRyUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoQXR0clJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBBdHRyUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBBdHRyUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgcmV0dXJuIG9wdGlvblBvaW50ZXJzID09PSAwIHx8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9uUG9pbnRlcnM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHZhciBldmVudFR5cGUgPSBpbnB1dC5ldmVudFR5cGU7XG4gICAgdmFyIGlzUmVjb2duaXplZCA9IHN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCk7XG4gICAgdmFyIGlzVmFsaWQgPSB0aGlzLmF0dHJUZXN0KGlucHV0KTsgLy8gb24gY2FuY2VsIGlucHV0IGFuZCB3ZSd2ZSByZWNvZ25pemVkIGJlZm9yZSwgcmV0dXJuIFNUQVRFX0NBTkNFTExFRFxuXG4gICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgIH0gZWxzZSBpZiAoaXNSZWNvZ25pemVkIHx8IGlzVmFsaWQpIHtcbiAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgcmV0dXJuIEF0dHJSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge2NvbnN0YW50fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZGlyZWN0aW9uU3RyKGRpcmVjdGlvbikge1xuICBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fRE9XTikge1xuICAgIHJldHVybiAnZG93bic7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fVVApIHtcbiAgICByZXR1cm4gJ3VwJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgcmV0dXJuICdsZWZ0JztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9SSUdIVCkge1xuICAgIHJldHVybiAncmlnaHQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQYW5cbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGFuZCBtb3ZlZCBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBhblJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQYW5SZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBhblJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLnBYID0gbnVsbDtcbiAgICBfdGhpcy5wWSA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBhblJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciBhY3Rpb25zID0gW107XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9O1xuXG4gIF9wcm90by5kaXJlY3Rpb25UZXN0ID0gZnVuY3Rpb24gZGlyZWN0aW9uVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBoYXNNb3ZlZCA9IHRydWU7XG4gICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0LmRpcmVjdGlvbjtcbiAgICB2YXIgeCA9IGlucHV0LmRlbHRhWDtcbiAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTsgLy8gbG9jayB0byBheGlzP1xuXG4gICAgaWYgKCEoZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb24pKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICBkaXJlY3Rpb24gPSB4ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgICAgICBoYXNNb3ZlZCA9IHggIT09IHRoaXMucFg7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFYKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHkgPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG4gICAgICAgIGhhc01vdmVkID0geSAhPT0gdGhpcy5wWTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gaGFzTW92ZWQgJiYgZGlzdGFuY2UgPiBvcHRpb25zLnRocmVzaG9sZCAmJiBkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBBdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKCAvLyByZXBsYWNlIHdpdGggYSBzdXBlciBjYWxsXG4gICAgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOIHx8ICEodGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKSAmJiB0aGlzLmRpcmVjdGlvblRlc3QoaW5wdXQpKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgIHRoaXMucFkgPSBpbnB1dC5kZWx0YVk7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5kaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGFuUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTd2lwZVxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIG1vdmluZyBmYXN0ICh2ZWxvY2l0eSksIHdpdGggZW5vdWdoIGRpc3RhbmNlIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgU3dpcGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpcGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFN3aXBlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICB2ZWxvY2l0eTogMC4zLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpcGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciB2ZWxvY2l0eTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiAoRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiBkaXJlY3Rpb24gJiBpbnB1dC5vZmZzZXREaXJlY3Rpb24gJiYgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmIGlucHV0Lm1heFBvaW50ZXJzID09PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiYgYWJzKHZlbG9jaXR5KSA+IHRoaXMub3B0aW9ucy52ZWxvY2l0eSAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQ7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5vZmZzZXREaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uLCBpbnB1dCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXBlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQaW5jaFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQaW5jaFJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGluY2hSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGluY2gnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQaW5jaFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnNjYWxlIC0gMSkgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBpbmNoUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFJvdGF0ZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShSb3RhdGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdyb3RhdGUnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSb3RhdGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5yb3RhdGlvbikgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgcmV0dXJuIFJvdGF0ZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUHJlc3NcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGZvciB4IG1zIHdpdGhvdXQgYW55IG1vdmVtZW50LlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFByZXNzUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUHJlc3NSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUHJlc3NSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0aW1lOiAyNTEsXG4gICAgICAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgdGhyZXNob2xkOiA5XG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQcmVzc1JlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX0FVVE9dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cbiAgICBpZiAoIXZhbGlkTW92ZW1lbnQgfHwgIXZhbGlkUG9pbnRlcnMgfHwgaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgIH0sIG9wdGlvbnMudGltZSk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpbnB1dCAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIFwidXBcIiwgaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUHJlc3NSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IGlmIERPTSBldmVudHMgYXJlIGJlaW5nIHRyaWdnZXJlZC5cbiAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkb21FdmVudHM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICogV2hlbiBzZXQgdG8gYGNvbXB1dGVgIGl0IHdpbGwgbWFnaWNhbGx5IHNldCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgYWRkZWQgcmVjb2duaXplcnMuXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICovXG4gIHRvdWNoQWN0aW9uOiBUT1VDSF9BQ1RJT05fQ09NUFVURSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGVuYWJsZTogdHJ1ZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgKiBDaGFuZ2UgdGhlIHBhcmVudCBpbnB1dCB0YXJnZXQgZWxlbWVudC5cbiAgICogSWYgTnVsbCwgdGhlbiBpdCBpcyBiZWluZyBzZXQgdGhlIHRvIG1haW4gZWxlbWVudC5cbiAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBmb3JjZSBhbiBpbnB1dCBjbGFzc1xuICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRDbGFzczogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICogQWRkIHRoZW0gdG8gdGhpcyBtZXRob2QgYW5kIHRoZXkgd2lsbCBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyLlxuICAgKiBAbmFtZXNwYWNlXG4gICAqL1xuICBjc3NQcm9wczoge1xuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGV4dCBzZWxlY3Rpb24gdG8gaW1wcm92ZSB0aGUgZHJhZ2dpbmcgZ2VzdHVyZS4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlclNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGUgdGhlIFdpbmRvd3MgUGhvbmUgZ3JpcHBlcnMgd2hlbiBwcmVzc2luZyBhbiBlbGVtZW50LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAqIE9uIGlPUywgd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQgc3VjaCBhcyBhIGxpbmssIFNhZmFyaSBkaXNwbGF5c1xuICAgICAqIGEgY2FsbG91dCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rLiBUaGlzIHByb3BlcnR5IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGF0IGNhbGxvdXQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaENhbGxvdXQ6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB6b29taW5nIGlzIGVuYWJsZWQuIFVzZWQgYnkgSUUxMD5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIGNvbnRlbnRab29taW5nOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlckRyYWc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBPdmVycmlkZXMgdGhlIGhpZ2hsaWdodCBjb2xvciBzaG93biB3aGVuIHRoZSB1c2VyIHRhcHMgYSBsaW5rIG9yIGEgSmF2YVNjcmlwdFxuICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdyZ2JhKDAsMCwwLDApJ1xuICAgICAqL1xuICAgIHRhcEhpZ2hsaWdodENvbG9yOiBcInJnYmEoMCwwLDAsMClcIlxuICB9XG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogRGVmYXVsdCByZWNvZ25pemVyIHNldHVwIHdoZW4gY2FsbGluZyBgSGFtbWVyKClgXG4gKiBXaGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIgdGhlc2Ugd2lsbCBiZSBza2lwcGVkLlxuICogVGhpcyBpcyBzZXBhcmF0ZWQgd2l0aCBvdGhlciBkZWZhdWx0cyBiZWNhdXNlIG9mIHRyZWUtc2hha2luZy5cbiAqIEB0eXBlIHtBcnJheX1cbiAqL1xuXG52YXIgcHJlc2V0ID0gW1tSb3RhdGVSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn1dLCBbUGluY2hSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn0sIFsncm90YXRlJ11dLCBbU3dpcGVSZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn1dLCBbUGFuUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59LCBbJ3N3aXBlJ11dLCBbVGFwUmVjb2duaXplcl0sIFtUYXBSZWNvZ25pemVyLCB7XG4gIGV2ZW50OiAnZG91YmxldGFwJyxcbiAgdGFwczogMlxufSwgWyd0YXAnXV0sIFtQcmVzc1JlY29nbml6ZXJdXTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZC9yZW1vdmUgdGhlIGNzcyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gbWFuYWdlci5vcHRpb25zLmNzc1Byb3BzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWRkXG4gKi9cblxuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gIHZhciBlbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gIGlmICghZWxlbWVudC5zdHlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcm9wO1xuICBlYWNoKG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wcywgZnVuY3Rpb24gKHZhbHVlLCBuYW1lKSB7XG4gICAgcHJvcCA9IHByZWZpeGVkKGVsZW1lbnQuc3R5bGUsIG5hbWUpO1xuXG4gICAgaWYgKGFkZCkge1xuICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdIHx8IFwiXCI7XG4gICAgfVxuICB9KTtcblxuICBpZiAoIWFkZCkge1xuICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSkge1xuICB2YXIgZ2VzdHVyZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgZ2VzdHVyZUV2ZW50LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgZGF0YS50YXJnZXQuZGlzcGF0Y2hFdmVudChnZXN0dXJlRXZlbnQpO1xufVxuLyoqXG4qIEBwcml2YXRlXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG5cbnZhciBNYW5hZ2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMub3B0aW9ucyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMucmVjb2duaXplcnMgPSBbXTtcbiAgICB0aGlzLm9sZENzc1Byb3BzID0ge307XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmlucHV0ID0gY3JlYXRlSW5wdXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnRvdWNoQWN0aW9uID0gbmV3IFRvdWNoQWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG4gICAgZWFjaCh0aGlzLm9wdGlvbnMucmVjb2duaXplcnMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgcmVjb2duaXplciA9IF90aGlzLmFkZChuZXcgaXRlbVswXShpdGVtWzFdKSk7XG5cbiAgICAgIGl0ZW1bMl0gJiYgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKGl0ZW1bMl0pO1xuICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gT3B0aW9ucyB0aGF0IG5lZWQgYSBsaXR0bGUgbW9yZSBzZXR1cFxuXG4gICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc3RvcCByZWNvZ25pemluZyBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBUaGlzIHNlc3Npb24gd2lsbCBiZSBkaXNjYXJkZWQsIHdoZW4gYSBuZXcgW2lucHV0XXN0YXJ0IGV2ZW50IGlzIGZpcmVkLlxuICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VdXG4gICAqL1xuXG5cbiAgX3Byb3RvLnN0b3AgPSBmdW5jdGlvbiBzdG9wKGZvcmNlKSB7XG4gICAgdGhpcy5zZXNzaW9uLnN0b3BwZWQgPSBmb3JjZSA/IEZPUkNFRF9TVE9QIDogU1RPUDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJ1biB0aGUgcmVjb2duaXplcnMhXG4gICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICogaXQgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHJlY29nbml6ZXJzIGFuZCB0cmllcyB0byBkZXRlY3QgdGhlIGdlc3R1cmUgdGhhdCBpcyBiZWluZyBtYWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuXG4gICAgaWYgKHNlc3Npb24uc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcnVuIHRoZSB0b3VjaC1hY3Rpb24gcG9seWZpbGxcblxuXG4gICAgdGhpcy50b3VjaEFjdGlvbi5wcmV2ZW50RGVmYXVsdHMoaW5wdXREYXRhKTtcbiAgICB2YXIgcmVjb2duaXplcjtcbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzOyAvLyB0aGlzIGhvbGRzIHRoZSByZWNvZ25pemVyIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAvLyBzbyB0aGUgcmVjb2duaXplcidzIHN0YXRlIG5lZWRzIHRvIGJlIEJFR0FOLCBDSEFOR0VELCBFTkRFRCBvciBSRUNPR05JWkVEXG4gICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuXG4gICAgdmFyIGN1clJlY29nbml6ZXIgPSBzZXNzaW9uLmN1clJlY29nbml6ZXI7IC8vIHJlc2V0IHdoZW4gdGhlIGxhc3QgcmVjb2duaXplciBpcyByZWNvZ25pemVkXG4gICAgLy8gb3Igd2hlbiB3ZSdyZSBpbiBhIG5ldyBzZXNzaW9uXG5cbiAgICBpZiAoIWN1clJlY29nbml6ZXIgfHwgY3VyUmVjb2duaXplciAmJiBjdXJSZWNvZ25pemVyLnN0YXRlICYgU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICAgIGN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07IC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG5cbiAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQgIT09IEZPUkNFRF9TVE9QICYmICggLy8gMVxuICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PT0gY3VyUmVjb2duaXplciB8fCAvLyAyXG4gICAgICByZWNvZ25pemVyLmNhblJlY29nbml6ZVdpdGgoY3VyUmVjb2duaXplcikpKSB7XG4gICAgICAgIC8vIDNcbiAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29nbml6ZXIucmVzZXQoKTtcbiAgICAgIH0gLy8gaWYgdGhlIHJlY29nbml6ZXIgaGFzIGJlZW4gcmVjb2duaXppbmcgdGhlIGlucHV0IGFzIGEgdmFsaWQgZ2VzdHVyZSwgd2Ugd2FudCB0byBzdG9yZSB0aGlzIG9uZSBhcyB0aGVcbiAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIHJlY29nbml6ZXIuIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgcmVjb2duaXplclxuXG5cbiAgICAgIGlmICghY3VyUmVjb2duaXplciAmJiByZWNvZ25pemVyLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEKSkge1xuICAgICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgICBjdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGdldCBhIHJlY29nbml6ZXIgYnkgaXRzIGV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TnVsbH1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHJlY29nbml6ZXIpIHtcbiAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgIH1cblxuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVjb2duaXplcnNbaV0ub3B0aW9ucy5ldmVudCA9PT0gcmVjb2duaXplcikge1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcnNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBhZGQgYSByZWNvZ25pemVyIHRvIHRoZSBtYW5hZ2VyXG4gICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE1hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwiYWRkXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IC8vIHJlbW92ZSBleGlzdGluZ1xuXG5cbiAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLnJlbW92ZShleGlzdGluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWNvZ25pemVycy5wdXNoKHJlY29nbml6ZXIpO1xuICAgIHJlY29nbml6ZXIubWFuYWdlciA9IHRoaXM7XG4gICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlbW92ZSBhIHJlY29nbml6ZXIgYnkgbmFtZSBvciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcInJlbW92ZVwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTsgLy8gbGV0J3MgbWFrZSBzdXJlIHRoaXMgcmVjb2duaXplciBleGlzdHNcblxuICAgIGlmIChyZWNvZ25pemVyKSB7XG4gICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuICAgICAgdmFyIGluZGV4ID0gaW5BcnJheShyZWNvZ25pemVycywgdGFyZ2V0UmVjb2duaXplcik7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgZXZlbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub24gPSBmdW5jdGlvbiBvbihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQgfHwgaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICBoYW5kbGVyc1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2hhbmRsZXJdXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub2ZmID0gZnVuY3Rpb24gb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVyc1tldmVudF0gJiYgaGFuZGxlcnNbZXZlbnRdLnNwbGljZShpbkFycmF5KGhhbmRsZXJzW2V2ZW50XSwgaGFuZGxlciksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgZGF0YSkge1xuICAgIC8vIHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGRvbSBldmVudHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmRvbUV2ZW50cykge1xuICAgICAgdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKTtcbiAgICB9IC8vIG5vIGhhbmRsZXJzLCBzbyBza2lwIGl0IGFsbFxuXG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50XSAmJiB0aGlzLmhhbmRsZXJzW2V2ZW50XS5zbGljZSgpO1xuXG4gICAgaWYgKCFoYW5kbGVycyB8fCAhaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGF0YS50eXBlID0gZXZlbnQ7XG5cbiAgICBkYXRhLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGF0YS5zcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgaGFuZGxlcnNbaV0oZGF0YSk7XG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZGVzdHJveSB0aGUgbWFuYWdlciBhbmQgdW5iaW5kcyBhbGwgZXZlbnRzXG4gICAqIGl0IGRvZXNuJ3QgdW5iaW5kIGRvbSBldmVudHMsIHRoYXQgaXMgdGhlIHVzZXIgb3duIHJlc3BvbnNpYmlsaXR5XG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZWxlbWVudCAmJiB0b2dnbGVDc3NQcm9wcyh0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIE1hbmFnZXI7XG59KCk7XG5cbnZhciBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBTaW5nbGVUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU2luZ2xlVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBTaW5nbGVUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07IC8vIHNob3VsZCB3ZSBoYW5kbGUgdGhlIHRvdWNoIGV2ZW50cz9cblxuICAgIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3VjaGVzID0gbm9ybWFsaXplU2luZ2xlVG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTsgLy8gd2hlbiBkb25lLCByZXNldCB0aGUgc3RhcnRlZCBzdGF0ZVxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBTaW5nbGVUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIGFsbCA9IHVuaXF1ZUFycmF5KGFsbC5jb25jYXQoY2hhbmdlZCksICdpZGVudGlmaWVyJywgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdyYXAgYSBtZXRob2Qgd2l0aCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIHN0YWNrIHRyYWNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB3cmFwcGluZyB0aGUgc3VwcGxpZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBkZXByZWNhdGUobWV0aG9kLCBuYW1lLCBtZXNzYWdlKSB7XG4gIHZhciBkZXByZWNhdGlvbk1lc3NhZ2UgPSBcIkRFUFJFQ0FURUQgTUVUSE9EOiBcIiArIG5hbWUgKyBcIlxcblwiICsgbWVzc2FnZSArIFwiIEFUIFxcblwiO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICB2YXIgc3RhY2sgPSBlICYmIGUuc3RhY2sgPyBlLnN0YWNrLnJlcGxhY2UoL15bXlxcKF0rP1tcXG4kXS9nbSwgJycpLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJykucmVwbGFjZSgvXk9iamVjdC48YW5vbnltb3VzPlxccypcXCgvZ20sICd7YW5vbnltb3VzfSgpQCcpIDogJ1Vua25vd24gU3RhY2sgVHJhY2UnO1xuICAgIHZhciBsb2cgPSB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUud2FybiB8fCB3aW5kb3cuY29uc29sZS5sb2cpO1xuXG4gICAgaWYgKGxvZykge1xuICAgICAgbG9nLmNhbGwod2luZG93LmNvbnNvbGUsIGRlcHJlY2F0aW9uTWVzc2FnZSwgc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBleHRlbmQgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYywgbWVyZ2UpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBrZXlzLmxlbmd0aCkge1xuICAgIGlmICghbWVyZ2UgfHwgbWVyZ2UgJiYgZGVzdFtrZXlzW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXN0W2tleXNbaV1dID0gc3JjW2tleXNbaV1dO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufSwgJ2V4dGVuZCcsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgbWVyZ2UgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYykge1xuICByZXR1cm4gZXh0ZW5kKGRlc3QsIHNyYywgdHJ1ZSk7XG59LCAnbWVyZ2UnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgY2xhc3MgaW5oZXJpdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBiYXNlXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdChjaGlsZCwgYmFzZSwgcHJvcGVydGllcykge1xuICB2YXIgYmFzZVAgPSBiYXNlLnByb3RvdHlwZTtcbiAgdmFyIGNoaWxkUDtcbiAgY2hpbGRQID0gY2hpbGQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShiYXNlUCk7XG4gIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICBjaGlsZFAuX3N1cGVyID0gYmFzZVA7XG5cbiAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICBhc3NpZ24kMShjaGlsZFAsIHByb3BlcnRpZXMpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBmdW5jdGlvbiBiaW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gYmluZEZuKGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIEhhbW1lciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBIYW1tZXIgPVxuICAvKipcbiAgICAqIEBwcml2YXRlXG4gICAgKiBAY29uc3Qge3N0cmluZ31cbiAgICAqL1xuICBmdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hbmFnZXIoZWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgcmVjb2duaXplcnM6IHByZXNldC5jb25jYXQoKVxuICAgIH0sIG9wdGlvbnMpKTtcbiAgfTtcblxuICBIYW1tZXIuVkVSU0lPTiA9IFwiMi4wLjE3LXJjXCI7XG4gIEhhbW1lci5ESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0FMTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5ESVJFQ1RJT05fTEVGVCA9IERJUkVDVElPTl9MRUZUO1xuICBIYW1tZXIuRElSRUNUSU9OX1JJR0hUID0gRElSRUNUSU9OX1JJR0hUO1xuICBIYW1tZXIuRElSRUNUSU9OX1VQID0gRElSRUNUSU9OX1VQO1xuICBIYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9WRVJUSUNBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9OT05FID0gRElSRUNUSU9OX05PTkU7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuSU5QVVRfU1RBUlQgPSBJTlBVVF9TVEFSVDtcbiAgSGFtbWVyLklOUFVUX01PVkUgPSBJTlBVVF9NT1ZFO1xuICBIYW1tZXIuSU5QVVRfRU5EID0gSU5QVVRfRU5EO1xuICBIYW1tZXIuSU5QVVRfQ0FOQ0VMID0gSU5QVVRfQ0FOQ0VMO1xuICBIYW1tZXIuU1RBVEVfUE9TU0lCTEUgPSBTVEFURV9QT1NTSUJMRTtcbiAgSGFtbWVyLlNUQVRFX0JFR0FOID0gU1RBVEVfQkVHQU47XG4gIEhhbW1lci5TVEFURV9DSEFOR0VEID0gU1RBVEVfQ0hBTkdFRDtcbiAgSGFtbWVyLlNUQVRFX0VOREVEID0gU1RBVEVfRU5ERUQ7XG4gIEhhbW1lci5TVEFURV9SRUNPR05JWkVEID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgSGFtbWVyLlNUQVRFX0NBTkNFTExFRCA9IFNUQVRFX0NBTkNFTExFRDtcbiAgSGFtbWVyLlNUQVRFX0ZBSUxFRCA9IFNUQVRFX0ZBSUxFRDtcbiAgSGFtbWVyLk1hbmFnZXIgPSBNYW5hZ2VyO1xuICBIYW1tZXIuSW5wdXQgPSBJbnB1dDtcbiAgSGFtbWVyLlRvdWNoQWN0aW9uID0gVG91Y2hBY3Rpb247XG4gIEhhbW1lci5Ub3VjaElucHV0ID0gVG91Y2hJbnB1dDtcbiAgSGFtbWVyLk1vdXNlSW5wdXQgPSBNb3VzZUlucHV0O1xuICBIYW1tZXIuUG9pbnRlckV2ZW50SW5wdXQgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgSGFtbWVyLlRvdWNoTW91c2VJbnB1dCA9IFRvdWNoTW91c2VJbnB1dDtcbiAgSGFtbWVyLlNpbmdsZVRvdWNoSW5wdXQgPSBTaW5nbGVUb3VjaElucHV0O1xuICBIYW1tZXIuUmVjb2duaXplciA9IFJlY29nbml6ZXI7XG4gIEhhbW1lci5BdHRyUmVjb2duaXplciA9IEF0dHJSZWNvZ25pemVyO1xuICBIYW1tZXIuVGFwID0gVGFwUmVjb2duaXplcjtcbiAgSGFtbWVyLlBhbiA9IFBhblJlY29nbml6ZXI7XG4gIEhhbW1lci5Td2lwZSA9IFN3aXBlUmVjb2duaXplcjtcbiAgSGFtbWVyLlBpbmNoID0gUGluY2hSZWNvZ25pemVyO1xuICBIYW1tZXIuUm90YXRlID0gUm90YXRlUmVjb2duaXplcjtcbiAgSGFtbWVyLlByZXNzID0gUHJlc3NSZWNvZ25pemVyO1xuICBIYW1tZXIub24gPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLm9mZiA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZWFjaCA9IGVhY2g7XG4gIEhhbW1lci5tZXJnZSA9IG1lcmdlO1xuICBIYW1tZXIuZXh0ZW5kID0gZXh0ZW5kO1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIuYXNzaWduID0gYXNzaWduJDE7XG4gIEhhbW1lci5pbmhlcml0ID0gaW5oZXJpdDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLnByZWZpeGVkID0gcHJlZml4ZWQ7XG4gIEhhbW1lci50b0FycmF5ID0gdG9BcnJheTtcbiAgSGFtbWVyLmluQXJyYXkgPSBpbkFycmF5O1xuICBIYW1tZXIudW5pcXVlQXJyYXkgPSB1bmlxdWVBcnJheTtcbiAgSGFtbWVyLnNwbGl0U3RyID0gc3BsaXRTdHI7XG4gIEhhbW1lci5ib29sT3JGbiA9IGJvb2xPckZuO1xuICBIYW1tZXIuaGFzUGFyZW50ID0gaGFzUGFyZW50O1xuICBIYW1tZXIuYWRkRXZlbnRMaXN0ZW5lcnMgPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLnJlbW92ZUV2ZW50TGlzdGVuZXJzID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5kZWZhdWx0cyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywge1xuICAgIHByZXNldDogcHJlc2V0XG4gIH0pO1xuICByZXR1cm4gSGFtbWVyO1xufSgpO1xuXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cblxudmFyIGRlZmF1bHRzJDEgPSBIYW1tZXIuZGVmYXVsdHM7XG5cbmV4cG9ydCBkZWZhdWx0IEhhbW1lcjtcbmV4cG9ydCB7IElOUFVUX1NUQVJULCBJTlBVVF9NT1ZFLCBJTlBVVF9FTkQsIElOUFVUX0NBTkNFTCwgU1RBVEVfUE9TU0lCTEUsIFNUQVRFX0JFR0FOLCBTVEFURV9DSEFOR0VELCBTVEFURV9FTkRFRCwgU1RBVEVfUkVDT0dOSVpFRCwgU1RBVEVfQ0FOQ0VMTEVELCBTVEFURV9GQUlMRUQsIERJUkVDVElPTl9OT05FLCBESVJFQ1RJT05fTEVGVCwgRElSRUNUSU9OX1JJR0hULCBESVJFQ1RJT05fVVAsIERJUkVDVElPTl9ET1dOLCBESVJFQ1RJT05fSE9SSVpPTlRBTCwgRElSRUNUSU9OX1ZFUlRJQ0FMLCBESVJFQ1RJT05fQUxMLCBNYW5hZ2VyLCBJbnB1dCwgVG91Y2hBY3Rpb24sIFRvdWNoSW5wdXQsIE1vdXNlSW5wdXQsIFBvaW50ZXJFdmVudElucHV0LCBUb3VjaE1vdXNlSW5wdXQsIFNpbmdsZVRvdWNoSW5wdXQsIFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCBUYXBSZWNvZ25pemVyIGFzIFRhcCwgUGFuUmVjb2duaXplciBhcyBQYW4sIFN3aXBlUmVjb2duaXplciBhcyBTd2lwZSwgUGluY2hSZWNvZ25pemVyIGFzIFBpbmNoLCBSb3RhdGVSZWNvZ25pemVyIGFzIFJvdGF0ZSwgUHJlc3NSZWNvZ25pemVyIGFzIFByZXNzLCBhZGRFdmVudExpc3RlbmVycyBhcyBvbiwgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMgYXMgb2ZmLCBlYWNoLCBtZXJnZSwgZXh0ZW5kLCBhc3NpZ24kMSBhcyBhc3NpZ24sIGluaGVyaXQsIGJpbmRGbiwgcHJlZml4ZWQsIHRvQXJyYXksIGluQXJyYXksIHVuaXF1ZUFycmF5LCBzcGxpdFN0ciwgYm9vbE9yRm4sIGhhc1BhcmVudCwgYWRkRXZlbnRMaXN0ZW5lcnMsIHJlbW92ZUV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0cyQxIGFzIGRlZmF1bHRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW1tZXIuZXNtLmpzLm1hcFxuIiwgIi8qKlxuICogdmlzLXV0aWxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtdXRpbFxuICpcbiAqIHV0aWxpdGllIGNvbGxlY3Rpb24gZm9yIHZpc2pzXG4gKlxuICogQHZlcnNpb24gNS4wLjdcbiAqIEBkYXRlICAgIDIwMjMtMTEtMjBUMDk6MDY6NTEuMDY3WlxuICpcbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTEtMjAxNyBBbG1lbmRlIEIuViwgaHR0cDovL2FsbWVuZGUuY29tXG4gKiBAY29weXJpZ2h0IChjKSAyMDE3LTIwMTkgdmlzanMgY29udHJpYnV0b3JzLCBodHRwczovL2dpdGh1Yi5jb20vdmlzanNcbiAqXG4gKiBAbGljZW5zZVxuICogdmlzLmpzIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aFxuICpcbiAqICAgMS4gVGhlIEFwYWNoZSAyLjAgTGljZW5zZVxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgIGFuZFxuICpcbiAqICAgMi4gVGhlIE1JVCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiB2aXMuanMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGVpdGhlciBsaWNlbnNlLlxuICovXG5cbmltcG9ydCBFbWl0dGVyIGZyb20gJ2NvbXBvbmVudC1lbWl0dGVyJztcbmltcG9ydCBSZWFsSGFtbWVyIGZyb20gJ0BlZ2pzL2hhbW1lcmpzJztcblxuLyoqXHJcbiAqIFVzZSB0aGlzIHN5bWJvbCB0byBkZWxldGUgcHJvcGVyaWVzIGluIGRlZXBPYmplY3RBc3NpZ24uXHJcbiAqL1xyXG5jb25zdCBERUxFVEUgPSBTeW1ib2woXCJERUxFVEVcIik7XHJcbi8qKlxyXG4gKiBQdXJlIHZlcnNpb24gb2YgZGVlcE9iamVjdEFzc2lnbiwgaXQgZG9lc24ndCBtb2RpZnkgYW55IG9mIGl0J3MgYXJndW1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0gYmFzZSAtIFRoZSBiYXNlIG9iamVjdCB0aGF0IGZ1bGxmaWxzIHRoZSB3aG9sZSBpbnRlcmZhY2UgVC5cclxuICogQHBhcmFtIHVwZGF0ZXMgLSBVcGRhdGVzIHRoYXQgbWF5IGNoYW5nZSBvciBkZWxldGUgcHJvcHMuXHJcbiAqIEByZXR1cm5zIEEgYnJhbmQgbmV3IGluc3RhbmNlIHdpdGggYWxsIHRoZSBzdXBwbGllZCBvYmplY3RzIGRlZXBseSBtZXJnZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwdXJlRGVlcE9iamVjdEFzc2lnbihiYXNlLCAuLi51cGRhdGVzKSB7XHJcbiAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbih7fSwgYmFzZSwgLi4udXBkYXRlcyk7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ24oLi4udmFsdWVzKSB7XHJcbiAgICBjb25zdCBtZXJnZWQgPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKTtcclxuICAgIHN0cmlwRGVsZXRlKG1lcmdlZCk7XHJcbiAgICByZXR1cm4gbWVyZ2VkO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoaXMgZG9lc24ndCBzdHJpcCB0aGUgREVMRVRFIHN5bWJvbHMgc28gdGhleSBtYXkgZW5kIHVwIGluIHRoZSBmaW5hbCBvYmplY3QuXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKSB7XHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGRlZXBPYmplY3RBc3NpZ24odmFsdWVzWzBdLCB2YWx1ZXNbMV0pLCAuLi52YWx1ZXMuc2xpY2UoMikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYSA9IHZhbHVlc1swXTtcclxuICAgIGNvbnN0IGIgPSB2YWx1ZXNbMV07XHJcbiAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICBhLnNldFRpbWUoYi5nZXRUaW1lKCkpO1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIFJlZmxlY3Qub3duS2V5cyhiKSkge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGIsIHByb3ApKSA7XHJcbiAgICAgICAgZWxzZSBpZiAoYltwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYVtwcm9wXSkgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShhW3Byb3BdLCBiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBjbG9uZShiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBjbG9uZSBnaXZlbiBvYmplY3Qgb3IgYXJyYXkuIEluIGNhc2Ugb2YgcHJpbWl0aXZlIHNpbXBseSByZXR1cm4uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gQW55dGhpbmcuXHJcbiAqIEByZXR1cm5zIERlZXAgY2xvbmVkIG9iamVjdC9hcnJheSBvciB1bmNoYW5nZWQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGNsb25lKGEpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIGEubWFwKCh2YWx1ZSkgPT4gY2xvbmUodmFsdWUpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBhID09PSBcIm9iamVjdFwiICYmIGEgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGEuZ2V0VGltZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSh7fSwgYSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogU3RyaXAgREVMRVRFIGZyb20gZ2l2ZW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB3aGljaCBtYXkgY29udGFpbiBERUxFVEUgYnV0IHdvbid0IGFmdGVyIHRoaXMgaXMgZXhlY3V0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBzdHJpcERlbGV0ZShhKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoYSkpIHtcclxuICAgICAgICBpZiAoYVtwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJiBhW3Byb3BdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHN0cmlwRGVsZXRlKGFbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG4vKipcclxuICogU2VlZGFibGUsIGZhc3QgYW5kIHJlYXNvbmFibHkgZ29vZCAobm90IGNyeXB0byBidXQgbW9yZSB0aGFuIG9rYXkgZm9yIG91clxyXG4gKiBuZWVkcykgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIEFkYXB0ZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTEwNDI5MTAwNzM2L2h0dHA6Ly9iYWFnb2UuY29tOjgwL2VuL1JhbmRvbU11c2luZ3MvamF2YXNjcmlwdH0uXHJcbiAqIE9yaWdpbmFsIGFsZ29yaXRobSBjcmVhdGVkIGJ5IEpvaGFubmVzIEJhYWfDuGUgXFw8YmFhZ29lXFxAYmFhZ29lLmNvbVxcPiBpbiAyMDEwLlxyXG4gKi9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIGdlbmVyYXRvciBiYXNlZCBvbiBBbGVhIGJ5IEpvaGFubmVzIEJhYWfDuGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQWxsIHN1cHBsaWVkIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWQgYXMgYSBzZWVkLiBJbiBjYXNlIG5vdGhpbmdcclxuICogaXMgc3VwcGxpZWQgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYSguLi5zZWVkKSB7XHJcbiAgICByZXR1cm4gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQubGVuZ3RoID8gc2VlZCA6IFtEYXRlLm5vdygpXSk7XHJcbn1cclxuLyoqXHJcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFtbQWxlYV1dIHdpdGhvdXQgdXNlciBpbnB1dCB2YWxpZGF0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIFRoZSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkKSB7XHJcbiAgICBsZXQgW3MwLCBzMSwgczJdID0gbWFzaFNlZWQoc2VlZCk7XHJcbiAgICBsZXQgYyA9IDE7XHJcbiAgICBjb25zdCByYW5kb20gPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgICAgIHMwID0gczE7XHJcbiAgICAgICAgczEgPSBzMjtcclxuICAgICAgICByZXR1cm4gKHMyID0gdCAtIChjID0gdCB8IDApKTtcclxuICAgIH07XHJcbiAgICByYW5kb20udWludDMyID0gKCkgPT4gcmFuZG9tKCkgKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgcmFuZG9tLmZyYWN0NTMgPSAoKSA9PiByYW5kb20oKSArICgocmFuZG9tKCkgKiAweDIwMDAwMCkgfCAwKSAqIDEuMTEwMjIzMDI0NjI1MTU2NWUtMTY7IC8vIDJeLTUzXHJcbiAgICByYW5kb20uYWxnb3JpdGhtID0gXCJBbGVhXCI7XHJcbiAgICByYW5kb20uc2VlZCA9IHNlZWQ7XHJcbiAgICByYW5kb20udmVyc2lvbiA9IFwiMC45XCI7XHJcbiAgICByZXR1cm4gcmFuZG9tO1xyXG59XHJcbi8qKlxyXG4gKiBUdXJuIGFyYml0cmFyeSBkYXRhIGludG8gdmFsdWVzIFtbQWxlYUltcGxlbWVudGF0aW9uXV0gY2FuIHVzZSB0byBnZW5lcmF0ZVxyXG4gKiByYW5kb20gbnVtYmVycy5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBcmJpdHJhcnkgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgc2VlZC5cclxuICogQHJldHVybnMgVGhyZWUgbnVtYmVycyB0byB1c2UgYXMgaW5pdGlhbCB2YWx1ZXMgZm9yIFtbQWxlYUltcGxlbWVudGF0aW9uXV0uXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXNoU2VlZCguLi5zZWVkKSB7XHJcbiAgICBjb25zdCBtYXNoID0gTWFzaCgpO1xyXG4gICAgbGV0IHMwID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczEgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMiA9IG1hc2goXCIgXCIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgczAgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczAgPCAwKSB7XHJcbiAgICAgICAgICAgIHMwICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMxIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMxIDwgMCkge1xyXG4gICAgICAgICAgICBzMSArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMiAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMiA8IDApIHtcclxuICAgICAgICAgICAgczIgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW3MwLCBzMSwgczJdO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWFzaCBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMgQSBub25wdXJlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYXJiaXRyYXJ5IFtbTWFzaGFibGVdXSBkYXRhIGFuZCB0dXJuc1xyXG4gKiB0aGVtIGludG8gbnVtYmVycy5cclxuICovXHJcbmZ1bmN0aW9uIE1hc2goKSB7XHJcbiAgICBsZXQgbiA9IDB4ZWZjODI0OWQ7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICBjb25zdCBzdHJpbmcgPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbiArPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgbGV0IGggPSAwLjAyNTE5NjAzMjgyNDE2OTM4ICogbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgaCAqPSBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBuICs9IGggKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgIH07XHJcbn1cblxuLyoqXG4gKiBTZXR1cCBhIG1vY2sgaGFtbWVyLmpzIG9iamVjdCwgZm9yIHVuaXQgdGVzdGluZy5cbiAqXG4gKiBJbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3ViZXIvZGVjay5nbC9wdWxsLzY1OFxuICpcbiAqIEByZXR1cm5zIHt7b246IG5vb3AsIG9mZjogbm9vcCwgZGVzdHJveTogbm9vcCwgZW1pdDogbm9vcCwgZ2V0OiBnZXR9fVxuICovXG5mdW5jdGlvbiBoYW1tZXJNb2NrKCkge1xuICBjb25zdCBub29wID0gKCkgPT4ge307XG5cbiAgcmV0dXJuIHtcbiAgICBvbjogbm9vcCxcbiAgICBvZmY6IG5vb3AsXG4gICAgZGVzdHJveTogbm9vcCxcbiAgICBlbWl0OiBub29wLFxuXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0OiBub29wLFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBIYW1tZXIkMSA9XG4gIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IHdpbmRvdy5IYW1tZXIgfHwgUmVhbEhhbW1lclxuICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBoYW1tZXIuanMgaXMgb25seSBhdmFpbGFibGUgaW4gYSBicm93c2VyLCBub3QgaW4gbm9kZS5qcy4gUmVwbGFjaW5nIGl0IHdpdGggYSBtb2NrIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIGhhbW1lck1vY2soKTtcbiAgICAgIH07XG5cbi8qKlxuICogVHVybiBhbiBlbGVtZW50IGludG8gYW4gY2xpY2tUb1VzZSBlbGVtZW50LlxuICogV2hlbiBub3QgYWN0aXZlLCB0aGUgZWxlbWVudCBoYXMgYSB0cmFuc3BhcmVudCBvdmVybGF5LiBXaGVuIHRoZSBvdmVybGF5IGlzXG4gKiBjbGlja2VkLCB0aGUgbW9kZSBpcyBjaGFuZ2VkIHRvIGFjdGl2ZS5cbiAqIFdoZW4gYWN0aXZlLCB0aGUgZWxlbWVudCBpcyBkaXNwbGF5ZWQgd2l0aCBhIGJsdWUgYm9yZGVyIGFyb3VuZCBpdCwgYW5kXG4gKiB0aGUgaW50ZXJhY3RpdmUgY29udGVudHMgb2YgdGhlIGVsZW1lbnQgY2FuIGJlIHVzZWQuIFdoZW4gY2xpY2tlZCBvdXRzaWRlXG4gKiB0aGUgZWxlbWVudCwgdGhlIGVsZW1lbnRzIG1vZGUgaXMgY2hhbmdlZCB0byBpbmFjdGl2ZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lclxuICogQGNsYXNzIEFjdGl2YXRvclxuICovXG5mdW5jdGlvbiBBY3RpdmF0b3IkMShjb250YWluZXIpIHtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlID0gW107XG5cbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICB0aGlzLl9kb20gPSB7XG4gICAgY29udGFpbmVyLFxuICAgIG92ZXJsYXk6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gIH07XG5cbiAgdGhpcy5fZG9tLm92ZXJsYXkuY2xhc3NMaXN0LmFkZChcInZpcy1vdmVybGF5XCIpO1xuXG4gIHRoaXMuX2RvbS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgdGhpcy5fZG9tLm92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIH0pO1xuXG4gIGNvbnN0IGhhbW1lciA9IEhhbW1lciQxKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgaGFtbWVyLm9uKFwidGFwXCIsIHRoaXMuX29uVGFwT3ZlcmxheS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIGhhbW1lci5kZXN0cm95KCk7XG4gICAgLy8gRklYTUU6IGNsZWFuaW5nIHVwIGhhbW1lciBpbnN0YW5jZXMgZG9lc24ndCB3b3JrIChUaW1lbGluZSBub3QgcmVtb3ZlZFxuICAgIC8vIGZyb20gbWVtb3J5KVxuICB9KTtcblxuICAvLyBibG9jayBhbGwgdG91Y2ggZXZlbnRzIChleGNlcHQgdGFwKVxuICBjb25zdCBldmVudHMgPSBbXG4gICAgXCJ0YXBcIixcbiAgICBcImRvdWJsZXRhcFwiLFxuICAgIFwicHJlc3NcIixcbiAgICBcInBpbmNoXCIsXG4gICAgXCJwYW5cIixcbiAgICBcInBhbnN0YXJ0XCIsXG4gICAgXCJwYW5tb3ZlXCIsXG4gICAgXCJwYW5lbmRcIixcbiAgXTtcbiAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgaGFtbWVyLm9uKGV2ZW50LCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBhdHRhY2ggYSBjbGljayBldmVudCB0byB0aGUgd2luZG93LCBpbiBvcmRlciB0byBkZWFjdGl2YXRlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSB0aGUgdGltZWxpbmVcbiAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmJvZHkpIHtcbiAgICB0aGlzLl9vbkNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIV9oYXNQYXJlbnQoZXZlbnQudGFyZ2V0LCBjb250YWluZXIpKSB7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBwcmVwYXJlIGVzY2FwZSBrZXkgbGlzdGVuZXIgZm9yIGRlYWN0aXZhdGluZyB3aGVuIGFjdGl2ZVxuICB0aGlzLl9lc2NMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIFwia2V5XCIgaW4gZXZlbnRcbiAgICAgICAgPyBldmVudC5rZXkgPT09IFwiRXNjYXBlXCJcbiAgICAgICAgOiBldmVudC5rZXlDb2RlID09PSAyNyAvKiB0aGUga2V5Q29kZSBpcyBmb3IgSUUxMSAqL1xuICAgICkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICB9O1xufVxuXG4vLyB0dXJuIGludG8gYW4gZXZlbnQgZW1pdHRlclxuRW1pdHRlcihBY3RpdmF0b3IkMS5wcm90b3R5cGUpO1xuXG4vLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBhY3RpdmF0b3JcbkFjdGl2YXRvciQxLmN1cnJlbnQgPSBudWxsO1xuXG4vKipcbiAqIERlc3Ryb3kgdGhlIGFjdGl2YXRvci4gQ2xlYW5zIHVwIGFsbCBjcmVhdGVkIERPTSBhbmQgZXZlbnQgbGlzdGVuZXJzXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmRlYWN0aXZhdGUoKTtcblxuICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2NsZWFudXBRdWV1ZS5zcGxpY2UoMCkucmV2ZXJzZSgpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBoaWRkZW4sIGVsZW1lbnQgaXMgZGVjb3JhdGVkIHdpdGggYSBibHVlIHNoYWRvdyBib3JkZXJcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICAvLyB3ZSBhbGxvdyBvbmx5IG9uZSBhY3RpdmUgYWN0aXZhdG9yIGF0IGEgdGltZVxuICBpZiAoQWN0aXZhdG9yJDEuY3VycmVudCkge1xuICAgIEFjdGl2YXRvciQxLmN1cnJlbnQuZGVhY3RpdmF0ZSgpO1xuICB9XG4gIEFjdGl2YXRvciQxLmN1cnJlbnQgPSB0aGlzO1xuXG4gIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ2aXMtYWN0aXZlXCIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiYWN0aXZhdGVcIik7XG5cbiAgLy8gdWdseSBoYWNrOiBiaW5kIEVTQyBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnRzLCBhcyB0aGUgTmV0d29yayByZWJpbmRzIGFsbFxuICAvLyBrZXlib2FyZCBldmVudHMgb24gYSAnY2hhbmdlJyBldmVudFxuICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gdG9wIG9mIHRoZSBlbGVtZW50XG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJ2aXMtYWN0aXZlXCIpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImRlYWN0aXZhdGVcIik7XG59O1xuXG4vKipcbiAqIEhhbmRsZSBhIHRhcCBldmVudDogYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLl9vblRhcE92ZXJsYXkgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICB0aGlzLmFjdGl2YXRlKCk7XG4gIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIHRoZSByZXF1ZXN0ZWQgcGFyZW50IGVsZW1lbnQgc29tZXdoZXJlIGluXG4gKiBpdHMgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwYXJlbnQgaXMgZm91bmQgc29tZXdoZXJlIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9oYXNQYXJlbnQoZWxlbWVudCwgcGFyZW50KSB7XG4gIHdoaWxlIChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyB1dGlsaXR5IGZ1bmN0aW9uc1xyXG4vLyBwYXJzZSBBU1AuTmV0IERhdGUgcGF0dGVybixcclxuLy8gZm9yIGV4YW1wbGUgJy9EYXRlKDExOTg5MDg3MTcwNTYpLycgb3IgJy9EYXRlKDExOTg5MDg3MTcwNTYtMDcwMCkvJ1xyXG4vLyBjb2RlIGZyb20gaHR0cDovL21vbWVudGpzLmNvbS9cclxuY29uc3QgQVNQRGF0ZVJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2k7XHJcbi8vIENvbG9yIFJFc1xyXG5jb25zdCBmdWxsSGV4UkUgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pO1xyXG5jb25zdCBzaG9ydEhleFJFID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcclxuY29uc3QgcmdiUkUgPSAvXnJnYlxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqXFwpJC9pO1xyXG5jb25zdCByZ2JhUkUgPSAvXnJnYmFcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKihbMDFdfDA/XFwuXFxkKykgKlxcKSQvaTtcclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBudW1iZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBudW1iZXIsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgZXZlcnl0aGluZyBpbiB0aGUgRE9NIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIERPTW9iamVjdCAtIE5vZGUgd2hvc2UgY2hpbGQgbm9kZXMgd2lsbCBiZSByZWN1cnNpdmVseSBkZWxldGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVjdXJzaXZlRE9NRGVsZXRlKERPTW9iamVjdCkge1xyXG4gICAgaWYgKERPTW9iamVjdCkge1xyXG4gICAgICAgIHdoaWxlIChET01vYmplY3QuaGFzQ2hpbGROb2RlcygpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gRE9Nb2JqZWN0LmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIERPTW9iamVjdC5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgb2JqZWN0IChub3QgcHJpbWl0aXZlIG9yIG51bGwpLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbm90IG51bGwgb2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIERhdGUsIG9yIGEgU3RyaW5nIGNvbnRhaW5pbmcgYSBEYXRlLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgRGF0ZSBpbnN0YW5jZSBvciBzdHJpbmcgZGF0ZSByZXByZXNlbnRhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBzdHJpbmcgY29udGFpbnMgYSBkYXRlXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBBU1BEYXRlUmVnZXguZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG4vKipcclxuICogQ29weSBwcm9wZXJ0eSBmcm9tIGIgdG8gYSBpZiBwcm9wZXJ0eSBwcmVzZW50IGluIGEuXHJcbiAqIElmIHByb3BlcnR5IGluIGIgZXhwbGljaXRseSBzZXQgdG8gbnVsbCwgZGVsZXRlIGl0IGlmIGBhbGxvd0RlbGV0aW9uYCBzZXQuXHJcbiAqXHJcbiAqIEludGVybmFsIGhlbHBlciByb3V0aW5lLCBzaG91bGQgbm90IGJlIGV4cG9ydGVkLiBOb3QgYWRkZWQgdG8gYGV4cG9ydHNgIGZvciB0aGF0IHJlYXNvbi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm9wIC0gTmFtZSBvZiBwcm9wZXJ0eSB0byBjb3B5IGZyb20gYiB0byBhLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKSB7XHJcbiAgICBsZXQgZG9EZWxldGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUpIHtcclxuICAgICAgICBkb0RlbGV0aW9uID0gYltwcm9wXSA9PT0gbnVsbCAmJiBhW3Byb3BdICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoZG9EZWxldGlvbikge1xyXG4gICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF07IC8vIFJlbWVtYmVyLCB0aGlzIGlzIGEgcmVmZXJlbmNlIGNvcHkhXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEZpbGwgYW4gb2JqZWN0IHdpdGggYSBwb3NzaWJseSBwYXJ0aWFsbHkgZGVmaW5lZCBvdGhlciBvYmplY3QuXHJcbiAqXHJcbiAqIE9ubHkgY29waWVzIHZhbHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgYWxyZWFkeSBwcmVzZW50IGluIGEuXHJcbiAqIFRoYXQgbWVhbnMgYW4gb2JqZWN0IGlzIG5vdCBjcmVhdGVkIG9uIGEgcHJvcGVydHkgaWYgb25seSB0aGUgYiBvYmplY3QgaGFzIGl0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBvYmplY3QgdGhhdCB3aWxsIGhhdmUgaXQncyBwcm9wZXJ0aWVzIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBiIC0gVGhlIG9iamVjdCB3aXRoIHByb3BlcnR5IHVwZGF0ZXMuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBmaWxsSWZEZWZpbmVkKGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gTk9URTogaXRlcmF0aW9uIG9mIHByb3BlcnRpZXMgb2YgYVxyXG4gICAgLy8gTk9URTogcHJvdG90eXBlIHByb3BlcnRpZXMgaXRlcmF0ZWQgb3ZlciBhcyB3ZWxsXHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYSkge1xyXG4gICAgICAgIGlmIChiW3Byb3BdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gPT09IG51bGwgfHwgdHlwZW9mIGJbcHJvcF0gIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vdGU6IHR5cGVvZiBudWxsID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYVByb3AgPSBhW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYlByb3AgPSBiW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGFQcm9wKSAmJiBpc09iamVjdChiUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsSWZEZWZpbmVkKGFQcm9wLCBiUHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXHJcbiAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxyXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXHJcbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKi9cclxuY29uc3QgZXh0ZW5kID0gT2JqZWN0LmFzc2lnbjtcclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIgb3IgYSBzZXJpZXMgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHJlbWFya3NcclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBjb3BpZWQgdG8gYS5cclxuICogQHBhcmFtIGEgLSBUaGUgdGFyZ2V0LlxyXG4gKiBAcGFyYW0gb3RoZXJzIC0gVGhlIHNvdXJjZXMuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVFeHRlbmQocHJvcHMsIGEsIC4uLm90aGVycykge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFycmF5IHdpdGggcHJvcGVydHkgbmFtZXMgZXhwZWN0ZWQgYXMgZmlyc3QgYXJndW1lbnRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVycykge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgICAgICBpZiAob3RoZXIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBwcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IG90aGVyW3Byb3BdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyByb3V0aW5lIGltcGxpZWQgdGhhdCBtdWx0aXBsZSBzb3VyY2Ugb2JqZWN0cyBjb3VsZFxyXG4gKiBiZSB1c2VkOyBob3dldmVyLCB0aGUgaW1wbGVtZW50YXRpb24gd2FzICoqd3JvbmcqKi4gU2luY2UgbXVsdGlwbGUgKFxcPjEpXHJcbiAqIHNvdXJjZXMgd2VyZW4ndCB1c2VkIGFueXdoZXJlIGluIHRoZSBgdmlzLmpzYCBjb2RlLCB0aGlzIGhhcyBiZWVuIHJlbW92ZWRcclxuICogQHBhcmFtIHByb3BzIC0gTmFtZXMgb2YgZmlyc3QtbGV2ZWwgcHJvcGVydGllcyB0byBjb3B5IG92ZXIuXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZURlZXBFeHRlbmQocHJvcHMsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBmYWxzZSwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYGFgIHdpdGggcHJvcGVydGllcyBvZiBvYmplY3QgYGJgLCBpZ25vcmluZyBwcm9wZXJ0aWVzIHdoaWNoXHJcbiAqIGFyZSBleHBsaWNpdGx5IHNwZWNpZmllZCB0byBiZSBleGNsdWRlZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhlIHByb3BlcnRpZXMgb2YgYGJgIGFyZSBjb25zaWRlcmVkIGZvciBjb3B5aW5nLiBQcm9wZXJ0aWVzIHdoaWNoIGFyZVxyXG4gKiB0aGVtc2VsdmVzIG9iamVjdHMgYXJlIGFyZSBhbHNvIGV4dGVuZGVkLiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkXHJcbiAqIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHNUb0V4Y2x1ZGUgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHdoaWNoIHNob3VsZCAqbm90KiBiZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHRvIGV4dGVuZC5cclxuICogQHBhcmFtIGIgLSBPYmplY3QgdG8gdGFrZSBwcm9wZXJ0aWVzIGZyb20gZm9yIGV4dGVuc2lvbi5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHlcclxuICogc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQocHJvcHNUb0V4Y2x1ZGUsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICAvLyBOT1RFOiBhcnJheSBwcm9wZXJ0aWVzIGhhdmUgYW4gZWxzZS1iZWxvdzsgYXBwYXJlbnRseSwgdGhlcmUgaXMgYSBwcm9ibGVtIGhlcmUuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBIYW5kbGUgbG9jYWwgcHJvcGVydGllcyBvbmx5XHJcbiAgICAgICAgaWYgKHByb3BzVG9FeGNsdWRlLmluY2x1ZGVzKHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSW4gZXhjbHVzaW9uIGxpc3QsIHNraXBcclxuICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYltwcm9wXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXS5wdXNoKGJbcHJvcF1baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgZXh0ZW5kIGFuIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvdG9FeHRlbmQgLSBJZiB0cnVlLCB0aGUgcHJvdG90eXBlIHZhbHVlcyB3aWxsIGFsc28gYmUgZXh0ZW5kZWQuXHJcbiAqIChUaGF0IGlzIHRoZSBvcHRpb25zIG9iamVjdHMgdGhhdCBpbmhlcml0IGZyb20gb3RoZXJzIHdpbGwgYWxzbyBnZXQgdGhlXHJcbiAqIGluaGVyaXRlZCBvcHRpb25zKS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCB0aGUgdmFsdWVzIG9mIGZpZWxkcyB0aGF0IGFyZSBudWxsIHdpbGwgYmUgZGVsZXRlZC5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBFeHRlbmQoYSwgYiwgcHJvdG9FeHRlbmQgPSBmYWxzZSwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkgfHwgcHJvdG9FeHRlbmQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYltwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0gZGVlcEV4dGVuZCh7fSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF0uc2xpY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgYWxsIGVsZW1lbnRzIGluIHR3byBhcnJheXMgYXJlIGVxdWFsLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEZpcnN0IGFycmF5LlxyXG4gKiBAcGFyYW0gYiAtIFNlY29uZCBhcnJheS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBib3RoIGFycmF5cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2FtZSBlbGVtZW50cyAoMSA9ICcxJykuXHJcbiAqL1xyXG5mdW5jdGlvbiBlcXVhbEFycmF5KGEsIGIpIHtcclxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBHZXQgdGhlIHR5cGUgb2YgYW4gb2JqZWN0LCBmb3IgZXhhbXBsZSBleHBvcnRzLmdldFR5cGUoW10pIHJldHVybnMgJ0FycmF5Jy5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgRGV0ZWN0ZWQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFR5cGUob2JqZWN0KSB7XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcclxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJBcnJheVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJEYXRlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIk9iamVjdFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBGaXJzdCBwYXJ0LlxyXG4gKiBAcGFyYW0gbmV3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgYWFkZGVkIGludG8gdGhlIGFycmF5LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aXRoIGFsbCBpdGVtcyBmcm9tIGFyciBhbmQgbmV3VmFsdWUgKHdoaWNoIGlzIGxhc3QpLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFuZEV4dGVuZEFycmF5KGFyciwgbmV3VmFsdWUpIHtcclxuICAgIHJldHVybiBbLi4uYXJyLCBuZXdWYWx1ZV07XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIGJlIGNvcGllZC5cclxuICogQHJldHVybnMgU2hhbGxvdyBjb3B5IG9mIGFyci5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBcnJheShhcnIpIHtcclxuICAgIHJldHVybiBhcnIuc2xpY2UoKTtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIGxlZnQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIGxlZnQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZUxlZnQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHJpZ2h0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSByaWdodCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlUmlnaHQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSB0b3AgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHRvcCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlVG9wKGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxufVxyXG4vKipcclxuICogQWRkIGEgY2xhc3NOYW1lIHRvIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIGFkZGVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBuZXdDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQobmV3Q2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhY2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSkpO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgYSBjbGFzc05hbWUgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG9sZENsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFvbGRDbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogRm9yIGVhY2ggbWV0aG9kIGZvciBib3RoIGFycmF5cyBhbmQgb2JqZWN0cy5cclxuICogSW4gY2FzZSBvZiBhbiBhcnJheSwgdGhlIGJ1aWx0LWluIEFycmF5LmZvckVhY2goKSBpcyBhcHBsaWVkICgqKk5vLCBpdCdzIG5vdCEqKikuXHJcbiAqIEluIGNhc2Ugb2YgYW4gT2JqZWN0LCB0aGUgbWV0aG9kIGxvb3BzIG92ZXIgYWxsIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIEFuIE9iamVjdCBvciBBcnJheSB0byBiZSBpdGVyYXRlZCBvdmVyLlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5mb3JFYWNoLWxpa2UgY2FsbGJhY2suXHJcbiAqL1xyXG5mdW5jdGlvbiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAvLyBhcnJheVxyXG4gICAgICAgIGNvbnN0IGxlbiA9IG9iamVjdC5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhvYmplY3RbaV0sIGksIG9iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gb2JqZWN0XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGFuIGFycmF5OiBhbGwgb2JqZWN0cyBwcm9wZXJ0aWVzIGFyZSBwdXQgaW50byB0aGUgYXJyYXkuIFRoZSByZXN1bHRpbmcgYXJyYXkgaXMgdW5vcmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbyAtIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bm9yZGVyZWQgdmFsdWVzLlxyXG4gKi9cclxuY29uc3QgdG9BcnJheSA9IE9iamVjdC52YWx1ZXM7XHJcbi8qKlxyXG4gKiBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IHdpbGwgYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIGtleSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgYXNzaWduZWQuXHJcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIHdhcyB1cGRhdGVkICh0cnVlKSBvciBhbHJlYWR5IHN0cmljdGx5IHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBvYmplY3QgKGZhbHNlKS5cclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KG9iamVjdCwga2V5LCB2YWx1ZSkge1xyXG4gICAgaWYgKG9iamVjdFtrZXldICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBiZSBvbmx5IGV4ZWN1dGVkIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZS5cclxuICpcclxuICogQHBhcmFtIGZuIC0gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJucyBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uLlxyXG4gKi9cclxuZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcclxuICAgIGxldCBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzY2hlZHVsZWQpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm4oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ2FuY2VscyB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBpZiBpdCBpcyBjYW5jZWxhYmxlLCB3aXRob3V0IHN0b3BwaW5nIGZ1cnRoZXIgcHJvcGFnYXRpb24gb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgd2hvc2UgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIG5vbi1JRSBicm93c2Vyc1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldCBIVE1MIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudC5cclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgb3IgbnVsbCBpZiBub3Qgb2J0YWluYWJsZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFRhcmdldChldmVudCA9IHdpbmRvdy5ldmVudCkge1xyXG4gICAgLy8gY29kZSBmcm9tIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxyXG4gICAgLy8gQFRPRE86IEV2ZW50VGFyZ2V0IGNhbiBiZSBhbG1vc3QgYW55dGhpbmcsIGlzIGl0IG9rYXkgdG8gcmV0dXJuIG9ubHkgRWxlbWVudHM/XHJcbiAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcclxuICAgIGlmICghZXZlbnQpIDtcclxuICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LnNyY0VsZW1lbnQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC5zcmNFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gbnVsbCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykge1xyXG4gICAgICAgIC8vIGRlZmVhdCBTYWZhcmkgYnVnXHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gZWxlbWVudCBjb250YWlucyBnaXZlbiBwYXJlbnQgc29tZXdoZXJlIGluIHRoZSBET00gdHJlZS5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBwYXJlbnQgLSBUaGUgYW5jZXN0b3IgKG5vdCBuZWNlc3NhcmlseSBwYXJlbnQpIG9mIHRoZSBlbGVtZW50LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHBhcmVudCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZWxlbWVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xyXG4gICAgbGV0IGVsZW0gPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKGVsZW0pIHtcclxuICAgICAgICBpZiAoZWxlbSA9PT0gcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9ib29sZWFuLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nIGJvb2xlYW4gdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgbnVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvbnVtYmVyLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nICoqYm94ZWQqKiBudW1iZXIgdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzTnVtYmVyKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIHN0cmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3N0cmluZywgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogc3RyaW5nIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1N0cmluZyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvc2l6ZSwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUgKG51bWJlciArICdweCcpLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1NpemUodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBET00gRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBET00gRWxlbWVudCwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIERPTSBFbGVtZW50LCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0VsZW1lbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYn1cclxuICogQHBhcmFtIGhleCAtIEhleCBjb2xvciBzdHJpbmcgKDMgb3IgNiBkaWdpdHMsIHdpdGggb3Igd2l0aG91dCAjKS5cclxuICogQHJldHVybnMgUkdCIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvUkdCKGhleCkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHN3aXRjaCAoaGV4Lmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHNob3J0SGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0gKyByZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0gKyByZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10gKyByZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBmdWxsSGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBzdHJpbmcgY29sb3IgaW4gaGV4IG9yIFJHQiBmb3JtYXQgYW5kIGFkZHMgdGhlIG9wYWNpdHksIFJHQkEgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29sb3IgLSBUaGUgY29sb3Igc3RyaW5nIChoZXgsIFJHQiwgUkdCQSkuXHJcbiAqIEBwYXJhbSBvcGFjaXR5IC0gVGhlIG5ldyBvcGFjaXR5LlxyXG4gKiBAcmV0dXJucyBSR0JBIHN0cmluZywgZm9yIGV4YW1wbGUgJ3JnYmEoMjU1LCAwLCAxMjcsIDAuMyknLlxyXG4gKi9cclxuZnVuY3Rpb24gb3ZlcnJpZGVPcGFjaXR5KGNvbG9yLCBvcGFjaXR5KSB7XHJcbiAgICBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JhXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JcIikpIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBjb2xvclxyXG4gICAgICAgICAgICAuc3Vic3RyKGNvbG9yLmluZGV4T2YoXCIoXCIpICsgMSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYlswXSArIFwiLFwiICsgcmdiWzFdICsgXCIsXCIgKyByZ2JbMl0gKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJnYiA9IGhleFRvUkdCKGNvbG9yKTtcclxuICAgICAgICBpZiAocmdiID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYi5yICsgXCIsXCIgKyByZ2IuZyArIFwiLFwiICsgcmdiLmIgKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcgKGZvciBleGFtcGxlOiAnIzBhY2RjMCcpLlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IZXgocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmV0dXJuIChcIiNcIiArICgoMSA8PCAyNCkgKyAocmVkIDw8IDE2KSArIChncmVlbiA8PCA4KSArIGJsdWUpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XHJcbn1cclxuLyoqXHJcbiAqIFBhcnNlIGEgY29sb3IgcHJvcGVydHkgaW50byBhbiBvYmplY3Qgd2l0aCBib3JkZXIsIGJhY2tncm91bmQsIGFuZCBoaWdobGlnaHQgY29sb3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5wdXRDb2xvciAtIFNob3J0aGFuZCBjb2xvciBzdHJpbmcgb3IgaW5wdXQgY29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0gZGVmYXVsdENvbG9yIC0gRnVsbCBjb2xvciBvYmplY3QgdG8gZmlsbCBpbiBtaXNzaW5nIHZhbHVlcyBpbiBpbnB1dENvbG9yLlxyXG4gKiBAcmV0dXJucyBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0Q29sb3IsIGRlZmF1bHRDb2xvcikge1xyXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0Q29sb3IpKSB7XHJcbiAgICAgICAgbGV0IGNvbG9yU3RyID0gaW5wdXRDb2xvcjtcclxuICAgICAgICBpZiAoaXNWYWxpZFJHQihjb2xvclN0cikpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiID0gY29sb3JTdHJcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoNClcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3JTdHIubGVuZ3RoIC0gNSlcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29sb3JTdHIgPSBSR0JUb0hleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVmFsaWRIZXgoY29sb3JTdHIpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSFNWKGNvbG9yU3RyKTtcclxuICAgICAgICAgICAgY29uc3QgbGlnaHRlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBoc3YucyAqIDAuOCxcclxuICAgICAgICAgICAgICAgIHY6IE1hdGgubWluKDEsIGhzdi52ICogMS4wMiksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBNYXRoLm1pbigxLCBoc3YucyAqIDEuMjUpLFxyXG4gICAgICAgICAgICAgICAgdjogaHN2LnYgKiAwLjgsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySGV4ID0gSFNWVG9IZXgoZGFya2VyQ29sb3JIU1YuaCwgZGFya2VyQ29sb3JIU1YucywgZGFya2VyQ29sb3JIU1Yudik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhleCA9IEhTVlRvSGV4KGxpZ2h0ZXJDb2xvckhTVi5oLCBsaWdodGVyQ29sb3JIU1YucywgbGlnaHRlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q29sb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgZGVmYXVsdENvbG9yLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IGRlZmF1bHRDb2xvci5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5ob3ZlciAmJiBpbnB1dENvbG9yLmhvdmVyLmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuYmFja2dyb3VuZCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogaXNTdHJpbmcoaW5wdXRDb2xvci5oaWdobGlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBSR0IgXFw8MCwgMjU1XFw+IGludG8gSFNWIG9iamVjdC5cclxuICpcclxuICogQHJlbWFya3NcclxuICoge0BsaW5rIGh0dHA6Ly93d3cuamF2YXNjcmlwdGVyLm5ldC9mYXEvcmdiMmhzdi5odG19XHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhTViBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBSR0JUb0hTVihyZWQsIGdyZWVuLCBibHVlKSB7XHJcbiAgICByZWQgPSByZWQgLyAyNTU7XHJcbiAgICBncmVlbiA9IGdyZWVuIC8gMjU1O1xyXG4gICAgYmx1ZSA9IGJsdWUgLyAyNTU7XHJcbiAgICBjb25zdCBtaW5SR0IgPSBNYXRoLm1pbihyZWQsIE1hdGgubWluKGdyZWVuLCBibHVlKSk7XHJcbiAgICBjb25zdCBtYXhSR0IgPSBNYXRoLm1heChyZWQsIE1hdGgubWF4KGdyZWVuLCBibHVlKSk7XHJcbiAgICAvLyBCbGFjay1ncmF5LXdoaXRlXHJcbiAgICBpZiAobWluUkdCID09PSBtYXhSR0IpIHtcclxuICAgICAgICByZXR1cm4geyBoOiAwLCBzOiAwLCB2OiBtaW5SR0IgfTtcclxuICAgIH1cclxuICAgIC8vIENvbG9ycyBvdGhlciB0aGFuIGJsYWNrLWdyYXktd2hpdGU6XHJcbiAgICBjb25zdCBkID0gcmVkID09PSBtaW5SR0IgPyBncmVlbiAtIGJsdWUgOiBibHVlID09PSBtaW5SR0IgPyByZWQgLSBncmVlbiA6IGJsdWUgLSByZWQ7XHJcbiAgICBjb25zdCBoID0gcmVkID09PSBtaW5SR0IgPyAzIDogYmx1ZSA9PT0gbWluUkdCID8gMSA6IDU7XHJcbiAgICBjb25zdCBodWUgPSAoNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSkpIC8gMzYwO1xyXG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IChtYXhSR0IgLSBtaW5SR0IpIC8gbWF4UkdCO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtYXhSR0I7XHJcbiAgICByZXR1cm4geyBoOiBodWUsIHM6IHNhdHVyYXRpb24sIHY6IHZhbHVlIH07XHJcbn1cclxuLyoqXHJcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBpbnRvIGFuIG9iamVjdCB3aXRoIGtleS92YWx1ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gQ1NTIHNvdXJjZSBjb2RlIHRvIHNwbGl0IGludG8ga2V5L3ZhbHVlIG9iamVjdC5cclxuICogQHJldHVybnMgS2V5L3ZhbHVlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHtAbGluayBjc3NUZXh0fS5cclxuICovXHJcbmZ1bmN0aW9uIHNwbGl0Q1NTVGV4dChjc3NUZXh0KSB7XHJcbiAgICBjb25zdCB0bXBFbGxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB7fTtcclxuICAgIHRtcEVsbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bXBFbGxlbWVudC5zdHlsZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIHN0eWxlc1t0bXBFbGxlbWVudC5zdHlsZVtpXV0gPSB0bXBFbGxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRtcEVsbGVtZW50LnN0eWxlW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbn1cclxuLyoqXHJcbiAqIEFwcGVuZCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgdG8gYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgc3R5bGVzLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgYXBwZW5kZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDc3NUZXh0KGVsZW1lbnQsIGNzc1RleHQpIHtcclxuICAgIGNvbnN0IGNzc1N0eWxlID0gc3BsaXRDU1NUZXh0KGNzc1RleHQpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3NzU3R5bGUpKSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCBzdHlsZXMgc2hvdWxkIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gVGhlIHN0eWxlcyB0byBiZSByZW1vdmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamlqYWNrc29uLzUzMTEyNTZ9XHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb1JHQihoLCBzLCB2KSB7XHJcbiAgICBsZXQgcjtcclxuICAgIGxldCBnO1xyXG4gICAgbGV0IGI7XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihoICogNik7XHJcbiAgICBjb25zdCBmID0gaCAqIDYgLSBpO1xyXG4gICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xyXG4gICAgY29uc3QgcSA9IHYgKiAoMSAtIGYgKiBzKTtcclxuICAgIGNvbnN0IHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyk7XHJcbiAgICBzd2l0Y2ggKGkgJSA2KSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAociA9IHYpLCAoZyA9IHQpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIChyID0gcSksIChnID0gdiksIChiID0gcCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSB2KSwgKGIgPSB0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAociA9IHApLCAoZyA9IHEpLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIChyID0gdCksIChnID0gcCksIChiID0gdik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSBwKSwgKGIgPSBxKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHI6IE1hdGguZmxvb3IociAqIDI1NSksXHJcbiAgICAgICAgZzogTWF0aC5mbG9vcihnICogMjU1KSxcclxuICAgICAgICBiOiBNYXRoLmZsb29yKGIgKiAyNTUpLFxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb0hleChoLCBzLCB2KSB7XHJcbiAgICBjb25zdCByZ2IgPSBIU1ZUb1JHQihoLCBzLCB2KTtcclxuICAgIHJldHVybiBSR0JUb0hleChyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBoZXggY29sb3Igc3RyaW5nIGludG8gSFNWIFxcPDAsIDFcXD4uXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gaGV4VG9IU1YoaGV4KSB7XHJcbiAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihoZXgpO1xyXG4gICAgaWYgKCFyZ2IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHtoZXh9JyBpcyBub3QgYSB2YWxpZCBjb2xvci5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSR0JUb0hTVihyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgaGV4IGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIGhleCAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xyXG4gICAgY29uc3QgaXNPayA9IC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XHJcbiAgICByZXR1cm4gaXNPaztcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCIGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHJnYiAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCKHJnYikge1xyXG4gICAgcmV0dXJuIHJnYlJFLnRlc3QocmdiKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCQSBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2JhIC0gVW5rbm93biBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBhIGNvbG9yLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzVmFsaWRSR0JBKHJnYmEpIHtcclxuICAgIHJldHVybiByZ2JhUkUudGVzdChyZ2JhKTtcclxufVxyXG4vKipcclxuICogVGhpcyByZWN1cnNpdmVseSByZWRpcmVjdHMgdGhlIHByb3RvdHlwZSBvZiBKU09OIG9iamVjdHMgdG8gdGhlIHJlZmVyZW5jZU9iamVjdC5cclxuICogVGhpcyBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZHMgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHRvIGJlIGJyaWRnZWQuXHJcbiAqIEBwYXJhbSByZWZlcmVuY2VPYmplY3QgLSBUaGUgb3JpZ2luYWwgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVCcmlkZ2VPYmplY3QoZmllbGRzLCByZWZlcmVuY2VPYmplY3QpIHtcclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIHJlZmVyZW5jZU9iamVjdCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIC8vICEhISB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICBjb25zdCBvYmplY3RUbyA9IE9iamVjdC5jcmVhdGUocmVmZXJlbmNlT2JqZWN0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZmVyZW5jZU9iamVjdCwgZmllbGRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0VG9bZmllbGRzW2ldXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFRvO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgVGhlIEVsZW1lbnQgaWYgdGhlIHJlZmVyZW5jZU9iamVjdCBpcyBhbiBFbGVtZW50LCBvciBhIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiByZWZlcmVuY2VPYmplY3QgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gQXZvaWQgYnJpZGdpbmcgRE9NIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlT2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGkpKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ldID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFRvW2ldID0gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0VG87XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgc3RhYmxlIHNvcnQgaW1wbGVtZW50YXRpb24sIHZlcnkgZmFzdCBmb3IgcHJlc29ydGVkIGRhdGEuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIGFycmF5IHRvIGJlIHNvcnRlZCAoaW4tcGxhY2UpLlxyXG4gKiBAcGFyYW0gY29tcGFyZSAtIEFuIG9yZGVyIGNvbXBhcmF0b3IuXHJcbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5zZXJ0U29ydChhLCBjb21wYXJlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBrID0gYVtpXTtcclxuICAgICAgICBsZXQgajtcclxuICAgICAgICBmb3IgKGogPSBpOyBqID4gMCAmJiBjb21wYXJlKGssIGFbaiAtIDFdKSA8IDA7IGotLSkge1xyXG4gICAgICAgICAgICBhW2pdID0gYVtqIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFbal0gPSBrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIG9wdGlvbnMgb2Ygc3Vib2JqZWN0cyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXHJcbiAqXHJcbiAqIEEgcmVxdWlyZW1lbnQgb2YgdGhlc2Ugc3Vib2JqZWN0cyBpcyB0aGF0IHRoZXkgaGF2ZSBhbiAnZW5hYmxlZCcgZWxlbWVudFxyXG4gKiB3aGljaCBpcyBvcHRpb25hbCBmb3IgdGhlIHVzZXIgYnV0IG1hbmRhdG9yeSBmb3IgdGhlIHByb2dyYW0uXHJcbiAqXHJcbiAqIFRoZSBhZGRlZCB2YWx1ZSBoZXJlIG9mIHRoZSBtZXJnZSBpcyB0aGF0IG9wdGlvbiAnZW5hYmxlZCcgaXMgc2V0IGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWVyZ2VUYXJnZXQgLSBFaXRoZXIgdGhpcy5vcHRpb25zIG9yIHRoZSBvcHRpb25zIHVzZWQgZm9yIHRoZSBncm91cHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICogQHBhcmFtIG9wdGlvbiAtIE9wdGlvbiBrZXkgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSBnbG9iYWxPcHRpb25zIC0gR2xvYmFsIG9wdGlvbnMsIHBhc3NlZCBpbiB0byBkZXRlcm1pbmUgdmFsdWUgb2Ygb3B0aW9uICdlbmFibGVkJy5cclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhtZXJnZVRhcmdldCwgb3B0aW9ucywgb3B0aW9uLCBnbG9iYWxPcHRpb25zID0ge30pIHtcclxuICAgIC8vIExvY2FsIGhlbHBlcnNcclxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9iaiAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIjtcclxuICAgIH07XHJcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzQ0OTEyODcvMTIyMzUzMVxyXG4gICAgY29uc3QgaXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHggaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCB4KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8vIEd1YXJkc1xyXG4gICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbWVyZ2VUYXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzUHJlc2VudChvcHRpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgZ2xvYmFsT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyBBY3R1YWwgbWVyZ2Ugcm91dGluZSwgc2VwYXJhdGVkIGZyb20gbWFpbiBsb2dpY1xyXG4gICAgLy8gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBvcHRpb25zIGlzIG1lcmdlZC4gRGVlcGVyIGxldmVscyBhcmUgcmVmJ2QuIFRoaXMgbWF5IGFjdHVhbGx5IGJlIGFuIGlzc3VlLlxyXG4gICAgLy9cclxuICAgIGNvbnN0IGRvTWVyZ2UgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KHRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbb3B0aW9uXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcmMgPSBvcHRpb25zW29wdGlvbl07XHJcbiAgICAgICAgY29uc3QgZHN0ID0gdGFyZ2V0W29wdGlvbl07XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNyYywgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRzdFtwcm9wXSA9IHNyY1twcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBMb2NhbCBpbml0aWFsaXphdGlvblxyXG4gICAgY29uc3Qgc3JjT3B0aW9uID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgY29uc3QgZ2xvYmFsUGFzc2VkID0gaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykgJiYgIWlzRW1wdHkoZ2xvYmFsT3B0aW9ucyk7XHJcbiAgICBjb25zdCBnbG9iYWxPcHRpb24gPSBnbG9iYWxQYXNzZWQgPyBnbG9iYWxPcHRpb25zW29wdGlvbl0gOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBnbG9iYWxFbmFibGVkID0gZ2xvYmFsT3B0aW9uID8gZ2xvYmFsT3B0aW9uLmVuYWJsZWQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTWFpbiByb3V0aW5lXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgaWYgKHNyY09wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNyY09wdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gc3JjT3B0aW9uO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChzcmNPcHRpb24gPT09IG51bGwgJiYgIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgLy8gSWYgcG9zc2libGUsIGV4cGxpY2l0IGNvcHkgZnJvbSBnbG9iYWxzXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChnbG9iYWxPcHRpb24pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KHNyY09wdGlvbikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gRW5zdXJlIHRoYXQgJ2VuYWJsZWQnIGlzIHByb3Blcmx5IHNldC4gSXQgaXMgcmVxdWlyZWQgaW50ZXJuYWxseVxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBmcm9tIG9wdGlvbnMgd2lsbCBhbHdheXMgb3ZlcndyaXRlIHRoZSBleGlzdGluZyB2YWx1ZVxyXG4gICAgLy9cclxuICAgIGxldCBlbmFibGVkID0gdHJ1ZTsgLy8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgaWYgKHNyY09wdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBlbmFibGVkID0gc3JjT3B0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBUYWtlIGZyb20gZ2xvYmFscywgaWYgcHJlc2VudFxyXG4gICAgICAgIGlmIChnbG9iYWxFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IGdsb2JhbE9wdGlvbi5lbmFibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRvTWVyZ2UobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbik7XHJcbiAgICBtZXJnZVRhcmdldFtvcHRpb25dLmVuYWJsZWQgPSBlbmFibGVkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBiaW5hcnkgc2VhcmNoIGZvciBhIHZpc2libGUgaXRlbSBpbiBhIHNvcnRlZCBsaXN0LiBJZiB3ZSBmaW5kIGEgdmlzaWJsZSBpdGVtLCB0aGUgY29kZSB0aGF0IHVzZXNcclxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4gaXRlcmF0ZSBpbiBib3RoIGRpcmVjdGlvbnMgb3ZlciB0aGlzIHNvcnRlZCBsaXN0IHRvIGZpbmQgYWxsIHZpc2libGUgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBJdGVtcyBvcmRlcmVkIGJ5IHN0YXJ0LlxyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIC0xIGlzIGxvd2VyLCAwIGlzIGVxdWFsLCAxIGlzIGhpZ2hlci5cclxuICogQHBhcmFtIGZpZWxkIC0gUHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdKS5cclxuICogQHBhcmFtIGZpZWxkMiAtIFNlY29uZCBwcm9wZXJ0eSBuYW1lIG9uIGFuIGl0ZW0gKFRoYXQgaXMgaXRlbVtmaWVsZF1bZmllbGQyXSkuXHJcbiAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBmb3VuZCBpdGVtIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoQ3VzdG9tKG9yZGVyZWRJdGVtcywgY29tcGFyYXRvciwgZmllbGQsIGZpZWxkMikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQyID09PSB1bmRlZmluZWQgPyBpdGVtW2ZpZWxkXSA6IGl0ZW1bZmllbGRdW2ZpZWxkMl07XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGppaGFhLCBmb3VuZCBhIHZpc2libGUgaXRlbSFcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoUmVzdWx0ID09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBzbWFsbCAtLT4gaW5jcmVhc2UgbG93XHJcbiAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyB2YWx1ZSBpbiBhIHNvcnRlZCBhcnJheS5cclxuICogSWYgaXQgZG9lcyBub3QgZXhpc3QgYnV0IGlzIGluIGJldHdlZW4gb2YgdHdvIHZhbHVlcywgd2UgcmV0dXJuIGVpdGhlciB0aGVcclxuICogb25lIGJlZm9yZSBvciB0aGUgb25lIGFmdGVyLCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCBJZiBpdCBpcyBmb3VuZCwgd2VcclxuICogcmV0dXJuIHRoZSBpbmRleCwgZWxzZSAtMS5cclxuICpcclxuICogQHBhcmFtIG9yZGVyZWRJdGVtcyAtIFNvcnRlZCBhcnJheS5cclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSBzZWFyY2hlZCB2YWx1ZS5cclxuICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gaXRlbXMgdG8gYmUgc2VhcmNoZWQuXHJcbiAqIEBwYXJhbSBzaWRlUHJlZmVyZW5jZSAtIElmIHRoZSB0YXJnZXQgaXMgYmV0d2VlbiB0d28gdmFsdWVzLCBzaG91bGQgdGhlIGluZGV4IG9mIHRoZSBiZWZvcmUgb3IgdGhlIGFmdGVyIGJlIHJldHVybmVkP1xyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIEFuIG9wdGlvbmFsIGNvbXBhcmF0b3IsIHJldHVybmluZyAtMSwgMCwgMSBmb3IgXFw8LCA9PT0sIFxcPi5cclxuICogQHJldHVybnMgVGhlIGluZGV4IG9mIGZvdW5kIHZhbHVlIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoVmFsdWUob3JkZXJlZEl0ZW1zLCB0YXJnZXQsIGZpZWxkLCBzaWRlUHJlZmVyZW5jZSwgY29tcGFyYXRvcikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgcHJldlZhbHVlO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IG5leHRWYWx1ZTtcclxuICAgIGxldCBtaWRkbGU7XHJcbiAgICBjb21wYXJhdG9yID1cclxuICAgICAgICBjb21wYXJhdG9yICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGNvbXBhcmF0b3JcclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYiA/IDAgOiBhIDwgYiA/IC0xIDogMTtcclxuICAgICAgICAgICAgfTtcclxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKSB7XHJcbiAgICAgICAgLy8gZ2V0IGEgbmV3IGd1ZXNzXHJcbiAgICAgICAgbWlkZGxlID0gTWF0aC5mbG9vcigwLjUgKiAoaGlnaCArIGxvdykpO1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IG9yZGVyZWRJdGVtc1tNYXRoLm1heCgwLCBtaWRkbGUgLSAxKV1bZmllbGRdO1xyXG4gICAgICAgIHZhbHVlID0gb3JkZXJlZEl0ZW1zW21pZGRsZV1bZmllbGRdO1xyXG4gICAgICAgIG5leHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIG9yZGVyZWRJdGVtc1tNYXRoLm1pbihvcmRlcmVkSXRlbXMubGVuZ3RoIC0gMSwgbWlkZGxlICsgMSldW2ZpZWxkXTtcclxuICAgICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcihwcmV2VmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCIgPyBNYXRoLm1heCgwLCBtaWRkbGUgLSAxKSA6IG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA8IDAgJiZcclxuICAgICAgICAgICAgY29tcGFyYXRvcihuZXh0VmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dFxyXG4gICAgICAgICAgICByZXR1cm4gc2lkZVByZWZlcmVuY2UgPT0gXCJiZWZvcmVcIlxyXG4gICAgICAgICAgICAgICAgPyBtaWRkbGVcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlkbnQgZmluZCB0aGUgdGFyZ2V0LCB3ZSBuZWVkIHRvIGNoYW5nZSBvdXIgYm91bmRhcmllcy5cclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICAgICAgbG93ID0gbWlkZGxlICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBiaWcgLS0+IGRlY3JlYXNlIGhpZ2hcclxuICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgfVxyXG4gICAgLy8gZGlkbnQgZmluZCBhbnl0aGluZy4gUmV0dXJuIC0xLlxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qXHJcbiAqIEVhc2luZyBGdW5jdGlvbnMuXHJcbiAqIE9ubHkgY29uc2lkZXJpbmcgdGhlIHQgdmFsdWUgZm9yIHRoZSByYW5nZSBbMCwgMV0gPT4gWzAsIDFdLlxyXG4gKlxyXG4gKiBJbnNwaXJhdGlvbjogZnJvbSBodHRwOi8vZ2l6bWEuY29tL2Vhc2luZy9cclxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTRcclxuICovXHJcbmNvbnN0IGVhc2luZ0Z1bmN0aW9ucyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgbm8gZWFzaW5nIGFuZCBubyBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBsaW5lYXIodCkge1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5RdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5DdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRDdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gMSAtIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKyAtLXQgKiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAxNiAqIHQgKiB0ICogdCAqIHQgKiB0IDogMSArIDE2ICogLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFeHBlcmltZW50YWx5IGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRoZSBzY3JvbGxiYXIgZm9yIHRoaXMgYnJvd3Nlci5cclxuICpcclxuICogQHJldHVybnMgVGhlIHdpZHRoIGluIHBpeGVscy5cclxuICovXHJcbmZ1bmN0aW9uIGdldFNjcm9sbEJhcldpZHRoKCkge1xyXG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGlubmVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XHJcbiAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIG91dGVyLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSBcIjIwMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcclxuICAgIGNvbnN0IHcxID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XHJcbiAgICBsZXQgdzIgPSBpbm5lci5vZmZzZXRXaWR0aDtcclxuICAgIGlmICh3MSA9PSB3Mikge1xyXG4gICAgICAgIHcyID0gb3V0ZXIuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcclxuICAgIHJldHVybiB3MSAtIHcyO1xyXG59XHJcbi8vIEBUT0RPOiBUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseS5cclxuLy8gSXQgd29ya3Mgb25seSBmb3Igc2luZ2xlIHByb3BlcnR5IG9iamVjdHMsXHJcbi8vIG90aGVyd2lzZSBpdCBjb21iaW5lcyBhbGwgb2YgdGhlIHR5cGVzIGluIGEgdW5pb24uXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBWMT4gKFxyXG4vLyAgIHBpbGU6IFJlY29yZDxLMSwgdW5kZWZpbmVkIHwgVjE+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBLMSB8IFtLMV1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjFcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIHRvcE1vc3Q8SzEgZXh0ZW5kcyBzdHJpbmcsIEsyIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjI+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgSzMgZXh0ZW5kcyBzdHJpbmcsIFYxLCBWMiwgVjM+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMiB8IFJlY29yZDxLMywgdW5kZWZpbmVkIHwgVjM+Pj5bXSxcclxuLy8gICBhY2Nlc3NvcnM6IFtLMSwgSzIsIEszXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyIHwgVjNcclxuLyoqXHJcbiAqIEdldCB0aGUgdG9wIG1vc3QgcHJvcGVydHkgdmFsdWUgZnJvbSBhIHBpbGUgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHBhcmFtIHBpbGUgLSBBcnJheSBvZiBvYmplY3RzLCBubyByZXF1aXJlZCBmb3JtYXQuXHJcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cclxuICogRm9yIGV4YW1wbGUgYG9iamVjdFsnZm9vJ11bJ2JhciddYCDihpIgYFsnZm9vJywgJ2JhciddYC5cclxuICogQHJldHVybnMgVmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGggZ2l2ZW4gYWNjZXNzb3JzIHBhdGggZnJvbSB0aGUgZmlyc3QgcGlsZSBpdGVtIHdoZXJlIGl0J3Mgbm90IHVuZGVmaW5lZC5cclxuICovXHJcbmZ1bmN0aW9uIHRvcE1vc3QocGlsZSwgYWNjZXNzb3JzKSB7XHJcbiAgICBsZXQgY2FuZGlkYXRlO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjY2Vzc29ycykpIHtcclxuICAgICAgICBhY2Nlc3NvcnMgPSBbYWNjZXNzb3JzXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHBpbGUpIHtcclxuICAgICAgICBpZiAobWVtYmVyKSB7XHJcbiAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG1lbWJlclthY2Nlc3NvcnNbMF1dO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVthY2Nlc3NvcnNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjYW5kaWRhdGU7XHJcbn1cblxuY29uc3QgaHRtbENvbG9ycyA9IHtcbiAgYmxhY2s6IFwiIzAwMDAwMFwiLFxuICBuYXZ5OiBcIiMwMDAwODBcIixcbiAgZGFya2JsdWU6IFwiIzAwMDA4QlwiLFxuICBtZWRpdW1ibHVlOiBcIiMwMDAwQ0RcIixcbiAgYmx1ZTogXCIjMDAwMEZGXCIsXG4gIGRhcmtncmVlbjogXCIjMDA2NDAwXCIsXG4gIGdyZWVuOiBcIiMwMDgwMDBcIixcbiAgdGVhbDogXCIjMDA4MDgwXCIsXG4gIGRhcmtjeWFuOiBcIiMwMDhCOEJcIixcbiAgZGVlcHNreWJsdWU6IFwiIzAwQkZGRlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIiMwMENFRDFcIixcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiIzAwRkE5QVwiLFxuICBsaW1lOiBcIiMwMEZGMDBcIixcbiAgc3ByaW5nZ3JlZW46IFwiIzAwRkY3RlwiLFxuICBhcXVhOiBcIiMwMEZGRkZcIixcbiAgY3lhbjogXCIjMDBGRkZGXCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIjMTkxOTcwXCIsXG4gIGRvZGdlcmJsdWU6IFwiIzFFOTBGRlwiLFxuICBsaWdodHNlYWdyZWVuOiBcIiMyMEIyQUFcIixcbiAgZm9yZXN0Z3JlZW46IFwiIzIyOEIyMlwiLFxuICBzZWFncmVlbjogXCIjMkU4QjU3XCIsXG4gIGRhcmtzbGF0ZWdyYXk6IFwiIzJGNEY0RlwiLFxuICBsaW1lZ3JlZW46IFwiIzMyQ0QzMlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIjM0NCMzcxXCIsXG4gIHR1cnF1b2lzZTogXCIjNDBFMEQwXCIsXG4gIHJveWFsYmx1ZTogXCIjNDE2OUUxXCIsXG4gIHN0ZWVsYmx1ZTogXCIjNDY4MkI0XCIsXG4gIGRhcmtzbGF0ZWJsdWU6IFwiIzQ4M0Q4QlwiLFxuICBtZWRpdW10dXJxdW9pc2U6IFwiIzQ4RDFDQ1wiLFxuICBpbmRpZ286IFwiIzRCMDA4MlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCIjNTU2QjJGXCIsXG4gIGNhZGV0Ymx1ZTogXCIjNUY5RUEwXCIsXG4gIGNvcm5mbG93ZXJibHVlOiBcIiM2NDk1RURcIixcbiAgbWVkaXVtYXF1YW1hcmluZTogXCIjNjZDREFBXCIsXG4gIGRpbWdyYXk6IFwiIzY5Njk2OVwiLFxuICBzbGF0ZWJsdWU6IFwiIzZBNUFDRFwiLFxuICBvbGl2ZWRyYWI6IFwiIzZCOEUyM1wiLFxuICBzbGF0ZWdyYXk6IFwiIzcwODA5MFwiLFxuICBsaWdodHNsYXRlZ3JheTogXCIjNzc4ODk5XCIsXG4gIG1lZGl1bXNsYXRlYmx1ZTogXCIjN0I2OEVFXCIsXG4gIGxhd25ncmVlbjogXCIjN0NGQzAwXCIsXG4gIGNoYXJ0cmV1c2U6IFwiIzdGRkYwMFwiLFxuICBhcXVhbWFyaW5lOiBcIiM3RkZGRDRcIixcbiAgbWFyb29uOiBcIiM4MDAwMDBcIixcbiAgcHVycGxlOiBcIiM4MDAwODBcIixcbiAgb2xpdmU6IFwiIzgwODAwMFwiLFxuICBncmF5OiBcIiM4MDgwODBcIixcbiAgc2t5Ymx1ZTogXCIjODdDRUVCXCIsXG4gIGxpZ2h0c2t5Ymx1ZTogXCIjODdDRUZBXCIsXG4gIGJsdWV2aW9sZXQ6IFwiIzhBMkJFMlwiLFxuICBkYXJrcmVkOiBcIiM4QjAwMDBcIixcbiAgZGFya21hZ2VudGE6IFwiIzhCMDA4QlwiLFxuICBzYWRkbGVicm93bjogXCIjOEI0NTEzXCIsXG4gIGRhcmtzZWFncmVlbjogXCIjOEZCQzhGXCIsXG4gIGxpZ2h0Z3JlZW46IFwiIzkwRUU5MFwiLFxuICBtZWRpdW1wdXJwbGU6IFwiIzkzNzBEOFwiLFxuICBkYXJrdmlvbGV0OiBcIiM5NDAwRDNcIixcbiAgcGFsZWdyZWVuOiBcIiM5OEZCOThcIixcbiAgZGFya29yY2hpZDogXCIjOTkzMkNDXCIsXG4gIHllbGxvd2dyZWVuOiBcIiM5QUNEMzJcIixcbiAgc2llbm5hOiBcIiNBMDUyMkRcIixcbiAgYnJvd246IFwiI0E1MkEyQVwiLFxuICBkYXJrZ3JheTogXCIjQTlBOUE5XCIsXG4gIGxpZ2h0Ymx1ZTogXCIjQUREOEU2XCIsXG4gIGdyZWVueWVsbG93OiBcIiNBREZGMkZcIixcbiAgcGFsZXR1cnF1b2lzZTogXCIjQUZFRUVFXCIsXG4gIGxpZ2h0c3RlZWxibHVlOiBcIiNCMEM0REVcIixcbiAgcG93ZGVyYmx1ZTogXCIjQjBFMEU2XCIsXG4gIGZpcmVicmljazogXCIjQjIyMjIyXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiI0I4ODYwQlwiLFxuICBtZWRpdW1vcmNoaWQ6IFwiI0JBNTVEM1wiLFxuICByb3N5YnJvd246IFwiI0JDOEY4RlwiLFxuICBkYXJra2hha2k6IFwiI0JEQjc2QlwiLFxuICBzaWx2ZXI6IFwiI0MwQzBDMFwiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiI0M3MTU4NVwiLFxuICBpbmRpYW5yZWQ6IFwiI0NENUM1Q1wiLFxuICBwZXJ1OiBcIiNDRDg1M0ZcIixcbiAgY2hvY29sYXRlOiBcIiNEMjY5MUVcIixcbiAgdGFuOiBcIiNEMkI0OENcIixcbiAgbGlnaHRncmV5OiBcIiNEM0QzRDNcIixcbiAgcGFsZXZpb2xldHJlZDogXCIjRDg3MDkzXCIsXG4gIHRoaXN0bGU6IFwiI0Q4QkZEOFwiLFxuICBvcmNoaWQ6IFwiI0RBNzBENlwiLFxuICBnb2xkZW5yb2Q6IFwiI0RBQTUyMFwiLFxuICBjcmltc29uOiBcIiNEQzE0M0NcIixcbiAgZ2FpbnNib3JvOiBcIiNEQ0RDRENcIixcbiAgcGx1bTogXCIjRERBMEREXCIsXG4gIGJ1cmx5d29vZDogXCIjREVCODg3XCIsXG4gIGxpZ2h0Y3lhbjogXCIjRTBGRkZGXCIsXG4gIGxhdmVuZGVyOiBcIiNFNkU2RkFcIixcbiAgZGFya3NhbG1vbjogXCIjRTk5NjdBXCIsXG4gIHZpb2xldDogXCIjRUU4MkVFXCIsXG4gIHBhbGVnb2xkZW5yb2Q6IFwiI0VFRThBQVwiLFxuICBsaWdodGNvcmFsOiBcIiNGMDgwODBcIixcbiAga2hha2k6IFwiI0YwRTY4Q1wiLFxuICBhbGljZWJsdWU6IFwiI0YwRjhGRlwiLFxuICBob25leWRldzogXCIjRjBGRkYwXCIsXG4gIGF6dXJlOiBcIiNGMEZGRkZcIixcbiAgc2FuZHlicm93bjogXCIjRjRBNDYwXCIsXG4gIHdoZWF0OiBcIiNGNURFQjNcIixcbiAgYmVpZ2U6IFwiI0Y1RjVEQ1wiLFxuICB3aGl0ZXNtb2tlOiBcIiNGNUY1RjVcIixcbiAgbWludGNyZWFtOiBcIiNGNUZGRkFcIixcbiAgZ2hvc3R3aGl0ZTogXCIjRjhGOEZGXCIsXG4gIHNhbG1vbjogXCIjRkE4MDcyXCIsXG4gIGFudGlxdWV3aGl0ZTogXCIjRkFFQkQ3XCIsXG4gIGxpbmVuOiBcIiNGQUYwRTZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiI0ZBRkFEMlwiLFxuICBvbGRsYWNlOiBcIiNGREY1RTZcIixcbiAgcmVkOiBcIiNGRjAwMDBcIixcbiAgZnVjaHNpYTogXCIjRkYwMEZGXCIsXG4gIG1hZ2VudGE6IFwiI0ZGMDBGRlwiLFxuICBkZWVwcGluazogXCIjRkYxNDkzXCIsXG4gIG9yYW5nZXJlZDogXCIjRkY0NTAwXCIsXG4gIHRvbWF0bzogXCIjRkY2MzQ3XCIsXG4gIGhvdHBpbms6IFwiI0ZGNjlCNFwiLFxuICBjb3JhbDogXCIjRkY3RjUwXCIsXG4gIGRhcmtvcmFuZ2U6IFwiI0ZGOEMwMFwiLFxuICBsaWdodHNhbG1vbjogXCIjRkZBMDdBXCIsXG4gIG9yYW5nZTogXCIjRkZBNTAwXCIsXG4gIGxpZ2h0cGluazogXCIjRkZCNkMxXCIsXG4gIHBpbms6IFwiI0ZGQzBDQlwiLFxuICBnb2xkOiBcIiNGRkQ3MDBcIixcbiAgcGVhY2hwdWZmOiBcIiNGRkRBQjlcIixcbiAgbmF2YWpvd2hpdGU6IFwiI0ZGREVBRFwiLFxuICBtb2NjYXNpbjogXCIjRkZFNEI1XCIsXG4gIGJpc3F1ZTogXCIjRkZFNEM0XCIsXG4gIG1pc3R5cm9zZTogXCIjRkZFNEUxXCIsXG4gIGJsYW5jaGVkYWxtb25kOiBcIiNGRkVCQ0RcIixcbiAgcGFwYXlhd2hpcDogXCIjRkZFRkQ1XCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiI0ZGRjBGNVwiLFxuICBzZWFzaGVsbDogXCIjRkZGNUVFXCIsXG4gIGNvcm5zaWxrOiBcIiNGRkY4RENcIixcbiAgbGVtb25jaGlmZm9uOiBcIiNGRkZBQ0RcIixcbiAgZmxvcmFsd2hpdGU6IFwiI0ZGRkFGMFwiLFxuICBzbm93OiBcIiNGRkZBRkFcIixcbiAgeWVsbG93OiBcIiNGRkZGMDBcIixcbiAgbGlnaHR5ZWxsb3c6IFwiI0ZGRkZFMFwiLFxuICBpdm9yeTogXCIjRkZGRkYwXCIsXG4gIHdoaXRlOiBcIiNGRkZGRkZcIixcbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gKi9cbmxldCBDb2xvclBpY2tlciQxID0gY2xhc3MgQ29sb3JQaWNrZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwaXhlbFJhdGlvID0gMSkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiAyODkgLyAyLCB5OiAyODkgLyAyIH07XG4gICAgdGhpcy5yID0gMjg5ICogMC40OTtcbiAgICB0aGlzLmNvbG9yID0geyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhOiAxLjAgfTtcbiAgICB0aGlzLmh1ZUNpcmNsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmluaXRpYWxDb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5wcmV2aW91c0NvbG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLy8gYm91bmQgYnlcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gKCkgPT4ge307XG5cbiAgICAvLyBjcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgIHRoaXMuX2NyZWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgaW5zZXJ0cyB0aGUgY29sb3JQaWNrZXIgaW50byBhIGRpdiBmcm9tIHRoZSBET01cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAgICovXG4gIGluc2VydFRvKGNvbnRhaW5lcikge1xuICAgIGlmICh0aGlzLmhhbW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuXG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldFVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIG9uIGFwcGx5IGFuZCBzYXZlLiBCaW5kIGl0IHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgc2V0Q2xvc2VDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIGNsb3NpbmcgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gaHRtbENvbG9yc1tjb2xvcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29sb3Igb2YgdGhlIGNvbG9yUGlja2VyXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAncmVkJyAgICAgICAgICAgICAgICAgICAtLT4gSFRNTCBjb2xvciBzdHJpbmdcbiAgICogJyNmZmZmZmYnICAgICAgICAgICAgICAgLS0+IGhleCBzdHJpbmdcbiAgICogJ3JnYigyNTUsMjU1LDI1NSknICAgICAgLS0+IHJnYiBzdHJpbmdcbiAgICogJ3JnYmEoMjU1LDI1NSwyNTUsMS4wKScgLS0+IHJnYmEgc3RyaW5nXG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NX0gICAgIC0tPiByZ2Igb2JqZWN0XG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NSxhOjEuMH0gLS0+IHJnYmEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgb2JqZWN0fSBjb2xvclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqL1xuICBzZXRDb2xvcihjb2xvciwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICBpZiAoY29sb3IgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJnYmE7XG5cbiAgICAvLyBpZiBhIGh0bWwgY29sb3Igc2hvcnRoYW5kIGlzIHVzZWQsIGNvbnZlcnQgdG8gaGV4XG4gICAgY29uc3QgaHRtbENvbG9yID0gdGhpcy5faXNDb2xvclN0cmluZyhjb2xvcik7XG4gICAgaWYgKGh0bWxDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IGh0bWxDb2xvcjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3JtYXRcbiAgICBpZiAoaXNTdHJpbmcoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICBpZiAoaXNWYWxpZFJHQihjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDQpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA1KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYmFBcnJheVswXSwgZzogcmdiYUFycmF5WzFdLCBiOiByZ2JhQXJyYXlbMl0sIGE6IDEuMCB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkUkdCQShjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDUpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA2KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7XG4gICAgICAgICAgcjogcmdiYUFycmF5WzBdLFxuICAgICAgICAgIGc6IHJnYmFBcnJheVsxXSxcbiAgICAgICAgICBiOiByZ2JhQXJyYXlbMl0sXG4gICAgICAgICAgYTogcmdiYUFycmF5WzNdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZ2JPYmogPSBoZXhUb1JHQihjb2xvcik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYk9iai5yLCBnOiByZ2JPYmouZywgYjogcmdiT2JqLmIsIGE6IDEuMCB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbG9yLnIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmIgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhbHBoYSA9IGNvbG9yLmEgIT09IHVuZGVmaW5lZCA/IGNvbG9yLmEgOiBcIjEuMFwiO1xuICAgICAgICAgIHJnYmEgPSB7IHI6IGNvbG9yLnIsIGc6IGNvbG9yLmcsIGI6IGNvbG9yLmIsIGE6IGFscGhhIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBpZiAocmdiYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biBjb2xvciBwYXNzZWQgdG8gdGhlIGNvbG9yUGlja2VyLiBTdXBwb3J0ZWQgYXJlIHN0cmluZ3M6IHJnYiwgaGV4LCByZ2JhLiBPYmplY3Q6IHJnYiAoe3I6cixnOmcsYjpiLFthOmFdfSkuIFN1cHBsaWVkOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29sb3IpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzaG93cyB0aGUgY29sb3IgcGlja2VyLlxuICAgKiBUaGUgaHVlIGNpcmNsZSBpcyBjb25zdHJ1Y3RlZCBvbmNlIGFuZCBzdG9yZWQuXG4gICAqL1xuICBzaG93KCkge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHRoaXMuX2dlbmVyYXRlSHVlQ2lyY2xlKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwaWNrZXIuIElzIGNhbGxlZCBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogT3B0aW9uYWwgYm9vbGVhbiB0byBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIGVhc3kgYWNjZXNzIGxhdGVyIG9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZVByZXZpb3VzPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGlkZShzdG9yZVByZXZpb3VzID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBwcmV2aW91cyBjb2xvciBmb3IgbmV4dCB0aW1lO1xuICAgIGlmIChzdG9yZVByZXZpb3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQ29sb3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBsaWVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuaW5pdGlhbENvbG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICAgIC8vIGNhbGwgdGhlIGNsb3NpbmcgY2FsbGJhY2ssIHJlc3RvcmluZyB0aGUgb25jbGljayBtZXRob2QuXG4gICAgLy8gdGhpcyBpcyBpbiBhIHNldFRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgdGhlIHNob3cgYWdhaW4gYmVmb3JlIHRoZSBjbGljayBpcyBkb25lLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gdGhlIHNhdmUgYnV0dG9uLiBTYXZlcyBhbmQgaGlkZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2F2ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuX2hpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb3VuZCB0byBhcHBseSBidXR0b24uIFNhdmVzIGJ1dCBkb2VzIG5vdCBjbG9zZS4gSXMgdW5kb25lIGJ5IHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FwcGx5KCkge1xuICAgIHRoaXMuYXBwbGllZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogbG9hZCB0aGUgY29sb3IgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IodGhpcy5wcmV2aW91c0NvbG9yLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KFwiVGhlcmUgaXMgbm8gbGFzdCBjb2xvciB0byBsb2FkLi4uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGNvbG9yLCBwbGFjZSB0aGUgcGlja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZ2JhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NldEluaXRpYWw9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIGNvbG9yXG4gICAgaWYgKHNldEluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgcmdiYSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvciA9IHJnYmE7XG4gICAgY29uc3QgaHN2ID0gUkdCVG9IU1YocmdiYS5yLCByZ2JhLmcsIHJnYmEuYik7XG5cbiAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAyICogTWF0aC5QSTtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLnIgKiBoc3YucztcbiAgICBjb25zdCB4ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcbiAgICBjb25zdCB5ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIHggLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICB5IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudEhlaWdodCArIFwicHhcIjtcblxuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcihyZ2JhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBvcGFjaXR5IGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0T3BhY2l0eSh2YWx1ZSkge1xuICAgIHRoaXMuY29sb3IuYSA9IHZhbHVlIC8gMTAwO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBicmlnaHRuZXNzIGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJpZ2h0bmVzcyh2YWx1ZSkge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi52ID0gdmFsdWUgLyAxMDA7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgY29sb3IgcGlja2VyLiBBIGJsYWNrIGNpcmNsZSBvdmVybGF5cyB0aGUgaHVlIGNpcmNsZSB0byBtaW1pYyB0aGUgYnJpZ2h0bmVzcyBkZWNyZWFzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBpY2tlcihyZ2JhID0gdGhpcy5jb2xvcikge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgfVxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuXG4gICAgY3R4LnB1dEltYWdlRGF0YSh0aGlzLmh1ZUNpcmNsZSwgMCwgMCk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLDAsMCxcIiArICgxIC0gaHN2LnYpICsgXCIpXCI7XG4gICAgY3R4LmNpcmNsZSh0aGlzLmNlbnRlckNvb3JkaW5hdGVzLngsIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSwgdGhpcy5yKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudmFsdWUgPSAxMDAgKiBoc3YudjtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IDEwMCAqIHJnYmEuYTtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgY3JlYXRlIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFNpemUoKSB7XG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLndpZHRoID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuaGVpZ2h0ID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhbGwgZG9tIGVsZW1lbnRzXG4gICAqIFRPRE86IGNsZWFudXAsIGxvdHMgb2Ygc2ltaWxhciBkb20gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5mcmFtZS5jbGFzc05hbWUgPSBcInZpcy1jb2xvci1waWNrZXJcIjtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsYXNzTmFtZSA9IFwidmlzLXNlbGVjdG9yXCI7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcblxuICAgIGlmICghdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KSB7XG4gICAgICBjb25zdCBub0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7XG4gICAgICBub0NhbnZhcy5zdHlsZS5jb2xvciA9IFwicmVkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5wYWRkaW5nID0gXCIxMHB4XCI7XG4gICAgICBub0NhbnZhcy5pbm5lclRleHQgPSBcIkVycm9yOiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MIGNhbnZhc1wiO1xuICAgICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgKGN0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAxKTtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXNcbiAgICAgICAgLmdldENvbnRleHQoXCIyZFwiKVxuICAgICAgICAuc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbG9yXCI7XG5cbiAgICB0aGlzLm9wYWNpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eURpdi5jbGFzc05hbWUgPSBcInZpcy1vcGFjaXR5XCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0Rpdi5jbGFzc05hbWUgPSBcInZpcy1icmlnaHRuZXNzXCI7XG5cbiAgICB0aGlzLmFycm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmFycm93RGl2LmNsYXNzTmFtZSA9IFwidmlzLWFycm93XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS50eXBlID0gXCJyYW5nZVwiOyAvLyBOb3Qgc3VwcG9ydGVkIG9uIElFOVxuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWluID0gXCIwXCI7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5tYXggPSBcIjEwMFwiO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETzogQWRkIHNvbWUgZXJyb3IgaGFuZGxpbmcuXG4gICAgfVxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gXCIxMDBcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5jbGFzc05hbWUgPSBcInZpcy1yYW5nZVwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2LmFwcGVuZENoaWxkKHRoaXMub3BhY2l0eVJhbmdlKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuYXBwZW5kQ2hpbGQodGhpcy5icmlnaHRuZXNzUmFuZ2UpO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLWJyaWdodG5lc3NcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbC5pbm5lclRleHQgPSBcImJyaWdodG5lc3M6XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLW9wYWNpdHlcIjtcbiAgICB0aGlzLm9wYWNpdHlMYWJlbC5pbm5lclRleHQgPSBcIm9wYWNpdHk6XCI7XG5cbiAgICB0aGlzLm5ld0NvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmNsYXNzTmFtZSA9IFwidmlzLW5ldy1jb2xvclwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuaW5uZXJUZXh0ID0gXCJuZXdcIjtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1pbml0aWFsLWNvbG9yXCI7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuaW5uZXJUZXh0ID0gXCJpbml0aWFsXCI7XG5cbiAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1jYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBcImNhbmNlbFwiO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpO1xuXG4gICAgdGhpcy5hcHBseUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5pbm5lclRleHQgPSBcImFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fYXBwbHkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5zYXZlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtc2F2ZVwiO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5pbm5lclRleHQgPSBcInNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24ub25jbGljayA9IHRoaXMuX3NhdmUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubG9hZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5sb2FkQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtbG9hZFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5pbm5lclRleHQgPSBcImxvYWQgbGFzdFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fbG9hZExhc3QuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFycm93RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0xhYmVsKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uZXdDb2xvckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmluaXRpYWxDb2xvckRpdik7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2FuY2VsQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYXBwbHlCdXR0b24pO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5zYXZlQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubG9hZEJ1dHRvbik7XG4gIH1cblxuICAvKipcbiAgICogYmluZCBoYW1tZXIgdG8gdGhlIGNvbG9yIHBpY2tlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lciQxKHRoaXMuY29sb3JQaWNrZXJDYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuaGFtbWVyLm9uKFwiaGFtbWVyLmlucHV0XCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRmlyc3QpIHtcbiAgICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5zdGFydFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5tb3ZlXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIGh1ZSBjaXJjbGUuIFRoaXMgaXMgcmVsYXRpdmVseSBoZWF2eSAoMjAwbXMpIGFuZCBpcyBkb25lIG9ubHkgb25jZSBvbiB0aGUgZmlyc3QgdGltZSBpdCBpcyBzaG93bi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZW5lcmF0ZUh1ZUNpcmNsZSgpIHtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIDEpO1xuICAgICAgfVxuICAgICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgaCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gZHJhdyBodWUgY2lyY2xlXG4gICAgICBsZXQgeCwgeSwgaHVlLCBzYXQ7XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiB3ICogMC41LCB5OiBoICogMC41IH07XG4gICAgICB0aGlzLnIgPSAwLjQ5ICogdztcbiAgICAgIGNvbnN0IGFuZ2xlQ29udmVydCA9ICgyICogTWF0aC5QSSkgLyAzNjA7XG4gICAgICBjb25zdCBoZmFjID0gMSAvIDM2MDtcbiAgICAgIGNvbnN0IHNmYWMgPSAxIC8gdGhpcy5yO1xuICAgICAgbGV0IHJnYjtcbiAgICAgIGZvciAoaHVlID0gMDsgaHVlIDwgMzYwOyBodWUrKykge1xuICAgICAgICBmb3IgKHNhdCA9IDA7IHNhdCA8IHRoaXMucjsgc2F0KyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy54ICsgc2F0ICogTWF0aC5zaW4oYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICB5ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy55ICsgc2F0ICogTWF0aC5jb3MoYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICByZ2IgPSBIU1ZUb1JHQihodWUgKiBoZmFjLCBzYXQgKiBzZmFjLCAxKTtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2IoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCI7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KHggLSAwLjUsIHkgLSAwLjUsIDIsIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMSlcIjtcbiAgICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIHRoaXMuaHVlQ2lyY2xlID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIHNlbGVjdG9yLiBUaGlzIGlzIGNhbGxlZCBieSBoYW1tZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlU2VsZWN0b3IoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb2xvclBpY2tlckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gZXZlbnQuY2VudGVyLnggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gZXZlbnQuY2VudGVyLnkgLSByZWN0LnRvcDtcblxuICAgIGNvbnN0IGNlbnRlclkgPSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyRGl2LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBjZW50ZXJYID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRXaWR0aDtcblxuICAgIGNvbnN0IHggPSBsZWZ0IC0gY2VudGVyWDtcbiAgICBjb25zdCB5ID0gdG9wIC0gY2VudGVyWTtcblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih4LCB5KTtcbiAgICBjb25zdCByYWRpdXMgPSAwLjk4ICogTWF0aC5taW4oTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpLCBjZW50ZXJYKTtcblxuICAgIGNvbnN0IG5ld1RvcCA9IE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclk7XG4gICAgY29uc3QgbmV3TGVmdCA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclg7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUudG9wID1cbiAgICAgIG5ld1RvcCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLmxlZnQgPVxuICAgICAgbmV3TGVmdCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCArIFwicHhcIjtcblxuICAgIC8vIHNldCBjb2xvclxuICAgIGxldCBoID0gYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgIGggPSBoIDwgMCA/IGggKyAxIDogaDtcbiAgICBjb25zdCBzID0gcmFkaXVzIC8gdGhpcy5yO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi5oID0gaDtcbiAgICBoc3YucyA9IHM7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuXG4gICAgLy8gdXBkYXRlIHByZXZpZXdzXG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmNvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gIH1cbn07XG5cbi8qKlxuICogV3JhcCBnaXZlbiB0ZXh0IChsYXN0IGFyZ3VtZW50KSBpbiBIVE1MIGVsZW1lbnRzIChhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cykuXG4gKlxuICogQHBhcmFtIHsuLi5hbnl9IHJlc3QgLSBMaXN0IG9mIHRhZyBuYW1lcyBmb2xsb3dlZCBieSBpbm5lciB0ZXh0LlxuICogQHJldHVybnMgQW4gZWxlbWVudCBvciBhIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gd3JhcEluVGFnKC4uLnJlc3QpIHtcbiAgaWYgKHJlc3QubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cy5cIik7XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdFswXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmVzdFswXSk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoLi4ucmVzdC5zbGljZSgxKSkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGZvciBhbGwgcHJvcGVydGllcyBvZiB0aGlzLnBvc3NpYmxlIG9wdGlvbnMsIHlvdSBjYW4gc3VwcGx5IHRoZSBwcm9wZXJ0eSBuYW1lIGluIGFueSBmb3JtIHRvIGxpc3QgdGhlIG9wdGlvbnMuXG4gKiBCb29sZWFuIG9wdGlvbnMgYXJlIHJlY29nbmlzZWQgYXMgQm9vbGVhblxuICogTnVtYmVyIG9wdGlvbnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtkZWZhdWx0IHZhbHVlLCBtaW4gdmFsdWUsIG1heCB2YWx1ZSwgc3RlcHNpemVdXG4gKiBDb2xvcnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFsnY29sb3InLCAnI2ZmZmZmZiddXG4gKiBTdHJpbmdzIHdpdGggc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtvcHRpb24xLCBvcHRpb24yLCBvcHRpb24zLCAuLl1cbiAqXG4gKiBUaGUgb3B0aW9ucyBhcmUgbWF0Y2hlZCB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiBlYWNoIG9mIHRoZSBtb2R1bGVzIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYXJlXG4gKi9cbmxldCBDb25maWd1cmF0b3IkMSA9IGNsYXNzIENvbmZpZ3VyYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50TW9kdWxlICAgICAgICB8IHRoZSBsb2NhdGlvbiB3aGVyZSBwYXJlbnRNb2R1bGUuc2V0T3B0aW9ucygpIGNhbiBiZSBjYWxsZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRDb250YWluZXIgICAgfCB0aGUgZGVmYXVsdCBjb250YWluZXIgb2YgdGhlIG1vZHVsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlndXJlT3B0aW9ucyAgICB8IHRoZSBmdWxseSBjb25maWd1cmVkIGFuZCBwcmVkZWZpbmVkIG9wdGlvbnMgc2V0IGZvdW5kIGluIGFsbE9wdGlvbnMuanNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBpeGVsUmF0aW8gICAgICAgICAgfCBjYW52YXMgcGl4ZWwgcmF0aW9cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGlkZU9wdGlvbiAgICAgICAgfCBjdXN0b20gbG9naWMgdG8gZHluYW1pY2FsbHkgaGlkZSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnRNb2R1bGUsXG4gICAgZGVmYXVsdENvbnRhaW5lcixcbiAgICBjb25maWd1cmVPcHRpb25zLFxuICAgIHBpeGVsUmF0aW8gPSAxLFxuICAgIGhpZGVPcHRpb24gPSAoKSA9PiBmYWxzZVxuICApIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudE1vZHVsZTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyO1xuICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZU9wdGlvbiA9IGhpZGVPcHRpb247XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5wb3B1cENvdW50ZXIgPSAwO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgIGNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICAgICAgc2hvd0J1dHRvbjogdHJ1ZSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuY29uZmlndXJlT3B0aW9ucyA9IGNvbmZpZ3VyZU9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0ge307XG4gICAgdGhpcy5kb21FbGVtZW50cyA9IFtdO1xuICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB0aGlzLnBvcHVwTGltaXQgPSA1O1xuICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgdGhpcy5jb2xvclBpY2tlciA9IG5ldyBDb2xvclBpY2tlciQxKHBpeGVsUmF0aW8pO1xuICAgIHRoaXMud3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGFsbCBvcHRpb25zLlxuICAgKiBCZWNhdXNlIGFsbCBtb2R1bGVzIHBhcnNlIHRoZWlyIG9wdGlvbnMgYnkgdGhlbXNlbHZlcywgd2UganVzdCB1c2UgdGhlaXIgb3B0aW9ucy4gV2UgY29weSB0aGVtIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXNldCB0aGUgcG9wdXAgaGlzdG9yeSBiZWNhdXNlIHRoZSBpbmRpY2VzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuXG4gICAgICBsZXQgZW5hYmxlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuam9pbigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMgY2Fubm90IGJlIG51bGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0J1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dCdXR0b24gPSBvcHRpb25zLnNob3dCdXR0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIGVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICBlbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlT3B0aW9uc1xuICAgKi9cbiAgc2V0TW9kdWxlT3B0aW9ucyhtb2R1bGVPcHRpb25zKSB7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0gbW9kdWxlT3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy5maWx0ZXI7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gdGhpcy5jb25maWd1cmVPcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlndXJlT3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc2hvdyA9IGZpbHRlcihvcHRpb24sIFtdKTtcbiAgICAgICAgICBzaG93ID1cbiAgICAgICAgICAgIHNob3cgfHxcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbb3B0aW9uXSwgW29wdGlvbl0sIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIuaW5kZXhPZihvcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIGxpbmVicmVhayBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAgICAgICBpZiAoY291bnRlciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VJdGVtKFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYSBoZWFkZXIgZm9yIHRoZSBjYXRlZ29yeVxuICAgICAgICAgIHRoaXMuX21ha2VIZWFkZXIob3B0aW9uKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3ViIG9wdGlvbnNcbiAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dKTtcbiAgICAgICAgfVxuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21ha2VCdXR0b24oKTtcbiAgICB0aGlzLl9wdXNoKCk7XG4gICAgLy9+IHRoaXMuY29sb3JQaWNrZXIuaW5zZXJ0VG8odGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYXcgYWxsIERPTSBlbGVtZW50cyBvbiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHVzaCgpIHtcbiAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMud3JhcHBlci5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uLXdyYXBwZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tRWxlbWVudHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Nob3dQb3B1cElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogZGVsZXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53cmFwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcblxuICAgIHRoaXMuX3JlbW92ZVBvcHVwKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBhY3R1YWxPcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsdWUocGF0aCkge1xuICAgIGxldCBiYXNlID0gdGhpcy5tb2R1bGVPcHRpb25zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJhc2VbcGF0aFtpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBiYXNlID0gYmFzZVtwYXRoW2ldXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGwgb3B0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGVkIGluIGFuIGl0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBkb21FbGVtZW50c1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VJdGVtKHBhdGgsIC4uLmRvbUVsZW1lbnRzKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpdGVtLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1pdGVtIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgICBkb21FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogaGVhZGVyIGZvciBtYWpvciBzdWJqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VIZWFkZXIobmFtZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1oZWFkZXJcIjtcbiAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZTtcbiAgICB0aGlzLl9tYWtlSXRlbShbXSwgZGl2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgbGFiZWwsIGlmIGl0IGlzIGFuIG9iamVjdCBsYWJlbCwgaXQgZ2V0cyBkaWZmZXJlbnQgc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RMYWJlbFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUxhYmVsKG5hbWUsIHBhdGgsIG9iamVjdExhYmVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWxhYmVsIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgaWYgKG9iamVjdExhYmVsID09PSB0cnVlKSB7XG4gICAgICB3aGlsZSAoZGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIGRpdi5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoXCJpXCIsIFwiYlwiLCBuYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBuYW1lICsgXCI6XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGRyb3Bkb3duIGxpc3QgZm9yIG11bHRpcGxlIHBvc3NpYmxlIHN0cmluZyBvcHRvaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIHNlbGVjdC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctc2VsZWN0XCI7XG4gICAgbGV0IHNlbGVjdGVkVmFsdWUgPSAwO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgb3B0aW9uLnZhbHVlID0gYXJyW2ldO1xuICAgICAgaWYgKGkgPT09IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gXCJzZWxlY3RlZFwiO1xuICAgICAgfVxuICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGFycltpXTtcbiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBzZWxlY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSByYW5nZSBvYmplY3QgZm9yIG51bWVyaWMgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VSYW5nZShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJyWzBdO1xuICAgIGNvbnN0IG1pbiA9IGFyclsxXTtcbiAgICBjb25zdCBtYXggPSBhcnJbMl07XG4gICAgY29uc3Qgc3RlcCA9IGFyclszXTtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICByYW5nZS5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctcmFuZ2VcIjtcbiAgICB0cnkge1xuICAgICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gbm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHJhbmdlLm1pbiA9IG1pbjtcbiAgICAgIHJhbmdlLm1heCA9IG1heDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICByYW5nZS5zdGVwID0gc3RlcDtcblxuICAgIC8vIHNldCB1cCB0aGUgcG9wdXAgc2V0dGluZ3MgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQuXG4gICAgbGV0IHBvcHVwU3RyaW5nID0gXCJcIjtcbiAgICBsZXQgcG9wdXBWYWx1ZSA9IDA7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmFjdG9yID0gMS4yO1xuICAgICAgaWYgKHZhbHVlIDwgMCAmJiB2YWx1ZSAqIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgKiBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIC8gZmFjdG9yIDwgbWluKSB7XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGguY2VpbCh2YWx1ZSAvIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5taW47XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAqIGZhY3RvciA+IG1heCAmJiBtYXggIT09IDEpIHtcbiAgICAgICAgcmFuZ2UubWF4ID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1heDtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfVxuICAgICAgcmFuZ2UudmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlaW5wdXRcIjtcbiAgICBpbnB1dC52YWx1ZSA9IHJhbmdlLnZhbHVlO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgbWUuX3VwZGF0ZShOdW1iZXIodGhpcy52YWx1ZSksIHBhdGgpO1xuICAgIH07XG4gICAgcmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgcmFuZ2UsIGlucHV0KTtcblxuICAgIC8vIGlmIGEgcG9wdXAgaXMgbmVlZGVkIEFORCBpdCBoYXMgbm90IGJlZW4gc2hvd24gZm9yIHRoaXMgdmFsdWUsIHNob3cgaXQuXG4gICAgaWYgKHBvcHVwU3RyaW5nICE9PSBcIlwiICYmIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gIT09IHBvcHVwVmFsdWUpIHtcbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gPSBwb3B1cFZhbHVlO1xuICAgICAgdGhpcy5fc2V0dXBQb3B1cChwb3B1cFN0cmluZywgaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGJ1dHRvbiBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvblwiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uaW5uZXJUZXh0ID0gXCJnZW5lcmF0ZSBvcHRpb25zXCI7XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9wcmludE9wdGlvbnMoKTtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3ZlciA9ICgpID0+IHtcbiAgICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlclwiO1xuICAgICAgfTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLm9ubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXJcIjtcblxuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKHRoaXMub3B0aW9uc0NvbnRhaW5lcik7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goZ2VuZXJhdGVCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlIHRoZSBwb3B1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldHVwUG9wdXAoc3RyaW5nLCBpbmRleCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5wb3B1cENvdW50ZXIgPCB0aGlzLnBvcHVwTGltaXRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBkaXYuaWQgPSBcInZpcy1jb25maWd1cmF0aW9uLXBvcHVwXCI7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmlubmVyVGV4dCA9IHN0cmluZztcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyICs9IDE7XG4gICAgICB0aGlzLnBvcHVwRGl2ID0geyBodG1sOiBkaXYsIGluZGV4OiBpbmRleCB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUgdGhlIHBvcHVwIGZyb20gdGhlIGRvbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBwb3B1cCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd1BvcHVwSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMucG9wdXBEaXYuaHRtbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudHNbdGhpcy5wb3B1cERpdi5pbmRleF07XG4gICAgICBjb25zdCByZWN0ID0gY29ycmVzcG9uZGluZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5zdHlsZS50b3AgPSByZWN0LnRvcCAtIDMwICsgXCJweFwiOyAvLyAzMCBpcyB0aGUgaGVpZ2h0O1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpO1xuICAgICAgdGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICB9LCAxNTAwKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuZGVsZXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfSwgMTgwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBjaGVja2JveCBmb3IgYm9vbGVhbiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQ2hlY2tib3goZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy5jaGVja2VkLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgY2hlY2tib3gpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciBzdHJpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZVRleHRJbnB1dChkZWZhdWx0VmFsdWUsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgY2hlY2tib3gudHlwZSA9IFwidGV4dFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy10ZXh0XCI7XG4gICAgY2hlY2tib3gudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy52YWx1ZSwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY29sb3IgZmllbGQgd2l0aCBhIGNvbG9yIHBpY2tlciBmb3IgY29sb3IgZmllbGRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGFyclsxXTtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICE9PSBcIm5vbmVcIikge1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayBub25lXCI7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbG9yIDogdmFsdWU7XG4gICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogdXNlZCBieSB0aGUgY29sb3IgYnV0dG9ucyB0byBjYWxsIHRoZSBjb2xvciBwaWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBkaXZcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpIHtcbiAgICAvLyBjbGVhciB0aGUgY2FsbGJhY2sgZnJvbSB0aGlzIGRpdlxuICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKGRpdik7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zaG93KCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENvbG9yKHZhbHVlKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldFVwZGF0ZUNhbGxiYWNrKChjb2xvcikgPT4ge1xuICAgICAgY29uc3QgY29sb3JTdHJpbmcgPVxuICAgICAgICBcInJnYmEoXCIgKyBjb2xvci5yICsgXCIsXCIgKyBjb2xvci5nICsgXCIsXCIgKyBjb2xvci5iICsgXCIsXCIgKyBjb2xvci5hICsgXCIpXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JTdHJpbmc7XG4gICAgICB0aGlzLl91cGRhdGUoY29sb3JTdHJpbmcsIHBhdGgpO1xuICAgIH0pO1xuXG4gICAgLy8gb24gY2xvc2Ugb2YgdGhlIGNvbG9ycGlja2VyLCByZXN0b3JlIHRoZSBjYWxsYmFjay5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENsb3NlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcGFyc2UgYW4gb2JqZWN0IGFuZCBkcmF3IHRoZSBjb3JyZWN0IGl0ZW1zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtBcnJheX0gW3BhdGg9W11dICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tPbmx5PWZhbHNlXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVPYmplY3Qob2JqLCBwYXRoID0gW10sIGNoZWNrT25seSA9IGZhbHNlKSB7XG4gICAgbGV0IHNob3cgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCB2aXNpYmxlSW5TZXQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHN1Yk9iaiBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBzdWJPYmopKSB7XG4gICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICBjb25zdCBpdGVtID0gb2JqW3N1Yk9ial07XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgc3ViT2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIoc3ViT2JqLCBwYXRoKTtcblxuICAgICAgICAgIC8vIGlmIG5lZWRlZCB3ZSBtdXN0IGdvIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICAgICAgaWYgKHNob3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAgICAgICBpdGVtIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHNob3cgPSB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGNoZWNrT25seSA9PT0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmlzaWJsZUluU2V0ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKG5ld1BhdGgpO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycmF5KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlVGV4dElucHV0KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIHNraXAgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5oaWRlT3B0aW9uKHBhdGgsIHN1Yk9iaiwgdGhpcy5tb2R1bGVPcHRpb25zKSkge1xuICAgICAgICAgICAgICAvLyBpbml0aWFsbHkgY29sbGFwc2Ugb3B0aW9ucyB3aXRoIGFuIGRpc2FibGVkIGVuYWJsZWQgb3B0aW9uLlxuICAgICAgICAgICAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkUGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShuZXdQYXRoLCBcImVuYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoZW5hYmxlZFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkVmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgICB2aXNpYmxlSW5TZXQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlQ2hlY2tib3goaXRlbSwgZW5hYmxlZFZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwoc3ViT2JqLCBuZXdQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdChpdGVtLCBuZXdQYXRoKSB8fCB2aXNpYmxlSW5TZXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvbnQga25vdyBob3cgdG8gaGFuZGxlXCIsIGl0ZW0sIHN1Yk9iaiwgbmV3UGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlSW5TZXQ7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSBhcnJheSB0eXBlIG9mIG9wdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUFycmF5KGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIiAmJiBhcnJbMF0gPT09IFwiY29sb3JcIikge1xuICAgICAgdGhpcy5fbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzFdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9tYWtlRHJvcGRvd24oYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogTnVtYmVyKHZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIHRvIHVwZGF0ZSB0aGUgbmV0d29yayB3aXRoIHRoZSBuZXcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGUodmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudC5ib2R5ICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIgJiZcbiAgICAgIHRoaXMucGFyZW50LmJvZHkuZW1pdHRlci5lbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdChcImNvbmZpZ0NoYW5nZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wYXJlbnQuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGJvb2xlYW59IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHt7fX0gb3B0aW9uc09ialxuICAgKiBAcmV0dXJucyB7e319XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCwgb3B0aW9uc09iaiA9IHt9KSB7XG4gICAgbGV0IHBvaW50ZXIgPSBvcHRpb25zT2JqO1xuXG4gICAgLy8gd2hlbiBkcm9wZG93biBib3hlcyBjYW4gYmUgc3RyaW5nIG9yIGJvb2xlYW4sIHdlIHR5cGVjYXN0IGl0IGludG8gY29ycmVjdCB0eXBlc1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsdWU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXRoW2ldICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICAgIGlmIChwb2ludGVyW3BhdGhbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyW3BhdGhbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvaW50ZXJbcGF0aFtpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc09iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByaW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICB3aGlsZSAodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnNDb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgIHdyYXBJblRhZyhcInByZVwiLCBcImNvbnN0IG9wdGlvbnMgPSBcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t9fSBvcHRpb25zXG4gICAqL1xuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdE9wdGlvbnMoXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0udmFsdWUsXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0ucGF0aCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn07XG5cbi8qKlxuICogUG9wdXAgaXMgYSBjbGFzcyB0byBjcmVhdGUgYSBwb3B1cCB3aW5kb3cgd2l0aCBzb21lIHRleHRcbiAqL1xubGV0IFBvcHVwJDEgPSBjbGFzcyBQb3B1cCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgICAgICBUaGUgY29udGFpbmVyIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvdmVyZmxvd01ldGhvZCAgSG93IHRoZSBwb3B1cCBzaG91bGQgYWN0IHRvIG92ZXJmbG93aW5nICgnZmxpcCcgb3IgJ2NhcCcpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIG92ZXJmbG93TWV0aG9kKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5vdmVyZmxvd01ldGhvZCA9IG92ZXJmbG93TWV0aG9kIHx8IFwiY2FwXCI7XG5cbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5wYWRkaW5nID0gNTtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBmcmFtZVxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtdG9vbHRpcFwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgc2V0UG9zaXRpb24oeCwgeSkge1xuICAgIHRoaXMueCA9IHBhcnNlSW50KHgpO1xuICAgIHRoaXMueSA9IHBhcnNlSW50KHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29udGVudCBmb3IgdGhlIHBvcHVwIHdpbmRvdy4gVGhpcyBjYW4gYmUgSFRNTCBjb2RlIG9yIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRWxlbWVudH0gY29udGVudFxuICAgKi9cbiAgc2V0VGV4dChjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICB3aGlsZSAodGhpcy5mcmFtZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cmluZyBjb250YWluaW5nIGxpdGVyYWwgdGV4dCwgZWxlbWVudCBoYXMgdG8gYmUgdXNlZCBmb3IgSFRNTCBkdWUgdG9cbiAgICAgIC8vIFhTUyByaXNrcyBhc3NvY2lhdGVkIHdpdGggaW5uZXJIVE1MIChpLmUuIHByZXZlbnQgWFNTIGJ5IGFjY2lkZW50KS5cbiAgICAgIHRoaXMuZnJhbWUuaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgd2luZG93XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvU2hvd10gICAgU2hvdyBvciBoaWRlIHRoZSB3aW5kb3dcbiAgICovXG4gIHNob3coZG9TaG93KSB7XG4gICAgaWYgKGRvU2hvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb1Nob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkb1Nob3cgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZyYW1lLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudFdpZHRoO1xuXG4gICAgICBsZXQgbGVmdCA9IDAsXG4gICAgICAgIHRvcCA9IDA7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJmbG93TWV0aG9kID09IFwiZmxpcFwiKSB7XG4gICAgICAgIGxldCBpc0xlZnQgPSBmYWxzZSxcbiAgICAgICAgICBpc1RvcCA9IHRydWU7IC8vIFdoZXJlIGFyb3VuZCB0aGUgcG9zaXRpb24gaXQncyBsb2NhdGVkXG5cbiAgICAgICAgaWYgKHRoaXMueSAtIGhlaWdodCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzVG9wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy54ICsgd2lkdGggPiBtYXhXaWR0aCAtIHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzTGVmdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMueCAtIHdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIGlmICh0b3AgKyBoZWlnaHQgKyB0aGlzLnBhZGRpbmcgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICB0b3AgPSBtYXhIZWlnaHQgLSBoZWlnaHQgLSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIHRvcCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIGlmIChsZWZ0ICsgd2lkdGggKyB0aGlzLnBhZGRpbmcgPiBtYXhXaWR0aCkge1xuICAgICAgICAgIGxlZnQgPSBtYXhXaWR0aCAtIHdpZHRoIC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0IDwgdGhpcy5wYWRkaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZSk7IC8vIFJlbW92ZSBlbGVtZW50IGZyb20gRE9NXG4gIH1cbn07XG5cbmxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5sZXQgYWxsT3B0aW9ucztcblxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDEgPSBcImJhY2tncm91bmQ6ICNGRmVlZWU7IGNvbG9yOiAjZGQwMDAwXCI7XG5cbi8qKlxuICogIFVzZWQgdG8gdmFsaWRhdGUgb3B0aW9ucy5cbiAqL1xubGV0IFZhbGlkYXRvciQxID0gY2xhc3MgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJPYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBzdWJPYmplY3QpIHtcbiAgICBlcnJvckZvdW5kID0gZmFsc2U7XG4gICAgYWxsT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgbGV0IHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpZiAoc3ViT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9uc1tzdWJPYmplY3RdO1xuICAgIH1cbiAgICBWYWxpZGF0b3IucGFyc2Uob3B0aW9ucywgdXNlZE9wdGlvbnMsIFtdKTtcbiAgICByZXR1cm4gZXJyb3JGb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHRyYXZlcnNlIGFuIG9iamVjdCByZWN1cnNpdmVseSBhbmQgY2hlY2sgZXZlcnkgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICAgIFZhbGlkYXRvci5jaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBldmVyeSB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbCB0aGUgcGFyc2UgZnVuY3Rpb24gb24gdGhhdCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpIHtcbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIFZhbGlkYXRvci5nZXRTdWdnZXN0aW9uKG9wdGlvbiwgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZU9wdGlvbiA9IG9wdGlvbjtcbiAgICBsZXQgaXNfb2JqZWN0ID0gdHJ1ZTtcblxuICAgIGlmIChcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnNbb3B0aW9uXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICByZWZlcmVuY2VPcHRpb25zLl9fYW55X18gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTk9URTogVGhpcyBvbmx5IHRyaWdnZXJzIGlmIHRoZSBfX2FueV9fIGlzIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgLy8gICAgICAgVEhBVCdTIEEgUkVBTExZIEJBRCBQTEFDRSBUTyBBTExPVyBJVCEhISFcbiAgICAgIC8vIFRPRE86IEV4YW1pbmUgaWYgbmVlZGVkLCByZW1vdmUgaWYgcG9zc2libGVcblxuICAgICAgLy8gX19hbnlfXyBpcyBhIHdpbGRjYXJkLiBBbnkgdmFsdWUgaXMgYWNjZXB0ZWQgYW5kIHdpbGwgYmUgZnVydGhlciBhbmFseXNlZCBieSByZWZlcmVuY2UuXG4gICAgICByZWZlcmVuY2VPcHRpb24gPSBcIl9fYW55X19cIjtcblxuICAgICAgLy8gaWYgdGhlIGFueS1zdWJncm91cCBpcyBub3QgYSBwcmVkZWZpbmVkIG9iamVjdCBpbiB0aGUgY29uZmlndXJhdG9yLFxuICAgICAgLy8gd2UgZG8gbm90IGxvb2sgZGVlcGVyIGludG8gdGhlIG9iamVjdC5cbiAgICAgIGlzX29iamVjdCA9IFZhbGlkYXRvci5nZXRUeXBlKG9wdGlvbnNbb3B0aW9uXSkgPT09IFwib2JqZWN0XCI7XG4gICAgfVxuXG4gICAgbGV0IHJlZk9wdGlvbk9iaiA9IHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXTtcbiAgICBpZiAoaXNfb2JqZWN0ICYmIHJlZk9wdGlvbk9iai5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWZPcHRpb25PYmogPSByZWZPcHRpb25PYmouX190eXBlX187XG4gICAgfVxuXG4gICAgVmFsaWRhdG9yLmNoZWNrRmllbGRzKFxuICAgICAgb3B0aW9uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb24sXG4gICAgICByZWZPcHRpb25PYmosXG4gICAgICBwYXRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIG9wdGlvbiAgICAgICAgICAgfCB0aGUgb3B0aW9uIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICB8IFRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge29iamVjdH0gIHJlZmVyZW5jZU9wdGlvbnMgfCBUaGUgcmVmZXJlbmNlIG9wdGlvbnMgY29udGFpbmluZyBhbGwgb3B0aW9ucyBhbmQgdGhlaXIgYWxsb3dlZCBmb3JtYXRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgcmVmZXJlbmNlT3B0aW9uICB8IFVzdWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBvcHRpb24sIGV4Y2VwdCB3aGVuIGhhbmRsaW5nIGFuIF9fYW55X18gdGFnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZk9wdGlvbk9iaiAgICAgfCBUaGlzIGlzIHRoZSB0eXBlIG9iamVjdCBmcm9tIHRoZSByZWZlcmVuY2Ugb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBhdGggICAgICAgICAgICAgfCB3aGVyZSBpbiB0aGUgb2JqZWN0IGlzIHRoZSBvcHRpb25cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrRmllbGRzKFxuICAgIG9wdGlvbixcbiAgICBvcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgIHJlZk9wdGlvbk9iaixcbiAgICBwYXRoXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjXCIgKyBtZXNzYWdlICsgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKSxcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvblR5cGUgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pO1xuICAgIGNvbnN0IHJlZk9wdGlvblR5cGUgPSByZWZPcHRpb25PYmpbb3B0aW9uVHlwZV07XG5cbiAgICBpZiAocmVmT3B0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpZiB0aGUgdHlwZSBpcyBjb3JyZWN0LCB3ZSBjaGVjayBpZiBpdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgYSBmZXcgc2VsZWN0IHZhbHVlc1xuICAgICAgaWYgKFxuICAgICAgICBWYWxpZGF0b3IuZ2V0VHlwZShyZWZPcHRpb25UeXBlKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgIHJlZk9wdGlvblR5cGUuaW5kZXhPZihvcHRpb25zW29wdGlvbl0pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gXCInICtcbiAgICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgICAnXCIuJyArXG4gICAgICAgICAgICBcIiBBbGxvd2VkIHZhbHVlcyBhcmU6XCIgK1xuICAgICAgICAgICAgVmFsaWRhdG9yLnByaW50KHJlZk9wdGlvblR5cGUpICtcbiAgICAgICAgICAgICcgbm90IFwiJyArXG4gICAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICAgJ1wiLiAnXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25UeXBlID09PSBcIm9iamVjdFwiICYmIHJlZmVyZW5jZU9wdGlvbiAhPT0gXCJfX2FueV9fXCIpIHtcbiAgICAgICAgcGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcHRpb24pO1xuICAgICAgICBWYWxpZGF0b3IucGFyc2UoXG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25dLFxuICAgICAgICAgIHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWZPcHRpb25PYmpbXCJhbnlcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdHlwZSBvZiB0aGUgZmllbGQgaXMgaW5jb3JyZWN0IGFuZCB0aGUgZmllbGQgY2Fubm90IGJlIGFueVxuICAgICAgbG9nKFxuICAgICAgICAnSW52YWxpZCB0eXBlIHJlY2VpdmVkIGZvciBcIicgK1xuICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgJ1wiLiBFeHBlY3RlZDogJyArXG4gICAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKHJlZk9wdGlvbk9iaikpICtcbiAgICAgICAgICBcIi4gUmVjZWl2ZWQgW1wiICtcbiAgICAgICAgICBvcHRpb25UeXBlICtcbiAgICAgICAgICAnXSBcIicgK1xuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSArXG4gICAgICAgICAgJ1wiJ1xuICAgICAgKTtcbiAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBBcnJheS48bnVtYmVyPiB8IERhdGUgfCBOb2RlIHwgTW9tZW50IHwgdW5kZWZpbmVkIHwgbnVsbH0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRUeXBlKG9iamVjdCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xuXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Lm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiZG9tXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Ll9pc0FNb21lbnRPYmplY3QgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFwibW9tZW50XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRTdWdnZXN0aW9uKG9wdGlvbiwgb3B0aW9ucywgcGF0aCkge1xuICAgIGNvbnN0IGxvY2FsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCBmYWxzZSk7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBhbGxPcHRpb25zLCBbXSwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhbFNlYXJjaFRocmVzaG9sZCA9IDg7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoVGhyZXNob2xkID0gNDtcblxuICAgIGxldCBtc2c7XG4gICAgaWYgKGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guaW5kZXhNYXRjaCArXG4gICAgICAgICdcIj9cXG5cXG4nO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBnbG9iYWxTZWFyY2guZGlzdGFuY2UgPD0gZ2xvYmFsU2VhcmNoVGhyZXNob2xkICYmXG4gICAgICBsb2NhbFNlYXJjaC5kaXN0YW5jZSA+IGdsb2JhbFNlYXJjaC5kaXN0YW5jZVxuICAgICkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgXCJQZXJoYXBzIGl0IHdhcyBtaXNwbGFjZWQ/IE1hdGNoaW5nIG9wdGlvbiBmb3VuZCBhdDogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihcbiAgICAgICAgICBnbG9iYWxTZWFyY2gucGF0aCxcbiAgICAgICAgICBnbG9iYWxTZWFyY2guY2xvc2VzdE1hdGNoLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2FsU2VhcmNoLmRpc3RhbmNlIDw9IGxvY2FsU2VhcmNoVGhyZXNob2xkKSB7XG4gICAgICBtc2cgPVxuICAgICAgICAnLiBEaWQgeW91IG1lYW4gXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guY2xvc2VzdE1hdGNoICtcbiAgICAgICAgJ1wiPycgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPVxuICAgICAgICBcIi4gRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZTogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnQoT2JqZWN0LmtleXMob3B0aW9ucykpICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6IFwiJyArIG9wdGlvbiArICdcIicgKyBtc2csXG4gICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEUkMVxuICAgICk7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2UgdGhlIG9wdGlvbnMgaW4gc2VhcmNoIGZvciBhIG1hdGNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWN1cnNpdmU9ZmFsc2VdXG4gICAqIEByZXR1cm5zIHt7Y2xvc2VzdE1hdGNoOiBzdHJpbmcsIHBhdGg6IEFycmF5LCBkaXN0YW5jZTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAgIGxldCBtaW4gPSAxZTk7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaCA9IFwiXCI7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaFBhdGggPSBbXTtcbiAgICBjb25zdCBsb3dlckNhc2VPcHRpb24gPSBvcHRpb24udG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaW5kZXhNYXRjaCA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IG9wIGluIG9wdGlvbnMpIHtcbiAgICAgIGxldCBkaXN0YW5jZTtcbiAgICAgIGlmIChvcHRpb25zW29wXS5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkICYmIHJlY3Vyc2l2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWYWxpZGF0b3IuZmluZEluT3B0aW9ucyhcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgb3B0aW9uc1tvcF0sXG4gICAgICAgICAgY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIG9wKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWluID4gcmVzdWx0LmRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gcmVzdWx0LmNsb3Nlc3RNYXRjaDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gcmVzdWx0LnBhdGg7XG4gICAgICAgICAgbWluID0gcmVzdWx0LmRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSByZXN1bHQuaW5kZXhNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2VPcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSBvcDtcbiAgICAgICAgfVxuICAgICAgICBkaXN0YW5jZSA9IFZhbGlkYXRvci5sZXZlbnNodGVpbkRpc3RhbmNlKG9wdGlvbiwgb3ApO1xuICAgICAgICBpZiAobWluID4gZGlzdGFuY2UpIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2ggPSBvcDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gY29weUFycmF5KHBhdGgpO1xuICAgICAgICAgIG1pbiA9IGRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXN0TWF0Y2g6IGNsb3Nlc3RNYXRjaCxcbiAgICAgIHBhdGg6IGNsb3Nlc3RNYXRjaFBhdGgsXG4gICAgICBkaXN0YW5jZTogbWluLFxuICAgICAgaW5kZXhNYXRjaDogaW5kZXhNYXRjaCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiwgcHJlZml4ID0gXCJQcm9ibGVtIHZhbHVlIGZvdW5kIGF0OiBcXG5cIikge1xuICAgIGxldCBzdHIgPSBcIlxcblxcblwiICsgcHJlZml4ICsgXCJvcHRpb25zID0ge1xcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpICsgMTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gcGF0aFtpXSArIFwiOiB7XFxuXCI7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggKyAxOyBqKyspIHtcbiAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgfVxuICAgIHN0ciArPSBvcHRpb24gKyBcIlxcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggLSBpOyBqKyspIHtcbiAgICAgICAgc3RyICs9IFwiICBcIjtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBcIn1cXG5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0ciArIFwiXFxuXFxuXCI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHByaW50KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICAgIC5yZXBsYWNlKC8oXCIpfChcXFspfChcXF0pfCgsXCJfX3R5cGVfX1wiKS9nLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoLygsKS9nLCBcIiwgXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb21wdXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBnaXZlbiBzdHJpbmdzXG4gICAqIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL1N0cmluZ3MvTGV2ZW5zaHRlaW5fZGlzdGFuY2UjSmF2YVNjcmlwdFxuICAgKlxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5kcmVpIE1hY2tlbnppZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgKlxuICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICpcbiAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGxldmVuc2h0ZWluRGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbWF0cml4ID0gW107XG5cbiAgICAvLyBpbmNyZW1lbnQgYWxvbmcgdGhlIGZpcnN0IGNvbHVtbiBvZiBlYWNoIHJvd1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW2ldO1xuICAgIH1cblxuICAgIC8vIGluY3JlbWVudCBlYWNoIGNvbHVtbiBpbiB0aGUgZmlyc3Qgcm93XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cblxuICAgIC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG1hdHJpeFxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT0gYS5jaGFyQXQoaiAtIDEpKSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAxXVtqIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgICAgICBtYXRyaXhbaSAtIDFdW2ogLSAxXSArIDEsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgIG1hdHJpeFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqXSArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApOyAvLyBkZWxldGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xuICB9XG59O1xuXG5jb25zdCBBY3RpdmF0b3IgPSBBY3RpdmF0b3IkMTtcclxuY29uc3QgQ29sb3JQaWNrZXIgPSBDb2xvclBpY2tlciQxO1xyXG5jb25zdCBDb25maWd1cmF0b3IgPSBDb25maWd1cmF0b3IkMTtcclxuY29uc3QgSGFtbWVyID0gSGFtbWVyJDE7XHJcbmNvbnN0IFBvcHVwID0gUG9wdXAkMTtcclxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFID0gVkFMSURBVE9SX1BSSU5UX1NUWUxFJDE7XHJcbmNvbnN0IFZhbGlkYXRvciA9IFZhbGlkYXRvciQxO1xuXG5leHBvcnQgeyBBY3RpdmF0b3IsIEFsZWEsIENvbG9yUGlja2VyLCBDb25maWd1cmF0b3IsIERFTEVURSwgSFNWVG9IZXgsIEhTVlRvUkdCLCBIYW1tZXIsIFBvcHVwLCBSR0JUb0hTViwgUkdCVG9IZXgsIFZBTElEQVRPUl9QUklOVF9TVFlMRSwgVmFsaWRhdG9yLCBhZGRDbGFzc05hbWUsIGFkZENzc1RleHQsIGJpbmFyeVNlYXJjaEN1c3RvbSwgYmluYXJ5U2VhcmNoVmFsdWUsIGJyaWRnZU9iamVjdCwgY29weUFuZEV4dGVuZEFycmF5LCBjb3B5QXJyYXksIGRlZXBFeHRlbmQsIGRlZXBPYmplY3RBc3NpZ24sIGVhc2luZ0Z1bmN0aW9ucywgZXF1YWxBcnJheSwgZXh0ZW5kLCBmaWxsSWZEZWZpbmVkLCBmb3JFYWNoLCBnZXRBYnNvbHV0ZUxlZnQsIGdldEFic29sdXRlUmlnaHQsIGdldEFic29sdXRlVG9wLCBnZXRTY3JvbGxCYXJXaWR0aCwgZ2V0VGFyZ2V0LCBnZXRUeXBlLCBoYXNQYXJlbnQsIGhleFRvSFNWLCBoZXhUb1JHQiwgaW5zZXJ0U29ydCwgaXNEYXRlLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ZhbGlkSGV4LCBpc1ZhbGlkUkdCLCBpc1ZhbGlkUkdCQSwgbWVyZ2VPcHRpb25zLCBvcHRpb24sIG92ZXJyaWRlT3BhY2l0eSwgcGFyc2VDb2xvciwgcHJldmVudERlZmF1bHQsIHB1cmVEZWVwT2JqZWN0QXNzaWduLCByZWN1cnNpdmVET01EZWxldGUsIHJlbW92ZUNsYXNzTmFtZSwgcmVtb3ZlQ3NzVGV4dCwgc2VsZWN0aXZlQnJpZGdlT2JqZWN0LCBzZWxlY3RpdmVEZWVwRXh0ZW5kLCBzZWxlY3RpdmVFeHRlbmQsIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsIHRocm90dGxlLCB0b0FycmF5LCB0b3BNb3N0LCB1cGRhdGVQcm9wZXJ0eSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmlzLXV0aWwuanMubWFwXG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgbmF0aXZlQ29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgUmVmbGVjdC5jb25zdHJ1Y3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmNvbnN0cnVjdFxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEobmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcblxudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxudmFyIEZPUkNFRCA9IE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHO1xuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiBGT1JDRUQgfSwge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhQ29uc3RydWN0b3IoVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhQ29uc3RydWN0b3IoYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gbmF0aXZlQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICBhcHBseShwdXNoLCAkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChhcHBseShiaW5kLCBUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3RQcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBhcHBseShUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5SZWZsZWN0LmNvbnN0cnVjdDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcmVmbGVjdC9jb25zdHJ1Y3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9yZWZsZWN0L2NvbnN0cnVjdFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xufTtcblxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSkgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIga2V5LCBkZXNjcmlwdG9yO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSA9IGtleXNbaW5kZXgrK10pO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yc1wiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgIT09IGRlZmluZVByb3BlcnRpZXMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoVCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVCwgRCk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMuc2hhbSkgZGVmaW5lUHJvcGVydGllcy5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzXCIpOyIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvY3JlYXRlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBzZXRQcm90b3R5cGVPZjogc2V0UHJvdG90eXBlT2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL29iamVjdC9zZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL2JpbmQnKTtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfc2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRzZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkY3JlYXRlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfZ2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRnZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBfT2JqZWN0JGdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsICJ2YXIgX1N5bWJvbCA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCIpO1xudmFyIF9TeW1ib2wkaXRlcmF0b3IgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiKTtcbmZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgX1N5bWJvbCRpdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gX1N5bWJvbCAmJiBvICE9PSBfU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzKSwgX3R5cGVvZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvaW5zdGFuY2UvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL2Zvci1lYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyJyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX1JFQ09SRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19SRUNPUkQpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX1JFQ09SRCkge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGUuaXRlcmF0b3I7XG4gIH0gZWxzZSBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSwgaXRlckZuKTtcbiAgfVxuXG4gIG5leHQgPSBJU19SRUNPUkQgPyBpdGVyYWJsZS5uZXh0IDogaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCAkZGVmYXVsdCkge1xuICByZXR1cm4gYXJndW1lbnQgPT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gJycgOiAkZGVmYXVsdCA6IHRvU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgaW5zdGFsbEVycm9yQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZScpO1xudmFyIGluc3RhbGxFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBub3JtYWxpemVTdHJpbmdBcmd1bWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG52YXIgJEFnZ3JlZ2F0ZUVycm9yID0gZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlIC8qICwgb3B0aW9ucyAqLykge1xuICB2YXIgaXNJbnN0YW5jZSA9IGlzUHJvdG90eXBlT2YoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIHRoaXMpO1xuICB2YXIgdGhhdDtcbiAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgdGhhdCA9IHNldFByb3RvdHlwZU9mKG5ldyAkRXJyb3IoKSwgaXNJbnN0YW5jZSA/IGdldFByb3RvdHlwZU9mKHRoaXMpIDogQWdncmVnYXRlRXJyb3JQcm90b3R5cGUpO1xuICB9IGVsc2Uge1xuICAgIHRoYXQgPSBpc0luc3RhbmNlID8gdGhpcyA6IGNyZWF0ZShBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsIFRPX1NUUklOR19UQUcsICdFcnJvcicpO1xuICB9XG4gIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnbWVzc2FnZScsIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KG1lc3NhZ2UpKTtcbiAgaW5zdGFsbEVycm9yU3RhY2sodGhhdCwgJEFnZ3JlZ2F0ZUVycm9yLCB0aGF0LnN0YWNrLCAxKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSBpbnN0YWxsRXJyb3JDYXVzZSh0aGF0LCBhcmd1bWVudHNbMl0pO1xuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIHB1c2gsIHsgdGhhdDogZXJyb3JzQXJyYXkgfSk7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnZXJyb3JzJywgZXJyb3JzQXJyYXkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IpO1xuZWxzZSBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKCRBZ2dyZWdhdGVFcnJvciwgJEVycm9yLCB7IG5hbWU6IHRydWUgfSk7XG5cbnZhciBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSA9ICRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoJEVycm9yLnByb3RvdHlwZSwge1xuICBjb25zdHJ1Y3RvcjogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICRBZ2dyZWdhdGVFcnJvciksXG4gIG1lc3NhZ2U6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnJyksXG4gIG5hbWU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnQWdncmVnYXRlRXJyb3InKVxufSk7XG5cbi8vIGBBZ2dyZWdhdGVFcnJvcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWdncmVnYXRlLWVycm9yLWNvbnN0cnVjdG9yXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDIgfSwge1xuICBBZ2dyZWdhdGVFcnJvcjogJEFnZ3JlZ2F0ZUVycm9yXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCBpc051bGxPclVuZGVmaW5lZChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUNvbnN0cnVjdG9yKFMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gLyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgc2V0ID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyICRsb2NhdGlvbiwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbmZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gRGVubyB0aHJvd3MgYSBSZWZlcmVuY2VFcnJvciBvbiBgbG9jYXRpb25gIGFjY2VzcyB3aXRob3V0IGAtLWxvY2F0aW9uYCBmbGFnXG4gICRsb2NhdGlvbiA9IGdsb2JhbC5sb2NhdGlvbjtcbn0pO1xuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlmIChoYXNPd24ocXVldWUsIGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG5cbnZhciBydW5uZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBydW4oaWQpO1xuICB9O1xufTtcblxudmFyIGV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuKGV2ZW50LmRhdGEpO1xufTtcblxudmFyIGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gb2xkIGVuZ2luZXMgaGF2ZSBub3QgbG9jYXRpb24ub3JpZ2luXG4gIGdsb2JhbC5wb3N0TWVzc2FnZShTdHJpbmcoaWQpLCAkbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgJGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShoYW5kbGVyKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXIgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoSVNfTk9ERSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3cocnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICAvLyBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzYyNFxuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsICYmICFJU19JT1MpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBldmVudExpc3RlbmVyO1xuICAgIGRlZmVyID0gYmluZChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0KTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoXG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiZcbiAgICBpc0NhbGxhYmxlKGdsb2JhbC5wb3N0TWVzc2FnZSkgJiZcbiAgICAhZ2xvYmFsLmltcG9ydFNjcmlwdHMgJiZcbiAgICAkbG9jYXRpb24gJiYgJGxvY2F0aW9uLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgIWZhaWxzKGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIpXG4gICkge1xuICAgIGRlZmVyID0gZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcjtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhlYWQgPSBudWxsO1xuICB0aGlzLnRhaWwgPSBudWxsO1xufTtcblxuUXVldWUucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmFyIGVudHJ5ID0geyBpdGVtOiBpdGVtLCBuZXh0OiBudWxsIH07XG4gICAgdmFyIHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgaWYgKHRhaWwpIHRhaWwubmV4dCA9IGVudHJ5O1xuICAgIGVsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgdGhpcy50YWlsID0gZW50cnk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbnRyeSA9IHRoaXMuaGVhZDtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHZhciBuZXh0ID0gdGhpcy5oZWFkID0gZW50cnkubmV4dDtcbiAgICAgIGlmIChuZXh0ID09PSBudWxsKSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgcmV0dXJuIGVudHJ5Lml0ZW07XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvaXBhZHxpcGhvbmV8aXBvZC9pLnRlc3QodXNlckFnZW50KSAmJiB0eXBlb2YgUGViYmxlICE9ICd1bmRlZmluZWQnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZScpO1xudmFyIElTX1dFQk9TX1dFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgbWljcm90YXNrID0gcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yICYmIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvci52YWx1ZTtcbnZhciBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghbWljcm90YXNrKSB7XG4gIHZhciBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChmbiA9IHF1ZXVlLmdldCgpKSB0cnkge1xuICAgICAgZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHF1ZXVlLmhlYWQpIG5vdGlmeSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gYmluZChwcm9taXNlLnRoZW4sIHByb21pc2UpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdlXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIC8vIGB3ZWJwYWNrYCBkZXYgc2VydmVyIGJ1ZyBvbiBJRSBnbG9iYWwgbWV0aG9kcyAtIHVzZSBiaW5kKGZuLCBnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgbWljcm90YXNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKCFxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICBxdWV1ZS5hZGQoZm4pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pY3JvdGFzaztcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc2FmZVxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLlByb21pc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIERlbm8gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBEZW5vID09ICdvYmplY3QnICYmIERlbm8gJiYgdHlwZW9mIERlbm8udmVyc2lvbiA9PSAnb2JqZWN0JztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfREVOTyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtZGVubycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhSVNfREVOTyAmJiAhSVNfTk9ERVxuICAmJiB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnXG4gICYmIHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfQlJPV1NFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3NlcicpO1xudmFyIElTX0RFTk8gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8nKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFNVQkNMQVNTSU5HID0gZmFsc2U7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gaXNDYWxsYWJsZShnbG9iYWwuUHJvbWlzZVJlamVjdGlvbkV2ZW50KTtcblxudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gaXNGb3JjZWQoJ1Byb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSA9IGluc3BlY3RTb3VyY2UoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSAhPT0gU3RyaW5nKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSN7IGNhdGNoLCBmaW5hbGx5IH0gaW4gdGhlIHB1cmUgdmVyc2lvbiBmb3IgcHJldmVudGluZyBwcm90b3R5cGUgcG9sbHV0aW9uXG4gIGlmIChJU19QVVJFICYmICEoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10pKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKCFWOF9WRVJTSU9OIHx8IFY4X1ZFUlNJT04gPCA1MSB8fCAhL25hdGl2ZSBjb2RlLy50ZXN0KFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFKSkge1xuICAgIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSBuZXcgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUoMSk7IH0pO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgICB9O1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICAgIFNVQkNMQVNTSU5HID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgICBpZiAoIVNVQkNMQVNTSU5HKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICB9IHJldHVybiAhR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiAoSVNfQlJPV1NFUiB8fCBJU19ERU5PKSAmJiAhTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDT05TVFJVQ1RPUjogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsXG4gIFJFSkVDVElPTl9FVkVOVDogTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5ULFxuICBTVUJDTEFTU0lORzogU1VCQ0xBU1NJTkdcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhQ2FsbGFibGUocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUNhbGxhYmxlKHJlamVjdCk7XG59O1xuXG4vLyBgTmV3UHJvbWlzZUNhcGFiaWxpdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uZXdwcm9taXNlY2FwYWJpbGl0eVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLkNPTlNUUlVDVE9SO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5SRUpFQ1RJT05fRVZFTlQ7XG52YXIgTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uU1VCQ0xBU1NJTkc7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvciA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcjtcbnZhciBQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG52YXIgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHk7XG5cbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcblxudmFyIEludGVybmFsLCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgUHJvbWlzZVdyYXBwZXIsIG5hdGl2ZVRoZW47XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIGlzQ2FsbGFibGUodGhlbiA9IGl0LnRoZW4pID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIGNhbGxSZWFjdGlvbiA9IGZ1bmN0aW9uIChyZWFjdGlvbiwgc3RhdGUpIHtcbiAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gIHZhciBvayA9IHN0YXRlLnN0YXRlID09PSBGVUxGSUxMRUQ7XG4gIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICB0cnkge1xuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGlmIChzdGF0ZS5yZWplY3Rpb24gPT09IFVOSEFORExFRCkgb25IYW5kbGVVbmhhbmRsZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gY2FuIHRocm93XG4gICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgY2FsbCh0aGVuLCByZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICByZWplY3QoZXJyb3IpO1xuICB9XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWFjdGlvbnMgPSBzdGF0ZS5yZWFjdGlvbnM7XG4gICAgdmFyIHJlYWN0aW9uO1xuICAgIHdoaWxlIChyZWFjdGlvbiA9IHJlYWN0aW9ucy5nZXQoKSkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCAmJiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pKSBoYW5kbGVyKGV2ZW50KTtcbiAgZWxzZSBpZiAobmFtZSA9PT0gVU5IQU5ETEVEX1JFSkVDVElPTikgaG9zdFJlcG9ydEVycm9ycygnVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgcmVhc29uKTtcbn07XG5cbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAoc3RhdGUuZmFjYWRlID09PSB2YWx1ZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGwodGhlbiwgdmFsdWUsXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVzb2x2ZSwgd3JhcHBlciwgc3RhdGUpLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlamVjdCwgd3JhcHBlciwgc3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpbnRlcm5hbFJlamVjdCh3cmFwcGVyLCBlcnJvciwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHN0YXRlLnN0YXRlID0gRlVMRklMTEVEO1xuICAgICAgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGludGVybmFsUmVqZWN0KHsgZG9uZTogZmFsc2UgfSwgZXJyb3IsIHN0YXRlKTtcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmIChGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUikge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICBhQ2FsbGFibGUoZXhlY3V0b3IpO1xuICAgIGNhbGwoSW50ZXJuYWwsIHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdChzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBQcm9taXNlUHJvdG90eXBlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIHR5cGU6IFBST01JU0UsXG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZmFsc2UsXG4gICAgICByZWFjdGlvbnM6IG5ldyBRdWV1ZSgpLFxuICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgIHN0YXRlOiBQRU5ESU5HLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gIEludGVybmFsLnByb3RvdHlwZSA9IGRlZmluZUJ1aWx0SW4oUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgcmVhY3Rpb24ub2sgPSBpc0NhbGxhYmxlKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICByZWFjdGlvbi5mYWlsID0gaXNDYWxsYWJsZShvblJlamVjdGVkKSAmJiBvblJlamVjdGVkO1xuICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc3RhdGUuc3RhdGUgPT09IFBFTkRJTkcpIHN0YXRlLnJlYWN0aW9ucy5hZGQocmVhY3Rpb24pO1xuICAgIGVsc2UgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICB9KTtcblxuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHByb21pc2UpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKTtcbiAgICB0aGlzLnJlamVjdCA9IGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKTtcbiAgfTtcblxuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICBpZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBuYXRpdmVUaGVuID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZS50aGVuO1xuXG4gICAgaWYgKCFOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORykge1xuICAgICAgLy8gbWFrZSBgUHJvbWlzZSN0aGVuYCByZXR1cm4gYSBwb2x5ZmlsbGVkIGBQcm9taXNlYCBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgY2FsbChuYXRpdmVUaGVuLCB0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIG1ha2UgYC5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIHRyeSB7XG4gICAgICBkZWxldGUgTmF0aXZlUHJvbWlzZVByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICAvLyBtYWtlIGBpbnN0YW5jZW9mIFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIHNldFByb3RvdHlwZU9mKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIFByb21pc2U6IFByb21pc2VDb25zdHJ1Y3RvclxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSwgZmFsc2UsIHRydWUpO1xuc2V0U3BlY2llcyhQUk9NSVNFKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSkudGhlbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwoJHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmNhdGNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsIHJlYWw6IHRydWUgfSwge1xuICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgfVxufSk7XG5cbi8vIG1ha2VzIHN1cmUgdGhhdCBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzIGBQcm9taXNlI2NhdGNoYCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2NhdGNoJ107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICE9PSBtZXRob2QpIHtcbiAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICdjYXRjaCcsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5yYWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKHRoaXMpO1xuICAgIGNhbGwoY2FwYWJpbGl0eS5yZWplY3QsIHVuZGVmaW5lZCwgcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG5cbnZhciBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID0gZ2V0QnVpbHRJbignUHJvbWlzZScpO1xudmFyIENIRUNLX1dSQVBQRVIgPSBJU19QVVJFICYmICFGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQ0hFQ0tfV1JBUFBFUiAmJiB0aGlzID09PSBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID8gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbFNldHRsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbHNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ2Z1bGZpbGxlZCcsIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdyZWplY3RlZCcsIHJlYXNvbjogZXJyb3IgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFueVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYW55OiBmdW5jdGlvbiBhbnkoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIEFnZ3JlZ2F0ZUVycm9yID0gZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKTtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGVycm9yO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10aGVuYWJsZSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10uY2FsbCh7IHRoZW46IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBOT05fR0VORVJJQyB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSBpc0NhbGxhYmxlKG9uRmluYWxseSk7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNmaW5hbGx5YCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnZmluYWxseScsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFueScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG4vLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2Utd2l0aC1yZXNvbHZlcnNcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHdpdGhSZXNvbHZlcnM6IGZ1bmN0aW9uIHdpdGhSZXNvbHZlcnMoKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvbWlzZTogcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZSxcbiAgICAgIHJlc29sdmU6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUsXG4gICAgICByZWplY3Q6IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdFxuICAgIH07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS53aXRoLXJlc29sdmVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xuXG4vLyBgUHJvbWlzZS50cnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgICAocmVzdWx0LmVycm9yID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9wcm9taXNlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuYWdncmVnYXRlLWVycm9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLmFsbC1zZXR0bGVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3Byb21pc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9yZXZlcnNlJyk7XG4iLCAidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIF9PYmplY3QkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIik7XG52YXIgX1N5bWJvbCA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCIpO1xudmFyIF9PYmplY3QkY3JlYXRlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzXCIpO1xudmFyIF9PYmplY3QkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2guanNcIik7XG52YXIgX3B1c2hJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzXCIpO1xudmFyIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIF9Qcm9taXNlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9wcm9taXNlL2luZGV4LmpzXCIpO1xudmFyIF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZS5qc1wiKTtcbnZhciBfc2xpY2VJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qc1wiKTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBfT2JqZWN0JGRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uICh0LCBlLCByKSB7XG4gICAgICB0W2VdID0gci52YWx1ZTtcbiAgICB9LFxuICAgIGkgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgPyBfU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHQsIGUsIHtcbiAgICAgIHZhbHVlOiByLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIHRbZV07XG4gIH1cbiAgdHJ5IHtcbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICAgIHJldHVybiB0W2VdID0gcjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdyYXAodCwgZSwgciwgbikge1xuICAgIHZhciBpID0gZSAmJiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IGUgOiBHZW5lcmF0b3IsXG4gICAgICBhID0gX09iamVjdCRjcmVhdGUoaS5wcm90b3R5cGUpLFxuICAgICAgYyA9IG5ldyBDb250ZXh0KG4gfHwgW10pO1xuICAgIHJldHVybiBvKGEsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogbWFrZUludm9rZU1ldGhvZCh0LCByLCBjKVxuICAgIH0pLCBhO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKHQsIGUsIHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICAgICAgYXJnOiB0LmNhbGwoZSwgcilcbiAgICAgIH07XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IHRcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGUud3JhcCA9IHdyYXA7XG4gIHZhciBoID0gXCJzdXNwZW5kZWRTdGFydFwiLFxuICAgIGwgPSBcInN1c3BlbmRlZFlpZWxkXCIsXG4gICAgZiA9IFwiZXhlY3V0aW5nXCIsXG4gICAgcyA9IFwiY29tcGxldGVkXCIsXG4gICAgeSA9IHt9O1xuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cbiAgdmFyIHAgPSB7fTtcbiAgZGVmaW5lKHAsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIHZhciBkID0gX09iamVjdCRnZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHApO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHModCkge1xuICAgIHZhciBfY29udGV4dDtcbiAgICBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0pLmNhbGwoX2NvbnRleHQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkZWZpbmUodCwgZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShlLCB0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IodCwgZSkge1xuICAgIGZ1bmN0aW9uIGludm9rZShyLCBvLCBpLCBhKSB7XG4gICAgICB2YXIgYyA9IHRyeUNhdGNoKHRbcl0sIHQsIG8pO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gYy50eXBlKSB7XG4gICAgICAgIHZhciB1ID0gYy5hcmcsXG4gICAgICAgICAgaCA9IHUudmFsdWU7XG4gICAgICAgIHJldHVybiBoICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZihoKSAmJiBuLmNhbGwoaCwgXCJfX2F3YWl0XCIpID8gZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pIDogZS5yZXNvbHZlKGgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICB1LnZhbHVlID0gdCwgaSh1KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYShjLmFyZyk7XG4gICAgfVxuICAgIHZhciByO1xuICAgIG8odGhpcywgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh0LCBuKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgZShmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgaW52b2tlKHQsIG4sIGUsIHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByID0gciA/IHIudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGUsIHIsIG4pIHtcbiAgICB2YXIgbyA9IGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBhKSB7XG4gICAgICBpZiAobyA9PT0gZikgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIGlmIChvID09PSBzKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IGkpIHRocm93IGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IHQsXG4gICAgICAgICAgZG9uZTogITBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZvciAobi5tZXRob2QgPSBpLCBuLmFyZyA9IGE7Oykge1xuICAgICAgICB2YXIgYyA9IG4uZGVsZWdhdGU7XG4gICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgdmFyIHUgPSBtYXliZUludm9rZURlbGVnYXRlKGMsIG4pO1xuICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICBpZiAodSA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBuLm1ldGhvZCkgbi5zZW50ID0gbi5fc2VudCA9IG4uYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gbi5tZXRob2QpIHtcbiAgICAgICAgICBpZiAobyA9PT0gaCkgdGhyb3cgbyA9IHMsIG4uYXJnO1xuICAgICAgICAgIG4uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpO1xuICAgICAgICB9IGVsc2UgXCJyZXR1cm5cIiA9PT0gbi5tZXRob2QgJiYgbi5hYnJ1cHQoXCJyZXR1cm5cIiwgbi5hcmcpO1xuICAgICAgICBvID0gZjtcbiAgICAgICAgdmFyIHAgPSB0cnlDYXRjaChlLCByLCBuKTtcbiAgICAgICAgaWYgKFwibm9ybWFsXCIgPT09IHAudHlwZSkge1xuICAgICAgICAgIGlmIChvID0gbi5kb25lID8gcyA6IGwsIHAuYXJnID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHAuYXJnLFxuICAgICAgICAgICAgZG9uZTogbi5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcInRocm93XCIgPT09IHAudHlwZSAmJiAobyA9IHMsIG4ubWV0aG9kID0gXCJ0aHJvd1wiLCBuLmFyZyA9IHAuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgcikge1xuICAgIHZhciBuID0gci5tZXRob2QsXG4gICAgICBvID0gZS5pdGVyYXRvcltuXTtcbiAgICBpZiAobyA9PT0gdCkgcmV0dXJuIHIuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG4gJiYgZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoci5tZXRob2QgPSBcInJldHVyblwiLCByLmFyZyA9IHQsIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgciksIFwidGhyb3dcIiA9PT0gci5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG4gJiYgKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG4gKyBcIicgbWV0aG9kXCIpKSwgeTtcbiAgICB2YXIgaSA9IHRyeUNhdGNoKG8sIGUuaXRlcmF0b3IsIHIuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSBpLnR5cGUpIHJldHVybiByLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBpLmFyZywgci5kZWxlZ2F0ZSA9IG51bGwsIHk7XG4gICAgdmFyIGEgPSBpLmFyZztcbiAgICByZXR1cm4gYSA/IGEuZG9uZSA/IChyW2UucmVzdWx0TmFtZV0gPSBhLnZhbHVlLCByLm5leHQgPSBlLm5leHRMb2MsIFwicmV0dXJuXCIgIT09IHIubWV0aG9kICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCByLmRlbGVnYXRlID0gbnVsbCwgeSkgOiBhIDogKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeSh0KSB7XG4gICAgdmFyIF9jb250ZXh0MjtcbiAgICB2YXIgZSA9IHtcbiAgICAgIHRyeUxvYzogdFswXVxuICAgIH07XG4gICAgMSBpbiB0ICYmIChlLmNhdGNoTG9jID0gdFsxXSksIDIgaW4gdCAmJiAoZS5maW5hbGx5TG9jID0gdFsyXSwgZS5hZnRlckxvYyA9IHRbM10pLCBfcHVzaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQyID0gdGhpcy50cnlFbnRyaWVzKS5jYWxsKF9jb250ZXh0MiwgZSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeSh0KSB7XG4gICAgdmFyIGUgPSB0LmNvbXBsZXRpb24gfHwge307XG4gICAgZS50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIGUuYXJnLCB0LmNvbXBsZXRpb24gPSBlO1xuICB9XG4gIGZ1bmN0aW9uIENvbnRleHQodCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSh0KS5jYWxsKHQsIHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhlKSB7XG4gICAgaWYgKGUgfHwgXCJcIiA9PT0gZSkge1xuICAgICAgdmFyIHIgPSBlW2FdO1xuICAgICAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLm5leHQpIHJldHVybiBlO1xuICAgICAgaWYgKCFpc05hTihlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIG8gPSAtMSxcbiAgICAgICAgICBpID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK28gPCBlLmxlbmd0aDspIGlmIChuLmNhbGwoZSwgbykpIHJldHVybiBuZXh0LnZhbHVlID0gZVtvXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBpLm5leHQgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF90eXBlb2YoZSkgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBvKGcsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBvKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHQgJiYgdC5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFlICYmIChlID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSkpO1xuICB9LCBlLm1hcmsgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX09iamVjdCRzZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKGcpLCB0O1xuICB9LCBlLmF3cmFwID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogdFxuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZS5hc3luYyA9IGZ1bmN0aW9uICh0LCByLCBuLCBvLCBpKSB7XG4gICAgdm9pZCAwID09PSBpICYmIChpID0gX1Byb21pc2UpO1xuICAgIHZhciBhID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcCh0LCByLCBuLCBvKSwgaSk7XG4gICAgcmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKSA/IGEgOiBhLm5leHQoKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5kb25lID8gdC52YWx1ZSA6IGEubmV4dCgpO1xuICAgIH0pO1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoZyksIGRlZmluZShnLCB1LCBcIkdlbmVyYXRvclwiKSwgZGVmaW5lKGcsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShnLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSksIGUua2V5cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBPYmplY3QodCksXG4gICAgICByID0gW107XG4gICAgZm9yICh2YXIgbiBpbiBlKSBfcHVzaEluc3RhbmNlUHJvcGVydHkocikuY2FsbChyLCBuKTtcbiAgICByZXR1cm4gX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsgci5sZW5ndGg7KSB7XG4gICAgICAgIHZhciB0ID0gci5wb3AoKTtcbiAgICAgICAgaWYgKHQgaW4gZSkgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBlLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGUpIHtcbiAgICAgIHZhciBfY29udGV4dDM7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB0LCBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQzID0gdGhpcy50cnlFbnRyaWVzKS5jYWxsKF9jb250ZXh0MywgcmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtfc2xpY2VJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociwgMSkpICYmICh0aGlzW3JdID0gdCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgdCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZSkge1xuICAgICAgaWYgKHRoaXMuZG9uZSkgdGhyb3cgZTtcbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShuLCBvKSB7XG4gICAgICAgIHJldHVybiBhLnR5cGUgPSBcInRocm93XCIsIGEuYXJnID0gZSwgci5uZXh0ID0gbiwgbyAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgISFvO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbyA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBvID49IDA7IC0tbykge1xuICAgICAgICB2YXIgaSA9IHRoaXMudHJ5RW50cmllc1tvXSxcbiAgICAgICAgICBhID0gaS5jb21wbGV0aW9uO1xuICAgICAgICBpZiAoXCJyb290XCIgPT09IGkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoaS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGMgPSBuLmNhbGwoaSwgXCJjYXRjaExvY1wiKSxcbiAgICAgICAgICAgIHUgPSBuLmNhbGwoaSwgXCJmaW5hbGx5TG9jXCIpO1xuICAgICAgICAgIGlmIChjICYmIHUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF1KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChlLCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcixcbiAgICAgICAgbmV4dExvYzogblxuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHQpLCB5O1xuICAgIH1cbiAgfSwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gRkYyNi0gYnVnOiBBcnJheUJ1ZmZlcnMgYXJlIG5vbi1leHRlbnNpYmxlLCBidXQgT2JqZWN0LmlzRXh0ZW5zaWJsZSBkb2VzIG5vdCByZXBvcnQgaXRcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShidWZmZXIpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVmZmVyLCAnYScsIHsgdmFsdWU6IDggfSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkaXNFeHRlbnNpYmxlKDEpOyB9KTtcblxuLy8gYE9iamVjdC5pc0V4dGVuc2libGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNleHRlbnNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IChGQUlMU19PTl9QUklNSVRJVkVTIHx8IEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSkgPyBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSAmJiBjbGFzc29mKGl0KSA9PT0gJ0FycmF5QnVmZmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZTtcbn0gOiAkaXNFeHRlbnNpYmxlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtcHJldmVudGV4dGVuc2lvbnMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgaXNFeHRlbnNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG5cbnZhciBSRVFVSVJFRCA9IGZhbHNlO1xudmFyIE1FVEFEQVRBID0gdWlkKCdtZXRhJyk7XG52YXIgaWQgPSAwO1xuXG52YXIgc2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgZGVmaW5lUHJvcGVydHkoaXQsIE1FVEFEQVRBLCB7IHZhbHVlOiB7XG4gICAgb2JqZWN0SUQ6ICdPJyArIGlkKyssIC8vIG9iamVjdCBJRFxuICAgIHdlYWtEYXRhOiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcblxudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gYSBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS5vYmplY3RJRDtcbn07XG5cbnZhciBnZXRXZWFrRGF0YSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gdGhlIHN0b3JlIG9mIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS53ZWFrRGF0YTtcbn07XG5cbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWklORyAmJiBSRVFVSVJFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXNPd24oaXQsIE1FVEFEQVRBKSkgc2V0TWV0YWRhdGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG52YXIgZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICBtZXRhLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgUkVRVUlSRUQgPSB0cnVlO1xuICB2YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZjtcbiAgdmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG4gIHZhciB0ZXN0ID0ge307XG4gIHRlc3RbTUVUQURBVEFdID0gMTtcblxuICAvLyBwcmV2ZW50IGV4cG9zaW5nIG9mIG1ldGFkYXRhIGtleVxuICBpZiAoZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0KS5sZW5ndGgpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdFtpXSA9PT0gTUVUQURBVEEpIHtcbiAgICAgICAgICBzcGxpY2UocmVzdWx0LCBpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZS5mXG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrRGF0YTogZ2V0V2Vha0RhdGEsXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuaGlkZGVuS2V5c1tNRVRBREFUQV0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSwgd3JhcHBlciwgY29tbW9uKSB7XG4gIHZhciBJU19NQVAgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ01hcCcpICE9PSAtMTtcbiAgdmFyIElTX1dFQUsgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ1dlYWsnKSAhPT0gLTE7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl9OQU1FXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgdmFyIGV4cG9ydGVkID0ge307XG4gIHZhciBDb25zdHJ1Y3RvcjtcblxuICBpZiAoIURFU0NSSVBUT1JTIHx8ICFpc0NhbGxhYmxlKE5hdGl2ZUNvbnN0cnVjdG9yKVxuICAgIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKS5lbnRyaWVzKCkubmV4dCgpOyB9KSlcbiAgKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDb25zdHJ1Y3RvciA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB9IGVsc2Uge1xuICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZShhbkluc3RhbmNlKHRhcmdldCwgUHJvdG90eXBlKSwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBjb2xsZWN0aW9uOiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGFyZ2V0W0FEREVSXSwgeyB0aGF0OiB0YXJnZXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICBmb3JFYWNoKFsnYWRkJywgJ2NsZWFyJywgJ2RlbGV0ZScsICdmb3JFYWNoJywgJ2dldCcsICdoYXMnLCAnc2V0JywgJ2tleXMnLCAndmFsdWVzJywgJ2VudHJpZXMnXSwgZnVuY3Rpb24gKEtFWSkge1xuICAgICAgdmFyIElTX0FEREVSID0gS0VZID09PSAnYWRkJyB8fCBLRVkgPT09ICdzZXQnO1xuICAgICAgaWYgKEtFWSBpbiBOYXRpdmVQcm90b3R5cGUgJiYgIShJU19XRUFLICYmIEtFWSA9PT0gJ2NsZWFyJykpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5jb2xsZWN0aW9uO1xuICAgICAgICAgIGlmICghSVNfQURERVIgJiYgSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkpIHJldHVybiBLRVkgPT09ICdnZXQnID8gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGNvbGxlY3Rpb25bS0VZXShhID09PSAwID8gMCA6IGEsIGIpO1xuICAgICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSVNfV0VBSyB8fCBkZWZpbmVQcm9wZXJ0eShQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb24uc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgZXhwb3J0ZWRbQ09OU1RSVUNUT1JfTkFNRV0gPSBDb25zdHJ1Y3RvcjtcbiAgJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIGV4cG9ydGVkKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5zYWZlICYmIHRhcmdldFtrZXldKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZmFzdEtleTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgUHJvdG90eXBlKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpbmRleDogY3JlYXRlKG51bGwpLFxuICAgICAgICBmaXJzdDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWQsXG4gICAgICAgIHNpemU6IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCFERVNDUklQVE9SUykgdGhhdC5zaXplID0gMDtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0aGF0W0FEREVSXSwgeyB0aGF0OiB0aGF0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgUHJvdG90eXBlID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgdmFyIGRlZmluZSA9IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgIHZhciBwcmV2aW91cywgaW5kZXg7XG4gICAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUubGFzdCA9IGVudHJ5ID0ge1xuICAgICAgICAgIGluZGV4OiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgcHJldmlvdXM6IHByZXZpb3VzID0gc3RhdGUubGFzdCxcbiAgICAgICAgICBuZXh0OiB1bmRlZmluZWQsXG4gICAgICAgICAgcmVtb3ZlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdGF0ZS5maXJzdCkgc3RhdGUuZmlyc3QgPSBlbnRyeTtcbiAgICAgICAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy5uZXh0ID0gZW50cnk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSsrO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSsrO1xuICAgICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHN0YXRlLmluZGV4W2luZGV4XSA9IGVudHJ5O1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9O1xuXG4gICAgdmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIC8vIGZhc3QgY2FzZVxuICAgICAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICAgICAgdmFyIGVudHJ5O1xuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiBzdGF0ZS5pbmRleFtpbmRleF07XG4gICAgICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgICAgIGZvciAoZW50cnkgPSBzdGF0ZS5maXJzdDsgZW50cnk7IGVudHJ5ID0gZW50cnkubmV4dCkge1xuICAgICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCB7XG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5jbGVhcigpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5jbGVhclxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBkYXRhID0gc3RhdGUuaW5kZXg7XG4gICAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmZpcnN0O1xuICAgICAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucHJldmlvdXMpIGVudHJ5LnByZXZpb3VzID0gZW50cnkucHJldmlvdXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmZpcnN0ID0gc3RhdGUubGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplID0gMDtcbiAgICAgICAgZWxzZSB0aGF0LnNpemUgPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmRlbGV0ZShrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5pbmRleFtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubmV4dCA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucHJldmlvdXMgPSBwcmV2O1xuICAgICAgICAgIGlmIChzdGF0ZS5maXJzdCA9PT0gZW50cnkpIHN0YXRlLmZpcnN0ID0gbmV4dDtcbiAgICAgICAgICBpZiAoc3RhdGUubGFzdCA9PT0gZW50cnkpIHN0YXRlLmxhc3QgPSBwcmV2O1xuICAgICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZS0tO1xuICAgICAgICAgIGVsc2UgdGhhdC5zaXplLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuZmlyc3QpIHtcbiAgICAgICAgICBib3VuZEZ1bmN0aW9uKGVudHJ5LnZhbHVlLCBlbnRyeS5rZXksIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXR9LnByb3RvdHlwZS5oYXMoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmhhc1xuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIElTX01BUCA/IHtcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLmdldChrZXkpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudmFsdWU7XG4gICAgICB9LFxuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5zZXRcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmFkZFxuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCkge1xuICAgIHZhciBJVEVSQVRPUl9OQU1FID0gQ09OU1RSVUNUT1JfTkFNRSArICcgSXRlcmF0b3InO1xuICAgIHZhciBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgdmFyIGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoSVRFUkFUT1JfTkFNRSk7XG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUueyBrZXlzLCB2YWx1ZXMsIGVudHJpZXMsIEBAaXRlcmF0b3IgfSgpYCBtZXRob2RzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICBkZWZpbmVJdGVyYXRvcihDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgICAgdHlwZTogSVRFUkFUT1JfTkFNRSxcbiAgICAgICAgdGFyZ2V0OiBpdGVyYXRlZCxcbiAgICAgICAgc3RhdGU6IGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlKGl0ZXJhdGVkKSxcbiAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gICAgICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gICAgICB2YXIgZW50cnkgPSBzdGF0ZS5sYXN0O1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXN0YXRlLnRhcmdldCB8fCAhKHN0YXRlLmxhc3QgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLnN0YXRlLmZpcnN0KSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PT0gJ2tleXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS5rZXksIGZhbHNlKTtcbiAgICAgIGlmIChraW5kID09PSAndmFsdWVzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkudmFsdWUsIGZhbHNlKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZmFsc2UpO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xuY29sbGVjdGlvbignTWFwJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hcCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguTWFwO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9tYXAnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL21hcFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc29tZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb21lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29tZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2tleXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmtleXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmtleXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXNcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgbWVyZ2VTb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICByZXR1cm4gbGVuZ3RoIDwgOCA/IGluc2VydGlvblNvcnQoYXJyYXksIGNvbXBhcmVmbikgOiBtZXJnZShcbiAgICBhcnJheSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBjb21wYXJlZm5cbiAgKTtcbn07XG5cbnZhciBpbnNlcnRpb25Tb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGkgPSAxO1xuICB2YXIgZWxlbWVudCwgajtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGogPSBpO1xuICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICB9XG4gICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIChhcnJheSwgbGVmdCwgcmlnaHQsIGNvbXBhcmVmbikge1xuICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgdmFyIGxpbmRleCA9IDA7XG4gIHZhciByaW5kZXggPSAwO1xuXG4gIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlU29ydDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBmaXJlZm94ID0gdXNlckFnZW50Lm1hdGNoKC9maXJlZm94XFwvKFxcZCspL2kpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhZmlyZWZveCAmJiArZmlyZWZveFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbicpO1xudmFyIElFX09SX0VER0UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24nKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdW5jdXJyeVRoaXModGVzdC5zb3J0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXModGVzdC5wdXNoKTtcblxuLy8gSUU4LVxudmFyIEZBSUxTX09OX1VOREVGSU5FRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KTtcbi8vIFY4IGJ1Z1xudmFyIEZBSUxTX09OX05VTEwgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydChudWxsKTtcbn0pO1xuLy8gT2xkIFdlYktpdFxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb3J0Jyk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDcwO1xuICBpZiAoRkYgJiYgRkYgPiAzKSByZXR1cm47XG4gIGlmIChJRV9PUl9FREdFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdFQktJVCkgcmV0dXJuIFdFQktJVCA8IDYwMztcblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBjb2RlLCBjaHIsIHZhbHVlLCBpbmRleDtcblxuICAvLyBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIG1vcmUgNTEyIGVsZW1lbnRzIChDaGFrcmEgYW5kIG9sZCBWOCBmYWlscyBvbmx5IGluIHRoaXMgY2FzZSlcbiAgZm9yIChjb2RlID0gNjU7IGNvZGUgPCA3NjsgY29kZSsrKSB7XG4gICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSA2NjogY2FzZSA2OTogY2FzZSA3MDogY2FzZSA3MjogdmFsdWUgPSAzOyBicmVhaztcbiAgICAgIGNhc2UgNjg6IGNhc2UgNzE6IHZhbHVlID0gNDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB2YWx1ZSA9IDI7XG4gICAgfVxuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDc7IGluZGV4KyspIHtcbiAgICAgIHRlc3QucHVzaCh7IGs6IGNociArIGluZGV4LCB2OiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudiAtIGEudjsgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGVzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSB0ZXN0W2luZGV4XS5rLmNoYXJBdCgwKTtcbiAgICBpZiAocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IGNocikgcmVzdWx0ICs9IGNocjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgIT09ICdER0JFRkhBQ0lKSyc7XG59KTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRCB8fCAhU1RBQkxFX1NPUlQ7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICByZXR1cm4gdG9TdHJpbmcoeCkgPiB0b1N0cmluZyh5KSA/IDEgOiAtMTtcbiAgfTtcbn07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb3J0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG5cbiAgICB2YXIgYXJyYXkgPSB0b09iamVjdCh0aGlzKTtcblxuICAgIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkID8gbmF0aXZlU29ydChhcnJheSkgOiBuYXRpdmVTb3J0KGFycmF5LCBjb21wYXJlZm4pO1xuXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICAgIHZhciBpdGVtc0xlbmd0aCwgaW5kZXg7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGluZGV4IGluIGFycmF5KSBwdXNoKGl0ZW1zLCBhcnJheVtpbmRleF0pO1xuICAgIH1cblxuICAgIGludGVybmFsU29ydChpdGVtcywgZ2V0U29ydENvbXBhcmUoY29tcGFyZWZuKSk7XG5cbiAgICBpdGVtc0xlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZW1zKTtcbiAgICBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBpdGVtc0xlbmd0aCkgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXgrK107XG4gICAgd2hpbGUgKGluZGV4IDwgYXJyYXlMZW5ndGgpIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhhcnJheSwgaW5kZXgrKyk7XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29ydCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzb3J0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29ydCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb3J0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb3J0XCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAndmFsdWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudmFsdWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlc1wiKTsiLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3JcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdlbnRyaWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5lbnRyaWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5lbnRyaWVzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9lbnRyaWVzXCIpOyIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbmxldCBnZXRSYW5kb21WYWx1ZXM7XG5jb25zdCBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsICJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cblxuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiBieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghdmFsaWRhdGUodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICB9XG5cbiAgcmV0dXJuIHV1aWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ2lmeTsiLCAiY29uc3QgcmFuZG9tVVVJRCA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5yYW5kb21VVUlEICYmIGNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmFuZG9tVVVJRFxufTsiLCAiaW1wb3J0IG5hdGl2ZSBmcm9tICcuL25hdGl2ZS5qcyc7XG5pbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCB7IHVuc2FmZVN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgaWYgKG5hdGl2ZS5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmF0aXZlLnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG4gIHJuZHNbNl0gPSBybmRzWzZdICYgMHgwZiB8IDB4NDA7XG4gIHJuZHNbOF0gPSBybmRzWzhdICYgMHgzZiB8IDB4ODA7IC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuXG4gIGlmIChidWYpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgcmV0dXJuIHVuc2FmZVN0cmluZ2lmeShybmRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjQ7IiwgImltcG9ydCB7IEFzc2lnbmFibGUgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcbmltcG9ydCB7IERhdGFTdHJlYW0gfSBmcm9tIFwiLi9kYXRhLXN0cmVhbVwiO1xuXG50eXBlIFZhbHVlT2Y8VD4gPSBUW2tleW9mIFRdO1xuXG4vKiogVmFsaWQgaWQgdHlwZS4gKi9cbmV4cG9ydCB0eXBlIElkID0gbnVtYmVyIHwgc3RyaW5nO1xuLyoqIE51bGxhYmxlIGlkIHR5cGUuICovXG5leHBvcnQgdHlwZSBPcHRJZCA9IHVuZGVmaW5lZCB8IG51bGwgfCBJZDtcbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgYSB2YWx1ZSBjYW4gYmUgdXNlZCBhcyBhbiBpZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCBpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIElkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XG59XG5cbi8qKlxuICogTWFrZSBhbiBvYmplY3QgZGVlcGx5IHBhcnRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIGFueVtdIHwgRnVuY3Rpb24gfCBOb2RlXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgPyB7IFtrZXkgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW2tleV0+IH1cbiAgOiBUO1xuXG4vKipcbiAqIEFuIGl0ZW0gdGhhdCBtYXkgKHtAbGluayBJZH0pIG9yIG1heSBub3QgKGFic2VudCwgdW5kZWZpbmVkIG9yIG51bGwpIGhhdmUgYW4gaWQgcHJvcGVydHkuXG4gKlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgUGFydEl0ZW08SWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IFBhcnRpYWw8UmVjb3JkPElkUHJvcCwgT3B0SWQ+Pjtcbi8qKlxuICogQW4gaXRlbSB0aGF0IGhhcyBhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gaWQgYW5kIGFsbCBvdGhlciByZXF1aXJlZCBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRnVsbEl0ZW08XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gPSBJdGVtICYgUmVjb3JkPElkUHJvcCwgSWQ+O1xuLyoqXG4gKiBBbiBpdGVtIHRoYXQgaGFzIGEgcHJvcGVydHkgY29udGFpbmluZyBhbiBpZCBhbmQgb3B0aW9uYWxseSBvdGhlciBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgVXBkYXRlSXRlbTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiA9IEFzc2lnbmFibGU8RnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4gJiBSZWNvcmQ8SWRQcm9wLCBJZD47XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIGl0ZW0gaGFzIGFuIGlkIChpcyBhIHtAbGluayBGdWxsSXRlbX0pLlxuICpcbiAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIGlkUHJvcCAtIE5hbWUgb2YgdGhlIGlkIHByb3BlcnR5LlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoaXMgdmFsdWUgaXMgYSB7QGxpbmsgRnVsbEl0ZW19LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGxJdGVtPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+KGl0ZW06IEl0ZW0sIGlkUHJvcDogSWRQcm9wKTogaXRlbSBpcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIGl0ZW1baWRQcm9wXSAhPSBudWxsO1xufVxuXG4vKiogQWRkIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEV2ZW50UGF5bG9hZCB7XG4gIC8qKiBJZHMgb2YgYWRkZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xufVxuLyoqIFVwZGF0ZSBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVFdmVudFBheWxvYWQ8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKiogSWRzIG9mIHVwZGF0ZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xuICAvKiogSXRlbXMgYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGlzIHVwZGF0ZS4gKi9cbiAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogSXRlbXMgYXMgdGhleSBhcmUgbm93LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBKdXN0IGdldCB0aGUgZGF0YSBmcm9tIHRoZSBkYXRhIHNldCBvciBkYXRhIHZpZXcuXG4gICAqL1xuICBkYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG59XG4vKiogUmVtb3ZlIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbW92ZUV2ZW50UGF5bG9hZDxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIC8qKiBJZHMgb2YgcmVtb3ZlZCBpdGVtcy4gKi9cbiAgaXRlbXM6IElkW107XG4gIC8qKiBJdGVtcyBhcyB0aGV5IHdlcmUgYmVmb3JlIHRoZWlyIHJlbW92YWwuICovXG4gIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbn1cblxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyAoZXZlbnQgbmFtZSDihpIgcGF5bG9hZCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQYXlsb2FkczxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIGFkZDogQWRkRXZlbnRQYXlsb2FkO1xuICB1cGRhdGU6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xuICByZW1vdmU6IFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xufVxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBwYXlsb2FkKS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFBheWxvYWRzV2l0aEFueTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBleHRlbmRzIEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPiB7XG4gIFwiKlwiOiBWYWx1ZU9mPEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPj47XG59XG5cbi8qKlxuICogTWFwIG9mIGV2ZW50IGNhbGxiYWNrIHR5cGVzIChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3M8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgYWRkKG5hbWU6IFwiYWRkXCIsIHBheWxvYWQ6IEFkZEV2ZW50UGF5bG9hZCB8IG51bGwsIHNlbmRlcklkPzogSWQgfCBudWxsKTogdm9pZDtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHVwZGF0ZShcbiAgICBuYW1lOiBcInVwZGF0ZVwiLFxuICAgIHBheWxvYWQ6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+IHwgbnVsbCxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgcmVtb3ZlKFxuICAgIG5hbWU6IFwicmVtb3ZlXCIsXG4gICAgcGF5bG9hZDogUmVtb3ZlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4gfCBudWxsLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG59XG4vKipcbiAqIE1hcCBvZiBldmVudCBjYWxsYmFjayB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3NXaXRoQW55PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGV4dGVuZHMgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCAoe0BsaW5rIEV2ZW50TmFtZX0pLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIERhdGEgYWJvdXQgdGhlIGl0ZW1zIGFmZmVjdGVkIGJ5IHRoaXMgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIEEgc2VuZGVySWQsIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2hpY2ggdHJpZ2dlcmVkIHRoZSBldmVudC4gSWYgc2VuZGVySWQgaXMgbm90IHByb3ZpZGVkLCB0aGUgYXJndW1lbnQgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICBcIipcIjxOIGV4dGVuZHMga2V5b2YgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPj4oXG4gICAgbmFtZTogTixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bTl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbn1cblxuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcy4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50TmFtZSA9IGtleW9mIEV2ZW50UGF5bG9hZHM8bmV2ZXIsIFwiXCI+O1xuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcyBhbmQgJyonIHRvIGxpc3RlbiBmb3IgYWxsLiAqL1xuZXhwb3J0IHR5cGUgRXZlbnROYW1lV2l0aEFueSA9IGtleW9mIEV2ZW50UGF5bG9hZHNXaXRoQW55PG5ldmVyLCBcIlwiPjtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBvcmRlciBwYXJhbWV0ZXIuXG4gKiAtIEEgc3RyaW5nIHZhbHVlIGRldGVybWluZXMgd2hpY2ggcHJvcGVydHkgd2lsbCBiZSB1c2VkIGZvciBzb3J0aW5nICh1c2luZyA8IGFuZCA+IG9wZXJhdG9ycyBmb3IgbnVtZXJpYyBjb21wYXJpc29uKS5cbiAqIC0gQSBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdGhlIHNhbWUgd2F5IGFzIGluIEFycmF5LnNvcnQuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YUludGVyZmFjZU9yZGVyPEl0ZW0+ID1cbiAgfCBrZXlvZiBJdGVtXG4gIHwgKChhOiBJdGVtLCBiOiBJdGVtKSA9PiBudW1iZXIpO1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm4gdHlwZSBpbmRlcGVuZGVudCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0Jhc2U8SXRlbT4ge1xuICAvKipcbiAgICogQW4gYXJyYXkgd2l0aCBmaWVsZCBuYW1lcywgb3IgYW4gb2JqZWN0IHdpdGggY3VycmVudCBmaWVsZCBuYW1lIGFuZCBuZXcgZmllbGQgbmFtZSB0aGF0IHRoZSBmaWVsZCBpcyByZXR1cm5lZCBhcy4gQnkgZGVmYXVsdCwgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGFyZSBlbWl0dGVkLiBXaGVuIGZpZWxkcyBpcyBkZWZpbmVkLCBvbmx5IHRoZSBwcm9wZXJ0aWVzIHdob3NlIG5hbWUgaXMgc3BlY2lmaWVkIGluIGZpZWxkcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogV2FybmluZyoqOiBUaGVyZSBpcyBubyBUeXBlU2NyaXB0IHN1cHBvcnQgZm9yIHRoaXMuXG4gICAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZ2V0IG9wdGlvbnMgKHJldHVybnMgYSBzaW5nbGUgaXRlbSBvciBhbiBhcnJheSkuXG4gKlxuICogQHJlbWFya3NcbiAqIFdoZXRoZXIgYW4gaXRlbSBvciBhbmQgYXJyYXkgb2YgaXRlbXMgaXMgcmV0dXJuZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdHlwZSBvZiB0aGUgaWQocykgYXJndW1lbnQuXG4gKiBJZiBhbiBhcnJheSBvZiBpZHMgaXMgcmVxdWVzdGVkIGFuIGFycmF5IG9mIGl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiBhIHNpbmdsZSBpZCBpcyByZXF1ZXN0ZWQgYSBzaW5nbGUgaXRlbSAob3IgbnVsbCBpZiB0aGUgaWQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBpdGVtKSB3aWxsIGJlIHJldHVybmVkLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzaW5nbGUgaXRlbSAoaWYgaW52b2tlZCB3aXRoIGFuIGlkKSBvciBhbiBhcnJheSBvZiBpdGVtcyAoaWYgaW52b2tlZCB3aXRoIGFuIGFycmF5IG9mIGlkcykuICovXG4gIHJldHVyblR5cGU/OiB1bmRlZmluZWQgfCBcIkFycmF5XCI7XG59XG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm5zIGFuIG9iamVjdCkuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSByZXR1cm5lZCBvYmplY3QgaGFzIGlkcyBhcyBrZXlzIGFuZCBpdGVtcyBhcyB2YWx1ZXMgb2YgY29ycmVzcG9uZGluZyBpZHMuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG1hcCAoaWQg4oaSIGl0ZW0pLiAqL1xuICByZXR1cm5UeXBlOiBcIk9iamVjdFwiO1xufVxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJucyBzaW5nbGUgaXRlbSwgYW4gYXJyYXkgb3Igb2JqZWN0KS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgdHlwZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiA9XG4gIHwgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICB8IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+O1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBpZHMgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBmb3IgZWFjaCBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEFuIGFycmF5IHdpdGggZmllbGQgbmFtZXMsIG9yIGFuIG9iamVjdCB3aXRoIGN1cnJlbnQgZmllbGQgbmFtZSBhbmQgbmV3IGZpZWxkIG5hbWUgdGhhdCB0aGUgZmllbGQgaXMgcmV0dXJuZWQgYXMuIEJ5IGRlZmF1bHQsIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtcyBhcmUgZW1pdHRlZC4gV2hlbiBmaWVsZHMgaXMgZGVmaW5lZCwgb25seSB0aGUgcHJvcGVydGllcyB3aG9zZSBuYW1lIGlzIHNwZWNpZmllZCBpbiBmaWVsZHMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgaXRlbXMuICovXG4gIGZpZWxkcz86IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBtYXAgb3ByaW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIE9yaWdpbmFsIC0gVGhlIG9yaWdpbmFsIGl0ZW0gdHlwZSBpbiB0aGUgZGF0YS5cbiAqIEB0eXBlUGFyYW0gTWFwcGVkIC0gVGhlIHR5cGUgYWZ0ZXIgbWFwcGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxPcmlnaW5hbCwgTWFwcGVkPiB7XG4gIC8qKiBBbiBhcnJheSB3aXRoIGZpZWxkIG5hbWVzLCBvciBhbiBvYmplY3Qgd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUgYW5kIG5ldyBmaWVsZCBuYW1lIHRoYXQgdGhlIGZpZWxkIGlzIHJldHVybmVkIGFzLiBCeSBkZWZhdWx0LCBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgYXJlIGVtaXR0ZWQuIFdoZW4gZmllbGRzIGlzIGRlZmluZWQsIG9ubHkgdGhlIHByb3BlcnRpZXMgd2hvc2UgbmFtZSBpcyBzcGVjaWZpZWQgaW4gZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIGl0ZW1zLiAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBPcmlnaW5hbCkgPT4gYm9vbGVhbjtcbiAgLyoqIE9yZGVyIHRoZSBpdGVtcyBieSBhIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uICovXG4gIG9yZGVyPzogRGF0YUludGVyZmFjZU9yZGVyPE1hcHBlZD47XG59XG5cbi8qKlxuICogQ29tbW9uIGludGVyZmFjZSBmb3IgZGF0YSBzZXRzIGFuZCBkYXRhIHZpZXcuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZCAobWlzc2luZyBpZHMgd2lsbCBiZSBnZW5lcmF0ZWQgdXBvbiBpbnNlcnRpb24pLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgSXRlbSB0eXBlIHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4ge1xuICAvKiogVGhlIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgbGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBrZXkgb2YgaWQgcHJvcGVydHkuICovXG4gIGlkUHJvcDogSWRQcm9wO1xuXG4gIC8qKlxuICAgKiBBZGQgYSB1bml2ZXJzYWwgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgKmAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW55IG9mIHRoZSBldmVudHMgYGFkZGAsIGB1cGRhdGVgLCBhbmQgYHJlbW92ZWAgb2NjdXJzLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcIipcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYGFkZGAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgYWRkYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIGFkZGVkLCBvciB3aGVuIGFuIGl0ZW0gaXMgdXBkYXRlZCB3aGlsZSBub3QgeWV0IGV4aXN0aW5nLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcImFkZFwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl0pOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGEgYHJlbW92ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgcmVtb3ZlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgdXBkYXRlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBleGlzdGluZyBpdGVtIG9yIGEgc2V0IG9mIGV4aXN0aW5nIGl0ZW1zIGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHVuaXZlcnNhbCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiKlwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdKTogdm9pZDtcbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBgYWRkYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiYWRkXCIsIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBgcmVtb3ZlYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zLlxuICAgKi9cbiAgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyByZXF1ZXN0ZWQgaXRlbXMuXG4gICAqL1xuICBnZXQob3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPik6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBhcmUgbm8gaXRlbXMpLlxuICAgKi9cbiAgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgcmVxdWVzdGVkIGl0ZW1zIG9yIGlmIHJlcXVlc3RlZCBhbiBvYmplY3QgbWFwIG9mIGl0ZW1zIChtYXkgYmUgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGFyZSBubyBpdGVtcykuXG4gICAqL1xuICBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBvciBudWxsIGlmIHRoZSBpZCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGl0ZW0uXG4gICAqL1xuICBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIG9yIG51bGwgaWYgdGhlIGlkIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbS5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIGlmIGZvdW5kIG9yIG51bGwgb3RoZXJ3aXNlLiBJZiByZXF1ZXN0ZWQgYW4gb2JqZWN0IG1hcCB3aXRoIDAgdG8gMSBpdGVtcy5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICogSWYgcmVxdWVzdGVkIGFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gSWQgb3IgaWRzIHRvIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIGl0ZW1zIChmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSBpZHMgKHNpbmdsZSBvciBhcnJheSkgYW5kIHRoZSBvcHRpb25zLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIERhdGFTZXQgdG8gd2hpY2ggdGhlIGluc3RhbmNlIGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSBpcyBjb25uZWN0ZWQuXG4gICAqIEluIGNhc2UgdGhlcmUgaXMgYSBjaGFpbiBvZiBtdWx0aXBsZSBEYXRhVmlld3MsIHRoZSByb290IERhdGFTZXQgb2YgdGhpcyBjaGFpbiBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRhdGEgc2V0IHRoYXQgYWN0dWFsbHkgY29udGFpbnMgdGhlIGRhdGEuXG4gICAqL1xuICBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPjtcblxuICAvKipcbiAgICogR2V0IGlkcyBvZiBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiByZXR1cm5lZCBpZHMgdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICovXG4gIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiBpdGVyYXRpb24gdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBFeGVjdXRlZCBpbiBzaW1pbGFyIGZhc2hpb24gdG8gQXJyYXkuZm9yRWFjaCBjYWxsYmFjaywgYnV0IGluc3RlYWQgb2YgaXRlbSwgaW5kZXgsIGFycmF5IHJlY2VpdmVzIGl0ZW0sIGlkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICovXG4gIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBNYXAgZWFjaCBpdGVtIGludG8gZGlmZmVyZW50IGl0ZW0gYW5kIHJldHVybiB0aGVtIGFzIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBObyBndWFyYW50ZWUgaXMgZ2l2ZW4gYWJvdXQgdGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBldmVuIGlmIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkICh0aGUgaXRlbXMgYXJlIHNvcnRlZCBhZnRlciB0aGUgbWFwcGluZykuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEFycmF5Lm1hcC1saWtlIGNhbGxiYWNrLCBidXQgb25seSB3aXRoIHRoZSBmaXJzdCB0d28gcGFyYW1zLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIG1hcHBlZCBpdGVtcy5cbiAgICovXG4gIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdO1xuXG4gIC8qKlxuICAgKiBTdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBJZHMgb2YgdGhlIGl0ZW1zIHRvIGJlIGluY2x1ZGVkIGluIHRoaXMgc3RyZWFtIChtaXNzaW5nIGFyZSBpZ25vcmVkKSwgYWxsIGlmIG9taXR0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhIHN0cmVhbSBmb3IgdGhpcyBkYXRhIHNldC5cbiAgICovXG4gIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+O1xufVxuIiwgIi8qKiBRdWV1ZSBjb25maWd1cmF0aW9uIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVPcHRpb25zIHtcbiAgLyoqIFRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBCeSBkZWZhdWx0IHRoZXJlIGlzIG5vIGF1dG9tYXRpYyBmbHVzaGluZyAoYG51bGxgKS4gKi9cbiAgZGVsYXk/OiBudWxsIHwgbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBpcyBgSW5maW5pdHlgLiAqL1xuICBtYXg/OiBudW1iZXI7XG59XG4vKipcbiAqIFF1ZXVlIGV4dGVuZGluZyBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIG1ldGhvZCBuYW1lcyB0byBiZSByZXBsYWNlZCBieSBxdWV1ZWQgdmVyc2lvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVFeHRlbmRPcHRpb25zPFQ+IHtcbiAgLyoqIEEgbGlzdCB3aXRoIG1ldGhvZCBuYW1lcyBvZiB0aGUgbWV0aG9kcyBvbiB0aGUgb2JqZWN0IHRvIGJlIHJlcGxhY2VkIHdpdGggcXVldWVkIG9uZXMuICovXG4gIHJlcGxhY2U6IFRbXTtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IHZhbHVlIGlzIG51bGwuICovXG4gIGRlbGF5PzogbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBvZiBtYXggaXMgSW5maW5pdHkuICovXG4gIG1heD86IG51bWJlcjtcbn1cbi8qKlxuICogUXVldWUgY2FsbCBlbnRyeS5cbiAqIC0gQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZC5cbiAqIC0gQW4gb2JqZWN0IHdpdGggZnVuY3Rpb24sIGFyZ3MsIGNvbnRleHQgKGxpa2UgZnVuY3Rpb24uYmluZChjb250ZXh0LCAuLi5hcmdzKSkuXG4gKi9cbnR5cGUgUXVldWVDYWxsRW50cnkgPVxuICB8IEZ1bmN0aW9uXG4gIHwge1xuICAgICAgZm46IEZ1bmN0aW9uO1xuICAgICAgYXJnczogdW5rbm93bltdO1xuICAgIH1cbiAgfCB7XG4gICAgICBmbjogRnVuY3Rpb247XG4gICAgICBhcmdzOiB1bmtub3duW107XG4gICAgICBjb250ZXh0OiB1bmtub3duO1xuICAgIH07XG5cbmludGVyZmFjZSBRdWV1ZUV4dGVuZGVkPE8+IHtcbiAgb2JqZWN0OiBPO1xuICBtZXRob2RzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG9yaWdpbmFsOiB1bmtub3duO1xuICB9W107XG59XG5cbi8qKlxuICogQSBxdWV1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBtZXRob2QgbmFtZXMgdG8gYmUgcmVwbGFjZWQgYnkgcXVldWVkIHZlcnNpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVldWU8VCA9IG5ldmVyPiB7XG4gIC8qKiBEZWxheSBpbiBtaWxsaXNlY29uZHMuIElmIGRlZmluZWQgdGhlIHF1ZXVlIHdpbGwgYmUgcGVyaW9kaWNhbGx5IGZsdXNoZWQuICovXG4gIHB1YmxpYyBkZWxheTogbnVsbCB8IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHF1ZXVlIGJlZm9yZSBpdCB3aWxsIGJlIGZsdXNoZWQuICovXG4gIHB1YmxpYyBtYXg6IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9xdWV1ZToge1xuICAgIGZuOiBGdW5jdGlvbjtcbiAgICBhcmdzPzogdW5rbm93bltdO1xuICAgIGNvbnRleHQ/OiB1bmtub3duO1xuICB9W10gPSBbXTtcblxuICBwcml2YXRlIF90aW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9leHRlbmRlZDogbnVsbCB8IFF1ZXVlRXh0ZW5kZWQ8VD4gPSBudWxsO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgUXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUXVldWUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogUXVldWVPcHRpb25zKSB7XG4gICAgLy8gb3B0aW9uc1xuICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgIHRoaXMubWF4ID0gSW5maW5pdHk7XG5cbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBRdWV1ZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9ucz86IFF1ZXVlT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmRlbGF5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLmRlbGF5ID0gb3B0aW9ucy5kZWxheTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xuICAgIH1cblxuICAgIHRoaXMuX2ZsdXNoSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgYW4gb2JqZWN0IHdpdGggcXVldWluZyBmdW5jdGlvbmFsaXR5LlxuICAgKiBUaGUgb2JqZWN0IHdpbGwgYmUgZXh0ZW5kZWQgd2l0aCBhIGZ1bmN0aW9uIGZsdXNoLCBhbmQgdGhlIG1ldGhvZHMgcHJvdmlkZWQgaW4gb3B0aW9ucy5yZXBsYWNlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBxdWV1ZWQgb25lcy5cbiAgICpcbiAgICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXh0ZW5kPE8gZXh0ZW5kcyB7IGZsdXNoPzogKCkgPT4gdm9pZCB9LCBLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IE8sXG4gICAgb3B0aW9uczogUXVldWVFeHRlbmRPcHRpb25zPEs+XG4gICk6IFF1ZXVlPE8+IHtcbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBRdWV1ZTxPPihvcHRpb25zKTtcblxuICAgIGlmIChvYmplY3QuZmx1c2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFyZ2V0IG9iamVjdCBhbHJlYWR5IGhhcyBhIHByb3BlcnR5IGZsdXNoXCIpO1xuICAgIH1cbiAgICBvYmplY3QuZmx1c2ggPSAoKTogdm9pZCA9PiB7XG4gICAgICBxdWV1ZS5mbHVzaCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBtZXRob2RzOiBRdWV1ZUV4dGVuZGVkPE8+W1wibWV0aG9kc1wiXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJmbHVzaFwiLFxuICAgICAgICBvcmlnaW5hbDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXBsYWNlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMucmVwbGFjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBuYW1lID0gb3B0aW9ucy5yZXBsYWNlW2ldO1xuICAgICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBvcmlnaW5hbDogKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPilbbmFtZV0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICBxdWV1ZS5yZXBsYWNlKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPiwgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVldWUuX2V4dGVuZGVkID0ge1xuICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICBtZXRob2RzOiBtZXRob2RzLFxuICAgIH07XG5cbiAgICByZXR1cm4gcXVldWU7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSB0aGUgcXVldWUuIFRoZSBxdWV1ZSB3aWxsIGZpcnN0IGZsdXNoIGFsbCBxdWV1ZWQgYWN0aW9ucywgYW5kIGluIGNhc2UgaXQgaGFzIGV4dGVuZGVkIGFuIG9iamVjdCwgd2lsbCByZXN0b3JlIHRoZSBvcmlnaW5hbCBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsdXNoKCk7XG5cbiAgICBpZiAodGhpcy5fZXh0ZW5kZWQpIHtcbiAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuX2V4dGVuZGVkLm9iamVjdDtcbiAgICAgIGNvbnN0IG1ldGhvZHMgPSB0aGlzLl9leHRlbmRlZC5tZXRob2RzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZHNbaV07XG4gICAgICAgIGlmIChtZXRob2Qub3JpZ2luYWwpIHtcbiAgICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICAgIChvYmplY3QgYXMgYW55KVttZXRob2QubmFtZV0gPSBtZXRob2Qub3JpZ2luYWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBkZWxldGUgKG9iamVjdCBhcyBhbnkpW21ldGhvZC5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fZXh0ZW5kZWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgbWV0aG9kIG9uIGFuIG9iamVjdCB3aXRoIGEgcXVldWVkIHZlcnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBPYmplY3QgaGF2aW5nIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSBtZXRob2QgLSBUaGUgbWV0aG9kIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcmVwbGFjZTxNIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IFJlY29yZDxNLCAoKSA9PiB2b2lkPixcbiAgICBtZXRob2Q6IE1cbiAgKTogdm9pZCB7XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzIC0tIEZ1bmN0aW9uIHRoaXMgaXMgbmVjZXNzYXJ5IGluIHRoZSBmdW5jdGlvbiBiZWxsb3csIHNvIGNsYXNzIHRoaXMgaGFzIHRvIGJlIHNhdmVkIGludG8gYSB2YXJpYWJsZSBoZXJlLiAqL1xuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjb25zdCBvcmlnaW5hbCA9IG9iamVjdFttZXRob2RdO1xuICAgIGlmICghb3JpZ2luYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBcIiArIG1ldGhvZCArIFwiIHVuZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBvYmplY3RbbWV0aG9kXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICAgIC8vIGFkZCB0aGlzIGNhbGwgdG8gdGhlIHF1ZXVlXG4gICAgICBtZS5xdWV1ZSh7XG4gICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgIGZuOiBvcmlnaW5hbCxcbiAgICAgICAgY29udGV4dDogdGhpcyxcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUXVldWUgYSBjYWxsLlxuICAgKlxuICAgKiBAcGFyYW0gZW50cnkgLSBUaGUgZnVuY3Rpb24gb3IgZW50cnkgdG8gYmUgcXVldWVkLlxuICAgKi9cbiAgcHVibGljIHF1ZXVlKGVudHJ5OiBRdWV1ZUNhbGxFbnRyeSk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7IGZuOiBlbnRyeSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWUucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmx1c2hJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHF1ZXVlIG5lZWRzIHRvIGJlIGZsdXNoZWQuXG4gICAqL1xuICBwcml2YXRlIF9mbHVzaElmTmVlZGVkKCk6IHZvaWQge1xuICAgIC8vIGZsdXNoIHdoZW4gdGhlIG1heGltdW0gaXMgZXhjZWVkZWQuXG4gICAgaWYgKHRoaXMuX3F1ZXVlLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gICAgLy8gZmx1c2ggYWZ0ZXIgYSBwZXJpb2Qgb2YgaW5hY3Rpdml0eSB3aGVuIGEgZGVsYXkgaXMgY29uZmlndXJlZFxuICAgIGlmICh0aGlzLl90aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHR5cGVvZiB0aGlzLmRlbGF5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH0sIHRoaXMuZGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCBhbGwgcXVldWVkIGNhbGxzXG4gICAqL1xuICBwdWJsaWMgZmx1c2goKTogdm9pZCB7XG4gICAgdGhpcy5fcXVldWUuc3BsaWNlKDApLmZvckVhY2goKGVudHJ5KTogdm9pZCA9PiB7XG4gICAgICBlbnRyeS5mbi5hcHBseShlbnRyeS5jb250ZXh0IHx8IGVudHJ5LmZuLCBlbnRyeS5hcmdzIHx8IFtdKTtcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIEV2ZW50Q2FsbGJhY2tzV2l0aEFueSxcbiAgRXZlbnROYW1lLFxuICBFdmVudE5hbWVXaXRoQW55LFxuICBFdmVudFBheWxvYWRzLFxuICBJZCxcbiAgUGFydEl0ZW0sXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbnR5cGUgRXZlbnRTdWJzY3JpYmVyczxJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPiwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW05hbWUgaW4ga2V5b2YgRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5dOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG59O1xuXG4vKipcbiAqIHtAbGluayBEYXRhU2V0fSBjb2RlIHRoYXQgY2FuIGJlIHJldXNlZCBpbiB7QGxpbmsgRGF0YVZpZXd9IG9yIG90aGVyIHNpbWlsYXIgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBEYXRhSW50ZXJmYWNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFTZXRQYXJ0PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGltcGxlbWVudHMgUGljazxEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4sIFwib25cIiB8IFwib2ZmXCI+XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmliZXJzOiB7XG4gICAgW05hbWUgaW4gRXZlbnROYW1lV2l0aEFueV06IEV2ZW50U3Vic2NyaWJlcnM8SXRlbSwgSWRQcm9wPltOYW1lXVtdO1xuICB9ID0ge1xuICAgIFwiKlwiOiBbXSxcbiAgICBhZGQ6IFtdLFxuICAgIHJlbW92ZTogW10sXG4gICAgdXBkYXRlOiBbXSxcbiAgfTtcblxuICBwcm90ZWN0ZWQgX3RyaWdnZXIoXG4gICAgZXZlbnQ6IFwiYWRkXCIsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1wiYWRkXCJdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG4gIHByb3RlY3RlZCBfdHJpZ2dlcihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgcHJvdGVjdGVkIF90cmlnZ2VyKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogVHJpZ2dlciBhbiBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIEV2ZW50IHBheWxvYWQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIElkIG9mIHRoZSBzZW5kZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3RyaWdnZXI8TmFtZSBleHRlbmRzIEV2ZW50TmFtZT4oXG4gICAgZXZlbnQ6IE5hbWUsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W05hbWVdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICgoZXZlbnQgYXMgc3RyaW5nKSA9PT0gXCIqXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB0cmlnZ2VyIGV2ZW50ICpcIik7XG4gICAgfVxuXG4gICAgWy4uLnRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XSwgLi4udGhpcy5fc3Vic2NyaWJlcnNbXCIqXCJdXS5mb3JFYWNoKFxuICAgICAgKHN1YnNjcmliZXIpOiB2b2lkID0+IHtcbiAgICAgICAgc3Vic2NyaWJlcihldmVudCwgcGF5bG9hZCwgc2VuZGVySWQgIT0gbnVsbCA/IHNlbmRlcklkIDogbnVsbCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwiKlwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJhZGRcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl1cbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBhbiBldmVudCwgYWRkIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBOb24tZnVuY3Rpb24gY2FsbGJhY2tzIGFyZSBpZ25vcmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgb248TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLy8gQFRPRE86IE1heWJlIHRocm93IGZvciBpbnZhbGlkIGNhbGxiYWNrcz9cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcIipcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcImFkZFwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXVxuICApOiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvZmYoXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIGFuIGV2ZW50LCByZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIElmIHRoZSBzYW1lIGNhbGxiYWNrIHdhcyBzdWJzY3JpYmVkIG1vcmUgdGhhbiBvbmNlICoqYWxsKiogb2NjdXJlbmNlcyB3aWxsIGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyBvZmY8TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0gPSB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0uZmlsdGVyKFxuICAgICAgKHN1YnNjcmliZXIpOiBib29sZWFuID0+IHN1YnNjcmliZXIgIT09IGNhbGxiYWNrXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb24gaW5zdGVhZCAoUFM6IERhdGFWaWV3LnN1YnNjcmliZSA9PT0gRGF0YVZpZXcub24pLlxuICAgKi9cbiAgcHVibGljIHN1YnNjcmliZTogRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPltcIm9uXCJdID0gRGF0YVNldFBhcnQucHJvdG90eXBlLm9uO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9mZiBpbnN0ZWFkIChQUzogRGF0YVZpZXcudW5zdWJzY3JpYmUgPT09IERhdGFWaWV3Lm9mZikuXG4gICAqL1xuICBwdWJsaWMgdW5zdWJzY3JpYmU6IERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5bXCJvZmZcIl0gPVxuICAgIERhdGFTZXRQYXJ0LnByb3RvdHlwZS5vZmY7XG5cbiAgLyogZGV2ZWxibG9jazpzdGFydCAqL1xuICBwdWJsaWMgZ2V0IHRlc3RMZWFrU3Vic2NyaWJlcnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlcnM7XG4gIH1cbiAgLyogZGV2ZWxibG9jazplbmQgKi9cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgU2V0YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQtb2JqZWN0c1xuY29sbGVjdGlvbignU2V0JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU2V0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zZXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3NldFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vZXMvZ2V0LWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL3N0YWJsZS9nZXQtaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL2FjdHVhbC9nZXQtaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9mdWxsL2dldC1pdGVyYXRvcicpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3JcIik7IiwgImltcG9ydCB7IElkIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcblxuLyoqXG4gKiBEYXRhIHN0cmVhbVxuICpcbiAqIEByZW1hcmtzXG4gKiB7QGxpbmsgRGF0YVN0cmVhbX0gb2ZmZXJzIGFuIGFsd2F5cyB1cCB0byBkYXRlIHN0cmVhbSBvZiBpdGVtcyBmcm9tIGEge0BsaW5rIERhdGFTZXR9IG9yIHtAbGluayBEYXRhVmlld30uXG4gKiBUaGF0IG1lYW5zIHRoYXQgdGhlIHN0cmVhbSBpcyBldmFsdWF0ZWQgYXQgdGhlIHRpbWUgb2YgaXRlcmF0aW9uLCBjb252ZXJzaW9uIHRvIGFub3RoZXIgZGF0YSB0eXBlIG9yIHdoZW4ge0BsaW5rIGNhY2hlfSBpcyBjYWxsZWQsIG5vdCB3aGVuIHRoZSB7QGxpbmsgRGF0YVN0cmVhbX0gd2FzIGNyZWF0ZWQuXG4gKiBNdWx0aXBsZSBpbnZvY2F0aW9ucyBvZiBmb3IgZXhhbXBsZSB7QGxpbmsgdG9JdGVtQXJyYXl9IG1heSB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cyAoaWYgdGhlIGRhdGEgc291cmNlIGxpa2UgZm9yIGV4YW1wbGUge0BsaW5rIERhdGFTZXR9IGdldHMgbW9kaWZpZWQpLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gVGhlIGl0ZW0gdHlwZSB0aGlzIHN0cmVhbSBpcyBnb2luZyB0byB3b3JrIHdpdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU3RyZWFtPEl0ZW0+IGltcGxlbWVudHMgSXRlcmFibGU8W0lkLCBJdGVtXT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWlyczogSXRlcmFibGU8W0lkLCBJdGVtXT47XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIHBhaXJzIC0gVGhlIGlkLCBpdGVtIHBhaXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhaXJzOiBJdGVyYWJsZTxbSWQsIEl0ZW1dPikge1xuICAgIHRoaXMuX3BhaXJzID0gcGFpcnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZXJhYmxlIG9mIGtleSwgdmFsdWUgcGFpcnMgZm9yIGV2ZXJ5IGVudHJ5IGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4ge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZXJhYmxlIG9mIGtleSwgdmFsdWUgcGFpcnMgZm9yIGV2ZXJ5IGVudHJ5IGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKmVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2Yga2V5cyBpbiB0aGUgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljICprZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8SWQ+IHtcbiAgICBmb3IgKGNvbnN0IFtpZF0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIGlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2YgdmFsdWVzIGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKnZhbHVlcygpOiBJdGVyYWJsZUl0ZXJhdG9yPEl0ZW0+IHtcbiAgICBmb3IgKGNvbnN0IFssIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBpdGVtO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGlkcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFycmF5IG1heSBjb250YWluIGR1cGxpY2l0aWVzLlxuICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCBhbGwgaWRzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JZEFycmF5KCk6IElkW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFpcnNdLm1hcCgocGFpcik6IElkID0+IHBhaXJbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBhcnJheSBtYXkgY29udGFpbiBkdXBsaWNpdGllcy5cbiAgICogQHJldHVybnMgVGhlIGFycmF5IHdpdGggYWxsIGl0ZW1zIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JdGVtQXJyYXkoKTogSXRlbVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3BhaXJzXS5tYXAoKHBhaXIpOiBJdGVtID0+IHBhaXJbMV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgZW50cmllcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFycmF5IG1heSBjb250YWluIGR1cGxpY2l0aWVzLlxuICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCBhbGwgZW50cmllcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvRW50cnlBcnJheSgpOiBbSWQsIEl0ZW1dW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFpcnNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvYmplY3QgbWFwIGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBpbiB0aGlzIHN0cmVhbSBhY2Nlc3NpYmxlIGJ5IGlkcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSW4gY2FzZSBvZiBkdXBsaWNhdGUgaWRzIChjb2VyY2VkIHRvIHN0cmluZyBzbyBgNyA9PSAnNydgKSB0aGUgbGFzdCBlbmNvdXRlcmVkIGFwcGVhcnMgaW4gdGhlIHJldHVybmVkIG9iamVjdC5cbiAgICogQHJldHVybnMgVGhlIG9iamVjdCBtYXAgb2YgYWxsIGlkIOKGkiBpdGVtIHBhaXJzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9PYmplY3RNYXAoKTogUmVjb3JkPElkLCBJdGVtPiB7XG4gICAgY29uc3QgbWFwOiBSZWNvcmQ8SWQsIEl0ZW0+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIG1hcFtpZF0gPSBpdGVtO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hcCBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMgaW4gdGhpcyBzdHJlYW0gYWNjZXNzaWJsZSBieSBpZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBtYXAgb2YgYWxsIGlkIOKGkiBpdGVtIHBhaXJzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9NYXAoKTogTWFwPElkLCBJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBNYXAodGhpcy5fcGFpcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHNldCBjb250YWluaW5nIGFsbCB0aGUgKHVuaXF1ZSkgaWRzIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2V0IG9mIGFsbCBpZHMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0lkU2V0KCk6IFNldDxJZD4ge1xuICAgIHJldHVybiBuZXcgU2V0KHRoaXMudG9JZEFycmF5KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHNldCBjb250YWluaW5nIGFsbCB0aGUgKHVuaXF1ZSkgaXRlbXMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBzZXQgb2YgYWxsIGl0ZW1zIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JdGVtU2V0KCk6IFNldDxJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBTZXQodGhpcy50b0l0ZW1BcnJheSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNoZSB0aGUgaXRlbXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBtZXRob2QgYWxsb3dzIGZvciBpdGVtcyB0byBiZSBmZXRjaGVkIGltbWVkaWF0ZWxseSBhbmQgdXNlZCAocG9zc2libHkgbXVsdGlwbGUgdGltZXMpIGxhdGVyLlxuICAgKiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIG9wdGltaXplIHBlcmZvcm1hbmNlIGFzIHtAbGluayBEYXRhU3RyZWFtfSB3b3VsZCBvdGhlcndpc2UgcmVldmFsdWF0ZSBldmVyeXRoaW5nIHVwb24gZWFjaCBpdGVyYXRpb24uXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiBjb25zdCBkcyA9IG5ldyBEYXRhU2V0KFvigKZdKVxuICAgKlxuICAgKiBjb25zdCBjYWNoZWRTdHJlYW0gPSBkcy5zdHJlYW0oKVxuICAgKiAgIC5maWx0ZXIo4oCmKVxuICAgKiAgIC5zb3J0KOKApilcbiAgICogICAubWFwKOKApilcbiAgICogICAuY2FjaGVkKOKApikgLy8gRGF0YSBhcmUgZmV0Y2hlZCwgcHJvY2Vzc2VkIGFuZCBjYWNoZWQgaGVyZS5cbiAgICpcbiAgICogZHMuY2xlYXIoKVxuICAgKiBjaGFjaGVkU3RyZWFtIC8vIFN0aWxsIGhhcyBhbGwgdGhlIGl0ZW1zLlxuICAgKiBgYGBcbiAgICogQHJldHVybnMgQSBuZXcge0BsaW5rIERhdGFTdHJlYW19IHdpdGggY2FjaGVkIGl0ZW1zIChkZXRhY2hlZCBmcm9tIHRoZSBvcmlnaW5hbCB7QGxpbmsgRGF0YVNldH0pLlxuICAgKi9cbiAgcHVibGljIGNhY2hlKCk6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbShbLi4udGhpcy5fcGFpcnNdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRpc3RpbmN0IHZhbHVlcyBvZiBnaXZlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcGlja3MgYW5kIHBvc3NpYmx5IGNvbnZlcnRzIHRoZSBwcm9wZXJ0eS5cbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRpc3RpbmN0IHZhbHVlLlxuICAgKiBAcmV0dXJucyBBIHNldCBvZiBhbGwgZGlzdGluY3QgcHJvcGVydGllcy5cbiAgICovXG4gIHB1YmxpYyBkaXN0aW5jdDxUPihjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCk6IFNldDxUPiB7XG4gICAgY29uc3Qgc2V0ID0gbmV3IFNldDxUPigpO1xuXG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICBzZXQuYWRkKGNhbGxiYWNrKGl0ZW0sIGlkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIGl0ZW1zIG9mIHRoZSBzdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IGRlY2lkZXMgd2hldGhlciBhbiBpdGVtIHdpbGwgYmUgaW5jbHVkZWQuXG4gICAqIEByZXR1cm5zIEEgbmV3IGRhdGEgc3RyZWFtIHdpdGggdGhlIGZpbHRlcmVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGZpbHRlcihjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gYm9vbGVhbik6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIGNvbnN0IHBhaXJzID0gdGhpcy5fcGFpcnM7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtPEl0ZW0+KHtcbiAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICAgICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHBhaXJzKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKGl0ZW0sIGlkKSkge1xuICAgICAgICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIGl0ZW0gb2YgdGhlIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIGZvciBlYWNoIGl0ZW0uXG4gICAqL1xuICBwdWJsaWMgZm9yRWFjaChjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gYm9vbGVhbik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgdGhlIGl0ZW1zIGludG8gYSBkaWZmZXJlbnQgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgY29udmVyc2lvbi5cbiAgICogQHR5cGVQYXJhbSBNYXBwZWQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbSBhZnRlciBtYXBwaW5nLlxuICAgKiBAcmV0dXJucyBBIG5ldyBkYXRhIHN0cmVhbSB3aXRoIHRoZSBtYXBwZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgbWFwPE1hcHBlZD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IE1hcHBlZFxuICApOiBEYXRhU3RyZWFtPE1hcHBlZD4ge1xuICAgIGNvbnN0IHBhaXJzID0gdGhpcy5fcGFpcnM7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtPE1hcHBlZD4oe1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBNYXBwZWRdPiB7XG4gICAgICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiBwYWlycykge1xuICAgICAgICAgIHlpZWxkIFtpZCwgY2FsbGJhY2soaXRlbSwgaWQpXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGl0ZW0gd2l0aCB0aGUgbWF4aW11bSB2YWx1ZSBvZiBnaXZlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcGlja3MgYW5kIHBvc3NpYmx5IGNvbnZlcnRzIHRoZSBwcm9wZXJ0eS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gd2l0aCB0aGUgbWF4aW11bSBpZiBmb3VuZCBvdGhlcndpc2UgbnVsbC5cbiAgICovXG4gIHB1YmxpYyBtYXgoY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IG51bWJlcik6IEl0ZW0gfCBudWxsIHtcbiAgICBjb25zdCBpdGVyID0gdGhpcy5fcGFpcnNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIGxldCBjdXJyID0gaXRlci5uZXh0KCk7XG4gICAgaWYgKGN1cnIuZG9uZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG1heEl0ZW06IEl0ZW0gPSBjdXJyLnZhbHVlWzFdO1xuICAgIGxldCBtYXhWYWx1ZTogbnVtYmVyID0gY2FsbGJhY2soY3Vyci52YWx1ZVsxXSwgY3Vyci52YWx1ZVswXSk7XG4gICAgd2hpbGUgKCEoY3VyciA9IGl0ZXIubmV4dCgpKS5kb25lKSB7XG4gICAgICBjb25zdCBbaWQsIGl0ZW1dID0gY3Vyci52YWx1ZTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgaWYgKHZhbHVlID4gbWF4VmFsdWUpIHtcbiAgICAgICAgbWF4VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgbWF4SXRlbSA9IGl0ZW07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heEl0ZW07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpdGVtIHdpdGggdGhlIG1pbmltdW0gdmFsdWUgb2YgZ2l2ZW4gcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IHBpY2tzIGFuZCBwb3NzaWJseSBjb252ZXJ0cyB0aGUgcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIHdpdGggdGhlIG1pbmltdW0gaWYgZm91bmQgb3RoZXJ3aXNlIG51bGwuXG4gICAqL1xuICBwdWJsaWMgbWluKGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBudW1iZXIpOiBJdGVtIHwgbnVsbCB7XG4gICAgY29uc3QgaXRlciA9IHRoaXMuX3BhaXJzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBsZXQgY3VyciA9IGl0ZXIubmV4dCgpO1xuICAgIGlmIChjdXJyLmRvbmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBtaW5JdGVtOiBJdGVtID0gY3Vyci52YWx1ZVsxXTtcbiAgICBsZXQgbWluVmFsdWU6IG51bWJlciA9IGNhbGxiYWNrKGN1cnIudmFsdWVbMV0sIGN1cnIudmFsdWVbMF0pO1xuICAgIHdoaWxlICghKGN1cnIgPSBpdGVyLm5leHQoKSkuZG9uZSkge1xuICAgICAgY29uc3QgW2lkLCBpdGVtXSA9IGN1cnIudmFsdWU7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgIGlmICh2YWx1ZSA8IG1pblZhbHVlKSB7XG4gICAgICAgIG1pblZhbHVlID0gdmFsdWU7XG4gICAgICAgIG1pbkl0ZW0gPSBpdGVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtaW5JdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZSB0aGUgaXRlbXMgaW50byBhIHNpbmdsZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgcmVkdWN0aW9uLlxuICAgKiBAcGFyYW0gYWNjdW11bGF0b3IgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYWNjdW11bGF0b3IuXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhlIHJlZHVjZWQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgcmVkdWNlPFQ+KFxuICAgIGNhbGxiYWNrOiAoYWNjdW11bGF0b3I6IFQsIGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBhY2N1bXVsYXRvcjogVFxuICApOiBUIHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gY2FsbGJhY2soYWNjdW11bGF0b3IsIGl0ZW0sIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBJdGVtIGNvbXBhcmF0b3IuXG4gICAqIEByZXR1cm5zIEEgbmV3IHN0cmVhbSB3aXRoIHNvcnRlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBzb3J0KFxuICAgIGNhbGxiYWNrOiAoaXRlbUE6IEl0ZW0sIGl0ZW1COiBJdGVtLCBpZEE6IElkLCBpZEI6IElkKSA9PiBudW1iZXJcbiAgKTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtKHtcbiAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiAoKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiA9PlxuICAgICAgICBbLi4udGhpcy5fcGFpcnNdXG4gICAgICAgICAgLnNvcnQoKFtpZEEsIGl0ZW1BXSwgW2lkQiwgaXRlbUJdKTogbnVtYmVyID0+XG4gICAgICAgICAgICBjYWxsYmFjayhpdGVtQSwgaXRlbUIsIGlkQSwgaWRCKVxuICAgICAgICAgIClcbiAgICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpLFxuICAgIH0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgdjQgYXMgdXVpZDQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgcHVyZURlZXBPYmplY3RBc3NpZ24gfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbmltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldElkc09wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5LFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdCxcbiAgRGF0YUludGVyZmFjZU1hcE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VPcmRlcixcbiAgRGVlcFBhcnRpYWwsXG4gIEV2ZW50UGF5bG9hZHMsXG4gIEZ1bGxJdGVtLFxuICBJZCxcbiAgT3B0SWQsXG4gIFBhcnRJdGVtLFxuICBVcGRhdGVJdGVtLFxuICBpc0lkLFxufSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBRdWV1ZSwgUXVldWVPcHRpb25zIH0gZnJvbSBcIi4vcXVldWVcIjtcbmltcG9ydCB7IERhdGFTZXRQYXJ0IH0gZnJvbSBcIi4vZGF0YS1zZXQtcGFydFwiO1xuaW1wb3J0IHsgRGF0YVN0cmVhbSB9IGZyb20gXCIuL2RhdGEtc3RyZWFtXCI7XG5cbi8qKlxuICogSW5pdGlhbCBEYXRhU2V0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcCBleHRlbmRzIHN0cmluZz4ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpZWxkIGNvbnRhaW5pbmcgdGhlIGlkIG9mIHRoZSBpdGVtcy4gV2hlbiBkYXRhIGlzIGZldGNoZWQgZnJvbSBhIHNlcnZlciB3aGljaCB1c2VzIHNvbWUgc3BlY2lmaWMgZmllbGQgdG8gaWRlbnRpZnkgaXRlbXMsIHRoaXMgZmllbGQgbmFtZSBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBEYXRhU2V0IHVzaW5nIHRoZSBvcHRpb24gYGZpZWxkSWRgLiBGb3IgZXhhbXBsZSBbQ291Y2hEQl0oaHR0cDovL2NvdWNoZGIuYXBhY2hlLm9yZy8pIHVzZXMgdGhlIGZpZWxkIGAnX2lkJ2AgdG8gaWRlbnRpZnkgZG9jdW1lbnRzLlxuICAgKi9cbiAgZmllbGRJZD86IElkUHJvcDtcbiAgLyoqXG4gICAqIFF1ZXVlIGRhdGEgY2hhbmdlcyAoJ2FkZCcsICd1cGRhdGUnLCAncmVtb3ZlJykgYW5kIGZsdXNoIHRoZW0gYXQgb25jZS4gVGhlIHF1ZXVlIGNhbiBiZSBmbHVzaGVkIG1hbnVhbGx5IGJ5IGNhbGxpbmcgYERhdGFTZXQuZmx1c2goKWAsIG9yIGNhbiBiZSBmbHVzaGVkIGFmdGVyIGEgY29uZmlndXJlZCBkZWxheSBvciBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzLlxuICAgKlxuICAgKiBXaGVuIHF1ZXVlIGlzIHRydWUsIGEgcXVldWUgaXMgY3JlYXRlZCB3aXRoIGRlZmF1bHQgb3B0aW9ucy4gT3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHByb3ZpZGluZyBhbiBvYmplY3QuXG4gICAqL1xuICBxdWV1ZT86IFF1ZXVlT3B0aW9ucyB8IGZhbHNlO1xufVxuLyoqIERhdGFTZXQgY29uZmlndXJhdGlvbiBvYmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFF1ZXVlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IG9yIGZhbHNlIGlmIG5vIHF1ZXVlIHNob3VsZCBiZSB1c2VkLlxuICAgKlxuICAgKiAtIElmIGZhbHNlIGFuZCB0aGVyZSB3YXMgYSBxdWV1ZSBiZWZvcmUgaXQgd2lsbCBiZSBmbHVzaGVkIGFuZCB0aGVuIHJlbW92ZWQuXG4gICAqIC0gSWYge0BsaW5rIFF1ZXVlT3B0aW9uc30gdGhlIGV4aXN0aW5nIHF1ZXVlIHdpbGwgYmUgcmVjb25maWd1cmVkIG9yIGEgbmV3IHF1ZXVlIHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIHF1ZXVlPzogUXVldWUgfCBRdWV1ZU9wdGlvbnMgfCBmYWxzZTtcbn1cblxuLyoqXG4gKiBBZGQgYW4gaWQgdG8gZ2l2ZW4gaXRlbSBpZiBpdCBkb2Vzbid0IGhhdmUgb25lIGFscmVhZHkuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBpdGVtIHdpbGwgYmUgbW9kaWZpZWQuXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBpdGVtIHRoYXQgd2lsbCBoYXZlIGFuIGlkIGFmdGVyIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIGlkUHJvcCAtIFRoZSBrZXkgb2YgdGhlIGlkIHByb3BlcnR5LlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKiBAcmV0dXJucyB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVuc3VyZUZ1bGxJdGVtPEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LCBJZFByb3AgZXh0ZW5kcyBzdHJpbmc+KFxuICBpdGVtOiBJdGVtLFxuICBpZFByb3A6IElkUHJvcFxuKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB7XG4gIGlmIChpdGVtW2lkUHJvcF0gPT0gbnVsbCkge1xuICAgIC8vIGdlbmVyYXRlIGFuIGlkXG4gICAgaXRlbVtpZFByb3BdID0gdXVpZDQoKSBhcyBhbnk7XG4gIH1cblxuICByZXR1cm4gaXRlbSBhcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xufVxuXG4vKipcbiAqICMgRGF0YVNldFxuICpcbiAqIFZpcy5qcyBjb21lcyB3aXRoIGEgZmxleGlibGUgRGF0YVNldCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaG9sZCBhbmRcbiAqIG1hbmlwdWxhdGUgdW5zdHJ1Y3R1cmVkIGRhdGEgYW5kIGxpc3RlbiBmb3IgY2hhbmdlcyBpbiB0aGUgZGF0YS4gVGhlIERhdGFTZXRcbiAqIGlzIGtleS92YWx1ZSBiYXNlZC4gRGF0YSBpdGVtcyBjYW4gYmUgYWRkZWQsIHVwZGF0ZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGVcbiAqIERhdGFTZXQsIGFuZCBvbmUgY2FuIHN1YnNjcmliZSB0byBjaGFuZ2VzIGluIHRoZSBEYXRhU2V0LiBUaGUgZGF0YSBpbiB0aGVcbiAqIERhdGFTZXQgY2FuIGJlIGZpbHRlcmVkIGFuZCBvcmRlcmVkLiBEYXRhIGNhbiBiZSBub3JtYWxpemVkIHdoZW4gYXBwZW5kaW5nIGl0XG4gKiB0byB0aGUgRGF0YVNldCBhcyB3ZWxsLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHVzZSBhIERhdGFTZXQuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICogdmFyIG9wdGlvbnMgPSB7fTtcbiAqIHZhciBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KG9wdGlvbnMpO1xuICpcbiAqIC8vIGFkZCBpdGVtc1xuICogLy8gbm90ZSB0aGF0IHRoZSBkYXRhIGl0ZW1zIGNhbiBjb250YWluIGRpZmZlcmVudCBwcm9wZXJ0aWVzIGFuZCBkYXRhIGZvcm1hdHNcbiAqIGRhdGEuYWRkKFtcbiAqICAge2lkOiAxLCB0ZXh0OiAnaXRlbSAxJywgZGF0ZTogbmV3IERhdGUoMjAxMywgNiwgMjApLCBncm91cDogMSwgZmlyc3Q6IHRydWV9LFxuICogICB7aWQ6IDIsIHRleHQ6ICdpdGVtIDInLCBkYXRlOiAnMjAxMy0wNi0yMycsIGdyb3VwOiAyfSxcbiAqICAge2lkOiAzLCB0ZXh0OiAnaXRlbSAzJywgZGF0ZTogJzIwMTMtMDYtMjUnLCBncm91cDogMn0sXG4gKiAgIHtpZDogNCwgdGV4dDogJ2l0ZW0gNCd9XG4gKiBdKTtcbiAqXG4gKiAvLyBzdWJzY3JpYmUgdG8gYW55IGNoYW5nZSBpbiB0aGUgRGF0YVNldFxuICogZGF0YS5vbignKicsIGZ1bmN0aW9uIChldmVudCwgcHJvcGVydGllcywgc2VuZGVySWQpIHtcbiAqICAgY29uc29sZS5sb2coJ2V2ZW50JywgZXZlbnQsIHByb3BlcnRpZXMpO1xuICogfSk7XG4gKlxuICogLy8gdXBkYXRlIGFuIGV4aXN0aW5nIGl0ZW1cbiAqIGRhdGEudXBkYXRlKHtpZDogMiwgZ3JvdXA6IDF9KTtcbiAqXG4gKiAvLyByZW1vdmUgYW4gaXRlbVxuICogZGF0YS5yZW1vdmUoNCk7XG4gKlxuICogLy8gZ2V0IGFsbCBpZHNcbiAqIHZhciBpZHMgPSBkYXRhLmdldElkcygpO1xuICogY29uc29sZS5sb2coJ2lkcycsIGlkcyk7XG4gKlxuICogLy8gZ2V0IGEgc3BlY2lmaWMgaXRlbVxuICogdmFyIGl0ZW0xID0gZGF0YS5nZXQoMSk7XG4gKiBjb25zb2xlLmxvZygnaXRlbTEnLCBpdGVtMSk7XG4gKlxuICogLy8gcmV0cmlldmUgYSBmaWx0ZXJlZCBzdWJzZXQgb2YgdGhlIGRhdGFcbiAqIHZhciBpdGVtcyA9IGRhdGEuZ2V0KHtcbiAqICAgZmlsdGVyOiBmdW5jdGlvbiAoaXRlbSkge1xuICogICAgIHJldHVybiBpdGVtLmdyb3VwID09IDE7XG4gKiAgIH1cbiAqIH0pO1xuICogY29uc29sZS5sb2coJ2ZpbHRlcmVkIGl0ZW1zJywgaXRlbXMpO1xuICogYGBgXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU2V0PFxuICAgIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICAgIElkUHJvcCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuICA+XG4gIGV4dGVuZHMgRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPlxuICBpbXBsZW1lbnRzIERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPlxue1xuICAvKiogRmx1c2ggYWxsIHF1ZXVlZCBjYWxscy4gKi9cbiAgcHVibGljIGZsdXNoPzogKCkgPT4gdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBsZW5ndGg6IG51bWJlcjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQgaWRQcm9wKCk6IElkUHJvcCB7XG4gICAgcmV0dXJuIHRoaXMuX2lkUHJvcDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhOiBNYXA8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pZFByb3A6IElkUHJvcDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlPHRoaXM+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRGF0YVNldCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPik7XG4gIC8qKlxuICAgKiBAcGFyYW0gZGF0YSAtIEFuIGluaXRpYWwgc2V0IG9mIGl0ZW1zIGZvciB0aGUgbmV3IGluc3RhbmNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIERhdGFTZXQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRhOiBJdGVtW10sIG9wdGlvbnM/OiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPik7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgRGF0YVNldC5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBJbml0aWFsIGRhdGEgb3Igb3B0aW9ucy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zICh0eXBlIGVycm9yIGlmIGRhdGEgaXMgYWxzbyBvcHRpb25zKS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBkYXRhPzogSXRlbVtdIHwgRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD4sXG4gICAgb3B0aW9ucz86IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+XG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBjb3JyZWN0bHkgcmVhZCBvcHRpb25hbCBhcmd1bWVudHNcbiAgICBpZiAoZGF0YSAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgb3B0aW9ucyA9IGRhdGE7XG4gICAgICBkYXRhID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5fZGF0YSA9IG5ldyBNYXAoKTsgLy8gbWFwIHdpdGggZGF0YSBpbmRleGVkIGJ5IGlkXG4gICAgdGhpcy5sZW5ndGggPSAwOyAvLyBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIERhdGFTZXRcbiAgICB0aGlzLl9pZFByb3AgPSB0aGlzLl9vcHRpb25zLmZpZWxkSWQgfHwgKFwiaWRcIiBhcyBJZFByb3ApOyAvLyBuYW1lIG9mIHRoZSBmaWVsZCBjb250YWluaW5nIGlkXG5cbiAgICAvLyBhZGQgaW5pdGlhbCBkYXRhIHdoZW4gcHJvdmlkZWRcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCkge1xuICAgICAgdGhpcy5hZGQoZGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBuZXcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgbmV3IG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zPzogRGF0YVNldE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLnF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICAvLyBkZWxldGUgcXVldWUgaWYgbG9hZGVkXG4gICAgICAgIGlmICh0aGlzLl9xdWV1ZSkge1xuICAgICAgICAgIHRoaXMuX3F1ZXVlLmRlc3Ryb3koKTtcbiAgICAgICAgICB0aGlzLl9xdWV1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNyZWF0ZSBxdWV1ZSBhbmQgdXBkYXRlIGl0cyBvcHRpb25zXG4gICAgICAgIGlmICghdGhpcy5fcXVldWUpIHtcbiAgICAgICAgICB0aGlzLl9xdWV1ZSA9IFF1ZXVlLmV4dGVuZCh0aGlzLCB7XG4gICAgICAgICAgICByZXBsYWNlOiBbXCJhZGRcIiwgXCJ1cGRhdGVcIiwgXCJyZW1vdmVcIl0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5xdWV1ZSAmJiB0eXBlb2Ygb3B0aW9ucy5xdWV1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHRoaXMuX3F1ZXVlLnNldE9wdGlvbnMob3B0aW9ucy5xdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZGF0YSBpdGVtIG9yIGFuIGFycmF5IHdpdGggaXRlbXMuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgYWRkZWQgdG8gdGhlIERhdGFTZXQsIHRoZSBEYXRhU2V0IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgYWRkYC4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldCgpXG4gICAqXG4gICAqIC8vIGFkZCBpdGVtc1xuICAgKiBjb25zdCBpZHMgPSBkYXRhLmFkZChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgdGV4dDogJ2l0ZW0gd2l0aG91dCBhbiBpZCcgfVxuICAgKiBdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsxLCAyLCAnPFVVSUR2ND4nXVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBJdGVtcyB0byBiZSBhZGRlZCAoaWRzIHdpbGwgYmUgZ2VuZXJhdGVkIGlmIG1pc3NpbmcpLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIGFkZGVkSWRzIC0gQXJyYXkgd2l0aCB0aGUgaWRzIChnZW5lcmF0ZWQgaWYgbm90IHByZXNlbnQpIG9mIHRoZSBhZGRlZCBpdGVtcy5cbiAgICogQHRocm93cyBXaGVuIGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpZCBhcyBhbnkgb2YgdGhlIGFkZGVkIGl0ZW1zIGFscmVhZHkgZXhpc3RzLlxuICAgKi9cbiAgcHVibGljIGFkZChkYXRhOiBJdGVtIHwgSXRlbVtdLCBzZW5kZXJJZD86IElkIHwgbnVsbCk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgbGV0IGlkOiBJZDtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAvLyBBcnJheVxuICAgICAgY29uc3QgaWRzVG9BZGQ6IElkW10gPSBkYXRhLm1hcCgoZCkgPT4gZFt0aGlzLl9pZFByb3BdIGFzIElkKTtcbiAgICAgIGlmIChpZHNUb0FkZC5zb21lKChpZCkgPT4gdGhpcy5fZGF0YS5oYXMoaWQpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGR1cGxpY2F0ZSBpZCB3YXMgZm91bmQgaW4gdGhlIHBhcmFtZXRlciBhcnJheS5cIik7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZCA9IHRoaXMuX2FkZEl0ZW0oZGF0YVtpXSk7XG4gICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gU2luZ2xlIGl0ZW1cbiAgICAgIGlkID0gdGhpcy5fYWRkSXRlbShkYXRhKTtcbiAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlXCIpO1xuICAgIH1cblxuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSwgc2VuZGVySWQpO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRlZElkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3RpbmcgaXRlbXMuIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgcHJvdmlkZWQgcHJvcGVydGllcyB3aWxsIGJlIG1lcmdlZCBpbiB0aGUgZXhpc3RpbmcgaXRlbS4gV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgdXBkYXRlZCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGBhZGRgIGZvciB0aGUgYWRkZWQgaXRlbXMsIGFuZCBhbiBldmVudCBgdXBkYXRlYC4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgaWQ6IDMsIHRleHQ6ICdpdGVtIDMnIH1cbiAgICogXSlcbiAgICpcbiAgICogLy8gdXBkYXRlIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEudXBkYXRlKFtcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyICh1cGRhdGVkKScgfSxcbiAgICogICB7IGlkOiA0LCB0ZXh0OiAnaXRlbSA0IChuZXcpJyB9XG4gICAqIF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzIsIDRdXG4gICAqIGBgYFxuICAgKlxuICAgKiAjIyBXYXJuaW5nIGZvciBUeXBlU2NyaXB0IHVzZXJzXG4gICAqIFRoaXMgbWV0aG9kIG1heSBpbnRyb2R1Y2UgcGFydGlhbCBpdGVtcyBpbnRvIHRoZSBkYXRhIHNldC4gVXNlIGFkZCBvciB1cGRhdGVPbmx5IGluc3RlYWQgZm9yIGJldHRlciB0eXBlIHNhZmV0eS5cbiAgICogQHBhcmFtIGRhdGEgLSBJdGVtcyB0byBiZSB1cGRhdGVkIChpZiB0aGUgaWQgaXMgYWxyZWFkeSBwcmVzZW50KSBvciBhZGRlZCAoaWYgdGhlIGlkIGlzIG1pc3NpbmcpLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIHVwZGF0ZWRJZHMgLSBUaGUgaWRzIG9mIHRoZSBhZGRlZCAodGhlc2UgbWF5IGJlIG5ld2x5IGdlbmVyYXRlZCBpZiB0aGVyZSB3YXMgbm8gaWQgaW4gdGhlIGl0ZW0gZnJvbSB0aGUgZGF0YSkgb3IgdXBkYXRlZCBpdGVtcy5cbiAgICogQHRocm93cyBXaGVuIHRoZSBzdXBwbGllZCBkYXRhIGlzIG5laXRoZXIgYW4gaXRlbSBub3IgYW4gYXJyYXkgb2YgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlKFxuICAgIGRhdGE6IERlZXBQYXJ0aWFsPEl0ZW0+IHwgRGVlcFBhcnRpYWw8SXRlbT5bXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiBJZFtdIHtcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCBvbGREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgY29uc3QgaWRQcm9wID0gdGhpcy5faWRQcm9wO1xuXG4gICAgY29uc3QgYWRkT3JVcGRhdGUgPSAoaXRlbTogRGVlcFBhcnRpYWw8SXRlbT4pOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IG9yaWdJZDogT3B0SWQgPSBpdGVtW2lkUHJvcF07XG4gICAgICBpZiAob3JpZ0lkICE9IG51bGwgJiYgdGhpcy5fZGF0YS5oYXMob3JpZ0lkKSkge1xuICAgICAgICBjb25zdCBmdWxsSXRlbSA9IGl0ZW0gYXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjsgLy8gaXQgaGFzIGFuIGlkLCB0aGVyZWZvcmUgaXQgaXMgYSBmdWxsaXRlbVxuICAgICAgICBjb25zdCBvbGRJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGF0YS5nZXQob3JpZ0lkKSk7XG4gICAgICAgIC8vIHVwZGF0ZSBpdGVtXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5fdXBkYXRlSXRlbShmdWxsSXRlbSk7XG4gICAgICAgIHVwZGF0ZWRJZHMucHVzaChpZCk7XG4gICAgICAgIHVwZGF0ZWREYXRhLnB1c2goZnVsbEl0ZW0pO1xuICAgICAgICBvbGREYXRhLnB1c2gob2xkSXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhZGQgbmV3IGl0ZW1cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLl9hZGRJdGVtKGl0ZW0gYXMgYW55KTtcbiAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAvLyBBcnJheVxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGRhdGFbaV0gJiYgdHlwZW9mIGRhdGFbaV0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBhZGRPclVwZGF0ZShkYXRhW2ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIklnbm9yaW5nIGlucHV0IGl0ZW0sIHdoaWNoIGlzIG5vdCBhbiBvYmplY3QgYXQgaW5kZXggXCIgKyBpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gU2luZ2xlIGl0ZW1cbiAgICAgIGFkZE9yVXBkYXRlKGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlXCIpO1xuICAgIH1cblxuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSwgc2VuZGVySWQpO1xuICAgIH1cbiAgICBpZiAodXBkYXRlZElkcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByb3BzID0geyBpdGVtczogdXBkYXRlZElkcywgb2xkRGF0YTogb2xkRGF0YSwgZGF0YTogdXBkYXRlZERhdGEgfTtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGVkIHByb3BlcnR5ICdkYXRhJyBzb21lIGRheVxuICAgICAgLy9PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdkYXRhJywge1xuICAgICAgLy8gICdnZXQnOiAoZnVuY3Rpb24oKSB7XG4gICAgICAvLyAgICBjb25zb2xlLndhcm4oJ1Byb3BlcnR5IGRhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIERhdGFTZXQuZ2V0KGlkcykgdG8gcmV0cmlldmUgdGhlIG5ldyBkYXRhLCB1c2UgdGhlIG9sZERhdGEgcHJvcGVydHkgb24gdGhpcyBvYmplY3QgdG8gZ2V0IHRoZSBvbGQgZGF0YScpO1xuICAgICAgLy8gICAgcmV0dXJuIHVwZGF0ZWREYXRhO1xuICAgICAgLy8gIH0pLmJpbmQodGhpcylcbiAgICAgIC8vfSk7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwidXBkYXRlXCIsIHByb3BzLCBzZW5kZXJJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkSWRzLmNvbmNhdCh1cGRhdGVkSWRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3RpbmcgaXRlbXMuIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBwcm92aWRlZCBwcm9wZXJ0aWVzIHdpbGwgYmUgZGVlcGx5IG1lcmdlZCBpbnRvIHRoZSBleGlzdGluZyBpdGVtLlxuICAgKiBXaGVuIGFuIGl0ZW0gZG9lcyBub3QgZXhpc3QgKGlkIG5vdCBwcmVzZW50IGluIHRoZSBkYXRhIHNldCBvciBhYnNlbnQpLCBhbiBlcnJvciB3aWxsIGJlIHRocm93biBhbmQgbm90aGluZyB3aWxsIGJlIGNoYW5nZWQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgdXBkYXRlZCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGB1cGRhdGVgLlxuICAgKiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyBpZDogMywgdGV4dDogJ2l0ZW0gMycgfSxcbiAgICogXSlcbiAgICpcbiAgICogLy8gdXBkYXRlIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEudXBkYXRlKFtcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyICh1cGRhdGVkKScgfSwgLy8gd29ya3NcbiAgICogICAvLyB7IGlkOiA0LCB0ZXh0OiAnaXRlbSA0IChuZXcpJyB9LCAvLyB3b3VsZCB0aHJvd1xuICAgKiAgIC8vIHsgdGV4dDogJ2l0ZW0gNCAobmV3KScgfSwgLy8gd291bGQgYWxzbyB0aHJvd1xuICAgKiBdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsyXVxuICAgKiBgYGBcbiAgICogQHBhcmFtIGRhdGEgLSBVcGRhdGVzICh0aGUgaWQgYW5kIG9wdGlvbmFsbHkgb3RoZXIgcHJvcHMpIHRvIHRoZSBpdGVtcyBpbiB0aGlzIGRhdGEgc2V0LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIHVwZGF0ZWRJZHMgLSBUaGUgaWRzIG9mIHRoZSB1cGRhdGVkIGl0ZW1zLlxuICAgKiBAdGhyb3dzIFdoZW4gdGhlIHN1cHBsaWVkIGRhdGEgaXMgbmVpdGhlciBhbiBpdGVtIG5vciBhbiBhcnJheSBvZiBpdGVtcywgd2hlbiB0aGUgaWRzIGFyZSBtaXNzaW5nLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZU9ubHkoXG4gICAgZGF0YTogVXBkYXRlSXRlbTxJdGVtLCBJZFByb3A+IHwgVXBkYXRlSXRlbTxJdGVtLCBJZFByb3A+W10sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogSWRbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBkYXRhID0gW2RhdGFdO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZUV2ZW50RGF0YSA9IGRhdGFcbiAgICAgIC5tYXAoXG4gICAgICAgIChcbiAgICAgICAgICB1cGRhdGVcbiAgICAgICAgKToge1xuICAgICAgICAgIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgICAgdXBkYXRlOiBVcGRhdGVJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgIH0gPT4ge1xuICAgICAgICAgIGNvbnN0IG9sZERhdGEgPSB0aGlzLl9kYXRhLmdldCh1cGRhdGVbdGhpcy5faWRQcm9wXSk7XG4gICAgICAgICAgaWYgKG9sZERhdGEgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVXBkYXRpbmcgbm9uLWV4aXN0ZW50IGl0ZW1zIGlzIG5vdCBhbGxvd2VkLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgb2xkRGF0YSwgdXBkYXRlIH07XG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5tYXAoXG4gICAgICAgICh7XG4gICAgICAgICAgb2xkRGF0YSxcbiAgICAgICAgICB1cGRhdGUsXG4gICAgICAgIH0pOiB7XG4gICAgICAgICAgaWQ6IElkO1xuICAgICAgICAgIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgICAgdXBkYXRlZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgIH0gPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gb2xkRGF0YVt0aGlzLl9pZFByb3BdO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gcHVyZURlZXBPYmplY3RBc3NpZ24ob2xkRGF0YSwgdXBkYXRlKTtcblxuICAgICAgICAgIHRoaXMuX2RhdGEuc2V0KGlkLCB1cGRhdGVkRGF0YSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBvbGREYXRhOiBvbGREYXRhLFxuICAgICAgICAgICAgdXBkYXRlZERhdGEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgIGlmICh1cGRhdGVFdmVudERhdGEubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcm9wczogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdID0ge1xuICAgICAgICBpdGVtczogdXBkYXRlRXZlbnREYXRhLm1hcCgodmFsdWUpOiBJZCA9PiB2YWx1ZS5pZCksXG4gICAgICAgIG9sZERhdGE6IHVwZGF0ZUV2ZW50RGF0YS5tYXAoXG4gICAgICAgICAgKHZhbHVlKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiA9PiB2YWx1ZS5vbGREYXRhXG4gICAgICAgICksXG4gICAgICAgIGRhdGE6IHVwZGF0ZUV2ZW50RGF0YS5tYXAoXG4gICAgICAgICAgKHZhbHVlKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiA9PiB2YWx1ZS51cGRhdGVkRGF0YVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGVkIHByb3BlcnR5ICdkYXRhJyBzb21lIGRheVxuICAgICAgLy9PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdkYXRhJywge1xuICAgICAgLy8gICdnZXQnOiAoZnVuY3Rpb24oKSB7XG4gICAgICAvLyAgICBjb25zb2xlLndhcm4oJ1Byb3BlcnR5IGRhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIERhdGFTZXQuZ2V0KGlkcykgdG8gcmV0cmlldmUgdGhlIG5ldyBkYXRhLCB1c2UgdGhlIG9sZERhdGEgcHJvcGVydHkgb24gdGhpcyBvYmplY3QgdG8gZ2V0IHRoZSBvbGQgZGF0YScpO1xuICAgICAgLy8gICAgcmV0dXJuIHVwZGF0ZWREYXRhO1xuICAgICAgLy8gIH0pLmJpbmQodGhpcylcbiAgICAgIC8vfSk7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwidXBkYXRlXCIsIHByb3BzLCBzZW5kZXJJZCk7XG5cbiAgICAgIHJldHVybiBwcm9wcy5pdGVtcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkOiBJZCk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkczogSWRbXSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGZpcnN0PzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gfCBJZCB8IElkW10sXG4gICAgc2Vjb25kPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PiB7XG4gICAgLy8gQFRPRE86IFdvdWRuJ3QgaXQgYmUgYmV0dGVyIHRvIHNwbGl0IHRoaXMgaW50byBtdWx0aXBsZSBtZXRob2RzP1xuXG4gICAgLy8gcGFyc2UgdGhlIGFyZ3VtZW50c1xuICAgIGxldCBpZDogSWQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGlkczogSWRbXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzSWQoZmlyc3QpKSB7XG4gICAgICAvLyBnZXQoaWQgWywgb3B0aW9uc10pXG4gICAgICBpZCA9IGZpcnN0O1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlyc3QpKSB7XG4gICAgICAvLyBnZXQoaWRzIFssIG9wdGlvbnNdKVxuICAgICAgaWRzID0gZmlyc3Q7XG4gICAgICBvcHRpb25zID0gc2Vjb25kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBnZXQoWywgb3B0aW9uc10pXG4gICAgICBvcHRpb25zID0gZmlyc3Q7XG4gICAgfVxuXG4gICAgLy8gZGV0ZXJtaW5lIHRoZSByZXR1cm4gdHlwZVxuICAgIGNvbnN0IHJldHVyblR5cGUgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnJldHVyblR5cGUgPT09IFwiT2JqZWN0XCIgPyBcIk9iamVjdFwiIDogXCJBcnJheVwiO1xuICAgIC8vIEBUT0RPOiBXVEYgaXMgdGhpcz8gT3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz9cbiAgICAvLyB2YXIgcmV0dXJuVHlwZVxuICAgIC8vIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmV0dXJuVHlwZSkge1xuICAgIC8vICAgdmFyIGFsbG93ZWRWYWx1ZXMgPSBbJ0FycmF5JywgJ09iamVjdCddXG4gICAgLy8gICByZXR1cm5UeXBlID1cbiAgICAvLyAgICAgYWxsb3dlZFZhbHVlcy5pbmRleE9mKG9wdGlvbnMucmV0dXJuVHlwZSkgPT0gLTFcbiAgICAvLyAgICAgICA/ICdBcnJheSdcbiAgICAvLyAgICAgICA6IG9wdGlvbnMucmV0dXJuVHlwZVxuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICByZXR1cm5UeXBlID0gJ0FycmF5J1xuICAgIC8vIH1cblxuICAgIC8vIGJ1aWxkIG9wdGlvbnNcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IGl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBsZXQgaXRlbTogdW5kZWZpbmVkIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaXRlbUlkczogdW5kZWZpbmVkIHwgSWRbXSA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaXRlbUlkOiB1bmRlZmluZWQgfCBJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIGNvbnZlcnQgaXRlbXNcbiAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgLy8gcmV0dXJuIGEgc2luZ2xlIGl0ZW1cbiAgICAgIGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICBpZiAoaXRlbSAmJiBmaWx0ZXIgJiYgIWZpbHRlcihpdGVtKSkge1xuICAgICAgICBpdGVtID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaWRzICE9IG51bGwpIHtcbiAgICAgIC8vIHJldHVybiBhIHN1YnNldCBvZiBpdGVtc1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWRzW2ldKTtcbiAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoaXRlbSkpKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gYWxsIGl0ZW1zXG4gICAgICBpdGVtSWRzID0gWy4uLnRoaXMuX2RhdGEua2V5cygpXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGl0ZW1JZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgIGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpdGVtSWQpO1xuICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgdGhlIHJlc3VsdHNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyICYmIGlkID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fc29ydChpdGVtcywgb3B0aW9ucy5vcmRlcik7XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIGZpZWxkcyBvZiB0aGUgaXRlbXNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmZpZWxkcykge1xuICAgICAgY29uc3QgZmllbGRzID0gb3B0aW9ucy5maWVsZHM7XG4gICAgICBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGl0ZW0gIT0gbnVsbCkge1xuICAgICAgICBpdGVtID0gdGhpcy5fZmlsdGVyRmllbGRzKGl0ZW0sIGZpZWxkcykgYXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGl0ZW1zW2ldID0gdGhpcy5fZmlsdGVyRmllbGRzKGl0ZW1zW2ldLCBmaWVsZHMpIGFzIEZ1bGxJdGVtPFxuICAgICAgICAgICAgSXRlbSxcbiAgICAgICAgICAgIElkUHJvcFxuICAgICAgICAgID47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZXR1cm4gdGhlIHJlc3VsdHNcbiAgICBpZiAocmV0dXJuVHlwZSA9PSBcIk9iamVjdFwiKSB7XG4gICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+ID0ge307XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVzdWx0YW50ID0gaXRlbXNbaV07XG4gICAgICAgIC8vIEBUT0RPOiBTaG91ZG4ndCB0aGlzIGJlIHRoaXMuX2ZpZWxkSWQ/XG4gICAgICAgIC8vIHJlc3VsdFtyZXN1bHRhbnQuaWRdID0gcmVzdWx0YW50XG4gICAgICAgIGNvbnN0IGlkOiBJZCA9IHJlc3VsdGFudFt0aGlzLl9pZFByb3BdO1xuICAgICAgICByZXN1bHRbaWRdID0gcmVzdWx0YW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgLy8gYSBzaW5nbGUgaXRlbVxuICAgICAgICByZXR1cm4gaXRlbSA/PyBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8ganVzdCByZXR1cm4gb3VyIGFycmF5XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IG9yZGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuICAgIGNvbnN0IGlkczogSWRbXSA9IFtdO1xuXG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgLy8gZ2V0IGZpbHRlcmVkIGl0ZW1zXG4gICAgICBpZiAob3JkZXIpIHtcbiAgICAgICAgLy8gY3JlYXRlIG9yZGVyZWQgbGlzdFxuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgZmlsdGVyKGl0ZW0pKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NvcnQoaXRlbXMsIG9yZGVyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZHMucHVzaChpdGVtc1tpXVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIHVub3JkZXJlZCBsaXN0XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiBmaWx0ZXIoaXRlbSkpIHtcbiAgICAgICAgICAgIGlkcy5wdXNoKGl0ZW1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldCBhbGwgaXRlbXNcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICAvLyBjcmVhdGUgYW4gb3JkZXJlZCBsaXN0XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGl0ZW1zLnB1c2goZGF0YS5nZXQoaWQpISk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zb3J0KGl0ZW1zLCBvcmRlcik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaWRzLnB1c2goaXRlbXNbaV1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNyZWF0ZSB1bm9yZGVyZWQgbGlzdFxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YS5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlkcy5wdXNoKGl0ZW1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0RGF0YVNldCgpOiBEYXRhU2V0PEl0ZW0sIElkUHJvcD4ge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBmb3JFYWNoKFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiB2b2lkLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnM8SXRlbT5cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICBjb25zdCBpdGVtSWRzID0gWy4uLmRhdGEua2V5cygpXTtcblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMub3JkZXIpIHtcbiAgICAgIC8vIGV4ZWN1dGUgZm9yRWFjaCBvbiBvcmRlcmVkIGxpc3RcbiAgICAgIGNvbnN0IGl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSB0aGlzLmdldChvcHRpb25zKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtW3RoaXMuX2lkUHJvcF07XG4gICAgICAgIGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5vcmRlcmVkXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICAgIGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbWFwPFQ+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBULFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxJdGVtLCBUPlxuICApOiBUW10ge1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3QgbWFwcGVkSXRlbXM6IFRbXSA9IFtdO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuXG4gICAgLy8gY29udmVydCBhbmQgZmlsdGVyIGl0ZW1zXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgbWFwcGVkSXRlbXMucHVzaChjYWxsYmFjayhpdGVtLCBpZCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyIGl0ZW1zXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcikge1xuICAgICAgdGhpcy5fc29ydChtYXBwZWRJdGVtcywgb3B0aW9ucy5vcmRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBlZEl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KGl0ZW06IG51bGwsIGZpZWxkczogS1tdKTogbnVsbDtcbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGl0ZW06IFJlY29yZDxLLCB1bmtub3duPixcbiAgICBmaWVsZHM6IEtbXVxuICApOiBSZWNvcmQ8SywgdW5rbm93bj47XG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkczxLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpdGVtOiBSZWNvcmQ8SywgdW5rbm93bj4sXG4gICAgZmllbGRzOiBLW10gfCBSZWNvcmQ8Sywgc3RyaW5nPlxuICApOiBhbnk7XG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIGZpZWxkcyBvZiBhbiBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSAtIFRoZSBpdGVtIHdob3NlIGZpZWxkcyBzaG91bGQgYmUgZmlsdGVyZWQuXG4gICAqIEBwYXJhbSBmaWVsZHMgLSBUaGUgbmFtZXMgb2YgdGhlIGZpZWxkcyB0aGF0IHdpbGwgYmUga2VwdC5cbiAgICogQHR5cGVQYXJhbSBLIC0gRmllbGQgbmFtZSB0eXBlLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGZpZWxkcy5cbiAgICovXG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkczxLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpdGVtOiBSZWNvcmQ8SywgdW5rbm93bj4gfCBudWxsLFxuICAgIGZpZWxkczogS1tdIHwgUmVjb3JkPEssIHVua25vd24+XG4gICk6IFJlY29yZDxLLCB1bmtub3duPiB8IG51bGwge1xuICAgIGlmICghaXRlbSkge1xuICAgICAgLy8gaXRlbSBpcyBudWxsXG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgQXJyYXkuaXNBcnJheShmaWVsZHMpXG4gICAgICAgID8gLy8gVXNlIHRoZSBzdXBwbGllZCBhcnJheVxuICAgICAgICAgIGZpZWxkc1xuICAgICAgICA6IC8vIFVzZSB0aGUga2V5cyBvZiB0aGUgc3VwcGxpZWQgb2JqZWN0XG4gICAgICAgICAgKE9iamVjdC5rZXlzKGZpZWxkcykgYXMgS1tdKVxuICAgICkucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgIChmaWx0ZXJlZEl0ZW0sIGZpZWxkKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICAgICAgICBmaWx0ZXJlZEl0ZW1bZmllbGRdID0gaXRlbVtmaWVsZF07XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZEl0ZW07XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgdGhlIHByb3ZpZGVkIGFycmF5IHdpdGggaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIEl0ZW1zIHRvIGJlIHNvcnRlZCBpbiBwbGFjZS5cbiAgICogQHBhcmFtIG9yZGVyIC0gQSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbXMgaW4gdGhlIGl0ZW1zIGFycmF5LlxuICAgKi9cbiAgcHJpdmF0ZSBfc29ydDxUPihpdGVtczogVFtdLCBvcmRlcjogRGF0YUludGVyZmFjZU9yZGVyPFQ+KTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBvcmRlciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gb3JkZXIgYnkgcHJvdmlkZWQgZmllbGQgbmFtZVxuICAgICAgY29uc3QgbmFtZSA9IG9yZGVyOyAvLyBmaWVsZCBuYW1lXG4gICAgICBpdGVtcy5zb3J0KChhLCBiKTogLTEgfCAwIHwgMSA9PiB7XG4gICAgICAgIC8vIEBUT0RPOiBIb3cgdG8gdHJlYXQgbWlzc2luZyBwcm9wZXJ0aWVzP1xuICAgICAgICBjb25zdCBhdiA9IChhIGFzIGFueSlbbmFtZV07XG4gICAgICAgIGNvbnN0IGJ2ID0gKGIgYXMgYW55KVtuYW1lXTtcbiAgICAgICAgcmV0dXJuIGF2ID4gYnYgPyAxIDogYXYgPCBidiA/IC0xIDogMDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9yZGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIG9yZGVyIGJ5IHNvcnQgZnVuY3Rpb25cbiAgICAgIGl0ZW1zLnNvcnQob3JkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBleHRlbmQgb3JkZXIgYnkgYW4gT2JqZWN0IHtmaWVsZDpzdHJpbmcsIGRpcmVjdGlvbjpzdHJpbmd9XG4gICAgICAvLyAgICAgICB3aGVyZSBkaXJlY3Rpb24gY2FuIGJlICdhc2MnIG9yICdkZXNjJ1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9yZGVyIG11c3QgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGl0ZW0gb3IgbXVsdGlwbGUgaXRlbXMgYnkg4oCccmVmZXJlbmNl4oCdIChvbmx5IHRoZSBpZCBpcyB1c2VkKSBvciBieSBpZC5cbiAgICpcbiAgICogVGhlIG1ldGhvZCBpZ25vcmVzIHJlbW92YWwgb2Ygbm9uLWV4aXN0aW5nIGl0ZW1zLCBhbmQgcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgdGhlIGl0ZW1zIHdoaWNoIGFyZSBhY3R1YWxseSByZW1vdmVkIGZyb20gdGhlIERhdGFTZXQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgcmVtb3ZlZCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGByZW1vdmVgIGZvciB0aGUgcmVtb3ZlZCBpdGVtcy4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgaWQ6IDMsIHRleHQ6ICdpdGVtIDMnIH1cbiAgICogXSlcbiAgICpcbiAgICogLy8gcmVtb3ZlIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEucmVtb3ZlKFsyLCB7IGlkOiAzIH0sIDRdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsyLCAzXVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGlkIC0gT25lIG9yIG1vcmUgaXRlbXMgb3IgaWRzIG9mIGl0ZW1zIHRvIGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgVGhlIGlkcyBvZiB0aGUgcmVtb3ZlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyByZW1vdmUoaWQ6IElkIHwgSXRlbSB8IChJZCB8IEl0ZW0pW10sIHNlbmRlcklkPzogSWQgfCBudWxsKTogSWRbXSB7XG4gICAgY29uc3QgcmVtb3ZlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICAvLyBmb3JjZSBldmVyeXRoaW5nIHRvIGJlIGFuIGFycmF5IGZvciBzaW1wbGljaXR5XG4gICAgY29uc3QgaWRzID0gQXJyYXkuaXNBcnJheShpZCkgPyBpZCA6IFtpZF07XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fcmVtb3ZlKGlkc1tpXSk7XG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICBjb25zdCBpdGVtSWQ6IE9wdElkID0gaXRlbVt0aGlzLl9pZFByb3BdO1xuICAgICAgICBpZiAoaXRlbUlkICE9IG51bGwpIHtcbiAgICAgICAgICByZW1vdmVkSWRzLnB1c2goaXRlbUlkKTtcbiAgICAgICAgICByZW1vdmVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZW1vdmVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgXCJyZW1vdmVcIixcbiAgICAgICAgeyBpdGVtczogcmVtb3ZlZElkcywgb2xkRGF0YTogcmVtb3ZlZEl0ZW1zIH0sXG4gICAgICAgIHNlbmRlcklkXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZW1vdmVkSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpdGVtIGJ5IGl0cyBpZCBvciByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIElkIG9mIGFuIGl0ZW0gb3IgdGhlIGl0ZW0gaXRzZWxmLlxuICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBpdGVtIGlmIHJlbW92ZWQsIG51bGwgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlKGlkOiBJZCB8IEl0ZW0pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgbnVsbCB7XG4gICAgLy8gQFRPRE86IEl0IG9yaWdpYW5sbHkgcmV0dXJuZWQgdGhlIGl0ZW0gYWx0aG91Z2ggdGhlIGRvY3Mgc2F5IGlkLlxuICAgIC8vIFRoZSBjb2RlIGV4cGVjdHMgdGhlIGl0ZW0sIHNvIHByb2JhYmx5IGFuIGVycm9yIGluIHRoZSBkb2NzLlxuICAgIGxldCBpZGVudDogT3B0SWQ7XG5cbiAgICAvLyBjb25maXJtIHRoZSBpZCB0byB1c2UgYmFzZWQgb24gdGhlIGFyZ3MgdHlwZVxuICAgIGlmIChpc0lkKGlkKSkge1xuICAgICAgaWRlbnQgPSBpZDtcbiAgICB9IGVsc2UgaWYgKGlkICYmIHR5cGVvZiBpZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgaWRlbnQgPSBpZFt0aGlzLl9pZFByb3BdOyAvLyBsb29rIGZvciB0aGUgaWRlbnRpZmllciBmaWVsZCB1c2luZyAuX2lkUHJvcFxuICAgIH1cblxuICAgIC8vIGRvIHRoZSByZW1vdmluZyBpZiB0aGUgaXRlbSBpcyBmb3VuZFxuICAgIGlmIChpZGVudCAhPSBudWxsICYmIHRoaXMuX2RhdGEuaGFzKGlkZW50KSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkZW50KSB8fCBudWxsO1xuICAgICAgdGhpcy5fZGF0YS5kZWxldGUoaWRlbnQpO1xuICAgICAgLS10aGlzLmxlbmd0aDtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBlbnRpcmUgZGF0YSBzZXQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgcmVtb3ZlZCwgdGhlIHtAbGluayBEYXRhU2V0fSB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYHJlbW92ZWAgZm9yIGFsbCByZW1vdmVkIGl0ZW1zLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIHJlbW92ZWRJZHMgLSBUaGUgaWRzIG9mIGFsbCByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGNsZWFyKHNlbmRlcklkPzogSWQgfCBudWxsKTogSWRbXSB7XG4gICAgY29uc3QgaWRzID0gWy4uLnRoaXMuX2RhdGEua2V5cygpXTtcbiAgICBjb25zdCBpdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpdGVtcy5wdXNoKHRoaXMuX2RhdGEuZ2V0KGlkc1tpXSkhKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhLmNsZWFyKCk7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fdHJpZ2dlcihcInJlbW92ZVwiLCB7IGl0ZW1zOiBpZHMsIG9sZERhdGE6IGl0ZW1zIH0sIHNlbmRlcklkKTtcblxuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaXRlbSB3aXRoIG1heGltdW0gdmFsdWUgb2YgYSBzcGVjaWZpZWQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIGZvciBtYXggdmFsdWUuXG4gICAqIEByZXR1cm5zIEl0ZW0gY29udGFpbmluZyBtYXggdmFsdWUsIG9yIG51bGwgaWYgbm8gaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgbWF4KGZpZWxkOiBrZXlvZiBJdGVtKTogSXRlbSB8IG51bGwge1xuICAgIGxldCBtYXggPSBudWxsO1xuICAgIGxldCBtYXhGaWVsZCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fZGF0YS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgaXRlbUZpZWxkID0gaXRlbVtmaWVsZF07XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBpdGVtRmllbGQgPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgKG1heEZpZWxkID09IG51bGwgfHwgaXRlbUZpZWxkID4gbWF4RmllbGQpXG4gICAgICApIHtcbiAgICAgICAgbWF4ID0gaXRlbTtcbiAgICAgICAgbWF4RmllbGQgPSBpdGVtRmllbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heCB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGl0ZW0gd2l0aCBtaW5pbXVtIHZhbHVlIG9mIGEgc3BlY2lmaWVkIGZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZmllbGQgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHNob3VsZCBiZSBzZWFyY2hlZCBmb3IgbWluIHZhbHVlLlxuICAgKiBAcmV0dXJucyBJdGVtIGNvbnRhaW5pbmcgbWluIHZhbHVlLCBvciBudWxsIGlmIG5vIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIG1pbihmaWVsZDoga2V5b2YgSXRlbSk6IEl0ZW0gfCBudWxsIHtcbiAgICBsZXQgbWluID0gbnVsbDtcbiAgICBsZXQgbWluRmllbGQgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuX2RhdGEudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGl0ZW1GaWVsZCA9IGl0ZW1bZmllbGRdO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgaXRlbUZpZWxkID09PSBcIm51bWJlclwiICYmXG4gICAgICAgIChtaW5GaWVsZCA9PSBudWxsIHx8IGl0ZW1GaWVsZCA8IG1pbkZpZWxkKVxuICAgICAgKSB7XG4gICAgICAgIG1pbiA9IGl0ZW07XG4gICAgICAgIG1pbkZpZWxkID0gaXRlbUZpZWxkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtaW4gfHwgbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBkaXN0aW5jdDxUIGV4dGVuZHMga2V5b2YgSXRlbT4ocHJvcDogVCk6IEl0ZW1bVF1bXTtcbiAgcHVibGljIGRpc3RpbmN0KHByb3A6IHN0cmluZyk6IHVua25vd25bXTtcbiAgLyoqXG4gICAqIEZpbmQgYWxsIGRpc3RpbmN0IHZhbHVlcyBvZiBhIHNwZWNpZmllZCBmaWVsZFxuICAgKlxuICAgKiBAcGFyYW0gcHJvcCAtIFRoZSBwcm9wZXJ0eSBuYW1lIHdob3NlIGRpc3RpbmN0IHZhbHVlcyBzaG91bGQgYmUgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIFVub3JkZXJlZCBhcnJheSBjb250YWluaW5nIGFsbCBkaXN0aW5jdCB2YWx1ZXMuIEl0ZW1zIHdpdGhvdXQgc3BlY2lmaWVkIHByb3BlcnR5IGFyZSBpZ25vcmVkLlxuICAgKi9cbiAgcHVibGljIGRpc3RpbmN0PFQgZXh0ZW5kcyBzdHJpbmc+KHByb3A6IFQpOiB1bmtub3duW10ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuICAgIGNvbnN0IHZhbHVlczogdW5rbm93bltdID0gW107XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICBjb25zdCBpdGVtID0gZGF0YS5nZXQoaWQpO1xuICAgICAgY29uc3QgdmFsdWUgPSAoaXRlbSBhcyBhbnkpW3Byb3BdO1xuICAgICAgbGV0IGV4aXN0cyA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbal0gPT0gdmFsdWUpIHtcbiAgICAgICAgICBleGlzdHMgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWV4aXN0cyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlc1tjb3VudF0gPSB2YWx1ZTtcbiAgICAgICAgY291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpbmdsZSBpdGVtLiBXaWxsIGZhaWwgd2hlbiBhbiBpdGVtIHdpdGggdGhlIHNhbWUgaWQgYWxyZWFkeSBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtIC0gQSBuZXcgaXRlbSB0byBiZSBhZGRlZC5cbiAgICogQHJldHVybnMgQWRkZWQgaXRlbSdzIGlkLiBBbiBpZCBpcyBnZW5lcmF0ZWQgd2hlbiBpdCBpcyBub3QgcHJlc2VudCBpbiB0aGUgaXRlbS5cbiAgICovXG4gIHByaXZhdGUgX2FkZEl0ZW0oaXRlbTogSXRlbSk6IElkIHtcbiAgICBjb25zdCBmdWxsSXRlbSA9IGVuc3VyZUZ1bGxJdGVtKGl0ZW0sIHRoaXMuX2lkUHJvcCk7XG4gICAgY29uc3QgaWQgPSBmdWxsSXRlbVt0aGlzLl9pZFByb3BdO1xuXG4gICAgLy8gY2hlY2sgd2hldGhlciB0aGlzIGlkIGlzIGFscmVhZHkgdGFrZW5cbiAgICBpZiAodGhpcy5fZGF0YS5oYXMoaWQpKSB7XG4gICAgICAvLyBpdGVtIGFscmVhZHkgZXhpc3RzXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IGFkZCBpdGVtOiBpdGVtIHdpdGggaWQgXCIgKyBpZCArIFwiIGFscmVhZHkgZXhpc3RzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YS5zZXQoaWQsIGZ1bGxJdGVtKTtcbiAgICArK3RoaXMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIHNpbmdsZSBpdGVtOiBtZXJnZSB3aXRoIGV4aXN0aW5nIGl0ZW0uXG4gICAqIFdpbGwgZmFpbCB3aGVuIHRoZSBpdGVtIGhhcyBubyBpZCwgb3Igd2hlbiB0aGVyZSBkb2VzIG5vdCBleGlzdCBhbiBpdGVtIHdpdGggdGhlIHNhbWUgaWQuXG4gICAqXG4gICAqIEBwYXJhbSB1cGRhdGUgLSBUaGUgbmV3IGl0ZW1cbiAgICogQHJldHVybnMgVGhlIGlkIG9mIHRoZSB1cGRhdGVkIGl0ZW0uXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVJdGVtKHVwZGF0ZTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPik6IElkIHtcbiAgICBjb25zdCBpZDogT3B0SWQgPSB1cGRhdGVbdGhpcy5faWRQcm9wXTtcbiAgICBpZiAoaWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCB1cGRhdGUgaXRlbTogaXRlbSBoYXMgbm8gaWQgKGl0ZW06IFwiICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh1cGRhdGUpICtcbiAgICAgICAgICBcIilcIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIC8vIGl0ZW0gZG9lc24ndCBleGlzdFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHVwZGF0ZSBpdGVtOiBubyBpdGVtIHdpdGggaWQgXCIgKyBpZCArIFwiIGZvdW5kXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGEuc2V0KGlkLCB7IC4uLml0ZW0sIC4uLnVwZGF0ZSB9KTtcblxuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RyZWFtKGlkcz86IEl0ZXJhYmxlPElkPik6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIGlmIChpZHMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICByZXR1cm4gbmV3IERhdGFTdHJlYW08SXRlbT4oe1xuICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmdldChpZCk7XG4gICAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHlpZWxkIFtpZCwgaXRlbV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbSh7XG4gICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiB0aGlzLl9kYXRhLmVudHJpZXMuYmluZCh0aGlzLl9kYXRhKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qIGRldmVsYmxvY2s6c3RhcnQgKi9cbiAgcHVibGljIGdldCB0ZXN0TGVha0RhdGEoKTogTWFwPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cbiAgcHVibGljIGdldCB0ZXN0TGVha0lkUHJvcCgpOiBJZFByb3Age1xuICAgIHJldHVybiB0aGlzLl9pZFByb3A7XG4gIH1cbiAgcHVibGljIGdldCB0ZXN0TGVha09wdGlvbnMoKTogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD4ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG4gIHB1YmxpYyBnZXQgdGVzdExlYWtRdWV1ZSgpOiBRdWV1ZTx0aGlzPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHRlc3RMZWFrUXVldWUodjogUXVldWU8dGhpcz4gfCBudWxsKSB7XG4gICAgdGhpcy5fcXVldWUgPSB2O1xuICB9XG4gIC8qIGRldmVsYmxvY2s6ZW5kICovXG59XG4iLCAiaW1wb3J0IHtcbiAgRGF0YUludGVyZmFjZSxcbiAgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXksXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0LFxuICBEYXRhSW50ZXJmYWNlTWFwT3B0aW9ucyxcbiAgRXZlbnRDYWxsYmFja3NXaXRoQW55LFxuICBFdmVudE5hbWUsXG4gIEV2ZW50UGF5bG9hZHMsXG4gIEZ1bGxJdGVtLFxuICBJZCxcbiAgUGFydEl0ZW0sXG4gIFJlbW92ZUV2ZW50UGF5bG9hZCxcbiAgVXBkYXRlRXZlbnRQYXlsb2FkLFxuICBpc0lkLFxufSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcbmltcG9ydCB7IERhdGFTZXRQYXJ0IH0gZnJvbSBcIi4vZGF0YS1zZXQtcGFydFwiO1xuaW1wb3J0IHsgRGF0YVN0cmVhbSB9IGZyb20gXCIuL2RhdGEtc3RyZWFtXCI7XG5cbi8qKlxuICogRGF0YSB2aWV3IG9wdGlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVZpZXdPcHRpb25zPEl0ZW0sIElkUHJvcCBleHRlbmRzIHN0cmluZz4ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpZWxkIGNvbnRhaW5pbmcgdGhlIGlkIG9mIHRoZSBpdGVtcy4gV2hlbiBkYXRhIGlzIGZldGNoZWQgZnJvbSBhIHNlcnZlciB3aGljaCB1c2VzIHNvbWUgc3BlY2lmaWMgZmllbGQgdG8gaWRlbnRpZnkgaXRlbXMsIHRoaXMgZmllbGQgbmFtZSBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBEYXRhU2V0IHVzaW5nIHRoZSBvcHRpb24gYGZpZWxkSWRgLiBGb3IgZXhhbXBsZSBbQ291Y2hEQl0oaHR0cDovL2NvdWNoZGIuYXBhY2hlLm9yZy8pIHVzZXMgdGhlIGZpZWxkIGAnX2lkJ2AgdG8gaWRlbnRpZnkgZG9jdW1lbnRzLlxuICAgKi9cbiAgZmllbGRJZD86IElkUHJvcDtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGF0YVZpZXdcbiAqXG4gKiBBIERhdGFWaWV3IG9mZmVycyBhIGZpbHRlcmVkIGFuZC9vciBmb3JtYXR0ZWQgdmlldyBvbiBhIERhdGFTZXQuIE9uZSBjYW4gc3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gYSBEYXRhVmlldywgYW5kIGVhc2lseSBnZXQgZmlsdGVyZWQgb3IgZm9ybWF0dGVkIGRhdGEgd2l0aG91dCBoYXZpbmcgdG8gc3BlY2lmeSBmaWx0ZXJzIGFuZCBmaWVsZCB0eXBlcyBhbGwgdGhlIHRpbWUuXG4gKlxuICogIyMgRXhhbXBsZVxuICogYGBgamF2YXNjcmlwdFxuICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICogdmFyIGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoKTtcbiAqIGRhdGEuYWRkKFtcbiAqICAge2lkOiAxLCB0ZXh0OiAnaXRlbSAxJywgZGF0ZTogbmV3IERhdGUoMjAxMywgNiwgMjApLCBncm91cDogMSwgZmlyc3Q6IHRydWV9LFxuICogICB7aWQ6IDIsIHRleHQ6ICdpdGVtIDInLCBkYXRlOiAnMjAxMy0wNi0yMycsIGdyb3VwOiAyfSxcbiAqICAge2lkOiAzLCB0ZXh0OiAnaXRlbSAzJywgZGF0ZTogJzIwMTMtMDYtMjUnLCBncm91cDogMn0sXG4gKiAgIHtpZDogNCwgdGV4dDogJ2l0ZW0gNCd9XG4gKiBdKTtcbiAqXG4gKiAvLyBjcmVhdGUgYSBEYXRhVmlld1xuICogLy8gdGhlIHZpZXcgd2lsbCBvbmx5IGNvbnRhaW4gaXRlbXMgaGF2aW5nIGEgcHJvcGVydHkgZ3JvdXAgd2l0aCB2YWx1ZSAxLFxuICogLy8gYW5kIHdpbGwgb25seSBvdXRwdXQgZmllbGRzIGlkLCB0ZXh0LCBhbmQgZGF0ZS5cbiAqIHZhciB2aWV3ID0gbmV3IHZpcy5EYXRhVmlldyhkYXRhLCB7XG4gKiAgIGZpbHRlcjogZnVuY3Rpb24gKGl0ZW0pIHtcbiAqICAgICByZXR1cm4gKGl0ZW0uZ3JvdXAgPT0gMSk7XG4gKiAgIH0sXG4gKiAgIGZpZWxkczogWydpZCcsICd0ZXh0JywgJ2RhdGUnXVxuICogfSk7XG4gKlxuICogLy8gc3Vic2NyaWJlIHRvIGFueSBjaGFuZ2UgaW4gdGhlIERhdGFWaWV3XG4gKiB2aWV3Lm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50LCBwcm9wZXJ0aWVzLCBzZW5kZXJJZCkge1xuICogICBjb25zb2xlLmxvZygnZXZlbnQnLCBldmVudCwgcHJvcGVydGllcyk7XG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGUgYW4gaXRlbSBpbiB0aGUgZGF0YSBzZXRcbiAqIGRhdGEudXBkYXRlKHtpZDogMiwgZ3JvdXA6IDF9KTtcbiAqXG4gKiAvLyBnZXQgYWxsIGlkcyBpbiB0aGUgdmlld1xuICogdmFyIGlkcyA9IHZpZXcuZ2V0SWRzKCk7XG4gKiBjb25zb2xlLmxvZygnaWRzJywgaWRzKTsgLy8gd2lsbCBvdXRwdXQgWzEsIDJdXG4gKlxuICogLy8gZ2V0IGFsbCBpdGVtcyBpbiB0aGUgdmlld1xuICogdmFyIGl0ZW1zID0gdmlldy5nZXQoKTtcbiAqIGBgYFxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVZpZXc8XG4gICAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gICAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4gID5cbiAgZXh0ZW5kcyBEYXRhU2V0UGFydDxJdGVtLCBJZFByb3A+XG4gIGltcGxlbWVudHMgRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+XG57XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbGVuZ3RoID0gMDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQgaWRQcm9wKCk6IElkUHJvcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVNldCgpLmlkUHJvcDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl07XG4gIHByaXZhdGUgX2RhdGEhOiBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD47IC8vIGNvbnN0cnVjdG9yIOKGkiBzZXREYXRhXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lkczogU2V0PElkPiA9IG5ldyBTZXQoKTsgLy8gaWRzIG9mIHRoZSBpdGVtcyBjdXJyZW50bHkgaW4gbWVtb3J5IChqdXN0IGNvbnRhaW5zIGEgYm9vbGVhbiB0cnVlKVxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBEYXRhVmlld09wdGlvbnM8SXRlbSwgSWRQcm9wPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0YVZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGluc3RhbmNlIGNvbnRhaW5pbmcgZGF0YSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgdGhpcyBkYXRhIHZpZXcuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgZGF0YTogRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+LFxuICAgIG9wdGlvbnM/OiBEYXRhVmlld09wdGlvbnM8SXRlbSwgSWRQcm9wPlxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICB0aGlzLl9saXN0ZW5lciA9IHRoaXMuX29uRXZlbnQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2V0RGF0YShkYXRhKTtcbiAgfVxuXG4gIC8vIFRPRE86IGltcGxlbWVudCBhIGZ1bmN0aW9uIC5jb25maWcoKSB0byBkeW5hbWljYWxseSB1cGRhdGUgdGhpbmdzIGxpa2UgY29uZmlndXJlZCBmaWx0ZXJcbiAgLy8gYW5kIHRyaWdnZXIgY2hhbmdlcyBhY2NvcmRpbmdseVxuXG4gIC8qKlxuICAgKiBTZXQgYSBkYXRhIHNvdXJjZSBmb3IgdGhlIHZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGluc3RhbmNlIGNvbnRhaW5pbmcgZGF0YSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkuXG4gICAqIEByZW1hcmtzXG4gICAqIE5vdGUgdGhhdCB3aGVuIHRoZSBkYXRhIHZpZXcgaXMgYm91bmQgdG8gYSBkYXRhIHNldCBpdCB3b24ndCBiZSBnYXJiYWdlXG4gICAqIGNvbGxlY3RlZCB1bmxlc3MgdGhlIGRhdGEgc2V0IGlzIHRvby4gVXNlIGBkYXRhVmlldy5zZXREYXRhKG51bGwpYCBvclxuICAgKiBgZGF0YVZpZXcuZGlzcG9zZSgpYCB0byBlbmFibGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGJlZm9yZSB5b3UgbG9zZSB0aGUgbGFzdFxuICAgKiByZWZlcmVuY2UuXG4gICAqL1xuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgLy8gdW5zdWJzY3JpYmUgZnJvbSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGlmICh0aGlzLl9kYXRhLm9mZikge1xuICAgICAgICB0aGlzLl9kYXRhLm9mZihcIipcIiwgdGhpcy5fbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICAvLyB0cmlnZ2VyIGEgcmVtb3ZlIG9mIGFsbCBpdGVtcyBpbiBtZW1vcnlcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuX2RhdGEuZ2V0SWRzKHsgZmlsdGVyOiB0aGlzLl9vcHRpb25zLmZpbHRlciB9KTtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZGF0YS5nZXQoaWRzKTtcblxuICAgICAgdGhpcy5faWRzLmNsZWFyKCk7XG4gICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsIHsgaXRlbXM6IGlkcywgb2xkRGF0YTogaXRlbXMgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG5cbiAgICAgIC8vIHRyaWdnZXIgYW4gYWRkIG9mIGFsbCBhZGRlZCBpdGVtc1xuICAgICAgY29uc3QgaWRzID0gdGhpcy5fZGF0YS5nZXRJZHMoeyBmaWx0ZXI6IHRoaXMuX29wdGlvbnMuZmlsdGVyIH0pO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgICAgdGhpcy5faWRzLmFkZChpZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmxlbmd0aCA9IGlkcy5sZW5ndGg7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGlkcyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGF0YSA9IG5ldyBEYXRhU2V0PEl0ZW0sIElkUHJvcD4oKTtcbiAgICB9XG5cbiAgICAvLyBzdWJzY3JpYmUgdG8gbmV3IGRhdGFzZXRcbiAgICBpZiAodGhpcy5fZGF0YS5vbikge1xuICAgICAgdGhpcy5fZGF0YS5vbihcIipcIiwgdGhpcy5fbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBEYXRhVmlldy5cbiAgICogVXNlZnVsIHdoZW4gdGhlIERhdGFWaWV3IGhhcyBhIGZpbHRlciBmdW5jdGlvbiBjb250YWluaW5nIGEgdmFyaWFibGUgcGFyYW1ldGVyLlxuICAgKi9cbiAgcHVibGljIHJlZnJlc2goKTogdm9pZCB7XG4gICAgY29uc3QgaWRzID0gdGhpcy5fZGF0YS5nZXRJZHMoe1xuICAgICAgZmlsdGVyOiB0aGlzLl9vcHRpb25zLmZpbHRlcixcbiAgICB9KTtcbiAgICBjb25zdCBvbGRJZHMgPSBbLi4udGhpcy5faWRzXTtcbiAgICBjb25zdCBuZXdJZHM6IFJlY29yZDxJZCwgYm9vbGVhbj4gPSB7fTtcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuXG4gICAgLy8gY2hlY2sgZm9yIGFkZGl0aW9uc1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgbmV3SWRzW2lkXSA9IHRydWU7XG4gICAgICBpZiAoIXRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgcmVtb3ZhbHNcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gb2xkSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IG9sZElkc1tpXTtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICBpZiAoaXRlbSA9PSBudWxsKSB7XG4gICAgICAgIC8vIEBUT0RPOiBJbnZlc3RpZ2F0ZS5cbiAgICAgICAgLy8gRG9lc24ndCBoYXBwZW4gZHVyaW5nIHRlc3RzIG9yIGV4YW1wbGVzLlxuICAgICAgICAvLyBJcyBpdCByZWFsbHkgaW1wb3NzaWJsZSBvciBjb3VsZCBpdCBldmVudHVhbGx5IGhhcHBlbj9cbiAgICAgICAgLy8gSG93IHRvIGhhbmRsZSBpdCBpZiBpdCBkb2VzPyBUaGUgdHlwZXMgZ3VhcmFudGVlIG5vbi1udWxsYWJsZSBpdGVtcy5cbiAgICAgICAgY29uc29sZS5lcnJvcihcIklmIHlvdSBzZWUgdGhpcywgcmVwb3J0IGl0IHBsZWFzZS5cIik7XG4gICAgICB9IGVsc2UgaWYgKCFuZXdJZHNbaWRdKSB7XG4gICAgICAgIHJlbW92ZWRJZHMucHVzaChpZCk7XG4gICAgICAgIHJlbW92ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB0aGlzLl9pZHMuZGVsZXRlKGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCArPSBhZGRlZElkcy5sZW5ndGggLSByZW1vdmVkSWRzLmxlbmd0aDtcblxuICAgIC8vIHRyaWdnZXIgZXZlbnRzXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9KTtcbiAgICB9XG4gICAgaWYgKHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsIHsgaXRlbXM6IHJlbW92ZWRJZHMsIG9sZERhdGE6IHJlbW92ZWRJdGVtcyB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCgpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChpZDogSWQpOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkIHwgSWRbXSxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBmaXJzdD86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+IHwgSWQgfCBJZFtdLFxuICAgIHNlY29uZD86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6XG4gICAgfCBudWxsXG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+XG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W11cbiAgICB8IFJlY29yZDxzdHJpbmcsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+IHtcbiAgICBpZiAodGhpcy5fZGF0YSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBwYXJzZSB0aGUgYXJndW1lbnRzXG4gICAgbGV0IGlkczogSWQgfCBJZFtdIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IG9wdGlvbnM6IGFueTtcbiAgICBpZiAoaXNJZChmaXJzdCkgfHwgQXJyYXkuaXNBcnJheShmaXJzdCkpIHtcbiAgICAgIGlkcyA9IGZpcnN0O1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IGZpcnN0O1xuICAgIH1cblxuICAgIC8vIGV4dGVuZCB0aGUgb3B0aW9ucyB3aXRoIHRoZSBkZWZhdWx0IG9wdGlvbnMgYW5kIHByb3ZpZGVkIG9wdGlvbnNcbiAgICBjb25zdCB2aWV3T3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICB0aGlzLl9vcHRpb25zLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG5cbiAgICAvLyBjcmVhdGUgYSBjb21iaW5lZCBmaWx0ZXIgbWV0aG9kIHdoZW4gbmVlZGVkXG4gICAgY29uc3QgdGhpc0ZpbHRlciA9IHRoaXMuX29wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGlmICh0aGlzRmlsdGVyICYmIG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgIHZpZXdPcHRpb25zLmZpbHRlciA9IChpdGVtKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzRmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpZHMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0KHZpZXdPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0KGlkcywgdmlld09wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0SWRzKG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPik6IElkW10ge1xuICAgIGlmICh0aGlzLl9kYXRhLmxlbmd0aCkge1xuICAgICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHRoaXMuX29wdGlvbnMuZmlsdGVyO1xuICAgICAgY29uc3Qgb3B0aW9uc0ZpbHRlciA9IG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMuZmlsdGVyIDogbnVsbDtcbiAgICAgIGxldCBmaWx0ZXI6IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+W1wiZmlsdGVyXCJdO1xuXG4gICAgICBpZiAob3B0aW9uc0ZpbHRlcikge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgIGZpbHRlciA9IChpdGVtKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZpbHRlcihpdGVtKSAmJiBvcHRpb25zRmlsdGVyKGl0ZW0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVyID0gb3B0aW9uc0ZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0SWRzKHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIG9yZGVyOiBvcHRpb25zICYmIG9wdGlvbnMub3JkZXIsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZm9yRWFjaChcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gdm9pZCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+XG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICAgIGxldCBmaWx0ZXI6IHVuZGVmaW5lZCB8ICgoaXRlbTogSXRlbSkgPT4gYm9vbGVhbik7XG5cbiAgICAgIGlmIChvcHRpb25zRmlsdGVyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgZmlsdGVyID0gZnVuY3Rpb24gKGl0ZW06IEl0ZW0pOiBib29sZWFuIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIgPSBvcHRpb25zRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kYXRhLmZvckVhY2goY2FsbGJhY2ssIHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIG9yZGVyOiBvcHRpb25zICYmIG9wdGlvbnMub3JkZXIsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdIHtcbiAgICB0eXBlIEZpbHRlciA9IE5vbk51bGxhYmxlPERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+W1wiZmlsdGVyXCJdPjtcblxuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICAgIGxldCBmaWx0ZXI6IHVuZGVmaW5lZCB8IEZpbHRlcjtcblxuICAgICAgaWYgKG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgICBmaWx0ZXIgPSAoaXRlbSk6IFJldHVyblR5cGU8RmlsdGVyPiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZpbHRlcihpdGVtKSAmJiBvcHRpb25zRmlsdGVyKGl0ZW0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVyID0gb3B0aW9uc0ZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEubWFwKGNhbGxiYWNrLCB7XG4gICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICBvcmRlcjogb3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldERhdGFTZXQoKTogRGF0YVNldDxJdGVtLCBJZFByb3A+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXREYXRhU2V0KCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5zdHJlYW0oXG4gICAgICBpZHMgfHwge1xuICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXTogdGhpcy5faWRzLmtleXMuYmluZCh0aGlzLl9pZHMpLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBpbnN0YW5jZSB1bnVzYWJsZSBwcmlvciB0byBnYXJiYWdlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBpbnRlbnRpb24gb2YgdGhpcyBtZXRob2QgaXMgdG8gaGVscCBkaXNjb3ZlciBzY2VuYXJpb3Mgd2hlcmUgdGhlIGRhdGFcbiAgICogdmlldyBpcyBiZWluZyB1c2VkIHdoZW4gdGhlIHByb2dyYW1tZXIgdGhpbmtzIGl0IGhhcyBiZWVuIGdhcmJhZ2UgY29sbGVjdGVkXG4gICAqIGFscmVhZHkuIEl0J3Mgc3RyaWN0ZXIgdmVyc2lvbiBvZiBgZGF0YVZpZXcuc2V0RGF0YShudWxsKWAuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGF0YT8ub2ZmKSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZihcIipcIiwgdGhpcy5fbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBcIlRoaXMgZGF0YSB2aWV3IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQgb2YuXCI7XG4gICAgY29uc3QgcmVwbGFjZW1lbnQgPSB7XG4gICAgICBnZXQ6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICAgIHNldDogKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9LFxuXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKERhdGFWaWV3LnByb3RvdHlwZSkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHJlcGxhY2VtZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgbGlzdGVuZXIuIFdpbGwgcHJvcGFnYXRlIGFsbCBldmVudHMgZnJvbSB0aGUgY29ubmVjdGVkIGRhdGEgc2V0IHRvIHRoZSBzdWJzY3JpYmVycyBvZiB0aGUgRGF0YVZpZXcsIGJ1dCB3aWxsIGZpbHRlciB0aGUgaXRlbXMgYW5kIG9ubHkgdHJpZ2dlciB3aGVuIHRoZXJlIGFyZSBjaGFuZ2VzIGluIHRoZSBmaWx0ZXJlZCBkYXRhIHNldC5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIElkIHN1cHBsaWVkIGJ5IHRoZSBzZW5kZXIuXG4gICAqL1xuICBwcml2YXRlIF9vbkV2ZW50PEVOIGV4dGVuZHMgRXZlbnROYW1lPihcbiAgICBldmVudDogRU4sXG4gICAgcGFyYW1zOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bRU5dLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMuaXRlbXMgfHwgIXRoaXMuX2RhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpZHMgPSBwYXJhbXMuaXRlbXM7XG4gICAgY29uc3QgYWRkZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IG9sZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgIC8vIGZpbHRlciB0aGUgaWRzIG9mIHRoZSBhZGRlZCBpdGVtc1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5faWRzLmFkZChpZCk7XG4gICAgICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICAvLyBkZXRlcm1pbmUgdGhlIGV2ZW50IGZyb20gdGhlIHZpZXdzIHZpZXdwb2ludDogYW4gdXBkYXRlZFxuICAgICAgICAvLyBpdGVtIGNhbiBiZSBhZGRlZCwgdXBkYXRlZCwgb3IgcmVtb3ZlZCBmcm9tIHRoaXMgdmlldy5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldChpZCk7XG5cbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICAgIHVwZGF0ZWRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgIChwYXJhbXMgYXMgVXBkYXRlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLmRhdGFbaV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgb2xkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAocGFyYW1zIGFzIFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+KS5vbGREYXRhW2ldXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgICAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgICB0aGlzLl9pZHMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgcmVtb3ZlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgKHBhcmFtcyBhcyBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikub2xkRGF0YVtpXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gbm90aGluZyBpbnRlcmVzdGluZyBmb3IgbWUgOi0oXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJyZW1vdmVcIjpcbiAgICAgICAgLy8gZmlsdGVyIHRoZSBpZHMgb2YgdGhlIHJlbW92ZWQgaXRlbXNcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICAgIGlmICh0aGlzLl9pZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgdGhpcy5faWRzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICByZW1vdmVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgIChwYXJhbXMgYXMgUmVtb3ZlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLm9sZERhdGFbaV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggKz0gYWRkZWRJZHMubGVuZ3RoIC0gcmVtb3ZlZElkcy5sZW5ndGg7XG5cbiAgICBpZiAoYWRkZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGFkZGVkSWRzIH0sIHNlbmRlcklkKTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICBcInVwZGF0ZVwiLFxuICAgICAgICB7IGl0ZW1zOiB1cGRhdGVkSWRzLCBvbGREYXRhOiBvbGRJdGVtcywgZGF0YTogdXBkYXRlZEl0ZW1zIH0sXG4gICAgICAgIHNlbmRlcklkXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocmVtb3ZlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgIFwicmVtb3ZlXCIsXG4gICAgICAgIHsgaXRlbXM6IHJlbW92ZWRJZHMsIG9sZERhdGE6IHJlbW92ZWRJdGVtcyB9LFxuICAgICAgICBzZW5kZXJJZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcblxuLyoqXG4gKiBDaGVjayB0aGF0IGdpdmVuIHZhbHVlIGlzIGNvbXBhdGlibGUgd2l0aCBWaXMgRGF0YSBTZXQgaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBpZFByb3AgLSBUaGUgZXhwZWN0ZWQgcHJvcGVydHkgdG8gY29udGFpbiBpdGVtIGlkLlxuICogQHBhcmFtIHYgLSBUaGUgdmFsdWUgdG8gYmUgdGVzdGVkLlxuICogQHJldHVybnMgVHJ1ZSBpZiBhbGwgZXhwZWN0ZWQgdmFsdWVzIGFuZCBtZXRob2RzIG1hdGNoLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFTZXRMaWtlPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+KGlkUHJvcDogSWRQcm9wLCB2OiBhbnkpOiB2IGlzIERhdGFTZXQ8SXRlbSwgSWRQcm9wPiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICB2ICE9PSBudWxsICYmXG4gICAgaWRQcm9wID09PSB2LmlkUHJvcCAmJlxuICAgIHR5cGVvZiB2LmFkZCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuY2xlYXIgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmRpc3RpbmN0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5mb3JFYWNoID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldERhdGFTZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldElkcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgdHlwZW9mIHYubWFwID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5tYXggPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm1pbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub2ZmID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYucmVtb3ZlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5zZXRPcHRpb25zID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5zdHJlYW0gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYudXBkYXRlT25seSA9PT0gXCJmdW5jdGlvblwiXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgRGF0YVZpZXcgfSBmcm9tIFwiLi9kYXRhLXZpZXdcIjtcbmltcG9ydCB7IFBhcnRJdGVtIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcbmltcG9ydCB7IGlzRGF0YVNldExpa2UgfSBmcm9tIFwiLi9kYXRhLXNldC1jaGVja1wiO1xuXG4vKipcbiAqIENoZWNrIHRoYXQgZ2l2ZW4gdmFsdWUgaXMgY29tcGF0aWJsZSB3aXRoIFZpcyBEYXRhIFZpZXcgaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBpZFByb3AgLSBUaGUgZXhwZWN0ZWQgcHJvcGVydHkgdG8gY29udGFpbiBpdGVtIGlkLlxuICogQHBhcmFtIHYgLSBUaGUgdmFsdWUgdG8gYmUgdGVzdGVkLlxuICogQHJldHVybnMgVHJ1ZSBpZiBhbGwgZXhwZWN0ZWQgdmFsdWVzIGFuZCBtZXRob2RzIG1hdGNoLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFWaWV3TGlrZTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihpZFByb3A6IElkUHJvcCwgdjogYW55KTogdiBpcyBEYXRhVmlldzxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHYgIT09IG51bGwgJiZcbiAgICBpZFByb3AgPT09IHYuaWRQcm9wICYmXG4gICAgdHlwZW9mIHYuZm9yRWFjaCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXREYXRhU2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXRJZHMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiB2Lm1hcCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub2ZmID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuc3RyZWFtID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICBpc0RhdGFTZXRMaWtlKGlkUHJvcCwgdi5nZXREYXRhU2V0KCkpXG4gICk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IHRoaXMgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3Rcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBJU19IVE1MRERBID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhbGw6IGRvY3VtZW50QWxsLFxuICBJU19IVE1MRERBOiBJU19IVE1MRERBXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZG9jdW1lbnRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsJyk7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxubW9kdWxlLmV4cG9ydHMgPSAkZG9jdW1lbnRBbGwuSVNfSFRNTEREQSA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciAkZG9jdW1lbnRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsJyk7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCkgfHwgaXQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh2YXJpYWJsZSkgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgbmF2aWdhdG9yICE9ICd1bmRlZmluZWQnICYmIFN0cmluZyhuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAnJztcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWwsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zMy4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjMgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zMy4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBiaW5kID0gdW5jdXJyeVRoaXModW5jdXJyeVRoaXMuYmluZCk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgcmV0dXJuIHRoYXQgPT09IHVuZGVmaW5lZCA/IGZuIDogTkFUSVZFX0JJTkQgPyBiaW5kKGZuLCB0aGF0KSA6IGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIHdyYXBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChOYXRpdmVDb25zdHJ1Y3Rvcikge1xuICB2YXIgV3JhcHBlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcmFwcGVyKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIGFwcGx5KE5hdGl2ZUNvbnN0cnVjdG9yLCB0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICBXcmFwcGVyLnByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIFdyYXBwZXI7XG59O1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBUQVJHRVQsIHt9KVtUQVJHRVRdO1xuICB2YXIgdGFyZ2V0UHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcblxuICB2YXIgRk9SQ0VELCBVU0VfTkFUSVZFLCBWSVJUVUFMX1BST1RPVFlQRTtcbiAgdmFyIGtleSwgc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5LCBuYXRpdmVQcm9wZXJ0eSwgcmVzdWx0UHJvcGVydHksIGRlc2NyaXB0b3I7XG5cbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBVU0VfTkFUSVZFID0gIUZPUkNFRCAmJiBuYXRpdmVTb3VyY2UgJiYgaGFzT3duKG5hdGl2ZVNvdXJjZSwga2V5KTtcblxuICAgIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSkgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmF0aXZlU291cmNlLCBrZXkpO1xuICAgICAgbmF0aXZlUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIG5hdGl2ZVByb3BlcnR5ID0gbmF0aXZlU291cmNlW2tleV07XG5cbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIGltcGxlbWVudGF0aW9uXG4gICAgc291cmNlUHJvcGVydHkgPSAoVVNFX05BVElWRSAmJiBuYXRpdmVQcm9wZXJ0eSkgPyBuYXRpdmVQcm9wZXJ0eSA6IHNvdXJjZVtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUgJiYgdHlwZW9mIHRhcmdldFByb3BlcnR5ID09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIG1ldGhvZHMgdG8gZ2xvYmFsIGZvciBjYWxsaW5nIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBpZiAob3B0aW9ucy5iaW5kICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gYmluZChzb3VyY2VQcm9wZXJ0eSwgZ2xvYmFsKTtcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlcyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIGlzQ2FsbGFibGUoc291cmNlUHJvcGVydHkpKSByZXN1bHRQcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCByZXN1bHRQcm9wZXJ0eSk7XG5cbiAgICBpZiAoUFJPVE8pIHtcbiAgICAgIFZJUlRVQUxfUFJPVE9UWVBFID0gVEFSR0VUICsgJ1Byb3RvdHlwZSc7XG4gICAgICBpZiAoIWhhc093bihwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFLCB7fSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgdmlydHVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAoRk9SQ0VEIHx8ICF0YXJnZXRQcm90b3R5cGVba2V5XSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldFByb3RvdHlwZSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSBzYWZlXG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmICRhc3NpZ24oeyBiOiAxIH0sICRhc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN5bWJvbCAtLSBzYWZlXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ2Fzc2lnbiBkZXRlY3Rpb24nKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPT0gNyB8fCBvYmplY3RLZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPT0gYWxwaGFiZXQ7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xuICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IEluZGV4ZWRPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChvYmplY3RLZXlzKFMpLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZSwgUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtYXNzaWduJyk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBhcml0eTogMiwgZm9yY2VkOiBPYmplY3QuYXNzaWduICE9PSBhc3NpZ24gfSwge1xuICBhc3NpZ246IGFzc2lnblxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuYXNzaWduO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEMsIGFyZ3NMZW5ndGgsIGFyZ3MpIHtcbiAgaWYgKCFoYXNPd24oZmFjdG9yaWVzLCBhcmdzTGVuZ3RoKSkge1xuICAgIHZhciBsaXN0ID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSBsaXN0W2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgZmFjdG9yaWVzW2FyZ3NMZW5ndGhdID0gJEZ1bmN0aW9uKCdDLGEnLCAncmV0dXJuIG5ldyBDKCcgKyBqb2luKGxpc3QsICcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/ICRGdW5jdGlvbi5iaW5kIDogZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgRiA9IGFDYWxsYWJsZSh0aGlzKTtcbiAgdmFyIFByb3RvdHlwZSA9IEYucHJvdG90eXBlO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gZnVuY3Rpb24gYm91bmQoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gY29uY2F0KHBhcnRBcmdzLCBhcnJheVNsaWNlKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChGLCBhcmdzLmxlbmd0aCwgYXJncykgOiBGLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoUHJvdG90eXBlKSkgYm91bmRGdW5jdGlvbi5wcm90b3R5cGUgPSBQcm90b3R5cGU7XG4gIHJldHVybiBib3VuZEZ1bmN0aW9uO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gZGV0ZWN0aW9uXG4kKHsgdGFyZ2V0OiAnRnVuY3Rpb24nLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGdW5jdGlvbi5iaW5kICE9PSBiaW5kIH0sIHtcbiAgYmluZDogYmluZFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUikge1xuICByZXR1cm4gcGF0aFtDT05TVFJVQ1RPUiArICdQcm90b3R5cGUnXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0Z1bmN0aW9uJykuYmluZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vZnVuY3Rpb24vdmlydHVhbC9iaW5kJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmJpbmQ7XG4gIHJldHVybiBpdCA9PT0gRnVuY3Rpb25Qcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoRnVuY3Rpb25Qcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmRcIik7IiwgIi8qKlxuICogRHJhdyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3Q2lyY2xlKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4LmFyYyh4LCB5LCByLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhIHNxdWFyZS5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBIYWxmIG9mIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzcXVhcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3U3F1YXJlKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4LnJlY3QoeCAtIHIsIHkgLSByLCByICogMiwgciAqIDIpO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhbiBlcXVpbGF0ZXJhbCB0cmlhbmdsZSBzdGFuZGluZyBvbiBhIHNpZGUuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBzaWRlcy5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VxdWlsYXRlcmFsX3RyaWFuZ2xlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3VHJpYW5nbGUoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY3R4LmJlZ2luUGF0aCgpO1xuXG4gIC8vIHRoZSBjaGFuZ2UgaW4gcmFkaXVzIGFuZCB0aGUgb2Zmc2V0IGlzIGhlcmUgdG8gY2VudGVyIHRoZSBzaGFwZVxuICByICo9IDEuMTU7XG4gIHkgKz0gMC4yNzUgKiByO1xuXG4gIGNvbnN0IHMgPSByICogMjtcbiAgY29uc3QgczIgPSBzIC8gMjtcbiAgY29uc3QgaXIgPSAoTWF0aC5zcXJ0KDMpIC8gNikgKiBzOyAvLyByYWRpdXMgb2YgaW5uZXIgY2lyY2xlXG4gIGNvbnN0IGggPSBNYXRoLnNxcnQocyAqIHMgLSBzMiAqIHMyKTsgLy8gaGVpZ2h0XG5cbiAgY3R4Lm1vdmVUbyh4LCB5IC0gKGggLSBpcikpO1xuICBjdHgubGluZVRvKHggKyBzMiwgeSArIGlyKTtcbiAgY3R4LmxpbmVUbyh4IC0gczIsIHkgKyBpcik7XG4gIGN0eC5saW5lVG8oeCwgeSAtIChoIC0gaXIpKTtcbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYW4gZXF1aWxhdGVyYWwgdHJpYW5nbGUgc3RhbmRpbmcgb24gYSB2ZXJ0ZXguXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBzaWRlcy5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VxdWlsYXRlcmFsX3RyaWFuZ2xlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3VHJpYW5nbGVEb3duKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcblxuICAvLyB0aGUgY2hhbmdlIGluIHJhZGl1cyBhbmQgdGhlIG9mZnNldCBpcyBoZXJlIHRvIGNlbnRlciB0aGUgc2hhcGVcbiAgciAqPSAxLjE1O1xuICB5IC09IDAuMjc1ICogcjtcblxuICBjb25zdCBzID0gciAqIDI7XG4gIGNvbnN0IHMyID0gcyAvIDI7XG4gIGNvbnN0IGlyID0gKE1hdGguc3FydCgzKSAvIDYpICogczsgLy8gcmFkaXVzIG9mIGlubmVyIGNpcmNsZVxuICBjb25zdCBoID0gTWF0aC5zcXJ0KHMgKiBzIC0gczIgKiBzMik7IC8vIGhlaWdodFxuXG4gIGN0eC5tb3ZlVG8oeCwgeSArIChoIC0gaXIpKTtcbiAgY3R4LmxpbmVUbyh4ICsgczIsIHkgLSBpcik7XG4gIGN0eC5saW5lVG8oeCAtIHMyLCB5IC0gaXIpO1xuICBjdHgubGluZVRvKHgsIHkgKyAoaCAtIGlyKSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGEgc3Rhci5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBUaGUgb3V0ZXIgcmFkaXVzIG9mIHRoZSBzdGFyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1N0YXIoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgLy8gaHR0cDovL3d3dy5odG1sNWNhbnZhc3R1dG9yaWFscy5jb20vbGFicy9odG1sNS1jYW52YXMtc3Rhci1zcGlubmVyL1xuICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgLy8gdGhlIGNoYW5nZSBpbiByYWRpdXMgYW5kIHRoZSBvZmZzZXQgaXMgaGVyZSB0byBjZW50ZXIgdGhlIHNoYXBlXG4gIHIgKj0gMC44MjtcbiAgeSArPSAwLjEgKiByO1xuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgMTA7IG4rKykge1xuICAgIGNvbnN0IHJhZGl1cyA9IG4gJSAyID09PSAwID8gciAqIDEuMyA6IHIgKiAwLjU7XG4gICAgY3R4LmxpbmVUbyhcbiAgICAgIHggKyByYWRpdXMgKiBNYXRoLnNpbigobiAqIDIgKiBNYXRoLlBJKSAvIDEwKSxcbiAgICAgIHkgLSByYWRpdXMgKiBNYXRoLmNvcygobiAqIDIgKiBNYXRoLlBJKSAvIDEwKVxuICAgICk7XG4gIH1cblxuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhIGRpYW1vbmQuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZGlhbW9uZC5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vd3d3Lmh0bWw1Y2FudmFzdHV0b3JpYWxzLmNvbS9sYWJzL2h0bWw1LWNhbnZhcy1zdGFyLXNwaW5uZXIvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RGlhbW9uZChcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICByOiBudW1iZXJcbik6IHZvaWQge1xuICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgY3R4LmxpbmVUbyh4LCB5ICsgcik7XG4gIGN0eC5saW5lVG8oeCArIHIsIHkpO1xuICBjdHgubGluZVRvKHgsIHkgLSByKTtcbiAgY3R4LmxpbmVUbyh4IC0gciwgeSk7XG5cbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYSByZWN0YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5lcnMuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSB3IC0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuXG4gKiBAcGFyYW0gaCAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS5cbiAqIEBwYXJhbSByIC0gVGhlIHJhZGl1cyBvZiB0aGUgY29ybmVycy5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEyNTU1MTIvaG93LXRvLWRyYXctYS1yb3VuZGVkLXJlY3RhbmdsZS1vbi1odG1sLWNhbnZhc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1JvdW5kUmVjdChcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB3OiBudW1iZXIsXG4gIGg6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY29uc3QgcjJkID0gTWF0aC5QSSAvIDE4MDtcbiAgaWYgKHcgLSAyICogciA8IDApIHtcbiAgICByID0gdyAvIDI7XG4gIH0gLy9lbnN1cmUgdGhhdCB0aGUgcmFkaXVzIGlzbid0IHRvbyBsYXJnZSBmb3IgeFxuICBpZiAoaCAtIDIgKiByIDwgMCkge1xuICAgIHIgPSBoIC8gMjtcbiAgfSAvL2Vuc3VyZSB0aGF0IHRoZSByYWRpdXMgaXNuJ3QgdG9vIGxhcmdlIGZvciB5XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyh4ICsgciwgeSk7XG4gIGN0eC5saW5lVG8oeCArIHcgLSByLCB5KTtcbiAgY3R4LmFyYyh4ICsgdyAtIHIsIHkgKyByLCByLCByMmQgKiAyNzAsIHIyZCAqIDM2MCwgZmFsc2UpO1xuICBjdHgubGluZVRvKHggKyB3LCB5ICsgaCAtIHIpO1xuICBjdHguYXJjKHggKyB3IC0gciwgeSArIGggLSByLCByLCAwLCByMmQgKiA5MCwgZmFsc2UpO1xuICBjdHgubGluZVRvKHggKyByLCB5ICsgaCk7XG4gIGN0eC5hcmMoeCArIHIsIHkgKyBoIC0gciwgciwgcjJkICogOTAsIHIyZCAqIDE4MCwgZmFsc2UpO1xuICBjdHgubGluZVRvKHgsIHkgKyByKTtcbiAgY3R4LmFyYyh4ICsgciwgeSArIHIsIHIsIHIyZCAqIDE4MCwgcjJkICogMjcwLCBmYWxzZSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSB3IC0gVGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNlLlxuICogQHBhcmFtIGggLSBUaGUgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlLlxuICogQHJlbWFya3NcbiAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuICpcbiAqIFBvc3RmaXggJ192aXMnIGFkZGVkIHRvIGRpc2Nlcm4gaXQgZnJvbSBzdGFuZGFyZCBtZXRob2QgZWxsaXBzZSgpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0VsbGlwc2UoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgdzogbnVtYmVyLFxuICBoOiBudW1iZXJcbik6IHZvaWQge1xuICBjb25zdCBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgIHhlID0geCArIHcsIC8vIHgtZW5kXG4gICAgeWUgPSB5ICsgaCwgLy8geS1lbmRcbiAgICB4bSA9IHggKyB3IC8gMiwgLy8geC1taWRkbGVcbiAgICB5bSA9IHkgKyBoIC8gMjsgLy8geS1taWRkbGVcblxuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oeCwgeW0pO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGFuIGlzb21ldHJpYyBjeWxpbmRlci5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHcgLSBUaGUgd2lkdGggb2YgdGhlIGRhdGFiYXNlLlxuICogQHBhcmFtIGggLSBUaGUgaGVpZ2h0IG9mIHRoZSBkYXRhYmFzZS5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYXdEYXRhYmFzZShcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB3OiBudW1iZXIsXG4gIGg6IG51bWJlclxuKTogdm9pZCB7XG4gIGNvbnN0IGYgPSAxIC8gMztcbiAgY29uc3Qgd0VsbGlwc2UgPSB3O1xuICBjb25zdCBoRWxsaXBzZSA9IGggKiBmO1xuXG4gIGNvbnN0IGthcHBhID0gMC41NTIyODQ4LFxuICAgIG94ID0gKHdFbGxpcHNlIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgIG95ID0gKGhFbGxpcHNlIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICB4ZSA9IHggKyB3RWxsaXBzZSwgLy8geC1lbmRcbiAgICB5ZSA9IHkgKyBoRWxsaXBzZSwgLy8geS1lbmRcbiAgICB4bSA9IHggKyB3RWxsaXBzZSAvIDIsIC8vIHgtbWlkZGxlXG4gICAgeW0gPSB5ICsgaEVsbGlwc2UgLyAyLCAvLyB5LW1pZGRsZVxuICAgIHltYiA9IHkgKyAoaCAtIGhFbGxpcHNlIC8gMiksIC8vIHktbWlkbGxlLCBib3R0b20gZWxsaXBzZVxuICAgIHllYiA9IHkgKyBoOyAvLyB5LWVuZCwgYm90dG9tIGVsbGlwc2VcblxuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oeGUsIHltKTtcblxuICBjdHguYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgY3R4LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcblxuICBjdHgubGluZVRvKHhlLCB5bWIpO1xuXG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhlLCB5bWIgKyBveSwgeG0gKyBveCwgeWViLCB4bSwgeWViKTtcbiAgY3R4LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWViLCB4LCB5bWIgKyBveSwgeCwgeW1iKTtcblxuICBjdHgubGluZVRvKHgsIHltKTtcbn1cblxuLyoqXG4gKiBEcmF3IGEgZGFzaGVkIGxpbmUuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBzdGFydCBwb3NpdGlvbiBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHgyIC0gVGhlIGVuZCBwb3NpdGlvbiBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkyIC0gVGhlIGVuZCBwb3NpdGlvbiBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHBhdHRlcm4gLSBMaXN0IG9mIGxlbmd0aHMgc3RhcnRpbmcgd2l0aCBsaW5lIGFuZCB0aGVuIGFsdGVybmF0aW5nIGJldHdlZW4gc3BhY2UgYW5kIGxpbmUuXG4gKiBAYXV0aG9yIERhdmlkIEpvcmRhblxuICogQHJlbWFya3NcbiAqIGRhdGUgMjAxMi0wOC0wOFxuICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NTc2NzI0L2RvdHRlZC1zdHJva2UtaW4tY2FudmFzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RGFzaGVkTGluZShcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB4MjogbnVtYmVyLFxuICB5MjogbnVtYmVyLFxuICBwYXR0ZXJuOiBudW1iZXJbXVxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyh4LCB5KTtcblxuICBjb25zdCBwYXR0ZXJuTGVuZ3RoID0gcGF0dGVybi5sZW5ndGg7XG4gIGNvbnN0IGR4ID0geDIgLSB4O1xuICBjb25zdCBkeSA9IHkyIC0geTtcbiAgY29uc3Qgc2xvcGUgPSBkeSAvIGR4O1xuICBsZXQgZGlzdFJlbWFpbmluZyA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gIGxldCBwYXR0ZXJuSW5kZXggPSAwO1xuICBsZXQgZHJhdyA9IHRydWU7XG4gIGxldCB4U3RlcCA9IDA7XG4gIGxldCBkYXNoTGVuZ3RoID0gK3BhdHRlcm5bMF07XG5cbiAgd2hpbGUgKGRpc3RSZW1haW5pbmcgPj0gMC4xKSB7XG4gICAgZGFzaExlbmd0aCA9ICtwYXR0ZXJuW3BhdHRlcm5JbmRleCsrICUgcGF0dGVybkxlbmd0aF07XG4gICAgaWYgKGRhc2hMZW5ndGggPiBkaXN0UmVtYWluaW5nKSB7XG4gICAgICBkYXNoTGVuZ3RoID0gZGlzdFJlbWFpbmluZztcbiAgICB9XG5cbiAgICB4U3RlcCA9IE1hdGguc3FydCgoZGFzaExlbmd0aCAqIGRhc2hMZW5ndGgpIC8gKDEgKyBzbG9wZSAqIHNsb3BlKSk7XG4gICAgeFN0ZXAgPSBkeCA8IDAgPyAteFN0ZXAgOiB4U3RlcDtcbiAgICB4ICs9IHhTdGVwO1xuICAgIHkgKz0gc2xvcGUgKiB4U3RlcDtcblxuICAgIGlmIChkcmF3ID09PSB0cnVlKSB7XG4gICAgICBjdHgubGluZVRvKHgsIHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHgubW92ZVRvKHgsIHkpO1xuICAgIH1cblxuICAgIGRpc3RSZW1haW5pbmcgLT0gZGFzaExlbmd0aDtcbiAgICBkcmF3ID0gIWRyYXc7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3IGEgaGV4YWdvbi5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBUaGUgcmFkaXVzIG9mIHRoZSBoZXhhZ29uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0hleGFnb24oXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjb25zdCBzaWRlcyA9IDY7XG4gIGNvbnN0IGEgPSAoTWF0aC5QSSAqIDIpIC8gc2lkZXM7XG4gIGN0eC5tb3ZlVG8oeCArIHIsIHkpO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IHNpZGVzOyBpKyspIHtcbiAgICBjdHgubGluZVRvKHggKyByICogTWF0aC5jb3MoYSAqIGkpLCB5ICsgciAqIE1hdGguc2luKGEgKiBpKSk7XG4gIH1cbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG5jb25zdCBzaGFwZU1hcCA9IHtcbiAgY2lyY2xlOiBkcmF3Q2lyY2xlLFxuICBkYXNoZWRMaW5lOiBkcmF3RGFzaGVkTGluZSxcbiAgZGF0YWJhc2U6IGRyYXdEYXRhYmFzZSxcbiAgZGlhbW9uZDogZHJhd0RpYW1vbmQsXG4gIGVsbGlwc2U6IGRyYXdFbGxpcHNlLFxuICBlbGxpcHNlX3ZpczogZHJhd0VsbGlwc2UsXG4gIGhleGFnb246IGRyYXdIZXhhZ29uLFxuICByb3VuZFJlY3Q6IGRyYXdSb3VuZFJlY3QsXG4gIHNxdWFyZTogZHJhd1NxdWFyZSxcbiAgc3RhcjogZHJhd1N0YXIsXG4gIHRyaWFuZ2xlOiBkcmF3VHJpYW5nbGUsXG4gIHRyaWFuZ2xlRG93bjogZHJhd1RyaWFuZ2xlRG93bixcbn07XG5cbi8qKlxuICogUmV0dXJucyBlaXRoZXIgY3VzdG9tIG9yIG5hdGl2ZSBkcmF3aW5nIGZ1bmN0aW9uIGJhc2Ugb24gc3VwcGxpZWQgbmFtZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4gRWl0aGVyIHRoZSBuYW1lIG9mIGFcbiAqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBwcm9wZXJ0eSBvciBhbiBleHBvcnQgZnJvbSBzaGFwZXMudHMgd2l0aG91dCB0aGVcbiAqIGRyYXcgcHJlZml4LlxuICogQHJldHVybnMgVGhlIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHJlbmRlcmluZy4gSW4gY2FzZSBvZiBuYXRpdmVcbiAqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmdW5jdGlvbiB0aGUgQVBJIGlzIG5vcm1hbGl6ZWQgdG9cbiAqIGAoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIC4uLm9yaWdpbmFsQXJncykgPT4gdm9pZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaGFwZShcbiAgbmFtZToga2V5b2YgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwga2V5b2YgdHlwZW9mIHNoYXBlTWFwXG4pOiBhbnkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNoYXBlTWFwLCBuYW1lKSkge1xuICAgIHJldHVybiAoc2hhcGVNYXAgYXMgYW55KVtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cGUgYXMgYW55KVtuYW1lXS5jYWxsKGN0eCwgYXJncyk7XG4gICAgfTtcbiAgfVxufVxuIiwgIlxyXG4vKipcclxuICogRXhwb3NlIGBFbWl0dGVyYC5cclxuICovXHJcblxyXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICBtb2R1bGUuZXhwb3J0cyA9IEVtaXR0ZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplIGEgbmV3IGBFbWl0dGVyYC5cclxuICpcclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5mdW5jdGlvbiBFbWl0dGVyKG9iaikge1xyXG4gIGlmIChvYmopIHJldHVybiBtaXhpbihvYmopO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE1peGluIHRoZSBlbWl0dGVyIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKiBAYXBpIHByaXZhdGVcclxuICovXHJcblxyXG5mdW5jdGlvbiBtaXhpbihvYmopIHtcclxuICBmb3IgKHZhciBrZXkgaW4gRW1pdHRlci5wcm90b3R5cGUpIHtcclxuICAgIG9ialtrZXldID0gRW1pdHRlci5wcm90b3R5cGVba2V5XTtcclxuICB9XHJcbiAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuLyoqXHJcbiAqIExpc3RlbiBvbiB0aGUgZ2l2ZW4gYGV2ZW50YCB3aXRoIGBmbmAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxyXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLm9uID1cclxuRW1pdHRlci5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XHJcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xyXG4gICh0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdID0gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSB8fCBbXSlcclxuICAgIC5wdXNoKGZuKTtcclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGFuIGBldmVudGAgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgYSBzaW5nbGVcclxuICogdGltZSB0aGVuIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXHJcbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuRW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XHJcbiAgZnVuY3Rpb24gb24oKSB7XHJcbiAgICB0aGlzLm9mZihldmVudCwgb24pO1xyXG4gICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICB9XHJcblxyXG4gIG9uLmZuID0gZm47XHJcbiAgdGhpcy5vbihldmVudCwgb24pO1xyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSB0aGUgZ2l2ZW4gY2FsbGJhY2sgZm9yIGBldmVudGAgb3IgYWxsXHJcbiAqIHJlZ2lzdGVyZWQgY2FsbGJhY2tzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cclxuICogQHJldHVybiB7RW1pdHRlcn1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5vZmYgPVxyXG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XHJcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XHJcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgZm4pe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuXHJcbiAgLy8gYWxsXHJcbiAgaWYgKDAgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgdGhpcy5fY2FsbGJhY2tzID0ge307XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIHNwZWNpZmljIGV2ZW50XHJcbiAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgaWYgKCFjYWxsYmFja3MpIHJldHVybiB0aGlzO1xyXG5cclxuICAvLyByZW1vdmUgYWxsIGhhbmRsZXJzXHJcbiAgaWYgKDEgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBzcGVjaWZpYyBoYW5kbGVyXHJcbiAgdmFyIGNiO1xyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjYiA9IGNhbGxiYWNrc1tpXTtcclxuICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XHJcbiAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUmVtb3ZlIGV2ZW50IHNwZWNpZmljIGFycmF5cyBmb3IgZXZlbnQgdHlwZXMgdGhhdCBub1xyXG4gIC8vIG9uZSBpcyBzdWJzY3JpYmVkIGZvciB0byBhdm9pZCBtZW1vcnkgbGVhay5cclxuICBpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBFbWl0IGBldmVudGAgd2l0aCB0aGUgZ2l2ZW4gYXJncy5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEBwYXJhbSB7TWl4ZWR9IC4uLlxyXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbihldmVudCl7XHJcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xyXG5cclxuICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSlcclxuICAgICwgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XTtcclxuXHJcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbGxiYWNrcykge1xyXG4gICAgY2FsbGJhY2tzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xyXG4gICAgICBjYWxsYmFja3NbaV0uYXBwbHkodGhpcywgYXJncyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYXJyYXkgb2YgY2FsbGJhY2tzIGZvciBgZXZlbnRgLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHJldHVybiB7QXJyYXl9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnQpe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuICByZXR1cm4gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSB8fCBbXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB0aGlzIGVtaXR0ZXIgaGFzIGBldmVudGAgaGFuZGxlcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50KXtcclxuICByZXR1cm4gISEgdGhpcy5saXN0ZW5lcnMoZXZlbnQpLmxlbmd0aDtcclxufTtcclxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgJiYgIVY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBwcm9wc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnVtZXJhYmxlKSB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgdmFsdWUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAodHlwZW9mIGFyZ3VtZW50ID09ICdvYmplY3QnIHx8IGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgJFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgQ3JlYXRlSXRlclJlc3VsdE9iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWl0ZXJyZXN1bHRvYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogZG9uZSB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChwb2ludCwgZmFsc2UpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIGVtcHR5ID0gW107XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAudGVzdChub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgZW1wdHksIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKHByb3BlcnR5S2V5IGluIG9iamVjdCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbcHJvcGVydHlLZXldID0gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXQpKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PT0gJEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6ICRBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICB0cnkge1xuICAgIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIHdvcmthcm91bmQgb2Ygb2xkIFdlYktpdCArIGBldmFsYCBidWdcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYWJsZSk7XG59KTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mcm9tJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5mcm9tO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvZnJvbVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICB9XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgJ2tleXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChpbmRleCwgZmFsc2UpO1xuICAgIGNhc2UgJ3ZhbHVlcyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHRhcmdldFtpbmRleF0sIGZhbHNlKTtcbiAgfSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBmYWxzZSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNvYmplY3RcbnZhciB2YWx1ZXMgPSBJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcblxuLy8gVjggfiBDaHJvbWUgNDUtIGJ1Z1xuaWYgKCFJU19QVVJFICYmIERFU0NSSVBUT1JTICYmIHZhbHVlcy5uYW1lICE9PSAndmFsdWVzJykgdHJ5IHtcbiAgZGVmaW5lUHJvcGVydHkodmFsdWVzLCAnbmFtZScsIHsgdmFsdWU6ICd2YWx1ZXMnIH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yTWV0aG9kO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdO1xuICB2YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlICYmIGNsYXNzb2YoQ29sbGVjdGlvblByb3RvdHlwZSkgIT09IFRPX1NUUklOR19UQUcpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgfVxuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vZnVsbC9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2RcIik7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkuc2hhbSkgZGVmaW5lUHJvcGVydHkuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYSBwYXJ0IG9mIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXkpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAoaXNDb25zdHJ1Y3RvcihDKSAmJiAoQyA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IEM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbi8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9IFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBpc0NvbmNhdFNwcmVhZGFibGUgPSBmdW5jdGlvbiAoTykge1xuICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzcHJlYWRhYmxlID0gT1tJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gIHJldHVybiBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KE8pO1xufTtcblxudmFyIEZPUkNFRCA9ICFJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIHx8ICFhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBjb25jYXQ6IGZ1bmN0aW9uIGNvbmNhdChhcmcpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoRSk7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgbGVuKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyAxKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gIHZhciByZXN1bHQgPSAkQXJyYXkobWF4KGZpbiAtIGssIDApKTtcbiAgdmFyIG4gPSAwO1xuICBmb3IgKDsgayA8IGZpbjsgaysrLCBuKyspIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gIHJlc3VsdC5sZW5ndGggPSBuO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbmV4cG9ydHMuZiA9IHdlbGxLbm93blN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShzZWxmKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB7fSkpO1xuICAgICAgT1tISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzT3duKE8sIEhJRERFTikgJiYgT1tISURERU5dW2tleV0pIE9bSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBBdHRyaWJ1dGVzID0gbmF0aXZlT2JqZWN0Q3JlYXRlKEF0dHJpYnV0ZXMsIHsgZW51bWVyYWJsZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjcmlwdG9yKE8sIGtleSwgQXR0cmlidXRlcyk7XG4gIH0gcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIGtleSwgQXR0cmlidXRlcyk7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wZXJ0aWVzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMocHJvcGVydGllcykuY29uY2F0KCRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJvcGVydGllcykpO1xuICAkZm9yRWFjaChrZXlzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKCRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgcHJvcGVydGllcywga2V5KSkgJGRlZmluZVByb3BlcnR5KE8sIGtleSwgcHJvcGVydGllc1trZXldKTtcbiAgfSk7XG4gIHJldHVybiBPO1xufTtcblxudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gbmF0aXZlT2JqZWN0Q3JlYXRlKE8pIDogJGRlZmluZVByb3BlcnRpZXMobmF0aXZlT2JqZWN0Q3JlYXRlKE8pLCBQcm9wZXJ0aWVzKTtcbn07XG5cbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBQID0gdG9Qcm9wZXJ0eUtleShWKTtcbiAgdmFyIGVudW1lcmFibGUgPSBjYWxsKG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLCB0aGlzLCBQKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywgUCkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZW51bWVyYWJsZSB8fCAhaGFzT3duKHRoaXMsIFApIHx8ICFoYXNPd24oQWxsU3ltYm9scywgUCkgfHwgaGFzT3duKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW1BdXG4gICAgPyBlbnVtZXJhYmxlIDogdHJ1ZTtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgdmFyIGl0ID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBkZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xuICBpZiAoZGVzY3JpcHRvciAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhKGhhc093bihpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSB7XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIWhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSkgcHVzaChyZXN1bHQsIGtleSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiAoTykge1xuICB2YXIgSVNfT0JKRUNUX1BST1RPVFlQRSA9IE8gPT09IE9iamVjdFByb3RvdHlwZTtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyhJU19PQkpFQ1RfUFJPVE9UWVBFID8gT2JqZWN0UHJvdG90eXBlU3ltYm9scyA6IHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgKCFJU19PQkpFQ1RfUFJPVE9UWVBFIHx8IGhhc093bihPYmplY3RQcm90b3R5cGUsIGtleSkpKSB7XG4gICAgICBwdXNoKHJlc3VsdCwgQWxsU3ltYm9sc1trZXldKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gYFN5bWJvbGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLWNvbnN0cnVjdG9yXG5pZiAoIU5BVElWRV9TWU1CT0wpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAoaXNQcm90b3R5cGVPZihTeW1ib2xQcm90b3R5cGUsIHRoaXMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSAhYXJndW1lbnRzLmxlbmd0aCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICR0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciB0YWcgPSB1aWQoZGVzY3JpcHRpb24pO1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKHRoaXMsIEhJRERFTikgJiYgaGFzT3duKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IodGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgICBmYWxsYmFja0RlZmluZVByb3BlcnR5KHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVwbGFjZXIpIHtcbiAgaWYgKGlzQ2FsbGFibGUocmVwbGFjZXIpKSByZXR1cm4gcmVwbGFjZXI7XG4gIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJldHVybjtcbiAgdmFyIHJhd0xlbmd0aCA9IHJlcGxhY2VyLmxlbmd0aDtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gcmVwbGFjZXJbaV07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKSBwdXNoKGtleXMsIGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdudW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdOdW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdTdHJpbmcnKSBwdXNoKGtleXMsIHRvU3RyaW5nKGVsZW1lbnQpKTtcbiAgfVxuICB2YXIga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgcm9vdCA9IHRydWU7XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChyb290KSB7XG4gICAgICByb290ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHRoaXMpKSByZXR1cm4gdmFsdWU7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzTGVuZ3RoOyBqKyspIGlmIChrZXlzW2pdID09PSBrZXkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBnZXRSZXBsYWNlckZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCdzdHJpbmdpZnkgZGV0ZWN0aW9uJyk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPT0gJ1tudWxsXSdcbiAgICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9PSAne30nXG4gICAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZPUkNFRCA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eXN5bWJvbHNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgdmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5U3ltYm9scyA/ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3QoaXQpKSA6IFtdO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jSXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5hc3luY2l0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jSXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmhhc0luc3RhbmNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaGFzaW5zdGFuY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaGFzSW5zdGFuY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmlzY29uY2F0c3ByZWFkYWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoQWxsYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hhbGxcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2hBbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnJlcGxhY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5yZXBsYWNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNlYXJjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNlYXJjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzZWFyY2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwZWNpZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGVjaWVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwbGl0YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BsaXRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BsaXQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wudG9QcmltaXRpdmVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3ByaW1pdGl2ZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvc3RyaW5ndGFnXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdldEJ1aWx0SW4oJ1N5bWJvbCcpLCAnU3ltYm9sJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC51bnNjb3BhYmxlc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnVuc2NvcGFibGVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBKU09OW0BAdG9TdHJpbmdUYWddIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24tQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BlY2llcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BsaXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudW5zY29wYWJsZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hdGgudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LnRvLXN0cmluZy10YWcnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgTUVUQURBVEEgPSB3ZWxsS25vd25TeW1ib2woJ21ldGFkYXRhJyk7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8vIEZ1bmN0aW9uLnByb3RvdHlwZVtAQG1ldGFkYXRhXVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5pZiAoRnVuY3Rpb25Qcm90b3R5cGVbTUVUQURBVEFdID09PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE1FVEFEQVRBLCB7XG4gICAgdmFsdWU6IG51bGxcbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hc3luYy1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jRGlzcG9zZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuZGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnZGlzcG9zZScpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sJyk7XG5cbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuYXN5bmMtZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyIGtleUZvciA9IFN5bWJvbC5rZXlGb3I7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sIHx8IGZ1bmN0aW9uIGlzUmVnaXN0ZXJlZFN5bWJvbCh2YWx1ZSkge1xuICB0cnkge1xuICAgIHJldHVybiBrZXlGb3IodGhpc1N5bWJvbFZhbHVlKHZhbHVlKSkgIT09IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNSZWdpc3RlcmVkU3ltYm9sOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyICRpc1dlbGxLbm93blN5bWJvbCA9IFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbDtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0QnVpbHRJbignT2JqZWN0JywgJ2dldE93blByb3BlcnR5TmFtZXMnKTtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbmZvciAodmFyIGkgPSAwLCBzeW1ib2xLZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpLCBzeW1ib2xLZXlzTGVuZ3RoID0gc3ltYm9sS2V5cy5sZW5ndGg7IGkgPCBzeW1ib2xLZXlzTGVuZ3RoOyBpKyspIHtcbiAgLy8gc29tZSBvbGQgZW5naW5lcyB0aHJvd3Mgb24gYWNjZXNzIHRvIHNvbWUga2V5cyBsaWtlIGBhcmd1bWVudHNgIG9yIGBjYWxsZXJgXG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbEtleSA9IHN5bWJvbEtleXNbaV07XG4gICAgaWYgKGlzU3ltYm9sKFN5bWJvbFtzeW1ib2xLZXldKSkgd2VsbEtub3duU3ltYm9sKHN5bWJvbEtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn1cblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkge1xuICBpZiAoJGlzV2VsbEtub3duU3ltYm9sICYmICRpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodmFsdWUpO1xuICAgIGZvciAodmFyIGogPSAwLCBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7IGogPCBrZXlzTGVuZ3RoOyBqKyspIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXEgLS0gcG9seWZpbGxlZCBzeW1ib2xzIGNhc2VcbiAgICAgIGlmIChXZWxsS25vd25TeW1ib2xzU3RvcmVba2V5c1tqXV0gPT0gc3ltYm9sKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1dlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bicpO1xuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd25TeW1ib2w6IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoZXJgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm9ic2VydmFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1JlZ2lzdGVyZWRTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXJlZ2lzdGVyZWQnKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRgIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzUmVnaXN0ZXJlZFN5bWJvbCcgfSwge1xuICBpc1JlZ2lzdGVyZWQ6IGlzUmVnaXN0ZXJlZFN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93bmAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzV2VsbEtub3duU3ltYm9sJywgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd246IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhS2V5YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21ldGFkYXRhS2V5Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucGF0dGVybk1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdwYXR0ZXJuTWF0Y2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlQWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm9ic2VydmFibGUnKTtcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucmVwbGFjZS1hbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ2l0ZXJhdG9yJyk7XG4iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfU3ltYm9sJGl0ZXJhdG9yIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZigndG9QcmltaXRpdmUnKTtcbiIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkdG9QcmltaXRpdmUgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbX1N5bWJvbCR0b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIF9PYmplY3QkZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmlzYXJyYXlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBpc0FycmF5OiBpc0FycmF5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5pc0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggYW5kIFNhZmFyaSA8PSAxNS40LCBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5wdXNoJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykucHVzaDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9wdXNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnB1c2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnB1c2gpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcHVzaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIG5hdGl2ZVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKGlzQ29uc3RydWN0b3IoQ29uc3RydWN0b3IpICYmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQ29uc3RydWN0b3IucHJvdG90eXBlKSkpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KENvbnN0cnVjdG9yKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yW1NQRUNJRVNdO1xuICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IG51bGwpIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQ29uc3RydWN0b3IpKG1heChmaW4gLSBrLCAwKSk7XG4gICAgZm9yIChuID0gMDsgayA8IGZpbjsgaysrLCBuKyspIGlmIChrIGluIE8pIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zbGljZScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnNsaWNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNsaWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvYXJyYXkvZnJvbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICByZXR1cm4gYXJyMjtcbn0iLCAiaW1wb3J0IF9zbGljZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICB2YXIgX2NvbnRleHQ7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSkuY2FsbChfY29udGV4dCwgOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gX0FycmF5JGZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsICJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9wdXNoSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIF9TeW1ib2wgJiYgX2dldEl0ZXJhdG9yTWV0aG9kKHIpIHx8IHJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSB0KSB7XG4gICAgdmFyIGUsXG4gICAgICBuLFxuICAgICAgaSxcbiAgICAgIHUsXG4gICAgICBhID0gW10sXG4gICAgICBmID0gITAsXG4gICAgICBvID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHtcbiAgICAgICAgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuO1xuICAgICAgICBmID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoX3B1c2hJbnN0YW5jZVByb3BlcnR5KGEpLmNhbGwoYSwgZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aG91dEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVTcHJlYWQgZnJvbSBcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufSIsICJpbXBvcnQgX0FycmF5JGlzQXJyYXkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoX0FycmF5JGlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn0iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBfU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIF9nZXRJdGVyYXRvck1ldGhvZChpdGVyKSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBfQXJyYXkkZnJvbShpdGVyKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2xcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuY29uY2F0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2NvbmNhdCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5jb25jYXQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmNvbmNhdCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9jb25jYXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zbGljZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lm1hcCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLm1hcDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5tYXApID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvbWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyICREYXRlID0gRGF0ZTtcbnZhciB0aGlzVGltZVZhbHVlID0gdW5jdXJyeVRoaXMoJERhdGUucHJvdG90eXBlLmdldFRpbWUpO1xuXG4vLyBgRGF0ZS5ub3dgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLm5vd1xuJCh7IHRhcmdldDogJ0RhdGUnLCBzdGF0OiB0cnVlIH0sIHtcbiAgbm93OiBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuIHRoaXNUaW1lVmFsdWUobmV3ICREYXRlKCkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUubm93Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5EYXRlLm5vdztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG59IDogW10uZm9yRWFjaDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogW10uZm9yRWFjaCAhPT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2gnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5mb3JFYWNoO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5mb3JFYWNoO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mb3JFYWNoKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IHVuY3VycnlUaGlzKFtdLnJldmVyc2UpO1xudmFyIHRlc3QgPSBbMSwgMl07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmV2ZXJzZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ24gLS0gZGlydHkgaGFja1xuICAgIGlmIChpc0FycmF5KHRoaXMpKSB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHJldHVybiBuYXRpdmVSZXZlcnNlKHRoaXMpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZXZlcnNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JldmVyc2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmV2ZXJzZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmV2ZXJzZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NwbGljZScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc3BsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNwbGljZVxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc3BsaWNlOiBmdW5jdGlvbiBzcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50IC8qICwgLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYWN0dWFsU3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGluc2VydENvdW50LCBhY3R1YWxEZWxldGVDb3VudCwgQSwgaywgZnJvbSwgdG87XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMCkge1xuICAgICAgaW5zZXJ0Q291bnQgPSBhY3R1YWxEZWxldGVDb3VudCA9IDA7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDEpIHtcbiAgICAgIGluc2VydENvdW50ID0gMDtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbGVuIC0gYWN0dWFsU3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc2VydENvdW50ID0gYXJndW1lbnRzTGVuZ3RoIC0gMjtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbWluKG1heCh0b0ludGVnZXJPckluZmluaXR5KGRlbGV0ZUNvdW50KSwgMCksIGxlbiAtIGFjdHVhbFN0YXJ0KTtcbiAgICB9XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGluc2VydENvdW50IC0gYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIGZvciAoayA9IDA7IGsgPCBhY3R1YWxEZWxldGVDb3VudDsgaysrKSB7XG4gICAgICBmcm9tID0gYWN0dWFsU3RhcnQgKyBrO1xuICAgICAgaWYgKGZyb20gaW4gTykgY3JlYXRlUHJvcGVydHkoQSwgaywgT1tmcm9tXSk7XG4gICAgfVxuICAgIEEubGVuZ3RoID0gYWN0dWFsRGVsZXRlQ291bnQ7XG4gICAgaWYgKGluc2VydENvdW50IDwgYWN0dWFsRGVsZXRlQ291bnQpIHtcbiAgICAgIGZvciAoayA9IGFjdHVhbFN0YXJ0OyBrIDwgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgICBmcm9tID0gayArIGFjdHVhbERlbGV0ZUNvdW50O1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudDtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgICBmb3IgKGsgPSBsZW47IGsgPiBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50OyBrLS0pIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCBrIC0gMSk7XG4gICAgfSBlbHNlIGlmIChpbnNlcnRDb3VudCA+IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBsZW4gLSBhY3R1YWxEZWxldGVDb3VudDsgayA+IGFjdHVhbFN0YXJ0OyBrLS0pIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudCAtIDE7XG4gICAgICAgIHRvID0gayArIGluc2VydENvdW50IC0gMTtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IDA7IGsgPCBpbnNlcnRDb3VudDsgaysrKSB7XG4gICAgICBPW2sgKyBhY3R1YWxTdGFydF0gPSBhcmd1bWVudHNbayArIDJdO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50KTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zcGxpY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc3BsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNwbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc3BsaWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NwbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmNsdWRlcztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIEZGOTkrIGJ1Z1xudmFyIEJST0tFTl9PTl9TUEFSU0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtaW5jbHVkZXMgLS0gZGV0ZWN0aW9uXG4gIHJldHVybiAhQXJyYXkoMSkuaW5jbHVkZXMoKTtcbn0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCUk9LRU5fT05fU1BBUlNFIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcycpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmluY2x1ZGVzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09PSAnUmVnRXhwJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1JlZ0V4cChpdCkpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICB2YXIgcmVnZXhwID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICB0cnkge1xuICAgICAgcmVnZXhwW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICAgIH0gY2F0Y2ggKGVycm9yMikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBub3RBUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMnKTtcblxudmFyIHN0cmluZ0luZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIWNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdpbmNsdWRlcycpIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5zdHJpbmdJbmRleE9mKFxuICAgICAgdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSksXG4gICAgICB0b1N0cmluZyhub3RBUmVnRXhwKHNlYXJjaFN0cmluZykpLFxuICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcycpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdTdHJpbmcnKS5pbmNsdWRlcztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYXJyYXlNZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2luY2x1ZGVzJyk7XG52YXIgc3RyaW5nTWV0aG9kID0gcmVxdWlyZSgnLi4vc3RyaW5nL3ZpcnR1YWwvaW5jbHVkZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5pbmNsdWRlcztcbiAgaWYgKGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuaW5jbHVkZXMpKSByZXR1cm4gYXJyYXlNZXRob2Q7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgfHwgaXQgPT09IFN0cmluZ1Byb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihTdHJpbmdQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IFN0cmluZ1Byb3RvdHlwZS5pbmNsdWRlcykpIHtcbiAgICByZXR1cm4gc3RyaW5nTWV0aG9kO1xuICB9IHJldHVybiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9pbmNsdWRlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmlsdGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbHRlcikgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyJyArXG4gICdcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXlsnICsgd2hpdGVzcGFjZXMgKyAnXSsnKTtcbnZhciBydHJpbSA9IFJlZ0V4cCgnKF58W14nICsgd2hpdGVzcGFjZXMgKyAnXSlbJyArIHdoaXRlc3BhY2VzICsgJ10rJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgbHRyaW0sICcnKTtcbiAgICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBydHJpbSwgJyQxJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbVJpZ2h0LCB0cmltRW5kIH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciAkcGFyc2VJbnQgPSBnbG9iYWwucGFyc2VJbnQ7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBJVEVSQVRPUiA9IFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgaGV4ID0gL15bKy1dPzB4L2k7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGhleC5leGVjKTtcbnZhciBGT1JDRUQgPSAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMDgnKSAhPT0gOCB8fCAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMHgxNicpICE9PSAyMlxuICAvLyBNUyBFZGdlIDE4LSBicm9rZW4gd2l0aCBib3hlZCBzeW1ib2xzXG4gIHx8IChJVEVSQVRPUiAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyAkcGFyc2VJbnQoT2JqZWN0KElURVJBVE9SKSk7IH0pKTtcblxuLy8gYHBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VpbnQtc3RyaW5nLXJhZGl4XG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlSW50KHN0cmluZywgcmFkaXgpIHtcbiAgdmFyIFMgPSB0cmltKHRvU3RyaW5nKHN0cmluZykpO1xuICByZXR1cm4gJHBhcnNlSW50KFMsIChyYWRpeCA+Pj4gMCkgfHwgKGV4ZWMoaGV4LCBTKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1wYXJzZS1pbnQnKTtcblxuLy8gYHBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VpbnQtc3RyaW5nLXJhZGl4XG4kKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHBhcnNlSW50ICE9PSAkcGFyc2VJbnQgfSwge1xuICBwYXJzZUludDogJHBhcnNlSW50XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnBhcnNlLWludCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGgucGFyc2VJbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluZGV4b2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciAkaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVJbmRleE9mID0gdW5jdXJyeVRoaXMoW10uaW5kZXhPZik7XG5cbnZhciBORUdBVElWRV9aRVJPID0gISFuYXRpdmVJbmRleE9mICYmIDEgLyBuYXRpdmVJbmRleE9mKFsxXSwgMSwgLTApIDwgMDtcbnZhciBGT1JDRUQgPSBORUdBVElWRV9aRVJPIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdpbmRleE9mJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgdmFyIGZyb21JbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/IG5hdGl2ZUluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4KSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5pbmRleE9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2luZGV4LW9mJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmluZGV4T2Y7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmluZGV4T2YpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvaW5kZXgtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgY3JlYXRlOiBjcmVhdGVcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoUCwgRCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1qc29uIC0tIHNhZmVcbmlmICghcGF0aC5KU09OKSBwYXRoLkpTT04gPSB7IHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnkgfTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgcmV0dXJuIGFwcGx5KHBhdGguSlNPTi5zdHJpbmdpZnksIG51bGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9qc29uL3N0cmluZ2lmeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQnVuIC0tIERlbm8gY2FzZSAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgQnVuID09ICdmdW5jdGlvbicgJiYgQnVuICYmIHR5cGVvZiBCdW4udmVyc2lvbiA9PSAnc3RyaW5nJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICByZXR1cm4gcGFzc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIEVOR0lORV9JU19CVU4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bicpO1xudmFyIFVTRVJfQUdFTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xuXG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG4vLyBkaXJ0eSBJRTktIGFuZCBCdW4gMC4zLjAtIGNoZWNrc1xudmFyIFdSQVAgPSAvTVNJRSAuXFwuLy50ZXN0KFVTRVJfQUdFTlQpIHx8IEVOR0lORV9JU19CVU4gJiYgKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlcnNpb24gPSBnbG9iYWwuQnVuLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoIDwgMyB8fCB2ZXJzaW9uWzBdID09PSAnMCcgJiYgKHZlcnNpb25bMV0gPCAzIHx8IHZlcnNpb25bMV0gPT09ICczJyAmJiB2ZXJzaW9uWzJdID09PSAnMCcpO1xufSkoKTtcblxuLy8gSUU5LSAvIEJ1biAwLjMuMC0gc2V0VGltZW91dCAvIHNldEludGVydmFsIC8gc2V0SW1tZWRpYXRlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjdGltZXJzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzE2MzNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaGFzVGltZUFyZykge1xuICB2YXIgZmlyc3RQYXJhbUluZGV4ID0gaGFzVGltZUFyZyA/IDIgOiAxO1xuICByZXR1cm4gV1JBUCA/IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gZmlyc3RQYXJhbUluZGV4O1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIHBhcmFtcyA9IGJvdW5kQXJncyA/IGFycmF5U2xpY2UoYXJndW1lbnRzLCBmaXJzdFBhcmFtSW5kZXgpIDogW107XG4gICAgdmFyIGNhbGxiYWNrID0gYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHRoaXMsIHBhcmFtcyk7XG4gICAgfSA6IGZuO1xuICAgIHJldHVybiBoYXNUaW1lQXJnID8gc2NoZWR1bGVyKGNhbGxiYWNrLCB0aW1lb3V0KSA6IHNjaGVkdWxlcihjYWxsYmFjayk7XG4gIH0gOiBzY2hlZHVsZXI7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRJbnRlcnZhbCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldEludGVydmFsLCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0SW50ZXJ2YWwgIT09IHNldEludGVydmFsIH0sIHtcbiAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0VGltZW91dCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldFRpbWVvdXQsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldFRpbWVvdXQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0VGltZW91dCAhPT0gc2V0VGltZW91dCB9LCB7XG4gIHNldFRpbWVvdXQ6IHNldFRpbWVvdXRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnRpbWVycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0VGltZW91dDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWxsYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbGxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmlsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1maWxsJyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbGxcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmlsbDogZmlsbFxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2ZpbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbGwnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5maWxsO1xuIiwgIi8qISBIYW1tZXIuSlMgLSB2Mi4wLjE3LXJjIC0gMjAxOS0xMi0xNlxuICogaHR0cDovL25hdmVyLmdpdGh1Yi5pby9lZ2pzXG4gKlxuICogRm9ya2VkIEJ5IE5hdmVyIGVnanNcbiAqIENvcHlyaWdodCAoYykgaGFtbWVyanNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAqL1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBleHRlbmQgb2JqZWN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIGluIGRlc3Qgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgb25lcyBpbiBzcmMuXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gey4uLk9iamVjdH0gb2JqZWN0c190b19hc3NpZ25cbiAqIEByZXR1cm5zIHtPYmplY3R9IHRhcmdldFxuICovXG52YXIgYXNzaWduO1xuXG5pZiAodHlwZW9mIE9iamVjdC5hc3NpZ24gIT09ICdmdW5jdGlvbicpIHtcbiAgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCkge1xuICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCB8fCB0YXJnZXQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHZhciBvdXRwdXQgPSBPYmplY3QodGFyZ2V0KTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBhcmd1bWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XTtcblxuICAgICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBuZXh0S2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIHtcbiAgICAgICAgICAgIG91dHB1dFtuZXh0S2V5XSA9IHNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xufSBlbHNlIHtcbiAgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbn1cblxudmFyIGFzc2lnbiQxID0gYXNzaWduO1xuXG52YXIgVkVORE9SX1BSRUZJWEVTID0gWycnLCAnd2Via2l0JywgJ01veicsICdNUycsICdtcycsICdvJ107XG52YXIgVEVTVF9FTEVNRU5UID0gdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiID8ge1xuICBzdHlsZToge31cbn0gOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbnZhciBUWVBFX0ZVTkNUSU9OID0gJ2Z1bmN0aW9uJztcbnZhciByb3VuZCA9IE1hdGgucm91bmQsXG4gICAgYWJzID0gTWF0aC5hYnM7XG52YXIgbm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgcHJlZml4ZWQgcHJvcGVydHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICogQHJldHVybnMge1N0cmluZ3xVbmRlZmluZWR9IHByZWZpeGVkXG4gKi9cblxuZnVuY3Rpb24gcHJlZml4ZWQob2JqLCBwcm9wZXJ0eSkge1xuICB2YXIgcHJlZml4O1xuICB2YXIgcHJvcDtcbiAgdmFyIGNhbWVsUHJvcCA9IHByb3BlcnR5WzBdLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgVkVORE9SX1BSRUZJWEVTLmxlbmd0aCkge1xuICAgIHByZWZpeCA9IFZFTkRPUl9QUkVGSVhFU1tpXTtcbiAgICBwcm9wID0gcHJlZml4ID8gcHJlZml4ICsgY2FtZWxQcm9wIDogcHJvcGVydHk7XG5cbiAgICBpZiAocHJvcCBpbiBvYmopIHtcbiAgICAgIHJldHVybiBwcm9wO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldy1mdW5jLCBuby1uZXN0ZWQtdGVybmFyeSAqL1xudmFyIHdpbjtcblxuaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgLy8gd2luZG93IGlzIHVuZGVmaW5lZCBpbiBub2RlLmpzXG4gIHdpbiA9IHt9O1xufSBlbHNlIHtcbiAgd2luID0gd2luZG93O1xufVxuXG52YXIgUFJFRklYRURfVE9VQ0hfQUNUSU9OID0gcHJlZml4ZWQoVEVTVF9FTEVNRU5ULnN0eWxlLCAndG91Y2hBY3Rpb24nKTtcbnZhciBOQVRJVkVfVE9VQ0hfQUNUSU9OID0gUFJFRklYRURfVE9VQ0hfQUNUSU9OICE9PSB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRUb3VjaEFjdGlvblByb3BzKCkge1xuICBpZiAoIU5BVElWRV9UT1VDSF9BQ1RJT04pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdG91Y2hNYXAgPSB7fTtcbiAgdmFyIGNzc1N1cHBvcnRzID0gd2luLkNTUyAmJiB3aW4uQ1NTLnN1cHBvcnRzO1xuICBbJ2F1dG8nLCAnbWFuaXB1bGF0aW9uJywgJ3Bhbi15JywgJ3Bhbi14JywgJ3Bhbi14IHBhbi15JywgJ25vbmUnXS5mb3JFYWNoKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAvLyBJZiBjc3Muc3VwcG9ydHMgaXMgbm90IHN1cHBvcnRlZCBidXQgdGhlcmUgaXMgbmF0aXZlIHRvdWNoLWFjdGlvbiBhc3N1bWUgaXQgc3VwcG9ydHNcbiAgICAvLyBhbGwgdmFsdWVzLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBJRSAxMCBhbmQgMTEuXG4gICAgcmV0dXJuIHRvdWNoTWFwW3ZhbF0gPSBjc3NTdXBwb3J0cyA/IHdpbi5DU1Muc3VwcG9ydHMoJ3RvdWNoLWFjdGlvbicsIHZhbCkgOiB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHRvdWNoTWFwO1xufVxuXG52YXIgVE9VQ0hfQUNUSU9OX0NPTVBVVEUgPSAnY29tcHV0ZSc7XG52YXIgVE9VQ0hfQUNUSU9OX0FVVE8gPSAnYXV0byc7XG52YXIgVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTiA9ICdtYW5pcHVsYXRpb24nOyAvLyBub3QgaW1wbGVtZW50ZWRcblxudmFyIFRPVUNIX0FDVElPTl9OT05FID0gJ25vbmUnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWCA9ICdwYW4teCc7XG52YXIgVE9VQ0hfQUNUSU9OX1BBTl9ZID0gJ3Bhbi15JztcbnZhciBUT1VDSF9BQ1RJT05fTUFQID0gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpO1xuXG52YXIgTU9CSUxFX1JFR0VYID0gL21vYmlsZXx0YWJsZXR8aXAoYWR8aG9uZXxvZCl8YW5kcm9pZC9pO1xudmFyIFNVUFBPUlRfVE9VQ0ggPSAnb250b3VjaHN0YXJ0JyBpbiB3aW47XG52YXIgU1VQUE9SVF9QT0lOVEVSX0VWRU5UUyA9IHByZWZpeGVkKHdpbiwgJ1BvaW50ZXJFdmVudCcpICE9PSB1bmRlZmluZWQ7XG52YXIgU1VQUE9SVF9PTkxZX1RPVUNIID0gU1VQUE9SVF9UT1VDSCAmJiBNT0JJTEVfUkVHRVgudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJTlBVVF9UWVBFX1RPVUNIID0gJ3RvdWNoJztcbnZhciBJTlBVVF9UWVBFX1BFTiA9ICdwZW4nO1xudmFyIElOUFVUX1RZUEVfTU9VU0UgPSAnbW91c2UnO1xudmFyIElOUFVUX1RZUEVfS0lORUNUID0gJ2tpbmVjdCc7XG52YXIgQ09NUFVURV9JTlRFUlZBTCA9IDI1O1xudmFyIElOUFVUX1NUQVJUID0gMTtcbnZhciBJTlBVVF9NT1ZFID0gMjtcbnZhciBJTlBVVF9FTkQgPSA0O1xudmFyIElOUFVUX0NBTkNFTCA9IDg7XG52YXIgRElSRUNUSU9OX05PTkUgPSAxO1xudmFyIERJUkVDVElPTl9MRUZUID0gMjtcbnZhciBESVJFQ1RJT05fUklHSFQgPSA0O1xudmFyIERJUkVDVElPTl9VUCA9IDg7XG52YXIgRElSRUNUSU9OX0RPV04gPSAxNjtcbnZhciBESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9MRUZUIHwgRElSRUNUSU9OX1JJR0hUO1xudmFyIERJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9VUCB8IERJUkVDVElPTl9ET1dOO1xudmFyIERJUkVDVElPTl9BTEwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTDtcbnZhciBQUk9QU19YWSA9IFsneCcsICd5J107XG52YXIgUFJPUFNfQ0xJRU5UX1hZID0gWydjbGllbnRYJywgJ2NsaWVudFknXTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogd2FsayBvYmplY3RzIGFuZCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICovXG5mdW5jdGlvbiBlYWNoKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgdmFyIGk7XG5cbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAob2JqLmZvckVhY2gpIHtcbiAgICBvYmouZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCk7XG4gIH0gZWxzZSBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IG9iai5sZW5ndGgpIHtcbiAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgICAgaSsrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICBvYmouaGFzT3duUHJvcGVydHkoaSkgJiYgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGxldCBhIGJvb2xlYW4gdmFsdWUgYWxzbyBiZSBhIGZ1bmN0aW9uIHRoYXQgbXVzdCByZXR1cm4gYSBib29sZWFuXG4gKiB0aGlzIGZpcnN0IGl0ZW0gaW4gYXJncyB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gdmFsXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnc11cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGJvb2xPckZuKHZhbCwgYXJncykge1xuICBpZiAodHlwZW9mIHZhbCA9PT0gVFlQRV9GVU5DVElPTikge1xuICAgIHJldHVybiB2YWwuYXBwbHkoYXJncyA/IGFyZ3NbMF0gfHwgdW5kZWZpbmVkIDogdW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB2YWw7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNtYWxsIGluZGV4T2Ygd3JhcHBlclxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBpblN0cihzdHIsIGZpbmQpIHtcbiAgcmV0dXJuIHN0ci5pbmRleE9mKGZpbmQpID4gLTE7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdoZW4gdGhlIHRvdWNoQWN0aW9ucyBhcmUgY29sbGVjdGVkIHRoZXkgYXJlIG5vdCBhIHZhbGlkIHZhbHVlLCBzbyB3ZSBuZWVkIHRvIGNsZWFuIHRoaW5ncyB1cC4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbnNcbiAqIEByZXR1cm5zIHsqfVxuICovXG5cbmZ1bmN0aW9uIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMpIHtcbiAgLy8gbm9uZVxuICBpZiAoaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX05PTkUpKSB7XG4gICAgcmV0dXJuIFRPVUNIX0FDVElPTl9OT05FO1xuICB9XG5cbiAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSk7IC8vIGlmIGJvdGggcGFuLXggYW5kIHBhbi15IGFyZSBzZXQgKGRpZmZlcmVudCByZWNvZ25pemVyc1xuICAvLyBmb3IgZGlmZmVyZW50IGRpcmVjdGlvbnMsIGUuZy4gaG9yaXpvbnRhbCBwYW4gYnV0IHZlcnRpY2FsIHN3aXBlPylcbiAgLy8gd2UgbmVlZCBub25lIChhcyBvdGhlcndpc2Ugd2l0aCBwYW4teCBwYW4teSBjb21iaW5lZCBub25lIG9mIHRoZXNlXG4gIC8vIHJlY29nbml6ZXJzIHdpbGwgd29yaywgc2luY2UgdGhlIGJyb3dzZXIgd291bGQgaGFuZGxlIGFsbCBwYW5uaW5nXG5cbiAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfSAvLyBwYW4teCBPUiBwYW4teVxuXG5cbiAgaWYgKGhhc1BhblggfHwgaGFzUGFuWSkge1xuICAgIHJldHVybiBoYXNQYW5YID8gVE9VQ0hfQUNUSU9OX1BBTl9YIDogVE9VQ0hfQUNUSU9OX1BBTl9ZO1xuICB9IC8vIG1hbmlwdWxhdGlvblxuXG5cbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04pKSB7XG4gICAgcmV0dXJuIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT047XG4gIH1cblxuICByZXR1cm4gVE9VQ0hfQUNUSU9OX0FVVE87XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIEFjdGlvblxuICogc2V0cyB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgb3IgdXNlcyB0aGUganMgYWx0ZXJuYXRpdmVcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG52YXIgVG91Y2hBY3Rpb24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUb3VjaEFjdGlvbihtYW5hZ2VyLCB2YWx1ZSkge1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5zZXQodmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlIG9uIHRoZSBlbGVtZW50IG9yIGVuYWJsZSB0aGUgcG9seWZpbGxcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFRvdWNoQWN0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gZmluZCBvdXQgdGhlIHRvdWNoLWFjdGlvbiBieSB0aGUgZXZlbnQgaGFuZGxlcnNcbiAgICBpZiAodmFsdWUgPT09IFRPVUNIX0FDVElPTl9DT01QVVRFKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuY29tcHV0ZSgpO1xuICAgIH1cblxuICAgIGlmIChOQVRJVkVfVE9VQ0hfQUNUSU9OICYmIHRoaXMubWFuYWdlci5lbGVtZW50LnN0eWxlICYmIFRPVUNIX0FDVElPTl9NQVBbdmFsdWVdKSB7XG4gICAgICB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZVtQUkVGSVhFRF9UT1VDSF9BQ1RJT05dID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25zID0gdmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBqdXN0IHJlLXNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHRoaXMuc2V0KHRoaXMubWFuYWdlci5vcHRpb25zLnRvdWNoQWN0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNvbXB1dGUgdGhlIHZhbHVlIGZvciB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgYmFzZWQgb24gdGhlIHJlY29nbml6ZXIncyBzZXR0aW5nc1xuICAgKiBAcmV0dXJucyB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIF9wcm90by5jb21wdXRlID0gZnVuY3Rpb24gY29tcHV0ZSgpIHtcbiAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgIGVhY2godGhpcy5tYW5hZ2VyLnJlY29nbml6ZXJzLCBmdW5jdGlvbiAocmVjb2duaXplcikge1xuICAgICAgaWYgKGJvb2xPckZuKHJlY29nbml6ZXIub3B0aW9ucy5lbmFibGUsIFtyZWNvZ25pemVyXSkpIHtcbiAgICAgICAgYWN0aW9ucyA9IGFjdGlvbnMuY29uY2F0KHJlY29nbml6ZXIuZ2V0VG91Y2hBY3Rpb24oKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMuam9pbignICcpKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiBlYWNoIGlucHV0IGN5Y2xlIGFuZCBwcm92aWRlcyB0aGUgcHJldmVudGluZyBvZiB0aGUgYnJvd3NlciBiZWhhdmlvclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudERlZmF1bHRzID0gZnVuY3Rpb24gcHJldmVudERlZmF1bHRzKGlucHV0KSB7XG4gICAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0Lm9mZnNldERpcmVjdGlvbjsgLy8gaWYgdGhlIHRvdWNoIGFjdGlvbiBkaWQgcHJldmVudGVkIG9uY2UgdGhpcyBzZXNzaW9uXG5cbiAgICBpZiAodGhpcy5tYW5hZ2VyLnNlc3Npb24ucHJldmVudGVkKSB7XG4gICAgICBzcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgIHZhciBoYXNOb25lID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX05PTkUpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9ZXTtcbiAgICB2YXIgaGFzUGFuWCA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWCkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9YXTtcblxuICAgIGlmIChoYXNOb25lKSB7XG4gICAgICAvLyBkbyBub3QgcHJldmVudCBkZWZhdWx0cyBpZiB0aGlzIGlzIGEgdGFwIGdlc3R1cmVcbiAgICAgIHZhciBpc1RhcFBvaW50ZXIgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IDE7XG4gICAgICB2YXIgaXNUYXBNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgMjtcbiAgICAgIHZhciBpc1RhcFRvdWNoVGltZSA9IGlucHV0LmRlbHRhVGltZSA8IDI1MDtcblxuICAgICAgaWYgKGlzVGFwUG9pbnRlciAmJiBpc1RhcE1vdmVtZW50ICYmIGlzVGFwVG91Y2hUaW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgICAvLyBgcGFuLXggcGFuLXlgIG1lYW5zIGJyb3dzZXIgaGFuZGxlcyBhbGwgc2Nyb2xsaW5nL3Bhbm5pbmcsIGRvIG5vdCBwcmV2ZW50XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGhhc05vbmUgfHwgaGFzUGFuWSAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8fCBoYXNQYW5YICYmIGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJldmVudFNyYyhzcmNFdmVudCk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FsbCBwcmV2ZW50RGVmYXVsdCB0byBwcmV2ZW50IHRoZSBicm93c2VyJ3MgZGVmYXVsdCBiZWhhdmlvciAoc2Nyb2xsaW5nIGluIG1vc3QgY2FzZXMpXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzcmNFdmVudFxuICAgKi9cblxuXG4gIF9wcm90by5wcmV2ZW50U3JjID0gZnVuY3Rpb24gcHJldmVudFNyYyhzcmNFdmVudCkge1xuICAgIHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCA9IHRydWU7XG4gICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfTtcblxuICByZXR1cm4gVG91Y2hBY3Rpb247XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBub2RlIGlzIGluIHRoZSBnaXZlbiBwYXJlbnRcbiAqIEBtZXRob2QgaGFzUGFyZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYXJlbnRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGhhc1BhcmVudChub2RlLCBwYXJlbnQpIHtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZSA9PT0gcGFyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIGNlbnRlciBvZiBhbGwgdGhlIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBwb2ludGVyc1xuICogQHJldHVybiB7T2JqZWN0fSBjZW50ZXIgY29udGFpbnMgYHhgIGFuZCBgeWAgcHJvcGVydGllc1xuICovXG5cbmZ1bmN0aW9uIGdldENlbnRlcihwb2ludGVycykge1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIG5vIG5lZWQgdG8gbG9vcCB3aGVuIG9ubHkgb25lIHRvdWNoXG5cbiAgaWYgKHBvaW50ZXJzTGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFgpLFxuICAgICAgeTogcm91bmQocG9pbnRlcnNbMF0uY2xpZW50WSlcbiAgICB9O1xuICB9XG5cbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IHBvaW50ZXJzTGVuZ3RoKSB7XG4gICAgeCArPSBwb2ludGVyc1tpXS5jbGllbnRYO1xuICAgIHkgKz0gcG9pbnRlcnNbaV0uY2xpZW50WTtcbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHggLyBwb2ludGVyc0xlbmd0aCksXG4gICAgeTogcm91bmQoeSAvIHBvaW50ZXJzTGVuZ3RoKVxuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjcmVhdGUgYSBzaW1wbGUgY2xvbmUgZnJvbSB0aGUgaW5wdXQgdXNlZCBmb3Igc3RvcmFnZSBvZiBmaXJzdElucHV0IGFuZCBmaXJzdE11bHRpcGxlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IGNsb25lZElucHV0RGF0YVxuICovXG5cbmZ1bmN0aW9uIHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KSB7XG4gIC8vIG1ha2UgYSBzaW1wbGUgY29weSBvZiB0aGUgcG9pbnRlcnMgYmVjYXVzZSB3ZSB3aWxsIGdldCBhIHJlZmVyZW5jZSBpZiB3ZSBkb24ndFxuICAvLyB3ZSBvbmx5IG5lZWQgY2xpZW50WFkgZm9yIHRoZSBjYWxjdWxhdGlvbnNcbiAgdmFyIHBvaW50ZXJzID0gW107XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgIHBvaW50ZXJzW2ldID0ge1xuICAgICAgY2xpZW50WDogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WCksXG4gICAgICBjbGllbnRZOiByb3VuZChpbnB1dC5wb2ludGVyc1tpXS5jbGllbnRZKVxuICAgIH07XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0aW1lU3RhbXA6IG5vdygpLFxuICAgIHBvaW50ZXJzOiBwb2ludGVycyxcbiAgICBjZW50ZXI6IGdldENlbnRlcihwb2ludGVycyksXG4gICAgZGVsdGFYOiBpbnB1dC5kZWx0YVgsXG4gICAgZGVsdGFZOiBpbnB1dC5kZWx0YVlcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhYnNvbHV0ZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMSB7eCwgeX1cbiAqIEBwYXJhbSB7T2JqZWN0fSBwMiB7eCwgeX1cbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gZGlzdGFuY2VcbiAqL1xuXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIGFuZ2xlIGJldHdlZW4gdHdvIGNvb3JkaW5hdGVzXG4gKiBAcGFyYW0ge09iamVjdH0gcDFcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMlxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICovXG5cbmZ1bmN0aW9uIGdldEFuZ2xlKHAxLCBwMiwgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHByb3BzID0gUFJPUFNfWFk7XG4gIH1cblxuICB2YXIgeCA9IHAyW3Byb3BzWzBdXSAtIHAxW3Byb3BzWzBdXTtcbiAgdmFyIHkgPSBwMltwcm9wc1sxXV0gLSBwMVtwcm9wc1sxXV07XG4gIHJldHVybiBNYXRoLmF0YW4yKHksIHgpICogMTgwIC8gTWF0aC5QSTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBkaXJlY3Rpb24gYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge051bWJlcn0gZGlyZWN0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlyZWN0aW9uKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHtcbiAgICByZXR1cm4gRElSRUNUSU9OX05PTkU7XG4gIH1cblxuICBpZiAoYWJzKHgpID49IGFicyh5KSkge1xuICAgIHJldHVybiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICB9XG5cbiAgcmV0dXJuIHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KSB7XG4gIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXI7IC8vIGxldCB7IG9mZnNldERlbHRhOm9mZnNldCA9IHt9LCBwcmV2RGVsdGEgPSB7fSwgcHJldklucHV0ID0ge30gfSA9IHNlc3Npb247XG4gIC8vIGpzY3MgdGhyb3dpbmcgZXJyb3Igb24gZGVmYWx1dCBkZXN0cnVjdHVyZWQgdmFsdWVzIGFuZCB3aXRob3V0IGRlZmF1bHRzIHRlc3RzIGZhaWxcblxuICB2YXIgb2Zmc2V0ID0gc2Vzc2lvbi5vZmZzZXREZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhIHx8IHt9O1xuICB2YXIgcHJldklucHV0ID0gc2Vzc2lvbi5wcmV2SW5wdXQgfHwge307XG5cbiAgaWYgKGlucHV0LmV2ZW50VHlwZSA9PT0gSU5QVVRfU1RBUlQgfHwgcHJldklucHV0LmV2ZW50VHlwZSA9PT0gSU5QVVRfRU5EKSB7XG4gICAgcHJldkRlbHRhID0gc2Vzc2lvbi5wcmV2RGVsdGEgPSB7XG4gICAgICB4OiBwcmV2SW5wdXQuZGVsdGFYIHx8IDAsXG4gICAgICB5OiBwcmV2SW5wdXQuZGVsdGFZIHx8IDBcbiAgICB9O1xuICAgIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgPSB7XG4gICAgICB4OiBjZW50ZXIueCxcbiAgICAgIHk6IGNlbnRlci55XG4gICAgfTtcbiAgfVxuXG4gIGlucHV0LmRlbHRhWCA9IHByZXZEZWx0YS54ICsgKGNlbnRlci54IC0gb2Zmc2V0LngpO1xuICBpbnB1dC5kZWx0YVkgPSBwcmV2RGVsdGEueSArIChjZW50ZXIueSAtIG9mZnNldC55KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSB2ZWxvY2l0eSBiZXR3ZWVuIHR3byBwb2ludHMuIHVuaXQgaXMgaW4gcHggcGVyIG1zLlxuICogQHBhcmFtIHtOdW1iZXJ9IGRlbHRhVGltZVxuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtPYmplY3R9IHZlbG9jaXR5IGB4YCBhbmQgYHlgXG4gKi9cbmZ1bmN0aW9uIGdldFZlbG9jaXR5KGRlbHRhVGltZSwgeCwgeSkge1xuICByZXR1cm4ge1xuICAgIHg6IHggLyBkZWx0YVRpbWUgfHwgMCxcbiAgICB5OiB5IC8gZGVsdGFUaW1lIHx8IDBcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBzY2FsZSBmYWN0b3IgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAqIG5vIHNjYWxlIGlzIDEsIGFuZCBnb2VzIGRvd24gdG8gMCB3aGVuIHBpbmNoZWQgdG9nZXRoZXIsIGFuZCBiaWdnZXIgd2hlbiBwaW5jaGVkIG91dFxuICogQHBhcmFtIHtBcnJheX0gc3RhcnQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IGVuZCBhcnJheSBvZiBwb2ludGVyc1xuICogQHJldHVybiB7TnVtYmVyfSBzY2FsZVxuICovXG5cbmZ1bmN0aW9uIGdldFNjYWxlKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGdldERpc3RhbmNlKGVuZFswXSwgZW5kWzFdLCBQUk9QU19DTElFTlRfWFkpIC8gZ2V0RGlzdGFuY2Uoc3RhcnRbMF0sIHN0YXJ0WzFdLCBQUk9QU19DTElFTlRfWFkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIHJvdGF0aW9uIGRlZ3JlZXMgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gcm90YXRpb25cbiAqL1xuXG5mdW5jdGlvbiBnZXRSb3RhdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXRBbmdsZShlbmRbMV0sIGVuZFswXSwgUFJPUFNfQ0xJRU5UX1hZKSArIGdldEFuZ2xlKHN0YXJ0WzFdLCBzdGFydFswXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdmVsb2NpdHkgaXMgY2FsY3VsYXRlZCBldmVyeSB4IG1zXG4gKiBAcGFyYW0ge09iamVjdH0gc2Vzc2lvblxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cblxuZnVuY3Rpb24gY29tcHV0ZUludGVydmFsSW5wdXREYXRhKHNlc3Npb24sIGlucHV0KSB7XG4gIHZhciBsYXN0ID0gc2Vzc2lvbi5sYXN0SW50ZXJ2YWwgfHwgaW5wdXQ7XG4gIHZhciBkZWx0YVRpbWUgPSBpbnB1dC50aW1lU3RhbXAgLSBsYXN0LnRpbWVTdGFtcDtcbiAgdmFyIHZlbG9jaXR5O1xuICB2YXIgdmVsb2NpdHlYO1xuICB2YXIgdmVsb2NpdHlZO1xuICB2YXIgZGlyZWN0aW9uO1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0NBTkNFTCAmJiAoZGVsdGFUaW1lID4gQ09NUFVURV9JTlRFUlZBTCB8fCBsYXN0LnZlbG9jaXR5ID09PSB1bmRlZmluZWQpKSB7XG4gICAgdmFyIGRlbHRhWCA9IGlucHV0LmRlbHRhWCAtIGxhc3QuZGVsdGFYO1xuICAgIHZhciBkZWx0YVkgPSBpbnB1dC5kZWx0YVkgLSBsYXN0LmRlbHRhWTtcbiAgICB2YXIgdiA9IGdldFZlbG9jaXR5KGRlbHRhVGltZSwgZGVsdGFYLCBkZWx0YVkpO1xuICAgIHZlbG9jaXR5WCA9IHYueDtcbiAgICB2ZWxvY2l0eVkgPSB2Lnk7XG4gICAgdmVsb2NpdHkgPSBhYnModi54KSA+IGFicyh2LnkpID8gdi54IDogdi55O1xuICAgIGRpcmVjdGlvbiA9IGdldERpcmVjdGlvbihkZWx0YVgsIGRlbHRhWSk7XG4gICAgc2Vzc2lvbi5sYXN0SW50ZXJ2YWwgPSBpbnB1dDtcbiAgfSBlbHNlIHtcbiAgICAvLyB1c2UgbGF0ZXN0IHZlbG9jaXR5IGluZm8gaWYgaXQgZG9lc24ndCBvdmVydGFrZSBhIG1pbmltdW0gcGVyaW9kXG4gICAgdmVsb2NpdHkgPSBsYXN0LnZlbG9jaXR5O1xuICAgIHZlbG9jaXR5WCA9IGxhc3QudmVsb2NpdHlYO1xuICAgIHZlbG9jaXR5WSA9IGxhc3QudmVsb2NpdHlZO1xuICAgIGRpcmVjdGlvbiA9IGxhc3QuZGlyZWN0aW9uO1xuICB9XG5cbiAgaW5wdXQudmVsb2NpdHkgPSB2ZWxvY2l0eTtcbiAgaW5wdXQudmVsb2NpdHlYID0gdmVsb2NpdHlYO1xuICBpbnB1dC52ZWxvY2l0eVkgPSB2ZWxvY2l0eVk7XG4gIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbn1cblxuLyoqXG4qIEBwcml2YXRlXG4gKiBleHRlbmQgdGhlIGRhdGEgd2l0aCBzb21lIHVzYWJsZSBwcm9wZXJ0aWVzIGxpa2Ugc2NhbGUsIHJvdGF0ZSwgdmVsb2NpdHkgZXRjXG4gKiBAcGFyYW0ge09iamVjdH0gbWFuYWdlclxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cblxuZnVuY3Rpb24gY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCkge1xuICB2YXIgc2Vzc2lvbiA9IG1hbmFnZXIuc2Vzc2lvbjtcbiAgdmFyIHBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnM7XG4gIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDsgLy8gc3RvcmUgdGhlIGZpcnN0IGlucHV0IHRvIGNhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYW5kIGRpcmVjdGlvblxuXG4gIGlmICghc2Vzc2lvbi5maXJzdElucHV0KSB7XG4gICAgc2Vzc2lvbi5maXJzdElucHV0ID0gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpO1xuICB9IC8vIHRvIGNvbXB1dGUgc2NhbGUgYW5kIHJvdGF0aW9uIHdlIG5lZWQgdG8gc3RvcmUgdGhlIG11bHRpcGxlIHRvdWNoZXNcblxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA+IDEgJiYgIXNlc3Npb24uZmlyc3RNdWx0aXBsZSkge1xuICAgIHNlc3Npb24uZmlyc3RNdWx0aXBsZSA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSBlbHNlIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHNlc3Npb24uZmlyc3RNdWx0aXBsZSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGZpcnN0SW5wdXQgPSBzZXNzaW9uLmZpcnN0SW5wdXQsXG4gICAgICBmaXJzdE11bHRpcGxlID0gc2Vzc2lvbi5maXJzdE11bHRpcGxlO1xuICB2YXIgb2Zmc2V0Q2VudGVyID0gZmlyc3RNdWx0aXBsZSA/IGZpcnN0TXVsdGlwbGUuY2VudGVyIDogZmlyc3RJbnB1dC5jZW50ZXI7XG4gIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXIgPSBnZXRDZW50ZXIocG9pbnRlcnMpO1xuICBpbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgaW5wdXQuZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gZmlyc3RJbnB1dC50aW1lU3RhbXA7XG4gIGlucHV0LmFuZ2xlID0gZ2V0QW5nbGUob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICBpbnB1dC5kaXN0YW5jZSA9IGdldERpc3RhbmNlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgY29tcHV0ZURlbHRhWFkoc2Vzc2lvbiwgaW5wdXQpO1xuICBpbnB1dC5vZmZzZXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICB2YXIgb3ZlcmFsbFZlbG9jaXR5ID0gZ2V0VmVsb2NpdHkoaW5wdXQuZGVsdGFUaW1lLCBpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVggPSBvdmVyYWxsVmVsb2NpdHkueDtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WSA9IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHkgPSBhYnMob3ZlcmFsbFZlbG9jaXR5LngpID4gYWJzKG92ZXJhbGxWZWxvY2l0eS55KSA/IG92ZXJhbGxWZWxvY2l0eS54IDogb3ZlcmFsbFZlbG9jaXR5Lnk7XG4gIGlucHV0LnNjYWxlID0gZmlyc3RNdWx0aXBsZSA/IGdldFNjYWxlKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDE7XG4gIGlucHV0LnJvdGF0aW9uID0gZmlyc3RNdWx0aXBsZSA/IGdldFJvdGF0aW9uKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDA7XG4gIGlucHV0Lm1heFBvaW50ZXJzID0gIXNlc3Npb24ucHJldklucHV0ID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogaW5wdXQucG9pbnRlcnMubGVuZ3RoID4gc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnMgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycztcbiAgY29tcHV0ZUludGVydmFsSW5wdXREYXRhKHNlc3Npb24sIGlucHV0KTsgLy8gZmluZCB0aGUgY29ycmVjdCB0YXJnZXRcblxuICB2YXIgdGFyZ2V0ID0gbWFuYWdlci5lbGVtZW50O1xuICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgdmFyIHNyY0V2ZW50VGFyZ2V0O1xuXG4gIGlmIChzcmNFdmVudC5jb21wb3NlZFBhdGgpIHtcbiAgICBzcmNFdmVudFRhcmdldCA9IHNyY0V2ZW50LmNvbXBvc2VkUGF0aCgpWzBdO1xuICB9IGVsc2UgaWYgKHNyY0V2ZW50LnBhdGgpIHtcbiAgICBzcmNFdmVudFRhcmdldCA9IHNyY0V2ZW50LnBhdGhbMF07XG4gIH0gZWxzZSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC50YXJnZXQ7XG4gIH1cblxuICBpZiAoaGFzUGFyZW50KHNyY0V2ZW50VGFyZ2V0LCB0YXJnZXQpKSB7XG4gICAgdGFyZ2V0ID0gc3JjRXZlbnRUYXJnZXQ7XG4gIH1cblxuICBpbnB1dC50YXJnZXQgPSB0YXJnZXQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGhhbmRsZSBpbnB1dCBldmVudHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50VHlwZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cblxuZnVuY3Rpb24gaW5wdXRIYW5kbGVyKG1hbmFnZXIsIGV2ZW50VHlwZSwgaW5wdXQpIHtcbiAgdmFyIHBvaW50ZXJzTGVuID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoO1xuICB2YXIgY2hhbmdlZFBvaW50ZXJzTGVuID0gaW5wdXQuY2hhbmdlZFBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGlzRmlyc3QgPSBldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMDtcbiAgdmFyIGlzRmluYWwgPSBldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiBwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMDtcbiAgaW5wdXQuaXNGaXJzdCA9ICEhaXNGaXJzdDtcbiAgaW5wdXQuaXNGaW5hbCA9ICEhaXNGaW5hbDtcblxuICBpZiAoaXNGaXJzdCkge1xuICAgIG1hbmFnZXIuc2Vzc2lvbiA9IHt9O1xuICB9IC8vIHNvdXJjZSBldmVudCBpcyB0aGUgbm9ybWFsaXplZCB2YWx1ZSBvZiB0aGUgZG9tRXZlbnRzXG4gIC8vIGxpa2UgJ3RvdWNoc3RhcnQsIG1vdXNldXAsIHBvaW50ZXJkb3duJ1xuXG5cbiAgaW5wdXQuZXZlbnRUeXBlID0gZXZlbnRUeXBlOyAvLyBjb21wdXRlIHNjYWxlLCByb3RhdGlvbiBldGNcblxuICBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KTsgLy8gZW1pdCBzZWNyZXQgZXZlbnRcblxuICBtYW5hZ2VyLmVtaXQoJ2hhbW1lci5pbnB1dCcsIGlucHV0KTtcbiAgbWFuYWdlci5yZWNvZ25pemUoaW5wdXQpO1xuICBtYW5hZ2VyLnNlc3Npb24ucHJldklucHV0ID0gaW5wdXQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNwbGl0IHN0cmluZyBvbiB3aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7QXJyYXl9IHdvcmRzXG4gKi9cbmZ1bmN0aW9uIHNwbGl0U3RyKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0oKS5zcGxpdCgvXFxzKy9nKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogYWRkRXZlbnRMaXN0ZW5lciB3aXRoIG11bHRpcGxlIGV2ZW50cyBhdCBvbmNlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICovXG5cbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXJzKHRhcmdldCwgdHlwZXMsIGhhbmRsZXIpIHtcbiAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogcmVtb3ZlRXZlbnRMaXN0ZW5lciB3aXRoIG11bHRpcGxlIGV2ZW50cyBhdCBvbmNlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICovXG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRhcmdldCwgdHlwZXMsIGhhbmRsZXIpIHtcbiAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSB3aW5kb3cgb2JqZWN0IG9mIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtEb2N1bWVudFZpZXd8V2luZG93fVxuICovXG5mdW5jdGlvbiBnZXRXaW5kb3dGb3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGRvYyA9IGVsZW1lbnQub3duZXJEb2N1bWVudCB8fCBlbGVtZW50O1xuICByZXR1cm4gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3cgfHwgd2luZG93O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjcmVhdGUgbmV3IGlucHV0IHR5cGUgbWFuYWdlclxuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0lucHV0fVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gSW5wdXQobWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5lbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbWFuYWdlci5vcHRpb25zLmlucHV0VGFyZ2V0OyAvLyBzbWFsbGVyIHdyYXBwZXIgYXJvdW5kIHRoZSBoYW5kbGVyLCBmb3IgdGhlIHNjb3BlIGFuZCB0aGUgZW5hYmxlZCBzdGF0ZSBvZiB0aGUgbWFuYWdlcixcbiAgICAvLyBzbyB3aGVuIGRpc2FibGVkIHRoZSBpbnB1dCBldmVudHMgYXJlIGNvbXBsZXRlbHkgYnlwYXNzZWQuXG5cbiAgICB0aGlzLmRvbUhhbmRsZXIgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgIGlmIChib29sT3JGbihtYW5hZ2VyLm9wdGlvbnMuZW5hYmxlLCBbbWFuYWdlcl0pKSB7XG4gICAgICAgIHNlbGYuaGFuZGxlcihldik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuaW5pdCgpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzaG91bGQgaGFuZGxlIHRoZSBpbnB1dEV2ZW50IGRhdGEgYW5kIHRyaWdnZXIgdGhlIGNhbGxiYWNrXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoKSB7fTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5pbml0ID0gZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB0aGlzLmV2RWwgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiBhZGRFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIGFkZEV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHVuYmluZCB0aGUgZXZlbnRzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZXZFbCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLmVsZW1lbnQsIHRoaXMuZXZFbCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2VGFyZ2V0ICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMudGFyZ2V0LCB0aGlzLmV2VGFyZ2V0LCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZXaW4gJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICB9O1xuXG4gIHJldHVybiBJbnB1dDtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZmluZCBpZiBhIGFycmF5IGNvbnRhaW5zIHRoZSBvYmplY3QgdXNpbmcgaW5kZXhPZiBvciBhIHNpbXBsZSBwb2x5RmlsbFxuICogQHBhcmFtIHtBcnJheX0gc3JjXG4gKiBAcGFyYW0ge1N0cmluZ30gZmluZFxuICogQHBhcmFtIHtTdHJpbmd9IFtmaW5kQnlLZXldXG4gKiBAcmV0dXJuIHtCb29sZWFufE51bWJlcn0gZmFsc2Ugd2hlbiBub3QgZm91bmQsIG9yIHRoZSBpbmRleFxuICovXG5mdW5jdGlvbiBpbkFycmF5KHNyYywgZmluZCwgZmluZEJ5S2V5KSB7XG4gIGlmIChzcmMuaW5kZXhPZiAmJiAhZmluZEJ5S2V5KSB7XG4gICAgcmV0dXJuIHNyYy5pbmRleE9mKGZpbmQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgICAgaWYgKGZpbmRCeUtleSAmJiBzcmNbaV1bZmluZEJ5S2V5XSA9PSBmaW5kIHx8ICFmaW5kQnlLZXkgJiYgc3JjW2ldID09PSBmaW5kKSB7XG4gICAgICAgIC8vIGRvIG5vdCB1c2UgPT09IGhlcmUsIHRlc3QgZmFpbHNcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cbn1cblxudmFyIFBPSU5URVJfSU5QVVRfTUFQID0ge1xuICBwb2ludGVyZG93bjogSU5QVVRfU1RBUlQsXG4gIHBvaW50ZXJtb3ZlOiBJTlBVVF9NT1ZFLFxuICBwb2ludGVydXA6IElOUFVUX0VORCxcbiAgcG9pbnRlcmNhbmNlbDogSU5QVVRfQ0FOQ0VMLFxuICBwb2ludGVyb3V0OiBJTlBVVF9DQU5DRUxcbn07IC8vIGluIElFMTAgdGhlIHBvaW50ZXIgdHlwZXMgaXMgZGVmaW5lZCBhcyBhbiBlbnVtXG5cbnZhciBJRTEwX1BPSU5URVJfVFlQRV9FTlVNID0ge1xuICAyOiBJTlBVVF9UWVBFX1RPVUNILFxuICAzOiBJTlBVVF9UWVBFX1BFTixcbiAgNDogSU5QVVRfVFlQRV9NT1VTRSxcbiAgNTogSU5QVVRfVFlQRV9LSU5FQ1QgLy8gc2VlIGh0dHBzOi8vdHdpdHRlci5jb20vamFjb2Jyb3NzaS9zdGF0dXMvNDgwNTk2NDM4NDg5ODkwODE2XG5cbn07XG52YXIgUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyA9ICdwb2ludGVyZG93bic7XG52YXIgUE9JTlRFUl9XSU5ET1dfRVZFTlRTID0gJ3BvaW50ZXJtb3ZlIHBvaW50ZXJ1cCBwb2ludGVyY2FuY2VsJzsgLy8gSUUxMCBoYXMgcHJlZml4ZWQgc3VwcG9ydCwgYW5kIGNhc2Utc2Vuc2l0aXZlXG5cbmlmICh3aW4uTVNQb2ludGVyRXZlbnQgJiYgIXdpbi5Qb2ludGVyRXZlbnQpIHtcbiAgUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyA9ICdNU1BvaW50ZXJEb3duJztcbiAgUE9JTlRFUl9XSU5ET1dfRVZFTlRTID0gJ01TUG9pbnRlck1vdmUgTVNQb2ludGVyVXAgTVNQb2ludGVyQ2FuY2VsJztcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqIFBvaW50ZXIgZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxuXG52YXIgUG9pbnRlckV2ZW50SW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShQb2ludGVyRXZlbnRJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBQb2ludGVyRXZlbnRJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG4gICAgcHJvdG8uZXZFbCA9IFBPSU5URVJfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBQT0lOVEVSX1dJTkRPV19FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0b3JlID0gX3RoaXMubWFuYWdlci5zZXNzaW9uLnBvaW50ZXJFdmVudHMgPSBbXTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhbmRsZSBtb3VzZSBldmVudHNcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFBvaW50ZXJFdmVudElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgc3RvcmUgPSB0aGlzLnN0b3JlO1xuICAgIHZhciByZW1vdmVQb2ludGVyID0gZmFsc2U7XG4gICAgdmFyIGV2ZW50VHlwZU5vcm1hbGl6ZWQgPSBldi50eXBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnbXMnLCAnJyk7XG4gICAgdmFyIGV2ZW50VHlwZSA9IFBPSU5URVJfSU5QVVRfTUFQW2V2ZW50VHlwZU5vcm1hbGl6ZWRdO1xuICAgIHZhciBwb2ludGVyVHlwZSA9IElFMTBfUE9JTlRFUl9UWVBFX0VOVU1bZXYucG9pbnRlclR5cGVdIHx8IGV2LnBvaW50ZXJUeXBlO1xuICAgIHZhciBpc1RvdWNoID0gcG9pbnRlclR5cGUgPT09IElOUFVUX1RZUEVfVE9VQ0g7IC8vIGdldCBpbmRleCBvZiB0aGUgZXZlbnQgaW4gdGhlIHN0b3JlXG5cbiAgICB2YXIgc3RvcmVJbmRleCA9IGluQXJyYXkoc3RvcmUsIGV2LnBvaW50ZXJJZCwgJ3BvaW50ZXJJZCcpOyAvLyBzdGFydCBhbmQgbW91c2UgbXVzdCBiZSBkb3duXG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgKGV2LmJ1dHRvbiA9PT0gMCB8fCBpc1RvdWNoKSkge1xuICAgICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICAgIHN0b3JlLnB1c2goZXYpO1xuICAgICAgICBzdG9yZUluZGV4ID0gc3RvcmUubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICByZW1vdmVQb2ludGVyID0gdHJ1ZTtcbiAgICB9IC8vIGl0IG5vdCBmb3VuZCwgc28gdGhlIHBvaW50ZXIgaGFzbid0IGJlZW4gZG93biAoc28gaXQncyBwcm9iYWJseSBhIGhvdmVyKVxuXG5cbiAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHVwZGF0ZSB0aGUgZXZlbnQgaW4gdGhlIHN0b3JlXG5cblxuICAgIHN0b3JlW3N0b3JlSW5kZXhdID0gZXY7XG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIGV2ZW50VHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHN0b3JlLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IHBvaW50ZXJUeXBlLFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG5cbiAgICBpZiAocmVtb3ZlUG9pbnRlcikge1xuICAgICAgLy8gcmVtb3ZlIGZyb20gdGhlIHN0b3JlXG4gICAgICBzdG9yZS5zcGxpY2Uoc3RvcmVJbmRleCwgMSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBQb2ludGVyRXZlbnRJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjb252ZXJ0IGFycmF5LWxpa2Ugb2JqZWN0cyB0byByZWFsIGFycmF5c1xuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiB0b0FycmF5KG9iaikge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwob2JqLCAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdW5pcXVlIGFycmF5IHdpdGggb2JqZWN0cyBiYXNlZCBvbiBhIGtleSAobGlrZSAnaWQnKSBvciBqdXN0IGJ5IHRoZSBhcnJheSdzIHZhbHVlXG4gKiBAcGFyYW0ge0FycmF5fSBzcmMgW3tpZDoxfSx7aWQ6Mn0se2lkOjF9XVxuICogQHBhcmFtIHtTdHJpbmd9IFtrZXldXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtzb3J0PUZhbHNlXVxuICogQHJldHVybnMge0FycmF5fSBbe2lkOjF9LHtpZDoyfV1cbiAqL1xuXG5mdW5jdGlvbiB1bmlxdWVBcnJheShzcmMsIGtleSwgc29ydCkge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICB2YXIgdmFsdWVzID0gW107XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICB2YXIgdmFsID0ga2V5ID8gc3JjW2ldW2tleV0gOiBzcmNbaV07XG5cbiAgICBpZiAoaW5BcnJheSh2YWx1ZXMsIHZhbCkgPCAwKSB7XG4gICAgICByZXN1bHRzLnB1c2goc3JjW2ldKTtcbiAgICB9XG5cbiAgICB2YWx1ZXNbaV0gPSB2YWw7XG4gICAgaSsrO1xuICB9XG5cbiAgaWYgKHNvcnQpIHtcbiAgICBpZiAoIWtleSkge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhW2tleV0gPiBiW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxudmFyIFRPVUNIX0lOUFVUX01BUCA9IHtcbiAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gIHRvdWNobW92ZTogSU5QVVRfTU9WRSxcbiAgdG91Y2hlbmQ6IElOUFVUX0VORCxcbiAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcbnZhciBUT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIE11bHRpLXVzZXIgdG91Y2ggZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIFRvdWNoSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShUb3VjaElucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIFRvdWNoSW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgVG91Y2hJbnB1dC5wcm90b3R5cGUuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy50YXJnZXRJZHMgPSB7fTsgLy8gdGhpcy5ldlRhcmdldCA9IFRPVUNIX1RBUkdFVF9FVkVOVFM7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVG91Y2hJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHR5cGUgPSBUT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07XG4gICAgdmFyIHRvdWNoZXMgPSBnZXRUb3VjaGVzLmNhbGwodGhpcywgZXYsIHR5cGUpO1xuXG4gICAgaWYgKCF0b3VjaGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIHR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiB0b3VjaGVzWzFdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gVG91Y2hJbnB1dDtcbn0oSW5wdXQpO1xuXG5mdW5jdGlvbiBnZXRUb3VjaGVzKGV2LCB0eXBlKSB7XG4gIHZhciBhbGxUb3VjaGVzID0gdG9BcnJheShldi50b3VjaGVzKTtcbiAgdmFyIHRhcmdldElkcyA9IHRoaXMudGFyZ2V0SWRzOyAvLyB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIHRvdWNoLCB0aGUgcHJvY2VzcyBjYW4gYmUgc2ltcGxpZmllZFxuXG4gIGlmICh0eXBlICYgKElOUFVUX1NUQVJUIHwgSU5QVVRfTU9WRSkgJiYgYWxsVG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICB0YXJnZXRJZHNbYWxsVG91Y2hlc1swXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgcmV0dXJuIFthbGxUb3VjaGVzLCBhbGxUb3VjaGVzXTtcbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgdGFyZ2V0VG91Y2hlcztcbiAgdmFyIGNoYW5nZWRUb3VjaGVzID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkVGFyZ2V0VG91Y2hlcyA9IFtdO1xuICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7IC8vIGdldCB0YXJnZXQgdG91Y2hlcyBmcm9tIHRvdWNoZXNcblxuICB0YXJnZXRUb3VjaGVzID0gYWxsVG91Y2hlcy5maWx0ZXIoZnVuY3Rpb24gKHRvdWNoKSB7XG4gICAgcmV0dXJuIGhhc1BhcmVudCh0b3VjaC50YXJnZXQsIHRhcmdldCk7XG4gIH0pOyAvLyBjb2xsZWN0IHRvdWNoZXNcblxuICBpZiAodHlwZSA9PT0gSU5QVVRfU1RBUlQpIHtcbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgdGFyZ2V0VG91Y2hlcy5sZW5ndGgpIHtcbiAgICAgIHRhcmdldElkc1t0YXJnZXRUb3VjaGVzW2ldLmlkZW50aWZpZXJdID0gdHJ1ZTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gLy8gZmlsdGVyIGNoYW5nZWQgdG91Y2hlcyB0byBvbmx5IGNvbnRhaW4gdG91Y2hlcyB0aGF0IGV4aXN0IGluIHRoZSBjb2xsZWN0ZWQgdGFyZ2V0IGlkc1xuXG5cbiAgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBjaGFuZ2VkVG91Y2hlcy5sZW5ndGgpIHtcbiAgICBpZiAodGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdKSB7XG4gICAgICBjaGFuZ2VkVGFyZ2V0VG91Y2hlcy5wdXNoKGNoYW5nZWRUb3VjaGVzW2ldKTtcbiAgICB9IC8vIGNsZWFudXAgcmVtb3ZlZCB0b3VjaGVzXG5cblxuICAgIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXRJZHNbY2hhbmdlZFRvdWNoZXNbaV0uaWRlbnRpZmllcl07XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkVGFyZ2V0VG91Y2hlcy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gWy8vIG1lcmdlIHRhcmdldFRvdWNoZXMgd2l0aCBjaGFuZ2VkVGFyZ2V0VG91Y2hlcyBzbyBpdCBjb250YWlucyBBTEwgdG91Y2hlcywgaW5jbHVkaW5nICdlbmQnIGFuZCAnY2FuY2VsJ1xuICB1bmlxdWVBcnJheSh0YXJnZXRUb3VjaGVzLmNvbmNhdChjaGFuZ2VkVGFyZ2V0VG91Y2hlcyksICdpZGVudGlmaWVyJywgdHJ1ZSksIGNoYW5nZWRUYXJnZXRUb3VjaGVzXTtcbn1cblxudmFyIE1PVVNFX0lOUFVUX01BUCA9IHtcbiAgbW91c2Vkb3duOiBJTlBVVF9TVEFSVCxcbiAgbW91c2Vtb3ZlOiBJTlBVVF9NT1ZFLFxuICBtb3VzZXVwOiBJTlBVVF9FTkRcbn07XG52YXIgTU9VU0VfRUxFTUVOVF9FVkVOVFMgPSAnbW91c2Vkb3duJztcbnZhciBNT1VTRV9XSU5ET1dfRVZFTlRTID0gJ21vdXNlbW92ZSBtb3VzZXVwJztcbi8qKlxuICogQHByaXZhdGVcbiAqIE1vdXNlIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBNb3VzZUlucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IE1vdXNlSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBNT1VTRV9FTEVNRU5UX0VWRU5UUztcbiAgICBwcm90by5ldldpbiA9IE1PVVNFX1dJTkRPV19FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnByZXNzZWQgPSBmYWxzZTsgLy8gbW91c2Vkb3duIHN0YXRlXG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhbmRsZSBtb3VzZSBldmVudHNcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciBldmVudFR5cGUgPSBNT1VTRV9JTlBVVF9NQVBbZXYudHlwZV07IC8vIG9uIHN0YXJ0IHdlIHdhbnQgdG8gaGF2ZSB0aGUgbGVmdCBtb3VzZSBidXR0b24gZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIGV2LmJ1dHRvbiA9PT0gMCkge1xuICAgICAgdGhpcy5wcmVzc2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfTU9WRSAmJiBldi53aGljaCAhPT0gMSkge1xuICAgICAgZXZlbnRUeXBlID0gSU5QVVRfRU5EO1xuICAgIH0gLy8gbW91c2UgbXVzdCBiZSBkb3duXG5cblxuICAgIGlmICghdGhpcy5wcmVzc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIGV2ZW50VHlwZSwge1xuICAgICAgcG9pbnRlcnM6IFtldl0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IFtldl0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9NT1VTRSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNb3VzZUlucHV0O1xufShJbnB1dCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIENvbWJpbmVkIHRvdWNoIGFuZCBtb3VzZSBpbnB1dFxuICpcbiAqIFRvdWNoIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGVuIG1vdXNlLCBhbmQgd2hpbGUgdG91Y2hpbmcgbm8gbW91c2UgZXZlbnRzIGFyZSBhbGxvd2VkLlxuICogVGhpcyBiZWNhdXNlIHRvdWNoIGRldmljZXMgYWxzbyBlbWl0IG1vdXNlIGV2ZW50cyB3aGlsZSBkb2luZyBhIHRvdWNoLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgREVEVVBfVElNRU9VVCA9IDI1MDA7XG52YXIgREVEVVBfRElTVEFOQ0UgPSAyNTtcblxuZnVuY3Rpb24gc2V0TGFzdFRvdWNoKGV2ZW50RGF0YSkge1xuICB2YXIgX2V2ZW50RGF0YSRjaGFuZ2VkUG9pID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVycyxcbiAgICAgIHRvdWNoID0gX2V2ZW50RGF0YSRjaGFuZ2VkUG9pWzBdO1xuXG4gIGlmICh0b3VjaC5pZGVudGlmaWVyID09PSB0aGlzLnByaW1hcnlUb3VjaCkge1xuICAgIHZhciBsYXN0VG91Y2ggPSB7XG4gICAgICB4OiB0b3VjaC5jbGllbnRYLFxuICAgICAgeTogdG91Y2guY2xpZW50WVxuICAgIH07XG4gICAgdmFyIGx0cyA9IHRoaXMubGFzdFRvdWNoZXM7XG4gICAgdGhpcy5sYXN0VG91Y2hlcy5wdXNoKGxhc3RUb3VjaCk7XG5cbiAgICB2YXIgcmVtb3ZlTGFzdFRvdWNoID0gZnVuY3Rpb24gcmVtb3ZlTGFzdFRvdWNoKCkge1xuICAgICAgdmFyIGkgPSBsdHMuaW5kZXhPZihsYXN0VG91Y2gpO1xuXG4gICAgICBpZiAoaSA+IC0xKSB7XG4gICAgICAgIGx0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNldFRpbWVvdXQocmVtb3ZlTGFzdFRvdWNoLCBERURVUF9USU1FT1VUKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmRUb3VjaGVzKGV2ZW50VHlwZSwgZXZlbnREYXRhKSB7XG4gIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgIHRoaXMucHJpbWFyeVRvdWNoID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVyc1swXS5pZGVudGlmaWVyO1xuICAgIHNldExhc3RUb3VjaC5jYWxsKHRoaXMsIGV2ZW50RGF0YSk7XG4gIH0gZWxzZSBpZiAoZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3ludGhldGljRXZlbnQoZXZlbnREYXRhKSB7XG4gIHZhciB4ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFg7XG4gIHZhciB5ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxhc3RUb3VjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHQgPSB0aGlzLmxhc3RUb3VjaGVzW2ldO1xuICAgIHZhciBkeCA9IE1hdGguYWJzKHggLSB0LngpO1xuICAgIHZhciBkeSA9IE1hdGguYWJzKHkgLSB0LnkpO1xuXG4gICAgaWYgKGR4IDw9IERFRFVQX0RJU1RBTkNFICYmIGR5IDw9IERFRFVQX0RJU1RBTkNFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBUb3VjaE1vdXNlSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICB2YXIgVG91Y2hNb3VzZUlucHV0ID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoX0lucHV0KSB7XG4gICAgX2luaGVyaXRzTG9vc2UoVG91Y2hNb3VzZUlucHV0LCBfSW5wdXQpO1xuXG4gICAgZnVuY3Rpb24gVG91Y2hNb3VzZUlucHV0KF9tYW5hZ2VyLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9JbnB1dC5jYWxsKHRoaXMsIF9tYW5hZ2VyLCBjYWxsYmFjaykgfHwgdGhpcztcblxuICAgICAgX3RoaXMuaGFuZGxlciA9IGZ1bmN0aW9uIChtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpIHtcbiAgICAgICAgdmFyIGlzVG91Y2ggPSBpbnB1dERhdGEucG9pbnRlclR5cGUgPT09IElOUFVUX1RZUEVfVE9VQ0g7XG4gICAgICAgIHZhciBpc01vdXNlID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX01PVVNFO1xuXG4gICAgICAgIGlmIChpc01vdXNlICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcy5maXJlc1RvdWNoRXZlbnRzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIHdoZW4gd2UncmUgaW4gYSB0b3VjaCBldmVudCwgcmVjb3JkIHRvdWNoZXMgdG8gIGRlLWR1cGUgc3ludGhldGljIG1vdXNlIGV2ZW50XG5cblxuICAgICAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgICAgIHJlY29yZFRvdWNoZXMuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgaW5wdXRFdmVudCwgaW5wdXREYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01vdXNlICYmIGlzU3ludGhldGljRXZlbnQuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgaW5wdXREYXRhKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLmNhbGxiYWNrKG1hbmFnZXIsIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy50b3VjaCA9IG5ldyBUb3VjaElucHV0KF90aGlzLm1hbmFnZXIsIF90aGlzLmhhbmRsZXIpO1xuICAgICAgX3RoaXMubW91c2UgPSBuZXcgTW91c2VJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLnByaW1hcnlUb3VjaCA9IG51bGw7XG4gICAgICBfdGhpcy5sYXN0VG91Y2hlcyA9IFtdO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIGhhbmRsZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzXG4gICAgICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXRFdmVudFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICAgKi9cblxuXG4gICAgdmFyIF9wcm90byA9IFRvdWNoTW91c2VJbnB1dC5wcm90b3R5cGU7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIHJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXJzXG4gICAgICovXG4gICAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdGhpcy50b3VjaC5kZXN0cm95KCk7XG4gICAgICB0aGlzLm1vdXNlLmRlc3Ryb3koKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFRvdWNoTW91c2VJbnB1dDtcbiAgfShJbnB1dCk7XG5cbiAgcmV0dXJuIFRvdWNoTW91c2VJbnB1dDtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIGNhbGxlZCBieSB0aGUgTWFuYWdlciBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVJbnB1dEluc3RhbmNlKG1hbmFnZXIpIHtcbiAgdmFyIFR5cGU7IC8vIGxldCBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgdmFyIGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICBpZiAoaW5wdXRDbGFzcykge1xuICAgIFR5cGUgPSBpbnB1dENsYXNzO1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMpIHtcbiAgICBUeXBlID0gUG9pbnRlckV2ZW50SW5wdXQ7XG4gIH0gZWxzZSBpZiAoU1VQUE9SVF9PTkxZX1RPVUNIKSB7XG4gICAgVHlwZSA9IFRvdWNoSW5wdXQ7XG4gIH0gZWxzZSBpZiAoIVNVUFBPUlRfVE9VQ0gpIHtcbiAgICBUeXBlID0gTW91c2VJbnB1dDtcbiAgfSBlbHNlIHtcbiAgICBUeXBlID0gVG91Y2hNb3VzZUlucHV0O1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlKG1hbmFnZXIsIGlucHV0SGFuZGxlcik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGlmIHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSwgd2Ugd2FudCB0byBleGVjdXRlIHRoZSBmbiBvbiBlYWNoIGVudHJ5XG4gKiBpZiBpdCBhaW50IGFuIGFycmF5IHdlIGRvbid0IHdhbnQgdG8gZG8gYSB0aGluZy5cbiAqIHRoaXMgaXMgdXNlZCBieSBhbGwgdGhlIG1ldGhvZHMgdGhhdCBhY2NlcHQgYSBzaW5nbGUgYW5kIGFycmF5IGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfEFycmF5fSBhcmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBmblxuICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cblxuZnVuY3Rpb24gaW52b2tlQXJyYXlBcmcoYXJnLCBmbiwgY29udGV4dCkge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgZWFjaChhcmcsIGNvbnRleHRbZm5dLCBjb250ZXh0KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIFNUQVRFX1BPU1NJQkxFID0gMTtcbnZhciBTVEFURV9CRUdBTiA9IDI7XG52YXIgU1RBVEVfQ0hBTkdFRCA9IDQ7XG52YXIgU1RBVEVfRU5ERUQgPSA4O1xudmFyIFNUQVRFX1JFQ09HTklaRUQgPSBTVEFURV9FTkRFRDtcbnZhciBTVEFURV9DQU5DRUxMRUQgPSAxNjtcbnZhciBTVEFURV9GQUlMRUQgPSAzMjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IGEgdW5pcXVlIGlkXG4gKiBAcmV0dXJucyB7bnVtYmVyfSB1bmlxdWVJZFxuICovXG52YXIgX3VuaXF1ZUlkID0gMTtcbmZ1bmN0aW9uIHVuaXF1ZUlkKCkge1xuICByZXR1cm4gX3VuaXF1ZUlkKys7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHJlY29nbml6ZXIgYnkgbmFtZSBpZiBpdCBpcyBib3VuZCB0byBhIG1hbmFnZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IG90aGVyUmVjb2duaXplclxuICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gKiBAcmV0dXJucyB7UmVjb2duaXplcn1cbiAqL1xuZnVuY3Rpb24gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHJlY29nbml6ZXIpIHtcbiAgdmFyIG1hbmFnZXIgPSByZWNvZ25pemVyLm1hbmFnZXI7XG5cbiAgaWYgKG1hbmFnZXIpIHtcbiAgICByZXR1cm4gbWFuYWdlci5nZXQob3RoZXJSZWNvZ25pemVyKTtcbiAgfVxuXG4gIHJldHVybiBvdGhlclJlY29nbml6ZXI7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVzYWJsZSBzdHJpbmcsIHVzZWQgYXMgZXZlbnQgcG9zdGZpeFxuICogQHBhcmFtIHtjb25zdGFudH0gc3RhdGVcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0YXRlXG4gKi9cblxuZnVuY3Rpb24gc3RhdGVTdHIoc3RhdGUpIHtcbiAgaWYgKHN0YXRlICYgU1RBVEVfQ0FOQ0VMTEVEKSB7XG4gICAgcmV0dXJuICdjYW5jZWwnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfRU5ERUQpIHtcbiAgICByZXR1cm4gJ2VuZCc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9DSEFOR0VEKSB7XG4gICAgcmV0dXJuICdtb3ZlJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0JFR0FOKSB7XG4gICAgcmV0dXJuICdzdGFydCc7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXIgZmxvdyBleHBsYWluZWQ7ICpcbiAqIEFsbCByZWNvZ25pemVycyBoYXZlIHRoZSBpbml0aWFsIHN0YXRlIG9mIFBPU1NJQkxFIHdoZW4gYSBpbnB1dCBzZXNzaW9uIHN0YXJ0cy5cbiAqIFRoZSBkZWZpbml0aW9uIG9mIGEgaW5wdXQgc2Vzc2lvbiBpcyBmcm9tIHRoZSBmaXJzdCBpbnB1dCB1bnRpbCB0aGUgbGFzdCBpbnB1dCwgd2l0aCBhbGwgaXQncyBtb3ZlbWVudCBpbiBpdC4gKlxuICogRXhhbXBsZSBzZXNzaW9uIGZvciBtb3VzZS1pbnB1dDogbW91c2Vkb3duIC0+IG1vdXNlbW92ZSAtPiBtb3VzZXVwXG4gKlxuICogT24gZWFjaCByZWNvZ25pemluZyBjeWNsZSAoc2VlIE1hbmFnZXIucmVjb2duaXplKSB0aGUgLnJlY29nbml6ZSgpIG1ldGhvZCBpcyBleGVjdXRlZFxuICogd2hpY2ggZGV0ZXJtaW5lcyB3aXRoIHN0YXRlIGl0IHNob3VsZCBiZS5cbiAqXG4gKiBJZiB0aGUgcmVjb2duaXplciBoYXMgdGhlIHN0YXRlIEZBSUxFRCwgQ0FOQ0VMTEVEIG9yIFJFQ09HTklaRUQgKGVxdWFscyBFTkRFRCksIGl0IGlzIHJlc2V0IHRvXG4gKiBQT1NTSUJMRSB0byBnaXZlIGl0IGFub3RoZXIgY2hhbmdlIG9uIHRoZSBuZXh0IGN5Y2xlLlxuICpcbiAqICAgICAgICAgICAgICAgUG9zc2libGVcbiAqICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICArLS0tLS0rLS0tLS0tLS0tLS0tLS0tK1xuICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICArLS0tLS0rLS0tLS0rICAgICAgICAgICAgICAgfFxuICogICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfFxuICogICBGYWlsZWQgICAgICBDYW5jZWxsZWQgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLStcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICBSZWNvZ25pemVkICAgICAgIEJlZ2FuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRlZC9SZWNvZ25pemVkXG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUmVjb2duaXplclxuICogRXZlcnkgcmVjb2duaXplciBuZWVkcyB0byBleHRlbmQgZnJvbSB0aGlzIGNsYXNzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5cbnZhciBSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHtcbiAgICAgIGVuYWJsZTogdHJ1ZVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHRoaXMuaWQgPSB1bmlxdWVJZCgpO1xuICAgIHRoaXMubWFuYWdlciA9IG51bGw7IC8vIGRlZmF1bHQgaXMgZW5hYmxlIHRydWVcblxuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcbiAgICB0aGlzLnNpbXVsdGFuZW91cyA9IHt9O1xuICAgIHRoaXMucmVxdWlyZUZhaWwgPSBbXTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7UmVjb2duaXplcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gYWxzbyB1cGRhdGUgdGhlIHRvdWNoQWN0aW9uLCBpbiBjYXNlIHNvbWV0aGluZyBjaGFuZ2VkIGFib3V0IHRoZSBkaXJlY3Rpb25zL2VuYWJsZWQgc3RhdGVcblxuICAgIHRoaXMubWFuYWdlciAmJiB0aGlzLm1hbmFnZXIudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplci5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplV2l0aCA9IGZ1bmN0aW9uIHJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ3JlY29nbml6ZVdpdGgnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHNpbXVsdGFuZW91cyA9IHRoaXMuc2ltdWx0YW5lb3VzO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmICghc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF0pIHtcbiAgICAgIHNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdID0gb3RoZXJSZWNvZ25pemVyO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlY29nbml6ZVdpdGgodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBkcm9wIHRoZSBzaW11bHRhbmVvdXMgbGluay4gaXQgZG9lc250IHJlbW92ZSB0aGUgbGluayBvbiB0aGUgb3RoZXIgcmVjb2duaXplci5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8uZHJvcFJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiBkcm9wUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAnZHJvcFJlY29nbml6ZVdpdGgnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuICAgIGRlbGV0ZSB0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplciBjYW4gb25seSBydW4gd2hlbiBhbiBvdGhlciBpcyBmYWlsaW5nXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlcXVpcmVGYWlsdXJlID0gZnVuY3Rpb24gcmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ3JlcXVpcmVGYWlsdXJlJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciByZXF1aXJlRmFpbCA9IHRoaXMucmVxdWlyZUZhaWw7XG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuXG4gICAgaWYgKGluQXJyYXkocmVxdWlyZUZhaWwsIG90aGVyUmVjb2duaXplcikgPT09IC0xKSB7XG4gICAgICByZXF1aXJlRmFpbC5wdXNoKG90aGVyUmVjb2duaXplcik7XG4gICAgICBvdGhlclJlY29nbml6ZXIucmVxdWlyZUZhaWx1cmUodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBkcm9wIHRoZSByZXF1aXJlRmFpbHVyZSBsaW5rLiBpdCBkb2VzIG5vdCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIGRyb3BSZXF1aXJlRmFpbHVyZShvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAnZHJvcFJlcXVpcmVGYWlsdXJlJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICB2YXIgaW5kZXggPSBpbkFycmF5KHRoaXMucmVxdWlyZUZhaWwsIG90aGVyUmVjb2duaXplcik7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5yZXF1aXJlRmFpbC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaGFzIHJlcXVpcmUgZmFpbHVyZXMgYm9vbGVhblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBfcHJvdG8uaGFzUmVxdWlyZUZhaWx1cmVzID0gZnVuY3Rpb24gaGFzUmVxdWlyZUZhaWx1cmVzKCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCA+IDA7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBpZiB0aGUgcmVjb2duaXplciBjYW4gcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmNhblJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiBjYW5SZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIHJldHVybiAhIXRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBZb3Ugc2hvdWxkIHVzZSBgdHJ5RW1pdGAgaW5zdGVhZCBvZiBgZW1pdGAgZGlyZWN0bHkgdG8gY2hlY2tcbiAgICogdGhhdCBhbGwgdGhlIG5lZWRlZCByZWNvZ25pemVycyBoYXMgZmFpbGVkIGJlZm9yZSBlbWl0dGluZy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGU7XG5cbiAgICBmdW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgICBzZWxmLm1hbmFnZXIuZW1pdChldmVudCwgaW5wdXQpO1xuICAgIH0gLy8gJ3BhbnN0YXJ0JyBhbmQgJ3Bhbm1vdmUnXG5cblxuICAgIGlmIChzdGF0ZSA8IFNUQVRFX0VOREVEKSB7XG4gICAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCArIHN0YXRlU3RyKHN0YXRlKSk7XG4gICAgfVxuXG4gICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQpOyAvLyBzaW1wbGUgJ2V2ZW50TmFtZScgZXZlbnRzXG5cbiAgICBpZiAoaW5wdXQuYWRkaXRpb25hbEV2ZW50KSB7XG4gICAgICAvLyBhZGRpdGlvbmFsIGV2ZW50KHBhbmxlZnQsIHBhbnJpZ2h0LCBwaW5jaGluLCBwaW5jaG91dC4uLilcbiAgICAgIGVtaXQoaW5wdXQuYWRkaXRpb25hbEV2ZW50KTtcbiAgICB9IC8vIHBhbmVuZCBhbmQgcGFuY2FuY2VsXG5cblxuICAgIGlmIChzdGF0ZSA+PSBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIENoZWNrIHRoYXQgYWxsIHRoZSByZXF1aXJlIGZhaWx1cmUgcmVjb2duaXplcnMgaGFzIGZhaWxlZCxcbiAgICogaWYgdHJ1ZSwgaXQgZW1pdHMgYSBnZXN0dXJlIGV2ZW50LFxuICAgKiBvdGhlcndpc2UsIHNldHVwIHRoZSBzdGF0ZSB0byBGQUlMRUQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by50cnlFbWl0ID0gZnVuY3Rpb24gdHJ5RW1pdChpbnB1dCkge1xuICAgIGlmICh0aGlzLmNhbkVtaXQoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW1pdChpbnB1dCk7XG4gICAgfSAvLyBpdCdzIGZhaWxpbmcgYW55d2F5XG5cblxuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYW4gd2UgZW1pdD9cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmNhbkVtaXQgPSBmdW5jdGlvbiBjYW5FbWl0KCkge1xuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGgpIHtcbiAgICAgIGlmICghKHRoaXMucmVxdWlyZUZhaWxbaV0uc3RhdGUgJiAoU1RBVEVfRkFJTEVEIHwgU1RBVEVfUE9TU0lCTEUpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHVwZGF0ZSB0aGUgcmVjb2duaXplclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZSA9IGZ1bmN0aW9uIHJlY29nbml6ZShpbnB1dERhdGEpIHtcbiAgICAvLyBtYWtlIGEgbmV3IGNvcHkgb2YgdGhlIGlucHV0RGF0YVxuICAgIC8vIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIGlucHV0RGF0YSB3aXRob3V0IG1lc3NpbmcgdXAgdGhlIG90aGVyIHJlY29nbml6ZXJzXG4gICAgdmFyIGlucHV0RGF0YUNsb25lID0gYXNzaWduJDEoe30sIGlucHV0RGF0YSk7IC8vIGlzIGlzIGVuYWJsZWQgYW5kIGFsbG93IHJlY29nbml6aW5nP1xuXG4gICAgaWYgKCFib29sT3JGbih0aGlzLm9wdGlvbnMuZW5hYmxlLCBbdGhpcywgaW5wdXREYXRhQ2xvbmVdKSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHJlc2V0IHdoZW4gd2UndmUgcmVhY2hlZCB0aGUgZW5kXG5cblxuICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX1JFQ09HTklaRUQgfCBTVEFURV9DQU5DRUxMRUQgfCBTVEFURV9GQUlMRUQpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucHJvY2VzcyhpbnB1dERhdGFDbG9uZSk7IC8vIHRoZSByZWNvZ25pemVyIGhhcyByZWNvZ25pemVkIGEgZ2VzdHVyZVxuICAgIC8vIHNvIHRyaWdnZXIgYW4gZXZlbnRcblxuICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEIHwgU1RBVEVfQ0FOQ0VMTEVEKSkge1xuICAgICAgdGhpcy50cnlFbWl0KGlucHV0RGF0YUNsb25lKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHN0YXRlIG9mIHRoZSByZWNvZ25pemVyXG4gICAqIHRoZSBhY3R1YWwgcmVjb2duaXppbmcgaGFwcGVucyBpbiB0aGlzIG1ldGhvZFxuICAgKiBAdmlydHVhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAqIEByZXR1cm5zIHtjb25zdGFudH0gU1RBVEVcbiAgICovXG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuXG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0RGF0YSkge307XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJldHVybiB0aGUgcHJlZmVycmVkIHRvdWNoLWFjdGlvblxuICAgKiBAdmlydHVhbFxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7fTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGxlZCB3aGVuIHRoZSBnZXN0dXJlIGlzbid0IGFsbG93ZWQgdG8gcmVjb2duaXplXG4gICAqIGxpa2Ugd2hlbiBhbm90aGVyIGlzIGJlaW5nIHJlY29nbml6ZWQgb3IgaXQgaXMgZGlzYWJsZWRcbiAgICogQHZpcnR1YWxcbiAgICovXG5cblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHt9O1xuXG4gIHJldHVybiBSZWNvZ25pemVyO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBBIHRhcCBpcyByZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG9pbmcgYSBzbWFsbCB0YXAvY2xpY2suIE11bHRpcGxlIHRhcHMgYXJlIHJlY29nbml6ZWQgaWYgdGhleSBvY2N1clxuICogYmV0d2VlbiB0aGUgZ2l2ZW4gaW50ZXJ2YWwgYW5kIHBvc2l0aW9uLiBUaGUgZGVsYXkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlY29nbml6ZSBtdWx0aS10YXBzIHdpdGhvdXQgZmlyaW5nXG4gKiBhIHNpbmdsZSB0YXAuXG4gKlxuICogVGhlIGV2ZW50RGF0YSBmcm9tIHRoZSBlbWl0dGVkIGV2ZW50IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSBgdGFwQ291bnRgLCB3aGljaCBjb250YWlucyB0aGUgYW1vdW50IG9mXG4gKiBtdWx0aS10YXBzIGJlaW5nIHJlY29nbml6ZWQuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuXG52YXIgVGFwUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoVGFwUmVjb2duaXplciwgX1JlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFRhcFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICd0YXAnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0YXBzOiAxLFxuICAgICAgaW50ZXJ2YWw6IDMwMCxcbiAgICAgIC8vIG1heCB0aW1lIGJldHdlZW4gdGhlIG11bHRpLXRhcCB0YXBzXG4gICAgICB0aW1lOiAyNTAsXG4gICAgICAvLyBtYXggdGltZSBvZiB0aGUgcG9pbnRlciB0byBiZSBkb3duIChsaWtlIGZpbmdlciBvbiB0aGUgc2NyZWVuKVxuICAgICAgdGhyZXNob2xkOiA5LFxuICAgICAgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICAgIHBvc1RocmVzaG9sZDogMTBcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpczsgLy8gcHJldmlvdXMgdGltZSBhbmQgY2VudGVyLFxuICAgIC8vIHVzZWQgZm9yIHRhcCBjb3VudGluZ1xuXG4gICAgX3RoaXMucFRpbWUgPSBmYWxzZTtcbiAgICBfdGhpcy5wQ2VudGVyID0gZmFsc2U7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIF90aGlzLmNvdW50ID0gMDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVGFwUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OXTtcbiAgfTtcblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICB2YXIgdmFsaWRUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5yZXNldCgpO1xuXG4gICAgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIHRoaXMuY291bnQgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7XG4gICAgfSAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgIC8vIGFuZCB3ZSd2ZSByZWFjaGVkIGFuIGVuZCBldmVudCwgc28gYSB0YXAgaXMgcG9zc2libGVcblxuXG4gICAgaWYgKHZhbGlkTW92ZW1lbnQgJiYgdmFsaWRUb3VjaFRpbWUgJiYgdmFsaWRQb2ludGVycykge1xuICAgICAgaWYgKGlucHV0LmV2ZW50VHlwZSAhPT0gSU5QVVRfRU5EKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWxpZEludGVydmFsID0gdGhpcy5wVGltZSA/IGlucHV0LnRpbWVTdGFtcCAtIHRoaXMucFRpbWUgPCBvcHRpb25zLmludGVydmFsIDogdHJ1ZTtcbiAgICAgIHZhciB2YWxpZE11bHRpVGFwID0gIXRoaXMucENlbnRlciB8fCBnZXREaXN0YW5jZSh0aGlzLnBDZW50ZXIsIGlucHV0LmNlbnRlcikgPCBvcHRpb25zLnBvc1RocmVzaG9sZDtcbiAgICAgIHRoaXMucFRpbWUgPSBpbnB1dC50aW1lU3RhbXA7XG4gICAgICB0aGlzLnBDZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG5cbiAgICAgIGlmICghdmFsaWRNdWx0aVRhcCB8fCAhdmFsaWRJbnRlcnZhbCkge1xuICAgICAgICB0aGlzLmNvdW50ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY291bnQgKz0gMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gaWYgdGFwIGNvdW50IG1hdGNoZXMgd2UgaGF2ZSByZWNvZ25pemVkIGl0LFxuICAgICAgLy8gZWxzZSBpdCBoYXMgYmVnYW4gcmVjb2duaXppbmcuLi5cblxuICAgICAgdmFyIHRhcENvdW50ID0gdGhpcy5jb3VudCAlIG9wdGlvbnMudGFwcztcblxuICAgICAgaWYgKHRhcENvdW50ID09PSAwKSB7XG4gICAgICAgIC8vIG5vIGZhaWxpbmcgcmVxdWlyZW1lbnRzLCBpbW1lZGlhdGVseSB0cmlnZ2VyIHRoZSB0YXAgZXZlbnRcbiAgICAgICAgLy8gb3Igd2FpdCBhcyBsb25nIGFzIHRoZSBtdWx0aXRhcCBpbnRlcnZhbCB0byB0cmlnZ2VyXG4gICAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlRmFpbHVyZXMoKSkge1xuICAgICAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczIuc3RhdGUgPSBTVEFURV9SRUNPR05JWkVEO1xuXG4gICAgICAgICAgICBfdGhpczIudHJ5RW1pdCgpO1xuICAgICAgICAgIH0sIG9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLmZhaWxUaW1lb3V0ID0gZnVuY3Rpb24gZmFpbFRpbWVvdXQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgIH0sIHRoaXMub3B0aW9ucy5pbnRlcnZhbCk7XG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdCgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgdGhpcy5faW5wdXQudGFwQ291bnQgPSB0aGlzLmNvdW50O1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBUYXBSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogVGhpcyByZWNvZ25pemVyIGlzIGp1c3QgdXNlZCBhcyBhIGJhc2UgZm9yIHRoZSBzaW1wbGUgYXR0cmlidXRlIHJlY29nbml6ZXJzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIEF0dHJSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShBdHRyUmVjb2duaXplciwgX1JlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIEF0dHJSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9SZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgcG9pbnRlcnM6IDFcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogVXNlZCB0byBjaGVjayBpZiBpdCB0aGUgcmVjb2duaXplciByZWNlaXZlcyB2YWxpZCBpbnB1dCwgbGlrZSBpbnB1dC5kaXN0YW5jZSA+IDEwLlxuICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqIEByZXR1cm5zIHtCb29sZWFufSByZWNvZ25pemVkXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IEF0dHJSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25Qb2ludGVycyA9IHRoaXMub3B0aW9ucy5wb2ludGVycztcbiAgICByZXR1cm4gb3B0aW9uUG9pbnRlcnMgPT09IDAgfHwgaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25Qb2ludGVycztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFByb2Nlc3MgdGhlIGlucHV0IGFuZCByZXR1cm4gdGhlIHN0YXRlIGZvciB0aGUgcmVjb2duaXplclxuICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqIEByZXR1cm5zIHsqfSBTdGF0ZVxuICAgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgdmFyIGV2ZW50VHlwZSA9IGlucHV0LmV2ZW50VHlwZTtcbiAgICB2YXIgaXNSZWNvZ25pemVkID0gc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEKTtcbiAgICB2YXIgaXNWYWxpZCA9IHRoaXMuYXR0clRlc3QoaW5wdXQpOyAvLyBvbiBjYW5jZWwgaW5wdXQgYW5kIHdlJ3ZlIHJlY29nbml6ZWQgYmVmb3JlLCByZXR1cm4gU1RBVEVfQ0FOQ0VMTEVEXG5cbiAgICBpZiAoaXNSZWNvZ25pemVkICYmIChldmVudFR5cGUgJiBJTlBVVF9DQU5DRUwgfHwgIWlzVmFsaWQpKSB7XG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DQU5DRUxMRUQ7XG4gICAgfSBlbHNlIGlmIChpc1JlY29nbml6ZWQgfHwgaXNWYWxpZCkge1xuICAgICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9FTkRFRDtcbiAgICAgIH0gZWxzZSBpZiAoIShzdGF0ZSAmIFNUQVRFX0JFR0FOKSkge1xuICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0NIQU5HRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICByZXR1cm4gQXR0clJlY29nbml6ZXI7XG59KFJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBkaXJlY3Rpb24gY29ucyB0byBzdHJpbmdcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IGRpcmVjdGlvblxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBkaXJlY3Rpb25TdHIoZGlyZWN0aW9uKSB7XG4gIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9ET1dOKSB7XG4gICAgcmV0dXJuICdkb3duJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9VUCkge1xuICAgIHJldHVybiAndXAnO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQpIHtcbiAgICByZXR1cm4gJ2xlZnQnO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX1JJR0hUKSB7XG4gICAgcmV0dXJuICdyaWdodCc7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFBhblxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gYW5kIG1vdmVkIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgUGFuUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFBhblJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGFuUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdwYW4nLFxuICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fQUxMXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMucFggPSBudWxsO1xuICAgIF90aGlzLnBZID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUGFuUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb247XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgYWN0aW9ucy5wdXNoKFRPVUNIX0FDVElPTl9QQU5fWSk7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgYWN0aW9ucy5wdXNoKFRPVUNIX0FDVElPTl9QQU5fWCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLmRpcmVjdGlvblRlc3QgPSBmdW5jdGlvbiBkaXJlY3Rpb25UZXN0KGlucHV0KSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIGhhc01vdmVkID0gdHJ1ZTtcbiAgICB2YXIgZGlzdGFuY2UgPSBpbnB1dC5kaXN0YW5jZTtcbiAgICB2YXIgZGlyZWN0aW9uID0gaW5wdXQuZGlyZWN0aW9uO1xuICAgIHZhciB4ID0gaW5wdXQuZGVsdGFYO1xuICAgIHZhciB5ID0gaW5wdXQuZGVsdGFZOyAvLyBsb2NrIHRvIGF4aXM/XG5cbiAgICBpZiAoIShkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbikpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHggPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHggPCAwID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gICAgICAgIGhhc01vdmVkID0geCAhPT0gdGhpcy5wWDtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlyZWN0aW9uID0geSA9PT0gMCA/IERJUkVDVElPTl9OT05FIDogeSA8IDAgPyBESVJFQ1RJT05fVVAgOiBESVJFQ1RJT05fRE9XTjtcbiAgICAgICAgaGFzTW92ZWQgPSB5ICE9PSB0aGlzLnBZO1xuICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKGlucHV0LmRlbHRhWSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5wdXQuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgIHJldHVybiBoYXNNb3ZlZCAmJiBkaXN0YW5jZSA+IG9wdGlvbnMudGhyZXNob2xkICYmIGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIEF0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoIC8vIHJlcGxhY2Ugd2l0aCBhIHN1cGVyIGNhbGxcbiAgICB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4gfHwgISh0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pICYmIHRoaXMuZGlyZWN0aW9uVGVzdChpbnB1dCkpO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHRoaXMucFggPSBpbnB1dC5kZWx0YVg7XG4gICAgdGhpcy5wWSA9IGlucHV0LmRlbHRhWTtcbiAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0LmRpcmVjdGlvbik7XG5cbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb247XG4gICAgfVxuXG4gICAgX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiBQYW5SZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFN3aXBlXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgbW92aW5nIGZhc3QgKHZlbG9jaXR5KSwgd2l0aCBlbm91Z2ggZGlzdGFuY2UgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBTd2lwZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShTd2lwZVJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gU3dpcGVSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAnc3dpcGUnLFxuICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgIHZlbG9jaXR5OiAwLjMsXG4gICAgICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMIHwgRElSRUNUSU9OX1ZFUlRJQ0FMLFxuICAgICAgcG9pbnRlcnM6IDFcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTd2lwZVJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBQYW5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRUb3VjaEFjdGlvbi5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb247XG4gICAgdmFyIHZlbG9jaXR5O1xuXG4gICAgaWYgKGRpcmVjdGlvbiAmIChESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCkpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5O1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WDtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHlZO1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIGRpcmVjdGlvbiAmIGlucHV0Lm9mZnNldERpcmVjdGlvbiAmJiBpbnB1dC5kaXN0YW5jZSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgJiYgaW5wdXQubWF4UG9pbnRlcnMgPT09IHRoaXMub3B0aW9ucy5wb2ludGVycyAmJiBhYnModmVsb2NpdHkpID4gdGhpcy5vcHRpb25zLnZlbG9jaXR5ICYmIGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORDtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0Lm9mZnNldERpcmVjdGlvbik7XG5cbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb24sIGlucHV0KTtcbiAgICB9XG5cbiAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gU3dpcGVSZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFBpbmNoXG4gKiBSZWNvZ25pemVkIHdoZW4gdHdvIG9yIG1vcmUgcG9pbnRlcnMgYXJlIG1vdmluZyB0b3dhcmQgKHpvb20taW4pIG9yIGF3YXkgZnJvbSBlYWNoIG90aGVyICh6b29tLW91dCkuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBpbmNoUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFBpbmNoUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBQaW5jaFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdwaW5jaCcsXG4gICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICBwb2ludGVyczogMlxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBpbmNoUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoTWF0aC5hYnMoaW5wdXQuc2NhbGUgLSAxKSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQuc2NhbGUgIT09IDEpIHtcbiAgICAgIHZhciBpbk91dCA9IGlucHV0LnNjYWxlIDwgMSA/ICdpbicgOiAnb3V0JztcbiAgICAgIGlucHV0LmFkZGl0aW9uYWxFdmVudCA9IHRoaXMub3B0aW9ucy5ldmVudCArIGluT3V0O1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGluY2hSZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJvdGF0ZVxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXIgYXJlIG1vdmluZyBpbiBhIGNpcmN1bGFyIG1vdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgUm90YXRlUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFJvdGF0ZVJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUm90YXRlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3JvdGF0ZScsXG4gICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICBwb2ludGVyczogMlxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFJvdGF0ZVJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnJvdGF0aW9uKSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKTtcbiAgfTtcblxuICByZXR1cm4gUm90YXRlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQcmVzc1xuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gZm9yIHggbXMgd2l0aG91dCBhbnkgbW92ZW1lbnQuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuXG52YXIgUHJlc3NSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQcmVzc1JlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBQcmVzc1JlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdwcmVzcycsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIHRpbWU6IDI1MSxcbiAgICAgIC8vIG1pbmltYWwgdGltZSBvZiB0aGUgcG9pbnRlciB0byBiZSBwcmVzc2VkXG4gICAgICB0aHJlc2hvbGQ6IDlcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgICBfdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIF90aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFByZXNzUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fQVVUT107XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVGltZSA9IGlucHV0LmRlbHRhVGltZSA+IG9wdGlvbnMudGltZTtcbiAgICB0aGlzLl9pbnB1dCA9IGlucHV0OyAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgIC8vIGFuZCB3ZSd2ZSByZWFjaGVkIGFuIGVuZCBldmVudCwgc28gYSB0YXAgaXMgcG9zc2libGVcblxuICAgIGlmICghdmFsaWRNb3ZlbWVudCB8fCAhdmFsaWRQb2ludGVycyB8fCBpbnB1dC5ldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiAhdmFsaWRUaW1lKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICBfdGhpczIudHJ5RW1pdCgpO1xuICAgICAgfSwgb3B0aW9ucy50aW1lKTtcbiAgICB9IGVsc2UgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgcmV0dXJuIFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlucHV0ICYmIGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgXCJ1cFwiLCBpbnB1dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBQcmVzc1JlY29nbml6ZXI7XG59KFJlY29nbml6ZXIpO1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgaWYgRE9NIGV2ZW50cyBhcmUgYmVpbmcgdHJpZ2dlcmVkLlxuICAgKiBCdXQgdGhpcyBpcyBzbG93ZXIgYW5kIHVudXNlZCBieSBzaW1wbGUgaW1wbGVtZW50YXRpb25zLCBzbyBkaXNhYmxlZCBieSBkZWZhdWx0LlxuICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRvbUV2ZW50czogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5L2ZhbGxiYWNrLlxuICAgKiBXaGVuIHNldCB0byBgY29tcHV0ZWAgaXQgd2lsbCBtYWdpY2FsbHkgc2V0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBhZGRlZCByZWNvZ25pemVycy5cbiAgICogQHR5cGUge1N0cmluZ31cbiAgICogQGRlZmF1bHQgY29tcHV0ZVxuICAgKi9cbiAgdG91Y2hBY3Rpb246IFRPVUNIX0FDVElPTl9DT01QVVRFLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZW5hYmxlOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBFWFBFUklNRU5UQUwgRkVBVFVSRSAtLSBjYW4gYmUgcmVtb3ZlZC9jaGFuZ2VkXG4gICAqIENoYW5nZSB0aGUgcGFyZW50IGlucHV0IHRhcmdldCBlbGVtZW50LlxuICAgKiBJZiBOdWxsLCB0aGVuIGl0IGlzIGJlaW5nIHNldCB0aGUgdG8gbWFpbiBlbGVtZW50LlxuICAgKiBAdHlwZSB7TnVsbHxFdmVudFRhcmdldH1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRUYXJnZXQ6IG51bGwsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGZvcmNlIGFuIGlucHV0IGNsYXNzXG4gICAqIEB0eXBlIHtOdWxsfEZ1bmN0aW9ufVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBpbnB1dENsYXNzOiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBTb21lIENTUyBwcm9wZXJ0aWVzIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgdGhlIHdvcmtpbmcgb2YgSGFtbWVyLlxuICAgKiBBZGQgdGhlbSB0byB0aGlzIG1ldGhvZCBhbmQgdGhleSB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIuXG4gICAqIEBuYW1lc3BhY2VcbiAgICovXG4gIGNzc1Byb3BzOiB7XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0ZXh0IHNlbGVjdGlvbiB0byBpbXByb3ZlIHRoZSBkcmFnZ2luZyBnZXN0dXJlLiBNYWlubHkgZm9yIGRlc2t0b3AgYnJvd3NlcnMuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZSB0aGUgV2luZG93cyBQaG9uZSBncmlwcGVycyB3aGVuIHByZXNzaW5nIGFuIGVsZW1lbnQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaFNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGVzIHRoZSBkZWZhdWx0IGNhbGxvdXQgc2hvd24gd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQuXG4gICAgICogT24gaU9TLCB3aGVuIHlvdSB0b3VjaCBhbmQgaG9sZCBhIHRvdWNoIHRhcmdldCBzdWNoIGFzIGEgbGluaywgU2FmYXJpIGRpc3BsYXlzXG4gICAgICogYSBjYWxsb3V0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmsuIFRoaXMgcHJvcGVydHkgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoYXQgY2FsbG91dC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHRvdWNoQ2FsbG91dDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHpvb21pbmcgaXMgZW5hYmxlZC4gVXNlZCBieSBJRTEwPlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgY29udGVudFpvb21pbmc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgdGhhdCBhbiBlbnRpcmUgZWxlbWVudCBzaG91bGQgYmUgZHJhZ2dhYmxlIGluc3RlYWQgb2YgaXRzIGNvbnRlbnRzLiBNYWlubHkgZm9yIGRlc2t0b3AgYnJvd3NlcnMuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB1c2VyRHJhZzogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIE92ZXJyaWRlcyB0aGUgaGlnaGxpZ2h0IGNvbG9yIHNob3duIHdoZW4gdGhlIHVzZXIgdGFwcyBhIGxpbmsgb3IgYSBKYXZhU2NyaXB0XG4gICAgICogY2xpY2thYmxlIGVsZW1lbnQgaW4gaU9TLiBUaGlzIHByb3BlcnR5IG9iZXlzIHRoZSBhbHBoYSB2YWx1ZSwgaWYgc3BlY2lmaWVkLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ3JnYmEoMCwwLDAsMCknXG4gICAgICovXG4gICAgdGFwSGlnaGxpZ2h0Q29sb3I6IFwicmdiYSgwLDAsMCwwKVwiXG4gIH1cbn07XG4vKipcbiAqIEBwcml2YXRlXG4gKiBEZWZhdWx0IHJlY29nbml6ZXIgc2V0dXAgd2hlbiBjYWxsaW5nIGBIYW1tZXIoKWBcbiAqIFdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlciB0aGVzZSB3aWxsIGJlIHNraXBwZWQuXG4gKiBUaGlzIGlzIHNlcGFyYXRlZCB3aXRoIG90aGVyIGRlZmF1bHRzIGJlY2F1c2Ugb2YgdHJlZS1zaGFraW5nLlxuICogQHR5cGUge0FycmF5fVxuICovXG5cbnZhciBwcmVzZXQgPSBbW1JvdGF0ZVJlY29nbml6ZXIsIHtcbiAgZW5hYmxlOiBmYWxzZVxufV0sIFtQaW5jaFJlY29nbml6ZXIsIHtcbiAgZW5hYmxlOiBmYWxzZVxufSwgWydyb3RhdGUnXV0sIFtTd2lwZVJlY29nbml6ZXIsIHtcbiAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTFxufV0sIFtQYW5SZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn0sIFsnc3dpcGUnXV0sIFtUYXBSZWNvZ25pemVyXSwgW1RhcFJlY29nbml6ZXIsIHtcbiAgZXZlbnQ6ICdkb3VibGV0YXAnLFxuICB0YXBzOiAyXG59LCBbJ3RhcCddXSwgW1ByZXNzUmVjb2duaXplcl1dO1xuXG52YXIgU1RPUCA9IDE7XG52YXIgRk9SQ0VEX1NUT1AgPSAyO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogYWRkL3JlbW92ZSB0aGUgY3NzIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtCb29sZWFufSBhZGRcbiAqL1xuXG5mdW5jdGlvbiB0b2dnbGVDc3NQcm9wcyhtYW5hZ2VyLCBhZGQpIHtcbiAgdmFyIGVsZW1lbnQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG5cbiAgaWYgKCFlbGVtZW50LnN0eWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHByb3A7XG4gIGVhY2gobWFuYWdlci5vcHRpb25zLmNzc1Byb3BzLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICBwcm9wID0gcHJlZml4ZWQoZWxlbWVudC5zdHlsZSwgbmFtZSk7XG5cbiAgICBpZiAoYWRkKSB7XG4gICAgICBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdID0gZWxlbWVudC5zdHlsZVtwcm9wXTtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IG1hbmFnZXIub2xkQ3NzUHJvcHNbcHJvcF0gfHwgXCJcIjtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICghYWRkKSB7XG4gICAgbWFuYWdlci5vbGRDc3NQcm9wcyA9IHt9O1xuICB9XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiB0cmlnZ2VyIGRvbSBldmVudFxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICovXG5cblxuZnVuY3Rpb24gdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKSB7XG4gIHZhciBnZXN0dXJlRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICBnZXN0dXJlRXZlbnQuaW5pdEV2ZW50KGV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgZ2VzdHVyZUV2ZW50Lmdlc3R1cmUgPSBkYXRhO1xuICBkYXRhLnRhcmdldC5kaXNwYXRjaEV2ZW50KGdlc3R1cmVFdmVudCk7XG59XG4vKipcbiogQHByaXZhdGVcbiAqIE1hbmFnZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cblxudmFyIE1hbmFnZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNYW5hZ2VyKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5vcHRpb25zID0gYXNzaWduJDEoe30sIGRlZmF1bHRzLCBvcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLm9wdGlvbnMuaW5wdXRUYXJnZXQgPSB0aGlzLm9wdGlvbnMuaW5wdXRUYXJnZXQgfHwgZWxlbWVudDtcbiAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgdGhpcy5yZWNvZ25pemVycyA9IFtdO1xuICAgIHRoaXMub2xkQ3NzUHJvcHMgPSB7fTtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuaW5wdXQgPSBjcmVhdGVJbnB1dEluc3RhbmNlKHRoaXMpO1xuICAgIHRoaXMudG91Y2hBY3Rpb24gPSBuZXcgVG91Y2hBY3Rpb24odGhpcywgdGhpcy5vcHRpb25zLnRvdWNoQWN0aW9uKTtcbiAgICB0b2dnbGVDc3NQcm9wcyh0aGlzLCB0cnVlKTtcbiAgICBlYWNoKHRoaXMub3B0aW9ucy5yZWNvZ25pemVycywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciByZWNvZ25pemVyID0gX3RoaXMuYWRkKG5ldyBpdGVtWzBdKGl0ZW1bMV0pKTtcblxuICAgICAgaXRlbVsyXSAmJiByZWNvZ25pemVyLnJlY29nbml6ZVdpdGgoaXRlbVsyXSk7XG4gICAgICBpdGVtWzNdICYmIHJlY29nbml6ZXIucmVxdWlyZUZhaWx1cmUoaXRlbVszXSk7XG4gICAgfSwgdGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICBhc3NpZ24kMSh0aGlzLm9wdGlvbnMsIG9wdGlvbnMpOyAvLyBPcHRpb25zIHRoYXQgbmVlZCBhIGxpdHRsZSBtb3JlIHNldHVwXG5cbiAgICBpZiAob3B0aW9ucy50b3VjaEFjdGlvbikge1xuICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5pbnB1dFRhcmdldCkge1xuICAgICAgLy8gQ2xlYW4gdXAgZXhpc3RpbmcgZXZlbnQgbGlzdGVuZXJzIGFuZCByZWluaXRpYWxpemVcbiAgICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgICAgdGhpcy5pbnB1dC50YXJnZXQgPSBvcHRpb25zLmlucHV0VGFyZ2V0O1xuICAgICAgdGhpcy5pbnB1dC5pbml0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzdG9wIHJlY29nbml6aW5nIGZvciB0aGlzIHNlc3Npb24uXG4gICAqIFRoaXMgc2Vzc2lvbiB3aWxsIGJlIGRpc2NhcmRlZCwgd2hlbiBhIG5ldyBbaW5wdXRdc3RhcnQgZXZlbnQgaXMgZmlyZWQuXG4gICAqIFdoZW4gZm9yY2VkLCB0aGUgcmVjb2duaXplciBjeWNsZSBpcyBzdG9wcGVkIGltbWVkaWF0ZWx5LlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZV1cbiAgICovXG5cblxuICBfcHJvdG8uc3RvcCA9IGZ1bmN0aW9uIHN0b3AoZm9yY2UpIHtcbiAgICB0aGlzLnNlc3Npb24uc3RvcHBlZCA9IGZvcmNlID8gRk9SQ0VEX1NUT1AgOiBTVE9QO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcnVuIHRoZSByZWNvZ25pemVycyFcbiAgICogY2FsbGVkIGJ5IHRoZSBpbnB1dEhhbmRsZXIgZnVuY3Rpb24gb24gZXZlcnkgbW92ZW1lbnQgb2YgdGhlIHBvaW50ZXJzICh0b3VjaGVzKVxuICAgKiBpdCB3YWxrcyB0aHJvdWdoIGFsbCB0aGUgcmVjb2duaXplcnMgYW5kIHRyaWVzIHRvIGRldGVjdCB0aGUgZ2VzdHVyZSB0aGF0IGlzIGJlaW5nIG1hZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG5cbiAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBydW4gdGhlIHRvdWNoLWFjdGlvbiBwb2x5ZmlsbFxuXG5cbiAgICB0aGlzLnRvdWNoQWN0aW9uLnByZXZlbnREZWZhdWx0cyhpbnB1dERhdGEpO1xuICAgIHZhciByZWNvZ25pemVyO1xuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7IC8vIHRoaXMgaG9sZHMgdGhlIHJlY29nbml6ZXIgdGhhdCBpcyBiZWluZyByZWNvZ25pemVkLlxuICAgIC8vIHNvIHRoZSByZWNvZ25pemVyJ3Mgc3RhdGUgbmVlZHMgdG8gYmUgQkVHQU4sIENIQU5HRUQsIEVOREVEIG9yIFJFQ09HTklaRURcbiAgICAvLyBpZiBubyByZWNvZ25pemVyIGlzIGRldGVjdGluZyBhIHRoaW5nLCBpdCBpcyBzZXQgdG8gYG51bGxgXG5cbiAgICB2YXIgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplcjsgLy8gcmVzZXQgd2hlbiB0aGUgbGFzdCByZWNvZ25pemVyIGlzIHJlY29nbml6ZWRcbiAgICAvLyBvciB3aGVuIHdlJ3JlIGluIGEgbmV3IHNlc3Npb25cblxuICAgIGlmICghY3VyUmVjb2duaXplciB8fCBjdXJSZWNvZ25pemVyICYmIGN1clJlY29nbml6ZXIuc3RhdGUgJiBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgICAgY3VyUmVjb2duaXplciA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCByZWNvZ25pemVycy5sZW5ndGgpIHtcbiAgICAgIHJlY29nbml6ZXIgPSByZWNvZ25pemVyc1tpXTsgLy8gZmluZCBvdXQgaWYgd2UgYXJlIGFsbG93ZWQgdHJ5IHRvIHJlY29nbml6ZSB0aGUgaW5wdXQgZm9yIHRoaXMgb25lLlxuICAgICAgLy8gMS4gICBhbGxvdyBpZiB0aGUgc2Vzc2lvbiBpcyBOT1QgZm9yY2VkIHN0b3BwZWQgKHNlZSB0aGUgLnN0b3AoKSBtZXRob2QpXG4gICAgICAvLyAyLiAgIGFsbG93IGlmIHdlIHN0aWxsIGhhdmVuJ3QgcmVjb2duaXplZCBhIGdlc3R1cmUgaW4gdGhpcyBzZXNzaW9uLCBvciB0aGUgdGhpcyByZWNvZ25pemVyIGlzIHRoZSBvbmVcbiAgICAgIC8vICAgICAgdGhhdCBpcyBiZWluZyByZWNvZ25pemVkLlxuICAgICAgLy8gMy4gICBhbGxvdyBpZiB0aGUgcmVjb2duaXplciBpcyBhbGxvd2VkIHRvIHJ1biBzaW11bHRhbmVvdXMgd2l0aCB0aGUgY3VycmVudCByZWNvZ25pemVkIHJlY29nbml6ZXIuXG4gICAgICAvLyAgICAgIHRoaXMgY2FuIGJlIHNldHVwIHdpdGggdGhlIGByZWNvZ25pemVXaXRoKClgIG1ldGhvZCBvbiB0aGUgcmVjb2duaXplci5cblxuICAgICAgaWYgKHNlc3Npb24uc3RvcHBlZCAhPT0gRk9SQ0VEX1NUT1AgJiYgKCAvLyAxXG4gICAgICAhY3VyUmVjb2duaXplciB8fCByZWNvZ25pemVyID09PSBjdXJSZWNvZ25pemVyIHx8IC8vIDJcbiAgICAgIHJlY29nbml6ZXIuY2FuUmVjb2duaXplV2l0aChjdXJSZWNvZ25pemVyKSkpIHtcbiAgICAgICAgLy8gM1xuICAgICAgICByZWNvZ25pemVyLnJlY29nbml6ZShpbnB1dERhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjb2duaXplci5yZXNldCgpO1xuICAgICAgfSAvLyBpZiB0aGUgcmVjb2duaXplciBoYXMgYmVlbiByZWNvZ25pemluZyB0aGUgaW5wdXQgYXMgYSB2YWxpZCBnZXN0dXJlLCB3ZSB3YW50IHRvIHN0b3JlIHRoaXMgb25lIGFzIHRoZVxuICAgICAgLy8gY3VycmVudCBhY3RpdmUgcmVjb2duaXplci4gYnV0IG9ubHkgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGFjdGl2ZSByZWNvZ25pemVyXG5cblxuICAgICAgaWYgKCFjdXJSZWNvZ25pemVyICYmIHJlY29nbml6ZXIuc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEIHwgU1RBVEVfRU5ERUQpKSB7XG4gICAgICAgIHNlc3Npb24uY3VyUmVjb2duaXplciA9IHJlY29nbml6ZXI7XG4gICAgICAgIGN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZ2V0IGEgcmVjb2duaXplciBieSBpdHMgZXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxOdWxsfVxuICAgKi9cblxuXG4gIF9wcm90by5nZXQgPSBmdW5jdGlvbiBnZXQocmVjb2duaXplcikge1xuICAgIGlmIChyZWNvZ25pemVyIGluc3RhbmNlb2YgUmVjb2duaXplcikge1xuICAgICAgcmV0dXJuIHJlY29nbml6ZXI7XG4gICAgfVxuXG4gICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjb2duaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWNvZ25pemVyc1tpXS5vcHRpb25zLmV2ZW50ID09PSByZWNvZ25pemVyKSB7XG4gICAgICAgIHJldHVybiByZWNvZ25pemVyc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIGFkZCBhIHJlY29nbml6ZXIgdG8gdGhlIG1hbmFnZXJcbiAgICogZXhpc3RpbmcgcmVjb2duaXplcnMgd2l0aCB0aGUgc2FtZSBldmVudCBuYW1lIHdpbGwgYmUgcmVtb3ZlZFxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TWFuYWdlcn1cbiAgICovXG5cblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKHJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgXCJhZGRcIiwgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gLy8gcmVtb3ZlIGV4aXN0aW5nXG5cblxuICAgIHZhciBleGlzdGluZyA9IHRoaXMuZ2V0KHJlY29nbml6ZXIub3B0aW9ucy5ldmVudCk7XG5cbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHRoaXMucmVtb3ZlKGV4aXN0aW5nKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlY29nbml6ZXJzLnB1c2gocmVjb2duaXplcik7XG4gICAgcmVjb2duaXplci5tYW5hZ2VyID0gdGhpcztcbiAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiByZWNvZ25pemVyO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVtb3ZlIGEgcmVjb2duaXplciBieSBuYW1lIG9yIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwicmVtb3ZlXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0UmVjb2duaXplciA9IHRoaXMuZ2V0KHJlY29nbml6ZXIpOyAvLyBsZXQncyBtYWtlIHN1cmUgdGhpcyByZWNvZ25pemVyIGV4aXN0c1xuXG4gICAgaWYgKHJlY29nbml6ZXIpIHtcbiAgICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG4gICAgICB2YXIgaW5kZXggPSBpbkFycmF5KHJlY29nbml6ZXJzLCB0YXJnZXRSZWNvZ25pemVyKTtcblxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICByZWNvZ25pemVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogYmluZCBldmVudFxuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAgICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCB8fCBoYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgZWFjaChzcGxpdFN0cihldmVudHMpLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGhhbmRsZXJzW2V2ZW50XSA9IGhhbmRsZXJzW2V2ZW50XSB8fCBbXTtcbiAgICAgIGhhbmRsZXJzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgdW5iaW5kIGV2ZW50LCBsZWF2ZSBlbWl0IGJsYW5rIHRvIHJlbW92ZSBhbGwgaGFuZGxlcnNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaGFuZGxlcl1cbiAgICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5vZmYgPSBmdW5jdGlvbiBvZmYoZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgZGVsZXRlIGhhbmRsZXJzW2V2ZW50XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZXJzW2V2ZW50XSAmJiBoYW5kbGVyc1tldmVudF0uc3BsaWNlKGluQXJyYXkoaGFuZGxlcnNbZXZlbnRdLCBoYW5kbGVyKSwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBlbWl0IGV2ZW50IHRvIHRoZSBsaXN0ZW5lcnNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAqL1xuXG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBkYXRhKSB7XG4gICAgLy8gd2UgYWxzbyB3YW50IHRvIHRyaWdnZXIgZG9tIGV2ZW50c1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZG9tRXZlbnRzKSB7XG4gICAgICB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpO1xuICAgIH0gLy8gbm8gaGFuZGxlcnMsIHNvIHNraXAgaXQgYWxsXG5cblxuICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNbZXZlbnRdICYmIHRoaXMuaGFuZGxlcnNbZXZlbnRdLnNsaWNlKCk7XG5cbiAgICBpZiAoIWhhbmRsZXJzIHx8ICFoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLnR5cGUgPSBldmVudDtcblxuICAgIGRhdGEucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBkYXRhLnNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICBoYW5kbGVyc1tpXShkYXRhKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBkZXN0cm95IHRoZSBtYW5hZ2VyIGFuZCB1bmJpbmRzIGFsbCBldmVudHNcbiAgICogaXQgZG9lc24ndCB1bmJpbmQgZG9tIGV2ZW50cywgdGhhdCBpcyB0aGUgdXNlciBvd24gcmVzcG9uc2liaWxpdHlcbiAgICovXG5cblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5lbGVtZW50ICYmIHRvZ2dsZUNzc1Byb3BzKHRoaXMsIGZhbHNlKTtcbiAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgdGhpcy5pbnB1dC5kZXN0cm95KCk7XG4gICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gTWFuYWdlcjtcbn0oKTtcblxudmFyIFNJTkdMRV9UT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCc7XG52YXIgU0lOR0xFX1RPVUNIX1dJTkRPV19FVkVOVFMgPSAndG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogVG91Y2ggZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIFNpbmdsZVRvdWNoSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShTaW5nbGVUb3VjaElucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIFNpbmdsZVRvdWNoSW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gU2luZ2xlVG91Y2hJbnB1dC5wcm90b3R5cGU7XG4gICAgcHJvdG8uZXZUYXJnZXQgPSBTSU5HTEVfVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBwcm90by5ldldpbiA9IFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gU0lOR0xFX1RPVUNIX0lOUFVUX01BUFtldi50eXBlXTsgLy8gc2hvdWxkIHdlIGhhbmRsZSB0aGUgdG91Y2ggZXZlbnRzP1xuXG4gICAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRvdWNoZXMgPSBub3JtYWxpemVTaW5nbGVUb3VjaGVzLmNhbGwodGhpcywgZXYsIHR5cGUpOyAvLyB3aGVuIGRvbmUsIHJlc2V0IHRoZSBzdGFydGVkIHN0YXRlXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIHRvdWNoZXNbMF0ubGVuZ3RoIC0gdG91Y2hlc1sxXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFNpbmdsZVRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gbm9ybWFsaXplU2luZ2xlVG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsID0gdG9BcnJheShldi50b3VjaGVzKTtcbiAgdmFyIGNoYW5nZWQgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKTtcblxuICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgYWxsID0gdW5pcXVlQXJyYXkoYWxsLmNvbmNhdChjaGFuZ2VkKSwgJ2lkZW50aWZpZXInLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBbYWxsLCBjaGFuZ2VkXTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogd3JhcCBhIG1ldGhvZCB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZyBhbmQgc3RhY2sgdHJhY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgbmV3IGZ1bmN0aW9uIHdyYXBwaW5nIHRoZSBzdXBwbGllZCBtZXRob2QuXG4gKi9cbmZ1bmN0aW9uIGRlcHJlY2F0ZShtZXRob2QsIG5hbWUsIG1lc3NhZ2UpIHtcbiAgdmFyIGRlcHJlY2F0aW9uTWVzc2FnZSA9IFwiREVQUkVDQVRFRCBNRVRIT0Q6IFwiICsgbmFtZSArIFwiXFxuXCIgKyBtZXNzYWdlICsgXCIgQVQgXFxuXCI7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGUgPSBuZXcgRXJyb3IoJ2dldC1zdGFjay10cmFjZScpO1xuICAgIHZhciBzdGFjayA9IGUgJiYgZS5zdGFjayA/IGUuc3RhY2sucmVwbGFjZSgvXlteXFwoXSs/W1xcbiRdL2dtLCAnJykucmVwbGFjZSgvXlxccythdFxccysvZ20sICcnKS5yZXBsYWNlKC9eT2JqZWN0Ljxhbm9ueW1vdXM+XFxzKlxcKC9nbSwgJ3thbm9ueW1vdXN9KClAJykgOiAnVW5rbm93biBTdGFjayBUcmFjZSc7XG4gICAgdmFyIGxvZyA9IHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS53YXJuIHx8IHdpbmRvdy5jb25zb2xlLmxvZyk7XG5cbiAgICBpZiAobG9nKSB7XG4gICAgICBsb2cuY2FsbCh3aW5kb3cuY29uc29sZSwgZGVwcmVjYXRpb25NZXNzYWdlLCBzdGFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBleHRlbmQgb2JqZWN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIGluIGRlc3Qgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgb25lcyBpbiBzcmMuXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzdFxuICogQHBhcmFtIHtPYmplY3R9IHNyY1xuICogQHBhcmFtIHtCb29sZWFufSBbbWVyZ2U9ZmFsc2VdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBkZXN0XG4gKi9cblxudmFyIGV4dGVuZCA9IGRlcHJlY2F0ZShmdW5jdGlvbiAoZGVzdCwgc3JjLCBtZXJnZSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNyYyk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IGtleXMubGVuZ3RoKSB7XG4gICAgaWYgKCFtZXJnZSB8fCBtZXJnZSAmJiBkZXN0W2tleXNbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc3Rba2V5c1tpXV0gPSBzcmNba2V5c1tpXV07XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIGRlc3Q7XG59LCAnZXh0ZW5kJywgJ1VzZSBgYXNzaWduYC4nKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogbWVyZ2UgdGhlIHZhbHVlcyBmcm9tIHNyYyBpbiB0aGUgZGVzdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyB0aGF0IGV4aXN0IGluIGRlc3Qgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4gYnkgc3JjXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzdFxuICogQHBhcmFtIHtPYmplY3R9IHNyY1xuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBtZXJnZSA9IGRlcHJlY2F0ZShmdW5jdGlvbiAoZGVzdCwgc3JjKSB7XG4gIHJldHVybiBleHRlbmQoZGVzdCwgc3JjLCB0cnVlKTtcbn0sICdtZXJnZScsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBjbGFzcyBpbmhlcml0YW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hpbGRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGJhc2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllc11cbiAqL1xuXG5mdW5jdGlvbiBpbmhlcml0KGNoaWxkLCBiYXNlLCBwcm9wZXJ0aWVzKSB7XG4gIHZhciBiYXNlUCA9IGJhc2UucHJvdG90eXBlO1xuICB2YXIgY2hpbGRQO1xuICBjaGlsZFAgPSBjaGlsZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGJhc2VQKTtcbiAgY2hpbGRQLmNvbnN0cnVjdG9yID0gY2hpbGQ7XG4gIGNoaWxkUC5fc3VwZXIgPSBiYXNlUDtcblxuICBpZiAocHJvcGVydGllcykge1xuICAgIGFzc2lnbiQxKGNoaWxkUCwgcHJvcGVydGllcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc2ltcGxlIGZ1bmN0aW9uIGJpbmRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBiaW5kRm4oZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvdW5kRm4oKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFNpbXBsZSB3YXkgdG8gY3JlYXRlIGEgbWFuYWdlciB3aXRoIGEgZGVmYXVsdCBzZXQgb2YgcmVjb2duaXplcnMuXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG52YXIgSGFtbWVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIEhhbW1lciA9XG4gIC8qKlxuICAgICogQHByaXZhdGVcbiAgICAqIEBjb25zdCB7c3RyaW5nfVxuICAgICovXG4gIGZ1bmN0aW9uIEhhbW1lcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTWFuYWdlcihlbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICByZWNvZ25pemVyczogcHJlc2V0LmNvbmNhdCgpXG4gICAgfSwgb3B0aW9ucykpO1xuICB9O1xuXG4gIEhhbW1lci5WRVJTSU9OID0gXCIyLjAuMTctcmNcIjtcbiAgSGFtbWVyLkRJUkVDVElPTl9BTEwgPSBESVJFQ1RJT05fQUxMO1xuICBIYW1tZXIuRElSRUNUSU9OX0RPV04gPSBESVJFQ1RJT05fRE9XTjtcbiAgSGFtbWVyLkRJUkVDVElPTl9MRUZUID0gRElSRUNUSU9OX0xFRlQ7XG4gIEhhbW1lci5ESVJFQ1RJT05fUklHSFQgPSBESVJFQ1RJT05fUklHSFQ7XG4gIEhhbW1lci5ESVJFQ1RJT05fVVAgPSBESVJFQ1RJT05fVVA7XG4gIEhhbW1lci5ESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9IT1JJWk9OVEFMO1xuICBIYW1tZXIuRElSRUNUSU9OX1ZFUlRJQ0FMID0gRElSRUNUSU9OX1ZFUlRJQ0FMO1xuICBIYW1tZXIuRElSRUNUSU9OX05PTkUgPSBESVJFQ1RJT05fTk9ORTtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5JTlBVVF9TVEFSVCA9IElOUFVUX1NUQVJUO1xuICBIYW1tZXIuSU5QVVRfTU9WRSA9IElOUFVUX01PVkU7XG4gIEhhbW1lci5JTlBVVF9FTkQgPSBJTlBVVF9FTkQ7XG4gIEhhbW1lci5JTlBVVF9DQU5DRUwgPSBJTlBVVF9DQU5DRUw7XG4gIEhhbW1lci5TVEFURV9QT1NTSUJMRSA9IFNUQVRFX1BPU1NJQkxFO1xuICBIYW1tZXIuU1RBVEVfQkVHQU4gPSBTVEFURV9CRUdBTjtcbiAgSGFtbWVyLlNUQVRFX0NIQU5HRUQgPSBTVEFURV9DSEFOR0VEO1xuICBIYW1tZXIuU1RBVEVfRU5ERUQgPSBTVEFURV9FTkRFRDtcbiAgSGFtbWVyLlNUQVRFX1JFQ09HTklaRUQgPSBTVEFURV9SRUNPR05JWkVEO1xuICBIYW1tZXIuU1RBVEVfQ0FOQ0VMTEVEID0gU1RBVEVfQ0FOQ0VMTEVEO1xuICBIYW1tZXIuU1RBVEVfRkFJTEVEID0gU1RBVEVfRkFJTEVEO1xuICBIYW1tZXIuTWFuYWdlciA9IE1hbmFnZXI7XG4gIEhhbW1lci5JbnB1dCA9IElucHV0O1xuICBIYW1tZXIuVG91Y2hBY3Rpb24gPSBUb3VjaEFjdGlvbjtcbiAgSGFtbWVyLlRvdWNoSW5wdXQgPSBUb3VjaElucHV0O1xuICBIYW1tZXIuTW91c2VJbnB1dCA9IE1vdXNlSW5wdXQ7XG4gIEhhbW1lci5Qb2ludGVyRXZlbnRJbnB1dCA9IFBvaW50ZXJFdmVudElucHV0O1xuICBIYW1tZXIuVG91Y2hNb3VzZUlucHV0ID0gVG91Y2hNb3VzZUlucHV0O1xuICBIYW1tZXIuU2luZ2xlVG91Y2hJbnB1dCA9IFNpbmdsZVRvdWNoSW5wdXQ7XG4gIEhhbW1lci5SZWNvZ25pemVyID0gUmVjb2duaXplcjtcbiAgSGFtbWVyLkF0dHJSZWNvZ25pemVyID0gQXR0clJlY29nbml6ZXI7XG4gIEhhbW1lci5UYXAgPSBUYXBSZWNvZ25pemVyO1xuICBIYW1tZXIuUGFuID0gUGFuUmVjb2duaXplcjtcbiAgSGFtbWVyLlN3aXBlID0gU3dpcGVSZWNvZ25pemVyO1xuICBIYW1tZXIuUGluY2ggPSBQaW5jaFJlY29nbml6ZXI7XG4gIEhhbW1lci5Sb3RhdGUgPSBSb3RhdGVSZWNvZ25pemVyO1xuICBIYW1tZXIuUHJlc3MgPSBQcmVzc1JlY29nbml6ZXI7XG4gIEhhbW1lci5vbiA9IGFkZEV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIub2ZmID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5lYWNoID0gZWFjaDtcbiAgSGFtbWVyLm1lcmdlID0gbWVyZ2U7XG4gIEhhbW1lci5leHRlbmQgPSBleHRlbmQ7XG4gIEhhbW1lci5iaW5kRm4gPSBiaW5kRm47XG4gIEhhbW1lci5hc3NpZ24gPSBhc3NpZ24kMTtcbiAgSGFtbWVyLmluaGVyaXQgPSBpbmhlcml0O1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIucHJlZml4ZWQgPSBwcmVmaXhlZDtcbiAgSGFtbWVyLnRvQXJyYXkgPSB0b0FycmF5O1xuICBIYW1tZXIuaW5BcnJheSA9IGluQXJyYXk7XG4gIEhhbW1lci51bmlxdWVBcnJheSA9IHVuaXF1ZUFycmF5O1xuICBIYW1tZXIuc3BsaXRTdHIgPSBzcGxpdFN0cjtcbiAgSGFtbWVyLmJvb2xPckZuID0gYm9vbE9yRm47XG4gIEhhbW1lci5oYXNQYXJlbnQgPSBoYXNQYXJlbnQ7XG4gIEhhbW1lci5hZGRFdmVudExpc3RlbmVycyA9IGFkZEV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcnMgPSByZW1vdmVFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLmRlZmF1bHRzID0gYXNzaWduJDEoe30sIGRlZmF1bHRzLCB7XG4gICAgcHJlc2V0OiBwcmVzZXRcbiAgfSk7XG4gIHJldHVybiBIYW1tZXI7XG59KCk7XG5cbi8vICBzdHlsZSBsb2FkZXIgYnV0IGJ5IHNjcmlwdCB0YWcsIG5vdCBieSB0aGUgbG9hZGVyLlxuXG52YXIgZGVmYXVsdHMkMSA9IEhhbW1lci5kZWZhdWx0cztcblxuZXhwb3J0IGRlZmF1bHQgSGFtbWVyO1xuZXhwb3J0IHsgSU5QVVRfU1RBUlQsIElOUFVUX01PVkUsIElOUFVUX0VORCwgSU5QVVRfQ0FOQ0VMLCBTVEFURV9QT1NTSUJMRSwgU1RBVEVfQkVHQU4sIFNUQVRFX0NIQU5HRUQsIFNUQVRFX0VOREVELCBTVEFURV9SRUNPR05JWkVELCBTVEFURV9DQU5DRUxMRUQsIFNUQVRFX0ZBSUxFRCwgRElSRUNUSU9OX05PTkUsIERJUkVDVElPTl9MRUZULCBESVJFQ1RJT05fUklHSFQsIERJUkVDVElPTl9VUCwgRElSRUNUSU9OX0RPV04sIERJUkVDVElPTl9IT1JJWk9OVEFMLCBESVJFQ1RJT05fVkVSVElDQUwsIERJUkVDVElPTl9BTEwsIE1hbmFnZXIsIElucHV0LCBUb3VjaEFjdGlvbiwgVG91Y2hJbnB1dCwgTW91c2VJbnB1dCwgUG9pbnRlckV2ZW50SW5wdXQsIFRvdWNoTW91c2VJbnB1dCwgU2luZ2xlVG91Y2hJbnB1dCwgUmVjb2duaXplciwgQXR0clJlY29nbml6ZXIsIFRhcFJlY29nbml6ZXIgYXMgVGFwLCBQYW5SZWNvZ25pemVyIGFzIFBhbiwgU3dpcGVSZWNvZ25pemVyIGFzIFN3aXBlLCBQaW5jaFJlY29nbml6ZXIgYXMgUGluY2gsIFJvdGF0ZVJlY29nbml6ZXIgYXMgUm90YXRlLCBQcmVzc1JlY29nbml6ZXIgYXMgUHJlc3MsIGFkZEV2ZW50TGlzdGVuZXJzIGFzIG9uLCByZW1vdmVFdmVudExpc3RlbmVycyBhcyBvZmYsIGVhY2gsIG1lcmdlLCBleHRlbmQsIGFzc2lnbiQxIGFzIGFzc2lnbiwgaW5oZXJpdCwgYmluZEZuLCBwcmVmaXhlZCwgdG9BcnJheSwgaW5BcnJheSwgdW5pcXVlQXJyYXksIHNwbGl0U3RyLCBib29sT3JGbiwgaGFzUGFyZW50LCBhZGRFdmVudExpc3RlbmVycywgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMsIGRlZmF1bHRzJDEgYXMgZGVmYXVsdHMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhbW1lci5lc20uanMubWFwXG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmlsbCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWxsO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWxsKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZpbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiLyoqXG4gKiB2aXMtdXRpbFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Zpc2pzL3Zpcy11dGlsXG4gKlxuICogdXRpbGl0aWUgY29sbGVjdGlvbiBmb3IgdmlzanNcbiAqXG4gKiBAdmVyc2lvbiA1LjAuNVxuICogQGRhdGUgICAgMjAyMy0xMC0wM1QxODo0Nzo1OC4wNjFaXG4gKlxuICogQGNvcHlyaWdodCAoYykgMjAxMS0yMDE3IEFsbWVuZGUgQi5WLCBodHRwOi8vYWxtZW5kZS5jb21cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTctMjAxOSB2aXNqcyBjb250cmlidXRvcnMsIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqc1xuICpcbiAqIEBsaWNlbnNlXG4gKiB2aXMuanMgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBib3RoXG4gKlxuICogICAxLiBUaGUgQXBhY2hlIDIuMCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICAgYW5kXG4gKlxuICogICAyLiBUaGUgTUlUIExpY2Vuc2VcbiAqICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICpcbiAqIHZpcy5qcyBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IEVtaXR0ZXIgZnJvbSAnY29tcG9uZW50LWVtaXR0ZXInO1xuaW1wb3J0IFJlYWxIYW1tZXIgZnJvbSAnQGVnanMvaGFtbWVyanMnO1xuXG4vKipcclxuICogVXNlIHRoaXMgc3ltYm9sIHRvIGRlbGV0ZSBwcm9wZXJpZXMgaW4gZGVlcE9iamVjdEFzc2lnbi5cclxuICovXHJcbmNvbnN0IERFTEVURSA9IFN5bWJvbChcIkRFTEVURVwiKTtcclxuLyoqXHJcbiAqIFB1cmUgdmVyc2lvbiBvZiBkZWVwT2JqZWN0QXNzaWduLCBpdCBkb2Vzbid0IG1vZGlmeSBhbnkgb2YgaXQncyBhcmd1bWVudHMuXHJcbiAqXHJcbiAqIEBwYXJhbSBiYXNlIC0gVGhlIGJhc2Ugb2JqZWN0IHRoYXQgZnVsbGZpbHMgdGhlIHdob2xlIGludGVyZmFjZSBULlxyXG4gKiBAcGFyYW0gdXBkYXRlcyAtIFVwZGF0ZXMgdGhhdCBtYXkgY2hhbmdlIG9yIGRlbGV0ZSBwcm9wcy5cclxuICogQHJldHVybnMgQSBicmFuZCBuZXcgaW5zdGFuY2Ugd2l0aCBhbGwgdGhlIHN1cHBsaWVkIG9iamVjdHMgZGVlcGx5IG1lcmdlZC5cclxuICovXHJcbmZ1bmN0aW9uIHB1cmVEZWVwT2JqZWN0QXNzaWduKGJhc2UsIC4uLnVwZGF0ZXMpIHtcclxuICAgIHJldHVybiBkZWVwT2JqZWN0QXNzaWduKHt9LCBiYXNlLCAuLi51cGRhdGVzKTtcclxufVxyXG4vKipcclxuICogRGVlcCB2ZXJzaW9uIG9mIG9iamVjdCBhc3NpZ24gd2l0aCBhZGRpdGlvbmFsIGRlbGV0aW5nIGJ5IHRoZSBERUxFVEUgc3ltYm9sLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWVzIC0gT2JqZWN0cyB0byBiZSBkZWVwbHkgbWVyZ2VkLlxyXG4gKiBAcmV0dXJucyBUaGUgZmlyc3Qgb2JqZWN0IGZyb20gdmFsdWVzLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcE9iamVjdEFzc2lnbiguLi52YWx1ZXMpIHtcclxuICAgIGNvbnN0IG1lcmdlZCA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSguLi52YWx1ZXMpO1xyXG4gICAgc3RyaXBEZWxldGUobWVyZ2VkKTtcclxuICAgIHJldHVybiBtZXJnZWQ7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhpcyBkb2Vzbid0IHN0cmlwIHRoZSBERUxFVEUgc3ltYm9scyBzbyB0aGV5IG1heSBlbmQgdXAgaW4gdGhlIGZpbmFsIG9iamVjdC5cclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSguLi52YWx1ZXMpIHtcclxuICAgIGlmICh2YWx1ZXMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZXNbMF07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID4gMikge1xyXG4gICAgICAgIHJldHVybiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoZGVlcE9iamVjdEFzc2lnbih2YWx1ZXNbMF0sIHZhbHVlc1sxXSksIC4uLnZhbHVlcy5zbGljZSgyKSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhID0gdmFsdWVzWzBdO1xyXG4gICAgY29uc3QgYiA9IHZhbHVlc1sxXTtcclxuICAgIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgIGEuc2V0VGltZShiLmdldFRpbWUoKSk7XHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgUmVmbGVjdC5vd25LZXlzKGIpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoYiwgcHJvcCkpIDtcclxuICAgICAgICBlbHNlIGlmIChiW3Byb3BdID09PSBERUxFVEUpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGFbcHJvcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgYltwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgYltwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShhW3Byb3BdKSAmJlxyXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGFbcHJvcF0sIGJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGNsb25lKGJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIGNsb25lIGdpdmVuIG9iamVjdCBvciBhcnJheS4gSW4gY2FzZSBvZiBwcmltaXRpdmUgc2ltcGx5IHJldHVybi5cclxuICpcclxuICogQHBhcmFtIGEgLSBBbnl0aGluZy5cclxuICogQHJldHVybnMgRGVlcCBjbG9uZWQgb2JqZWN0L2FycmF5IG9yIHVuY2hhbmdlZCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gY2xvbmUoYSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcclxuICAgICAgICByZXR1cm4gYS5tYXAoKHZhbHVlKSA9PiBjbG9uZSh2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGEgPT09IFwib2JqZWN0XCIgJiYgYSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoYS5nZXRUaW1lKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KHt9LCBhKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBTdHJpcCBERUxFVEUgZnJvbSBnaXZlbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHdoaWNoIG1heSBjb250YWluIERFTEVURSBidXQgd29uJ3QgYWZ0ZXIgdGhpcyBpcyBleGVjdXRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHN0cmlwRGVsZXRlKGEpIHtcclxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhhKSkge1xyXG4gICAgICAgIGlmIChhW3Byb3BdID09PSBERUxFVEUpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGFbcHJvcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBhW3Byb3BdID09PSBcIm9iamVjdFwiICYmIGFbcHJvcF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgc3RyaXBEZWxldGUoYVtwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbi8qKlxyXG4gKiBTZWVkYWJsZSwgZmFzdCBhbmQgcmVhc29uYWJseSBnb29kIChub3QgY3J5cHRvIGJ1dCBtb3JlIHRoYW4gb2theSBmb3Igb3VyXHJcbiAqIG5lZWRzKSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci5cclxuICpcclxuICogQHJlbWFya3NcclxuICogQWRhcHRlZCBmcm9tIHtAbGluayBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMTA0MjkxMDA3MzYvaHR0cDovL2JhYWdvZS5jb206ODAvZW4vUmFuZG9tTXVzaW5ncy9qYXZhc2NyaXB0fS5cclxuICogT3JpZ2luYWwgYWxnb3JpdGhtIGNyZWF0ZWQgYnkgSm9oYW5uZXMgQmFhZ8O4ZSBcXDxiYWFnb2VcXEBiYWFnb2UuY29tXFw+IGluIDIwMTAuXHJcbiAqL1xyXG4vKipcclxuICogQ3JlYXRlIGEgc2VlZGVkIHBzZXVkbyByYW5kb20gZ2VuZXJhdG9yIGJhc2VkIG9uIEFsZWEgYnkgSm9oYW5uZXMgQmFhZ8O4ZS5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBbGwgc3VwcGxpZWQgYXJndW1lbnRzIHdpbGwgYmUgdXNlZCBhcyBhIHNlZWQuIEluIGNhc2Ugbm90aGluZ1xyXG4gKiBpcyBzdXBwbGllZCB0aGUgY3VycmVudCB0aW1lIHdpbGwgYmUgdXNlZCB0byBzZWVkIHRoZSBnZW5lcmF0b3IuXHJcbiAqIEByZXR1cm5zIEEgcmVhZHkgdG8gdXNlIHNlZWRlZCBnZW5lcmF0b3IuXHJcbiAqL1xyXG5mdW5jdGlvbiBBbGVhKC4uLnNlZWQpIHtcclxuICAgIHJldHVybiBBbGVhSW1wbGVtZW50YXRpb24oc2VlZC5sZW5ndGggPyBzZWVkIDogW0RhdGUubm93KCldKTtcclxufVxyXG4vKipcclxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgW1tBbGVhXV0gd2l0aG91dCB1c2VyIGlucHV0IHZhbGlkYXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gVGhlIGRhdGEgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQpIHtcclxuICAgIGxldCBbczAsIHMxLCBzMl0gPSBtYXNoU2VlZChzZWVkKTtcclxuICAgIGxldCBjID0gMTtcclxuICAgIGNvbnN0IHJhbmRvbSA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCB0ID0gMjA5MTYzOSAqIHMwICsgYyAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXHJcbiAgICAgICAgczAgPSBzMTtcclxuICAgICAgICBzMSA9IHMyO1xyXG4gICAgICAgIHJldHVybiAoczIgPSB0IC0gKGMgPSB0IHwgMCkpO1xyXG4gICAgfTtcclxuICAgIHJhbmRvbS51aW50MzIgPSAoKSA9PiByYW5kb20oKSAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXHJcbiAgICByYW5kb20uZnJhY3Q1MyA9ICgpID0+IHJhbmRvbSgpICsgKChyYW5kb20oKSAqIDB4MjAwMDAwKSB8IDApICogMS4xMTAyMjMwMjQ2MjUxNTY1ZS0xNjsgLy8gMl4tNTNcclxuICAgIHJhbmRvbS5hbGdvcml0aG0gPSBcIkFsZWFcIjtcclxuICAgIHJhbmRvbS5zZWVkID0gc2VlZDtcclxuICAgIHJhbmRvbS52ZXJzaW9uID0gXCIwLjlcIjtcclxuICAgIHJldHVybiByYW5kb207XHJcbn1cclxuLyoqXHJcbiAqIFR1cm4gYXJiaXRyYXJ5IGRhdGEgaW50byB2YWx1ZXMgW1tBbGVhSW1wbGVtZW50YXRpb25dXSBjYW4gdXNlIHRvIGdlbmVyYXRlXHJcbiAqIHJhbmRvbSBudW1iZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIEFyYml0cmFyeSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWVkLlxyXG4gKiBAcmV0dXJucyBUaHJlZSBudW1iZXJzIHRvIHVzZSBhcyBpbml0aWFsIHZhbHVlcyBmb3IgW1tBbGVhSW1wbGVtZW50YXRpb25dXS5cclxuICovXHJcbmZ1bmN0aW9uIG1hc2hTZWVkKC4uLnNlZWQpIHtcclxuICAgIGNvbnN0IG1hc2ggPSBNYXNoKCk7XHJcbiAgICBsZXQgczAgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMSA9IG1hc2goXCIgXCIpO1xyXG4gICAgbGV0IHMyID0gbWFzaChcIiBcIik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBzMCAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMCA8IDApIHtcclxuICAgICAgICAgICAgczAgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgczEgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczEgPCAwKSB7XHJcbiAgICAgICAgICAgIHMxICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMyIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMyIDwgMCkge1xyXG4gICAgICAgICAgICBzMiArPSAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbczAsIHMxLCBzMl07XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyBtYXNoIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJucyBBIG5vbnB1cmUgZnVuY3Rpb24gdGhhdCB0YWtlcyBhcmJpdHJhcnkgW1tNYXNoYWJsZV1dIGRhdGEgYW5kIHR1cm5zXHJcbiAqIHRoZW0gaW50byBudW1iZXJzLlxyXG4gKi9cclxuZnVuY3Rpb24gTWFzaCgpIHtcclxuICAgIGxldCBuID0gMHhlZmM4MjQ5ZDtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHN0cmluZyA9IGRhdGEudG9TdHJpbmcoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBuICs9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgICAgICBsZXQgaCA9IDAuMDI1MTk2MDMyODI0MTY5MzggKiBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBoICo9IG47XHJcbiAgICAgICAgICAgIG4gPSBoID4+PiAwO1xyXG4gICAgICAgICAgICBoIC09IG47XHJcbiAgICAgICAgICAgIG4gKz0gaCAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAobiA+Pj4gMCkgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgfTtcclxufVxuXG4vKipcbiAqIFNldHVwIGEgbW9jayBoYW1tZXIuanMgb2JqZWN0LCBmb3IgdW5pdCB0ZXN0aW5nLlxuICpcbiAqIEluc3BpcmF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vdWJlci9kZWNrLmdsL3B1bGwvNjU4XG4gKlxuICogQHJldHVybnMge3tvbjogbm9vcCwgb2ZmOiBub29wLCBkZXN0cm95OiBub29wLCBlbWl0OiBub29wLCBnZXQ6IGdldH19XG4gKi9cbmZ1bmN0aW9uIGhhbW1lck1vY2soKSB7XG4gIGNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuICByZXR1cm4ge1xuICAgIG9uOiBub29wLFxuICAgIG9mZjogbm9vcCxcbiAgICBkZXN0cm95OiBub29wLFxuICAgIGVtaXQ6IG5vb3AsXG5cbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXQ6IG5vb3AsXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG5cbmNvbnN0IEhhbW1lciQxID1cbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIlxuICAgID8gd2luZG93LkhhbW1lciB8fCBSZWFsSGFtbWVyXG4gICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGhhbW1lci5qcyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBhIGJyb3dzZXIsIG5vdCBpbiBub2RlLmpzLiBSZXBsYWNpbmcgaXQgd2l0aCBhIG1vY2sgb2JqZWN0LlxuICAgICAgICByZXR1cm4gaGFtbWVyTW9jaygpO1xuICAgICAgfTtcblxuLyoqXG4gKiBUdXJuIGFuIGVsZW1lbnQgaW50byBhbiBjbGlja1RvVXNlIGVsZW1lbnQuXG4gKiBXaGVuIG5vdCBhY3RpdmUsIHRoZSBlbGVtZW50IGhhcyBhIHRyYW5zcGFyZW50IG92ZXJsYXkuIFdoZW4gdGhlIG92ZXJsYXkgaXNcbiAqIGNsaWNrZWQsIHRoZSBtb2RlIGlzIGNoYW5nZWQgdG8gYWN0aXZlLlxuICogV2hlbiBhY3RpdmUsIHRoZSBlbGVtZW50IGlzIGRpc3BsYXllZCB3aXRoIGEgYmx1ZSBib3JkZXIgYXJvdW5kIGl0LCBhbmRcbiAqIHRoZSBpbnRlcmFjdGl2ZSBjb250ZW50cyBvZiB0aGUgZWxlbWVudCBjYW4gYmUgdXNlZC4gV2hlbiBjbGlja2VkIG91dHNpZGVcbiAqIHRoZSBlbGVtZW50LCB0aGUgZWxlbWVudHMgbW9kZSBpcyBjaGFuZ2VkIHRvIGluYWN0aXZlLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyXG4gKiBAY2xhc3MgQWN0aXZhdG9yXG4gKi9cbmZ1bmN0aW9uIEFjdGl2YXRvciQxKGNvbnRhaW5lcikge1xuICB0aGlzLl9jbGVhbnVwUXVldWUgPSBbXTtcblxuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuXG4gIHRoaXMuX2RvbSA9IHtcbiAgICBjb250YWluZXIsXG4gICAgb3ZlcmxheTogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxcbiAgfTtcblxuICB0aGlzLl9kb20ub3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwidmlzLW92ZXJsYXlcIik7XG5cbiAgdGhpcy5fZG9tLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIHRoaXMuX2NsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICB0aGlzLl9kb20ub3ZlcmxheS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgfSk7XG5cbiAgY29uc3QgaGFtbWVyID0gSGFtbWVyJDEodGhpcy5fZG9tLm92ZXJsYXkpO1xuICBoYW1tZXIub24oXCJ0YXBcIiwgdGhpcy5fb25UYXBPdmVybGF5LmJpbmQodGhpcykpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgaGFtbWVyLmRlc3Ryb3koKTtcbiAgICAvLyBGSVhNRTogY2xlYW5pbmcgdXAgaGFtbWVyIGluc3RhbmNlcyBkb2Vzbid0IHdvcmsgKFRpbWVsaW5lIG5vdCByZW1vdmVkXG4gICAgLy8gZnJvbSBtZW1vcnkpXG4gIH0pO1xuXG4gIC8vIGJsb2NrIGFsbCB0b3VjaCBldmVudHMgKGV4Y2VwdCB0YXApXG4gIGNvbnN0IGV2ZW50cyA9IFtcbiAgICBcInRhcFwiLFxuICAgIFwiZG91YmxldGFwXCIsXG4gICAgXCJwcmVzc1wiLFxuICAgIFwicGluY2hcIixcbiAgICBcInBhblwiLFxuICAgIFwicGFuc3RhcnRcIixcbiAgICBcInBhbm1vdmVcIixcbiAgICBcInBhbmVuZFwiLFxuICBdO1xuICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICBoYW1tZXIub24oZXZlbnQsIChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuc3JjRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGF0dGFjaCBhIGNsaWNrIGV2ZW50IHRvIHRoZSB3aW5kb3csIGluIG9yZGVyIHRvIGRlYWN0aXZhdGUgd2hlbiBjbGlja2luZyBvdXRzaWRlIHRoZSB0aW1lbGluZVxuICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQuYm9keSkge1xuICAgIHRoaXMuX29uQ2xpY2sgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghX2hhc1BhcmVudChldmVudC50YXJnZXQsIGNvbnRhaW5lcikpIHtcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9vbkNsaWNrKTtcbiAgICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9vbkNsaWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHByZXBhcmUgZXNjYXBlIGtleSBsaXN0ZW5lciBmb3IgZGVhY3RpdmF0aW5nIHdoZW4gYWN0aXZlXG4gIHRoaXMuX2VzY0xpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKFxuICAgICAgXCJrZXlcIiBpbiBldmVudFxuICAgICAgICA/IGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIlxuICAgICAgICA6IGV2ZW50LmtleUNvZGUgPT09IDI3IC8qIHRoZSBrZXlDb2RlIGlzIGZvciBJRTExICovXG4gICAgKSB7XG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgICB9XG4gIH07XG59XG5cbi8vIHR1cm4gaW50byBhbiBldmVudCBlbWl0dGVyXG5FbWl0dGVyKEFjdGl2YXRvciQxLnByb3RvdHlwZSk7XG5cbi8vIFRoZSBjdXJyZW50bHkgYWN0aXZlIGFjdGl2YXRvclxuQWN0aXZhdG9yJDEuY3VycmVudCA9IG51bGw7XG5cbi8qKlxuICogRGVzdHJveSB0aGUgYWN0aXZhdG9yLiBDbGVhbnMgdXAgYWxsIGNyZWF0ZWQgRE9NIGFuZCBldmVudCBsaXN0ZW5lcnNcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZGVhY3RpdmF0ZSgpO1xuXG4gIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgdGhpcy5fY2xlYW51cFF1ZXVlLnNwbGljZSgwKS5yZXZlcnNlKCkpIHtcbiAgICBjYWxsYmFjaygpO1xuICB9XG59O1xuXG4vKipcbiAqIEFjdGl2YXRlIHRoZSBlbGVtZW50XG4gKiBPdmVybGF5IGlzIGhpZGRlbiwgZWxlbWVudCBpcyBkZWNvcmF0ZWQgd2l0aCBhIGJsdWUgc2hhZG93IGJvcmRlclxuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIHdlIGFsbG93IG9ubHkgb25lIGFjdGl2ZSBhY3RpdmF0b3IgYXQgYSB0aW1lXG4gIGlmIChBY3RpdmF0b3IkMS5jdXJyZW50KSB7XG4gICAgQWN0aXZhdG9yJDEuY3VycmVudC5kZWFjdGl2YXRlKCk7XG4gIH1cbiAgQWN0aXZhdG9yJDEuY3VycmVudCA9IHRoaXM7XG5cbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gIHRoaXMuX2RvbS5jb250YWluZXIuY2xhc3NMaXN0LmFkZChcInZpcy1hY3RpdmVcIik7XG5cbiAgdGhpcy5lbWl0KFwiY2hhbmdlXCIpO1xuICB0aGlzLmVtaXQoXCJhY3RpdmF0ZVwiKTtcblxuICAvLyB1Z2x5IGhhY2s6IGJpbmQgRVNDIGFmdGVyIGVtaXR0aW5nIHRoZSBldmVudHMsIGFzIHRoZSBOZXR3b3JrIHJlYmluZHMgYWxsXG4gIC8vIGtleWJvYXJkIGV2ZW50cyBvbiBhICdjaGFuZ2UnIGV2ZW50XG4gIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5fZXNjTGlzdGVuZXIpO1xufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRlIHRoZSBlbGVtZW50XG4gKiBPdmVybGF5IGlzIGRpc3BsYXllZCBvbiB0b3Agb2YgdGhlIGVsZW1lbnRcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gIHRoaXMuX2RvbS5vdmVybGF5LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gIHRoaXMuX2RvbS5jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcInZpcy1hY3RpdmVcIik7XG4gIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5fZXNjTGlzdGVuZXIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiZGVhY3RpdmF0ZVwiKTtcbn07XG5cbi8qKlxuICogSGFuZGxlIGEgdGFwIGV2ZW50OiBhY3RpdmF0ZSB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuX29uVGFwT3ZlcmxheSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAvLyBhY3RpdmF0ZSB0aGUgY29udGFpbmVyXG4gIHRoaXMuYWN0aXZhdGUoKTtcbiAgZXZlbnQuc3JjRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59O1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgZWxlbWVudCBoYXMgdGhlIHJlcXVlc3RlZCBwYXJlbnQgZWxlbWVudCBzb21ld2hlcmUgaW5cbiAqIGl0cyBjaGFpbiBvZiBwYXJlbnQgbm9kZXMuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHBhcmVudCBpcyBmb3VuZCBzb21ld2hlcmUgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2hhc1BhcmVudChlbGVtZW50LCBwYXJlbnQpIHtcbiAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudCA9PT0gcGFyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIHV0aWxpdHkgZnVuY3Rpb25zXHJcbi8vIHBhcnNlIEFTUC5OZXQgRGF0ZSBwYXR0ZXJuLFxyXG4vLyBmb3IgZXhhbXBsZSAnL0RhdGUoMTE5ODkwODcxNzA1NikvJyBvciAnL0RhdGUoMTE5ODkwODcxNzA1Ni0wNzAwKS8nXHJcbi8vIGNvZGUgZnJvbSBodHRwOi8vbW9tZW50anMuY29tL1xyXG5jb25zdCBBU1BEYXRlUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaTtcclxuLy8gQ29sb3IgUkVzXHJcbmNvbnN0IGZ1bGxIZXhSRSA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2k7XHJcbmNvbnN0IHNob3J0SGV4UkUgPSAvXiM/KFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pO1xyXG5jb25zdCByZ2JSRSA9IC9ecmdiXFwoICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICpcXCkkL2k7XHJcbmNvbnN0IHJnYmFSRSA9IC9ecmdiYVxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKFswMV18MD9cXC5cXGQrKSAqXFwpJC9pO1xyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIG51bWJlci5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIG51bWJlciwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE51bWJlciB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBldmVyeXRoaW5nIGluIHRoZSBET00gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gRE9Nb2JqZWN0IC0gTm9kZSB3aG9zZSBjaGlsZCBub2RlcyB3aWxsIGJlIHJlY3Vyc2l2ZWx5IGRlbGV0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiByZWN1cnNpdmVET01EZWxldGUoRE9Nb2JqZWN0KSB7XHJcbiAgICBpZiAoRE9Nb2JqZWN0KSB7XHJcbiAgICAgICAgd2hpbGUgKERPTW9iamVjdC5oYXNDaGlsZE5vZGVzKCkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBET01vYmplY3QuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgaWYgKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVET01EZWxldGUoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgRE9Nb2JqZWN0LnJlbW92ZUNoaWxkKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHN0cmluZywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBvYmplY3QgKG5vdCBwcmltaXRpdmUgb3IgbnVsbCkuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBub3QgbnVsbCBvYmplY3QsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgRGF0ZSwgb3IgYSBTdHJpbmcgY29udGFpbmluZyBhIERhdGUuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBEYXRlIGluc3RhbmNlIG9yIHN0cmluZyBkYXRlIHJlcHJlc2VudGF0aW9uLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgIC8vIHRlc3Qgd2hldGhlciB0aGlzIHN0cmluZyBjb250YWlucyBhIGRhdGVcclxuICAgICAgICBjb25zdCBtYXRjaCA9IEFTUERhdGVSZWdleC5leGVjKHZhbHVlKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbi8qKlxyXG4gKiBDb3B5IHByb3BlcnR5IGZyb20gYiB0byBhIGlmIHByb3BlcnR5IHByZXNlbnQgaW4gYS5cclxuICogSWYgcHJvcGVydHkgaW4gYiBleHBsaWNpdGx5IHNldCB0byBudWxsLCBkZWxldGUgaXQgaWYgYGFsbG93RGVsZXRpb25gIHNldC5cclxuICpcclxuICogSW50ZXJuYWwgaGVscGVyIHJvdXRpbmUsIHNob3VsZCBub3QgYmUgZXhwb3J0ZWQuIE5vdCBhZGRlZCB0byBgZXhwb3J0c2AgZm9yIHRoYXQgcmVhc29uLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRhcmdldCBvYmplY3QuXHJcbiAqIEBwYXJhbSBiIC0gU291cmNlIG9iamVjdC5cclxuICogQHBhcmFtIHByb3AgLSBOYW1lIG9mIHByb3BlcnR5IHRvIGNvcHkgZnJvbSBiIHRvIGEuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnR5IGluIGEgaWYgZXhwbGljaXRseSBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pIHtcclxuICAgIGxldCBkb0RlbGV0aW9uID0gZmFsc2U7XHJcbiAgICBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGRvRGVsZXRpb24gPSBiW3Byb3BdID09PSBudWxsICYmIGFbcHJvcF0gIT09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGlmIChkb0RlbGV0aW9uKSB7XHJcbiAgICAgICAgZGVsZXRlIGFbcHJvcF07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBhW3Byb3BdID0gYltwcm9wXTsgLy8gUmVtZW1iZXIsIHRoaXMgaXMgYSByZWZlcmVuY2UgY29weSFcclxuICAgIH1cclxufVxyXG4vKipcclxuICogRmlsbCBhbiBvYmplY3Qgd2l0aCBhIHBvc3NpYmx5IHBhcnRpYWxseSBkZWZpbmVkIG90aGVyIG9iamVjdC5cclxuICpcclxuICogT25seSBjb3BpZXMgdmFsdWVzIGZvciB0aGUgcHJvcGVydGllcyBhbHJlYWR5IHByZXNlbnQgaW4gYS5cclxuICogVGhhdCBtZWFucyBhbiBvYmplY3QgaXMgbm90IGNyZWF0ZWQgb24gYSBwcm9wZXJ0eSBpZiBvbmx5IHRoZSBiIG9iamVjdCBoYXMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIG9iamVjdCB0aGF0IHdpbGwgaGF2ZSBpdCdzIHByb3BlcnRpZXMgdXBkYXRlZC5cclxuICogQHBhcmFtIGIgLSBUaGUgb2JqZWN0IHdpdGggcHJvcGVydHkgdXBkYXRlcy5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGZpbGxJZkRlZmluZWQoYSwgYiwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBOT1RFOiBpdGVyYXRpb24gb2YgcHJvcGVydGllcyBvZiBhXHJcbiAgICAvLyBOT1RFOiBwcm90b3R5cGUgcHJvcGVydGllcyBpdGVyYXRlZCBvdmVyIGFzIHdlbGxcclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBhKSB7XHJcbiAgICAgICAgaWYgKGJbcHJvcF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSA9PT0gbnVsbCB8fCB0eXBlb2YgYltwcm9wXSAhPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gTm90ZTogdHlwZW9mIG51bGwgPT09ICdvYmplY3QnXHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhUHJvcCA9IGFbcHJvcF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiUHJvcCA9IGJbcHJvcF07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QoYVByb3ApICYmIGlzT2JqZWN0KGJQcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGxJZkRlZmluZWQoYVByb3AsIGJQcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIG9mIGFsbCBvZiB0aGUgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGFcclxuICogdGFyZ2V0IG9iamVjdC4gUmV0dXJucyB0aGUgdGFyZ2V0IG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIGNvcHkgdG8uXHJcbiAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCBmcm9tIHdoaWNoIHRvIGNvcHkgcHJvcGVydGllcy5cclxuICogQHJldHVybnMgVGhlIHRhcmdldCBvYmplY3QuXHJcbiAqL1xyXG5jb25zdCBleHRlbmQgPSBPYmplY3QuYXNzaWduO1xyXG4vKipcclxuICogRXh0ZW5kIG9iamVjdCBhIHdpdGggc2VsZWN0ZWQgcHJvcGVydGllcyBvZiBvYmplY3QgYiBvciBhIHNlcmllcyBvZiBvYmplY3RzLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHMgLSBQcm9wZXJ0aWVzIHRvIGJlIGNvcGllZCB0byBhLlxyXG4gKiBAcGFyYW0gYSAtIFRoZSB0YXJnZXQuXHJcbiAqIEBwYXJhbSBvdGhlcnMgLSBUaGUgc291cmNlcy5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZUV4dGVuZChwcm9wcywgYSwgLi4ub3RoZXJzKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXJyYXkgd2l0aCBwcm9wZXJ0eSBuYW1lcyBleHBlY3RlZCBhcyBmaXJzdCBhcmd1bWVudFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgb3RoZXIgb2Ygb3RoZXJzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBwcm9wcy5sZW5ndGg7IHArKykge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgICAgIGlmIChvdGhlciAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdID0gb3RoZXJbcHJvcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRXh0ZW5kIG9iamVjdCBhIHdpdGggc2VsZWN0ZWQgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogUHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIHJvdXRpbmUgaW1wbGllZCB0aGF0IG11bHRpcGxlIHNvdXJjZSBvYmplY3RzIGNvdWxkXHJcbiAqIGJlIHVzZWQ7IGhvd2V2ZXIsIHRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgKip3cm9uZyoqLiBTaW5jZSBtdWx0aXBsZSAoXFw+MSlcclxuICogc291cmNlcyB3ZXJlbid0IHVzZWQgYW55d2hlcmUgaW4gdGhlIGB2aXMuanNgIGNvZGUsIHRoaXMgaGFzIGJlZW4gcmVtb3ZlZFxyXG4gKiBAcGFyYW0gcHJvcHMgLSBOYW1lcyBvZiBmaXJzdC1sZXZlbCBwcm9wZXJ0aWVzIHRvIGNvcHkgb3Zlci5cclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnR5IGluIGEgaWYgZXhwbGljaXRseSBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlRGVlcEV4dGVuZChwcm9wcywgYSwgYiwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgQXJyYXlzIHRvIGRlZXBFeHRlbmRcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgcCA9IDA7IHAgPCBwcm9wcy5sZW5ndGg7IHArKykge1xyXG4gICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1twXTtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHByb3ApKSB7XHJcbiAgICAgICAgICAgIGlmIChiW3Byb3BdICYmIGJbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFbcHJvcF0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0sIGZhbHNlLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRXh0ZW5kIG9iamVjdCBgYWAgd2l0aCBwcm9wZXJ0aWVzIG9mIG9iamVjdCBgYmAsIGlnbm9yaW5nIHByb3BlcnRpZXMgd2hpY2hcclxuICogYXJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHRvIGJlIGV4Y2x1ZGVkLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGUgcHJvcGVydGllcyBvZiBgYmAgYXJlIGNvbnNpZGVyZWQgZm9yIGNvcHlpbmcuIFByb3BlcnRpZXMgd2hpY2ggYXJlXHJcbiAqIHRoZW1zZWx2ZXMgb2JqZWN0cyBhcmUgYXJlIGFsc28gZXh0ZW5kZWQuIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWRcclxuICogdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBwcm9wc1RvRXhjbHVkZSAtIE5hbWVzIG9mIHByb3BlcnRpZXMgd2hpY2ggc2hvdWxkICpub3QqIGJlIGNvcGllZC5cclxuICogQHBhcmFtIGEgLSBPYmplY3QgdG8gZXh0ZW5kLlxyXG4gKiBAcGFyYW0gYiAtIE9iamVjdCB0byB0YWtlIHByb3BlcnRpZXMgZnJvbSBmb3IgZXh0ZW5zaW9uLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0aWVzIGluIGEgdGhhdCBhcmUgZXhwbGljaXRseVxyXG4gKiBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlTm90RGVlcEV4dGVuZChwcm9wc1RvRXhjbHVkZSwgYSwgYiwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgQXJyYXlzIHRvIGRlZXBFeHRlbmRcclxuICAgIC8vIE5PVEU6IGFycmF5IHByb3BlcnRpZXMgaGF2ZSBhbiBlbHNlLWJlbG93OyBhcHBhcmVudGx5LCB0aGVyZSBpcyBhIHByb2JsZW0gaGVyZS5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGIpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9IC8vIEhhbmRsZSBsb2NhbCBwcm9wZXJ0aWVzIG9ubHlcclxuICAgICAgICBpZiAocHJvcHNUb0V4Y2x1ZGUuaW5jbHVkZXMocHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBJbiBleGNsdXNpb24gbGlzdCwgc2tpcFxyXG4gICAgICAgIGlmIChiW3Byb3BdICYmIGJbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoYVtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdKTsgLy8gTk9URTogYWxsb3dEZWxldGlvbiBub3QgcHJvcGFnYXRlZCFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiW3Byb3BdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdLnB1c2goYltwcm9wXVtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBleHRlbmQgYW4gb2JqZWN0IGEgd2l0aCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm90b0V4dGVuZCAtIElmIHRydWUsIHRoZSBwcm90b3R5cGUgdmFsdWVzIHdpbGwgYWxzbyBiZSBleHRlbmRlZC5cclxuICogKFRoYXQgaXMgdGhlIG9wdGlvbnMgb2JqZWN0cyB0aGF0IGluaGVyaXQgZnJvbSBvdGhlcnMgd2lsbCBhbHNvIGdldCB0aGVcclxuICogaW5oZXJpdGVkIG9wdGlvbnMpLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIHRoZSB2YWx1ZXMgb2YgZmllbGRzIHRoYXQgYXJlIG51bGwgd2lsbCBiZSBkZWxldGVkLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcEV4dGVuZChhLCBiLCBwcm90b0V4dGVuZCA9IGZhbHNlLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSB8fCBwcm90b0V4dGVuZCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihiW3Byb3BdKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFbcHJvcF0gPSBkZWVwRXh0ZW5kKHt9LCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGFbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYVtwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0sIHByb3RvRXh0ZW5kKTsgLy8gTk9URTogYWxsb3dEZWxldGlvbiBub3QgcHJvcGFnYXRlZCFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdID0gYltwcm9wXS5zbGljZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBhbGwgZWxlbWVudHMgaW4gdHdvIGFycmF5cyBhcmUgZXF1YWwuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gRmlyc3QgYXJyYXkuXHJcbiAqIEBwYXJhbSBiIC0gU2Vjb25kIGFycmF5LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIGJvdGggYXJyYXlzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzYW1lIGVsZW1lbnRzICgxID0gJzEnKS5cclxuICovXHJcbmZ1bmN0aW9uIGVxdWFsQXJyYXkoYSwgYikge1xyXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuLyoqXHJcbiAqIEdldCB0aGUgdHlwZSBvZiBhbiBvYmplY3QsIGZvciBleGFtcGxlIGV4cG9ydHMuZ2V0VHlwZShbXSkgcmV0dXJucyAnQXJyYXknLlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqZWN0IC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBEZXRlY3RlZCB0eXBlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0VHlwZShvYmplY3QpIHtcclxuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xyXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiQm9vbGVhblwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIk51bWJlclwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlN0cmluZ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkFycmF5XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkRhdGVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiT2JqZWN0XCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIHJldHVybiBcIk51bWJlclwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiQm9vbGVhblwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcclxuICAgIH1cclxuICAgIHJldHVybiB0eXBlO1xyXG59XHJcbi8qKlxyXG4gKiBVc2VkIHRvIGV4dGVuZCBhbiBhcnJheSBhbmQgY29weSBpdC4gVGhpcyBpcyB1c2VkIHRvIHByb3BhZ2F0ZSBwYXRocyByZWN1cnNpdmVseS5cclxuICpcclxuICogQHBhcmFtIGFyciAtIEZpcnN0IHBhcnQuXHJcbiAqIEBwYXJhbSBuZXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBhYWRkZWQgaW50byB0aGUgYXJyYXkuXHJcbiAqIEByZXR1cm5zIEEgbmV3IGFycmF5IHdpdGggYWxsIGl0ZW1zIGZyb20gYXJyIGFuZCBuZXdWYWx1ZSAod2hpY2ggaXMgbGFzdCkuXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3B5QW5kRXh0ZW5kQXJyYXkoYXJyLCBuZXdWYWx1ZSkge1xyXG4gICAgcmV0dXJuIFsuLi5hcnIsIG5ld1ZhbHVlXTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBUaGUgYXJyYXkgdG8gYmUgY29waWVkLlxyXG4gKiBAcmV0dXJucyBTaGFsbG93IGNvcHkgb2YgYXJyLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFycmF5KGFycikge1xyXG4gICAgcmV0dXJuIGFyci5zbGljZSgpO1xyXG59XHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgbGVmdCB2YWx1ZSBvZiBhIERPTSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIEEgZG9tIGVsZW1lbnQsIGZvciBleGFtcGxlIGEgZGl2LlxyXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgbGVmdCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlTGVmdChlbGVtKSB7XHJcbiAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xyXG59XHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgcmlnaHQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHJpZ2h0IHBvc2l0aW9uIG9mIHRoaXMgZWxlbWVudCBpbiB0aGUgYnJvd3NlciBwYWdlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVSaWdodChlbGVtKSB7XHJcbiAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHRvcCB2YWx1ZSBvZiBhIERPTSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIEEgZG9tIGVsZW1lbnQsIGZvciBleGFtcGxlIGEgZGl2LlxyXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgdG9wIHBvc2l0aW9uIG9mIHRoaXMgZWxlbWVudCBpbiB0aGUgYnJvd3NlciBwYWdlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVUb3AoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xyXG59XHJcbi8qKlxyXG4gKiBBZGQgYSBjbGFzc05hbWUgdG8gdGhlIGdpdmVuIGVsZW1lbnRzIHN0eWxlLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIFRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBjbGFzc2VzIHdpbGwgYmUgYWRkZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIGFkZENsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG5ld0NsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmNvbmNhdChuZXdDbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFjbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KSk7XHJcbiAgICBlbGVtLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbihcIiBcIik7XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhIGNsYXNzTmFtZSBmcm9tIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCBmcm9tIHdoaWNoIHRoZSBjbGFzc2VzIHdpbGwgYmUgcmVtb3ZlZC5cclxuICogQHBhcmFtIGNsYXNzTmFtZXMgLSBTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZXMpIHtcclxuICAgIGxldCBjbGFzc2VzID0gZWxlbS5jbGFzc05hbWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgY29uc3Qgb2xkQ2xhc3NlcyA9IGNsYXNzTmFtZXMuc3BsaXQoXCIgXCIpO1xyXG4gICAgY2xhc3NlcyA9IGNsYXNzZXMuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcclxuICAgICAgICByZXR1cm4gIW9sZENsYXNzZXMuaW5jbHVkZXMoY2xhc3NOYW1lKTtcclxuICAgIH0pO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBGb3IgZWFjaCBtZXRob2QgZm9yIGJvdGggYXJyYXlzIGFuZCBvYmplY3RzLlxyXG4gKiBJbiBjYXNlIG9mIGFuIGFycmF5LCB0aGUgYnVpbHQtaW4gQXJyYXkuZm9yRWFjaCgpIGlzIGFwcGxpZWQgKCoqTm8sIGl0J3Mgbm90ISoqKS5cclxuICogSW4gY2FzZSBvZiBhbiBPYmplY3QsIHRoZSBtZXRob2QgbG9vcHMgb3ZlciBhbGwgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqZWN0IC0gQW4gT2JqZWN0IG9yIEFycmF5IHRvIGJlIGl0ZXJhdGVkIG92ZXIuXHJcbiAqIEBwYXJhbSBjYWxsYmFjayAtIEFycmF5LmZvckVhY2gtbGlrZSBjYWxsYmFjay5cclxuICovXHJcbmZ1bmN0aW9uIGZvckVhY2gob2JqZWN0LCBjYWxsYmFjaykge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgIC8vIGFycmF5XHJcbiAgICAgICAgY29uc3QgbGVuID0gb2JqZWN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG9iamVjdFtpXSwgaSwgb2JqZWN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBvYmplY3RcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYW4gYXJyYXk6IGFsbCBvYmplY3RzIHByb3BlcnRpZXMgYXJlIHB1dCBpbnRvIHRoZSBhcnJheS4gVGhlIHJlc3VsdGluZyBhcnJheSBpcyB1bm9yZGVyZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSBvIC0gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuXHJcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVub3JkZXJlZCB2YWx1ZXMuXHJcbiAqL1xyXG5jb25zdCB0b0FycmF5ID0gT2JqZWN0LnZhbHVlcztcclxuLyoqXHJcbiAqIFVwZGF0ZSBhIHByb3BlcnR5IGluIGFuIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydHkgd2lsbCBiZSB1cGRhdGVkLlxyXG4gKiBAcGFyYW0ga2V5IC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIHZhbHVlIC0gVGhlIG5ldyB2YWx1ZSB0byBiZSBhc3NpZ25lZC5cclxuICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgd2FzIHVwZGF0ZWQgKHRydWUpIG9yIGFscmVhZHkgc3RyaWN0bHkgdGhlIHNhbWUgaW4gdGhlIG9yaWdpbmFsIG9iamVjdCAoZmFsc2UpLlxyXG4gKi9cclxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydHkob2JqZWN0LCBrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAob2JqZWN0W2tleV0gIT09IHZhbHVlKSB7XHJcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhyb3R0bGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHRvIGJlIG9ubHkgZXhlY3V0ZWQgb25jZSBwZXIgYW5pbWF0aW9uIGZyYW1lLlxyXG4gKlxyXG4gKiBAcGFyYW0gZm4gLSBUaGUgb3JpZ2luYWwgZnVuY3Rpb24uXHJcbiAqIEByZXR1cm5zIFRoZSB0aHJvdHRsZWQgZnVuY3Rpb24uXHJcbiAqL1xyXG5mdW5jdGlvbiB0aHJvdHRsZShmbikge1xyXG4gICAgbGV0IHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICBpZiAoIXNjaGVkdWxlZCkge1xyXG4gICAgICAgICAgICBzY2hlZHVsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmbigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbi8qKlxyXG4gKiBBZGQgYW5kIGV2ZW50IGxpc3RlbmVyLiBXb3JrcyBmb3IgYWxsIGJyb3dzZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGJpbmQgdGhlIGV2ZW50IGxpc3RlbmVyIHRvLlxyXG4gKiBAcGFyYW0gYWN0aW9uIC0gU2FtZSBhcyBFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYWN0aW9uLCDigJQsIOKAlCkuXHJcbiAqIEBwYXJhbSBsaXN0ZW5lciAtIFNhbWUgYXMgRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKOKAlCwgbGlzdGVuZXIsIOKAlCkuXHJcbiAqIEBwYXJhbSB1c2VDYXB0dXJlIC0gU2FtZSBhcyBFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo4oCULCDigJQsIHVzZUNhcHR1cmUpLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihlbGVtZW50LCBhY3Rpb24sIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSB7XHJcbiAgICBpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKSB7XHJcbiAgICAgICAgaWYgKHVzZUNhcHR1cmUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB1c2VDYXB0dXJlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhY3Rpb24gPT09IFwibW91c2V3aGVlbFwiICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJGaXJlZm94XCIpKSB7XHJcbiAgICAgICAgICAgIGFjdGlvbiA9IFwiRE9NTW91c2VTY3JvbGxcIjsgLy8gRm9yIEZpcmVmb3hcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGFjdGlvbiwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoXCJvblwiICsgYWN0aW9uLCBsaXN0ZW5lcik7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhbiBldmVudCBsaXN0ZW5lciBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gYmluZCB0aGUgZXZlbnQgbGlzdGVuZXIgdG8uXHJcbiAqIEBwYXJhbSBhY3Rpb24gLSBTYW1lIGFzIEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhY3Rpb24sIOKAlCwg4oCUKS5cclxuICogQHBhcmFtIGxpc3RlbmVyIC0gU2FtZSBhcyBFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIo4oCULCBsaXN0ZW5lciwg4oCUKS5cclxuICogQHBhcmFtIHVzZUNhcHR1cmUgLSBTYW1lIGFzIEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcijigJQsIOKAlCwgdXNlQ2FwdHVyZSkuXHJcbiAqL1xyXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKGVsZW1lbnQsIGFjdGlvbiwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpIHtcclxuICAgIGlmIChlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcclxuICAgICAgICAvLyBub24tSUUgYnJvd3NlcnNcclxuICAgICAgICBpZiAodXNlQ2FwdHVyZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHVzZUNhcHR1cmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJtb3VzZXdoZWVsXCIgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcyhcIkZpcmVmb3hcIikpIHtcclxuICAgICAgICAgICAgYWN0aW9uID0gXCJET01Nb3VzZVNjcm9sbFwiOyAvLyBGb3IgRmlyZWZveFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYWN0aW9uLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBAVE9ETzogSUUgdHlwZXM/IERvZXMgYW55b25lIGNhcmU/XHJcbiAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudChcIm9uXCIgKyBhY3Rpb24sIGxpc3RlbmVyKTsgLy8gSUUgYnJvd3NlcnNcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ2FuY2VscyB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBpZiBpdCBpcyBjYW5jZWxhYmxlLCB3aXRob3V0IHN0b3BwaW5nIGZ1cnRoZXIgcHJvcGFnYXRpb24gb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgd2hvc2UgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIG5vbi1JRSBicm93c2Vyc1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldCBIVE1MIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudC5cclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgb3IgbnVsbCBpZiBub3Qgb2J0YWluYWJsZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFRhcmdldChldmVudCA9IHdpbmRvdy5ldmVudCkge1xyXG4gICAgLy8gY29kZSBmcm9tIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxyXG4gICAgLy8gQFRPRE86IEV2ZW50VGFyZ2V0IGNhbiBiZSBhbG1vc3QgYW55dGhpbmcsIGlzIGl0IG9rYXkgdG8gcmV0dXJuIG9ubHkgRWxlbWVudHM/XHJcbiAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcclxuICAgIGlmICghZXZlbnQpIDtcclxuICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LnNyY0VsZW1lbnQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC5zcmNFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gbnVsbCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykge1xyXG4gICAgICAgIC8vIGRlZmVhdCBTYWZhcmkgYnVnXHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gZWxlbWVudCBjb250YWlucyBnaXZlbiBwYXJlbnQgc29tZXdoZXJlIGluIHRoZSBET00gdHJlZS5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBwYXJlbnQgLSBUaGUgYW5jZXN0b3IgKG5vdCBuZWNlc3NhcmlseSBwYXJlbnQpIG9mIHRoZSBlbGVtZW50LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHBhcmVudCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZWxlbWVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xyXG4gICAgbGV0IGVsZW0gPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKGVsZW0pIHtcclxuICAgICAgICBpZiAoZWxlbSA9PT0gcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9ib29sZWFuLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nIGJvb2xlYW4gdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgbnVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvbnVtYmVyLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nICoqYm94ZWQqKiBudW1iZXIgdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzTnVtYmVyKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIHN0cmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3N0cmluZywgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogc3RyaW5nIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1N0cmluZyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvc2l6ZSwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUgKG51bWJlciArICdweCcpLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1NpemUodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBET00gRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBET00gRWxlbWVudCwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIERPTSBFbGVtZW50LCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0VsZW1lbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYn1cclxuICogQHBhcmFtIGhleCAtIEhleCBjb2xvciBzdHJpbmcgKDMgb3IgNiBkaWdpdHMsIHdpdGggb3Igd2l0aG91dCAjKS5cclxuICogQHJldHVybnMgUkdCIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvUkdCKGhleCkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHN3aXRjaCAoaGV4Lmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHNob3J0SGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0gKyByZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0gKyByZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10gKyByZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBmdWxsSGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBzdHJpbmcgY29sb3IgaW4gaGV4IG9yIFJHQiBmb3JtYXQgYW5kIGFkZHMgdGhlIG9wYWNpdHksIFJHQkEgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29sb3IgLSBUaGUgY29sb3Igc3RyaW5nIChoZXgsIFJHQiwgUkdCQSkuXHJcbiAqIEBwYXJhbSBvcGFjaXR5IC0gVGhlIG5ldyBvcGFjaXR5LlxyXG4gKiBAcmV0dXJucyBSR0JBIHN0cmluZywgZm9yIGV4YW1wbGUgJ3JnYmEoMjU1LCAwLCAxMjcsIDAuMyknLlxyXG4gKi9cclxuZnVuY3Rpb24gb3ZlcnJpZGVPcGFjaXR5KGNvbG9yLCBvcGFjaXR5KSB7XHJcbiAgICBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JhXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JcIikpIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBjb2xvclxyXG4gICAgICAgICAgICAuc3Vic3RyKGNvbG9yLmluZGV4T2YoXCIoXCIpICsgMSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYlswXSArIFwiLFwiICsgcmdiWzFdICsgXCIsXCIgKyByZ2JbMl0gKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJnYiA9IGhleFRvUkdCKGNvbG9yKTtcclxuICAgICAgICBpZiAocmdiID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYi5yICsgXCIsXCIgKyByZ2IuZyArIFwiLFwiICsgcmdiLmIgKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcgKGZvciBleGFtcGxlOiAnIzBhY2RjMCcpLlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IZXgocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmV0dXJuIChcIiNcIiArICgoMSA8PCAyNCkgKyAocmVkIDw8IDE2KSArIChncmVlbiA8PCA4KSArIGJsdWUpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XHJcbn1cclxuLyoqXHJcbiAqIFBhcnNlIGEgY29sb3IgcHJvcGVydHkgaW50byBhbiBvYmplY3Qgd2l0aCBib3JkZXIsIGJhY2tncm91bmQsIGFuZCBoaWdobGlnaHQgY29sb3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5wdXRDb2xvciAtIFNob3J0aGFuZCBjb2xvciBzdHJpbmcgb3IgaW5wdXQgY29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0gZGVmYXVsdENvbG9yIC0gRnVsbCBjb2xvciBvYmplY3QgdG8gZmlsbCBpbiBtaXNzaW5nIHZhbHVlcyBpbiBpbnB1dENvbG9yLlxyXG4gKiBAcmV0dXJucyBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0Q29sb3IsIGRlZmF1bHRDb2xvcikge1xyXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0Q29sb3IpKSB7XHJcbiAgICAgICAgbGV0IGNvbG9yU3RyID0gaW5wdXRDb2xvcjtcclxuICAgICAgICBpZiAoaXNWYWxpZFJHQihjb2xvclN0cikpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiID0gY29sb3JTdHJcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoNClcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3JTdHIubGVuZ3RoIC0gNSlcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29sb3JTdHIgPSBSR0JUb0hleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVmFsaWRIZXgoY29sb3JTdHIpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSFNWKGNvbG9yU3RyKTtcclxuICAgICAgICAgICAgY29uc3QgbGlnaHRlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBoc3YucyAqIDAuOCxcclxuICAgICAgICAgICAgICAgIHY6IE1hdGgubWluKDEsIGhzdi52ICogMS4wMiksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBNYXRoLm1pbigxLCBoc3YucyAqIDEuMjUpLFxyXG4gICAgICAgICAgICAgICAgdjogaHN2LnYgKiAwLjgsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySGV4ID0gSFNWVG9IZXgoZGFya2VyQ29sb3JIU1YuaCwgZGFya2VyQ29sb3JIU1YucywgZGFya2VyQ29sb3JIU1Yudik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhleCA9IEhTVlRvSGV4KGxpZ2h0ZXJDb2xvckhTVi5oLCBsaWdodGVyQ29sb3JIU1YucywgbGlnaHRlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q29sb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgZGVmYXVsdENvbG9yLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IGRlZmF1bHRDb2xvci5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5ob3ZlciAmJiBpbnB1dENvbG9yLmhvdmVyLmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuYmFja2dyb3VuZCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogaXNTdHJpbmcoaW5wdXRDb2xvci5oaWdobGlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBSR0IgXFw8MCwgMjU1XFw+IGludG8gSFNWIG9iamVjdC5cclxuICpcclxuICogQHJlbWFya3NcclxuICoge0BsaW5rIGh0dHA6Ly93d3cuamF2YXNjcmlwdGVyLm5ldC9mYXEvcmdiMmhzdi5odG19XHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhTViBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBSR0JUb0hTVihyZWQsIGdyZWVuLCBibHVlKSB7XHJcbiAgICByZWQgPSByZWQgLyAyNTU7XHJcbiAgICBncmVlbiA9IGdyZWVuIC8gMjU1O1xyXG4gICAgYmx1ZSA9IGJsdWUgLyAyNTU7XHJcbiAgICBjb25zdCBtaW5SR0IgPSBNYXRoLm1pbihyZWQsIE1hdGgubWluKGdyZWVuLCBibHVlKSk7XHJcbiAgICBjb25zdCBtYXhSR0IgPSBNYXRoLm1heChyZWQsIE1hdGgubWF4KGdyZWVuLCBibHVlKSk7XHJcbiAgICAvLyBCbGFjay1ncmF5LXdoaXRlXHJcbiAgICBpZiAobWluUkdCID09PSBtYXhSR0IpIHtcclxuICAgICAgICByZXR1cm4geyBoOiAwLCBzOiAwLCB2OiBtaW5SR0IgfTtcclxuICAgIH1cclxuICAgIC8vIENvbG9ycyBvdGhlciB0aGFuIGJsYWNrLWdyYXktd2hpdGU6XHJcbiAgICBjb25zdCBkID0gcmVkID09PSBtaW5SR0IgPyBncmVlbiAtIGJsdWUgOiBibHVlID09PSBtaW5SR0IgPyByZWQgLSBncmVlbiA6IGJsdWUgLSByZWQ7XHJcbiAgICBjb25zdCBoID0gcmVkID09PSBtaW5SR0IgPyAzIDogYmx1ZSA9PT0gbWluUkdCID8gMSA6IDU7XHJcbiAgICBjb25zdCBodWUgPSAoNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSkpIC8gMzYwO1xyXG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IChtYXhSR0IgLSBtaW5SR0IpIC8gbWF4UkdCO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtYXhSR0I7XHJcbiAgICByZXR1cm4geyBoOiBodWUsIHM6IHNhdHVyYXRpb24sIHY6IHZhbHVlIH07XHJcbn1cclxuLyoqXHJcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBpbnRvIGFuIG9iamVjdCB3aXRoIGtleS92YWx1ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gQ1NTIHNvdXJjZSBjb2RlIHRvIHNwbGl0IGludG8ga2V5L3ZhbHVlIG9iamVjdC5cclxuICogQHJldHVybnMgS2V5L3ZhbHVlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHtAbGluayBjc3NUZXh0fS5cclxuICovXHJcbmZ1bmN0aW9uIHNwbGl0Q1NTVGV4dChjc3NUZXh0KSB7XHJcbiAgICBjb25zdCB0bXBFbGxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB7fTtcclxuICAgIHRtcEVsbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bXBFbGxlbWVudC5zdHlsZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIHN0eWxlc1t0bXBFbGxlbWVudC5zdHlsZVtpXV0gPSB0bXBFbGxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRtcEVsbGVtZW50LnN0eWxlW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbn1cclxuLyoqXHJcbiAqIEFwcGVuZCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgdG8gYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgc3R5bGVzLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgYXBwZW5kZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDc3NUZXh0KGVsZW1lbnQsIGNzc1RleHQpIHtcclxuICAgIGNvbnN0IGNzc1N0eWxlID0gc3BsaXRDU1NUZXh0KGNzc1RleHQpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3NzU3R5bGUpKSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCBzdHlsZXMgc2hvdWxkIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gVGhlIHN0eWxlcyB0byBiZSByZW1vdmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamlqYWNrc29uLzUzMTEyNTZ9XHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb1JHQihoLCBzLCB2KSB7XHJcbiAgICBsZXQgcjtcclxuICAgIGxldCBnO1xyXG4gICAgbGV0IGI7XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihoICogNik7XHJcbiAgICBjb25zdCBmID0gaCAqIDYgLSBpO1xyXG4gICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xyXG4gICAgY29uc3QgcSA9IHYgKiAoMSAtIGYgKiBzKTtcclxuICAgIGNvbnN0IHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyk7XHJcbiAgICBzd2l0Y2ggKGkgJSA2KSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAociA9IHYpLCAoZyA9IHQpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIChyID0gcSksIChnID0gdiksIChiID0gcCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSB2KSwgKGIgPSB0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAociA9IHApLCAoZyA9IHEpLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIChyID0gdCksIChnID0gcCksIChiID0gdik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSBwKSwgKGIgPSBxKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHI6IE1hdGguZmxvb3IociAqIDI1NSksXHJcbiAgICAgICAgZzogTWF0aC5mbG9vcihnICogMjU1KSxcclxuICAgICAgICBiOiBNYXRoLmZsb29yKGIgKiAyNTUpLFxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb0hleChoLCBzLCB2KSB7XHJcbiAgICBjb25zdCByZ2IgPSBIU1ZUb1JHQihoLCBzLCB2KTtcclxuICAgIHJldHVybiBSR0JUb0hleChyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBoZXggY29sb3Igc3RyaW5nIGludG8gSFNWIFxcPDAsIDFcXD4uXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gaGV4VG9IU1YoaGV4KSB7XHJcbiAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihoZXgpO1xyXG4gICAgaWYgKCFyZ2IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHtoZXh9JyBpcyBub3QgYSB2YWxpZCBjb2xvci5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSR0JUb0hTVihyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgaGV4IGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIGhleCAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xyXG4gICAgY29uc3QgaXNPayA9IC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XHJcbiAgICByZXR1cm4gaXNPaztcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCIGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHJnYiAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCKHJnYikge1xyXG4gICAgcmV0dXJuIHJnYlJFLnRlc3QocmdiKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCQSBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2JhIC0gVW5rbm93biBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBhIGNvbG9yLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzVmFsaWRSR0JBKHJnYmEpIHtcclxuICAgIHJldHVybiByZ2JhUkUudGVzdChyZ2JhKTtcclxufVxyXG4vKipcclxuICogVGhpcyByZWN1cnNpdmVseSByZWRpcmVjdHMgdGhlIHByb3RvdHlwZSBvZiBKU09OIG9iamVjdHMgdG8gdGhlIHJlZmVyZW5jZU9iamVjdC5cclxuICogVGhpcyBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZHMgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHRvIGJlIGJyaWRnZWQuXHJcbiAqIEBwYXJhbSByZWZlcmVuY2VPYmplY3QgLSBUaGUgb3JpZ2luYWwgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVCcmlkZ2VPYmplY3QoZmllbGRzLCByZWZlcmVuY2VPYmplY3QpIHtcclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIHJlZmVyZW5jZU9iamVjdCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIC8vICEhISB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICBjb25zdCBvYmplY3RUbyA9IE9iamVjdC5jcmVhdGUocmVmZXJlbmNlT2JqZWN0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZmVyZW5jZU9iamVjdCwgZmllbGRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0VG9bZmllbGRzW2ldXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFRvO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgVGhlIEVsZW1lbnQgaWYgdGhlIHJlZmVyZW5jZU9iamVjdCBpcyBhbiBFbGVtZW50LCBvciBhIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiByZWZlcmVuY2VPYmplY3QgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gQXZvaWQgYnJpZGdpbmcgRE9NIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlT2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGkpKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ldID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFRvW2ldID0gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0VG87XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgc3RhYmxlIHNvcnQgaW1wbGVtZW50YXRpb24sIHZlcnkgZmFzdCBmb3IgcHJlc29ydGVkIGRhdGEuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIGFycmF5IHRvIGJlIHNvcnRlZCAoaW4tcGxhY2UpLlxyXG4gKiBAcGFyYW0gY29tcGFyZSAtIEFuIG9yZGVyIGNvbXBhcmF0b3IuXHJcbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5zZXJ0U29ydChhLCBjb21wYXJlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBrID0gYVtpXTtcclxuICAgICAgICBsZXQgajtcclxuICAgICAgICBmb3IgKGogPSBpOyBqID4gMCAmJiBjb21wYXJlKGssIGFbaiAtIDFdKSA8IDA7IGotLSkge1xyXG4gICAgICAgICAgICBhW2pdID0gYVtqIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFbal0gPSBrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIG9wdGlvbnMgb2Ygc3Vib2JqZWN0cyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXHJcbiAqXHJcbiAqIEEgcmVxdWlyZW1lbnQgb2YgdGhlc2Ugc3Vib2JqZWN0cyBpcyB0aGF0IHRoZXkgaGF2ZSBhbiAnZW5hYmxlZCcgZWxlbWVudFxyXG4gKiB3aGljaCBpcyBvcHRpb25hbCBmb3IgdGhlIHVzZXIgYnV0IG1hbmRhdG9yeSBmb3IgdGhlIHByb2dyYW0uXHJcbiAqXHJcbiAqIFRoZSBhZGRlZCB2YWx1ZSBoZXJlIG9mIHRoZSBtZXJnZSBpcyB0aGF0IG9wdGlvbiAnZW5hYmxlZCcgaXMgc2V0IGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWVyZ2VUYXJnZXQgLSBFaXRoZXIgdGhpcy5vcHRpb25zIG9yIHRoZSBvcHRpb25zIHVzZWQgZm9yIHRoZSBncm91cHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICogQHBhcmFtIG9wdGlvbiAtIE9wdGlvbiBrZXkgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSBnbG9iYWxPcHRpb25zIC0gR2xvYmFsIG9wdGlvbnMsIHBhc3NlZCBpbiB0byBkZXRlcm1pbmUgdmFsdWUgb2Ygb3B0aW9uICdlbmFibGVkJy5cclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhtZXJnZVRhcmdldCwgb3B0aW9ucywgb3B0aW9uLCBnbG9iYWxPcHRpb25zID0ge30pIHtcclxuICAgIC8vIExvY2FsIGhlbHBlcnNcclxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9iaiAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIjtcclxuICAgIH07XHJcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzQ0OTEyODcvMTIyMzUzMVxyXG4gICAgY29uc3QgaXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHggaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCB4KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8vIEd1YXJkc1xyXG4gICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbWVyZ2VUYXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzUHJlc2VudChvcHRpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgZ2xvYmFsT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyBBY3R1YWwgbWVyZ2Ugcm91dGluZSwgc2VwYXJhdGVkIGZyb20gbWFpbiBsb2dpY1xyXG4gICAgLy8gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBvcHRpb25zIGlzIG1lcmdlZC4gRGVlcGVyIGxldmVscyBhcmUgcmVmJ2QuIFRoaXMgbWF5IGFjdHVhbGx5IGJlIGFuIGlzc3VlLlxyXG4gICAgLy9cclxuICAgIGNvbnN0IGRvTWVyZ2UgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KHRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbb3B0aW9uXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcmMgPSBvcHRpb25zW29wdGlvbl07XHJcbiAgICAgICAgY29uc3QgZHN0ID0gdGFyZ2V0W29wdGlvbl07XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNyYywgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRzdFtwcm9wXSA9IHNyY1twcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBMb2NhbCBpbml0aWFsaXphdGlvblxyXG4gICAgY29uc3Qgc3JjT3B0aW9uID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgY29uc3QgZ2xvYmFsUGFzc2VkID0gaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykgJiYgIWlzRW1wdHkoZ2xvYmFsT3B0aW9ucyk7XHJcbiAgICBjb25zdCBnbG9iYWxPcHRpb24gPSBnbG9iYWxQYXNzZWQgPyBnbG9iYWxPcHRpb25zW29wdGlvbl0gOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBnbG9iYWxFbmFibGVkID0gZ2xvYmFsT3B0aW9uID8gZ2xvYmFsT3B0aW9uLmVuYWJsZWQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTWFpbiByb3V0aW5lXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgaWYgKHNyY09wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNyY09wdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gc3JjT3B0aW9uO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChzcmNPcHRpb24gPT09IG51bGwgJiYgIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgLy8gSWYgcG9zc2libGUsIGV4cGxpY2l0IGNvcHkgZnJvbSBnbG9iYWxzXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChnbG9iYWxPcHRpb24pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KHNyY09wdGlvbikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gRW5zdXJlIHRoYXQgJ2VuYWJsZWQnIGlzIHByb3Blcmx5IHNldC4gSXQgaXMgcmVxdWlyZWQgaW50ZXJuYWxseVxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBmcm9tIG9wdGlvbnMgd2lsbCBhbHdheXMgb3ZlcndyaXRlIHRoZSBleGlzdGluZyB2YWx1ZVxyXG4gICAgLy9cclxuICAgIGxldCBlbmFibGVkID0gdHJ1ZTsgLy8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgaWYgKHNyY09wdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBlbmFibGVkID0gc3JjT3B0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBUYWtlIGZyb20gZ2xvYmFscywgaWYgcHJlc2VudFxyXG4gICAgICAgIGlmIChnbG9iYWxFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IGdsb2JhbE9wdGlvbi5lbmFibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRvTWVyZ2UobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbik7XHJcbiAgICBtZXJnZVRhcmdldFtvcHRpb25dLmVuYWJsZWQgPSBlbmFibGVkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBiaW5hcnkgc2VhcmNoIGZvciBhIHZpc2libGUgaXRlbSBpbiBhIHNvcnRlZCBsaXN0LiBJZiB3ZSBmaW5kIGEgdmlzaWJsZSBpdGVtLCB0aGUgY29kZSB0aGF0IHVzZXNcclxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4gaXRlcmF0ZSBpbiBib3RoIGRpcmVjdGlvbnMgb3ZlciB0aGlzIHNvcnRlZCBsaXN0IHRvIGZpbmQgYWxsIHZpc2libGUgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBJdGVtcyBvcmRlcmVkIGJ5IHN0YXJ0LlxyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIC0xIGlzIGxvd2VyLCAwIGlzIGVxdWFsLCAxIGlzIGhpZ2hlci5cclxuICogQHBhcmFtIGZpZWxkIC0gUHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdKS5cclxuICogQHBhcmFtIGZpZWxkMiAtIFNlY29uZCBwcm9wZXJ0eSBuYW1lIG9uIGFuIGl0ZW0gKFRoYXQgaXMgaXRlbVtmaWVsZF1bZmllbGQyXSkuXHJcbiAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBmb3VuZCBpdGVtIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoQ3VzdG9tKG9yZGVyZWRJdGVtcywgY29tcGFyYXRvciwgZmllbGQsIGZpZWxkMikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQyID09PSB1bmRlZmluZWQgPyBpdGVtW2ZpZWxkXSA6IGl0ZW1bZmllbGRdW2ZpZWxkMl07XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGppaGFhLCBmb3VuZCBhIHZpc2libGUgaXRlbSFcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoUmVzdWx0ID09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBzbWFsbCAtLT4gaW5jcmVhc2UgbG93XHJcbiAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyB2YWx1ZSBpbiBhIHNvcnRlZCBhcnJheS5cclxuICogSWYgaXQgZG9lcyBub3QgZXhpc3QgYnV0IGlzIGluIGJldHdlZW4gb2YgdHdvIHZhbHVlcywgd2UgcmV0dXJuIGVpdGhlciB0aGVcclxuICogb25lIGJlZm9yZSBvciB0aGUgb25lIGFmdGVyLCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCBJZiBpdCBpcyBmb3VuZCwgd2VcclxuICogcmV0dXJuIHRoZSBpbmRleCwgZWxzZSAtMS5cclxuICpcclxuICogQHBhcmFtIG9yZGVyZWRJdGVtcyAtIFNvcnRlZCBhcnJheS5cclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSBzZWFyY2hlZCB2YWx1ZS5cclxuICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gaXRlbXMgdG8gYmUgc2VhcmNoZWQuXHJcbiAqIEBwYXJhbSBzaWRlUHJlZmVyZW5jZSAtIElmIHRoZSB0YXJnZXQgaXMgYmV0d2VlbiB0d28gdmFsdWVzLCBzaG91bGQgdGhlIGluZGV4IG9mIHRoZSBiZWZvcmUgb3IgdGhlIGFmdGVyIGJlIHJldHVybmVkP1xyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIEFuIG9wdGlvbmFsIGNvbXBhcmF0b3IsIHJldHVybmluZyAtMSwgMCwgMSBmb3IgXFw8LCA9PT0sIFxcPi5cclxuICogQHJldHVybnMgVGhlIGluZGV4IG9mIGZvdW5kIHZhbHVlIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoVmFsdWUob3JkZXJlZEl0ZW1zLCB0YXJnZXQsIGZpZWxkLCBzaWRlUHJlZmVyZW5jZSwgY29tcGFyYXRvcikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgcHJldlZhbHVlO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IG5leHRWYWx1ZTtcclxuICAgIGxldCBtaWRkbGU7XHJcbiAgICBjb21wYXJhdG9yID1cclxuICAgICAgICBjb21wYXJhdG9yICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGNvbXBhcmF0b3JcclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYiA/IDAgOiBhIDwgYiA/IC0xIDogMTtcclxuICAgICAgICAgICAgfTtcclxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKSB7XHJcbiAgICAgICAgLy8gZ2V0IGEgbmV3IGd1ZXNzXHJcbiAgICAgICAgbWlkZGxlID0gTWF0aC5mbG9vcigwLjUgKiAoaGlnaCArIGxvdykpO1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IG9yZGVyZWRJdGVtc1tNYXRoLm1heCgwLCBtaWRkbGUgLSAxKV1bZmllbGRdO1xyXG4gICAgICAgIHZhbHVlID0gb3JkZXJlZEl0ZW1zW21pZGRsZV1bZmllbGRdO1xyXG4gICAgICAgIG5leHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIG9yZGVyZWRJdGVtc1tNYXRoLm1pbihvcmRlcmVkSXRlbXMubGVuZ3RoIC0gMSwgbWlkZGxlICsgMSldW2ZpZWxkXTtcclxuICAgICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcihwcmV2VmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCIgPyBNYXRoLm1heCgwLCBtaWRkbGUgLSAxKSA6IG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA8IDAgJiZcclxuICAgICAgICAgICAgY29tcGFyYXRvcihuZXh0VmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dFxyXG4gICAgICAgICAgICByZXR1cm4gc2lkZVByZWZlcmVuY2UgPT0gXCJiZWZvcmVcIlxyXG4gICAgICAgICAgICAgICAgPyBtaWRkbGVcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlkbnQgZmluZCB0aGUgdGFyZ2V0LCB3ZSBuZWVkIHRvIGNoYW5nZSBvdXIgYm91bmRhcmllcy5cclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICAgICAgbG93ID0gbWlkZGxlICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBiaWcgLS0+IGRlY3JlYXNlIGhpZ2hcclxuICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgfVxyXG4gICAgLy8gZGlkbnQgZmluZCBhbnl0aGluZy4gUmV0dXJuIC0xLlxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qXHJcbiAqIEVhc2luZyBGdW5jdGlvbnMuXHJcbiAqIE9ubHkgY29uc2lkZXJpbmcgdGhlIHQgdmFsdWUgZm9yIHRoZSByYW5nZSBbMCwgMV0gPT4gWzAsIDFdLlxyXG4gKlxyXG4gKiBJbnNwaXJhdGlvbjogZnJvbSBodHRwOi8vZ2l6bWEuY29tL2Vhc2luZy9cclxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTRcclxuICovXHJcbmNvbnN0IGVhc2luZ0Z1bmN0aW9ucyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgbm8gZWFzaW5nIGFuZCBubyBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBsaW5lYXIodCkge1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5RdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5DdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRDdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gMSAtIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKyAtLXQgKiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAxNiAqIHQgKiB0ICogdCAqIHQgKiB0IDogMSArIDE2ICogLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFeHBlcmltZW50YWx5IGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRoZSBzY3JvbGxiYXIgZm9yIHRoaXMgYnJvd3Nlci5cclxuICpcclxuICogQHJldHVybnMgVGhlIHdpZHRoIGluIHBpeGVscy5cclxuICovXHJcbmZ1bmN0aW9uIGdldFNjcm9sbEJhcldpZHRoKCkge1xyXG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGlubmVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XHJcbiAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIG91dGVyLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSBcIjIwMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcclxuICAgIGNvbnN0IHcxID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XHJcbiAgICBsZXQgdzIgPSBpbm5lci5vZmZzZXRXaWR0aDtcclxuICAgIGlmICh3MSA9PSB3Mikge1xyXG4gICAgICAgIHcyID0gb3V0ZXIuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcclxuICAgIHJldHVybiB3MSAtIHcyO1xyXG59XHJcbi8vIEBUT0RPOiBUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseS5cclxuLy8gSXQgd29ya3Mgb25seSBmb3Igc2luZ2xlIHByb3BlcnR5IG9iamVjdHMsXHJcbi8vIG90aGVyd2lzZSBpdCBjb21iaW5lcyBhbGwgb2YgdGhlIHR5cGVzIGluIGEgdW5pb24uXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBWMT4gKFxyXG4vLyAgIHBpbGU6IFJlY29yZDxLMSwgdW5kZWZpbmVkIHwgVjE+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBLMSB8IFtLMV1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjFcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIHRvcE1vc3Q8SzEgZXh0ZW5kcyBzdHJpbmcsIEsyIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjI+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgSzMgZXh0ZW5kcyBzdHJpbmcsIFYxLCBWMiwgVjM+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMiB8IFJlY29yZDxLMywgdW5kZWZpbmVkIHwgVjM+Pj5bXSxcclxuLy8gICBhY2Nlc3NvcnM6IFtLMSwgSzIsIEszXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyIHwgVjNcclxuLyoqXHJcbiAqIEdldCB0aGUgdG9wIG1vc3QgcHJvcGVydHkgdmFsdWUgZnJvbSBhIHBpbGUgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHBhcmFtIHBpbGUgLSBBcnJheSBvZiBvYmplY3RzLCBubyByZXF1aXJlZCBmb3JtYXQuXHJcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cclxuICogRm9yIGV4YW1wbGUgYG9iamVjdFsnZm9vJ11bJ2JhciddYCDihpIgYFsnZm9vJywgJ2JhciddYC5cclxuICogQHJldHVybnMgVmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGggZ2l2ZW4gYWNjZXNzb3JzIHBhdGggZnJvbSB0aGUgZmlyc3QgcGlsZSBpdGVtIHdoZXJlIGl0J3Mgbm90IHVuZGVmaW5lZC5cclxuICovXHJcbmZ1bmN0aW9uIHRvcE1vc3QocGlsZSwgYWNjZXNzb3JzKSB7XHJcbiAgICBsZXQgY2FuZGlkYXRlO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjY2Vzc29ycykpIHtcclxuICAgICAgICBhY2Nlc3NvcnMgPSBbYWNjZXNzb3JzXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHBpbGUpIHtcclxuICAgICAgICBpZiAobWVtYmVyKSB7XHJcbiAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG1lbWJlclthY2Nlc3NvcnNbMF1dO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVthY2Nlc3NvcnNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjYW5kaWRhdGU7XHJcbn1cblxuY29uc3QgaHRtbENvbG9ycyA9IHtcbiAgYmxhY2s6IFwiIzAwMDAwMFwiLFxuICBuYXZ5OiBcIiMwMDAwODBcIixcbiAgZGFya2JsdWU6IFwiIzAwMDA4QlwiLFxuICBtZWRpdW1ibHVlOiBcIiMwMDAwQ0RcIixcbiAgYmx1ZTogXCIjMDAwMEZGXCIsXG4gIGRhcmtncmVlbjogXCIjMDA2NDAwXCIsXG4gIGdyZWVuOiBcIiMwMDgwMDBcIixcbiAgdGVhbDogXCIjMDA4MDgwXCIsXG4gIGRhcmtjeWFuOiBcIiMwMDhCOEJcIixcbiAgZGVlcHNreWJsdWU6IFwiIzAwQkZGRlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIiMwMENFRDFcIixcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiIzAwRkE5QVwiLFxuICBsaW1lOiBcIiMwMEZGMDBcIixcbiAgc3ByaW5nZ3JlZW46IFwiIzAwRkY3RlwiLFxuICBhcXVhOiBcIiMwMEZGRkZcIixcbiAgY3lhbjogXCIjMDBGRkZGXCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIjMTkxOTcwXCIsXG4gIGRvZGdlcmJsdWU6IFwiIzFFOTBGRlwiLFxuICBsaWdodHNlYWdyZWVuOiBcIiMyMEIyQUFcIixcbiAgZm9yZXN0Z3JlZW46IFwiIzIyOEIyMlwiLFxuICBzZWFncmVlbjogXCIjMkU4QjU3XCIsXG4gIGRhcmtzbGF0ZWdyYXk6IFwiIzJGNEY0RlwiLFxuICBsaW1lZ3JlZW46IFwiIzMyQ0QzMlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIjM0NCMzcxXCIsXG4gIHR1cnF1b2lzZTogXCIjNDBFMEQwXCIsXG4gIHJveWFsYmx1ZTogXCIjNDE2OUUxXCIsXG4gIHN0ZWVsYmx1ZTogXCIjNDY4MkI0XCIsXG4gIGRhcmtzbGF0ZWJsdWU6IFwiIzQ4M0Q4QlwiLFxuICBtZWRpdW10dXJxdW9pc2U6IFwiIzQ4RDFDQ1wiLFxuICBpbmRpZ286IFwiIzRCMDA4MlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCIjNTU2QjJGXCIsXG4gIGNhZGV0Ymx1ZTogXCIjNUY5RUEwXCIsXG4gIGNvcm5mbG93ZXJibHVlOiBcIiM2NDk1RURcIixcbiAgbWVkaXVtYXF1YW1hcmluZTogXCIjNjZDREFBXCIsXG4gIGRpbWdyYXk6IFwiIzY5Njk2OVwiLFxuICBzbGF0ZWJsdWU6IFwiIzZBNUFDRFwiLFxuICBvbGl2ZWRyYWI6IFwiIzZCOEUyM1wiLFxuICBzbGF0ZWdyYXk6IFwiIzcwODA5MFwiLFxuICBsaWdodHNsYXRlZ3JheTogXCIjNzc4ODk5XCIsXG4gIG1lZGl1bXNsYXRlYmx1ZTogXCIjN0I2OEVFXCIsXG4gIGxhd25ncmVlbjogXCIjN0NGQzAwXCIsXG4gIGNoYXJ0cmV1c2U6IFwiIzdGRkYwMFwiLFxuICBhcXVhbWFyaW5lOiBcIiM3RkZGRDRcIixcbiAgbWFyb29uOiBcIiM4MDAwMDBcIixcbiAgcHVycGxlOiBcIiM4MDAwODBcIixcbiAgb2xpdmU6IFwiIzgwODAwMFwiLFxuICBncmF5OiBcIiM4MDgwODBcIixcbiAgc2t5Ymx1ZTogXCIjODdDRUVCXCIsXG4gIGxpZ2h0c2t5Ymx1ZTogXCIjODdDRUZBXCIsXG4gIGJsdWV2aW9sZXQ6IFwiIzhBMkJFMlwiLFxuICBkYXJrcmVkOiBcIiM4QjAwMDBcIixcbiAgZGFya21hZ2VudGE6IFwiIzhCMDA4QlwiLFxuICBzYWRkbGVicm93bjogXCIjOEI0NTEzXCIsXG4gIGRhcmtzZWFncmVlbjogXCIjOEZCQzhGXCIsXG4gIGxpZ2h0Z3JlZW46IFwiIzkwRUU5MFwiLFxuICBtZWRpdW1wdXJwbGU6IFwiIzkzNzBEOFwiLFxuICBkYXJrdmlvbGV0OiBcIiM5NDAwRDNcIixcbiAgcGFsZWdyZWVuOiBcIiM5OEZCOThcIixcbiAgZGFya29yY2hpZDogXCIjOTkzMkNDXCIsXG4gIHllbGxvd2dyZWVuOiBcIiM5QUNEMzJcIixcbiAgc2llbm5hOiBcIiNBMDUyMkRcIixcbiAgYnJvd246IFwiI0E1MkEyQVwiLFxuICBkYXJrZ3JheTogXCIjQTlBOUE5XCIsXG4gIGxpZ2h0Ymx1ZTogXCIjQUREOEU2XCIsXG4gIGdyZWVueWVsbG93OiBcIiNBREZGMkZcIixcbiAgcGFsZXR1cnF1b2lzZTogXCIjQUZFRUVFXCIsXG4gIGxpZ2h0c3RlZWxibHVlOiBcIiNCMEM0REVcIixcbiAgcG93ZGVyYmx1ZTogXCIjQjBFMEU2XCIsXG4gIGZpcmVicmljazogXCIjQjIyMjIyXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiI0I4ODYwQlwiLFxuICBtZWRpdW1vcmNoaWQ6IFwiI0JBNTVEM1wiLFxuICByb3N5YnJvd246IFwiI0JDOEY4RlwiLFxuICBkYXJra2hha2k6IFwiI0JEQjc2QlwiLFxuICBzaWx2ZXI6IFwiI0MwQzBDMFwiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiI0M3MTU4NVwiLFxuICBpbmRpYW5yZWQ6IFwiI0NENUM1Q1wiLFxuICBwZXJ1OiBcIiNDRDg1M0ZcIixcbiAgY2hvY29sYXRlOiBcIiNEMjY5MUVcIixcbiAgdGFuOiBcIiNEMkI0OENcIixcbiAgbGlnaHRncmV5OiBcIiNEM0QzRDNcIixcbiAgcGFsZXZpb2xldHJlZDogXCIjRDg3MDkzXCIsXG4gIHRoaXN0bGU6IFwiI0Q4QkZEOFwiLFxuICBvcmNoaWQ6IFwiI0RBNzBENlwiLFxuICBnb2xkZW5yb2Q6IFwiI0RBQTUyMFwiLFxuICBjcmltc29uOiBcIiNEQzE0M0NcIixcbiAgZ2FpbnNib3JvOiBcIiNEQ0RDRENcIixcbiAgcGx1bTogXCIjRERBMEREXCIsXG4gIGJ1cmx5d29vZDogXCIjREVCODg3XCIsXG4gIGxpZ2h0Y3lhbjogXCIjRTBGRkZGXCIsXG4gIGxhdmVuZGVyOiBcIiNFNkU2RkFcIixcbiAgZGFya3NhbG1vbjogXCIjRTk5NjdBXCIsXG4gIHZpb2xldDogXCIjRUU4MkVFXCIsXG4gIHBhbGVnb2xkZW5yb2Q6IFwiI0VFRThBQVwiLFxuICBsaWdodGNvcmFsOiBcIiNGMDgwODBcIixcbiAga2hha2k6IFwiI0YwRTY4Q1wiLFxuICBhbGljZWJsdWU6IFwiI0YwRjhGRlwiLFxuICBob25leWRldzogXCIjRjBGRkYwXCIsXG4gIGF6dXJlOiBcIiNGMEZGRkZcIixcbiAgc2FuZHlicm93bjogXCIjRjRBNDYwXCIsXG4gIHdoZWF0OiBcIiNGNURFQjNcIixcbiAgYmVpZ2U6IFwiI0Y1RjVEQ1wiLFxuICB3aGl0ZXNtb2tlOiBcIiNGNUY1RjVcIixcbiAgbWludGNyZWFtOiBcIiNGNUZGRkFcIixcbiAgZ2hvc3R3aGl0ZTogXCIjRjhGOEZGXCIsXG4gIHNhbG1vbjogXCIjRkE4MDcyXCIsXG4gIGFudGlxdWV3aGl0ZTogXCIjRkFFQkQ3XCIsXG4gIGxpbmVuOiBcIiNGQUYwRTZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiI0ZBRkFEMlwiLFxuICBvbGRsYWNlOiBcIiNGREY1RTZcIixcbiAgcmVkOiBcIiNGRjAwMDBcIixcbiAgZnVjaHNpYTogXCIjRkYwMEZGXCIsXG4gIG1hZ2VudGE6IFwiI0ZGMDBGRlwiLFxuICBkZWVwcGluazogXCIjRkYxNDkzXCIsXG4gIG9yYW5nZXJlZDogXCIjRkY0NTAwXCIsXG4gIHRvbWF0bzogXCIjRkY2MzQ3XCIsXG4gIGhvdHBpbms6IFwiI0ZGNjlCNFwiLFxuICBjb3JhbDogXCIjRkY3RjUwXCIsXG4gIGRhcmtvcmFuZ2U6IFwiI0ZGOEMwMFwiLFxuICBsaWdodHNhbG1vbjogXCIjRkZBMDdBXCIsXG4gIG9yYW5nZTogXCIjRkZBNTAwXCIsXG4gIGxpZ2h0cGluazogXCIjRkZCNkMxXCIsXG4gIHBpbms6IFwiI0ZGQzBDQlwiLFxuICBnb2xkOiBcIiNGRkQ3MDBcIixcbiAgcGVhY2hwdWZmOiBcIiNGRkRBQjlcIixcbiAgbmF2YWpvd2hpdGU6IFwiI0ZGREVBRFwiLFxuICBtb2NjYXNpbjogXCIjRkZFNEI1XCIsXG4gIGJpc3F1ZTogXCIjRkZFNEM0XCIsXG4gIG1pc3R5cm9zZTogXCIjRkZFNEUxXCIsXG4gIGJsYW5jaGVkYWxtb25kOiBcIiNGRkVCQ0RcIixcbiAgcGFwYXlhd2hpcDogXCIjRkZFRkQ1XCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiI0ZGRjBGNVwiLFxuICBzZWFzaGVsbDogXCIjRkZGNUVFXCIsXG4gIGNvcm5zaWxrOiBcIiNGRkY4RENcIixcbiAgbGVtb25jaGlmZm9uOiBcIiNGRkZBQ0RcIixcbiAgZmxvcmFsd2hpdGU6IFwiI0ZGRkFGMFwiLFxuICBzbm93OiBcIiNGRkZBRkFcIixcbiAgeWVsbG93OiBcIiNGRkZGMDBcIixcbiAgbGlnaHR5ZWxsb3c6IFwiI0ZGRkZFMFwiLFxuICBpdm9yeTogXCIjRkZGRkYwXCIsXG4gIHdoaXRlOiBcIiNGRkZGRkZcIixcbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gKi9cbmxldCBDb2xvclBpY2tlciQxID0gY2xhc3MgQ29sb3JQaWNrZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwaXhlbFJhdGlvID0gMSkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiAyODkgLyAyLCB5OiAyODkgLyAyIH07XG4gICAgdGhpcy5yID0gMjg5ICogMC40OTtcbiAgICB0aGlzLmNvbG9yID0geyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhOiAxLjAgfTtcbiAgICB0aGlzLmh1ZUNpcmNsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmluaXRpYWxDb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5wcmV2aW91c0NvbG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLy8gYm91bmQgYnlcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gKCkgPT4ge307XG5cbiAgICAvLyBjcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgIHRoaXMuX2NyZWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgaW5zZXJ0cyB0aGUgY29sb3JQaWNrZXIgaW50byBhIGRpdiBmcm9tIHRoZSBET01cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAgICovXG4gIGluc2VydFRvKGNvbnRhaW5lcikge1xuICAgIGlmICh0aGlzLmhhbW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuXG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldFVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIG9uIGFwcGx5IGFuZCBzYXZlLiBCaW5kIGl0IHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgc2V0Q2xvc2VDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIGNsb3NpbmcgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gaHRtbENvbG9yc1tjb2xvcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29sb3Igb2YgdGhlIGNvbG9yUGlja2VyXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAncmVkJyAgICAgICAgICAgICAgICAgICAtLT4gSFRNTCBjb2xvciBzdHJpbmdcbiAgICogJyNmZmZmZmYnICAgICAgICAgICAgICAgLS0+IGhleCBzdHJpbmdcbiAgICogJ3JnYigyNTUsMjU1LDI1NSknICAgICAgLS0+IHJnYiBzdHJpbmdcbiAgICogJ3JnYmEoMjU1LDI1NSwyNTUsMS4wKScgLS0+IHJnYmEgc3RyaW5nXG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NX0gICAgIC0tPiByZ2Igb2JqZWN0XG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NSxhOjEuMH0gLS0+IHJnYmEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgb2JqZWN0fSBjb2xvclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqL1xuICBzZXRDb2xvcihjb2xvciwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICBpZiAoY29sb3IgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJnYmE7XG5cbiAgICAvLyBpZiBhIGh0bWwgY29sb3Igc2hvcnRoYW5kIGlzIHVzZWQsIGNvbnZlcnQgdG8gaGV4XG4gICAgY29uc3QgaHRtbENvbG9yID0gdGhpcy5faXNDb2xvclN0cmluZyhjb2xvcik7XG4gICAgaWYgKGh0bWxDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IGh0bWxDb2xvcjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3JtYXRcbiAgICBpZiAoaXNTdHJpbmcoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICBpZiAoaXNWYWxpZFJHQihjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDQpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA1KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYmFBcnJheVswXSwgZzogcmdiYUFycmF5WzFdLCBiOiByZ2JhQXJyYXlbMl0sIGE6IDEuMCB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkUkdCQShjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDUpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA2KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7XG4gICAgICAgICAgcjogcmdiYUFycmF5WzBdLFxuICAgICAgICAgIGc6IHJnYmFBcnJheVsxXSxcbiAgICAgICAgICBiOiByZ2JhQXJyYXlbMl0sXG4gICAgICAgICAgYTogcmdiYUFycmF5WzNdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZ2JPYmogPSBoZXhUb1JHQihjb2xvcik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYk9iai5yLCBnOiByZ2JPYmouZywgYjogcmdiT2JqLmIsIGE6IDEuMCB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbG9yLnIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmIgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhbHBoYSA9IGNvbG9yLmEgIT09IHVuZGVmaW5lZCA/IGNvbG9yLmEgOiBcIjEuMFwiO1xuICAgICAgICAgIHJnYmEgPSB7IHI6IGNvbG9yLnIsIGc6IGNvbG9yLmcsIGI6IGNvbG9yLmIsIGE6IGFscGhhIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBpZiAocmdiYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biBjb2xvciBwYXNzZWQgdG8gdGhlIGNvbG9yUGlja2VyLiBTdXBwb3J0ZWQgYXJlIHN0cmluZ3M6IHJnYiwgaGV4LCByZ2JhLiBPYmplY3Q6IHJnYiAoe3I6cixnOmcsYjpiLFthOmFdfSkuIFN1cHBsaWVkOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29sb3IpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzaG93cyB0aGUgY29sb3IgcGlja2VyLlxuICAgKiBUaGUgaHVlIGNpcmNsZSBpcyBjb25zdHJ1Y3RlZCBvbmNlIGFuZCBzdG9yZWQuXG4gICAqL1xuICBzaG93KCkge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHRoaXMuX2dlbmVyYXRlSHVlQ2lyY2xlKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwaWNrZXIuIElzIGNhbGxlZCBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogT3B0aW9uYWwgYm9vbGVhbiB0byBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIGVhc3kgYWNjZXNzIGxhdGVyIG9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZVByZXZpb3VzPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGlkZShzdG9yZVByZXZpb3VzID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBwcmV2aW91cyBjb2xvciBmb3IgbmV4dCB0aW1lO1xuICAgIGlmIChzdG9yZVByZXZpb3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQ29sb3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBsaWVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuaW5pdGlhbENvbG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICAgIC8vIGNhbGwgdGhlIGNsb3NpbmcgY2FsbGJhY2ssIHJlc3RvcmluZyB0aGUgb25jbGljayBtZXRob2QuXG4gICAgLy8gdGhpcyBpcyBpbiBhIHNldFRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgdGhlIHNob3cgYWdhaW4gYmVmb3JlIHRoZSBjbGljayBpcyBkb25lLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gdGhlIHNhdmUgYnV0dG9uLiBTYXZlcyBhbmQgaGlkZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2F2ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuX2hpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb3VuZCB0byBhcHBseSBidXR0b24uIFNhdmVzIGJ1dCBkb2VzIG5vdCBjbG9zZS4gSXMgdW5kb25lIGJ5IHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FwcGx5KCkge1xuICAgIHRoaXMuYXBwbGllZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogbG9hZCB0aGUgY29sb3IgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IodGhpcy5wcmV2aW91c0NvbG9yLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KFwiVGhlcmUgaXMgbm8gbGFzdCBjb2xvciB0byBsb2FkLi4uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGNvbG9yLCBwbGFjZSB0aGUgcGlja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZ2JhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NldEluaXRpYWw9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIGNvbG9yXG4gICAgaWYgKHNldEluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgcmdiYSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvciA9IHJnYmE7XG4gICAgY29uc3QgaHN2ID0gUkdCVG9IU1YocmdiYS5yLCByZ2JhLmcsIHJnYmEuYik7XG5cbiAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAyICogTWF0aC5QSTtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLnIgKiBoc3YucztcbiAgICBjb25zdCB4ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcbiAgICBjb25zdCB5ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIHggLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICB5IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudEhlaWdodCArIFwicHhcIjtcblxuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcihyZ2JhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBvcGFjaXR5IGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0T3BhY2l0eSh2YWx1ZSkge1xuICAgIHRoaXMuY29sb3IuYSA9IHZhbHVlIC8gMTAwO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBicmlnaHRuZXNzIGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJpZ2h0bmVzcyh2YWx1ZSkge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi52ID0gdmFsdWUgLyAxMDA7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgY29sb3IgcGlja2VyLiBBIGJsYWNrIGNpcmNsZSBvdmVybGF5cyB0aGUgaHVlIGNpcmNsZSB0byBtaW1pYyB0aGUgYnJpZ2h0bmVzcyBkZWNyZWFzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBpY2tlcihyZ2JhID0gdGhpcy5jb2xvcikge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgfVxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuXG4gICAgY3R4LnB1dEltYWdlRGF0YSh0aGlzLmh1ZUNpcmNsZSwgMCwgMCk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLDAsMCxcIiArICgxIC0gaHN2LnYpICsgXCIpXCI7XG4gICAgY3R4LmNpcmNsZSh0aGlzLmNlbnRlckNvb3JkaW5hdGVzLngsIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSwgdGhpcy5yKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudmFsdWUgPSAxMDAgKiBoc3YudjtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IDEwMCAqIHJnYmEuYTtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgY3JlYXRlIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFNpemUoKSB7XG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLndpZHRoID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuaGVpZ2h0ID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhbGwgZG9tIGVsZW1lbnRzXG4gICAqIFRPRE86IGNsZWFudXAsIGxvdHMgb2Ygc2ltaWxhciBkb20gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5mcmFtZS5jbGFzc05hbWUgPSBcInZpcy1jb2xvci1waWNrZXJcIjtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsYXNzTmFtZSA9IFwidmlzLXNlbGVjdG9yXCI7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcblxuICAgIGlmICghdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KSB7XG4gICAgICBjb25zdCBub0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7XG4gICAgICBub0NhbnZhcy5zdHlsZS5jb2xvciA9IFwicmVkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5wYWRkaW5nID0gXCIxMHB4XCI7XG4gICAgICBub0NhbnZhcy5pbm5lclRleHQgPSBcIkVycm9yOiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MIGNhbnZhc1wiO1xuICAgICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgKGN0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAxKTtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXNcbiAgICAgICAgLmdldENvbnRleHQoXCIyZFwiKVxuICAgICAgICAuc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbG9yXCI7XG5cbiAgICB0aGlzLm9wYWNpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eURpdi5jbGFzc05hbWUgPSBcInZpcy1vcGFjaXR5XCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0Rpdi5jbGFzc05hbWUgPSBcInZpcy1icmlnaHRuZXNzXCI7XG5cbiAgICB0aGlzLmFycm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmFycm93RGl2LmNsYXNzTmFtZSA9IFwidmlzLWFycm93XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS50eXBlID0gXCJyYW5nZVwiOyAvLyBOb3Qgc3VwcG9ydGVkIG9uIElFOVxuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWluID0gXCIwXCI7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5tYXggPSBcIjEwMFwiO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETzogQWRkIHNvbWUgZXJyb3IgaGFuZGxpbmcuXG4gICAgfVxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gXCIxMDBcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5jbGFzc05hbWUgPSBcInZpcy1yYW5nZVwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2LmFwcGVuZENoaWxkKHRoaXMub3BhY2l0eVJhbmdlKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuYXBwZW5kQ2hpbGQodGhpcy5icmlnaHRuZXNzUmFuZ2UpO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLWJyaWdodG5lc3NcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbC5pbm5lclRleHQgPSBcImJyaWdodG5lc3M6XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLW9wYWNpdHlcIjtcbiAgICB0aGlzLm9wYWNpdHlMYWJlbC5pbm5lclRleHQgPSBcIm9wYWNpdHk6XCI7XG5cbiAgICB0aGlzLm5ld0NvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmNsYXNzTmFtZSA9IFwidmlzLW5ldy1jb2xvclwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuaW5uZXJUZXh0ID0gXCJuZXdcIjtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1pbml0aWFsLWNvbG9yXCI7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuaW5uZXJUZXh0ID0gXCJpbml0aWFsXCI7XG5cbiAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1jYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBcImNhbmNlbFwiO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpO1xuXG4gICAgdGhpcy5hcHBseUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5pbm5lclRleHQgPSBcImFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fYXBwbHkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5zYXZlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtc2F2ZVwiO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5pbm5lclRleHQgPSBcInNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24ub25jbGljayA9IHRoaXMuX3NhdmUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubG9hZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5sb2FkQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtbG9hZFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5pbm5lclRleHQgPSBcImxvYWQgbGFzdFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fbG9hZExhc3QuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFycm93RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0xhYmVsKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uZXdDb2xvckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmluaXRpYWxDb2xvckRpdik7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2FuY2VsQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYXBwbHlCdXR0b24pO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5zYXZlQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubG9hZEJ1dHRvbik7XG4gIH1cblxuICAvKipcbiAgICogYmluZCBoYW1tZXIgdG8gdGhlIGNvbG9yIHBpY2tlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lciQxKHRoaXMuY29sb3JQaWNrZXJDYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuaGFtbWVyLm9uKFwiaGFtbWVyLmlucHV0XCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRmlyc3QpIHtcbiAgICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5zdGFydFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5tb3ZlXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIGh1ZSBjaXJjbGUuIFRoaXMgaXMgcmVsYXRpdmVseSBoZWF2eSAoMjAwbXMpIGFuZCBpcyBkb25lIG9ubHkgb25jZSBvbiB0aGUgZmlyc3QgdGltZSBpdCBpcyBzaG93bi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZW5lcmF0ZUh1ZUNpcmNsZSgpIHtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIDEpO1xuICAgICAgfVxuICAgICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgaCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gZHJhdyBodWUgY2lyY2xlXG4gICAgICBsZXQgeCwgeSwgaHVlLCBzYXQ7XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiB3ICogMC41LCB5OiBoICogMC41IH07XG4gICAgICB0aGlzLnIgPSAwLjQ5ICogdztcbiAgICAgIGNvbnN0IGFuZ2xlQ29udmVydCA9ICgyICogTWF0aC5QSSkgLyAzNjA7XG4gICAgICBjb25zdCBoZmFjID0gMSAvIDM2MDtcbiAgICAgIGNvbnN0IHNmYWMgPSAxIC8gdGhpcy5yO1xuICAgICAgbGV0IHJnYjtcbiAgICAgIGZvciAoaHVlID0gMDsgaHVlIDwgMzYwOyBodWUrKykge1xuICAgICAgICBmb3IgKHNhdCA9IDA7IHNhdCA8IHRoaXMucjsgc2F0KyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy54ICsgc2F0ICogTWF0aC5zaW4oYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICB5ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy55ICsgc2F0ICogTWF0aC5jb3MoYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICByZ2IgPSBIU1ZUb1JHQihodWUgKiBoZmFjLCBzYXQgKiBzZmFjLCAxKTtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2IoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCI7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KHggLSAwLjUsIHkgLSAwLjUsIDIsIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMSlcIjtcbiAgICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIHRoaXMuaHVlQ2lyY2xlID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIHNlbGVjdG9yLiBUaGlzIGlzIGNhbGxlZCBieSBoYW1tZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlU2VsZWN0b3IoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb2xvclBpY2tlckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gZXZlbnQuY2VudGVyLnggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gZXZlbnQuY2VudGVyLnkgLSByZWN0LnRvcDtcblxuICAgIGNvbnN0IGNlbnRlclkgPSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyRGl2LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBjZW50ZXJYID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRXaWR0aDtcblxuICAgIGNvbnN0IHggPSBsZWZ0IC0gY2VudGVyWDtcbiAgICBjb25zdCB5ID0gdG9wIC0gY2VudGVyWTtcblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih4LCB5KTtcbiAgICBjb25zdCByYWRpdXMgPSAwLjk4ICogTWF0aC5taW4oTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpLCBjZW50ZXJYKTtcblxuICAgIGNvbnN0IG5ld1RvcCA9IE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclk7XG4gICAgY29uc3QgbmV3TGVmdCA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclg7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUudG9wID1cbiAgICAgIG5ld1RvcCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLmxlZnQgPVxuICAgICAgbmV3TGVmdCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCArIFwicHhcIjtcblxuICAgIC8vIHNldCBjb2xvclxuICAgIGxldCBoID0gYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgIGggPSBoIDwgMCA/IGggKyAxIDogaDtcbiAgICBjb25zdCBzID0gcmFkaXVzIC8gdGhpcy5yO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi5oID0gaDtcbiAgICBoc3YucyA9IHM7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuXG4gICAgLy8gdXBkYXRlIHByZXZpZXdzXG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmNvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gIH1cbn07XG5cbi8qKlxuICogV3JhcCBnaXZlbiB0ZXh0IChsYXN0IGFyZ3VtZW50KSBpbiBIVE1MIGVsZW1lbnRzIChhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cykuXG4gKlxuICogQHBhcmFtIHsuLi5hbnl9IHJlc3QgLSBMaXN0IG9mIHRhZyBuYW1lcyBmb2xsb3dlZCBieSBpbm5lciB0ZXh0LlxuICogQHJldHVybnMgQW4gZWxlbWVudCBvciBhIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gd3JhcEluVGFnKC4uLnJlc3QpIHtcbiAgaWYgKHJlc3QubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cy5cIik7XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdFswXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmVzdFswXSk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoLi4ucmVzdC5zbGljZSgxKSkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGZvciBhbGwgcHJvcGVydGllcyBvZiB0aGlzLnBvc3NpYmxlIG9wdGlvbnMsIHlvdSBjYW4gc3VwcGx5IHRoZSBwcm9wZXJ0eSBuYW1lIGluIGFueSBmb3JtIHRvIGxpc3QgdGhlIG9wdGlvbnMuXG4gKiBCb29sZWFuIG9wdGlvbnMgYXJlIHJlY29nbmlzZWQgYXMgQm9vbGVhblxuICogTnVtYmVyIG9wdGlvbnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtkZWZhdWx0IHZhbHVlLCBtaW4gdmFsdWUsIG1heCB2YWx1ZSwgc3RlcHNpemVdXG4gKiBDb2xvcnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFsnY29sb3InLCAnI2ZmZmZmZiddXG4gKiBTdHJpbmdzIHdpdGggc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtvcHRpb24xLCBvcHRpb24yLCBvcHRpb24zLCAuLl1cbiAqXG4gKiBUaGUgb3B0aW9ucyBhcmUgbWF0Y2hlZCB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiBlYWNoIG9mIHRoZSBtb2R1bGVzIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYXJlXG4gKi9cbmxldCBDb25maWd1cmF0b3IkMSA9IGNsYXNzIENvbmZpZ3VyYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50TW9kdWxlICAgICAgICB8IHRoZSBsb2NhdGlvbiB3aGVyZSBwYXJlbnRNb2R1bGUuc2V0T3B0aW9ucygpIGNhbiBiZSBjYWxsZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRDb250YWluZXIgICAgfCB0aGUgZGVmYXVsdCBjb250YWluZXIgb2YgdGhlIG1vZHVsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlndXJlT3B0aW9ucyAgICB8IHRoZSBmdWxseSBjb25maWd1cmVkIGFuZCBwcmVkZWZpbmVkIG9wdGlvbnMgc2V0IGZvdW5kIGluIGFsbE9wdGlvbnMuanNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBpeGVsUmF0aW8gICAgICAgICAgfCBjYW52YXMgcGl4ZWwgcmF0aW9cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGlkZU9wdGlvbiAgICAgICAgfCBjdXN0b20gbG9naWMgdG8gZHluYW1pY2FsbHkgaGlkZSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnRNb2R1bGUsXG4gICAgZGVmYXVsdENvbnRhaW5lcixcbiAgICBjb25maWd1cmVPcHRpb25zLFxuICAgIHBpeGVsUmF0aW8gPSAxLFxuICAgIGhpZGVPcHRpb24gPSAoKSA9PiBmYWxzZVxuICApIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudE1vZHVsZTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyO1xuICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZU9wdGlvbiA9IGhpZGVPcHRpb247XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5wb3B1cENvdW50ZXIgPSAwO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgIGNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICAgICAgc2hvd0J1dHRvbjogdHJ1ZSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuY29uZmlndXJlT3B0aW9ucyA9IGNvbmZpZ3VyZU9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0ge307XG4gICAgdGhpcy5kb21FbGVtZW50cyA9IFtdO1xuICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB0aGlzLnBvcHVwTGltaXQgPSA1O1xuICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgdGhpcy5jb2xvclBpY2tlciA9IG5ldyBDb2xvclBpY2tlciQxKHBpeGVsUmF0aW8pO1xuICAgIHRoaXMud3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGFsbCBvcHRpb25zLlxuICAgKiBCZWNhdXNlIGFsbCBtb2R1bGVzIHBhcnNlIHRoZWlyIG9wdGlvbnMgYnkgdGhlbXNlbHZlcywgd2UganVzdCB1c2UgdGhlaXIgb3B0aW9ucy4gV2UgY29weSB0aGVtIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXNldCB0aGUgcG9wdXAgaGlzdG9yeSBiZWNhdXNlIHRoZSBpbmRpY2VzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuXG4gICAgICBsZXQgZW5hYmxlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuam9pbigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMgY2Fubm90IGJlIG51bGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0J1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dCdXR0b24gPSBvcHRpb25zLnNob3dCdXR0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIGVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICBlbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlT3B0aW9uc1xuICAgKi9cbiAgc2V0TW9kdWxlT3B0aW9ucyhtb2R1bGVPcHRpb25zKSB7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0gbW9kdWxlT3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy5maWx0ZXI7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gdGhpcy5jb25maWd1cmVPcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlndXJlT3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc2hvdyA9IGZpbHRlcihvcHRpb24sIFtdKTtcbiAgICAgICAgICBzaG93ID1cbiAgICAgICAgICAgIHNob3cgfHxcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbb3B0aW9uXSwgW29wdGlvbl0sIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIuaW5kZXhPZihvcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIGxpbmVicmVhayBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAgICAgICBpZiAoY291bnRlciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VJdGVtKFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYSBoZWFkZXIgZm9yIHRoZSBjYXRlZ29yeVxuICAgICAgICAgIHRoaXMuX21ha2VIZWFkZXIob3B0aW9uKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3ViIG9wdGlvbnNcbiAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dKTtcbiAgICAgICAgfVxuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21ha2VCdXR0b24oKTtcbiAgICB0aGlzLl9wdXNoKCk7XG4gICAgLy9+IHRoaXMuY29sb3JQaWNrZXIuaW5zZXJ0VG8odGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYXcgYWxsIERPTSBlbGVtZW50cyBvbiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHVzaCgpIHtcbiAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMud3JhcHBlci5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uLXdyYXBwZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tRWxlbWVudHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Nob3dQb3B1cElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogZGVsZXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53cmFwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcblxuICAgIHRoaXMuX3JlbW92ZVBvcHVwKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBhY3R1YWxPcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsdWUocGF0aCkge1xuICAgIGxldCBiYXNlID0gdGhpcy5tb2R1bGVPcHRpb25zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJhc2VbcGF0aFtpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBiYXNlID0gYmFzZVtwYXRoW2ldXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGwgb3B0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGVkIGluIGFuIGl0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBkb21FbGVtZW50c1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VJdGVtKHBhdGgsIC4uLmRvbUVsZW1lbnRzKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpdGVtLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1pdGVtIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgICBkb21FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogaGVhZGVyIGZvciBtYWpvciBzdWJqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VIZWFkZXIobmFtZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1oZWFkZXJcIjtcbiAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZTtcbiAgICB0aGlzLl9tYWtlSXRlbShbXSwgZGl2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgbGFiZWwsIGlmIGl0IGlzIGFuIG9iamVjdCBsYWJlbCwgaXQgZ2V0cyBkaWZmZXJlbnQgc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RMYWJlbFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUxhYmVsKG5hbWUsIHBhdGgsIG9iamVjdExhYmVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWxhYmVsIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgaWYgKG9iamVjdExhYmVsID09PSB0cnVlKSB7XG4gICAgICB3aGlsZSAoZGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIGRpdi5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoXCJpXCIsIFwiYlwiLCBuYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBuYW1lICsgXCI6XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGRyb3Bkb3duIGxpc3QgZm9yIG11bHRpcGxlIHBvc3NpYmxlIHN0cmluZyBvcHRvaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIHNlbGVjdC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctc2VsZWN0XCI7XG4gICAgbGV0IHNlbGVjdGVkVmFsdWUgPSAwO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgb3B0aW9uLnZhbHVlID0gYXJyW2ldO1xuICAgICAgaWYgKGkgPT09IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gXCJzZWxlY3RlZFwiO1xuICAgICAgfVxuICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGFycltpXTtcbiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBzZWxlY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSByYW5nZSBvYmplY3QgZm9yIG51bWVyaWMgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VSYW5nZShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJyWzBdO1xuICAgIGNvbnN0IG1pbiA9IGFyclsxXTtcbiAgICBjb25zdCBtYXggPSBhcnJbMl07XG4gICAgY29uc3Qgc3RlcCA9IGFyclszXTtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICByYW5nZS5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctcmFuZ2VcIjtcbiAgICB0cnkge1xuICAgICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gbm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHJhbmdlLm1pbiA9IG1pbjtcbiAgICAgIHJhbmdlLm1heCA9IG1heDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICByYW5nZS5zdGVwID0gc3RlcDtcblxuICAgIC8vIHNldCB1cCB0aGUgcG9wdXAgc2V0dGluZ3MgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQuXG4gICAgbGV0IHBvcHVwU3RyaW5nID0gXCJcIjtcbiAgICBsZXQgcG9wdXBWYWx1ZSA9IDA7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmFjdG9yID0gMS4yO1xuICAgICAgaWYgKHZhbHVlIDwgMCAmJiB2YWx1ZSAqIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgKiBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIC8gZmFjdG9yIDwgbWluKSB7XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGguY2VpbCh2YWx1ZSAvIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5taW47XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAqIGZhY3RvciA+IG1heCAmJiBtYXggIT09IDEpIHtcbiAgICAgICAgcmFuZ2UubWF4ID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1heDtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfVxuICAgICAgcmFuZ2UudmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlaW5wdXRcIjtcbiAgICBpbnB1dC52YWx1ZSA9IHJhbmdlLnZhbHVlO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgbWUuX3VwZGF0ZShOdW1iZXIodGhpcy52YWx1ZSksIHBhdGgpO1xuICAgIH07XG4gICAgcmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgcmFuZ2UsIGlucHV0KTtcblxuICAgIC8vIGlmIGEgcG9wdXAgaXMgbmVlZGVkIEFORCBpdCBoYXMgbm90IGJlZW4gc2hvd24gZm9yIHRoaXMgdmFsdWUsIHNob3cgaXQuXG4gICAgaWYgKHBvcHVwU3RyaW5nICE9PSBcIlwiICYmIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gIT09IHBvcHVwVmFsdWUpIHtcbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gPSBwb3B1cFZhbHVlO1xuICAgICAgdGhpcy5fc2V0dXBQb3B1cChwb3B1cFN0cmluZywgaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGJ1dHRvbiBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvblwiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uaW5uZXJUZXh0ID0gXCJnZW5lcmF0ZSBvcHRpb25zXCI7XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9wcmludE9wdGlvbnMoKTtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3ZlciA9ICgpID0+IHtcbiAgICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlclwiO1xuICAgICAgfTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLm9ubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXJcIjtcblxuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKHRoaXMub3B0aW9uc0NvbnRhaW5lcik7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goZ2VuZXJhdGVCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlIHRoZSBwb3B1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldHVwUG9wdXAoc3RyaW5nLCBpbmRleCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5wb3B1cENvdW50ZXIgPCB0aGlzLnBvcHVwTGltaXRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBkaXYuaWQgPSBcInZpcy1jb25maWd1cmF0aW9uLXBvcHVwXCI7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmlubmVyVGV4dCA9IHN0cmluZztcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyICs9IDE7XG4gICAgICB0aGlzLnBvcHVwRGl2ID0geyBodG1sOiBkaXYsIGluZGV4OiBpbmRleCB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUgdGhlIHBvcHVwIGZyb20gdGhlIGRvbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBwb3B1cCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd1BvcHVwSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMucG9wdXBEaXYuaHRtbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudHNbdGhpcy5wb3B1cERpdi5pbmRleF07XG4gICAgICBjb25zdCByZWN0ID0gY29ycmVzcG9uZGluZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5zdHlsZS50b3AgPSByZWN0LnRvcCAtIDMwICsgXCJweFwiOyAvLyAzMCBpcyB0aGUgaGVpZ2h0O1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpO1xuICAgICAgdGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICB9LCAxNTAwKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuZGVsZXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfSwgMTgwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBjaGVja2JveCBmb3IgYm9vbGVhbiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQ2hlY2tib3goZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy5jaGVja2VkLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgY2hlY2tib3gpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciBzdHJpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZVRleHRJbnB1dChkZWZhdWx0VmFsdWUsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgY2hlY2tib3gudHlwZSA9IFwidGV4dFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy10ZXh0XCI7XG4gICAgY2hlY2tib3gudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy52YWx1ZSwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY29sb3IgZmllbGQgd2l0aCBhIGNvbG9yIHBpY2tlciBmb3IgY29sb3IgZmllbGRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGFyclsxXTtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICE9PSBcIm5vbmVcIikge1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayBub25lXCI7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbG9yIDogdmFsdWU7XG4gICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogdXNlZCBieSB0aGUgY29sb3IgYnV0dG9ucyB0byBjYWxsIHRoZSBjb2xvciBwaWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBkaXZcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpIHtcbiAgICAvLyBjbGVhciB0aGUgY2FsbGJhY2sgZnJvbSB0aGlzIGRpdlxuICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKGRpdik7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zaG93KCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENvbG9yKHZhbHVlKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldFVwZGF0ZUNhbGxiYWNrKChjb2xvcikgPT4ge1xuICAgICAgY29uc3QgY29sb3JTdHJpbmcgPVxuICAgICAgICBcInJnYmEoXCIgKyBjb2xvci5yICsgXCIsXCIgKyBjb2xvci5nICsgXCIsXCIgKyBjb2xvci5iICsgXCIsXCIgKyBjb2xvci5hICsgXCIpXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JTdHJpbmc7XG4gICAgICB0aGlzLl91cGRhdGUoY29sb3JTdHJpbmcsIHBhdGgpO1xuICAgIH0pO1xuXG4gICAgLy8gb24gY2xvc2Ugb2YgdGhlIGNvbG9ycGlja2VyLCByZXN0b3JlIHRoZSBjYWxsYmFjay5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENsb3NlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcGFyc2UgYW4gb2JqZWN0IGFuZCBkcmF3IHRoZSBjb3JyZWN0IGl0ZW1zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtBcnJheX0gW3BhdGg9W11dICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tPbmx5PWZhbHNlXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVPYmplY3Qob2JqLCBwYXRoID0gW10sIGNoZWNrT25seSA9IGZhbHNlKSB7XG4gICAgbGV0IHNob3cgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCB2aXNpYmxlSW5TZXQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHN1Yk9iaiBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBzdWJPYmopKSB7XG4gICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICBjb25zdCBpdGVtID0gb2JqW3N1Yk9ial07XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgc3ViT2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIoc3ViT2JqLCBwYXRoKTtcblxuICAgICAgICAgIC8vIGlmIG5lZWRlZCB3ZSBtdXN0IGdvIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICAgICAgaWYgKHNob3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAgICAgICBpdGVtIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHNob3cgPSB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGNoZWNrT25seSA9PT0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmlzaWJsZUluU2V0ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKG5ld1BhdGgpO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycmF5KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlVGV4dElucHV0KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIHNraXAgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5oaWRlT3B0aW9uKHBhdGgsIHN1Yk9iaiwgdGhpcy5tb2R1bGVPcHRpb25zKSkge1xuICAgICAgICAgICAgICAvLyBpbml0aWFsbHkgY29sbGFwc2Ugb3B0aW9ucyB3aXRoIGFuIGRpc2FibGVkIGVuYWJsZWQgb3B0aW9uLlxuICAgICAgICAgICAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkUGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShuZXdQYXRoLCBcImVuYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoZW5hYmxlZFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkVmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgICB2aXNpYmxlSW5TZXQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlQ2hlY2tib3goaXRlbSwgZW5hYmxlZFZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwoc3ViT2JqLCBuZXdQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdChpdGVtLCBuZXdQYXRoKSB8fCB2aXNpYmxlSW5TZXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvbnQga25vdyBob3cgdG8gaGFuZGxlXCIsIGl0ZW0sIHN1Yk9iaiwgbmV3UGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlSW5TZXQ7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSBhcnJheSB0eXBlIG9mIG9wdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUFycmF5KGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIiAmJiBhcnJbMF0gPT09IFwiY29sb3JcIikge1xuICAgICAgdGhpcy5fbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzFdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9tYWtlRHJvcGRvd24oYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogTnVtYmVyKHZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIHRvIHVwZGF0ZSB0aGUgbmV0d29yayB3aXRoIHRoZSBuZXcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGUodmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudC5ib2R5ICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIgJiZcbiAgICAgIHRoaXMucGFyZW50LmJvZHkuZW1pdHRlci5lbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdChcImNvbmZpZ0NoYW5nZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wYXJlbnQuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGJvb2xlYW59IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHt7fX0gb3B0aW9uc09ialxuICAgKiBAcmV0dXJucyB7e319XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCwgb3B0aW9uc09iaiA9IHt9KSB7XG4gICAgbGV0IHBvaW50ZXIgPSBvcHRpb25zT2JqO1xuXG4gICAgLy8gd2hlbiBkcm9wZG93biBib3hlcyBjYW4gYmUgc3RyaW5nIG9yIGJvb2xlYW4sIHdlIHR5cGVjYXN0IGl0IGludG8gY29ycmVjdCB0eXBlc1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsdWU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXRoW2ldICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICAgIGlmIChwb2ludGVyW3BhdGhbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyW3BhdGhbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvaW50ZXJbcGF0aFtpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc09iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByaW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICB3aGlsZSAodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnNDb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgIHdyYXBJblRhZyhcInByZVwiLCBcImNvbnN0IG9wdGlvbnMgPSBcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t9fSBvcHRpb25zXG4gICAqL1xuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdE9wdGlvbnMoXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0udmFsdWUsXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0ucGF0aCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn07XG5cbi8qKlxuICogUG9wdXAgaXMgYSBjbGFzcyB0byBjcmVhdGUgYSBwb3B1cCB3aW5kb3cgd2l0aCBzb21lIHRleHRcbiAqL1xubGV0IFBvcHVwJDEgPSBjbGFzcyBQb3B1cCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgICAgICBUaGUgY29udGFpbmVyIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvdmVyZmxvd01ldGhvZCAgSG93IHRoZSBwb3B1cCBzaG91bGQgYWN0IHRvIG92ZXJmbG93aW5nICgnZmxpcCcgb3IgJ2NhcCcpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIG92ZXJmbG93TWV0aG9kKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5vdmVyZmxvd01ldGhvZCA9IG92ZXJmbG93TWV0aG9kIHx8IFwiY2FwXCI7XG5cbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5wYWRkaW5nID0gNTtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBmcmFtZVxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtdG9vbHRpcFwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgc2V0UG9zaXRpb24oeCwgeSkge1xuICAgIHRoaXMueCA9IHBhcnNlSW50KHgpO1xuICAgIHRoaXMueSA9IHBhcnNlSW50KHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29udGVudCBmb3IgdGhlIHBvcHVwIHdpbmRvdy4gVGhpcyBjYW4gYmUgSFRNTCBjb2RlIG9yIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRWxlbWVudH0gY29udGVudFxuICAgKi9cbiAgc2V0VGV4dChjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICB3aGlsZSAodGhpcy5mcmFtZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cmluZyBjb250YWluaW5nIGxpdGVyYWwgdGV4dCwgZWxlbWVudCBoYXMgdG8gYmUgdXNlZCBmb3IgSFRNTCBkdWUgdG9cbiAgICAgIC8vIFhTUyByaXNrcyBhc3NvY2lhdGVkIHdpdGggaW5uZXJIVE1MIChpLmUuIHByZXZlbnQgWFNTIGJ5IGFjY2lkZW50KS5cbiAgICAgIHRoaXMuZnJhbWUuaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgd2luZG93XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvU2hvd10gICAgU2hvdyBvciBoaWRlIHRoZSB3aW5kb3dcbiAgICovXG4gIHNob3coZG9TaG93KSB7XG4gICAgaWYgKGRvU2hvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb1Nob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkb1Nob3cgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZyYW1lLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudFdpZHRoO1xuXG4gICAgICBsZXQgbGVmdCA9IDAsXG4gICAgICAgIHRvcCA9IDA7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJmbG93TWV0aG9kID09IFwiZmxpcFwiKSB7XG4gICAgICAgIGxldCBpc0xlZnQgPSBmYWxzZSxcbiAgICAgICAgICBpc1RvcCA9IHRydWU7IC8vIFdoZXJlIGFyb3VuZCB0aGUgcG9zaXRpb24gaXQncyBsb2NhdGVkXG5cbiAgICAgICAgaWYgKHRoaXMueSAtIGhlaWdodCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzVG9wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy54ICsgd2lkdGggPiBtYXhXaWR0aCAtIHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzTGVmdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMueCAtIHdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIGlmICh0b3AgKyBoZWlnaHQgKyB0aGlzLnBhZGRpbmcgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICB0b3AgPSBtYXhIZWlnaHQgLSBoZWlnaHQgLSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIHRvcCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIGlmIChsZWZ0ICsgd2lkdGggKyB0aGlzLnBhZGRpbmcgPiBtYXhXaWR0aCkge1xuICAgICAgICAgIGxlZnQgPSBtYXhXaWR0aCAtIHdpZHRoIC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0IDwgdGhpcy5wYWRkaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZSk7IC8vIFJlbW92ZSBlbGVtZW50IGZyb20gRE9NXG4gIH1cbn07XG5cbmxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5sZXQgYWxsT3B0aW9ucztcblxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDEgPSBcImJhY2tncm91bmQ6ICNGRmVlZWU7IGNvbG9yOiAjZGQwMDAwXCI7XG5cbi8qKlxuICogIFVzZWQgdG8gdmFsaWRhdGUgb3B0aW9ucy5cbiAqL1xubGV0IFZhbGlkYXRvciQxID0gY2xhc3MgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJPYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBzdWJPYmplY3QpIHtcbiAgICBlcnJvckZvdW5kID0gZmFsc2U7XG4gICAgYWxsT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgbGV0IHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpZiAoc3ViT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9uc1tzdWJPYmplY3RdO1xuICAgIH1cbiAgICBWYWxpZGF0b3IucGFyc2Uob3B0aW9ucywgdXNlZE9wdGlvbnMsIFtdKTtcbiAgICByZXR1cm4gZXJyb3JGb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHRyYXZlcnNlIGFuIG9iamVjdCByZWN1cnNpdmVseSBhbmQgY2hlY2sgZXZlcnkgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICAgIFZhbGlkYXRvci5jaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBldmVyeSB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbCB0aGUgcGFyc2UgZnVuY3Rpb24gb24gdGhhdCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpIHtcbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIFZhbGlkYXRvci5nZXRTdWdnZXN0aW9uKG9wdGlvbiwgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZU9wdGlvbiA9IG9wdGlvbjtcbiAgICBsZXQgaXNfb2JqZWN0ID0gdHJ1ZTtcblxuICAgIGlmIChcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnNbb3B0aW9uXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICByZWZlcmVuY2VPcHRpb25zLl9fYW55X18gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTk9URTogVGhpcyBvbmx5IHRyaWdnZXJzIGlmIHRoZSBfX2FueV9fIGlzIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgLy8gICAgICAgVEhBVCdTIEEgUkVBTExZIEJBRCBQTEFDRSBUTyBBTExPVyBJVCEhISFcbiAgICAgIC8vIFRPRE86IEV4YW1pbmUgaWYgbmVlZGVkLCByZW1vdmUgaWYgcG9zc2libGVcblxuICAgICAgLy8gX19hbnlfXyBpcyBhIHdpbGRjYXJkLiBBbnkgdmFsdWUgaXMgYWNjZXB0ZWQgYW5kIHdpbGwgYmUgZnVydGhlciBhbmFseXNlZCBieSByZWZlcmVuY2UuXG4gICAgICByZWZlcmVuY2VPcHRpb24gPSBcIl9fYW55X19cIjtcblxuICAgICAgLy8gaWYgdGhlIGFueS1zdWJncm91cCBpcyBub3QgYSBwcmVkZWZpbmVkIG9iamVjdCBpbiB0aGUgY29uZmlndXJhdG9yLFxuICAgICAgLy8gd2UgZG8gbm90IGxvb2sgZGVlcGVyIGludG8gdGhlIG9iamVjdC5cbiAgICAgIGlzX29iamVjdCA9IFZhbGlkYXRvci5nZXRUeXBlKG9wdGlvbnNbb3B0aW9uXSkgPT09IFwib2JqZWN0XCI7XG4gICAgfVxuXG4gICAgbGV0IHJlZk9wdGlvbk9iaiA9IHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXTtcbiAgICBpZiAoaXNfb2JqZWN0ICYmIHJlZk9wdGlvbk9iai5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWZPcHRpb25PYmogPSByZWZPcHRpb25PYmouX190eXBlX187XG4gICAgfVxuXG4gICAgVmFsaWRhdG9yLmNoZWNrRmllbGRzKFxuICAgICAgb3B0aW9uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb24sXG4gICAgICByZWZPcHRpb25PYmosXG4gICAgICBwYXRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIG9wdGlvbiAgICAgICAgICAgfCB0aGUgb3B0aW9uIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICB8IFRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge29iamVjdH0gIHJlZmVyZW5jZU9wdGlvbnMgfCBUaGUgcmVmZXJlbmNlIG9wdGlvbnMgY29udGFpbmluZyBhbGwgb3B0aW9ucyBhbmQgdGhlaXIgYWxsb3dlZCBmb3JtYXRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgcmVmZXJlbmNlT3B0aW9uICB8IFVzdWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBvcHRpb24sIGV4Y2VwdCB3aGVuIGhhbmRsaW5nIGFuIF9fYW55X18gdGFnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZk9wdGlvbk9iaiAgICAgfCBUaGlzIGlzIHRoZSB0eXBlIG9iamVjdCBmcm9tIHRoZSByZWZlcmVuY2Ugb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBhdGggICAgICAgICAgICAgfCB3aGVyZSBpbiB0aGUgb2JqZWN0IGlzIHRoZSBvcHRpb25cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrRmllbGRzKFxuICAgIG9wdGlvbixcbiAgICBvcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgIHJlZk9wdGlvbk9iaixcbiAgICBwYXRoXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjXCIgKyBtZXNzYWdlICsgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKSxcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvblR5cGUgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pO1xuICAgIGNvbnN0IHJlZk9wdGlvblR5cGUgPSByZWZPcHRpb25PYmpbb3B0aW9uVHlwZV07XG5cbiAgICBpZiAocmVmT3B0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpZiB0aGUgdHlwZSBpcyBjb3JyZWN0LCB3ZSBjaGVjayBpZiBpdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgYSBmZXcgc2VsZWN0IHZhbHVlc1xuICAgICAgaWYgKFxuICAgICAgICBWYWxpZGF0b3IuZ2V0VHlwZShyZWZPcHRpb25UeXBlKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgIHJlZk9wdGlvblR5cGUuaW5kZXhPZihvcHRpb25zW29wdGlvbl0pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gXCInICtcbiAgICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgICAnXCIuJyArXG4gICAgICAgICAgICBcIiBBbGxvd2VkIHZhbHVlcyBhcmU6XCIgK1xuICAgICAgICAgICAgVmFsaWRhdG9yLnByaW50KHJlZk9wdGlvblR5cGUpICtcbiAgICAgICAgICAgICcgbm90IFwiJyArXG4gICAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICAgJ1wiLiAnXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25UeXBlID09PSBcIm9iamVjdFwiICYmIHJlZmVyZW5jZU9wdGlvbiAhPT0gXCJfX2FueV9fXCIpIHtcbiAgICAgICAgcGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcHRpb24pO1xuICAgICAgICBWYWxpZGF0b3IucGFyc2UoXG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25dLFxuICAgICAgICAgIHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWZPcHRpb25PYmpbXCJhbnlcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdHlwZSBvZiB0aGUgZmllbGQgaXMgaW5jb3JyZWN0IGFuZCB0aGUgZmllbGQgY2Fubm90IGJlIGFueVxuICAgICAgbG9nKFxuICAgICAgICAnSW52YWxpZCB0eXBlIHJlY2VpdmVkIGZvciBcIicgK1xuICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgJ1wiLiBFeHBlY3RlZDogJyArXG4gICAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKHJlZk9wdGlvbk9iaikpICtcbiAgICAgICAgICBcIi4gUmVjZWl2ZWQgW1wiICtcbiAgICAgICAgICBvcHRpb25UeXBlICtcbiAgICAgICAgICAnXSBcIicgK1xuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSArXG4gICAgICAgICAgJ1wiJ1xuICAgICAgKTtcbiAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBBcnJheS48bnVtYmVyPiB8IERhdGUgfCBOb2RlIHwgTW9tZW50IHwgdW5kZWZpbmVkIHwgbnVsbH0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRUeXBlKG9iamVjdCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xuXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Lm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiZG9tXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Ll9pc0FNb21lbnRPYmplY3QgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFwibW9tZW50XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRTdWdnZXN0aW9uKG9wdGlvbiwgb3B0aW9ucywgcGF0aCkge1xuICAgIGNvbnN0IGxvY2FsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCBmYWxzZSk7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBhbGxPcHRpb25zLCBbXSwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhbFNlYXJjaFRocmVzaG9sZCA9IDg7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoVGhyZXNob2xkID0gNDtcblxuICAgIGxldCBtc2c7XG4gICAgaWYgKGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guaW5kZXhNYXRjaCArXG4gICAgICAgICdcIj9cXG5cXG4nO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBnbG9iYWxTZWFyY2guZGlzdGFuY2UgPD0gZ2xvYmFsU2VhcmNoVGhyZXNob2xkICYmXG4gICAgICBsb2NhbFNlYXJjaC5kaXN0YW5jZSA+IGdsb2JhbFNlYXJjaC5kaXN0YW5jZVxuICAgICkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgXCJQZXJoYXBzIGl0IHdhcyBtaXNwbGFjZWQ/IE1hdGNoaW5nIG9wdGlvbiBmb3VuZCBhdDogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihcbiAgICAgICAgICBnbG9iYWxTZWFyY2gucGF0aCxcbiAgICAgICAgICBnbG9iYWxTZWFyY2guY2xvc2VzdE1hdGNoLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2FsU2VhcmNoLmRpc3RhbmNlIDw9IGxvY2FsU2VhcmNoVGhyZXNob2xkKSB7XG4gICAgICBtc2cgPVxuICAgICAgICAnLiBEaWQgeW91IG1lYW4gXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guY2xvc2VzdE1hdGNoICtcbiAgICAgICAgJ1wiPycgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPVxuICAgICAgICBcIi4gRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZTogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnQoT2JqZWN0LmtleXMob3B0aW9ucykpICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6IFwiJyArIG9wdGlvbiArICdcIicgKyBtc2csXG4gICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEUkMVxuICAgICk7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2UgdGhlIG9wdGlvbnMgaW4gc2VhcmNoIGZvciBhIG1hdGNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWN1cnNpdmU9ZmFsc2VdXG4gICAqIEByZXR1cm5zIHt7Y2xvc2VzdE1hdGNoOiBzdHJpbmcsIHBhdGg6IEFycmF5LCBkaXN0YW5jZTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAgIGxldCBtaW4gPSAxZTk7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaCA9IFwiXCI7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaFBhdGggPSBbXTtcbiAgICBjb25zdCBsb3dlckNhc2VPcHRpb24gPSBvcHRpb24udG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaW5kZXhNYXRjaCA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IG9wIGluIG9wdGlvbnMpIHtcbiAgICAgIGxldCBkaXN0YW5jZTtcbiAgICAgIGlmIChvcHRpb25zW29wXS5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkICYmIHJlY3Vyc2l2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWYWxpZGF0b3IuZmluZEluT3B0aW9ucyhcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgb3B0aW9uc1tvcF0sXG4gICAgICAgICAgY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIG9wKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWluID4gcmVzdWx0LmRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gcmVzdWx0LmNsb3Nlc3RNYXRjaDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gcmVzdWx0LnBhdGg7XG4gICAgICAgICAgbWluID0gcmVzdWx0LmRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSByZXN1bHQuaW5kZXhNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2VPcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSBvcDtcbiAgICAgICAgfVxuICAgICAgICBkaXN0YW5jZSA9IFZhbGlkYXRvci5sZXZlbnNodGVpbkRpc3RhbmNlKG9wdGlvbiwgb3ApO1xuICAgICAgICBpZiAobWluID4gZGlzdGFuY2UpIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2ggPSBvcDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gY29weUFycmF5KHBhdGgpO1xuICAgICAgICAgIG1pbiA9IGRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXN0TWF0Y2g6IGNsb3Nlc3RNYXRjaCxcbiAgICAgIHBhdGg6IGNsb3Nlc3RNYXRjaFBhdGgsXG4gICAgICBkaXN0YW5jZTogbWluLFxuICAgICAgaW5kZXhNYXRjaDogaW5kZXhNYXRjaCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiwgcHJlZml4ID0gXCJQcm9ibGVtIHZhbHVlIGZvdW5kIGF0OiBcXG5cIikge1xuICAgIGxldCBzdHIgPSBcIlxcblxcblwiICsgcHJlZml4ICsgXCJvcHRpb25zID0ge1xcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpICsgMTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gcGF0aFtpXSArIFwiOiB7XFxuXCI7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggKyAxOyBqKyspIHtcbiAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgfVxuICAgIHN0ciArPSBvcHRpb24gKyBcIlxcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggLSBpOyBqKyspIHtcbiAgICAgICAgc3RyICs9IFwiICBcIjtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBcIn1cXG5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0ciArIFwiXFxuXFxuXCI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHByaW50KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICAgIC5yZXBsYWNlKC8oXCIpfChcXFspfChcXF0pfCgsXCJfX3R5cGVfX1wiKS9nLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoLygsKS9nLCBcIiwgXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb21wdXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBnaXZlbiBzdHJpbmdzXG4gICAqIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL1N0cmluZ3MvTGV2ZW5zaHRlaW5fZGlzdGFuY2UjSmF2YVNjcmlwdFxuICAgKlxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5kcmVpIE1hY2tlbnppZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgKlxuICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICpcbiAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGxldmVuc2h0ZWluRGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbWF0cml4ID0gW107XG5cbiAgICAvLyBpbmNyZW1lbnQgYWxvbmcgdGhlIGZpcnN0IGNvbHVtbiBvZiBlYWNoIHJvd1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW2ldO1xuICAgIH1cblxuICAgIC8vIGluY3JlbWVudCBlYWNoIGNvbHVtbiBpbiB0aGUgZmlyc3Qgcm93XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cblxuICAgIC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG1hdHJpeFxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT0gYS5jaGFyQXQoaiAtIDEpKSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAxXVtqIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgICAgICBtYXRyaXhbaSAtIDFdW2ogLSAxXSArIDEsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgIG1hdHJpeFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqXSArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApOyAvLyBkZWxldGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xuICB9XG59O1xuXG5jb25zdCBBY3RpdmF0b3IgPSBBY3RpdmF0b3IkMTtcclxuY29uc3QgQ29sb3JQaWNrZXIgPSBDb2xvclBpY2tlciQxO1xyXG5jb25zdCBDb25maWd1cmF0b3IgPSBDb25maWd1cmF0b3IkMTtcclxuY29uc3QgSGFtbWVyID0gSGFtbWVyJDE7XHJcbmNvbnN0IFBvcHVwID0gUG9wdXAkMTtcclxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFID0gVkFMSURBVE9SX1BSSU5UX1NUWUxFJDE7XHJcbmNvbnN0IFZhbGlkYXRvciA9IFZhbGlkYXRvciQxO1xuXG5leHBvcnQgeyBBY3RpdmF0b3IsIEFsZWEsIENvbG9yUGlja2VyLCBDb25maWd1cmF0b3IsIERFTEVURSwgSFNWVG9IZXgsIEhTVlRvUkdCLCBIYW1tZXIsIFBvcHVwLCBSR0JUb0hTViwgUkdCVG9IZXgsIFZBTElEQVRPUl9QUklOVF9TVFlMRSwgVmFsaWRhdG9yLCBhZGRDbGFzc05hbWUsIGFkZENzc1RleHQsIGFkZEV2ZW50TGlzdGVuZXIsIGJpbmFyeVNlYXJjaEN1c3RvbSwgYmluYXJ5U2VhcmNoVmFsdWUsIGJyaWRnZU9iamVjdCwgY29weUFuZEV4dGVuZEFycmF5LCBjb3B5QXJyYXksIGRlZXBFeHRlbmQsIGRlZXBPYmplY3RBc3NpZ24sIGVhc2luZ0Z1bmN0aW9ucywgZXF1YWxBcnJheSwgZXh0ZW5kLCBmaWxsSWZEZWZpbmVkLCBmb3JFYWNoLCBnZXRBYnNvbHV0ZUxlZnQsIGdldEFic29sdXRlUmlnaHQsIGdldEFic29sdXRlVG9wLCBnZXRTY3JvbGxCYXJXaWR0aCwgZ2V0VGFyZ2V0LCBnZXRUeXBlLCBoYXNQYXJlbnQsIGhleFRvSFNWLCBoZXhUb1JHQiwgaW5zZXJ0U29ydCwgaXNEYXRlLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ZhbGlkSGV4LCBpc1ZhbGlkUkdCLCBpc1ZhbGlkUkdCQSwgbWVyZ2VPcHRpb25zLCBvcHRpb24sIG92ZXJyaWRlT3BhY2l0eSwgcGFyc2VDb2xvciwgcHJldmVudERlZmF1bHQsIHB1cmVEZWVwT2JqZWN0QXNzaWduLCByZWN1cnNpdmVET01EZWxldGUsIHJlbW92ZUNsYXNzTmFtZSwgcmVtb3ZlQ3NzVGV4dCwgcmVtb3ZlRXZlbnRMaXN0ZW5lciwgc2VsZWN0aXZlQnJpZGdlT2JqZWN0LCBzZWxlY3RpdmVEZWVwRXh0ZW5kLCBzZWxlY3RpdmVFeHRlbmQsIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsIHRocm90dGxlLCB0b0FycmF5LCB0b3BNb3N0LCB1cGRhdGVQcm9wZXJ0eSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmlzLXV0aWwuanMubWFwXG4iLCAiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG5cbi8qKlxuICogUGFyc2UgYSB0ZXh0IHNvdXJjZSBjb250YWluaW5nIGRhdGEgaW4gRE9UIGxhbmd1YWdlIGludG8gYSBKU09OIG9iamVjdC5cbiAqIFRoZSBvYmplY3QgY29udGFpbnMgdHdvIGxpc3RzOiBvbmUgd2l0aCBub2RlcyBhbmQgb25lIHdpdGggZWRnZXMuXG4gKlxuICogRE9UIGxhbmd1YWdlIHJlZmVyZW5jZTogaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvZG9jL2luZm8vbGFuZy5odG1sXG4gKlxuICogRE9UIGxhbmd1YWdlIGF0dHJpYnV0ZXM6IGh0dHA6Ly9ncmFwaHZpei5vcmcvY29udGVudC9hdHRyc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhICAgICBUZXh0IGNvbnRhaW5pbmcgYSBncmFwaCBpbiBET1Qtbm90YXRpb25cbiAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoICAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdHdvIHBhcmFtZXRlcnM6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAge09iamVjdFtdfSBub2Rlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIHtPYmplY3RbXX0gZWRnZXNcbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBUT0RPXG4gKiA9PT09XG4gKlxuICogRm9yIGxhYmVsIGhhbmRsaW5nLCB0aGlzIGlzIGFuIGluY29tcGxldGUgaW1wbGVtZW50YXRpb24uIEZyb20gZG9jcyAocXVvdGUgIzMwMTUpOlxuICpcbiAqID4gdGhlIGVzY2FwZSBzZXF1ZW5jZXMgXCJcXG5cIiwgXCJcXGxcIiBhbmQgXCJcXHJcIiBkaXZpZGUgdGhlIGxhYmVsIGludG8gbGluZXMsIGNlbnRlcmVkLFxuICogPiBsZWZ0LWp1c3RpZmllZCwgYW5kIHJpZ2h0LWp1c3RpZmllZCwgcmVzcGVjdGl2ZWx5LlxuICpcbiAqIFNvdXJjZTogaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvY29udGVudC9hdHRycyNrZXNjU3RyaW5nXG4gKlxuICogPiBBcyBhbm90aGVyIGFpZCBmb3IgcmVhZGFiaWxpdHksIGRvdCBhbGxvd3MgZG91YmxlLXF1b3RlZCBzdHJpbmdzIHRvIHNwYW4gbXVsdGlwbGUgcGh5c2ljYWxcbiAqID4gbGluZXMgdXNpbmcgdGhlIHN0YW5kYXJkIEMgY29udmVudGlvbiBvZiBhIGJhY2tzbGFzaCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYSBuZXdsaW5lXG4gKiA+IGNoYXJhY3RlclxuICogPiBJbiBhZGRpdGlvbiwgZG91YmxlLXF1b3RlZCBzdHJpbmdzIGNhbiBiZSBjb25jYXRlbmF0ZWQgdXNpbmcgYSAnKycgb3BlcmF0b3IuXG4gKiA+IEFzIEhUTUwgc3RyaW5ncyBjYW4gY29udGFpbiBuZXdsaW5lIGNoYXJhY3RlcnMsIHdoaWNoIGFyZSB1c2VkIHNvbGVseSBmb3IgZm9ybWF0dGluZyxcbiAqID4gdGhlIGxhbmd1YWdlIGRvZXMgbm90IGFsbG93IGVzY2FwZWQgbmV3bGluZXMgb3IgY29uY2F0ZW5hdGlvbiBvcGVyYXRvcnMgdG8gYmUgdXNlZFxuICogPiB3aXRoaW4gdGhlbS5cbiAqXG4gKiAtIEN1cnJlbnRseSwgb25seSAnXFxcXG4nIGlzIGhhbmRsZWRcbiAqIC0gTm90ZSB0aGF0IHRleHQgZXhwbGljaXRseSBzYXlzICdsYWJlbHMnOyB0aGUgZG90IHBhcnNlciBjdXJyZW50bHkgaGFuZGxlcyBlc2NhcGVcbiAqICAgc2VxdWVuY2VzIGluICoqYWxsKiogc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRE9UKGRhdGEpIHtcbiAgZG90ID0gZGF0YTtcbiAgcmV0dXJuIHBhcnNlR3JhcGgoKTtcbn1cblxuLy8gbWFwcGluZyBvZiBhdHRyaWJ1dGVzIGZyb20gRE9UICh0aGUga2V5cykgdG8gdmlzLmpzICh0aGUgdmFsdWVzKVxudmFyIE5PREVfQVRUUl9NQVBQSU5HID0ge1xuICBmb250c2l6ZTogXCJmb250LnNpemVcIixcbiAgZm9udGNvbG9yOiBcImZvbnQuY29sb3JcIixcbiAgbGFiZWxmb250Y29sb3I6IFwiZm9udC5jb2xvclwiLFxuICBmb250bmFtZTogXCJmb250LmZhY2VcIixcbiAgY29sb3I6IFtcImNvbG9yLmJvcmRlclwiLCBcImNvbG9yLmJhY2tncm91bmRcIl0sXG4gIGZpbGxjb2xvcjogXCJjb2xvci5iYWNrZ3JvdW5kXCIsXG4gIHRvb2x0aXA6IFwidGl0bGVcIixcbiAgbGFiZWx0b29sdGlwOiBcInRpdGxlXCIsXG59O1xudmFyIEVER0VfQVRUUl9NQVBQSU5HID0gT2JqZWN0LmNyZWF0ZShOT0RFX0FUVFJfTUFQUElORyk7XG5FREdFX0FUVFJfTUFQUElORy5jb2xvciA9IFwiY29sb3IuY29sb3JcIjtcbkVER0VfQVRUUl9NQVBQSU5HLnN0eWxlID0gXCJkYXNoZXNcIjtcblxuLy8gdG9rZW4gdHlwZXMgZW51bWVyYXRpb25cbnZhciBUT0tFTlRZUEUgPSB7XG4gIE5VTEw6IDAsXG4gIERFTElNSVRFUjogMSxcbiAgSURFTlRJRklFUjogMixcbiAgVU5LTk9XTjogMyxcbn07XG5cbi8vIG1hcCB3aXRoIGFsbCBkZWxpbWl0ZXJzXG52YXIgREVMSU1JVEVSUyA9IHtcbiAgXCJ7XCI6IHRydWUsXG4gIFwifVwiOiB0cnVlLFxuICBcIltcIjogdHJ1ZSxcbiAgXCJdXCI6IHRydWUsXG4gIFwiO1wiOiB0cnVlLFxuICBcIj1cIjogdHJ1ZSxcbiAgXCIsXCI6IHRydWUsXG5cbiAgXCItPlwiOiB0cnVlLFxuICBcIi0tXCI6IHRydWUsXG59O1xuXG52YXIgZG90ID0gXCJcIjsgLy8gY3VycmVudCBkb3QgZmlsZVxudmFyIGluZGV4ID0gMDsgLy8gY3VycmVudCBpbmRleCBpbiBkb3QgZmlsZVxudmFyIGMgPSBcIlwiOyAvLyBjdXJyZW50IHRva2VuIGNoYXJhY3RlciBpbiBleHByXG52YXIgdG9rZW4gPSBcIlwiOyAvLyBjdXJyZW50IHRva2VuXG52YXIgdG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTEw7IC8vIHR5cGUgb2YgdGhlIHRva2VuXG5cbi8qKlxuICogR2V0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgZnJvbSB0aGUgZG90IGZpbGUuXG4gKiBUaGUgY2hhcmFjdGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBjaGFyIGMuIElmIHRoZSBlbmQgb2YgdGhlIGRvdCBmaWxlIGlzXG4gKiByZWFjaGVkLCB0aGUgZnVuY3Rpb24gcHV0cyBhbiBlbXB0eSBzdHJpbmcgaW4gYy5cbiAqL1xuZnVuY3Rpb24gZmlyc3QoKSB7XG4gIGluZGV4ID0gMDtcbiAgYyA9IGRvdC5jaGFyQXQoMCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBkb3QgZmlsZS5cbiAqIFRoZSBjaGFyYWN0ZXIgaXMgc3RvcmVkIGludG8gdGhlIGNoYXIgYy4gSWYgdGhlIGVuZCBvZiB0aGUgZG90IGZpbGUgaXNcbiAqIHJlYWNoZWQsIHRoZSBmdW5jdGlvbiBwdXRzIGFuIGVtcHR5IHN0cmluZyBpbiBjLlxuICovXG5mdW5jdGlvbiBuZXh0KCkge1xuICBpbmRleCsrO1xuICBjID0gZG90LmNoYXJBdChpbmRleCk7XG59XG5cbi8qKlxuICogUHJldmlldyB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgZG90IGZpbGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY05leHRcbiAqL1xuZnVuY3Rpb24gbmV4dFByZXZpZXcoKSB7XG4gIHJldHVybiBkb3QuY2hhckF0KGluZGV4ICsgMSk7XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGdpdmVuIGNoYXJhY3RlciBpcyBhbHBoYWJldGljIG9yIG51bWVyaWMgKCBhLXpBLVpfMC05LjojIClcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY1xuICogQHJldHVybnMge2Jvb2xlYW59IGlzQWxwaGFOdW1lcmljXG4gKi9cbmZ1bmN0aW9uIGlzQWxwaGFOdW1lcmljKGMpIHtcbiAgdmFyIGNoYXJDb2RlID0gYy5jaGFyQ29kZUF0KDApO1xuXG4gIGlmIChjaGFyQ29kZSA8IDQ3KSB7XG4gICAgLy8gIy5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDM1IHx8IGNoYXJDb2RlID09PSA0NjtcbiAgfVxuICBpZiAoY2hhckNvZGUgPCA1OSkge1xuICAgIC8vIDAtOSBhbmQgOlxuICAgIHJldHVybiBjaGFyQ29kZSA+IDQ3O1xuICB9XG4gIGlmIChjaGFyQ29kZSA8IDkxKSB7XG4gICAgLy8gQS1aXG4gICAgcmV0dXJuIGNoYXJDb2RlID4gNjQ7XG4gIH1cbiAgaWYgKGNoYXJDb2RlIDwgOTYpIHtcbiAgICAvLyBfXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSA5NTtcbiAgfVxuICBpZiAoY2hhckNvZGUgPCAxMjMpIHtcbiAgICAvLyBhLXpcbiAgICByZXR1cm4gY2hhckNvZGUgPiA5NjtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbGwgb3B0aW9ucyBvZiBvYmplY3QgYiBpbnRvIG9iamVjdCBiXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGFcbiAqIEBwYXJhbSB7b2JqZWN0fSBiXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKGEsIGIpIHtcbiAgaWYgKCFhKSB7XG4gICAgYSA9IHt9O1xuICB9XG5cbiAgaWYgKGIpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIGIpIHtcbiAgICAgIGlmIChiLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGFbbmFtZV0gPSBiW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBTZXQgYSB2YWx1ZSBpbiBhbiBvYmplY3QsIHdoZXJlIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXIgbmFtZSBjYW4gYmUgYVxuICogcGF0aCB3aXRoIG5lc3RlZCBwYXJhbWV0ZXJzLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgdmFyIG9iaiA9IHthOiAyfTtcbiAqICAgICBzZXRWYWx1ZShvYmosICdiLmMnLCAzKTsgICAgIC8vIG9iaiA9IHthOiAyLCBiOiB7YzogM319XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggIEEgcGFyYW1ldGVyIG5hbWUgb3IgZG90LXNlcGFyYXRlZCBwYXJhbWV0ZXIgcGF0aCxcbiAqICAgICAgICAgICAgICAgICAgICAgIGxpa2UgXCJjb2xvci5oaWdobGlnaHQuYm9yZGVyXCIuXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHNldFZhbHVlKG9iaiwgcGF0aCwgdmFsdWUpIHtcbiAgdmFyIGtleXMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgdmFyIG8gPSBvYmo7XG4gIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBrZXlzLnNoaWZ0KCk7XG4gICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICAvLyB0aGlzIGlzbid0IHRoZSBlbmQgcG9pbnRcbiAgICAgIGlmICghb1trZXldKSB7XG4gICAgICAgIG9ba2V5XSA9IHt9O1xuICAgICAgfVxuICAgICAgbyA9IG9ba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgZW5kIHBvaW50XG4gICAgICBvW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYSBub2RlIHRvIGEgZ3JhcGggb2JqZWN0LiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgbm9kZSB3aXRoXG4gKiB0aGUgc2FtZSBpZCwgdGhlaXIgYXR0cmlidXRlcyB3aWxsIGJlIG1lcmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBub2RlXG4gKi9cbmZ1bmN0aW9uIGFkZE5vZGUoZ3JhcGgsIG5vZGUpIHtcbiAgdmFyIGksIGxlbjtcbiAgdmFyIGN1cnJlbnQgPSBudWxsO1xuXG4gIC8vIGZpbmQgcm9vdCBncmFwaCAoaW4gY2FzZSBvZiBzdWJncmFwaClcbiAgdmFyIGdyYXBocyA9IFtncmFwaF07IC8vIGxpc3Qgd2l0aCBhbGwgZ3JhcGhzIGZyb20gY3VycmVudCBncmFwaCB0byByb290IGdyYXBoXG4gIHZhciByb290ID0gZ3JhcGg7XG4gIHdoaWxlIChyb290LnBhcmVudCkge1xuICAgIGdyYXBocy5wdXNoKHJvb3QucGFyZW50KTtcbiAgICByb290ID0gcm9vdC5wYXJlbnQ7XG4gIH1cblxuICAvLyBmaW5kIGV4aXN0aW5nIG5vZGUgKGF0IHJvb3QgbGV2ZWwpIGJ5IGl0cyBpZFxuICBpZiAocm9vdC5ub2Rlcykge1xuICAgIGZvciAoaSA9IDAsIGxlbiA9IHJvb3Qubm9kZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChub2RlLmlkID09PSByb290Lm5vZGVzW2ldLmlkKSB7XG4gICAgICAgIGN1cnJlbnQgPSByb290Lm5vZGVzW2ldO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWN1cnJlbnQpIHtcbiAgICAvLyB0aGlzIGlzIGEgbmV3IG5vZGVcbiAgICBjdXJyZW50ID0ge1xuICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgfTtcbiAgICBpZiAoZ3JhcGgubm9kZSkge1xuICAgICAgLy8gY2xvbmUgZGVmYXVsdCBhdHRyaWJ1dGVzXG4gICAgICBjdXJyZW50LmF0dHIgPSBtZXJnZShjdXJyZW50LmF0dHIsIGdyYXBoLm5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCBub2RlIHRvIHRoaXMgKHN1YilncmFwaCBhbmQgYWxsIGl0cyBwYXJlbnQgZ3JhcGhzXG4gIGZvciAoaSA9IGdyYXBocy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBnID0gZ3JhcGhzW2ldO1xuXG4gICAgaWYgKCFnLm5vZGVzKSB7XG4gICAgICBnLm5vZGVzID0gW107XG4gICAgfVxuICAgIGlmIChnLm5vZGVzLmluZGV4T2YoY3VycmVudCkgPT09IC0xKSB7XG4gICAgICBnLm5vZGVzLnB1c2goY3VycmVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2UgYXR0cmlidXRlc1xuICBpZiAobm9kZS5hdHRyKSB7XG4gICAgY3VycmVudC5hdHRyID0gbWVyZ2UoY3VycmVudC5hdHRyLCBub2RlLmF0dHIpO1xuICB9XG59XG5cbi8qKlxuICogQWRkIGFuIGVkZ2UgdG8gYSBncmFwaCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBlZGdlXG4gKi9cbmZ1bmN0aW9uIGFkZEVkZ2UoZ3JhcGgsIGVkZ2UpIHtcbiAgaWYgKCFncmFwaC5lZGdlcykge1xuICAgIGdyYXBoLmVkZ2VzID0gW107XG4gIH1cbiAgZ3JhcGguZWRnZXMucHVzaChlZGdlKTtcbiAgaWYgKGdyYXBoLmVkZ2UpIHtcbiAgICB2YXIgYXR0ciA9IG1lcmdlKHt9LCBncmFwaC5lZGdlKTsgLy8gY2xvbmUgZGVmYXVsdCBhdHRyaWJ1dGVzXG4gICAgZWRnZS5hdHRyID0gbWVyZ2UoYXR0ciwgZWRnZS5hdHRyKTsgLy8gbWVyZ2UgYXR0cmlidXRlc1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGVkZ2UgdG8gYSBncmFwaCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgb2JqZWN0fSBmcm9tXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IG9iamVjdH0gdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IGF0dHJcbiAqIEByZXR1cm5zIHtvYmplY3R9IGVkZ2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWRnZShncmFwaCwgZnJvbSwgdG8sIHR5cGUsIGF0dHIpIHtcbiAgdmFyIGVkZ2UgPSB7XG4gICAgZnJvbTogZnJvbSxcbiAgICB0bzogdG8sXG4gICAgdHlwZTogdHlwZSxcbiAgfTtcblxuICBpZiAoZ3JhcGguZWRnZSkge1xuICAgIGVkZ2UuYXR0ciA9IG1lcmdlKHt9LCBncmFwaC5lZGdlKTsgLy8gY2xvbmUgZGVmYXVsdCBhdHRyaWJ1dGVzXG4gIH1cbiAgZWRnZS5hdHRyID0gbWVyZ2UoZWRnZS5hdHRyIHx8IHt9LCBhdHRyKTsgLy8gbWVyZ2UgYXR0cmlidXRlc1xuXG4gIC8vIE1vdmUgYXJyb3dzIGF0dHJpYnV0ZSBmcm9tIGF0dHIgdG8gZWRnZSB0ZW1wb3JhbGx5IGNyZWF0ZWQgaW5cbiAgLy8gcGFyc2VBdHRyaWJ1dGVMaXN0KCkuXG4gIGlmIChhdHRyICE9IG51bGwpIHtcbiAgICBpZiAoYXR0ci5oYXNPd25Qcm9wZXJ0eShcImFycm93c1wiKSAmJiBhdHRyW1wiYXJyb3dzXCJdICE9IG51bGwpIHtcbiAgICAgIGVkZ2VbXCJhcnJvd3NcIl0gPSB7IHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGF0dHIuYXJyb3dzLnR5cGUgfSB9O1xuICAgICAgYXR0cltcImFycm93c1wiXSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHJldHVybiBlZGdlO1xufVxuXG4vKipcbiAqIEdldCBuZXh0IHRva2VuIGluIHRoZSBjdXJyZW50IGRvdCBmaWxlLlxuICogVGhlIHRva2VuIGFuZCB0b2tlbiB0eXBlIGFyZSBhdmFpbGFibGUgYXMgdG9rZW4gYW5kIHRva2VuVHlwZVxuICovXG5mdW5jdGlvbiBnZXRUb2tlbigpIHtcbiAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTEw7XG4gIHRva2VuID0gXCJcIjtcblxuICAvLyBza2lwIG92ZXIgd2hpdGVzcGFjZXNcbiAgd2hpbGUgKGMgPT09IFwiIFwiIHx8IGMgPT09IFwiXFx0XCIgfHwgYyA9PT0gXCJcXG5cIiB8fCBjID09PSBcIlxcclwiKSB7XG4gICAgLy8gc3BhY2UsIHRhYiwgZW50ZXJcbiAgICBuZXh0KCk7XG4gIH1cblxuICBkbyB7XG4gICAgdmFyIGlzQ29tbWVudCA9IGZhbHNlO1xuXG4gICAgLy8gc2tpcCBjb21tZW50XG4gICAgaWYgKGMgPT09IFwiI1wiKSB7XG4gICAgICAvLyBmaW5kIHRoZSBwcmV2aW91cyBub24tc3BhY2UgY2hhcmFjdGVyXG4gICAgICB2YXIgaSA9IGluZGV4IC0gMTtcbiAgICAgIHdoaWxlIChkb3QuY2hhckF0KGkpID09PSBcIiBcIiB8fCBkb3QuY2hhckF0KGkpID09PSBcIlxcdFwiKSB7XG4gICAgICAgIGktLTtcbiAgICAgIH1cbiAgICAgIGlmIChkb3QuY2hhckF0KGkpID09PSBcIlxcblwiIHx8IGRvdC5jaGFyQXQoaSkgPT09IFwiXCIpIHtcbiAgICAgICAgLy8gdGhlICMgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSwgdGhpcyBpcyBpbmRlZWQgYSBsaW5lIGNvbW1lbnRcbiAgICAgICAgd2hpbGUgKGMgIT0gXCJcIiAmJiBjICE9IFwiXFxuXCIpIHtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaXNDb21tZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGMgPT09IFwiL1wiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiL1wiKSB7XG4gICAgICAvLyBza2lwIGxpbmUgY29tbWVudFxuICAgICAgd2hpbGUgKGMgIT0gXCJcIiAmJiBjICE9IFwiXFxuXCIpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgICAgaXNDb21tZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGMgPT09IFwiL1wiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiKlwiKSB7XG4gICAgICAvLyBza2lwIGJsb2NrIGNvbW1lbnRcbiAgICAgIHdoaWxlIChjICE9IFwiXCIpIHtcbiAgICAgICAgaWYgKGMgPT09IFwiKlwiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiL1wiKSB7XG4gICAgICAgICAgLy8gZW5kIG9mIGJsb2NrIGNvbW1lbnQgZm91bmQuIHNraXAgdGhlc2UgbGFzdCB0d28gY2hhcmFjdGVyc1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc0NvbW1lbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHNraXAgb3ZlciB3aGl0ZXNwYWNlc1xuICAgIHdoaWxlIChjID09PSBcIiBcIiB8fCBjID09PSBcIlxcdFwiIHx8IGMgPT09IFwiXFxuXCIgfHwgYyA9PT0gXCJcXHJcIikge1xuICAgICAgLy8gc3BhY2UsIHRhYiwgZW50ZXJcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH0gd2hpbGUgKGlzQ29tbWVudCk7XG5cbiAgLy8gY2hlY2sgZm9yIGVuZCBvZiBkb3QgZmlsZVxuICBpZiAoYyA9PT0gXCJcIikge1xuICAgIC8vIHRva2VuIGlzIHN0aWxsIGVtcHR5XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDIgY2hhcmFjdGVyc1xuICB2YXIgYzIgPSBjICsgbmV4dFByZXZpZXcoKTtcbiAgaWYgKERFTElNSVRFUlNbYzJdKSB7XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICB0b2tlbiA9IGMyO1xuICAgIG5leHQoKTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gY2hlY2sgZm9yIGRlbGltaXRlcnMgY29uc2lzdGluZyBvZiAxIGNoYXJhY3RlclxuICBpZiAoREVMSU1JVEVSU1tjXSkge1xuICAgIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgdG9rZW4gPSBjO1xuICAgIG5leHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjaGVjayBmb3IgYW4gaWRlbnRpZmllciAobnVtYmVyIG9yIHN0cmluZylcbiAgLy8gVE9ETzogbW9yZSBwcmVjaXNlIHBhcnNpbmcgb2YgbnVtYmVycy9zdHJpbmdzIChhbmQgdGhlIHBvcnQgc2VwYXJhdG9yICc6JylcbiAgaWYgKGlzQWxwaGFOdW1lcmljKGMpIHx8IGMgPT09IFwiLVwiKSB7XG4gICAgdG9rZW4gKz0gYztcbiAgICBuZXh0KCk7XG5cbiAgICB3aGlsZSAoaXNBbHBoYU51bWVyaWMoYykpIHtcbiAgICAgIHRva2VuICs9IGM7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICAgIGlmICh0b2tlbiA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICB0b2tlbiA9IGZhbHNlOyAvLyBjb252ZXJ0IHRvIGJvb2xlYW5cbiAgICB9IGVsc2UgaWYgKHRva2VuID09PSBcInRydWVcIikge1xuICAgICAgdG9rZW4gPSB0cnVlOyAvLyBjb252ZXJ0IHRvIGJvb2xlYW5cbiAgICB9IGVsc2UgaWYgKCFpc05hTihOdW1iZXIodG9rZW4pKSkge1xuICAgICAgdG9rZW4gPSBOdW1iZXIodG9rZW4pOyAvLyBjb252ZXJ0IHRvIG51bWJlclxuICAgIH1cbiAgICB0b2tlblR5cGUgPSBUT0tFTlRZUEUuSURFTlRJRklFUjtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjaGVjayBmb3IgYSBzdHJpbmcgZW5jbG9zZWQgYnkgZG91YmxlIHF1b3Rlc1xuICBpZiAoYyA9PT0gJ1wiJykge1xuICAgIG5leHQoKTtcbiAgICB3aGlsZSAoYyAhPSBcIlwiICYmIChjICE9ICdcIicgfHwgKGMgPT09ICdcIicgJiYgbmV4dFByZXZpZXcoKSA9PT0gJ1wiJykpKSB7XG4gICAgICBpZiAoYyA9PT0gJ1wiJykge1xuICAgICAgICAvLyBza2lwIHRoZSBlc2NhcGUgY2hhcmFjdGVyXG4gICAgICAgIHRva2VuICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gXCJcXFxcXCIgJiYgbmV4dFByZXZpZXcoKSA9PT0gXCJuXCIpIHtcbiAgICAgICAgLy8gSG9ub3IgYSBuZXdsaW5lIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgICB0b2tlbiArPSBcIlxcblwiO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlbiArPSBjO1xuICAgICAgfVxuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICBpZiAoYyAhPSAnXCInKSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignRW5kIG9mIHN0cmluZyBcIiBleHBlY3RlZCcpO1xuICAgIH1cbiAgICBuZXh0KCk7XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLklERU5USUZJRVI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gc29tZXRoaW5nIHVua25vd24gaXMgZm91bmQsIHdyb25nIGNoYXJhY3RlcnMsIGEgc3ludGF4IGVycm9yXG4gIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5VTktOT1dOO1xuICB3aGlsZSAoYyAhPSBcIlwiKSB7XG4gICAgdG9rZW4gKz0gYztcbiAgICBuZXh0KCk7XG4gIH1cbiAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdTeW50YXggZXJyb3IgaW4gcGFydCBcIicgKyBjaG9wKHRva2VuLCAzMCkgKyAnXCInKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIGdyYXBoLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoXG4gKi9cbmZ1bmN0aW9uIHBhcnNlR3JhcGgoKSB7XG4gIHZhciBncmFwaCA9IHt9O1xuXG4gIGZpcnN0KCk7XG4gIGdldFRva2VuKCk7XG5cbiAgLy8gb3B0aW9uYWwgc3RyaWN0IGtleXdvcmRcbiAgaWYgKHRva2VuID09PSBcInN0cmljdFwiKSB7XG4gICAgZ3JhcGguc3RyaWN0ID0gdHJ1ZTtcbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLy8gZ3JhcGggb3IgZGlncmFwaCBrZXl3b3JkXG4gIGlmICh0b2tlbiA9PT0gXCJncmFwaFwiIHx8IHRva2VuID09PSBcImRpZ3JhcGhcIikge1xuICAgIGdyYXBoLnR5cGUgPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLy8gb3B0aW9uYWwgZ3JhcGggaWRcbiAgaWYgKHRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICBncmFwaC5pZCA9IHRva2VuO1xuICAgIGdldFRva2VuKCk7XG4gIH1cblxuICAvLyBvcGVuIGFuZ2xlIGJyYWNrZXRcbiAgaWYgKHRva2VuICE9IFwie1wiKSB7XG4gICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJBbmdsZSBicmFja2V0IHsgZXhwZWN0ZWRcIik7XG4gIH1cbiAgZ2V0VG9rZW4oKTtcblxuICAvLyBzdGF0ZW1lbnRzXG4gIHBhcnNlU3RhdGVtZW50cyhncmFwaCk7XG5cbiAgLy8gY2xvc2UgYW5nbGUgYnJhY2tldFxuICBpZiAodG9rZW4gIT0gXCJ9XCIpIHtcbiAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkFuZ2xlIGJyYWNrZXQgfSBleHBlY3RlZFwiKTtcbiAgfVxuICBnZXRUb2tlbigpO1xuXG4gIC8vIGVuZCBvZiBmaWxlXG4gIGlmICh0b2tlbiAhPT0gXCJcIikge1xuICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiRW5kIG9mIGZpbGUgZXhwZWN0ZWRcIik7XG4gIH1cbiAgZ2V0VG9rZW4oKTtcblxuICAvLyByZW1vdmUgdGVtcG9yYXJ5IGRlZmF1bHQgb3B0aW9uc1xuICBkZWxldGUgZ3JhcGgubm9kZTtcbiAgZGVsZXRlIGdyYXBoLmVkZ2U7XG4gIGRlbGV0ZSBncmFwaC5ncmFwaDtcblxuICByZXR1cm4gZ3JhcGg7XG59XG5cbi8qKlxuICogUGFyc2UgYSBsaXN0IHdpdGggc3RhdGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnRzKGdyYXBoKSB7XG4gIHdoaWxlICh0b2tlbiAhPT0gXCJcIiAmJiB0b2tlbiAhPSBcIn1cIikge1xuICAgIHBhcnNlU3RhdGVtZW50KGdyYXBoKTtcbiAgICBpZiAodG9rZW4gPT09IFwiO1wiKSB7XG4gICAgICBnZXRUb2tlbigpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGEgc2luZ2xlIHN0YXRlbWVudC4gQ2FuIGJlIGEgYW4gYXR0cmlidXRlIHN0YXRlbWVudCwgbm9kZVxuICogc3RhdGVtZW50LCBhIHNlcmllcyBvZiBub2RlIHN0YXRlbWVudHMgYW5kIGVkZ2Ugc3RhdGVtZW50cywgb3IgYVxuICogcGFyYW1ldGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICovXG5mdW5jdGlvbiBwYXJzZVN0YXRlbWVudChncmFwaCkge1xuICAvLyBwYXJzZSBzdWJncmFwaFxuICB2YXIgc3ViZ3JhcGggPSBwYXJzZVN1YmdyYXBoKGdyYXBoKTtcbiAgaWYgKHN1YmdyYXBoKSB7XG4gICAgLy8gZWRnZSBzdGF0ZW1lbnRzXG4gICAgcGFyc2VFZGdlKGdyYXBoLCBzdWJncmFwaCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBwYXJzZSBhbiBhdHRyaWJ1dGUgc3RhdGVtZW50XG4gIHZhciBhdHRyID0gcGFyc2VBdHRyaWJ1dGVTdGF0ZW1lbnQoZ3JhcGgpO1xuICBpZiAoYXR0cikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHBhcnNlIG5vZGVcbiAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSWRlbnRpZmllciBleHBlY3RlZFwiKTtcbiAgfVxuICB2YXIgaWQgPSB0b2tlbjsgLy8gaWQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyXG4gIGdldFRva2VuKCk7XG5cbiAgaWYgKHRva2VuID09PSBcIj1cIikge1xuICAgIC8vIGlkIHN0YXRlbWVudFxuICAgIGdldFRva2VuKCk7XG4gICAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJJZGVudGlmaWVyIGV4cGVjdGVkXCIpO1xuICAgIH1cbiAgICBncmFwaFtpZF0gPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuICAgIC8vIFRPRE86IGltcGxlbWVudCBjb21tYSBzZXBhcmF0ZWQgbGlzdCB3aXRoIFwiYV9saXN0OiBJRD1JRCBbJywnXSBbYV9saXN0XSBcIlxuICB9IGVsc2Uge1xuICAgIHBhcnNlTm9kZVN0YXRlbWVudChncmFwaCwgaWQpO1xuICB9XG59XG5cbi8qKlxuICogUGFyc2UgYSBzdWJncmFwaFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaCAgICBwYXJlbnQgZ3JhcGggb2JqZWN0XG4gKiBAcmV0dXJucyB7b2JqZWN0IHwgbnVsbH0gc3ViZ3JhcGhcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdWJncmFwaChncmFwaCkge1xuICB2YXIgc3ViZ3JhcGggPSBudWxsO1xuXG4gIC8vIG9wdGlvbmFsIHN1YmdyYXBoIGtleXdvcmRcbiAgaWYgKHRva2VuID09PSBcInN1YmdyYXBoXCIpIHtcbiAgICBzdWJncmFwaCA9IHt9O1xuICAgIHN1YmdyYXBoLnR5cGUgPSBcInN1YmdyYXBoXCI7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIG9wdGlvbmFsIGdyYXBoIGlkXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICAgIHN1YmdyYXBoLmlkID0gdG9rZW47XG4gICAgICBnZXRUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG9wZW4gYW5nbGUgYnJhY2tldFxuICBpZiAodG9rZW4gPT09IFwie1wiKSB7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIGlmICghc3ViZ3JhcGgpIHtcbiAgICAgIHN1YmdyYXBoID0ge307XG4gICAgfVxuICAgIHN1YmdyYXBoLnBhcmVudCA9IGdyYXBoO1xuICAgIHN1YmdyYXBoLm5vZGUgPSBncmFwaC5ub2RlO1xuICAgIHN1YmdyYXBoLmVkZ2UgPSBncmFwaC5lZGdlO1xuICAgIHN1YmdyYXBoLmdyYXBoID0gZ3JhcGguZ3JhcGg7XG5cbiAgICAvLyBzdGF0ZW1lbnRzXG4gICAgcGFyc2VTdGF0ZW1lbnRzKHN1YmdyYXBoKTtcblxuICAgIC8vIGNsb3NlIGFuZ2xlIGJyYWNrZXRcbiAgICBpZiAodG9rZW4gIT0gXCJ9XCIpIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiQW5nbGUgYnJhY2tldCB9IGV4cGVjdGVkXCIpO1xuICAgIH1cbiAgICBnZXRUb2tlbigpO1xuXG4gICAgLy8gcmVtb3ZlIHRlbXBvcmFyeSBkZWZhdWx0IG9wdGlvbnNcbiAgICBkZWxldGUgc3ViZ3JhcGgubm9kZTtcbiAgICBkZWxldGUgc3ViZ3JhcGguZWRnZTtcbiAgICBkZWxldGUgc3ViZ3JhcGguZ3JhcGg7XG4gICAgZGVsZXRlIHN1YmdyYXBoLnBhcmVudDtcblxuICAgIC8vIHJlZ2lzdGVyIGF0IHRoZSBwYXJlbnQgZ3JhcGhcbiAgICBpZiAoIWdyYXBoLnN1YmdyYXBocykge1xuICAgICAgZ3JhcGguc3ViZ3JhcGhzID0gW107XG4gICAgfVxuICAgIGdyYXBoLnN1YmdyYXBocy5wdXNoKHN1YmdyYXBoKTtcbiAgfVxuXG4gIHJldHVybiBzdWJncmFwaDtcbn1cblxuLyoqXG4gKiBwYXJzZSBhbiBhdHRyaWJ1dGUgc3RhdGVtZW50IGxpa2UgXCJub2RlIFtzaGFwZT1jaXJjbGUgZm9udFNpemU9MTZdXCIuXG4gKiBBdmFpbGFibGUga2V5d29yZHMgYXJlICdub2RlJywgJ2VkZ2UnLCAnZ3JhcGgnLlxuICogVGhlIHByZXZpb3VzIGxpc3Qgd2l0aCBkZWZhdWx0IGF0dHJpYnV0ZXMgd2lsbCBiZSByZXBsYWNlZFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICogQHJldHVybnMge3N0cmluZyB8IG51bGx9IGtleXdvcmQgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcGFyc2VkIGF0dHJpYnV0ZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGUsIGVkZ2UsIGdyYXBoKSwgb3IgbnVsbCBpZiBub3RoaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBwYXJzZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlU3RhdGVtZW50KGdyYXBoKSB7XG4gIC8vIGF0dHJpYnV0ZSBzdGF0ZW1lbnRzXG4gIGlmICh0b2tlbiA9PT0gXCJub2RlXCIpIHtcbiAgICBnZXRUb2tlbigpO1xuXG4gICAgLy8gbm9kZSBhdHRyaWJ1dGVzXG4gICAgZ3JhcGgubm9kZSA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICAgIHJldHVybiBcIm5vZGVcIjtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gXCJlZGdlXCIpIHtcbiAgICBnZXRUb2tlbigpO1xuXG4gICAgLy8gZWRnZSBhdHRyaWJ1dGVzXG4gICAgZ3JhcGguZWRnZSA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICAgIHJldHVybiBcImVkZ2VcIjtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gXCJncmFwaFwiKSB7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIGdyYXBoIGF0dHJpYnV0ZXNcbiAgICBncmFwaC5ncmFwaCA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICAgIHJldHVybiBcImdyYXBoXCI7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBwYXJzZSBhIG5vZGUgc3RhdGVtZW50XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGdyYXBoXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gaWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VOb2RlU3RhdGVtZW50KGdyYXBoLCBpZCkge1xuICAvLyBub2RlIHN0YXRlbWVudFxuICB2YXIgbm9kZSA9IHtcbiAgICBpZDogaWQsXG4gIH07XG4gIHZhciBhdHRyID0gcGFyc2VBdHRyaWJ1dGVMaXN0KCk7XG4gIGlmIChhdHRyKSB7XG4gICAgbm9kZS5hdHRyID0gYXR0cjtcbiAgfVxuICBhZGROb2RlKGdyYXBoLCBub2RlKTtcblxuICAvLyBlZGdlIHN0YXRlbWVudHNcbiAgcGFyc2VFZGdlKGdyYXBoLCBpZCk7XG59XG5cbi8qKlxuICogUGFyc2UgYW4gZWRnZSBvciBhIHNlcmllcyBvZiBlZGdlc1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGZyb20gICAgICAgIElkIG9mIHRoZSBmcm9tIG5vZGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VFZGdlKGdyYXBoLCBmcm9tKSB7XG4gIHdoaWxlICh0b2tlbiA9PT0gXCItPlwiIHx8IHRva2VuID09PSBcIi0tXCIpIHtcbiAgICB2YXIgdG87XG4gICAgdmFyIHR5cGUgPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuXG4gICAgdmFyIHN1YmdyYXBoID0gcGFyc2VTdWJncmFwaChncmFwaCk7XG4gICAgaWYgKHN1YmdyYXBoKSB7XG4gICAgICB0byA9IHN1YmdyYXBoO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodG9rZW5UeXBlICE9IFRPS0VOVFlQRS5JREVOVElGSUVSKSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSWRlbnRpZmllciBvciBzdWJncmFwaCBleHBlY3RlZFwiKTtcbiAgICAgIH1cbiAgICAgIHRvID0gdG9rZW47XG4gICAgICBhZGROb2RlKGdyYXBoLCB7XG4gICAgICAgIGlkOiB0byxcbiAgICAgIH0pO1xuICAgICAgZ2V0VG9rZW4oKTtcbiAgICB9XG5cbiAgICAvLyBwYXJzZSBlZGdlIGF0dHJpYnV0ZXNcbiAgICB2YXIgYXR0ciA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuXG4gICAgLy8gY3JlYXRlIGVkZ2VcbiAgICB2YXIgZWRnZSA9IGNyZWF0ZUVkZ2UoZ3JhcGgsIGZyb20sIHRvLCB0eXBlLCBhdHRyKTtcbiAgICBhZGRFZGdlKGdyYXBoLCBlZGdlKTtcblxuICAgIGZyb20gPSB0bztcbiAgfVxufVxuXG4vKipcbiAqIEFzIGV4cGxhaW5lZCBpbiBbMV0sIGdyYXBodml6IGhhcyBsaW1pdGF0aW9ucyBmb3IgY29tYmluYXRpb24gb2ZcbiAqIGFycm93W2hlYWR8dGFpbF0gYW5kIGRpci4gSWYgYXR0cmlidXRlIGxpc3QgaW5jbHVkZXMgJ2RpcicsXG4gKiBmb2xsb3dpbmcgY2FzZXMganVzdCBiZSBzdXBwb3J0ZWQuXG4gKiAgIDEuIGJvdGggb3Igbm9uZSArIGFycm93aGVhZCwgYXJyb3d0YWlsXG4gKiAgIDIuIGZvcndhcmQgKyBhcnJvd2hlYWQgKGFycm93dGFpbCBpcyBub3QgYWZmZWR0ZWQpXG4gKiAgIDMuIGJhY2sgKyBhcnJvd3RhaWwgKGFycm93aGVhZCBpcyBub3QgYWZmZWN0ZWQpXG4gKiBbMV0gaHR0cHM6Ly93d3cuZ3JhcGh2aXoub3JnL2RvYy9pbmZvL2F0dHJzLmh0bWwjaDp1bmRpcl9ub3RlXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwYXJzZUF0dHJpYnV0ZUxpc3QoKSB0byBwYXJzZSAnZGlyJ1xuICogYXR0cmlidXRlIHdpdGggZ2l2ZW4gJ2F0dHJfbmFtZXMnIGFuZCAnYXR0cl9saXN0Jy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gYXR0cl9uYW1lcyAgQXJyYXkgb2YgYXR0cmlidXRlIG5hbWVzXG4gKiBAcGFyYW0ge29iamVjdH0gYXR0cl9saXN0ICBBcnJheSBvZiBvYmplY3RzIG9mIGF0dHJpYnV0ZSBzZXRcbiAqIEByZXR1cm5zIHtvYmplY3R9IGF0dHJfbGlzdCAgVXBkYXRlZCBhdHRyX2xpc3RcbiAqL1xuZnVuY3Rpb24gcGFyc2VEaXJBdHRyaWJ1dGUoYXR0cl9uYW1lcywgYXR0cl9saXN0KSB7XG4gIHZhciBpO1xuICBpZiAoYXR0cl9uYW1lcy5pbmNsdWRlcyhcImRpclwiKSkge1xuICAgIHZhciBpZHggPSB7fTsgLy8gZ2V0IGluZGV4IG9mICdhcnJvd3MnIGFuZCAnZGlyJ1xuICAgIGlkeC5hcnJvd3MgPSB7fTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cl9saXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwiYXJyb3dzXCIpIHtcbiAgICAgICAgaWYgKGF0dHJfbGlzdFtpXS52YWx1ZS50byAhPSBudWxsKSB7XG4gICAgICAgICAgaWR4LmFycm93cy50byA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXR0cl9saXN0W2ldLnZhbHVlLmZyb20gIT0gbnVsbCkge1xuICAgICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJJbnZhbGlkIHZhbHVlIG9mIGFycm93c1wiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhdHRyX2xpc3RbaV0ubmFtZSA9PT0gXCJkaXJcIikge1xuICAgICAgICBpZHguZGlyID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaXJzdCwgYWRkIGRlZmF1bHQgYXJyb3cgc2hhcGUgaWYgaXQgaXMgbm90IGFzc2lnbmVkIHRvIGF2b2lkIGVycm9yXG4gICAgdmFyIGRpcl90eXBlID0gYXR0cl9saXN0W2lkeC5kaXJdLnZhbHVlO1xuICAgIGlmICghYXR0cl9uYW1lcy5pbmNsdWRlcyhcImFycm93c1wiKSkge1xuICAgICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyB0bzogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgZnJvbTogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgdG86IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcImJhY2tcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyBmcm9tOiB7IGVuYWJsZWQ6IHRydWUgfSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWR4LmFycm93cy5mcm9tID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKCdJbnZhbGlkIGRpciB0eXBlIFwiJyArIGRpcl90eXBlICsgJ1wiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyb21fdHlwZTtcbiAgICB2YXIgdG9fdHlwZTtcbiAgICAvLyB1cGRhdGUgJ2Fycm93cycgYXR0cmlidXRlIGZyb20gJ2RpcicuXG4gICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgLy8gYm90aCBvZiBzaGFwZXMgb2YgJ2Zyb20nIGFuZCAndG8nIGFyZSBnaXZlblxuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0udmFsdWUuZnJvbS50eXBlO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYXR0cl9saXN0LnNwbGljZShpZHguYXJyb3dzLmZyb20sIDEpO1xuXG4gICAgICAgIC8vIHNoYXBlIG9mICd0bycgaXMgYXNzaWduZWQgYW5kIHVzZSBkZWZhdWx0IHRvICdmcm9tJ1xuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBvbmx5IHNoYXBlIG9mICdmcm9tJyBpcyBhc3NpZ25lZCBhbmQgdXNlIGRlZmF1bHQgZm9yICd0bydcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJiYWNrXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ2Zyb20nXG4gICAgICBpZiAoaWR4LmFycm93cy50byAmJiBpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiXCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gZ2l2ZW4gc2hhcGUgb2YgJ3RvJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGlkeC5hcnJvd3MudG87XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFzc2lnbiBnaXZlbiAnZnJvbScgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZnJvbToge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgdmFyIGlkeF9hcnJvdztcbiAgICAgIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIGlkeF9hcnJvdyA9IGlkeC5hcnJvd3MudG87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZHhfYXJyb3cgPSBpZHguYXJyb3dzLmZyb207XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHhfYXJyb3ddID0ge1xuICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5uYW1lLFxuICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ3RvJ1xuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYXNzaWduIGdpdmVuICd0bycgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGdpdmVuIHNoYXBlIG9mICdmcm9tJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiYXJyb3dcIjtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgaWR4LmFycm93cy50byA9IGlkeC5hcnJvd3MuZnJvbTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHRvOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKCdJbnZhbGlkIGRpciB0eXBlIFwiJyArIGRpcl90eXBlICsgJ1wiJyk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlICdkaXInIGF0dHJpYnV0ZSBubyBuZWVkIGFueW1vcmVcbiAgICBhdHRyX2xpc3Quc3BsaWNlKGlkeC5kaXIsIDEpO1xuICB9XG4gIHJldHVybiBhdHRyX2xpc3Q7XG59XG5cbi8qKlxuICogUGFyc2UgYSBzZXQgd2l0aCBhdHRyaWJ1dGVzLFxuICogZm9yIGV4YW1wbGUgW2xhYmVsPVwiMS4wMDBcIiwgc2hhcGU9c29saWRdXG4gKlxuICogQHJldHVybnMge29iamVjdCB8IG51bGx9IGF0dHJcbiAqL1xuZnVuY3Rpb24gcGFyc2VBdHRyaWJ1dGVMaXN0KCkge1xuICB2YXIgaTtcbiAgdmFyIGF0dHIgPSBudWxsO1xuXG4gIC8vIGVkZ2Ugc3R5bGVzIG9mIGRvdCBhbmQgdmlzXG4gIHZhciBlZGdlU3R5bGVzID0ge1xuICAgIGRhc2hlZDogdHJ1ZSxcbiAgICBzb2xpZDogZmFsc2UsXG4gICAgZG90dGVkOiBbMSwgNV0sXG4gIH07XG5cbiAgLyoqXG4gICAqIERlZmluZSBhcnJvdyB0eXBlcy5cbiAgICogdmlzIGN1cnJlbnRseSBzdXBwb3J0cyB0eXBlcyBkZWZpbmVkIGluICdhcnJvd1R5cGVzJy5cbiAgICogRGV0YWlscyBvZiBhcnJvdyBzaGFwZXMgYXJlIGRlc2NyaWJlZCBpblxuICAgKiBodHRwOi8vd3d3LmdyYXBodml6Lm9yZy9jb250ZW50L2Fycm93LXNoYXBlc1xuICAgKi9cbiAgdmFyIGFycm93VHlwZXMgPSB7XG4gICAgZG90OiBcImNpcmNsZVwiLFxuICAgIGJveDogXCJib3hcIixcbiAgICBjcm93OiBcImNyb3dcIixcbiAgICBjdXJ2ZTogXCJjdXJ2ZVwiLFxuICAgIGljdXJ2ZTogXCJpbnZfY3VydmVcIixcbiAgICBub3JtYWw6IFwidHJpYW5nbGVcIixcbiAgICBpbnY6IFwiaW52X3RyaWFuZ2xlXCIsXG4gICAgZGlhbW9uZDogXCJkaWFtb25kXCIsXG4gICAgdGVlOiBcImJhclwiLFxuICAgIHZlZTogXCJ2ZWVcIixcbiAgfTtcblxuICAvKipcbiAgICogJ2F0dHJfbGlzdCcgY29udGFpbnMgYXR0cmlidXRlcyBmb3IgY2hlY2tpbmcgaWYgc29tZSBvZiB0aGVtIGFyZSBhZmZlY3RlZFxuICAgKiBsYXRlci4gRm9yIGluc3RhbmNlLCBib3RoIG9mICdhcnJvd2hlYWQnIGFuZCAnZGlyJyAoZWRnZSBzdHlsZSBkZWZpbmVkXG4gICAqIGluIERPVCkgbWFrZSBjaGFuZ2VzIHRvICdhcnJvd3MnIGF0dHJpYnV0ZSBpbiB2aXMuXG4gICAqL1xuICB2YXIgYXR0cl9saXN0ID0gbmV3IEFycmF5KCk7XG4gIHZhciBhdHRyX25hbWVzID0gbmV3IEFycmF5KCk7IC8vIHVzZWQgZm9yIGNoZWNraW5nIHRoZSBjYXNlLlxuXG4gIC8vIHBhcnNlIGF0dHJpYnV0ZXNcbiAgd2hpbGUgKHRva2VuID09PSBcIltcIikge1xuICAgIGdldFRva2VuKCk7XG4gICAgYXR0ciA9IHt9O1xuICAgIHdoaWxlICh0b2tlbiAhPT0gXCJcIiAmJiB0b2tlbiAhPSBcIl1cIikge1xuICAgICAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkF0dHJpYnV0ZSBuYW1lIGV4cGVjdGVkXCIpO1xuICAgICAgfVxuICAgICAgdmFyIG5hbWUgPSB0b2tlbjtcblxuICAgICAgZ2V0VG9rZW4oKTtcbiAgICAgIGlmICh0b2tlbiAhPSBcIj1cIikge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkVxdWFsIHNpZ24gPSBleHBlY3RlZFwiKTtcbiAgICAgIH1cbiAgICAgIGdldFRva2VuKCk7XG5cbiAgICAgIGlmICh0b2tlblR5cGUgIT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJBdHRyaWJ1dGUgdmFsdWUgZXhwZWN0ZWRcIik7XG4gICAgICB9XG4gICAgICB2YXIgdmFsdWUgPSB0b2tlbjtcblxuICAgICAgLy8gY29udmVydCBmcm9tIGRvdCBzdHlsZSB0byB2aXNcbiAgICAgIGlmIChuYW1lID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgdmFsdWUgPSBlZGdlU3R5bGVzW3ZhbHVlXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFycm93VHlwZTtcbiAgICAgIGlmIChuYW1lID09PSBcImFycm93aGVhZFwiKSB7XG4gICAgICAgIGFycm93VHlwZSA9IGFycm93VHlwZXNbdmFsdWVdO1xuICAgICAgICBuYW1lID0gXCJhcnJvd3NcIjtcbiAgICAgICAgdmFsdWUgPSB7IHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGFycm93VHlwZSB9IH07XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSBcImFycm93dGFpbFwiKSB7XG4gICAgICAgIGFycm93VHlwZSA9IGFycm93VHlwZXNbdmFsdWVdO1xuICAgICAgICBuYW1lID0gXCJhcnJvd3NcIjtcbiAgICAgICAgdmFsdWUgPSB7IGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogYXJyb3dUeXBlIH0gfTtcbiAgICAgIH1cblxuICAgICAgYXR0cl9saXN0LnB1c2goeyBhdHRyOiBhdHRyLCBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICBhdHRyX25hbWVzLnB1c2gobmFtZSk7XG5cbiAgICAgIGdldFRva2VuKCk7XG4gICAgICBpZiAodG9rZW4gPT0gXCIsXCIpIHtcbiAgICAgICAgZ2V0VG9rZW4oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9rZW4gIT0gXCJdXCIpIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiQnJhY2tldCBdIGV4cGVjdGVkXCIpO1xuICAgIH1cbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzIGV4cGxhaW5lZCBpbiBbMV0sIGdyYXBodml6IGhhcyBsaW1pdGF0aW9ucyBmb3IgY29tYmluYXRpb24gb2ZcbiAgICogYXJyb3dbaGVhZHx0YWlsXSBhbmQgZGlyLiBJZiBhdHRyaWJ1dGUgbGlzdCBpbmNsdWRlcyAnZGlyJyxcbiAgICogZm9sbG93aW5nIGNhc2VzIGp1c3QgYmUgc3VwcG9ydGVkLlxuICAgKiAgIDEuIGJvdGggb3Igbm9uZSArIGFycm93aGVhZCwgYXJyb3d0YWlsXG4gICAqICAgMi4gZm9yd2FyZCArIGFycm93aGVhZCAoYXJyb3d0YWlsIGlzIG5vdCBhZmZlZHRlZClcbiAgICogICAzLiBiYWNrICsgYXJyb3d0YWlsIChhcnJvd2hlYWQgaXMgbm90IGFmZmVjdGVkKVxuICAgKiBbMV0gaHR0cHM6Ly93d3cuZ3JhcGh2aXoub3JnL2RvYy9pbmZvL2F0dHJzLmh0bWwjaDp1bmRpcl9ub3RlXG4gICAqL1xuICBpZiAoYXR0cl9uYW1lcy5pbmNsdWRlcyhcImRpclwiKSkge1xuICAgIHZhciBpZHggPSB7fTsgLy8gZ2V0IGluZGV4IG9mICdhcnJvd3MnIGFuZCAnZGlyJ1xuICAgIGlkeC5hcnJvd3MgPSB7fTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cl9saXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwiYXJyb3dzXCIpIHtcbiAgICAgICAgaWYgKGF0dHJfbGlzdFtpXS52YWx1ZS50byAhPSBudWxsKSB7XG4gICAgICAgICAgaWR4LmFycm93cy50byA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXR0cl9saXN0W2ldLnZhbHVlLmZyb20gIT0gbnVsbCkge1xuICAgICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJJbnZhbGlkIHZhbHVlIG9mIGFycm93c1wiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhdHRyX2xpc3RbaV0ubmFtZSA9PT0gXCJkaXJcIikge1xuICAgICAgICBpZHguZGlyID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaXJzdCwgYWRkIGRlZmF1bHQgYXJyb3cgc2hhcGUgaWYgaXQgaXMgbm90IGFzc2lnbmVkIHRvIGF2b2lkIGVycm9yXG4gICAgdmFyIGRpcl90eXBlID0gYXR0cl9saXN0W2lkeC5kaXJdLnZhbHVlO1xuICAgIGlmICghYXR0cl9uYW1lcy5pbmNsdWRlcyhcImFycm93c1wiKSkge1xuICAgICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyB0bzogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgZnJvbTogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgdG86IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcImJhY2tcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyBmcm9tOiB7IGVuYWJsZWQ6IHRydWUgfSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWR4LmFycm93cy5mcm9tID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKCdJbnZhbGlkIGRpciB0eXBlIFwiJyArIGRpcl90eXBlICsgJ1wiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyb21fdHlwZTtcbiAgICB2YXIgdG9fdHlwZTtcbiAgICAvLyB1cGRhdGUgJ2Fycm93cycgYXR0cmlidXRlIGZyb20gJ2RpcicuXG4gICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgLy8gYm90aCBvZiBzaGFwZXMgb2YgJ2Zyb20nIGFuZCAndG8nIGFyZSBnaXZlblxuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0udmFsdWUuZnJvbS50eXBlO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYXR0cl9saXN0LnNwbGljZShpZHguYXJyb3dzLmZyb20sIDEpO1xuXG4gICAgICAgIC8vIHNoYXBlIG9mICd0bycgaXMgYXNzaWduZWQgYW5kIHVzZSBkZWZhdWx0IHRvICdmcm9tJ1xuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBvbmx5IHNoYXBlIG9mICdmcm9tJyBpcyBhc3NpZ25lZCBhbmQgdXNlIGRlZmF1bHQgZm9yICd0bydcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJiYWNrXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ2Zyb20nXG4gICAgICBpZiAoaWR4LmFycm93cy50byAmJiBpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiXCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gZ2l2ZW4gc2hhcGUgb2YgJ3RvJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGlkeC5hcnJvd3MudG87XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFzc2lnbiBnaXZlbiAnZnJvbScgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZnJvbToge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgdmFyIGlkeF9hcnJvdztcbiAgICAgIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIGlkeF9hcnJvdyA9IGlkeC5hcnJvd3MudG87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZHhfYXJyb3cgPSBpZHguYXJyb3dzLmZyb207XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHhfYXJyb3ddID0ge1xuICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5uYW1lLFxuICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ3RvJ1xuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYXNzaWduIGdpdmVuICd0bycgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGdpdmVuIHNoYXBlIG9mICdmcm9tJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiYXJyb3dcIjtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgaWR4LmFycm93cy50byA9IGlkeC5hcnJvd3MuZnJvbTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS52YWx1ZS50by50eXBlIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignSW52YWxpZCBkaXIgdHlwZSBcIicgKyBkaXJfdHlwZSArICdcIicpO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSAnZGlyJyBhdHRyaWJ1dGUgbm8gbmVlZCBhbnltb3JlXG4gICAgYXR0cl9saXN0LnNwbGljZShpZHguZGlyLCAxKTtcbiAgfVxuXG4gIC8vIHBhcnNlICdwZW53aWR0aCdcbiAgdmFyIG5vZl9hdHRyX2xpc3Q7XG4gIGlmIChhdHRyX25hbWVzLmluY2x1ZGVzKFwicGVud2lkdGhcIikpIHtcbiAgICB2YXIgdG1wX2F0dHJfbGlzdCA9IFtdO1xuXG4gICAgbm9mX2F0dHJfbGlzdCA9IGF0dHJfbGlzdC5sZW5ndGg7XG4gICAgZm9yIChpID0gMDsgaSA8IG5vZl9hdHRyX2xpc3Q7IGkrKykge1xuICAgICAgLy8gZXhjbHVkZSAnd2lkdGgnIGZyb20gYXR0cl9saXN0IGlmICdwZW53aWR0aCcgZXhpc3RzXG4gICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgIT09IFwid2lkdGhcIikge1xuICAgICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwicGVud2lkdGhcIikge1xuICAgICAgICAgIGF0dHJfbGlzdFtpXS5uYW1lID0gXCJ3aWR0aFwiO1xuICAgICAgICB9XG4gICAgICAgIHRtcF9hdHRyX2xpc3QucHVzaChhdHRyX2xpc3RbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBhdHRyX2xpc3QgPSB0bXBfYXR0cl9saXN0O1xuICB9XG5cbiAgbm9mX2F0dHJfbGlzdCA9IGF0dHJfbGlzdC5sZW5ndGg7XG4gIGZvciAoaSA9IDA7IGkgPCBub2ZfYXR0cl9saXN0OyBpKyspIHtcbiAgICBzZXRWYWx1ZShhdHRyX2xpc3RbaV0uYXR0ciwgYXR0cl9saXN0W2ldLm5hbWUsIGF0dHJfbGlzdFtpXS52YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gYXR0cjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzeW50YXggZXJyb3Igd2l0aCBleHRyYSBpbmZvcm1hdGlvbiBvbiBjdXJyZW50IHRva2VuIGFuZCBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge1N5bnRheEVycm9yfSBlcnJcbiAqL1xuZnVuY3Rpb24gbmV3U3ludGF4RXJyb3IobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFN5bnRheEVycm9yKFxuICAgIG1lc3NhZ2UgKyAnLCBnb3QgXCInICsgY2hvcCh0b2tlbiwgMzApICsgJ1wiIChjaGFyICcgKyBpbmRleCArIFwiKVwiXG4gICk7XG59XG5cbi8qKlxuICogQ2hvcCBvZmYgdGV4dCBhZnRlciBhIG1heGltdW0gbGVuZ3RoXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhMZW5ndGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNob3AodGV4dCwgbWF4TGVuZ3RoKSB7XG4gIHJldHVybiB0ZXh0Lmxlbmd0aCA8PSBtYXhMZW5ndGggPyB0ZXh0IDogdGV4dC5zdWJzdHIoMCwgMjcpICsgXCIuLi5cIjtcbn1cblxuLyoqXG4gKiBFeGVjdXRlIGEgZnVuY3Rpb24gZm4gZm9yIGVhY2ggcGFpciBvZiBlbGVtZW50cyBpbiB0d28gYXJyYXlzXG4gKlxuICogQHBhcmFtIHtBcnJheSB8ICp9IGFycmF5MVxuICogQHBhcmFtIHtBcnJheSB8ICp9IGFycmF5MlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaDIoYXJyYXkxLCBhcnJheTIsIGZuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycmF5MSkpIHtcbiAgICBhcnJheTEuZm9yRWFjaChmdW5jdGlvbiAoZWxlbTEpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5MikpIHtcbiAgICAgICAgYXJyYXkyLmZvckVhY2goZnVuY3Rpb24gKGVsZW0yKSB7XG4gICAgICAgICAgZm4oZWxlbTEsIGVsZW0yKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbihlbGVtMSwgYXJyYXkyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheTIpKSB7XG4gICAgICBhcnJheTIuZm9yRWFjaChmdW5jdGlvbiAoZWxlbTIpIHtcbiAgICAgICAgZm4oYXJyYXkxLCBlbGVtMik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm4oYXJyYXkxLCBhcnJheTIpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNldCBhIG5lc3RlZCBwcm9wZXJ0eSBvbiBhbiBvYmplY3RcbiAqIFdoZW4gbmVzdGVkIG9iamVjdHMgYXJlIG1pc3NpbmcsIHRoZXkgd2lsbCBiZSBjcmVhdGVkLlxuICogRm9yIGV4YW1wbGUgc2V0UHJvcCh7fSwgJ2ZvbnQuY29sb3InLCAncmVkJykgd2lsbCByZXR1cm4ge2ZvbnQ6IHtjb2xvcjogJ3JlZCd9fVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoICAgQSBkb3Qgc2VwYXJhdGVkIHN0cmluZyBsaWtlICdmb250LmNvbG9yJ1xuICogQHBhcmFtIHsqfSB2YWx1ZSAgICAgICBWYWx1ZSBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIHRoZSBvcmlnaW5hbCBvYmplY3QsIGFsbG93cyBmb3IgY2hhaW5pbmcuXG4gKi9cbmZ1bmN0aW9uIHNldFByb3Aob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICB2YXIgbmFtZXMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgdmFyIHByb3AgPSBuYW1lcy5wb3AoKTtcblxuICAvLyB0cmF2ZXJzZSBvdmVyIHRoZSBuZXN0ZWQgb2JqZWN0c1xuICB2YXIgb2JqID0gb2JqZWN0O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lc1tpXTtcbiAgICBpZiAoIShuYW1lIGluIG9iaikpIHtcbiAgICAgIG9ialtuYW1lXSA9IHt9O1xuICAgIH1cbiAgICBvYmogPSBvYmpbbmFtZV07XG4gIH1cblxuICAvLyBzZXQgdGhlIHByb3BlcnR5IHZhbHVlXG4gIG9ialtwcm9wXSA9IHZhbHVlO1xuXG4gIHJldHVybiBvYmplY3Q7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBvYmplY3Qgd2l0aCBET1QgYXR0cmlidXRlcyB0byB0aGVpciB2aXMuanMgZXF1aXZhbGVudHMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGF0dHIgICAgIE9iamVjdCB3aXRoIERPVCBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge29iamVjdH0gbWFwcGluZ1xuICogQHJldHVybnMge29iamVjdH0gICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHZpcy5qcyBhdHRyaWJ1dGVzXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBdHRyKGF0dHIsIG1hcHBpbmcpIHtcbiAgdmFyIGNvbnZlcnRlZCA9IHt9O1xuXG4gIGZvciAodmFyIHByb3AgaW4gYXR0cikge1xuICAgIGlmIChhdHRyLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICB2YXIgdmlzUHJvcCA9IG1hcHBpbmdbcHJvcF07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2aXNQcm9wKSkge1xuICAgICAgICB2aXNQcm9wLmZvckVhY2goZnVuY3Rpb24gKHZpc1Byb3BJKSB7XG4gICAgICAgICAgc2V0UHJvcChjb252ZXJ0ZWQsIHZpc1Byb3BJLCBhdHRyW3Byb3BdKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2aXNQcm9wID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHNldFByb3AoY29udmVydGVkLCB2aXNQcm9wLCBhdHRyW3Byb3BdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFByb3AoY29udmVydGVkLCBwcm9wLCBhdHRyW3Byb3BdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29udmVydGVkO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBzdHJpbmcgY29udGFpbmluZyBhIGdyYXBoIGluIERPVCBsYW5ndWFnZSBpbnRvIGEgbWFwIGNvbnRhaW5pbmdcbiAqIHdpdGggbm9kZXMgYW5kIGVkZ2VzIGluIHRoZSBmb3JtYXQgb2YgZ3JhcGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgICAgICAgICBUZXh0IGNvbnRhaW5pbmcgYSBncmFwaCBpbiBET1Qtbm90YXRpb25cbiAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoRGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gRE9UVG9HcmFwaChkYXRhKSB7XG4gIC8vIHBhcnNlIHRoZSBET1QgZmlsZVxuICB2YXIgZG90RGF0YSA9IHBhcnNlRE9UKGRhdGEpO1xuICB2YXIgZ3JhcGhEYXRhID0ge1xuICAgIG5vZGVzOiBbXSxcbiAgICBlZGdlczogW10sXG4gICAgb3B0aW9uczoge30sXG4gIH07XG5cbiAgLy8gY29weSB0aGUgbm9kZXNcbiAgaWYgKGRvdERhdGEubm9kZXMpIHtcbiAgICBkb3REYXRhLm5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGRvdE5vZGUpIHtcbiAgICAgIHZhciBncmFwaE5vZGUgPSB7XG4gICAgICAgIGlkOiBkb3ROb2RlLmlkLFxuICAgICAgICBsYWJlbDogU3RyaW5nKGRvdE5vZGUubGFiZWwgfHwgZG90Tm9kZS5pZCksXG4gICAgICB9O1xuICAgICAgbWVyZ2UoZ3JhcGhOb2RlLCBjb252ZXJ0QXR0cihkb3ROb2RlLmF0dHIsIE5PREVfQVRUUl9NQVBQSU5HKSk7XG4gICAgICBpZiAoZ3JhcGhOb2RlLmltYWdlKSB7XG4gICAgICAgIGdyYXBoTm9kZS5zaGFwZSA9IFwiaW1hZ2VcIjtcbiAgICAgIH1cbiAgICAgIGdyYXBoRGF0YS5ub2Rlcy5wdXNoKGdyYXBoTm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBjb3B5IHRoZSBlZGdlc1xuICBpZiAoZG90RGF0YS5lZGdlcykge1xuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYW4gZWRnZSBpbiBET1QgZm9ybWF0IHRvIGFuIGVkZ2Ugd2l0aCBWaXNHcmFwaCBmb3JtYXRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb3RFZGdlXG4gICAgICogQHJldHVybnMge29iamVjdH0gZ3JhcGhFZGdlXG4gICAgICovXG4gICAgdmFyIGNvbnZlcnRFZGdlID0gZnVuY3Rpb24gKGRvdEVkZ2UpIHtcbiAgICAgIHZhciBncmFwaEVkZ2UgPSB7XG4gICAgICAgIGZyb206IGRvdEVkZ2UuZnJvbSxcbiAgICAgICAgdG86IGRvdEVkZ2UudG8sXG4gICAgICB9O1xuICAgICAgbWVyZ2UoZ3JhcGhFZGdlLCBjb252ZXJ0QXR0cihkb3RFZGdlLmF0dHIsIEVER0VfQVRUUl9NQVBQSU5HKSk7XG5cbiAgICAgIC8vIEFkZCBhcnJvd3MgYXR0cmlidXRlIHRvIGRlZmF1bHQgc3R5bGVkIGFycm93LlxuICAgICAgLy8gVGhlIHJlYXNvbiB3aHkgZGVmYXVsdCBzdHlsZSBpcyBub3QgYWRkZWQgaW4gcGFyc2VBdHRyaWJ1dGVMaXN0KCkgaXNcbiAgICAgIC8vIGJlY2F1c2Ugb25seSBkZWZhdWx0IGlzIGNsZWFyZWQgYmVmb3JlIGhlcmUuXG4gICAgICBpZiAoZ3JhcGhFZGdlLmFycm93cyA9PSBudWxsICYmIGRvdEVkZ2UudHlwZSA9PT0gXCItPlwiKSB7XG4gICAgICAgIGdyYXBoRWRnZS5hcnJvd3MgPSBcInRvXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBncmFwaEVkZ2U7XG4gICAgfTtcblxuICAgIGRvdERhdGEuZWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZG90RWRnZSkge1xuICAgICAgdmFyIGZyb20sIHRvO1xuICAgICAgaWYgKGRvdEVkZ2UuZnJvbSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICBmcm9tID0gZG90RWRnZS5mcm9tLm5vZGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnJvbSA9IHtcbiAgICAgICAgICBpZDogZG90RWRnZS5mcm9tLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZG90RWRnZS50byBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0byA9IGRvdEVkZ2UudG8ubm9kZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0byA9IHtcbiAgICAgICAgICBpZDogZG90RWRnZS50byxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRvdEVkZ2UuZnJvbSBpbnN0YW5jZW9mIE9iamVjdCAmJiBkb3RFZGdlLmZyb20uZWRnZXMpIHtcbiAgICAgICAgZG90RWRnZS5mcm9tLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKHN1YkVkZ2UpIHtcbiAgICAgICAgICB2YXIgZ3JhcGhFZGdlID0gY29udmVydEVkZ2Uoc3ViRWRnZSk7XG4gICAgICAgICAgZ3JhcGhEYXRhLmVkZ2VzLnB1c2goZ3JhcGhFZGdlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZvckVhY2gyKGZyb20sIHRvLCBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcbiAgICAgICAgdmFyIHN1YkVkZ2UgPSBjcmVhdGVFZGdlKFxuICAgICAgICAgIGdyYXBoRGF0YSxcbiAgICAgICAgICBmcm9tLmlkLFxuICAgICAgICAgIHRvLmlkLFxuICAgICAgICAgIGRvdEVkZ2UudHlwZSxcbiAgICAgICAgICBkb3RFZGdlLmF0dHJcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIGdyYXBoRWRnZSA9IGNvbnZlcnRFZGdlKHN1YkVkZ2UpO1xuICAgICAgICBncmFwaERhdGEuZWRnZXMucHVzaChncmFwaEVkZ2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkb3RFZGdlLnRvIGluc3RhbmNlb2YgT2JqZWN0ICYmIGRvdEVkZ2UudG8uZWRnZXMpIHtcbiAgICAgICAgZG90RWRnZS50by5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJFZGdlKSB7XG4gICAgICAgICAgdmFyIGdyYXBoRWRnZSA9IGNvbnZlcnRFZGdlKHN1YkVkZ2UpO1xuICAgICAgICAgIGdyYXBoRGF0YS5lZGdlcy5wdXNoKGdyYXBoRWRnZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gY29weSB0aGUgb3B0aW9uc1xuICBpZiAoZG90RGF0YS5hdHRyKSB7XG4gICAgZ3JhcGhEYXRhLm9wdGlvbnMgPSBkb3REYXRhLmF0dHI7XG4gIH1cblxuICByZXR1cm4gZ3JhcGhEYXRhO1xufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXZhciAqL1xuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWVuYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbiIsICJleHBvcnQgdHlwZSBJZCA9IG51bWJlciB8IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBDb2xvck9iamVjdCB7XG4gIGJhY2tncm91bmQ6IHN0cmluZztcbiAgYm9yZGVyOiBzdHJpbmc7XG4gIGhpZ2hsaWdodDoge1xuICAgIGJhY2tncm91bmQ6IHN0cmluZztcbiAgICBib3JkZXI6IHN0cmluZztcbiAgfTtcbiAgaG92ZXI6IHtcbiAgICBiYWNrZ3JvdW5kOiBzdHJpbmc7XG4gICAgYm9yZGVyOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VwaGlEYXRhIHtcbiAgbm9kZXM6IEdlcGhpTm9kZVtdO1xuICBlZGdlczogR2VwaGlFZGdlW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEdlcGhpUGFyc2VPcHRpb25zIHtcbiAgZml4ZWQ/OiBib29sZWFuO1xuICBpbmhlcml0Q29sb3I/OiBib29sZWFuO1xuICBwYXJzZUNvbG9yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXBoaU5vZGUge1xuICBpZDogSWQ7XG5cbiAgYXR0cmlidXRlcz86IHsgdGl0bGU/OiBzdHJpbmcgfTtcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBzaXplPzogbnVtYmVyO1xuICB0aXRsZT86IHN0cmluZztcbiAgeD86IG51bWJlcjtcbiAgeT86IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2VwaGlFZGdlIHtcbiAgaWQ6IElkO1xuICBzb3VyY2U6IElkO1xuICB0YXJnZXQ6IElkO1xuXG4gIGF0dHJpYnV0ZXM/OiB7IHRpdGxlPzogc3RyaW5nIH07XG4gIGNvbG9yPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXNEYXRhIHtcbiAgbm9kZXM6IFZpc05vZGVbXTtcbiAgZWRnZXM6IFZpc0VkZ2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXNOb2RlIHtcbiAgaWQ6IElkO1xuICBmaXhlZDogYm9vbGVhbjtcblxuICBjb2xvcj86IHN0cmluZyB8IENvbG9yT2JqZWN0O1xuICBsYWJlbD86IHN0cmluZztcbiAgc2l6ZT86IG51bWJlcjtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG5cbiAgYXR0cmlidXRlcz86IHVua25vd247XG59XG5leHBvcnQgaW50ZXJmYWNlIFZpc0VkZ2Uge1xuICBpZDogSWQ7XG4gIGZyb206IElkO1xuICB0bzogSWQ7XG5cbiAgYXJyb3dzPzogXCJ0b1wiO1xuICBjb2xvcj86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIGF0dHJpYnV0ZXM/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIENvbnZlcnQgR2VwaGkgdG8gVmlzLlxuICpcbiAqIEBwYXJhbSBnZXBoaUpTT04gLSBUaGUgcGFyc2VkIEpTT04gZGF0YSBpbiBHZXBoaSBmb3JtYXQuXG4gKiBAcGFyYW0gb3B0aW9uc09iaiAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgZGF0YSByZWFkeSB0byBiZSB1c2VkIGluIFZpcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlR2VwaGkoXG4gIGdlcGhpSlNPTjogR2VwaGlEYXRhLFxuICBvcHRpb25zT2JqPzogR2VwaGlQYXJzZU9wdGlvbnNcbik6IFZpc0RhdGEge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIGVkZ2VzOiB7XG4gICAgICBpbmhlcml0Q29sb3I6IGZhbHNlLFxuICAgIH0sXG4gICAgbm9kZXM6IHtcbiAgICAgIGZpeGVkOiBmYWxzZSxcbiAgICAgIHBhcnNlQ29sb3I6IGZhbHNlLFxuICAgIH0sXG4gIH07XG5cbiAgaWYgKG9wdGlvbnNPYmogIT0gbnVsbCkge1xuICAgIGlmIChvcHRpb25zT2JqLmZpeGVkICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMubm9kZXMuZml4ZWQgPSBvcHRpb25zT2JqLmZpeGVkO1xuICAgIH1cbiAgICBpZiAob3B0aW9uc09iai5wYXJzZUNvbG9yICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMubm9kZXMucGFyc2VDb2xvciA9IG9wdGlvbnNPYmoucGFyc2VDb2xvcjtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnNPYmouaW5oZXJpdENvbG9yICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZWRnZXMuaW5oZXJpdENvbG9yID0gb3B0aW9uc09iai5pbmhlcml0Q29sb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ0VkZ2VzID0gZ2VwaGlKU09OLmVkZ2VzO1xuICBjb25zdCB2RWRnZXMgPSBnRWRnZXMubWFwKChnRWRnZSk6IFZpc0VkZ2UgPT4ge1xuICAgIGNvbnN0IHZFZGdlOiBWaXNFZGdlID0ge1xuICAgICAgZnJvbTogZ0VkZ2Uuc291cmNlLFxuICAgICAgaWQ6IGdFZGdlLmlkLFxuICAgICAgdG86IGdFZGdlLnRhcmdldCxcbiAgICB9O1xuXG4gICAgaWYgKGdFZGdlLmF0dHJpYnV0ZXMgIT0gbnVsbCkge1xuICAgICAgdkVkZ2UuYXR0cmlidXRlcyA9IGdFZGdlLmF0dHJpYnV0ZXM7XG4gICAgfVxuICAgIGlmIChnRWRnZS5sYWJlbCAhPSBudWxsKSB7XG4gICAgICB2RWRnZS5sYWJlbCA9IGdFZGdlLmxhYmVsO1xuICAgIH1cbiAgICBpZiAoZ0VkZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIGdFZGdlLmF0dHJpYnV0ZXMudGl0bGUgIT0gbnVsbCkge1xuICAgICAgdkVkZ2UudGl0bGUgPSBnRWRnZS5hdHRyaWJ1dGVzLnRpdGxlO1xuICAgIH1cbiAgICBpZiAoZ0VkZ2UudHlwZSA9PT0gXCJEaXJlY3RlZFwiKSB7XG4gICAgICB2RWRnZS5hcnJvd3MgPSBcInRvXCI7XG4gICAgfVxuICAgIC8vIGVkZ2VbJ3ZhbHVlJ10gPSBnRWRnZS5hdHRyaWJ1dGVzICE9IG51bGwgPyBnRWRnZS5hdHRyaWJ1dGVzLldlaWdodCA6IHVuZGVmaW5lZDtcbiAgICAvLyBlZGdlWyd3aWR0aCddID0gZWRnZVsndmFsdWUnXSAhPSBudWxsID8gdW5kZWZpbmVkIDogZWRnZWdFZGdlLnNpemU7XG4gICAgaWYgKGdFZGdlLmNvbG9yICYmIG9wdGlvbnMuZWRnZXMuaW5oZXJpdENvbG9yID09PSBmYWxzZSkge1xuICAgICAgdkVkZ2UuY29sb3IgPSBnRWRnZS5jb2xvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdkVkZ2U7XG4gIH0pO1xuXG4gIGNvbnN0IHZOb2RlcyA9IGdlcGhpSlNPTi5ub2Rlcy5tYXAoKGdOb2RlKTogVmlzTm9kZSA9PiB7XG4gICAgY29uc3Qgdk5vZGU6IFZpc05vZGUgPSB7XG4gICAgICBpZDogZ05vZGUuaWQsXG4gICAgICBmaXhlZDogb3B0aW9ucy5ub2Rlcy5maXhlZCAmJiBnTm9kZS54ICE9IG51bGwgJiYgZ05vZGUueSAhPSBudWxsLFxuICAgIH07XG5cbiAgICBpZiAoZ05vZGUuYXR0cmlidXRlcyAhPSBudWxsKSB7XG4gICAgICB2Tm9kZS5hdHRyaWJ1dGVzID0gZ05vZGUuYXR0cmlidXRlcztcbiAgICB9XG4gICAgaWYgKGdOb2RlLmxhYmVsICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLmxhYmVsID0gZ05vZGUubGFiZWw7XG4gICAgfVxuICAgIGlmIChnTm9kZS5zaXplICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnNpemUgPSBnTm9kZS5zaXplO1xuICAgIH1cbiAgICBpZiAoZ05vZGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGdOb2RlLmF0dHJpYnV0ZXMudGl0bGUgIT0gbnVsbCkge1xuICAgICAgdk5vZGUudGl0bGUgPSBnTm9kZS5hdHRyaWJ1dGVzLnRpdGxlO1xuICAgIH1cbiAgICBpZiAoZ05vZGUudGl0bGUgIT0gbnVsbCkge1xuICAgICAgdk5vZGUudGl0bGUgPSBnTm9kZS50aXRsZTtcbiAgICB9XG4gICAgaWYgKGdOb2RlLnggIT0gbnVsbCkge1xuICAgICAgdk5vZGUueCA9IGdOb2RlLng7XG4gICAgfVxuICAgIGlmIChnTm9kZS55ICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnkgPSBnTm9kZS55O1xuICAgIH1cbiAgICBpZiAoZ05vZGUuY29sb3IgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMubm9kZXMucGFyc2VDb2xvciA9PT0gdHJ1ZSkge1xuICAgICAgICB2Tm9kZS5jb2xvciA9IGdOb2RlLmNvbG9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdk5vZGUuY29sb3IgPSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogZ05vZGUuY29sb3IsXG4gICAgICAgICAgYm9yZGVyOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICBoaWdobGlnaHQ6IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGdOb2RlLmNvbG9yLFxuICAgICAgICAgICAgYm9yZGVyOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICAgIGJvcmRlcjogZ05vZGUuY29sb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdk5vZGU7XG4gIH0pO1xuXG4gIHJldHVybiB7IG5vZGVzOiB2Tm9kZXMsIGVkZ2VzOiB2RWRnZXMgfTtcbn1cbiIsICJleHBvcnQgaW50ZXJmYWNlIExvY2FsZSB7XG4gIGFkZERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFkZEVkZ2U6IHN0cmluZztcbiAgYWRkTm9kZTogc3RyaW5nO1xuICBiYWNrOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIGNyZWF0ZUVkZ2VFcnJvcjogc3RyaW5nO1xuICBkZWw6IHN0cmluZztcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBzdHJpbmc7XG4gIGVkZ2VEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBlZGl0OiBzdHJpbmc7XG4gIGVkaXRDbHVzdGVyRXJyb3I6IHN0cmluZztcbiAgZWRpdEVkZ2U6IHN0cmluZztcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBlZGl0Tm9kZTogc3RyaW5nO1xufVxuZXhwb3J0IHR5cGUgTG9jYWxlcyA9IFJlY29yZDxzdHJpbmcsIExvY2FsZT47XG5cbi8vIEVuZ2xpc2hcbmV4cG9ydCBjb25zdCBlbjogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJDbGljayBpbiBhbiBlbXB0eSBzcGFjZSB0byBwbGFjZSBhIG5ldyBub2RlLlwiLFxuICBhZGRFZGdlOiBcIkFkZCBFZGdlXCIsXG4gIGFkZE5vZGU6IFwiQWRkIE5vZGVcIixcbiAgYmFjazogXCJCYWNrXCIsXG4gIGNsb3NlOiBcIkNsb3NlXCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjogXCJDYW5ub3QgbGluayBlZGdlcyB0byBhIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJEZWxldGUgc2VsZWN0ZWRcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkNsdXN0ZXJzIGNhbm5vdCBiZSBkZWxldGVkLlwiLFxuICBlZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGljayBvbiBhIG5vZGUgYW5kIGRyYWcgdGhlIGVkZ2UgdG8gYW5vdGhlciBub2RlIHRvIGNvbm5lY3QgdGhlbS5cIixcbiAgZWRpdDogXCJFZGl0XCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwiQ2x1c3RlcnMgY2Fubm90IGJlIGVkaXRlZC5cIixcbiAgZWRpdEVkZ2U6IFwiRWRpdCBFZGdlXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGljayBvbiB0aGUgY29udHJvbCBwb2ludHMgYW5kIGRyYWcgdGhlbSB0byBhIG5vZGUgdG8gY29ubmVjdCB0byBpdC5cIixcbiAgZWRpdE5vZGU6IFwiRWRpdCBOb2RlXCIsXG59O1xuXG4vLyBHZXJtYW5cbmV4cG9ydCBjb25zdCBkZTogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjpcbiAgICBcIktsaWNrZSBhdWYgZWluZSBmcmVpZSBTdGVsbGUsIHVtIGVpbmVuIG5ldWVuIEtub3RlbiB6dSBwbGF6aWVyZW4uXCIsXG4gIGFkZEVkZ2U6IFwiS2FudGUgaGluenVmXFx1MDBmY2dlblwiLFxuICBhZGROb2RlOiBcIktub3RlbiBoaW56dWZcXHUwMGZjZ2VuXCIsXG4gIGJhY2s6IFwiWnVyXFx1MDBmY2NrXCIsXG4gIGNsb3NlOiBcIlNjaGxpZcOfZW5cIixcbiAgY3JlYXRlRWRnZUVycm9yOlxuICAgIFwiRXMgaXN0IG5pY2h0IG1cXHUwMGY2Z2xpY2gsIEthbnRlbiBtaXQgQ2x1c3Rlcm4genUgdmVyYmluZGVuLlwiLFxuICBkZWw6IFwiTFxcdTAwZjZzY2hlIEF1c3dhaGxcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkNsdXN0ZXIga1xcdTAwZjZubmVuIG5pY2h0IGdlbFxcdTAwZjZzY2h0IHdlcmRlbi5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiS2xpY2tlIGF1ZiBlaW5lbiBLbm90ZW4gdW5kIHppZWhlIGRpZSBLYW50ZSB6dSBlaW5lbSBhbmRlcmVuIEtub3RlbiwgdW0gZGllc2UgenUgdmVyYmluZGVuLlwiLFxuICBlZGl0OiBcIkVkaXRpZXJlblwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkNsdXN0ZXIga1xcdTAwZjZubmVuIG5pY2h0IGVkaXRpZXJ0IHdlcmRlbi5cIixcbiAgZWRpdEVkZ2U6IFwiS2FudGUgZWRpdGllcmVuXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJLbGlja2UgYXVmIGRpZSBWZXJiaW5kdW5nc3B1bmt0ZSB1bmQgemllaGUgZGllc2UgYXVmIGVpbmVuIEtub3RlbiwgdW0gc2llIHp1IHZlcmJpbmRlbi5cIixcbiAgZWRpdE5vZGU6IFwiS25vdGVuIGVkaXRpZXJlblwiLFxufTtcblxuLy8gU3BhbmlzaFxuZXhwb3J0IGNvbnN0IGVzOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOlxuICAgIFwiSGFnYSBjbGljIGVuIHVuIGx1Z2FyIHZhY1xcdTAwZWRvIHBhcmEgY29sb2NhciB1biBudWV2byBub2RvLlwiLFxuICBhZGRFZGdlOiBcIkFcXHUwMGYxYWRpciBhcmlzdGFcIixcbiAgYWRkTm9kZTogXCJBXFx1MDBmMWFkaXIgbm9kb1wiLFxuICBiYWNrOiBcIkF0clxcdTAwZTFzXCIsXG4gIGNsb3NlOiBcIkNlcnJhclwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiTm8gc2UgcHVlZGUgY29uZWN0YXIgdW5hIGFyaXN0YSBhIHVuIGdydXBvLlwiLFxuICBkZWw6IFwiRWxpbWluYXIgc2VsZWNjaVxcdTAwZjNuXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJObyBlcyBwb3NpYmxlIGVsaW1pbmFyIGdydXBvcy5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiSGFnYSBjbGljIGVuIHVuIG5vZG8geSBhcnJhc3RyZSBsYSBhcmlzdGEgaGFjaWEgb3RybyBub2RvIHBhcmEgY29uZWN0YXJsb3MuXCIsXG4gIGVkaXQ6IFwiRWRpdGFyXCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwiTm8gZXMgcG9zaWJsZSBlZGl0YXIgZ3J1cG9zLlwiLFxuICBlZGl0RWRnZTogXCJFZGl0YXIgYXJpc3RhXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJIYWdhIGNsaWMgZW4gdW4gcHVudG8gZGUgY29udHJvbCB5IGFycmFzdHJlbG8gYSB1biBub2RvIHBhcmEgY29uZWN0YXJsby5cIixcbiAgZWRpdE5vZGU6IFwiRWRpdGFyIG5vZG9cIixcbn07XG5cbi8vSXRhbGlhbm9cbmV4cG9ydCBjb25zdCBpdDogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJDbGljY2EgcGVyIGFnZ2l1bmdlcmUgdW4gbnVvdm8gbm9kb1wiLFxuICBhZGRFZGdlOiBcIkFnZ2l1bmdpIHVuIHZlcnRpY2VcIixcbiAgYWRkTm9kZTogXCJBZ2dpdW5naSB1biBub2RvXCIsXG4gIGJhY2s6IFwiSW5kaWV0cm9cIixcbiAgY2xvc2U6IFwiQ2hpdWRlcmVcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIk5vbiBzaSBwb3Nzb25vIGNvbGxlZ2FyZSB2ZXJ0aWNpIGFkIHVuIGNsdXN0ZXJcIixcbiAgZGVsOiBcIkNhbmNlbGxhIGxhIHNlbGV6aW9uZVwiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwiSSBjbHVzdGVyIG5vbiBwb3Nzb25vIGVzc2VyZSBjYW5jZWxsYXRpXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaWNjYSBzdSB1biBub2RvIGUgdHJhc2NpbmFsbyBhZCB1biBhbHRybyBub2RvIHBlciBjb25uZXR0ZXJsaS5cIixcbiAgZWRpdDogXCJNb2RpZmljYVwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkkgY2x1c3RlcnMgbm9uIHBvc3Nvbm8gZXNzZXJlIG1vZGlmaWNhdGkuXCIsXG4gIGVkaXRFZGdlOiBcIk1vZGlmaWNhIGlsIHZlcnRpY2VcIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaWNjYSBzdWkgUHVudGkgZGkgY29udHJvbGxvIGUgdHJhc2NpbmFsaSBhZCB1biBub2RvIHBlciBjb25uZXR0ZXJsaS5cIixcbiAgZWRpdE5vZGU6IFwiTW9kaWZpY2EgaWwgbm9kb1wiLFxufTtcblxuLy8gRHV0Y2hcbmV4cG9ydCBjb25zdCBubDogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJLbGlrIG9wIGVlbiBsZWVnIGdlYmllZCBvbSBlZW4gbmlldXdlIG5vZGUgdGUgbWFrZW4uXCIsXG4gIGFkZEVkZ2U6IFwiTGluayB0b2V2b2VnZW5cIixcbiAgYWRkTm9kZTogXCJOb2RlIHRvZXZvZWdlblwiLFxuICBiYWNrOiBcIlRlcnVnXCIsXG4gIGNsb3NlOiBcIlNsdWl0ZW5cIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIkthbiBnZWVuIGxpbmsgbWFrZW4gbmFhciBlZW4gY2x1c3Rlci5cIixcbiAgZGVsOiBcIlNlbGVjdGllIHZlcndpamRlcmVuXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBrdW5uZW4gbmlldCB3b3JkZW4gdmVyd2lqZGVyZC5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiS2xpayBvcCBlZW4gbm9kZSBlbiBzbGVlcCBkZSBsaW5rIG5hYXIgZWVuIGFuZGVyZSBub2RlIG9tIHplIHRlIHZlcmJpbmRlbi5cIixcbiAgZWRpdDogXCJXaWp6aWdlblwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkNsdXN0ZXJzIGt1bm5lbiBuaWV0IHdvcmRlbiBhYW5nZXBhc3QuXCIsXG4gIGVkaXRFZGdlOiBcIkxpbmsgd2lqemlnZW5cIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIktsaWsgb3AgZGUgdmVyYmluZGluZ3NwdW50ZW4gZW4gc2xlZXAgemUgbmFhciBlZW4gbm9kZSBvbSBkYWFybWVlIHRlIHZlcmJpbmRlbi5cIixcbiAgZWRpdE5vZGU6IFwiTm9kZSB3aWp6aWdlblwiLFxufTtcblxuLy8gUG9ydHVndWVzZSBCcmF6aWxcbmV4cG9ydCBjb25zdCBwdDogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJDbGlxdWUgZW0gdW0gZXNwYcOnbyBlbSBicmFuY28gcGFyYSBhZGljaW9uYXIgdW0gbm92byBuw7NcIixcbiAgYWRkRWRnZTogXCJBZGljaW9uYXIgYXJlc3RhXCIsXG4gIGFkZE5vZGU6IFwiQWRpY2lvbmFyIG7Ds1wiLFxuICBiYWNrOiBcIlZvbHRhclwiLFxuICBjbG9zZTogXCJGZWNoYXJcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIk7Do28gZm9pIHBvc3PDrXZlbCBsaW5rYXIgYXJlc3RhcyBhIHVtIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJSZW1vdmVyIHNlbGVjaW9uYWRvXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBuw6NvIHB1ZGVyYW0gc2VyIHJlbW92aWRvcy5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVlIGVtIHVtIG7DsyBlIGFycmFzdGUgYSBhcmVzdGEgYXTDqSBvdXRybyBuw7MgcGFyYSBjb25lY3TDoS1sb3NcIixcbiAgZWRpdDogXCJFZGl0YXJcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBuw6NvIHB1ZGVyYW0gc2VyIGVkaXRhZG9zLlwiLFxuICBlZGl0RWRnZTogXCJFZGl0YXIgYXJlc3RhXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGlxdWUgbm9zIHBvbnRvcyBkZSBjb250cm9sZSBlIG9zIGFycmFzdGUgcGFyYSB1bSBuw7MgcGFyYSBjb25lY3TDoS1sb3NcIixcbiAgZWRpdE5vZGU6IFwiRWRpdGFyIG7Ds1wiLFxufTtcblxuLy8gUnVzc2lhblxuZXhwb3J0IGNvbnN0IHJ1OiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcItCa0LvQuNC60L3QuNGC0LUg0LIg0YHQstC+0LHQvtC00L3QvtC1INC80LXRgdGC0L4sINGH0YLQvtCx0Ysg0LTQvtCx0LDQstC40YLRjCDQvdC+0LLRi9C5INGD0LfQtdC7LlwiLFxuICBhZGRFZGdlOiBcItCU0L7QsdCw0LLQuNGC0Ywg0YDQtdCx0YDQvlwiLFxuICBhZGROb2RlOiBcItCU0L7QsdCw0LLQuNGC0Ywg0YPQt9C10LtcIixcbiAgYmFjazogXCLQndCw0LfQsNC0XCIsXG4gIGNsb3NlOiBcItCX0LDQutGA0YvQstCw0YLRjFwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwi0J3QtdCy0L7Qt9C80L7QttC90L4g0YHQvtC10LTQuNC90LjRgtGMINGA0LXQsdGA0LAg0LIg0LrQu9Cw0YHRgtC10YAuXCIsXG4gIGRlbDogXCLQo9C00LDQu9C40YLRjCDQstGL0LHRgNCw0L3QvdC+0LVcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcItCa0LvQsNGB0YLQtdGA0Ysg0L3QtSDQvNC+0LPRg9GCINCx0YvRgtGMINGD0LTQsNC70LXQvdGLXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvQuNC60L3QuNGC0LUg0L3QsCDRg9C30LXQuyDQuCDQv9GA0L7RgtGP0L3QuNGC0LUg0YDQtdCx0YDQviDQuiDQtNGA0YPQs9C+0LzRgyDRg9C30LvRgywg0YfRgtC+0LHRiyDRgdC+0LXQtNC40L3QuNGC0Ywg0LjRhS5cIixcbiAgZWRpdDogXCLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjFwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcItCa0LvQsNGB0YLQtdGA0Ysg0L3QtdC00L7RgdGC0YPQv9C90Ysg0LTQu9GPINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8uXCIsXG4gIGVkaXRFZGdlOiBcItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGA0LXQsdGA0L5cIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvQuNC60L3QuNGC0LUg0L3QsCDQutC+0L3RgtGA0L7Qu9GM0L3Ri9C1INGC0L7Rh9C60Lgg0Lgg0L/QtdGA0LXRgtCw0YnQuNGC0LUg0LjRhSDQsiDRg9C30LXQuywg0YfRgtC+0LHRiyDQv9C+0LTQutC70Y7Rh9C40YLRjNGB0Y8g0Log0L3QtdC80YMuXCIsXG4gIGVkaXROb2RlOiBcItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGD0LfQtdC7XCIsXG59O1xuXG4vLyBDaGluZXNlXG5leHBvcnQgY29uc3QgY246IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwi5Y2V5Ye756m655m95aSE5pS+572u5paw6IqC54K544CCXCIsXG4gIGFkZEVkZ2U6IFwi5re75Yqg6L+e5o6l57q/XCIsXG4gIGFkZE5vZGU6IFwi5re75Yqg6IqC54K5XCIsXG4gIGJhY2s6IFwi6L+U5ZueXCIsXG4gIGNsb3NlOiBcIumXnOmWiVwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwi5peg5rOV5bCG6L+e5o6l57q/6L+e5o6l5Yiw576k6ZuG44CCXCIsXG4gIGRlbDogXCLliKDpmaTpgInlrppcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIuaXoOazleWIoOmZpOe+pOmbhuOAglwiLFxuICBlZGdlRGVzY3JpcHRpb246IFwi5Y2V5Ye75p+Q5Liq6IqC54K55bm25bCG6K+l6L+e5o6l57q/5ouW5Yqo5Yiw5Y+m5LiA5Liq6IqC54K55Lul6L+e5o6l5a6D5Lus44CCXCIsXG4gIGVkaXQ6IFwi57yW6L6RXCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwi5peg5rOV57yW6L6R576k6ZuG44CCXCIsXG4gIGVkaXRFZGdlOiBcIue8lui+kei/nuaOpee6v1wiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOiBcIuWNleWHu+aOp+WItuiKgueCueW5tuWwhuWug+S7rOaLluWIsOiKgueCueS4iui/nuaOpeOAglwiLFxuICBlZGl0Tm9kZTogXCLnvJbovpHoioLngrlcIixcbn07XG5cbi8vIFVrcmFpbmlhblxuZXhwb3J0IGNvbnN0IHVrOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcIkvQu9GW0LrQvdGW0YLRjCDQvdCwINCy0ZbQu9GM0L3QtSDQvNGW0YHRhtC1LCDRidC+0LEg0LTQvtC00LDRgtC4INC90L7QstC40Lkg0LLRg9C30L7Quy5cIixcbiAgYWRkRWRnZTogXCLQlNC+0LTQsNGC0Lgg0LrRgNCw0LlcIixcbiAgYWRkTm9kZTogXCLQlNC+0LTQsNGC0Lgg0LLRg9C30L7Qu1wiLFxuICBiYWNrOiBcItCd0LDQt9Cw0LRcIixcbiAgY2xvc2U6IFwi0JfQsNC60YDQuNGC0LhcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcItCd0LUg0LzQvtC20LvQuNCy0L4g0L7QsSfRlNC00L3QsNGC0Lgg0LrRgNCw0Zcg0LIg0LPRgNGD0L/Rgy5cIixcbiAgZGVsOiBcItCS0LjQtNCw0LvQuNGC0Lgg0L7QsdGA0LDQvdC1XCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCLQk9GA0YPQv9C4INC90LUg0LzQvtC20YPRgtGMINCx0YPRgtC4INCy0LjQtNCw0LvQtdC90ZYuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvRltC60L3RltGC0Ywg0L3QsCDQstGD0LfQvtC7INGWINC/0LXRgNC10YLRj9Cz0L3RltGC0Ywg0LrRgNCw0Lkg0LTQviDRltC90YjQvtCz0L4g0LLRg9C30LvQsCwg0YnQvtCxINGX0YUg0Lcn0ZTQtNC90LDRgtC4LlwiLFxuICBlZGl0OiBcItCg0LXQtNCw0LPRg9Cy0LDRgtC4XCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwi0JPRgNGD0L/QuCDQvdC10LTQvtGB0YLRg9C/0L3RliDQtNC70Y8g0YDQtdC00LDQs9GD0LLQsNC90L3Rjy5cIixcbiAgZWRpdEVkZ2U6IFwi0KDQtdC00LDQs9GD0LLQsNGC0Lgg0LrRgNCw0LlcIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvRltC60L3RltGC0Ywg0L3QsCDQutC+0L3RgtGA0L7Qu9GM0L3RliDRgtC+0YfQutC4INGWINC/0LXRgNC10YLRj9Cz0L3RltGC0Ywg0ZfRhSDRgyDQstGD0LfQvtC7LCDRidC+0LEg0L/RltC00LrQu9GO0YfQuNGC0LjRgdGPINC00L4g0L3RjNC+0LPQvi5cIixcbiAgZWRpdE5vZGU6IFwi0KDQtdC00LDQs9GD0LLQsNGC0Lgg0LLRg9C30L7Qu1wiLFxufTtcblxuLy8gRnJlbmNoXG5leHBvcnQgY29uc3QgZnI6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiQ2xpcXVleiBkYW5zIHVuIGVuZHJvaXQgdmlkZSBwb3VyIHBsYWNlciB1biBuxZN1ZC5cIixcbiAgYWRkRWRnZTogXCJBam91dGVyIHVuIGxpZW5cIixcbiAgYWRkTm9kZTogXCJBam91dGVyIHVuIG7Fk3VkXCIsXG4gIGJhY2s6IFwiUmV0b3VyXCIsXG4gIGNsb3NlOiBcIkZlcm1lclwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiSW1wb3NzaWJsZSBkZSBjcsOpZXIgdW4gbGllbiB2ZXJzIHVuIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJFZmZhY2VyIGxhIHPDqWxlY3Rpb25cIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkxlcyBjbHVzdGVycyBuZSBwZXV2ZW50IHBhcyDDqnRyZSBlZmZhY8Opcy5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVleiBzdXIgdW4gbsWTdWQgZXQgZ2xpc3NleiBsZSBsaWVuIHZlcnMgdW4gYXV0cmUgbsWTdWQgcG91ciBsZXMgY29ubmVjdGVyLlwiLFxuICBlZGl0OiBcIsOJZGl0ZXJcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJMZXMgY2x1c3RlcnMgbmUgcGV1dmVudCBwYXMgw6p0cmUgw6lkaXTDqXMuXCIsXG4gIGVkaXRFZGdlOiBcIsOJZGl0ZXIgbGUgbGllblwiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVleiBzdXIgbGVzIHBvaW50cyBkZSBjb250csO0bGUgZXQgZ2xpc3Nlei1sZXMgcG91ciBjb25uZWN0ZXIgdW4gbsWTdWQuXCIsXG4gIGVkaXROb2RlOiBcIsOJZGl0ZXIgbGUgbsWTdWRcIixcbn07XG5cbi8vIEN6ZWNoXG5leHBvcnQgY29uc3QgY3M6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiS2x1a251dMOtbSBkbyBwcsOhemRuw6lobyBwcm9zdG9ydSBtxa/FvmV0ZSBwxZlpZGF0IG5vdsO9IHZyY2hvbC5cIixcbiAgYWRkRWRnZTogXCJQxZlpZGF0IGhyYW51XCIsXG4gIGFkZE5vZGU6IFwiUMWZaWRhdCB2cmNob2xcIixcbiAgYmFjazogXCJacMSbdFwiLFxuICBjbG9zZTogXCJaYXbFmcOtdFwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiTmVsemUgcMWZaXBvaml0IGhyYW51IGtlIHNobHVrdS5cIixcbiAgZGVsOiBcIlNtYXphdCB2w71ixJtyXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJOZWx6ZSBtYXphdCBzaGx1a3kuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIlDFmWV0YcW+ZW7DrW0geiBqZWRub2hvIHZyY2hvbHUgZG8gZHJ1aMOpaG8gbcWvxb5ldGUgc3Bvaml0IHR5dG8gdnJjaG9seSBub3ZvdSBocmFub3UuXCIsXG4gIGVkaXQ6IFwiVXByYXZpdFwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIk5lbHplIHVwcmF2b3ZhdCBzaGx1a3kuXCIsXG4gIGVkaXRFZGdlOiBcIlVwcmF2aXQgaHJhbnVcIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIlDFmWV0YcW+ZW7DrW0ga29udHJvbG7DrWhvIHZyY2hvbHUgaHJhbnkgamkgbcWvxb5ldGUgcMWZaXBvaml0IGsgamluw6ltdSB2cmNob2x1LlwiLFxuICBlZGl0Tm9kZTogXCJVcHJhdml0IHZyY2hvbFwiLFxufTtcbiIsICIvKipcbiAqIEFzc29jaWF0ZXMgYSBjYW52YXMgdG8gYSBnaXZlbiBpbWFnZSwgY29udGFpbmluZyBhIG51bWJlciBvZiByZW5kZXJpbmdzXG4gKiBvZiB0aGUgaW1hZ2UgYXQgdmFyaW91cyBzaXplcy5cbiAqXG4gKiBUaGlzIHRlY2huaXF1ZSBpcyBrbm93biBhcyAnbWlwbWFwcGluZycuXG4gKlxuICogTk9URTogSW1hZ2VzIGNhbiBhbHNvIGJlIG9mIHR5cGUgJ2RhdGE6c3ZnK3htbGAuIFRoaXMgY29kZSBhbHNvIHdvcmtzXG4gKiAgICAgICBmb3Igc3ZnLCBidXQgdGhlIG1pcG1hcHBpbmcgbWF5IG5vdCBiZSBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VcbiAqL1xuY2xhc3MgQ2FjaGVkSW1hZ2Uge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5OVU1fSVRFUkFUSU9OUyA9IDQ7IC8vIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgY29vcmRpbmF0ZXMgYXJyYXlcblxuICAgIHRoaXMuaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGltYWdlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAqL1xuICBpbml0KCkge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKCkpIHJldHVybjtcblxuICAgIHRoaXMuc3JjID0gdGhpcy5pbWFnZS5zcmM7IC8vIEZvciBzYW1lIGludGVyZmFjZSB3aXRoIEltYWdlXG4gICAgY29uc3QgdyA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgY29uc3QgaCA9IHRoaXMuaW1hZ2UuaGVpZ2h0O1xuXG4gICAgLy8gRWFzZSBleHRlcm5hbCBhY2Nlc3NcbiAgICB0aGlzLndpZHRoID0gdztcbiAgICB0aGlzLmhlaWdodCA9IGg7XG5cbiAgICBjb25zdCBoMiA9IE1hdGguZmxvb3IoaCAvIDIpO1xuICAgIGNvbnN0IGg0ID0gTWF0aC5mbG9vcihoIC8gNCk7XG4gICAgY29uc3QgaDggPSBNYXRoLmZsb29yKGggLyA4KTtcbiAgICBjb25zdCBoMTYgPSBNYXRoLmZsb29yKGggLyAxNik7XG5cbiAgICBjb25zdCB3MiA9IE1hdGguZmxvb3IodyAvIDIpO1xuICAgIGNvbnN0IHc0ID0gTWF0aC5mbG9vcih3IC8gNCk7XG4gICAgY29uc3QgdzggPSBNYXRoLmZsb29yKHcgLyA4KTtcbiAgICBjb25zdCB3MTYgPSBNYXRoLmZsb29yKHcgLyAxNik7XG5cbiAgICAvLyBNYWtlIGNhbnZhcyBhcyBzbWFsbCBhcyBwb3NzaWJsZVxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gMyAqIHc0O1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGgyO1xuXG4gICAgLy8gQ29vcmRpbmF0ZXMgYW5kIHNpemVzIG9mIGltYWdlcyBjb250YWluZWQgaW4gdGhlIGNhbnZhc1xuICAgIC8vIFZhbHVlcyBwZXIgcm93OiAgW3RvcCB4LCBsZWZ0IHksIHdpZHRoLCBoZWlnaHRdXG5cbiAgICB0aGlzLmNvb3JkaW5hdGVzID0gW1xuICAgICAgWzAsIDAsIHcyLCBoMl0sXG4gICAgICBbdzIsIDAsIHc0LCBoNF0sXG4gICAgICBbdzIsIGg0LCB3OCwgaDhdLFxuICAgICAgWzUgKiB3OCwgaDQsIHcxNiwgaDE2XSxcbiAgICBdO1xuXG4gICAgdGhpcy5fZmlsbE1pcE1hcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGluaXQoKSBoYXMgYmVlbiBjYWxsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGluaXRpYWxpemVkKCkge1xuICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGVzICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IG1haW4gaW1hZ2UgaW4gdmFyaW91cyBzaXplcyB0byB0aGUgY29udGV4dC5cbiAgICpcbiAgICogVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBpcyB0byByZWR1Y2UgYXJ0ZWZhY3RzIGR1ZSB0byBpbnRlcnBvbGF0aW9uXG4gICAqIGF0IGRpZmZlcmluZyB6b29tIGxldmVscy5cbiAgICpcbiAgICogU291cmNlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODc2MTQwNC8xMjIzNTMxXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kcyB0YWtlcyB0aGUgcmVzaXppbmcgb3V0IG9mIHRoZSBkcmF3aW5nIGxvb3AsIGluIG9yZGVyIHRvXG4gICAqIHJlZHVjZSBwZXJmb3JtYW5jZSBvdmVyaGVhZC5cbiAgICpcbiAgICogVE9ETzogVGhlIGNvZGUgYXNzdW1lcyB0aGF0IGEgMkQgY29udGV4dCBjYW4gYWx3YXlzIGJlIGdvdHRlbi4gVGhpcyBpc1xuICAgKiAgICAgICBub3QgbmVjZXNzYXJpbHkgdHJ1ZSEgT1RPSCwgaWYgbm90IHRydWUgdGhlbiB1c2FnZSBvZiB0aGlzIGNsYXNzXG4gICAqICAgICAgIGlzIHNlbnNlbGVzcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9maWxsTWlwTWFwKCkge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcblxuICAgIC8vIEZpcnN0IHpvb20tbGV2ZWwgY29tZXMgZnJvbSB0aGUgaW1hZ2VcbiAgICBjb25zdCB0byA9IHRoaXMuY29vcmRpbmF0ZXNbMF07XG4gICAgY3R4LmRyYXdJbWFnZSh0aGlzLmltYWdlLCB0b1swXSwgdG9bMV0sIHRvWzJdLCB0b1szXSk7XG5cbiAgICAvLyBUaGUgcmVzdCBhcmUgY29weSBhY3Rpb25zIGludGVybmFsIHRvIHRoZSBjYW52YXMvY29udGV4dFxuICAgIGZvciAobGV0IGl0ZXJhdGlvbnMgPSAxOyBpdGVyYXRpb25zIDwgdGhpcy5OVU1fSVRFUkFUSU9OUzsgaXRlcmF0aW9ucysrKSB7XG4gICAgICBjb25zdCBmcm9tID0gdGhpcy5jb29yZGluYXRlc1tpdGVyYXRpb25zIC0gMV07XG4gICAgICBjb25zdCB0byA9IHRoaXMuY29vcmRpbmF0ZXNbaXRlcmF0aW9uc107XG5cbiAgICAgIGN0eC5kcmF3SW1hZ2UoXG4gICAgICAgIHRoaXMuY2FudmFzLFxuICAgICAgICBmcm9tWzBdLFxuICAgICAgICBmcm9tWzFdLFxuICAgICAgICBmcm9tWzJdLFxuICAgICAgICBmcm9tWzNdLFxuICAgICAgICB0b1swXSxcbiAgICAgICAgdG9bMV0sXG4gICAgICAgIHRvWzJdLFxuICAgICAgICB0b1szXVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyB0aGUgaW1hZ2UsIHVzaW5nIHRoZSBtaXBtYXAgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBNaXBNYXAgaXMgb25seSB1c2VkIGlmIHBhcmFtIGZhY3RvciA+IDI7IG90aGVyd2lzZSwgb3JpZ2luYWwgYml0bWFwXG4gICAqIGlzIHJlc2l6ZWQuIFRoaXMgaXMgYWxzbyB1c2VkIHRvIHNraXAgbWlwbWFwIHVzYWdlLCBlLmcuIGJ5IHNldHRpbmcgZmFjdG9yID0gMVxuICAgKlxuICAgKiBDcmVkaXRzIHRvICdBbGV4IGRlIE11bGRlcicgZm9yIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4ICBjb250ZXh0IG9uIHdoaWNoIHRvIGRyYXcgem9vbWVkIGltYWdlXG4gICAqIEBwYXJhbSB7RmxvYXR9IGZhY3RvciBzY2FsZSBmYWN0b3IgYXQgd2hpY2ggdG8gZHJhd1xuICAgKiBAcGFyYW0ge251bWJlcn0gbGVmdFxuICAgKiBAcGFyYW0ge251bWJlcn0gdG9wXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XG4gICAqL1xuICBkcmF3SW1hZ2VBdFBvc2l0aW9uKGN0eCwgZmFjdG9yLCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQoKSkgcmV0dXJuOyAvL2Nhbid0IGRyYXcgaW1hZ2UgeWV0IG5vdCBpbnRpYWxpemVkXG5cbiAgICBpZiAoZmFjdG9yID4gMikge1xuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHpvb21lZCBpbWFnZSB0byB1c2VcbiAgICAgIGZhY3RvciAqPSAwLjU7XG4gICAgICBsZXQgaXRlcmF0aW9ucyA9IDA7XG4gICAgICB3aGlsZSAoZmFjdG9yID4gMiAmJiBpdGVyYXRpb25zIDwgdGhpcy5OVU1fSVRFUkFUSU9OUykge1xuICAgICAgICBmYWN0b3IgKj0gMC41O1xuICAgICAgICBpdGVyYXRpb25zICs9IDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVyYXRpb25zID49IHRoaXMuTlVNX0lURVJBVElPTlMpIHtcbiAgICAgICAgaXRlcmF0aW9ucyA9IHRoaXMuTlVNX0lURVJBVElPTlMgLSAxO1xuICAgICAgfVxuICAgICAgLy9jb25zb2xlLmxvZyhcIml0ZXJhdGlvbnM6IFwiICsgaXRlcmF0aW9ucyk7XG5cbiAgICAgIGNvbnN0IGZyb20gPSB0aGlzLmNvb3JkaW5hdGVzW2l0ZXJhdGlvbnNdO1xuICAgICAgY3R4LmRyYXdJbWFnZShcbiAgICAgICAgdGhpcy5jYW52YXMsXG4gICAgICAgIGZyb21bMF0sXG4gICAgICAgIGZyb21bMV0sXG4gICAgICAgIGZyb21bMl0sXG4gICAgICAgIGZyb21bM10sXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRHJhdyBpbWFnZSBkaXJlY3RseVxuICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLmltYWdlLCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYWNoZWRJbWFnZTtcbiIsICJpbXBvcnQgQ2FjaGVkSW1hZ2UgZnJvbSBcIi4vQ2FjaGVkSW1hZ2VcIjtcblxuLyoqXG4gKiBUaGlzIGNhbGxiYWNrIGlzIGEgY2FsbGJhY2sgdGhhdCBhY2NlcHRzIGFuIEltYWdlLlxuICpcbiAqIEBjYWxsYmFjayBJbWFnZUNhbGxiYWNrXG4gKiBAcGFyYW0ge0ltYWdlfSBpbWFnZVxuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBsb2FkcyBpbWFnZXMgYW5kIGtlZXBzIHRoZW0gc3RvcmVkLlxuICpcbiAqIEBwYXJhbSB7SW1hZ2VDYWxsYmFja30gY2FsbGJhY2tcbiAqL1xuY2xhc3MgSW1hZ2VzIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7SW1hZ2VDYWxsYmFja30gY2FsbGJhY2tcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5pbWFnZXMgPSB7fTtcbiAgICB0aGlzLmltYWdlQnJva2VuID0ge307XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgICAgICAgICAgICAgICAgICAgICAgVGhlIG9yaWdpbmFsIFVybCB0aGF0IGZhaWxlZCB0byBsb2FkLCBpZiB0aGUgYnJva2VuIGltYWdlIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgY2FjaGUgdXNpbmcgdGhpcyBVcmwgYXMgdGhlIGtleSBzbyB0aGF0IHN1YnNlcXVlbnQgcmVxdWVzdHMgZm9yIHRoaXMgVXJsIHdpbGwgcmV0dXJuIHRoZSBicm9rZW4gaW1hZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJyb2tlblVybCAgICAgICAgICAgICAgICBVcmwgdGhlIGJyb2tlbiBpbWFnZSB0byB0cnkgYW5kIGxvYWRcbiAgICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VUb0xvYWRCcm9rZW5VcmxPbiAgIFRoZSBpbWFnZSBvYmplY3RcbiAgICovXG4gIF90cnlsb2FkQnJva2VuVXJsKHVybCwgYnJva2VuVXJsLCBpbWFnZVRvTG9hZEJyb2tlblVybE9uKSB7XG4gICAgLy9JZiB0aGVzZSBwYXJhbWV0ZXJzIGFyZW4ndCBzcGVjaWZpZWQgdGhlbiBleGl0IHRoZSBmdW5jdGlvbiBiZWNhdXNlIG5vdGhpbmcgY29uc3RydWN0aXZlIGNhbiBiZSBkb25lXG4gICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkIHx8IGltYWdlVG9Mb2FkQnJva2VuVXJsT24gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGlmIChicm9rZW5VcmwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFwiTm8gYnJva2VuIHVybCBpbWFnZSBkZWZpbmVkXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vQ2xlYXIgdGhlIG9sZCBzdWJzY3JpcHRpb24gdG8gdGhlIGVycm9yIGV2ZW50IGFuZCBwdXQgYSBuZXcgaW4gcGxhY2UgdGhhdCBvbmx5IGhhbmRsZSBlcnJvcnMgaW4gbG9hZGluZyB0aGUgYnJva2VuSW1hZ2VVcmxcbiAgICBpbWFnZVRvTG9hZEJyb2tlblVybE9uLmltYWdlLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgYnJva2VuSW1hZ2U6XCIsIGJyb2tlblVybCk7XG4gICAgICAvLyBjYWNoZSBpdGVtIHdpbGwgY29udGFpbiBlbXB0eSBpbWFnZSwgdGhpcyBzaG91bGQgYmUgT0sgZm9yIGRlZmF1bHRcbiAgICB9O1xuXG4gICAgLy9TZXQgdGhlIHNvdXJjZSBvZiB0aGUgaW1hZ2UgdG8gdGhlIGJyb2tlblVybCwgdGhpcyBpcyBhY3R1YWxseSB3aGF0IGtpY2tzIG9mZiB0aGUgbG9hZGluZyBvZiB0aGUgYnJva2VuIGltYWdlXG4gICAgaW1hZ2VUb0xvYWRCcm9rZW5VcmxPbi5pbWFnZS5zcmMgPSBicm9rZW5Vcmw7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHt2aXMuSW1hZ2V9IGltYWdlVG9SZWRyYXdXaXRoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVkcmF3V2l0aEltYWdlKGltYWdlVG9SZWRyYXdXaXRoKSB7XG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2soaW1hZ2VUb1JlZHJhd1dpdGgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsICAgICAgICAgIFVybCBvZiB0aGUgaW1hZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJyb2tlblVybCAgICBVcmwgb2YgYW4gaW1hZ2UgdG8gdXNlIGlmIHRoZSB1cmwgaW1hZ2UgaXMgbm90IGZvdW5kXG4gICAqIEByZXR1cm5zIHtJbWFnZX0gaW1nICAgICAgICAgIFRoZSBpbWFnZSBvYmplY3RcbiAgICovXG4gIGxvYWQodXJsLCBicm9rZW5VcmwpIHtcbiAgICAvL1RyeSBhbmQgZ2V0IHRoZSBpbWFnZSBmcm9tIHRoZSBjYWNoZSwgaWYgc3VjY2Vzc2Z1bCB0aGVuIHJldHVybiB0aGUgY2FjaGVkIGltYWdlXG4gICAgY29uc3QgY2FjaGVkSW1hZ2UgPSB0aGlzLmltYWdlc1t1cmxdO1xuICAgIGlmIChjYWNoZWRJbWFnZSkgcmV0dXJuIGNhY2hlZEltYWdlO1xuXG4gICAgLy9DcmVhdGUgYSBuZXcgaW1hZ2VcbiAgICBjb25zdCBpbWcgPSBuZXcgQ2FjaGVkSW1hZ2UoKTtcblxuICAgIC8vIE5lZWQgdG8gYWRkIHRvIGNhY2hlIGhlcmUsIG90aGVyd2lzZSBmaW5hbCByZXR1cm4gd2lsbCBzcGF3biBkaWZmZXJlbnQgY29waWVzIG9mIHRoZSBzYW1lIGltYWdlLFxuICAgIC8vIEFsc28sIHRoZXJlIHdpbGwgYmUgbXVsdGlwbGUgbG9hZHMgb2YgdGhlIHNhbWUgaW1hZ2UuXG4gICAgdGhpcy5pbWFnZXNbdXJsXSA9IGltZztcblxuICAgIC8vU3Vic2NyaWJlIHRvIHRoZSBldmVudCB0aGF0IGlzIHJhaXNlZCBpZiB0aGUgaW1hZ2UgbG9hZHMgc3VjY2Vzc2Z1bGx5XG4gICAgaW1nLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIC8vIFByb3Blcmx5IGluaXQgdGhlIGNhY2hlZCBpdGVtIGFuZCB0aGVuIHJlcXVlc3QgYSByZWRyYXdcbiAgICAgIHRoaXMuX2ZpeEltYWdlQ29vcmRpbmF0ZXMoaW1nLmltYWdlKTtcbiAgICAgIGltZy5pbml0KCk7XG4gICAgICB0aGlzLl9yZWRyYXdXaXRoSW1hZ2UoaW1nKTtcbiAgICB9O1xuXG4gICAgLy9TdWJzY3JpYmUgdG8gdGhlIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGlmIHRoZSBpbWFnZSBmYWlscyB0byBsb2FkXG4gICAgaW1nLmltYWdlLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgaW1hZ2U6XCIsIHVybCk7XG4gICAgICAvL1RyeSBhbmQgbG9hZCB0aGUgaW1hZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBicm9rZW5VcmwgdXNpbmdcbiAgICAgIHRoaXMuX3RyeWxvYWRCcm9rZW5VcmwodXJsLCBicm9rZW5VcmwsIGltZyk7XG4gICAgfTtcblxuICAgIC8vU2V0IHRoZSBzb3VyY2Ugb2YgdGhlIGltYWdlIHRvIHRoZSB1cmwsIHRoaXMgaXMgd2hhdCBhY3R1YWxseSBraWNrcyBvZmYgdGhlIGxvYWRpbmcgb2YgdGhlIGltYWdlXG4gICAgaW1nLmltYWdlLnNyYyA9IHVybDtcblxuICAgIC8vUmV0dXJuIHRoZSBuZXcgaW1hZ2VcbiAgICByZXR1cm4gaW1nO1xuICB9XG5cbiAgLyoqXG4gICAqIElFMTEgZml4IC0tIHRoYW5rcyBkcG9uY2ghXG4gICAqXG4gICAqIExvY2FsIGhlbHBlciBmdW5jdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5JbWFnZX0gaW1hZ2VUb0NhY2hlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZml4SW1hZ2VDb29yZGluYXRlcyhpbWFnZVRvQ2FjaGUpIHtcbiAgICBpZiAoaW1hZ2VUb0NhY2hlLndpZHRoID09PSAwKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGltYWdlVG9DYWNoZSk7XG4gICAgICBpbWFnZVRvQ2FjaGUud2lkdGggPSBpbWFnZVRvQ2FjaGUub2Zmc2V0V2lkdGg7XG4gICAgICBpbWFnZVRvQ2FjaGUuaGVpZ2h0ID0gaW1hZ2VUb0NhY2hlLm9mZnNldEhlaWdodDtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW1hZ2VUb0NhY2hlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VzO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIEZGMjYtIGJ1ZzogQXJyYXlCdWZmZXJzIGFyZSBub24tZXh0ZW5zaWJsZSwgYnV0IE9iamVjdC5pc0V4dGVuc2libGUgZG9lcyBub3QgcmVwb3J0IGl0XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoYnVmZmVyKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1ZmZlciwgJ2EnLCB7IHZhbHVlOiA4IH0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSAtLSBzYWZlXG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgJGlzRXh0ZW5zaWJsZSgxKTsgfSk7XG5cbi8vIGBPYmplY3QuaXNFeHRlbnNpYmxlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmlzZXh0ZW5zaWJsZVxubW9kdWxlLmV4cG9ydHMgPSAoRkFJTFNfT05fUFJJTUlUSVZFUyB8fCBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUpID8gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgJiYgY2xhc3NvZihpdCkgPT09ICdBcnJheUJ1ZmZlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWU7XG59IDogJGlzRXh0ZW5zaWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGlzRXh0ZW5zaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxudmFyIHNldE1ldGFkYXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIGRlZmluZVByb3BlcnR5KGl0LCBNRVRBREFUQSwgeyB2YWx1ZToge1xuICAgIG9iamVjdElEOiAnTycgKyBpZCsrLCAvLyBvYmplY3QgSURcbiAgICB3ZWFrRGF0YToge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG5cbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIGEgcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBREFUQV0ub2JqZWN0SUQ7XG59O1xuXG52YXIgZ2V0V2Vha0RhdGEgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIHRoZSBzdG9yZSBvZiB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBREFUQV0ud2Vha0RhdGE7XG59O1xuXG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpJTkcgJiYgUkVRVUlSRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzT3duKGl0LCBNRVRBREFUQSkpIHNldE1ldGFkYXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxudmFyIGVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgbWV0YS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4gIFJFUVVJUkVEID0gdHJ1ZTtcbiAgdmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmY7XG4gIHZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xuICB2YXIgdGVzdCA9IHt9O1xuICB0ZXN0W01FVEFEQVRBXSA9IDE7XG5cbiAgLy8gcHJldmVudCBleHBvc2luZyBvZiBtZXRhZGF0YSBrZXlcbiAgaWYgKGdldE93blByb3BlcnR5TmFtZXModGVzdCkubGVuZ3RoKSB7XG4gICAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHRbaV0gPT09IE1FVEFEQVRBKSB7XG4gICAgICAgICAgc3BsaWNlKHJlc3VsdCwgaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUuZlxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBlbmFibGU6IGVuYWJsZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2Vha0RhdGE6IGdldFdlYWtEYXRhLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cbmhpZGRlbktleXNbTUVUQURBVEFdID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19SRUNPUkQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfUkVDT1JEKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19SRUNPUkQpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlLml0ZXJhdG9yO1xuICB9IGVsc2UgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gSVNfUkVDT1JEID8gaXRlcmFibGUubmV4dCA6IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFByb3RvdHlwZSkge1xuICBpZiAoaXNQcm90b3R5cGVPZihQcm90b3R5cGUsIGl0KSkgcmV0dXJuIGl0O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcignSW5jb3JyZWN0IGludm9jYXRpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcbiAgdmFyIENvbnN0cnVjdG9yO1xuXG4gIGlmICghREVTQ1JJUFRPUlMgfHwgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpXG4gICAgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7IH0pKVxuICApIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSB7XG4gICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKGFuSW5zdGFuY2UodGFyZ2V0LCBQcm90b3R5cGUpLCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGNvbGxlY3Rpb246IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0YXJnZXRbQURERVJdLCB7IHRoYXQ6IHRhcmdldCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIGZvckVhY2goWydhZGQnLCAnY2xlYXInLCAnZGVsZXRlJywgJ2ZvckVhY2gnLCAnZ2V0JywgJ2hhcycsICdzZXQnLCAna2V5cycsICd2YWx1ZXMnLCAnZW50cmllcyddLCBmdW5jdGlvbiAoS0VZKSB7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT09ICdhZGQnIHx8IEtFWSA9PT0gJ3NldCc7XG4gICAgICBpZiAoS0VZIGluIE5hdGl2ZVByb3RvdHlwZSAmJiAhKElTX1dFQUsgJiYgS0VZID09PSAnY2xlYXInKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb247XG4gICAgICAgICAgaWYgKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSkgcmV0dXJuIEtFWSA9PT0gJ2dldCcgPyB1bmRlZmluZWQgOiBmYWxzZTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY29sbGVjdGlvbltLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgcmV0dXJuIElTX0FEREVSID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBJU19XRUFLIHx8IGRlZmluZVByb3BlcnR5KFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbi5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZhbHNlLCB0cnVlKTtcblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwgZXhwb3J0ZWQpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bnNhZmUgJiYgdGFyZ2V0W2tleV0pIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLmZhc3RLZXk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIFByb3RvdHlwZSk7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgaW5kZXg6IGNyZWF0ZShudWxsKSxcbiAgICAgICAgZmlyc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RhdGUuZmlyc3QpIHN0YXRlLmZpcnN0ID0gZW50cnk7XG4gICAgICAgIGlmIChwcmV2aW91cykgcHJldmlvdXMubmV4dCA9IGVudHJ5O1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUrKztcbiAgICAgICAgZWxzZSB0aGF0LnNpemUrKztcbiAgICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSBzdGF0ZS5pbmRleFtpbmRleF0gPSBlbnRyeTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIHZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAvLyBmYXN0IGNhc2VcbiAgICAgIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgICAgIHZhciBlbnRyeTtcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gc3RhdGUuaW5kZXhbaW5kZXhdO1xuICAgICAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gICAgICBmb3IgKGVudHJ5ID0gc3RhdGUuZmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm5leHQpIHtcbiAgICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSByZXR1cm4gZW50cnk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuY2xlYXIoKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmNsZWFyXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZGF0YSA9IHN0YXRlLmluZGV4O1xuICAgICAgICB2YXIgZW50cnkgPSBzdGF0ZS5maXJzdDtcbiAgICAgICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnByZXZpb3VzKSBlbnRyeS5wcmV2aW91cyA9IGVudHJ5LnByZXZpb3VzLm5leHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5maXJzdCA9IHN0YXRlLmxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICAgICAgdmFyIGVudHJ5ID0gc3RhdGUubGFzdDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCFzdGF0ZS50YXJnZXQgfHwgIShzdGF0ZS5sYXN0ID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5zdGF0ZS5maXJzdCkpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT09ICdrZXlzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkua2V5LCBmYWxzZSk7XG4gICAgICBpZiAoa2luZCA9PT0gJ3ZhbHVlcycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LnZhbHVlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0sIGZhbHNlKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZVtAQHNwZWNpZXNdYCBhY2Nlc3NvcnNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1tYXAtQEBzcGVjaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtc2V0LUBAc3BlY2llc1xuICAgIHNldFNwZWNpZXMoQ09OU1RSVUNUT1JfTkFNRSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYE1hcGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLW9iamVjdHNcbmNvbGxlY3Rpb24oJ01hcCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXAnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk1hcDtcbiIsICIvKipcbiAqIFRoaXMgY2xhc3MgY2FuIHN0b3JlIGdyb3VwcyBhbmQgb3B0aW9ucyBzcGVjaWZpYyBmb3IgZ3JvdXBzLlxuICovXG5leHBvcnQgY2xhc3MgR3JvdXBzIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLl9kZWZhdWx0SW5kZXggPSAwO1xuICAgIHRoaXMuX2dyb3VwSW5kZXggPSAwO1xuXG4gICAgdGhpcy5fZGVmYXVsdEdyb3VwcyA9IFtcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiMyQjdDRTlcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjOTdDMkZDXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiIzJCN0NFOVwiLCBiYWNrZ3JvdW5kOiBcIiNEMkU1RkZcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiIzJCN0NFOVwiLCBiYWNrZ3JvdW5kOiBcIiNEMkU1RkZcIiB9LFxuICAgICAgfSwgLy8gMDogYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0ZGQTUwMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRkZGMDBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkZBNTAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGRkZBM1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkZBNTAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGRkZBM1wiIH0sXG4gICAgICB9LCAvLyAxOiB5ZWxsb3dcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGQTBBMTBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkI3RTgxXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZBMEExMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRkFGQjFcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZBMEExMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRkFGQjFcIiB9LFxuICAgICAgfSwgLy8gMjogcmVkXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjNDFBOTA2XCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzdCRTE0MVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM0MUE5MDZcIiwgYmFja2dyb3VuZDogXCIjQTFFQzc2XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM0MUE5MDZcIiwgYmFja2dyb3VuZDogXCIjQTFFQzc2XCIgfSxcbiAgICAgIH0sIC8vIDM6IGdyZWVuXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjRTEyOUYwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0VCN0RGNFwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNFMTI5RjBcIiwgYmFja2dyb3VuZDogXCIjRjBCM0Y1XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNFMTI5RjBcIiwgYmFja2dyb3VuZDogXCIjRjBCM0Y1XCIgfSxcbiAgICAgIH0sIC8vIDQ6IG1hZ2VudGFcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiM3QzI5RjBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjQUQ4NUU0XCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiIzdDMjlGMFwiLCBiYWNrZ3JvdW5kOiBcIiNEM0JERjBcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiIzdDMjlGMFwiLCBiYWNrZ3JvdW5kOiBcIiNEM0JERjBcIiB9LFxuICAgICAgfSwgLy8gNTogcHVycGxlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjQzM3RjAwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0ZGQTgwN1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNDMzdGMDBcIiwgYmFja2dyb3VuZDogXCIjRkZDQTY2XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNDMzdGMDBcIiwgYmFja2dyb3VuZDogXCIjRkZDQTY2XCIgfSxcbiAgICAgIH0sIC8vIDY6IG9yYW5nZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzQyMjBGQlwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM2RTZFRkRcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjNDIyMEZCXCIsIGJhY2tncm91bmQ6IFwiIzlCOUJGRFwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjNDIyMEZCXCIsIGJhY2tncm91bmQ6IFwiIzlCOUJGRFwiIH0sXG4gICAgICB9LCAvLyA3OiBkYXJrYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0ZENUE3N1wiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRkMwQ0JcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkQ1QTc3XCIsIGJhY2tncm91bmQ6IFwiI0ZGRDFEOVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkQ1QTc3XCIsIGJhY2tncm91bmQ6IFwiI0ZGRDFEOVwiIH0sXG4gICAgICB9LCAvLyA4OiBwaW5rXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjNEFENjNBXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0MyRkFCQ1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM0QUQ2M0FcIiwgYmFja2dyb3VuZDogXCIjRTZGRkUzXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM0QUQ2M0FcIiwgYmFja2dyb3VuZDogXCIjRTZGRkUzXCIgfSxcbiAgICAgIH0sIC8vIDk6IG1pbnRcblxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzk5MDAwMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNFRTAwMDBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjQkIwMDAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGMzMzM1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjQkIwMDAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGMzMzM1wiIH0sXG4gICAgICB9LCAvLyAxMDpicmlnaHQgcmVkXG5cbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGRjYwMDBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkY2MDAwXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZGNjAwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjYwMDBcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZGNjAwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjYwMDBcIiB9LFxuICAgICAgfSwgLy8gMTI6IHJlYWwgb3JhbmdlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjOTdDMkZDXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzJCN0NFOVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNEMkU1RkZcIiwgYmFja2dyb3VuZDogXCIjMkI3Q0U5XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNEMkU1RkZcIiwgYmFja2dyb3VuZDogXCIjMkI3Q0U5XCIgfSxcbiAgICAgIH0sIC8vIDEzOiBibHVlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjMzk5NjA1XCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzI1NUMwM1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiMzOTk2MDVcIiwgYmFja2dyb3VuZDogXCIjMjU1QzAzXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiMzOTk2MDVcIiwgYmFja2dyb3VuZDogXCIjMjU1QzAzXCIgfSxcbiAgICAgIH0sIC8vIDE0OiBncmVlblxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0I3MDA1NFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRjAwN0VcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjQjcwMDU0XCIsIGJhY2tncm91bmQ6IFwiI0ZGMDA3RVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjQjcwMDU0XCIsIGJhY2tncm91bmQ6IFwiI0ZGMDA3RVwiIH0sXG4gICAgICB9LCAvLyAxNTogbWFnZW50YVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0FEODVFNFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM3QzI5RjBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRDNCREYwXCIsIGJhY2tncm91bmQ6IFwiIzdDMjlGMFwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRDNCREYwXCIsIGJhY2tncm91bmQ6IFwiIzdDMjlGMFwiIH0sXG4gICAgICB9LCAvLyAxNjogcHVycGxlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjNDU1N0ZBXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzAwMEVBMVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM2RTZFRkRcIiwgYmFja2dyb3VuZDogXCIjMDAwRUExXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM2RTZFRkRcIiwgYmFja2dyb3VuZDogXCIjMDAwRUExXCIgfSxcbiAgICAgIH0sIC8vIDE3OiBkYXJrYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0ZGQzBDQlwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRDVBNzdcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkZEMUQ5XCIsIGJhY2tncm91bmQ6IFwiI0ZENUE3N1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkZEMUQ5XCIsIGJhY2tncm91bmQ6IFwiI0ZENUE3N1wiIH0sXG4gICAgICB9LCAvLyAxODogcGlua1xuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0MyRkFCQ1wiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM3NEQ2NkFcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRTZGRkUzXCIsIGJhY2tncm91bmQ6IFwiIzc0RDY2QVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRTZGRkUzXCIsIGJhY2tncm91bmQ6IFwiIzc0RDY2QVwiIH0sXG4gICAgICB9LCAvLyAxOTogbWludFxuXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjRUUwMDAwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzk5MDAwMFwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNGRjMzMzNcIiwgYmFja2dyb3VuZDogXCIjQkIwMDAwXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNGRjMzMzNcIiwgYmFja2dyb3VuZDogXCIjQkIwMDAwXCIgfSxcbiAgICAgIH0sIC8vIDIwOmJyaWdodCByZWRcbiAgICBdO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIHVzZURlZmF1bHRHcm91cHM6IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IG9wdGlvbkZpZWxkcyA9IFtcInVzZURlZmF1bHRHcm91cHNcIl07XG5cbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyb3VwTmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgZ3JvdXBOYW1lKSkge1xuICAgICAgICAgIGlmIChvcHRpb25GaWVsZHMuaW5kZXhPZihncm91cE5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25zW2dyb3VwTmFtZV07XG4gICAgICAgICAgICB0aGlzLmFkZChncm91cE5hbWUsIGdyb3VwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGdyb3Vwc1xuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5fZ3JvdXBzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2dyb3VwTmFtZXMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZ3JvdXAgb3B0aW9ucyBvZiBhIGdyb3VwbmFtZS5cbiAgICogSWYgZ3JvdXBuYW1lIGlzIG5vdCBmb3VuZCwgYSBuZXcgZ3JvdXAgbWF5IGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gICAgICAgZ3JvdXBuYW1lICAgICBDYW4gYmUgYSBudW1iZXIsIHN0cmluZywgRGF0ZSwgZXRjLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG91bGRDcmVhdGU9dHJ1ZV0gSWYgdHJ1ZSwgY3JlYXRlIGEgbmV3IGdyb3VwXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBmb3VuZCBvciBjcmVhdGVkIGdyb3VwXG4gICAqL1xuICBnZXQoZ3JvdXBuYW1lLCBzaG91bGRDcmVhdGUgPSB0cnVlKSB7XG4gICAgbGV0IGdyb3VwID0gdGhpcy5fZ3JvdXBzLmdldChncm91cG5hbWUpO1xuXG4gICAgaWYgKGdyb3VwID09PSB1bmRlZmluZWQgJiYgc2hvdWxkQ3JlYXRlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMub3B0aW9ucy51c2VEZWZhdWx0R3JvdXBzID09PSBmYWxzZSAmJlxuICAgICAgICB0aGlzLl9ncm91cE5hbWVzLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICAvLyBjcmVhdGUgbmV3IGdyb3VwXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZ3JvdXBJbmRleCAlIHRoaXMuX2dyb3VwTmFtZXMubGVuZ3RoO1xuICAgICAgICArK3RoaXMuX2dyb3VwSW5kZXg7XG4gICAgICAgIGdyb3VwID0ge307XG4gICAgICAgIGdyb3VwLmNvbG9yID0gdGhpcy5fZ3JvdXBzLmdldCh0aGlzLl9ncm91cE5hbWVzW2luZGV4XSk7XG4gICAgICAgIHRoaXMuX2dyb3Vwcy5zZXQoZ3JvdXBuYW1lLCBncm91cCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgbmV3IGdyb3VwXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZGVmYXVsdEluZGV4ICUgdGhpcy5fZGVmYXVsdEdyb3Vwcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRJbmRleCsrO1xuICAgICAgICBncm91cCA9IHt9O1xuICAgICAgICBncm91cC5jb2xvciA9IHRoaXMuX2RlZmF1bHRHcm91cHNbaW5kZXhdO1xuICAgICAgICB0aGlzLl9ncm91cHMuc2V0KGdyb3VwbmFtZSwgZ3JvdXApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgY3VzdG9tIGdyb3VwIHN0eWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXBOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGdyb3VwLCBhIG5ldyBncm91cCB3aWxsIGJlXG4gICAqIGNyZWF0ZWQgaWYgYSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgZG9lc24ndCBleGlzdCwgb3RoZXJ3aXNlIHRoZSBvbGRcbiAgICogZ3JvdXBzIHN0eWxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZSAtIEFuIG9iamVjdCBjb250YWluaW5nIGJvcmRlckNvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsXG4gICAqIGV0Yy5cbiAgICogQHJldHVybnMge29iamVjdH0gVGhlIGNyZWF0ZWQgZ3JvdXAgb2JqZWN0LlxuICAgKi9cbiAgYWRkKGdyb3VwTmFtZSwgc3R5bGUpIHtcbiAgICAvLyBPbmx5IHB1c2ggZ3JvdXAgbmFtZSBvbmNlIHRvIHByZXZlbnQgZHVwbGljYXRlcyB3aGljaCB3b3VsZCBjb25zdW1lIG1vcmVcbiAgICAvLyBSQU0gYW5kIGFsc28gc2tldyB0aGUgZGlzdHJpYnV0aW9uIHRvd2FyZHMgbW9yZSBvZnRlbiB1cGRhdGVkIGdyb3VwcyxcbiAgICAvLyBuZWl0aGVyIG9mIHdoaWNoIGlzIGRlc2lyYWJsZS5cbiAgICBpZiAoIXRoaXMuX2dyb3Vwcy5oYXMoZ3JvdXBOYW1lKSkge1xuICAgICAgdGhpcy5fZ3JvdXBOYW1lcy5wdXNoKGdyb3VwTmFtZSk7XG4gICAgfVxuICAgIHRoaXMuX2dyb3Vwcy5zZXQoZ3JvdXBOYW1lLCBzdHlsZSk7XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBOdW1iZXIuaXNOYU5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNuYW5cbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm51bWJlci5pcy1uYW4nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk51bWJlci5pc05hTjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgZ2xvYmFsSXNGaW5pdGUgPSBnbG9iYWwuaXNGaW5pdGU7XG5cbi8vIGBOdW1iZXIuaXNGaW5pdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNmaW5pdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1udW1iZXItaXNmaW5pdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBnbG9iYWxJc0Zpbml0ZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG51bWJlcklzRmluaXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1pcy1maW5pdGUnKTtcblxuLy8gYE51bWJlci5pc0Zpbml0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci5pc2Zpbml0ZVxuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUgfSwgeyBpc0Zpbml0ZTogbnVtYmVySXNGaW5pdGUgfSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5udW1iZXIuaXMtZmluaXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5OdW1iZXIuaXNGaW5pdGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zb21lO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb21lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG59O1xuXG5pZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtKSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBrZXksIGRlc2NyaXB0b3I7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywga2V5ID0ga2V5c1tpbmRleCsrXSk7XG4gICAgICBpZiAoZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKS5mO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzICE9PSBkZWZpbmVQcm9wZXJ0aWVzLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0aWVzOiBkZWZpbmVQcm9wZXJ0aWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKFQsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQsIEQpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLnNoYW0pIGRlZmluZVByb3BlcnRpZXMuc2hhbSA9IHRydWU7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpOyIsICJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIjtcbmltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyICRwYXJzZUZsb2F0ID0gZ2xvYmFsLnBhcnNlRmxvYXQ7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBJVEVSQVRPUiA9IFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRk9SQ0VEID0gMSAvICRwYXJzZUZsb2F0KHdoaXRlc3BhY2VzICsgJy0wJykgIT09IC1JbmZpbml0eVxuICAvLyBNUyBFZGdlIDE4LSBicm9rZW4gd2l0aCBib3hlZCBzeW1ib2xzXG4gIHx8IChJVEVSQVRPUiAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyAkcGFyc2VGbG9hdChPYmplY3QoSVRFUkFUT1IpKTsgfSkpO1xuXG4vLyBgcGFyc2VGbG9hdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlZmxvYXQtc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyaW5nKSB7XG4gIHZhciB0cmltbWVkU3RyaW5nID0gdHJpbSh0b1N0cmluZyhzdHJpbmcpKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHRyaW1tZWRTdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIGNoYXJBdCh0cmltbWVkU3RyaW5nLCAwKSA9PT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWZsb2F0Jyk7XG5cbi8vIGBwYXJzZUZsb2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VmbG9hdC1zdHJpbmdcbiQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogcGFyc2VGbG9hdCAhPT0gJHBhcnNlRmxvYXQgfSwge1xuICBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wYXJzZS1mbG9hdCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGgucGFyc2VGbG9hdDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKS5mO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgeyB0b3BNb3N0IH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIGNvbXBvbmVudHNcbiAqL1xuXG4vKipcbiAqIERldGVybWluZSB2YWx1ZXMgdG8gdXNlIGZvciAoc3ViKW9wdGlvbnMgb2YgJ2Nob3NlbicuXG4gKlxuICogVGhpcyBvcHRpb24gaXMgZWl0aGVyIGEgYm9vbGVhbiBvciBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBleGFtaW5lZCBmdXJ0aGVyLlxuICogVGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYXJlOlxuICpcbiAqIC0gY2hvc2VuOiA8Ym9vbGVhbiB2YWx1ZT5cbiAqIC0gY2hvc2VuOiB7IHN1Yk9wdGlvbjogPGJvb2xlYW4gb3IgZnVuY3Rpb24+IH1cbiAqXG4gKiBXaGVyZSBzdWJPcHRpb24gaXMgJ25vZGUnLCAnZWRnZScgb3IgJ2xhYmVsJy5cbiAqXG4gKiBUaGUgaW50ZW50aW9uIG9mIHRoaXMgbWV0aG9kIGFwcGVhcnMgdG8gYmUgdG8gc2V0IGEgc3BlY2lmaWMgcHJpb3JpdHkgdG8gdGhlIG9wdGlvbnM7XG4gKiBTaW5jZSBtb3N0IHByb3BlcnRpZXMgYXJlIGVpdGhlciBicmlkZ2VkIG9yIG1lcmdlZCBpbnRvIHRoZSBsb2NhbCBvcHRpb25zIG9iamVjdHMsIHRoZXJlXG4gKiBpcyBub3QgbXVjaCBwb2ludCBpbiBoYW5kbGluZyB0aGVtIHNlcGFyYXRlbHkuXG4gKiBUT0RPOiBleGFtaW5lIGlmICdtb3N0JyBpbiBwcmV2aW91cyBzZW50ZW5jZSBjYW4gYmUgcmVwbGFjZWQgd2l0aCAnYWxsJy4gSW4gdGhhdCBjYXNlLCB3ZVxuICogICAgICAgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHJpZCBvZiB0aGlzIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gIHN1Yk9wdGlvbiAgb3B0aW9uIHdpdGhpbiBvYmplY3QgJ2Nob3NlbicgdG8gY29uc2lkZXI7IGVpdGhlciAnbm9kZScsICdlZGdlJyBvciAnbGFiZWwnXG4gKiBAcGFyYW0ge29iamVjdH0gIHBpbGUgICAgICAgYXJyYXkgb2Ygb3B0aW9ucyBvYmplY3RzIHRvIGNvbnNpZGVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbiB8IEZ1bmN0aW9ufSAgdmFsdWUgZm9yIHBhc3NlZCBzdWJPcHRpb24gb2YgJ2Nob3NlbicgdG8gdXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaG9vc2lmeShzdWJPcHRpb24sIHBpbGUpIHtcbiAgLy8gYWxsb3dlZCB2YWx1ZXMgZm9yIHN1Yk9wdGlvblxuICBjb25zdCBhbGxvd2VkID0gW1wibm9kZVwiLCBcImVkZ2VcIiwgXCJsYWJlbFwiXTtcbiAgbGV0IHZhbHVlID0gdHJ1ZTtcblxuICBjb25zdCBjaG9zZW4gPSB0b3BNb3N0KHBpbGUsIFwiY2hvc2VuXCIpO1xuICBpZiAodHlwZW9mIGNob3NlbiA9PT0gXCJib29sZWFuXCIpIHtcbiAgICB2YWx1ZSA9IGNob3NlbjtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2hvc2VuID09PSBcIm9iamVjdFwiKSB7XG4gICAgaWYgKGFsbG93ZWQuaW5kZXhPZihzdWJPcHRpb24pID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImNob29zaWZ5OiBzdWJPcHRpb24gJ1wiICtcbiAgICAgICAgICBzdWJPcHRpb24gK1xuICAgICAgICAgIFwiJyBzaG91bGQgYmUgb25lIG9mIFwiICtcbiAgICAgICAgICBcIidcIiArXG4gICAgICAgICAgYWxsb3dlZC5qb2luKFwiJywgJ1wiKSArXG4gICAgICAgICAgXCInXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hvc2VuRWRnZSA9IHRvcE1vc3QocGlsZSwgW1wiY2hvc2VuXCIsIHN1Yk9wdGlvbl0pO1xuICAgIGlmICh0eXBlb2YgY2hvc2VuRWRnZSA9PT0gXCJib29sZWFuXCIgfHwgdHlwZW9mIGNob3NlbkVkZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdmFsdWUgPSBjaG9zZW5FZGdlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcG9pbnQgZmFsbHMgd2l0aGluIHRoZSBnaXZlbiByZWN0YW5nbGUuXG4gKlxuICogQHBhcmFtIHtyZWN0fSByZWN0XG4gKiBAcGFyYW0ge3BvaW50fSBwb2ludFxuICogQHBhcmFtIHtyb3RhdGlvblBvaW50fSBbcm90YXRpb25Qb2ludF0gaWYgc3BlY2lmaWVkLCB0aGUgcm90YXRpb24gdGhhdCBhcHBsaWVzIHRvIHRoZSByZWN0YW5nbGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gIHRydWUgaWYgcG9pbnQgd2l0aGluIHJlY3RhbmdsZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2ludEluUmVjdChyZWN0LCBwb2ludCwgcm90YXRpb25Qb2ludCkge1xuICBpZiAocmVjdC53aWR0aCA8PSAwIHx8IHJlY3QuaGVpZ2h0IDw9IDApIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIGVhcmx5IG91dFxuICB9XG5cbiAgaWYgKHJvdGF0aW9uUG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFJvdGF0ZSB0aGUgcG9pbnQgdGhlIHNhbWUgYW1vdW50IGFzIHRoZSByZWN0YW5nbGVcbiAgICBjb25zdCB0bXAgPSB7XG4gICAgICB4OiBwb2ludC54IC0gcm90YXRpb25Qb2ludC54LFxuICAgICAgeTogcG9pbnQueSAtIHJvdGF0aW9uUG9pbnQueSxcbiAgICB9O1xuXG4gICAgaWYgKHJvdGF0aW9uUG9pbnQuYW5nbGUgIT09IDApIHtcbiAgICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgY29vcmRpbmF0ZXMgdGhlIHNhbWUsIHlvdSBuZWVkIHRvXG4gICAgICAvLyByb3RhdGUgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uXG4gICAgICBjb25zdCBhbmdsZSA9IC1yb3RhdGlvblBvaW50LmFuZ2xlO1xuXG4gICAgICBjb25zdCB0bXAyID0ge1xuICAgICAgICB4OiBNYXRoLmNvcyhhbmdsZSkgKiB0bXAueCAtIE1hdGguc2luKGFuZ2xlKSAqIHRtcC55LFxuICAgICAgICB5OiBNYXRoLnNpbihhbmdsZSkgKiB0bXAueCArIE1hdGguY29zKGFuZ2xlKSAqIHRtcC55LFxuICAgICAgfTtcbiAgICAgIHBvaW50ID0gdG1wMjtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9pbnQgPSB0bXA7XG4gICAgfVxuXG4gICAgLy8gTm90ZSB0aGF0IGlmIGEgcm90YXRpb24gaXMgc3BlY2lmaWVkLCB0aGUgcmVjdGFuZ2xlIGNvb3JkaW5hdGVzXG4gICAgLy8gYXJlICoqbm90KiB0aGUgZnVsbCBjYW52YXMgY29vcmRpbmF0ZXMuIFRoZXkgYXJlIHJlbGF0aXZlIHRvIHRoZVxuICAgIC8vIHJvdGF0aW9uUG9pbnQuIEhlbmNlLCB0aGUgcG9pbnQgY29vcmRpbmF0ZXMgbmVlZCBub3QgYmUgdHJhbnNsYXRlZFxuICAgIC8vIGJhY2sgaW4gdGhpcyBjYXNlLlxuICB9XG5cbiAgY29uc3QgcmlnaHQgPSByZWN0LnggKyByZWN0LndpZHRoO1xuICBjb25zdCBib3R0b20gPSByZWN0LnkgKyByZWN0LndpZHRoO1xuXG4gIHJldHVybiAoXG4gICAgcmVjdC5sZWZ0IDwgcG9pbnQueCAmJlxuICAgIHJpZ2h0ID4gcG9pbnQueCAmJlxuICAgIHJlY3QudG9wIDwgcG9pbnQueSAmJlxuICAgIGJvdHRvbSA+IHBvaW50LnlcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBnaXZlbiB2YWx1ZSBpcyBhY2NlcHRhYmxlIGFzIGEgbGFiZWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0geyp9IHRleHQgdmFsdWUgdG8gY2hlY2s7IGNhbiBiZSBhbnl0aGluZyBhdCB0aGlzIHBvaW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB2YWxpZCBsYWJlbCB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTGFiZWwodGV4dCkge1xuICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBxdWl0ZSBzdHJpY3Q6IHR5cGVzIHRoYXQgKm1pZ2h0KiBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIGFyZSBkaXNhbGxvd2VkXG4gIHJldHVybiB0eXBlb2YgdGV4dCA9PT0gXCJzdHJpbmdcIiAmJiB0ZXh0ICE9PSBcIlwiO1xufVxuXG4vKipcbiAqIFJldHVybnMgeCwgeSBvZiBzZWxmIHJlZmVyZW5jZSBjaXJjbGUgYmFzZWQgb24gcHJvdmlkZWQgYW5nbGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY3R4XG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXNcbiAqIEBwYXJhbSB7VmlzTm9kZX0gbm9kZVxuICogQHJldHVybnMge29iamVjdH0geCBhbmQgeSBjb29yZGluYXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZlJlZkNvb3JkaW5hdGVzKGN0eCwgYW5nbGUsIHJhZGl1cywgbm9kZSkge1xuICBsZXQgeCA9IG5vZGUueDtcbiAgbGV0IHkgPSBub2RlLnk7XG5cbiAgaWYgKHR5cGVvZiBub2RlLmRpc3RhbmNlVG9Cb3JkZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIC8vY2FsY3VsYXRpbmcgb3Bwb3NpdGUgYW5kIGFkamFjZW50XG4gICAgLy9kaXN0YW5lVG9Cb3JkZXIgYmVjb21lcyBIeXBvdGVudXNlLlxuICAgIC8vRm9ybXVsYXMgc2luKGEpID0gT3Bwb3NpdGUgLyBIeXBvdGVudXNlIGFuZCBjb3MoYSkgPSBBZGphY2VudCAvIEh5cG90ZW51c2VcbiAgICBjb25zdCB0b0JvcmRlckRpc3QgPSBub2RlLmRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gICAgY29uc3QgeUZyb21Ob2RlQ2VudGVyID0gTWF0aC5zaW4oYW5nbGUpICogdG9Cb3JkZXJEaXN0O1xuICAgIGNvbnN0IHhGcm9tTm9kZUNlbnRlciA9IE1hdGguY29zKGFuZ2xlKSAqIHRvQm9yZGVyRGlzdDtcbiAgICAvL3hGcm9tTm9kZUNlbnRlciBpcyBiYXNpY2FsbHkgeCBhbmQgaWYgeEZyb21Ob2RlQ2VudGVyIGVxdWFscyB0byB0aGUgZGlzdGFuY2UgdG8gYm9yZGVyIHRoZW4gaXQgbWVhbnNcbiAgICAvL3RoYXQgeSBkb2VzIG5vdCBuZWVkIGNhbGN1bGF0aW9uIGJlY2F1c2UgaXQgaXMgZXF1YWwgbm9kZS5oZWlnaHQgLyAyIG9yIG5vZGUueVxuICAgIC8vc2FtZSB0aGluZyB3aXRoIHlGcm9tTm9kZUNlbnRlciBhbmQgaWYgeUZyb21Ob2RlQ2VudGVyIGVxdWFscyB0byB0aGUgZGlzdGFuY2UgdG8gYm9yZGVyIHRoZW4gaXQgbWVhbnNcbiAgICAvL3RoYXQgeCBpcyBlcXVhbCBub2RlLndpZHRoIC8gMiBvciBub2RlLnhcbiAgICBpZiAoeEZyb21Ob2RlQ2VudGVyID09PSB0b0JvcmRlckRpc3QpIHtcbiAgICAgIHggKz0gdG9Cb3JkZXJEaXN0O1xuICAgICAgeSA9IG5vZGUueTtcbiAgICB9IGVsc2UgaWYgKHlGcm9tTm9kZUNlbnRlciA9PT0gdG9Cb3JkZXJEaXN0KSB7XG4gICAgICB4ID0gbm9kZS54O1xuICAgICAgeSAtPSB0b0JvcmRlckRpc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggKz0geEZyb21Ob2RlQ2VudGVyO1xuICAgICAgeSAtPSB5RnJvbU5vZGVDZW50ZXI7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUuc2hhcGUud2lkdGggPiBub2RlLnNoYXBlLmhlaWdodCkge1xuICAgIHggPSBub2RlLnggKyBub2RlLnNoYXBlLndpZHRoICogMC41O1xuICAgIHkgPSBub2RlLnkgLSByYWRpdXM7XG4gIH0gZWxzZSB7XG4gICAgeCA9IG5vZGUueCArIHJhZGl1cztcbiAgICB5ID0gbm9kZS55IC0gbm9kZS5zaGFwZS5oZWlnaHQgKiAwLjU7XG4gIH1cblxuICByZXR1cm4geyB4LCB5IH07XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykudmFsdWVzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudmFsdWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXNcIik7IiwgIi8qKlxuICogQ2FsbGJhY2sgdG8gZGV0ZXJtaW5lIHRleHQgZGltZW5zaW9ucywgdXNpbmcgdGhlIHBhcmVudCBsYWJlbCBzZXR0aW5ncy5cbiAqXG4gKiBAY2FsbGJhY2sgTWVhc3VyZVRleHRcbiAqIEBwYXJhbSB7dGV4dH0gdGV4dFxuICogQHBhcmFtIHt0ZXh0fSBtb2RcbiAqIEByZXR1cm5zIHtvYmplY3R9IHsgd2lkdGgsIHZhbHVlc30gd2lkdGggaW4gcGl4ZWxzIGFuZCBmb250IGF0dHJpYnV0ZXNcbiAqL1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgTGFiZWwgd2hpY2ggY29sbGVjdHMgcmVzdWx0cyBvZiBzcGxpdHRpbmcgbGFiZWxzIGludG8gbGluZXMgYW5kIGJsb2Nrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBMYWJlbEFjY3VtdWxhdG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7TWVhc3VyZVRleHR9IG1lYXN1cmVUZXh0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZWFzdXJlVGV4dCkge1xuICAgIHRoaXMubWVhc3VyZVRleHQgPSBtZWFzdXJlVGV4dDtcbiAgICB0aGlzLmN1cnJlbnQgPSAwO1xuICAgIHRoaXMud2lkdGggPSAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kIGdpdmVuIHRleHQgdG8gdGhlIGdpdmVuIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSAgbCAgICBpbmRleCBvZiBsaW5lIHRvIGFkZCB0b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gIHRleHQgc3RyaW5nIHRvIGFwcGVuZCB0byBsaW5lXG4gICAqIEBwYXJhbSB7J2JvbGQnfCdpdGFsJ3wnYm9sZGl0YWwnfCdtb25vJ3wnbm9ybWFsJ30gW21vZD0nbm9ybWFsJ11cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGQobCwgdGV4dCwgbW9kID0gXCJub3JtYWxcIikge1xuICAgIGlmICh0aGlzLmxpbmVzW2xdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubGluZXNbbF0gPSB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGJsb2NrczogW10sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFdlIHN0aWxsIG5lZWQgdG8gc2V0IGEgYmxvY2sgZm9yIHVuZGVmaW5lZCBhbmQgZW1wdHkgdGV4dHMsIGhlbmNlIHJldHVybiBhdCB0aGlzIHBvaW50XG4gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYgd2UncmUgYXQgdGhlXG4gICAgLy8gc3RhcnQgb2YgYW4gZW1wdHkgbGluZSBvciBub3QuXG4gICAgLy8gVG8gY29tcGVuc2F0ZSwgZW1wdHkgYmxvY2tzIGFyZSByZW1vdmVkIGluIGBmaW5hbGl6ZSgpYC5cbiAgICAvL1xuICAgIC8vIEVtcHR5IHN0cmluZ3Mgc2hvdWxkIHN0aWxsIGhhdmUgYSBoZWlnaHRcbiAgICBsZXQgdG1wVGV4dCA9IHRleHQ7XG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCB8fCB0ZXh0ID09PSBcIlwiKSB0bXBUZXh0ID0gXCIgXCI7XG5cbiAgICAvLyBEZXRlcm1pbmUgd2lkdGggYW5kIGdldCB0aGUgZm9udCBwcm9wZXJ0aWVzXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tZWFzdXJlVGV4dCh0bXBUZXh0LCBtb2QpO1xuICAgIGNvbnN0IGJsb2NrID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzdWx0LnZhbHVlcyk7XG4gICAgYmxvY2sudGV4dCA9IHRleHQ7XG4gICAgYmxvY2sud2lkdGggPSByZXN1bHQud2lkdGg7XG4gICAgYmxvY2subW9kID0gbW9kO1xuXG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCB8fCB0ZXh0ID09PSBcIlwiKSB7XG4gICAgICBibG9jay53aWR0aCA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy5saW5lc1tsXS5ibG9ja3MucHVzaChibG9jayk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGxpbmUgd2lkdGguIFdlIG5lZWQgdGhpcyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBzdHJpbmcgZ29lcyBvdmVyIG1heCB3aWR0aFxuICAgIHRoaXMubGluZXNbbF0ud2lkdGggKz0gYmxvY2sud2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2lkdGggaW4gcGl4ZWxzIG9mIHRoZSBjdXJyZW50IGxpbmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBjdXJXaWR0aCgpIHtcbiAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1t0aGlzLmN1cnJlbnRdO1xuICAgIGlmIChsaW5lID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuXG4gICAgcmV0dXJuIGxpbmUud2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRleHQgaW4gYmxvY2sgdG8gY3VycmVudCBsaW5lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7J2JvbGQnfCdpdGFsJ3wnYm9sZGl0YWwnfCdtb25vJ3wnbm9ybWFsJ30gW21vZD0nbm9ybWFsJ11cbiAgICovXG4gIGFwcGVuZCh0ZXh0LCBtb2QgPSBcIm5vcm1hbFwiKSB7XG4gICAgdGhpcy5fYWRkKHRoaXMuY3VycmVudCwgdGV4dCwgbW9kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGV4dCBpbiBibG9jayB0byBjdXJyZW50IGxpbmUgYW5kIHN0YXJ0IGEgbmV3IGxpbmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHBhcmFtIHsnYm9sZCd8J2l0YWwnfCdib2xkaXRhbCd8J21vbm8nfCdub3JtYWwnfSBbbW9kPSdub3JtYWwnXVxuICAgKi9cbiAgbmV3TGluZSh0ZXh0LCBtb2QgPSBcIm5vcm1hbFwiKSB7XG4gICAgdGhpcy5fYWRkKHRoaXMuY3VycmVudCwgdGV4dCwgbW9kKTtcbiAgICB0aGlzLmN1cnJlbnQrKztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgYW5kIHNldCB0aGUgaGVpZ2h0cyBvZiBhbGwgdGhlIGxpbmVzIGN1cnJlbnRseSBjb250YWluZWQgaW4gdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBOb3RlIHRoYXQgd2lkdGggaGFzIGFscmVhZHkgYmVlbiBzZXQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZXRlcm1pbmVMaW5lSGVpZ2h0cygpIHtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMubGluZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmxpbmVzW2tdO1xuXG4gICAgICAvLyBMb29raW5nIGZvciBtYXggaGVpZ2h0IG9mIGJsb2NrcyBpbiBsaW5lXG4gICAgICBsZXQgaGVpZ2h0ID0gMDtcblxuICAgICAgaWYgKGxpbmUuYmxvY2tzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gQ2FuIGhhcHBlbiBpZiB0ZXh0IGNvbnRhaW5zIGUuZy4gJ1xcbiAnXG4gICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZS5ibG9ja3MubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgICBjb25zdCBibG9jayA9IGxpbmUuYmxvY2tzW2xdO1xuXG4gICAgICAgICAgaWYgKGhlaWdodCA8IGJsb2NrLmhlaWdodCkge1xuICAgICAgICAgICAgaGVpZ2h0ID0gYmxvY2suaGVpZ2h0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaW5lLmhlaWdodCA9IGhlaWdodDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBmdWxsIHNpemUgb2YgdGhlIGxhYmVsIHRleHQsIGFzIGRldGVybWluZWQgYnkgY3VycmVudCBsaW5lcyBhbmQgYmxvY2tzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZXRlcm1pbmVMYWJlbFNpemUoKSB7XG4gICAgbGV0IHdpZHRoID0gMDtcbiAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMubGluZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmxpbmVzW2tdO1xuXG4gICAgICBpZiAobGluZS53aWR0aCA+IHdpZHRoKSB7XG4gICAgICAgIHdpZHRoID0gbGluZS53aWR0aDtcbiAgICAgIH1cbiAgICAgIGhlaWdodCArPSBsaW5lLmhlaWdodDtcbiAgICB9XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBlbXB0eSBibG9ja3MgYW5kIGVtcHR5IGxpbmVzIHdlIGRvbid0IG5lZWRcbiAgICpcbiAgICogVGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIHdpZHRoL2hlaWdodCBkZXRlcm1pbmF0aW9uLFxuICAgKiBzbyB0aGF0IHRoZXNlIGFyZSBzZXQgcHJvcGVybHkgZm9yIHByb2Nlc3NpbmcgaGVyZS5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5PExpbmU+fSBMaW5lcyB3aXRoIGVtcHR5IGJsb2NrcyAoYW5kIHNvbWUgZW1wdHkgbGluZXMpIHJlbW92ZWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlbW92ZUVtcHR5QmxvY2tzKCkge1xuICAgIGNvbnN0IHRtcExpbmVzID0gW107XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaysrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1trXTtcblxuICAgICAgLy8gTm90ZTogYW4gZW1wdHkgbGluZSBpbiBiZXR3ZWVuIHRleHQgaGFzIHdpZHRoIHplcm8gYnV0IGlzIHN0aWxsIHJlbGV2YW50IHRvIGxheW91dC5cbiAgICAgIC8vIFNvIHdlIGNhbid0IHVzZSB3aWR0aCBmb3IgdGVzdGluZyBlbXB0eSBsaW5lIGhlcmVcbiAgICAgIGlmIChsaW5lLmJsb2Nrcy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAvLyBEaXNjYXJkIGZpbmFsIGVtcHR5IGxpbmUgYWx3YXlzXG4gICAgICBpZiAoayA9PT0gdGhpcy5saW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGlmIChsaW5lLndpZHRoID09PSAwKSBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG1wTGluZSA9IHt9O1xuICAgICAgT2JqZWN0LmFzc2lnbih0bXBMaW5lLCBsaW5lKTtcbiAgICAgIHRtcExpbmUuYmxvY2tzID0gW107XG5cbiAgICAgIGxldCBmaXJzdEVtcHR5QmxvY2s7XG4gICAgICBjb25zdCB0bXBCbG9ja3MgPSBbXTtcbiAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZS5ibG9ja3MubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgY29uc3QgYmxvY2sgPSBsaW5lLmJsb2Nrc1tsXTtcbiAgICAgICAgaWYgKGJsb2NrLndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgdG1wQmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmaXJzdEVtcHR5QmxvY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlyc3RFbXB0eUJsb2NrID0gYmxvY2s7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZXJlIGlzICpzb21lKiB0ZXh0IHByZXNlbnRcbiAgICAgIGlmICh0bXBCbG9ja3MubGVuZ3RoID09PSAwICYmIGZpcnN0RW1wdHlCbG9jayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRtcEJsb2Nrcy5wdXNoKGZpcnN0RW1wdHlCbG9jayk7XG4gICAgICB9XG5cbiAgICAgIHRtcExpbmUuYmxvY2tzID0gdG1wQmxvY2tzO1xuXG4gICAgICB0bXBMaW5lcy5wdXNoKHRtcExpbmUpO1xuICAgIH1cblxuICAgIHJldHVybiB0bXBMaW5lcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHNpemVzIGZvciBhbGwgbGluZXMgYW5kIHRoZSB3aG9sZSB0aGluZy5cbiAgICpcbiAgICogQHJldHVybnMge3t3aWR0aDogKG51bWJlcnwqKSwgaGVpZ2h0OiAobnVtYmVyfCopLCBsaW5lczogQXJyYXl9fVxuICAgKi9cbiAgZmluYWxpemUoKSB7XG4gICAgLy9jb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLmxpbmVzLCBudWxsLCAyKSk7XG5cbiAgICB0aGlzLmRldGVybWluZUxpbmVIZWlnaHRzKCk7XG4gICAgdGhpcy5kZXRlcm1pbmVMYWJlbFNpemUoKTtcbiAgICBjb25zdCB0bXBMaW5lcyA9IHRoaXMucmVtb3ZlRW1wdHlCbG9ja3MoKTtcblxuICAgIC8vIFJldHVybiBhIHNpbXBsZSBoYXNoIG9iamVjdCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICBsaW5lczogdG1wTGluZXMsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYWJlbEFjY3VtdWxhdG9yO1xuIiwgImltcG9ydCBMYWJlbEFjY3VtdWxhdG9yIGZyb20gXCIuL0xhYmVsQWNjdW11bGF0b3JcIjtcbmltcG9ydCB7IGlzVmFsaWRMYWJlbCB9IGZyb20gXCIuL0NvbXBvbmVudFV0aWxcIjtcblxuLy8gSGFzaCBvZiBwcmVwYXJlZCByZWdleHAncyBmb3IgdGFnc1xuY29uc3QgdGFnUGF0dGVybiA9IHtcbiAgLy8gSFRNTFxuICBcIjxiPlwiOiAvPGI+LyxcbiAgXCI8aT5cIjogLzxpPi8sXG4gIFwiPGNvZGU+XCI6IC88Y29kZT4vLFxuICBcIjwvYj5cIjogLzxcXC9iPi8sXG4gIFwiPC9pPlwiOiAvPFxcL2k+LyxcbiAgXCI8L2NvZGU+XCI6IC88XFwvY29kZT4vLFxuICAvLyBNYXJrZG93blxuICBcIipcIjogL1xcKi8sIC8vIGJvbGRcbiAgXzogL18vLCAvLyBpdGFsXG4gIFwiYFwiOiAvYC8sIC8vIG1vbm9cbiAgYWZ0ZXJCb2xkOiAvW14qXS8sXG4gIGFmdGVySXRhbDogL1teX10vLFxuICBhZnRlck1vbm86IC9bXmBdLyxcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgaGVscGVyIGNsYXNzIGZvciBwYXJzaW5nIHRoZSBtYXJrdXAgdGFncyBmb3IgSFRNTCBhbmQgTWFya2Rvd24uXG4gKlxuICogTk9URTogU2VxdWVuY2VzIG9mIHRhYnMgYW5kIHNwYWNlcyBhcmUgcmVkdWNlZCB0byBzaW5nbGUgc3BhY2UuXG4gKiAgICAgICBTY2FuIHVzYWdlIG9mIGB0aGlzLnNwYWNpbmdgIHdpdGhpbiBtZXRob2RcbiAqL1xuY2xhc3MgTWFya3VwQWNjdW11bGF0b3Ige1xuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0ICB0ZXh0IHRvIHBhcnNlIGZvciBtYXJrdXBcbiAgICovXG4gIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuYm9sZCA9IGZhbHNlO1xuICAgIHRoaXMuaXRhbCA9IGZhbHNlO1xuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xuICAgIHRoaXMuc3BhY2luZyA9IGZhbHNlO1xuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcbiAgICB0aGlzLm1vZFN0YWNrID0gW107XG5cbiAgICB0aGlzLmJsb2NrcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbW9kIGxhYmVsIGN1cnJlbnRseSBvbiB0aGUgdG9wIG9mIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgbGFiZWwgb2YgdG9wbW9zdCBtb2RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG1vZCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RTdGFjay5sZW5ndGggPT09IDAgPyBcIm5vcm1hbFwiIDogdGhpcy5tb2RTdGFja1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1vZCBsYWJlbCBjdXJyZW50bHkgYWN0aXZlXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9ICBsYWJlbCBvZiBhY3RpdmUgbW9kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtb2ROYW1lKCkge1xuICAgIGlmICh0aGlzLm1vZFN0YWNrLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwibm9ybWFsXCI7XG4gICAgZWxzZSBpZiAodGhpcy5tb2RTdGFja1swXSA9PT0gXCJtb25vXCIpIHJldHVybiBcIm1vbm9cIjtcbiAgICBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmJvbGQgJiYgdGhpcy5pdGFsKSB7XG4gICAgICAgIHJldHVybiBcImJvbGRpdGFsXCI7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYm9sZCkge1xuICAgICAgICByZXR1cm4gXCJib2xkXCI7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXRhbCkge1xuICAgICAgICByZXR1cm4gXCJpdGFsXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0QmxvY2soKSB7XG4gICAgaWYgKHRoaXMuc3BhY2luZykge1xuICAgICAgdGhpcy5hZGQoXCIgXCIpO1xuICAgICAgdGhpcy5zcGFjaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmJsb2Nrcy5wdXNoKHsgdGV4dDogdGhpcy5idWZmZXIsIG1vZDogdGhpcy5tb2ROYW1lKCkgfSk7XG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCB0ZXh0IHRvIGJ1ZmZlclxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAgdGV4dCB0byBhZGRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkZCh0ZXh0KSB7XG4gICAgaWYgKHRleHQgPT09IFwiIFwiKSB7XG4gICAgICB0aGlzLnNwYWNpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcGFjaW5nKSB7XG4gICAgICB0aGlzLmJ1ZmZlciArPSBcIiBcIjtcbiAgICAgIHRoaXMuc3BhY2luZyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGV4dCAhPSBcIiBcIikge1xuICAgICAgdGhpcy5idWZmZXIgKz0gdGV4dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHBhcnNpbmcgb2Ygd2hpdGVzcGFjZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2ggIHRoZSBjaGFyYWN0ZXIgdG8gY2hlY2tcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGNoYXJhY3RlciB3YXMgcHJvY2Vzc2VkIGFzIHdoaXRlc3BhY2UsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcGFyc2VXUyhjaCkge1xuICAgIGlmICgvWyBcXHRdLy50ZXN0KGNoKSkge1xuICAgICAgaWYgKCF0aGlzLm1vbm8pIHtcbiAgICAgICAgdGhpcy5zcGFjaW5nID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkKGNoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAgbGFiZWwgZm9yIGJsb2NrIHR5cGUgdG8gc2V0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXRUYWcodGFnTmFtZSkge1xuICAgIHRoaXMuZW1pdEJsb2NrKCk7XG4gICAgdGhpc1t0YWdOYW1lXSA9IHRydWU7XG4gICAgdGhpcy5tb2RTdGFjay51bnNoaWZ0KHRhZ05hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lICBsYWJlbCBmb3IgYmxvY2sgdHlwZSB0byB1bnNldFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdW5zZXRUYWcodGFnTmFtZSkge1xuICAgIHRoaXMuZW1pdEJsb2NrKCk7XG4gICAgdGhpc1t0YWdOYW1lXSA9IGZhbHNlO1xuICAgIHRoaXMubW9kU3RhY2suc2hpZnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBsYWJlbCBmb3IgYmxvY2sgdHlwZSB3ZSBhcmUgY3VycmVudGx5IHByb2Nlc3NpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB0YWcgc3RyaW5nIHRvIG1hdGNoIGluIHRleHRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHRhZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHBhcnNlU3RhcnRUYWcodGFnTmFtZSwgdGFnKSB7XG4gICAgLy8gTm90ZTogaWYgJ21vbm8nIHBhc3NlZCBhcyB0YWdOYW1lLCB0aGVyZSBpcyBhIGRvdWJsZSBjaGVjayBoZXJlLiBUaGlzIGlzIE9LXG4gICAgaWYgKCF0aGlzLm1vbm8gJiYgIXRoaXNbdGFnTmFtZV0gJiYgdGhpcy5tYXRjaCh0YWcpKSB7XG4gICAgICB0aGlzLnNldFRhZyh0YWdOYW1lKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHRhZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gW2FkdmFuY2U9dHJ1ZV0gaWYgc2V0LCBhZHZhbmNlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGV4dFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBtYXRjaCBhdCBnaXZlbiBwb3NpdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYXRjaCh0YWcsIGFkdmFuY2UgPSB0cnVlKSB7XG4gICAgY29uc3QgW3JlZ0V4cCwgbGVuZ3RoXSA9IHRoaXMucHJlcGFyZVJlZ0V4cCh0YWcpO1xuICAgIGNvbnN0IG1hdGNoZWQgPSByZWdFeHAudGVzdCh0aGlzLnRleHQuc3Vic3RyKHRoaXMucG9zaXRpb24sIGxlbmd0aCkpO1xuXG4gICAgaWYgKG1hdGNoZWQgJiYgYWR2YW5jZSkge1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIGxhYmVsIGZvciBibG9jayB0eXBlIHdlIGFyZSBjdXJyZW50bHkgcHJvY2Vzc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHRhZyBzdHJpbmcgdG8gbWF0Y2ggaW4gdGV4dFxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gW25leHRUYWddIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBmb3IgY2hhcmFjdGVycyAqZm9sbG93aW5nKiB0aGUgY3VycmVudCB0YWdcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHRhZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHBhcnNlRW5kVGFnKHRhZ05hbWUsIHRhZywgbmV4dFRhZykge1xuICAgIGxldCBjaGVja1RhZyA9IHRoaXMubW9kKCkgPT09IHRhZ05hbWU7XG4gICAgaWYgKHRhZ05hbWUgPT09IFwibW9ub1wiKSB7XG4gICAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciAnbW9ubydcbiAgICAgIGNoZWNrVGFnID0gY2hlY2tUYWcgJiYgdGhpcy5tb25vO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja1RhZyA9IGNoZWNrVGFnICYmICF0aGlzLm1vbm87XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrVGFnICYmIHRoaXMubWF0Y2godGFnKSkge1xuICAgICAgaWYgKG5leHRUYWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBQdXJwb3NlIG9mIHRoZSBmb2xsb3dpbmcgbWF0Y2ggaXMgdG8gcHJldmVudCBhIGRpcmVjdCB1bnNldC9zZXQgb2YgYSBnaXZlbiB0YWdcbiAgICAgICAgLy8gRS5nLiAnKmJvbGQgKipzdGlsbCBib2xkKicgPT4gJypib2xkIHN0aWxsIGJvbGQqJ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbiA9PT0gdGhpcy50ZXh0Lmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICB0aGlzLm1hdGNoKG5leHRUYWcsIGZhbHNlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVuc2V0VGFnKHRhZ05hbWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVuc2V0VGFnKHRhZ05hbWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB0YWcgIHN0cmluZyB0byBtYXRjaCBpbiB0ZXh0XG4gICAqIEBwYXJhbSB7dmFsdWV9IHZhbHVlICBzdHJpbmcgdG8gcmVwbGFjZSB0YWcgd2l0aCwgaWYgZm91bmQgYXQgY3VycmVudCBwb3NpdGlvblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgdGFnIHdhcyBwcm9jZXNzZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcmVwbGFjZSh0YWcsIHZhbHVlKSB7XG4gICAgaWYgKHRoaXMubWF0Y2godGFnKSkge1xuICAgICAgdGhpcy5hZGQodmFsdWUpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGggLSAxO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdGhlIHRhZyBpZiBpdCBpc24ndCBhbHJlYWR5IG9uZS5cbiAgICpcbiAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBhcnJheSBgW1JlZ0V4cCwgbnVtYmVyXWAsIHdpdGggZXhhY3RseSB0d28gdmFsdWUsIHdoZXJlOlxuICAgKiAgLSBSZWdFeHAgaXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB1c2VcbiAgICogIC0gbnVtYmVyIGlzIHRoZSBsZW50aCBvZiB0aGUgaW5wdXQgc3RyaW5nIHRvIG1hdGNoXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdGFnICBzdHJpbmcgdG8gbWF0Y2ggaW4gdGV4dFxuICAgKiBAcmV0dXJucyB7QXJyYXl9ICByZWd1bGFyIGV4cHJlc3Npb24gdG8gdXNlIGFuZCBsZW5ndGggb2YgaW5wdXQgc3RyaW5nIHRvIG1hdGNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcmVwYXJlUmVnRXhwKHRhZykge1xuICAgIGxldCBsZW5ndGg7XG4gICAgbGV0IHJlZ0V4cDtcbiAgICBpZiAodGFnIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICByZWdFeHAgPSB0YWc7XG4gICAgICBsZW5ndGggPSAxOyAvLyBBU1NVTVBUSU9OOiByZWdleHAgb25seSB0ZXN0cyBvbmUgY2hhcmFjdGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVzZSBwcmVwYXJlZCByZWdleHAgaWYgcHJlc2VudFxuICAgICAgY29uc3QgcHJlcGFyZWQgPSB0YWdQYXR0ZXJuW3RhZ107XG4gICAgICBpZiAocHJlcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZWdFeHAgPSBwcmVwYXJlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAodGFnKTtcbiAgICAgIH1cblxuICAgICAgbGVuZ3RoID0gdGFnLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gW3JlZ0V4cCwgbGVuZ3RoXTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgTGFiZWwgd2hpY2ggZXhwbG9kZXMgdGhlIGxhYmVsIHRleHQgaW50byBsaW5lcyBhbmQgYmxvY2tzIHdpdGhpbiBsaW5lc1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIExhYmVsU3BsaXR0ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCBDYW52YXMgcmVuZGVyaW5nIGNvbnRleHRcbiAgICogQHBhcmFtIHtMYWJlbH0gcGFyZW50IHJlZmVyZW5jZSB0byB0aGUgTGFiZWwgaW5zdGFuY2UgdXNpbmcgY3VycmVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKGN0eCwgcGFyZW50LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICB0aGlzLmN0eCA9IGN0eDtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgdGhpcy5ob3ZlciA9IGhvdmVyO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gZGV0ZXJtaW5lIHRleHQgd2lkdGg7IHBhc3NlZCB0byBMYWJlbEFjY3VtdWxhdG9yIGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRleHQgc3RyaW5nIHRvIGRldGVybWluZSB3aWR0aCBvZlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbW9kICBmb250IHR5cGUgdG8gdXNlIGZvciB0aGlzIHRleHRcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSB7IHdpZHRoLCB2YWx1ZXN9IHdpZHRoIGluIHBpeGVscyBhbmQgZm9udCBhdHRyaWJ1dGVzXG4gICAgICovXG4gICAgY29uc3QgdGV4dFdpZHRoID0gKHRleHQsIG1vZCkgPT4ge1xuICAgICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG5cbiAgICAgIC8vIFRPRE86IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseSB3aXRoIGNhY2hpbmdcbiAgICAgIC8vIFRoaXMgd2lsbCBzZXQgdGhlIGN0eC5mb250IGNvcnJlY3RseSwgZGVwZW5kaW5nIG9uIHNlbGVjdGVkL2hvdmVyIGFuZCBtb2QgLSBzbyB0aGF0IGN0eC5tZWFzdXJlVGV4dCgpIHdpbGwgYmUgYWNjdXJhdGUuXG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnBhcmVudC5nZXRGb3JtYXR0aW5nVmFsdWVzKGN0eCwgc2VsZWN0ZWQsIGhvdmVyLCBtb2QpO1xuXG4gICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgaWYgKHRleHQgIT09IFwiXCIpIHtcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRleHQpO1xuICAgICAgICB3aWR0aCA9IG1lYXN1cmUud2lkdGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHdpZHRoLCB2YWx1ZXM6IHZhbHVlcyB9O1xuICAgIH07XG5cbiAgICB0aGlzLmxpbmVzID0gbmV3IExhYmVsQWNjdW11bGF0b3IodGV4dFdpZHRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCBwYXNzZWQgdGV4dCBvZiBhIGxhYmVsIGludG8gbGluZXMgYW5kIGJsb2Nrcy5cbiAgICpcbiAgICogIyBOT1RFXG4gICAqXG4gICAqIFRoZSBoYW5kbGluZyBvZiBzcGFjaW5nIGlzIG9wdGlvbiBkZXBlbmRlbnQ6XG4gICAqXG4gICAqIC0gaWYgYGZvbnQubXVsdGkgOiBmYWxzZWAsIGFsbCBzcGFjZXMgYXJlIHJldGFpbmVkXG4gICAqIC0gaWYgYGZvbnQubXVsdGkgOiB0cnVlYCwgZXZlcnkgc2VxdWVuY2Ugb2Ygc3BhY2VzIGlzIGNvbXByZXNzZWQgdG8gYSBzaW5nbGUgc3BhY2VcbiAgICpcbiAgICogVGhpcyBtaWdodCBub3QgYmUgdGhlIGJlc3Qgd2F5IHRvIGRvIGl0LCBidXQgdGhpcyBpcyBhcyBpdCBoYXMgYmVlbiB3b3JraW5nIHRpbGwgbm93LlxuICAgKiBJbiBvcmRlciBub3QgdG8gYnJlYWsgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSwgZm9yIHRoZSB0aW1lIGJlaW5nIHRoaXMgYmVoYXZpb3VyIHdpbGxcbiAgICogYmUgcmV0YWluZWQgaW4gYW55IGNvZGUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgIHRleHQgdG8gc3BsaXRcbiAgICogQHJldHVybnMge0FycmF5PGxpbmU+fVxuICAgKi9cbiAgcHJvY2Vzcyh0ZXh0KSB7XG4gICAgaWYgKCFpc1ZhbGlkTGFiZWwodGV4dCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpbmVzLmZpbmFsaXplKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZm9udCA9IHRoaXMucGFyZW50LmZvbnRPcHRpb25zO1xuXG4gICAgLy8gTm9ybWFsaXplIHRoZSBlbmQtb2YtbGluZSdzIHRvIGEgc2luZ2xlIHJlcHJlc2VudGF0aW9uIC0gb3JkZXIgaW1wb3J0YW50XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxyXFxuL2csIFwiXFxuXCIpOyAvLyBEb3MgRU9MJ3NcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXHIvZywgXCJcXG5cIik7IC8vIE1hYyBFT0wnc1xuXG4gICAgLy8gTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQsIHRoZXJlIGNhbiBiZSBubyBcXHIncyBpbiB0aGUgdGV4dC5cbiAgICAvLyBUaGlzIGlzIHVzZWQgbGF0ZXIgb24gc3BsaXRTdHJpbmdJbnRvTGluZXMoKSB0byBzcGxpdCBtdWx0aWZvbnQgdGV4dHMuXG5cbiAgICBjb25zdCBubExpbmVzID0gU3RyaW5nKHRleHQpLnNwbGl0KFwiXFxuXCIpO1xuICAgIGNvbnN0IGxpbmVDb3VudCA9IG5sTGluZXMubGVuZ3RoO1xuXG4gICAgaWYgKGZvbnQubXVsdGkpIHtcbiAgICAgIC8vIE11bHRpLWZvbnQgY2FzZTogc3R5bGluZyB0YWdzIGFjdGl2ZVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lQ291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBibG9ja3MgPSB0aGlzLnNwbGl0QmxvY2tzKG5sTGluZXNbaV0sIGZvbnQubXVsdGkpO1xuICAgICAgICAvLyBQb3N0OiBTZXF1ZW5jZXMgb2YgdGFicyBhbmQgc3BhY2VzIGFyZSByZWR1Y2VkIHRvIHNpbmdsZSBzcGFjZVxuXG4gICAgICAgIGlmIChibG9ja3MgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgaWYgKGJsb2Nrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmxpbmVzLm5ld0xpbmUoXCJcIik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9udC5tYXhXZHQgPiAwKSB7XG4gICAgICAgICAgLy8gd2lkdGhDb25zdHJhaW50Lm1heGltdW0gZGVmaW5lZFxuICAgICAgICAgIC8vY29uc29sZS5sb2coJ1J1bm5pbmcgd2lkdGhDb25zdHJhaW50IG11bHRpLCBtYXg6ICcgKyB0aGlzLmZvbnRPcHRpb25zLm1heFdkdCk7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBibG9ja3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IGJsb2Nrc1tqXS5tb2Q7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gYmxvY2tzW2pdLnRleHQ7XG4gICAgICAgICAgICB0aGlzLnNwbGl0U3RyaW5nSW50b0xpbmVzKHRleHQsIG1vZCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdpZHRoQ29uc3RyYWludC5tYXhpbXVtIE5PVCBkZWZpbmVkXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBibG9ja3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IGJsb2Nrc1tqXS5tb2Q7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gYmxvY2tzW2pdLnRleHQ7XG4gICAgICAgICAgICB0aGlzLmxpbmVzLmFwcGVuZCh0ZXh0LCBtb2QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGluZXMubmV3TGluZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaW5nbGUtZm9udCBjYXNlXG4gICAgICBpZiAoZm9udC5tYXhXZHQgPiAwKSB7XG4gICAgICAgIC8vIHdpZHRoQ29uc3RyYWludC5tYXhpbXVtIGRlZmluZWRcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1J1bm5pbmcgd2lkdGhDb25zdHJhaW50IG5vcm1hbCwgbWF4OiAnICsgdGhpcy5mb250T3B0aW9ucy5tYXhXZHQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVDb3VudDsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5zcGxpdFN0cmluZ0ludG9MaW5lcyhubExpbmVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gd2lkdGhDb25zdHJhaW50Lm1heGltdW0gTk9UIGRlZmluZWRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lQ291bnQ7IGkrKykge1xuICAgICAgICAgIHRoaXMubGluZXMubmV3TGluZShubExpbmVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxpbmVzLmZpbmFsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogbm9ybWFsaXplIHRoZSBtYXJrdXAgc3lzdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbnwnbWQnfCdtYXJrZG93bid8J2h0bWwnfSBtYXJrdXBTeXN0ZW1cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGRlY29kZU1hcmt1cFN5c3RlbShtYXJrdXBTeXN0ZW0pIHtcbiAgICBsZXQgc3lzdGVtID0gXCJub25lXCI7XG4gICAgaWYgKG1hcmt1cFN5c3RlbSA9PT0gXCJtYXJrZG93blwiIHx8IG1hcmt1cFN5c3RlbSA9PT0gXCJtZFwiKSB7XG4gICAgICBzeXN0ZW0gPSBcIm1hcmtkb3duXCI7XG4gICAgfSBlbHNlIGlmIChtYXJrdXBTeXN0ZW0gPT09IHRydWUgfHwgbWFya3VwU3lzdGVtID09PSBcImh0bWxcIikge1xuICAgICAgc3lzdGVtID0gXCJodG1sXCI7XG4gICAgfVxuICAgIHJldHVybiBzeXN0ZW07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgc3BsaXRIdG1sQmxvY2tzKHRleHQpIHtcbiAgICBjb25zdCBzID0gbmV3IE1hcmt1cEFjY3VtdWxhdG9yKHRleHQpO1xuXG4gICAgY29uc3QgcGFyc2VFbnRpdGllcyA9IChjaCkgPT4ge1xuICAgICAgaWYgKC8mLy50ZXN0KGNoKSkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPVxuICAgICAgICAgIHMucmVwbGFjZShzLnRleHQsIFwiJmx0O1wiLCBcIjxcIikgfHwgcy5yZXBsYWNlKHMudGV4dCwgXCImYW1wO1wiLCBcIiZcIik7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBzLmFkZChcIiZcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB3aGlsZSAocy5wb3NpdGlvbiA8IHMudGV4dC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNoID0gcy50ZXh0LmNoYXJBdChzLnBvc2l0aW9uKTtcblxuICAgICAgY29uc3QgcGFyc2VkID1cbiAgICAgICAgcy5wYXJzZVdTKGNoKSB8fFxuICAgICAgICAoLzwvLnRlc3QoY2gpICYmXG4gICAgICAgICAgKHMucGFyc2VTdGFydFRhZyhcImJvbGRcIiwgXCI8Yj5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VTdGFydFRhZyhcIml0YWxcIiwgXCI8aT5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VTdGFydFRhZyhcIm1vbm9cIiwgXCI8Y29kZT5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VFbmRUYWcoXCJib2xkXCIsIFwiPC9iPlwiKSB8fFxuICAgICAgICAgICAgcy5wYXJzZUVuZFRhZyhcIml0YWxcIiwgXCI8L2k+XCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlRW5kVGFnKFwibW9ub1wiLCBcIjwvY29kZT5cIikpKSB8fFxuICAgICAgICBwYXJzZUVudGl0aWVzKGNoKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgcy5hZGQoY2gpO1xuICAgICAgfVxuICAgICAgcy5wb3NpdGlvbisrO1xuICAgIH1cbiAgICBzLmVtaXRCbG9jaygpO1xuICAgIHJldHVybiBzLmJsb2NrcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBzcGxpdE1hcmtkb3duQmxvY2tzKHRleHQpIHtcbiAgICBjb25zdCBzID0gbmV3IE1hcmt1cEFjY3VtdWxhdG9yKHRleHQpO1xuICAgIGxldCBiZWdpbmFibGUgPSB0cnVlO1xuXG4gICAgY29uc3QgcGFyc2VPdmVycmlkZSA9IChjaCkgPT4ge1xuICAgICAgaWYgKC9cXFxcLy50ZXN0KGNoKSkge1xuICAgICAgICBpZiAocy5wb3NpdGlvbiA8IHRoaXMudGV4dC5sZW5ndGggKyAxKSB7XG4gICAgICAgICAgcy5wb3NpdGlvbisrO1xuICAgICAgICAgIGNoID0gdGhpcy50ZXh0LmNoYXJBdChzLnBvc2l0aW9uKTtcbiAgICAgICAgICBpZiAoLyBcXHQvLnRlc3QoY2gpKSB7XG4gICAgICAgICAgICBzLnNwYWNpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzLmFkZChjaCk7XG4gICAgICAgICAgICBiZWdpbmFibGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB3aGlsZSAocy5wb3NpdGlvbiA8IHMudGV4dC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNoID0gcy50ZXh0LmNoYXJBdChzLnBvc2l0aW9uKTtcblxuICAgICAgY29uc3QgcGFyc2VkID1cbiAgICAgICAgcy5wYXJzZVdTKGNoKSB8fFxuICAgICAgICBwYXJzZU92ZXJyaWRlKGNoKSB8fFxuICAgICAgICAoKGJlZ2luYWJsZSB8fCBzLnNwYWNpbmcpICYmXG4gICAgICAgICAgKHMucGFyc2VTdGFydFRhZyhcImJvbGRcIiwgXCIqXCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlU3RhcnRUYWcoXCJpdGFsXCIsIFwiX1wiKSB8fFxuICAgICAgICAgICAgcy5wYXJzZVN0YXJ0VGFnKFwibW9ub1wiLCBcImBcIikpKSB8fFxuICAgICAgICBzLnBhcnNlRW5kVGFnKFwiYm9sZFwiLCBcIipcIiwgXCJhZnRlckJvbGRcIikgfHxcbiAgICAgICAgcy5wYXJzZUVuZFRhZyhcIml0YWxcIiwgXCJfXCIsIFwiYWZ0ZXJJdGFsXCIpIHx8XG4gICAgICAgIHMucGFyc2VFbmRUYWcoXCJtb25vXCIsIFwiYFwiLCBcImFmdGVyTW9ub1wiKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgcy5hZGQoY2gpO1xuICAgICAgICBiZWdpbmFibGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHMucG9zaXRpb24rKztcbiAgICB9XG4gICAgcy5lbWl0QmxvY2soKTtcbiAgICByZXR1cm4gcy5ibG9ja3M7XG4gIH1cblxuICAvKipcbiAgICogRXhwbG9kZXMgYSBwaWVjZSBvZiB0ZXh0IGludG8gc2luZ2xlLWZvbnQgYmxvY2tzIHVzaW5nIGEgZ2l2ZW4gbWFya3VwXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbnwnbWQnfCdtYXJrZG93bid8J2h0bWwnfSBtYXJrdXBTeXN0ZW1cbiAgICogQHJldHVybnMge0FycmF5Ljx7dGV4dDogc3RyaW5nLCBtb2Q6IHN0cmluZ30+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3BsaXRCbG9ja3ModGV4dCwgbWFya3VwU3lzdGVtKSB7XG4gICAgY29uc3Qgc3lzdGVtID0gdGhpcy5kZWNvZGVNYXJrdXBTeXN0ZW0obWFya3VwU3lzdGVtKTtcbiAgICBpZiAoc3lzdGVtID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgbW9kOiBcIm5vcm1hbFwiLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9IGVsc2UgaWYgKHN5c3RlbSA9PT0gXCJtYXJrZG93blwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcGxpdE1hcmtkb3duQmxvY2tzKHRleHQpO1xuICAgIH0gZWxzZSBpZiAoc3lzdGVtID09PSBcImh0bWxcIikge1xuICAgICAgcmV0dXJuIHRoaXMuc3BsaXRIdG1sQmxvY2tzKHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0ZXh0IGxlbmd0aCBvdmVyIHRoZSBjdXJyZW50IG1heCB3aXRoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvdmVyTWF4V2lkdGgodGV4dCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jdHgubWVhc3VyZVRleHQodGV4dCkud2lkdGg7XG4gICAgcmV0dXJuIHRoaXMubGluZXMuY3VyV2lkdGgoKSArIHdpZHRoID4gdGhpcy5wYXJlbnQuZm9udE9wdGlvbnMubWF4V2R0O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgbG9uZ2VzdCBwYXJ0IG9mIHRoZSBzZW50ZW5jZSB3aGljaCBzdGlsbCBmaXRzIGluIHRoZVxuICAgKiBjdXJyZW50IG1heCB3aWR0aC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgIEFycmF5IG9mIHN0cmluZ3Mgc2lnbmlmeWluZyBhIHRleHQgbGluZXNcbiAgICogQHJldHVybnMge251bWJlcn0gICAgICBpbmRleCBvZiBmaXJzdCBpdGVtIGluIHN0cmluZyBtYWtpbmcgc3RyaW5nIGdvIG92ZXIgbWF4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRMb25nZXN0Rml0KHdvcmRzKSB7XG4gICAgbGV0IHRleHQgPSBcIlwiO1xuICAgIGxldCB3ID0gMDtcblxuICAgIHdoaWxlICh3IDwgd29yZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcmUgPSB0ZXh0ID09PSBcIlwiID8gXCJcIiA6IFwiIFwiO1xuICAgICAgY29uc3QgbmV3VGV4dCA9IHRleHQgKyBwcmUgKyB3b3Jkc1t3XTtcblxuICAgICAgaWYgKHRoaXMub3Zlck1heFdpZHRoKG5ld1RleHQpKSBicmVhaztcbiAgICAgIHRleHQgPSBuZXdUZXh0O1xuICAgICAgdysrO1xuICAgIH1cblxuICAgIHJldHVybiB3O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgbG9uZ2VzdCBwYXJ0IG9mIHRoZSBzdHJpbmcgd2hpY2ggc3RpbGwgZml0cyBpbiB0aGVcbiAgICogY3VycmVudCBtYXggd2lkdGguXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIEFycmF5IG9mIHN0cmluZ3Mgc2lnbmlmeWluZyBhIHRleHQgbGluZXNcbiAgICogQHJldHVybnMge251bWJlcn0gaW5kZXggb2YgZmlyc3QgaXRlbSBpbiBzdHJpbmcgbWFraW5nIHN0cmluZyBnbyBvdmVyIG1heFxuICAgKi9cbiAgZ2V0TG9uZ2VzdEZpdFdvcmQod29yZHMpIHtcbiAgICBsZXQgdyA9IDA7XG5cbiAgICB3aGlsZSAodyA8IHdvcmRzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMub3Zlck1heFdpZHRoKHdvcmRzLnNsaWNlKDAsIHcpKSkgYnJlYWs7XG4gICAgICB3Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHc7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgdGhlIHBhc3NlZCB0ZXh0IGludG8gbGluZXMsIGFjY29yZGluZyB0byB3aWR0aCBjb25zdHJhaW50IChpZiBhbnkpLlxuICAgKlxuICAgKiBUaGUgbWV0aG9kIGFzc3VtZXMgdGhhdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgc2luZ2xlIGxpbmUsIGkuZS4gd2l0aG91dCBsaW5lcyBicmVhay5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgcmV0YWlucyBzcGFjZXMsIGlmIHN0aWxsIHByZXNlbnQgKGNhc2UgYGZvbnQubXVsdGk6IGZhbHNlYCkuXG4gICAqIEEgc3BhY2Ugd2hpY2ggZmFsbHMgb24gYW4gaW50ZXJuYWwgbGluZSBicmVhaywgd2lsbCBiZSByZXBsYWNlZCBieSBhIG5ld2xpbmUuXG4gICAqIFRoZXJlIGlzIG5vIHNwZWNpYWwgaGFuZGxpbmcgb2YgdGFiczsgdGhlc2UgZ28gYWxvbmcgd2l0aCB0aGUgZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gW21vZD0nbm9ybWFsJ11cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXBwZW5kTGFzdD1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNwbGl0U3RyaW5nSW50b0xpbmVzKHN0ciwgbW9kID0gXCJub3JtYWxcIiwgYXBwZW5kTGFzdCA9IGZhbHNlKSB7XG4gICAgLy8gU2V0IHRoZSBjYW52YXMgY29udGV4dCBmb250LCBiYXNlZCB1cG9uIHRoZSBjdXJyZW50IHNlbGVjdGVkL2hvdmVyIHN0YXRlXG4gICAgLy8gYW5kIHRoZSBwcm92aWRlZCBtb2QsIHNvIHRoZSB0ZXh0IG1lYXN1cmVtZW50IHBlcmZvcm1lZCBieSBnZXRMb25nZXN0Rml0XG4gICAgLy8gd2lsbCBiZSBhY2N1cmF0ZSAtIGFuZCBub3QganVzdCB1c2UgdGhlIGZvbnQgb2Ygd2hvZXZlciBsYXN0IHVzZWQgdGhlIGNhbnZhcy5cbiAgICB0aGlzLnBhcmVudC5nZXRGb3JtYXR0aW5nVmFsdWVzKHRoaXMuY3R4LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyLCBtb2QpO1xuXG4gICAgLy8gU3RpbGwtcHJlc2VudCBzcGFjZXMgYXJlIHJlbGV2YW50LCByZXRhaW4gdGhlbVxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9eKCArKS9nLCBcIiQxXFxyXCIpO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8oW15cXHJdW14gXSopKCArKS9nLCBcIiQxXFxyJDJcXHJcIik7XG4gICAgbGV0IHdvcmRzID0gc3RyLnNwbGl0KFwiXFxyXCIpO1xuXG4gICAgd2hpbGUgKHdvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCB3ID0gdGhpcy5nZXRMb25nZXN0Rml0KHdvcmRzKTtcblxuICAgICAgaWYgKHcgPT09IDApIHtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiB0aGUgZmlyc3Qgd29yZCBpcyBhbHJlYWR5IGxhcmdlciB0aGFuIHRoZSBtYXggd2lkdGguXG4gICAgICAgIGNvbnN0IHdvcmQgPSB3b3Jkc1swXTtcblxuICAgICAgICAvLyBCcmVhayB0aGUgd29yZCB0byB0aGUgbGFyZ2VzdCBwYXJ0IHRoYXQgZml0cyB0aGUgbGluZVxuICAgICAgICBjb25zdCB4ID0gdGhpcy5nZXRMb25nZXN0Rml0V29yZCh3b3JkKTtcbiAgICAgICAgdGhpcy5saW5lcy5uZXdMaW5lKHdvcmQuc2xpY2UoMCwgeCksIG1vZCk7XG5cbiAgICAgICAgLy8gQWRqdXN0IHRoZSB3b3JkLCBzbyB0aGF0IHRoZSByZXN0IHdpbGwgYmUgZG9uZSBuZXh0IGl0ZXJhdGlvblxuICAgICAgICB3b3Jkc1swXSA9IHdvcmQuc2xpY2UoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBza2lwIGFueSBzcGFjZSB0aGF0IGlzIHJlcGxhY2VkIGJ5IGEgbmV3bGluZVxuICAgICAgICBsZXQgbmV3VyA9IHc7XG4gICAgICAgIGlmICh3b3Jkc1t3IC0gMV0gPT09IFwiIFwiKSB7XG4gICAgICAgICAgdy0tO1xuICAgICAgICB9IGVsc2UgaWYgKHdvcmRzW25ld1ddID09PSBcIiBcIikge1xuICAgICAgICAgIG5ld1crKztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRleHQgPSB3b3Jkcy5zbGljZSgwLCB3KS5qb2luKFwiXCIpO1xuXG4gICAgICAgIGlmICh3ID09IHdvcmRzLmxlbmd0aCAmJiBhcHBlbmRMYXN0KSB7XG4gICAgICAgICAgdGhpcy5saW5lcy5hcHBlbmQodGV4dCwgbW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxpbmVzLm5ld0xpbmUodGV4dCwgbW9kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkanVzdCB0aGUgd29yZCwgc28gdGhhdCB0aGUgcmVzdCB3aWxsIGJlIGRvbmUgbmV4dCBpdGVyYXRpb25cbiAgICAgICAgd29yZHMgPSB3b3Jkcy5zbGljZShuZXdXKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWxTcGxpdHRlcjtcbiIsICJpbXBvcnQgeyBkZWVwRXh0ZW5kLCBmb3JFYWNoLCBvdmVycmlkZU9wYWNpdHksIHRvcE1vc3QgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBjaG9vc2lmeSwgaXNWYWxpZExhYmVsIH0gZnJvbSBcIi4vQ29tcG9uZW50VXRpbFwiO1xuaW1wb3J0IExhYmVsU3BsaXR0ZXIgZnJvbSBcIi4vTGFiZWxTcGxpdHRlclwiO1xuXG4vKipcbiAqIExpc3Qgb2Ygc3BlY2lhbCBzdHlsZXMgZm9yIG11bHRpLWZvbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgbXVsdGlGb250U3R5bGUgPSBbXCJib2xkXCIsIFwiaXRhbFwiLCBcImJvbGRpdGFsXCIsIFwibW9ub1wiXTtcblxuLyoqXG4gKiBBIExhYmVsIHRvIGJlIHVzZWQgZm9yIE5vZGVzIG9yIEVkZ2VzLlxuICovXG5jbGFzcyBMYWJlbCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlZGdlbGFiZWw9ZmFsc2VdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBvcHRpb25zLCBlZGdlbGFiZWwgPSBmYWxzZSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5wb2ludFRvU2VsZiA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZVNpemUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mb250T3B0aW9ucyA9IHt9OyAvLyBpbnN0YW5jZSB2YXJpYWJsZSBjb250YWluaW5nIHRoZSAqaW5zdGFuY2UtbG9jYWwqIGZvbnQgb3B0aW9uc1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLnNpemUgPSB7IHRvcDogMCwgbGVmdDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCwgeUxpbmU6IDAgfTtcbiAgICB0aGlzLmlzRWRnZUxhYmVsID0gZWRnZWxhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIHRoZSBvcHRpb25zIG9mIHRoZSBwYXJlbnQgTm9kZS1pbnN0YW5jZVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5lbGVtZW50T3B0aW9ucyA9IG9wdGlvbnM7IC8vIFJlZmVyZW5jZSB0byB0aGUgb3B0aW9ucyBvZiB0aGUgcGFyZW50IE5vZGUtaW5zdGFuY2VcblxuICAgIHRoaXMuaW5pdEZvbnRPcHRpb25zKG9wdGlvbnMuZm9udCk7XG5cbiAgICBpZiAoaXNWYWxpZExhYmVsKG9wdGlvbnMubGFiZWwpKSB7XG4gICAgICB0aGlzLmxhYmVsRGlydHkgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWQgbGFiZWwhIENoYW5nZSB0aGUgb3B0aW9uIHZhbHVlIHRvIHByZXZlbnQgYmFkIHN0dWZmIGhhcHBlbmluZ1xuICAgICAgb3B0aW9ucy5sYWJlbCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5mb250ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5mb250ICE9PSBudWxsKSB7XG4gICAgICAvLyBmb250IG9wdGlvbnMgY2FuIGJlIGRlbGV0ZWQgYXQgdmFyaW91cyBsZXZlbHNcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mb250ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMuYmFzZVNpemUgPSB0aGlzLmZvbnRPcHRpb25zLnNpemU7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmZvbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IG9wdGlvbnMuZm9udC5zaXplO1xuXG4gICAgICAgIGlmIChzaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmJhc2VTaXplID0gc2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0IHRoZSBmb250IE9wdGlvbnMgc3RydWN0dXJlLlxuICAgKlxuICAgKiBNZW1iZXIgZm9udE9wdGlvbnMgc2VydmVzIGFzIGFuIGFjY3VtdWxhdG9yIGZvciB0aGUgY3VycmVudCBmb250IG9wdGlvbnMuXG4gICAqIEFzIHN1Y2gsIGl0IG5lZWRzIHRvIGJlIGNvbXBsZXRlbHkgc2VwYXJhdGVkIGZyb20gdGhlIG5vZGUgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld0ZvbnRPcHRpb25zIHRoZSBuZXcgZm9udCBvcHRpb25zIHRvIHByb2Nlc3NcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXRGb250T3B0aW9ucyhuZXdGb250T3B0aW9ucykge1xuICAgIC8vIFByZXBhcmUgdGhlIG11bHRpLWZvbnQgb3B0aW9uIG9iamVjdHMuXG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBmaWxsZWQgaW4gcHJvcGFnYXRlRm9udHMoKSwgaWYgcmVxdWlyZWRcbiAgICBmb3JFYWNoKG11bHRpRm9udFN0eWxlLCAoc3R5bGUpID0+IHtcbiAgICAgIHRoaXMuZm9udE9wdGlvbnNbc3R5bGVdID0ge307XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgc2hvcnRoYW5kIG9wdGlvbiwgaWYgcHJlc2VudFxuICAgIGlmIChMYWJlbC5wYXJzZUZvbnRTdHJpbmcodGhpcy5mb250T3B0aW9ucywgbmV3Rm9udE9wdGlvbnMpKSB7XG4gICAgICB0aGlzLmZvbnRPcHRpb25zLnZhZGp1c3QgPSAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENvcHkgb3ZlciB0aGUgbm9uLW11bHRpZm9udCBvcHRpb25zLCBpZiBzcGVjaWZpZWRcbiAgICBmb3JFYWNoKG5ld0ZvbnRPcHRpb25zLCAocHJvcCwgbikgPT4ge1xuICAgICAgaWYgKHByb3AgIT09IHVuZGVmaW5lZCAmJiBwcm9wICE9PSBudWxsICYmIHR5cGVvZiBwcm9wICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRoaXMuZm9udE9wdGlvbnNbbl0gPSBwcm9wO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGluLXZhcmlhYmxlIGlzIGEgc3RyaW5nLCBwYXJzZSBpdCBhcyBhIGZvbnQgc3BlY2lmaWVyLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgZm9sbG93aW5nIGlzIG5vdCBkb25lIGhlcmUgYW5kIGhhdmUgdG8gYmUgZG9uZSBhZnRlciB0aGUgY2FsbDpcbiAgICogLSBOb3QgYWxsIGZvbnQgb3B0aW9ucyBhcmUgc2V0ICh2YWRqdXN0LCBtb2QpXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvdXRPcHRpb25zICBvdXQtcGFyYW1ldGVyLCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBhcnNlIHJlc3VsdHMgKGlmIGFueSlcbiAgICogQHBhcmFtIHtvYmplY3R9IGluT3B0aW9ucyAgZm9udCBvcHRpb25zIHRvIHBhcnNlXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGZvbnQgcGFyc2VkIGFzIHN0cmluZywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZUZvbnRTdHJpbmcob3V0T3B0aW9ucywgaW5PcHRpb25zKSB7XG4gICAgaWYgKCFpbk9wdGlvbnMgfHwgdHlwZW9mIGluT3B0aW9ucyAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgbmV3T3B0aW9uc0FycmF5ID0gaW5PcHRpb25zLnNwbGl0KFwiIFwiKTtcblxuICAgIG91dE9wdGlvbnMuc2l6ZSA9ICtuZXdPcHRpb25zQXJyYXlbMF0ucmVwbGFjZShcInB4XCIsIFwiXCIpO1xuICAgIG91dE9wdGlvbnMuZmFjZSA9IG5ld09wdGlvbnNBcnJheVsxXTtcbiAgICBvdXRPcHRpb25zLmNvbG9yID0gbmV3T3B0aW9uc0FycmF5WzJdO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGNvbnN0cmFpbnRzIGJhc2VkIG9uICduZWFyZXN0JyB2YWx1ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwaWxlIGFycmF5IG9mIG9wdGlvbiBvYmplY3RzIHRvIGNvbnNpZGVyXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IHRoZSBhY3R1YWwgY29uc3RyYWludCB2YWx1ZXMgdG8gdXNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJhaW4ocGlsZSkge1xuICAgIC8vIE5PVEU6IGNvbnN0cmFpbldpZHRoIGFuZCAgY29uc3RyYWluSGVpZ2h0IG5ldmVyIHNldCFcbiAgICAvLyBOT1RFOiBmb3IgZWRnZSBsYWJlbHMsIG9ubHkgJ21heFdkdCcgc2V0XG4gICAgLy8gTm9kZSBsYWJlbHMgY2FuIHNldCBhbGwgdGhlIGZpZWxkc1xuICAgIGNvbnN0IGZvbnRPcHRpb25zID0ge1xuICAgICAgY29uc3RyYWluV2lkdGg6IGZhbHNlLFxuICAgICAgbWF4V2R0OiAtMSxcbiAgICAgIG1pbldkdDogLTEsXG4gICAgICBjb25zdHJhaW5IZWlnaHQ6IGZhbHNlLFxuICAgICAgbWluSGd0OiAtMSxcbiAgICAgIHZhbGlnbjogXCJtaWRkbGVcIixcbiAgICB9O1xuXG4gICAgY29uc3Qgd2lkdGhDb25zdHJhaW50ID0gdG9wTW9zdChwaWxlLCBcIndpZHRoQ29uc3RyYWludFwiKTtcbiAgICBpZiAodHlwZW9mIHdpZHRoQ29uc3RyYWludCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZm9udE9wdGlvbnMubWF4V2R0ID0gTnVtYmVyKHdpZHRoQ29uc3RyYWludCk7XG4gICAgICBmb250T3B0aW9ucy5taW5XZHQgPSBOdW1iZXIod2lkdGhDb25zdHJhaW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aWR0aENvbnN0cmFpbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IHdpZHRoQ29uc3RyYWludE1heGltdW0gPSB0b3BNb3N0KHBpbGUsIFtcbiAgICAgICAgXCJ3aWR0aENvbnN0cmFpbnRcIixcbiAgICAgICAgXCJtYXhpbXVtXCIsXG4gICAgICBdKTtcbiAgICAgIGlmICh0eXBlb2Ygd2lkdGhDb25zdHJhaW50TWF4aW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBmb250T3B0aW9ucy5tYXhXZHQgPSBOdW1iZXIod2lkdGhDb25zdHJhaW50TWF4aW11bSk7XG4gICAgICB9XG4gICAgICBjb25zdCB3aWR0aENvbnN0cmFpbnRNaW5pbXVtID0gdG9wTW9zdChwaWxlLCBbXG4gICAgICAgIFwid2lkdGhDb25zdHJhaW50XCIsXG4gICAgICAgIFwibWluaW11bVwiLFxuICAgICAgXSk7XG4gICAgICBpZiAodHlwZW9mIHdpZHRoQ29uc3RyYWludE1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZm9udE9wdGlvbnMubWluV2R0ID0gTnVtYmVyKHdpZHRoQ29uc3RyYWludE1pbmltdW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhlaWdodENvbnN0cmFpbnQgPSB0b3BNb3N0KHBpbGUsIFwiaGVpZ2h0Q29uc3RyYWludFwiKTtcbiAgICBpZiAodHlwZW9mIGhlaWdodENvbnN0cmFpbnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGZvbnRPcHRpb25zLm1pbkhndCA9IE51bWJlcihoZWlnaHRDb25zdHJhaW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBoZWlnaHRDb25zdHJhaW50ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjb25zdCBoZWlnaHRDb25zdHJhaW50TWluaW11bSA9IHRvcE1vc3QocGlsZSwgW1xuICAgICAgICBcImhlaWdodENvbnN0cmFpbnRcIixcbiAgICAgICAgXCJtaW5pbXVtXCIsXG4gICAgICBdKTtcbiAgICAgIGlmICh0eXBlb2YgaGVpZ2h0Q29uc3RyYWludE1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZm9udE9wdGlvbnMubWluSGd0ID0gTnVtYmVyKGhlaWdodENvbnN0cmFpbnRNaW5pbXVtKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhlaWdodENvbnN0cmFpbnRWYWxpZ24gPSB0b3BNb3N0KHBpbGUsIFtcbiAgICAgICAgXCJoZWlnaHRDb25zdHJhaW50XCIsXG4gICAgICAgIFwidmFsaWduXCIsXG4gICAgICBdKTtcbiAgICAgIGlmICh0eXBlb2YgaGVpZ2h0Q29uc3RyYWludFZhbGlnbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaGVpZ2h0Q29uc3RyYWludFZhbGlnbiA9PT0gXCJ0b3BcIiB8fFxuICAgICAgICAgIGhlaWdodENvbnN0cmFpbnRWYWxpZ24gPT09IFwiYm90dG9tXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9udE9wdGlvbnMudmFsaWduID0gaGVpZ2h0Q29uc3RyYWludFZhbGlnbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb250T3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgb3B0aW9ucyBhbmQgdXBkYXRlIGludGVybmFsIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICBvcHRpb25zIHRvIHNldFxuICAgKiBAcGFyYW0ge0FycmF5fSAgcGlsZSAgICAgYXJyYXkgb2Ygb3B0aW9uIG9iamVjdHMgdG8gY29uc2lkZXIgZm9yIG9wdGlvbiAnY2hvc2VuJ1xuICAgKi9cbiAgdXBkYXRlKG9wdGlvbnMsIHBpbGUpIHtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucywgdHJ1ZSk7XG4gICAgdGhpcy5wcm9wYWdhdGVGb250cyhwaWxlKTtcbiAgICBkZWVwRXh0ZW5kKHRoaXMuZm9udE9wdGlvbnMsIHRoaXMuY29uc3RyYWluKHBpbGUpKTtcbiAgICB0aGlzLmZvbnRPcHRpb25zLmNob29zZXIgPSBjaG9vc2lmeShcImxhYmVsXCIsIHBpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gbWFyZ2lucyBhcmUgc2V0IGluIGFuIGVsZW1lbnQsIGFkanVzdCBzaXplcyBpcyBjYWxsZWQgdG8gcmVtb3ZlIHRoZW1cbiAgICogZnJvbSB0aGUgd2lkdGgvaGVpZ2h0IGNvbnN0cmFpbnRzLiBUaGlzIG11c3QgYmUgZG9uZSBwcmlvciB0byBsYWJlbCBzaXppbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7e3RvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyfX0gbWFyZ2luc1xuICAgKi9cbiAgYWRqdXN0U2l6ZXMobWFyZ2lucykge1xuICAgIGNvbnN0IHdpZHRoQmlhcyA9IG1hcmdpbnMgPyBtYXJnaW5zLnJpZ2h0ICsgbWFyZ2lucy5sZWZ0IDogMDtcbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy5jb25zdHJhaW5XaWR0aCkge1xuICAgICAgdGhpcy5mb250T3B0aW9ucy5tYXhXZHQgLT0gd2lkdGhCaWFzO1xuICAgICAgdGhpcy5mb250T3B0aW9ucy5taW5XZHQgLT0gd2lkdGhCaWFzO1xuICAgIH1cbiAgICBjb25zdCBoZWlnaHRCaWFzID0gbWFyZ2lucyA/IG1hcmdpbnMudG9wICsgbWFyZ2lucy5ib3R0b20gOiAwO1xuICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLmNvbnN0cmFpbkhlaWdodCkge1xuICAgICAgdGhpcy5mb250T3B0aW9ucy5taW5IZ3QgLT0gaGVpZ2h0QmlhcztcbiAgICB9XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gTWV0aG9kcyBmb3IgaGFuZGxpbmcgb3B0aW9ucyBwaWxlc1xuICAvLyBFdmVudHVhbGx5LCB0aGVzZSB3aWxsIGJlIG1vdmVkIHRvIGEgc2VwYXJhdGUgY2xhc3NcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZm9udCBtZW1iZXJzIG9mIHRoZSBwYXNzZWQgbGlzdCBvZiBvcHRpb24gb2JqZWN0cyB0byB0aGUgcGlsZS5cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBkc3RQaWxlICBwaWxlIG9mIG9wdGlvbiBvYmplY3RzIGFkZCB0b1xuICAgKiBAcGFyYW0ge1BpbGV9IHNyY1BpbGUgIHBpbGUgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdGFrZSBmb250IG9wdGlvbnMgZnJvbVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkRm9udE9wdGlvbnNUb1BpbGUoZHN0UGlsZSwgc3JjUGlsZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjUGlsZS5sZW5ndGg7ICsraSkge1xuICAgICAgdGhpcy5hZGRGb250VG9QaWxlKGRzdFBpbGUsIHNyY1BpbGVbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZ2l2ZW4gZm9udCBvcHRpb24gb2JqZWN0IHRvIHRoZSBsaXN0IG9mIG9iamVjdHMgKHRoZSAncGlsZScpIHRvIGNvbnNpZGVyIGZvciBkZXRlcm1pbmluZ1xuICAgKiBtdWx0aS1mb250IG9wdGlvbiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gcGlsZSAgcGlsZSBvZiBvcHRpb24gb2JqZWN0cyB0byB1c2VcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgIGluc3RhbmNlIHRvIGFkZCB0byBwaWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhZGRGb250VG9QaWxlKHBpbGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgaWYgKG9wdGlvbnMuZm9udCA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuZm9udCA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgaXRlbSA9IG9wdGlvbnMuZm9udDtcbiAgICBwaWxlLnB1c2goaXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdCBhbGwgb3duLXByb3BlcnR5IHZhbHVlcyBmcm9tIHRoZSBmb250IHBpbGUgdGhhdCBhcmVuJ3QgbXVsdGktZm9udCBvcHRpb24gb2JqZWN0c3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gcGlsZSAgcGlsZSBvZiBvcHRpb24gb2JqZWN0cyB0byB1c2VcbiAgICogQHJldHVybnMge29iamVjdH0gb2JqZWN0IHdpdGggYWxsIGN1cnJlbnQgb3duIGJhc2ljIGZvbnQgcHJvcGVydGllc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0QmFzaWNPcHRpb25zKHBpbGUpIHtcbiAgICBjb25zdCByZXQgPSB7fTtcblxuICAgIC8vIFNjYW5zIHRoZSB3aG9sZSBwaWxlIHRvIGdldCBhbGwgb3B0aW9ucyBwcmVzZW50XG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBwaWxlLmxlbmd0aDsgKytuKSB7XG4gICAgICBsZXQgZm9udE9wdGlvbnMgPSBwaWxlW25dO1xuXG4gICAgICAvLyBDb252ZXJ0IHNob3J0aGFuZCBpZiBuZWNlc3NhcnlcbiAgICAgIGNvbnN0IHRtcFNob3J0aGFuZCA9IHt9O1xuICAgICAgaWYgKExhYmVsLnBhcnNlRm9udFN0cmluZyh0bXBTaG9ydGhhbmQsIGZvbnRPcHRpb25zKSkge1xuICAgICAgICBmb250T3B0aW9ucyA9IHRtcFNob3J0aGFuZDtcbiAgICAgIH1cblxuICAgICAgZm9yRWFjaChmb250T3B0aW9ucywgKG9wdCwgbmFtZSkgPT4ge1xuICAgICAgICBpZiAob3B0ID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gbXVsdGktZm9udCBvcHRpb24gbmVlZCBub3QgYmUgcHJlc2VudFxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJldCwgbmFtZSkpIHJldHVybjsgLy8gS2VlcCBmaXJzdCB2YWx1ZSB3ZSBlbmNvdW50ZXJcblxuICAgICAgICBpZiAobXVsdGlGb250U3R5bGUuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAvLyBTa2lwIG11bHRpLWZvbnQgcHJvcGVydGllcyBidXQgd2UgZG8gbmVlZCB0aGUgc3RydWN0dXJlXG4gICAgICAgICAgcmV0W25hbWVdID0ge307XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0W25hbWVdID0gb3B0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdmFsdWUgZm9yIGdpdmVuIG9wdGlvbiBmb3IgdGhlIGdpdmVuIG11bHRpLWZvbnQuXG4gICAqXG4gICAqIEFsbCBhdmFpbGFibGUgb3B0aW9uIG9iamVjdHMgYXJlIHRyYXdsZWQgaW4gdGhlIHNldCBvcmRlciB0byBjb25zdHJ1Y3QgdGhlIG9wdGlvbiB2YWx1ZXMuXG4gICAqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiAjIyBUcmF2ZXJzYWwgb2YgcGlsZSBmb3IgbXVsdGktZm9udHNcbiAgICpcbiAgICogVGhlIGRldGVybWluYXRpb24gb2YgbXVsdGktZm9udCBvcHRpb24gdmFsdWVzIGlzIGEgc3BlY2lhbCBjYXNlLCBiZWNhdXNlIGFueSB2YWx1ZXMgbm90XG4gICAqIHByZXNlbnQgaW4gdGhlIG11bHRpLWZvbnQgb3B0aW9ucyBzaG91bGQgYnkgZGVmaW5pdGlvbiBiZSB0YWtlbiBmcm9tIHRoZSBtYWluIGZvbnQgb3B0aW9ucyxcbiAgICogaS5lLiBmcm9tIHRoZSBjdXJyZW50ICdwYXJlbnQnIG9iamVjdCBvZiB0aGUgbXVsdGktZm9udCBvcHRpb24uXG4gICAqXG4gICAqICMjIyBTZWFyY2ggb3JkZXIgZm9yIG11bHRpLWZvbnRzXG4gICAqXG4gICAqICdib2xkJyB1c2VkIGFzIGV4YW1wbGU6XG4gICAqXG4gICAqICAgLSBzZWFyY2ggaW4gb3B0aW9uIGdyb3VwICdib2xkJyBpbiBsb2NhbCBwcm9wZXJ0aWVzXG4gICAqICAgLSBzZWFyY2ggaW4gbWFpbiBmb250IG9wdGlvbiBncm91cCBpbiBsb2NhbCBwcm9wZXJ0aWVzXG4gICAqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKlxuICAgKiBAcGFyYW0ge1BpbGV9IHBpbGUgIHBpbGUgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdXNlXG4gICAqIEBwYXJhbSB7TXVsdGlGb250U3R5bGV9IG11bHRpTmFtZSBzdWIgcGF0aCBmb3IgdGhlIG11bHRpLWZvbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbiAgdGhlIG9wdGlvbiB0byBzZWFyY2ggZm9yLCBmb3IgdGhlIGdpdmVuIG11bHRpLWZvbnRcbiAgICogQHJldHVybnMge3N0cmluZ3xudW1iZXJ9IHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0Rm9udE9wdGlvbihwaWxlLCBtdWx0aU5hbWUsIG9wdGlvbikge1xuICAgIGxldCBtdWx0aUZvbnQ7XG5cbiAgICAvLyBTZWFyY2ggbXVsdGkgZm9udCBpbiBsb2NhbCBwcm9wZXJ0aWVzXG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBwaWxlLmxlbmd0aDsgKytuKSB7XG4gICAgICBjb25zdCBmb250T3B0aW9ucyA9IHBpbGVbbl07XG5cbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9udE9wdGlvbnMsIG11bHRpTmFtZSkpIHtcbiAgICAgICAgbXVsdGlGb250ID0gZm9udE9wdGlvbnNbbXVsdGlOYW1lXTtcbiAgICAgICAgaWYgKG11bHRpRm9udCA9PT0gdW5kZWZpbmVkIHx8IG11bHRpRm9udCA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgLy8gQ29udmVydCBzaG9ydGhhbmQgaWYgbmVjZXNzYXJ5XG4gICAgICAgIC8vIFRPRE86IGluZWZmaWNpZW50IHRvIGRvIHRoaXMgY29udmVyc2lvbiBldmVyeSB0aW1lOyBmaW5kIGEgYmV0dGVyIHdheS5cbiAgICAgICAgY29uc3QgdG1wU2hvcnRoYW5kID0ge307XG4gICAgICAgIGlmIChMYWJlbC5wYXJzZUZvbnRTdHJpbmcodG1wU2hvcnRoYW5kLCBtdWx0aUZvbnQpKSB7XG4gICAgICAgICAgbXVsdGlGb250ID0gdG1wU2hvcnRoYW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtdWx0aUZvbnQsIG9wdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gbXVsdGlGb250W29wdGlvbl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPcHRpb24gaXMgbm90IG1lbnRpb25lZCBpbiB0aGUgbXVsdGkgZm9udCBvcHRpb25zOyB0YWtlIGl0IGZyb20gdGhlIHBhcmVudCBmb250IG9wdGlvbnMuXG4gICAgLy8gVGhlc2UgaGF2ZSBhbHJlYWR5IGJlZW4gY29udmVydGVkIHdpdGggZ2V0QmFzaWNPcHRpb25zKCksIHNvIHVzZSB0aGUgY29udmVydGVkIHZhbHVlcy5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZm9udE9wdGlvbnMsIG9wdGlvbikpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvbnRPcHRpb25zW29wdGlvbl07XG4gICAgfVxuXG4gICAgLy8gQSB2YWx1ZSAqKm11c3QqKiBiZSBmb3VuZDsgeW91IHNob3VsZCBuZXZlciBnZXQgaGVyZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkRpZCBub3QgZmluZCB2YWx1ZSBmb3IgbXVsdGktZm9udCBmb3IgcHJvcGVydHk6ICdcIiArIG9wdGlvbiArIFwiJ1wiXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIG9wdGlvbnMgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gbXVsdGktZm9udC5cbiAgICpcbiAgICogQWxsIGF2YWlsYWJsZSBvcHRpb24gb2JqZWN0cyBhcmUgdHJhd2xlZCBpbiB0aGUgc2V0IG9yZGVyIHRvIGNvbnN0cnVjdCB0aGUgb3B0aW9uIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBwaWxlICBwaWxlIG9mIG9wdGlvbiBvYmplY3RzIHRvIHVzZVxuICAgKiBAcGFyYW0ge011bHRpRm9udFN0eWxlfSBtdWx0aU5hbWUgc3ViIHBhdGggZm9yIHRoZSBtb2QtZm9udFxuICAgKiBAcmV0dXJucyB7TXVsdGlGb250T3B0aW9uc31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEZvbnRPcHRpb25zKHBpbGUsIG11bHRpTmFtZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IG9wdGlvbk5hbWVzID0gW1wiY29sb3JcIiwgXCJzaXplXCIsIFwiZmFjZVwiLCBcIm1vZFwiLCBcInZhZGp1c3RcIl07IC8vIExpc3Qgb2YgYWxsb3dlZCBvcHRpb25zIHBlciBtdWx0aS1mb250XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbk5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBtb2QgPSBvcHRpb25OYW1lc1tpXTtcbiAgICAgIHJlc3VsdFttb2RdID0gdGhpcy5nZXRGb250T3B0aW9uKHBpbGUsIG11bHRpTmFtZSwgbW9kKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIEVuZCBtZXRob2RzIGZvciBoYW5kbGluZyBvcHRpb25zIHBpbGVzXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBDb2xsYXBzZSB0aGUgZm9udCBvcHRpb25zIGZvciB0aGUgbXVsdGktZm9udCB0byBzaW5nbGUgb2JqZWN0cywgZnJvbVxuICAgKiB0aGUgY2hhaW4gb2Ygb3B0aW9uIG9iamVjdHMgcGFzc2VkICh0aGUgJ3BpbGUnKS5cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBwaWxlICBzZXF1ZW5jZSBvZiBvcHRpb24gb2JqZWN0cyB0byBjb25zaWRlci5cbiAgICogICAgICAgICAgICAgICAgICAgICBGaXJzdCBpdGVtIGluIGxpc3QgYXNzdW1lZCB0byBiZSB0aGUgbmV3bHkgc2V0IG9wdGlvbnMuXG4gICAqL1xuICBwcm9wYWdhdGVGb250cyhwaWxlKSB7XG4gICAgY29uc3QgZm9udFBpbGUgPSBbXTsgLy8gc2VxdWVuY2Ugb2YgZm9udCBvYmplY3RzIHRvIGNvbnNpZGVyLCBvcmRlciBpbXBvcnRhbnRcblxuICAgIC8vIE5vdGUgdGhhdCB0aGlzLmVsZW1lbnRPcHRpb25zIGlzIG5vdCB1c2VkIGhlcmUuXG4gICAgdGhpcy5hZGRGb250T3B0aW9uc1RvUGlsZShmb250UGlsZSwgcGlsZSk7XG4gICAgdGhpcy5mb250T3B0aW9ucyA9IHRoaXMuZ2V0QmFzaWNPcHRpb25zKGZvbnRQaWxlKTtcblxuICAgIC8vIFdlIHNldCBtdWx0aWZvbnQgdmFsdWVzIGV2ZW4gaWYgbXVsdGkgPT09IGZhbHNlLCBmb3IgY29uc2lzdGVuY3kgKHRoaW5ncyBicmVhayBvdGhlcndpc2UpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtdWx0aUZvbnRTdHlsZS5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgbW9kID0gbXVsdGlGb250U3R5bGVbaV07XG4gICAgICBjb25zdCBtb2RPcHRpb25zID0gdGhpcy5mb250T3B0aW9uc1ttb2RdO1xuICAgICAgY29uc3QgdG1wTXVsdGlGb250T3B0aW9ucyA9IHRoaXMuZ2V0Rm9udE9wdGlvbnMoZm9udFBpbGUsIG1vZCk7XG5cbiAgICAgIC8vIENvcHkgb3ZlciBmb3VuZCB2YWx1ZXNcbiAgICAgIGZvckVhY2godG1wTXVsdGlGb250T3B0aW9ucywgKG9wdGlvbiwgbikgPT4ge1xuICAgICAgICBtb2RPcHRpb25zW25dID0gb3B0aW9uO1xuICAgICAgfSk7XG5cbiAgICAgIG1vZE9wdGlvbnMuc2l6ZSA9IE51bWJlcihtb2RPcHRpb25zLnNpemUpO1xuICAgICAgbW9kT3B0aW9ucy52YWRqdXN0ID0gTnVtYmVyKG1vZE9wdGlvbnMudmFkanVzdCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24uIFRoaXMgaXMgY2FsbGVkIGZyb20gYW55dGhpbmcgdGhhdCB3YW50cyB0byBkcmF3IGEgbGFiZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZWxpbmU9J21pZGRsZSddXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCBiYXNlbGluZSA9IFwibWlkZGxlXCIpIHtcbiAgICAvLyBpZiBubyBsYWJlbCwgcmV0dXJuXG4gICAgaWYgKHRoaXMuZWxlbWVudE9wdGlvbnMubGFiZWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byByZW5kZXIgdGhlIGxhYmVsXG4gICAgbGV0IHZpZXdGb250U2l6ZSA9IHRoaXMuZm9udE9wdGlvbnMuc2l6ZSAqIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZWxlbWVudE9wdGlvbnMubGFiZWwgJiZcbiAgICAgIHZpZXdGb250U2l6ZSA8IHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5kcmF3VGhyZXNob2xkIC0gMVxuICAgIClcbiAgICAgIHJldHVybjtcblxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZXJlIHdpbGwgbm90IGJlIEhVR0UgbGV0dGVycyBvbiBzY3JlZW5cbiAgICAvLyBieSBzZXR0aW5nIGFuIHVwcGVyIGxpbWl0IG9uIHRoZSB2aXNpYmxlIHRleHQgc2l6ZSAocmVnYXJkbGVzcyBvZiB6b29tTGV2ZWwpXG4gICAgaWYgKHZpZXdGb250U2l6ZSA+PSB0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwubWF4VmlzaWJsZSkge1xuICAgICAgdmlld0ZvbnRTaXplID1cbiAgICAgICAgTnVtYmVyKHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5tYXhWaXNpYmxlKSAvXG4gICAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSB0aGUgc2l6ZSBjYWNoZSBpZiByZXF1aXJlZFxuICAgIHRoaXMuY2FsY3VsYXRlTGFiZWxTaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyLCB4LCB5LCBiYXNlbGluZSk7XG4gICAgdGhpcy5fZHJhd0JhY2tncm91bmQoY3R4KTtcbiAgICB0aGlzLl9kcmF3VGV4dChjdHgsIHgsIHRoaXMuc2l6ZS55TGluZSwgYmFzZWxpbmUsIHZpZXdGb250U2l6ZSk7XG4gIH1cblxuICAvKipcbiAgICogRHJhd3MgdGhlIGxhYmVsIGJhY2tncm91bmRcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdCYWNrZ3JvdW5kKGN0eCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9udE9wdGlvbnMuYmFja2dyb3VuZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZvbnRPcHRpb25zLmJhY2tncm91bmQgIT09IFwibm9uZVwiXG4gICAgKSB7XG4gICAgICBjdHguZmlsbFN0eWxlID0gdGhpcy5mb250T3B0aW9ucy5iYWNrZ3JvdW5kO1xuICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuICAgICAgY3R4LmZpbGxSZWN0KHNpemUubGVmdCwgc2l6ZS50b3AsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Jhc2VsaW5lPSdtaWRkbGUnXVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmlld0ZvbnRTaXplXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd1RleHQoY3R4LCB4LCB5LCBiYXNlbGluZSA9IFwibWlkZGxlXCIsIHZpZXdGb250U2l6ZSkge1xuICAgIFt4LCB5XSA9IHRoaXMuX3NldEFsaWdubWVudChjdHgsIHgsIHksIGJhc2VsaW5lKTtcblxuICAgIGN0eC50ZXh0QWxpZ24gPSBcImxlZnRcIjtcbiAgICB4ID0geCAtIHRoaXMuc2l6ZS53aWR0aCAvIDI7IC8vIFNoaWZ0IGxhYmVsIDEvMi1kaXN0YW5jZSB0byB0aGUgbGVmdFxuICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLnZhbGlnbiAmJiB0aGlzLnNpemUuaGVpZ2h0ID4gdGhpcy5zaXplLmxhYmVsSGVpZ2h0KSB7XG4gICAgICBpZiAodGhpcy5mb250T3B0aW9ucy52YWxpZ24gPT09IFwidG9wXCIpIHtcbiAgICAgICAgeSAtPSAodGhpcy5zaXplLmhlaWdodCAtIHRoaXMuc2l6ZS5sYWJlbEhlaWdodCkgLyAyO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZm9udE9wdGlvbnMudmFsaWduID09PSBcImJvdHRvbVwiKSB7XG4gICAgICAgIHkgKz0gKHRoaXMuc2l6ZS5oZWlnaHQgLSB0aGlzLnNpemUubGFiZWxIZWlnaHQpIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkcmF3IHRoZSB0ZXh0XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1tpXTtcbiAgICAgIGlmIChsaW5lICYmIGxpbmUuYmxvY2tzKSB7XG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGlmICh0aGlzLmlzRWRnZUxhYmVsIHx8IHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwiY2VudGVyXCIpIHtcbiAgICAgICAgICB3aWR0aCArPSAodGhpcy5zaXplLndpZHRoIC0gbGluZS53aWR0aCkgLyAyO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwicmlnaHRcIikge1xuICAgICAgICAgIHdpZHRoICs9IHRoaXMuc2l6ZS53aWR0aCAtIGxpbmUud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lLmJsb2Nrcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNvbnN0IGJsb2NrID0gbGluZS5ibG9ja3Nbal07XG4gICAgICAgICAgY3R4LmZvbnQgPSBibG9jay5mb250O1xuICAgICAgICAgIGNvbnN0IFtmb250Q29sb3IsIHN0cm9rZUNvbG9yXSA9IHRoaXMuX2dldENvbG9yKFxuICAgICAgICAgICAgYmxvY2suY29sb3IsXG4gICAgICAgICAgICB2aWV3Rm9udFNpemUsXG4gICAgICAgICAgICBibG9jay5zdHJva2VDb2xvclxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGJsb2NrLnN0cm9rZVdpZHRoID4gMCkge1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGJsb2NrLnN0cm9rZVdpZHRoO1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3I7XG4gICAgICAgICAgICBjdHgubGluZUpvaW4gPSBcInJvdW5kXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBmb250Q29sb3I7XG5cbiAgICAgICAgICBpZiAoYmxvY2suc3Ryb2tlV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBjdHguc3Ryb2tlVGV4dChibG9jay50ZXh0LCB4ICsgd2lkdGgsIHkgKyBibG9jay52YWRqdXN0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3R4LmZpbGxUZXh0KGJsb2NrLnRleHQsIHggKyB3aWR0aCwgeSArIGJsb2NrLnZhZGp1c3QpO1xuICAgICAgICAgIHdpZHRoICs9IGJsb2NrLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHkgKz0gbGluZS5oZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VsaW5lXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRBbGlnbm1lbnQoY3R4LCB4LCB5LCBiYXNlbGluZSkge1xuICAgIC8vIGNoZWNrIGZvciBsYWJlbCBhbGlnbm1lbnQgKGZvciBlZGdlcylcbiAgICAvLyBUT0RPOiBtYWtlIGFsaWdubWVudCBmb3Igbm9kZXNcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzRWRnZUxhYmVsICYmXG4gICAgICB0aGlzLmZvbnRPcHRpb25zLmFsaWduICE9PSBcImhvcml6b250YWxcIiAmJlxuICAgICAgdGhpcy5wb2ludFRvU2VsZiA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHggPSAwO1xuICAgICAgeSA9IDA7XG5cbiAgICAgIGNvbnN0IGxpbmVNYXJnaW4gPSAyO1xuICAgICAgaWYgKHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwidG9wXCIpIHtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwiYWxwaGFiZXRpY1wiO1xuICAgICAgICB5IC09IDIgKiBsaW5lTWFyZ2luOyAvLyBkaXN0YW5jZSBmcm9tIGVkZ2UsIHJlcXVpcmVkIGJlY2F1c2Ugd2UgdXNlIGFscGhhYmV0aWMuIEFscGhhYmV0aWMgaGFzIGxlc3MgZGlmZmVyZW5jZSBiZXR3ZWVuIGJyb3dzZXJzXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwiaGFuZ2luZ1wiO1xuICAgICAgICB5ICs9IDIgKiBsaW5lTWFyZ2luOyAvLyBkaXN0YW5jZSBmcm9tIGVkZ2UsIHJlcXVpcmVkIGJlY2F1c2Ugd2UgdXNlIGhhbmdpbmcuIEhhbmdpbmcgaGFzIGxlc3MgZGlmZmVyZW5jZSBiZXR3ZWVuIGJyb3dzZXJzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY3R4LnRleHRCYXNlbGluZSA9IGJhc2VsaW5lO1xuICAgIH1cbiAgICByZXR1cm4gW3gsIHldO1xuICB9XG5cbiAgLyoqXG4gICAqIGZhZGUgaW4gd2hlbiByZWxhdGl2ZSBzY2FsZSBpcyBiZXR3ZWVuIHRocmVzaG9sZCBhbmQgdGhyZXNob2xkIC0gMS5cbiAgICogSWYgdGhlIHJlbGF0aXZlIHNjYWxlIHdvdWxkIGJlIHNtYWxsZXIgdGhhbiB0aHJlc2hvbGQgLTEgdGhlIGRyYXcgZnVuY3Rpb24gd291bGQgaGF2ZSByZXR1cm5lZCBiZWZvcmUgY29taW5nIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAgVGhlIGZvbnQgY29sb3IgdG8gdXNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2aWV3Rm9udFNpemVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGluaXRpYWxTdHJva2VDb2xvclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGZvbnQgY29sb3IgYW5kIHN0cm9rZSBjb2xvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENvbG9yKGNvbG9yLCB2aWV3Rm9udFNpemUsIGluaXRpYWxTdHJva2VDb2xvcikge1xuICAgIGxldCBmb250Q29sb3IgPSBjb2xvciB8fCBcIiMwMDAwMDBcIjtcbiAgICBsZXQgc3Ryb2tlQ29sb3IgPSBpbml0aWFsU3Ryb2tlQ29sb3IgfHwgXCIjZmZmZmZmXCI7XG4gICAgaWYgKHZpZXdGb250U2l6ZSA8PSB0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwuZHJhd1RocmVzaG9sZCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAxLFxuICAgICAgICAgIDEgLSAodGhpcy5lbGVtZW50T3B0aW9ucy5zY2FsaW5nLmxhYmVsLmRyYXdUaHJlc2hvbGQgLSB2aWV3Rm9udFNpemUpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBmb250Q29sb3IgPSBvdmVycmlkZU9wYWNpdHkoZm9udENvbG9yLCBvcGFjaXR5KTtcbiAgICAgIHN0cm9rZUNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KHN0cm9rZUNvbG9yLCBvcGFjaXR5KTtcbiAgICB9XG4gICAgcmV0dXJuIFtmb250Q29sb3IsIHN0cm9rZUNvbG9yXTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcmV0dXJucyB7e3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfX1cbiAgICovXG4gIGdldFRleHRTaXplKGN0eCwgc2VsZWN0ZWQgPSBmYWxzZSwgaG92ZXIgPSBmYWxzZSkge1xuICAgIHRoaXMuX3Byb2Nlc3NMYWJlbChjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB0aGlzLnNpemUud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuc2l6ZS5oZWlnaHQsXG4gICAgICBsaW5lQ291bnQ6IHRoaXMubGluZUNvdW50LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGRpbWVuc2lvbnMgb2YgdGhlIGxhYmVsXG4gICAqXG4gICAqIEByZXR1cm5zIHtyZWN0fVxuICAgKi9cbiAgZ2V0U2l6ZSgpIHtcbiAgICBjb25zdCBsaW5lTWFyZ2luID0gMjtcbiAgICBsZXQgeCA9IHRoaXMuc2l6ZS5sZWZ0OyAvLyBkZWZhdWx0IHZhbHVlcyB3aGljaCBtaWdodCBiZSBvdmVycmlkZGVuIGJlbG93XG4gICAgbGV0IHkgPSB0aGlzLnNpemUudG9wIC0gMC41ICogbGluZU1hcmdpbjsgLy8gaWRlbVxuXG4gICAgaWYgKHRoaXMuaXNFZGdlTGFiZWwpIHtcbiAgICAgIGNvbnN0IHgyID0gLXRoaXMuc2l6ZS53aWR0aCAqIDAuNTtcblxuICAgICAgc3dpdGNoICh0aGlzLmZvbnRPcHRpb25zLmFsaWduKSB7XG4gICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcbiAgICAgICAgICB4ID0geDI7XG4gICAgICAgICAgeSA9IC10aGlzLnNpemUuaGVpZ2h0ICogMC41O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidG9wXCI6XG4gICAgICAgICAgeCA9IHgyO1xuICAgICAgICAgIHkgPSAtKHRoaXMuc2l6ZS5oZWlnaHQgKyBsaW5lTWFyZ2luKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgICAgIHggPSB4MjtcbiAgICAgICAgICB5ID0gbGluZU1hcmdpbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSB7XG4gICAgICBsZWZ0OiB4LFxuICAgICAgdG9wOiB5LFxuICAgICAgd2lkdGg6IHRoaXMuc2l6ZS53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5zaXplLmhlaWdodCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdXG4gICAqIEBwYXJhbSB7J21pZGRsZSd8J2hhbmdpbmcnfSBbYmFzZWxpbmU9J21pZGRsZSddXG4gICAqL1xuICBjYWxjdWxhdGVMYWJlbFNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIHggPSAwLCB5ID0gMCwgYmFzZWxpbmUgPSBcIm1pZGRsZVwiKSB7XG4gICAgdGhpcy5fcHJvY2Vzc0xhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLnNpemUubGVmdCA9IHggLSB0aGlzLnNpemUud2lkdGggKiAwLjU7XG4gICAgdGhpcy5zaXplLnRvcCA9IHkgLSB0aGlzLnNpemUuaGVpZ2h0ICogMC41O1xuICAgIHRoaXMuc2l6ZS55TGluZSA9IHkgKyAoMSAtIHRoaXMubGluZUNvdW50KSAqIDAuNSAqIHRoaXMuZm9udE9wdGlvbnMuc2l6ZTtcbiAgICBpZiAoYmFzZWxpbmUgPT09IFwiaGFuZ2luZ1wiKSB7XG4gICAgICB0aGlzLnNpemUudG9wICs9IDAuNSAqIHRoaXMuZm9udE9wdGlvbnMuc2l6ZTtcbiAgICAgIHRoaXMuc2l6ZS50b3AgKz0gNDsgLy8gZGlzdGFuY2UgZnJvbSBub2RlLCByZXF1aXJlZCBiZWNhdXNlIHdlIHVzZSBoYW5naW5nLiBIYW5naW5nIGhhcyBsZXNzIGRpZmZlcmVuY2UgYmV0d2VlbiBicm93c2Vyc1xuICAgICAgdGhpcy5zaXplLnlMaW5lICs9IDQ7IC8vIGRpc3RhbmNlIGZyb20gbm9kZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kXG4gICAqIEByZXR1cm5zIHt7Y29sb3IsIHNpemUsIGZhY2UsIG1vZCwgdmFkanVzdCwgc3Ryb2tlV2lkdGg6ICosIHN0cm9rZUNvbG9yOiAoKnxzdHJpbmd8YWxsT3B0aW9ucy5lZGdlcy5mb250LnN0cm9rZUNvbG9yfHtzdHJpbmd9fGFsbE9wdGlvbnMubm9kZXMuZm9udC5zdHJva2VDb2xvcnxBcnJheSl9fVxuICAgKi9cbiAgZ2V0Rm9ybWF0dGluZ1ZhbHVlcyhjdHgsIHNlbGVjdGVkLCBob3ZlciwgbW9kKSB7XG4gICAgY29uc3QgZ2V0VmFsdWUgPSBmdW5jdGlvbiAoZm9udE9wdGlvbnMsIG1vZCwgb3B0aW9uKSB7XG4gICAgICBpZiAobW9kID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgIGlmIChvcHRpb24gPT09IFwibW9kXCIpIHJldHVybiBcIlwiO1xuICAgICAgICByZXR1cm4gZm9udE9wdGlvbnNbb3B0aW9uXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvbnRPcHRpb25zW21vZF1bb3B0aW9uXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIEdydW1ibCBsZWF2aW5nIG91dCB0ZXN0IG9uIHVuZGVmaW5lZCBlcXVhbHMgZmFsc2UgZm9yIFwiXCJcbiAgICAgICAgcmV0dXJuIGZvbnRPcHRpb25zW21vZF1bb3B0aW9uXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRha2UgZnJvbSBwYXJlbnQgZm9udCBvcHRpb25cbiAgICAgICAgcmV0dXJuIGZvbnRPcHRpb25zW29wdGlvbl07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgIGNvbG9yOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwiY29sb3JcIiksXG4gICAgICBzaXplOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwic2l6ZVwiKSxcbiAgICAgIGZhY2U6IGdldFZhbHVlKHRoaXMuZm9udE9wdGlvbnMsIG1vZCwgXCJmYWNlXCIpLFxuICAgICAgbW9kOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwibW9kXCIpLFxuICAgICAgdmFkanVzdDogZ2V0VmFsdWUodGhpcy5mb250T3B0aW9ucywgbW9kLCBcInZhZGp1c3RcIiksXG4gICAgICBzdHJva2VXaWR0aDogdGhpcy5mb250T3B0aW9ucy5zdHJva2VXaWR0aCxcbiAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLmZvbnRPcHRpb25zLnN0cm9rZUNvbG9yLFxuICAgIH07XG4gICAgaWYgKHNlbGVjdGVkIHx8IGhvdmVyKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG1vZCA9PT0gXCJub3JtYWxcIiAmJlxuICAgICAgICB0aGlzLmZvbnRPcHRpb25zLmNob29zZXIgPT09IHRydWUgJiZcbiAgICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5sYWJlbEhpZ2hsaWdodEJvbGRcbiAgICAgICkge1xuICAgICAgICB2YWx1ZXMubW9kID0gXCJib2xkXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZm9udE9wdGlvbnMuY2hvb3NlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdGhpcy5mb250T3B0aW9ucy5jaG9vc2VyKFxuICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5pZCxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgaG92ZXJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZvbnRTdHJpbmcgPSBcIlwiO1xuICAgIGlmICh2YWx1ZXMubW9kICE9PSB1bmRlZmluZWQgJiYgdmFsdWVzLm1vZCAhPT0gXCJcIikge1xuICAgICAgLy8gc2FmZWd1YXJkIGZvciB1bmRlZmluZWQgLSB0aGlzIGhhcHBlbmVkXG4gICAgICBmb250U3RyaW5nICs9IHZhbHVlcy5tb2QgKyBcIiBcIjtcbiAgICB9XG4gICAgZm9udFN0cmluZyArPSB2YWx1ZXMuc2l6ZSArIFwicHggXCIgKyB2YWx1ZXMuZmFjZTtcblxuICAgIGN0eC5mb250ID0gZm9udFN0cmluZy5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICB2YWx1ZXMuZm9udCA9IGN0eC5mb250O1xuICAgIHZhbHVlcy5oZWlnaHQgPSB2YWx1ZXMuc2l6ZTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGRpZmZlcmVudFN0YXRlKHNlbGVjdGVkLCBob3Zlcikge1xuICAgIHJldHVybiBzZWxlY3RlZCAhPT0gdGhpcy5zZWxlY3RlZFN0YXRlIHx8IGhvdmVyICE9PSB0aGlzLmhvdmVyU3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBleHBsb2RlcyB0aGUgcGFzc2VkIHRleHQgaW50byBsaW5lcyBhbmQgZGV0ZXJtaW5lcyB0aGUgd2lkdGgsIGhlaWdodCBhbmQgbnVtYmVyIG9mIGxpbmVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW5UZXh0ICB0aGUgdGV4dCB0byBleHBsb2RlXG4gICAqIEByZXR1cm5zIHt7d2lkdGgsIGhlaWdodCwgbGluZXN9fCp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHJvY2Vzc0xhYmVsVGV4dChjdHgsIHNlbGVjdGVkLCBob3ZlciwgaW5UZXh0KSB7XG4gICAgY29uc3Qgc3BsaXR0ZXIgPSBuZXcgTGFiZWxTcGxpdHRlcihjdHgsIHRoaXMsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgcmV0dXJuIHNwbGl0dGVyLnByb2Nlc3MoaW5UZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGV4cGxvZGVzIHRoZSBsYWJlbCBzdHJpbmcgaW50byBsaW5lcyBhbmQgc2V0cyB0aGUgd2lkdGgsIGhlaWdodCBhbmQgbnVtYmVyIG9mIGxpbmVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Byb2Nlc3NMYWJlbChjdHgsIHNlbGVjdGVkLCBob3Zlcikge1xuICAgIGlmICh0aGlzLmxhYmVsRGlydHkgPT09IGZhbHNlICYmICF0aGlzLmRpZmZlcmVudFN0YXRlKHNlbGVjdGVkLCBob3ZlcikpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3Byb2Nlc3NMYWJlbFRleHQoXG4gICAgICBjdHgsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyLFxuICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5sYWJlbFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy5taW5XZHQgPiAwICYmIHN0YXRlLndpZHRoIDwgdGhpcy5mb250T3B0aW9ucy5taW5XZHQpIHtcbiAgICAgIHN0YXRlLndpZHRoID0gdGhpcy5mb250T3B0aW9ucy5taW5XZHQ7XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLmxhYmVsSGVpZ2h0ID0gc3RhdGUuaGVpZ2h0O1xuICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLm1pbkhndCA+IDAgJiYgc3RhdGUuaGVpZ2h0IDwgdGhpcy5mb250T3B0aW9ucy5taW5IZ3QpIHtcbiAgICAgIHN0YXRlLmhlaWdodCA9IHRoaXMuZm9udE9wdGlvbnMubWluSGd0O1xuICAgIH1cblxuICAgIHRoaXMubGluZXMgPSBzdGF0ZS5saW5lcztcbiAgICB0aGlzLmxpbmVDb3VudCA9IHN0YXRlLmxpbmVzLmxlbmd0aDtcbiAgICB0aGlzLnNpemUud2lkdGggPSBzdGF0ZS53aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gc3RhdGUuaGVpZ2h0O1xuICAgIHRoaXMuc2VsZWN0ZWRTdGF0ZSA9IHNlbGVjdGVkO1xuICAgIHRoaXMuaG92ZXJTdGF0ZSA9IGhvdmVyO1xuXG4gICAgdGhpcy5sYWJlbERpcnR5ID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBsYWJlbCBpcyB2aXNpYmxlXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgbGFiZWwgd2lsbCBiZSBzaG93LCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZpc2libGUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zaXplLndpZHRoID09PSAwIHx8XG4gICAgICB0aGlzLnNpemUuaGVpZ2h0ID09PSAwIHx8XG4gICAgICB0aGlzLmVsZW1lbnRPcHRpb25zLmxhYmVsID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gbm90aGluZyB0byBkaXNwbGF5XG4gICAgfVxuXG4gICAgY29uc3Qgdmlld0ZvbnRTaXplID0gdGhpcy5mb250T3B0aW9ucy5zaXplICogdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgaWYgKHZpZXdGb250U2l6ZSA8IHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5kcmF3VGhyZXNob2xkIC0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUb28gc21hbGwgb3IgdG9vIGZhciBhd2F5IHRvIHNob3dcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYWJlbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ29uc3RydWN0b3IoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBuYXRpdmVDb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbi8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuY29uc3RydWN0XG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShuYXRpdmVDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xuXG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBuYXRpdmVDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG52YXIgRk9SQ0VEID0gTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUc7XG5cbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06IEZPUkNFRCB9LCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFDb25zdHJ1Y3RvcihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFDb25zdHJ1Y3Rvcihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiBuYXRpdmVDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgIGFwcGx5KHB1c2gsICRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGFwcGx5KGJpbmQsIFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdFByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IGFwcGx5KFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC5jb25zdHJ1Y3QnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlJlZmxlY3QuY29uc3RydWN0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIHNldFByb3RvdHlwZU9mOiBzZXRQcm90b3R5cGVPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfc2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRzZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkY3JlYXRlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgImltcG9ydCBfT2JqZWN0JHNldFByb3RvdHlwZU9mIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanNcIjtcbmltcG9ydCBfYmluZEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9iaW5kLmpzXCI7XG5pbXBvcnQgX09iamVjdCRnZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICB2YXIgX2NvbnRleHQ7XG4gIF9nZXRQcm90b3R5cGVPZiA9IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPyBfYmluZEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBfT2JqZWN0JGdldFByb3RvdHlwZU9mKS5jYWxsKF9jb250ZXh0KSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IF9PYmplY3QkZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59IiwgIi8qKlxuICogVGhlIEJhc2UgY2xhc3MgZm9yIGFsbCBOb2Rlcy5cbiAqL1xuY2xhc3MgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlID0gbGFiZWxNb2R1bGU7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHRoaXMudG9wID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubGVmdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmFkaXVzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWFyZ2luID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVmcmVzaE5lZWRlZCA9IHRydWU7XG4gICAgdGhpcy5ib3VuZGluZ0JveCA9IHsgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgYm90dG9tOiAwIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKSB7XG4gICAgdGhpcy5tYXJnaW4gPSB7fTtcbiAgICBpZiAodGhpcy5vcHRpb25zLm1hcmdpbikge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMubWFyZ2luID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhpcy5tYXJnaW4udG9wID0gdGhpcy5vcHRpb25zLm1hcmdpbi50b3A7XG4gICAgICAgIHRoaXMubWFyZ2luLnJpZ2h0ID0gdGhpcy5vcHRpb25zLm1hcmdpbi5yaWdodDtcbiAgICAgICAgdGhpcy5tYXJnaW4uYm90dG9tID0gdGhpcy5vcHRpb25zLm1hcmdpbi5ib3R0b207XG4gICAgICAgIHRoaXMubWFyZ2luLmxlZnQgPSB0aGlzLm9wdGlvbnMubWFyZ2luLmxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1hcmdpbi50b3AgPSB0aGlzLm9wdGlvbnMubWFyZ2luO1xuICAgICAgICB0aGlzLm1hcmdpbi5yaWdodCA9IHRoaXMub3B0aW9ucy5tYXJnaW47XG4gICAgICAgIHRoaXMubWFyZ2luLmJvdHRvbSA9IHRoaXMub3B0aW9ucy5tYXJnaW47XG4gICAgICAgIHRoaXMubWFyZ2luLmxlZnQgPSB0aGlzLm9wdGlvbnMubWFyZ2luO1xuICAgICAgfVxuICAgIH1cbiAgICBsYWJlbE1vZHVsZS5hZGp1c3RTaXplcyh0aGlzLm1hcmdpbik7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIE1hdGguYWJzKHRoaXMud2lkdGggLyAyIC8gTWF0aC5jb3MoYW5nbGUpKSxcbiAgICAgICAgTWF0aC5hYnModGhpcy5oZWlnaHQgLyAyIC8gTWF0aC5zaW4oYW5nbGUpKVxuICAgICAgKSArIGJvcmRlcldpZHRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcykge1xuICAgIGlmICh2YWx1ZXMuc2hhZG93KSB7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSB2YWx1ZXMuc2hhZG93Q29sb3I7XG4gICAgICBjdHguc2hhZG93Qmx1ciA9IHZhbHVlcy5zaGFkb3dTaXplO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFggPSB2YWx1ZXMuc2hhZG93WDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gdmFsdWVzLnNoYWRvd1k7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcykge1xuICAgIGlmICh2YWx1ZXMuc2hhZG93KSB7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSBcInJnYmEoMCwwLDAsMClcIjtcbiAgICAgIGN0eC5zaGFkb3dCbHVyID0gMDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gMDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBlbmFibGVCb3JkZXJEYXNoZXMoY3R4LCB2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWVzLmJvcmRlckRhc2hlcyAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChjdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgZGFzaGVzID0gdmFsdWVzLmJvcmRlckRhc2hlcztcbiAgICAgICAgaWYgKGRhc2hlcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGRhc2hlcyA9IFs1LCAxNV07XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNldExpbmVEYXNoKGRhc2hlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJzZXRMaW5lRGFzaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4gVGhlIGRhc2hlZCBib3JkZXJzIGNhbm5vdCBiZSB1c2VkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5ib3JkZXJEYXNoZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBkaXNhYmxlQm9yZGVyRGFzaGVzKGN0eCwgdmFsdWVzKSB7XG4gICAgaWYgKHZhbHVlcy5ib3JkZXJEYXNoZXMgIT09IGZhbHNlKSB7XG4gICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4LnNldExpbmVEYXNoKFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJzZXRMaW5lRGFzaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4gVGhlIGRhc2hlZCBib3JkZXJzIGNhbm5vdCBiZSB1c2VkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5ib3JkZXJEYXNoZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBzaGFwZSBvZiBhIG5vZGUgbmVlZHMgdG8gYmUgcmVjYWxjdWxhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIG5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5yZWZyZXNoTmVlZGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBsb2NhdGlvbiB0byByZXNldCB0aGlzIG1lbWJlci5cbiAgICAgIC8vIEhvd2V2ZXIsIGluIHRoZSBjdXJyZW50IGxvZ2ljLCBpdCBpcyB0aGUgbW9zdCBjb252ZW5pZW50IG9uZS5cbiAgICAgIHRoaXMucmVmcmVzaE5lZWRlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMud2lkdGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5kaWZmZXJlbnRTdGF0ZShzZWxlY3RlZCwgaG92ZXIpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcykge1xuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gdmFsdWVzLmJvcmRlcldpZHRoIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG5cbiAgICBjdHgubGluZVdpZHRoID0gTWF0aC5taW4odGhpcy53aWR0aCwgYm9yZGVyV2lkdGgpO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IHZhbHVlcy5ib3JkZXJDb2xvcjtcbiAgICBjdHguZmlsbFN0eWxlID0gdmFsdWVzLmNvbG9yO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgcGVyZm9ybVN0cm9rZShjdHgsIHZhbHVlcykge1xuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gdmFsdWVzLmJvcmRlcldpZHRoIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG5cbiAgICAvL2RyYXcgZGFzaGVkIGJvcmRlciBpZiBlbmFibGVkLCBzYXZlIGFuZCByZXN0b3JlIGlzIHJlcXVpcmVkIGZvciBmaXJlZm94IG5vdCB0byBjcmFzaCBvbiB1bml4LlxuICAgIGN0eC5zYXZlKCk7XG4gICAgLy8gaWYgYm9yZGVycyBhcmUgemVybyB3aWR0aCwgdGhleSB3aWxsIGJlIGRyYXduIHdpdGggd2lkdGggMSBieSBkZWZhdWx0LiBUaGlzIHByZXZlbnRzIHRoYXRcbiAgICBpZiAoYm9yZGVyV2lkdGggPiAwKSB7XG4gICAgICB0aGlzLmVuYWJsZUJvcmRlckRhc2hlcyhjdHgsIHZhbHVlcyk7XG4gICAgICAvL2RyYXcgdGhlIGJvcmRlclxuICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgLy9kaXNhYmxlIGRhc2hlZCBib3JkZXIgZm9yIG90aGVyIGVsZW1lbnRzXG4gICAgICB0aGlzLmRpc2FibGVCb3JkZXJEYXNoZXMoY3R4LCB2YWx1ZXMpO1xuICAgIH1cbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgcGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpIHtcbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5maWxsU3R5bGUgPSB2YWx1ZXMuY29sb3I7XG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICAvLyBkcmF3IHRoZSBiYWNrZ3JvdW5kXG4gICAgY3R4LmZpbGwoKTtcbiAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG5cbiAgICBjdHgucmVzdG9yZSgpO1xuICAgIHRoaXMucGVyZm9ybVN0cm9rZShjdHgsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1hcmdpblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZEJvdW5kaW5nQm94TWFyZ2luKG1hcmdpbikge1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCAtPSBtYXJnaW47XG4gICAgdGhpcy5ib3VuZGluZ0JveC50b3AgLT0gbWFyZ2luO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICs9IG1hcmdpbjtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ICs9IG1hcmdpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgY2FsbC5cbiAgICpcbiAgICogRG9pbmcgaXQgbGlrZSB0aGlzIG1ha2VzIGl0IGVhc2llciB0byBvdmVycmlkZVxuICAgKiBpbiB0aGUgY2hpbGQgY2xhc3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAoY3R4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gdGhpcy5sZWZ0O1xuICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0gdGhpcy50b3A7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSB0aGlzLnRvcCArIHRoaXMuaGVpZ2h0O1xuICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB0aGlzLmxlZnQgKyB0aGlzLndpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgY2FsbC5cbiAgICogVGhpcyBhY3RzIGFzIGEgc3R1YiB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcikge1xuICAgIHRoaXMuX3VwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGRpbWVuc2lvbnMgdG8gdXNlIGZvciBub2RlcyB3aXRoIGFuIGludGVybmFsIGxhYmVsXG4gICAqXG4gICAqIEN1cnJlbnRseSwgdGhlc2UgYXJlOiBDaXJjbGUsIEVsbGlwc2UsIERhdGFiYXNlLCBCb3hcbiAgICogVGhlIG90aGVyIG5vZGVzIGhhdmUgZXh0ZXJuYWwgbGFiZWxzLCBhbmQgd2lsbCBub3QgY2FsbCB0aGlzIG1ldGhvZFxuICAgKlxuICAgKiBJZiB0aGVyZSBpcyBubyBsYWJlbCwgZGVjZW50IGRlZmF1bHQgdmFsdWVzIGFyZSBzdXBwbGllZC5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqIEByZXR1cm5zIHt7d2lkdGg6bnVtYmVyLCBoZWlnaHQ6bnVtYmVyfX1cbiAgICovXG4gIGdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICAvLyBOT1RFOiBwcmV2aW91c2x5ICd0ZXh0U2l6ZScgd2FzIG5vdCBwdXQgaW4gJ3RoaXMnIGZvciBFbGxpcHNlXG4gICAgLy8gVE9ETzogZXhhbWluZSB0aGUgY29uc2VxdWVuY2VzLlxuICAgIHRoaXMudGV4dFNpemUgPSB0aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICBsZXQgd2lkdGggPSB0aGlzLnRleHRTaXplLndpZHRoO1xuICAgIGxldCBoZWlnaHQgPSB0aGlzLnRleHRTaXplLmhlaWdodDtcblxuICAgIGNvbnN0IERFRkFVTFRfU0laRSA9IDE0O1xuICAgIGlmICh3aWR0aCA9PT0gMCkge1xuICAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gdGhlcmUgaXMgbm8gbGFiZWwgdGV4dCBzZXRcbiAgICAgIHdpZHRoID0gREVGQVVMVF9TSVpFOyAvLyB1c2UgYSBkZWNlbnQgZGVmYXVsdFxuICAgICAgaGVpZ2h0ID0gREVGQVVMVF9TSVpFOyAvLyBpZiB3aWR0aCB6ZXJvLCB0aGVuIGhlaWdodCBhbHNvIGFsd2F5cyB6ZXJvXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5vZGVCYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4uL3V0aWwvTm9kZUJhc2VcIjtcbmltcG9ydCB7IGRyYXdSb3VuZFJlY3QgfSBmcm9tIFwiLi4vdXRpbC9zaGFwZXNcIjtcblxuLyoqXG4gKiBBIEJveCBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVCYXNlXG4gKi9cbmNsYXNzIEJveCBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCwgaG92ZXIgPSB0aGlzLmhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgICB0aGlzLndpZHRoID0gZGltZW5zaW9ucy53aWR0aCArIHRoaXMubWFyZ2luLnJpZ2h0ICsgdGhpcy5tYXJnaW4ubGVmdDtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHQgKyB0aGlzLm1hcmdpbi50b3AgKyB0aGlzLm1hcmdpbi5ib3R0b207XG4gICAgICB0aGlzLnJhZGl1cyA9IHRoaXMud2lkdGggLyAyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZHJhd1JvdW5kUmVjdChcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMubGVmdCxcbiAgICAgIHRoaXMudG9wLFxuICAgICAgdGhpcy53aWR0aCxcbiAgICAgIHRoaXMuaGVpZ2h0LFxuICAgICAgdmFsdWVzLmJvcmRlclJhZGl1c1xuICAgICk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoXG4gICAgICBjdHgsXG4gICAgICB0aGlzLmxlZnQgKyB0aGlzLnRleHRTaXplLndpZHRoIC8gMiArIHRoaXMubWFyZ2luLmxlZnQsXG4gICAgICB0aGlzLnRvcCArIHRoaXMudGV4dFNpemUuaGVpZ2h0IC8gMiArIHRoaXMubWFyZ2luLnRvcCxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgaG92ZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICB0aGlzLl91cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG5cbiAgICBjb25zdCBib3JkZXJSYWRpdXMgPSB0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmJvcmRlclJhZGl1czsgLy8gb25seSBlZmZlY3RpdmUgZm9yIGJveFxuICAgIHRoaXMuX2FkZEJvdW5kaW5nQm94TWFyZ2luKGJvcmRlclJhZGl1cyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIGlmIChjdHgpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCk7XG4gICAgfVxuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBNYXRoLmFicyh0aGlzLndpZHRoIC8gMiAvIE1hdGguY29zKGFuZ2xlKSksXG4gICAgICAgIE1hdGguYWJzKHRoaXMuaGVpZ2h0IC8gMiAvIE1hdGguc2luKGFuZ2xlKSlcbiAgICAgICkgKyBib3JkZXJXaWR0aFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm94O1xuIiwgImltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi9Ob2RlQmFzZVwiO1xuaW1wb3J0IHsgZHJhd0NpcmNsZSB9IGZyb20gXCIuL3NoYXBlc1wiO1xuXG4vKipcbiAqIE5PVEU6IFRoaXMgaXMgYSBiYWQgYmFzZSBjbGFzc1xuICpcbiAqIENoaWxkIGNsYXNzZXMgYXJlOlxuICpcbiAqICAgSW1hZ2UgICAgICAgLSB1c2VzICpvbmx5KiBpbWFnZSBtZXRob2RzXG4gKiAgIENpcmNsZSAgICAgIC0gdXNlcyAqb25seSogX2RyYXdSYXdDaXJjbGVcbiAqICAgQ2lyY2xlSW1hZ2UgLSB1c2VzIGFsbFxuICpcbiAqIFRPRE86IFJlZmFjdG9yLCBtb3ZlIF9kcmF3UmF3Q2lyY2xlIHRvIGRpZmZlcmVudCBtb2R1bGUsIGRlcml2ZSBDaXJjbGUgZnJvbSBOb2RlQmFzZVxuICogICAgICAgUmVuYW1lIHRoaXMgdG8gSW1hZ2VCYXNlXG4gKiAgICAgICBDb25zb2xpZGF0ZSBjb21tb24gY29kZSBpbiBJbWFnZSBhbmQgQ2lyY2xlSW1hZ2UgdG8gYmFzZSBjbGFzc1xuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBDaXJjbGVJbWFnZUJhc2UgZXh0ZW5kcyBOb2RlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5sYWJlbE9mZnNldCA9IDA7XG4gICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbaW1hZ2VPYmpdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbaW1hZ2VPYmpBbHRdXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMsIGltYWdlT2JqLCBpbWFnZU9iakFsdCkge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIShpbWFnZU9iaiA9PT0gdW5kZWZpbmVkICYmIGltYWdlT2JqQWx0ID09PSB1bmRlZmluZWQpKSB7XG4gICAgICB0aGlzLnNldEltYWdlcyhpbWFnZU9iaiwgaW1hZ2VPYmpBbHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGltYWdlcyBmb3IgdGhpcyBub2RlLlxuICAgKlxuICAgKiBUaGUgaW1hZ2VzIGNhbiBiZSB1cGRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygb3B0aW9ucztcbiAgICogdGhlcmVmb3JlLCB0aGlzIG1ldGhvZCBuZWVkcyB0byBiZSByZWVudHJhbnQuXG4gICAqXG4gICAqIEZvciBjb3JyZWN0IHdvcmtpbmcgaW4gZXJyb3IgY2FzZXMsIGl0IGlzIG5lY2Vzc2FyeSB0byBwcm9wZXJseSBzZXRcbiAgICogZmllbGQgJ25vZGVzLmJyb2tlbkltYWdlJyBpbiB0aGUgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VPYmogIHJlcXVpcmVkOyBtYWluIGltYWdlIHRvIHNob3cgZm9yIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge0ltYWdlfHVuZGVmaW5lZH0gaW1hZ2VPYmpBbHQgb3B0aW9uYWw7IGltYWdlIHRvIHNob3cgd2hlbiBub2RlIGlzIHNlbGVjdGVkXG4gICAqL1xuICBzZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KSB7XG4gICAgaWYgKGltYWdlT2JqQWx0ICYmIHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuaW1hZ2VPYmogPSBpbWFnZU9iakFsdDtcbiAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSBpbWFnZU9iajtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbWFnZU9iaiA9IGltYWdlT2JqO1xuICAgICAgdGhpcy5pbWFnZU9iakFsdCA9IGltYWdlT2JqQWx0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgc2VsZWN0aW9uIGFuZCBzd2l0Y2ggYmV0d2VlbiB0aGUgYmFzZSBhbmQgdGhlIHNlbGVjdGVkIGltYWdlLlxuICAgKlxuICAgKiBEbyB0aGUgc3dpdGNoIG9ubHkgaWYgaW1hZ2VPYmpBbHQgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkIHZhbHVlIG9mIG5ldyBzZWxlY3RlZCBzdGF0ZSBmb3IgY3VycmVudCBub2RlXG4gICAqL1xuICBzd2l0Y2hJbWFnZXMoc2VsZWN0ZWQpIHtcbiAgICBjb25zdCBzZWxlY3Rpb25fY2hhbmdlZCA9XG4gICAgICAoc2VsZWN0ZWQgJiYgIXRoaXMuc2VsZWN0ZWQpIHx8ICghc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3RlZCk7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkOyAvLyBSZW1lbWJlciBuZXcgc2VsZWN0aW9uXG5cbiAgICBpZiAodGhpcy5pbWFnZU9iakFsdCAhPT0gdW5kZWZpbmVkICYmIHNlbGVjdGlvbl9jaGFuZ2VkKSB7XG4gICAgICBjb25zdCBpbWFnZVRtcCA9IHRoaXMuaW1hZ2VPYmo7XG4gICAgICB0aGlzLmltYWdlT2JqID0gdGhpcy5pbWFnZU9iakFsdDtcbiAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSBpbWFnZVRtcDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBJbWFnZSBQYWRkaW5nIGZyb20gbm9kZSBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsbGVmdDogbnVtYmVyLGJvdHRvbTogbnVtYmVyLHJpZ2h0OiBudW1iZXJ9fSBpbWFnZSBwYWRkaW5nIGluc2lkZSB0aGlzIHNoYXBlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0SW1hZ2VQYWRkaW5nKCkge1xuICAgIGNvbnN0IGltZ1BhZGRpbmcgPSB7IHRvcDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCwgbGVmdDogMCB9O1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2VQYWRkaW5nKSB7XG4gICAgICBjb25zdCBvcHRJbWdQYWRkaW5nID0gdGhpcy5vcHRpb25zLmltYWdlUGFkZGluZztcbiAgICAgIGlmICh0eXBlb2Ygb3B0SW1nUGFkZGluZyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGltZ1BhZGRpbmcudG9wID0gb3B0SW1nUGFkZGluZy50b3A7XG4gICAgICAgIGltZ1BhZGRpbmcucmlnaHQgPSBvcHRJbWdQYWRkaW5nLnJpZ2h0O1xuICAgICAgICBpbWdQYWRkaW5nLmJvdHRvbSA9IG9wdEltZ1BhZGRpbmcuYm90dG9tO1xuICAgICAgICBpbWdQYWRkaW5nLmxlZnQgPSBvcHRJbWdQYWRkaW5nLmxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbWdQYWRkaW5nLnRvcCA9IG9wdEltZ1BhZGRpbmc7XG4gICAgICAgIGltZ1BhZGRpbmcucmlnaHQgPSBvcHRJbWdQYWRkaW5nO1xuICAgICAgICBpbWdQYWRkaW5nLmJvdHRvbSA9IG9wdEltZ1BhZGRpbmc7XG4gICAgICAgIGltZ1BhZGRpbmcubGVmdCA9IG9wdEltZ1BhZGRpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGltZ1BhZGRpbmc7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0IHRoZSBub2RlIGRpbWVuc2lvbnMgZm9yIGEgbG9hZGVkIGltYWdlLlxuICAgKlxuICAgKiBQcmU6IHRoaXMuaW1hZ2VPYmogaXMgdmFsaWRcbiAgICovXG4gIF9yZXNpemVJbWFnZSgpIHtcbiAgICBsZXQgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLnVzZUltYWdlU2l6ZSA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIFVzZSB0aGUgc2l6ZSBwcm9wZXJ0eVxuICAgICAgbGV0IHJhdGlvX3dpZHRoID0gMTtcbiAgICAgIGxldCByYXRpb19oZWlnaHQgPSAxO1xuXG4gICAgICAvLyBPbmx5IGNhbGN1bGF0ZSB0aGUgcHJvcGVyIHJhdGlvIGlmIGJvdGggd2lkdGggYW5kIGhlaWdodCBub3QgemVyb1xuICAgICAgaWYgKHRoaXMuaW1hZ2VPYmoud2lkdGggJiYgdGhpcy5pbWFnZU9iai5oZWlnaHQpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VPYmoud2lkdGggPiB0aGlzLmltYWdlT2JqLmhlaWdodCkge1xuICAgICAgICAgIHJhdGlvX3dpZHRoID0gdGhpcy5pbWFnZU9iai53aWR0aCAvIHRoaXMuaW1hZ2VPYmouaGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJhdGlvX2hlaWdodCA9IHRoaXMuaW1hZ2VPYmouaGVpZ2h0IC8gdGhpcy5pbWFnZU9iai53aWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3aWR0aCA9IHRoaXMub3B0aW9ucy5zaXplICogMiAqIHJhdGlvX3dpZHRoO1xuICAgICAgaGVpZ2h0ID0gdGhpcy5vcHRpb25zLnNpemUgKiAyICogcmF0aW9faGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2UgdGhlIGltYWdlIHNpemUgd2l0aCBpbWFnZSBwYWRkaW5nXG4gICAgICBjb25zdCBpbWdQYWRkaW5nID0gdGhpcy5fZ2V0SW1hZ2VQYWRkaW5nKCk7XG4gICAgICB3aWR0aCA9IHRoaXMuaW1hZ2VPYmoud2lkdGggKyBpbWdQYWRkaW5nLmxlZnQgKyBpbWdQYWRkaW5nLnJpZ2h0O1xuICAgICAgaGVpZ2h0ID0gdGhpcy5pbWFnZU9iai5oZWlnaHQgKyBpbWdQYWRkaW5nLnRvcCArIGltZ1BhZGRpbmcuYm90dG9tO1xuICAgIH1cblxuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICB0aGlzLnJhZGl1cyA9IDAuNSAqIHRoaXMud2lkdGg7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdSYXdDaXJjbGUoY3R4LCB4LCB5LCB2YWx1ZXMpIHtcbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZHJhd0NpcmNsZShjdHgsIHgsIHksIHZhbHVlcy5zaXplKTtcbiAgICB0aGlzLnBlcmZvcm1GaWxsKGN0eCwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3SW1hZ2VBdFBvc2l0aW9uKGN0eCwgdmFsdWVzKSB7XG4gICAgaWYgKHRoaXMuaW1hZ2VPYmoud2lkdGggIT0gMCkge1xuICAgICAgLy8gZHJhdyB0aGUgaW1hZ2VcbiAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IHZhbHVlcy5vcGFjaXR5ICE9PSB1bmRlZmluZWQgPyB2YWx1ZXMub3BhY2l0eSA6IDE7XG5cbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcblxuICAgICAgbGV0IGZhY3RvciA9IDE7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5pbnRlcnBvbGF0aW9uID09PSB0cnVlKSB7XG4gICAgICAgIGZhY3RvciA9IHRoaXMuaW1hZ2VPYmoud2lkdGggLyB0aGlzLndpZHRoIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGltZ1BhZGRpbmcgPSB0aGlzLl9nZXRJbWFnZVBhZGRpbmcoKTtcblxuICAgICAgY29uc3QgaW1nUG9zTGVmdCA9IHRoaXMubGVmdCArIGltZ1BhZGRpbmcubGVmdDtcbiAgICAgIGNvbnN0IGltZ1Bvc1RvcCA9IHRoaXMudG9wICsgaW1nUGFkZGluZy50b3A7XG4gICAgICBjb25zdCBpbWdXaWR0aCA9IHRoaXMud2lkdGggLSBpbWdQYWRkaW5nLmxlZnQgLSBpbWdQYWRkaW5nLnJpZ2h0O1xuICAgICAgY29uc3QgaW1nSGVpZ2h0ID0gdGhpcy5oZWlnaHQgLSBpbWdQYWRkaW5nLnRvcCAtIGltZ1BhZGRpbmcuYm90dG9tO1xuICAgICAgdGhpcy5pbWFnZU9iai5kcmF3SW1hZ2VBdFBvc2l0aW9uKFxuICAgICAgICBjdHgsXG4gICAgICAgIGZhY3RvcixcbiAgICAgICAgaW1nUG9zTGVmdCxcbiAgICAgICAgaW1nUG9zVG9wLFxuICAgICAgICBpbWdXaWR0aCxcbiAgICAgICAgaW1nSGVpZ2h0XG4gICAgICApO1xuXG4gICAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd0ltYWdlTGFiZWwoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcblxuICAgIGlmICh0aGlzLmhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvZmZzZXQgPSB0aGlzLmhlaWdodCAqIDAuNTtcbiAgICAgIGNvbnN0IGxhYmVsRGltZW5zaW9ucyA9IHRoaXMubGFiZWxNb2R1bGUuZ2V0VGV4dFNpemUoXG4gICAgICAgIGN0eCxcbiAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgIGhvdmVyXG4gICAgICApO1xuICAgICAgaWYgKGxhYmVsRGltZW5zaW9ucy5saW5lQ291bnQgPj0gMSkge1xuICAgICAgICBvZmZzZXQgKz0gbGFiZWxEaW1lbnNpb25zLmhlaWdodCAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeUxhYmVsID0geSArIG9mZnNldDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwpIHtcbiAgICAgIHRoaXMubGFiZWxPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHgsIHlMYWJlbCwgc2VsZWN0ZWQsIGhvdmVyLCBcImhhbmdpbmdcIik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlSW1hZ2VCYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQ2lyY2xlSW1hZ2VCYXNlIGZyb20gXCIuLi91dGlsL0NpcmNsZUltYWdlQmFzZVwiO1xuXG4vKipcbiAqIEEgQ2lyY2xlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgQ2lyY2xlSW1hZ2VCYXNlXG4gKi9cbmNsYXNzIENpcmNsZSBleHRlbmRzIENpcmNsZUltYWdlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5fc2V0TWFyZ2lucyhsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5nZXREaW1lbnNpb25zRnJvbUxhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcblxuICAgICAgY29uc3QgZGlhbWV0ZXIgPSBNYXRoLm1heChcbiAgICAgICAgZGltZW5zaW9ucy53aWR0aCArIHRoaXMubWFyZ2luLnJpZ2h0ICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgICAgZGltZW5zaW9ucy5oZWlnaHQgKyB0aGlzLm1hcmdpbi50b3AgKyB0aGlzLm1hcmdpbi5ib3R0b21cbiAgICAgICk7XG5cbiAgICAgIHRoaXMub3B0aW9ucy5zaXplID0gZGlhbWV0ZXIgLyAyOyAvLyBOT1RFOiB0aGlzIHNpemUgZmllbGQgb25seSBzZXQgaGVyZSwgbm90IGluIEVsbGlwc2UsIERhdGFiYXNlLCBCb3hcbiAgICAgIHRoaXMud2lkdGggPSBkaWFtZXRlcjtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gZGlhbWV0ZXI7XG4gICAgICB0aGlzLnJhZGl1cyA9IHRoaXMud2lkdGggLyAyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICB0aGlzLl9kcmF3UmF3Q2lyY2xlKGN0eCwgeCwgeSwgdmFsdWVzKTtcblxuICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goeCwgeSk7XG4gICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5sZWZ0ICsgdGhpcy50ZXh0U2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgeSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgaG92ZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSkge1xuICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0geSAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHggLSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0geCArIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0geSArIHRoaXMub3B0aW9ucy5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4KSB7XG4gICAgaWYgKGN0eCkge1xuICAgICAgdGhpcy5yZXNpemUoY3R4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud2lkdGggKiAwLjU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQ2lyY2xlSW1hZ2VCYXNlIGZyb20gXCIuLi91dGlsL0NpcmNsZUltYWdlQmFzZVwiO1xuXG4vKipcbiAqIEEgQ2lyY3VsYXJJbWFnZSBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIENpcmNsZUltYWdlQmFzZVxuICovXG5jbGFzcyBDaXJjdWxhckltYWdlIGV4dGVuZHMgQ2lyY2xlSW1hZ2VCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqQWx0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSwgaW1hZ2VPYmosIGltYWdlT2JqQWx0KSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuXG4gICAgdGhpcy5zZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCwgaG92ZXIgPSB0aGlzLmhvdmVyKSB7XG4gICAgY29uc3QgaW1hZ2VBYnNlbnQgPVxuICAgICAgdGhpcy5pbWFnZU9iai5zcmMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5pbWFnZU9iai53aWR0aCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLmltYWdlT2JqLmhlaWdodCA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGltYWdlQWJzZW50KSB7XG4gICAgICBjb25zdCBkaWFtZXRlciA9IHRoaXMub3B0aW9ucy5zaXplICogMjtcbiAgICAgIHRoaXMud2lkdGggPSBkaWFtZXRlcjtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gZGlhbWV0ZXI7XG4gICAgICB0aGlzLnJhZGl1cyA9IDAuNSAqIHRoaXMud2lkdGg7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYW4gaW1hZ2UgaXMgcHJlc2VudCwgaS5lLiB0aGlzLmltYWdlT2JqIGlzIHZhbGlkLlxuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICB0aGlzLl9yZXNpemVJbWFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5zd2l0Y2hJbWFnZXMoc2VsZWN0ZWQpO1xuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICBsZXQgbGFiZWxYID0geCxcbiAgICAgIGxhYmVsWSA9IHk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5jb29yZGluYXRlT3JpZ2luID09PSBcInRvcC1sZWZ0XCIpIHtcbiAgICAgIHRoaXMubGVmdCA9IHg7XG4gICAgICB0aGlzLnRvcCA9IHk7XG4gICAgICBsYWJlbFggKz0gdGhpcy53aWR0aCAvIDI7XG4gICAgICBsYWJlbFkgKz0gdGhpcy5oZWlnaHQgLyAyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG4gICAgfVxuXG4gICAgLy8gZHJhdyB0aGUgYmFja2dyb3VuZCBjaXJjbGUuIElNUE9SVEFOVDogdGhlIHN0cm9rZSBpbiB0aGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSBjbGlwIG1ldGhvZCBiZWxvdy5cbiAgICB0aGlzLl9kcmF3UmF3Q2lyY2xlKGN0eCwgbGFiZWxYLCBsYWJlbFksIHZhbHVlcyk7XG5cbiAgICAvLyBub3cgd2UgZHJhdyBpbiB0aGUgY2lyY2xlLCB3ZSBzYXZlIHNvIHdlIGNhbiByZXZlcnQgdGhlIGNsaXAgb3BlcmF0aW9uIGFmdGVyIGRyYXdpbmcuXG4gICAgY3R4LnNhdmUoKTtcbiAgICAvLyBjbGlwIGlzIHVzZWQgdG8gdXNlIHRoZSBzdHJva2UgaW4gZHJhd1Jhd0NpcmNsZSBhcyBhbiBhcmVhIHRoYXQgd2UgY2FuIGRyYXcgaW4uXG4gICAgY3R4LmNsaXAoKTtcbiAgICAvLyBkcmF3IHRoZSBpbWFnZVxuICAgIHRoaXMuX2RyYXdJbWFnZUF0UG9zaXRpb24oY3R4LCB2YWx1ZXMpO1xuICAgIC8vIHJlc3RvcmUgc28gd2UgY2FuIGFnYWluIGRyYXcgb24gdGhlIGZ1bGwgY2FudmFzXG4gICAgY3R4LnJlc3RvcmUoKTtcblxuICAgIHRoaXMuX2RyYXdJbWFnZUxhYmVsKGN0eCwgbGFiZWxYLCBsYWJlbFksIHNlbGVjdGVkLCBob3Zlcik7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpO1xuICB9XG5cbiAgLy8gVE9ETzogY29tcGFyZSB3aXRoIENpcmNsZS51cGRhdGVCb3VuZGluZ0JveCgpLCBjb25zb2xpZGF0ZT8gTW9yZSBzdHVmZiBpcyBoYXBwZW5pbmcgaGVyZVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuY29vcmRpbmF0ZU9yaWdpbiA9PT0gXCJ0b3AtbGVmdFwiKSB7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSB4O1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IHggKyB0aGlzLm9wdGlvbnMuc2l6ZSAqIDI7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHkgKyB0aGlzLm9wdGlvbnMuc2l6ZSAqIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0geSAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0geCAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IHggKyB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0geSArIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGNvbXBhcmUgd2l0aCBJbWFnZS51cGRhdGVCb3VuZGluZ0JveCgpLCBjb25zb2xpZGF0ZT9cbiAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSBNYXRoLm1pbihcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCxcbiAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0XG4gICAgKTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0LFxuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQgKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGhcbiAgICApO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSxcbiAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICsgdGhpcy5sYWJlbE9mZnNldFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgpIHtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53aWR0aCAqIDAuNTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaXJjdWxhckltYWdlO1xuIiwgImltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi4vdXRpbC9Ob2RlQmFzZVwiO1xuaW1wb3J0IHsgZ2V0U2hhcGUgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjb25zdHJ1Y3RpbmcgTm9kZS9DbHVzdGVyIFNoYXBlcy5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgU2hhcGVCYXNlIGV4dGVuZHMgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZWN0ZWRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hvdmVyXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW3ZhbHVlcz17c2l6ZTogdGhpcy5vcHRpb25zLnNpemV9XVxuICAgKi9cbiAgcmVzaXplKFxuICAgIGN0eCxcbiAgICBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsXG4gICAgaG92ZXIgPSB0aGlzLmhvdmVyLFxuICAgIHZhbHVlcyA9IHsgc2l6ZTogdGhpcy5vcHRpb25zLnNpemUgfVxuICApIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5nZXRUZXh0U2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgICBjb25zdCBzaXplID0gMiAqIHZhbHVlcy5zaXplO1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMuY3VzdG9tU2l6ZVdpZHRoID8/IHNpemU7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMuY3VzdG9tU2l6ZUhlaWdodCA/PyBzaXplO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaGFwZVxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZU11bHRpcGxpZXIgLSBVbnVzZWQhIFRPRE86IFJlbW92ZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIF9kcmF3U2hhcGUoY3R4LCBzaGFwZSwgc2l6ZU11bHRpcGxpZXIsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcblxuICAgIHRoaXMuaW5pdENvbnRleHRGb3JEcmF3KGN0eCwgdmFsdWVzKTtcbiAgICBnZXRTaGFwZShzaGFwZSkoY3R4LCB4LCB5LCB2YWx1ZXMuc2l6ZSk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmljb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pY29uLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjdHguZm9udCA9XG4gICAgICAgICAgKHNlbGVjdGVkID8gXCJib2xkIFwiIDogXCJcIikgK1xuICAgICAgICAgIHRoaXMuaGVpZ2h0IC8gMiArXG4gICAgICAgICAgXCJweCBcIiArXG4gICAgICAgICAgKHRoaXMub3B0aW9ucy5pY29uLmZhY2UgfHwgXCJGb250QXdlc29tZVwiKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMub3B0aW9ucy5pY29uLmNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICAgICAgY3R4LnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuICAgICAgICBjdHguZmlsbFRleHQodGhpcy5vcHRpb25zLmljb24uY29kZSwgeCwgeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYXdFeHRlcm5hbExhYmVsOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIE5lZWQgdG8gY2FsbCBmb2xsb3dpbmcgaGVyZSBpbiBvcmRlciB0byBlbnN1cmUgdmFsdWUgZm9yXG4gICAgICAgICAgLy8gYHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5oZWlnaHRgLlxuICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGUuY2FsY3VsYXRlTGFiZWxTaXplKFxuICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICBob3ZlcixcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgXCJoYW5naW5nXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHlMYWJlbCA9XG4gICAgICAgICAgICB5ICsgMC41ICogdGhpcy5oZWlnaHQgKyAwLjUgKiB0aGlzLmxhYmVsTW9kdWxlLnNpemUuaGVpZ2h0O1xuICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHgsIHlMYWJlbCwgc2VsZWN0ZWQsIGhvdmVyLCBcImhhbmdpbmdcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgdGhpcy5ib3VuZGluZ0JveC50b3AgPSB5IC0gdGhpcy5vcHRpb25zLnNpemU7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0geCAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB4ICsgdGhpcy5vcHRpb25zLnNpemU7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSB5ICsgdGhpcy5vcHRpb25zLnNpemU7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoID4gMCkge1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnRcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0ICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoXG4gICAgICApO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20sXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmhlaWdodFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2hhcGVCYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgQ3VzdG9tU2hhcGUgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgQ3VzdG9tU2hhcGUgZXh0ZW5kcyBTaGFwZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3R4UmVuZGVyZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlLCBjdHhSZW5kZXJlcikge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlLCBjdHhSZW5kZXJlcik7XG4gICAgdGhpcy5jdHhSZW5kZXJlciA9IGN0eFJlbmRlcmVyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGRpZmZlcmVudCBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICB0aGlzLnJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgLy8gR3VhcmQgcmlnaHQgYXdheSBiZWNhdXNlIHNvbWVvbmUgbWF5IGp1c3QgZHJhdyBpbiB0aGUgZnVuY3Rpb24gaXRzZWxmLlxuICAgIGN0eC5zYXZlKCk7XG4gICAgY29uc3QgZHJhd0xhdGVyID0gdGhpcy5jdHhSZW5kZXJlcih7XG4gICAgICBjdHgsXG4gICAgICBpZDogdGhpcy5vcHRpb25zLmlkLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBzdGF0ZTogeyBzZWxlY3RlZCwgaG92ZXIgfSxcbiAgICAgIHN0eWxlOiB7IC4uLnZhbHVlcyB9LFxuICAgICAgbGFiZWw6IHRoaXMub3B0aW9ucy5sYWJlbCxcbiAgICB9KTtcbiAgICAvLyBSZW5kZXIgdGhlIG5vZGUgc2hhcGUgYmVsbG93IGFycm93cy5cbiAgICBpZiAoZHJhd0xhdGVyLmRyYXdOb2RlICE9IG51bGwpIHtcbiAgICAgIGRyYXdMYXRlci5kcmF3Tm9kZSgpO1xuICAgIH1cbiAgICBjdHgucmVzdG9yZSgpO1xuXG4gICAgaWYgKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCkge1xuICAgICAgLy8gR3VhcmQgdGhlIGV4dGVybmFsIGxhYmVsIChhYm92ZSBhcnJvd3MpIGRyYXdpbmcgZnVuY3Rpb24uXG4gICAgICBjb25zdCBkcmF3RXh0ZXJuYWxMYWJlbCA9IGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbDtcbiAgICAgIGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCA9ICgpID0+IHtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgZHJhd0V4dGVybmFsTGFiZWwoKTtcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGRyYXdMYXRlci5ub2RlRGltZW5zaW9ucykge1xuICAgICAgdGhpcy5jdXN0b21TaXplV2lkdGggPSBkcmF3TGF0ZXIubm9kZURpbWVuc2lvbnMud2lkdGg7XG4gICAgICB0aGlzLmN1c3RvbVNpemVIZWlnaHQgPSBkcmF3TGF0ZXIubm9kZURpbWVuc2lvbnMuaGVpZ2h0O1xuICAgIH1cblxuICAgIHJldHVybiBkcmF3TGF0ZXI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEN1c3RvbVNoYXBlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4uL3V0aWwvTm9kZUJhc2VcIjtcbmltcG9ydCB7IGRyYXdEYXRhYmFzZSB9IGZyb20gXCIuLi91dGlsL3NoYXBlc1wiO1xuXG4vKipcbiAqIEEgRGF0YWJhc2UgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBEYXRhYmFzZSBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKi9cbiAgcmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgICAgY29uc3Qgc2l6ZSA9IGRpbWVuc2lvbnMud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG5cbiAgICAgIHRoaXMud2lkdGggPSBzaXplO1xuICAgICAgdGhpcy5oZWlnaHQgPSBzaXplO1xuICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLndpZHRoIC8gMjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgdGhpcy5pbml0Q29udGV4dEZvckRyYXcoY3R4LCB2YWx1ZXMpO1xuICAgIGRyYXdEYXRhYmFzZShcbiAgICAgIGN0eCxcbiAgICAgIHggLSB0aGlzLndpZHRoIC8gMixcbiAgICAgIHkgLSB0aGlzLmhlaWdodCAvIDIsXG4gICAgICB0aGlzLndpZHRoLFxuICAgICAgdGhpcy5oZWlnaHRcbiAgICApO1xuICAgIHRoaXMucGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5sZWZ0ICsgdGhpcy50ZXh0U2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgdGhpcy50b3AgKyB0aGlzLnRleHRTaXplLmhlaWdodCAvIDIgKyB0aGlzLm1hcmdpbi50b3AsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGFiYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgRGlhbW9uZCBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBEaWFtb25kIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwiZGlhbW9uZFwiLCA0LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpYW1vbmQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBEb3QgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgRG90IGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwiY2lyY2xlXCIsIDIsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCkge1xuICAgIGlmIChjdHgpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEb3Q7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi4vdXRpbC9Ob2RlQmFzZVwiO1xuaW1wb3J0IHsgZHJhd0VsbGlwc2UgfSBmcm9tIFwiLi4vdXRpbC9zaGFwZXNcIjtcblxuLyoqXG4gKiBBbSBFbGxpcHNlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgRWxsaXBzZSBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCwgaG92ZXIgPSB0aGlzLmhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgICB0aGlzLmhlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0ICogMjtcbiAgICAgIHRoaXMud2lkdGggPSBkaW1lbnNpb25zLndpZHRoICsgZGltZW5zaW9ucy5oZWlnaHQ7XG4gICAgICB0aGlzLnJhZGl1cyA9IDAuNSAqIHRoaXMud2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICB0aGlzLnJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggKiAwLjU7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgKiAwLjU7XG5cbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZHJhd0VsbGlwc2UoY3R4LCB0aGlzLmxlZnQsIHRoaXMudG9wLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICBjb25zdCBhID0gdGhpcy53aWR0aCAqIDAuNTtcbiAgICBjb25zdCBiID0gdGhpcy5oZWlnaHQgKiAwLjU7XG4gICAgY29uc3QgdyA9IE1hdGguc2luKGFuZ2xlKSAqIGE7XG4gICAgY29uc3QgaCA9IE1hdGguY29zKGFuZ2xlKSAqIGI7XG4gICAgcmV0dXJuIChhICogYikgLyBNYXRoLnNxcnQodyAqIHcgKyBoICogaCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWxsaXBzZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGVCYXNlIGZyb20gXCIuLi91dGlsL05vZGVCYXNlXCI7XG5cbi8qKlxuICogQW4gaWNvbiByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgTm9kZSBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgSWNvbiBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4IC0gVW51c2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy5pY29uU2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IE51bWJlcih0aGlzLm9wdGlvbnMuaWNvbi5zaXplKSxcbiAgICAgICAgaGVpZ2h0OiBOdW1iZXIodGhpcy5vcHRpb25zLmljb24uc2l6ZSksXG4gICAgICB9O1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMuaWNvblNpemUud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMuaWNvblNpemUuaGVpZ2h0ICsgdGhpcy5tYXJnaW4udG9wICsgdGhpcy5tYXJnaW4uYm90dG9tO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMub3B0aW9ucy5pY29uLnNpemUgPSB0aGlzLm9wdGlvbnMuaWNvbi5zaXplIHx8IDUwO1xuXG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcbiAgICB0aGlzLl9pY29uKGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYXdFeHRlcm5hbExhYmVsOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGljb25UZXh0U3BhY2luZyA9IDU7XG4gICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgdGhpcy5sZWZ0ICsgdGhpcy5pY29uU2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgICAgICAgeSArIHRoaXMuaGVpZ2h0IC8gMiArIGljb25UZXh0U3BhY2luZyxcbiAgICAgICAgICAgIHNlbGVjdGVkXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goeCwgeSk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICovXG4gIHVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpIHtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHkgLSB0aGlzLm9wdGlvbnMuaWNvbi5zaXplICogMC41O1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHggLSB0aGlzLm9wdGlvbnMuaWNvbi5zaXplICogMC41O1xuICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB4ICsgdGhpcy5vcHRpb25zLmljb24uc2l6ZSAqIDAuNTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHkgKyB0aGlzLm9wdGlvbnMuaWNvbi5zaXplICogMC41O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS53aWR0aCA+IDApIHtcbiAgICAgIGNvbnN0IGljb25UZXh0U3BhY2luZyA9IDU7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0LFxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdFxuICAgICAgKTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQgKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGhcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IE1hdGgubWF4KFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSxcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUuaGVpZ2h0ICsgaWNvblRleHRTcGFjaW5nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXIgLSBVbnVzZWRcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgX2ljb24oY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIGNvbnN0IGljb25TaXplID0gTnVtYmVyKHRoaXMub3B0aW9ucy5pY29uLnNpemUpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pY29uLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3R4LmZvbnQgPSBbXG4gICAgICAgIHRoaXMub3B0aW9ucy5pY29uLndlaWdodCAhPSBudWxsXG4gICAgICAgICAgPyB0aGlzLm9wdGlvbnMuaWNvbi53ZWlnaHRcbiAgICAgICAgICA6IHNlbGVjdGVkXG4gICAgICAgICAgPyBcImJvbGRcIlxuICAgICAgICAgIDogXCJcIixcbiAgICAgICAgLy8gSWYgdGhlIHdlaWdodCBpcyBmb3JjZWQgKGZvciBleGFtcGxlIHRvIG1ha2UgRm9udCBBd2Vzb21lIDUgd29ya1xuICAgICAgICAvLyBwcm9wZXJseSkgc3Vic3RpdHV0ZSBzbGlnaHRseSBiaWdnZXIgc2l6ZSBmb3IgYm9sZCBmb250IGZhY2UuXG4gICAgICAgICh0aGlzLm9wdGlvbnMuaWNvbi53ZWlnaHQgIT0gbnVsbCAmJiBzZWxlY3RlZCA/IDUgOiAwKSArXG4gICAgICAgICAgaWNvblNpemUgK1xuICAgICAgICAgIFwicHhcIixcbiAgICAgICAgdGhpcy5vcHRpb25zLmljb24uZmFjZSxcbiAgICAgIF0uam9pbihcIiBcIik7XG5cbiAgICAgIC8vIGRyYXcgaWNvblxuICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMub3B0aW9ucy5pY29uLmNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICAgIGN0eC50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xuICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG5cbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICAgIGN0eC5maWxsVGV4dCh0aGlzLm9wdGlvbnMuaWNvbi5jb2RlLCB4LCB5KTtcblxuICAgICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiV2hlbiB1c2luZyB0aGUgaWNvbiBzaGFwZSwgeW91IG5lZWQgdG8gZGVmaW5lIHRoZSBjb2RlIGluIHRoZSBpY29uIG9wdGlvbnMgb2JqZWN0LiBUaGlzIGNhbiBiZSBkb25lIHBlciBub2RlIG9yIGdsb2JhbGx5LlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IENpcmNsZUltYWdlQmFzZSBmcm9tIFwiLi4vdXRpbC9DaXJjbGVJbWFnZUJhc2VcIjtcbmltcG9ydCB7IG92ZXJyaWRlT3BhY2l0eSB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBBbiBpbWFnZS1iYXNlZCByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgTm9kZSBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgQ2lyY2xlSW1hZ2VCYXNlXG4gKi9cbmNsYXNzIEltYWdlIGV4dGVuZHMgQ2lyY2xlSW1hZ2VCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqQWx0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSwgaW1hZ2VPYmosIGltYWdlT2JqQWx0KSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuXG4gICAgdGhpcy5zZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4IC0gVW51c2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGNvbnN0IGltYWdlQWJzZW50ID1cbiAgICAgIHRoaXMuaW1hZ2VPYmouc3JjID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuaW1hZ2VPYmoud2lkdGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5pbWFnZU9iai5oZWlnaHQgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpbWFnZUFic2VudCkge1xuICAgICAgY29uc3Qgc2lkZSA9IHRoaXMub3B0aW9ucy5zaXplICogMjtcbiAgICAgIHRoaXMud2lkdGggPSBzaWRlO1xuICAgICAgdGhpcy5oZWlnaHQgPSBzaWRlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICB0aGlzLl9yZXNpemVJbWFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgY3R4LnNhdmUoKTtcbiAgICB0aGlzLnN3aXRjaEltYWdlcyhzZWxlY3RlZCk7XG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIGxldCBsYWJlbFggPSB4LFxuICAgICAgbGFiZWxZID0geTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4gPT09IFwidG9wLWxlZnRcIikge1xuICAgICAgdGhpcy5sZWZ0ID0geDtcbiAgICAgIHRoaXMudG9wID0geTtcbiAgICAgIGxhYmVsWCArPSB0aGlzLndpZHRoIC8gMjtcbiAgICAgIGxhYmVsWSArPSB0aGlzLmhlaWdodCAvIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy51c2VCb3JkZXJXaXRoSW1hZ2UgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IG5ldXRyYWxib3JkZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbkxpbmVXaWR0aCA9XG4gICAgICAgIHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aFNlbGVjdGVkIHx8IDIgKiB0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGg7XG4gICAgICBjb25zdCBib3JkZXJXaWR0aCA9XG4gICAgICAgIChzZWxlY3RlZCA/IHNlbGVjdGlvbkxpbmVXaWR0aCA6IG5ldXRyYWxib3JkZXJXaWR0aCkgL1xuICAgICAgICB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLm1pbih0aGlzLndpZHRoLCBib3JkZXJXaWR0aCk7XG5cbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGxldCBzdHJva2VTdHlsZSA9IHNlbGVjdGVkXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5ib3JkZXJcbiAgICAgICAgOiBob3ZlclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5ib3JkZXJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuY29sb3IuYm9yZGVyO1xuICAgICAgbGV0IGZpbGxTdHlsZSA9IHNlbGVjdGVkXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kXG4gICAgICAgIDogaG92ZXJcbiAgICAgICAgPyB0aGlzLm9wdGlvbnMuY29sb3IuaG92ZXIuYmFja2dyb3VuZFxuICAgICAgICA6IHRoaXMub3B0aW9ucy5jb2xvci5iYWNrZ3JvdW5kO1xuXG4gICAgICBpZiAodmFsdWVzLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdHJva2VTdHlsZSA9IG92ZXJyaWRlT3BhY2l0eShzdHJva2VTdHlsZSwgdmFsdWVzLm9wYWNpdHkpO1xuICAgICAgICBmaWxsU3R5bGUgPSBvdmVycmlkZU9wYWNpdHkoZmlsbFN0eWxlLCB2YWx1ZXMub3BhY2l0eSk7XG4gICAgICB9XG4gICAgICAvLyBzZXR1cCB0aGUgbGluZSBwcm9wZXJ0aWVzLlxuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGU7XG5cbiAgICAgIC8vIHNldCBhIGZpbGxzdHlsZVxuICAgICAgY3R4LmZpbGxTdHlsZSA9IGZpbGxTdHlsZTtcblxuICAgICAgLy8gZHJhdyBhIHJlY3RhbmdsZSB0byBmb3JtIHRoZSBib3JkZXIgYXJvdW5kLiBUaGlzIHJlY3RhbmdsZSBpcyBmaWxsZWQgc28gdGhlIG9wYWNpdHkgb2YgYSBwaWN0dXJlIChpbiBmdXR1cmUgdmlzIHJlbGVhc2VzPykgY2FuIGJlIHVzZWQgdG8gdGludCB0aGUgaW1hZ2VcbiAgICAgIGN0eC5yZWN0KFxuICAgICAgICB0aGlzLmxlZnQgLSAwLjUgKiBjdHgubGluZVdpZHRoLFxuICAgICAgICB0aGlzLnRvcCAtIDAuNSAqIGN0eC5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMud2lkdGggKyBjdHgubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmhlaWdodCArIGN0eC5saW5lV2lkdGhcbiAgICAgICk7XG4gICAgICBjdHguZmlsbCgpO1xuXG4gICAgICB0aGlzLnBlcmZvcm1TdHJva2UoY3R4LCB2YWx1ZXMpO1xuXG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZHJhd0ltYWdlQXRQb3NpdGlvbihjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLl9kcmF3SW1hZ2VMYWJlbChjdHgsIGxhYmVsWCwgbGFiZWxZLCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5KTtcbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4gPT09IFwidG9wLWxlZnRcIikge1xuICAgICAgdGhpcy5sZWZ0ID0geDtcbiAgICAgIHRoaXMudG9wID0geTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuICAgIH1cblxuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHRoaXMubGVmdDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHRoaXMudG9wO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0gdGhpcy50b3AgKyB0aGlzLmhlaWdodDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gdGhpcy5sZWZ0ICsgdGhpcy53aWR0aDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGggPiAwKSB7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0LFxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdFxuICAgICAgKTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQgKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGhcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IE1hdGgubWF4KFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSxcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gKyB0aGlzLmxhYmVsT2Zmc2V0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2U7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBTcXVhcmUgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgU3F1YXJlIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwic3F1YXJlXCIsIDIsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3F1YXJlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgSGV4YWdvbiBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBIZXhhZ29uIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwiaGV4YWdvblwiLCA0LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhleGFnb247XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBTdGFyIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFN0YXIgZXh0ZW5kcyBTaGFwZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhd1NoYXBlKGN0eCwgXCJzdGFyXCIsIDQsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGVCYXNlIGZyb20gXCIuLi91dGlsL05vZGVCYXNlXCI7XG5cbi8qKlxuICogQSB0ZXh0LWJhc2VkIHJlcGxhY2VtZW50IGZvciB0aGUgZGVmYXVsdCBOb2RlIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBUZXh0IGV4dGVuZHMgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICAgIHRoaXMuX3NldE1hcmdpbnMobGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy50ZXh0U2l6ZSA9IHRoaXMubGFiZWxNb2R1bGUuZ2V0VGV4dFNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMudGV4dFNpemUud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMudGV4dFNpemUuaGVpZ2h0ICsgdGhpcy5tYXJnaW4udG9wICsgdGhpcy5tYXJnaW4uYm90dG9tO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgdGhpcy5lbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMubGVmdCArIHRoaXMudGV4dFNpemUud2lkdGggLyAyICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgIHRoaXMudG9wICsgdGhpcy50ZXh0U2l6ZS5oZWlnaHQgLyAyICsgdGhpcy5tYXJnaW4udG9wLFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBob3ZlclxuICAgICk7XG5cbiAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNoYXBlQmFzZSBmcm9tIFwiLi4vdXRpbC9TaGFwZUJhc2VcIjtcblxuLyoqXG4gKiBBIFRyaWFuZ2xlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFRyaWFuZ2xlIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhd1NoYXBlKGN0eCwgXCJ0cmlhbmdsZVwiLCAzLCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyaWFuZ2xlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgZG93bndhcmQgZmFjaW5nIFRyaWFuZ2xlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFRyaWFuZ2xlRG93biBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShcbiAgICAgIGN0eCxcbiAgICAgIFwidHJpYW5nbGVEb3duXCIsXG4gICAgICAzLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyLFxuICAgICAgdmFsdWVzXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJpYW5nbGVEb3duO1xuIiwgImltcG9ydCB7XG4gIFZBTElEQVRPUl9QUklOVF9TVFlMRSxcbiAgYnJpZGdlT2JqZWN0LFxuICBmaWxsSWZEZWZpbmVkLFxuICBtZXJnZU9wdGlvbnMsXG4gIG92ZXJyaWRlT3BhY2l0eSxcbiAgcGFyc2VDb2xvcixcbiAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZCxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG5pbXBvcnQgTGFiZWwgZnJvbSBcIi4vc2hhcmVkL0xhYmVsXCI7XG5pbXBvcnQgeyBjaG9vc2lmeSwgcG9pbnRJblJlY3QgfSBmcm9tIFwiLi9zaGFyZWQvQ29tcG9uZW50VXRpbFwiO1xuaW1wb3J0IEJveCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvQm94XCI7XG5pbXBvcnQgQ2lyY2xlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9DaXJjbGVcIjtcbmltcG9ydCBDaXJjdWxhckltYWdlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9DaXJjdWxhckltYWdlXCI7XG5pbXBvcnQgQ3VzdG9tU2hhcGUgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0N1c3RvbVNoYXBlXCI7XG5pbXBvcnQgRGF0YWJhc2UgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0RhdGFiYXNlXCI7XG5pbXBvcnQgRGlhbW9uZCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvRGlhbW9uZFwiO1xuaW1wb3J0IERvdCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvRG90XCI7XG5pbXBvcnQgRWxsaXBzZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvRWxsaXBzZVwiO1xuaW1wb3J0IEljb24gZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0ljb25cIjtcbmltcG9ydCBJbWFnZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvSW1hZ2VcIjtcbmltcG9ydCBTcXVhcmUgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL1NxdWFyZVwiO1xuaW1wb3J0IEhleGFnb24gZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0hleGFnb25cIjtcbmltcG9ydCBTdGFyIGZyb20gXCIuL25vZGVzL3NoYXBlcy9TdGFyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvVGV4dFwiO1xuaW1wb3J0IFRyaWFuZ2xlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9UcmlhbmdsZVwiO1xuaW1wb3J0IFRyaWFuZ2xlRG93biBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvVHJpYW5nbGVEb3duXCI7XG5cbi8qKlxuICogQSBub2RlLiBBIG5vZGUgY2FuIGJlIGNvbm5lY3RlZCB0byBvdGhlciBub2RlcyB2aWEgb25lIG9yIG11bHRpcGxlIGVkZ2VzLlxuICovXG5jbGFzcyBOb2RlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIEFuIG9iamVjdCBjb250YWluaW5nIG9wdGlvbnMgZm9yIHRoZSBub2RlLiBBbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyBhcmUgb3B0aW9uYWwsIGV4Y2VwdCBmb3IgdGhlIGlkLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGlkICAgICBJZCBvZiB0aGUgbm9kZS4gUmVxdWlyZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBsYWJlbCAgVGV4dCBsYWJlbCBmb3IgdGhlIG5vZGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSB4ICAgICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgbm9kZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IHkgICAgICBWZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgbm9kZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IHNoYXBlICBOb2RlIHNoYXBlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gaW1hZ2UgIEFuIGltYWdlIHVybFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IHRpdGxlICBBIHRpdGxlIHRleHQsIGNhbiBiZSBIVE1MXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FueXR5cGV9IGdyb3VwIEEgZ3JvdXAgbmFtZSBvciBudW1iZXJcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgICAgICAgICAgICAgICBTaGFyZWQgc3RhdGUgb2YgY3VycmVudCBuZXR3b3JrIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7TmV0d29yay5JbWFnZXN9IGltYWdlbGlzdCAgQSBsaXN0IHdpdGggaW1hZ2VzLiBPbmx5IG5lZWRlZCB3aGVuIHRoZSBub2RlIGhhcyBhbiBpbWFnZVxuICAgKiBAcGFyYW0ge0dyb3Vwc30gZ3JvdXBsaXN0ICAgICAgICAgIEEgbGlzdCB3aXRoIGdyb3Vwcy4gTmVlZGVkIGZvciByZXRyaWV2aW5nIGdyb3VwIG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnMgICAgICBDdXJyZW50IGdsb2JhbCBub2RlIG9wdGlvbnM7IHRoZXNlIHNlcnZlIGFzIGRlZmF1bHRzIGZvciB0aGUgbm9kZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdE9wdGlvbnMgICAgIEdsb2JhbCBkZWZhdWx0IG9wdGlvbnMgZm9yIG5vZGVzOyBub3RlIHRoYXQgdGhpcyBpcyBhbHNvIHRoZSBwcm90b3R5cGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGBnbG9iYWxPcHRpb25zYC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnMsXG4gICAgYm9keSxcbiAgICBpbWFnZWxpc3QsXG4gICAgZ3JvdXBsaXN0LFxuICAgIGdsb2JhbE9wdGlvbnMsXG4gICAgZGVmYXVsdE9wdGlvbnNcbiAgKSB7XG4gICAgdGhpcy5vcHRpb25zID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMpO1xuICAgIHRoaXMuZ2xvYmFsT3B0aW9ucyA9IGdsb2JhbE9wdGlvbnM7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG5cbiAgICB0aGlzLmVkZ2VzID0gW107IC8vIGFsbCBlZGdlcyBjb25uZWN0ZWQgdG8gdGhpcyBub2RlXG5cbiAgICAvLyBzZXQgZGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zXG4gICAgdGhpcy5pZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmltYWdlbGlzdCA9IGltYWdlbGlzdDtcbiAgICB0aGlzLmdyb3VwbGlzdCA9IGdyb3VwbGlzdDtcblxuICAgIC8vIHN0YXRlIG9wdGlvbnNcbiAgICB0aGlzLnggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy55ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYmFzZVNpemUgPSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJhc2VGb250U2l6ZSA9IHRoaXMub3B0aW9ucy5mb250LnNpemU7XG4gICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSBmYWxzZTsgLy8gdXNlZCB0byBjaGVjayBpZiBpbml0aWFsIGZpdCBzaG91bGQganVzdCB0YWtlIHRoZSByYW5nZSBvciBhcHByb3hpbWF0ZVxuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhvdmVyID0gZmFsc2U7XG5cbiAgICB0aGlzLmxhYmVsTW9kdWxlID0gbmV3IExhYmVsKFxuICAgICAgdGhpcy5ib2R5LFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgZmFsc2UgLyogTm90IGVkZ2UgbGFiZWwgKi9cbiAgICApO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSBlZGdlIHRvIHRoZSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKi9cbiAgYXR0YWNoRWRnZShlZGdlKSB7XG4gICAgaWYgKHRoaXMuZWRnZXMuaW5kZXhPZihlZGdlKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZWRnZXMucHVzaChlZGdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0YWNoIGEgZWRnZSBmcm9tIHRoZSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKi9cbiAgZGV0YWNoRWRnZShlZGdlKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmVkZ2VzLmluZGV4T2YoZWRnZSk7XG4gICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICB0aGlzLmVkZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBvciBvdmVyd3JpdGUgb3B0aW9ucyBmb3IgdGhlIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgYW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7bnVsbHxib29sZWFufVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgY29uc3QgY3VycmVudFNoYXBlID0gdGhpcy5vcHRpb25zLnNoYXBlO1xuXG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm47IC8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgJ3VuZGVmaW5lZCchIFRoaXMgaXMgT0suXG4gICAgfVxuXG4gICAgLy8gU2F2ZSB0aGUgY29sb3IgZm9yIGxhdGVyLlxuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHByZXZlbnQgbG9jYWwgY29sb3IgZnJvbSBiZWluZyBvdmVyd3JpdHRlbiBieSBncm91cCBjb2xvci5cbiAgICAvLyBUT0RPOiBUbyBwcmV2ZW50IHN1Y2ggd29ya2Fyb3VuZHMgdGhlIHdheSBvcHRpb25zIGFyZSBoYW5kbGVkIHNob3VsZCBiZSByZXdyaXR0ZW4gZnJvbSBzY3JhdGNoLlxuICAgIC8vIFRoaXMgaXMgbm90IHRoZSBvbmx5IHByb2JsZW0gd2l0aCBjdXJyZW50IG9wdGlvbnMgaGFuZGxpbmcuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbG9yICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLl9sb2NhbENvbG9yID0gb3B0aW9ucy5jb2xvcjtcbiAgICB9XG5cbiAgICAvLyBiYXNpYyBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pZCA9IG9wdGlvbnMuaWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm9kZSBtdXN0IGhhdmUgYW4gaWRcIik7XG4gICAgfVxuXG4gICAgTm9kZS5jaGVja01hc3Mob3B0aW9ucywgdGhpcy5pZCk7XG5cbiAgICAvLyBzZXQgdGhlc2Ugb3B0aW9ucyBsb2NhbGx5XG4gICAgLy8gY2xlYXIgeCBhbmQgeSBwb3NpdGlvbnNcbiAgICBpZiAob3B0aW9ucy54ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLnggPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy54ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnByZWRlZmluZWRQb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy54ID0gcGFyc2VJbnQob3B0aW9ucy54KTtcbiAgICAgICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy55ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLnkgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy55ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnByZWRlZmluZWRQb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy55ID0gcGFyc2VJbnQob3B0aW9ucy55KTtcbiAgICAgICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYmFzZVNpemUgPSBvcHRpb25zLnNpemU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMudmFsdWUgPSBwYXJzZUZsb2F0KG9wdGlvbnMudmFsdWUpO1xuICAgIH1cblxuICAgIC8vIHRoaXMgdHJhbnNmb3JtcyBhbGwgc2hvcnRoYW5kcyBpbnRvIGZ1bGx5IGRlZmluZWQgb3B0aW9uc1xuICAgIE5vZGUucGFyc2VPcHRpb25zKFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHRydWUsXG4gICAgICB0aGlzLmdsb2JhbE9wdGlvbnMsXG4gICAgICB0aGlzLmdyb3VwbGlzdFxuICAgICk7XG5cbiAgICBjb25zdCBwaWxlID0gW29wdGlvbnMsIHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9uc107XG4gICAgdGhpcy5jaG9vc2VyID0gY2hvb3NpZnkoXCJub2RlXCIsIHBpbGUpO1xuXG4gICAgdGhpcy5fbG9hZF9pbWFnZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKG9wdGlvbnMpO1xuXG4gICAgLy8gTmVlZCB0byBzZXQgbG9jYWwgb3BhY2l0eSBhZnRlciBgdGhpcy51cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKTtgIGJlY2F1c2UgYHRoaXMudXBkYXRlTGFiZWxNb2R1bGUob3B0aW9ucyk7YCBvdmVycml0ZXMgbG9jYWwgb3BhY2l0eSB3aXRoIGdyb3VwIG9wYWNpdHlcbiAgICBpZiAob3B0aW9ucy5vcGFjaXR5ICE9PSB1bmRlZmluZWQgJiYgTm9kZS5jaGVja09wYWNpdHkob3B0aW9ucy5vcGFjaXR5KSkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wYWNpdHkgPSBvcHRpb25zLm9wYWNpdHk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTaGFwZShjdXJyZW50U2hhcGUpO1xuXG4gICAgcmV0dXJuIG9wdGlvbnMuaGlkZGVuICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5waHlzaWNzICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW1hZ2VzIGZyb20gdGhlIG9wdGlvbnMsIGZvciB0aGUgbm9kZXMgdGhhdCBuZWVkIHRoZW0uXG4gICAqXG4gICAqIEltYWdlcyBhcmUgYWx3YXlzIGxvYWRlZCwgZXZlbiBpZiB0aGV5IGFyZSBub3QgdXNlZCBpbiB0aGUgY3VycmVudCBzaGFwZS5cbiAgICogVGhlIHVzZXIgbWF5IHN3aXRjaCB0byBhbiBpbWFnZSBzaGFwZSBsYXRlciBvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkX2ltYWdlcygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnMuc2hhcGUgPT09IFwiY2lyY3VsYXJJbWFnZVwiIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuc2hhcGUgPT09IFwiaW1hZ2VcIlxuICAgICkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbWFnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIk9wdGlvbiBpbWFnZSBtdXN0IGJlIGRlZmluZWQgZm9yIG5vZGUgdHlwZSAnXCIgK1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNoYXBlICtcbiAgICAgICAgICAgIFwiJ1wiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pbWFnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW1hZ2VsaXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludGVybmFsIEVycm9yOiBObyBpbWFnZXMgcHJvdmlkZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuaW1hZ2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuaW1hZ2VPYmogPSB0aGlzLmltYWdlbGlzdC5sb2FkKFxuICAgICAgICB0aGlzLm9wdGlvbnMuaW1hZ2UsXG4gICAgICAgIHRoaXMub3B0aW9ucy5icm9rZW5JbWFnZSxcbiAgICAgICAgdGhpcy5pZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbWFnZS51bnNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdW5zZWxlY3RlZCBpbWFnZSBwcm92aWRlZFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbWFnZU9iaiA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQoXG4gICAgICAgIHRoaXMub3B0aW9ucy5pbWFnZS51bnNlbGVjdGVkLFxuICAgICAgICB0aGlzLm9wdGlvbnMuYnJva2VuSW1hZ2UsXG4gICAgICAgIHRoaXMuaWRcbiAgICAgICk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2Uuc2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmltYWdlT2JqQWx0ID0gdGhpcy5pbWFnZWxpc3QubG9hZChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuaW1hZ2Uuc2VsZWN0ZWQsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmJyb2tlbkltYWdlLFxuICAgICAgICAgIHRoaXMuaWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgb3BhY2l0eSBpcyBvbmx5IGJldHdlZW4gMCBhbmQgMVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gb3BhY2l0eVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBjaGVja09wYWNpdHkob3BhY2l0eSkge1xuICAgIHJldHVybiAwIDw9IG9wYWNpdHkgJiYgb3BhY2l0eSA8PSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgb3JpZ2luIGlzICdjZW50ZXInIG9yICd0b3AtbGVmdCdcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBjaGVja0Nvb3JkaW5hdGVPcmlnaW4ob3JpZ2luKSB7XG4gICAgcmV0dXJuIG9yaWdpbiA9PT0gdW5kZWZpbmVkIHx8IG9yaWdpbiA9PT0gXCJjZW50ZXJcIiB8fCBvcmlnaW4gPT09IFwidG9wLWxlZnRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IGdyb3VwIG9wdGlvbiB2YWx1ZXMgaW50byB0aGUgbm9kZSBvcHRpb25zLlxuICAgKlxuICAgKiBUaGUgZ3JvdXAgb3B0aW9ucyBvdmVycmlkZSB0aGUgZ2xvYmFsIG5vZGUgb3B0aW9ucywgc28gdGhlIGNvcHkgb2YgZ3JvdXAgb3B0aW9uc1xuICAgKiAgbXVzdCBoYXBwZW4gKmFmdGVyKiB0aGUgZ2xvYmFsIG5vZGUgb3B0aW9ucyBoYXZlIGJlZW4gc2V0LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBtdXN0IGFsc28gYmUgY2FsbGVkIGFsc28gaWYgdGhlIGdsb2JhbCBub2RlIG9wdGlvbnMgaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgZ3JvdXAgb3B0aW9ucyBkaWQgbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50T3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9ucyAgbmV3IHZhbHVlcyBmb3IgdGhlIG9wdGlvbnMsIGN1cnJlbnRseSBvbmx5IHBhc3NlZCBpbiBmb3IgY2hlY2tcbiAgICogQHBhcmFtIHtvYmplY3R9IGdyb3VwTGlzdFxuICAgKi9cbiAgc3RhdGljIHVwZGF0ZUdyb3VwT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBncm91cExpc3QpIHtcbiAgICBpZiAoZ3JvdXBMaXN0ID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gTm8gZ3JvdXBzLCBub3RoaW5nIHRvIGRvXG5cbiAgICBjb25zdCBncm91cCA9IHBhcmVudE9wdGlvbnMuZ3JvdXA7XG5cbiAgICAvLyBwYXJhbm9pYTogdGhlIHNlbGVjdGVkIGdyb3VwIGlzIGFscmVhZHkgbWVyZ2VkIGludG8gbm9kZSBvcHRpb25zLCBjaGVjay5cbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG5ld09wdGlvbnMuZ3JvdXAgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgZ3JvdXAgIT09IG5ld09wdGlvbnMuZ3JvdXBcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJ1cGRhdGVHcm91cE9wdGlvbnM6IGdyb3VwIHZhbHVlcyBpbiBvcHRpb25zIGRvbid0IG1hdGNoLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0dyb3VwID1cbiAgICAgIHR5cGVvZiBncm91cCA9PT0gXCJudW1iZXJcIiB8fCAodHlwZW9mIGdyb3VwID09PSBcInN0cmluZ1wiICYmIGdyb3VwICE9IFwiXCIpO1xuICAgIGlmICghaGFzR3JvdXApIHJldHVybjsgLy8gY3VycmVudCBub2RlIGhhcyBubyBncm91cCwgbm8gbmVlZCB0byBtZXJnZVxuXG4gICAgY29uc3QgZ3JvdXBPYmogPSBncm91cExpc3QuZ2V0KGdyb3VwKTtcblxuICAgIGlmIChncm91cE9iai5vcGFjaXR5ICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5vcGFjaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghTm9kZS5jaGVja09wYWNpdHkoZ3JvdXBPYmoub3BhY2l0eSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIG9wYWNpdHkuIFZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBmb3VuZDogXCIgK1xuICAgICAgICAgICAgZ3JvdXBPYmoub3BhY2l0eVxuICAgICAgICApO1xuICAgICAgICBncm91cE9iai5vcGFjaXR5ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNraXAgYW55IG5ldyBvcHRpb24gdG8gYXZvaWQgdGhlbSBiZWluZyBvdmVycmlkZGVuIGJ5IHRoZSBncm91cCBvcHRpb25zLlxuICAgIGNvbnN0IHNraXBQcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobmV3T3B0aW9ucykuZmlsdGVyKFxuICAgICAgKHApID0+IG5ld09wdGlvbnNbcF0gIT0gbnVsbFxuICAgICk7XG4gICAgLy8gQWx3YXlzIHNraXAgbWVyZ2luZyBncm91cCBmb250IG9wdGlvbnMgaW50byBwYXJlbnQ7IHRoZXNlIGFyZSByZXF1aXJlZCB0byBiZSBkaXN0aW5jdCBmb3IgbGFiZWxzXG4gICAgc2tpcFByb3BlcnRpZXMucHVzaChcImZvbnRcIik7XG4gICAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZChza2lwUHJvcGVydGllcywgcGFyZW50T3B0aW9ucywgZ3JvdXBPYmopO1xuXG4gICAgLy8gdGhlIGNvbG9yIG9iamVjdCBuZWVkcyB0byBiZSBjb21wbGV0ZWx5IGRlZmluZWQuXG4gICAgLy8gU2luY2UgZ3JvdXBzIGNhbiBwYXJ0aWFsbHkgb3ZlcndyaXRlIHRoZSBjb2xvcnMsIHdlIHBhcnNlIGl0IGFnYWluLCBqdXN0IGluIGNhc2UuXG4gICAgcGFyZW50T3B0aW9ucy5jb2xvciA9IHBhcnNlQ29sb3IocGFyZW50T3B0aW9ucy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9jZXNzIGFsbCBwb3NzaWJsZSBzaG9ydGhhbmRzIGluIHRoZSBuZXcgb3B0aW9ucyBhbmQgbWFrZXMgc3VyZSB0aGF0IHRoZSBwYXJlbnRPcHRpb25zIGFyZSBmdWxseSBkZWZpbmVkLlxuICAgKiBTdGF0aWMgc28gaXQgY2FuIGFsc28gYmUgdXNlZCBieSB0aGUgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld09wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dEZWxldGlvbj1mYWxzZV1cbiAgICogQHBhcmFtIHtvYmplY3R9IFtnbG9iYWxPcHRpb25zPXt9XVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2dyb3VwTGlzdF1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHBhcnNlT3B0aW9ucyhcbiAgICBwYXJlbnRPcHRpb25zLFxuICAgIG5ld09wdGlvbnMsXG4gICAgYWxsb3dEZWxldGlvbiA9IGZhbHNlLFxuICAgIGdsb2JhbE9wdGlvbnMgPSB7fSxcbiAgICBncm91cExpc3RcbiAgKSB7XG4gICAgY29uc3QgZmllbGRzID0gW1wiY29sb3JcIiwgXCJmaXhlZFwiLCBcInNoYWRvd1wiXTtcbiAgICBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kKGZpZWxkcywgcGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgYWxsb3dEZWxldGlvbik7XG5cbiAgICBOb2RlLmNoZWNrTWFzcyhuZXdPcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnRPcHRpb25zLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFOb2RlLmNoZWNrT3BhY2l0eShwYXJlbnRPcHRpb25zLm9wYWNpdHkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIG9wdGlvbiBmb3Igbm9kZSBvcGFjaXR5LiBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZm91bmQ6IFwiICtcbiAgICAgICAgICAgIHBhcmVudE9wdGlvbnMub3BhY2l0eVxuICAgICAgICApO1xuICAgICAgICBwYXJlbnRPcHRpb25zLm9wYWNpdHkgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5ld09wdGlvbnMub3BhY2l0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIU5vZGUuY2hlY2tPcGFjaXR5KG5ld09wdGlvbnMub3BhY2l0eSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIG9wYWNpdHkuIFZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBmb3VuZDogXCIgK1xuICAgICAgICAgICAgbmV3T3B0aW9ucy5vcGFjaXR5XG4gICAgICAgICk7XG4gICAgICAgIG5ld09wdGlvbnMub3BhY2l0eSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zLnNoYXBlUHJvcGVydGllcyAmJlxuICAgICAgIU5vZGUuY2hlY2tDb29yZGluYXRlT3JpZ2luKG5ld09wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4pXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIGNvb3JkaW5hdGVPcmlnaW4sIGZvdW5kOiBcIiArXG4gICAgICAgICAgbmV3T3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuY29vcmRpbmF0ZU9yaWdpblxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBtZXJnZSB0aGUgc2hhZG93IG9wdGlvbnMgaW50byB0aGUgcGFyZW50LlxuICAgIG1lcmdlT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBcInNoYWRvd1wiLCBnbG9iYWxPcHRpb25zKTtcblxuICAgIC8vIGluZGl2aWR1YWwgc2hhcGUgbmV3T3B0aW9uc1xuICAgIGlmIChuZXdPcHRpb25zLmNvbG9yICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5jb2xvciAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcGFyc2VkQ29sb3IgPSBwYXJzZUNvbG9yKG5ld09wdGlvbnMuY29sb3IpO1xuICAgICAgZmlsbElmRGVmaW5lZChwYXJlbnRPcHRpb25zLmNvbG9yLCBwYXJzZWRDb2xvcik7XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuY29sb3IgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuY29sb3IgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5jb2xvcik7IC8vIHNldCB0aGUgb2JqZWN0IGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb25zXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRoZSBmaXhlZCBvcHRpb25zXG4gICAgaWYgKG5ld09wdGlvbnMuZml4ZWQgIT09IHVuZGVmaW5lZCAmJiBuZXdPcHRpb25zLmZpeGVkICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld09wdGlvbnMuZml4ZWQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZml4ZWQueCA9IG5ld09wdGlvbnMuZml4ZWQ7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZml4ZWQueSA9IG5ld09wdGlvbnMuZml4ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV3T3B0aW9ucy5maXhlZC54ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0eXBlb2YgbmV3T3B0aW9ucy5maXhlZC54ID09PSBcImJvb2xlYW5cIlxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJlbnRPcHRpb25zLmZpeGVkLnggPSBuZXdPcHRpb25zLmZpeGVkLng7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5ld09wdGlvbnMuZml4ZWQueSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdHlwZW9mIG5ld09wdGlvbnMuZml4ZWQueSA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5maXhlZC55ID0gbmV3T3B0aW9ucy5maXhlZC55O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5mb250ID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmZvbnQgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5mb250KTsgLy8gc2V0IHRoZSBvYmplY3QgYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbnNcbiAgICB9XG5cbiAgICBOb2RlLnVwZGF0ZUdyb3VwT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBncm91cExpc3QpO1xuXG4gICAgLy8gaGFuZGxlIHRoZSBzY2FsaW5nIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgbGFiZWwgcGFydFxuICAgIGlmIChuZXdPcHRpb25zLnNjYWxpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbWVyZ2VPcHRpb25zKFxuICAgICAgICBwYXJlbnRPcHRpb25zLnNjYWxpbmcsXG4gICAgICAgIG5ld09wdGlvbnMuc2NhbGluZyxcbiAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICBnbG9iYWxPcHRpb25zLnNjYWxpbmdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHt7Y29sb3I6ICosIGJvcmRlcldpZHRoOiAqLCBib3JkZXJDb2xvcjogKiwgc2l6ZTogKiwgYm9yZGVyRGFzaGVzOiAoYm9vbGVhbnxBcnJheXxhbGxPcHRpb25zLm5vZGVzLnNoYXBlUHJvcGVydGllcy5ib3JkZXJEYXNoZXN8e2Jvb2xlYW4sIGFycmF5fSksIGJvcmRlclJhZGl1czogKG51bWJlcnxhbGxPcHRpb25zLm5vZGVzLnNoYXBlUHJvcGVydGllcy5ib3JkZXJSYWRpdXN8e251bWJlcn18QXJyYXkpLCBzaGFkb3c6ICosIHNoYWRvd0NvbG9yOiAqLCBzaGFkb3dTaXplOiAqLCBzaGFkb3dYOiAqLCBzaGFkb3dZOiAqfX1cbiAgICovXG4gIGdldEZvcm1hdHRpbmdWYWx1ZXMoKSB7XG4gICAgY29uc3QgdmFsdWVzID0ge1xuICAgICAgY29sb3I6IHRoaXMub3B0aW9ucy5jb2xvci5iYWNrZ3JvdW5kLFxuICAgICAgb3BhY2l0eTogdGhpcy5vcHRpb25zLm9wYWNpdHksXG4gICAgICBib3JkZXJXaWR0aDogdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoLFxuICAgICAgYm9yZGVyQ29sb3I6IHRoaXMub3B0aW9ucy5jb2xvci5ib3JkZXIsXG4gICAgICBzaXplOiB0aGlzLm9wdGlvbnMuc2l6ZSxcbiAgICAgIGJvcmRlckRhc2hlczogdGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5ib3JkZXJEYXNoZXMsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzLFxuICAgICAgc2hhZG93OiB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQsXG4gICAgICBzaGFkb3dDb2xvcjogdGhpcy5vcHRpb25zLnNoYWRvdy5jb2xvcixcbiAgICAgIHNoYWRvd1NpemU6IHRoaXMub3B0aW9ucy5zaGFkb3cuc2l6ZSxcbiAgICAgIHNoYWRvd1g6IHRoaXMub3B0aW9ucy5zaGFkb3cueCxcbiAgICAgIHNoYWRvd1k6IHRoaXMub3B0aW9ucy5zaGFkb3cueSxcbiAgICB9O1xuICAgIGlmICh0aGlzLnNlbGVjdGVkIHx8IHRoaXMuaG92ZXIpIHtcbiAgICAgIGlmICh0aGlzLmNob29zZXIgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJvcmRlcldpZHRoU2VsZWN0ZWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsdWVzLmJvcmRlcldpZHRoID0gdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoU2VsZWN0ZWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlcy5ib3JkZXJXaWR0aCAqPSAyO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZXMuY29sb3IgPSB0aGlzLm9wdGlvbnMuY29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQ7XG4gICAgICAgICAgdmFsdWVzLmJvcmRlckNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5ib3JkZXI7XG4gICAgICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhvdmVyKSB7XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJhY2tncm91bmQ7XG4gICAgICAgICAgdmFsdWVzLmJvcmRlckNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJvcmRlcjtcbiAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNob29zZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLmNob29zZXIodmFsdWVzLCB0aGlzLm9wdGlvbnMuaWQsIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuICAgICAgICBpZiAodmFsdWVzLnNoYWRvdyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93Q29sb3IgIT09IHRoaXMub3B0aW9ucy5zaGFkb3cuY29sb3IgfHxcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dTaXplICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LnNpemUgfHxcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dYICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LnggfHxcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dZICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LnlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3cgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IHRoaXMub3B0aW9ucy5vcGFjaXR5O1xuICAgICAgdmFsdWVzLmJvcmRlckNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KHZhbHVlcy5ib3JkZXJDb2xvciwgb3BhY2l0eSk7XG4gICAgICB2YWx1ZXMuY29sb3IgPSBvdmVycmlkZU9wYWNpdHkodmFsdWVzLmNvbG9yLCBvcGFjaXR5KTtcbiAgICAgIHZhbHVlcy5zaGFkb3dDb2xvciA9IG92ZXJyaWRlT3BhY2l0eSh2YWx1ZXMuc2hhZG93Q29sb3IsIG9wYWNpdHkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICB1cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMub3B0aW9ucy5sYWJlbCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5vcHRpb25zLmxhYmVsID0gXCJcIjtcbiAgICB9XG5cbiAgICBOb2RlLnVwZGF0ZUdyb3VwT3B0aW9ucyhcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgY29sb3I6IChvcHRpb25zICYmIG9wdGlvbnMuY29sb3IpIHx8IHRoaXMuX2xvY2FsQ29sb3IgfHwgdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHRoaXMuZ3JvdXBsaXN0XG4gICAgKTtcblxuICAgIC8vXG4gICAgLy8gTm90ZTpUaGUgcHJvdG90eXBlIGNoYWluIGZvciB0aGlzLm9wdGlvbnMgaXM6XG4gICAgLy9cbiAgICAvLyB0aGlzLm9wdGlvbnMgLT4gICAgTm9kZXNIYW5kbGVyLm9wdGlvbnMgICAgLT4gTm9kZXNIYW5kbGVyLmRlZmF1bHRPcHRpb25zXG4gICAgLy8gICAgICAgICAgICAgICAgIChhbHNvOiB0aGlzLmdsb2JhbE9wdGlvbnMpXG4gICAgLy9cbiAgICAvLyBOb3RlIHRoYXQgdGhlIHByb3RvdHlwZXMgYXJlIG1lbnRpb25lZCBleHBsaWNpdGx5IGluIHRoZSBwaWxlIGxpc3QgYmVsb3c7XG4gICAgLy8gV0UgRE9OJ1QgV0FOVCBUSEUgT1JERVIgT0YgVEhFIFBST1RPVFlQRVMhISEhIEF0IGxlYXN0LCBub3QgZm9yIGZvbnQgaGFuZGxpbmcgb2YgbGFiZWxzLlxuICAgIC8vIFRoaXMgaXMgYSBnb29kIGluZGljYXRpb24gdGhhdCB0aGUgcHJvdG90eXBlIHVzYWdlIG9mIG9wdGlvbnMgaXMgZGVmaWNpZW50LlxuICAgIC8vXG4gICAgY29uc3QgY3VycmVudEdyb3VwID0gdGhpcy5ncm91cGxpc3QuZ2V0KHRoaXMub3B0aW9ucy5ncm91cCwgZmFsc2UpO1xuICAgIGNvbnN0IHBpbGUgPSBbXG4gICAgICBvcHRpb25zLCAvLyBuZXcgb3B0aW9uc1xuICAgICAgdGhpcy5vcHRpb25zLCAvLyBjdXJyZW50IG5vZGUgb3B0aW9ucywgc2VlIGNvbW1lbnQgYWJvdmUgZm9yIHByb3RvdHlwZVxuICAgICAgY3VycmVudEdyb3VwLCAvLyBncm91cCBvcHRpb25zLCBpZiBhbnlcbiAgICAgIHRoaXMuZ2xvYmFsT3B0aW9ucywgLy8gQ3VycmVudGx5IHNldCBnbG9iYWwgbm9kZSBvcHRpb25zXG4gICAgICB0aGlzLmRlZmF1bHRPcHRpb25zLCAvLyBEZWZhdWx0IGdsb2JhbCBub2RlIG9wdGlvbnNcbiAgICBdO1xuICAgIHRoaXMubGFiZWxNb2R1bGUudXBkYXRlKHRoaXMub3B0aW9ucywgcGlsZSk7XG5cbiAgICBpZiAodGhpcy5sYWJlbE1vZHVsZS5iYXNlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJhc2VGb250U2l6ZSA9IHRoaXMubGFiZWxNb2R1bGUuYmFzZVNpemU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50U2hhcGVcbiAgICovXG4gIHVwZGF0ZVNoYXBlKGN1cnJlbnRTaGFwZSkge1xuICAgIGlmIChjdXJyZW50U2hhcGUgPT09IHRoaXMub3B0aW9ucy5zaGFwZSAmJiB0aGlzLnNoYXBlKSB7XG4gICAgICB0aGlzLnNoYXBlLnNldE9wdGlvbnModGhpcy5vcHRpb25zLCB0aGlzLmltYWdlT2JqLCB0aGlzLmltYWdlT2JqQWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2hvb3NlIGRyYXcgbWV0aG9kIGRlcGVuZGluZyBvbiB0aGUgc2hhcGVcbiAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLnNoYXBlKSB7XG4gICAgICAgIGNhc2UgXCJib3hcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEJveCh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjaXJjbGVcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IENpcmNsZSh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjaXJjdWxhckltYWdlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBDaXJjdWxhckltYWdlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZSxcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VPYmosXG4gICAgICAgICAgICB0aGlzLmltYWdlT2JqQWx0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImN1c3RvbVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgQ3VzdG9tU2hhcGUoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmN0eFJlbmRlcmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRhdGFiYXNlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBEYXRhYmFzZSh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkaWFtb25kXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBEaWFtb25kKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRvdFwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgRG90KHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImVsbGlwc2VcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEVsbGlwc2UodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaWNvblwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgSWNvbih0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgSW1hZ2UoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLFxuICAgICAgICAgICAgdGhpcy5pbWFnZU9iaixcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VPYmpBbHRcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3F1YXJlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBTcXVhcmUodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaGV4YWdvblwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgSGV4YWdvbih0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdGFyXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBTdGFyKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IFRleHQodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidHJpYW5nbGVcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IFRyaWFuZ2xlKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRyaWFuZ2xlRG93blwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgVHJpYW5nbGVEb3duKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBFbGxpcHNlKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5uZWVkc1JlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZWxlY3QgdGhpcyBub2RlXG4gICAqL1xuICBzZWxlY3QoKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5uZWVkc1JlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1bnNlbGVjdCB0aGlzIG5vZGVcbiAgICovXG4gIHVuc2VsZWN0KCkge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLm5lZWRzUmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBjYWxjdWxhdGVkIHNpemUgb2YgdGhlIG5vZGUsIGZvcmNlcyBpdCB0byByZWNhbGN1bGF0ZSBpdHMgc2l6ZVxuICAgKi9cbiAgbmVlZHNSZWZyZXNoKCkge1xuICAgIHRoaXMuc2hhcGUucmVmcmVzaE5lZWRlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB0aXRsZSBvZiB0aGlzIG5vZGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRpdGxlICAgIFRoZSB0aXRsZSBvZiB0aGUgbm9kZSwgb3IgdW5kZWZpbmVkIHdoZW4gbm8gdGl0bGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiBzZXQuXG4gICAqL1xuICBnZXRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRpdGxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgdG8gdGhlIGJvcmRlciBvZiB0aGUgTm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gICBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlICAgICAgICBBbmdsZSBpbiByYWRpYW5zXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IGRpc3RhbmNlICAgRGlzdGFuY2UgdG8gdGhlIGJvcmRlciBpbiBwaXhlbHNcbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLnNoYXBlLmRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBub2RlIGhhcyBhIGZpeGVkIHggYW5kIHkgcG9zaXRpb25cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICAgdHJ1ZSBpZiBmaXhlZCwgZmFsc2UgaWYgbm90XG4gICAqL1xuICBpc0ZpeGVkKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZml4ZWQueCAmJiB0aGlzLm9wdGlvbnMuZml4ZWQueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiB0aGlzIG5vZGUgaXMgc2VsZWN0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gc2VsZWN0ZWQgICBUcnVlIGlmIG5vZGUgaXMgc2VsZWN0ZWQsIGVsc2UgZmFsc2VcbiAgICovXG4gIGlzU2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHZhbHVlIG9mIHRoZSBub2RlLiBDYW4gYmUgdW5kZWZpbmVkXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IHZhbHVlXG4gICAqL1xuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBkaW1lbnNpb25zIG9mIHRoZSBsYWJlbFxuICAgKlxuICAgKiBAcmV0dXJucyB7cmVjdH1cbiAgICovXG4gIGdldExhYmVsU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbE1vZHVsZS5zaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0IHRoZSB2YWx1ZSByYW5nZSBvZiB0aGUgbm9kZS4gVGhlIG5vZGUgd2lsbCBhZGp1c3QgaXQncyBzaXplXG4gICAqIGJhc2VkIG9uIGl0cyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pblxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFxuICAgKi9cbiAgc2V0VmFsdWVSYW5nZShtaW4sIG1heCwgdG90YWwpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5vcHRpb25zLnNjYWxpbmcuY3VzdG9tU2NhbGluZ0Z1bmN0aW9uKFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heCxcbiAgICAgICAgdG90YWwsXG4gICAgICAgIHRoaXMub3B0aW9ucy52YWx1ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNpemVEaWZmID0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWF4IC0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWluO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgZm9udERpZmYgPVxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1heCAtIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1pbjtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvbnQuc2l6ZSA9XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwubWluICsgc2NhbGUgKiBmb250RGlmZjtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucy5zaXplID0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWluICsgc2NhbGUgKiBzaXplRGlmZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zLnNpemUgPSB0aGlzLmJhc2VTaXplO1xuICAgICAgdGhpcy5vcHRpb25zLmZvbnQuc2l6ZSA9IHRoaXMuYmFzZUZvbnRTaXplO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTGFiZWxNb2R1bGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgbm9kZSBpbiB0aGUgZ2l2ZW4gY2FudmFzXG4gICAqIFRoZSAyZCBjb250ZXh0IG9mIGEgSFRNTCBjYW52YXMgY2FuIGJlIHJldHJpZXZlZCBieSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gICBjdHhcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4KSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRGb3JtYXR0aW5nVmFsdWVzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hhcGUuZHJhdyhjdHgsIHRoaXMueCwgdGhpcy55LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyLCB2YWx1ZXMpIHx8XG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIHNoYXBlXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSAgIGN0eFxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goY3R4KSB7XG4gICAgdGhpcy5zaGFwZS51cGRhdGVCb3VuZGluZ0JveCh0aGlzLngsIHRoaXMueSwgY3R4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGlzIG5vZGUgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqL1xuICByZXNpemUoY3R4KSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRGb3JtYXR0aW5nVmFsdWVzKCk7XG4gICAgdGhpcy5zaGFwZS5yZXNpemUoY3R4LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyLCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBhbGwgdmlzdWFsIGVsZW1lbnRzIG9mIHRoaXMgbm9kZSBpbnN0YW5jZSwgaW4gd2hpY2ggdGhlIGdpdmVuXG4gICAqIHBvaW50IGZhbGxzIHdpdGhpbiB0aGUgYm91bmRpbmcgc2hhcGUuXG4gICAqXG4gICAqIEBwYXJhbSB7cG9pbnR9IHBvaW50XG4gICAqIEByZXR1cm5zIHtBcnJheS48bm9kZUNsaWNrSXRlbXxub2RlTGFiZWxDbGlja0l0ZW0+fSBsaXN0IHdpdGggdGhlIGl0ZW1zIHdoaWNoIGFyZSBvbiB0aGUgcG9pbnRcbiAgICovXG4gIGdldEl0ZW1zT25Qb2ludChwb2ludCkge1xuICAgIGNvbnN0IHJldCA9IFtdO1xuXG4gICAgaWYgKHRoaXMubGFiZWxNb2R1bGUudmlzaWJsZSgpKSB7XG4gICAgICBpZiAocG9pbnRJblJlY3QodGhpcy5sYWJlbE1vZHVsZS5nZXRTaXplKCksIHBvaW50KSkge1xuICAgICAgICByZXQucHVzaCh7IG5vZGVJZDogdGhpcy5pZCwgbGFiZWxJZDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9pbnRJblJlY3QodGhpcy5zaGFwZS5ib3VuZGluZ0JveCwgcG9pbnQpKSB7XG4gICAgICByZXQucHVzaCh7IG5vZGVJZDogdGhpcy5pZCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgb2JqZWN0IGlzIG92ZXJsYXBwaW5nIHdpdGggdGhlIHByb3ZpZGVkIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqICAgYW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b21cbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICBUcnVlIGlmIGxvY2F0aW9uIGlzIGxvY2F0ZWQgb24gbm9kZVxuICAgKi9cbiAgaXNPdmVybGFwcGluZ1dpdGgob2JqKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hhcGUubGVmdCA8IG9iai5yaWdodCAmJlxuICAgICAgdGhpcy5zaGFwZS5sZWZ0ICsgdGhpcy5zaGFwZS53aWR0aCA+IG9iai5sZWZ0ICYmXG4gICAgICB0aGlzLnNoYXBlLnRvcCA8IG9iai5ib3R0b20gJiZcbiAgICAgIHRoaXMuc2hhcGUudG9wICsgdGhpcy5zaGFwZS5oZWlnaHQgPiBvYmoudG9wXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIG9iamVjdCBpcyBvdmVybGFwcGluZyB3aXRoIHRoZSBwcm92aWRlZCBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iaiAgIGFuIG9iamVjdCB3aXRoIHBhcmFtZXRlcnMgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAgICAgVHJ1ZSBpZiBsb2NhdGlvbiBpcyBsb2NhdGVkIG9uIG5vZGVcbiAgICovXG4gIGlzQm91bmRpbmdCb3hPdmVybGFwcGluZ1dpdGgob2JqKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hhcGUuYm91bmRpbmdCb3gubGVmdCA8IG9iai5yaWdodCAmJlxuICAgICAgdGhpcy5zaGFwZS5ib3VuZGluZ0JveC5yaWdodCA+IG9iai5sZWZ0ICYmXG4gICAgICB0aGlzLnNoYXBlLmJvdW5kaW5nQm94LnRvcCA8IG9iai5ib3R0b20gJiZcbiAgICAgIHRoaXMuc2hhcGUuYm91bmRpbmdCb3guYm90dG9tID4gb2JqLnRvcFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdmFsaWQgdmFsdWVzIGZvciBtYXNzXG4gICAqXG4gICAqIFRoZSBtYXNzIG1heSBub3QgYmUgbmVnYXRpdmUgb3IgemVyby4gSWYgaXQgaXMsIHJlc2V0IHRvIDFcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBpZFxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2hlY2tNYXNzKG9wdGlvbnMsIGlkKSB7XG4gICAgaWYgKG9wdGlvbnMubWFzcyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMubWFzcyA8PSAwKSB7XG4gICAgICBsZXQgc3RySWQgPSBcIlwiO1xuICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3RySWQgPSBcIiBpbiBub2RlIGlkOiBcIiArIGlkO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCIlY05lZ2F0aXZlIG9yIHplcm8gbWFzcyBkaXNhbGxvd2VkXCIgKyBzdHJJZCArIFwiLCBzZXR0aW5nIG1hc3MgdG8gMS5cIixcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFXG4gICAgICApO1xuICAgICAgb3B0aW9ucy5tYXNzID0gMTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTm9kZTtcbiIsICJpbXBvcnQgeyBicmlkZ2VPYmplY3QsIGZvckVhY2ggfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0LCBpc0RhdGFWaWV3TGlrZSB9IGZyb20gXCJ2aXMtZGF0YS9lc25leHRcIjtcbmltcG9ydCBOb2RlIGZyb20gXCIuL2NvbXBvbmVudHMvTm9kZVwiO1xuXG4vKipcbiAqIEhhbmRsZXIgZm9yIE5vZGVzXG4gKi9cbmNsYXNzIE5vZGVzSGFuZGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0ltYWdlc30gaW1hZ2VzXG4gICAqIEBwYXJhbSB7QXJyYXkuPEdyb3VwPn0gZ3JvdXBzXG4gICAqIEBwYXJhbSB7TGF5b3V0RW5naW5lfSBsYXlvdXRFbmdpbmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGltYWdlcywgZ3JvdXBzLCBsYXlvdXRFbmdpbmUpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuaW1hZ2VzID0gaW1hZ2VzO1xuICAgIHRoaXMuZ3JvdXBzID0gZ3JvdXBzO1xuICAgIHRoaXMubGF5b3V0RW5naW5lID0gbGF5b3V0RW5naW5lO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBub2RlIEFQSSBpbiB0aGUgYm9keSBjb250YWluZXJcbiAgICB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGUgPSB0aGlzLmNyZWF0ZS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5ub2Rlc0xpc3RlbmVycyA9IHtcbiAgICAgIGFkZDogKGV2ZW50LCBwYXJhbXMpID0+IHtcbiAgICAgICAgdGhpcy5hZGQocGFyYW1zLml0ZW1zKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlKHBhcmFtcy5pdGVtcywgcGFyYW1zLmRhdGEsIHBhcmFtcy5vbGREYXRhKTtcbiAgICAgIH0sXG4gICAgICByZW1vdmU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlKHBhcmFtcy5pdGVtcyk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICBib3JkZXJXaWR0aFNlbGVjdGVkOiB1bmRlZmluZWQsXG4gICAgICBicm9rZW5JbWFnZTogdW5kZWZpbmVkLFxuICAgICAgY29sb3I6IHtcbiAgICAgICAgYm9yZGVyOiBcIiMyQjdDRTlcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjOTdDMkZDXCIsXG4gICAgICAgIGhpZ2hsaWdodDoge1xuICAgICAgICAgIGJvcmRlcjogXCIjMkI3Q0U5XCIsXG4gICAgICAgICAgYmFja2dyb3VuZDogXCIjRDJFNUZGXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgYm9yZGVyOiBcIiMyQjdDRTlcIixcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBcIiNEMkU1RkZcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBvcGFjaXR5OiB1bmRlZmluZWQsIC8vIG51bWJlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICAgIGZpeGVkOiB7XG4gICAgICAgIHg6IGZhbHNlLFxuICAgICAgICB5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBmb250OiB7XG4gICAgICAgIGNvbG9yOiBcIiMzNDM0MzRcIixcbiAgICAgICAgc2l6ZTogMTQsIC8vIHB4XG4gICAgICAgIGZhY2U6IFwiYXJpYWxcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCJub25lXCIsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLCAvLyBweFxuICAgICAgICBzdHJva2VDb2xvcjogXCIjZmZmZmZmXCIsXG4gICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICB2YWRqdXN0OiAwLFxuICAgICAgICBtdWx0aTogZmFsc2UsXG4gICAgICAgIGJvbGQ6IHtcbiAgICAgICAgICBtb2Q6IFwiYm9sZFwiLFxuICAgICAgICB9LFxuICAgICAgICBib2xkaXRhbDoge1xuICAgICAgICAgIG1vZDogXCJib2xkIGl0YWxpY1wiLFxuICAgICAgICB9LFxuICAgICAgICBpdGFsOiB7XG4gICAgICAgICAgbW9kOiBcIml0YWxpY1wiLFxuICAgICAgICB9LFxuICAgICAgICBtb25vOiB7XG4gICAgICAgICAgbW9kOiBcIlwiLFxuICAgICAgICAgIHNpemU6IDE1LCAvLyBweFxuICAgICAgICAgIGZhY2U6IFwibW9ub3NwYWNlXCIsXG4gICAgICAgICAgdmFkanVzdDogMixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBncm91cDogdW5kZWZpbmVkLFxuICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgIGljb246IHtcbiAgICAgICAgZmFjZTogXCJGb250QXdlc29tZVwiLCAvLydGb250QXdlc29tZScsXG4gICAgICAgIGNvZGU6IHVuZGVmaW5lZCwgLy8nXFx1ZjAwNycsXG4gICAgICAgIHNpemU6IDUwLCAvLzUwLFxuICAgICAgICBjb2xvcjogXCIjMkI3Q0U5XCIsIC8vJyNhYTAwZmYnXG4gICAgICB9LFxuICAgICAgaW1hZ2U6IHVuZGVmaW5lZCwgLy8gLS0+IFVSTFxuICAgICAgaW1hZ2VQYWRkaW5nOiB7XG4gICAgICAgIC8vIG9ubHkgZm9yIGltYWdlIHNoYXBlXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgIH0sXG4gICAgICBsYWJlbDogdW5kZWZpbmVkLFxuICAgICAgbGFiZWxIaWdobGlnaHRCb2xkOiB0cnVlLFxuICAgICAgbGV2ZWw6IHVuZGVmaW5lZCxcbiAgICAgIG1hcmdpbjoge1xuICAgICAgICB0b3A6IDUsXG4gICAgICAgIHJpZ2h0OiA1LFxuICAgICAgICBib3R0b206IDUsXG4gICAgICAgIGxlZnQ6IDUsXG4gICAgICB9LFxuICAgICAgbWFzczogMSxcbiAgICAgIHBoeXNpY3M6IHRydWUsXG4gICAgICBzY2FsaW5nOiB7XG4gICAgICAgIG1pbjogMTAsXG4gICAgICAgIG1heDogMzAsXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgbWluOiAxNCxcbiAgICAgICAgICBtYXg6IDMwLFxuICAgICAgICAgIG1heFZpc2libGU6IDMwLFxuICAgICAgICAgIGRyYXdUaHJlc2hvbGQ6IDUsXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbVNjYWxpbmdGdW5jdGlvbjogZnVuY3Rpb24gKG1pbiwgbWF4LCB0b3RhbCwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICAgICAgICAgIHJldHVybiAwLjU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gMSAvIChtYXggLSBtaW4pO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsICh2YWx1ZSAtIG1pbikgKiBzY2FsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNoYWRvdzoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgY29sb3I6IFwicmdiYSgwLDAsMCwwLjUpXCIsXG4gICAgICAgIHNpemU6IDEwLFxuICAgICAgICB4OiA1LFxuICAgICAgICB5OiA1LFxuICAgICAgfSxcbiAgICAgIHNoYXBlOiBcImVsbGlwc2VcIixcbiAgICAgIHNoYXBlUHJvcGVydGllczoge1xuICAgICAgICBib3JkZXJEYXNoZXM6IGZhbHNlLCAvLyBvbmx5IGZvciBib3JkZXJzXG4gICAgICAgIGJvcmRlclJhZGl1czogNiwgLy8gb25seSBmb3IgYm94IHNoYXBlXG4gICAgICAgIGludGVycG9sYXRpb246IHRydWUsIC8vIG9ubHkgZm9yIGltYWdlIGFuZCBjaXJjdWxhckltYWdlIHNoYXBlc1xuICAgICAgICB1c2VJbWFnZVNpemU6IGZhbHNlLCAvLyBvbmx5IGZvciBpbWFnZSBhbmQgY2lyY3VsYXJJbWFnZSBzaGFwZXNcbiAgICAgICAgdXNlQm9yZGVyV2l0aEltYWdlOiBmYWxzZSwgLy8gb25seSBmb3IgaW1hZ2Ugc2hhcGVcbiAgICAgICAgY29vcmRpbmF0ZU9yaWdpbjogXCJjZW50ZXJcIiwgLy8gb25seSBmb3IgaW1hZ2UgYW5kIGNpcmN1bGFySW1hZ2Ugc2hhcGVzXG4gICAgICB9LFxuICAgICAgc2l6ZTogMjUsXG4gICAgICB0aXRsZTogdW5kZWZpbmVkLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIHg6IHVuZGVmaW5lZCxcbiAgICAgIHk6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgLy8gUHJvdGVjdCBmcm9tIGlkaW9jeVxuICAgIGlmICh0aGlzLmRlZmF1bHRPcHRpb25zLm1hc3MgPD0gMCkge1xuICAgICAgdGhyb3cgXCJJbnRlcm5hbCBlcnJvcjogbWFzcyBpbiBkZWZhdWx0T3B0aW9ucyBvZiBOb2Rlc0hhbmRsZXIgbWF5IG5vdCBiZSB6ZXJvIG9yIG5lZ2F0aXZlXCI7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gYnJpZGdlT2JqZWN0KHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICAvLyByZWZyZXNoIHRoZSBub2Rlcy4gVXNlZCB3aGVuIHJldmVydGluZyBmcm9tIGhpZXJhcmNoaWNhbCBsYXlvdXRcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInJlZnJlc2hOb2Rlc1wiLCB0aGlzLnJlZnJlc2guYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJyZWZyZXNoXCIsIHRoaXMucmVmcmVzaC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgZm9yRWFjaCh0aGlzLm5vZGVzTGlzdGVuZXJzLCAoY2FsbGJhY2ssIGV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkuZGF0YS5ub2RlcykgdGhpcy5ib2R5LmRhdGEubm9kZXMub2ZmKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGU7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycy5hZGQ7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycy51cGRhdGU7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycy5yZW1vdmU7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTm9kZS5wYXJzZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgLy8gTmVlZCB0byBzZXQgb3BhY2l0eSBoZXJlIGJlY2F1c2UgTm9kZS5wYXJzZU9wdGlvbnMgaXMgYWxzbyB1c2VkIGZvciBncm91cHMsXG4gICAgICAvLyBpZiB5b3Ugc2V0IG9wYWNpdHkgaW4gTm9kZS5wYXJzZU9wdGlvbnMgaXQgb3ZlcndyaXRlcyBncm91cCBvcGFjaXR5LlxuICAgICAgaWYgKG9wdGlvbnMub3BhY2l0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBOdW1iZXIuaXNOYU4ob3B0aW9ucy5vcGFjaXR5KSB8fFxuICAgICAgICAgICFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5vcGFjaXR5KSB8fFxuICAgICAgICAgIG9wdGlvbnMub3BhY2l0eSA8IDAgfHxcbiAgICAgICAgICBvcHRpb25zLm9wYWNpdHkgPiAxXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIG9wYWNpdHkuIFZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBmb3VuZDogXCIgK1xuICAgICAgICAgICAgICBvcHRpb25zLm9wYWNpdHlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5vcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgc2hhcGUgaW4gYWxsIG5vZGVzXG4gICAgICBpZiAob3B0aW9ucy5zaGFwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS51cGRhdGVTaGFwZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgdGhlIGxhYmVscyBvZiBub2RlcyBpZiBhbnkgcmVsZXZhbnQgb3B0aW9ucyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5mb250ICE9PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLndpZHRoQ29uc3RyYWludCAhPT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5oZWlnaHRDb25zdHJhaW50ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBub2RlSWQgb2YgT2JqZWN0LmtleXModGhpcy5ib2R5Lm5vZGVzKSkge1xuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLnVwZGF0ZUxhYmVsTW9kdWxlKCk7XG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0ubmVlZHNSZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHRoZSBzaGFwZSBzaXplIGluIGFsbCBub2Rlc1xuICAgICAgaWYgKG9wdGlvbnMuc2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5uZWVkc1JlZnJlc2goKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgdmFyaWFibGVzIGlmIG5lZWRlZFxuICAgICAgaWYgKG9wdGlvbnMuaGlkZGVuICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5waHlzaWNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgZGF0YSBzZXQgd2l0aCBub2RlcyBmb3IgdGhlIG5ldHdvcmtcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IERhdGFTZXQgfCBEYXRhVmlld30gbm9kZXMgICAgICAgICBUaGUgZGF0YSBjb250YWluaW5nIHRoZSBub2Rlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9Ob3RFbWl0PWZhbHNlXSAtIFN1cHByZXNzIGRhdGEgY2hhbmdlZCBldmVudC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNldERhdGEobm9kZXMsIGRvTm90RW1pdCA9IGZhbHNlKSB7XG4gICAgY29uc3Qgb2xkTm9kZXNEYXRhID0gdGhpcy5ib2R5LmRhdGEubm9kZXM7XG5cbiAgICBpZiAoaXNEYXRhVmlld0xpa2UoXCJpZFwiLCBub2RlcykpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzID0gbm9kZXM7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5vZGVzKSkge1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMgPSBuZXcgRGF0YVNldCgpO1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuYWRkKG5vZGVzKTtcbiAgICB9IGVsc2UgaWYgKCFub2Rlcykge1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMgPSBuZXcgRGF0YVNldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXkgb3IgRGF0YVNldCBleHBlY3RlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAob2xkTm9kZXNEYXRhKSB7XG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIG9sZCBkYXRhc2V0XG4gICAgICBmb3JFYWNoKHRoaXMubm9kZXNMaXN0ZW5lcnMsIGZ1bmN0aW9uIChjYWxsYmFjaywgZXZlbnQpIHtcbiAgICAgICAgb2xkTm9kZXNEYXRhLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGRyYXduIG5vZGVzXG4gICAgdGhpcy5ib2R5Lm5vZGVzID0ge307XG5cbiAgICBpZiAodGhpcy5ib2R5LmRhdGEubm9kZXMpIHtcbiAgICAgIC8vIHN1YnNjcmliZSB0byBuZXcgZGF0YXNldFxuICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgZm9yRWFjaCh0aGlzLm5vZGVzTGlzdGVuZXJzLCBmdW5jdGlvbiAoY2FsbGJhY2ssIGV2ZW50KSB7XG4gICAgICAgIG1lLmJvZHkuZGF0YS5ub2Rlcy5vbihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGRyYXcgYWxsIG5ldyBub2Rlc1xuICAgICAgY29uc3QgaWRzID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0SWRzKCk7XG4gICAgICB0aGlzLmFkZChpZHMsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChkb05vdEVtaXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbm9kZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXSB8IHN0cmluZ1tdfSBpZHNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9Ob3RFbWl0PWZhbHNlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkKGlkcywgZG9Ob3RFbWl0ID0gZmFsc2UpIHtcbiAgICBsZXQgaWQ7XG4gICAgY29uc3QgbmV3Tm9kZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWQgPSBpZHNbaV07XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0KGlkKTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZShwcm9wZXJ0aWVzKTtcbiAgICAgIG5ld05vZGVzLnB1c2gobm9kZSk7XG4gICAgICB0aGlzLmJvZHkubm9kZXNbaWRdID0gbm9kZTsgLy8gbm90ZTogdGhpcyBtYXkgcmVwbGFjZSBhbiBleGlzdGluZyBub2RlXG4gICAgfVxuXG4gICAgdGhpcy5sYXlvdXRFbmdpbmUucG9zaXRpb25Jbml0aWFsbHkobmV3Tm9kZXMpO1xuXG4gICAgaWYgKGRvTm90RW1pdCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBub2Rlcywgb3IgY3JlYXRlIHRoZW0gd2hlbiBub3QgeWV0IGV4aXN0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzIGlkJ3Mgb2YgY2hhbmdlZCBub2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5fSBjaGFuZ2VkRGF0YSBhcnJheSB3aXRoIGNoYW5nZWQgZGF0YVxuICAgKiBAcGFyYW0ge0FycmF5fHVuZGVmaW5lZH0gb2xkRGF0YSBvcHRpb25hbDsgYXJyYXkgd2l0aCBwcmV2aW91cyBkYXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1cGRhdGUoaWRzLCBjaGFuZ2VkRGF0YSwgb2xkRGF0YSkge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgIGxldCBub2RlID0gbm9kZXNbaWRdO1xuICAgICAgY29uc3QgZGF0YSA9IGNoYW5nZWREYXRhW2ldO1xuICAgICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyB1cGRhdGUgbm9kZVxuICAgICAgICBpZiAobm9kZS5zZXRPcHRpb25zKGRhdGEpKSB7XG4gICAgICAgICAgZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIC8vIGNyZWF0ZSBub2RlXG4gICAgICAgIG5vZGUgPSB0aGlzLmNyZWF0ZShkYXRhKTtcbiAgICAgICAgbm9kZXNbaWRdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWRhdGFDaGFuZ2VkICYmIG9sZERhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ2hlY2sgZm9yIGFueSBjaGFuZ2VzIHdoaWNoIHNob3VsZCB0cmlnZ2VyIGEgbGF5b3V0IHJlY2FsY3VsYXRpb25cbiAgICAgIC8vIEZvciBub3csIHRoaXMgaXMganVzdCAnbGV2ZWwnIGZvciBoaWVyYXJjaGljYWwgbGF5b3V0XG4gICAgICAvLyBBc3N1bXB0aW9uOiBvbGQgYW5kIG5ldyBkYXRhIGFycmFuZ2VkIGluIHNhbWUgb3JkZXI7IGF0IHRpbWUgb2Ygd3JpdGluZywgdGhpcyBob2xkcy5cbiAgICAgIGRhdGFDaGFuZ2VkID0gY2hhbmdlZERhdGEuc29tZShmdW5jdGlvbiAobmV3VmFsdWUsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gb2xkRGF0YVtpbmRleF07XG4gICAgICAgIHJldHVybiBvbGRWYWx1ZSAmJiBvbGRWYWx1ZS5sZXZlbCAhPT0gbmV3VmFsdWUubGV2ZWw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YUNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YVVwZGF0ZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBleGlzdGluZyBub2Rlcy4gSWYgbm9kZXMgZG8gbm90IGV4aXN0LCB0aGUgbWV0aG9kIHdpbGwganVzdCBpZ25vcmUgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZW1vdmUoaWRzKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICBkZWxldGUgbm9kZXNbaWRdO1xuICAgIH1cblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIGEgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcGVydGllc1xuICAgKiBAcGFyYW0ge2NsYXNzfSBbY29uc3RydWN0b3JDbGFzcz1Ob2RlLmRlZmF1bHRdXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgY3JlYXRlKHByb3BlcnRpZXMsIGNvbnN0cnVjdG9yQ2xhc3MgPSBOb2RlKSB7XG4gICAgcmV0dXJuIG5ldyBjb25zdHJ1Y3RvckNsYXNzKFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHRoaXMuYm9keSxcbiAgICAgIHRoaXMuaW1hZ2VzLFxuICAgICAgdGhpcy5ncm91cHMsXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLmRlZmF1bHRPcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjbGVhclBvc2l0aW9ucz1mYWxzZV1cbiAgICovXG4gIHJlZnJlc2goY2xlYXJQb3NpdGlvbnMgPSBmYWxzZSkge1xuICAgIGZvckVhY2godGhpcy5ib2R5Lm5vZGVzLCAobm9kZSwgbm9kZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0KG5vZGVJZCk7XG4gICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjbGVhclBvc2l0aW9ucyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG5vZGUuc2V0T3B0aW9ucyh7IHg6IG51bGwsIHk6IG51bGwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5zZXRPcHRpb25zKHsgZml4ZWQ6IGZhbHNlIH0pO1xuICAgICAgICBub2RlLnNldE9wdGlvbnMoZGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcG9zaXRpb25zIG9mIHRoZSBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZS5pZD4gfCBzdHJpbmd9IFtpZHNdICAtLT4gb3B0aW9uYWwsIGNhbiBiZSBhcnJheSBvZiBub2RlSWRzLCBjYW4gYmUgc3RyaW5nXG4gICAqIEByZXR1cm5zIHt7fX1cbiAgICovXG4gIGdldFBvc2l0aW9ucyhpZHMpIHtcbiAgICBjb25zdCBkYXRhQXJyYXkgPSB7fTtcbiAgICBpZiAoaWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGlkcykgPT09IHRydWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW2lkc1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpZHNbaV1dO1xuICAgICAgICAgICAgZGF0YUFycmF5W2lkc1tpXV0gPSB7XG4gICAgICAgICAgICAgIHg6IE1hdGgucm91bmQobm9kZS54KSxcbiAgICAgICAgICAgICAgeTogTWF0aC5yb3VuZChub2RlLnkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkubm9kZXNbaWRzXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpZHNdO1xuICAgICAgICAgIGRhdGFBcnJheVtpZHNdID0geyB4OiBNYXRoLnJvdW5kKG5vZGUueCksIHk6IE1hdGgucm91bmQobm9kZS55KSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldXTtcbiAgICAgICAgZGF0YUFycmF5W3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV0gPSB7XG4gICAgICAgICAgeDogTWF0aC5yb3VuZChub2RlLngpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQobm9kZS55KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFBcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHggeSBwb3NpdGlvbiBvZiBhIHNwZWNpZmljIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIGlkIHRvIHJldHJpZXZlLlxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIG5vIGlkIGlzIGluY2x1ZGVkLlxuICAgKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gSWYgYW4gaW52YWxpZCBpZCBpcyBwcm92aWRlZC5cbiAgICogQHJldHVybnMge3sgeDogbnVtYmVyLCB5OiBudW1iZXIgfX0gUmV0dXJucyBYLCBZIGNhbnZhcyBwb3NpdGlvbiBvZiB0aGUgbm9kZSB3aXRoIGdpdmVuIGlkLlxuICAgKi9cbiAgZ2V0UG9zaXRpb24oaWQpIHtcbiAgICBpZiAoaWQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gaWQgd2FzIHNwZWNpZmllZCBmb3IgZ2V0UG9zaXRpb24gbWV0aG9kLlwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9keS5ub2Rlc1tpZF0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXG4gICAgICAgIGBOb2RlSWQgcHJvdmlkZWQgZm9yIGdldFBvc2l0aW9uIGRvZXMgbm90IGV4aXN0LiBQcm92aWRlZDogJHtpZH1gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBNYXRoLnJvdW5kKHRoaXMuYm9keS5ub2Rlc1tpZF0ueCksXG4gICAgICAgIHk6IE1hdGgucm91bmQodGhpcy5ib2R5Lm5vZGVzW2lkXS55KSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIFhZIHBvc2l0aW9ucyBvZiB0aGUgbm9kZXMgaW50byB0aGUgZGF0YXNldC5cbiAgICovXG4gIHN0b3JlUG9zaXRpb25zKCkge1xuICAgIC8vIHRvZG86IGFkZCBzdXBwb3J0IGZvciBjbHVzdGVycyBhbmQgaGllcmFyY2hpY2FsLlxuICAgIGNvbnN0IGRhdGFBcnJheSA9IFtdO1xuICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmJvZHkuZGF0YS5ub2Rlcy5nZXREYXRhU2V0KCk7XG5cbiAgICBmb3IgKGNvbnN0IGRzTm9kZSBvZiBkYXRhc2V0LmdldCgpKSB7XG4gICAgICBjb25zdCBpZCA9IGRzTm9kZS5pZDtcbiAgICAgIGNvbnN0IGJvZHlOb2RlID0gdGhpcy5ib2R5Lm5vZGVzW2lkXTtcbiAgICAgIGNvbnN0IHggPSBNYXRoLnJvdW5kKGJvZHlOb2RlLngpO1xuICAgICAgY29uc3QgeSA9IE1hdGgucm91bmQoYm9keU5vZGUueSk7XG5cbiAgICAgIGlmIChkc05vZGUueCAhPT0geCB8fCBkc05vZGUueSAhPT0geSkge1xuICAgICAgICBkYXRhQXJyYXkucHVzaCh7IGlkLCB4LCB5IH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGFzZXQudXBkYXRlKGRhdGFBcnJheSk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBib3VuZGluZyBib3ggb2YgYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcmV0dXJucyB7anwqfVxuICAgKi9cbiAgZ2V0Qm91bmRpbmdCb3gobm9kZUlkKSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5zaGFwZS5ib3VuZGluZ0JveDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBJZHMgb2Ygbm9kZXMgY29ubmVjdGVkIHRvIHRoaXMgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHBhcmFtIHsndG8nfCdmcm9tJ3x1bmRlZmluZWR9IGRpcmVjdGlvbiB2YWx1ZXMgJ2Zyb20nIGFuZCAndG8nIHNlbGVjdCByZXNwZWN0aXZlbHkgcGFyZW50IGFuZCBjaGlsZCBub2RlcyBvbmx5LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueSBvdGhlciB2YWx1ZSByZXR1cm5zIGJvdGggcGFyZW50IGFuZCBjaGlsZCBub2Rlcy5cbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0Q29ubmVjdGVkTm9kZXMobm9kZUlkLCBkaXJlY3Rpb24pIHtcbiAgICBjb25zdCBub2RlTGlzdCA9IFtdO1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICBjb25zdCBub2RlT2JqID0ge307IC8vIHVzZWQgdG8gcXVpY2tseSBjaGVjayBpZiBub2RlIGFscmVhZHkgZXhpc3RzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZWRnZSA9IG5vZGUuZWRnZXNbaV07XG4gICAgICAgIGlmIChkaXJlY3Rpb24gIT09IFwidG9cIiAmJiBlZGdlLnRvSWQgPT0gbm9kZS5pZCkge1xuICAgICAgICAgIC8vIHRoZXNlIGFyZSBkb3VibGUgZXF1YWxzIHNpbmNlIGlkcyBjYW4gYmUgbnVtZXJpYyBvciBzdHJpbmdcbiAgICAgICAgICBpZiAobm9kZU9ialtlZGdlLmZyb21JZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbm9kZUxpc3QucHVzaChlZGdlLmZyb21JZCk7XG4gICAgICAgICAgICBub2RlT2JqW2VkZ2UuZnJvbUlkXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAhPT0gXCJmcm9tXCIgJiYgZWRnZS5mcm9tSWQgPT0gbm9kZS5pZCkge1xuICAgICAgICAgIC8vIHRoZXNlIGFyZSBkb3VibGUgZXF1YWxzIHNpbmNlIGlkcyBjYW4gYmUgbnVtZXJpYyBvciBzdHJpbmdcbiAgICAgICAgICBpZiAobm9kZU9ialtlZGdlLnRvSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5vZGVMaXN0LnB1c2goZWRnZS50b0lkKTtcbiAgICAgICAgICAgIG5vZGVPYmpbZWRnZS50b0lkXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGlkcyBvZiB0aGUgZWRnZXMgY29ubmVjdGVkIHRvIHRoaXMgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBnZXRDb25uZWN0ZWRFZGdlcyhub2RlSWQpIHtcbiAgICBjb25zdCBlZGdlTGlzdCA9IFtdO1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWRnZUxpc3QucHVzaChub2RlLmVkZ2VzW2ldLmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJOb2RlSWQgcHJvdmlkZWQgZm9yIGdldENvbm5lY3RlZEVkZ2VzIGRvZXMgbm90IGV4aXN0LiBQcm92aWRlZDogXCIsXG4gICAgICAgIG5vZGVJZFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGVkZ2VMaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKi9cbiAgbW92ZU5vZGUobm9kZUlkLCB4LCB5KSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLnggPSBOdW1iZXIoeCk7XG4gICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS55ID0gTnVtYmVyKHkpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJOb2RlIGlkIHN1cHBsaWVkIHRvIG1vdmVOb2RlIGRvZXMgbm90IGV4aXN0LiBQcm92aWRlZDogXCIsXG4gICAgICAgIG5vZGVJZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTm9kZXNIYW5kbGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQgJiYgKGhhc093bihkZXNjcmlwdG9yLCAndmFsdWUnKSB8fCBoYXNPd24oZGVzY3JpcHRvciwgJ3dyaXRhYmxlJykpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWRhdGEtZGVzY3JpcHRvcicpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYFJlZmxlY3QuZ2V0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5nZXRcbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5IC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiBhcmd1bWVudHNbMl07XG4gIHZhciBkZXNjcmlwdG9yLCBwcm90b3R5cGU7XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZih0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IpIHJldHVybiBpc0RhdGFEZXNjcmlwdG9yKGRlc2NyaXB0b3IpXG4gICAgPyBkZXNjcmlwdG9yLnZhbHVlXG4gICAgOiBkZXNjcmlwdG9yLmdldCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogY2FsbChkZXNjcmlwdG9yLmdldCwgcmVjZWl2ZXIpO1xuICBpZiAoaXNPYmplY3QocHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG90eXBlLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBnZXQ6IGdldFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LmdldCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUmVmbGVjdC5nZXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgImltcG9ydCBfUmVmbGVjdCRnZXQgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9yZWZsZWN0L2dldC5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmltcG9ydCBfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvciBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanNcIjtcbmltcG9ydCBzdXBlclByb3BCYXNlIGZyb20gXCIuL3N1cGVyUHJvcEJhc2UuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXQoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBfUmVmbGVjdCRnZXQpIHtcbiAgICB2YXIgX2NvbnRleHQ7XG4gICAgX2dldCA9IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9SZWZsZWN0JGdldCkuY2FsbChfY29udGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICAgIHZhciBiYXNlID0gc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgdmFyIGRlc2MgPSBfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7XG4gICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiByZWNlaXZlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBfZ2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwgImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICB3aGlsZSAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkge1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLWh5cG90IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgJGh5cG90ID0gTWF0aC5oeXBvdDtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuXG4vLyBDaHJvbWUgNzcgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD05NTQ2XG52YXIgRk9SQ0VEID0gISEkaHlwb3QgJiYgJGh5cG90KEluZmluaXR5LCBOYU4pICE9PSBJbmZpbml0eTtcblxuLy8gYE1hdGguaHlwb3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmh5cG90XG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGFyaXR5OiAyLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikge1xuICAgIHZhciBzdW0gPSAwO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGxhcmcgPSAwO1xuICAgIHZhciBhcmcsIGRpdjtcbiAgICB3aGlsZSAoaSA8IGFMZW4pIHtcbiAgICAgIGFyZyA9IGFicyhhcmd1bWVudHNbaSsrXSk7XG4gICAgICBpZiAobGFyZyA8IGFyZykge1xuICAgICAgICBkaXYgPSBsYXJnIC8gYXJnO1xuICAgICAgICBzdW0gPSBzdW0gKiBkaXYgKiBkaXYgKyAxO1xuICAgICAgICBsYXJnID0gYXJnO1xuICAgICAgfSBlbHNlIGlmIChhcmcgPiAwKSB7XG4gICAgICAgIGRpdiA9IGFyZyAvIGxhcmc7XG4gICAgICAgIHN1bSArPSBkaXYgKiBkaXY7XG4gICAgICB9IGVsc2Ugc3VtICs9IGFyZztcbiAgICB9XG4gICAgcmV0dXJuIGxhcmcgPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBsYXJnICogc3FydChzdW0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hdGguaHlwb3QnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk1hdGguaHlwb3Q7XG4iLCAiLyoqXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBMb2NhdGlvbiBvZiBhbGwgdGhlIGVuZHBvaW50IGRyYXdpbmcgcm91dGluZXMuXG4gKlxuICogRXZlcnkgZW5kcG9pbnQgaGFzIGl0cyBvd24gZHJhd2luZyByb3V0aW5lLCB3aGljaCBjb250YWlucyBhbiBlbmRwb2ludCBkZWZpbml0aW9uLlxuICpcbiAqIFRoZSBlbmRwb2ludCBkZWZpbml0aW9ucyBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJpZXM6XG4gKlxuICogLSAoMCwwKSBpcyB0aGUgY29ubmVjdGlvbiBwb2ludCB0byB0aGUgbm9kZSBpdCBhdHRhY2hlcyB0b1xuICogLSBUaGUgZW5kcG9pbnRzIGFyZSBvcmllbnRhdGVkIHRvIHRoZSBwb3NpdGl2ZSB4LWRpcmVjdGlvblxuICogLSBUaGUgbGVuZ3RoIG9mIHRoZSBlbmRwb2ludCBpcyBhdCBtb3N0IDFcbiAqXG4gKiBBcyBsb25nIGFzIHRoZSBlbmRwb2ludCBjbGFzc2VzIHJlbWFpbiBzaW1wbGUgYW5kIG5vdCB0b28gbnVtZXJvdXMsIHRoZXkgd2lsbFxuICogYmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIG1vZHVsZS5cbiAqIEFsbCBjbGFzc2VzIGhlcmUgZXhjZXB0IGBFbmRQb2ludHNgIHNob3VsZCBiZSBjb25zaWRlcmVkIGFzIHByaXZhdGUgdG8gdGhpcyBtb2R1bGUuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqICMjIyBGdXJ0aGVyIEFjdGlvbnNcbiAqXG4gKiBBZnRlciBhZGRpbmcgYSBuZXcgZW5kcG9pbnQgaGVyZSwgeW91IGFsc28gbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nIHRoaW5nczpcbiAqXG4gKiAtIEFkZCB0aGUgbmV3IGVuZHBvaW50IG5hbWUgdG8gYG5ldHdvcmsvb3B0aW9ucy5qc2AgaW4gYXJyYXkgYGVuZFBvaW50c2AuXG4gKiAtIEFkZCB0aGUgbmV3IGVuZHBvaW50IG5hbWUgdG8gdGhlIGRvY3VtZW50YXRpb24uXG4gKiAgIFNjYW4gZm9yICdhcnJvd3MudG8udHlwZWAgYW5kIGFkZCBpdCB0byB0aGUgZGVzY3JpcHRpb24uXG4gKiAtIEFkZCB0aGUgZW5kcG9pbnQgdG8gdGhlIGV4YW1wbGVzLiBBdCB0aGUgdmVyeSBsZWFzdCwgYWRkIGl0IHRvIGV4YW1wbGVcbiAqICAgYGVkZ2VTdHlsZXMvYXJyb3dUeXBlc2AuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7IEFycm93RGF0YSwgUG9pbnQgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgZHJhd0NpcmNsZSB9IGZyb20gXCIuL3NoYXBlc1wiO1xuXG4vKipcbiAqIENvbW1vbiBtZXRob2RzIGZvciBlbmRwb2ludHNcbiAqXG4gKiBAY2xhc3NcbiAqL1xuY2xhc3MgRW5kUG9pbnQge1xuICAvKipcbiAgICogQXBwbHkgdHJhbnNmb3JtYXRpb24gb24gcG9pbnRzIGZvciBkaXNwbGF5LlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGlzIGRvbmU6XG4gICAqIC0gcm90YXRlIGJ5IHRoZSBzcGVjaWZpZWQgYW5nbGVcbiAgICogLSBtdWx0aXBseSB0aGUgKG5vcm1hbGl6ZWQpIGNvb3JkaW5hdGVzIGJ5IHRoZSBwYXNzZWQgbGVuZ3RoXG4gICAqIC0gb2Zmc2V0IGJ5IHRoZSB0YXJnZXQgY29vcmRpbmF0ZXNcbiAgICpcbiAgICogQHBhcmFtIHBvaW50cyAtIFRoZSBwb2ludChzKSB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIHRyYW5zZm9ybWF0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0cmFuc2Zvcm0ocG9pbnRzOiBQb2ludCB8IFBvaW50W10sIGFycm93RGF0YTogQXJyb3dEYXRhKTogdm9pZCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpIHtcbiAgICAgIHBvaW50cyA9IFtwb2ludHNdO1xuICAgIH1cblxuICAgIGNvbnN0IHggPSBhcnJvd0RhdGEucG9pbnQueDtcbiAgICBjb25zdCB5ID0gYXJyb3dEYXRhLnBvaW50Lnk7XG4gICAgY29uc3QgYW5nbGUgPSBhcnJvd0RhdGEuYW5nbGU7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyb3dEYXRhLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBwID0gcG9pbnRzW2ldO1xuICAgICAgY29uc3QgeHQgPSBwLnggKiBNYXRoLmNvcyhhbmdsZSkgLSBwLnkgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgICBjb25zdCB5dCA9IHAueCAqIE1hdGguc2luKGFuZ2xlKSArIHAueSAqIE1hdGguY29zKGFuZ2xlKTtcblxuICAgICAgcC54ID0geCArIGxlbmd0aCAqIHh0O1xuICAgICAgcC55ID0geSArIGxlbmd0aCAqIHl0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgY2xvc2VkIHBhdGggdXNpbmcgdGhlIGdpdmVuIHJlYWwgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgcGF0aCB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gcG9pbnRzIC0gVGhlIHBvaW50cyBvZiB0aGUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhd1BhdGgoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHBvaW50czogUG9pbnRbXSk6IHZvaWQge1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGN0eC5saW5lVG8ocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICB9XG4gICAgY3R4LmNsb3NlUGF0aCgpO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgYXJyb3cgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIEltYWdlIGV4dGVuZHMgRW5kUG9pbnQge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIEZhbHNlIGFzIHRoZXJlIGlzIG5vIHdheSB0byBmaWxsIGFuIGltYWdlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IGZhbHNlIHtcbiAgICBpZiAoYXJyb3dEYXRhLmltYWdlKSB7XG4gICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICBjdHgudHJhbnNsYXRlKGFycm93RGF0YS5wb2ludC54LCBhcnJvd0RhdGEucG9pbnQueSk7XG4gICAgICBjdHgucm90YXRlKE1hdGguUEkgLyAyICsgYXJyb3dEYXRhLmFuZ2xlKTtcblxuICAgICAgY29uc3Qgd2lkdGggPVxuICAgICAgICBhcnJvd0RhdGEuaW1hZ2VXaWR0aCAhPSBudWxsXG4gICAgICAgICAgPyBhcnJvd0RhdGEuaW1hZ2VXaWR0aFxuICAgICAgICAgIDogYXJyb3dEYXRhLmltYWdlLndpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0ID1cbiAgICAgICAgYXJyb3dEYXRhLmltYWdlSGVpZ2h0ICE9IG51bGxcbiAgICAgICAgICA/IGFycm93RGF0YS5pbWFnZUhlaWdodFxuICAgICAgICAgIDogYXJyb3dEYXRhLmltYWdlLmhlaWdodDtcblxuICAgICAgYXJyb3dEYXRhLmltYWdlLmRyYXdJbWFnZUF0UG9zaXRpb24oXG4gICAgICAgIGN0eCxcbiAgICAgICAgMSwgLy8gc2NhbGVcbiAgICAgICAgLXdpZHRoIC8gMiwgLy8geFxuICAgICAgICAwLCAvLyB5XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgICk7XG5cbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgYXJyb3cgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIEFycm93IGV4dGVuZHMgRW5kUG9pbnQge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgeyB4OiAwLCB5OiAwIH0sXG4gICAgICB7IHg6IC0xLCB5OiAwLjMgfSxcbiAgICAgIHsgeDogLTAuOSwgeTogMCB9LFxuICAgICAgeyB4OiAtMSwgeTogLTAuMyB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgY3JvdyBlbmRwb2ludC5cbiAqL1xuY2xhc3MgQ3JvdyB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IC0xLCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAtMC40LCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IC0wLjMgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGN1cnZlIGVuZHBvaW50LlxuICovXG5jbGFzcyBDdXJ2ZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludCA9IHsgeDogLTAuNCwgeTogMCB9O1xuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludCwgYXJyb3dEYXRhKTtcblxuICAgIC8vIFVwZGF0ZSBlbmRwb2ludCBzdHlsZSBmb3IgZHJhd2luZyB0cmFuc3BhcmVudCBhcmMuXG4gICAgY3R4LnN0cm9rZVN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2JhKDAsIDAsIDAsIDApXCI7XG5cbiAgICAvLyBEZWZpbmUgY3VydmUgZW5kcG9pbnQgYXMgc2VtaWNpcmNsZS5cbiAgICBjb25zdCBwaSA9IE1hdGguUEk7XG4gICAgY29uc3Qgc3RhcnRBbmdsZSA9IGFycm93RGF0YS5hbmdsZSAtIHBpIC8gMjtcbiAgICBjb25zdCBlbmRBbmdsZSA9IGFycm93RGF0YS5hbmdsZSArIHBpIC8gMjtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhcbiAgICAgIHBvaW50LngsXG4gICAgICBwb2ludC55LFxuICAgICAgYXJyb3dEYXRhLmxlbmd0aCAqIDAuNCxcbiAgICAgIHN0YXJ0QW5nbGUsXG4gICAgICBlbmRBbmdsZSxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGludmVydGVkIGN1cnZlIGVuZHBvaW50LlxuICovXG5jbGFzcyBJbnZlcnRlZEN1cnZlIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvLyBOb3JtYWxpemVkIHBvaW50cyBvZiBjbG9zZWQgcGF0aCwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZHJhd24uXG4gICAgLy8gKDAsIDApIGlzIHRoZSBhdHRhY2htZW50IHBvaW50LCBhbmQgdGhlIHBvaW50IGFyb3VuZCB3aGljaCBzaG91bGQgYmUgcm90YXRlZFxuICAgIGNvbnN0IHBvaW50ID0geyB4OiAtMC4zLCB5OiAwIH07XG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50LCBhcnJvd0RhdGEpO1xuXG4gICAgLy8gVXBkYXRlIGVuZHBvaW50IHN0eWxlIGZvciBkcmF3aW5nIHRyYW5zcGFyZW50IGFyYy5cbiAgICBjdHguc3Ryb2tlU3R5bGUgPSBjdHguZmlsbFN0eWxlO1xuICAgIGN0eC5maWxsU3R5bGUgPSBcInJnYmEoMCwgMCwgMCwgMClcIjtcblxuICAgIC8vIERlZmluZSBpbnZlcnRlZCBjdXJ2ZSBlbmRwb2ludCBhcyBzZW1pY2lyY2xlLlxuICAgIGNvbnN0IHBpID0gTWF0aC5QSTtcbiAgICBjb25zdCBzdGFydEFuZ2xlID0gYXJyb3dEYXRhLmFuZ2xlICsgcGkgLyAyO1xuICAgIGNvbnN0IGVuZEFuZ2xlID0gYXJyb3dEYXRhLmFuZ2xlICsgKDMgKiBwaSkgLyAyO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKFxuICAgICAgcG9pbnQueCxcbiAgICAgIHBvaW50LnksXG4gICAgICBhcnJvd0RhdGEubGVuZ3RoICogMC40LFxuICAgICAgc3RhcnRBbmdsZSxcbiAgICAgIGVuZEFuZ2xlLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgdHJpbmFnbGUgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIFRyaWFuZ2xlIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvLyBOb3JtYWxpemVkIHBvaW50cyBvZiBjbG9zZWQgcGF0aCwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZHJhd24uXG4gICAgLy8gKDAsIDApIGlzIHRoZSBhdHRhY2htZW50IHBvaW50LCBhbmQgdGhlIHBvaW50IGFyb3VuZCB3aGljaCBzaG91bGQgYmUgcm90YXRlZFxuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMC4wMiwgeTogMCB9LFxuICAgICAgeyB4OiAtMSwgeTogMC4zIH0sXG4gICAgICB7IHg6IC0xLCB5OiAtMC4zIH0sXG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgRW5kUG9pbnQuZHJhd1BhdGgoY3R4LCBwb2ludHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBpbnZlcnRlZCB0cmluYWdsZSBlbmRwb2ludC5cbiAqL1xuY2xhc3MgSW52ZXJ0ZWRUcmlhbmdsZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IDAsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAwLCB5OiAtMC4zIH0sXG4gICAgICB7IHg6IC0xLCB5OiAwIH0sXG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgRW5kUG9pbnQuZHJhd1BhdGgoY3R4LCBwb2ludHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBjaXJjbGUgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIENpcmNsZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgY29uc3QgcG9pbnQgPSB7IHg6IC0wLjQsIHk6IDAgfTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludCwgYXJyb3dEYXRhKTtcbiAgICBkcmF3Q2lyY2xlKGN0eCwgcG9pbnQueCwgcG9pbnQueSwgYXJyb3dEYXRhLmxlbmd0aCAqIDAuNCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGJhciBlbmRwb2ludC5cbiAqL1xuY2xhc3MgQmFyIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvKlxuICAgIHZhciBwb2ludHMgPSBbXG4gICAgICB7eDowLCB5OjAuNX0sXG4gICAgICB7eDowLCB5Oi0wLjV9XG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5tb3ZlVG8ocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcbiAgICBjdHgubGluZVRvKHBvaW50c1sxXS54LCBwb2ludHNbMV0ueSk7XG4gICAgY3R4LnN0cm9rZSgpO1xuKi9cblxuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMC41IH0sXG4gICAgICB7IHg6IDAsIHk6IC0wLjUgfSxcbiAgICAgIHsgeDogLTAuMTUsIHk6IC0wLjUgfSxcbiAgICAgIHsgeDogLTAuMTUsIHk6IDAuNSB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgYm94IGVuZHBvaW50LlxuICovXG5jbGFzcyBCb3gge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMC4zIH0sXG4gICAgICB7IHg6IDAsIHk6IC0wLjMgfSxcbiAgICAgIHsgeDogLTAuNiwgeTogLTAuMyB9LFxuICAgICAgeyB4OiAtMC42LCB5OiAwLjMgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGRpYW1vbmQgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIERpYW1vbmQge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgICAgeyB4OiAtMC41LCB5OiAtMC4zIH0sXG4gICAgICB7IHg6IC0xLCB5OiAwIH0sXG4gICAgICB7IHg6IC0wLjUsIHk6IDAuMyB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgdmVlIGVuZHBvaW50LlxuICovXG5jbGFzcyBWZWUge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgeyB4OiAtMSwgeTogMC4zIH0sXG4gICAgICB7IHg6IC0wLjUsIHk6IDAgfSxcbiAgICAgIHsgeDogLTEsIHk6IC0wLjMgfSxcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgZW5kcG9pbnRzLlxuICovXG5leHBvcnQgY2xhc3MgRW5kUG9pbnRzIHtcbiAgLyoqXG4gICAqIERyYXcgYW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogYm9vbGVhbiB7XG4gICAgbGV0IHR5cGU7XG4gICAgaWYgKGFycm93RGF0YS50eXBlKSB7XG4gICAgICB0eXBlID0gYXJyb3dEYXRhLnR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgICByZXR1cm4gSW1hZ2UuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiY2lyY2xlXCI6XG4gICAgICAgIHJldHVybiBDaXJjbGUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiYm94XCI6XG4gICAgICAgIHJldHVybiBCb3guZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiY3Jvd1wiOlxuICAgICAgICByZXR1cm4gQ3Jvdy5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJjdXJ2ZVwiOlxuICAgICAgICByZXR1cm4gQ3VydmUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgICAgICByZXR1cm4gRGlhbW9uZC5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJpbnZfY3VydmVcIjpcbiAgICAgICAgcmV0dXJuIEludmVydGVkQ3VydmUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwidHJpYW5nbGVcIjpcbiAgICAgICAgcmV0dXJuIFRyaWFuZ2xlLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcImludl90cmlhbmdsZVwiOlxuICAgICAgICByZXR1cm4gSW52ZXJ0ZWRUcmlhbmdsZS5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJiYXJcIjpcbiAgICAgICAgcmV0dXJuIEJhci5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJ2ZWVcIjpcbiAgICAgICAgcmV0dXJuIFZlZS5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJhcnJvd1wiOiAvLyBmYWxsLXRocm91Z2hcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBBcnJvdy5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBvdmVycmlkZU9wYWNpdHkgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBFbmRQb2ludHMgfSBmcm9tIFwiLi9lbmQtcG9pbnRzXCI7XG5pbXBvcnQge1xuICBBcnJvd0RhdGEsXG4gIEFycm93RGF0YVdpdGhDb3JlLFxuICBBcnJvd1R5cGUsXG4gIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICBFZGdlVHlwZSxcbiAgSWQsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGRyYXdEYXNoZWRMaW5lIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5pbXBvcnQgeyBnZXRTZWxmUmVmQ29vcmRpbmF0ZXMgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL0NvbXBvbmVudFV0aWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGaW5kQm9yZGVyUG9zaXRpb25PcHRpb25zPFZpYT4ge1xuICB2aWE6IFZpYTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlT3B0aW9ucyB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICBsb3c6IG51bWJlcjtcbiAgaGlnaDogbnVtYmVyO1xuICBkaXJlY3Rpb246IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgQmFzZSBDbGFzcyBmb3IgYWxsIGVkZ2VzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWRnZUJhc2U8VmlhID0gdW5kZWZpbmVkPiBpbXBsZW1lbnRzIEVkZ2VUeXBlIHtcbiAgcHVibGljIGZyb20hOiBWTm9kZTsgLy8gSW5pdGlhbGl6ZWQgaW4gc2V0T3B0aW9uc1xuICBwdWJsaWMgZnJvbVBvaW50OiBQb2ludDtcbiAgcHVibGljIHRvITogVk5vZGU7IC8vIEluaXRpYWxpemVkIGluIHNldE9wdGlvbnNcbiAgcHVibGljIHRvUG9pbnQ6IFBvaW50O1xuICBwdWJsaWMgdmlhPzogVk5vZGU7XG5cbiAgcHVibGljIGNvbG9yOiB1bmtub3duID0ge307XG4gIHB1YmxpYyBjb2xvckRpcnR5ID0gdHJ1ZTtcbiAgcHVibGljIGlkITogSWQ7IC8vIEluaXRpYWxpemVkIGluIHNldE9wdGlvbnNcbiAgcHVibGljIG9wdGlvbnMhOiBFZGdlT3B0aW9uczsgLy8gSW5pdGlhbGl6ZWQgaW4gc2V0T3B0aW9uc1xuICBwdWJsaWMgaG92ZXJXaWR0aCA9IDEuNTtcbiAgcHVibGljIHNlbGVjdGlvbldpZHRoID0gMjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBvZiBnaXZlbiBlZGdlLlxuICAgKiBAcGFyYW0gX2JvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIF9sYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zOiBFZGdlT3B0aW9ucyxcbiAgICBwcm90ZWN0ZWQgX2JvZHk6IFZCb2R5LFxuICAgIHByb3RlY3RlZCBfbGFiZWxNb2R1bGU6IExhYmVsXG4gICkge1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIHRoaXMuZnJvbVBvaW50ID0gdGhpcy5mcm9tO1xuICAgIHRoaXMudG9Qb2ludCA9IHRoaXMudG87XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2ZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBub2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBvcHRpb25zPzogRmluZEJvcmRlclBvc2l0aW9uT3B0aW9uczxWaWE+XG4gICk6IFBvaW50VDtcblxuICAvKipcbiAgICogUmV0dXJuIGFkZGl0aW9uYWwgcG9pbnQocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0VmlhTm9kZSgpOiBWaWE7XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXRQb2ludChwb3NpdGlvbjogbnVtYmVyLCB2aWFOb2RlPzogVmlhKTogUG9pbnQ7XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBjb25uZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuZnJvbSA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLmZyb21dO1xuICAgIHRoaXMudG8gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy50b107XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGNsZWFudXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBuZXcgZWRnZSBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBuZXcgZWRnZSBvcHRpb25zIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM6IEVkZ2VPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIHRoaXMuZnJvbSA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLmZyb21dO1xuICAgIHRoaXMudG8gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy50b107XG4gICAgdGhpcy5pZCA9IHRoaXMub3B0aW9ucy5pZDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZHJhd0xpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImNvbG9yXCJcbiAgICAgIHwgXCJvcGFjaXR5XCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgICB8IFwid2lkdGhcIlxuICAgID4sXG4gICAgX3NlbGVjdGVkPzogYm9vbGVhbixcbiAgICBfaG92ZXI/OiBib29sZWFuLFxuICAgIHZpYU5vZGU6IFZpYSA9IHRoaXMuZ2V0VmlhTm9kZSgpXG4gICk6IHZvaWQge1xuICAgIC8vIHNldCBzdHlsZVxuICAgIGN0eC5zdHJva2VTdHlsZSA9IHRoaXMuZ2V0Q29sb3IoY3R4LCB2YWx1ZXMpO1xuICAgIGN0eC5saW5lV2lkdGggPSB2YWx1ZXMud2lkdGg7XG5cbiAgICBpZiAodmFsdWVzLmRhc2hlcyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX2RyYXdEYXNoZWRMaW5lKGN0eCwgdmFsdWVzLCB2aWFOb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZHJhd0xpbmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgbGluZSB3aXRoIGdpdmVuIHN0eWxlIGJldHdlZW4gdHdvIG5vZGVzIHRocm91Z2ggc3VwcGxpZWQgbm9kZShzKS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcGFyYW0gZnJvbVBvaW50IC0gVE9ETzogU2VlbXMgaWdub3JlZCwgcmVtb3ZlP1xuICAgKiBAcGFyYW0gdG9Qb2ludCAtIFRPRE86IFNlZW1zIGlnbm9yZWQsIHJlbW92ZT9cbiAgICovXG4gIHByaXZhdGUgX2RyYXdMaW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZTogVmlhLFxuICAgIGZyb21Qb2ludD86IFBvaW50LFxuICAgIHRvUG9pbnQ/OiBQb2ludFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mcm9tICE9IHRoaXMudG8pIHtcbiAgICAgIC8vIGRyYXcgbGluZVxuICAgICAgdGhpcy5fbGluZShjdHgsIHZhbHVlcywgdmlhTm9kZSwgZnJvbVBvaW50LCB0b1BvaW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3gsIHksIHJhZGl1c10gPSB0aGlzLl9nZXRDaXJjbGVEYXRhKGN0eCk7XG4gICAgICB0aGlzLl9jaXJjbGUoY3R4LCB2YWx1ZXMsIHgsIHksIHJhZGl1cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERyYXcgYSBkYXNoZWQgbGluZSB3aXRoIGdpdmVuIHN0eWxlIGJldHdlZW4gdHdvIG5vZGVzIHRocm91Z2ggc3VwcGxpZWQgbm9kZShzKS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcGFyYW0gX2Zyb21Qb2ludCAtIElnbm9yZWQgKFRPRE86IHJlbW92ZSBpbiB0aGUgZnV0dXJlKS5cbiAgICogQHBhcmFtIF90b1BvaW50IC0gSWdub3JlZCAoVE9ETzogcmVtb3ZlIGluIHRoZSBmdXR1cmUpLlxuICAgKi9cbiAgcHJpdmF0ZSBfZHJhd0Rhc2hlZExpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJzaGFkb3dDb2xvclwiIHwgXCJzaGFkb3dTaXplXCIgfCBcInNoYWRvd1hcIiB8IFwic2hhZG93WVwiXG4gICAgPixcbiAgICB2aWFOb2RlOiBWaWEsXG4gICAgX2Zyb21Qb2ludD86IFBvaW50LFxuICAgIF90b1BvaW50PzogUG9pbnRcbiAgKTogdm9pZCB7XG4gICAgY3R4LmxpbmVDYXAgPSBcInJvdW5kXCI7XG4gICAgY29uc3QgcGF0dGVybiA9IEFycmF5LmlzQXJyYXkodmFsdWVzLmRhc2hlcykgPyB2YWx1ZXMuZGFzaGVzIDogWzUsIDVdO1xuXG4gICAgLy8gb25seSBmaXJlZm94IGFuZCBjaHJvbWUgc3VwcG9ydCB0aGlzIG1ldGhvZCwgZWxzZSB3ZSB1c2UgdGhlIGxlZ2FjeSBvbmUuXG4gICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICAvLyBzZXQgZGFzaCBzZXR0aW5ncyBmb3IgY2hyb21lIG9yIGZpcmVmb3hcbiAgICAgIGN0eC5zZXRMaW5lRGFzaChwYXR0ZXJuKTtcbiAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IDA7XG5cbiAgICAgIC8vIGRyYXcgdGhlIGxpbmVcbiAgICAgIGlmICh0aGlzLmZyb20gIT0gdGhpcy50bykge1xuICAgICAgICAvLyBkcmF3IGxpbmVcbiAgICAgICAgdGhpcy5fbGluZShjdHgsIHZhbHVlcywgdmlhTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbeCwgeSwgcmFkaXVzXSA9IHRoaXMuX2dldENpcmNsZURhdGEoY3R4KTtcbiAgICAgICAgdGhpcy5fY2lyY2xlKGN0eCwgdmFsdWVzLCB4LCB5LCByYWRpdXMpO1xuICAgICAgfVxuXG4gICAgICAvLyByZXN0b3JlIHRoZSBkYXNoIHNldHRpbmdzLlxuICAgICAgY3R4LnNldExpbmVEYXNoKFswXSk7XG4gICAgICBjdHgubGluZURhc2hPZmZzZXQgPSAwO1xuICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5zdXBwb3J0aW5nIHNtb290aCBsaW5lc1xuICAgICAgaWYgKHRoaXMuZnJvbSAhPSB0aGlzLnRvKSB7XG4gICAgICAgIC8vIGRyYXcgbGluZVxuICAgICAgICBkcmF3RGFzaGVkTGluZShcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgdGhpcy5mcm9tLngsXG4gICAgICAgICAgdGhpcy5mcm9tLnksXG4gICAgICAgICAgdGhpcy50by54LFxuICAgICAgICAgIHRoaXMudG8ueSxcbiAgICAgICAgICBwYXR0ZXJuXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbeCwgeSwgcmFkaXVzXSA9IHRoaXMuX2dldENpcmNsZURhdGEoY3R4KTtcbiAgICAgICAgdGhpcy5fY2lyY2xlKGN0eCwgdmFsdWVzLCB4LCB5LCByYWRpdXMpO1xuICAgICAgfVxuICAgICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgICAgdGhpcy5lbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuXG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIC8vIGRpc2FibGUgc2hhZG93cyBmb3Igb3RoZXIgZWxlbWVudHMuXG4gICAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgbGluZSB3aXRoIGdpdmVuIHN0eWxlIGJldHdlZW4gdHdvIG5vZGVzIHRocm91Z2ggc3VwcGxpZWQgbm9kZShzKS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcGFyYW0gZnJvbVBvaW50IC0gVE9ETzogU2VlbXMgaWdub3JlZCwgcmVtb3ZlP1xuICAgKiBAcGFyYW0gdG9Qb2ludCAtIFRPRE86IFNlZW1zIGlnbm9yZWQsIHJlbW92ZT9cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgIHZpYU5vZGU6IFZpYSxcbiAgICBmcm9tUG9pbnQ/OiBQb2ludCxcbiAgICB0b1BvaW50PzogUG9pbnRcbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwdWJsaWMgZmluZEJvcmRlclBvc2l0aW9uKFxuICAgIG5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIG9wdGlvbnM/OiBGaW5kQm9yZGVyUG9zaXRpb25PcHRpb25zPFZpYT4gfCBGaW5kQm9yZGVyUG9zaXRpb25DaXJjbGVPcHRpb25zXG4gICk6IFBvaW50VCB7XG4gICAgaWYgKHRoaXMuZnJvbSAhPSB0aGlzLnRvKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uKG5vZGUsIGN0eCwgb3B0aW9ucyBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlKG5vZGUsIGN0eCwgb3B0aW9ucyBhcyBhbnkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZmluZEJvcmRlclBvc2l0aW9ucyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHtcbiAgICBmcm9tOiBQb2ludDtcbiAgICB0bzogUG9pbnQ7XG4gIH0ge1xuICAgIGlmICh0aGlzLmZyb20gIT0gdGhpcy50bykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbTogdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uKHRoaXMuZnJvbSwgY3R4KSxcbiAgICAgICAgdG86IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbih0aGlzLnRvLCBjdHgpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3gsIHldID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YShjdHgpLnNsaWNlKDAsIDIpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmcm9tOiB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgbG93OiAwLjI1LFxuICAgICAgICAgIGhpZ2g6IDAuNixcbiAgICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgICB9KSxcbiAgICAgICAgdG86IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBsb3c6IDAuNixcbiAgICAgICAgICBoaWdoOiAwLjgsXG4gICAgICAgICAgZGlyZWN0aW9uOiAxLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGNlbnRlciBwb2ludCBhbmQgcmFkaXVzIG9mIGFuIGVkZ2UgY29ubmVjdGVkIHRvIHRoZSBzYW1lIG5vZGUgYXQgYm90aCBlbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHJldHVybnMgYFt4LCB5LCByYWRpdXNdYFxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXRDaXJjbGVEYXRhKFxuICAgIGN0eD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxuICApOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLnNpemU7XG5cbiAgICBpZiAoY3R4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLmZyb20uc2hhcGUud2lkdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmZyb20uc2hhcGUucmVzaXplKGN0eCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IGNpcmNsZSBjb29yZGluYXRlc1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZ2V0U2VsZlJlZkNvb3JkaW5hdGVzKFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUsXG4gICAgICByYWRpdXMsXG4gICAgICB0aGlzLmZyb21cbiAgICApO1xuXG4gICAgcmV0dXJuIFtjb29yZGluYXRlcy54LCBjb29yZGluYXRlcy55LCByYWRpdXNdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHBvaW50IG9uIGEgY2lyY2xlLlxuICAgKlxuICAgKiBAcGFyYW0geCAtIENlbnRlciBvZiB0aGUgY2lyY2xlIG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5IC0gQ2VudGVyIG9mIHRoZSBjaXJjbGUgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHJhZGl1cyAtIFJhZGl1cyBvZiB0aGUgY2lyY2xlLlxuICAgKiBAcGFyYW0gcG9zaXRpb24gLSBWYWx1ZSBiZXR3ZWVuIDAgKGxpbmUgc3RhcnQpIGFuZCAxIChsaW5lIGVuZCkuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiByZXF1ZXN0ZWQgcG9pbnQgb24gdGhlIGNpcmNsZS5cbiAgICovXG4gIHByaXZhdGUgX3BvaW50T25DaXJjbGUoXG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICByYWRpdXM6IG51bWJlcixcbiAgICBwb3NpdGlvbjogbnVtYmVyXG4gICk6IFBvaW50IHtcbiAgICBjb25zdCBhbmdsZSA9IHBvc2l0aW9uICogMiAqIE1hdGguUEk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHggKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSksXG4gICAgICB5OiB5IC0gcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgZnVuY3Rpb24gdXNlcyBiaW5hcnkgc2VhcmNoIHRvIGxvb2sgZm9yIHRoZSBwb2ludCB3aGVyZSB0aGUgY2lyY2xlIGNyb3NzZXMgdGhlIGJvcmRlciBvZiB0aGUgbm9kZS5cbiAgICogQHBhcmFtIG5lYXJOb2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwcml2YXRlIF9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUoXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIG9wdGlvbnM6IEZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZU9wdGlvbnNcbiAgKTogUG9pbnRUIHtcbiAgICBjb25zdCB4ID0gb3B0aW9ucy54O1xuICAgIGNvbnN0IHkgPSBvcHRpb25zLnk7XG4gICAgbGV0IGxvdyA9IG9wdGlvbnMubG93O1xuICAgIGxldCBoaWdoID0gb3B0aW9ucy5oaWdoO1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uO1xuXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwO1xuICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLnNpemU7XG4gICAgY29uc3QgdGhyZXNob2xkID0gMC4wNTtcbiAgICBsZXQgcG9zOiBQb2ludDtcblxuICAgIGxldCBtaWRkbGUgPSAobG93ICsgaGlnaCkgKiAwLjU7XG5cbiAgICBsZXQgZW5kUG9pbnRPZmZzZXQgPSAwO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYXJyb3dTdHJpa2V0aHJvdWdoID09PSB0cnVlKSB7XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAtMSkge1xuICAgICAgICBlbmRQb2ludE9mZnNldCA9IHRoaXMub3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IDEpIHtcbiAgICAgICAgZW5kUG9pbnRPZmZzZXQgPSB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgZG8ge1xuICAgICAgbWlkZGxlID0gKGxvdyArIGhpZ2gpICogMC41O1xuXG4gICAgICBwb3MgPSB0aGlzLl9wb2ludE9uQ2lyY2xlKHgsIHksIHJhZGl1cywgbWlkZGxlKTtcbiAgICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMihuZWFyTm9kZS55IC0gcG9zLnksIG5lYXJOb2RlLnggLSBwb3MueCk7XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9Cb3JkZXIgPVxuICAgICAgICBuZWFyTm9kZS5kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpICsgZW5kUG9pbnRPZmZzZXQ7XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9Qb2ludCA9IE1hdGguc3FydChcbiAgICAgICAgTWF0aC5wb3cocG9zLnggLSBuZWFyTm9kZS54LCAyKSArIE1hdGgucG93KHBvcy55IC0gbmVhck5vZGUueSwgMilcbiAgICAgICk7XG4gICAgICBjb25zdCBkaWZmZXJlbmNlID0gZGlzdGFuY2VUb0JvcmRlciAtIGRpc3RhbmNlVG9Qb2ludDtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmZXJlbmNlKSA8IHRocmVzaG9sZCkge1xuICAgICAgICBicmVhazsgLy8gZm91bmRcbiAgICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZSA+IDApIHtcbiAgICAgICAgLy8gZGlzdGFuY2UgdG8gbm9kZXMgaXMgbGFyZ2VyIHRoYW4gZGlzdGFuY2UgdG8gYm9yZGVyIC0tPiB0IG5lZWRzIHRvIGJlIGJpZ2dlciBpZiB3ZSdyZSBsb29raW5nIGF0IHRoZSB0byBub2RlLlxuICAgICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICAgIGhpZ2ggPSBtaWRkbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG93ID0gbWlkZGxlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICsraXRlcmF0aW9uO1xuICAgIH0gd2hpbGUgKGxvdyA8PSBoaWdoICYmIGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBvcyxcbiAgICAgIHQ6IG1pZGRsZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGluZSB3aWR0aCBvZiB0aGUgZWRnZS4gRGVwZW5kcyBvbiB3aWR0aCBhbmQgd2hldGhlciBvbmUgb2YgdGhlIGNvbm5lY3RlZCBub2RlcyBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHNlbGVjdGVkIC0gRGV0ZXJtaW5lcyB3aGV0ZXIgdGhlIGxpbmUgaXMgc2VsZWN0ZWQuXG4gICAqIEBwYXJhbSBob3ZlciAtIERldGVybWluZXMgd2hldGVyIHRoZSBsaW5lIGlzIGJlaW5nIGhvdmVyZWQsIG9ubHkgYXBwbGllcyBpZiBzZWxlY3RlZCBpcyBmYWxzZS5cbiAgICogQHJldHVybnMgVGhlIHdpZHRoIG9mIHRoZSBsaW5lLlxuICAgKi9cbiAgcHVibGljIGdldExpbmVXaWR0aChzZWxlY3RlZDogYm9vbGVhbiwgaG92ZXI6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGlmIChzZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuc2VsZWN0aW9uV2lkdGgsIDAuMyAvIHRoaXMuX2JvZHkudmlldy5zY2FsZSk7XG4gICAgfSBlbHNlIGlmIChob3ZlciA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuaG92ZXJXaWR0aCwgMC4zIC8gdGhpcy5fYm9keS52aWV3LnNjYWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMub3B0aW9ucy53aWR0aCwgMC4zIC8gdGhpcy5fYm9keS52aWV3LnNjYWxlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgY29sb3Igb3IgZ3JhZGllbnQgZm9yIGdpdmVuIGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgbGlrZSBjb2xvciwgb3BhY2l0eSBvciBzaGFkb3cuXG4gICAqIEBwYXJhbSBfc2VsZWN0ZWQgLSBJZ25vcmVkIChUT0RPOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSkuXG4gICAqIEBwYXJhbSBfaG92ZXIgLSBJZ25vcmVkIChUT0RPOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSkuXG4gICAqIEByZXR1cm5zIENvbG9yIHN0cmluZyBpZiBzaW5nbGUgY29sb3IgaXMgaW5oZXJpdGVkIG9yIGdyYWRpZW50IGlmIHR3by5cbiAgICovXG4gIHB1YmxpYyBnZXRDb2xvcihcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPEVkZ2VGb3JtYXR0aW5nVmFsdWVzLCBcImNvbG9yXCIgfCBcIm9wYWNpdHlcIj5cbiAgKTogc3RyaW5nIHwgQ2FudmFzR3JhZGllbnQge1xuICAgIGlmICh2YWx1ZXMuaW5oZXJpdHNDb2xvciAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIHdoZW4gdGhpcyBpcyBhIGxvb3AgZWRnZSwganVzdCB1c2UgdGhlICdmcm9tJyBtZXRob2RcbiAgICAgIGlmICh2YWx1ZXMuaW5oZXJpdHNDb2xvciA9PT0gXCJib3RoXCIgJiYgdGhpcy5mcm9tLmlkICE9PSB0aGlzLnRvLmlkKSB7XG4gICAgICAgIGNvbnN0IGdyZCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudChcbiAgICAgICAgICB0aGlzLmZyb20ueCxcbiAgICAgICAgICB0aGlzLmZyb20ueSxcbiAgICAgICAgICB0aGlzLnRvLngsXG4gICAgICAgICAgdGhpcy50by55XG4gICAgICAgICk7XG4gICAgICAgIGxldCBmcm9tQ29sb3IgPSB0aGlzLmZyb20ub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyO1xuICAgICAgICBsZXQgdG9Db2xvciA9IHRoaXMudG8ub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyO1xuXG4gICAgICAgIGlmICh0aGlzLmZyb20uc2VsZWN0ZWQgPT09IGZhbHNlICYmIHRoaXMudG8uc2VsZWN0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgZnJvbUNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KFxuICAgICAgICAgICAgdGhpcy5mcm9tLm9wdGlvbnMuY29sb3IuYm9yZGVyLFxuICAgICAgICAgICAgdmFsdWVzLm9wYWNpdHlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRvQ29sb3IgPSBvdmVycmlkZU9wYWNpdHkoXG4gICAgICAgICAgICB0aGlzLnRvLm9wdGlvbnMuY29sb3IuYm9yZGVyLFxuICAgICAgICAgICAgdmFsdWVzLm9wYWNpdHlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbS5zZWxlY3RlZCA9PT0gdHJ1ZSAmJiB0aGlzLnRvLnNlbGVjdGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIHRvQ29sb3IgPSB0aGlzLnRvLm9wdGlvbnMuY29sb3IuYm9yZGVyO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbS5zZWxlY3RlZCA9PT0gZmFsc2UgJiYgdGhpcy50by5zZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGZyb21Db2xvciA9IHRoaXMuZnJvbS5vcHRpb25zLmNvbG9yLmJvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICBncmQuYWRkQ29sb3JTdG9wKDAsIGZyb21Db2xvcik7XG4gICAgICAgIGdyZC5hZGRDb2xvclN0b3AoMSwgdG9Db2xvcik7XG5cbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGhpcyByZXR1cm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG4gICAgICAgIHJldHVybiBncmQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZXMuaW5oZXJpdHNDb2xvciA9PT0gXCJ0b1wiKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZU9wYWNpdHkodGhpcy50by5vcHRpb25zLmNvbG9yLmJvcmRlciwgdmFsdWVzLm9wYWNpdHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gXCJmcm9tXCJcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlT3BhY2l0eSh0aGlzLmZyb20ub3B0aW9ucy5jb2xvci5ib3JkZXIsIHZhbHVlcy5vcGFjaXR5KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG92ZXJyaWRlT3BhY2l0eSh2YWx1ZXMuY29sb3IsIHZhbHVlcy5vcGFjaXR5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyBhIGxpbmUgZnJvbSBhIG5vZGUgdG8gaXRzZWxmLCBhIGNpcmNsZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHggLSBDZW50ZXIgb2YgdGhlIGNpcmNsZSBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geSAtIENlbnRlciBvZiB0aGUgY2lyY2xlIG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSByYWRpdXMgLSBSYWRpdXMgb2YgdGhlIGNpcmNsZS5cbiAgICovXG4gIHByaXZhdGUgX2NpcmNsZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInNoYWRvd0NvbG9yXCIgfCBcInNoYWRvd1NpemVcIiB8IFwic2hhZG93WFwiIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgcmFkaXVzOiBudW1iZXJcbiAgKTogdm9pZCB7XG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcblxuICAgIC8vZnVsbCBjaXJjbGVcbiAgICBsZXQgYW5nbGVGcm9tID0gMDtcbiAgICBsZXQgYW5nbGVUbyA9IE1hdGguUEkgKiAyO1xuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5yZW5kZXJCZWhpbmRUaGVOb2RlKSB7XG4gICAgICAvL3JlbmRlciBvbmx5IHBhcnRzIHdoaWNoIGFyZSBub3Qgb3ZlcmxhcGluZyB3aXRoIHBhcmVudCBub2RlXG4gICAgICAvL25lZWQgdG8gZmluZCB4LHkgb2YgZnJvbSBwb2ludCBhbmQgeCx5IHRvIHBvaW50XG4gICAgICAvL2NhbGN1bGF0aW5nIHJhZGlhbnNcbiAgICAgIGNvbnN0IGxvdyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlO1xuICAgICAgY29uc3QgaGlnaCA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlICsgTWF0aC5QSTtcbiAgICAgIGNvbnN0IHBvaW50VEZyb20gPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbG93LFxuICAgICAgICBoaWdoLFxuICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwb2ludFRUbyA9IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBsb3csXG4gICAgICAgIGhpZ2gsXG4gICAgICAgIGRpcmVjdGlvbjogMSxcbiAgICAgIH0pO1xuICAgICAgYW5nbGVGcm9tID0gTWF0aC5hdGFuMihwb2ludFRGcm9tLnkgLSB5LCBwb2ludFRGcm9tLnggLSB4KTtcbiAgICAgIGFuZ2xlVG8gPSBNYXRoLmF0YW4yKHBvaW50VFRvLnkgLSB5LCBwb2ludFRUby54IC0geCk7XG4gICAgfVxuXG4gICAgLy8gZHJhdyBhIGNpcmNsZVxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKHgsIHksIHJhZGl1cywgYW5nbGVGcm9tLCBhbmdsZVRvLCBmYWxzZSk7XG4gICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIEByZW1hcmtzXG4gICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODQ5MjExL3Nob3J0ZXN0LWRpc3RhbmNhZS1iZXR3ZWVuLWEtcG9pbnQtYW5kLWEtbGluZS1zZWdtZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXJcbiAgKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5mcm9tICE9IHRoaXMudG8pIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXREaXN0YW5jZVRvRWRnZSh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3gsIHksIHJhZGl1c10gPSB0aGlzLl9nZXRDaXJjbGVEYXRhKHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBkeCA9IHggLSB4MztcbiAgICAgIGNvbnN0IGR5ID0geSAtIHkzO1xuICAgICAgcmV0dXJuIE1hdGguYWJzKE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSkgLSByYWRpdXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCAoeDMsIHkzKSBhbmQgYSBsaW5lIHNlZ21lbnQgZnJvbSAoeDEsIHkxKSB0byAoeDIsIHkyKS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84NDkyMTEvc2hvcnRlc3QtZGlzdGFuY2FlLWJldHdlZW4tYS1wb2ludC1hbmQtYS1saW5lLXNlZ21lbnRcbiAgICogQHBhcmFtIHgxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB2aWEgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGluZSBzZWdtZW50IGFuZCB0aGUgcG9pbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyLFxuICAgIHZpYT86IFZpYVxuICApOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBhIHBvaW50ICh4MywgeTMpIGFuZCBhIGxpbmUgc2VnbWVudCBmcm9tICh4MSwgeTEpIHRvICh4MiwgeTIpLlxuICAgKlxuICAgKiBAcGFyYW0geDEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDIgLSBTZWNvbmQgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB4MyAtIFBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHJldHVybnMgVGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGxpbmUgc2VnbWVudCBhbmQgdGhlIHBvaW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvTGluZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IHB4ID0geDIgLSB4MTtcbiAgICBjb25zdCBweSA9IHkyIC0geTE7XG4gICAgY29uc3Qgc29tZXRoaW5nID0gcHggKiBweCArIHB5ICogcHk7XG4gICAgbGV0IHUgPSAoKHgzIC0geDEpICogcHggKyAoeTMgLSB5MSkgKiBweSkgLyBzb21ldGhpbmc7XG5cbiAgICBpZiAodSA+IDEpIHtcbiAgICAgIHUgPSAxO1xuICAgIH0gZWxzZSBpZiAodSA8IDApIHtcbiAgICAgIHUgPSAwO1xuICAgIH1cblxuICAgIGNvbnN0IHggPSB4MSArIHUgKiBweDtcbiAgICBjb25zdCB5ID0geTEgKyB1ICogcHk7XG4gICAgY29uc3QgZHggPSB4IC0geDM7XG4gICAgY29uc3QgZHkgPSB5IC0geTM7XG5cbiAgICAvLyMgTm90ZTogSWYgdGhlIGFjdHVhbCBkaXN0YW5jZSBkb2VzIG5vdCBtYXR0ZXIsXG4gICAgLy8jIGlmIHlvdSBvbmx5IHdhbnQgdG8gY29tcGFyZSB3aGF0IHRoaXMgZnVuY3Rpb25cbiAgICAvLyMgcmV0dXJucyB0byBvdGhlciByZXN1bHRzIG9mIHRoaXMgZnVuY3Rpb24sIHlvdVxuICAgIC8vIyBjYW4ganVzdCByZXR1cm4gdGhlIHNxdWFyZWQgZGlzdGFuY2UgaW5zdGVhZFxuICAgIC8vIyAoaS5lLiByZW1vdmUgdGhlIHNxcnQpIHRvIGdhaW4gYSBsaXR0bGUgcGVyZm9ybWFuY2VcblxuICAgIHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwibWlkZGxlXCIsXG4gICAgdmlhTm9kZTogVk5vZGUsXG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgaG92ZXI6IGJvb2xlYW4sXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJtaWRkbGVBcnJvd1R5cGVcIiB8IFwibWlkZGxlQXJyb3dTY2FsZVwiIHwgXCJ3aWR0aFwiXG4gICAgPlxuICApOiBBcnJvd0RhdGFXaXRoQ29yZTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwidG9cIixcbiAgICB2aWFOb2RlOiBWTm9kZSxcbiAgICBzZWxlY3RlZDogYm9vbGVhbixcbiAgICBob3ZlcjogYm9vbGVhbixcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInRvQXJyb3dUeXBlXCIgfCBcInRvQXJyb3dTY2FsZVwiIHwgXCJ3aWR0aFwiXG4gICAgPlxuICApOiBBcnJvd0RhdGFXaXRoQ29yZTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwiZnJvbVwiLFxuICAgIHZpYU5vZGU6IFZOb2RlLFxuICAgIHNlbGVjdGVkOiBib29sZWFuLFxuICAgIGhvdmVyOiBib29sZWFuLFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwiZnJvbUFycm93VHlwZVwiIHwgXCJmcm9tQXJyb3dTY2FsZVwiIHwgXCJ3aWR0aFwiXG4gICAgPlxuICApOiBBcnJvd0RhdGFXaXRoQ29yZTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwiZnJvbVwiIHwgXCJ0b1wiIHwgXCJtaWRkbGVcIixcbiAgICB2aWFOb2RlOiBWTm9kZSxcbiAgICBfc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgX2hvdmVyOiBib29sZWFuLFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8RWRnZUZvcm1hdHRpbmdWYWx1ZXMsIFwid2lkdGhcIj5cbiAgKTogQXJyb3dEYXRhV2l0aENvcmUge1xuICAgIC8vIHNldCBsZXRzXG4gICAgbGV0IGFuZ2xlOiBudW1iZXI7XG4gICAgbGV0IGFycm93UG9pbnQ6IFBvaW50O1xuICAgIGxldCBub2RlMTogVk5vZGU7XG4gICAgbGV0IG5vZGUyOiBWTm9kZTtcbiAgICBsZXQgcmV2ZXJzZWQ6IGJvb2xlYW47XG4gICAgbGV0IHNjYWxlRmFjdG9yOiBudW1iZXI7XG4gICAgbGV0IHR5cGU6IEFycm93VHlwZTtcbiAgICBjb25zdCBsaW5lV2lkdGg6IG51bWJlciA9IHZhbHVlcy53aWR0aDtcblxuICAgIGlmIChwb3NpdGlvbiA9PT0gXCJmcm9tXCIpIHtcbiAgICAgIG5vZGUxID0gdGhpcy5mcm9tO1xuICAgICAgbm9kZTIgPSB0aGlzLnRvO1xuICAgICAgcmV2ZXJzZWQgPSB2YWx1ZXMuZnJvbUFycm93U2NhbGUhIDwgMDtcbiAgICAgIHNjYWxlRmFjdG9yID0gTWF0aC5hYnModmFsdWVzLmZyb21BcnJvd1NjYWxlISk7XG4gICAgICB0eXBlID0gdmFsdWVzLmZyb21BcnJvd1R5cGUhO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09IFwidG9cIikge1xuICAgICAgbm9kZTEgPSB0aGlzLnRvO1xuICAgICAgbm9kZTIgPSB0aGlzLmZyb207XG4gICAgICByZXZlcnNlZCA9IHZhbHVlcy50b0Fycm93U2NhbGUhIDwgMDtcbiAgICAgIHNjYWxlRmFjdG9yID0gTWF0aC5hYnModmFsdWVzLnRvQXJyb3dTY2FsZSEpO1xuICAgICAgdHlwZSA9IHZhbHVlcy50b0Fycm93VHlwZSE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUxID0gdGhpcy50bztcbiAgICAgIG5vZGUyID0gdGhpcy5mcm9tO1xuICAgICAgcmV2ZXJzZWQgPSB2YWx1ZXMubWlkZGxlQXJyb3dTY2FsZSEgPCAwO1xuICAgICAgc2NhbGVGYWN0b3IgPSBNYXRoLmFicyh2YWx1ZXMubWlkZGxlQXJyb3dTY2FsZSEpO1xuICAgICAgdHlwZSA9IHZhbHVlcy5taWRkbGVBcnJvd1R5cGUhO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IDE1ICogc2NhbGVGYWN0b3IgKyAzICogbGluZVdpZHRoOyAvLyAzKiBsaW5lV2lkdGggaXMgdGhlIHdpZHRoIG9mIHRoZSBlZGdlLlxuXG4gICAgLy8gaWYgbm90IGNvbm5lY3RlZCB0byBpdHNlbGZcbiAgICBpZiAobm9kZTEgIT0gbm9kZTIpIHtcbiAgICAgIGNvbnN0IGFwcHJveGltYXRlRWRnZUxlbmd0aCA9IE1hdGguaHlwb3QoXG4gICAgICAgIG5vZGUxLnggLSBub2RlMi54LFxuICAgICAgICBub2RlMS55IC0gbm9kZTIueVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlTGVuZ3RoID0gbGVuZ3RoIC8gYXBwcm94aW1hdGVFZGdlTGVuZ3RoO1xuXG4gICAgICBpZiAocG9zaXRpb24gIT09IFwibWlkZGxlXCIpIHtcbiAgICAgICAgLy8gZHJhdyBhcnJvdyBoZWFkXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc21vb3RoLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBwb2ludFQgPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb24obm9kZTEsIGN0eCwgeyB2aWE6IHZpYU5vZGUgfSk7XG4gICAgICAgICAgY29uc3QgZ3VpZGVQb3MgPSB0aGlzLmdldFBvaW50KFxuICAgICAgICAgICAgcG9pbnRULnQgKyByZWxhdGl2ZUxlbmd0aCAqIChwb3NpdGlvbiA9PT0gXCJmcm9tXCIgPyAxIDogLTEpLFxuICAgICAgICAgICAgdmlhTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYW5nbGUgPSBNYXRoLmF0YW4yKHBvaW50VC55IC0gZ3VpZGVQb3MueSwgcG9pbnRULnggLSBndWlkZVBvcy54KTtcbiAgICAgICAgICBhcnJvd1BvaW50ID0gcG9pbnRUO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFuZ2xlID0gTWF0aC5hdGFuMihub2RlMS55IC0gbm9kZTIueSwgbm9kZTEueCAtIG5vZGUyLngpO1xuICAgICAgICAgIGFycm93UG9pbnQgPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb24obm9kZTEsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5lZ2F0aXZlIGhhbGYgbGVuZ3RoIHJldmVyc2VzIGFycm93IGRpcmVjdGlvbi5cbiAgICAgICAgY29uc3QgaGFsZkxlbmd0aCA9IChyZXZlcnNlZCA/IC1yZWxhdGl2ZUxlbmd0aCA6IHJlbGF0aXZlTGVuZ3RoKSAvIDI7XG4gICAgICAgIGNvbnN0IGd1aWRlUG9zMSA9IHRoaXMuZ2V0UG9pbnQoMC41ICsgaGFsZkxlbmd0aCwgdmlhTm9kZSk7XG4gICAgICAgIGNvbnN0IGd1aWRlUG9zMiA9IHRoaXMuZ2V0UG9pbnQoMC41IC0gaGFsZkxlbmd0aCwgdmlhTm9kZSk7XG4gICAgICAgIGFuZ2xlID0gTWF0aC5hdGFuMihcbiAgICAgICAgICBndWlkZVBvczEueSAtIGd1aWRlUG9zMi55LFxuICAgICAgICAgIGd1aWRlUG9zMS54IC0gZ3VpZGVQb3MyLnhcbiAgICAgICAgKTtcbiAgICAgICAgYXJyb3dQb2ludCA9IHRoaXMuZ2V0UG9pbnQoMC41LCB2aWFOb2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZHJhdyBjaXJjbGVcbiAgICAgIGNvbnN0IFt4LCB5LCByYWRpdXNdID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YShjdHgpO1xuXG4gICAgICBpZiAocG9zaXRpb24gPT09IFwiZnJvbVwiKSB7XG4gICAgICAgIGNvbnN0IGxvdyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlO1xuICAgICAgICBjb25zdCBoaWdoID0gdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUgKyBNYXRoLlBJO1xuXG4gICAgICAgIGNvbnN0IHBvaW50VCA9IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBsb3csXG4gICAgICAgICAgaGlnaCxcbiAgICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgICB9KTtcbiAgICAgICAgYW5nbGUgPSBwb2ludFQudCAqIC0yICogTWF0aC5QSSArIDEuNSAqIE1hdGguUEkgKyAwLjEgKiBNYXRoLlBJO1xuICAgICAgICBhcnJvd1BvaW50ID0gcG9pbnRUO1xuICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gXCJ0b1wiKSB7XG4gICAgICAgIGNvbnN0IGxvdyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlO1xuICAgICAgICBjb25zdCBoaWdoID0gdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUgKyBNYXRoLlBJO1xuXG4gICAgICAgIGNvbnN0IHBvaW50VCA9IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBsb3csXG4gICAgICAgICAgaGlnaCxcbiAgICAgICAgICBkaXJlY3Rpb246IDEsXG4gICAgICAgIH0pO1xuICAgICAgICBhbmdsZSA9IHBvaW50VC50ICogLTIgKiBNYXRoLlBJICsgMS41ICogTWF0aC5QSSAtIDEuMSAqIE1hdGguUEk7XG4gICAgICAgIGFycm93UG9pbnQgPSBwb2ludFQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZSAvICgyICogTWF0aC5QSSk7XG4gICAgICAgIGFycm93UG9pbnQgPSB0aGlzLl9wb2ludE9uQ2lyY2xlKHgsIHksIHJhZGl1cywgcG9zKTtcbiAgICAgICAgYW5nbGUgPSBwb3MgKiAtMiAqIE1hdGguUEkgKyAxLjUgKiBNYXRoLlBJICsgMC4xICogTWF0aC5QSTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB4aSA9IGFycm93UG9pbnQueCAtIGxlbmd0aCAqIDAuOSAqIE1hdGguY29zKGFuZ2xlKTtcbiAgICBjb25zdCB5aSA9IGFycm93UG9pbnQueSAtIGxlbmd0aCAqIDAuOSAqIE1hdGguc2luKGFuZ2xlKTtcbiAgICBjb25zdCBhcnJvd0NvcmUgPSB7IHg6IHhpLCB5OiB5aSB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvaW50OiBhcnJvd1BvaW50LFxuICAgICAgY29yZTogYXJyb3dDb3JlLFxuICAgICAgYW5nbGU6IGFuZ2xlLFxuICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGRyYXdBcnJvd0hlYWQoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImNvbG9yXCJcbiAgICAgIHwgXCJvcGFjaXR5XCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgICB8IFwid2lkdGhcIlxuICAgID4sXG4gICAgX3NlbGVjdGVkOiBib29sZWFuLFxuICAgIF9ob3ZlcjogYm9vbGVhbixcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB2b2lkIHtcbiAgICAvLyBzZXQgc3R5bGVcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmdldENvbG9yKGN0eCwgdmFsdWVzKTtcbiAgICBjdHguZmlsbFN0eWxlID0gY3R4LnN0cm9rZVN0eWxlO1xuICAgIGN0eC5saW5lV2lkdGggPSB2YWx1ZXMud2lkdGg7XG5cbiAgICBjb25zdCBjYW5GaWxsID0gRW5kUG9pbnRzLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuXG4gICAgaWYgKGNhbkZpbGwpIHtcbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzaGFkb3cgZm9ybWF0dGluZyB2YWx1ZXMgaW4gdGhlIGNvbnRleHQgaWYgZW5hYmxlZCwgZG8gbm90aGluZyBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgZm9yIHRoZSBzaGFkb3cuXG4gICAqL1xuICBwdWJsaWMgZW5hYmxlU2hhZG93KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IHRydWUpIHtcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9IHZhbHVlcy5zaGFkb3dDb2xvcjtcbiAgICAgIGN0eC5zaGFkb3dCbHVyID0gdmFsdWVzLnNoYWRvd1NpemU7XG4gICAgICBjdHguc2hhZG93T2Zmc2V0WCA9IHZhbHVlcy5zaGFkb3dYO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSB2YWx1ZXMuc2hhZG93WTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHNoYWRvdyBmb3JtYXR0aW5nIHZhbHVlcyBpbiB0aGUgY29udGV4dCBpZiBlbmFibGVkLCBkbyBub3RoaW5nIG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBmb3IgdGhlIHNoYWRvdy5cbiAgICovXG4gIHB1YmxpYyBkaXNhYmxlU2hhZG93KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogRWRnZUZvcm1hdHRpbmdWYWx1ZXNcbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IHRydWUpIHtcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9IFwicmdiYSgwLDAsMCwwKVwiO1xuICAgICAgY3R4LnNoYWRvd0JsdXIgPSAwO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFggPSAwO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGJhY2tncm91bmQgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXR0aW5nIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBmb3IgdGhlIGJhY2tncm91bmQuXG4gICAqL1xuICBwdWJsaWMgZHJhd0JhY2tncm91bmQoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJiYWNrZ3JvdW5kQ29sb3JcIiB8IFwiYmFja2dyb3VuZFNpemVcIlxuICAgID5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5iYWNrZ3JvdW5kICE9PSBmYWxzZSkge1xuICAgICAgLy8gc2F2ZSBvcmlnaW5hbCBsaW5lIGF0dHJzXG4gICAgICBjb25zdCBvcmlnQ3R4QXR0ciA9IHtcbiAgICAgICAgc3Ryb2tlU3R5bGU6IGN0eC5zdHJva2VTdHlsZSxcbiAgICAgICAgbGluZVdpZHRoOiBjdHgubGluZVdpZHRoLFxuICAgICAgICBkYXNoZXM6IChjdHggYXMgYW55KS5kYXNoZXMsXG4gICAgICB9O1xuXG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSB2YWx1ZXMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IHZhbHVlcy5iYWNrZ3JvdW5kU2l6ZTtcbiAgICAgIHRoaXMuc2V0U3Ryb2tlRGFzaGVkKGN0eCwgdmFsdWVzLmJhY2tncm91bmREYXNoZXMpO1xuXG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgbGluZSBhdHRyc1xuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gb3JpZ0N0eEF0dHIuc3Ryb2tlU3R5bGU7XG4gICAgICBjdHgubGluZVdpZHRoID0gb3JpZ0N0eEF0dHIubGluZVdpZHRoO1xuICAgICAgKGN0eCBhcyBhbnkpLmRhc2hlcyA9IG9yaWdDdHhBdHRyLmRhc2hlcztcbiAgICAgIHRoaXMuc2V0U3Ryb2tlRGFzaGVkKGN0eCwgdmFsdWVzLmRhc2hlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbGluZSBkYXNoIHBhdHRlcm4gaWYgc3VwcG9ydGVkLiBMb2dzIGEgd2FybmluZyB0byB0aGUgY29uc29sZSBpZiBpdCBpc24ndCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gZGFzaGVzIC0gVGhlIHBhdHRlcm4gW2xpbmUsIHNwYWNlLCBsaW5l4oCmXSwgdHJ1ZSBmb3IgZGVmYXVsdCBkYXNoZWQgbGluZSBvciBmYWxzZSBmb3Igbm9ybWFsIGxpbmUuXG4gICAqL1xuICBwdWJsaWMgc2V0U3Ryb2tlRGFzaGVkKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGRhc2hlcz86IGJvb2xlYW4gfCBudW1iZXJbXVxuICApOiB2b2lkIHtcbiAgICBpZiAoZGFzaGVzICE9PSBmYWxzZSkge1xuICAgICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBBcnJheS5pc0FycmF5KGRhc2hlcykgPyBkYXNoZXMgOiBbNSwgNV07XG4gICAgICAgIGN0eC5zZXRMaW5lRGFzaChwYXR0ZXJuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcInNldExpbmVEYXNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLiBUaGUgZGFzaGVkIHN0cm9rZSBjYW5ub3QgYmUgdXNlZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4LnNldExpbmVEYXNoKFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcInNldExpbmVEYXNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLiBUaGUgZGFzaGVkIHN0cm9rZSBjYW5ub3QgYmUgdXNlZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IEVkZ2VCYXNlIH0gZnJvbSBcIi4vZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIFRoZSBCYXNlIENsYXNzIGZvciBhbGwgQmV6aWVyIGVkZ2VzLlxuICogQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbCBzbW9vdGggZ3JhZHVhbCBjdXJ2ZXMgaW4gcGF0aHMgYmV0d2VlbiBub2Rlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJlemllckVkZ2VCYXNlPFZpYT4gZXh0ZW5kcyBFZGdlQmFzZTxWaWE+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYWRkaXRpb25hbCBwb2ludChzKSB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICpcbiAgICogQHJldHVybnMgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludChzKSB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBfZ2V0VmlhQ29vcmRpbmF0ZXMoKTogVmlhO1xuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgYm9yZGVyIG9mIHRoZSBub2RlIGFuZCB0aGUgZWRnZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBmdW5jdGlvbiB1c2VzIGJpbmFyeSBzZWFyY2ggdG8gbG9vayBmb3IgdGhlIHBvaW50IHdoZXJlIHRoZSBiZXppZXIgY3VydmUgY3Jvc3NlcyB0aGUgYm9yZGVyIG9mIHRoZSBub2RlLlxuICAgKiBAcGFyYW0gbmVhck5vZGUgLSBUaGUgbm9kZSAoZWl0aGVyIGZyb20gb3IgdG8gbm9kZSBvZiB0aGUgZWRnZSkuXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmlhTm9kZSAtIEFkZGl0aW9uYWwgbm9kZShzKSB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICogQHJldHVybnMgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgYm9yZGVyIG9mIHRoZSBub2RlIGFuZCB0aGUgZWRnZS5cbiAgICovXG4gIHByb3RlY3RlZCBfZmluZEJvcmRlclBvc2l0aW9uQmV6aWVyKFxuICAgIG5lYXJOb2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2aWFOb2RlOiBWaWEgPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IFBvaW50VCB7XG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwO1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IDAuMjtcbiAgICBsZXQgZnJvbSA9IGZhbHNlO1xuICAgIGxldCBoaWdoID0gMTtcbiAgICBsZXQgbG93ID0gMDtcbiAgICBsZXQgbm9kZSA9IHRoaXMudG87XG4gICAgbGV0IHBvczogUG9pbnQ7XG4gICAgbGV0IG1pZGRsZTogbnVtYmVyO1xuXG4gICAgbGV0IGVuZFBvaW50T2Zmc2V0ID0gdGhpcy5vcHRpb25zLmVuZFBvaW50T2Zmc2V0XG4gICAgICA/IHRoaXMub3B0aW9ucy5lbmRQb2ludE9mZnNldC50b1xuICAgICAgOiAwO1xuXG4gICAgaWYgKG5lYXJOb2RlLmlkID09PSB0aGlzLmZyb20uaWQpIHtcbiAgICAgIG5vZGUgPSB0aGlzLmZyb207XG4gICAgICBmcm9tID0gdHJ1ZTtcblxuICAgICAgZW5kUG9pbnRPZmZzZXQgPSB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXRcbiAgICAgICAgPyB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcnJvd1N0cmlrZXRocm91Z2ggPT09IGZhbHNlKSB7XG4gICAgICBlbmRQb2ludE9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgZG8ge1xuICAgICAgbWlkZGxlID0gKGxvdyArIGhpZ2gpICogMC41O1xuXG4gICAgICBwb3MgPSB0aGlzLmdldFBvaW50KG1pZGRsZSwgdmlhTm9kZSk7XG4gICAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIobm9kZS55IC0gcG9zLnksIG5vZGUueCAtIHBvcy54KTtcblxuICAgICAgY29uc3QgZGlzdGFuY2VUb0JvcmRlciA9XG4gICAgICAgIG5vZGUuZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSArIGVuZFBvaW50T2Zmc2V0O1xuXG4gICAgICBjb25zdCBkaXN0YW5jZVRvUG9pbnQgPSBNYXRoLnNxcnQoXG4gICAgICAgIE1hdGgucG93KHBvcy54IC0gbm9kZS54LCAyKSArIE1hdGgucG93KHBvcy55IC0gbm9kZS55LCAyKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBkaXN0YW5jZVRvQm9yZGVyIC0gZGlzdGFuY2VUb1BvaW50O1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZlcmVuY2UpIDwgdGhyZXNob2xkKSB7XG4gICAgICAgIGJyZWFrOyAvLyBmb3VuZFxuICAgICAgfSBlbHNlIGlmIChkaWZmZXJlbmNlIDwgMCkge1xuICAgICAgICAvLyBkaXN0YW5jZSB0byBub2RlcyBpcyBsYXJnZXIgdGhhbiBkaXN0YW5jZSB0byBib3JkZXIgLS0+IHQgbmVlZHMgdG8gYmUgYmlnZ2VyIGlmIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHRvIG5vZGUuXG4gICAgICAgIGlmIChmcm9tID09PSBmYWxzZSkge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZnJvbSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICArK2l0ZXJhdGlvbjtcbiAgICB9IHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wb3MsXG4gICAgICB0OiBtaWRkbGUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCAoeDMseTMpIGFuZCBhIGxpbmUgc2VnbWVudCBmcm9tICh4MSx5MSkgdG8gKHgyLHkyKS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84NDkyMTEvc2hvcnRlc3QtZGlzdGFuY2FlLWJldHdlZW4tYS1wb2ludC1hbmQtYS1saW5lLXNlZ21lbnRcbiAgICogQHBhcmFtIHgxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB2aWEgLSBUaGUgY29udHJvbCBwb2ludCBmb3IgdGhlIGVkZ2UuXG4gICAqIEByZXR1cm5zIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBsaW5lIHNlZ21lbnQgYW5kIHRoZSBwb2ludC5cbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXIsXG4gICAgdmlhOiBQb2ludFxuICApOiBudW1iZXIge1xuICAgIC8vIHgzLHkzIGlzIHRoZSBwb2ludFxuICAgIGxldCBtaW5EaXN0YW5jZSA9IDFlOTtcbiAgICBsZXQgZGlzdGFuY2U7XG4gICAgbGV0IGksIHQsIHgsIHk7XG4gICAgbGV0IGxhc3RYID0geDE7XG4gICAgbGV0IGxhc3RZID0geTE7XG4gICAgZm9yIChpID0gMTsgaSA8IDEwOyBpKyspIHtcbiAgICAgIHQgPSAwLjEgKiBpO1xuICAgICAgeCA9XG4gICAgICAgIE1hdGgucG93KDEgLSB0LCAyKSAqIHgxICsgMiAqIHQgKiAoMSAtIHQpICogdmlhLnggKyBNYXRoLnBvdyh0LCAyKSAqIHgyO1xuICAgICAgeSA9XG4gICAgICAgIE1hdGgucG93KDEgLSB0LCAyKSAqIHkxICsgMiAqIHQgKiAoMSAtIHQpICogdmlhLnkgKyBNYXRoLnBvdyh0LCAyKSAqIHkyO1xuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIGRpc3RhbmNlID0gdGhpcy5fZ2V0RGlzdGFuY2VUb0xpbmUobGFzdFgsIGxhc3RZLCB4LCB5LCB4MywgeTMpO1xuICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlIDwgbWluRGlzdGFuY2UgPyBkaXN0YW5jZSA6IG1pbkRpc3RhbmNlO1xuICAgICAgfVxuICAgICAgbGFzdFggPSB4O1xuICAgICAgbGFzdFkgPSB5O1xuICAgIH1cblxuICAgIHJldHVybiBtaW5EaXN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBiZXppZXIgY3VydmUgYmV0d2VlbiB0d28gbm9kZXMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBtZXRob2QgYWNjZXB0cyB6ZXJvLCBvbmUgb3IgdHdvIGNvbnRyb2wgcG9pbnRzLlxuICAgKiBQYXNzaW5nIHplcm8gY29udHJvbCBwb2ludHMganVzdCBkcmF3cyBhIHN0cmFpZ2h0IGxpbmUuXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gU3R5bGUgb3B0aW9ucyBmb3IgZWRnZSBkcmF3aW5nLlxuICAgKiBAcGFyYW0gdmlhTm9kZTEgLSBGaXJzdCBjb250cm9sIHBvaW50IGZvciBjdXJ2ZSBkcmF3aW5nLlxuICAgKiBAcGFyYW0gdmlhTm9kZTIgLSBTZWNvbmQgY29udHJvbCBwb2ludCBmb3IgY3VydmUgZHJhd2luZy5cbiAgICovXG4gIHByb3RlY3RlZCBfYmV6aWVyQ3VydmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImJhY2tncm91bmRDb2xvclwiXG4gICAgICB8IFwiYmFja2dyb3VuZFNpemVcIlxuICAgICAgfCBcInNoYWRvd0NvbG9yXCJcbiAgICAgIHwgXCJzaGFkb3dTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dYXCJcbiAgICAgIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHZpYU5vZGUxPzogUG9pbnQsXG4gICAgdmlhTm9kZTI/OiBQb2ludFxuICApOiB2b2lkIHtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyh0aGlzLmZyb21Qb2ludC54LCB0aGlzLmZyb21Qb2ludC55KTtcblxuICAgIGlmICh2aWFOb2RlMSAhPSBudWxsICYmIHZpYU5vZGUxLnggIT0gbnVsbCkge1xuICAgICAgaWYgKHZpYU5vZGUyICE9IG51bGwgJiYgdmlhTm9kZTIueCAhPSBudWxsKSB7XG4gICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKFxuICAgICAgICAgIHZpYU5vZGUxLngsXG4gICAgICAgICAgdmlhTm9kZTEueSxcbiAgICAgICAgICB2aWFOb2RlMi54LFxuICAgICAgICAgIHZpYU5vZGUyLnksXG4gICAgICAgICAgdGhpcy50b1BvaW50LngsXG4gICAgICAgICAgdGhpcy50b1BvaW50LnlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKFxuICAgICAgICAgIHZpYU5vZGUxLngsXG4gICAgICAgICAgdmlhTm9kZTEueSxcbiAgICAgICAgICB0aGlzLnRvUG9pbnQueCxcbiAgICAgICAgICB0aGlzLnRvUG9pbnQueVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmYWxsYmFjayB0byBub3JtYWwgc3RyYWlnaHQgZWRnZVxuICAgICAgY3R4LmxpbmVUbyh0aGlzLnRvUG9pbnQueCwgdGhpcy50b1BvaW50LnkpO1xuICAgIH1cblxuICAgIC8vIGRyYXcgYSBiYWNrZ3JvdW5kXG4gICAgdGhpcy5kcmF3QmFja2dyb3VuZChjdHgsIHZhbHVlcyk7XG5cbiAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgdGhpcy5lbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIGN0eC5zdHJva2UoKTtcbiAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFZpYSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCZXppZXJFZGdlQmFzZSB9IGZyb20gXCIuL3V0aWwvYmV6aWVyLWVkZ2UtYmFzZVwiO1xuaW1wb3J0IHtcbiAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdXRpbC90eXBlc1wiO1xuXG4vKipcbiAqIEEgRHluYW1pYyBCZXppZXIgRWRnZS4gQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbCBzbW9vdGggZ3JhZHVhbFxuICogY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuIFRoZSBEeW5hbWljIHBpZWNlIHJlZmVycyB0byBob3cgdGhlIGN1cnZlXG4gKiByZWFjdHMgdG8gcGh5c2ljcyBjaGFuZ2VzLlxuICpcbiAqIEBhdWdtZW50cyBCZXppZXJFZGdlQmFzZVxuICovXG5leHBvcnQgY2xhc3MgQmV6aWVyRWRnZUR5bmFtaWMgZXh0ZW5kcyBCZXppZXJFZGdlQmFzZTxQb2ludD4ge1xuICBwdWJsaWMgdmlhOiBWTm9kZSA9IHRoaXMudmlhOyAvLyBjb25zdHJ1Y3RvciDihpIgc3VwZXIg4oaSIHN1cGVyIOKGkiBzZXRPcHRpb25zIOKGkiBzZXR1cFN1cHBvcnROb2RlXG4gIHByaXZhdGUgcmVhZG9ubHkgX2JvdW5kRnVuY3Rpb246ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgLy90aGlzLnZpYSA9IHVuZGVmaW5lZDsgLy8gSGVyZSBmb3IgY29tcGxldGVuZXNzIGJ1dCBub3QgYWxsb3dlZCB0byBkZWZpbmVkIGJlZm9yZSBzdXBlcigpIGlzIGludm9rZWQuXG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpOyAvLyAtLT4gdGhpcyBjYWxscyB0aGUgc2V0T3B0aW9ucyBiZWxvd1xuICAgIHRoaXMuX2JvdW5kRnVuY3Rpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnBvc2l0aW9uQmV6aWVyTm9kZSgpO1xuICAgIH07XG4gICAgdGhpcy5fYm9keS5lbWl0dGVyLm9uKFwiX3JlcG9zaXRpb25CZXppZXJOb2Rlc1wiLCB0aGlzLl9ib3VuZEZ1bmN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiBFZGdlT3B0aW9ucyk6IHZvaWQge1xuICAgIHN1cGVyLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgcGh5c2ljcyBoYXMgY2hhbmdlZC5cbiAgICBsZXQgcGh5c2ljc0NoYW5nZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucGh5c2ljcyAhPT0gb3B0aW9ucy5waHlzaWNzKSB7XG4gICAgICBwaHlzaWNzQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG9wdGlvbnMgYW5kIHRoZSB0byBhbmQgZnJvbSBub2Rlc1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5pZCA9IHRoaXMub3B0aW9ucy5pZDtcbiAgICB0aGlzLmZyb20gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy5mcm9tXTtcbiAgICB0aGlzLnRvID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMudG9dO1xuXG4gICAgLy8gc2V0dXAgdGhlIHN1cHBvcnQgbm9kZSBhbmQgY29ubmVjdFxuICAgIHRoaXMuc2V0dXBTdXBwb3J0Tm9kZSgpO1xuICAgIHRoaXMuY29ubmVjdCgpO1xuXG4gICAgLy8gd2hlbiB3ZSBjaGFuZ2UgdGhlIHBoeXNpY3Mgc3RhdGUgb2YgdGhlIGVkZ2UsIHdlIHJlcG9zaXRpb24gdGhlIHN1cHBvcnQgbm9kZS5cbiAgICBpZiAocGh5c2ljc0NoYW5nZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy52aWEuc2V0T3B0aW9ucyh7IHBoeXNpY3M6IHRoaXMub3B0aW9ucy5waHlzaWNzIH0pO1xuICAgICAgdGhpcy5wb3NpdGlvbkJlemllck5vZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGNvbm5lY3QoKTogdm9pZCB7XG4gICAgdGhpcy5mcm9tID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMuZnJvbV07XG4gICAgdGhpcy50byA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLnRvXTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZyb20gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy50byA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLm9wdGlvbnMucGh5c2ljcyA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZml4IHdlaXJkIGJlaGF2aW91ciB3aGVyZSBhIHNlbGYgcmVmZXJlbmNpbmcgbm9kZSBoYXMgcGh5c2ljcyBlbmFibGVkXG4gICAgICBpZiAodGhpcy5mcm9tLmlkID09PSB0aGlzLnRvLmlkKSB7XG4gICAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgY2xlYW51cCgpOiBib29sZWFuIHtcbiAgICB0aGlzLl9ib2R5LmVtaXR0ZXIub2ZmKFwiX3JlcG9zaXRpb25CZXppZXJOb2Rlc1wiLCB0aGlzLl9ib3VuZEZ1bmN0aW9uKTtcbiAgICBpZiAodGhpcy52aWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIHRoaXMuX2JvZHkubm9kZXNbdGhpcy52aWEuaWRdO1xuICAgICAgdGhpcy52aWEgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbmQgYWRkIGEgc3VwcG9ydCBub2RlIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEJlemllciBjdXJ2ZXMgcmVxdWlyZSBhbiBhbmNob3IgcG9pbnQgdG8gY2FsY3VsYXRlIHRoZSBzbW9vdGggZmxvdy5cbiAgICogVGhlc2UgcG9pbnRzIGFyZSBub2Rlcy5cbiAgICogVGhlc2Ugbm9kZXMgYXJlIGludmlzaWJsZSBidXQgYXJlIHVzZWQgZm9yIHRoZSBmb3JjZSBjYWxjdWxhdGlvbi5cbiAgICpcbiAgICogVGhlIGNoYW5nZWQgZGF0YSBpcyBub3QgY2FsbGVkLCBpZiBuZWVkZWQsIGl0IGlzIHJldHVybmVkIGJ5IHRoZSBtYWluIGVkZ2UgY29uc3RydWN0b3IuXG4gICAqL1xuICBwdWJsaWMgc2V0dXBTdXBwb3J0Tm9kZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgbm9kZUlkID0gXCJlZGdlSWQ6XCIgKyB0aGlzLmlkO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX2JvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGUoe1xuICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcGh5c2ljczogdHJ1ZSxcbiAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ib2R5Lm5vZGVzW25vZGVJZF0gPSBub2RlO1xuICAgICAgdGhpcy52aWEgPSBub2RlO1xuICAgICAgdGhpcy52aWEucGFyZW50RWRnZUlkID0gdGhpcy5pZDtcbiAgICAgIHRoaXMucG9zaXRpb25CZXppZXJOb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9uIGJlemllciBub2RlLlxuICAgKi9cbiAgcHVibGljIHBvc2l0aW9uQmV6aWVyTm9kZSgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnZpYSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZyb20gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy50byAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLnZpYS54ID0gMC41ICogKHRoaXMuZnJvbS54ICsgdGhpcy50by54KTtcbiAgICAgIHRoaXMudmlhLnkgPSAwLjUgKiAodGhpcy5mcm9tLnkgKyB0aGlzLnRvLnkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy52aWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy52aWEueCA9IDA7XG4gICAgICB0aGlzLnZpYS55ID0gMDtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9saW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIHwgXCJiYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgfCBcImJhY2tncm91bmRTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgPixcbiAgICB2aWFOb2RlOiBWTm9kZVxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9iZXppZXJDdXJ2ZShjdHgsIHZhbHVlcywgdmlhTm9kZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9nZXRWaWFDb29yZGluYXRlcygpOiBQb2ludCB7XG4gICAgcmV0dXJuIHRoaXMudmlhO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFBvaW50IHtcbiAgICByZXR1cm4gdGhpcy52aWE7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFBvaW50KHBvc2l0aW9uOiBudW1iZXIsIHZpYU5vZGU6IFBvaW50ID0gdGhpcy52aWEpOiBQb2ludCB7XG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gdGhpcy50bykge1xuICAgICAgY29uc3QgW2N4LCBjeSwgY3JdID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YSgpO1xuICAgICAgY29uc3QgYSA9IDIgKiBNYXRoLlBJICogKDEgLSBwb3NpdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBjeCArIGNyICogTWF0aC5zaW4oYSksXG4gICAgICAgIHk6IGN5ICsgY3IgLSBjciAqICgxIC0gTWF0aC5jb3MoYSkpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDpcbiAgICAgICAgICBNYXRoLnBvdygxIC0gcG9zaXRpb24sIDIpICogdGhpcy5mcm9tUG9pbnQueCArXG4gICAgICAgICAgMiAqIHBvc2l0aW9uICogKDEgLSBwb3NpdGlvbikgKiB2aWFOb2RlLnggK1xuICAgICAgICAgIE1hdGgucG93KHBvc2l0aW9uLCAyKSAqIHRoaXMudG9Qb2ludC54LFxuICAgICAgICB5OlxuICAgICAgICAgIE1hdGgucG93KDEgLSBwb3NpdGlvbiwgMikgKiB0aGlzLmZyb21Qb2ludC55ICtcbiAgICAgICAgICAyICogcG9zaXRpb24gKiAoMSAtIHBvc2l0aW9uKSAqIHZpYU5vZGUueSArXG4gICAgICAgICAgTWF0aC5wb3cocG9zaXRpb24sIDIpICogdGhpcy50b1BvaW50LnksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2ZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBuZWFyTm9kZTogVk5vZGUsXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbiAgKTogUG9pbnRUIHtcbiAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQmV6aWVyKG5lYXJOb2RlLCBjdHgsIHRoaXMudmlhKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyXG4gICk6IG51bWJlciB7XG4gICAgLy8geDMseTMgaXMgdGhlIHBvaW50XG4gICAgcmV0dXJuIHRoaXMuX2dldERpc3RhbmNlVG9CZXppZXJFZGdlKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHRoaXMudmlhKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJlemllckVkZ2VCYXNlIH0gZnJvbSBcIi4vdXRpbC9iZXppZXItZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi91dGlsL3R5cGVzXCI7XG5cbi8qKlxuICogQSBTdGF0aWMgQmV6aWVyIEVkZ2UuIEJlemllciBjdXJ2ZXMgYXJlIHVzZWQgdG8gbW9kZWwgc21vb3RoIGdyYWR1YWwgY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCZXppZXJFZGdlU3RhdGljIGV4dGVuZHMgQmV6aWVyRWRnZUJhc2U8UG9pbnQ+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICB8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAgICAgIHwgXCJiYWNrZ3JvdW5kU2l6ZVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZTogUG9pbnRcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fYmV6aWVyQ3VydmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFBvaW50IHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdmlhIG5vZGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFdlIGRvIG5vdCB1c2UgdGhlIHRvIGFuZCBmcm9tUG9pbnRzIGhlcmUgdG8gbWFrZSB0aGUgdmlhIG5vZGVzIHRoZSBzYW1lIGFzIGVkZ2VzIHdpdGhvdXQgYXJyb3dzLlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIHZpYSBub2RlLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXRWaWFDb29yZGluYXRlcygpOiBQb2ludCB7XG4gICAgLy8gQXNzdW1wdGlvbjogeC95IGNvb3JkaW5hdGVzIGluIGZyb20vdG8gYWx3YXlzIGRlZmluZWRcbiAgICBjb25zdCBmYWN0b3IgPSB0aGlzLm9wdGlvbnMuc21vb3RoLnJvdW5kbmVzcztcbiAgICBjb25zdCB0eXBlID0gdGhpcy5vcHRpb25zLnNtb290aC50eXBlO1xuICAgIGxldCBkeCA9IE1hdGguYWJzKHRoaXMuZnJvbS54IC0gdGhpcy50by54KTtcbiAgICBsZXQgZHkgPSBNYXRoLmFicyh0aGlzLmZyb20ueSAtIHRoaXMudG8ueSk7XG4gICAgaWYgKHR5cGUgPT09IFwiZGlzY3JldGVcIiB8fCB0eXBlID09PSBcImRpYWdvbmFsQ3Jvc3NcIikge1xuICAgICAgbGV0IHN0ZXBYO1xuICAgICAgbGV0IHN0ZXBZO1xuXG4gICAgICBpZiAoZHggPD0gZHkpIHtcbiAgICAgICAgc3RlcFggPSBzdGVwWSA9IGZhY3RvciAqIGR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RlcFggPSBzdGVwWSA9IGZhY3RvciAqIGR4O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5mcm9tLnggPiB0aGlzLnRvLngpIHtcbiAgICAgICAgc3RlcFggPSAtc3RlcFg7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mcm9tLnkgPj0gdGhpcy50by55KSB7XG4gICAgICAgIHN0ZXBZID0gLXN0ZXBZO1xuICAgICAgfVxuXG4gICAgICBsZXQgeFZpYSA9IHRoaXMuZnJvbS54ICsgc3RlcFg7XG4gICAgICBsZXQgeVZpYSA9IHRoaXMuZnJvbS55ICsgc3RlcFk7XG5cbiAgICAgIGlmICh0eXBlID09PSBcImRpc2NyZXRlXCIpIHtcbiAgICAgICAgaWYgKGR4IDw9IGR5KSB7XG4gICAgICAgICAgeFZpYSA9IGR4IDwgZmFjdG9yICogZHkgPyB0aGlzLmZyb20ueCA6IHhWaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeVZpYSA9IGR5IDwgZmFjdG9yICogZHggPyB0aGlzLmZyb20ueSA6IHlWaWE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgeDogeFZpYSwgeTogeVZpYSB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJzdHJhaWdodENyb3NzXCIpIHtcbiAgICAgIGxldCBzdGVwWCA9ICgxIC0gZmFjdG9yKSAqIGR4O1xuICAgICAgbGV0IHN0ZXBZID0gKDEgLSBmYWN0b3IpICogZHk7XG5cbiAgICAgIGlmIChkeCA8PSBkeSkge1xuICAgICAgICAvLyB1cCAtIGRvd25cbiAgICAgICAgc3RlcFggPSAwO1xuICAgICAgICBpZiAodGhpcy5mcm9tLnkgPCB0aGlzLnRvLnkpIHtcbiAgICAgICAgICBzdGVwWSA9IC1zdGVwWTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGVmdCAtIHJpZ2h0XG4gICAgICAgIGlmICh0aGlzLmZyb20ueCA8IHRoaXMudG8ueCkge1xuICAgICAgICAgIHN0ZXBYID0gLXN0ZXBYO1xuICAgICAgICB9XG4gICAgICAgIHN0ZXBZID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogdGhpcy50by54ICsgc3RlcFgsXG4gICAgICAgIHk6IHRoaXMudG8ueSArIHN0ZXBZLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICBsZXQgc3RlcFggPSAoMSAtIGZhY3RvcikgKiBkeDtcbiAgICAgIGlmICh0aGlzLmZyb20ueCA8IHRoaXMudG8ueCkge1xuICAgICAgICBzdGVwWCA9IC1zdGVwWDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogdGhpcy50by54ICsgc3RlcFgsXG4gICAgICAgIHk6IHRoaXMuZnJvbS55LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwidmVydGljYWxcIikge1xuICAgICAgbGV0IHN0ZXBZID0gKDEgLSBmYWN0b3IpICogZHk7XG4gICAgICBpZiAodGhpcy5mcm9tLnkgPCB0aGlzLnRvLnkpIHtcbiAgICAgICAgc3RlcFkgPSAtc3RlcFk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHRoaXMuZnJvbS54LFxuICAgICAgICB5OiB0aGlzLnRvLnkgKyBzdGVwWSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcImN1cnZlZENXXCIpIHtcbiAgICAgIGR4ID0gdGhpcy50by54IC0gdGhpcy5mcm9tLng7XG4gICAgICBkeSA9IHRoaXMuZnJvbS55IC0gdGhpcy50by55O1xuICAgICAgY29uc3QgcmFkaXVzID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICAgIGNvbnN0IHBpID0gTWF0aC5QSTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxBbmdsZSA9IE1hdGguYXRhbjIoZHksIGR4KTtcbiAgICAgIGNvbnN0IG15QW5nbGUgPSAob3JpZ2luYWxBbmdsZSArIChmYWN0b3IgKiAwLjUgKyAwLjUpICogcGkpICUgKDIgKiBwaSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHRoaXMuZnJvbS54ICsgKGZhY3RvciAqIDAuNSArIDAuNSkgKiByYWRpdXMgKiBNYXRoLnNpbihteUFuZ2xlKSxcbiAgICAgICAgeTogdGhpcy5mcm9tLnkgKyAoZmFjdG9yICogMC41ICsgMC41KSAqIHJhZGl1cyAqIE1hdGguY29zKG15QW5nbGUpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiY3VydmVkQ0NXXCIpIHtcbiAgICAgIGR4ID0gdGhpcy50by54IC0gdGhpcy5mcm9tLng7XG4gICAgICBkeSA9IHRoaXMuZnJvbS55IC0gdGhpcy50by55O1xuICAgICAgY29uc3QgcmFkaXVzID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICAgIGNvbnN0IHBpID0gTWF0aC5QSTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxBbmdsZSA9IE1hdGguYXRhbjIoZHksIGR4KTtcbiAgICAgIGNvbnN0IG15QW5nbGUgPSAob3JpZ2luYWxBbmdsZSArICgtZmFjdG9yICogMC41ICsgMC41KSAqIHBpKSAlICgyICogcGkpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiB0aGlzLmZyb20ueCArIChmYWN0b3IgKiAwLjUgKyAwLjUpICogcmFkaXVzICogTWF0aC5zaW4obXlBbmdsZSksXG4gICAgICAgIHk6IHRoaXMuZnJvbS55ICsgKGZhY3RvciAqIDAuNSArIDAuNSkgKiByYWRpdXMgKiBNYXRoLmNvcyhteUFuZ2xlKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbnRpbnVvdXNcbiAgICAgIGxldCBzdGVwWDtcbiAgICAgIGxldCBzdGVwWTtcblxuICAgICAgaWYgKGR4IDw9IGR5KSB7XG4gICAgICAgIHN0ZXBYID0gc3RlcFkgPSBmYWN0b3IgKiBkeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXBYID0gc3RlcFkgPSBmYWN0b3IgKiBkeDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZnJvbS54ID4gdGhpcy50by54KSB7XG4gICAgICAgIHN0ZXBYID0gLXN0ZXBYO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZnJvbS55ID49IHRoaXMudG8ueSkge1xuICAgICAgICBzdGVwWSA9IC1zdGVwWTtcbiAgICAgIH1cblxuICAgICAgbGV0IHhWaWEgPSB0aGlzLmZyb20ueCArIHN0ZXBYO1xuICAgICAgbGV0IHlWaWEgPSB0aGlzLmZyb20ueSArIHN0ZXBZO1xuXG4gICAgICBpZiAoZHggPD0gZHkpIHtcbiAgICAgICAgaWYgKHRoaXMuZnJvbS54IDw9IHRoaXMudG8ueCkge1xuICAgICAgICAgIHhWaWEgPSB0aGlzLnRvLnggPCB4VmlhID8gdGhpcy50by54IDogeFZpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4VmlhID0gdGhpcy50by54ID4geFZpYSA/IHRoaXMudG8ueCA6IHhWaWE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmZyb20ueSA+PSB0aGlzLnRvLnkpIHtcbiAgICAgICAgICB5VmlhID0gdGhpcy50by55ID4geVZpYSA/IHRoaXMudG8ueSA6IHlWaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeVZpYSA9IHRoaXMudG8ueSA8IHlWaWEgPyB0aGlzLnRvLnkgOiB5VmlhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHg6IHhWaWEsIHk6IHlWaWEgfTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIG9wdGlvbnM6IHsgdmlhPzogUG9pbnQgfSA9IHt9XG4gICk6IFBvaW50VCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkJlemllcihuZWFyTm9kZSwgY3R4LCBvcHRpb25zLnZpYSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvRWRnZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlcixcbiAgICB2aWFOb2RlID0gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKVxuICApIHtcbiAgICAvLyB4Myx5MyBpcyB0aGUgcG9pbnRcbiAgICByZXR1cm4gdGhpcy5fZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgdmlhTm9kZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFBvaW50KFxuICAgIHBvc2l0aW9uOiBudW1iZXIsXG4gICAgdmlhTm9kZTogUG9pbnQgPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IFBvaW50IHtcbiAgICBjb25zdCB0ID0gcG9zaXRpb247XG4gICAgY29uc3QgeCA9XG4gICAgICBNYXRoLnBvdygxIC0gdCwgMikgKiB0aGlzLmZyb21Qb2ludC54ICtcbiAgICAgIDIgKiB0ICogKDEgLSB0KSAqIHZpYU5vZGUueCArXG4gICAgICBNYXRoLnBvdyh0LCAyKSAqIHRoaXMudG9Qb2ludC54O1xuICAgIGNvbnN0IHkgPVxuICAgICAgTWF0aC5wb3coMSAtIHQsIDIpICogdGhpcy5mcm9tUG9pbnQueSArXG4gICAgICAyICogdCAqICgxIC0gdCkgKiB2aWFOb2RlLnkgK1xuICAgICAgTWF0aC5wb3codCwgMikgKiB0aGlzLnRvUG9pbnQueTtcblxuICAgIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJlemllckVkZ2VCYXNlIH0gZnJvbSBcIi4vYmV6aWVyLWVkZ2UtYmFzZVwiO1xuaW1wb3J0IHsgTGFiZWwsIEVkZ2VPcHRpb25zLCBQb2ludCwgVkJvZHkgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEEgQmFzZSBDbGFzcyBmb3IgYWxsIEN1YmljIEJlemllciBFZGdlcy4gQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbFxuICogc21vb3RoIGdyYWR1YWwgY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuXG4gKlxuICogQGF1Z21lbnRzIEJlemllckVkZ2VCYXNlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDdWJpY0JlemllckVkZ2VCYXNlPFZpYT4gZXh0ZW5kcyBCZXppZXJFZGdlQmFzZTxWaWE+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBhIHBvaW50ICh4Myx5MykgYW5kIGEgbGluZSBzZWdtZW50IGZyb20gKHgxLHkxKSB0byAoeDIseTIpLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg0OTIxMS9zaG9ydGVzdC1kaXN0YW5jYWUtYmV0d2Vlbi1hLXBvaW50LWFuZC1hLWxpbmUtc2VnbWVudFxuICAgKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CJUMzJUE5emllcl9jdXJ2ZVxuICAgKiBAcGFyYW0geDEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDIgLSBTZWNvbmQgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB4MyAtIFBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHZpYTEgLSBUaGUgZmlyc3QgcG9pbnQgdGhpcyBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKiBAcGFyYW0gdmlhMiAtIFRoZSBzZWNvbmQgcG9pbnQgdGhpcyBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGluZSBzZWdtZW50IGFuZCB0aGUgcG9pbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9CZXppZXJFZGdlMihcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlcixcbiAgICB2aWExOiBQb2ludCxcbiAgICB2aWEyOiBQb2ludFxuICApOiBudW1iZXIge1xuICAgIC8vIHgzLHkzIGlzIHRoZSBwb2ludFxuICAgIGxldCBtaW5EaXN0YW5jZSA9IDFlOTtcbiAgICBsZXQgbGFzdFggPSB4MTtcbiAgICBsZXQgbGFzdFkgPSB5MTtcbiAgICBjb25zdCB2ZWMgPSBbMCwgMCwgMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxMDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gMC4xICogaTtcbiAgICAgIHZlY1swXSA9IE1hdGgucG93KDEgLSB0LCAzKTtcbiAgICAgIHZlY1sxXSA9IDMgKiB0ICogTWF0aC5wb3coMSAtIHQsIDIpO1xuICAgICAgdmVjWzJdID0gMyAqIE1hdGgucG93KHQsIDIpICogKDEgLSB0KTtcbiAgICAgIHZlY1szXSA9IE1hdGgucG93KHQsIDMpO1xuICAgICAgY29uc3QgeCA9IHZlY1swXSAqIHgxICsgdmVjWzFdICogdmlhMS54ICsgdmVjWzJdICogdmlhMi54ICsgdmVjWzNdICogeDI7XG4gICAgICBjb25zdCB5ID0gdmVjWzBdICogeTEgKyB2ZWNbMV0gKiB2aWExLnkgKyB2ZWNbMl0gKiB2aWEyLnkgKyB2ZWNbM10gKiB5MjtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuX2dldERpc3RhbmNlVG9MaW5lKGxhc3RYLCBsYXN0WSwgeCwgeSwgeDMsIHkzKTtcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlID8gZGlzdGFuY2UgOiBtaW5EaXN0YW5jZTtcbiAgICAgIH1cbiAgICAgIGxhc3RYID0geDtcbiAgICAgIGxhc3RZID0geTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWluRGlzdGFuY2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBDdWJpY0JlemllckVkZ2VCYXNlIH0gZnJvbSBcIi4vdXRpbC9jdWJpYy1iZXppZXItZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi91dGlsL3R5cGVzXCI7XG5cbi8qKlxuICogQSBDdWJpYyBCZXppZXIgRWRnZS4gQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbCBzbW9vdGggZ3JhZHVhbCBjdXJ2ZXMgaW4gcGF0aHMgYmV0d2VlbiBub2Rlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1YmljQmV6aWVyRWRnZSBleHRlbmRzIEN1YmljQmV6aWVyRWRnZUJhc2U8W1BvaW50LCBQb2ludF0+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICB8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAgICAgIHwgXCJiYWNrZ3JvdW5kU2l6ZVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZXM6IFtQb2ludCwgUG9pbnRdXG4gICk6IHZvaWQge1xuICAgIC8vIGdldCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHN1cHBvcnQgcG9pbnRzLlxuICAgIGNvbnN0IHZpYTEgPSB2aWFOb2Rlc1swXTtcbiAgICBjb25zdCB2aWEyID0gdmlhTm9kZXNbMV07XG4gICAgdGhpcy5fYmV6aWVyQ3VydmUoY3R4LCB2YWx1ZXMsIHZpYTEsIHZpYTIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGFkZGl0aW9uYWwgcG9pbnRzIHRoZSBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50cyB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0VmlhQ29vcmRpbmF0ZXMoKTogW1BvaW50LCBQb2ludF0ge1xuICAgIGNvbnN0IGR4ID0gdGhpcy5mcm9tLnggLSB0aGlzLnRvLng7XG4gICAgY29uc3QgZHkgPSB0aGlzLmZyb20ueSAtIHRoaXMudG8ueTtcblxuICAgIGxldCB4MTogbnVtYmVyO1xuICAgIGxldCB5MTogbnVtYmVyO1xuICAgIGxldCB4MjogbnVtYmVyO1xuICAgIGxldCB5MjogbnVtYmVyO1xuICAgIGNvbnN0IHJvdW5kbmVzcyA9IHRoaXMub3B0aW9ucy5zbW9vdGgucm91bmRuZXNzO1xuXG4gICAgLy8gaG9yaXpvbnRhbCBpZiB4ID4geSBvciBpZiBkaXJlY3Rpb24gaXMgZm9yY2VkIG9yIGlmIGRpcmVjdGlvbiBpcyBob3Jpem9udGFsXG4gICAgaWYgKFxuICAgICAgKE1hdGguYWJzKGR4KSA+IE1hdGguYWJzKGR5KSB8fFxuICAgICAgICB0aGlzLm9wdGlvbnMuc21vb3RoLmZvcmNlRGlyZWN0aW9uID09PSB0cnVlIHx8XG4gICAgICAgIHRoaXMub3B0aW9ucy5zbW9vdGguZm9yY2VEaXJlY3Rpb24gPT09IFwiaG9yaXpvbnRhbFwiKSAmJlxuICAgICAgdGhpcy5vcHRpb25zLnNtb290aC5mb3JjZURpcmVjdGlvbiAhPT0gXCJ2ZXJ0aWNhbFwiXG4gICAgKSB7XG4gICAgICB5MSA9IHRoaXMuZnJvbS55O1xuICAgICAgeTIgPSB0aGlzLnRvLnk7XG4gICAgICB4MSA9IHRoaXMuZnJvbS54IC0gcm91bmRuZXNzICogZHg7XG4gICAgICB4MiA9IHRoaXMudG8ueCArIHJvdW5kbmVzcyAqIGR4O1xuICAgIH0gZWxzZSB7XG4gICAgICB5MSA9IHRoaXMuZnJvbS55IC0gcm91bmRuZXNzICogZHk7XG4gICAgICB5MiA9IHRoaXMudG8ueSArIHJvdW5kbmVzcyAqIGR5O1xuICAgICAgeDEgPSB0aGlzLmZyb20ueDtcbiAgICAgIHgyID0gdGhpcy50by54O1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICB7IHg6IHgxLCB5OiB5MSB9LFxuICAgICAgeyB4OiB4MiwgeTogeTIgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFtQb2ludCwgUG9pbnRdIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2ZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBuZWFyTm9kZTogVk5vZGUsXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbiAgKTogUG9pbnRUIHtcbiAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQmV6aWVyKG5lYXJOb2RlLCBjdHgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXIsXG4gICAgW3ZpYTEsIHZpYTJdOiBbUG9pbnQsIFBvaW50XSA9IHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKClcbiAgKTogbnVtYmVyIHtcbiAgICAvLyB4Myx5MyBpcyB0aGUgcG9pbnRcbiAgICByZXR1cm4gdGhpcy5fZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UyKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHZpYTEsIHZpYTIpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRQb2ludChcbiAgICBwb3NpdGlvbjogbnVtYmVyLFxuICAgIFt2aWExLCB2aWEyXTogW1BvaW50LCBQb2ludF0gPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IFBvaW50IHtcbiAgICBjb25zdCB0ID0gcG9zaXRpb247XG4gICAgY29uc3QgdmVjOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFtcbiAgICAgIE1hdGgucG93KDEgLSB0LCAzKSxcbiAgICAgIDMgKiB0ICogTWF0aC5wb3coMSAtIHQsIDIpLFxuICAgICAgMyAqIE1hdGgucG93KHQsIDIpICogKDEgLSB0KSxcbiAgICAgIE1hdGgucG93KHQsIDMpLFxuICAgIF07XG4gICAgY29uc3QgeCA9XG4gICAgICB2ZWNbMF0gKiB0aGlzLmZyb21Qb2ludC54ICtcbiAgICAgIHZlY1sxXSAqIHZpYTEueCArXG4gICAgICB2ZWNbMl0gKiB2aWEyLnggK1xuICAgICAgdmVjWzNdICogdGhpcy50b1BvaW50Lng7XG4gICAgY29uc3QgeSA9XG4gICAgICB2ZWNbMF0gKiB0aGlzLmZyb21Qb2ludC55ICtcbiAgICAgIHZlY1sxXSAqIHZpYTEueSArXG4gICAgICB2ZWNbMl0gKiB2aWEyLnkgK1xuICAgICAgdmVjWzNdICogdGhpcy50b1BvaW50Lnk7XG5cbiAgICByZXR1cm4geyB4OiB4LCB5OiB5IH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFZGdlQmFzZSB9IGZyb20gXCIuL3V0aWwvZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi91dGlsL3R5cGVzXCI7XG5cbi8qKlxuICogQSBTdHJhaWdodCBFZGdlLlxuICovXG5leHBvcnQgY2xhc3MgU3RyYWlnaHRFZGdlIGV4dGVuZHMgRWRnZUJhc2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBvZiBnaXZlbiBlZGdlLlxuICAgKiBAcGFyYW0gYm9keSAtIFRoZSBib2R5IG9mIHRoZSBuZXR3b3JrLlxuICAgKiBAcGFyYW0gbGFiZWxNb2R1bGUgLSBMYWJlbCBtb2R1bGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogRWRnZU9wdGlvbnMsIGJvZHk6IFZCb2R5LCBsYWJlbE1vZHVsZTogTGFiZWwpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9saW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID5cbiAgKTogdm9pZCB7XG4gICAgLy8gZHJhdyBhIHN0cmFpZ2h0IGxpbmVcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyh0aGlzLmZyb21Qb2ludC54LCB0aGlzLmZyb21Qb2ludC55KTtcbiAgICBjdHgubGluZVRvKHRoaXMudG9Qb2ludC54LCB0aGlzLnRvUG9pbnQueSk7XG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICBjdHguc3Ryb2tlKCk7XG4gICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0VmlhTm9kZSgpOiB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFBvaW50KHBvc2l0aW9uOiBudW1iZXIpOiBQb2ludCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6ICgxIC0gcG9zaXRpb24pICogdGhpcy5mcm9tUG9pbnQueCArIHBvc2l0aW9uICogdGhpcy50b1BvaW50LngsXG4gICAgICB5OiAoMSAtIHBvc2l0aW9uKSAqIHRoaXMuZnJvbVBvaW50LnkgKyBwb3NpdGlvbiAqIHRoaXMudG9Qb2ludC55LFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXG4gICk6IFBvaW50VCB7XG4gICAgbGV0IG5vZGUxID0gdGhpcy50bztcbiAgICBsZXQgbm9kZTIgPSB0aGlzLmZyb207XG4gICAgaWYgKG5lYXJOb2RlLmlkID09PSB0aGlzLmZyb20uaWQpIHtcbiAgICAgIG5vZGUxID0gdGhpcy5mcm9tO1xuICAgICAgbm9kZTIgPSB0aGlzLnRvO1xuICAgIH1cblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMihub2RlMS55IC0gbm9kZTIueSwgbm9kZTEueCAtIG5vZGUyLngpO1xuICAgIGNvbnN0IGR4ID0gbm9kZTEueCAtIG5vZGUyLng7XG4gICAgY29uc3QgZHkgPSBub2RlMS55IC0gbm9kZTIueTtcbiAgICBjb25zdCBlZGdlU2VnbWVudExlbmd0aCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgY29uc3QgdG9Cb3JkZXJEaXN0ID0gbmVhck5vZGUuZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgICBjb25zdCB0b0JvcmRlclBvaW50ID1cbiAgICAgIChlZGdlU2VnbWVudExlbmd0aCAtIHRvQm9yZGVyRGlzdCkgLyBlZGdlU2VnbWVudExlbmd0aDtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiAoMSAtIHRvQm9yZGVyUG9pbnQpICogbm9kZTIueCArIHRvQm9yZGVyUG9pbnQgKiBub2RlMS54LFxuICAgICAgeTogKDEgLSB0b0JvcmRlclBvaW50KSAqIG5vZGUyLnkgKyB0b0JvcmRlclBvaW50ICogbm9kZTEueSxcbiAgICAgIHQ6IDAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyXG4gICk6IG51bWJlciB7XG4gICAgLy8geDMseTMgaXMgdGhlIHBvaW50XG4gICAgcmV0dXJuIHRoaXMuX2dldERpc3RhbmNlVG9MaW5lKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpO1xuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgYnJpZGdlT2JqZWN0LFxuICBkZWVwRXh0ZW5kLFxuICBpc1N0cmluZyxcbiAgbWVyZ2VPcHRpb25zLFxuICBzZWxlY3RpdmVEZWVwRXh0ZW5kLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcIi4vc2hhcmVkL0xhYmVsXCI7XG5pbXBvcnQge1xuICBjaG9vc2lmeSxcbiAgZ2V0U2VsZlJlZkNvb3JkaW5hdGVzLFxuICBpc1ZhbGlkTGFiZWwsXG4gIHBvaW50SW5SZWN0LFxufSBmcm9tIFwiLi9zaGFyZWQvQ29tcG9uZW50VXRpbFwiO1xuaW1wb3J0IHtcbiAgQmV6aWVyRWRnZUR5bmFtaWMsXG4gIEJlemllckVkZ2VTdGF0aWMsXG4gIEN1YmljQmV6aWVyRWRnZSxcbiAgU3RyYWlnaHRFZGdlLFxufSBmcm9tIFwiLi9lZGdlc1wiO1xuXG4vKipcbiAqIEFuIGVkZ2UgY29ubmVjdHMgdHdvIG5vZGVzIGFuZCBoYXMgYSBzcGVjaWZpYyBkaXJlY3Rpb24uXG4gKi9cbmNsYXNzIEVkZ2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgICAgICAgIHZhbHVlcyBzcGVjaWZpYyB0byB0aGlzIGVkZ2UsIG11c3QgY29udGFpbiBhdCBsZWFzdCAnZnJvbScgYW5kICd0bydcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgICAgICAgICAgIHNoYXJlZCBzdGF0ZSBmcm9tIE5ldHdvcmsgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtOZXR3b3JrLkltYWdlc30gaW1hZ2VsaXN0ICBBIGxpc3Qgd2l0aCBpbWFnZXMuIE9ubHkgbmVlZGVkIHdoZW4gdGhlIGVkZ2UgaGFzIGltYWdlIGFycm93cy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnMgIG9wdGlvbnMgZnJvbSB0aGUgRWRnZXNIYW5kbGVyIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0T3B0aW9ucyBkZWZhdWx0IG9wdGlvbnMgZnJvbSB0aGUgRWRnZUhhbmRsZXIgaW5zdGFuY2UuIFZhbHVlIGFuZCByZWZlcmVuY2UgYXJlIGNvbnN0YW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBpbWFnZWxpc3QsIGdsb2JhbE9wdGlvbnMsIGRlZmF1bHRPcHRpb25zKSB7XG4gICAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYm9keSBwcm92aWRlZFwiKTtcbiAgICB9XG5cbiAgICAvLyBTaW5jZSBnbG9iYWxPcHRpb25zIGlzIGNvbnN0YW50IGluIHZhbHVlcyBhcyB3ZWxsIGFzIHJlZmVyZW5jZSxcbiAgICAvLyBGb2xsb3dpbmcgbmVlZHMgdG8gYmUgZG9uZSBvbmx5IG9uY2UuXG5cbiAgICB0aGlzLm9wdGlvbnMgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucyk7XG4gICAgdGhpcy5nbG9iYWxPcHRpb25zID0gZ2xvYmFsT3B0aW9ucztcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmltYWdlbGlzdCA9IGltYWdlbGlzdDtcblxuICAgIC8vIGluaXRpYWxpemUgdmFyaWFibGVzXG4gICAgdGhpcy5pZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZyb21JZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRvSWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuaG92ZXIgPSBmYWxzZTtcbiAgICB0aGlzLmxhYmVsRGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5iYXNlV2lkdGggPSB0aGlzLm9wdGlvbnMud2lkdGg7XG4gICAgdGhpcy5iYXNlRm9udFNpemUgPSB0aGlzLm9wdGlvbnMuZm9udC5zaXplO1xuXG4gICAgdGhpcy5mcm9tID0gdW5kZWZpbmVkOyAvLyBhIG5vZGVcbiAgICB0aGlzLnRvID0gdW5kZWZpbmVkOyAvLyBhIG5vZGVcblxuICAgIHRoaXMuZWRnZVR5cGUgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5sYWJlbE1vZHVsZSA9IG5ldyBMYWJlbChcbiAgICAgIHRoaXMuYm9keSxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHRydWUgLyogSXQncyBhbiBlZGdlIGxhYmVsICovXG4gICAgKTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG9yIG92ZXJ3cml0ZSBvcHRpb25zIGZvciB0aGUgZWRnZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgYW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfGJvb2xlYW59IHVuZGVmaW5lZCBpZiBubyBvcHRpb25zLCB0cnVlIGlmIGxheW91dCBhZmZlY3RpbmcgZGF0YSBjaGFuZ2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGb2xsb3dpbmcgb3B0aW9ucyBpZiBjaGFuZ2VkIGFmZmVjdCB0aGUgbGF5b3V0LlxuICAgIGxldCBhZmZlY3RzTGF5b3V0ID1cbiAgICAgICh0eXBlb2Ygb3B0aW9ucy5waHlzaWNzICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHRoaXMub3B0aW9ucy5waHlzaWNzICE9PSBvcHRpb25zLnBoeXNpY3MpIHx8XG4gICAgICAodHlwZW9mIG9wdGlvbnMuaGlkZGVuICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICh0aGlzLm9wdGlvbnMuaGlkZGVuIHx8IGZhbHNlKSAhPT0gKG9wdGlvbnMuaGlkZGVuIHx8IGZhbHNlKSkgfHxcbiAgICAgICh0eXBlb2Ygb3B0aW9ucy5mcm9tICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHRoaXMub3B0aW9ucy5mcm9tICE9PSBvcHRpb25zLmZyb20pIHx8XG4gICAgICAodHlwZW9mIG9wdGlvbnMudG8gIT09IFwidW5kZWZpbmVkXCIgJiYgdGhpcy5vcHRpb25zLnRvICE9PSBvcHRpb25zLnRvKTtcblxuICAgIEVkZ2UucGFyc2VPcHRpb25zKHRoaXMub3B0aW9ucywgb3B0aW9ucywgdHJ1ZSwgdGhpcy5nbG9iYWxPcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5mcm9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZnJvbUlkID0gb3B0aW9ucy5mcm9tO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50byAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRvSWQgPSBvcHRpb25zLnRvO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRpdGxlID0gb3B0aW9ucy50aXRsZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy52YWx1ZSA9IHBhcnNlRmxvYXQob3B0aW9ucy52YWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGlsZSA9IFtvcHRpb25zLCB0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnNdO1xuICAgIHRoaXMuY2hvb3NlciA9IGNob29zaWZ5KFwiZWRnZVwiLCBwaWxlKTtcblxuICAgIC8vIHVwZGF0ZSBsYWJlbCBNb2R1bGVcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKG9wdGlvbnMpO1xuXG4gICAgLy8gVXBkYXRlIGVkZ2UgdHlwZSwgdGhpcyBpZiBjaGFuZ2VkIGFmZmVjdHMgdGhlIGxheW91dC5cbiAgICBhZmZlY3RzTGF5b3V0ID0gdGhpcy51cGRhdGVFZGdlVHlwZSgpIHx8IGFmZmVjdHNMYXlvdXQ7XG5cbiAgICAvLyBpZiBhbnl0aGluZyBoYXMgYmVlbiB1cGRhdGVzLCByZXNldCB0aGUgc2VsZWN0aW9uIHdpZHRoIGFuZCB0aGUgaG92ZXIgd2lkdGhcbiAgICB0aGlzLl9zZXRJbnRlcmFjdGlvbldpZHRocygpO1xuXG4gICAgLy8gQSBub2RlIGlzIGNvbm5lY3RlZCB3aGVuIGl0IGhhcyBhIGZyb20gYW5kIHRvIG5vZGUgdGhhdCBib3RoIGV4aXN0IGluIHRoZSBuZXR3b3JrLmJvZHkubm9kZXMuXG4gICAgdGhpcy5jb25uZWN0KCk7XG5cbiAgICByZXR1cm4gYWZmZWN0c0xheW91dDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50T3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0RlbGV0aW9uPWZhbHNlXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2dsb2JhbE9wdGlvbnM9e31dXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHlGcm9tR2xvYmFscz1mYWxzZV1cbiAgICovXG4gIHN0YXRpYyBwYXJzZU9wdGlvbnMoXG4gICAgcGFyZW50T3B0aW9ucyxcbiAgICBuZXdPcHRpb25zLFxuICAgIGFsbG93RGVsZXRpb24gPSBmYWxzZSxcbiAgICBnbG9iYWxPcHRpb25zID0ge30sXG4gICAgY29weUZyb21HbG9iYWxzID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgZmllbGRzID0gW1xuICAgICAgXCJlbmRQb2ludE9mZnNldFwiLFxuICAgICAgXCJhcnJvd1N0cmlrZXRocm91Z2hcIixcbiAgICAgIFwiaWRcIixcbiAgICAgIFwiZnJvbVwiLFxuICAgICAgXCJoaWRkZW5cIixcbiAgICAgIFwiaG92ZXJXaWR0aFwiLFxuICAgICAgXCJsYWJlbEhpZ2hsaWdodEJvbGRcIixcbiAgICAgIFwibGVuZ3RoXCIsXG4gICAgICBcImxpbmVcIixcbiAgICAgIFwib3BhY2l0eVwiLFxuICAgICAgXCJwaHlzaWNzXCIsXG4gICAgICBcInNjYWxpbmdcIixcbiAgICAgIFwic2VsZWN0aW9uV2lkdGhcIixcbiAgICAgIFwic2VsZlJlZmVyZW5jZVNpemVcIixcbiAgICAgIFwic2VsZlJlZmVyZW5jZVwiLFxuICAgICAgXCJ0b1wiLFxuICAgICAgXCJ0aXRsZVwiLFxuICAgICAgXCJ2YWx1ZVwiLFxuICAgICAgXCJ3aWR0aFwiLFxuICAgICAgXCJmb250XCIsXG4gICAgICBcImNob3NlblwiLFxuICAgICAgXCJ3aWR0aENvbnN0cmFpbnRcIixcbiAgICBdO1xuXG4gICAgLy8gb25seSBkZWVwIGV4dGVuZCB0aGUgaXRlbXMgaW4gdGhlIGZpZWxkIGFycmF5LiBUaGVzZSBkbyBub3QgaGF2ZSBzaG9ydGhhbmQuXG4gICAgc2VsZWN0aXZlRGVlcEV4dGVuZChmaWVsZHMsIHBhcmVudE9wdGlvbnMsIG5ld09wdGlvbnMsIGFsbG93RGVsZXRpb24pO1xuXG4gICAgLy8gT25seSB1c2UgZW5kUG9pbnRPZmZzZXQgdmFsdWVzIChmcm9tIGFuZCB0bykgaWYgaXQncyB2YWxpZCB2YWx1ZXNcbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbSkpIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tID0gbmV3T3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tID1cbiAgICAgICAgICBnbG9iYWxPcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb20gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBnbG9iYWxPcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb21cbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc29sZS5lcnJvcihcImVuZFBvaW50T2Zmc2V0LmZyb20gaXMgbm90IGEgdmFsaWQgbnVtYmVyXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgbmV3T3B0aW9ucy5lbmRQb2ludE9mZnNldC50byAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8pKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8gPSBuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0LnRvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5lbmRQb2ludE9mZnNldC50byA9XG4gICAgICAgICAgZ2xvYmFsT3B0aW9ucy5lbmRQb2ludE9mZnNldC50byAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGdsb2JhbE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG9cbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc29sZS5lcnJvcihcImVuZFBvaW50T2Zmc2V0LnRvIGlzIG5vdCBhIHZhbGlkIG51bWJlclwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPbmx5IGNvcHkgbGFiZWwgaWYgaXQncyBhIGxlZ2FsIHZhbHVlLlxuICAgIGlmIChpc1ZhbGlkTGFiZWwobmV3T3B0aW9ucy5sYWJlbCkpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMubGFiZWwgPSBuZXdPcHRpb25zLmxhYmVsO1xuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRMYWJlbChwYXJlbnRPcHRpb25zLmxhYmVsKSkge1xuICAgICAgcGFyZW50T3B0aW9ucy5sYWJlbCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBtZXJnZU9wdGlvbnMocGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgXCJzbW9vdGhcIiwgZ2xvYmFsT3B0aW9ucyk7XG4gICAgbWVyZ2VPcHRpb25zKHBhcmVudE9wdGlvbnMsIG5ld09wdGlvbnMsIFwic2hhZG93XCIsIGdsb2JhbE9wdGlvbnMpO1xuICAgIG1lcmdlT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBcImJhY2tncm91bmRcIiwgZ2xvYmFsT3B0aW9ucyk7XG5cbiAgICBpZiAobmV3T3B0aW9ucy5kYXNoZXMgIT09IHVuZGVmaW5lZCAmJiBuZXdPcHRpb25zLmRhc2hlcyAhPT0gbnVsbCkge1xuICAgICAgcGFyZW50T3B0aW9ucy5kYXNoZXMgPSBuZXdPcHRpb25zLmRhc2hlcztcbiAgICB9IGVsc2UgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5kYXNoZXMgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuZGFzaGVzID0gT2JqZWN0LmNyZWF0ZShnbG9iYWxPcHRpb25zLmRhc2hlcyk7IC8vIHRoaXMgc2V0cyB0aGUgcG9pbnRlciBvZiB0aGUgb3B0aW9uIGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb24uXG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBzY2FsaW5nIG5ld09wdGlvbnNcbiAgICBpZiAobmV3T3B0aW9ucy5zY2FsaW5nICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5zY2FsaW5nICE9PSBudWxsKSB7XG4gICAgICBpZiAobmV3T3B0aW9ucy5zY2FsaW5nLm1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuc2NhbGluZy5taW4gPSBuZXdPcHRpb25zLnNjYWxpbmcubWluO1xuICAgICAgfVxuICAgICAgaWYgKG5ld09wdGlvbnMuc2NhbGluZy5tYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXJlbnRPcHRpb25zLnNjYWxpbmcubWF4ID0gbmV3T3B0aW9ucy5zY2FsaW5nLm1heDtcbiAgICAgIH1cbiAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgcGFyZW50T3B0aW9ucy5zY2FsaW5nLFxuICAgICAgICBuZXdPcHRpb25zLnNjYWxpbmcsXG4gICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgZ2xvYmFsT3B0aW9ucy5zY2FsaW5nXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSAmJiBuZXdPcHRpb25zLnNjYWxpbmcgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuc2NhbGluZyA9IE9iamVjdC5jcmVhdGUoZ2xvYmFsT3B0aW9ucy5zY2FsaW5nKTsgLy8gdGhpcyBzZXRzIHRoZSBwb2ludGVyIG9mIHRoZSBvcHRpb24gYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbi5cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbXVsdGlwbGUgaW5wdXQgY2FzZXMgZm9yIGFycm93c1xuICAgIGlmIChuZXdPcHRpb25zLmFycm93cyAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMuYXJyb3dzICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld09wdGlvbnMuYXJyb3dzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IGFycm93cyA9IG5ld09wdGlvbnMuYXJyb3dzLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuYXJyb3dzLnRvLmVuYWJsZWQgPSBhcnJvd3MuaW5kZXhPZihcInRvXCIpICE9IC0xO1xuICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cy5taWRkbGUuZW5hYmxlZCA9IGFycm93cy5pbmRleE9mKFwibWlkZGxlXCIpICE9IC0xO1xuICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cy5mcm9tLmVuYWJsZWQgPSBhcnJvd3MuaW5kZXhPZihcImZyb21cIikgIT0gLTE7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXdPcHRpb25zLmFycm93cyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBtZXJnZU9wdGlvbnMoXG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgbmV3T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgXCJ0b1wiLFxuICAgICAgICAgIGdsb2JhbE9wdGlvbnMuYXJyb3dzXG4gICAgICAgICk7XG4gICAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBuZXdPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBcIm1pZGRsZVwiLFxuICAgICAgICAgIGdsb2JhbE9wdGlvbnMuYXJyb3dzXG4gICAgICAgICk7XG4gICAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBuZXdPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBcImZyb21cIixcbiAgICAgICAgICBnbG9iYWxPcHRpb25zLmFycm93c1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGFycm93IG5ld09wdGlvbnMgY2FuIG9ubHkgYmUgYW4gb2JqZWN0IG9yIGEgc3RyaW5nLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbi4gWW91IHVzZWQ6XCIgK1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobmV3T3B0aW9ucy5hcnJvd3MpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuYXJyb3dzID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmFycm93cyA9IE9iamVjdC5jcmVhdGUoZ2xvYmFsT3B0aW9ucy5hcnJvd3MpOyAvLyB0aGlzIHNldHMgdGhlIHBvaW50ZXIgb2YgdGhlIG9wdGlvbiBiYWNrIHRvIHRoZSBnbG9iYWwgb3B0aW9uLlxuICAgIH1cblxuICAgIC8vIGhhbmRsZSBtdWx0aXBsZSBpbnB1dCBjYXNlcyBmb3IgY29sb3JcbiAgICBpZiAobmV3T3B0aW9ucy5jb2xvciAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMuY29sb3IgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZyb21Db2xvciA9IGlzU3RyaW5nKG5ld09wdGlvbnMuY29sb3IpXG4gICAgICAgID8ge1xuICAgICAgICAgICAgY29sb3I6IG5ld09wdGlvbnMuY29sb3IsXG4gICAgICAgICAgICBoaWdobGlnaHQ6IG5ld09wdGlvbnMuY29sb3IsXG4gICAgICAgICAgICBob3ZlcjogbmV3T3B0aW9ucy5jb2xvcixcbiAgICAgICAgICAgIGluaGVyaXQ6IGZhbHNlLFxuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICB9XG4gICAgICAgIDogbmV3T3B0aW9ucy5jb2xvcjtcbiAgICAgIGNvbnN0IHRvQ29sb3IgPSBwYXJlbnRPcHRpb25zLmNvbG9yO1xuXG4gICAgICAvLyBJZiBwYXNzZWQsIGZpbGwgaW4gdmFsdWVzIGZyb20gZGVmYXVsdCBvcHRpb25zIC0gcmVxdWlyZWQgaW4gdGhlIGNhc2Ugb2Ygbm8gcHJvdG90eXBlIGJyaWRnaW5nXG4gICAgICBpZiAoY29weUZyb21HbG9iYWxzKSB7XG4gICAgICAgIGRlZXBFeHRlbmQodG9Db2xvciwgZ2xvYmFsT3B0aW9ucy5jb2xvciwgZmFsc2UsIGFsbG93RGVsZXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xlYXIgbG9jYWwgcHJvcGVydGllcyAtIG5lZWQgdG8gZG8gaXQgbGlrZSB0aGlzIGluIG9yZGVyIHRvIHJldGFpbiBwcm90b3R5cGUgYnJpZGdlc1xuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gdG9Db2xvcikge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodG9Db2xvciwgaSkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0b0NvbG9yW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNTdHJpbmcodG9Db2xvcikpIHtcbiAgICAgICAgdG9Db2xvci5jb2xvciA9IHRvQ29sb3I7XG4gICAgICAgIHRvQ29sb3IuaGlnaGxpZ2h0ID0gdG9Db2xvcjtcbiAgICAgICAgdG9Db2xvci5ob3ZlciA9IHRvQ29sb3I7XG4gICAgICAgIHRvQ29sb3IuaW5oZXJpdCA9IGZhbHNlO1xuICAgICAgICBpZiAoZnJvbUNvbG9yLm9wYWNpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3Iub3BhY2l0eSA9IDEuMDsgLy8gc2V0IGRlZmF1bHRcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNvbG9yc0RlZmluZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZyb21Db2xvci5jb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG9Db2xvci5jb2xvciA9IGZyb21Db2xvci5jb2xvcjtcbiAgICAgICAgICBjb2xvcnNEZWZpbmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnJvbUNvbG9yLmhpZ2hsaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG9Db2xvci5oaWdobGlnaHQgPSBmcm9tQ29sb3IuaGlnaGxpZ2h0O1xuICAgICAgICAgIGNvbG9yc0RlZmluZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tQ29sb3IuaG92ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3IuaG92ZXIgPSBmcm9tQ29sb3IuaG92ZXI7XG4gICAgICAgICAgY29sb3JzRGVmaW5lZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyb21Db2xvci5pbmhlcml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0b0NvbG9yLmluaGVyaXQgPSBmcm9tQ29sb3IuaW5oZXJpdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnJvbUNvbG9yLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3Iub3BhY2l0eSA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIGZyb21Db2xvci5vcGFjaXR5KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sb3JzRGVmaW5lZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRvQ29sb3IuaW5oZXJpdCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0b0NvbG9yLmluaGVyaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdG9Db2xvci5pbmhlcml0ID0gXCJmcm9tXCI7IC8vIFNldCBkZWZhdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuY29sb3IgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuY29sb3IgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5jb2xvcik7IC8vIHNldCB0aGUgb2JqZWN0IGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb25zXG4gICAgfVxuXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5mb250ID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmZvbnQgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5mb250KTsgLy8gc2V0IHRoZSBvYmplY3QgYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbnNcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld09wdGlvbnMsIFwic2VsZlJlZmVyZW5jZVNpemVcIikpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJUaGUgc2VsZlJlZmVyZW5jZVNpemUgcHJvcGVydHkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBzZWxmUmVmZXJlbmNlIHByb3BlcnR5IGluc3RlYWQuIFRoZSBzZWxmUmVmZXJlbmNlIGNhbiBiZSBzZXQgbGlrZSB0aGlzZSBzZWxmUmVmZXJlbmNlOntzaXplOjMwLCBhbmdsZTpNYXRoLlBJIC8gNH1cIlxuICAgICAgKTtcbiAgICAgIHBhcmVudE9wdGlvbnMuc2VsZlJlZmVyZW5jZS5zaXplID0gbmV3T3B0aW9ucy5zZWxmUmVmZXJlbmNlU2l6ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge0Fycm93T3B0aW9uc31cbiAgICovXG4gIGdldEZvcm1hdHRpbmdWYWx1ZXMoKSB7XG4gICAgY29uc3QgdG9BcnJvdyA9XG4gICAgICB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvID09PSB0cnVlIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvLmVuYWJsZWQgPT09IHRydWU7XG4gICAgY29uc3QgZnJvbUFycm93ID1cbiAgICAgIHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbSA9PT0gdHJ1ZSB8fFxuICAgICAgdGhpcy5vcHRpb25zLmFycm93cy5mcm9tLmVuYWJsZWQgPT09IHRydWU7XG4gICAgY29uc3QgbWlkZGxlQXJyb3cgPVxuICAgICAgdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUgPT09IHRydWUgfHxcbiAgICAgIHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLmVuYWJsZWQgPT09IHRydWU7XG4gICAgY29uc3QgaW5oZXJpdHNDb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5pbmhlcml0O1xuICAgIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgIHRvQXJyb3c6IHRvQXJyb3csXG4gICAgICB0b0Fycm93U2NhbGU6IHRoaXMub3B0aW9ucy5hcnJvd3MudG8uc2NhbGVGYWN0b3IsXG4gICAgICB0b0Fycm93VHlwZTogdGhpcy5vcHRpb25zLmFycm93cy50by50eXBlLFxuICAgICAgdG9BcnJvd1NyYzogdGhpcy5vcHRpb25zLmFycm93cy50by5zcmMsXG4gICAgICB0b0Fycm93SW1hZ2VXaWR0aDogdGhpcy5vcHRpb25zLmFycm93cy50by5pbWFnZVdpZHRoLFxuICAgICAgdG9BcnJvd0ltYWdlSGVpZ2h0OiB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvLmltYWdlSGVpZ2h0LFxuICAgICAgbWlkZGxlQXJyb3c6IG1pZGRsZUFycm93LFxuICAgICAgbWlkZGxlQXJyb3dTY2FsZTogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuc2NhbGVGYWN0b3IsXG4gICAgICBtaWRkbGVBcnJvd1R5cGU6IHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLnR5cGUsXG4gICAgICBtaWRkbGVBcnJvd1NyYzogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuc3JjLFxuICAgICAgbWlkZGxlQXJyb3dJbWFnZVdpZHRoOiB0aGlzLm9wdGlvbnMuYXJyb3dzLm1pZGRsZS5pbWFnZVdpZHRoLFxuICAgICAgbWlkZGxlQXJyb3dJbWFnZUhlaWdodDogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuaW1hZ2VIZWlnaHQsXG4gICAgICBmcm9tQXJyb3c6IGZyb21BcnJvdyxcbiAgICAgIGZyb21BcnJvd1NjYWxlOiB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20uc2NhbGVGYWN0b3IsXG4gICAgICBmcm9tQXJyb3dUeXBlOiB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20udHlwZSxcbiAgICAgIGZyb21BcnJvd1NyYzogdGhpcy5vcHRpb25zLmFycm93cy5mcm9tLnNyYyxcbiAgICAgIGZyb21BcnJvd0ltYWdlV2lkdGg6IHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbS5pbWFnZVdpZHRoLFxuICAgICAgZnJvbUFycm93SW1hZ2VIZWlnaHQ6IHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbS5pbWFnZUhlaWdodCxcbiAgICAgIGFycm93U3RyaWtldGhyb3VnaDogdGhpcy5vcHRpb25zLmFycm93U3RyaWtldGhyb3VnaCxcbiAgICAgIGNvbG9yOiBpbmhlcml0c0NvbG9yID8gdW5kZWZpbmVkIDogdGhpcy5vcHRpb25zLmNvbG9yLmNvbG9yLFxuICAgICAgaW5oZXJpdHNDb2xvcjogaW5oZXJpdHNDb2xvcixcbiAgICAgIG9wYWNpdHk6IHRoaXMub3B0aW9ucy5jb2xvci5vcGFjaXR5LFxuICAgICAgaGlkZGVuOiB0aGlzLm9wdGlvbnMuaGlkZGVuLFxuICAgICAgbGVuZ3RoOiB0aGlzLm9wdGlvbnMubGVuZ3RoLFxuICAgICAgc2hhZG93OiB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQsXG4gICAgICBzaGFkb3dDb2xvcjogdGhpcy5vcHRpb25zLnNoYWRvdy5jb2xvcixcbiAgICAgIHNoYWRvd1NpemU6IHRoaXMub3B0aW9ucy5zaGFkb3cuc2l6ZSxcbiAgICAgIHNoYWRvd1g6IHRoaXMub3B0aW9ucy5zaGFkb3cueCxcbiAgICAgIHNoYWRvd1k6IHRoaXMub3B0aW9ucy5zaGFkb3cueSxcbiAgICAgIGRhc2hlczogdGhpcy5vcHRpb25zLmRhc2hlcyxcbiAgICAgIHdpZHRoOiB0aGlzLm9wdGlvbnMud2lkdGgsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZC5lbmFibGVkLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZC5jb2xvcixcbiAgICAgIGJhY2tncm91bmRTaXplOiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZC5zaXplLFxuICAgICAgYmFja2dyb3VuZERhc2hlczogdGhpcy5vcHRpb25zLmJhY2tncm91bmQuZGFzaGVzLFxuICAgIH07XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQgfHwgdGhpcy5ob3Zlcikge1xuICAgICAgaWYgKHRoaXMuY2hvb3NlciA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkV2lkdGggPSB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uV2lkdGg7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RlZFdpZHRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhbHVlcy53aWR0aCA9IHNlbGVjdGVkV2lkdGgodmFsdWVzLndpZHRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxlY3RlZFdpZHRoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB2YWx1ZXMud2lkdGggKz0gc2VsZWN0ZWRXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWVzLndpZHRoID0gTWF0aC5tYXgodmFsdWVzLndpZHRoLCAwLjMgLyB0aGlzLmJvZHkudmlldy5zY2FsZSk7XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodDtcbiAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaG92ZXIpIHtcbiAgICAgICAgICBjb25zdCBob3ZlcldpZHRoID0gdGhpcy5vcHRpb25zLmhvdmVyV2lkdGg7XG4gICAgICAgICAgaWYgKHR5cGVvZiBob3ZlcldpZHRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhbHVlcy53aWR0aCA9IGhvdmVyV2lkdGgodmFsdWVzLndpZHRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBob3ZlcldpZHRoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB2YWx1ZXMud2lkdGggKz0gaG92ZXJXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWVzLndpZHRoID0gTWF0aC5tYXgodmFsdWVzLndpZHRoLCAwLjMgLyB0aGlzLmJvZHkudmlldy5zY2FsZSk7XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyO1xuICAgICAgICAgIHZhbHVlcy5zaGFkb3cgPSB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuY2hvb3NlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMuY2hvb3Nlcih2YWx1ZXMsIHRoaXMub3B0aW9ucy5pZCwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3Zlcik7XG4gICAgICAgIGlmICh2YWx1ZXMuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhbHVlcy5pbmhlcml0c0NvbG9yID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsdWVzLnNoYWRvd0NvbG9yICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LmNvbG9yIHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93U2l6ZSAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy5zaXplIHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93WCAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy54IHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93WSAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy55XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICAgIHZhbHVlcy53aWR0aCA9IE1hdGgubWF4KHZhbHVlcy53aWR0aCwgMC4zIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgb3B0aW9ucyBpbiB0aGUgbGFiZWwgbW9kdWxlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICB1cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKSB7XG4gICAgY29uc3QgcGlsZSA9IFtcbiAgICAgIG9wdGlvbnMsXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLmdsb2JhbE9wdGlvbnMsIC8vIEN1cnJlbnRseSBzZXQgZ2xvYmFsIGVkZ2Ugb3B0aW9uc1xuICAgICAgdGhpcy5kZWZhdWx0T3B0aW9ucyxcbiAgICBdO1xuXG4gICAgdGhpcy5sYWJlbE1vZHVsZS51cGRhdGUodGhpcy5vcHRpb25zLCBwaWxlKTtcblxuICAgIGlmICh0aGlzLmxhYmVsTW9kdWxlLmJhc2VTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYmFzZUZvbnRTaXplID0gdGhpcy5sYWJlbE1vZHVsZS5iYXNlU2l6ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlIHRoZSBlZGdlIHR5cGUsIHNldCB0aGUgb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHVwZGF0ZUVkZ2VUeXBlKCkge1xuICAgIGNvbnN0IHNtb290aCA9IHRoaXMub3B0aW9ucy5zbW9vdGg7XG4gICAgbGV0IGRhdGFDaGFuZ2VkID0gZmFsc2U7XG4gICAgbGV0IGNoYW5nZUluVHlwZSA9IHRydWU7XG4gICAgaWYgKHRoaXMuZWRnZVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKFxuICAgICAgICAodGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIEJlemllckVkZ2VEeW5hbWljICYmXG4gICAgICAgICAgc21vb3RoLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgICAgICBzbW9vdGgudHlwZSA9PT0gXCJkeW5hbWljXCIpIHx8XG4gICAgICAgICh0aGlzLmVkZ2VUeXBlIGluc3RhbmNlb2YgQ3ViaWNCZXppZXJFZGdlICYmXG4gICAgICAgICAgc21vb3RoLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgICAgICBzbW9vdGgudHlwZSA9PT0gXCJjdWJpY0JlemllclwiKSB8fFxuICAgICAgICAodGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIEJlemllckVkZ2VTdGF0aWMgJiZcbiAgICAgICAgICBzbW9vdGguZW5hYmxlZCA9PT0gdHJ1ZSAmJlxuICAgICAgICAgIHNtb290aC50eXBlICE9PSBcImR5bmFtaWNcIiAmJlxuICAgICAgICAgIHNtb290aC50eXBlICE9PSBcImN1YmljQmV6aWVyXCIpIHx8XG4gICAgICAgICh0aGlzLmVkZ2VUeXBlIGluc3RhbmNlb2YgU3RyYWlnaHRFZGdlICYmIHNtb290aC50eXBlLmVuYWJsZWQgPT09IGZhbHNlKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZUluVHlwZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZUluVHlwZSA9PT0gdHJ1ZSkge1xuICAgICAgICBkYXRhQ2hhbmdlZCA9IHRoaXMuY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlSW5UeXBlID09PSB0cnVlKSB7XG4gICAgICBpZiAoc21vb3RoLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHNtb290aC50eXBlID09PSBcImR5bmFtaWNcIikge1xuICAgICAgICAgIGRhdGFDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVkZ2VUeXBlID0gbmV3IEJlemllckVkZ2VEeW5hbWljKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoc21vb3RoLnR5cGUgPT09IFwiY3ViaWNCZXppZXJcIikge1xuICAgICAgICAgIHRoaXMuZWRnZVR5cGUgPSBuZXcgQ3ViaWNCZXppZXJFZGdlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lZGdlVHlwZSA9IG5ldyBCZXppZXJFZGdlU3RhdGljKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRnZVR5cGUgPSBuZXcgU3RyYWlnaHRFZGdlKFxuICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBub3RoaW5nIGNoYW5nZXMsIHdlIGp1c3Qgc2V0IHRoZSBvcHRpb25zLlxuICAgICAgdGhpcy5lZGdlVHlwZS5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhQ2hhbmdlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IGFuIGVkZ2UgdG8gaXRzIG5vZGVzXG4gICAqL1xuICBjb25uZWN0KCkge1xuICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuXG4gICAgdGhpcy5mcm9tID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuZnJvbUlkXSB8fCB1bmRlZmluZWQ7XG4gICAgdGhpcy50byA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRvSWRdIHx8IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbm5lY3RlZCA9IHRoaXMuZnJvbSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudG8gIT09IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLmNvbm5lY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5mcm9tLmF0dGFjaEVkZ2UodGhpcyk7XG4gICAgICB0aGlzLnRvLmF0dGFjaEVkZ2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmZyb20pIHtcbiAgICAgICAgdGhpcy5mcm9tLmRldGFjaEVkZ2UodGhpcyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50bykge1xuICAgICAgICB0aGlzLnRvLmRldGFjaEVkZ2UodGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lZGdlVHlwZS5jb25uZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzY29ubmVjdCBhbiBlZGdlIGZyb20gaXRzIG5vZGVzXG4gICAqL1xuICBkaXNjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLmZyb20pIHtcbiAgICAgIHRoaXMuZnJvbS5kZXRhY2hFZGdlKHRoaXMpO1xuICAgICAgdGhpcy5mcm9tID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodGhpcy50bykge1xuICAgICAgdGhpcy50by5kZXRhY2hFZGdlKHRoaXMpO1xuICAgICAgdGhpcy50byA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgdGl0bGUgb2YgdGhpcyBlZGdlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aXRsZSAgICBUaGUgdGl0bGUgb2YgdGhlIGVkZ2UsIG9yIHVuZGVmaW5lZCB3aGVuIG5vIHRpdGxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gc2V0LlxuICAgKi9cbiAgZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGU7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgaWYgdGhpcyBub2RlIGlzIHNlbGVjdGVcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHNlbGVjdGVkICAgVHJ1ZSBpZiBub2RlIGlzIHNlbGVjdGVkLCBlbHNlIGZhbHNlXG4gICAqL1xuICBpc1NlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiB0aGUgZWRnZS4gQ2FuIGJlIHVuZGVmaW5lZFxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB2YWx1ZVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGp1c3QgdGhlIHZhbHVlIHJhbmdlIG9mIHRoZSBlZGdlLiBUaGUgZWRnZSB3aWxsIGFkanVzdCBpdCdzIHdpZHRoXG4gICAqIGJhc2VkIG9uIGl0cyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pblxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFxuICAgKi9cbiAgc2V0VmFsdWVSYW5nZShtaW4sIG1heCwgdG90YWwpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5vcHRpb25zLnNjYWxpbmcuY3VzdG9tU2NhbGluZ0Z1bmN0aW9uKFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heCxcbiAgICAgICAgdG90YWwsXG4gICAgICAgIHRoaXMub3B0aW9ucy52YWx1ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHdpZHRoRGlmZiA9IHRoaXMub3B0aW9ucy5zY2FsaW5nLm1heCAtIHRoaXMub3B0aW9ucy5zY2FsaW5nLm1pbjtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGZvbnREaWZmID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5tYXggLSB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5taW47XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb250LnNpemUgPVxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1pbiArIHNjYWxlICogZm9udERpZmY7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMud2lkdGggPSB0aGlzLm9wdGlvbnMuc2NhbGluZy5taW4gKyBzY2FsZSAqIHdpZHRoRGlmZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zLndpZHRoID0gdGhpcy5iYXNlV2lkdGg7XG4gICAgICB0aGlzLm9wdGlvbnMuZm9udC5zaXplID0gdGhpcy5iYXNlRm9udFNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0SW50ZXJhY3Rpb25XaWR0aHMoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRJbnRlcmFjdGlvbldpZHRocygpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuaG92ZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoKHRoaXMub3B0aW9ucy53aWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuaG92ZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoICsgdGhpcy5vcHRpb25zLndpZHRoO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5zZWxlY3Rpb25XaWR0aCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLnNlbGVjdGlvbldpZHRoID0gdGhpcy5vcHRpb25zLnNlbGVjdGlvbldpZHRoKFxuICAgICAgICB0aGlzLm9wdGlvbnMud2lkdGhcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuc2VsZWN0aW9uV2lkdGggPVxuICAgICAgICB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uV2lkdGggKyB0aGlzLm9wdGlvbnMud2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhIGVkZ2VcbiAgICogRHJhdyB0aGlzIGVkZ2UgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqL1xuICBkcmF3KGN0eCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0dGluZ1ZhbHVlcygpO1xuICAgIGlmICh2YWx1ZXMuaGlkZGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSB2aWEgbm9kZSBmcm9tIHRoZSBlZGdlIHR5cGVcbiAgICBjb25zdCB2aWFOb2RlID0gdGhpcy5lZGdlVHlwZS5nZXRWaWFOb2RlKCk7XG5cbiAgICAvLyBkcmF3IGxpbmUgYW5kIGxhYmVsXG4gICAgdGhpcy5lZGdlVHlwZS5kcmF3TGluZShjdHgsIHZhbHVlcywgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3ZlciwgdmlhTm9kZSk7XG4gICAgdGhpcy5kcmF3TGFiZWwoY3R4LCB2aWFOb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYXJyb3dzXG4gICAqIERyYXcgdGhpcyBhcnJvd3MgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqL1xuICBkcmF3QXJyb3dzKGN0eCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0dGluZ1ZhbHVlcygpO1xuICAgIGlmICh2YWx1ZXMuaGlkZGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSB2aWEgbm9kZSBmcm9tIHRoZSBlZGdlIHR5cGVcbiAgICBjb25zdCB2aWFOb2RlID0gdGhpcy5lZGdlVHlwZS5nZXRWaWFOb2RlKCk7XG4gICAgY29uc3QgYXJyb3dEYXRhID0ge307XG5cbiAgICAvLyByZXN0b3JlIGVkZ2UgdGFyZ2V0cyB0byBkZWZhdWx0c1xuICAgIHRoaXMuZWRnZVR5cGUuZnJvbVBvaW50ID0gdGhpcy5lZGdlVHlwZS5mcm9tO1xuICAgIHRoaXMuZWRnZVR5cGUudG9Qb2ludCA9IHRoaXMuZWRnZVR5cGUudG87XG5cbiAgICAvLyBmcm9tIGFuZCB0byBhcnJvd3MgZ2l2ZSBhIGRpZmZlcmVudCBlbmQgcG9pbnQgZm9yIGVkZ2VzLiB3ZSBzZXQgdGhlbSBoZXJlXG4gICAgaWYgKHZhbHVlcy5mcm9tQXJyb3cpIHtcbiAgICAgIGFycm93RGF0YS5mcm9tID0gdGhpcy5lZGdlVHlwZS5nZXRBcnJvd0RhdGEoXG4gICAgICAgIGN0eCxcbiAgICAgICAgXCJmcm9tXCIsXG4gICAgICAgIHZpYU5vZGUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgIHRoaXMuaG92ZXIsXG4gICAgICAgIHZhbHVlc1xuICAgICAgKTtcbiAgICAgIGlmICh2YWx1ZXMuYXJyb3dTdHJpa2V0aHJvdWdoID09PSBmYWxzZSlcbiAgICAgICAgdGhpcy5lZGdlVHlwZS5mcm9tUG9pbnQgPSBhcnJvd0RhdGEuZnJvbS5jb3JlO1xuICAgICAgaWYgKHZhbHVlcy5mcm9tQXJyb3dTcmMpIHtcbiAgICAgICAgYXJyb3dEYXRhLmZyb20uaW1hZ2UgPSB0aGlzLmltYWdlbGlzdC5sb2FkKHZhbHVlcy5mcm9tQXJyb3dTcmMpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlcy5mcm9tQXJyb3dJbWFnZVdpZHRoKSB7XG4gICAgICAgIGFycm93RGF0YS5mcm9tLmltYWdlV2lkdGggPSB2YWx1ZXMuZnJvbUFycm93SW1hZ2VXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMuZnJvbUFycm93SW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgYXJyb3dEYXRhLmZyb20uaW1hZ2VIZWlnaHQgPSB2YWx1ZXMuZnJvbUFycm93SW1hZ2VIZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2YWx1ZXMudG9BcnJvdykge1xuICAgICAgYXJyb3dEYXRhLnRvID0gdGhpcy5lZGdlVHlwZS5nZXRBcnJvd0RhdGEoXG4gICAgICAgIGN0eCxcbiAgICAgICAgXCJ0b1wiLFxuICAgICAgICB2aWFOb2RlLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICB2YWx1ZXNcbiAgICAgICk7XG4gICAgICBpZiAodmFsdWVzLmFycm93U3RyaWtldGhyb3VnaCA9PT0gZmFsc2UpXG4gICAgICAgIHRoaXMuZWRnZVR5cGUudG9Qb2ludCA9IGFycm93RGF0YS50by5jb3JlO1xuICAgICAgaWYgKHZhbHVlcy50b0Fycm93U3JjKSB7XG4gICAgICAgIGFycm93RGF0YS50by5pbWFnZSA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQodmFsdWVzLnRvQXJyb3dTcmMpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlcy50b0Fycm93SW1hZ2VXaWR0aCkge1xuICAgICAgICBhcnJvd0RhdGEudG8uaW1hZ2VXaWR0aCA9IHZhbHVlcy50b0Fycm93SW1hZ2VXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMudG9BcnJvd0ltYWdlSGVpZ2h0KSB7XG4gICAgICAgIGFycm93RGF0YS50by5pbWFnZUhlaWdodCA9IHZhbHVlcy50b0Fycm93SW1hZ2VIZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhlIG1pZGRsZSBhcnJvdyBkZXBlbmRzIG9uIHRoZSBsaW5lLCB3aGljaCBjYW4gZGVwZW5kIG9uIHRoZSB0byBhbmQgZnJvbSBhcnJvd3Mgc28gd2UgZG8gdGhpcyBvbmUgbGFzdGx5LlxuICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3cpIHtcbiAgICAgIGFycm93RGF0YS5taWRkbGUgPSB0aGlzLmVkZ2VUeXBlLmdldEFycm93RGF0YShcbiAgICAgICAgY3R4LFxuICAgICAgICBcIm1pZGRsZVwiLFxuICAgICAgICB2aWFOb2RlLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICB2YWx1ZXNcbiAgICAgICk7XG5cbiAgICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3dTcmMpIHtcbiAgICAgICAgYXJyb3dEYXRhLm1pZGRsZS5pbWFnZSA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQodmFsdWVzLm1pZGRsZUFycm93U3JjKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3dJbWFnZVdpZHRoKSB7XG4gICAgICAgIGFycm93RGF0YS5taWRkbGUuaW1hZ2VXaWR0aCA9IHZhbHVlcy5taWRkbGVBcnJvd0ltYWdlV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzLm1pZGRsZUFycm93SW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgYXJyb3dEYXRhLm1pZGRsZS5pbWFnZUhlaWdodCA9IHZhbHVlcy5taWRkbGVBcnJvd0ltYWdlSGVpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZXMuZnJvbUFycm93KSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLmRyYXdBcnJvd0hlYWQoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICBhcnJvd0RhdGEuZnJvbVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlcy5taWRkbGVBcnJvdykge1xuICAgICAgdGhpcy5lZGdlVHlwZS5kcmF3QXJyb3dIZWFkKFxuICAgICAgICBjdHgsXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgYXJyb3dEYXRhLm1pZGRsZVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlcy50b0Fycm93KSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLmRyYXdBcnJvd0hlYWQoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICBhcnJvd0RhdGEudG9cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtOb2RlfSB2aWFOb2RlXG4gICAqL1xuICBkcmF3TGFiZWwoY3R4LCB2aWFOb2RlKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzZXQgc3R5bGVcbiAgICAgIGNvbnN0IG5vZGUxID0gdGhpcy5mcm9tO1xuICAgICAgY29uc3Qgbm9kZTIgPSB0aGlzLnRvO1xuXG4gICAgICBpZiAodGhpcy5sYWJlbE1vZHVsZS5kaWZmZXJlbnRTdGF0ZSh0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyKSkge1xuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKGN0eCwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3Zlcik7XG4gICAgICB9XG5cbiAgICAgIGxldCBwb2ludDtcbiAgICAgIGlmIChub2RlMS5pZCAhPSBub2RlMi5pZCkge1xuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnBvaW50VG9TZWxmID0gZmFsc2U7XG4gICAgICAgIHBvaW50ID0gdGhpcy5lZGdlVHlwZS5nZXRQb2ludCgwLjUsIHZpYU5vZGUpO1xuICAgICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICAgIGNvbnN0IHJvdGF0aW9uUG9pbnQgPSB0aGlzLl9nZXRSb3RhdGlvbihjdHgpO1xuICAgICAgICBpZiAocm90YXRpb25Qb2ludC5hbmdsZSAhPSAwKSB7XG4gICAgICAgICAgY3R4LnRyYW5zbGF0ZShyb3RhdGlvblBvaW50LngsIHJvdGF0aW9uUG9pbnQueSk7XG4gICAgICAgICAgY3R4LnJvdGF0ZShyb3RhdGlvblBvaW50LmFuZ2xlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRyYXcgdGhlIGxhYmVsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHBvaW50LngsIHBvaW50LnksIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuXG4gICAgICAgIC8qXG4gICAgICAgIC8vIFVzZWZ1bCBkZWJ1ZyBjb2RlOiBkcmF3IGEgYm9yZGVyIGFyb3VuZCB0aGUgbGFiZWxcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgKipub3QqKiBiZSBlbmFibGVkIGluIHByb2R1Y3Rpb24hXG4gICAgICAgIHZhciBzaXplID0gdGhpcy5sYWJlbE1vZHVsZS5nZXRTaXplKCk7OyAvLyA7OyBpbnRlbnRpb25hbCBzbyBsaW50IGNhdGNoZXMgaXRcbiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCIjZmYwMDAwXCI7XG4gICAgICAgIGN0eC5zdHJva2VSZWN0KHNpemUubGVmdCwgc2l6ZS50b3AsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcbiAgICAgICAgLy8gRW5kICBkZWJ1ZyBjb2RlXG4qL1xuXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIG9yaWVudGF0aW9ucy5cbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5wb2ludFRvU2VsZiA9IHRydWU7XG5cbiAgICAgICAgLy8gZ2V0IGNpcmNsZSBjb29yZGluYXRlc1xuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGdldFNlbGZSZWZDb29yZGluYXRlcyhcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2Uuc2l6ZSxcbiAgICAgICAgICBub2RlMVxuICAgICAgICApO1xuXG4gICAgICAgIHBvaW50ID0gdGhpcy5fcG9pbnRPbkNpcmNsZShcbiAgICAgICAgICBjb29yZGluYXRlcy54LFxuICAgICAgICAgIGNvb3JkaW5hdGVzLnksXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2Uuc2l6ZSxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHBvaW50LngsIHBvaW50LnksIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgYWxsIHZpc3VhbCBlbGVtZW50cyBvZiB0aGlzIGVkZ2UgaW5zdGFuY2UsIGluIHdoaWNoIHRoZSBnaXZlblxuICAgKiBwb2ludCBmYWxscyB3aXRoaW4gdGhlIGJvdW5kaW5nIHNoYXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb2ludFxuICAgKiBAcmV0dXJucyB7QXJyYXkuPGVkZ2VDbGlja0l0ZW18ZWRnZUxhYmVsQ2xpY2tJdGVtPn0gbGlzdCB3aXRoIHRoZSBpdGVtcyB3aGljaCBhcmUgb24gdGhlIHBvaW50XG4gICAqL1xuICBnZXRJdGVtc09uUG9pbnQocG9pbnQpIHtcbiAgICBjb25zdCByZXQgPSBbXTtcblxuICAgIGlmICh0aGlzLmxhYmVsTW9kdWxlLnZpc2libGUoKSkge1xuICAgICAgY29uc3Qgcm90YXRpb25Qb2ludCA9IHRoaXMuX2dldFJvdGF0aW9uKCk7XG4gICAgICBpZiAocG9pbnRJblJlY3QodGhpcy5sYWJlbE1vZHVsZS5nZXRTaXplKCksIHBvaW50LCByb3RhdGlvblBvaW50KSkge1xuICAgICAgICByZXQucHVzaCh7IGVkZ2VJZDogdGhpcy5pZCwgbGFiZWxJZDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBsZWZ0OiBwb2ludC54LFxuICAgICAgdG9wOiBwb2ludC55LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5pc092ZXJsYXBwaW5nV2l0aChvYmopKSB7XG4gICAgICByZXQucHVzaCh7IGVkZ2VJZDogdGhpcy5pZCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgb2JqZWN0IGlzIG92ZXJsYXBwaW5nIHdpdGggdGhlIHByb3ZpZGVkIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqICAgYW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3BcbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICBUcnVlIGlmIGxvY2F0aW9uIGlzIGxvY2F0ZWQgb24gdGhlIGVkZ2VcbiAgICovXG4gIGlzT3ZlcmxhcHBpbmdXaXRoKG9iaikge1xuICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgY29uc3QgZGlzdE1heCA9IDEwO1xuICAgICAgY29uc3QgeEZyb20gPSB0aGlzLmZyb20ueDtcbiAgICAgIGNvbnN0IHlGcm9tID0gdGhpcy5mcm9tLnk7XG4gICAgICBjb25zdCB4VG8gPSB0aGlzLnRvLng7XG4gICAgICBjb25zdCB5VG8gPSB0aGlzLnRvLnk7XG4gICAgICBjb25zdCB4T2JqID0gb2JqLmxlZnQ7XG4gICAgICBjb25zdCB5T2JqID0gb2JqLnRvcDtcblxuICAgICAgY29uc3QgZGlzdCA9IHRoaXMuZWRnZVR5cGUuZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgICAgIHhGcm9tLFxuICAgICAgICB5RnJvbSxcbiAgICAgICAgeFRvLFxuICAgICAgICB5VG8sXG4gICAgICAgIHhPYmosXG4gICAgICAgIHlPYmpcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBkaXN0IDwgZGlzdE1heDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHJvdGF0aW9uIHBvaW50LCBpZiBhbnkuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBbY3R4XSBpZiBwYXNzZWQsIGRvIGEgcmVjYWxjdWxhdGlvbiBvZiB0aGUgbGFiZWwgc2l6ZVxuICAgKiBAcmV0dXJucyB7cm90YXRpb25Qb2ludH0gdGhlIHBvaW50IHRvIHJvdGF0ZSBhcm91bmQgYW5kIHRoZSBhbmdsZSBpbiByYWRpYW5zIHRvIHJvdGF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFJvdGF0aW9uKGN0eCkge1xuICAgIGNvbnN0IHZpYU5vZGUgPSB0aGlzLmVkZ2VUeXBlLmdldFZpYU5vZGUoKTtcbiAgICBjb25zdCBwb2ludCA9IHRoaXMuZWRnZVR5cGUuZ2V0UG9pbnQoMC41LCB2aWFOb2RlKTtcblxuICAgIGlmIChjdHggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5jYWxjdWxhdGVMYWJlbFNpemUoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgcG9pbnQueCxcbiAgICAgICAgcG9pbnQueVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSB7XG4gICAgICB4OiBwb2ludC54LFxuICAgICAgeTogdGhpcy5sYWJlbE1vZHVsZS5zaXplLnlMaW5lLFxuICAgICAgYW5nbGU6IDAsXG4gICAgfTtcblxuICAgIGlmICghdGhpcy5sYWJlbE1vZHVsZS52aXNpYmxlKCkpIHtcbiAgICAgIHJldHVybiByZXQ7IC8vIERvbid0IGV2ZW4gYm90aGVyIGRvaW5nIHRoZSBhdGFuMiwgdGhlcmUncyBub3RoaW5nIHRvIGRyYXdcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmZvbnQuYWxpZ24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICByZXR1cm4gcmV0OyAvLyBObyBuZWVkIHRvIGNhbGN1bGF0ZSBhbmdsZVxuICAgIH1cblxuICAgIGNvbnN0IGR5ID0gdGhpcy5mcm9tLnkgLSB0aGlzLnRvLnk7XG4gICAgY29uc3QgZHggPSB0aGlzLmZyb20ueCAtIHRoaXMudG8ueDtcbiAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCk7IC8vIHJhZGlhbnNcblxuICAgIC8vIHJvdGF0ZSBzbyB0aGF0IGxhYmVsIGlzIHJlYWRhYmxlXG4gICAgaWYgKChhbmdsZSA8IC0xICYmIGR4IDwgMCkgfHwgKGFuZ2xlID4gMCAmJiBkeCA8IDApKSB7XG4gICAgICBhbmdsZSArPSBNYXRoLlBJO1xuICAgIH1cbiAgICByZXQuYW5nbGUgPSBhbmdsZTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcG9pbnQgb24gYSBjaXJjbGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1c1xuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge29iamVjdH0gcG9pbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wb2ludE9uQ2lyY2xlKHgsIHksIHJhZGl1cywgYW5nbGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogeCArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKSxcbiAgICAgIHk6IHkgLSByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHNlbGVjdGVkIHN0YXRlIHRvIHRydWVcbiAgICovXG4gIHNlbGVjdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHNlbGVjdGVkIHN0YXRlIHRvIGZhbHNlXG4gICAqL1xuICB1bnNlbGVjdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogY2xlYW5zIGFsbCByZXF1aXJlZCB0aGluZ3Mgb24gZGVsZXRlXG4gICAqXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgY2xlYW51cCgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGdlVHlwZS5jbGVhbnVwKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGVkZ2UgZnJvbSB0aGUgbGlzdCBhbmQgcGVyZm9ybSBuZWNlc3NhcnkgY2xlYW51cC5cbiAgICovXG4gIHJlbW92ZSgpIHtcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICBkZWxldGUgdGhpcy5ib2R5LmVkZ2VzW3RoaXMuaWRdO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGJvdGggY29ubmVjdGluZyBub2RlcyBleGlzdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGVuZFBvaW50c1ZhbGlkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJvZHkubm9kZXNbdGhpcy5mcm9tSWRdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRvSWRdICE9PSB1bmRlZmluZWRcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkZ2U7XG4iLCAiaW1wb3J0IHsgZGVlcEV4dGVuZCwgZm9yRWFjaCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IERhdGFTZXQsIGlzRGF0YVZpZXdMaWtlIH0gZnJvbSBcInZpcy1kYXRhL2VzbmV4dFwiO1xuaW1wb3J0IEVkZ2UgZnJvbSBcIi4vY29tcG9uZW50cy9FZGdlXCI7XG5cbi8qKlxuICogSGFuZGxlciBmb3IgRWRnZXNcbiAqL1xuY2xhc3MgRWRnZXNIYW5kbGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7QXJyYXkuPEltYWdlPn0gaW1hZ2VzXG4gICAqIEBwYXJhbSB7QXJyYXkuPEdyb3VwPn0gZ3JvdXBzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBpbWFnZXMsIGdyb3Vwcykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5pbWFnZXMgPSBpbWFnZXM7XG4gICAgdGhpcy5ncm91cHMgPSBncm91cHM7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGVkZ2UgQVBJIGluIHRoZSBib2R5IGNvbnRhaW5lclxuICAgIHRoaXMuYm9keS5mdW5jdGlvbnMuY3JlYXRlRWRnZSA9IHRoaXMuY3JlYXRlLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmVkZ2VzTGlzdGVuZXJzID0ge1xuICAgICAgYWRkOiAoZXZlbnQsIHBhcmFtcykgPT4ge1xuICAgICAgICB0aGlzLmFkZChwYXJhbXMuaXRlbXMpO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZTogKGV2ZW50LCBwYXJhbXMpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGUocGFyYW1zLml0ZW1zKTtcbiAgICAgIH0sXG4gICAgICByZW1vdmU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlKHBhcmFtcy5pdGVtcyk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgYXJyb3dzOiB7XG4gICAgICAgIHRvOiB7IGVuYWJsZWQ6IGZhbHNlLCBzY2FsZUZhY3RvcjogMSwgdHlwZTogXCJhcnJvd1wiIH0sIC8vIGJvb2xlYW4gLyB7YXJyb3dTY2FsZUZhY3RvcjoxfSAvIHtlbmFibGVkOiBmYWxzZSwgYXJyb3dTY2FsZUZhY3RvcjoxfVxuICAgICAgICBtaWRkbGU6IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiAxLCB0eXBlOiBcImFycm93XCIgfSxcbiAgICAgICAgZnJvbTogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IDEsIHR5cGU6IFwiYXJyb3dcIiB9LFxuICAgICAgfSxcbiAgICAgIGVuZFBvaW50T2Zmc2V0OiB7XG4gICAgICAgIGZyb206IDAsXG4gICAgICAgIHRvOiAwLFxuICAgICAgfSxcbiAgICAgIGFycm93U3RyaWtldGhyb3VnaDogdHJ1ZSxcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIGNvbG9yOiBcIiM4NDg0ODRcIixcbiAgICAgICAgaGlnaGxpZ2h0OiBcIiM4NDg0ODRcIixcbiAgICAgICAgaG92ZXI6IFwiIzg0ODQ4NFwiLFxuICAgICAgICBpbmhlcml0OiBcImZyb21cIixcbiAgICAgICAgb3BhY2l0eTogMS4wLFxuICAgICAgfSxcbiAgICAgIGRhc2hlczogZmFsc2UsXG4gICAgICBmb250OiB7XG4gICAgICAgIGNvbG9yOiBcIiMzNDM0MzRcIixcbiAgICAgICAgc2l6ZTogMTQsIC8vIHB4XG4gICAgICAgIGZhY2U6IFwiYXJpYWxcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCJub25lXCIsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAyLCAvLyBweFxuICAgICAgICBzdHJva2VDb2xvcjogXCIjZmZmZmZmXCIsXG4gICAgICAgIGFsaWduOiBcImhvcml6b250YWxcIixcbiAgICAgICAgbXVsdGk6IGZhbHNlLFxuICAgICAgICB2YWRqdXN0OiAwLFxuICAgICAgICBib2xkOiB7XG4gICAgICAgICAgbW9kOiBcImJvbGRcIixcbiAgICAgICAgfSxcbiAgICAgICAgYm9sZGl0YWw6IHtcbiAgICAgICAgICBtb2Q6IFwiYm9sZCBpdGFsaWNcIixcbiAgICAgICAgfSxcbiAgICAgICAgaXRhbDoge1xuICAgICAgICAgIG1vZDogXCJpdGFsaWNcIixcbiAgICAgICAgfSxcbiAgICAgICAgbW9ubzoge1xuICAgICAgICAgIG1vZDogXCJcIixcbiAgICAgICAgICBzaXplOiAxNSwgLy8gcHhcbiAgICAgICAgICBmYWNlOiBcImNvdXJpZXIgbmV3XCIsXG4gICAgICAgICAgdmFkanVzdDogMixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgaG92ZXJXaWR0aDogMS41LFxuICAgICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogdHJ1ZSxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgcGh5c2ljczogdHJ1ZSxcbiAgICAgIHNjYWxpbmc6IHtcbiAgICAgICAgbWluOiAxLFxuICAgICAgICBtYXg6IDE1LFxuICAgICAgICBsYWJlbDoge1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgbWluOiAxNCxcbiAgICAgICAgICBtYXg6IDMwLFxuICAgICAgICAgIG1heFZpc2libGU6IDMwLFxuICAgICAgICAgIGRyYXdUaHJlc2hvbGQ6IDUsXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbVNjYWxpbmdGdW5jdGlvbjogZnVuY3Rpb24gKG1pbiwgbWF4LCB0b3RhbCwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICAgICAgICAgIHJldHVybiAwLjU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gMSAvIChtYXggLSBtaW4pO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsICh2YWx1ZSAtIG1pbikgKiBzY2FsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNlbGVjdGlvbldpZHRoOiAxLjUsXG4gICAgICBzZWxmUmVmZXJlbmNlOiB7XG4gICAgICAgIHNpemU6IDIwLFxuICAgICAgICBhbmdsZTogTWF0aC5QSSAvIDQsXG4gICAgICAgIHJlbmRlckJlaGluZFRoZU5vZGU6IHRydWUsXG4gICAgICB9LFxuICAgICAgc2hhZG93OiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBjb2xvcjogXCJyZ2JhKDAsMCwwLDAuNSlcIixcbiAgICAgICAgc2l6ZTogMTAsXG4gICAgICAgIHg6IDUsXG4gICAgICAgIHk6IDUsXG4gICAgICB9LFxuICAgICAgYmFja2dyb3VuZDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgY29sb3I6IFwicmdiYSgxMTEsMTExLDExMSwxKVwiLFxuICAgICAgICBzaXplOiAxMCxcbiAgICAgICAgZGFzaGVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBzbW9vdGg6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJkeW5hbWljXCIsXG4gICAgICAgIGZvcmNlRGlyZWN0aW9uOiBcIm5vbmVcIixcbiAgICAgICAgcm91bmRuZXNzOiAwLjUsXG4gICAgICB9LFxuICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIHdpZHRoOiAxLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgZGVlcEV4dGVuZCh0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICAvLyB0aGlzIGFsbG93cyBleHRlcm5hbCBtb2R1bGVzIHRvIGZvcmNlIGFsbCBkeW5hbWljIGN1cnZlcyB0byB0dXJuIHN0YXRpYy5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9mb3JjZURpc2FibGVEeW5hbWljQ3VydmVzXCIsICh0eXBlLCBlbWl0ID0gdHJ1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGUgPT09IFwiZHluYW1pY1wiKSB7XG4gICAgICAgIHR5cGUgPSBcImNvbnRpbnVvdXNcIjtcbiAgICAgIH1cbiAgICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgZm9yIChjb25zdCBlZGdlSWQgaW4gdGhpcy5ib2R5LmVkZ2VzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKSB7XG4gICAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICAgICAgICAgIGNvbnN0IGVkZ2VEYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0KGVkZ2VJZCk7XG5cbiAgICAgICAgICAvLyBvbmx5IGZvcmNpYmx5IHJlbW92ZSB0aGUgc21vb3RoIGN1cnZlIGlmIHRoZSBkYXRhIGhhcyBiZWVuIHNldCBvZiB0aGUgZWRnZSBoYXMgdGhlIHNtb290aCBjdXJ2ZXMgZGVmaW5lZC5cbiAgICAgICAgICAvLyB0aGlzIGlzIGJlY2F1c2UgYSBjaGFuZ2UgaW4gdGhlIGdsb2JhbCB3b3VsZCBub3QgYWZmZWN0IHRoZXNlIGN1cnZlcy5cbiAgICAgICAgICBpZiAoZWRnZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc21vb3RoT3B0aW9ucyA9IGVkZ2VEYXRhLnNtb290aDtcbiAgICAgICAgICAgIGlmIChzbW9vdGhPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHNtb290aE9wdGlvbnMuZW5hYmxlZCA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgICAgIHNtb290aE9wdGlvbnMudHlwZSA9PT0gXCJkeW5hbWljXCJcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZWRnZS5zZXRPcHRpb25zKHsgc21vb3RoOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZWRnZS5zZXRPcHRpb25zKHsgc21vb3RoOiB7IHR5cGU6IHR5cGUgfSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZW1pdCA9PT0gdHJ1ZSAmJiBkYXRhQ2hhbmdlZCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gdGhpcyBpcyBjYWxsZWQgd2hlbiBvcHRpb25zIG9mIEVYSVNUSU5HIG5vZGVzIG9yIGVkZ2VzIGhhdmUgY2hhbmdlZC5cbiAgICAvL1xuICAgIC8vIE5PVEU6IE5vdCB0cnVlLCBjYWxsZWQgd2hlbiBvcHRpb25zIGhhdmUgTk9UIGNoYW5nZWQsIGZvciBib3RoIGV4aXN0aW5nIGFzIHdlbGwgYXMgbmV3IG5vZGVzLlxuICAgIC8vICAgICAgIFNlZSB1cGRhdGUoKSBmb3IgbG9naWMuXG4gICAgLy8gVE9ETzogVmVyaWZ5IGFuZCBleGFtaW5lIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcy4gSXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB3aGVuXG4gICAgLy8gICAgICAgbm9uLW9wdGlvbiBmaWVsZHMgaGF2ZSBjaGFuZ2VkLCBidXQgdGhlbiByZWNvbm5lY3RpbmcgZWRnZXMgaXMgc3RpbGwgdXNlbGVzcy5cbiAgICAvLyAgICAgICBBbHRlcm5hdGl2ZWx5LCBpdCBtaWdodCBhbHNvIGJlIGNhbGxlZCB3aGVuIGVkZ2VzIGFyZSByZW1vdmVkLlxuICAgIC8vXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YVVwZGF0ZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbm5lY3RFZGdlcygpO1xuICAgIH0pO1xuXG4gICAgLy8gcmVmcmVzaCB0aGUgZWRnZXMuIFVzZWQgd2hlbiByZXZlcnRpbmcgZnJvbSBoaWVyYXJjaGljYWwgbGF5b3V0XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJyZWZyZXNoRWRnZXNcIiwgdGhpcy5yZWZyZXNoLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwicmVmcmVzaFwiLCB0aGlzLnJlZnJlc2guYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZXN0cm95XCIsICgpID0+IHtcbiAgICAgIGZvckVhY2godGhpcy5lZGdlc0xpc3RlbmVycywgKGNhbGxiYWNrLCBldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ib2R5LmRhdGEuZWRnZXMpIHRoaXMuYm9keS5kYXRhLmVkZ2VzLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVFZGdlO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnMuYWRkO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnMudXBkYXRlO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnMucmVtb3ZlO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnM7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHVzZSB0aGUgcGFyc2VyIGZyb20gdGhlIEVkZ2UgY2xhc3MgdG8gZmlsbCBpbiBhbGwgc2hvcnRoYW5kIG5vdGF0aW9uc1xuICAgICAgRWRnZS5wYXJzZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zLCB0cnVlLCB0aGlzLmRlZmF1bHRPcHRpb25zLCB0cnVlKTtcblxuICAgICAgLy8gdXBkYXRlIHNtb290aCBzZXR0aW5ncyBpbiBhbGwgZWRnZXNcbiAgICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgaWYgKG9wdGlvbnMuc21vb3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBlZGdlSWQgaW4gdGhpcy5ib2R5LmVkZ2VzKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkuZWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgICAgIGRhdGFDaGFuZ2VkID1cbiAgICAgICAgICAgICAgdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0udXBkYXRlRWRnZVR5cGUoKSB8fCBkYXRhQ2hhbmdlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIGZvbnRzIGluIGFsbCBlZGdlc1xuICAgICAgaWYgKG9wdGlvbnMuZm9udCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuYm9keS5lZGdlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXS51cGRhdGVMYWJlbE1vZHVsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgdGhlIHN0YXRlIG9mIHRoZSB2YXJpYWJsZXMgaWYgbmVlZGVkXG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMuaGlkZGVuICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgb3B0aW9ucy5waHlzaWNzICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgZGF0YUNoYW5nZWQgPT09IHRydWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGVkZ2VzIGJ5IHJlYWRpbmcgdGhlIGRhdGEgdGFibGVcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IERhdGFTZXQgfCBEYXRhVmlld30gZWRnZXMgICAgVGhlIGRhdGEgY29udGFpbmluZyB0aGUgZWRnZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90RW1pdD1mYWxzZV0gLSBTdXBwcmVzcyBkYXRhIGNoYW5nZWQgZXZlbnQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXREYXRhKGVkZ2VzLCBkb05vdEVtaXQgPSBmYWxzZSkge1xuICAgIGNvbnN0IG9sZEVkZ2VzRGF0YSA9IHRoaXMuYm9keS5kYXRhLmVkZ2VzO1xuXG4gICAgaWYgKGlzRGF0YVZpZXdMaWtlKFwiaWRcIiwgZWRnZXMpKSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcyA9IGVkZ2VzO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlZGdlcykpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzID0gbmV3IERhdGFTZXQoKTtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzLmFkZChlZGdlcyk7XG4gICAgfSBlbHNlIGlmICghZWRnZXMpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzID0gbmV3IERhdGFTZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5IG9yIERhdGFTZXQgZXhwZWN0ZWRcIik7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogaXMgdGhpcyBudWxsIG9yIHVuZGVmaW5lZCBvciBmYWxzZT9cbiAgICBpZiAob2xkRWRnZXNEYXRhKSB7XG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIG9sZCBkYXRhc2V0XG4gICAgICBmb3JFYWNoKHRoaXMuZWRnZXNMaXN0ZW5lcnMsIChjYWxsYmFjaywgZXZlbnQpID0+IHtcbiAgICAgICAgb2xkRWRnZXNEYXRhLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGRyYXduIGVkZ2VzXG4gICAgdGhpcy5ib2R5LmVkZ2VzID0ge307XG5cbiAgICAvLyBUT0RPOiBpcyB0aGlzIG51bGwgb3IgdW5kZWZpbmVkIG9yIGZhbHNlP1xuICAgIGlmICh0aGlzLmJvZHkuZGF0YS5lZGdlcykge1xuICAgICAgLy8gc3Vic2NyaWJlIHRvIG5ldyBkYXRhc2V0XG4gICAgICBmb3JFYWNoKHRoaXMuZWRnZXNMaXN0ZW5lcnMsIChjYWxsYmFjaywgZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMub24oZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBkcmF3IGFsbCBuZXcgbm9kZXNcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuYm9keS5kYXRhLmVkZ2VzLmdldElkcygpO1xuICAgICAgdGhpcy5hZGQoaWRzLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIpO1xuICAgIGlmIChkb05vdEVtaXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZWRnZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXSB8IHN0cmluZ1tdfSBpZHNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9Ob3RFbWl0PWZhbHNlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkKGlkcywgZG9Ob3RFbWl0ID0gZmFsc2UpIHtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBlZGdlc0RhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGlkc1tpXTtcblxuICAgICAgY29uc3Qgb2xkRWRnZSA9IGVkZ2VzW2lkXTtcbiAgICAgIGlmIChvbGRFZGdlKSB7XG4gICAgICAgIG9sZEVkZ2UuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gZWRnZXNEYXRhLmdldChpZCwgeyBzaG93SW50ZXJuYWxJZHM6IHRydWUgfSk7XG4gICAgICBlZGdlc1tpZF0gPSB0aGlzLmNyZWF0ZShkYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIpO1xuXG4gICAgaWYgKGRvTm90RW1pdCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBlZGdlcywgb3IgY3JlYXRlIHRoZW0gd2hlbiBub3QgeWV0IGV4aXN0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1cGRhdGUoaWRzKSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZWRnZXNEYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXM7XG4gICAgbGV0IGRhdGFDaGFuZ2VkID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgY29uc3QgZGF0YSA9IGVkZ2VzRGF0YS5nZXQoaWQpO1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2lkXTtcbiAgICAgIGlmIChlZGdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdXBkYXRlIGVkZ2VcbiAgICAgICAgZWRnZS5kaXNjb25uZWN0KCk7XG4gICAgICAgIGRhdGFDaGFuZ2VkID0gZWRnZS5zZXRPcHRpb25zKGRhdGEpIHx8IGRhdGFDaGFuZ2VkOyAvLyBpZiBhIHN1cHBvcnQgbm9kZSBpcyBhZGRlZCwgZGF0YSBjYW4gYmUgY2hhbmdlZC5cbiAgICAgICAgZWRnZS5jb25uZWN0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgZWRnZVxuICAgICAgICB0aGlzLmJvZHkuZWRnZXNbaWRdID0gdGhpcy5jcmVhdGUoZGF0YSk7XG4gICAgICAgIGRhdGFDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YUNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfYWRqdXN0RWRnZXNGb3JIaWVyYXJjaGljYWxMYXlvdXRcIik7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFVcGRhdGVkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZXhpc3RpbmcgZWRnZXMuIE5vbiBleGlzdGluZyBpZHMgd2lsbCBiZSBpZ25vcmVkXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2VtaXQ9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlbW92ZShpZHMsIGVtaXQgPSB0cnVlKSB7XG4gICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHJldHVybjsgLy8gZWFybHkgb3V0XG5cbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBmb3JFYWNoKGlkcywgKGlkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbaWRdO1xuICAgICAgaWYgKGVkZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlZGdlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGVtaXQpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyBFZGdlIEhhbmRsZXJcbiAgICovXG4gIHJlZnJlc2goKSB7XG4gICAgZm9yRWFjaCh0aGlzLmJvZHkuZWRnZXMsIChlZGdlLCBlZGdlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXQoZWRnZUlkKTtcbiAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWRnZS5zZXRPcHRpb25zKGRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIHtFZGdlfVxuICAgKi9cbiAgY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gbmV3IEVkZ2UoXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgdGhpcy5ib2R5LFxuICAgICAgdGhpcy5pbWFnZXMsXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLmRlZmF1bHRPcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbm5lY3QgYWxsIGVkZ2VzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWNvbm5lY3RFZGdlcygpIHtcbiAgICBsZXQgaWQ7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG5cbiAgICBmb3IgKGlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBpZCkpIHtcbiAgICAgICAgbm9kZXNbaWRdLmVkZ2VzID0gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpZCBpbiBlZGdlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZGdlcywgaWQpKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tpZF07XG4gICAgICAgIGVkZ2UuZnJvbSA9IG51bGw7XG4gICAgICAgIGVkZ2UudG8gPSBudWxsO1xuICAgICAgICBlZGdlLmNvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFZGdlLmlkfSBlZGdlSWRcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0Q29ubmVjdGVkTm9kZXMoZWRnZUlkKSB7XG4gICAgY29uc3Qgbm9kZUxpc3QgPSBbXTtcbiAgICBpZiAodGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICAgICAgaWYgKGVkZ2UuZnJvbUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZUxpc3QucHVzaChlZGdlLmZyb21JZCk7XG4gICAgICB9XG4gICAgICBpZiAoZWRnZS50b0lkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZUxpc3QucHVzaChlZGdlLnRvSWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZUxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlcmUgaXMgbm8gZGlyZWN0IHJlbGF0aW9uIGJldHdlZW4gdGhlIG5vZGVzIGFuZCB0aGUgZWRnZXMgRGF0YVNldCxcbiAgICogc28gdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIGNhbGwgdGhpcyBpcyBpbiB0aGUgaGFuZGxlciBmb3IgZXZlbnQgYF9kYXRhVXBkYXRlZGAuXG4gICAqL1xuICBfdXBkYXRlU3RhdGUoKSB7XG4gICAgdGhpcy5fYWRkTWlzc2luZ0VkZ2VzKCk7XG4gICAgdGhpcy5fcmVtb3ZlSW52YWxpZEVkZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2NhbiBmb3IgbWlzc2luZyBub2RlcyBhbmQgcmVtb3ZlIGNvcnJlc3BvbmRpbmcgZWRnZXMsIGlmIGFueS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVJbnZhbGlkRWRnZXMoKSB7XG4gICAgY29uc3QgZWRnZXNUb0RlbGV0ZSA9IFtdO1xuXG4gICAgZm9yRWFjaCh0aGlzLmJvZHkuZWRnZXMsIChlZGdlLCBpZCkgPT4ge1xuICAgICAgY29uc3QgdG9Ob2RlID0gdGhpcy5ib2R5Lm5vZGVzW2VkZ2UudG9JZF07XG4gICAgICBjb25zdCBmcm9tTm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tlZGdlLmZyb21JZF07XG5cbiAgICAgIC8vIFNraXAgY2x1c3RlcmluZyBlZGdlcyBoZXJlLCBsZXQgdGhlIENsdXN0ZXJpbmcgbW9kdWxlIGhhbmRsZSB0aG9zZVxuICAgICAgaWYgKFxuICAgICAgICAodG9Ob2RlICE9PSB1bmRlZmluZWQgJiYgdG9Ob2RlLmlzQ2x1c3RlciA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgKGZyb21Ob2RlICE9PSB1bmRlZmluZWQgJiYgZnJvbU5vZGUuaXNDbHVzdGVyID09PSB0cnVlKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRvTm9kZSA9PT0gdW5kZWZpbmVkIHx8IGZyb21Ob2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWRnZXNUb0RlbGV0ZS5wdXNoKGlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVtb3ZlKGVkZ2VzVG9EZWxldGUsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhZGQgYWxsIGVkZ2VzIGZyb20gZGF0YXNldCB0aGF0IGFyZSBub3QgaW4gdGhlIGNhY2hlZCBzdGF0ZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZE1pc3NpbmdFZGdlcygpIHtcbiAgICBjb25zdCBlZGdlc0RhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcztcbiAgICBpZiAoZWRnZXNEYXRhID09PSB1bmRlZmluZWQgfHwgZWRnZXNEYXRhID09PSBudWxsKSB7XG4gICAgICByZXR1cm47IC8vIE5vIGVkZ2VzIERhdGFTZXQgeWV0OyBjYW4gaGFwcGVuIG9uIHN0YXJ0dXBcbiAgICB9XG5cbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBhZGRJZHMgPSBbXTtcblxuICAgIGVkZ2VzRGF0YS5mb3JFYWNoKChlZGdlRGF0YSwgZWRnZUlkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUlkXTtcbiAgICAgIGlmIChlZGdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWRkSWRzLnB1c2goZWRnZUlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYWRkKGFkZElkcywgdHJ1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWRnZXNIYW5kbGVyO1xuIiwgImltcG9ydCB7IEFsZWEgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogQmFybmVzIEh1dCBTb2x2ZXJcbiAqL1xuY2xhc3MgQmFybmVzSHV0U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5iYXJuZXNIdXRUcmVlO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLl9ybmcgPSBBbGVhKFwiQkFSTkVTIEhVVCBTT0xWRVJcIik7XG5cbiAgICAvLyBkZWJ1Zzogc2hvdyBncmlkXG4gICAgLy8gdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJhZnRlckRyYXdpbmdcIiwgKGN0eCkgPT4ge3RoaXMuX2RlYnVnKGN0eCwnI2ZmMDAwMCcpfSlcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnRoZXRhSW52ZXJzZWQgPSAxIC8gdGhpcy5vcHRpb25zLnRoZXRhO1xuXG4gICAgLy8gaWYgMSB0aGVuIG1pbiBkaXN0YW5jZSA9IDAuNSwgaWYgMC41IHRoZW4gbWluIGRpc3RhbmNlID0gMC41ICsgMC41Km5vZGUuc2hhcGUucmFkaXVzXG4gICAgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yID1cbiAgICAgIDEgLSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0aGlzLm9wdGlvbnMuYXZvaWRPdmVybGFwKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBmb3JjZXMgdGhlIG5vZGVzIGFwcGx5IG9uIGVhY2ggb3RoZXIgYmFzZWQgb24gYSBncmF2aXRhdGlvbmFsIG1vZGVsLlxuICAgKiBUaGUgQmFybmVzIEh1dCBtZXRob2QgaXMgdXNlZCB0byBzcGVlZCB1cCB0aGlzIE4tYm9keSBzaW11bGF0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmdyYXZpdGF0aW9uYWxDb25zdGFudCAhPT0gMCAmJlxuICAgICAgdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgICBjb25zdCBub2RlQ291bnQgPSBub2RlSW5kaWNlcy5sZW5ndGg7XG5cbiAgICAgIC8vIGNyZWF0ZSB0aGUgdHJlZVxuICAgICAgY29uc3QgYmFybmVzSHV0VHJlZSA9IHRoaXMuX2Zvcm1CYXJuZXNIdXRUcmVlKG5vZGVzLCBub2RlSW5kaWNlcyk7XG5cbiAgICAgIC8vIGZvciBkZWJ1Z2dpbmdcbiAgICAgIHRoaXMuYmFybmVzSHV0VHJlZSA9IGJhcm5lc0h1dFRyZWU7XG5cbiAgICAgIC8vIHBsYWNlIHRoZSBub2RlcyBvbmUgYnkgb25lIHJlY3Vyc2l2ZWx5XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVDb3VudDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tub2RlSW5kaWNlc1tpXV07XG4gICAgICAgIGlmIChub2RlLm9wdGlvbnMubWFzcyA+IDApIHtcbiAgICAgICAgICAvLyBzdGFydGluZyB3aXRoIHJvb3QgaXMgaXJyZWxldmFudCwgaXQgbmV2ZXIgcGFzc2VzIHRoZSBCYXJuZXNIdXRTb2x2ZXIgY29uZGl0aW9uXG4gICAgICAgICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb25zKGJhcm5lc0h1dFRyZWUucm9vdCwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRGb3JjZUNvbnRyaWJ1dGlvbnMocGFyZW50QnJhbmNoLCBub2RlKSB7XG4gICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLmNoaWxkcmVuLk5XLCBub2RlKTtcbiAgICB0aGlzLl9nZXRGb3JjZUNvbnRyaWJ1dGlvbihwYXJlbnRCcmFuY2guY2hpbGRyZW4uTkUsIG5vZGUpO1xuICAgIHRoaXMuX2dldEZvcmNlQ29udHJpYnV0aW9uKHBhcmVudEJyYW5jaC5jaGlsZHJlbi5TVywgbm9kZSk7XG4gICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLmNoaWxkcmVuLlNFLCBub2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgYmFybmVzSHV0VHJlZS4gSXQgY2hlY2tzIHdoZW4gaXQgY2FuIGFwcHJveGltYXRlIGRpc3RhbnQgbm9kZXMgd2l0aCB0aGVpciBjZW50ZXIgb2YgbWFzcy5cbiAgICogSWYgYSByZWdpb24gY29udGFpbnMgYSBzaW5nbGUgbm9kZSwgd2UgY2hlY2sgaWYgaXQgaXMgbm90IGl0c2VsZiwgdGhlbiB3ZSBhcHBseSB0aGUgZm9yY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLCBub2RlKSB7XG4gICAgLy8gd2UgZ2V0IG5vIGZvcmNlIGNvbnRyaWJ1dGlvbiBmcm9tIGFuIGVtcHR5IHJlZ2lvblxuICAgIGlmIChwYXJlbnRCcmFuY2guY2hpbGRyZW5Db3VudCA+IDApIHtcbiAgICAgIC8vIGdldCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2VudGVyIG9mIG1hc3MgdG8gdGhlIG5vZGUuXG4gICAgICBjb25zdCBkeCA9IHBhcmVudEJyYW5jaC5jZW50ZXJPZk1hc3MueCAtIG5vZGUueDtcbiAgICAgIGNvbnN0IGR5ID0gcGFyZW50QnJhbmNoLmNlbnRlck9mTWFzcy55IC0gbm9kZS55O1xuICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICAvLyBCYXJuZXNIdXRTb2x2ZXIgY29uZGl0aW9uXG4gICAgICAvLyBvcmlnaW5hbCBjb25kaXRpb24gOiBzL2QgPCB0aGV0YSA9IHBhc3NlZCAgPT09ICBkL3MgPiAxL3RoZXRhID0gcGFzc2VkXG4gICAgICAvLyBjYWxjU2l6ZSA9IDEvcyAtLT4gZCAqIDEvcyA+IDEvdGhldGEgPSBwYXNzZWRcbiAgICAgIGlmIChkaXN0YW5jZSAqIHBhcmVudEJyYW5jaC5jYWxjU2l6ZSA+IHRoaXMudGhldGFJbnZlcnNlZCkge1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgbm9kZSwgcGFyZW50QnJhbmNoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERpZCBub3QgcGFzcyB0aGUgY29uZGl0aW9uLCBnbyBpbnRvIGNoaWxkcmVuIGlmIGF2YWlsYWJsZVxuICAgICAgICBpZiAocGFyZW50QnJhbmNoLmNoaWxkcmVuQ291bnQgPT09IDQpIHtcbiAgICAgICAgICB0aGlzLl9nZXRGb3JjZUNvbnRyaWJ1dGlvbnMocGFyZW50QnJhbmNoLCBub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBwYXJlbnRCcmFuY2ggbXVzdCBoYXZlIG9ubHkgb25lIG5vZGUsIGlmIGl0IHdhcyBlbXB0eSB3ZSB3b3VsZG50IGJlIGhlcmVcbiAgICAgICAgICBpZiAocGFyZW50QnJhbmNoLmNoaWxkcmVuLmRhdGEuaWQgIT0gbm9kZS5pZCkge1xuICAgICAgICAgICAgLy8gaWYgaXQgaXMgbm90IHNlbGZcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZvcmNlcyhkaXN0YW5jZSwgZHgsIGR5LCBub2RlLCBwYXJlbnRCcmFuY2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGZvcmNlcyBiYXNlZCBvbiB0aGUgZGlzdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxuICAgKiBAcGFyYW0ge251bWJlcn0gZHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR5XG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIG5vZGUsIHBhcmVudEJyYW5jaCkge1xuICAgIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuICAgICAgZGlzdGFuY2UgPSAwLjE7XG4gICAgICBkeCA9IGRpc3RhbmNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm92ZXJsYXBBdm9pZGFuY2VGYWN0b3IgPCAxICYmIG5vZGUuc2hhcGUucmFkaXVzKSB7XG4gICAgICBkaXN0YW5jZSA9IE1hdGgubWF4KFxuICAgICAgICAwLjEgKyB0aGlzLm92ZXJsYXBBdm9pZGFuY2VGYWN0b3IgKiBub2RlLnNoYXBlLnJhZGl1cyxcbiAgICAgICAgZGlzdGFuY2UgLSBub2RlLnNoYXBlLnJhZGl1c1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgZGl2aWRpbmcgYnkgdGhlIGRpc3RhbmNlIGN1YmVkIGluc3RlYWQgb2Ygc3F1YXJlZCBhbGxvd3MgdXMgdG8gZ2V0IHRoZSBmeCBhbmQgZnkgY29tcG9uZW50cyB3aXRob3V0IHNpbmVzIGFuZCBjb3NpbmVzXG4gICAgLy8gaXQgaXMgc2hvcnRoYW5kIGZvciBncmF2aXR5Zm9yY2Ugd2l0aCBkaXN0YW5jZSBzcXVhcmVkIGFuZCBmeCA9IGR4L2Rpc3RhbmNlICogZ3Jhdml0eUZvcmNlXG4gICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgICh0aGlzLm9wdGlvbnMuZ3Jhdml0YXRpb25hbENvbnN0YW50ICpcbiAgICAgICAgcGFyZW50QnJhbmNoLm1hc3MgKlxuICAgICAgICBub2RlLm9wdGlvbnMubWFzcykgL1xuICAgICAgTWF0aC5wb3coZGlzdGFuY2UsIDMpO1xuICAgIGNvbnN0IGZ4ID0gZHggKiBncmF2aXR5Rm9yY2U7XG4gICAgY29uc3QgZnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcblxuICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUuaWRdLnggKz0gZng7XG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZS5pZF0ueSArPSBmeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNvbnN0cnVjdHMgdGhlIGJhcm5lc0h1dCB0cmVlIHJlY3Vyc2l2ZWx5LiBJdCBjcmVhdGVzIHRoZSByb290LCBzcGxpdHMgaXQgYW5kIHN0YXJ0cyBwbGFjaW5nIHRoZSBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG5vZGVJbmRpY2VzXG4gICAqIEByZXR1cm5zIHt7cm9vdDoge2NlbnRlck9mTWFzczoge3g6IG51bWJlciwgeTogbnVtYmVyfSwgbWFzczogbnVtYmVyLCByYW5nZToge21pblg6IG51bWJlciwgbWF4WDogbnVtYmVyLCBtaW5ZOiBudW1iZXIsIG1heFk6IG51bWJlcn0sIHNpemU6IG51bWJlciwgY2FsY1NpemU6IG51bWJlciwgY2hpbGRyZW46IHtkYXRhOiBudWxsfSwgbWF4V2lkdGg6IG51bWJlciwgbGV2ZWw6IG51bWJlciwgY2hpbGRyZW5Db3VudDogbnVtYmVyfX19IEJhcm5lc0h1dFRyZWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9mb3JtQmFybmVzSHV0VHJlZShub2Rlcywgbm9kZUluZGljZXMpIHtcbiAgICBsZXQgbm9kZTtcbiAgICBjb25zdCBub2RlQ291bnQgPSBub2RlSW5kaWNlcy5sZW5ndGg7XG5cbiAgICBsZXQgbWluWCA9IG5vZGVzW25vZGVJbmRpY2VzWzBdXS54O1xuICAgIGxldCBtaW5ZID0gbm9kZXNbbm9kZUluZGljZXNbMF1dLnk7XG4gICAgbGV0IG1heFggPSBub2Rlc1tub2RlSW5kaWNlc1swXV0ueDtcbiAgICBsZXQgbWF4WSA9IG5vZGVzW25vZGVJbmRpY2VzWzBdXS55O1xuXG4gICAgLy8gZ2V0IHRoZSByYW5nZSBvZiB0aGUgbm9kZXNcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IG5vZGVDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgY29uc3QgeCA9IG5vZGUueDtcbiAgICAgIGNvbnN0IHkgPSBub2RlLnk7XG4gICAgICBpZiAobm9kZS5vcHRpb25zLm1hc3MgPiAwKSB7XG4gICAgICAgIGlmICh4IDwgbWluWCkge1xuICAgICAgICAgIG1pblggPSB4O1xuICAgICAgICB9XG4gICAgICAgIGlmICh4ID4gbWF4WCkge1xuICAgICAgICAgIG1heFggPSB4O1xuICAgICAgICB9XG4gICAgICAgIGlmICh5IDwgbWluWSkge1xuICAgICAgICAgIG1pblkgPSB5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh5ID4gbWF4WSkge1xuICAgICAgICAgIG1heFkgPSB5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1ha2UgdGhlIHJhbmdlIGEgc3F1YXJlXG4gICAgY29uc3Qgc2l6ZURpZmYgPSBNYXRoLmFicyhtYXhYIC0gbWluWCkgLSBNYXRoLmFicyhtYXhZIC0gbWluWSk7IC8vIGRpZmZlcmVuY2UgYmV0d2VlbiBYIGFuZCBZXG4gICAgaWYgKHNpemVEaWZmID4gMCkge1xuICAgICAgbWluWSAtPSAwLjUgKiBzaXplRGlmZjtcbiAgICAgIG1heFkgKz0gMC41ICogc2l6ZURpZmY7XG4gICAgfSAvLyB4U2l6ZSA+IHlTaXplXG4gICAgZWxzZSB7XG4gICAgICBtaW5YICs9IDAuNSAqIHNpemVEaWZmO1xuICAgICAgbWF4WCAtPSAwLjUgKiBzaXplRGlmZjtcbiAgICB9IC8vIHhTaXplIDwgeVNpemVcblxuICAgIGNvbnN0IG1pbmltdW1UcmVlU2l6ZSA9IDFlLTU7XG4gICAgY29uc3Qgcm9vdFNpemUgPSBNYXRoLm1heChtaW5pbXVtVHJlZVNpemUsIE1hdGguYWJzKG1heFggLSBtaW5YKSk7XG4gICAgY29uc3QgaGFsZlJvb3RTaXplID0gMC41ICogcm9vdFNpemU7XG4gICAgY29uc3QgY2VudGVyWCA9IDAuNSAqIChtaW5YICsgbWF4WCksXG4gICAgICBjZW50ZXJZID0gMC41ICogKG1pblkgKyBtYXhZKTtcblxuICAgIC8vIGNvbnN0cnVjdCB0aGUgYmFybmVzSHV0VHJlZVxuICAgIGNvbnN0IGJhcm5lc0h1dFRyZWUgPSB7XG4gICAgICByb290OiB7XG4gICAgICAgIGNlbnRlck9mTWFzczogeyB4OiAwLCB5OiAwIH0sXG4gICAgICAgIG1hc3M6IDAsXG4gICAgICAgIHJhbmdlOiB7XG4gICAgICAgICAgbWluWDogY2VudGVyWCAtIGhhbGZSb290U2l6ZSxcbiAgICAgICAgICBtYXhYOiBjZW50ZXJYICsgaGFsZlJvb3RTaXplLFxuICAgICAgICAgIG1pblk6IGNlbnRlclkgLSBoYWxmUm9vdFNpemUsXG4gICAgICAgICAgbWF4WTogY2VudGVyWSArIGhhbGZSb290U2l6ZSxcbiAgICAgICAgfSxcbiAgICAgICAgc2l6ZTogcm9vdFNpemUsXG4gICAgICAgIGNhbGNTaXplOiAxIC8gcm9vdFNpemUsXG4gICAgICAgIGNoaWxkcmVuOiB7IGRhdGE6IG51bGwgfSxcbiAgICAgICAgbWF4V2lkdGg6IDAsXG4gICAgICAgIGxldmVsOiAwLFxuICAgICAgICBjaGlsZHJlbkNvdW50OiA0LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuX3NwbGl0QnJhbmNoKGJhcm5lc0h1dFRyZWUucm9vdCk7XG5cbiAgICAvLyBwbGFjZSB0aGUgbm9kZXMgb25lIGJ5IG9uZSByZWN1cnNpdmVseVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUNvdW50OyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tub2RlSW5kaWNlc1tpXV07XG4gICAgICBpZiAobm9kZS5vcHRpb25zLm1hc3MgPiAwKSB7XG4gICAgICAgIHRoaXMuX3BsYWNlSW5UcmVlKGJhcm5lc0h1dFRyZWUucm9vdCwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFrZSBnbG9iYWxcbiAgICByZXR1cm4gYmFybmVzSHV0VHJlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIHVwZGF0ZXMgdGhlIG1hc3Mgb2YgYSBicmFuY2guIHRoaXMgaXMgaW5jcmVhc2VkIGJ5IGFkZGluZyBhIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlQnJhbmNoTWFzcyhwYXJlbnRCcmFuY2gsIG5vZGUpIHtcbiAgICBjb25zdCBjZW50ZXJPZk1hc3MgPSBwYXJlbnRCcmFuY2guY2VudGVyT2ZNYXNzO1xuICAgIGNvbnN0IHRvdGFsTWFzcyA9IHBhcmVudEJyYW5jaC5tYXNzICsgbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgY29uc3QgdG90YWxNYXNzSW52ID0gMSAvIHRvdGFsTWFzcztcblxuICAgIGNlbnRlck9mTWFzcy54ID1cbiAgICAgIGNlbnRlck9mTWFzcy54ICogcGFyZW50QnJhbmNoLm1hc3MgKyBub2RlLnggKiBub2RlLm9wdGlvbnMubWFzcztcbiAgICBjZW50ZXJPZk1hc3MueCAqPSB0b3RhbE1hc3NJbnY7XG5cbiAgICBjZW50ZXJPZk1hc3MueSA9XG4gICAgICBjZW50ZXJPZk1hc3MueSAqIHBhcmVudEJyYW5jaC5tYXNzICsgbm9kZS55ICogbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgY2VudGVyT2ZNYXNzLnkgKj0gdG90YWxNYXNzSW52O1xuXG4gICAgcGFyZW50QnJhbmNoLm1hc3MgPSB0b3RhbE1hc3M7XG4gICAgY29uc3QgYmlnZ2VzdFNpemUgPSBNYXRoLm1heChcbiAgICAgIE1hdGgubWF4KG5vZGUuaGVpZ2h0LCBub2RlLnJhZGl1cyksXG4gICAgICBub2RlLndpZHRoXG4gICAgKTtcbiAgICBwYXJlbnRCcmFuY2gubWF4V2lkdGggPVxuICAgICAgcGFyZW50QnJhbmNoLm1heFdpZHRoIDwgYmlnZ2VzdFNpemUgPyBiaWdnZXN0U2l6ZSA6IHBhcmVudEJyYW5jaC5tYXhXaWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBkZXRlcm1pbmUgaW4gd2hpY2ggYnJhbmNoIHRoZSBub2RlIHdpbGwgYmUgcGxhY2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNraXBNYXNzVXBkYXRlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGxhY2VJblRyZWUocGFyZW50QnJhbmNoLCBub2RlLCBza2lwTWFzc1VwZGF0ZSkge1xuICAgIGlmIChza2lwTWFzc1VwZGF0ZSAhPSB0cnVlIHx8IHNraXBNYXNzVXBkYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHVwZGF0ZSB0aGUgbWFzcyBvZiB0aGUgYnJhbmNoLlxuICAgICAgdGhpcy5fdXBkYXRlQnJhbmNoTWFzcyhwYXJlbnRCcmFuY2gsIG5vZGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gcGFyZW50QnJhbmNoLmNoaWxkcmVuLk5XLnJhbmdlO1xuICAgIGxldCByZWdpb247XG4gICAgaWYgKHJhbmdlLm1heFggPiBub2RlLngpIHtcbiAgICAgIC8vIGluIE5XIG9yIFNXXG4gICAgICBpZiAocmFuZ2UubWF4WSA+IG5vZGUueSkge1xuICAgICAgICByZWdpb24gPSBcIk5XXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWdpb24gPSBcIlNXXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluIE5FIG9yIFNFXG4gICAgICBpZiAocmFuZ2UubWF4WSA+IG5vZGUueSkge1xuICAgICAgICByZWdpb24gPSBcIk5FXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWdpb24gPSBcIlNFXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcGxhY2VJblJlZ2lvbihwYXJlbnRCcmFuY2gsIG5vZGUsIHJlZ2lvbik7XG4gIH1cblxuICAvKipcbiAgICogYWN0dWFsbHkgcGxhY2UgdGhlIG5vZGUgaW4gYSByZWdpb24gKG9yIGJyYW5jaClcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHsnTlcnfCAnTkUnIHwgJ1NXJyB8ICdTRSd9IHJlZ2lvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BsYWNlSW5SZWdpb24ocGFyZW50QnJhbmNoLCBub2RlLCByZWdpb24pIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudEJyYW5jaC5jaGlsZHJlbltyZWdpb25dO1xuXG4gICAgc3dpdGNoIChjaGlsZHJlbi5jaGlsZHJlbkNvdW50KSB7XG4gICAgICBjYXNlIDA6IC8vIHBsYWNlIG5vZGUgaGVyZVxuICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5kYXRhID0gbm9kZTtcbiAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW5Db3VudCA9IDE7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUJyYW5jaE1hc3MoY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTogLy8gY29udmVydCBpbnRvIGNoaWxkcmVuXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSB0d28gbm9kZXMgZXhhY3RseSBvdmVybGFwcGluZyAob24gaW5pdCwgb24gb3BlbmluZyBvZiBjbHVzdGVyIGV0Yy4pXG4gICAgICAgIC8vIHdlIG1vdmUgb25lIG5vZGUgYSBsaXR0bGUgYml0IGFuZCB3ZSBkbyBub3QgcHV0IGl0IGluIHRoZSB0cmVlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4uZGF0YS54ID09PSBub2RlLnggJiZcbiAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5kYXRhLnkgPT09IG5vZGUueVxuICAgICAgICApIHtcbiAgICAgICAgICBub2RlLnggKz0gdGhpcy5fcm5nKCk7XG4gICAgICAgICAgbm9kZS55ICs9IHRoaXMuX3JuZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3NwbGl0QnJhbmNoKGNoaWxkcmVuKTtcbiAgICAgICAgICB0aGlzLl9wbGFjZUluVHJlZShjaGlsZHJlbiwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6IC8vIHBsYWNlIGluIGJyYW5jaFxuICAgICAgICB0aGlzLl9wbGFjZUluVHJlZShjaGlsZHJlbiwgbm9kZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGZ1bmN0aW9uIHNwbGl0cyBhIGJyYW5jaCBpbnRvIDQgc3ViIGJyYW5jaGVzLiBJZiB0aGUgYnJhbmNoIGNvbnRhaW5lZCBhIG5vZGUsIHdlIHBsYWNlIGl0IGluIHRoZSBzdWJicmFuY2hcbiAgICogYWZ0ZXIgdGhlIHNwbGl0IGlzIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3BsaXRCcmFuY2gocGFyZW50QnJhbmNoKSB7XG4gICAgLy8gaWYgdGhlIGJyYW5jaCBpcyBzaGFkZWQgd2l0aCBhIG5vZGUsIHJlcGxhY2UgdGhlIG5vZGUgaW4gdGhlIG5ldyBzdWJzZXQuXG4gICAgbGV0IGNvbnRhaW5lZE5vZGUgPSBudWxsO1xuICAgIGlmIChwYXJlbnRCcmFuY2guY2hpbGRyZW5Db3VudCA9PT0gMSkge1xuICAgICAgY29udGFpbmVkTm9kZSA9IHBhcmVudEJyYW5jaC5jaGlsZHJlbi5kYXRhO1xuICAgICAgcGFyZW50QnJhbmNoLm1hc3MgPSAwO1xuICAgICAgcGFyZW50QnJhbmNoLmNlbnRlck9mTWFzcy54ID0gMDtcbiAgICAgIHBhcmVudEJyYW5jaC5jZW50ZXJPZk1hc3MueSA9IDA7XG4gICAgfVxuICAgIHBhcmVudEJyYW5jaC5jaGlsZHJlbkNvdW50ID0gNDtcbiAgICBwYXJlbnRCcmFuY2guY2hpbGRyZW4uZGF0YSA9IG51bGw7XG4gICAgdGhpcy5faW5zZXJ0UmVnaW9uKHBhcmVudEJyYW5jaCwgXCJOV1wiKTtcbiAgICB0aGlzLl9pbnNlcnRSZWdpb24ocGFyZW50QnJhbmNoLCBcIk5FXCIpO1xuICAgIHRoaXMuX2luc2VydFJlZ2lvbihwYXJlbnRCcmFuY2gsIFwiU1dcIik7XG4gICAgdGhpcy5faW5zZXJ0UmVnaW9uKHBhcmVudEJyYW5jaCwgXCJTRVwiKTtcblxuICAgIGlmIChjb250YWluZWROb2RlICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3BsYWNlSW5UcmVlKHBhcmVudEJyYW5jaCwgY29udGFpbmVkTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gc3ViZGl2aWRlcyB0aGUgcmVnaW9uIGludG8gZm91ciBuZXcgc2VnbWVudHMuXG4gICAqIFNwZWNpZmljYWxseSwgdGhpcyBpbnNlcnRzIGEgc2luZ2xlIG5ldyBzZWdtZW50LlxuICAgKiBJdCBmaWxscyB0aGUgY2hpbGRyZW4gc2VjdGlvbiBvZiB0aGUgcGFyZW50QnJhbmNoXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHsnTlcnfCAnTkUnIHwgJ1NXJyB8ICdTRSd9IHJlZ2lvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luc2VydFJlZ2lvbihwYXJlbnRCcmFuY2gsIHJlZ2lvbikge1xuICAgIGxldCBtaW5YLCBtYXhYLCBtaW5ZLCBtYXhZO1xuICAgIGNvbnN0IGNoaWxkU2l6ZSA9IDAuNSAqIHBhcmVudEJyYW5jaC5zaXplO1xuICAgIHN3aXRjaCAocmVnaW9uKSB7XG4gICAgICBjYXNlIFwiTldcIjpcbiAgICAgICAgbWluWCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YO1xuICAgICAgICBtYXhYID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblggKyBjaGlsZFNpemU7XG4gICAgICAgIG1pblkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWTtcbiAgICAgICAgbWF4WSA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5ZICsgY2hpbGRTaXplO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJORVwiOlxuICAgICAgICBtaW5YID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblggKyBjaGlsZFNpemU7XG4gICAgICAgIG1heFggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWF4WDtcbiAgICAgICAgbWluWSA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5ZO1xuICAgICAgICBtYXhZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblkgKyBjaGlsZFNpemU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlNXXCI6XG4gICAgICAgIG1pblggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWDtcbiAgICAgICAgbWF4WCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YICsgY2hpbGRTaXplO1xuICAgICAgICBtaW5ZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblkgKyBjaGlsZFNpemU7XG4gICAgICAgIG1heFkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWF4WTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiU0VcIjpcbiAgICAgICAgbWluWCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YICsgY2hpbGRTaXplO1xuICAgICAgICBtYXhYID0gcGFyZW50QnJhbmNoLnJhbmdlLm1heFg7XG4gICAgICAgIG1pblkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWSArIGNoaWxkU2l6ZTtcbiAgICAgICAgbWF4WSA9IHBhcmVudEJyYW5jaC5yYW5nZS5tYXhZO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBwYXJlbnRCcmFuY2guY2hpbGRyZW5bcmVnaW9uXSA9IHtcbiAgICAgIGNlbnRlck9mTWFzczogeyB4OiAwLCB5OiAwIH0sXG4gICAgICBtYXNzOiAwLFxuICAgICAgcmFuZ2U6IHsgbWluWDogbWluWCwgbWF4WDogbWF4WCwgbWluWTogbWluWSwgbWF4WTogbWF4WSB9LFxuICAgICAgc2l6ZTogMC41ICogcGFyZW50QnJhbmNoLnNpemUsXG4gICAgICBjYWxjU2l6ZTogMiAqIHBhcmVudEJyYW5jaC5jYWxjU2l6ZSxcbiAgICAgIGNoaWxkcmVuOiB7IGRhdGE6IG51bGwgfSxcbiAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgbGV2ZWw6IHBhcmVudEJyYW5jaC5sZXZlbCArIDEsXG4gICAgICBjaGlsZHJlbkNvdW50OiAwLFxuICAgIH07XG4gIH1cblxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVCVUdHSU5HIEJFTE9XICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZWQsIGl0IGRyYXdzIHRoZSB0cmVlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RlYnVnKGN0eCwgY29sb3IpIHtcbiAgICBpZiAodGhpcy5iYXJuZXNIdXRUcmVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGN0eC5saW5lV2lkdGggPSAxO1xuXG4gICAgICB0aGlzLl9kcmF3QnJhbmNoKHRoaXMuYmFybmVzSHV0VHJlZS5yb290LCBjdHgsIGNvbG9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBJdCBkcmF3cyB0aGUgYnJhbmNoZXMgcmVjdXJzaXZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBicmFuY2hcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3QnJhbmNoKGJyYW5jaCwgY3R4LCBjb2xvcikge1xuICAgIGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IFwiI0ZGMDAwMFwiO1xuICAgIH1cblxuICAgIGlmIChicmFuY2guY2hpbGRyZW5Db3VudCA9PT0gNCkge1xuICAgICAgdGhpcy5fZHJhd0JyYW5jaChicmFuY2guY2hpbGRyZW4uTlcsIGN0eCk7XG4gICAgICB0aGlzLl9kcmF3QnJhbmNoKGJyYW5jaC5jaGlsZHJlbi5ORSwgY3R4KTtcbiAgICAgIHRoaXMuX2RyYXdCcmFuY2goYnJhbmNoLmNoaWxkcmVuLlNFLCBjdHgpO1xuICAgICAgdGhpcy5fZHJhd0JyYW5jaChicmFuY2guY2hpbGRyZW4uU1csIGN0eCk7XG4gICAgfVxuICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5taW5YLCBicmFuY2gucmFuZ2UubWluWSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWF4WCwgYnJhbmNoLnJhbmdlLm1pblkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5tYXhYLCBicmFuY2gucmFuZ2UubWluWSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWF4WCwgYnJhbmNoLnJhbmdlLm1heFkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5tYXhYLCBicmFuY2gucmFuZ2UubWF4WSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWluWCwgYnJhbmNoLnJhbmdlLm1heFkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5taW5YLCBicmFuY2gucmFuZ2UubWF4WSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWluWCwgYnJhbmNoLnJhbmdlLm1pblkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIC8qXG4gICAgIGlmIChicmFuY2gubWFzcyA+IDApIHtcbiAgICAgY3R4LmNpcmNsZShicmFuY2guY2VudGVyT2ZNYXNzLngsIGJyYW5jaC5jZW50ZXJPZk1hc3MueSwgMypicmFuY2gubWFzcyk7XG4gICAgIGN0eC5zdHJva2UoKTtcbiAgICAgfVxuICAgICAqL1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhcm5lc0h1dFNvbHZlcjtcbiIsICJpbXBvcnQgeyBBbGVhIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFJlcHVsc2lvbiBTb2x2ZXJcbiAqL1xuY2xhc3MgUmVwdWxzaW9uU29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5fcm5nID0gQWxlYShcIlJFUFVMU0lPTiBTT0xWRVJcIik7XG5cbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGh5c2ljc0JvZHkgPSBwaHlzaWNzQm9keTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgdGhlIG5vZGVzIGFwcGx5IG9uIGVhY2ggb3RoZXIgYmFzZWQgb24gYSByZXB1bHNpb24gZmllbGQuXG4gICAqIFRoaXMgZmllbGQgaXMgbGluZWFybHkgYXBwcm94aW1hdGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgbGV0IGR4LCBkeSwgZGlzdGFuY2UsIGZ4LCBmeSwgcmVwdWxzaW5nRm9yY2UsIG5vZGUxLCBub2RlMjtcblxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICAvLyByZXB1bHNpbmcgZm9yY2VzIGJldHdlZW4gbm9kZXNcbiAgICBjb25zdCBub2RlRGlzdGFuY2UgPSB0aGlzLm9wdGlvbnMubm9kZURpc3RhbmNlO1xuXG4gICAgLy8gYXBwcm94aW1hdGlvbiBjb25zdGFudHNcbiAgICBjb25zdCBhID0gLTIgLyAzIC8gbm9kZURpc3RhbmNlO1xuICAgIGNvbnN0IGIgPSA0IC8gMztcblxuICAgIC8vIHdlIGxvb3AgZnJvbSBpIG92ZXIgYWxsIGJ1dCB0aGUgbGFzdCBlbnRyZWUgaW4gdGhlIGFycmF5XG4gICAgLy8gaiBsb29wcyBmcm9tIGkrMSB0byB0aGUgbGFzdC4gVGhpcyB3YXkgd2UgZG8gbm90IGRvdWJsZSBjb3VudCBhbnkgb2YgdGhlIGluZGljZXMsIG5vciBpID09PSBqXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIG5vZGUxID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgbm9kZUluZGljZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbm9kZTIgPSBub2Rlc1tub2RlSW5kaWNlc1tqXV07XG5cbiAgICAgICAgZHggPSBub2RlMi54IC0gbm9kZTEueDtcbiAgICAgICAgZHkgPSBub2RlMi55IC0gbm9kZTEueTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICAgIC8vIHNhbWUgY29uZGl0aW9uIGFzIEJhcm5lc0h1dFNvbHZlciwgbWFraW5nIHN1cmUgbm9kZXMgYXJlIG5ldmVyIDEwMCUgb3ZlcmxhcHBpbmcuXG4gICAgICAgIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICAgIGRpc3RhbmNlID0gMC4xICogdGhpcy5fcm5nKCk7XG4gICAgICAgICAgZHggPSBkaXN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXN0YW5jZSA8IDIgKiBub2RlRGlzdGFuY2UpIHtcbiAgICAgICAgICBpZiAoZGlzdGFuY2UgPCAwLjUgKiBub2RlRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gMS4wO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXB1bHNpbmdGb3JjZSA9IGEgKiBkaXN0YW5jZSArIGI7IC8vIGxpbmVhciBhcHByb3ggb2YgIDEgLyAoMSArIE1hdGguZXhwKChkaXN0YW5jZSAvIG5vZGVEaXN0YW5jZSAtIDEpICogc3RlZXBuZXNzKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVwdWxzaW5nRm9yY2UgPSByZXB1bHNpbmdGb3JjZSAvIGRpc3RhbmNlO1xuXG4gICAgICAgICAgZnggPSBkeCAqIHJlcHVsc2luZ0ZvcmNlO1xuICAgICAgICAgIGZ5ID0gZHkgKiByZXB1bHNpbmdGb3JjZTtcblxuICAgICAgICAgIGZvcmNlc1tub2RlMS5pZF0ueCAtPSBmeDtcbiAgICAgICAgICBmb3JjZXNbbm9kZTEuaWRdLnkgLT0gZnk7XG4gICAgICAgICAgZm9yY2VzW25vZGUyLmlkXS54ICs9IGZ4O1xuICAgICAgICAgIGZvcmNlc1tub2RlMi5pZF0ueSArPSBmeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXB1bHNpb25Tb2x2ZXI7XG4iLCAiLyoqXG4gKiBIaWVyYXJjaGljYWwgUmVwdWxzaW9uIFNvbHZlclxuICovXG5jbGFzcyBIaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHt7cGh5c2ljc05vZGVJbmRpY2VzOiBBcnJheSwgcGh5c2ljc0VkZ2VJbmRpY2VzOiBBcnJheSwgZm9yY2VzOiB7fSwgdmVsb2NpdGllczoge319fSBwaHlzaWNzQm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGh5c2ljc0JvZHkgPSBwaHlzaWNzQm9keTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oMSwgdGhpcy5vcHRpb25zLmF2b2lkT3ZlcmxhcCB8fCAwKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgdGhlIG5vZGVzIGFwcGx5IG9uIGVhY2ggb3RoZXIgYmFzZWQgb24gYSByZXB1bHNpb24gZmllbGQuXG4gICAqIFRoaXMgZmllbGQgaXMgbGluZWFybHkgYXBwcm94aW1hdGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3Qgbm9kZUluZGljZXMgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcztcbiAgICBjb25zdCBmb3JjZXMgPSB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlcztcblxuICAgIC8vIHJlcHVsc2luZyBmb3JjZXMgYmV0d2VlbiBub2Rlc1xuICAgIGNvbnN0IG5vZGVEaXN0YW5jZSA9IHRoaXMub3B0aW9ucy5ub2RlRGlzdGFuY2U7XG5cbiAgICAvLyB3ZSBsb29wIGZyb20gaSBvdmVyIGFsbCBidXQgdGhlIGxhc3QgZW50cmVlIGluIHRoZSBhcnJheVxuICAgIC8vIGogbG9vcHMgZnJvbSBpKzEgdG8gdGhlIGxhc3QuIFRoaXMgd2F5IHdlIGRvIG5vdCBkb3VibGUgY291bnQgYW55IG9mIHRoZSBpbmRpY2VzLCBub3IgaSA9PT0galxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlMSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUyID0gbm9kZXNbbm9kZUluZGljZXNbal1dO1xuXG4gICAgICAgIC8vIG5vZGVzIG9ubHkgYWZmZWN0IG5vZGVzIG9uIHRoZWlyIGxldmVsXG4gICAgICAgIGlmIChub2RlMS5sZXZlbCA9PT0gbm9kZTIubGV2ZWwpIHtcbiAgICAgICAgICBjb25zdCB0aGVzZU5vZGVzRGlzdGFuY2UgPVxuICAgICAgICAgICAgbm9kZURpc3RhbmNlICtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvciAqXG4gICAgICAgICAgICAgICgobm9kZTEuc2hhcGUucmFkaXVzIHx8IDApIC8gMiArIChub2RlMi5zaGFwZS5yYWRpdXMgfHwgMCkgLyAyKTtcblxuICAgICAgICAgIGNvbnN0IGR4ID0gbm9kZTIueCAtIG5vZGUxLng7XG4gICAgICAgICAgY29uc3QgZHkgPSBub2RlMi55IC0gbm9kZTEueTtcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICAgICAgICBjb25zdCBzdGVlcG5lc3MgPSAwLjA1O1xuICAgICAgICAgIGxldCByZXB1bHNpbmdGb3JjZTtcbiAgICAgICAgICBpZiAoZGlzdGFuY2UgPCB0aGVzZU5vZGVzRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID1cbiAgICAgICAgICAgICAgLU1hdGgucG93KHN0ZWVwbmVzcyAqIGRpc3RhbmNlLCAyKSArXG4gICAgICAgICAgICAgIE1hdGgucG93KHN0ZWVwbmVzcyAqIHRoZXNlTm9kZXNEaXN0YW5jZSwgMik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbm9ybWFsaXplIGZvcmNlIHdpdGhcbiAgICAgICAgICBpZiAoZGlzdGFuY2UgIT09IDApIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gcmVwdWxzaW5nRm9yY2UgLyBkaXN0YW5jZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZnggPSBkeCAqIHJlcHVsc2luZ0ZvcmNlO1xuICAgICAgICAgIGNvbnN0IGZ5ID0gZHkgKiByZXB1bHNpbmdGb3JjZTtcblxuICAgICAgICAgIGZvcmNlc1tub2RlMS5pZF0ueCAtPSBmeDtcbiAgICAgICAgICBmb3JjZXNbbm9kZTEuaWRdLnkgLT0gZnk7XG4gICAgICAgICAgZm9yY2VzW25vZGUyLmlkXS54ICs9IGZ4O1xuICAgICAgICAgIGZvcmNlc1tub2RlMi5pZF0ueSArPSBmeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXI7XG4iLCAiLyoqXG4gKiBTcHJpbmcgU29sdmVyXG4gKi9cbmNsYXNzIFNwcmluZ1NvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHBoeXNpY3NCb2R5O1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHNwcmluZ2ZvcmNlcyBvbiB0aGUgbm9kZXMsIGFjY291bnRpbmcgZm9yIHRoZSBzdXBwb3J0IG5vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgbGV0IGVkZ2VMZW5ndGgsIGVkZ2U7XG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcztcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBsZXQgbm9kZTEsIG5vZGUyLCBub2RlMztcblxuICAgIC8vIGZvcmNlcyBjYXVzZWQgYnkgdGhlIGVkZ2VzLCBtb2RlbGxlZCBhcyBzcHJpbmdzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZWRnZSA9IGVkZ2VzW2VkZ2VJbmRpY2VzW2ldXTtcbiAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCA9PT0gdHJ1ZSAmJiBlZGdlLnRvSWQgIT09IGVkZ2UuZnJvbUlkKSB7XG4gICAgICAgIC8vIG9ubHkgY2FsY3VsYXRlIGZvcmNlcyBpZiBub2RlcyBhcmUgaW4gdGhlIHNhbWUgc2VjdG9yXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChlZGdlLmVkZ2VUeXBlLnZpYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlZGdlTGVuZ3RoID1cbiAgICAgICAgICAgICAgZWRnZS5vcHRpb25zLmxlbmd0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLm9wdGlvbnMuc3ByaW5nTGVuZ3RoXG4gICAgICAgICAgICAgICAgOiBlZGdlLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgbm9kZTEgPSBlZGdlLnRvO1xuICAgICAgICAgICAgbm9kZTIgPSBlZGdlLmVkZ2VUeXBlLnZpYTtcbiAgICAgICAgICAgIG5vZGUzID0gZWRnZS5mcm9tO1xuXG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVTcHJpbmdGb3JjZShub2RlMSwgbm9kZTIsIDAuNSAqIGVkZ2VMZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlU3ByaW5nRm9yY2Uobm9kZTIsIG5vZGUzLCAwLjUgKiBlZGdlTGVuZ3RoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhlICogMS41IGlzIGhlcmUgc28gdGhlIGVkZ2UgbG9va3MgYXMgbGFyZ2UgYXMgYSBzbW9vdGggZWRnZS4gSXQgZG9lcyBub3QgaW5pdGlhbGx5IGJlY2F1c2UgdGhlIHNtb290aCBlZGdlcyB1c2VcbiAgICAgICAgICAgIC8vIHRoZSBzdXBwb3J0IG5vZGVzIHdoaWNoIGV4ZXJ0IGEgcmVwdWxzaXZlIGZvcmNlIG9uIHRoZSB0byBhbmQgZnJvbSBub2RlcywgbWFraW5nIHRoZSBlZGdlIGFwcGVhciBsYXJnZXIuXG4gICAgICAgICAgICBlZGdlTGVuZ3RoID1cbiAgICAgICAgICAgICAgZWRnZS5vcHRpb25zLmxlbmd0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLm9wdGlvbnMuc3ByaW5nTGVuZ3RoICogMS41XG4gICAgICAgICAgICAgICAgOiBlZGdlLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlU3ByaW5nRm9yY2UoZWRnZS5mcm9tLCBlZGdlLnRvLCBlZGdlTGVuZ3RoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgY29kZSBhY3R1YWxseSBwZXJmb3JtaW5nIHRoZSBjYWxjdWxhdGlvbiBmb3IgdGhlIGZ1bmN0aW9uIGFib3ZlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUxXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZTJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VMZW5ndGhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVTcHJpbmdGb3JjZShub2RlMSwgbm9kZTIsIGVkZ2VMZW5ndGgpIHtcbiAgICBjb25zdCBkeCA9IG5vZGUxLnggLSBub2RlMi54O1xuICAgIGNvbnN0IGR5ID0gbm9kZTEueSAtIG5vZGUyLnk7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLm1heChNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpLCAwLjAxKTtcblxuICAgIC8vIHRoZSAxL2Rpc3RhbmNlIGlzIHNvIHRoZSBmeCBhbmQgZnkgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBzaW5lIG9yIGNvc2luZS5cbiAgICBjb25zdCBzcHJpbmdGb3JjZSA9XG4gICAgICAodGhpcy5vcHRpb25zLnNwcmluZ0NvbnN0YW50ICogKGVkZ2VMZW5ndGggLSBkaXN0YW5jZSkpIC8gZGlzdGFuY2U7XG5cbiAgICBjb25zdCBmeCA9IGR4ICogc3ByaW5nRm9yY2U7XG4gICAgY29uc3QgZnkgPSBkeSAqIHNwcmluZ0ZvcmNlO1xuXG4gICAgLy8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG9uZSBub2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBwaHlzY2lzXG4gICAgaWYgKHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUxLmlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMS5pZF0ueCArPSBmeDtcbiAgICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUxLmlkXS55ICs9IGZ5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMi5pZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZTIuaWRdLnggLT0gZng7XG4gICAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMi5pZF0ueSAtPSBmeTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3ByaW5nU29sdmVyO1xuIiwgIi8qKlxuICogSGllcmFyY2hpY2FsIFNwcmluZyBTb2x2ZXJcbiAqL1xuY2xhc3MgSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgc3ByaW5nZm9yY2VzIG9uIHRoZSBub2RlcywgYWNjb3VudGluZyBmb3IgdGhlIHN1cHBvcnQgbm9kZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzb2x2ZSgpIHtcbiAgICBsZXQgZWRnZUxlbmd0aCwgZWRnZTtcbiAgICBsZXQgZHgsIGR5LCBmeCwgZnksIHNwcmluZ0ZvcmNlLCBkaXN0YW5jZTtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBmYWN0b3IgPSAwLjU7XG5cbiAgICBjb25zdCBlZGdlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc0VkZ2VJbmRpY2VzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICAvLyBpbml0aWFsaXplIHRoZSBzcHJpbmcgZm9yY2UgY291bnRlcnNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z4ID0gMDtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z5ID0gMDtcbiAgICB9XG5cbiAgICAvLyBmb3JjZXMgY2F1c2VkIGJ5IHRoZSBlZGdlcywgbW9kZWxsZWQgYXMgc3ByaW5nc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgZWRnZUxlbmd0aCA9XG4gICAgICAgICAgZWRnZS5vcHRpb25zLmxlbmd0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMub3B0aW9ucy5zcHJpbmdMZW5ndGhcbiAgICAgICAgICAgIDogZWRnZS5vcHRpb25zLmxlbmd0aDtcblxuICAgICAgICBkeCA9IGVkZ2UuZnJvbS54IC0gZWRnZS50by54O1xuICAgICAgICBkeSA9IGVkZ2UuZnJvbS55IC0gZWRnZS50by55O1xuICAgICAgICBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgICAgIGRpc3RhbmNlID0gZGlzdGFuY2UgPT09IDAgPyAwLjAxIDogZGlzdGFuY2U7XG5cbiAgICAgICAgLy8gdGhlIDEvZGlzdGFuY2UgaXMgc28gdGhlIGZ4IGFuZCBmeSBjYW4gYmUgY2FsY3VsYXRlZCB3aXRob3V0IHNpbmUgb3IgY29zaW5lLlxuICAgICAgICBzcHJpbmdGb3JjZSA9XG4gICAgICAgICAgKHRoaXMub3B0aW9ucy5zcHJpbmdDb25zdGFudCAqIChlZGdlTGVuZ3RoIC0gZGlzdGFuY2UpKSAvIGRpc3RhbmNlO1xuXG4gICAgICAgIGZ4ID0gZHggKiBzcHJpbmdGb3JjZTtcbiAgICAgICAgZnkgPSBkeSAqIHNwcmluZ0ZvcmNlO1xuXG4gICAgICAgIGlmIChlZGdlLnRvLmxldmVsICE9IGVkZ2UuZnJvbS5sZXZlbCkge1xuICAgICAgICAgIGlmIChmb3JjZXNbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS50b0lkXS5zcHJpbmdGeCAtPSBmeDtcbiAgICAgICAgICAgIGZvcmNlc1tlZGdlLnRvSWRdLnNwcmluZ0Z5IC09IGZ5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9yY2VzW2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS5mcm9tSWRdLnNwcmluZ0Z4ICs9IGZ4O1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UuZnJvbUlkXS5zcHJpbmdGeSArPSBmeTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZvcmNlc1tlZGdlLnRvSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvcmNlc1tlZGdlLnRvSWRdLnggLT0gZmFjdG9yICogZng7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS50b0lkXS55IC09IGZhY3RvciAqIGZ5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9yY2VzW2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS5mcm9tSWRdLnggKz0gZmFjdG9yICogZng7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS5mcm9tSWRdLnkgKz0gZmFjdG9yICogZnk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm9ybWFsaXplIHNwcmluZyBmb3JjZXNcbiAgICBzcHJpbmdGb3JjZSA9IDE7XG4gICAgbGV0IHNwcmluZ0Z4LCBzcHJpbmdGeTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIHNwcmluZ0Z4ID0gTWF0aC5taW4oXG4gICAgICAgIHNwcmluZ0ZvcmNlLFxuICAgICAgICBNYXRoLm1heCgtc3ByaW5nRm9yY2UsIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z4KVxuICAgICAgKTtcbiAgICAgIHNwcmluZ0Z5ID0gTWF0aC5taW4oXG4gICAgICAgIHNwcmluZ0ZvcmNlLFxuICAgICAgICBNYXRoLm1heCgtc3ByaW5nRm9yY2UsIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z5KVxuICAgICAgKTtcblxuICAgICAgZm9yY2VzW25vZGVJZF0ueCArPSBzcHJpbmdGeDtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnkgKz0gc3ByaW5nRnk7XG4gICAgfVxuXG4gICAgLy8gcmV0YWluIGVuZXJneSBiYWxhbmNlXG4gICAgbGV0IHRvdGFsRnggPSAwO1xuICAgIGxldCB0b3RhbEZ5ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIHRvdGFsRnggKz0gZm9yY2VzW25vZGVJZF0ueDtcbiAgICAgIHRvdGFsRnkgKz0gZm9yY2VzW25vZGVJZF0ueTtcbiAgICB9XG4gICAgY29uc3QgY29ycmVjdGlvbkZ4ID0gdG90YWxGeCAvIG5vZGVJbmRpY2VzLmxlbmd0aDtcbiAgICBjb25zdCBjb3JyZWN0aW9uRnkgPSB0b3RhbEZ5IC8gbm9kZUluZGljZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZUluZGljZXNbaV07XG4gICAgICBmb3JjZXNbbm9kZUlkXS54IC09IGNvcnJlY3Rpb25GeDtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnkgLT0gY29ycmVjdGlvbkZ5O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXI7XG4iLCAiLyoqXG4gKiBDZW50cmFsIEdyYXZpdHkgU29sdmVyXG4gKi9cbmNsYXNzIENlbnRyYWxHcmF2aXR5U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgZm9yY2VzIGZvciBlYWNoIG5vZGVcbiAgICovXG4gIHNvbHZlKCkge1xuICAgIGxldCBkeCwgZHksIGRpc3RhbmNlLCBub2RlO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIG5vZGUgPSBub2Rlc1tub2RlSWRdO1xuICAgICAgZHggPSAtbm9kZS54O1xuICAgICAgZHkgPSAtbm9kZS55O1xuICAgICAgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICB0aGlzLl9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgZm9yY2VzLCBub2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgYmFzZWQgb24gdGhlIGRpc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeVxuICAgKiBAcGFyYW0ge09iamVjdDxOb2RlLmlkLCB2aXMuTm9kZT59IGZvcmNlc1xuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgZm9yY2VzLCBub2RlKSB7XG4gICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgIGRpc3RhbmNlID09PSAwID8gMCA6IHRoaXMub3B0aW9ucy5jZW50cmFsR3Jhdml0eSAvIGRpc3RhbmNlO1xuICAgIGZvcmNlc1tub2RlLmlkXS54ID0gZHggKiBncmF2aXR5Rm9yY2U7XG4gICAgZm9yY2VzW25vZGUuaWRdLnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDZW50cmFsR3Jhdml0eVNvbHZlcjtcbiIsICJpbXBvcnQgQmFybmVzSHV0U29sdmVyIGZyb20gXCIuL0Jhcm5lc0h1dFNvbHZlclwiO1xuaW1wb3J0IHsgQWxlYSB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBAYXVnbWVudHMgQmFybmVzSHV0U29sdmVyXG4gKi9cbmNsYXNzIEZvcmNlQXRsYXMyQmFzZWRSZXB1bHNpb25Tb2x2ZXIgZXh0ZW5kcyBCYXJuZXNIdXRTb2x2ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHt7cGh5c2ljc05vZGVJbmRpY2VzOiBBcnJheSwgcGh5c2ljc0VkZ2VJbmRpY2VzOiBBcnJheSwgZm9yY2VzOiB7fSwgdmVsb2NpdGllczoge319fSBwaHlzaWNzQm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpIHtcbiAgICBzdXBlcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9ybmcgPSBBbGVhKFwiRk9SQ0UgQVRMQVMgMiBCQVNFRCBSRVBVTFNJT04gU09MVkVSXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIGJhc2VkIG9uIHRoZSBkaXN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeFxuICAgKiBAcGFyYW0ge251bWJlcn0gZHlcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgbm9kZSwgcGFyZW50QnJhbmNoKSB7XG4gICAgaWYgKGRpc3RhbmNlID09PSAwKSB7XG4gICAgICBkaXN0YW5jZSA9IDAuMSAqIHRoaXMuX3JuZygpO1xuICAgICAgZHggPSBkaXN0YW5jZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yIDwgMSAmJiBub2RlLnNoYXBlLnJhZGl1cykge1xuICAgICAgZGlzdGFuY2UgPSBNYXRoLm1heChcbiAgICAgICAgMC4xICsgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yICogbm9kZS5zaGFwZS5yYWRpdXMsXG4gICAgICAgIGRpc3RhbmNlIC0gbm9kZS5zaGFwZS5yYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVncmVlID0gbm9kZS5lZGdlcy5sZW5ndGggKyAxO1xuICAgIC8vIHRoZSBkaXZpZGluZyBieSB0aGUgZGlzdGFuY2UgY3ViZWQgaW5zdGVhZCBvZiBzcXVhcmVkIGFsbG93cyB1cyB0byBnZXQgdGhlIGZ4IGFuZCBmeSBjb21wb25lbnRzIHdpdGhvdXQgc2luZXMgYW5kIGNvc2luZXNcbiAgICAvLyBpdCBpcyBzaG9ydGhhbmQgZm9yIGdyYXZpdHlmb3JjZSB3aXRoIGRpc3RhbmNlIHNxdWFyZWQgYW5kIGZ4ID0gZHgvZGlzdGFuY2UgKiBncmF2aXR5Rm9yY2VcbiAgICBjb25zdCBncmF2aXR5Rm9yY2UgPVxuICAgICAgKHRoaXMub3B0aW9ucy5ncmF2aXRhdGlvbmFsQ29uc3RhbnQgKlxuICAgICAgICBwYXJlbnRCcmFuY2gubWFzcyAqXG4gICAgICAgIG5vZGUub3B0aW9ucy5tYXNzICpcbiAgICAgICAgZGVncmVlKSAvXG4gICAgICBNYXRoLnBvdyhkaXN0YW5jZSwgMik7XG4gICAgY29uc3QgZnggPSBkeCAqIGdyYXZpdHlGb3JjZTtcbiAgICBjb25zdCBmeSA9IGR5ICogZ3Jhdml0eUZvcmNlO1xuXG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZS5pZF0ueCArPSBmeDtcbiAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlLmlkXS55ICs9IGZ5O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvcmNlQXRsYXMyQmFzZWRSZXB1bHNpb25Tb2x2ZXI7XG4iLCAiaW1wb3J0IENlbnRyYWxHcmF2aXR5U29sdmVyIGZyb20gXCIuL0NlbnRyYWxHcmF2aXR5U29sdmVyXCI7XG5cbi8qKlxuICogQGF1Z21lbnRzIENlbnRyYWxHcmF2aXR5U29sdmVyXG4gKi9cbmNsYXNzIEZvcmNlQXRsYXMyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlciBleHRlbmRzIENlbnRyYWxHcmF2aXR5U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIGJhc2VkIG9uIHRoZSBkaXN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeFxuICAgKiBAcGFyYW0ge251bWJlcn0gZHlcbiAgICogQHBhcmFtIHtPYmplY3Q8Tm9kZS5pZCwgTm9kZT59IGZvcmNlc1xuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgZm9yY2VzLCBub2RlKSB7XG4gICAgaWYgKGRpc3RhbmNlID4gMCkge1xuICAgICAgY29uc3QgZGVncmVlID0gbm9kZS5lZGdlcy5sZW5ndGggKyAxO1xuICAgICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgICAgdGhpcy5vcHRpb25zLmNlbnRyYWxHcmF2aXR5ICogZGVncmVlICogbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgICBmb3JjZXNbbm9kZS5pZF0ueCA9IGR4ICogZ3Jhdml0eUZvcmNlO1xuICAgICAgZm9yY2VzW25vZGUuaWRdLnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9yY2VBdGxhczJCYXNlZENlbnRyYWxHcmF2aXR5U29sdmVyO1xuIiwgImltcG9ydCBCYXJuZXNIdXRTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0Jhcm5lc0h1dFNvbHZlclwiO1xuaW1wb3J0IFJlcHVsc2lvbiBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvUmVwdWxzaW9uU29sdmVyXCI7XG5pbXBvcnQgSGllcmFyY2hpY2FsUmVwdWxzaW9uIGZyb20gXCIuL2NvbXBvbmVudHMvcGh5c2ljcy9IaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXJcIjtcbmltcG9ydCBTcHJpbmdTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL1NwcmluZ1NvbHZlclwiO1xuaW1wb3J0IEhpZXJhcmNoaWNhbFNwcmluZ1NvbHZlciBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyXCI7XG5pbXBvcnQgQ2VudHJhbEdyYXZpdHlTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0NlbnRyYWxHcmF2aXR5U29sdmVyXCI7XG5pbXBvcnQgRm9yY2VBdGxhczJCYXNlZFJlcHVsc2lvblNvbHZlciBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvRkEyQmFzZWRSZXB1bHNpb25Tb2x2ZXJcIjtcbmltcG9ydCBGb3JjZUF0bGFzMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0ZBMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXJcIjtcbmltcG9ydCB7XG4gIEhTVlRvSGV4LFxuICBtZXJnZU9wdGlvbnMsXG4gIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsXG59IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IEVuZFBvaW50cyB9IGZyb20gXCIuL2NvbXBvbmVudHMvZWRnZXNcIjsgLy8gZm9yIGRlYnVnZ2luZyB3aXRoIF9kcmF3Rm9yY2VzKClcblxuLyoqXG4gKiBUaGUgcGh5c2ljcyBlbmdpbmVcbiAqL1xuY2xhc3MgUGh5c2ljc0VuZ2luZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHtcbiAgICAgIHBoeXNpY3NOb2RlSW5kaWNlczogW10sXG4gICAgICBwaHlzaWNzRWRnZUluZGljZXM6IFtdLFxuICAgICAgZm9yY2VzOiB7fSxcbiAgICAgIHZlbG9jaXRpZXM6IHt9LFxuICAgIH07XG5cbiAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNpbXVsYXRpb25JbnRlcnZhbCA9IDEwMDAgLyA2MDtcbiAgICB0aGlzLnJlcXVpcmVzVGltZW91dCA9IHRydWU7XG4gICAgdGhpcy5wcmV2aW91c1N0YXRlcyA9IHt9O1xuICAgIHRoaXMucmVmZXJlbmNlU3RhdGUgPSB7fTtcbiAgICB0aGlzLmZyZWV6ZUNhY2hlID0ge307XG4gICAgdGhpcy5yZW5kZXJUaW1lciA9IHVuZGVmaW5lZDtcblxuICAgIC8vIHBhcmFtZXRlcnMgZm9yIHRoZSBhZGFwdGl2ZSB0aW1lc3RlcFxuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcCA9IGZhbHNlO1xuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcEVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmFkYXB0aXZlQ291bnRlciA9IDA7XG4gICAgdGhpcy5hZGFwdGl2ZUludGVydmFsID0gMztcblxuICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RhcnRlZFN0YWJpbGl6YXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zID0gMDtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7IC8vIHdpbGwgYmUgc2V0IHRvIHRydWUgaWYgdGhlIHN0YWJpbGl6ZVxuXG4gICAgLy8gZGVmYXVsdCBvcHRpb25zXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBiYXJuZXNIdXQ6IHtcbiAgICAgICAgdGhldGE6IDAuNSxcbiAgICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiAtMjAwMCxcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMyxcbiAgICAgICAgc3ByaW5nTGVuZ3RoOiA5NSxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDQsXG4gICAgICAgIGRhbXBpbmc6IDAuMDksXG4gICAgICAgIGF2b2lkT3ZlcmxhcDogMCxcbiAgICAgIH0sXG4gICAgICBmb3JjZUF0bGFzMkJhc2VkOiB7XG4gICAgICAgIHRoZXRhOiAwLjUsXG4gICAgICAgIGdyYXZpdGF0aW9uYWxDb25zdGFudDogLTUwLFxuICAgICAgICBjZW50cmFsR3Jhdml0eTogMC4wMSxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDgsXG4gICAgICAgIHNwcmluZ0xlbmd0aDogMTAwLFxuICAgICAgICBkYW1waW5nOiAwLjQsXG4gICAgICAgIGF2b2lkT3ZlcmxhcDogMCxcbiAgICAgIH0sXG4gICAgICByZXB1bHNpb246IHtcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMixcbiAgICAgICAgc3ByaW5nTGVuZ3RoOiAyMDAsXG4gICAgICAgIHNwcmluZ0NvbnN0YW50OiAwLjA1LFxuICAgICAgICBub2RlRGlzdGFuY2U6IDEwMCxcbiAgICAgICAgZGFtcGluZzogMC4wOSxcbiAgICAgICAgYXZvaWRPdmVybGFwOiAwLFxuICAgICAgfSxcbiAgICAgIGhpZXJhcmNoaWNhbFJlcHVsc2lvbjoge1xuICAgICAgICBjZW50cmFsR3Jhdml0eTogMC4wLFxuICAgICAgICBzcHJpbmdMZW5ndGg6IDEwMCxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDEsXG4gICAgICAgIG5vZGVEaXN0YW5jZTogMTIwLFxuICAgICAgICBkYW1waW5nOiAwLjA5LFxuICAgICAgfSxcbiAgICAgIG1heFZlbG9jaXR5OiA1MCxcbiAgICAgIG1pblZlbG9jaXR5OiAwLjc1LCAvLyBweC9zXG4gICAgICBzb2x2ZXI6IFwiYmFybmVzSHV0XCIsXG4gICAgICBzdGFiaWxpemF0aW9uOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGl0ZXJhdGlvbnM6IDEwMDAsIC8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbiB0byBzdGFiaWxpemVcbiAgICAgICAgdXBkYXRlSW50ZXJ2YWw6IDUwLFxuICAgICAgICBvbmx5RHluYW1pY0VkZ2VzOiBmYWxzZSxcbiAgICAgICAgZml0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHRpbWVzdGVwOiAwLjUsXG4gICAgICBhZGFwdGl2ZVRpbWVzdGVwOiB0cnVlLFxuICAgICAgd2luZDogeyB4OiAwLCB5OiAwIH0sXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG4gICAgdGhpcy50aW1lc3RlcCA9IDAuNTtcbiAgICB0aGlzLmxheW91dEZhaWxlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImluaXRQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuaW5pdFBoeXNpY3MoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9sYXlvdXRGYWlsZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXRGYWlsZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwicmVzZXRQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTtcbiAgICAgIHRoaXMucmVhZHkgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRpc2FibGVQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInJlc3RvcmVQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgICAgaWYgKHRoaXMucmVhZHkgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFNpbXVsYXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInN0YXJ0U2ltdWxhdGlvblwiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5yZWFkeSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwic3RvcFNpbXVsYXRpb25cIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKGZhbHNlKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZigpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFDaGFuZ2VkXCIsICgpID0+IHtcbiAgICAgIC8vIE5vZGVzIGFuZC9vciBlZGdlcyBoYXZlIGJlZW4gYWRkZWQgb3IgcmVtb3ZlZCwgdXBkYXRlIHNob3J0Y3V0IGxpc3RzLlxuICAgICAgdGhpcy51cGRhdGVQaHlzaWNzRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgLy8gZGVidWc6IHNob3cgZm9yY2VzXG4gICAgLy8gdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJhZnRlckRyYXdpbmdcIiwgKGN0eCkgPT4ge3RoaXMuX2RyYXdGb3JjZXMoY3R4KTt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIHBoeXNpY3Mgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5waHlzaWNzRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhcnRTaW11bGF0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZChbXCJzdGFiaWxpemF0aW9uXCJdLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zLCBcInN0YWJpbGl6YXRpb25cIik7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aW5kID0gdGhpcy5vcHRpb25zLndpbmQ7XG4gICAgICAgIGlmICh3aW5kKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kLnggIT09IFwibnVtYmVyXCIgfHwgTnVtYmVyLmlzTmFOKHdpbmQueCkpIHtcbiAgICAgICAgICAgIHdpbmQueCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZC55ICE9PSBcIm51bWJlclwiIHx8IE51bWJlci5pc05hTih3aW5kLnkpKSB7XG4gICAgICAgICAgICB3aW5kLnkgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCB0aGUgdGltZXN0ZXBcbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IHRoaXMub3B0aW9ucy50aW1lc3RlcDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICAvKipcbiAgICogY29uZmlndXJlIHRoZSBlbmdpbmUuXG4gICAqL1xuICBpbml0KCkge1xuICAgIGxldCBvcHRpb25zO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc29sdmVyID09PSBcImZvcmNlQXRsYXMyQmFzZWRcIikge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5mb3JjZUF0bGFzMkJhc2VkO1xuICAgICAgdGhpcy5ub2Rlc1NvbHZlciA9IG5ldyBGb3JjZUF0bGFzMkJhc2VkUmVwdWxzaW9uU29sdmVyKFxuICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgIHRoaXMucGh5c2ljc0JvZHksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgICB0aGlzLmVkZ2VzU29sdmVyID0gbmV3IFNwcmluZ1NvbHZlcih0aGlzLmJvZHksIHRoaXMucGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICAgICAgdGhpcy5ncmF2aXR5U29sdmVyID0gbmV3IEZvcmNlQXRsYXMyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnNvbHZlciA9PT0gXCJyZXB1bHNpb25cIikge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5yZXB1bHNpb247XG4gICAgICB0aGlzLm5vZGVzU29sdmVyID0gbmV3IFJlcHVsc2lvbih0aGlzLmJvZHksIHRoaXMucGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICAgICAgdGhpcy5lZGdlc1NvbHZlciA9IG5ldyBTcHJpbmdTb2x2ZXIodGhpcy5ib2R5LCB0aGlzLnBoeXNpY3NCb2R5LCBvcHRpb25zKTtcbiAgICAgIHRoaXMuZ3Jhdml0eVNvbHZlciA9IG5ldyBDZW50cmFsR3Jhdml0eVNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnNvbHZlciA9PT0gXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIikge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWxSZXB1bHNpb247XG4gICAgICB0aGlzLm5vZGVzU29sdmVyID0gbmV3IEhpZXJhcmNoaWNhbFJlcHVsc2lvbihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgICAgdGhpcy5lZGdlc1NvbHZlciA9IG5ldyBIaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuZ3Jhdml0eVNvbHZlciA9IG5ldyBDZW50cmFsR3Jhdml0eVNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBiYXJuZXNIdXRcbiAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuYmFybmVzSHV0O1xuICAgICAgdGhpcy5ub2Rlc1NvbHZlciA9IG5ldyBCYXJuZXNIdXRTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuZWRnZXNTb2x2ZXIgPSBuZXcgU3ByaW5nU29sdmVyKHRoaXMuYm9keSwgdGhpcy5waHlzaWNzQm9keSwgb3B0aW9ucyk7XG4gICAgICB0aGlzLmdyYXZpdHlTb2x2ZXIgPSBuZXcgQ2VudHJhbEdyYXZpdHlTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLm1vZGVsT3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogaW5pdGlhbGl6ZSB0aGUgZW5naW5lXG4gICAqL1xuICBpbml0UGh5c2ljcygpIHtcbiAgICBpZiAodGhpcy5waHlzaWNzRW5hYmxlZCA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zdGFiaWxpemUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImZpdFwiLCB7fSwgdGhpcy5sYXlvdXRGYWlsZWQpOyAvLyBpZiB0aGUgbGF5b3V0IGZhaWxlZCwgd2UgdXNlIHRoZSBhcHByb3hpbWF0aW9uIGZvciB0aGUgem9vbVxuICAgICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJmaXRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBzaW11bGF0aW9uXG4gICAqL1xuICBzdGFydFNpbXVsYXRpb24oKSB7XG4gICAgaWYgKHRoaXMucGh5c2ljc0VuYWJsZWQgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuXG4gICAgICAvLyB3aGVuIHZpc2libGUsIGFkYXB0aXZpdHkgaXMgZGlzYWJsZWQuXG4gICAgICB0aGlzLmFkYXB0aXZlVGltZXN0ZXAgPSBmYWxzZTtcblxuICAgICAgLy8gdGhpcyBzZXRzIHRoZSB3aWR0aCBvZiBhbGwgbm9kZXMgaW5pdGlhbGx5IHdoaWNoIGNvdWxkIGJlIHJlcXVpcmVkIGZvciB0aGUgYXZvaWRPdmVybGFwXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2l6ZU5vZGVzXCIpO1xuICAgICAgaWYgKHRoaXMudmlld0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52aWV3RnVuY3Rpb24gPSB0aGlzLnNpbXVsYXRpb25TdGVwLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfc3RhcnRSZW5kZXJpbmdcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRoZSBzaW11bGF0aW9uLCBmb3JjZSBzdGFiaWxpemF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlbWl0PXRydWVdXG4gICAqL1xuICBzdG9wU2ltdWxhdGlvbihlbWl0ID0gdHJ1ZSkge1xuICAgIHRoaXMuc3RhYmlsaXplZCA9IHRydWU7XG4gICAgaWYgKGVtaXQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2VtaXRTdGFiaWxpemVkKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZpZXdGdW5jdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIHRoaXMudmlld0Z1bmN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGVtaXQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdG9wUmVuZGVyaW5nXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmlld0Z1bmN0aW9uIGluc2VydHMgdGhpcyBzdGVwIGludG8gZWFjaCByZW5kZXIgbG9vcC4gSXQgY2FsbHMgdGhlIHBoeXNpY3MgdGljayBhbmQgaGFuZGxlcyB0aGUgY2xlYW51cCBhdCBzdGFiaWxpemVkLlxuICAgKlxuICAgKi9cbiAgc2ltdWxhdGlvblN0ZXAoKSB7XG4gICAgLy8gY2hlY2sgaWYgdGhlIHBoeXNpY3MgaGF2ZSBzZXR0bGVkXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnBoeXNpY3NUaWNrKCk7XG4gICAgY29uc3QgcGh5c2ljc1RpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuXG4gICAgLy8gcnVuIGRvdWJsZSBzcGVlZCBpZiBpdCBpcyBhIGxpdHRsZSBncmFwaFxuICAgIGlmIChcbiAgICAgIChwaHlzaWNzVGltZSA8IDAuNCAqIHRoaXMuc2ltdWxhdGlvbkludGVydmFsIHx8XG4gICAgICAgIHRoaXMucnVuRG91YmxlU3BlZWQgPT09IHRydWUpICYmXG4gICAgICB0aGlzLnN0YWJpbGl6ZWQgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICB0aGlzLnBoeXNpY3NUaWNrKCk7XG5cbiAgICAgIC8vIHRoaXMgbWFrZXMgc3VyZSB0aGVyZSBpcyBubyBqaXR0ZXIuIFRoZSBkZWNpc2lvbiBpcyB0YWtlbiBvbmNlIHRvIHJ1biBpdCBhdCBkb3VibGUgc3BlZWQuXG4gICAgICB0aGlzLnJ1bkRvdWJsZVNwZWVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFiaWxpemVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRyaWdnZXIgdGhlIHN0YWJpbGl6ZWQgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYW1vdW50T2ZJdGVyYXRpb25zPXRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnNdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZW1pdFN0YWJpbGl6ZWQoYW1vdW50T2ZJdGVyYXRpb25zID0gdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMgPiAxIHx8XG4gICAgICB0aGlzLnN0YXJ0ZWRTdGFiaWxpemF0aW9uID09PSB0cnVlXG4gICAgKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YWJpbGl6ZWRcIiwge1xuICAgICAgICAgIGl0ZXJhdGlvbnM6IGFtb3VudE9mSXRlcmF0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3RhcnRlZFN0YWJpbGl6YXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucyA9IDA7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgZm9yIG9uZSBwaHlzaWNzIGl0ZXJhdGlvbiBhbmQgbW92ZSB0aGUgbm9kZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwaHlzaWNzU3RlcCgpIHtcbiAgICB0aGlzLmdyYXZpdHlTb2x2ZXIuc29sdmUoKTtcbiAgICB0aGlzLm5vZGVzU29sdmVyLnNvbHZlKCk7XG4gICAgdGhpcy5lZGdlc1NvbHZlci5zb2x2ZSgpO1xuICAgIHRoaXMubW92ZU5vZGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBkeW5hbWljIGFkanVzdG1lbnRzIHRvIHRoZSB0aW1lc3RlcCwgYmFzZWQgb24gY3VycmVudCBzdGF0ZS5cbiAgICpcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBwaHlzaWNzVGljaygpLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRqdXN0VGltZVN0ZXAoKSB7XG4gICAgY29uc3QgZmFjdG9yID0gMS4yOyAvLyBGYWN0b3IgZm9yIGluY3JlYXNpbmcgdGhlIHRpbWVzdGVwIG9uIHN1Y2Nlc3MuXG5cbiAgICAvLyB3ZSBjb21wYXJlIHRoZSB0d28gc3RlcHMuIGlmIGl0IGlzIGFjY2VwdGFibGUgd2UgZG91YmxlIHRoZSBzdGVwLlxuICAgIGlmICh0aGlzLl9ldmFsdWF0ZVN0ZXBRdWFsaXR5KCkgPT09IHRydWUpIHtcbiAgICAgIHRoaXMudGltZXN0ZXAgPSBmYWN0b3IgKiB0aGlzLnRpbWVzdGVwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBub3QsIHdlIGRlY3JlYXNlIHRoZSBzdGVwIHRvIGEgbWluaW11bSBvZiB0aGUgb3B0aW9ucyB0aW1lc3RlcC5cbiAgICAgIC8vIGlmIHRoZSBkZWNyZWFzZWQgdGltZXN0ZXAgaXMgc21hbGxlciB0aGFuIHRoZSBvcHRpb25zIHN0ZXAsIHdlIGRvIG5vdCByZXNldCB0aGUgY291bnRlclxuICAgICAgLy8gd2UgYXNzdW1lIHRoYXQgdGhlIG9wdGlvbnMgdGltZXN0ZXAgaXMgc3RhYmxlIGVub3VnaC5cbiAgICAgIGlmICh0aGlzLnRpbWVzdGVwIC8gZmFjdG9yIDwgdGhpcy5vcHRpb25zLnRpbWVzdGVwKSB7XG4gICAgICAgIHRoaXMudGltZXN0ZXAgPSB0aGlzLm9wdGlvbnMudGltZXN0ZXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiB0aGUgdGltZXN0ZXAgd2FzIGxhcmdlciB0aGFuIDIgdGltZXMgdGhlIG9wdGlvbiBvbmUgd2UgY2hlY2sgdGhlIGFkYXB0aXZpdHkgYWdhaW4gdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgbGFyZ2UgaW5zdGFiaWxpdGllcyBkbyBub3QgZm9ybS5cbiAgICAgICAgdGhpcy5hZGFwdGl2ZUNvdW50ZXIgPSAtMTsgLy8gY2hlY2sgYWdhaW4gbmV4dCBpdGVyYXRpb25cbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IE1hdGgubWF4KHRoaXMub3B0aW9ucy50aW1lc3RlcCwgdGhpcy50aW1lc3RlcCAvIGZhY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgc2luZ2xlIHNpbXVsYXRpb24gc3RlcCAob3IgJ3RpY2snKSBpbiB0aGUgcGh5c2ljcyBzaW11bGF0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwaHlzaWNzVGljaygpIHtcbiAgICB0aGlzLl9zdGFydFN0YWJpbGl6aW5nKCk7IC8vIHRoaXMgZW5zdXJlcyB0aGF0IHRoZXJlIGlzIG5vIHN0YXJ0IGV2ZW50IHdoZW4gdGhlIG5ldHdvcmsgaXMgYWxyZWFkeSBzdGFibGUuXG4gICAgaWYgKHRoaXMuc3RhYmlsaXplZCA9PT0gdHJ1ZSkgcmV0dXJuO1xuXG4gICAgLy8gYWRhcHRpdml0eSBtZWFucyB0aGUgdGltZXN0ZXAgYWRhcHRzIHRvIHRoZSBzaXR1YXRpb24sIG9ubHkgYXBwbGljYWJsZSBmb3Igc3RhYmlsaXphdGlvblxuICAgIGlmIChcbiAgICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcCA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5hZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgLy8gdGltZXN0ZXAgcmVtYWlucyBzdGFibGUgZm9yIFwiaW50ZXJ2YWxcIiBpdGVyYXRpb25zLlxuICAgICAgY29uc3QgZG9BZGFwdGl2ZSA9IHRoaXMuYWRhcHRpdmVDb3VudGVyICUgdGhpcy5hZGFwdGl2ZUludGVydmFsID09PSAwO1xuXG4gICAgICBpZiAoZG9BZGFwdGl2ZSkge1xuICAgICAgICAvLyBmaXJzdCB0aGUgYmlnIHN0ZXAgYW5kIHJldmVydC5cbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IDIgKiB0aGlzLnRpbWVzdGVwO1xuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7XG4gICAgICAgIHRoaXMucmV2ZXJ0KCk7IC8vIHNhdmVzIHRoZSByZWZlcmVuY2Ugc3RhdGVcblxuICAgICAgICAvLyBub3cgdGhlIG5vcm1hbCBzdGVwLiBTaW5jZSB0aGlzIGlzIHRoZSBsYXN0IHN0ZXAsIGl0IGlzIHRoZSBtb3JlIHN0YWJsZSBvbmUgYW5kIHdlIHdpbGwgdGFrZSB0aGlzLlxuICAgICAgICB0aGlzLnRpbWVzdGVwID0gMC41ICogdGhpcy50aW1lc3RlcDtcblxuICAgICAgICAvLyBzaW5jZSBpdCdzIGhhbGYgdGhlIHN0ZXAsIHdlIGRvIGl0IHR3aWNlLlxuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7XG4gICAgICAgIHRoaXMucGh5c2ljc1N0ZXAoKTtcblxuICAgICAgICB0aGlzLmFkanVzdFRpbWVTdGVwKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7IC8vIG5vcm1hbCBzdGVwLCBrZWVwaW5nIHRpbWVzdGVwIGNvbnN0YW50XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWRhcHRpdmVDb3VudGVyICs9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNhc2UgZm9yIHRoZSBzdGF0aWMgdGltZXN0ZXAsIHdlIHJlc2V0IGl0IHRvIHRoZSBvbmUgaW4gb3B0aW9ucyBhbmQgdGFrZSBhIG5vcm1hbCBzdGVwLlxuICAgICAgdGhpcy50aW1lc3RlcCA9IHRoaXMub3B0aW9ucy50aW1lc3RlcDtcbiAgICAgIHRoaXMucGh5c2ljc1N0ZXAoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFiaWxpemVkID09PSB0cnVlKSB0aGlzLnJldmVydCgpO1xuICAgIHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMrKztcbiAgfVxuXG4gIC8qKlxuICAgKiBOb2RlcyBhbmQgZWRnZXMgY2FuIGhhdmUgdGhlIHBoeXNpY3MgdG9nZ2xlcyBvbiBvciBvZmYuIEEgY29sbGVjdGlvbiBvZiBpbmRpY2VzIGlzIGNyZWF0ZWQgaGVyZSBzbyB3ZSBjYW4gc2tpcCB0aGUgY2hlY2sgYWxsIHRoZSB0aW1lLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlUGh5c2ljc0RhdGEoKSB7XG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXMgPSB7fTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcyA9IFtdO1xuICAgIHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc0VkZ2VJbmRpY2VzID0gW107XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG5cbiAgICAvLyBnZXQgbm9kZSBpbmRpY2VzIGZvciBwaHlzaWNzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gbm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgaWYgKG5vZGVzW25vZGVJZF0ub3B0aW9ucy5waHlzaWNzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXMucHVzaChub2Rlc1tub2RlSWRdLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdldCBlZGdlIGluZGljZXMgZm9yIHBoeXNpY3NcbiAgICBmb3IgKGNvbnN0IGVkZ2VJZCBpbiBlZGdlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZGdlcywgZWRnZUlkKSkge1xuICAgICAgICBpZiAoZWRnZXNbZWRnZUlkXS5vcHRpb25zLnBoeXNpY3MgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcy5wdXNoKGVkZ2VzW2VkZ2VJZF0uaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSB2ZWxvY2l0eSBhbmQgdGhlIGZvcmNlcyB2ZWN0b3JcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlc1tpXTtcbiAgICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGVJZF0gPSB7IHg6IDAsIHk6IDAgfTtcblxuICAgICAgLy8gZm9yY2VzIGNhbiBiZSByZXNldCBiZWNhdXNlIHRoZXkgYXJlIHJlY2FsY3VsYXRlZC4gVmVsb2NpdGllcyBoYXZlIHRvIHBlcnNpc3QuXG4gICAgICBpZiAodGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbbm9kZUlkXSA9IHsgeDogMCwgeTogMCB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNsZWFuIGRlbGV0ZWQgbm9kZXMgZnJvbSB0aGUgdmVsb2NpdHkgdmVjdG9yXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzKSB7XG4gICAgICBpZiAobm9kZXNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbbm9kZUlkXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV2ZXJ0IHRoZSBzaW11bGF0aW9uIG9uZSBzdGVwLiBUaGlzIGlzIGRvbmUgc28gYWZ0ZXIgc3RhYmlsaXphdGlvbiwgZXZlcnkgbmV3IHN0YXJ0IG9mIHRoZSBzaW11bGF0aW9uIHdpbGwgYWxzbyBzYXkgc3RhYmlsaXplZC5cbiAgICovXG4gIHJldmVydCgpIHtcbiAgICBjb25zdCBub2RlSWRzID0gT2JqZWN0LmtleXModGhpcy5wcmV2aW91c1N0YXRlcyk7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgdmVsb2NpdGllcyA9IHRoaXMucGh5c2ljc0JvZHkudmVsb2NpdGllcztcbiAgICB0aGlzLnJlZmVyZW5jZVN0YXRlID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGVJZHNbaV07XG4gICAgICBpZiAobm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChub2Rlc1tub2RlSWRdLm9wdGlvbnMucGh5c2ljcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucmVmZXJlbmNlU3RhdGVbbm9kZUlkXSA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uczogeyB4OiBub2Rlc1tub2RlSWRdLngsIHk6IG5vZGVzW25vZGVJZF0ueSB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgdmVsb2NpdGllc1tub2RlSWRdLnggPSB0aGlzLnByZXZpb3VzU3RhdGVzW25vZGVJZF0udng7XG4gICAgICAgICAgdmVsb2NpdGllc1tub2RlSWRdLnkgPSB0aGlzLnByZXZpb3VzU3RhdGVzW25vZGVJZF0udnk7XG4gICAgICAgICAgbm9kZXNbbm9kZUlkXS54ID0gdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdLng7XG4gICAgICAgICAgbm9kZXNbbm9kZUlkXS55ID0gdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdLnk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnByZXZpb3VzU3RhdGVzW25vZGVJZF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgY29tcGFyZXMgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byB0aGUgY3VycmVudCBzdGF0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmFsdWF0ZVN0ZXBRdWFsaXR5KCkge1xuICAgIGxldCBkeCwgZHksIGRwb3M7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2VTdGF0ZTtcbiAgICBjb25zdCBwb3NUaHJlc2hvbGQgPSAwLjM7XG5cbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLnJlZmVyZW5jZVN0YXRlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnJlZmVyZW5jZVN0YXRlLCBub2RlSWQpICYmXG4gICAgICAgIG5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGR4ID0gbm9kZXNbbm9kZUlkXS54IC0gcmVmZXJlbmNlW25vZGVJZF0ucG9zaXRpb25zLng7XG4gICAgICAgIGR5ID0gbm9kZXNbbm9kZUlkXS55IC0gcmVmZXJlbmNlW25vZGVJZF0ucG9zaXRpb25zLnk7XG5cbiAgICAgICAgZHBvcyA9IE1hdGguc3FydChNYXRoLnBvdyhkeCwgMikgKyBNYXRoLnBvdyhkeSwgMikpO1xuXG4gICAgICAgIGlmIChkcG9zID4gcG9zVGhyZXNob2xkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIG5vZGVzIG9uZSB0aW1lc3RlcCBhbmQgY2hlY2sgaWYgdGhleSBhcmUgc3RhYmlsaXplZFxuICAgKi9cbiAgbW92ZU5vZGVzKCkge1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgbGV0IG1heE5vZGVWZWxvY2l0eSA9IDA7XG4gICAgbGV0IGF2ZXJhZ2VOb2RlVmVsb2NpdHkgPSAwO1xuXG4gICAgLy8gdGhlIHZlbG9jaXR5IHRocmVzaG9sZCAoZW5lcmd5IGluIHRoZSBzeXN0ZW0pIGZvciB0aGUgYWRhcHRpdml0eSB0b2dnbGVcbiAgICBjb25zdCB2ZWxvY2l0eUFkYXB0aXZlVGhyZXNob2xkID0gNTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGVJbmRpY2VzW2ldO1xuICAgICAgY29uc3Qgbm9kZVZlbG9jaXR5ID0gdGhpcy5fcGVyZm9ybVN0ZXAobm9kZUlkKTtcbiAgICAgIC8vIHN0YWJpbGl6ZWQgaXMgdHJ1ZSBpZiBzdGFiaWxpemVkIGlzIHRydWUgYW5kIHZlbG9jaXR5IGlzIHNtYWxsZXIgdGhhbiB2bWluIC0tPiBhbGwgbm9kZXMgbXVzdCBiZSBzdGFiaWxpemVkXG4gICAgICBtYXhOb2RlVmVsb2NpdHkgPSBNYXRoLm1heChtYXhOb2RlVmVsb2NpdHksIG5vZGVWZWxvY2l0eSk7XG4gICAgICBhdmVyYWdlTm9kZVZlbG9jaXR5ICs9IG5vZGVWZWxvY2l0eTtcbiAgICB9XG5cbiAgICAvLyBldmFsdWF0aW5nIHRoZSBzdGFiaWxpemVkIGFuZCBhZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCBjb25kaXRpb25zXG4gICAgdGhpcy5hZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCA9XG4gICAgICBhdmVyYWdlTm9kZVZlbG9jaXR5IC8gbm9kZUluZGljZXMubGVuZ3RoIDwgdmVsb2NpdHlBZGFwdGl2ZVRocmVzaG9sZDtcbiAgICB0aGlzLnN0YWJpbGl6ZWQgPSBtYXhOb2RlVmVsb2NpdHkgPCB0aGlzLm9wdGlvbnMubWluVmVsb2NpdHk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIG5ldyB2ZWxvY2l0eSBmb3IgYSBjb29yZGluYXRlIGRpcmVjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdiAgdmVsb2NpdHkgZm9yIGN1cnJlbnQgY29vcmRpbmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gZiAgcmVndWxhciBmb3JjZSBmb3IgY3VycmVudCBjb29yZGluYXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtICBtYXNzIG9mIGN1cnJlbnQgbm9kZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBuZXcgdmVsb2NpdHkgZm9yIGN1cnJlbnQgY29vcmRpbmF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FsY3VsYXRlQ29tcG9uZW50VmVsb2NpdHkodiwgZiwgbSkge1xuICAgIGNvbnN0IGRmID0gdGhpcy5tb2RlbE9wdGlvbnMuZGFtcGluZyAqIHY7IC8vIGRhbXBpbmcgZm9yY2VcbiAgICBjb25zdCBhID0gKGYgLSBkZikgLyBtOyAvLyBhY2NlbGVyYXRpb25cblxuICAgIHYgKz0gYSAqIHRoaXMudGltZXN0ZXA7XG5cbiAgICAvLyBQdXQgYSBsaW1pdCBvbiB0aGUgdmVsb2NpdGllcyBpZiBpdCBpcyByZWFsbHkgaGlnaFxuICAgIGNvbnN0IG1heFYgPSB0aGlzLm9wdGlvbnMubWF4VmVsb2NpdHkgfHwgMWU5O1xuICAgIGlmIChNYXRoLmFicyh2KSA+IG1heFYpIHtcbiAgICAgIHYgPSB2ID4gMCA/IG1heFYgOiAtbWF4VjtcbiAgICB9XG5cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBhY3R1YWwgc3RlcFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgbmV3IHZlbG9jaXR5IG9mIGdpdmVuIG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtU3RlcChub2RlSWQpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgY29uc3QgZm9yY2UgPSB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlSWRdO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy53aW5kKSB7XG4gICAgICBmb3JjZS54ICs9IHRoaXMub3B0aW9ucy53aW5kLng7XG4gICAgICBmb3JjZS55ICs9IHRoaXMub3B0aW9ucy53aW5kLnk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVsb2NpdHkgPSB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbbm9kZUlkXTtcblxuICAgIC8vIHN0b3JlIHRoZSBzdGF0ZSBzbyB3ZSBjYW4gcmV2ZXJ0XG4gICAgdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdID0ge1xuICAgICAgeDogbm9kZS54LFxuICAgICAgeTogbm9kZS55LFxuICAgICAgdng6IHZlbG9jaXR5LngsXG4gICAgICB2eTogdmVsb2NpdHkueSxcbiAgICB9O1xuXG4gICAgaWYgKG5vZGUub3B0aW9ucy5maXhlZC54ID09PSBmYWxzZSkge1xuICAgICAgdmVsb2NpdHkueCA9IHRoaXMuY2FsY3VsYXRlQ29tcG9uZW50VmVsb2NpdHkoXG4gICAgICAgIHZlbG9jaXR5LngsXG4gICAgICAgIGZvcmNlLngsXG4gICAgICAgIG5vZGUub3B0aW9ucy5tYXNzXG4gICAgICApO1xuICAgICAgbm9kZS54ICs9IHZlbG9jaXR5LnggKiB0aGlzLnRpbWVzdGVwO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JjZS54ID0gMDtcbiAgICAgIHZlbG9jaXR5LnggPSAwO1xuICAgIH1cblxuICAgIGlmIChub2RlLm9wdGlvbnMuZml4ZWQueSA9PT0gZmFsc2UpIHtcbiAgICAgIHZlbG9jaXR5LnkgPSB0aGlzLmNhbGN1bGF0ZUNvbXBvbmVudFZlbG9jaXR5KFxuICAgICAgICB2ZWxvY2l0eS55LFxuICAgICAgICBmb3JjZS55LFxuICAgICAgICBub2RlLm9wdGlvbnMubWFzc1xuICAgICAgKTtcbiAgICAgIG5vZGUueSArPSB2ZWxvY2l0eS55ICogdGhpcy50aW1lc3RlcDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yY2UueSA9IDA7XG4gICAgICB2ZWxvY2l0eS55ID0gMDtcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbFZlbG9jaXR5ID0gTWF0aC5zcXJ0KFxuICAgICAgTWF0aC5wb3codmVsb2NpdHkueCwgMikgKyBNYXRoLnBvdyh2ZWxvY2l0eS55LCAyKVxuICAgICk7XG4gICAgcmV0dXJuIHRvdGFsVmVsb2NpdHk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBpbml0aWFsaXppbmcgYW5kIHN0YWJpbGl6aW5nLCB3ZSBjYW4gZnJlZXplIG5vZGVzIHdpdGggYSBwcmVkZWZpbmVkIHBvc2l0aW9uLlxuICAgKiBUaGlzIGdyZWF0bHkgc3BlZWRzIHVwIHN0YWJpbGl6YXRpb24gYmVjYXVzZSBvbmx5IHRoZSBzdXBwb3J0bm9kZXMgZm9yIHRoZSBzbW9vdGhDdXJ2ZXMgaGF2ZSB0byBzZXR0bGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZnJlZXplTm9kZXMoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgZm9yIChjb25zdCBpZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlcywgaWQpKSB7XG4gICAgICAgIGlmIChub2Rlc1tpZF0ueCAmJiBub2Rlc1tpZF0ueSkge1xuICAgICAgICAgIGNvbnN0IGZpeGVkID0gbm9kZXNbaWRdLm9wdGlvbnMuZml4ZWQ7XG4gICAgICAgICAgdGhpcy5mcmVlemVDYWNoZVtpZF0gPSB7IHg6IGZpeGVkLngsIHk6IGZpeGVkLnkgfTtcbiAgICAgICAgICBmaXhlZC54ID0gdHJ1ZTtcbiAgICAgICAgICBmaXhlZC55ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbmZyZWV6ZXMgdGhlIG5vZGVzIHRoYXQgaGF2ZSBiZWVuIGZyb3plbiBieSBfZnJlZXplRGVmaW5lZE5vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc3RvcmVGcm96ZW5Ob2RlcygpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBmb3IgKGNvbnN0IGlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBpZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuZnJlZXplQ2FjaGVbaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub2Rlc1tpZF0ub3B0aW9ucy5maXhlZC54ID0gdGhpcy5mcmVlemVDYWNoZVtpZF0ueDtcbiAgICAgICAgICBub2Rlc1tpZF0ub3B0aW9ucy5maXhlZC55ID0gdGhpcy5mcmVlemVDYWNoZVtpZF0ueTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmZyZWV6ZUNhY2hlID0ge307XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIHN0YWJsZSBwb3NpdGlvbiBmb3IgYWxsIG5vZGVzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaXRlcmF0aW9ucz10aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5pdGVyYXRpb25zXVxuICAgKi9cbiAgc3RhYmlsaXplKGl0ZXJhdGlvbnMgPSB0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5pdGVyYXRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRpb25zICE9PSBcIm51bWJlclwiKSB7XG4gICAgICBpdGVyYXRpb25zID0gdGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24uaXRlcmF0aW9ucztcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiVGhlIHN0YWJpbGl6ZSBtZXRob2QgbmVlZHMgYSBudW1lcmljIGFtb3VudCBvZiBpdGVyYXRpb25zLiBTd2l0Y2hpbmcgdG8gZGVmYXVsdDogXCIsXG4gICAgICAgIGl0ZXJhdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZW5hYmxlIGFkYXB0aXZlIHRpbWVzdGVwc1xuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcCA9IHRydWUgJiYgdGhpcy5vcHRpb25zLmFkYXB0aXZlVGltZXN0ZXA7XG5cbiAgICAvLyB0aGlzIHNldHMgdGhlIHdpZHRoIG9mIGFsbCBub2RlcyBpbml0aWFsbHkgd2hpY2ggY291bGQgYmUgcmVxdWlyZWQgZm9yIHRoZSBhdm9pZE92ZXJsYXBcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2l6ZU5vZGVzXCIpO1xuXG4gICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpOyAvLyBzdG9wIHRoZSByZW5kZXIgbG9vcFxuICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuXG4gICAgLy8gYmxvY2sgcmVkcmF3IHJlcXVlc3RzXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9ibG9ja1JlZHJhd1wiKTtcbiAgICB0aGlzLnRhcmdldEl0ZXJhdGlvbnMgPSBpdGVyYXRpb25zO1xuXG4gICAgLy8gc3RhcnQgdGhlIHN0YWJpbGl6YXRpb25cbiAgICBpZiAodGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24ub25seUR5bmFtaWNFZGdlcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fZnJlZXplTm9kZXMoKTtcbiAgICB9XG4gICAgdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucyA9IDA7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3N0YWJpbGl6YXRpb25CYXRjaCgpLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBub3QgYWxyZWFkeSBzdGFiaWxpemluZywgc3RhcnQgaXQgYW5kIGVtaXQgYSBzdGFydCBldmVudC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgc3RhYmlsaXphdGlvbiBzdGFydGVkIHdpdGggdGhpcyBjYWxsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RhcnRTdGFiaWxpemluZygpIHtcbiAgICBpZiAodGhpcy5zdGFydGVkU3RhYmlsaXphdGlvbiA9PT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U3RhYmlsaXppbmdcIik7XG4gICAgdGhpcy5zdGFydGVkU3RhYmlsaXphdGlvbiA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogT25lIGJhdGNoIG9mIHN0YWJpbGl6YXRpb25cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zdGFiaWxpemF0aW9uQmF0Y2goKSB7XG4gICAgY29uc3QgcnVubmluZyA9ICgpID0+XG4gICAgICB0aGlzLnN0YWJpbGl6ZWQgPT09IGZhbHNlICYmXG4gICAgICB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zIDwgdGhpcy50YXJnZXRJdGVyYXRpb25zO1xuXG4gICAgY29uc3Qgc2VuZFByb2dyZXNzID0gKCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YWJpbGl6YXRpb25Qcm9ncmVzc1wiLCB7XG4gICAgICAgIGl0ZXJhdGlvbnM6IHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMsXG4gICAgICAgIHRvdGFsOiB0aGlzLnRhcmdldEl0ZXJhdGlvbnMsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3N0YXJ0U3RhYmlsaXppbmcoKSkge1xuICAgICAgc2VuZFByb2dyZXNzKCk7IC8vIEVuc3VyZSB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzdGFydCBldmVudC5cbiAgICB9XG5cbiAgICBsZXQgY291bnQgPSAwO1xuICAgIHdoaWxlIChydW5uaW5nKCkgJiYgY291bnQgPCB0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi51cGRhdGVJbnRlcnZhbCkge1xuICAgICAgdGhpcy5waHlzaWNzVGljaygpO1xuICAgICAgY291bnQrKztcbiAgICB9XG5cbiAgICBzZW5kUHJvZ3Jlc3MoKTtcblxuICAgIGlmIChydW5uaW5nKCkpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5fc3RhYmlsaXphdGlvbkJhdGNoLmJpbmQodGhpcyksIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9maW5hbGl6ZVN0YWJpbGl6YXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JhcCB1cCB0aGUgc3RhYmlsaXphdGlvbiwgZml0IGFuZCBlbWl0IHRoZSBldmVudHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluYWxpemVTdGFiaWxpemF0aW9uKCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfYWxsb3dSZWRyYXdcIik7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLmZpdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImZpdFwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24ub25seUR5bmFtaWNFZGdlcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fcmVzdG9yZUZyb3plbk5vZGVzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YWJpbGl6YXRpb25JdGVyYXRpb25zRG9uZVwiKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG5cbiAgICBpZiAodGhpcy5zdGFiaWxpemVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9lbWl0U3RhYmlsaXplZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFQlVHR0lORyBCRUxPVyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cblxuICAvKipcbiAgICogRGVidWcgZnVuY3Rpb24gdGhhdCBkaXNwbGF5IGFycm93cyBmb3IgdGhlIGZvcmNlcyBjdXJyZW50bHkgYWN0aXZlIGluIHRoZSBuZXR3b3JrLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIGRlYnVnZ2luZyBvbmx5LlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd0ZvcmNlcyhjdHgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzW2ldO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpbmRleF07XG4gICAgICBjb25zdCBmb3JjZSA9IHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW2luZGV4XTtcbiAgICAgIGNvbnN0IGZhY3RvciA9IDIwO1xuICAgICAgY29uc3QgY29sb3JGYWN0b3IgPSAwLjAzO1xuICAgICAgY29uc3QgZm9yY2VTaXplID0gTWF0aC5zcXJ0KE1hdGgucG93KGZvcmNlLngsIDIpICsgTWF0aC5wb3coZm9yY2UueCwgMikpO1xuXG4gICAgICBjb25zdCBzaXplID0gTWF0aC5taW4oTWF0aC5tYXgoNSwgZm9yY2VTaXplKSwgMTUpO1xuICAgICAgY29uc3QgYXJyb3dTaXplID0gMyAqIHNpemU7XG5cbiAgICAgIGNvbnN0IGNvbG9yID0gSFNWVG9IZXgoXG4gICAgICAgICgxODAgLSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBjb2xvckZhY3RvciAqIGZvcmNlU2l6ZSkpICogMTgwKSAvIDM2MCxcbiAgICAgICAgMSxcbiAgICAgICAgMVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcG9pbnQgPSB7XG4gICAgICAgIHg6IG5vZGUueCArIGZhY3RvciAqIGZvcmNlLngsXG4gICAgICAgIHk6IG5vZGUueSArIGZhY3RvciAqIGZvcmNlLnksXG4gICAgICB9O1xuXG4gICAgICBjdHgubGluZVdpZHRoID0gc2l6ZTtcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4Lm1vdmVUbyhub2RlLngsIG5vZGUueSk7XG4gICAgICBjdHgubGluZVRvKHBvaW50LngsIHBvaW50LnkpO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIoZm9yY2UueSwgZm9yY2UueCk7XG4gICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICBFbmRQb2ludHMuZHJhdyhjdHgsIHtcbiAgICAgICAgdHlwZTogXCJhcnJvd1wiLFxuICAgICAgICBwb2ludDogcG9pbnQsXG4gICAgICAgIGFuZ2xlOiBhbmdsZSxcbiAgICAgICAgbGVuZ3RoOiBhcnJvd1NpemUsXG4gICAgICB9KTtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBoeXNpY3NFbmdpbmU7XG4iLCAiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5sZXQgZ2V0UmFuZG9tVmFsdWVzO1xuY29uc3Qgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cbiAgICBnZXRSYW5kb21WYWx1ZXMgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pO1xuXG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn0iLCAiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV07XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwgImNvbnN0IHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHJhbmRvbVVVSURcbn07IiwgImltcG9ydCBuYXRpdmUgZnJvbSAnLi9uYXRpdmUuanMnO1xuaW1wb3J0IHJuZyBmcm9tICcuL3JuZy5qcyc7XG5pbXBvcnQgeyB1bnNhZmVTdHJpbmdpZnkgfSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChuYXRpdmUucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5hdGl2ZS5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3Qgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7IC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiB1bnNhZmVTdHJpbmdpZnkocm5kcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHY0OyIsICJpbXBvcnQgeyBkZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFV0aWxpdHkgQ2xhc3NcbiAqL1xuY2xhc3MgTmV0d29ya1V0aWwge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBjZW50ZXIgcG9zaXRpb24gb2YgdGhlIG5ldHdvcmsgY29uc2lkZXJpbmcgdGhlIGJvdW5kaW5nIGJveGVzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBhbGxOb2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gW3NwZWNpZmljTm9kZXM9W11dXG4gICAqIEByZXR1cm5zIHt7bWluWDogbnVtYmVyLCBtYXhYOiBudW1iZXIsIG1pblk6IG51bWJlciwgbWF4WTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGdldFJhbmdlKGFsbE5vZGVzLCBzcGVjaWZpY05vZGVzID0gW10pIHtcbiAgICBsZXQgbWluWSA9IDFlOSxcbiAgICAgIG1heFkgPSAtMWU5LFxuICAgICAgbWluWCA9IDFlOSxcbiAgICAgIG1heFggPSAtMWU5LFxuICAgICAgbm9kZTtcbiAgICBpZiAoc3BlY2lmaWNOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwZWNpZmljTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZSA9IGFsbE5vZGVzW3NwZWNpZmljTm9kZXNbaV1dO1xuICAgICAgICBpZiAobWluWCA+IG5vZGUuc2hhcGUuYm91bmRpbmdCb3gubGVmdCkge1xuICAgICAgICAgIG1pblggPSBub2RlLnNoYXBlLmJvdW5kaW5nQm94LmxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heFggPCBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnJpZ2h0KSB7XG4gICAgICAgICAgbWF4WCA9IG5vZGUuc2hhcGUuYm91bmRpbmdCb3gucmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pblkgPiBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnRvcCkge1xuICAgICAgICAgIG1pblkgPSBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnRvcDtcbiAgICAgICAgfSAvLyB0b3AgaXMgbmVnYXRpdmUsIGJvdHRvbSBpcyBwb3NpdGl2ZVxuICAgICAgICBpZiAobWF4WSA8IG5vZGUuc2hhcGUuYm91bmRpbmdCb3guYm90dG9tKSB7XG4gICAgICAgICAgbWF4WSA9IG5vZGUuc2hhcGUuYm91bmRpbmdCb3guYm90dG9tO1xuICAgICAgICB9IC8vIHRvcCBpcyBuZWdhdGl2ZSwgYm90dG9tIGlzIHBvc2l0aXZlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1pblggPT09IDFlOSAmJiBtYXhYID09PSAtMWU5ICYmIG1pblkgPT09IDFlOSAmJiBtYXhZID09PSAtMWU5KSB7XG4gICAgICAobWluWSA9IDApLCAobWF4WSA9IDApLCAobWluWCA9IDApLCAobWF4WCA9IDApO1xuICAgIH1cbiAgICByZXR1cm4geyBtaW5YOiBtaW5YLCBtYXhYOiBtYXhYLCBtaW5ZOiBtaW5ZLCBtYXhZOiBtYXhZIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgY2VudGVyIHBvc2l0aW9uIG9mIHRoZSBuZXR3b3JrXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBhbGxOb2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gW3NwZWNpZmljTm9kZXM9W11dXG4gICAqIEByZXR1cm5zIHt7bWluWDogbnVtYmVyLCBtYXhYOiBudW1iZXIsIG1pblk6IG51bWJlciwgbWF4WTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGdldFJhbmdlQ29yZShhbGxOb2Rlcywgc3BlY2lmaWNOb2RlcyA9IFtdKSB7XG4gICAgbGV0IG1pblkgPSAxZTksXG4gICAgICBtYXhZID0gLTFlOSxcbiAgICAgIG1pblggPSAxZTksXG4gICAgICBtYXhYID0gLTFlOSxcbiAgICAgIG5vZGU7XG4gICAgaWYgKHNwZWNpZmljTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGVjaWZpY05vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSBhbGxOb2Rlc1tzcGVjaWZpY05vZGVzW2ldXTtcbiAgICAgICAgaWYgKG1pblggPiBub2RlLngpIHtcbiAgICAgICAgICBtaW5YID0gbm9kZS54O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhYIDwgbm9kZS54KSB7XG4gICAgICAgICAgbWF4WCA9IG5vZGUueDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWluWSA+IG5vZGUueSkge1xuICAgICAgICAgIG1pblkgPSBub2RlLnk7XG4gICAgICAgIH0gLy8gdG9wIGlzIG5lZ2F0aXZlLCBib3R0b20gaXMgcG9zaXRpdmVcbiAgICAgICAgaWYgKG1heFkgPCBub2RlLnkpIHtcbiAgICAgICAgICBtYXhZID0gbm9kZS55O1xuICAgICAgICB9IC8vIHRvcCBpcyBuZWdhdGl2ZSwgYm90dG9tIGlzIHBvc2l0aXZlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1pblggPT09IDFlOSAmJiBtYXhYID09PSAtMWU5ICYmIG1pblkgPT09IDFlOSAmJiBtYXhZID09PSAtMWU5KSB7XG4gICAgICAobWluWSA9IDApLCAobWF4WSA9IDApLCAobWluWCA9IDApLCAobWF4WCA9IDApO1xuICAgIH1cbiAgICByZXR1cm4geyBtaW5YOiBtaW5YLCBtYXhYOiBtYXhYLCBtaW5ZOiBtaW5ZLCBtYXhZOiBtYXhZIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHJhbmdlID0ge21pblg6IG1pblgsIG1heFg6IG1heFgsIG1pblk6IG1pblksIG1heFk6IG1heFl9O1xuICAgKiBAcmV0dXJucyB7e3g6IG51bWJlciwgeTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRDZW50ZXIocmFuZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogMC41ICogKHJhbmdlLm1heFggKyByYW5nZS5taW5YKSxcbiAgICAgIHk6IDAuNSAqIChyYW5nZS5tYXhZICsgcmFuZ2UubWluWSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHJldHVybnMgYSBjbG9uZSBvZiB0aGUgb3B0aW9ucyBvciBvcHRpb25zIG9mIHRoZSBlZGdlIG9yIG5vZGUgdG8gYmUgdXNlZCBmb3IgY29uc3RydWN0aW9uIG9mIG5ldyBlZGdlcyBvciBjaGVjayBmdW5jdGlvbnMgZm9yIG5ldyBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHt2aXMuSXRlbX0gaXRlbVxuICAgKiBAcGFyYW0geydub2RlJ3x1bmRlZmluZWR9IHR5cGVcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2xvbmVPcHRpb25zKGl0ZW0sIHR5cGUpIHtcbiAgICBjb25zdCBjbG9uZWRPcHRpb25zID0ge307XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcIm5vZGVcIikge1xuICAgICAgZGVlcEV4dGVuZChjbG9uZWRPcHRpb25zLCBpdGVtLm9wdGlvbnMsIHRydWUpO1xuICAgICAgY2xvbmVkT3B0aW9ucy54ID0gaXRlbS54O1xuICAgICAgY2xvbmVkT3B0aW9ucy55ID0gaXRlbS55O1xuICAgICAgY2xvbmVkT3B0aW9ucy5hbW91bnRPZkNvbm5lY3Rpb25zID0gaXRlbS5lZGdlcy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZXBFeHRlbmQoY2xvbmVkT3B0aW9ucywgaXRlbS5vcHRpb25zLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lZE9wdGlvbnM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTmV0d29ya1V0aWw7XG4iLCAiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCBOb2RlIGZyb20gXCIuLi9Ob2RlXCI7XG5cbi8qKlxuICogQSBDbHVzdGVyIGlzIGEgc3BlY2lhbCBOb2RlIHRoYXQgYWxsb3dzIGEgZ3JvdXAgb2YgTm9kZXMgcG9zaXRpb25lZCBjbG9zZWx5IHRvZ2V0aGVyXG4gKiB0byBiZSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBDbHVzdGVyIE5vZGUuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVcbiAqL1xuY2xhc3MgQ2x1c3RlciBleHRlbmRzIE5vZGUge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtBcnJheS48SFRNTEltYWdlRWxlbWVudD59aW1hZ2VsaXN0XG4gICAqIEBwYXJhbSB7QXJyYXl9IGdyb3VwbGlzdFxuICAgKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsT3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdE9wdGlvbnMgICAgIEdsb2JhbCBkZWZhdWx0IG9wdGlvbnMgZm9yIG5vZGVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zLFxuICAgIGJvZHksXG4gICAgaW1hZ2VsaXN0LFxuICAgIGdyb3VwbGlzdCxcbiAgICBnbG9iYWxPcHRpb25zLFxuICAgIGRlZmF1bHRPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGltYWdlbGlzdCwgZ3JvdXBsaXN0LCBnbG9iYWxPcHRpb25zLCBkZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmlzQ2x1c3RlciA9IHRydWU7XG4gICAgdGhpcy5jb250YWluZWROb2RlcyA9IHt9O1xuICAgIHRoaXMuY29udGFpbmVkRWRnZXMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2ZlciBjaGlsZCBjbHVzdGVyIGRhdGEgdG8gY3VycmVudCBhbmQgZGlzY29ubmVjdCB0aGUgY2hpbGQgY2x1c3Rlci5cbiAgICpcbiAgICogUGxlYXNlIGNvbnN1bHQgdGhlIGhlYWRlciBjb21tZW50IGluICdDbHVzdGVyaW5nLmpzJyBmb3IgdGhlIGZpZWxkcyBzZXQgaGVyZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBjaGlsZENsdXN0ZXJJZCAgaWQgb2YgY2hpbGQgY2x1c3RlciB0byBvcGVuXG4gICAqL1xuICBfb3BlbkNoaWxkQ2x1c3RlcihjaGlsZENsdXN0ZXJJZCkge1xuICAgIGNvbnN0IGNoaWxkQ2x1c3RlciA9IHRoaXMuYm9keS5ub2Rlc1tjaGlsZENsdXN0ZXJJZF07XG4gICAgaWYgKHRoaXMuY29udGFpbmVkTm9kZXNbY2hpbGRDbHVzdGVySWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJub2RlIHdpdGggaWQ6IFwiICsgY2hpbGRDbHVzdGVySWQgKyBcIiBub3QgaW4gY3VycmVudCBjbHVzdGVyXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY2hpbGRDbHVzdGVyLmlzQ2x1c3Rlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm9kZSB3aXRoIGlkOiBcIiArIGNoaWxkQ2x1c3RlcklkICsgXCIgaXMgbm90IGEgY2x1c3RlclwiKTtcbiAgICB9XG5cbiAgICAvLyBEaXNjb25uZWN0IGNoaWxkIGNsdXN0ZXIgZnJvbSBjdXJyZW50IGNsdXN0ZXJcbiAgICBkZWxldGUgdGhpcy5jb250YWluZWROb2Rlc1tjaGlsZENsdXN0ZXJJZF07XG4gICAgZm9yRWFjaChjaGlsZENsdXN0ZXIuZWRnZXMsIChlZGdlKSA9PiB7XG4gICAgICBkZWxldGUgdGhpcy5jb250YWluZWRFZGdlc1tlZGdlLmlkXTtcbiAgICB9KTtcblxuICAgIC8vIFRyYW5zZmVyIG5vZGVzIGFuZCBlZGdlc1xuICAgIGZvckVhY2goY2hpbGRDbHVzdGVyLmNvbnRhaW5lZE5vZGVzLCAobm9kZSwgbm9kZUlkKSA9PiB7XG4gICAgICB0aGlzLmNvbnRhaW5lZE5vZGVzW25vZGVJZF0gPSBub2RlO1xuICAgIH0pO1xuICAgIGNoaWxkQ2x1c3Rlci5jb250YWluZWROb2RlcyA9IHt9O1xuXG4gICAgZm9yRWFjaChjaGlsZENsdXN0ZXIuY29udGFpbmVkRWRnZXMsIChlZGdlLCBlZGdlSWQpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVkRWRnZXNbZWRnZUlkXSA9IGVkZ2U7XG4gICAgfSk7XG4gICAgY2hpbGRDbHVzdGVyLmNvbnRhaW5lZEVkZ2VzID0ge307XG5cbiAgICAvLyBUcmFuc2ZlciBlZGdlcyB3aXRoaW4gY2x1c3RlciBlZGdlcyB3aGljaCBhcmUgY2x1c3RlcmVkXG4gICAgZm9yRWFjaChjaGlsZENsdXN0ZXIuZWRnZXMsIChjbHVzdGVyRWRnZSkgPT4ge1xuICAgICAgZm9yRWFjaCh0aGlzLmVkZ2VzLCAocGFyZW50Q2x1c3RlckVkZ2UpID0+IHtcbiAgICAgICAgLy8gQXNzdW1wdGlvbjogYSBjbHVzdGVyZWQgZWRnZSBjYW4gb25seSBiZSBwcmVzZW50IGluIGEgc2luZ2xlIGNsdXN0ZXJpbmcgZWRnZVxuICAgICAgICAvLyBOb3QgdGVzdGVkIGhlcmVcbiAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRDbHVzdGVyRWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5pbmRleE9mKFxuICAgICAgICAgIGNsdXN0ZXJFZGdlLmlkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybjtcblxuICAgICAgICBmb3JFYWNoKGNsdXN0ZXJFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLCAoc3JjSWQpID0+IHtcbiAgICAgICAgICBwYXJlbnRDbHVzdGVyRWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5wdXNoKHNyY0lkKTtcblxuICAgICAgICAgIC8vIE1haW50YWluIGNvcnJlY3QgYm9va2tlZXBpbmcgZm9yIHRyYW5zZmVycmVkIGVkZ2VcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbc3JjSWRdLmVkZ2VSZXBsYWNlZEJ5SWQgPSBwYXJlbnRDbHVzdGVyRWRnZS5pZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGNsdXN0ZXIgZWRnZSBmcm9tIHBhcmVudCBjbHVzdGVyIGVkZ2VcbiAgICAgICAgcGFyZW50Q2x1c3RlckVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNoaWxkQ2x1c3Rlci5lZGdlcyA9IFtdO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENsdXN0ZXI7XG4iLCAiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiMgVE9ET1xuXG4tIGBlZGdlUmVwbGFjZWRCeUlkYCBub3QgY2xlYW5lZCB1cCB5ZXQgb24gY2x1c3RlciBlZGdlIHJlbW92YWxcbi0gYWxsb3dTaW5nbGVOb2RlQ2x1c3RlciBjb3VsZCBiZSBhIGdsb2JhbCBvcHRpb24gYXMgd2VsbDsgY3VycmVudGx5IG5lZWRzIHRvIGFsd2F5c1xuICBiZSBwYXNzZWQgdG8gY2x1c3RlcmluZyBtZXRob2RzXG5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIyBTdGF0ZSBNb2RlbCBmb3IgQ2x1c3RlcmluZ1xuXG5UaGUgdG90YWwgc3RhdGUgZm9yIGNsdXN0ZXJpbmcgaXMgbm9uLXRyaXZpYWwuIEl0IGlzIHVzZWZ1bCB0byBoYXZlIGEgbW9kZWxcbmF2YWlsYWJsZSBhcyB0byBob3cgaXQgd29ya3MuIFRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIHRoZSByZWxldmFudCBzdGF0ZSBpdGVtcy5cblxuXG4jIyBOZXR3b3JrIFN0YXRlXG5cblRoZSBmb2xsb3dpbmcgYG5ldHdvcmtgLW1lbWJlcnMgYXJlIHJlbGV2YW50IHRvIGNsdXN0ZXJpbmc6XG5cbi0gYGJvZHkubm9kZXNgICAgICAgIC0gYWxsIG5vZGVzIGFjdGl2ZWx5IHBhcnRpY2lwYXRpbmcgaW4gdGhlIG5ldHdvcmtcbi0gYGJvZHkuZWRnZXNgICAgICAgIC0gc2FtZSBmb3IgZWRnZXNcbi0gYGJvZHkubm9kZUluZGljZXNgIC0gaWQncyBvZiBub2RlcyB0aGF0IGFyZSB2aXNpYmxlIGF0IGEgZ2l2ZW4gbW9tZW50XG4tIGBib2R5LmVkZ2VJbmRpY2VzYCAtIHNhbWUgZm9yIGVkZ2VzXG5cblRoaXMgaW5jbHVkZXM6XG5cbi0gaGVscGVyIG5vZGVzIGZvciBkcmFnZ2luZyBpbiBgbWFuaXB1bGF0aW9uYFxuLSBoZWxwZXIgbm9kZXMgZm9yIGVkZ2UgdHlwZSBgZHluYW1pY2Bcbi0gY2x1c3RlciBub2RlcyBhbmQgZWRnZXNcbi0gdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiB0aGlzLlxuXG5BIG5vZGUvZWRnZSBtYXkgYmUgbWlzc2luZyBpbiB0aGUgYEluZGljZXNgIG1lbWJlciBpZjpcblxuLSBpdCBpcyBhIGhlbHBlciBub2RlXG4tIHRoZSBub2RlIG9yIGVkZ2Ugc3RhdGUgaGFzIG9wdGlvbiBgaGlkZGVuYCBzZXRcbi0gSXQgaXMgbm90IHZpc2libGUgZHVlIHRvIGNsdXN0ZXJpbmdcblxuXG4jIyBDbHVzdGVyaW5nIFN0YXRlXG5cbkZvciB0aGUgaGFzaGVzLCB0aGUgaWQncyBvZiB0aGUgbm9kZXMvZWRnZXMgYXJlIHVzZWQgYXMga2V5LlxuXG5NZW1iZXIgYG5ldHdvcmsuY2x1c3RlcmluZ2AgY29udGFpbnMgdGhlIGZvbGxvd2luZyBpdGVtczpcblxuLSBgY2x1c3RlcmVkTm9kZXNgIC0gaGFzaCB3aXRoIHZhbHVlczogeyBjbHVzdGVySWQ6IDxpZCBvZiBjbHVzdGVyPiwgbm9kZTogPG5vZGUgaW5zdGFuY2U+fVxuLSBgY2x1c3RlcmVkRWRnZXNgIC0gaGFzaCB3aXRoIHZhbHVlczogcmVzdG9yZSBpbmZvcm1hdGlvbiBmb3IgZ2l2ZW4gZWRnZVxuXG5cbkR1ZSB0byBuZXN0aW5nIG9mIGNsdXN0ZXJzLCB0aGVzZSBtZW1iZXJzIGNhbiBjb250YWluIGNsdXN0ZXIgbm9kZXMgYW5kIGVkZ2VzIGFzIHdlbGwuXG5cblRoZSBpbXBvcnRhbnQgdGhpbmcgdG8gbm90ZSBoZXJlLCBpcyB0aGF0IHRoZSBjbHVzdGVyZWQgbm9kZXMgYW5kIGVkZ2VzIGFsc29cbmFwcGVhciBpbiB0aGUgbWVtYmVycyBvZiB0aGUgY2x1c3RlciBub2Rlcy4gRm9yIGRhdGEgdXBkYXRlLCBpdCBpcyB0aGVyZWZvcmVcbmltcG9ydGFudCB0byBzY2FuIHRoZXNlIGxpc3RzIGFzIHdlbGwgYXMgdGhlIGNsdXN0ZXIgbm9kZXMuXG5cblxuIyMjIENsdXN0ZXIgTm9kZVxuXG5BIGNsdXN0ZXIgbm9kZSBoYXMgdGhlIGZvbGxvd2luZyBleHRyYSBmaWVsZHM6XG5cbi0gYGlzQ2x1c3RlciA6IHRydWVgIC0gaW5kaWNhdGlvbiB0aGF0IHRoaXMgaXMgYSBjbHVzdGVyIG5vZGVcbi0gYGNvbnRhaW5lZE5vZGVzYCAgIC0gaGFzaCBvZiBub2RlcyBjb250YWluZWQgaW4gdGhpcyBjbHVzdGVyXG4tIGBjb250YWluZWRFZGdlc2AgICAtIHNhbWUgZm9yIGVkZ2VzXG4tIGBlZGdlc2AgICAgICAgICAgICAtIGFycmF5IG9mIGNsdXN0ZXIgZWRnZXMgZm9yIHRoaXMgbm9kZVxuXG5cbioqTk9URToqKlxuXG4tIGBjb250YWluZWRFZGdlc2AgY2FuIGFsc28gY29udGFpbiBlZGdlcyB3aGljaCBhcmUgbm90IGNsdXN0ZXJlZDsgZS5nLiBhbiBlZGdlXG4gICBjb25uZWN0aW5nIHR3byBub2RlcyBpbiB0aGUgc2FtZSBjbHVzdGVyLlxuXG5cbiMjIyBDbHVzdGVyIEVkZ2VcblxuVGhlc2UgYXJlIHRoZSBpdGVtcyBpbiB0aGUgYGVkZ2VzYCBtZW1iZXIgb2YgYSBjbHVzdGVyZWQgbm9kZS4gVGhleSBoYXZlIHRoZVxuZm9sbG93aW5nIHJlbGV2YW50IG1lbWJlcnM6XG5cbi0gJ2NsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzYCAtIGFycmF5IG9mIGlkJ3Mgb2YgZWRnZXMgcmVwbGFjZWQgYnkgdGhpcyBlZGdlXG5cbk5vdGUgdGhhdCBpdCdzIHBvc3NpYmxlIHRvIG5lc3QgY2x1c3RlcnMsIHNvIHRoYXQgYGNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzYFxuY2FuIGNvbnRhaW4gZWRnZSBpZCdzIG9mIG90aGVyIGNsdXN0ZXJzLlxuXG5cbiMjIyBDbHVzdGVyZWQgRWRnZVxuXG5UaGlzIGlzIGFueSBlZGdlIGNvbnRhaW5lZCBieSBhIGNsdXN0ZXIgZWRnZS4gSXQgZ2V0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWxcbm1lbWJlcjpcblxuLSBgZWRnZVJlcGxhY2VkQnlJZGAgLSBpZCBvZiB0aGUgY2x1c3RlciBlZGdlIGluIHdoaWNoIGN1cnJlbnQgZWRnZSBpcyBjbHVzdGVyZWRcblxuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbmltcG9ydCB7IGRlZXBFeHRlbmQsIGZvckVhY2ggfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyB2NCBhcyByYW5kb21VVUlEIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCBOZXR3b3JrVXRpbCBmcm9tIFwiLi4vTmV0d29ya1V0aWxcIjtcbmltcG9ydCBDbHVzdGVyIGZyb20gXCIuL2NvbXBvbmVudHMvbm9kZXMvQ2x1c3RlclwiO1xuaW1wb3J0IEVkZ2UgZnJvbSBcIi4vY29tcG9uZW50cy9FZGdlXCI7IC8vIE9ubHkgbmVlZGVkIGZvciBjaGVjayBvbiB0eXBlIVxuaW1wb3J0IE5vZGUgZnJvbSBcIi4vY29tcG9uZW50cy9Ob2RlXCI7IC8vIE9ubHkgbmVlZGVkIGZvciBjaGVjayBvbiB0eXBlIVxuXG4vKipcbiAqIFRoZSBjbHVzdGVyaW5nIGVuZ2luZVxuICovXG5jbGFzcyBDbHVzdGVyRW5naW5lIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5KSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNsdXN0ZXJlZE5vZGVzID0ge307IC8vIGtleTogbm9kZSBpZCwgdmFsdWU6IHsgY2x1c3RlcklkOiA8aWQgb2YgY2x1c3Rlcj4sIG5vZGU6IDxub2RlIGluc3RhbmNlPn1cbiAgICB0aGlzLmNsdXN0ZXJlZEVkZ2VzID0ge307IC8vIGtleTogZWRnZSBpZCwgdmFsdWU6IHJlc3RvcmUgaW5mb3JtYXRpb24gZm9yIGdpdmVuIGVkZ2VcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7fTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXNldERhdGFcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5jbHVzdGVyZWROb2RlcyA9IHt9O1xuICAgICAgdGhpcy5jbHVzdGVyZWRFZGdlcyA9IHt9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBodWJzaXplXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjbHVzdGVyQnlIdWJzaXplKGh1YnNpemUsIG9wdGlvbnMpIHtcbiAgICBpZiAoaHVic2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBodWJzaXplID0gdGhpcy5fZ2V0SHViU2l6ZSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGh1YnNpemUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIG9wdGlvbnMgPSB0aGlzLl9jaGVja09wdGlvbnMoaHVic2l6ZSk7XG4gICAgICBodWJzaXplID0gdGhpcy5fZ2V0SHViU2l6ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzVG9DbHVzdGVyID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGlmIChub2RlLmVkZ2VzLmxlbmd0aCA+PSBodWJzaXplKSB7XG4gICAgICAgIG5vZGVzVG9DbHVzdGVyLnB1c2gobm9kZS5pZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlc1RvQ2x1c3Rlci5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jbHVzdGVyQnlDb25uZWN0aW9uKG5vZGVzVG9DbHVzdGVyW2ldLCBvcHRpb25zLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGxvb3Agb3ZlciBhbGwgbm9kZXMsIGNoZWNrIGlmIHRoZXkgYWRoZXJlIHRvIHRoZSBjb25kaXRpb24gYW5kIGNsdXN0ZXIgaWYgbmVlZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3RlcihvcHRpb25zID0ge30sIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIGlmIChvcHRpb25zLmpvaW5Db25kaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBjYWxsIGNsdXN0ZXJCeU5vZGVEYXRhIHdpdGhvdXQgYSBqb2luQ29uZGl0aW9uIGZ1bmN0aW9uIGluIHRoZSBvcHRpb25zLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoZSBvcHRpb25zIG9iamVjdCBpcyBmaW5lLCBhcHBlbmQgaWYgbmVlZGVkXG4gICAgb3B0aW9ucyA9IHRoaXMuX2NoZWNrT3B0aW9ucyhvcHRpb25zKTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZXNPYmogPSB7fTtcbiAgICBjb25zdCBjaGlsZEVkZ2VzT2JqID0ge307XG5cbiAgICAvLyBjb2xsZWN0IHRoZSBub2RlcyB0aGF0IHdpbGwgYmUgaW4gdGhlIGNsdXN0ZXJcbiAgICBmb3JFYWNoKHRoaXMuYm9keS5ub2RlcywgKG5vZGUsIG5vZGVJZCkgPT4ge1xuICAgICAgaWYgKG5vZGUub3B0aW9ucyAmJiBvcHRpb25zLmpvaW5Db25kaXRpb24obm9kZS5vcHRpb25zKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjaGlsZE5vZGVzT2JqW25vZGVJZF0gPSBub2RlO1xuXG4gICAgICAgIC8vIGNvbGxlY3QgdGhlIGVkZ2VzIHRoYXQgd2lsbCBiZSBpbiB0aGUgY2x1c3RlclxuICAgICAgICBmb3JFYWNoKG5vZGUuZWRnZXMsIChlZGdlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2NsdXN0ZXIoY2hpbGROb2Rlc09iaiwgY2hpbGRFZGdlc09iaiwgb3B0aW9ucywgcmVmcmVzaERhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsdXN0ZXIgYWxsIG5vZGVzIGluIHRoZSBuZXR3b3JrIHRoYXQgaGF2ZSBvbmx5IFggZWRnZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VDb3VudFxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3RlckJ5RWRnZUNvdW50KGVkZ2VDb3VudCwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgb3B0aW9ucyA9IHRoaXMuX2NoZWNrT3B0aW9ucyhvcHRpb25zKTtcbiAgICBjb25zdCBjbHVzdGVycyA9IFtdO1xuICAgIGNvbnN0IHVzZWROb2RlcyA9IHt9O1xuICAgIGxldCBlZGdlLCBlZGdlcywgcmVsZXZhbnRFZGdlQ291bnQ7XG4gICAgLy8gY29sbGVjdCB0aGUgbm9kZXMgdGhhdCB3aWxsIGJlIGluIHRoZSBjbHVzdGVyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkTm9kZXNPYmogPSB7fTtcbiAgICAgIGNvbnN0IGNoaWxkRWRnZXNPYmogPSB7fTtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IHRoaXMuYm9keS5ub2RlSW5kaWNlc1tpXTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcblxuICAgICAgLy8gaWYgdGhpcyBub2RlIGlzIGFscmVhZHkgdXNlZCBpbiBhbm90aGVyIGNsdXN0ZXIgdGhpcyBzZXNzaW9uLCB3ZSBkbyBub3QgaGF2ZSB0byByZS1ldmFsdWF0ZSBpdC5cbiAgICAgIGlmICh1c2VkTm9kZXNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlbGV2YW50RWRnZUNvdW50ID0gMDtcbiAgICAgICAgZWRnZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2RlLmVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgZWRnZSA9IG5vZGUuZWRnZXNbal07XG4gICAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGVkZ2UudG9JZCAhPT0gZWRnZS5mcm9tSWQpIHtcbiAgICAgICAgICAgICAgcmVsZXZhbnRFZGdlQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcyBub2RlIHF1YWxpZmllcywgd2UgY29sbGVjdCBpdHMgbmVpZ2hib3VycyB0byBzdGFydCB0aGUgY2x1c3RlcmluZyBwcm9jZXNzLlxuICAgICAgICBpZiAocmVsZXZhbnRFZGdlQ291bnQgPT09IGVkZ2VDb3VudCkge1xuICAgICAgICAgIGNvbnN0IGNoZWNrSm9pbkNvbmRpdGlvbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMuam9pbkNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIG9wdGlvbnMuam9pbkNvbmRpdGlvbiA9PT0gbnVsbFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuam9pbkNvbmRpdGlvbihjbG9uZWRPcHRpb25zKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgbGV0IGdhdGhlcmluZ1N1Y2Nlc3NmdWwgPSB0cnVlO1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGVkZ2UgPSBlZGdlc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZUlkID0gdGhpcy5fZ2V0Q29ubmVjdGVkSWQoZWRnZSwgbm9kZUlkKTtcbiAgICAgICAgICAgIC8vIGFkZCB0aGUgbm9kZXMgdG8gdGhlIGxpc3QgYnkgdGhlIGpvaW4gY29uZGl0aW9uLlxuICAgICAgICAgICAgaWYgKGNoZWNrSm9pbkNvbmRpdGlvbihub2RlKSkge1xuICAgICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICAgICAgY2hpbGROb2Rlc09ialtub2RlSWRdID0gbm9kZTtcbiAgICAgICAgICAgICAgY2hpbGROb2Rlc09ialtjaGlsZE5vZGVJZF0gPSB0aGlzLmJvZHkubm9kZXNbY2hpbGROb2RlSWRdO1xuICAgICAgICAgICAgICB1c2VkTm9kZXNbbm9kZUlkXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB0aGlzIG5vZGUgZG9lcyBub3QgcXVhbGlmeSBhZnRlciBhbGwuXG4gICAgICAgICAgICAgIGdhdGhlcmluZ1N1Y2Nlc3NmdWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gYWRkIHRvIHRoZSBjbHVzdGVyIHF1ZXVlXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY2hpbGRFZGdlc09iaikubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgZ2F0aGVyaW5nU3VjY2Vzc2Z1bCA9PT0gdHJ1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZWFyY2ggZm9yIGNsdXN0ZXIgZGF0YSB0aGF0IGNvbnRhaW5zIGFueSBvZiB0aGUgbm9kZSBpZCdzXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgbm8gam9pbkNvbmRpdGlvbiwgb3RoZXJ3aXNlIHJldHVybiB2YWx1ZSBvZiBqb2luQ29uZGl0aW9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGZpbmRDbHVzdGVyRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBjbHVzdGVycy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgIC8vIFNlYXJjaCBmb3IgYSBjbHVzdGVyIGNvbnRhaW5pbmcgYW55IG9mIHRoZSBub2RlIGlkJ3NcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gaW4gY2hpbGROb2Rlc09iaikge1xuICAgICAgICAgICAgICAgICAgaWYgKGNsdXN0ZXJzW25dLm5vZGVzW21dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsdXN0ZXJzW25dO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBJZiBhbnkgb2YgdGhlIGZvdW5kIG5vZGVzIGlzIHBhcnQgb2YgYSBjbHVzdGVyIGZvdW5kIGluIHRoaXMgbWV0aG9kLFxuICAgICAgICAgICAgLy8gYWRkIHRoZSBjdXJyZW50IHZhbHVlcyB0byB0aGF0IGNsdXN0ZXJcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kQ2x1c3RlciA9IGZpbmRDbHVzdGVyRGF0YSgpO1xuICAgICAgICAgICAgaWYgKGZvdW5kQ2x1c3RlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCBub2RlcyB0byBmb3VuZCBjbHVzdGVyIGlmIG5vdCBwcmVzZW50XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbSBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kQ2x1c3Rlci5ub2Rlc1ttXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBmb3VuZENsdXN0ZXIubm9kZXNbbV0gPSBjaGlsZE5vZGVzT2JqW21dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIEFkZCBlZGdlcyB0byBmb3VuZCBjbHVzdGVyLCBpZiBub3QgcHJlc2VudFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gaW4gY2hpbGRFZGdlc09iaikge1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZENsdXN0ZXIuZWRnZXNbbV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZm91bmRDbHVzdGVyLmVkZ2VzW21dID0gY2hpbGRFZGdlc09ialttXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBjbHVzdGVyIGdyb3VwXG4gICAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2goeyBub2RlczogY2hpbGROb2Rlc09iaiwgZWRnZXM6IGNoaWxkRWRnZXNPYmogfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbHVzdGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5fY2x1c3RlcihjbHVzdGVyc1tpXS5ub2RlcywgY2x1c3RlcnNbaV0uZWRnZXMsIG9wdGlvbnMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocmVmcmVzaERhdGEgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsdXN0ZXIgYWxsIG5vZGVzIGluIHRoZSBuZXR3b3JrIHRoYXQgaGF2ZSBvbmx5IDEgZWRnZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3Rlck91dGxpZXJzKG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIHRoaXMuY2x1c3RlckJ5RWRnZUNvdW50KDEsIG9wdGlvbnMsIHJlZnJlc2hEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGFsbCBub2RlcyBpbiB0aGUgbmV0d29yayB0aGF0IGhhdmUgb25seSAyIGVkZ2VcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVmcmVzaERhdGE9dHJ1ZV1cbiAgICovXG4gIGNsdXN0ZXJCcmlkZ2VzKG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIHRoaXMuY2x1c3RlckJ5RWRnZUNvdW50KDIsIG9wdGlvbnMsIHJlZnJlc2hEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdWNrIGFsbCBjb25uZWN0ZWQgbm9kZXMgb2YgYSBub2RlIGludG8gdGhlIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlZnJlc2hEYXRhPXRydWVdXG4gICAqL1xuICBjbHVzdGVyQnlDb25uZWN0aW9uKG5vZGVJZCwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgLy8ga2lsbCBjb25kaXRpb25zXG4gICAgaWYgKG5vZGVJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlSWQgc3VwcGxpZWQgdG8gY2x1c3RlckJ5Q29ubmVjdGlvbiFcIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlIG5vZGVJZCBnaXZlbiB0byBjbHVzdGVyQnlDb25uZWN0aW9uIGRvZXMgbm90IGV4aXN0IVwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICBvcHRpb25zID0gdGhpcy5fY2hlY2tPcHRpb25zKG9wdGlvbnMsIG5vZGUpO1xuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy54ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnggPSBub2RlLng7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy55ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnkgPSBub2RlLnk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy5maXhlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy5maXhlZCA9IHt9O1xuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuZml4ZWQueCA9IG5vZGUub3B0aW9ucy5maXhlZC54O1xuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuZml4ZWQueSA9IG5vZGUub3B0aW9ucy5maXhlZC55O1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkTm9kZXNPYmogPSB7fTtcbiAgICBjb25zdCBjaGlsZEVkZ2VzT2JqID0ge307XG4gICAgY29uc3QgcGFyZW50Tm9kZUlkID0gbm9kZS5pZDtcbiAgICBjb25zdCBwYXJlbnRDbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGUpO1xuICAgIGNoaWxkTm9kZXNPYmpbcGFyZW50Tm9kZUlkXSA9IG5vZGU7XG5cbiAgICAvLyBjb2xsZWN0IHRoZSBub2RlcyB0aGF0IHdpbGwgYmUgaW4gdGhlIGNsdXN0ZXJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBub2RlLmVkZ2VzW2ldO1xuICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVJZCA9IHRoaXMuX2dldENvbm5lY3RlZElkKGVkZ2UsIHBhcmVudE5vZGVJZCk7XG5cbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIG5vZGUgaXMgbm90IGluIGEgY2x1c3RlclxuICAgICAgICBpZiAodGhpcy5jbHVzdGVyZWROb2Rlc1tjaGlsZE5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChjaGlsZE5vZGVJZCAhPT0gcGFyZW50Tm9kZUlkKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5qb2luQ29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZXNPYmpbY2hpbGROb2RlSWRdID0gdGhpcy5ib2R5Lm5vZGVzW2NoaWxkTm9kZUlkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGNsb25lIHRoZSBvcHRpb25zIGFuZCBpbnNlcnQgc29tZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZy5cbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRDbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKFxuICAgICAgICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tjaGlsZE5vZGVJZF1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuam9pbkNvbmRpdGlvbihcbiAgICAgICAgICAgICAgICAgIHBhcmVudENsb25lZE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICBjaGlsZENsb25lZE9wdGlvbnNcbiAgICAgICAgICAgICAgICApID09PSB0cnVlXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNoaWxkRWRnZXNPYmpbZWRnZS5pZF0gPSBlZGdlO1xuICAgICAgICAgICAgICAgIGNoaWxkTm9kZXNPYmpbY2hpbGROb2RlSWRdID0gdGhpcy5ib2R5Lm5vZGVzW2NoaWxkTm9kZUlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzd2FsbG93IHRoZSBlZGdlIGlmIGl0IGlzIHNlbGYtcmVmZXJlbmNpbmcuXG4gICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY2hpbGROb2RlSURzID0gT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubWFwKGZ1bmN0aW9uIChjaGlsZE5vZGUpIHtcbiAgICAgIHJldHVybiBjaGlsZE5vZGVzT2JqW2NoaWxkTm9kZV0uaWQ7XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkTm9kZUtleSBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZE5vZGVzT2JqLCBjaGlsZE5vZGVLZXkpKVxuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY29uc3QgY2hpbGROb2RlID0gY2hpbGROb2Rlc09ialtjaGlsZE5vZGVLZXldO1xuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBjaGlsZE5vZGUuZWRnZXMubGVuZ3RoOyB5KyspIHtcbiAgICAgICAgY29uc3QgY2hpbGRFZGdlID0gY2hpbGROb2RlLmVkZ2VzW3ldO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGROb2RlSURzLmluZGV4T2YodGhpcy5fZ2V0Q29ubmVjdGVkSWQoY2hpbGRFZGdlLCBjaGlsZE5vZGUuaWQpKSA+XG4gICAgICAgICAgLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2hpbGRFZGdlc09ialtjaGlsZEVkZ2UuaWRdID0gY2hpbGRFZGdlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2NsdXN0ZXIoY2hpbGROb2Rlc09iaiwgY2hpbGRFZGdlc09iaiwgb3B0aW9ucywgcmVmcmVzaERhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgZWRnZXMgdGhhdCB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBjbHVzdGVyXG4gICAqIEl0IGxvb2tzIGZvciBlZGdlcyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIG5vZGVzIGZyb20gdGhlIFwib3V0c2lkZScgb2YgdGhlIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7e05vZGUuaWQ6IHZpcy5Ob2RlfX0gY2hpbGROb2Rlc09ialxuICAgKiBAcGFyYW0ge3t2aXMuRWRnZS5pZDogdmlzLkVkZ2V9fSBjaGlsZEVkZ2VzT2JqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjbHVzdGVyTm9kZVByb3BlcnRpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUNsdXN0ZXJFZGdlcyhcbiAgICBjaGlsZE5vZGVzT2JqLFxuICAgIGNoaWxkRWRnZXNPYmosXG4gICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICApIHtcbiAgICBsZXQgZWRnZSwgY2hpbGROb2RlSWQsIGNoaWxkTm9kZSwgdG9JZCwgZnJvbUlkLCBvdGhlck5vZGVJZDtcblxuICAgIC8vIGxvb3Agb3ZlciBhbGwgY2hpbGQgbm9kZXMgYW5kIHRoZWlyIGVkZ2VzIHRvIGZpbmQgZWRnZXMgZ29pbmcgb3V0IG9mIHRoZSBjbHVzdGVyXG4gICAgLy8gdGhlc2UgZWRnZXMgd2lsbCBiZSByZXBsYWNlZCBieSBjbHVzdGVyRWRnZXMuXG4gICAgY29uc3QgY2hpbGRLZXlzID0gT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaik7XG4gICAgY29uc3QgY3JlYXRlRWRnZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGROb2RlSWQgPSBjaGlsZEtleXNbaV07XG4gICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzT2JqW2NoaWxkTm9kZUlkXTtcblxuICAgICAgLy8gY29uc3RydWN0IG5ldyBlZGdlcyBmcm9tIHRoZSBjbHVzdGVyIHRvIG90aGVyc1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaGlsZE5vZGUuZWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZWRnZSA9IGNoaWxkTm9kZS5lZGdlc1tqXTtcbiAgICAgICAgLy8gd2Ugb25seSBoYW5kbGUgZWRnZXMgdGhhdCBhcmUgdmlzaWJsZSB0byB0aGUgc3lzdGVtLCBub3QgdGhlIGRpc2FibGVkIG9uZXMgZnJvbSB0aGUgY2x1c3RlcmluZyBwcm9jZXNzLlxuICAgICAgICBpZiAodGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gc2VsZi1yZWZlcmVuY2luZyBlZGdlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBcImhpZGRlblwiIGxpc3RcbiAgICAgICAgICBpZiAoZWRnZS50b0lkID09IGVkZ2UuZnJvbUlkKSB7XG4gICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2V0IHVwIHRoZSBmcm9tIGFuZCB0by5cbiAgICAgICAgICAgIGlmIChlZGdlLnRvSWQgPT0gY2hpbGROb2RlSWQpIHtcbiAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhIGRvdWJsZSBlcXVhbHMgYmVjYXVzZSBpbnRzIGFuZCBzdHJpbmdzIGNhbiBiZSBpbnRlcmNoYW5nZWQgaGVyZS5cbiAgICAgICAgICAgICAgdG9JZCA9IGNsdXN0ZXJOb2RlUHJvcGVydGllcy5pZDtcbiAgICAgICAgICAgICAgZnJvbUlkID0gZWRnZS5mcm9tSWQ7XG4gICAgICAgICAgICAgIG90aGVyTm9kZUlkID0gZnJvbUlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdG9JZCA9IGVkZ2UudG9JZDtcbiAgICAgICAgICAgICAgZnJvbUlkID0gY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkO1xuICAgICAgICAgICAgICBvdGhlck5vZGVJZCA9IHRvSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gT25seSBlZGdlcyBmcm9tIHRoZSBjbHVzdGVyIG91dHdhcmRzIGFyZSBiZWluZyByZXBsYWNlZC5cbiAgICAgICAgICBpZiAoY2hpbGROb2Rlc09ialtvdGhlck5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3JlYXRlRWRnZXMucHVzaCh7IGVkZ2U6IGVkZ2UsIGZyb21JZDogZnJvbUlkLCB0b0lkOiB0b0lkIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gSGVyZSB3ZSBhY3R1YWxseSBjcmVhdGUgdGhlIHJlcGxhY2VtZW50IGVkZ2VzLlxuICAgIC8vXG4gICAgLy8gV2UgY291bGQgbm90IGRvIHRoaXMgaW4gdGhlIGxvb3AgYWJvdmUgYXMgdGhlIGNyZWF0aW9uIHByb2Nlc3NcbiAgICAvLyB3b3VsZCBhZGQgYW4gZWRnZSB0byB0aGUgZWRnZXMgYXJyYXkgd2UgYXJlIGl0ZXJhdGluZyBvdmVyLlxuICAgIC8vXG4gICAgLy8gTk9URTogYSBjbHVzdGVyZWQgZWRnZSBjYW4gaGF2ZSBtdWx0aXBsZSBiYXNlIGVkZ2VzIVxuICAgIC8vXG4gICAgY29uc3QgbmV3RWRnZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBjbHVzdGVyIGVkZ2Ugd2hpY2ggbWF0Y2hlcyB0aGUgZ2l2ZW4gY3JlYXRlZCBlZGdlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHt2aXMuRWRnZX0gY3JlYXRlZEVkZ2VcbiAgICAgKiBAcmV0dXJucyB7dmlzLkVkZ2V9XG4gICAgICovXG4gICAgY29uc3QgZ2V0TmV3RWRnZSA9IGZ1bmN0aW9uIChjcmVhdGVkRWRnZSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuZXdFZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBuZXdFZGdlID0gbmV3RWRnZXNbal07XG5cbiAgICAgICAgLy8gV2UgcmVwbGFjZSBib3RoIHRvIGFuZCBmcm9tIGVkZ2VzIHdpdGggYSBzaW5nbGUgY2x1c3RlciBlZGdlXG4gICAgICAgIGNvbnN0IG1hdGNoVG9EaXJlY3Rpb24gPVxuICAgICAgICAgIGNyZWF0ZWRFZGdlLmZyb21JZCA9PT0gbmV3RWRnZS5mcm9tSWQgJiZcbiAgICAgICAgICBjcmVhdGVkRWRnZS50b0lkID09PSBuZXdFZGdlLnRvSWQ7XG4gICAgICAgIGNvbnN0IG1hdGNoRnJvbURpcmVjdGlvbiA9XG4gICAgICAgICAgY3JlYXRlZEVkZ2UuZnJvbUlkID09PSBuZXdFZGdlLnRvSWQgJiZcbiAgICAgICAgICBjcmVhdGVkRWRnZS50b0lkID09PSBuZXdFZGdlLmZyb21JZDtcblxuICAgICAgICBpZiAobWF0Y2hUb0RpcmVjdGlvbiB8fCBtYXRjaEZyb21EaXJlY3Rpb24pIHtcbiAgICAgICAgICByZXR1cm4gbmV3RWRnZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjcmVhdGVFZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgY3JlYXRlZEVkZ2UgPSBjcmVhdGVFZGdlc1tqXTtcbiAgICAgIGNvbnN0IGVkZ2UgPSBjcmVhdGVkRWRnZS5lZGdlO1xuICAgICAgbGV0IG5ld0VkZ2UgPSBnZXROZXdFZGdlKGNyZWF0ZWRFZGdlKTtcblxuICAgICAgaWYgKG5ld0VkZ2UgPT09IG51bGwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgY2x1c3RlcmVkIGVkZ2UgZm9yIHRoaXMgY29ubmVjdGlvblxuICAgICAgICBuZXdFZGdlID0gdGhpcy5fY3JlYXRlQ2x1c3RlcmVkRWRnZShcbiAgICAgICAgICBjcmVhdGVkRWRnZS5mcm9tSWQsXG4gICAgICAgICAgY3JlYXRlZEVkZ2UudG9JZCxcbiAgICAgICAgICBlZGdlLFxuICAgICAgICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICAgICAgICApO1xuXG4gICAgICAgIG5ld0VkZ2VzLnB1c2gobmV3RWRnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLnB1c2goZWRnZS5pZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFsc28gcmVmZXJlbmNlIHRoZSBuZXcgZWRnZSBpbiB0aGUgb2xkIGVkZ2VcbiAgICAgIHRoaXMuYm9keS5lZGdlc1tlZGdlLmlkXS5lZGdlUmVwbGFjZWRCeUlkID0gbmV3RWRnZS5pZDtcblxuICAgICAgLy8gaGlkZSB0aGUgcmVwbGFjZWQgZWRnZVxuICAgICAgdGhpcy5fYmFja3VwRWRnZU9wdGlvbnMoZWRnZSk7XG4gICAgICBlZGdlLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3VwcGxpZWQgdG8gdGhlIGRpZmZlcmVudCBjbHVzdGVyIGZ1bmN0aW9uc1xuICAgKiBmb3IgY2VydGFpbiBmaWVsZHMgYW5kIGluc2VydHMgZGVmYXVsdHMgaWYgbmVlZGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrT3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICBpZiAob3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXMgPSB7fTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9ICAgIGNoaWxkTm9kZXNPYmogICAgICAgICB8IG9iamVjdCB3aXRoIG5vZGUgb2JqZWN0cywgaWQgYXMga2V5cywgc2FtZSBhcyBjaGlsZE5vZGVzIGV4Y2VwdCBpdCBhbHNvIGNvbnRhaW5zIGEgc291cmNlIG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9ICAgIGNoaWxkRWRnZXNPYmogICAgICAgICB8IG9iamVjdCB3aXRoIGVkZ2Ugb2JqZWN0cywgaWQgYXMga2V5c1xuICAgKiBAcGFyYW0ge0FycmF5fSAgICAgb3B0aW9ucyAgICAgICAgICAgICAgIHwgb2JqZWN0IHdpdGgge2NsdXN0ZXJOb2RlUHJvcGVydGllcywgY2x1c3RlckVkZ2VQcm9wZXJ0aWVzLCBwcm9jZXNzUHJvcGVydGllc31cbiAgICogQHBhcmFtIHtib29sZWFufSAgIHJlZnJlc2hEYXRhIHwgd2hlbiB0cnVlLCBkbyBub3Qgd3JhcCB1cFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NsdXN0ZXIoY2hpbGROb2Rlc09iaiwgY2hpbGRFZGdlc09iaiwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgLy8gUmVtb3ZlIG5vZGVzIHdoaWNoIGFyZSBhbHJlYWR5IGNsdXN0ZXJlZFxuICAgIGNvbnN0IHRtcE5vZGVzVG9SZW1vdmUgPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkTm9kZXNPYmosIG5vZGVJZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG1wTm9kZXNUb1JlbW92ZS5wdXNoKG5vZGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IHRtcE5vZGVzVG9SZW1vdmUubGVuZ3RoOyArK24pIHtcbiAgICAgIGRlbGV0ZSBjaGlsZE5vZGVzT2JqW3RtcE5vZGVzVG9SZW1vdmVbbl1dO1xuICAgIH1cblxuICAgIC8vIGtpbGwgY29uZGl0aW9uOiBubyBub2RlcyBkb24ndCBib3RoZXJcbiAgICBpZiAoT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhbGxvdyBjbHVzdGVycyBvZiAxIGlmIG9wdGlvbnMgYWxsb3dcbiAgICBpZiAoXG4gICAgICBPYmplY3Qua2V5cyhjaGlsZE5vZGVzT2JqKS5sZW5ndGggPT0gMSAmJlxuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuYWxsb3dTaW5nbGVOb2RlQ2x1c3RlciAhPSB0cnVlXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGNsdXN0ZXJOb2RlUHJvcGVydGllcyA9IGRlZXBFeHRlbmQoe30sIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzKTtcblxuICAgIC8vIGNvbnN0cnVjdCB0aGUgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzXG4gICAgaWYgKG9wdGlvbnMucHJvY2Vzc1Byb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZ2V0IHRoZSBjaGlsZE5vZGUgb3B0aW9uc1xuICAgICAgY29uc3QgY2hpbGROb2Rlc09wdGlvbnMgPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNoaWxkTm9kZXNPYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZE5vZGVzT2JqLCBub2RlSWQpKSB7XG4gICAgICAgICAgY29uc3QgY2xvbmVkT3B0aW9ucyA9IE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhjaGlsZE5vZGVzT2JqW25vZGVJZF0pO1xuICAgICAgICAgIGNoaWxkTm9kZXNPcHRpb25zLnB1c2goY2xvbmVkT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZ2V0IGNsdXN0ZXIgcHJvcGVydGllcyBiYXNlZCBvbiBjaGlsZE5vZGVzXG4gICAgICBjb25zdCBjaGlsZEVkZ2VzT3B0aW9ucyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBlZGdlSWQgaW4gY2hpbGRFZGdlc09iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkRWRnZXNPYmosIGVkZ2VJZCkpIHtcbiAgICAgICAgICAvLyB0aGVzZSBjbHVzdGVyIGVkZ2VzIHdpbGwgYmUgcmVtb3ZlZCBvbiBjcmVhdGlvbiBvZiB0aGUgY2x1c3Rlci5cbiAgICAgICAgICBpZiAoZWRnZUlkLnN1YnN0cigwLCAxMikgIT09IFwiY2x1c3RlckVkZ2U6XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lZE9wdGlvbnMgPSBOZXR3b3JrVXRpbC5jbG9uZU9wdGlvbnMoXG4gICAgICAgICAgICAgIGNoaWxkRWRnZXNPYmpbZWRnZUlkXSxcbiAgICAgICAgICAgICAgXCJlZGdlXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjaGlsZEVkZ2VzT3B0aW9ucy5wdXNoKGNsb25lZE9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMgPSBvcHRpb25zLnByb2Nlc3NQcm9wZXJ0aWVzKFxuICAgICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMsXG4gICAgICAgIGNoaWxkTm9kZXNPcHRpb25zLFxuICAgICAgICBjaGlsZEVkZ2VzT3B0aW9uc1xuICAgICAgKTtcbiAgICAgIGlmICghY2x1c3Rlck5vZGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBwcm9jZXNzUHJvcGVydGllcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gcHJvcGVydGllcyFcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgYW4gdW5pcXVlIGlkO1xuICAgIGlmIChjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkID0gXCJjbHVzdGVyOlwiICsgcmFuZG9tVVVJRCgpO1xuICAgIH1cbiAgICBjb25zdCBjbHVzdGVySWQgPSBjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQ7XG5cbiAgICBpZiAoY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmxhYmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcy5sYWJlbCA9IFwiY2x1c3RlclwiO1xuICAgIH1cblxuICAgIC8vIGdpdmUgdGhlIGNsdXN0ZXJOb2RlIGEgcG9zaXRpb24gaWYgaXQgZG9lcyBub3QgaGF2ZSBvbmUuXG4gICAgbGV0IHBvcyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcG9zID0gdGhpcy5fZ2V0Q2x1c3RlclBvc2l0aW9uKGNoaWxkTm9kZXNPYmopO1xuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnggPSBwb3MueDtcbiAgICB9XG4gICAgaWYgKGNsdXN0ZXJOb2RlUHJvcGVydGllcy55ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwb3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwb3MgPSB0aGlzLl9nZXRDbHVzdGVyUG9zaXRpb24oY2hpbGROb2Rlc09iaik7XG4gICAgICB9XG4gICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMueSA9IHBvcy55O1xuICAgIH1cblxuICAgIC8vIGZvcmNlIHRoZSBJRCB0byByZW1haW4gdGhlIHNhbWVcbiAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQgPSBjbHVzdGVySWQ7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGNsdXN0ZXIgTm9kZVxuICAgIC8vIE5vdGUgdGhhdCBhbGxvd1NpbmdsZU5vZGVDbHVzdGVyLCBpZiBwcmVzZW50LCBpcyBzdG9yZWQgaW4gdGhlIG9wdGlvbnMgYXMgd2VsbFxuICAgIGNvbnN0IGNsdXN0ZXJOb2RlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVOb2RlKFxuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgICAgQ2x1c3RlclxuICAgICk7XG4gICAgY2x1c3Rlck5vZGUuY29udGFpbmVkTm9kZXMgPSBjaGlsZE5vZGVzT2JqO1xuICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzID0gY2hpbGRFZGdlc09iajtcbiAgICAvLyBjYWNoZSBhIGNvcHkgZnJvbSB0aGUgY2x1c3RlciBlZGdlIHByb3BlcnRpZXMgaWYgd2UgaGF2ZSB0byByZWNvbm5lY3Qgb3RoZXJzIGxhdGVyIG9uXG4gICAgY2x1c3Rlck5vZGUuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzID0gb3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXM7XG5cbiAgICAvLyBmaW5hbGx5IHB1dCB0aGUgY2x1c3RlciBub2RlIGludG8gZ2xvYmFsXG4gICAgdGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJOb2RlUHJvcGVydGllcy5pZF0gPSBjbHVzdGVyTm9kZTtcblxuICAgIHRoaXMuX2NsdXN0ZXJFZGdlcyhcbiAgICAgIGNoaWxkTm9kZXNPYmosXG4gICAgICBjaGlsZEVkZ2VzT2JqLFxuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgICAgb3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgLy8gc2V0IElEIHRvIHVuZGVmaW5lZCBzbyBubyBkdXBsaWNhdGVzIGFyaXNlXG4gICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gd3JhcCB1cFxuICAgIGlmIChyZWZyZXNoRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFZGdlfSBlZGdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYmFja3VwRWRnZU9wdGlvbnMoZWRnZSkge1xuICAgIGlmICh0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPSB7IHBoeXNpY3M6IGVkZ2Uub3B0aW9ucy5waHlzaWNzIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc3RvcmVFZGdlKGVkZ2UpIHtcbiAgICBjb25zdCBvcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdO1xuICAgIGlmIChvcmlnaW5hbE9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZWRnZS5zZXRPcHRpb25zKHsgcGh5c2ljczogb3JpZ2luYWxPcHRpb25zLnBoeXNpY3MgfSk7XG4gICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlLmlkXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBub2RlIGlzIGEgY2x1c3Rlci5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBpc0NsdXN0ZXIobm9kZUlkKSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5pc0NsdXN0ZXIgPT09IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb2RlIGRvZXMgbm90IGV4aXN0LlwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgY2x1c3RlciBub2RlIGJhc2VkIG9uIHdoYXQncyBpbnNpZGVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNoaWxkTm9kZXNPYmogICAgfCBvYmplY3Qgd2l0aCBub2RlIG9iamVjdHMsIGlkIGFzIGtleXNcbiAgICogQHJldHVybnMge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q2x1c3RlclBvc2l0aW9uKGNoaWxkTm9kZXNPYmopIHtcbiAgICBjb25zdCBjaGlsZEtleXMgPSBPYmplY3Qua2V5cyhjaGlsZE5vZGVzT2JqKTtcbiAgICBsZXQgbWluWCA9IGNoaWxkTm9kZXNPYmpbY2hpbGRLZXlzWzBdXS54O1xuICAgIGxldCBtYXhYID0gY2hpbGROb2Rlc09ialtjaGlsZEtleXNbMF1dLng7XG4gICAgbGV0IG1pblkgPSBjaGlsZE5vZGVzT2JqW2NoaWxkS2V5c1swXV0ueTtcbiAgICBsZXQgbWF4WSA9IGNoaWxkTm9kZXNPYmpbY2hpbGRLZXlzWzBdXS55O1xuICAgIGxldCBub2RlO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgY2hpbGRLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gY2hpbGROb2Rlc09ialtjaGlsZEtleXNbaV1dO1xuICAgICAgbWluWCA9IG5vZGUueCA8IG1pblggPyBub2RlLnggOiBtaW5YO1xuICAgICAgbWF4WCA9IG5vZGUueCA+IG1heFggPyBub2RlLnggOiBtYXhYO1xuICAgICAgbWluWSA9IG5vZGUueSA8IG1pblkgPyBub2RlLnkgOiBtaW5ZO1xuICAgICAgbWF4WSA9IG5vZGUueSA+IG1heFkgPyBub2RlLnkgOiBtYXhZO1xuICAgIH1cblxuICAgIHJldHVybiB7IHg6IDAuNSAqIChtaW5YICsgbWF4WCksIHk6IDAuNSAqIChtaW5ZICsgbWF4WSkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIGEgY2x1c3RlciBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkVkZ2UuaWR9ICBjbHVzdGVyTm9kZUlkIHwgdGhlIElEIG9mIHRoZSBjbHVzdGVyIG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSByZWZyZXNoRGF0YSB8IHdyYXAgdXAgYWZ0ZXJ3YXJkcyBpZiBub3QgdHJ1ZVxuICAgKi9cbiAgb3BlbkNsdXN0ZXIoY2x1c3Rlck5vZGVJZCwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgLy8ga2lsbCBjb25kaXRpb25zXG4gICAgaWYgKGNsdXN0ZXJOb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY2x1c3Rlck5vZGVJZCBzdXBwbGllZCB0byBvcGVuQ2x1c3Rlci5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgY2x1c3Rlck5vZGUgPSB0aGlzLmJvZHkubm9kZXNbY2x1c3Rlck5vZGVJZF07XG5cbiAgICBpZiAoY2x1c3Rlck5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSBjbHVzdGVyTm9kZUlkIHN1cHBsaWVkIHRvIG9wZW5DbHVzdGVyIGRvZXMgbm90IGV4aXN0LlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjbHVzdGVyTm9kZS5pc0NsdXN0ZXIgIT09IHRydWUgfHxcbiAgICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZE5vZGVzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBub2RlOlwiICsgY2x1c3Rlck5vZGVJZCArIFwiIGlzIG5vdCBhIHZhbGlkIGNsdXN0ZXIuXCIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGN1cnJlbnQgY2x1c3RlciBpcyBjbHVzdGVyZWQgaXRzZWxmXG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLmZpbmROb2RlKGNsdXN0ZXJOb2RlSWQpO1xuICAgIGNvbnN0IHBhcmVudEluZGV4ID0gc3RhY2suaW5kZXhPZihjbHVzdGVyTm9kZUlkKSAtIDE7XG4gICAgaWYgKHBhcmVudEluZGV4ID49IDApIHtcbiAgICAgIC8vIEN1cnJlbnQgY2x1c3RlciBpcyBjbHVzdGVyZWQ7IHRyYW5zZmVyIGNvbnRhaW5lZCBub2RlcyBhbmQgZWRnZXMgdG8gcGFyZW50XG4gICAgICBjb25zdCBwYXJlbnRDbHVzdGVyTm9kZUlkID0gc3RhY2tbcGFyZW50SW5kZXhdO1xuICAgICAgY29uc3QgcGFyZW50Q2x1c3Rlck5vZGUgPSB0aGlzLmJvZHkubm9kZXNbcGFyZW50Q2x1c3Rlck5vZGVJZF07XG5cbiAgICAgIC8vIGNsdXN0ZXJpbmcuY2x1c3RlcmVkTm9kZXMgYW5kIGNsdXN0ZXJpbmcuY2x1c3RlcmVkRWRnZXMgcmVtYWluIHVuY2hhbmdlZFxuICAgICAgcGFyZW50Q2x1c3Rlck5vZGUuX29wZW5DaGlsZENsdXN0ZXIoY2x1c3Rlck5vZGVJZCk7XG5cbiAgICAgIC8vIEFsbCBjb21wb25lbnRzIG9mIGNoaWxkIGNsdXN0ZXIgbm9kZSBoYXZlIGJlZW4gdHJhbnNmZXJyZWQuIEl0IGNhbiBkaWUgbm93LlxuICAgICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1tjbHVzdGVyTm9kZUlkXTtcbiAgICAgIGlmIChyZWZyZXNoRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbWFpbiBib2R5XG4gICAgY29uc3QgY29udGFpbmVkTm9kZXMgPSBjbHVzdGVyTm9kZS5jb250YWluZWROb2RlcztcbiAgICBjb25zdCBjb250YWluZWRFZGdlcyA9IGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzO1xuXG4gICAgLy8gYWxsb3cgdGhlIHVzZXIgdG8gcG9zaXRpb24gdGhlIG5vZGVzIGFmdGVyIHJlbGVhc2UuXG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvcHRpb25zLnJlbGVhc2VGdW5jdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5yZWxlYXNlRnVuY3Rpb24gPT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgY29uc3QgcG9zaXRpb25zID0ge307XG4gICAgICBjb25zdCBjbHVzdGVyUG9zaXRpb24gPSB7IHg6IGNsdXN0ZXJOb2RlLngsIHk6IGNsdXN0ZXJOb2RlLnkgfTtcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNvbnRhaW5lZE5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBjb25zdCBjb250YWluZWROb2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgcG9zaXRpb25zW25vZGVJZF0gPSB7IHg6IGNvbnRhaW5lZE5vZGUueCwgeTogY29udGFpbmVkTm9kZS55IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld1Bvc2l0aW9ucyA9IG9wdGlvbnMucmVsZWFzZUZ1bmN0aW9uKGNsdXN0ZXJQb3NpdGlvbiwgcG9zaXRpb25zKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlSWQgaW4gY29udGFpbmVkTm9kZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb250YWluZWROb2Rlcywgbm9kZUlkKSkge1xuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lZE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBpZiAobmV3UG9zaXRpb25zW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGFpbmVkTm9kZS54ID1cbiAgICAgICAgICAgICAgbmV3UG9zaXRpb25zW25vZGVJZF0ueCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBjbHVzdGVyTm9kZS54XG4gICAgICAgICAgICAgICAgOiBuZXdQb3NpdGlvbnNbbm9kZUlkXS54O1xuICAgICAgICAgICAgY29udGFpbmVkTm9kZS55ID1cbiAgICAgICAgICAgICAgbmV3UG9zaXRpb25zW25vZGVJZF0ueSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBjbHVzdGVyTm9kZS55XG4gICAgICAgICAgICAgICAgOiBuZXdQb3NpdGlvbnNbbm9kZUlkXS55O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb3B5IHRoZSBwb3NpdGlvbiBmcm9tIHRoZSBjbHVzdGVyXG4gICAgICBmb3JFYWNoKGNvbnRhaW5lZE5vZGVzLCBmdW5jdGlvbiAoY29udGFpbmVkTm9kZSkge1xuICAgICAgICAvLyBpbmhlcml0IHBvc2l0aW9uXG4gICAgICAgIGlmIChjb250YWluZWROb2RlLm9wdGlvbnMuZml4ZWQueCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjb250YWluZWROb2RlLnggPSBjbHVzdGVyTm9kZS54O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250YWluZWROb2RlLm9wdGlvbnMuZml4ZWQueSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjb250YWluZWROb2RlLnkgPSBjbHVzdGVyTm9kZS55O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyByZWxlYXNlIG5vZGVzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gY29udGFpbmVkTm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVkTm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuXG4gICAgICAgIC8vIGluaGVyaXQgc3BlZWRcbiAgICAgICAgY29udGFpbmVkTm9kZS52eCA9IGNsdXN0ZXJOb2RlLnZ4O1xuICAgICAgICBjb250YWluZWROb2RlLnZ5ID0gY2x1c3Rlck5vZGUudnk7XG5cbiAgICAgICAgY29udGFpbmVkTm9kZS5zZXRPcHRpb25zKHsgcGh5c2ljczogdHJ1ZSB9KTtcblxuICAgICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvcHkgdGhlIGNsdXN0ZXJOb2RlIGVkZ2VzIGJlY2F1c2Ugd2UgY2Fubm90IGl0ZXJhdGUgb3ZlciBhbiBvYmplY3QgdGhhdCB3ZSBhZGQgb3IgcmVtb3ZlIGZyb20uXG4gICAgY29uc3QgZWRnZXNUb0JlRGVsZXRlZCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2x1c3Rlck5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVkZ2VzVG9CZURlbGV0ZWQucHVzaChjbHVzdGVyTm9kZS5lZGdlc1tpXSk7XG4gICAgfVxuXG4gICAgLy8gYWN0dWFsbHkgaGFuZGxpbmcgdGhlIGRlbGV0aW5nLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXNUb0JlRGVsZXRlZC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzVG9CZURlbGV0ZWRbaV07XG4gICAgICBjb25zdCBvdGhlck5vZGVJZCA9IHRoaXMuX2dldENvbm5lY3RlZElkKGVkZ2UsIGNsdXN0ZXJOb2RlSWQpO1xuICAgICAgY29uc3Qgb3RoZXJOb2RlID0gdGhpcy5jbHVzdGVyZWROb2Rlc1tvdGhlck5vZGVJZF07XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCB0cmFuc2ZlcklkID0gZWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkc1tqXTtcbiAgICAgICAgY29uc3QgdHJhbnNmZXJFZGdlID0gdGhpcy5ib2R5LmVkZ2VzW3RyYW5zZmVySWRdO1xuICAgICAgICBpZiAodHJhbnNmZXJFZGdlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGlmIHRoZSBvdGhlciBub2RlIGlzIGluIGFub3RoZXIgY2x1c3Rlciwgd2UgdHJhbnNmZXIgb3duZXJzaGlwIG9mIHRoaXMgZWRnZSB0byB0aGUgb3RoZXIgY2x1c3RlclxuICAgICAgICBpZiAob3RoZXJOb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyB0cmFuc2ZlciBvd25lcnNoaXA6XG4gICAgICAgICAgY29uc3Qgb3RoZXJDbHVzdGVyID0gdGhpcy5ib2R5Lm5vZGVzW290aGVyTm9kZS5jbHVzdGVySWRdO1xuICAgICAgICAgIG90aGVyQ2x1c3Rlci5jb250YWluZWRFZGdlc1t0cmFuc2ZlckVkZ2UuaWRdID0gdHJhbnNmZXJFZGdlO1xuXG4gICAgICAgICAgLy8gZGVsZXRlIGxvY2FsIHJlZmVyZW5jZVxuICAgICAgICAgIGRlbGV0ZSBjb250YWluZWRFZGdlc1t0cmFuc2ZlckVkZ2UuaWRdO1xuXG4gICAgICAgICAgLy8gZ2V0IHRvIGFuZCBmcm9tXG4gICAgICAgICAgbGV0IGZyb21JZCA9IHRyYW5zZmVyRWRnZS5mcm9tSWQ7XG4gICAgICAgICAgbGV0IHRvSWQgPSB0cmFuc2ZlckVkZ2UudG9JZDtcbiAgICAgICAgICBpZiAodHJhbnNmZXJFZGdlLnRvSWQgPT0gb3RoZXJOb2RlSWQpIHtcbiAgICAgICAgICAgIHRvSWQgPSBvdGhlck5vZGUuY2x1c3RlcklkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcm9tSWQgPSBvdGhlck5vZGUuY2x1c3RlcklkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgY2x1c3RlciBlZGdlIGZyb20gdGhlIG90aGVyQ2x1c3RlclxuICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsdXN0ZXJlZEVkZ2UoXG4gICAgICAgICAgICBmcm9tSWQsXG4gICAgICAgICAgICB0b0lkLFxuICAgICAgICAgICAgdHJhbnNmZXJFZGdlLFxuICAgICAgICAgICAgb3RoZXJDbHVzdGVyLmNsdXN0ZXJFZGdlUHJvcGVydGllcyxcbiAgICAgICAgICAgIHsgaGlkZGVuOiBmYWxzZSwgcGh5c2ljczogdHJ1ZSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9yZXN0b3JlRWRnZSh0cmFuc2ZlckVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVkZ2UucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRoZSByZWxlYXNpbmcgb2YgdGhlIGVkZ2VzXG4gICAgZm9yIChjb25zdCBlZGdlSWQgaW4gY29udGFpbmVkRWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkRWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgdGhpcy5fcmVzdG9yZUVkZ2UoY29udGFpbmVkRWRnZXNbZWRnZUlkXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGNsdXN0ZXJOb2RlXG4gICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1tjbHVzdGVyTm9kZUlkXTtcblxuICAgIGlmIChyZWZyZXNoRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDbHVzdGVyLmlkfSBjbHVzdGVySWRcbiAgICogQHJldHVybnMge0FycmF5LjxOb2RlLmlkPn1cbiAgICovXG4gIGdldE5vZGVzSW5DbHVzdGVyKGNsdXN0ZXJJZCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSBbXTtcbiAgICBpZiAodGhpcy5pc0NsdXN0ZXIoY2x1c3RlcklkKSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgY29udGFpbmVkTm9kZXMgPSB0aGlzLmJvZHkubm9kZXNbY2x1c3RlcklkXS5jb250YWluZWROb2RlcztcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNvbnRhaW5lZE5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBub2Rlc0FycmF5LnB1c2godGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0uaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGVzQXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGFjayBjbHVzdGVySWQncyB0aGF0IGEgY2VydGFpbiBub2RlIHJlc2lkZXMgaW4uIGNsdXN0ZXIgQSAtPiBjbHVzdGVyIEIgLT4gY2x1c3RlciBDIC0+IG5vZGVcbiAgICpcbiAgICogSWYgYSBub2RlIGNhbid0IGJlIGZvdW5kIGluIHRoZSBjaGFpbiwgcmV0dXJuIGFuIGVtcHR5IGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5vZGVJZFxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBmaW5kTm9kZShub2RlSWQpIHtcbiAgICBjb25zdCBzdGFjayA9IFtdO1xuICAgIGNvbnN0IG1heCA9IDEwMDtcbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgbGV0IG5vZGU7XG5cbiAgICB3aGlsZSAodGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQgJiYgY291bnRlciA8IG1heCkge1xuICAgICAgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICAgICAgc3RhY2sucHVzaChub2RlLmlkKTtcblxuICAgICAgbm9kZUlkID0gdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdLmNsdXN0ZXJJZDtcbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG5cbiAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICAgIHN0YWNrLnB1c2gobm9kZS5pZCk7XG5cbiAgICBzdGFjay5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzaW5nIGEgY2x1c3RlcmVkIG5vZGVJZCwgdXBkYXRlIHdpdGggdGhlIG5ldyBvcHRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gY2x1c3RlcmVkTm9kZUlkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdPcHRpb25zXG4gICAqL1xuICB1cGRhdGVDbHVzdGVyZWROb2RlKGNsdXN0ZXJlZE5vZGVJZCwgbmV3T3B0aW9ucykge1xuICAgIGlmIChjbHVzdGVyZWROb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY2x1c3RlcmVkTm9kZUlkIHN1cHBsaWVkIHRvIHVwZGF0ZUNsdXN0ZXJlZE5vZGUuXCIpO1xuICAgIH1cbiAgICBpZiAobmV3T3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBuZXdPcHRpb25zIHN1cHBsaWVkIHRvIHVwZGF0ZUNsdXN0ZXJlZE5vZGUuXCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJlZE5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSBjbHVzdGVyZWROb2RlSWQgc3VwcGxpZWQgdG8gdXBkYXRlQ2x1c3RlcmVkTm9kZSBkb2VzIG5vdCBleGlzdC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkubm9kZXNbY2x1c3RlcmVkTm9kZUlkXS5zZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gIH1cblxuICAvKipcbiAgICogVXNpbmcgYSBiYXNlIGVkZ2VJZCwgdXBkYXRlIGFsbCByZWxhdGVkIGNsdXN0ZXJlZCBlZGdlcyB3aXRoIHRoZSBuZXcgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBzdGFydEVkZ2VJZFxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9uc1xuICAgKi9cbiAgdXBkYXRlRWRnZShzdGFydEVkZ2VJZCwgbmV3T3B0aW9ucykge1xuICAgIGlmIChzdGFydEVkZ2VJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdGFydEVkZ2VJZCBzdXBwbGllZCB0byB1cGRhdGVFZGdlLlwiKTtcbiAgICB9XG4gICAgaWYgKG5ld09wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbmV3T3B0aW9ucyBzdXBwbGllZCB0byB1cGRhdGVFZGdlLlwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9keS5lZGdlc1tzdGFydEVkZ2VJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0YXJ0RWRnZUlkIHN1cHBsaWVkIHRvIHVwZGF0ZUVkZ2UgZG9lcyBub3QgZXhpc3QuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbEVkZ2VJZHMgPSB0aGlzLmdldENsdXN0ZXJlZEVkZ2VzKHN0YXJ0RWRnZUlkKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbEVkZ2VJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbYWxsRWRnZUlkc1tpXV07XG4gICAgICBlZGdlLnNldE9wdGlvbnMobmV3T3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3RhY2sgb2YgY2x1c3RlckVkZ2VJZCdzICgrYmFzZSBlZGdlaWQpIHRoYXQgYSBiYXNlIGVkZ2UgaXMgdGhlIHNhbWUgYXMuIGNsdXN0ZXIgZWRnZSBDIC0+IGNsdXN0ZXIgZWRnZSBCIC0+IGNsdXN0ZXIgZWRnZSBBIC0+IGJhc2UgZWRnZShlZGdlSWQpXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkVkZ2UuaWR9IGVkZ2VJZFxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHZpcy5FZGdlLmlkPn1cbiAgICovXG4gIGdldENsdXN0ZXJlZEVkZ2VzKGVkZ2VJZCkge1xuICAgIGNvbnN0IHN0YWNrID0gW107XG4gICAgY29uc3QgbWF4ID0gMTAwO1xuICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgIHdoaWxlIChcbiAgICAgIGVkZ2VJZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBjb3VudGVyIDwgbWF4XG4gICAgKSB7XG4gICAgICBzdGFjay5wdXNoKHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdLmlkKTtcbiAgICAgIGVkZ2VJZCA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdLmVkZ2VSZXBsYWNlZEJ5SWQ7XG4gICAgICBjb3VudGVyKys7XG4gICAgfVxuICAgIHN0YWNrLnJldmVyc2UoKTtcbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBiYXNlIGVkZ2UgaWQgb2YgY2x1c3RlckVkZ2VJZC4gY2x1c3RlciBlZGdlIChjbHVzdGVyZWRFZGdlSWQpIC0+IGNsdXN0ZXIgZWRnZSBCIC0+IGNsdXN0ZXIgZWRnZSBDIC0+IGJhc2UgZWRnZVxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBjbHVzdGVyZWRFZGdlSWRcbiAgICogQHJldHVybnMge3Zpcy5FZGdlLmlkfSBiYXNlRWRnZUlkXG4gICAqXG4gICAqIFRPRE86IGRlcHJlY2F0ZSBpbiA1LjAuMC4gTWV0aG9kIGdldEJhc2VFZGdlcygpIGlzIHRoZSBjb3JyZWN0IG9uZSB0byB1c2UuXG4gICAqL1xuICBnZXRCYXNlRWRnZShjbHVzdGVyZWRFZGdlSWQpIHtcbiAgICAvLyBKdXN0IGtsdWRnZSB0aGlzIGJ5IHJldHVybmluZyB0aGUgZmlyc3QgYmFzZSBlZGdlIGlkIGZvdW5kXG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZUVkZ2VzKGNsdXN0ZXJlZEVkZ2VJZClbMF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCByZWd1bGFyIGVkZ2VzIGZvciB0aGlzIGNsdXN0ZXJlZCBlZGdlIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBjbHVzdGVyZWRFZGdlSWRcbiAgICogQHJldHVybnMge0FycmF5Ljx2aXMuRWRnZS5pZD59IGFsbCBiYXNlRWRnZUlkJ3MgdW5kZXIgdGhpcyBjbHVzdGVyZWQgZWRnZVxuICAgKi9cbiAgZ2V0QmFzZUVkZ2VzKGNsdXN0ZXJlZEVkZ2VJZCkge1xuICAgIGNvbnN0IElkc1RvSGFuZGxlID0gW2NsdXN0ZXJlZEVkZ2VJZF07XG4gICAgY29uc3QgZG9uZUlkcyA9IFtdO1xuICAgIGNvbnN0IGZvdW5kSWRzID0gW107XG4gICAgY29uc3QgbWF4ID0gMTAwO1xuICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgIHdoaWxlIChJZHNUb0hhbmRsZS5sZW5ndGggPiAwICYmIGNvdW50ZXIgPCBtYXgpIHtcbiAgICAgIGNvbnN0IG5leHRJZCA9IElkc1RvSGFuZGxlLnBvcCgpO1xuICAgICAgaWYgKG5leHRJZCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTsgLy8gUGFyYW5vaWEgaGVyZSBhbmQgb253YXJkc1xuICAgICAgY29uc3QgbmV4dEVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbbmV4dElkXTtcbiAgICAgIGlmIChuZXh0RWRnZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgIGNvdW50ZXIrKztcblxuICAgICAgY29uc3QgcmVwbGFjaW5nSWRzID0gbmV4dEVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHM7XG4gICAgICBpZiAocmVwbGFjaW5nSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbmV4dElkIGlzIGEgYmFzZSBpZFxuICAgICAgICBmb3VuZElkcy5wdXNoKG5leHRJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbm90aGVyIGNsdXN0ZXIgZWRnZSwgdW5yYXZlbCB0aGlzIG9uZSBhcyB3ZWxsXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVwbGFjaW5nSWRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY29uc3QgcmVwbGFjaW5nSWQgPSByZXBsYWNpbmdJZHNbaV07XG5cbiAgICAgICAgICAvLyBEb24ndCBhZGQgaWYgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAgICAgLy8gVE9ETzogbmV2ZXIgdHJpZ2dlcnM7IGZpbmQgYSB0ZXN0LWNhc2Ugd2hpY2ggZG9lc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIElkc1RvSGFuZGxlLmluZGV4T2YocmVwbGFjaW5nSWRzKSAhPT0gLTEgfHxcbiAgICAgICAgICAgIGRvbmVJZHMuaW5kZXhPZihyZXBsYWNpbmdJZHMpICE9PSAtMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgSWRzVG9IYW5kbGUucHVzaChyZXBsYWNpbmdJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZG9uZUlkcy5wdXNoKG5leHRJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSWQgdGhlIG5vZGUgaXMgY29ubmVjdGVkIHRvXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkVkZ2V9IGVkZ2VcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q29ubmVjdGVkSWQoZWRnZSwgbm9kZUlkKSB7XG4gICAgaWYgKGVkZ2UudG9JZCAhPSBub2RlSWQpIHtcbiAgICAgIHJldHVybiBlZGdlLnRvSWQ7XG4gICAgfSBlbHNlIGlmIChlZGdlLmZyb21JZCAhPSBub2RlSWQpIHtcbiAgICAgIHJldHVybiBlZGdlLmZyb21JZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVkZ2UuZnJvbUlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXZSBkZXRlcm1pbmUgaG93IG1hbnkgY29ubmVjdGlvbnMgZGVub3RlIGFuIGltcG9ydGFudCBodWIuXG4gICAqIFdlIHRha2UgdGhlIG1lYW4gKyAyKnN0ZCBhcyB0aGUgaW1wb3J0YW50IGh1YiBzaXplLiAoQXNzdW1pbmcgYSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIGRhdGEsIH4yLjIlKVxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEh1YlNpemUoKSB7XG4gICAgbGV0IGF2ZXJhZ2UgPSAwO1xuICAgIGxldCBhdmVyYWdlU3F1YXJlZCA9IDA7XG4gICAgbGV0IGh1YkNvdW50ZXIgPSAwO1xuICAgIGxldCBsYXJnZXN0SHViID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV07XG4gICAgICBpZiAobm9kZS5lZGdlcy5sZW5ndGggPiBsYXJnZXN0SHViKSB7XG4gICAgICAgIGxhcmdlc3RIdWIgPSBub2RlLmVkZ2VzLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGF2ZXJhZ2UgKz0gbm9kZS5lZGdlcy5sZW5ndGg7XG4gICAgICBhdmVyYWdlU3F1YXJlZCArPSBNYXRoLnBvdyhub2RlLmVkZ2VzLmxlbmd0aCwgMik7XG4gICAgICBodWJDb3VudGVyICs9IDE7XG4gICAgfVxuICAgIGF2ZXJhZ2UgPSBhdmVyYWdlIC8gaHViQ291bnRlcjtcbiAgICBhdmVyYWdlU3F1YXJlZCA9IGF2ZXJhZ2VTcXVhcmVkIC8gaHViQ291bnRlcjtcblxuICAgIGNvbnN0IHZhcmlhbmNlID0gYXZlcmFnZVNxdWFyZWQgLSBNYXRoLnBvdyhhdmVyYWdlLCAyKTtcbiAgICBjb25zdCBzdGFuZGFyZERldmlhdGlvbiA9IE1hdGguc3FydCh2YXJpYW5jZSk7XG5cbiAgICBsZXQgaHViVGhyZXNob2xkID0gTWF0aC5mbG9vcihhdmVyYWdlICsgMiAqIHN0YW5kYXJkRGV2aWF0aW9uKTtcblxuICAgIC8vIGFsd2F5cyBoYXZlIGF0IGxlYXN0IG9uZSB0byBjbHVzdGVyXG4gICAgaWYgKGh1YlRocmVzaG9sZCA+IGxhcmdlc3RIdWIpIHtcbiAgICAgIGh1YlRocmVzaG9sZCA9IGxhcmdlc3RIdWI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh1YlRocmVzaG9sZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZWRnZSBmb3IgdGhlIGNsdXN0ZXIgcmVwcmVzZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gZnJvbUlkXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gdG9JZFxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlfSBiYXNlRWRnZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY2x1c3RlckVkZ2VQcm9wZXJ0aWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHRyYU9wdGlvbnNcbiAgICogQHJldHVybnMge0VkZ2V9IG5ld2x5IGNyZWF0ZWQgY2x1c3RlcmVkIGVkZ2VcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVDbHVzdGVyZWRFZGdlKFxuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIGJhc2VFZGdlLFxuICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllcyxcbiAgICBleHRyYU9wdGlvbnNcbiAgKSB7XG4gICAgLy8gY29weSB0aGUgb3B0aW9ucyBvZiB0aGUgZWRnZSB3ZSB3aWxsIHJlcGxhY2VcbiAgICBjb25zdCBjbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKGJhc2VFZGdlLCBcImVkZ2VcIik7XG4gICAgLy8gbWFrZSBzdXJlIHRoZSBwcm9wZXJ0aWVzIG9mIGNsdXN0ZXJFZGdlcyBhcmUgc3VwZXJpbXBvc2VkIG9uIGl0XG4gICAgZGVlcEV4dGVuZChjbG9uZWRPcHRpb25zLCBjbHVzdGVyRWRnZVByb3BlcnRpZXMpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBlZGdlXG4gICAgY2xvbmVkT3B0aW9ucy5mcm9tID0gZnJvbUlkO1xuICAgIGNsb25lZE9wdGlvbnMudG8gPSB0b0lkO1xuICAgIGNsb25lZE9wdGlvbnMuaWQgPSBcImNsdXN0ZXJFZGdlOlwiICsgcmFuZG9tVVVJRCgpO1xuXG4gICAgLy8gYXBwbHkgdGhlIGVkZ2Ugc3BlY2lmaWMgb3B0aW9ucyB0byBpdCBpZiBzcGVjaWZpZWRcbiAgICBpZiAoZXh0cmFPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlZXBFeHRlbmQoY2xvbmVkT3B0aW9ucywgZXh0cmFPcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdFZGdlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVFZGdlKGNsb25lZE9wdGlvbnMpO1xuICAgIG5ld0VkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMgPSBbYmFzZUVkZ2UuaWRdO1xuICAgIG5ld0VkZ2UuY29ubmVjdCgpO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIG5ldyBlZGdlXG4gICAgdGhpcy5ib2R5LmVkZ2VzW25ld0VkZ2UuaWRdID0gbmV3RWRnZTtcblxuICAgIHJldHVybiBuZXdFZGdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgcGFzc2VkIGNoaWxkIG5vZGVzIGFuZCBlZGdlcyB0byB0aGUgZ2l2ZW4gY2x1c3RlciBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IE5vZGV9IGNoaWxkTm9kZXMgIGhhc2ggb2Ygbm9kZXMgb3Igc2luZ2xlIG5vZGUgdG8gYWRkIGluIGNsdXN0ZXJcbiAgICogQHBhcmFtIHtvYmplY3QgfCBFZGdlfSBjaGlsZEVkZ2VzICBoYXNoIG9mIGVkZ2VzIG9yIHNpbmdsZSBlZGdlIHRvIHRha2UgaW50byBhY2NvdW50IHdoZW4gY2x1c3RlcmluZ1xuICAgKiBAcGFyYW0ge05vZGV9IGNsdXN0ZXJOb2RlICBjbHVzdGVyIG5vZGUgdG8gYWRkIG5vZGVzIGFuZCBlZGdlcyB0b1xuICAgKiBAcGFyYW0ge29iamVjdH0gW2NsdXN0ZXJFZGdlUHJvcGVydGllc11cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbHVzdGVyRWRnZXMoY2hpbGROb2RlcywgY2hpbGRFZGdlcywgY2x1c3Rlck5vZGUsIGNsdXN0ZXJFZGdlUHJvcGVydGllcykge1xuICAgIGlmIChjaGlsZEVkZ2VzIGluc3RhbmNlb2YgRWRnZSkge1xuICAgICAgY29uc3QgZWRnZSA9IGNoaWxkRWRnZXM7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIG9ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICBjaGlsZEVkZ2VzID0gb2JqO1xuICAgIH1cblxuICAgIGlmIChjaGlsZE5vZGVzIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZXM7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIG9ialtub2RlLmlkXSA9IG5vZGU7XG4gICAgICBjaGlsZE5vZGVzID0gb2JqO1xuICAgIH1cblxuICAgIGlmIChjbHVzdGVyTm9kZSA9PT0gdW5kZWZpbmVkIHx8IGNsdXN0ZXJOb2RlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJfY2x1c3RlckVkZ2VzOiBwYXJhbWV0ZXIgY2x1c3Rlck5vZGUgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGNsdXN0ZXJFZGdlUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUYWtlIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIGZyb20gdGhlIGNsdXN0ZXIgbm9kZVxuICAgICAgY2x1c3RlckVkZ2VQcm9wZXJ0aWVzID0gY2x1c3Rlck5vZGUuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSB0aGUgbmV3IGVkZ2VzIHRoYXQgd2lsbCBjb25uZWN0IHRvIHRoZSBjbHVzdGVyLlxuICAgIC8vIEFsbCBzZWxmLXJlZmVyZW5jaW5nIGVkZ2VzIHdpbGwgYmUgYWRkZWQgdG8gY2hpbGRFZGdlcyBoZXJlLlxuICAgIHRoaXMuX2NyZWF0ZUNsdXN0ZXJFZGdlcyhcbiAgICAgIGNoaWxkTm9kZXMsXG4gICAgICBjaGlsZEVkZ2VzLFxuICAgICAgY2x1c3Rlck5vZGUsXG4gICAgICBjbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgLy8gZGlzYWJsZSB0aGUgY2hpbGRFZGdlc1xuICAgIGZvciAoY29uc3QgZWRnZUlkIGluIGNoaWxkRWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hpbGRFZGdlcywgZWRnZUlkKSkge1xuICAgICAgICBpZiAodGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICAgICAgICAvLyBjYWNoZSB0aGUgb3B0aW9ucyBiZWZvcmUgY2hhbmdpbmdcbiAgICAgICAgICB0aGlzLl9iYWNrdXBFZGdlT3B0aW9ucyhlZGdlKTtcbiAgICAgICAgICAvLyBkaXNhYmxlIHBoeXNpY3MgYW5kIGhpZGUgdGhlIGVkZ2VcbiAgICAgICAgICBlZGdlLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRpc2FibGUgdGhlIGNoaWxkTm9kZXNcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjaGlsZE5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdID0ge1xuICAgICAgICAgIGNsdXN0ZXJJZDogY2x1c3Rlck5vZGUuaWQsXG4gICAgICAgICAgbm9kZTogdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGluIHdoaWNoIGNsdXN0ZXIgZ2l2ZW4gbm9kZUlkIHJlc2lkZXMuXG4gICAqXG4gICAqIElmIG5vdCBpbiBjbHVzdGVyLCByZXR1cm4gdW5kZWZpbmVkLlxuICAgKlxuICAgKiBOT1RFOiBJZiB5b3Uga25vdyBhIGNsZWFuZXIgd2F5IHRvIGRvIHRoaXMsIHBsZWFzZSBlbmxpZ2h0ZW4gbWUgKHdpbXJpam5kZXJzKS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge05vZGV8dW5kZWZpbmVkfSBOb2RlIGluc3RhbmNlIGZvciBjbHVzdGVyLCBpZiBwcmVzZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q2x1c3Rlck5vZGVGb3JOb2RlKG5vZGVJZCkge1xuICAgIGlmIChub2RlSWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBjbHVzdGVyZWROb2RlID0gdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdO1xuXG4gICAgLy8gTk9URTogSWYgbm8gY2x1c3RlciBpbmZvIGZvdW5kLCBpdCBzaG91bGQgYWN0dWFsbHkgYmUgYW4gZXJyb3JcbiAgICBpZiAoY2x1c3RlcmVkTm9kZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNsdXN0ZXJJZCA9IGNsdXN0ZXJlZE5vZGUuY2x1c3RlcklkO1xuICAgIGlmIChjbHVzdGVySWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB0aGlzLmJvZHkubm9kZXNbY2x1c3RlcklkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNvbmRpdGlvbmFsbHkgcmVtb3ZpbmcgaXRlbXMgaW4gYXJyYXlcbiAgICpcbiAgICogRG9uZSBsaWtlIHRoaXMgYmVjYXVzZSBBcnJheS5maWx0ZXIoKSBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIGJ5IGFsbCBJRSdzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbHRlcihhcnIsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgcmV0ID0gW107XG5cbiAgICBmb3JFYWNoKGFyciwgKGl0ZW0pID0+IHtcbiAgICAgIGlmIChjYWxsYmFjayhpdGVtKSkge1xuICAgICAgICByZXQucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogU2NhbiBhbGwgZWRnZXMgZm9yIGNoYW5nZXMgaW4gY2x1c3RlcmluZyBhbmQgYWRqdXN0IHRoaXMgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBDYWxsIHRoaXMgKGludGVybmFsbHkpIGFmdGVyIHRoZXJlIGhhcyBiZWVuIGEgY2hhbmdlIGluIG5vZGUgb3IgZWRnZSBkYXRhLlxuICAgKlxuICAgKiBQcmU6IFN0YXRlcyBvZiB0aGlzLmJvZHkubm9kZXMgYW5kIHRoaXMuYm9keS5lZGdlcyBjb25zaXN0ZW50XG4gICAqIFByZTogdGhpcy5jbHVzdGVyZWROb2RlcyBhbmQgdGhpcy5jbHVzdGVyZWRFZGdlIGNvbnNpc3RlbnQgd2l0aCBjb250YWluZWROb2RlcyBhbmQgY29udGFpbmVkRWRnZXNcbiAgICogICAgICBvZiBjbHVzdGVyIG5vZGVzLlxuICAgKi9cbiAgX3VwZGF0ZVN0YXRlKCkge1xuICAgIGxldCBub2RlSWQ7XG4gICAgY29uc3QgZGVsZXRlZE5vZGVJZHMgPSBbXTtcbiAgICBjb25zdCBkZWxldGVkRWRnZUlkcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogVXRpbGl0eSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgY2x1c3RlcmluZyBub2RlcyBvbmx5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBjbHVzdGVyIG5vZGVcbiAgICAgKi9cbiAgICBjb25zdCBlYWNoQ2x1c3Rlck5vZGUgPSAoY2FsbGJhY2spID0+IHtcbiAgICAgIGZvckVhY2godGhpcy5ib2R5Lm5vZGVzLCAobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS5pc0NsdXN0ZXIgPT09IHRydWUpIHtcbiAgICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vXG4gICAgLy8gUmVtb3ZlIGRlbGV0ZWQgcmVndWxhciBub2RlcyBmcm9tIGNsdXN0ZXJpbmdcbiAgICAvL1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBkZWxldGVkIG5vZGVzXG4gICAgZm9yIChub2RlSWQgaW4gdGhpcy5jbHVzdGVyZWROb2Rlcykge1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jbHVzdGVyZWROb2Rlcywgbm9kZUlkKSlcbiAgICAgICAgY29udGludWU7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG5cbiAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlZE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBub2RlcyBmcm9tIGNsdXN0ZXIgbm9kZXNcbiAgICBlYWNoQ2x1c3Rlck5vZGUoZnVuY3Rpb24gKGNsdXN0ZXJOb2RlKSB7XG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGRlbGV0ZWROb2RlSWRzLmxlbmd0aDsgbisrKSB7XG4gICAgICAgIGRlbGV0ZSBjbHVzdGVyTm9kZS5jb250YWluZWROb2Rlc1tkZWxldGVkTm9kZUlkc1tuXV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgbm9kZXMgZnJvbSBjbHVzdGVyIGxpc3RcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IGRlbGV0ZWROb2RlSWRzLmxlbmd0aDsgbisrKSB7XG4gICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWROb2Rlc1tkZWxldGVkTm9kZUlkc1tuXV07XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZW1vdmUgZGVsZXRlZCBlZGdlcyBmcm9tIGNsdXN0ZXJpbmdcbiAgICAvL1xuXG4gICAgLy8gQWRkIHRoZSBkZWxldGVkIGNsdXN0ZXJlZCBlZGdlcyB0byB0aGUgbGlzdFxuICAgIGZvckVhY2godGhpcy5jbHVzdGVyZWRFZGdlcywgKGVkZ2VJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICAgICAgaWYgKGVkZ2UgPT09IHVuZGVmaW5lZCB8fCAhZWRnZS5lbmRQb2ludHNWYWxpZCgpKSB7XG4gICAgICAgIGRlbGV0ZWRFZGdlSWRzW2VkZ2VJZF0gPSBlZGdlSWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDbHVzdGVyIG5vZGVzIGNhbiBhbHNvIGNvbnRhaW4gZWRnZXMgd2hpY2ggYXJlIG5vdCBjbHVzdGVyZWQsXG4gICAgLy8gaS5lLiBub2RlcyAxLTIgd2l0aGluIGNsdXN0ZXIgd2l0aCBhbiBlZGdlIGluIGJldHdlZW4uXG4gICAgLy8gU28gdGhlIGNsdXN0ZXIgbm9kZXMgYWxzbyBuZWVkIHRvIGJlIHNjYW5uZWQgZm9yIGludmFsaWQgZWRnZXNcbiAgICBlYWNoQ2x1c3Rlck5vZGUoZnVuY3Rpb24gKGNsdXN0ZXJOb2RlKSB7XG4gICAgICBmb3JFYWNoKGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzLCAoZWRnZSwgZWRnZUlkKSA9PiB7XG4gICAgICAgIGlmICghZWRnZS5lbmRQb2ludHNWYWxpZCgpICYmICFkZWxldGVkRWRnZUlkc1tlZGdlSWRdKSB7XG4gICAgICAgICAgZGVsZXRlZEVkZ2VJZHNbZWRnZUlkXSA9IGVkZ2VJZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBBbHNvIHNjYW4gZm9yIGNsdXN0ZXIgZWRnZXMgd2hpY2ggbmVlZCB0byBiZSByZW1vdmVkIGluIHRoZSBhY3RpdmUgbGlzdC5cbiAgICAvLyBSZWd1bGFyIGVkZ2VzIGhhdmUgYmVlbiByZW1vdmVkIGJlZm9yZWhhbmQsIHNvIHRoaXMgb25seSBwaWNrcyB1cCB0aGUgY2x1c3RlciBlZGdlcy5cbiAgICBmb3JFYWNoKHRoaXMuYm9keS5lZGdlcywgKGVkZ2UsIGVkZ2VJZCkgPT4ge1xuICAgICAgLy8gRXhwbGljaXRseSBzY2FuIHRoZSBjb250YWluZWQgZWRnZXMgZm9yIHZhbGlkaXR5XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICBjb25zdCByZXBsYWNlZElkcyA9IGVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHM7XG4gICAgICBpZiAocmVwbGFjZWRJZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgbnVtVmFsaWQgPSAwO1xuXG4gICAgICAgIGZvckVhY2gocmVwbGFjZWRJZHMsIChjb250YWluZWRFZGdlSWQpID0+IHtcbiAgICAgICAgICBjb25zdCBjb250YWluZWRFZGdlID0gdGhpcy5ib2R5LmVkZ2VzW2NvbnRhaW5lZEVkZ2VJZF07XG5cbiAgICAgICAgICBpZiAoY29udGFpbmVkRWRnZSAhPT0gdW5kZWZpbmVkICYmIGNvbnRhaW5lZEVkZ2UuZW5kUG9pbnRzVmFsaWQoKSkge1xuICAgICAgICAgICAgbnVtVmFsaWQgKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlzVmFsaWQgPSBudW1WYWxpZCA+IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICghZWRnZS5lbmRQb2ludHNWYWxpZCgpIHx8ICFpc1ZhbGlkKSB7XG4gICAgICAgIGRlbGV0ZWRFZGdlSWRzW2VkZ2VJZF0gPSBlZGdlSWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgZWRnZXMgZnJvbSBjbHVzdGVyIG5vZGVzXG4gICAgZWFjaENsdXN0ZXJOb2RlKChjbHVzdGVyTm9kZSkgPT4ge1xuICAgICAgZm9yRWFjaChkZWxldGVkRWRnZUlkcywgKGRlbGV0ZWRFZGdlSWQpID0+IHtcbiAgICAgICAgZGVsZXRlIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzW2RlbGV0ZWRFZGdlSWRdO1xuXG4gICAgICAgIGZvckVhY2goY2x1c3Rlck5vZGUuZWRnZXMsIChlZGdlLCBtKSA9PiB7XG4gICAgICAgICAgaWYgKGVkZ2UuaWQgPT09IGRlbGV0ZWRFZGdlSWQpIHtcbiAgICAgICAgICAgIGNsdXN0ZXJOb2RlLmVkZ2VzW21dID0gbnVsbDsgLy8gRG9uJ3Qgd2FudCB0byBkaXJlY3RseSBkZWxldGUgaGVyZSwgYmVjYXVzZSBpbiB0aGUgbG9vcFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMgPSB0aGlzLl9maWx0ZXIoXG4gICAgICAgICAgICBlZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgICAgICAgIHJldHVybiAhZGVsZXRlZEVkZ2VJZHNbaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIHRoZSBudWxsc1xuICAgICAgICBjbHVzdGVyTm9kZS5lZGdlcyA9IHRoaXMuX2ZpbHRlcihjbHVzdGVyTm9kZS5lZGdlcywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXRlbSAhPT0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlbW92ZSBmcm9tIGNsdXN0ZXIgbGlzdFxuICAgIGZvckVhY2goZGVsZXRlZEVkZ2VJZHMsIChlZGdlSWQpID0+IHtcbiAgICAgIGRlbGV0ZSB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2VJZF07XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgY2x1c3RlciBlZGdlcyBmcm9tIGFjdGl2ZSBsaXN0ICh0aGlzLmJvZHkuZWRnZXMpLlxuICAgIC8vIGRlbGV0ZWRFZGdlSWRzIHN0aWxsIGNvbnRhaW5zIGlkIG9mIHJlZ3VsYXIgZWRnZXMsIGJ1dCB0aGVzZSBzaG91bGQgYWxsXG4gICAgLy8gYmUgZ29uZSB3aGVuIHlvdSByZWFjaCBoZXJlLlxuICAgIGZvckVhY2goZGVsZXRlZEVkZ2VJZHMsIChlZGdlSWQpID0+IHtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICB9KTtcblxuICAgIC8vXG4gICAgLy8gQ2hlY2sgY2hhbmdlZCBjbHVzdGVyIHN0YXRlIG9mIGVkZ2VzXG4gICAgLy9cblxuICAgIC8vIEl0ZXJhdGluZyBvdmVyIGtleXMgaGVyZSwgYmVjYXVzZSBlZGdlcyBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUgbG9vcFxuICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHRoaXMuYm9keS5lZGdlcyk7XG4gICAgZm9yRWFjaChpZHMsIChlZGdlSWQpID0+IHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcblxuICAgICAgY29uc3Qgc2hvdWxkQmVDbHVzdGVyZWQgPVxuICAgICAgICB0aGlzLl9pc0NsdXN0ZXJlZE5vZGUoZWRnZS5mcm9tSWQpIHx8IHRoaXMuX2lzQ2x1c3RlcmVkTm9kZShlZGdlLnRvSWQpO1xuICAgICAgaWYgKHNob3VsZEJlQ2x1c3RlcmVkID09PSB0aGlzLl9pc0NsdXN0ZXJlZEVkZ2UoZWRnZS5pZCkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBhbGwgaXMgd2VsbFxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkQmVDbHVzdGVyZWQpIHtcbiAgICAgICAgLy8gYWRkIGVkZ2UgdG8gY2x1c3RlcmluZ1xuICAgICAgICBjb25zdCBjbHVzdGVyRnJvbSA9IHRoaXMuX2dldENsdXN0ZXJOb2RlRm9yTm9kZShlZGdlLmZyb21JZCk7XG4gICAgICAgIGlmIChjbHVzdGVyRnJvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fY2x1c3RlckVkZ2VzKHRoaXMuYm9keS5ub2Rlc1tlZGdlLmZyb21JZF0sIGVkZ2UsIGNsdXN0ZXJGcm9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsdXN0ZXJUbyA9IHRoaXMuX2dldENsdXN0ZXJOb2RlRm9yTm9kZShlZGdlLnRvSWQpO1xuICAgICAgICBpZiAoY2x1c3RlclRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9jbHVzdGVyRWRnZXModGhpcy5ib2R5Lm5vZGVzW2VkZ2UudG9JZF0sIGVkZ2UsIGNsdXN0ZXJUbyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBjaGVjayB0aGF0IGl0IHdvcmtzIGZvciBib3RoIGVkZ2VzIGNsdXN0ZXJlZFxuICAgICAgICAvLyAgICAgICAoVGhpcyBtaWdodCBiZSBwYXJhbm9pYSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jbHVzdGVyRWRnZXNbZWRnZUlkXTtcbiAgICAgICAgdGhpcy5fcmVzdG9yZUVkZ2UoZWRnZSk7XG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBoYXBwZW5pbmcsIHRoZSBzdGF0ZSBzaG91bGRcbiAgICAgICAgLy8gYmUgcHJvcGVybHkgdXBkYXRlZCBhdCB0aGlzIHBvaW50LlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiBpdCAqaXMqIHJlYWNoZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sIHRoZW4gd2UgaGF2ZSB0byBpbXBsZW1lbnRcbiAgICAgICAgLy8gdW5kbyBjbHVzdGVyaW5nIGZvciB0aGlzIGVkZ2UgaGVyZS5cbiAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKCdyZW1vdmUgZWRnZSBmcm9tIGNsdXN0ZXJpbmcgbm90IGltcGxlbWVudGVkIScpXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDbHVzdGVycyBtYXkgYmUgbmVzdGVkIHRvIGFueSBsZXZlbC4gS2VlcCBvbiBvcGVuaW5nIHVudGlsIG5vdGhpbmcgdG8gb3BlblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgbGV0IGNvbnRpbnVlTG9vcCA9IHRydWU7XG4gICAgd2hpbGUgKGNvbnRpbnVlTG9vcCkge1xuICAgICAgY29uc3QgY2x1c3RlcnNUb09wZW4gPSBbXTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBpZCdzIG9mIGNsdXN0ZXJzIHRoYXQgbmVlZCBvcGVuaW5nXG4gICAgICBlYWNoQ2x1c3Rlck5vZGUoZnVuY3Rpb24gKGNsdXN0ZXJOb2RlKSB7XG4gICAgICAgIGNvbnN0IG51bU5vZGVzID0gT2JqZWN0LmtleXMoY2x1c3Rlck5vZGUuY29udGFpbmVkTm9kZXMpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYWxsb3dTaW5nbGUgPSBjbHVzdGVyTm9kZS5vcHRpb25zLmFsbG93U2luZ2xlTm9kZUNsdXN0ZXIgPT09IHRydWU7XG4gICAgICAgIGlmICgoYWxsb3dTaW5nbGUgJiYgbnVtTm9kZXMgPCAxKSB8fCAoIWFsbG93U2luZ2xlICYmIG51bU5vZGVzIDwgMikpIHtcbiAgICAgICAgICBjbHVzdGVyc1RvT3Blbi5wdXNoKGNsdXN0ZXJOb2RlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9wZW4gdGhlbVxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBjbHVzdGVyc1RvT3Blbi5sZW5ndGg7ICsrbikge1xuICAgICAgICB0aGlzLm9wZW5DbHVzdGVyKFxuICAgICAgICAgIGNsdXN0ZXJzVG9PcGVuW25dLFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIGZhbHNlIC8qIERvbid0IHJlZnJlc2gsIHdlJ3JlIGluIGFuIHJlZnJlc2gvdXBkYXRlIGFscmVhZHkgKi9cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29udGludWVMb29wID0gY2x1c3RlcnNUb09wZW4ubGVuZ3RoID4gMDtcbiAgICAgIGNoYW5nZWQgPSBjaGFuZ2VkIHx8IGNvbnRpbnVlTG9vcDtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoKTsgLy8gUmVkbyB0aGlzIG1ldGhvZCAocmVjdXJzaW9uIHBvc3NpYmxlISBzaG91bGQgYmUgc2FmZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIG5vZGUgd2l0aCBnaXZlbiBpZCBpcyBwYXJ0IG9mIGEgY2x1c3Rlci5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgcGFydCBvZiBhIGNsdXN0ZXIuXG4gICAqL1xuICBfaXNDbHVzdGVyZWROb2RlKG5vZGVJZCkge1xuICAgIHJldHVybiB0aGlzLmNsdXN0ZXJlZE5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgZWRnZSB3aXRoIGdpdmVuIGlkIGlzIG5vdCB2aXNpYmxlIGR1ZSB0byBjbHVzdGVyaW5nLlxuICAgKlxuICAgKiBBbiBlZGdlIGlzIGNvbnNpZGVyZWQgY2x1c3RlcmVkIGlmOlxuICAgKiAtIGl0IGlzIGRpcmVjdGx5IHJlcGxhY2VkIGJ5IGEgY2x1c3RlcmluZyBlZGdlXG4gICAqIC0gYW55IG9mIGl0cyBjb25uZWN0aW5nIG5vZGVzIGlzIGluIGEgY2x1c3RlclxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBlZGdlSWRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgcGFydCBvZiBhIGNsdXN0ZXIuXG4gICAqL1xuICBfaXNDbHVzdGVyZWRFZGdlKGVkZ2VJZCkge1xuICAgIHJldHVybiB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDbHVzdGVyRW5naW5lO1xuIiwgImltcG9ydCB7IHNlbGVjdGl2ZURlZXBFeHRlbmQgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgpIHRvIGEgdXNhYmxlIGZvcm0uXG4gKlxuICogU3BlY2lmaWNhbGx5LCBzZXQgdXAgdGhpcyBtZXRob2QgZm9yIHRoZSBjYXNlIG9mIHJ1bm5pbmcgb24gbm9kZS5qcyB3aXRoIGpzZG9tIGVuYWJsZWQuXG4gKlxuICogTk9URVM6XG4gKlxuICogT24gbm9kZS5qcywgd2hlbiBjYWxsaW5nIHRoaXMgZGlyZWN0bHkgb3V0c2lkZSBvZiB0aGlzIGNsYXNzLCBgd2luZG93YCBpcyBub3QgZGVmaW5lZC5cbiAqICAgVGhpcyBoYXBwZW5zIGV2ZW4gaWYganNkb20gaXMgdXNlZC5cbiAqIEZvciBub2RlLmpzICsganNkb20sIGB3aW5kb3dgIGlzIGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50IHRoZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQuXG4gKiAgIEZvciB0aGlzIHJlYXNvbiwgdGhlIGNhbGxlZCBpcyBwbGFjZWQgd2l0aGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAqIEV2ZW4gdGhlbiwgYHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKWAgaXMgbm90IGRlZmluZWQsIHNvIGl0IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkLlxuICogRHVyaW5nIHVuaXQgdGVzdGluZywgaXQgaGFwcGVucyB0aGF0IHRoZSB3aW5kb3cgb2JqZWN0IGlzIHJlc2V0IGR1cmluZyBleGVjdXRpb24sIGNhdXNpbmdcbiAqICAgYSBydW50aW1lIGVycm9yIGR1ZSB0byBtaXNzaW5nIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKWAuIFRoaXMgbmVlZHMgdG8gYmUgY29tcGVuc2F0ZWQgZm9yLFxuICogICBzZWUgYF9yZXF1ZXN0TmV4dEZyYW1lKClgLlxuICogU2luY2UgdGhpcyBpcyBhIGdsb2JhbCBvYmplY3QsIGl0IG1heSBhZmZlY3Qgb3RoZXIgbW9kdWxlcyBiZXNpZGVzIGBOZXR3b3JrYC4gV2l0aCBub3JtYWxcbiAqICAgdXNhZ2UsIHRoaXMgZG9lcyBub3QgY2F1c2UgYW55IHByb2JsZW1zLiBEdXJpbmcgdW5pdCB0ZXN0aW5nLCBlcnJvcnMgbWF5IG9jY3VyLiBUaGVzZSBoYXZlXG4gKiAgIGJlZW4gY29tcGVuc2F0ZWQgZm9yLCBzZWUgY29tbWVudCBibG9jayBpbiBfcmVxdWVzdE5leHRGcmFtZSgpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9pbml0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkge1xuICBsZXQgZnVuYztcblxuICBpZiAod2luZG93ICE9PSB1bmRlZmluZWQpIHtcbiAgICBmdW5jID1cbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgfVxuXG4gIGlmIChmdW5jID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyB3aW5kb3cgb3IgbWV0aG9kIG5vdCBwcmVzZW50LCBzZXR0aW5nIG1vY2sgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgLy9jb25zb2xlLmxvZyhcIkNhbGxlZCBtb2NrIHJlcXVlc3RBbmltYXRpb25GcmFtZVwiKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuYztcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqL1xuY2xhc3MgQ2FudmFzUmVuZGVyZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgX2luaXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuXG4gICAgdGhpcy5yZWRyYXdSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlclRpbWVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVxdWlyZXNUaW1lb3V0ID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyUmVxdWVzdHMgPSAwO1xuICAgIHRoaXMuYWxsb3dSZWRyYXcgPSB0cnVlO1xuXG4gICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuem9vbWluZyA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBoaWRlRWRnZXNPbkRyYWc6IGZhbHNlLFxuICAgICAgaGlkZUVkZ2VzT25ab29tOiBmYWxzZSxcbiAgICAgIGhpZGVOb2Rlc09uRHJhZzogZmFsc2UsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLl9kZXRlcm1pbmVCcm93c2VyTWV0aG9kKCk7XG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRyYWdTdGFydFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRyYWdFbmRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiem9vbVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnpvb21pbmcgPSB0cnVlO1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnpvb21UaW1lb3V0SWQpO1xuICAgICAgdGhpcy56b29tVGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnpvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdFJlZHJhdy5iaW5kKHRoaXMpKCk7XG4gICAgICB9LCAyNTApO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX3Jlc2l6ZU5vZGVzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2l6ZU5vZGVzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVkcmF3XCIsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fcmVkcmF3KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfYmxvY2tSZWRyYXdcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5hbGxvd1JlZHJhdyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2FsbG93UmVkcmF3XCIsICgpID0+IHtcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPSB0cnVlO1xuICAgICAgdGhpcy5yZWRyYXdSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXF1ZXN0UmVkcmF3XCIsIHRoaXMuX3JlcXVlc3RSZWRyYXcuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfc3RhcnRSZW5kZXJpbmdcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJSZXF1ZXN0cyArPSAxO1xuICAgICAgdGhpcy5yZW5kZXJpbmdBY3RpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5fc3RhcnRSZW5kZXJpbmcoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9zdG9wUmVuZGVyaW5nXCIsICgpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyUmVxdWVzdHMgLT0gMTtcbiAgICAgIHRoaXMucmVuZGVyaW5nQWN0aXZlID0gdGhpcy5yZW5kZXJSZXF1ZXN0cyA+IDA7XG4gICAgICB0aGlzLnJlbmRlclRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlclJlcXVlc3RzID0gMDtcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVuZGVyaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5yZXF1aXJlc1RpbWVvdXQgPT09IHRydWUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVuZGVyVGltZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucmVuZGVyVGltZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IFtcImhpZGVFZGdlc09uRHJhZ1wiLCBcImhpZGVFZGdlc09uWm9vbVwiLCBcImhpZGVOb2Rlc09uRHJhZ1wiXTtcbiAgICAgIHNlbGVjdGl2ZURlZXBFeHRlbmQoZmllbGRzLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIHRoZSBkcmF3aW5nIG9mIHRoZSBuZXh0IGZyYW1lLlxuICAgKlxuICAgKiBDYWxscyB0aGUgY2FsbGJhY2sgd2hlbiB0aGUgbmV4dCBmcmFtZSBjYW4gb3Igd2lsbCBiZSBkcmF3bi5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5IC0gdGltZW91dCBjYXNlIG9ubHksIHdhaXQgdGhpcyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbiB8IHVuZGVmaW5lZH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXF1ZXN0TmV4dEZyYW1lKGNhbGxiYWNrLCBkZWxheSkge1xuICAgIC8vIER1cmluZyB1bml0IHRlc3RpbmcsIGl0IGhhcHBlbnMgdGhhdCB0aGUgbW9jayB3aW5kb3cgb2JqZWN0IGlzIHJlc2V0IHdoaWxlXG4gICAgLy8gdGhlIG5leHQgZnJhbWUgaXMgc3RpbGwgcGVuZGluZy4gVGhlbiwgZWl0aGVyICd3aW5kb3cnIGlzIG5vdCBwcmVzZW50LCBvclxuICAgIC8vICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKScgaXMgbm90IHByZXNlbnQgYmVjYXVzZSBpdCBpcyBub3QgZGVmaW5lZCBvbiB0aGVcbiAgICAvLyBtb2NrIHdpbmRvdyBvYmplY3QuXG4gICAgLy9cbiAgICAvLyBBcyBhIGNvbnNlcXVlbmNlLCB1bnJlbGF0ZWQgdW5pdCB0ZXN0cyBtYXkgYXBwZWFyIHRvIGZhaWwsIGV2ZW4gaWYgdGhlIHByb2JsZW1cbiAgICAvLyBkZXNjcmliZWQgaGFwcGVucyBpbiB0aGUgY3VycmVudCB1bml0IHRlc3QuXG4gICAgLy9cbiAgICAvLyBUaGlzIGlzIG5vdCBzb21ldGhpbmcgdGhhdCB3aWxsIGhhcHBlbiBpbiBub3JtYWwgb3BlcmF0aW9uLCBidXQgd2Ugc3RpbGwgbmVlZFxuICAgIC8vIHRvIHRha2UgaXQgaW50byBhY2NvdW50LlxuICAgIC8vXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjsgLy8gRG9pbmcgYGlmICh3aW5kb3cgPT09IHVuZGVmaW5lZClgIGRvZXMgbm90IHdvcmsgaGVyZSFcblxuICAgIGxldCB0aW1lcjtcblxuICAgIGNvbnN0IG15V2luZG93ID0gd2luZG93OyAvLyBHcmFiIGEgcmVmZXJlbmNlIHRvIHJlZHVjZSB0aGUgcG9zc2liaWxpdHkgdGhhdCAnd2luZG93JyBpcyByZXNldFxuICAgIC8vIHdoaWxlIHJ1bm5pbmcgdGhpcyBtZXRob2QuXG5cbiAgICBpZiAodGhpcy5yZXF1aXJlc1RpbWVvdXQgPT09IHRydWUpIHtcbiAgICAgIC8vIHdhaXQgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBhbmQgcGVyZm9ybSB0aGUgYW5pbWF0aW9uIHN0ZXAgZnVuY3Rpb25cbiAgICAgIHRpbWVyID0gbXlXaW5kb3cuc2V0VGltZW91dChjYWxsYmFjaywgZGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobXlXaW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIHRpbWVyID0gbXlXaW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGltZXI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zdGFydFJlbmRlcmluZygpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJpbmdBY3RpdmUgPT09IHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnJlbmRlclRpbWVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJUaW1lciA9IHRoaXMuX3JlcXVlc3ROZXh0RnJhbWUoXG4gICAgICAgICAgdGhpcy5fcmVuZGVyU3RlcC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHRoaXMuc2ltdWxhdGlvbkludGVydmFsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVuZGVyU3RlcCgpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJpbmdBY3RpdmUgPT09IHRydWUpIHtcbiAgICAgIC8vIHJlc2V0IHRoZSByZW5kZXJUaW1lciBzbyBhIG5ldyBzY2hlZHVsZWQgYW5pbWF0aW9uIHN0ZXAgY2FuIGJlIHNldFxuICAgICAgdGhpcy5yZW5kZXJUaW1lciA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHRoaXMucmVxdWlyZXNUaW1lb3V0ID09PSB0cnVlKSB7XG4gICAgICAgIC8vIHRoaXMgc2NoZWR1bGVzIGEgbmV3IHNpbXVsYXRpb24gc3RlcFxuICAgICAgICB0aGlzLl9zdGFydFJlbmRlcmluZygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZWRyYXcoKTtcblxuICAgICAgaWYgKHRoaXMucmVxdWlyZXNUaW1lb3V0ID09PSBmYWxzZSkge1xuICAgICAgICAvLyB0aGlzIHNjaGVkdWxlcyBhIG5ldyBzaW11bGF0aW9uIHN0ZXBcbiAgICAgICAgdGhpcy5fc3RhcnRSZW5kZXJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IHRoZSBuZXR3b3JrIHdpdGggdGhlIGN1cnJlbnQgZGF0YVxuICAgKiBjaGFydCB3aWxsIGJlIHJlc2l6ZWQgdG9vLlxuICAgKi9cbiAgcmVkcmF3KCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzZXRTaXplXCIpO1xuICAgIHRoaXMuX3JlZHJhdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyB0aGUgbmV0d29yayB3aXRoIHRoZSBjdXJyZW50IGRhdGFcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXF1ZXN0UmVkcmF3KCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVkcmF3UmVxdWVzdGVkICE9PSB0cnVlICYmXG4gICAgICB0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9PT0gZmFsc2UgJiZcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPT09IHRydWVcbiAgICApIHtcbiAgICAgIHRoaXMucmVkcmF3UmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3JlcXVlc3ROZXh0RnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZWRyYXcoZmFsc2UpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyB0aGUgbmV0d29yayB3aXRoIHRoZSBjdXJyZW50IGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlkZGVuPWZhbHNlXSB8IFVzZWQgdG8gZ2V0IHRoZSBmaXJzdCBlc3RpbWF0ZSBvZiB0aGUgbm9kZSBzaXplcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgdGhlIG5vZGVzIGFyZSBkcmF3biBhZnRlciB3aGljaCB0aGV5IGFyZSBxdWlja2x5IGRyYXduIG92ZXIuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVkcmF3KGhpZGRlbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dSZWRyYXcgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJpbml0UmVkcmF3XCIpO1xuXG4gICAgICB0aGlzLnJlZHJhd1JlcXVlc3RlZCA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBkcmF3TGF0ZXIgPSB7XG4gICAgICAgIGRyYXdFeHRlcm5hbExhYmVsczogbnVsbCxcbiAgICAgIH07XG5cbiAgICAgIC8vIHdoZW4gdGhlIGNvbnRhaW5lciBkaXYgd2FzIGhpZGRlbiwgdGhpcyBmaXhlcyBpdCBiYWNrIHVwIVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMud2lkdGggPT09IDAgfHxcbiAgICAgICAgdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmhlaWdodCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2FudmFzLnNldFNpemUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jYW52YXMuc2V0VHJhbnNmb3JtKCk7XG5cbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoKTtcblxuICAgICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgICAgY29uc3QgdyA9IHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IGggPSB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gaWYgdGhlIGRpdiBpcyBoaWRkZW4sIHdlIHN0b3AgdGhlIHJlZHJhdyBoZXJlIGZvciBwZXJmb3JtYW5jZS5cbiAgICAgIGlmICh0aGlzLmNhbnZhcy5mcmFtZS5jbGllbnRXaWR0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCBzY2FsaW5nIGFuZCB0cmFuc2xhdGlvblxuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC50cmFuc2xhdGUodGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCwgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueSk7XG4gICAgICBjdHguc2NhbGUodGhpcy5ib2R5LnZpZXcuc2NhbGUsIHRoaXMuYm9keS52aWV3LnNjYWxlKTtcblxuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImJlZm9yZURyYXdpbmdcIiwgY3R4KTtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcblxuICAgICAgaWYgKGhpZGRlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0aGlzLmRyYWdnaW5nID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgKHRoaXMuZHJhZ2dpbmcgPT09IHRydWUgJiZcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmhpZGVFZGdlc09uRHJhZyA9PT0gZmFsc2UpKSAmJlxuICAgICAgICAgICh0aGlzLnpvb21pbmcgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAodGhpcy56b29taW5nID09PSB0cnVlICYmIHRoaXMub3B0aW9ucy5oaWRlRWRnZXNPblpvb20gPT09IGZhbHNlKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fZHJhd0VkZ2VzKGN0eCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmRyYWdnaW5nID09PSBmYWxzZSB8fFxuICAgICAgICAodGhpcy5kcmFnZ2luZyA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuaGlkZU5vZGVzT25EcmFnID09PSBmYWxzZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCB7IGRyYXdFeHRlcm5hbExhYmVscyB9ID0gdGhpcy5fZHJhd05vZGVzKGN0eCwgaGlkZGVuKTtcbiAgICAgICAgZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVscyA9IGRyYXdFeHRlcm5hbExhYmVscztcbiAgICAgIH1cblxuICAgICAgLy8gZHJhdyB0aGUgYXJyb3dzIGxhc3Qgc28gdGhleSB3aWxsIGJlIGF0IHRoZSB0b3BcbiAgICAgIGlmIChoaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodGhpcy5kcmFnZ2luZyA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICh0aGlzLmRyYWdnaW5nID09PSB0cnVlICYmXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oaWRlRWRnZXNPbkRyYWcgPT09IGZhbHNlKSkgJiZcbiAgICAgICAgICAodGhpcy56b29taW5nID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgKHRoaXMuem9vbWluZyA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuaGlkZUVkZ2VzT25ab29tID09PSBmYWxzZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX2RyYXdBcnJvd3MoY3R4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVscyAhPSBudWxsKSB7XG4gICAgICAgIGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbHMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhpZGRlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fZHJhd1NlbGVjdGlvbkJveChjdHgpO1xuICAgICAgfVxuXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYWZ0ZXJEcmF3aW5nXCIsIGN0eCk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG5cbiAgICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgc2NhbGluZyBhbmQgdHJhbnNsYXRpb25cbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICBpZiAoaGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhbGwgbm9kZXNcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Fsd2F5c1Nob3ddXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzaXplTm9kZXMoKSB7XG4gICAgdGhpcy5jYW52YXMuc2V0VHJhbnNmb3JtKCk7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgpO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LnRyYW5zbGF0ZSh0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54LCB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55KTtcbiAgICBjdHguc2NhbGUodGhpcy5ib2R5LnZpZXcuc2NhbGUsIHRoaXMuYm9keS52aWV3LnNjYWxlKTtcblxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGxldCBub2RlO1xuXG4gICAgLy8gcmVzaXplIGFsbCBub2Rlc1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tub2RlSWRdO1xuICAgICAgICBub2RlLnJlc2l6ZShjdHgpO1xuICAgICAgICBub2RlLnVwZGF0ZUJvdW5kaW5nQm94KGN0eCwgbm9kZS5zZWxlY3RlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSBvcmlnaW5hbCBzY2FsaW5nIGFuZCB0cmFuc2xhdGlvblxuICAgIGN0eC5yZXN0b3JlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IGFsbCBub2Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4ICAyRCBjb250ZXh0IG9mIGEgSFRNTCBjYW52YXNcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWx3YXlzU2hvd11cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIF9kcmF3Tm9kZXMoY3R4LCBhbHdheXNTaG93ID0gZmFsc2UpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICBsZXQgbm9kZTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IFtdO1xuICAgIGNvbnN0IGhvdmVyZWQgPSBbXTtcbiAgICBjb25zdCBtYXJnaW4gPSAyMDtcbiAgICBjb25zdCB0b3BMZWZ0ID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoeyB4OiAtbWFyZ2luLCB5OiAtbWFyZ2luIH0pO1xuICAgIGNvbnN0IGJvdHRvbVJpZ2h0ID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoICsgbWFyZ2luLFxuICAgICAgeTogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCArIG1hcmdpbixcbiAgICB9KTtcbiAgICBjb25zdCB2aWV3YWJsZUFyZWEgPSB7XG4gICAgICB0b3A6IHRvcExlZnQueSxcbiAgICAgIGxlZnQ6IHRvcExlZnQueCxcbiAgICAgIGJvdHRvbTogYm90dG9tUmlnaHQueSxcbiAgICAgIHJpZ2h0OiBib3R0b21SaWdodC54LFxuICAgIH07XG5cbiAgICBjb25zdCBkcmF3RXh0ZXJuYWxMYWJlbHMgPSBbXTtcblxuICAgIC8vIGRyYXcgdW5zZWxlY3RlZCBub2RlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgLy8gc2V0IHNlbGVjdGVkIGFuZCBob3ZlcmVkIG5vZGVzIGFzaWRlXG4gICAgICBpZiAobm9kZS5ob3Zlcikge1xuICAgICAgICBob3ZlcmVkLnB1c2gobm9kZUluZGljZXNbaV0pO1xuICAgICAgfSBlbHNlIGlmIChub2RlLmlzU2VsZWN0ZWQoKSkge1xuICAgICAgICBzZWxlY3RlZC5wdXNoKG5vZGVJbmRpY2VzW2ldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhbHdheXNTaG93ID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3QgZHJhd0xhdGVyID0gbm9kZS5kcmF3KGN0eCk7XG4gICAgICAgICAgaWYgKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCAhPSBudWxsKSB7XG4gICAgICAgICAgICBkcmF3RXh0ZXJuYWxMYWJlbHMucHVzaChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmlzQm91bmRpbmdCb3hPdmVybGFwcGluZ1dpdGgodmlld2FibGVBcmVhKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGRyYXdMYXRlciA9IG5vZGUuZHJhdyhjdHgpO1xuICAgICAgICAgIGlmIChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgZHJhd0V4dGVybmFsTGFiZWxzLnB1c2goZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZS51cGRhdGVCb3VuZGluZ0JveChjdHgsIG5vZGUuc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGk7XG4gICAgY29uc3Qgc2VsZWN0ZWRMZW5ndGggPSBzZWxlY3RlZC5sZW5ndGg7XG4gICAgY29uc3QgaG92ZXJlZExlbmd0aCA9IGhvdmVyZWQubGVuZ3RoO1xuXG4gICAgLy8gZHJhdyB0aGUgc2VsZWN0ZWQgbm9kZXMgb24gdG9wXG4gICAgZm9yIChpID0gMDsgaSA8IHNlbGVjdGVkTGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tzZWxlY3RlZFtpXV07XG4gICAgICBjb25zdCBkcmF3TGF0ZXIgPSBub2RlLmRyYXcoY3R4KTtcbiAgICAgIGlmIChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwgIT0gbnVsbCkge1xuICAgICAgICBkcmF3RXh0ZXJuYWxMYWJlbHMucHVzaChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRyYXcgaG92ZXJlZCBub2RlcyBhYm92ZSBldmVyeXRoaW5nIGVsc2U6IGZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtbmV0d29yay9pc3N1ZXMvMjI2XG4gICAgZm9yIChpID0gMDsgaSA8IGhvdmVyZWRMZW5ndGg7IGkrKykge1xuICAgICAgbm9kZSA9IG5vZGVzW2hvdmVyZWRbaV1dO1xuICAgICAgY29uc3QgZHJhd0xhdGVyID0gbm9kZS5kcmF3KGN0eCk7XG4gICAgICBpZiAoZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsICE9IG51bGwpIHtcbiAgICAgICAgZHJhd0V4dGVybmFsTGFiZWxzLnB1c2goZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZHJhd0V4dGVybmFsTGFiZWxzOiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZHJhdyBvZiBkcmF3RXh0ZXJuYWxMYWJlbHMpIHtcbiAgICAgICAgICBkcmF3KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYWxsIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHggIDJEIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdFZGdlcyhjdHgpIHtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBlZGdlSW5kaWNlcyA9IHRoaXMuYm9keS5lZGdlSW5kaWNlcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgZWRnZS5kcmF3KGN0eCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhbGwgYXJyb3dzXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHggIDJEIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdBcnJvd3MoY3R4KSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLmJvZHkuZWRnZUluZGljZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgIGVkZ2UuZHJhd0Fycm93cyhjdHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgcmVxdWlyZXMgYSBzZXRUaW1lb3V0IG9yIGEgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBUaGlzIHdhcyByZXF1aXJlZCBiZWNhdXNlXG4gICAqIHNvbWUgaW1wbGVtZW50YXRpb25zIChzYWZhcmkgYW5kIElFOSkgZGlkIG5vdCBzdXBwb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RldGVybWluZUJyb3dzZXJNZXRob2QoKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IGJyb3dzZXJUeXBlID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgdGhpcy5yZXF1aXJlc1RpbWVvdXQgPSBmYWxzZTtcbiAgICAgIGlmIChicm93c2VyVHlwZS5pbmRleE9mKFwibXNpZSA5LjBcIikgIT0gLTEpIHtcbiAgICAgICAgLy8gSUUgOVxuICAgICAgICB0aGlzLnJlcXVpcmVzVGltZW91dCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGJyb3dzZXJUeXBlLmluZGV4T2YoXCJzYWZhcmlcIikgIT0gLTEpIHtcbiAgICAgICAgLy8gc2FmYXJpXG4gICAgICAgIGlmIChicm93c2VyVHlwZS5pbmRleE9mKFwiY2hyb21lXCIpIDw9IC0xKSB7XG4gICAgICAgICAgdGhpcy5yZXF1aXJlc1RpbWVvdXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVxdWlyZXNUaW1lb3V0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IHNlbGVjdGlvbiBib3hcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAgMkQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd1NlbGVjdGlvbkJveChjdHgpIHtcbiAgICBpZiAodGhpcy5ib2R5LnNlbGVjdGlvbkJveC5zaG93KSB7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjb25zdCB3aWR0aCA9XG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uZW5kLnggLVxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLnN0YXJ0Lng7XG4gICAgICBjb25zdCBoZWlnaHQgPVxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLmVuZC55IC1cbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC55O1xuICAgICAgY3R4LnJlY3QoXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueCxcbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC55LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICApO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgxNTEsIDE5NCwgMjUyLCAwLjIpXCI7XG4gICAgICBjdHguZmlsbFJlY3QoXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueCxcbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC55LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICApO1xuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJyZ2JhKDE1MSwgMTk0LCAyNTIsIDEpXCI7XG4gICAgICBjdHguc3Ryb2tlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FudmFzUmVuZGVyZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRJbnRlcnZhbDtcbiIsICIvKipcbiAqIFJlZ2lzdGVyIGEgdG91Y2ggZXZlbnQsIHRha2luZyBwbGFjZSBiZWZvcmUgYSBnZXN0dXJlXG4gKlxuICogQHBhcmFtIHtIYW1tZXJ9IGhhbW1lciAgICAgICBBIGhhbW1lciBpbnN0YW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBDYWxsYmFjaywgY2FsbGVkIGFzIGNhbGxiYWNrKGV2ZW50KVxuICovXG5leHBvcnQgZnVuY3Rpb24gb25Ub3VjaChoYW1tZXIsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrLmlucHV0SGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC5pc0ZpcnN0KSB7XG4gICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCBjYWxsYmFjay5pbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgcmVsZWFzZSBldmVudCwgdGFraW5nIHBsYWNlIGFmdGVyIGEgZ2VzdHVyZVxuICpcbiAqIEBwYXJhbSB7SGFtbWVyfSBoYW1tZXIgICAgICAgQSBoYW1tZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgQ2FsbGJhY2ssIGNhbGxlZCBhcyBjYWxsYmFjayhldmVudClcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gb25SZWxlYXNlKGhhbW1lciwgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2suaW5wdXRIYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmlzRmluYWwpIHtcbiAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCBjYWxsYmFjay5pbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIFVucmVnaXN0ZXIgYSB0b3VjaCBldmVudCwgdGFraW5nIHBsYWNlIGJlZm9yZSBhIGdlc3R1cmVcbiAqXG4gKiBAcGFyYW0ge0hhbW1lcn0gaGFtbWVyICAgICAgIEEgaGFtbWVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrLCBjYWxsZWQgYXMgY2FsbGJhY2soZXZlbnQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZmZUb3VjaChoYW1tZXIsIGNhbGxiYWNrKSB7XG4gIGhhbW1lci5vZmYoXCJoYW1tZXIuaW5wdXRcIiwgY2FsbGJhY2suaW5wdXRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBVbnJlZ2lzdGVyIGEgcmVsZWFzZSBldmVudCwgdGFraW5nIHBsYWNlIGJlZm9yZSBhIGdlc3R1cmVcbiAqXG4gKiBAcGFyYW0ge0hhbW1lcn0gaGFtbWVyICAgICAgIEEgaGFtbWVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrLCBjYWxsZWQgYXMgY2FsbGJhY2soZXZlbnQpXG4gKi9cbmV4cG9ydCBjb25zdCBvZmZSZWxlYXNlID0gb2ZmVG91Y2g7XG5cbi8qKlxuICogSGFjayB0aGUgUGluY2hSZWNvZ25pemVyIHN1Y2ggdGhhdCBpdCBkb2Vzbid0IHByZXZlbnQgZGVmYXVsdCBiZWhhdmlvclxuICogZm9yIHZlcnRpY2FsIHBhbm5pbmcuXG4gKlxuICogWWVhaCAuLi4gdGhpcyBpcyBxdWl0ZSBhIGhhY2sgLi4uIHNlZSBodHRwczovL2dpdGh1Yi5jb20vaGFtbWVyanMvaGFtbWVyLmpzL2lzc3Vlcy85MzJcbiAqXG4gKiBAcGFyYW0ge0hhbW1lci5QaW5jaH0gcGluY2hSZWNvZ25pemVyXG4gKiBAcmV0dXJucyB7SGFtbWVyLlBpbmNofSByZXR1cm5zIHRoZSBwaW5jaFJlY29nbml6ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVQcmV2ZW50RGVmYXVsdFZlcnRpY2FsbHkocGluY2hSZWNvZ25pemVyKSB7XG4gIGNvbnN0IFRPVUNIX0FDVElPTl9QQU5fWSA9IFwicGFuLXlcIjtcblxuICBwaW5jaFJlY29nbml6ZXIuZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gZGVmYXVsdCBtZXRob2QgcmV0dXJucyBbVE9VQ0hfQUNUSU9OX05PTkVdXG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fUEFOX1ldO1xuICB9O1xuXG4gIHJldHVybiBwaW5jaFJlY29nbml6ZXI7XG59XG4iLCAiaW1wb3J0IHsgb25SZWxlYXNlLCBvblRvdWNoIH0gZnJvbSBcIi4uLy4uL2hhbW1lclV0aWxcIjtcblxuaW1wb3J0IHsgSGFtbWVyLCBzZWxlY3RpdmVEZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgbWFpbiBmcmFtZSBmb3IgdGhlIE5ldHdvcmsuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIG9uY2Ugd2hlbiBhIE5ldHdvcmsgb2JqZWN0IGlzIGNyZWF0ZWQuIFRoZSBmcmFtZVxuICogY29udGFpbnMgYSBjYW52YXMsIGFuZCB0aGlzIGNhbnZhcyBjb250YWlucyBhbGwgb2JqZWN0cyBsaWtlIHRoZSBheGlzIGFuZFxuICogbm9kZXMuXG4gKi9cbmNsYXNzIENhbnZhcyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waXhlbFJhdGlvID0gMTtcbiAgICB0aGlzLmNhbWVyYVN0YXRlID0ge307XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuY2FudmFzVmlld0NlbnRlciA9IHt9O1xuICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3MgPSBbXTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBhdXRvUmVzaXplOiB0cnVlLFxuICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgLy8gYmluZCB0aGUgZXZlbnRzXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub25jZShcInJlc2l6ZVwiLCAob2JqKSA9PiB7XG4gICAgICBpZiAob2JqLndpZHRoICE9PSAwKSB7XG4gICAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnggPSBvYmoud2lkdGggKiAwLjU7XG4gICAgICB9XG4gICAgICBpZiAob2JqLmhlaWdodCAhPT0gMCkge1xuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55ID0gb2JqLmhlaWdodCAqIDAuNTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInNldFNpemVcIiwgdGhpcy5zZXRTaXplLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmhhbW1lckZyYW1lLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaGFtbWVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2NsZWFuVXAoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmllbGRzID0gW1wid2lkdGhcIiwgXCJoZWlnaHRcIiwgXCJhdXRvUmVzaXplXCJdO1xuICAgICAgc2VsZWN0aXZlRGVlcEV4dGVuZChmaWVsZHMsIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gQXV0b21hdGljYWxseSBhZGFwdCB0byBjaGFuZ2luZyBzaXplIG9mIHRoZSBjb250YWluZXIgZWxlbWVudC5cbiAgICB0aGlzLl9jbGVhblVwKCk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUmVzaXplID09PSB0cnVlKSB7XG4gICAgICBpZiAod2luZG93LlJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIGRlY2VudCBicm93c2VycywgaW1tZWRpYXRlIHJlYWN0aW9uc1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuc2V0U2l6ZSgpO1xuICAgICAgICAgIGlmIChjaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgeyBmcmFtZSB9ID0gdGhpcztcblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGZyYW1lKTtcbiAgICAgICAgdGhpcy5fY2xlYW51cENhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZnJhbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElFMTEsIGNvbnRpbm91cyBwb2xsaW5nXG4gICAgICAgIGNvbnN0IHJlc2l6ZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnNldFNpemUoKTtcbiAgICAgICAgICBpZiAoY2hhbmdlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChyZXNpemVUaW1lcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBdXRvbWF0aWNhbGx5IGFkYXB0IHRvIGNoYW5naW5nIHNpemUgb2YgdGhlIGJyb3dzZXIuXG4gICAgICBjb25zdCByZXNpemVGdW5jdGlvbiA9IHRoaXMuX29uUmVzaXplLmJpbmQodGhpcyk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVGdW5jdGlvbik7XG4gICAgICB0aGlzLl9jbGVhbnVwQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVGdW5jdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhblVwKCkge1xuICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3NcbiAgICAgIC5zcGxpY2UoMClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25SZXNpemUoKSB7XG4gICAgdGhpcy5zZXRTaXplKCk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuZCBzdG9yZSB0aGUgY2FtZXJhU3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPXRoaXMucGl4ZWxSYXRpb11cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRDYW1lcmFTdGF0ZShwaXhlbFJhdGlvID0gdGhpcy5waXhlbFJhdGlvKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNXaWR0aCA9IHRoaXMuZnJhbWUuY2FudmFzLndpZHRoIC8gcGl4ZWxSYXRpbztcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNIZWlnaHQgPSB0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQgLyBwaXhlbFJhdGlvO1xuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5zY2FsZSA9IHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wb3NpdGlvbiA9IHRoaXMuRE9NdG9DYW52YXMoe1xuICAgICAgICB4OiAoMC41ICogdGhpcy5mcmFtZS5jYW52YXMud2lkdGgpIC8gcGl4ZWxSYXRpbyxcbiAgICAgICAgeTogKDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCkgLyBwaXhlbFJhdGlvLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY2FtZXJhU3RhdGVcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDYW1lcmFTdGF0ZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNhbWVyYVN0YXRlLnNjYWxlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoICE9PSAwICYmXG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQgIT09IDAgJiZcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyAhPT0gMCAmJlxuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wcmV2aW91c1dpZHRoID4gMCAmJlxuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wcmV2aW91c0hlaWdodCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IHdpZHRoUmF0aW8gPVxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCAvXG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyAvXG4gICAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNXaWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodFJhdGlvID1cbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0IC9cbiAgICAgICAgdGhpcy5waXhlbFJhdGlvIC9cbiAgICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wcmV2aW91c0hlaWdodDtcbiAgICAgIGxldCBuZXdTY2FsZSA9IHRoaXMuY2FtZXJhU3RhdGUuc2NhbGU7XG5cbiAgICAgIGlmICh3aWR0aFJhdGlvICE9IDEgJiYgaGVpZ2h0UmF0aW8gIT0gMSkge1xuICAgICAgICBuZXdTY2FsZSA9IHRoaXMuY2FtZXJhU3RhdGUuc2NhbGUgKiAwLjUgKiAod2lkdGhSYXRpbyArIGhlaWdodFJhdGlvKTtcbiAgICAgIH0gZWxzZSBpZiAod2lkdGhSYXRpbyAhPSAxKSB7XG4gICAgICAgIG5ld1NjYWxlID0gdGhpcy5jYW1lcmFTdGF0ZS5zY2FsZSAqIHdpZHRoUmF0aW87XG4gICAgICB9IGVsc2UgaWYgKGhlaWdodFJhdGlvICE9IDEpIHtcbiAgICAgICAgbmV3U2NhbGUgPSB0aGlzLmNhbWVyYVN0YXRlLnNjYWxlICogaGVpZ2h0UmF0aW87XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gbmV3U2NhbGU7XG4gICAgICAvLyB0aGlzIGNvbWVzIGZyb20gdGhlIHZpZXcgbW9kdWxlLlxuICAgICAgY29uc3QgY3VycmVudFZpZXdDZW50ZXIgPSB0aGlzLkRPTXRvQ2FudmFzKHtcbiAgICAgICAgeDogMC41ICogdGhpcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGgsXG4gICAgICAgIHk6IDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkaXN0YW5jZUZyb21DZW50ZXIgPSB7XG4gICAgICAgIC8vIG9mZnNldCBmcm9tIHZpZXcsIGRpc3RhbmNlIHZpZXcgaGFzIHRvIGNoYW5nZSBieSB0aGVzZSB4IGFuZCB5IHRvIGNlbnRlciB0aGUgbm9kZVxuICAgICAgICB4OiBjdXJyZW50Vmlld0NlbnRlci54IC0gdGhpcy5jYW1lcmFTdGF0ZS5wb3NpdGlvbi54LFxuICAgICAgICB5OiBjdXJyZW50Vmlld0NlbnRlci55IC0gdGhpcy5jYW1lcmFTdGF0ZS5wb3NpdGlvbi55LFxuICAgICAgfTtcbiAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnggKz1cbiAgICAgICAgZGlzdGFuY2VGcm9tQ2VudGVyLnggKiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnkgKz1cbiAgICAgICAgZGlzdGFuY2VGcm9tQ2VudGVyLnkgKiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByZXBhcmVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSArIFwicHhcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKHZhbHVlLmluZGV4T2YoXCIlXCIpICE9PSAtMSB8fCB2YWx1ZS5pbmRleE9mKFwicHhcIikgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZihcIiVcIikgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSArIFwicHhcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJDb3VsZCBub3QgdXNlIHRoZSB2YWx1ZSBzdXBwbGllZCBmb3Igd2lkdGggb3IgaGVpZ2h0OlwiICsgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgSFRNTFxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICAvLyByZW1vdmUgYWxsIGVsZW1lbnRzIGZyb20gdGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgIHdoaWxlICh0aGlzLmJvZHkuY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgdGhpcy5ib2R5LmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLmJvZHkuY29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtbmV0d29ya1wiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG4gICAgdGhpcy5mcmFtZS50YWJJbmRleCA9IDA7IC8vIHRhYiBpbmRleCBpcyByZXF1aXJlZCBmb3Iga2V5Y2hhcm0gdG8gYmluZCBrZXlzdHJva2VzIHRvIHRoZSBkaXYgaW5zdGVhZCBvZiB0aGUgd2luZG93XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHRoaXMuZnJhbWUuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICB0aGlzLmZyYW1lLmNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUuY2FudmFzKTtcblxuICAgIGlmICghdGhpcy5mcmFtZS5jYW52YXMuZ2V0Q29udGV4dCkge1xuICAgICAgY29uc3Qgbm9DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpO1xuICAgICAgbm9DYW52YXMuc3R5bGUuY29sb3IgPSBcInJlZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUucGFkZGluZyA9IFwiMTBweFwiO1xuICAgICAgbm9DYW52YXMuaW5uZXJUZXh0ID0gXCJFcnJvcjogeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTCBjYW52YXNcIjtcbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmFwcGVuZENoaWxkKG5vQ2FudmFzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0UGl4ZWxSYXRpbygpO1xuICAgICAgdGhpcy5zZXRUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIGZyYW1lIHRvIHRoZSBjb250YWluZXIgZWxlbWVudFxuICAgIHRoaXMuYm9keS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG5cbiAgICB0aGlzLmJvZHkudmlldy5zY2FsZSA9IDE7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7XG4gICAgICB4OiAwLjUgKiB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCxcbiAgICAgIHk6IDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9O1xuXG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gYmluZHMgaGFtbWVyLCBpdCBjYW4gYmUgcmVwZWF0ZWQgb3ZlciBhbmQgb3ZlciBkdWUgdG8gdGhlIHVuaXF1ZW5lc3MgY2hlY2suXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYmluZEhhbW1lcigpIHtcbiAgICBpZiAodGhpcy5oYW1tZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5oYW1tZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLmRyYWcgPSB7fTtcbiAgICB0aGlzLnBpbmNoID0ge307XG5cbiAgICAvLyBpbml0IGhhbW1lclxuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lcih0aGlzLmZyYW1lLmNhbnZhcyk7XG4gICAgdGhpcy5oYW1tZXIuZ2V0KFwicGluY2hcIikuc2V0KHsgZW5hYmxlOiB0cnVlIH0pO1xuICAgIC8vIGVuYWJsZSB0byBnZXQgYmV0dGVyIHJlc3BvbnNlLCB0b2RvOiB0ZXN0IG9uIG1vYmlsZS5cbiAgICB0aGlzLmhhbW1lclxuICAgICAgLmdldChcInBhblwiKVxuICAgICAgLnNldCh7IHRocmVzaG9sZDogNSwgZGlyZWN0aW9uOiBIYW1tZXIuRElSRUNUSU9OX0FMTCB9KTtcblxuICAgIG9uVG91Y2godGhpcy5oYW1tZXIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVG91Y2goZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwidGFwXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVGFwKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcImRvdWJsZXRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRvdWJsZVRhcChldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwcmVzc1wiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkhvbGQoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuc3RhcnRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25EcmFnU3RhcnQoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFubW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWcoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuZW5kXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uRHJhZ0VuZChldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwaW5jaFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblBpbmNoKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIC8vIFRPRE86IG5lYXRseSBjbGVhbnVwIHRoZXNlIGhhbmRsZXJzIHdoZW4gcmUtY3JlYXRpbmcgdGhlIENhbnZhcywgSUYgdGhlc2UgYXJlIGRvbmUgd2l0aCBoYW1tZXIsIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiB3aWxsIG5vdCB3b3JrP1xuICAgIHRoaXMuZnJhbWUuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlV2hlZWwoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mcmFtZS5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlTW92ZShldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5mcmFtZS5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uQ29udGV4dChldmVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmhhbW1lckZyYW1lID0gbmV3IEhhbW1lcih0aGlzLmZyYW1lKTtcbiAgICBvblJlbGVhc2UodGhpcy5oYW1tZXJGcmFtZSwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25SZWxlYXNlKGV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuZXcgc2l6ZSBmb3IgdGhlIG5ldHdvcmtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHdpZHRoICAgV2lkdGggaW4gcGl4ZWxzIG9yIHBlcmNlbnRhZ2UgKGZvciBleGFtcGxlICc4MDBweCdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgb3IgJzUwJScpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoZWlnaHQgIEhlaWdodCBpbiBwaXhlbHMgb3IgcGVyY2VudGFnZSAgKGZvciBleGFtcGxlICc0MDBweCdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgb3IgJzMwJScpXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2V0U2l6ZSh3aWR0aCA9IHRoaXMub3B0aW9ucy53aWR0aCwgaGVpZ2h0ID0gdGhpcy5vcHRpb25zLmhlaWdodCkge1xuICAgIHdpZHRoID0gdGhpcy5fcHJlcGFyZVZhbHVlKHdpZHRoKTtcbiAgICBoZWlnaHQgPSB0aGlzLl9wcmVwYXJlVmFsdWUoaGVpZ2h0KTtcblxuICAgIGxldCBlbWl0RXZlbnQgPSBmYWxzZTtcbiAgICBjb25zdCBvbGRXaWR0aCA9IHRoaXMuZnJhbWUuY2FudmFzLndpZHRoO1xuICAgIGNvbnN0IG9sZEhlaWdodCA9IHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgcGl4ZWwgcmF0aW9cbiAgICAvL1xuICAgIC8vIE5PVEU6IENvbW1lbnQgaW4gZm9sbG93aW5nIGlzIHJhdGhlciBpbmNvbnNpc3RlbnQ7IHRoaXMgaXMgdGhlIE9OTFkgcGxhY2UgaW4gdGhlIGNvZGVcbiAgICAvLyAgICAgICB3aGVyZSBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHBpeGVsIHJhdGlvIGNvdWxkIGNoYW5nZSBhdCBydW50aW1lLlxuICAgIC8vICAgICAgIFRoZSBvbmx5IHdheSBJIGNhbiB0aGluayBvZiB0aGlzIGhhcHBlbmluZyBpcyBhIHJvdGF0aW5nIHNjcmVlbiBvciB0YWJsZXQ7IGJ1dCB0aGVuXG4gICAgLy8gICAgICAgdGhlcmUgc2hvdWxkIGJlIGEgbWVjaGFuaXNtIGZvciByZWxvYWRpbmcgdGhlIGRhdGEgKFRPRE86IGNoZWNrIGlmIHRoaXMgaXMgcHJlc2VudCkuXG4gICAgLy9cbiAgICAvLyAgICAgICBJZiB0aGUgYXNzdW1wdGlvbiBpcyB0cnVlIChpLmUuIHBpeGVsIHJhdGlvIGNhbiBjaGFuZ2UgYXQgcnVudGltZSksIHRoZW4gKmFsbCogdXNhZ2VcbiAgICAvLyAgICAgICBvZiBwaXhlbCByYXRpbyBtdXN0IGJlIG92ZXJoYXVsZWQgZm9yIHRoaXMuXG4gICAgLy9cbiAgICAvLyAgICAgICBGb3IgdGhlIHRpbWUgYmVpbmcsIEkgd2lsbCBodW1vciB0aGUgYXNzdW1wdGlvbiBoZXJlLCBhbmQgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgYXNzdW1lIGl0IGlzXG4gICAgLy8gICAgICAgY29uc3RhbnQuXG4gICAgY29uc3QgcHJldmlvdXNSYXRpbyA9IHRoaXMucGl4ZWxSYXRpbzsgLy8gd2UgY2FjaGUgdGhpcyBiZWNhdXNlIHRoZSBjYW1lcmEgc3RhdGUgc3RvcmFnZSBuZWVkcyB0aGUgb2xkIHZhbHVlXG4gICAgdGhpcy5fc2V0UGl4ZWxSYXRpbygpO1xuXG4gICAgaWYgKFxuICAgICAgd2lkdGggIT0gdGhpcy5vcHRpb25zLndpZHRoIHx8XG4gICAgICBoZWlnaHQgIT0gdGhpcy5vcHRpb25zLmhlaWdodCB8fFxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS53aWR0aCAhPSB3aWR0aCB8fFxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5oZWlnaHQgIT0gaGVpZ2h0XG4gICAgKSB7XG4gICAgICB0aGlzLl9nZXRDYW1lcmFTdGF0ZShwcmV2aW91c1JhdGlvKTtcblxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS53aWR0aCA9IHdpZHRoO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSBcIjEwMCVcIjtcblxuICAgICAgdGhpcy5mcmFtZS5jYW52YXMud2lkdGggPSBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCA9IE1hdGgucm91bmQoXG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcblxuICAgICAgdGhpcy5vcHRpb25zLndpZHRoID0gd2lkdGg7XG4gICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICB0aGlzLmNhbnZhc1ZpZXdDZW50ZXIgPSB7XG4gICAgICAgIHg6IDAuNSAqIHRoaXMuZnJhbWUuY2xpZW50V2lkdGgsXG4gICAgICAgIHk6IDAuNSAqIHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgZW1pdEV2ZW50ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyB3b3VsZCBhZGFwdCB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB0byB0aGUgd2lkdGggZnJvbSAxMDAlIGlmIGFuZCBvbmx5IGlmXG4gICAgICAvLyB0aGVyZSBpcyBhIGNoYW5nZS5cblxuICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcbiAgICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGgucm91bmQoXG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcblxuICAgICAgLy8gc3RvcmUgdGhlIGNhbWVyYSBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBzaXplLlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCAhPT0gbmV3V2lkdGggfHxcbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0ICE9PSBuZXdIZWlnaHRcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9nZXRDYW1lcmFTdGF0ZShwcmV2aW91c1JhdGlvKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZnJhbWUuY2FudmFzLndpZHRoICE9PSBuZXdXaWR0aCkge1xuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgICBlbWl0RXZlbnQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCAhPT0gbmV3SGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCA9IG5ld0hlaWdodDtcbiAgICAgICAgZW1pdEV2ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW1pdEV2ZW50ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzaXplXCIsIHtcbiAgICAgICAgd2lkdGg6IE1hdGgucm91bmQodGhpcy5mcmFtZS5jYW52YXMud2lkdGggLyB0aGlzLnBpeGVsUmF0aW8pLFxuICAgICAgICBoZWlnaHQ6IE1hdGgucm91bmQodGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0IC8gdGhpcy5waXhlbFJhdGlvKSxcbiAgICAgICAgb2xkV2lkdGg6IE1hdGgucm91bmQob2xkV2lkdGggLyB0aGlzLnBpeGVsUmF0aW8pLFxuICAgICAgICBvbGRIZWlnaHQ6IE1hdGgucm91bmQob2xkSGVpZ2h0IC8gdGhpcy5waXhlbFJhdGlvKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyByZXN0b3JlIHRoZSBjYW1lcmEgb24gY2hhbmdlLlxuICAgICAgdGhpcy5fc2V0Q2FtZXJhU3RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgaW5pdGlhbGl6ZWQgc28gdGhlIGdldCBhbmQgc2V0IGNhbWVyYSB3aWxsIHdvcmsgZnJvbSBub3cgb24uXG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgcmV0dXJuIGVtaXRFdmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgKi9cbiAgZ2V0Q29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZS5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgcGl4ZWwgcmF0aW8gZm9yIHZhcmlvdXMgYnJvd3NlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lUGl4ZWxSYXRpbygpIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICBpZiAoY3R4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgY2FudmF4IGNvbnRleHRcIik7XG4gICAgfVxuXG4gICAgbGV0IG51bWVyYXRvciA9IDE7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIC8vICh3aW5kb3cgIT09IHVuZGVmaW5lZCkgZG9lc24ndCB3b3JrIGhlcmUhXG4gICAgICAvLyBQcm90ZWN0aW9uIGR1cmluZyB1bml0IHRlc3RzLCB3aGVyZSAnd2luZG93JyBjYW4gYmUgbWlzc2luZ1xuICAgICAgbnVtZXJhdG9yID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgICB9XG5cbiAgICBjb25zdCBkZW5vbWluYXRvciA9XG4gICAgICBjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIDE7XG5cbiAgICByZXR1cm4gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7XG4gIH1cblxuICAvKipcbiAgICogTGF6eSBkZXRlcm1pbmF0aW9uIG9mIHBpeGVsIHJhdGlvLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFBpeGVsUmF0aW8oKSB7XG4gICAgdGhpcy5waXhlbFJhdGlvID0gdGhpcy5fZGV0ZXJtaW5lUGl4ZWxSYXRpbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNmb3JtIGluIHRoZSBjb250YWluZWQgY29udGV4dCwgYmFzZWQgb24gaXRzIHBpeGVsUmF0aW9cbiAgICovXG4gIHNldFRyYW5zZm9ybSgpIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICBpZiAoY3R4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgY2FudmF4IGNvbnRleHRcIik7XG4gICAgfVxuXG4gICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgWCBjb29yZGluYXRlIGluIERPTS1zcGFjZSAoY29vcmRpbmF0ZSBwb2ludCBpbiBicm93c2VyIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXIgZGl2KSB0b1xuICAgKiB0aGUgWCBjb29yZGluYXRlIGluIGNhbnZhcy1zcGFjZSAodGhlIHNpbXVsYXRpb24gc2FuZGJveCwgd2hpY2ggdGhlIGNhbWVyYSBsb29rcyB1cG9uKVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX1hjb252ZXJ0RE9NdG9DYW52YXMoeCkge1xuICAgIHJldHVybiAoeCAtIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLngpIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgWCBjb29yZGluYXRlIGluIGNhbnZhcy1zcGFjZSAodGhlIHNpbXVsYXRpb24gc2FuZGJveCwgd2hpY2ggdGhlIGNhbWVyYSBsb29rcyB1cG9uKSB0b1xuICAgKiB0aGUgWCBjb29yZGluYXRlIGluIERPTS1zcGFjZSAoY29vcmRpbmF0ZSBwb2ludCBpbiBicm93c2VyIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXIgZGl2KVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX1hjb252ZXJ0Q2FudmFzVG9ET00oeCkge1xuICAgIHJldHVybiB4ICogdGhpcy5ib2R5LnZpZXcuc2NhbGUgKyB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIFkgY29vcmRpbmF0ZSBpbiBET00tc3BhY2UgKGNvb3JkaW5hdGUgcG9pbnQgaW4gYnJvd3NlciByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyIGRpdikgdG9cbiAgICogdGhlIFkgY29vcmRpbmF0ZSBpbiBjYW52YXMtc3BhY2UgKHRoZSBzaW11bGF0aW9uIHNhbmRib3gsIHdoaWNoIHRoZSBjYW1lcmEgbG9va3MgdXBvbilcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ZY29udmVydERPTXRvQ2FudmFzKHkpIHtcbiAgICByZXR1cm4gKHkgLSB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55KSAvIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIFkgY29vcmRpbmF0ZSBpbiBjYW52YXMtc3BhY2UgKHRoZSBzaW11bGF0aW9uIHNhbmRib3gsIHdoaWNoIHRoZSBjYW1lcmEgbG9va3MgdXBvbikgdG9cbiAgICogdGhlIFkgY29vcmRpbmF0ZSBpbiBET00tc3BhY2UgKGNvb3JkaW5hdGUgcG9pbnQgaW4gYnJvd3NlciByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyIGRpdilcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ZY29udmVydENhbnZhc1RvRE9NKHkpIHtcbiAgICByZXR1cm4geSAqIHRoaXMuYm9keS52aWV3LnNjYWxlICsgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb3NcbiAgICogQHJldHVybnMge3BvaW50fVxuICAgKi9cbiAgY2FudmFzVG9ET00ocG9zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRoaXMuX1hjb252ZXJ0Q2FudmFzVG9ET00ocG9zLngpLFxuICAgICAgeTogdGhpcy5fWWNvbnZlcnRDYW52YXNUb0RPTShwb3MueSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb3NcbiAgICogQHJldHVybnMge3BvaW50fVxuICAgKi9cbiAgRE9NdG9DYW52YXMocG9zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRoaXMuX1hjb252ZXJ0RE9NdG9DYW52YXMocG9zLngpLFxuICAgICAgeTogdGhpcy5fWWNvbnZlcnRET010b0NhbnZhcyhwb3MueSksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW52YXM7XG4iLCAiaW1wb3J0IHsgZWFzaW5nRnVuY3Rpb25zIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG5pbXBvcnQgTmV0d29ya1V0aWwgZnJvbSBcIi4uL05ldHdvcmtVdGlsXCI7XG5pbXBvcnQgeyBub3JtYWxpemVGaXRPcHRpb25zIH0gZnJvbSBcIi4vdmlldy1oYW5kbGVyXCI7XG5cbi8qKlxuICogVGhlIHZpZXdcbiAqL1xuY2xhc3MgVmlldyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBjYW52YXMpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDEgLyB0aGlzLnJlbmRlclJlZnJlc2hSYXRlO1xuICAgIHRoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb24gPSBcImVhc2VJbk91dFF1aW50XCI7XG4gICAgdGhpcy5lYXNpbmdUaW1lID0gMDtcbiAgICB0aGlzLnNvdXJjZVNjYWxlID0gMDtcbiAgICB0aGlzLnRhcmdldFNjYWxlID0gMDtcbiAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uID0gMDtcbiAgICB0aGlzLnRhcmdldFRyYW5zbGF0aW9uID0gMDtcbiAgICB0aGlzLmxvY2tlZE9uTm9kZUlkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubG9ja2VkT25Ob2RlT2Zmc2V0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudG91Y2hUaW1lID0gMDtcblxuICAgIHRoaXMudmlld0Z1bmN0aW9uID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJmaXRcIiwgdGhpcy5maXQuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJhbmltYXRpb25GaW5pc2hlZFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0b3BSZW5kZXJpbmdcIik7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJ1bmxvY2tOb2RlXCIsIHRoaXMucmVsZWFzZU5vZGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gem9vbXMgb3V0IHRvIGZpdCBhbGwgZGF0YSBvbiBzY3JlZW4gYmFzZWQgb24gYW1vdW50IG9mIG5vZGVzXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17e25vZGVzPUFycmF5fX1dXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRpYWxab29tPWZhbHNlXSAgfCB6b29tIGJhc2VkIG9uIGZpdHRlZCBmb3JtdWxhIG9yIHJhbmdlLCB0cnVlID0gZml0dGVkLCBkZWZhdWx0ID0gZmFsc2U7XG4gICAqL1xuICBmaXQob3B0aW9ucywgaW5pdGlhbFpvb20gPSBmYWxzZSkge1xuICAgIG9wdGlvbnMgPSBub3JtYWxpemVGaXRPcHRpb25zKG9wdGlvbnMsIHRoaXMuYm9keS5ub2RlSW5kaWNlcyk7XG5cbiAgICBjb25zdCBjYW52YXNXaWR0aCA9IHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBjYW52YXNIZWlnaHQgPSB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0O1xuXG4gICAgbGV0IHJhbmdlO1xuICAgIGxldCB6b29tTGV2ZWw7XG4gICAgaWYgKGNhbnZhc1dpZHRoID09PSAwIHx8IGNhbnZhc0hlaWdodCA9PT0gMCkge1xuICAgICAgLy8gVGhlcmUncyBubyBwb2ludCBpbiB0cnlpbmcgdG8gZml0IGludG8gemVybyBzaXplZCBjYW52YXMuIFRoaXMgY291bGRcbiAgICAgIC8vIHBvdGVudGlhbGx5IGV2ZW4gcmVzdWx0IGluIGludmFsaWQgdmFsdWVzIGJlaW5nIGNvbXB1dGVkLiBGb3IgZXhhbXBsZVxuICAgICAgLy8gZm9yIG5ldHdvcmsgd2l0aG91dCBub2RlcyBhbmQgemVybyBzaXplZCBjYW52YXMgdGhlIHpvb20gbGV2ZWwgd291bGRcbiAgICAgIC8vIGVuZCB1cCBiZWluZyBjb21wdXRlZCBhcyAwLzAgd2hpY2ggcmVzdWx0cyBpbiBOYU4uIEluIGFueSBvdGhlciBjYXNlXG4gICAgICAvLyB0aGlzIHdvdWxkIGJlIDAvc29tZXRoaW5nIHdoaWNoIGlzIGFnYWluIHBvaW50bGVzcyB0byBjb21wdXRlLlxuICAgICAgem9vbUxldmVsID0gMTtcblxuICAgICAgcmFuZ2UgPSBOZXR3b3JrVXRpbC5nZXRSYW5nZSh0aGlzLmJvZHkubm9kZXMsIG9wdGlvbnMubm9kZXMpO1xuICAgIH0gZWxzZSBpZiAoaW5pdGlhbFpvb20gPT09IHRydWUpIHtcbiAgICAgIC8vIGNoZWNrIGlmIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBub2RlcyBoYXZlIGEgcHJlZGVmaW5lZCBwb3NpdGlvbi4gSWYgc28sIHdlIHVzZSB0aGUgcmFuZ2UsIG5vdCB0aGUgYXBwcm94aW1hdGlvbi5cbiAgICAgIGxldCBwb3NpdGlvbkRlZmluZWQgPSAwO1xuICAgICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICAgIGlmIChub2RlLnByZWRlZmluZWRQb3NpdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcG9zaXRpb25EZWZpbmVkICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9zaXRpb25EZWZpbmVkID4gMC41ICogdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZpdChvcHRpb25zLCBmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmFuZ2UgPSBOZXR3b3JrVXRpbC5nZXRSYW5nZSh0aGlzLmJvZHkubm9kZXMsIG9wdGlvbnMubm9kZXMpO1xuXG4gICAgICBjb25zdCBudW1iZXJPZk5vZGVzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDtcbiAgICAgIHpvb21MZXZlbCA9IDEyLjY2MiAvIChudW1iZXJPZk5vZGVzICsgNy40MTQ3KSArIDAuMDk2NDgyMjsgLy8gdGhpcyBpcyBvYnRhaW5lZCBmcm9tIGZpdHRpbmcgYSBkYXRhc2V0IGZyb20gNSBwb2ludHMgd2l0aCBzY2FsZSBsZXZlbHMgdGhhdCBsb29rZWQgZ29vZC5cblxuICAgICAgLy8gY29ycmVjdCBmb3IgbGFyZ2VyIGNhbnZhc3Nlcy5cbiAgICAgIGNvbnN0IGZhY3RvciA9IE1hdGgubWluKGNhbnZhc1dpZHRoIC8gNjAwLCBjYW52YXNIZWlnaHQgLyA2MDApO1xuICAgICAgem9vbUxldmVsICo9IGZhY3RvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXNpemVOb2Rlc1wiKTtcbiAgICAgIHJhbmdlID0gTmV0d29ya1V0aWwuZ2V0UmFuZ2UodGhpcy5ib2R5Lm5vZGVzLCBvcHRpb25zLm5vZGVzKTtcblxuICAgICAgY29uc3QgeERpc3RhbmNlID0gTWF0aC5hYnMocmFuZ2UubWF4WCAtIHJhbmdlLm1pblgpICogMS4xO1xuICAgICAgY29uc3QgeURpc3RhbmNlID0gTWF0aC5hYnMocmFuZ2UubWF4WSAtIHJhbmdlLm1pblkpICogMS4xO1xuXG4gICAgICBjb25zdCB4Wm9vbUxldmVsID0gY2FudmFzV2lkdGggLyB4RGlzdGFuY2U7XG4gICAgICBjb25zdCB5Wm9vbUxldmVsID0gY2FudmFzSGVpZ2h0IC8geURpc3RhbmNlO1xuXG4gICAgICB6b29tTGV2ZWwgPSB4Wm9vbUxldmVsIDw9IHlab29tTGV2ZWwgPyB4Wm9vbUxldmVsIDogeVpvb21MZXZlbDtcbiAgICB9XG5cbiAgICBpZiAoem9vbUxldmVsID4gb3B0aW9ucy5tYXhab29tTGV2ZWwpIHtcbiAgICAgIHpvb21MZXZlbCA9IG9wdGlvbnMubWF4Wm9vbUxldmVsO1xuICAgIH0gZWxzZSBpZiAoem9vbUxldmVsIDwgb3B0aW9ucy5taW5ab29tTGV2ZWwpIHtcbiAgICAgIHpvb21MZXZlbCA9IG9wdGlvbnMubWluWm9vbUxldmVsO1xuICAgIH1cblxuICAgIGNvbnN0IGNlbnRlciA9IE5ldHdvcmtVdGlsLmZpbmRDZW50ZXIocmFuZ2UpO1xuICAgIGNvbnN0IGFuaW1hdGlvbk9wdGlvbnMgPSB7XG4gICAgICBwb3NpdGlvbjogY2VudGVyLFxuICAgICAgc2NhbGU6IHpvb21MZXZlbCxcbiAgICAgIGFuaW1hdGlvbjogb3B0aW9ucy5hbmltYXRpb24sXG4gICAgfTtcbiAgICB0aGlzLm1vdmVUbyhhbmltYXRpb25PcHRpb25zKTtcbiAgfVxuXG4gIC8vIGFuaW1hdGlvblxuXG4gIC8qKlxuICAgKiBDZW50ZXIgYSBub2RlIGluIHZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBub2RlSWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zXVxuICAgKi9cbiAgZm9jdXMobm9kZUlkLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICB4OiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS54LFxuICAgICAgICB5OiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS55LFxuICAgICAgfTtcbiAgICAgIG9wdGlvbnMucG9zaXRpb24gPSBub2RlUG9zaXRpb247XG4gICAgICBvcHRpb25zLmxvY2tlZE9uTm9kZSA9IG5vZGVJZDtcblxuICAgICAgdGhpcy5tb3ZlVG8ob3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb2RlOiBcIiArIG5vZGVJZCArIFwiIGNhbm5vdCBiZSBmb3VuZC5cIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICB8ICBvcHRpb25zLm9mZnNldCAgID0ge3g6bnVtYmVyLCB5Om51bWJlcn0gICAvLyBvZmZzZXQgZnJvbSB0aGUgY2VudGVyIGluIERPTSBwaXhlbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuc2NhbGUgICAgPSBudW1iZXIgICAgICAgICAgICAgICAgIC8vIHNjYWxlIHRvIG1vdmUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMucG9zaXRpb24gPSB7eDpudW1iZXIsIHk6bnVtYmVyfSAgIC8vIHBvc2l0aW9uIHRvIG1vdmUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuYW5pbWF0aW9uID0ge2R1cmF0aW9uOm51bWJlciwgZWFzaW5nRnVuY3Rpb246U3RyaW5nfSB8fCBCb29sZWFuICAgLy8gcG9zaXRpb24gdG8gbW92ZSB0b1xuICAgKi9cbiAgbW92ZVRvKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMub2Zmc2V0ICE9IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLm9mZnNldC54ICE9IG51bGwpIHtcbiAgICAgICAgLy8gQ29lcmNlIGFuZCB2ZXJpZnkgdGhhdCB4IGlzIHZhbGlkLlxuICAgICAgICBvcHRpb25zLm9mZnNldC54ID0gK29wdGlvbnMub2Zmc2V0Lng7XG4gICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMub2Zmc2V0LngpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdUaGUgb3B0aW9uIFwib2Zmc2V0LnhcIiBoYXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLm9mZnNldC54ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMub2Zmc2V0LnkgIT0gbnVsbCkge1xuICAgICAgICAvLyBDb2VyY2UgYW5kIHZlcmlmeSB0aGF0IHkgaXMgdmFsaWQuXG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LnkgPSArb3B0aW9ucy5vZmZzZXQueTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5vZmZzZXQueSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgJ1RoZSBvcHRpb24gXCJvZmZzZXQueVwiIGhhcyB0byBiZSBhIGZpbml0ZSBudW1iZXIuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LnggPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLm9mZnNldCA9IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMucG9zaXRpb24ueCAhPSBudWxsKSB7XG4gICAgICAgIC8vIENvZXJjZSBhbmQgdmVyaWZ5IHRoYXQgeCBpcyB2YWxpZC5cbiAgICAgICAgb3B0aW9ucy5wb3NpdGlvbi54ID0gK29wdGlvbnMucG9zaXRpb24ueDtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5wb3NpdGlvbi54KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAnVGhlIG9wdGlvbiBcInBvc2l0aW9uLnhcIiBoYXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnBvc2l0aW9uLnggPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wb3NpdGlvbi55ICE9IG51bGwpIHtcbiAgICAgICAgLy8gQ29lcmNlIGFuZCB2ZXJpZnkgdGhhdCB5IGlzIHZhbGlkLlxuICAgICAgICBvcHRpb25zLnBvc2l0aW9uLnkgPSArb3B0aW9ucy5wb3NpdGlvbi55O1xuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLnBvc2l0aW9uLnkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdUaGUgb3B0aW9uIFwicG9zaXRpb24ueVwiIGhhcyB0byBiZSBhIGZpbml0ZSBudW1iZXIuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMucG9zaXRpb24ueCA9IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucG9zaXRpb24gPSB0aGlzLmdldFZpZXdQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNjYWxlICE9IG51bGwpIHtcbiAgICAgIC8vIENvZXJjZSBhbmQgdmVyaWZ5IHRoYXQgdGhlIHNjYWxlIGlzIHZhbGlkLlxuICAgICAgb3B0aW9ucy5zY2FsZSA9ICtvcHRpb25zLnNjYWxlO1xuICAgICAgaWYgKCEob3B0aW9ucy5zY2FsZSA+IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ1RoZSBvcHRpb24gXCJzY2FsZVwiIGhhcyB0byBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5hbmltYXRpb24gPSB7IGR1cmF0aW9uOiAwIH07XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uID0geyBkdXJhdGlvbjogMCB9O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24gPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uID0ge307XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbiA9IDEwMDA7XG4gICAgfSAvLyBkZWZhdWx0IGR1cmF0aW9uXG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0aW9uLmVhc2luZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uLmVhc2luZ0Z1bmN0aW9uID0gXCJlYXNlSW5PdXRRdWFkXCI7XG4gICAgfSAvLyBkZWZhdWx0IGVhc2luZyBmdW5jdGlvblxuXG4gICAgdGhpcy5hbmltYXRlVmlldyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgfCAgb3B0aW9ucy5vZmZzZXQgICA9IHt4Om51bWJlciwgeTpudW1iZXJ9ICAgLy8gb2Zmc2V0IGZyb20gdGhlIGNlbnRlciBpbiBET00gcGl4ZWxzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLnRpbWUgICAgID0gbnVtYmVyICAgICAgICAgICAgICAgICAvLyBhbmltYXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuc2NhbGUgICAgPSBudW1iZXIgICAgICAgICAgICAgICAgIC8vIHNjYWxlIHRvIGFuaW1hdGUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMucG9zaXRpb24gPSB7eDpudW1iZXIsIHk6bnVtYmVyfSAgIC8vIHBvc2l0aW9uIHRvIGFuaW1hdGUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuZWFzaW5nRnVuY3Rpb24gPSBTdHJpbmcgICAgICAgICAgIC8vIGxpbmVhciwgZWFzZUluUXVhZCwgZWFzZU91dFF1YWQsIGVhc2VJbk91dFF1YWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYXNlSW5DdWJpYywgZWFzZU91dEN1YmljLCBlYXNlSW5PdXRDdWJpYyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhc2VJblF1YXJ0LCBlYXNlT3V0UXVhcnQsIGVhc2VJbk91dFF1YXJ0LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFzZUluUXVpbnQsIGVhc2VPdXRRdWludCwgZWFzZUluT3V0UXVpbnRcbiAgICovXG4gIGFuaW1hdGVWaWV3KG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb24gPSBvcHRpb25zLmFuaW1hdGlvbi5lYXNpbmdGdW5jdGlvbjtcbiAgICAvLyByZWxlYXNlIGlmIHNvbWV0aGluZyBmb2N1c3NlZCBvbiB0aGUgbm9kZVxuICAgIHRoaXMucmVsZWFzZU5vZGUoKTtcbiAgICBpZiAob3B0aW9ucy5sb2NrZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlSWQgPSBvcHRpb25zLmxvY2tlZE9uTm9kZTtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlT2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQ7XG4gICAgfVxuXG4gICAgLy8gZm9yY2VmdWxseSBjb21wbGV0ZSB0aGUgb2xkIGFuaW1hdGlvbiBpZiBpdCB3YXMgc3RpbGwgcnVubmluZ1xuICAgIGlmICh0aGlzLmVhc2luZ1RpbWUgIT0gMCkge1xuICAgICAgdGhpcy5fdHJhbnNpdGlvblJlZHJhdyh0cnVlKTsgLy8gYnkgc2V0dGluZyBlYXNpbmd0aW1lIHRvIDEsIHdlIGZpbmlzaCB0aGUgYW5pbWF0aW9uLlxuICAgIH1cblxuICAgIHRoaXMuc291cmNlU2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG4gICAgdGhpcy50YXJnZXRTY2FsZSA9IG9wdGlvbnMuc2NhbGU7XG5cbiAgICAvLyBzZXQgdGhlIHNjYWxlIHNvIHRoZSB2aWV3Q2VudGVyIGlzIGJhc2VkIG9uIHRoZSBjb3JyZWN0IHpvb20gbGV2ZWwuIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgdHJhbnNpdGlvblJlZHJhd1xuICAgIC8vIGJ1dCBhdCBsZWFzdCB0aGVuIHdlJ2xsIGhhdmUgdGhlIHRhcmdldCB0cmFuc2l0aW9uXG4gICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSB0aGlzLnRhcmdldFNjYWxlO1xuICAgIGNvbnN0IHZpZXdDZW50ZXIgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyh7XG4gICAgICB4OiAwLjUgKiB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGgsXG4gICAgICB5OiAwLjUgKiB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQ2VudGVyID0ge1xuICAgICAgLy8gb2Zmc2V0IGZyb20gdmlldywgZGlzdGFuY2UgdmlldyBoYXMgdG8gY2hhbmdlIGJ5IHRoZXNlIHggYW5kIHkgdG8gY2VudGVyIHRoZSBub2RlXG4gICAgICB4OiB2aWV3Q2VudGVyLnggLSBvcHRpb25zLnBvc2l0aW9uLngsXG4gICAgICB5OiB2aWV3Q2VudGVyLnkgLSBvcHRpb25zLnBvc2l0aW9uLnksXG4gICAgfTtcbiAgICB0aGlzLnRhcmdldFRyYW5zbGF0aW9uID0ge1xuICAgICAgeDpcbiAgICAgICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi54ICtcbiAgICAgICAgZGlzdGFuY2VGcm9tQ2VudGVyLnggKiB0aGlzLnRhcmdldFNjYWxlICtcbiAgICAgICAgb3B0aW9ucy5vZmZzZXQueCxcbiAgICAgIHk6XG4gICAgICAgIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueSArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci55ICogdGhpcy50YXJnZXRTY2FsZSArXG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LnksXG4gICAgfTtcblxuICAgIC8vIGlmIHRoZSB0aW1lIGlzIHNldCB0byAwLCBkb24ndCBkbyBhbiBhbmltYXRpb25cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24uZHVyYXRpb24gPT09IDApIHtcbiAgICAgIGlmICh0aGlzLmxvY2tlZE9uTm9kZUlkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnZpZXdGdW5jdGlvbiA9IHRoaXMuX2xvY2tlZFJlZHJhdy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImluaXRSZWRyYXdcIiwgdGhpcy52aWV3RnVuY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSB0aGlzLnRhcmdldFNjYWxlO1xuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHRoaXMudGFyZ2V0VHJhbnNsYXRpb247XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbmltYXRpb25TcGVlZCA9XG4gICAgICAgIDEgLyAoNjAgKiBvcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbiAqIDAuMDAxKSB8fCAxIC8gNjA7IC8vIDYwIGZvciA2MCBzZWNvbmRzLCAwLjAwMSBmb3IgbWlsbGknc1xuICAgICAgdGhpcy5hbmltYXRpb25FYXNpbmdGdW5jdGlvbiA9IG9wdGlvbnMuYW5pbWF0aW9uLmVhc2luZ0Z1bmN0aW9uO1xuXG4gICAgICB0aGlzLnZpZXdGdW5jdGlvbiA9IHRoaXMuX3RyYW5zaXRpb25SZWRyYXcuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0YXJ0UmVuZGVyaW5nXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB1c2VkIHRvIGFuaW1hdGUgc21vb3RobHkgYnkgaGlqYWNraW5nIHRoZSByZWRyYXcgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9ja2VkUmVkcmF3KCkge1xuICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgIHg6IHRoaXMuYm9keS5ub2Rlc1t0aGlzLmxvY2tlZE9uTm9kZUlkXS54LFxuICAgICAgeTogdGhpcy5ib2R5Lm5vZGVzW3RoaXMubG9ja2VkT25Ob2RlSWRdLnksXG4gICAgfTtcbiAgICBjb25zdCB2aWV3Q2VudGVyID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLFxuICAgICAgeTogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9KTtcbiAgICBjb25zdCBkaXN0YW5jZUZyb21DZW50ZXIgPSB7XG4gICAgICAvLyBvZmZzZXQgZnJvbSB2aWV3LCBkaXN0YW5jZSB2aWV3IGhhcyB0byBjaGFuZ2UgYnkgdGhlc2UgeCBhbmQgeSB0byBjZW50ZXIgdGhlIG5vZGVcbiAgICAgIHg6IHZpZXdDZW50ZXIueCAtIG5vZGVQb3NpdGlvbi54LFxuICAgICAgeTogdmlld0NlbnRlci55IC0gbm9kZVBvc2l0aW9uLnksXG4gICAgfTtcbiAgICBjb25zdCBzb3VyY2VUcmFuc2xhdGlvbiA9IHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uO1xuICAgIGNvbnN0IHRhcmdldFRyYW5zbGF0aW9uID0ge1xuICAgICAgeDpcbiAgICAgICAgc291cmNlVHJhbnNsYXRpb24ueCArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci54ICogdGhpcy5ib2R5LnZpZXcuc2NhbGUgK1xuICAgICAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldC54LFxuICAgICAgeTpcbiAgICAgICAgc291cmNlVHJhbnNsYXRpb24ueSArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci55ICogdGhpcy5ib2R5LnZpZXcuc2NhbGUgK1xuICAgICAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldC55LFxuICAgIH07XG5cbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHRhcmdldFRyYW5zbGF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBzdGF0ZSBvZiBhIGxvY2tlZCBvbiBOb2RlXG4gICAqL1xuICByZWxlYXNlTm9kZSgpIHtcbiAgICBpZiAodGhpcy5sb2NrZWRPbk5vZGVJZCAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmlld0Z1bmN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZihcImluaXRSZWRyYXdcIiwgdGhpcy52aWV3RnVuY3Rpb24pO1xuICAgICAgdGhpcy5sb2NrZWRPbk5vZGVJZCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlT2Zmc2V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmaW5pc2hlZD1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90cmFuc2l0aW9uUmVkcmF3KGZpbmlzaGVkID0gZmFsc2UpIHtcbiAgICB0aGlzLmVhc2luZ1RpbWUgKz0gdGhpcy5hbmltYXRpb25TcGVlZDtcbiAgICB0aGlzLmVhc2luZ1RpbWUgPSBmaW5pc2hlZCA9PT0gdHJ1ZSA/IDEuMCA6IHRoaXMuZWFzaW5nVGltZTtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gZWFzaW5nRnVuY3Rpb25zW3RoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb25dKFxuICAgICAgdGhpcy5lYXNpbmdUaW1lXG4gICAgKTtcblxuICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID1cbiAgICAgIHRoaXMuc291cmNlU2NhbGUgKyAodGhpcy50YXJnZXRTY2FsZSAtIHRoaXMuc291cmNlU2NhbGUpICogcHJvZ3Jlc3M7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7XG4gICAgICB4OlxuICAgICAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uLnggK1xuICAgICAgICAodGhpcy50YXJnZXRUcmFuc2xhdGlvbi54IC0gdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi54KSAqIHByb2dyZXNzLFxuICAgICAgeTpcbiAgICAgICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi55ICtcbiAgICAgICAgKHRoaXMudGFyZ2V0VHJhbnNsYXRpb24ueSAtIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueSkgKiBwcm9ncmVzcyxcbiAgICB9O1xuXG4gICAgLy8gY2xlYW51cFxuICAgIGlmICh0aGlzLmVhc2luZ1RpbWUgPj0gMS4wKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIHRoaXMuZWFzaW5nVGltZSA9IDA7XG4gICAgICBpZiAodGhpcy5sb2NrZWRPbk5vZGVJZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52aWV3RnVuY3Rpb24gPSB0aGlzLl9sb2NrZWRSZWRyYXcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJhbmltYXRpb25GaW5pc2hlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFNjYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7e3g6IG51bWJlciwgeTogbnVtYmVyfX1cbiAgICovXG4gIGdldFZpZXdQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLFxuICAgICAgeTogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3O1xuIiwgInR5cGUgSWRUeXBlID0gc3RyaW5nIHwgbnVtYmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdGaXRPcHRpb25zIHtcbiAgbm9kZXM6IElkVHlwZVtdO1xuICBtaW5ab29tTGV2ZWw6IG51bWJlcjtcbiAgbWF4Wm9vbUxldmVsOiBudW1iZXI7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhlIGZpdCBvcHRpb25zLCByZXBsYWNlIG1pc3Npbmcgb3B0aW9uYWwgdmFsdWVzIGJ5IGRlZmF1bHRzIGV0Yy5cbiAqXG4gKiBAcGFyYW0gcmF3T3B0aW9ucyAtIFRoZSByYXcgb3B0aW9ucy5cbiAqIEBwYXJhbSBhbGxOb2RlSWRzIC0gQWxsIG5vZGUgaWRzIHRoYXQgd2lsbCBiZSB1c2VkIGlmIG5vZGVzIGFyZSBvbWl0dGVkIGluXG4gKiB0aGUgcmF3IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBPcHRpb25zIHdpdGggZXZlcnl0aGluZyBmaWxsZWQgaW4gYW5kIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZpdE9wdGlvbnMoXG4gIHJhd09wdGlvbnM6IFBhcnRpYWw8Vmlld0ZpdE9wdGlvbnM+LFxuICBhbGxOb2RlSWRzOiBJZFR5cGVbXVxuKTogVmlld0ZpdE9wdGlvbnMge1xuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbjxWaWV3Rml0T3B0aW9ucywgUGFydGlhbDxWaWV3Rml0T3B0aW9ucz4+KFxuICAgIHtcbiAgICAgIG5vZGVzOiBhbGxOb2RlSWRzLFxuICAgICAgbWluWm9vbUxldmVsOiBOdW1iZXIuTUlOX1ZBTFVFLFxuICAgICAgbWF4Wm9vbUxldmVsOiAxLFxuICAgIH0sXG4gICAgcmF3T3B0aW9ucyA/PyB7fVxuICApO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zLm5vZGVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOb2RlcyBoYXMgdG8gYmUgYW4gYXJyYXkgb2YgaWRzLlwiKTtcbiAgfVxuICBpZiAob3B0aW9ucy5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICBvcHRpb25zLm5vZGVzID0gYWxsTm9kZUlkcztcbiAgfVxuXG4gIGlmICghKHR5cGVvZiBvcHRpb25zLm1pblpvb21MZXZlbCA9PT0gXCJudW1iZXJcIiAmJiBvcHRpb25zLm1pblpvb21MZXZlbCA+IDApKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1pbiB6b29tIGxldmVsIGhhcyB0byBiZSBhIG51bWJlciBoaWdoZXIgdGhhbiB6ZXJvLlwiKTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKFxuICAgICAgdHlwZW9mIG9wdGlvbnMubWF4Wm9vbUxldmVsID09PSBcIm51bWJlclwiICYmXG4gICAgICBvcHRpb25zLm1pblpvb21MZXZlbCA8PSBvcHRpb25zLm1heFpvb21MZXZlbFxuICAgIClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiTWF4IHpvb20gbGV2ZWwgaGFzIHRvIGJlIGEgbnVtYmVyIGhpZ2hlciB0aGFuIG1pbiB6b29tIGxldmVsLlwiXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuIiwgIi8qKlxyXG4gKiBDcmVhdGVkIGJ5IEFsZXggb24gMTEvNi8yMDE0LlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ga2V5Y2hhcm0ob3B0aW9ucykge1xyXG4gIHZhciBwcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wcmV2ZW50RGVmYXVsdCB8fCBmYWxzZTtcclxuXHJcbiAgdmFyIGNvbnRhaW5lciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250YWluZXIgfHwgd2luZG93O1xyXG5cclxuICB2YXIgX2V4cG9ydEZ1bmN0aW9ucyA9IHt9O1xyXG4gIHZhciBfYm91bmQgPSB7a2V5ZG93bjp7fSwga2V5dXA6e319O1xyXG4gIHZhciBfa2V5cyA9IHt9O1xyXG4gIHZhciBpO1xyXG5cclxuICAvLyBhIC0gelxyXG4gIGZvciAoaSA9IDk3OyBpIDw9IDEyMjsgaSsrKSB7X2tleXNbU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSB7Y29kZTo2NSArIChpIC0gOTcpLCBzaGlmdDogZmFsc2V9O31cclxuICAvLyBBIC0gWlxyXG4gIGZvciAoaSA9IDY1OyBpIDw9IDkwOyBpKyspIHtfa2V5c1tTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IHtjb2RlOmksIHNoaWZ0OiB0cnVlfTt9XHJcbiAgLy8gMCAtIDlcclxuICBmb3IgKGkgPSAwOyAgaSA8PSA5OyAgIGkrKykge19rZXlzWycnICsgaV0gPSB7Y29kZTo0OCArIGksIHNoaWZ0OiBmYWxzZX07fVxyXG4gIC8vIEYxIC0gRjEyXHJcbiAgZm9yIChpID0gMTsgIGkgPD0gMTI7ICAgaSsrKSB7X2tleXNbJ0YnICsgaV0gPSB7Y29kZToxMTEgKyBpLCBzaGlmdDogZmFsc2V9O31cclxuICAvLyBudW0wIC0gbnVtOVxyXG4gIGZvciAoaSA9IDA7ICBpIDw9IDk7ICAgaSsrKSB7X2tleXNbJ251bScgKyBpXSA9IHtjb2RlOjk2ICsgaSwgc2hpZnQ6IGZhbHNlfTt9XHJcblxyXG4gIC8vIG51bXBhZCBtaXNjXHJcbiAgX2tleXNbJ251bSonXSA9IHtjb2RlOjEwNiwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snbnVtKyddID0ge2NvZGU6MTA3LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydudW0tJ10gPSB7Y29kZToxMDksIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ251bS8nXSA9IHtjb2RlOjExMSwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snbnVtLiddID0ge2NvZGU6MTEwLCBzaGlmdDogZmFsc2V9O1xyXG4gIC8vIGFycm93c1xyXG4gIF9rZXlzWydsZWZ0J10gID0ge2NvZGU6MzcsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3VwJ10gICAgPSB7Y29kZTozOCwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1sncmlnaHQnXSA9IHtjb2RlOjM5LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydkb3duJ10gID0ge2NvZGU6NDAsIHNoaWZ0OiBmYWxzZX07XHJcbiAgLy8gZXh0cmEga2V5c1xyXG4gIF9rZXlzWydzcGFjZSddID0ge2NvZGU6MzIsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ2VudGVyJ10gPSB7Y29kZToxMywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snc2hpZnQnXSA9IHtjb2RlOjE2LCBzaGlmdDogdW5kZWZpbmVkfTtcclxuICBfa2V5c1snZXNjJ10gICA9IHtjb2RlOjI3LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydiYWNrc3BhY2UnXSA9IHtjb2RlOjgsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3RhYiddICAgICAgID0ge2NvZGU6OSwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snY3RybCddICAgICAgPSB7Y29kZToxNywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snYWx0J10gICAgICAgPSB7Y29kZToxOCwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snZGVsZXRlJ10gICAgPSB7Y29kZTo0Niwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1sncGFnZXVwJ10gICAgPSB7Y29kZTozMywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1sncGFnZWRvd24nXSAgPSB7Y29kZTozNCwgc2hpZnQ6IGZhbHNlfTtcclxuICAvLyBzeW1ib2xzXHJcbiAgX2tleXNbJz0nXSAgICAgPSB7Y29kZToxODcsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJy0nXSAgICAgPSB7Y29kZToxODksIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ10nXSAgICAgPSB7Y29kZToyMjEsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ1snXSAgICAgPSB7Y29kZToyMTksIHNoaWZ0OiBmYWxzZX07XHJcblxyXG5cclxuXHJcbiAgdmFyIGRvd24gPSBmdW5jdGlvbihldmVudCkge2hhbmRsZUV2ZW50KGV2ZW50LCdrZXlkb3duJyk7fTtcclxuICB2YXIgdXAgPSBmdW5jdGlvbihldmVudCkge2hhbmRsZUV2ZW50KGV2ZW50LCdrZXl1cCcpO307XHJcblxyXG4gIC8vIGhhbmRsZSB0aGUgYWN0dWFseSBib3VuZCBrZXkgd2l0aCB0aGUgZXZlbnRcclxuICB2YXIgaGFuZGxlRXZlbnQgPSBmdW5jdGlvbihldmVudCx0eXBlKSB7XHJcbiAgICBpZiAoX2JvdW5kW3R5cGVdW2V2ZW50LmtleUNvZGVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdmFyIGJvdW5kID0gX2JvdW5kW3R5cGVdW2V2ZW50LmtleUNvZGVdO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGJvdW5kW2ldLnNoaWZ0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGJvdW5kW2ldLmZuKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYm91bmRbaV0uc2hpZnQgPT0gdHJ1ZSAmJiBldmVudC5zaGlmdEtleSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICBib3VuZFtpXS5mbihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGJvdW5kW2ldLnNoaWZ0ID09IGZhbHNlICYmIGV2ZW50LnNoaWZ0S2V5ID09IGZhbHNlKSB7XHJcbiAgICAgICAgICBib3VuZFtpXS5mbihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocHJldmVudERlZmF1bHQgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyBiaW5kIGEga2V5IHRvIGEgY2FsbGJhY2tcclxuICBfZXhwb3J0RnVuY3Rpb25zLmJpbmQgPSBmdW5jdGlvbihrZXksIGNhbGxiYWNrLCB0eXBlKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHR5cGUgPSAna2V5ZG93bic7XHJcbiAgICB9XHJcbiAgICBpZiAoX2tleXNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGtleTogXCIgKyBrZXkpO1xyXG4gICAgfVxyXG4gICAgaWYgKF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV0gPSBbXTtcclxuICAgIH1cclxuICAgIF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdLnB1c2goe2ZuOmNhbGxiYWNrLCBzaGlmdDpfa2V5c1trZXldLnNoaWZ0fSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8vIGJpbmQgYWxsIGtleXMgdG8gYSBjYWxsIGJhY2sgKGRlbW8gcHVycG9zZXMpXHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5iaW5kQWxsID0gZnVuY3Rpb24oY2FsbGJhY2ssIHR5cGUpIHtcclxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdHlwZSA9ICdrZXlkb3duJztcclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiBfa2V5cykge1xyXG4gICAgICBpZiAoX2tleXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIF9leHBvcnRGdW5jdGlvbnMuYmluZChrZXksY2FsbGJhY2ssdHlwZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyBnZXQgdGhlIGtleSBsYWJlbCBmcm9tIGFuIGV2ZW50XHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5nZXRLZXkgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgZm9yICh2YXIga2V5IGluIF9rZXlzKSB7XHJcbiAgICAgIGlmIChfa2V5cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ID09IHRydWUgJiYgX2tleXNba2V5XS5zaGlmdCA9PSB0cnVlICYmIGV2ZW50LmtleUNvZGUgPT0gX2tleXNba2V5XS5jb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5zaGlmdEtleSA9PSBmYWxzZSAmJiBfa2V5c1trZXldLnNoaWZ0ID09IGZhbHNlICYmIGV2ZW50LmtleUNvZGUgPT0gX2tleXNba2V5XS5jb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5rZXlDb2RlID09IF9rZXlzW2tleV0uY29kZSAmJiBrZXkgPT0gJ3NoaWZ0Jykge1xyXG4gICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBcInVua25vd24ga2V5LCBjdXJyZW50bHkgbm90IHN1cHBvcnRlZFwiO1xyXG4gIH07XHJcblxyXG4gIC8vIHVuYmluZCBlaXRoZXIgYSBzcGVjaWZpYyBjYWxsYmFjayBmcm9tIGEga2V5IG9yIGFsbCBvZiB0aGVtIChieSBsZWF2aW5nIGNhbGxiYWNrIHVuZGVmaW5lZClcclxuICBfZXhwb3J0RnVuY3Rpb25zLnVuYmluZCA9IGZ1bmN0aW9uKGtleSwgY2FsbGJhY2ssIHR5cGUpIHtcclxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdHlwZSA9ICdrZXlkb3duJztcclxuICAgIH1cclxuICAgIGlmIChfa2V5c1trZXldID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQga2V5OiBcIiArIGtleSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB2YXIgbmV3QmluZGluZ3MgPSBbXTtcclxuICAgICAgdmFyIGJvdW5kID0gX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV07XHJcbiAgICAgIGlmIChib3VuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKCEoYm91bmRbaV0uZm4gPT0gY2FsbGJhY2sgJiYgYm91bmRbaV0uc2hpZnQgPT0gX2tleXNba2V5XS5zaGlmdCkpIHtcclxuICAgICAgICAgICAgbmV3QmluZGluZ3MucHVzaChfYm91bmRbdHlwZV1bX2tleXNba2V5XS5jb2RlXVtpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdID0gbmV3QmluZGluZ3M7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV0gPSBbXTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyByZXNldCBhbGwgYm91bmQgdmFyaWFibGVzLlxyXG4gIF9leHBvcnRGdW5jdGlvbnMucmVzZXQgPSBmdW5jdGlvbigpIHtcclxuICAgIF9ib3VuZCA9IHtrZXlkb3duOnt9LCBrZXl1cDp7fX07XHJcbiAgfTtcclxuXHJcbiAgLy8gdW5iaW5kIGFsbCBsaXN0ZW5lcnMgYW5kIHJlc2V0IGFsbCB2YXJpYWJsZXMuXHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfYm91bmQgPSB7a2V5ZG93bjp7fSwga2V5dXA6e319O1xyXG4gICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBkb3duLCB0cnVlKTtcclxuICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHVwLCB0cnVlKTtcclxuICB9O1xyXG5cclxuICAvLyBjcmVhdGUgbGlzdGVuZXJzLlxyXG4gIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyxkb3duLHRydWUpO1xyXG4gIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsdXAsdHJ1ZSk7XHJcblxyXG4gIC8vIHJldHVybiB0aGUgcHVibGljIGZ1bmN0aW9ucy5cclxuICByZXR1cm4gX2V4cG9ydEZ1bmN0aW9ucztcclxufVxyXG4iLCAiaW1wb3J0IFwiLi9OYXZpZ2F0aW9uSGFuZGxlci5jc3NcIjtcblxuaW1wb3J0IHsgSGFtbWVyIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgb25SZWxlYXNlLCBvblRvdWNoIH0gZnJvbSBcIi4uLy4uLy4uL2hhbW1lclV0aWxcIjtcbmltcG9ydCBrZXljaGFybSBmcm9tIFwia2V5Y2hhcm1cIjtcblxuLyoqXG4gKiBOYXZpZ2F0aW9uIEhhbmRsZXJcbiAqL1xuY2xhc3MgTmF2aWdhdGlvbkhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcblxuICAgIHRoaXMuaWNvbnNDcmVhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5uYXZpZ2F0aW9uSGFtbWVycyA9IFtdO1xuICAgIHRoaXMuYm91bmRGdW5jdGlvbnMgPSB7fTtcbiAgICB0aGlzLnRvdWNoVGltZSA9IDA7XG4gICAgdGhpcy5hY3RpdmF0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiYWN0aXZhdGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5hY3RpdmF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZWFjdGl2YXRlXCIsICgpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbmZpZ3VyZUtleWJvYXJkQmluZGluZ3MoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMua2V5Y2hhcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmtleWNoYXJtLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy5jcmVhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBvciByZWZyZXNoZXMgbmF2aWdhdGlvbiBhbmQgc2V0cyBrZXkgYmluZGluZ3NcbiAgICovXG4gIGNyZWF0ZSgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm5hdmlnYXRpb25CdXR0b25zID09PSB0cnVlKSB7XG4gICAgICBpZiAodGhpcy5pY29uc0NyZWF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubG9hZE5hdmlnYXRpb25FbGVtZW50cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pY29uc0NyZWF0ZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY2xlYW5OYXZpZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIHVwIHByZXZpb3VzIG5hdmlnYXRpb24gaXRlbXNcbiAgICovXG4gIGNsZWFuTmF2aWdhdGlvbigpIHtcbiAgICAvLyBjbGVhbiBoYW1tZXIgYmluZGluZ3NcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uSGFtbWVycy5sZW5ndGggIT0gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5hdmlnYXRpb25IYW1tZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkhhbW1lcnNbaV0uZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5uYXZpZ2F0aW9uSGFtbWVycyA9IFtdO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHByZXZpb3VzIG5hdmlnYXRpb24gaXRlbXNcbiAgICBpZiAoXG4gICAgICB0aGlzLm5hdmlnYXRpb25ET00gJiZcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0gJiZcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0ucGFyZW50Tm9kZVxuICAgICkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFxuICAgICAgICB0aGlzLm5hdmlnYXRpb25ET01bXCJ3cmFwcGVyXCJdXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaWNvbnNDcmVhdGVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRpb24gb2YgdGhlIG5hdmlnYXRpb24gY29udHJvbHMgbm9kZXMuIFRoZXkgYXJlIGRyYXduIG92ZXIgdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGFuZCBhcmUgbm90IGFmZmVjdGVkIGJ5IHNjYWxlIGFuZCB0cmFuc2xhdGlvblxuICAgKiB0aGV5IGhhdmUgYSB0cmlnZ2VyRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uIGNsaWNrLiBJZiB0aGUgcG9zaXRpb24gb2YgdGhlIG5hdmlnYXRpb24gY29udHJvbHMgaXMgZGVwZW5kZW50XG4gICAqIG9uIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoIG9yIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCwgd2UgZmxhZyBob3Jpem9udGFsQWxpZ25MZWZ0IGFuZCB2ZXJ0aWNhbEFsaWduVG9wIGZhbHNlLlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGxvY2F0aW9uIHdpbGwgYmUgY29ycmVjdGVkIGJ5IHRoZSBfcmVsb2NhdGVOYXZpZ2F0aW9uIGZ1bmN0aW9uIG9uIGEgc2l6ZSBjaGFuZ2Ugb2YgdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGxvYWROYXZpZ2F0aW9uRWxlbWVudHMoKSB7XG4gICAgdGhpcy5jbGVhbk5hdmlnYXRpb24oKTtcblxuICAgIHRoaXMubmF2aWdhdGlvbkRPTSA9IHt9O1xuICAgIGNvbnN0IG5hdmlnYXRpb25EaXZzID0gW1xuICAgICAgXCJ1cFwiLFxuICAgICAgXCJkb3duXCIsXG4gICAgICBcImxlZnRcIixcbiAgICAgIFwicmlnaHRcIixcbiAgICAgIFwiem9vbUluXCIsXG4gICAgICBcInpvb21PdXRcIixcbiAgICAgIFwiem9vbUV4dGVuZHNcIixcbiAgICBdO1xuICAgIGNvbnN0IG5hdmlnYXRpb25EaXZBY3Rpb25zID0gW1xuICAgICAgXCJfbW92ZVVwXCIsXG4gICAgICBcIl9tb3ZlRG93blwiLFxuICAgICAgXCJfbW92ZUxlZnRcIixcbiAgICAgIFwiX21vdmVSaWdodFwiLFxuICAgICAgXCJfem9vbUluXCIsXG4gICAgICBcIl96b29tT3V0XCIsXG4gICAgICBcIl9maXRcIixcbiAgICBdO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXS5jbGFzc05hbWUgPSBcInZpcy1uYXZpZ2F0aW9uXCI7XG4gICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdmlnYXRpb25EaXZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25ET01bbmF2aWdhdGlvbkRpdnNbaV1dID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtuYXZpZ2F0aW9uRGl2c1tpXV0uY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtYnV0dG9uIHZpcy1cIiArIG5hdmlnYXRpb25EaXZzW2ldO1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXS5hcHBlbmRDaGlsZChcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW25hdmlnYXRpb25EaXZzW2ldXVxuICAgICAgKTtcblxuICAgICAgY29uc3QgaGFtbWVyID0gbmV3IEhhbW1lcih0aGlzLm5hdmlnYXRpb25ET01bbmF2aWdhdGlvbkRpdnNbaV1dKTtcbiAgICAgIGlmIChuYXZpZ2F0aW9uRGl2QWN0aW9uc1tpXSA9PT0gXCJfZml0XCIpIHtcbiAgICAgICAgb25Ub3VjaChoYW1tZXIsIHRoaXMuX2ZpdC5iaW5kKHRoaXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uVG91Y2goaGFtbWVyLCB0aGlzLmJpbmRUb1JlZHJhdy5iaW5kKHRoaXMsIG5hdmlnYXRpb25EaXZBY3Rpb25zW2ldKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmF2aWdhdGlvbkhhbW1lcnMucHVzaChoYW1tZXIpO1xuICAgIH1cblxuICAgIC8vIHVzZSBhIGhhbW1lciBmb3IgdGhlIHJlbGVhc2Ugc28gd2UgZG8gbm90IHJlcXVpcmUgdGhlIG9uZSB1c2VkIGluIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrXG4gICAgLy8gdGhlIG9uZSB0aGUgcmVzdCB1c2VzIGNhbiBiZSBvdmVybG9hZGVkIGJ5IHRoZSBtYW5pcHVsYXRpb24gc3lzdGVtLlxuICAgIGNvbnN0IGhhbW1lckZyYW1lID0gbmV3IEhhbW1lcih0aGlzLmNhbnZhcy5mcmFtZSk7XG4gICAgb25SZWxlYXNlKGhhbW1lckZyYW1lLCAoKSA9PiB7XG4gICAgICB0aGlzLl9zdG9wTW92ZW1lbnQoKTtcbiAgICB9KTtcbiAgICB0aGlzLm5hdmlnYXRpb25IYW1tZXJzLnB1c2goaGFtbWVyRnJhbWUpO1xuXG4gICAgdGhpcy5pY29uc0NyZWF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25cbiAgICovXG4gIGJpbmRUb1JlZHJhdyhhY3Rpb24pIHtcbiAgICBpZiAodGhpcy5ib3VuZEZ1bmN0aW9uc1thY3Rpb25dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXSA9IHRoaXNbYWN0aW9uXS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJpbml0UmVkcmF3XCIsIHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXSk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0YXJ0UmVuZGVyaW5nXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uXG4gICAqL1xuICB1bmJpbmRGcm9tUmVkcmF3KGFjdGlvbikge1xuICAgIGlmICh0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKFwiaW5pdFJlZHJhd1wiLCB0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl0pO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdG9wUmVuZGVyaW5nXCIpO1xuICAgICAgZGVsZXRlIHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzdG9wcyBhbGwgbW92ZW1lbnQgaW5kdWNlZCBieSB0aGUgbmF2aWdhdGlvbiBidXR0b25zXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZml0KCkge1xuICAgIGlmIChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHRoaXMudG91Y2hUaW1lID4gNzAwKSB7XG4gICAgICAvLyBUT0RPOiBmaXggdWdseSBoYWNrIHRvIGF2b2lkIGhhbW1lcidzIGRvdWJsZSBmaXJlaW5nIG9mIGV2ZW50IChiZWNhdXNlIHdlIHVzZSByZWxlYXNlPylcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJmaXRcIiwgeyBkdXJhdGlvbjogNzAwIH0pO1xuICAgICAgdGhpcy50b3VjaFRpbWUgPSBuZXcgRGF0ZSgpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzdG9wcyBhbGwgbW92ZW1lbnQgaW5kdWNlZCBieSB0aGUgbmF2aWdhdGlvbiBidXR0b25zXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RvcE1vdmVtZW50KCkge1xuICAgIGZvciAoY29uc3QgYm91bmRBY3Rpb24gaW4gdGhpcy5ib3VuZEZ1bmN0aW9ucykge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib3VuZEZ1bmN0aW9ucywgYm91bmRBY3Rpb24pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKFwiaW5pdFJlZHJhd1wiLCB0aGlzLmJvdW5kRnVuY3Rpb25zW2JvdW5kQWN0aW9uXSk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfc3RvcFJlbmRlcmluZ1wiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ib3VuZEZ1bmN0aW9ucyA9IHt9O1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVVcCgpIHtcbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55ICs9IHRoaXMub3B0aW9ucy5rZXlib2FyZC5zcGVlZC55O1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVEb3duKCkge1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnkgLT0gdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLnk7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbW92ZUxlZnQoKSB7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCArPSB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQueDtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlUmlnaHQoKSB7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCAtPSB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQueDtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF96b29tSW4oKSB7XG4gICAgY29uc3Qgc2NhbGVPbGQgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICBjb25zdCBzY2FsZSA9IHRoaXMuYm9keS52aWV3LnNjYWxlICogKDEgKyB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQuem9vbSk7XG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbjtcbiAgICBjb25zdCBzY2FsZUZyYWMgPSBzY2FsZSAvIHNjYWxlT2xkO1xuICAgIGNvbnN0IHR4ID1cbiAgICAgICgxIC0gc2NhbGVGcmFjKSAqIHRoaXMuY2FudmFzLmNhbnZhc1ZpZXdDZW50ZXIueCArXG4gICAgICB0cmFuc2xhdGlvbi54ICogc2NhbGVGcmFjO1xuICAgIGNvbnN0IHR5ID1cbiAgICAgICgxIC0gc2NhbGVGcmFjKSAqIHRoaXMuY2FudmFzLmNhbnZhc1ZpZXdDZW50ZXIueSArXG4gICAgICB0cmFuc2xhdGlvbi55ICogc2NhbGVGcmFjO1xuXG4gICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSBzY2FsZTtcbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHsgeDogdHgsIHk6IHR5IH07XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInpvb21cIiwge1xuICAgICAgZGlyZWN0aW9uOiBcIitcIixcbiAgICAgIHNjYWxlOiB0aGlzLmJvZHkudmlldy5zY2FsZSxcbiAgICAgIHBvaW50ZXI6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF96b29tT3V0KCkge1xuICAgIGNvbnN0IHNjYWxlT2xkID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgY29uc3Qgc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZSAvICgxICsgdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLnpvb20pO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG4gICAgY29uc3Qgc2NhbGVGcmFjID0gc2NhbGUgLyBzY2FsZU9sZDtcbiAgICBjb25zdCB0eCA9XG4gICAgICAoMSAtIHNjYWxlRnJhYykgKiB0aGlzLmNhbnZhcy5jYW52YXNWaWV3Q2VudGVyLnggK1xuICAgICAgdHJhbnNsYXRpb24ueCAqIHNjYWxlRnJhYztcbiAgICBjb25zdCB0eSA9XG4gICAgICAoMSAtIHNjYWxlRnJhYykgKiB0aGlzLmNhbnZhcy5jYW52YXNWaWV3Q2VudGVyLnkgK1xuICAgICAgdHJhbnNsYXRpb24ueSAqIHNjYWxlRnJhYztcblxuICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gc2NhbGU7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7IHg6IHR4LCB5OiB0eSB9O1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJ6b29tXCIsIHtcbiAgICAgIGRpcmVjdGlvbjogXCItXCIsXG4gICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICBwb2ludGVyOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGJpbmQgYWxsIGtleXMgdXNpbmcga2V5Y2hhcm0uXG4gICAqL1xuICBjb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCkge1xuICAgIGlmICh0aGlzLmtleWNoYXJtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMua2V5Y2hhcm0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMua2V5Ym9hcmQuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5rZXlib2FyZC5iaW5kVG9XaW5kb3cgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5rZXljaGFybSA9IGtleWNoYXJtKHsgY29udGFpbmVyOiB3aW5kb3csIHByZXZlbnREZWZhdWx0OiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5rZXljaGFybSA9IGtleWNoYXJtKHtcbiAgICAgICAgICBjb250YWluZXI6IHRoaXMuY2FudmFzLmZyYW1lLFxuICAgICAgICAgIHByZXZlbnREZWZhdWx0OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5rZXljaGFybS5yZXNldCgpO1xuXG4gICAgICBpZiAodGhpcy5hY3RpdmF0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwidXBcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl9tb3ZlVXBcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJkb3duXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfbW92ZURvd25cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJsZWZ0XCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfbW92ZUxlZnRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJyaWdodFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX21vdmVSaWdodFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIj1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJudW0rXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbUluXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtLVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCItXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIltcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiXVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInBhZ2V1cFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInBhZ2Vkb3duXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwidXBcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfbW92ZVVwXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcImRvd25cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfbW92ZURvd25cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibGVmdFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl9tb3ZlTGVmdFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJyaWdodFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl9tb3ZlUmlnaHRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiPVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtK1wiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtLVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIi1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJbXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiXVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwicGFnZXVwXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJwYWdlZG93blwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb25IYW5kbGVyO1xuIiwgImltcG9ydCB7XG4gIFBvcHVwLFxuICBnZXRBYnNvbHV0ZUxlZnQsXG4gIGdldEFic29sdXRlVG9wLFxuICBtZXJnZU9wdGlvbnMsXG4gIHBhcnNlQ29sb3IsXG4gIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsXG59IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCBOYXZpZ2F0aW9uSGFuZGxlciBmcm9tIFwiLi9jb21wb25lbnRzL05hdmlnYXRpb25IYW5kbGVyXCI7XG5cbi8qKlxuICogSGFuZGxlciBmb3IgaW50ZXJhY3Rpb25zXG4gKi9cbmNsYXNzIEludGVyYWN0aW9uSGFuZGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gICAqIEBwYXJhbSB7U2VsZWN0aW9uSGFuZGxlcn0gc2VsZWN0aW9uSGFuZGxlclxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzLCBzZWxlY3Rpb25IYW5kbGVyKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBzZWxlY3Rpb25IYW5kbGVyO1xuICAgIHRoaXMubmF2aWdhdGlvbkhhbmRsZXIgPSBuZXcgTmF2aWdhdGlvbkhhbmRsZXIoYm9keSwgY2FudmFzKTtcblxuICAgIC8vIGJpbmQgdGhlIGV2ZW50cyBmcm9tIGhhbW1lciB0byBmdW5jdGlvbnMgaW4gdGhpcyBvYmplY3RcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25UYXAgPSB0aGlzLm9uVGFwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVG91Y2ggPSB0aGlzLm9uVG91Y2guYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Eb3VibGVUYXAgPSB0aGlzLm9uRG91YmxlVGFwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uSG9sZCA9IHRoaXMub25Ib2xkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uRHJhZ1N0YXJ0ID0gdGhpcy5vbkRyYWdTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWcgPSB0aGlzLm9uRHJhZy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWdFbmQgPSB0aGlzLm9uRHJhZ0VuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlV2hlZWwgPSB0aGlzLm9uTW91c2VXaGVlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblBpbmNoID0gdGhpcy5vblBpbmNoLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblJlbGVhc2UgPSB0aGlzLm9uUmVsZWFzZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkNvbnRleHQgPSB0aGlzLm9uQ29udGV4dC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy50b3VjaFRpbWUgPSAwO1xuICAgIHRoaXMuZHJhZyA9IHt9O1xuICAgIHRoaXMucGluY2ggPSB7fTtcbiAgICB0aGlzLnBvcHVwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9wdXBPYmogPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wb3B1cFRpbWVyID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyID0gdGhpcy5nZXRQb2ludGVyLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZHJhZ05vZGVzOiB0cnVlLFxuICAgICAgZHJhZ1ZpZXc6IHRydWUsXG4gICAgICBob3ZlcjogZmFsc2UsXG4gICAgICBrZXlib2FyZDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgc3BlZWQ6IHsgeDogMTAsIHk6IDEwLCB6b29tOiAwLjAyIH0sXG4gICAgICAgIGJpbmRUb1dpbmRvdzogdHJ1ZSxcbiAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIG5hdmlnYXRpb25CdXR0b25zOiBmYWxzZSxcbiAgICAgIHRvb2x0aXBEZWxheTogMzAwLFxuICAgICAgem9vbVZpZXc6IHRydWUsXG4gICAgICB6b29tU3BlZWQ6IDEsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJpbmRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGV2ZW50IGxpc3RlbmVyc1xuICAgKi9cbiAgYmluZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cFRpbWVyKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXI7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGV4dGVuZCBhbGwgYnV0IHRoZSB2YWx1ZXMgaW4gZmllbGRzXG4gICAgICBjb25zdCBmaWVsZHMgPSBbXG4gICAgICAgIFwiaGlkZUVkZ2VzT25EcmFnXCIsXG4gICAgICAgIFwiaGlkZUVkZ2VzT25ab29tXCIsXG4gICAgICAgIFwiaGlkZU5vZGVzT25EcmFnXCIsXG4gICAgICAgIFwia2V5Ym9hcmRcIixcbiAgICAgICAgXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBcInNlbGVjdGFibGVcIixcbiAgICAgICAgXCJzZWxlY3RDb25uZWN0ZWRFZGdlc1wiLFxuICAgICAgXTtcbiAgICAgIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQoZmllbGRzLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBtZXJnZSB0aGUga2V5Ym9hcmQgb3B0aW9ucyBpbi5cbiAgICAgIG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMsIFwia2V5Ym9hcmRcIik7XG5cbiAgICAgIGlmIChvcHRpb25zLnRvb2x0aXApIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMudG9vbHRpcCwgb3B0aW9ucy50b29sdGlwKTtcbiAgICAgICAgaWYgKG9wdGlvbnMudG9vbHRpcC5jb2xvcikge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy50b29sdGlwLmNvbG9yID0gcGFyc2VDb2xvcihvcHRpb25zLnRvb2x0aXAuY29sb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5uYXZpZ2F0aW9uSGFuZGxlci5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwb2ludGVyIGxvY2F0aW9uIGZyb20gYSB0b3VjaCBsb2NhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHRvdWNoXG4gICAqIEByZXR1cm5zIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRQb2ludGVyKHRvdWNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRvdWNoLnggLSBnZXRBYnNvbHV0ZUxlZnQodGhpcy5jYW52YXMuZnJhbWUuY2FudmFzKSxcbiAgICAgIHk6IHRvdWNoLnkgLSBnZXRBYnNvbHV0ZVRvcCh0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogT24gc3RhcnQgb2YgYSB0b3VjaCBnZXN0dXJlLCBzdG9yZSB0aGUgcG9pbnRlclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uVG91Y2goZXZlbnQpIHtcbiAgICBpZiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLSB0aGlzLnRvdWNoVGltZSA+IDUwKSB7XG4gICAgICB0aGlzLmRyYWcucG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgICAgdGhpcy5kcmFnLnBpbmNoZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMucGluY2guc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIC8vIHRvIGF2b2lkIGRvdWJsZSBmaXJlaW5nIG9mIHRoaXMgZXZlbnQgYmVjYXVzZSB3ZSBoYXZlIHR3byBoYW1tZXIgaW5zdGFuY2VzLiAob24gY2FudmFzIGFuZCBvbiBmcmFtZSlcbiAgICAgIHRoaXMudG91Y2hUaW1lID0gbmV3IERhdGUoKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSB0YXAvY2xpY2sgZXZlbnQ6IHNlbGVjdC91bnNlbGVjdCBhIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uVGFwKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IG11bHRpc2VsZWN0ID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5vcHRpb25zLm11bHRpc2VsZWN0ICYmXG4gICAgICAoZXZlbnQuY2hhbmdlZFBvaW50ZXJzWzBdLmN0cmxLZXkgfHwgZXZlbnQuY2hhbmdlZFBvaW50ZXJzWzBdLm1ldGFLZXkpO1xuXG4gICAgdGhpcy5jaGVja1NlbGVjdGlvbkNoYW5nZXMocG9pbnRlciwgbXVsdGlzZWxlY3QpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdEFuZEVtaXQocG9pbnRlciwgZXZlbnQpO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJjbGlja1wiLCBldmVudCwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIGRvdWJsZXRhcCBldmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Eb3VibGVUYXAoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcImRvdWJsZUNsaWNrXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBoYW5kbGUgbG9uZyB0YXAgZXZlbnQ6IG11bHRpIHNlbGVjdCBub2Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Ib2xkKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IG11bHRpc2VsZWN0ID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLm9wdGlvbnMubXVsdGlzZWxlY3Q7XG5cbiAgICB0aGlzLmNoZWNrU2VsZWN0aW9uQ2hhbmdlcyhwb2ludGVyLCBtdWx0aXNlbGVjdCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuY29tbWl0QW5kRW1pdChwb2ludGVyLCBldmVudCk7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcImNsaWNrXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwiaG9sZFwiLCBldmVudCwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSByZWxlYXNlIG9mIHRoZSBzY3JlZW5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uUmVsZWFzZShldmVudCkge1xuICAgIGlmIChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHRoaXMudG91Y2hUaW1lID4gMTApIHtcbiAgICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJyZWxlYXNlXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgICAgIC8vIHRvIGF2b2lkIGRvdWJsZSBmaXJlaW5nIG9mIHRoaXMgZXZlbnQgYmVjYXVzZSB3ZSBoYXZlIHR3byBoYW1tZXIgaW5zdGFuY2VzLiAob24gY2FudmFzIGFuZCBvbiBmcmFtZSlcbiAgICAgIHRoaXMudG91Y2hUaW1lID0gbmV3IERhdGUoKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqL1xuICBvbkNvbnRleHQoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9KTtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwib25jb250ZXh0XCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYW5kIGRlc2VsZWN0IG5vZGVzIGRlcGVuZGluZyBjdXJyZW50IHNlbGVjdGlvbiBjaGFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGQ9ZmFsc2VdXG4gICAqL1xuICBjaGVja1NlbGVjdGlvbkNoYW5nZXMocG9pbnRlciwgYWRkID0gZmFsc2UpIHtcbiAgICBpZiAoYWRkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0QWRkaXRpb25hbE9uUG9pbnQocG9pbnRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZWxlY3RPblBvaW50KHBvaW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIG5vZGUgYW5kIGVkZ2UgaWQncyBmcm9tIHRoZSBmaXJzdCBzZXQgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgc2Vjb25kIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHt7bm9kZXM6IEFycmF5LjxOb2RlPiwgZWRnZXM6IEFycmF5Ljx2aXMuRWRnZT59fSBmaXJzdFNldFxuICAgKiBAcGFyYW0ge3tub2RlczogQXJyYXkuPE5vZGU+LCBlZGdlczogQXJyYXkuPHZpcy5FZGdlPn19IHNlY29uZFNldFxuICAgKiBAcmV0dXJucyB7e25vZGVzOiBBcnJheS48Tm9kZT4sIGVkZ2VzOiBBcnJheS48dmlzLkVkZ2U+fX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZXRlcm1pbmVEaWZmZXJlbmNlKGZpcnN0U2V0LCBzZWNvbmRTZXQpIHtcbiAgICBjb25zdCBhcnJheURpZmYgPSBmdW5jdGlvbiAoZmlyc3RBcnIsIHNlY29uZEFycikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlyc3RBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaXJzdEFycltpXTtcbiAgICAgICAgaWYgKHNlY29uZEFyci5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5vZGVzOiBhcnJheURpZmYoZmlyc3RTZXQubm9kZXMsIHNlY29uZFNldC5ub2RlcyksXG4gICAgICBlZGdlczogYXJyYXlEaWZmKGZpcnN0U2V0LmVkZ2VzLCBzZWNvbmRTZXQuZWRnZXMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgb25EcmFnU3RhcnQuXG4gICAqIEl0IGlzIHNlcGFyYXRlZCBvdXQgYmVjYXVzZSB3ZSBjYW4gdGhlbiBvdmVybG9hZCBpdCBmb3IgdGhlIGRhdGFtYW5pcHVsYXRpb24gc3lzdGVtLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25EcmFnU3RhcnQoZXZlbnQpIHtcbiAgICAvLyBpZiBhbHJlYWR5IGRyYWdnaW5nLCBkbyBub3Qgc3RhcnRcbiAgICAvLyB0aGlzIGNhbiBoYXBwZW4gb24gdG91Y2ggc2NyZWVucyB3aXRoIG11bHRpcGxlIGZpbmdlcnNcbiAgICBpZiAodGhpcy5kcmFnLmRyYWdnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9pbiBjYXNlIHRoZSB0b3VjaCBldmVudCB3YXMgdHJpZ2dlcmVkIG9uIGFuIGV4dGVybmFsIGRpdiwgZG8gdGhlIGluaXRpYWwgdG91Y2ggbm93LlxuICAgIGlmICh0aGlzLmRyYWcucG9pbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2goZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIG5vdGU6IGRyYWcucG9pbnRlciBpcyBzZXQgaW4gb25Ub3VjaCB0byBnZXQgdGhlIGluaXRpYWwgdG91Y2ggbG9jYXRpb25cbiAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdCh0aGlzLmRyYWcucG9pbnRlcik7XG5cbiAgICB0aGlzLmRyYWcuZHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMuZHJhZy5zZWxlY3Rpb24gPSBbXTtcbiAgICB0aGlzLmRyYWcudHJhbnNsYXRpb24gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbik7IC8vIGNvcHkgdGhlIG9iamVjdFxuICAgIHRoaXMuZHJhZy5ub2RlSWQgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZXZlbnQuc3JjRXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3guc2hvdyA9IHRydWU7XG4gICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG5cbiAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQgPSB7XG4gICAgICAgIHg6IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCksXG4gICAgICAgIHk6IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueSksXG4gICAgICB9O1xuICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5lbmQgPSB7XG4gICAgICAgIHg6IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCksXG4gICAgICAgIHk6IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueSksXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobm9kZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMub3B0aW9ucy5kcmFnTm9kZXMgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZHJhZy5ub2RlSWQgPSBub2RlLmlkO1xuICAgICAgLy8gc2VsZWN0IHRoZSBjbGlja2VkIG5vZGUgaWYgbm90IHlldCBzZWxlY3RlZFxuICAgICAgaWYgKG5vZGUuaXNTZWxlY3RlZCgpID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2V0U2VsZWN0aW9uKHsgbm9kZXM6IFtub2RlLmlkXSB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gYWZ0ZXIgc2VsZWN0IHRvIGNvbnRhaW4gdGhlIG5vZGVcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZHJhZ1N0YXJ0XCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLmRyYWcucG9pbnRlclxuICAgICAgKTtcblxuICAgICAgLy8gY3JlYXRlIGFuIGFycmF5IHdpdGggdGhlIHNlbGVjdGVkIG5vZGVzIGFuZCB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbiBhbmQgc3RhdHVzXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkTm9kZXMoKSkge1xuICAgICAgICBjb25zdCBzID0ge1xuICAgICAgICAgIGlkOiBub2RlLmlkLFxuICAgICAgICAgIG5vZGU6IG5vZGUsXG5cbiAgICAgICAgICAvLyBzdG9yZSBvcmlnaW5hbCB4LCB5LCB4Rml4ZWQgYW5kIHlGaXhlZCwgbWFrZSB0aGUgbm9kZSB0ZW1wb3JhcmlseSBGaXhlZFxuICAgICAgICAgIHg6IG5vZGUueCxcbiAgICAgICAgICB5OiBub2RlLnksXG4gICAgICAgICAgeEZpeGVkOiBub2RlLm9wdGlvbnMuZml4ZWQueCxcbiAgICAgICAgICB5Rml4ZWQ6IG5vZGUub3B0aW9ucy5maXhlZC55LFxuICAgICAgICB9O1xuXG4gICAgICAgIG5vZGUub3B0aW9ucy5maXhlZC54ID0gdHJ1ZTtcbiAgICAgICAgbm9kZS5vcHRpb25zLmZpeGVkLnkgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuZHJhZy5zZWxlY3Rpb24ucHVzaChzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbGJhY2sgaWYgbm8gbm9kZSBpcyBzZWxlY3RlZCBhbmQgdGh1cyB0aGUgdmlldyBpcyBkcmFnZ2VkLlxuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgXCJkcmFnU3RhcnRcIixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHRoaXMuZHJhZy5wb2ludGVyLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSBkcmFnIGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvbkRyYWcoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5kcmFnLnBpbmNoZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdGhlIGZvY3VzIG9uIG5vZGUgaWYgaXQgaXMgZm9jdXNzZWQgb24gYnkgdGhlIGZvY3VzT25Ob2RlXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInVubG9ja05vZGVcIik7XG5cbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmRyYWcuc2VsZWN0aW9uO1xuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLmxlbmd0aCAmJiB0aGlzLm9wdGlvbnMuZHJhZ05vZGVzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwiZHJhZ2dpbmdcIiwgZXZlbnQsIHBvaW50ZXIpO1xuXG4gICAgICAvLyBjYWxjdWxhdGUgZGVsdGEncyBhbmQgbmV3IGxvY2F0aW9uXG4gICAgICBjb25zdCBkZWx0YVggPSBwb2ludGVyLnggLSB0aGlzLmRyYWcucG9pbnRlci54O1xuICAgICAgY29uc3QgZGVsdGFZID0gcG9pbnRlci55IC0gdGhpcy5kcmFnLnBvaW50ZXIueTtcblxuICAgICAgLy8gdXBkYXRlIHBvc2l0aW9uIG9mIGFsbCBzZWxlY3RlZCBub2Rlc1xuICAgICAgc2VsZWN0aW9uLmZvckVhY2goKHNlbGVjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gc2VsZWN0aW9uLm5vZGU7XG4gICAgICAgIC8vIG9ubHkgbW92ZSB0aGUgbm9kZSBpZiBpdCB3YXMgbm90IGZpeGVkIGluaXRpYWxseVxuICAgICAgICBpZiAoc2VsZWN0aW9uLnhGaXhlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBub2RlLnggPSB0aGlzLmNhbnZhcy5fWGNvbnZlcnRET010b0NhbnZhcyhcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLl9YY29udmVydENhbnZhc1RvRE9NKHNlbGVjdGlvbi54KSArIGRlbHRhWFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb25seSBtb3ZlIHRoZSBub2RlIGlmIGl0IHdhcyBub3QgZml4ZWQgaW5pdGlhbGx5XG4gICAgICAgIGlmIChzZWxlY3Rpb24ueUZpeGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIG5vZGUueSA9IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKFxuICAgICAgICAgICAgdGhpcy5jYW52YXMuX1ljb252ZXJ0Q2FudmFzVG9ET00oc2VsZWN0aW9uLnkpICsgZGVsdGFZXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHN0YXJ0IHRoZSBzaW11bGF0aW9uIG9mIHRoZSBwaHlzaWNzXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic3RhcnRTaW11bGF0aW9uXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjcmVhdGUgc2VsZWN0aW9uIGJveFxuICAgICAgaWYgKGV2ZW50LnNyY0V2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgICAgXCJkcmFnZ2luZ1wiLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHBvaW50ZXIsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBpZiB0aGUgZHJhZyB3YXMgbm90IHN0YXJ0ZWQgcHJvcGVybHkgYmVjYXVzZSB0aGUgY2xpY2sgc3RhcnRlZCBvdXRzaWRlIHRoZSBuZXR3b3JrIGRpdiwgc3RhcnQgaXQgbm93LlxuICAgICAgICBpZiAodGhpcy5kcmFnLnBvaW50ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMub25EcmFnU3RhcnQoZXZlbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uZW5kID0ge1xuICAgICAgICAgIHg6IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCksXG4gICAgICAgICAgeTogdGhpcy5jYW52YXMuX1ljb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci55KSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBtb3ZlIHRoZSBuZXR3b3JrXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRyYWdWaWV3ID09PSB0cnVlICYmICFldmVudC5zcmNFdmVudC5zaGlmdEtleSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ2dpbmdcIixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBwb2ludGVyLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaWYgdGhlIGRyYWcgd2FzIG5vdCBzdGFydGVkIHByb3Blcmx5IGJlY2F1c2UgdGhlIGNsaWNrIHN0YXJ0ZWQgb3V0c2lkZSB0aGUgbmV0d29yayBkaXYsIHN0YXJ0IGl0IG5vdy5cbiAgICAgICAgaWYgKHRoaXMuZHJhZy5wb2ludGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9uRHJhZ1N0YXJ0KGV2ZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWZmWCA9IHBvaW50ZXIueCAtIHRoaXMuZHJhZy5wb2ludGVyLng7XG4gICAgICAgIGNvbnN0IGRpZmZZID0gcG9pbnRlci55IC0gdGhpcy5kcmFnLnBvaW50ZXIueTtcblxuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHtcbiAgICAgICAgICB4OiB0aGlzLmRyYWcudHJhbnNsYXRpb24ueCArIGRpZmZYLFxuICAgICAgICAgIHk6IHRoaXMuZHJhZy50cmFuc2xhdGlvbi55ICsgZGlmZlksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIGRyYWcgc3RhcnQgZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uRHJhZ0VuZChldmVudCkge1xuICAgIHRoaXMuZHJhZy5kcmFnZ2luZyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuYm9keS5zZWxlY3Rpb25Cb3guc2hvdykge1xuICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5zaG93ID0gZmFsc2U7XG4gICAgICBjb25zdCBzZWxlY3Rpb25Cb3hQb3NpdGlvbiA9IHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb247XG4gICAgICBjb25zdCBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heCA9IHtcbiAgICAgICAgbWluWDogTWF0aC5taW4oXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uc3RhcnQueCxcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5lbmQueFxuICAgICAgICApLFxuICAgICAgICBtaW5ZOiBNYXRoLm1pbihcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5zdGFydC55LFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLmVuZC55XG4gICAgICAgICksXG4gICAgICAgIG1heFg6IE1hdGgubWF4KFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLnN0YXJ0LngsXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uZW5kLnhcbiAgICAgICAgKSxcbiAgICAgICAgbWF4WTogTWF0aC5tYXgoXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uc3RhcnQueSxcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5lbmQueVxuICAgICAgICApLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdG9CZVNlbGVjdGVkTm9kZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXMuZmlsdGVyKChub2RlSWQpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG5vZGUueCA+PSBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heC5taW5YICYmXG4gICAgICAgICAgbm9kZS54IDw9IHNlbGVjdGlvbkJveFBvc2l0aW9uTWluTWF4Lm1heFggJiZcbiAgICAgICAgICBub2RlLnkgPj0gc2VsZWN0aW9uQm94UG9zaXRpb25NaW5NYXgubWluWSAmJlxuICAgICAgICAgIG5vZGUueSA8PSBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heC5tYXhZXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgdG9CZVNlbGVjdGVkTm9kZXMuZm9yRWFjaCgobm9kZUlkKSA9PlxuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0T2JqZWN0KHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdEFuZEVtaXQocG9pbnRlciwgZXZlbnQpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgXCJkcmFnRW5kXCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmRyYWcuc2VsZWN0aW9uO1xuICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgIHNlbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgLy8gcmVzdG9yZSBvcmlnaW5hbCB4Rml4ZWQgYW5kIHlGaXhlZFxuICAgICAgICAgIHMubm9kZS5vcHRpb25zLmZpeGVkLnggPSBzLnhGaXhlZDtcbiAgICAgICAgICBzLm5vZGUub3B0aW9ucy5maXhlZC55ID0gcy55Rml4ZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ0VuZFwiLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ0VuZFwiLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHBpbmNoIGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25QaW5jaChldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcblxuICAgIHRoaXMuZHJhZy5waW5jaGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5waW5jaFtcInNjYWxlXCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGluY2guc2NhbGUgPSAxO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGVuYWJsZWQgbW92aW5nIHdoaWxlIHBpbmNoaW5nP1xuICAgIGNvbnN0IHNjYWxlID0gdGhpcy5waW5jaC5zY2FsZSAqIGV2ZW50LnNjYWxlO1xuICAgIHRoaXMuem9vbShzY2FsZSwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogWm9vbSB0aGUgbmV0d29yayBpbiBvciBvdXRcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlIGEgbnVtYmVyIGFyb3VuZCAxLCBhbmQgYmV0d2VlbiAwLjAxIGFuZCAxMFxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXIgICAgUG9zaXRpb24gb24gc2NyZWVuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB6b29tKHNjYWxlLCBwb2ludGVyKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy56b29tVmlldyA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3Qgc2NhbGVPbGQgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIGlmIChzY2FsZSA8IDAuMDAwMDEpIHtcbiAgICAgICAgc2NhbGUgPSAwLjAwMDAxO1xuICAgICAgfVxuICAgICAgaWYgKHNjYWxlID4gMTApIHtcbiAgICAgICAgc2NhbGUgPSAxMDtcbiAgICAgIH1cblxuICAgICAgbGV0IHByZVNjYWxlRHJhZ1BvaW50ZXIgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5kcmFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZy5kcmFnZ2luZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHByZVNjYWxlRHJhZ1BvaW50ZXIgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyh0aGlzLmRyYWcucG9pbnRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vICsgdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCAvIDJcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG5cbiAgICAgIGNvbnN0IHNjYWxlRnJhYyA9IHNjYWxlIC8gc2NhbGVPbGQ7XG4gICAgICBjb25zdCB0eCA9ICgxIC0gc2NhbGVGcmFjKSAqIHBvaW50ZXIueCArIHRyYW5zbGF0aW9uLnggKiBzY2FsZUZyYWM7XG4gICAgICBjb25zdCB0eSA9ICgxIC0gc2NhbGVGcmFjKSAqIHBvaW50ZXIueSArIHRyYW5zbGF0aW9uLnkgKiBzY2FsZUZyYWM7XG5cbiAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gc2NhbGU7XG4gICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHsgeDogdHgsIHk6IHR5IH07XG5cbiAgICAgIGlmIChwcmVTY2FsZURyYWdQb2ludGVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBwb3N0U2NhbGVEcmFnUG9pbnRlciA9XG4gICAgICAgICAgdGhpcy5jYW52YXMuY2FudmFzVG9ET00ocHJlU2NhbGVEcmFnUG9pbnRlcik7XG4gICAgICAgIHRoaXMuZHJhZy5wb2ludGVyLnggPSBwb3N0U2NhbGVEcmFnUG9pbnRlci54O1xuICAgICAgICB0aGlzLmRyYWcucG9pbnRlci55ID0gcG9zdFNjYWxlRHJhZ1BvaW50ZXIueTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuXG4gICAgICBpZiAoc2NhbGVPbGQgPCBzY2FsZSkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiem9vbVwiLCB7XG4gICAgICAgICAgZGlyZWN0aW9uOiBcIitcIixcbiAgICAgICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICAgICAgcG9pbnRlcjogcG9pbnRlcixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiem9vbVwiLCB7XG4gICAgICAgICAgZGlyZWN0aW9uOiBcIi1cIixcbiAgICAgICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICAgICAgcG9pbnRlcjogcG9pbnRlcixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgZm9yIG1vdXNlIHdoZWVsIGV2ZW50LCB1c2VkIHRvIHpvb20gdGhlIHRpbWVsaW5lXG4gICAqIFNlZSBodHRwOi8vYWRvbWFzLm9yZy9qYXZhc2NyaXB0LW1vdXNlLXdoZWVsL1xuICAgKiAgICAgaHR0cHM6Ly9naXRodWIuY29tL0VpZ2h0TWVkaWEvaGFtbWVyLmpzL2lzc3Vlcy8yNTZcbiAgICpcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSAgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uTW91c2VXaGVlbChldmVudCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuem9vbVZpZXcgPT09IHRydWUpIHtcbiAgICAgIC8vIElmIGRlbHRhIGlzIG5vbnplcm8sIGhhbmRsZSBpdC5cbiAgICAgIC8vIEJhc2ljYWxseSwgZGVsdGEgaXMgbm93IHBvc2l0aXZlIGlmIHdoZWVsIHdhcyBzY3JvbGxlZCB1cCxcbiAgICAgIC8vIGFuZCBuZWdhdGl2ZSwgaWYgd2hlZWwgd2FzIHNjcm9sbGVkIGRvd24uXG4gICAgICBpZiAoZXZlbnQuZGVsdGFZICE9PSAwKSB7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgbmV3IHNjYWxlXG4gICAgICAgIGxldCBzY2FsZSA9IHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgICAgICBzY2FsZSAqPVxuICAgICAgICAgIDEgKyAoZXZlbnQuZGVsdGFZIDwgMCA/IDEgOiAtMSkgKiAodGhpcy5vcHRpb25zLnpvb21TcGVlZCAqIDAuMSk7XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBwb2ludGVyIGxvY2F0aW9uXG4gICAgICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoeyB4OiBldmVudC5jbGllbnRYLCB5OiBldmVudC5jbGllbnRZIH0pO1xuXG4gICAgICAgIC8vIGFwcGx5IHRoZSBuZXcgc2NhbGVcbiAgICAgICAgdGhpcy56b29tKHNjYWxlLCBwb2ludGVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGFjdGlvbnMgY2F1c2VkIGJ5IG1vdXNlIHdoZWVsLlxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW91c2UgbW92ZSBoYW5kbGVyIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSB0aXRsZSBtb3ZlcyBvdmVyIGEgbm9kZSB3aXRoIGEgdGl0bGUuXG4gICAqXG4gICAqIEBwYXJhbSAge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Nb3VzZU1vdmUoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9KTtcbiAgICBsZXQgcG9wdXBWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBub2RlIGlzIHN0aWxsIHNlbGVjdGVkXG4gICAgaWYgKHRoaXMucG9wdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMucG9wdXAuaGlkZGVuID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9jaGVja0hpZGVQb3B1cChwb2ludGVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHBvcHVwIHdhcyBub3QgaGlkZGVuIGFib3ZlXG4gICAgICBpZiAodGhpcy5wb3B1cC5oaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIHBvcHVwVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHRoaXMucG9wdXAuc2V0UG9zaXRpb24ocG9pbnRlci54ICsgMywgcG9pbnRlci55IC0gNSk7XG4gICAgICAgIHRoaXMucG9wdXAuc2hvdygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHdlIGJpbmQgdGhlIGtleWJvYXJkIHRvIHRoZSBkaXYsIHdlIGhhdmUgdG8gaGlnaGxpZ2h0IGl0IHRvIHVzZSBpdC4gVGhpcyBoaWdobGlnaHRzIGl0IG9uIG1vdXNlIG92ZXIuXG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmtleWJvYXJkLmF1dG9Gb2N1cyAmJlxuICAgICAgdGhpcy5vcHRpb25zLmtleWJvYXJkLmJpbmRUb1dpbmRvdyA9PT0gZmFsc2UgJiZcbiAgICAgIHRoaXMub3B0aW9ucy5rZXlib2FyZC5lbmFibGVkID09PSB0cnVlXG4gICAgKSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IGEgdGltZW91dCB0aGF0IHdpbGwgY2hlY2sgaWYgdGhlIG1vdXNlIGlzIHBvc2l0aW9uZWQgYWJvdmUgYW4gZWxlbWVudFxuICAgIGlmIChwb3B1cFZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5wb3B1cFRpbWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBvcHVwVGltZXIpOyAvLyBzdG9wIGFueSBydW5uaW5nIGNhbGN1bGF0aW9uVGltZXJcbiAgICAgICAgdGhpcy5wb3B1cFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmRyYWcuZHJhZ2dpbmcpIHtcbiAgICAgICAgdGhpcy5wb3B1cFRpbWVyID0gc2V0VGltZW91dChcbiAgICAgICAgICAoKSA9PiB0aGlzLl9jaGVja1Nob3dQb3B1cChwb2ludGVyKSxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMudG9vbHRpcERlbGF5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRkaW5nIGhvdmVyIGhpZ2hsaWdodHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmhvdmVyID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuaG92ZXJPYmplY3QoZXZlbnQsIHBvaW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBlbGVtZW50IG9uIHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgbmV0d29ya1xuICAgKiAoYSBub2RlIG9yIGVkZ2UpLiBJZiBzbywgYW5kIGlmIHRoaXMgZWxlbWVudCBoYXMgYSB0aXRsZSxcbiAgICogc2hvdyBhIHBvcHVwIHdpbmRvdyB3aXRoIGl0cyB0aXRsZS5cbiAgICpcbiAgICogQHBhcmFtIHt7eDpudW1iZXIsIHk6bnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrU2hvd1BvcHVwKHBvaW50ZXIpIHtcbiAgICBjb25zdCB4ID0gdGhpcy5jYW52YXMuX1hjb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci54KTtcbiAgICBjb25zdCB5ID0gdGhpcy5jYW52YXMuX1ljb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci55KTtcbiAgICBjb25zdCBwb2ludGVyT2JqID0ge1xuICAgICAgbGVmdDogeCxcbiAgICAgIHRvcDogeSxcbiAgICAgIHJpZ2h0OiB4LFxuICAgICAgYm90dG9tOiB5LFxuICAgIH07XG5cbiAgICBjb25zdCBwcmV2aW91c1BvcHVwT2JqSWQgPVxuICAgICAgdGhpcy5wb3B1cE9iaiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy5wb3B1cE9iai5pZDtcbiAgICBsZXQgbm9kZVVuZGVyQ3Vyc29yID0gZmFsc2U7XG4gICAgbGV0IHBvcHVwVHlwZSA9IFwibm9kZVwiO1xuXG4gICAgLy8gY2hlY2sgaWYgYSBub2RlIGlzIHVuZGVyIHRoZSBjdXJzb3IuXG4gICAgaWYgKHRoaXMucG9wdXBPYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2VhcmNoIHRoZSBub2RlcyBmb3Igb3ZlcmxhcCwgc2VsZWN0IHRoZSB0b3Agb25lIGluIGNhc2Ugb2YgbXVsdGlwbGUgbm9kZXNcbiAgICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZXMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgICAgaWYgKG5vZGUuaXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaikgPT09IHRydWUpIHtcbiAgICAgICAgICBub2RlVW5kZXJDdXJzb3IgPSB0cnVlO1xuICAgICAgICAgIGlmIChub2RlLmdldFRpdGxlKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3ZlcmxhcHBpbmdOb2Rlcy5wdXNoKG5vZGVJbmRpY2VzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG92ZXJsYXBwaW5nTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBpZiB0aGVyZSBhcmUgb3ZlcmxhcHBpbmcgbm9kZXMsIHNlbGVjdCB0aGUgbGFzdCBvbmUsIHRoaXMgaXMgdGhlIG9uZSB3aGljaCBpcyBkcmF3biBvbiB0b3Agb2YgdGhlIG90aGVyc1xuICAgICAgICB0aGlzLnBvcHVwT2JqID0gbm9kZXNbb3ZlcmxhcHBpbmdOb2Rlc1tvdmVybGFwcGluZ05vZGVzLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgLy8gaWYgeW91IGhvdmVyIG92ZXIgYSBub2RlLCB0aGUgdGl0bGUgb2YgdGhlIGVkZ2UgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHNob3duLlxuICAgICAgICBub2RlVW5kZXJDdXJzb3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBvcHVwT2JqID09PSB1bmRlZmluZWQgJiYgbm9kZVVuZGVyQ3Vyc29yID09PSBmYWxzZSkge1xuICAgICAgLy8gc2VhcmNoIHRoZSBlZGdlcyBmb3Igb3ZlcmxhcFxuICAgICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLmJvZHkuZWRnZUluZGljZXM7XG4gICAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICAgIGxldCBlZGdlO1xuICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdFZGdlcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgICBpZiAoZWRnZS5pc092ZXJsYXBwaW5nV2l0aChwb2ludGVyT2JqKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCA9PT0gdHJ1ZSAmJiBlZGdlLmdldFRpdGxlKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3ZlcmxhcHBpbmdFZGdlcy5wdXNoKGVkZ2VJbmRpY2VzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG92ZXJsYXBwaW5nRWRnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnBvcHVwT2JqID0gZWRnZXNbb3ZlcmxhcHBpbmdFZGdlc1tvdmVybGFwcGluZ0VkZ2VzLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgcG9wdXBUeXBlID0gXCJlZGdlXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9wdXBPYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2hvdyBwb3B1cCBtZXNzYWdlIHdpbmRvd1xuICAgICAgaWYgKHRoaXMucG9wdXBPYmouaWQgIT09IHByZXZpb3VzUG9wdXBPYmpJZCkge1xuICAgICAgICBpZiAodGhpcy5wb3B1cCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5wb3B1cCA9IG5ldyBQb3B1cCh0aGlzLmNhbnZhcy5mcmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0VHlwZSA9IHBvcHVwVHlwZTtcbiAgICAgICAgdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkID0gdGhpcy5wb3B1cE9iai5pZDtcblxuICAgICAgICAvLyBhZGp1c3QgYSBzbWFsbCBvZmZzZXQgc3VjaCB0aGF0IHRoZSBtb3VzZSBjdXJzb3IgaXMgbG9jYXRlZCBpbiB0aGVcbiAgICAgICAgLy8gYm90dG9tIGxlZnQgbG9jYXRpb24gb2YgdGhlIHBvcHVwLCBhbmQgeW91IGNhbiBlYXNpbHkgbW92ZSBvdmVyIHRoZVxuICAgICAgICAvLyBwb3B1cCBhcmVhXG4gICAgICAgIHRoaXMucG9wdXAuc2V0UG9zaXRpb24ocG9pbnRlci54ICsgMywgcG9pbnRlci55IC0gNSk7XG4gICAgICAgIHRoaXMucG9wdXAuc2V0VGV4dCh0aGlzLnBvcHVwT2JqLmdldFRpdGxlKCkpO1xuICAgICAgICB0aGlzLnBvcHVwLnNob3coKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInNob3dQb3B1cFwiLCB0aGlzLnBvcHVwT2JqLmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucG9wdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnBvcHVwLmhpZGUoKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImhpZGVQb3B1cFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBvcHVwIG11c3QgYmUgaGlkZGVuLCB3aGljaCBpcyB0aGUgY2FzZSB3aGVuIHRoZSBtb3VzZSBpcyBub1xuICAgKiBsb25nZXIgaG92ZXJpbmcgb24gdGhlIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge3t4Om51bWJlciwgeTpudW1iZXJ9fSBwb2ludGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hlY2tIaWRlUG9wdXAocG9pbnRlcikge1xuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuXG4gICAgbGV0IHN0aWxsT25PYmogPSBmYWxzZTtcbiAgICBpZiAodGhpcy5wb3B1cC5wb3B1cFRhcmdldFR5cGUgPT09IFwibm9kZVwiKSB7XG4gICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW3RoaXMucG9wdXAucG9wdXBUYXJnZXRJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdGlsbE9uT2JqID1cbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkXS5pc092ZXJsYXBwaW5nV2l0aChcbiAgICAgICAgICAgIHBvaW50ZXJPYmpcbiAgICAgICAgICApO1xuXG4gICAgICAgIC8vIGlmIHRoZSBtb3VzZSBpcyBzdGlsbCBvbmUgdGhlIG5vZGUsIHdlIGhhdmUgdG8gY2hlY2sgaWYgaXQgaXMgbm90IGFsc28gb24gb25lIHRoYXQgaXMgZHJhd24gb24gdG9wIG9mIGl0LlxuICAgICAgICAvLyB3ZSBpbml0aWFsbHkgb25seSBjaGVjayBzdGlsbE9uT2JqIGJlY2F1c2UgdGhpcyBpcyBtdWNoIGZhc3Rlci5cbiAgICAgICAgaWYgKHN0aWxsT25PYmogPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBvdmVyTm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXROb2RlQXQocG9pbnRlcik7XG4gICAgICAgICAgc3RpbGxPbk9iaiA9XG4gICAgICAgICAgICBvdmVyTm9kZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgOiBvdmVyTm9kZS5pZCA9PT0gdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0Tm9kZUF0KHBvaW50ZXIpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuYm9keS5lZGdlc1t0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0SWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdGlsbE9uT2JqID1cbiAgICAgICAgICAgIHRoaXMuYm9keS5lZGdlc1t0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0SWRdLmlzT3ZlcmxhcHBpbmdXaXRoKFxuICAgICAgICAgICAgICBwb2ludGVyT2JqXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0aWxsT25PYmogPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnBvcHVwT2JqID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5wb3B1cC5oaWRlKCk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiaGlkZVBvcHVwXCIpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmFjdGlvbkhhbmRsZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYFNldGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LW9iamVjdHNcbmNvbGxlY3Rpb24oJ1NldCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlNldDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGdldFdlYWtEYXRhID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZ2V0V2Vha0RhdGE7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgQXJyYXlJdGVyYXRpb25Nb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xudmFyIGZpbmQgPSBBcnJheUl0ZXJhdGlvbk1vZHVsZS5maW5kO1xudmFyIGZpbmRJbmRleCA9IEFycmF5SXRlcmF0aW9uTW9kdWxlLmZpbmRJbmRleDtcbnZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xudmFyIGlkID0gMDtcblxuLy8gZmFsbGJhY2sgZm9yIHVuY2F1Z2h0IGZyb3plbiBrZXlzXG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuZnJvemVuIHx8IChzdGF0ZS5mcm96ZW4gPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG5cbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVudHJpZXMgPSBbXTtcbn07XG5cbnZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiAoc3RvcmUsIGtleSkge1xuICByZXR1cm4gZmluZChzdG9yZS5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuXG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnlbMV07XG4gIH0sXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSBlbnRyeVsxXSA9IHZhbHVlO1xuICAgIGVsc2UgdGhpcy5lbnRyaWVzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSxcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXgodGhpcy5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHNwbGljZSh0aGlzLmVudHJpZXMsIGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGlkOiBpZCsrLFxuICAgICAgICBmcm96ZW46IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgdW5jYXVnaHRGcm96ZW5TdG9yZShzdGF0ZSkuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgZWxzZSBkYXRhW3N0YXRlLmlkXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgV2Vha01hcCwgV2Vha1NldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrRGF0YShrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiBoYXNPd24oZGF0YSwgc3RhdGUuaWQpICYmIGRlbGV0ZSBkYXRhW3N0YXRlLmlkXTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBXZWFrTWFwLCBXZWFrU2V0IH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrRGF0YShrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiBoYXNPd24oZGF0YSwgc3RhdGUuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgV2Vha01hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLmdldChrZXkpO1xuICAgICAgICAgIHJldHVybiBkYXRhID8gZGF0YVtzdGF0ZS5pZF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uV2VhayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmVuZm9yY2U7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyIGlzRXh0ZW5zaWJsZSA9ICRPYmplY3QuaXNFeHRlbnNpYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2Zyb3plbiAtLSBzYWZlXG52YXIgaXNGcm96ZW4gPSAkT2JqZWN0LmlzRnJvemVuO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc3NlYWxlZCAtLSBzYWZlXG52YXIgaXNTZWFsZWQgPSAkT2JqZWN0LmlzU2VhbGVkO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1mcmVlemUgLS0gc2FmZVxudmFyIGZyZWV6ZSA9ICRPYmplY3QuZnJlZXplO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZWFsIC0tIHNhZmVcbnZhciBzZWFsID0gJE9iamVjdC5zZWFsO1xuXG52YXIgRlJPWkVOID0ge307XG52YXIgU0VBTEVEID0ge307XG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xudmFyIEludGVybmFsV2Vha01hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbi8vIGBXZWFrTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLWNvbnN0cnVjdG9yXG52YXIgJFdlYWtNYXAgPSBjb2xsZWN0aW9uKCdXZWFrTWFwJywgd3JhcHBlciwgY29sbGVjdGlvbldlYWspO1xudmFyIFdlYWtNYXBQcm90b3R5cGUgPSAkV2Vha01hcC5wcm90b3R5cGU7XG52YXIgbmF0aXZlU2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5zZXQpO1xuXG4vLyBDaGFrcmEgRWRnZSBidWc6IGFkZGluZyBmcm96ZW4gYXJyYXlzIHRvIFdlYWtNYXAgdW5mcmVlemUgdGhlbVxudmFyIGhhc01TRWRnZUZyZWV6aW5nQnVnID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRlJFRVpJTkcgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBmcm96ZW5BcnJheSA9IGZyZWV6ZShbXSk7XG4gICAgbmF0aXZlU2V0KG5ldyAkV2Vha01hcCgpLCBmcm96ZW5BcnJheSwgMSk7XG4gICAgcmV0dXJuICFpc0Zyb3plbihmcm96ZW5BcnJheSk7XG4gIH0pO1xufTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuLy8gV2UgY2FuJ3QgdXNlIGZlYXR1cmUgZGV0ZWN0aW9uIGJlY2F1c2UgaXQgY3Jhc2ggc29tZSBvbGQgSUUgYnVpbGRzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDg1XG5pZiAoTkFUSVZFX1dFQUtfTUFQKSBpZiAoSVNfSUUxMSkge1xuICBJbnRlcm5hbFdlYWtNYXAgPSBjb2xsZWN0aW9uV2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCAnV2Vha01hcCcsIHRydWUpO1xuICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB2YXIgbmF0aXZlRGVsZXRlID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZVsnZGVsZXRlJ10pO1xuICB2YXIgbmF0aXZlSGFzID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5oYXMpO1xuICB2YXIgbmF0aXZlR2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5nZXQpO1xuICBkZWZpbmVCdWlsdElucyhXZWFrTWFwUHJvdG90eXBlLCB7XG4gICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5mcm96ZW4pIHN0YXRlLmZyb3plbiA9IG5ldyBJbnRlcm5hbFdlYWtNYXAoKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpIHx8IHN0YXRlLmZyb3plblsnZGVsZXRlJ10oa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICBpZiAoaXNPYmplY3Qoa2V5KSAmJiAhaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghc3RhdGUuZnJvemVuKSBzdGF0ZS5mcm96ZW4gPSBuZXcgSW50ZXJuYWxXZWFrTWFwKCk7XG4gICAgICAgIHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KSB8fCBzdGF0ZS5mcm96ZW4uaGFzKGtleSk7XG4gICAgICB9IHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlSGFzKHRoaXMsIGtleSkgPyBuYXRpdmVHZXQodGhpcywga2V5KSA6IHN0YXRlLmZyb3plbi5nZXQoa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZUdldCh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICBuYXRpdmVIYXModGhpcywga2V5KSA/IG5hdGl2ZVNldCh0aGlzLCBrZXksIHZhbHVlKSA6IHN0YXRlLmZyb3plbi5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgbmF0aXZlU2V0KHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9KTtcbi8vIENoYWtyYSBFZGdlIGZyb3plbiBrZXlzIGZpeFxufSBlbHNlIGlmIChoYXNNU0VkZ2VGcmVlemluZ0J1ZygpKSB7XG4gIGRlZmluZUJ1aWx0SW5zKFdlYWtNYXBQcm90b3R5cGUsIHtcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgYXJyYXlJbnRlZ3JpdHlMZXZlbDtcbiAgICAgIGlmIChpc0FycmF5KGtleSkpIHtcbiAgICAgICAgaWYgKGlzRnJvemVuKGtleSkpIGFycmF5SW50ZWdyaXR5TGV2ZWwgPSBGUk9aRU47XG4gICAgICAgIGVsc2UgaWYgKGlzU2VhbGVkKGtleSkpIGFycmF5SW50ZWdyaXR5TGV2ZWwgPSBTRUFMRUQ7XG4gICAgICB9XG4gICAgICBuYXRpdmVTZXQodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoYXJyYXlJbnRlZ3JpdHlMZXZlbCA9PT0gRlJPWkVOKSBmcmVlemUoa2V5KTtcbiAgICAgIGlmIChhcnJheUludGVncml0eUxldmVsID09PSBTRUFMRUQpIHNlYWwoa2V5KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLndlYWstbWFwJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5XZWFrTWFwO1xuIiwgImV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0YWJsZSB7XG4gIHNlbGVjdCgpOiB2b2lkO1xuICB1bnNlbGVjdCgpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yQ2hhbmdlczxUPiB7XG4gIGFkZGVkOiBUW107XG4gIGRlbGV0ZWQ6IFRbXTtcbiAgcHJldmlvdXM6IFRbXTtcbiAgY3VycmVudDogVFtdO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwcmV2XG4gKiBAcGFyYW0gbmV4dFxuICovXG5mdW5jdGlvbiBkaWZmU2V0czxUPihwcmV2OiBSZWFkb25seVNldDxUPiwgbmV4dDogUmVhZG9ubHlTZXQ8VD4pOiBTZXQ8VD4ge1xuICBjb25zdCBkaWZmID0gbmV3IFNldDxUPigpO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbmV4dCkge1xuICAgIGlmICghcHJldi5oYXMoaXRlbSkpIHtcbiAgICAgIGRpZmYuYWRkKGl0ZW0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGlmZjtcbn1cblxuY2xhc3MgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yPFQgZXh0ZW5kcyBTZWxlY3RhYmxlPiB7XG4gICNwcmV2aW91c1NlbGVjdGlvbjogUmVhZG9ubHlTZXQ8VD4gPSBuZXcgU2V0KCk7XG4gICNzZWxlY3Rpb246IFNldDxUPiA9IG5ldyBTZXQoKTtcblxuICBwdWJsaWMgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uLnNpemU7XG4gIH1cblxuICBwdWJsaWMgYWRkKC4uLml0ZW1zOiByZWFkb25seSBUW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIHRoaXMuI3NlbGVjdGlvbi5hZGQoaXRlbSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBkZWxldGUoLi4uaXRlbXM6IHJlYWRvbmx5IFRbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgdGhpcy4jc2VsZWN0aW9uLmRlbGV0ZShpdGVtKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuI3NlbGVjdGlvbi5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbigpOiBUW10ge1xuICAgIHJldHVybiBbLi4udGhpcy4jc2VsZWN0aW9uXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDaGFuZ2VzKCk6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8VD4ge1xuICAgIHJldHVybiB7XG4gICAgICBhZGRlZDogWy4uLmRpZmZTZXRzKHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uLCB0aGlzLiNzZWxlY3Rpb24pXSxcbiAgICAgIGRlbGV0ZWQ6IFsuLi5kaWZmU2V0cyh0aGlzLiNzZWxlY3Rpb24sIHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uKV0sXG4gICAgICBwcmV2aW91czogWy4uLm5ldyBTZXQ8VD4odGhpcy4jcHJldmlvdXNTZWxlY3Rpb24pXSxcbiAgICAgIGN1cnJlbnQ6IFsuLi5uZXcgU2V0PFQ+KHRoaXMuI3NlbGVjdGlvbildLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY29tbWl0KCk6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8VD4ge1xuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmdldENoYW5nZXMoKTtcblxuICAgIHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uID0gdGhpcy4jc2VsZWN0aW9uO1xuICAgIHRoaXMuI3NlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy4jcHJldmlvdXNTZWxlY3Rpb24pO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNoYW5nZXMuYWRkZWQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0KCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGFuZ2VzLmRlbGV0ZWQpIHtcbiAgICAgIGl0ZW0udW5zZWxlY3QoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxufVxuXG4vLyBUT0RPOiBUaGVzZSBzaG91bGQgYmUgcmVhbCB0eXBlcyBpbXBvcnRlZCBmcm9tIG5vZGUudHMgYW5kIGVkZ2UudHMgdGhhdCBkb24ndFxuLy8gZXhpc3QgeWV0LlxuaW50ZXJmYWNlIE5vZGUgZXh0ZW5kcyBTZWxlY3RhYmxlIHtcbiAgJDogXCJub2RlXCI7XG59XG5pbnRlcmZhY2UgRWRnZSBleHRlbmRzIFNlbGVjdGFibGUge1xuICAkOiBcImVkZ2VcIjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25BY2N1bXVsYXRvckNvbW1pdFN1bW1hcnkge1xuICBub2RlczogU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yQ2hhbmdlczxOb2RlPjtcbiAgZWRnZXM6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8RWRnZT47XG59XG5cbmV4cG9ydCB0eXBlIFNlbGVjdGlvbkFjY3VtdWxhdG9yQ29tbWl0SGFuZGxlcjxcbiAgQ29tbWl0QXJncyBleHRlbmRzIHJlYWRvbmx5IGFueVtdXG4+ID0gKHN1bW1hcnk6IFNlbGVjdGlvbkFjY3VtdWxhdG9yQ29tbWl0U3VtbWFyeSwgLi4ucmVzdDogQ29tbWl0QXJncykgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbkFjY3VtdWxhdG9yPENvbW1pdEFyZ3MgZXh0ZW5kcyByZWFkb25seSBhbnlbXT4ge1xuICAjbm9kZXMgPSBuZXcgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yPE5vZGU+KCk7XG4gICNlZGdlcyA9IG5ldyBTaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3I8RWRnZT4oKTtcblxuICByZWFkb25seSAjY29tbWl0SGFuZGxlcjogU2VsZWN0aW9uQWNjdW11bGF0b3JDb21taXRIYW5kbGVyPENvbW1pdEFyZ3M+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBjb21taXRIYW5kbGVyOiBTZWxlY3Rpb25BY2N1bXVsYXRvckNvbW1pdEhhbmRsZXI8Q29tbWl0QXJncz4gPSAoKTogdm9pZCA9PiB7fVxuICApIHtcbiAgICB0aGlzLiNjb21taXRIYW5kbGVyID0gY29tbWl0SGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2l6ZU5vZGVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI25vZGVzLnNpemU7XG4gIH1cbiAgcHVibGljIGdldCBzaXplRWRnZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jZWRnZXMuc2l6ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROb2RlcygpOiBOb2RlW10ge1xuICAgIHJldHVybiB0aGlzLiNub2Rlcy5nZXRTZWxlY3Rpb24oKTtcbiAgfVxuICBwdWJsaWMgZ2V0RWRnZXMoKTogRWRnZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jZWRnZXMuZ2V0U2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgYWRkTm9kZXMoLi4ubm9kZXM6IHJlYWRvbmx5IE5vZGVbXSk6IHZvaWQge1xuICAgIHRoaXMuI25vZGVzLmFkZCguLi5ub2Rlcyk7XG4gIH1cbiAgcHVibGljIGFkZEVkZ2VzKC4uLmVkZ2VzOiByZWFkb25seSBFZGdlW10pOiB2b2lkIHtcbiAgICB0aGlzLiNlZGdlcy5hZGQoLi4uZWRnZXMpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZU5vZGVzKG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICB0aGlzLiNub2Rlcy5kZWxldGUobm9kZSk7XG4gIH1cbiAgcHVibGljIGRlbGV0ZUVkZ2VzKGVkZ2U6IEVkZ2UpOiB2b2lkIHtcbiAgICB0aGlzLiNlZGdlcy5kZWxldGUoZWRnZSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy4jbm9kZXMuY2xlYXIoKTtcbiAgICB0aGlzLiNlZGdlcy5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGNvbW1pdCguLi5yZXN0OiBDb21taXRBcmdzKTogU2VsZWN0aW9uQWNjdW11bGF0b3JDb21taXRTdW1tYXJ5IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0ge1xuICAgICAgbm9kZXM6IHRoaXMuI25vZGVzLmNvbW1pdCgpLFxuICAgICAgZWRnZXM6IHRoaXMuI2VkZ2VzLmNvbW1pdCgpLFxuICAgIH07XG4gICAgdGhpcy4jY29tbWl0SGFuZGxlcihzdW1tYXJ5LCAuLi5yZXN0KTtcbiAgICByZXR1cm4gc3VtbWFyeTtcbiAgfVxufVxuIiwgImltcG9ydCBOb2RlIGZyb20gXCIuL2NvbXBvbmVudHMvTm9kZVwiO1xuaW1wb3J0IEVkZ2UgZnJvbSBcIi4vY29tcG9uZW50cy9FZGdlXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25BY2N1bXVsYXRvciB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuXG5pbXBvcnQgeyBzZWxlY3RpdmVEZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFRoZSBoYW5kbGVyIGZvciBzZWxlY3Rpb25zXG4gKi9cbmNsYXNzIFNlbGVjdGlvbkhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcbiAgICAvLyBUT0RPOiBDb25zaWRlciBmaXJpbmcgYW4gZXZlbnQgb24gYW55IGNoYW5nZSB0byB0aGUgc2VsZWN0aW9uLCBub3RcbiAgICAvLyBvbmx5IHRob3NlIGNhdXNlZCBieSBjbGlja3MgYW5kIHRhcHMuIEl0IHdvdWxkIGJlIGVhc3kgdG8gaW1wbGVtZW50XG4gICAgLy8gbm93IGFuZCAoYXQgbGVhc3QgdG8gbWUpIGl0IHNlZW1zIGxpa2Ugc29tZXRoaW5nIHRoYXQgY291bGQgYmVcbiAgICAvLyBxdWl0ZSB1c2VmdWwuXG4gICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IgPSBuZXcgU2VsZWN0aW9uQWNjdW11bGF0b3IoKTtcbiAgICB0aGlzLmhvdmVyT2JqID0geyBub2Rlczoge30sIGVkZ2VzOiB7fSB9O1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIG11bHRpc2VsZWN0OiBmYWxzZSxcbiAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICBzZWxlY3RDb25uZWN0ZWRFZGdlczogdHJ1ZSxcbiAgICAgIGhvdmVyQ29ubmVjdGVkRWRnZXM6IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhQ2hhbmdlZFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IFtcbiAgICAgICAgXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBcImhvdmVyQ29ubmVjdGVkRWRnZXNcIixcbiAgICAgICAgXCJzZWxlY3RhYmxlXCIsXG4gICAgICAgIFwic2VsZWN0Q29ubmVjdGVkRWRnZXNcIixcbiAgICAgIF07XG4gICAgICBzZWxlY3RpdmVEZWVwRXh0ZW5kKGZpZWxkcywgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlcyB0aGUgc2VsZWN0aW9uIHBhcnQgb2YgdGhlIHRhcDtcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2VsZWN0T25Qb2ludChwb2ludGVyKSB7XG4gICAgbGV0IHNlbGVjdGVkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlY3RhYmxlID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBvYmogPSB0aGlzLmdldE5vZGVBdChwb2ludGVyKSB8fCB0aGlzLmdldEVkZ2VBdChwb2ludGVyKTtcblxuICAgICAgLy8gdW5zZWxlY3QgYWZ0ZXIgZ2V0dGluZyB0aGUgb2JqZWN0cyBpbiBvcmRlciB0byByZXN0b3JlIHdpZHRoIGFuZCBoZWlnaHQuXG4gICAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XG5cbiAgICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0T2JqZWN0KG9iaik7XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzZWxlY3RBZGRpdGlvbmFsT25Qb2ludChwb2ludGVyKSB7XG4gICAgbGV0IHNlbGVjdGlvbkNoYW5nZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVjdGFibGUgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IG9iaiA9IHRoaXMuZ2V0Tm9kZUF0KHBvaW50ZXIpIHx8IHRoaXMuZ2V0RWRnZUF0KHBvaW50ZXIpO1xuXG4gICAgICBpZiAob2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIGlmIChvYmouaXNTZWxlY3RlZCgpID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5kZXNlbGVjdE9iamVjdChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3Rpb25DaGFuZ2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgc3RhbmRhcmQgZmllbGRzIGZvciBhbiBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIE9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXRCYXNlRXZlbnQoZXZlbnQsIHBvaW50ZXIpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge307XG5cbiAgICBwcm9wZXJ0aWVzW1wicG9pbnRlclwiXSA9IHtcbiAgICAgIERPTTogeyB4OiBwb2ludGVyLngsIHk6IHBvaW50ZXIueSB9LFxuICAgICAgY2FudmFzOiB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKSxcbiAgICB9O1xuICAgIHByb3BlcnRpZXNbXCJldmVudFwiXSA9IGV2ZW50O1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYW4gZXZlbnQgd2hpY2ggdGhlIHVzZXIgY2FuIGNhdGNoLlxuICAgKlxuICAgKiBUaGlzIGFkZHMgc29tZSBleHRyYSBkYXRhIHRvIHRoZSBldmVudCB3aXRoIHJlc3BlY3QgdG8gY3Vyc29yIHBvc2l0aW9uIGFuZFxuICAgKiBzZWxlY3RlZCBub2RlcyBhbmQgZWRnZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgb2YgZXZlbnQgdG8gc2VuZFxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyICAgICAgICAgICAgT2JqZWN0IHdpdGggdGhlIHggYW5kIHkgc2NyZWVuIGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZVxuICAgKiBAcGFyYW0ge29iamVjdCB8IHVuZGVmaW5lZH0gb2xkU2VsZWN0aW9uICAgICAgICAgICAgIElmIHByZXNlbnQsIHNlbGVjdGlvbiBzdGF0ZSBiZWZvcmUgZXZlbnQgb2NjdXJlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBbZW1wdHlTZWxlY3Rpb249ZmFsc2VdICBJbmRpY2F0ZSBpZiBzZWxlY3Rpb24gZGF0YSBzaG91bGQgYmUgcGFzc2VkXG4gICAqL1xuICBnZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgZXZlbnRUeXBlLFxuICAgIGV2ZW50LFxuICAgIHBvaW50ZXIsXG4gICAgb2xkU2VsZWN0aW9uLFxuICAgIGVtcHR5U2VsZWN0aW9uID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuX2luaXRCYXNlRXZlbnQoZXZlbnQsIHBvaW50ZXIpO1xuXG4gICAgaWYgKGVtcHR5U2VsZWN0aW9uID09PSB0cnVlKSB7XG4gICAgICBwcm9wZXJ0aWVzLm5vZGVzID0gW107XG4gICAgICBwcm9wZXJ0aWVzLmVkZ2VzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRtcCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBwcm9wZXJ0aWVzLm5vZGVzID0gdG1wLm5vZGVzO1xuICAgICAgcHJvcGVydGllcy5lZGdlcyA9IHRtcC5lZGdlcztcbiAgICB9XG5cbiAgICBpZiAob2xkU2VsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb3BlcnRpZXNbXCJwcmV2aW91c1NlbGVjdGlvblwiXSA9IG9sZFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlID09IFwiY2xpY2tcIikge1xuICAgICAgLy8gRm9yIHRoZSB0aW1lIGJlaW5nLCByZXN0cmljdCB0aGlzIGZ1bmN0aW9uYWxpdHkgdG9cbiAgICAgIC8vIGp1c3QgdGhlIGNsaWNrIGV2ZW50LlxuICAgICAgcHJvcGVydGllcy5pdGVtcyA9IHRoaXMuZ2V0Q2xpY2tlZEl0ZW1zKHBvaW50ZXIpO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jb250cm9sRWRnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9wZXJ0aWVzLmNvbnRyb2xFZGdlID0gZXZlbnQuY29udHJvbEVkZ2U7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChldmVudFR5cGUsIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlnaGxpZ2h0RWRnZXM9dGhpcy5vcHRpb25zLnNlbGVjdENvbm5lY3RlZEVkZ2VzXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNlbGVjdE9iamVjdChvYmosIGhpZ2hsaWdodEVkZ2VzID0gdGhpcy5vcHRpb25zLnNlbGVjdENvbm5lY3RlZEVkZ2VzKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICBpZiAoaGlnaGxpZ2h0RWRnZXMgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5hZGRFZGdlcyguLi5vYmouZWRnZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmFkZE5vZGVzKG9iaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5hZGRFZGdlcyhvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqL1xuICBkZXNlbGVjdE9iamVjdChvYmopIHtcbiAgICBpZiAob2JqLmlzU2VsZWN0ZWQoKSA9PT0gdHJ1ZSkge1xuICAgICAgb2JqLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZW1vdmVGcm9tU2VsZWN0aW9uKG9iaik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHJpZXZlIGFsbCBub2RlcyBvdmVybGFwcGluZyB3aXRoIGdpdmVuIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0ICBBbiBvYmplY3Qgd2l0aCBwYXJhbWV0ZXJzIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbVxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119ICAgQW4gYXJyYXkgd2l0aCBpZCdzIG9mIHRoZSBvdmVybGFwcGluZyBub2Rlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkge1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZXMgPSBbXTtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldO1xuICAgICAgaWYgKG5vZGVzW25vZGVJZF0uaXNPdmVybGFwcGluZ1dpdGgob2JqZWN0KSkge1xuICAgICAgICBvdmVybGFwcGluZ05vZGVzLnB1c2gobm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG92ZXJsYXBwaW5nTm9kZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcG9zaXRpb24gb2JqZWN0IGluIGNhbnZhc3NwYWNlIGZyb20gYSBzaW5nbGUgcG9pbnQgaW4gc2NyZWVuc3BhY2VcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEByZXR1cm5zIHt7bGVmdDogbnVtYmVyLCB0b3A6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYm90dG9tOiBudW1iZXJ9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpIHtcbiAgICBjb25zdCBjYW52YXNQb3MgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogY2FudmFzUG9zLnggLSAxLFxuICAgICAgdG9wOiBjYW52YXNQb3MueSArIDEsXG4gICAgICByaWdodDogY2FudmFzUG9zLnggKyAxLFxuICAgICAgYm90dG9tOiBjYW52YXNQb3MueSAtIDEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRvcCBub2RlIGF0IHRoZSBwYXNzZWQgcG9pbnQgKGxpa2UgYSBjbGljaylcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldHVybk5vZGU9dHJ1ZV1cbiAgICogQHJldHVybnMge05vZGUgfCB1bmRlZmluZWR9IG5vZGVcbiAgICovXG4gIGdldE5vZGVBdChwb2ludGVyLCByZXR1cm5Ob2RlID0gdHJ1ZSkge1xuICAgIC8vIHdlIGZpcnN0IGNoZWNrIGlmIHRoaXMgaXMgYW4gbmF2aWdhdGlvbiBjb250cm9scyBlbGVtZW50XG4gICAgY29uc3QgcG9zaXRpb25PYmplY3QgPSB0aGlzLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcbiAgICBjb25zdCBvdmVybGFwcGluZ05vZGVzID0gdGhpcy5fZ2V0QWxsTm9kZXNPdmVybGFwcGluZ1dpdGgocG9zaXRpb25PYmplY3QpO1xuICAgIC8vIGlmIHRoZXJlIGFyZSBvdmVybGFwcGluZyBub2Rlcywgc2VsZWN0IHRoZSBsYXN0IG9uZSwgdGhpcyBpcyB0aGVcbiAgICAvLyBvbmUgd2hpY2ggaXMgZHJhd24gb24gdG9wIG9mIHRoZSBvdGhlcnNcbiAgICBpZiAob3ZlcmxhcHBpbmdOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAocmV0dXJuTm9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2R5Lm5vZGVzW292ZXJsYXBwaW5nTm9kZXNbb3ZlcmxhcHBpbmdOb2Rlcy5sZW5ndGggLSAxXV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb3ZlcmxhcHBpbmdOb2Rlc1tvdmVybGFwcGluZ05vZGVzLmxlbmd0aCAtIDFdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXRyaWV2ZSBhbGwgZWRnZXMgb3ZlcmxhcHBpbmcgd2l0aCBnaXZlbiBvYmplY3QsIHNlbGVjdG9yIGlzIGFyb3VuZCBjZW50ZXJcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAgQW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b21cbiAgICogQHBhcmFtIHtudW1iZXJbXX0gb3ZlcmxhcHBpbmdFZGdlcyBBbiBhcnJheSB3aXRoIGlkJ3Mgb2YgdGhlIG92ZXJsYXBwaW5nIG5vZGVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0RWRnZXNPdmVybGFwcGluZ1dpdGgob2JqZWN0LCBvdmVybGFwcGluZ0VkZ2VzKSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkuZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2VJZCA9IHRoaXMuYm9keS5lZGdlSW5kaWNlc1tpXTtcbiAgICAgIGlmIChlZGdlc1tlZGdlSWRdLmlzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkpIHtcbiAgICAgICAgb3ZlcmxhcHBpbmdFZGdlcy5wdXNoKGVkZ2VJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHJpZXZlIGFsbCBub2RlcyBvdmVybGFwcGluZyB3aXRoIGdpdmVuIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0ICBBbiBvYmplY3Qgd2l0aCBwYXJhbWV0ZXJzIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbVxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119ICAgQW4gYXJyYXkgd2l0aCBpZCdzIG9mIHRoZSBvdmVybGFwcGluZyBub2Rlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEFsbEVkZ2VzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkge1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nRWRnZXMgPSBbXTtcbiAgICB0aGlzLl9nZXRFZGdlc092ZXJsYXBwaW5nV2l0aChvYmplY3QsIG92ZXJsYXBwaW5nRWRnZXMpO1xuICAgIHJldHVybiBvdmVybGFwcGluZ0VkZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZWRnZXMgbmVhcmVzdCB0byB0aGUgcGFzc2VkIHBvaW50IChsaWtlIGEgY2xpY2spXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXR1cm5FZGdlPXRydWVdXG4gICAqIEByZXR1cm5zIHtFZGdlIHwgdW5kZWZpbmVkfSBub2RlXG4gICAqL1xuICBnZXRFZGdlQXQocG9pbnRlciwgcmV0dXJuRWRnZSA9IHRydWUpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgZWRnZXMsIHBpY2sgY2xvc2VzdCB3aXRoaW4gMTBcbiAgICBjb25zdCBjYW52YXNQb3MgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICBsZXQgbWluZGlzdCA9IDEwO1xuICAgIGxldCBvdmVybGFwcGluZ0VkZ2UgPSBudWxsO1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlSWQgPSB0aGlzLmJvZHkuZWRnZUluZGljZXNbaV07XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUlkXTtcbiAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCkge1xuICAgICAgICBjb25zdCB4RnJvbSA9IGVkZ2UuZnJvbS54O1xuICAgICAgICBjb25zdCB5RnJvbSA9IGVkZ2UuZnJvbS55O1xuICAgICAgICBjb25zdCB4VG8gPSBlZGdlLnRvLng7XG4gICAgICAgIGNvbnN0IHlUbyA9IGVkZ2UudG8ueTtcbiAgICAgICAgY29uc3QgZGlzdCA9IGVkZ2UuZWRnZVR5cGUuZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgICAgICAgeEZyb20sXG4gICAgICAgICAgeUZyb20sXG4gICAgICAgICAgeFRvLFxuICAgICAgICAgIHlUbyxcbiAgICAgICAgICBjYW52YXNQb3MueCxcbiAgICAgICAgICBjYW52YXNQb3MueVxuICAgICAgICApO1xuICAgICAgICBpZiAoZGlzdCA8IG1pbmRpc3QpIHtcbiAgICAgICAgICBvdmVybGFwcGluZ0VkZ2UgPSBlZGdlSWQ7XG4gICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG92ZXJsYXBwaW5nRWRnZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHJldHVybkVkZ2UgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5lZGdlc1tvdmVybGFwcGluZ0VkZ2VdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXBwaW5nRWRnZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIG9iamVjdCB0byB0aGUgc2VsZWN0aW9uIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWRkVG9Ib3ZlcihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgdGhpcy5ob3Zlck9iai5ub2Rlc1tvYmouaWRdID0gb2JqO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhvdmVyT2JqLmVkZ2VzW29iai5pZF0gPSBvYmo7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHNpbmdsZSBvcHRpb24gZnJvbSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVGcm9tU2VsZWN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBOb2RlKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5kZWxldGVOb2RlcyhvYmopO1xuICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZGVsZXRlRWRnZXMoLi4ub2JqLmVkZ2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZGVsZXRlRWRnZXMob2JqKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zZWxlY3QgYWxsIG5vZGVzIGFuZCBlZGdlcy5cbiAgICovXG4gIHVuc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgbm9kZXNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFNlbGVjdGVkTm9kZUNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5zaXplTm9kZXM7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgZWRnZXNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFNlbGVjdGVkRWRnZUNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5zaXplRWRnZXM7XG4gIH1cblxuICAvKipcbiAgICogc2VsZWN0IHRoZSBlZGdlcyBjb25uZWN0ZWQgdG8gdGhlIG5vZGUgdGhhdCBpcyBiZWluZyBzZWxlY3RlZFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ob3ZlckNvbm5lY3RlZEVkZ2VzKG5vZGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBub2RlLmVkZ2VzW2ldO1xuICAgICAgZWRnZS5ob3ZlciA9IHRydWU7XG4gICAgICB0aGlzLl9hZGRUb0hvdmVyKGVkZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGhpZ2hsaWdodCBmcm9tIGEgbm9kZSBvciBlZGdlLCBpbiByZXNwb25zZSB0byBtb3VzZSBtb3ZlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIG9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHBhcmFtIHtOb2RlfHZpcy5FZGdlfSBvYmplY3RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXRCbHVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIG9iamVjdCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9pbml0QmFzZUV2ZW50KGV2ZW50LCBwb2ludGVyKTtcblxuICAgIGlmIChvYmplY3QuaG92ZXIgPT09IHRydWUpIHtcbiAgICAgIG9iamVjdC5ob3ZlciA9IGZhbHNlO1xuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgcHJvcGVydGllcy5ub2RlID0gb2JqZWN0LmlkO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYmx1ck5vZGVcIiwgcHJvcGVydGllcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wZXJ0aWVzLmVkZ2UgPSBvYmplY3QuaWQ7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJibHVyRWRnZVwiLCBwcm9wZXJ0aWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBoaWdobGlnaHQgZm9yIGEgbm9kZSBvciBlZGdlLCBpbiByZXNwb25zZSB0byBtb3VzZSBtb3ZlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIG9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHBhcmFtIHtOb2RlfHZpcy5FZGdlfSBvYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGhvdmVyQ2hhbmdlZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdEhvdmVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIG9iamVjdCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9pbml0QmFzZUV2ZW50KGV2ZW50LCBwb2ludGVyKTtcbiAgICBsZXQgaG92ZXJDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICBpZiAob2JqZWN0LmhvdmVyID09PSBmYWxzZSkge1xuICAgICAgb2JqZWN0LmhvdmVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2FkZFRvSG92ZXIob2JqZWN0KTtcbiAgICAgIGhvdmVyQ2hhbmdlZCA9IHRydWU7XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICBwcm9wZXJ0aWVzLm5vZGUgPSBvYmplY3QuaWQ7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJob3Zlck5vZGVcIiwgcHJvcGVydGllcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wZXJ0aWVzLmVkZ2UgPSBvYmplY3QuaWQ7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJob3ZlckVkZ2VcIiwgcHJvcGVydGllcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdmVyQ2hhbmdlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGFjdGlvbnMgaW4gcmVzcG9uc2UgdG8gYSBtb3VzZSBtb3ZlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50XG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciB8IG9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICovXG4gIGhvdmVyT2JqZWN0KGV2ZW50LCBwb2ludGVyKSB7XG4gICAgbGV0IG9iamVjdCA9IHRoaXMuZ2V0Tm9kZUF0KHBvaW50ZXIpO1xuICAgIGlmIChvYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqZWN0ID0gdGhpcy5nZXRFZGdlQXQocG9pbnRlcik7XG4gICAgfVxuXG4gICAgbGV0IGhvdmVyQ2hhbmdlZCA9IGZhbHNlO1xuICAgIC8vIHJlbW92ZSBhbGwgbm9kZSBob3ZlciBoaWdobGlnaHRzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ob3Zlck9iai5ub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmhvdmVyT2JqLm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBvYmplY3QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlICYmIG9iamVjdC5pZCAhPSBub2RlSWQpIHx8XG4gICAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgRWRnZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmVtaXRCbHVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIHRoaXMuaG92ZXJPYmoubm9kZXNbbm9kZUlkXSk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuaG92ZXJPYmoubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBob3ZlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZpbmcgYWxsIGVkZ2UgaG92ZXIgaGlnaGxpZ2h0c1xuICAgIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuaG92ZXJPYmouZWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ob3Zlck9iai5lZGdlcywgZWRnZUlkKSkge1xuICAgICAgICAvLyBpZiB0aGUgaG92ZXIgaGFzIGJlZW4gY2hhbmdlZCBoZXJlIGl0IG1lYW5zIHRoYXQgdGhlIG5vZGUgaGFzIGJlZW4gaG92ZXJlZCBvdmVyIG9yIG9mZlxuICAgICAgICAvLyB3ZSB0aGVuIGRvIG5vdCB1c2UgdGhlIGVtaXRCbHVyRXZlbnQgbWV0aG9kIGhlcmUuXG4gICAgICAgIGlmIChob3ZlckNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmhvdmVyT2JqLmVkZ2VzW2VkZ2VJZF0uaG92ZXIgPSBmYWxzZTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5ob3Zlck9iai5lZGdlc1tlZGdlSWRdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRoZSBibHVyIHJlbWFpbnMgdGhlIHNhbWUgYW5kIHRoZSBvYmplY3QgaXMgdW5kZWZpbmVkIChtb3VzZSBvZmYpIG9yIGFub3RoZXJcbiAgICAgICAgLy8gZWRnZSBoYXMgYmVlbiBob3ZlcmVkLCBvciBhbm90aGVyIG5vZGUgaGFzIGJlZW4gaG92ZXJlZCB3ZSBibHVyIHRoZSBlZGdlLlxuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICBvYmplY3QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChvYmplY3QgaW5zdGFuY2VvZiBFZGdlICYmIG9iamVjdC5pZCAhPSBlZGdlSWQpIHx8XG4gICAgICAgICAgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgJiYgIW9iamVjdC5ob3ZlcilcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5lbWl0Qmx1ckV2ZW50KGV2ZW50LCBwb2ludGVyLCB0aGlzLmhvdmVyT2JqLmVkZ2VzW2VkZ2VJZF0pO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmhvdmVyT2JqLmVkZ2VzW2VkZ2VJZF07XG4gICAgICAgICAgaG92ZXJDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvYmplY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaG92ZXJlZEVkZ2VzQ291bnQgPSBPYmplY3Qua2V5cyh0aGlzLmhvdmVyT2JqLmVkZ2VzKS5sZW5ndGg7XG4gICAgICBjb25zdCBob3ZlcmVkTm9kZXNDb3VudCA9IE9iamVjdC5rZXlzKHRoaXMuaG92ZXJPYmoubm9kZXMpLmxlbmd0aDtcbiAgICAgIGNvbnN0IG5ld09ubHlIb3ZlcmVkRWRnZSA9XG4gICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIEVkZ2UgJiZcbiAgICAgICAgaG92ZXJlZEVkZ2VzQ291bnQgPT09IDAgJiZcbiAgICAgICAgaG92ZXJlZE5vZGVzQ291bnQgPT09IDA7XG4gICAgICBjb25zdCBuZXdPbmx5SG92ZXJlZE5vZGUgPVxuICAgICAgICBvYmplY3QgaW5zdGFuY2VvZiBOb2RlICYmXG4gICAgICAgIGhvdmVyZWRFZGdlc0NvdW50ID09PSAwICYmXG4gICAgICAgIGhvdmVyZWROb2Rlc0NvdW50ID09PSAwO1xuXG4gICAgICBpZiAoaG92ZXJDaGFuZ2VkIHx8IG5ld09ubHlIb3ZlcmVkRWRnZSB8fCBuZXdPbmx5SG92ZXJlZE5vZGUpIHtcbiAgICAgICAgaG92ZXJDaGFuZ2VkID0gdGhpcy5lbWl0SG92ZXJFdmVudChldmVudCwgcG9pbnRlciwgb2JqZWN0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgJiYgdGhpcy5vcHRpb25zLmhvdmVyQ29ubmVjdGVkRWRnZXMgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5faG92ZXJDb25uZWN0ZWRFZGdlcyhvYmplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChob3ZlckNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0IHRoZSBzZWxlY3Rpb24gY2hhbmdlcyBidXQgZG9uJ3QgZW1pdCBhbnkgZXZlbnRzLlxuICAgKi9cbiAgY29tbWl0V2l0aG91dEVtaXR0aW5nKCkge1xuICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNvbW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhbmQgZGVzZWxlY3Qgbm9kZXMgZGVwZW5kaW5nIGN1cnJlbnQgc2VsZWN0aW9uIGNoYW5nZS5cbiAgICpcbiAgICogRm9yIGNoYW5naW5nIG5vZGVzLCBzZWxlY3QvZGVzZWxlY3QgZXZlbnRzIGFyZSBmaXJlZC5cbiAgICpcbiAgICogTk9URTogRm9yIGEgZ2l2ZW4gZWRnZSwgaWYgb25lIGNvbm5lY3Rpbmcgbm9kZSBpcyBkZXNlbGVjdGVkIGFuZCB3aXRoIHRoZVxuICAgKiBzYW1lIGNsaWNrIHRoZSBvdGhlciBub2RlIGlzIHNlbGVjdGVkLCBubyBldmVudHMgZm9yIHRoZSBlZGdlIHdpbGwgZmlyZS4gSXRcbiAgICogd2FzIHNlbGVjdGVkIGFuZCBpdCB3aWxsIHJlbWFpbiBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIC0gVGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgb2YgdGhlXG4gICAqIGNsaWNrLCB0YXAsIGRyYWdlbmTigKYgdGhhdCB0cmlnZ2VyZWQgdGhpcy5cbiAgICogQHBhcmFtIHtVSUV2ZW50fSBldmVudCAtIFRoZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzLlxuICAgKi9cbiAgY29tbWl0QW5kRW1pdChwb2ludGVyLCBldmVudCkge1xuICAgIGxldCBzZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2VsZWN0aW9uQ2hhbmdlcyA9IHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNvbW1pdCgpO1xuICAgIGNvbnN0IHByZXZpb3VzU2VsZWN0aW9uID0ge1xuICAgICAgbm9kZXM6IHNlbGVjdGlvbkNoYW5nZXMubm9kZXMucHJldmlvdXMsXG4gICAgICBlZGdlczogc2VsZWN0aW9uQ2hhbmdlcy5lZGdlcy5wcmV2aW91cyxcbiAgICB9O1xuXG4gICAgaWYgKHNlbGVjdGlvbkNoYW5nZXMuZWRnZXMuZGVsZXRlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgXCJkZXNlbGVjdEVkZ2VcIixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHBvaW50ZXIsXG4gICAgICAgIHByZXZpb3VzU2VsZWN0aW9uXG4gICAgICApO1xuICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VzLm5vZGVzLmRlbGV0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZGVzZWxlY3ROb2RlXCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBwb2ludGVyLFxuICAgICAgICBwcmV2aW91c1NlbGVjdGlvblxuICAgICAgKTtcbiAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlcy5ub2Rlcy5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2xpY2tFdmVudChcInNlbGVjdE5vZGVcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VzLmVkZ2VzLmFkZGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDbGlja0V2ZW50KFwic2VsZWN0RWRnZVwiLCBldmVudCwgcG9pbnRlcik7XG4gICAgICBzZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmlyZSB0aGUgc2VsZWN0IGV2ZW50IGlmIGFueXRoaW5nIGhhcyBiZWVuIHNlbGVjdGVkIG9yIGRlc2VsZWN0ZWRcbiAgICBpZiAoc2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIHNlbGVjdCBvciB1bnNlbGVjdFxuICAgICAgdGhpcy5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJzZWxlY3RcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGUgYW5kIGVkZ2UgaWRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7e25vZGVzOiBBcnJheS48c3RyaW5nPiwgZWRnZXM6IEFycmF5LjxzdHJpbmc+fX0gQXJyYXlzIHdpdGggdGhlXG4gICAqIGlkcyBvZiB0aGUgc2VsZWN0ZWQgbm9kZXMgYW5kIGVkZ2VzLlxuICAgKi9cbiAgZ2V0U2VsZWN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBub2RlczogdGhpcy5nZXRTZWxlY3RlZE5vZGVJZHMoKSxcbiAgICAgIGVkZ2VzOiB0aGlzLmdldFNlbGVjdGVkRWRnZUlkcygpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBub2Rlcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSB3aXRoIHNlbGVjdGVkIG5vZGVzLlxuICAgKi9cbiAgZ2V0U2VsZWN0ZWROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0Tm9kZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVkZ2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFuIGFycmF5IHdpdGggc2VsZWN0ZWQgZWRnZXMuXG4gICAqL1xuICBnZXRTZWxlY3RlZEVkZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5nZXRFZGdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZSBpZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQW4gYXJyYXkgd2l0aCB0aGUgaWRzIG9mIHRoZSBzZWxlY3RlZCBub2Rlcy5cbiAgICovXG4gIGdldFNlbGVjdGVkTm9kZUlkcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0Tm9kZXMoKS5tYXAoKG5vZGUpID0+IG5vZGUuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZWRnZSBpZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQW4gYXJyYXkgd2l0aCB0aGUgaWRzIG9mIHRoZSBzZWxlY3RlZCBlZGdlcy5cbiAgICovXG4gIGdldFNlbGVjdGVkRWRnZUlkcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0RWRnZXMoKS5tYXAoKGVkZ2UpID0+IGVkZ2UuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7e25vZGVzOiBBcnJheS48c3RyaW5nPiwgZWRnZXM6IEFycmF5LjxzdHJpbmc+fX0gc2VsZWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uc1xuICAgKi9cbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgKCFzZWxlY3Rpb24ubm9kZXMgJiYgIXNlbGVjdGlvbi5lZGdlcykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiU2VsZWN0aW9uIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggbm9kZXMgYW5kL29yIGVkZ2VzIHByb3BlcnRpZXNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB1bnNlbGVjdCBhbnkgc2VsZWN0ZWQgbm9kZSwgaWYgb3B0aW9uIGlzIHRydWUgb3IgdW5kZWZpbmVkXG4gICAgaWYgKG9wdGlvbnMudW5zZWxlY3RBbGwgfHwgb3B0aW9ucy51bnNlbGVjdEFsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XG4gICAgfVxuICAgIGlmIChzZWxlY3Rpb24ubm9kZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2VsZWN0aW9uLm5vZGVzKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbaWRdO1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTm9kZSB3aXRoIGlkIFwiJyArIGlkICsgJ1wiIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IHNlbGVjdCBlZGdlcyB3aXRoIGl0XG4gICAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KG5vZGUsIG9wdGlvbnMuaGlnaGxpZ2h0RWRnZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb24uZWRnZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2VsZWN0aW9uLmVkZ2VzKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbaWRdO1xuICAgICAgICBpZiAoIWVkZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRWRnZSB3aXRoIGlkIFwiJyArIGlkICsgJ1wiIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KGVkZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuY29tbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogc2VsZWN0IHplcm8gb3IgbW9yZSBub2RlcyB3aXRoIHRoZSBvcHRpb24gdG8gaGlnaGxpZ2h0IGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gc2VsZWN0aW9uICAgICBBbiBhcnJheSB3aXRoIHRoZSBpZHMgb2YgdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBub2Rlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlnaGxpZ2h0RWRnZXNdXG4gICAqL1xuICBzZWxlY3ROb2RlcyhzZWxlY3Rpb24sIGhpZ2hsaWdodEVkZ2VzID0gdHJ1ZSkge1xuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5sZW5ndGggPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IFwiU2VsZWN0aW9uIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBpZHNcIjtcblxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHsgbm9kZXM6IHNlbGVjdGlvbiB9LCB7IGhpZ2hsaWdodEVkZ2VzOiBoaWdobGlnaHRFZGdlcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZWxlY3QgemVybyBvciBtb3JlIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gc2VsZWN0aW9uICAgICBBbiBhcnJheSB3aXRoIHRoZSBpZHMgb2YgdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBub2Rlcy5cbiAgICovXG4gIHNlbGVjdEVkZ2VzKHNlbGVjdGlvbikge1xuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5sZW5ndGggPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IFwiU2VsZWN0aW9uIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBpZHNcIjtcblxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHsgZWRnZXM6IHNlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgc2VsZWN0aW9uOiByZW1vdmUgaWRzIG9mIG5vZGVzIHdoaWNoIG5vIGxvbmdlciBleGlzdFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlU2VsZWN0aW9uKCkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBpbiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5nZXROb2RlcygpKSB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGUuaWQpKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmRlbGV0ZU5vZGVzKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVkZ2UgaW4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0RWRnZXMoKSkge1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlLmlkKSkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5kZWxldGVFZGdlcyhlZGdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGFsbCB0aGUgdmlzdWFsIGVsZW1lbnRzIGNsaWNrZWQgd2hpY2ggYXJlIG9uIHRoZSBnaXZlbiBwb2ludC5cbiAgICpcbiAgICogQWxsIGVsZW1lbnRzIGFyZSByZXR1cm5lZDsgdGhpcyBpbmNsdWRlcyBub2RlcywgZWRnZXMgYW5kIHRoZWlyIGxhYmVscy5cbiAgICogVGhlIG9yZGVyIHJldHVybmVkIGlzIGZyb20gaGlnaGVzdCB0byBsb3dlc3QsIGkuZS4gZWxlbWVudCAwIG9mIHRoZSByZXR1cm5cbiAgICogdmFsdWUgaXMgdGhlIHRvcG1vc3QgaXRlbSBjbGlja2VkIG9uLlxuICAgKlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIGNvbnNpc3RzIG9mIGFuIGFycmF5IG9mIHRoZSBmb2xsb3dpbmcgcG9zc2libGUgZWxlbWVudHM6XG4gICAqXG4gICAqIC0gYHtub2RlSWQ6bnVtYmVyfWAgICAgICAgICAgICAgLSBub2RlIHdpdGggZ2l2ZW4gaWQgY2xpY2tlZCBvblxuICAgKiAtIGB7bm9kZUlkOm51bWJlciwgbGFiZWxJZDowfWAgIC0gbGFiZWwgb2Ygbm9kZSB3aXRoIGdpdmVuIGlkIGNsaWNrZWQgb25cbiAgICogLSBge2VkZ2VJZDpudW1iZXJ9YCAgICAgICAgICAgICAtIGVkZ2Ugd2l0aCBnaXZlbiBpZCBjbGlja2VkIG9uXG4gICAqIC0gYHtlZGdlOm51bWJlciwgbGFiZWxJZDowfWAgICAgLSBsYWJlbCBvZiBlZGdlIHdpdGggZ2l2ZW4gaWQgY2xpY2tlZCBvblxuICAgKlxuICAgKiAjIyBOT1RFU1xuICAgKlxuICAgKiAtIEN1cnJlbnRseSwgdGhlcmUgaXMgb25seSBvbmUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIGEgbm9kZSBvciBhbiBlZGdlLFxuICAgKiAgIGJ1dCB0aGlzIGlzIGV4cGVjdGVkIHRvIGNoYW5nZSBzb21ld2hlcmUgaW4gdGhlIGZ1dHVyZS5cbiAgICogLSBTaW5jZSB0aGVyZSBpcyBubyB6LWluZGV4aW5nIHlldCwgaXQgaXMgbm90IHJlYWxseSBwb3NzaWJsZSB0byBzZXQgdGhlIG5vZGVzIGFuZFxuICAgKiAgIGVkZ2VzIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBGb3IgdGhlIHRpbWUgYmVpbmcsIG5vZGVzIGNvbWUgZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7cG9pbnR9IHBvaW50ZXIgIG1vdXNlIHBvc2l0aW9uIGluIHNjcmVlbiBjb29yZGluYXRlc1xuICAgKiBAcmV0dXJucyB7QXJyYXkuPG5vZGVDbGlja0l0ZW18bm9kZUxhYmVsQ2xpY2tJdGVtfGVkZ2VDbGlja0l0ZW18ZWRnZUxhYmVsQ2xpY2tJdGVtPn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldENsaWNrZWRJdGVtcyhwb2ludGVyKSB7XG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuXG4gICAgLy8gTm90ZSByZXZlcnNlIG9yZGVyOyB3ZSB3YW50IHRoZSB0b3Btb3N0IGNsaWNrZWQgaXRlbXMgdG8gYmUgZmlyc3QgaW4gdGhlIGFycmF5XG4gICAgLy8gQWxzbyBub3RlIHRoYXQgc2VsZWN0ZWQgbm9kZXMgYXJlIGRpc3JlZ2FyZGVkIGhlcmU7IHRoZXNlIG5vcm1hbGx5IGRpc3BsYXkgb24gdG9wXG4gICAgY29uc3Qgbm9kZUluZGljZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgZm9yIChsZXQgaSA9IG5vZGVJbmRpY2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgY29uc3QgcmV0ID0gbm9kZS5nZXRJdGVtc09uUG9pbnQocG9pbnQpO1xuICAgICAgaXRlbXMucHVzaC5hcHBseShpdGVtcywgcmV0KTsgLy8gQXBwZW5kIHRoZSByZXR1cm4gdmFsdWUgdG8gdGhlIHJ1bm5pbmcgbGlzdC5cbiAgICB9XG5cbiAgICBjb25zdCBlZGdlSW5kaWNlcyA9IHRoaXMuYm9keS5lZGdlSW5kaWNlcztcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBmb3IgKGxldCBpID0gZWRnZUluZGljZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBjb25zdCByZXQgPSBlZGdlLmdldEl0ZW1zT25Qb2ludChwb2ludCk7XG4gICAgICBpdGVtcy5wdXNoLmFwcGx5KGl0ZW1zLCByZXQpOyAvLyBBcHBlbmQgdGhlIHJldHVybiB2YWx1ZSB0byB0aGUgcnVubmluZyBsaXN0LlxuICAgIH1cblxuICAgIHJldHVybiBpdGVtcztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Rpb25IYW5kbGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgbWVyZ2VTb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICByZXR1cm4gbGVuZ3RoIDwgOCA/IGluc2VydGlvblNvcnQoYXJyYXksIGNvbXBhcmVmbikgOiBtZXJnZShcbiAgICBhcnJheSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBjb21wYXJlZm5cbiAgKTtcbn07XG5cbnZhciBpbnNlcnRpb25Tb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGkgPSAxO1xuICB2YXIgZWxlbWVudCwgajtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGogPSBpO1xuICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICB9XG4gICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIChhcnJheSwgbGVmdCwgcmlnaHQsIGNvbXBhcmVmbikge1xuICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgdmFyIGxpbmRleCA9IDA7XG4gIHZhciByaW5kZXggPSAwO1xuXG4gIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlU29ydDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBmaXJlZm94ID0gdXNlckFnZW50Lm1hdGNoKC9maXJlZm94XFwvKFxcZCspL2kpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhZmlyZWZveCAmJiArZmlyZWZveFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbicpO1xudmFyIElFX09SX0VER0UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24nKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdW5jdXJyeVRoaXModGVzdC5zb3J0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXModGVzdC5wdXNoKTtcblxuLy8gSUU4LVxudmFyIEZBSUxTX09OX1VOREVGSU5FRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KTtcbi8vIFY4IGJ1Z1xudmFyIEZBSUxTX09OX05VTEwgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydChudWxsKTtcbn0pO1xuLy8gT2xkIFdlYktpdFxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb3J0Jyk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDcwO1xuICBpZiAoRkYgJiYgRkYgPiAzKSByZXR1cm47XG4gIGlmIChJRV9PUl9FREdFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdFQktJVCkgcmV0dXJuIFdFQktJVCA8IDYwMztcblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBjb2RlLCBjaHIsIHZhbHVlLCBpbmRleDtcblxuICAvLyBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIG1vcmUgNTEyIGVsZW1lbnRzIChDaGFrcmEgYW5kIG9sZCBWOCBmYWlscyBvbmx5IGluIHRoaXMgY2FzZSlcbiAgZm9yIChjb2RlID0gNjU7IGNvZGUgPCA3NjsgY29kZSsrKSB7XG4gICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSA2NjogY2FzZSA2OTogY2FzZSA3MDogY2FzZSA3MjogdmFsdWUgPSAzOyBicmVhaztcbiAgICAgIGNhc2UgNjg6IGNhc2UgNzE6IHZhbHVlID0gNDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB2YWx1ZSA9IDI7XG4gICAgfVxuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDc7IGluZGV4KyspIHtcbiAgICAgIHRlc3QucHVzaCh7IGs6IGNociArIGluZGV4LCB2OiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudiAtIGEudjsgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGVzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSB0ZXN0W2luZGV4XS5rLmNoYXJBdCgwKTtcbiAgICBpZiAocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IGNocikgcmVzdWx0ICs9IGNocjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgIT09ICdER0JFRkhBQ0lKSyc7XG59KTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRCB8fCAhU1RBQkxFX1NPUlQ7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICByZXR1cm4gdG9TdHJpbmcoeCkgPiB0b1N0cmluZyh5KSA/IDEgOiAtMTtcbiAgfTtcbn07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb3J0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG5cbiAgICB2YXIgYXJyYXkgPSB0b09iamVjdCh0aGlzKTtcblxuICAgIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkID8gbmF0aXZlU29ydChhcnJheSkgOiBuYXRpdmVTb3J0KGFycmF5LCBjb21wYXJlZm4pO1xuXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICAgIHZhciBpdGVtc0xlbmd0aCwgaW5kZXg7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGluZGV4IGluIGFycmF5KSBwdXNoKGl0ZW1zLCBhcnJheVtpbmRleF0pO1xuICAgIH1cblxuICAgIGludGVybmFsU29ydChpdGVtcywgZ2V0U29ydENvbXBhcmUoY29tcGFyZWZuKSk7XG5cbiAgICBpdGVtc0xlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZW1zKTtcbiAgICBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBpdGVtc0xlbmd0aCkgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXgrK107XG4gICAgd2hpbGUgKGluZGV4IDwgYXJyYXlMZW5ndGgpIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhhcnJheSwgaW5kZXgrKyk7XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29ydCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnNvcnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29ydCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb3J0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgcmVkdWNlLCByZWR1Y2VSaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX1JJR0hUKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYXJndW1lbnRzTGVuZ3RoLCBtZW1vKSB7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDtJU19SSUdIVCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuICByaWdodDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG4vLyBDaHJvbWUgODAtODIgaGFzIGEgY3JpdGljYWwgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDQ5OTgyXG52YXIgQ0hST01FX0JVRyA9ICFJU19OT0RFICYmIENIUk9NRV9WRVJTSU9OID4gNzkgJiYgQ0hST01FX1ZFUlNJT04gPCA4MztcbnZhciBGT1JDRUQgPSBDSFJPTUVfQlVHIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgbGVuZ3RoLCBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZWR1Y2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmVkdWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJlZHVjZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmVkdWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIvKipcbiAqIEhlbHBlciBjbGFzc2VzIGZvciBMYXlvdXRFbmdpbmUuXG4gKlxuICogU3RyYXRlZ3kgcGF0dGVybiBmb3IgdXNhZ2Ugb2YgZGlyZWN0aW9uIG1ldGhvZHMgZm9yIGhpZXJhcmNoaWNhbCBsYXlvdXRzLlxuICovXG5cbi8qKlxuICogSW50ZXJmYWNlIGRlZmluaXRpb24gZm9yIGRpcmVjdGlvbiBzdHJhdGVneSBjbGFzc2VzLlxuICpcbiAqIFRoaXMgY2xhc3MgZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBTdHJhdGVneVxuICogcGF0dGVybiBjbGFzc2VzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbFxuICogZGlyZWN0aW9uIG9mIGhpZXJhcmNoaWNhbCByZXN1bHRzLlxuICpcbiAqIEZvciBhIGdpdmVuIGRpcmVjdGlvbiwgb25lIGNvb3JkaW5hdGUgd2lsbCBiZSAnZml4ZWQnLCBtZWFuaW5nIHRoYXQgaXQgaXNcbiAqIGRldGVybWluZWQgYnkgbGV2ZWwuXG4gKiBUaGUgb3RoZXIgY29vcmRpbmF0ZSBpcyAndW5maXhlZCcsIG1lYW5pbmcgdGhhdCB0aGUgbm9kZXMgb24gYSBnaXZlbiBsZXZlbFxuICogY2FuIHN0aWxsIG1vdmUgYWxvbmcgdGhhdCBjb29yZGluYXRlLiBTbzpcbiAqXG4gKiAtIGB2ZXJ0aWNhbGAgbGF5b3V0OiBgeGAgdW5maXhlZCwgYHlgIGZpeGVkIHBlciBsZXZlbFxuICogLSBgaG9yaXpvbnRhbGAgbGF5b3V0OiBgeGAgZml4ZWQgcGVyIGxldmVsLCBgeWAgdW5maXhlZFxuICpcbiAqIFRoZSBsb2NhbCBtZXRob2RzIGFyZSBzdHVicyBhbmQgc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIGFic3RyYWN0LlxuICogRGVyaXZlZCBjbGFzc2VzICoqbXVzdCoqIGltcGxlbWVudCBhbGwgdGhlIG1ldGhvZHMgdGhlbXNlbHZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBEaXJlY3Rpb25JbnRlcmZhY2Uge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgYWJzdHJhY3QoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgaW5zdGFudGlhdGUgYWJzdHJhY3QgY2xhc3MhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBkdW1teSBjYWxsIHdoaWNoIGlzIHVzZWQgdG8gc3VwcHJlc3MgdGhlIGpzZG9jIGVycm9ycyBvZiB0eXBlOlxuICAgKlxuICAgKiAgIFwiJ3BhcmFtJyBpcyBhc3NpZ25lZCBhIHZhbHVlIGJ1dCBuZXZlciB1c2VkXCJcbiAgICpcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZmFrZV91c2UoKSB7XG4gICAgLy8gRG8gbm90aGluZyBzcGVjaWFsXG4gIH1cblxuICAvKipcbiAgICogVHlwZSB0byB1c2UgdG8gdHJhbnNsYXRlIGR5bmFtaWMgY3VydmVzIHRvLCBpbiB0aGUgY2FzZSBvZiBoaWVyYXJjaGljYWwgbGF5b3V0LlxuICAgKiBEeW5hbWljIGN1cnZlcyBkbyBub3Qgd29yayBmb3IgdGhlc2UuXG4gICAqXG4gICAqIFRoZSB2YWx1ZSBzaG91bGQgYmUgcGVycGVuZGljdWxhciB0byB0aGUgYWN0dWFsIGRpcmVjdGlvbiBvZiB0aGUgbGF5b3V0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBEaXJlY3Rpb24sIGVpdGhlciAndmVydGljYWwnIG9yICdob3Jpem9udGFsJ1xuICAgKi9cbiAgY3VydmVUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG5vdCBmaXhlZCBmb3IgdGhpcyBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZWFkXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIG9mIHRoZSB1bmZpeGVkIGNvb3JkaW5hdGVcbiAgICovXG4gIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGUpO1xuICAgIHJldHVybiB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG5vdCBmaXhlZCBmb3IgdGhpcyBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUaGUgbm9kZSB0byBhZGp1c3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbGV2ZWxdIGlmIHNwZWNpZmllZCwgdGhlIGhpZXJhcmNoeSBsZXZlbCB0aGF0IHRoaXMgbm9kZSBzaG91bGQgYmUgZml4ZWQgdG9cbiAgICovXG4gIHNldFBvc2l0aW9uKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCA9IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZmFrZV91c2Uobm9kZSwgcG9zaXRpb24sIGxldmVsKTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3aWR0aCBvZiBhIHRyZWUuXG4gICAqXG4gICAqIEEgYHRyZWVgIGhlcmUgaXMgYSBzdWJzZXQgb2Ygbm9kZXMgd2l0aGluIHRoZSBuZXR3b3JrIHdoaWNoIGFyZSBub3QgY29ubmVjdGVkIHRvIG90aGVyIG5vZGVzLFxuICAgKiBvbmx5IGFtb25nIHRoZW1zZWx2ZXMuIEluIGVzc2VuY2UsIGl0IGlzIGEgc3ViLW5ldHdvcmsuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggbnVtYmVyIG9mIGEgdHJlZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgd2lkdGggb2YgYSB0cmVlIGluIHRoZSB2aWV3IGNvb3JkaW5hdGVzXG4gICAqL1xuICBnZXRUcmVlU2l6ZShpbmRleCkge1xuICAgIHRoaXMuZmFrZV91c2UoaW5kZXgpO1xuICAgIHJldHVybiB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCBhcnJheSBvZiBub2RlcyBvbiB0aGUgdW5maXhlZCBjb29yZGluYXRlcy5cbiAgICpcbiAgICogTm90ZToqKiBjaHJvbWUgaGFzIG5vbi1zdGFibGUgc29ydGluZyBpbXBsZW1lbnRhdGlvbiwgd2hpY2hcbiAgICogaGFzIGEgdGVuZGVuY3kgdG8gY2hhbmdlIHRoZSBvcmRlciBvZiB0aGUgYXJyYXkgaXRlbXMsXG4gICAqIGV2ZW4gaWYgdGhlIGN1c3RvbSBzb3J0IGZ1bmN0aW9uIHJldHVybnMgMC5cbiAgICpcbiAgICogRm9yIHRoaXMgcmVhc29uLCBhbiBleHRlcm5hbCBzb3J0IGltcGxlbWVudGF0aW9uIGlzIHVzZWQsXG4gICAqIHdoaWNoIGhhcyB0aGUgYWRkZWQgYmVuZWZpdCBvZiBiZWluZyBmYXN0ZXIgdGhhbiB0aGUgc3RhbmRhcmRcbiAgICogcGxhdGZvcm1zIGltcGxlbWVudGF0aW9uLiBUaGlzIGhhcyBiZWVuIHZlcmlmaWVkIG9uIGBub2RlLmpzYCxcbiAgICogYGZpcmVmb3hgIGFuZCBgY2hyb21lYCAoYWxsIGxpbnV4KS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVBcnJheSBhcnJheSBvZiBub2RlcyB0byBzb3J0XG4gICAqL1xuICBzb3J0KG5vZGVBcnJheSkge1xuICAgIHRoaXMuZmFrZV91c2Uobm9kZUFycmF5KTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIHRoZSBmaXhlZCBjb29yZGluYXRlIG9mIHRoZSBub2RlIHRvIHRoZSBnaXZlbiBsZXZlbFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIG5vZGUgdG8gYWRqdXN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbCBUaGUgbGV2ZWwgdG8gZml4IHRvXG4gICAqL1xuICBmaXgobm9kZSwgbGV2ZWwpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGUsIGxldmVsKTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIG9mZnNldCB0byB0aGUgdW5maXhlZCBjb29yZGluYXRlIG9mIHRoZSBnaXZlbiBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGVJZH0gbm9kZUlkIElkIG9mIHRoZSBub2RlIHRvIGFkanVzdFxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlmZiBPZmZzZXQgdG8gYWRkIHRvIHRoZSB1bmZpeGVkIGNvb3JkaW5hdGVcbiAgICovXG4gIHNoaWZ0KG5vZGVJZCwgZGlmZikge1xuICAgIHRoaXMuZmFrZV91c2Uobm9kZUlkLCBkaWZmKTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJ0aWNhbCBTdHJhdGVneVxuICpcbiAqIENvb3JkaW5hdGUgYHlgIGlzIGZpeGVkIG9uIGxldmVscywgY29vcmRpbmF0ZSBgeGAgaXMgdW5maXhlZC5cbiAqXG4gKiBAYXVnbWVudHMgRGlyZWN0aW9uSW50ZXJmYWNlXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBWZXJ0aWNhbFN0cmF0ZWd5IGV4dGVuZHMgRGlyZWN0aW9uSW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBsYXlvdXQgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgTGF5b3V0RW5naW5lIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IobGF5b3V0KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBjdXJ2ZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaG9yaXpvbnRhbFwiO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS54O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNldFBvc2l0aW9uKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChsZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxheW91dC5oaWVyYXJjaGljYWwuYWRkVG9PcmRlcmluZyhub2RlLCBsZXZlbCk7XG4gICAgfVxuICAgIG5vZGUueCA9IHBvc2l0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFRyZWVTaXplKGluZGV4KSB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5sYXlvdXQuaGllcmFyY2hpY2FsLmdldFRyZWVTaXplKFxuICAgICAgdGhpcy5sYXlvdXQuYm9keS5ub2RlcyxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgICByZXR1cm4geyBtaW46IHJlcy5taW5feCwgbWF4OiByZXMubWF4X3ggfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzb3J0KG5vZGVBcnJheSkge1xuICAgIG5vZGVBcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS54IC0gYi54O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGZpeChub2RlLCBsZXZlbCkge1xuICAgIG5vZGUueSA9IHRoaXMubGF5b3V0Lm9wdGlvbnMuaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiAqIGxldmVsO1xuICAgIG5vZGUub3B0aW9ucy5maXhlZC55ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzaGlmdChub2RlSWQsIGRpZmYpIHtcbiAgICB0aGlzLmxheW91dC5ib2R5Lm5vZGVzW25vZGVJZF0ueCArPSBkaWZmO1xuICB9XG59XG5cbi8qKlxuICogSG9yaXpvbnRhbCBTdHJhdGVneVxuICpcbiAqIENvb3JkaW5hdGUgYHhgIGlzIGZpeGVkIG9uIGxldmVscywgY29vcmRpbmF0ZSBgeWAgaXMgdW5maXhlZC5cbiAqXG4gKiBAYXVnbWVudHMgRGlyZWN0aW9uSW50ZXJmYWNlXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBIb3Jpem9udGFsU3RyYXRlZ3kgZXh0ZW5kcyBEaXJlY3Rpb25JbnRlcmZhY2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGxheW91dCByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBMYXlvdXRFbmdpbmUgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihsYXlvdXQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGN1cnZlVHlwZSgpIHtcbiAgICByZXR1cm4gXCJ2ZXJ0aWNhbFwiO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS55O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNldFBvc2l0aW9uKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChsZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxheW91dC5oaWVyYXJjaGljYWwuYWRkVG9PcmRlcmluZyhub2RlLCBsZXZlbCk7XG4gICAgfVxuICAgIG5vZGUueSA9IHBvc2l0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFRyZWVTaXplKGluZGV4KSB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5sYXlvdXQuaGllcmFyY2hpY2FsLmdldFRyZWVTaXplKFxuICAgICAgdGhpcy5sYXlvdXQuYm9keS5ub2RlcyxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgICByZXR1cm4geyBtaW46IHJlcy5taW5feSwgbWF4OiByZXMubWF4X3kgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzb3J0KG5vZGVBcnJheSkge1xuICAgIG5vZGVBcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS55IC0gYi55O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGZpeChub2RlLCBsZXZlbCkge1xuICAgIG5vZGUueCA9IHRoaXMubGF5b3V0Lm9wdGlvbnMuaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiAqIGxldmVsO1xuICAgIG5vZGUub3B0aW9ucy5maXhlZC54ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzaGlmdChub2RlSWQsIGRpZmYpIHtcbiAgICB0aGlzLmxheW91dC5ib2R5Lm5vZGVzW25vZGVJZF0ueSArPSBkaWZmO1xuICB9XG59XG5cbmV4cG9ydCB7IEhvcml6b250YWxTdHJhdGVneSwgVmVydGljYWxTdHJhdGVneSB9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5ldmVyeTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdldmVyeScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZXZlcnkodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmV2ZXJ5Jyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZXZlcnk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZXZlcnknKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZXZlcnk7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmV2ZXJ5KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2V2ZXJ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgInR5cGUgTGV2ZWxzID0gUmVjb3JkPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPjtcbnR5cGUgSWQgPSBzdHJpbmcgfCBudW1iZXI7XG5pbnRlcmZhY2UgRWRnZSB7XG4gIGNvbm5lY3RlZDogYm9vbGVhbjtcbiAgZnJvbTogTm9kZTtcbiAgZnJvbUlkOiBJZDtcbiAgdG86IE5vZGU7XG4gIHRvSWQ6IElkO1xufVxuaW50ZXJmYWNlIE5vZGUge1xuICBpZDogSWQ7XG4gIGVkZ2VzOiBFZGdlW107XG59XG5cbi8qKlxuICogVHJ5IHRvIGFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgY3ljbGljIOKAnGhpZXJhcmNoeeKAnS5cbiAqXG4gKiBAcGFyYW0gbm9kZXMgLSBWaXNpYmxlIG5vZGVzIG9mIHRoZSBncmFwaC5cbiAqIEBwYXJhbSBsZXZlbHMgLSBJZiBwcmVzZW50IGxldmVscyB3aWxsIGJlIGFkZGVkIHRvIGl0LCBpZiBub3QgYSBuZXcgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZC5cbiAqIEByZXR1cm5zIFBvcHVsYXRlZCBub2RlIGxldmVscy5cbiAqL1xuZnVuY3Rpb24gZmlsbExldmVsc0J5RGlyZWN0aW9uQ3ljbGljKFxuICBub2RlczogTWFwPElkLCBOb2RlPixcbiAgbGV2ZWxzOiBMZXZlbHNcbik6IExldmVscyB7XG4gIGNvbnN0IGVkZ2VzID0gbmV3IFNldDxFZGdlPigpO1xuICBub2Rlcy5mb3JFYWNoKChub2RlKTogdm9pZCA9PiB7XG4gICAgbm9kZS5lZGdlcy5mb3JFYWNoKChlZGdlKTogdm9pZCA9PiB7XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQpIHtcbiAgICAgICAgZWRnZXMuYWRkKGVkZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBlZGdlcy5mb3JFYWNoKChlZGdlKTogdm9pZCA9PiB7XG4gICAgY29uc3QgZnJvbUlkID0gZWRnZS5mcm9tLmlkO1xuICAgIGNvbnN0IHRvSWQgPSBlZGdlLnRvLmlkO1xuXG4gICAgaWYgKGxldmVsc1tmcm9tSWRdID09IG51bGwpIHtcbiAgICAgIGxldmVsc1tmcm9tSWRdID0gMDtcbiAgICB9XG5cbiAgICBpZiAobGV2ZWxzW3RvSWRdID09IG51bGwgfHwgbGV2ZWxzW2Zyb21JZF0gPj0gbGV2ZWxzW3RvSWRdKSB7XG4gICAgICBsZXZlbHNbdG9JZF0gPSBsZXZlbHNbZnJvbUlkXSArIDE7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbGV2ZWxzO1xufVxuXG4vKipcbiAqIEFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgaGllcmFyY2h5LiBMZWF2ZXMgd2lsbCBiZSBsaW5lZCB1cCBhdCB0aGUgYm90dG9tIGFuZCBhbGwgb3RoZXIgbm9kZXMgYXMgY2xvc2UgdG8gdGhlaXIgY2hpbGRyZW4gYXMgcG9zc2libGUuXG4gKlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25MZWF2ZXMobm9kZXM6IE1hcDxJZCwgTm9kZT4pOiBMZXZlbHMge1xuICByZXR1cm4gZmlsbExldmVsc0J5RGlyZWN0aW9uKFxuICAgIC8vIFBpY2sgb25seSBsZWF2ZXMgKG5vZGVzIHdpdGhvdXQgY2hpbGRyZW4pLlxuICAgIChub2RlKTogYm9vbGVhbiA9PlxuICAgICAgbm9kZS5lZGdlc1xuICAgICAgICAvLyBUYWtlIG9ubHkgdmlzaWJsZSBub2RlcyBpbnRvIGFjY291bnQuXG4gICAgICAgIC5maWx0ZXIoKGVkZ2UpOiBib29sZWFuID0+IG5vZGVzLmhhcyhlZGdlLnRvSWQpKVxuICAgICAgICAvLyBDaGVjayB0aGF0IGFsbCBlZGdlcyBsZWFkIHRvIHRoaXMgbm9kZSAobGVhZikuXG4gICAgICAgIC5ldmVyeSgoZWRnZSk6IGJvb2xlYW4gPT4gZWRnZS50byA9PT0gbm9kZSksXG4gICAgLy8gVXNlIHRoZSBsb3dlc3QgbGV2ZWwuXG4gICAgKG5ld0xldmVsLCBvbGRMZXZlbCk6IGJvb2xlYW4gPT4gb2xkTGV2ZWwgPiBuZXdMZXZlbCxcbiAgICAvLyBHbyBhZ2FpbnN0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVkZ2VzLlxuICAgIFwiZnJvbVwiLFxuICAgIG5vZGVzXG4gICk7XG59XG5cbi8qKlxuICogQXNzaWduIGxldmVscyB0byBub2RlcyBhY2NvcmRpbmcgdG8gdGhlaXIgcG9zaXRpb25zIGluIHRoZSBoaWVyYXJjaHkuIFJvb3RzIHdpbGwgYmUgbGluZWQgdXAgYXQgdGhlIHRvcCBhbmQgYWxsIG5vZGVzIGFzIGNsb3NlIHRvIHRoZWlyIHBhcmVudHMgYXMgcG9zc2libGUuXG4gKlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25Sb290cyhub2RlczogTWFwPElkLCBOb2RlPik6IExldmVscyB7XG4gIHJldHVybiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb24oXG4gICAgLy8gUGljayBvbmx5IHJvb3RzIChub2RlcyB3aXRob3V0IHBhcmVudHMpLlxuICAgIChub2RlKTogYm9vbGVhbiA9PlxuICAgICAgbm9kZS5lZGdlc1xuICAgICAgICAvLyBUYWtlIG9ubHkgdmlzaWJsZSBub2RlcyBpbnRvIGFjY291bnQuXG4gICAgICAgIC5maWx0ZXIoKGVkZ2UpOiBib29sZWFuID0+IG5vZGVzLmhhcyhlZGdlLnRvSWQpKVxuICAgICAgICAvLyBDaGVjayB0aGF0IGFsbCBlZGdlcyBsZWFkIGZyb20gdGhpcyBub2RlIChyb290KS5cbiAgICAgICAgLmV2ZXJ5KChlZGdlKTogYm9vbGVhbiA9PiBlZGdlLmZyb20gPT09IG5vZGUpLFxuICAgIC8vIFVzZSB0aGUgaGlnaGVzdCBsZXZlbC5cbiAgICAobmV3TGV2ZWwsIG9sZExldmVsKTogYm9vbGVhbiA9PiBvbGRMZXZlbCA8IG5ld0xldmVsLFxuICAgIC8vIEdvIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVkZ2VzLlxuICAgIFwidG9cIixcbiAgICBub2Rlc1xuICApO1xufVxuXG4vKipcbiAqIEFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgaGllcmFyY2h5LlxuICpcbiAqIEBwYXJhbSBpc0VudHJ5Tm9kZSAtIENoZWNrcyBhbmQgcmV0dXJuIHRydWUgaWYgdGhlIGdyYXBoIHNob3VsZCBiZSB0cmF2ZXJzZWQgZnJvbSB0aGlzIG5vZGUuXG4gKiBAcGFyYW0gc2hvdWxkTGV2ZWxCZVJlcGxhY2VkIC0gQ2hlY2tzIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIGxldmVsIG9mIGdpdmVuIG5vZGUgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdGhlIG5ldyB2YWx1ZS5cbiAqIEBwYXJhbSBkaXJlY3Rpb24gLSBXaGV0ZXIgdGhlIGdyYXBoIHNob3VsZCBiZSB0cmF2ZXJzZWQgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZWRnZXMgYFwidG9cImAgb3IgaW4gdGhlIG90aGVyIHdheSBgXCJmcm9tXCJgLlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmZ1bmN0aW9uIGZpbGxMZXZlbHNCeURpcmVjdGlvbihcbiAgaXNFbnRyeU5vZGU6IChub2RlOiBOb2RlKSA9PiBib29sZWFuLFxuICBzaG91bGRMZXZlbEJlUmVwbGFjZWQ6IChuZXdMZXZlbDogbnVtYmVyLCBvbGRMZXZlbDogbnVtYmVyKSA9PiBib29sZWFuLFxuICBkaXJlY3Rpb246IFwidG9cIiB8IFwiZnJvbVwiLFxuICBub2RlczogTWFwPElkLCBOb2RlPlxuKTogTGV2ZWxzIHtcbiAgY29uc3QgbGV2ZWxzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvLyBJZiBhY3ljbGljLCB0aGUgZ3JhcGggY2FuIGJlIHdhbGtlZCB0aHJvdWdoIHdpdGggKG1vc3QgbGlrZWx5IHdheSkgZmV3ZXJcbiAgLy8gc3RlcHMgdGhhbiB0aGUgbnVtYmVyIGJlbGxvdy4gVGhlIGV4YWN0IHZhbHVlIGlzbid0IHRvbyBpbXBvcnRhbnQgYXMgbG9uZ1xuICAvLyBhcyBpdCdzIHF1aWNrIHRvIGNvbXB1dGUgKGRvZXNuJ3QgaW1wYWN0IGFjeWNsaWMgZ3JhcGhzIHRvbyBtdWNoKSwgaXNcbiAgLy8gaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZiBzdGVwcyBhY3R1YWxseSBuZWVkZWQgKGRvZXNuJ3QgY3V0IG9mZiBiZWZvcmVcbiAgLy8gYWN5Y2xpYyBncmFwaCBpcyB3YWxrZWQgdGhyb3VnaCkgYW5kIHByZXZlbnRzIGluZmluaXRlIGxvb3BzIChjdXRzIG9mZiBmb3JcbiAgLy8gY3ljbGljIGdyYXBocykuXG4gIGNvbnN0IGxpbWl0ID0gWy4uLm5vZGVzLnZhbHVlcygpXS5yZWR1Y2U8bnVtYmVyPihcbiAgICAoYWNjLCBub2RlKTogbnVtYmVyID0+IGFjYyArIDEgKyBub2RlLmVkZ2VzLmxlbmd0aCxcbiAgICAwXG4gICk7XG5cbiAgY29uc3QgZWRnZUlkUHJvcDogXCJmcm9tSWRcIiB8IFwidG9JZFwiID0gKGRpcmVjdGlvbiArIFwiSWRcIikgYXMgXCJmcm9tSWRcIiB8IFwidG9JZFwiO1xuICBjb25zdCBuZXdMZXZlbERpZmYgPSBkaXJlY3Rpb24gPT09IFwidG9cIiA/IDEgOiAtMTtcblxuICBmb3IgKGNvbnN0IFtlbnRyeU5vZGVJZCwgZW50cnlOb2RlXSBvZiBub2Rlcykge1xuICAgIGlmIChcbiAgICAgIC8vIFNraXAgaWYgdGhlIG5vZGUgaXMgbm90IHZpc2libGUuXG4gICAgICAhbm9kZXMuaGFzKGVudHJ5Tm9kZUlkKSB8fFxuICAgICAgLy8gU2tpcCBpZiB0aGUgbm9kZSBpcyBub3QgYW4gZW50cnkgbm9kZS5cbiAgICAgICFpc0VudHJ5Tm9kZShlbnRyeU5vZGUpXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBMaW5lIHVwIGFsbCB0aGUgZW50cnkgbm9kZXMgb24gbGV2ZWwgMC5cbiAgICBsZXZlbHNbZW50cnlOb2RlSWRdID0gMDtcblxuICAgIGNvbnN0IHN0YWNrOiBOb2RlW10gPSBbZW50cnlOb2RlXTtcbiAgICBsZXQgZG9uZSA9IDA7XG4gICAgbGV0IG5vZGU6IE5vZGUgfCB1bmRlZmluZWQ7XG4gICAgd2hpbGUgKChub2RlID0gc3RhY2sucG9wKCkpKSB7XG4gICAgICBpZiAoIW5vZGVzLmhhcyhlbnRyeU5vZGVJZCkpIHtcbiAgICAgICAgLy8gU2tpcCBpZiB0aGUgbm9kZSBpcyBub3QgdmlzaWJsZS5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0xldmVsID0gbGV2ZWxzW25vZGUuaWRdICsgbmV3TGV2ZWxEaWZmO1xuXG4gICAgICBub2RlLmVkZ2VzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGVkZ2UpOiBib29sZWFuID0+XG4gICAgICAgICAgICAvLyBJZ25vcmUgZGlzY29ubmVjdGVkIGVkZ2VzLlxuICAgICAgICAgICAgZWRnZS5jb25uZWN0ZWQgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBjaXJjdWxhciBlZGdlcy5cbiAgICAgICAgICAgIGVkZ2UudG8gIT09IGVkZ2UuZnJvbSAmJlxuICAgICAgICAgICAgLy8gSWdub3JlIGVkZ2VzIGxlYWRpbmcgdG8gdGhlIG5vZGUgdGhhdCdzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG4gICAgICAgICAgICBlZGdlW2RpcmVjdGlvbl0gIT09IG5vZGUgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBlZGdlcyBjb25uZWN0aW5nIHRvIGFuIGludmlzaWJsZSBub2RlLlxuICAgICAgICAgICAgbm9kZXMuaGFzKGVkZ2UudG9JZCkgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBlZGdlcyBjb25uZWN0aW5nIGZyb20gYW4gaW52aXNpYmxlIG5vZGUuXG4gICAgICAgICAgICBub2Rlcy5oYXMoZWRnZS5mcm9tSWQpXG4gICAgICAgIClcbiAgICAgICAgLmZvckVhY2goKGVkZ2UpOiB2b2lkID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXROb2RlSWQgPSBlZGdlW2VkZ2VJZFByb3BdO1xuICAgICAgICAgIGNvbnN0IG9sZExldmVsID0gbGV2ZWxzW3RhcmdldE5vZGVJZF07XG5cbiAgICAgICAgICBpZiAob2xkTGV2ZWwgPT0gbnVsbCB8fCBzaG91bGRMZXZlbEJlUmVwbGFjZWQobmV3TGV2ZWwsIG9sZExldmVsKSkge1xuICAgICAgICAgICAgbGV2ZWxzW3RhcmdldE5vZGVJZF0gPSBuZXdMZXZlbDtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goZWRnZVtkaXJlY3Rpb25dKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAoZG9uZSA+IGxpbWl0KSB7XG4gICAgICAgIC8vIFRoaXMgd291bGQgcnVuIGZvcmV2ZXIgb24gYSBjeWNsaWMgZ3JhcGguXG4gICAgICAgIHJldHVybiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25DeWNsaWMobm9kZXMsIGxldmVscyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICArK2RvbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxldmVscztcbn1cbiIsICIvKipcbiAqIFRoZXJlJ3MgYSBtaXgtdXAgd2l0aCB0ZXJtcyBpbiB0aGUgY29kZS4gRm9sbG93aW5nIGFyZSB0aGUgZm9ybWFsIGRlZmluaXRpb25zOlxuICpcbiAqICAgdHJlZSAgIC0gYSBzdHJpY3QgaGllcmFyY2hpY2FsIG5ldHdvcmssIGkuZS4gZXZlcnkgbm9kZSBoYXMgYXQgbW9zdCBvbmUgcGFyZW50XG4gKiAgIGZvcmVzdCAtIGEgY29sbGVjdGlvbiBvZiB0cmVlcy4gVGhlc2UgZGlzdGluY3QgdHJlZXMgYXJlIHRodXMgbm90IGNvbm5lY3RlZC5cbiAqXG4gKiBTbzpcbiAqIC0gaW4gYSBuZXR3b3JrIHRoYXQgaXMgbm90IGEgdHJlZSwgdGhlcmUgZXhpc3Qgbm9kZXMgd2l0aCBtdWx0aXBsZSBwYXJlbnRzLlxuICogLSBhIG5ldHdvcmsgY29uc2lzdGluZyBvZiB1bmNvbm5lY3RlZCBzdWItbmV0d29ya3MsIG9mIHdoaWNoIGF0IGxlYXN0IG9uZVxuICogICBpcyBub3QgYSB0cmVlLCBpcyBub3QgYSBmb3Jlc3QuXG4gKlxuICogSW4gdGhlIGNvZGUsIHRoZSBkZWZpbml0aW9ucyBhcmU6XG4gKlxuICogICB0cmVlICAgLSBhbnkgZGlzY29ubmVjdGVkIHN1Yi1uZXR3b3JrLCBzdHJpY3QgaGllcmFyY2hpY2FsIG9yIG5vdC5cbiAqICAgZm9yZXN0IC0gYSBidW5jaCBvZiB0aGVzZSBzdWItbmV0d29ya3NcbiAqXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRyZWUgYW5kIG5vdC10cmVlIGlzIGltcG9ydGFudCBpbiB0aGUgY29kZSwgbm90YWJseSB3aXRoaW5cbiAqIHRvIHRoZSBibG9jay1zaGlmdGluZyBhbGdvcml0aG0uIFRoZSBhbGdvcml0aG0gYXNzdW1lcyBmb3JtYWwgdHJlZXMgYW5kIGZhaWxzXG4gKiBmb3Igbm90LXRyZWVzLCBvZnRlbiBpbiBhIHNwZWN0YWN1bGFyIG1hbm5lciAoc2VhcmNoIGZvciAnZXhwbG9kaW5nIG5ldHdvcmsnIGluIHRoZSBpc3N1ZXMpLlxuICpcbiAqIEluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoIHRoZSBkZWZpbml0aW9ucyBpbiB0aGUgZm9sbG93aW5nIGNvZGUsIHRoZSBhZGplY3RpdmUgJ2Zvcm1hbCcgaXNcbiAqIHVzZWQuIElmICdmb3JtYWwnIGlzIGFic2VudCwgeW91IG11c3QgYXNzdW1lIHRoZSBub24tZm9ybWFsIGRlZmluaXRpb24uXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogTk9URVNcbiAqID09PT09XG4gKlxuICogQSBoaWVyYXJjaGljYWwgbGF5b3V0IGlzIGEgZGlmZmVyZW50IHRoaW5nIGZyb20gYSBoaWVyYXJjaGljYWwgbmV0d29yay5cbiAqIFRoZSBsYXlvdXQgaXMgYSB3YXkgdG8gYXJyYW5nZSB0aGUgbm9kZXMgaW4gdGhlIHZpZXc7IHRoaXMgY2FuIGJlIGRvbmVcbiAqIG9uIG5vbi1oaWVyYXJjaGljYWwgbmV0d29ya3MgYXMgd2VsbC4gVGhlIGNvbnZlcnNlIGlzIGFsc28gcG9zc2libGUuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuaW1wb3J0IHtcbiAgQWxlYSxcbiAgZGVlcEV4dGVuZCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2VPcHRpb25zLFxuICBzZWxlY3RpdmVEZWVwRXh0ZW5kLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgTmV0d29ya1V0aWwgZnJvbSBcIi4uL05ldHdvcmtVdGlsXCI7XG5pbXBvcnQge1xuICBIb3Jpem9udGFsU3RyYXRlZ3ksXG4gIFZlcnRpY2FsU3RyYXRlZ3ksXG59IGZyb20gXCIuL2NvbXBvbmVudHMvRGlyZWN0aW9uU3RyYXRlZ3kuanNcIjtcbmltcG9ydCB7XG4gIGZpbGxMZXZlbHNCeURpcmVjdGlvbkxlYXZlcyxcbiAgZmlsbExldmVsc0J5RGlyZWN0aW9uUm9vdHMsXG59IGZyb20gXCIuL2xheW91dC1lbmdpbmVcIjtcblxuLyoqXG4gKiBDb250YWluZXIgZm9yIGRlcml2ZWQgZGF0YSBvbiBjdXJyZW50IG5ldHdvcmssIHJlbGF0aW5nIHRvIGhpZXJhcmNoeS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBIaWVyYXJjaGljYWxTdGF0dXMge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jaGlsZHJlblJlZmVyZW5jZSA9IHt9OyAvLyBjaGlsZCBpZCdzIHBlciBub2RlIGlkXG4gICAgdGhpcy5wYXJlbnRSZWZlcmVuY2UgPSB7fTsgLy8gcGFyZW50IGlkJ3MgcGVyIG5vZGUgaWRcbiAgICB0aGlzLnRyZWVzID0ge307IC8vIHRyZWUgaWQgcGVyIG5vZGUgaWQ7IGkuZS4gdG8gd2hpY2ggdHJlZSBkb2VzIGdpdmVuIG5vZGUgaWQgYmVsb25nXG5cbiAgICB0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nID0ge307IC8vIFRoZSBub2RlcyBwZXIgbGV2ZWwsIGluIHRoZSBkaXNwbGF5IG9yZGVyXG4gICAgdGhpcy5sZXZlbHMgPSB7fTsgLy8gaGllcmFyY2h5IGxldmVsIHBlciBub2RlIGlkXG4gICAgdGhpcy5kaXN0cmlidXRpb25JbmRleCA9IHt9OyAvLyBUaGUgcG9zaXRpb24gb2YgdGhlIG5vZGUgaW4gdGhlIGxldmVsIHNvcnRpbmcgb3JkZXIsIHBlciBub2RlIGlkLlxuXG4gICAgdGhpcy5pc1RyZWUgPSBmYWxzZTsgLy8gVHJ1ZSBpZiBjdXJyZW50IG5ldHdvcmsgaXMgYSBmb3JtYWwgdHJlZVxuICAgIHRoaXMudHJlZUluZGV4ID0gLTE7IC8vIEhpZ2hlc3QgdHJlZSBpZCBpbiBjdXJyZW50IG5ldHdvcmsuXG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGdpdmVuIG5vZGVzIHRvIHRoZSBjdXJyZW50IHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHBhcmVudE5vZGVJZFxuICAgKiBAcGFyYW0ge05vZGUuaWR9IGNoaWxkTm9kZUlkXG4gICAqL1xuICBhZGRSZWxhdGlvbihwYXJlbnROb2RlSWQsIGNoaWxkTm9kZUlkKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW5SZWZlcmVuY2VbcGFyZW50Tm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW3BhcmVudE5vZGVJZF0gPSBbXTtcbiAgICB9XG4gICAgdGhpcy5jaGlsZHJlblJlZmVyZW5jZVtwYXJlbnROb2RlSWRdLnB1c2goY2hpbGROb2RlSWQpO1xuXG4gICAgaWYgKHRoaXMucGFyZW50UmVmZXJlbmNlW2NoaWxkTm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBhcmVudFJlZmVyZW5jZVtjaGlsZE5vZGVJZF0gPSBbXTtcbiAgICB9XG4gICAgdGhpcy5wYXJlbnRSZWZlcmVuY2VbY2hpbGROb2RlSWRdLnB1c2gocGFyZW50Tm9kZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBmb3IgYSBmb3JtYWwgdHJlZSBvciBmb3JtYWwgZm9yZXN0LlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBjYXNlIGlmIGV2ZXJ5IG5vZGUgaGFzIGF0IG1vc3Qgb25lIHBhcmVudC5cbiAgICpcbiAgICogUHJlOiBwYXJlbnRSZWZlcmVuY2UgaW5pdCdlZCBwcm9wZXJseSBmb3IgY3VycmVudCBuZXR3b3JrXG4gICAqL1xuICBjaGVja0lmVHJlZSgpIHtcbiAgICBmb3IgKGNvbnN0IGkgaW4gdGhpcy5wYXJlbnRSZWZlcmVuY2UpIHtcbiAgICAgIGlmICh0aGlzLnBhcmVudFJlZmVyZW5jZVtpXS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuaXNUcmVlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmlzVHJlZSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VwYXJhdGUgdHJlZXMgaW4gdGhlIGN1cnJlbnQgbmV0d29yay5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIG51bVRyZWVzKCkge1xuICAgIHJldHVybiB0aGlzLnRyZWVJbmRleCArIDE7IC8vIFRoaXMgYXNzdW1lcyB0aGUgaW5kZXhlcyBhcmUgYXNzaWduZWQgY29uc2VjaXRpdmVseVxuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIHRyZWUgaWQgdG8gYSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHRyZWVJZFxuICAgKi9cbiAgc2V0VHJlZUluZGV4KG5vZGUsIHRyZWVJZCkge1xuICAgIGlmICh0cmVlSWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuOyAvLyBEb24ndCBib3RoZXJcblxuICAgIGlmICh0aGlzLnRyZWVzW25vZGUuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudHJlZXNbbm9kZS5pZF0gPSB0cmVlSWQ7XG4gICAgICB0aGlzLnRyZWVJbmRleCA9IE1hdGgubWF4KHRyZWVJZCwgdGhpcy50cmVlSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgbGV2ZWwgZm9yIGdpdmVuIGlkIGlzIGRlZmluZWQuXG4gICAqXG4gICAqIFNldHMgbGV2ZWwgdG8gemVybyBmb3IgZ2l2ZW4gbm9kZSBpZCBpZiBub3QgYWxyZWFkeSBwcmVzZW50XG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqL1xuICBlbnN1cmVMZXZlbChub2RlSWQpIHtcbiAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxldmVsc1tub2RlSWRdID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBtYXhpbXVtIGxldmVsIG9mIGEgYnJhbmNoLlxuICAgKlxuICAgKiBUT0RPOiBOZXZlciBlbnRlcmVkOyBmaW5kIGEgdGVzdCBjYXNlIHRvIHRlc3QgdGhpcyFcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldE1heExldmVsKG5vZGVJZCkge1xuICAgIGNvbnN0IGFjY3VtdWxhdG9yID0ge307XG5cbiAgICBjb25zdCBfZ2V0TWF4TGV2ZWwgPSAobm9kZUlkKSA9PiB7XG4gICAgICBpZiAoYWNjdW11bGF0b3Jbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcltub2RlSWRdO1xuICAgICAgfVxuICAgICAgbGV0IGxldmVsID0gdGhpcy5sZXZlbHNbbm9kZUlkXTtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW25vZGVJZF0pIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW25vZGVJZF07XG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV2ZWwgPSBNYXRoLm1heChsZXZlbCwgX2dldE1heExldmVsKGNoaWxkcmVuW2ldKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhY2N1bXVsYXRvcltub2RlSWRdID0gbGV2ZWw7XG4gICAgICByZXR1cm4gbGV2ZWw7XG4gICAgfTtcblxuICAgIHJldHVybiBfZ2V0TWF4TGV2ZWwobm9kZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVBXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZUJcbiAgICovXG4gIGxldmVsRG93bnN0cmVhbShub2RlQSwgbm9kZUIpIHtcbiAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUIuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHNldCBpbml0aWFsIGxldmVsXG4gICAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUEuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5sZXZlbHNbbm9kZUEuaWRdID0gMDtcbiAgICAgIH1cbiAgICAgIC8vIHNldCBsZXZlbFxuICAgICAgdGhpcy5sZXZlbHNbbm9kZUIuaWRdID0gdGhpcy5sZXZlbHNbbm9kZUEuaWRdICsgMTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU21hbGwgdXRpbCBtZXRob2QgdG8gc2V0IHRoZSBtaW5pbXVtIGxldmVscyBvZiB0aGUgbm9kZXMgdG8gemVyby5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzXG4gICAqL1xuICBzZXRNaW5MZXZlbFRvWmVybyhub2Rlcykge1xuICAgIGxldCBtaW5MZXZlbCA9IDFlOTtcbiAgICAvLyBnZXQgdGhlIG1pbmltdW0gbGV2ZWxcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbWluTGV2ZWwgPSBNYXRoLm1pbih0aGlzLmxldmVsc1tub2RlSWRdLCBtaW5MZXZlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzdWJ0cmFjdCB0aGUgbWluaW11bSBmcm9tIHRoZSBzZXQgc28gd2UgaGF2ZSBhIHJhbmdlIHN0YXJ0aW5nIGZyb20gMFxuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmICh0aGlzLmxldmVsc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmxldmVsc1tub2RlSWRdIC09IG1pbkxldmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWluIGFuZCBtYXggeHktY29vcmRpbmF0ZXMgb2YgYSBnaXZlbiB0cmVlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBub2Rlc1xuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICogQHJldHVybnMge3ttaW5feDogbnVtYmVyLCBtYXhfeDogbnVtYmVyLCBtaW5feTogbnVtYmVyLCBtYXhfeTogbnVtYmVyfX1cbiAgICovXG4gIGdldFRyZWVTaXplKG5vZGVzLCBpbmRleCkge1xuICAgIGxldCBtaW5feCA9IDFlOTtcbiAgICBsZXQgbWF4X3ggPSAtMWU5O1xuICAgIGxldCBtaW5feSA9IDFlOTtcbiAgICBsZXQgbWF4X3kgPSAtMWU5O1xuXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy50cmVlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnRyZWVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmICh0aGlzLnRyZWVzW25vZGVJZF0gPT09IGluZGV4KSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25vZGVJZF07XG4gICAgICAgICAgbWluX3ggPSBNYXRoLm1pbihub2RlLngsIG1pbl94KTtcbiAgICAgICAgICBtYXhfeCA9IE1hdGgubWF4KG5vZGUueCwgbWF4X3gpO1xuICAgICAgICAgIG1pbl95ID0gTWF0aC5taW4obm9kZS55LCBtaW5feSk7XG4gICAgICAgICAgbWF4X3kgPSBNYXRoLm1heChub2RlLnksIG1heF95KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtaW5feDogbWluX3gsXG4gICAgICBtYXhfeDogbWF4X3gsXG4gICAgICBtaW5feTogbWluX3ksXG4gICAgICBtYXhfeTogbWF4X3ksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gbm9kZXMgaGF2ZSB0aGUgc2FtZSBwYXJlbnQocylcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlMVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSB0d28gbm9kZXMgaGF2ZSBhIHNhbWUgYW5jZXN0b3Igbm9kZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBoYXNTYW1lUGFyZW50KG5vZGUxLCBub2RlMikge1xuICAgIGNvbnN0IHBhcmVudHMxID0gdGhpcy5wYXJlbnRSZWZlcmVuY2Vbbm9kZTEuaWRdO1xuICAgIGNvbnN0IHBhcmVudHMyID0gdGhpcy5wYXJlbnRSZWZlcmVuY2Vbbm9kZTIuaWRdO1xuICAgIGlmIChwYXJlbnRzMSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudHMyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudHMxLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhcmVudHMyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChwYXJlbnRzMVtpXSA9PSBwYXJlbnRzMltqXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gbm9kZXMgYXJlIGluIHRoZSBzYW1lIHRyZWUuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZTFcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlMlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGlzIGlzIHNvLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGluU2FtZVN1Yk5ldHdvcmsobm9kZTEsIG5vZGUyKSB7XG4gICAgcmV0dXJuIHRoaXMudHJlZXNbbm9kZTEuaWRdID09PSB0aGlzLnRyZWVzW25vZGUyLmlkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBsaXN0IG9mIHRoZSBkaXN0aW5jdCBsZXZlbHMgaW4gdGhlIGN1cnJlbnQgbmV0d29ya1xuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXRMZXZlbHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5vZGUgdG8gdGhlIG9yZGVyaW5nIHBlciBsZXZlbFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXG4gICAqL1xuICBhZGRUb09yZGVyaW5nKG5vZGUsIGxldmVsKSB7XG4gICAgaWYgKHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdID0gW107XG4gICAgfVxuXG4gICAgbGV0IGlzUHJlc2VudCA9IGZhbHNlO1xuICAgIGNvbnN0IGN1ckxldmVsID0gdGhpcy5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF07XG4gICAgZm9yIChjb25zdCBuIGluIGN1ckxldmVsKSB7XG4gICAgICAvL2lmIChjdXJMZXZlbFtuXS5pZCA9PT0gbm9kZS5pZCkge1xuICAgICAgaWYgKGN1ckxldmVsW25dID09PSBub2RlKSB7XG4gICAgICAgIGlzUHJlc2VudCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNQcmVzZW50KSB7XG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXS5wdXNoKG5vZGUpO1xuICAgICAgdGhpcy5kaXN0cmlidXRpb25JbmRleFtub2RlLmlkXSA9XG4gICAgICAgIHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdLmxlbmd0aCAtIDE7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhlIExheW91dCBFbmdpbmVcbiAqL1xuY2xhc3MgTGF5b3V0RW5naW5lIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5KSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhbHdheXMgaXMgc29tZSBSTkcgYmVjYXVzZSB0aGUgc2V0T3B0aW9ucyBtZXRob2Qgd29uJ3RcbiAgICAvLyBzZXQgaXQgdW5sZXNzIHRoZXJlJ3MgYSBzZWVkIGZvciBpdC5cbiAgICB0aGlzLl9yZXNldFJORyhNYXRoLnJhbmRvbSgpICsgXCI6XCIgKyBEYXRlLm5vdygpKTtcblxuICAgIHRoaXMuc2V0UGh5c2ljcyA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMub3B0aW9uc0JhY2t1cCA9IHsgcGh5c2ljczoge30gfTtcblxuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICByYW5kb21TZWVkOiB1bmRlZmluZWQsXG4gICAgICBpbXByb3ZlZExheW91dDogdHJ1ZSxcbiAgICAgIGNsdXN0ZXJUaHJlc2hvbGQ6IDE1MCxcbiAgICAgIGhpZXJhcmNoaWNhbDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbGV2ZWxTZXBhcmF0aW9uOiAxNTAsXG4gICAgICAgIG5vZGVTcGFjaW5nOiAxMDAsXG4gICAgICAgIHRyZWVTcGFjaW5nOiAyMDAsXG4gICAgICAgIGJsb2NrU2hpZnRpbmc6IHRydWUsXG4gICAgICAgIGVkZ2VNaW5pbWl6YXRpb246IHRydWUsXG4gICAgICAgIHBhcmVudENlbnRyYWxpemF0aW9uOiB0cnVlLFxuICAgICAgICBkaXJlY3Rpb246IFwiVURcIiwgLy8gVUQsIERVLCBMUiwgUkxcbiAgICAgICAgc29ydE1ldGhvZDogXCJodWJzaXplXCIsIC8vIGh1YnNpemUsIGRpcmVjdGVkXG4gICAgICB9LFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YUNoYW5nZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zZXR1cEhpZXJhcmNoaWNhbExheW91dCgpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFMb2FkZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXROZXR3b3JrKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVzZXRIaWVyYXJjaGljYWxMYXlvdXRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zZXR1cEhpZXJhcmNoaWNhbExheW91dCgpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmVuYWJsZWQgIT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IHRoZSB0eXBlIG9mIHN0YXRpYyBzbW9vdGggY3VydmUgaW4gY2FzZSBpdCBpcyByZXF1aXJlZFxuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZGlyZWN0aW9uLmN1cnZlVHlwZSgpO1xuXG4gICAgICAvLyBmb3JjZSBhbGwgZWRnZXMgaW50byBzdGF0aWMgc21vb3RoIGN1cnZlcy5cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZm9yY2VEaXNhYmxlRHluYW1pY0N1cnZlc1wiLCB0eXBlLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGFsbE9wdGlvbnNcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucywgYWxsT3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGhpZXJhcmNoaWNhbCA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWw7XG4gICAgICBjb25zdCBwcmV2SGllcmFyY2hpY2FsU3RhdGUgPSBoaWVyYXJjaGljYWwuZW5hYmxlZDtcbiAgICAgIHNlbGVjdGl2ZURlZXBFeHRlbmQoXG4gICAgICAgIFtcInJhbmRvbVNlZWRcIiwgXCJpbXByb3ZlZExheW91dFwiLCBcImNsdXN0ZXJUaHJlc2hvbGRcIl0sXG4gICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMsIFwiaGllcmFyY2hpY2FsXCIpO1xuXG4gICAgICBpZiAob3B0aW9ucy5yYW5kb21TZWVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fcmVzZXRSTkcob3B0aW9ucy5yYW5kb21TZWVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhpZXJhcmNoaWNhbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChwcmV2SGllcmFyY2hpY2FsU3RhdGUgPT09IHRydWUpIHtcbiAgICAgICAgICAvLyByZWZyZXNoIHRoZSBvdmVycmlkZGVuIG9wdGlvbnMgZm9yIG5vZGVzIGFuZCBlZGdlcy5cbiAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVmcmVzaFwiLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgbGV2ZWwgc2VwYXJhdGlvbiBpcyB0aGUgcmlnaHQgd2F5IHVwXG4gICAgICAgIGlmIChcbiAgICAgICAgICBoaWVyYXJjaGljYWwuZGlyZWN0aW9uID09PSBcIlJMXCIgfHxcbiAgICAgICAgICBoaWVyYXJjaGljYWwuZGlyZWN0aW9uID09PSBcIkRVXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gPiAwKSB7XG4gICAgICAgICAgICBoaWVyYXJjaGljYWwubGV2ZWxTZXBhcmF0aW9uICo9IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiA8IDApIHtcbiAgICAgICAgICAgIGhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gKj0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXREaXJlY3Rpb25TdHJhdGVneSgpO1xuXG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVzZXRIaWVyYXJjaGljYWxMYXlvdXRcIik7XG4gICAgICAgIC8vIGJlY2F1c2UgdGhlIGhpZXJhcmNoaWNhbCBzeXN0ZW0gbmVlZHMgaXQncyBvd24gcGh5c2ljcyBhbmQgc21vb3RoIGN1cnZlIHNldHRpbmdzLFxuICAgICAgICAvLyB3ZSBhZGFwdCB0aGUgb3RoZXIgb3B0aW9ucyBpZiBuZWVkZWQuXG4gICAgICAgIHJldHVybiB0aGlzLmFkYXB0QWxsT3B0aW9uc0ZvckhpZXJhcmNoaWNhbExheW91dChhbGxPcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcmV2SGllcmFyY2hpY2FsU3RhdGUgPT09IHRydWUpIHtcbiAgICAgICAgICAvLyByZWZyZXNoIHRoZSBvdmVycmlkZGVuIG9wdGlvbnMgZm9yIG5vZGVzIGFuZCBlZGdlcy5cbiAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVmcmVzaFwiKTtcbiAgICAgICAgICByZXR1cm4gZGVlcEV4dGVuZChhbGxPcHRpb25zLCB0aGlzLm9wdGlvbnNCYWNrdXApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhbGxPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRoIGdpdmVuIHNlZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBzZWVkIC0gVGhlIHNlZWQgdGhhdCB3aWxsIGJlIGZvcndhcmRlZCB0aGUgdGhlIFJORy5cbiAgICovXG4gIF9yZXNldFJORyhzZWVkKSB7XG4gICAgdGhpcy5pbml0aWFsUmFuZG9tU2VlZCA9IHNlZWQ7XG4gICAgdGhpcy5fcm5nID0gQWxlYSh0aGlzLmluaXRpYWxSYW5kb21TZWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYWxsT3B0aW9uc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgYWRhcHRBbGxPcHRpb25zRm9ySGllcmFyY2hpY2FsTGF5b3V0KGFsbE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBiYWNrdXBQaHlzaWNzID0gdGhpcy5vcHRpb25zQmFja3VwLnBoeXNpY3M7XG5cbiAgICAgIC8vIHNldCB0aGUgcGh5c2ljc1xuICAgICAgaWYgKGFsbE9wdGlvbnMucGh5c2ljcyA9PT0gdW5kZWZpbmVkIHx8IGFsbE9wdGlvbnMucGh5c2ljcyA9PT0gdHJ1ZSkge1xuICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3MgPSB7XG4gICAgICAgICAgZW5hYmxlZDpcbiAgICAgICAgICAgIGJhY2t1cFBoeXNpY3MuZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGJhY2t1cFBoeXNpY3MuZW5hYmxlZCxcbiAgICAgICAgICBzb2x2ZXI6IFwiaGllcmFyY2hpY2FsUmVwdWxzaW9uXCIsXG4gICAgICAgIH07XG4gICAgICAgIGJhY2t1cFBoeXNpY3MuZW5hYmxlZCA9XG4gICAgICAgICAgYmFja3VwUGh5c2ljcy5lbmFibGVkID09PSB1bmRlZmluZWQgPyB0cnVlIDogYmFja3VwUGh5c2ljcy5lbmFibGVkO1xuICAgICAgICBiYWNrdXBQaHlzaWNzLnNvbHZlciA9IGJhY2t1cFBoeXNpY3Muc29sdmVyIHx8IFwiYmFybmVzSHV0XCI7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhbGxPcHRpb25zLnBoeXNpY3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgYmFja3VwUGh5c2ljcy5lbmFibGVkID1cbiAgICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3MuZW5hYmxlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgIDogYWxsT3B0aW9ucy5waHlzaWNzLmVuYWJsZWQ7XG4gICAgICAgIGJhY2t1cFBoeXNpY3Muc29sdmVyID0gYWxsT3B0aW9ucy5waHlzaWNzLnNvbHZlciB8fCBcImJhcm5lc0h1dFwiO1xuICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3Muc29sdmVyID0gXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIjtcbiAgICAgIH0gZWxzZSBpZiAoYWxsT3B0aW9ucy5waHlzaWNzICE9PSBmYWxzZSkge1xuICAgICAgICBiYWNrdXBQaHlzaWNzLnNvbHZlciA9IFwiYmFybmVzSHV0XCI7XG4gICAgICAgIGFsbE9wdGlvbnMucGh5c2ljcyA9IHsgc29sdmVyOiBcImhpZXJhcmNoaWNhbFJlcHVsc2lvblwiIH07XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCB0aGUgdHlwZSBvZiBzdGF0aWMgc21vb3RoIGN1cnZlIGluIGNhc2UgaXQgaXMgcmVxdWlyZWRcbiAgICAgIGxldCB0eXBlID0gdGhpcy5kaXJlY3Rpb24uY3VydmVUeXBlKCk7XG5cbiAgICAgIC8vIGRpc2FibGUgc21vb3RoIGN1cnZlcyBpZiBub3RoaW5nIGlzIGRlZmluZWQuIElmIHNtb290aCBjdXJ2ZXMgaGF2ZSBiZWVuIHR1cm5lZCBvbixcbiAgICAgIC8vIHR1cm4gdGhlbSBpbnRvIHN0YXRpYyBzbW9vdGggY3VydmVzLlxuICAgICAgaWYgKGFsbE9wdGlvbnMuZWRnZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7XG4gICAgICAgICAgc21vb3RoOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IFwiZHluYW1pY1wiIH0sXG4gICAgICAgIH07XG4gICAgICAgIGFsbE9wdGlvbnMuZWRnZXMgPSB7IHNtb290aDogZmFsc2UgfTtcbiAgICAgIH0gZWxzZSBpZiAoYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7XG4gICAgICAgICAgc21vb3RoOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IFwiZHluYW1pY1wiIH0sXG4gICAgICAgIH07XG4gICAgICAgIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0JhY2t1cC5lZGdlcyA9IHsgc21vb3RoOiBhbGxPcHRpb25zLmVkZ2VzLnNtb290aCB9O1xuICAgICAgICAgIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID0ge1xuICAgICAgICAgICAgZW5hYmxlZDogYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGgsXG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc21vb3RoID0gYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGg7XG5cbiAgICAgICAgICAvLyBhbGxvdyBjdXN0b20gdHlwZXMgZXhjZXB0IGZvciBkeW5hbWljXG4gICAgICAgICAgaWYgKHNtb290aC50eXBlICE9PSB1bmRlZmluZWQgJiYgc21vb3RoLnR5cGUgIT09IFwiZHluYW1pY1wiKSB7XG4gICAgICAgICAgICB0eXBlID0gc21vb3RoLnR5cGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVE9ETzogdGhpcyBpcyBvcHRpb25zIG1lcmdpbmc7IHNlZSBpZiB0aGUgc3RhbmRhcmQgcm91dGluZXMgY2FuIGJlIHVzZWQgaGVyZS5cbiAgICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7XG4gICAgICAgICAgICBzbW9vdGg6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogc21vb3RoLmVuYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBzbW9vdGguZW5hYmxlZCxcbiAgICAgICAgICAgICAgdHlwZTogc21vb3RoLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiZHluYW1pY1wiIDogc21vb3RoLnR5cGUsXG4gICAgICAgICAgICAgIHJvdW5kbmVzczpcbiAgICAgICAgICAgICAgICBzbW9vdGgucm91bmRuZXNzID09PSB1bmRlZmluZWQgPyAwLjUgOiBzbW9vdGgucm91bmRuZXNzLFxuICAgICAgICAgICAgICBmb3JjZURpcmVjdGlvbjpcbiAgICAgICAgICAgICAgICBzbW9vdGguZm9yY2VEaXJlY3Rpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgICAgOiBzbW9vdGguZm9yY2VEaXJlY3Rpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyBOT1RFOiBDb3B5aW5nIGFuIG9iamVjdCB0byBzZWxmOyB0aGlzIGlzIGJhc2ljYWxseSBzZXR0aW5nIGRlZmF1bHRzIGZvciB1bmRlZmluZWQgdmFyaWFibGVzXG4gICAgICAgICAgYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGggPSB7XG4gICAgICAgICAgICBlbmFibGVkOiBzbW9vdGguZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHNtb290aC5lbmFibGVkLFxuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIHJvdW5kbmVzczogc21vb3RoLnJvdW5kbmVzcyA9PT0gdW5kZWZpbmVkID8gMC41IDogc21vb3RoLnJvdW5kbmVzcyxcbiAgICAgICAgICAgIGZvcmNlRGlyZWN0aW9uOlxuICAgICAgICAgICAgICBzbW9vdGguZm9yY2VEaXJlY3Rpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6IHNtb290aC5mb3JjZURpcmVjdGlvbixcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEZvcmNlIGFsbCBlZGdlcyBpbnRvIHN0YXRpYyBzbW9vdGggY3VydmVzLlxuICAgICAgLy8gT25seSBhcHBsaWVzIHRvIGVkZ2VzIHRoYXQgZG8gbm90IHVzZSB0aGUgZ2xvYmFsIG9wdGlvbnMgZm9yIHNtb290aC5cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZm9yY2VEaXNhYmxlRHluYW1pY0N1cnZlc1wiLCB0eXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWxsT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gbm9kZXNBcnJheVxuICAgKi9cbiAgcG9zaXRpb25Jbml0aWFsbHkobm9kZXNBcnJheSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmVuYWJsZWQgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuX3Jlc2V0Uk5HKHRoaXMuaW5pdGlhbFJhbmRvbVNlZWQpO1xuICAgICAgY29uc3QgcmFkaXVzID0gbm9kZXNBcnJheS5sZW5ndGggKyA1MDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlID0gbm9kZXNBcnJheVtpXTtcbiAgICAgICAgY29uc3QgYW5nbGUgPSAyICogTWF0aC5QSSAqIHRoaXMuX3JuZygpO1xuICAgICAgICBpZiAobm9kZS54ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub2RlLnggPSByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUueSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbm9kZS55ID0gcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBLYW1hZGEgS2F3YWkgdG8gcG9zaXRpb24gbm9kZXMuIFRoaXMgaXMgcXVpdGUgYSBoZWF2eSBhbGdvcml0aG0gc28gaWYgdGhlcmUgYXJlIGEgbG90IG9mIG5vZGVzIHdlXG4gICAqIGNsdXN0ZXIgdGhlbSBmaXJzdCB0byByZWR1Y2UgdGhlIGFtb3VudC5cbiAgICovXG4gIGxheW91dE5ldHdvcmsoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkICE9PSB0cnVlICYmXG4gICAgICB0aGlzLm9wdGlvbnMuaW1wcm92ZWRMYXlvdXQgPT09IHRydWVcbiAgICApIHtcbiAgICAgIGNvbnN0IGluZGljZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG5cbiAgICAgIC8vIGZpcnN0IGNoZWNrIGlmIHdlIHNob3VsZCBLYW1hZGEgS2F3YWkgdG8gbGF5b3V0LiBUaGUgdGhyZXNob2xkIGlzIGlmIGxlc3MgdGhhbiBoYWxmIG9mIHRoZSB2aXNpYmxlXG4gICAgICAvLyBub2RlcyBoYXZlIHByZWRlZmluZWQgcG9zaXRpb25zIHdlIHVzZSB0aGlzLlxuICAgICAgbGV0IHBvc2l0aW9uRGVmaW5lZCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpbmRpY2VzW2ldXTtcbiAgICAgICAgaWYgKG5vZGUucHJlZGVmaW5lZFBvc2l0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgcG9zaXRpb25EZWZpbmVkICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gaWYgbGVzcyB0aGFuIGhhbGYgb2YgdGhlIG5vZGVzIGhhdmUgYSBwcmVkZWZpbmVkIHBvc2l0aW9uIHdlIGNvbnRpbnVlXG4gICAgICBpZiAocG9zaXRpb25EZWZpbmVkIDwgMC41ICogaW5kaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgTUFYX0xFVkVMUyA9IDEwO1xuICAgICAgICBsZXQgbGV2ZWwgPSAwO1xuICAgICAgICBjb25zdCBjbHVzdGVyVGhyZXNob2xkID0gdGhpcy5vcHRpb25zLmNsdXN0ZXJUaHJlc2hvbGQ7XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gRGVmaW5lIHRoZSBvcHRpb25zIGZvciB0aGUgaGlkZGVuIGNsdXN0ZXIgbm9kZXNcbiAgICAgICAgLy8gVGhlc2Ugb3B0aW9ucyBkb24ndCBwcm9wYWdhdGUgb3V0c2lkZSB0aGUgY2x1c3RlcmluZyBwaGFzZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gU29tZSBvcHRpb25zIGFyZSBleHBsaWNpdGx5IGRpc2FibGVkLCBiZWNhdXNlIHRoZXkgbWF5IGJlIHNldCBpbiBncm91cCBvciBkZWZhdWx0IG5vZGUgb3B0aW9ucy5cbiAgICAgICAgLy8gVGhlIGNsdXN0ZXJzIGFyZSBuZXZlciBkaXNwbGF5ZWQsIHNvIG1vc3QgZXhwbGljaXQgc2V0dGluZ3MgaGVyZSBzZXJ2ZSBhcyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgZXhwbGljaXQgc2V0dGluZyBvZiAnc2hhcGUnIGlzIHRvIGF2b2lkIGBzaGFwZTogJ2ltYWdlJ2A7IGltYWdlcyBhcmUgbm90IHBhc3NlZCB0byB0aGUgaGlkZGVuXG4gICAgICAgIC8vIGNsdXN0ZXIgbm9kZXMsIGxlYWRpbmcgdG8gYW4gZXhjZXB0aW9uIG9uIGNyZWF0aW9uLlxuICAgICAgICAvL1xuICAgICAgICAvLyBBbGwgc2V0dGluZ3MgaGVyZSBhcmUgcGVyZm9ybWFuY2UgcmVsYXRlZCwgZXhjZXB0IHdoZW4gbm90ZWQgb3RoZXJ3aXNlLlxuICAgICAgICAvL1xuICAgICAgICBjb25zdCBjbHVzdGVyT3B0aW9ucyA9IHtcbiAgICAgICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNoYXBlOiBcImVsbGlwc2VcIiwgLy8gQnVnZml4OiBhdm9pZCB0eXBlICdpbWFnZScsIG5vIGltYWdlcyBzdXBwbGllZFxuICAgICAgICAgICAgbGFiZWw6IFwiXCIsIC8vIGF2b2lkIGxhYmVsIGhhbmRsaW5nXG4gICAgICAgICAgICBncm91cDogXCJcIiwgLy8gYXZvaWQgZ3JvdXAgaGFuZGxpbmdcbiAgICAgICAgICAgIGZvbnQ6IHsgbXVsdGk6IGZhbHNlIH0sIC8vIGF2b2lkIGZvbnQgcHJvcGFnYXRpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFiZWw6IFwiXCIsIC8vIGF2b2lkIGxhYmVsIGhhbmRsaW5nXG4gICAgICAgICAgICBmb250OiB7IG11bHRpOiBmYWxzZSB9LCAvLyBhdm9pZCBmb250IHByb3BhZ2F0aW9uXG4gICAgICAgICAgICBzbW9vdGg6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsIC8vIGF2b2lkIGRyYXdpbmcgcGVuYWx0eSBmb3IgY29tcGxleCBlZGdlc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSBhIGxvdCBvZiBub2Rlcywgd2UgY2x1c3RlciBiZWZvcmUgd2UgcnVuIHRoZSBhbGdvcml0aG0uXG4gICAgICAgIC8vIE5PVEU6IHRoaXMgcGFydCBmYWlscyB0byBmaW5kIGNsdXN0ZXJzIGZvciBsYXJnZSBzY2FsZS1mcmVlIG5ldHdvcmtzLCB3aGljaCBzaG91bGRcbiAgICAgICAgLy8gICAgICAgYmUgZWFzaWx5IGNsdXN0ZXJhYmxlLlxuICAgICAgICAvLyBUT0RPOiBleGFtaW5lIHdoeSB0aGlzIGlzIHNvXG4gICAgICAgIGlmIChpbmRpY2VzLmxlbmd0aCA+IGNsdXN0ZXJUaHJlc2hvbGQpIHtcbiAgICAgICAgICBjb25zdCBzdGFydExlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpbmRpY2VzLmxlbmd0aCA+IGNsdXN0ZXJUaHJlc2hvbGQgJiYgbGV2ZWwgPD0gTUFYX0xFVkVMUykge1xuICAgICAgICAgICAgLy9jb25zb2xlLnRpbWUoXCJjbHVzdGVyaW5nXCIpXG4gICAgICAgICAgICBsZXZlbCArPSAxO1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgbWFueSBub2RlcyB3ZSBkbyBhIGh1YnNpemUgY2x1c3RlclxuICAgICAgICAgICAgaWYgKGxldmVsICUgMyA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLmJvZHkubW9kdWxlcy5jbHVzdGVyaW5nLmNsdXN0ZXJCcmlkZ2VzKGNsdXN0ZXJPcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuYm9keS5tb2R1bGVzLmNsdXN0ZXJpbmcuY2x1c3Rlck91dGxpZXJzKGNsdXN0ZXJPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoYmVmb3JlID09IGFmdGVyICYmIGxldmVsICUgMyAhPT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLl9kZWNsdXN0ZXJBbGwoKTtcbiAgICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9sYXlvdXRGYWlsZWRcIik7XG4gICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgICAgICBcIlRoaXMgbmV0d29yayBjb3VsZCBub3QgYmUgcG9zaXRpb25lZCBieSB0aGlzIHZlcnNpb24gb2YgdGhlIGltcHJvdmVkIGxheW91dCBhbGdvcml0aG0uXCIgK1xuICAgICAgICAgICAgICAgICAgXCIgUGxlYXNlIGRpc2FibGUgaW1wcm92ZWRMYXlvdXQgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnNvbGUudGltZUVuZChcImNsdXN0ZXJpbmdcIilcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYmVmb3JlLGxldmVsLGFmdGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGVkZ2VzXG4gICAgICAgICAgdGhpcy5ib2R5Lm1vZHVsZXMua2FtYWRhS2F3YWkuc2V0T3B0aW9ucyh7XG4gICAgICAgICAgICBzcHJpbmdMZW5ndGg6IE1hdGgubWF4KDE1MCwgMiAqIHN0YXJ0TGVuZ3RoKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGV2ZWwgPiBNQVhfTEVWRUxTKSB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgXCJUaGUgY2x1c3RlcmluZyBkaWRuJ3Qgc3VjY2VlZCB3aXRoaW4gdGhlIGFtb3VudCBvZiBpbnRlcmF0aW9ucyBhbGxvd2VkLFwiICtcbiAgICAgICAgICAgICAgXCIgcHJvZ3Jlc3Npbmcgd2l0aCBwYXJ0aWFsIHJlc3VsdC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwb3NpdGlvbiB0aGUgc3lzdGVtIGZvciB0aGVzZSBub2RlcyBhbmQgZWRnZXNcbiAgICAgICAgdGhpcy5ib2R5Lm1vZHVsZXMua2FtYWRhS2F3YWkuc29sdmUoXG4gICAgICAgICAgaW5kaWNlcyxcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZUluZGljZXMsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHNoaWZ0IHRvIGNlbnRlciBwb2ludFxuICAgICAgICB0aGlzLl9zaGlmdFRvQ2VudGVyKCk7XG5cbiAgICAgICAgLy8gcGVydHVyYiB0aGUgbm9kZXMgYSBsaXR0bGUgYml0IHRvIGZvcmNlIHRoZSBwaHlzaWNzIHRvIGtpY2sgaW5cbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gNzA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIC8vIE9ubHkgcGVydHVyYiB0aGUgbm9kZXMgdGhhdCBhcmVuJ3QgZml4ZWRcbiAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW2luZGljZXNbaV1dO1xuICAgICAgICAgIGlmIChub2RlLnByZWRlZmluZWRQb3NpdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG5vZGUueCArPSAoMC41IC0gdGhpcy5fcm5nKCkpICogb2Zmc2V0O1xuICAgICAgICAgICAgbm9kZS55ICs9ICgwLjUgLSB0aGlzLl9ybmcoKSkgKiBvZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW5jbHVzdGVyIGFsbCBjbHVzdGVyc1xuICAgICAgICB0aGlzLl9kZWNsdXN0ZXJBbGwoKTtcblxuICAgICAgICAvLyByZXBvc2l0aW9uIGFsbCBiZXppZXIgbm9kZXMuXG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVwb3NpdGlvbkJlemllck5vZGVzXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGFsbCB0aGUgbm9kZXMgdG93YXJkcyB0byB0aGUgY2VudGVyIHNvIGdyYXZpdGF0aW9uYWwgcHVsbCB3aWwgbm90IG1vdmUgdGhlIG5vZGVzIGF3YXkgZnJvbSB2aWV3XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hpZnRUb0NlbnRlcigpIHtcbiAgICBjb25zdCByYW5nZSA9IE5ldHdvcmtVdGlsLmdldFJhbmdlQ29yZShcbiAgICAgIHRoaXMuYm9keS5ub2RlcyxcbiAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlc1xuICAgICk7XG4gICAgY29uc3QgY2VudGVyID0gTmV0d29ya1V0aWwuZmluZENlbnRlcihyYW5nZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldXTtcbiAgICAgIG5vZGUueCAtPSBjZW50ZXIueDtcbiAgICAgIG5vZGUueSAtPSBjZW50ZXIueTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyBhbGwgY2x1c3RlcnNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZWNsdXN0ZXJBbGwoKSB7XG4gICAgbGV0IGNsdXN0ZXJzUHJlc2VudCA9IHRydWU7XG4gICAgd2hpbGUgKGNsdXN0ZXJzUHJlc2VudCA9PT0gdHJ1ZSkge1xuICAgICAgY2x1c3RlcnNQcmVzZW50ID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV0uaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgY2x1c3RlcnNQcmVzZW50ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmJvZHkubW9kdWxlcy5jbHVzdGVyaW5nLm9wZW5DbHVzdGVyKFxuICAgICAgICAgICAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjbHVzdGVyc1ByZXNlbnQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcnwqfVxuICAgKi9cbiAgZ2V0U2VlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsUmFuZG9tU2VlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGxheW91dCB0aGUgbm9kZXMgaW4gYSBoaWVyYXJjaGljYWwgd2F5LlxuICAgKiBJdCBjaGVja3MgaWYgdGhlIG5vZGUgZGV0YWlscyBhcmUgc3VwcGxpZWQgY29ycmVjdGx5XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXR1cEhpZXJhcmNoaWNhbExheW91dCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICAvLyBnZXQgdGhlIHNpemUgb2YgdGhlIGxhcmdlc3QgaHVicyBhbmQgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIGRlZmluZWQgYSBsZXZlbCBmb3IgYSBub2RlLlxuICAgICAgbGV0IG5vZGUsIG5vZGVJZDtcbiAgICAgIGxldCBkZWZpbmVkTGV2ZWwgPSBmYWxzZTtcbiAgICAgIGxldCB1bmRlZmluZWRMZXZlbCA9IGZhbHNlO1xuICAgICAgdGhpcy5sYXN0Tm9kZU9uTGV2ZWwgPSB7fTtcbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsID0gbmV3IEhpZXJhcmNoaWNhbFN0YXR1cygpO1xuXG4gICAgICBmb3IgKG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgaWYgKG5vZGUub3B0aW9ucy5sZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkZWZpbmVkTGV2ZWwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGVJZF0gPSBub2RlLm9wdGlvbnMubGV2ZWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuZGVmaW5lZExldmVsID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHVzZXIgZGVmaW5lZCBzb21lIGxldmVscyBidXQgbm90IGFsbCwgYWxlcnQgYW5kIHJ1biB3aXRob3V0IGhpZXJhcmNoaWNhbCBsYXlvdXRcbiAgICAgIGlmICh1bmRlZmluZWRMZXZlbCA9PT0gdHJ1ZSAmJiBkZWZpbmVkTGV2ZWwgPT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVG8gdXNlIHRoZSBoaWVyYXJjaGljYWwgbGF5b3V0LCBub2RlcyByZXF1aXJlIGVpdGhlciBubyBwcmVkZWZpbmVkIGxldmVsc1wiICtcbiAgICAgICAgICAgIFwiIG9yIGxldmVscyBoYXZlIHRvIGJlIGRlZmluZWQgZm9yIGFsbCBub2Rlcy5cIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmaW5lIGxldmVscyBpZiB1bmRlZmluZWQgYnkgdGhlIHVzZXJzLiBCYXNlZCBvbiBodWJzaXplLlxuICAgICAgICBpZiAodW5kZWZpbmVkTGV2ZWwgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBzb3J0TWV0aG9kID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5zb3J0TWV0aG9kO1xuICAgICAgICAgIGlmIChzb3J0TWV0aG9kID09PSBcImh1YnNpemVcIikge1xuICAgICAgICAgICAgdGhpcy5fZGV0ZXJtaW5lTGV2ZWxzQnlIdWJzaXplKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzb3J0TWV0aG9kID09PSBcImRpcmVjdGVkXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RldGVybWluZUxldmVsc0RpcmVjdGVkKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzb3J0TWV0aG9kID09PSBcImN1c3RvbVwiKSB7XG4gICAgICAgICAgICB0aGlzLl9kZXRlcm1pbmVMZXZlbHNDdXN0b21DYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZhbGxiYWNrIGZvciBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgbm9kZXMgYnV0IG5vIGVkZ2VzXG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5lbnN1cmVMZXZlbChub2RlSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBub2RlcyBwZXIgbGV2ZWwuXG4gICAgICAgIGNvbnN0IGRpc3RyaWJ1dGlvbiA9IHRoaXMuX2dldERpc3RyaWJ1dGlvbigpO1xuXG4gICAgICAgIC8vIGdldCB0aGUgcGFyZW50IGNoaWxkcmVuIHJlbGF0aW9ucy5cbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVNYXAoKTtcblxuICAgICAgICAvLyBwbGFjZSB0aGUgbm9kZXMgb24gdGhlIGNhbnZhcy5cbiAgICAgICAgdGhpcy5fcGxhY2VOb2Rlc0J5SGllcmFyY2h5KGRpc3RyaWJ1dGlvbik7XG5cbiAgICAgICAgLy8gY29uZGVuc2UgdGhlIHdoaXRlc3BhY2UuXG4gICAgICAgIHRoaXMuX2NvbmRlbnNlSGllcmFyY2h5KCk7XG5cbiAgICAgICAgLy8gc2hpZnQgdG8gY2VudGVyIHNvIGdyYXZpdHkgZG9lcyBub3QgaGF2ZSB0byBkbyBtdWNoXG4gICAgICAgIHRoaXMuX3NoaWZ0VG9DZW50ZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb25kZW5zZUhpZXJhcmNoeSgpIHtcbiAgICAvLyBHbG9iYWwgdmFyIGluIHRoaXMgc2NvcGUgdG8gZGVmaW5lIHdoZW4gdGhlIG1vdmVtZW50IGhhcyBzdG9wcGVkLlxuICAgIGxldCBzdGlsbFNoaWZ0aW5nID0gZmFsc2U7XG4gICAgY29uc3QgYnJhbmNoZXMgPSB7fTtcbiAgICAvLyBmaXJzdCB3ZSBoYXZlIHNvbWUgbWV0aG9kcyB0byBoZWxwIHNoaWZ0aW5nIHRyZWVzIGFyb3VuZC5cbiAgICAvLyB0aGUgbWFpbiBtZXRob2QgdG8gc2hpZnQgdGhlIHRyZWVzXG4gICAgY29uc3Qgc2hpZnRUcmVlcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHRyZWVTaXplcyA9IGdldFRyZWVTaXplcygpO1xuICAgICAgbGV0IHNoaWZ0QnkgPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmVlU2l6ZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRpZmYgPSB0cmVlU2l6ZXNbaV0ubWF4IC0gdHJlZVNpemVzW2kgKyAxXS5taW47XG4gICAgICAgIHNoaWZ0QnkgKz0gZGlmZiArIHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwudHJlZVNwYWNpbmc7XG4gICAgICAgIHNoaWZ0VHJlZShpICsgMSwgc2hpZnRCeSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHNoaWZ0IGEgc2luZ2xlIHRyZWUgYnkgYW4gb2Zmc2V0XG4gICAgY29uc3Qgc2hpZnRUcmVlID0gKGluZGV4LCBvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHRyZWVzID0gdGhpcy5oaWVyYXJjaGljYWwudHJlZXM7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRyZWVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodHJlZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBpZiAodHJlZXNbbm9kZUlkXSA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNoaWZ0KG5vZGVJZCwgb2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gZ2V0IHRoZSB3aWR0aCBvZiBhbGwgdHJlZXNcbiAgICBjb25zdCBnZXRUcmVlU2l6ZXMgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0cmVlV2lkdGhzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaGllcmFyY2hpY2FsLm51bVRyZWVzKCk7IGkrKykge1xuICAgICAgICB0cmVlV2lkdGhzLnB1c2godGhpcy5kaXJlY3Rpb24uZ2V0VHJlZVNpemUoaSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyZWVXaWR0aHM7XG4gICAgfTtcblxuICAgIC8vIGdldCBhIG1hcCBvZiBhbGwgbm9kZXMgaW4gdGhpcyBicmFuY2hcbiAgICBjb25zdCBnZXRCcmFuY2hOb2RlcyA9IChzb3VyY2UsIG1hcCkgPT4ge1xuICAgICAgaWYgKG1hcFtzb3VyY2UuaWRdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG1hcFtzb3VyY2UuaWRdID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLmhpZXJhcmNoaWNhbC5jaGlsZHJlblJlZmVyZW5jZVtzb3VyY2UuaWRdKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5oaWVyYXJjaGljYWwuY2hpbGRyZW5SZWZlcmVuY2Vbc291cmNlLmlkXTtcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBnZXRCcmFuY2hOb2Rlcyh0aGlzLmJvZHkubm9kZXNbY2hpbGRyZW5baV1dLCBtYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBnZXQgYSBtaW4gbWF4IHdpZHRoIGFzIHdlbGwgYXMgdGhlIG1heGltdW0gbW92ZW1lbnQgc3BhY2UgaXQgaGFzIG9uIGVpdGhlciBzaWRlc1xuICAgIC8vIHdlIHVzZSBtaW4gbWF4IHRlcm1pbm9sb2d5IGJlY2F1c2Ugd2lkdGggYW5kIGhlaWdodCBjYW4gaW50ZXJjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGxheW91dFxuICAgIGNvbnN0IGdldEJyYW5jaEJvdW5kYXJ5ID0gKGJyYW5jaE1hcCwgbWF4TGV2ZWwgPSAxZTkpID0+IHtcbiAgICAgIGxldCBtaW5TcGFjZSA9IDFlOTtcbiAgICAgIGxldCBtYXhTcGFjZSA9IDFlOTtcbiAgICAgIGxldCBtaW4gPSAxZTk7XG4gICAgICBsZXQgbWF4ID0gLTFlOTtcbiAgICAgIGZvciAoY29uc3QgYnJhbmNoTm9kZSBpbiBicmFuY2hNYXApIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChicmFuY2hNYXAsIGJyYW5jaE5vZGUpKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1ticmFuY2hOb2RlXTtcbiAgICAgICAgICBjb25zdCBsZXZlbCA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlLmlkXTtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuXG4gICAgICAgICAgLy8gZ2V0IHRoZSBzcGFjZSBhcm91bmQgdGhlIG5vZGUuXG4gICAgICAgICAgY29uc3QgW21pblNwYWNlTm9kZSwgbWF4U3BhY2VOb2RlXSA9IHRoaXMuX2dldFNwYWNlQXJvdW5kTm9kZShcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBicmFuY2hNYXBcbiAgICAgICAgICApO1xuICAgICAgICAgIG1pblNwYWNlID0gTWF0aC5taW4obWluU3BhY2VOb2RlLCBtaW5TcGFjZSk7XG4gICAgICAgICAgbWF4U3BhY2UgPSBNYXRoLm1pbihtYXhTcGFjZU5vZGUsIG1heFNwYWNlKTtcblxuICAgICAgICAgIC8vIHRoZSB3aWR0aCBpcyBvbmx5IHJlbGV2YW50IGZvciB0aGUgbGV2ZWxzIHR3byBub2RlcyBoYXZlIGluIGNvbW1vbi4gVGhpcyBpcyB3aHkgd2UgZmlsdGVyIG9uIHRoaXMuXG4gICAgICAgICAgaWYgKGxldmVsIDw9IG1heExldmVsKSB7XG4gICAgICAgICAgICBtaW4gPSBNYXRoLm1pbihwb3NpdGlvbiwgbWluKTtcbiAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KHBvc2l0aW9uLCBtYXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gW21pbiwgbWF4LCBtaW5TcGFjZSwgbWF4U3BhY2VdO1xuICAgIH07XG5cbiAgICAvLyBjaGVjayB3aGF0IHRoZSBtYXhpbXVtIGxldmVsIGlzIHRoZXNlIG5vZGVzIGhhdmUgaW4gY29tbW9uLlxuICAgIGNvbnN0IGdldENvbGxpc2lvbkxldmVsID0gKG5vZGUxLCBub2RlMikgPT4ge1xuICAgICAgY29uc3QgbWF4TGV2ZWwxID0gdGhpcy5oaWVyYXJjaGljYWwuZ2V0TWF4TGV2ZWwobm9kZTEuaWQpO1xuICAgICAgY29uc3QgbWF4TGV2ZWwyID0gdGhpcy5oaWVyYXJjaGljYWwuZ2V0TWF4TGV2ZWwobm9kZTIuaWQpO1xuICAgICAgcmV0dXJuIE1hdGgubWluKG1heExldmVsMSwgbWF4TGV2ZWwyKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29uZGVuc2UgZWxlbWVudHMuIFRoZXNlIGNhbiBiZSBub2RlcyBvciBicmFuY2hlcyBkZXBlbmRpbmcgb24gdGhlIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBsZXZlbHNcbiAgICAgKiBAcGFyYW0geyp9IGNlbnRlclBhcmVudHNcbiAgICAgKi9cbiAgICBjb25zdCBzaGlmdEVsZW1lbnRzQ2xvc2VyID0gKGNhbGxiYWNrLCBsZXZlbHMsIGNlbnRlclBhcmVudHMpID0+IHtcbiAgICAgIGNvbnN0IGhpZXIgPSB0aGlzLmhpZXJhcmNoaWNhbDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZXZlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbGV2ZWwgPSBsZXZlbHNbaV07XG4gICAgICAgIGNvbnN0IGxldmVsTm9kZXMgPSBoaWVyLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXTtcbiAgICAgICAgaWYgKGxldmVsTm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV2ZWxOb2Rlcy5sZW5ndGggLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUxID0gbGV2ZWxOb2Rlc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUyID0gbGV2ZWxOb2Rlc1tqICsgMV07XG5cbiAgICAgICAgICAgIC8vIE5PVEU6IGxvZ2ljIG1haW50YWluZWQgYXMgaXQgd2FzOyBpZiBub2RlcyBoYXZlIHNhbWUgYW5jZXN0b3IsXG4gICAgICAgICAgICAvLyAgICAgICB0aGVuIG9mIGNvdXJzZSB0aGV5IGFyZSBpbiB0aGUgc2FtZSBzdWItbmV0d29yay5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaGllci5oYXNTYW1lUGFyZW50KG5vZGUxLCBub2RlMikgJiZcbiAgICAgICAgICAgICAgaGllci5pblNhbWVTdWJOZXR3b3JrKG5vZGUxLCBub2RlMilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhub2RlMSwgbm9kZTIsIGNlbnRlclBhcmVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBjYWxsYmFjayBmb3Igc2hpZnRpbmcgYnJhbmNoZXNcbiAgICBjb25zdCBicmFuY2hTaGlmdENhbGxiYWNrID0gKG5vZGUxLCBub2RlMiwgY2VudGVyUGFyZW50ID0gZmFsc2UpID0+IHtcbiAgICAgIC8vd2luZG93LkNBTExCQUNLUy5wdXNoKCgpID0+IHtcbiAgICAgIGNvbnN0IHBvczEgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihub2RlMSk7XG4gICAgICBjb25zdCBwb3MyID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZTIpO1xuICAgICAgY29uc3QgZGlmZkFicyA9IE1hdGguYWJzKHBvczIgLSBwb3MxKTtcbiAgICAgIGNvbnN0IG5vZGVTcGFjaW5nID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZztcbiAgICAgIC8vY29uc29sZS5sb2coXCJOT1cgQ0hFQ0tJTkc6XCIsIG5vZGUxLmlkLCBub2RlMi5pZCwgZGlmZkFicyk7XG4gICAgICBpZiAoZGlmZkFicyA+IG5vZGVTcGFjaW5nKSB7XG4gICAgICAgIGNvbnN0IGJyYW5jaE5vZGVzMSA9IHt9O1xuICAgICAgICBjb25zdCBicmFuY2hOb2RlczIgPSB7fTtcblxuICAgICAgICBnZXRCcmFuY2hOb2Rlcyhub2RlMSwgYnJhbmNoTm9kZXMxKTtcbiAgICAgICAgZ2V0QnJhbmNoTm9kZXMobm9kZTIsIGJyYW5jaE5vZGVzMik7XG5cbiAgICAgICAgLy8gY2hlY2sgdGhlIGxhcmdlc3QgZGlzdGFuY2UgYmV0d2VlbiB0aGUgYnJhbmNoZXNcbiAgICAgICAgY29uc3QgbWF4TGV2ZWwgPSBnZXRDb2xsaXNpb25MZXZlbChub2RlMSwgbm9kZTIpO1xuICAgICAgICBjb25zdCBicmFuY2hOb2RlQm91bmRhcnkxID0gZ2V0QnJhbmNoQm91bmRhcnkoYnJhbmNoTm9kZXMxLCBtYXhMZXZlbCk7XG4gICAgICAgIGNvbnN0IGJyYW5jaE5vZGVCb3VuZGFyeTIgPSBnZXRCcmFuY2hCb3VuZGFyeShicmFuY2hOb2RlczIsIG1heExldmVsKTtcbiAgICAgICAgY29uc3QgbWF4MSA9IGJyYW5jaE5vZGVCb3VuZGFyeTFbMV07XG4gICAgICAgIGNvbnN0IG1pbjIgPSBicmFuY2hOb2RlQm91bmRhcnkyWzBdO1xuICAgICAgICBjb25zdCBtaW5TcGFjZTIgPSBicmFuY2hOb2RlQm91bmRhcnkyWzJdO1xuXG4gICAgICAgIC8vY29uc29sZS5sb2cobm9kZTEuaWQsIGdldEJyYW5jaEJvdW5kYXJ5KGJyYW5jaE5vZGVzMSwgbWF4TGV2ZWwpLCBub2RlMi5pZCxcbiAgICAgICAgLy8gICAgICAgICAgICBnZXRCcmFuY2hCb3VuZGFyeShicmFuY2hOb2RlczIsIG1heExldmVsKSwgbWF4TGV2ZWwpO1xuICAgICAgICBjb25zdCBkaWZmQnJhbmNoID0gTWF0aC5hYnMobWF4MSAtIG1pbjIpO1xuICAgICAgICBpZiAoZGlmZkJyYW5jaCA+IG5vZGVTcGFjaW5nKSB7XG4gICAgICAgICAgbGV0IG9mZnNldCA9IG1heDEgLSBtaW4yICsgbm9kZVNwYWNpbmc7XG4gICAgICAgICAgaWYgKG9mZnNldCA8IC1taW5TcGFjZTIgKyBub2RlU3BhY2luZykge1xuICAgICAgICAgICAgb2Zmc2V0ID0gLW1pblNwYWNlMiArIG5vZGVTcGFjaW5nO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlJFU0VUVElORyBPRkZTRVRcIiwgbWF4MSAtIG1pbjIgKyB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nLCAtbWluU3BhY2UyLCBvZmZzZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlNISUZUSU5HXCIsIG5vZGUyLmlkLCBvZmZzZXQpO1xuICAgICAgICAgICAgdGhpcy5fc2hpZnRCbG9jayhub2RlMi5pZCwgb2Zmc2V0KTtcbiAgICAgICAgICAgIHN0aWxsU2hpZnRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoY2VudGVyUGFyZW50ID09PSB0cnVlKSB0aGlzLl9jZW50ZXJQYXJlbnQobm9kZTIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy90aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTt9KVxuICAgIH07XG5cbiAgICBjb25zdCBtaW5pbWl6ZUVkZ2VMZW5ndGggPSAoaXRlcmF0aW9ucywgbm9kZSkgPT4ge1xuICAgICAgLy93aW5kb3cuQ0FMTEJBQ0tTLnB1c2goKCkgPT4ge1xuICAgICAgLy8gIGNvbnNvbGUubG9nKFwidHNcIixub2RlLmlkKTtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGUuaWQ7XG4gICAgICBjb25zdCBhbGxFZGdlcyA9IG5vZGUuZWRnZXM7XG4gICAgICBjb25zdCBub2RlTGV2ZWwgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZS5pZF07XG5cbiAgICAgIC8vIGdhdGhlciBjb25zdGFudHNcbiAgICAgIGNvbnN0IEMyID1cbiAgICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gKlxuICAgICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbjtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGVzID0ge307XG4gICAgICBjb25zdCBhYm92ZUVkZ2VzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbEVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBhbGxFZGdlc1tpXTtcbiAgICAgICAgaWYgKGVkZ2UudG9JZCAhPSBlZGdlLmZyb21JZCkge1xuICAgICAgICAgIGNvbnN0IG90aGVyTm9kZSA9IGVkZ2UudG9JZCA9PSBub2RlSWQgPyBlZGdlLmZyb20gOiBlZGdlLnRvO1xuICAgICAgICAgIHJlZmVyZW5jZU5vZGVzW2FsbEVkZ2VzW2ldLmlkXSA9IG90aGVyTm9kZTtcbiAgICAgICAgICBpZiAodGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW290aGVyTm9kZS5pZF0gPCBub2RlTGV2ZWwpIHtcbiAgICAgICAgICAgIGFib3ZlRWRnZXMucHVzaChlZGdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZGlmZmVyZW50aWF0ZWQgc3VtIG9mIGxlbmd0aHMgYmFzZWQgb24gb25seSBtb3Zpbmcgb25lIG5vZGUgb3ZlciBvbmUgYXhpc1xuICAgICAgY29uc3QgZ2V0RnggPSAocG9pbnQsIGVkZ2VzKSA9PiB7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGVzW2VkZ2VzW2ldLmlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBhID1cbiAgICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24ocmVmZXJlbmNlTm9kZXNbZWRnZXNbaV0uaWRdKSAtIHBvaW50O1xuICAgICAgICAgICAgc3VtICs9IGEgLyBNYXRoLnNxcnQoYSAqIGEgKyBDMik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9O1xuXG4gICAgICAvLyBkb3VibHkgZGlmZmVyZW50aWF0ZWQgc3VtIG9mIGxlbmd0aHMgYmFzZWQgb24gb25seSBtb3Zpbmcgb25lIG5vZGUgb3ZlciBvbmUgYXhpc1xuICAgICAgY29uc3QgZ2V0REZ4ID0gKHBvaW50LCBlZGdlcykgPT4ge1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChyZWZlcmVuY2VOb2Rlc1tlZGdlc1tpXS5pZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYSA9XG4gICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKHJlZmVyZW5jZU5vZGVzW2VkZ2VzW2ldLmlkXSkgLSBwb2ludDtcbiAgICAgICAgICAgIHN1bSAtPSBDMiAqIE1hdGgucG93KGEgKiBhICsgQzIsIC0xLjUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VtO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZ2V0R3Vlc3MgPSAoaXRlcmF0aW9ucywgZWRnZXMpID0+IHtcbiAgICAgICAgbGV0IGd1ZXNzID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZSk7XG4gICAgICAgIC8vIE5ld3RvbidzIG1ldGhvZCBmb3Igb3B0aW1pemF0aW9uXG4gICAgICAgIGNvbnN0IGd1ZXNzTWFwID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZnggPSBnZXRGeChndWVzcywgZWRnZXMpO1xuICAgICAgICAgIGNvbnN0IGRmeCA9IGdldERGeChndWVzcywgZWRnZXMpO1xuXG4gICAgICAgICAgLy8gd2UgbGltaXQgdGhlIG1vdmVtZW50IHRvIGF2b2lkIGluc3RhYmlsaXR5LlxuICAgICAgICAgIGNvbnN0IGxpbWl0ID0gNDA7XG4gICAgICAgICAgY29uc3QgcmF0aW8gPSBNYXRoLm1heCgtbGltaXQsIE1hdGgubWluKGxpbWl0LCBNYXRoLnJvdW5kKGZ4IC8gZGZ4KSkpO1xuICAgICAgICAgIGd1ZXNzID0gZ3Vlc3MgLSByYXRpbztcbiAgICAgICAgICAvLyByZWR1Y2UgZHVwbGljYXRlc1xuICAgICAgICAgIGlmIChndWVzc01hcFtndWVzc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGd1ZXNzTWFwW2d1ZXNzXSA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGd1ZXNzO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgbW92ZUJyYW5jaCA9IChndWVzcykgPT4ge1xuICAgICAgICAvLyBwb3NpdGlvbiBub2RlIGlmIHRoZXJlIGlzIHNwYWNlXG4gICAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuXG4gICAgICAgIC8vIGNoZWNrIG1vdmFibGUgYXJlYSBvZiB0aGUgYnJhbmNoXG4gICAgICAgIGlmIChicmFuY2hlc1tub2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgYnJhbmNoTm9kZXMgPSB7fTtcbiAgICAgICAgICBnZXRCcmFuY2hOb2Rlcyhub2RlLCBicmFuY2hOb2Rlcyk7XG4gICAgICAgICAgYnJhbmNoZXNbbm9kZS5pZF0gPSBicmFuY2hOb2RlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBicmFuY2hCb3VuZGFyeSA9IGdldEJyYW5jaEJvdW5kYXJ5KGJyYW5jaGVzW25vZGUuaWRdKTtcbiAgICAgICAgY29uc3QgbWluU3BhY2VCcmFuY2ggPSBicmFuY2hCb3VuZGFyeVsyXTtcbiAgICAgICAgY29uc3QgbWF4U3BhY2VCcmFuY2ggPSBicmFuY2hCb3VuZGFyeVszXTtcblxuICAgICAgICBjb25zdCBkaWZmID0gZ3Vlc3MgLSBub2RlUG9zaXRpb247XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIGFsbG93ZWQgdG8gbW92ZSB0aGUgbm9kZTpcbiAgICAgICAgbGV0IGJyYW5jaE9mZnNldCA9IDA7XG4gICAgICAgIGlmIChkaWZmID4gMCkge1xuICAgICAgICAgIGJyYW5jaE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgICAgICAgZGlmZixcbiAgICAgICAgICAgIG1heFNwYWNlQnJhbmNoIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZiA8IDApIHtcbiAgICAgICAgICBicmFuY2hPZmZzZXQgPSAtTWF0aC5taW4oXG4gICAgICAgICAgICAtZGlmZixcbiAgICAgICAgICAgIG1pblNwYWNlQnJhbmNoIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnJhbmNoT2Zmc2V0ICE9IDApIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwibW92aW5nIGJyYW5jaDpcIixicmFuY2hPZmZzZXQsIG1heFNwYWNlQnJhbmNoLCBtaW5TcGFjZUJyYW5jaClcbiAgICAgICAgICB0aGlzLl9zaGlmdEJsb2NrKG5vZGUuaWQsIGJyYW5jaE9mZnNldCk7XG4gICAgICAgICAgLy90aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICAgICAgICBzdGlsbFNoaWZ0aW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW92ZU5vZGUgPSAoZ3Vlc3MpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZVBvc2l0aW9uID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZSk7XG5cbiAgICAgICAgLy8gcG9zaXRpb24gbm9kZSBpZiB0aGVyZSBpcyBzcGFjZVxuICAgICAgICBjb25zdCBbbWluU3BhY2UsIG1heFNwYWNlXSA9IHRoaXMuX2dldFNwYWNlQXJvdW5kTm9kZShub2RlKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IGd1ZXNzIC0gbm9kZVBvc2l0aW9uO1xuICAgICAgICAvLyBjaGVjayBpZiB3ZSBhcmUgYWxsb3dlZCB0byBtb3ZlIHRoZSBub2RlOlxuICAgICAgICBsZXQgbmV3UG9zaXRpb24gPSBub2RlUG9zaXRpb247XG4gICAgICAgIGlmIChkaWZmID4gMCkge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gTWF0aC5taW4oXG4gICAgICAgICAgICBub2RlUG9zaXRpb24gKyAobWF4U3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKSxcbiAgICAgICAgICAgIGd1ZXNzXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChkaWZmIDwgMCkge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBub2RlUG9zaXRpb24gLSAobWluU3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKSxcbiAgICAgICAgICAgIGd1ZXNzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdQb3NpdGlvbiAhPT0gbm9kZVBvc2l0aW9uKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIm1vdmluZyBOb2RlOlwiLGRpZmYsIG1pblNwYWNlLCBtYXhTcGFjZSk7XG4gICAgICAgICAgdGhpcy5kaXJlY3Rpb24uc2V0UG9zaXRpb24obm9kZSwgbmV3UG9zaXRpb24pO1xuICAgICAgICAgIC8vdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgICAgICAgc3RpbGxTaGlmdGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGxldCBndWVzcyA9IGdldEd1ZXNzKGl0ZXJhdGlvbnMsIGFib3ZlRWRnZXMpO1xuICAgICAgbW92ZUJyYW5jaChndWVzcyk7XG4gICAgICBndWVzcyA9IGdldEd1ZXNzKGl0ZXJhdGlvbnMsIGFsbEVkZ2VzKTtcbiAgICAgIG1vdmVOb2RlKGd1ZXNzKTtcbiAgICAgIC8vfSlcbiAgICB9O1xuXG4gICAgLy8gbWV0aG9kIHRvIHJlbW92ZSB3aGl0ZXNwYWNlIGJldHdlZW4gYnJhbmNoZXMuIEJlY2F1c2Ugd2UgZG8gYm90dG9tIHVwLCB3ZSBjYW4gY2VudGVyIHRoZSBwYXJlbnRzLlxuICAgIGNvbnN0IG1pbmltaXplRWRnZUxlbmd0aEJvdHRvbVVwID0gKGl0ZXJhdGlvbnMpID0+IHtcbiAgICAgIGxldCBsZXZlbHMgPSB0aGlzLmhpZXJhcmNoaWNhbC5nZXRMZXZlbHMoKTtcbiAgICAgIGxldmVscyA9IGxldmVscy5yZXZlcnNlKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICBzdGlsbFNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV2ZWxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgbGV2ZWwgPSBsZXZlbHNbal07XG4gICAgICAgICAgY29uc3QgbGV2ZWxOb2RlcyA9IHRoaXMuaGllcmFyY2hpY2FsLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXTtcbiAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxldmVsTm9kZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIG1pbmltaXplRWRnZUxlbmd0aCgxMDAwLCBsZXZlbE5vZGVzW2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0aWxsU2hpZnRpbmcgIT09IHRydWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiRklOSVNIRUQgbWluaW1pemVFZGdlTGVuZ3RoQm90dG9tVXAgSU4gXCIgKyBpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBtZXRob2QgdG8gcmVtb3ZlIHdoaXRlc3BhY2UgYmV0d2VlbiBicmFuY2hlcy4gQmVjYXVzZSB3ZSBkbyBib3R0b20gdXAsIHdlIGNhbiBjZW50ZXIgdGhlIHBhcmVudHMuXG4gICAgY29uc3Qgc2hpZnRCcmFuY2hlc0Nsb3NlckJvdHRvbVVwID0gKGl0ZXJhdGlvbnMpID0+IHtcbiAgICAgIGxldCBsZXZlbHMgPSB0aGlzLmhpZXJhcmNoaWNhbC5nZXRMZXZlbHMoKTtcbiAgICAgIGxldmVscyA9IGxldmVscy5yZXZlcnNlKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICBzdGlsbFNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgIHNoaWZ0RWxlbWVudHNDbG9zZXIoYnJhbmNoU2hpZnRDYWxsYmFjaywgbGV2ZWxzLCB0cnVlKTtcbiAgICAgICAgaWYgKHN0aWxsU2hpZnRpbmcgIT09IHRydWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiRklOSVNIRUQgc2hpZnRCcmFuY2hlc0Nsb3NlckJvdHRvbVVwIElOIFwiICsgKGkrMSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGNlbnRlciBhbGwgcGFyZW50c1xuICAgIGNvbnN0IGNlbnRlckFsbFBhcmVudHMgPSAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGVJZCkpXG4gICAgICAgICAgdGhpcy5fY2VudGVyUGFyZW50KHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gY2VudGVyIGFsbCBwYXJlbnRzXG4gICAgY29uc3QgY2VudGVyQWxsUGFyZW50c0JvdHRvbVVwID0gKCkgPT4ge1xuICAgICAgbGV0IGxldmVscyA9IHRoaXMuaGllcmFyY2hpY2FsLmdldExldmVscygpO1xuICAgICAgbGV2ZWxzID0gbGV2ZWxzLnJldmVyc2UoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGV2ZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gbGV2ZWxzW2ldO1xuICAgICAgICBjb25zdCBsZXZlbE5vZGVzID0gdGhpcy5oaWVyYXJjaGljYWwuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldmVsTm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB0aGlzLl9jZW50ZXJQYXJlbnQobGV2ZWxOb2Rlc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gdGhlIGFjdHVhbCB3b3JrIGlzIGRvbmUgaGVyZS5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ibG9ja1NoaWZ0aW5nID09PSB0cnVlKSB7XG4gICAgICBzaGlmdEJyYW5jaGVzQ2xvc2VyQm90dG9tVXAoNSk7XG4gICAgICBjZW50ZXJBbGxQYXJlbnRzKCk7XG4gICAgfVxuXG4gICAgLy8gbWluaW1pemUgZWRnZSBsZW5ndGhcbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lZGdlTWluaW1pemF0aW9uID09PSB0cnVlKSB7XG4gICAgICBtaW5pbWl6ZUVkZ2VMZW5ndGhCb3R0b21VcCgyMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwucGFyZW50Q2VudHJhbGl6YXRpb24gPT09IHRydWUpIHtcbiAgICAgIGNlbnRlckFsbFBhcmVudHNCb3R0b21VcCgpO1xuICAgIH1cblxuICAgIHNoaWZ0VHJlZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGdpdmVzIHRoZSBzcGFjZSBhcm91bmQgdGhlIG5vZGUuIElGIGEgbWFwIGlzIHN1cHBsaWVkLCBpdCB3aWxsIG9ubHkgY2hlY2sgYWdhaW5zdCBub2RlcyBOT1QgaW4gdGhlIG1hcC5cbiAgICogVGhpcyBpcyB1c2VkIHRvIG9ubHkgZ2V0IHRoZSBkaXN0YW5jZXMgdG8gbm9kZXMgb3V0c2lkZSBvZiBhIGJyYW5jaC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7e05vZGUuaWQ6IHZpcy5Ob2RlfX0gbWFwXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRTcGFjZUFyb3VuZE5vZGUobm9kZSwgbWFwKSB7XG4gICAgbGV0IHVzZU1hcCA9IHRydWU7XG4gICAgaWYgKG1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2VNYXAgPSBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbGV2ZWwgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZS5pZF07XG4gICAgaWYgKGxldmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5oaWVyYXJjaGljYWwuZGlzdHJpYnV0aW9uSW5kZXhbbm9kZS5pZF07XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuICAgICAgY29uc3Qgb3JkZXJpbmcgPSB0aGlzLmhpZXJhcmNoaWNhbC5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF07XG4gICAgICBsZXQgbWluU3BhY2UgPSAxZTk7XG4gICAgICBsZXQgbWF4U3BhY2UgPSAxZTk7XG4gICAgICBpZiAoaW5kZXggIT09IDApIHtcbiAgICAgICAgY29uc3QgcHJldk5vZGUgPSBvcmRlcmluZ1tpbmRleCAtIDFdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHVzZU1hcCA9PT0gdHJ1ZSAmJiBtYXBbcHJldk5vZGUuaWRdID09PSB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgdXNlTWFwID09PSBmYWxzZVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBwcmV2UG9zID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24ocHJldk5vZGUpO1xuICAgICAgICAgIG1pblNwYWNlID0gcG9zaXRpb24gLSBwcmV2UG9zO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleCAhPSBvcmRlcmluZy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNvbnN0IG5leHROb2RlID0gb3JkZXJpbmdbaW5kZXggKyAxXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh1c2VNYXAgPT09IHRydWUgJiYgbWFwW25leHROb2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB8fFxuICAgICAgICAgIHVzZU1hcCA9PT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbmV4dFBvcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5leHROb2RlKTtcbiAgICAgICAgICBtYXhTcGFjZSA9IE1hdGgubWluKG1heFNwYWNlLCBuZXh0UG9zIC0gcG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbWluU3BhY2UsIG1heFNwYWNlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFswLCAwXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2UgdXNlIHRoaXMgbWV0aG9kIHRvIGNlbnRlciBhIHBhcmVudCBub2RlIGFuZCBjaGVjayBpZiBpdCBkb2VzIG5vdCBjcm9zcyBvdGhlciBub2RlcyB3aGVuIGl0IGRvZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NlbnRlclBhcmVudChub2RlKSB7XG4gICAgaWYgKHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtub2RlLmlkXSkge1xuICAgICAgY29uc3QgcGFyZW50cyA9IHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtub2RlLmlkXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHBhcmVudHNbaV07XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbcGFyZW50SWRdO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuaGllcmFyY2hpY2FsLmNoaWxkcmVuUmVmZXJlbmNlW3BhcmVudElkXTtcblxuICAgICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIGdldCB0aGUgcmFuZ2Ugb2YgdGhlIGNoaWxkcmVuXG4gICAgICAgICAgY29uc3QgbmV3UG9zaXRpb24gPSB0aGlzLl9nZXRDZW50ZXJQb3NpdGlvbihjaGlsZHJlbik7XG5cbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKHBhcmVudE5vZGUpO1xuICAgICAgICAgIGNvbnN0IFttaW5TcGFjZSwgbWF4U3BhY2VdID0gdGhpcy5fZ2V0U3BhY2VBcm91bmROb2RlKHBhcmVudE5vZGUpO1xuICAgICAgICAgIGNvbnN0IGRpZmYgPSBwb3NpdGlvbiAtIG5ld1Bvc2l0aW9uO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChkaWZmIDwgMCAmJlxuICAgICAgICAgICAgICBNYXRoLmFicyhkaWZmKSA8XG4gICAgICAgICAgICAgICAgbWF4U3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKSB8fFxuICAgICAgICAgICAgKGRpZmYgPiAwICYmXG4gICAgICAgICAgICAgIE1hdGguYWJzKGRpZmYpIDwgbWluU3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24uc2V0UG9zaXRpb24ocGFyZW50Tm9kZSwgbmV3UG9zaXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHBsYWNlcyB0aGUgbm9kZXMgb24gdGhlIGNhbnZhcyBiYXNlZCBvbiB0aGUgaGllcmFyY2hpYWwgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZGlzdHJpYnV0aW9uIHwgb2J0YWluZWQgYnkgdGhlIGZ1bmN0aW9uIHRoaXMuX2dldERpc3RyaWJ1dGlvbigpXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGxhY2VOb2Rlc0J5SGllcmFyY2h5KGRpc3RyaWJ1dGlvbikge1xuICAgIHRoaXMucG9zaXRpb25lZE5vZGVzID0ge307XG4gICAgLy8gc3RhcnQgcGxhY2luZyBhbGwgdGhlIGxldmVsIDAgbm9kZXMgZmlyc3QuIFRoZW4gcmVjdXJzaXZlbHkgcG9zaXRpb24gdGhlaXIgYnJhbmNoZXMuXG4gICAgZm9yIChjb25zdCBsZXZlbCBpbiBkaXN0cmlidXRpb24pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGlzdHJpYnV0aW9uLCBsZXZlbCkpIHtcbiAgICAgICAgLy8gc29ydCBub2RlcyBpbiBsZXZlbCBieSBwb3NpdGlvbjpcbiAgICAgICAgbGV0IG5vZGVBcnJheSA9IE9iamVjdC5rZXlzKGRpc3RyaWJ1dGlvbltsZXZlbF0pO1xuICAgICAgICBub2RlQXJyYXkgPSB0aGlzLl9pbmRleEFycmF5VG9Ob2Rlcyhub2RlQXJyYXkpO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbi5zb3J0KG5vZGVBcnJheSk7XG4gICAgICAgIGxldCBoYW5kbGVkTm9kZUNvdW50ID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2RlQXJyYXlbaV07XG4gICAgICAgICAgaWYgKHRoaXMucG9zaXRpb25lZE5vZGVzW25vZGUuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYWNpbmcgPSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nO1xuICAgICAgICAgICAgbGV0IHBvcyA9IHNwYWNpbmcgKiBoYW5kbGVkTm9kZUNvdW50O1xuICAgICAgICAgICAgLy8gV2UgZ2V0IHRoZSBYIG9yIFkgdmFsdWVzIHdlIG5lZWQgYW5kIHN0b3JlIHRoZW0gaW4gcG9zIGFuZCBwcmV2aW91c1Bvcy5cbiAgICAgICAgICAgIC8vIFRoZSBnZXQgYW5kIHNldCBtYWtlIHN1cmUgd2UgZ2V0IFggb3IgWVxuICAgICAgICAgICAgaWYgKGhhbmRsZWROb2RlQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgIHBvcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGVBcnJheVtpIC0gMV0pICsgc3BhY2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKG5vZGUsIHBvcywgbGV2ZWwpO1xuICAgICAgICAgICAgdGhpcy5fdmFsaWRhdGVQb3NpdGlvbkFuZENvbnRpbnVlKG5vZGUsIGxldmVsLCBwb3MpO1xuXG4gICAgICAgICAgICBoYW5kbGVkTm9kZUNvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSByZWN1cnNpdmVseSBjYWxsZWQgZnVuY3Rpb24gdG8gZW51bWVyYXRlIHRoZSBicmFuY2hlcyBmcm9tIHRoZSBsYXJnZXN0IGh1YnMgYW5kIHBsYWNlIHRoZSBub2Rlc1xuICAgKiBvbiBhIFggcG9zaXRpb24gdGhhdCBlbnN1cmVzIHRoZXJlIHdpbGwgYmUgbm8gb3ZlcmxhcC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBwYXJlbnRJZFxuICAgKiBAcGFyYW0ge251bWJlcn0gcGFyZW50TGV2ZWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wbGFjZUJyYW5jaE5vZGVzKHBhcmVudElkLCBwYXJlbnRMZXZlbCkge1xuICAgIGNvbnN0IGNoaWxkUmVmID0gdGhpcy5oaWVyYXJjaGljYWwuY2hpbGRyZW5SZWZlcmVuY2VbcGFyZW50SWRdO1xuXG4gICAgLy8gaWYgdGhpcyBpcyBub3QgYSBwYXJlbnQsIGNhbmNlbCB0aGUgcGxhY2luZy4gVGhpcyBjYW4gaGFwcGVuIHdpdGggbXVsdGlwbGUgcGFyZW50cyB0byBvbmUgY2hpbGQuXG4gICAgaWYgKGNoaWxkUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgYSBsaXN0IG9mIGNoaWxkTm9kZXNcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZFJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGROb2Rlcy5wdXNoKHRoaXMuYm9keS5ub2Rlc1tjaGlsZFJlZltpXV0pO1xuICAgIH1cblxuICAgIC8vIHVzZSB0aGUgcG9zaXRpb25zIHRvIG9yZGVyIHRoZSBub2Rlcy5cbiAgICB0aGlzLmRpcmVjdGlvbi5zb3J0KGNoaWxkTm9kZXMpO1xuXG4gICAgLy8gcG9zaXRpb24gdGhlIGNoaWxkTm9kZXNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGNoaWxkTm9kZXNbaV07XG4gICAgICBjb25zdCBjaGlsZE5vZGVMZXZlbCA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tjaGlsZE5vZGUuaWRdO1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIGNoaWxkIG5vZGUgaXMgYmVsb3cgdGhlIHBhcmVudCBub2RlIGFuZCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIHBvc2l0aW9uZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkTm9kZUxldmVsID4gcGFyZW50TGV2ZWwgJiZcbiAgICAgICAgdGhpcy5wb3NpdGlvbmVkTm9kZXNbY2hpbGROb2RlLmlkXSA9PT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgLy8gZ2V0IHRoZSBhbW91bnQgb2Ygc3BhY2UgcmVxdWlyZWQgZm9yIHRoaXMgbm9kZS4gSWYgcGFyZW50IHRoZSB3aWR0aCBpcyBiYXNlZCBvbiB0aGUgYW1vdW50IG9mIGNoaWxkcmVuLlxuICAgICAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZztcbiAgICAgICAgbGV0IHBvcztcblxuICAgICAgICAvLyB3ZSBnZXQgdGhlIFggb3IgWSB2YWx1ZXMgd2UgbmVlZCBhbmQgc3RvcmUgdGhlbSBpbiBwb3MgYW5kIHByZXZpb3VzUG9zLlxuICAgICAgICAvLyBUaGUgZ2V0IGFuZCBzZXQgbWFrZSBzdXJlIHdlIGdldCBYIG9yIFlcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICBwb3MgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbih0aGlzLmJvZHkubm9kZXNbcGFyZW50SWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb3MgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihjaGlsZE5vZGVzW2kgLSAxXSkgKyBzcGFjaW5nO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKGNoaWxkTm9kZSwgcG9zLCBjaGlsZE5vZGVMZXZlbCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25BbmRDb250aW51ZShjaGlsZE5vZGUsIGNoaWxkTm9kZUxldmVsLCBwb3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNlbnRlciB0aGUgcGFyZW50IG5vZGVzLlxuICAgIGNvbnN0IGNlbnRlciA9IHRoaXMuX2dldENlbnRlclBvc2l0aW9uKGNoaWxkTm9kZXMpO1xuICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKHRoaXMuYm9keS5ub2Rlc1twYXJlbnRJZF0sIGNlbnRlciwgcGFyZW50TGV2ZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3Igb3ZlcmxhcCBhbmQgaWYgcmVxdWlyZWQgc2hpZnRzIHRoZSBicmFuY2guIEl0IGFsc28ga2VlcHMgcmVjb3JkcyBvZiBwb3NpdGlvbmVkIG5vZGVzLlxuICAgKiBGaW5hbGx5IGl0IHdpbGwgY2FsbCBfcGxhY2VCcmFuY2hOb2RlcyB0byBwbGFjZSB0aGUgYnJhbmNoIG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF92YWxpZGF0ZVBvc2l0aW9uQW5kQ29udGludWUobm9kZSwgbGV2ZWwsIHBvcykge1xuICAgIC8vIFRoaXMgbWV0aG9kIG9ubHkgd29ya3MgZm9yIGZvcm1hbCB0cmVlcyBhbmQgZm9ybWFsIGZvcmVzdHNcbiAgICAvLyBFYXJseSBleGl0IGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlXG4gICAgaWYgKCF0aGlzLmhpZXJhcmNoaWNhbC5pc1RyZWUpIHJldHVybjtcblxuICAgIC8vIGlmIG92ZXJsYXAgaGFzIGJlZW4gZGV0ZWN0ZWQsIHdlIHNoaWZ0IHRoZSBicmFuY2hcbiAgICBpZiAodGhpcy5sYXN0Tm9kZU9uTGV2ZWxbbGV2ZWxdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzUG9zID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24oXG4gICAgICAgIHRoaXMuYm9keS5ub2Rlc1t0aGlzLmxhc3ROb2RlT25MZXZlbFtsZXZlbF1dXG4gICAgICApO1xuICAgICAgaWYgKHBvcyAtIHByZXZpb3VzUG9zIDwgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZykge1xuICAgICAgICBjb25zdCBkaWZmID0gcHJldmlvdXNQb3MgKyB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nIC0gcG9zO1xuICAgICAgICBjb25zdCBzaGFyZWRQYXJlbnQgPSB0aGlzLl9maW5kQ29tbW9uUGFyZW50KFxuICAgICAgICAgIHRoaXMubGFzdE5vZGVPbkxldmVsW2xldmVsXSxcbiAgICAgICAgICBub2RlLmlkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3NoaWZ0QmxvY2soc2hhcmVkUGFyZW50LndpdGhDaGlsZCwgZGlmZik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0Tm9kZU9uTGV2ZWxbbGV2ZWxdID0gbm9kZS5pZDsgLy8gc3RvcmUgY2hhbmdlIGluIHBvc2l0aW9uLlxuICAgIHRoaXMucG9zaXRpb25lZE5vZGVzW25vZGUuaWRdID0gdHJ1ZTtcbiAgICB0aGlzLl9wbGFjZUJyYW5jaE5vZGVzKG5vZGUuaWQsIGxldmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNlaXZlcyBhbiBhcnJheSB3aXRoIG5vZGUgaW5kaWNlcyBhbmQgcmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBhY3R1YWwgbm9kZSByZWZlcmVuY2VzLlxuICAgKiBVc2VkIGZvciBzb3J0aW5nIGJhc2VkIG9uIG5vZGUgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZS5pZD59IGlkQXJyYXlcbiAgICogQHJldHVybnMge0FycmF5LjxOb2RlPn1cbiAgICovXG4gIF9pbmRleEFycmF5VG9Ob2RlcyhpZEFycmF5KSB7XG4gICAgY29uc3QgYXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycmF5LnB1c2godGhpcy5ib2R5Lm5vZGVzW2lkQXJyYXlbaV1dKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gZ2V0IHRoZSBkaXN0cmlidXRpb24gb2YgbGV2ZWxzIGJhc2VkIG9uIGh1YnNpemVcbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXREaXN0cmlidXRpb24oKSB7XG4gICAgY29uc3QgZGlzdHJpYnV0aW9uID0ge307XG4gICAgbGV0IG5vZGVJZCwgbm9kZTtcblxuICAgIC8vIHdlIGZpeCBZIGJlY2F1c2UgdGhlIGhpZXJhcmNoeSBpcyB2ZXJ0aWNhbCxcbiAgICAvLyB3ZSBmaXggWCBzbyB3ZSBkbyBub3QgZ2l2ZSBhIG5vZGUgYW4geCBwb3NpdGlvbiBmb3IgYSBzZWNvbmQgdGltZS5cbiAgICAvLyB0aGUgZml4IG9mIFggaXMgcmVtb3ZlZCBhZnRlciB0aGUgeCB2YWx1ZSBoYXMgYmVlbiBzZXQuXG4gICAgZm9yIChub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgIGNvbnN0IGxldmVsID1cbiAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGVJZF07XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLmZpeChub2RlLCBsZXZlbCk7XG4gICAgICAgIGlmIChkaXN0cmlidXRpb25bbGV2ZWxdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkaXN0cmlidXRpb25bbGV2ZWxdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZGlzdHJpYnV0aW9uW2xldmVsXVtub2RlSWRdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpc3RyaWJ1dGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGFjdGl2ZSAoaS5lLiB2aXNpYmxlKSBlZGdlcyBmb3IgdGhpcyBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHZpcy5FZGdlPn0gQXJyYXkgb2YgZWRnZSBpbnN0YW5jZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRBY3RpdmVFZGdlcyhub2RlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBmb3JFYWNoKG5vZGUuZWRnZXMsIChlZGdlKSA9PiB7XG4gICAgICBpZiAodGhpcy5ib2R5LmVkZ2VJbmRpY2VzLmluZGV4T2YoZWRnZS5pZCkgIT09IC0xKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVkZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1YnNpemVzIGZvciBhbGwgYWN0aXZlIG5vZGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEh1YlNpemVzKCkge1xuICAgIGNvbnN0IGh1YlNpemVzID0ge307XG4gICAgY29uc3Qgbm9kZUlkcyA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcblxuICAgIGZvckVhY2gobm9kZUlkcywgKG5vZGVJZCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgY29uc3QgaHViU2l6ZSA9IHRoaXMuX2dldEFjdGl2ZUVkZ2VzKG5vZGUpLmxlbmd0aDtcbiAgICAgIGh1YlNpemVzW2h1YlNpemVdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIC8vIE1ha2UgYW4gYXJyYXkgb2YgdGhlIHNpemUgc29ydGVkIGRlc2NlbmRpbmdcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3JFYWNoKGh1YlNpemVzLCAoc2l6ZSkgPT4ge1xuICAgICAgcmVzdWx0LnB1c2goTnVtYmVyKHNpemUpKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYiAtIGE7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG5vZGVzIGluIGxldmVscyBiYXNlZCBvbiB0aGUgcmVjdXJzaXZlIGJyYW5jaGluZyBmcm9tIHRoZSBsYXJnZXN0IGh1YnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lTGV2ZWxzQnlIdWJzaXplKCkge1xuICAgIGNvbnN0IGxldmVsRG93bnN0cmVhbSA9IChub2RlQSwgbm9kZUIpID0+IHtcbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsRG93bnN0cmVhbShub2RlQSwgbm9kZUIpO1xuICAgIH07XG5cbiAgICBjb25zdCBodWJTaXplcyA9IHRoaXMuX2dldEh1YlNpemVzKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGh1YlNpemVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBodWJTaXplID0gaHViU2l6ZXNbaV07XG4gICAgICBpZiAoaHViU2l6ZSA9PT0gMCkgYnJlYWs7XG5cbiAgICAgIGZvckVhY2godGhpcy5ib2R5Lm5vZGVJbmRpY2VzLCAobm9kZUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcblxuICAgICAgICBpZiAoaHViU2l6ZSA9PT0gdGhpcy5fZ2V0QWN0aXZlRWRnZXMobm9kZSkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5fY3Jhd2xOZXR3b3JrKGxldmVsRG93bnN0cmVhbSwgbm9kZUlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRPRE86IHJlbGVhc2UgZmVhdHVyZVxuICAgKiBUT0RPOiBEZXRlcm1pbmUgaWYgdGhpcyBmZWF0dXJlIGlzIG5lZWRlZCBhdCBhbGxcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZXRlcm1pbmVMZXZlbHNDdXN0b21DYWxsYmFjaygpIHtcbiAgICBjb25zdCBtaW5MZXZlbCA9IDEwMDAwMDtcblxuICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGNvbWUgZnJvbSBvcHRpb25zLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSBUaGlzIHNob3VsZCBldmVudHVhbGx5IGJlIGltcGxlbWVudGVkIHdpdGggdGhlc2UgcGFyYW1ldGVycyB1c2VkLlxuICAgIGNvbnN0IGN1c3RvbUNhbGxiYWNrID0gZnVuY3Rpb24gKG5vZGVBLCBub2RlQiwgZWRnZSkge307XG5cbiAgICAvLyBUT0RPOiBwZXJoYXBzIG1vdmUgdG8gSGllcmFyY2hpY2FsU3RhdHVzLlxuICAgIC8vICAgICAgIEJ1dCBJIGN1cnJlbnRseSBkb24ndCBzZWUgdGhlIHBvaW50LCB0aGlzIG1ldGhvZCBpcyBub3QgdXNlZC5cbiAgICBjb25zdCBsZXZlbEJ5RGlyZWN0aW9uID0gKG5vZGVBLCBub2RlQiwgZWRnZSkgPT4ge1xuICAgICAgbGV0IGxldmVsQSA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlQS5pZF07XG4gICAgICAvLyBzZXQgaW5pdGlhbCBsZXZlbFxuICAgICAgaWYgKGxldmVsQSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldmVsQSA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlQS5pZF0gPSBtaW5MZXZlbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlmZiA9IGN1c3RvbUNhbGxiYWNrKFxuICAgICAgICBOZXR3b3JrVXRpbC5jbG9uZU9wdGlvbnMobm9kZUEsIFwibm9kZVwiKSxcbiAgICAgICAgTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGVCLCBcIm5vZGVcIiksXG4gICAgICAgIE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhlZGdlLCBcImVkZ2VcIilcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlQi5pZF0gPSBsZXZlbEEgKyBkaWZmO1xuICAgIH07XG5cbiAgICB0aGlzLl9jcmF3bE5ldHdvcmsobGV2ZWxCeURpcmVjdGlvbik7XG4gICAgdGhpcy5oaWVyYXJjaGljYWwuc2V0TWluTGV2ZWxUb1plcm8odGhpcy5ib2R5Lm5vZGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvY2F0ZSBub2RlcyBpbiBsZXZlbHMgYmFzZWQgb24gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZWRnZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lTGV2ZWxzRGlyZWN0ZWQoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXMucmVkdWNlKChhY2MsIGlkKSA9PiB7XG4gICAgICBhY2Muc2V0KGlkLCB0aGlzLmJvZHkubm9kZXNbaWRdKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3IE1hcCgpKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLnNoYWtlVG93YXJkcyA9PT0gXCJyb290c1wiKSB7XG4gICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHMgPSBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25Sb290cyhub2Rlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVscyA9IGZpbGxMZXZlbHNCeURpcmVjdGlvbkxlYXZlcyhub2Rlcyk7XG4gICAgfVxuXG4gICAgdGhpcy5oaWVyYXJjaGljYWwuc2V0TWluTGV2ZWxUb1plcm8odGhpcy5ib2R5Lm5vZGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGJvb2trZWVwaW5nIG9mIHBhcmVudCBhbmQgY2hpbGQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2VuZXJhdGVNYXAoKSB7XG4gICAgY29uc3QgZmlsbEluUmVsYXRpb25zID0gKHBhcmVudE5vZGUsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbY2hpbGROb2RlLmlkXSA+XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1twYXJlbnROb2RlLmlkXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmFkZFJlbGF0aW9uKHBhcmVudE5vZGUuaWQsIGNoaWxkTm9kZS5pZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX2NyYXdsTmV0d29yayhmaWxsSW5SZWxhdGlvbnMpO1xuICAgIHRoaXMuaGllcmFyY2hpY2FsLmNoZWNrSWZUcmVlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3Jhd2wgb3ZlciB0aGUgZW50aXJlIG5ldHdvcmsgYW5kIHVzZSBhIGNhbGxiYWNrIG9uIGVhY2ggbm9kZSBjb3VwbGUgdGhhdCBpcyBjb25uZWN0ZWQgdG8gZWFjaCBvdGhlci5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrPWZ1bmN0aW9uKCl7fV0gICAgICAgICAgfCB3aWxsIHJlY2VpdmUgbm9kZUEsIG5vZGVCIGFuZCB0aGUgY29ubmVjdGluZyBlZGdlLiBBIGFuZCBCIGFyZSBkaXN0aW5jdC5cbiAgICogQHBhcmFtIHtOb2RlLmlkfSBzdGFydGluZ05vZGVJZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyYXdsTmV0d29yayhjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9LCBzdGFydGluZ05vZGVJZCkge1xuICAgIGNvbnN0IHByb2dyZXNzID0ge307XG5cbiAgICBjb25zdCBjcmF3bGVyID0gKG5vZGUsIHRyZWUpID0+IHtcbiAgICAgIGlmIChwcm9ncmVzc1tub2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLnNldFRyZWVJbmRleChub2RlLCB0cmVlKTtcblxuICAgICAgICBwcm9ncmVzc1tub2RlLmlkXSA9IHRydWU7XG4gICAgICAgIGxldCBjaGlsZE5vZGU7XG4gICAgICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5fZ2V0QWN0aXZlRWRnZXMobm9kZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBlZGdlID0gZWRnZXNbaV07XG4gICAgICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoZWRnZS50b0lkID09IG5vZGUuaWQpIHtcbiAgICAgICAgICAgICAgLy8gTm90ICc9PT0nIGJlY2F1c2UgaWQncyBjYW4gYmUgc3RyaW5nIGFuZCBudW1lcmljXG4gICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGVkZ2UuZnJvbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGVkZ2UudG87XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlLmlkICE9IGNoaWxkTm9kZS5pZCkge1xuICAgICAgICAgICAgICAvLyBOb3QgJyE9PScgYmVjYXVzZSBpZCdzIGNhbiBiZSBzdHJpbmcgYW5kIG51bWVyaWNcbiAgICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgY2hpbGROb2RlLCBlZGdlKTtcbiAgICAgICAgICAgICAgY3Jhd2xlcihjaGlsZE5vZGUsIHRyZWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3RhcnRpbmdOb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ3Jhd2wgb3ZlciBhbGwgbm9kZXNcbiAgICAgIGxldCB0cmVlSW5kZXggPSAwOyAvLyBTZXJ2ZXMgdG8gcGFzcyBhIHVuaXF1ZSBpZCBmb3IgdGhlIGN1cnJlbnQgZGlzdGluY3QgdHJlZVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlSWQgPSB0aGlzLmJvZHkubm9kZUluZGljZXNbaV07XG5cbiAgICAgICAgaWYgKHByb2dyZXNzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBjcmF3bGVyKG5vZGUsIHRyZWVJbmRleCk7XG4gICAgICAgICAgdHJlZUluZGV4ICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3Jhd2wgZnJvbSB0aGUgZ2l2ZW4gc3RhcnRpbmcgbm9kZVxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tzdGFydGluZ05vZGVJZF07XG4gICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb2RlIG5vdCBmb3VuZDpcIiwgc3RhcnRpbmdOb2RlSWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjcmF3bGVyKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaGlmdCBhIGJyYW5jaCBhIGNlcnRhaW4gZGlzdGFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBwYXJlbnRJZFxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlmZlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NoaWZ0QmxvY2socGFyZW50SWQsIGRpZmYpIHtcbiAgICBjb25zdCBwcm9ncmVzcyA9IHt9O1xuICAgIGNvbnN0IHNoaWZ0ZXIgPSAocGFyZW50SWQpID0+IHtcbiAgICAgIGlmIChwcm9ncmVzc1twYXJlbnRJZF0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcHJvZ3Jlc3NbcGFyZW50SWRdID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGlyZWN0aW9uLnNoaWZ0KHBhcmVudElkLCBkaWZmKTtcblxuICAgICAgY29uc3QgY2hpbGRSZWYgPSB0aGlzLmhpZXJhcmNoaWNhbC5jaGlsZHJlblJlZmVyZW5jZVtwYXJlbnRJZF07XG4gICAgICBpZiAoY2hpbGRSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkUmVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgc2hpZnRlcihjaGlsZFJlZltpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHNoaWZ0ZXIocGFyZW50SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBjb21tb24gcGFyZW50IGJldHdlZW4gYnJhbmNoZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gY2hpbGRBXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gY2hpbGRCXG4gICAqIEByZXR1cm5zIHt7Zm91bmRQYXJlbnQsIHdpdGhDaGlsZH19XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluZENvbW1vblBhcmVudChjaGlsZEEsIGNoaWxkQikge1xuICAgIGNvbnN0IHBhcmVudHMgPSB7fTtcbiAgICBjb25zdCBpdGVyYXRlUGFyZW50cyA9IChwYXJlbnRzLCBjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50UmVmID0gdGhpcy5oaWVyYXJjaGljYWwucGFyZW50UmVmZXJlbmNlW2NoaWxkXTtcbiAgICAgIGlmIChwYXJlbnRSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudFJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudFJlZltpXTtcbiAgICAgICAgICBwYXJlbnRzW3BhcmVudF0gPSB0cnVlO1xuICAgICAgICAgIGl0ZXJhdGVQYXJlbnRzKHBhcmVudHMsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXJlbnQgPSAocGFyZW50cywgY2hpbGQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudFJlZiA9IHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtjaGlsZF07XG4gICAgICBpZiAocGFyZW50UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRSZWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRSZWZbaV07XG4gICAgICAgICAgaWYgKHBhcmVudHNbcGFyZW50XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmb3VuZFBhcmVudDogcGFyZW50LCB3aXRoQ2hpbGQ6IGNoaWxkIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGJyYW5jaCA9IGZpbmRQYXJlbnQocGFyZW50cywgcGFyZW50KTtcbiAgICAgICAgICBpZiAoYnJhbmNoLmZvdW5kUGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYnJhbmNoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZm91bmRQYXJlbnQ6IG51bGwsIHdpdGhDaGlsZDogY2hpbGQgfTtcbiAgICB9O1xuXG4gICAgaXRlcmF0ZVBhcmVudHMocGFyZW50cywgY2hpbGRBKTtcbiAgICByZXR1cm4gZmluZFBhcmVudChwYXJlbnRzLCBjaGlsZEIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3RyYXRlZ3kgcGF0dGVybiBmb3IgaGFuZGxpbmcgdGhlIGNvb3JkaW5hdGVzIGdpdmVuIHRoZSBjdXJyZW50IGRpcmVjdGlvbi5cbiAgICpcbiAgICogVGhlIGluZGl2aWR1YWwgaW5zdGFuY2VzIGNvbnRhaW4gYWxsIHRoZSBvcGVyYXRpb25zIGFuZCBkYXRhIHNwZWNpZmljIHRvIGEgbGF5b3V0IGRpcmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9zaXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90VXBkYXRlPWZhbHNlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0RGlyZWN0aW9uU3RyYXRlZ3koKSB7XG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9XG4gICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmRpcmVjdGlvbiA9PT0gXCJVRFwiIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmRpcmVjdGlvbiA9PT0gXCJEVVwiO1xuXG4gICAgaWYgKGlzVmVydGljYWwpIHtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gbmV3IFZlcnRpY2FsU3RyYXRlZ3kodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gbmV3IEhvcml6b250YWxTdHJhdGVneSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBjZW50ZXIgcG9zaXRpb24gb2YgYSBicmFuY2ggZnJvbSB0aGUgcGFzc2VkIGxpc3Qgb2YgY2hpbGQgbm9kZXNcbiAgICpcbiAgICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHBvc2l0aW9ucyBvZiBhbGwgdGhlIGNoaWxkIG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlfHZpcy5Ob2RlLmlkPn0gY2hpbGROb2RlcyAgQXJyYXkgb2YgZWl0aGVyIGNoaWxkIG5vZGVzIG9yIG5vZGUgaWQnc1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENlbnRlclBvc2l0aW9uKGNoaWxkTm9kZXMpIHtcbiAgICBsZXQgbWluUG9zID0gMWU5O1xuICAgIGxldCBtYXhQb3MgPSAtMWU5O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2hpbGROb2RlO1xuICAgICAgaWYgKGNoaWxkTm9kZXNbaV0uaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlSWQgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgICBjaGlsZE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbY2hpbGROb2RlSWRdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKGNoaWxkTm9kZSk7XG4gICAgICBtaW5Qb3MgPSBNYXRoLm1pbihtaW5Qb3MsIHBvc2l0aW9uKTtcbiAgICAgIG1heFBvcyA9IE1hdGgubWF4KG1heFBvcywgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiAwLjUgKiAobWluUG9zICsgbWF4UG9zKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYXlvdXRFbmdpbmU7XG4iLCAiaW1wb3J0IFwiLi9NYW5pcHVsYXRpb25TeXN0ZW0uY3NzXCI7XG5cbmltcG9ydCB7IEhhbW1lciwgZGVlcEV4dGVuZCwgcmVjdXJzaXZlRE9NRGVsZXRlIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgdjQgYXMgcmFuZG9tVVVJRCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBvblRvdWNoIH0gZnJvbSBcIi4uLy4uL2hhbW1lclV0aWxcIjtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIHRvb2xiYXIgZGl2IGVsZW1lbnQgb2YgY2hpbGRyZW5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBNYW5pcHVsYXRpb25TeXN0ZW0ge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkhhbmRsZXJ9IHNlbGVjdGlvbkhhbmRsZXJcbiAgICogQHBhcmFtIHtJbnRlcmFjdGlvbkhhbmRsZXJ9IGludGVyYWN0aW9uSGFuZGxlclxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzLCBzZWxlY3Rpb25IYW5kbGVyLCBpbnRlcmFjdGlvbkhhbmRsZXIpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IHNlbGVjdGlvbkhhbmRsZXI7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIgPSBpbnRlcmFjdGlvbkhhbmRsZXI7XG5cbiAgICB0aGlzLmVkaXRNb2RlID0gZmFsc2U7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0TW9kZURpdiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNsb3NlRGl2ID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5fZG9tRXZlbnRMaXN0ZW5lckNsZWFudXBRdWV1ZSA9IFtdO1xuICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnMgPSB7fTtcbiAgICB0aGlzLnRlbXBvcmFyeUV2ZW50RnVuY3Rpb25zID0gW107XG5cbiAgICB0aGlzLnRvdWNoVGltZSA9IDA7XG4gICAgdGhpcy50ZW1wb3JhcnlJZHMgPSB7IG5vZGVzOiBbXSwgZWRnZXM6IFtdIH07XG4gICAgdGhpcy5ndWlFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5pbk1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBpbml0aWFsbHlBY3RpdmU6IGZhbHNlLFxuICAgICAgYWRkTm9kZTogdHJ1ZSxcbiAgICAgIGFkZEVkZ2U6IHRydWUsXG4gICAgICBlZGl0Tm9kZTogdW5kZWZpbmVkLFxuICAgICAgZWRpdEVkZ2U6IHRydWUsXG4gICAgICBkZWxldGVOb2RlOiB0cnVlLFxuICAgICAgZGVsZXRlRWRnZTogdHJ1ZSxcbiAgICAgIGNvbnRyb2xOb2RlU3R5bGU6IHtcbiAgICAgICAgc2hhcGU6IFwiZG90XCIsXG4gICAgICAgIHNpemU6IDYsXG4gICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgYmFja2dyb3VuZDogXCIjZmYwMDAwXCIsXG4gICAgICAgICAgYm9yZGVyOiBcIiMzYzNjM2NcIixcbiAgICAgICAgICBoaWdobGlnaHQ6IHsgYmFja2dyb3VuZDogXCIjMDdmOTY4XCIsIGJvcmRlcjogXCIjM2MzYzNjXCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgICAgIGJvcmRlcldpZHRoU2VsZWN0ZWQ6IDIsXG4gICAgICB9LFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZXN0cm95XCIsICgpID0+IHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YUNoYW5nZWRcIiwgdGhpcy5fcmVzdG9yZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXNldERhdGFcIiwgdGhpcy5fcmVzdG9yZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBzb21ldGhpbmcgY2hhbmdlcyBpbiB0aGUgZGF0YSBkdXJpbmcgZWRpdGluZywgc3dpdGNoIGJhY2sgdG8gdGhlIGluaXRpYWwgZGF0YW1hbmlwdWxhdGlvbiBzdGF0ZSBhbmQgY2xvc2UgYWxsIGVkaXQgbW9kZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzdG9yZSgpIHtcbiAgICBpZiAodGhpcy5pbk1vZGUgIT09IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmluaXRpYWxseUFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc2FibGVFZGl0TW9kZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIE9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGFsbE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucywgYWxsT3B0aW9ucywgZ2xvYmFsT3B0aW9ucykge1xuICAgIGlmIChhbGxPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChhbGxPcHRpb25zLmxvY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGUgPSBhbGxPcHRpb25zLmxvY2FsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGUgPSBnbG9iYWxPcHRpb25zLmxvY2FsZTtcbiAgICAgIH1cbiAgICAgIGlmIChhbGxPcHRpb25zLmxvY2FsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlcyA9IGFsbE9wdGlvbnMubG9jYWxlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzID0gZ2xvYmFsT3B0aW9ucy5sb2NhbGVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICBkZWVwRXh0ZW5kKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmluaXRpYWxseUFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NldHVwKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGVkaXQtbW9kZS4gRHJhd3MgdGhlIERPTSByZXF1aXJlZCBhbmQgY2xlYW5zIHVwIGFmdGVyIGl0c2VsZi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRvZ2dsZUVkaXRNb2RlKCkge1xuICAgIGlmICh0aGlzLmVkaXRNb2RlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmRpc2FibGVFZGl0TW9kZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgRWRpdCBNb2RlXG4gICAqL1xuICBlbmFibGVFZGl0TW9kZSgpIHtcbiAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcblxuICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuY2xvc2VEaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuZWRpdE1vZGVEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIEVkaXQgTW9kZVxuICAgKi9cbiAgZGlzYWJsZUVkaXRNb2RlKCkge1xuICAgIHRoaXMuZWRpdE1vZGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgdGhpcy5jbG9zZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICB0aGlzLmVkaXRNb2RlRGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLl9jcmVhdGVFZGl0QnV0dG9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIG1haW4gdG9vbGJhci4gUmVtb3ZlcyBmdW5jdGlvbnMgYm91bmQgdG8gdGhlIHNlbGVjdCBldmVudC4gQmluZHMgYWxsIHRoZSBidXR0b25zIG9mIHRoZSB0b29sYmFyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpIHtcbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICAvLyByZXNldCBnbG9iYWwgdmFyaWFibGVzXG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcblxuICAgIC8vIGlmIHRoZSBndWkgaXMgZW5hYmxlZCwgZHJhdyBhbGwgZWxlbWVudHMuXG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gYSBfcmVzdG9yZSB3aWxsIGhpZGUgdGhlc2UgbWVudXNcbiAgICAgIHRoaXMuZWRpdE1vZGUgPSB0cnVlO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuY2xvc2VEaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuICAgICAgY29uc3Qgc2VsZWN0ZWROb2RlQ291bnQgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlQ291bnQoKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRWRnZUNvdW50ID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkRWRnZUNvdW50KCk7XG4gICAgICBjb25zdCBzZWxlY3RlZFRvdGFsQ291bnQgPSBzZWxlY3RlZE5vZGVDb3VudCArIHNlbGVjdGVkRWRnZUNvdW50O1xuICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV07XG4gICAgICBsZXQgbmVlZFNlcGVyYXRvciA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFkZE5vZGUgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUFkZE5vZGVCdXR0b24obG9jYWxlKTtcbiAgICAgICAgbmVlZFNlcGVyYXRvciA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFkZEVkZ2UgIT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChuZWVkU2VwZXJhdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5fY3JlYXRlU2VwZXJhdG9yKDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5lZWRTZXBlcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NyZWF0ZUFkZEVkZ2VCdXR0b24obG9jYWxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RlZE5vZGVDb3VudCA9PT0gMSAmJlxuICAgICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVkaXROb2RlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICkge1xuICAgICAgICBpZiAobmVlZFNlcGVyYXRvciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZWVkU2VwZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jcmVhdGVFZGl0Tm9kZUJ1dHRvbihsb2NhbGUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc2VsZWN0ZWRFZGdlQ291bnQgPT09IDEgJiZcbiAgICAgICAgc2VsZWN0ZWROb2RlQ291bnQgPT09IDAgJiZcbiAgICAgICAgdGhpcy5vcHRpb25zLmVkaXRFZGdlICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZWVkU2VwZXJhdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5fY3JlYXRlU2VwZXJhdG9yKDMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5lZWRTZXBlcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NyZWF0ZUVkaXRFZGdlQnV0dG9uKGxvY2FsZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlbW92ZSBidXR0b25zXG4gICAgICBpZiAoc2VsZWN0ZWRUb3RhbENvdW50ICE9PSAwKSB7XG4gICAgICAgIGlmIChzZWxlY3RlZE5vZGVDb3VudCA+IDAgJiYgdGhpcy5vcHRpb25zLmRlbGV0ZU5vZGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKG5lZWRTZXBlcmF0b3IgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcig0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fY3JlYXRlRGVsZXRlQnV0dG9uKGxvY2FsZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgc2VsZWN0ZWROb2RlQ291bnQgPT09IDAgJiZcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZGVsZXRlRWRnZSAhPT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKG5lZWRTZXBlcmF0b3IgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcig0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fY3JlYXRlRGVsZXRlQnV0dG9uKGxvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuXG4gICAgICAvLyByZWZyZXNoIHRoaXMgYmFyIGJhc2VkIG9uIHdoYXQgaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRFdmVudChcbiAgICAgICAgXCJzZWxlY3RcIixcbiAgICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyLmJpbmQodGhpcylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gcmVkcmF3IHRvIHNob3cgYW55IHBvc3NpYmxlIGNoYW5nZXNcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIHRvb2xiYXIgZm9yIGFkZGluZyBOb2Rlc1xuICAgKi9cbiAgYWRkTm9kZU1vZGUoKSB7XG4gICAgLy8gd2hlbiB1c2luZyB0aGUgZ3VpLCBlbmFibGUgZWRpdCBtb2RlIGlmIGl0IHdhc250IGFscmVhZHkuXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICB0aGlzLmluTW9kZSA9IFwiYWRkTm9kZVwiO1xuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcbiAgICAgIHRoaXMuX2NyZWF0ZUJhY2tCdXR0b24obG9jYWxlKTtcbiAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigpO1xuICAgICAgdGhpcy5fY3JlYXRlRGVzY3JpcHRpb24oXG4gICAgICAgIGxvY2FsZVtcImFkZERlc2NyaXB0aW9uXCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJhZGREZXNjcmlwdGlvblwiXVxuICAgICAgKTtcblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRFdmVudChcImNsaWNrXCIsIHRoaXMuX3BlcmZvcm1BZGROb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGwgdGhlIGJvdW5kIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZWRpdGluZyBvZiB0aGUgbm9kZS4gVGhlIG5vZGUgaGFzIHRvIGJlIHNlbGVjdGVkLlxuICAgKi9cbiAgZWRpdE5vZGUoKSB7XG4gICAgLy8gd2hlbiB1c2luZyB0aGUgZ3VpLCBlbmFibGUgZWRpdCBtb2RlIGlmIGl0IHdhc250IGFscmVhZHkuXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZE5vZGVzKClbMF07XG4gICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbk1vZGUgPSBcImVkaXROb2RlXCI7XG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5lZGl0Tm9kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGlmIChub2RlLmlzQ2x1c3RlciAhPT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBkZWVwRXh0ZW5kKHt9LCBub2RlLm9wdGlvbnMsIGZhbHNlKTtcbiAgICAgICAgICBkYXRhLnggPSBub2RlLng7XG4gICAgICAgICAgZGF0YS55ID0gbm9kZS55O1xuXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lZGl0Tm9kZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5lZGl0Tm9kZShkYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaW5Nb2RlID09PSBcImVkaXROb2RlXCJcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLnVwZGF0ZShmaW5hbGl6ZWREYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBlZGl0IGRvZXMgbm90IHN1cHBvcnQgdHdvIGFyZ3VtZW50cyAoZGF0YSwgY2FsbGJhY2spXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFsZXJ0KFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV1bXCJlZGl0Q2x1c3RlckVycm9yXCJdIHx8XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJlZGl0Q2x1c3RlckVycm9yXCJdXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiTm8gZnVuY3Rpb24gaGFzIGJlZW4gY29uZmlndXJlZCB0byBoYW5kbGUgdGhlIGVkaXRpbmcgb2Ygbm9kZXMuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSB0aGUgdG9vbGJhciB0byBjb25uZWN0IG5vZGVzXG4gICAqL1xuICBhZGRFZGdlTW9kZSgpIHtcbiAgICAvLyB3aGVuIHVzaW5nIHRoZSBndWksIGVuYWJsZSBlZGl0IG1vZGUgaWYgaXQgd2FzbnQgYWxyZWFkeS5cbiAgICBpZiAodGhpcy5lZGl0TW9kZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgdGhlIHN0YXRlIG9mIGFueSBib3VuZCBmdW5jdGlvbnMgb3IgZXZlbnRzLCByZW1vdmUgY29udHJvbCBub2RlcywgcmVzdG9yZSBwaHlzaWNzXG4gICAgdGhpcy5fY2xlYW4oKTtcblxuICAgIHRoaXMuaW5Nb2RlID0gXCJhZGRFZGdlXCI7XG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV07XG4gICAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTSA9IHt9O1xuICAgICAgdGhpcy5fY3JlYXRlQmFja0J1dHRvbihsb2NhbGUpO1xuICAgICAgdGhpcy5fY3JlYXRlU2VwZXJhdG9yKCk7XG4gICAgICB0aGlzLl9jcmVhdGVEZXNjcmlwdGlvbihcbiAgICAgICAgbG9jYWxlW1wiZWRnZURlc2NyaXB0aW9uXCJdIHx8XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImVkZ2VEZXNjcmlwdGlvblwiXVxuICAgICAgKTtcblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIC8vIHRlbXBvcmFyaWx5IG92ZXJsb2FkIGZ1bmN0aW9uc1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uVG91Y2hcIiwgdGhpcy5faGFuZGxlQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkRyYWdFbmRcIiwgdGhpcy5fZmluaXNoQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkRyYWdcIiwgdGhpcy5fZHJhZ0NvbnRyb2xOb2RlLmJpbmQodGhpcykpO1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uUmVsZWFzZVwiLCB0aGlzLl9maW5pc2hDb25uZWN0LmJpbmQodGhpcykpO1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uRHJhZ1N0YXJ0XCIsIHRoaXMuX2RyYWdTdGFydEVkZ2UuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25Ib2xkXCIsICgpID0+IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgdGhlIHRvb2xiYXIgdG8gZWRpdCBlZGdlc1xuICAgKi9cbiAgZWRpdEVkZ2VNb2RlKCkge1xuICAgIC8vIHdoZW4gdXNpbmcgdGhlIGd1aSwgZW5hYmxlIGVkaXQgbW9kZSBpZiBpdCB3YXNuJ3QgYWxyZWFkeS5cbiAgICBpZiAodGhpcy5lZGl0TW9kZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgdGhlIHN0YXRlIG9mIGFueSBib3VuZCBmdW5jdGlvbnMgb3IgZXZlbnRzLCByZW1vdmUgY29udHJvbCBub2RlcywgcmVzdG9yZSBwaHlzaWNzXG4gICAgdGhpcy5fY2xlYW4oKTtcblxuICAgIHRoaXMuaW5Nb2RlID0gXCJlZGl0RWRnZVwiO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB0aGlzLm9wdGlvbnMuZWRpdEVkZ2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHR5cGVvZiB0aGlzLm9wdGlvbnMuZWRpdEVkZ2UuZWRpdFdpdGhvdXREcmFnID09PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWRFZGdlSWRzKClbMF07XG4gICAgICBpZiAodGhpcy5lZGdlQmVpbmdFZGl0ZWRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy5lZGdlQmVpbmdFZGl0ZWRJZF07XG4gICAgICAgIHRoaXMuX3BlcmZvcm1FZGl0RWRnZShlZGdlLmZyb20uaWQsIGVkZ2UudG8uaWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcbiAgICAgIHRoaXMuX2NyZWF0ZUJhY2tCdXR0b24obG9jYWxlKTtcbiAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigpO1xuICAgICAgdGhpcy5fY3JlYXRlRGVzY3JpcHRpb24oXG4gICAgICAgIGxvY2FsZVtcImVkaXRFZGdlRGVzY3JpcHRpb25cIl0gfHxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdEVkZ2VEZXNjcmlwdGlvblwiXVxuICAgICAgKTtcblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWRFZGdlSWRzKClbMF07XG4gICAgaWYgKHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1t0aGlzLmVkZ2VCZWluZ0VkaXRlZElkXTtcblxuICAgICAgLy8gY3JlYXRlIGNvbnRyb2wgbm9kZXNcbiAgICAgIGNvbnN0IGNvbnRyb2xOb2RlRnJvbSA9IHRoaXMuX2dldE5ld1RhcmdldE5vZGUoZWRnZS5mcm9tLngsIGVkZ2UuZnJvbS55KTtcbiAgICAgIGNvbnN0IGNvbnRyb2xOb2RlVG8gPSB0aGlzLl9nZXROZXdUYXJnZXROb2RlKGVkZ2UudG8ueCwgZWRnZS50by55KTtcblxuICAgICAgdGhpcy50ZW1wb3JhcnlJZHMubm9kZXMucHVzaChjb250cm9sTm9kZUZyb20uaWQpO1xuICAgICAgdGhpcy50ZW1wb3JhcnlJZHMubm9kZXMucHVzaChjb250cm9sTm9kZVRvLmlkKTtcblxuICAgICAgdGhpcy5ib2R5Lm5vZGVzW2NvbnRyb2xOb2RlRnJvbS5pZF0gPSBjb250cm9sTm9kZUZyb207XG4gICAgICB0aGlzLmJvZHkubm9kZUluZGljZXMucHVzaChjb250cm9sTm9kZUZyb20uaWQpO1xuICAgICAgdGhpcy5ib2R5Lm5vZGVzW2NvbnRyb2xOb2RlVG8uaWRdID0gY29udHJvbE5vZGVUbztcbiAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5wdXNoKGNvbnRyb2xOb2RlVG8uaWQpO1xuXG4gICAgICAvLyB0ZW1wb3JhcmlseSBvdmVybG9hZCBVSSBmdW5jdGlvbnMsIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSBiZWNhdXNlIG9mIF90ZW1wb3JhcnlCaW5kVUlcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uVG91Y2hcIiwgdGhpcy5fY29udHJvbE5vZGVUb3VjaC5iaW5kKHRoaXMpKTsgLy8gdXNlZCB0byBnZXQgdGhlIHBvc2l0aW9uXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvblRhcFwiLCAoKSA9PiB7fSk7IC8vIGRpc2FibGVkXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkhvbGRcIiwgKCkgPT4ge30pOyAvLyBkaXNhYmxlZFxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFxuICAgICAgICBcIm9uRHJhZ1N0YXJ0XCIsXG4gICAgICAgIHRoaXMuX2NvbnRyb2xOb2RlRHJhZ1N0YXJ0LmJpbmQodGhpcylcbiAgICAgICk7IC8vIHVzZWQgdG8gc2VsZWN0IGNvbnRyb2wgbm9kZVxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25EcmFnXCIsIHRoaXMuX2NvbnRyb2xOb2RlRHJhZy5iaW5kKHRoaXMpKTsgLy8gdXNlZCB0byBkcmFnIGNvbnRyb2wgbm9kZVxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25EcmFnRW5kXCIsIHRoaXMuX2NvbnRyb2xOb2RlRHJhZ0VuZC5iaW5kKHRoaXMpKTsgLy8gdXNlZCB0byBjb25uZWN0IG9yIHJldmVydCBjb250cm9sIG5vZGVzXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbk1vdXNlTW92ZVwiLCAoKSA9PiB7fSk7IC8vIGRpc2FibGVkXG5cbiAgICAgIC8vIGNyZWF0ZSBmdW5jdGlvbiB0byBwb3NpdGlvbiBjb250cm9sIG5vZGVzIGNvcnJlY3RseSBvbiBtb3ZlbWVudFxuICAgICAgLy8gYXV0b21hdGljYWxseSBjbGVhbmVkIHVwIGJlY2F1c2Ugd2UgdXNlIHRoZSB0ZW1wb3JhcnkgYmluZFxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZEV2ZW50KFwiYmVmb3JlRHJhd2luZ1wiLCAoY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGVkZ2UuZWRnZVR5cGUuZmluZEJvcmRlclBvc2l0aW9ucyhjdHgpO1xuICAgICAgICBpZiAoY29udHJvbE5vZGVGcm9tLnNlbGVjdGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIGNvbnRyb2xOb2RlRnJvbS54ID0gcG9zaXRpb25zLmZyb20ueDtcbiAgICAgICAgICBjb250cm9sTm9kZUZyb20ueSA9IHBvc2l0aW9ucy5mcm9tLnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRyb2xOb2RlVG8uc2VsZWN0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgY29udHJvbE5vZGVUby54ID0gcG9zaXRpb25zLnRvLng7XG4gICAgICAgICAgY29udHJvbE5vZGVUby55ID0gcG9zaXRpb25zLnRvLnk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBldmVyeXRoaW5nIGluIHRoZSBzZWxlY3Rpb25cbiAgICovXG4gIGRlbGV0ZVNlbGVjdGVkKCkge1xuICAgIC8vIHdoZW4gdXNpbmcgdGhlIGd1aSwgZW5hYmxlIGVkaXQgbW9kZSBpZiBpdCB3YXNudCBhbHJlYWR5LlxuICAgIGlmICh0aGlzLmVkaXRNb2RlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgYW55IGJvdW5kIGZ1bmN0aW9ucyBvciBldmVudHMsIHJlbW92ZSBjb250cm9sIG5vZGVzLCByZXN0b3JlIHBoeXNpY3NcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgdGhpcy5pbk1vZGUgPSBcImRlbGV0ZVwiO1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlSWRzKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRFZGdlcyA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZEVkZ2VJZHMoKTtcbiAgICBsZXQgZGVsZXRlRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgaWYgKHNlbGVjdGVkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkubm9kZXNbc2VsZWN0ZWROb2Rlc1tpXV0uaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgYWxlcnQoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXVtcImRlbGV0ZUNsdXN0ZXJFcnJvclwiXSB8fFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZGVsZXRlQ2x1c3RlckVycm9yXCJdXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuZGVsZXRlTm9kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRlbGV0ZUZ1bmN0aW9uID0gdGhpcy5vcHRpb25zLmRlbGV0ZU5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZEVkZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmRlbGV0ZUVkZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkZWxldGVGdW5jdGlvbiA9IHRoaXMub3B0aW9ucy5kZWxldGVFZGdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGVsZXRlRnVuY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY29uc3QgZGF0YSA9IHsgbm9kZXM6IHNlbGVjdGVkTm9kZXMsIGVkZ2VzOiBzZWxlY3RlZEVkZ2VzIH07XG4gICAgICBpZiAoZGVsZXRlRnVuY3Rpb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGRlbGV0ZUZ1bmN0aW9uKGRhdGEsIChmaW5hbGl6ZWREYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0aGlzLmluTW9kZSA9PT0gXCJkZWxldGVcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkucmVtb3ZlKGZpbmFsaXplZERhdGEuZWRnZXMpO1xuICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLnJlbW92ZShmaW5hbGl6ZWREYXRhLm5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgZnVuY3Rpb24gZm9yIGRlbGV0ZSBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsIGNhbGxiYWNrKVwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzLmdldERhdGFTZXQoKS5yZW1vdmUoc2VsZWN0ZWRFZGdlcyk7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5ub2Rlcy5nZXREYXRhU2V0KCkucmVtb3ZlKHNlbGVjdGVkTm9kZXMpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQUklWQVRFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vXG5cbiAgLyoqXG4gICAqIGRyYXcgb3IgcmVtb3ZlIHRoZSBET01cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXR1cCgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIEVuYWJsZSB0aGUgR1VJXG4gICAgICB0aGlzLmd1aUVuYWJsZWQgPSB0cnVlO1xuXG4gICAgICB0aGlzLl9jcmVhdGVXcmFwcGVycygpO1xuICAgICAgaWYgKHRoaXMuZWRpdE1vZGUgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUVkaXRCdXR0b24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZW1vdmVNYW5pcHVsYXRpb25ET00oKTtcblxuICAgICAgLy8gZGlzYWJsZSB0aGUgZ3VpXG4gICAgICB0aGlzLmd1aUVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIHRoZSBkaXYgb3ZlcmxheXMgdGhhdCBjb250YWluIHRoZSBET01cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVXcmFwcGVycygpIHtcbiAgICAvLyBsb2FkIHRoZSBtYW5pcHVsYXRvciBIVE1MIGVsZW1lbnRzLiBBbGwgc3R5bGluZyBkb25lIGluIGNzcy5cbiAgICBpZiAodGhpcy5tYW5pcHVsYXRpb25EaXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuY2xhc3NOYW1lID0gXCJ2aXMtbWFuaXB1bGF0aW9uXCI7XG4gICAgICBpZiAodGhpcy5lZGl0TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgfVxuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuICAgIH1cblxuICAgIC8vIGNvbnRhaW5lciBmb3IgdGhlIGVkaXQgYnV0dG9uLlxuICAgIGlmICh0aGlzLmVkaXRNb2RlRGl2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdE1vZGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5lZGl0TW9kZURpdi5jbGFzc05hbWUgPSBcInZpcy1lZGl0LW1vZGVcIjtcbiAgICAgIGlmICh0aGlzLmVkaXRNb2RlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuZWRpdE1vZGVEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0TW9kZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgfVxuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5lZGl0TW9kZURpdik7XG4gICAgfVxuXG4gICAgLy8gY29udGFpbmVyIGZvciB0aGUgY2xvc2UgZGl2IGJ1dHRvblxuICAgIGlmICh0aGlzLmNsb3NlRGl2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICAgICAgdGhpcy5jbG9zZURpdi5jbGFzc05hbWUgPSBcInZpcy1jbG9zZVwiO1xuICAgICAgdGhpcy5jbG9zZURpdi5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiLFxuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXT8uW1wiY2xvc2VcIl0gPz9cbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiY2xvc2VcIl1cbiAgICAgICk7XG4gICAgICB0aGlzLmNsb3NlRGl2LnN0eWxlLmRpc3BsYXkgPSB0aGlzLm1hbmlwdWxhdGlvbkRpdi5zdHlsZS5kaXNwbGF5O1xuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jbG9zZURpdik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlIGEgbmV3IHRhcmdldCBub2RlLiBVc2VkIGZvciBjcmVhdGluZyBuZXcgZWRnZXMgYW5kIGVkaXRpbmcgZWRnZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybnMge05vZGV9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0TmV3VGFyZ2V0Tm9kZSh4LCB5KSB7XG4gICAgY29uc3QgY29udHJvbE5vZGVTdHlsZSA9IGRlZXBFeHRlbmQoe30sIHRoaXMub3B0aW9ucy5jb250cm9sTm9kZVN0eWxlKTtcblxuICAgIGNvbnRyb2xOb2RlU3R5bGUuaWQgPSBcInRhcmdldE5vZGVcIiArIHJhbmRvbVVVSUQoKTtcbiAgICBjb250cm9sTm9kZVN0eWxlLmhpZGRlbiA9IGZhbHNlO1xuICAgIGNvbnRyb2xOb2RlU3R5bGUucGh5c2ljcyA9IGZhbHNlO1xuICAgIGNvbnRyb2xOb2RlU3R5bGUueCA9IHg7XG4gICAgY29udHJvbE5vZGVTdHlsZS55ID0geTtcblxuICAgIC8vIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBib3VuZGluZyBib3ggaW4gb3JkZXIgZm9yIHRoZSBub2RlcyB0byBiZSBkcmF3biBpbW1lZGlhdGVseVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGUoY29udHJvbE5vZGVTdHlsZSk7XG4gICAgbm9kZS5zaGFwZS5ib3VuZGluZ0JveCA9IHsgbGVmdDogeCwgcmlnaHQ6IHgsIHRvcDogeSwgYm90dG9tOiB5IH07XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGVkaXQgYnV0dG9uXG4gICAqL1xuICBfY3JlYXRlRWRpdEJ1dHRvbigpIHtcbiAgICAvLyByZXN0b3JlIGV2ZXJ5dGhpbmcgdG8gaXQncyBvcmlnaW5hbCBzdGF0ZSAoaWYgYXBwbGljYWJsZSlcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgLy8gcmVzZXQgdGhlIG1hbmlwdWxhdGlvbkRPTVxuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NID0ge307XG5cbiAgICAvLyBlbXB0eSB0aGUgZWRpdE1vZGVEaXZcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5lZGl0TW9kZURpdik7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGNvbnRlbnRzIGZvciB0aGUgZWRpdE1vZGUgYnV0dG9uXG4gICAgY29uc3QgbG9jYWxlID0gdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV07XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKFxuICAgICAgXCJlZGl0TW9kZVwiLFxuICAgICAgXCJ2aXMtZWRpdCB2aXMtZWRpdC1tb2RlXCIsXG4gICAgICBsb2NhbGVbXCJlZGl0XCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJlZGl0XCJdXG4gICAgKTtcbiAgICB0aGlzLmVkaXRNb2RlRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAvLyBiaW5kIGEgaGFtbWVyIGxpc3RlbmVyIHRvIHRoZSBidXR0b24sIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHRvZ2dsZUVkaXRNb2RlLlxuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy50b2dnbGVFZGl0TW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGZ1bmN0aW9uIGNsZWFucyB1cCBhZnRlciBldmVyeXRoaW5nIHRoaXMgbW9kdWxlIGRvZXMuIFRlbXBvcmFyeSBlbGVtZW50cywgZnVuY3Rpb25zIGFuZCBldmVudHMgYXJlIHJlbW92ZWQsIHBoeXNpY3MgcmVzdG9yZWQsIGhhbW1lcnMgcmVtb3ZlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICAvLyBub3QgaW4gbW9kZVxuICAgIHRoaXMuaW5Nb2RlID0gZmFsc2U7XG5cbiAgICAvLyBfY2xlYW4gdGhlIGRpdnNcbiAgICBpZiAodGhpcy5ndWlFbmFibGVkID09PSB0cnVlKSB7XG4gICAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5lZGl0TW9kZURpdik7XG4gICAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuXG4gICAgICAvLyByZW1vdmVzIGFsbCB0aGUgYmluZGluZ3MgYW5kIG92ZXJsb2Fkc1xuICAgICAgdGhpcy5fY2xlYW51cERPTUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHRlbXBvcmFyeSBub2RlcyBhbmQgZWRnZXNcbiAgICB0aGlzLl9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcygpO1xuXG4gICAgLy8gcmVzdG9yZSBvdmVybG9hZGVkIFVJIGZ1bmN0aW9uc1xuICAgIHRoaXMuX3VuYmluZFRlbXBvcmFyeVVJcygpO1xuXG4gICAgLy8gcmVtb3ZlIHRoZSB0ZW1wb3JhcnlFdmVudEZ1bmN0aW9uc1xuICAgIHRoaXMuX3VuYmluZFRlbXBvcmFyeUV2ZW50cygpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgcGh5c2ljcyBpZiByZXF1aXJlZFxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJyZXN0b3JlUGh5c2ljc1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFYWNoIGRvbSBlbGVtZW50IGhhcyBpdCdzIG93biBoYW1tZXIuIFRoZXkgYXJlIHN0b3JlZCBpbiB0aGlzLm1hbmlwdWxhdGlvbkhhbW1lcnMuIFRoaXMgY2xlYW5zIHRoZW0gdXAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW51cERPTUV2ZW50TGlzdGVuZXJzKCkge1xuICAgIC8vIF9jbGVhbiBET00gZXZlbnQgbGlzdGVuZXIgYmluZGluZ3NcbiAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2RvbUV2ZW50TGlzdGVuZXJDbGVhbnVwUXVldWUuc3BsaWNlKDApKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIERPTSBlbGVtZW50cyBjcmVhdGVkIGJ5IHRoaXMgbW9kdWxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZU1hbmlwdWxhdGlvbkRPTSgpIHtcbiAgICAvLyByZW1vdmVzIGFsbCB0aGUgYmluZGluZ3MgYW5kIG92ZXJsb2Fkc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICAvLyBlbXB0eSB0aGUgbWFuaXB1bGF0aW9uIGRpdnNcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuICAgIHJlY3Vyc2l2ZURPTURlbGV0ZSh0aGlzLmVkaXRNb2RlRGl2KTtcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5jbG9zZURpdik7XG5cbiAgICAvLyByZW1vdmUgdGhlIG1hbmlwdWxhdGlvbiBkaXZzXG4gICAgaWYgKHRoaXMubWFuaXB1bGF0aW9uRGl2KSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5yZW1vdmVDaGlsZCh0aGlzLm1hbmlwdWxhdGlvbkRpdik7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXRNb2RlRGl2KSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5yZW1vdmVDaGlsZCh0aGlzLmVkaXRNb2RlRGl2KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvc2VEaXYpIHtcbiAgICAgIHRoaXMuY2FudmFzLmZyYW1lLnJlbW92ZUNoaWxkKHRoaXMuY2xvc2VEaXYpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgcmVmZXJlbmNlcyB0byB1bmRlZmluZWRcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRNb2RlRGl2ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2xvc2VEaXYgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIGEgc2VwZXJhdG9yIGxpbmUuIHRoZSBpbmRleCBpcyB0byBkaWZmZXJlbnRpYXRlIGluIHRoZSBtYW5pcHVsYXRpb24gZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXg9MV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVTZXBlcmF0b3IoaW5kZXggPSAxKSB7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01bXCJzZXBlcmF0b3JMaW5lRGl2XCIgKyBpbmRleF0gPVxuICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtcInNlcGVyYXRvckxpbmVEaXZcIiArIGluZGV4XS5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtc2VwYXJhdG9yLWxpbmVcIjtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW1wic2VwZXJhdG9yTGluZURpdlwiICsgaW5kZXhdXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgRE9NIGZ1bmN0aW9ucyBmb3IgYnV0dG9ucyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVBZGROb2RlQnV0dG9uKGxvY2FsZSkge1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihcbiAgICAgIFwiYWRkTm9kZVwiLFxuICAgICAgXCJ2aXMtYWRkXCIsXG4gICAgICBsb2NhbGVbXCJhZGROb2RlXCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJhZGROb2RlXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5hZGROb2RlTW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQWRkRWRnZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImFkZEVkZ2VcIixcbiAgICAgIFwidmlzLWNvbm5lY3RcIixcbiAgICAgIGxvY2FsZVtcImFkZEVkZ2VcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImFkZEVkZ2VcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLmFkZEVkZ2VNb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVFZGl0Tm9kZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImVkaXROb2RlXCIsXG4gICAgICBcInZpcy1lZGl0XCIsXG4gICAgICBsb2NhbGVbXCJlZGl0Tm9kZVwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdE5vZGVcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLmVkaXROb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVFZGl0RWRnZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImVkaXRFZGdlXCIsXG4gICAgICBcInZpcy1lZGl0XCIsXG4gICAgICBsb2NhbGVbXCJlZGl0RWRnZVwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdEVkZ2VcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLmVkaXRFZGdlTW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlRGVsZXRlQnV0dG9uKGxvY2FsZSkge1xuICAgIGxldCBkZWxldGVCdG5DbGFzcztcbiAgICBpZiAodGhpcy5vcHRpb25zLnJ0bCkge1xuICAgICAgZGVsZXRlQnRuQ2xhc3MgPSBcInZpcy1kZWxldGUtcnRsXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUJ0bkNsYXNzID0gXCJ2aXMtZGVsZXRlXCI7XG4gICAgfVxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihcbiAgICAgIFwiZGVsZXRlXCIsXG4gICAgICBkZWxldGVCdG5DbGFzcyxcbiAgICAgIGxvY2FsZVtcImRlbFwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZGVsXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5kZWxldGVTZWxlY3RlZC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQmFja0J1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImJhY2tcIixcbiAgICAgIFwidmlzLWJhY2tcIixcbiAgICAgIGxvY2FsZVtcImJhY2tcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImJhY2tcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBpZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gICAqIEBwYXJhbSB7bGFiZWx9IGxhYmVsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbENsYXNzTmFtZVxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQnV0dG9uKGlkLCBjbGFzc05hbWUsIGxhYmVsLCBsYWJlbENsYXNzTmFtZSA9IFwidmlzLWxhYmVsXCIpIHtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiRGl2XCJdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiRGl2XCJdLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiBcIiArIGNsYXNzTmFtZTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiTGFiZWxcIl0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJMYWJlbFwiXS5jbGFzc05hbWUgPSBsYWJlbENsYXNzTmFtZTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiTGFiZWxcIl0uaW5uZXJUZXh0ID0gbGFiZWw7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01baWQgKyBcIkRpdlwiXS5hcHBlbmRDaGlsZChcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJMYWJlbFwiXVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJEaXZcIl07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVEZXNjcmlwdGlvbihsYWJlbCkge1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW1wiZGVzY3JpcHRpb25MYWJlbFwiXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01bXCJkZXNjcmlwdGlvbkxhYmVsXCJdLmNsYXNzTmFtZSA9IFwidmlzLW5vbmVcIjtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtcImRlc2NyaXB0aW9uTGFiZWxcIl0uaW5uZXJUZXh0ID0gbGFiZWw7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuYXBwZW5kQ2hpbGQodGhpcy5tYW5pcHVsYXRpb25ET01bXCJkZXNjcmlwdGlvbkxhYmVsXCJdKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVuZCBvZiBET00gZnVuY3Rpb25zIGZvciBidXR0b25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIHRoaXMgYmluZHMgYW4gZXZlbnQgdW50aWwgY2xlYW51cCBieSB0aGUgY2xlYW4gZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV3RnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90ZW1wb3JhcnlCaW5kRXZlbnQoZXZlbnQsIG5ld0Z1bmN0aW9uKSB7XG4gICAgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucy5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGJvdW5kRnVuY3Rpb246IG5ld0Z1bmN0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKGV2ZW50LCBuZXdGdW5jdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBvdmVycmlkZXMgYW4gVUkgZnVuY3Rpb24gdW50aWwgY2xlYW51cCBieSB0aGUgY2xlYW4gZnVuY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFVJZnVuY3Rpb25OYW1lXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5ld0Z1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdGVtcG9yYXJ5QmluZFVJKFVJZnVuY3Rpb25OYW1lLCBuZXdGdW5jdGlvbikge1xuICAgIGlmICh0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnNbVUlmdW5jdGlvbk5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnNbVUlmdW5jdGlvbk5hbWVdID1cbiAgICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzW1VJZnVuY3Rpb25OYW1lXTtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVyc1tVSWZ1bmN0aW9uTmFtZV0gPSBuZXdGdW5jdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoaXMgVUkgZnVuY3Rpb24gZG9lcyBub3QgZXhpc3QuIFR5cG8/IFlvdSB0cmllZDogXCIgK1xuICAgICAgICAgIFVJZnVuY3Rpb25OYW1lICtcbiAgICAgICAgICBcIiBwb3NzaWJsZSBhcmU6IFwiICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyh0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSB0aGUgb3ZlcnJpZGRlbiBVSSBmdW5jdGlvbnMgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdW5iaW5kVGVtcG9yYXJ5VUlzKCkge1xuICAgIGZvciAoY29uc3QgZnVuY3Rpb25OYW1lIGluIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuICAgICAgICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnMsXG4gICAgICAgICAgZnVuY3Rpb25OYW1lXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnNbZnVuY3Rpb25OYW1lXSA9XG4gICAgICAgICAgdGhpcy50ZW1wb3JhcnlVSUZ1bmN0aW9uc1tmdW5jdGlvbk5hbWVdO1xuICAgICAgICBkZWxldGUgdGhpcy50ZW1wb3JhcnlVSUZ1bmN0aW9uc1tmdW5jdGlvbk5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRlbXBvcmFyeVVJRnVuY3Rpb25zID0ge307XG4gIH1cblxuICAvKipcbiAgICogVW5iaW5kIHRoZSBldmVudHMgY3JlYXRlZCBieSBfdGVtcG9yYXJ5QmluZEV2ZW50XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdW5iaW5kVGVtcG9yYXJ5RXZlbnRzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZXZlbnROYW1lID0gdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9uc1tpXS5ldmVudDtcbiAgICAgIGNvbnN0IGJvdW5kRnVuY3Rpb24gPSB0aGlzLnRlbXBvcmFyeUV2ZW50RnVuY3Rpb25zW2ldLmJvdW5kRnVuY3Rpb247XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoZXZlbnROYW1lLCBib3VuZEZ1bmN0aW9uKTtcbiAgICB9XG4gICAgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgYW4gaGFtbWVyIGluc3RhbmNlIHRvIGEgRE9NIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZG9tRWxlbWVudFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBib3VuZEZ1bmN0aW9uXG4gICAqL1xuICBfYmluZEVsZW1lbnRFdmVudHMoZG9tRWxlbWVudCwgYm91bmRGdW5jdGlvbikge1xuICAgIC8vIEJpbmQgdG91Y2ggZXZlbnRzLlxuICAgIGNvbnN0IGhhbW1lciA9IG5ldyBIYW1tZXIoZG9tRWxlbWVudCwge30pO1xuICAgIG9uVG91Y2goaGFtbWVyLCBib3VuZEZ1bmN0aW9uKTtcbiAgICB0aGlzLl9kb21FdmVudExpc3RlbmVyQ2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgaGFtbWVyLmRlc3Ryb3koKTtcbiAgICB9KTtcblxuICAgIC8vIEJpbmQga2V5Ym9hcmQgZXZlbnRzLlxuICAgIGNvbnN0IGtleXVwTGlzdGVuZXIgPSAoeyBrZXlDb2RlLCBrZXkgfSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gXCJFbnRlclwiIHx8IGtleSA9PT0gXCIgXCIgfHwga2V5Q29kZSA9PT0gMTMgfHwga2V5Q29kZSA9PT0gMzIpIHtcbiAgICAgICAgYm91bmRGdW5jdGlvbigpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwga2V5dXBMaXN0ZW5lciwgZmFsc2UpO1xuICAgIHRoaXMuX2RvbUV2ZW50TGlzdGVuZXJDbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgICBkb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBrZXl1cExpc3RlbmVyLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTmVhdGx5IGNsZWFuIHVwIHRlbXBvcmFyeSBlZGdlcyBhbmQgbm9kZXNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcygpIHtcbiAgICAvLyBfY2xlYW4gdGVtcG9yYXJ5IGVkZ2VzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRlbXBvcmFyeUlkcy5lZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5ib2R5LmVkZ2VzW3RoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzW2ldXS5kaXNjb25uZWN0KCk7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmVkZ2VzW3RoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzW2ldXTtcbiAgICAgIGNvbnN0IGluZGV4VGVtcEVkZ2UgPSB0aGlzLmJvZHkuZWRnZUluZGljZXMuaW5kZXhPZihcbiAgICAgICAgdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXNbaV1cbiAgICAgICk7XG4gICAgICBpZiAoaW5kZXhUZW1wRWRnZSAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLnNwbGljZShpbmRleFRlbXBFZGdlLCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBfY2xlYW4gdGVtcG9yYXJ5IG5vZGVzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1tpXV07XG4gICAgICBjb25zdCBpbmRleFRlbXBOb2RlID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmluZGV4T2YoXG4gICAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLm5vZGVzW2ldXG4gICAgICApO1xuICAgICAgaWYgKGluZGV4VGVtcE5vZGUgIT09IC0xKSB7XG4gICAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5zcGxpY2UoaW5kZXhUZW1wTm9kZSwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50ZW1wb3JhcnlJZHMgPSB7IG5vZGVzOiBbXSwgZWRnZXM6IFtdIH07XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRURJVCBFREdFIEZVTkNUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIHRoZSB0b3VjaCBpcyB1c2VkIHRvIGdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGluaXRpYWwgY2xpY2tcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29udHJvbE5vZGVUb3VjaChldmVudCkge1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgIHRoaXMubGFzdFRvdWNoID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgdGhpcy5sYXN0VG91Y2gudHJhbnNsYXRpb24gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbik7IC8vIGNvcHkgdGhlIG9iamVjdFxuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBkcmFnIHN0YXJ0IGlzIHVzZWQgdG8gbWFyayBvbmUgb2YgdGhlIGNvbnRyb2wgbm9kZXMgYXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29udHJvbE5vZGVEcmFnU3RhcnQoKSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMubGFzdFRvdWNoO1xuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuICAgIGNvbnN0IGZyb20gPSB0aGlzLmJvZHkubm9kZXNbdGhpcy50ZW1wb3JhcnlJZHMubm9kZXNbMF1dO1xuICAgIGNvbnN0IHRvID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMudGVtcG9yYXJ5SWRzLm5vZGVzWzFdXTtcbiAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW3RoaXMuZWRnZUJlaW5nRWRpdGVkSWRdO1xuICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGZyb21TZWxlY3QgPSBmcm9tLmlzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuICAgIGNvbnN0IHRvU2VsZWN0ID0gdG8uaXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaik7XG5cbiAgICBpZiAoZnJvbVNlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlID0gZnJvbTtcbiAgICAgIGVkZ2UuZWRnZVR5cGUuZnJvbSA9IGZyb207XG4gICAgfSBlbHNlIGlmICh0b1NlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlID0gdG87XG4gICAgICBlZGdlLmVkZ2VUeXBlLnRvID0gdG87XG4gICAgfVxuXG4gICAgLy8gd2UgdXNlIHRoZSBzZWxlY3Rpb24gdG8gZmluZCB0aGUgbm9kZSB0aGF0IGlzIGJlaW5nIGRyYWdnZWQuIFdlIGV4cGxpY2l0bHkgc2VsZWN0IGl0IGhlcmUuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0T2JqZWN0KHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvKipcbiAgICogZHJhZ2dpbmcgdGhlIGNvbnRyb2wgbm9kZXMgb3IgdGhlIGNhbnZhc1xuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb250cm9sTm9kZURyYWcoZXZlbnQpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiZGlzYWJsZVBoeXNpY3NcIik7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuYm9keS5mdW5jdGlvbnMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IHBvcyA9IHRoaXMuY2FudmFzLkRPTXRvQ2FudmFzKHBvaW50ZXIpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlLnggPSBwb3MueDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS55ID0gcG9zLnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLm9uRHJhZyhldmVudCk7XG4gICAgfVxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNvbm5lY3Rpbmcgb3IgcmVzdG9yaW5nIHRoZSBjb250cm9sIG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb250cm9sTm9kZURyYWdFbmQoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgY29uc3QgcG9pbnRlck9iaiA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fcG9pbnRlclRvUG9zaXRpb25PYmplY3QocG9pbnRlcik7XG4gICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1t0aGlzLmVkZ2VCZWluZ0VkaXRlZElkXTtcbiAgICAvLyBpZiB0aGUgbm9kZSB0aGF0IHdhcyBkcmFnZ2VkIGlzIG5vdCBhIGNvbnRyb2wgbm9kZSwgcmV0dXJuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gd2UgdXNlIHRoZSBzZWxlY3Rpb24gdG8gZmluZCB0aGUgbm9kZSB0aGF0IGlzIGJlaW5nIGRyYWdnZWQuIFdlIGV4cGxpY2l0bHkgREVzZWxlY3QgdGhlIGNvbnRyb2wgbm9kZSBoZXJlLlxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZUlkcyA9XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuICAgIGxldCBub2RlID0gdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGkgPSBvdmVybGFwcGluZ05vZGVJZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChvdmVybGFwcGluZ05vZGVJZHNbaV0gIT09IHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS5pZCkge1xuICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW292ZXJsYXBwaW5nTm9kZUlkc1tpXV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBwZXJmb3JtIHRoZSBjb25uZWN0aW9uXG4gICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG5vZGUuaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgIGFsZXJ0KFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdW1wiY3JlYXRlRWRnZUVycm9yXCJdIHx8XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiY3JlYXRlRWRnZUVycm9yXCJdXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmcm9tID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMudGVtcG9yYXJ5SWRzLm5vZGVzWzBdXTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS5pZCA9PT0gZnJvbS5pZCkge1xuICAgICAgICAgIHRoaXMuX3BlcmZvcm1FZGl0RWRnZShub2RlLmlkLCBlZGdlLnRvLmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9wZXJmb3JtRWRpdEVkZ2UoZWRnZS5mcm9tLmlkLCBub2RlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlZGdlLnVwZGF0ZUVkZ2VUeXBlKCk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzdG9yZVBoeXNpY3NcIik7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EIE9GIEVESVQgRURHRSBGVU5DVElPTlMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQUREIEVER0UgRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cbiAgLyoqXG4gICAqIHRoZSBmdW5jdGlvbiBib3VuZCB0byB0aGUgc2VsZWN0aW9uIGV2ZW50LiBJdCBjaGVja3MgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIGNsdXN0ZXIgYW5kIGNoYW5nZXMgdGhlIGRlc2NyaXB0aW9uXG4gICAqIHRvIHdhbGsgdGhlIHVzZXIgdGhyb3VnaCB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVDb25uZWN0KGV2ZW50KSB7XG4gICAgLy8gY2hlY2sgdG8gYXZvaWQgZG91YmxlIGZpcmVpbmcgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICBpZiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLSB0aGlzLnRvdWNoVGltZSA+IDEwMCkge1xuICAgICAgdGhpcy5sYXN0VG91Y2ggPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICAgIHRoaXMubGFzdFRvdWNoLnRyYW5zbGF0aW9uID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uXG4gICAgICApOyAvLyBjb3B5IHRoZSBvYmplY3RcblxuICAgICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIuZHJhZy5wb2ludGVyID0gdGhpcy5sYXN0VG91Y2g7IC8vIERyYWcgcG9pbnRlciBpcyBub3QgdXBkYXRlZCB3aGVuIGFkZGluZyBlZGdlc1xuICAgICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIuZHJhZy50cmFuc2xhdGlvbiA9IHRoaXMubGFzdFRvdWNoLnRyYW5zbGF0aW9uO1xuXG4gICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5sYXN0VG91Y2g7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdChwb2ludGVyKTtcblxuICAgICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobm9kZS5pc0NsdXN0ZXIgPT09IHRydWUpIHtcbiAgICAgICAgICBhbGVydChcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdW1wiY3JlYXRlRWRnZUVycm9yXCJdIHx8XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJjcmVhdGVFZGdlRXJyb3JcIl1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNyZWF0ZSBhIG5vZGUgdGhlIHRlbXBvcmFyeSBsaW5lIGNhbiBsb29rIGF0XG4gICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuX2dldE5ld1RhcmdldE5vZGUobm9kZS54LCBub2RlLnkpO1xuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1t0YXJnZXROb2RlLmlkXSA9IHRhcmdldE5vZGU7XG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLnB1c2godGFyZ2V0Tm9kZS5pZCk7XG5cbiAgICAgICAgICAvLyBjcmVhdGUgYSB0ZW1wb3JhcnkgZWRnZVxuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25FZGdlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVFZGdlKHtcbiAgICAgICAgICAgIGlkOiBcImNvbm5lY3Rpb25FZGdlXCIgKyByYW5kb21VVUlEKCksXG4gICAgICAgICAgICBmcm9tOiBub2RlLmlkLFxuICAgICAgICAgICAgdG86IHRhcmdldE5vZGUuaWQsXG4gICAgICAgICAgICBwaHlzaWNzOiBmYWxzZSxcbiAgICAgICAgICAgIHNtb290aDoge1xuICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICB0eXBlOiBcImNvbnRpbnVvdXNcIixcbiAgICAgICAgICAgICAgcm91bmRuZXNzOiAwLjUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYm9keS5lZGdlc1tjb25uZWN0aW9uRWRnZS5pZF0gPSBjb25uZWN0aW9uRWRnZTtcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZUluZGljZXMucHVzaChjb25uZWN0aW9uRWRnZS5pZCk7XG5cbiAgICAgICAgICB0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5wdXNoKHRhcmdldE5vZGUuaWQpO1xuICAgICAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzLnB1c2goY29ubmVjdGlvbkVkZ2UuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnRvdWNoVGltZSA9IG5ldyBEYXRlKCkudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYWdDb250cm9sTm9kZShldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcblxuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuICAgIC8vIHJlbWVtYmVyIHRoZSBlZGdlIGlkXG4gICAgbGV0IGNvbm5lY3RGcm9tSWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbm5lY3RGcm9tSWQgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXNbMF1dLmZyb21JZDtcbiAgICB9XG5cbiAgICAvLyBnZXQgdGhlIG92ZXJsYXBwaW5nIG5vZGUgYnV0IE5PVCB0aGUgdGVtcG9yYXJ5IG5vZGU7XG4gICAgY29uc3Qgb3ZlcmxhcHBpbmdOb2RlSWRzID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fZ2V0QWxsTm9kZXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaik7XG4gICAgbGV0IG5vZGUgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IG92ZXJsYXBwaW5nTm9kZUlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgLy8gaWYgdGhlIG5vZGUgaWQgaXMgTk9UIGEgdGVtcG9yYXJ5IG5vZGUsIGFjY2VwdCB0aGUgbm9kZS5cbiAgICAgIGlmICh0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5pbmRleE9mKG92ZXJsYXBwaW5nTm9kZUlkc1tpXSkgPT09IC0xKSB7XG4gICAgICAgIG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbb3ZlcmxhcHBpbmdOb2RlSWRzW2ldXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXZlbnQuY29udHJvbEVkZ2UgPSB7IGZyb206IGNvbm5lY3RGcm9tSWQsIHRvOiBub2RlID8gbm9kZS5pZCA6IHVuZGVmaW5lZCB9O1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICBcImNvbnRyb2xOb2RlRHJhZ2dpbmdcIixcbiAgICAgIGV2ZW50LFxuICAgICAgcG9pbnRlclxuICAgICk7XG5cbiAgICBpZiAodGhpcy50ZW1wb3JhcnlJZHMubm9kZXNbMF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1swXV07IC8vIHRoZXJlIGlzIG9ubHkgb25lIHRlbXAgbm9kZSBpbiB0aGUgYWRkIGVkZ2UgbW9kZS5cbiAgICAgIHRhcmdldE5vZGUueCA9IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCk7XG4gICAgICB0YXJnZXROb2RlLnkgPSB0aGlzLmNhbnZhcy5fWWNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLnkpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLm9uRHJhZyhldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbm5lY3QgdGhlIG5ldyBlZGdlIHRvIHRoZSB0YXJnZXQgaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIHJlbW92ZSB0ZW1wIGxpbmVcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluaXNoQ29ubmVjdChldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICBjb25zdCBwb2ludGVyT2JqID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcblxuICAgIC8vIHJlbWVtYmVyIHRoZSBlZGdlIGlkXG4gICAgbGV0IGNvbm5lY3RGcm9tSWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbm5lY3RGcm9tSWQgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXNbMF1dLmZyb21JZDtcbiAgICB9XG5cbiAgICAvLyBnZXQgdGhlIG92ZXJsYXBwaW5nIG5vZGUgYnV0IE5PVCB0aGUgdGVtcG9yYXJ5IG5vZGU7XG4gICAgY29uc3Qgb3ZlcmxhcHBpbmdOb2RlSWRzID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fZ2V0QWxsTm9kZXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaik7XG4gICAgbGV0IG5vZGUgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IG92ZXJsYXBwaW5nTm9kZUlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgLy8gaWYgdGhlIG5vZGUgaWQgaXMgTk9UIGEgdGVtcG9yYXJ5IG5vZGUsIGFjY2VwdCB0aGUgbm9kZS5cbiAgICAgIGlmICh0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5pbmRleE9mKG92ZXJsYXBwaW5nTm9kZUlkc1tpXSkgPT09IC0xKSB7XG4gICAgICAgIG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbb3ZlcmxhcHBpbmdOb2RlSWRzW2ldXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdGVtcG9yYXJ5IG5vZGVzIGFuZCBlZGdlcy5cbiAgICB0aGlzLl9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcygpO1xuXG4gICAgLy8gcGVyZm9ybSB0aGUgY29ubmVjdGlvblxuICAgIGlmIChub2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChub2RlLmlzQ2x1c3RlciA9PT0gdHJ1ZSkge1xuICAgICAgICBhbGVydChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXVtcImNyZWF0ZUVkZ2VFcnJvclwiXSB8fFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImNyZWF0ZUVkZ2VFcnJvclwiXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tjb25uZWN0RnJvbUlkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGUuaWRdICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fcGVyZm9ybUFkZEVkZ2UoY29ubmVjdEZyb21JZCwgbm9kZS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBldmVudC5jb250cm9sRWRnZSA9IHsgZnJvbTogY29ubmVjdEZyb21JZCwgdG86IG5vZGUgPyBub2RlLmlkIDogdW5kZWZpbmVkIH07XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgIFwiY29udHJvbE5vZGVEcmFnRW5kXCIsXG4gICAgICBldmVudCxcbiAgICAgIHBvaW50ZXJcbiAgICApO1xuXG4gICAgLy8gTm8gbmVlZCB0byBkbyBfZ2VuZXJhdGVjbGlja2V2ZW50KCdkcmFnRW5kJykgaGVyZSwgdGhlIHJlZ3VsYXIgZHJhZ0VuZCBldmVudCBmaXJlcy5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYWdTdGFydEVkZ2UoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5sYXN0VG91Y2g7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgIFwiZHJhZ1N0YXJ0XCIsXG4gICAgICBldmVudCxcbiAgICAgIHBvaW50ZXIsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQgT0YgQUREIEVER0UgRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQZXJmb3JtaW5nIGFsbCB0aGUgYWN0dWFsIGRhdGEgbWFuaXB1bGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIEFkZHMgYSBub2RlIG9uIHRoZSBzcGVjaWZpZWQgbG9jYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNsaWNrRGF0YVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BlcmZvcm1BZGROb2RlKGNsaWNrRGF0YSkge1xuICAgIGNvbnN0IGRlZmF1bHREYXRhID0ge1xuICAgICAgaWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgIHg6IGNsaWNrRGF0YS5wb2ludGVyLmNhbnZhcy54LFxuICAgICAgeTogY2xpY2tEYXRhLnBvaW50ZXIuY2FudmFzLnksXG4gICAgICBsYWJlbDogXCJuZXdcIixcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuYWRkTm9kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFkZE5vZGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5hZGROb2RlKGRlZmF1bHREYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdGhpcy5pbk1vZGUgPT09IFwiYWRkTm9kZVwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBpZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHRoZSBtb2RlIGhhcyBjaGFuZ2VzIChkdWUgdG8gZGF0YXNldCBjaGFuZ2UpIGRpc3JlZ2FyZCB0aGUgY2FsbGJhY2tcbiAgICAgICAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldERhdGFTZXQoKS5hZGQoZmluYWxpemVkRGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgZnVuY3Rpb24gZm9yIGFkZCBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsY2FsbGJhY2spXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLmFkZChkZWZhdWx0RGF0YSk7XG4gICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY29ubmVjdCB0d28gbm9kZXMgd2l0aCBhIG5ldyBlZGdlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHNvdXJjZU5vZGVJZFxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHRhcmdldE5vZGVJZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BlcmZvcm1BZGRFZGdlKHNvdXJjZU5vZGVJZCwgdGFyZ2V0Tm9kZUlkKSB7XG4gICAgY29uc3QgZGVmYXVsdERhdGEgPSB7IGZyb206IHNvdXJjZU5vZGVJZCwgdG86IHRhcmdldE5vZGVJZCB9O1xuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmFkZEVkZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGRFZGdlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuYWRkRWRnZShkZWZhdWx0RGF0YSwgKGZpbmFsaXplZERhdGEpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSBudWxsICYmXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHRoaXMuaW5Nb2RlID09PSBcImFkZEVkZ2VcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrXG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkuYWRkKGZpbmFsaXplZERhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBjb25uZWN0IGRvZXMgbm90IHN1cHBvcnQgdHdvIGFyZ3VtZW50cyAoZGF0YSxjYWxsYmFjaylcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkuYWRkKGRlZmF1bHREYXRhKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNvbm5lY3QgdHdvIG5vZGVzIHdpdGggYSBuZXcgZWRnZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBzb3VyY2VOb2RlSWRcbiAgICogQHBhcmFtIHtOb2RlLmlkfSB0YXJnZXROb2RlSWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtRWRpdEVkZ2Uoc291cmNlTm9kZUlkLCB0YXJnZXROb2RlSWQpIHtcbiAgICBjb25zdCBkZWZhdWx0RGF0YSA9IHtcbiAgICAgIGlkOiB0aGlzLmVkZ2VCZWluZ0VkaXRlZElkLFxuICAgICAgZnJvbTogc291cmNlTm9kZUlkLFxuICAgICAgdG86IHRhcmdldE5vZGVJZCxcbiAgICAgIGxhYmVsOiB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXQodGhpcy5lZGdlQmVpbmdFZGl0ZWRJZCkubGFiZWwsXG4gICAgfTtcbiAgICBsZXQgZWVGdW5jdCA9IHRoaXMub3B0aW9ucy5lZGl0RWRnZTtcbiAgICBpZiAodHlwZW9mIGVlRnVuY3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGVlRnVuY3QgPSBlZUZ1bmN0LmVkaXRXaXRob3V0RHJhZztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlZUZ1bmN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGlmIChlZUZ1bmN0Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICBlZUZ1bmN0KGRlZmF1bHREYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgdGhpcy5pbk1vZGUgIT09IFwiZWRpdEVkZ2VcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbZGVmYXVsdERhdGEuaWRdLnVwZGF0ZUVkZ2VUeXBlKCk7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkudXBkYXRlKGZpbmFsaXplZERhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBlZGl0IGRvZXMgbm90IHN1cHBvcnQgdHdvIGFyZ3VtZW50cyAoZGF0YSwgY2FsbGJhY2spXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0RGF0YVNldCgpLnVwZGF0ZShkZWZhdWx0RGF0YSk7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYW5pcHVsYXRpb25TeXN0ZW07XG4iLCAiaW1wb3J0IHtcbiAgQ29uZmlndXJhdG9yQ29uZmlnLFxuICBDb25maWd1cmF0b3JIaWRlT3B0aW9uLFxuICBPcHRpb25zQ29uZmlnLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogVGhpcyBvYmplY3QgY29udGFpbnMgYWxsIHBvc3NpYmxlIG9wdGlvbnMuIEl0IHdpbGwgY2hlY2sgaWYgdGhlIHR5cGVzIGFyZSBjb3JyZWN0LCBpZiByZXF1aXJlZCBpZiB0aGUgb3B0aW9uIGlzIG9uZVxuICogb2YgdGhlIGFsbG93ZWQgdmFsdWVzLlxuICpcbiAqIF9fYW55X18gbWVhbnMgdGhhdCB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgbWF0dGVyLlxuICogX190eXBlX18gaXMgYSByZXF1aXJlZCBmaWVsZCBmb3IgYWxsIG9iamVjdHMgYW5kIGNvbnRhaW5zIHRoZSBhbGxvd2VkIHR5cGVzIG9mIGFsbCBvYmplY3RzXG4gKi9cbmNvbnN0IHN0cmluZyA9IFwic3RyaW5nXCI7XG5jb25zdCBib29sID0gXCJib29sZWFuXCI7XG5jb25zdCBudW1iZXIgPSBcIm51bWJlclwiO1xuY29uc3QgYXJyYXkgPSBcImFycmF5XCI7XG5jb25zdCBvYmplY3QgPSBcIm9iamVjdFwiOyAvLyBzaG91bGQgb25seSBiZSBpbiBhIF9fdHlwZV9fIHByb3BlcnR5XG5jb25zdCBkb20gPSBcImRvbVwiO1xuY29uc3QgYW55ID0gXCJhbnlcIjtcblxuLy8gTGlzdCBvZiBlbmRwb2ludHNcbmNvbnN0IGVuZFBvaW50cyA9IFtcbiAgXCJhcnJvd1wiLFxuICBcImJhclwiLFxuICBcImJveFwiLFxuICBcImNpcmNsZVwiLFxuICBcImNyb3dcIixcbiAgXCJjdXJ2ZVwiLFxuICBcImRpYW1vbmRcIixcbiAgXCJpbWFnZVwiLFxuICBcImludl9jdXJ2ZVwiLFxuICBcImludl90cmlhbmdsZVwiLFxuICBcInRyaWFuZ2xlXCIsXG4gIFwidmVlXCIsXG5dO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gLS0gVGhlIF9fKl9fIGZvcm1hdCBpcyB1c2VkIHRvIHByZXZlbnQgY29sbGlzaW9ucyB3aXRoIGFjdHVhbCBvcHRpb24gbmFtZXMuICovXG5jb25zdCBub2RlT3B0aW9uczogT3B0aW9uc0NvbmZpZyA9IHtcbiAgYm9yZGVyV2lkdGg6IHsgbnVtYmVyIH0sXG4gIGJvcmRlcldpZHRoU2VsZWN0ZWQ6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgYnJva2VuSW1hZ2U6IHsgc3RyaW5nLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgY2hvc2VuOiB7XG4gICAgbGFiZWw6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIG5vZGU6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuICBjb2xvcjoge1xuICAgIGJvcmRlcjogeyBzdHJpbmcgfSxcbiAgICBiYWNrZ3JvdW5kOiB7IHN0cmluZyB9LFxuICAgIGhpZ2hsaWdodDoge1xuICAgICAgYm9yZGVyOiB7IHN0cmluZyB9LFxuICAgICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBob3Zlcjoge1xuICAgICAgYm9yZGVyOiB7IHN0cmluZyB9LFxuICAgICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICB9LFxuICBvcGFjaXR5OiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGZpeGVkOiB7XG4gICAgeDogeyBib29sZWFuOiBib29sIH0sXG4gICAgeTogeyBib29sZWFuOiBib29sIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gIH0sXG4gIGZvbnQ6IHtcbiAgICBhbGlnbjogeyBzdHJpbmcgfSxcbiAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICBzdHJva2VXaWR0aDogeyBudW1iZXIgfSwgLy8gcHhcbiAgICBzdHJva2VDb2xvcjogeyBzdHJpbmcgfSxcbiAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgIG11bHRpOiB7IGJvb2xlYW46IGJvb2wsIHN0cmluZyB9LFxuICAgIGJvbGQ6IHtcbiAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgc2l6ZTogeyBudW1iZXIgfSwgLy8gcHhcbiAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICBtb2Q6IHsgc3RyaW5nIH0sXG4gICAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICB9LFxuICAgIGJvbGRpdGFsOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBpdGFsOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBtb25vOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICB9LFxuICBncm91cDogeyBzdHJpbmcsIG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGhlaWdodENvbnN0cmFpbnQ6IHtcbiAgICBtaW5pbXVtOiB7IG51bWJlciB9LFxuICAgIHZhbGlnbjogeyBzdHJpbmcgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIG51bWJlciB9LFxuICB9LFxuICBoaWRkZW46IHsgYm9vbGVhbjogYm9vbCB9LFxuICBpY29uOiB7XG4gICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICBjb2RlOiB7IHN0cmluZyB9LCAvLydcXHVmMDA3JyxcbiAgICBzaXplOiB7IG51bWJlciB9LCAvLzUwLFxuICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgIHdlaWdodDogeyBzdHJpbmcsIG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBpZDogeyBzdHJpbmcsIG51bWJlciB9LFxuICBpbWFnZToge1xuICAgIHNlbGVjdGVkOiB7IHN0cmluZywgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sIC8vIC0tPiBVUkxcbiAgICB1bnNlbGVjdGVkOiB7IHN0cmluZywgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sIC8vIC0tPiBVUkxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICB9LFxuICBpbWFnZVBhZGRpbmc6IHtcbiAgICB0b3A6IHsgbnVtYmVyIH0sXG4gICAgcmlnaHQ6IHsgbnVtYmVyIH0sXG4gICAgYm90dG9tOiB7IG51bWJlciB9LFxuICAgIGxlZnQ6IHsgbnVtYmVyIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBudW1iZXIgfSxcbiAgfSxcbiAgbGFiZWw6IHsgc3RyaW5nLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgbGFiZWxIaWdobGlnaHRCb2xkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgbGV2ZWw6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgbWFyZ2luOiB7XG4gICAgdG9wOiB7IG51bWJlciB9LFxuICAgIHJpZ2h0OiB7IG51bWJlciB9LFxuICAgIGJvdHRvbTogeyBudW1iZXIgfSxcbiAgICBsZWZ0OiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgbnVtYmVyIH0sXG4gIH0sXG4gIG1hc3M6IHsgbnVtYmVyIH0sXG4gIHBoeXNpY3M6IHsgYm9vbGVhbjogYm9vbCB9LFxuICBzY2FsaW5nOiB7XG4gICAgbWluOiB7IG51bWJlciB9LFxuICAgIG1heDogeyBudW1iZXIgfSxcbiAgICBsYWJlbDoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBtaW46IHsgbnVtYmVyIH0sXG4gICAgICBtYXg6IHsgbnVtYmVyIH0sXG4gICAgICBtYXhWaXNpYmxlOiB7IG51bWJlciB9LFxuICAgICAgZHJhd1RocmVzaG9sZDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgY3VzdG9tU2NhbGluZ0Z1bmN0aW9uOiB7IGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgc2hhZG93OiB7XG4gICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgc2l6ZTogeyBudW1iZXIgfSxcbiAgICB4OiB7IG51bWJlciB9LFxuICAgIHk6IHsgbnVtYmVyIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gIH0sXG4gIHNoYXBlOiB7XG4gICAgc3RyaW5nOiBbXG4gICAgICBcImN1c3RvbVwiLFxuICAgICAgXCJlbGxpcHNlXCIsXG4gICAgICBcImNpcmNsZVwiLFxuICAgICAgXCJkYXRhYmFzZVwiLFxuICAgICAgXCJib3hcIixcbiAgICAgIFwidGV4dFwiLFxuICAgICAgXCJpbWFnZVwiLFxuICAgICAgXCJjaXJjdWxhckltYWdlXCIsXG4gICAgICBcImRpYW1vbmRcIixcbiAgICAgIFwiZG90XCIsXG4gICAgICBcInN0YXJcIixcbiAgICAgIFwidHJpYW5nbGVcIixcbiAgICAgIFwidHJpYW5nbGVEb3duXCIsXG4gICAgICBcInNxdWFyZVwiLFxuICAgICAgXCJpY29uXCIsXG4gICAgICBcImhleGFnb25cIixcbiAgICBdLFxuICB9LFxuICBjdHhSZW5kZXJlcjogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gIHNoYXBlUHJvcGVydGllczoge1xuICAgIGJvcmRlckRhc2hlczogeyBib29sZWFuOiBib29sLCBhcnJheSB9LFxuICAgIGJvcmRlclJhZGl1czogeyBudW1iZXIgfSxcbiAgICBpbnRlcnBvbGF0aW9uOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICB1c2VJbWFnZVNpemU6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHVzZUJvcmRlcldpdGhJbWFnZTogeyBib29sZWFuOiBib29sIH0sXG4gICAgY29vcmRpbmF0ZU9yaWdpbjogeyBzdHJpbmc6IFtcImNlbnRlclwiLCBcInRvcC1sZWZ0XCJdIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gIH0sXG4gIHNpemU6IHsgbnVtYmVyIH0sXG4gIHRpdGxlOiB7IHN0cmluZywgZG9tLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgdmFsdWU6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgd2lkdGhDb25zdHJhaW50OiB7XG4gICAgbWluaW11bTogeyBudW1iZXIgfSxcbiAgICBtYXhpbXVtOiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCwgbnVtYmVyIH0sXG4gIH0sXG4gIHg6IHsgbnVtYmVyIH0sXG4gIHk6IHsgbnVtYmVyIH0sXG4gIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxufTtcbmNvbnN0IGFsbE9wdGlvbnM6IE9wdGlvbnNDb25maWcgPSB7XG4gIGNvbmZpZ3VyZToge1xuICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGZpbHRlcjogeyBib29sZWFuOiBib29sLCBzdHJpbmcsIGFycmF5LCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgY29udGFpbmVyOiB7IGRvbSB9LFxuICAgIHNob3dCdXR0b246IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCwgc3RyaW5nLCBhcnJheSwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICB9LFxuICBlZGdlczoge1xuICAgIGFycm93czoge1xuICAgICAgdG86IHtcbiAgICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICAgIHNjYWxlRmFjdG9yOiB7IG51bWJlciB9LFxuICAgICAgICB0eXBlOiB7IHN0cmluZzogZW5kUG9pbnRzIH0sXG4gICAgICAgIGltYWdlSGVpZ2h0OiB7IG51bWJlciB9LFxuICAgICAgICBpbWFnZVdpZHRoOiB7IG51bWJlciB9LFxuICAgICAgICBzcmM6IHsgc3RyaW5nIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgfSxcbiAgICAgIG1pZGRsZToge1xuICAgICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgICAgc2NhbGVGYWN0b3I6IHsgbnVtYmVyIH0sXG4gICAgICAgIHR5cGU6IHsgc3RyaW5nOiBlbmRQb2ludHMgfSxcbiAgICAgICAgaW1hZ2VXaWR0aDogeyBudW1iZXIgfSxcbiAgICAgICAgaW1hZ2VIZWlnaHQ6IHsgbnVtYmVyIH0sXG4gICAgICAgIHNyYzogeyBzdHJpbmcgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgICB9LFxuICAgICAgZnJvbToge1xuICAgICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgICAgc2NhbGVGYWN0b3I6IHsgbnVtYmVyIH0sXG4gICAgICAgIHR5cGU6IHsgc3RyaW5nOiBlbmRQb2ludHMgfSxcbiAgICAgICAgaW1hZ2VXaWR0aDogeyBudW1iZXIgfSxcbiAgICAgICAgaW1hZ2VIZWlnaHQ6IHsgbnVtYmVyIH0sXG4gICAgICAgIHNyYzogeyBzdHJpbmcgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHsgc3RyaW5nOiBbXCJmcm9tXCIsIFwidG9cIiwgXCJtaWRkbGVcIl0sIG9iamVjdCB9LFxuICAgIH0sXG4gICAgZW5kUG9pbnRPZmZzZXQ6IHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXIsXG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXIsXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHtcbiAgICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICAgIG51bWJlcjogbnVtYmVyLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGFycm93U3RyaWtldGhyb3VnaDogeyBib29sZWFuOiBib29sIH0sXG4gICAgYmFja2dyb3VuZDoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sXG4gICAgICBkYXNoZXM6IHsgYm9vbGVhbjogYm9vbCwgYXJyYXkgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgY2hvc2VuOiB7XG4gICAgICBsYWJlbDogeyBib29sZWFuOiBib29sLCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgICBlZGdlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgY29sb3I6IHtcbiAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgaGlnaGxpZ2h0OiB7IHN0cmluZyB9LFxuICAgICAgaG92ZXI6IHsgc3RyaW5nIH0sXG4gICAgICBpbmhlcml0OiB7IHN0cmluZzogW1wiZnJvbVwiLCBcInRvXCIsIFwiYm90aFwiXSwgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgb3BhY2l0eTogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBkYXNoZXM6IHsgYm9vbGVhbjogYm9vbCwgYXJyYXkgfSxcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICAgIHN0cm9rZVdpZHRoOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgc3Ryb2tlQ29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBhbGlnbjogeyBzdHJpbmc6IFtcImhvcml6b250YWxcIiwgXCJ0b3BcIiwgXCJtaWRkbGVcIiwgXCJib3R0b21cIl0gfSxcbiAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICBtdWx0aTogeyBib29sZWFuOiBib29sLCBzdHJpbmcgfSxcbiAgICAgIGJvbGQ6IHtcbiAgICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICAgIH0sXG4gICAgICBib2xkaXRhbDoge1xuICAgICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgICAgc2l6ZTogeyBudW1iZXIgfSwgLy8gcHhcbiAgICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgICAgfSxcbiAgICAgIGl0YWw6IHtcbiAgICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICAgIH0sXG4gICAgICBtb25vOiB7XG4gICAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgICBtb2Q6IHsgc3RyaW5nIH0sXG4gICAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICB9LFxuICAgIGhpZGRlbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgaG92ZXJXaWR0aDogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiLCBudW1iZXIgfSxcbiAgICBsYWJlbDogeyBzdHJpbmcsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgbGVuZ3RoOiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gICAgcGh5c2ljczogeyBib29sZWFuOiBib29sIH0sXG4gICAgc2NhbGluZzoge1xuICAgICAgbWluOiB7IG51bWJlciB9LFxuICAgICAgbWF4OiB7IG51bWJlciB9LFxuICAgICAgbGFiZWw6IHtcbiAgICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICAgIG1pbjogeyBudW1iZXIgfSxcbiAgICAgICAgbWF4OiB7IG51bWJlciB9LFxuICAgICAgICBtYXhWaXNpYmxlOiB7IG51bWJlciB9LFxuICAgICAgICBkcmF3VGhyZXNob2xkOiB7IG51bWJlciB9LFxuICAgICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIH0sXG4gICAgICBjdXN0b21TY2FsaW5nRnVuY3Rpb246IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICBzZWxlY3Rpb25XaWR0aDogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiLCBudW1iZXIgfSxcbiAgICBzZWxmUmVmZXJlbmNlU2l6ZTogeyBudW1iZXIgfSxcbiAgICBzZWxmUmVmZXJlbmNlOiB7XG4gICAgICBzaXplOiB7IG51bWJlciB9LFxuICAgICAgYW5nbGU6IHsgbnVtYmVyIH0sXG4gICAgICByZW5kZXJCZWhpbmRUaGVOb2RlOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICAgIH0sXG4gICAgc2hhZG93OiB7XG4gICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgc2l6ZTogeyBudW1iZXIgfSxcbiAgICAgIHg6IHsgbnVtYmVyIH0sXG4gICAgICB5OiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICBzbW9vdGg6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgdHlwZToge1xuICAgICAgICBzdHJpbmc6IFtcbiAgICAgICAgICBcImR5bmFtaWNcIixcbiAgICAgICAgICBcImNvbnRpbnVvdXNcIixcbiAgICAgICAgICBcImRpc2NyZXRlXCIsXG4gICAgICAgICAgXCJkaWFnb25hbENyb3NzXCIsXG4gICAgICAgICAgXCJzdHJhaWdodENyb3NzXCIsXG4gICAgICAgICAgXCJob3Jpem9udGFsXCIsXG4gICAgICAgICAgXCJ2ZXJ0aWNhbFwiLFxuICAgICAgICAgIFwiY3VydmVkQ1dcIixcbiAgICAgICAgICBcImN1cnZlZENDV1wiLFxuICAgICAgICAgIFwiY3ViaWNCZXppZXJcIixcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICByb3VuZG5lc3M6IHsgbnVtYmVyIH0sXG4gICAgICBmb3JjZURpcmVjdGlvbjoge1xuICAgICAgICBzdHJpbmc6IFtcImhvcml6b250YWxcIiwgXCJ2ZXJ0aWNhbFwiLCBcIm5vbmVcIl0sXG4gICAgICAgIGJvb2xlYW46IGJvb2wsXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICB0aXRsZTogeyBzdHJpbmcsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIHdpZHRoOiB7IG51bWJlciB9LFxuICAgIHdpZHRoQ29uc3RyYWludDoge1xuICAgICAgbWF4aW11bTogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCwgbnVtYmVyIH0sXG4gICAgfSxcbiAgICB2YWx1ZTogeyBudW1iZXIsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBncm91cHM6IHtcbiAgICB1c2VEZWZhdWx0R3JvdXBzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBfX2FueV9fOiBub2RlT3B0aW9ucyxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgaW50ZXJhY3Rpb246IHtcbiAgICBkcmFnTm9kZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGRyYWdWaWV3OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBoaWRlRWRnZXNPbkRyYWc6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGhpZGVFZGdlc09uWm9vbTogeyBib29sZWFuOiBib29sIH0sXG4gICAgaGlkZU5vZGVzT25EcmFnOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBob3ZlcjogeyBib29sZWFuOiBib29sIH0sXG4gICAga2V5Ym9hcmQ6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgc3BlZWQ6IHtcbiAgICAgICAgeDogeyBudW1iZXIgfSxcbiAgICAgICAgeTogeyBudW1iZXIgfSxcbiAgICAgICAgem9vbTogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgICB9LFxuICAgICAgYmluZFRvV2luZG93OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGF1dG9Gb2N1czogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICB9LFxuICAgIG11bHRpc2VsZWN0OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBuYXZpZ2F0aW9uQnV0dG9uczogeyBib29sZWFuOiBib29sIH0sXG4gICAgc2VsZWN0YWJsZTogeyBib29sZWFuOiBib29sIH0sXG4gICAgc2VsZWN0Q29ubmVjdGVkRWRnZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGhvdmVyQ29ubmVjdGVkRWRnZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHRvb2x0aXBEZWxheTogeyBudW1iZXIgfSxcbiAgICB6b29tVmlldzogeyBib29sZWFuOiBib29sIH0sXG4gICAgem9vbVNwZWVkOiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICByYW5kb21TZWVkOiB7IHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiwgbnVtYmVyLCBzdHJpbmcgfSxcbiAgICBpbXByb3ZlZExheW91dDogeyBib29sZWFuOiBib29sIH0sXG4gICAgY2x1c3RlclRocmVzaG9sZDogeyBudW1iZXIgfSxcbiAgICBoaWVyYXJjaGljYWw6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgbGV2ZWxTZXBhcmF0aW9uOiB7IG51bWJlciB9LFxuICAgICAgbm9kZVNwYWNpbmc6IHsgbnVtYmVyIH0sXG4gICAgICB0cmVlU3BhY2luZzogeyBudW1iZXIgfSxcbiAgICAgIGJsb2NrU2hpZnRpbmc6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgZWRnZU1pbmltaXphdGlvbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBwYXJlbnRDZW50cmFsaXphdGlvbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBkaXJlY3Rpb246IHsgc3RyaW5nOiBbXCJVRFwiLCBcIkRVXCIsIFwiTFJcIiwgXCJSTFwiXSB9LCAvLyBVRCwgRFUsIExSLCBSTFxuICAgICAgc29ydE1ldGhvZDogeyBzdHJpbmc6IFtcImh1YnNpemVcIiwgXCJkaXJlY3RlZFwiXSB9LCAvLyBodWJzaXplLCBkaXJlY3RlZFxuICAgICAgc2hha2VUb3dhcmRzOiB7IHN0cmluZzogW1wibGVhdmVzXCIsIFwicm9vdHNcIl0gfSwgLy8gbGVhdmVzLCByb290c1xuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgbWFuaXB1bGF0aW9uOiB7XG4gICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgaW5pdGlhbGx5QWN0aXZlOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBhZGROb2RlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBhZGRFZGdlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBlZGl0Tm9kZTogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgZWRpdEVkZ2U6IHtcbiAgICAgIGVkaXRXaXRob3V0RHJhZzogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICB9LFxuICAgIGRlbGV0ZU5vZGU6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIGRlbGV0ZUVkZ2U6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIGNvbnRyb2xOb2RlU3R5bGU6IG5vZGVPcHRpb25zLFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuICBub2Rlczogbm9kZU9wdGlvbnMsXG4gIHBoeXNpY3M6IHtcbiAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBiYXJuZXNIdXQ6IHtcbiAgICAgIHRoZXRhOiB7IG51bWJlciB9LFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiB7IG51bWJlciB9LFxuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBhdm9pZE92ZXJsYXA6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIGZvcmNlQXRsYXMyQmFzZWQ6IHtcbiAgICAgIHRoZXRhOiB7IG51bWJlciB9LFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiB7IG51bWJlciB9LFxuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBhdm9pZE92ZXJsYXA6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIHJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIG5vZGVEaXN0YW5jZTogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIGhpZXJhcmNoaWNhbFJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIG5vZGVEaXN0YW5jZTogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBhdm9pZE92ZXJsYXA6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIG1heFZlbG9jaXR5OiB7IG51bWJlciB9LFxuICAgIG1pblZlbG9jaXR5OiB7IG51bWJlciB9LCAvLyBweC9zXG4gICAgc29sdmVyOiB7XG4gICAgICBzdHJpbmc6IFtcbiAgICAgICAgXCJiYXJuZXNIdXRcIixcbiAgICAgICAgXCJyZXB1bHNpb25cIixcbiAgICAgICAgXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIixcbiAgICAgICAgXCJmb3JjZUF0bGFzMkJhc2VkXCIsXG4gICAgICBdLFxuICAgIH0sXG4gICAgc3RhYmlsaXphdGlvbjoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBpdGVyYXRpb25zOiB7IG51bWJlciB9LCAvLyBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb24gdG8gc3RhYmlsaXplXG4gICAgICB1cGRhdGVJbnRlcnZhbDogeyBudW1iZXIgfSxcbiAgICAgIG9ubHlEeW5hbWljRWRnZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgZml0OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgdGltZXN0ZXA6IHsgbnVtYmVyIH0sXG4gICAgYWRhcHRpdmVUaW1lc3RlcDogeyBib29sZWFuOiBib29sIH0sXG4gICAgd2luZDoge1xuICAgICAgeDogeyBudW1iZXIgfSxcbiAgICAgIHk6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuXG4gIC8vZ2xvYmFscyA6XG4gIGF1dG9SZXNpemU6IHsgYm9vbGVhbjogYm9vbCB9LFxuICBjbGlja1RvVXNlOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgbG9jYWxlOiB7IHN0cmluZyB9LFxuICBsb2NhbGVzOiB7XG4gICAgX19hbnlfXzogeyBhbnkgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgaGVpZ2h0OiB7IHN0cmluZyB9LFxuICB3aWR0aDogeyBzdHJpbmcgfSxcbiAgX190eXBlX186IHsgb2JqZWN0IH0sXG59O1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cblxuLyoqXG4gKiBUaGlzIHByb3ZpZGVzIHJhbmdlcywgaW5pdGlhbCB2YWx1ZXMsIHN0ZXBzIGFuZCBkcm9wZG93biBtZW51IGNob2ljZXMgZm9yIHRoZVxuICogY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAcmVtYXJrc1xuICogQ2hlY2tib3g6IGBib29sZWFuYFxuICogICBUaGUgdmFsdWUgc3VwbGxpZWQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICpcbiAqIFRleHQgZmllbGQ6IGBzdHJpbmdgXG4gKiAgIFRoZSBwYXNzZWQgdGV4dCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluaXRpYWwgdmFsdWUuIEFueSB0ZXh0IHdpbGwgYmVcbiAqICAgYWNjZXB0ZWQgYWZ0ZXJ3YXJkcy5cbiAqXG4gKiBOdW1iZXIgcmFuZ2U6IGBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXWBcbiAqICAgVGhlIG1lYW5pbmdzIGFyZSBgW2luaXRpYWwgdmFsdWUsIG1pbiwgbWF4LCBzdGVwXWAuXG4gKlxuICogRHJvcGRvd246IGBbRXhjbHVkZTxzdHJpbmcsIFwiY29sb3JcIj4sIC4uLihzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKVtdXWBcbiAqICAgVHJhbnNsYXRpb25zIGZvciBwZW9wbGUgd2l0aCBwb29yIHVuZGVyc3RhbmRpbmcgb2YgVHlwZVNjcmlwdDogdGhlIGZpcnN0XG4gKiAgIHZhbHVlIGFsd2F5cyBoYXMgdG8gYmUgYSBzdHJpbmcgYnV0IG5ldmVyIGBcImNvbG9yXCJgLCB0aGUgcmVzdCBjYW4gYmUgYW55XG4gKiAgIGNvbWJpbmF0aW9uIG9mIHN0cmluZ3MsIG51bWJlcnMgYW5kIGJvb2xlYW5zLlxuICpcbiAqIENvbG9yIHBpY2tlcjogYFtcImNvbG9yXCIsIHN0cmluZ11gXG4gKiAgIFRoZSBmaXJzdCB2YWx1ZSBzYXlzIHRoaXMgd2lsbCBiZSBhIGNvbG9yIHBpY2tlciBub3QgYSBkcm9wZG93biBtZW51LiBUaGVcbiAqICAgbmV4dCB2YWx1ZSBpcyB0aGUgaW5pdGlhbCBjb2xvci5cbiAqL1xuY29uc3QgY29uZmlndXJlT3B0aW9uczogQ29uZmlndXJhdG9yQ29uZmlnID0ge1xuICBub2Rlczoge1xuICAgIGJvcmRlcldpZHRoOiBbMSwgMCwgMTAsIDFdLFxuICAgIGJvcmRlcldpZHRoU2VsZWN0ZWQ6IFsyLCAwLCAxMCwgMV0sXG4gICAgY29sb3I6IHtcbiAgICAgIGJvcmRlcjogW1wiY29sb3JcIiwgXCIjMkI3Q0U5XCJdLFxuICAgICAgYmFja2dyb3VuZDogW1wiY29sb3JcIiwgXCIjOTdDMkZDXCJdLFxuICAgICAgaGlnaGxpZ2h0OiB7XG4gICAgICAgIGJvcmRlcjogW1wiY29sb3JcIiwgXCIjMkI3Q0U5XCJdLFxuICAgICAgICBiYWNrZ3JvdW5kOiBbXCJjb2xvclwiLCBcIiNEMkU1RkZcIl0sXG4gICAgICB9LFxuICAgICAgaG92ZXI6IHtcbiAgICAgICAgYm9yZGVyOiBbXCJjb2xvclwiLCBcIiMyQjdDRTlcIl0sXG4gICAgICAgIGJhY2tncm91bmQ6IFtcImNvbG9yXCIsIFwiI0QyRTVGRlwiXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBvcGFjaXR5OiBbMCwgMCwgMSwgMC4xXSxcbiAgICBmaXhlZDoge1xuICAgICAgeDogZmFsc2UsXG4gICAgICB5OiBmYWxzZSxcbiAgICB9LFxuICAgIGZvbnQ6IHtcbiAgICAgIGNvbG9yOiBbXCJjb2xvclwiLCBcIiMzNDM0MzRcIl0sXG4gICAgICBzaXplOiBbMTQsIDAsIDEwMCwgMV0sIC8vIHB4XG4gICAgICBmYWNlOiBbXCJhcmlhbFwiLCBcInZlcmRhbmFcIiwgXCJ0YWhvbWFcIl0sXG4gICAgICBiYWNrZ3JvdW5kOiBbXCJjb2xvclwiLCBcIm5vbmVcIl0sXG4gICAgICBzdHJva2VXaWR0aDogWzAsIDAsIDUwLCAxXSwgLy8gcHhcbiAgICAgIHN0cm9rZUNvbG9yOiBbXCJjb2xvclwiLCBcIiNmZmZmZmZcIl0sXG4gICAgfSxcbiAgICAvL2dyb3VwOiAnc3RyaW5nJyxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogdHJ1ZSxcbiAgICAvL2ljb246IHtcbiAgICAvLyAgZmFjZTogJ3N0cmluZycsICAvLydGb250QXdlc29tZScsXG4gICAgLy8gIGNvZGU6ICdzdHJpbmcnLCAgLy8nXFx1ZjAwNycsXG4gICAgLy8gIHNpemU6IFs1MCwgMCwgMjAwLCAxXSwgIC8vNTAsXG4gICAgLy8gIGNvbG9yOiBbJ2NvbG9yJywnIzJCN0NFOSddICAgLy8nI2FhMDBmZidcbiAgICAvL30sXG4gICAgLy9pbWFnZTogJ3N0cmluZycsIC8vIC0tPiBVUkxcbiAgICBwaHlzaWNzOiB0cnVlLFxuICAgIHNjYWxpbmc6IHtcbiAgICAgIG1pbjogWzEwLCAwLCAyMDAsIDFdLFxuICAgICAgbWF4OiBbMzAsIDAsIDIwMCwgMV0sXG4gICAgICBsYWJlbDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbWluOiBbMTQsIDAsIDIwMCwgMV0sXG4gICAgICAgIG1heDogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgICBtYXhWaXNpYmxlOiBbMzAsIDAsIDIwMCwgMV0sXG4gICAgICAgIGRyYXdUaHJlc2hvbGQ6IFs1LCAwLCAyMCwgMV0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2hhZG93OiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGNvbG9yOiBcInJnYmEoMCwwLDAsMC41KVwiLFxuICAgICAgc2l6ZTogWzEwLCAwLCAyMCwgMV0sXG4gICAgICB4OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgICB5OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgfSxcbiAgICBzaGFwZTogW1xuICAgICAgXCJlbGxpcHNlXCIsXG4gICAgICBcImJveFwiLFxuICAgICAgXCJjaXJjbGVcIixcbiAgICAgIFwiZGF0YWJhc2VcIixcbiAgICAgIFwiZGlhbW9uZFwiLFxuICAgICAgXCJkb3RcIixcbiAgICAgIFwic3F1YXJlXCIsXG4gICAgICBcInN0YXJcIixcbiAgICAgIFwidGV4dFwiLFxuICAgICAgXCJ0cmlhbmdsZVwiLFxuICAgICAgXCJ0cmlhbmdsZURvd25cIixcbiAgICAgIFwiaGV4YWdvblwiLFxuICAgIF0sXG4gICAgc2hhcGVQcm9wZXJ0aWVzOiB7XG4gICAgICBib3JkZXJEYXNoZXM6IGZhbHNlLFxuICAgICAgYm9yZGVyUmFkaXVzOiBbNiwgMCwgMjAsIDFdLFxuICAgICAgaW50ZXJwb2xhdGlvbjogdHJ1ZSxcbiAgICAgIHVzZUltYWdlU2l6ZTogZmFsc2UsXG4gICAgfSxcbiAgICBzaXplOiBbMjUsIDAsIDIwMCwgMV0sXG4gIH0sXG4gIGVkZ2VzOiB7XG4gICAgYXJyb3dzOiB7XG4gICAgICB0bzogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IFsxLCAwLCAzLCAwLjA1XSwgdHlwZTogXCJhcnJvd1wiIH0sXG4gICAgICBtaWRkbGU6IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiBbMSwgMCwgMywgMC4wNV0sIHR5cGU6IFwiYXJyb3dcIiB9LFxuICAgICAgZnJvbTogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IFsxLCAwLCAzLCAwLjA1XSwgdHlwZTogXCJhcnJvd1wiIH0sXG4gICAgfSxcbiAgICBlbmRQb2ludE9mZnNldDoge1xuICAgICAgZnJvbTogWzAsIC0xMCwgMTAsIDFdLFxuICAgICAgdG86IFswLCAtMTAsIDEwLCAxXSxcbiAgICB9LFxuICAgIGFycm93U3RyaWtldGhyb3VnaDogdHJ1ZSxcbiAgICBjb2xvcjoge1xuICAgICAgY29sb3I6IFtcImNvbG9yXCIsIFwiIzg0ODQ4NFwiXSxcbiAgICAgIGhpZ2hsaWdodDogW1wiY29sb3JcIiwgXCIjODQ4NDg0XCJdLFxuICAgICAgaG92ZXI6IFtcImNvbG9yXCIsIFwiIzg0ODQ4NFwiXSxcbiAgICAgIGluaGVyaXQ6IFtcImZyb21cIiwgXCJ0b1wiLCBcImJvdGhcIiwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgb3BhY2l0eTogWzEsIDAsIDEsIDAuMDVdLFxuICAgIH0sXG4gICAgZGFzaGVzOiBmYWxzZSxcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogW1wiY29sb3JcIiwgXCIjMzQzNDM0XCJdLFxuICAgICAgc2l6ZTogWzE0LCAwLCAxMDAsIDFdLCAvLyBweFxuICAgICAgZmFjZTogW1wiYXJpYWxcIiwgXCJ2ZXJkYW5hXCIsIFwidGFob21hXCJdLFxuICAgICAgYmFja2dyb3VuZDogW1wiY29sb3JcIiwgXCJub25lXCJdLFxuICAgICAgc3Ryb2tlV2lkdGg6IFsyLCAwLCA1MCwgMV0sIC8vIHB4XG4gICAgICBzdHJva2VDb2xvcjogW1wiY29sb3JcIiwgXCIjZmZmZmZmXCJdLFxuICAgICAgYWxpZ246IFtcImhvcml6b250YWxcIiwgXCJ0b3BcIiwgXCJtaWRkbGVcIiwgXCJib3R0b21cIl0sXG4gICAgfSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGhvdmVyV2lkdGg6IFsxLjUsIDAsIDUsIDAuMV0sXG4gICAgbGFiZWxIaWdobGlnaHRCb2xkOiB0cnVlLFxuICAgIHBoeXNpY3M6IHRydWUsXG4gICAgc2NhbGluZzoge1xuICAgICAgbWluOiBbMSwgMCwgMTAwLCAxXSxcbiAgICAgIG1heDogWzE1LCAwLCAxMDAsIDFdLFxuICAgICAgbGFiZWw6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbWluOiBbMTQsIDAsIDIwMCwgMV0sXG4gICAgICAgIG1heDogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgICBtYXhWaXNpYmxlOiBbMzAsIDAsIDIwMCwgMV0sXG4gICAgICAgIGRyYXdUaHJlc2hvbGQ6IFs1LCAwLCAyMCwgMV0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2VsZWN0aW9uV2lkdGg6IFsxLjUsIDAsIDUsIDAuMV0sXG4gICAgc2VsZlJlZmVyZW5jZVNpemU6IFsyMCwgMCwgMjAwLCAxXSxcbiAgICBzZWxmUmVmZXJlbmNlOiB7XG4gICAgICBzaXplOiBbMjAsIDAsIDIwMCwgMV0sXG4gICAgICBhbmdsZTogW01hdGguUEkgLyAyLCAtNiAqIE1hdGguUEksIDYgKiBNYXRoLlBJLCBNYXRoLlBJIC8gOF0sXG4gICAgICByZW5kZXJCZWhpbmRUaGVOb2RlOiB0cnVlLFxuICAgIH0sXG4gICAgc2hhZG93OiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGNvbG9yOiBcInJnYmEoMCwwLDAsMC41KVwiLFxuICAgICAgc2l6ZTogWzEwLCAwLCAyMCwgMV0sXG4gICAgICB4OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgICB5OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgfSxcbiAgICBzbW9vdGg6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICB0eXBlOiBbXG4gICAgICAgIFwiZHluYW1pY1wiLFxuICAgICAgICBcImNvbnRpbnVvdXNcIixcbiAgICAgICAgXCJkaXNjcmV0ZVwiLFxuICAgICAgICBcImRpYWdvbmFsQ3Jvc3NcIixcbiAgICAgICAgXCJzdHJhaWdodENyb3NzXCIsXG4gICAgICAgIFwiaG9yaXpvbnRhbFwiLFxuICAgICAgICBcInZlcnRpY2FsXCIsXG4gICAgICAgIFwiY3VydmVkQ1dcIixcbiAgICAgICAgXCJjdXJ2ZWRDQ1dcIixcbiAgICAgICAgXCJjdWJpY0JlemllclwiLFxuICAgICAgXSxcbiAgICAgIGZvcmNlRGlyZWN0aW9uOiBbXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIiwgXCJub25lXCJdLFxuICAgICAgcm91bmRuZXNzOiBbMC41LCAwLCAxLCAwLjA1XSxcbiAgICB9LFxuICAgIHdpZHRoOiBbMSwgMCwgMzAsIDFdLFxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICAvL3JhbmRvbVNlZWQ6IFswLCAwLCA1MDAsIDFdLFxuICAgIC8vaW1wcm92ZWRMYXlvdXQ6IHRydWUsXG4gICAgaGllcmFyY2hpY2FsOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGxldmVsU2VwYXJhdGlvbjogWzE1MCwgMjAsIDUwMCwgNV0sXG4gICAgICBub2RlU3BhY2luZzogWzEwMCwgMjAsIDUwMCwgNV0sXG4gICAgICB0cmVlU3BhY2luZzogWzIwMCwgMjAsIDUwMCwgNV0sXG4gICAgICBibG9ja1NoaWZ0aW5nOiB0cnVlLFxuICAgICAgZWRnZU1pbmltaXphdGlvbjogdHJ1ZSxcbiAgICAgIHBhcmVudENlbnRyYWxpemF0aW9uOiB0cnVlLFxuICAgICAgZGlyZWN0aW9uOiBbXCJVRFwiLCBcIkRVXCIsIFwiTFJcIiwgXCJSTFwiXSwgLy8gVUQsIERVLCBMUiwgUkxcbiAgICAgIHNvcnRNZXRob2Q6IFtcImh1YnNpemVcIiwgXCJkaXJlY3RlZFwiXSwgLy8gaHVic2l6ZSwgZGlyZWN0ZWRcbiAgICAgIHNoYWtlVG93YXJkczogW1wibGVhdmVzXCIsIFwicm9vdHNcIl0sIC8vIGxlYXZlcywgcm9vdHNcbiAgICB9LFxuICB9LFxuICBpbnRlcmFjdGlvbjoge1xuICAgIGRyYWdOb2RlczogdHJ1ZSxcbiAgICBkcmFnVmlldzogdHJ1ZSxcbiAgICBoaWRlRWRnZXNPbkRyYWc6IGZhbHNlLFxuICAgIGhpZGVFZGdlc09uWm9vbTogZmFsc2UsXG4gICAgaGlkZU5vZGVzT25EcmFnOiBmYWxzZSxcbiAgICBob3ZlcjogZmFsc2UsXG4gICAga2V5Ym9hcmQ6IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgc3BlZWQ6IHtcbiAgICAgICAgeDogWzEwLCAwLCA0MCwgMV0sXG4gICAgICAgIHk6IFsxMCwgMCwgNDAsIDFdLFxuICAgICAgICB6b29tOiBbMC4wMiwgMCwgMC4xLCAwLjAwNV0sXG4gICAgICB9LFxuICAgICAgYmluZFRvV2luZG93OiB0cnVlLFxuICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgIH0sXG4gICAgbXVsdGlzZWxlY3Q6IGZhbHNlLFxuICAgIG5hdmlnYXRpb25CdXR0b25zOiBmYWxzZSxcbiAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgIHNlbGVjdENvbm5lY3RlZEVkZ2VzOiB0cnVlLFxuICAgIGhvdmVyQ29ubmVjdGVkRWRnZXM6IHRydWUsXG4gICAgdG9vbHRpcERlbGF5OiBbMzAwLCAwLCAxMDAwLCAyNV0sXG4gICAgem9vbVZpZXc6IHRydWUsXG4gICAgem9vbVNwZWVkOiBbMSwgMC4xLCAyLCAwLjFdLFxuICB9LFxuICBtYW5pcHVsYXRpb246IHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBpbml0aWFsbHlBY3RpdmU6IGZhbHNlLFxuICB9LFxuICBwaHlzaWNzOiB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBiYXJuZXNIdXQ6IHtcbiAgICAgIHRoZXRhOiBbMC41LCAwLjEsIDEsIDAuMDVdLFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiBbLTIwMDAsIC0zMDAwMCwgMCwgNTBdLFxuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjMsIDAsIDEwLCAwLjA1XSxcbiAgICAgIHNwcmluZ0xlbmd0aDogWzk1LCAwLCA1MDAsIDVdLFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IFswLjA0LCAwLCAxLjIsIDAuMDA1XSxcbiAgICAgIGRhbXBpbmc6IFswLjA5LCAwLCAxLCAwLjAxXSxcbiAgICAgIGF2b2lkT3ZlcmxhcDogWzAsIDAsIDEsIDAuMDFdLFxuICAgIH0sXG4gICAgZm9yY2VBdGxhczJCYXNlZDoge1xuICAgICAgdGhldGE6IFswLjUsIDAuMSwgMSwgMC4wNV0sXG4gICAgICBncmF2aXRhdGlvbmFsQ29uc3RhbnQ6IFstNTAsIC01MDAsIDAsIDFdLFxuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjAxLCAwLCAxLCAwLjAwNV0sXG4gICAgICBzcHJpbmdMZW5ndGg6IFs5NSwgMCwgNTAwLCA1XSxcbiAgICAgIHNwcmluZ0NvbnN0YW50OiBbMC4wOCwgMCwgMS4yLCAwLjAwNV0sXG4gICAgICBkYW1waW5nOiBbMC40LCAwLCAxLCAwLjAxXSxcbiAgICAgIGF2b2lkT3ZlcmxhcDogWzAsIDAsIDEsIDAuMDFdLFxuICAgIH0sXG4gICAgcmVwdWxzaW9uOiB7XG4gICAgICBjZW50cmFsR3Jhdml0eTogWzAuMiwgMCwgMTAsIDAuMDVdLFxuICAgICAgc3ByaW5nTGVuZ3RoOiBbMjAwLCAwLCA1MDAsIDVdLFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IFswLjA1LCAwLCAxLjIsIDAuMDA1XSxcbiAgICAgIG5vZGVEaXN0YW5jZTogWzEwMCwgMCwgNTAwLCA1XSxcbiAgICAgIGRhbXBpbmc6IFswLjA5LCAwLCAxLCAwLjAxXSxcbiAgICB9LFxuICAgIGhpZXJhcmNoaWNhbFJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjIsIDAsIDEwLCAwLjA1XSxcbiAgICAgIHNwcmluZ0xlbmd0aDogWzEwMCwgMCwgNTAwLCA1XSxcbiAgICAgIHNwcmluZ0NvbnN0YW50OiBbMC4wMSwgMCwgMS4yLCAwLjAwNV0sXG4gICAgICBub2RlRGlzdGFuY2U6IFsxMjAsIDAsIDUwMCwgNV0sXG4gICAgICBkYW1waW5nOiBbMC4wOSwgMCwgMSwgMC4wMV0sXG4gICAgICBhdm9pZE92ZXJsYXA6IFswLCAwLCAxLCAwLjAxXSxcbiAgICB9LFxuICAgIG1heFZlbG9jaXR5OiBbNTAsIDAsIDE1MCwgMV0sXG4gICAgbWluVmVsb2NpdHk6IFswLjEsIDAuMDEsIDAuNSwgMC4wMV0sXG4gICAgc29sdmVyOiBbXG4gICAgICBcImJhcm5lc0h1dFwiLFxuICAgICAgXCJmb3JjZUF0bGFzMkJhc2VkXCIsXG4gICAgICBcInJlcHVsc2lvblwiLFxuICAgICAgXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIixcbiAgICBdLFxuICAgIHRpbWVzdGVwOiBbMC41LCAwLjAxLCAxLCAwLjAxXSxcbiAgICB3aW5kOiB7XG4gICAgICB4OiBbMCwgLTEwLCAxMCwgMC4xXSxcbiAgICAgIHk6IFswLCAtMTAsIDEwLCAwLjFdLFxuICAgIH0sXG4gICAgLy9hZGFwdGl2ZVRpbWVzdGVwOiB0cnVlXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgY29uZmlndXJhdG9ySGlkZU9wdGlvbjogQ29uZmlndXJhdG9ySGlkZU9wdGlvbiA9IChcbiAgcGFyZW50UGF0aCxcbiAgb3B0aW9uTmFtZSxcbiAgb3B0aW9uc1xuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChcbiAgICBwYXJlbnRQYXRoLmluY2x1ZGVzKFwicGh5c2ljc1wiKSAmJlxuICAgIChjb25maWd1cmVPcHRpb25zIGFzIGFueSkucGh5c2ljcy5zb2x2ZXIuaW5jbHVkZXMob3B0aW9uTmFtZSkgJiZcbiAgICBvcHRpb25zLnBoeXNpY3Muc29sdmVyICE9PSBvcHRpb25OYW1lICYmXG4gICAgb3B0aW9uTmFtZSAhPT0gXCJ3aW5kXCJcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgeyBhbGxPcHRpb25zLCBjb25maWd1cmVPcHRpb25zIH07XG4iLCAiLyoqXG4gKiAgVGhlIEZsb3lk4oCTV2Fyc2hhbGwgYWxnb3JpdGhtIGlzIGFuIGFsZ29yaXRobSBmb3IgZmluZGluZyBzaG9ydGVzdCBwYXRocyBpblxuICogIGEgd2VpZ2h0ZWQgZ3JhcGggd2l0aCBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBlZGdlIHdlaWdodHMgKGJ1dCB3aXRoIG5vIG5lZ2F0aXZlXG4gKiAgY3ljbGVzKS4gLSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GbG95ZOKAk1dhcnNoYWxsX2FsZ29yaXRobVxuICovXG5jbGFzcyBGbG95ZFdhcnNoYWxsIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzQXJyYXlcbiAgICogQHBhcmFtIHtBcnJheS48RWRnZT59IGVkZ2VzQXJyYXlcbiAgICogQHJldHVybnMge3t9fVxuICAgKi9cbiAgZ2V0RGlzdGFuY2VzKGJvZHksIG5vZGVzQXJyYXksIGVkZ2VzQXJyYXkpIHtcbiAgICBjb25zdCBEX21hdHJpeCA9IHt9O1xuICAgIGNvbnN0IGVkZ2VzID0gYm9keS5lZGdlcztcblxuICAgIC8vIHByZXBhcmUgbWF0cml4IHdpdGggbGFyZ2UgbnVtYmVyc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzQXJyYXlbaV07XG4gICAgICBjb25zdCBjZWxsID0ge307XG4gICAgICBEX21hdHJpeFtub2RlXSA9IGNlbGw7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5vZGVzQXJyYXkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY2VsbFtub2Rlc0FycmF5W2pdXSA9IGkgPT0gaiA/IDAgOiAxZTk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcHV0IHRoZSB3ZWlnaHRzIGZvciB0aGUgZWRnZXMgaW4uIFRoaXMgYXNzdW1lcyB1bmlkaXJlY3Rpb25hbGl0eS5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlc0FycmF5W2ldXTtcbiAgICAgIC8vIGVkZ2UgaGFzIHRvIGJlIGNvbm5lY3RlZCBpZiBpdCBjb3VudHMgdG8gdGhlIGRpc3RhbmNlcy4gSWYgaXQgaXMgY29ubmVjdGVkIHRvIGlubmVyIGNsdXN0ZXJzIGl0IHdpbGwgY3Jhc2ggc28gd2UgYWxzbyBjaGVjayBpZiBpdCBpcyBpbiB0aGUgRF9tYXRyaXhcbiAgICAgIGlmIChcbiAgICAgICAgZWRnZS5jb25uZWN0ZWQgPT09IHRydWUgJiZcbiAgICAgICAgRF9tYXRyaXhbZWRnZS5mcm9tSWRdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgRF9tYXRyaXhbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgRF9tYXRyaXhbZWRnZS5mcm9tSWRdW2VkZ2UudG9JZF0gPSAxO1xuICAgICAgICBEX21hdHJpeFtlZGdlLnRvSWRdW2VkZ2UuZnJvbUlkXSA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZUNvdW50ID0gbm9kZXNBcnJheS5sZW5ndGg7XG5cbiAgICAvLyBBZGFwdGVkIEZsb3lkV2Fyc2hhbGwgYmFzZWQgb24gdW5pZGlyZWN0aW9uYWxpdHkgdG8gZ3JlYXRseSByZWR1Y2UgY29tcGxleGl0eS5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IG5vZGVDb3VudDsgaysrKSB7XG4gICAgICBjb25zdCBrbm9kZSA9IG5vZGVzQXJyYXlba107XG4gICAgICBjb25zdCBrY29sbSA9IERfbWF0cml4W2tub2RlXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUNvdW50IC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlub2RlID0gbm9kZXNBcnJheVtpXTtcbiAgICAgICAgY29uc3QgaWNvbG0gPSBEX21hdHJpeFtpbm9kZV07XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5vZGVDb3VudDsgaisrKSB7XG4gICAgICAgICAgY29uc3Qgam5vZGUgPSBub2Rlc0FycmF5W2pdO1xuICAgICAgICAgIGNvbnN0IGpjb2xtID0gRF9tYXRyaXhbam5vZGVdO1xuXG4gICAgICAgICAgY29uc3QgdmFsID0gTWF0aC5taW4oaWNvbG1bam5vZGVdLCBpY29sbVtrbm9kZV0gKyBrY29sbVtqbm9kZV0pO1xuICAgICAgICAgIGljb2xtW2pub2RlXSA9IHZhbDtcbiAgICAgICAgICBqY29sbVtpbm9kZV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gRF9tYXRyaXg7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxveWRXYXJzaGFsbDtcbiIsICIvLyBkaXN0YW5jZSBmaW5kaW5nIGFsZ29yaXRobVxuaW1wb3J0IEZsb3lkV2Fyc2hhbGwgZnJvbSBcIi4vY29tcG9uZW50cy9hbGdvcml0aG1zL0Zsb3lkV2Fyc2hhbGwuanNcIjtcblxuLyoqXG4gKiBLYW1hZGFLYXdhaSBwb3NpdGlvbnMgdGhlIG5vZGVzIGluaXRpYWxseSBiYXNlZCBvblxuICpcbiAqIFwiQU4gQUxHT1JJVEhNIEZPUiBEUkFXSU5HIEdFTkVSQUwgVU5ESVJFQ1RFRCBHUkFQSFNcIlxuICogLS0gVG9taWhpc2EgS0FNQURBIGFuZCBTYXRvcnUgS0FXQUkgaW4gMTk4OVxuICpcbiAqIFBvc3NpYmxlIG9wdGltaXphdGlvbnMgaW4gdGhlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGNhbiBiZSBpbXBsZW1lbnRlZC5cbiAqL1xuY2xhc3MgS2FtYWRhS2F3YWkge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VMZW5ndGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VTdHJlbmd0aFxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgZWRnZUxlbmd0aCwgZWRnZVN0cmVuZ3RoKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnNwcmluZ0xlbmd0aCA9IGVkZ2VMZW5ndGg7XG4gICAgdGhpcy5zcHJpbmdDb25zdGFudCA9IGVkZ2VTdHJlbmd0aDtcbiAgICB0aGlzLmRpc3RhbmNlU29sdmVyID0gbmV3IEZsb3lkV2Fyc2hhbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3Qgc3VyZSBpZiBuZWVkZWQgYnV0IGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgc3ByaW5nIGxlbmd0aCBhbmQgc3ByaW5nIGNvbnN0YW50XG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuc3ByaW5nTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc3ByaW5nTGVuZ3RoID0gb3B0aW9ucy5zcHJpbmdMZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5zcHJpbmdDb25zdGFudCkge1xuICAgICAgICB0aGlzLnNwcmluZ0NvbnN0YW50ID0gb3B0aW9ucy5zcHJpbmdDb25zdGFudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9zaXRpb24gdGhlIHN5c3RlbVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gbm9kZXNBcnJheVxuICAgKiBAcGFyYW0ge0FycmF5Ljx2aXMuRWRnZT59IGVkZ2VzQXJyYXlcbiAgICogQHBhcmFtIHtib29sZWFufSBbaWdub3JlQ2x1c3RlcnM9ZmFsc2VdXG4gICAqL1xuICBzb2x2ZShub2Rlc0FycmF5LCBlZGdlc0FycmF5LCBpZ25vcmVDbHVzdGVycyA9IGZhbHNlKSB7XG4gICAgLy8gZ2V0IGRpc3RhbmNlIG1hdHJpeFxuICAgIGNvbnN0IERfbWF0cml4ID0gdGhpcy5kaXN0YW5jZVNvbHZlci5nZXREaXN0YW5jZXMoXG4gICAgICB0aGlzLmJvZHksXG4gICAgICBub2Rlc0FycmF5LFxuICAgICAgZWRnZXNBcnJheVxuICAgICk7IC8vIGRpc3RhbmNlIG1hdHJpeFxuXG4gICAgLy8gZ2V0IHRoZSBMIE1hdHJpeFxuICAgIHRoaXMuX2NyZWF0ZUxfbWF0cml4KERfbWF0cml4KTtcblxuICAgIC8vIGdldCB0aGUgSyBNYXRyaXhcbiAgICB0aGlzLl9jcmVhdGVLX21hdHJpeChEX21hdHJpeCk7XG5cbiAgICAvLyBpbml0aWFsIEUgTWF0cml4XG4gICAgdGhpcy5fY3JlYXRlRV9tYXRyaXgoKTtcblxuICAgIC8vIGNhbGN1bGF0ZSBwb3NpdGlvbnNcbiAgICBjb25zdCB0aHJlc2hvbGQgPSAwLjAxO1xuICAgIGNvbnN0IGlubmVyVGhyZXNob2xkID0gMTtcbiAgICBsZXQgaXRlcmF0aW9ucyA9IDA7XG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IE1hdGgubWF4KFxuICAgICAgMTAwMCxcbiAgICAgIE1hdGgubWluKDEwICogdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aCwgNjAwMClcbiAgICApO1xuICAgIGNvbnN0IG1heElubmVySXRlcmF0aW9ucyA9IDU7XG5cbiAgICBsZXQgbWF4RW5lcmd5ID0gMWU5O1xuICAgIGxldCBoaWdoRV9ub2RlSWQgPSAwLFxuICAgICAgZEVfZHggPSAwLFxuICAgICAgZEVfZHkgPSAwLFxuICAgICAgZGVsdGFfbSA9IDAsXG4gICAgICBzdWJJdGVyYXRpb25zID0gMDtcblxuICAgIHdoaWxlIChtYXhFbmVyZ3kgPiB0aHJlc2hvbGQgJiYgaXRlcmF0aW9ucyA8IG1heEl0ZXJhdGlvbnMpIHtcbiAgICAgIGl0ZXJhdGlvbnMgKz0gMTtcbiAgICAgIFtoaWdoRV9ub2RlSWQsIG1heEVuZXJneSwgZEVfZHgsIGRFX2R5XSA9XG4gICAgICAgIHRoaXMuX2dldEhpZ2hlc3RFbmVyZ3lOb2RlKGlnbm9yZUNsdXN0ZXJzKTtcbiAgICAgIGRlbHRhX20gPSBtYXhFbmVyZ3k7XG4gICAgICBzdWJJdGVyYXRpb25zID0gMDtcbiAgICAgIHdoaWxlIChkZWx0YV9tID4gaW5uZXJUaHJlc2hvbGQgJiYgc3ViSXRlcmF0aW9ucyA8IG1heElubmVySXRlcmF0aW9ucykge1xuICAgICAgICBzdWJJdGVyYXRpb25zICs9IDE7XG4gICAgICAgIHRoaXMuX21vdmVOb2RlKGhpZ2hFX25vZGVJZCwgZEVfZHgsIGRFX2R5KTtcbiAgICAgICAgW2RlbHRhX20sIGRFX2R4LCBkRV9keV0gPSB0aGlzLl9nZXRFbmVyZ3koaGlnaEVfbm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBub2RlIHdpdGggdGhlIGhpZ2hlc3QgZW5lcmd5XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlQ2x1c3RlcnNcbiAgICogQHJldHVybnMge251bWJlcltdfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEhpZ2hlc3RFbmVyZ3lOb2RlKGlnbm9yZUNsdXN0ZXJzKSB7XG4gICAgY29uc3Qgbm9kZXNBcnJheSA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBsZXQgbWF4RW5lcmd5ID0gMDtcbiAgICBsZXQgbWF4RW5lcmd5Tm9kZUlkID0gbm9kZXNBcnJheVswXTtcbiAgICBsZXQgZEVfZHhfbWF4ID0gMCxcbiAgICAgIGRFX2R5X21heCA9IDA7XG5cbiAgICBmb3IgKGxldCBub2RlSWR4ID0gMDsgbm9kZUlkeCA8IG5vZGVzQXJyYXkubGVuZ3RoOyBub2RlSWR4KyspIHtcbiAgICAgIGNvbnN0IG0gPSBub2Rlc0FycmF5W25vZGVJZHhdO1xuICAgICAgLy8gYnkgbm90IGV2YWx1YXRpbmcgbm9kZXMgd2l0aCBwcmVkZWZpbmVkIHBvc2l0aW9ucyB3ZSBzaG91bGQgb25seSBtb3ZlIG5vZGVzIHRoYXQgaGF2ZSBubyBwb3NpdGlvbnMuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGVzW21dLnByZWRlZmluZWRQb3NpdGlvbiAhPT0gdHJ1ZSB8fFxuICAgICAgICAobm9kZXNbbV0uaXNDbHVzdGVyID09PSB0cnVlICYmIGlnbm9yZUNsdXN0ZXJzID09PSB0cnVlKSB8fFxuICAgICAgICBub2Rlc1ttXS5vcHRpb25zLmZpeGVkLnggIT09IHRydWUgfHxcbiAgICAgICAgbm9kZXNbbV0ub3B0aW9ucy5maXhlZC55ICE9PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgW2RlbHRhX20sIGRFX2R4LCBkRV9keV0gPSB0aGlzLl9nZXRFbmVyZ3kobSk7XG4gICAgICAgIGlmIChtYXhFbmVyZ3kgPCBkZWx0YV9tKSB7XG4gICAgICAgICAgbWF4RW5lcmd5ID0gZGVsdGFfbTtcbiAgICAgICAgICBtYXhFbmVyZ3lOb2RlSWQgPSBtO1xuICAgICAgICAgIGRFX2R4X21heCA9IGRFX2R4O1xuICAgICAgICAgIGRFX2R5X21heCA9IGRFX2R5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFttYXhFbmVyZ3lOb2RlSWQsIG1heEVuZXJneSwgZEVfZHhfbWF4LCBkRV9keV9tYXhdO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGN1bGF0ZSB0aGUgZW5lcmd5IG9mIGEgc2luZ2xlIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBtXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRFbmVyZ3kobSkge1xuICAgIGNvbnN0IFtkRV9keCwgZEVfZHldID0gdGhpcy5FX3N1bXNbbV07XG4gICAgY29uc3QgZGVsdGFfbSA9IE1hdGguc3FydChkRV9keCAqKiAyICsgZEVfZHkgKiogMik7XG4gICAgcmV0dXJuIFtkZWx0YV9tLCBkRV9keCwgZEVfZHldO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIG5vZGUgYmFzZWQgb24gaXQncyBlbmVyZ3lcbiAgICogdGhlIGR4IGFuZCBkeSBhcmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBsaW5lYXIgc3lzdGVtIHByb3Bvc2VkIGJ5IEthbWFkYSBhbmQgS2F3YWlcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRFX2R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkRV9keVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVOb2RlKG0sIGRFX2R4LCBkRV9keSkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgbGV0IGQyRV9keDIgPSAwO1xuICAgIGxldCBkMkVfZHhkeSA9IDA7XG4gICAgbGV0IGQyRV9keTIgPSAwO1xuXG4gICAgY29uc3QgeF9tID0gbm9kZXNbbV0ueDtcbiAgICBjb25zdCB5X20gPSBub2Rlc1ttXS55O1xuICAgIGNvbnN0IGttID0gdGhpcy5LX21hdHJpeFttXTtcbiAgICBjb25zdCBsbSA9IHRoaXMuTF9tYXRyaXhbbV07XG5cbiAgICBmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpSWR4KyspIHtcbiAgICAgIGNvbnN0IGkgPSBub2Rlc0FycmF5W2lJZHhdO1xuICAgICAgaWYgKGkgIT09IG0pIHtcbiAgICAgICAgY29uc3QgeF9pID0gbm9kZXNbaV0ueDtcbiAgICAgICAgY29uc3QgeV9pID0gbm9kZXNbaV0ueTtcbiAgICAgICAgY29uc3Qga21hdCA9IGttW2ldO1xuICAgICAgICBjb25zdCBsbWF0ID0gbG1baV07XG4gICAgICAgIGNvbnN0IGRlbm9taW5hdG9yID0gMS4wIC8gKCh4X20gLSB4X2kpICoqIDIgKyAoeV9tIC0geV9pKSAqKiAyKSAqKiAxLjU7XG4gICAgICAgIGQyRV9keDIgKz0ga21hdCAqICgxIC0gbG1hdCAqICh5X20gLSB5X2kpICoqIDIgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGQyRV9keGR5ICs9IGttYXQgKiAobG1hdCAqICh4X20gLSB4X2kpICogKHlfbSAtIHlfaSkgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGQyRV9keTIgKz0ga21hdCAqICgxIC0gbG1hdCAqICh4X20gLSB4X2kpICoqIDIgKiBkZW5vbWluYXRvcik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1ha2UgdGhlIHZhcmlhYmxlIG5hbWVzIGVhc2llciB0byBtYWtlIHRoZSBzb2x2aW5nIG9mIHRoZSBsaW5lYXIgc3lzdGVtIGVhc2llciB0byByZWFkXG4gICAgY29uc3QgQSA9IGQyRV9keDIsXG4gICAgICBCID0gZDJFX2R4ZHksXG4gICAgICBDID0gZEVfZHgsXG4gICAgICBEID0gZDJFX2R5MixcbiAgICAgIEUgPSBkRV9keTtcblxuICAgIC8vIHNvbHZlIHRoZSBsaW5lYXIgc3lzdGVtIGZvciBkeCBhbmQgZHlcbiAgICBjb25zdCBkeSA9IChDIC8gQSArIEUgLyBCKSAvIChCIC8gQSAtIEQgLyBCKTtcbiAgICBjb25zdCBkeCA9IC0oQiAqIGR5ICsgQykgLyBBO1xuXG4gICAgLy8gbW92ZSB0aGUgbm9kZVxuICAgIG5vZGVzW21dLnggKz0gZHg7XG4gICAgbm9kZXNbbV0ueSArPSBkeTtcblxuICAgIC8vIFJlY2FsY3VsYXRlIEVfbWF0cml4IChzaG91bGQgYmUgaW5jcmVtZW50YWwpXG4gICAgdGhpcy5fdXBkYXRlRV9tYXRyaXgobSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBMIG1hdHJpeDogZWRnZSBsZW5ndGggdGltZXMgc2hvcnRlc3QgcGF0aFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gRF9tYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVMX21hdHJpeChEX21hdHJpeCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3QgZWRnZUxlbmd0aCA9IHRoaXMuc3ByaW5nTGVuZ3RoO1xuXG4gICAgdGhpcy5MX21hdHJpeCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5MX21hdHJpeFtub2Rlc0FycmF5W2ldXSA9IHt9O1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2Rlc0FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHRoaXMuTF9tYXRyaXhbbm9kZXNBcnJheVtpXV1bbm9kZXNBcnJheVtqXV0gPVxuICAgICAgICAgIGVkZ2VMZW5ndGggKiBEX21hdHJpeFtub2Rlc0FycmF5W2ldXVtub2Rlc0FycmF5W2pdXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBLIG1hdHJpeDogc3ByaW5nIGNvbnN0YW50cyB0aW1lcyBzaG9ydGVzdCBwYXRoXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBEX21hdHJpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUtfbWF0cml4KERfbWF0cml4KSB7XG4gICAgY29uc3Qgbm9kZXNBcnJheSA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICBjb25zdCBlZGdlU3RyZW5ndGggPSB0aGlzLnNwcmluZ0NvbnN0YW50O1xuXG4gICAgdGhpcy5LX21hdHJpeCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5LX21hdHJpeFtub2Rlc0FycmF5W2ldXSA9IHt9O1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2Rlc0FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHRoaXMuS19tYXRyaXhbbm9kZXNBcnJheVtpXV1bbm9kZXNBcnJheVtqXV0gPVxuICAgICAgICAgIGVkZ2VTdHJlbmd0aCAqIERfbWF0cml4W25vZGVzQXJyYXlbaV1dW25vZGVzQXJyYXlbal1dICoqIC0yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAgQ3JlYXRlIG1hdHJpeCB3aXRoIGFsbCBlbmVyZ2llcyBiZXR3ZWVuIG5vZGVzXG4gICAqXG4gICAqICBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUVfbWF0cml4KCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgdGhpcy5FX21hdHJpeCA9IHt9O1xuICAgIHRoaXMuRV9zdW1zID0ge307XG4gICAgZm9yIChsZXQgbUlkeCA9IDA7IG1JZHggPCBub2Rlc0FycmF5Lmxlbmd0aDsgbUlkeCsrKSB7XG4gICAgICB0aGlzLkVfbWF0cml4W25vZGVzQXJyYXlbbUlkeF1dID0gW107XG4gICAgfVxuICAgIGZvciAobGV0IG1JZHggPSAwOyBtSWR4IDwgbm9kZXNBcnJheS5sZW5ndGg7IG1JZHgrKykge1xuICAgICAgY29uc3QgbSA9IG5vZGVzQXJyYXlbbUlkeF07XG4gICAgICBjb25zdCB4X20gPSBub2Rlc1ttXS54O1xuICAgICAgY29uc3QgeV9tID0gbm9kZXNbbV0ueTtcbiAgICAgIGxldCBkRV9keCA9IDA7XG4gICAgICBsZXQgZEVfZHkgPSAwO1xuICAgICAgZm9yIChsZXQgaUlkeCA9IG1JZHg7IGlJZHggPCBub2Rlc0FycmF5Lmxlbmd0aDsgaUlkeCsrKSB7XG4gICAgICAgIGNvbnN0IGkgPSBub2Rlc0FycmF5W2lJZHhdO1xuICAgICAgICBpZiAoaSAhPT0gbSkge1xuICAgICAgICAgIGNvbnN0IHhfaSA9IG5vZGVzW2ldLng7XG4gICAgICAgICAgY29uc3QgeV9pID0gbm9kZXNbaV0ueTtcbiAgICAgICAgICBjb25zdCBkZW5vbWluYXRvciA9XG4gICAgICAgICAgICAxLjAgLyBNYXRoLnNxcnQoKHhfbSAtIHhfaSkgKiogMiArICh5X20gLSB5X2kpICoqIDIpO1xuICAgICAgICAgIHRoaXMuRV9tYXRyaXhbbV1baUlkeF0gPSBbXG4gICAgICAgICAgICB0aGlzLktfbWF0cml4W21dW2ldICpcbiAgICAgICAgICAgICAgKHhfbSAtIHhfaSAtIHRoaXMuTF9tYXRyaXhbbV1baV0gKiAoeF9tIC0geF9pKSAqIGRlbm9taW5hdG9yKSxcbiAgICAgICAgICAgIHRoaXMuS19tYXRyaXhbbV1baV0gKlxuICAgICAgICAgICAgICAoeV9tIC0geV9pIC0gdGhpcy5MX21hdHJpeFttXVtpXSAqICh5X20gLSB5X2kpICogZGVub21pbmF0b3IpLFxuICAgICAgICAgIF07XG4gICAgICAgICAgdGhpcy5FX21hdHJpeFtpXVttSWR4XSA9IHRoaXMuRV9tYXRyaXhbbV1baUlkeF07XG4gICAgICAgICAgZEVfZHggKz0gdGhpcy5FX21hdHJpeFttXVtpSWR4XVswXTtcbiAgICAgICAgICBkRV9keSArPSB0aGlzLkVfbWF0cml4W21dW2lJZHhdWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL1N0b3JlIHN1bVxuICAgICAgdGhpcy5FX3N1bXNbbV0gPSBbZEVfZHgsIGRFX2R5XTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG1ldGhvZCwganVzdCBkb2luZyBzaW5nbGUgY29sdW1uIChyb3dzIGFyZSBhdXRvLXVwZGF0ZWQpICh1cGRhdGUgYWxsIHN1bXMpXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlRV9tYXRyaXgobSkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgY29sbSA9IHRoaXMuRV9tYXRyaXhbbV07XG4gICAgY29uc3Qga2NvbG0gPSB0aGlzLktfbWF0cml4W21dO1xuICAgIGNvbnN0IGxjb2xtID0gdGhpcy5MX21hdHJpeFttXTtcbiAgICBjb25zdCB4X20gPSBub2Rlc1ttXS54O1xuICAgIGNvbnN0IHlfbSA9IG5vZGVzW21dLnk7XG4gICAgbGV0IGRFX2R4ID0gMDtcbiAgICBsZXQgZEVfZHkgPSAwO1xuICAgIGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgbm9kZXNBcnJheS5sZW5ndGg7IGlJZHgrKykge1xuICAgICAgY29uc3QgaSA9IG5vZGVzQXJyYXlbaUlkeF07XG4gICAgICBpZiAoaSAhPT0gbSkge1xuICAgICAgICAvL0tlZXAgb2xkIGVuZXJneSB2YWx1ZSBmb3Igc3VtIG1vZGlmaWNhdGlvbiBiZWxvd1xuICAgICAgICBjb25zdCBjZWxsID0gY29sbVtpSWR4XTtcbiAgICAgICAgY29uc3Qgb2xkRHggPSBjZWxsWzBdO1xuICAgICAgICBjb25zdCBvbGREeSA9IGNlbGxbMV07XG5cbiAgICAgICAgLy9DYWxjIG5ldyBlbmVyZ3k6XG4gICAgICAgIGNvbnN0IHhfaSA9IG5vZGVzW2ldLng7XG4gICAgICAgIGNvbnN0IHlfaSA9IG5vZGVzW2ldLnk7XG4gICAgICAgIGNvbnN0IGRlbm9taW5hdG9yID1cbiAgICAgICAgICAxLjAgLyBNYXRoLnNxcnQoKHhfbSAtIHhfaSkgKiogMiArICh5X20gLSB5X2kpICoqIDIpO1xuICAgICAgICBjb25zdCBkeCA9XG4gICAgICAgICAga2NvbG1baV0gKiAoeF9tIC0geF9pIC0gbGNvbG1baV0gKiAoeF9tIC0geF9pKSAqIGRlbm9taW5hdG9yKTtcbiAgICAgICAgY29uc3QgZHkgPVxuICAgICAgICAgIGtjb2xtW2ldICogKHlfbSAtIHlfaSAtIGxjb2xtW2ldICogKHlfbSAtIHlfaSkgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGNvbG1baUlkeF0gPSBbZHgsIGR5XTtcbiAgICAgICAgZEVfZHggKz0gZHg7XG4gICAgICAgIGRFX2R5ICs9IGR5O1xuXG4gICAgICAgIC8vYWRkIG5ldyBlbmVyZ3kgdG8gc3VtIG9mIGVhY2ggY29sdW1uXG4gICAgICAgIGNvbnN0IHN1bSA9IHRoaXMuRV9zdW1zW2ldO1xuICAgICAgICBzdW1bMF0gKz0gZHggLSBvbGREeDtcbiAgICAgICAgc3VtWzFdICs9IGR5IC0gb2xkRHk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vU3RvcmUgc3VtIGF0IC0xIGluZGV4XG4gICAgdGhpcy5FX3N1bXNbbV0gPSBbZEVfZHgsIGRFX2R5XTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBLYW1hZGFLYXdhaTtcbiIsICIvLyBMb2FkIGN1c3RvbSBzaGFwZXMgaW50byBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbmltcG9ydCBcIi4vc2hhcGVzXCI7XG5cbmltcG9ydCBcInZpcy11dGlsL2VzbmV4dC9zdHlsZXMvYWN0aXZhdG9yLmNzc1wiO1xuaW1wb3J0IFwidmlzLXV0aWwvZXNuZXh0L3N0eWxlcy9ib290c3RyYXAuY3NzXCI7XG5pbXBvcnQgXCJ2aXMtdXRpbC9lc25leHQvc3R5bGVzL2NvbG9yLXBpY2tlci5jc3NcIjtcbmltcG9ydCBcInZpcy11dGlsL2VzbmV4dC9zdHlsZXMvY29uZmlndXJhdG9yLmNzc1wiO1xuaW1wb3J0IFwidmlzLXV0aWwvZXNuZXh0L3N0eWxlcy9wb3B1cC5jc3NcIjtcblxuaW1wb3J0IEVtaXR0ZXIgZnJvbSBcImNvbXBvbmVudC1lbWl0dGVyXCI7XG5pbXBvcnQge1xuICBBY3RpdmF0b3IsXG4gIENvbmZpZ3VyYXRvcixcbiAgVkFMSURBVE9SX1BSSU5UX1NUWUxFLFxuICBWYWxpZGF0b3IsXG4gIGRlZXBFeHRlbmQsXG4gIHJlY3Vyc2l2ZURPTURlbGV0ZSxcbiAgc2VsZWN0aXZlRGVlcEV4dGVuZCxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgRE9UVG9HcmFwaCB9IGZyb20gXCIuL2RvdHBhcnNlclwiO1xuaW1wb3J0IHsgcGFyc2VHZXBoaSB9IGZyb20gXCIuL2dlcGhpUGFyc2VyXCI7XG5pbXBvcnQgKiBhcyBsb2NhbGVzIGZyb20gXCIuL2xvY2FsZXNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUxhbmd1YWdlQ29kZSB9IGZyb20gXCIuL2xvY2FsZS11dGlsc1wiO1xuXG5pbXBvcnQgSW1hZ2VzIGZyb20gXCIuL0ltYWdlc1wiO1xuaW1wb3J0IHsgR3JvdXBzIH0gZnJvbSBcIi4vbW9kdWxlcy9Hcm91cHNcIjtcbmltcG9ydCBOb2Rlc0hhbmRsZXIgZnJvbSBcIi4vbW9kdWxlcy9Ob2Rlc0hhbmRsZXJcIjtcbmltcG9ydCBFZGdlc0hhbmRsZXIgZnJvbSBcIi4vbW9kdWxlcy9FZGdlc0hhbmRsZXJcIjtcbmltcG9ydCBQaHlzaWNzRW5naW5lIGZyb20gXCIuL21vZHVsZXMvUGh5c2ljc0VuZ2luZVwiO1xuaW1wb3J0IENsdXN0ZXJFbmdpbmUgZnJvbSBcIi4vbW9kdWxlcy9DbHVzdGVyaW5nXCI7XG5pbXBvcnQgQ2FudmFzUmVuZGVyZXIgZnJvbSBcIi4vbW9kdWxlcy9DYW52YXNSZW5kZXJlclwiO1xuaW1wb3J0IENhbnZhcyBmcm9tIFwiLi9tb2R1bGVzL0NhbnZhc1wiO1xuaW1wb3J0IFZpZXcgZnJvbSBcIi4vbW9kdWxlcy9WaWV3XCI7XG5pbXBvcnQgSW50ZXJhY3Rpb25IYW5kbGVyIGZyb20gXCIuL21vZHVsZXMvSW50ZXJhY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgU2VsZWN0aW9uSGFuZGxlciBmcm9tIFwiLi9tb2R1bGVzL1NlbGVjdGlvbkhhbmRsZXJcIjtcbmltcG9ydCBMYXlvdXRFbmdpbmUgZnJvbSBcIi4vbW9kdWxlcy9MYXlvdXRFbmdpbmVcIjtcbmltcG9ydCBNYW5pcHVsYXRpb25TeXN0ZW0gZnJvbSBcIi4vbW9kdWxlcy9NYW5pcHVsYXRpb25TeXN0ZW1cIjtcbmltcG9ydCB7XG4gIGFsbE9wdGlvbnMsXG4gIGNvbmZpZ3VyZU9wdGlvbnMsXG4gIGNvbmZpZ3VyYXRvckhpZGVPcHRpb24sXG59IGZyb20gXCIuL29wdGlvbnNcIjtcbmltcG9ydCBLYW1hZGFLYXdhaSBmcm9tIFwiLi9tb2R1bGVzL0thbWFkYUthd2FpLmpzXCI7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV0d29yayB2aXN1YWxpemF0aW9uLCBkaXNwbGF5aW5nIG5vZGVzIGFuZCBlZGdlcy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgIFRoZSBET00gZWxlbWVudCBpbiB3aGljaCB0aGUgTmV0d29yayB3aWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBjcmVhdGVkLiBOb3JtYWxseSBhIGRpdiBlbGVtZW50LlxuICogQHBhcmFtIHtvYmplY3R9IGRhdGEgICAgICAgICBBbiBvYmplY3QgY29udGFpbmluZyBwYXJhbWV0ZXJzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtBcnJheX0gbm9kZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0FycmF5fSBlZGdlc1xuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgICAgICBPcHRpb25zXG4gKiBAY2xhc3MgTmV0d29ya1xuICovXG5leHBvcnQgZnVuY3Rpb24gTmV0d29yayhjb250YWluZXIsIGRhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE5ldHdvcmspKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yXCIpO1xuICB9XG5cbiAgLy8gc2V0IGNvbnN0YW50IHZhbHVlc1xuICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBsb2NhbGU6IFwiZW5cIixcbiAgICBsb2NhbGVzOiBsb2NhbGVzLFxuICAgIGNsaWNrVG9Vc2U6IGZhbHNlLFxuICB9O1xuICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lcnMgZm9yIG5vZGVzIGFuZCBlZGdlcy5cbiAgICpcbiAgICogJ2VkZ2VzJyBhbmQgJ25vZGVzJyBjb250YWluIHRoZSBmdWxsIGRlZmluaXRpb25zIG9mIGFsbCB0aGUgbmV0d29yayBlbGVtZW50cy5cbiAgICogJ25vZGVJbmRpY2VzJyBhbmQgJ2VkZ2VJbmRpY2VzJyBjb250YWluIHRoZSBpZCdzIG9mIHRoZSBhY3RpdmUgZWxlbWVudHMuXG4gICAqXG4gICAqIFRoZSBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgYSBkZWZpbmVkIG5vZGUgbmVlZCBub3QgYmUgYWN0aXZlLCBpLmUuXG4gICAqIHZpc2libGUgb24gdGhlIGNhbnZhcy4gVGhpcyBoYXBwZW5zIGluIHBhcnRpY3VsYXIgd2hlbiBjbHVzdGVycyBhcmUgZGVmaW5lZCwgaW5cbiAgICogdGhhdCBjYXNlIHRoZXJlIHdpbGwgYmUgbm9kZXMgYW5kIGVkZ2VzIG5vdCBkaXNwbGF5ZWQuXG4gICAqIFRoZSBib3R0b20gbGluZSBpcyB0aGF0IGFsbCBjb2RlIHdpdGggYWN0aW9ucyByZWxhdGVkIHRvIHZpc2liaWxpdHksICptdXN0KiB1c2VcbiAgICogJ25vZGVJbmRpY2VzJyBhbmQgJ2VkZ2VJbmRpY2VzJywgbm90ICdub2RlcycgYW5kICdlZGdlcycgZGlyZWN0bHkuXG4gICAqL1xuICB0aGlzLmJvZHkgPSB7XG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG5cbiAgICAvLyBTZWUgY29tbWVudCBhYm92ZSBmb3IgZm9sbG93aW5nIGZpZWxkc1xuICAgIG5vZGVzOiB7fSxcbiAgICBub2RlSW5kaWNlczogW10sXG4gICAgZWRnZXM6IHt9LFxuICAgIGVkZ2VJbmRpY2VzOiBbXSxcblxuICAgIGVtaXR0ZXI6IHtcbiAgICAgIG9uOiB0aGlzLm9uLmJpbmQodGhpcyksXG4gICAgICBvZmY6IHRoaXMub2ZmLmJpbmQodGhpcyksXG4gICAgICBlbWl0OiB0aGlzLmVtaXQuYmluZCh0aGlzKSxcbiAgICAgIG9uY2U6IHRoaXMub25jZS5iaW5kKHRoaXMpLFxuICAgIH0sXG4gICAgZXZlbnRMaXN0ZW5lcnM6IHtcbiAgICAgIG9uVGFwOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uVG91Y2g6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Eb3VibGVUYXA6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Ib2xkOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uRHJhZzogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkRyYWdFbmQ6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Nb3VzZVdoZWVsOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uUGluY2g6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Nb3VzZU1vdmU6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25SZWxlYXNlOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uQ29udGV4dDogZnVuY3Rpb24gKCkge30sXG4gICAgfSxcbiAgICBkYXRhOiB7XG4gICAgICBub2RlczogbnVsbCwgLy8gQSBEYXRhU2V0IG9yIERhdGFWaWV3XG4gICAgICBlZGdlczogbnVsbCwgLy8gQSBEYXRhU2V0IG9yIERhdGFWaWV3XG4gICAgfSxcbiAgICBmdW5jdGlvbnM6IHtcbiAgICAgIGNyZWF0ZU5vZGU6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgY3JlYXRlRWRnZTogZnVuY3Rpb24gKCkge30sXG4gICAgICBnZXRQb2ludGVyOiBmdW5jdGlvbiAoKSB7fSxcbiAgICB9LFxuICAgIG1vZHVsZXM6IHt9LFxuICAgIHZpZXc6IHtcbiAgICAgIHNjYWxlOiAxLFxuICAgICAgdHJhbnNsYXRpb246IHsgeDogMCwgeTogMCB9LFxuICAgIH0sXG4gICAgc2VsZWN0aW9uQm94OiB7XG4gICAgICBzaG93OiBmYWxzZSxcbiAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIHN0YXJ0OiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgICAgZW5kOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBiaW5kIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAvLyBzZXR0aW5nIHVwIGFsbCBtb2R1bGVzXG4gIHRoaXMuaW1hZ2VzID0gbmV3IEltYWdlcygoKSA9PiB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIikpOyAvLyBvYmplY3Qgd2l0aCBpbWFnZXNcbiAgdGhpcy5ncm91cHMgPSBuZXcgR3JvdXBzKCk7IC8vIG9iamVjdCB3aXRoIGdyb3Vwc1xuICB0aGlzLmNhbnZhcyA9IG5ldyBDYW52YXModGhpcy5ib2R5KTsgLy8gRE9NIGhhbmRsZXJcbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gbmV3IFNlbGVjdGlvbkhhbmRsZXIodGhpcy5ib2R5LCB0aGlzLmNhbnZhcyk7IC8vIFNlbGVjdGlvbiBoYW5kbGVyXG4gIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyID0gbmV3IEludGVyYWN0aW9uSGFuZGxlcihcbiAgICB0aGlzLmJvZHksXG4gICAgdGhpcy5jYW52YXMsXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyXG4gICk7IC8vIEludGVyYWN0aW9uIGhhbmRsZXIgaGFuZGxlcyBhbGwgdGhlIGhhbW1lciBiaW5kaW5ncyAodGhhdCBhcmUgYm91bmQgYnkgY2FudmFzKSwga2V5XG4gIHRoaXMudmlldyA9IG5ldyBWaWV3KHRoaXMuYm9keSwgdGhpcy5jYW52YXMpOyAvLyBjYW1lcmEgaGFuZGxlciwgZG9lcyBhbmltYXRpb25zIGFuZCB6b29tc1xuICB0aGlzLnJlbmRlcmVyID0gbmV3IENhbnZhc1JlbmRlcmVyKHRoaXMuYm9keSwgdGhpcy5jYW52YXMpOyAvLyByZW5kZXJlciwgc3RhcnRzIHJlbmRlcmxvb3AsIGhhcyBldmVudHMgdGhhdCBtb2R1bGVzIGNhbiBob29rIGludG9cbiAgdGhpcy5waHlzaWNzID0gbmV3IFBoeXNpY3NFbmdpbmUodGhpcy5ib2R5KTsgLy8gcGh5c2ljcyBlbmdpbmUsIGRvZXMgYWxsIHRoZSBzaW11bGF0aW9uc1xuICB0aGlzLmxheW91dEVuZ2luZSA9IG5ldyBMYXlvdXRFbmdpbmUodGhpcy5ib2R5KTsgLy8gbGF5b3V0IGVuZ2luZSBmb3IgaW5pdGFsIGxheW91dCBhbmQgaGllcmFyY2hpY2FsIGxheW91dFxuICB0aGlzLmNsdXN0ZXJpbmcgPSBuZXcgQ2x1c3RlckVuZ2luZSh0aGlzLmJvZHkpOyAvLyBjbHVzdGVyaW5nIGFwaVxuICB0aGlzLm1hbmlwdWxhdGlvbiA9IG5ldyBNYW5pcHVsYXRpb25TeXN0ZW0oXG4gICAgdGhpcy5ib2R5LFxuICAgIHRoaXMuY2FudmFzLFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICB0aGlzLmludGVyYWN0aW9uSGFuZGxlclxuICApOyAvLyBkYXRhIG1hbmlwdWxhdGlvbiBzeXN0ZW1cblxuICB0aGlzLm5vZGVzSGFuZGxlciA9IG5ldyBOb2Rlc0hhbmRsZXIoXG4gICAgdGhpcy5ib2R5LFxuICAgIHRoaXMuaW1hZ2VzLFxuICAgIHRoaXMuZ3JvdXBzLFxuICAgIHRoaXMubGF5b3V0RW5naW5lXG4gICk7IC8vIEhhbmRsZSBhZGRpbmcsIGRlbGV0aW5nIGFuZCB1cGRhdGluZyBvZiBub2RlcyBhcyB3ZWxsIGFzIGdsb2JhbCBvcHRpb25zXG4gIHRoaXMuZWRnZXNIYW5kbGVyID0gbmV3IEVkZ2VzSGFuZGxlcih0aGlzLmJvZHksIHRoaXMuaW1hZ2VzLCB0aGlzLmdyb3Vwcyk7IC8vIEhhbmRsZSBhZGRpbmcsIGRlbGV0aW5nIGFuZCB1cGRhdGluZyBvZiBlZGdlcyBhcyB3ZWxsIGFzIGdsb2JhbCBvcHRpb25zXG5cbiAgdGhpcy5ib2R5Lm1vZHVsZXNbXCJrYW1hZGFLYXdhaVwiXSA9IG5ldyBLYW1hZGFLYXdhaSh0aGlzLmJvZHksIDE1MCwgMC4wNSk7IC8vIExheW91dGluZyBhbGdvcml0aG0uXG4gIHRoaXMuYm9keS5tb2R1bGVzW1wiY2x1c3RlcmluZ1wiXSA9IHRoaXMuY2x1c3RlcmluZztcblxuICAvLyBjcmVhdGUgdGhlIERPTSBlbGVtZW50c1xuICB0aGlzLmNhbnZhcy5fY3JlYXRlKCk7XG5cbiAgLy8gYXBwbHkgb3B0aW9uc1xuICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgLy8gbG9hZCBkYXRhICh0aGUgZGlzYWJsZSBzdGFydCB2YXJpYWJsZSB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBlbmFibGVkIGNsdXN0ZXJpbmcpXG4gIHRoaXMuc2V0RGF0YShkYXRhKTtcbn1cblxuLy8gRXh0ZW5kIE5ldHdvcmsgd2l0aCBhbiBFbWl0dGVyIG1peGluXG5FbWl0dGVyKE5ldHdvcmsucHJvdG90eXBlKTtcblxuLyoqXG4gKiBTZXQgb3B0aW9uc1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gbnVsbCkge1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7IC8vIFRoaXMgZW5zdXJlcyB0aGF0IG9wdGlvbnMgaGFuZGxpbmcgZG9lc24ndCBjcmFzaCBpbiB0aGUgaGFuZGxpbmdcbiAgfVxuXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBlcnJvckZvdW5kID0gVmFsaWRhdG9yLnZhbGlkYXRlKG9wdGlvbnMsIGFsbE9wdGlvbnMpO1xuICAgIGlmIChlcnJvckZvdW5kID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjRXJyb3JzIGhhdmUgYmVlbiBmb3VuZCBpbiB0aGUgc3VwcGxpZWQgb3B0aW9ucyBvYmplY3QuXCIsXG4gICAgICAgIFZBTElEQVRPUl9QUklOVF9TVFlMRVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjb3B5IHRoZSBnbG9iYWwgZmllbGRzIG92ZXJcbiAgICBjb25zdCBmaWVsZHMgPSBbXCJsb2NhbGVcIiwgXCJsb2NhbGVzXCIsIFwiY2xpY2tUb1VzZVwiXTtcbiAgICBzZWxlY3RpdmVEZWVwRXh0ZW5kKGZpZWxkcywgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgIC8vIG5vcm1hbGl6ZSB0aGUgbG9jYWxlIG9yIHVzZSBFbmdsaXNoXG4gICAgaWYgKG9wdGlvbnMubG9jYWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMubG9jYWxlID0gbm9ybWFsaXplTGFuZ3VhZ2VDb2RlKFxuICAgICAgICBvcHRpb25zLmxvY2FsZXMgfHwgdGhpcy5vcHRpb25zLmxvY2FsZXMsXG4gICAgICAgIG9wdGlvbnMubG9jYWxlXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHRoZSBoaWVyYXJjaGljYWwgc3lzdGVtIGNhbiBhZGFwdCB0aGUgZWRnZXMgYW5kIHRoZSBwaHlzaWNzIHRvIGl0J3Mgb3duIG9wdGlvbnMgYmVjYXVzZSBub3QgYWxsIGNvbWJpbmF0aW9ucyB3b3JrIHdpdGggdGhlIGhpZXJhcmljaGljYWwgc3lzdGVtLlxuICAgIG9wdGlvbnMgPSB0aGlzLmxheW91dEVuZ2luZS5zZXRPcHRpb25zKG9wdGlvbnMubGF5b3V0LCBvcHRpb25zKTtcblxuICAgIHRoaXMuY2FudmFzLnNldE9wdGlvbnMob3B0aW9ucyk7IC8vIG9wdGlvbnMgZm9yIGNhbnZhcyBhcmUgaW4gZ2xvYmFsc1xuXG4gICAgLy8gcGFzcyB0aGUgb3B0aW9ucyB0byB0aGUgbW9kdWxlc1xuICAgIHRoaXMuZ3JvdXBzLnNldE9wdGlvbnMob3B0aW9ucy5ncm91cHMpO1xuICAgIHRoaXMubm9kZXNIYW5kbGVyLnNldE9wdGlvbnMob3B0aW9ucy5ub2Rlcyk7XG4gICAgdGhpcy5lZGdlc0hhbmRsZXIuc2V0T3B0aW9ucyhvcHRpb25zLmVkZ2VzKTtcbiAgICB0aGlzLnBoeXNpY3Muc2V0T3B0aW9ucyhvcHRpb25zLnBoeXNpY3MpO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uLnNldE9wdGlvbnMob3B0aW9ucy5tYW5pcHVsYXRpb24sIG9wdGlvbnMsIHRoaXMub3B0aW9ucyk7IC8vIG1hbmlwdWxhdGlvbiB1c2VzIHRoZSBsb2NhbGVzIGluIHRoZSBnbG9iYWxzXG5cbiAgICB0aGlzLmludGVyYWN0aW9uSGFuZGxlci5zZXRPcHRpb25zKG9wdGlvbnMuaW50ZXJhY3Rpb24pO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T3B0aW9ucyhvcHRpb25zLmludGVyYWN0aW9uKTsgLy8gb3B0aW9ucyBmb3IgcmVuZGVyaW5nIGFyZSBpbiBpbnRlcmFjdGlvblxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZXRPcHRpb25zKG9wdGlvbnMuaW50ZXJhY3Rpb24pOyAvLyBvcHRpb25zIGZvciBzZWxlY3Rpb24gYXJlIGluIGludGVyYWN0aW9uXG5cbiAgICAvLyByZWxvYWQgdGhlIHNldHRpbmdzIG9mIHRoZSBub2RlcyB0byBhcHBseSBjaGFuZ2VzIGluIGdyb3VwcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBieSBwb2ludGVyLlxuICAgIGlmIChvcHRpb25zLmdyb3VwcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVmcmVzaE5vZGVzXCIpO1xuICAgIH1cbiAgICAvLyB0aGVzZSB0d28gZG8gbm90IGhhdmUgb3B0aW9ucyBhdCB0aGUgbW9tZW50LCBoZXJlIGZvciBjb21wbGV0ZW5lc3NcbiAgICAvL3RoaXMudmlldy5zZXRPcHRpb25zKG9wdGlvbnMudmlldyk7XG4gICAgLy90aGlzLmNsdXN0ZXJpbmcuc2V0T3B0aW9ucyhvcHRpb25zLmNsdXN0ZXJpbmcpO1xuXG4gICAgaWYgKFwiY29uZmlndXJlXCIgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRvcikge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRvciA9IG5ldyBDb25maWd1cmF0b3IoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmJvZHkuY29udGFpbmVyLFxuICAgICAgICAgIGNvbmZpZ3VyZU9wdGlvbnMsXG4gICAgICAgICAgdGhpcy5jYW52YXMucGl4ZWxSYXRpbyxcbiAgICAgICAgICBjb25maWd1cmF0b3JIaWRlT3B0aW9uXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29uZmlndXJhdG9yLnNldE9wdGlvbnMob3B0aW9ucy5jb25maWd1cmUpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBpcyBlbmFibGVkLCBjb3B5IGFsbCBvcHRpb25zIGFuZCBwdXQgdGhlbSBpbnRvIHRoZSBjb25maWcgc3lzdGVtXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdG9yICYmIHRoaXMuY29uZmlndXJhdG9yLm9wdGlvbnMuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgbmV0d29ya09wdGlvbnMgPSB7XG4gICAgICAgIG5vZGVzOiB7fSxcbiAgICAgICAgZWRnZXM6IHt9LFxuICAgICAgICBsYXlvdXQ6IHt9LFxuICAgICAgICBpbnRlcmFjdGlvbjoge30sXG4gICAgICAgIG1hbmlwdWxhdGlvbjoge30sXG4gICAgICAgIHBoeXNpY3M6IHt9LFxuICAgICAgICBnbG9iYWw6IHt9LFxuICAgICAgfTtcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMubm9kZXMsIHRoaXMubm9kZXNIYW5kbGVyLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5lZGdlcywgdGhpcy5lZGdlc0hhbmRsZXIub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLmxheW91dCwgdGhpcy5sYXlvdXRFbmdpbmUub3B0aW9ucyk7XG4gICAgICAvLyBsb2FkIHRoZSBzZWxlY3Rpb25IYW5kbGVyIGFuZCByZW5kZXIgZGVmYXVsdCBvcHRpb25zIGluIHRvIHRoZSBpbnRlcmFjdGlvbiBncm91cFxuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5pbnRlcmFjdGlvbiwgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5pbnRlcmFjdGlvbiwgdGhpcy5yZW5kZXJlci5vcHRpb25zKTtcblxuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5pbnRlcmFjdGlvbiwgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLm1hbmlwdWxhdGlvbiwgdGhpcy5tYW5pcHVsYXRpb24ub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLnBoeXNpY3MsIHRoaXMucGh5c2ljcy5vcHRpb25zKTtcblxuICAgICAgLy8gbG9hZCBnbG9iYWxzIGludG8gdGhlIGdsb2JhbCBvYmplY3RcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuZ2xvYmFsLCB0aGlzLmNhbnZhcy5vcHRpb25zKTtcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuZ2xvYmFsLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRvci5zZXRNb2R1bGVPcHRpb25zKG5ldHdvcmtPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbmV0d29yayBnbG9iYWwgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zLmNsaWNrVG9Vc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMuY2xpY2tUb1VzZSA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdG9yID0gbmV3IEFjdGl2YXRvcih0aGlzLmNhbnZhcy5mcmFtZSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmF0b3Iub24oXCJjaGFuZ2VcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImFjdGl2YXRlXCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmF0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5hY3RpdmF0b3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImFjdGl2YXRlXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYWN0aXZhdGVcIik7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuc2V0U2l6ZSgpO1xuICAgIC8vIHN0YXJ0IHRoZSBwaHlzaWNzIHNpbXVsYXRpb24uIENhbiBiZSBzYWZlbHkgY2FsbGVkIG11bHRpcGxlIHRpbWVzLlxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gIH1cbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSB2aXNpYmxlIG5vZGVzIGFuZCBlZGdlcyBsaXN0IHdpdGggdGhlIG1vc3QgcmVjZW50IG5vZGUgc3RhdGUuXG4gKlxuICogVmlzaWJsZSBub2RlcyBhcmUgc3RvcmVkIGluIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5cbiAqIFZpc2libGUgZWRnZXMgYXJlIHN0b3JlZCBpbiB0aGlzLmJvZHkuZWRnZUluZGljZXMuXG4gKiBBIG5vZGUgb3IgZWRnZXMgaXMgdmlzaWJsZSBpZiBpdCBpcyBub3QgaGlkZGVuIG9yIGNsdXN0ZXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5fdXBkYXRlVmlzaWJsZUluZGljZXMgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzID0gW107XG4gIHRoaXMuYm9keS5lZGdlSW5kaWNlcyA9IFtdO1xuXG4gIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2Rlcywgbm9kZUlkKSkge1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5jbHVzdGVyaW5nLl9pc0NsdXN0ZXJlZE5vZGUobm9kZUlkKSAmJlxuICAgICAgICBub2Rlc1tub2RlSWRdLm9wdGlvbnMuaGlkZGVuID09PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5wdXNoKG5vZGVzW25vZGVJZF0uaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZWRnZUlkIGluIGVkZ2VzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZGdlcywgZWRnZUlkKSkge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2VkZ2VJZF07XG5cbiAgICAgIC8vIEl0IGNhbiBoYXBwZW4gdGhhdCB0aGlzIGlzIGV4ZWN1dGVkICphZnRlciogYSBub2RlIGVkZ2UgaGFzIGJlZW4gcmVtb3ZlZCxcbiAgICAgIC8vIGJ1dCAqYmVmb3JlKiB0aGUgZWRnZSBpdHNlbGYgaGFzIGJlZW4gcmVtb3ZlZC4gVGFraW5nIHRoaXMgaW50byBhY2NvdW50LlxuICAgICAgY29uc3QgZnJvbU5vZGUgPSBub2Rlc1tlZGdlLmZyb21JZF07XG4gICAgICBjb25zdCB0b05vZGUgPSBub2Rlc1tlZGdlLnRvSWRdO1xuICAgICAgY29uc3QgZWRnZU5vZGVzUHJlc2VudCA9IGZyb21Ob2RlICE9PSB1bmRlZmluZWQgJiYgdG9Ob2RlICE9PSB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGlzVmlzaWJsZSA9XG4gICAgICAgICF0aGlzLmNsdXN0ZXJpbmcuX2lzQ2x1c3RlcmVkRWRnZShlZGdlSWQpICYmXG4gICAgICAgIGVkZ2Uub3B0aW9ucy5oaWRkZW4gPT09IGZhbHNlICYmXG4gICAgICAgIGVkZ2VOb2Rlc1ByZXNlbnQgJiZcbiAgICAgICAgZnJvbU5vZGUub3B0aW9ucy5oaWRkZW4gPT09IGZhbHNlICYmIC8vIEFsc28gaGlkZGVuIGlmIGFueSBvZiBpdHMgY29ubmVjdGluZyBub2RlcyBhcmUgaGlkZGVuXG4gICAgICAgIHRvTm9kZS5vcHRpb25zLmhpZGRlbiA9PT0gZmFsc2U7IC8vIGlkZW1cblxuICAgICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgICB0aGlzLmJvZHkuZWRnZUluZGljZXMucHVzaChlZGdlLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQmluZCBhbGwgZXZlbnRzXG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmJpbmRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhpcyBldmVudCB3aWxsIHRyaWdnZXIgYSByZWJ1aWxkaW5nIG9mIHRoZSBjYWNoZSBldmVyeXRoaW5nLlxuICAvLyBVc2VkIHdoZW4gbm9kZXMgb3IgZWRnZXMgaGF2ZSBiZWVuIGFkZGVkIG9yIHJlbW92ZWQuXG4gIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFDaGFuZ2VkXCIsICgpID0+IHtcbiAgICB0aGlzLmVkZ2VzSGFuZGxlci5fdXBkYXRlU3RhdGUoKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFVcGRhdGVkXCIpO1xuICB9KTtcblxuICAvLyB0aGlzIGlzIGNhbGxlZCB3aGVuIG9wdGlvbnMgb2YgRVhJU1RJTkcgbm9kZXMgb3IgZWRnZXMgaGF2ZSBjaGFuZ2VkLlxuICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhVXBkYXRlZFwiLCAoKSA9PiB7XG4gICAgLy8gT3JkZXIgaW1wb3J0YW50IGluIGZvbGxvd2luZyBibG9ja1xuICAgIHRoaXMuY2x1c3RlcmluZy5fdXBkYXRlU3RhdGUoKTtcbiAgICB0aGlzLl91cGRhdGVWaXNpYmxlSW5kaWNlcygpO1xuXG4gICAgdGhpcy5fdXBkYXRlVmFsdWVSYW5nZSh0aGlzLmJvZHkubm9kZXMpO1xuICAgIHRoaXMuX3VwZGF0ZVZhbHVlUmFuZ2UodGhpcy5ib2R5LmVkZ2VzKTtcbiAgICAvLyBzdGFydCBzaW11bGF0aW9uIChjYW4gYmUgY2FsbGVkIHNhZmVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcpXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTZXQgbm9kZXMgYW5kIGVkZ2VzLCBhbmQgb3B0aW9uYWxseSBvcHRpb25zIGFzIHdlbGwuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRhdGEgICAgICAgICAgICAgIE9iamVjdCBjb250YWluaW5nIHBhcmFtZXRlcnM6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0FycmF5IHwgRGF0YVNldCB8IERhdGFWaWV3fSBbbm9kZXNdIEFycmF5IHdpdGggbm9kZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QXJyYXkgfCBEYXRhU2V0IHwgRGF0YVZpZXd9IFtlZGdlc10gQXJyYXkgd2l0aCBlZGdlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmd9IFtkb3RdIFN0cmluZyBjb250YWluaW5nIGRhdGEgaW4gRE9UIGZvcm1hdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmd9IFtnZXBoaV0gU3RyaW5nIGNvbnRhaW5pbmcgZGF0YSBpbiBnZXBoaSBKU09OIGZvcm1hdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtPcHRpb25zfSBbb3B0aW9uc10gT2JqZWN0IHdpdGggb3B0aW9uc1xuICovXG5OZXR3b3JrLnByb3RvdHlwZS5zZXREYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgLy8gcmVzZXQgdGhlIHBoeXNpY3MgZW5naW5lLlxuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzZXRQaHlzaWNzXCIpO1xuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2V0RGF0YVwiKTtcblxuICAvLyB1bnNlbGVjdCBhbGwgdG8gZW5zdXJlIG5vIHNlbGVjdGlvbnMgZnJvbSBvbGQgZGF0YSBhcmUgY2FycmllZCBvdmVyLlxuICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcblxuICBpZiAoZGF0YSAmJiBkYXRhLmRvdCAmJiAoZGF0YS5ub2RlcyB8fCBkYXRhLmVkZ2VzKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICdEYXRhIG11c3QgY29udGFpbiBlaXRoZXIgcGFyYW1ldGVyIFwiZG90XCIgb3IgJyArXG4gICAgICAgICcgcGFyYW1ldGVyIHBhaXIgXCJub2Rlc1wiIGFuZCBcImVkZ2VzXCIsIGJ1dCBub3QgYm90aC4nXG4gICAgKTtcbiAgfVxuXG4gIC8vIHNldCBvcHRpb25zXG4gIHRoaXMuc2V0T3B0aW9ucyhkYXRhICYmIGRhdGEub3B0aW9ucyk7XG4gIC8vIHNldCBhbGwgZGF0YVxuICBpZiAoZGF0YSAmJiBkYXRhLmRvdCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiVGhlIGRvdCBwcm9wZXJ0eSBoYXMgYmVlbiBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRoZSBzdGF0aWMgY29udmVydERvdCBtZXRob2QgdG8gY29udmVydCBET1QgaW50byB2aXMubmV0d29yayBmb3JtYXQgYW5kIHVzZSB0aGUgbm9ybWFsIGRhdGEgZm9ybWF0IHdpdGggbm9kZXMgYW5kIGVkZ2VzLiBUaGlzIGNvbnZlcnRlciBpcyB1c2VkIGxpa2UgdGhpczogdmFyIGRhdGEgPSB2aXMubmV0d29yay5jb252ZXJ0RG90KGRvdFN0cmluZyk7XCJcbiAgICApO1xuICAgIC8vIHBhcnNlIERPVCBmaWxlXG4gICAgY29uc3QgZG90RGF0YSA9IERPVFRvR3JhcGgoZGF0YS5kb3QpO1xuICAgIHRoaXMuc2V0RGF0YShkb3REYXRhKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLmdlcGhpKSB7XG4gICAgLy8gcGFyc2UgRE9UIGZpbGVcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIlRoZSBnZXBoaSBwcm9wZXJ0eSBoYXMgYmVlbiBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRoZSBzdGF0aWMgY29udmVydEdlcGhpIG1ldGhvZCB0byBjb252ZXJ0IGdlcGhpIGludG8gdmlzLm5ldHdvcmsgZm9ybWF0IGFuZCB1c2UgdGhlIG5vcm1hbCBkYXRhIGZvcm1hdCB3aXRoIG5vZGVzIGFuZCBlZGdlcy4gVGhpcyBjb252ZXJ0ZXIgaXMgdXNlZCBsaWtlIHRoaXM6IHZhciBkYXRhID0gdmlzLm5ldHdvcmsuY29udmVydEdlcGhpKGdlcGhpSnNvbik7XCJcbiAgICApO1xuICAgIGNvbnN0IGdlcGhpRGF0YSA9IHBhcnNlR2VwaGkoZGF0YS5nZXBoaSk7XG4gICAgdGhpcy5zZXREYXRhKGdlcGhpRGF0YSk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubm9kZXNIYW5kbGVyLnNldERhdGEoZGF0YSAmJiBkYXRhLm5vZGVzLCB0cnVlKTtcbiAgICB0aGlzLmVkZ2VzSGFuZGxlci5zZXREYXRhKGRhdGEgJiYgZGF0YS5lZGdlcywgdHJ1ZSk7XG4gIH1cblxuICAvLyBlbWl0IGNoYW5nZSBpbiBkYXRhXG4gIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG5cbiAgLy8gZW1pdCBkYXRhIGxvYWRlZFxuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFMb2FkZWRcIik7XG5cbiAgLy8gZmluZCBhIHN0YWJsZSBwb3NpdGlvbiBvciBzdGFydCBhbmltYXRpbmcgdG8gYSBzdGFibGUgcG9zaXRpb25cbiAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImluaXRQaHlzaWNzXCIpO1xufTtcblxuLyoqXG4gKiBDbGVhbnMgdXAgYWxsIGJpbmRpbmdzIG9mIHRoZSBuZXR3b3JrLCByZW1vdmluZyBpdCBmdWxseSBmcm9tIHRoZSBtZW1vcnkgSUYgdGhlIHZhcmlhYmxlIGlzIHNldCB0byBudWxsIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiAqIHZhciBuZXR3b3JrID0gbmV3IHZpcy5OZXR3b3JrKC4uKTtcbiAqIG5ldHdvcmsuZGVzdHJveSgpO1xuICogbmV0d29yayA9IG51bGw7XG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJkZXN0cm95XCIpO1xuICAvLyBjbGVhciBldmVudHNcbiAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKCk7XG4gIHRoaXMub2ZmKCk7XG5cbiAgLy8gZGVsZXRlIG1vZHVsZXNcbiAgZGVsZXRlIHRoaXMuZ3JvdXBzO1xuICBkZWxldGUgdGhpcy5jYW52YXM7XG4gIGRlbGV0ZSB0aGlzLnNlbGVjdGlvbkhhbmRsZXI7XG4gIGRlbGV0ZSB0aGlzLmludGVyYWN0aW9uSGFuZGxlcjtcbiAgZGVsZXRlIHRoaXMudmlldztcbiAgZGVsZXRlIHRoaXMucmVuZGVyZXI7XG4gIGRlbGV0ZSB0aGlzLnBoeXNpY3M7XG4gIGRlbGV0ZSB0aGlzLmxheW91dEVuZ2luZTtcbiAgZGVsZXRlIHRoaXMuY2x1c3RlcmluZztcbiAgZGVsZXRlIHRoaXMubWFuaXB1bGF0aW9uO1xuICBkZWxldGUgdGhpcy5ub2Rlc0hhbmRsZXI7XG4gIGRlbGV0ZSB0aGlzLmVkZ2VzSGFuZGxlcjtcbiAgZGVsZXRlIHRoaXMuY29uZmlndXJhdG9yO1xuICBkZWxldGUgdGhpcy5pbWFnZXM7XG5cbiAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKVxuICAgICAgY29udGludWU7XG4gICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICB9XG5cbiAgZm9yIChjb25zdCBlZGdlSWQgaW4gdGhpcy5ib2R5LmVkZ2VzKSB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKVxuICAgICAgY29udGludWU7XG4gICAgZGVsZXRlIHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICB9XG5cbiAgLy8gcmVtb3ZlIHRoZSBjb250YWluZXIgYW5kIGV2ZXJ5dGhpbmcgaW5zaWRlIGl0IHJlY3Vyc2l2ZWx5XG4gIHJlY3Vyc2l2ZURPTURlbGV0ZSh0aGlzLmJvZHkuY29udGFpbmVyKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSB2YWx1ZXMgb2YgYWxsIG9iamVjdCBpbiB0aGUgZ2l2ZW4gYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50XG4gKiB2YWx1ZSByYW5nZSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAgICBBbiBvYmplY3QgY29udGFpbmluZyBhIHNldCBvZiBFZGdlcyBvciBOb2Rlc1xuICogICAgICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0cyBtdXN0IGhhdmUgYSBtZXRob2QgZ2V0VmFsdWUoKSBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWVSYW5nZShtaW4sIG1heCkuXG4gKiBAcHJpdmF0ZVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5fdXBkYXRlVmFsdWVSYW5nZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgbGV0IGlkO1xuXG4gIC8vIGRldGVybWluZSB0aGUgcmFuZ2Ugb2YgdGhlIG9iamVjdHNcbiAgbGV0IHZhbHVlTWluID0gdW5kZWZpbmVkO1xuICBsZXQgdmFsdWVNYXggPSB1bmRlZmluZWQ7XG4gIGxldCB2YWx1ZVRvdGFsID0gMDtcbiAgZm9yIChpZCBpbiBvYmopIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaWQpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtpZF0uZ2V0VmFsdWUoKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlTWluID0gdmFsdWVNaW4gPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogTWF0aC5taW4odmFsdWUsIHZhbHVlTWluKTtcbiAgICAgICAgdmFsdWVNYXggPSB2YWx1ZU1heCA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBNYXRoLm1heCh2YWx1ZSwgdmFsdWVNYXgpO1xuICAgICAgICB2YWx1ZVRvdGFsICs9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGFkanVzdCB0aGUgcmFuZ2Ugb2YgYWxsIG9iamVjdHNcbiAgaWYgKHZhbHVlTWluICE9PSB1bmRlZmluZWQgJiYgdmFsdWVNYXggIT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoaWQgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaWQpKSB7XG4gICAgICAgIG9ialtpZF0uc2V0VmFsdWVSYW5nZSh2YWx1ZU1pbiwgdmFsdWVNYXgsIHZhbHVlVG90YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgTmV0d29yayBpcyBhY3RpdmUuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIXRoaXMuYWN0aXZhdG9yIHx8IHRoaXMuYWN0aXZhdG9yLmFjdGl2ZTtcbn07XG5cbk5ldHdvcmsucHJvdG90eXBlLnNldFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNhbnZhcy5zZXRTaXplLmFwcGx5KHRoaXMuY2FudmFzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNhbnZhc1RvRE9NID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jYW52YXMuY2FudmFzVG9ET00uYXBwbHkodGhpcy5jYW52YXMsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuRE9NdG9DYW52YXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNhbnZhcy5ET010b0NhbnZhcy5hcHBseSh0aGlzLmNhbnZhcywgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogTm9kZXMgY2FuIGJlIGluIGNsdXN0ZXJzLiBDbHVzdGVycyBjYW4gYWxzbyBiZSBpbiBjbHVzdGVycy4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuZCBhcnJheSBvZlxuICogbm9kZUlkcyBzaG93aW5nIHdoZXJlIHRoZSBub2RlIGlzLlxuICpcbiAqIElmIGFueSBub2RlSWQgaW4gdGhlIGNoYWluLCBlc3BlY2lhbGx5IHRoZSBmaXJzdCBwYXNzZWQgaW4gYXMgYSBwYXJhbWV0ZXIsIGlzIG5vdCBwcmVzZW50IGluXG4gKiB0aGUgY3VycmVudCBub2RlcyBsaXN0LCBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC5cbiAqXG4gKiBFeGFtcGxlOlxuICogY2x1c3RlciAnQScgY29udGFpbnMgY2x1c3RlciAnQicsXG4gKiBjbHVzdGVyICdCJyBjb250YWlucyBjbHVzdGVyICdDJyxcbiAqIGNsdXN0ZXIgJ0MnIGNvbnRhaW5zIG5vZGUgJ2ZyZWQnLlxuICogYGpzbmV0d29yay5jbHVzdGVyaW5nLmZpbmROb2RlKCdmcmVkJylgIHdpbGwgcmV0dXJuIGBbJ0EnLCdCJywnQycsJ2ZyZWQnXWAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBub2RlSWRcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuTmV0d29yay5wcm90b3R5cGUuZmluZE5vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuZmluZE5vZGUuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcblxuTmV0d29yay5wcm90b3R5cGUuaXNDbHVzdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmlzQ2x1c3Rlci5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUub3BlbkNsdXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcub3BlbkNsdXN0ZXIuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNsdXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3Rlci5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Tm9kZXNJbkNsdXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuZ2V0Tm9kZXNJbkNsdXN0ZXIuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNsdXN0ZXJCeUNvbm5lY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3RlckJ5Q29ubmVjdGlvbi5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuY2x1c3RlckJ5SHVic2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5jbHVzdGVyQnlIdWJzaXplLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS51cGRhdGVDbHVzdGVyZWROb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLnVwZGF0ZUNsdXN0ZXJlZE5vZGUuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldENsdXN0ZXJlZEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmdldENsdXN0ZXJlZEVkZ2VzLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRCYXNlRWRnZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5nZXRCYXNlRWRnZS5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0QmFzZUVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmdldEJhc2VFZGdlcy5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUudXBkYXRlRWRnZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy51cGRhdGVFZGdlLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2Qgd2lsbCBjbHVzdGVyIGFsbCBub2RlcyB3aXRoIDEgZWRnZSB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgY29ubmVjdGVkIG5vZGUuXG4gKiBUaGUgb3B0aW9ucyBvYmplY3QgaXMgZXhwbGFpbmVkIGluIGZ1bGwgPGEgZGF0YS1zY3JvbGw9XCJcIiBkYXRhLW9wdGlvbnM9XCJ7ICZxdW90O2Vhc2luZyZxdW90OzogJnF1b3Q7ZWFzZUluQ3ViaWMmcXVvdDsgfVwiIGhyZWY9XCIjb3B0aW9uc09iamVjdFwiPmJlbG93PC9hPi5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5jbHVzdGVyT3V0bGllcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3Rlck91dGxpZXJzLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5cbk5ldHdvcmsucHJvdG90eXBlLmdldFNlZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxheW91dEVuZ2luZS5nZXRTZWVkLmFwcGx5KHRoaXMubGF5b3V0RW5naW5lLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmVuYWJsZUVkaXRNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZW5hYmxlRWRpdE1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZGlzYWJsZUVkaXRNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZGlzYWJsZUVkaXRNb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmFkZE5vZGVNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uYWRkTm9kZU1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZWRpdE5vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5lZGl0Tm9kZS5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5lZGl0Tm9kZU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnNvbGUud2FybihcIkRlcHJlY2F0ZWQ6IFBsZWFzZSB1c2UgZWRpdE5vZGUgaW5zdGVhZCBvZiBlZGl0Tm9kZU1vZGUuXCIpO1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZWRpdE5vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuYWRkRWRnZU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5hZGRFZGdlTW9kZS5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5lZGl0RWRnZU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5lZGl0RWRnZU1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZGVsZXRlU2VsZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5kZWxldGVTZWxlY3RlZC5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRQb3NpdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRQb3NpdGlvbnMuYXBwbHkodGhpcy5ub2Rlc0hhbmRsZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRQb3NpdGlvbi5hcHBseSh0aGlzLm5vZGVzSGFuZGxlciwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5zdG9yZVBvc2l0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZXNIYW5kbGVyLnN0b3JlUG9zaXRpb25zLmFwcGx5KHRoaXMubm9kZXNIYW5kbGVyLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLm1vdmVOb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIubW92ZU5vZGUuYXBwbHkodGhpcy5ub2Rlc0hhbmRsZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3ggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRCb3VuZGluZ0JveC5hcHBseSh0aGlzLm5vZGVzSGFuZGxlciwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRDb25uZWN0ZWROb2RlcyA9IGZ1bmN0aW9uIChvYmplY3RJZCkge1xuICBpZiAodGhpcy5ib2R5Lm5vZGVzW29iamVjdElkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXNIYW5kbGVyLmdldENvbm5lY3RlZE5vZGVzLmFwcGx5KFxuICAgICAgdGhpcy5ub2Rlc0hhbmRsZXIsXG4gICAgICBhcmd1bWVudHNcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLmVkZ2VzSGFuZGxlci5nZXRDb25uZWN0ZWROb2Rlcy5hcHBseShcbiAgICAgIHRoaXMuZWRnZXNIYW5kbGVyLFxuICAgICAgYXJndW1lbnRzXG4gICAgKTtcbiAgfVxufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldENvbm5lY3RlZEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIuZ2V0Q29ubmVjdGVkRWRnZXMuYXBwbHkoXG4gICAgdGhpcy5ub2Rlc0hhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc3RhcnRTaW11bGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5waHlzaWNzLnN0YXJ0U2ltdWxhdGlvbi5hcHBseSh0aGlzLnBoeXNpY3MsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc3RvcFNpbXVsYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBoeXNpY3Muc3RvcFNpbXVsYXRpb24uYXBwbHkodGhpcy5waHlzaWNzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnN0YWJpbGl6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGh5c2ljcy5zdGFiaWxpemUuYXBwbHkodGhpcy5waHlzaWNzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3Rpb24uYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnNldFNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZXRTZWxlY3Rpb24uYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFNlbGVjdGVkTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlSWRzLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRTZWxlY3RlZEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkRWRnZUlkcy5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Tm9kZUF0ID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdC5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG4gIGlmIChub2RlICE9PSB1bmRlZmluZWQgJiYgbm9kZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5vZGUuaWQ7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0RWRnZUF0ID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBlZGdlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldEVkZ2VBdC5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG4gIGlmIChlZGdlICE9PSB1bmRlZmluZWQgJiYgZWRnZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGVkZ2UuaWQ7XG4gIH1cbiAgcmV0dXJuIGVkZ2U7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc2VsZWN0Tm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0Tm9kZXMuYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnNlbGVjdEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNlbGVjdEVkZ2VzLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS51bnNlbGVjdEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsLmFwcGx5KHRoaXMuc2VsZWN0aW9uSGFuZGxlciwgYXJndW1lbnRzKTtcbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdFdpdGhvdXRFbWl0dGluZy5hcHBseSh0aGlzLnNlbGVjdGlvbkhhbmRsZXIpO1xuICB0aGlzLnJlZHJhdygpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnJlZHJhdyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVuZGVyZXIucmVkcmF3LmFwcGx5KHRoaXMucmVuZGVyZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0U2NhbGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnZpZXcuZ2V0U2NhbGUuYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFZpZXdQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5nZXRWaWV3UG9zaXRpb24uYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmZpdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5maXQuYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5tb3ZlVG8uYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy52aWV3LmZvY3VzLmFwcGx5KHRoaXMudmlldywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5yZWxlYXNlTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5yZWxlYXNlTm9kZS5hcHBseSh0aGlzLnZpZXcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0T3B0aW9uc0Zyb21Db25maWd1cmF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIGxldCBvcHRpb25zID0ge307XG4gIGlmICh0aGlzLmNvbmZpZ3VyYXRvcikge1xuICAgIG9wdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRvci5nZXRPcHRpb25zLmFwcGx5KHRoaXMuY29uZmlndXJhdG9yKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5ldHdvcms7XG4iLCAiLyoqXG4gKiBOb3JtYWxpemVzIGxhbmd1YWdlIGNvZGUgaW50byB0aGUgZm9ybWF0IHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAcGFyYW0gbG9jYWxlcyAtIEFsbCB0aGUgYXZhaWxhYmxlIGxvY2FsZXMuXG4gKiBAcGFyYW0gcmF3Q29kZSAtIFRoZSBvcmlnaW5hbCBjb2RlIGFzIHN1cHBsaWVkIGJ5IHRoZSB1c2VyLlxuICogQHJldHVybnMgTGFuZ3VhZ2UgY29kZSBpbiB0aGUgZm9ybWF0IGxhbmd1YWdlLUNPVU5UUlkgb3IgbGFuZ3VhZ2UsIGV2ZW50dWFsbHlcbiAqIGZhbGxiYWNrcyB0byBlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUxhbmd1YWdlQ29kZShcbiAgbG9jYWxlczogUmVjb3JkPHN0cmluZywgdW5kZWZpbmVkIHwgb2JqZWN0PixcbiAgcmF3Q29kZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IFtyYXdMYW5ndWFnZSwgcmF3Q291bnRyeV0gPSByYXdDb2RlLnNwbGl0KC9bLV8gL10vLCAyKTtcbiAgICBjb25zdCBsYW5ndWFnZSA9IHJhd0xhbmd1YWdlICE9IG51bGwgPyByYXdMYW5ndWFnZS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbiAgICBjb25zdCBjb3VudHJ5ID0gcmF3Q291bnRyeSAhPSBudWxsID8gcmF3Q291bnRyeS50b1VwcGVyQ2FzZSgpIDogbnVsbDtcblxuICAgIGlmIChsYW5ndWFnZSAmJiBjb3VudHJ5KSB7XG4gICAgICBjb25zdCBjb2RlID0gbGFuZ3VhZ2UgKyBcIi1cIiArIGNvdW50cnk7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxvY2FsZXMsIGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIHZhcmlhbnQgJHtjb3VudHJ5fSBvZiBsYW5ndWFnZSAke2xhbmd1YWdlfS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGFuZ3VhZ2UpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBsYW5ndWFnZTtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobG9jYWxlcywgY29kZSkpIHtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gbGFuZ3VhZ2UgJHtsYW5ndWFnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYFVua25vd24gbG9jYWxlICR7cmF3Q29kZX0sIGZhbGxpbmcgYmFjayB0byBFbmdsaXNoLmApO1xuXG4gICAgcmV0dXJuIFwiZW5cIjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgVW5leHBlY3RlZCBlcnJvciB3aGlsZSBub3JtYWxpemluZyBsb2NhbGUgJHtyYXdDb2RlfSwgZmFsbGluZyBiYWNrIHRvIEVuZ2xpc2guYFxuICAgICk7XG5cbiAgICByZXR1cm4gXCJlblwiO1xuICB9XG59XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vbmV0d29yay9OZXR3b3JrXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgTmV0d29ya0ltYWdlcyB9IGZyb20gXCIuL25ldHdvcmsvSW1hZ2VzXCI7XG5cbmltcG9ydCAqIGFzIGRvdHBhcnNlciBmcm9tIFwiLi9uZXR3b3JrL2RvdHBhcnNlclwiO1xuZXhwb3J0IHsgZG90cGFyc2VyIGFzIG5ldHdvcmtET1RQYXJzZXIgfTtcbmV4cG9ydCBjb25zdCBwYXJzZURPVE5ldHdvcmsgPSBkb3RwYXJzZXIuRE9UVG9HcmFwaDtcblxuaW1wb3J0ICogYXMgZ2VwaGlQYXJzZXIgZnJvbSBcIi4vbmV0d29yay9nZXBoaVBhcnNlclwiO1xuZXhwb3J0IHsgcGFyc2VHZXBoaSBhcyBwYXJzZUdlcGhpTmV0d29yayB9IGZyb20gXCIuL25ldHdvcmsvZ2VwaGlQYXJzZXJcIjtcbmV4cG9ydCB7IGdlcGhpUGFyc2VyIGFzIG5ldHdvcmtHZXBoaVBhcnNlciB9O1xuXG5pbXBvcnQgKiBhcyBhbGxPcHRpb25zIGZyb20gXCIuL25ldHdvcmsvb3B0aW9uc1wiO1xuZXhwb3J0IHsgYWxsT3B0aW9ucyBhcyBuZXR3b3JrT3B0aW9ucyB9O1xuXG4vLyBEYXRhU2V0LCB1dGlscyBldGMuIGNhbid0IGJlIHJlZXhwb3J0ZWQgaGVyZSBiZWNhdXNlIHRoYXQgd291bGQgY2F1c2Ugc3RhY2tcbi8vIG92ZXJmbG93IGluIFVNRCBidWlsZHMuIFRoZXkgYWxsIGV4cG9ydCB2aXMgbmFtZXNwYWNlIHRoZXJlZm9yZSByZWV4cG9ydGluZ1xuLy8gbGVhZHMgdG8gbG9hZGluZyB2aXMgdG8gbG9hZCB2aXMgdG8gbG9hZCB2aXPigKZcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsICIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgdGhpcyB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChOQVRJVkVfQklORCA/IGNhbGwuYmluZChhcHBseSkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbikge1xuICAvLyBOYXNob3JuIGJ1ZzpcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEyOFxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTMwXG4gIGlmIChjbGFzc29mUmF3KGZuKSA9PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIHVuY3VycnlUaGlzKGZuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIElTX0hUTUxEREEgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZDtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFsbDogZG9jdW1lbnRBbGwsXG4gIElTX0hUTUxEREE6IElTX0hUTUxEREFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRkb2N1bWVudEFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1hbGwnKTtcblxudmFyIGRvY3VtZW50QWxsID0gJGRvY3VtZW50QWxsLmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG5tb2R1bGUuZXhwb3J0cyA9ICRkb2N1bWVudEFsbC5JU19IVE1MRERBID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyICRkb2N1bWVudEFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1hbGwnKTtcblxudmFyIGRvY3VtZW50QWxsID0gJGRvY3VtZW50QWxsLmFsbDtcblxubW9kdWxlLmV4cG9ydHMgPSAkZG9jdW1lbnRBbGwuSVNfSFRNTEREQSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KSB8fCBpdCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHZhcmlhYmxlKSA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBuYXZpZ2F0b3IgIT0gJ3VuZGVmaW5lZCcgJiYgU3RyaW5nKG5hdmlnYXRvci51c2VyQWdlbnQpIHx8ICcnO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjMzLjInLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyMyBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjMzLjIvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyYXBwZXIpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gYXBwbHkoTmF0aXZlQ29uc3RydWN0b3IsIHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbCA6IFNUQVRJQyA/IGdsb2JhbFtUQVJHRVRdIDogKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFRBUkdFVCwge30pW1RBUkdFVF07XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXNPd24obmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgbWV0aG9kcyB0byBnbG9iYWwgZm9yIGNhbGxpbmcgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2VzIGluIHRoaXMgdmVyc2lvblxuICAgIGVsc2UgaWYgKG9wdGlvbnMud3JhcCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IHdyYXBDb25zdHJ1Y3Rvcihzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgZWxzZSBpZiAoUFJPVE8gJiYgaXNDYWxsYWJsZShzb3VyY2VQcm9wZXJ0eSkpIHJlc3VsdFByb3BlcnR5ID0gdW5jdXJyeVRoaXMoc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHRQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHJlc3VsdFByb3BlcnR5KTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzT3duKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aFtWSVJUVUFMX1BST1RPVFlQRV0sIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgLy8gZXhwb3J0IHJlYWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGlmIChvcHRpb25zLnJlYWwgJiYgdGFyZ2V0UHJvdG90eXBlICYmIChGT1JDRUQgfHwgIXRhcmdldFByb3RvdHlwZVtrZXldKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0UHJvdG90eXBlLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eS5zaGFtKSBkZWZpbmVQcm9wZXJ0eS5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIHByb3BlcnR5S2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9ICRPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBlbXB0eSA9IFtdO1xudmFyIGNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgY29uc3RydWN0b3JSZWdFeHAgPSAvXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKTtcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLnRlc3Qobm9vcCk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3RydWN0KG5vb3AsIGVtcHR5LCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gICAgLy8gYEZ1bmN0aW9uI3RvU3RyaW5nYCB0aHJvd3Mgb24gc29tZSBidWlsdC1pdCBmdW5jdGlvbiBpbiBzb21lIGxlZ2FjeSBlbmdpbmVzXG4gICAgLy8gKGZvciBleGFtcGxlLCBgRE9NUXVhZGAgYW5kIHNpbWlsYXIgaW4gRkY0MS0pXG4gICAgcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmlzQ29uc3RydWN0b3JMZWdhY3kuc2hhbSA9IHRydWU7XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYSBwYXJ0IG9mIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXkpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAoaXNDb25zdHJ1Y3RvcihDKSAmJiAoQyA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IEM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbi8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9IFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBpc0NvbmNhdFNwcmVhZGFibGUgPSBmdW5jdGlvbiAoTykge1xuICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzcHJlYWRhYmxlID0gT1tJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gIHJldHVybiBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KE8pO1xufTtcblxudmFyIEZPUkNFRCA9ICFJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIHx8ICFhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBjb25jYXQ6IGZ1bmN0aW9uIGNvbmNhdChhcmcpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoRSk7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgbGVuKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyAxKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgdmFyIHJlc3VsdCA9ICRBcnJheShtYXgoZmluIC0gaywgMCkpO1xuICB2YXIgbiA9IDA7XG4gIGZvciAoOyBrIDwgZmluOyBrKyssIG4rKykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlJyk7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBhcnJheVNsaWNlKHdpbmRvd05hbWVzKTtcbiAgfVxufTtcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIGNsYXNzb2YoaXQpID09PSAnV2luZG93J1xuICAgID8gZ2V0V2luZG93TmFtZXMoaXQpXG4gICAgOiAkZ2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnVtZXJhYmxlKSB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgdmFsdWUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5leHBvcnRzLmYgPSB3ZWxsS25vd25TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgdmFyIFN5bWJvbCA9IHBhdGguU3ltYm9sIHx8IChwYXRoLlN5bWJvbCA9IHt9KTtcbiAgaWYgKCFoYXNPd24oU3ltYm9sLCBOQU1FKSkgZGVmaW5lUHJvcGVydHkoU3ltYm9sLCBOQU1FLCB7XG4gICAgdmFsdWU6IHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZihOQU1FKVxuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlclJlamVjdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9SRUpFQ1QgPSBUWVBFID09PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgfHwgSVNfRklMVEVSX1JFSkVDVCA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gZXZlcnlcbiAgICAgICAgICBjYXNlIDc6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyUmVqZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJSZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiAgZmlsdGVyUmVqZWN0OiBjcmVhdGVNZXRob2QoNylcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIG5hdGl2ZU9iamVjdENyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG5cbnZhciBISURERU4gPSBzaGFyZWRLZXkoJ2hpZGRlbicpO1xudmFyIFNZTUJPTCA9ICdTeW1ib2wnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTWU1CT0wpO1xuXG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbCAmJiAkU3ltYm9sW1BST1RPVFlQRV07XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmY7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90b3R5cGVTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoTywgUCwgQXR0cmlidXRlcykge1xuICB2YXIgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIFApO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcikgZGVsZXRlIE9iamVjdFByb3RvdHlwZVtQXTtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yICYmIE8gIT09IE9iamVjdFByb3RvdHlwZSkge1xuICAgIG5hdGl2ZURlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZSwgUCwgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcik7XG4gIH1cbn07XG5cbnZhciBzZXRTeW1ib2xEZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0Q3JlYXRlKG5hdGl2ZURlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9PSA3O1xufSkgPyBmYWxsYmFja0RlZmluZVByb3BlcnR5IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZShTeW1ib2xQcm90b3R5cGUpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXNPd24oTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwge30pKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgJHRoaXMgPSB0aGlzID09PSB1bmRlZmluZWQgPyBnbG9iYWwgOiB0aGlzO1xuICAgICAgaWYgKCR0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKCR0aGlzLCBISURERU4pICYmIGhhc093bigkdGhpc1tISURERU5dLCB0YWcpKSAkdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSgkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBVU0VfU0VUVEVSKSBzZXRTeW1ib2xEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiBzZXR0ZXIgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnLCBkZXNjcmlwdGlvbik7XG4gIH07XG5cbiAgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbFtQUk9UT1RZUEVdO1xuXG4gIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS50YWc7XG4gIH0pO1xuXG4gIGRlZmluZUJ1aWx0SW4oJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdlbGxLbm93blN5bWJvbChuYW1lKSwgbmFtZSk7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtU3ltYm9sLWRlc2NyaXB0aW9uXG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuZGVzY3JpcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFJU19QVVJFKSB7XG4gICAgICBkZWZpbmVCdWlsdEluKE9iamVjdFByb3RvdHlwZSwgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgU3ltYm9sOiAkU3ltYm9sXG59KTtcblxuJGZvckVhY2gob2JqZWN0S2V5cyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBmdW5jdGlvbiAobmFtZSkge1xuICBkZWZpbmVXZWxsS25vd25TeW1ib2wobmFtZSk7XG59KTtcblxuJCh7IHRhcmdldDogU1lNQk9MLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IGZhbHNlOyB9XG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIC8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Jcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgU1lNQk9MKTtcblxuaGlkZGVuS2V5c1tISURERU5dID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSBzYWZlICovXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiYgISFTeW1ib2xbJ2ZvciddICYmICEhU3ltYm9sLmtleUZvcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeScpO1xudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5mb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuZm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKGtleSk7XG4gICAgaWYgKGhhc093bihTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5LCBzdHJpbmcpKSByZXR1cm4gU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddO1xuICAgIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKShzdHJpbmcpO1xuICAgIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXSA9IHN5bWJvbDtcbiAgICBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bWJvbF0gPSBzdHJpbmc7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmtleUZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKHRyeVRvU3RyaW5nKHN5bSkgKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xuICAgIGlmIChoYXNPd24oU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSwgc3ltKSkgcmV0dXJuIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKFtdLnNsaWNlKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0l0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuYXN5bmNpdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5oYXNJbnN0YW5jZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmhhc2luc3RhbmNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2hhc0luc3RhbmNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pc2NvbmNhdHNwcmVhZGFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLml0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaEFsbGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoYWxsXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoQWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5yZXBsYWNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucmVwbGFjZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zZWFyY2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zZWFyY2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc2VhcmNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGVjaWVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BlY2llc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGxpdGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwbGl0XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwbGl0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnRvUHJpbWl0aXZlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9wcmltaXRpdmVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIGBTeW1ib2wudG9TdHJpbmdUYWdgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3N0cmluZ3RhZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnZXRCdWlsdEluKCdTeW1ib2wnKSwgJ1N5bWJvbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wudW5zY29wYWJsZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC51bnNjb3BhYmxlc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gSlNPTltAQHRvU3RyaW5nVGFnXSBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXRoLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC50by1zdHJpbmctdGFnJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9ICFpc09iamVjdChJdGVyYXRvclByb3RvdHlwZSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICBkZWZpbmVCdWlsdEluKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQsIEVOVU1FUkFCTEVfTkVYVCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCshRU5VTUVSQUJMRV9ORVhULCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKHR5cGVvZiBhcmd1bWVudCA9PSAnb2JqZWN0JyB8fCBpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LXNldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgc2V0dGVyID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJywgJ3NldCcpO1xuICAgIHNldHRlcih0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBzd2l0Y2ggKHN0YXRlLmtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoaW5kZXgsIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZmFsc2UpO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG52YXIgdmFsdWVzID0gSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDQ1LSBidWdcbmlmICghSVNfUFVSRSAmJiBERVNDUklQVE9SUyAmJiB2YWx1ZXMubmFtZSAhPT0gJ3ZhbHVlcycpIHRyeSB7XG4gIGRlZmluZVByb3BlcnR5KHZhbHVlcywgJ25hbWUnLCB7IHZhbHVlOiAndmFsdWVzJyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiIsICIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSAmJiBjbGFzc29mKENvbGxlY3Rpb25Qcm90b3R5cGUpICE9PSBUT19TVFJJTkdfVEFHKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIENPTExFQ1RJT05fTkFNRSk7XG4gIH1cbiAgSXRlcmF0b3JzW0NPTExFQ1RJT05fTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIE1FVEFEQVRBID0gd2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vLyBGdW5jdGlvbi5wcm90b3R5cGVbQEBtZXRhZGF0YV1cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuaWYgKEZ1bmN0aW9uUHJvdG90eXBlW01FVEFEQVRBXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uUHJvdG90eXBlLCBNRVRBREFUQSwge1xuICAgIHZhbHVlOiBudWxsXG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXN5bmMtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0Rpc3Bvc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmRpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2Rpc3Bvc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sJyk7XG5cbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuYXN5bmMtZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyIGtleUZvciA9IFN5bWJvbC5rZXlGb3I7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sIHx8IGZ1bmN0aW9uIGlzUmVnaXN0ZXJlZFN5bWJvbCh2YWx1ZSkge1xuICB0cnkge1xuICAgIHJldHVybiBrZXlGb3IodGhpc1N5bWJvbFZhbHVlKHZhbHVlKSkgIT09IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNSZWdpc3RlcmVkU3ltYm9sOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyICRpc1dlbGxLbm93blN5bWJvbCA9IFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbDtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0QnVpbHRJbignT2JqZWN0JywgJ2dldE93blByb3BlcnR5TmFtZXMnKTtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbmZvciAodmFyIGkgPSAwLCBzeW1ib2xLZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpLCBzeW1ib2xLZXlzTGVuZ3RoID0gc3ltYm9sS2V5cy5sZW5ndGg7IGkgPCBzeW1ib2xLZXlzTGVuZ3RoOyBpKyspIHtcbiAgLy8gc29tZSBvbGQgZW5naW5lcyB0aHJvd3Mgb24gYWNjZXNzIHRvIHNvbWUga2V5cyBsaWtlIGBhcmd1bWVudHNgIG9yIGBjYWxsZXJgXG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbEtleSA9IHN5bWJvbEtleXNbaV07XG4gICAgaWYgKGlzU3ltYm9sKFN5bWJvbFtzeW1ib2xLZXldKSkgd2VsbEtub3duU3ltYm9sKHN5bWJvbEtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn1cblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkge1xuICBpZiAoJGlzV2VsbEtub3duU3ltYm9sICYmICRpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodmFsdWUpO1xuICAgIGZvciAodmFyIGogPSAwLCBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7IGogPCBrZXlzTGVuZ3RoOyBqKyspIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXEgLS0gcG9seWZpbGxlZCBzeW1ib2xzIGNhc2VcbiAgICAgIGlmIChXZWxsS25vd25TeW1ib2xzU3RvcmVba2V5c1tqXV0gPT0gc3ltYm9sKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1dlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bicpO1xuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd25TeW1ib2w6IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoZXJgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm9ic2VydmFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1JlZ2lzdGVyZWRTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXJlZ2lzdGVyZWQnKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRgIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzUmVnaXN0ZXJlZFN5bWJvbCcgfSwge1xuICBpc1JlZ2lzdGVyZWQ6IGlzUmVnaXN0ZXJlZFN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93bmAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzV2VsbEtub3duU3ltYm9sJywgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd246IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YUtleWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YUtleScpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnBhdHRlcm5NYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncGF0dGVybk1hdGNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZUFsbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1hdGNoZXInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucGF0dGVybi1tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9zeW1ib2wnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcblxudmFyIFNUUklOR19JVEVSQVRPUiA9ICdTdHJpbmcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLUBAaXRlcmF0b3JcbmRlZmluZUl0ZXJhdG9yKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiB0b1N0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXN0cmluZ2l0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocG9pbnQsIGZhbHNlKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG52YXIgV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKCdpdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wvaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sL2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfU3ltYm9sJGl0ZXJhdG9yIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZigndG9QcmltaXRpdmUnKTtcbiIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkdG9QcmltaXRpdmUgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbX1N5bWJvbCR0b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIF9PYmplY3QkZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghaGFzT3duKGZhY3RvcmllcywgYXJnc0xlbmd0aCkpIHtcbiAgICB2YXIgbGlzdCA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IGFyZ3NMZW5ndGg7IGkrKykgbGlzdFtpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIGZhY3Rvcmllc1thcmdzTGVuZ3RoXSA9ICRGdW5jdGlvbignQyxhJywgJ3JldHVybiBuZXcgQygnICsgam9pbihsaXN0LCAnLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2FyZ3NMZW5ndGhdKEMsIGFyZ3MpO1xufTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBkZXRlY3Rpb25cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyAkRnVuY3Rpb24uYmluZCA6IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIEYgPSBhQ2FsbGFibGUodGhpcyk7XG4gIHZhciBQcm90b3R5cGUgPSBGLnByb3RvdHlwZTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IGNvbmNhdChwYXJ0QXJncywgYXJyYXlTbGljZShhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kRnVuY3Rpb24gPyBjb25zdHJ1Y3QoRiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogRi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KFByb3RvdHlwZSkpIGJvdW5kRnVuY3Rpb24ucHJvdG90eXBlID0gUHJvdG90eXBlO1xuICByZXR1cm4gYm91bmRGdW5jdGlvbjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUsIGZvcmNlZDogRnVuY3Rpb24uYmluZCAhPT0gYmluZCB9LCB7XG4gIGJpbmQ6IGJpbmRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SLCBNRVRIT0QpIHtcbiAgdmFyIE5hbWVzcGFjZSA9IHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG4gIHZhciBwdXJlTWV0aG9kID0gTmFtZXNwYWNlICYmIE5hbWVzcGFjZVtNRVRIT0RdO1xuICBpZiAocHVyZU1ldGhvZCkgcmV0dXJuIHB1cmVNZXRob2Q7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBOYXRpdmVQcm90b3R5cGUgJiYgTmF0aXZlUHJvdG90eXBlW01FVEhPRF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdGdW5jdGlvbicsICdiaW5kJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZCcpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5iaW5kO1xuICByZXR1cm4gaXQgPT09IEZ1bmN0aW9uUHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEZ1bmN0aW9uUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBGdW5jdGlvblByb3RvdHlwZS5iaW5kKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9iaW5kXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyByZWR1Y2UsIHJlZHVjZVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfUklHSFQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhcmd1bWVudHNMZW5ndGgsIG1lbW8pIHtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2tmbik7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IElTX1JJR0hUID8gbGVuZ3RoIC0gMSA6IDA7XG4gICAgdmFyIGkgPSBJU19SSUdIVCA/IC0xIDogMTtcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDwgMikgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgICAgaW5kZXggKz0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgaWYgKElTX1JJR0hUID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoO0lTX1JJR0hUID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiAgbGVmdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZXJpZ2h0XG4gIHJpZ2h0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG4vLyBDaHJvbWUgODAtODIgaGFzIGEgY3JpdGljYWwgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDQ5OTgyXG52YXIgQ0hST01FX0JVRyA9ICFJU19OT0RFICYmIENIUk9NRV9WRVJTSU9OID4gNzkgJiYgQ0hST01FX1ZFUlNJT04gPCA4MztcbnZhciBGT1JDRUQgPSBDSFJPTUVfQlVHIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgbGVuZ3RoLCBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAncmVkdWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmVkdWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJlZHVjZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmVkdWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbHRlcicpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmaWx0ZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maWx0ZXInKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsdGVyO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLm1hcDtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnbWFwJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkubWFwJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ21hcCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL21hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5tYXA7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLm1hcCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG5cbi8vIGBGbGF0dGVuSW50b0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gZnVuY3Rpb24gKHRhcmdldCwgb3JpZ2luYWwsIHNvdXJjZSwgc291cmNlTGVuLCBzdGFydCwgZGVwdGgsIG1hcHBlciwgdGhpc0FyZykge1xuICB2YXIgdGFyZ2V0SW5kZXggPSBzdGFydDtcbiAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgdmFyIG1hcEZuID0gbWFwcGVyID8gYmluZChtYXBwZXIsIHRoaXNBcmcpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBlbGVtZW50TGVuO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBpZiAoZGVwdGggPiAwICYmIGlzQXJyYXkoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudExlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKGVsZW1lbnQpO1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgZWxlbWVudExlbiwgdGFyZ2V0SW5kZXgsIGRlcHRoIC0gMSkgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKHRhcmdldEluZGV4ICsgMSk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbkludG9BcnJheTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mbGF0TWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZsYXRtYXBcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBBO1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIEEubGVuZ3RoID0gZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mbGF0LW1hcCcpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS51bnNjb3BhYmxlcy5mbGF0LW1hcCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmbGF0TWFwJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmxhdC1tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmxhdE1hcDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmxhdE1hcCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgImltcG9ydCB7IERhdGFJbnRlcmZhY2UsIEV2ZW50Q2FsbGJhY2tzLCBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcblxuLyoqXG4gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVBpcGUge1xuICAvKipcbiAgICogVGFrZSBhbGwgaXRlbXMgZnJvbSB0aGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldywgdHJhbnNmb3JtIHRoZW0gYXNcbiAgICogY29uZmlndXJlZCBhbmQgdXBkYXRlIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBhbGwoKTogdGhpcztcblxuICAvKipcbiAgICogU3RhcnQgb2JzZXJ2aW5nIHRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LCB0cmFuc2Zvcm1pbmcgdGhlIGl0ZW1zXG4gICAqIGFuZCB1cGRhdGluZyB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBzb3VyY2UgZGF0YSBzZXQgd2lsbCBiZSBpZ25vcmVkLiBJZiB5b3UgZm9yXG4gICAqIGV4YW1wbGUgd2FudCB0byBwcm9jZXNzIGFsbCB0aGUgaXRlbXMgdGhhdCBhcmUgYWxyZWFkeSB0aGVyZSB1c2U6XG4gICAqIGBwaXBlLmFsbCgpLnN0YXJ0KClgLlxuICAgKi9cbiAgc3RhcnQoKTogdGhpcztcblxuICAvKipcbiAgICogU3RvcCBvYnNlcnZpbmcgdGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcsIHRyYW5zZm9ybWluZyB0aGUgaXRlbXNcbiAgICogYW5kIHVwZGF0aW5nIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBzdG9wKCk6IHRoaXM7XG59XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFQaXBlRmFjdG9yeSA9IEluc3RhbmNlVHlwZTx0eXBlb2YgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbj47XG5cbi8qKlxuICogQ3JlYXRlIG5ldyBkYXRhIHBpcGUuXG4gKlxuICogQHBhcmFtIGZyb20gLSBUaGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldy5cbiAqIEByZW1hcmtzXG4gKiBFeGFtcGxlIHVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIEFwcEl0ZW0ge1xuICogICB3aG9hbWk6IHN0cmluZztcbiAqICAgYXBwRGF0YTogdW5rbm93bjtcbiAqICAgdmlzRGF0YTogVmlzSXRlbTtcbiAqIH1cbiAqIGludGVyZmFjZSBWaXNJdGVtIHtcbiAqICAgaWQ6IG51bWJlcjtcbiAqICAgbGFiZWw6IHN0cmluZztcbiAqICAgY29sb3I6IHN0cmluZztcbiAqICAgeDogbnVtYmVyO1xuICogICB5OiBudW1iZXI7XG4gKiB9XG4gKlxuICogY29uc3QgZHMxID0gbmV3IERhdGFTZXQ8QXBwSXRlbSwgXCJ3aG9hbWlcIj4oW10sIHsgZmllbGRJZDogXCJ3aG9hbWlcIiB9KTtcbiAqIGNvbnN0IGRzMiA9IG5ldyBEYXRhU2V0PFZpc0l0ZW0sIFwiaWRcIj4oKTtcbiAqXG4gKiBjb25zdCBwaXBlID0gY3JlYXRlTmV3RGF0YVBpcGVGcm9tKGRzMSlcbiAqICAgLmZpbHRlcigoaXRlbSk6IGJvb2xlYW4gPT4gaXRlbS5lbmFibGVkID09PSB0cnVlKVxuICogICAubWFwPFZpc0l0ZW0sIFwiaWRcIj4oKGl0ZW0pOiBWaXNJdGVtID0+IGl0ZW0udmlzRGF0YSlcbiAqICAgLnRvKGRzMik7XG4gKlxuICogcGlwZS5zdGFydCgpO1xuICogYGBgXG4gKiBAcmV0dXJucyBBIGZhY3Rvcnkgd2hvc2UgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdEYXRhUGlwZUZyb208XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihmcm9tOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFNJLCBTUD4ge1xuICByZXR1cm4gbmV3IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24oZnJvbSk7XG59XG5cbnR5cGUgVHJhbnNmb3JtZXI8VD4gPSAoaW5wdXQ6IFRbXSkgPT4gVFtdO1xuXG4vKipcbiAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwaXBlLiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlIG9ubHkgdGhyb3VnaFxuICogYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFNJIC0gU291cmNlIGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gU1AgLSBTb3VyY2UgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICogQHR5cGVQYXJhbSBUUCAtIFRhcmdldCBpdGVtIHR5cGUncyBpZCBwcm9wZXJ0eSBuYW1lLlxuICovXG5jbGFzcyBTaW1wbGVEYXRhUGlwZTxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nLFxuICBUSSBleHRlbmRzIFBhcnRJdGVtPFRQPixcbiAgVFAgZXh0ZW5kcyBzdHJpbmdcbj4gaW1wbGVtZW50cyBEYXRhUGlwZVxue1xuICAvKipcbiAgICogQm91bmQgbGlzdGVuZXJzIGZvciB1c2Ugd2l0aCBgRGF0YUludGVyZmFjZVsnb24nIHwgJ29mZiddYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogRXZlbnRDYWxsYmFja3M8U0ksIFNQPiA9IHtcbiAgICBhZGQ6IHRoaXMuX2FkZC5iaW5kKHRoaXMpLFxuICAgIHJlbW92ZTogdGhpcy5fcmVtb3ZlLmJpbmQodGhpcyksXG4gICAgdXBkYXRlOiB0aGlzLl91cGRhdGUuYmluZCh0aGlzKSxcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZS5cbiAgICpcbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IHRoYXQgd2lsbCBiZSBvYnNlcnZlZC5cbiAgICogQHBhcmFtIF90cmFuc2Zvcm1lcnMgLSBBbiBhcnJheSBvZiB0cmFuc2Zvcm1pbmcgZnVuY3Rpb25zIHRvIGJlIHVzZWQgdG9cbiAgICogZmlsdGVyIG9yIHRyYW5zZm9ybSB0aGUgaXRlbXMgaW4gdGhlIHBpcGUuXG4gICAqIEBwYXJhbSBfdGFyZ2V0IC0gVGhlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiByZWFkb25seSBUcmFuc2Zvcm1lcjx1bmtub3duPltdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhcmdldDogRGF0YVNldDxUSSwgVFA+XG4gICkge31cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGFsbCgpOiB0aGlzIHtcbiAgICB0aGlzLl90YXJnZXQudXBkYXRlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQoKSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdGFydCgpOiB0aGlzIHtcbiAgICB0aGlzLl9zb3VyY2Uub24oXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9uKFwicmVtb3ZlXCIsIHRoaXMuX2xpc3RlbmVycy5yZW1vdmUpO1xuICAgIHRoaXMuX3NvdXJjZS5vbihcInVwZGF0ZVwiLCB0aGlzLl9saXN0ZW5lcnMudXBkYXRlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdG9wKCk6IHRoaXMge1xuICAgIHRoaXMuX3NvdXJjZS5vZmYoXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9mZihcInJlbW92ZVwiLCB0aGlzLl9saXN0ZW5lcnMucmVtb3ZlKTtcbiAgICB0aGlzLl9zb3VyY2Uub2ZmKFwidXBkYXRlXCIsIHRoaXMuX2xpc3RlbmVycy51cGRhdGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdGhlIHRyYW5zZm9ybWVycyB0byB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIFRoZSBpdGVtcyB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdHJhbnNmb3JtSXRlbXMoaXRlbXM6IHVua25vd25bXSk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtZXJzLnJlZHVjZSgoaXRlbXMsIHRyYW5zZm9ybSk6IHVua25vd25bXSA9PiB7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtKGl0ZW1zKTtcbiAgICB9LCBpdGVtcyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGFkZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBpZHMgb2YgdGhlIGFkZGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJhZGRcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcImFkZFwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5hZGQodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiB1cGRhdGUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSB1cGRhdGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJ1cGRhdGVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInVwZGF0ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC51cGRhdGUodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHJlbW92ZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBkYXRhIG9mIHRoZSByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJyZW1vdmVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInJlbW92ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5yZW1vdmUodGhpcy5fdHJhbnNmb3JtSXRlbXMocGF5bG9hZC5vbGREYXRhKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGlwZSBmYWN0b3J5LiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlXG4gKiBvbmx5IHRocm91Z2ggYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqL1xuY2xhc3MgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+IHtcbiAgLyoqXG4gICAqIEFycmF5IHRyYW5zZm9ybWVycyB1c2VkIHRvIHRyYW5zZm9ybSBpdGVtcyB3aXRoaW4gdGhlIHBpcGUuIFRoaXMgaXMgdHlwZWRcbiAgICogYXMgYW55IGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiBUcmFuc2Zvcm1lcjxhbnk+W10gPSBbXTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZSBmYWN0b3J5LiBUaGlzIGlzIGFuIGludGVybmFsIGNvbnN0cnVjdG9yIHRoYXRcbiAgICogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhpcyBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IGZvciB0aGlzIHBpcGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pIHt9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgZmlsdGVyaW5nIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGdpdmVuIGl0ZW1cbiAgICogc2hvdWxkIGJlIHBpcGVkIGFuZCBmYWxzZSBpZiBub3QuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZpbHRlcihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBib29sZWFuXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248U0ksIFNQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZpbHRlcihjYWxsYmFjaykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBlYWNoIHNvdXJjZSBpdGVtIHRvIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbS5cbiAgICogQHR5cGVQYXJhbSBUSSAtIFRhcmdldCBpdGVtIHR5cGUuXG4gICAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAgICogQHJldHVybnMgVGhpcyBmYWN0b3J5IGZvciBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgbWFwPFRJIGV4dGVuZHMgUGFydEl0ZW08VFA+LCBUUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIj4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gVElcbiAgKTogRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxUSSwgVFA+IHtcbiAgICB0aGlzLl90cmFuc2Zvcm1lcnMucHVzaCgoaW5wdXQpOiB1bmtub3duW10gPT4gaW5wdXQubWFwKGNhbGxiYWNrKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD47XG4gIH1cblxuICAvKipcbiAgICogTWFwIGVhY2ggc291cmNlIGl0ZW0gdG8gemVybyBvciBtb3JlIGl0ZW1zIG9mIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogYW4gYXJyYXkgb2YgY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbXMuXG4gICAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICAgKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZsYXRNYXA8VEkgZXh0ZW5kcyBQYXJ0SXRlbTxUUD4sIFRQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiPihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBUSVtdXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZsYXRNYXAoY2FsbGJhY2spKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IHRoaXMgcGlwZSB0byBnaXZlbiBkYXRhIHNldC5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBkYXRhIHNldCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMgZnJvbSB0aGlzIHBpcGUuXG4gICAqIEByZXR1cm5zIFRoZSBwaXBlIGNvbm5lY3RlZCBiZXR3ZWVuIGdpdmVuIGRhdGEgc2V0cyBhbmQgcGVyZm9ybWluZ1xuICAgKiBjb25maWd1cmVkIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBwcm9jZXNzZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgdG8odGFyZ2V0OiBEYXRhU2V0PFNJLCBTUD4pOiBEYXRhUGlwZSB7XG4gICAgcmV0dXJuIG5ldyBTaW1wbGVEYXRhUGlwZSh0aGlzLl9zb3VyY2UsIHRoaXMuX3RyYW5zZm9ybWVycywgdGFyZ2V0KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZyb20nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmZyb207XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tXCIpOyIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Z1bGwvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yTWV0aG9kO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbi8vIGBBcnJheS5pc0FycmF5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuaXNhcnJheVxuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzQXJyYXk6IGlzQXJyYXlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmlzQXJyYXk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBTYWZhcmkgPCAxMyBkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpbiB0aGlzIGNhc2VcbnZhciBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPSBERVNDUklQVE9SUyAmJiAhZnVuY3Rpb24gKCkge1xuICAvLyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IHByb3BlciBzdHJpY3QgbW9kZSBzdXBwb3J0XG4gIGlmICh0aGlzICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLmxlbmd0aCA9IDE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID8gZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICBpZiAoaXNBcnJheShPKSAmJiAhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sICdsZW5ndGgnKS53cml0YWJsZSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoJyk7XG4gIH0gcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufSA6IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBJTkNPUlJFQ1RfVE9fTEVOR1RIID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW10ucHVzaC5jYWxsKHsgbGVuZ3RoOiAweDEwMDAwMDAwMCB9LCAxKSAhPT0gNDI5NDk2NzI5Nztcbn0pO1xuXG4vLyBWOCBhbmQgU2FmYXJpIDw9IDE1LjQsIEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnB1c2gnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAncHVzaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3B1c2gnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucHVzaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucHVzaCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9wdXNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBuYXRpdmVTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc2xpY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc2xpY2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL3NsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59IiwgImltcG9ydCBfc2xpY2VJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanNcIjtcbmltcG9ydCBfQXJyYXkkZnJvbSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2Zyb20uanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgdmFyIF9jb250ZXh0O1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IF9zbGljZUluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykpLmNhbGwoX2NvbnRleHQsIDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIF9BcnJheSRmcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwgImltcG9ydCBfQXJyYXkkaXNBcnJheSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChfQXJyYXkkaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsICJpbXBvcnQgX1N5bWJvbCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiO1xuaW1wb3J0IF9nZXRJdGVyYXRvck1ldGhvZCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanNcIjtcbmltcG9ydCBfcHVzaEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkge1xuICB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBfU3ltYm9sICYmIF9nZXRJdGVyYXRvck1ldGhvZChyKSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShhKS5jYWxsKGEsIGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgbyA9ICEwLCBuID0gcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmICYmIG51bGwgIT0gdFtcInJldHVyblwiXSAmJiAodSA9IHRbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG8pIHRocm93IG47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhvdXRIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlU3ByZWFkIGZyb20gXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn0iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59IiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgX1N5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBfZ2V0SXRlcmF0b3JNZXRob2QoaXRlcikgIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gX0FycmF5JGZyb20oaXRlcik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdjb25jYXQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9jb25jYXQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuY29uY2F0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5jb25jYXQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NsaWNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG5cbi8vIGBSZWZsZWN0Lm93bktleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0Lm93bmtleXNcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIG93bktleXM6IG93bktleXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC5vd24ta2V5cycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUmVmbGVjdC5vd25LZXlzO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXlcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbm1vZHVsZS5leHBvcnRzID0gIVNUUklDVF9NRVRIT0QgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxufSA6IFtdLmZvckVhY2g7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT09IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZvckVhY2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2gnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZm9yRWFjaClcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2hcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyIG5hdGl2ZVJldmVyc2UgPSB1bmN1cnJ5VGhpcyhbXS5yZXZlcnNlKTtcbnZhciB0ZXN0ID0gWzEsIDJdO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJldmVyc2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmV2ZXJzZVxuLy8gZml4IGZvciBTYWZhcmkgMTIuMCBidWdcbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg3OTRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFN0cmluZyh0ZXN0KSA9PT0gU3RyaW5nKHRlc3QucmV2ZXJzZSgpKSB9LCB7XG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduIC0tIGRpcnR5IGhhY2tcbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZSh0aGlzKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3JldmVyc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZXZlcnNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJldmVyc2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJldmVyc2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmV2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JldmVyc2VcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NwbGljZScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc3BsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNwbGljZVxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc3BsaWNlOiBmdW5jdGlvbiBzcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50IC8qICwgLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYWN0dWFsU3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGluc2VydENvdW50LCBhY3R1YWxEZWxldGVDb3VudCwgQSwgaywgZnJvbSwgdG87XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMCkge1xuICAgICAgaW5zZXJ0Q291bnQgPSBhY3R1YWxEZWxldGVDb3VudCA9IDA7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDEpIHtcbiAgICAgIGluc2VydENvdW50ID0gMDtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbGVuIC0gYWN0dWFsU3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc2VydENvdW50ID0gYXJndW1lbnRzTGVuZ3RoIC0gMjtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbWluKG1heCh0b0ludGVnZXJPckluZmluaXR5KGRlbGV0ZUNvdW50KSwgMCksIGxlbiAtIGFjdHVhbFN0YXJ0KTtcbiAgICB9XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGluc2VydENvdW50IC0gYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIGZvciAoayA9IDA7IGsgPCBhY3R1YWxEZWxldGVDb3VudDsgaysrKSB7XG4gICAgICBmcm9tID0gYWN0dWFsU3RhcnQgKyBrO1xuICAgICAgaWYgKGZyb20gaW4gTykgY3JlYXRlUHJvcGVydHkoQSwgaywgT1tmcm9tXSk7XG4gICAgfVxuICAgIEEubGVuZ3RoID0gYWN0dWFsRGVsZXRlQ291bnQ7XG4gICAgaWYgKGluc2VydENvdW50IDwgYWN0dWFsRGVsZXRlQ291bnQpIHtcbiAgICAgIGZvciAoayA9IGFjdHVhbFN0YXJ0OyBrIDwgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgICBmcm9tID0gayArIGFjdHVhbERlbGV0ZUNvdW50O1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudDtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgICBmb3IgKGsgPSBsZW47IGsgPiBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50OyBrLS0pIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCBrIC0gMSk7XG4gICAgfSBlbHNlIGlmIChpbnNlcnRDb3VudCA+IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBsZW4gLSBhY3R1YWxEZWxldGVDb3VudDsgayA+IGFjdHVhbFN0YXJ0OyBrLS0pIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudCAtIDE7XG4gICAgICAgIHRvID0gayArIGluc2VydENvdW50IC0gMTtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IDA7IGsgPCBpbnNlcnRDb3VudDsgaysrKSB7XG4gICAgICBPW2sgKyBhY3R1YWxTdGFydF0gPSBhcmd1bWVudHNbayArIDJdO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50KTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc3BsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc3BsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNwbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc3BsaWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gc2FmZVxudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHNob3VsZCBoYXZlIGNvcnJlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucyAoRWRnZSBidWcpXG4gIGlmIChERVNDUklQVE9SUyAmJiAkYXNzaWduKHsgYjogMSB9LCAkYXNzaWduKGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgJ2InLCB7XG4gICAgICAgIHZhbHVlOiAzLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9KSwgeyBiOiAyIH0pKS5iICE9PSAxKSByZXR1cm4gdHJ1ZTtcbiAgLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zeW1ib2wgLS0gc2FmZVxuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdhc3NpZ24gZGV0ZWN0aW9uJyk7XG4gIHZhciBhbHBoYWJldCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbc3ltYm9sXSA9IDc7XG4gIGFscGhhYmV0LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChjaHIpIHsgQltjaHJdID0gY2hyOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW3N5bWJvbF0gIT09IDcgfHwgb2JqZWN0S2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT09IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQob2JqZWN0S2V5cyhTKSwgZ2V0T3duUHJvcGVydHlTeW1ib2xzKFMpKSA6IG9iamVjdEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwocHJvcGVydHlJc0VudW1lcmFibGUsIFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgYXJpdHk6IDIsIGZvcmNlZDogT2JqZWN0LmFzc2lnbiAhPT0gYXNzaWduIH0sIHtcbiAgYXNzaWduOiBhc3NpZ25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmFzc2lnbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBjcmVhdGU6IGNyZWF0ZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWpzb24gLS0gc2FmZVxuaWYgKCFwYXRoLkpTT04pIHBhdGguSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICByZXR1cm4gYXBwbHkocGF0aC5KU09OLnN0cmluZ2lmeSwgbnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBCdW4gPT0gJ2Z1bmN0aW9uJyAmJiBCdW4gJiYgdHlwZW9mIEJ1bi52ZXJzaW9uID09ICdzdHJpbmcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgRU5HSU5FX0lTX0JVTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnVuJyk7XG52YXIgVVNFUl9BR0VOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciBGdW5jdGlvbiA9IGdsb2JhbC5GdW5jdGlvbjtcbi8vIGRpcnR5IElFOS0gYW5kIEJ1biAwLjMuMC0gY2hlY2tzXG52YXIgV1JBUCA9IC9NU0lFIC5cXC4vLnRlc3QoVVNFUl9BR0VOVCkgfHwgRU5HSU5FX0lTX0JVTiAmJiAoZnVuY3Rpb24gKCkge1xuICB2YXIgdmVyc2lvbiA9IGdsb2JhbC5CdW4udmVyc2lvbi5zcGxpdCgnLicpO1xuICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPCAzIHx8IHZlcnNpb25bMF0gPT09ICcwJyAmJiAodmVyc2lvblsxXSA8IDMgfHwgdmVyc2lvblsxXSA9PT0gJzMnICYmIHZlcnNpb25bMl0gPT09ICcwJyk7XG59KSgpO1xuXG4vLyBJRTktIC8gQnVuIDAuMy4wLSBzZXRUaW1lb3V0IC8gc2V0SW50ZXJ2YWwgLyBzZXRJbW1lZGlhdGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvMTYzM1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBoYXNUaW1lQXJnKSB7XG4gIHZhciBmaXJzdFBhcmFtSW5kZXggPSBoYXNUaW1lQXJnID8gMiA6IDE7XG4gIHJldHVybiBXUkFQID8gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSkgPiBmaXJzdFBhcmFtSW5kZXg7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgcGFyYW1zID0gYm91bmRBcmdzID8gYXJyYXlTbGljZShhcmd1bWVudHMsIGZpcnN0UGFyYW1JbmRleCkgOiBbXTtcbiAgICB2YXIgY2FsbGJhY2sgPSBib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdGhpcywgcGFyYW1zKTtcbiAgICB9IDogZm47XG4gICAgcmV0dXJuIGhhc1RpbWVBcmcgPyBzY2hlZHVsZXIoY2FsbGJhY2ssIHRpbWVvdXQpIDogc2NoZWR1bGVyKGNhbGxiYWNrKTtcbiAgfSA6IHNjaGVkdWxlcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxudmFyIHNldEludGVydmFsID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0SW50ZXJ2YWwsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldGludGVydmFsXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRJbnRlcnZhbCAhPT0gc2V0SW50ZXJ2YWwgfSwge1xuICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWxcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRUaW1lb3V0ID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0VGltZW91dCwgdHJ1ZSk7XG5cbi8vIEJ1biAvIElFOS0gc2V0VGltZW91dCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRUaW1lb3V0ICE9PSBzZXRUaW1lb3V0IH0sIHtcbiAgc2V0VGltZW91dDogc2V0VGltZW91dFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRUaW1lb3V0O1xuIiwgImZ1bmN0aW9uIEVtaXR0ZXIob2JqZWN0KSB7XG5cdGlmIChvYmplY3QpIHtcblx0XHRyZXR1cm4gbWl4aW4ob2JqZWN0KTtcblx0fVxuXG5cdHRoaXMuX2NhbGxiYWNrcyA9IG5ldyBNYXAoKTtcbn1cblxuZnVuY3Rpb24gbWl4aW4ob2JqZWN0KSB7XG5cdE9iamVjdC5hc3NpZ24ob2JqZWN0LCBFbWl0dGVyLnByb3RvdHlwZSk7XG5cdG9iamVjdC5fY2FsbGJhY2tzID0gbmV3IE1hcCgpO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5FbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCkgPz8gW107XG5cdGNhbGxiYWNrcy5wdXNoKGxpc3RlbmVyKTtcblx0dGhpcy5fY2FsbGJhY2tzLnNldChldmVudCwgY2FsbGJhY2tzKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRjb25zdCBvbiA9ICguLi5hcmd1bWVudHNfKSA9PiB7XG5cdFx0dGhpcy5vZmYoZXZlbnQsIG9uKTtcblx0XHRsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0fTtcblxuXHRvbi5mbiA9IGxpc3RlbmVyO1xuXHR0aGlzLm9uKGV2ZW50LCBvbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCAmJiBsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5fY2FsbGJhY2tzLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2NhbGxiYWNrcy5kZWxldGUoZXZlbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCk7XG5cdGlmIChjYWxsYmFja3MpIHtcblx0XHRmb3IgKGNvbnN0IFtpbmRleCwgY2FsbGJhY2tdIG9mIGNhbGxiYWNrcy5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChjYWxsYmFjayA9PT0gbGlzdGVuZXIgfHwgY2FsbGJhY2suZm4gPT09IGxpc3RlbmVyKSB7XG5cdFx0XHRcdGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5fY2FsbGJhY2tzLmRlbGV0ZShldmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2NhbGxiYWNrcy5zZXQoZXZlbnQsIGNhbGxiYWNrcyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50LCAuLi5hcmd1bWVudHNfKSB7XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpO1xuXHRpZiAoY2FsbGJhY2tzKSB7XG5cdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiB0aGUgY2FsbGJhY2tzIGFycmF5IHRvIGF2b2lkIGlzc3VlcyBpZiBpdCdzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb25cblx0XHRjb25zdCBjYWxsYmFja3NDb3B5ID0gWy4uLmNhbGxiYWNrc107XG5cblx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrc0NvcHkpIHtcblx0XHRcdGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50c18pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLl9jYWxsYmFja3MuZ2V0KGV2ZW50KSA/PyBbXTtcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0aWYgKGV2ZW50KSB7XG5cdFx0cmV0dXJuIHRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XG5cdH1cblxuXHRsZXQgdG90YWxDb3VudCA9IDA7XG5cdGZvciAoY29uc3QgY2FsbGJhY2tzIG9mIHRoaXMuX2NhbGxiYWNrcy52YWx1ZXMoKSkge1xuXHRcdHRvdGFsQ291bnQgKz0gY2FsbGJhY2tzLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiB0b3RhbENvdW50O1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUuaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLmxpc3RlbmVyQ291bnQoZXZlbnQpID4gMDtcbn07XG5cbi8vIEFsaWFzZXNcbkVtaXR0ZXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vbjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub2ZmO1xuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gRW1pdHRlcjtcbn1cbiIsICIvKiEgSGFtbWVyLkpTIC0gdjIuMC4xNy1yYyAtIDIwMTktMTItMTZcbiAqIGh0dHA6Ly9uYXZlci5naXRodWIuaW8vZWdqc1xuICpcbiAqIEZvcmtlZCBCeSBOYXZlciBlZ2pzXG4gKiBDb3B5cmlnaHQgKGMpIGhhbW1lcmpzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKi9cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IG9iamVjdHNfdG9fYXNzaWduXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB0YXJnZXRcbiAqL1xudmFyIGFzc2lnbjtcblxuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF07XG5cbiAgICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSB7XG4gICAgICAgICAgICBvdXRwdXRbbmV4dEtleV0gPSBzb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcbn0gZWxzZSB7XG4gIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbnZhciBhc3NpZ24kMSA9IGFzc2lnbjtcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IHtcbiAgc3R5bGU6IHt9XG59IDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG52YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgIGFicyA9IE1hdGguYWJzO1xudmFyIG5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHByZWZpeGVkIHByb3BlcnR5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfSBwcmVmaXhlZFxuICovXG5cbmZ1bmN0aW9uIHByZWZpeGVkKG9iaiwgcHJvcGVydHkpIHtcbiAgdmFyIHByZWZpeDtcbiAgdmFyIHByb3A7XG4gIHZhciBjYW1lbFByb3AgPSBwcm9wZXJ0eVswXS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICBwcmVmaXggPSBWRU5ET1JfUFJFRklYRVNbaV07XG4gICAgcHJvcCA9IHByZWZpeCA/IHByZWZpeCArIGNhbWVsUHJvcCA6IHByb3BlcnR5O1xuXG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYywgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbnZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gIC8vIHdpbmRvdyBpcyB1bmRlZmluZWQgaW4gbm9kZS5qc1xuICB3aW4gPSB7fTtcbn0gZWxzZSB7XG4gIHdpbiA9IHdpbmRvdztcbn1cblxudmFyIFBSRUZJWEVEX1RPVUNIX0FDVElPTiA9IHByZWZpeGVkKFRFU1RfRUxFTUVOVC5zdHlsZSwgJ3RvdWNoQWN0aW9uJyk7XG52YXIgTkFUSVZFX1RPVUNIX0FDVElPTiA9IFBSRUZJWEVEX1RPVUNIX0FDVElPTiAhPT0gdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpIHtcbiAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRvdWNoTWFwID0ge307XG4gIHZhciBjc3NTdXBwb3J0cyA9IHdpbi5DU1MgJiYgd2luLkNTUy5zdXBwb3J0cztcbiAgWydhdXRvJywgJ21hbmlwdWxhdGlvbicsICdwYW4teScsICdwYW4teCcsICdwYW4teCBwYW4teScsICdub25lJ10uZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgLy8gYWxsIHZhbHVlcy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgSUUgMTAgYW5kIDExLlxuICAgIHJldHVybiB0b3VjaE1hcFt2YWxdID0gY3NzU3VwcG9ydHMgPyB3aW4uQ1NTLnN1cHBvcnRzKCd0b3VjaC1hY3Rpb24nLCB2YWwpIDogdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiB0b3VjaE1hcDtcbn1cblxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG5cbnZhciBUT1VDSF9BQ1RJT05fTk9ORSA9ICdub25lJztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1ggPSAncGFuLXgnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWSA9ICdwYW4teSc7XG52YXIgVE9VQ0hfQUNUSU9OX01BUCA9IGdldFRvdWNoQWN0aW9uUHJvcHMoKTtcblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcbnZhciBTVVBQT1JUX1RPVUNIID0gJ29udG91Y2hzdGFydCcgaW4gd2luO1xudmFyIFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMgPSBwcmVmaXhlZCh3aW4sICdQb2ludGVyRXZlbnQnKSAhPT0gdW5kZWZpbmVkO1xudmFyIFNVUFBPUlRfT05MWV9UT1VDSCA9IFNVUFBPUlRfVE9VQ0ggJiYgTU9CSUxFX1JFR0VYLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xudmFyIENPTVBVVEVfSU5URVJWQUwgPSAyNTtcbnZhciBJTlBVVF9TVEFSVCA9IDE7XG52YXIgSU5QVVRfTU9WRSA9IDI7XG52YXIgSU5QVVRfRU5EID0gNDtcbnZhciBJTlBVVF9DQU5DRUwgPSA4O1xudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG52YXIgRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fTEVGVCB8IERJUkVDVElPTl9SSUdIVDtcbnZhciBESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVVAgfCBESVJFQ1RJT05fRE9XTjtcbnZhciBESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUw7XG52YXIgUFJPUFNfWFkgPSBbJ3gnLCAneSddO1xudmFyIFBST1BTX0NMSUVOVF9YWSA9IFsnY2xpZW50WCcsICdjbGllbnRZJ107XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdhbGsgb2JqZWN0cyBhbmQgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gIHZhciBpO1xuXG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9iai5mb3JFYWNoKSB7XG4gICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICB9IGVsc2UgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBvYmoubGVuZ3RoKSB7XG4gICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpIGluIG9iaikge1xuICAgICAgb2JqLmhhc093blByb3BlcnR5KGkpICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBsZXQgYSBib29sZWFuIHZhbHVlIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IG11c3QgcmV0dXJuIGEgYm9vbGVhblxuICogdGhpcyBmaXJzdCBpdGVtIGluIGFyZ3Mgd2lsbCBiZSB1c2VkIGFzIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IHZhbFxuICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFRZUEVfRlVOQ1RJT04pIHtcbiAgICByZXR1cm4gdmFsLmFwcGx5KGFyZ3MgPyBhcmdzWzBdIHx8IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzbWFsbCBpbmRleE9mIHdyYXBwZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaW5TdHIoc3RyLCBmaW5kKSB7XG4gIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3aGVuIHRoZSB0b3VjaEFjdGlvbnMgYXJlIGNvbGxlY3RlZCB0aGV5IGFyZSBub3QgYSB2YWxpZCB2YWx1ZSwgc28gd2UgbmVlZCB0byBjbGVhbiB0aGluZ3MgdXAuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuXG5mdW5jdGlvbiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zKSB7XG4gIC8vIG5vbmVcbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfVxuXG4gIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpOyAvLyBpZiBib3RoIHBhbi14IGFuZCBwYW4teSBhcmUgc2V0IChkaWZmZXJlbnQgcmVjb2duaXplcnNcbiAgLy8gZm9yIGRpZmZlcmVudCBkaXJlY3Rpb25zLCBlLmcuIGhvcml6b250YWwgcGFuIGJ1dCB2ZXJ0aWNhbCBzd2lwZT8pXG4gIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAvLyByZWNvZ25pemVycyB3aWxsIHdvcmssIHNpbmNlIHRoZSBicm93c2VyIHdvdWxkIGhhbmRsZSBhbGwgcGFubmluZ1xuXG4gIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH0gLy8gcGFuLXggT1IgcGFuLXlcblxuXG4gIGlmIChoYXNQYW5YIHx8IGhhc1BhblkpIHtcbiAgICByZXR1cm4gaGFzUGFuWCA/IFRPVUNIX0FDVElPTl9QQU5fWCA6IFRPVUNIX0FDVElPTl9QQU5fWTtcbiAgfSAvLyBtYW5pcHVsYXRpb25cblxuXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OO1xuICB9XG5cbiAgcmV0dXJuIFRPVUNIX0FDVElPTl9BVVRPO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBBY3Rpb25cbiAqIHNldHMgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IG9yIHVzZXMgdGhlIGpzIGFsdGVybmF0aXZlXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIFRvdWNoQWN0aW9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG91Y2hBY3Rpb24obWFuYWdlciwgdmFsdWUpIHtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2V0KHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaEFjdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIGZpbmQgb3V0IHRoZSB0b3VjaC1hY3Rpb24gYnkgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKHZhbHVlID09PSBUT1VDSF9BQ1RJT05fQ09NUFVURSkge1xuICAgICAgdmFsdWUgPSB0aGlzLmNvbXB1dGUoKTtcbiAgICB9XG5cbiAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICoganVzdCByZS1zZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjb21wdXRlIHRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IGJhc2VkIG9uIHRoZSByZWNvZ25pemVyJ3Mgc2V0dGluZ3NcbiAgICogQHJldHVybnMge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8uY29tcHV0ZSA9IGZ1bmN0aW9uIGNvbXB1dGUoKSB7XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICBlYWNoKHRoaXMubWFuYWdlci5yZWNvZ25pemVycywgZnVuY3Rpb24gKHJlY29nbml6ZXIpIHtcbiAgICAgIGlmIChib29sT3JGbihyZWNvZ25pemVyLm9wdGlvbnMuZW5hYmxlLCBbcmVjb2duaXplcl0pKSB7XG4gICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zLmpvaW4oJyAnKSk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gZWFjaCBpbnB1dCBjeWNsZSBhbmQgcHJvdmlkZXMgdGhlIHByZXZlbnRpbmcgb2YgdGhlIGJyb3dzZXIgYmVoYXZpb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnREZWZhdWx0cyA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhpbnB1dCkge1xuICAgIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5vZmZzZXREaXJlY3Rpb247IC8vIGlmIHRoZSB0b3VjaCBhY3Rpb24gZGlkIHByZXZlbnRlZCBvbmNlIHRoaXMgc2Vzc2lvblxuXG4gICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWV07XG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWF07XG5cbiAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgLy8gZG8gbm90IHByZXZlbnQgZGVmYXVsdHMgaWYgdGhpcyBpcyBhIHRhcCBnZXN0dXJlXG4gICAgICB2YXIgaXNUYXBQb2ludGVyID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSAxO1xuICAgICAgdmFyIGlzVGFwTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IDI7XG4gICAgICB2YXIgaXNUYXBUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCAyNTA7XG5cbiAgICAgIGlmIChpc1RhcFBvaW50ZXIgJiYgaXNUYXBNb3ZlbWVudCAmJiBpc1RhcFRvdWNoVGltZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgLy8gYHBhbi14IHBhbi15YCBtZWFucyBicm93c2VyIGhhbmRsZXMgYWxsIHNjcm9sbGluZy9wYW5uaW5nLCBkbyBub3QgcHJldmVudFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChoYXNOb25lIHx8IGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwgfHwgaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZlbnRTcmMoc3JjRXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGwgcHJldmVudERlZmF1bHQgdG8gcHJldmVudCB0aGUgYnJvd3NlcidzIGRlZmF1bHQgYmVoYXZpb3IgKHNjcm9sbGluZyBpbiBtb3N0IGNhc2VzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudFNyYyA9IGZ1bmN0aW9uIHByZXZlbnRTcmMoc3JjRXZlbnQpIHtcbiAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoQWN0aW9uO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBjZW50ZXIgb2YgYWxsIHRoZSBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gcG9pbnRlcnNcbiAqIEByZXR1cm4ge09iamVjdH0gY2VudGVyIGNvbnRhaW5zIGB4YCBhbmQgYHlgIHByb3BlcnRpZXNcbiAqL1xuXG5mdW5jdGlvbiBnZXRDZW50ZXIocG9pbnRlcnMpIHtcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBubyBuZWVkIHRvIGxvb3Agd2hlbiBvbmx5IG9uZSB0b3VjaFxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgfTtcbiAgfVxuXG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgIHggKz0gcG9pbnRlcnNbaV0uY2xpZW50WDtcbiAgICB5ICs9IHBvaW50ZXJzW2ldLmNsaWVudFk7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4IC8gcG9pbnRlcnNMZW5ndGgpLFxuICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIGEgc2ltcGxlIGNsb25lIGZyb20gdGhlIGlucHV0IHVzZWQgZm9yIHN0b3JhZ2Ugb2YgZmlyc3RJbnB1dCBhbmQgZmlyc3RNdWx0aXBsZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBjbG9uZWRJbnB1dERhdGFcbiAqL1xuXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAvLyBtYWtlIGEgc2ltcGxlIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgYSByZWZlcmVuY2UgaWYgd2UgZG9uJ3RcbiAgLy8gd2Ugb25seSBuZWVkIGNsaWVudFhZIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gIHZhciBwb2ludGVycyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBpbnB1dC5wb2ludGVycy5sZW5ndGgpIHtcbiAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICB9O1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGltZVN0YW1wOiBub3coKSxcbiAgICBwb2ludGVyczogcG9pbnRlcnMsXG4gICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgIGRlbHRhWDogaW5wdXQuZGVsdGFYLFxuICAgIGRlbHRhWTogaW5wdXQuZGVsdGFZXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gcDEge3gsIHl9XG4gKiBAcGFyYW0ge09iamVjdH0gcDIge3gsIHl9XG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIHR3byBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IHAxXG4gKiBAcGFyYW0ge09iamVjdH0gcDJcbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRBbmdsZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KSAqIDE4MCAvIE1hdGguUEk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgZGlyZWN0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpcmVjdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICB9XG5cbiAgaWYgKGFicyh4KSA+PSBhYnMoeSkpIHtcbiAgICByZXR1cm4geCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgfVxuXG4gIHJldHVybiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyOyAvLyBsZXQgeyBvZmZzZXREZWx0YTpvZmZzZXQgPSB7fSwgcHJldkRlbHRhID0ge30sIHByZXZJbnB1dCA9IHt9IH0gPSBzZXNzaW9uO1xuICAvLyBqc2NzIHRocm93aW5nIGVycm9yIG9uIGRlZmFsdXQgZGVzdHJ1Y3R1cmVkIHZhbHVlcyBhbmQgd2l0aG91dCBkZWZhdWx0cyB0ZXN0cyBmYWlsXG5cbiAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gIHZhciBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZJbnB1dCA9IHNlc3Npb24ucHJldklucHV0IHx8IHt9O1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhID0ge1xuICAgICAgeDogcHJldklucHV0LmRlbHRhWCB8fCAwLFxuICAgICAgeTogcHJldklucHV0LmRlbHRhWSB8fCAwXG4gICAgfTtcbiAgICBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhID0ge1xuICAgICAgeDogY2VudGVyLngsXG4gICAgICB5OiBjZW50ZXIueVxuICAgIH07XG4gIH1cblxuICBpbnB1dC5kZWx0YVggPSBwcmV2RGVsdGEueCArIChjZW50ZXIueCAtIG9mZnNldC54KTtcbiAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgeTogeSAvIGRlbHRhVGltZSB8fCAwXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgc2NhbGUgZmFjdG9yIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBubyBzY2FsZSBpcyAxLCBhbmQgZ29lcyBkb3duIHRvIDAgd2hlbiBwaW5jaGVkIHRvZ2V0aGVyLCBhbmQgYmlnZ2VyIHdoZW4gcGluY2hlZCBvdXRcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gc2NhbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRTY2FsZShzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXREaXN0YW5jZShlbmRbMF0sIGVuZFsxXSwgUFJPUFNfQ0xJRU5UX1hZKSAvIGdldERpc3RhbmNlKHN0YXJ0WzBdLCBzdGFydFsxXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSByb3RhdGlvbiBkZWdyZWVzIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHJvdGF0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0QW5nbGUoZW5kWzFdLCBlbmRbMF0sIFBST1BTX0NMSUVOVF9YWSkgKyBnZXRBbmdsZShzdGFydFsxXSwgc3RhcnRbMF0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHZlbG9jaXR5IGlzIGNhbGN1bGF0ZWQgZXZlcnkgeCBtc1xuICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgbGFzdCA9IHNlc3Npb24ubGFzdEludGVydmFsIHx8IGlucHV0O1xuICB2YXIgZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gbGFzdC50aW1lU3RhbXA7XG4gIHZhciB2ZWxvY2l0eTtcbiAgdmFyIHZlbG9jaXR5WDtcbiAgdmFyIHZlbG9jaXR5WTtcbiAgdmFyIGRpcmVjdGlvbjtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9DQU5DRUwgJiYgKGRlbHRhVGltZSA+IENPTVBVVEVfSU5URVJWQUwgfHwgbGFzdC52ZWxvY2l0eSA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHZhciBkZWx0YVggPSBpbnB1dC5kZWx0YVggLSBsYXN0LmRlbHRhWDtcbiAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG4gICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICB2ZWxvY2l0eVggPSB2Lng7XG4gICAgdmVsb2NpdHlZID0gdi55O1xuICAgIHZlbG9jaXR5ID0gYWJzKHYueCkgPiBhYnModi55KSA/IHYueCA6IHYueTtcbiAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgIHZlbG9jaXR5ID0gbGFzdC52ZWxvY2l0eTtcbiAgICB2ZWxvY2l0eVggPSBsYXN0LnZlbG9jaXR5WDtcbiAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICBkaXJlY3Rpb24gPSBsYXN0LmRpcmVjdGlvbjtcbiAgfVxuXG4gIGlucHV0LnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIGlucHV0LnZlbG9jaXR5WCA9IHZlbG9jaXR5WDtcbiAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG59XG5cbi8qKlxuKiBAcHJpdmF0ZVxuICogZXh0ZW5kIHRoZSBkYXRhIHdpdGggc29tZSB1c2FibGUgcHJvcGVydGllcyBsaWtlIHNjYWxlLCByb3RhdGUsIHZlbG9jaXR5IGV0Y1xuICogQHBhcmFtIHtPYmplY3R9IG1hbmFnZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpIHtcbiAgdmFyIHNlc3Npb24gPSBtYW5hZ2VyLnNlc3Npb247XG4gIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cblxuICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgIHNlc3Npb24uZmlyc3RJbnB1dCA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSAvLyB0byBjb21wdXRlIHNjYWxlIGFuZCByb3RhdGlvbiB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBtdWx0aXBsZSB0b3VjaGVzXG5cblxuICBpZiAocG9pbnRlcnNMZW5ndGggPiAxICYmICFzZXNzaW9uLmZpcnN0TXVsdGlwbGUpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gZWxzZSBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBmaXJzdElucHV0ID0gc2Vzc2lvbi5maXJzdElucHV0LFxuICAgICAgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgdmFyIG9mZnNldENlbnRlciA9IGZpcnN0TXVsdGlwbGUgPyBmaXJzdE11bHRpcGxlLmNlbnRlciA6IGZpcnN0SW5wdXQuY2VudGVyO1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgaW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gIGlucHV0LmRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGZpcnN0SW5wdXQudGltZVN0YW1wO1xuICBpbnB1dC5hbmdsZSA9IGdldEFuZ2xlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgaW5wdXQuZGlzdGFuY2UgPSBnZXREaXN0YW5jZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KTtcbiAgaW5wdXQub2Zmc2V0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgdmFyIG92ZXJhbGxWZWxvY2l0eSA9IGdldFZlbG9jaXR5KGlucHV0LmRlbHRhVGltZSwgaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYID0gb3ZlcmFsbFZlbG9jaXR5Lng7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5ID0gYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkgPyBvdmVyYWxsVmVsb2NpdHkueCA6IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5zY2FsZSA9IGZpcnN0TXVsdGlwbGUgPyBnZXRTY2FsZShmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAxO1xuICBpbnB1dC5yb3RhdGlvbiA9IGZpcnN0TXVsdGlwbGUgPyBnZXRSb3RhdGlvbihmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAwO1xuICBpbnB1dC5tYXhQb2ludGVycyA9ICFzZXNzaW9uLnByZXZJbnB1dCA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA+IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnM7XG4gIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCk7IC8vIGZpbmQgdGhlIGNvcnJlY3QgdGFyZ2V0XG5cbiAgdmFyIHRhcmdldCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gIHZhciBzcmNFdmVudFRhcmdldDtcblxuICBpZiAoc3JjRXZlbnQuY29tcG9zZWRQYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5jb21wb3NlZFBhdGgoKVswXTtcbiAgfSBlbHNlIGlmIChzcmNFdmVudC5wYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5wYXRoWzBdO1xuICB9IGVsc2Uge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgaWYgKGhhc1BhcmVudChzcmNFdmVudFRhcmdldCwgdGFyZ2V0KSkge1xuICAgIHRhcmdldCA9IHNyY0V2ZW50VGFyZ2V0O1xuICB9XG5cbiAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBoYW5kbGUgaW5wdXQgZXZlbnRzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gIHZhciBwb2ludGVyc0xlbiA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGNoYW5nZWRQb2ludGVyc0xlbiA9IGlucHV0LmNoYW5nZWRQb2ludGVycy5sZW5ndGg7XG4gIHZhciBpc0ZpcnN0ID0gZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIHZhciBpc0ZpbmFsID0gZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIGlucHV0LmlzRmlyc3QgPSAhIWlzRmlyc3Q7XG4gIGlucHV0LmlzRmluYWwgPSAhIWlzRmluYWw7XG5cbiAgaWYgKGlzRmlyc3QpIHtcbiAgICBtYW5hZ2VyLnNlc3Npb24gPSB7fTtcbiAgfSAvLyBzb3VyY2UgZXZlbnQgaXMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2YgdGhlIGRvbUV2ZW50c1xuICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcblxuXG4gIGlucHV0LmV2ZW50VHlwZSA9IGV2ZW50VHlwZTsgLy8gY29tcHV0ZSBzY2FsZSwgcm90YXRpb24gZXRjXG5cbiAgY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCk7IC8vIGVtaXQgc2VjcmV0IGV2ZW50XG5cbiAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG4gIG1hbmFnZXIucmVjb2duaXplKGlucHV0KTtcbiAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzcGxpdCBzdHJpbmcgb24gd2hpdGVzcGFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge0FycmF5fSB3b3Jkc1xuICovXG5mdW5jdGlvbiBzcGxpdFN0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltKCkuc3BsaXQoL1xccysvZyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZEV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZWxlbWVudDtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93IHx8IHdpbmRvdztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIElucHV0KG1hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICB0aGlzLnRhcmdldCA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dFRhcmdldDsgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuXG4gICAgdGhpcy5kb21IYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICBpZiAoYm9vbE9yRm4obWFuYWdlci5vcHRpb25zLmVuYWJsZSwgW21hbmFnZXJdKSkge1xuICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2hvdWxkIGhhbmRsZSB0aGUgaW5wdXRFdmVudCBkYXRhIGFuZCB0cmlnZ2VyIHRoZSBjYWxsYmFja1xuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5ldkVsICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiBhZGRFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4gSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICBpZiAoc3JjLmluZGV4T2YgJiYgIWZpbmRCeUtleSkge1xuICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgIGlmIChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCB8fCAhZmluZEJ5S2V5ICYmIHNyY1tpXSA9PT0gZmluZCkge1xuICAgICAgICAvLyBkbyBub3QgdXNlID09PSBoZXJlLCB0ZXN0IGZhaWxzXG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgcG9pbnRlcmRvd246IElOUFVUX1NUQVJULFxuICBwb2ludGVybW92ZTogSU5QVVRfTU9WRSxcbiAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gIHBvaW50ZXJjYW5jZWw6IElOUFVUX0NBTkNFTCxcbiAgcG9pbnRlcm91dDogSU5QVVRfQ0FOQ0VMXG59OyAvLyBpbiBJRTEwIHRoZSBwb2ludGVyIHR5cGVzIGlzIGRlZmluZWQgYXMgYW4gZW51bVxuXG52YXIgSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSA9IHtcbiAgMjogSU5QVVRfVFlQRV9UT1VDSCxcbiAgMzogSU5QVVRfVFlQRV9QRU4sXG4gIDQ6IElOUFVUX1RZUEVfTU9VU0UsXG4gIDU6IElOUFVUX1RZUEVfS0lORUNUIC8vIHNlZSBodHRwczovL3R3aXR0ZXIuY29tL2phY29icm9zc2kvc3RhdHVzLzQ4MDU5NjQzODQ4OTg5MDgxNlxuXG59O1xudmFyIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAncG9pbnRlcmRvd24nO1xudmFyIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdwb2ludGVybW92ZSBwb2ludGVydXAgcG9pbnRlcmNhbmNlbCc7IC8vIElFMTAgaGFzIHByZWZpeGVkIHN1cHBvcnQsIGFuZCBjYXNlLXNlbnNpdGl2ZVxuXG5pZiAod2luLk1TUG9pbnRlckV2ZW50ICYmICF3aW4uUG9pbnRlckV2ZW50KSB7XG4gIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAnTVNQb2ludGVyRG93bic7XG4gIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBQb2ludGVyIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cblxudmFyIFBvaW50ZXJFdmVudElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUG9pbnRlckV2ZW50SW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdG9yZSA9IF90aGlzLm1hbmFnZXIuc2Vzc2lvbi5wb2ludGVyRXZlbnRzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZhbHNlO1xuICAgIHZhciBldmVudFR5cGVOb3JtYWxpemVkID0gZXYudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ21zJywgJycpO1xuICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICB2YXIgcG9pbnRlclR5cGUgPSBJRTEwX1BPSU5URVJfVFlQRV9FTlVNW2V2LnBvaW50ZXJUeXBlXSB8fCBldi5wb2ludGVyVHlwZTtcbiAgICB2YXIgaXNUb3VjaCA9IHBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIOyAvLyBnZXQgaW5kZXggb2YgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG4gICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTsgLy8gc3RhcnQgYW5kIG1vdXNlIG11c3QgYmUgZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChldi5idXR0b24gPT09IDAgfHwgaXNUb3VjaCkpIHtcbiAgICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgc3RvcmVJbmRleCA9IHN0b3JlLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgfSAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcblxuXG4gICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG5cbiAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuXG4gICAgaWYgKHJlbW92ZVBvaW50ZXIpIHtcbiAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBzdG9yZVxuICAgICAgc3RvcmUuc3BsaWNlKHN0b3JlSW5kZXgsIDEpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUG9pbnRlckV2ZW50SW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaiwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHVuaXF1ZSBhcnJheSB3aXRoIG9iamVjdHMgYmFzZWQgb24gYSBrZXkgKGxpa2UgJ2lkJykgb3IganVzdCBieSB0aGUgYXJyYXkncyB2YWx1ZVxuICogQHBhcmFtIHtBcnJheX0gc3JjIFt7aWQ6MX0se2lkOjJ9LHtpZDoxfV1cbiAqIEBwYXJhbSB7U3RyaW5nfSBba2V5XVxuICogQHBhcmFtIHtCb29sZWFufSBbc29ydD1GYWxzZV1cbiAqIEByZXR1cm5zIHtBcnJheX0gW3tpZDoxfSx7aWQ6Mn1dXG4gKi9cblxuZnVuY3Rpb24gdW5pcXVlQXJyYXkoc3JjLCBrZXksIHNvcnQpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgdmFyIHZhbCA9IGtleSA/IHNyY1tpXVtrZXldIDogc3JjW2ldO1xuXG4gICAgaWYgKGluQXJyYXkodmFsdWVzLCB2YWwpIDwgMCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHNyY1tpXSk7XG4gICAgfVxuXG4gICAgdmFsdWVzW2ldID0gdmFsO1xuICAgIGkrKztcbiAgfVxuXG4gIGlmIChzb3J0KSB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYVtrZXldID4gYltrZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNdWx0aS11c2VyIHRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIFRvdWNoSW5wdXQucHJvdG90eXBlLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMudGFyZ2V0SWRzID0ge307IC8vIHRoaXMuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgIHZhciB0b3VjaGVzID0gZ2V0VG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTtcblxuICAgIGlmICghdG91Y2hlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gZ2V0VG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciB0YXJnZXRJZHMgPSB0aGlzLnRhcmdldElkczsgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcblxuICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgdGFyZ2V0SWRzW2FsbFRvdWNoZXNbMF0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgIHJldHVybiBbYWxsVG91Y2hlcywgYWxsVG91Y2hlc107XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIHRhcmdldFRvdWNoZXM7XG4gIHZhciBjaGFuZ2VkVG91Y2hlcyA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXTtcbiAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0OyAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG5cbiAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uICh0b3VjaCkge1xuICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICB9KTsgLy8gY29sbGVjdCB0b3VjaGVzXG5cbiAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICBpKys7XG4gICAgfVxuICB9IC8vIGZpbHRlciBjaGFuZ2VkIHRvdWNoZXMgdG8gb25seSBjb250YWluIHRvdWNoZXMgdGhhdCBleGlzdCBpbiB0aGUgY29sbGVjdGVkIHRhcmdldCBpZHNcblxuXG4gIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgY2hhbmdlZFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgfSAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIGlmICghY2hhbmdlZFRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIFsvLyBtZXJnZSB0YXJnZXRUb3VjaGVzIHdpdGggY2hhbmdlZFRhcmdldFRvdWNoZXMgc28gaXQgY29udGFpbnMgQUxMIHRvdWNoZXMsIGluY2x1ZGluZyAnZW5kJyBhbmQgJ2NhbmNlbCdcbiAgdW5pcXVlQXJyYXkodGFyZ2V0VG91Y2hlcy5jb25jYXQoY2hhbmdlZFRhcmdldFRvdWNoZXMpLCAnaWRlbnRpZmllcicsIHRydWUpLCBjaGFuZ2VkVGFyZ2V0VG91Y2hlc107XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gIG1vdXNlZG93bjogSU5QVVRfU1RBUlQsXG4gIG1vdXNlbW92ZTogSU5QVVRfTU9WRSxcbiAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xudmFyIE1PVVNFX0VMRU1FTlRfRVZFTlRTID0gJ21vdXNlZG93bic7XG52YXIgTU9VU0VfV0lORE9XX0VWRU5UUyA9ICdtb3VzZW1vdmUgbW91c2V1cCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gTU9VU0VfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBNT1VTRV9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5wcmVzc2VkID0gZmFsc2U7IC8vIG1vdXNlZG93biBzdGF0ZVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBvbiBzdGFydCB3ZSB3YW50IHRvIGhhdmUgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX01PVkUgJiYgZXYud2hpY2ggIT09IDEpIHtcbiAgICAgIGV2ZW50VHlwZSA9IElOUFVUX0VORDtcbiAgICB9IC8vIG1vdXNlIG11c3QgYmUgZG93blxuXG5cbiAgICBpZiAoIXRoaXMucHJlc3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTW91c2VJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDb21iaW5lZCB0b3VjaCBhbmQgbW91c2UgaW5wdXRcbiAqXG4gKiBUb3VjaCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhlbiBtb3VzZSwgYW5kIHdoaWxlIHRvdWNoaW5nIG5vIG1vdXNlIGV2ZW50cyBhcmUgYWxsb3dlZC5cbiAqIFRoaXMgYmVjYXVzZSB0b3VjaCBkZXZpY2VzIGFsc28gZW1pdCBtb3VzZSBldmVudHMgd2hpbGUgZG9pbmcgYSB0b3VjaC5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIERFRFVQX1RJTUVPVVQgPSAyNTAwO1xudmFyIERFRFVQX0RJU1RBTkNFID0gMjU7XG5cbmZ1bmN0aW9uIHNldExhc3RUb3VjaChldmVudERhdGEpIHtcbiAgdmFyIF9ldmVudERhdGEkY2hhbmdlZFBvaSA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnMsXG4gICAgICB0b3VjaCA9IF9ldmVudERhdGEkY2hhbmdlZFBvaVswXTtcblxuICBpZiAodG91Y2guaWRlbnRpZmllciA9PT0gdGhpcy5wcmltYXJ5VG91Y2gpIHtcbiAgICB2YXIgbGFzdFRvdWNoID0ge1xuICAgICAgeDogdG91Y2guY2xpZW50WCxcbiAgICAgIHk6IHRvdWNoLmNsaWVudFlcbiAgICB9O1xuICAgIHZhciBsdHMgPSB0aGlzLmxhc3RUb3VjaGVzO1xuICAgIHRoaXMubGFzdFRvdWNoZXMucHVzaChsYXN0VG91Y2gpO1xuXG4gICAgdmFyIHJlbW92ZUxhc3RUb3VjaCA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RUb3VjaCgpIHtcbiAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcblxuICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICB2YXIgeCA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRYO1xuICB2YXIgeSA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRZO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYXN0VG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0ID0gdGhpcy5sYXN0VG91Y2hlc1tpXTtcbiAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KTtcbiAgICB2YXIgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcblxuICAgIGlmIChkeCA8PSBERURVUF9ESVNUQU5DRSAmJiBkeSA8PSBERURVUF9ESVNUQU5DRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgVG91Y2hNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIFRvdWNoTW91c2VJbnB1dCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9JbnB1dCkge1xuICAgIF9pbmhlcml0c0xvb3NlKFRvdWNoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICAgIGZ1bmN0aW9uIFRvdWNoTW91c2VJbnB1dChfbWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfSW5wdXQuY2FsbCh0aGlzLCBfbWFuYWdlciwgY2FsbGJhY2spIHx8IHRoaXM7XG5cbiAgICAgIF90aGlzLmhhbmRsZXIgPSBmdW5jdGlvbiAobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIO1xuICAgICAgICB2YXIgaXNNb3VzZSA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9NT1VTRTtcblxuICAgICAgICBpZiAoaXNNb3VzZSAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuXG5cbiAgICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgICByZWNvcmRUb3VjaGVzLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RGF0YSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLm1vdXNlID0gbmV3IE1vdXNlSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgICAgX3RoaXMubGFzdFRvdWNoZXMgPSBbXTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBoYW5kbGUgbW91c2UgYW5kIHRvdWNoIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0RXZlbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb3VjaE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgdGhpcy5tb3VzZS5kZXN0cm95KCk7XG4gICAgfTtcblxuICAgIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG4gIH0oSW5wdXQpO1xuXG4gIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBjYWxsZWQgYnkgdGhlIE1hbmFnZXIgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gIHZhciBUeXBlOyAvLyBsZXQgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIHZhciBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgaWYgKGlucHV0Q2xhc3MpIHtcbiAgICBUeXBlID0gaW5wdXRDbGFzcztcbiAgfSBlbHNlIGlmIChTVVBQT1JUX1BPSU5URVJfRVZFTlRTKSB7XG4gICAgVHlwZSA9IFBvaW50ZXJFdmVudElucHV0O1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfT05MWV9UT1VDSCkge1xuICAgIFR5cGUgPSBUb3VjaElucHV0O1xuICB9IGVsc2UgaWYgKCFTVVBQT1JUX1RPVUNIKSB7XG4gICAgVHlwZSA9IE1vdXNlSW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgVHlwZSA9IFRvdWNoTW91c2VJbnB1dDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZm4gb24gZWFjaCBlbnRyeVxuICogaWYgaXQgYWludCBhbiBhcnJheSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGhpbmcuXG4gKiB0aGlzIGlzIHVzZWQgYnkgYWxsIHRoZSBtZXRob2RzIHRoYXQgYWNjZXB0IGEgc2luZ2xlIGFuZCBhcnJheSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7KnxBcnJheX0gYXJnXG4gKiBAcGFyYW0ge1N0cmluZ30gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGludm9rZUFycmF5QXJnKGFyZywgZm4sIGNvbnRleHQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIGVhY2goYXJnLCBjb250ZXh0W2ZuXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVuaXF1ZSBpZFxuICogQHJldHVybnMge251bWJlcn0gdW5pcXVlSWRcbiAqL1xudmFyIF91bmlxdWVJZCA9IDE7XG5mdW5jdGlvbiB1bmlxdWVJZCgpIHtcbiAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSByZWNvZ25pemVyIGJ5IG5hbWUgaWYgaXQgaXMgYm91bmQgdG8gYSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSBvdGhlclJlY29nbml6ZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICogQHJldHVybnMge1JlY29nbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCByZWNvZ25pemVyKSB7XG4gIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuXG4gIGlmIChtYW5hZ2VyKSB7XG4gICAgcmV0dXJuIG1hbmFnZXIuZ2V0KG90aGVyUmVjb2duaXplcik7XG4gIH1cblxuICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1c2FibGUgc3RyaW5nLCB1c2VkIGFzIGV2ZW50IHBvc3RmaXhcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IHN0YXRlXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdGF0ZVxuICovXG5cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gIGlmIChzdGF0ZSAmIFNUQVRFX0NBTkNFTExFRCkge1xuICAgIHJldHVybiAnY2FuY2VsJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0VOREVEKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQ0hBTkdFRCkge1xuICAgIHJldHVybiAnbW92ZSc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9CRUdBTikge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyIGZsb3cgZXhwbGFpbmVkOyAqXG4gKiBBbGwgcmVjb2duaXplcnMgaGF2ZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBQT1NTSUJMRSB3aGVuIGEgaW5wdXQgc2Vzc2lvbiBzdGFydHMuXG4gKiBUaGUgZGVmaW5pdGlvbiBvZiBhIGlucHV0IHNlc3Npb24gaXMgZnJvbSB0aGUgZmlyc3QgaW5wdXQgdW50aWwgdGhlIGxhc3QgaW5wdXQsIHdpdGggYWxsIGl0J3MgbW92ZW1lbnQgaW4gaXQuICpcbiAqIEV4YW1wbGUgc2Vzc2lvbiBmb3IgbW91c2UtaW5wdXQ6IG1vdXNlZG93biAtPiBtb3VzZW1vdmUgLT4gbW91c2V1cFxuICpcbiAqIE9uIGVhY2ggcmVjb2duaXppbmcgY3ljbGUgKHNlZSBNYW5hZ2VyLnJlY29nbml6ZSkgdGhlIC5yZWNvZ25pemUoKSBtZXRob2QgaXMgZXhlY3V0ZWRcbiAqIHdoaWNoIGRldGVybWluZXMgd2l0aCBzdGF0ZSBpdCBzaG91bGQgYmUuXG4gKlxuICogSWYgdGhlIHJlY29nbml6ZXIgaGFzIHRoZSBzdGF0ZSBGQUlMRUQsIENBTkNFTExFRCBvciBSRUNPR05JWkVEIChlcXVhbHMgRU5ERUQpLCBpdCBpcyByZXNldCB0b1xuICogUE9TU0lCTEUgdG8gZ2l2ZSBpdCBhbm90aGVyIGNoYW5nZSBvbiB0aGUgbmV4dCBjeWNsZS5cbiAqXG4gKiAgICAgICAgICAgICAgIFBvc3NpYmxlXG4gKiAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgKy0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgKy0tLS0tKy0tLS0tKyAgICAgICAgICAgICAgIHxcbiAqICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHxcbiAqICAgRmFpbGVkICAgICAgQ2FuY2VsbGVkICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgUmVjb2duaXplZCAgICAgICBCZWdhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kZWQvUmVjb2duaXplZFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXJcbiAqIEV2ZXJ5IHJlY29nbml6ZXIgbmVlZHMgdG8gZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuXG52YXIgUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7XG4gICAgICBlbmFibGU6IHRydWVcbiAgICB9LCBvcHRpb25zKTtcbiAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsOyAvLyBkZWZhdWx0IGlzIGVuYWJsZSB0cnVlXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgdGhpcy5zaW11bHRhbmVvdXMgPSB7fTtcbiAgICB0aGlzLnJlcXVpcmVGYWlsID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG5cbiAgICB0aGlzLm1hbmFnZXIgJiYgdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiByZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzaW11bHRhbmVvdXMgPSB0aGlzLnNpbXVsdGFuZW91cztcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoIXNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdKSB7XG4gICAgICBzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSA9IG90aGVyUmVjb2duaXplcjtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZWNvZ25pemVXaXRoKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgc2ltdWx0YW5lb3VzIGxpbmsuIGl0IGRvZXNudCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gZHJvcFJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICBkZWxldGUgdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZXIgY2FuIG9ubHkgcnVuIHdoZW4gYW4gb3RoZXIgaXMgZmFpbGluZ1xuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIHJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgcmVxdWlyZUZhaWx1cmUgbGluay4gaXQgZG9lcyBub3QgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiBkcm9wUmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgdmFyIGluZGV4ID0gaW5BcnJheSh0aGlzLnJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhcyByZXF1aXJlIGZhaWx1cmVzIGJvb2xlYW5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmhhc1JlcXVpcmVGYWlsdXJlcyA9IGZ1bmN0aW9uIGhhc1JlcXVpcmVGYWlsdXJlcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaWYgdGhlIHJlY29nbml6ZXIgY2FuIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5SZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gY2FuUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gISF0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogWW91IHNob3VsZCB1c2UgYHRyeUVtaXRgIGluc3RlYWQgb2YgYGVtaXRgIGRpcmVjdGx5IHRvIGNoZWNrXG4gICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgc2VsZi5tYW5hZ2VyLmVtaXQoZXZlbnQsIGlucHV0KTtcbiAgICB9IC8vICdwYW5zdGFydCcgYW5kICdwYW5tb3ZlJ1xuXG5cbiAgICBpZiAoc3RhdGUgPCBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cblxuICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgaWYgKGlucHV0LmFkZGl0aW9uYWxFdmVudCkge1xuICAgICAgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgfSAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuXG5cbiAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAqIGlmIHRydWUsIGl0IGVtaXRzIGEgZ2VzdHVyZSBldmVudCxcbiAgICogb3RoZXJ3aXNlLCBzZXR1cCB0aGUgc3RhdGUgdG8gRkFJTEVELlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8udHJ5RW1pdCA9IGZ1bmN0aW9uIHRyeUVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgIH0gLy8gaXQncyBmYWlsaW5nIGFueXdheVxuXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FuIHdlIGVtaXQ/XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5FbWl0ID0gZnVuY3Rpb24gY2FuRW1pdCgpIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoKSB7XG4gICAgICBpZiAoISh0aGlzLnJlcXVpcmVGYWlsW2ldLnN0YXRlICYgKFNUQVRFX0ZBSUxFRCB8IFNUQVRFX1BPU1NJQkxFKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAvLyBzbyB3ZSBjYW4gY2hhbmdlIHRoZSBpbnB1dERhdGEgd2l0aG91dCBtZXNzaW5nIHVwIHRoZSBvdGhlciByZWNvZ25pemVyc1xuICAgIHZhciBpbnB1dERhdGFDbG9uZSA9IGFzc2lnbiQxKHt9LCBpbnB1dERhdGEpOyAvLyBpcyBpcyBlbmFibGVkIGFuZCBhbGxvdyByZWNvZ25pemluZz9cblxuICAgIGlmICghYm9vbE9yRm4odGhpcy5vcHRpb25zLmVuYWJsZSwgW3RoaXMsIGlucHV0RGF0YUNsb25lXSkpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyByZXNldCB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZFxuXG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9SRUNPR05JWkVEIHwgU1RBVEVfQ0FOQ0VMTEVEIHwgU1RBVEVfRkFJTEVEKSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpOyAvLyB0aGUgcmVjb2duaXplciBoYXMgcmVjb2duaXplZCBhIGdlc3R1cmVcbiAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCB8IFNUQVRFX0NBTkNFTExFRCkpIHtcbiAgICAgIHRoaXMudHJ5RW1pdChpbnB1dERhdGFDbG9uZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgcmVjb2duaXplclxuICAgKiB0aGUgYWN0dWFsIHJlY29nbml6aW5nIGhhcHBlbnMgaW4gdGhpcyBtZXRob2RcbiAgICogQHZpcnR1YWxcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKiBAcmV0dXJucyB7Y29uc3RhbnR9IFNUQVRFXG4gICAqL1xuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dERhdGEpIHt9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHByZWZlcnJlZCB0b3VjaC1hY3Rpb25cbiAgICogQHZpcnR1YWxcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cblxuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsZWQgd2hlbiB0aGUgZ2VzdHVyZSBpc24ndCBhbGxvd2VkIHRvIHJlY29nbml6ZVxuICAgKiBsaWtlIHdoZW4gYW5vdGhlciBpcyBiZWluZyByZWNvZ25pemVkIG9yIGl0IGlzIGRpc2FibGVkXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7fTtcblxuICByZXR1cm4gUmVjb2duaXplcjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQSB0YXAgaXMgcmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvaW5nIGEgc21hbGwgdGFwL2NsaWNrLiBNdWx0aXBsZSB0YXBzIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgb2NjdXJcbiAqIGJldHdlZW4gdGhlIGdpdmVuIGludGVydmFsIGFuZCBwb3NpdGlvbi4gVGhlIGRlbGF5IG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvZ25pemUgbXVsdGktdGFwcyB3aXRob3V0IGZpcmluZ1xuICogYSBzaW5nbGUgdGFwLlxuICpcbiAqIFRoZSBldmVudERhdGEgZnJvbSB0aGUgZW1pdHRlZCBldmVudCBjb250YWlucyB0aGUgcHJvcGVydHkgYHRhcENvdW50YCwgd2hpY2ggY29udGFpbnMgdGhlIGFtb3VudCBvZlxuICogbXVsdGktdGFwcyBiZWluZyByZWNvZ25pemVkLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFRhcFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFRhcFJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBUYXBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAndGFwJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGFwczogMSxcbiAgICAgIGludGVydmFsOiAzMDAsXG4gICAgICAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgdGltZTogMjUwLFxuICAgICAgLy8gbWF4IHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgZG93biAobGlrZSBmaW5nZXIgb24gdGhlIHNjcmVlbilcbiAgICAgIHRocmVzaG9sZDogOSxcbiAgICAgIC8vIGEgbWluaW1hbCBtb3ZlbWVudCBpcyBvaywgYnV0IGtlZXAgaXQgbG93XG4gICAgICBwb3NUaHJlc2hvbGQ6IDEwXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7IC8vIHByZXZpb3VzIHRpbWUgYW5kIGNlbnRlcixcbiAgICAvLyB1c2VkIGZvciB0YXAgY291bnRpbmdcblxuICAgIF90aGlzLnBUaW1lID0gZmFsc2U7XG4gICAgX3RoaXMucENlbnRlciA9IGZhbHNlO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICBfdGhpcy5jb3VudCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRhcFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTl07XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiB0aGlzLmNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgIH0gLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cblxuICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsaWRJbnRlcnZhbCA9IHRoaXMucFRpbWUgPyBpbnB1dC50aW1lU3RhbXAgLSB0aGlzLnBUaW1lIDwgb3B0aW9ucy5pbnRlcnZhbCA6IHRydWU7XG4gICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG4gICAgICB0aGlzLnBUaW1lID0gaW5wdXQudGltZVN0YW1wO1xuICAgICAgdGhpcy5wQ2VudGVyID0gaW5wdXQuY2VudGVyO1xuXG4gICAgICBpZiAoIXZhbGlkTXVsdGlUYXAgfHwgIXZhbGlkSW50ZXJ2YWwpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG5cbiAgICAgIHZhciB0YXBDb3VudCA9IHRoaXMuY291bnQgJSBvcHRpb25zLnRhcHM7XG5cbiAgICAgIGlmICh0YXBDb3VudCA9PT0gMCkge1xuICAgICAgICAvLyBubyBmYWlsaW5nIHJlcXVpcmVtZW50cywgaW1tZWRpYXRlbHkgdHJpZ2dlciB0aGUgdGFwIGV2ZW50XG4gICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZUZhaWx1cmVzKCkpIHtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgICAgICB9LCBvcHRpb25zLmludGVydmFsKTtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5mYWlsVGltZW91dCA9IGZ1bmN0aW9uIGZhaWxUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHRoaXMuX2lucHV0LnRhcENvdW50ID0gdGhpcy5jb3VudDtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVGFwUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBBdHRyUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoQXR0clJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBBdHRyUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBBdHRyUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgcmV0dXJuIG9wdGlvblBvaW50ZXJzID09PSAwIHx8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9uUG9pbnRlcnM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHZhciBldmVudFR5cGUgPSBpbnB1dC5ldmVudFR5cGU7XG4gICAgdmFyIGlzUmVjb2duaXplZCA9IHN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCk7XG4gICAgdmFyIGlzVmFsaWQgPSB0aGlzLmF0dHJUZXN0KGlucHV0KTsgLy8gb24gY2FuY2VsIGlucHV0IGFuZCB3ZSd2ZSByZWNvZ25pemVkIGJlZm9yZSwgcmV0dXJuIFNUQVRFX0NBTkNFTExFRFxuXG4gICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgIH0gZWxzZSBpZiAoaXNSZWNvZ25pemVkIHx8IGlzVmFsaWQpIHtcbiAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgcmV0dXJuIEF0dHJSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge2NvbnN0YW50fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZGlyZWN0aW9uU3RyKGRpcmVjdGlvbikge1xuICBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fRE9XTikge1xuICAgIHJldHVybiAnZG93bic7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fVVApIHtcbiAgICByZXR1cm4gJ3VwJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgcmV0dXJuICdsZWZ0JztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9SSUdIVCkge1xuICAgIHJldHVybiAncmlnaHQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQYW5cbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGFuZCBtb3ZlZCBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBhblJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQYW5SZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBhblJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLnBYID0gbnVsbDtcbiAgICBfdGhpcy5wWSA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBhblJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciBhY3Rpb25zID0gW107XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9O1xuXG4gIF9wcm90by5kaXJlY3Rpb25UZXN0ID0gZnVuY3Rpb24gZGlyZWN0aW9uVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBoYXNNb3ZlZCA9IHRydWU7XG4gICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0LmRpcmVjdGlvbjtcbiAgICB2YXIgeCA9IGlucHV0LmRlbHRhWDtcbiAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTsgLy8gbG9jayB0byBheGlzP1xuXG4gICAgaWYgKCEoZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb24pKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICBkaXJlY3Rpb24gPSB4ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgICAgICBoYXNNb3ZlZCA9IHggIT09IHRoaXMucFg7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFYKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHkgPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG4gICAgICAgIGhhc01vdmVkID0geSAhPT0gdGhpcy5wWTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gaGFzTW92ZWQgJiYgZGlzdGFuY2UgPiBvcHRpb25zLnRocmVzaG9sZCAmJiBkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBBdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKCAvLyByZXBsYWNlIHdpdGggYSBzdXBlciBjYWxsXG4gICAgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOIHx8ICEodGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKSAmJiB0aGlzLmRpcmVjdGlvblRlc3QoaW5wdXQpKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgIHRoaXMucFkgPSBpbnB1dC5kZWx0YVk7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5kaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGFuUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTd2lwZVxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIG1vdmluZyBmYXN0ICh2ZWxvY2l0eSksIHdpdGggZW5vdWdoIGRpc3RhbmNlIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgU3dpcGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpcGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFN3aXBlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICB2ZWxvY2l0eTogMC4zLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpcGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciB2ZWxvY2l0eTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiAoRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiBkaXJlY3Rpb24gJiBpbnB1dC5vZmZzZXREaXJlY3Rpb24gJiYgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmIGlucHV0Lm1heFBvaW50ZXJzID09PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiYgYWJzKHZlbG9jaXR5KSA+IHRoaXMub3B0aW9ucy52ZWxvY2l0eSAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQ7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5vZmZzZXREaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uLCBpbnB1dCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXBlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQaW5jaFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQaW5jaFJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGluY2hSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGluY2gnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQaW5jaFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnNjYWxlIC0gMSkgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBpbmNoUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFJvdGF0ZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShSb3RhdGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdyb3RhdGUnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSb3RhdGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5yb3RhdGlvbikgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgcmV0dXJuIFJvdGF0ZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUHJlc3NcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGZvciB4IG1zIHdpdGhvdXQgYW55IG1vdmVtZW50LlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFByZXNzUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUHJlc3NSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUHJlc3NSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0aW1lOiAyNTEsXG4gICAgICAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgdGhyZXNob2xkOiA5XG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQcmVzc1JlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX0FVVE9dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cbiAgICBpZiAoIXZhbGlkTW92ZW1lbnQgfHwgIXZhbGlkUG9pbnRlcnMgfHwgaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgIH0sIG9wdGlvbnMudGltZSk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpbnB1dCAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIFwidXBcIiwgaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUHJlc3NSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IGlmIERPTSBldmVudHMgYXJlIGJlaW5nIHRyaWdnZXJlZC5cbiAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkb21FdmVudHM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICogV2hlbiBzZXQgdG8gYGNvbXB1dGVgIGl0IHdpbGwgbWFnaWNhbGx5IHNldCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgYWRkZWQgcmVjb2duaXplcnMuXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICovXG4gIHRvdWNoQWN0aW9uOiBUT1VDSF9BQ1RJT05fQ09NUFVURSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGVuYWJsZTogdHJ1ZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgKiBDaGFuZ2UgdGhlIHBhcmVudCBpbnB1dCB0YXJnZXQgZWxlbWVudC5cbiAgICogSWYgTnVsbCwgdGhlbiBpdCBpcyBiZWluZyBzZXQgdGhlIHRvIG1haW4gZWxlbWVudC5cbiAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBmb3JjZSBhbiBpbnB1dCBjbGFzc1xuICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRDbGFzczogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICogQWRkIHRoZW0gdG8gdGhpcyBtZXRob2QgYW5kIHRoZXkgd2lsbCBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyLlxuICAgKiBAbmFtZXNwYWNlXG4gICAqL1xuICBjc3NQcm9wczoge1xuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGV4dCBzZWxlY3Rpb24gdG8gaW1wcm92ZSB0aGUgZHJhZ2dpbmcgZ2VzdHVyZS4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlclNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGUgdGhlIFdpbmRvd3MgUGhvbmUgZ3JpcHBlcnMgd2hlbiBwcmVzc2luZyBhbiBlbGVtZW50LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAqIE9uIGlPUywgd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQgc3VjaCBhcyBhIGxpbmssIFNhZmFyaSBkaXNwbGF5c1xuICAgICAqIGEgY2FsbG91dCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rLiBUaGlzIHByb3BlcnR5IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGF0IGNhbGxvdXQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaENhbGxvdXQ6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB6b29taW5nIGlzIGVuYWJsZWQuIFVzZWQgYnkgSUUxMD5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIGNvbnRlbnRab29taW5nOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlckRyYWc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBPdmVycmlkZXMgdGhlIGhpZ2hsaWdodCBjb2xvciBzaG93biB3aGVuIHRoZSB1c2VyIHRhcHMgYSBsaW5rIG9yIGEgSmF2YVNjcmlwdFxuICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdyZ2JhKDAsMCwwLDApJ1xuICAgICAqL1xuICAgIHRhcEhpZ2hsaWdodENvbG9yOiBcInJnYmEoMCwwLDAsMClcIlxuICB9XG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogRGVmYXVsdCByZWNvZ25pemVyIHNldHVwIHdoZW4gY2FsbGluZyBgSGFtbWVyKClgXG4gKiBXaGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIgdGhlc2Ugd2lsbCBiZSBza2lwcGVkLlxuICogVGhpcyBpcyBzZXBhcmF0ZWQgd2l0aCBvdGhlciBkZWZhdWx0cyBiZWNhdXNlIG9mIHRyZWUtc2hha2luZy5cbiAqIEB0eXBlIHtBcnJheX1cbiAqL1xuXG52YXIgcHJlc2V0ID0gW1tSb3RhdGVSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn1dLCBbUGluY2hSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn0sIFsncm90YXRlJ11dLCBbU3dpcGVSZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn1dLCBbUGFuUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59LCBbJ3N3aXBlJ11dLCBbVGFwUmVjb2duaXplcl0sIFtUYXBSZWNvZ25pemVyLCB7XG4gIGV2ZW50OiAnZG91YmxldGFwJyxcbiAgdGFwczogMlxufSwgWyd0YXAnXV0sIFtQcmVzc1JlY29nbml6ZXJdXTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZC9yZW1vdmUgdGhlIGNzcyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gbWFuYWdlci5vcHRpb25zLmNzc1Byb3BzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWRkXG4gKi9cblxuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gIHZhciBlbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gIGlmICghZWxlbWVudC5zdHlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcm9wO1xuICBlYWNoKG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wcywgZnVuY3Rpb24gKHZhbHVlLCBuYW1lKSB7XG4gICAgcHJvcCA9IHByZWZpeGVkKGVsZW1lbnQuc3R5bGUsIG5hbWUpO1xuXG4gICAgaWYgKGFkZCkge1xuICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdIHx8IFwiXCI7XG4gICAgfVxuICB9KTtcblxuICBpZiAoIWFkZCkge1xuICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSkge1xuICB2YXIgZ2VzdHVyZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgZ2VzdHVyZUV2ZW50LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgZGF0YS50YXJnZXQuZGlzcGF0Y2hFdmVudChnZXN0dXJlRXZlbnQpO1xufVxuLyoqXG4qIEBwcml2YXRlXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG5cbnZhciBNYW5hZ2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMub3B0aW9ucyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMucmVjb2duaXplcnMgPSBbXTtcbiAgICB0aGlzLm9sZENzc1Byb3BzID0ge307XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmlucHV0ID0gY3JlYXRlSW5wdXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnRvdWNoQWN0aW9uID0gbmV3IFRvdWNoQWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG4gICAgZWFjaCh0aGlzLm9wdGlvbnMucmVjb2duaXplcnMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgcmVjb2duaXplciA9IF90aGlzLmFkZChuZXcgaXRlbVswXShpdGVtWzFdKSk7XG5cbiAgICAgIGl0ZW1bMl0gJiYgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKGl0ZW1bMl0pO1xuICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gT3B0aW9ucyB0aGF0IG5lZWQgYSBsaXR0bGUgbW9yZSBzZXR1cFxuXG4gICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc3RvcCByZWNvZ25pemluZyBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBUaGlzIHNlc3Npb24gd2lsbCBiZSBkaXNjYXJkZWQsIHdoZW4gYSBuZXcgW2lucHV0XXN0YXJ0IGV2ZW50IGlzIGZpcmVkLlxuICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VdXG4gICAqL1xuXG5cbiAgX3Byb3RvLnN0b3AgPSBmdW5jdGlvbiBzdG9wKGZvcmNlKSB7XG4gICAgdGhpcy5zZXNzaW9uLnN0b3BwZWQgPSBmb3JjZSA/IEZPUkNFRF9TVE9QIDogU1RPUDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJ1biB0aGUgcmVjb2duaXplcnMhXG4gICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICogaXQgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHJlY29nbml6ZXJzIGFuZCB0cmllcyB0byBkZXRlY3QgdGhlIGdlc3R1cmUgdGhhdCBpcyBiZWluZyBtYWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuXG4gICAgaWYgKHNlc3Npb24uc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcnVuIHRoZSB0b3VjaC1hY3Rpb24gcG9seWZpbGxcblxuXG4gICAgdGhpcy50b3VjaEFjdGlvbi5wcmV2ZW50RGVmYXVsdHMoaW5wdXREYXRhKTtcbiAgICB2YXIgcmVjb2duaXplcjtcbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzOyAvLyB0aGlzIGhvbGRzIHRoZSByZWNvZ25pemVyIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAvLyBzbyB0aGUgcmVjb2duaXplcidzIHN0YXRlIG5lZWRzIHRvIGJlIEJFR0FOLCBDSEFOR0VELCBFTkRFRCBvciBSRUNPR05JWkVEXG4gICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuXG4gICAgdmFyIGN1clJlY29nbml6ZXIgPSBzZXNzaW9uLmN1clJlY29nbml6ZXI7IC8vIHJlc2V0IHdoZW4gdGhlIGxhc3QgcmVjb2duaXplciBpcyByZWNvZ25pemVkXG4gICAgLy8gb3Igd2hlbiB3ZSdyZSBpbiBhIG5ldyBzZXNzaW9uXG5cbiAgICBpZiAoIWN1clJlY29nbml6ZXIgfHwgY3VyUmVjb2duaXplciAmJiBjdXJSZWNvZ25pemVyLnN0YXRlICYgU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICAgIGN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07IC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG5cbiAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQgIT09IEZPUkNFRF9TVE9QICYmICggLy8gMVxuICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PT0gY3VyUmVjb2duaXplciB8fCAvLyAyXG4gICAgICByZWNvZ25pemVyLmNhblJlY29nbml6ZVdpdGgoY3VyUmVjb2duaXplcikpKSB7XG4gICAgICAgIC8vIDNcbiAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29nbml6ZXIucmVzZXQoKTtcbiAgICAgIH0gLy8gaWYgdGhlIHJlY29nbml6ZXIgaGFzIGJlZW4gcmVjb2duaXppbmcgdGhlIGlucHV0IGFzIGEgdmFsaWQgZ2VzdHVyZSwgd2Ugd2FudCB0byBzdG9yZSB0aGlzIG9uZSBhcyB0aGVcbiAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIHJlY29nbml6ZXIuIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgcmVjb2duaXplclxuXG5cbiAgICAgIGlmICghY3VyUmVjb2duaXplciAmJiByZWNvZ25pemVyLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEKSkge1xuICAgICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgICBjdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGdldCBhIHJlY29nbml6ZXIgYnkgaXRzIGV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TnVsbH1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHJlY29nbml6ZXIpIHtcbiAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgIH1cblxuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVjb2duaXplcnNbaV0ub3B0aW9ucy5ldmVudCA9PT0gcmVjb2duaXplcikge1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcnNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBhZGQgYSByZWNvZ25pemVyIHRvIHRoZSBtYW5hZ2VyXG4gICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE1hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwiYWRkXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IC8vIHJlbW92ZSBleGlzdGluZ1xuXG5cbiAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLnJlbW92ZShleGlzdGluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWNvZ25pemVycy5wdXNoKHJlY29nbml6ZXIpO1xuICAgIHJlY29nbml6ZXIubWFuYWdlciA9IHRoaXM7XG4gICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlbW92ZSBhIHJlY29nbml6ZXIgYnkgbmFtZSBvciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcInJlbW92ZVwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTsgLy8gbGV0J3MgbWFrZSBzdXJlIHRoaXMgcmVjb2duaXplciBleGlzdHNcblxuICAgIGlmIChyZWNvZ25pemVyKSB7XG4gICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuICAgICAgdmFyIGluZGV4ID0gaW5BcnJheShyZWNvZ25pemVycywgdGFyZ2V0UmVjb2duaXplcik7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgZXZlbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub24gPSBmdW5jdGlvbiBvbihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQgfHwgaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICBoYW5kbGVyc1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2hhbmRsZXJdXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub2ZmID0gZnVuY3Rpb24gb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVyc1tldmVudF0gJiYgaGFuZGxlcnNbZXZlbnRdLnNwbGljZShpbkFycmF5KGhhbmRsZXJzW2V2ZW50XSwgaGFuZGxlciksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgZGF0YSkge1xuICAgIC8vIHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGRvbSBldmVudHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmRvbUV2ZW50cykge1xuICAgICAgdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKTtcbiAgICB9IC8vIG5vIGhhbmRsZXJzLCBzbyBza2lwIGl0IGFsbFxuXG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50XSAmJiB0aGlzLmhhbmRsZXJzW2V2ZW50XS5zbGljZSgpO1xuXG4gICAgaWYgKCFoYW5kbGVycyB8fCAhaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGF0YS50eXBlID0gZXZlbnQ7XG5cbiAgICBkYXRhLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGF0YS5zcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgaGFuZGxlcnNbaV0oZGF0YSk7XG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZGVzdHJveSB0aGUgbWFuYWdlciBhbmQgdW5iaW5kcyBhbGwgZXZlbnRzXG4gICAqIGl0IGRvZXNuJ3QgdW5iaW5kIGRvbSBldmVudHMsIHRoYXQgaXMgdGhlIHVzZXIgb3duIHJlc3BvbnNpYmlsaXR5XG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZWxlbWVudCAmJiB0b2dnbGVDc3NQcm9wcyh0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIE1hbmFnZXI7XG59KCk7XG5cbnZhciBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBTaW5nbGVUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU2luZ2xlVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBTaW5nbGVUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07IC8vIHNob3VsZCB3ZSBoYW5kbGUgdGhlIHRvdWNoIGV2ZW50cz9cblxuICAgIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3VjaGVzID0gbm9ybWFsaXplU2luZ2xlVG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTsgLy8gd2hlbiBkb25lLCByZXNldCB0aGUgc3RhcnRlZCBzdGF0ZVxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBTaW5nbGVUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIGFsbCA9IHVuaXF1ZUFycmF5KGFsbC5jb25jYXQoY2hhbmdlZCksICdpZGVudGlmaWVyJywgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdyYXAgYSBtZXRob2Qgd2l0aCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIHN0YWNrIHRyYWNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB3cmFwcGluZyB0aGUgc3VwcGxpZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBkZXByZWNhdGUobWV0aG9kLCBuYW1lLCBtZXNzYWdlKSB7XG4gIHZhciBkZXByZWNhdGlvbk1lc3NhZ2UgPSBcIkRFUFJFQ0FURUQgTUVUSE9EOiBcIiArIG5hbWUgKyBcIlxcblwiICsgbWVzc2FnZSArIFwiIEFUIFxcblwiO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICB2YXIgc3RhY2sgPSBlICYmIGUuc3RhY2sgPyBlLnN0YWNrLnJlcGxhY2UoL15bXlxcKF0rP1tcXG4kXS9nbSwgJycpLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJykucmVwbGFjZSgvXk9iamVjdC48YW5vbnltb3VzPlxccypcXCgvZ20sICd7YW5vbnltb3VzfSgpQCcpIDogJ1Vua25vd24gU3RhY2sgVHJhY2UnO1xuICAgIHZhciBsb2cgPSB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUud2FybiB8fCB3aW5kb3cuY29uc29sZS5sb2cpO1xuXG4gICAgaWYgKGxvZykge1xuICAgICAgbG9nLmNhbGwod2luZG93LmNvbnNvbGUsIGRlcHJlY2F0aW9uTWVzc2FnZSwgc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBleHRlbmQgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYywgbWVyZ2UpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBrZXlzLmxlbmd0aCkge1xuICAgIGlmICghbWVyZ2UgfHwgbWVyZ2UgJiYgZGVzdFtrZXlzW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXN0W2tleXNbaV1dID0gc3JjW2tleXNbaV1dO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufSwgJ2V4dGVuZCcsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgbWVyZ2UgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYykge1xuICByZXR1cm4gZXh0ZW5kKGRlc3QsIHNyYywgdHJ1ZSk7XG59LCAnbWVyZ2UnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgY2xhc3MgaW5oZXJpdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBiYXNlXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdChjaGlsZCwgYmFzZSwgcHJvcGVydGllcykge1xuICB2YXIgYmFzZVAgPSBiYXNlLnByb3RvdHlwZTtcbiAgdmFyIGNoaWxkUDtcbiAgY2hpbGRQID0gY2hpbGQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShiYXNlUCk7XG4gIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICBjaGlsZFAuX3N1cGVyID0gYmFzZVA7XG5cbiAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICBhc3NpZ24kMShjaGlsZFAsIHByb3BlcnRpZXMpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBmdW5jdGlvbiBiaW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gYmluZEZuKGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIEhhbW1lciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBIYW1tZXIgPVxuICAvKipcbiAgICAqIEBwcml2YXRlXG4gICAgKiBAY29uc3Qge3N0cmluZ31cbiAgICAqL1xuICBmdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hbmFnZXIoZWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgcmVjb2duaXplcnM6IHByZXNldC5jb25jYXQoKVxuICAgIH0sIG9wdGlvbnMpKTtcbiAgfTtcblxuICBIYW1tZXIuVkVSU0lPTiA9IFwiMi4wLjE3LXJjXCI7XG4gIEhhbW1lci5ESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0FMTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5ESVJFQ1RJT05fTEVGVCA9IERJUkVDVElPTl9MRUZUO1xuICBIYW1tZXIuRElSRUNUSU9OX1JJR0hUID0gRElSRUNUSU9OX1JJR0hUO1xuICBIYW1tZXIuRElSRUNUSU9OX1VQID0gRElSRUNUSU9OX1VQO1xuICBIYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9WRVJUSUNBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9OT05FID0gRElSRUNUSU9OX05PTkU7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuSU5QVVRfU1RBUlQgPSBJTlBVVF9TVEFSVDtcbiAgSGFtbWVyLklOUFVUX01PVkUgPSBJTlBVVF9NT1ZFO1xuICBIYW1tZXIuSU5QVVRfRU5EID0gSU5QVVRfRU5EO1xuICBIYW1tZXIuSU5QVVRfQ0FOQ0VMID0gSU5QVVRfQ0FOQ0VMO1xuICBIYW1tZXIuU1RBVEVfUE9TU0lCTEUgPSBTVEFURV9QT1NTSUJMRTtcbiAgSGFtbWVyLlNUQVRFX0JFR0FOID0gU1RBVEVfQkVHQU47XG4gIEhhbW1lci5TVEFURV9DSEFOR0VEID0gU1RBVEVfQ0hBTkdFRDtcbiAgSGFtbWVyLlNUQVRFX0VOREVEID0gU1RBVEVfRU5ERUQ7XG4gIEhhbW1lci5TVEFURV9SRUNPR05JWkVEID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgSGFtbWVyLlNUQVRFX0NBTkNFTExFRCA9IFNUQVRFX0NBTkNFTExFRDtcbiAgSGFtbWVyLlNUQVRFX0ZBSUxFRCA9IFNUQVRFX0ZBSUxFRDtcbiAgSGFtbWVyLk1hbmFnZXIgPSBNYW5hZ2VyO1xuICBIYW1tZXIuSW5wdXQgPSBJbnB1dDtcbiAgSGFtbWVyLlRvdWNoQWN0aW9uID0gVG91Y2hBY3Rpb247XG4gIEhhbW1lci5Ub3VjaElucHV0ID0gVG91Y2hJbnB1dDtcbiAgSGFtbWVyLk1vdXNlSW5wdXQgPSBNb3VzZUlucHV0O1xuICBIYW1tZXIuUG9pbnRlckV2ZW50SW5wdXQgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgSGFtbWVyLlRvdWNoTW91c2VJbnB1dCA9IFRvdWNoTW91c2VJbnB1dDtcbiAgSGFtbWVyLlNpbmdsZVRvdWNoSW5wdXQgPSBTaW5nbGVUb3VjaElucHV0O1xuICBIYW1tZXIuUmVjb2duaXplciA9IFJlY29nbml6ZXI7XG4gIEhhbW1lci5BdHRyUmVjb2duaXplciA9IEF0dHJSZWNvZ25pemVyO1xuICBIYW1tZXIuVGFwID0gVGFwUmVjb2duaXplcjtcbiAgSGFtbWVyLlBhbiA9IFBhblJlY29nbml6ZXI7XG4gIEhhbW1lci5Td2lwZSA9IFN3aXBlUmVjb2duaXplcjtcbiAgSGFtbWVyLlBpbmNoID0gUGluY2hSZWNvZ25pemVyO1xuICBIYW1tZXIuUm90YXRlID0gUm90YXRlUmVjb2duaXplcjtcbiAgSGFtbWVyLlByZXNzID0gUHJlc3NSZWNvZ25pemVyO1xuICBIYW1tZXIub24gPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLm9mZiA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZWFjaCA9IGVhY2g7XG4gIEhhbW1lci5tZXJnZSA9IG1lcmdlO1xuICBIYW1tZXIuZXh0ZW5kID0gZXh0ZW5kO1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIuYXNzaWduID0gYXNzaWduJDE7XG4gIEhhbW1lci5pbmhlcml0ID0gaW5oZXJpdDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLnByZWZpeGVkID0gcHJlZml4ZWQ7XG4gIEhhbW1lci50b0FycmF5ID0gdG9BcnJheTtcbiAgSGFtbWVyLmluQXJyYXkgPSBpbkFycmF5O1xuICBIYW1tZXIudW5pcXVlQXJyYXkgPSB1bmlxdWVBcnJheTtcbiAgSGFtbWVyLnNwbGl0U3RyID0gc3BsaXRTdHI7XG4gIEhhbW1lci5ib29sT3JGbiA9IGJvb2xPckZuO1xuICBIYW1tZXIuaGFzUGFyZW50ID0gaGFzUGFyZW50O1xuICBIYW1tZXIuYWRkRXZlbnRMaXN0ZW5lcnMgPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLnJlbW92ZUV2ZW50TGlzdGVuZXJzID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5kZWZhdWx0cyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywge1xuICAgIHByZXNldDogcHJlc2V0XG4gIH0pO1xuICByZXR1cm4gSGFtbWVyO1xufSgpO1xuXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cblxudmFyIGRlZmF1bHRzJDEgPSBIYW1tZXIuZGVmYXVsdHM7XG5cbmV4cG9ydCBkZWZhdWx0IEhhbW1lcjtcbmV4cG9ydCB7IElOUFVUX1NUQVJULCBJTlBVVF9NT1ZFLCBJTlBVVF9FTkQsIElOUFVUX0NBTkNFTCwgU1RBVEVfUE9TU0lCTEUsIFNUQVRFX0JFR0FOLCBTVEFURV9DSEFOR0VELCBTVEFURV9FTkRFRCwgU1RBVEVfUkVDT0dOSVpFRCwgU1RBVEVfQ0FOQ0VMTEVELCBTVEFURV9GQUlMRUQsIERJUkVDVElPTl9OT05FLCBESVJFQ1RJT05fTEVGVCwgRElSRUNUSU9OX1JJR0hULCBESVJFQ1RJT05fVVAsIERJUkVDVElPTl9ET1dOLCBESVJFQ1RJT05fSE9SSVpPTlRBTCwgRElSRUNUSU9OX1ZFUlRJQ0FMLCBESVJFQ1RJT05fQUxMLCBNYW5hZ2VyLCBJbnB1dCwgVG91Y2hBY3Rpb24sIFRvdWNoSW5wdXQsIE1vdXNlSW5wdXQsIFBvaW50ZXJFdmVudElucHV0LCBUb3VjaE1vdXNlSW5wdXQsIFNpbmdsZVRvdWNoSW5wdXQsIFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCBUYXBSZWNvZ25pemVyIGFzIFRhcCwgUGFuUmVjb2duaXplciBhcyBQYW4sIFN3aXBlUmVjb2duaXplciBhcyBTd2lwZSwgUGluY2hSZWNvZ25pemVyIGFzIFBpbmNoLCBSb3RhdGVSZWNvZ25pemVyIGFzIFJvdGF0ZSwgUHJlc3NSZWNvZ25pemVyIGFzIFByZXNzLCBhZGRFdmVudExpc3RlbmVycyBhcyBvbiwgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMgYXMgb2ZmLCBlYWNoLCBtZXJnZSwgZXh0ZW5kLCBhc3NpZ24kMSBhcyBhc3NpZ24sIGluaGVyaXQsIGJpbmRGbiwgcHJlZml4ZWQsIHRvQXJyYXksIGluQXJyYXksIHVuaXF1ZUFycmF5LCBzcGxpdFN0ciwgYm9vbE9yRm4sIGhhc1BhcmVudCwgYWRkRXZlbnRMaXN0ZW5lcnMsIHJlbW92ZUV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0cyQxIGFzIGRlZmF1bHRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW1tZXIuZXNtLmpzLm1hcFxuIiwgIi8qKlxuICogdmlzLXV0aWxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtdXRpbFxuICpcbiAqIHV0aWxpdGllIGNvbGxlY3Rpb24gZm9yIHZpc2pzXG4gKlxuICogQHZlcnNpb24gNS4wLjdcbiAqIEBkYXRlICAgIDIwMjMtMTEtMjBUMDk6MDY6NTEuMDY3WlxuICpcbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTEtMjAxNyBBbG1lbmRlIEIuViwgaHR0cDovL2FsbWVuZGUuY29tXG4gKiBAY29weXJpZ2h0IChjKSAyMDE3LTIwMTkgdmlzanMgY29udHJpYnV0b3JzLCBodHRwczovL2dpdGh1Yi5jb20vdmlzanNcbiAqXG4gKiBAbGljZW5zZVxuICogdmlzLmpzIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aFxuICpcbiAqICAgMS4gVGhlIEFwYWNoZSAyLjAgTGljZW5zZVxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgIGFuZFxuICpcbiAqICAgMi4gVGhlIE1JVCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiB2aXMuanMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGVpdGhlciBsaWNlbnNlLlxuICovXG5cbmltcG9ydCBFbWl0dGVyIGZyb20gJ2NvbXBvbmVudC1lbWl0dGVyJztcbmltcG9ydCBSZWFsSGFtbWVyIGZyb20gJ0BlZ2pzL2hhbW1lcmpzJztcblxuLyoqXHJcbiAqIFVzZSB0aGlzIHN5bWJvbCB0byBkZWxldGUgcHJvcGVyaWVzIGluIGRlZXBPYmplY3RBc3NpZ24uXHJcbiAqL1xyXG5jb25zdCBERUxFVEUgPSBTeW1ib2woXCJERUxFVEVcIik7XHJcbi8qKlxyXG4gKiBQdXJlIHZlcnNpb24gb2YgZGVlcE9iamVjdEFzc2lnbiwgaXQgZG9lc24ndCBtb2RpZnkgYW55IG9mIGl0J3MgYXJndW1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0gYmFzZSAtIFRoZSBiYXNlIG9iamVjdCB0aGF0IGZ1bGxmaWxzIHRoZSB3aG9sZSBpbnRlcmZhY2UgVC5cclxuICogQHBhcmFtIHVwZGF0ZXMgLSBVcGRhdGVzIHRoYXQgbWF5IGNoYW5nZSBvciBkZWxldGUgcHJvcHMuXHJcbiAqIEByZXR1cm5zIEEgYnJhbmQgbmV3IGluc3RhbmNlIHdpdGggYWxsIHRoZSBzdXBwbGllZCBvYmplY3RzIGRlZXBseSBtZXJnZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwdXJlRGVlcE9iamVjdEFzc2lnbihiYXNlLCAuLi51cGRhdGVzKSB7XHJcbiAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbih7fSwgYmFzZSwgLi4udXBkYXRlcyk7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ24oLi4udmFsdWVzKSB7XHJcbiAgICBjb25zdCBtZXJnZWQgPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKTtcclxuICAgIHN0cmlwRGVsZXRlKG1lcmdlZCk7XHJcbiAgICByZXR1cm4gbWVyZ2VkO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoaXMgZG9lc24ndCBzdHJpcCB0aGUgREVMRVRFIHN5bWJvbHMgc28gdGhleSBtYXkgZW5kIHVwIGluIHRoZSBmaW5hbCBvYmplY3QuXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKSB7XHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGRlZXBPYmplY3RBc3NpZ24odmFsdWVzWzBdLCB2YWx1ZXNbMV0pLCAuLi52YWx1ZXMuc2xpY2UoMikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYSA9IHZhbHVlc1swXTtcclxuICAgIGNvbnN0IGIgPSB2YWx1ZXNbMV07XHJcbiAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICBhLnNldFRpbWUoYi5nZXRUaW1lKCkpO1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIFJlZmxlY3Qub3duS2V5cyhiKSkge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGIsIHByb3ApKSA7XHJcbiAgICAgICAgZWxzZSBpZiAoYltwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYVtwcm9wXSkgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShhW3Byb3BdLCBiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBjbG9uZShiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBjbG9uZSBnaXZlbiBvYmplY3Qgb3IgYXJyYXkuIEluIGNhc2Ugb2YgcHJpbWl0aXZlIHNpbXBseSByZXR1cm4uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gQW55dGhpbmcuXHJcbiAqIEByZXR1cm5zIERlZXAgY2xvbmVkIG9iamVjdC9hcnJheSBvciB1bmNoYW5nZWQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGNsb25lKGEpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIGEubWFwKCh2YWx1ZSkgPT4gY2xvbmUodmFsdWUpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBhID09PSBcIm9iamVjdFwiICYmIGEgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGEuZ2V0VGltZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSh7fSwgYSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogU3RyaXAgREVMRVRFIGZyb20gZ2l2ZW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB3aGljaCBtYXkgY29udGFpbiBERUxFVEUgYnV0IHdvbid0IGFmdGVyIHRoaXMgaXMgZXhlY3V0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBzdHJpcERlbGV0ZShhKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoYSkpIHtcclxuICAgICAgICBpZiAoYVtwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJiBhW3Byb3BdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHN0cmlwRGVsZXRlKGFbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG4vKipcclxuICogU2VlZGFibGUsIGZhc3QgYW5kIHJlYXNvbmFibHkgZ29vZCAobm90IGNyeXB0byBidXQgbW9yZSB0aGFuIG9rYXkgZm9yIG91clxyXG4gKiBuZWVkcykgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIEFkYXB0ZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTEwNDI5MTAwNzM2L2h0dHA6Ly9iYWFnb2UuY29tOjgwL2VuL1JhbmRvbU11c2luZ3MvamF2YXNjcmlwdH0uXHJcbiAqIE9yaWdpbmFsIGFsZ29yaXRobSBjcmVhdGVkIGJ5IEpvaGFubmVzIEJhYWfDuGUgXFw8YmFhZ29lXFxAYmFhZ29lLmNvbVxcPiBpbiAyMDEwLlxyXG4gKi9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIGdlbmVyYXRvciBiYXNlZCBvbiBBbGVhIGJ5IEpvaGFubmVzIEJhYWfDuGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQWxsIHN1cHBsaWVkIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWQgYXMgYSBzZWVkLiBJbiBjYXNlIG5vdGhpbmdcclxuICogaXMgc3VwcGxpZWQgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYSguLi5zZWVkKSB7XHJcbiAgICByZXR1cm4gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQubGVuZ3RoID8gc2VlZCA6IFtEYXRlLm5vdygpXSk7XHJcbn1cclxuLyoqXHJcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFtbQWxlYV1dIHdpdGhvdXQgdXNlciBpbnB1dCB2YWxpZGF0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIFRoZSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkKSB7XHJcbiAgICBsZXQgW3MwLCBzMSwgczJdID0gbWFzaFNlZWQoc2VlZCk7XHJcbiAgICBsZXQgYyA9IDE7XHJcbiAgICBjb25zdCByYW5kb20gPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgICAgIHMwID0gczE7XHJcbiAgICAgICAgczEgPSBzMjtcclxuICAgICAgICByZXR1cm4gKHMyID0gdCAtIChjID0gdCB8IDApKTtcclxuICAgIH07XHJcbiAgICByYW5kb20udWludDMyID0gKCkgPT4gcmFuZG9tKCkgKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgcmFuZG9tLmZyYWN0NTMgPSAoKSA9PiByYW5kb20oKSArICgocmFuZG9tKCkgKiAweDIwMDAwMCkgfCAwKSAqIDEuMTEwMjIzMDI0NjI1MTU2NWUtMTY7IC8vIDJeLTUzXHJcbiAgICByYW5kb20uYWxnb3JpdGhtID0gXCJBbGVhXCI7XHJcbiAgICByYW5kb20uc2VlZCA9IHNlZWQ7XHJcbiAgICByYW5kb20udmVyc2lvbiA9IFwiMC45XCI7XHJcbiAgICByZXR1cm4gcmFuZG9tO1xyXG59XHJcbi8qKlxyXG4gKiBUdXJuIGFyYml0cmFyeSBkYXRhIGludG8gdmFsdWVzIFtbQWxlYUltcGxlbWVudGF0aW9uXV0gY2FuIHVzZSB0byBnZW5lcmF0ZVxyXG4gKiByYW5kb20gbnVtYmVycy5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBcmJpdHJhcnkgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgc2VlZC5cclxuICogQHJldHVybnMgVGhyZWUgbnVtYmVycyB0byB1c2UgYXMgaW5pdGlhbCB2YWx1ZXMgZm9yIFtbQWxlYUltcGxlbWVudGF0aW9uXV0uXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXNoU2VlZCguLi5zZWVkKSB7XHJcbiAgICBjb25zdCBtYXNoID0gTWFzaCgpO1xyXG4gICAgbGV0IHMwID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczEgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMiA9IG1hc2goXCIgXCIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgczAgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczAgPCAwKSB7XHJcbiAgICAgICAgICAgIHMwICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMxIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMxIDwgMCkge1xyXG4gICAgICAgICAgICBzMSArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMiAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMiA8IDApIHtcclxuICAgICAgICAgICAgczIgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW3MwLCBzMSwgczJdO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWFzaCBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMgQSBub25wdXJlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYXJiaXRyYXJ5IFtbTWFzaGFibGVdXSBkYXRhIGFuZCB0dXJuc1xyXG4gKiB0aGVtIGludG8gbnVtYmVycy5cclxuICovXHJcbmZ1bmN0aW9uIE1hc2goKSB7XHJcbiAgICBsZXQgbiA9IDB4ZWZjODI0OWQ7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICBjb25zdCBzdHJpbmcgPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbiArPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgbGV0IGggPSAwLjAyNTE5NjAzMjgyNDE2OTM4ICogbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgaCAqPSBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBuICs9IGggKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgIH07XHJcbn1cblxuLyoqXG4gKiBTZXR1cCBhIG1vY2sgaGFtbWVyLmpzIG9iamVjdCwgZm9yIHVuaXQgdGVzdGluZy5cbiAqXG4gKiBJbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3ViZXIvZGVjay5nbC9wdWxsLzY1OFxuICpcbiAqIEByZXR1cm5zIHt7b246IG5vb3AsIG9mZjogbm9vcCwgZGVzdHJveTogbm9vcCwgZW1pdDogbm9vcCwgZ2V0OiBnZXR9fVxuICovXG5mdW5jdGlvbiBoYW1tZXJNb2NrKCkge1xuICBjb25zdCBub29wID0gKCkgPT4ge307XG5cbiAgcmV0dXJuIHtcbiAgICBvbjogbm9vcCxcbiAgICBvZmY6IG5vb3AsXG4gICAgZGVzdHJveTogbm9vcCxcbiAgICBlbWl0OiBub29wLFxuXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0OiBub29wLFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBIYW1tZXIkMSA9XG4gIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IHdpbmRvdy5IYW1tZXIgfHwgUmVhbEhhbW1lclxuICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBoYW1tZXIuanMgaXMgb25seSBhdmFpbGFibGUgaW4gYSBicm93c2VyLCBub3QgaW4gbm9kZS5qcy4gUmVwbGFjaW5nIGl0IHdpdGggYSBtb2NrIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIGhhbW1lck1vY2soKTtcbiAgICAgIH07XG5cbi8qKlxuICogVHVybiBhbiBlbGVtZW50IGludG8gYW4gY2xpY2tUb1VzZSBlbGVtZW50LlxuICogV2hlbiBub3QgYWN0aXZlLCB0aGUgZWxlbWVudCBoYXMgYSB0cmFuc3BhcmVudCBvdmVybGF5LiBXaGVuIHRoZSBvdmVybGF5IGlzXG4gKiBjbGlja2VkLCB0aGUgbW9kZSBpcyBjaGFuZ2VkIHRvIGFjdGl2ZS5cbiAqIFdoZW4gYWN0aXZlLCB0aGUgZWxlbWVudCBpcyBkaXNwbGF5ZWQgd2l0aCBhIGJsdWUgYm9yZGVyIGFyb3VuZCBpdCwgYW5kXG4gKiB0aGUgaW50ZXJhY3RpdmUgY29udGVudHMgb2YgdGhlIGVsZW1lbnQgY2FuIGJlIHVzZWQuIFdoZW4gY2xpY2tlZCBvdXRzaWRlXG4gKiB0aGUgZWxlbWVudCwgdGhlIGVsZW1lbnRzIG1vZGUgaXMgY2hhbmdlZCB0byBpbmFjdGl2ZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lclxuICogQGNsYXNzIEFjdGl2YXRvclxuICovXG5mdW5jdGlvbiBBY3RpdmF0b3IkMShjb250YWluZXIpIHtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlID0gW107XG5cbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICB0aGlzLl9kb20gPSB7XG4gICAgY29udGFpbmVyLFxuICAgIG92ZXJsYXk6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gIH07XG5cbiAgdGhpcy5fZG9tLm92ZXJsYXkuY2xhc3NMaXN0LmFkZChcInZpcy1vdmVybGF5XCIpO1xuXG4gIHRoaXMuX2RvbS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgdGhpcy5fZG9tLm92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIH0pO1xuXG4gIGNvbnN0IGhhbW1lciA9IEhhbW1lciQxKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgaGFtbWVyLm9uKFwidGFwXCIsIHRoaXMuX29uVGFwT3ZlcmxheS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIGhhbW1lci5kZXN0cm95KCk7XG4gICAgLy8gRklYTUU6IGNsZWFuaW5nIHVwIGhhbW1lciBpbnN0YW5jZXMgZG9lc24ndCB3b3JrIChUaW1lbGluZSBub3QgcmVtb3ZlZFxuICAgIC8vIGZyb20gbWVtb3J5KVxuICB9KTtcblxuICAvLyBibG9jayBhbGwgdG91Y2ggZXZlbnRzIChleGNlcHQgdGFwKVxuICBjb25zdCBldmVudHMgPSBbXG4gICAgXCJ0YXBcIixcbiAgICBcImRvdWJsZXRhcFwiLFxuICAgIFwicHJlc3NcIixcbiAgICBcInBpbmNoXCIsXG4gICAgXCJwYW5cIixcbiAgICBcInBhbnN0YXJ0XCIsXG4gICAgXCJwYW5tb3ZlXCIsXG4gICAgXCJwYW5lbmRcIixcbiAgXTtcbiAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgaGFtbWVyLm9uKGV2ZW50LCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBhdHRhY2ggYSBjbGljayBldmVudCB0byB0aGUgd2luZG93LCBpbiBvcmRlciB0byBkZWFjdGl2YXRlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSB0aGUgdGltZWxpbmVcbiAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmJvZHkpIHtcbiAgICB0aGlzLl9vbkNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIV9oYXNQYXJlbnQoZXZlbnQudGFyZ2V0LCBjb250YWluZXIpKSB7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBwcmVwYXJlIGVzY2FwZSBrZXkgbGlzdGVuZXIgZm9yIGRlYWN0aXZhdGluZyB3aGVuIGFjdGl2ZVxuICB0aGlzLl9lc2NMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIFwia2V5XCIgaW4gZXZlbnRcbiAgICAgICAgPyBldmVudC5rZXkgPT09IFwiRXNjYXBlXCJcbiAgICAgICAgOiBldmVudC5rZXlDb2RlID09PSAyNyAvKiB0aGUga2V5Q29kZSBpcyBmb3IgSUUxMSAqL1xuICAgICkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICB9O1xufVxuXG4vLyB0dXJuIGludG8gYW4gZXZlbnQgZW1pdHRlclxuRW1pdHRlcihBY3RpdmF0b3IkMS5wcm90b3R5cGUpO1xuXG4vLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBhY3RpdmF0b3JcbkFjdGl2YXRvciQxLmN1cnJlbnQgPSBudWxsO1xuXG4vKipcbiAqIERlc3Ryb3kgdGhlIGFjdGl2YXRvci4gQ2xlYW5zIHVwIGFsbCBjcmVhdGVkIERPTSBhbmQgZXZlbnQgbGlzdGVuZXJzXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmRlYWN0aXZhdGUoKTtcblxuICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2NsZWFudXBRdWV1ZS5zcGxpY2UoMCkucmV2ZXJzZSgpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBoaWRkZW4sIGVsZW1lbnQgaXMgZGVjb3JhdGVkIHdpdGggYSBibHVlIHNoYWRvdyBib3JkZXJcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICAvLyB3ZSBhbGxvdyBvbmx5IG9uZSBhY3RpdmUgYWN0aXZhdG9yIGF0IGEgdGltZVxuICBpZiAoQWN0aXZhdG9yJDEuY3VycmVudCkge1xuICAgIEFjdGl2YXRvciQxLmN1cnJlbnQuZGVhY3RpdmF0ZSgpO1xuICB9XG4gIEFjdGl2YXRvciQxLmN1cnJlbnQgPSB0aGlzO1xuXG4gIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ2aXMtYWN0aXZlXCIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiYWN0aXZhdGVcIik7XG5cbiAgLy8gdWdseSBoYWNrOiBiaW5kIEVTQyBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnRzLCBhcyB0aGUgTmV0d29yayByZWJpbmRzIGFsbFxuICAvLyBrZXlib2FyZCBldmVudHMgb24gYSAnY2hhbmdlJyBldmVudFxuICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gdG9wIG9mIHRoZSBlbGVtZW50XG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJ2aXMtYWN0aXZlXCIpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImRlYWN0aXZhdGVcIik7XG59O1xuXG4vKipcbiAqIEhhbmRsZSBhIHRhcCBldmVudDogYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLl9vblRhcE92ZXJsYXkgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICB0aGlzLmFjdGl2YXRlKCk7XG4gIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIHRoZSByZXF1ZXN0ZWQgcGFyZW50IGVsZW1lbnQgc29tZXdoZXJlIGluXG4gKiBpdHMgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwYXJlbnQgaXMgZm91bmQgc29tZXdoZXJlIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9oYXNQYXJlbnQoZWxlbWVudCwgcGFyZW50KSB7XG4gIHdoaWxlIChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyB1dGlsaXR5IGZ1bmN0aW9uc1xyXG4vLyBwYXJzZSBBU1AuTmV0IERhdGUgcGF0dGVybixcclxuLy8gZm9yIGV4YW1wbGUgJy9EYXRlKDExOTg5MDg3MTcwNTYpLycgb3IgJy9EYXRlKDExOTg5MDg3MTcwNTYtMDcwMCkvJ1xyXG4vLyBjb2RlIGZyb20gaHR0cDovL21vbWVudGpzLmNvbS9cclxuY29uc3QgQVNQRGF0ZVJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2k7XHJcbi8vIENvbG9yIFJFc1xyXG5jb25zdCBmdWxsSGV4UkUgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pO1xyXG5jb25zdCBzaG9ydEhleFJFID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcclxuY29uc3QgcmdiUkUgPSAvXnJnYlxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqXFwpJC9pO1xyXG5jb25zdCByZ2JhUkUgPSAvXnJnYmFcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKihbMDFdfDA/XFwuXFxkKykgKlxcKSQvaTtcclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBudW1iZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBudW1iZXIsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgZXZlcnl0aGluZyBpbiB0aGUgRE9NIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIERPTW9iamVjdCAtIE5vZGUgd2hvc2UgY2hpbGQgbm9kZXMgd2lsbCBiZSByZWN1cnNpdmVseSBkZWxldGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVjdXJzaXZlRE9NRGVsZXRlKERPTW9iamVjdCkge1xyXG4gICAgaWYgKERPTW9iamVjdCkge1xyXG4gICAgICAgIHdoaWxlIChET01vYmplY3QuaGFzQ2hpbGROb2RlcygpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gRE9Nb2JqZWN0LmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIERPTW9iamVjdC5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgb2JqZWN0IChub3QgcHJpbWl0aXZlIG9yIG51bGwpLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbm90IG51bGwgb2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIERhdGUsIG9yIGEgU3RyaW5nIGNvbnRhaW5pbmcgYSBEYXRlLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgRGF0ZSBpbnN0YW5jZSBvciBzdHJpbmcgZGF0ZSByZXByZXNlbnRhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBzdHJpbmcgY29udGFpbnMgYSBkYXRlXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBBU1BEYXRlUmVnZXguZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG4vKipcclxuICogQ29weSBwcm9wZXJ0eSBmcm9tIGIgdG8gYSBpZiBwcm9wZXJ0eSBwcmVzZW50IGluIGEuXHJcbiAqIElmIHByb3BlcnR5IGluIGIgZXhwbGljaXRseSBzZXQgdG8gbnVsbCwgZGVsZXRlIGl0IGlmIGBhbGxvd0RlbGV0aW9uYCBzZXQuXHJcbiAqXHJcbiAqIEludGVybmFsIGhlbHBlciByb3V0aW5lLCBzaG91bGQgbm90IGJlIGV4cG9ydGVkLiBOb3QgYWRkZWQgdG8gYGV4cG9ydHNgIGZvciB0aGF0IHJlYXNvbi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm9wIC0gTmFtZSBvZiBwcm9wZXJ0eSB0byBjb3B5IGZyb20gYiB0byBhLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKSB7XHJcbiAgICBsZXQgZG9EZWxldGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUpIHtcclxuICAgICAgICBkb0RlbGV0aW9uID0gYltwcm9wXSA9PT0gbnVsbCAmJiBhW3Byb3BdICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoZG9EZWxldGlvbikge1xyXG4gICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF07IC8vIFJlbWVtYmVyLCB0aGlzIGlzIGEgcmVmZXJlbmNlIGNvcHkhXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEZpbGwgYW4gb2JqZWN0IHdpdGggYSBwb3NzaWJseSBwYXJ0aWFsbHkgZGVmaW5lZCBvdGhlciBvYmplY3QuXHJcbiAqXHJcbiAqIE9ubHkgY29waWVzIHZhbHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgYWxyZWFkeSBwcmVzZW50IGluIGEuXHJcbiAqIFRoYXQgbWVhbnMgYW4gb2JqZWN0IGlzIG5vdCBjcmVhdGVkIG9uIGEgcHJvcGVydHkgaWYgb25seSB0aGUgYiBvYmplY3QgaGFzIGl0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBvYmplY3QgdGhhdCB3aWxsIGhhdmUgaXQncyBwcm9wZXJ0aWVzIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBiIC0gVGhlIG9iamVjdCB3aXRoIHByb3BlcnR5IHVwZGF0ZXMuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBmaWxsSWZEZWZpbmVkKGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gTk9URTogaXRlcmF0aW9uIG9mIHByb3BlcnRpZXMgb2YgYVxyXG4gICAgLy8gTk9URTogcHJvdG90eXBlIHByb3BlcnRpZXMgaXRlcmF0ZWQgb3ZlciBhcyB3ZWxsXHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYSkge1xyXG4gICAgICAgIGlmIChiW3Byb3BdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gPT09IG51bGwgfHwgdHlwZW9mIGJbcHJvcF0gIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vdGU6IHR5cGVvZiBudWxsID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYVByb3AgPSBhW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYlByb3AgPSBiW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGFQcm9wKSAmJiBpc09iamVjdChiUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsSWZEZWZpbmVkKGFQcm9wLCBiUHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXHJcbiAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxyXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXHJcbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKi9cclxuY29uc3QgZXh0ZW5kID0gT2JqZWN0LmFzc2lnbjtcclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIgb3IgYSBzZXJpZXMgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHJlbWFya3NcclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBjb3BpZWQgdG8gYS5cclxuICogQHBhcmFtIGEgLSBUaGUgdGFyZ2V0LlxyXG4gKiBAcGFyYW0gb3RoZXJzIC0gVGhlIHNvdXJjZXMuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVFeHRlbmQocHJvcHMsIGEsIC4uLm90aGVycykge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFycmF5IHdpdGggcHJvcGVydHkgbmFtZXMgZXhwZWN0ZWQgYXMgZmlyc3QgYXJndW1lbnRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVycykge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgICAgICBpZiAob3RoZXIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBwcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IG90aGVyW3Byb3BdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyByb3V0aW5lIGltcGxpZWQgdGhhdCBtdWx0aXBsZSBzb3VyY2Ugb2JqZWN0cyBjb3VsZFxyXG4gKiBiZSB1c2VkOyBob3dldmVyLCB0aGUgaW1wbGVtZW50YXRpb24gd2FzICoqd3JvbmcqKi4gU2luY2UgbXVsdGlwbGUgKFxcPjEpXHJcbiAqIHNvdXJjZXMgd2VyZW4ndCB1c2VkIGFueXdoZXJlIGluIHRoZSBgdmlzLmpzYCBjb2RlLCB0aGlzIGhhcyBiZWVuIHJlbW92ZWRcclxuICogQHBhcmFtIHByb3BzIC0gTmFtZXMgb2YgZmlyc3QtbGV2ZWwgcHJvcGVydGllcyB0byBjb3B5IG92ZXIuXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZURlZXBFeHRlbmQocHJvcHMsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBmYWxzZSwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYGFgIHdpdGggcHJvcGVydGllcyBvZiBvYmplY3QgYGJgLCBpZ25vcmluZyBwcm9wZXJ0aWVzIHdoaWNoXHJcbiAqIGFyZSBleHBsaWNpdGx5IHNwZWNpZmllZCB0byBiZSBleGNsdWRlZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhlIHByb3BlcnRpZXMgb2YgYGJgIGFyZSBjb25zaWRlcmVkIGZvciBjb3B5aW5nLiBQcm9wZXJ0aWVzIHdoaWNoIGFyZVxyXG4gKiB0aGVtc2VsdmVzIG9iamVjdHMgYXJlIGFyZSBhbHNvIGV4dGVuZGVkLiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkXHJcbiAqIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHNUb0V4Y2x1ZGUgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHdoaWNoIHNob3VsZCAqbm90KiBiZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHRvIGV4dGVuZC5cclxuICogQHBhcmFtIGIgLSBPYmplY3QgdG8gdGFrZSBwcm9wZXJ0aWVzIGZyb20gZm9yIGV4dGVuc2lvbi5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHlcclxuICogc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQocHJvcHNUb0V4Y2x1ZGUsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICAvLyBOT1RFOiBhcnJheSBwcm9wZXJ0aWVzIGhhdmUgYW4gZWxzZS1iZWxvdzsgYXBwYXJlbnRseSwgdGhlcmUgaXMgYSBwcm9ibGVtIGhlcmUuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBIYW5kbGUgbG9jYWwgcHJvcGVydGllcyBvbmx5XHJcbiAgICAgICAgaWYgKHByb3BzVG9FeGNsdWRlLmluY2x1ZGVzKHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSW4gZXhjbHVzaW9uIGxpc3QsIHNraXBcclxuICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYltwcm9wXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXS5wdXNoKGJbcHJvcF1baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgZXh0ZW5kIGFuIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvdG9FeHRlbmQgLSBJZiB0cnVlLCB0aGUgcHJvdG90eXBlIHZhbHVlcyB3aWxsIGFsc28gYmUgZXh0ZW5kZWQuXHJcbiAqIChUaGF0IGlzIHRoZSBvcHRpb25zIG9iamVjdHMgdGhhdCBpbmhlcml0IGZyb20gb3RoZXJzIHdpbGwgYWxzbyBnZXQgdGhlXHJcbiAqIGluaGVyaXRlZCBvcHRpb25zKS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCB0aGUgdmFsdWVzIG9mIGZpZWxkcyB0aGF0IGFyZSBudWxsIHdpbGwgYmUgZGVsZXRlZC5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBFeHRlbmQoYSwgYiwgcHJvdG9FeHRlbmQgPSBmYWxzZSwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkgfHwgcHJvdG9FeHRlbmQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYltwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0gZGVlcEV4dGVuZCh7fSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF0uc2xpY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgYWxsIGVsZW1lbnRzIGluIHR3byBhcnJheXMgYXJlIGVxdWFsLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEZpcnN0IGFycmF5LlxyXG4gKiBAcGFyYW0gYiAtIFNlY29uZCBhcnJheS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBib3RoIGFycmF5cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2FtZSBlbGVtZW50cyAoMSA9ICcxJykuXHJcbiAqL1xyXG5mdW5jdGlvbiBlcXVhbEFycmF5KGEsIGIpIHtcclxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBHZXQgdGhlIHR5cGUgb2YgYW4gb2JqZWN0LCBmb3IgZXhhbXBsZSBleHBvcnRzLmdldFR5cGUoW10pIHJldHVybnMgJ0FycmF5Jy5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgRGV0ZWN0ZWQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFR5cGUob2JqZWN0KSB7XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcclxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJBcnJheVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJEYXRlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIk9iamVjdFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBGaXJzdCBwYXJ0LlxyXG4gKiBAcGFyYW0gbmV3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgYWFkZGVkIGludG8gdGhlIGFycmF5LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aXRoIGFsbCBpdGVtcyBmcm9tIGFyciBhbmQgbmV3VmFsdWUgKHdoaWNoIGlzIGxhc3QpLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFuZEV4dGVuZEFycmF5KGFyciwgbmV3VmFsdWUpIHtcclxuICAgIHJldHVybiBbLi4uYXJyLCBuZXdWYWx1ZV07XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIGJlIGNvcGllZC5cclxuICogQHJldHVybnMgU2hhbGxvdyBjb3B5IG9mIGFyci5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBcnJheShhcnIpIHtcclxuICAgIHJldHVybiBhcnIuc2xpY2UoKTtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIGxlZnQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIGxlZnQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZUxlZnQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHJpZ2h0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSByaWdodCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlUmlnaHQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSB0b3AgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHRvcCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlVG9wKGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxufVxyXG4vKipcclxuICogQWRkIGEgY2xhc3NOYW1lIHRvIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIGFkZGVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBuZXdDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQobmV3Q2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhY2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSkpO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgYSBjbGFzc05hbWUgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG9sZENsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFvbGRDbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogRm9yIGVhY2ggbWV0aG9kIGZvciBib3RoIGFycmF5cyBhbmQgb2JqZWN0cy5cclxuICogSW4gY2FzZSBvZiBhbiBhcnJheSwgdGhlIGJ1aWx0LWluIEFycmF5LmZvckVhY2goKSBpcyBhcHBsaWVkICgqKk5vLCBpdCdzIG5vdCEqKikuXHJcbiAqIEluIGNhc2Ugb2YgYW4gT2JqZWN0LCB0aGUgbWV0aG9kIGxvb3BzIG92ZXIgYWxsIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIEFuIE9iamVjdCBvciBBcnJheSB0byBiZSBpdGVyYXRlZCBvdmVyLlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5mb3JFYWNoLWxpa2UgY2FsbGJhY2suXHJcbiAqL1xyXG5mdW5jdGlvbiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAvLyBhcnJheVxyXG4gICAgICAgIGNvbnN0IGxlbiA9IG9iamVjdC5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhvYmplY3RbaV0sIGksIG9iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gb2JqZWN0XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGFuIGFycmF5OiBhbGwgb2JqZWN0cyBwcm9wZXJ0aWVzIGFyZSBwdXQgaW50byB0aGUgYXJyYXkuIFRoZSByZXN1bHRpbmcgYXJyYXkgaXMgdW5vcmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbyAtIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bm9yZGVyZWQgdmFsdWVzLlxyXG4gKi9cclxuY29uc3QgdG9BcnJheSA9IE9iamVjdC52YWx1ZXM7XHJcbi8qKlxyXG4gKiBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IHdpbGwgYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIGtleSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgYXNzaWduZWQuXHJcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIHdhcyB1cGRhdGVkICh0cnVlKSBvciBhbHJlYWR5IHN0cmljdGx5IHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBvYmplY3QgKGZhbHNlKS5cclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KG9iamVjdCwga2V5LCB2YWx1ZSkge1xyXG4gICAgaWYgKG9iamVjdFtrZXldICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBiZSBvbmx5IGV4ZWN1dGVkIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZS5cclxuICpcclxuICogQHBhcmFtIGZuIC0gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJucyBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uLlxyXG4gKi9cclxuZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcclxuICAgIGxldCBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzY2hlZHVsZWQpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm4oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ2FuY2VscyB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBpZiBpdCBpcyBjYW5jZWxhYmxlLCB3aXRob3V0IHN0b3BwaW5nIGZ1cnRoZXIgcHJvcGFnYXRpb24gb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgd2hvc2UgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIG5vbi1JRSBicm93c2Vyc1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldCBIVE1MIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudC5cclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgb3IgbnVsbCBpZiBub3Qgb2J0YWluYWJsZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFRhcmdldChldmVudCA9IHdpbmRvdy5ldmVudCkge1xyXG4gICAgLy8gY29kZSBmcm9tIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxyXG4gICAgLy8gQFRPRE86IEV2ZW50VGFyZ2V0IGNhbiBiZSBhbG1vc3QgYW55dGhpbmcsIGlzIGl0IG9rYXkgdG8gcmV0dXJuIG9ubHkgRWxlbWVudHM/XHJcbiAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcclxuICAgIGlmICghZXZlbnQpIDtcclxuICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LnNyY0VsZW1lbnQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC5zcmNFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gbnVsbCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykge1xyXG4gICAgICAgIC8vIGRlZmVhdCBTYWZhcmkgYnVnXHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gZWxlbWVudCBjb250YWlucyBnaXZlbiBwYXJlbnQgc29tZXdoZXJlIGluIHRoZSBET00gdHJlZS5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBwYXJlbnQgLSBUaGUgYW5jZXN0b3IgKG5vdCBuZWNlc3NhcmlseSBwYXJlbnQpIG9mIHRoZSBlbGVtZW50LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHBhcmVudCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZWxlbWVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xyXG4gICAgbGV0IGVsZW0gPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKGVsZW0pIHtcclxuICAgICAgICBpZiAoZWxlbSA9PT0gcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9ib29sZWFuLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nIGJvb2xlYW4gdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgbnVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvbnVtYmVyLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nICoqYm94ZWQqKiBudW1iZXIgdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzTnVtYmVyKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIHN0cmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3N0cmluZywgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogc3RyaW5nIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1N0cmluZyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvc2l6ZSwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUgKG51bWJlciArICdweCcpLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1NpemUodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBET00gRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBET00gRWxlbWVudCwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIERPTSBFbGVtZW50LCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0VsZW1lbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYn1cclxuICogQHBhcmFtIGhleCAtIEhleCBjb2xvciBzdHJpbmcgKDMgb3IgNiBkaWdpdHMsIHdpdGggb3Igd2l0aG91dCAjKS5cclxuICogQHJldHVybnMgUkdCIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvUkdCKGhleCkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHN3aXRjaCAoaGV4Lmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHNob3J0SGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0gKyByZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0gKyByZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10gKyByZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBmdWxsSGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBzdHJpbmcgY29sb3IgaW4gaGV4IG9yIFJHQiBmb3JtYXQgYW5kIGFkZHMgdGhlIG9wYWNpdHksIFJHQkEgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29sb3IgLSBUaGUgY29sb3Igc3RyaW5nIChoZXgsIFJHQiwgUkdCQSkuXHJcbiAqIEBwYXJhbSBvcGFjaXR5IC0gVGhlIG5ldyBvcGFjaXR5LlxyXG4gKiBAcmV0dXJucyBSR0JBIHN0cmluZywgZm9yIGV4YW1wbGUgJ3JnYmEoMjU1LCAwLCAxMjcsIDAuMyknLlxyXG4gKi9cclxuZnVuY3Rpb24gb3ZlcnJpZGVPcGFjaXR5KGNvbG9yLCBvcGFjaXR5KSB7XHJcbiAgICBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JhXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JcIikpIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBjb2xvclxyXG4gICAgICAgICAgICAuc3Vic3RyKGNvbG9yLmluZGV4T2YoXCIoXCIpICsgMSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYlswXSArIFwiLFwiICsgcmdiWzFdICsgXCIsXCIgKyByZ2JbMl0gKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJnYiA9IGhleFRvUkdCKGNvbG9yKTtcclxuICAgICAgICBpZiAocmdiID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYi5yICsgXCIsXCIgKyByZ2IuZyArIFwiLFwiICsgcmdiLmIgKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcgKGZvciBleGFtcGxlOiAnIzBhY2RjMCcpLlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IZXgocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmV0dXJuIChcIiNcIiArICgoMSA8PCAyNCkgKyAocmVkIDw8IDE2KSArIChncmVlbiA8PCA4KSArIGJsdWUpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XHJcbn1cclxuLyoqXHJcbiAqIFBhcnNlIGEgY29sb3IgcHJvcGVydHkgaW50byBhbiBvYmplY3Qgd2l0aCBib3JkZXIsIGJhY2tncm91bmQsIGFuZCBoaWdobGlnaHQgY29sb3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5wdXRDb2xvciAtIFNob3J0aGFuZCBjb2xvciBzdHJpbmcgb3IgaW5wdXQgY29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0gZGVmYXVsdENvbG9yIC0gRnVsbCBjb2xvciBvYmplY3QgdG8gZmlsbCBpbiBtaXNzaW5nIHZhbHVlcyBpbiBpbnB1dENvbG9yLlxyXG4gKiBAcmV0dXJucyBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0Q29sb3IsIGRlZmF1bHRDb2xvcikge1xyXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0Q29sb3IpKSB7XHJcbiAgICAgICAgbGV0IGNvbG9yU3RyID0gaW5wdXRDb2xvcjtcclxuICAgICAgICBpZiAoaXNWYWxpZFJHQihjb2xvclN0cikpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiID0gY29sb3JTdHJcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoNClcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3JTdHIubGVuZ3RoIC0gNSlcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29sb3JTdHIgPSBSR0JUb0hleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVmFsaWRIZXgoY29sb3JTdHIpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSFNWKGNvbG9yU3RyKTtcclxuICAgICAgICAgICAgY29uc3QgbGlnaHRlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBoc3YucyAqIDAuOCxcclxuICAgICAgICAgICAgICAgIHY6IE1hdGgubWluKDEsIGhzdi52ICogMS4wMiksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBNYXRoLm1pbigxLCBoc3YucyAqIDEuMjUpLFxyXG4gICAgICAgICAgICAgICAgdjogaHN2LnYgKiAwLjgsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySGV4ID0gSFNWVG9IZXgoZGFya2VyQ29sb3JIU1YuaCwgZGFya2VyQ29sb3JIU1YucywgZGFya2VyQ29sb3JIU1Yudik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhleCA9IEhTVlRvSGV4KGxpZ2h0ZXJDb2xvckhTVi5oLCBsaWdodGVyQ29sb3JIU1YucywgbGlnaHRlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q29sb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgZGVmYXVsdENvbG9yLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IGRlZmF1bHRDb2xvci5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5ob3ZlciAmJiBpbnB1dENvbG9yLmhvdmVyLmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuYmFja2dyb3VuZCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogaXNTdHJpbmcoaW5wdXRDb2xvci5oaWdobGlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBSR0IgXFw8MCwgMjU1XFw+IGludG8gSFNWIG9iamVjdC5cclxuICpcclxuICogQHJlbWFya3NcclxuICoge0BsaW5rIGh0dHA6Ly93d3cuamF2YXNjcmlwdGVyLm5ldC9mYXEvcmdiMmhzdi5odG19XHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhTViBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBSR0JUb0hTVihyZWQsIGdyZWVuLCBibHVlKSB7XHJcbiAgICByZWQgPSByZWQgLyAyNTU7XHJcbiAgICBncmVlbiA9IGdyZWVuIC8gMjU1O1xyXG4gICAgYmx1ZSA9IGJsdWUgLyAyNTU7XHJcbiAgICBjb25zdCBtaW5SR0IgPSBNYXRoLm1pbihyZWQsIE1hdGgubWluKGdyZWVuLCBibHVlKSk7XHJcbiAgICBjb25zdCBtYXhSR0IgPSBNYXRoLm1heChyZWQsIE1hdGgubWF4KGdyZWVuLCBibHVlKSk7XHJcbiAgICAvLyBCbGFjay1ncmF5LXdoaXRlXHJcbiAgICBpZiAobWluUkdCID09PSBtYXhSR0IpIHtcclxuICAgICAgICByZXR1cm4geyBoOiAwLCBzOiAwLCB2OiBtaW5SR0IgfTtcclxuICAgIH1cclxuICAgIC8vIENvbG9ycyBvdGhlciB0aGFuIGJsYWNrLWdyYXktd2hpdGU6XHJcbiAgICBjb25zdCBkID0gcmVkID09PSBtaW5SR0IgPyBncmVlbiAtIGJsdWUgOiBibHVlID09PSBtaW5SR0IgPyByZWQgLSBncmVlbiA6IGJsdWUgLSByZWQ7XHJcbiAgICBjb25zdCBoID0gcmVkID09PSBtaW5SR0IgPyAzIDogYmx1ZSA9PT0gbWluUkdCID8gMSA6IDU7XHJcbiAgICBjb25zdCBodWUgPSAoNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSkpIC8gMzYwO1xyXG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IChtYXhSR0IgLSBtaW5SR0IpIC8gbWF4UkdCO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtYXhSR0I7XHJcbiAgICByZXR1cm4geyBoOiBodWUsIHM6IHNhdHVyYXRpb24sIHY6IHZhbHVlIH07XHJcbn1cclxuLyoqXHJcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBpbnRvIGFuIG9iamVjdCB3aXRoIGtleS92YWx1ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gQ1NTIHNvdXJjZSBjb2RlIHRvIHNwbGl0IGludG8ga2V5L3ZhbHVlIG9iamVjdC5cclxuICogQHJldHVybnMgS2V5L3ZhbHVlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHtAbGluayBjc3NUZXh0fS5cclxuICovXHJcbmZ1bmN0aW9uIHNwbGl0Q1NTVGV4dChjc3NUZXh0KSB7XHJcbiAgICBjb25zdCB0bXBFbGxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB7fTtcclxuICAgIHRtcEVsbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bXBFbGxlbWVudC5zdHlsZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIHN0eWxlc1t0bXBFbGxlbWVudC5zdHlsZVtpXV0gPSB0bXBFbGxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRtcEVsbGVtZW50LnN0eWxlW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbn1cclxuLyoqXHJcbiAqIEFwcGVuZCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgdG8gYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgc3R5bGVzLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgYXBwZW5kZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDc3NUZXh0KGVsZW1lbnQsIGNzc1RleHQpIHtcclxuICAgIGNvbnN0IGNzc1N0eWxlID0gc3BsaXRDU1NUZXh0KGNzc1RleHQpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3NzU3R5bGUpKSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCBzdHlsZXMgc2hvdWxkIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gVGhlIHN0eWxlcyB0byBiZSByZW1vdmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamlqYWNrc29uLzUzMTEyNTZ9XHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb1JHQihoLCBzLCB2KSB7XHJcbiAgICBsZXQgcjtcclxuICAgIGxldCBnO1xyXG4gICAgbGV0IGI7XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihoICogNik7XHJcbiAgICBjb25zdCBmID0gaCAqIDYgLSBpO1xyXG4gICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xyXG4gICAgY29uc3QgcSA9IHYgKiAoMSAtIGYgKiBzKTtcclxuICAgIGNvbnN0IHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyk7XHJcbiAgICBzd2l0Y2ggKGkgJSA2KSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAociA9IHYpLCAoZyA9IHQpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIChyID0gcSksIChnID0gdiksIChiID0gcCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSB2KSwgKGIgPSB0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAociA9IHApLCAoZyA9IHEpLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIChyID0gdCksIChnID0gcCksIChiID0gdik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSBwKSwgKGIgPSBxKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHI6IE1hdGguZmxvb3IociAqIDI1NSksXHJcbiAgICAgICAgZzogTWF0aC5mbG9vcihnICogMjU1KSxcclxuICAgICAgICBiOiBNYXRoLmZsb29yKGIgKiAyNTUpLFxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb0hleChoLCBzLCB2KSB7XHJcbiAgICBjb25zdCByZ2IgPSBIU1ZUb1JHQihoLCBzLCB2KTtcclxuICAgIHJldHVybiBSR0JUb0hleChyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBoZXggY29sb3Igc3RyaW5nIGludG8gSFNWIFxcPDAsIDFcXD4uXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gaGV4VG9IU1YoaGV4KSB7XHJcbiAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihoZXgpO1xyXG4gICAgaWYgKCFyZ2IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHtoZXh9JyBpcyBub3QgYSB2YWxpZCBjb2xvci5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSR0JUb0hTVihyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgaGV4IGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIGhleCAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xyXG4gICAgY29uc3QgaXNPayA9IC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XHJcbiAgICByZXR1cm4gaXNPaztcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCIGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHJnYiAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCKHJnYikge1xyXG4gICAgcmV0dXJuIHJnYlJFLnRlc3QocmdiKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCQSBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2JhIC0gVW5rbm93biBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBhIGNvbG9yLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzVmFsaWRSR0JBKHJnYmEpIHtcclxuICAgIHJldHVybiByZ2JhUkUudGVzdChyZ2JhKTtcclxufVxyXG4vKipcclxuICogVGhpcyByZWN1cnNpdmVseSByZWRpcmVjdHMgdGhlIHByb3RvdHlwZSBvZiBKU09OIG9iamVjdHMgdG8gdGhlIHJlZmVyZW5jZU9iamVjdC5cclxuICogVGhpcyBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZHMgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHRvIGJlIGJyaWRnZWQuXHJcbiAqIEBwYXJhbSByZWZlcmVuY2VPYmplY3QgLSBUaGUgb3JpZ2luYWwgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVCcmlkZ2VPYmplY3QoZmllbGRzLCByZWZlcmVuY2VPYmplY3QpIHtcclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIHJlZmVyZW5jZU9iamVjdCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIC8vICEhISB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICBjb25zdCBvYmplY3RUbyA9IE9iamVjdC5jcmVhdGUocmVmZXJlbmNlT2JqZWN0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZmVyZW5jZU9iamVjdCwgZmllbGRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0VG9bZmllbGRzW2ldXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFRvO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgVGhlIEVsZW1lbnQgaWYgdGhlIHJlZmVyZW5jZU9iamVjdCBpcyBhbiBFbGVtZW50LCBvciBhIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiByZWZlcmVuY2VPYmplY3QgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gQXZvaWQgYnJpZGdpbmcgRE9NIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlT2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGkpKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ldID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFRvW2ldID0gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0VG87XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgc3RhYmxlIHNvcnQgaW1wbGVtZW50YXRpb24sIHZlcnkgZmFzdCBmb3IgcHJlc29ydGVkIGRhdGEuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIGFycmF5IHRvIGJlIHNvcnRlZCAoaW4tcGxhY2UpLlxyXG4gKiBAcGFyYW0gY29tcGFyZSAtIEFuIG9yZGVyIGNvbXBhcmF0b3IuXHJcbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5zZXJ0U29ydChhLCBjb21wYXJlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBrID0gYVtpXTtcclxuICAgICAgICBsZXQgajtcclxuICAgICAgICBmb3IgKGogPSBpOyBqID4gMCAmJiBjb21wYXJlKGssIGFbaiAtIDFdKSA8IDA7IGotLSkge1xyXG4gICAgICAgICAgICBhW2pdID0gYVtqIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFbal0gPSBrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIG9wdGlvbnMgb2Ygc3Vib2JqZWN0cyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXHJcbiAqXHJcbiAqIEEgcmVxdWlyZW1lbnQgb2YgdGhlc2Ugc3Vib2JqZWN0cyBpcyB0aGF0IHRoZXkgaGF2ZSBhbiAnZW5hYmxlZCcgZWxlbWVudFxyXG4gKiB3aGljaCBpcyBvcHRpb25hbCBmb3IgdGhlIHVzZXIgYnV0IG1hbmRhdG9yeSBmb3IgdGhlIHByb2dyYW0uXHJcbiAqXHJcbiAqIFRoZSBhZGRlZCB2YWx1ZSBoZXJlIG9mIHRoZSBtZXJnZSBpcyB0aGF0IG9wdGlvbiAnZW5hYmxlZCcgaXMgc2V0IGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWVyZ2VUYXJnZXQgLSBFaXRoZXIgdGhpcy5vcHRpb25zIG9yIHRoZSBvcHRpb25zIHVzZWQgZm9yIHRoZSBncm91cHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICogQHBhcmFtIG9wdGlvbiAtIE9wdGlvbiBrZXkgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSBnbG9iYWxPcHRpb25zIC0gR2xvYmFsIG9wdGlvbnMsIHBhc3NlZCBpbiB0byBkZXRlcm1pbmUgdmFsdWUgb2Ygb3B0aW9uICdlbmFibGVkJy5cclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhtZXJnZVRhcmdldCwgb3B0aW9ucywgb3B0aW9uLCBnbG9iYWxPcHRpb25zID0ge30pIHtcclxuICAgIC8vIExvY2FsIGhlbHBlcnNcclxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9iaiAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIjtcclxuICAgIH07XHJcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzQ0OTEyODcvMTIyMzUzMVxyXG4gICAgY29uc3QgaXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHggaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCB4KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8vIEd1YXJkc1xyXG4gICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbWVyZ2VUYXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzUHJlc2VudChvcHRpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgZ2xvYmFsT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyBBY3R1YWwgbWVyZ2Ugcm91dGluZSwgc2VwYXJhdGVkIGZyb20gbWFpbiBsb2dpY1xyXG4gICAgLy8gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBvcHRpb25zIGlzIG1lcmdlZC4gRGVlcGVyIGxldmVscyBhcmUgcmVmJ2QuIFRoaXMgbWF5IGFjdHVhbGx5IGJlIGFuIGlzc3VlLlxyXG4gICAgLy9cclxuICAgIGNvbnN0IGRvTWVyZ2UgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KHRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbb3B0aW9uXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcmMgPSBvcHRpb25zW29wdGlvbl07XHJcbiAgICAgICAgY29uc3QgZHN0ID0gdGFyZ2V0W29wdGlvbl07XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNyYywgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRzdFtwcm9wXSA9IHNyY1twcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBMb2NhbCBpbml0aWFsaXphdGlvblxyXG4gICAgY29uc3Qgc3JjT3B0aW9uID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgY29uc3QgZ2xvYmFsUGFzc2VkID0gaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykgJiYgIWlzRW1wdHkoZ2xvYmFsT3B0aW9ucyk7XHJcbiAgICBjb25zdCBnbG9iYWxPcHRpb24gPSBnbG9iYWxQYXNzZWQgPyBnbG9iYWxPcHRpb25zW29wdGlvbl0gOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBnbG9iYWxFbmFibGVkID0gZ2xvYmFsT3B0aW9uID8gZ2xvYmFsT3B0aW9uLmVuYWJsZWQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTWFpbiByb3V0aW5lXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgaWYgKHNyY09wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNyY09wdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gc3JjT3B0aW9uO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChzcmNPcHRpb24gPT09IG51bGwgJiYgIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgLy8gSWYgcG9zc2libGUsIGV4cGxpY2l0IGNvcHkgZnJvbSBnbG9iYWxzXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChnbG9iYWxPcHRpb24pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KHNyY09wdGlvbikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gRW5zdXJlIHRoYXQgJ2VuYWJsZWQnIGlzIHByb3Blcmx5IHNldC4gSXQgaXMgcmVxdWlyZWQgaW50ZXJuYWxseVxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBmcm9tIG9wdGlvbnMgd2lsbCBhbHdheXMgb3ZlcndyaXRlIHRoZSBleGlzdGluZyB2YWx1ZVxyXG4gICAgLy9cclxuICAgIGxldCBlbmFibGVkID0gdHJ1ZTsgLy8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgaWYgKHNyY09wdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBlbmFibGVkID0gc3JjT3B0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBUYWtlIGZyb20gZ2xvYmFscywgaWYgcHJlc2VudFxyXG4gICAgICAgIGlmIChnbG9iYWxFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IGdsb2JhbE9wdGlvbi5lbmFibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRvTWVyZ2UobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbik7XHJcbiAgICBtZXJnZVRhcmdldFtvcHRpb25dLmVuYWJsZWQgPSBlbmFibGVkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBiaW5hcnkgc2VhcmNoIGZvciBhIHZpc2libGUgaXRlbSBpbiBhIHNvcnRlZCBsaXN0LiBJZiB3ZSBmaW5kIGEgdmlzaWJsZSBpdGVtLCB0aGUgY29kZSB0aGF0IHVzZXNcclxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4gaXRlcmF0ZSBpbiBib3RoIGRpcmVjdGlvbnMgb3ZlciB0aGlzIHNvcnRlZCBsaXN0IHRvIGZpbmQgYWxsIHZpc2libGUgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBJdGVtcyBvcmRlcmVkIGJ5IHN0YXJ0LlxyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIC0xIGlzIGxvd2VyLCAwIGlzIGVxdWFsLCAxIGlzIGhpZ2hlci5cclxuICogQHBhcmFtIGZpZWxkIC0gUHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdKS5cclxuICogQHBhcmFtIGZpZWxkMiAtIFNlY29uZCBwcm9wZXJ0eSBuYW1lIG9uIGFuIGl0ZW0gKFRoYXQgaXMgaXRlbVtmaWVsZF1bZmllbGQyXSkuXHJcbiAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBmb3VuZCBpdGVtIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoQ3VzdG9tKG9yZGVyZWRJdGVtcywgY29tcGFyYXRvciwgZmllbGQsIGZpZWxkMikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQyID09PSB1bmRlZmluZWQgPyBpdGVtW2ZpZWxkXSA6IGl0ZW1bZmllbGRdW2ZpZWxkMl07XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGppaGFhLCBmb3VuZCBhIHZpc2libGUgaXRlbSFcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoUmVzdWx0ID09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBzbWFsbCAtLT4gaW5jcmVhc2UgbG93XHJcbiAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyB2YWx1ZSBpbiBhIHNvcnRlZCBhcnJheS5cclxuICogSWYgaXQgZG9lcyBub3QgZXhpc3QgYnV0IGlzIGluIGJldHdlZW4gb2YgdHdvIHZhbHVlcywgd2UgcmV0dXJuIGVpdGhlciB0aGVcclxuICogb25lIGJlZm9yZSBvciB0aGUgb25lIGFmdGVyLCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCBJZiBpdCBpcyBmb3VuZCwgd2VcclxuICogcmV0dXJuIHRoZSBpbmRleCwgZWxzZSAtMS5cclxuICpcclxuICogQHBhcmFtIG9yZGVyZWRJdGVtcyAtIFNvcnRlZCBhcnJheS5cclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSBzZWFyY2hlZCB2YWx1ZS5cclxuICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gaXRlbXMgdG8gYmUgc2VhcmNoZWQuXHJcbiAqIEBwYXJhbSBzaWRlUHJlZmVyZW5jZSAtIElmIHRoZSB0YXJnZXQgaXMgYmV0d2VlbiB0d28gdmFsdWVzLCBzaG91bGQgdGhlIGluZGV4IG9mIHRoZSBiZWZvcmUgb3IgdGhlIGFmdGVyIGJlIHJldHVybmVkP1xyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIEFuIG9wdGlvbmFsIGNvbXBhcmF0b3IsIHJldHVybmluZyAtMSwgMCwgMSBmb3IgXFw8LCA9PT0sIFxcPi5cclxuICogQHJldHVybnMgVGhlIGluZGV4IG9mIGZvdW5kIHZhbHVlIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoVmFsdWUob3JkZXJlZEl0ZW1zLCB0YXJnZXQsIGZpZWxkLCBzaWRlUHJlZmVyZW5jZSwgY29tcGFyYXRvcikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgcHJldlZhbHVlO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IG5leHRWYWx1ZTtcclxuICAgIGxldCBtaWRkbGU7XHJcbiAgICBjb21wYXJhdG9yID1cclxuICAgICAgICBjb21wYXJhdG9yICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGNvbXBhcmF0b3JcclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYiA/IDAgOiBhIDwgYiA/IC0xIDogMTtcclxuICAgICAgICAgICAgfTtcclxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKSB7XHJcbiAgICAgICAgLy8gZ2V0IGEgbmV3IGd1ZXNzXHJcbiAgICAgICAgbWlkZGxlID0gTWF0aC5mbG9vcigwLjUgKiAoaGlnaCArIGxvdykpO1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IG9yZGVyZWRJdGVtc1tNYXRoLm1heCgwLCBtaWRkbGUgLSAxKV1bZmllbGRdO1xyXG4gICAgICAgIHZhbHVlID0gb3JkZXJlZEl0ZW1zW21pZGRsZV1bZmllbGRdO1xyXG4gICAgICAgIG5leHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIG9yZGVyZWRJdGVtc1tNYXRoLm1pbihvcmRlcmVkSXRlbXMubGVuZ3RoIC0gMSwgbWlkZGxlICsgMSldW2ZpZWxkXTtcclxuICAgICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcihwcmV2VmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCIgPyBNYXRoLm1heCgwLCBtaWRkbGUgLSAxKSA6IG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA8IDAgJiZcclxuICAgICAgICAgICAgY29tcGFyYXRvcihuZXh0VmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dFxyXG4gICAgICAgICAgICByZXR1cm4gc2lkZVByZWZlcmVuY2UgPT0gXCJiZWZvcmVcIlxyXG4gICAgICAgICAgICAgICAgPyBtaWRkbGVcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlkbnQgZmluZCB0aGUgdGFyZ2V0LCB3ZSBuZWVkIHRvIGNoYW5nZSBvdXIgYm91bmRhcmllcy5cclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICAgICAgbG93ID0gbWlkZGxlICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBiaWcgLS0+IGRlY3JlYXNlIGhpZ2hcclxuICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgfVxyXG4gICAgLy8gZGlkbnQgZmluZCBhbnl0aGluZy4gUmV0dXJuIC0xLlxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qXHJcbiAqIEVhc2luZyBGdW5jdGlvbnMuXHJcbiAqIE9ubHkgY29uc2lkZXJpbmcgdGhlIHQgdmFsdWUgZm9yIHRoZSByYW5nZSBbMCwgMV0gPT4gWzAsIDFdLlxyXG4gKlxyXG4gKiBJbnNwaXJhdGlvbjogZnJvbSBodHRwOi8vZ2l6bWEuY29tL2Vhc2luZy9cclxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTRcclxuICovXHJcbmNvbnN0IGVhc2luZ0Z1bmN0aW9ucyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgbm8gZWFzaW5nIGFuZCBubyBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBsaW5lYXIodCkge1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5RdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5DdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRDdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gMSAtIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKyAtLXQgKiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAxNiAqIHQgKiB0ICogdCAqIHQgKiB0IDogMSArIDE2ICogLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFeHBlcmltZW50YWx5IGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRoZSBzY3JvbGxiYXIgZm9yIHRoaXMgYnJvd3Nlci5cclxuICpcclxuICogQHJldHVybnMgVGhlIHdpZHRoIGluIHBpeGVscy5cclxuICovXHJcbmZ1bmN0aW9uIGdldFNjcm9sbEJhcldpZHRoKCkge1xyXG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGlubmVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XHJcbiAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIG91dGVyLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSBcIjIwMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcclxuICAgIGNvbnN0IHcxID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XHJcbiAgICBsZXQgdzIgPSBpbm5lci5vZmZzZXRXaWR0aDtcclxuICAgIGlmICh3MSA9PSB3Mikge1xyXG4gICAgICAgIHcyID0gb3V0ZXIuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcclxuICAgIHJldHVybiB3MSAtIHcyO1xyXG59XHJcbi8vIEBUT0RPOiBUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseS5cclxuLy8gSXQgd29ya3Mgb25seSBmb3Igc2luZ2xlIHByb3BlcnR5IG9iamVjdHMsXHJcbi8vIG90aGVyd2lzZSBpdCBjb21iaW5lcyBhbGwgb2YgdGhlIHR5cGVzIGluIGEgdW5pb24uXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBWMT4gKFxyXG4vLyAgIHBpbGU6IFJlY29yZDxLMSwgdW5kZWZpbmVkIHwgVjE+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBLMSB8IFtLMV1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjFcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIHRvcE1vc3Q8SzEgZXh0ZW5kcyBzdHJpbmcsIEsyIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjI+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgSzMgZXh0ZW5kcyBzdHJpbmcsIFYxLCBWMiwgVjM+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMiB8IFJlY29yZDxLMywgdW5kZWZpbmVkIHwgVjM+Pj5bXSxcclxuLy8gICBhY2Nlc3NvcnM6IFtLMSwgSzIsIEszXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyIHwgVjNcclxuLyoqXHJcbiAqIEdldCB0aGUgdG9wIG1vc3QgcHJvcGVydHkgdmFsdWUgZnJvbSBhIHBpbGUgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHBhcmFtIHBpbGUgLSBBcnJheSBvZiBvYmplY3RzLCBubyByZXF1aXJlZCBmb3JtYXQuXHJcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cclxuICogRm9yIGV4YW1wbGUgYG9iamVjdFsnZm9vJ11bJ2JhciddYCDihpIgYFsnZm9vJywgJ2JhciddYC5cclxuICogQHJldHVybnMgVmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGggZ2l2ZW4gYWNjZXNzb3JzIHBhdGggZnJvbSB0aGUgZmlyc3QgcGlsZSBpdGVtIHdoZXJlIGl0J3Mgbm90IHVuZGVmaW5lZC5cclxuICovXHJcbmZ1bmN0aW9uIHRvcE1vc3QocGlsZSwgYWNjZXNzb3JzKSB7XHJcbiAgICBsZXQgY2FuZGlkYXRlO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjY2Vzc29ycykpIHtcclxuICAgICAgICBhY2Nlc3NvcnMgPSBbYWNjZXNzb3JzXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHBpbGUpIHtcclxuICAgICAgICBpZiAobWVtYmVyKSB7XHJcbiAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG1lbWJlclthY2Nlc3NvcnNbMF1dO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVthY2Nlc3NvcnNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjYW5kaWRhdGU7XHJcbn1cblxuY29uc3QgaHRtbENvbG9ycyA9IHtcbiAgYmxhY2s6IFwiIzAwMDAwMFwiLFxuICBuYXZ5OiBcIiMwMDAwODBcIixcbiAgZGFya2JsdWU6IFwiIzAwMDA4QlwiLFxuICBtZWRpdW1ibHVlOiBcIiMwMDAwQ0RcIixcbiAgYmx1ZTogXCIjMDAwMEZGXCIsXG4gIGRhcmtncmVlbjogXCIjMDA2NDAwXCIsXG4gIGdyZWVuOiBcIiMwMDgwMDBcIixcbiAgdGVhbDogXCIjMDA4MDgwXCIsXG4gIGRhcmtjeWFuOiBcIiMwMDhCOEJcIixcbiAgZGVlcHNreWJsdWU6IFwiIzAwQkZGRlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIiMwMENFRDFcIixcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiIzAwRkE5QVwiLFxuICBsaW1lOiBcIiMwMEZGMDBcIixcbiAgc3ByaW5nZ3JlZW46IFwiIzAwRkY3RlwiLFxuICBhcXVhOiBcIiMwMEZGRkZcIixcbiAgY3lhbjogXCIjMDBGRkZGXCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIjMTkxOTcwXCIsXG4gIGRvZGdlcmJsdWU6IFwiIzFFOTBGRlwiLFxuICBsaWdodHNlYWdyZWVuOiBcIiMyMEIyQUFcIixcbiAgZm9yZXN0Z3JlZW46IFwiIzIyOEIyMlwiLFxuICBzZWFncmVlbjogXCIjMkU4QjU3XCIsXG4gIGRhcmtzbGF0ZWdyYXk6IFwiIzJGNEY0RlwiLFxuICBsaW1lZ3JlZW46IFwiIzMyQ0QzMlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIjM0NCMzcxXCIsXG4gIHR1cnF1b2lzZTogXCIjNDBFMEQwXCIsXG4gIHJveWFsYmx1ZTogXCIjNDE2OUUxXCIsXG4gIHN0ZWVsYmx1ZTogXCIjNDY4MkI0XCIsXG4gIGRhcmtzbGF0ZWJsdWU6IFwiIzQ4M0Q4QlwiLFxuICBtZWRpdW10dXJxdW9pc2U6IFwiIzQ4RDFDQ1wiLFxuICBpbmRpZ286IFwiIzRCMDA4MlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCIjNTU2QjJGXCIsXG4gIGNhZGV0Ymx1ZTogXCIjNUY5RUEwXCIsXG4gIGNvcm5mbG93ZXJibHVlOiBcIiM2NDk1RURcIixcbiAgbWVkaXVtYXF1YW1hcmluZTogXCIjNjZDREFBXCIsXG4gIGRpbWdyYXk6IFwiIzY5Njk2OVwiLFxuICBzbGF0ZWJsdWU6IFwiIzZBNUFDRFwiLFxuICBvbGl2ZWRyYWI6IFwiIzZCOEUyM1wiLFxuICBzbGF0ZWdyYXk6IFwiIzcwODA5MFwiLFxuICBsaWdodHNsYXRlZ3JheTogXCIjNzc4ODk5XCIsXG4gIG1lZGl1bXNsYXRlYmx1ZTogXCIjN0I2OEVFXCIsXG4gIGxhd25ncmVlbjogXCIjN0NGQzAwXCIsXG4gIGNoYXJ0cmV1c2U6IFwiIzdGRkYwMFwiLFxuICBhcXVhbWFyaW5lOiBcIiM3RkZGRDRcIixcbiAgbWFyb29uOiBcIiM4MDAwMDBcIixcbiAgcHVycGxlOiBcIiM4MDAwODBcIixcbiAgb2xpdmU6IFwiIzgwODAwMFwiLFxuICBncmF5OiBcIiM4MDgwODBcIixcbiAgc2t5Ymx1ZTogXCIjODdDRUVCXCIsXG4gIGxpZ2h0c2t5Ymx1ZTogXCIjODdDRUZBXCIsXG4gIGJsdWV2aW9sZXQ6IFwiIzhBMkJFMlwiLFxuICBkYXJrcmVkOiBcIiM4QjAwMDBcIixcbiAgZGFya21hZ2VudGE6IFwiIzhCMDA4QlwiLFxuICBzYWRkbGVicm93bjogXCIjOEI0NTEzXCIsXG4gIGRhcmtzZWFncmVlbjogXCIjOEZCQzhGXCIsXG4gIGxpZ2h0Z3JlZW46IFwiIzkwRUU5MFwiLFxuICBtZWRpdW1wdXJwbGU6IFwiIzkzNzBEOFwiLFxuICBkYXJrdmlvbGV0OiBcIiM5NDAwRDNcIixcbiAgcGFsZWdyZWVuOiBcIiM5OEZCOThcIixcbiAgZGFya29yY2hpZDogXCIjOTkzMkNDXCIsXG4gIHllbGxvd2dyZWVuOiBcIiM5QUNEMzJcIixcbiAgc2llbm5hOiBcIiNBMDUyMkRcIixcbiAgYnJvd246IFwiI0E1MkEyQVwiLFxuICBkYXJrZ3JheTogXCIjQTlBOUE5XCIsXG4gIGxpZ2h0Ymx1ZTogXCIjQUREOEU2XCIsXG4gIGdyZWVueWVsbG93OiBcIiNBREZGMkZcIixcbiAgcGFsZXR1cnF1b2lzZTogXCIjQUZFRUVFXCIsXG4gIGxpZ2h0c3RlZWxibHVlOiBcIiNCMEM0REVcIixcbiAgcG93ZGVyYmx1ZTogXCIjQjBFMEU2XCIsXG4gIGZpcmVicmljazogXCIjQjIyMjIyXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiI0I4ODYwQlwiLFxuICBtZWRpdW1vcmNoaWQ6IFwiI0JBNTVEM1wiLFxuICByb3N5YnJvd246IFwiI0JDOEY4RlwiLFxuICBkYXJra2hha2k6IFwiI0JEQjc2QlwiLFxuICBzaWx2ZXI6IFwiI0MwQzBDMFwiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiI0M3MTU4NVwiLFxuICBpbmRpYW5yZWQ6IFwiI0NENUM1Q1wiLFxuICBwZXJ1OiBcIiNDRDg1M0ZcIixcbiAgY2hvY29sYXRlOiBcIiNEMjY5MUVcIixcbiAgdGFuOiBcIiNEMkI0OENcIixcbiAgbGlnaHRncmV5OiBcIiNEM0QzRDNcIixcbiAgcGFsZXZpb2xldHJlZDogXCIjRDg3MDkzXCIsXG4gIHRoaXN0bGU6IFwiI0Q4QkZEOFwiLFxuICBvcmNoaWQ6IFwiI0RBNzBENlwiLFxuICBnb2xkZW5yb2Q6IFwiI0RBQTUyMFwiLFxuICBjcmltc29uOiBcIiNEQzE0M0NcIixcbiAgZ2FpbnNib3JvOiBcIiNEQ0RDRENcIixcbiAgcGx1bTogXCIjRERBMEREXCIsXG4gIGJ1cmx5d29vZDogXCIjREVCODg3XCIsXG4gIGxpZ2h0Y3lhbjogXCIjRTBGRkZGXCIsXG4gIGxhdmVuZGVyOiBcIiNFNkU2RkFcIixcbiAgZGFya3NhbG1vbjogXCIjRTk5NjdBXCIsXG4gIHZpb2xldDogXCIjRUU4MkVFXCIsXG4gIHBhbGVnb2xkZW5yb2Q6IFwiI0VFRThBQVwiLFxuICBsaWdodGNvcmFsOiBcIiNGMDgwODBcIixcbiAga2hha2k6IFwiI0YwRTY4Q1wiLFxuICBhbGljZWJsdWU6IFwiI0YwRjhGRlwiLFxuICBob25leWRldzogXCIjRjBGRkYwXCIsXG4gIGF6dXJlOiBcIiNGMEZGRkZcIixcbiAgc2FuZHlicm93bjogXCIjRjRBNDYwXCIsXG4gIHdoZWF0OiBcIiNGNURFQjNcIixcbiAgYmVpZ2U6IFwiI0Y1RjVEQ1wiLFxuICB3aGl0ZXNtb2tlOiBcIiNGNUY1RjVcIixcbiAgbWludGNyZWFtOiBcIiNGNUZGRkFcIixcbiAgZ2hvc3R3aGl0ZTogXCIjRjhGOEZGXCIsXG4gIHNhbG1vbjogXCIjRkE4MDcyXCIsXG4gIGFudGlxdWV3aGl0ZTogXCIjRkFFQkQ3XCIsXG4gIGxpbmVuOiBcIiNGQUYwRTZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiI0ZBRkFEMlwiLFxuICBvbGRsYWNlOiBcIiNGREY1RTZcIixcbiAgcmVkOiBcIiNGRjAwMDBcIixcbiAgZnVjaHNpYTogXCIjRkYwMEZGXCIsXG4gIG1hZ2VudGE6IFwiI0ZGMDBGRlwiLFxuICBkZWVwcGluazogXCIjRkYxNDkzXCIsXG4gIG9yYW5nZXJlZDogXCIjRkY0NTAwXCIsXG4gIHRvbWF0bzogXCIjRkY2MzQ3XCIsXG4gIGhvdHBpbms6IFwiI0ZGNjlCNFwiLFxuICBjb3JhbDogXCIjRkY3RjUwXCIsXG4gIGRhcmtvcmFuZ2U6IFwiI0ZGOEMwMFwiLFxuICBsaWdodHNhbG1vbjogXCIjRkZBMDdBXCIsXG4gIG9yYW5nZTogXCIjRkZBNTAwXCIsXG4gIGxpZ2h0cGluazogXCIjRkZCNkMxXCIsXG4gIHBpbms6IFwiI0ZGQzBDQlwiLFxuICBnb2xkOiBcIiNGRkQ3MDBcIixcbiAgcGVhY2hwdWZmOiBcIiNGRkRBQjlcIixcbiAgbmF2YWpvd2hpdGU6IFwiI0ZGREVBRFwiLFxuICBtb2NjYXNpbjogXCIjRkZFNEI1XCIsXG4gIGJpc3F1ZTogXCIjRkZFNEM0XCIsXG4gIG1pc3R5cm9zZTogXCIjRkZFNEUxXCIsXG4gIGJsYW5jaGVkYWxtb25kOiBcIiNGRkVCQ0RcIixcbiAgcGFwYXlhd2hpcDogXCIjRkZFRkQ1XCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiI0ZGRjBGNVwiLFxuICBzZWFzaGVsbDogXCIjRkZGNUVFXCIsXG4gIGNvcm5zaWxrOiBcIiNGRkY4RENcIixcbiAgbGVtb25jaGlmZm9uOiBcIiNGRkZBQ0RcIixcbiAgZmxvcmFsd2hpdGU6IFwiI0ZGRkFGMFwiLFxuICBzbm93OiBcIiNGRkZBRkFcIixcbiAgeWVsbG93OiBcIiNGRkZGMDBcIixcbiAgbGlnaHR5ZWxsb3c6IFwiI0ZGRkZFMFwiLFxuICBpdm9yeTogXCIjRkZGRkYwXCIsXG4gIHdoaXRlOiBcIiNGRkZGRkZcIixcbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gKi9cbmxldCBDb2xvclBpY2tlciQxID0gY2xhc3MgQ29sb3JQaWNrZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwaXhlbFJhdGlvID0gMSkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiAyODkgLyAyLCB5OiAyODkgLyAyIH07XG4gICAgdGhpcy5yID0gMjg5ICogMC40OTtcbiAgICB0aGlzLmNvbG9yID0geyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhOiAxLjAgfTtcbiAgICB0aGlzLmh1ZUNpcmNsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmluaXRpYWxDb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5wcmV2aW91c0NvbG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLy8gYm91bmQgYnlcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gKCkgPT4ge307XG5cbiAgICAvLyBjcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgIHRoaXMuX2NyZWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgaW5zZXJ0cyB0aGUgY29sb3JQaWNrZXIgaW50byBhIGRpdiBmcm9tIHRoZSBET01cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAgICovXG4gIGluc2VydFRvKGNvbnRhaW5lcikge1xuICAgIGlmICh0aGlzLmhhbW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuXG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldFVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIG9uIGFwcGx5IGFuZCBzYXZlLiBCaW5kIGl0IHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgc2V0Q2xvc2VDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIGNsb3NpbmcgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gaHRtbENvbG9yc1tjb2xvcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29sb3Igb2YgdGhlIGNvbG9yUGlja2VyXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAncmVkJyAgICAgICAgICAgICAgICAgICAtLT4gSFRNTCBjb2xvciBzdHJpbmdcbiAgICogJyNmZmZmZmYnICAgICAgICAgICAgICAgLS0+IGhleCBzdHJpbmdcbiAgICogJ3JnYigyNTUsMjU1LDI1NSknICAgICAgLS0+IHJnYiBzdHJpbmdcbiAgICogJ3JnYmEoMjU1LDI1NSwyNTUsMS4wKScgLS0+IHJnYmEgc3RyaW5nXG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NX0gICAgIC0tPiByZ2Igb2JqZWN0XG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NSxhOjEuMH0gLS0+IHJnYmEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgb2JqZWN0fSBjb2xvclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqL1xuICBzZXRDb2xvcihjb2xvciwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICBpZiAoY29sb3IgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJnYmE7XG5cbiAgICAvLyBpZiBhIGh0bWwgY29sb3Igc2hvcnRoYW5kIGlzIHVzZWQsIGNvbnZlcnQgdG8gaGV4XG4gICAgY29uc3QgaHRtbENvbG9yID0gdGhpcy5faXNDb2xvclN0cmluZyhjb2xvcik7XG4gICAgaWYgKGh0bWxDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IGh0bWxDb2xvcjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3JtYXRcbiAgICBpZiAoaXNTdHJpbmcoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICBpZiAoaXNWYWxpZFJHQihjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDQpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA1KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYmFBcnJheVswXSwgZzogcmdiYUFycmF5WzFdLCBiOiByZ2JhQXJyYXlbMl0sIGE6IDEuMCB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkUkdCQShjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDUpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA2KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7XG4gICAgICAgICAgcjogcmdiYUFycmF5WzBdLFxuICAgICAgICAgIGc6IHJnYmFBcnJheVsxXSxcbiAgICAgICAgICBiOiByZ2JhQXJyYXlbMl0sXG4gICAgICAgICAgYTogcmdiYUFycmF5WzNdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZ2JPYmogPSBoZXhUb1JHQihjb2xvcik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYk9iai5yLCBnOiByZ2JPYmouZywgYjogcmdiT2JqLmIsIGE6IDEuMCB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbG9yLnIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmIgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhbHBoYSA9IGNvbG9yLmEgIT09IHVuZGVmaW5lZCA/IGNvbG9yLmEgOiBcIjEuMFwiO1xuICAgICAgICAgIHJnYmEgPSB7IHI6IGNvbG9yLnIsIGc6IGNvbG9yLmcsIGI6IGNvbG9yLmIsIGE6IGFscGhhIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBpZiAocmdiYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biBjb2xvciBwYXNzZWQgdG8gdGhlIGNvbG9yUGlja2VyLiBTdXBwb3J0ZWQgYXJlIHN0cmluZ3M6IHJnYiwgaGV4LCByZ2JhLiBPYmplY3Q6IHJnYiAoe3I6cixnOmcsYjpiLFthOmFdfSkuIFN1cHBsaWVkOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29sb3IpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzaG93cyB0aGUgY29sb3IgcGlja2VyLlxuICAgKiBUaGUgaHVlIGNpcmNsZSBpcyBjb25zdHJ1Y3RlZCBvbmNlIGFuZCBzdG9yZWQuXG4gICAqL1xuICBzaG93KCkge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHRoaXMuX2dlbmVyYXRlSHVlQ2lyY2xlKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwaWNrZXIuIElzIGNhbGxlZCBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogT3B0aW9uYWwgYm9vbGVhbiB0byBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIGVhc3kgYWNjZXNzIGxhdGVyIG9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZVByZXZpb3VzPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGlkZShzdG9yZVByZXZpb3VzID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBwcmV2aW91cyBjb2xvciBmb3IgbmV4dCB0aW1lO1xuICAgIGlmIChzdG9yZVByZXZpb3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQ29sb3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBsaWVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuaW5pdGlhbENvbG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICAgIC8vIGNhbGwgdGhlIGNsb3NpbmcgY2FsbGJhY2ssIHJlc3RvcmluZyB0aGUgb25jbGljayBtZXRob2QuXG4gICAgLy8gdGhpcyBpcyBpbiBhIHNldFRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgdGhlIHNob3cgYWdhaW4gYmVmb3JlIHRoZSBjbGljayBpcyBkb25lLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gdGhlIHNhdmUgYnV0dG9uLiBTYXZlcyBhbmQgaGlkZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2F2ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuX2hpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb3VuZCB0byBhcHBseSBidXR0b24uIFNhdmVzIGJ1dCBkb2VzIG5vdCBjbG9zZS4gSXMgdW5kb25lIGJ5IHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FwcGx5KCkge1xuICAgIHRoaXMuYXBwbGllZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogbG9hZCB0aGUgY29sb3IgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IodGhpcy5wcmV2aW91c0NvbG9yLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KFwiVGhlcmUgaXMgbm8gbGFzdCBjb2xvciB0byBsb2FkLi4uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGNvbG9yLCBwbGFjZSB0aGUgcGlja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZ2JhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NldEluaXRpYWw9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIGNvbG9yXG4gICAgaWYgKHNldEluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgcmdiYSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvciA9IHJnYmE7XG4gICAgY29uc3QgaHN2ID0gUkdCVG9IU1YocmdiYS5yLCByZ2JhLmcsIHJnYmEuYik7XG5cbiAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAyICogTWF0aC5QSTtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLnIgKiBoc3YucztcbiAgICBjb25zdCB4ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcbiAgICBjb25zdCB5ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIHggLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICB5IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudEhlaWdodCArIFwicHhcIjtcblxuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcihyZ2JhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBvcGFjaXR5IGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0T3BhY2l0eSh2YWx1ZSkge1xuICAgIHRoaXMuY29sb3IuYSA9IHZhbHVlIC8gMTAwO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBicmlnaHRuZXNzIGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJpZ2h0bmVzcyh2YWx1ZSkge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi52ID0gdmFsdWUgLyAxMDA7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgY29sb3IgcGlja2VyLiBBIGJsYWNrIGNpcmNsZSBvdmVybGF5cyB0aGUgaHVlIGNpcmNsZSB0byBtaW1pYyB0aGUgYnJpZ2h0bmVzcyBkZWNyZWFzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBpY2tlcihyZ2JhID0gdGhpcy5jb2xvcikge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgfVxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuXG4gICAgY3R4LnB1dEltYWdlRGF0YSh0aGlzLmh1ZUNpcmNsZSwgMCwgMCk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLDAsMCxcIiArICgxIC0gaHN2LnYpICsgXCIpXCI7XG4gICAgY3R4LmNpcmNsZSh0aGlzLmNlbnRlckNvb3JkaW5hdGVzLngsIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSwgdGhpcy5yKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudmFsdWUgPSAxMDAgKiBoc3YudjtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IDEwMCAqIHJnYmEuYTtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgY3JlYXRlIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFNpemUoKSB7XG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLndpZHRoID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuaGVpZ2h0ID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhbGwgZG9tIGVsZW1lbnRzXG4gICAqIFRPRE86IGNsZWFudXAsIGxvdHMgb2Ygc2ltaWxhciBkb20gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5mcmFtZS5jbGFzc05hbWUgPSBcInZpcy1jb2xvci1waWNrZXJcIjtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsYXNzTmFtZSA9IFwidmlzLXNlbGVjdG9yXCI7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcblxuICAgIGlmICghdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KSB7XG4gICAgICBjb25zdCBub0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7XG4gICAgICBub0NhbnZhcy5zdHlsZS5jb2xvciA9IFwicmVkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5wYWRkaW5nID0gXCIxMHB4XCI7XG4gICAgICBub0NhbnZhcy5pbm5lclRleHQgPSBcIkVycm9yOiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MIGNhbnZhc1wiO1xuICAgICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgKGN0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAxKTtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXNcbiAgICAgICAgLmdldENvbnRleHQoXCIyZFwiKVxuICAgICAgICAuc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbG9yXCI7XG5cbiAgICB0aGlzLm9wYWNpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eURpdi5jbGFzc05hbWUgPSBcInZpcy1vcGFjaXR5XCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0Rpdi5jbGFzc05hbWUgPSBcInZpcy1icmlnaHRuZXNzXCI7XG5cbiAgICB0aGlzLmFycm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmFycm93RGl2LmNsYXNzTmFtZSA9IFwidmlzLWFycm93XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS50eXBlID0gXCJyYW5nZVwiOyAvLyBOb3Qgc3VwcG9ydGVkIG9uIElFOVxuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWluID0gXCIwXCI7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5tYXggPSBcIjEwMFwiO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETzogQWRkIHNvbWUgZXJyb3IgaGFuZGxpbmcuXG4gICAgfVxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gXCIxMDBcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5jbGFzc05hbWUgPSBcInZpcy1yYW5nZVwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2LmFwcGVuZENoaWxkKHRoaXMub3BhY2l0eVJhbmdlKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuYXBwZW5kQ2hpbGQodGhpcy5icmlnaHRuZXNzUmFuZ2UpO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLWJyaWdodG5lc3NcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbC5pbm5lclRleHQgPSBcImJyaWdodG5lc3M6XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLW9wYWNpdHlcIjtcbiAgICB0aGlzLm9wYWNpdHlMYWJlbC5pbm5lclRleHQgPSBcIm9wYWNpdHk6XCI7XG5cbiAgICB0aGlzLm5ld0NvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmNsYXNzTmFtZSA9IFwidmlzLW5ldy1jb2xvclwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuaW5uZXJUZXh0ID0gXCJuZXdcIjtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1pbml0aWFsLWNvbG9yXCI7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuaW5uZXJUZXh0ID0gXCJpbml0aWFsXCI7XG5cbiAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1jYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBcImNhbmNlbFwiO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpO1xuXG4gICAgdGhpcy5hcHBseUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5pbm5lclRleHQgPSBcImFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fYXBwbHkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5zYXZlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtc2F2ZVwiO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5pbm5lclRleHQgPSBcInNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24ub25jbGljayA9IHRoaXMuX3NhdmUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubG9hZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5sb2FkQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtbG9hZFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5pbm5lclRleHQgPSBcImxvYWQgbGFzdFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fbG9hZExhc3QuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFycm93RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0xhYmVsKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uZXdDb2xvckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmluaXRpYWxDb2xvckRpdik7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2FuY2VsQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYXBwbHlCdXR0b24pO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5zYXZlQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubG9hZEJ1dHRvbik7XG4gIH1cblxuICAvKipcbiAgICogYmluZCBoYW1tZXIgdG8gdGhlIGNvbG9yIHBpY2tlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lciQxKHRoaXMuY29sb3JQaWNrZXJDYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuaGFtbWVyLm9uKFwiaGFtbWVyLmlucHV0XCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRmlyc3QpIHtcbiAgICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5zdGFydFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5tb3ZlXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIGh1ZSBjaXJjbGUuIFRoaXMgaXMgcmVsYXRpdmVseSBoZWF2eSAoMjAwbXMpIGFuZCBpcyBkb25lIG9ubHkgb25jZSBvbiB0aGUgZmlyc3QgdGltZSBpdCBpcyBzaG93bi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZW5lcmF0ZUh1ZUNpcmNsZSgpIHtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIDEpO1xuICAgICAgfVxuICAgICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgaCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gZHJhdyBodWUgY2lyY2xlXG4gICAgICBsZXQgeCwgeSwgaHVlLCBzYXQ7XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiB3ICogMC41LCB5OiBoICogMC41IH07XG4gICAgICB0aGlzLnIgPSAwLjQ5ICogdztcbiAgICAgIGNvbnN0IGFuZ2xlQ29udmVydCA9ICgyICogTWF0aC5QSSkgLyAzNjA7XG4gICAgICBjb25zdCBoZmFjID0gMSAvIDM2MDtcbiAgICAgIGNvbnN0IHNmYWMgPSAxIC8gdGhpcy5yO1xuICAgICAgbGV0IHJnYjtcbiAgICAgIGZvciAoaHVlID0gMDsgaHVlIDwgMzYwOyBodWUrKykge1xuICAgICAgICBmb3IgKHNhdCA9IDA7IHNhdCA8IHRoaXMucjsgc2F0KyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy54ICsgc2F0ICogTWF0aC5zaW4oYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICB5ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy55ICsgc2F0ICogTWF0aC5jb3MoYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICByZ2IgPSBIU1ZUb1JHQihodWUgKiBoZmFjLCBzYXQgKiBzZmFjLCAxKTtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2IoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCI7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KHggLSAwLjUsIHkgLSAwLjUsIDIsIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMSlcIjtcbiAgICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIHRoaXMuaHVlQ2lyY2xlID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIHNlbGVjdG9yLiBUaGlzIGlzIGNhbGxlZCBieSBoYW1tZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlU2VsZWN0b3IoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb2xvclBpY2tlckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gZXZlbnQuY2VudGVyLnggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gZXZlbnQuY2VudGVyLnkgLSByZWN0LnRvcDtcblxuICAgIGNvbnN0IGNlbnRlclkgPSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyRGl2LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBjZW50ZXJYID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRXaWR0aDtcblxuICAgIGNvbnN0IHggPSBsZWZ0IC0gY2VudGVyWDtcbiAgICBjb25zdCB5ID0gdG9wIC0gY2VudGVyWTtcblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih4LCB5KTtcbiAgICBjb25zdCByYWRpdXMgPSAwLjk4ICogTWF0aC5taW4oTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpLCBjZW50ZXJYKTtcblxuICAgIGNvbnN0IG5ld1RvcCA9IE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclk7XG4gICAgY29uc3QgbmV3TGVmdCA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclg7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUudG9wID1cbiAgICAgIG5ld1RvcCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLmxlZnQgPVxuICAgICAgbmV3TGVmdCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCArIFwicHhcIjtcblxuICAgIC8vIHNldCBjb2xvclxuICAgIGxldCBoID0gYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgIGggPSBoIDwgMCA/IGggKyAxIDogaDtcbiAgICBjb25zdCBzID0gcmFkaXVzIC8gdGhpcy5yO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi5oID0gaDtcbiAgICBoc3YucyA9IHM7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuXG4gICAgLy8gdXBkYXRlIHByZXZpZXdzXG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmNvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gIH1cbn07XG5cbi8qKlxuICogV3JhcCBnaXZlbiB0ZXh0IChsYXN0IGFyZ3VtZW50KSBpbiBIVE1MIGVsZW1lbnRzIChhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cykuXG4gKlxuICogQHBhcmFtIHsuLi5hbnl9IHJlc3QgLSBMaXN0IG9mIHRhZyBuYW1lcyBmb2xsb3dlZCBieSBpbm5lciB0ZXh0LlxuICogQHJldHVybnMgQW4gZWxlbWVudCBvciBhIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gd3JhcEluVGFnKC4uLnJlc3QpIHtcbiAgaWYgKHJlc3QubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cy5cIik7XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdFswXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmVzdFswXSk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoLi4ucmVzdC5zbGljZSgxKSkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGZvciBhbGwgcHJvcGVydGllcyBvZiB0aGlzLnBvc3NpYmxlIG9wdGlvbnMsIHlvdSBjYW4gc3VwcGx5IHRoZSBwcm9wZXJ0eSBuYW1lIGluIGFueSBmb3JtIHRvIGxpc3QgdGhlIG9wdGlvbnMuXG4gKiBCb29sZWFuIG9wdGlvbnMgYXJlIHJlY29nbmlzZWQgYXMgQm9vbGVhblxuICogTnVtYmVyIG9wdGlvbnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtkZWZhdWx0IHZhbHVlLCBtaW4gdmFsdWUsIG1heCB2YWx1ZSwgc3RlcHNpemVdXG4gKiBDb2xvcnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFsnY29sb3InLCAnI2ZmZmZmZiddXG4gKiBTdHJpbmdzIHdpdGggc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtvcHRpb24xLCBvcHRpb24yLCBvcHRpb24zLCAuLl1cbiAqXG4gKiBUaGUgb3B0aW9ucyBhcmUgbWF0Y2hlZCB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiBlYWNoIG9mIHRoZSBtb2R1bGVzIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYXJlXG4gKi9cbmxldCBDb25maWd1cmF0b3IkMSA9IGNsYXNzIENvbmZpZ3VyYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50TW9kdWxlICAgICAgICB8IHRoZSBsb2NhdGlvbiB3aGVyZSBwYXJlbnRNb2R1bGUuc2V0T3B0aW9ucygpIGNhbiBiZSBjYWxsZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRDb250YWluZXIgICAgfCB0aGUgZGVmYXVsdCBjb250YWluZXIgb2YgdGhlIG1vZHVsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlndXJlT3B0aW9ucyAgICB8IHRoZSBmdWxseSBjb25maWd1cmVkIGFuZCBwcmVkZWZpbmVkIG9wdGlvbnMgc2V0IGZvdW5kIGluIGFsbE9wdGlvbnMuanNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBpeGVsUmF0aW8gICAgICAgICAgfCBjYW52YXMgcGl4ZWwgcmF0aW9cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGlkZU9wdGlvbiAgICAgICAgfCBjdXN0b20gbG9naWMgdG8gZHluYW1pY2FsbHkgaGlkZSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnRNb2R1bGUsXG4gICAgZGVmYXVsdENvbnRhaW5lcixcbiAgICBjb25maWd1cmVPcHRpb25zLFxuICAgIHBpeGVsUmF0aW8gPSAxLFxuICAgIGhpZGVPcHRpb24gPSAoKSA9PiBmYWxzZVxuICApIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudE1vZHVsZTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyO1xuICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZU9wdGlvbiA9IGhpZGVPcHRpb247XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5wb3B1cENvdW50ZXIgPSAwO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgIGNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICAgICAgc2hvd0J1dHRvbjogdHJ1ZSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuY29uZmlndXJlT3B0aW9ucyA9IGNvbmZpZ3VyZU9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0ge307XG4gICAgdGhpcy5kb21FbGVtZW50cyA9IFtdO1xuICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB0aGlzLnBvcHVwTGltaXQgPSA1O1xuICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgdGhpcy5jb2xvclBpY2tlciA9IG5ldyBDb2xvclBpY2tlciQxKHBpeGVsUmF0aW8pO1xuICAgIHRoaXMud3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGFsbCBvcHRpb25zLlxuICAgKiBCZWNhdXNlIGFsbCBtb2R1bGVzIHBhcnNlIHRoZWlyIG9wdGlvbnMgYnkgdGhlbXNlbHZlcywgd2UganVzdCB1c2UgdGhlaXIgb3B0aW9ucy4gV2UgY29weSB0aGVtIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXNldCB0aGUgcG9wdXAgaGlzdG9yeSBiZWNhdXNlIHRoZSBpbmRpY2VzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuXG4gICAgICBsZXQgZW5hYmxlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuam9pbigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMgY2Fubm90IGJlIG51bGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0J1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dCdXR0b24gPSBvcHRpb25zLnNob3dCdXR0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIGVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICBlbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlT3B0aW9uc1xuICAgKi9cbiAgc2V0TW9kdWxlT3B0aW9ucyhtb2R1bGVPcHRpb25zKSB7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0gbW9kdWxlT3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy5maWx0ZXI7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gdGhpcy5jb25maWd1cmVPcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlndXJlT3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc2hvdyA9IGZpbHRlcihvcHRpb24sIFtdKTtcbiAgICAgICAgICBzaG93ID1cbiAgICAgICAgICAgIHNob3cgfHxcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbb3B0aW9uXSwgW29wdGlvbl0sIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIuaW5kZXhPZihvcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIGxpbmVicmVhayBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAgICAgICBpZiAoY291bnRlciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VJdGVtKFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYSBoZWFkZXIgZm9yIHRoZSBjYXRlZ29yeVxuICAgICAgICAgIHRoaXMuX21ha2VIZWFkZXIob3B0aW9uKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3ViIG9wdGlvbnNcbiAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dKTtcbiAgICAgICAgfVxuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21ha2VCdXR0b24oKTtcbiAgICB0aGlzLl9wdXNoKCk7XG4gICAgLy9+IHRoaXMuY29sb3JQaWNrZXIuaW5zZXJ0VG8odGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYXcgYWxsIERPTSBlbGVtZW50cyBvbiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHVzaCgpIHtcbiAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMud3JhcHBlci5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uLXdyYXBwZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tRWxlbWVudHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Nob3dQb3B1cElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogZGVsZXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53cmFwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcblxuICAgIHRoaXMuX3JlbW92ZVBvcHVwKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBhY3R1YWxPcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsdWUocGF0aCkge1xuICAgIGxldCBiYXNlID0gdGhpcy5tb2R1bGVPcHRpb25zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJhc2VbcGF0aFtpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBiYXNlID0gYmFzZVtwYXRoW2ldXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGwgb3B0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGVkIGluIGFuIGl0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBkb21FbGVtZW50c1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VJdGVtKHBhdGgsIC4uLmRvbUVsZW1lbnRzKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpdGVtLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1pdGVtIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgICBkb21FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogaGVhZGVyIGZvciBtYWpvciBzdWJqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VIZWFkZXIobmFtZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1oZWFkZXJcIjtcbiAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZTtcbiAgICB0aGlzLl9tYWtlSXRlbShbXSwgZGl2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgbGFiZWwsIGlmIGl0IGlzIGFuIG9iamVjdCBsYWJlbCwgaXQgZ2V0cyBkaWZmZXJlbnQgc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RMYWJlbFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUxhYmVsKG5hbWUsIHBhdGgsIG9iamVjdExhYmVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWxhYmVsIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgaWYgKG9iamVjdExhYmVsID09PSB0cnVlKSB7XG4gICAgICB3aGlsZSAoZGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIGRpdi5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoXCJpXCIsIFwiYlwiLCBuYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBuYW1lICsgXCI6XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGRyb3Bkb3duIGxpc3QgZm9yIG11bHRpcGxlIHBvc3NpYmxlIHN0cmluZyBvcHRvaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIHNlbGVjdC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctc2VsZWN0XCI7XG4gICAgbGV0IHNlbGVjdGVkVmFsdWUgPSAwO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgb3B0aW9uLnZhbHVlID0gYXJyW2ldO1xuICAgICAgaWYgKGkgPT09IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gXCJzZWxlY3RlZFwiO1xuICAgICAgfVxuICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGFycltpXTtcbiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBzZWxlY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSByYW5nZSBvYmplY3QgZm9yIG51bWVyaWMgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VSYW5nZShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJyWzBdO1xuICAgIGNvbnN0IG1pbiA9IGFyclsxXTtcbiAgICBjb25zdCBtYXggPSBhcnJbMl07XG4gICAgY29uc3Qgc3RlcCA9IGFyclszXTtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICByYW5nZS5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctcmFuZ2VcIjtcbiAgICB0cnkge1xuICAgICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gbm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHJhbmdlLm1pbiA9IG1pbjtcbiAgICAgIHJhbmdlLm1heCA9IG1heDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICByYW5nZS5zdGVwID0gc3RlcDtcblxuICAgIC8vIHNldCB1cCB0aGUgcG9wdXAgc2V0dGluZ3MgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQuXG4gICAgbGV0IHBvcHVwU3RyaW5nID0gXCJcIjtcbiAgICBsZXQgcG9wdXBWYWx1ZSA9IDA7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmFjdG9yID0gMS4yO1xuICAgICAgaWYgKHZhbHVlIDwgMCAmJiB2YWx1ZSAqIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgKiBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIC8gZmFjdG9yIDwgbWluKSB7XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGguY2VpbCh2YWx1ZSAvIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5taW47XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAqIGZhY3RvciA+IG1heCAmJiBtYXggIT09IDEpIHtcbiAgICAgICAgcmFuZ2UubWF4ID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1heDtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfVxuICAgICAgcmFuZ2UudmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlaW5wdXRcIjtcbiAgICBpbnB1dC52YWx1ZSA9IHJhbmdlLnZhbHVlO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgbWUuX3VwZGF0ZShOdW1iZXIodGhpcy52YWx1ZSksIHBhdGgpO1xuICAgIH07XG4gICAgcmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgcmFuZ2UsIGlucHV0KTtcblxuICAgIC8vIGlmIGEgcG9wdXAgaXMgbmVlZGVkIEFORCBpdCBoYXMgbm90IGJlZW4gc2hvd24gZm9yIHRoaXMgdmFsdWUsIHNob3cgaXQuXG4gICAgaWYgKHBvcHVwU3RyaW5nICE9PSBcIlwiICYmIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gIT09IHBvcHVwVmFsdWUpIHtcbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gPSBwb3B1cFZhbHVlO1xuICAgICAgdGhpcy5fc2V0dXBQb3B1cChwb3B1cFN0cmluZywgaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGJ1dHRvbiBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvblwiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uaW5uZXJUZXh0ID0gXCJnZW5lcmF0ZSBvcHRpb25zXCI7XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9wcmludE9wdGlvbnMoKTtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3ZlciA9ICgpID0+IHtcbiAgICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlclwiO1xuICAgICAgfTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLm9ubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXJcIjtcblxuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKHRoaXMub3B0aW9uc0NvbnRhaW5lcik7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goZ2VuZXJhdGVCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlIHRoZSBwb3B1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldHVwUG9wdXAoc3RyaW5nLCBpbmRleCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5wb3B1cENvdW50ZXIgPCB0aGlzLnBvcHVwTGltaXRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBkaXYuaWQgPSBcInZpcy1jb25maWd1cmF0aW9uLXBvcHVwXCI7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmlubmVyVGV4dCA9IHN0cmluZztcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyICs9IDE7XG4gICAgICB0aGlzLnBvcHVwRGl2ID0geyBodG1sOiBkaXYsIGluZGV4OiBpbmRleCB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUgdGhlIHBvcHVwIGZyb20gdGhlIGRvbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBwb3B1cCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd1BvcHVwSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMucG9wdXBEaXYuaHRtbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudHNbdGhpcy5wb3B1cERpdi5pbmRleF07XG4gICAgICBjb25zdCByZWN0ID0gY29ycmVzcG9uZGluZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5zdHlsZS50b3AgPSByZWN0LnRvcCAtIDMwICsgXCJweFwiOyAvLyAzMCBpcyB0aGUgaGVpZ2h0O1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpO1xuICAgICAgdGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICB9LCAxNTAwKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuZGVsZXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfSwgMTgwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBjaGVja2JveCBmb3IgYm9vbGVhbiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQ2hlY2tib3goZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy5jaGVja2VkLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgY2hlY2tib3gpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciBzdHJpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZVRleHRJbnB1dChkZWZhdWx0VmFsdWUsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgY2hlY2tib3gudHlwZSA9IFwidGV4dFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy10ZXh0XCI7XG4gICAgY2hlY2tib3gudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy52YWx1ZSwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY29sb3IgZmllbGQgd2l0aCBhIGNvbG9yIHBpY2tlciBmb3IgY29sb3IgZmllbGRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGFyclsxXTtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICE9PSBcIm5vbmVcIikge1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayBub25lXCI7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbG9yIDogdmFsdWU7XG4gICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogdXNlZCBieSB0aGUgY29sb3IgYnV0dG9ucyB0byBjYWxsIHRoZSBjb2xvciBwaWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBkaXZcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpIHtcbiAgICAvLyBjbGVhciB0aGUgY2FsbGJhY2sgZnJvbSB0aGlzIGRpdlxuICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKGRpdik7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zaG93KCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENvbG9yKHZhbHVlKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldFVwZGF0ZUNhbGxiYWNrKChjb2xvcikgPT4ge1xuICAgICAgY29uc3QgY29sb3JTdHJpbmcgPVxuICAgICAgICBcInJnYmEoXCIgKyBjb2xvci5yICsgXCIsXCIgKyBjb2xvci5nICsgXCIsXCIgKyBjb2xvci5iICsgXCIsXCIgKyBjb2xvci5hICsgXCIpXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JTdHJpbmc7XG4gICAgICB0aGlzLl91cGRhdGUoY29sb3JTdHJpbmcsIHBhdGgpO1xuICAgIH0pO1xuXG4gICAgLy8gb24gY2xvc2Ugb2YgdGhlIGNvbG9ycGlja2VyLCByZXN0b3JlIHRoZSBjYWxsYmFjay5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENsb3NlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcGFyc2UgYW4gb2JqZWN0IGFuZCBkcmF3IHRoZSBjb3JyZWN0IGl0ZW1zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtBcnJheX0gW3BhdGg9W11dICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tPbmx5PWZhbHNlXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVPYmplY3Qob2JqLCBwYXRoID0gW10sIGNoZWNrT25seSA9IGZhbHNlKSB7XG4gICAgbGV0IHNob3cgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCB2aXNpYmxlSW5TZXQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHN1Yk9iaiBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBzdWJPYmopKSB7XG4gICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICBjb25zdCBpdGVtID0gb2JqW3N1Yk9ial07XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgc3ViT2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIoc3ViT2JqLCBwYXRoKTtcblxuICAgICAgICAgIC8vIGlmIG5lZWRlZCB3ZSBtdXN0IGdvIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICAgICAgaWYgKHNob3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAgICAgICBpdGVtIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHNob3cgPSB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGNoZWNrT25seSA9PT0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmlzaWJsZUluU2V0ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKG5ld1BhdGgpO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycmF5KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlVGV4dElucHV0KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIHNraXAgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5oaWRlT3B0aW9uKHBhdGgsIHN1Yk9iaiwgdGhpcy5tb2R1bGVPcHRpb25zKSkge1xuICAgICAgICAgICAgICAvLyBpbml0aWFsbHkgY29sbGFwc2Ugb3B0aW9ucyB3aXRoIGFuIGRpc2FibGVkIGVuYWJsZWQgb3B0aW9uLlxuICAgICAgICAgICAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkUGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShuZXdQYXRoLCBcImVuYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoZW5hYmxlZFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkVmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgICB2aXNpYmxlSW5TZXQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlQ2hlY2tib3goaXRlbSwgZW5hYmxlZFZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwoc3ViT2JqLCBuZXdQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdChpdGVtLCBuZXdQYXRoKSB8fCB2aXNpYmxlSW5TZXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvbnQga25vdyBob3cgdG8gaGFuZGxlXCIsIGl0ZW0sIHN1Yk9iaiwgbmV3UGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlSW5TZXQ7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSBhcnJheSB0eXBlIG9mIG9wdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUFycmF5KGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIiAmJiBhcnJbMF0gPT09IFwiY29sb3JcIikge1xuICAgICAgdGhpcy5fbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzFdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9tYWtlRHJvcGRvd24oYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogTnVtYmVyKHZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIHRvIHVwZGF0ZSB0aGUgbmV0d29yayB3aXRoIHRoZSBuZXcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGUodmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudC5ib2R5ICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIgJiZcbiAgICAgIHRoaXMucGFyZW50LmJvZHkuZW1pdHRlci5lbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdChcImNvbmZpZ0NoYW5nZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wYXJlbnQuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGJvb2xlYW59IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHt7fX0gb3B0aW9uc09ialxuICAgKiBAcmV0dXJucyB7e319XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCwgb3B0aW9uc09iaiA9IHt9KSB7XG4gICAgbGV0IHBvaW50ZXIgPSBvcHRpb25zT2JqO1xuXG4gICAgLy8gd2hlbiBkcm9wZG93biBib3hlcyBjYW4gYmUgc3RyaW5nIG9yIGJvb2xlYW4sIHdlIHR5cGVjYXN0IGl0IGludG8gY29ycmVjdCB0eXBlc1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsdWU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXRoW2ldICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICAgIGlmIChwb2ludGVyW3BhdGhbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyW3BhdGhbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvaW50ZXJbcGF0aFtpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc09iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByaW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICB3aGlsZSAodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnNDb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgIHdyYXBJblRhZyhcInByZVwiLCBcImNvbnN0IG9wdGlvbnMgPSBcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t9fSBvcHRpb25zXG4gICAqL1xuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdE9wdGlvbnMoXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0udmFsdWUsXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0ucGF0aCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn07XG5cbi8qKlxuICogUG9wdXAgaXMgYSBjbGFzcyB0byBjcmVhdGUgYSBwb3B1cCB3aW5kb3cgd2l0aCBzb21lIHRleHRcbiAqL1xubGV0IFBvcHVwJDEgPSBjbGFzcyBQb3B1cCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgICAgICBUaGUgY29udGFpbmVyIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvdmVyZmxvd01ldGhvZCAgSG93IHRoZSBwb3B1cCBzaG91bGQgYWN0IHRvIG92ZXJmbG93aW5nICgnZmxpcCcgb3IgJ2NhcCcpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIG92ZXJmbG93TWV0aG9kKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5vdmVyZmxvd01ldGhvZCA9IG92ZXJmbG93TWV0aG9kIHx8IFwiY2FwXCI7XG5cbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5wYWRkaW5nID0gNTtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBmcmFtZVxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtdG9vbHRpcFwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgc2V0UG9zaXRpb24oeCwgeSkge1xuICAgIHRoaXMueCA9IHBhcnNlSW50KHgpO1xuICAgIHRoaXMueSA9IHBhcnNlSW50KHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29udGVudCBmb3IgdGhlIHBvcHVwIHdpbmRvdy4gVGhpcyBjYW4gYmUgSFRNTCBjb2RlIG9yIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRWxlbWVudH0gY29udGVudFxuICAgKi9cbiAgc2V0VGV4dChjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICB3aGlsZSAodGhpcy5mcmFtZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cmluZyBjb250YWluaW5nIGxpdGVyYWwgdGV4dCwgZWxlbWVudCBoYXMgdG8gYmUgdXNlZCBmb3IgSFRNTCBkdWUgdG9cbiAgICAgIC8vIFhTUyByaXNrcyBhc3NvY2lhdGVkIHdpdGggaW5uZXJIVE1MIChpLmUuIHByZXZlbnQgWFNTIGJ5IGFjY2lkZW50KS5cbiAgICAgIHRoaXMuZnJhbWUuaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgd2luZG93XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvU2hvd10gICAgU2hvdyBvciBoaWRlIHRoZSB3aW5kb3dcbiAgICovXG4gIHNob3coZG9TaG93KSB7XG4gICAgaWYgKGRvU2hvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb1Nob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkb1Nob3cgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZyYW1lLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudFdpZHRoO1xuXG4gICAgICBsZXQgbGVmdCA9IDAsXG4gICAgICAgIHRvcCA9IDA7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJmbG93TWV0aG9kID09IFwiZmxpcFwiKSB7XG4gICAgICAgIGxldCBpc0xlZnQgPSBmYWxzZSxcbiAgICAgICAgICBpc1RvcCA9IHRydWU7IC8vIFdoZXJlIGFyb3VuZCB0aGUgcG9zaXRpb24gaXQncyBsb2NhdGVkXG5cbiAgICAgICAgaWYgKHRoaXMueSAtIGhlaWdodCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzVG9wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy54ICsgd2lkdGggPiBtYXhXaWR0aCAtIHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzTGVmdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMueCAtIHdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIGlmICh0b3AgKyBoZWlnaHQgKyB0aGlzLnBhZGRpbmcgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICB0b3AgPSBtYXhIZWlnaHQgLSBoZWlnaHQgLSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIHRvcCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIGlmIChsZWZ0ICsgd2lkdGggKyB0aGlzLnBhZGRpbmcgPiBtYXhXaWR0aCkge1xuICAgICAgICAgIGxlZnQgPSBtYXhXaWR0aCAtIHdpZHRoIC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0IDwgdGhpcy5wYWRkaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZSk7IC8vIFJlbW92ZSBlbGVtZW50IGZyb20gRE9NXG4gIH1cbn07XG5cbmxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5sZXQgYWxsT3B0aW9ucztcblxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDEgPSBcImJhY2tncm91bmQ6ICNGRmVlZWU7IGNvbG9yOiAjZGQwMDAwXCI7XG5cbi8qKlxuICogIFVzZWQgdG8gdmFsaWRhdGUgb3B0aW9ucy5cbiAqL1xubGV0IFZhbGlkYXRvciQxID0gY2xhc3MgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJPYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBzdWJPYmplY3QpIHtcbiAgICBlcnJvckZvdW5kID0gZmFsc2U7XG4gICAgYWxsT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgbGV0IHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpZiAoc3ViT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9uc1tzdWJPYmplY3RdO1xuICAgIH1cbiAgICBWYWxpZGF0b3IucGFyc2Uob3B0aW9ucywgdXNlZE9wdGlvbnMsIFtdKTtcbiAgICByZXR1cm4gZXJyb3JGb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHRyYXZlcnNlIGFuIG9iamVjdCByZWN1cnNpdmVseSBhbmQgY2hlY2sgZXZlcnkgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICAgIFZhbGlkYXRvci5jaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBldmVyeSB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbCB0aGUgcGFyc2UgZnVuY3Rpb24gb24gdGhhdCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpIHtcbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIFZhbGlkYXRvci5nZXRTdWdnZXN0aW9uKG9wdGlvbiwgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZU9wdGlvbiA9IG9wdGlvbjtcbiAgICBsZXQgaXNfb2JqZWN0ID0gdHJ1ZTtcblxuICAgIGlmIChcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnNbb3B0aW9uXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICByZWZlcmVuY2VPcHRpb25zLl9fYW55X18gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTk9URTogVGhpcyBvbmx5IHRyaWdnZXJzIGlmIHRoZSBfX2FueV9fIGlzIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgLy8gICAgICAgVEhBVCdTIEEgUkVBTExZIEJBRCBQTEFDRSBUTyBBTExPVyBJVCEhISFcbiAgICAgIC8vIFRPRE86IEV4YW1pbmUgaWYgbmVlZGVkLCByZW1vdmUgaWYgcG9zc2libGVcblxuICAgICAgLy8gX19hbnlfXyBpcyBhIHdpbGRjYXJkLiBBbnkgdmFsdWUgaXMgYWNjZXB0ZWQgYW5kIHdpbGwgYmUgZnVydGhlciBhbmFseXNlZCBieSByZWZlcmVuY2UuXG4gICAgICByZWZlcmVuY2VPcHRpb24gPSBcIl9fYW55X19cIjtcblxuICAgICAgLy8gaWYgdGhlIGFueS1zdWJncm91cCBpcyBub3QgYSBwcmVkZWZpbmVkIG9iamVjdCBpbiB0aGUgY29uZmlndXJhdG9yLFxuICAgICAgLy8gd2UgZG8gbm90IGxvb2sgZGVlcGVyIGludG8gdGhlIG9iamVjdC5cbiAgICAgIGlzX29iamVjdCA9IFZhbGlkYXRvci5nZXRUeXBlKG9wdGlvbnNbb3B0aW9uXSkgPT09IFwib2JqZWN0XCI7XG4gICAgfVxuXG4gICAgbGV0IHJlZk9wdGlvbk9iaiA9IHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXTtcbiAgICBpZiAoaXNfb2JqZWN0ICYmIHJlZk9wdGlvbk9iai5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWZPcHRpb25PYmogPSByZWZPcHRpb25PYmouX190eXBlX187XG4gICAgfVxuXG4gICAgVmFsaWRhdG9yLmNoZWNrRmllbGRzKFxuICAgICAgb3B0aW9uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb24sXG4gICAgICByZWZPcHRpb25PYmosXG4gICAgICBwYXRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIG9wdGlvbiAgICAgICAgICAgfCB0aGUgb3B0aW9uIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICB8IFRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge29iamVjdH0gIHJlZmVyZW5jZU9wdGlvbnMgfCBUaGUgcmVmZXJlbmNlIG9wdGlvbnMgY29udGFpbmluZyBhbGwgb3B0aW9ucyBhbmQgdGhlaXIgYWxsb3dlZCBmb3JtYXRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgcmVmZXJlbmNlT3B0aW9uICB8IFVzdWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBvcHRpb24sIGV4Y2VwdCB3aGVuIGhhbmRsaW5nIGFuIF9fYW55X18gdGFnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZk9wdGlvbk9iaiAgICAgfCBUaGlzIGlzIHRoZSB0eXBlIG9iamVjdCBmcm9tIHRoZSByZWZlcmVuY2Ugb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBhdGggICAgICAgICAgICAgfCB3aGVyZSBpbiB0aGUgb2JqZWN0IGlzIHRoZSBvcHRpb25cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrRmllbGRzKFxuICAgIG9wdGlvbixcbiAgICBvcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgIHJlZk9wdGlvbk9iaixcbiAgICBwYXRoXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjXCIgKyBtZXNzYWdlICsgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKSxcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvblR5cGUgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pO1xuICAgIGNvbnN0IHJlZk9wdGlvblR5cGUgPSByZWZPcHRpb25PYmpbb3B0aW9uVHlwZV07XG5cbiAgICBpZiAocmVmT3B0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpZiB0aGUgdHlwZSBpcyBjb3JyZWN0LCB3ZSBjaGVjayBpZiBpdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgYSBmZXcgc2VsZWN0IHZhbHVlc1xuICAgICAgaWYgKFxuICAgICAgICBWYWxpZGF0b3IuZ2V0VHlwZShyZWZPcHRpb25UeXBlKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgIHJlZk9wdGlvblR5cGUuaW5kZXhPZihvcHRpb25zW29wdGlvbl0pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gXCInICtcbiAgICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgICAnXCIuJyArXG4gICAgICAgICAgICBcIiBBbGxvd2VkIHZhbHVlcyBhcmU6XCIgK1xuICAgICAgICAgICAgVmFsaWRhdG9yLnByaW50KHJlZk9wdGlvblR5cGUpICtcbiAgICAgICAgICAgICcgbm90IFwiJyArXG4gICAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICAgJ1wiLiAnXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25UeXBlID09PSBcIm9iamVjdFwiICYmIHJlZmVyZW5jZU9wdGlvbiAhPT0gXCJfX2FueV9fXCIpIHtcbiAgICAgICAgcGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcHRpb24pO1xuICAgICAgICBWYWxpZGF0b3IucGFyc2UoXG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25dLFxuICAgICAgICAgIHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWZPcHRpb25PYmpbXCJhbnlcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdHlwZSBvZiB0aGUgZmllbGQgaXMgaW5jb3JyZWN0IGFuZCB0aGUgZmllbGQgY2Fubm90IGJlIGFueVxuICAgICAgbG9nKFxuICAgICAgICAnSW52YWxpZCB0eXBlIHJlY2VpdmVkIGZvciBcIicgK1xuICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgJ1wiLiBFeHBlY3RlZDogJyArXG4gICAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKHJlZk9wdGlvbk9iaikpICtcbiAgICAgICAgICBcIi4gUmVjZWl2ZWQgW1wiICtcbiAgICAgICAgICBvcHRpb25UeXBlICtcbiAgICAgICAgICAnXSBcIicgK1xuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSArXG4gICAgICAgICAgJ1wiJ1xuICAgICAgKTtcbiAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBBcnJheS48bnVtYmVyPiB8IERhdGUgfCBOb2RlIHwgTW9tZW50IHwgdW5kZWZpbmVkIHwgbnVsbH0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRUeXBlKG9iamVjdCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xuXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Lm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiZG9tXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Ll9pc0FNb21lbnRPYmplY3QgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFwibW9tZW50XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRTdWdnZXN0aW9uKG9wdGlvbiwgb3B0aW9ucywgcGF0aCkge1xuICAgIGNvbnN0IGxvY2FsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCBmYWxzZSk7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBhbGxPcHRpb25zLCBbXSwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhbFNlYXJjaFRocmVzaG9sZCA9IDg7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoVGhyZXNob2xkID0gNDtcblxuICAgIGxldCBtc2c7XG4gICAgaWYgKGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guaW5kZXhNYXRjaCArXG4gICAgICAgICdcIj9cXG5cXG4nO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBnbG9iYWxTZWFyY2guZGlzdGFuY2UgPD0gZ2xvYmFsU2VhcmNoVGhyZXNob2xkICYmXG4gICAgICBsb2NhbFNlYXJjaC5kaXN0YW5jZSA+IGdsb2JhbFNlYXJjaC5kaXN0YW5jZVxuICAgICkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgXCJQZXJoYXBzIGl0IHdhcyBtaXNwbGFjZWQ/IE1hdGNoaW5nIG9wdGlvbiBmb3VuZCBhdDogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihcbiAgICAgICAgICBnbG9iYWxTZWFyY2gucGF0aCxcbiAgICAgICAgICBnbG9iYWxTZWFyY2guY2xvc2VzdE1hdGNoLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2FsU2VhcmNoLmRpc3RhbmNlIDw9IGxvY2FsU2VhcmNoVGhyZXNob2xkKSB7XG4gICAgICBtc2cgPVxuICAgICAgICAnLiBEaWQgeW91IG1lYW4gXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guY2xvc2VzdE1hdGNoICtcbiAgICAgICAgJ1wiPycgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPVxuICAgICAgICBcIi4gRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZTogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnQoT2JqZWN0LmtleXMob3B0aW9ucykpICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6IFwiJyArIG9wdGlvbiArICdcIicgKyBtc2csXG4gICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEUkMVxuICAgICk7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2UgdGhlIG9wdGlvbnMgaW4gc2VhcmNoIGZvciBhIG1hdGNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWN1cnNpdmU9ZmFsc2VdXG4gICAqIEByZXR1cm5zIHt7Y2xvc2VzdE1hdGNoOiBzdHJpbmcsIHBhdGg6IEFycmF5LCBkaXN0YW5jZTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAgIGxldCBtaW4gPSAxZTk7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaCA9IFwiXCI7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaFBhdGggPSBbXTtcbiAgICBjb25zdCBsb3dlckNhc2VPcHRpb24gPSBvcHRpb24udG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaW5kZXhNYXRjaCA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IG9wIGluIG9wdGlvbnMpIHtcbiAgICAgIGxldCBkaXN0YW5jZTtcbiAgICAgIGlmIChvcHRpb25zW29wXS5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkICYmIHJlY3Vyc2l2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWYWxpZGF0b3IuZmluZEluT3B0aW9ucyhcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgb3B0aW9uc1tvcF0sXG4gICAgICAgICAgY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIG9wKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWluID4gcmVzdWx0LmRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gcmVzdWx0LmNsb3Nlc3RNYXRjaDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gcmVzdWx0LnBhdGg7XG4gICAgICAgICAgbWluID0gcmVzdWx0LmRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSByZXN1bHQuaW5kZXhNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2VPcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSBvcDtcbiAgICAgICAgfVxuICAgICAgICBkaXN0YW5jZSA9IFZhbGlkYXRvci5sZXZlbnNodGVpbkRpc3RhbmNlKG9wdGlvbiwgb3ApO1xuICAgICAgICBpZiAobWluID4gZGlzdGFuY2UpIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2ggPSBvcDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gY29weUFycmF5KHBhdGgpO1xuICAgICAgICAgIG1pbiA9IGRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXN0TWF0Y2g6IGNsb3Nlc3RNYXRjaCxcbiAgICAgIHBhdGg6IGNsb3Nlc3RNYXRjaFBhdGgsXG4gICAgICBkaXN0YW5jZTogbWluLFxuICAgICAgaW5kZXhNYXRjaDogaW5kZXhNYXRjaCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiwgcHJlZml4ID0gXCJQcm9ibGVtIHZhbHVlIGZvdW5kIGF0OiBcXG5cIikge1xuICAgIGxldCBzdHIgPSBcIlxcblxcblwiICsgcHJlZml4ICsgXCJvcHRpb25zID0ge1xcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpICsgMTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gcGF0aFtpXSArIFwiOiB7XFxuXCI7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggKyAxOyBqKyspIHtcbiAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgfVxuICAgIHN0ciArPSBvcHRpb24gKyBcIlxcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggLSBpOyBqKyspIHtcbiAgICAgICAgc3RyICs9IFwiICBcIjtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBcIn1cXG5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0ciArIFwiXFxuXFxuXCI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHByaW50KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICAgIC5yZXBsYWNlKC8oXCIpfChcXFspfChcXF0pfCgsXCJfX3R5cGVfX1wiKS9nLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoLygsKS9nLCBcIiwgXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb21wdXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBnaXZlbiBzdHJpbmdzXG4gICAqIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL1N0cmluZ3MvTGV2ZW5zaHRlaW5fZGlzdGFuY2UjSmF2YVNjcmlwdFxuICAgKlxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5kcmVpIE1hY2tlbnppZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgKlxuICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICpcbiAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGxldmVuc2h0ZWluRGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbWF0cml4ID0gW107XG5cbiAgICAvLyBpbmNyZW1lbnQgYWxvbmcgdGhlIGZpcnN0IGNvbHVtbiBvZiBlYWNoIHJvd1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW2ldO1xuICAgIH1cblxuICAgIC8vIGluY3JlbWVudCBlYWNoIGNvbHVtbiBpbiB0aGUgZmlyc3Qgcm93XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cblxuICAgIC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG1hdHJpeFxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT0gYS5jaGFyQXQoaiAtIDEpKSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAxXVtqIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgICAgICBtYXRyaXhbaSAtIDFdW2ogLSAxXSArIDEsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgIG1hdHJpeFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqXSArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApOyAvLyBkZWxldGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xuICB9XG59O1xuXG5jb25zdCBBY3RpdmF0b3IgPSBBY3RpdmF0b3IkMTtcclxuY29uc3QgQ29sb3JQaWNrZXIgPSBDb2xvclBpY2tlciQxO1xyXG5jb25zdCBDb25maWd1cmF0b3IgPSBDb25maWd1cmF0b3IkMTtcclxuY29uc3QgSGFtbWVyID0gSGFtbWVyJDE7XHJcbmNvbnN0IFBvcHVwID0gUG9wdXAkMTtcclxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFID0gVkFMSURBVE9SX1BSSU5UX1NUWUxFJDE7XHJcbmNvbnN0IFZhbGlkYXRvciA9IFZhbGlkYXRvciQxO1xuXG5leHBvcnQgeyBBY3RpdmF0b3IsIEFsZWEsIENvbG9yUGlja2VyLCBDb25maWd1cmF0b3IsIERFTEVURSwgSFNWVG9IZXgsIEhTVlRvUkdCLCBIYW1tZXIsIFBvcHVwLCBSR0JUb0hTViwgUkdCVG9IZXgsIFZBTElEQVRPUl9QUklOVF9TVFlMRSwgVmFsaWRhdG9yLCBhZGRDbGFzc05hbWUsIGFkZENzc1RleHQsIGJpbmFyeVNlYXJjaEN1c3RvbSwgYmluYXJ5U2VhcmNoVmFsdWUsIGJyaWRnZU9iamVjdCwgY29weUFuZEV4dGVuZEFycmF5LCBjb3B5QXJyYXksIGRlZXBFeHRlbmQsIGRlZXBPYmplY3RBc3NpZ24sIGVhc2luZ0Z1bmN0aW9ucywgZXF1YWxBcnJheSwgZXh0ZW5kLCBmaWxsSWZEZWZpbmVkLCBmb3JFYWNoLCBnZXRBYnNvbHV0ZUxlZnQsIGdldEFic29sdXRlUmlnaHQsIGdldEFic29sdXRlVG9wLCBnZXRTY3JvbGxCYXJXaWR0aCwgZ2V0VGFyZ2V0LCBnZXRUeXBlLCBoYXNQYXJlbnQsIGhleFRvSFNWLCBoZXhUb1JHQiwgaW5zZXJ0U29ydCwgaXNEYXRlLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ZhbGlkSGV4LCBpc1ZhbGlkUkdCLCBpc1ZhbGlkUkdCQSwgbWVyZ2VPcHRpb25zLCBvcHRpb24sIG92ZXJyaWRlT3BhY2l0eSwgcGFyc2VDb2xvciwgcHJldmVudERlZmF1bHQsIHB1cmVEZWVwT2JqZWN0QXNzaWduLCByZWN1cnNpdmVET01EZWxldGUsIHJlbW92ZUNsYXNzTmFtZSwgcmVtb3ZlQ3NzVGV4dCwgc2VsZWN0aXZlQnJpZGdlT2JqZWN0LCBzZWxlY3RpdmVEZWVwRXh0ZW5kLCBzZWxlY3RpdmVFeHRlbmQsIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsIHRocm90dGxlLCB0b0FycmF5LCB0b3BNb3N0LCB1cGRhdGVQcm9wZXJ0eSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmlzLXV0aWwuanMubWFwXG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgbmF0aXZlQ29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgUmVmbGVjdC5jb25zdHJ1Y3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmNvbnN0cnVjdFxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEobmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcblxudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxudmFyIEZPUkNFRCA9IE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHO1xuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiBGT1JDRUQgfSwge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhQ29uc3RydWN0b3IoVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhQ29uc3RydWN0b3IoYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gbmF0aXZlQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICBhcHBseShwdXNoLCAkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChhcHBseShiaW5kLCBUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3RQcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBhcHBseShUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5SZWZsZWN0LmNvbnN0cnVjdDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xufTtcblxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSkgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgIT09IGRlZmluZVByb3BlcnRpZXMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoVCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVCwgRCk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMuc2hhbSkgZGVmaW5lUHJvcGVydGllcy5zaGFtID0gdHJ1ZTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL29iamVjdC9jcmVhdGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIHNldFByb3RvdHlwZU9mOiBzZXRQcm90b3R5cGVPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfc2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRzZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkY3JlYXRlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG4iLCAiaW1wb3J0IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmltcG9ydCBfT2JqZWN0JGdldFByb3RvdHlwZU9mIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIHZhciBfY29udGV4dDtcbiAgX2dldFByb3RvdHlwZU9mID0gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YpLmNhbGwoX2NvbnRleHQpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgX09iamVjdCRnZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCAidmFyIF9TeW1ib2wgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiKTtcbnZhciBfU3ltYm9sJGl0ZXJhdG9yID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanNcIik7XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL2Zvci1lYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbi8vIGBJbnN0YWxsRXJyb3JDYXVzZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtZXJyb3ItY2F1c2UvI3NlYy1lcnJvcm9iamVjdHMtaW5zdGFsbC1lcnJvci1jYXVzZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgb3B0aW9ucykge1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgJ2NhdXNlJyBpbiBvcHRpb25zKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE8sICdjYXVzZScsIG9wdGlvbnMuY2F1c2UpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcblxudmFyIFRFU1QgPSAoZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gU3RyaW5nKG5ldyAkRXJyb3IoYXJnKS5zdGFjayk7IH0pKCd6eGNhc2QnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbnZhciBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkgPSAvXFxuXFxzKmF0IFteOl0qOlteXFxuXSovO1xudmFyIElTX1Y4X09SX0NIQUtSQV9TVEFDSyA9IFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWS50ZXN0KFRFU1QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKElTX1Y4X09SX0NIQUtSQV9TVEFDSyAmJiB0eXBlb2Ygc3RhY2sgPT0gJ3N0cmluZycgJiYgISRFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuICAgIHdoaWxlIChkcm9wRW50cmllcy0tKSBzdGFjayA9IHJlcGxhY2Uoc3RhY2ssIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSwgJycpO1xuICB9IHJldHVybiBzdGFjaztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdhJyk7XG4gIGlmICghKCdzdGFjaycgaW4gZXJyb3IpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIDcpKTtcbiAgcmV0dXJuIGVycm9yLnN0YWNrICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjbGVhckVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXInKTtcbnZhciBFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZScpO1xuXG4vLyBub24tc3RhbmRhcmQgVjhcbnZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlcnJvciwgQywgc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSkge1xuICAgIGlmIChjYXB0dXJlU3RhY2tUcmFjZSkgY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIEMpO1xuICAgIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjbGVhckVycm9yU3RhY2soc3RhY2ssIGRyb3BFbnRyaWVzKSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBSZXN1bHRQcm90b3R5cGUgPSBSZXN1bHQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfUkVDT1JEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX1JFQ09SRCk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0KTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBjb25kaXRpb24pO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfUkVDT1JEKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZS5pdGVyYXRvcjtcbiAgfSBlbHNlIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICghaXRlckZuKSB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdGVyYWJsZSkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlcmFibGUpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IElTX1JFQ09SRCA/IGl0ZXJhYmxlLm5leHQgOiBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaW5zdGFsbEVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJEVycm9yID0gRXJyb3I7XG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbnZhciAkQWdncmVnYXRlRXJyb3IgPSBmdW5jdGlvbiBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIG1lc3NhZ2UgLyogLCBvcHRpb25zICovKSB7XG4gIHZhciBpc0luc3RhbmNlID0gaXNQcm90b3R5cGVPZihBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSwgdGhpcyk7XG4gIHZhciB0aGF0O1xuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICB0aGF0ID0gc2V0UHJvdG90eXBlT2YobmV3ICRFcnJvcigpLCBpc0luc3RhbmNlID8gZ2V0UHJvdG90eXBlT2YodGhpcykgOiBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhhdCA9IGlzSW5zdGFuY2UgPyB0aGlzIDogY3JlYXRlKEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlKTtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgVE9fU1RSSU5HX1RBRywgJ0Vycm9yJyk7XG4gIH1cbiAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdtZXNzYWdlJywgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQobWVzc2FnZSkpO1xuICBpbnN0YWxsRXJyb3JTdGFjayh0aGF0LCAkQWdncmVnYXRlRXJyb3IsIHRoYXQuc3RhY2ssIDEpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIGluc3RhbGxFcnJvckNhdXNlKHRoYXQsIGFyZ3VtZW50c1syXSk7XG4gIHZhciBlcnJvcnNBcnJheSA9IFtdO1xuICBpdGVyYXRlKGVycm9ycywgcHVzaCwgeyB0aGF0OiBlcnJvcnNBcnJheSB9KTtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdlcnJvcnMnLCBlcnJvcnNBcnJheSk7XG4gIHJldHVybiB0aGF0O1xufTtcblxuaWYgKHNldFByb3RvdHlwZU9mKSBzZXRQcm90b3R5cGVPZigkQWdncmVnYXRlRXJyb3IsICRFcnJvcik7XG5lbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IsIHsgbmFtZTogdHJ1ZSB9KTtcblxudmFyIEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlID0gJEFnZ3JlZ2F0ZUVycm9yLnByb3RvdHlwZSA9IGNyZWF0ZSgkRXJyb3IucHJvdG90eXBlLCB7XG4gIGNvbnN0cnVjdG9yOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJEFnZ3JlZ2F0ZUVycm9yKSxcbiAgbWVzc2FnZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICcnKSxcbiAgbmFtZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICdBZ2dyZWdhdGVFcnJvcicpXG59KTtcblxuLy8gYEFnZ3JlZ2F0ZUVycm9yYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZ2dyZWdhdGUtZXJyb3ItY29uc3RydWN0b3JcbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBhcml0eTogMiB9LCB7XG4gIEFnZ3JlZ2F0ZUVycm9yOiAkQWdncmVnYXRlRXJyb3Jcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIEZ1bmN0aW9uID0gZ2xvYmFsLkZ1bmN0aW9uO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciAkbG9jYXRpb24sIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG5mYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIERlbm8gdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3Igb24gYGxvY2F0aW9uYCBhY2Nlc3Mgd2l0aG91dCBgLS1sb2NhdGlvbmAgZmxhZ1xuICAkbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG59KTtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaGFzT3duKHF1ZXVlLCBpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBldmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBnbG9iYWxQb3N0TWVzc2FnZURlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWwucG9zdE1lc3NhZ2UoU3RyaW5nKGlkKSwgJGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArICRsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoaGFuZGxlcikge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZXZlbnRMaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKFxuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmXG4gICAgaXNDYWxsYWJsZShnbG9iYWwucG9zdE1lc3NhZ2UpICYmXG4gICAgIWdsb2JhbC5pbXBvcnRTY3JpcHRzICYmXG4gICAgJGxvY2F0aW9uICYmICRsb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgICFmYWlscyhnbG9iYWxQb3N0TWVzc2FnZURlZmVyKVxuICApIHtcbiAgICBkZWZlciA9IGdsb2JhbFBvc3RNZXNzYWdlRGVmZXI7XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCBpc051bGxPclVuZGVmaW5lZChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUNvbnN0cnVjdG9yKFMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gLyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaGVhZCA9IG51bGw7XG4gIHRoaXMudGFpbCA9IG51bGw7XG59O1xuXG5RdWV1ZS5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2YXIgZW50cnkgPSB7IGl0ZW06IGl0ZW0sIG5leHQ6IG51bGwgfTtcbiAgICB2YXIgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBpZiAodGFpbCkgdGFpbC5uZXh0ID0gZW50cnk7XG4gICAgZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5oZWFkO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgdmFyIG5leHQgPSB0aGlzLmhlYWQgPSBlbnRyeS5uZXh0O1xuICAgICAgaWYgKG5leHQgPT09IG51bGwpIHRoaXMudGFpbCA9IG51bGw7XG4gICAgICByZXR1cm4gZW50cnkuaXRlbTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUXVldWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZScpO1xudmFyIElTX1dFQk9TX1dFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgbWljcm90YXNrID0gcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yICYmIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvci52YWx1ZTtcbnZhciBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghbWljcm90YXNrKSB7XG4gIHZhciBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChmbiA9IHF1ZXVlLmdldCgpKSB0cnkge1xuICAgICAgZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHF1ZXVlLmhlYWQpIG5vdGlmeSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gYmluZChwcm9taXNlLnRoZW4sIHByb21pc2UpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdlXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIC8vIGB3ZWJwYWNrYCBkZXYgc2VydmVyIGJ1ZyBvbiBJRSBnbG9iYWwgbWV0aG9kcyAtIHVzZSBiaW5kKGZuLCBnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgbWljcm90YXNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKCFxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICBxdWV1ZS5hZGQoZm4pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pY3JvdGFzaztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHVzZXJBZ2VudCkgJiYgdHlwZW9mIFBlYmJsZSAhPSAndW5kZWZpbmVkJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdCh1c2VyQWdlbnQpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIHZhbHVlOiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgdmFsdWU6IGVycm9yIH07XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuUHJvbWlzZTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgRGVubyAtLSBEZW5vIGNhc2UgKi9cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIERlbm8gPT0gJ29iamVjdCcgJiYgRGVubyAmJiB0eXBlb2YgRGVuby52ZXJzaW9uID09ICdvYmplY3QnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19ERU5PID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFJU19ERU5PICYmICFJU19OT0RFXG4gICYmIHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCdcbiAgJiYgdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19CUk9XU0VSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyJyk7XG52YXIgSVNfREVOTyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtZGVubycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgU1VCQ0xBU1NJTkcgPSBmYWxzZTtcbnZhciBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgPSBpc0NhbGxhYmxlKGdsb2JhbC5Qcm9taXNlUmVqZWN0aW9uRXZlbnQpO1xuXG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBpc0ZvcmNlZCgnUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFID0gaW5zcGVjdFNvdXJjZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpO1xuICB2YXIgR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSA9IFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFICE9PSBTdHJpbmcoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgLy8gVjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgLy8gV2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgaWYgKCFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIFY4X1ZFUlNJT04gPT09IDY2KSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgbmVlZCBQcm9taXNlI3sgY2F0Y2gsIGZpbmFsbHkgfSBpbiB0aGUgcHVyZSB2ZXJzaW9uIGZvciBwcmV2ZW50aW5nIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgaWYgKElTX1BVUkUgJiYgIShOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSkpIHJldHVybiB0cnVlO1xuICAvLyBXZSBjYW4ndCB1c2UgQEBzcGVjaWVzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxuICBpZiAoIVY4X1ZFUlNJT04gfHwgVjhfVkVSU0lPTiA8IDUxIHx8ICEvbmF0aXZlIGNvZGUvLnRlc3QoUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UpKSB7XG4gICAgLy8gRGV0ZWN0IGNvcnJlY3RuZXNzIG9mIHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSgxKTsgfSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICAgIH07XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gRmFrZVByb21pc2U7XG4gICAgU1VCQ0xBU1NJTkcgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICAgIGlmICghU1VCQ0xBU1NJTkcpIHJldHVybiB0cnVlO1xuICAvLyBVbmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gIH0gcmV0dXJuICFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIChJU19CUk9XU0VSIHx8IElTX0RFTk8pICYmICFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENPTlNUUlVDVE9SOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUixcbiAgUkVKRUNUSU9OX0VWRU5UOiBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQsXG4gIFNVQkNMQVNTSU5HOiBTVUJDTEFTU0lOR1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFDYWxsYWJsZShyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhQ2FsbGFibGUocmVqZWN0KTtcbn07XG5cbi8vIGBOZXdQcm9taXNlQ2FwYWJpbGl0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW5ld3Byb21pc2VjYXBhYmlsaXR5XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9taWNyb3Rhc2snKTtcbnZhciBob3N0UmVwb3J0RXJyb3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycycpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIFF1ZXVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3F1ZXVlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uQ09OU1RSVUNUT1I7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlJFSkVDVElPTl9FVkVOVDtcbnZhciBOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORyA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5TVUJDTEFTU0lORztcbnZhciBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFBST01JU0UpO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yO1xudmFyIFByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbnZhciBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eTtcblxudmFyIERJU1BBVENIX0VWRU5UID0gISEoZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRXZlbnQgJiYgZ2xvYmFsLmRpc3BhdGNoRXZlbnQpO1xudmFyIFVOSEFORExFRF9SRUpFQ1RJT04gPSAndW5oYW5kbGVkcmVqZWN0aW9uJztcbnZhciBSRUpFQ1RJT05fSEFORExFRCA9ICdyZWplY3Rpb25oYW5kbGVkJztcbnZhciBQRU5ESU5HID0gMDtcbnZhciBGVUxGSUxMRUQgPSAxO1xudmFyIFJFSkVDVEVEID0gMjtcbnZhciBIQU5ETEVEID0gMTtcbnZhciBVTkhBTkRMRUQgPSAyO1xuXG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgaXNDYWxsYWJsZSh0aGVuID0gaXQudGhlbikgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgY2FsbFJlYWN0aW9uID0gZnVuY3Rpb24gKHJlYWN0aW9uLCBzdGF0ZSkge1xuICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT09IEZVTEZJTExFRDtcbiAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gIHRyeSB7XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGlmICghb2spIHtcbiAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChzdGF0ZSk7XG4gICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICBjYWxsKHRoZW4sIHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgIHJlamVjdChlcnJvcik7XG4gIH1cbn07XG5cbnZhciBub3RpZnkgPSBmdW5jdGlvbiAoc3RhdGUsIGlzUmVqZWN0KSB7XG4gIGlmIChzdGF0ZS5ub3RpZmllZCkgcmV0dXJuO1xuICBzdGF0ZS5ub3RpZmllZCA9IHRydWU7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlYWN0aW9ucyA9IHN0YXRlLnJlYWN0aW9ucztcbiAgICB2YXIgcmVhY3Rpb247XG4gICAgd2hpbGUgKHJlYWN0aW9uID0gcmVhY3Rpb25zLmdldCgpKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQoc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2UgZXZlbnQgPSB7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcmVhc29uIH07XG4gIGlmICghTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UICYmIChoYW5kbGVyID0gZ2xvYmFsWydvbicgKyBuYW1lXSkpIGhhbmRsZXIoZXZlbnQpO1xuICBlbHNlIGlmIChuYW1lID09PSBVTkhBTkRMRURfUkVKRUNUSU9OKSBob3N0UmVwb3J0RXJyb3JzKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24pO1xufTtcblxudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIElTX1VOSEFORExFRCA9IGlzVW5oYW5kbGVkKHN0YXRlKTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGlmIChJU19VTkhBTkRMRUQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChVTkhBTkRMRURfUkVKRUNUSU9OLCBwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBzdGF0ZS5yZWplY3Rpb24gPSBJU19OT0RFIHx8IGlzVW5oYW5kbGVkKHN0YXRlKSA/IFVOSEFORExFRCA6IEhBTkRMRUQ7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyByZXN1bHQudmFsdWU7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUucmVqZWN0aW9uICE9PSBIQU5ETEVEICYmICFzdGF0ZS5wYXJlbnQ7XG59O1xuXG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4oc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChzdGF0ZS5mYWNhZGUgPT09IHZhbHVlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgdmFyIHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKTtcbiAgICBpZiAodGhlbikge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IGRvbmU6IGZhbHNlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FsbCh0aGVuLCB2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkoc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QoeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIGFDYWxsYWJsZShleGVjdXRvcik7XG4gICAgY2FsbChJbnRlcm5hbCwgdGhpcyk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSksIGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGludGVybmFsUmVqZWN0KHN0YXRlLCBlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIFByb21pc2VQcm90b3R5cGUgPSBQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogbmV3IFF1ZXVlKCksXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG5cbiAgLy8gYFByb21pc2UucHJvdG90eXBlLnRoZW5gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLnRoZW5cbiAgSW50ZXJuYWwucHJvdG90eXBlID0gZGVmaW5lQnVpbHRJbihQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yKSk7XG4gICAgc3RhdGUucGFyZW50ID0gdHJ1ZTtcbiAgICByZWFjdGlvbi5vayA9IGlzQ2FsbGFibGUob25GdWxmaWxsZWQpID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgIHJlYWN0aW9uLmZhaWwgPSBpc0NhbGxhYmxlKG9uUmVqZWN0ZWQpICYmIG9uUmVqZWN0ZWQ7XG4gICAgcmVhY3Rpb24uZG9tYWluID0gSVNfTk9ERSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gUEVORElORykgc3RhdGUucmVhY3Rpb25zLmFkZChyZWFjdGlvbik7XG4gICAgZWxzZSBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gIH0pO1xuXG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUocHJvbWlzZSk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpO1xuICAgIHRoaXMucmVqZWN0ID0gYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpO1xuICB9O1xuXG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikgJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIG5hdGl2ZVRoZW4gPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLnRoZW47XG5cbiAgICBpZiAoIU5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HKSB7XG4gICAgICAvLyBtYWtlIGBQcm9taXNlI3RoZW5gIHJldHVybiBhIHBvbHlmaWxsZWQgYFByb21pc2VgIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBjYWxsKG5hdGl2ZVRoZW4sIHRoYXQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY0MFxuICAgICAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBgLmNvbnN0cnVjdG9yID09PSBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICAgIC8vIG1ha2UgYGluc3RhbmNlb2YgUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgc2V0UHJvdG90eXBlT2YoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBzYWZlXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKS50aGVuKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5jYXRjaFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiwgcmVhbDogdHJ1ZSB9LCB7XG4gICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnY2F0Y2gnXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgY2FsbChjYXBhYmlsaXR5LnJlamVjdCwgdW5kZWZpbmVkLCByKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcblxudmFyIFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPSBnZXRCdWlsdEluKCdQcm9taXNlJyk7XG52YXIgQ0hFQ0tfV1JBUFBFUiA9IElTX1BVUkUgJiYgIUZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SO1xuXG4vLyBgUHJvbWlzZS5yZXNvbHZlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZXNvbHZlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB8fCBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDSEVDS19XUkFQUEVSICYmIHRoaXMgPT09IFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbFNldHRsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbHNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ2Z1bGZpbGxlZCcsIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdyZWplY3RlZCcsIHJlYXNvbjogZXJyb3IgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFueVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYW55OiBmdW5jdGlvbiBhbnkoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIEFnZ3JlZ2F0ZUVycm9yID0gZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKTtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGVycm9yO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10aGVuYWJsZSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10uY2FsbCh7IHRoZW46IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBOT05fR0VORVJJQyB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSBpc0NhbGxhYmxlKG9uRmluYWxseSk7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNmaW5hbGx5YCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnZmluYWxseScsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFueScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG4vLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2Utd2l0aC1yZXNvbHZlcnNcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHdpdGhSZXNvbHZlcnM6IGZ1bmN0aW9uIHdpdGhSZXNvbHZlcnMoKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvbWlzZTogcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZSxcbiAgICAgIHJlc29sdmU6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUsXG4gICAgICByZWplY3Q6IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdFxuICAgIH07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS53aXRoLXJlc29sdmVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xuXG4vLyBgUHJvbWlzZS50cnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgICAocmVzdWx0LmVycm9yID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9wcm9taXNlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuYWdncmVnYXRlLWVycm9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLmFsbC1zZXR0bGVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3Byb21pc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvaW5zdGFuY2UvcmV2ZXJzZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvcmV2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiKTtcbnZhciBfU3ltYm9sID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIik7XG52YXIgX09iamVjdCRjcmVhdGUgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanNcIik7XG52YXIgX09iamVjdCRnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qc1wiKTtcbnZhciBfcHVzaEluc3RhbmNlUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanNcIik7XG52YXIgX09iamVjdCRzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgX1Byb21pc2UgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3Byb21pc2UvaW5kZXguanNcIik7XG52YXIgX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlLmpzXCIpO1xudmFyIF9zbGljZUluc3RhbmNlUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzXCIpO1xuZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7IC8qISByZWdlbmVyYXRvci1ydW50aW1lIC0tIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLiAtLSBsaWNlbnNlIChNSVQpOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL0xJQ0VOU0UgKi9cbiAgbW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lID0gZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICB2YXIgdCxcbiAgICBlID0ge30sXG4gICAgciA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgbiA9IHIuaGFzT3duUHJvcGVydHksXG4gICAgbyA9IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCA/IF9TeW1ib2wgOiB7fSxcbiAgICBhID0gaS5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIixcbiAgICBjID0gaS5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCIsXG4gICAgdSA9IGkudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG4gIGZ1bmN0aW9uIGRlZmluZSh0LCBlLCByKSB7XG4gICAgcmV0dXJuIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBfT2JqZWN0JGNyZWF0ZShpLnByb3RvdHlwZSksXG4gICAgICBjID0gbmV3IENvbnRleHQobiB8fCBbXSk7XG4gICAgcmV0dXJuIG8oYSwgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBtYWtlSW52b2tlTWV0aG9kKHQsIHIsIGMpXG4gICAgfSksIGE7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2godCwgZSwgcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IHQuY2FsbChlLCByKVxuICAgICAgfTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogdFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZS53cmFwID0gd3JhcDtcbiAgdmFyIGggPSBcInN1c3BlbmRlZFN0YXJ0XCIsXG4gICAgbCA9IFwic3VzcGVuZGVkWWllbGRcIixcbiAgICBmID0gXCJleGVjdXRpbmdcIixcbiAgICBzID0gXCJjb21wbGV0ZWRcIixcbiAgICB5ID0ge307XG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuICB2YXIgcCA9IHt9O1xuICBkZWZpbmUocCwgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgdmFyIGQgPSBfT2JqZWN0JGdldFByb3RvdHlwZU9mLFxuICAgIHYgPSBkICYmIGQoZCh2YWx1ZXMoW10pKSk7XG4gIHYgJiYgdiAhPT0gciAmJiBuLmNhbGwodiwgYSkgJiYgKHAgPSB2KTtcbiAgdmFyIGcgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgdmFyIF9jb250ZXh0O1xuICAgIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXSkuY2FsbChfY29udGV4dCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKG8gPT09IHMpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gaSkgdGhyb3cgYTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICBkb25lOiAhMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZm9yIChuLm1ldGhvZCA9IGksIG4uYXJnID0gYTs7KSB7XG4gICAgICAgIHZhciBjID0gbi5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICB2YXIgdSA9IG1heWJlSW52b2tlRGVsZWdhdGUoYywgbik7XG4gICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgIGlmICh1ID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiB1O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJuZXh0XCIgPT09IG4ubWV0aG9kKSBuLnNlbnQgPSBuLl9zZW50ID0gbi5hcmc7ZWxzZSBpZiAoXCJ0aHJvd1wiID09PSBuLm1ldGhvZCkge1xuICAgICAgICAgIGlmIChvID09PSBoKSB0aHJvdyBvID0gcywgbi5hcmc7XG4gICAgICAgICAgbi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBuLm1ldGhvZCAmJiBuLmFicnVwdChcInJldHVyblwiLCBuLmFyZyk7XG4gICAgICAgIG8gPSBmO1xuICAgICAgICB2YXIgcCA9IHRyeUNhdGNoKGUsIHIsIG4pO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcC50eXBlKSB7XG4gICAgICAgICAgaWYgKG8gPSBuLmRvbmUgPyBzIDogbCwgcC5hcmcgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcC5hcmcsXG4gICAgICAgICAgICBkb25lOiBuLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcC50eXBlICYmIChvID0gcywgbi5tZXRob2QgPSBcInRocm93XCIsIG4uYXJnID0gcC5hcmcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSB7XG4gICAgdmFyIG4gPSByLm1ldGhvZCxcbiAgICAgIG8gPSBlLml0ZXJhdG9yW25dO1xuICAgIGlmIChvID09PSB0KSByZXR1cm4gci5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbiAmJiBlLml0ZXJhdG9yW1wicmV0dXJuXCJdICYmIChyLm1ldGhvZCA9IFwicmV0dXJuXCIsIHIuYXJnID0gdCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSwgXCJ0aHJvd1wiID09PSByLm1ldGhvZCkgfHwgXCJyZXR1cm5cIiAhPT0gbiAmJiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ1wiICsgbiArIFwiJyBtZXRob2RcIikpLCB5O1xuICAgIHZhciBpID0gdHJ5Q2F0Y2gobywgZS5pdGVyYXRvciwgci5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IGkudHlwZSkgcmV0dXJuIHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IGkuYXJnLCByLmRlbGVnYXRlID0gbnVsbCwgeTtcbiAgICB2YXIgYSA9IGkuYXJnO1xuICAgIHJldHVybiBhID8gYS5kb25lID8gKHJbZS5yZXN1bHROYW1lXSA9IGEudmFsdWUsIHIubmV4dCA9IGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gci5tZXRob2QgJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksIHIuZGVsZWdhdGUgPSBudWxsLCB5KSA6IGEgOiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLCByLmRlbGVnYXRlID0gbnVsbCwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgX2NvbnRleHQyO1xuICAgIHZhciBlID0ge1xuICAgICAgdHJ5TG9jOiB0WzBdXG4gICAgfTtcbiAgICAxIGluIHQgJiYgKGUuY2F0Y2hMb2MgPSB0WzFdKSwgMiBpbiB0ICYmIChlLmZpbmFsbHlMb2MgPSB0WzJdLCBlLmFmdGVyTG9jID0gdFszXSksIF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDIgPSB0aGlzLnRyeUVudHJpZXMpLmNhbGwoX2NvbnRleHQyLCBlKTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHQuY29tcGxldGlvbiB8fCB7fTtcbiAgICBlLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgZS5hcmcsIHQuY29tcGxldGlvbiA9IGU7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5KHQpLmNhbGwodCwgcHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGUpIHtcbiAgICBpZiAoZSB8fCBcIlwiID09PSBlKSB7XG4gICAgICB2YXIgciA9IGVbYV07XG4gICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUubmV4dCkgcmV0dXJuIGU7XG4gICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgbyA9IC0xLFxuICAgICAgICAgIGkgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIG8oZywgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG8oR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGUuZGlzcGxheU5hbWUgfHwgZS5uYW1lKSk7XG4gIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPyBfT2JqZWN0JHNldFByb3RvdHlwZU9mKHQsIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6ICh0Ll9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBkZWZpbmUodCwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksIHQucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoZyksIHQ7XG4gIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiB0XG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBjLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHtcbiAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBfUHJvbWlzZSk7XG4gICAgdmFyIGEgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKHQsIHIsIG4sIG8pLCBpKTtcbiAgICByZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpID8gYSA6IGEubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LmRvbmUgPyB0LnZhbHVlIDogYS5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhnKSwgZGVmaW5lKGcsIHUsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoZywgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZGVmaW5lKGcsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZS5rZXlzID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IE9iamVjdCh0KSxcbiAgICAgIHIgPSBbXTtcbiAgICBmb3IgKHZhciBuIGluIGUpIF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShyKS5jYWxsKHIsIG4pO1xuICAgIHJldHVybiBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkocikuY2FsbChyKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyByLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIHQgPSByLnBvcCgpO1xuICAgICAgICBpZiAodCBpbiBlKSByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgICAgdmFyIF9jb250ZXh0MztcbiAgICAgIGlmICh0aGlzLnByZXYgPSAwLCB0aGlzLm5leHQgPSAwLCB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHQsIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDMgPSB0aGlzLnRyeUVudHJpZXMpLmNhbGwoX2NvbnRleHQzLCByZXNldFRyeUVudHJ5KSwgIWUpIGZvciAodmFyIHIgaW4gdGhpcykgXCJ0XCIgPT09IHIuY2hhckF0KDApICYmIG4uY2FsbCh0aGlzLCByKSAmJiAhaXNOYU4oK19zbGljZUluc3RhbmNlUHJvcGVydHkocikuY2FsbChyLCAxKSkgJiYgKHRoaXNbcl0gPSB0KTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciB0ID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihlKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBlO1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKG4sIG8pIHtcbiAgICAgICAgcmV0dXJuIGEudHlwZSA9IFwidGhyb3dcIiwgYS5hcmcgPSBlLCByLm5leHQgPSBuLCBvICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCAhIW87XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBvID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IG8gPj0gMDsgLS1vKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy50cnlFbnRyaWVzW29dLFxuICAgICAgICAgIGEgPSBpLmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gaS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChpLnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgYyA9IG4uY2FsbChpLCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgdSA9IG4uY2FsbChpLCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGMgJiYgdSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXUpIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodCwgZSkge1xuICAgICAgZm9yICh2YXIgciA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyByID49IDA7IC0tcikge1xuICAgICAgICB2YXIgbyA9IHRoaXMudHJ5RW50cmllc1tyXTtcbiAgICAgICAgaWYgKG8udHJ5TG9jIDw9IHRoaXMucHJldiAmJiBuLmNhbGwobywgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IG8uZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBpID0gbztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaSAmJiAoXCJicmVha1wiID09PSB0IHx8IFwiY29udGludWVcIiA9PT0gdCkgJiYgaS50cnlMb2MgPD0gZSAmJiBlIDw9IGkuZmluYWxseUxvYyAmJiAoaSA9IG51bGwpO1xuICAgICAgdmFyIGEgPSBpID8gaS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gYS50eXBlID0gdCwgYS5hcmcgPSBlLCBpID8gKHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMubmV4dCA9IGkuZmluYWxseUxvYywgeSkgOiB0aGlzLmNvbXBsZXRlKGEpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHQsIGUpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gXCJicmVha1wiID09PSB0LnR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0LnR5cGUgPyB0aGlzLm5leHQgPSB0LmFyZyA6IFwicmV0dXJuXCIgPT09IHQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHQuYXJnLCB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCIsIHRoaXMubmV4dCA9IFwiZW5kXCIpIDogXCJub3JtYWxcIiA9PT0gdC50eXBlICYmIGUgJiYgKHRoaXMubmV4dCA9IGUpLCB5O1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2godCkge1xuICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMudHJ5RW50cmllc1tlXTtcbiAgICAgICAgaWYgKHIuZmluYWxseUxvYyA9PT0gdCkgcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLCByLmFmdGVyTG9jKSwgcmVzZXRUcnlFbnRyeShyKSwgeTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24gX2NhdGNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLnRyeUxvYyA9PT0gdCkge1xuICAgICAgICAgIHZhciBuID0gci5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChcInRocm93XCIgPT09IG4udHlwZSkge1xuICAgICAgICAgICAgdmFyIG8gPSBuLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkocik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG4vLyBGRjI2LSBidWc6IEFycmF5QnVmZmVycyBhcmUgbm9uLWV4dGVuc2libGUsIGJ1dCBPYmplY3QuaXNFeHRlbnNpYmxlIGRvZXMgbm90IHJlcG9ydCBpdFxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyID09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKGJ1ZmZlcikpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidWZmZXIsICdhJywgeyB2YWx1ZTogOCB9KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRpc0V4dGVuc2libGUoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmlzRXh0ZW5zaWJsZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5pc2V4dGVuc2libGVcbm1vZHVsZS5leHBvcnRzID0gKEZBSUxTX09OX1BSSU1JVElWRVMgfHwgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFKSA/IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFICYmIGNsYXNzb2YoaXQpID09PSAnQXJyYXlCdWZmZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlO1xufSA6ICRpc0V4dGVuc2libGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1wcmV2ZW50ZXh0ZW5zaW9ucyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBpc0V4dGVuc2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcblxudmFyIFJFUVVJUkVEID0gZmFsc2U7XG52YXIgTUVUQURBVEEgPSB1aWQoJ21ldGEnKTtcbnZhciBpZCA9IDA7XG5cbnZhciBzZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBkZWZpbmVQcm9wZXJ0eShpdCwgTUVUQURBVEEsIHsgdmFsdWU6IHtcbiAgICBvYmplY3RJRDogJ08nICsgaWQrKywgLy8gb2JqZWN0IElEXG4gICAgd2Vha0RhdGE6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xuXG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBhIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLm9iamVjdElEO1xufTtcblxudmFyIGdldFdlYWtEYXRhID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiB0aGUgc3RvcmUgb2Ygd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLndlYWtEYXRhO1xufTtcblxuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaSU5HICYmIFJFUVVJUkVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhc093bihpdCwgTUVUQURBVEEpKSBzZXRNZXRhZGF0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cbnZhciBlbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIG1ldGEuZW5hYmxlID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICBSRVFVSVJFRCA9IHRydWU7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mO1xuICB2YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdGVzdFtNRVRBREFUQV0gPSAxO1xuXG4gIC8vIHByZXZlbnQgZXhwb3Npbmcgb2YgbWV0YWRhdGEga2V5XG4gIGlmIChnZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QpLmxlbmd0aCkge1xuICAgIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocmVzdWx0W2ldID09PSBNRVRBREFUQSkge1xuICAgICAgICAgIHNwbGljZShyZXN1bHQsIGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlLmZcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5hYmxlOiBlbmFibGUsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWtEYXRhOiBnZXRXZWFrRGF0YSxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5oaWRkZW5LZXlzW01FVEFEQVRBXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcbiAgdmFyIENvbnN0cnVjdG9yO1xuXG4gIGlmICghREVTQ1JJUFRPUlMgfHwgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpXG4gICAgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7IH0pKVxuICApIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSB7XG4gICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKGFuSW5zdGFuY2UodGFyZ2V0LCBQcm90b3R5cGUpLCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGNvbGxlY3Rpb246IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0YXJnZXRbQURERVJdLCB7IHRoYXQ6IHRhcmdldCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIGZvckVhY2goWydhZGQnLCAnY2xlYXInLCAnZGVsZXRlJywgJ2ZvckVhY2gnLCAnZ2V0JywgJ2hhcycsICdzZXQnLCAna2V5cycsICd2YWx1ZXMnLCAnZW50cmllcyddLCBmdW5jdGlvbiAoS0VZKSB7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT09ICdhZGQnIHx8IEtFWSA9PT0gJ3NldCc7XG4gICAgICBpZiAoS0VZIGluIE5hdGl2ZVByb3RvdHlwZSAmJiAhKElTX1dFQUsgJiYgS0VZID09PSAnY2xlYXInKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb247XG4gICAgICAgICAgaWYgKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSkgcmV0dXJuIEtFWSA9PT0gJ2dldCcgPyB1bmRlZmluZWQgOiBmYWxzZTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY29sbGVjdGlvbltLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgcmV0dXJuIElTX0FEREVSID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBJU19XRUFLIHx8IGRlZmluZVByb3BlcnR5KFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbi5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZhbHNlLCB0cnVlKTtcblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwgZXhwb3J0ZWQpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bnNhZmUgJiYgdGFyZ2V0W2tleV0pIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgc2l6ZTogMFxuICAgICAgfSk7XG4gICAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGF0LnNpemUgPSAwO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgdmFyIHByZXZpb3VzLCBpbmRleDtcbiAgICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sYXN0ID0gZW50cnkgPSB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91czogcHJldmlvdXMgPSBzdGF0ZS5sYXN0LFxuICAgICAgICAgIG5leHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGRhdGEgPSBzdGF0ZS5pbmRleDtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUgPSAwO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5kZWxldGVcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uZXh0O1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgICAgZGVsZXRlIHN0YXRlLmluZGV4W2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uZXh0ID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wcmV2aW91cyA9IHByZXY7XG4gICAgICAgICAgaWYgKHN0YXRlLmZpcnN0ID09PSBlbnRyeSkgc3RhdGUuZmlyc3QgPSBuZXh0O1xuICAgICAgICAgIGlmIChzdGF0ZS5sYXN0ID09PSBlbnRyeSkgc3RhdGUubGFzdCA9IHByZXY7XG4gICAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplLS07XG4gICAgICAgICAgZWxzZSB0aGF0LnNpemUtLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5maXJzdCkge1xuICAgICAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuaGFzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmdldFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52YWx1ZTtcbiAgICAgIH0sXG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IDoge1xuICAgICAgLy8gYFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKSB7XG4gICAgdmFyIElURVJBVE9SX05BTUUgPSBDT05TVFJVQ1RPUl9OQU1FICsgJyBJdGVyYXRvcic7XG4gICAgdmFyIGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICB2YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihJVEVSQVRPUl9OQU1FKTtcbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS57IGtleXMsIHZhbHVlcywgZW50cmllcywgQEBpdGVyYXRvciB9KClgIG1ldGhvZHNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIGRlZmluZUl0ZXJhdG9yKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgICB0eXBlOiBJVEVSQVRPUl9OQU1FLFxuICAgICAgICB0YXJnZXQ6IGl0ZXJhdGVkLFxuICAgICAgICBzdGF0ZTogZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUoaXRlcmF0ZWQpLFxuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmxhc3Q7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghc3RhdGUudGFyZ2V0IHx8ICEoc3RhdGUubGFzdCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuc3RhdGUuZmlyc3QpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09PSAna2V5cycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LmtleSwgZmFsc2UpO1xuICAgICAgaWYgKGtpbmQgPT09ICd2YWx1ZXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS52YWx1ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2VudHJ5LmtleSwgZW50cnkudmFsdWVdLCBmYWxzZSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGVbQEBzcGVjaWVzXWAgYWNjZXNzb3JzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtbWFwLUBAc3BlY2llc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXNldC1AQHNwZWNpZXNcbiAgICBzZXRTcGVjaWVzKENPTlNUUlVDVE9SX05BTUUpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uU3Ryb25nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIGBNYXBgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC1vYmplY3RzXG5jb2xsZWN0aW9uKCdNYXAnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25TdHJvbmcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWFwJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5NYXA7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc29tZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdrZXlzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2tleXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQua2V5cztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUua2V5cylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlJyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbnZhciBtZXJnZVNvcnQgPSBmdW5jdGlvbiAoYXJyYXksIGNvbXBhcmVmbikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB2YXIgbWlkZGxlID0gZmxvb3IobGVuZ3RoIC8gMik7XG4gIHJldHVybiBsZW5ndGggPCA4ID8gaW5zZXJ0aW9uU29ydChhcnJheSwgY29tcGFyZWZuKSA6IG1lcmdlKFxuICAgIGFycmF5LFxuICAgIG1lcmdlU29ydChhcnJheVNsaWNlKGFycmF5LCAwLCBtaWRkbGUpLCBjb21wYXJlZm4pLFxuICAgIG1lcmdlU29ydChhcnJheVNsaWNlKGFycmF5LCBtaWRkbGUpLCBjb21wYXJlZm4pLFxuICAgIGNvbXBhcmVmblxuICApO1xufTtcblxudmFyIGluc2VydGlvblNvcnQgPSBmdW5jdGlvbiAoYXJyYXksIGNvbXBhcmVmbikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB2YXIgaSA9IDE7XG4gIHZhciBlbGVtZW50LCBqO1xuXG4gIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgaiA9IGk7XG4gICAgZWxlbWVudCA9IGFycmF5W2ldO1xuICAgIHdoaWxlIChqICYmIGNvbXBhcmVmbihhcnJheVtqIC0gMV0sIGVsZW1lbnQpID4gMCkge1xuICAgICAgYXJyYXlbal0gPSBhcnJheVstLWpdO1xuICAgIH1cbiAgICBpZiAoaiAhPT0gaSsrKSBhcnJheVtqXSA9IGVsZW1lbnQ7XG4gIH0gcmV0dXJuIGFycmF5O1xufTtcblxudmFyIG1lcmdlID0gZnVuY3Rpb24gKGFycmF5LCBsZWZ0LCByaWdodCwgY29tcGFyZWZuKSB7XG4gIHZhciBsbGVuZ3RoID0gbGVmdC5sZW5ndGg7XG4gIHZhciBybGVuZ3RoID0gcmlnaHQubGVuZ3RoO1xuICB2YXIgbGluZGV4ID0gMDtcbiAgdmFyIHJpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGxpbmRleCA8IGxsZW5ndGggfHwgcmluZGV4IDwgcmxlbmd0aCkge1xuICAgIGFycmF5W2xpbmRleCArIHJpbmRleF0gPSAobGluZGV4IDwgbGxlbmd0aCAmJiByaW5kZXggPCBybGVuZ3RoKVxuICAgICAgPyBjb21wYXJlZm4obGVmdFtsaW5kZXhdLCByaWdodFtyaW5kZXhdKSA8PSAwID8gbGVmdFtsaW5kZXgrK10gOiByaWdodFtyaW5kZXgrK11cbiAgICAgIDogbGluZGV4IDwgbGxlbmd0aCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdO1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2VTb3J0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIGZpcmVmb3ggPSB1c2VyQWdlbnQubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvaSk7XG5cbm1vZHVsZS5leHBvcnRzID0gISFmaXJlZm94ICYmICtmaXJlZm94WzFdO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBVQSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9NU0lFfFRyaWRlbnQvLnRlc3QoVUEpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHdlYmtpdCA9IHVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcXC8oXFxkKylcXC4vKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIXdlYmtpdCAmJiArd2Via2l0WzFdO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpbnRlcm5hbFNvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc29ydCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIEZGID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uJyk7XG52YXIgSUVfT1JfRURHRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZScpO1xudmFyIFY4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgV0VCS0lUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS13ZWJraXQtdmVyc2lvbicpO1xuXG52YXIgdGVzdCA9IFtdO1xudmFyIG5hdGl2ZVNvcnQgPSB1bmN1cnJ5VGhpcyh0ZXN0LnNvcnQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyh0ZXN0LnB1c2gpO1xuXG4vLyBJRTgtXG52YXIgRkFJTFNfT05fVU5ERUZJTkVEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pO1xuLy8gVjggYnVnXG52YXIgRkFJTFNfT05fTlVMTCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KG51bGwpO1xufSk7XG4vLyBPbGQgV2ViS2l0XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3NvcnQnKTtcblxudmFyIFNUQUJMRV9TT1JUID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZmVhdHVyZSBkZXRlY3Rpb24gY2FuIGJlIHRvbyBzbG93LCBzbyBjaGVjayBlbmdpbmVzIHZlcnNpb25zXG4gIGlmIChWOCkgcmV0dXJuIFY4IDwgNzA7XG4gIGlmIChGRiAmJiBGRiA+IDMpIHJldHVybjtcbiAgaWYgKElFX09SX0VER0UpIHJldHVybiB0cnVlO1xuICBpZiAoV0VCS0lUKSByZXR1cm4gV0VCS0lUIDwgNjAzO1xuXG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGNvZGUsIGNociwgdmFsdWUsIGluZGV4O1xuXG4gIC8vIGdlbmVyYXRlIGFuIGFycmF5IHdpdGggbW9yZSA1MTIgZWxlbWVudHMgKENoYWtyYSBhbmQgb2xkIFY4IGZhaWxzIG9ubHkgaW4gdGhpcyBjYXNlKVxuICBmb3IgKGNvZGUgPSA2NTsgY29kZSA8IDc2OyBjb2RlKyspIHtcbiAgICBjaHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICBjYXNlIDY2OiBjYXNlIDY5OiBjYXNlIDcwOiBjYXNlIDcyOiB2YWx1ZSA9IDM7IGJyZWFrO1xuICAgICAgY2FzZSA2ODogY2FzZSA3MTogdmFsdWUgPSA0OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHZhbHVlID0gMjtcbiAgICB9XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA0NzsgaW5kZXgrKykge1xuICAgICAgdGVzdC5wdXNoKHsgazogY2hyICsgaW5kZXgsIHY6IHZhbHVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRlc3Quc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi52IC0gYS52OyB9KTtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0ZXN0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IHRlc3RbaW5kZXhdLmsuY2hhckF0KDApO1xuICAgIGlmIChyZXN1bHQuY2hhckF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gY2hyKSByZXN1bHQgKz0gY2hyO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCAhPT0gJ0RHQkVGSEFDSUpLJztcbn0pO1xuXG52YXIgRk9SQ0VEID0gRkFJTFNfT05fVU5ERUZJTkVEIHx8ICFGQUlMU19PTl9OVUxMIHx8ICFTVFJJQ1RfTUVUSE9EIHx8ICFTVEFCTEVfU09SVDtcblxudmFyIGdldFNvcnRDb21wYXJlID0gZnVuY3Rpb24gKGNvbXBhcmVmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTE7XG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gK2NvbXBhcmVmbih4LCB5KSB8fCAwO1xuICAgIHJldHVybiB0b1N0cmluZyh4KSA+IHRvU3RyaW5nKHkpID8gMSA6IC0xO1xuICB9O1xufTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvcnRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSBhQ2FsbGFibGUoY29tcGFyZWZuKTtcblxuICAgIHZhciBhcnJheSA9IHRvT2JqZWN0KHRoaXMpO1xuXG4gICAgaWYgKFNUQUJMRV9TT1JUKSByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWQgPyBuYXRpdmVTb3J0KGFycmF5KSA6IG5hdGl2ZVNvcnQoYXJyYXksIGNvbXBhcmVmbik7XG5cbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB2YXIgYXJyYXlMZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShhcnJheSk7XG4gICAgdmFyIGl0ZW1zTGVuZ3RoLCBpbmRleDtcblxuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoaW5kZXggaW4gYXJyYXkpIHB1c2goaXRlbXMsIGFycmF5W2luZGV4XSk7XG4gICAgfVxuXG4gICAgaW50ZXJuYWxTb3J0KGl0ZW1zLCBnZXRTb3J0Q29tcGFyZShjb21wYXJlZm4pKTtcblxuICAgIGl0ZW1zTGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlbXMpO1xuICAgIGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChpbmRleCA8IGl0ZW1zTGVuZ3RoKSBhcnJheVtpbmRleF0gPSBpdGVtc1tpbmRleCsrXTtcbiAgICB3aGlsZSAoaW5kZXggPCBhcnJheUxlbmd0aCkgZGVsZXRlUHJvcGVydHlPclRocm93KGFycmF5LCBpbmRleCsrKTtcblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb3J0Jyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NvcnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb3J0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvcnQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvcnQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAndmFsdWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC52YWx1ZXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnZhbHVlcylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pdGVyYXRvclwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2VudHJpZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5lbnRyaWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5lbnRyaWVzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbmxldCBnZXRSYW5kb21WYWx1ZXM7XG5jb25zdCBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsICJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cblxuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiBieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghdmFsaWRhdGUodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICB9XG5cbiAgcmV0dXJuIHV1aWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ2lmeTsiLCAiY29uc3QgcmFuZG9tVVVJRCA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5yYW5kb21VVUlEICYmIGNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmFuZG9tVVVJRFxufTsiLCAiaW1wb3J0IG5hdGl2ZSBmcm9tICcuL25hdGl2ZS5qcyc7XG5pbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCB7IHVuc2FmZVN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgaWYgKG5hdGl2ZS5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmF0aXZlLnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG4gIHJuZHNbNl0gPSBybmRzWzZdICYgMHgwZiB8IDB4NDA7XG4gIHJuZHNbOF0gPSBybmRzWzhdICYgMHgzZiB8IDB4ODA7IC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuXG4gIGlmIChidWYpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgcmV0dXJuIHVuc2FmZVN0cmluZ2lmeShybmRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjQ7IiwgImltcG9ydCB7IEFzc2lnbmFibGUgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcbmltcG9ydCB7IERhdGFTdHJlYW0gfSBmcm9tIFwiLi9kYXRhLXN0cmVhbVwiO1xuXG50eXBlIFZhbHVlT2Y8VD4gPSBUW2tleW9mIFRdO1xuXG4vKiogVmFsaWQgaWQgdHlwZS4gKi9cbmV4cG9ydCB0eXBlIElkID0gbnVtYmVyIHwgc3RyaW5nO1xuLyoqIE51bGxhYmxlIGlkIHR5cGUuICovXG5leHBvcnQgdHlwZSBPcHRJZCA9IHVuZGVmaW5lZCB8IG51bGwgfCBJZDtcbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgYSB2YWx1ZSBjYW4gYmUgdXNlZCBhcyBhbiBpZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCBpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIElkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XG59XG5cbi8qKlxuICogTWFrZSBhbiBvYmplY3QgZGVlcGx5IHBhcnRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIGFueVtdIHwgRnVuY3Rpb24gfCBOb2RlXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgPyB7IFtrZXkgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW2tleV0+IH1cbiAgOiBUO1xuXG4vKipcbiAqIEFuIGl0ZW0gdGhhdCBtYXkgKHtAbGluayBJZH0pIG9yIG1heSBub3QgKGFic2VudCwgdW5kZWZpbmVkIG9yIG51bGwpIGhhdmUgYW4gaWQgcHJvcGVydHkuXG4gKlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgUGFydEl0ZW08SWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IFBhcnRpYWw8UmVjb3JkPElkUHJvcCwgT3B0SWQ+Pjtcbi8qKlxuICogQW4gaXRlbSB0aGF0IGhhcyBhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gaWQgYW5kIGFsbCBvdGhlciByZXF1aXJlZCBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRnVsbEl0ZW08XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gPSBJdGVtICYgUmVjb3JkPElkUHJvcCwgSWQ+O1xuLyoqXG4gKiBBbiBpdGVtIHRoYXQgaGFzIGEgcHJvcGVydHkgY29udGFpbmluZyBhbiBpZCBhbmQgb3B0aW9uYWxseSBvdGhlciBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgVXBkYXRlSXRlbTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiA9IEFzc2lnbmFibGU8RnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4gJiBSZWNvcmQ8SWRQcm9wLCBJZD47XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIGl0ZW0gaGFzIGFuIGlkIChpcyBhIHtAbGluayBGdWxsSXRlbX0pLlxuICpcbiAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIGlkUHJvcCAtIE5hbWUgb2YgdGhlIGlkIHByb3BlcnR5LlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoaXMgdmFsdWUgaXMgYSB7QGxpbmsgRnVsbEl0ZW19LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGxJdGVtPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+KGl0ZW06IEl0ZW0sIGlkUHJvcDogSWRQcm9wKTogaXRlbSBpcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIGl0ZW1baWRQcm9wXSAhPSBudWxsO1xufVxuXG4vKiogQWRkIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEV2ZW50UGF5bG9hZCB7XG4gIC8qKiBJZHMgb2YgYWRkZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xufVxuLyoqIFVwZGF0ZSBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVFdmVudFBheWxvYWQ8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKiogSWRzIG9mIHVwZGF0ZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xuICAvKiogSXRlbXMgYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGlzIHVwZGF0ZS4gKi9cbiAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogSXRlbXMgYXMgdGhleSBhcmUgbm93LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBKdXN0IGdldCB0aGUgZGF0YSBmcm9tIHRoZSBkYXRhIHNldCBvciBkYXRhIHZpZXcuXG4gICAqL1xuICBkYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG59XG4vKiogUmVtb3ZlIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbW92ZUV2ZW50UGF5bG9hZDxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIC8qKiBJZHMgb2YgcmVtb3ZlZCBpdGVtcy4gKi9cbiAgaXRlbXM6IElkW107XG4gIC8qKiBJdGVtcyBhcyB0aGV5IHdlcmUgYmVmb3JlIHRoZWlyIHJlbW92YWwuICovXG4gIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbn1cblxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyAoZXZlbnQgbmFtZSDihpIgcGF5bG9hZCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQYXlsb2FkczxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIGFkZDogQWRkRXZlbnRQYXlsb2FkO1xuICB1cGRhdGU6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xuICByZW1vdmU6IFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xufVxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBwYXlsb2FkKS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFBheWxvYWRzV2l0aEFueTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBleHRlbmRzIEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPiB7XG4gIFwiKlwiOiBWYWx1ZU9mPEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPj47XG59XG5cbi8qKlxuICogTWFwIG9mIGV2ZW50IGNhbGxiYWNrIHR5cGVzIChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3M8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgYWRkKG5hbWU6IFwiYWRkXCIsIHBheWxvYWQ6IEFkZEV2ZW50UGF5bG9hZCB8IG51bGwsIHNlbmRlcklkPzogSWQgfCBudWxsKTogdm9pZDtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHVwZGF0ZShcbiAgICBuYW1lOiBcInVwZGF0ZVwiLFxuICAgIHBheWxvYWQ6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+IHwgbnVsbCxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgcmVtb3ZlKFxuICAgIG5hbWU6IFwicmVtb3ZlXCIsXG4gICAgcGF5bG9hZDogUmVtb3ZlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4gfCBudWxsLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG59XG4vKipcbiAqIE1hcCBvZiBldmVudCBjYWxsYmFjayB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3NXaXRoQW55PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGV4dGVuZHMgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCAoe0BsaW5rIEV2ZW50TmFtZX0pLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIERhdGEgYWJvdXQgdGhlIGl0ZW1zIGFmZmVjdGVkIGJ5IHRoaXMgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIEEgc2VuZGVySWQsIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2hpY2ggdHJpZ2dlcmVkIHRoZSBldmVudC4gSWYgc2VuZGVySWQgaXMgbm90IHByb3ZpZGVkLCB0aGUgYXJndW1lbnQgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICBcIipcIjxOIGV4dGVuZHMga2V5b2YgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPj4oXG4gICAgbmFtZTogTixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bTl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbn1cblxuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcy4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50TmFtZSA9IGtleW9mIEV2ZW50UGF5bG9hZHM8bmV2ZXIsIFwiXCI+O1xuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcyBhbmQgJyonIHRvIGxpc3RlbiBmb3IgYWxsLiAqL1xuZXhwb3J0IHR5cGUgRXZlbnROYW1lV2l0aEFueSA9IGtleW9mIEV2ZW50UGF5bG9hZHNXaXRoQW55PG5ldmVyLCBcIlwiPjtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBvcmRlciBwYXJhbWV0ZXIuXG4gKiAtIEEgc3RyaW5nIHZhbHVlIGRldGVybWluZXMgd2hpY2ggcHJvcGVydHkgd2lsbCBiZSB1c2VkIGZvciBzb3J0aW5nICh1c2luZyA8IGFuZCA+IG9wZXJhdG9ycyBmb3IgbnVtZXJpYyBjb21wYXJpc29uKS5cbiAqIC0gQSBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdGhlIHNhbWUgd2F5IGFzIGluIEFycmF5LnNvcnQuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YUludGVyZmFjZU9yZGVyPEl0ZW0+ID1cbiAgfCBrZXlvZiBJdGVtXG4gIHwgKChhOiBJdGVtLCBiOiBJdGVtKSA9PiBudW1iZXIpO1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm4gdHlwZSBpbmRlcGVuZGVudCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0Jhc2U8SXRlbT4ge1xuICAvKipcbiAgICogQW4gYXJyYXkgd2l0aCBmaWVsZCBuYW1lcywgb3IgYW4gb2JqZWN0IHdpdGggY3VycmVudCBmaWVsZCBuYW1lIGFuZCBuZXcgZmllbGQgbmFtZSB0aGF0IHRoZSBmaWVsZCBpcyByZXR1cm5lZCBhcy4gQnkgZGVmYXVsdCwgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGFyZSBlbWl0dGVkLiBXaGVuIGZpZWxkcyBpcyBkZWZpbmVkLCBvbmx5IHRoZSBwcm9wZXJ0aWVzIHdob3NlIG5hbWUgaXMgc3BlY2lmaWVkIGluIGZpZWxkcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogV2FybmluZyoqOiBUaGVyZSBpcyBubyBUeXBlU2NyaXB0IHN1cHBvcnQgZm9yIHRoaXMuXG4gICAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZ2V0IG9wdGlvbnMgKHJldHVybnMgYSBzaW5nbGUgaXRlbSBvciBhbiBhcnJheSkuXG4gKlxuICogQHJlbWFya3NcbiAqIFdoZXRoZXIgYW4gaXRlbSBvciBhbmQgYXJyYXkgb2YgaXRlbXMgaXMgcmV0dXJuZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdHlwZSBvZiB0aGUgaWQocykgYXJndW1lbnQuXG4gKiBJZiBhbiBhcnJheSBvZiBpZHMgaXMgcmVxdWVzdGVkIGFuIGFycmF5IG9mIGl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiBhIHNpbmdsZSBpZCBpcyByZXF1ZXN0ZWQgYSBzaW5nbGUgaXRlbSAob3IgbnVsbCBpZiB0aGUgaWQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBpdGVtKSB3aWxsIGJlIHJldHVybmVkLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzaW5nbGUgaXRlbSAoaWYgaW52b2tlZCB3aXRoIGFuIGlkKSBvciBhbiBhcnJheSBvZiBpdGVtcyAoaWYgaW52b2tlZCB3aXRoIGFuIGFycmF5IG9mIGlkcykuICovXG4gIHJldHVyblR5cGU/OiB1bmRlZmluZWQgfCBcIkFycmF5XCI7XG59XG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm5zIGFuIG9iamVjdCkuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSByZXR1cm5lZCBvYmplY3QgaGFzIGlkcyBhcyBrZXlzIGFuZCBpdGVtcyBhcyB2YWx1ZXMgb2YgY29ycmVzcG9uZGluZyBpZHMuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG1hcCAoaWQg4oaSIGl0ZW0pLiAqL1xuICByZXR1cm5UeXBlOiBcIk9iamVjdFwiO1xufVxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJucyBzaW5nbGUgaXRlbSwgYW4gYXJyYXkgb3Igb2JqZWN0KS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgdHlwZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiA9XG4gIHwgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICB8IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+O1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBpZHMgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBmb3IgZWFjaCBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEFuIGFycmF5IHdpdGggZmllbGQgbmFtZXMsIG9yIGFuIG9iamVjdCB3aXRoIGN1cnJlbnQgZmllbGQgbmFtZSBhbmQgbmV3IGZpZWxkIG5hbWUgdGhhdCB0aGUgZmllbGQgaXMgcmV0dXJuZWQgYXMuIEJ5IGRlZmF1bHQsIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtcyBhcmUgZW1pdHRlZC4gV2hlbiBmaWVsZHMgaXMgZGVmaW5lZCwgb25seSB0aGUgcHJvcGVydGllcyB3aG9zZSBuYW1lIGlzIHNwZWNpZmllZCBpbiBmaWVsZHMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgaXRlbXMuICovXG4gIGZpZWxkcz86IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBtYXAgb3ByaW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIE9yaWdpbmFsIC0gVGhlIG9yaWdpbmFsIGl0ZW0gdHlwZSBpbiB0aGUgZGF0YS5cbiAqIEB0eXBlUGFyYW0gTWFwcGVkIC0gVGhlIHR5cGUgYWZ0ZXIgbWFwcGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxPcmlnaW5hbCwgTWFwcGVkPiB7XG4gIC8qKiBBbiBhcnJheSB3aXRoIGZpZWxkIG5hbWVzLCBvciBhbiBvYmplY3Qgd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUgYW5kIG5ldyBmaWVsZCBuYW1lIHRoYXQgdGhlIGZpZWxkIGlzIHJldHVybmVkIGFzLiBCeSBkZWZhdWx0LCBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgYXJlIGVtaXR0ZWQuIFdoZW4gZmllbGRzIGlzIGRlZmluZWQsIG9ubHkgdGhlIHByb3BlcnRpZXMgd2hvc2UgbmFtZSBpcyBzcGVjaWZpZWQgaW4gZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIGl0ZW1zLiAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBPcmlnaW5hbCkgPT4gYm9vbGVhbjtcbiAgLyoqIE9yZGVyIHRoZSBpdGVtcyBieSBhIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uICovXG4gIG9yZGVyPzogRGF0YUludGVyZmFjZU9yZGVyPE1hcHBlZD47XG59XG5cbi8qKlxuICogQ29tbW9uIGludGVyZmFjZSBmb3IgZGF0YSBzZXRzIGFuZCBkYXRhIHZpZXcuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZCAobWlzc2luZyBpZHMgd2lsbCBiZSBnZW5lcmF0ZWQgdXBvbiBpbnNlcnRpb24pLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgSXRlbSB0eXBlIHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4ge1xuICAvKiogVGhlIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgbGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBrZXkgb2YgaWQgcHJvcGVydHkuICovXG4gIGlkUHJvcDogSWRQcm9wO1xuXG4gIC8qKlxuICAgKiBBZGQgYSB1bml2ZXJzYWwgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgKmAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW55IG9mIHRoZSBldmVudHMgYGFkZGAsIGB1cGRhdGVgLCBhbmQgYHJlbW92ZWAgb2NjdXJzLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcIipcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYGFkZGAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgYWRkYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIGFkZGVkLCBvciB3aGVuIGFuIGl0ZW0gaXMgdXBkYXRlZCB3aGlsZSBub3QgeWV0IGV4aXN0aW5nLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcImFkZFwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl0pOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGEgYHJlbW92ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgcmVtb3ZlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgdXBkYXRlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBleGlzdGluZyBpdGVtIG9yIGEgc2V0IG9mIGV4aXN0aW5nIGl0ZW1zIGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHVuaXZlcnNhbCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiKlwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdKTogdm9pZDtcbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBgYWRkYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiYWRkXCIsIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBgcmVtb3ZlYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zLlxuICAgKi9cbiAgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyByZXF1ZXN0ZWQgaXRlbXMuXG4gICAqL1xuICBnZXQob3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPik6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBhcmUgbm8gaXRlbXMpLlxuICAgKi9cbiAgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgcmVxdWVzdGVkIGl0ZW1zIG9yIGlmIHJlcXVlc3RlZCBhbiBvYmplY3QgbWFwIG9mIGl0ZW1zIChtYXkgYmUgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGFyZSBubyBpdGVtcykuXG4gICAqL1xuICBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBvciBudWxsIGlmIHRoZSBpZCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGl0ZW0uXG4gICAqL1xuICBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIG9yIG51bGwgaWYgdGhlIGlkIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbS5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIGlmIGZvdW5kIG9yIG51bGwgb3RoZXJ3aXNlLiBJZiByZXF1ZXN0ZWQgYW4gb2JqZWN0IG1hcCB3aXRoIDAgdG8gMSBpdGVtcy5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICogSWYgcmVxdWVzdGVkIGFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gSWQgb3IgaWRzIHRvIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIGl0ZW1zIChmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSBpZHMgKHNpbmdsZSBvciBhcnJheSkgYW5kIHRoZSBvcHRpb25zLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIERhdGFTZXQgdG8gd2hpY2ggdGhlIGluc3RhbmNlIGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSBpcyBjb25uZWN0ZWQuXG4gICAqIEluIGNhc2UgdGhlcmUgaXMgYSBjaGFpbiBvZiBtdWx0aXBsZSBEYXRhVmlld3MsIHRoZSByb290IERhdGFTZXQgb2YgdGhpcyBjaGFpbiBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRhdGEgc2V0IHRoYXQgYWN0dWFsbHkgY29udGFpbnMgdGhlIGRhdGEuXG4gICAqL1xuICBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPjtcblxuICAvKipcbiAgICogR2V0IGlkcyBvZiBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiByZXR1cm5lZCBpZHMgdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICovXG4gIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiBpdGVyYXRpb24gdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBFeGVjdXRlZCBpbiBzaW1pbGFyIGZhc2hpb24gdG8gQXJyYXkuZm9yRWFjaCBjYWxsYmFjaywgYnV0IGluc3RlYWQgb2YgaXRlbSwgaW5kZXgsIGFycmF5IHJlY2VpdmVzIGl0ZW0sIGlkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICovXG4gIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBNYXAgZWFjaCBpdGVtIGludG8gZGlmZmVyZW50IGl0ZW0gYW5kIHJldHVybiB0aGVtIGFzIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBObyBndWFyYW50ZWUgaXMgZ2l2ZW4gYWJvdXQgdGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBldmVuIGlmIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkICh0aGUgaXRlbXMgYXJlIHNvcnRlZCBhZnRlciB0aGUgbWFwcGluZykuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEFycmF5Lm1hcC1saWtlIGNhbGxiYWNrLCBidXQgb25seSB3aXRoIHRoZSBmaXJzdCB0d28gcGFyYW1zLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIG1hcHBlZCBpdGVtcy5cbiAgICovXG4gIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdO1xuXG4gIC8qKlxuICAgKiBTdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBJZHMgb2YgdGhlIGl0ZW1zIHRvIGJlIGluY2x1ZGVkIGluIHRoaXMgc3RyZWFtIChtaXNzaW5nIGFyZSBpZ25vcmVkKSwgYWxsIGlmIG9taXR0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhIHN0cmVhbSBmb3IgdGhpcyBkYXRhIHNldC5cbiAgICovXG4gIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+O1xufVxuIiwgIi8qKiBRdWV1ZSBjb25maWd1cmF0aW9uIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVPcHRpb25zIHtcbiAgLyoqIFRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBCeSBkZWZhdWx0IHRoZXJlIGlzIG5vIGF1dG9tYXRpYyBmbHVzaGluZyAoYG51bGxgKS4gKi9cbiAgZGVsYXk/OiBudWxsIHwgbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBpcyBgSW5maW5pdHlgLiAqL1xuICBtYXg/OiBudW1iZXI7XG59XG4vKipcbiAqIFF1ZXVlIGV4dGVuZGluZyBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIG1ldGhvZCBuYW1lcyB0byBiZSByZXBsYWNlZCBieSBxdWV1ZWQgdmVyc2lvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVFeHRlbmRPcHRpb25zPFQ+IHtcbiAgLyoqIEEgbGlzdCB3aXRoIG1ldGhvZCBuYW1lcyBvZiB0aGUgbWV0aG9kcyBvbiB0aGUgb2JqZWN0IHRvIGJlIHJlcGxhY2VkIHdpdGggcXVldWVkIG9uZXMuICovXG4gIHJlcGxhY2U6IFRbXTtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IHZhbHVlIGlzIG51bGwuICovXG4gIGRlbGF5PzogbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBvZiBtYXggaXMgSW5maW5pdHkuICovXG4gIG1heD86IG51bWJlcjtcbn1cbi8qKlxuICogUXVldWUgY2FsbCBlbnRyeS5cbiAqIC0gQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZC5cbiAqIC0gQW4gb2JqZWN0IHdpdGggZnVuY3Rpb24sIGFyZ3MsIGNvbnRleHQgKGxpa2UgZnVuY3Rpb24uYmluZChjb250ZXh0LCAuLi5hcmdzKSkuXG4gKi9cbnR5cGUgUXVldWVDYWxsRW50cnkgPVxuICB8IEZ1bmN0aW9uXG4gIHwge1xuICAgICAgZm46IEZ1bmN0aW9uO1xuICAgICAgYXJnczogdW5rbm93bltdO1xuICAgIH1cbiAgfCB7XG4gICAgICBmbjogRnVuY3Rpb247XG4gICAgICBhcmdzOiB1bmtub3duW107XG4gICAgICBjb250ZXh0OiB1bmtub3duO1xuICAgIH07XG5cbmludGVyZmFjZSBRdWV1ZUV4dGVuZGVkPE8+IHtcbiAgb2JqZWN0OiBPO1xuICBtZXRob2RzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG9yaWdpbmFsOiB1bmtub3duO1xuICB9W107XG59XG5cbi8qKlxuICogQSBxdWV1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBtZXRob2QgbmFtZXMgdG8gYmUgcmVwbGFjZWQgYnkgcXVldWVkIHZlcnNpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVldWU8VCA9IG5ldmVyPiB7XG4gIC8qKiBEZWxheSBpbiBtaWxsaXNlY29uZHMuIElmIGRlZmluZWQgdGhlIHF1ZXVlIHdpbGwgYmUgcGVyaW9kaWNhbGx5IGZsdXNoZWQuICovXG4gIHB1YmxpYyBkZWxheTogbnVsbCB8IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHF1ZXVlIGJlZm9yZSBpdCB3aWxsIGJlIGZsdXNoZWQuICovXG4gIHB1YmxpYyBtYXg6IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9xdWV1ZToge1xuICAgIGZuOiBGdW5jdGlvbjtcbiAgICBhcmdzPzogdW5rbm93bltdO1xuICAgIGNvbnRleHQ/OiB1bmtub3duO1xuICB9W10gPSBbXTtcblxuICBwcml2YXRlIF90aW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9leHRlbmRlZDogbnVsbCB8IFF1ZXVlRXh0ZW5kZWQ8VD4gPSBudWxsO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgUXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUXVldWUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogUXVldWVPcHRpb25zKSB7XG4gICAgLy8gb3B0aW9uc1xuICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgIHRoaXMubWF4ID0gSW5maW5pdHk7XG5cbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBRdWV1ZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9ucz86IFF1ZXVlT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmRlbGF5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLmRlbGF5ID0gb3B0aW9ucy5kZWxheTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xuICAgIH1cblxuICAgIHRoaXMuX2ZsdXNoSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgYW4gb2JqZWN0IHdpdGggcXVldWluZyBmdW5jdGlvbmFsaXR5LlxuICAgKiBUaGUgb2JqZWN0IHdpbGwgYmUgZXh0ZW5kZWQgd2l0aCBhIGZ1bmN0aW9uIGZsdXNoLCBhbmQgdGhlIG1ldGhvZHMgcHJvdmlkZWQgaW4gb3B0aW9ucy5yZXBsYWNlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBxdWV1ZWQgb25lcy5cbiAgICpcbiAgICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXh0ZW5kPE8gZXh0ZW5kcyB7IGZsdXNoPzogKCkgPT4gdm9pZCB9LCBLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IE8sXG4gICAgb3B0aW9uczogUXVldWVFeHRlbmRPcHRpb25zPEs+XG4gICk6IFF1ZXVlPE8+IHtcbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBRdWV1ZTxPPihvcHRpb25zKTtcblxuICAgIGlmIChvYmplY3QuZmx1c2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFyZ2V0IG9iamVjdCBhbHJlYWR5IGhhcyBhIHByb3BlcnR5IGZsdXNoXCIpO1xuICAgIH1cbiAgICBvYmplY3QuZmx1c2ggPSAoKTogdm9pZCA9PiB7XG4gICAgICBxdWV1ZS5mbHVzaCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBtZXRob2RzOiBRdWV1ZUV4dGVuZGVkPE8+W1wibWV0aG9kc1wiXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJmbHVzaFwiLFxuICAgICAgICBvcmlnaW5hbDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXBsYWNlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMucmVwbGFjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBuYW1lID0gb3B0aW9ucy5yZXBsYWNlW2ldO1xuICAgICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBvcmlnaW5hbDogKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPilbbmFtZV0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICBxdWV1ZS5yZXBsYWNlKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPiwgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVldWUuX2V4dGVuZGVkID0ge1xuICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICBtZXRob2RzOiBtZXRob2RzLFxuICAgIH07XG5cbiAgICByZXR1cm4gcXVldWU7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSB0aGUgcXVldWUuIFRoZSBxdWV1ZSB3aWxsIGZpcnN0IGZsdXNoIGFsbCBxdWV1ZWQgYWN0aW9ucywgYW5kIGluIGNhc2UgaXQgaGFzIGV4dGVuZGVkIGFuIG9iamVjdCwgd2lsbCByZXN0b3JlIHRoZSBvcmlnaW5hbCBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsdXNoKCk7XG5cbiAgICBpZiAodGhpcy5fZXh0ZW5kZWQpIHtcbiAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuX2V4dGVuZGVkLm9iamVjdDtcbiAgICAgIGNvbnN0IG1ldGhvZHMgPSB0aGlzLl9leHRlbmRlZC5tZXRob2RzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZHNbaV07XG4gICAgICAgIGlmIChtZXRob2Qub3JpZ2luYWwpIHtcbiAgICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICAgIChvYmplY3QgYXMgYW55KVttZXRob2QubmFtZV0gPSBtZXRob2Qub3JpZ2luYWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBkZWxldGUgKG9iamVjdCBhcyBhbnkpW21ldGhvZC5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fZXh0ZW5kZWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgbWV0aG9kIG9uIGFuIG9iamVjdCB3aXRoIGEgcXVldWVkIHZlcnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBPYmplY3QgaGF2aW5nIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSBtZXRob2QgLSBUaGUgbWV0aG9kIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcmVwbGFjZTxNIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IFJlY29yZDxNLCAoKSA9PiB2b2lkPixcbiAgICBtZXRob2Q6IE1cbiAgKTogdm9pZCB7XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzIC0tIEZ1bmN0aW9uIHRoaXMgaXMgbmVjZXNzYXJ5IGluIHRoZSBmdW5jdGlvbiBiZWxsb3csIHNvIGNsYXNzIHRoaXMgaGFzIHRvIGJlIHNhdmVkIGludG8gYSB2YXJpYWJsZSBoZXJlLiAqL1xuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjb25zdCBvcmlnaW5hbCA9IG9iamVjdFttZXRob2RdO1xuICAgIGlmICghb3JpZ2luYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBcIiArIG1ldGhvZCArIFwiIHVuZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBvYmplY3RbbWV0aG9kXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICAgIC8vIGFkZCB0aGlzIGNhbGwgdG8gdGhlIHF1ZXVlXG4gICAgICBtZS5xdWV1ZSh7XG4gICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgIGZuOiBvcmlnaW5hbCxcbiAgICAgICAgY29udGV4dDogdGhpcyxcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUXVldWUgYSBjYWxsLlxuICAgKlxuICAgKiBAcGFyYW0gZW50cnkgLSBUaGUgZnVuY3Rpb24gb3IgZW50cnkgdG8gYmUgcXVldWVkLlxuICAgKi9cbiAgcHVibGljIHF1ZXVlKGVudHJ5OiBRdWV1ZUNhbGxFbnRyeSk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7IGZuOiBlbnRyeSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWUucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmx1c2hJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHF1ZXVlIG5lZWRzIHRvIGJlIGZsdXNoZWQuXG4gICAqL1xuICBwcml2YXRlIF9mbHVzaElmTmVlZGVkKCk6IHZvaWQge1xuICAgIC8vIGZsdXNoIHdoZW4gdGhlIG1heGltdW0gaXMgZXhjZWVkZWQuXG4gICAgaWYgKHRoaXMuX3F1ZXVlLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gICAgLy8gZmx1c2ggYWZ0ZXIgYSBwZXJpb2Qgb2YgaW5hY3Rpdml0eSB3aGVuIGEgZGVsYXkgaXMgY29uZmlndXJlZFxuICAgIGlmICh0aGlzLl90aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHR5cGVvZiB0aGlzLmRlbGF5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH0sIHRoaXMuZGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCBhbGwgcXVldWVkIGNhbGxzXG4gICAqL1xuICBwdWJsaWMgZmx1c2goKTogdm9pZCB7XG4gICAgdGhpcy5fcXVldWUuc3BsaWNlKDApLmZvckVhY2goKGVudHJ5KTogdm9pZCA9PiB7XG4gICAgICBlbnRyeS5mbi5hcHBseShlbnRyeS5jb250ZXh0IHx8IGVudHJ5LmZuLCBlbnRyeS5hcmdzIHx8IFtdKTtcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIEV2ZW50Q2FsbGJhY2tzV2l0aEFueSxcbiAgRXZlbnROYW1lLFxuICBFdmVudE5hbWVXaXRoQW55LFxuICBFdmVudFBheWxvYWRzLFxuICBJZCxcbiAgUGFydEl0ZW0sXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbnR5cGUgRXZlbnRTdWJzY3JpYmVyczxJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPiwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW05hbWUgaW4ga2V5b2YgRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5dOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG59O1xuXG4vKipcbiAqIHtAbGluayBEYXRhU2V0fSBjb2RlIHRoYXQgY2FuIGJlIHJldXNlZCBpbiB7QGxpbmsgRGF0YVZpZXd9IG9yIG90aGVyIHNpbWlsYXIgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBEYXRhSW50ZXJmYWNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFTZXRQYXJ0PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGltcGxlbWVudHMgUGljazxEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4sIFwib25cIiB8IFwib2ZmXCI+XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmliZXJzOiB7XG4gICAgW05hbWUgaW4gRXZlbnROYW1lV2l0aEFueV06IEV2ZW50U3Vic2NyaWJlcnM8SXRlbSwgSWRQcm9wPltOYW1lXVtdO1xuICB9ID0ge1xuICAgIFwiKlwiOiBbXSxcbiAgICBhZGQ6IFtdLFxuICAgIHJlbW92ZTogW10sXG4gICAgdXBkYXRlOiBbXSxcbiAgfTtcblxuICBwcm90ZWN0ZWQgX3RyaWdnZXIoXG4gICAgZXZlbnQ6IFwiYWRkXCIsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1wiYWRkXCJdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG4gIHByb3RlY3RlZCBfdHJpZ2dlcihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgcHJvdGVjdGVkIF90cmlnZ2VyKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogVHJpZ2dlciBhbiBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIEV2ZW50IHBheWxvYWQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIElkIG9mIHRoZSBzZW5kZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3RyaWdnZXI8TmFtZSBleHRlbmRzIEV2ZW50TmFtZT4oXG4gICAgZXZlbnQ6IE5hbWUsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W05hbWVdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICgoZXZlbnQgYXMgc3RyaW5nKSA9PT0gXCIqXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB0cmlnZ2VyIGV2ZW50ICpcIik7XG4gICAgfVxuXG4gICAgWy4uLnRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XSwgLi4udGhpcy5fc3Vic2NyaWJlcnNbXCIqXCJdXS5mb3JFYWNoKFxuICAgICAgKHN1YnNjcmliZXIpOiB2b2lkID0+IHtcbiAgICAgICAgc3Vic2NyaWJlcihldmVudCwgcGF5bG9hZCwgc2VuZGVySWQgIT0gbnVsbCA/IHNlbmRlcklkIDogbnVsbCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwiKlwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJhZGRcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl1cbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBhbiBldmVudCwgYWRkIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBOb24tZnVuY3Rpb24gY2FsbGJhY2tzIGFyZSBpZ25vcmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgb248TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLy8gQFRPRE86IE1heWJlIHRocm93IGZvciBpbnZhbGlkIGNhbGxiYWNrcz9cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcIipcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcImFkZFwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXVxuICApOiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvZmYoXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIGFuIGV2ZW50LCByZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIElmIHRoZSBzYW1lIGNhbGxiYWNrIHdhcyBzdWJzY3JpYmVkIG1vcmUgdGhhbiBvbmNlICoqYWxsKiogb2NjdXJlbmNlcyB3aWxsIGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyBvZmY8TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0gPSB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0uZmlsdGVyKFxuICAgICAgKHN1YnNjcmliZXIpOiBib29sZWFuID0+IHN1YnNjcmliZXIgIT09IGNhbGxiYWNrXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb24gaW5zdGVhZCAoUFM6IERhdGFWaWV3LnN1YnNjcmliZSA9PT0gRGF0YVZpZXcub24pLlxuICAgKi9cbiAgcHVibGljIHN1YnNjcmliZTogRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPltcIm9uXCJdID0gRGF0YVNldFBhcnQucHJvdG90eXBlLm9uO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9mZiBpbnN0ZWFkIChQUzogRGF0YVZpZXcudW5zdWJzY3JpYmUgPT09IERhdGFWaWV3Lm9mZikuXG4gICAqL1xuICBwdWJsaWMgdW5zdWJzY3JpYmU6IERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5bXCJvZmZcIl0gPVxuICAgIERhdGFTZXRQYXJ0LnByb3RvdHlwZS5vZmY7XG5cbiAgLyogZGV2ZWxibG9jazpzdGFydCAqL1xuICBwdWJsaWMgZ2V0IHRlc3RMZWFrU3Vic2NyaWJlcnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlcnM7XG4gIH1cbiAgLyogZGV2ZWxibG9jazplbmQgKi9cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgU2V0YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQtb2JqZWN0c1xuY29sbGVjdGlvbignU2V0JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU2V0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SXRlcmF0b3I7XG4iLCAiaW1wb3J0IHsgSWQgfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG4vKipcbiAqIERhdGEgc3RyZWFtXG4gKlxuICogQHJlbWFya3NcbiAqIHtAbGluayBEYXRhU3RyZWFtfSBvZmZlcnMgYW4gYWx3YXlzIHVwIHRvIGRhdGUgc3RyZWFtIG9mIGl0ZW1zIGZyb20gYSB7QGxpbmsgRGF0YVNldH0gb3Ige0BsaW5rIERhdGFWaWV3fS5cbiAqIFRoYXQgbWVhbnMgdGhhdCB0aGUgc3RyZWFtIGlzIGV2YWx1YXRlZCBhdCB0aGUgdGltZSBvZiBpdGVyYXRpb24sIGNvbnZlcnNpb24gdG8gYW5vdGhlciBkYXRhIHR5cGUgb3Igd2hlbiB7QGxpbmsgY2FjaGV9IGlzIGNhbGxlZCwgbm90IHdoZW4gdGhlIHtAbGluayBEYXRhU3RyZWFtfSB3YXMgY3JlYXRlZC5cbiAqIE11bHRpcGxlIGludm9jYXRpb25zIG9mIGZvciBleGFtcGxlIHtAbGluayB0b0l0ZW1BcnJheX0gbWF5IHlpZWxkIGRpZmZlcmVudCByZXN1bHRzIChpZiB0aGUgZGF0YSBzb3VyY2UgbGlrZSBmb3IgZXhhbXBsZSB7QGxpbmsgRGF0YVNldH0gZ2V0cyBtb2RpZmllZCkuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBUaGUgaXRlbSB0eXBlIHRoaXMgc3RyZWFtIGlzIGdvaW5nIHRvIHdvcmsgd2l0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFTdHJlYW08SXRlbT4gaW1wbGVtZW50cyBJdGVyYWJsZTxbSWQsIEl0ZW1dPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhaXJzOiBJdGVyYWJsZTxbSWQsIEl0ZW1dPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gcGFpcnMgLSBUaGUgaWQsIGl0ZW0gcGFpcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFpcnM6IEl0ZXJhYmxlPFtJZCwgSXRlbV0+KSB7XG4gICAgdGhpcy5fcGFpcnMgPSBwYWlycztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2Yga2V5LCB2YWx1ZSBwYWlycyBmb3IgZXZlcnkgZW50cnkgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2Yga2V5LCB2YWx1ZSBwYWlycyBmb3IgZXZlcnkgZW50cnkgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIFtpZCwgaXRlbV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVyYWJsZSBvZiBrZXlzIGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKmtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxJZD4ge1xuICAgIGZvciAoY29uc3QgW2lkXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgeWllbGQgaWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVyYWJsZSBvZiB2YWx1ZXMgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqdmFsdWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8SXRlbT4ge1xuICAgIGZvciAoY29uc3QgWywgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIGl0ZW07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgaWRzIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYXJyYXkgbWF5IGNvbnRhaW4gZHVwbGljaXRpZXMuXG4gICAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIGFsbCBpZHMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0lkQXJyYXkoKTogSWRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9wYWlyc10ubWFwKChwYWlyKTogSWQgPT4gcGFpclswXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFycmF5IG1heSBjb250YWluIGR1cGxpY2l0aWVzLlxuICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCBhbGwgaXRlbXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0l0ZW1BcnJheSgpOiBJdGVtW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFpcnNdLm1hcCgocGFpcik6IEl0ZW0gPT4gcGFpclsxXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBlbnRyaWVzIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYXJyYXkgbWF5IGNvbnRhaW4gZHVwbGljaXRpZXMuXG4gICAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIGFsbCBlbnRyaWVzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9FbnRyeUFycmF5KCk6IFtJZCwgSXRlbV1bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9wYWlyc107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9iamVjdCBtYXAgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGluIHRoaXMgc3RyZWFtIGFjY2Vzc2libGUgYnkgaWRzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJbiBjYXNlIG9mIGR1cGxpY2F0ZSBpZHMgKGNvZXJjZWQgdG8gc3RyaW5nIHNvIGA3ID09ICc3J2ApIHRoZSBsYXN0IGVuY291dGVyZWQgYXBwZWFycyBpbiB0aGUgcmV0dXJuZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgb2JqZWN0IG1hcCBvZiBhbGwgaWQg4oaSIGl0ZW0gcGFpcnMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b09iamVjdE1hcCgpOiBSZWNvcmQ8SWQsIEl0ZW0+IHtcbiAgICBjb25zdCBtYXA6IFJlY29yZDxJZCwgSXRlbT4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgbWFwW2lkXSA9IGl0ZW07XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgbWFwIGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBpbiB0aGlzIHN0cmVhbSBhY2Nlc3NpYmxlIGJ5IGlkcy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIG1hcCBvZiBhbGwgaWQg4oaSIGl0ZW0gcGFpcnMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b01hcCgpOiBNYXA8SWQsIEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLl9wYWlycyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSAodW5pcXVlKSBpZHMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBzZXQgb2YgYWxsIGlkcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvSWRTZXQoKTogU2V0PElkPiB7XG4gICAgcmV0dXJuIG5ldyBTZXQodGhpcy50b0lkQXJyYXkoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSAodW5pcXVlKSBpdGVtcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNldCBvZiBhbGwgaXRlbXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0l0ZW1TZXQoKTogU2V0PEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IFNldCh0aGlzLnRvSXRlbUFycmF5KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhY2hlIHRoZSBpdGVtcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIG1ldGhvZCBhbGxvd3MgZm9yIGl0ZW1zIHRvIGJlIGZldGNoZWQgaW1tZWRpYXRlbGx5IGFuZCB1c2VkIChwb3NzaWJseSBtdWx0aXBsZSB0aW1lcykgbGF0ZXIuXG4gICAqIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gb3B0aW1pemUgcGVyZm9ybWFuY2UgYXMge0BsaW5rIERhdGFTdHJlYW19IHdvdWxkIG90aGVyd2lzZSByZWV2YWx1YXRlIGV2ZXJ5dGhpbmcgdXBvbiBlYWNoIGl0ZXJhdGlvbi5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIGNvbnN0IGRzID0gbmV3IERhdGFTZXQoW+KApl0pXG4gICAqXG4gICAqIGNvbnN0IGNhY2hlZFN0cmVhbSA9IGRzLnN0cmVhbSgpXG4gICAqICAgLmZpbHRlcijigKYpXG4gICAqICAgLnNvcnQo4oCmKVxuICAgKiAgIC5tYXAo4oCmKVxuICAgKiAgIC5jYWNoZWQo4oCmKSAvLyBEYXRhIGFyZSBmZXRjaGVkLCBwcm9jZXNzZWQgYW5kIGNhY2hlZCBoZXJlLlxuICAgKlxuICAgKiBkcy5jbGVhcigpXG4gICAqIGNoYWNoZWRTdHJlYW0gLy8gU3RpbGwgaGFzIGFsbCB0aGUgaXRlbXMuXG4gICAqIGBgYFxuICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgRGF0YVN0cmVhbX0gd2l0aCBjYWNoZWQgaXRlbXMgKGRldGFjaGVkIGZyb20gdGhlIG9yaWdpbmFsIHtAbGluayBEYXRhU2V0fSkuXG4gICAqL1xuICBwdWJsaWMgY2FjaGUoKTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtKFsuLi50aGlzLl9wYWlyc10pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGlzdGluY3QgdmFsdWVzIG9mIGdpdmVuIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBwaWNrcyBhbmQgcG9zc2libHkgY29udmVydHMgdGhlIHByb3BlcnR5LlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgZGlzdGluY3QgdmFsdWUuXG4gICAqIEByZXR1cm5zIEEgc2V0IG9mIGFsbCBkaXN0aW5jdCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIGRpc3RpbmN0PFQ+KGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBUKTogU2V0PFQ+IHtcbiAgICBjb25zdCBzZXQgPSBuZXcgU2V0PFQ+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHNldC5hZGQoY2FsbGJhY2soaXRlbSwgaWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMgb2YgdGhlIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgZGVjaWRlcyB3aGV0aGVyIGFuIGl0ZW0gd2lsbCBiZSBpbmNsdWRlZC5cbiAgICogQHJldHVybnMgQSBuZXcgZGF0YSBzdHJlYW0gd2l0aCB0aGUgZmlsdGVyZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgZmlsdGVyKGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBib29sZWFuKTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgY29uc3QgcGFpcnMgPSB0aGlzLl9wYWlycztcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW08SXRlbT4oe1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4ge1xuICAgICAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgcGFpcnMpIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2soaXRlbSwgaWQpKSB7XG4gICAgICAgICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggaXRlbSBvZiB0aGUgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGludm9rZWQgZm9yIGVhY2ggaXRlbS5cbiAgICovXG4gIHB1YmxpYyBmb3JFYWNoKGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcCB0aGUgaXRlbXMgaW50byBhIGRpZmZlcmVudCB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBjb252ZXJzaW9uLlxuICAgKiBAdHlwZVBhcmFtIE1hcHBlZCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtIGFmdGVyIG1hcHBpbmcuXG4gICAqIEByZXR1cm5zIEEgbmV3IGRhdGEgc3RyZWFtIHdpdGggdGhlIG1hcHBlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBtYXA8TWFwcGVkPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gTWFwcGVkXG4gICk6IERhdGFTdHJlYW08TWFwcGVkPiB7XG4gICAgY29uc3QgcGFpcnMgPSB0aGlzLl9wYWlycztcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW08TWFwcGVkPih7XG4gICAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIE1hcHBlZF0+IHtcbiAgICAgICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHBhaXJzKSB7XG4gICAgICAgICAgeWllbGQgW2lkLCBjYWxsYmFjayhpdGVtLCBpZCldO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaXRlbSB3aXRoIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGdpdmVuIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBwaWNrcyBhbmQgcG9zc2libHkgY29udmVydHMgdGhlIHByb3BlcnR5LlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSB3aXRoIHRoZSBtYXhpbXVtIGlmIGZvdW5kIG90aGVyd2lzZSBudWxsLlxuICAgKi9cbiAgcHVibGljIG1heChjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gbnVtYmVyKTogSXRlbSB8IG51bGwge1xuICAgIGNvbnN0IGl0ZXIgPSB0aGlzLl9wYWlyc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgbGV0IGN1cnIgPSBpdGVyLm5leHQoKTtcbiAgICBpZiAoY3Vyci5kb25lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbWF4SXRlbTogSXRlbSA9IGN1cnIudmFsdWVbMV07XG4gICAgbGV0IG1heFZhbHVlOiBudW1iZXIgPSBjYWxsYmFjayhjdXJyLnZhbHVlWzFdLCBjdXJyLnZhbHVlWzBdKTtcbiAgICB3aGlsZSAoIShjdXJyID0gaXRlci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGNvbnN0IFtpZCwgaXRlbV0gPSBjdXJyLnZhbHVlO1xuICAgICAgY29uc3QgdmFsdWUgPSBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgICBpZiAodmFsdWUgPiBtYXhWYWx1ZSkge1xuICAgICAgICBtYXhWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBtYXhJdGVtID0gaXRlbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF4SXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGl0ZW0gd2l0aCB0aGUgbWluaW11bSB2YWx1ZSBvZiBnaXZlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcGlja3MgYW5kIHBvc3NpYmx5IGNvbnZlcnRzIHRoZSBwcm9wZXJ0eS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gd2l0aCB0aGUgbWluaW11bSBpZiBmb3VuZCBvdGhlcndpc2UgbnVsbC5cbiAgICovXG4gIHB1YmxpYyBtaW4oY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IG51bWJlcik6IEl0ZW0gfCBudWxsIHtcbiAgICBjb25zdCBpdGVyID0gdGhpcy5fcGFpcnNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIGxldCBjdXJyID0gaXRlci5uZXh0KCk7XG4gICAgaWYgKGN1cnIuZG9uZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG1pbkl0ZW06IEl0ZW0gPSBjdXJyLnZhbHVlWzFdO1xuICAgIGxldCBtaW5WYWx1ZTogbnVtYmVyID0gY2FsbGJhY2soY3Vyci52YWx1ZVsxXSwgY3Vyci52YWx1ZVswXSk7XG4gICAgd2hpbGUgKCEoY3VyciA9IGl0ZXIubmV4dCgpKS5kb25lKSB7XG4gICAgICBjb25zdCBbaWQsIGl0ZW1dID0gY3Vyci52YWx1ZTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgaWYgKHZhbHVlIDwgbWluVmFsdWUpIHtcbiAgICAgICAgbWluVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgbWluSXRlbSA9IGl0ZW07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbkl0ZW07XG4gIH1cblxuICAvKipcbiAgICogUmVkdWNlIHRoZSBpdGVtcyBpbnRvIGEgc2luZ2xlIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSByZWR1Y3Rpb24uXG4gICAqIEBwYXJhbSBhY2N1bXVsYXRvciAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBhY2N1bXVsYXRvci5cbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGUgcmVkdWNlZCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyByZWR1Y2U8VD4oXG4gICAgY2FsbGJhY2s6IChhY2N1bXVsYXRvcjogVCwgaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBULFxuICAgIGFjY3VtdWxhdG9yOiBUXG4gICk6IFQge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgYWNjdW11bGF0b3IgPSBjYWxsYmFjayhhY2N1bXVsYXRvciwgaXRlbSwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogU29ydCB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEl0ZW0gY29tcGFyYXRvci5cbiAgICogQHJldHVybnMgQSBuZXcgc3RyZWFtIHdpdGggc29ydGVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHNvcnQoXG4gICAgY2FsbGJhY2s6IChpdGVtQTogSXRlbSwgaXRlbUI6IEl0ZW0sIGlkQTogSWQsIGlkQjogSWQpID0+IG51bWJlclxuICApOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW0oe1xuICAgICAgW1N5bWJvbC5pdGVyYXRvcl06ICgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+ID0+XG4gICAgICAgIFsuLi50aGlzLl9wYWlyc11cbiAgICAgICAgICAuc29ydCgoW2lkQSwgaXRlbUFdLCBbaWRCLCBpdGVtQl0pOiBudW1iZXIgPT5cbiAgICAgICAgICAgIGNhbGxiYWNrKGl0ZW1BLCBpdGVtQiwgaWRBLCBpZEIpXG4gICAgICAgICAgKVxuICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCksXG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyB2NCBhcyB1dWlkNCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBwdXJlRGVlcE9iamVjdEFzc2lnbiB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuaW1wb3J0IHtcbiAgRGF0YUludGVyZmFjZSxcbiAgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXksXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0LFxuICBEYXRhSW50ZXJmYWNlTWFwT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZU9yZGVyLFxuICBEZWVwUGFydGlhbCxcbiAgRXZlbnRQYXlsb2FkcyxcbiAgRnVsbEl0ZW0sXG4gIElkLFxuICBPcHRJZCxcbiAgUGFydEl0ZW0sXG4gIFVwZGF0ZUl0ZW0sXG4gIGlzSWQsXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbmltcG9ydCB7IFF1ZXVlLCBRdWV1ZU9wdGlvbnMgfSBmcm9tIFwiLi9xdWV1ZVwiO1xuaW1wb3J0IHsgRGF0YVNldFBhcnQgfSBmcm9tIFwiLi9kYXRhLXNldC1wYXJ0XCI7XG5pbXBvcnQgeyBEYXRhU3RyZWFtIH0gZnJvbSBcIi4vZGF0YS1zdHJlYW1cIjtcblxuLyoqXG4gKiBJbml0aWFsIERhdGFTZXQgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wIGV4dGVuZHMgc3RyaW5nPiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmllbGQgY29udGFpbmluZyB0aGUgaWQgb2YgdGhlIGl0ZW1zLiBXaGVuIGRhdGEgaXMgZmV0Y2hlZCBmcm9tIGEgc2VydmVyIHdoaWNoIHVzZXMgc29tZSBzcGVjaWZpYyBmaWVsZCB0byBpZGVudGlmeSBpdGVtcywgdGhpcyBmaWVsZCBuYW1lIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIERhdGFTZXQgdXNpbmcgdGhlIG9wdGlvbiBgZmllbGRJZGAuIEZvciBleGFtcGxlIFtDb3VjaERCXShodHRwOi8vY291Y2hkYi5hcGFjaGUub3JnLykgdXNlcyB0aGUgZmllbGQgYCdfaWQnYCB0byBpZGVudGlmeSBkb2N1bWVudHMuXG4gICAqL1xuICBmaWVsZElkPzogSWRQcm9wO1xuICAvKipcbiAgICogUXVldWUgZGF0YSBjaGFuZ2VzICgnYWRkJywgJ3VwZGF0ZScsICdyZW1vdmUnKSBhbmQgZmx1c2ggdGhlbSBhdCBvbmNlLiBUaGUgcXVldWUgY2FuIGJlIGZsdXNoZWQgbWFudWFsbHkgYnkgY2FsbGluZyBgRGF0YVNldC5mbHVzaCgpYCwgb3IgY2FuIGJlIGZsdXNoZWQgYWZ0ZXIgYSBjb25maWd1cmVkIGRlbGF5IG9yIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMuXG4gICAqXG4gICAqIFdoZW4gcXVldWUgaXMgdHJ1ZSwgYSBxdWV1ZSBpcyBjcmVhdGVkIHdpdGggZGVmYXVsdCBvcHRpb25zLiBPcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcHJvdmlkaW5nIGFuIG9iamVjdC5cbiAgICovXG4gIHF1ZXVlPzogUXVldWVPcHRpb25zIHwgZmFsc2U7XG59XG4vKiogRGF0YVNldCBjb25maWd1cmF0aW9uIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNldE9wdGlvbnMge1xuICAvKipcbiAgICogUXVldWUgY29uZmlndXJhdGlvbiBvYmplY3Qgb3IgZmFsc2UgaWYgbm8gcXVldWUgc2hvdWxkIGJlIHVzZWQuXG4gICAqXG4gICAqIC0gSWYgZmFsc2UgYW5kIHRoZXJlIHdhcyBhIHF1ZXVlIGJlZm9yZSBpdCB3aWxsIGJlIGZsdXNoZWQgYW5kIHRoZW4gcmVtb3ZlZC5cbiAgICogLSBJZiB7QGxpbmsgUXVldWVPcHRpb25zfSB0aGUgZXhpc3RpbmcgcXVldWUgd2lsbCBiZSByZWNvbmZpZ3VyZWQgb3IgYSBuZXcgcXVldWUgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgcXVldWU/OiBRdWV1ZSB8IFF1ZXVlT3B0aW9ucyB8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhbiBpZCB0byBnaXZlbiBpdGVtIGlmIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgYWxyZWFkeS5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhlIGl0ZW0gd2lsbCBiZSBtb2RpZmllZC5cbiAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdGhhdCB3aWxsIGhhdmUgYW4gaWQgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0gaWRQcm9wIC0gVGhlIGtleSBvZiB0aGUgaWQgcHJvcGVydHkuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqIEByZXR1cm5zIHRydWVcbiAqL1xuZnVuY3Rpb24gZW5zdXJlRnVsbEl0ZW08SXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sIElkUHJvcCBleHRlbmRzIHN0cmluZz4oXG4gIGl0ZW06IEl0ZW0sXG4gIGlkUHJvcDogSWRQcm9wXG4pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHtcbiAgaWYgKGl0ZW1baWRQcm9wXSA9PSBudWxsKSB7XG4gICAgLy8gZ2VuZXJhdGUgYW4gaWRcbiAgICBpdGVtW2lkUHJvcF0gPSB1dWlkNCgpIGFzIGFueTtcbiAgfVxuXG4gIHJldHVybiBpdGVtIGFzIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG59XG5cbi8qKlxuICogIyBEYXRhU2V0XG4gKlxuICogVmlzLmpzIGNvbWVzIHdpdGggYSBmbGV4aWJsZSBEYXRhU2V0LCB3aGljaCBjYW4gYmUgdXNlZCB0byBob2xkIGFuZFxuICogbWFuaXB1bGF0ZSB1bnN0cnVjdHVyZWQgZGF0YSBhbmQgbGlzdGVuIGZvciBjaGFuZ2VzIGluIHRoZSBkYXRhLiBUaGUgRGF0YVNldFxuICogaXMga2V5L3ZhbHVlIGJhc2VkLiBEYXRhIGl0ZW1zIGNhbiBiZSBhZGRlZCwgdXBkYXRlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZVxuICogRGF0YVNldCwgYW5kIG9uZSBjYW4gc3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gdGhlIERhdGFTZXQuIFRoZSBkYXRhIGluIHRoZVxuICogRGF0YVNldCBjYW4gYmUgZmlsdGVyZWQgYW5kIG9yZGVyZWQuIERhdGEgY2FuIGJlIG5vcm1hbGl6ZWQgd2hlbiBhcHBlbmRpbmcgaXRcbiAqIHRvIHRoZSBEYXRhU2V0IGFzIHdlbGwuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIGEgRGF0YVNldC5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gKiB2YXIgb3B0aW9ucyA9IHt9O1xuICogdmFyIGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQob3B0aW9ucyk7XG4gKlxuICogLy8gYWRkIGl0ZW1zXG4gKiAvLyBub3RlIHRoYXQgdGhlIGRhdGEgaXRlbXMgY2FuIGNvbnRhaW4gZGlmZmVyZW50IHByb3BlcnRpZXMgYW5kIGRhdGEgZm9ybWF0c1xuICogZGF0YS5hZGQoW1xuICogICB7aWQ6IDEsIHRleHQ6ICdpdGVtIDEnLCBkYXRlOiBuZXcgRGF0ZSgyMDEzLCA2LCAyMCksIGdyb3VwOiAxLCBmaXJzdDogdHJ1ZX0sXG4gKiAgIHtpZDogMiwgdGV4dDogJ2l0ZW0gMicsIGRhdGU6ICcyMDEzLTA2LTIzJywgZ3JvdXA6IDJ9LFxuICogICB7aWQ6IDMsIHRleHQ6ICdpdGVtIDMnLCBkYXRlOiAnMjAxMy0wNi0yNScsIGdyb3VwOiAyfSxcbiAqICAge2lkOiA0LCB0ZXh0OiAnaXRlbSA0J31cbiAqIF0pO1xuICpcbiAqIC8vIHN1YnNjcmliZSB0byBhbnkgY2hhbmdlIGluIHRoZSBEYXRhU2V0XG4gKiBkYXRhLm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50LCBwcm9wZXJ0aWVzLCBzZW5kZXJJZCkge1xuICogICBjb25zb2xlLmxvZygnZXZlbnQnLCBldmVudCwgcHJvcGVydGllcyk7XG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGUgYW4gZXhpc3RpbmcgaXRlbVxuICogZGF0YS51cGRhdGUoe2lkOiAyLCBncm91cDogMX0pO1xuICpcbiAqIC8vIHJlbW92ZSBhbiBpdGVtXG4gKiBkYXRhLnJlbW92ZSg0KTtcbiAqXG4gKiAvLyBnZXQgYWxsIGlkc1xuICogdmFyIGlkcyA9IGRhdGEuZ2V0SWRzKCk7XG4gKiBjb25zb2xlLmxvZygnaWRzJywgaWRzKTtcbiAqXG4gKiAvLyBnZXQgYSBzcGVjaWZpYyBpdGVtXG4gKiB2YXIgaXRlbTEgPSBkYXRhLmdldCgxKTtcbiAqIGNvbnNvbGUubG9nKCdpdGVtMScsIGl0ZW0xKTtcbiAqXG4gKiAvLyByZXRyaWV2ZSBhIGZpbHRlcmVkIHN1YnNldCBvZiB0aGUgZGF0YVxuICogdmFyIGl0ZW1zID0gZGF0YS5nZXQoe1xuICogICBmaWx0ZXI6IGZ1bmN0aW9uIChpdGVtKSB7XG4gKiAgICAgcmV0dXJuIGl0ZW0uZ3JvdXAgPT0gMTtcbiAqICAgfVxuICogfSk7XG4gKiBjb25zb2xlLmxvZygnZmlsdGVyZWQgaXRlbXMnLCBpdGVtcyk7XG4gKiBgYGBcbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFTZXQ8XG4gICAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gICAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4gID5cbiAgZXh0ZW5kcyBEYXRhU2V0UGFydDxJdGVtLCBJZFByb3A+XG4gIGltcGxlbWVudHMgRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+XG57XG4gIC8qKiBGbHVzaCBhbGwgcXVldWVkIGNhbGxzLiAqL1xuICBwdWJsaWMgZmx1c2g/OiAoKSA9PiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGxlbmd0aDogbnVtYmVyO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCBpZFByb3AoKTogSWRQcm9wIHtcbiAgICByZXR1cm4gdGhpcy5faWRQcm9wO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGE6IE1hcDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lkUHJvcDogSWRQcm9wO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWU8dGhpcz4gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBEYXRhU2V0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9ucz86IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+KTtcbiAgLyoqXG4gICAqIEBwYXJhbSBkYXRhIC0gQW4gaW5pdGlhbCBzZXQgb2YgaXRlbXMgZm9yIHRoZSBuZXcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRGF0YVNldCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IEl0ZW1bXSwgb3B0aW9ucz86IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+KTtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBEYXRhU2V0LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIEluaXRpYWwgZGF0YSBvciBvcHRpb25zLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgKHR5cGUgZXJyb3IgaWYgZGF0YSBpcyBhbHNvIG9wdGlvbnMpLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIGRhdGE/OiBJdGVtW10gfCBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPixcbiAgICBvcHRpb25zPzogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD5cbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8vIGNvcnJlY3RseSByZWFkIG9wdGlvbmFsIGFyZ3VtZW50c1xuICAgIGlmIChkYXRhICYmICFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBvcHRpb25zID0gZGF0YTtcbiAgICAgIGRhdGEgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLl9kYXRhID0gbmV3IE1hcCgpOyAvLyBtYXAgd2l0aCBkYXRhIGluZGV4ZWQgYnkgaWRcbiAgICB0aGlzLmxlbmd0aCA9IDA7IC8vIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgRGF0YVNldFxuICAgIHRoaXMuX2lkUHJvcCA9IHRoaXMuX29wdGlvbnMuZmllbGRJZCB8fCAoXCJpZFwiIGFzIElkUHJvcCk7IC8vIG5hbWUgb2YgdGhlIGZpZWxkIGNvbnRhaW5pbmcgaWRcblxuICAgIC8vIGFkZCBpbml0aWFsIGRhdGEgd2hlbiBwcm92aWRlZFxuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFkZChkYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG5ldyBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBuZXcgb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM/OiBEYXRhU2V0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMucXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGRlbGV0ZSBxdWV1ZSBpZiBsb2FkZWRcbiAgICAgICAgaWYgKHRoaXMuX3F1ZXVlKSB7XG4gICAgICAgICAgdGhpcy5fcXVldWUuZGVzdHJveSgpO1xuICAgICAgICAgIHRoaXMuX3F1ZXVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIHF1ZXVlIGFuZCB1cGRhdGUgaXRzIG9wdGlvbnNcbiAgICAgICAgaWYgKCF0aGlzLl9xdWV1ZSkge1xuICAgICAgICAgIHRoaXMuX3F1ZXVlID0gUXVldWUuZXh0ZW5kKHRoaXMsIHtcbiAgICAgICAgICAgIHJlcGxhY2U6IFtcImFkZFwiLCBcInVwZGF0ZVwiLCBcInJlbW92ZVwiXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnF1ZXVlICYmIHR5cGVvZiBvcHRpb25zLnF1ZXVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgdGhpcy5fcXVldWUuc2V0T3B0aW9ucyhvcHRpb25zLnF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkYXRhIGl0ZW0gb3IgYW4gYXJyYXkgd2l0aCBpdGVtcy5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSBhZGRlZCB0byB0aGUgRGF0YVNldCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGBhZGRgLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KClcbiAgICpcbiAgICogLy8gYWRkIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEuYWRkKFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyB0ZXh0OiAnaXRlbSB3aXRob3V0IGFuIGlkJyB9XG4gICAqIF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzEsIDIsICc8VVVJRHY0PiddXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIEl0ZW1zIHRvIGJlIGFkZGVkIChpZHMgd2lsbCBiZSBnZW5lcmF0ZWQgaWYgbWlzc2luZykuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgYWRkZWRJZHMgLSBBcnJheSB3aXRoIHRoZSBpZHMgKGdlbmVyYXRlZCBpZiBub3QgcHJlc2VudCkgb2YgdGhlIGFkZGVkIGl0ZW1zLlxuICAgKiBAdGhyb3dzIFdoZW4gYW4gaXRlbSB3aXRoIHRoZSBzYW1lIGlkIGFzIGFueSBvZiB0aGUgYWRkZWQgaXRlbXMgYWxyZWFkeSBleGlzdHMuXG4gICAqL1xuICBwdWJsaWMgYWRkKGRhdGE6IEl0ZW0gfCBJdGVtW10sIHNlbmRlcklkPzogSWQgfCBudWxsKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gICAgY29uc3QgYWRkZWRJZHM6IElkW10gPSBbXTtcbiAgICBsZXQgaWQ6IElkO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIC8vIEFycmF5XG4gICAgICBjb25zdCBpZHNUb0FkZDogSWRbXSA9IGRhdGEubWFwKChkKSA9PiBkW3RoaXMuX2lkUHJvcF0gYXMgSWQpO1xuICAgICAgaWYgKGlkc1RvQWRkLnNvbWUoKGlkKSA9PiB0aGlzLl9kYXRhLmhhcyhpZCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgZHVwbGljYXRlIGlkIHdhcyBmb3VuZCBpbiB0aGUgcGFyYW1ldGVyIGFycmF5LlwiKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBkYXRhLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlkID0gdGhpcy5fYWRkSXRlbShkYXRhW2ldKTtcbiAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBTaW5nbGUgaXRlbVxuICAgICAgaWQgPSB0aGlzLl9hZGRJdGVtKGRhdGEpO1xuICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGF0YVR5cGVcIik7XG4gICAgfVxuXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9LCBzZW5kZXJJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBpdGVtcy4gV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBwcm92aWRlZCBwcm9wZXJ0aWVzIHdpbGwgYmUgbWVyZ2VkIGluIHRoZSBleGlzdGluZyBpdGVtLiBXaGVuIGFuIGl0ZW0gZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSB1cGRhdGVkLCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYGFkZGAgZm9yIHRoZSBhZGRlZCBpdGVtcywgYW5kIGFuIGV2ZW50IGB1cGRhdGVgLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyBpZDogMywgdGV4dDogJ2l0ZW0gMycgfVxuICAgKiBdKVxuICAgKlxuICAgKiAvLyB1cGRhdGUgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS51cGRhdGUoW1xuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDIgKHVwZGF0ZWQpJyB9LFxuICAgKiAgIHsgaWQ6IDQsIHRleHQ6ICdpdGVtIDQgKG5ldyknIH1cbiAgICogXSlcbiAgICpcbiAgICogY29uc29sZS5sb2coaWRzKSAvLyBbMiwgNF1cbiAgICogYGBgXG4gICAqXG4gICAqICMjIFdhcm5pbmcgZm9yIFR5cGVTY3JpcHQgdXNlcnNcbiAgICogVGhpcyBtZXRob2QgbWF5IGludHJvZHVjZSBwYXJ0aWFsIGl0ZW1zIGludG8gdGhlIGRhdGEgc2V0LiBVc2UgYWRkIG9yIHVwZGF0ZU9ubHkgaW5zdGVhZCBmb3IgYmV0dGVyIHR5cGUgc2FmZXR5LlxuICAgKiBAcGFyYW0gZGF0YSAtIEl0ZW1zIHRvIGJlIHVwZGF0ZWQgKGlmIHRoZSBpZCBpcyBhbHJlYWR5IHByZXNlbnQpIG9yIGFkZGVkIChpZiB0aGUgaWQgaXMgbWlzc2luZykuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgdXBkYXRlZElkcyAtIFRoZSBpZHMgb2YgdGhlIGFkZGVkICh0aGVzZSBtYXkgYmUgbmV3bHkgZ2VuZXJhdGVkIGlmIHRoZXJlIHdhcyBubyBpZCBpbiB0aGUgaXRlbSBmcm9tIHRoZSBkYXRhKSBvciB1cGRhdGVkIGl0ZW1zLlxuICAgKiBAdGhyb3dzIFdoZW4gdGhlIHN1cHBsaWVkIGRhdGEgaXMgbmVpdGhlciBhbiBpdGVtIG5vciBhbiBhcnJheSBvZiBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGUoXG4gICAgZGF0YTogRGVlcFBhcnRpYWw8SXRlbT4gfCBEZWVwUGFydGlhbDxJdGVtPltdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IElkW10ge1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgdXBkYXRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCBpZFByb3AgPSB0aGlzLl9pZFByb3A7XG5cbiAgICBjb25zdCBhZGRPclVwZGF0ZSA9IChpdGVtOiBEZWVwUGFydGlhbDxJdGVtPik6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgb3JpZ0lkOiBPcHRJZCA9IGl0ZW1baWRQcm9wXTtcbiAgICAgIGlmIChvcmlnSWQgIT0gbnVsbCAmJiB0aGlzLl9kYXRhLmhhcyhvcmlnSWQpKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxJdGVtID0gaXRlbSBhcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+OyAvLyBpdCBoYXMgYW4gaWQsIHRoZXJlZm9yZSBpdCBpcyBhIGZ1bGxpdGVtXG4gICAgICAgIGNvbnN0IG9sZEl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kYXRhLmdldChvcmlnSWQpKTtcbiAgICAgICAgLy8gdXBkYXRlIGl0ZW1cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLl91cGRhdGVJdGVtKGZ1bGxJdGVtKTtcbiAgICAgICAgdXBkYXRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgdXBkYXRlZERhdGEucHVzaChmdWxsSXRlbSk7XG4gICAgICAgIG9sZERhdGEucHVzaChvbGRJdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFkZCBuZXcgaXRlbVxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuX2FkZEl0ZW0oaXRlbSBhcyBhbnkpO1xuICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIC8vIEFycmF5XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoZGF0YVtpXSAmJiB0eXBlb2YgZGF0YVtpXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIGFkZE9yVXBkYXRlKGRhdGFbaV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiSWdub3JpbmcgaW5wdXQgaXRlbSwgd2hpY2ggaXMgbm90IGFuIG9iamVjdCBhdCBpbmRleCBcIiArIGlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBTaW5nbGUgaXRlbVxuICAgICAgYWRkT3JVcGRhdGUoZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGF0YVR5cGVcIik7XG4gICAgfVxuXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9LCBzZW5kZXJJZCk7XG4gICAgfVxuICAgIGlmICh1cGRhdGVkSWRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgcHJvcHMgPSB7IGl0ZW1zOiB1cGRhdGVkSWRzLCBvbGREYXRhOiBvbGREYXRhLCBkYXRhOiB1cGRhdGVkRGF0YSB9O1xuICAgICAgLy8gVE9ETzogcmVtb3ZlIGRlcHJlY2F0ZWQgcHJvcGVydHkgJ2RhdGEnIHNvbWUgZGF5XG4gICAgICAvL09iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2RhdGEnLCB7XG4gICAgICAvLyAgJ2dldCc6IChmdW5jdGlvbigpIHtcbiAgICAgIC8vICAgIGNvbnNvbGUud2FybignUHJvcGVydHkgZGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgRGF0YVNldC5nZXQoaWRzKSB0byByZXRyaWV2ZSB0aGUgbmV3IGRhdGEsIHVzZSB0aGUgb2xkRGF0YSBwcm9wZXJ0eSBvbiB0aGlzIG9iamVjdCB0byBnZXQgdGhlIG9sZCBkYXRhJyk7XG4gICAgICAvLyAgICByZXR1cm4gdXBkYXRlZERhdGE7XG4gICAgICAvLyAgfSkuYmluZCh0aGlzKVxuICAgICAgLy99KTtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJ1cGRhdGVcIiwgcHJvcHMsIHNlbmRlcklkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkZWRJZHMuY29uY2F0KHVwZGF0ZWRJZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBpdGVtcy4gV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0LCBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIHByb3ZpZGVkIHByb3BlcnRpZXMgd2lsbCBiZSBkZWVwbHkgbWVyZ2VkIGludG8gdGhlIGV4aXN0aW5nIGl0ZW0uXG4gICAqIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCAoaWQgbm90IHByZXNlbnQgaW4gdGhlIGRhdGEgc2V0IG9yIGFic2VudCksIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duIGFuZCBub3RoaW5nIHdpbGwgYmUgY2hhbmdlZC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSB1cGRhdGVkLCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYHVwZGF0ZWAuXG4gICAqIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gICAqIGNvbnN0IGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoW1xuICAgKiAgIHsgaWQ6IDEsIHRleHQ6ICdpdGVtIDEnIH0sXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMicgfSxcbiAgICogICB7IGlkOiAzLCB0ZXh0OiAnaXRlbSAzJyB9LFxuICAgKiBdKVxuICAgKlxuICAgKiAvLyB1cGRhdGUgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS51cGRhdGUoW1xuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDIgKHVwZGF0ZWQpJyB9LCAvLyB3b3Jrc1xuICAgKiAgIC8vIHsgaWQ6IDQsIHRleHQ6ICdpdGVtIDQgKG5ldyknIH0sIC8vIHdvdWxkIHRocm93XG4gICAqICAgLy8geyB0ZXh0OiAnaXRlbSA0IChuZXcpJyB9LCAvLyB3b3VsZCBhbHNvIHRocm93XG4gICAqIF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzJdXG4gICAqIGBgYFxuICAgKiBAcGFyYW0gZGF0YSAtIFVwZGF0ZXMgKHRoZSBpZCBhbmQgb3B0aW9uYWxseSBvdGhlciBwcm9wcykgdG8gdGhlIGl0ZW1zIGluIHRoaXMgZGF0YSBzZXQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgdXBkYXRlZElkcyAtIFRoZSBpZHMgb2YgdGhlIHVwZGF0ZWQgaXRlbXMuXG4gICAqIEB0aHJvd3MgV2hlbiB0aGUgc3VwcGxpZWQgZGF0YSBpcyBuZWl0aGVyIGFuIGl0ZW0gbm9yIGFuIGFycmF5IG9mIGl0ZW1zLCB3aGVuIHRoZSBpZHMgYXJlIG1pc3NpbmcuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlT25seShcbiAgICBkYXRhOiBVcGRhdGVJdGVtPEl0ZW0sIElkUHJvcD4gfCBVcGRhdGVJdGVtPEl0ZW0sIElkUHJvcD5bXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiBJZFtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlRXZlbnREYXRhID0gZGF0YVxuICAgICAgLm1hcChcbiAgICAgICAgKFxuICAgICAgICAgIHVwZGF0ZVxuICAgICAgICApOiB7XG4gICAgICAgICAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgICB1cGRhdGU6IFVwZGF0ZUl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgfSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2xkRGF0YSA9IHRoaXMuX2RhdGEuZ2V0KHVwZGF0ZVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgICBpZiAob2xkRGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVcGRhdGluZyBub24tZXhpc3RlbnQgaXRlbXMgaXMgbm90IGFsbG93ZWQuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBvbGREYXRhLCB1cGRhdGUgfTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLm1hcChcbiAgICAgICAgKHtcbiAgICAgICAgICBvbGREYXRhLFxuICAgICAgICAgIHVwZGF0ZSxcbiAgICAgICAgfSk6IHtcbiAgICAgICAgICBpZDogSWQ7XG4gICAgICAgICAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgICB1cGRhdGVkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgfSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBvbGREYXRhW3RoaXMuX2lkUHJvcF07XG4gICAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBwdXJlRGVlcE9iamVjdEFzc2lnbihvbGREYXRhLCB1cGRhdGUpO1xuXG4gICAgICAgICAgdGhpcy5fZGF0YS5zZXQoaWQsIHVwZGF0ZWREYXRhKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG9sZERhdGE6IG9sZERhdGEsXG4gICAgICAgICAgICB1cGRhdGVkRGF0YSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgaWYgKHVwZGF0ZUV2ZW50RGF0YS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByb3BzOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl0gPSB7XG4gICAgICAgIGl0ZW1zOiB1cGRhdGVFdmVudERhdGEubWFwKCh2YWx1ZSk6IElkID0+IHZhbHVlLmlkKSxcbiAgICAgICAgb2xkRGF0YTogdXBkYXRlRXZlbnREYXRhLm1hcChcbiAgICAgICAgICAodmFsdWUpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+ID0+IHZhbHVlLm9sZERhdGFcbiAgICAgICAgKSxcbiAgICAgICAgZGF0YTogdXBkYXRlRXZlbnREYXRhLm1hcChcbiAgICAgICAgICAodmFsdWUpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+ID0+IHZhbHVlLnVwZGF0ZWREYXRhXG4gICAgICAgICksXG4gICAgICB9O1xuICAgICAgLy8gVE9ETzogcmVtb3ZlIGRlcHJlY2F0ZWQgcHJvcGVydHkgJ2RhdGEnIHNvbWUgZGF5XG4gICAgICAvL09iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2RhdGEnLCB7XG4gICAgICAvLyAgJ2dldCc6IChmdW5jdGlvbigpIHtcbiAgICAgIC8vICAgIGNvbnNvbGUud2FybignUHJvcGVydHkgZGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgRGF0YVNldC5nZXQoaWRzKSB0byByZXRyaWV2ZSB0aGUgbmV3IGRhdGEsIHVzZSB0aGUgb2xkRGF0YSBwcm9wZXJ0eSBvbiB0aGlzIG9iamVjdCB0byBnZXQgdGhlIG9sZCBkYXRhJyk7XG4gICAgICAvLyAgICByZXR1cm4gdXBkYXRlZERhdGE7XG4gICAgICAvLyAgfSkuYmluZCh0aGlzKVxuICAgICAgLy99KTtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJ1cGRhdGVcIiwgcHJvcHMsIHNlbmRlcklkKTtcblxuICAgICAgcmV0dXJuIHByb3BzLml0ZW1zO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoaWRzOiBJZFtdKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZCB8IElkW10sXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6XG4gICAgfCBudWxsXG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+XG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W11cbiAgICB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgZmlyc3Q/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiB8IElkIHwgSWRbXSxcbiAgICBzZWNvbmQ/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+IHtcbiAgICAvLyBAVE9ETzogV291ZG4ndCBpdCBiZSBiZXR0ZXIgdG8gc3BsaXQgdGhpcyBpbnRvIG11bHRpcGxlIG1ldGhvZHM/XG5cbiAgICAvLyBwYXJzZSB0aGUgYXJndW1lbnRzXG4gICAgbGV0IGlkOiBJZCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaWRzOiBJZFtdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNJZChmaXJzdCkpIHtcbiAgICAgIC8vIGdldChpZCBbLCBvcHRpb25zXSlcbiAgICAgIGlkID0gZmlyc3Q7XG4gICAgICBvcHRpb25zID0gc2Vjb25kO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaXJzdCkpIHtcbiAgICAgIC8vIGdldChpZHMgWywgb3B0aW9uc10pXG4gICAgICBpZHMgPSBmaXJzdDtcbiAgICAgIG9wdGlvbnMgPSBzZWNvbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldChbLCBvcHRpb25zXSlcbiAgICAgIG9wdGlvbnMgPSBmaXJzdDtcbiAgICB9XG5cbiAgICAvLyBkZXRlcm1pbmUgdGhlIHJldHVybiB0eXBlXG4gICAgY29uc3QgcmV0dXJuVHlwZSA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMucmV0dXJuVHlwZSA9PT0gXCJPYmplY3RcIiA/IFwiT2JqZWN0XCIgOiBcIkFycmF5XCI7XG4gICAgLy8gQFRPRE86IFdURiBpcyB0aGlzPyBPciBhbSBJIG1pc3Npbmcgc29tZXRoaW5nP1xuICAgIC8vIHZhciByZXR1cm5UeXBlXG4gICAgLy8gaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXR1cm5UeXBlKSB7XG4gICAgLy8gICB2YXIgYWxsb3dlZFZhbHVlcyA9IFsnQXJyYXknLCAnT2JqZWN0J11cbiAgICAvLyAgIHJldHVyblR5cGUgPVxuICAgIC8vICAgICBhbGxvd2VkVmFsdWVzLmluZGV4T2Yob3B0aW9ucy5yZXR1cm5UeXBlKSA9PSAtMVxuICAgIC8vICAgICAgID8gJ0FycmF5J1xuICAgIC8vICAgICAgIDogb3B0aW9ucy5yZXR1cm5UeXBlXG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIHJldHVyblR5cGUgPSAnQXJyYXknXG4gICAgLy8gfVxuXG4gICAgLy8gYnVpbGQgb3B0aW9uc1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3QgaXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGxldCBpdGVtOiB1bmRlZmluZWQgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+ID0gdW5kZWZpbmVkO1xuICAgIGxldCBpdGVtSWRzOiB1bmRlZmluZWQgfCBJZFtdID0gdW5kZWZpbmVkO1xuICAgIGxldCBpdGVtSWQ6IHVuZGVmaW5lZCB8IElkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gY29udmVydCBpdGVtc1xuICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAvLyByZXR1cm4gYSBzaW5nbGUgaXRlbVxuICAgICAgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgIGlmIChpdGVtICYmIGZpbHRlciAmJiAhZmlsdGVyKGl0ZW0pKSB7XG4gICAgICAgIGl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpZHMgIT0gbnVsbCkge1xuICAgICAgLy8gcmV0dXJuIGEgc3Vic2V0IG9mIGl0ZW1zXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZHNbaV0pO1xuICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJldHVybiBhbGwgaXRlbXNcbiAgICAgIGl0ZW1JZHMgPSBbLi4udGhpcy5fZGF0YS5rZXlzKCldO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaXRlbUlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGl0ZW1JZCk7XG4gICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvcmRlciB0aGUgcmVzdWx0c1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMub3JkZXIgJiYgaWQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9zb3J0KGl0ZW1zLCBvcHRpb25zLm9yZGVyKTtcbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgZmllbGRzIG9mIHRoZSBpdGVtc1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZmllbGRzKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBvcHRpb25zLmZpZWxkcztcbiAgICAgIGlmIChpZCAhPSB1bmRlZmluZWQgJiYgaXRlbSAhPSBudWxsKSB7XG4gICAgICAgIGl0ZW0gPSB0aGlzLl9maWx0ZXJGaWVsZHMoaXRlbSwgZmllbGRzKSBhcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaXRlbXNbaV0gPSB0aGlzLl9maWx0ZXJGaWVsZHMoaXRlbXNbaV0sIGZpZWxkcykgYXMgRnVsbEl0ZW08XG4gICAgICAgICAgICBJdGVtLFxuICAgICAgICAgICAgSWRQcm9wXG4gICAgICAgICAgPjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJldHVybiB0aGUgcmVzdWx0c1xuICAgIGlmIChyZXR1cm5UeXBlID09IFwiT2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4gPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCByZXN1bHRhbnQgPSBpdGVtc1tpXTtcbiAgICAgICAgLy8gQFRPRE86IFNob3Vkbid0IHRoaXMgYmUgdGhpcy5fZmllbGRJZD9cbiAgICAgICAgLy8gcmVzdWx0W3Jlc3VsdGFudC5pZF0gPSByZXN1bHRhbnRcbiAgICAgICAgY29uc3QgaWQ6IElkID0gcmVzdWx0YW50W3RoaXMuX2lkUHJvcF07XG4gICAgICAgIHJlc3VsdFtpZF0gPSByZXN1bHRhbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAvLyBhIHNpbmdsZSBpdGVtXG4gICAgICAgIHJldHVybiBpdGVtID8/IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBqdXN0IHJldHVybiBvdXIgYXJyYXlcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0SWRzKG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPik6IElkW10ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3Qgb3JkZXIgPSBvcHRpb25zICYmIG9wdGlvbnMub3JkZXI7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG4gICAgY29uc3QgaWRzOiBJZFtdID0gW107XG5cbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAvLyBnZXQgZmlsdGVyZWQgaXRlbXNcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICAvLyBjcmVhdGUgb3JkZXJlZCBsaXN0XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiBmaWx0ZXIoaXRlbSkpIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc29ydChpdGVtcywgb3JkZXIpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlkcy5wdXNoKGl0ZW1zW2ldW3RoaXMuX2lkUHJvcF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgdW5vcmRlcmVkIGxpc3RcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmIGZpbHRlcihpdGVtKSkge1xuICAgICAgICAgICAgaWRzLnB1c2goaXRlbVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZ2V0IGFsbCBpdGVtc1xuICAgICAgaWYgKG9yZGVyKSB7XG4gICAgICAgIC8vIGNyZWF0ZSBhbiBvcmRlcmVkIGxpc3RcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgICAgaXRlbXMucHVzaChkYXRhLmdldChpZCkhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NvcnQoaXRlbXMsIG9yZGVyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZHMucHVzaChpdGVtc1tpXVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIHVub3JkZXJlZCBsaXN0XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWRzLnB1c2goaXRlbVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaWRzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcikge1xuICAgICAgLy8gZXhlY3V0ZSBmb3JFYWNoIG9uIG9yZGVyZWQgbGlzdFxuICAgICAgY29uc3QgaXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IHRoaXMuZ2V0KG9wdGlvbnMpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgICBjb25zdCBpZCA9IGl0ZW1bdGhpcy5faWRQcm9wXTtcbiAgICAgICAgY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bm9yZGVyZWRcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoaXRlbSkpKSB7XG4gICAgICAgICAgY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBtYXA8VD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+XG4gICk6IFRbXSB7XG4gICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBtYXBwZWRJdGVtczogVFtdID0gW107XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG5cbiAgICAvLyBjb252ZXJ0IGFuZCBmaWx0ZXIgaXRlbXNcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICBtYXBwZWRJdGVtcy5wdXNoKGNhbGxiYWNrKGl0ZW0sIGlkKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgaXRlbXNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyKSB7XG4gICAgICB0aGlzLl9zb3J0KG1hcHBlZEl0ZW1zLCBvcHRpb25zLm9yZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwcGVkSXRlbXM7XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXJGaWVsZHM8SyBleHRlbmRzIHN0cmluZz4oaXRlbTogbnVsbCwgZmllbGRzOiBLW10pOiBudWxsO1xuICBwcml2YXRlIF9maWx0ZXJGaWVsZHM8SyBleHRlbmRzIHN0cmluZz4oXG4gICAgaXRlbTogUmVjb3JkPEssIHVua25vd24+LFxuICAgIGZpZWxkczogS1tdXG4gICk6IFJlY29yZDxLLCB1bmtub3duPjtcbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGl0ZW06IFJlY29yZDxLLCB1bmtub3duPixcbiAgICBmaWVsZHM6IEtbXSB8IFJlY29yZDxLLCBzdHJpbmc+XG4gICk6IGFueTtcbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgZmllbGRzIG9mIGFuIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gd2hvc2UgZmllbGRzIHNob3VsZCBiZSBmaWx0ZXJlZC5cbiAgICogQHBhcmFtIGZpZWxkcyAtIFRoZSBuYW1lcyBvZiB0aGUgZmllbGRzIHRoYXQgd2lsbCBiZSBrZXB0LlxuICAgKiBAdHlwZVBhcmFtIEsgLSBGaWVsZCBuYW1lIHR5cGUuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgZmllbGRzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGl0ZW06IFJlY29yZDxLLCB1bmtub3duPiB8IG51bGwsXG4gICAgZmllbGRzOiBLW10gfCBSZWNvcmQ8SywgdW5rbm93bj5cbiAgKTogUmVjb3JkPEssIHVua25vd24+IHwgbnVsbCB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICAvLyBpdGVtIGlzIG51bGxcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICBBcnJheS5pc0FycmF5KGZpZWxkcylcbiAgICAgICAgPyAvLyBVc2UgdGhlIHN1cHBsaWVkIGFycmF5XG4gICAgICAgICAgZmllbGRzXG4gICAgICAgIDogLy8gVXNlIHRoZSBrZXlzIG9mIHRoZSBzdXBwbGllZCBvYmplY3RcbiAgICAgICAgICAoT2JqZWN0LmtleXMoZmllbGRzKSBhcyBLW10pXG4gICAgKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgKGZpbHRlcmVkSXRlbSwgZmllbGQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gICAgICAgIGZpbHRlcmVkSXRlbVtmaWVsZF0gPSBpdGVtW2ZpZWxkXTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbTtcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCB0aGUgcHJvdmlkZWQgYXJyYXkgd2l0aCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW1zIC0gSXRlbXMgdG8gYmUgc29ydGVkIGluIHBsYWNlLlxuICAgKiBAcGFyYW0gb3JkZXIgLSBBIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtcyBpbiB0aGUgaXRlbXMgYXJyYXkuXG4gICAqL1xuICBwcml2YXRlIF9zb3J0PFQ+KGl0ZW1zOiBUW10sIG9yZGVyOiBEYXRhSW50ZXJmYWNlT3JkZXI8VD4pOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIG9yZGVyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBvcmRlciBieSBwcm92aWRlZCBmaWVsZCBuYW1lXG4gICAgICBjb25zdCBuYW1lID0gb3JkZXI7IC8vIGZpZWxkIG5hbWVcbiAgICAgIGl0ZW1zLnNvcnQoKGEsIGIpOiAtMSB8IDAgfCAxID0+IHtcbiAgICAgICAgLy8gQFRPRE86IEhvdyB0byB0cmVhdCBtaXNzaW5nIHByb3BlcnRpZXM/XG4gICAgICAgIGNvbnN0IGF2ID0gKGEgYXMgYW55KVtuYW1lXTtcbiAgICAgICAgY29uc3QgYnYgPSAoYiBhcyBhbnkpW25hbWVdO1xuICAgICAgICByZXR1cm4gYXYgPiBidiA/IDEgOiBhdiA8IGJ2ID8gLTEgOiAwO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3JkZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgLy8gb3JkZXIgYnkgc29ydCBmdW5jdGlvblxuICAgICAgaXRlbXMuc29ydChvcmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IGV4dGVuZCBvcmRlciBieSBhbiBPYmplY3Qge2ZpZWxkOnN0cmluZywgZGlyZWN0aW9uOnN0cmluZ31cbiAgICAgIC8vICAgICAgIHdoZXJlIGRpcmVjdGlvbiBjYW4gYmUgJ2FzYycgb3IgJ2Rlc2MnXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT3JkZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaXRlbSBvciBtdWx0aXBsZSBpdGVtcyBieSDigJxyZWZlcmVuY2XigJ0gKG9ubHkgdGhlIGlkIGlzIHVzZWQpIG9yIGJ5IGlkLlxuICAgKlxuICAgKiBUaGUgbWV0aG9kIGlnbm9yZXMgcmVtb3ZhbCBvZiBub24tZXhpc3RpbmcgaXRlbXMsIGFuZCByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiB0aGUgaXRlbXMgd2hpY2ggYXJlIGFjdHVhbGx5IHJlbW92ZWQgZnJvbSB0aGUgRGF0YVNldC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSByZW1vdmVkLCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYHJlbW92ZWAgZm9yIHRoZSByZW1vdmVkIGl0ZW1zLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyBpZDogMywgdGV4dDogJ2l0ZW0gMycgfVxuICAgKiBdKVxuICAgKlxuICAgKiAvLyByZW1vdmUgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS5yZW1vdmUoWzIsIHsgaWQ6IDMgfSwgNF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzIsIDNdXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBPbmUgb3IgbW9yZSBpdGVtcyBvciBpZHMgb2YgaXRlbXMgdG8gYmUgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gU2VuZGVyIGlkLlxuICAgKiBAcmV0dXJucyBUaGUgaWRzIG9mIHRoZSByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZShpZDogSWQgfCBJdGVtIHwgKElkIHwgSXRlbSlbXSwgc2VuZGVySWQ/OiBJZCB8IG51bGwpOiBJZFtdIHtcbiAgICBjb25zdCByZW1vdmVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIC8vIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gYmUgYW4gYXJyYXkgZm9yIHNpbXBsaWNpdHlcbiAgICBjb25zdCBpZHMgPSBBcnJheS5pc0FycmF5KGlkKSA/IGlkIDogW2lkXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9yZW1vdmUoaWRzW2ldKTtcbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1JZDogT3B0SWQgPSBpdGVtW3RoaXMuX2lkUHJvcF07XG4gICAgICAgIGlmIChpdGVtSWQgIT0gbnVsbCkge1xuICAgICAgICAgIHJlbW92ZWRJZHMucHVzaChpdGVtSWQpO1xuICAgICAgICAgIHJlbW92ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICBcInJlbW92ZVwiLFxuICAgICAgICB7IGl0ZW1zOiByZW1vdmVkSWRzLCBvbGREYXRhOiByZW1vdmVkSXRlbXMgfSxcbiAgICAgICAgc2VuZGVySWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbW92ZWRJZHM7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGl0ZW0gYnkgaXRzIGlkIG9yIHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gSWQgb2YgYW4gaXRlbSBvciB0aGUgaXRlbSBpdHNlbGYuXG4gICAqIEByZXR1cm5zIFRoZSByZW1vdmVkIGl0ZW0gaWYgcmVtb3ZlZCwgbnVsbCBvdGhlcndpc2UuXG4gICAqL1xuICBwcml2YXRlIF9yZW1vdmUoaWQ6IElkIHwgSXRlbSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBudWxsIHtcbiAgICAvLyBAVE9ETzogSXQgb3JpZ2lhbmxseSByZXR1cm5lZCB0aGUgaXRlbSBhbHRob3VnaCB0aGUgZG9jcyBzYXkgaWQuXG4gICAgLy8gVGhlIGNvZGUgZXhwZWN0cyB0aGUgaXRlbSwgc28gcHJvYmFibHkgYW4gZXJyb3IgaW4gdGhlIGRvY3MuXG4gICAgbGV0IGlkZW50OiBPcHRJZDtcblxuICAgIC8vIGNvbmZpcm0gdGhlIGlkIHRvIHVzZSBiYXNlZCBvbiB0aGUgYXJncyB0eXBlXG4gICAgaWYgKGlzSWQoaWQpKSB7XG4gICAgICBpZGVudCA9IGlkO1xuICAgIH0gZWxzZSBpZiAoaWQgJiYgdHlwZW9mIGlkID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZGVudCA9IGlkW3RoaXMuX2lkUHJvcF07IC8vIGxvb2sgZm9yIHRoZSBpZGVudGlmaWVyIGZpZWxkIHVzaW5nIC5faWRQcm9wXG4gICAgfVxuXG4gICAgLy8gZG8gdGhlIHJlbW92aW5nIGlmIHRoZSBpdGVtIGlzIGZvdW5kXG4gICAgaWYgKGlkZW50ICE9IG51bGwgJiYgdGhpcy5fZGF0YS5oYXMoaWRlbnQpKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWRlbnQpIHx8IG51bGw7XG4gICAgICB0aGlzLl9kYXRhLmRlbGV0ZShpZGVudCk7XG4gICAgICAtLXRoaXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIGVudGlyZSBkYXRhIHNldC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSByZW1vdmVkLCB0aGUge0BsaW5rIERhdGFTZXR9IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgcmVtb3ZlYCBmb3IgYWxsIHJlbW92ZWQgaXRlbXMuIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgcmVtb3ZlZElkcyAtIFRoZSBpZHMgb2YgYWxsIHJlbW92ZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoc2VuZGVySWQ/OiBJZCB8IG51bGwpOiBJZFtdIHtcbiAgICBjb25zdCBpZHMgPSBbLi4udGhpcy5fZGF0YS5rZXlzKCldO1xuICAgIGNvbnN0IGl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5fZGF0YS5nZXQoaWRzW2ldKSEpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGEuY2xlYXIoKTtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsIHsgaXRlbXM6IGlkcywgb2xkRGF0YTogaXRlbXMgfSwgc2VuZGVySWQpO1xuXG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBpdGVtIHdpdGggbWF4aW11bSB2YWx1ZSBvZiBhIHNwZWNpZmllZCBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBzaG91bGQgYmUgc2VhcmNoZWQgZm9yIG1heCB2YWx1ZS5cbiAgICogQHJldHVybnMgSXRlbSBjb250YWluaW5nIG1heCB2YWx1ZSwgb3IgbnVsbCBpZiBubyBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBtYXgoZmllbGQ6IGtleW9mIEl0ZW0pOiBJdGVtIHwgbnVsbCB7XG4gICAgbGV0IG1heCA9IG51bGw7XG4gICAgbGV0IG1heEZpZWxkID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLl9kYXRhLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBpdGVtRmllbGQgPSBpdGVtW2ZpZWxkXTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGl0ZW1GaWVsZCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAobWF4RmllbGQgPT0gbnVsbCB8fCBpdGVtRmllbGQgPiBtYXhGaWVsZClcbiAgICAgICkge1xuICAgICAgICBtYXggPSBpdGVtO1xuICAgICAgICBtYXhGaWVsZCA9IGl0ZW1GaWVsZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF4IHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaXRlbSB3aXRoIG1pbmltdW0gdmFsdWUgb2YgYSBzcGVjaWZpZWQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIGZvciBtaW4gdmFsdWUuXG4gICAqIEByZXR1cm5zIEl0ZW0gY29udGFpbmluZyBtaW4gdmFsdWUsIG9yIG51bGwgaWYgbm8gaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgbWluKGZpZWxkOiBrZXlvZiBJdGVtKTogSXRlbSB8IG51bGwge1xuICAgIGxldCBtaW4gPSBudWxsO1xuICAgIGxldCBtaW5GaWVsZCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fZGF0YS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgaXRlbUZpZWxkID0gaXRlbVtmaWVsZF07XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBpdGVtRmllbGQgPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgKG1pbkZpZWxkID09IG51bGwgfHwgaXRlbUZpZWxkIDwgbWluRmllbGQpXG4gICAgICApIHtcbiAgICAgICAgbWluID0gaXRlbTtcbiAgICAgICAgbWluRmllbGQgPSBpdGVtRmllbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbiB8fCBudWxsO1xuICB9XG5cbiAgcHVibGljIGRpc3RpbmN0PFQgZXh0ZW5kcyBrZXlvZiBJdGVtPihwcm9wOiBUKTogSXRlbVtUXVtdO1xuICBwdWJsaWMgZGlzdGluY3QocHJvcDogc3RyaW5nKTogdW5rbm93bltdO1xuICAvKipcbiAgICogRmluZCBhbGwgZGlzdGluY3QgdmFsdWVzIG9mIGEgc3BlY2lmaWVkIGZpZWxkXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wIC0gVGhlIHByb3BlcnR5IG5hbWUgd2hvc2UgZGlzdGluY3QgdmFsdWVzIHNob3VsZCBiZSByZXR1cm5lZC5cbiAgICogQHJldHVybnMgVW5vcmRlcmVkIGFycmF5IGNvbnRhaW5pbmcgYWxsIGRpc3RpbmN0IHZhbHVlcy4gSXRlbXMgd2l0aG91dCBzcGVjaWZpZWQgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gICAqL1xuICBwdWJsaWMgZGlzdGluY3Q8VCBleHRlbmRzIHN0cmluZz4ocHJvcDogVCk6IHVua25vd25bXSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG4gICAgY29uc3QgdmFsdWVzOiB1bmtub3duW10gPSBbXTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmdldChpZCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IChpdGVtIGFzIGFueSlbcHJvcF07XG4gICAgICBsZXQgZXhpc3RzID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgaWYgKHZhbHVlc1tqXSA9PSB2YWx1ZSkge1xuICAgICAgICAgIGV4aXN0cyA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZXhpc3RzICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWVzW2NvdW50XSA9IHZhbHVlO1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2luZ2xlIGl0ZW0uIFdpbGwgZmFpbCB3aGVuIGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpZCBhbHJlYWR5IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW0gLSBBIG5ldyBpdGVtIHRvIGJlIGFkZGVkLlxuICAgKiBAcmV0dXJucyBBZGRlZCBpdGVtJ3MgaWQuIEFuIGlkIGlzIGdlbmVyYXRlZCB3aGVuIGl0IGlzIG5vdCBwcmVzZW50IGluIHRoZSBpdGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkSXRlbShpdGVtOiBJdGVtKTogSWQge1xuICAgIGNvbnN0IGZ1bGxJdGVtID0gZW5zdXJlRnVsbEl0ZW0oaXRlbSwgdGhpcy5faWRQcm9wKTtcbiAgICBjb25zdCBpZCA9IGZ1bGxJdGVtW3RoaXMuX2lkUHJvcF07XG5cbiAgICAvLyBjaGVjayB3aGV0aGVyIHRoaXMgaWQgaXMgYWxyZWFkeSB0YWtlblxuICAgIGlmICh0aGlzLl9kYXRhLmhhcyhpZCkpIHtcbiAgICAgIC8vIGl0ZW0gYWxyZWFkeSBleGlzdHNcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgYWRkIGl0ZW06IGl0ZW0gd2l0aCBpZCBcIiArIGlkICsgXCIgYWxyZWFkeSBleGlzdHNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhLnNldChpZCwgZnVsbEl0ZW0pO1xuICAgICsrdGhpcy5sZW5ndGg7XG5cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGEgc2luZ2xlIGl0ZW06IG1lcmdlIHdpdGggZXhpc3RpbmcgaXRlbS5cbiAgICogV2lsbCBmYWlsIHdoZW4gdGhlIGl0ZW0gaGFzIG5vIGlkLCBvciB3aGVuIHRoZXJlIGRvZXMgbm90IGV4aXN0IGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpZC5cbiAgICpcbiAgICogQHBhcmFtIHVwZGF0ZSAtIFRoZSBuZXcgaXRlbVxuICAgKiBAcmV0dXJucyBUaGUgaWQgb2YgdGhlIHVwZGF0ZWQgaXRlbS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZUl0ZW0odXBkYXRlOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+KTogSWQge1xuICAgIGNvbnN0IGlkOiBPcHRJZCA9IHVwZGF0ZVt0aGlzLl9pZFByb3BdO1xuICAgIGlmIChpZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHVwZGF0ZSBpdGVtOiBpdGVtIGhhcyBubyBpZCAoaXRlbTogXCIgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVwZGF0ZSkgK1xuICAgICAgICAgIFwiKVwiXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgIGlmICghaXRlbSkge1xuICAgICAgLy8gaXRlbSBkb2Vzbid0IGV4aXN0XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXBkYXRlIGl0ZW06IG5vIGl0ZW0gd2l0aCBpZCBcIiArIGlkICsgXCIgZm91bmRcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YS5zZXQoaWQsIHsgLi4uaXRlbSwgLi4udXBkYXRlIH0pO1xuXG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdHJlYW0oaWRzPzogSXRlcmFibGU8SWQ+KTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgaWYgKGlkcykge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbTxJdGVtPih7XG4gICAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRhdGEuZ2V0KGlkKTtcbiAgICAgICAgICAgIGlmIChpdGVtICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtKHtcbiAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06IHRoaXMuX2RhdGEuZW50cmllcy5iaW5kKHRoaXMuX2RhdGEpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyogZGV2ZWxibG9jazpzdGFydCAqL1xuICBwdWJsaWMgZ2V0IHRlc3RMZWFrRGF0YSgpOiBNYXA8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRlc3RMZWFrSWRQcm9wKCk6IElkUHJvcCB7XG4gICAgcmV0dXJuIHRoaXMuX2lkUHJvcDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRlc3RMZWFrT3B0aW9ucygpOiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgcHVibGljIGdldCB0ZXN0TGVha1F1ZXVlKCk6IFF1ZXVlPHRoaXM+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlO1xuICB9XG4gIHB1YmxpYyBzZXQgdGVzdExlYWtRdWV1ZSh2OiBRdWV1ZTx0aGlzPiB8IG51bGwpIHtcbiAgICB0aGlzLl9xdWV1ZSA9IHY7XG4gIH1cbiAgLyogZGV2ZWxibG9jazplbmQgKi9cbn1cbiIsICJpbXBvcnQge1xuICBEYXRhSW50ZXJmYWNlLFxuICBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheSxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3QsXG4gIERhdGFJbnRlcmZhY2VNYXBPcHRpb25zLFxuICBFdmVudENhbGxiYWNrc1dpdGhBbnksXG4gIEV2ZW50TmFtZSxcbiAgRXZlbnRQYXlsb2FkcyxcbiAgRnVsbEl0ZW0sXG4gIElkLFxuICBQYXJ0SXRlbSxcbiAgUmVtb3ZlRXZlbnRQYXlsb2FkLFxuICBVcGRhdGVFdmVudFBheWxvYWQsXG4gIGlzSWQsXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tIFwiLi9kYXRhLXNldFwiO1xuaW1wb3J0IHsgRGF0YVNldFBhcnQgfSBmcm9tIFwiLi9kYXRhLXNldC1wYXJ0XCI7XG5pbXBvcnQgeyBEYXRhU3RyZWFtIH0gZnJvbSBcIi4vZGF0YS1zdHJlYW1cIjtcblxuLyoqXG4gKiBEYXRhIHZpZXcgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhVmlld09wdGlvbnM8SXRlbSwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmllbGQgY29udGFpbmluZyB0aGUgaWQgb2YgdGhlIGl0ZW1zLiBXaGVuIGRhdGEgaXMgZmV0Y2hlZCBmcm9tIGEgc2VydmVyIHdoaWNoIHVzZXMgc29tZSBzcGVjaWZpYyBmaWVsZCB0byBpZGVudGlmeSBpdGVtcywgdGhpcyBmaWVsZCBuYW1lIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIERhdGFTZXQgdXNpbmcgdGhlIG9wdGlvbiBgZmllbGRJZGAuIEZvciBleGFtcGxlIFtDb3VjaERCXShodHRwOi8vY291Y2hkYi5hcGFjaGUub3JnLykgdXNlcyB0aGUgZmllbGQgYCdfaWQnYCB0byBpZGVudGlmeSBkb2N1bWVudHMuXG4gICAqL1xuICBmaWVsZElkPzogSWRQcm9wO1xuICAvKiogSXRlbXMgY2FuIGJlIGZpbHRlcmVkIG9uIHNwZWNpZmljIHByb3BlcnRpZXMgYnkgcHJvdmlkaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLiBBIGZpbHRlciBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgaXRlbXMgaW4gdGhlIERhdGFTZXQsIGFuZCBpcyBjYWxsZWQgd2l0aCB0aGUgaXRlbSBhcyBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIGJvb2xlYW4uIEFsbCBpdGVtcyBmb3Igd2hpY2ggdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2lsbCBiZSBlbWl0dGVkLiAqL1xuICBmaWx0ZXI/OiAoaXRlbTogSXRlbSkgPT4gYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEYXRhVmlld1xuICpcbiAqIEEgRGF0YVZpZXcgb2ZmZXJzIGEgZmlsdGVyZWQgYW5kL29yIGZvcm1hdHRlZCB2aWV3IG9uIGEgRGF0YVNldC4gT25lIGNhbiBzdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiBhIERhdGFWaWV3LCBhbmQgZWFzaWx5IGdldCBmaWx0ZXJlZCBvciBmb3JtYXR0ZWQgZGF0YSB3aXRob3V0IGhhdmluZyB0byBzcGVjaWZ5IGZpbHRlcnMgYW5kIGZpZWxkIHR5cGVzIGFsbCB0aGUgdGltZS5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gKiB2YXIgZGF0YSA9IG5ldyB2aXMuRGF0YVNldCgpO1xuICogZGF0YS5hZGQoW1xuICogICB7aWQ6IDEsIHRleHQ6ICdpdGVtIDEnLCBkYXRlOiBuZXcgRGF0ZSgyMDEzLCA2LCAyMCksIGdyb3VwOiAxLCBmaXJzdDogdHJ1ZX0sXG4gKiAgIHtpZDogMiwgdGV4dDogJ2l0ZW0gMicsIGRhdGU6ICcyMDEzLTA2LTIzJywgZ3JvdXA6IDJ9LFxuICogICB7aWQ6IDMsIHRleHQ6ICdpdGVtIDMnLCBkYXRlOiAnMjAxMy0wNi0yNScsIGdyb3VwOiAyfSxcbiAqICAge2lkOiA0LCB0ZXh0OiAnaXRlbSA0J31cbiAqIF0pO1xuICpcbiAqIC8vIGNyZWF0ZSBhIERhdGFWaWV3XG4gKiAvLyB0aGUgdmlldyB3aWxsIG9ubHkgY29udGFpbiBpdGVtcyBoYXZpbmcgYSBwcm9wZXJ0eSBncm91cCB3aXRoIHZhbHVlIDEsXG4gKiAvLyBhbmQgd2lsbCBvbmx5IG91dHB1dCBmaWVsZHMgaWQsIHRleHQsIGFuZCBkYXRlLlxuICogdmFyIHZpZXcgPSBuZXcgdmlzLkRhdGFWaWV3KGRhdGEsIHtcbiAqICAgZmlsdGVyOiBmdW5jdGlvbiAoaXRlbSkge1xuICogICAgIHJldHVybiAoaXRlbS5ncm91cCA9PSAxKTtcbiAqICAgfSxcbiAqICAgZmllbGRzOiBbJ2lkJywgJ3RleHQnLCAnZGF0ZSddXG4gKiB9KTtcbiAqXG4gKiAvLyBzdWJzY3JpYmUgdG8gYW55IGNoYW5nZSBpbiB0aGUgRGF0YVZpZXdcbiAqIHZpZXcub24oJyonLCBmdW5jdGlvbiAoZXZlbnQsIHByb3BlcnRpZXMsIHNlbmRlcklkKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdldmVudCcsIGV2ZW50LCBwcm9wZXJ0aWVzKTtcbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZSBhbiBpdGVtIGluIHRoZSBkYXRhIHNldFxuICogZGF0YS51cGRhdGUoe2lkOiAyLCBncm91cDogMX0pO1xuICpcbiAqIC8vIGdldCBhbGwgaWRzIGluIHRoZSB2aWV3XG4gKiB2YXIgaWRzID0gdmlldy5nZXRJZHMoKTtcbiAqIGNvbnNvbGUubG9nKCdpZHMnLCBpZHMpOyAvLyB3aWxsIG91dHB1dCBbMSwgMl1cbiAqXG4gKiAvLyBnZXQgYWxsIGl0ZW1zIGluIHRoZSB2aWV3XG4gKiB2YXIgaXRlbXMgPSB2aWV3LmdldCgpO1xuICogYGBgXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhVmlldzxcbiAgICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbiAgPlxuICBleHRlbmRzIERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5cbiAgaW1wbGVtZW50cyBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD5cbntcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBsZW5ndGggPSAwO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCBpZFByb3AoKTogSWRQcm9wIHtcbiAgICByZXR1cm4gdGhpcy5nZXREYXRhU2V0KCkuaWRQcm9wO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXI6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXTtcbiAgcHJpdmF0ZSBfZGF0YSE6IERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPjsgLy8gY29uc3RydWN0b3Ig4oaSIHNldERhdGFcbiAgcHJpdmF0ZSByZWFkb25seSBfaWRzOiBTZXQ8SWQ+ID0gbmV3IFNldCgpOyAvLyBpZHMgb2YgdGhlIGl0ZW1zIGN1cnJlbnRseSBpbiBtZW1vcnkgKGp1c3QgY29udGFpbnMgYSBib29sZWFuIHRydWUpXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IERhdGFWaWV3T3B0aW9uczxJdGVtLCBJZFByb3A+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRhVmlldy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgaW5zdGFuY2UgY29udGFpbmluZyBkYXRhIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGlzIGRhdGEgdmlldy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBkYXRhOiBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4sXG4gICAgb3B0aW9ucz86IERhdGFWaWV3T3B0aW9uczxJdGVtLCBJZFByb3A+XG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHRoaXMuX2xpc3RlbmVyID0gdGhpcy5fb25FdmVudC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5zZXREYXRhKGRhdGEpO1xuICB9XG5cbiAgLy8gVE9ETzogaW1wbGVtZW50IGEgZnVuY3Rpb24gLmNvbmZpZygpIHRvIGR5bmFtaWNhbGx5IHVwZGF0ZSB0aGluZ3MgbGlrZSBjb25maWd1cmVkIGZpbHRlclxuICAvLyBhbmQgdHJpZ2dlciBjaGFuZ2VzIGFjY29yZGluZ2x5XG5cbiAgLyoqXG4gICAqIFNldCBhIGRhdGEgc291cmNlIGZvciB0aGUgdmlldy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgaW5zdGFuY2UgY29udGFpbmluZyBkYXRhIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KS5cbiAgICogQHJlbWFya3NcbiAgICogTm90ZSB0aGF0IHdoZW4gdGhlIGRhdGEgdmlldyBpcyBib3VuZCB0byBhIGRhdGEgc2V0IGl0IHdvbid0IGJlIGdhcmJhZ2VcbiAgICogY29sbGVjdGVkIHVubGVzcyB0aGUgZGF0YSBzZXQgaXMgdG9vLiBVc2UgYGRhdGFWaWV3LnNldERhdGEobnVsbClgIG9yXG4gICAqIGBkYXRhVmlldy5kaXNwb3NlKClgIHRvIGVuYWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24gYmVmb3JlIHlvdSBsb3NlIHRoZSBsYXN0XG4gICAqIHJlZmVyZW5jZS5cbiAgICovXG4gIHB1YmxpYyBzZXREYXRhKGRhdGE6IERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIGN1cnJlbnQgZGF0YXNldFxuICAgICAgaWYgKHRoaXMuX2RhdGEub2ZmKSB7XG4gICAgICAgIHRoaXMuX2RhdGEub2ZmKFwiKlwiLCB0aGlzLl9saXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIC8vIHRyaWdnZXIgYSByZW1vdmUgb2YgYWxsIGl0ZW1zIGluIG1lbW9yeVxuICAgICAgY29uc3QgaWRzID0gdGhpcy5fZGF0YS5nZXRJZHMoeyBmaWx0ZXI6IHRoaXMuX29wdGlvbnMuZmlsdGVyIH0pO1xuICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9kYXRhLmdldChpZHMpO1xuXG4gICAgICB0aGlzLl9pZHMuY2xlYXIoKTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJyZW1vdmVcIiwgeyBpdGVtczogaWRzLCBvbGREYXRhOiBpdGVtcyB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9kYXRhID0gZGF0YTtcblxuICAgICAgLy8gdHJpZ2dlciBhbiBhZGQgb2YgYWxsIGFkZGVkIGl0ZW1zXG4gICAgICBjb25zdCBpZHMgPSB0aGlzLl9kYXRhLmdldElkcyh7IGZpbHRlcjogdGhpcy5fb3B0aW9ucy5maWx0ZXIgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGVuZ3RoID0gaWRzLmxlbmd0aDtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogaWRzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhID0gbmV3IERhdGFTZXQ8SXRlbSwgSWRQcm9wPigpO1xuICAgIH1cblxuICAgIC8vIHN1YnNjcmliZSB0byBuZXcgZGF0YXNldFxuICAgIGlmICh0aGlzLl9kYXRhLm9uKSB7XG4gICAgICB0aGlzLl9kYXRhLm9uKFwiKlwiLCB0aGlzLl9saXN0ZW5lcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIERhdGFWaWV3LlxuICAgKiBVc2VmdWwgd2hlbiB0aGUgRGF0YVZpZXcgaGFzIGEgZmlsdGVyIGZ1bmN0aW9uIGNvbnRhaW5pbmcgYSB2YXJpYWJsZSBwYXJhbWV0ZXIuXG4gICAqL1xuICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCBpZHMgPSB0aGlzLl9kYXRhLmdldElkcyh7XG4gICAgICBmaWx0ZXI6IHRoaXMuX29wdGlvbnMuZmlsdGVyLFxuICAgIH0pO1xuICAgIGNvbnN0IG9sZElkcyA9IFsuLi50aGlzLl9pZHNdO1xuICAgIGNvbnN0IG5ld0lkczogUmVjb3JkPElkLCBib29sZWFuPiA9IHt9O1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICAvLyBjaGVjayBmb3IgYWRkaXRpb25zXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICBuZXdJZHNbaWRdID0gdHJ1ZTtcbiAgICAgIGlmICghdGhpcy5faWRzLmhhcyhpZCkpIHtcbiAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICAgIHRoaXMuX2lkcy5hZGQoaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciByZW1vdmFsc1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBvbGRJZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gb2xkSWRzW2ldO1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgIGlmIChpdGVtID09IG51bGwpIHtcbiAgICAgICAgLy8gQFRPRE86IEludmVzdGlnYXRlLlxuICAgICAgICAvLyBEb2Vzbid0IGhhcHBlbiBkdXJpbmcgdGVzdHMgb3IgZXhhbXBsZXMuXG4gICAgICAgIC8vIElzIGl0IHJlYWxseSBpbXBvc3NpYmxlIG9yIGNvdWxkIGl0IGV2ZW50dWFsbHkgaGFwcGVuP1xuICAgICAgICAvLyBIb3cgdG8gaGFuZGxlIGl0IGlmIGl0IGRvZXM/IFRoZSB0eXBlcyBndWFyYW50ZWUgbm9uLW51bGxhYmxlIGl0ZW1zLlxuICAgICAgICBjb25zb2xlLmVycm9yKFwiSWYgeW91IHNlZSB0aGlzLCByZXBvcnQgaXQgcGxlYXNlLlwiKTtcbiAgICAgIH0gZWxzZSBpZiAoIW5ld0lkc1tpZF0pIHtcbiAgICAgICAgcmVtb3ZlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIHRoaXMuX2lkcy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoICs9IGFkZGVkSWRzLmxlbmd0aCAtIHJlbW92ZWRJZHMubGVuZ3RoO1xuXG4gICAgLy8gdHJpZ2dlciBldmVudHNcbiAgICBpZiAoYWRkZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGFkZGVkSWRzIH0pO1xuICAgIH1cbiAgICBpZiAocmVtb3ZlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJyZW1vdmVcIiwgeyBpdGVtczogcmVtb3ZlZElkcywgb2xkRGF0YTogcmVtb3ZlZEl0ZW1zIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkOiBJZCk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkczogSWRbXSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGZpcnN0PzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gfCBJZCB8IElkW10sXG4gICAgc2Vjb25kPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPHN0cmluZywgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4ge1xuICAgIGlmICh0aGlzLl9kYXRhID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHBhcnNlIHRoZSBhcmd1bWVudHNcbiAgICBsZXQgaWRzOiBJZCB8IElkW10gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgb3B0aW9uczogYW55O1xuICAgIGlmIChpc0lkKGZpcnN0KSB8fCBBcnJheS5pc0FycmF5KGZpcnN0KSkge1xuICAgICAgaWRzID0gZmlyc3Q7XG4gICAgICBvcHRpb25zID0gc2Vjb25kO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0gZmlyc3Q7XG4gICAgfVxuXG4gICAgLy8gZXh0ZW5kIHRoZSBvcHRpb25zIHdpdGggdGhlIGRlZmF1bHQgb3B0aW9ucyBhbmQgcHJvdmlkZWQgb3B0aW9uc1xuICAgIGNvbnN0IHZpZXdPcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHRoaXMuX29wdGlvbnMsXG4gICAgICBvcHRpb25zXG4gICAgKTtcblxuICAgIC8vIGNyZWF0ZSBhIGNvbWJpbmVkIGZpbHRlciBtZXRob2Qgd2hlbiBuZWVkZWRcbiAgICBjb25zdCB0aGlzRmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3Qgb3B0aW9uc0ZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgaWYgKHRoaXNGaWx0ZXIgJiYgb3B0aW9uc0ZpbHRlcikge1xuICAgICAgdmlld09wdGlvbnMuZmlsdGVyID0gKGl0ZW0pOiBib29sZWFuID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNGaWx0ZXIoaXRlbSkgJiYgb3B0aW9uc0ZpbHRlcihpdGVtKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGlkcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXQodmlld09wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXQoaWRzLCB2aWV3T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRJZHMob3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+KTogSWRbXSB7XG4gICAgaWYgKHRoaXMuX2RhdGEubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5maWx0ZXIgOiBudWxsO1xuICAgICAgbGV0IGZpbHRlcjogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT5bXCJmaWx0ZXJcIl07XG5cbiAgICAgIGlmIChvcHRpb25zRmlsdGVyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgZmlsdGVyID0gKGl0ZW0pOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIgPSBvcHRpb25zRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXRJZHMoe1xuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgb3JkZXI6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBmb3JFYWNoKFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiB2b2lkLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnM8SXRlbT5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSB0aGlzLl9vcHRpb25zLmZpbHRlcjtcbiAgICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgICAgbGV0IGZpbHRlcjogdW5kZWZpbmVkIHwgKChpdGVtOiBJdGVtKSA9PiBib29sZWFuKTtcblxuICAgICAgaWYgKG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgICBmaWx0ZXIgPSBmdW5jdGlvbiAoaXRlbTogSXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGaWx0ZXIoaXRlbSkgJiYgb3B0aW9uc0ZpbHRlcihpdGVtKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlciA9IG9wdGlvbnNGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RhdGEuZm9yRWFjaChjYWxsYmFjaywge1xuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgb3JkZXI6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbWFwPFQ+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBULFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxJdGVtLCBUPlxuICApOiBUW10ge1xuICAgIHR5cGUgRmlsdGVyID0gTm9uTnVsbGFibGU8RGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5bXCJmaWx0ZXJcIl0+O1xuXG4gICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSB0aGlzLl9vcHRpb25zLmZpbHRlcjtcbiAgICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgICAgbGV0IGZpbHRlcjogdW5kZWZpbmVkIHwgRmlsdGVyO1xuXG4gICAgICBpZiAob3B0aW9uc0ZpbHRlcikge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgIGZpbHRlciA9IChpdGVtKTogUmV0dXJuVHlwZTxGaWx0ZXI+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIgPSBvcHRpb25zRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5tYXAoY2FsbGJhY2ssIHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIG9yZGVyOiBvcHRpb25zICYmIG9wdGlvbnMub3JkZXIsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0RGF0YVNldCgpOiBEYXRhU2V0PEl0ZW0sIElkUHJvcD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmdldERhdGFTZXQoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RyZWFtKGlkcz86IEl0ZXJhYmxlPElkPik6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLnN0cmVhbShcbiAgICAgIGlkcyB8fCB7XG4gICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiB0aGlzLl9pZHMua2V5cy5iaW5kKHRoaXMuX2lkcyksXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGluc3RhbmNlIHVudXNhYmxlIHByaW9yIHRvIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGludGVudGlvbiBvZiB0aGlzIG1ldGhvZCBpcyB0byBoZWxwIGRpc2NvdmVyIHNjZW5hcmlvcyB3aGVyZSB0aGUgZGF0YVxuICAgKiB2aWV3IGlzIGJlaW5nIHVzZWQgd2hlbiB0aGUgcHJvZ3JhbW1lciB0aGlua3MgaXQgaGFzIGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWRcbiAgICogYWxyZWFkeS4gSXQncyBzdHJpY3RlciB2ZXJzaW9uIG9mIGBkYXRhVmlldy5zZXREYXRhKG51bGwpYC5cbiAgICovXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhPy5vZmYpIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmKFwiKlwiLCB0aGlzLl9saXN0ZW5lcik7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IFwiVGhpcyBkYXRhIHZpZXcgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi5cIjtcbiAgICBjb25zdCByZXBsYWNlbWVudCA9IHtcbiAgICAgIGdldDogKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9LFxuICAgICAgc2V0OiAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMoRGF0YVZpZXcucHJvdG90eXBlKSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgcmVwbGFjZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBsaXN0ZW5lci4gV2lsbCBwcm9wYWdhdGUgYWxsIGV2ZW50cyBmcm9tIHRoZSBjb25uZWN0ZWQgZGF0YSBzZXQgdG8gdGhlIHN1YnNjcmliZXJzIG9mIHRoZSBEYXRhVmlldywgYnV0IHdpbGwgZmlsdGVyIHRoZSBpdGVtcyBhbmQgb25seSB0cmlnZ2VyIHdoZW4gdGhlcmUgYXJlIGNoYW5nZXMgaW4gdGhlIGZpbHRlcmVkIGRhdGEgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gSWQgc3VwcGxpZWQgYnkgdGhlIHNlbmRlci5cbiAgICovXG4gIHByaXZhdGUgX29uRXZlbnQ8RU4gZXh0ZW5kcyBFdmVudE5hbWU+KFxuICAgIGV2ZW50OiBFTixcbiAgICBwYXJhbXM6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltFTl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy5pdGVtcyB8fCAhdGhpcy5fZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlkcyA9IHBhcmFtcy5pdGVtcztcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3Qgb2xkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgIGNhc2UgXCJhZGRcIjpcbiAgICAgICAgLy8gZmlsdGVyIHRoZSBpZHMgb2YgdGhlIGFkZGVkIGl0ZW1zXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwidXBkYXRlXCI6XG4gICAgICAgIC8vIGRldGVybWluZSB0aGUgZXZlbnQgZnJvbSB0aGUgdmlld3Mgdmlld3BvaW50OiBhbiB1cGRhdGVkXG4gICAgICAgIC8vIGl0ZW0gY2FuIGJlIGFkZGVkLCB1cGRhdGVkLCBvciByZW1vdmVkIGZyb20gdGhpcyB2aWV3LlxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0KGlkKTtcblxuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgdXBkYXRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgdXBkYXRlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgKHBhcmFtcyBhcyBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikuZGF0YVtpXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBvbGRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgIChwYXJhbXMgYXMgVXBkYXRlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLm9sZERhdGFbaV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX2lkcy5hZGQoaWQpO1xuICAgICAgICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2lkcy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICByZW1vdmVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgICAgICByZW1vdmVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAocGFyYW1zIGFzIFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+KS5vbGREYXRhW2ldXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBub3RoaW5nIGludGVyZXN0aW5nIGZvciBtZSA6LShcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInJlbW92ZVwiOlxuICAgICAgICAvLyBmaWx0ZXIgdGhlIGlkcyBvZiB0aGUgcmVtb3ZlZCBpdGVtc1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgICAgaWYgKHRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICB0aGlzLl9pZHMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIHJlbW92ZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICByZW1vdmVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgKHBhcmFtcyBhcyBSZW1vdmVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikub2xkRGF0YVtpXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCArPSBhZGRlZElkcy5sZW5ndGggLSByZW1vdmVkSWRzLmxlbmd0aDtcblxuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSwgc2VuZGVySWQpO1xuICAgIH1cbiAgICBpZiAodXBkYXRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgIFwidXBkYXRlXCIsXG4gICAgICAgIHsgaXRlbXM6IHVwZGF0ZWRJZHMsIG9sZERhdGE6IG9sZEl0ZW1zLCBkYXRhOiB1cGRhdGVkSXRlbXMgfSxcbiAgICAgICAgc2VuZGVySWRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZW1vdmVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgXCJyZW1vdmVcIixcbiAgICAgICAgeyBpdGVtczogcmVtb3ZlZElkcywgb2xkRGF0YTogcmVtb3ZlZEl0ZW1zIH0sXG4gICAgICAgIHNlbmRlcklkXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IFBhcnRJdGVtIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tIFwiLi9kYXRhLXNldFwiO1xuXG4vKipcbiAqIENoZWNrIHRoYXQgZ2l2ZW4gdmFsdWUgaXMgY29tcGF0aWJsZSB3aXRoIFZpcyBEYXRhIFNldCBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIGlkUHJvcCAtIFRoZSBleHBlY3RlZCBwcm9wZXJ0eSB0byBjb250YWluIGl0ZW0gaWQuXG4gKiBAcGFyYW0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0ZXN0ZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIGFsbCBleHBlY3RlZCB2YWx1ZXMgYW5kIG1ldGhvZHMgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YVNldExpa2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4oaWRQcm9wOiBJZFByb3AsIHY6IGFueSk6IHYgaXMgRGF0YVNldDxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHYgIT09IG51bGwgJiZcbiAgICBpZFByb3AgPT09IHYuaWRQcm9wICYmXG4gICAgdHlwZW9mIHYuYWRkID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5jbGVhciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZGlzdGluY3QgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmZvckVhY2ggPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0RGF0YVNldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0SWRzID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2Ygdi5tYXAgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm1heCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubWluID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vZmYgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm9uID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5yZW1vdmUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnNldE9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnN0cmVhbSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYudXBkYXRlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi51cGRhdGVPbmx5ID09PSBcImZ1bmN0aW9uXCJcbiAgKTtcbn1cbiIsICJpbXBvcnQgeyBEYXRhVmlldyB9IGZyb20gXCIuL2RhdGEtdmlld1wiO1xuaW1wb3J0IHsgUGFydEl0ZW0gfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuaW1wb3J0IHsgaXNEYXRhU2V0TGlrZSB9IGZyb20gXCIuL2RhdGEtc2V0LWNoZWNrXCI7XG5cbi8qKlxuICogQ2hlY2sgdGhhdCBnaXZlbiB2YWx1ZSBpcyBjb21wYXRpYmxlIHdpdGggVmlzIERhdGEgVmlldyBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIGlkUHJvcCAtIFRoZSBleHBlY3RlZCBwcm9wZXJ0eSB0byBjb250YWluIGl0ZW0gaWQuXG4gKiBAcGFyYW0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0ZXN0ZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIGFsbCBleHBlY3RlZCB2YWx1ZXMgYW5kIG1ldGhvZHMgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YVZpZXdMaWtlPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+KGlkUHJvcDogSWRQcm9wLCB2OiBhbnkpOiB2IGlzIERhdGFWaWV3PEl0ZW0sIElkUHJvcD4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgdiAhPT0gbnVsbCAmJlxuICAgIGlkUHJvcCA9PT0gdi5pZFByb3AgJiZcbiAgICB0eXBlb2Ygdi5mb3JFYWNoID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldERhdGFTZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldElkcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgdHlwZW9mIHYubWFwID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vZmYgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm9uID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5zdHJlYW0gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIGlzRGF0YVNldExpa2UoaWRQcm9wLCB2LmdldERhdGFTZXQoKSlcbiAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uIH0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy9jb21ib19ib3gvdHlwZXNcIjtcbmltcG9ydCB7XG4gIEV1aUNvbWJvQm94LFxuICBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQsXG4gIGV1aVBhbGV0dGVDb2xvckJsaW5kLFxuICBFdWlIaWdobGlnaHQsXG4gIEV1aUhlYWx0aCxcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aUljb25cbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi4vTWV0YWRhdGFXaWRnZXQvQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iUHJlc2VudGF0aW9uXCI7XG5cbi8qKlxuICogQSBSZWFjdCBjb21wb25lbnQgdG8gcHJvdmlkZSBBdXRvc3VnZ2VzdGlvbiBiYXNlZCBvbiBTZW1Mb29rUC5cbiAqL1xuZnVuY3Rpb24gQXV0b2NvbXBsZXRlV2lkZ2V0KHByb3BzOiBBdXRvY29tcGxldGVXaWRnZXRQcm9wcykge1xuICBjb25zdCB7XG4gICAgYXBpLFxuICAgIHBhcmFtZXRlcixcbiAgICBoYXNTaG9ydFNlbGVjdGVkTGFiZWwsXG4gICAgYWxsb3dDdXN0b21UZXJtcyxcbiAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQsXG4gICAgcHJlc2VsZWN0ZWQsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgc2luZ2xlU2VsZWN0aW9uLFxuICAgIHNpbmdsZVN1Z2dlc3Rpb25Sb3csXG4gICAgdHM0bmZkaUdhdGV3YXkgPSBmYWxzZSxcbiAgICBzaG93QXBpU291cmNlID0gdHJ1ZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3QgdmlzQ29sb3JzID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKTtcbiAgY29uc3QgdmlzQ29sb3JzQmVoaW5kVGV4dCA9IGV1aVBhbGV0dGVDb2xvckJsaW5kQmVoaW5kVGV4dCgpO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBzZWFyY2ggdmFsdWVcbiAgICovXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKTtcblxuICAvKipcbiAgICogVGhlIHNldCBvZiBhdmFpbGFibGUgb3B0aW9ucy5zXG4gICAqL1xuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+Pj4oW10pO1xuXG4gIC8qKlxuICAgKiBTdG9yZSBjdXJyZW50IHNldCBvZiBzZWxlY3QgT3B0aW9ucy4gQSBzdWJzZXQgb2Ygb3B0aW9ucy5cbiAgICovXG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc10gPSB1c2VTdGF0ZTxBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+Pj4oW10pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCByZW5kZXJPcHRpb24gPSAob3B0aW9uLCBzZWFyY2hWYWx1ZSkgPT4ge1xuICAgIGNvbnN0IHsgbGFiZWwsIHZhbHVlIH0gPSBvcHRpb247XG4gICAgY29uc3QgZG90Q29sb3JJbmRleCA9IHZpc0NvbG9yc0JlaGluZFRleHQuaW5kZXhPZih2YWx1ZS50eXBlID09PSBcImNsYXNzXCIgPyB2aXNDb2xvcnNCZWhpbmRUZXh0WzVdIDpcbiAgICAgIHZhbHVlLnR5cGUgPT09IFwiaW5kaXZpZHVhbFwiID8gdmlzQ29sb3JzQmVoaW5kVGV4dFszXSA6XG4gICAgICAgIHZhbHVlLnR5cGUgPT09IFwicHJvcGVydHlcIiA/IHZpc0NvbG9yc0JlaGluZFRleHRbMV0gOiBcIlwiKTtcbiAgICBjb25zdCBkb3RDb2xvciA9IHZpc0NvbG9yc1tkb3RDb2xvckluZGV4XTtcblxuICAgIGlmIChhbGxvd0N1c3RvbVRlcm1zICYmIHZhbHVlLmlyaSA9PSBcIlwiKSB7Ly8gaWYgd2UgaGF2ZSBhIGN1c3RvbSB0ZXJtLCBqdXN0IHNob3cgdGhlIGxhYmVsXG4gICAgICByZXR1cm4gbGFiZWw7XG4gICAgfVxuXG4gICAgbGV0IHByZWZpeCA9ICh2YWx1ZS50eXBlID09PSBcIm9udG9sb2d5XCIpXG4gICAgICA/IFwiUHJlZml4OiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWVcbiAgICAgIDogXCJQcmVmaXggPiBTaG9ydCBmb3JtOiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWUgKyBcIiA+IFwiICsgdmFsdWUuc2hvcnRfZm9ybTtcblxuICAgIGxldCBob3ZlclRleHQgPSBgVHlwZTogJHt2YWx1ZS50eXBlfVxcblxcbkxhYmVsOiAke3ZhbHVlLmxhYmVsfVxcblxcbiR7cHJlZml4fWA7XG4gICAgaWYgKHZhbHVlLmRlc2NyaXB0aW9uICE9IHVuZGVmaW5lZCkge1xuICAgICAgaG92ZXJUZXh0ICs9IGBcXG5cXG5EZXNjcmlwdGlvbjogJHt2YWx1ZS5kZXNjcmlwdGlvbn1gO1xuICAgIH1cbiAgICBpZiAoc2hvd0FwaVNvdXJjZSAmJiB2YWx1ZS5zb3VyY2VfdXJsICYmIHZhbHVlLnNvdXJjZV91cmwgIT09IFwiXCIpe1xuICAgICAgaG92ZXJUZXh0ICs9IFwiXFxuXFxuU291cmNlOiBcIiArIHZhbHVlLnNvdXJjZTtcbiAgICAgIGhvdmVyVGV4dCArPSBcIlxcblxcblNvdXJjZSBVUkw6IFwiICsgdmFsdWUuc291cmNlX3VybDtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJPbnRvbG9neSA9ICgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlIZWFsdGhcbiAgICAgICAgICBjb2xvcj17ZG90Q29sb3J9PlxuICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxFdWlIaWdobGlnaHQgc2VhcmNoPXtzZWFyY2hWYWx1ZX0+e3ZhbHVlLmxhYmVsfTwvRXVpSGlnaGxpZ2h0PlxuICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAge3ZhbHVlLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvRXVpSGVhbHRoPlxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyRW50aXR5V2l0aERlc2NyaXB0aW9uID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW4gdGl0bGU9e2hvdmVyVGV4dH0gc3R5bGU9e3sgaGVpZ2h0OiAyMDAgKyBcInB4XCIgfX0+XG4gICAgICAgICAgICA8RXVpSGVhbHRoXG4gICAgICAgICAgICAgIGNvbG9yPXtkb3RDb2xvcn0+XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxFdWlIaWdobGlnaHQgc2VhcmNoPXtzZWFyY2hWYWx1ZX0+e3ZhbHVlLmxhYmVsfTwvRXVpSGlnaGxpZ2h0PlxuICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XG4gICAgICAgICAgICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neU5hbWU9e3ZhbHVlLm9udG9sb2d5X25hbWV9XG4gICAgICAgICAgICAgICAgICAgIHNob3J0Rm9ybT17dmFsdWUuc2hvcnRfZm9ybX1cbiAgICAgICAgICAgICAgICAgICAgY29sb3JGaXJzdD17XCJwcmltYXJ5XCJ9XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yU2Vjb25kPXtcInN1Y2Nlc3NcIn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8RXVpSWNvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPXtcImlJbkNpcmNsZVwifVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiA1IH19XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtob3ZlclRleHR9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgeyFzaW5nbGVTdWdnZXN0aW9uUm93ICYmIHZhbHVlLmRlc2NyaXB0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICB7dmFsdWUuZGVzY3JpcHRpb24uc3Vic3RyaW5nKDAsIDQwKSArIFwiLi4uXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9FdWlIZWFsdGg+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfTtcblxuICAgIHJldHVybiB2YWx1ZS50eXBlID09PSBcIm9udG9sb2d5XCIgPyByZW5kZXJPbnRvbG9neSgpIDogcmVuZGVyRW50aXR5V2l0aERlc2NyaXB0aW9uKCk7XG4gIH07XG5cbiAgICAvKipcbiAgICAgKiBvbiBtb3VudDogZmV0Y2hlcyB0ZXJtIGZvciBwcmVzZWxlY3RlZFxuICAgICAqIHNldHMgaXRzIGxhYmVsIG9yIHNldHMgYSBnaXZlbiBsYWJlbCBpZiBubyBpcmkgaXMgcHJvdmlkZWQvdGhlIGdpdmVuIGlyaSBjYW5ub3QgYmUgcmVzb2x2ZWRcbiAgICAgKiBvbmx5IGlmIGFsbG93Q3VzdG9tVGVybXMgaXMgdHJ1ZVxuICAgICAqL1xuICAgIGNvbnN0IHtcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdPbk1vdW50XG4gICAgfSA9IHVzZVF1ZXJ5KFxuICAgICAgICBbXG4gICAgICAgICAgICBcIm9uTW91bnRcIixcbiAgICAgICAgICAgIHByZXNlbGVjdGVkXG4gICAgICAgIF0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGxldCBwcmVzZWxlY3RlZFZhbHVlczogRXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55PltdID0gW107XG5cbiAgICAgIGxldCB1bmlxdWVWYWx1ZXMgPSBbLi4ubmV3IFNldChwcmVzZWxlY3RlZCldXG4gICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgICAgIHJldHVybiAoYWxsb3dDdXN0b21UZXJtcyAmJiBvcHRpb24ubGFiZWwpIHx8IG9wdGlvbi5pcmk7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodW5pcXVlVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbikgdW5pcXVlVmFsdWVzID0gW3VuaXF1ZVZhbHVlc1swXV07XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB1bmlxdWVWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbiAmJiBvcHRpb24uaXJpICYmIG9wdGlvbi5pcmkuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBvbHNBcGkuZ2V0U2VsZWN0RGF0YShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cXVlcnk6IG9wdGlvbi5pcml9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHM0bmZkaUdhdGV3YXlcbiAgICAgICAgICAgICAgICAgICAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvcGVydGllcy5tYXAoKHNlbGVjdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLmlyaSA9PT0gc2VsZWN0aW9uLmdldElyaSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VsZWN0ZWRWYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhYmVsIHRvIGRpc3BsYXkgd2l0aGluIHRoZSBjb21ib2JveCBlaXRoZXIgcmF3IHZhbHVlIG9yIGdlbmVyYXRlZCBvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gI3JlbmRlck9wdGlvbigpIGlzIHVzZWQgdG8gZGlzcGxheSBkdXJpbmcgc2VsZWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogaGFzU2hvcnRTZWxlY3RlZExhYmVsID8gc2VsZWN0aW9uLmdldExhYmVsKCkgOiBnZW5lcmF0ZURpc3BsYXlMYWJlbChzZWxlY3Rpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZXkgdG8gZGlzdGluZ3Vpc2ggdGhlIG9wdGlvbnMgKGVzcGVjaWFsbHkgdGhvc2Ugd2l0aCBzYW1lIGxhYmVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHNlbGVjdGlvbi5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlyaTogc2VsZWN0aW9uLmdldElyaSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHNlbGVjdGlvbi5nZXRMYWJlbCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogc2VsZWN0aW9uLmdldE9udG9sb2d5SWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHNlbGVjdGlvbi5nZXRUeXBlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9mb3JtOiBzZWxlY3Rpb24uZ2V0U2hvcnRGb3JtKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc2VsZWN0aW9uLmdldERlc2NyaXB0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHNlbGVjdGlvbi5nZXRBcGlTb3VyY2VOYW1lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfdXJsOiBzZWxlY3Rpb24uZ2V0QXBpU291cmNlRW5kcG9pbnQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbiAmJiBwcmVzZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAxKSBwcmVzZWxlY3RlZFZhbHVlcyA9IFtwcmVzZWxlY3RlZFZhbHVlc1swXV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uICYmIG9wdGlvbi5sYWJlbCAmJiBhbGxvd0N1c3RvbVRlcm1zKSB7XG4gICAgICAgICAgICBwcmVzZWxlY3RlZFZhbHVlcy5wdXNoKHtcbiAgICAgICAgICAgICAgbGFiZWw6IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICAgICAga2V5OiBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgaXJpOiBcIlwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBcIlwiLFxuICAgICAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJcIixcbiAgICAgICAgICAgICAgICBzaG9ydF9mb3JtOiBcIlwiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogXCJcIixcbiAgICAgICAgICAgICAgICBzb3VyY2VfdXJsOiBcIlwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNldE9wdGlvbnMocHJlc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgICBzZXRTZWxlY3RlZE9wdGlvbnMocHJlc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcblxuICAvKipcbiAgICogZmV0Y2hlcyBuZXcgb3B0aW9ucyB3aGVuIHNlYXJjaFZhbHVlIGNoYW5nZXNcbiAgICovXG4gIGNvbnN0IHtcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1Rlcm1zXG4gIH0gPSB1c2VRdWVyeShcbiAgICBbXG4gICAgICBcIm9uU2VhcmNoQ2hhbmdlXCIsXG4gICAgICBzZWFyY2hWYWx1ZVxuICAgIF0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNlYXJjaFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRTZWxlY3REYXRhKFxuICAgICAgICAgIHsgcXVlcnk6IHNlYXJjaFZhbHVlIH0sXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgdHM0bmZkaUdhdGV3YXlcbiAgICAgICAgKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgc2V0T3B0aW9ucyhyZXNwb25zZS5wcm9wZXJ0aWVzLm1hcCgoc2VsZWN0aW9uOiBhbnkpID0+IChcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGxhYmVsIHRvIGRpc3BsYXkgd2l0aGluIHRoZSBjb21ib2JveCBlaXRoZXIgcmF3IHZhbHVlIG9yIGdlbmVyYXRlZCBvbmVcbiAgICAgICAgICAgICAgICAvLyAjcmVuZGVyT3B0aW9uKCkgaXMgdXNlZCB0byBkaXNwbGF5IGR1cmluZyBzZWxlY3Rpb24uXG4gICAgICAgICAgICAgICAgbGFiZWw6IGhhc1Nob3J0U2VsZWN0ZWRMYWJlbCA/IHNlbGVjdGlvbi5nZXRMYWJlbCgpIDogZ2VuZXJhdGVEaXNwbGF5TGFiZWwoc2VsZWN0aW9uKSxcbiAgICAgICAgICAgICAgICAvLyBrZXkgdG8gZGlzdGluZ3Vpc2ggdGhlIG9wdGlvbnMgKGVzcGVjaWFsbHkgdGhvc2Ugd2l0aCBzYW1lIGxhYmVsKVxuICAgICAgICAgICAgICAgIGtleTogc2VsZWN0aW9uLmdldElyaSgpLFxuICAgICAgICAgICAgICAgIC8vIHZhbHVlcyB0byBwYXNzIHRvIGNsaWVudHNcbiAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgaXJpOiBzZWxlY3Rpb24uZ2V0SXJpKCksXG4gICAgICAgICAgICAgICAgICBsYWJlbDogc2VsZWN0aW9uLmdldExhYmVsKCksXG4gICAgICAgICAgICAgICAgICBvbnRvbG9neV9uYW1lOiBzZWxlY3Rpb24uZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICAgICAgICAgICAgdHlwZTogc2VsZWN0aW9uLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgICAgIHNob3J0X2Zvcm06IHNlbGVjdGlvbi5nZXRTaG9ydEZvcm0oKSxcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzZWxlY3Rpb24uZ2V0RGVzY3JpcHRpb24oKSxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZTogc2VsZWN0aW9uLmdldEFwaVNvdXJjZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZV91cmw6IHNlbGVjdGlvbi5nZXRBcGlTb3VyY2VFbmRwb2ludCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbiAgLyoqXG4gICAqIE9uY2UgdGhlIHNldCBvZiBzZWxlY3RlZCBvcHRpb25zIGNoYW5nZXMsIHBhc3MgdGhlIGV2ZW50IGJ5IGludm9raW5nIHRoZSBwYXNzZWQgZnVuY3Rpb24uXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudChcbiAgICAgIHNlbGVjdGVkT3B0aW9ucy5tYXAoKHgpID0+IHtcbiAgICAgICAgLy8gcmV0dXJuIHRoZSB2YWx1ZSBvYmplY3Qgd2l0aCB0aGUgcmF3IHZhbHVlcyBmcm9tIE9MUyB0byBhIGNsaWVudFxuICAgICAgICBpZiAoYWxsb3dDdXN0b21UZXJtcyAmJiB4LnZhbHVlLmlyaSA9PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgICAgIGxhYmVsOiB4LmxhYmVsLFxuICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogXCJcIixcbiAgICAgICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgICAgICBzaG9ydF9mb3JtOiB4LnZhbHVlLnNob3J0X2Zvcm0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogeC52YWx1ZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNvdXJjZTogeC52YWx1ZS5zb3VyY2VcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHgudmFsdWUuaXJpID09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiBcIlwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgdHlwZTogXCJcIixcbiAgICAgICAgICAgIHNob3J0X2Zvcm06IFwiXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgICAgIHNvdXJjZTogXCJcIlxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogeC52YWx1ZS5pcmksXG4gICAgICAgICAgICBsYWJlbDogeC52YWx1ZS5sYWJlbCxcbiAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IHgudmFsdWUub250b2xvZ3lfbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IHgudmFsdWUudHlwZSxcbiAgICAgICAgICAgIHNob3J0X2Zvcm06IHgudmFsdWUuc2hvcnRfZm9ybSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB4LnZhbHVlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgc291cmNlOiB4LnZhbHVlLnNvdXJjZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW3NlbGVjdGVkT3B0aW9uc10pO1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlRGlzcGxheUxhYmVsKGl0ZW06IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICBpdGVtLmxhYmVsICtcbiAgICAgIFwiIChcIiArXG4gICAgICBpdGVtLm9udG9sb2d5X25hbWUudG9VcHBlckNhc2UoKSArXG4gICAgICBcIiBcIiArXG4gICAgICBpdGVtLnNob3J0X2Zvcm0gK1xuICAgICAgXCIpXCJcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DaGFuZ2VIYW5kbGVyKG9wdGlvbnM6IEFycmF5PGFueT4pOiB2b2lkIHtcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNyZWF0ZU9wdGlvbkhhbmRsZXIoc2VhcmNoVmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IG5ld09wdGlvbiA9IHtcbiAgICAgIGxhYmVsOiBzZWFyY2hWYWx1ZSxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgIHNob3J0X2Zvcm06IFwiXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgICBzb3VyY2U6IFwiXCJcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2V0T3B0aW9ucyhbLi4ub3B0aW9ucywgbmV3T3B0aW9uXSk7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zKHNpbmdsZVNlbGVjdGlvbiA/IFtuZXdPcHRpb25dIDogWy4uLnNlbGVjdGVkT3B0aW9ucywgbmV3T3B0aW9uXSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxFdWlDb21ib0JveFxuICAgICAgaXNDbGVhcmFibGVcbiAgICAgIGFyaWEtbGFiZWw9XCJzZWFyY2hCYXJcIlxuICAgICAgZnVsbFdpZHRoPXt0cnVlfVxuICAgICAgey4uLnJlc3R9IC8vIGl0ZW1zIGFib3ZlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgY2xpZW50XG4gICAgICBhc3luYz17dHJ1ZX1cbiAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nVGVybXMgfHwgaXNMb2FkaW5nT25Nb3VudH1cbiAgICAgIHNpbmdsZVNlbGVjdGlvbj17c2luZ2xlU2VsZWN0aW9uID8geyBhc1BsYWluVGV4dDogdHJ1ZSB9IDogZmFsc2V9XG4gICAgICBwbGFjZWhvbGRlcj17XG4gICAgICAgIHBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiBcIlNlYXJjaCBmb3IgYSBDb25jZXB0XCJcbiAgICAgIH1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBzZWxlY3RlZE9wdGlvbnM9e3NlbGVjdGVkT3B0aW9uc31cbiAgICAgIG9uU2VhcmNoQ2hhbmdlPXtzZXRTZWFyY2hWYWx1ZX1cbiAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZUhhbmRsZXJ9XG4gICAgICByZW5kZXJPcHRpb249e3JlbmRlck9wdGlvbn1cbiAgICAgIG9uQ3JlYXRlT3B0aW9uPXthbGxvd0N1c3RvbVRlcm1zID8gb25DcmVhdGVPcHRpb25IYW5kbGVyIDogdW5kZWZpbmVkfVxuICAgICAgcm93SGVpZ2h0PXtzaW5nbGVTdWdnZXN0aW9uUm93ID8gMzAgOiA1MH1cbiAgICAvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBdXRvY29tcGxldGUocHJvcHM6IEF1dG9jb21wbGV0ZVdpZGdldFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkQXV0b2NvbXBsZXRlV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRBdXRvY29tcGxldGVXaWRnZXQocHJvcHM6IEF1dG9jb21wbGV0ZVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPEF1dG9jb21wbGV0ZVdpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudD17cHJvcHMuc2VsZWN0aW9uQ2hhbmdlZEV2ZW50fVxuICAgICAgICAgIHByZXNlbGVjdGVkPXtwcm9wcy5wcmVzZWxlY3RlZH1cbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb249e3Byb3BzLnNpbmdsZVNlbGVjdGlvbn1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cHJvcHMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgaGFzU2hvcnRTZWxlY3RlZExhYmVsPXtwcm9wcy5oYXNTaG9ydFNlbGVjdGVkTGFiZWx9XG4gICAgICAgICAgYWxsb3dDdXN0b21UZXJtcz17cHJvcHMuYWxsb3dDdXN0b21UZXJtc31cbiAgICAgICAgICB0czRuZmRpR2F0ZXdheT17cHJvcHMudHM0bmZkaUdhdGV3YXl9XG4gICAgICAgICAgc2luZ2xlU3VnZ2VzdGlvblJvdz17cHJvcHMuc2luZ2xlU3VnZ2VzdGlvblJvd31cbiAgICAgICAgICBzaG93QXBpU291cmNlPXtwcm9wcy5zaG93QXBpU291cmNlfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IEF1dG9jb21wbGV0ZVdpZGdldCwgY3JlYXRlQXV0b2NvbXBsZXRlIH07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHwgKFxuICAgICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuY29uc3QgW2lzUmVhZGFibGVTdHJlYW0sIGlzUmVxdWVzdCwgaXNSZXNwb25zZSwgaXNIZWFkZXJzXSA9IFsnUmVhZGFibGVTdHJlYW0nLCAnUmVxdWVzdCcsICdSZXNwb25zZScsICdIZWFkZXJzJ10ubWFwKGtpbmRPZlRlc3QpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5jb25zdCB0cmltID0gKHN0cikgPT4gc3RyLnRyaW0gP1xuICBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCAnJyk7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHthbGxPd25LZXlzID0gZmFsc2V9ID0ge30pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaTtcbiAgbGV0IGw7XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmosIGtleSkge1xuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpXG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIGNvbnN0IHtjYXNlbGVzc30gPSBpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMgfHwge307XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBhc3NpZ25WYWx1ZSA9ICh2YWwsIGtleSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEtleSA9IGNhc2VsZXNzICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpIHx8IGtleTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRbdGFyZ2V0S2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHJlc3VsdFt0YXJnZXRLZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7XG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgICAgcmV0dXJuIHAxLnRvVXBwZXJDYXNlKCkgKyBwMjtcbiAgICB9XG4gICk7XG59O1xuXG4vKiBDcmVhdGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuICovXG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9ICgoe2hhc093blByb3BlcnR5fSkgPT4gKG9iaiwgcHJvcCkgPT4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKShPYmplY3QucHJvdG90eXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVnRXhwID0ga2luZE9mVGVzdCgnUmVnRXhwJyk7XG5cbmNvbnN0IHJlZHVjZURlc2NyaXB0b3JzID0gKG9iaiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gIGNvbnN0IHJlZHVjZWREZXNjcmlwdG9ycyA9IHt9O1xuXG4gIGZvckVhY2goZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgbGV0IHJldDtcbiAgICBpZiAoKHJldCA9IHJlZHVjZXIoZGVzY3JpcHRvciwgbmFtZSwgb2JqKSkgIT09IGZhbHNlKSB7XG4gICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSByZXQgfHwgZGVzY3JpcHRvcjtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgcmVkdWNlZERlc2NyaXB0b3JzKTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBpc0FycmF5KGFycmF5T3JTdHJpbmcpID8gZGVmaW5lKGFycmF5T3JTdHJpbmcpIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTtcblxuICByZXR1cm4gb2JqO1xufVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUgPSArdmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59XG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59XG5cbmNvbnN0IGdlbmVyYXRlU3RyaW5nID0gKHNpemUgPSAxNiwgYWxwaGFiZXQgPSBBTFBIQUJFVC5BTFBIQV9ESUdJVCkgPT4ge1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IHtsZW5ndGh9ID0gYWxwaGFiZXQ7XG4gIHdoaWxlIChzaXplLS0pIHtcbiAgICBzdHIgKz0gYWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIGxlbmd0aHwwXVxuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn1cblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG4vLyBvcmlnaW5hbCBjb2RlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRGlnaXRhbEJyYWluSlMvQXhpb3NQcm9taXNlL2Jsb2IvMTZkZWFiMTM3MTBlYzA5Nzc5OTIyMTMxZjNmYTU5NTQzMjBmODNhYi9saWIvdXRpbHMuanMjTDExLUwzNFxuXG5jb25zdCBfc2V0SW1tZWRpYXRlID0gKChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQsIHBvc3RNZXNzYWdlU3VwcG9ydGVkKSA9PiB7XG4gIGlmIChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQpIHtcbiAgICByZXR1cm4gc2V0SW1tZWRpYXRlO1xuICB9XG5cbiAgcmV0dXJuIHBvc3RNZXNzYWdlU3VwcG9ydGVkID8gKCh0b2tlbiwgY2FsbGJhY2tzKSA9PiB7XG4gICAgX2dsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoe3NvdXJjZSwgZGF0YX0pID0+IHtcbiAgICAgIGlmIChzb3VyY2UgPT09IF9nbG9iYWwgJiYgZGF0YSA9PT0gdG9rZW4pIHtcbiAgICAgICAgY2FsbGJhY2tzLmxlbmd0aCAmJiBjYWxsYmFja3Muc2hpZnQoKSgpO1xuICAgICAgfVxuICAgIH0sIGZhbHNlKTtcblxuICAgIHJldHVybiAoY2IpID0+IHtcbiAgICAgIGNhbGxiYWNrcy5wdXNoKGNiKTtcbiAgICAgIF9nbG9iYWwucG9zdE1lc3NhZ2UodG9rZW4sIFwiKlwiKTtcbiAgICB9XG4gIH0pKGBheGlvc0Ake01hdGgucmFuZG9tKCl9YCwgW10pIDogKGNiKSA9PiBzZXRUaW1lb3V0KGNiKTtcbn0pKFxuICB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nLFxuICBpc0Z1bmN0aW9uKF9nbG9iYWwucG9zdE1lc3NhZ2UpXG4pO1xuXG5jb25zdCBhc2FwID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrICE9PSAndW5kZWZpbmVkJyA/XG4gIHF1ZXVlTWljcm90YXNrLmJpbmQoX2dsb2JhbCkgOiAoIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLm5leHRUaWNrIHx8IF9zZXRJbW1lZGlhdGUpO1xuXG4vLyAqKioqKioqKioqKioqKioqKioqKipcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGUsXG4gIHNldEltbWVkaWF0ZTogX3NldEltbWVkaWF0ZSxcbiAgYXNhcFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgaWYgKHJlc3BvbnNlKSB7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzID8gcmVzcG9uc2Uuc3RhdHVzIDogbnVsbDtcbiAgfVxufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1c1xuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zRXJyb3I7XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxuZXhwb3J0IGRlZmF1bHQgbnVsbDtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuLy8gdGVtcG9yYXJ5IGhvdGZpeCB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzIHVudGlsIEF4aW9zVVJMU2VhcmNoUGFyYW1zIGlzIHJlZmFjdG9yZWRcbmltcG9ydCBQbGF0Zm9ybUZvcm1EYXRhIGZyb20gJy4uL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscy50b0ZsYXRPYmplY3QodXRpbHMsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKFBsYXRmb3JtRm9ybURhdGEgfHwgRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscy50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscy5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Gb3JtRGF0YTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUpO1xuICB9IDogZW5jb2RlO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbFxuIiwgImltcG9ydCBVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCBGb3JtRGF0YSBmcm9tICcuL2NsYXNzZXMvRm9ybURhdGEuanMnXG5pbXBvcnQgQmxvYiBmcm9tICcuL2NsYXNzZXMvQmxvYi5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYlxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcbiIsICJjb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuY29uc3QgX25hdmlnYXRvciA9IHR5cGVvZiBuYXZpZ2F0b3IgPT09ICdvYmplY3QnICYmIG5hdmlnYXRvciB8fCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSBoYXNCcm93c2VyRW52ICYmXG4gICghX25hdmlnYXRvciB8fCBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YoX25hdmlnYXRvci5wcm9kdWN0KSA8IDApO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5jb25zdCBvcmlnaW4gPSBoYXNCcm93c2VyRW52ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmIHx8ICdodHRwOi8vbG9jYWxob3N0JztcblxuZXhwb3J0IHtcbiAgaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIF9uYXZpZ2F0b3IgYXMgbmF2aWdhdG9yLFxuICBvcmlnaW5cbn1cbiIsICJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi9ub2RlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vY29tbW9uL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9ybURhdGFUb0pTT047XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHRvVVJMRW5jb2RlZEZvcm0gZnJvbSAnLi4vaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAodXRpbHMuaXNSZXNwb25zZShkYXRhKSB8fCB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgcmF3SGVhZGVycyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGFyc2VIZWFkZXJzIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzJztcblxuY29uc3QgJGludGVybmFscyA9IFN5bWJvbCgnaW50ZXJuYWxzJyk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlciAmJiBTdHJpbmcoaGVhZGVyKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjtcblxuICBpZiAodXRpbHMuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlci50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7XG5cbiAgWydnZXQnLCAnc2V0JywgJ2hhcyddLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSArIGFjY2Vzc29yTmFtZSwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uY2FsbCh0aGlzLCBoZWFkZXIsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQXhpb3NIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IoaGVhZGVycykge1xuICAgIGhlYWRlcnMgJiYgdGhpcy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghbEhlYWRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIChfdmFsdWUsIF9oZWFkZXIpID0+IHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSk7XG5cbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChoZWFkZXIpIHx8IGhlYWRlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIHNldEhlYWRlcnMoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSlcbiAgICB9IGVsc2UgaWYodXRpbHMuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzSGVhZGVycyhoZWFkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBoZWFkZXIuZW50cmllcygpKSB7XG4gICAgICAgIHNldEhlYWRlcih2YWx1ZSwga2V5LCByZXdyaXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5BeGlvc0hlYWRlcnMuYWNjZXNzb3IoWydDb250ZW50LVR5cGUnLCAnQ29udGVudC1MZW5ndGgnLCAnQWNjZXB0JywgJ0FjY2VwdC1FbmNvZGluZycsICdVc2VyLUFnZW50JywgJ0F1dGhvcml6YXRpb24nXSk7XG5cbi8vIHJlc2VydmVkIG5hbWVzIGhvdGZpeFxudXRpbHMucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscy5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zSGVhZGVycztcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsZWRFcnJvcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vQXhpb3NFcnJvci5qcyc7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDYWxjdWxhdGUgZGF0YSBtYXhSYXRlXG4gKiBAcGFyYW0ge051bWJlcn0gW3NhbXBsZXNDb3VudD0gMTBdXG4gKiBAcGFyYW0ge051bWJlcn0gW21pbj0gMTAwMF1cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3BlZWRvbWV0ZXIoc2FtcGxlc0NvdW50LCBtaW4pIHtcbiAgc2FtcGxlc0NvdW50ID0gc2FtcGxlc0NvdW50IHx8IDEwO1xuICBjb25zdCBieXRlcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBjb25zdCB0aW1lc3RhbXBzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGxldCBoZWFkID0gMDtcbiAgbGV0IHRhaWwgPSAwO1xuICBsZXQgZmlyc3RTYW1wbGVUUztcblxuICBtaW4gPSBtaW4gIT09IHVuZGVmaW5lZCA/IG1pbiA6IDEwMDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHB1c2goY2h1bmtMZW5ndGgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gdGltZXN0YW1wc1t0YWlsXTtcblxuICAgIGlmICghZmlyc3RTYW1wbGVUUykge1xuICAgICAgZmlyc3RTYW1wbGVUUyA9IG5vdztcbiAgICB9XG5cbiAgICBieXRlc1toZWFkXSA9IGNodW5rTGVuZ3RoO1xuICAgIHRpbWVzdGFtcHNbaGVhZF0gPSBub3c7XG5cbiAgICBsZXQgaSA9IHRhaWw7XG4gICAgbGV0IGJ5dGVzQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGkgIT09IGhlYWQpIHtcbiAgICAgIGJ5dGVzQ291bnQgKz0gYnl0ZXNbaSsrXTtcbiAgICAgIGkgPSBpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGhlYWQgPSAoaGVhZCArIDEpICUgc2FtcGxlc0NvdW50O1xuXG4gICAgaWYgKGhlYWQgPT09IHRhaWwpIHtcbiAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGlmIChub3cgLSBmaXJzdFNhbXBsZVRTIDwgbWluKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc2VkID0gc3RhcnRlZEF0ICYmIG5vdyAtIHN0YXJ0ZWRBdDtcblxuICAgIHJldHVybiBwYXNzZWQgPyBNYXRoLnJvdW5kKGJ5dGVzQ291bnQgKiAxMDAwIC8gcGFzc2VkKSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3BlZWRvbWV0ZXI7XG4iLCAiLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gZnJlcVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7XG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBsZXQgdGhyZXNob2xkID0gMTAwMCAvIGZyZXE7XG4gIGxldCBsYXN0QXJncztcbiAgbGV0IHRpbWVyO1xuXG4gIGNvbnN0IGludm9rZSA9IChhcmdzLCBub3cgPSBEYXRlLm5vdygpKSA9PiB7XG4gICAgdGltZXN0YW1wID0gbm93O1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9XG5cbiAgY29uc3QgdGhyb3R0bGVkID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHBhc3NlZCA9IG5vdyAtIHRpbWVzdGFtcDtcbiAgICBpZiAoIHBhc3NlZCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGludm9rZShhcmdzLCBub3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGludm9rZShsYXN0QXJncylcbiAgICAgICAgfSwgdGhyZXNob2xkIC0gcGFzc2VkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBmbHVzaCA9ICgpID0+IGxhc3RBcmdzICYmIGludm9rZShsYXN0QXJncyk7XG5cbiAgcmV0dXJuIFt0aHJvdHRsZWQsIGZsdXNoXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGhyb3R0bGU7XG4iLCAiaW1wb3J0IHNwZWVkb21ldGVyIGZyb20gXCIuL3NwZWVkb21ldGVyLmpzXCI7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSBcIi4vdGhyb3R0bGUuanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNvbnN0IHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZShlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlLFxuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbCxcbiAgICAgIFtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXTogdHJ1ZVxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yID0gKHRvdGFsLCB0aHJvdHRsZWQpID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG5cbiAgcmV0dXJuIFsobG9hZGVkKSA9PiB0aHJvdHRsZWRbMF0oe1xuICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgdG90YWwsXG4gICAgbG9hZGVkXG4gIH0pLCB0aHJvdHRsZWRbMV1dO1xufVxuXG5leHBvcnQgY29uc3QgYXN5bmNEZWNvcmF0b3IgPSAoZm4pID0+ICguLi5hcmdzKSA9PiB1dGlscy5hc2FwKCgpID0+IGZuKC4uLmFyZ3MpKTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbi8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgY29uc3QgbXNpZSA9IHBsYXRmb3JtLm5hdmlnYXRvciAmJiAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KHBsYXRmb3JtLm5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICBjb25zdCBjb29raWUgPSBbbmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSldO1xuXG4gICAgICB1dGlscy5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcoZG9tYWluKSAmJiBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuXG4gICAgICBzZWN1cmUgPT09IHRydWUgJiYgY29va2llLnB1c2goJ3NlY3VyZScpO1xuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgIH0sXG5cbiAgICByZW1vdmUobmFtZSkge1xuICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICB9XG4gIH1cblxuICA6XG5cbiAgLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICB7XG4gICAgd3JpdGUoKSB7fSxcbiAgICByZWFkKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7fVxuICB9O1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBpc0Fic29sdXRlVVJMIGZyb20gJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyc7XG5pbXBvcnQgY29tYmluZVVSTHMgZnJvbSAnLi4vaGVscGVycy9jb21iaW5lVVJMcy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL0F4aW9zSGVhZGVycy5qc1wiO1xuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8geyAuLi50aGluZyB9IDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIpID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHRydWUpXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwgImltcG9ydCBwbGF0Zm9ybSBmcm9tIFwiLi4vcGxhdGZvcm0vaW5kZXguanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCBpc1VSTFNhbWVPcmlnaW4gZnJvbSBcIi4vaXNVUkxTYW1lT3JpZ2luLmpzXCI7XG5pbXBvcnQgY29va2llcyBmcm9tIFwiLi9jb29raWVzLmpzXCI7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tIFwiLi4vY29yZS9idWlsZEZ1bGxQYXRoLmpzXCI7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSBcIi4uL2NvcmUvbWVyZ2VDb25maWcuanNcIjtcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSBcIi4vYnVpbGRVUkwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGNvbmZpZykgPT4ge1xuICBjb25zdCBuZXdDb25maWcgPSBtZXJnZUNvbmZpZyh7fSwgY29uZmlnKTtcblxuICBsZXQge2RhdGEsIHdpdGhYU1JGVG9rZW4sIHhzcmZIZWFkZXJOYW1lLCB4c3JmQ29va2llTmFtZSwgaGVhZGVycywgYXV0aH0gPSBuZXdDb25maWc7XG5cbiAgbmV3Q29uZmlnLmhlYWRlcnMgPSBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oaGVhZGVycyk7XG5cbiAgbmV3Q29uZmlnLnVybCA9IGJ1aWxkVVJMKGJ1aWxkRnVsbFBhdGgobmV3Q29uZmlnLmJhc2VVUkwsIG5ld0NvbmZpZy51cmwpLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG5cbiAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICBpZiAoYXV0aCkge1xuICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgK1xuICAgICAgYnRvYSgoYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAoYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhdXRoLnBhc3N3b3JkKSkgOiAnJykpXG4gICAgKTtcbiAgfVxuXG4gIGxldCBjb250ZW50VHlwZTtcblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSkge1xuICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9IGVsc2UgaWYgKChjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAvLyBmaXggc2VtaWNvbG9uIGR1cGxpY2F0aW9uIGlzc3VlIGZvciBSZWFjdE5hdGl2ZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uc3QgW3R5cGUsIC4uLnRva2Vuc10gPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKFt0eXBlIHx8ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgLi4udG9rZW5zXS5qb2luKCc7ICcpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4obmV3Q29uZmlnKSk7XG5cbiAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICBjb25zdCB4c3JmVmFsdWUgPSB4c3JmSGVhZGVyTmFtZSAmJiB4c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoeHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0KHhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdDb25maWc7XG59XG5cbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7cHJvZ3Jlc3NFdmVudFJlZHVjZXJ9IGZyb20gJy4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMnO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSBcIi4uL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qc1wiO1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oX2NvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZSwgb25VcGxvYWRQcm9ncmVzcywgb25Eb3dubG9hZFByb2dyZXNzfSA9IF9jb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgbGV0IHVwbG9hZFRocm90dGxlZCwgZG93bmxvYWRUaHJvdHRsZWQ7XG4gICAgbGV0IGZsdXNoVXBsb2FkLCBmbHVzaERvd25sb2FkO1xuXG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGZsdXNoVXBsb2FkICYmIGZsdXNoVXBsb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuICAgICAgZmx1c2hEb3dubG9hZCAmJiBmbHVzaERvd25sb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG5cbiAgICAgIF9jb25maWcuc2lnbmFsICYmIF9jb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub3BlbihfY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBfY29uZmlnLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IF9jb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgIChbZG93bmxvYWRUaHJvdHRsZWQsIGZsdXNoRG93bmxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZG93bmxvYWRUaHJvdHRsZWQpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKG9uVXBsb2FkUHJvZ3Jlc3MgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIChbdXBsb2FkVGhyb3R0bGVkLCBmbHVzaFVwbG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKSk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdXBsb2FkVGhyb3R0bGVkKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZsdXNoVXBsb2FkKTtcbiAgICB9XG5cbiAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgX2NvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IF9jb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKF9jb25maWcudXJsKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSBcIi4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzXCI7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGNvbnN0IHtsZW5ndGh9ID0gKHNpZ25hbHMgPSBzaWduYWxzID8gc2lnbmFscy5maWx0ZXIoQm9vbGVhbikgOiBbXSk7XG5cbiAgaWYgKHRpbWVvdXQgfHwgbGVuZ3RoKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBsZXQgYWJvcnRlZDtcblxuICAgIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IGVyciA9IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uIDogdGhpcy5yZWFzb247XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvciA/IGVyciA6IG5ldyBDYW5jZWxlZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdGltZXIgPSB0aW1lb3V0ICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKVxuICAgIH0sIHRpbWVvdXQpXG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICAgIGlmIChzaWduYWxzKSB7XG4gICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgc2lnbmFscy5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICAgICAgc2lnbmFsLnVuc3Vic2NyaWJlID8gc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpIDogc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzaWduYWxzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gICAgY29uc3Qge3NpZ25hbH0gPSBjb250cm9sbGVyO1xuXG4gICAgc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdXRpbHMuYXNhcCh1bnN1YnNjcmliZSk7XG5cbiAgICByZXR1cm4gc2lnbmFsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VTaWduYWxzO1xuIiwgIlxuZXhwb3J0IGNvbnN0IHN0cmVhbUNodW5rID0gZnVuY3Rpb24qIChjaHVuaywgY2h1bmtTaXplKSB7XG4gIGxldCBsZW4gPSBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gIGlmICghY2h1bmtTaXplIHx8IGxlbiA8IGNodW5rU2l6ZSkge1xuICAgIHlpZWxkIGNodW5rO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBsZXQgZW5kO1xuXG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBlbmQgPSBwb3MgKyBjaHVua1NpemU7XG4gICAgeWllbGQgY2h1bmsuc2xpY2UocG9zLCBlbmQpO1xuICAgIHBvcyA9IGVuZDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVhZEJ5dGVzID0gYXN5bmMgZnVuY3Rpb24qIChpdGVyYWJsZSwgY2h1bmtTaXplKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcmVhZFN0cmVhbShpdGVyYWJsZSkpIHtcbiAgICB5aWVsZCogc3RyZWFtQ2h1bmsoY2h1bmssIGNodW5rU2l6ZSk7XG4gIH1cbn1cblxuY29uc3QgcmVhZFN0cmVhbSA9IGFzeW5jIGZ1bmN0aW9uKiAoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgeWllbGQqIHN0cmVhbTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWFkZXIuY2FuY2VsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRyYWNrU3RyZWFtID0gKHN0cmVhbSwgY2h1bmtTaXplLCBvblByb2dyZXNzLCBvbkZpbmlzaCkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSk7XG5cbiAgbGV0IGJ5dGVzID0gMDtcbiAgbGV0IGRvbmU7XG4gIGxldCBfb25GaW5pc2ggPSAoZSkgPT4ge1xuICAgIGlmICghZG9uZSkge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBvbkZpbmlzaCAmJiBvbkZpbmlzaChlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgIF9vbkZpbmlzaCgpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICBsZXQgbG9hZGVkQnl0ZXMgPSBieXRlcyArPSBsZW47XG4gICAgICAgICAgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX29uRmluaXNoKGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIF9vbkZpbmlzaChyZWFzb24pO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgIH1cbiAgfSwge1xuICAgIGhpZ2hXYXRlck1hcms6IDJcbiAgfSlcbn1cbiIsICJpbXBvcnQgcGxhdGZvcm0gZnJvbSBcIi4uL3BsYXRmb3JtL2luZGV4LmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5pbXBvcnQgY29tcG9zZVNpZ25hbHMgZnJvbSBcIi4uL2hlbHBlcnMvY29tcG9zZVNpZ25hbHMuanNcIjtcbmltcG9ydCB7dHJhY2tTdHJlYW19IGZyb20gXCIuLi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzXCI7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IHtwcm9ncmVzc0V2ZW50UmVkdWNlciwgcHJvZ3Jlc3NFdmVudERlY29yYXRvciwgYXN5bmNEZWNvcmF0b3J9IGZyb20gXCIuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzXCI7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tIFwiLi4vaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzXCI7XG5pbXBvcnQgc2V0dGxlIGZyb20gXCIuLi9jb3JlL3NldHRsZS5qc1wiO1xuXG5jb25zdCBpc0ZldGNoU3VwcG9ydGVkID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXF1ZXN0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXNwb25zZSA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcblxuLy8gdXNlZCBvbmx5IGluc2lkZSB0aGUgZmV0Y2ggYWRhcHRlclxuY29uc3QgZW5jb2RlVGV4dCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgKChlbmNvZGVyKSA9PiAoc3RyKSA9PiBlbmNvZGVyLmVuY29kZShzdHIpKShuZXcgVGV4dEVuY29kZXIoKSkgOlxuICAgIGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShzdHIpLmFycmF5QnVmZmVyKCkpXG4pO1xuXG5jb25zdCB0ZXN0ID0gKGZuLCAuLi5hcmdzKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZm4oLi4uYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5jb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmIHRlc3QoKCkgPT4ge1xuICBsZXQgZHVwbGV4QWNjZXNzZWQgPSBmYWxzZTtcblxuICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICByZXR1cm4gJ2hhbGYnO1xuICAgIH0sXG4gIH0pLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKTtcblxuICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xufSk7XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDtcblxuY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgdGVzdCgoKSA9PiB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSkpO1xuXG5cbmNvbnN0IHJlc29sdmVycyA9IHtcbiAgc3RyZWFtOiBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmICgocmVzKSA9PiByZXMuYm9keSlcbn07XG5cbmlzRmV0Y2hTdXBwb3J0ZWQgJiYgKCgocmVzKSA9PiB7XG4gIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2godHlwZSA9PiB7XG4gICAgIXJlc29sdmVyc1t0eXBlXSAmJiAocmVzb2x2ZXJzW3R5cGVdID0gdXRpbHMuaXNGdW5jdGlvbihyZXNbdHlwZV0pID8gKHJlcykgPT4gcmVzW3R5cGVdKCkgOlxuICAgICAgKF8sIGNvbmZpZykgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgUmVzcG9uc2UgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZGAsIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JULCBjb25maWcpO1xuICAgICAgfSlcbiAgfSk7XG59KShuZXcgUmVzcG9uc2UpKTtcblxuY29uc3QgZ2V0Qm9keUxlbmd0aCA9IGFzeW5jIChib2R5KSA9PiB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzQmxvYihib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemU7XG4gIH1cblxuICBpZih1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgY29uc3QgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keSxcbiAgICB9KTtcbiAgICByZXR1cm4gKGF3YWl0IF9yZXF1ZXN0LmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscy5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscy5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgYm9keSA9IGJvZHkgKyAnJztcbiAgfVxuXG4gIGlmKHV0aWxzLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59XG5cbmNvbnN0IHJlc29sdmVCb2R5TGVuZ3RoID0gYXN5bmMgKGhlYWRlcnMsIGJvZHkpID0+IHtcbiAgY29uc3QgbGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKGFzeW5jIChjb25maWcpID0+IHtcbiAgbGV0IHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIGRhdGEsXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIHRpbWVvdXQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgcmVzcG9uc2VUeXBlLFxuICAgIGhlYWRlcnMsXG4gICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICBmZXRjaE9wdGlvbnNcbiAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgbGV0IGNvbXBvc2VkU2lnbmFsID0gY29tcG9zZVNpZ25hbHMoW3NpZ25hbCwgY2FuY2VsVG9rZW4gJiYgY2FuY2VsVG9rZW4udG9BYm9ydFNpZ25hbCgpXSwgdGltZW91dCk7XG5cbiAgbGV0IHJlcXVlc3Q7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSBjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSAmJiAoKCkgPT4ge1xuICAgICAgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgfSk7XG5cbiAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgKSB7XG4gICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogXCJoYWxmXCJcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZUhlYWRlcilcbiAgICAgIH1cblxuICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgcmVxdWVzdENvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25VcGxvYWRQcm9ncmVzcykpXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YSA9IHRyYWNrU3RyZWFtKF9yZXF1ZXN0LmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgZmx1c2gpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXRpbHMuaXNTdHJpbmcod2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ29taXQnO1xuICAgIH1cblxuICAgIC8vIENsb3VkZmxhcmUgV29ya2VycyB0aHJvd3Mgd2hlbiBjcmVkZW50aWFscyBhcmUgZGVmaW5lZFxuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2xvdWRmbGFyZS93b3JrZXJkL2lzc3Vlcy85MDJcbiAgICBjb25zdCBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID0gXCJjcmVkZW50aWFsc1wiIGluIFJlcXVlc3QucHJvdG90eXBlO1xuICAgIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIHNpZ25hbDogY29tcG9zZWRTaWduYWwsXG4gICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycy5ub3JtYWxpemUoKS50b0pTT04oKSxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgICAgY3JlZGVudGlhbHM6IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPyB3aXRoQ3JlZGVudGlhbHMgOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3QpO1xuXG4gICAgY29uc3QgaXNTdHJlYW1SZXNwb25zZSA9IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTtcblxuICAgIGlmIChzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgKGlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUpKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgICBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBvcHRpb25zW3Byb3BdID0gcmVzcG9uc2VbcHJvcF07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gb25Eb3dubG9hZFByb2dyZXNzICYmIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25Eb3dubG9hZFByb2dyZXNzKSwgdHJ1ZSlcbiAgICAgICkgfHwgW107XG5cbiAgICAgIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKFxuICAgICAgICB0cmFja1N0cmVhbShyZXNwb25zZS5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsICgpID0+IHtcbiAgICAgICAgICBmbHVzaCAmJiBmbHVzaCgpO1xuICAgICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSB8fCAndGV4dCc7XG5cbiAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10ocmVzcG9uc2UsIGNvbmZpZyk7XG5cbiAgICAhaXNTdHJlYW1SZXNwb25zZSAmJiB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfSlcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gJ1R5cGVFcnJvcicgJiYgL2ZldGNoL2kudGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSxcbiAgICAgICAge1xuICAgICAgICAgIGNhdXNlOiBlcnIuY2F1c2UgfHwgZXJyXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG5cbiAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBlcnIgJiYgZXJyLmNvZGUsIGNvbmZpZywgcmVxdWVzdCk7XG4gIH1cbn0pO1xuXG5cbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGh0dHBBZGFwdGVyIGZyb20gJy4vaHR0cC5qcyc7XG5pbXBvcnQgeGhyQWRhcHRlciBmcm9tICcuL3hoci5qcyc7XG5pbXBvcnQgZmV0Y2hBZGFwdGVyIGZyb20gJy4vZmV0Y2guanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyLFxuICBmZXRjaDogZmV0Y2hBZGFwdGVyXG59XG5cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRyYW5zZm9ybURhdGEgZnJvbSAnLi90cmFuc2Zvcm1EYXRhLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gXCIuLi9hZGFwdGVycy9hZGFwdGVycy5qc1wiO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuIiwgImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxLjcuN1wiOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi4vZW52L2RhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4uL2hlbHBlcnMvYnVpbGRVUkwuanMnO1xuaW1wb3J0IEludGVyY2VwdG9yTWFuYWdlciBmcm9tICcuL0ludGVyY2VwdG9yTWFuYWdlci5qcyc7XG5pbXBvcnQgZGlzcGF0Y2hSZXF1ZXN0IGZyb20gJy4vZGlzcGF0Y2hSZXF1ZXN0LmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gJy4vYnVpbGRGdWxsUGF0aC5qcyc7XG5pbXBvcnQgdmFsaWRhdG9yIGZyb20gJy4uL2hlbHBlcnMvdmFsaWRhdG9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi9BeGlvc0hlYWRlcnMuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXk7XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSA9IHt9KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaWdub3JlIHRoZSBjYXNlIHdoZXJlIFwic3RhY2tcIiBpcyBhbiB1bi13cml0YWJsZSBwcm9wZXJ0eVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBfcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICAgIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICAgIH1cblxuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7dHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhwYXJhbXNTZXJpYWxpemVyLCB7XG4gICAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvblxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscy5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoLmFwcGx5KGNoYWluLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuICB9XG59XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9DYW5jZWxlZEVycm9yLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oY2FuY2VsID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSBvbmZ1bGZpbGxlZCA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICB0b0Fib3J0U2lnbmFsKCkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgY29udHJvbGxlci5zaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB0aGlzLnVuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIHJldHVybiBjb250cm9sbGVyLnNpZ25hbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuIiwgImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4vZW52L2RhdGEuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHNwcmVhZCBmcm9tICcuL2hlbHBlcnMvc3ByZWFkLmpzJztcbmltcG9ydCBpc0F4aW9zRXJyb3IgZnJvbSAnLi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zXG4iLCAiaW1wb3J0IGF4aW9zIGZyb20gJy4vbGliL2F4aW9zLmpzJztcblxuLy8gVGhpcyBtb2R1bGUgaXMgaW50ZW5kZWQgdG8gdW53cmFwIEF4aW9zIGRlZmF1bHQgZXhwb3J0IGFzIG5hbWVkLlxuLy8gS2VlcCB0b3AtbGV2ZWwgZXhwb3J0IHNhbWUgd2l0aCBzdGF0aWMgcHJvcGVydGllc1xuLy8gc28gdGhhdCBpdCBjYW4ga2VlcCBzYW1lIHdpdGggZXMgbW9kdWxlIG9yIGNqc1xuY29uc3Qge1xuICBBeGlvcyxcbiAgQXhpb3NFcnJvcixcbiAgQ2FuY2VsZWRFcnJvcixcbiAgaXNDYW5jZWwsXG4gIENhbmNlbFRva2VuLFxuICBWRVJTSU9OLFxuICBhbGwsXG4gIENhbmNlbCxcbiAgaXNBeGlvc0Vycm9yLFxuICBzcHJlYWQsXG4gIHRvRm9ybURhdGEsXG4gIEF4aW9zSGVhZGVycyxcbiAgSHR0cFN0YXR1c0NvZGUsXG4gIGZvcm1Ub0pTT04sXG4gIGdldEFkYXB0ZXIsXG4gIG1lcmdlQ29uZmlnXG59ID0gYXhpb3M7XG5cbmV4cG9ydCB7XG4gIGF4aW9zIGFzIGRlZmF1bHQsXG4gIEF4aW9zLFxuICBBeGlvc0Vycm9yLFxuICBDYW5jZWxlZEVycm9yLFxuICBpc0NhbmNlbCxcbiAgQ2FuY2VsVG9rZW4sXG4gIFZFUlNJT04sXG4gIGFsbCxcbiAgQ2FuY2VsLFxuICBpc0F4aW9zRXJyb3IsXG4gIHNwcmVhZCxcbiAgdG9Gb3JtRGF0YSxcbiAgQXhpb3NIZWFkZXJzLFxuICBIdHRwU3RhdHVzQ29kZSxcbiAgZm9ybVRvSlNPTixcbiAgZ2V0QWRhcHRlcixcbiAgbWVyZ2VDb25maWdcbn1cbiIsICJpbXBvcnQgeyBUaGluZywgRW50aXR5LCBDbGFzcywgUHJvcGVydHksIEluZGl2aWR1YWwsIE9udG9sb2d5IH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuXG4vLyBSRUFET05MWSBhcnJheXMgY29udGFpbmluZyB0aGUgc3RyaW5ncyBkZWZpbmluZyBhIE1vZGVsIE9iamVjdCBUeXBlXG5leHBvcnQgY29uc3QgY2xhc3NUeXBlTmFtZXMgPSBbXCJjbGFzc1wiICwgXCJ0ZXJtXCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHByb3BlcnR5VHlwZU5hbWVzID0gW1wicHJvcGVydHlcIiwgXCJhbm5vdGF0aW9uUHJvcGVydHlcIiwgXCJkYXRhUHJvcGVydHlcIiwgXCJvYmplY3RQcm9wZXJ0eVwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBpbmRpdmlkdWFsVHlwZU5hbWVzID0gW1wiaW5kaXZpZHVhbFwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBvbnRvbG9neVR5cGVOYW1lcyA9IFtcIm9udG9sb2d5XCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IGVudGl0eVR5cGVOYW1lcyA9IFsuLi5jbGFzc1R5cGVOYW1lcywgLi4uaW5kaXZpZHVhbFR5cGVOYW1lcywgLi4ucHJvcGVydHlUeXBlTmFtZXNdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHRoaW5nVHlwZU5hbWVzID0gWy4uLmVudGl0eVR5cGVOYW1lcywgLi4ub250b2xvZ3lUeXBlTmFtZXNdIGFzIGNvbnN0O1xuXG4vLyBUeXBlLWNyZWF0aW9uIG91dCBvZiBSRUFET05MWSBhcnJheXNcbmV4cG9ydCB0eXBlIENsYXNzVHlwZU5hbWUgPSB0eXBlb2YgY2xhc3NUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZU5hbWUgPSB0eXBlb2YgcHJvcGVydHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIEluZGl2aWR1YWxUeXBlTmFtZSA9IHR5cGVvZiBpbmRpdmlkdWFsVHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBPbnRvbG9neVR5cGVOYW1lID0gdHlwZW9mIG9udG9sb2d5VHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBFbnRpdHlUeXBlTmFtZSA9IHR5cGVvZiBlbnRpdHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFRoaW5nVHlwZU5hbWUgPSB0eXBlb2YgdGhpbmdUeXBlTmFtZXNbbnVtYmVyXTtcblxuLy8gRnVuY3Rpb25zIGNoZWNraW5nIHN0cmluZyBhZ2FpbnN0IHR5cGUgbmFtZXMsIHJldHVybmluZyBzdHJpbmcgYXMgdHlwZSBuYW1lIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3NUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogdHlwZSBpcyBDbGFzc1R5cGVOYW1lIHtcbiAgICByZXR1cm4gY2xhc3NUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBDbGFzc1R5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgUHJvcGVydHlUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHByb3BlcnR5VHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgUHJvcGVydHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbmRpdmlkdWFsVHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgSW5kaXZpZHVhbFR5cGVOYW1lIHtcbiAgICByZXR1cm4gaW5kaXZpZHVhbFR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIEluZGl2aWR1YWxUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neVR5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIE9udG9sb2d5VHlwZU5hbWUge1xuICAgIHJldHVybiBvbnRvbG9neVR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIE9udG9sb2d5VHlwZU5hbWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgRW50aXR5VHlwZU5hbWUge1xuICAgIHJldHVybiBlbnRpdHlUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBFbnRpdHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUaGluZ1R5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiB0aGluZ1R5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIFRoaW5nVHlwZU5hbWUpO1xufVxuXG4vLyBGdW5jdGlvbnMgY2hlY2tpbmcgVGhpbmcgb2JqZWN0cyBhZ2FpbnN0IHNwZWNpZmljIHR5cGUgKHZpYSBjaGVja2luZyBnZXRUeXBlKCkgYWdhaW5zdCB0eXBlIG5hbWVzKSwgcmV0dXJuaW5nIG9iamVjdCBhcyBzcGVjaWZpYyB0eXBlIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3ModGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIENsYXNzIHtcbiAgICByZXR1cm4gaXNDbGFzc1R5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eSh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgUHJvcGVydHkge1xuICAgIHJldHVybiBpc1Byb3BlcnR5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0luZGl2aWR1YWwodGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIEluZGl2aWR1YWwge1xuICAgIHJldHVybiBpc0luZGl2aWR1YWxUeXBlTmFtZSh0aGluZy5nZXRUeXBlKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5KHRoaW5nOiBUaGluZykgOiB0aGluZyBpcyBFbnRpdHkge1xuICAgIHJldHVybiBpc0VudGl0eVR5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neSh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgT250b2xvZ3kge1xuICAgIHJldHVybiBpc09udG9sb2d5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn0iLCAiaW1wb3J0IHtFdWlMaW5rQ29sb3J9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvbGluay9saW5rXCI7XG5pbXBvcnQge1xuICAgIGlzQ2xhc3NUeXBlTmFtZSxcbiAgICBpc0luZGl2aWR1YWxUeXBlTmFtZSxcbiAgICBpc09udG9sb2d5VHlwZU5hbWUsXG4gICAgaXNQcm9wZXJ0eVR5cGVOYW1lLFxuICAgIGlzVGhpbmdUeXBlTmFtZSwgVGhpbmdUeXBlTmFtZVxufSBmcm9tIFwiLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7U3RvcnlDb250ZXh0fSBmcm9tIFwiQHN0b3J5Ym9vay9yZWFjdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheTxUPihvYmo6IFQgfCBUW10pOiBUW10ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9IGVsc2UgaWYgKG9iaikge1xuICAgICAgICByZXR1cm4gW29ial07XG4gICAgfVxuICAgIHJldHVybiBbXSBhcyBUW107XG59XG5cbmNvbnN0IERFRkFVTFRfVVNFX0xFR0FDWSA9IHRydWU7XG4vKipcbiAqIFJldHVybnMgYHVzZUxlZ2FjeWAgaWYgdW5kZWZpbmVkLCBvdGhlcndpc2UgcmV0dXJucyBkZWZhdWx0IHZhbHVlIGZvciB1c2VMZWdhY3lcbiAqIEBwYXJhbSB1c2VMZWdhY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3k/OiBib29sZWFuKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodXNlTGVnYWN5ICE9PSB1bmRlZmluZWQpID8gdXNlTGVnYWN5IDogREVGQVVMVF9VU0VfTEVHQUNZO1xufVxuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIHR5cGV9LiBJZiB7QGxpbmsgdHlwZX0gZXF1YWxzICd0ZXJtJywgJ2NsYXNzJyBnZXRzIHJldHVybmVkIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRpdHlUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gXCJ0ZXJtXCIgPyBcImNsYXNzXCIgOiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHI6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZUNhbWVsQ2FzZShzdHI6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBjYXBpdGFsaXplKHN0cikuc3BsaXQoLyg/PVtBLVpdW2Etel0pLykuam9pbihcIiBcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZVVuZGVyc2NvcmUoc3RyOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FwaXRhbGl6ZShzdHIpLnJlcGxhY2UoXCJfXCIsIFwiIFwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRyaW1tZWQgYXBpIChvbWl0cyAvYXBpL3YyIGF0IHRoZSBlbmQpXG4gKiBAcGFyYW0gYXBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcm9udEVuZEFwaShhcGk6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBhcGkucmVwbGFjZSgvXFwvYXBpXFwvPyQvLCBcIi9cIik7XG59XG5cbi8qKlxuICogUmV0dXJucyBcIm9udG9sb2dpZXMve29udG9sb2d5SWR9L3tlbnRpdHlUeXBlfS97aXJpfVwiLCB3aGljaCBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggZnJvbnRlbmRBcGkgdG8gZ2V0IGZ1bGwgbGlua1xuICogQHBhcmFtIG9udG9sb2d5SWQgdGhlIGVudGl0aWVzJyBvbnRvbG9neUlkXG4gKiBAcGFyYW0gaXJpIHRoZSBlbnRpdGllcycgaXJpXG4gKiBAcGFyYW0gZW50aXR5VHlwZUFycmF5IHRoZSBlbnRpdGllcycgdHlwZSBhcnJheSAoZnJvbSBhcGkgSlNPTiBsaW5rZWRFbnRpdGllcylcbiAqIEBwYXJhbSB1c2VMZWdhY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlQXJyYXk6IHN0cmluZ1tdIHwgc3RyaW5nLCBpcmk/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pIDogc3RyaW5nIHtcbiAgICByZXR1cm4gYG9udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke3BsdXJhbGl6ZVR5cGUoYXNBcnJheShlbnRpdHlUeXBlQXJyYXkpLCB1c2VMZWdhY3kpfWAgKyAoaXJpICE9IHVuZGVmaW5lZCA/IGAvJHtlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGlyaSkpfWAgOiBcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBsdXJhbGl6ZVR5cGUodHlwZUFycmF5OiBzdHJpbmdbXSB8IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbikgOiBcInRlcm1zXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHwgXCJvbnRvbG9naWVzXCIge1xuICAgIGZvcihjb25zdCB0eXBlIG9mIGFzQXJyYXkodHlwZUFycmF5KSkge1xuICAgICAgICBpZihpc1RoaW5nVHlwZU5hbWUodHlwZSkpIHtcbiAgICAgICAgICAgIGlmKGlzQ2xhc3NUeXBlTmFtZSh0eXBlKSkgcmV0dXJuIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJ0ZXJtc1wiIDogXCJjbGFzc2VzXCI7XG4gICAgICAgICAgICBpZihpc1Byb3BlcnR5VHlwZU5hbWUodHlwZSkpIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgICAgICAgIGlmKGlzSW5kaXZpZHVhbFR5cGVOYW1lKHR5cGUpKSByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgICAgICAgaWYoaXNPbnRvbG9neVR5cGVOYW1lKHR5cGUpKSByZXR1cm4gXCJvbnRvbG9naWVzXCJcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0aGluZ1R5cGUgZm91bmQgdG8gcGx1cmFsaXplIGluIHByb3ZpZGVkIHR5cGVBcnJheS5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW5ndWxhcml6ZVR5cGUodHlwZUFycmF5OiBzdHJpbmdbXSB8IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFRoaW5nVHlwZU5hbWUge1xuICAgIGZvcihjb25zdCB0eXBlIG9mIGFzQXJyYXkodHlwZUFycmF5KSkge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0ZXJtc1wiOiBjYXNlIFwiY2xhc3Nlc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwidGVybVwiIDogXCJjbGFzc1wiO1xuICAgICAgICAgICAgY2FzZSBcInByb3BlcnRpZXNcIjogY2FzZSBcImRhdGFQcm9wZXJ0aWVzXCI6IGNhc2UgXCJvYmplY3RQcm9wZXJ0aWVzXCI6IGNhc2UgXCJhbm5vdGF0aW9uUHJvcGVydGllc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInByb3BlcnR5XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW5kaXZpZHVhbHNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsXCI7XG4gICAgICAgICAgICBjYXNlIFwib250b2xvZ2llc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIm9udG9sb2d5XCJcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0aGluZ1R5cGUgZm91bmQgdG8gc2luZ3VsYXJpemUgaW4gcHJvdmlkZWQgdHlwZUFycmF5LlwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIHN0cmluZyB1c2VkIG1haW5seSBmb3IgY29tcG9uZW50IGtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gICAgcmV0dXJuIChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMiwgNTQpKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hleENvbG9yKHN0cjogc3RyaW5nKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXiNbMC05QS1GXXs2fSQvaS50ZXN0KHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JnYkNvbG9yKHN0cjogc3RyaW5nKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXihyZ2J8aHNsKShhPylbKF1cXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKig/OixcXHMqKFtcXGQuXSspXFxzKik/WyldJC9pLnRlc3Qoc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXVpTGlua0NvbG9yKHN0cjogc3RyaW5nKSA6IHN0ciBpcyBFdWlMaW5rQ29sb3Ige1xuICAgIHJldHVybiBbXCJwcmltYXJ5XCIsIFwic3ViZHVlZFwiLCBcInN1Y2Nlc3NcIiwgXCJhY2NlbnRcIiwgXCJkYW5nZXJcIiwgXCJ3YXJuaW5nXCIsIFwidGV4dFwiLCBcImdob3N0XCJdLmluY2x1ZGVzKHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3I6IGFueSwgbWVzc2FnZVBsYWNlaG9sZGVyID0gXCJpbmZvcm1hdGlvblwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBlcnJvcl9tc2cgOiBzdHJpbmcgPSBlcnJvci5tZXNzYWdlO1xuICAgIGlmKGVycm9yX21zZyA9PT0gKFwiUmVzcG9uc2UgY29udGFpbnMgMCBlbGVtZW50c1wiKSkge1xuICAgICAgICByZXR1cm4gXCJObyBlbGVtZW50cyBmb3VuZFwiO1xuICAgIH1cbiAgICBlbHNlIHJldHVybiBgTm8gJHttZXNzYWdlUGxhY2Vob2xkZXJ9IGF2YWlsYWJsZWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZlclR5cGVGcm9tVHlwZUFycmF5KHR5cGVzOiBzdHJpbmdbXSkge1xuICAgIGxldCByZXMgPSB0eXBlcy5maWx0ZXIoKGVsZW0gOiBzdHJpbmcpID0+IGlzVGhpbmdUeXBlTmFtZShlbGVtKSk7IC8vIGZpbHRlciBub3QgbWF0Y2hpbmcgc3RyaW5nc1xuICAgIHJlcyA9IHJlcy5tYXAoaXRlbSA9PiBpdGVtID09PSBcImFubm90YXRpb25Qcm9wZXJ0eVwiIHx8IGl0ZW0gPT09IFwib2JqZWN0UHJvcGVydHlcIiB8fCBpdGVtID09PSBcImRhdGFQcm9wZXJ0eVwiID8gXCJwcm9wZXJ0eVwiIDogaXRlbSk7XG4gICAgcmVzID0gWy4uLm5ldyBTZXQ8c3RyaW5nPihyZXMpXTsgLy8gcmVtb3ZlIGR1cGxpY2F0ZXNcblxuICAgIGlmKHJlcy5sZW5ndGggPT09IDEpIHJldHVybiByZXNbMF0gYXMgVGhpbmdUeXBlTmFtZTtcbiAgICBlbHNlIGlmKHJlcy5sZW5ndGggPT09IDApIHRocm93IEVycm9yKFwiRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZDogTm8gc3VpdGFibGUgdHlwZSBmb3VuZCBpbiBhcnJheS5cIik7XG4gICAgZWxzZSB0aHJvdyBFcnJvcihgRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZDogTXVsdGlwbGUgdHlwZXMgZm91bmQgaW4gYXJyYXksIG5vIGRlZmluaXRlIGNob2ljZSBwb3NzaWJsZSAtICR7SlNPTi5zdHJpbmdpZnkocmVzKX1gKTtcbn1cblxuLyogVE9ETzogcGx1cmFsaXplVHlwZSBub3QgYXZhaWxhYmxlIGluIGh0bWwgdmVyc2lvbiwgcmVwbGFjZSB3aXRoIGxvY2FsIGZ1bmN0aW9uYWxpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBtYW51YWxseUVtYmVkT25OYXZpZ2F0ZShjb2RlOiBzdHJpbmcsIHN0b3J5Q29udGV4dDogU3RvcnlDb250ZXh0KSB7XG4gICAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb0VudGl0eVwiXSkge1xuICAgICAgICBjYXNlIFwiQ29uc29sZSBtZXNzYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9vbk5hdmlnYXRlVG9FbnRpdHk9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRW50aXR5PXtcXG4gICAgKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgIGNvbnNvbGUubG9nKCdUcmlnZ2VyZWQgb25OYXZpZ2F0ZVRvRW50aXR5KCknICsgKGVudGl0eVR5cGUgPyBgIGZvciAke2VudGl0eVR5cGUgfHwgXFxcImVudGl0eVxcXCJ9YCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5sYWJlbCkgPyBgIFxcXCIke2VudGl0eS5sYWJlbH1cXFwiYCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5pcmkpID8gYCAoaXJpPVxcXCIke2VudGl0eS5pcml9XFxcIilgIDogJycpICsgJy4nKTtcXG4gICAgfVxcbiAgfVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJOYXZpZ2F0ZSB0byBFQkkgcGFnZVwiOlxuICAgICAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgICAgICAgICAgICAvb25OYXZpZ2F0ZVRvRW50aXR5PVxceyhcXChcXCkgPT4gXFx7fXxmdW5jdGlvbiBub1JlZkNoZWNrXFwoXFwpXFx7fSl9LyxcbiAgICAgICAgICAgICAgICBcIm9uTmF2aWdhdGVUb0VudGl0eT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBpZihlbnRpdHkgJiYgZW50aXR5LmlyaSAmJiBlbnRpdHlUeXBlKSB7XFxuICAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy8nICsgb250b2xvZ3lJZCArICcvJyArIG5ldyBNYXAoW1tcXFwidGVybVxcXCIsXFxcImNsYXNzZXNcXFwiXSxbXFxcImNsYXNzXFxcIixcXFwiY2xhc3Nlc1xcXCJdLFtcXFwiaW5kaXZpZHVhbFxcXCIsXFxcImluZGl2aWR1YWxzXFxcIl0sW1xcXCJwcm9wZXJ0eVxcXCIsXFxcInByb3BlcnRpZXNcXFwiXSxbXFxcImRhdGFQcm9wZXJ0eVxcXCIsXFxcInByb3BlcnRpZXNcXFwiXSxbXFxcIm9iamVjdFByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwiYW5ub3RhdGlvblByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdXSkuZ2V0KGVudGl0eVR5cGUpICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChlbnRpdHkuaXJpKSksIFxcXCJfdG9wXFxcIik7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L29udG9sb2dpZXMvJyArIG9udG9sb2d5SWQsIFxcXCJfdG9wXFxcIik7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XCJcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIHN3aXRjaCAoc3RvcnlDb250ZXh0LmFyZ3NbXCJvbk5hdmlnYXRlVG9PbnRvbG9neVwiXSkge1xuICAgICAgICBjYXNlIFwiQ29uc29sZSBtZXNzYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9vbk5hdmlnYXRlVG9PbnRvbG9neT1cXHsoXFwoXFwpID0+IFxce318ZnVuY3Rpb24gbm9SZWZDaGVja1xcKFxcKVxce30pfS8sXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9PbnRvbG9neT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBjb25zb2xlLmxvZygnVHJpZ2dlcmVkIG9uTmF2aWdhdGVUb09udG9sb2d5KCknICsgKGVudGl0eVR5cGUgPyBgIGZvciAke2VudGl0eVR5cGUgfHwgXFxcImVudGl0eVxcXCJ9YCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5sYWJlbCkgPyBgIFxcXCIke2VudGl0eS5sYWJlbH1cXFwiYCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5pcmkpID8gYCAoaXJpPVxcXCIke2VudGl0eS5pcml9XFxcIilgIDogJycpICsgYCBmb3Igb250b2xvZ3lJZCBcXFwiJHtvbnRvbG9neUlkfVxcXCIuYCk7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTmF2aWdhdGUgdG8gRUJJIHBhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgL29uTmF2aWdhdGVUb09udG9sb2d5PVxceyhcXChcXCkgPT4gXFx7fXxmdW5jdGlvbiBub1JlZkNoZWNrXFwoXFwpXFx7fSl9LyxcbiAgICAgICAgICAgICAgICBcIm9uTmF2aWdhdGVUb09udG9sb2d5PXtcXG4gICAgKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgIGlmKGVudGl0eSAmJiBlbnRpdHkuaXJpICYmIGVudGl0eVR5cGUpIHtcXG4gICAgICAgIHdpbmRvdy5vcGVuKCdodHRwczovL3d3dy5lYmkuYWMudWsvb2xzNC9vbnRvbG9naWVzLycgKyBvbnRvbG9neUlkICsgJy8nICsgbmV3IE1hcChbW1xcXCJ0ZXJtXFxcIixcXFwiY2xhc3Nlc1xcXCJdLFtcXFwiY2xhc3NcXFwiLFxcXCJjbGFzc2VzXFxcIl0sW1xcXCJpbmRpdmlkdWFsXFxcIixcXFwiaW5kaXZpZHVhbHNcXFwiXSxbXFxcInByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwiZGF0YVByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwib2JqZWN0UHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl0sW1xcXCJhbm5vdGF0aW9uUHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl1dKS5nZXQoZW50aXR5VHlwZSkgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eS5pcmkpKSwgXFxcIl90b3BcXFwiKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSB7XFxuICAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy8nICsgb250b2xvZ3lJZCwgXFxcIl90b3BcXFwiKTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZVwiXSkge1xuICAgICAgICBjYXNlIFwiQ29uc29sZSBtZXNzYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtcXG4gICAgKGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICAgY29uc29sZS5sb2coJ1RyaWdnZXJlZCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUoKScgKyAoZW50aXR5VHlwZSA/IGAgZm9yICR7ZW50aXR5VHlwZSB8fCBcXFwiZW50aXR5XFxcIn1gIDogJycpICsgKChlbnRpdHkgJiYgZW50aXR5LmxhYmVsKSA/IGAgXFxcIiR7ZW50aXR5LmxhYmVsfVxcXCJgIDogJycpICsgKChlbnRpdHkgJiYgZW50aXR5LmlyaSkgPyBgIChpcmk9XFxcIiR7ZW50aXR5LmlyaX1cXFwiKWAgOiAnJykgKyAnLicpO1xcbiAgICB9XFxuICB9XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk5hdmlnYXRlIHRvIEVCSSBwYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtcXG4gICAgKGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L3NlYXJjaD9xPScgKyAoKGVudGl0eSAmJiBlbnRpdHkubGFiZWwpID8gZW50aXR5LmxhYmVsIDogXFxcIlxcXCIpICsgJyZleGFjdE1hdGNoPXRydWUmbGFuZz1lbicsIFxcXCJfdG9wXFxcIik7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBjb2RlO1xufSIsICJleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWlmaWVkPFQ+IHtcbiAgdmFsdWU6IFQ7XG4gIGF4aW9tczogYW55W10gfCBudWxsO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IFQsIGF4aW9tczogYW55W10gfCBudWxsKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuYXhpb21zID0gYXhpb21zO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbjxUPihqc29uTm9kZTogYW55KTogUmVpZmllZDxUPltdIHtcbiAgICBpZiAoIWpzb25Ob2RlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb25Ob2RlKSkge1xuICAgICAganNvbk5vZGUgPSBbanNvbk5vZGVdO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uTm9kZS5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUudHlwZSkgJiZcbiAgICAgICAgdmFsdWUudHlwZS5pbmRleE9mKFwicmVpZmljYXRpb25cIikgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLnZhbHVlLCB2YWx1ZS5heGlvbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLCBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGhhc01ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmF4aW9tcyAhPSBudWxsO1xuICB9XG5cbiAgLy8gQ29tYmluZSBhbGwgb2YgdGhlIGF4aW9tcyBpbnRvIG9uZSBtZXRhZGF0YSBvYmplY3QgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgLy9cbiAgLy8gbm90ZTogVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzYW1lIHByb3BlcnR5IGlzIHJlaWZpZWQgbXVsdGlwbGUgdGltZXMgd2l0aFxuICAvLyBkaWZmZXJlbnQgbWV0YWRhdGEsIGl0IHdpbGwgYWxsIGJlIGNvbWJpbmVkIGluIHRoZSBVSS4gV2hldGhlciB0aGlzIGlzXG4gIC8vIHRoZSBkZXNpcmVkIGJlaGF2aW91ciBpcyBUQkQuXG4gIC8vXG4gIGdldE1ldGFkYXRhKCk6IGFueSB8IG51bGwge1xuICAgIGlmICghdGhpcy5heGlvbXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnRpZXM6IGFueSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBheGlvbSBvZiB0aGlzLmF4aW9tcykge1xuICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGF4aW9tKSkge1xuICAgICAgICBjb25zdCB2ID0gYXhpb21ba107XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nOiBhbnlbXSB8IHVuZGVmaW5lZCA9IHByb3BlcnRpZXNba107XG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhpc3RpbmcucHVzaCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzW2tdID0gW3ZdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cbn1cbiIsICJpbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCJcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRFbnRpdHkge1xuXHRkZWZpbmVkQnk/OnN0cmluZ1tdXG5cdGlyaT86c3RyaW5nXG5cdHVybD86c3RyaW5nXG5cdG51bUFwcGVhcnNJbjpzdHJpbmdcblx0aGFzTG9jYWxEZWZpbml0aW9uOmJvb2xlYW5cblx0bGFiZWw6c3RyaW5nfHN0cmluZ1tdXG5cdHR5cGU6c3RyaW5nW11cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlua2VkRW50aXRpZXMge1xuXG5cdGxpbmtlZEVudGl0aWVzOnsgW2tleTpzdHJpbmddOkxpbmtlZEVudGl0eSB9XG5cblx0Y29uc3RydWN0b3IobGlua2VkRW50aXRpZXM6YW55KSB7XG5cdFx0aWYobGlua2VkRW50aXRpZXMpXG5cdFx0XHR0aGlzLmxpbmtlZEVudGl0aWVzID0gey4uLmxpbmtlZEVudGl0aWVzfVxuXHRcdGVsc2Vcblx0XHRcdHRoaXMubGlua2VkRW50aXRpZXMgPSB7fVxuXHR9XG5cblx0bWVyZ2VXaXRoKGxpbmtlZEVudGl0aWVzOmFueSk6TGlua2VkRW50aXRpZXMge1xuXHRcdGlmKGxpbmtlZEVudGl0aWVzKVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMsIGxpbmtlZEVudGl0aWVzIH0pXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMgfSlcblx0fVxuXG5cdGdldExhYmVsRm9ySXJpKGlyaTpzdHJpbmcpOnN0cmluZ3x1bmRlZmluZWQge1xuXHRcdGNvbnN0IGxpbmtlZEVudGl0eSA9IHRoaXMubGlua2VkRW50aXRpZXNbaXJpXVxuXG5cdFx0aWYobGlua2VkRW50aXR5KSB7XG5cdFx0XHRjb25zdCBsYWJlbCA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXR5LmxhYmVsIClcblx0XHRcdGlmKGxhYmVsICYmIGxhYmVsLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGxhYmVsWzBdLnZhbHVlXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z2V0KGlyaTpzdHJpbmcpOkxpbmtlZEVudGl0eXx1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmxpbmtlZEVudGl0aWVzW2lyaV1cblx0fVxufVxuIiwgImltcG9ydCB7VGhpbmd9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5cbmltcG9ydCBMaW5rZWRFbnRpdGllcyBmcm9tIFwiLi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5pbXBvcnQge1RoaW5nVHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHtwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzNUaGluZyBpbXBsZW1lbnRzIFRoaW5nIHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIGN1cmllIC8gb2JvX2lkIG1lYW50PyBcImlkXCIgb25seSBleGlzdHMgaW4gc3RhbmRhcmQ/IChodHRwOi8vd3d3LmViaS5hYy51ay9vbHM0L2FwaS9vbnRvbG9naWVzL2Fkby9wcm9wZXJ0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vUk9fMDAwMjE3NSlcbiAgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaWRcIl07XG4gIH1cblxuICBnZXRJcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXJpXCJdO1xuICB9XG5cbiAgLy8gc3RhbmRhcmQgcmVzcG9uc2VzIGRvbid0IGhhdmUgXCJ0eXBlXCIga2V5IC0+IGltcGxlbWVudCBzdGF0aWNhbGx5IGluIHN1YnR5cGVzXG4gIGFic3RyYWN0IGdldFR5cGUoKTogVGhpbmdUeXBlTmFtZTtcblxuICBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInRlcm1zXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZVR5cGUodGhpcy5nZXRUeXBlKCkpO1xuICB9XG5cbiAgLy8gbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCByZXNwb25zZXNcbiAgZ2V0UmRmVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcblx0cmV0dXJuIHRoaXMuZ2V0TmFtZXMoKVswXTtcbiAgfVxuXG4gIC8vIGhhcyBhZGRpdGlvbmFsIGtleSBcInNob3J0aGFuZFwiPyAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvb250b2xvZ2llcy9hZG8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsYWJlbHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXVxuICAgICk7XG4gICAgaWYgKGxhYmVscyAmJiBsYWJlbHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGxhYmVscy5tYXAobGFiZWwgPT4gbGFiZWwudmFsdWUpXG4gICAgfVxuICAgIHJldHVybiBbdGhpcy5nZXRJcmkoKV07XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl0pO1xuICAgIGlmIChkZWZpbml0aW9uICYmIGRlZmluaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRlZmluaXRpb24ubWFwKChkZWYpID0+IGRlZi52YWx1ZSB8fCBcIlwiKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X25hbWVcIl07XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXBwbGljYWJsZSAvIG5lY2Vzc2FyeSBpbiBzdGFuZGFyZCBhcyB0aGVyZSBhcmUgbm8gbGlua2VkIGVudGl0aWVzXG4gIGdldExhYmVsRm9ySXJpKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsaW5rZWRFbnRpdGllcyA9IHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdO1xuICAgIGlmIChsaW5rZWRFbnRpdGllcykge1xuICAgICAgY29uc3QgbGFiZWw6UmVpZmllZDxzdHJpbmc+W10gPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oIGxpbmtlZEVudGl0aWVzW2lkXT8ubGFiZWwgKTtcbiAgICAgIHJldHVybiBsYWJlbFswXT8udmFsdWUgfHwgaWRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdO1xuICBhYnN0cmFjdCBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmc7XG4gIGFic3RyYWN0IGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdO1xuXG4gIC8vIFRPRE86IG5vdCBhcHBsaWNhYmxlIC8gbmVjZXNzYXJ5IGluIHN0YW5kYXJkXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxuXG4gIGdldERlcGljdGlvblVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdICYmIHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl1bXCJkZXBpY3Rpb25cIl0pIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW1wiZGVwaWN0aW9uXCJdWzBdO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwgImltcG9ydCB7RW50aXR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzVGhpbmd9IGZyb20gXCIuL09MUzNUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQge2FzQXJyYXksIGRlVW5kZXJzY29yZX0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eVR5cGVOYW1lfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzNFbnRpdHkgZXh0ZW5kcyBPTFMzVGhpbmcgaW1wbGVtZW50cyBFbnRpdHl7XG4gIGFic3RyYWN0IGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIGlzQ2Fub25pY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGRvZXMgbm90IHNlZW0gdG8gb2NjdXIgaW4gc3RhbmRhcmQgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL2VudGl0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vRk9PRE9OXzAwMDA0NDc0KVxuICAvLyAgICAgICB2MiBoYXMgZGVwcmVjYXRlZCBpbmZvcm1hdGlvbiwgc3RhbmRhcmQgaGFzIG5vdFxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl0gPT09IFwidHJ1ZVwiXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIC8vIG9ubHkgc3VwcG9ydHMgRUZPIGZvciBub3dcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL29ic29sZXRlZF9pbl92ZXJzaW9uXCJdO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZWFzb24oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDAyMzFcIl1cbiAgICApLmNvbmNhdChcbiAgICAgIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL3JlYXNvbl9mb3Jfb2Jzb2xlc2NlbmNlXCJdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVwbGFjZW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMTAwMDAxXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBDYW4gYmUgZXh0cmFjdGVkIGZyb20gXCJsaW5rc1wiLT5cImdyYXBoXCJcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3Rlcm1zP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vQUdST18wMDAwMDAwMilcbiAgZ2V0UmVsYXRlZEZyb20oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wicmVsYXRlZEZyb21cIl0pO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb25Bc0FycmF5KCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCBmcm9tIFwibGlua3NcIi0+XCJjaGlsZHJlblwiXG4gIGhhc0RpcmVjdENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNEaXJlY3RDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICAvLyAvLyBUT0RPOiBub3QgZXhpc3RlbnQgaW4gc3RhbmRhcmQuIENhbiBiZSBleHRyYWN0ZWQgZnJvbSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQ2hpbGRyZW5cIlxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl0gPT09IFwidHJ1ZVwiO1xuICB9XG5cbiAgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc19jaGlsZHJlblwiXVxuICB9XG5cbiAgLy8gVE9ETzogY291bGQgbm90IGZpbmQgZXhhbXBsZXMgb2YgYW5jZXN0b3JzIGluIG5ldyBhcGkgc28gZmFyXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogY2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQW5jZXN0b3JzXCJcbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1zXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCB2aWEgc2VhcmNoaW5nIGZvciBlbnRpdHkgd2l0aG91dCBzcGVjaWZpYyBvbnRvbG9neSAtPiBnaXZlcyBhbGwgb2NjdXJyZW5jZXNcbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRDcm9zc1JlZmVyZW5jZXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW1wiaGFzX2RieHJlZlwiXSB8fCBbXTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gU3RhbmRhcmQgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGlzX2RlZmluaW5nX29udG9sb2d5IGFzIHdlbGxcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL29udG9sb2dpZXMvcm8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldERlZmluZWRCeSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbmVkQnlcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0SXNEZWZpbmluZ09udG9sb2d5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0gfHwgdW5kZWZpbmVkICkgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvYm9faWRcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IGFyZSB0aGUgZm9sbG93aW5nIDMgbmVlZGVkP1xuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgWyAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl0gfHwgW10pLFxuICAgICAgICAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdIHx8IFtdKSBdXG4gICAgKTtcbiAgfVxuXG4gIGlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9zY2hlbWEub3JnL1wiKVxuICB9XG5cbiAgLyoqIENhbiBiZSBqdXN0IGZvdW5kIHVuZGVyIGBwcm9wZXJ0aWVzW1wiYW5ub3RhdGlvblwiXWAuXG4gICAqICBOb3QgcHJlc2VudCBpbiBvbHM0L2FwaSxcbiAgICogIGJ1dCBpbiBzZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9hcGkuXG4gICAqL1xuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgLyogb2xzNCBleGNsdWRlcyBcImhhcyBwcmVmZXJyZWQgcm9vdCB0ZXJtXCIsXG4gICAgICAgcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhbmQgYW55dGhpbmcgaW4gcmRmLCByZGZzIGFuZCBvd2wgbmFtZXNwYWNlcyxcbiAgICAgICBidXQgdGhpcyBpcyBub3QgcG9zc2libGUgaGVyZSBhcyB0aGUgbGFiZWxzIGFyZSBrZXlzIGhlcmUsIG5vdCB0aGUgSVJJJ3MgKi9cbiAgICByZXR1cm4gYXNBcnJheTxzdHJpbmc+KE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl0pKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlVW5kZXJzY29yZShpZCk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTpSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW2lkXSkpXG4gIH1cblxuICAvLyBUT0RPOiBDYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXG4gIGdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgLy8gVE9ETzogQ2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiZGVzY2VuZGFudHNcIlxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIC8vIFRPRE86IENhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cImhpZXJhcmNoaWNhbFBhcmVudHNcIlxuICBnZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhwYXJlbnRJcmk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgaGllcmFyY2hpY2FsUGFyZW50cykge1xuICAgICAgaWYgKHAudmFsdWUgPT09IHBhcmVudElyaSkge1xuICAgICAgICByZXR1cm4gcC5nZXRNZXRhZGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGdldFR5cGUoKTogRW50aXR5VHlwZU5hbWU7XG59XG4iLCAiaW1wb3J0IHtDbGFzc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM0VudGl0eX0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0NsYXNzVHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgT0xTM0NsYXNzIGV4dGVuZHMgT0xTM0VudGl0eSBpbXBsZW1lbnRzIENsYXNzIHtcblxuICBnZXRUeXBlKCk6IENsYXNzVHlwZU5hbWUge1xuICAgIHJldHVybiBcImNsYXNzXCJcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIFwiY2xhc3Nlc1wiXG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxQYXJlbnRzXCJcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJwYXJlbnRzXCJcbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudENsYXNzXCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFdpdGgnXSlcbiAgfVxuXG4gIC8vIFRPRE86IGNhbiB0aGlzIGJlIGluZmVycmVkP1xuICBnZXRIYXNLZXkoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXknXSlcbiAgfVxuXG4gIGdldFN1YnNldHMoKTogYW55W10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImluX3N1YnNldFwiXSkgfHwgW107XG4gIH1cbn1cbiIsICJpbXBvcnQge1Byb3BlcnR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzRW50aXR5fSBmcm9tIFwiLi9PTFMzRW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7UHJvcGVydHlUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzUHJvcGVydHkgZXh0ZW5kcyBPTFMzRW50aXR5IGltcGxlbWVudHMgUHJvcGVydHl7XG5cbiAgZ2V0VHlwZSgpOiBQcm9wZXJ0eVR5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJwcm9wZXJ0eVwiO1xuICB9XG5cbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eURpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludmVyc2VPZlwiXSk7XG4gIH1cblxuICBnZXREb21haW4oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjZG9tYWluJ10pXG4gIH1cblxuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNyYW5nZSddKVxuICB9XG5cbiAgZ2V0UHJvcGVydHlDaGFpbnMoKTpSZWlmaWVkPGFueT5bXSB7XG5cdHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG5cdFx0dGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlDaGFpbkF4aW9tXCJdXG5cdClcbiAgfVxufVxuIiwgImltcG9ydCB7SW5kaXZpZHVhbH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM0VudGl0eX0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0luZGl2aWR1YWxUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzSW5kaXZpZHVhbCBleHRlbmRzIE9MUzNFbnRpdHkgaW1wbGVtZW50cyBJbmRpdmlkdWFse1xuXG4gIGdldFR5cGUoKTogSW5kaXZpZHVhbFR5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJpbmRpdmlkdWFsXCI7XG4gIH1cblxuICBnZXRQYXJlbnRzKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJkaXJlY3RQYXJlbnRcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFtdKVxuICB9XG5cbiAgZ2V0RGlmZmVyZW50RnJvbSgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RpZmZlcmVudEZyb21cIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0U2FtZUFzKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NhbWVBc1wiXSk7XG4gIH1cblxuICBnZXRJbmRpdmlkdWFsVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJkZlR5cGVzOiBhbnkgPSB0aGlzLmdldFJkZlR5cGVzKCk7XG5cbiAgICBpZiAoIXJkZlR5cGVzIHx8ICFBcnJheS5pc0FycmF5KHJkZlR5cGVzKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZGZUeXBlcy5maWx0ZXIoXG4gICAgICAodDogYW55KSA9PlxuICAgICAgICB0ICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmXG5cdFx0KCAoISAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB8fCAhdC5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSkpXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7T250b2xvZ3l9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNUaGluZ30gZnJvbSBcIi4vT0xTM1RoaW5nXCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7YXNBcnJheSwgZGVDYW1lbENhc2V9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTM09udG9sb2d5IGV4dGVuZHMgT0xTM1RoaW5nIGltcGxlbWVudHMgT250b2xvZ3l7XG5cbiAgZ2V0VHlwZSgpOiBcIm9udG9sb2d5XCIgfCBcImNsYXNzXCIgfCBcInByb3BlcnR5XCIgfCBcImluZGl2aWR1YWxcIiB7XG4gICAgcmV0dXJuIFwib250b2xvZ3lcIjtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJvbnRvbG9naWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICByZXR1cm4gXCJvbnRvbG9naWVzXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWVzID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ0aXRsZVwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKG5hbWVzWzBdICYmIG5hbWVzWzBdLnZhbHVlKSB8fCB0aGlzLmdldE9udG9sb2d5SWQoKTtcbiAgfVxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9ucyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImRlc2NyaXB0aW9uXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAoZGVzY3JpcHRpb25zWzBdICYmIGRlc2NyaXB0aW9uc1swXS52YWx1ZSkgfHwgXCJcIjtcbiAgfVxuXG4gIGdldENyZWF0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXVtcImNyZWF0b3JcIl0pO1xuICB9XG5cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ1cGRhdGVkXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZUZXJtc1wiXSk7XG4gIH1cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlByb3BlcnRpZXNcIl0pO1xuICB9XG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mSW5kaXZpZHVhbHNcIl0pO1xuICB9XG4gIGdldExvZ29VUkwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wibG9nb1wiXSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyB1c2VkIGFzIElSSVxuICBnZXRPbnRvbG9neVB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiaWRcIl07XG4gIH1cblxuICBnZXRIb21lcGFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJob21lcGFnZVwiXTtcbiAgfVxuICBnZXRNYWlsaW5nTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJtYWlsaW5nTGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ2ZXJzaW9uSXJpXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1widmVyc2lvblwiXTtcbiAgfVxuICBnZXRWZXJzaW9uRnJvbUlyaSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25JcmkgPSB0aGlzLmdldFZlcnNpb25JcmkoKTtcbiAgICBpZiAoIXZlcnNpb25JcmkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZlcnNpb25Gcm9tRGF0ZSA9IHZlcnNpb25JcmkubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Lyk7XG5cbiAgICBpZiAodmVyc2lvbkZyb21EYXRlICYmIHZlcnNpb25Gcm9tRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21EYXRlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2ZXJzaW9uRnJvbU51bWJlciA9IHZlcnNpb25JcmkubWF0Y2goL1xcL3ZbZC5dLipcXC8vKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbU51bWJlclxuICAgICAgICA/IHZlcnNpb25Gcm9tTnVtYmVyWzBdLnJlcGxhY2VBbGwoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCJ2XCIsIFwiXCIpXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0TG9hZGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxvYWRlZFwiXTtcbiAgfVxuXG4gIC8qKiBDYW4gYmUganVzdCBmb3VuZCB1bmRlciBgcHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdYC5cbiAgICogIE5vdCBwcmVzZW50IGluIG9sczQvYXBpLFxuICAgKiAgYnV0IGluIHNlbWFudGljbG9va3VwLnpibWVkLmRlL2FwaS5cbiAgICovXG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZih0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl0gJiYgdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYW5ub3RhdGlvbnNcIl0pIHtcbiAgICAgIC8qIG9sczQgZXhjbHVkZXMgXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiLFxuICAgICAgIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYW5kIGFueXRoaW5nIGluIHJkZiwgcmRmcyBhbmQgb3dsIG5hbWVzcGFjZXMsXG4gICAgICAgYnV0IHRoaXMgaXMgbm90IHBvc3NpYmxlIGhlcmUgYXMgdGhlIGxhYmVscyBhcmUga2V5cyBoZXJlLCBub3QgdGhlIElSSSdzICovXG4gICAgICByZXR1cm4gYXNBcnJheTxzdHJpbmc+KE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gXCJhbm5vdGF0aW9uc1wiIGtleSBpcyBub3QgcHJlc2VudCBpbiBvbHM0L2FwaVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlQ2FtZWxDYXNlKGlkKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbihhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdW2lkXSlcbiAgICAgICAgLmZpbHRlcigoZWxlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgZWxlbSAhPT0gXCJzdHJpbmdcIiB8fCBlbGVtICE9PSBcIlwiXG4gICAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG4gIGdldExhbmd1YWdlcygpOiBzdHJpbmdbXSB7XG4gICAgLy8gbm90IGF2YWlsYWJsZSBpbiBzZW1sb29rcCBBUEksIGJ1dCBpbiBlYmkgQVBJXG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wibGFuZ1wiXSk7XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXZhaWxhYmxlP1xuICBnZXRJbXBvcnRzRnJvbSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGF2YWlsYWJsZT9cbiAgZ2V0RXhwb3J0c1RvKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJleHBvcnRzVG9cIl0pO1xuICB9XG4gIGdldEFsbG93RG93bmxvYWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYWxsb3dEb3dubG9hZFwiXTtcbiAgfVxufVxuIiwgImltcG9ydCB7T250b2xvZ2llc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM09udG9sb2d5fSBmcm9tIFwiLi9PTFMzT250b2xvZ3lcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNPbnRvbG9naWVzIGltcGxlbWVudHMgT250b2xvZ2llcyB7XG4gIHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldFRvdGFsT250b2xvZ2llcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bUVudGl0aWVzKCksIDApO1xuICB9XG5cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtQ2xhc3NlcygpLCAwKTtcbiAgfVxuXG4gIGdldE51bVByb3BlcnRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bVByb3BlcnRpZXMoKSwgMCk7XG4gIH1cblxuICBnZXROdW1JbmRpdmlkdWFscygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtSW5kaXZpZHVhbHMoKSwgMCk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1RoaW5nfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuXG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4uL0xpbmtlZEVudGl0aWVzXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBpc1RoaW5nVHlwZU5hbWUsIFRoaW5nVHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzRUaGluZyBpbXBsZW1lbnRzIFRoaW5nIHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIGN1cmllIC8gb2JvX2lkIG1lYW50P1xuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpZFwiXTtcbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5wcm9wZXJ0aWVzW1widHlwZVwiXSBhcyBzdHJpbmdbXTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKFxuICAgICAgICBpc1RoaW5nVHlwZU5hbWUodHlwZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHlwZSBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcInRlcm1zXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjogY2FzZSBcImFubm90YXRpb25Qcm9wZXJ0eVwiOiBjYXNlIFwiZGF0YVByb3BlcnR5XCI6IGNhc2UgXCJvYmplY3RQcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFJkZlR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCJcbiAgICBdKVxuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRyZXR1cm4gdGhpcy5nZXROYW1lcygpWzBdO1xuICB9XG5cbiAgZ2V0TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhYmVscyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdXG4gICAgKTtcbiAgICBpZiAobGFiZWxzICYmIGxhYmVscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbGFiZWxzLm1hcChsYWJlbCA9PiBsYWJlbC52YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIFt0aGlzLmdldElyaSgpXTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdKTtcbiAgICBpZiAoZGVmaW5pdGlvbiAmJiBkZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uLm1hcCgoZGVmKSA9PiBkZWYudmFsdWUgfHwgXCJcIikuam9pbihcIiBcIik7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG5cbiAgZ2V0TGFiZWxGb3JJcmkoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmtlZEVudGl0aWVzID0gdGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl07XG4gICAgaWYgKGxpbmtlZEVudGl0aWVzKSB7XG4gICAgICBjb25zdCBsYWJlbDpSZWlmaWVkPHN0cmluZz5bXSA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXRpZXNbaWRdPy5sYWJlbCApO1xuICAgICAgcmV0dXJuIGxhYmVsWzBdPy52YWx1ZSB8fCBpZFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW107XG5cbiAgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6UmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uKGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW2lkXSkpXG4gIH1cblxuICBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExhYmVsRm9ySXJpKGlkKTtcbiAgfVxuXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxuXG4gIGdldERlcGljdGlvblVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGlvblwiXSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwgImltcG9ydCB7RW50aXR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0VGhpbmd9IGZyb20gXCIuL09MUzRUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPTFM0RW50aXR5IGV4dGVuZHMgT0xTNFRoaW5nIGltcGxlbWVudHMgRW50aXR5e1xuICBhYnN0cmFjdCBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXTtcblxuICBpc0Nhbm9uaWNhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXNEZWZpbmluZ09udG9sb2d5XCJdXG4gIH1cblxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25WZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgLy8gb25seSBzdXBwb3J0cyBFRk8gZm9yIG5vd1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vb2Jzb2xldGVkX2luX3ZlcnNpb25cIl07XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlYXNvbigpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDIzMVwiXVxuICAgICkuY29uY2F0KFxuICAgICAgUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vcmVhc29uX2Zvcl9vYnNvbGVzY2VuY2VcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZXBsYWNlbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAxMDAwMDFcIl07XG4gIH1cblxuICBnZXRSZWxhdGVkRnJvbSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJyZWxhdGVkRnJvbVwiXSk7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbkFzQXJyYXkoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSk7XG4gIH1cblxuICBoYXNEaXJlY3RDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzRGlyZWN0Q2hpbGRyZW5cIl07XG4gIH1cblxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl07XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RDaGlsZHJlbigpIHx8IHRoaXMuaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1cIl0pO1xuICB9XG5cbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRDcm9zc1JlZmVyZW5jZXMoKTogYW55W10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaGFzRGJYcmVmXCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldERlZmluZWRCeSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbmVkQnlcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0SXNEZWZpbmluZ09udG9sb2d5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0gfHwgdW5kZWZpbmVkICkgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjdXJpZVwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydEZvcm1cIl07XG4gIH1cblxuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgWyAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl0gfHwgW10pLFxuICAgICAgICAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdIHx8IFtdKSBdXG4gICAgKTtcbiAgfVxuXG4gIGlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9zY2hlbWEub3JnL1wiKVxuICB9XG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBkZWZpbml0aW9uUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblByb3BlcnR5XCJdKTtcbiAgICBjb25zdCBzeW5vbnltUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVByb3BlcnR5XCJdKTtcbiAgICBjb25zdCBoaWVyYXJjaGljYWxQcm9wZXJ0aWVzID0gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFByb3BlcnR5XCJdXG4gICAgKTtcbiAgICBjb25zdCBhbm5vdGF0aW9uUHJlZGljYXRlcyA9IG5ldyBTZXQoKTtcblxuICAgIGZvciAoY29uc3QgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAvLyB0aGlzIGlzIGhhbmRsZWQgZXhwbGljaXRseSBpbiBFbnRpdHlQYWdlXG4gICAgICBpZiAocHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiKSBjb250aW51ZTtcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3Rpb25cIikgY29udGludWU7XG5cbiAgICAgIC8vIE9iamVjdCBwcm9wZXJ0aWVzIGFuZCBkYXRhIHByb3BlcnRpZXMgYXJlIG5vdCBhbm5vdGF0aW9uIHByb3BlcnRpZXMsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBpbmZvcm1hbCB2b2NhYnVsYXJpZXMuXG4gICAgICBpZiAoIXRoaXMuaXNQcmVkaWNhdGVGcm9tSW5mb3JtYWxWb2NhYnVsYXJ5KHByZWRpY2F0ZSkpIHtcbiAgICAgICAgY29uc3QgbGlua2VkRW50aXR5ID0gdGhpcy5nZXRMaW5rZWRFbnRpdGllcygpLmdldChwcmVkaWNhdGUpXG4gICAgICAgIGlmIChsaW5rZWRFbnRpdHkgIT0gdW5kZWZpbmVkICYmIGxpbmtlZEVudGl0eS50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTEpIGNvbnRpbnVlO1xuICAgICAgICBpZiAobGlua2VkRW50aXR5ICE9IHVuZGVmaW5lZCAmJiBsaW5rZWRFbnRpdHkudHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBpbnRlcnByZXRlZCBhcyBkZWZpbml0aW9uL3N5bm9ueW0vaGllcmFyY2hpY2FsLCBkb1xuICAgICAgLy8gbm90IGluY2x1ZGUgaXQgYXMgYW4gYW5ub3RhdGlvblxuICAgICAgaWYgKFxuICAgICAgICBkZWZpbml0aW9uUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xIHx8XG4gICAgICAgIHN5bm9ueW1Qcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTEgfHxcbiAgICAgICAgaGllcmFyY2hpY2FsUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFueXRoaW5nIGluIHRoZSByZGYsIHJkZnMsIG93bCBuYW1lc3BhY2VzIGFyZW4ndCBkaXNwbGF5ZWQgaW4gdGhlIGFubm90YXRpb25zIHNlY3Rpb24uLi5cbiAgICAgIGlmIChcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIC4uLmFwYXJ0IGZyb20gdGhlc2Ugb25lc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNjb21tZW50XCIgJiZcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3NlZUFsc29cIiAmJlxuICAgICAgICAgIC8vIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXlcIiAmJlxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFVuaW9uT2ZcIlxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB3aGlsZSBpbiBnZW5lcmFsIG9ib0luT3dsIG5hbWVzcGFjZSBwcm9wZXJ0aWVzIGFyZSBhbm5vdGF0aW9ucywgc29tZVxuICAgICAgLy8gb2YgdGhlbSB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXlcbiAgICAgIC8vXG4gICAgICBpZiAoXG4gICAgICAgIHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpblN1YnNldFwiIHx8XG4gICAgICAgIHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpZFwiXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGFubm90YXRpb25QcmVkaWNhdGVzLmFkZChwcmVkaWNhdGUpO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKFwiQVBzXCIpO1xuICAgIC8vIGNvbnNvbGUuZGlyKEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpKTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGFubm90YXRpb25QcmVkaWNhdGVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgZ2V0TnVtRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtRGlyZWN0RGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtRGlyZWN0RGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICBnZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhwYXJlbnRJcmk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgaGllcmFyY2hpY2FsUGFyZW50cykge1xuICAgICAgaWYgKHAudmFsdWUgPT09IHBhcmVudElyaSkge1xuICAgICAgICByZXR1cm4gcC5nZXRNZXRhZGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7Q2xhc3N9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzRFbnRpdHl9IGZyb20gXCIuL09MUzRFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTNENsYXNzIGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIENsYXNzIHtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRDbGFzc1wiXVxuICAgICk7XG4gIH1cblxuICBnZXREaXNqb2ludFdpdGgoKSB7XG5cdHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlzam9pbnRXaXRoJ10pO1xuICB9XG5cbiAgZ2V0SGFzS2V5KCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzS2V5J10pO1xuICB9XG5cbiAgZ2V0U3Vic2V0cygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaW5TdWJzZXRcIl0pIHx8IFtdO1xuICB9XG59XG4iLCAiaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTNEVudGl0eX0gZnJvbSBcIi4vT0xTNEVudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0UHJvcGVydHkgZXh0ZW5kcyBPTFM0RW50aXR5IGltcGxlbWVudHMgUHJvcGVydHl7XG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViUHJvcGVydHlPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRQcm9wZXJ0eVwiXVxuICAgICk7XG4gIH1cblxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eURpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludmVyc2VPZlwiXSk7XG4gIH1cblxuICBnZXREb21haW4oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjZG9tYWluJ10pXG4gIH1cblxuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNyYW5nZSddKVxuICB9XG5cbiAgZ2V0UHJvcGVydHlDaGFpbnMoKTpSZWlmaWVkPGFueT5bXSB7XG5cdHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG5cdFx0dGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlDaGFpbkF4aW9tXCJdXG5cdClcbiAgfVxuXG59XG4iLCAiaW1wb3J0IHtJbmRpdmlkdWFsfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0RW50aXR5fSBmcm9tIFwiLi9PTFM0RW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzRJbmRpdmlkdWFsIGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIEluZGl2aWR1YWx7XG4gIGdldFBhcmVudHMoKSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImRpcmVjdFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oW10pXG4gIH1cblxuICBnZXREaWZmZXJlbnRGcm9tKCkge1xuICAgIHJldHVybiBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlmZmVyZW50RnJvbVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRTYW1lQXMoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc2FtZUFzXCJdKTtcbiAgfVxuXG4gIGdldEluZGl2aWR1YWxUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmRmVHlwZXM6IGFueSA9IHRoaXMuZ2V0UmRmVHlwZXMoKTtcblxuICAgIGlmICghcmRmVHlwZXMgfHwgIUFycmF5LmlzQXJyYXkocmRmVHlwZXMpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJkZlR5cGVzLmZpbHRlcihcbiAgICAgICh0OiBhbnkpID0+XG4gICAgICAgIHQgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjTmFtZWRJbmRpdmlkdWFsXCIgJiZcblx0XHQoICghICh0eXBlb2YgdCA9PT0gJ3N0cmluZycpIHx8ICF0LnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpKSlcbiAgICApO1xuICB9XG5cbn1cbiIsICJpbXBvcnQge09udG9sb2d5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0VGhpbmd9IGZyb20gXCIuL09MUzRUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0T250b2xvZ3kgZXh0ZW5kcyBPTFM0VGhpbmcgaW1wbGVtZW50cyBPbnRvbG9neXtcbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lcyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdIHx8IHRoaXMucHJvcGVydGllc1tcInRpdGxlXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAobmFtZXNbMF0gJiYgbmFtZXNbMF0udmFsdWUpIHx8IHRoaXMuZ2V0T250b2xvZ3lJZCgpO1xuICB9XG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb25zID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKGRlc2NyaXB0aW9uc1swXSAmJiBkZXNjcmlwdGlvbnNbMF0udmFsdWUpIHx8IFwiXCI7XG4gIH1cblxuICBnZXRDcmVhdG9ycygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9jcmVhdG9yXCJdKTtcbiAgfVxuXG4gIGdldFNvdXJjZUZpbGVUaW1lc3RhbXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic291cmNlRmlsZVRpbWVzdGFtcFwiXTtcbiAgfVxuICBnZXROdW1FbnRpdGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZkVudGl0aWVzXCJdKTtcbiAgfVxuICBnZXROdW1DbGFzc2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mQ2xhc3Nlc1wiXSk7XG4gIH1cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlByb3BlcnRpZXNcIl0pO1xuICB9XG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mSW5kaXZpZHVhbHNcIl0pO1xuICB9XG4gIGdldExvZ29VUkwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiZGVwaWN0ZWRfYnlcIl0gfHwgdW5kZWZpbmVkO1xuICB9XG4gIGdldE9udG9sb2d5UHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neV9wdXJsXCJdO1xuICB9XG4gIGdldEhvbWVwYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhvbWVwYWdlXCJdO1xuICB9XG4gIGdldE1haWxpbmdMaXN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm1haWxpbmdfbGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSVJJXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbkluZm9cIl07XG4gIH1cbiAgZ2V0VmVyc2lvbkZyb21JcmkoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXJzaW9uSXJpID0gdGhpcy5nZXRWZXJzaW9uSXJpKCk7XG4gICAgaWYgKCF2ZXJzaW9uSXJpKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCB2ZXJzaW9uRnJvbURhdGUgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXGR7NH0tXFxkezJ9LVxcZHsyfS8pO1xuXG4gICAgaWYgKHZlcnNpb25Gcm9tRGF0ZSAmJiB2ZXJzaW9uRnJvbURhdGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25Gcm9tRGF0ZVswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmVyc2lvbkZyb21OdW1iZXIgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXC92W2QuXS4qXFwvLyk7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21OdW1iZXJcbiAgICAgICAgPyB2ZXJzaW9uRnJvbU51bWJlclswXS5yZXBsYWNlQWxsKFwiL1wiLCBcIlwiKS5yZXBsYWNlKFwidlwiLCBcIlwiKVxuICAgICAgICA6IFwiXCI7XG4gICAgfVxuICB9XG4gIGdldExvYWRlZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsb2FkZWRcIl07XG4gIH1cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChjb25zdCBwcmVkaWNhdGUgb2YgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKSkge1xuICAgICAgLy8gcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhcmUgdGhpbmdzIHRoYXQgd2VyZSBhZGRlZCBieSByZGYyanNvbiBzbyBzaG91bGQgbm90XG4gICAgICAvLyBiZSBpbmNsdWRlZCBhcyBhbm5vdGF0aW9uc1xuICAgICAgaWYgKHByZWRpY2F0ZS5pbmRleE9mKFwiOi8vXCIpID09PSAtMSkgY29udGludWU7XG5cbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMDAwNzAwXCIpIHtcbiAgICAgICAgLy8gXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbnl0aGluZyBpbiB0aGUgcmRmLCByZGZzLCBvd2wgbmFtZXNwYWNlcyBhcmVuJ3QgY29uc2lkZXJlZCBhbm5vdGF0aW9uc1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjXCIpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBhbm5vdGF0aW9uUHJlZGljYXRlcy5hZGQocHJlZGljYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykgYXMgc3RyaW5nW107XG4gIH1cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG4gIGdldExhbmd1YWdlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wibGFuZ3VhZ2VcIl0pO1xuICB9XG4gIGdldEltcG9ydHNGcm9tKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJpbXBvcnRzRnJvbVwiXSk7XG4gIH1cbiAgZ2V0RXhwb3J0c1RvKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJleHBvcnRzVG9cIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGF2YWlsYWJsZT9cbiAgZ2V0QWxsb3dEb3dubG9hZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbGxvd0Rvd25sb2FkXCJdO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgT0xTM09udG9sb2d5LCBPTFMzQ2xhc3MsIE9MUzNQcm9wZXJ0eSwgT0xTM0luZGl2aWR1YWwgfSBmcm9tIFwiLi9vbHMzLW1vZGVsXCI7XG5pbXBvcnQgeyBPTFM0T250b2xvZ3ksIE9MUzRDbGFzcywgT0xTNFByb3BlcnR5LCBPTFM0SW5kaXZpZHVhbCB9IGZyb20gXCIuL29sczQtbW9kZWxcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgVGhpbmdUeXBlTmFtZSB9IGZyb20gXCIuL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBhc0FycmF5LCBpbmZlclR5cGVGcm9tVHlwZUFycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbE9iamVjdChyZXNwb25zZTogYW55KSB7XG4gIGxldCB1c2VMZWdhY3k6IGJvb2xlYW47XG4gIGlmIChyZXNwb25zZVtcIl9lbWJlZGRlZFwiXSAhPT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlW1wibnVtYmVyT2ZUZXJtc1wiXSAhPT0gdW5kZWZpbmVkKSB1c2VMZWdhY3kgPSB0cnVlO1xuICBlbHNlIGlmIChyZXNwb25zZVtcImVsZW1lbnRzXCJdICE9PSB1bmRlZmluZWQgfHwgcmVzcG9uc2VbXCJudW1iZXJPZkNsYXNzZXNcIl0gIT09IHVuZGVmaW5lZCkgdXNlTGVnYWN5ID0gZmFsc2U7XG4gIGVsc2UgdGhyb3cgRXJyb3IoYFJlc3BvbnNlIHN0cnVjdHVyZSBkb2VzIG5vdCBjb3JyZWxhdGUgdG8gYW55IG9mIHRoZSBmZWF0dXJlZCByZXNwb25zZSBzdHJ1Y3R1cmVzOiBcXG4gJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZSl9YCk7XG5cbiAgbGV0IGVudGl0eVR5cGU6IFRoaW5nVHlwZU5hbWUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGlmICh1c2VMZWdhY3kpIHtcbiAgICBpZiAocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW50aXR5VHlwZSA9IFwib250b2xvZ3lcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJ0ZXJtc1wiXSAhPT0gdW5kZWZpbmVkKSBlbnRpdHlUeXBlID0gXCJ0ZXJtXCI7XG4gICAgICBlbHNlIGlmIChyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInByb3BlcnRpZXNcIl0gIT09IHVuZGVmaW5lZCkgZW50aXR5VHlwZSA9IFwicHJvcGVydHlcIjtcbiAgICAgIGVsc2UgaWYgKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wiaW5kaXZpZHVhbHNcIl0gIT09IHVuZGVmaW5lZCkgZW50aXR5VHlwZSA9IFwiaW5kaXZpZHVhbFwiO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBpZiAocmVzcG9uc2VbXCJlbGVtZW50c1wiXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbnRpdHlUeXBlID0gXCJvbnRvbG9neVwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChyZXNwb25zZVtcImVsZW1lbnRzXCJdWzBdID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRW1wdHkgcmVzcG9uc2UuXCIpO1xuXG4gICAgICBlbnRpdHlUeXBlID0gaW5mZXJUeXBlRnJvbVR5cGVBcnJheShyZXNwb25zZVtcImVsZW1lbnRzXCJdWzBdW1widHlwZVwiXSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGVudGl0eVR5cGUgPT09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoXCJFbnRpdHkgdHlwZSBjb3VsZCBub3QgYmUgY29ycmVjdGx5IGluZmVycmVkLlwiKTtcblxuICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3RXaXRoRW50aXR5VHlwZVdpdGhVc2VMZWdhY3kocmVzcG9uc2UsIGVudGl0eVR5cGUsIHVzZUxlZ2FjeSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vZGVsT2JqZWN0V2l0aEVudGl0eVR5cGVXaXRoVXNlTGVnYWN5KHJlc3BvbnNlOiBhbnksIGVudGl0eVR5cGU6IHN0cmluZywgdXNlTGVnYWN5OiBib29sZWFuKTogVGhpbmcge1xuICBzd2l0Y2ggKGVudGl0eVR5cGUpIHtcbiAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM09udG9sb2d5KHJlc3BvbnNlKSA6IG5ldyBPTFM0T250b2xvZ3kocmVzcG9uc2UpO1xuXG4gICAgY2FzZSBcInRlcm1cIjpcbiAgICBjYXNlIFwiY2xhc3NcIjogLy8gYWxsb3cgQk9USCwgZXZlbiBpZiBpdCBzaG91bGQgYWN0dWFsbHkgYmUgXCJ0ZXJtXCJcbiAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM0NsYXNzKGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1widGVybXNcIl0pLCB1c2VMZWdhY3kpKSA6IG5ldyBPTFM0Q2xhc3MoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICByZXR1cm4gdXNlTGVnYWN5ID8gbmV3IE9MUzNQcm9wZXJ0eShnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oYXNBcnJheShyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInByb3BlcnRpZXNcIl0pLCB1c2VMZWdhY3kpKSA6IG5ldyBPTFM0UHJvcGVydHkoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM0luZGl2aWR1YWwoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJpbmRpdmlkdWFsc1wiXSksIHVzZUxlZ2FjeSkpIDogbmV3IE9MUzRJbmRpdmlkdWFsKGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiZWxlbWVudHNcIl0pLCB1c2VMZWdhY3kpKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBlbnRpdHkgdHlwZSBcIicgKyBlbnRpdHlUeXBlICsgJ1wiLiBNdXN0IGJlIG9uZSBvZiB7XCJ0ZXJtXCIsIFwiY2xhc3NcIiwgXCJvbnRvbG9neVwiLCBcInByb3BlcnR5XCIsIFwiaW5kaXZpZHVhbFwifScpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgSlNPTiBvZiB0aGUgZW50aXR5IGluIGl0cyBkZWZpbmluZyBvbnRvbG9neSwgb3IsIGlmIG5vdCBhdmFpbGFibGUsIGp1c3QgdGhlIGZpcnN0IEpTT04gaW4gdGhlIGFycmF5LlxuICogSWYgb250b2xvZ3lJZCB3YXMgcHJvdmlkZWQgaW4gdGhlIHJlc3BvbnNlIHJlcXVlc3QsIHRoZSBhcnJheSBzaG91bGQgb25seSBjb250YWluIG9uZSBlbGVtZW50LCB0aHVzIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGFzIGV4cGVjdGVkIGFzIHdlbGxcbiAqIEBwYXJhbSBlbnRpdHlBcnJheVJlc3BvbnNlIHRoZSBzdWItcmVzcG9uc2Ugb2YgdGhlIGluaXRpYWwgcXVlcnkgcmVzcG9uc2UgY29udGFpbmluZyBqdXN0IHRoZSBlbnRpdHkgYXJyYXlcbiAqIEBwYXJhbSB1c2VMZWdhY3kgYXBpIHZlcnNpb24gKG5lZWRlZCBiZWNhdXNlIGtleSBnaXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgZGVmaW5pbmcgb250b2xvZ3kgaGFzIGRpZmZlcmVudCBuYW1lcyBpbiBib3RoIHZlcnNpb25zKVxuICogQHBhcmFtIG9udG9sb2d5SWQgaWYgc3BlY2lmaWVkLCByZXR1cm5zIHRoZSBlbnRpdHkgaW4gdGhpcyBvbnRvbG9neSBpZiBhdmFpbGFibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihlbnRpdHlBcnJheVJlc3BvbnNlOiBhbnlbXSwgdXNlTGVnYWN5OiBib29sZWFuLCBvbnRvbG9neUlkPzogc3RyaW5nKSB7XG4gIGlmIChvbnRvbG9neUlkKSB7XG4gICAgY29uc3QgZW50aXR5SW5PbnRvbG9neSA9IGFzQXJyYXkoZW50aXR5QXJyYXlSZXNwb25zZSkuZmlsdGVyKChlbnRpdHkpID0+ICh1c2VMZWdhY3kgPyBlbnRpdHlbXCJvbnRvbG9neV9uYW1lXCJdIDogZW50aXR5W1wib250b2xvZ3lJZFwiXSkgPT0gb250b2xvZ3lJZCk7XG4gICAgaWYgKGVudGl0eUluT250b2xvZ3kubGVuZ3RoID4gMCkgcmV0dXJuIGVudGl0eUluT250b2xvZ3lbMF07XG4gICAgZWxzZSBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG9udG9sb2d5SWQgJHtvbnRvbG9neUlkfSBmb3IgZ2l2ZW4gZW50aXR5QXJyYXlSZXNwb25zZS5gKTtcbiAgfVxuXG4gIGNvbnN0IGRlZmluaW5nT250b2xvZ3lBcnIgPSBhc0FycmF5KGVudGl0eUFycmF5UmVzcG9uc2UpLmZpbHRlcigoZW50aXR5KSA9PiB1c2VMZWdhY3kgPyBlbnRpdHlbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSA6IGVudGl0eVtcImlzRGVmaW5pbmdPbnRvbG9neVwiXSk7XG4gIGlmIChkZWZpbmluZ09udG9sb2d5QXJyLmxlbmd0aCA+IDApIHJldHVybiBkZWZpbmluZ09udG9sb2d5QXJyWzBdO1xuICBlbHNlIGlmIChlbnRpdHlBcnJheVJlc3BvbnNlLmxlbmd0aCA+IDApIHJldHVybiBlbnRpdHlBcnJheVJlc3BvbnNlWzBdO1xuICBlbHNlIHRocm93IEVycm9yKFwiRW1wdHkgcmVzcG9uc2UuXCIpO1xufVxuIiwgImltcG9ydCB7RW50aXR5VHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHtIaWVyYXJjaHlCdWlsZGVyfSBmcm9tIFwiLi4vLi4vYXBpL0hpZXJhcmNoeUJ1aWxkZXJcIjtcbmltcG9ydCB7RW50aXR5RGF0YUZvckhpZXJhcmNoeX0gZnJvbSBcIi4uLy4uL2FwcC90eXBlc1wiO1xuXG5leHBvcnQgdHlwZSBQYXJlbnRDaGlsZFJlbGF0aW9uID0ge1xuICAgIGNoaWxkSXJpOiBzdHJpbmcsXG4gICAgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBUcmVlTm9kZSB7XG4gICAgZW50aXR5RGF0YTogRW50aXR5RGF0YUZvckhpZXJhcmNoeTtcbiAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ/OiBzdHJpbmc7XG4gICAgbG9hZGVkQ2hpbGRyZW46IFRyZWVOb2RlW107XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgbG9hZGluZzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBlbnRpdHlEYXRhXG4gICAgICogQHBhcmFtIGNoaWxkUmVsYXRpb25Ub1BhcmVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGVudGl0eURhdGE6IEVudGl0eURhdGFGb3JIaWVyYXJjaHksIGNoaWxkUmVsYXRpb25Ub1BhcmVudD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmVudGl0eURhdGEgPSBlbnRpdHlEYXRhO1xuICAgICAgICB0aGlzLmxvYWRlZENoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hpbGRSZWxhdGlvblRvUGFyZW50ID0gY2hpbGRSZWxhdGlvblRvUGFyZW50O1xuICAgIH1cblxuICAgIGFkZENoaWxkKGNoaWxkOiBUcmVlTm9kZSkge1xuICAgICAgICB0aGlzLmxvYWRlZENoaWxkcmVuLnB1c2goY2hpbGQpXG4gICAgfVxufVxuXG5jb25zdCBERUZBVUxUX0lOQ0xVREVfT0JTT0xFVEVfRU5USVRJRVM6IGJvb2xlYW4gPSBmYWxzZSBhcyBjb25zdDtcbmNvbnN0IERFRkFVTFRfS0VFUF9FWFBBTlNJT05fU1RBVEU6IGJvb2xlYW4gPSB0cnVlIGFzIGNvbnN0O1xuXG5leHBvcnQgY2xhc3MgSGllcmFyY2h5IHtcbiAgICBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPjtcbiAgICBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGFGb3JIaWVyYXJjaHk+O1xuICAgIGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz47XG4gICAgcm9vdHM6IFRyZWVOb2RlW107IC8vIHN0b3JlcyB0aGUgdHJlZSBoaWVyYXJjaHlcbiAgICBwcm90ZWN0ZWQgYXBpOiBIaWVyYXJjaHlCdWlsZGVyO1xuICAgIG9udG9sb2d5SWQ6IHN0cmluZztcblxuICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBib29sZWFuID0gREVGQVVMVF9JTkNMVURFX09CU09MRVRFX0VOVElUSUVTO1xuICAgIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZTtcbiAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBib29sZWFuID0gREVGQVVMVF9LRUVQX0VYUEFOU0lPTl9TVEFURTtcbiAgICBwcm90ZWN0ZWQgdXNlTGVnYWN5PzogYm9vbGVhbjtcblxuICAgIG1haW5FbnRpdHlJcmk/OiBzdHJpbmc7IC8vIHRvIGhpZ2hsaWdodCBpdCBpbiB0aGUgaGllcmFyY2h5XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczoge1xuICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPixcbiAgICAgICAgZW50aXRpZXNEYXRhOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PixcbiAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBTZXQ8c3RyaW5nPixcbiAgICAgICAgcm9vdHM6IFRyZWVOb2RlW10sXG4gICAgICAgIGFwaTogSGllcmFyY2h5QnVpbGRlcixcbiAgICAgICAgb250b2xvZ3lJZDogc3RyaW5nLFxuICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcz86IGJvb2xlYW4sXG4gICAgICAgIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZSxcbiAgICAgICAgbWFpbkVudGl0eUlyaT86IHN0cmluZyxcbiAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcz86IGJvb2xlYW4sXG4gICAgICAgIHVzZUxlZ2FjeT86IGJvb2xlYW4sXG4gICAgfSkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgICAgICAgIGVudGl0aWVzRGF0YSxcbiAgICAgICAgICAgIGFsbENoaWxkcmVuUHJlc2VudCxcbiAgICAgICAgICAgIHJvb3RzLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgbWFpbkVudGl0eUlyaSxcbiAgICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgICAgdXNlTGVnYWN5LFxuICAgICAgICB9ID0gcHJvcHM7XG5cbiAgICAgICAgdGhpcy5wYXJlbnRDaGlsZFJlbGF0aW9ucyA9IHBhcmVudENoaWxkUmVsYXRpb25zO1xuICAgICAgICB0aGlzLmVudGl0aWVzRGF0YSA9IGVudGl0aWVzRGF0YTtcbiAgICAgICAgdGhpcy5hbGxDaGlsZHJlblByZXNlbnQgPSBhbGxDaGlsZHJlblByZXNlbnQ7XG4gICAgICAgIHRoaXMucm9vdHMgPSByb290cztcbiAgICAgICAgaWYoaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgIT0gdW5kZWZpbmVkKSB0aGlzLmluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gaW5jbHVkZU9ic29sZXRlRW50aXRpZXM7XG4gICAgICAgIGlmKGtlZXBFeHBhbnNpb25TdGF0ZXMgIT0gdW5kZWZpbmVkKSB0aGlzLmtlZXBFeHBhbnNpb25TdGF0ZXMgPSBrZWVwRXhwYW5zaW9uU3RhdGVzO1xuICAgICAgICB0aGlzLmFwaSA9IGFwaTtcbiAgICAgICAgdGhpcy5tYWluRW50aXR5SXJpID0gbWFpbkVudGl0eUlyaTtcbiAgICAgICAgdGhpcy5lbnRpdHlUeXBlID0gZW50aXR5VHlwZTtcbiAgICAgICAgdGhpcy5vbnRvbG9neUlkID0gb250b2xvZ3lJZDtcbiAgICAgICAgaWYodXNlTGVnYWN5ICE9IHVuZGVmaW5lZCkgdGhpcy51c2VMZWdhY3kgPSB1c2VMZWdhY3k7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVyZ2VzIHRoZSBlbnRyaWVzIG9mIGB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zKG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSlgIGludG8gYG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbmAuIEhlcmUsXG4gICAgICogb25seSBub3QgYWxyZWFkeSBwcmVzZW50IGNoaWxkcmVuIGFyZSBhZGRlZCB0byBrZWVwIHRoZSBleHBhbnNpb24gc3RhdGUgb2YgdGhlIGFscmVhZHkgbG9hZGVkIGNoaWxkcmVuLlxuICAgICAqIGBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5gIGlzIHNvcnRlZCBhbHBoYWJldGljYWxseSBieSBkaXNwbGF5ZWQgbGFiZWxzIGFmdGVyd2FyZC5cbiAgICAgKlxuICAgICAqIEFTU1VNUFRJT05TOlxuICAgICAqIDEuIGB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLmdldChub2RlVG9FeHBhbmQpYCBpcyBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgYnkgZGlzcGxheWVkIGxhYmVsc1xuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVUb0V4cGFuZCB0aGUgbm9kZSBpbnNpZGUgdGhlIGhpZXJhcmNoeSAoYHRoaXMucm9vdHNgKSB0byBtZXJnZSB0aGUgY2hpbGRyZW4gaW50b1xuICAgICAqL1xuICAgIHByaXZhdGUgbWVyZ2VDaGlsZHJlbkludG9Mb2FkZWRDaGlsZHJlbihub2RlVG9FeHBhbmQ6IFRyZWVOb2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5wYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQobm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpKTtcbiAgICAgICAgaWYoY2hpbGRyZW4gPT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihgcGFyZW50Q2hpbGRSZWxhdGlvbnMgaGFzIG5vIGVudHJ5IGZvciBrZXkgXCIke25vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaX1cIiBhbHRob3VnaCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4uYCk7XG5cbiAgICAgICAgbGV0IGlMb2FkZWRDaGlsZHJlbiA9IDA7XG4gICAgICAgIGNvbnN0IG51bUxvYWRlZENoaWxkcmVuID0gbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuLmxlbmd0aDsgLy8gaW5pdGlhbCBsZW5ndGhcbiAgICAgICAgbGV0IGlDaGlsZHJlbiA9IDA7XG5cbiAgICAgICAgd2hpbGUoaUNoaWxkcmVuIDwgY2hpbGRyZW4ubGVuZ3RoICYmIGlMb2FkZWRDaGlsZHJlbiA8IG51bUxvYWRlZENoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZihub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5baUxvYWRlZENoaWxkcmVuXS5lbnRpdHlEYXRhLmlyaSA9PSBjaGlsZHJlbltpQ2hpbGRyZW5dLmNoaWxkSXJpKSB7XG4gICAgICAgICAgICAgICAgaUxvYWRlZENoaWxkcmVuKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgIG5vZGVUb0V4cGFuZC5hZGRDaGlsZChuZXcgVHJlZU5vZGUodGhpcy5lbnRpdGllc0RhdGEuZ2V0KGNoaWxkcmVuW2lDaGlsZHJlbl0uY2hpbGRJcmkpISwgY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZFJlbGF0aW9uVG9QYXJlbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlDaGlsZHJlbisrO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlKGlDaGlsZHJlbiA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIG5vZGVUb0V4cGFuZC5hZGRDaGlsZChuZXcgVHJlZU5vZGUodGhpcy5lbnRpdGllc0RhdGEuZ2V0KGNoaWxkcmVuW2lDaGlsZHJlbl0uY2hpbGRJcmkpISwgY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZFJlbGF0aW9uVG9QYXJlbnQpKTtcbiAgICAgICAgICAgIGlDaGlsZHJlbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc29ydCBhbHJlYWR5IGxvYWRlZCBjaGlsZHJlbiBpbiBjb3JyZWN0bHlcbiAgICAgICAgZm9yKGxldCBpTG9hZGVkQ2hpbGRyZW4gPSBudW1Mb2FkZWRDaGlsZHJlbiAtIDE7IGlMb2FkZWRDaGlsZHJlbiA+PSAwOyBpTG9hZGVkQ2hpbGRyZW4tLSkge1xuICAgICAgICAgICAgZm9yKGxldCBjdXJySWR4ID0gaUxvYWRlZENoaWxkcmVuICsgMTsgY3VycklkeCA8IG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbi5sZW5ndGg7IGN1cnJJZHgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJOb2RlID0gbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuW2N1cnJJZHhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZOb2RlID0gbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuW2N1cnJJZHggLSAxXTtcblxuICAgICAgICAgICAgICAgIGlmKChjdXJyTm9kZS5lbnRpdHlEYXRhLmxhYmVsIHx8IGN1cnJOb2RlLmVudGl0eURhdGEuaXJpKS5sb2NhbGVDb21wYXJlKHByZXZOb2RlLmVudGl0eURhdGEubGFiZWwgfHwgcHJldk5vZGUuZW50aXR5RGF0YS5pcmkpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeF0gPSBwcmV2Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuW2N1cnJJZHggLSAxXSA9IGN1cnJOb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvc2VOb2RlKG5vZGVUb0Nsb3NlOiBUcmVlTm9kZSkge1xuICAgICAgICBpZighdGhpcy5rZWVwRXhwYW5zaW9uU3RhdGVzKSB7XG4gICAgICAgICAgICBub2RlVG9DbG9zZS5sb2FkZWRDaGlsZHJlbiA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIGZvciBleHBhbnNpb24gb2YgYG5vZGVUb0V4cGFuZGAgaXMgYXZhaWxhYmxlIChpLmUuIHRoZXJlIGFyZSBhbHJlYWR5IGNoaWxkcmVuIGxvYWRlZCkgYW5kIGZldGNoZXMgaXQgaWYgbm90LlxuICAgICAqIEByZXR1cm4gYm9vbGVhbiBgdHJ1ZWAgaWYgaW5mb3JtYXRpb24gaGFkIHRvIGJlIGZldGNoZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAgICovXG4gICAgYXN5bmMgZmV0Y2hJbmZvcm1hdGlvbkZvckV4cGFuc2lvbihub2RlVG9FeHBhbmQ6IFRyZWVOb2RlKSB7XG4gICAgICAgIGlmKCFub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5oYXNDaGlsZHJlbikgdGhyb3cgRXJyb3IoYE5vZGUgY29udGFpbmluZyBpcmk9XCIke25vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaX1cIiBjb3VsZCBub3QgYmUgZXhwYW5kZWQ6IEVudGl0eSBpcyBub3QgZXhwYW5kYWJsZS5gKVxuXG4gICAgICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudCA9IHRoaXMuYWxsQ2hpbGRyZW5QcmVzZW50Lmhhcyhub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICBjb25zdCBub2RlUGFyZW50Q2hpbGRSZWxhdGlvbnMgPSB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLmdldChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpIHx8IFtdO1xuICAgICAgICBpZighYWxsQ2hpbGRyZW5QcmVzZW50IHx8IG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbi5sZW5ndGggPD0gbm9kZVBhcmVudENoaWxkUmVsYXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYoIWFsbENoaWxkcmVuUHJlc2VudCkge1xuICAgICAgICAgICAgICAgIC8vIGR5bmFtaWNhbGx5IGxvYWQgY2hpbGRyZW4gZnJvbSBhcGlcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbjogRW50aXR5RGF0YUZvckhpZXJhcmNoeVtdID0gKGF3YWl0IHRoaXMuYXBpLmxvYWRIaWVyYXJjaHlDaGlsZHJlbih7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVUb0V4cGFuZDogbm9kZVRvRXhwYW5kLFxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlOiB0aGlzLmVudGl0eVR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ6IHRoaXMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHRoaXMuaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeTogdGhpcy51c2VMZWdhY3ksXG4gICAgICAgICAgICAgICAgfSkpLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgIChhLCBiKSA9PiAoYS5sYWJlbCB8fCBhLmlyaSkubG9jYWxlQ29tcGFyZShiLmxhYmVsIHx8IGIuaXJpKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAvLyBhZGQgY2hpbGRyZW4gdG8gcGFyZW50Q2hpbGRSZWxhdGlvbnMgZm9yIGlyaSBvZiBub2RlVG9FeHBhbmRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJDaGlsZFJlbDogUGFyZW50Q2hpbGRSZWxhdGlvbltdID0gW107XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc0RhdGEuc2V0KGNoaWxkLmlyaSwgY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJSZWxhdGlvbiA9IGNoaWxkLnBhcmVudHMuZmlsdGVyKChwYXIpID0+IHBhci52YWx1ZSA9PSBub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpOyAvLyBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIHBhckNoaWxkUmVsLnB1c2goe2NoaWxkSXJpOiBjaGlsZC5pcmksIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogcGFyUmVsYXRpb24ubGVuZ3RoID4gMCAmJiBwYXJSZWxhdGlvblswXS5nZXRNZXRhZGF0YSgpID8gcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXSA6IHVuZGVmaW5lZH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLnNldChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmksIHBhckNoaWxkUmVsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5tZXJnZUNoaWxkcmVuSW50b0xvYWRlZENoaWxkcmVuKG5vZGVUb0V4cGFuZCk7XG5cbiAgICAgICAgICAgIHRoaXMuYWxsQ2hpbGRyZW5QcmVzZW50LmFkZChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gICAgfVxufSIsICJpbXBvcnQgeyBTZWxlY3QgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZWxlY3RcIjtcbmltcG9ydCB7IFNlbGVjdFJlc3VsdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlbGVjdFJlc3VsdFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTU2VsZWN0IGltcGxlbWVudHMgU2VsZWN0IHtcbiAgcHJvcGVydGllczogU2VsZWN0UmVzdWx0W107XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogU2VsZWN0UmVzdWx0W10pIHtcbiAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gIGdldFRvdGFsU2VhcmNoUmVzdWx0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG5cblxuICB9IiwgImltcG9ydCB7IFNlbGVjdFJlc3VsdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlbGVjdFJlc3VsdFwiO1xuaW1wb3J0IHsgVGhpbmdUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgT0xTU2VsZWN0UmVzdWx0IGltcGxlbWVudHMgU2VsZWN0UmVzdWx0IHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdGlvbi5qb2luKFwiIFwiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZXNjcmlwdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cblxuICBnZXRJcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXJpXCJdO1xuICB9XG5cbiAgZ2V0TGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl07XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X25hbWVcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ0eXBlXCJdO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcInRlcm1zXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICAgICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgICAgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRTaG9ydEZvcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG4gIGdldEFwaVNvdXJjZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldEFwaVNvdXJjZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCJcbiAgfVxufSIsICJpbXBvcnQgeyBTZWxlY3RSZXN1bHQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZWxlY3RSZXN1bHRcIjtcbmltcG9ydCB7IFRoaW5nVHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNsYXNzIFRzNG5mZGlTZWFyY2hSZXN1bHQgaW1wbGVtZW50cyBTZWxlY3RSZXN1bHQge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uLmpvaW4oXCIgXCIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ0eXBlXCJdO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcInRlcm1zXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICAgICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgICAgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRTaG9ydEZvcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG4gIGdldEFwaVNvdXJjZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic291cmNlX25hbWVcIl07XG4gIH1cblxuICBnZXRBcGlTb3VyY2VFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzb3VyY2VcIl07XG4gIH1cbn0iLCAiaW1wb3J0IGF4aW9zLCB7IEF4aW9zSW5zdGFuY2UsIEF4aW9zUmVxdWVzdENvbmZpZyB9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHsgYXNBcnJheSwgZ2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeCwgZ2V0VXNlTGVnYWN5LCBwbHVyYWxpemVUeXBlIH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2RlbE9iamVjdCB9IGZyb20gXCIuLi9tb2RlbC9Nb2RlbE9iamVjdENyZWF0b3JcIjtcbmltcG9ydCB7IE9udG9sb2d5LCBPbnRvbG9naWVzLCBFbnRpdHksIFRoaW5nLCBJbmRpdmlkdWFsIH0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IE9MUzNPbnRvbG9naWVzLCBPTFMzT250b2xvZ3kgfSBmcm9tIFwiLi4vbW9kZWwvb2xzMy1tb2RlbFwiO1xuaW1wb3J0IHtcbiAgY2xhc3NUeXBlTmFtZXMsIGVudGl0eVR5cGVOYW1lcywgb250b2xvZ3lUeXBlTmFtZXMsIHRoaW5nVHlwZU5hbWVzLFxuICBFbnRpdHlUeXBlTmFtZSwgVGhpbmdUeXBlTmFtZSxcbiAgaXNDbGFzc1R5cGVOYW1lLCBpc0VudGl0eVR5cGVOYW1lLCBpc0luZGl2aWR1YWxUeXBlTmFtZSwgaXNPbnRvbG9neVR5cGVOYW1lXG59IGZyb20gXCIuLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgRW50aXR5RGF0YUZvckhpZXJhcmNoeSwgSGllcmFyY2h5LCBQYXJlbnRDaGlsZFJlbGF0aW9uLCBUcmVlTm9kZSB9IGZyb20gXCIuLi9tb2RlbC9pbnRlcmZhY2VzL0hpZXJhcmNoeVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCB7IEJ1aWxkSGllcmFyY2h5UHJvcHMsIEhpZXJhcmNoeUJ1aWxkZXIsIEhpZXJhcmNoeUlyaVByb3AsIExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzIH0gZnJvbSBcIi4vSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHsgT0xTU2VsZWN0IH0gZnJvbSBcIi4uL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RcIjtcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gXCIuLi9tb2RlbC9pbnRlcmZhY2VzL1NlbGVjdFwiO1xuaW1wb3J0IHsgT0xTU2VsZWN0UmVzdWx0IH0gZnJvbSBcIi4uL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RSZXN1bHRcIjtcbmltcG9ydCB7IFRzNG5mZGlTZWFyY2hSZXN1bHQgfSBmcm9tIFwiLi4vbW9kZWwvdHM0bmZkaS1tb2RlbC9UczRuZmRpU2VhcmNoUmVzdWx0XCI7XG5cbi8vIHVzZWQgdG8gZmlsdGVyIGVudGl0aWVzIG5vdCBiZSBzaG93biBpbiBoaWVyYXJjaHlcbmZ1bmN0aW9uIGlzVG9wKGlyaTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpcmkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVGhpbmdcIiB8fCBpcmkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVG9wT2JqZWN0UHJvcGVydHlcIjtcbn1cblxuaW50ZXJmYWNlIFBhZ2luYXRpb25QYXJhbXMge1xuICBzaXplPzogc3RyaW5nO1xuICBwYWdlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU29ydGluZ1BhcmFtcyB7XG4gIHNvcnRGaWVsZDogc3RyaW5nIHwgbnVtYmVyO1xuICBzb3J0RGlyPzogXCJhc2NcIiB8IFwiZGVzY1wiO1xufVxuXG5pbnRlcmZhY2UgQ29udGVudFBhcmFtcyB7XG4gIG9udG9sb2d5SWQ/OiBzdHJpbmc7XG4gIHRlcm1Jcmk/OiBzdHJpbmc7XG4gIHByb3BlcnR5SXJpPzogc3RyaW5nO1xuICBpbmRpdmlkdWFsSXJpPzogc3RyaW5nO1xuICBxdWVyeVN0cmluZz86IHN0cmluZztcblxufVxuXG5leHBvcnQgdHlwZSBhcGlDYWxsRm4gPSAocGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPGFueT47XG5cbmludGVyZmFjZSBTZWFyY2hRdWVyeVBhcmFtcyB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIGV4YWN0TWF0Y2g/OiBib29sZWFuO1xuICBzaG93T2Jzb2xldGVUZXJtcz86IGJvb2xlYW47XG4gIHR5cGVzPzogc3RyaW5nO1xuICBvbnRvbG9neT86IHN0cmluZztcbiAgZ3JvdXBCeUlyaT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBTZWxlY3RRdWVyeVBhcmFtcyB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTdWdnZXN0UXVlcnlQYXJhbXMge1xuICBxdWVyeTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSnNUcmVlUGFyYW1zIHtcbiAgdmlld01vZGU/OiBzdHJpbmc7XG4gIHNpYmxpbmdzPzogYm9vbGVhbjtcbiAgY2hpbGQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEpTVHJlZU5vZGUgPSB7XG4gIGlkOiBzdHJpbmdcbiAgcGFyZW50OiBzdHJpbmdcbiAgaXJpOiBzdHJpbmdcbiAgdGV4dDogc3RyaW5nXG4gIHN0YXRlOiB7XG4gICAgb3BlbmVkOiBib29sZWFuXG4gIH1cbiAgY2hpbGRyZW46IGJvb2xlYW5cbiAgYV9hdHRyOiB7XG4gICAgaXJpOiBzdHJpbmdcbiAgICBvbnRvbG9neV9uYW1lOiBzdHJpbmdcbiAgICB0aXRsZTogc3RyaW5nXG4gICAgY2xhc3M6IHN0cmluZ1xuICB9XG4gIG9udG9sb2d5X25hbWU6IHN0cmluZ1xufVxuXG5jb25zdCBERUZBVUxUX1NFQVJDSF9SRVNVTFRTX1BFUl9QQUdFID0gMTA7XG5cbmV4cG9ydCBjbGFzcyBPbHNBcGkgaW1wbGVtZW50cyBIaWVyYXJjaHlCdWlsZGVyIHtcbiAgcHJpdmF0ZSBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuXG4gIGNvbnN0cnVjdG9yKGFwaTogc3RyaW5nKSB7XG4gICAgdGhpcy5heGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IGFwaSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQ29udGVudF9UeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZykge1xuICAgIGlmIChzb3J0aW5nUGFyYW1zKSB7XG4gICAgICByZXR1cm4geyAuLi5wYWdpbmF0aW9uUGFyYW1zLCBzb3J0OiBgJHtzb3J0aW5nUGFyYW1zLnNvcnRGaWVsZH0sJHtzb3J0aW5nUGFyYW1zLnNvcnREaXJ9YCwgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcikgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgLi4ucGFnaW5hdGlvblBhcmFtcywgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcikgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICByb3dzOiBwYWdpbmF0aW9uUGFyYW1zPy5zaXplLFxuICAgIH07XG5cbiAgICBpZiAocGFnaW5hdGlvblBhcmFtcz8ucGFnZSkge1xuICAgICAgaWYgKHBhZ2luYXRpb25QYXJhbXMuc2l6ZSkge1xuICAgICAgICBwYXJhbXMuc3RhcnQgPSAoK3BhZ2luYXRpb25QYXJhbXMucGFnZSAqICtwYWdpbmF0aW9uUGFyYW1zLnNpemUpLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbXMuc3RhcnQgPSAoK3BhZ2luYXRpb25QYXJhbXMucGFnZSAqIERFRkFVTFRfU0VBUkNIX1JFU1VMVFNfUEVSX1BBR0UpLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXJhbXNGb3JTZWFyY2gocXVlcnlQYXJhbXM6IFNlYXJjaFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgdHM0bmZkaUdhdGV3YXk/OiBib29sZWFuKSB7XG5cbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIGV4YWN0OiBxdWVyeVBhcmFtcy5leGFjdE1hdGNoLFxuICAgICAgb2Jzb2xldGVzOiBxdWVyeVBhcmFtcy5zaG93T2Jzb2xldGVUZXJtcyxcbiAgICB9O1xuXG4gICAgaWYgKHRzNG5mZGlHYXRld2F5KSB7XG4gICAgICBwYXJhbXMucXVlcnkgPSBxdWVyeVBhcmFtcy5xdWVyeVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMucSA9IHF1ZXJ5UGFyYW1zLnF1ZXJ5XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLmdyb3VwQnlJcmkpIHtcbiAgICAgIHBhcmFtcy5ncm91cEZpZWxkID0gcXVlcnlQYXJhbXMuZ3JvdXBCeUlyaTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnlQYXJhbXMudHlwZXMpIHtcbiAgICAgIHBhcmFtcy50eXBlID0gcXVlcnlQYXJhbXMudHlwZXM7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLm9udG9sb2d5KSB7XG4gICAgICBwYXJhbXMub250b2xvZ3kgPSBxdWVyeVBhcmFtcy5vbnRvbG9neTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIC4uLnRoaXMuYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXMpLCAuLi5jb250ZW50UGFyYW1zLCAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIGZvciBjcmVhdGluZyBhbiBvYmplY3QgZnJvbSBzdHJpbmcgb2YgcGFyYW1ldGVycyBmb3IgYXhpb3MgaW5wdXQgcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXI/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmIChwYXJhbWV0ZXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtc1NwbGl0dGVkID0gcGFyYW1ldGVyLnNwbGl0KFwiJlwiKVxuXG4gICAgICBwYXJhbXNTcGxpdHRlZC5mb3JFYWNoKChwYXJhbTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gcGFyYW0uc3BsaXQoXCI9XCIpWzBdXG4gICAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgPSBwYXJhbS5zcGxpdChcIj1cIilbMV1cbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclNlbGVjdChxdWVyeVBhcmFtczogU3VnZ2VzdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcnM/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIHE6IHF1ZXJ5UGFyYW1zLnF1ZXJ5LFxuICAgIH07XG5cbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIC4uLnRoaXMuYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXMpLCAuLi5jb250ZW50UGFyYW1zLCAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVycykgfTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclN1Z2dlc3QocXVlcnlQYXJhbXM6IFN1Z2dlc3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXJzPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBxOiBxdWVyeVBhcmFtcy5xdWVyeSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCAuLi50aGlzLmJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zKSwgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcnMpIH07XG4gIH1cblxuICAvLyBUT0RPOiBJcyB0aGlzIHRoZSBiZWhhdmlvciB3ZSB3YW50IChlc3BlY2lhbGx5IHRocm93aW5nIGVycm9yIGZvciBlbXB0eSByZXNwb25zZSk/XG4gIHByaXZhdGUgY2hlY2tfZm9yX2Vycm9ycyhyZXNwb25zZTogYW55KTogYW55IHtcbiAgICAvLyByZXNvdXJjZSBub3QgZm91bmQvaWxsZWdhbCBhcmd1bWVudCBleGNlcHRpb24gaW4gc2VtYW50aWNsb29rdXBcbiAgICBpZiAocmVzcG9uc2VbXCJlcnJvclwiXSkge1xuICAgICAgdGhyb3cgRXJyb3IocmVzcG9uc2VbXCJzdGF0dXNcIl0gKyBcIiBcIiArIHJlc3BvbnNlW1wiZXJyb3JcIl0gKyBcIiAtIFwiICsgcmVzcG9uc2VbXCJtZXNzYWdlXCJdICsgXCIgLSBcIiArIHJlc3BvbnNlW1wiZXhjZXB0aW9uXCJdICsgXCIgYXQgXCIgKyByZXNwb25zZVtcInBhdGhcIl0pO1xuICAgIH1cbiAgICAvLyBlbXB0eSByZXNwb25zZSAtIGNhbiBiZSBjYXVnaHQgaWYgdGhpcyBpcyBleHBlY3RlZCwgZS5nLiBmb3IgZmV0Y2hpbmcgaW5zdGFuY2VzXG4gICAgaWYgKHJlc3BvbnNlW1wicGFnZVwiXSAhPT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlW1wicGFnZVwiXVtcInRvdGFsRWxlbWVudHNcIl0gPT09IDApIHtcbiAgICAgIHRocm93IEVycm9yKFwiUmVzcG9uc2UgY29udGFpbnMgMCBlbGVtZW50c1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtYWtlQ2FsbCh1cmw6IHN0cmluZywgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiB8IHVuZGVmaW5lZCwgdXNlTGVnYWN5OiBib29sZWFuKSB7XG4gICAgY29uc3QgYXBpVmVyc2lvblByZWZpeCA9IGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJcIiA6IFwidjIvXCI7XG4gICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChhcGlWZXJzaW9uUHJlZml4ICsgdXJsLCBjb25maWcpKS5kYXRhO1xuICAgIHJldHVybiB0aGlzLmNoZWNrX2Zvcl9lcnJvcnMocmVzcG9uc2UpO1xuICB9XG5cbiAgcHVibGljIGdldE9udG9sb2dpZXM6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcIm9udG9sb2dpZXNcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbGwgb250b2xvZ2llcy4gQ3VycmVudGx5IG9ubHkgYXZhaWxhYmxlIGZvciB1c2VMZWdhY3kgc2luY2UgcGFyYW1ldGVycyBhcmVuJ3QgYWxsb3dlZCBpbiB0aGUgT0xTIHYyIEFQSSBvbnRvbG9naWVzIGVuZHBvaW50XG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRPbnRvbG9naWVzRGF0YShwYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPE9udG9sb2dpZXM+IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgbGV0IG9udG9sb2dpZXNEYXRhOiBPTFMzT250b2xvZ3lbXSA9IFtdO1xuXG4gICAgbGV0IHBhZ2VOdW0gPSAwO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gNTAwO1xuXG4gICAgZG8ge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2dpZXMoeyBzaXplOiBwYWdlU2l6ZS50b1N0cmluZygpLCBwYWdlOiBwYWdlTnVtLnRvU3RyaW5nKCkgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHBhcmFtZXRlcik7IC8vIGFzc3VtaW5nIHRoZXJlIGFyZSBubyBtb3JlIHRoYW4gNTAwIG9udG9sb2dpZXNcbiAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdIHx8ICFyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcIm9udG9sb2dpZXNcIl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT250b2xvZ2llcyBkYXRhIG5vdCBmb3VuZFwiKTsgLy9UT0RPIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgb250b2xvZ2llc0RhdGEgPSBvbnRvbG9naWVzRGF0YS5jb25jYXQocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJvbnRvbG9naWVzXCJdLm1hcCgob250b2xvZ3lEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3Qob250b2xvZ3lEYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBwYWdlTnVtICs9IDE7XG4gICAgfSB3aGlsZSAocGFnZU51bSA8IHJlc3BvbnNlW1wicGFnZVwiXVtcInRvdGFsUGFnZXNcIl0pO1xuXG4gICAgcmV0dXJuIG5ldyBPTFMzT250b2xvZ2llcyhvbnRvbG9naWVzRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhbGwgdGVybXMgZnJvbSB0aGUgYXBpXG4gICAqIEBwYXJhbSBwYWdpbmF0aW9uUGFyYW1zXG4gICAqIEBwYXJhbSBzb3J0aW5nUGFyYW1zXG4gICAqIEBwYXJhbSBjb250ZW50UGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIGB1c2VMZWdhY3lgIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYHVzZUxlZ2FjeWAsIGBcInRlcm1zXCJgIChgdXNlTGVnYWN5ID09IHRydWVgKSBvciBgXCJjbGFzc2VzXCJgIChgdXNlTGVnYWN5ID09IGZhbHNlYCkgd2lsbCBiZSB1c2VkIGluIHRoZSBxdWVyeSB1cmxcbiAgICovXG4gIHB1YmxpYyBnZXRUZXJtczogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHR5cGVQcmVmaXggPSBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwidGVybXNcIiA6IFwiY2xhc3Nlc1wiO1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKHR5cGVQcmVmaXgsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMpIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcm9wZXJ0aWVzOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJwcm9wZXJ0aWVzXCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMpIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbmRpdmlkdWFsczogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwiaW5kaXZpZHVhbHNcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcykgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgcHVibGljIGdldE9udG9sb2d5OiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcilcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwib250b2xvZ2llcy9cIiArIGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQsIHBhcmFtcywgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYW4gZW50aXR5IGZyb20gdGhlIC9lbnRpdGllcyBlbmRwb2ludCBpbiB0aGUgYXBpIGluIG9sczQuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldEVudGl0eTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIiArIGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgKyBcIi9cIiA6IFwiXCJcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LnRlcm1JcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwocXVlcnlQcmVmaXggKyBcImVudGl0aWVzXCIsIHsgcGFyYW1zOiBwYXJhbXMgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYSB0ZXJtIGZyb20gdGhlIGFwaVxuICAgKiBAcGFyYW0gcGFnaW5hdGlvblBhcmFtc1xuICAgKiBAcGFyYW0gc29ydGluZ1BhcmFtc1xuICAgKiBAcGFyYW0gYGNvbnRlbnRQYXJhbXNgIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGBjb250ZW50UGFyYW1zYCB0byBiZSBzZXQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3kuXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIGB1c2VMZWdhY3lgIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYHVzZUxlZ2FjeWAsIGBcInRlcm1zXCJgIChgdXNlTGVnYWN5ID09IHRydWVgKSBvciBgXCJjbGFzc2VzXCJgIChgdXNlTGVnYWN5ID09IGZhbHNlYCkgd2lsbCBiZSB1c2VkIGluIHRoZSBxdWVyeSB1cmxcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbiwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4ge1xuICAgIGNvbnN0IG9udG9sb2d5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIiArIGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgKyBcIi9cIiA6IFwiXCJcbiAgICBjb25zdCB0eXBlUHJlZml4ID0gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1zXCIgOiBcImNsYXNzZXNcIjtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LnRlcm1JcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwob250b2xvZ3lQcmVmaXggKyB0eXBlUHJlZml4LCB7IHBhcmFtczogcGFyYW1zLCBzaWduYWw6IGFib3J0U2lnbmFsIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGEgcHJvcGVydHkgZnJvbSB0aGUgYXBpIGluIG9sczMuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldFByb3BlcnR5OiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiB7XG4gICAgY29uc3QgcXVlcnlQcmVmaXggPSBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkID8gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL1wiIDogXCJcIlxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGlyaTogY29udGVudFBhcmFtcz8ucHJvcGVydHlJcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwocXVlcnlQcmVmaXggKyBcInByb3BlcnRpZXNcIiwgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhbiBpbmRpdmlkdWFsIGZyb20gdGhlIGFwaSBpbiBvbHMzLlxuICAgKiBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBjb250ZW50UGFyYW1zIHRvIGJlIHNldFxuICAgKiBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzXG4gICAqIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3lcbiAgICovXG4gIHB1YmxpYyBnZXRJbmRpdmlkdWFsOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiB7XG4gICAgY29uc3QgcXVlcnlQcmVmaXggPSBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkID8gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL1wiIDogXCJcIlxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGlyaTogY29udGVudFBhcmFtcz8uaW5kaXZpZHVhbElyaSxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChxdWVyeVByZWZpeCArIFwiaW5kaXZpZHVhbHNcIiwgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoID0gYXN5bmMgKHF1ZXJ5UGFyYW1zOiBTZWFyY2hRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtczogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJzZWFyY2hcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTZWFyY2gocXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciksIHNpZ25hbDogYWJvcnRTaWduYWwgfSwgdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0ID0gYXN5bmMgKHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwic2VsZWN0XCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU2VsZWN0KHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpIH0sIHRydWUpO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaFRzNG5mZGlHYXRld2F5ID0gYXN5bmMgKHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHRzNG5mZGlHYXRld2F5PzogYm9vbGVhbik6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJzZWFyY2hcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTZWFyY2gocXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdHM0bmZkaUdhdGV3YXkpIH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHNlbGVjdCBkYXRhLlxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXNcbiAgICogQHBhcmFtIHBhZ2luYXRpb25QYXJhbXNcbiAgICogQHBhcmFtIGNvbnRlbnRQYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFNlbGVjdERhdGEocXVlcnlQYXJhbXM6IFNlbGVjdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgdHM0bmZkaUdhdGV3YXk/OiBib29sZWFuKTogUHJvbWlzZTxTZWxlY3Q+IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgbGV0IHNlbGVjdERhdGE6IE9MU1NlbGVjdFJlc3VsdFtdID0gW107XG4gICAgbGV0IHJlc3VsdE51bSA9IDA7XG5cbiAgICBpZiAodHM0bmZkaUdhdGV3YXkpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZWFyY2hUczRuZmRpR2F0ZXdheShcbiAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAgIGNvbnRlbnRQYXJhbXMsXG4gICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgdHM0bmZkaUdhdGV3YXlcbiAgICAgICk7XG4gICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGVjdCBkYXRhIG5vdCBmb3VuZFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdERhdGEgPSBzZWxlY3REYXRhLmNvbmNhdChyZXNwb25zZS5tYXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgVHM0bmZkaVNlYXJjaFJlc3VsdChkYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZWxlY3QoXG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgICBjb250ZW50UGFyYW1zLFxuICAgICAgICBwYXJhbWV0ZXJcbiAgICAgICk7XG4gICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZVtcInJlc3BvbnNlXCJdW1wiZG9jc1wiXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWxlY3QgZGF0YSBub3QgZm91bmRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3REYXRhID0gc2VsZWN0RGF0YS5jb25jYXQocmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcImRvY3NcIl0ubWFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9MU1NlbGVjdFJlc3VsdChkYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT0xTU2VsZWN0KHNlbGVjdERhdGEpO1xuICB9XG5cblxuXG4gIHB1YmxpYyBzdWdnZXN0ID0gYXN5bmMgKHF1ZXJ5UGFyYW1zOiBTdWdnZXN0UXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcInN1Z2dlc3RcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTdWdnZXN0KHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpIH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldFRlcm1UcmVlOlxuICAgKiBUaGlzIG1ldGhvZCBhbHdheXMgcmVxdWlyZXMgYW4gb250b2xvZ3lJZCBpbiBjb250ZW50UGFyYW1zXG4gICAqIDEpIElmIG5vIHRlcm1JcmkgaXMgZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb250b2xvZ3kgcm9vdHMgd2lsbCBiZSBxdWVyaWVkXG4gICAqIDIpIElmIGEgdGVybUlyaSBpcyBkZWZpbmVkIGJ1dCBubyBjaGlsZCBpbiBqc1RyZWVQYXJhbXMsIHRoZSBoaWVyYXJjaHkgY29udGFpbmluZyB0aGF0IHRlcm0gd2lsbCBiZSBxdWVyaWVkXG4gICAqIDMpIElmIGEgdGVybUlyaSBpcyBkZWZpbmVkIGFuZCBhbHNvIGEgY2hpbGQgaW4ganNUcmVlUGFyYW1zLCB0aGUgc3ViaGllcmFyY2h5IG9mIHRoYXQgY2hpbGQgd2lsbCBiZSBxdWVyaWVkXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybVRyZWUgPSBhc3luYyAoY29udGVudFBhcmFtczogQ29udGVudFBhcmFtcywgdHJlZVBhcmFtczogSnNUcmVlUGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcz86IFNvcnRpbmdQYXJhbXMpID0+IHtcbiAgICBsZXQgYmFzZVJlcXVlc3QgPSBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvdGVybXNcIlxuICAgIGlmICghY29udGVudFBhcmFtcy50ZXJtSXJpKSByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYmFzZVJlcXVlc3QgKyBcIi9yb290c1wiKSkuZGF0YTsgLy8xKVxuICAgIGJhc2VSZXF1ZXN0ID0gYmFzZVJlcXVlc3QgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoY29udGVudFBhcmFtcz8udGVybUlyaSkpICsgXCIvanN0cmVlXCJcbiAgICBpZiAodHJlZVBhcmFtcy5jaGlsZCkgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0ICsgXCIvY2hpbGRyZW4vXCIgKyB0cmVlUGFyYW1zLmNoaWxkKSkuZGF0YTsgLy8zKVxuICAgIGVsc2UgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0LCB7IHBhcmFtczogdHJlZVBhcmFtcyB9KSkuZGF0YTsgLy8yKVxuICB9XG5cbiAgcHVibGljIGdldFRlcm1SZWxhdGlvbnMgPSBhc3luYyAoY29udGVudFBhcmFtczogQ29udGVudFBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zKSA9PiB7XG4gICAgbGV0IGJhc2VSZXF1ZXN0ID0gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL3Rlcm1zXCJcbiAgICBpZiAoIWNvbnRlbnRQYXJhbXMudGVybUlyaSkgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0ICsgXCIvcm9vdHNcIikpLmRhdGE7IC8vMSlcbiAgICBiYXNlUmVxdWVzdCA9IGJhc2VSZXF1ZXN0ICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnRQYXJhbXM/LnRlcm1JcmkpKSArIFwiL2dyYXBoXCI7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0KSkuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3aG9sZSBlbnRpdHkgcmVzcG9uc2UganNvbiB3aXRoIGEgY29tZm9ydGFibGUgd3JhcHBlciBoYW5kbGluZyBlbnRpdHlUeXBlLCBvbnRvbG9neUlkIGFuZCB1c2VMZWdhY3lcbiAgICogQHBhcmFtIGlyaVxuICAgKiBAcGFyYW0gZW50aXR5VHlwZSBxdWVyaWVzIHNwZWNpZmljIHJvdXRlcyBpZiBwcm92aWRlZCBhbmQgaW5mZXJzIHR5cGUgaWYgbm90XG4gICAqIEBwYXJhbSBvbnRvbG9neUlkIHF1ZXJpZXMgb250b2xvZ3kgcm91dGVzIGlmIHByb3ZpZGVkLCBvdGhlcndpc2Ugbm90XG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIHVzZUxlZ2FjeSBhZmZlY3RzIGhvdyBlbnRpdHlUeXBlIGlzIGluZmVycmVkIGlmIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEVudGl0eVJlc3BvbnNlKGlyaTogc3RyaW5nLCBlbnRpdHlUeXBlPzogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGlmICghaXJpKSB0aHJvdyBFcnJvcignTm8gSVJJIHByb3ZpZGVkJyk7XG5cbiAgICBpZiAoZW50aXR5VHlwZSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEVudGl0eVdpdGhFbnRpdHlUeXBlUHJvdmlkZWQoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRFbnRpdHlXaXRoSW5mZXJyZWRFbnRpdHlUeXBlKGlyaSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0RW50aXR5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaSB9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gRW50aXR5IG9iamVjdCAoaW1wbGVtZW50aW5nICdDbGFzcycsICdQcm9wZXJ0eScgb3IgJ0luZGl2aWR1YWwnKS5cbiAgICogSW5kaXJlY3RseSBmZXRjaGVzIHRoZSByZXNwb25zZSBKU09OIGZvciB0aGUgc3BlY2lmaWVkIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyIGFuZCBBUEkgdmVyc2lvbiAodXNlTGVnYWN5KS5cbiAgICpcbiAgICogQHBhcmFtIGVudGl0eVR5cGVcbiAgICogQHBhcmFtIGlyaVxuICAgKiBAcGFyYW0gb250b2xvZ3lJZFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB1c2VMZWdhY3lcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRFbnRpdHlPYmplY3QoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZD86IHN0cmluZywgcGFyYW1ldGVyPzogc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuKTogUHJvbWlzZTxFbnRpdHk+IHtcbiAgICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3QoYXdhaXQgdGhpcy5nZXRFbnRpdHlSZXNwb25zZShpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KSkgYXMgRW50aXR5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gT250b2xvZ3kgb2JqZWN0LlxuICAgKiBJbmRpcmVjdGx5IGZldGNoZXMgdGhlIHJlc3BvbnNlIEpTT04gZm9yIHRoZSBzcGVjaWZpZWQgb250b2xvZ3lJZCwgcGFyYW1ldGVyIGFuZCBBUEkgdmVyc2lvbiAodXNlTGVnYWN5KS5cbiAgICpcbiAgICogQHBhcmFtIG9udG9sb2d5SWRcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gdXNlTGVnYWN5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZDogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pOiBQcm9taXNlPE9udG9sb2d5PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2d5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQgfSwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuXG4gICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KHJlc3BvbnNlKSBhcyBPbnRvbG9neTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUaGluZ09iamVjdChpcmk/OiBzdHJpbmcsIHRoaW5nVHlwZT86IFRoaW5nVHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFByb21pc2U8VGhpbmc+IHtcbiAgICBpZiAodGhpbmdUeXBlKSB7XG4gICAgICBpZiAoaXNPbnRvbG9neVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYgKCFvbnRvbG9neUlkKSB0aHJvdyBuZXcgRXJyb3IoYG9udG9sb2d5SWQgaGFzIHRvIGJlIHByb3ZpZGVkIGlmIHRoaW5nVHlwZSBpbiB7XCIke29udG9sb2d5VHlwZU5hbWVzLmpvaW4oJ1wiLCBcIicpfVwifS5gKTtcbiAgICAgICAgZWxzZSByZXR1cm4gYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0VudGl0eVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYgKCFpcmkpIHRocm93IG5ldyBFcnJvcihgaXJpIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaW4ge1wiJHtlbnRpdHlUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgICAgICBlbHNlIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHRoaW5nVHlwZSBcIiR7dGhpbmdUeXBlfVwiIHByb3ZpZGVkLiBNdXN0IGJlIGluIHtcIiR7dGhpbmdUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmICghaXJpICYmIG9udG9sb2d5SWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXJpKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYGlyaSBvciBvbnRvbG9neUlkIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaXMgbm90IHByb3ZpZGVkLmApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RW50aXR5V2l0aEVudGl0eVR5cGVQcm92aWRlZChpcmk6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgc3dpdGNoIChlbnRpdHlUeXBlKSB7XG4gICAgICBjYXNlICd0ZXJtJzogY2FzZSAnY2xhc3MnOiAvLyBhbHNvIGFsbG93IFwiY2xhc3NcIiBldmVuIGlmIGl0IHNob3VsZCBhY3R1YWxseSBiZSBcInRlcm1cIlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRUZXJtKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaSB9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG5cbiAgICAgIGNhc2UgJ3Byb3BlcnR5JzogY2FzZSAnYW5ub3RhdGlvblByb3BlcnR5JzogY2FzZSAnZGF0YVByb3BlcnR5JzogY2FzZSAnb2JqZWN0UHJvcGVydHknOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRQcm9wZXJ0eSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBwcm9wZXJ0eUlyaTogaXJpIH0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgICAgY2FzZSAnaW5kaXZpZHVhbCc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEluZGl2aWR1YWwodW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgaW5kaXZpZHVhbElyaTogaXJpIH0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgZW50aXR5IHR5cGUgXCInICsgZW50aXR5VHlwZSArIGBcIi4gTXVzdCBiZSBvbmUgb2YgeyR7ZW50aXR5VHlwZU5hbWVzLm1hcCgoZWxlbSkgPT4gYFwiJHtlbGVtfVwiYCkuam9pbihcIiwgXCIpfX0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlXaXRoSW5mZXJyZWRFbnRpdHlUeXBlKGlyaTogc3RyaW5nLCBvbnRvbG9neUlkPzogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIC8qXG4gICAgICAgICAgICBUZXN0IGFsbCB0eXBlcyBvZiBlbnRpdGllcyAodGVybSwgcHJvcGVydHksIGluZGl2aWR1YWwpIG1hbnVhbGx5IHdpdGggc2VwYXJhdGUgcXVlcmllcyAoYXMgL2VudGl0aWVzIGRvZXMgbm90IGV4aXN0IGZvciBsZWdhY3kgQVBJKVxuICAgICAgICAgICAgLT4gcmV0dXJuIHRoZSByZXNwb25zZSBvYmplY3Qgd2hpY2ggcmVzb2x2ZXMgd2l0aCBhIGNvbnRhaW5lZCBlbnRpdHlcbiAgICAgICAgICAgIC0+IHRocm93IGVycm9yIGlmIG5vbmUgb2YgdGhlIHR5cGVzIGNvbnRhaW5zIGFuIGVudGl0eVxuICAgICAgICAgICovXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBzaWduYWwgPSBjb250cm9sbGVyLnNpZ25hbDtcblxuICAgIGxldCByZXNwb25zZTsgLy8gc3RvcmVzIHRoZSBlbnRpdHkgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIGVuZFxuXG4gICAgZnVuY3Rpb24gc2V0QW5kU3RvcChyZXM6IGFueSkge1xuICAgICAgaWYgKHJlc1tcIl9lbWJlZGRlZFwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3BvbnNlID0gcmVzO1xuICAgICAgICBjb250cm9sbGVyLmFib3J0KCk7IC8vIGFib3J0IHF1ZXJpZXMgZm9yIG90aGVyIGVudGl0eVR5cGVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgW1xuICAgICAgICB0aGlzLmdldFRlcm0odW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogaXJpIH0sIHBhcmFtZXRlciwgdHJ1ZSwgc2lnbmFsKVxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4geyBzZXRBbmRTdG9wKHJlcykgfSksXG4gICAgICAgIHRoaXMuZ2V0UHJvcGVydHkodW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgcHJvcGVydHlJcmk6IGlyaSB9LCBwYXJhbWV0ZXIsIHRydWUsIHNpZ25hbClcbiAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHsgc2V0QW5kU3RvcChyZXMpIH0pLFxuICAgICAgICB0aGlzLmdldEluZGl2aWR1YWwodW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgaW5kaXZpZHVhbElyaTogaXJpIH0sIHBhcmFtZXRlciwgdHJ1ZSwgc2lnbmFsKVxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4geyBzZXRBbmRTdG9wKHJlcykgfSlcbiAgICAgIF1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHJldHVybiByZXNwb25zZTtcbiAgICBlbHNlIHRocm93IEVycm9yKFwiSXJpIFwiICsgaXJpICsgXCIgY291bGQgbm90IGJlIHJlc29sdmVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBbmNlc3RvcnMoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBvbnRvbG9neUlkOiBzdHJpbmcsIHVzZUxlZ2FjeSA9IGZhbHNlLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IGZhbHNlKTogUHJvbWlzZTxFbnRpdHlbXT4ge1xuICAgIGxldCBhbmNlc3RvcnM6IGFueTtcbiAgICBpZiAoaXNDbGFzc1R5cGVOYW1lKGVudGl0eVR5cGUpKSB7XG4gICAgICBhbmNlc3RvcnMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpLCB1c2VMZWdhY3kpfS9oaWVyYXJjaGljYWxBbmNlc3RvcnNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBhbmNlc3RvcnMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpLCB1c2VMZWdhY3kpfS9hbmNlc3RvcnNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgbGV0IGxpc3RPZkFuY2VzdG9yT2JqOiBBcnJheTxFbnRpdHk+ID0gW107XG4gICAgICBsZXQgZXh0cmFjdEtleSA9IFwiXCI7XG4gICAgICBzd2l0Y2ggKGVudGl0eVR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNsYXNzXCIgfHwgXCJ0ZXJtXCI6XG4gICAgICAgICAgZXh0cmFjdEtleSA9IFwidGVybXNcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICAgICAgZXh0cmFjdEtleSA9IFwicHJvcGVydGllc1wiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICAgIGV4dHJhY3RLZXkgPSBcImluZGl2aWR1YWxzXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJFbnRpdHkgdHlwZSBjb3VsZCBub3QgYmUgY29ycmVjdGx5IGluZmVycmVkLlwiKTtcbiAgICAgIH1cbiAgICAgIGFuY2VzdG9yc1tcIl9lbWJlZGRlZFwiXVtleHRyYWN0S2V5XS5tYXAoKG9iajogYW55KSA9PiB7XG4gICAgICAgIGxpc3RPZkFuY2VzdG9yT2JqLnB1c2goY3JlYXRlTW9kZWxPYmplY3QoeyBfZW1iZWRkZWQ6IHsgW2V4dHJhY3RLZXldOiBbb2JqXSB9IH0pIGFzIEVudGl0eSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBsaXN0T2ZBbmNlc3Rvck9iajtcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9yc1tcImVsZW1lbnRzXCJdLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICBjcmVhdGVNb2RlbE9iamVjdCh7IGVsZW1lbnRzOiBbb2JqXSB9KSBhcyBFbnRpdHlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEpTVHJlZShpcmk6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ6IHN0cmluZyk6IFByb21pc2U8SlNUcmVlTm9kZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBpcmksIHRydWUpfS9qc3RyZWVgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiB9IH0sIHRydWUpO1xuICB9XG5cbiAgLy8gVE9ETzogRG8gd2Ugd2FudCB0aGUgc2FtZSBiZWhhdmlvciBhcyBFTUJMIEVCSSAoZS5nLiBub3QgZ2V0dGluZyBpbnN0YW5jZXMgZm9yIGNsYXNzZXMgaWYgZW50aXR5VHlwZSAhPSBcImluZGl2aWR1YWxcIik/XG4gIHB1YmxpYyBhc3luYyBnZXRDaGlsZHJlbihpcmk6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ6IHN0cmluZywgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBmYWxzZSwgdXNlTGVnYWN5ID0gZmFsc2UpOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgbGV0IGNoaWxkcmVuOiBhbnk7XG4gICAgaWYgKGlzQ2xhc3NUeXBlTmFtZShlbnRpdHlUeXBlKSkge1xuICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgY2xhc3NUeXBlTmFtZXNbMF0sIGlyaSwgdXNlTGVnYWN5KX0vaGllcmFyY2hpY2FsQ2hpbGRyZW5gLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNJbmRpdmlkdWFsVHlwZU5hbWUoZW50aXR5VHlwZSkpIHtcbiAgICAgIC8vIGVudGl0eVR5cGUgZG9lcyBOT1QgaW5kaWNhdGUgd2hpY2ggdHlwZSB0aGUgZW50aXR5IG9mIHRoZSBwcm92aWRlZCBpcmkgaGFzLCBidXQgd2hpY2ggdHlwZSBvZiBoaWVyYXJjaHkgaXMgZGVzaXJlZFxuICAgICAgLy8gLT4gXCJjbGFzc1wiIGhhcyB0byBiZSBwcm92aWRlZCBmb3IgaW5kaXZpZHVhbCBoaWVyYXJjaHkgYXMgd2VsbCwgYXMgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBjaGlsZHJlbiBvZiBjbGFzc2VzXG4gICAgICBpZiAodXNlTGVnYWN5KSB7XG4gICAgICAgIC8vIFRPRE86IERvZXMgZGVzY2VuZGFudHMgYWx3YXlzIHdvcmsgZm9yIHRoaXMgKG9yIGFyZSB0aGVyZSBjbGFzc2VzIHdpdGggYm90aCBpbmRpdmlkdWFscyBhbmQgY2xhc3NlcyBhcyBkZXNjZW5kYW50cyk/XG4gICAgICAgIGNoaWxkcmVuID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGNsYXNzVHlwZU5hbWVzWzBdLCBpcmksIHVzZUxlZ2FjeSl9L2Rlc2NlbmRhbnRzYCwgeyBwYXJhbXM6IHsgc2l6ZTogXCIxMDAwXCIgfSB9LCB1c2VMZWdhY3kpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgY2xhc3NUeXBlTmFtZXNbMF0sIGlyaSwgdXNlTGVnYWN5KX0vaW5zdGFuY2VzYCwgeyBwYXJhbXM6IHsgc2l6ZTogXCIxMDAwXCIsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyB9IH0sIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpLCB1c2VMZWdhY3kpfS9jaGlsZHJlbmAsIHsgcGFyYW1zOiB7IHNpemU6IFwiMTAwMFwiLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgfSB9LCB1c2VMZWdhY3kpO1xuICAgIH1cblxuICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbltcIl9lbWJlZGRlZFwiXVtpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSA/IHBsdXJhbGl6ZVR5cGUoY2xhc3NUeXBlTmFtZXNbMF0sIHVzZUxlZ2FjeSkgOiBwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIHVzZUxlZ2FjeSldLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHsgW1wiX2VtYmVkZGVkXCJdOiB7IFtpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSA/IHBsdXJhbGl6ZVR5cGUoY2xhc3NUeXBlTmFtZXNbMF0sIHVzZUxlZ2FjeSkgOiBwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUpXTogW29ial0gfSB9KSBhcyBFbnRpdHlcbiAgICAgICk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuW1wiZWxlbWVudHNcIl0ubWFwKChvYmo6IGFueSkgPT5cbiAgICAgICAgY3JlYXRlTW9kZWxPYmplY3QoeyBlbGVtZW50czogW29ial0gfSkgYXMgRW50aXR5XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSb290RW50aXRpZXMoZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ6IHN0cmluZywgcHJlZmVycmVkUm9vdHMgPSBmYWxzZSwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBmYWxzZSwgdXNlTGVnYWN5ID0gZmFsc2UpOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgaWYgKGlzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUpKSB7XG4gICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBiZWhhdmlvdXIgZm9yIGluZGl2aWR1YWxzXG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiAvcHJlZmVycmVkUm9vdHMgcm91dGUgc2hvdWxkIGV4aXN0IGluIGxlZ2FjeSBhcGksIGJ1dCBkb2VzIG5vdCB3b3JrXG4gICAgICAgIGNvbnN0IHJvb3RzID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHVuZGVmaW5lZCwgdXNlTGVnYWN5KX0vcm9vdHNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcblxuICAgICAgICByZXR1cm4gcm9vdHNbXCJfZW1iZWRkZWRcIl1bcGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCB1c2VMZWdhY3kpXS5tYXAoKG9iajogYW55KSA9PlxuICAgICAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHsgW1wiX2VtYmVkZGVkXCJdOiB7IFtwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIHVzZUxlZ2FjeSldOiBbb2JqXSB9IH0pIGFzIEVudGl0eVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSkge1xuICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsc1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm9vdHMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgdW5kZWZpbmVkLCB1c2VMZWdhY3kpfWAsIHsgcGFyYW1zOiB7IHNpemU6IFwiMTAwMFwiLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsIGhhc0RpcmVjdFBhcmVudHM6IHByZWZlcnJlZFJvb3RzID8gdW5kZWZpbmVkIDogXCJmYWxzZVwiLCBpc1ByZWZlcnJlZFJvb3Q6IHByZWZlcnJlZFJvb3RzID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQgfSB9LCB1c2VMZWdhY3kpO1xuXG4gICAgICAgIHJldHVybiByb290c1tcImVsZW1lbnRzXCJdLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICAgICAgY3JlYXRlTW9kZWxPYmplY3QoeyBlbGVtZW50czogW29ial0gfSkgYXMgRW50aXR5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENsYXNzSW5zdGFuY2VzKGlyaTogc3RyaW5nLCBvbnRvbG9neUlkOiBzdHJpbmcpOiBQcm9taXNlPEluZGl2aWR1YWxbXT4ge1xuICAgIGNvbnN0IGluc3RhbmNlcyA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBjbGFzc1R5cGVOYW1lc1swXSwgaXJpLCBmYWxzZSl9L2luZGl2aWR1YWxzYCwgeyBwYXJhbXM6IHsgc2l6ZTogXCIxMDAwXCIgfSB9LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gaW5zdGFuY2VzW1wiZWxlbWVudHNcIl0ubWFwKChvYmo6IGFueSkgPT5cbiAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHsgZWxlbWVudHM6IFtvYmpdIH0pIGFzIEluZGl2aWR1YWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkSGllcmFyY2h5V2l0aElyaShwcm9wczogQnVpbGRIaWVyYXJjaHlQcm9wcyAmIEhpZXJhcmNoeUlyaVByb3ApOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGlyaSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgcHJlZmVycmVkUm9vdHMgPSBmYWxzZSxcbiAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gZmFsc2UsXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzID0gdHJ1ZSxcbiAgICAgIHNob3dTaWJsaW5nc09uSW5pdCA9IGZhbHNlLFxuICAgICAgdXNlTGVnYWN5ID0gZmFsc2UsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgaWYgKGlyaSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgXCJcIiwgdXNlTGVnYWN5KS50aGVuKChlbnRpdHkpID0+IHRoaXMuYnVpbGRIaWVyYXJjaHlXaXRoRW50aXR5KHtcbiAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSB8fCBlbnRpdHkuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lLFxuICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkIHx8IGVudGl0eS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgcHJlZmVycmVkUm9vdHM6IHByZWZlcnJlZFJvb3RzLFxuICAgICAgICBtYWluRW50aXR5OiBlbnRpdHksXG4gICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgIHNob3dTaWJsaW5nc09uSW5pdDogc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAoZW50aXR5VHlwZSA9PSB1bmRlZmluZWQgfHwgb250b2xvZ3lJZCA9PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRWl0aGVyIGlyaSBvciBvbnRvbG9neUlkIGFuZCBlbnRpdHlUeXBlIGhhdmUgdG8gYmUgcHJvdmlkZWQuXCIpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYnVpbGRSb290SGllcmFyY2h5KHtcbiAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICBwcmVmZXJyZWRSb290czogcHJlZmVycmVkUm9vdHMsXG4gICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgIHNob3dTaWJsaW5nc09uSW5pdDogc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBqc1RyZWVOb2RlVG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGpzVHJlZU5vZGU6IEpTVHJlZU5vZGUpOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXJpOiBqc1RyZWVOb2RlLmlyaSxcbiAgICAgIGxhYmVsOiBqc1RyZWVOb2RlLnRleHQsXG4gICAgICBoYXNDaGlsZHJlbjoganNUcmVlTm9kZS5jaGlsZHJlbiB8fCBqc1RyZWVOb2RlLnN0YXRlLm9wZW5lZCxcbiAgICAgIHBhcmVudHM6IFtdXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlbnRpdHlUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoZW50aXR5OiBFbnRpdHkpOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXJpOiBlbnRpdHkuZ2V0SXJpKCksXG4gICAgICBsYWJlbDogYXNBcnJheShlbnRpdHkuZ2V0TGFiZWwoKSlbMF0sXG4gICAgICBkZWZpbmVkQnk6IGVudGl0eS5nZXREZWZpbmVkQnkoKSxcbiAgICAgIGhhc0NoaWxkcmVuOiBlbnRpdHkuaGFzQ2hpbGRyZW4oKSxcbiAgICAgIG51bURlc2NlbmRhbnRzOiBlbnRpdHkuZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKSB8fCBlbnRpdHkuZ2V0TnVtRGVzY2VuZGFudHMoKSxcbiAgICAgIHBhcmVudHM6IGVudGl0eS5nZXRQYXJlbnRzKClcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkUm9vdEhpZXJhcmNoeShcbiAgICBwcm9wczoge1xuICAgICAgb250b2xvZ3lJZDogc3RyaW5nLFxuICAgICAgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsXG4gICAgfSAmIEJ1aWxkSGllcmFyY2h5UHJvcHNcbiAgKTogUHJvbWlzZTxIaWVyYXJjaHk+IHtcblxuICAgIGNvbnN0IHtcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgcHJlZmVycmVkUm9vdHMsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIHVzZUxlZ2FjeVxuICAgIH0gPSBwcm9wcztcblxuICAgIC8qIFFVRVJZIHJvb3QgZW50aXRpZXMgKi9cbiAgICBjb25zdCByb290RW50aXRpZXNEYXRhID0gKGF3YWl0IHRoaXMuZ2V0Um9vdEVudGl0aWVzKGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHByZWZlcnJlZFJvb3RzLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcywgdXNlTGVnYWN5KSlcbiAgICAgIC5tYXAoKGVudGl0eSkgPT4gdGhpcy5lbnRpdHlUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoZW50aXR5KSlcbiAgICAgIC5maWx0ZXIoKHJvb3QpID0+ICFpc1RvcChyb290LmlyaSkpO1xuICAgIC8qIC0tLSAqL1xuXG4gICAgLyogSU5JVElBTElaRSBlbnRpdGllc0RhdGEsIHBhcmVudENoaWxkUmVsYXRpb25zICovXG4gICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPigpO1xuICAgIGNvbnN0IGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4gPSBuZXcgTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4oKTtcbiAgICBmb3IgKGNvbnN0IGVudGl0eURhdGEgb2Ygcm9vdEVudGl0aWVzRGF0YSkge1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGVudGl0eURhdGEuaXJpLCBbXSk7IC8vIGluaXRpYWxpemUgd2l0aCBlbXB0eSBhcnJheVxuICAgICAgZW50aXRpZXNEYXRhLnNldChlbnRpdHlEYXRhLmlyaSwgZW50aXR5RGF0YSk7XG4gICAgfVxuICAgIC8qIC0tLSAqL1xuXG4gICAgcmV0dXJuIG5ldyBIaWVyYXJjaHkoe1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgZW50aXRpZXNEYXRhOiBlbnRpdGllc0RhdGEsXG4gICAgICBhbGxDaGlsZHJlblByZXNlbnQ6IG5ldyBTZXQoKSxcbiAgICAgIHJvb3RzOiByb290RW50aXRpZXNEYXRhLm1hcCgocm9vdCkgPT4gbmV3IFRyZWVOb2RlKHJvb3QpKS5zb3J0KChhLCBiKSA9PiAoYS5lbnRpdHlEYXRhLmxhYmVsIHx8IGEuZW50aXR5RGF0YS5pcmkpLmxvY2FsZUNvbXBhcmUoYi5lbnRpdHlEYXRhLmxhYmVsIHx8IGIuZW50aXR5RGF0YS5pcmkpKSxcbiAgICAgIGFwaTogbmV3IE9sc0FwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCkpLFxuICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYnVpbGRIaWVyYXJjaHlXaXRoRW50aXR5KFxuICAgIHByb3BzOiB7XG4gICAgICBtYWluRW50aXR5OiBFbnRpdHksXG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gICAgICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSxcbiAgICB9ICYgQnVpbGRIaWVyYXJjaHlQcm9wc1xuICApOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuXG4gICAgY29uc3Qge1xuICAgICAgbWFpbkVudGl0eSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgcHJlZmVycmVkUm9vdHMsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgIHVzZUxlZ2FjeVxuICAgIH0gPSBwcm9wcztcblxuICAgIC8qIExPQUQgYW5jZXN0b3JzICovXG4gICAgbGV0IGVudGl0aWVzOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5W10gPSBbXTtcblxuICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgIC8vIFRPRE86IEpTVHJlZSBzb21ldGltZXMgcmV0dXJucyBzbWFsbGVyIHRyZWVzIHRoYW4gd291bGQgYmUgcG9zc2libGUgdmlhIHF1ZXJ5aW5nIGhpZXJhcmNoaWNhbCBhbmNlc3RvcnMgYW5kIGFsbCBjaGlsZHJlbiBvZiB0aG9zZSAoZS5nLiBodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vVUJFUk9OXzIwMDE3NDcgLT4gc3RyYW5nZSBhbmQgbm90IHJlYWxseSB1c2VmdWwgaGllcmFyY2h5IGJlY2F1c2UgbWFueSBlbnRpdGllcyBhcmUgYm90aCBzaWJsaW5nIGFuZCBjaGlsZHJlbiBvZiBvdGhlciBlbnRpdGllcyAoaXMgaXQgd3JvbmcgdG8gdGFrZSBoaWVyYXJjaGljYWxQYXJlbnQgaW5zdGVhZCBvZiBkaXJlY3RQYXJlbnQgaW4gZW50aXR5VG9FbnRpdHlEYXRhVG9IaWVyYXJjaHk/IEVNQkwtRUJJIGRvZXMgaXQgbGlrZSB0aGF0IGFzIHdlbGwpKVxuICAgICAgLy8gICAgICAgUXVlc3Rpb246IFNob3VsZCB3ZSBwcmVmZXIgY29tcGxldGUgaGllcmFyY2hpZXMgKHF1ZXJ5IC9oaWVyYXJjaGljYWxBbmNlc3RvcnMgKyAvY2hpbGRyZW4gZm9yIGVhY2gpIG9yIHNsaW0gcXVlcmllcyAocXVlcnkgL2pzdHJlZSk/XG4gICAgICBjb25zdCBqc1RyZWUgPSBhd2FpdCB0aGlzLmdldEpTVHJlZShtYWluRW50aXR5LmdldElyaSgpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkKTtcbiAgICAgIGNvbnN0IGlkVG9Jcmk6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgY29uc3QgcGFyZW50czogTWFwPHN0cmluZywgU2V0PHN0cmluZz4+ID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuXG4gICAgICBmb3IgKGNvbnN0IGpzVHJlZU5vZGUgb2YganNUcmVlKSB7XG4gICAgICAgIGlkVG9Jcmkuc2V0KGpzVHJlZU5vZGUuaWQsIGpzVHJlZU5vZGUuaXJpKTtcbiAgICAgICAgcGFyZW50cy5zZXQoanNUcmVlTm9kZS5pcmksIG5ldyBTZXQ8c3RyaW5nPigpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBqc1RyZWVOb2RlIG9mIGpzVHJlZSkge1xuICAgICAgICBjb25zdCBwYXJBcnIgPSBwYXJlbnRzLmdldChqc1RyZWVOb2RlLmlyaSk7XG4gICAgICAgIGNvbnN0IHBhcklyaSA9IGlkVG9JcmkuZ2V0KGpzVHJlZU5vZGUucGFyZW50KTtcbiAgICAgICAgaWYgKHBhckFyciAhPSB1bmRlZmluZWQgJiYgcGFySXJpICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhckFyci5hZGQocGFySXJpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlbnRpdGllcyA9IFtdO1xuICAgICAgY29uc3QgaW5BcnIgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgZm9yIChjb25zdCBqc1RyZWVOb2RlIG9mIGpzVHJlZSkge1xuICAgICAgICBpZiAoIWluQXJyLmhhcyhqc1RyZWVOb2RlLmlyaSkpIHtcbiAgICAgICAgICBpbkFyci5hZGQoanNUcmVlTm9kZS5pcmkpO1xuXG4gICAgICAgICAgZW50aXRpZXMucHVzaCh0aGlzLmpzVHJlZU5vZGVUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoanNUcmVlTm9kZSkpO1xuICAgICAgICAgIGNvbnN0IHBhciA9IHBhcmVudHMuZ2V0KGpzVHJlZU5vZGUuaXJpKTtcbiAgICAgICAgICBpZiAocGFyICE9IHVuZGVmaW5lZCkgZW50aXRpZXNbZW50aXRpZXMubGVuZ3RoIC0gMV0ucGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb24oQXJyYXkuZnJvbShwYXIudmFsdWVzKCkpKSB8fCBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGFuY2VzdG9ycyA9IGF3YWl0IHRoaXMuZ2V0QW5jZXN0b3JzKG1haW5FbnRpdHkuZ2V0SXJpKCksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQgfHwgbWFpbkVudGl0eS5nZXRPbnRvbG9neUlkKCksIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzKTtcbiAgICAgIGVudGl0aWVzID0gW3RoaXMuZW50aXR5VG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KG1haW5FbnRpdHkpLCAuLi5hbmNlc3RvcnMubWFwKChlbnRpdHkpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGVudGl0eSkpXVxuICAgIH1cblxuICAgIC8vIGZpbHRlciB0b3AgZW50aXRpZXNcbiAgICBlbnRpdGllcyA9IGVudGl0aWVzLmZpbHRlcigoZSkgPT4gIWlzVG9wKGUuaXJpKSk7XG4gICAgLyogLS0tICovXG5cbiAgICAvKiBCVUlMRCBwYXJlbnRDaGlsZFJlbGF0aW9ucyAqL1xuICAgIGNvbnN0IHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+ID0gbmV3IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4oKTtcbiAgICBjb25zdCBhbGxDaGlsZHJlblByZXNlbnQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgZW50aXRpZXNEYXRhOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PiA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PigpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSBwYXJlbnRDaGlsZFJlbGF0aW9ucyAmIGVudGl0aWVzRGF0YVxuICAgIGZvciAoY29uc3QgZW50aXR5RGF0YSBvZiBlbnRpdGllcykge1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGVudGl0eURhdGEuaXJpLCBbXSk7IC8vIGluaXRpYWxpemUgd2l0aCBlbXB0eSBhcnJheVxuICAgICAgZW50aXRpZXNEYXRhLnNldChlbnRpdHlEYXRhLmlyaSwgZW50aXR5RGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHNob3dTaWJsaW5nc09uSW5pdCkge1xuICAgICAgLy8gYWRkaXRpb25hbGx5IGxvYWQgc2libGluZ3MgZnJvbSBhcGlcbiAgICAgIGNvbnN0IHJlYWxFbnRpdHlUeXBlID0gKGVudGl0eVR5cGUgfHwgbWFpbkVudGl0eS5nZXRUeXBlKCkpO1xuICAgICAgY29uc3QgZW50aXR5VHlwZUZvclF1ZXJ5ID0gcmVhbEVudGl0eVR5cGUgPT0gXCJpbmRpdmlkdWFsXCIgPyBcImNsYXNzXCIgOiByZWFsRW50aXR5VHlwZTsgLy8gVE9ETzogb25seSByZWxldmFudCBmb3IgZW50aXR5VHlwZSA9PSBcImluZGl2aWR1YWxcIiAobWF5YmUgd2UgZG9uJ3QgZXZlbiBuZWVkIHRoaXMgYXMgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzIGlzIG5vdCB5ZXQgZGV0ZXJtaW5lZClcblxuICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBlbnRpdHlEYXRhIG9mIGVudGl0aWVzKSB7XG4gICAgICAgIGlmIChlbnRpdHlEYXRhLmlyaSAhPSBtYWluRW50aXR5LmdldElyaSgpKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oZW50aXR5RGF0YS5pcmksIGVudGl0eVR5cGVGb3JRdWVyeSwgb250b2xvZ3lJZCwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsIHVzZUxlZ2FjeSkudGhlbigoY2hpbGRyZW4pID0+IGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGNoaWxkKSkpLnRoZW4oKGNoaWxkcmVuKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhckNoaWxkUmVsOiBQYXJlbnRDaGlsZFJlbGF0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGVudGl0aWVzRGF0YS5zZXQoY2hpbGQuaXJpLCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyUmVsYXRpb24gPSBjaGlsZC5wYXJlbnRzLmZpbHRlcigocGFyKSA9PiBwYXIudmFsdWUgPT0gZW50aXR5RGF0YS5pcmkpOyAvLyBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgcGFyQ2hpbGRSZWwucHVzaCh7IGNoaWxkSXJpOiBjaGlsZC5pcmksIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogcGFyUmVsYXRpb24ubGVuZ3RoID4gMCAmJiBwYXJSZWxhdGlvblswXS5nZXRNZXRhZGF0YSgpID8gcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXSA6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChlbnRpdHlEYXRhLmlyaSwgcGFyQ2hpbGRSZWwpO1xuICAgICAgICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQuYWRkKGVudGl0eURhdGEuaXJpKTtcbiAgICAgICAgICAgIH0pLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgICApKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cbiAgICAgIC8vIFRPRE86IG9ubHkgcmVsZXZhbnQgZm9yIGVudGl0eVR5cGUgPT0gXCJpbmRpdmlkdWFsXCIgKG1heWJlIHdlIGRvbid0IGV2ZW4gbmVlZCB0aGlzIGFzIGJlaGF2aW91ciBmb3IgaW5kaXZpZHVhbCBoaWVyYXJjaGllcyBpcyBub3QgeWV0IGRldGVybWluZWQpXG4gICAgICBpZiAocmVhbEVudGl0eVR5cGUgPT0gXCJpbmRpdmlkdWFsXCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXJlbnRSZWlmaWVkIG9mIG1haW5FbnRpdHkuZ2V0UGFyZW50cygpKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSAoYXdhaXQgdGhpcy5nZXRDaGlsZHJlbihwYXJlbnRSZWlmaWVkLnZhbHVlLCByZWFsRW50aXR5VHlwZSwgb250b2xvZ3lJZCwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMpKVxuICAgICAgICAgICAgLm1hcCgoY2hpbGQpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGNoaWxkKSlcblxuICAgICAgICAgIGNvbnN0IHBhckNoaWxkUmVsOiBQYXJlbnRDaGlsZFJlbGF0aW9uW10gPSBbXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBwYXJDaGlsZFJlbC5wdXNoKHsgY2hpbGRJcmk6IGNoaWxkLmlyaSwgY2hpbGRSZWxhdGlvblRvUGFyZW50OiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChwYXJlbnRSZWlmaWVkLnZhbHVlLCBwYXJDaGlsZFJlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGVudGl0eURhdGEgb2YgZW50aXRpZXMpIHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IGVudGl0eURhdGEucGFyZW50cy5maWx0ZXIoKHBhcmVudFJlaWZpZWQ6IFJlaWZpZWQ8c3RyaW5nPikgPT4gIWlzVG9wKHBhcmVudFJlaWZpZWQudmFsdWUpKTtcbiAgICAgICAgaWYgKGVudGl0eURhdGEuaXJpID09IG1haW5FbnRpdHk/LmdldElyaSgpICYmIGlzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUgfHwgbWFpbkVudGl0eS5nZXRUeXBlKCkpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwYXJlbnRSZWlmaWVkIG9mIHBhcmVudHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRDaGlsZFJlbGF0aW9ucy5oYXMocGFyZW50UmVpZmllZC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KHBhcmVudFJlaWZpZWQudmFsdWUpPy5wdXNoKHsgY2hpbGRJcmk6IGVudGl0eURhdGEuaXJpLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwYXJlbnRSZWlmaWVkIG9mIHBhcmVudHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRDaGlsZFJlbGF0aW9ucy5oYXMocGFyZW50UmVpZmllZC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KHBhcmVudFJlaWZpZWQudmFsdWUpPy5wdXNoKHsgY2hpbGRJcmk6IGVudGl0eURhdGEuaXJpLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6IHBhcmVudFJlaWZpZWQuZ2V0TWV0YWRhdGEoKSA/IHBhcmVudFJlaWZpZWQuZ2V0TWV0YWRhdGEoKVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXSA6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzb3J0IHBhcmVudENoaWxkUmVsYXRpb25zXG4gICAgZm9yIChjb25zdCByZWwgb2YgcGFyZW50Q2hpbGRSZWxhdGlvbnMudmFsdWVzKCkpIHJlbC5zb3J0KChhLCBiKSA9PiAoZW50aXRpZXNEYXRhLmdldChhLmNoaWxkSXJpKT8ubGFiZWwgfHwgYS5jaGlsZElyaSkubG9jYWxlQ29tcGFyZShlbnRpdGllc0RhdGEuZ2V0KGIuY2hpbGRJcmkpPy5sYWJlbCB8fCBiLmNoaWxkSXJpKSk7XG4gICAgLyogLS0tICovXG5cbiAgICAvKiBCVUlMRCByb290RW50aXRpZXMgKi9cbiAgICBjb25zdCByb290RW50aXRpZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHByZWZlcnJlZFJvb3RzKSB7XG4gICAgICBjb25zdCBwcmVmZXJyZWRSb290RW50aXRpZXMgPSAoYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCB1bmRlZmluZWQsIHVzZUxlZ2FjeSkpLmdldFByZWZlcnJlZFJvb3RzKCk7XG4gICAgICBmb3IgKGNvbnN0IGUgb2YgcHJlZmVycmVkUm9vdEVudGl0aWVzKSB7XG4gICAgICAgIGlmIChlbnRpdGllc0RhdGEuaGFzKGUpKSByb290RW50aXRpZXMucHVzaChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGVudGl0eURhdGEgb2YgZW50aXRpZXMpIHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IGVudGl0eURhdGEucGFyZW50cy5maWx0ZXIoKHBhcmVudFJlaWZpZWQ6IFJlaWZpZWQ8c3RyaW5nPikgPT4gIWlzVG9wKHBhcmVudFJlaWZpZWQudmFsdWUpKTtcbiAgICAgICAgaWYgKHBhcmVudHMubGVuZ3RoID09IDApIHJvb3RFbnRpdGllcy5wdXNoKGVudGl0eURhdGEuaXJpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogLS0tICovXG5cbiAgICBmdW5jdGlvbiBjcmVhdGVUcmVlTm9kZShlbnRpdHlEYXRhOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5LCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiwgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nKTogVHJlZU5vZGUge1xuICAgICAgY3ljbGVDaGVjay5hZGQoZW50aXR5RGF0YS5pcmkpOyAvLyBhZGQgY3VycmVudCBlbnRpdHkgdG8gY3ljbGUgY2hlY2sgc2V0XG5cbiAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJlZU5vZGUoZW50aXR5RGF0YSk7XG4gICAgICBub2RlLmNoaWxkUmVsYXRpb25Ub1BhcmVudCA9IGNoaWxkUmVsYXRpb25Ub1BhcmVudDtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KGVudGl0eURhdGEuaXJpKSB8fCBbXTtcblxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICBpZiAoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBDeWNsaWMgdHJlZSBhdCBlbnRpdHkgXCIke2NoaWxkLmNoaWxkSXJpfVwiLmApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hpbGREYXRhID0gZW50aXRpZXNEYXRhLmdldChjaGlsZC5jaGlsZElyaSk7XG4gICAgICAgIGlmIChjaGlsZERhdGEgIT0gdW5kZWZpbmVkKSBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGNoaWxkRGF0YSwgY3ljbGVDaGVjaywgY2hpbGQuY2hpbGRSZWxhdGlvblRvUGFyZW50KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLmxvYWRlZENoaWxkcmVuLmxlbmd0aCA+IDApIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICBjeWNsZUNoZWNrLmRlbGV0ZShlbnRpdHlEYXRhLmlyaSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBDb250YWlucyBpcmlzIG9mIGFsbCBlbnRpdGllcyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBicmFuY2guIElzIHVzZWQgdG8gY2hlY2sgZm9yIGN5Y2xlcy5cblxuICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgcm9vdHM6IHJvb3RFbnRpdGllcy5tYXAoKHJvb3RFbnRpdHkpID0+IGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQocm9vdEVudGl0eSkhLCBjeWNsZUNoZWNrKSkuc29ydCgoYSwgYikgPT4gKGEuZW50aXR5RGF0YS5sYWJlbCB8fCBhLmVudGl0eURhdGEuaXJpKS5sb2NhbGVDb21wYXJlKGIuZW50aXR5RGF0YS5sYWJlbCB8fCBiLmVudGl0eURhdGEuaXJpKSksXG4gICAgICBhcGk6IG5ldyBPbHNBcGkodGhpcy5heGlvc0luc3RhbmNlLmdldFVyaSgpKSxcbiAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuICAgICAgbWFpbkVudGl0eUlyaTogbWFpbkVudGl0eT8uZ2V0SXJpKCksXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkSGllcmFyY2h5Q2hpbGRyZW4ocHJvcHM6IExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzKTogUHJvbWlzZTxFbnRpdHlEYXRhRm9ySGllcmFyY2h5W10+IHtcbiAgICBpZiAocHJvcHMuZW50aXR5VHlwZSA9PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRW50aXR5VHlwZSBoYXMgdG8gYmUgcHJvdmlkZWQgdG8gbG9hZCBjaGlsZHJlbiBpbiBPTFMuXCIpO1xuXG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldENoaWxkcmVuKHByb3BzLm5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSwgcHJvcHMuZW50aXR5VHlwZSwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsIHByb3BzLnVzZUxlZ2FjeSkpXG4gICAgICAubWFwKChlbnRpdHkpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGVudGl0eSkpXG4gIH1cbn1cbiIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL3NjcmVlbl9yZWFkZXJfb25seSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTY3JlZW5SZWFkZXJMaXZlID0gZnVuY3Rpb24gRXVpU2NyZWVuUmVhZGVyTGl2ZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJGlzQWN0aXZlID0gX3JlZi5pc0FjdGl2ZSxcbiAgICAgIGlzQWN0aXZlID0gX3JlZiRpc0FjdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkaXNBY3RpdmUsXG4gICAgICBfcmVmJHJvbGUgPSBfcmVmLnJvbGUsXG4gICAgICByb2xlID0gX3JlZiRyb2xlID09PSB2b2lkIDAgPyAnc3RhdHVzJyA6IF9yZWYkcm9sZSxcbiAgICAgIF9yZWYkYXJpYUxpdmUgPSBfcmVmWydhcmlhLWxpdmUnXSxcbiAgICAgIGFyaWFMaXZlID0gX3JlZiRhcmlhTGl2ZSA9PT0gdm9pZCAwID8gJ3BvbGl0ZScgOiBfcmVmJGFyaWFMaXZlLFxuICAgICAgX3JlZiRmb2N1c1JlZ2lvbk9uVGV4ID0gX3JlZi5mb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSxcbiAgICAgIGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID0gX3JlZiRmb2N1c1JlZ2lvbk9uVGV4ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkZm9jdXNSZWdpb25PblRleDtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICB0b2dnbGUgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0VG9nZ2xlID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgZm9jdXNSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgc2V0VG9nZ2xlKGZ1bmN0aW9uICh0b2dnbGUpIHtcbiAgICAgIHJldHVybiAhdG9nZ2xlO1xuICAgIH0pO1xuICB9LCBbY2hpbGRyZW5dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZm9jdXNSZWYuY3VycmVudCAhPT0gbnVsbCAmJiBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSkge1xuICAgICAgZm9jdXNSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW3RvZ2dsZSwgZm9jdXNSZWdpb25PblRleHRDaGFuZ2VdKTtcbiAgcmV0dXJuIChcbiAgICAvKipcbiAgICAgKiBJbnRlbnRpb25hbGx5IHVzZXMgdHdvIHBlcnNpc3RlbnQgbGl2ZSByZWdpb25zIHdpdGggb3NjaWxsYXRpbmcgY29udGVudCB1cGRhdGVzLlxuICAgICAqIFRoaXMgcmVzb2x2ZXMgdGhlIHByb2JsZW0gb2YgZHVwbGljYXRlIHNjcmVlbiByZWFkZXIgYW5ub3VuY2VtZW50cyBpbiByYXBpZCBzdWNjZXNzaW9uXG4gICAgICogY2F1c2VkIGJ5IFJlYWN0J3MgdmlydHVhbCBET00gYmVoYXZpb3VyIChodHRwczovL2dpdGh1Yi5jb20vbnZhY2Nlc3MvbnZkYS9pc3N1ZXMvNzk5NiNpc3N1ZWNvbW1lbnQtNDEzNjQxNzA5KVxuICAgICAqXG4gICAgICogQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hbHBoYWdvdi9hY2Nlc3NpYmxlLWF1dG9jb21wbGV0ZS9ibG9iL2E3MTA2ZjAzMTUwOTQxZmMxNWU2YzFjZWIwYTkwZTg4NzJmYTg2ZWYvc3JjL3N0YXR1cy5qc1xuICAgICAqIERlYm91bmNpbmcgd2FzIG5vdCBuZWVkZWQgZm9yIHRoaXMgY2FzZSwgYnV0IGNvdWxkIHByb3ZlIHRvIGJlIHVzZWZ1bCBmb3IgZnV0dXJlIHVzZSBjYXNlcy5cbiAgICAgKiBTZWUgYWxzbyBodHRwczovL2dpdGh1Yi5jb20vQWxtZXJvU3RleW4vcmVhY3QtYXJpYS1saXZlIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZGVxdWVsYWJzL25nQTExeVxuICAgICAqIGZvciBtb3JlIGV4YW1wbGVzIG9mIHRoZSBkb3VibGUgcmVnaW9uIGFwcHJvYWNoLlxuICAgICAqL1xuICAgIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByZWY6IGZvY3VzUmVmLFxuICAgICAgdGFiSW5kZXg6IGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID8gLTEgOiB1bmRlZmluZWRcbiAgICB9LCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIHJvbGU6IHJvbGUsXG4gICAgICBcImFyaWEtYXRvbWljXCI6IFwidHJ1ZVwiIC8vIFNldHRpbmcgYGFyaWEtaGlkZGVuYCBhbmQgc2V0dGluZyBgYXJpYS1saXZlYCB0byBcIm9mZlwiIHByZXZlbnRzXG4gICAgICAvLyBkb3VibGUgYW5ub3VuY2VtZW50cyBmcm9tIFZPIHdoZW4gYGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlYCBpcyB0cnVlXG4gICAgICAsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRvZ2dsZSA/IHVuZGVmaW5lZCA6ICd0cnVlJyxcbiAgICAgIFwiYXJpYS1saXZlXCI6IGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID8gJ29mZicgOiBhcmlhTGl2ZVxuICAgIH0sIGlzQWN0aXZlICYmIHRvZ2dsZSA/IGNoaWxkcmVuIDogJycpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIHJvbGU6IHJvbGUsXG4gICAgICBcImFyaWEtYXRvbWljXCI6IFwidHJ1ZVwiLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiAhdG9nZ2xlID8gdW5kZWZpbmVkIDogJ3RydWUnLFxuICAgICAgXCJhcmlhLWxpdmVcIjogZm9jdXNSZWdpb25PblRleHRDaGFuZ2UgPyAnb2ZmJyA6IGFyaWFMaXZlXG4gICAgfSwgaXNBY3RpdmUgJiYgIXRvZ2dsZSA/IGNoaWxkcmVuIDogJycpKSlcbiAgKTtcbn07XG5FdWlTY3JlZW5SZWFkZXJMaXZlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogV2hldGhlciB0byBtYWtlIHNjcmVlbiByZWFkZXJzIGF3YXJlIG9mIHRoZSBjb250ZW50XG4gICAgICovXG4gIGlzQWN0aXZlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBDb250ZW50IGZvciBzY3JlZW4gcmVhZGVycyB0byBhbm5vdW5jZVxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogYHJvbGVgIGF0dHJpYnV0ZSBmb3IgYm90aCBsaXZlIHJlZ2lvbnMuXG4gICAgICpcbiAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BY2Nlc3NpYmlsaXR5L0FSSUEvQVJJQV9MaXZlX1JlZ2lvbnMjcm9sZXNfd2l0aF9pbXBsaWNpdF9saXZlX3JlZ2lvbl9hdHRyaWJ1dGVzXG4gICAgICovXG4gIHJvbGU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogYGFyaWEtbGl2ZWAgYXR0cmlidXRlIGZvciBib3RoIGxpdmUgcmVnaW9uc1xuICAgICAqL1xuICBcImFyaWEtbGl2ZVwiOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9uIGBjaGlsZHJlbmAvdGV4dCBjaGFuZ2UsIHRoZSByZWdpb24gd2lsbCBhdXRvLWZvY3VzIGl0c2VsZiwgY2F1c2luZyBzY3JlZW4gcmVhZGVyc1xuICAgICAqIHRvIGF1dG9tYXRpY2FsbHkgcmVhZCBvdXQgdGhlIHRleHQgY29udGVudC4gVGhpcyBwcm9wIHNob3VsZCBwcmltYXJpbHkgYmUgdXNlZCBmb3JcbiAgICAgKiBuYXZpZ2F0aW9uIG9yIHBhZ2UgY2hhbmdlcywgd2hlcmUgcHJvZ3JhbW1hdGljYWxseSByZXNldHRpbmcgZm9jdXMgbG9jYXRpb24gYmFjayB0b1xuICAgICAqIGEgY2VydGFpbiBwYXJ0IG9mIHRoZSBwYWdlIGlzIGRlc2lyZWQuXG4gICAgICovXG4gIGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL2Nsb25lX2VsZW1lbnQnO1xuaW1wb3J0IHsgZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyB9IGZyb20gJy4vc2NyZWVuX3JlYWRlcl9vbmx5LnN0eWxlcyc7XG5leHBvcnQgdmFyIEV1aVNjcmVlblJlYWRlck9ubHkgPSBmdW5jdGlvbiBFdWlTY3JlZW5SZWFkZXJPbmx5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgc2hvd09uRm9jdXMgPSBfcmVmLnNob3dPbkZvY3VzO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCBjaGlsZHJlbi5wcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyhzaG93T25Gb2N1cyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVNjcmVlblJlYWRlck9ubHldO1xuICB2YXIgcHJvcHMgPSB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLmxlbmd0aCA/IGNsYXNzZXMgOiB1bmRlZmluZWQsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfTtcbiAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIHByb3BzKTtcbn07XG5FdWlTY3JlZW5SZWFkZXJPbmx5LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3RFbGVtZW50IHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogRm9yIGtleWJvYXJkIG5hdmlnYXRpb24sIGZvcmNlIGNvbnRlbnQgdG8gZGlzcGxheSB2aXN1YWxseSB1cG9uIGZvY3VzLlxuICAgICAqL1xuICBzaG93T25Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVDYWNoZSBmcm9tICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgd2Vha01lbW9pemUgZnJvbSAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCBob2lzdE5vblJlYWN0U3RhdGljcyBmcm9tICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG4vKiBpbXBvcnQgeyB0eXBlIEVtb3Rpb25DYWNoZSB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJyAqL1xudmFyIEVtb3Rpb25DYWNoZUNvbnRleHRcbi8qOiBSZWFjdC5Db250ZXh0PEVtb3Rpb25DYWNoZSB8IG51bGw+ICovXG49IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpXG4vKjogRW1vdGlvbkNhY2hlIHwgbnVsbCovXG57XG4gIHJldHVybiB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xufTtcblxudmFyIHdpdGhFbW90aW9uQ2FjaGUgPSBmdW5jdGlvbiB3aXRoRW1vdGlvbkNhY2hlXG4vKiA8UHJvcHMsIFJlZjogUmVhY3QuUmVmPCo+PiAqL1xuKGZ1bmNcbi8qOiAocHJvcHM6IFByb3BzLCBjYWNoZTogRW1vdGlvbkNhY2hlLCByZWY6IFJlZikgPT4gUmVhY3QuTm9kZSAqL1xuKVxuLyo6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PFByb3BzPiAqL1xue1xuICByZXR1cm4gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzXG4gIC8qOiBQcm9wcyAqL1xuICAsIHJlZlxuICAvKjogUmVmICovXG4gICkge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG52YXIgVGhlbWVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZVxuLyo6IE9iamVjdCAqL1xuLCB0aGVtZVxuLyo6IE9iamVjdCB8IChPYmplY3QgPT4gT2JqZWN0KSAqL1xuKSB7XG4gIGlmICh0eXBlb2YgdGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgbWVyZ2VkVGhlbWUgPSB0aGVtZShvdXRlclRoZW1lKTtcblxuICAgIHJldHVybiBtZXJnZWRUaGVtZTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgdGhlbWUpO1xufTtcblxudmFyIGNyZWF0ZUNhY2hlV2l0aFRoZW1lID0gLyogI19fUFVSRV9fICovd2Vha01lbW9pemUoZnVuY3Rpb24gKG91dGVyVGhlbWUpIHtcbiAgcmV0dXJuIHdlYWtNZW1vaXplKGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHJldHVybiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSk7XG4gIH0pO1xufSk7XG4vKlxudHlwZSBUaGVtZVByb3ZpZGVyUHJvcHMgPSB7XG4gIHRoZW1lOiBPYmplY3QgfCAoT2JqZWN0ID0+IE9iamVjdCksXG4gIGNoaWxkcmVuOiBSZWFjdC5Ob2RlXG59XG4qL1xuXG52YXIgVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHNcbi8qOiBUaGVtZVByb3ZpZGVyUHJvcHMgKi9cbikge1xuICB2YXIgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG5cbiAgaWYgKHByb3BzLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIHRoZW1lID0gY3JlYXRlQ2FjaGVXaXRoVGhlbWUodGhlbWUpKHByb3BzLnRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgcHJvcHMuY2hpbGRyZW4pO1xufTtcbmZ1bmN0aW9uIHdpdGhUaGVtZVxuLyogPENvbmZpZzoge30+ICovXG4oQ29tcG9uZW50XG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8Q29uZmlnPiAqL1xuKVxuLyo6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PCREaWZmPENvbmZpZywgeyB0aGVtZTogT2JqZWN0IH0+PiAqL1xue1xuICB2YXIgY29tcG9uZW50TmFtZSA9IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcblxuICB2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHByb3BzLCByZWYpIHtcbiAgICB2YXIgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcykpO1xuICB9O1xuXG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihyZW5kZXIpO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgdHlwZVByb3BOYW1lID0gJ19fRU1PVElPTl9UWVBFX1BMRUFTRV9ET19OT1RfVVNFX18nO1xudmFyIGNyZWF0ZUVtb3Rpb25Qcm9wcyA9IGZ1bmN0aW9uIGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlXG4vKjogUmVhY3QuRWxlbWVudFR5cGUgKi9cbiwgcHJvcHNcbi8qOiBPYmplY3QgKi9cbikge1xuXG4gIHZhciBuZXdQcm9wc1xuICAvKjogYW55ICovXG4gID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKHByb3BzLCBrZXkpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wc1t0eXBlUHJvcE5hbWVdID0gdHlwZTsgLy8gUnVudGltZSBsYWJlbGluZyBpcyBhbiBvcHQtaW4gZmVhdHVyZSBiZWNhdXNlOlxuXG4gIHJldHVybiBuZXdQcm9wcztcbn07XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZCA9IF9yZWYuc2VyaWFsaXplZCxcbiAgICAgIGlzU3RyaW5nVGFnID0gX3JlZi5pc1N0cmluZ1RhZztcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBFbW90aW9uID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShcbi8qIDxhbnksIGFueT4gKi9cbmZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICB2YXIgY3NzUHJvcCA9IHByb3BzLmNzczsgLy8gc28gdGhhdCB1c2luZyBgY3NzYCBmcm9tIGBlbW90aW9uYCBhbmQgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHRoZSBjc3MgcHJvcCB3b3Jrc1xuICAvLyBub3QgcGFzc2luZyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBzZXJpYWxpemVTdHlsZXMgYmVjYXVzZSBpdCB3b3VsZFxuICAvLyBtYWtlIGNlcnRhaW4gYmFiZWwgb3B0aW1pc2F0aW9ucyBub3QgcG9zc2libGVcblxuICBpZiAodHlwZW9mIGNzc1Byb3AgPT09ICdzdHJpbmcnICYmIGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNzc1Byb3AgPSBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdO1xuICB9XG5cbiAgdmFyIFdyYXBwZWRDb21wb25lbnQgPSBwcm9wc1t0eXBlUHJvcE5hbWVdO1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtjc3NQcm9wXTtcbiAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuXG4gIGlmICh0eXBlb2YgcHJvcHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMoY2FjaGUucmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMocmVnaXN0ZXJlZFN0eWxlcywgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKHByb3BzLCBrZXkpICYmIGtleSAhPT0gJ2NzcycgJiYga2V5ICE9PSB0eXBlUHJvcE5hbWUgJiYgKCFpc0RldmVsb3BtZW50ICkpIHtcbiAgICAgIG5ld1Byb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICBpZiAocmVmKSB7XG4gICAgbmV3UHJvcHMucmVmID0gcmVmO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNEZXZlbG9wbWVudCBhcyBpLCB1c2VUaGVtZSBhcyB1LCB3aXRoRW1vdGlvbkNhY2hlIGFzIHcgfTtcbiIsICJ2YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG4vKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIFx1Mjc2NFx1RkUwRlxuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gdGhpcyB3ZWlyZG5lc3MgYnJvdWdodCB0byB5b3UgYnkgZmlyZWZveFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgfVxuICB9IC8vIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyByZXR1cm4gd2l0aCBhIHZhbHVlXG4gIC8vIFRTIGNhbid0IHVuZGVyc3RhbmQgaXQgdGhvdWdoIHNvIHdlIG1ha2UgaXQgc3RvcCBjb21wbGFpbmluZyBoZXJlXG5cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyAhaXNEZXZlbG9wbWVudCA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBfdGFnJHBhcmVudE5vZGU7XG5cbiAgICAgIHJldHVybiAoX3RhZyRwYXJlbnROb2RlID0gdGFnLnBhcmVudE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGFnJHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsICJleHBvcnQgdmFyIE1TID0gJy1tcy0nXG5leHBvcnQgdmFyIE1PWiA9ICctbW96LSdcbmV4cG9ydCB2YXIgV0VCS0lUID0gJy13ZWJraXQtJ1xuXG5leHBvcnQgdmFyIENPTU1FTlQgPSAnY29tbSdcbmV4cG9ydCB2YXIgUlVMRVNFVCA9ICdydWxlJ1xuZXhwb3J0IHZhciBERUNMQVJBVElPTiA9ICdkZWNsJ1xuXG5leHBvcnQgdmFyIFBBR0UgPSAnQHBhZ2UnXG5leHBvcnQgdmFyIE1FRElBID0gJ0BtZWRpYSdcbmV4cG9ydCB2YXIgSU1QT1JUID0gJ0BpbXBvcnQnXG5leHBvcnQgdmFyIENIQVJTRVQgPSAnQGNoYXJzZXQnXG5leHBvcnQgdmFyIFZJRVdQT1JUID0gJ0B2aWV3cG9ydCdcbmV4cG9ydCB2YXIgU1VQUE9SVFMgPSAnQHN1cHBvcnRzJ1xuZXhwb3J0IHZhciBET0NVTUVOVCA9ICdAZG9jdW1lbnQnXG5leHBvcnQgdmFyIE5BTUVTUEFDRSA9ICdAbmFtZXNwYWNlJ1xuZXhwb3J0IHZhciBLRVlGUkFNRVMgPSAnQGtleWZyYW1lcydcbmV4cG9ydCB2YXIgRk9OVF9GQUNFID0gJ0Bmb250LWZhY2UnXG5leHBvcnQgdmFyIENPVU5URVJfU1RZTEUgPSAnQGNvdW50ZXItc3R5bGUnXG5leHBvcnQgdmFyIEZPTlRfRkVBVFVSRV9WQUxVRVMgPSAnQGZvbnQtZmVhdHVyZS12YWx1ZXMnXG5leHBvcnQgdmFyIExBWUVSID0gJ0BsYXllcidcbiIsICIvKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgZnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHJldHVybiBjaGFyYXQodmFsdWUsIDApIF4gNDUgPyAoKCgoKCgobGVuZ3RoIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAwKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDEpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMikpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAzKSA6IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS50cmltKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmc/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2ggKHZhbHVlLCBwYXR0ZXJuKSB7XG5cdHJldHVybiAodmFsdWUgPSBwYXR0ZXJuLmV4ZWModmFsdWUpKSA/IHZhbHVlWzBdIDogdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UgKHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gpIHtcblx0cmV0dXJuIHZhbHVlLmluZGV4T2Yoc2VhcmNoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG4iLCAiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vZGUgKHZhbHVlLCByb290LCBwYXJlbnQsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHJldHVybiB7dmFsdWU6IHZhbHVlLCByb290OiByb290LCBwYXJlbnQ6IHBhcmVudCwgdHlwZTogdHlwZSwgcHJvcHM6IHByb3BzLCBjaGlsZHJlbjogY2hpbGRyZW4sIGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uLCBsZW5ndGg6IGxlbmd0aCwgcmV0dXJuOiAnJ31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChyb290LCBwcm9wcykge1xuXHRyZXR1cm4gYXNzaWduKG5vZGUoJycsIG51bGwsIG51bGwsICcnLCBudWxsLCBudWxsLCAwKSwgcm9vdCwge2xlbmd0aDogLXJvb3QubGVuZ3RofSwgcHJvcHMpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwgImltcG9ydCB7Q09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7YWJzLCBjaGFyYXQsIHRyaW0sIGZyb20sIHNpemVvZiwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgcmVwbGFjZSwgaW5kZXhvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtub2RlLCBjaGFyLCBwcmV2LCBuZXh0LCBwZWVrLCBjYXJldCwgYWxsb2MsIGRlYWxsb2MsIGRlbGltaXQsIHdoaXRlc3BhY2UsIGVzY2FwaW5nLCBpZGVudGlmaWVyLCBjb21tZW50ZXJ9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7b2JqZWN0W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyhwYXJzZSgnJywgbnVsbCwgbnVsbCwgbnVsbCwgWycnXSwgdmFsdWUgPSBhbGxvYyh2YWx1ZSksIDAsIFswXSwgdmFsdWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNldHNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBzZXVkb1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZWNsYXJhdGlvbnNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBydWxlLCBydWxlcywgcnVsZXNldHMsIHBzZXVkbywgcG9pbnRzLCBkZWNsYXJhdGlvbnMpIHtcblx0dmFyIGluZGV4ID0gMFxuXHR2YXIgb2Zmc2V0ID0gMFxuXHR2YXIgbGVuZ3RoID0gcHNldWRvXG5cdHZhciBhdHJ1bGUgPSAwXG5cdHZhciBwcm9wZXJ0eSA9IDBcblx0dmFyIHByZXZpb3VzID0gMFxuXHR2YXIgdmFyaWFibGUgPSAxXG5cdHZhciBzY2FubmluZyA9IDFcblx0dmFyIGFtcGVyc2FuZCA9IDFcblx0dmFyIGNoYXJhY3RlciA9IDBcblx0dmFyIHR5cGUgPSAnJ1xuXHR2YXIgcHJvcHMgPSBydWxlc1xuXHR2YXIgY2hpbGRyZW4gPSBydWxlc2V0c1xuXHR2YXIgcmVmZXJlbmNlID0gcnVsZVxuXHR2YXIgY2hhcmFjdGVycyA9IHR5cGVcblxuXHR3aGlsZSAoc2Nhbm5pbmcpXG5cdFx0c3dpdGNoIChwcmV2aW91cyA9IGNoYXJhY3RlciwgY2hhcmFjdGVyID0gbmV4dCgpKSB7XG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAocHJldmlvdXMgIT0gMTA4ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCBsZW5ndGggLSAxKSA9PSA1OCkge1xuXHRcdFx0XHRcdGlmIChpbmRleG9mKGNoYXJhY3RlcnMgKz0gcmVwbGFjZShkZWxpbWl0KGNoYXJhY3RlciksICcmJywgJyZcXGYnKSwgJyZcXGYnKSAhPSAtMSlcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IC0xXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0Ly8gXCIgJyBbXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDkxOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFx0IFxcbiBcXHIgXFxzXG5cdFx0XHRjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gd2hpdGVzcGFjZShwcmV2aW91cylcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGVzY2FwaW5nKGNhcmV0KCkgLSAxLCA3KVxuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0Ly8gL1xuXHRcdFx0Y2FzZSA0Nzpcblx0XHRcdFx0c3dpdGNoIChwZWVrKCkpIHtcblx0XHRcdFx0XHRjYXNlIDQyOiBjYXNlIDQ3OlxuXHRcdFx0XHRcdFx0YXBwZW5kKGNvbW1lbnQoY29tbWVudGVyKG5leHQoKSwgY2FyZXQoKSksIHJvb3QsIHBhcmVudCksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGgpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSkgOiBkZWNsYXJhdGlvbihyZXBsYWNlKGNoYXJhY3RlcnMsICcgJywgJycpICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDIpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEAgO1xuXHRcdFx0XHRcdGNhc2UgNTk6IGNoYXJhY3RlcnMgKz0gJzsnXG5cdFx0XHRcdFx0Ly8geyBydWxlL2F0LXJ1bGVcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YXBwZW5kKHJlZmVyZW5jZSA9IHJ1bGVzZXQoY2hhcmFjdGVycywgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcyA9IFtdLCBjaGlsZHJlbiA9IFtdLCBsZW5ndGgpLCBydWxlc2V0cylcblxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gMTIzKVxuXHRcdFx0XHRcdFx0XHRpZiAob2Zmc2V0ID09PSAwKVxuXHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJvb3QsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBwcm9wcywgcnVsZXNldHMsIGxlbmd0aCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoYXRydWxlID09PSA5OSAmJiBjaGFyYXQoY2hhcmFjdGVycywgMykgPT09IDExMCA/IDEwMCA6IGF0cnVsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZCBsIG0gc1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAxMDA6IGNhc2UgMTA4OiBjYXNlIDEwOTogY2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcnVsZSAmJiBhcHBlbmQocnVsZXNldCh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIDAsIDAsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHJ1bGVzLCBwcm9wcyA9IFtdLCBsZW5ndGgpLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNldCAodmFsdWUsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0dmFyIHBvc3QgPSBvZmZzZXQgLSAxXG5cdHZhciBydWxlID0gb2Zmc2V0ID09PSAwID8gcnVsZXMgOiBbJyddXG5cdHZhciBzaXplID0gc2l6ZW9mKHJ1bGUpXG5cblx0Zm9yICh2YXIgaSA9IDAsIGogPSAwLCBrID0gMDsgaSA8IGluZGV4OyArK2kpXG5cdFx0Zm9yICh2YXIgeCA9IDAsIHkgPSBzdWJzdHIodmFsdWUsIHBvc3QgKyAxLCBwb3N0ID0gYWJzKGogPSBwb2ludHNbaV0pKSwgeiA9IHZhbHVlOyB4IDwgc2l6ZTsgKyt4KVxuXHRcdFx0aWYgKHogPSB0cmltKGogPiAwID8gcnVsZVt4XSArICcgJyArIHkgOiByZXBsYWNlKHksIC8mXFxmL2csIHJ1bGVbeF0pKSlcblx0XHRcdFx0cHJvcHNbaysrXSA9IHpcblxuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBvZmZzZXQgPT09IDAgPyBSVUxFU0VUIDogdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnQgKHZhbHVlLCByb290LCBwYXJlbnQpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgQ09NTUVOVCwgZnJvbShjaGFyKCkpLCBzdWJzdHIodmFsdWUsIDIsIC0yKSwgMClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHZhbHVlLCByb290LCBwYXJlbnQsIGxlbmd0aCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBERUNMQVJBVElPTiwgc3Vic3RyKHZhbHVlLCAwLCBsZW5ndGgpLCBzdWJzdHIodmFsdWUsIGxlbmd0aCArIDEsIC0xKSwgbGVuZ3RoKVxufVxuIiwgImltcG9ydCB7SU1QT1JULCBMQVlFUiwgQ09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT04sIEtFWUZSQU1FU30gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtzdHJsZW4sIHNpemVvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplIChjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0dmFyIG91dHB1dCA9ICcnXG5cdHZhciBsZW5ndGggPSBzaXplb2YoY2hpbGRyZW4pXG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRvdXRwdXQgKz0gY2FsbGJhY2soY2hpbGRyZW5baV0sIGksIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRyZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIExBWUVSOiBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIGJyZWFrXG5cdFx0Y2FzZSBJTVBPUlQ6IGNhc2UgREVDTEFSQVRJT046IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQucmV0dXJuIHx8IGVsZW1lbnQudmFsdWVcblx0XHRjYXNlIENPTU1FTlQ6IHJldHVybiAnJ1xuXHRcdGNhc2UgS0VZRlJBTUVTOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSArICd9J1xuXHRcdGNhc2UgUlVMRVNFVDogZWxlbWVudC52YWx1ZSA9IGVsZW1lbnQucHJvcHMuam9pbignLCcpXG5cdH1cblxuXHRyZXR1cm4gc3RybGVuKGNoaWxkcmVuID0gc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSkgPyBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBjaGlsZHJlbiArICd9JyA6ICcnXG59XG4iLCAiaW1wb3J0IHtNUywgTU9aLCBXRUJLSVQsIFJVTEVTRVQsIEtFWUZSQU1FUywgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7bWF0Y2gsIGNoYXJhdCwgc3Vic3RyLCBzdHJsZW4sIHNpemVvZiwgcmVwbGFjZSwgY29tYmluZX0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtjb3B5LCB0b2tlbml6ZX0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5pbXBvcnQge3NlcmlhbGl6ZX0gZnJvbSAnLi9TZXJpYWxpemVyLmpzJ1xuaW1wb3J0IHtwcmVmaXh9IGZyb20gJy4vUHJlZml4ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbltdfSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pZGRsZXdhcmUgKGNvbGxlY3Rpb24pIHtcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjb2xsZWN0aW9uKVxuXG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRcdHZhciBvdXRwdXQgPSAnJ1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdG91dHB1dCArPSBjb2xsZWN0aW9uW2ldKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2hlZXQgKGNhbGxiYWNrKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGlmICghZWxlbWVudC5yb290KVxuXHRcdFx0aWYgKGVsZW1lbnQgPSBlbGVtZW50LnJldHVybilcblx0XHRcdFx0Y2FsbGJhY2soZWxlbWVudClcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ZXIgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0aWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpXG5cdFx0aWYgKCFlbGVtZW50LnJldHVybilcblx0XHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgREVDTEFSQVRJT046IGVsZW1lbnQucmV0dXJuID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoLCBjaGlsZHJlbilcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0Y2FzZSBLRVlGUkFNRVM6XG5cdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7dmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpfSldLCBjYWxsYmFjaylcblx0XHRcdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0XHRcdGlmIChlbGVtZW50Lmxlbmd0aClcblx0XHRcdFx0XHRcdHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzpyZWFkLW9ubHknOiBjYXNlICc6cmVhZC13cml0ZSc6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHRcdC8vIDpwbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV19KVxuXHRcdFx0XHRcdFx0XHRcdFx0XSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJydcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZSAoZWxlbWVudCkge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdGVsZW1lbnQucHJvcHMgPSBlbGVtZW50LnByb3BzLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIGNvbWJpbmUodG9rZW5pemUodmFsdWUpLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjaGlsZHJlbikge1xuXHRcdFx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCAwKSkge1xuXHRcdFx0XHRcdFx0Ly8gXFxmXG5cdFx0XHRcdFx0XHRjYXNlIDEyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc3Vic3RyKHZhbHVlLCAxLCBzdHJsZW4odmFsdWUpKVxuXHRcdFx0XHRcdFx0Ly8gXFwwICggKyA+IH5cblx0XHRcdFx0XHRcdGNhc2UgMDogY2FzZSA0MDogY2FzZSA0MzogY2FzZSA2MjogY2FzZSAxMjY6XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0Ly8gOlxuXHRcdFx0XHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0XHRcdFx0aWYgKGNoaWxkcmVuWysraW5kZXhdID09PSAnZ2xvYmFsJylcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbltpbmRleF0gPSAnJywgY2hpbGRyZW5bKytpbmRleF0gPSAnXFxmJyArIHN1YnN0cihjaGlsZHJlbltpbmRleF0sIGluZGV4ID0gMSwgLTEpXG5cdFx0XHRcdFx0XHQvLyBcXHNcblx0XHRcdFx0XHRcdGNhc2UgMzI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDA6IGVsZW1lbnQgPSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNpemVvZihjaGlsZHJlbikgPiAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgaW5kZXggPSBzaXplb2YoY2hpbGRyZW4pIC0gMTogY2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAyID8gdmFsdWUgKyBlbGVtZW50ICsgZWxlbWVudCA6IHZhbHVlICsgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0pXG5cdH1cbn1cbiIsICJmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59XG5cbmV4cG9ydCB7IG1lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCc7XG5pbXBvcnQgeyBkZWFsbG9jLCBhbGxvYywgbmV4dCwgdG9rZW4sIGZyb20sIHBlZWssIGRlbGltaXQsIHNsaWNlLCBwb3NpdGlvbiwgUlVMRVNFVCwgY29tYmluZSwgbWF0Y2gsIHNlcmlhbGl6ZSwgY29weSwgcmVwbGFjZSwgV0VCS0lULCBNT1osIE1TLCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OLCBoYXNoLCBjaGFyYXQsIHN0cmxlbiwgaW5kZXhvZiwgc3RyaW5naWZ5LCBydWxlc2hlZXQsIG1pZGRsZXdhcmUsIGNvbXBpbGUgfSBmcm9tICdzdHlsaXMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyA9IGZ1bmN0aW9uIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhiZWdpbiwgcG9pbnRzLCBpbmRleCkge1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHByZXZpb3VzID0gY2hhcmFjdGVyO1xuICAgIGNoYXJhY3RlciA9IHBlZWsoKTsgLy8gJlxcZlxuXG4gICAgaWYgKHByZXZpb3VzID09PSAzOCAmJiBjaGFyYWN0ZXIgPT09IDEyKSB7XG4gICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIHNsaWNlKGJlZ2luLCBwb3NpdGlvbik7XG59O1xuXG52YXIgdG9SdWxlcyA9IGZ1bmN0aW9uIHRvUnVsZXMocGFyc2VkLCBwb2ludHMpIHtcbiAgLy8gcHJldGVuZCB3ZSd2ZSBzdGFydGVkIHdpdGggYSBjb21tYVxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGNoYXJhY3RlciA9IDQ0O1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgLy8gJlxcZlxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAzOCAmJiBwZWVrKCkgPT09IDEyKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0LCB3ZSBkb24ndCBhY2NvdW50IGZvciBsaXRlcmFsIHNlcXVlbmNlcyBoZXJlIC0gbGlrZSBmb3IgZXhhbXBsZSBxdW90ZWQgc3RyaW5nc1xuICAgICAgICAgIC8vIHN0eWxpcyBpbnNlcnRzIFxcZiBhZnRlciAmIHRvIGtub3cgd2hlbiAmIHdoZXJlIGl0IHNob3VsZCByZXBsYWNlIHRoaXMgc2VxdWVuY2Ugd2l0aCB0aGUgY29udGV4dCBzZWxlY3RvclxuICAgICAgICAgIC8vIGFuZCB3aGVuIGl0IHNob3VsZCBqdXN0IGNvbmNhdGVuYXRlIHRoZSBvdXRlciBhbmQgaW5uZXIgc2VsZWN0b3JzXG4gICAgICAgICAgLy8gaXQncyB2ZXJ5IHVubGlrZWx5IGZvciB0aGlzIHNlcXVlbmNlIHRvIGFjdHVhbGx5IGFwcGVhciBpbiBhIGRpZmZlcmVudCBjb250ZXh0LCBzbyB3ZSBqdXN0IGxldmVyYWdlIHRoaXMgZmFjdCBoZXJlXG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhwb3NpdGlvbiAtIDEsIHBvaW50cywgaW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGRlbGltaXQoY2hhcmFjdGVyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgLy8gY29tbWFcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gNDQpIHtcbiAgICAgICAgICAvLyBjb2xvblxuICAgICAgICAgIHBhcnNlZFsrK2luZGV4XSA9IHBlZWsoKSA9PT0gNTggPyAnJlxcZicgOiAnJztcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gcGFyc2VkW2luZGV4XS5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgLy8gZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBmcm9tKGNoYXJhY3Rlcik7XG4gICAgfVxuICB9IHdoaWxlIChjaGFyYWN0ZXIgPSBuZXh0KCkpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG52YXIgZ2V0UnVsZXMgPSBmdW5jdGlvbiBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKSB7XG4gIHJldHVybiBkZWFsbG9jKHRvUnVsZXMoYWxsb2ModmFsdWUpLCBwb2ludHMpKTtcbn07IC8vIFdlYWtTZXQgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZSwgYnV0IG9ubHkgV2Vha01hcCBpcyBzdXBwb3J0ZWQgaW4gSUUxMVxuXG5cbnZhciBmaXhlZEVsZW1lbnRzID0gLyogI19fUFVSRV9fICovbmV3IFdlYWtNYXAoKTtcbnZhciBjb21wYXQgPSBmdW5jdGlvbiBjb21wYXQoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlICE9PSAncnVsZScgfHwgIWVsZW1lbnQucGFyZW50IHx8IC8vIHBvc2l0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGNvbnRhaW5zIHBzZXVkb1xuICAvLyBuZWdhdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBoYXMgYmVlbiBhbHJlYWR5IHByZWZpeGVkXG4gIGVsZW1lbnQubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWUsXG4gICAgICBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgdmFyIGlzSW1wbGljaXRSdWxlID0gZWxlbWVudC5jb2x1bW4gPT09IHBhcmVudC5jb2x1bW4gJiYgZWxlbWVudC5saW5lID09PSBwYXJlbnQubGluZTtcblxuICB3aGlsZSAocGFyZW50LnR5cGUgIT09ICdydWxlJykge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgfSAvLyBzaG9ydC1jaXJjdWl0IGZvciB0aGUgc2ltcGxlc3QgY2FzZVxuXG5cbiAgaWYgKGVsZW1lbnQucHJvcHMubGVuZ3RoID09PSAxICYmIHZhbHVlLmNoYXJDb2RlQXQoMCkgIT09IDU4XG4gIC8qIGNvbG9uICovXG4gICYmICFmaXhlZEVsZW1lbnRzLmdldChwYXJlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGlmIHRoaXMgaXMgYW4gaW1wbGljaXRseSBpbnNlcnRlZCBydWxlICh0aGUgb25lIGVhZ2VybHkgaW5zZXJ0ZWQgYXQgdGhlIGVhY2ggbmV3IG5lc3RlZCBsZXZlbClcbiAgLy8gdGhlbiB0aGUgcHJvcHMgaGFzIGFscmVhZHkgYmVlbiBtYW5pcHVsYXRlZCBiZWZvcmVoYW5kIGFzIHRoZXkgdGhhdCBhcnJheSBpcyBzaGFyZWQgYmV0d2VlbiBpdCBhbmQgaXRzIFwicnVsZSBwYXJlbnRcIlxuXG5cbiAgaWYgKGlzSW1wbGljaXRSdWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZml4ZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgdHJ1ZSk7XG4gIHZhciBwb2ludHMgPSBbXTtcbiAgdmFyIHJ1bGVzID0gZ2V0UnVsZXModmFsdWUsIHBvaW50cyk7XG4gIHZhciBwYXJlbnRSdWxlcyA9IHBhcmVudC5wcm9wcztcblxuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyZW50UnVsZXMubGVuZ3RoOyBqKyssIGsrKykge1xuICAgICAgZWxlbWVudC5wcm9wc1trXSA9IHBvaW50c1tpXSA/IHJ1bGVzW2ldLnJlcGxhY2UoLyZcXGYvZywgcGFyZW50UnVsZXNbal0pIDogcGFyZW50UnVsZXNbal0gKyBcIiBcIiArIHJ1bGVzW2ldO1xuICAgIH1cbiAgfVxufTtcbnZhciByZW1vdmVMYWJlbCA9IGZ1bmN0aW9uIHJlbW92ZUxhYmVsKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuICAgIGlmICggLy8gY2hhcmNvZGUgZm9yIGxcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDApID09PSAxMDggJiYgLy8gY2hhcmNvZGUgZm9yIGJcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgLy8gdGhpcyBpZ25vcmVzIGxhYmVsXG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gICAgICBlbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1mYWxsdGhyb3VnaCAqL1xuXG5mdW5jdGlvbiBwcmVmaXgodmFsdWUsIGxlbmd0aCkge1xuICBzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcbiAgICAvLyBjb2xvci1hZGp1c3RcbiAgICBjYXNlIDUxMDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXG4gICAgY2FzZSA1NzM3OlxuICAgIGNhc2UgNDIwMTpcbiAgICBjYXNlIDMxNzc6XG4gICAgY2FzZSAzNDMzOlxuICAgIGNhc2UgMTY0MTpcbiAgICBjYXNlIDQ0NTc6XG4gICAgY2FzZSAyOTIxOiAvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cbiAgICBjYXNlIDU1NzI6XG4gICAgY2FzZSA2MzU2OlxuICAgIGNhc2UgNTg0NDpcbiAgICBjYXNlIDMxOTE6XG4gICAgY2FzZSA2NjQ1OlxuICAgIGNhc2UgMzAwNTogLy8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUsXG5cbiAgICBjYXNlIDYzOTE6XG4gICAgY2FzZSA1ODc5OlxuICAgIGNhc2UgNTYyMzpcbiAgICBjYXNlIDYxMzU6XG4gICAgY2FzZSA0NTk5OlxuICAgIGNhc2UgNDg1NTogLy8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblxuICAgIGNhc2UgNDIxNTpcbiAgICBjYXNlIDYzODk6XG4gICAgY2FzZSA1MTA5OlxuICAgIGNhc2UgNTM2NTpcbiAgICBjYXNlIDU2MjE6XG4gICAgY2FzZSAzODI5OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXG4gICAgY2FzZSA1MzQ5OlxuICAgIGNhc2UgNDI0NjpcbiAgICBjYXNlIDQ4MTA6XG4gICAgY2FzZSA2OTY4OlxuICAgIGNhc2UgMjc1NjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uXG5cbiAgICBjYXNlIDY4Mjg6XG4gICAgY2FzZSA0MjY4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIG9yZGVyXG5cbiAgICBjYXNlIDYxNjU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWl0ZW1zXG5cbiAgICBjYXNlIDUxODc6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tc2VsZlxuXG4gICAgY2FzZSA1NDQzOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1jb250ZW50XG5cbiAgICBjYXNlIDQ2NzU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtc2hyaW5rXG5cbiAgICBjYXNlIDU1NDg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtYmFzaXNcblxuICAgIGNhc2UgNTI5MjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWdyb3dcblxuICAgIGNhc2UgNjA2MDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIHRyYW5zaXRpb25cblxuICAgIGNhc2UgNDU1NDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWU7XG4gICAgLy8gY3Vyc29yXG5cbiAgICBjYXNlIDYxODc6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cbiAgICBjYXNlIDU0OTU6XG4gICAgY2FzZSAzOTU5OlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oaW1hZ2Utc2V0XFwoW15dKikvLCBXRUJLSVQgKyAnJDEnICsgJyRgJDEnKTtcbiAgICAvLyBqdXN0aWZ5LWNvbnRlbnRcblxuICAgIGNhc2UgNDk2ODpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oLis6KShmbGV4LSk/KC4qKS8sIFdFQktJVCArICdib3gtcGFjazokMycgKyBNUyArICdmbGV4LXBhY2s6JDMnKSwgL3MuKy1iW147XSsvLCAnanVzdGlmeScpICsgV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyAobWFyZ2lufHBhZGRpbmcpLWlubGluZS0oc3RhcnR8ZW5kKVxuXG4gICAgY2FzZSA0MDk1OlxuICAgIGNhc2UgMzU4MzpcbiAgICBjYXNlIDQwNjg6XG4gICAgY2FzZSAyNTMyOlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWU7XG4gICAgLy8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcblxuICAgIGNhc2UgODExNjpcbiAgICBjYXNlIDcwNTk6XG4gICAgY2FzZSA1NzUzOlxuICAgIGNhc2UgNTUzNTpcbiAgICBjYXNlIDU0NDU6XG4gICAgY2FzZSA1NzAxOlxuICAgIGNhc2UgNDkzMzpcbiAgICBjYXNlIDQ2Nzc6XG4gICAgY2FzZSA1NTMzOlxuICAgIGNhc2UgNTc4OTpcbiAgICBjYXNlIDUwMjE6XG4gICAgY2FzZSA0NzY1OlxuICAgICAgLy8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuICAgICAgaWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNikgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG4gICAgICAgIC8vIChtKWF4LWNvbnRlbnQsIChtKWluLWNvbnRlbnRcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgLy8gLVxuICAgICAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDQpICE9PSA0NSkgYnJlYWs7XG4gICAgICAgIC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblxuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PSAxMDggPyAnJDMnIDogJyQyLSQzJykpICsgdmFsdWU7XG4gICAgICAgIC8vIChzKXRyZXRjaFxuXG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIHJldHVybiB+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSA/IHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgpICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIC8vIHBvc2l0aW9uOiBzdGlja3lcblxuICAgIGNhc2UgNDk0OTpcbiAgICAgIC8vIChzKXRpY2t5P1xuICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkgIT09IDExNSkgYnJlYWs7XG4gICAgLy8gZGlzcGxheTogKGZsZXh8aW5saW5lLWZsZXgpXG5cbiAgICBjYXNlIDY0NDQ6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAtIDMgLSAofmluZGV4b2YodmFsdWUsICchaW1wb3J0YW50JykgJiYgMTApKSkge1xuICAgICAgICAvLyBzdGljKGspeVxuICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBXRUJLSVQpICsgdmFsdWU7XG4gICAgICAgIC8vIChpbmxpbmUtKT9mbChlKXhcblxuICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKFteOyFdKykoO3whLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIC8vIHdyaXRpbmctbW9kZVxuXG4gICAgY2FzZSA1OTM2OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuICAgICAgICAvLyB2ZXJ0aWNhbC1sKHIpXG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlO1xuICAgICAgICAvLyB2ZXJ0aWNhbC1yKGwpXG5cbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWU7XG4gICAgICAgIC8vIGhvcml6b250YWwoLSl0YlxuXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIHByZWZpeGVyID0gZnVuY3Rpb24gcHJlZml4ZXIoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuICBpZiAoZWxlbWVudC5sZW5ndGggPiAtMSkgaWYgKCFlbGVtZW50W1wicmV0dXJuXCJdKSBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgREVDTEFSQVRJT046XG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBLRVlGUkFNRVM6XG4gICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgdmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpXG4gICAgICB9KV0sIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgUlVMRVNFVDpcbiAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCkgcmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG4gICAgICAgICAgLy8gOnJlYWQtKG9ubHl8d3JpdGUpXG4gICAgICAgICAgY2FzZSAnOnJlYWQtb25seSc6XG4gICAgICAgICAgY2FzZSAnOnJlYWQtd3JpdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgICAgLy8gOnBsYWNlaG9sZGVyXG5cbiAgICAgICAgICBjYXNlICc6OnBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0pO1xuICB9XG59O1xuXG52YXIgZGVmYXVsdFN0eWxpc1BsdWdpbnMgPSBbcHJlZml4ZXJdO1xuXG52YXIgY3JlYXRlQ2FjaGUgPSBmdW5jdGlvblxuICAvKjogRW1vdGlvbkNhY2hlICovXG5jcmVhdGVDYWNoZShvcHRpb25zXG4vKjogT3B0aW9ucyAqL1xuKSB7XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleTtcblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGVcbiAgICAvKjogSFRNTFN0eWxlRWxlbWVudCAqL1xuICAgICkge1xuICAgICAgLy8gd2Ugd2FudCB0byBvbmx5IG1vdmUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhIHNwYWNlIGluIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlIHZhbHVlXG4gICAgICAvLyBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHRoYXQgaXQgaXMgYW4gRW1vdGlvbiAxMSBzZXJ2ZXItc2lkZSByZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgICAgLy8gd2hpbGUgd2Ugd2lsbCBhbHJlYWR5IGlnbm9yZSBFbW90aW9uIDExIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBiZWNhdXNlIG9mIHRoZSA6bm90KFtkYXRhLXNdKSBwYXJ0IGluIHRoZSBzZWxlY3RvclxuICAgICAgLy8gRW1vdGlvbiAxMCBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgZGlkIG5vdCBoYXZlIGRhdGEtcyAoYnV0IGltcG9ydGFudGx5IGRpZCBub3QgaGF2ZSBhIHNwYWNlIGluIHRoZWlyIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGVzKVxuICAgICAgLy8gc28gY2hlY2tpbmcgZm9yIHRoZSBzcGFjZSBlbnN1cmVzIHRoYXQgbG9hZGluZyBFbW90aW9uIDExIGFmdGVyIEVtb3Rpb24gMTAgaGFzIGluc2VydGVkIHNvbWUgc3R5bGVzXG4gICAgICAvLyB3aWxsIG5vdCByZXN1bHQgaW4gdGhlIEVtb3Rpb24gMTAgc3R5bGVzIGJlaW5nIGRlc3Ryb3llZFxuICAgICAgdmFyIGRhdGFFbW90aW9uQXR0cmlidXRlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicpO1xuXG4gICAgICBpZiAoZGF0YUVtb3Rpb25BdHRyaWJ1dGUuaW5kZXhPZignICcpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIHN0eWxpc1BsdWdpbnMgPSBvcHRpb25zLnN0eWxpc1BsdWdpbnMgfHwgZGVmYXVsdFN0eWxpc1BsdWdpbnM7XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIC8qIDogTm9kZSAqL1xuXG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlXG4gICAgLyo6IEhUTUxTdHlsZUVsZW1lbnQgKi9cbiAgICApIHtcbiAgICAgIHZhciBhdHRyaWIgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvblwiKS5zcGxpdCgnICcpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuICAvKjogKFxuICBzZWxlY3Rvcjogc3RyaW5nLFxuICBzZXJpYWxpemVkOiBTZXJpYWxpemVkU3R5bGVzLFxuICBzaGVldDogU3R5bGVTaGVldCxcbiAgc2hvdWxkQ2FjaGU6IGJvb2xlYW5cbiAgKSA9PiBzdHJpbmcgfCB2b2lkICovXG5cblxuICB2YXIgb21uaXByZXNlbnRQbHVnaW5zID0gW2NvbXBhdCwgcmVtb3ZlTGFiZWxdO1xuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHJ1bGVzaGVldChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgY3VycmVudFNoZWV0Lmluc2VydChydWxlKTtcbiAgICB9KV07XG4gICAgdmFyIHNlcmlhbGl6ZXIgPSBtaWRkbGV3YXJlKG9tbmlwcmVzZW50UGx1Z2lucy5jb25jYXQoc3R5bGlzUGx1Z2lucywgZmluYWxpemluZ1BsdWdpbnMpKTtcblxuICAgIHZhciBzdHlsaXMgPSBmdW5jdGlvbiBzdHlsaXMoc3R5bGVzKSB7XG4gICAgICByZXR1cm4gc2VyaWFsaXplKGNvbXBpbGUoc3R5bGVzKSwgc2VyaWFsaXplcik7XG4gICAgfTtcblxuICAgIF9pbnNlcnQgPSBmdW5jdGlvblxuICAgICAgLyo6IHZvaWQgKi9cbiAgICBpbnNlcnQoc2VsZWN0b3JcbiAgICAvKjogc3RyaW5nICovXG4gICAgLCBzZXJpYWxpemVkXG4gICAgLyo6IFNlcmlhbGl6ZWRTdHlsZXMgKi9cbiAgICAsIHNoZWV0XG4gICAgLyo6IFN0eWxlU2hlZXQgKi9cbiAgICAsIHNob3VsZENhY2hlXG4gICAgLyo6IGJvb2xlYW4gKi9cbiAgICApIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBzdHlsaXMoc2VsZWN0b3IgPyBzZWxlY3RvciArIFwie1wiICsgc2VyaWFsaXplZC5zdHlsZXMgKyBcIn1cIiA6IHNlcmlhbGl6ZWQuc3R5bGVzKTtcblxuICAgICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB2YXIgY2FjaGVcbiAgLyo6IEVtb3Rpb25DYWNoZSAqL1xuICA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwgImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikge1xuICAgIGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgdCA9IGFyZ3VtZW50c1tlXTtcbiAgICAgIGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZXhwb3J0IHsgX2V4dGVuZHMgYXMgZGVmYXVsdCB9OyIsICJ2YXIgaXNCcm93c2VyID0gdHJ1ZTtcblxuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWVzKSB7XG4gIHZhciByYXdDbGFzc05hbWUgPSAnJztcbiAgY2xhc3NOYW1lcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGlmIChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSArIFwiO1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmF3Q2xhc3NOYW1lICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByYXdDbGFzc05hbWU7XG59XG52YXIgcmVnaXN0ZXJTdHlsZXMgPSBmdW5jdGlvbiByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmICggLy8gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSByZWdpc3RlcmVkIGNhY2hlIGlmIHRoZVxuICAvLyBjbGFzcyBuYW1lIGNvdWxkIGJlIHVzZWQgZnVydGhlciBkb3duXG4gIC8vIHRoZSB0cmVlIGJ1dCBpZiBpdCdzIGEgc3RyaW5nIHRhZywgd2Uga25vdyBpdCB3b24ndFxuICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGFkZCBpdCB0byByZWdpc3RlcmVkIGNhY2hlLlxuICAvLyB0aGlzIGltcHJvdmVzIG1lbW9yeSB1c2FnZSBzaW5jZSB3ZSBjYW4gYXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgc3R5bGUgc3RyaW5nXG4gIChpc1N0cmluZ1RhZyA9PT0gZmFsc2UgfHwgLy8gd2UgbmVlZCB0byBhbHdheXMgc3RvcmUgaXQgaWYgd2UncmUgaW4gY29tcGF0IG1vZGUgYW5kXG4gIC8vIGluIG5vZGUgc2luY2UgZW1vdGlvbi1zZXJ2ZXIgcmVsaWVzIG9uIHdoZXRoZXIgYSBzdHlsZSBpcyBpblxuICAvLyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBrbm93IHdoZXRoZXIgYSBzdHlsZSBpcyBnbG9iYWwgb3Igbm90XG4gIC8vIGFsc28sIG5vdGUgdGhhdCB0aGlzIGNoZWNrIHdpbGwgYmUgZGVhZCBjb2RlIGVsaW1pbmF0ZWQgaW4gdGhlIGJyb3dzZXJcbiAgaXNCcm93c2VyID09PSBmYWxzZSApICYmIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gIH1cbn07XG52YXIgaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VyaWFsaXplZDtcblxuICAgIGRvIHtcbiAgICAgIGNhY2hlLmluc2VydChzZXJpYWxpemVkID09PSBjdXJyZW50ID8gXCIuXCIgKyBjbGFzc05hbWUgOiAnJywgY3VycmVudCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMgfTtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWFwcGxlYnkvc21oYXNoZXIvYmxvYi82MWEwNTMwZjI4Mjc3ZjJlODUwYmZjMzk2MDBjZTYxZDAyYjUxOGRlL3NyYy9NdXJtdXJIYXNoMi5jcHAjTDM3LUw4NlxuZnVuY3Rpb24gbXVybXVyMihzdHIpIHtcbiAgLy8gJ20nIGFuZCAncicgYXJlIG1peGluZyBjb25zdGFudHMgZ2VuZXJhdGVkIG9mZmxpbmUuXG4gIC8vIFRoZXkncmUgbm90IHJlYWxseSAnbWFnaWMnLCB0aGV5IGp1c3QgaGFwcGVuIHRvIHdvcmsgd2VsbC5cbiAgLy8gY29uc3QgbSA9IDB4NWJkMWU5OTU7XG4gIC8vIGNvbnN0IHIgPSAyNDtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaFxuICB2YXIgaCA9IDA7IC8vIE1peCA0IGJ5dGVzIGF0IGEgdGltZSBpbnRvIHRoZSBoYXNoXG5cbiAgdmFyIGssXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgZm9yICg7IGxlbiA+PSA0OyArK2ksIGxlbiAtPSA0KSB7XG4gICAgayA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0O1xuICAgIGsgPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICAgIGsgXj1cbiAgICAvKiBrID4+PiByOiAqL1xuICAgIGsgPj4+IDI0O1xuICAgIGggPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpIF5cbiAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBIYW5kbGUgdGhlIGxhc3QgZmV3IGJ5dGVzIG9mIHRoZSBpbnB1dCBhcnJheVxuXG5cbiAgc3dpdGNoIChsZW4pIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblxuICAgIGNhc2UgMjpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cbiAgICBjYXNlIDE6XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIGggPVxuICAgICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBEbyBhIGZldyBmaW5hbCBtaXhlcyBvZiB0aGUgaGFzaCB0byBlbnN1cmUgdGhlIGxhc3QgZmV3XG4gIC8vIGJ5dGVzIGFyZSB3ZWxsLWluY29ycG9yYXRlZC5cblxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPVxuICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIHJldHVybiAoKGggXiBoID4+PiAxNSkgPj4+IDApLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IHsgbXVybXVyMiBhcyBkZWZhdWx0IH07XG4iLCAidmFyIHVuaXRsZXNzS2V5cyA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IDEsXG4gIGFzcGVjdFJhdGlvOiAxLFxuICBib3JkZXJJbWFnZU91dHNldDogMSxcbiAgYm9yZGVySW1hZ2VTbGljZTogMSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMSxcbiAgYm94RmxleDogMSxcbiAgYm94RmxleEdyb3VwOiAxLFxuICBib3hPcmRpbmFsR3JvdXA6IDEsXG4gIGNvbHVtbkNvdW50OiAxLFxuICBjb2x1bW5zOiAxLFxuICBmbGV4OiAxLFxuICBmbGV4R3JvdzogMSxcbiAgZmxleFBvc2l0aXZlOiAxLFxuICBmbGV4U2hyaW5rOiAxLFxuICBmbGV4TmVnYXRpdmU6IDEsXG4gIGZsZXhPcmRlcjogMSxcbiAgZ3JpZFJvdzogMSxcbiAgZ3JpZFJvd0VuZDogMSxcbiAgZ3JpZFJvd1NwYW46IDEsXG4gIGdyaWRSb3dTdGFydDogMSxcbiAgZ3JpZENvbHVtbjogMSxcbiAgZ3JpZENvbHVtbkVuZDogMSxcbiAgZ3JpZENvbHVtblNwYW46IDEsXG4gIGdyaWRDb2x1bW5TdGFydDogMSxcbiAgbXNHcmlkUm93OiAxLFxuICBtc0dyaWRSb3dTcGFuOiAxLFxuICBtc0dyaWRDb2x1bW46IDEsXG4gIG1zR3JpZENvbHVtblNwYW46IDEsXG4gIGZvbnRXZWlnaHQ6IDEsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG9wYWNpdHk6IDEsXG4gIG9yZGVyOiAxLFxuICBvcnBoYW5zOiAxLFxuICBzY2FsZTogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlzRGV2ZWxvcG1lbnQgPSBmYWxzZTtcblxudmFyIGh5cGhlbmF0ZVJlZ2V4ID0gL1tBLVpdfF5tcy9nO1xudmFyIGFuaW1hdGlvblJlZ2V4ID0gL19FTU9fKFteX10rPylfKFteXSo/KV9FTU9fL2c7XG5cbnZhciBpc0N1c3RvbVByb3BlcnR5ID0gZnVuY3Rpb24gaXNDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICByZXR1cm4gcHJvcGVydHkuY2hhckNvZGVBdCgxKSA9PT0gNDU7XG59O1xuXG52YXIgaXNQcm9jZXNzYWJsZVZhbHVlID0gZnVuY3Rpb24gaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nO1xufTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSAvKiAjX19QVVJFX18gKi9tZW1vaXplKGZ1bmN0aW9uIChzdHlsZU5hbWUpIHtcbiAgcmV0dXJuIGlzQ3VzdG9tUHJvcGVydHkoc3R5bGVOYW1lKSA/IHN0eWxlTmFtZSA6IHN0eWxlTmFtZS5yZXBsYWNlKGh5cGhlbmF0ZVJlZ2V4LCAnLSQmJykudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG52YXIgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgbmFtZTogcDEsXG4gICAgICAgICAgICAgIHN0eWxlczogcDIsXG4gICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgaWYgKHVuaXRsZXNzW2tleV0gIT09IDEgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JztcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSA9ICdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAnICsgJ0BlbW90aW9uL2JhYmVsLXBsdWdpbiwgdGhlIHN3YyBFbW90aW9uIHBsdWdpbiwgb3IgYW5vdGhlciBFbW90aW9uLWF3YXJlICcgKyAnY29tcGlsZXIgdHJhbnNmb3JtLic7XG5cbmZ1bmN0aW9uIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pIHtcbiAgaWYgKGludGVycG9sYXRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHZhciBjb21wb25lbnRTZWxlY3RvciA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKGNvbXBvbmVudFNlbGVjdG9yLl9fZW1vdGlvbl9zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudFNlbGVjdG9yO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICB2YXIga2V5ZnJhbWVzID0gaW50ZXJwb2xhdGlvbjtcblxuICAgICAgICBpZiAoa2V5ZnJhbWVzLmFuaW0gPT09IDEpIHtcbiAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICBuYW1lOiBrZXlmcmFtZXMubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczoga2V5ZnJhbWVzLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGtleWZyYW1lcy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlcmlhbGl6ZWRTdHlsZXMgPSBpbnRlcnBvbGF0aW9uO1xuXG4gICAgICAgIGlmIChzZXJpYWxpemVkU3R5bGVzLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBzZXJpYWxpemVkU3R5bGVzLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gc2VyaWFsaXplZFN0eWxlcy5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIGlmIChtZXJnZWRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzKTtcbiAgICAgICAgICBjdXJzb3IgPSBwcmV2aW91c0N1cnNvcjtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIHZhciBhc1N0cmluZyA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKHJlZ2lzdGVyZWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBhc1N0cmluZztcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2FzU3RyaW5nXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogYXNTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9iaikge1xuICB2YXIgc3RyaW5nID0gJyc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHJpbmcgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqW2ldKSArIFwiO1wiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGFzU3RyaW5nID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW2FzU3RyaW5nXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgcmVnaXN0ZXJlZFthc1N0cmluZ10gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUoYXNTdHJpbmcpKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCBhc1N0cmluZykgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZVtfaV0pKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO1xcbntdKylcXHMqKDt8JCkvZztcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbmZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCByZWdpc3RlcmVkLCBtZXJnZWRQcm9wcykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXS5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIHN0cmluZ01vZGUgPSB0cnVlO1xuICB2YXIgc3R5bGVzID0gJyc7XG4gIGN1cnNvciA9IHVuZGVmaW5lZDtcbiAgdmFyIHN0cmluZ3MgPSBhcmdzWzBdO1xuXG4gIGlmIChzdHJpbmdzID09IG51bGwgfHwgc3RyaW5ncy5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgc3RyaW5ncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGFzVGVtcGxhdGVTdHJpbmdzQXJyID0gc3RyaW5ncztcblxuICAgIHN0eWxlcyArPSBhc1RlbXBsYXRlU3RyaW5nc0FyclswXTtcbiAgfSAvLyB3ZSBzdGFydCBhdCAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZmlyc3QgYXJnXG5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgYXJnc1tpXSk7XG5cbiAgICBpZiAoc3RyaW5nTW9kZSkge1xuICAgICAgdmFyIHRlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICAgIHN0eWxlcyArPSB0ZW1wbGF0ZVN0cmluZ3NBcnJbaV07XG4gICAgfVxuICB9XG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufVxuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnZhciBzeW5jRmFsbGJhY2sgPSBmdW5jdGlvbiBzeW5jRmFsbGJhY2soY3JlYXRlKSB7XG4gIHJldHVybiBjcmVhdGUoKTtcbn07XG5cbnZhciB1c2VJbnNlcnRpb25FZmZlY3QgPSBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA/IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddIDogZmFsc2U7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBzeW5jRmFsbGJhY2s7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IFJlYWN0LnVzZUxheW91dEVmZmVjdDtcblxuZXhwb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrIH07XG4iLCAiaW1wb3J0IHsgaCBhcyBoYXNPd24sIEUgYXMgRW1vdGlvbiwgYyBhcyBjcmVhdGVFbW90aW9uUHJvcHMsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgVCBhcyBUaGVtZUNvbnRleHQsIGkgYXMgaXNEZXZlbG9wbWVudCB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTU0ODZjNTFjLmJyb3dzZXIuZXNtLmpzJztcbmV4cG9ydCB7IEMgYXMgQ2FjaGVQcm92aWRlciwgVCBhcyBUaGVtZUNvbnRleHQsIGEgYXMgVGhlbWVQcm92aWRlciwgXyBhcyBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUsIHUgYXMgdXNlVGhlbWUsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgYiBhcyB3aXRoVGhlbWUgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC01NDg2YzUxYy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBnZXRSZWdpc3RlcmVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5cbnZhciBqc3hcbi8qOiB0eXBlb2YgUmVhY3QuY3JlYXRlRWxlbWVudCAqL1xuPSBmdW5jdGlvbiBqc3hcbi8qOiB0eXBlb2YgUmVhY3QuY3JlYXRlRWxlbWVudCAqL1xuKHR5cGVcbi8qOiBSZWFjdC5FbGVtZW50VHlwZSAqL1xuLCBwcm9wc1xuLyo6IE9iamVjdCAqL1xuKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gIGlmIChwcm9wcyA9PSBudWxsIHx8ICFoYXNPd24uY2FsbChwcm9wcywgJ2NzcycpKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkobnVsbCwgY3JlYXRlRWxlbWVudEFyZ0FycmF5KTtcbn07XG5cbi8vIGluaXRpYWwgcmVuZGVyIGZyb20gYnJvd3NlciwgaW5zZXJ0QmVmb3JlIGNvbnRleHQuc2hlZXQudGFnc1swXSBvciBpZiBhIHN0eWxlIGhhc24ndCBiZWVuIGluc2VydGVkIHRoZXJlIHlldCwgYXBwZW5kQ2hpbGRcbi8vIGluaXRpYWwgY2xpZW50LXNpZGUgcmVuZGVyIGZyb20gU1NSLCB1c2UgcGxhY2Ugb2YgaHlkcmF0aW5nIHRhZ1xuXG52YXIgR2xvYmFsXG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8XG5HbG9iYWxQcm9wc1xuPiAqL1xuPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wc1xuLyo6IEdsb2JhbFByb3BzICovXG4sIGNhY2hlKSB7XG5cbiAgdmFyIHN0eWxlcyA9IHByb3BzLnN0eWxlcztcbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoW3N0eWxlc10sIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcbiAgLy8gYnV0IGl0IGlzIGJhc2VkIG9uIGEgY29uc3RhbnQgdGhhdCB3aWxsIG5ldmVyIGNoYW5nZSBhdCBydW50aW1lXG4gIC8vIGl0J3MgZWZmZWN0aXZlbHkgbGlrZSBoYXZpbmcgdHdvIGltcGxlbWVudGF0aW9ucyBhbmQgc3dpdGNoaW5nIHRoZW0gb3V0XG4gIC8vIHNvIGl0J3Mgbm90IGFjdHVhbGx5IGJyZWFraW5nIGFueXRoaW5nXG5cblxuICB2YXIgc2hlZXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIga2V5ID0gY2FjaGUua2V5ICsgXCItZ2xvYmFsXCI7IC8vIHVzZSBjYXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vaXNzdWVzLzI2NzVcblxuICAgIHZhciBzaGVldCA9IG5ldyBjYWNoZS5zaGVldC5jb25zdHJ1Y3Rvcih7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIG5vbmNlOiBjYWNoZS5zaGVldC5ub25jZSxcbiAgICAgIGNvbnRhaW5lcjogY2FjaGUuc2hlZXQuY29udGFpbmVyLFxuICAgICAgc3BlZWR5OiBjYWNoZS5zaGVldC5pc1NwZWVkeVxuICAgIH0pO1xuICAgIHZhciByZWh5ZHJhdGluZyA9IGZhbHNlO1xuICAgIHZhciBub2RlXG4gICAgLyo6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsKi9cbiAgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLWVtb3Rpb249XFxcIlwiICsga2V5ICsgXCIgXCIgKyBzZXJpYWxpemVkLm5hbWUgKyBcIlxcXCJdXCIpO1xuXG4gICAgaWYgKGNhY2hlLnNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICBzaGVldC5iZWZvcmUgPSBjYWNoZS5zaGVldC50YWdzWzBdO1xuICAgIH1cblxuICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICByZWh5ZHJhdGluZyA9IHRydWU7IC8vIGNsZWFyIHRoZSBoYXNoIHNvIHRoaXMgbm9kZSB3b24ndCBiZSByZWNvZ25pemFibGUgYXMgcmVoeWRyYXRhYmxlIGJ5IG90aGVyIDxHbG9iYWwvPnNcblxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIGtleSk7XG4gICAgICBzaGVldC5oeWRyYXRlKFtub2RlXSk7XG4gICAgfVxuXG4gICAgc2hlZXRSZWYuY3VycmVudCA9IFtzaGVldCwgcmVoeWRyYXRpbmddO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH07XG4gIH0sIFtjYWNoZV0pO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaGVldFJlZkN1cnJlbnQgPSBzaGVldFJlZi5jdXJyZW50O1xuICAgIHZhciBzaGVldCA9IHNoZWV0UmVmQ3VycmVudFswXSxcbiAgICAgICAgcmVoeWRyYXRpbmcgPSBzaGVldFJlZkN1cnJlbnRbMV07XG5cbiAgICBpZiAocmVoeWRyYXRpbmcpIHtcbiAgICAgIHNoZWV0UmVmQ3VycmVudFsxXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXJpYWxpemVkLm5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaW5zZXJ0IGtleWZyYW1lc1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLm5leHQsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChzaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgLy8gaWYgdGhpcyBkb2Vzbid0IGV4aXN0IHRoZW4gaXQgd2lsbCBiZSBudWxsIHNvIHRoZSBzdHlsZSBlbGVtZW50IHdpbGwgYmUgYXBwZW5kZWRcbiAgICAgIHZhciBlbGVtZW50ID0gc2hlZXQudGFnc1tzaGVldC50YWdzLmxlbmd0aCAtIDFdLm5leHRFbGVtZW50U2libGluZztcbiAgICAgIHNoZWV0LmJlZm9yZSA9IGVsZW1lbnQ7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH1cblxuICAgIGNhY2hlLmluc2VydChcIlwiLCBzZXJpYWxpemVkLCBzaGVldCwgZmFsc2UpO1xuICB9LCBbY2FjaGUsIHNlcmlhbGl6ZWQubmFtZV0pO1xuICByZXR1cm4gbnVsbDtcbn0pO1xuXG4vKiBpbXBvcnQgdHlwZSB7IEludGVycG9sYXRpb24sIFNlcmlhbGl6ZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscycgKi9cblxuZnVuY3Rpb24gY3NzKClcbi8qOiBTZXJpYWxpemVkU3R5bGVzICovXG57XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG4vKlxudHlwZSBLZXlmcmFtZXMgPSB7fFxuICBuYW1lOiBzdHJpbmcsXG4gIHN0eWxlczogc3RyaW5nLFxuICBhbmltOiAxLFxuICB0b1N0cmluZzogKCkgPT4gc3RyaW5nXG58fSAmIHN0cmluZ1xuKi9cblxudmFyIGtleWZyYW1lcyA9IGZ1bmN0aW9uXG4gIC8qOiBLZXlmcmFtZXMgKi9cbmtleWZyYW1lcygpIHtcbiAgdmFyIGluc2VydGFibGUgPSBjc3MuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB2YXIgbmFtZSA9IFwiYW5pbWF0aW9uLVwiICsgaW5zZXJ0YWJsZS5uYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxuLypcbnR5cGUgQ2xhc3NOYW1lQXJnID1cbiAgfCBzdHJpbmdcbiAgfCBib29sZWFuXG4gIHwgeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH1cbiAgfCBBcnJheTxDbGFzc05hbWVBcmc+XG4gIHwgbnVsbFxuICB8IHZvaWRcbiovXG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb25cbiAgLyo6IHN0cmluZyAqL1xuY2xhc3NuYW1lcyhhcmdzXG4vKjogQXJyYXk8Q2xhc3NOYW1lQXJnPiAqL1xuKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkXG4vKjogT2JqZWN0ICovXG4sIGNzc1xuLyo6ICguLi5hcmdzOiBBcnJheTxhbnk+KSA9PiBzdHJpbmcgKi9cbiwgY2xhc3NOYW1lXG4vKjogc3RyaW5nICovXG4pIHtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lKTtcblxuICBpZiAocmVnaXN0ZXJlZFN0eWxlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIHJldHVybiByYXdDbGFzc05hbWUgKyBjc3MocmVnaXN0ZXJlZFN0eWxlcyk7XG59XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZEFyciA9IF9yZWYuc2VyaWFsaXplZEFycjtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZEFycltpXSwgZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuLypcbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiAoe1xuICAgIGNzczogKC4uLmFyZ3M6IGFueSkgPT4gc3RyaW5nLFxuICAgIGN4OiAoLi4uYXJnczogQXJyYXk8Q2xhc3NOYW1lQXJnPikgPT4gc3RyaW5nLFxuICAgIHRoZW1lOiBPYmplY3RcbiAgfSkgPT4gUmVhY3QuTm9kZVxufSAqL1xuXG5cbnZhciBDbGFzc05hbWVzXG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8UHJvcHM+Ki9cbj0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIGlzRGV2ZWxvcG1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5leHBvcnQgeyBDbGFzc05hbWVzLCBHbG9iYWwsIGpzeCBhcyBjcmVhdGVFbGVtZW50LCBjc3MsIGpzeCwga2V5ZnJhbWVzIH07XG4iLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuLyoqXG4gKiBSZWFjdC5jbG9uZUVsZW1lbnQgZG9lcyBub3Qgd29yayBpZiB0aGUgY2xvbmVkIGVsZW1lbnQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIHRoZVxuICogYGNzc2AgcHJvcCAtIGFzIGEgcmVzdWx0LCB3ZSBuZWVkIHRvIHVzZSBganN4KClgIHRvIG1hbnVhbGx5IGNsb25lIHRoZSBlbGVtZW50XG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9pc3N1ZXMvMTQwNFxuICpcbiAqIE5PVEU6IFdlJ3JlIHN0aWxsIHVzaW5nL3Rlc3RpbmcgdGhpcyB1dGlsaXR5IGludGVybmFsbHksIHNvIHRoaXMgaXMgbm90IHlldCBhIHB1YmxpYyBBUElcbiAqL1xuXG5leHBvcnQgdmFyIGNsb25lRWxlbWVudFdpdGhDc3MgPSBmdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBjbG9uZWRFbGVtZW50ID0gZWxlbWVudC5wcm9wcy5fX0VNT1RJT05fVFlQRV9QTEVBU0VfRE9fTk9UX1VTRV9fIHx8IGVsZW1lbnQudHlwZTsgLy8gRU1PVElPTl9UWVBFIGhhbmRsZXMgbm9uLVJlYWN0IGVsZW1lbnRzIChuYXRpdmUgSlNYL0hUTUwgbm9kZXMpXG5cbiAgdmFyIGNsb25lZFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICBrZXk6IGVsZW1lbnQua2V5LFxuICAgIHJlZjogZWxlbWVudC5yZWZcbiAgfSwgZWxlbWVudC5wcm9wcyksIHByb3BzKTtcblxuICBpZiAocHJvcHMuY3NzIHx8IGVsZW1lbnQucHJvcHMuY3NzKSB7XG4gICAgY2xvbmVkUHJvcHMuY3NzID0gW2VsZW1lbnQucHJvcHMuY3NzLCBwcm9wcy5jc3NdO1xuICB9XG5cbiAgcmV0dXJuIGpzeChjbG9uZWRFbGVtZW50LCBjbG9uZWRQcm9wcyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuLypcbiAqIE1peGluIHRoYXQgaGlkZXMgZWxlbWVudHMgb2Zmc2NyZWVuIHRvIG9ubHkgYmUgcmVhZCBieSBzY3JlZW4gcmVhZGVyXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNTEzMCBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNTE1MiBmb3IgbW9yZSBpbmZvXG4gKi9cblxuZXhwb3J0IHZhciBldWlTY3JlZW5SZWFkZXJPbmx5ID0gZnVuY3Rpb24gZXVpU2NyZWVuUmVhZGVyT25seSgpIHtcbiAgcmV0dXJuIFwiXFxuICAvLyBUYWtlIHRoZSBlbGVtZW50IG91dCBvZiB0aGUgbGF5b3V0XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAvLyBLZWVwIGl0IHZlcnRpY2FsbHkgaW5saW5lXFxuICB0b3A6IGF1dG87XFxuICAvLyBDaHJvbWUgcmVxdWlyZXMgYSBsZWZ0IHZhbHVlLCBhbmQgU2VsZW5pdW0gKHVzZWQgYnkgS2liYW5hJ3MgRlRSKSByZXF1aXJlcyBhbiBvZmYtc2NyZWVuIHBvc2l0aW9uIGZvciBpdHMgLmdldFZpc2libGVUZXh0KCkgdG8gbm90IHJlZ2lzdGVyIFNSLW9ubHkgdGV4dFxcbiAgbGVmdDogLTEwMDAwcHg7XFxuICAvLyBUaGUgZWxlbWVudCBtdXN0IGhhdmUgYSBzaXplIChmb3Igc29tZSBzY3JlZW4gcmVhZGVycylcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIC8vIEJ1dCByZWR1Y2UgdGhlIHZpc2libGUgc2l6ZSB0byBub3RoaW5nXFxuICBjbGlwOiByZWN0KDAgMCAwIDApO1xcbiAgY2xpcC1wYXRoOiBpbnNldCg1MCUpO1xcbiAgLy8gQW5kIGVuc3VyZSBubyBvdmVyZmxvd3Mgb2NjdXJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICAvLyBDaHJvbWUgcmVxdWlyZXMgdGhlIG5lZ2F0aXZlIG1hcmdpbiB0byBub3QgY2F1c2Ugb3ZlcmZsb3dzIG9mIHBhcmVudCBjb250YWluZXJzXFxuICBtYXJnaW46IC0xcHg7XFxuXCI7XG59O1xuLypcbiAqIFN0eWxlc1xuICovXG5cbmV4cG9ydCB2YXIgZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMoc2hvd09uRm9jdXMpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlTY3JlZW5SZWFkZXJPbmx5OiBzaG93T25Gb2N1cyA/IC8qI19fUFVSRV9fKi9jc3MoXCImOm5vdCg6Zm9jdXMpOm5vdCg6YWN0aXZlKXtcIiwgZXVpU2NyZWVuUmVhZGVyT25seSgpLCBcIjt9O2xhYmVsOmV1aVNjcmVlblJlYWRlck9ubHk7XCIpIDogLyojX19QVVJFX18qL2NzcyhldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO2xhYmVsOmV1aVNjcmVlblJlYWRlck9ubHk7XCIpXG4gIH07XG59OyIsICJjb25zdCBjYW5kaWRhdGVTZWxlY3RvcnMgPSBbXG4gICdpbnB1dCcsXG4gICdzZWxlY3QnLFxuICAndGV4dGFyZWEnLFxuICAnYVtocmVmXScsXG4gICdidXR0b24nLFxuICAnW3RhYmluZGV4XTpub3Qoc2xvdCknLFxuICAnYXVkaW9bY29udHJvbHNdJyxcbiAgJ3ZpZGVvW2NvbnRyb2xzXScsXG4gICdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKScsXG4gICdkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZScsXG4gICdkZXRhaWxzJyxcbl07XG5jb25zdCBjYW5kaWRhdGVTZWxlY3RvciA9IC8qICNfX1BVUkVfXyAqLyBjYW5kaWRhdGVTZWxlY3RvcnMuam9pbignLCcpO1xuXG5jb25zdCBOb0VsZW1lbnQgPSB0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IG1hdGNoZXMgPSBOb0VsZW1lbnRcbiAgPyBmdW5jdGlvbiAoKSB7fVxuICA6IEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgfHxcbiAgICBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fFxuICAgIEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtcblxuY29uc3QgZ2V0Um9vdE5vZGUgPVxuICAhTm9FbGVtZW50ICYmIEVsZW1lbnQucHJvdG90eXBlLmdldFJvb3ROb2RlXG4gICAgPyAoZWxlbWVudCkgPT4gZWxlbWVudC5nZXRSb290Tm9kZSgpXG4gICAgOiAoZWxlbWVudCkgPT4gZWxlbWVudC5vd25lckRvY3VtZW50O1xuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWwgY29udGFpbmVyIHRvIGNoZWNrIGluXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVDb250YWluZXIgYWRkIGNvbnRhaW5lciB0byBjaGVja1xuICogQHBhcmFtIHsobm9kZTogRWxlbWVudCkgPT4gYm9vbGVhbn0gZmlsdGVyIGZpbHRlciBjYW5kaWRhdGVzXG4gKiBAcmV0dXJucyB7RWxlbWVudFtdfVxuICovXG5jb25zdCBnZXRDYW5kaWRhdGVzID0gZnVuY3Rpb24gKGVsLCBpbmNsdWRlQ29udGFpbmVyLCBmaWx0ZXIpIHtcbiAgbGV0IGNhbmRpZGF0ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoXG4gICAgZWwucXVlcnlTZWxlY3RvckFsbChjYW5kaWRhdGVTZWxlY3RvcilcbiAgKTtcbiAgaWYgKGluY2x1ZGVDb250YWluZXIgJiYgbWF0Y2hlcy5jYWxsKGVsLCBjYW5kaWRhdGVTZWxlY3RvcikpIHtcbiAgICBjYW5kaWRhdGVzLnVuc2hpZnQoZWwpO1xuICB9XG4gIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmZpbHRlcihmaWx0ZXIpO1xuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbi8qKlxuICogQGNhbGxiYWNrIEdldFNoYWRvd1Jvb3RcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCB0byBjaGVjayBmb3Igc2hhZG93IHJvb3RcbiAqIEByZXR1cm5zIHtTaGFkb3dSb290fGJvb2xlYW59IFNoYWRvd1Jvb3QgaWYgYXZhaWxhYmxlIG9yIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBhIHNoYWRvd1Jvb3QgaXMgYXR0YWNoZWQgYnV0IG5vdCBhdmFpbGFibGUuXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgU2hhZG93Um9vdEZpbHRlclxuICogQHBhcmFtIHtFbGVtZW50fSBzaGFkb3dIb3N0Tm9kZSB0aGUgZWxlbWVudCB3aGljaCBjb250YWlucyBzaGFkb3cgY29udGVudFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgYSBzaGFkb3cgcm9vdCBjb3VsZCBwb3RlbnRpYWxseSBjb250YWluIHZhbGlkIGNhbmRpZGF0ZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYW5kaWRhdGVzU2NvcGVcbiAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gc2NvcGUgY29udGFpbnMgaW5uZXIgY2FuZGlkYXRlc1xuICogQHByb3BlcnR5IHtFbGVtZW50W119IGNhbmRpZGF0ZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEl0ZXJhdGl2ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7R2V0U2hhZG93Um9vdHxib29sZWFufSBnZXRTaGFkb3dSb290IHRydWUgaWYgc2hhZG93IHN1cHBvcnQgaXMgZW5hYmxlZDsgZmFsc3kgaWYgbm90O1xuICogIGlmIGEgZnVuY3Rpb24sIGltcGxpZXMgc2hhZG93IHN1cHBvcnQgaXMgZW5hYmxlZCBhbmQgZWl0aGVyIHJldHVybnMgdGhlIHNoYWRvdyByb290IG9mIGFuIGVsZW1lbnRcbiAqICBvciBhIGJvb2xlYW4gc3RhdGluZyBpZiBpdCBoYXMgYW4gdW5kaXNjbG9zZWQgc2hhZG93IHJvb3RcbiAqIEBwcm9wZXJ0eSB7KG5vZGU6IEVsZW1lbnQpID0+IGJvb2xlYW59IGZpbHRlciBmaWx0ZXIgY2FuZGlkYXRlc1xuICogQHByb3BlcnR5IHtib29sZWFufSBmbGF0dGVuIGlmIHRydWUgdGhlbiByZXN1bHQgd2lsbCBmbGF0dGVuIGFueSBDYW5kaWRhdGVzU2NvcGUgaW50byB0aGUgcmV0dXJuZWQgbGlzdFxuICogQHByb3BlcnR5IHtTaGFkb3dSb290RmlsdGVyfSBzaGFkb3dSb290RmlsdGVyIGZpbHRlciBzaGFkb3cgcm9vdHM7XG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnRbXX0gZWxlbWVudHMgbGlzdCBvZiBlbGVtZW50IGNvbnRhaW5lcnMgdG8gbWF0Y2ggY2FuZGlkYXRlcyBmcm9tXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVDb250YWluZXIgYWRkIGNvbnRhaW5lciBsaXN0IHRvIGNoZWNrXG4gKiBAcGFyYW0ge0l0ZXJhdGl2ZU9wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtBcnJheS48RWxlbWVudHxDYW5kaWRhdGVzU2NvcGU+fVxuICovXG5jb25zdCBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkgPSBmdW5jdGlvbiAoXG4gIGVsZW1lbnRzLFxuICBpbmNsdWRlQ29udGFpbmVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtdO1xuICBjb25zdCBlbGVtZW50c1RvQ2hlY2sgPSBBcnJheS5mcm9tKGVsZW1lbnRzKTtcbiAgd2hpbGUgKGVsZW1lbnRzVG9DaGVjay5sZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNUb0NoZWNrLnNoaWZ0KCk7XG4gICAgaWYgKGVsZW1lbnQudGFnTmFtZSA9PT0gJ1NMT1QnKSB7XG4gICAgICAvLyBhZGQgc2hhZG93IGRvbSBzbG90IHNjb3BlIChzbG90IGl0c2VsZiBjYW5ub3QgYmUgZm9jdXNhYmxlKVxuICAgICAgY29uc3QgYXNzaWduZWQgPSBlbGVtZW50LmFzc2lnbmVkRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhc3NpZ25lZC5sZW5ndGggPyBhc3NpZ25lZCA6IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgICBjb25zdCBuZXN0ZWRDYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KGNvbnRlbnQsIHRydWUsIG9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMuZmxhdHRlbikge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goLi4ubmVzdGVkQ2FuZGlkYXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICAgIHNjb3BlOiBlbGVtZW50LFxuICAgICAgICAgIGNhbmRpZGF0ZXM6IG5lc3RlZENhbmRpZGF0ZXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjaGVjayBjYW5kaWRhdGUgZWxlbWVudFxuICAgICAgY29uc3QgdmFsaWRDYW5kaWRhdGUgPSBtYXRjaGVzLmNhbGwoZWxlbWVudCwgY2FuZGlkYXRlU2VsZWN0b3IpO1xuICAgICAgaWYgKFxuICAgICAgICB2YWxpZENhbmRpZGF0ZSAmJlxuICAgICAgICBvcHRpb25zLmZpbHRlcihlbGVtZW50KSAmJlxuICAgICAgICAoaW5jbHVkZUNvbnRhaW5lciB8fCAhZWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCkpXG4gICAgICApIHtcbiAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBpdGVyYXRlIG92ZXIgc2hhZG93IGNvbnRlbnQgaWYgcG9zc2libGVcbiAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPVxuICAgICAgICBlbGVtZW50LnNoYWRvd1Jvb3QgfHxcbiAgICAgICAgLy8gY2hlY2sgZm9yIGFuIHVuZGlzY2xvc2VkIHNoYWRvd1xuICAgICAgICAodHlwZW9mIG9wdGlvbnMuZ2V0U2hhZG93Um9vdCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgIG9wdGlvbnMuZ2V0U2hhZG93Um9vdChlbGVtZW50KSk7XG5cbiAgICAgIGNvbnN0IHZhbGlkU2hhZG93Um9vdCA9XG4gICAgICAgICFvcHRpb25zLnNoYWRvd1Jvb3RGaWx0ZXIgfHwgb3B0aW9ucy5zaGFkb3dSb290RmlsdGVyKGVsZW1lbnQpO1xuXG4gICAgICBpZiAoc2hhZG93Um9vdCAmJiB2YWxpZFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgLy8gYWRkIHNoYWRvdyBkb20gc2NvcGUgSUlGIGEgc2hhZG93IHJvb3Qgbm9kZSB3YXMgZ2l2ZW47IG90aGVyd2lzZSwgYW4gdW5kaXNjbG9zZWRcbiAgICAgICAgLy8gIHNoYWRvdyBleGlzdHMsIHNvIGxvb2sgYXQgbGlnaHQgZG9tIGNoaWxkcmVuIGFzIGZhbGxiYWNrIEJVVCBjcmVhdGUgYSBzY29wZSBmb3IgYW55XG4gICAgICAgIC8vICBjaGlsZCBjYW5kaWRhdGVzIGZvdW5kIGJlY2F1c2UgdGhleSdyZSBsaWtlbHkgc2xvdHRlZCBlbGVtZW50cyAoZWxlbWVudHMgdGhhdCBhcmVcbiAgICAgICAgLy8gIGNoaWxkcmVuIG9mIHRoZSB3ZWIgY29tcG9uZW50IGVsZW1lbnQgKHdoaWNoIGhhcyB0aGUgc2hhZG93KSwgaW4gdGhlIGxpZ2h0IGRvbSwgYnV0XG4gICAgICAgIC8vICBzbG90dGVkIHNvbWV3aGVyZSBfaW5zaWRlXyB0aGUgdW5kaXNjbG9zZWQgc2hhZG93KSAtLSB0aGUgc2NvcGUgaXMgY3JlYXRlZCBiZWxvdyxcbiAgICAgICAgLy8gIF9hZnRlcl8gd2UgcmV0dXJuIGZyb20gdGhpcyByZWN1cnNpdmUgY2FsbFxuICAgICAgICBjb25zdCBuZXN0ZWRDYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KFxuICAgICAgICAgIHNoYWRvd1Jvb3QgPT09IHRydWUgPyBlbGVtZW50LmNoaWxkcmVuIDogc2hhZG93Um9vdC5jaGlsZHJlbixcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5mbGF0dGVuKSB7XG4gICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKC4uLm5lc3RlZENhbmRpZGF0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgICAgICBzY29wZTogZWxlbWVudCxcbiAgICAgICAgICAgIGNhbmRpZGF0ZXM6IG5lc3RlZENhbmRpZGF0ZXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoZXJlJ3Mgbm90IHNoYWRvdyBzbyBqdXN0IGRpZyBpbnRvIHRoZSBlbGVtZW50J3MgKGxpZ2h0IGRvbSkgY2hpbGRyZW5cbiAgICAgICAgLy8gIF9fd2l0aG91dF9fIGdpdmluZyB0aGUgZWxlbWVudCBzcGVjaWFsIHNjb3BlIHRyZWF0bWVudFxuICAgICAgICBlbGVtZW50c1RvQ2hlY2sudW5zaGlmdCguLi5lbGVtZW50LmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbmRpZGF0ZXM7XG59O1xuXG5jb25zdCBnZXRUYWJpbmRleCA9IGZ1bmN0aW9uIChub2RlLCBpc1Njb3BlKSB7XG4gIGlmIChub2RlLnRhYkluZGV4IDwgMCkge1xuICAgIC8vIGluIENocm9tZSwgPGRldGFpbHMvPiwgPGF1ZGlvIGNvbnRyb2xzLz4gYW5kIDx2aWRlbyBjb250cm9scy8+IGVsZW1lbnRzIGdldCBhIGRlZmF1bHRcbiAgICAvLyBgdGFiSW5kZXhgIG9mIC0xIHdoZW4gdGhlICd0YWJpbmRleCcgYXR0cmlidXRlIGlzbid0IHNwZWNpZmllZCBpbiB0aGUgRE9NLFxuICAgIC8vIHlldCB0aGV5IGFyZSBzdGlsbCBwYXJ0IG9mIHRoZSByZWd1bGFyIHRhYiBvcmRlcjsgaW4gRkYsIHRoZXkgZ2V0IGEgZGVmYXVsdFxuICAgIC8vIGB0YWJJbmRleGAgb2YgMDsgc2luY2UgQ2hyb21lIHN0aWxsIHB1dHMgdGhvc2UgZWxlbWVudHMgaW4gdGhlIHJlZ3VsYXIgdGFiXG4gICAgLy8gb3JkZXIsIGNvbnNpZGVyIHRoZWlyIHRhYiBpbmRleCB0byBiZSAwLlxuICAgIC8vIEFsc28gYnJvd3NlcnMgZG8gbm90IHJldHVybiBgdGFiSW5kZXhgIGNvcnJlY3RseSBmb3IgY29udGVudEVkaXRhYmxlIG5vZGVzO1xuICAgIC8vIHNvIGlmIHRoZXkgZG9uJ3QgaGF2ZSBhIHRhYmluZGV4IGF0dHJpYnV0ZSBzcGVjaWZpY2FsbHkgc2V0LCBhc3N1bWUgaXQncyAwLlxuICAgIC8vXG4gICAgLy8gaXNTY29wZSBpcyBwb3NpdGl2ZSBmb3IgY3VzdG9tIGVsZW1lbnQgd2l0aCBzaGFkb3cgcm9vdCBvciBzbG90IHRoYXQgYnkgZGVmYXVsdFxuICAgIC8vIGhhdmUgdGFiSW5kZXggLTEsIGJ1dCBuZWVkIHRvIGJlIHNvcnRlZCBieSBkb2N1bWVudCBvcmRlciBpbiBvcmRlciBmb3IgdGhlaXJcbiAgICAvLyBjb250ZW50IHRvIGJlIGluc2VydGVkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG4gICAgaWYgKFxuICAgICAgKGlzU2NvcGUgfHxcbiAgICAgICAgL14oQVVESU98VklERU98REVUQUlMUykkLy50ZXN0KG5vZGUudGFnTmFtZSkgfHxcbiAgICAgICAgbm9kZS5pc0NvbnRlbnRFZGl0YWJsZSkgJiZcbiAgICAgIGlzTmFOKHBhcnNlSW50KG5vZGUuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpLCAxMCkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZS50YWJJbmRleDtcbn07XG5cbmNvbnN0IHNvcnRPcmRlcmVkVGFiYmFibGVzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgcmV0dXJuIGEudGFiSW5kZXggPT09IGIudGFiSW5kZXhcbiAgICA/IGEuZG9jdW1lbnRPcmRlciAtIGIuZG9jdW1lbnRPcmRlclxuICAgIDogYS50YWJJbmRleCAtIGIudGFiSW5kZXg7XG59O1xuXG5jb25zdCBpc0lucHV0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ0lOUFVUJztcbn07XG5cbmNvbnN0IGlzSGlkZGVuSW5wdXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gaXNJbnB1dChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdoaWRkZW4nO1xufTtcblxuY29uc3QgaXNEZXRhaWxzV2l0aFN1bW1hcnkgPSBmdW5jdGlvbiAobm9kZSkge1xuICBjb25zdCByID1cbiAgICBub2RlLnRhZ05hbWUgPT09ICdERVRBSUxTJyAmJlxuICAgIEFycmF5LnByb3RvdHlwZS5zbGljZVxuICAgICAgLmFwcGx5KG5vZGUuY2hpbGRyZW4pXG4gICAgICAuc29tZSgoY2hpbGQpID0+IGNoaWxkLnRhZ05hbWUgPT09ICdTVU1NQVJZJyk7XG4gIHJldHVybiByO1xufTtcblxuY29uc3QgZ2V0Q2hlY2tlZFJhZGlvID0gZnVuY3Rpb24gKG5vZGVzLCBmb3JtKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobm9kZXNbaV0uY2hlY2tlZCAmJiBub2Rlc1tpXS5mb3JtID09PSBmb3JtKSB7XG4gICAgICByZXR1cm4gbm9kZXNbaV07XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBpc1RhYmJhYmxlUmFkaW8gPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAoIW5vZGUubmFtZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IHJhZGlvU2NvcGUgPSBub2RlLmZvcm0gfHwgZ2V0Um9vdE5vZGUobm9kZSk7XG4gIGNvbnN0IHF1ZXJ5UmFkaW9zID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gcmFkaW9TY29wZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJyArIG5hbWUgKyAnXCJdJ1xuICAgICk7XG4gIH07XG5cbiAgbGV0IHJhZGlvU2V0O1xuICBpZiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2Ygd2luZG93LkNTUyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUgPT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmFkaW9TZXQgPSBxdWVyeVJhZGlvcyh3aW5kb3cuQ1NTLmVzY2FwZShub2RlLm5hbWUpKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgcmFkaW9TZXQgPSBxdWVyeVJhZGlvcyhub2RlLm5hbWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdMb29rcyBsaWtlIHlvdSBoYXZlIGEgcmFkaW8gYnV0dG9uIHdpdGggYSBuYW1lIGF0dHJpYnV0ZSBjb250YWluaW5nIGludmFsaWQgQ1NTIHNlbGVjdG9yIGNoYXJhY3RlcnMgYW5kIG5lZWQgdGhlIENTUy5lc2NhcGUgcG9seWZpbGw6ICVzJyxcbiAgICAgICAgZXJyLm1lc3NhZ2VcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2hlY2tlZCA9IGdldENoZWNrZWRSYWRpbyhyYWRpb1NldCwgbm9kZS5mb3JtKTtcbiAgcmV0dXJuICFjaGVja2VkIHx8IGNoZWNrZWQgPT09IG5vZGU7XG59O1xuXG5jb25zdCBpc1JhZGlvID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIGlzSW5wdXQobm9kZSkgJiYgbm9kZS50eXBlID09PSAncmFkaW8nO1xufTtcblxuY29uc3QgaXNOb25UYWJiYWJsZVJhZGlvID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIGlzUmFkaW8obm9kZSkgJiYgIWlzVGFiYmFibGVSYWRpbyhub2RlKTtcbn07XG5cbmNvbnN0IGlzWmVyb0FyZWEgPSBmdW5jdGlvbiAobm9kZSkge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB3aWR0aCA9PT0gMCAmJiBoZWlnaHQgPT09IDA7XG59O1xuY29uc3QgaXNIaWRkZW4gPSBmdW5jdGlvbiAobm9kZSwgeyBkaXNwbGF5Q2hlY2ssIGdldFNoYWRvd1Jvb3QgfSkge1xuICAvLyBOT1RFOiB2aXNpYmlsaXR5IHdpbGwgYmUgYHVuZGVmaW5lZGAgaWYgbm9kZSBpcyBkZXRhY2hlZCBmcm9tIHRoZSBkb2N1bWVudFxuICAvLyAgKHNlZSBub3RlcyBhYm91dCB0aGlzIGZ1cnRoZXIgZG93biksIHdoaWNoIG1lYW5zIHdlIHdpbGwgY29uc2lkZXIgaXQgdmlzaWJsZVxuICAvLyAgKHRoaXMgaXMgbGVnYWN5IGJlaGF2aW9yIGZyb20gYSB2ZXJ5IGxvbmcgd2F5IGJhY2spXG4gIC8vIE5PVEU6IHdlIGNoZWNrIHRoaXMgcmVnYXJkbGVzcyBvZiBgZGlzcGxheUNoZWNrPVwibm9uZVwiYCBiZWNhdXNlIHRoaXMgaXMgYVxuICAvLyAgX3Zpc2liaWxpdHlfIGNoZWNrLCBub3QgYSBfZGlzcGxheV8gY2hlY2tcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUobm9kZSkudmlzaWJpbGl0eSA9PT0gJ2hpZGRlbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGlzRGlyZWN0U3VtbWFyeSA9IG1hdGNoZXMuY2FsbChub2RlLCAnZGV0YWlscz5zdW1tYXJ5OmZpcnN0LW9mLXR5cGUnKTtcbiAgY29uc3Qgbm9kZVVuZGVyRGV0YWlscyA9IGlzRGlyZWN0U3VtbWFyeSA/IG5vZGUucGFyZW50RWxlbWVudCA6IG5vZGU7XG4gIGlmIChtYXRjaGVzLmNhbGwobm9kZVVuZGVyRGV0YWlscywgJ2RldGFpbHM6bm90KFtvcGVuXSkgKicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBUaGUgcm9vdCBub2RlIGlzIHRoZSBzaGFkb3cgcm9vdCBpZiB0aGUgbm9kZSBpcyBpbiBhIHNoYWRvdyBET007IHNvbWUgZG9jdW1lbnQgb3RoZXJ3aXNlXG4gIC8vICAoYnV0IE5PVCBfdGhlXyBkb2N1bWVudDsgc2VlIHNlY29uZCAnSWYnIGNvbW1lbnQgYmVsb3cgZm9yIG1vcmUpLlxuICAvLyBJZiByb290Tm9kZSBpcyBzaGFkb3cgcm9vdCwgaXQnbGwgaGF2ZSBhIGhvc3QsIHdoaWNoIGlzIHRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBzaGFkb3dcbiAgLy8gIGlzIGF0dGFjaGVkLCBhbmQgdGhlIG9uZSB3ZSBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgaW4gdGhlIGRvY3VtZW50IG9yIG5vdCAoYmVjYXVzZSB0aGVcbiAgLy8gIHNoYWRvdywgYW5kIGFsbCBub2RlcyBpdCBjb250YWlucywgaXMgbmV2ZXIgY29uc2lkZXJlZCBpbiB0aGUgZG9jdW1lbnQgc2luY2Ugc2hhZG93c1xuICAvLyAgYmVoYXZlIGxpa2Ugc2VsZi1jb250YWluZWQgRE9NczsgYnV0IGlmIHRoZSBzaGFkb3cncyBIT1NULCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBkb2N1bWVudCxcbiAgLy8gIGlzIGhpZGRlbiwgb3IgaXMgbm90IGluIHRoZSBkb2N1bWVudCBpdHNlbGYgYnV0IGlzIGRldGFjaGVkLCBpdCB3aWxsIGFmZmVjdCB0aGUgc2hhZG93J3NcbiAgLy8gIHZpc2liaWxpdHksIGluY2x1ZGluZyBhbGwgdGhlIG5vZGVzIGl0IGNvbnRhaW5zKS4gVGhlIGhvc3QgY291bGQgYmUgYW55IG5vcm1hbCBub2RlLFxuICAvLyAgb3IgYSBjdXN0b20gZWxlbWVudCAoaS5lLiB3ZWIgY29tcG9uZW50KS4gRWl0aGVyIHdheSwgdGhhdCdzIHRoZSBvbmUgdGhhdCBpcyBjb25zaWRlcmVkXG4gIC8vICBwYXJ0IG9mIHRoZSBkb2N1bWVudCwgbm90IHRoZSBzaGFkb3cgcm9vdCwgbm9yIGFueSBvZiBpdHMgY2hpbGRyZW4gKGkuZS4gdGhlIG5vZGUgYmVpbmdcbiAgLy8gIHRlc3RlZCkuXG4gIC8vIElmIHJvb3ROb2RlIGlzIG5vdCBhIHNoYWRvdyByb290LCBpdCB3b24ndCBoYXZlIGEgaG9zdCwgYW5kIHNvIHJvb3ROb2RlIHNob3VsZCBiZSB0aGVcbiAgLy8gIGRvY3VtZW50IChwZXIgdGhlIGRvY3MpIGFuZCB3aGlsZSBpdCdzIGEgRG9jdW1lbnQtdHlwZSBvYmplY3QsIHRoYXQgZG9jdW1lbnQgZG9lcyBub3RcbiAgLy8gIGFwcGVhciB0byBiZSB0aGUgc2FtZSBhcyB0aGUgbm9kZSdzIGBvd25lckRvY3VtZW50YCBmb3Igc29tZSByZWFzb24sIHNvIGl0J3Mgc2FmZXJcbiAgLy8gIHRvIGlnbm9yZSB0aGUgcm9vdE5vZGUgYXQgdGhpcyBwb2ludCwgYW5kIHVzZSBgbm9kZS5vd25lckRvY3VtZW50YC4gT3RoZXJ3aXNlLFxuICAvLyAgdXNpbmcgYHJvb3ROb2RlLmNvbnRhaW5zKG5vZGUpYCB3aWxsIF9hbHdheXNfIGJlIHRydWUgd2UnbGwgZ2V0IGZhbHNlLXBvc2l0aXZlcyB3aGVuXG4gIC8vICBub2RlIGlzIGFjdHVhbGx5IGRldGFjaGVkLlxuICBjb25zdCBub2RlUm9vdEhvc3QgPSBnZXRSb290Tm9kZShub2RlKS5ob3N0O1xuICBjb25zdCBub2RlSXNBdHRhY2hlZCA9XG4gICAgbm9kZVJvb3RIb3N0Py5vd25lckRvY3VtZW50LmNvbnRhaW5zKG5vZGVSb290SG9zdCkgfHxcbiAgICBub2RlLm93bmVyRG9jdW1lbnQuY29udGFpbnMobm9kZSk7XG5cbiAgaWYgKCFkaXNwbGF5Q2hlY2sgfHwgZGlzcGxheUNoZWNrID09PSAnZnVsbCcpIHtcbiAgICBpZiAodHlwZW9mIGdldFNoYWRvd1Jvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBub2RlIHRvIGJlIGluIGFuIHVuZGlzY2xvc2VkIHNoYWRvdyBhbmQgdXNlIHRoZVxuICAgICAgLy8gICdub24temVyby1hcmVhJyBmYWxsYmFja1xuICAgICAgY29uc3Qgb3JpZ2luYWxOb2RlID0gbm9kZTtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlID0gZ2V0Um9vdE5vZGUobm9kZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJlbnRFbGVtZW50ICYmXG4gICAgICAgICAgIXBhcmVudEVsZW1lbnQuc2hhZG93Um9vdCAmJlxuICAgICAgICAgIGdldFNoYWRvd1Jvb3QocGFyZW50RWxlbWVudCkgPT09IHRydWUgLy8gY2hlY2sgaWYgdGhlcmUncyBhbiB1bmRpc2Nsb3NlZCBzaGFkb3dcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gbm9kZSBoYXMgYW4gdW5kaXNjbG9zZWQgc2hhZG93IHdoaWNoIG1lYW5zIHdlIGNhbiBvbmx5IHRyZWF0IGl0IGFzIGEgYmxhY2sgYm94LCBzbyB3ZVxuICAgICAgICAgIC8vICBmYWxsIGJhY2sgdG8gYSBub24temVyby1hcmVhIHRlc3RcbiAgICAgICAgICByZXR1cm4gaXNaZXJvQXJlYShub2RlKTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmFzc2lnbmVkU2xvdCkge1xuICAgICAgICAgIC8vIGl0ZXJhdGUgdXAgc2xvdFxuICAgICAgICAgIG5vZGUgPSBub2RlLmFzc2lnbmVkU2xvdDtcbiAgICAgICAgfSBlbHNlIGlmICghcGFyZW50RWxlbWVudCAmJiByb290Tm9kZSAhPT0gbm9kZS5vd25lckRvY3VtZW50KSB7XG4gICAgICAgICAgLy8gY3Jvc3Mgc2hhZG93IGJvdW5kYXJ5XG4gICAgICAgICAgbm9kZSA9IHJvb3ROb2RlLmhvc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaXRlcmF0ZSB1cCBub3JtYWwgZG9tXG4gICAgICAgICAgbm9kZSA9IHBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG9yaWdpbmFsTm9kZTtcbiAgICB9XG4gICAgLy8gZWxzZSwgYGdldFNoYWRvd1Jvb3RgIG1pZ2h0IGJlIHRydWUsIGJ1dCBhbGwgdGhhdCBkb2VzIGlzIGVuYWJsZSBzaGFkb3cgRE9NIHN1cHBvcnRcbiAgICAvLyAgKGkuZS4gaXQgZG9lcyBub3QgYWxzbyBwcmVzdW1lIHRoYXQgYWxsIG5vZGVzIG1pZ2h0IGhhdmUgdW5kaXNjbG9zZWQgc2hhZG93cyk7IG9yXG4gICAgLy8gIGl0IG1pZ2h0IGJlIGEgZmFsc3kgdmFsdWUsIHdoaWNoIG1lYW5zIHNoYWRvdyBET00gc3VwcG9ydCBpcyBkaXNhYmxlZFxuXG4gICAgLy8gU2luY2Ugd2UgZGlkbid0IGZpbmQgaXQgc2l0dGluZyBpbiBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgKG9yIHNoYWRvd3MgYXJlIGRpc2FibGVkKVxuICAgIC8vICBub3cgd2UgY2FuIGp1c3QgdGVzdCB0byBzZWUgaWYgaXQgd291bGQgbm9ybWFsbHkgYmUgdmlzaWJsZSBvciBub3QsIHByb3ZpZGVkIGl0J3NcbiAgICAvLyAgYXR0YWNoZWQgdG8gdGhlIG1haW4gZG9jdW1lbnQuXG4gICAgLy8gTk9URTogV2UgbXVzdCBjb25zaWRlciBjYXNlIHdoZXJlIG5vZGUgaXMgaW5zaWRlIGEgc2hhZG93IERPTSBhbmQgZ2l2ZW4gZGlyZWN0bHkgdG9cbiAgICAvLyAgYGlzVGFiYmFibGUoKWAgb3IgYGlzRm9jdXNhYmxlKClgIC0tIHJlZ2FyZGxlc3Mgb2YgYGdldFNoYWRvd1Jvb3RgIG9wdGlvbiBzZXR0aW5nLlxuXG4gICAgaWYgKG5vZGVJc0F0dGFjaGVkKSB7XG4gICAgICAvLyB0aGlzIHdvcmtzIHdoZXJldmVyIHRoZSBub2RlIGlzOiBpZiB0aGVyZSdzIGF0IGxlYXN0IG9uZSBjbGllbnQgcmVjdCwgaXQnc1xuICAgICAgLy8gIHNvbWVob3cgZGlzcGxheWVkOyBpdCBhbHNvIGNvdmVycyB0aGUgQ1NTICdkaXNwbGF5OiBjb250ZW50cycgY2FzZSB3aGVyZSB0aGVcbiAgICAgIC8vICBub2RlIGl0c2VsZiBpcyBoaWRkZW4gaW4gcGxhY2Ugb2YgaXRzIGNvbnRlbnRzOyBhbmQgdGhlcmUncyBubyBuZWVkIHRvIHNlYXJjaFxuICAgICAgLy8gIHVwIHRoZSBoaWVyYXJjaHkgZWl0aGVyXG4gICAgICByZXR1cm4gIW5vZGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgdGhlIG5vZGUgaXNuJ3QgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50LCB3aGljaCBtZWFucyB0aGUgYGdldENsaWVudFJlY3RzKClgXG4gICAgLy8gIEFQSSB3aWxsIF9fYWx3YXlzX18gcmV0dXJuIHplcm8gcmVjdHMgKHRoaXMgY2FuIGhhcHBlbiwgZm9yIGV4YW1wbGUsIGlmIFJlYWN0XG4gICAgLy8gIGlzIHVzZWQgdG8gcmVuZGVyIG5vZGVzIG9udG8gYSBkZXRhY2hlZCB0cmVlLCBhcyBjb25maXJtZWQgaW4gdGhpcyB0aHJlYWQ6XG4gICAgLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvOTExNyNpc3N1ZWNvbW1lbnQtMjg0MjI4ODcwKVxuICAgIC8vXG4gICAgLy8gSXQgYWxzbyBtZWFucyB0aGF0IGV2ZW4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZGlzcGxheSB3aWxsIHJldHVybiBgdW5kZWZpbmVkYFxuICAgIC8vICBiZWNhdXNlIHN0eWxlcyBhcmUgb25seSBjb21wdXRlZCBmb3Igbm9kZXMgdGhhdCBhcmUgaW4gdGhlIGRvY3VtZW50LlxuICAgIC8vXG4gICAgLy8gTk9URTogVEhJUyBIQVMgQkVFTiBUSEUgQ0FTRSBGT1IgWUVBUlMuIEl0IGlzIG5vdCBuZXcsIG5vciBpcyBpdCBjYXVzZWQgYnkgdGFiYmFibGVcbiAgICAvLyAgc29tZWhvdy4gVGhvdWdoIGl0IHdhcyBuZXZlciBzdGF0ZWQgb2ZmaWNpYWxseSwgYW55b25lIHdobyBoYXMgZXZlciB1c2VkIHRhYmJhYmxlXG4gICAgLy8gIEFQSXMgb24gbm9kZXMgaW4gZGV0YWNoZWQgY29udGFpbmVycyBoYXMgYWN0dWFsbHkgaW1wbGljaXRseSB1c2VkIHRhYmJhYmxlIGluIHdoYXRcbiAgICAvLyAgd2FzIGxhdGVyIChhcyBvZiB2NS4yLjAgb24gQXByIDksIDIwMjEpIGNhbGxlZCBgZGlzcGxheUNoZWNrPVwibm9uZVwiYCBtb2RlIC0tIGVzc2VudGlhbGx5XG4gICAgLy8gIGNvbnNpZGVyaW5nIF9fZXZlcnl0aGluZ19fIHRvIGJlIHZpc2libGUgYmVjYXVzZSBvZiB0aGUgaW5uYWJpbGl0eSB0byBkZXRlcm1pbmUgc3R5bGVzLlxuICB9IGVsc2UgaWYgKGRpc3BsYXlDaGVjayA9PT0gJ25vbi16ZXJvLWFyZWEnKSB7XG4gICAgLy8gTk9URTogRXZlbiB0aG91Z2ggdGhpcyB0ZXN0cyB0aGF0IHRoZSBub2RlJ3MgY2xpZW50IHJlY3QgaXMgbm9uLXplcm8gdG8gZGV0ZXJtaW5lXG4gICAgLy8gIHdoZXRoZXIgaXQncyBkaXNwbGF5ZWQsIGFuZCB0aGF0IGEgZGV0YWNoZWQgbm9kZSB3aWxsIF9fYWx3YXlzX18gaGF2ZSBhIHplcm8tYXJlYVxuICAgIC8vICBjbGllbnQgcmVjdCwgd2UgZG9uJ3Qgc3BlY2lhbC1jYXNlIGZvciB3aGV0aGVyIHRoZSBub2RlIGlzIGF0dGFjaGVkIG9yIG5vdC4gSW5cbiAgICAvLyAgdGhpcyBtb2RlLCB3ZSBkbyB3YW50IHRvIGNvbnNpZGVyIG5vZGVzIHRoYXQgaGF2ZSBhIHplcm8gYXJlYSB0byBiZSBoaWRkZW4gYXQgYWxsXG4gICAgLy8gIHRpbWVzLCBhbmQgdGhhdCBpbmNsdWRlcyBhdHRhY2hlZCBvciBub3QuXG4gICAgcmV0dXJuIGlzWmVyb0FyZWEobm9kZSk7XG4gIH1cblxuICAvLyB2aXNpYmxlLCBhcyBmYXIgYXMgd2UgY2FuIHRlbGwsIG9yIHBlciBjdXJyZW50IGBkaXNwbGF5Q2hlY2tgIG1vZGVcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gZm9ybSBmaWVsZHMgKG5lc3RlZCkgaW5zaWRlIGEgZGlzYWJsZWQgZmllbGRzZXQgYXJlIG5vdCBmb2N1c2FibGUvdGFiYmFibGVcbi8vICB1bmxlc3MgdGhleSBhcmUgaW4gdGhlIF9maXJzdF8gPGxlZ2VuZD4gZWxlbWVudCBvZiB0aGUgdG9wLW1vc3QgZGlzYWJsZWRcbi8vICBmaWVsZHNldFxuY29uc3QgaXNEaXNhYmxlZEZyb21GaWVsZHNldCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmICgvXihJTlBVVHxCVVRUT058U0VMRUNUfFRFWFRBUkVBKSQvLnRlc3Qobm9kZS50YWdOYW1lKSkge1xuICAgIGxldCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuICAgIC8vIGNoZWNrIGlmIGBub2RlYCBpcyBjb250YWluZWQgaW4gYSBkaXNhYmxlZCA8ZmllbGRzZXQ+XG4gICAgd2hpbGUgKHBhcmVudE5vZGUpIHtcbiAgICAgIGlmIChwYXJlbnROb2RlLnRhZ05hbWUgPT09ICdGSUVMRFNFVCcgJiYgcGFyZW50Tm9kZS5kaXNhYmxlZCkge1xuICAgICAgICAvLyBsb29rIGZvciB0aGUgZmlyc3QgPGxlZ2VuZD4gYW1vbmcgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNhYmxlZCA8ZmllbGRzZXQ+XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50Tm9kZS5jaGlsZHJlbi5pdGVtKGkpO1xuICAgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IDxsZWdlbmQ+IChpbiBkb2N1bWVudCBvcmRlcikgaXMgZm91bmRcbiAgICAgICAgICBpZiAoY2hpbGQudGFnTmFtZSA9PT0gJ0xFR0VORCcpIHtcbiAgICAgICAgICAgIC8vIGlmIGl0cyBwYXJlbnQgPGZpZWxkc2V0PiBpcyBub3QgbmVzdGVkIGluIGFub3RoZXIgZGlzYWJsZWQgPGZpZWxkc2V0PixcbiAgICAgICAgICAgIC8vIHJldHVybiB3aGV0aGVyIGBub2RlYCBpcyBhIGRlc2NlbmRhbnQgb2YgaXRzIGZpcnN0IDxsZWdlbmQ+XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcy5jYWxsKHBhcmVudE5vZGUsICdmaWVsZHNldFtkaXNhYmxlZF0gKicpXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6ICFjaGlsZC5jb250YWlucyhub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhlIGRpc2FibGVkIDxmaWVsZHNldD4gY29udGFpbmluZyBgbm9kZWAgaGFzIG5vIDxsZWdlbmQ+XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50RWxlbWVudDtcbiAgICB9XG4gIH1cblxuICAvLyBlbHNlLCBub2RlJ3MgdGFiYmFibGUvZm9jdXNhYmxlIHN0YXRlIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQgYnkgYSBmaWVsZHNldCdzXG4gIC8vICBlbmFibGVkL2Rpc2FibGVkIHN0YXRlXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUgPSBmdW5jdGlvbiAob3B0aW9ucywgbm9kZSkge1xuICBpZiAoXG4gICAgbm9kZS5kaXNhYmxlZCB8fFxuICAgIGlzSGlkZGVuSW5wdXQobm9kZSkgfHxcbiAgICBpc0hpZGRlbihub2RlLCBvcHRpb25zKSB8fFxuICAgIC8vIEZvciBhIGRldGFpbHMgZWxlbWVudCB3aXRoIGEgc3VtbWFyeSwgdGhlIHN1bW1hcnkgZWxlbWVudCBnZXRzIHRoZSBmb2N1c1xuICAgIGlzRGV0YWlsc1dpdGhTdW1tYXJ5KG5vZGUpIHx8XG4gICAgaXNEaXNhYmxlZEZyb21GaWVsZHNldChub2RlKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUgPSBmdW5jdGlvbiAob3B0aW9ucywgbm9kZSkge1xuICBpZiAoXG4gICAgaXNOb25UYWJiYWJsZVJhZGlvKG5vZGUpIHx8XG4gICAgZ2V0VGFiaW5kZXgobm9kZSkgPCAwIHx8XG4gICAgIWlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUob3B0aW9ucywgbm9kZSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNWYWxpZFNoYWRvd1Jvb3RUYWJiYWJsZSA9IGZ1bmN0aW9uIChzaGFkb3dIb3N0Tm9kZSkge1xuICBjb25zdCB0YWJJbmRleCA9IHBhcnNlSW50KHNoYWRvd0hvc3ROb2RlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSwgMTApO1xuICBpZiAoaXNOYU4odGFiSW5kZXgpIHx8IHRhYkluZGV4ID49IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBJZiBhIGN1c3RvbSBlbGVtZW50IGhhcyBhbiBleHBsaWNpdCBuZWdhdGl2ZSB0YWJpbmRleCxcbiAgLy8gYnJvd3NlcnMgd2lsbCBub3QgYWxsb3cgdGFiIHRhcmdldGluZyBzYWlkIGVsZW1lbnQncyBjaGlsZHJlbi5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5LjxFbGVtZW50fENhbmRpZGF0ZXNTY29wZT59IGNhbmRpZGF0ZXNcbiAqIEByZXR1cm5zIEVsZW1lbnRbXVxuICovXG5jb25zdCBzb3J0QnlPcmRlciA9IGZ1bmN0aW9uIChjYW5kaWRhdGVzKSB7XG4gIGNvbnN0IHJlZ3VsYXJUYWJiYWJsZXMgPSBbXTtcbiAgY29uc3Qgb3JkZXJlZFRhYmJhYmxlcyA9IFtdO1xuICBjYW5kaWRhdGVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICBjb25zdCBpc1Njb3BlID0gISFpdGVtLnNjb3BlO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBpc1Njb3BlID8gaXRlbS5zY29wZSA6IGl0ZW07XG4gICAgY29uc3QgY2FuZGlkYXRlVGFiaW5kZXggPSBnZXRUYWJpbmRleChlbGVtZW50LCBpc1Njb3BlKTtcbiAgICBjb25zdCBlbGVtZW50cyA9IGlzU2NvcGUgPyBzb3J0QnlPcmRlcihpdGVtLmNhbmRpZGF0ZXMpIDogZWxlbWVudDtcbiAgICBpZiAoY2FuZGlkYXRlVGFiaW5kZXggPT09IDApIHtcbiAgICAgIGlzU2NvcGVcbiAgICAgICAgPyByZWd1bGFyVGFiYmFibGVzLnB1c2goLi4uZWxlbWVudHMpXG4gICAgICAgIDogcmVndWxhclRhYmJhYmxlcy5wdXNoKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcmRlcmVkVGFiYmFibGVzLnB1c2goe1xuICAgICAgICBkb2N1bWVudE9yZGVyOiBpLFxuICAgICAgICB0YWJJbmRleDogY2FuZGlkYXRlVGFiaW5kZXgsXG4gICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgIGlzU2NvcGU6IGlzU2NvcGUsXG4gICAgICAgIGNvbnRlbnQ6IGVsZW1lbnRzLFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3JkZXJlZFRhYmJhYmxlc1xuICAgIC5zb3J0KHNvcnRPcmRlcmVkVGFiYmFibGVzKVxuICAgIC5yZWR1Y2UoKGFjYywgc29ydGFibGUpID0+IHtcbiAgICAgIHNvcnRhYmxlLmlzU2NvcGVcbiAgICAgICAgPyBhY2MucHVzaCguLi5zb3J0YWJsZS5jb250ZW50KVxuICAgICAgICA6IGFjYy5wdXNoKHNvcnRhYmxlLmNvbnRlbnQpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSlcbiAgICAuY29uY2F0KHJlZ3VsYXJUYWJiYWJsZXMpO1xufTtcblxuY29uc3QgdGFiYmFibGUgPSBmdW5jdGlvbiAoZWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgbGV0IGNhbmRpZGF0ZXM7XG4gIGlmIChvcHRpb25zLmdldFNoYWRvd1Jvb3QpIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KFtlbF0sIG9wdGlvbnMuaW5jbHVkZUNvbnRhaW5lciwge1xuICAgICAgZmlsdGVyOiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUuYmluZChudWxsLCBvcHRpb25zKSxcbiAgICAgIGZsYXR0ZW46IGZhbHNlLFxuICAgICAgZ2V0U2hhZG93Um9vdDogb3B0aW9ucy5nZXRTaGFkb3dSb290LFxuICAgICAgc2hhZG93Um9vdEZpbHRlcjogaXNWYWxpZFNoYWRvd1Jvb3RUYWJiYWJsZSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlcyhcbiAgICAgIGVsLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLFxuICAgICAgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlLmJpbmQobnVsbCwgb3B0aW9ucylcbiAgICApO1xuICB9XG4gIHJldHVybiBzb3J0QnlPcmRlcihjYW5kaWRhdGVzKTtcbn07XG5cbmNvbnN0IGZvY3VzYWJsZSA9IGZ1bmN0aW9uIChlbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBsZXQgY2FuZGlkYXRlcztcbiAgaWYgKG9wdGlvbnMuZ2V0U2hhZG93Um9vdCkge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoW2VsXSwgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLCB7XG4gICAgICBmaWx0ZXI6IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUuYmluZChudWxsLCBvcHRpb25zKSxcbiAgICAgIGZsYXR0ZW46IHRydWUsXG4gICAgICBnZXRTaGFkb3dSb290OiBvcHRpb25zLmdldFNoYWRvd1Jvb3QsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZXMoXG4gICAgICBlbCxcbiAgICAgIG9wdGlvbnMuaW5jbHVkZUNvbnRhaW5lcixcbiAgICAgIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUuYmluZChudWxsLCBvcHRpb25zKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbmNvbnN0IGlzVGFiYmFibGUgPSBmdW5jdGlvbiAobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKCFub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBub2RlIHByb3ZpZGVkJyk7XG4gIH1cbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlLCBjYW5kaWRhdGVTZWxlY3RvcikgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUob3B0aW9ucywgbm9kZSk7XG59O1xuXG5jb25zdCBmb2N1c2FibGVDYW5kaWRhdGVTZWxlY3RvciA9IC8qICNfX1BVUkVfXyAqLyBjYW5kaWRhdGVTZWxlY3RvcnNcbiAgLmNvbmNhdCgnaWZyYW1lJylcbiAgLmpvaW4oJywnKTtcblxuY29uc3QgaXNGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKCFub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBub2RlIHByb3ZpZGVkJyk7XG4gIH1cbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlLCBmb2N1c2FibGVDYW5kaWRhdGVTZWxlY3RvcikgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG9wdGlvbnMsIG5vZGUpO1xufTtcblxuZXhwb3J0IHsgdGFiYmFibGUsIGZvY3VzYWJsZSwgaXNUYWJiYWJsZSwgaXNGb2N1c2FibGUgfTtcbiIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBFTlRFUiA9ICdFbnRlcic7XG5leHBvcnQgdmFyIFNQQUNFID0gJyAnO1xuZXhwb3J0IHZhciBFU0NBUEUgPSAnRXNjYXBlJztcbmV4cG9ydCB2YXIgVEFCID0gJ1RhYic7XG5leHBvcnQgdmFyIEJBQ0tTUEFDRSA9ICdCYWNrc3BhY2UnO1xuZXhwb3J0IHZhciBGMiA9ICdGMic7XG5leHBvcnQgdmFyIEFMVCA9ICdBbHQnO1xuZXhwb3J0IHZhciBTSElGVCA9ICdTaGlmdCc7XG5leHBvcnQgdmFyIENUUkwgPSAnQ29udHJvbCc7XG5leHBvcnQgdmFyIE1FVEEgPSAnTWV0YSc7IC8vIFdpbmRvd3MsIENvbW1hbmQsIE9wdGlvblxuXG5leHBvcnQgdmFyIEFSUk9XX0RPV04gPSAnQXJyb3dEb3duJztcbmV4cG9ydCB2YXIgQVJST1dfVVAgPSAnQXJyb3dVcCc7XG5leHBvcnQgdmFyIEFSUk9XX0xFRlQgPSAnQXJyb3dMZWZ0JztcbmV4cG9ydCB2YXIgQVJST1dfUklHSFQgPSAnQXJyb3dSaWdodCc7XG5leHBvcnQgdmFyIFBBR0VfVVAgPSAnUGFnZVVwJztcbmV4cG9ydCB2YXIgUEFHRV9ET1dOID0gJ1BhZ2VEb3duJztcbmV4cG9ydCB2YXIgRU5EID0gJ0VuZCc7XG5leHBvcnQgdmFyIEhPTUUgPSAnSG9tZSc7XG5leHBvcnQgdmFyIGtleXM7XG5cbihmdW5jdGlvbiAoa2V5cykge1xuICBrZXlzW1wiRU5URVJcIl0gPSBcIkVudGVyXCI7XG4gIGtleXNbXCJTUEFDRVwiXSA9IFwiIFwiO1xuICBrZXlzW1wiRVNDQVBFXCJdID0gXCJFc2NhcGVcIjtcbiAga2V5c1tcIlRBQlwiXSA9IFwiVGFiXCI7XG4gIGtleXNbXCJCQUNLU1BBQ0VcIl0gPSBcIkJhY2tzcGFjZVwiO1xuICBrZXlzW1wiRjJcIl0gPSBcIkYyXCI7XG4gIGtleXNbXCJBTFRcIl0gPSBcIkFsdFwiO1xuICBrZXlzW1wiU0hJRlRcIl0gPSBcIlNoaWZ0XCI7XG4gIGtleXNbXCJDVFJMXCJdID0gXCJDb250cm9sXCI7XG4gIGtleXNbXCJNRVRBXCJdID0gXCJNZXRhXCI7XG4gIGtleXNbXCJBUlJPV19ET1dOXCJdID0gXCJBcnJvd0Rvd25cIjtcbiAga2V5c1tcIkFSUk9XX1VQXCJdID0gXCJBcnJvd1VwXCI7XG4gIGtleXNbXCJBUlJPV19MRUZUXCJdID0gXCJBcnJvd0xlZnRcIjtcbiAga2V5c1tcIkFSUk9XX1JJR0hUXCJdID0gXCJBcnJvd1JpZ2h0XCI7XG4gIGtleXNbXCJQQUdFX1VQXCJdID0gXCJQYWdlVXBcIjtcbiAga2V5c1tcIlBBR0VfRE9XTlwiXSA9IFwiUGFnZURvd25cIjtcbiAga2V5c1tcIkVORFwiXSA9IFwiRW5kXCI7XG4gIGtleXNbXCJIT01FXCJdID0gXCJIb21lXCI7XG59KShrZXlzIHx8IChrZXlzID0ge30pKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBUaGVzZSBrZXlzIGFyZSB1c2VkIGZvciBuYXZpZ2F0aW5nIGNhc2NhZGluZyBtZW51IFVJIGNvbXBvbmVudHMuXG4gKlxuICogQVJST1dfRE9XTjogU2VsZWN0IHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gKiBBUlJPV19MRUZUOiBTaG93IHRoZSBwcmV2aW91cyBtZW51LlxuICogQVJST1dfUklHSFQ6IFNob3cgdGhlIG5leHQgbWVudSBmb3IgdGhlIHNlbGVjdGVkIGl0ZW0uXG4gKiBBUlJPV19VUDogU2VsZWN0IHRoZSBwcmV2aW91cyBpdGVtIGluIHRoZSBsaXN0LlxuICogRVNDOiBEZXNlbGVjdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gYW5kIGhpZGUgdGhlIGxpc3QuXG4gKiBUQUI6IE5vcm1hbCB0YWJiaW5nIG5hdmlnYXRpb24gaXMgc3RpbGwgc3VwcG9ydGVkLlxuICovXG5pbXBvcnQgeyBBUlJPV19ET1dOLCBBUlJPV19MRUZULCBBUlJPV19SSUdIVCwgQVJST1dfVVAsIEVTQ0FQRSwgVEFCIH0gZnJvbSAnLi4va2V5cyc7XG5leHBvcnQgdmFyIGNhc2NhZGluZ01lbnVLZXlzID0ge1xuICBBUlJPV19ET1dOOiBBUlJPV19ET1dOLFxuICBBUlJPV19MRUZUOiBBUlJPV19MRUZULFxuICBBUlJPV19SSUdIVDogQVJST1dfUklHSFQsXG4gIEFSUk9XX1VQOiBBUlJPV19VUCxcbiAgRVNDQVBFOiBFU0NBUEUsXG4gIFRBQjogVEFCXG59OyIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbnZhciBnZXRSYW5kb21WYWx1ZXM7XG52YXIgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi4gQWxzbyxcbiAgICAvLyBmaW5kIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG8gKG1zQ3J5cHRvKSBvbiBJRTExLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0bykgfHwgdHlwZW9mIG1zQ3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzID09PSAnZnVuY3Rpb24nICYmIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKTtcblxuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59IiwgImV4cG9ydCBkZWZhdWx0IC9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTsiLCAiaW1wb3J0IFJFR0VYIGZyb20gJy4vcmVnZXguanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZSh1dWlkKSB7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgJiYgUkVHRVgudGVzdCh1dWlkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGU7IiwgImltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuXG52YXIgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIpIHtcbiAgdmFyIG9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHZhciB1dWlkID0gKGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dKS50b0xvd2VyQ2FzZSgpOyAvLyBDb25zaXN0ZW5jeSBjaGVjayBmb3IgdmFsaWQgVVVJRC4gIElmIHRoaXMgdGhyb3dzLCBpdCdzIGxpa2VseSBkdWUgdG8gb25lXG4gIC8vIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC8vIC0gT25lIG9yIG1vcmUgaW5wdXQgYXJyYXkgdmFsdWVzIGRvbid0IG1hcCB0byBhIGhleCBvY3RldCAobGVhZGluZyB0b1xuICAvLyBcInVuZGVmaW5lZFwiIGluIHRoZSB1dWlkKVxuICAvLyAtIEludmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgUkZDIGB2ZXJzaW9uYCBvciBgdmFyaWFudGAgZmllbGRzXG5cbiAgaWYgKCF2YWxpZGF0ZSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaW5naWZ5OyIsICJpbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCBzdHJpbmdpZnkgZnJvbSAnLi9zdHJpbmdpZnkuanMnOyAvLyAqKmB2MSgpYCAtIEdlbmVyYXRlIHRpbWUtYmFzZWQgVVVJRCoqXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcbi8vIGFuZCBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXVpZC5odG1sXG5cbnZhciBfbm9kZUlkO1xuXG52YXIgX2Nsb2Nrc2VxOyAvLyBQcmV2aW91cyB1dWlkIGNyZWF0aW9uIHRpbWVcblxuXG52YXIgX2xhc3RNU2VjcyA9IDA7XG52YXIgX2xhc3ROU2VjcyA9IDA7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQgZm9yIEFQSSBkZXRhaWxzXG5cbmZ1bmN0aW9uIHYxKG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuICB2YXIgYiA9IGJ1ZiB8fCBuZXcgQXJyYXkoMTYpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgX25vZGVJZDtcbiAgdmFyIGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTsgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XG4gIC8vIHNwZWNpZmllZC4gIFdlIGRvIHRoaXMgbGF6aWx5IHRvIG1pbmltaXplIGlzc3VlcyByZWxhdGVkIHRvIGluc3VmZmljaWVudFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XG5cbiAgaWYgKG5vZGUgPT0gbnVsbCB8fCBjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgdmFyIHNlZWRCeXRlcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7XG5cbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcbiAgICAgIG5vZGUgPSBfbm9kZUlkID0gW3NlZWRCeXRlc1swXSB8IDB4MDEsIHNlZWRCeXRlc1sxXSwgc2VlZEJ5dGVzWzJdLCBzZWVkQnl0ZXNbM10sIHNlZWRCeXRlc1s0XSwgc2VlZEJ5dGVzWzVdXTtcbiAgICB9XG5cbiAgICBpZiAoY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcbiAgICB9XG4gIH0gLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcbiAgLy8gKDE1ODItMTAtMTUgMDA6MDApLiAgSlNOdW1iZXJzIGFyZW4ndCBwcmVjaXNlIGVub3VnaCBmb3IgdGhpcywgc29cbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXG5cblxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogRGF0ZS5ub3coKTsgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuXG4gIHZhciBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTsgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuXG4gIHZhciBkdCA9IG1zZWNzIC0gX2xhc3RNU2VjcyArIChuc2VjcyAtIF9sYXN0TlNlY3MpIC8gMTAwMDA7IC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cblxuICBpZiAoZHQgPCAwICYmIG9wdGlvbnMuY2xvY2tzZXEgPT09IHVuZGVmaW5lZCkge1xuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xuICB9IC8vIFJlc2V0IG5zZWNzIGlmIGNsb2NrIHJlZ3Jlc3NlcyAobmV3IGNsb2Nrc2VxKSBvciB3ZSd2ZSBtb3ZlZCBvbnRvIGEgbmV3XG4gIC8vIHRpbWUgaW50ZXJ2YWxcblxuXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbnNlY3MgPSAwO1xuICB9IC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcblxuXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInV1aWQudjEoKTogQ2FuJ3QgY3JlYXRlIG1vcmUgdGhhbiAxME0gdXVpZHMvc2VjXCIpO1xuICB9XG5cbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xuICBfbGFzdE5TZWNzID0gbnNlY3M7XG4gIF9jbG9ja3NlcSA9IGNsb2Nrc2VxOyAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcblxuICBtc2VjcyArPSAxMjIxOTI5MjgwMDAwMDsgLy8gYHRpbWVfbG93YFxuXG4gIHZhciB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDE2ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bCAmIDB4ZmY7IC8vIGB0aW1lX21pZGBcblxuICB2YXIgdG1oID0gbXNlY3MgLyAweDEwMDAwMDAwMCAqIDEwMDAwICYgMHhmZmZmZmZmO1xuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bWggJiAweGZmOyAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMjQgJiAweGYgfCAweDEwOyAvLyBpbmNsdWRlIHZlcnNpb25cblxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjsgLy8gYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgIChQZXIgNC4yLjIgLSBpbmNsdWRlIHZhcmlhbnQpXG5cbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwOyAvLyBgY2xvY2tfc2VxX2xvd2BcblxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7IC8vIGBub2RlYFxuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgYltpICsgbl0gPSBub2RlW25dO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCBzdHJpbmdpZnkoYik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHYxOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdjEgYXMgdXVpZHYxIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBpZHMuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSwgYnV0IHByZWRpY3RhYmxlIGlkcyB0byBwYWlyIGxhYmVsc1xuICogd2l0aCB0aGVpciBpbnB1dHMuIEl0IHRha2VzIGFuIG9wdGlvbmFsIHByZWZpeCBhcyBhIHBhcmFtZXRlci4gSWYgeW91IGRvbid0XG4gKiBzcGVjaWZ5IGl0LCBpdCBnZW5lcmF0ZXMgYSByYW5kb20gaWQgcHJlZml4LiBJZiB5b3Ugc3BlY2lmeSBhIGN1c3RvbSBwcmVmaXhcbiAqIGl0IHNob3VsZCBiZWdpbiB3aXRoIGFuIGxldHRlciB0byBiZSBIVE1MNCBjb21wbGlhbnQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGh0bWxJZEdlbmVyYXRvcigpIHtcbiAgdmFyIGlkUHJlZml4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgdmFyIHN0YXRpY1V1aWQgPSB1dWlkdjEoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaWRTdWZmaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICAgIHZhciBwcmVmaXggPSBcIlwiLmNvbmNhdChpZFByZWZpeCkuY29uY2F0KGlkUHJlZml4ICE9PSAnJyA/ICdfJyA6ICdpJyk7XG4gICAgdmFyIHN1ZmZpeCA9IGlkU3VmZml4ID8gXCJfXCIuY29uY2F0KGlkU3VmZml4KSA6ICcnO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChwcmVmaXgpLmNvbmNhdChzdWZmaXggPyBzdGF0aWNVdWlkIDogdXVpZHYxKCkpLmNvbmNhdChzdWZmaXgpO1xuICB9O1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBtZW1vaXplZCBJRCB0aGF0IHJlbWFpbnMgc3RhdGljIHVudGlsIGNvbXBvbmVudCB1bm1vdW50LlxuICogVGhpcyBwcmV2ZW50cyBJRHMgZnJvbSBiZWluZyByZS1yYW5kb21pemVkIG9uIGV2ZXJ5IGNvbXBvbmVudCB1cGRhdGUuXG4gKi9cblxuZXhwb3J0IHZhciB1c2VHZW5lcmF0ZWRIdG1sSWQgPSBmdW5jdGlvbiB1c2VHZW5lcmF0ZWRIdG1sSWQoKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIHByZWZpeCA9IF9yZWYucHJlZml4LFxuICAgICAgc3VmZml4ID0gX3JlZi5zdWZmaXgsXG4gICAgICBjb25kaXRpb25hbElkID0gX3JlZi5jb25kaXRpb25hbElkO1xuXG4gIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29uZGl0aW9uYWxJZCB8fCBodG1sSWRHZW5lcmF0b3IocHJlZml4KShzdWZmaXgpO1xuICB9LCBbY29uZGl0aW9uYWxJZCwgcHJlZml4LCBzdWZmaXhdKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIExFRlRfQUxJR05NRU5UID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBSSUdIVF9BTElHTk1FTlQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBDRU5URVJfQUxJR05NRU5UID0gJ2NlbnRlcic7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGFzc2VydE5ldmVyID0gZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoeCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHZhbHVlIFwiLmNvbmNhdCh4KSk7XG59OyAvLyB1dGlsaXR5IHR5cGVzOlxuXG4vKipcbiAqIFhPUiBmb3Igc29tZSBwcm9wZXJ0aWVzIGFwcGxpZWQgdG8gYSB0eXBlXG4gKiAoWE9SIGlzIG9uZSBvZiB0aGVzZSBidXQgbm90IGJvdGggb3IgbmVpdGhlcilcbiAqXG4gKiBVc2FnZTogT25lT2Y8dHlwZVRvRXh0ZW5kLCBvbmUgfCBidXQgfCBub3QgfCBtdWx0aXBsZSB8IG9mIHwgdGhlc2UgfCBhcmUgfCByZXF1aXJlZD5cbiAqXG4gKiBUbyByZXF1aXJlIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IGJ1dCBub3QgYm90aFxuICogRXhhbXBsZTogT25lT2Y8VHlwZSwgJ2FyaWEtbGFiZWwnIHwgJ2FyaWEtbGFiZWxsZWRieSc+XG4gKi9cblxuLyoqXG4gKiBXcmFwcyBPYmplY3Qua2V5cyB3aXRoIHByb3BlciB0eXBlc2NyaXB0IGRlZmluaXRpb24gb2YgdGhlIHJlc3VsdGluZyBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24ga2V5c09mKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKTtcbn1cbi8qKlxuICogTGlrZSBga2V5b2YgdHlwZW9mYCwgYnV0IGZvciBnZXR0aW5nIHZhbHVlcyBpbnN0ZWFkIG9mIGtleXNcbiAqIFZhbHVlT2Y8dHlwZW9mIHtrZXkxOiAndmFsdWUxJywga2V5MjogJ3ZhbHVlMid9PlxuICogUmVzdWx0cyBpbiBgJ3ZhbHVlMScgfCAndmFsdWUyJ2BcbiAqLyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBicmVha3BvaW50ID0ge1xuICB4bDogMTIwMCxcbiAgbDogOTkyLFxuICBtOiA3NjgsXG4gIHM6IDU3NSxcbiAgeHM6IDBcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBicmVha3BvaW50IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JyZWFrcG9pbnQnO1xuZXhwb3J0IHZhciBCUkVBS1BPSU5UUyA9IGJyZWFrcG9pbnQ7XG5leHBvcnQgdmFyIEJSRUFLUE9JTlRfS0VZUyA9IGtleXNPZihCUkVBS1BPSU5UUyk7XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGFuIG9iamVjdCBvZiBgRXVpQnJlYWtwb2ludHNgLFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdHJpbmcgdGhhdCBpcyB0aGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBrZXlcbiAqIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB3aWR0aFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBDYW4gZWl0aGVyIGJlIHRoZSBmdWxsIHdpbmRvdyB3aWR0aCBvciBhbnkgd2lkdGhcbiAqIEBwYXJhbSB7RXVpQnJlYWtwb2ludHN9IGJyZWFrcG9pbnRzIEFuIG9iamVjdCB3aXRoIGtleXMgZm9yIHNpemluZyBhbmQgdmFsdWVzIGZvciBtaW5pbXVtIHdpZHRoXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBOYW1lIG9mIHRoZSBicmVha3BvaW50IGtleSBvciBgdW5kZWZpbmVkYCBpZiBhIGtleSBkb2Vzbid0IGV4aXN0XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJyZWFrcG9pbnQod2lkdGgpIHtcbiAgdmFyIGJyZWFrcG9pbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBCUkVBS1BPSU5UUztcbiAgLy8gRmluZCB0aGUgYnJlYWtwb2ludCAoa2V5KSB3aG9zZSB2YWx1ZSBpcyA8PSB3aW5kb3dXaWR0aCBzdGFydGluZyB3aXRoIGxhcmdlc3QgZmlyc3RcbiAgcmV0dXJuIEJSRUFLUE9JTlRfS0VZUy5maW5kKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gYnJlYWtwb2ludHNba2V5XSA8PSB3aWR0aDtcbiAgfSk7XG59XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGEgbWF4IGJyZWFrcG9pbnQga2V5LFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIGB3aWR0aGAgZmFsbHMgd2l0aGluIHRoZSBtYXhcbiAqIGJyZWFrcG9pbnQgb3IgYW55IGJyZWFrcG9pbnRzIGJlbG93XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIENhbiBlaXRoZXIgYmUgdGhlIGZ1bGwgd2luZG93IHdpZHRoIG9yIGFueSB3aWR0aFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50U2l6ZSB8IG51bWJlcn0gbWF4IFRoZSBuYW1lZCBicmVha3BvaW50IG9yIGN1c3RvbSBudW1iZXIgdG8gY2hlY2sgYWdhaW5zdFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50c30gYnJlYWtwb2ludHMgQW4gb2JqZWN0IHdpdGgga2V5cyBmb3Igc2l6aW5nIGFuZCB2YWx1ZXMgZm9yIG1pbmltdW0gd2lkdGhcbiAqIEByZXR1cm5zIHtib29sZWFufSBXaWxsIHJldHVybiBgZmFsc2VgIGlmIGl0IGNhbid0IGZpbmQgYSB2YWx1ZSBmb3IgdGhlIGBtYXhgIGJyZWFrcG9pbnRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXRoaW5NYXhCcmVha3BvaW50KHdpZHRoLCBtYXgpIHtcbiAgdmFyIGJyZWFrcG9pbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBCUkVBS1BPSU5UUztcblxuICBpZiAodHlwZW9mIG1heCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gd2lkdGggPD0gbWF4O1xuICB9IGVsc2Uge1xuICAgIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IGdldEJyZWFrcG9pbnQod2lkdGgsIGJyZWFrcG9pbnRzKTtcbiAgICByZXR1cm4gY3VycmVudEJyZWFrcG9pbnQgPyBicmVha3BvaW50c1tjdXJyZW50QnJlYWtwb2ludF0gPD0gYnJlYWtwb2ludHNbbWF4XSA6IGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGEgbWluIGJyZWFrcG9pbnQga2V5LFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIGB3aWR0aGAgZmFsbHMgd2l0aGluIHRoZSBtaW5cbiAqIGJyZWFrcG9pbnQgb3IgYW55IGJyZWFrcG9pbnRzIGFib3ZlXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIENhbiBlaXRoZXIgYmUgdGhlIGZ1bGwgd2luZG93IHdpZHRoIG9yIGFueSB3aWR0aFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50U2l6ZSB8IG51bWJlcn0gbWluIFRoZSBuYW1lZCBicmVha3BvaW50IG9yIGN1c3RvbSBudW1iZXIgdG8gY2hlY2sgYWdhaW5zdFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50c30gYnJlYWtwb2ludHMgQW4gb2JqZWN0IHdpdGgga2V5cyBmb3Igc2l6aW5nIGFuZCB2YWx1ZXMgZm9yIG1pbmltdW0gd2lkdGhcbiAqIEByZXR1cm5zIHtib29sZWFufSBXaWxsIHJldHVybiBgZmFsc2VgIGlmIGl0IGNhbid0IGZpbmQgYSB2YWx1ZSBmb3IgdGhlIGBtaW5gIGJyZWFrcG9pbnRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXRoaW5NaW5CcmVha3BvaW50KHdpZHRoLCBtaW4pIHtcbiAgdmFyIGJyZWFrcG9pbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBCUkVBS1BPSU5UUztcblxuICBpZiAodHlwZW9mIG1pbiA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gd2lkdGggPj0gbWluO1xuICB9IGVsc2Uge1xuICAgIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IGdldEJyZWFrcG9pbnQod2lkdGgsIGJyZWFrcG9pbnRzKTtcbiAgICByZXR1cm4gY3VycmVudEJyZWFrcG9pbnQgPyBicmVha3BvaW50c1tjdXJyZW50QnJlYWtwb2ludF0gPj0gYnJlYWtwb2ludHNbbWluXSA6IGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGFuIGFycmF5IG9mIGJyZWFrcG9pbnQga2V5cyxcbiAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIG9yIGZhbHNlIGlmIHRoZSBgd2lkdGhgIGZhbGxzIHdpdGhpblxuICogYW55IG9mIHRoZSBuYW1lZCBicmVha3BvaW50c1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBDYW4gZWl0aGVyIGJlIHRoZSBmdWxsIHdpbmRvdyB3aWR0aCBvciBhbnkgd2lkdGhcbiAqIEBwYXJhbSB7RXVpQnJlYWtwb2ludFNpemVbXX0gc2l6ZXMgQW4gYXJyYXkgb2YgbmFtZWQgYnJlYWtwb2ludHNcbiAqIEBwYXJhbSB7RXVpQnJlYWtwb2ludHN9IGJyZWFrcG9pbnRzIEFuIG9iamVjdCB3aXRoIGtleXMgZm9yIHNpemluZyBhbmQgdmFsdWVzIGZvciBtaW5pbXVtIHdpZHRoXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgY3VycmVudCBicmVha3BvaW50IG5hbWUgaXMgaW5jbHVkZWQgaW4gYHNpemVzYFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpdGhpbkJyZWFrcG9pbnRzKHdpZHRoLCBzaXplcykge1xuICB2YXIgYnJlYWtwb2ludHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IEJSRUFLUE9JTlRTO1xuICB2YXIgY3VycmVudEJyZWFrcG9pbnQgPSBnZXRCcmVha3BvaW50KHdpZHRoLCBicmVha3BvaW50cyk7XG4gIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCA/IHNpemVzLmluY2x1ZGVzKGN1cnJlbnRCcmVha3BvaW50KSA6IGZhbHNlO1xufSIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vdGhlbWUnO1xuaW1wb3J0IHsgdGhyb3R0bGUgfSBmcm9tICcuLi90aHJvdHRsZSc7XG5pbXBvcnQgeyBnZXRCcmVha3BvaW50IH0gZnJvbSAnLi9icmVha3BvaW50JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEN1cnJlbnRFdWlCcmVha3BvaW50Q29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG4vKipcbiAqIFRvcCBsZXZlbCBwcm92aWRlciAobmVzdGVkIHdpdGhpbiBFdWlQcm92aWRlcikgd2hpY2ggcHJvdmlkZXMgYSBzaW5nbGVcbiAqIHJlc2l6ZSBsaXN0ZW5lciB0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBiYXNlZCBvbiB3aW5kb3cgd2lkdGhcbiAqL1xuXG5leHBvcnQgdmFyIEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIgPSBmdW5jdGlvbiBDdXJyZW50RXVpQnJlYWtwb2ludFByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcblxuICB2YXIgX3VzZUV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKSxcbiAgICAgIGJyZWFrcG9pbnRzID0gX3VzZUV1aVRoZW1lLmV1aVRoZW1lLmJyZWFrcG9pbnQ7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gZ2V0QnJlYWtwb2ludCh3aW5kb3cuaW5uZXJXaWR0aCwgYnJlYWtwb2ludHMpIDogdW5kZWZpbmVkKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgY3VycmVudEJyZWFrcG9pbnQgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0Q3VycmVudEJyZWFrcG9pbnQgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9uV2luZG93UmVzaXplID0gdGhyb3R0bGUoZnVuY3Rpb24gKCkge1xuICAgICAgc2V0Q3VycmVudEJyZWFrcG9pbnQoZ2V0QnJlYWtwb2ludCh3aW5kb3cuaW5uZXJXaWR0aCwgYnJlYWtwb2ludHMpKTtcbiAgICB9LCA1MCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uV2luZG93UmVzaXplKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBvbldpbmRvd1Jlc2l6ZSk7XG4gICAgfTtcbiAgfSwgW2JyZWFrcG9pbnRzXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEN1cnJlbnRFdWlCcmVha3BvaW50Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjdXJyZW50QnJlYWtwb2ludFxuICB9LCBjaGlsZHJlbik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aVRoZW1lQW1zdGVyZGFtIH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS90aGVtZSc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTE9SX01PREUsIGdldENvbXB1dGVkIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIEV1aVN5c3RlbUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChFdWlUaGVtZUFtc3RlcmRhbSk7XG5leHBvcnQgdmFyIEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe30pO1xuZXhwb3J0IHZhciBFdWlDb2xvck1vZGVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoREVGQVVMVF9DT0xPUl9NT0RFKTtcbmV4cG9ydCB2YXIgRXVpVGhlbWVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoZ2V0Q29tcHV0ZWQoRXVpVGhlbWVBbXN0ZXJkYW0sIHt9LCBERUZBVUxUX0NPTE9SX01PREUpKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgQ09MT1JfTU9ERVNfU1RBTkRBUkQgPSB7XG4gIGxpZ2h0OiAnTElHSFQnLFxuICBkYXJrOiAnREFSSydcbn07XG5leHBvcnQgdmFyIENPTE9SX01PREVTX0lOVkVSU0UgPSAnSU5WRVJTRSc7IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENPTE9SX01PREVTX1NUQU5EQVJELCBDT0xPUl9NT0RFU19JTlZFUlNFIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgdmFyIERFRkFVTFRfQ09MT1JfTU9ERSA9IENPTE9SX01PREVTX1NUQU5EQVJELmxpZ2h0O1xuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHBhcmFtZXRlciBpcyBhbiBvYmplY3RcbiAqIEBwYXJhbSB7YW55fSBvYmogLSBBbnl0aGluZ1xuICovXG5cbnZhciBpc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICByZXR1cm4gb2JqICYmIF90eXBlb2Yob2JqKSA9PT0gJ29iamVjdCc7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGNvbG9yIG1vZGUgaXMgYGludmVyc2VgXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JNb2RlIC0gYGxpZ2h0YCwgYGRhcmtgLCBvciBgaW52ZXJzZWBcbiAqL1xuXG5cbmV4cG9ydCB2YXIgaXNJbnZlcnNlQ29sb3JNb2RlID0gZnVuY3Rpb24gaXNJbnZlcnNlQ29sb3JNb2RlKGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSBDT0xPUl9NT0RFU19JTlZFUlNFO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUgY29sb3IgbW9kZSBjb25maWd1cmVkIGluIHRoZSBjdXJyZW50IEV1aVRoZW1lUHJvdmlkZXIuXG4gKiBSZXR1cm5zIHRoZSBwYXJlbnQgY29sb3IgbW9kZSBpZiBub25lIGlzIGV4cGxpY2l0eSBzZXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb01vZGUgLSBgbGlnaHRgLCBgZGFya2AsIG9yIGBpbnZlcnNlYFxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudENvbG9yTW9kZSAtIGBMSUdIVGAgb3IgYERBUktgOyB1c2VkIGFzIHRoZSBmYWxsYmFja1xuICovXG5cbmV4cG9ydCB2YXIgZ2V0Q29sb3JNb2RlID0gZnVuY3Rpb24gZ2V0Q29sb3JNb2RlKGNvbG9yTW9kZSwgcGFyZW50Q29sb3JNb2RlKSB7XG4gIGlmIChjb2xvck1vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiBwYXJlbnRDb2xvck1vZGUgfHwgREVGQVVMVF9DT0xPUl9NT0RFO1xuICB9XG5cbiAgdmFyIG1vZGUgPSBjb2xvck1vZGUudG9VcHBlckNhc2UoKTtcblxuICBpZiAoaXNJbnZlcnNlQ29sb3JNb2RlKG1vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudENvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayB8fCBwYXJlbnRDb2xvck1vZGUgPT09IHVuZGVmaW5lZCA/IENPTE9SX01PREVTX1NUQU5EQVJELmxpZ2h0IDogQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyaztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbW9kZTtcbiAgfVxufTtcbi8qKlxuICogUmV0dXJucyBhIHZhbHVlIGF0IGEgZ2l2ZW4gcGF0aCBvbiBhbiBvYmplY3QuXG4gKiBJZiBgY29sb3JNb2RlYCBpcyBwcm92aWRlZCwgd2lsbCBzY29wZSB0aGUgdmFsdWUgdG8gdGhlIGFwcHJvcHJpYXRlIGNvbG9yIG1vZGUga2V5IChMSUdIVFxcREFSSylcbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IF9wYXRoIC0gRG90LW5vdGF0ZWQgc3RyaW5nIHRvIGEgcGF0aCBvbiB0aGUgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JNb2RlIC0gYGxpZ2h0YCBvciBgZGFya2BcbiAqL1xuXG5leHBvcnQgdmFyIGdldE9uID0gZnVuY3Rpb24gZ2V0T24obW9kZWwsIF9wYXRoLCBjb2xvck1vZGUpIHtcbiAgdmFyIHBhdGggPSBfcGF0aC5zcGxpdCgnLicpO1xuXG4gIHZhciBub2RlID0gbW9kZWw7XG5cbiAgd2hpbGUgKHBhdGgubGVuZ3RoKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBwYXRoLnNoaWZ0KCk7XG5cbiAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChjb2xvck1vZGUgJiYgbm9kZS5oYXNPd25Qcm9wZXJ0eShjb2xvck1vZGUpID09PSB0cnVlICYmIG5vZGVbY29sb3JNb2RlXS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAobm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdIGluc3RhbmNlb2YgQ29tcHV0ZWQpIHtcbiAgICAgICAgICBub2RlID0gbm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdLmdldFZhbHVlKG51bGwsIG51bGwsIG5vZGUsIGNvbG9yTW9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGVbY29sb3JNb2RlXVtzZWdtZW50XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5vZGVbc2VnbWVudF0gaW5zdGFuY2VvZiBDb21wdXRlZCkge1xuICAgICAgICBub2RlID0gbm9kZVtzZWdtZW50XS5nZXRWYWx1ZShudWxsLCBudWxsLCBub2RlLCBjb2xvck1vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGVbc2VnbWVudF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBTZXRzIGEgdmFsdWUgYXQgYSBnaXZlbiBwYXRoIG9uIGFuIG9iamVjdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IF9wYXRoIC0gRG90LW5vdGF0ZWQgc3RyaW5nIHRvIGEgcGF0aCBvbiB0aGUgb2JqZWN0XG4gKiBAcGFyYW0ge2FueX0gc3RyaW5nIC0gIFRoZSB2YWx1ZSB0byBzZXRcbiAqL1xuXG5leHBvcnQgdmFyIHNldE9uID0gZnVuY3Rpb24gc2V0T24obW9kZWwsIF9wYXRoLCB2YWx1ZSkge1xuICB2YXIgcGF0aCA9IF9wYXRoLnNwbGl0KCcuJyk7XG5cbiAgdmFyIHByb3BlcnR5TmFtZSA9IHBhdGgucG9wKCk7XG4gIHZhciBub2RlID0gbW9kZWw7XG5cbiAgd2hpbGUgKHBhdGgubGVuZ3RoKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBwYXRoLnNoaWZ0KCk7XG5cbiAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIG5vZGVbc2VnbWVudF0gPSB7fTtcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZVtzZWdtZW50XTtcbiAgfVxuXG4gIG5vZGVbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBjbGFzcyB0byBzdG9yZSB0aGUgYGNvbXB1dGVyYCBtZXRob2QgYW5kIGl0cyBldmVudHVhbCBwYXJhbWV0ZXJzLlxuICogQWxsb3dzIGZvciBvbi1kZW1hbmQgY29tcHV0YXRpb24gd2l0aCB1cC10by1kYXRlIHBhcmFtZXRlcnMgdmlhIGBnZXRWYWx1ZWAgbWV0aG9kLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wdXRlciAtIEZ1bmN0aW9uIHRvIGJlIGNvbXB1dGVkXG4gKiBAcGFyYW0ge3N0cmluZyB8IGFycmF5fSBkZXBlbmRlbmNpZXMgLSBEZXBlbmRlbmNpZXMgcGFzc2VkIHRvIHRoZSBgY29tcHV0ZXJgIGFzIHBhcmFtZXRlcnNcbiAqL1xuXG5leHBvcnQgdmFyIENvbXB1dGVkID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ29tcHV0ZWQoY29tcHV0ZXIpIHtcbiAgICB2YXIgZGVwZW5kZW5jaWVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb21wdXRlZCk7XG5cbiAgICB0aGlzLmNvbXB1dGVyID0gY29tcHV0ZXI7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXM7XG4gIH1cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBgY29tcHV0ZXJgIG1ldGhvZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0aGVtZVxuICAgKiBieSB0YWtpbmcgaW50byBhY2NvdW50IHByZXZpb3VzbHkgY29tcHV0ZWQgdmFsdWVzIGFuZCBtb2RpZmljYXRpb25zLlxuICAgKiBAcGFyYW0ge1Byb3h5IHwgb2JqZWN0fSBiYXNlIC0gQ29tcHV0ZWQgb3IgdW5jb21wdXRlZCB0aGVtZVxuICAgKiBAcGFyYW0ge1Byb3h5IHwgb2JqZWN0fSBtb2RpZmljYXRpb25zIC0gVGhlbWUgdmFsdWUgb3ZlcnJpZGVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB3b3JraW5nIC0gUGFydGlhbGx5IGNvbXB1dGVkIHRoZW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICAgKi9cblxuXG4gIF9jcmVhdGVDbGFzcyhDb21wdXRlZCwgW3tcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoYmFzZSkge1xuICAgICAgdmFyIG1vZGlmaWNhdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdmFyIHdvcmtpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBjb2xvck1vZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCF0aGlzLmRlcGVuZGVuY2llcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZXIod29ya2luZyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmRlcGVuZGVuY2llcykpIHtcbiAgICAgICAgdmFyIF9yZWYsIF9nZXRPbjtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlcigoX3JlZiA9IChfZ2V0T24gPSBnZXRPbih3b3JraW5nLCB0aGlzLmRlcGVuZGVuY2llcykpICE9PSBudWxsICYmIF9nZXRPbiAhPT0gdm9pZCAwID8gX2dldE9uIDogZ2V0T24obW9kaWZpY2F0aW9ucywgdGhpcy5kZXBlbmRlbmNpZXMsIGNvbG9yTW9kZSkpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBnZXRPbihiYXNlLCB0aGlzLmRlcGVuZGVuY2llcywgY29sb3JNb2RlKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXB1dGVyKHRoaXMuZGVwZW5kZW5jaWVzLm1hcChmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgICAgICB2YXIgX3JlZjIsIF9nZXRPbjI7XG5cbiAgICAgICAgcmV0dXJuIChfcmVmMiA9IChfZ2V0T24yID0gZ2V0T24od29ya2luZywgZGVwZW5kZW5jeSkpICE9PSBudWxsICYmIF9nZXRPbjIgIT09IHZvaWQgMCA/IF9nZXRPbjIgOiBnZXRPbihtb2RpZmljYXRpb25zLCBkZXBlbmRlbmN5LCBjb2xvck1vZGUpKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiBnZXRPbihiYXNlLCBkZXBlbmRlbmN5LCBjb2xvck1vZGUpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDb21wdXRlZDtcbn0oKTtcbi8qKlxuICogUmV0dXJucyBhIENsYXNzIChgQ29tcHV0ZWRgKSB0aGF0IHN0b3JlcyB0aGUgYXJiaXRyYXJ5IGNvbXB1dGVyIG1ldGhvZFxuICogYW5kIHJlZmVyZW5jZXMgdG8gaXRzIG9wdGlvbmFsIGRlcGVuZGVjaWVzLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcHV0ZXIgLSBBcmJpdHJhcnkgbWV0aG9kIHRvIGJlIGNhbGxlZCBhdCBjb21wdXRlIHRpbWUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IGFycmF5fSBkZXBlbmRlbmNpZXMgLSBWYWx1ZXMgdGhhdCB3aWxsIGJlIHByb3ZpZGVkIHRvIGBjb21wdXRlcmAgYXQgY29tcHV0ZSB0aW1lLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZChjb21wLCBkZXApIHtcbiAgcmV0dXJuIG5ldyBDb21wdXRlZChjb21wLCBkZXApO1xufVxuLyoqXG4gKiBUYWtlcyBhbiB1bmNvbXB1dGVkIHRoZW1lLCBhbmQgY29tcHV0ZXMgYW5kIHJldHVybnMgYWxsIHZhbHVlcyB0YWtpbmdcbiAqIGludG8gY29uc2lkZXJhdGlvbiB2YWx1ZSBvdmVycmlkZXMgYW5kIGNvbmZpZ3VyZWQgY29sb3IgbW9kZS5cbiAqIE92ZXJyaWRlcyB0YWtlIHByZWNlZGVuY2UsIGFuZCBvbmx5IHZhbHVlcyBpbiB0aGUgY3VycmVudCBjb2xvciBtb2RlXG4gKiBhcmUgY29tcHV0ZWQgYW5kIHJldHVybmVkLlxuICogQHBhcmFtIHtQcm94eX0gYmFzZSAtIE9iamVjdCB0byB0cmFuc2Zvcm0gaW50byBQcm94eVxuICogQHBhcmFtIHtQcm94eSB8IG9iamVjdH0gb3ZlciAtIFVuaXF1ZSBpZGVudGlmaWVyIG9yIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICovXG5cbmV4cG9ydCB2YXIgZ2V0Q29tcHV0ZWQgPSBmdW5jdGlvbiBnZXRDb21wdXRlZChiYXNlLCBvdmVyLCBjb2xvck1vZGUpIHtcbiAgdmFyIG91dHB1dCA9IHtcbiAgICB0aGVtZU5hbWU6IGJhc2Uua2V5XG4gIH07XG5cbiAgZnVuY3Rpb24gbG9vcChiYXNlLCBvdmVyKSB7XG4gICAgdmFyIGNoZWNrRXhpc3RpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgIHZhciBwYXRoID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG4gICAgT2JqZWN0LmtleXMoYmFzZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbmV3UGF0aCA9IHBhdGggPyBcIlwiLmNvbmNhdChwYXRoLCBcIi5cIikuY29uY2F0KGtleSkgOiBcIlwiLmNvbmNhdChrZXkpOyAvLyBAdHMtZXhwZWN0LWVycm9yIGBrZXlgIGlzIG5vdCBuZWNlc3NhcmlseSBhIGNvbG9yTW9kZSBrZXlcblxuICAgICAgaWYgKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LnZhbHVlcyhDT0xPUl9NT0RFU19TVEFOREFSRCkpLCBbY29sb3JNb2RlXSkuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBpZiAoa2V5ICE9PSBjb2xvck1vZGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGNvbG9yTW9kZVNlZ21lbnQgPSBuZXcgUmVnRXhwKFwiKFxcXFwuXCIuY29uY2F0KGNvbG9yTW9kZSwgXCJcXFxcYil8KFxcXFxiXCIpLmNvbmNhdChjb2xvck1vZGUsIFwiXFxcXC4pXCIpKTtcbiAgICAgICAgICBuZXdQYXRoID0gbmV3UGF0aC5yZXBsYWNlKGNvbG9yTW9kZVNlZ21lbnQsICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZXhpc3RpbmcgPSBjaGVja0V4aXN0aW5nICYmIGdldE9uKG91dHB1dCwgbmV3UGF0aCk7XG5cbiAgICAgIGlmICghZXhpc3RpbmcgfHwgaXNPYmplY3QoZXhpc3RpbmcpKSB7XG4gICAgICAgIHZhciBiYXNlVmFsdWUgPSBiYXNlW2tleV0gaW5zdGFuY2VvZiBDb21wdXRlZCA/IGJhc2Vba2V5XS5nZXRWYWx1ZShiYXNlLnJvb3QsIG92ZXIucm9vdCwgb3V0cHV0LCBjb2xvck1vZGUpIDogYmFzZVtrZXldO1xuICAgICAgICB2YXIgb3ZlclZhbHVlID0gb3ZlcltrZXldIGluc3RhbmNlb2YgQ29tcHV0ZWQgPyBvdmVyW2tleV0uZ2V0VmFsdWUoYmFzZS5yb290LCBvdmVyLnJvb3QsIG91dHB1dCwgY29sb3JNb2RlKSA6IG92ZXJba2V5XTtcblxuICAgICAgICBpZiAoaXNPYmplY3QoYmFzZVZhbHVlKSAmJiAhQXJyYXkuaXNBcnJheShiYXNlVmFsdWUpKSB7XG4gICAgICAgICAgbG9vcChiYXNlVmFsdWUsIG92ZXJWYWx1ZSAhPT0gbnVsbCAmJiBvdmVyVmFsdWUgIT09IHZvaWQgMCA/IG92ZXJWYWx1ZSA6IHt9LCBjaGVja0V4aXN0aW5nLCBuZXdQYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRPbihvdXRwdXQsIG5ld1BhdGgsIG92ZXJWYWx1ZSAhPT0gbnVsbCAmJiBvdmVyVmFsdWUgIT09IHZvaWQgMCA/IG92ZXJWYWx1ZSA6IGJhc2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSAvLyBDb21wdXRlIHN0YW5kYXJkIHRoZW1lIHZhbHVlcyBhbmQgYXBwbHkgb3ZlcnJpZGVzXG5cblxuICBsb29wKGJhc2UsIG92ZXIpOyAvLyBDb21wdXRlIGFuZCBhcHBseSBleHRlbnNpb24gdmFsdWVzIG9ubHlcblxuICBsb29wKG92ZXIsIHt9LCB0cnVlKTtcbiAgcmV0dXJuIG91dHB1dDtcbn07XG4vKipcbiAqIEJ1aWxkcyBhIFByb3h5IHdpdGggYSBjdXN0b20gYGhhbmRsZXJgIGRlc2lnbmVkIHRvIHNlbGYtcmVmZXJlbmNlIHZhbHVlc1xuICogYW5kIHByZXZlbnQgYXJiaXRyYXJ5IHZhbHVlIG92ZXJyaWRlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdCB0byB0cmFuc2Zvcm0gaW50byBQcm94eVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyIG9yIG5hbWVcbiAqL1xuXG5leHBvcnQgdmFyIGJ1aWxkVGhlbWUgPSBmdW5jdGlvbiBidWlsZFRoZW1lKG1vZGVsLCBrZXkpIHtcbiAgdmFyIGhhbmRsZXIgPSB7XG4gICAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0Lm1vZGVsKTtcbiAgICB9LFxuICAgIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkge1xuICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0Lm1vZGVsLCBwcm90b3R5cGUpO1xuICAgIH0sXG4gICAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KTtcbiAgICB9LFxuICAgIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldC5tb2RlbCk7XG4gICAgfSxcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldC5tb2RlbCwga2V5KTtcbiAgICB9LFxuICAgIGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCBhdHRyaWJ1dGVzKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQubW9kZWwsIHByb3BlcnR5LCBhdHRyaWJ1dGVzKTtcbiAgICB9LFxuICAgIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0Lmhhcyh0YXJnZXQubW9kZWwsIHByb3BlcnR5KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KF90YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICBpZiAocHJvcGVydHkgPT09ICdrZXknKSB7XG4gICAgICAgIHJldHVybiBfdGFyZ2V0W3Byb3BlcnR5XTtcbiAgICAgIH0gLy8gcHJldmVudCBTYWZhcmkgZnJvbSBsb2NraW5nIHVwIHdoZW4gdGhlIHByb3h5IGlzIHVzZWQgaW4gZGV2IHRvb2xzXG4gICAgICAvLyBhcyBpdCBkb2Vzbid0IHN1cHBvcnQgZ2V0UHJvdG90eXBlT2ZcblxuXG4gICAgICBpZiAocHJvcGVydHkgPT09ICdfX3Byb3RvX18nKSByZXR1cm4ge307XG4gICAgICB2YXIgdGFyZ2V0ID0gcHJvcGVydHkgPT09ICdyb290JyA/IF90YXJnZXQgOiBfdGFyZ2V0Lm1vZGVsIHx8IF90YXJnZXQ7IC8vIEB0cy1pZ25vcmUgYHN0cmluZ2AgaW5kZXggc2lnbmF0dXJlXG5cbiAgICAgIHZhciB2YWx1ZSA9IHRhcmdldFtwcm9wZXJ0eV07XG5cbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkoe1xuICAgICAgICAgIG1vZGVsOiB2YWx1ZSxcbiAgICAgICAgICByb290OiBfdGFyZ2V0LnJvb3QsXG4gICAgICAgICAga2V5OiBcIl9cIi5jb25jYXQoX3RhcmdldC5rZXkpXG4gICAgICAgIH0sIGhhbmRsZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LFxuICAgIG93bktleXM6IGZ1bmN0aW9uIG93bktleXModGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRhcmdldC5tb2RlbCk7XG4gICAgfSxcbiAgICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgfTtcbiAgdmFyIHRoZW1lUHJveHkgPSBuZXcgUHJveHkoe1xuICAgIG1vZGVsOiBtb2RlbCxcbiAgICByb290OiBtb2RlbCxcbiAgICBrZXk6IGtleVxuICB9LCBoYW5kbGVyKTtcbiAgcmV0dXJuIHRoZW1lUHJveHk7XG59O1xuLyoqXG4gKiBEZWVwbHkgbWVyZ2VzIHR3byBvYmplY3RzLCB1c2luZyBgc291cmNlYCB2YWx1ZXMgd2hlbmV2ZXIgcG9zc2libGUuXG4gKiBAcGFyYW0ge29iamVjdH0gX3RhcmdldCAtIE9iamVjdCB3aXRoIGZhbGxiYWNrIHZhbHVlc1xuICogQHBhcmFtIHtvYmplY3R9IHNvdXJjZSAtIE9iamVjdCB3aXRoIGRlc2lyZWQgdmFsdWVzXG4gKi9cblxuZXhwb3J0IHZhciBtZXJnZURlZXAgPSBmdW5jdGlvbiBtZXJnZURlZXAoX3RhcmdldCkge1xuICB2YXIgc291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICB2YXIgdGFyZ2V0ID0gX29iamVjdFNwcmVhZCh7fSwgX3RhcmdldCk7XG5cbiAgaWYgKCFpc09iamVjdCh0YXJnZXQpIHx8ICFpc09iamVjdChzb3VyY2UpKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleV07XG4gICAgdmFyIHNvdXJjZVZhbHVlID0gc291cmNlW2tleV07XG5cbiAgICBpZiAoaXNPYmplY3QodGFyZ2V0VmFsdWUpICYmIGlzT2JqZWN0KHNvdXJjZVZhbHVlKSkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBtZXJnZURlZXAoX29iamVjdFNwcmVhZCh7fSwgdGFyZ2V0VmFsdWUpLCBfb2JqZWN0U3ByZWFkKHt9LCBzb3VyY2VWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0YXJnZXQ7XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGlmIHRoZSBzcGVjaWZpZWQgY29sb3IgaXMgXCJkYXJrXCIsIHdoaWNoIHVzdWFsbHkgbWVhbnNcbiAqIHlvdSBuZWVkIGxpZ2h0IHRleHQgaWYgeW91IHVzZSBpdCBhcyBhIGJhY2tncm91bmQgY29sb3IgdG8gZnVsZmlsbCBXQ0FHIGNvbnRyYXN0XG4gKiByZXF1aXJlbWVudC5cbiAqIFRoZSBjb2xvciBtdXN0IGJlIHNwZWNpZmllZCB2aWEgaXRzIHJlZCwgZ3JlZW4gYW5kIGJsdWUgdmFsdWUgaW4gdGhlIHJhbmdlIG9mXG4gKiAwIHRvIDI1NS5cbiAqIFRoZSBmb3JtdWxhIGlzIGJhc2VkIG9uIHRoaXMgU3RhY2tvdmVyZmxvdyBhbnN3ZXI6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTQzMDIzXG4gKiB3aGljaCBpdHNlbGYgaXMgYmFzZWQgdXBvbiB0aGUgV0NBRyByZWNvbW1lbmRhdGlvbiBmb3IgY29sb3IgY29udHJhc3QuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJlZCBUaGUgcmVkIGNvbXBvbmVudCBpbiB0aGUgcmFuZ2UgMCB0byAyNTVcbiAqIEBwYXJhbSB7bnVtYmVyfSBncmVlbiBUaGUgZ3JlZW4gY29tcG9uZW50IGluIHRoZSByYW5nZSAwIHRvIDI1NVxuICogQHBhcmFtIHtudW1iZXJ9IGJsdWUgVGhlIGJsdWUgY29tcG9uZW50IGluIHRoZSByYW5nZSAwIHRvIDI1NVxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbG9yIGlzIGRhcmssIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29sb3JEYXJrKHJlZCwgZ3JlZW4sIGJsdWUpIHtcbiAgdmFyIF9tYXAkbWFwID0gW3JlZCwgZ3JlZW4sIGJsdWVdLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjIC8gMjU1LjA7XG4gIH0pLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjIDw9IDAuMDM5MjggPyBjIC8gMTIuOTIgOiBNYXRoLnBvdygoYyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICB9KSxcbiAgICAgIF9tYXAkbWFwMiA9IF9zbGljZWRUb0FycmF5KF9tYXAkbWFwLCAzKSxcbiAgICAgIHIgPSBfbWFwJG1hcDJbMF0sXG4gICAgICBnID0gX21hcCRtYXAyWzFdLFxuICAgICAgYiA9IF9tYXAkbWFwMlsyXTtcblxuICB2YXIgbHVtaW5hbmNlID0gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xuICByZXR1cm4gbHVtaW5hbmNlIDw9IDAuMTc5O1xufSIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRIZXgoaGV4KSB7XG4gIHJldHVybiAvKF4jWzAtOUEtRl17Nn0kKXwoXiNbMC05QS1GXXszfSQpL2kudGVzdChoZXgpO1xufSIsICJpbXBvcnQgeyBtaW4sIG1heCB9IGZyb20gJy4vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoeCwgbG93ID0gMCwgaGlnaCA9IDEpID0+IHtcbiAgICByZXR1cm4gbWluKG1heChsb3csIHgpLCBoaWdoKTtcbn07XG4iLCAiaW1wb3J0IGxpbWl0IGZyb20gJy4vbGltaXQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAocmdiKSA9PiB7XG4gICAgcmdiLl9jbGlwcGVkID0gZmFsc2U7XG4gICAgcmdiLl91bmNsaXBwZWQgPSByZ2Iuc2xpY2UoMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzsgaSsrKSB7XG4gICAgICAgIGlmIChpIDwgMykge1xuICAgICAgICAgICAgaWYgKHJnYltpXSA8IDAgfHwgcmdiW2ldID4gMjU1KSByZ2IuX2NsaXBwZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmdiW2ldID0gbGltaXQocmdiW2ldLCAwLCAyNTUpO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDMpIHtcbiAgICAgICAgICAgIHJnYltpXSA9IGxpbWl0KHJnYltpXSwgMCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJnYjtcbn07XG4iLCAiLy8gcG9ydGVkIGZyb20galF1ZXJ5J3MgJC50eXBlXG5jb25zdCBjbGFzc1RvVHlwZSA9IHt9O1xuZm9yIChsZXQgbmFtZSBvZiBbXG4gICAgJ0Jvb2xlYW4nLFxuICAgICdOdW1iZXInLFxuICAgICdTdHJpbmcnLFxuICAgICdGdW5jdGlvbicsXG4gICAgJ0FycmF5JyxcbiAgICAnRGF0ZScsXG4gICAgJ1JlZ0V4cCcsXG4gICAgJ1VuZGVmaW5lZCcsXG4gICAgJ051bGwnXG5dKSB7XG4gICAgY2xhc3NUb1R5cGVbYFtvYmplY3QgJHtuYW1lfV1gXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gY2xhc3NUb1R5cGVbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaildIHx8ICdvYmplY3QnO1xufVxuIiwgImltcG9ydCB0eXBlIGZyb20gJy4vdHlwZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChhcmdzLCBrZXlPcmRlciA9IG51bGwpID0+IHtcbiAgICAvLyBpZiBjYWxsZWQgd2l0aCBtb3JlIHRoYW4gMyBhcmd1bWVudHMsIHdlIHJldHVybiB0aGUgYXJndW1lbnRzXG4gICAgaWYgKGFyZ3MubGVuZ3RoID49IDMpIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKTtcbiAgICAvLyB3aXRoIGxlc3MgdGhhbiAzIGFyZ3Mgd2UgY2hlY2sgaWYgZmlyc3QgYXJnIGlzIG9iamVjdFxuICAgIC8vIGFuZCB1c2UgdGhlIGtleU9yZGVyIHN0cmluZyB0byBleHRyYWN0IGFuZCBzb3J0IHByb3BlcnRpZXNcbiAgICBpZiAodHlwZShhcmdzWzBdKSA9PSAnb2JqZWN0JyAmJiBrZXlPcmRlcikge1xuICAgICAgICByZXR1cm4ga2V5T3JkZXJcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5maWx0ZXIoKGspID0+IGFyZ3NbMF1ba10gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIC5tYXAoKGspID0+IGFyZ3NbMF1ba10pO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2Ugd2UganVzdCByZXR1cm4gdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgLy8gKHdoaWNoIHdlIHN1cHBvc2UgaXMgYW4gYXJyYXkgb2YgYXJncylcbiAgICByZXR1cm4gYXJnc1swXTtcbn07XG4iLCAiaW1wb3J0IHR5cGUgZnJvbSAnLi90eXBlLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKGFyZ3MpID0+IHtcbiAgICBpZiAoYXJncy5sZW5ndGggPCAyKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBsID0gYXJncy5sZW5ndGggLSAxO1xuICAgIGlmICh0eXBlKGFyZ3NbbF0pID09ICdzdHJpbmcnKSByZXR1cm4gYXJnc1tsXS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBudWxsO1xufTtcbiIsICJjb25zdCB7IFBJLCBtaW4sIG1heCB9ID0gTWF0aDtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBjbGlwX3JnYiB9IGZyb20gJy4vY2xpcF9yZ2IuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsaW1pdCB9IGZyb20gJy4vbGltaXQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBlIH0gZnJvbSAnLi90eXBlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5wYWNrIH0gZnJvbSAnLi91bnBhY2suanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsYXN0IH0gZnJvbSAnLi9sYXN0LmpzJztcblxuY29uc3QgVFdPUEkgPSBQSSAqIDI7XG5jb25zdCBQSVRISVJEID0gUEkgLyAzO1xuY29uc3QgREVHMlJBRCA9IFBJIC8gMTgwO1xuY29uc3QgUkFEMkRFRyA9IDE4MCAvIFBJO1xuXG5leHBvcnQgeyBQSSwgVFdPUEksIFBJVEhJUkQsIERFRzJSQUQsIFJBRDJERUcsIG1pbiwgbWF4IH07XG4iLCAiZXhwb3J0IGRlZmF1bHQge1xuICAgIGZvcm1hdDoge30sXG4gICAgYXV0b2RldGVjdDogW11cbn07XG4iLCAiaW1wb3J0IHsgbGFzdCwgY2xpcF9yZ2IsIHR5cGUgfSBmcm9tICcuL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBfaW5wdXQgZnJvbSAnLi9pby9pbnB1dC5qcyc7XG5cbmNsYXNzIENvbG9yIHtcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZShhcmdzWzBdKSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0uY29uc3RydWN0b3IgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0uY29uc3RydWN0b3IgPT09IHRoaXMuY29uc3RydWN0b3JcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyB0aGUgYXJndW1lbnQgaXMgYWxyZWFkeSBhIENvbG9yIGluc3RhbmNlXG4gICAgICAgICAgICByZXR1cm4gYXJnc1swXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBsYXN0IGFyZ3VtZW50IGNvdWxkIGJlIHRoZSBtb2RlXG4gICAgICAgIGxldCBtb2RlID0gbGFzdChhcmdzKTtcbiAgICAgICAgbGV0IGF1dG9kZXRlY3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgICBhdXRvZGV0ZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lucHV0LnNvcnRlZCkge1xuICAgICAgICAgICAgICAgIF9pbnB1dC5hdXRvZGV0ZWN0ID0gX2lucHV0LmF1dG9kZXRlY3Quc29ydCgoYSwgYikgPT4gYi5wIC0gYS5wKTtcbiAgICAgICAgICAgICAgICBfaW5wdXQuc29ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGF1dG8tZGV0ZWN0IGZvcm1hdFxuICAgICAgICAgICAgZm9yIChsZXQgY2hrIG9mIF9pbnB1dC5hdXRvZGV0ZWN0KSB7XG4gICAgICAgICAgICAgICAgbW9kZSA9IGNoay50ZXN0KC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlKSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoX2lucHV0LmZvcm1hdFttb2RlXSkge1xuICAgICAgICAgICAgY29uc3QgcmdiID0gX2lucHV0LmZvcm1hdFttb2RlXS5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIGF1dG9kZXRlY3QgPyBhcmdzIDogYXJncy5zbGljZSgwLCAtMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtZS5fcmdiID0gY2xpcF9yZ2IocmdiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBmb3JtYXQ6ICcgKyBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgYWxwaGEgY2hhbm5lbFxuICAgICAgICBpZiAobWUuX3JnYi5sZW5ndGggPT09IDMpIG1lLl9yZ2IucHVzaCgxKTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmICh0eXBlKHRoaXMuaGV4KSA9PSAnZnVuY3Rpb24nKSByZXR1cm4gdGhpcy5oZXgoKTtcbiAgICAgICAgcmV0dXJuIGBbJHt0aGlzLl9yZ2Iuam9pbignLCcpfV1gO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IENvbG9yO1xuIiwgIi8vIHRoaXMgZ2V0cyB1cGRhdGVkIGF1dG9tYXRpY2FsbHlcbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzIuNi4wJztcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uLmpzJztcblxuY29uc3QgY2hyb21hID0gKC4uLmFyZ3MpID0+IHtcbiAgICByZXR1cm4gbmV3IGNocm9tYS5Db2xvciguLi5hcmdzKTtcbn07XG5cbmNocm9tYS5Db2xvciA9IENvbG9yO1xuY2hyb21hLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG5leHBvcnQgZGVmYXVsdCBjaHJvbWE7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCBjbXlrMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnY215aycpO1xuICAgIGNvbnN0IFtjLCBtLCB5LCBrXSA9IGFyZ3M7XG4gICAgY29uc3QgYWxwaGEgPSBhcmdzLmxlbmd0aCA+IDQgPyBhcmdzWzRdIDogMTtcbiAgICBpZiAoayA9PT0gMSkgcmV0dXJuIFswLCAwLCAwLCBhbHBoYV07XG4gICAgcmV0dXJuIFtcbiAgICAgICAgYyA+PSAxID8gMCA6IDI1NSAqICgxIC0gYykgKiAoMSAtIGspLCAvLyByXG4gICAgICAgIG0gPj0gMSA/IDAgOiAyNTUgKiAoMSAtIG0pICogKDEgLSBrKSwgLy8gZ1xuICAgICAgICB5ID49IDEgPyAwIDogMjU1ICogKDEgLSB5KSAqICgxIC0gayksIC8vIGJcbiAgICAgICAgYWxwaGFcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY215azJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBtYXggfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJjbXlrID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsZXQgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICByID0gciAvIDI1NTtcbiAgICBnID0gZyAvIDI1NTtcbiAgICBiID0gYiAvIDI1NTtcbiAgICBjb25zdCBrID0gMSAtIG1heChyLCBtYXgoZywgYikpO1xuICAgIGNvbnN0IGYgPSBrIDwgMSA/IDEgLyAoMSAtIGspIDogMDtcbiAgICBjb25zdCBjID0gKDEgLSByIC0gaykgKiBmO1xuICAgIGNvbnN0IG0gPSAoMSAtIGcgLSBrKSAqIGY7XG4gICAgY29uc3QgeSA9ICgxIC0gYiAtIGspICogZjtcbiAgICByZXR1cm4gW2MsIG0sIHksIGtdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmNteWs7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY215azJyZ2IgZnJvbSAnLi9jbXlrMnJnYi5qcyc7XG5pbXBvcnQgcmdiMmNteWsgZnJvbSAnLi9yZ2IyY215ay5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5jbXlrID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyY215ayh0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmNteWsgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdjbXlrJyk7XG5cbmlucHV0LmZvcm1hdC5jbXlrID0gY215azJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdjbXlrJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2NteWsnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3Qgcm5kID0gKGEpID0+IE1hdGgucm91bmQoYSAqIDEwMCkgLyAxMDA7XG5cbi8qXG4gKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICogLSBoc2wyY3NzKGgscyxsKVxuICogLSBoc2wyY3NzKGgscyxsLGEpXG4gKiAtIGhzbDJjc3MoW2gscyxsXSwgbW9kZSlcbiAqIC0gaHNsMmNzcyhbaCxzLGwsYV0sIG1vZGUpXG4gKiAtIGhzbDJjc3Moe2gscyxsLGF9LCBtb2RlKVxuICovXG5jb25zdCBoc2wyY3NzID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBoc2xhID0gdW5wYWNrKGFyZ3MsICdoc2xhJyk7XG4gICAgbGV0IG1vZGUgPSBsYXN0KGFyZ3MpIHx8ICdsc2EnO1xuICAgIGhzbGFbMF0gPSBybmQoaHNsYVswXSB8fCAwKTtcbiAgICBoc2xhWzFdID0gcm5kKGhzbGFbMV0gKiAxMDApICsgJyUnO1xuICAgIGhzbGFbMl0gPSBybmQoaHNsYVsyXSAqIDEwMCkgKyAnJSc7XG4gICAgaWYgKG1vZGUgPT09ICdoc2xhJyB8fCAoaHNsYS5sZW5ndGggPiAzICYmIGhzbGFbM10gPCAxKSkge1xuICAgICAgICBoc2xhWzNdID0gaHNsYS5sZW5ndGggPiAzID8gaHNsYVszXSA6IDE7XG4gICAgICAgIG1vZGUgPSAnaHNsYSc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaHNsYS5sZW5ndGggPSAzO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bW9kZX0oJHtoc2xhLmpvaW4oJywnKX0pYDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzbDJjc3M7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBtaW4sIG1heCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcblxuLypcbiAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gKiAtIHJnYjJoc2wocixnLGIpXG4gKiAtIHJnYjJoc2wocixnLGIsYSlcbiAqIC0gcmdiMmhzbChbcixnLGJdKVxuICogLSByZ2IyaHNsKFtyLGcsYixhXSlcbiAqIC0gcmdiMmhzbCh7cixnLGIsYX0pXG4gKi9cbmNvbnN0IHJnYjJoc2wgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ3JnYmEnKTtcbiAgICBsZXQgW3IsIGcsIGJdID0gYXJncztcblxuICAgIHIgLz0gMjU1O1xuICAgIGcgLz0gMjU1O1xuICAgIGIgLz0gMjU1O1xuXG4gICAgY29uc3QgbWluUmdiID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IG1heFJnYiA9IG1heChyLCBnLCBiKTtcblxuICAgIGNvbnN0IGwgPSAobWF4UmdiICsgbWluUmdiKSAvIDI7XG4gICAgbGV0IHMsIGg7XG5cbiAgICBpZiAobWF4UmdiID09PSBtaW5SZ2IpIHtcbiAgICAgICAgcyA9IDA7XG4gICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHMgPVxuICAgICAgICAgICAgbCA8IDAuNVxuICAgICAgICAgICAgICAgID8gKG1heFJnYiAtIG1pblJnYikgLyAobWF4UmdiICsgbWluUmdiKVxuICAgICAgICAgICAgICAgIDogKG1heFJnYiAtIG1pblJnYikgLyAoMiAtIG1heFJnYiAtIG1pblJnYik7XG4gICAgfVxuXG4gICAgaWYgKHIgPT0gbWF4UmdiKSBoID0gKGcgLSBiKSAvIChtYXhSZ2IgLSBtaW5SZ2IpO1xuICAgIGVsc2UgaWYgKGcgPT0gbWF4UmdiKSBoID0gMiArIChiIC0gcikgLyAobWF4UmdiIC0gbWluUmdiKTtcbiAgICBlbHNlIGlmIChiID09IG1heFJnYikgaCA9IDQgKyAociAtIGcpIC8gKG1heFJnYiAtIG1pblJnYik7XG5cbiAgICBoICo9IDYwO1xuICAgIGlmIChoIDwgMCkgaCArPSAzNjA7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMyAmJiBhcmdzWzNdICE9PSB1bmRlZmluZWQpIHJldHVybiBbaCwgcywgbCwgYXJnc1szXV07XG4gICAgcmV0dXJuIFtoLCBzLCBsXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoc2w7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGhzbDJjc3MgZnJvbSAnLi9oc2wyY3NzLmpzJztcbmltcG9ydCByZ2IyaHNsIGZyb20gJy4uL2hzbC9yZ2IyaHNsLmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbi8qXG4gKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICogLSByZ2IyY3NzKHIsZyxiKVxuICogLSByZ2IyY3NzKHIsZyxiLGEpXG4gKiAtIHJnYjJjc3MoW3IsZyxiXSwgbW9kZSlcbiAqIC0gcmdiMmNzcyhbcixnLGIsYV0sIG1vZGUpXG4gKiAtIHJnYjJjc3Moe3IsZyxiLGF9LCBtb2RlKVxuICovXG5jb25zdCByZ2IyY3NzID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCByZ2JhID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgbGV0IG1vZGUgPSBsYXN0KGFyZ3MpIHx8ICdyZ2InO1xuICAgIGlmIChtb2RlLnN1YnN0cigwLCAzKSA9PSAnaHNsJykge1xuICAgICAgICByZXR1cm4gaHNsMmNzcyhyZ2IyaHNsKHJnYmEpLCBtb2RlKTtcbiAgICB9XG4gICAgcmdiYVswXSA9IHJvdW5kKHJnYmFbMF0pO1xuICAgIHJnYmFbMV0gPSByb3VuZChyZ2JhWzFdKTtcbiAgICByZ2JhWzJdID0gcm91bmQocmdiYVsyXSk7XG4gICAgaWYgKG1vZGUgPT09ICdyZ2JhJyB8fCAocmdiYS5sZW5ndGggPiAzICYmIHJnYmFbM10gPCAxKSkge1xuICAgICAgICByZ2JhWzNdID0gcmdiYS5sZW5ndGggPiAzID8gcmdiYVszXSA6IDE7XG4gICAgICAgIG1vZGUgPSAncmdiYSc7XG4gICAgfVxuICAgIHJldHVybiBgJHttb2RlfSgke3JnYmEuc2xpY2UoMCwgbW9kZSA9PT0gJ3JnYicgPyAzIDogNCkuam9pbignLCcpfSlgO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmNzcztcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHJvdW5kIH0gPSBNYXRoO1xuXG5jb25zdCBoc2wycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2wnKTtcbiAgICBjb25zdCBbaCwgcywgbF0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IGwgKiAyNTU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdDMgPSBbMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IGMgPSBbMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IHQyID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgICAgICAgY29uc3QgdDEgPSAyICogbCAtIHQyO1xuICAgICAgICBjb25zdCBoXyA9IGggLyAzNjA7XG4gICAgICAgIHQzWzBdID0gaF8gKyAxIC8gMztcbiAgICAgICAgdDNbMV0gPSBoXztcbiAgICAgICAgdDNbMl0gPSBoXyAtIDEgLyAzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgaWYgKHQzW2ldIDwgMCkgdDNbaV0gKz0gMTtcbiAgICAgICAgICAgIGlmICh0M1tpXSA+IDEpIHQzW2ldIC09IDE7XG4gICAgICAgICAgICBpZiAoNiAqIHQzW2ldIDwgMSkgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzW2ldO1xuICAgICAgICAgICAgZWxzZSBpZiAoMiAqIHQzW2ldIDwgMSkgY1tpXSA9IHQyO1xuICAgICAgICAgICAgZWxzZSBpZiAoMyAqIHQzW2ldIDwgMikgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDNbaV0pICogNjtcbiAgICAgICAgICAgIGVsc2UgY1tpXSA9IHQxO1xuICAgICAgICB9XG4gICAgICAgIFtyLCBnLCBiXSA9IFtyb3VuZChjWzBdICogMjU1KSwgcm91bmQoY1sxXSAqIDI1NSksIHJvdW5kKGNbMl0gKiAyNTUpXTtcbiAgICB9XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMykge1xuICAgICAgICAvLyBrZWVwIGFscGhhIGNoYW5uZWxcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzWzNdXTtcbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzbDJyZ2I7XG4iLCAiaW1wb3J0IGhzbDJyZ2IgZnJvbSAnLi4vaHNsL2hzbDJyZ2IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcblxuY29uc3QgUkVfUkdCID0gL15yZ2JcXChcXHMqKC0/XFxkKyksXFxzKigtP1xcZCspXFxzKixcXHMqKC0/XFxkKylcXHMqXFwpJC87XG5jb25zdCBSRV9SR0JBID1cbiAgICAvXnJnYmFcXChcXHMqKC0/XFxkKyksXFxzKigtP1xcZCspXFxzKixcXHMqKC0/XFxkKylcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5jb25zdCBSRV9SR0JfUENUID1cbiAgICAvXnJnYlxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSUsXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccypcXCkkLztcbmNvbnN0IFJFX1JHQkFfUENUID1cbiAgICAvXnJnYmFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5jb25zdCBSRV9IU0wgPVxuICAgIC9eaHNsXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqXFwpJC87XG5jb25zdCBSRV9IU0xBID1cbiAgICAvXmhzbGFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyksXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcblxuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgY3NzMnJnYiA9IChjc3MpID0+IHtcbiAgICBjc3MgPSBjc3MudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgbGV0IG07XG5cbiAgICBpZiAoaW5wdXQuZm9ybWF0Lm5hbWVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuZm9ybWF0Lm5hbWVkKGNzcyk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG5cbiAgICAvLyByZ2IoMjUwLDIwLDApXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQikpKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IG0uc2xpY2UoMSwgNCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJnYlszXSA9IDE7IC8vIGRlZmF1bHQgYWxwaGFcbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9XG5cbiAgICAvLyByZ2JhKDI1MCwyMCwwLDAuNClcbiAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfUkdCQSkpKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IG0uc2xpY2UoMSwgNSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxuXG4gICAgLy8gcmdiKDEwMCUsMCUsMCUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQl9QQ1QpKSkge1xuICAgICAgICBjb25zdCByZ2IgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgcmdiW2ldID0gcm91bmQocmdiW2ldICogMi41NSk7XG4gICAgICAgIH1cbiAgICAgICAgcmdiWzNdID0gMTsgLy8gZGVmYXVsdCBhbHBoYVxuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIHJnYmEoMTAwJSwwJSwwJSwwLjQpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQkFfUENUKSkpIHtcbiAgICAgICAgY29uc3QgcmdiID0gbS5zbGljZSgxLCA1KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgIHJnYltpXSA9IHJvdW5kKHJnYltpXSAqIDIuNTUpO1xuICAgICAgICB9XG4gICAgICAgIHJnYlszXSA9ICtyZ2JbM107XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxuXG4gICAgLy8gaHNsKDAsMTAwJSw1MCUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTCkpKSB7XG4gICAgICAgIGNvbnN0IGhzbCA9IG0uc2xpY2UoMSwgNCk7XG4gICAgICAgIGhzbFsxXSAqPSAwLjAxO1xuICAgICAgICBoc2xbMl0gKj0gMC4wMTtcbiAgICAgICAgY29uc3QgcmdiID0gaHNsMnJnYihoc2wpO1xuICAgICAgICByZ2JbM10gPSAxO1xuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIGhzbGEoMCwxMDAlLDUwJSwwLjUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTEEpKSkge1xuICAgICAgICBjb25zdCBoc2wgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBoc2xbMV0gKj0gMC4wMTtcbiAgICAgICAgaHNsWzJdICo9IDAuMDE7XG4gICAgICAgIGNvbnN0IHJnYiA9IGhzbDJyZ2IoaHNsKTtcbiAgICAgICAgcmdiWzNdID0gK21bNF07IC8vIGRlZmF1bHQgYWxwaGEgPSAxXG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxufTtcblxuY3NzMnJnYi50ZXN0ID0gKHMpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICBSRV9SR0IudGVzdChzKSB8fFxuICAgICAgICBSRV9SR0JBLnRlc3QocykgfHxcbiAgICAgICAgUkVfUkdCX1BDVC50ZXN0KHMpIHx8XG4gICAgICAgIFJFX1JHQkFfUENULnRlc3QocykgfHxcbiAgICAgICAgUkVfSFNMLnRlc3QocykgfHxcbiAgICAgICAgUkVfSFNMQS50ZXN0KHMpXG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNzczJyZ2I7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5pbXBvcnQgcmdiMmNzcyBmcm9tICcuL3JnYjJjc3MuanMnO1xuaW1wb3J0IGNzczJyZ2IgZnJvbSAnLi9jc3MycmdiLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmNzcyA9IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgcmV0dXJuIHJnYjJjc3ModGhpcy5fcmdiLCBtb2RlKTtcbn07XG5cbmNocm9tYS5jc3MgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdjc3MnKTtcblxuaW5wdXQuZm9ybWF0LmNzcyA9IGNzczJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogNSxcbiAgICB0ZXN0OiAoaCwgLi4ucmVzdCkgPT4ge1xuICAgICAgICBpZiAoIXJlc3QubGVuZ3RoICYmIHR5cGUoaCkgPT09ICdzdHJpbmcnICYmIGNzczJyZ2IudGVzdChoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdjc3MnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmlucHV0LmZvcm1hdC5nbCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcmdiID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgcmdiWzBdICo9IDI1NTtcbiAgICByZ2JbMV0gKj0gMjU1O1xuICAgIHJnYlsyXSAqPSAyNTU7XG4gICAgcmV0dXJuIHJnYjtcbn07XG5cbmNocm9tYS5nbCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2dsJyk7XG5cbkNvbG9yLnByb3RvdHlwZS5nbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgcmV0dXJuIFtyZ2JbMF0gLyAyNTUsIHJnYlsxXSAvIDI1NSwgcmdiWzJdIC8gMjU1LCByZ2JbM11dO1xufTtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGZsb29yIH0gPSBNYXRoO1xuXG4vKlxuICogdGhpcyBpcyBiYXNpY2FsbHkganVzdCBIU1Ygd2l0aCBzb21lIG1pbm9yIHR3ZWFrc1xuICpcbiAqIGh1ZS4uIFswLi4zNjBdXG4gKiBjaHJvbWEgLi4gWzAuLjFdXG4gKiBncmF5bmVzcyAuLiBbMC4uMV1cbiAqL1xuXG5jb25zdCBoY2cycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoY2cnKTtcbiAgICBsZXQgW2gsIGMsIF9nXSA9IGFyZ3M7XG4gICAgbGV0IHIsIGcsIGI7XG4gICAgX2cgPSBfZyAqIDI1NTtcbiAgICBjb25zdCBfYyA9IGMgKiAyNTU7XG4gICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgciA9IGcgPSBiID0gX2c7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGggPT09IDM2MCkgaCA9IDA7XG4gICAgICAgIGlmIChoID4gMzYwKSBoIC09IDM2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICAgICAgaCAvPSA2MDtcbiAgICAgICAgY29uc3QgaSA9IGZsb29yKGgpO1xuICAgICAgICBjb25zdCBmID0gaCAtIGk7XG4gICAgICAgIGNvbnN0IHAgPSBfZyAqICgxIC0gYyk7XG4gICAgICAgIGNvbnN0IHEgPSBwICsgX2MgKiAoMSAtIGYpO1xuICAgICAgICBjb25zdCB0ID0gcCArIF9jICogZjtcbiAgICAgICAgY29uc3QgdiA9IHAgKyBfYztcbiAgICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3YsIHQsIHBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtxLCB2LCBwXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcCwgdiwgdF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3AsIHEsIHZdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt0LCBwLCB2XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdiwgcCwgcV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoY2cycmdiO1xuIiwgImltcG9ydCB7IHVucGFjaywgbWF4LCBtaW4gfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmNvbnN0IHJnYjJoY2cgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgbWluUmdiID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IG1heFJnYiA9IG1heChyLCBnLCBiKTtcbiAgICBjb25zdCBkZWx0YSA9IG1heFJnYiAtIG1pblJnYjtcbiAgICBjb25zdCBjID0gKGRlbHRhICogMTAwKSAvIDI1NTtcbiAgICBjb25zdCBfZyA9IChtaW5SZ2IgLyAoMjU1IC0gZGVsdGEpKSAqIDEwMDtcbiAgICBsZXQgaDtcbiAgICBpZiAoZGVsdGEgPT09IDApIHtcbiAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHIgPT09IG1heFJnYikgaCA9IChnIC0gYikgLyBkZWx0YTtcbiAgICAgICAgaWYgKGcgPT09IG1heFJnYikgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gICAgICAgIGlmIChiID09PSBtYXhSZ2IpIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuICAgICAgICBoICo9IDYwO1xuICAgICAgICBpZiAoaCA8IDApIGggKz0gMzYwO1xuICAgIH1cbiAgICByZXR1cm4gW2gsIGMsIF9nXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoY2c7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaGNnMnJnYiBmcm9tICcuL2hjZzJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoY2cgZnJvbSAnLi9yZ2IyaGNnLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhjZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhjZyh0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmhjZyA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hjZycpO1xuXG5pbnB1dC5mb3JtYXQuaGNnID0gaGNnMnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAxLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hjZycpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdoY2cnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiY29uc3QgUkVfSEVYID0gL14jPyhbQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfSkkLztcbmNvbnN0IFJFX0hFWEEgPSAvXiM/KFtBLUZhLWYwLTldezh9fFtBLUZhLWYwLTldezR9KSQvO1xuXG5jb25zdCBoZXgycmdiID0gKGhleCkgPT4ge1xuICAgIGlmIChoZXgubWF0Y2goUkVfSEVYKSkge1xuICAgICAgICAvLyByZW1vdmUgb3B0aW9uYWwgbGVhZGluZyAjXG4gICAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0IHx8IGhleC5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgICAgIGhleCA9IGhleC5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgc2l4LWRpZ2l0XG4gICAgICAgIGlmIChoZXgubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBoZXggPSBoZXguc3BsaXQoJycpO1xuICAgICAgICAgICAgaGV4ID0gaGV4WzBdICsgaGV4WzBdICsgaGV4WzFdICsgaGV4WzFdICsgaGV4WzJdICsgaGV4WzJdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHUgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgICAgY29uc3QgciA9IHUgPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAodSA+PiA4KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSB1ICYgMHhmZjtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbiAgICB9XG5cbiAgICAvLyBtYXRjaCByZ2JhIGhleCBmb3JtYXQsIGVnICNGRjAwMDA3N1xuICAgIGlmIChoZXgubWF0Y2goUkVfSEVYQSkpIHtcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDUgfHwgaGV4Lmxlbmd0aCA9PT0gOSkge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIG9wdGlvbmFsIGxlYWRpbmcgI1xuICAgICAgICAgICAgaGV4ID0gaGV4LnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHBhbmQgc2hvcnQtbm90YXRpb24gdG8gZnVsbCBlaWdodC1kaWdpdFxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGhleCA9XG4gICAgICAgICAgICAgICAgaGV4WzBdICtcbiAgICAgICAgICAgICAgICBoZXhbMF0gK1xuICAgICAgICAgICAgICAgIGhleFsxXSArXG4gICAgICAgICAgICAgICAgaGV4WzFdICtcbiAgICAgICAgICAgICAgICBoZXhbMl0gK1xuICAgICAgICAgICAgICAgIGhleFsyXSArXG4gICAgICAgICAgICAgICAgaGV4WzNdICtcbiAgICAgICAgICAgICAgICBoZXhbM107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdSA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgICAgICBjb25zdCByID0gKHUgPj4gMjQpICYgMHhmZjtcbiAgICAgICAgY29uc3QgZyA9ICh1ID4+IDE2KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSAodSA+PiA4KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGEgPSBNYXRoLnJvdW5kKCgodSAmIDB4ZmYpIC8gMHhmZikgKiAxMDApIC8gMTAwO1xuICAgICAgICByZXR1cm4gW3IsIGcsIGIsIGFdO1xuICAgIH1cblxuICAgIC8vIHdlIHVzZWQgdG8gY2hlY2sgZm9yIGNzcyBjb2xvcnMgaGVyZVxuICAgIC8vIGlmIF9pbnB1dC5jc3M/IGFuZCByZ2IgPSBfaW5wdXQuY3NzIGhleFxuICAgIC8vICAgICByZXR1cm4gcmdiXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gaGV4IGNvbG9yOiAke2hleH1gKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhleDJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgcmdiMmhleCA9ICguLi5hcmdzKSA9PiB7XG4gICAgbGV0IFtyLCBnLCBiLCBhXSA9IHVucGFjayhhcmdzLCAncmdiYScpO1xuICAgIGxldCBtb2RlID0gbGFzdChhcmdzKSB8fCAnYXV0byc7XG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCkgYSA9IDE7XG4gICAgaWYgKG1vZGUgPT09ICdhdXRvJykge1xuICAgICAgICBtb2RlID0gYSA8IDEgPyAncmdiYScgOiAncmdiJztcbiAgICB9XG4gICAgciA9IHJvdW5kKHIpO1xuICAgIGcgPSByb3VuZChnKTtcbiAgICBiID0gcm91bmQoYik7XG4gICAgY29uc3QgdSA9IChyIDw8IDE2KSB8IChnIDw8IDgpIHwgYjtcbiAgICBsZXQgc3RyID0gJzAwMDAwMCcgKyB1LnRvU3RyaW5nKDE2KTsgLy8jLnRvVXBwZXJDYXNlKCk7XG4gICAgc3RyID0gc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gNik7XG4gICAgbGV0IGh4YSA9ICcwJyArIHJvdW5kKGEgKiAyNTUpLnRvU3RyaW5nKDE2KTtcbiAgICBoeGEgPSBoeGEuc3Vic3RyKGh4YS5sZW5ndGggLSAyKTtcbiAgICBzd2l0Y2ggKG1vZGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdyZ2JhJzpcbiAgICAgICAgICAgIHJldHVybiBgIyR7c3RyfSR7aHhhfWA7XG4gICAgICAgIGNhc2UgJ2FyZ2InOlxuICAgICAgICAgICAgcmV0dXJuIGAjJHtoeGF9JHtzdHJ9YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBgIyR7c3RyfWA7XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmhleDtcbiIsICJpbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaGV4MnJnYiBmcm9tICcuL2hleDJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoZXggZnJvbSAnLi9yZ2IyaGV4LmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhleCA9IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgcmV0dXJuIHJnYjJoZXgodGhpcy5fcmdiLCBtb2RlKTtcbn07XG5cbmNocm9tYS5oZXggPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoZXgnKTtcblxuaW5wdXQuZm9ybWF0LmhleCA9IGhleDJyZ2I7XG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDQsXG4gICAgdGVzdDogKGgsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXJlc3QubGVuZ3RoICYmXG4gICAgICAgICAgICB0eXBlKGgpID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgWzMsIDQsIDUsIDYsIDcsIDgsIDldLmluZGV4T2YoaC5sZW5ndGgpID49IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hleCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIGxpbWl0LCBUV09QSSwgUElUSElSRCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgY29zIH0gPSBNYXRoO1xuXG4vKlxuICogaHVlIFswLi4zNjBdXG4gKiBzYXR1cmF0aW9uIFswLi4xXVxuICogaW50ZW5zaXR5IFswLi4xXVxuICovXG5jb25zdCBoc2kycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvKlxuICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICBodHRwOi8vaHVtbWVyLnN0YW5mb3JkLmVkdS9tdXNlaW5mby9kb2MvZXhhbXBsZXMvaHVtZHJ1bS9rZXlzY2FwZTIvaHNpMnJnYi5jcHBcbiAgICAqL1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzaScpO1xuICAgIGxldCBbaCwgcywgaV0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuXG4gICAgaWYgKGlzTmFOKGgpKSBoID0gMDtcbiAgICBpZiAoaXNOYU4ocykpIHMgPSAwO1xuICAgIC8vIG5vcm1hbGl6ZSBodWVcbiAgICBpZiAoaCA+IDM2MCkgaCAtPSAzNjA7XG4gICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICBoIC89IDM2MDtcbiAgICBpZiAoaCA8IDEgLyAzKSB7XG4gICAgICAgIGIgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgciA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgZyA9IDEgLSAoYiArIHIpO1xuICAgIH0gZWxzZSBpZiAoaCA8IDIgLyAzKSB7XG4gICAgICAgIGggLT0gMSAvIDM7XG4gICAgICAgIHIgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgZyA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgYiA9IDEgLSAociArIGcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGggLT0gMiAvIDM7XG4gICAgICAgIGcgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgYiA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgciA9IDEgLSAoZyArIGIpO1xuICAgIH1cbiAgICByID0gbGltaXQoaSAqIHIgKiAzKTtcbiAgICBnID0gbGltaXQoaSAqIGcgKiAzKTtcbiAgICBiID0gbGltaXQoaSAqIGIgKiAzKTtcbiAgICByZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzaTJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBUV09QSSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgbWluLCBzcXJ0LCBhY29zIH0gPSBNYXRoO1xuXG5jb25zdCByZ2IyaHNpID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvKlxuICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICBodHRwOi8vaHVtbWVyLnN0YW5mb3JkLmVkdS9tdXNlaW5mby9kb2MvZXhhbXBsZXMvaHVtZHJ1bS9rZXlzY2FwZTIvcmdiMmhzaS5jcHBcbiAgICAqL1xuICAgIGxldCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIHIgLz0gMjU1O1xuICAgIGcgLz0gMjU1O1xuICAgIGIgLz0gMjU1O1xuICAgIGxldCBoO1xuICAgIGNvbnN0IG1pbl8gPSBtaW4ociwgZywgYik7XG4gICAgY29uc3QgaSA9IChyICsgZyArIGIpIC8gMztcbiAgICBjb25zdCBzID0gaSA+IDAgPyAxIC0gbWluXyAvIGkgOiAwO1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIGggPSBOYU47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaCA9IChyIC0gZyArIChyIC0gYikpIC8gMjtcbiAgICAgICAgaCAvPSBzcXJ0KChyIC0gZykgKiAociAtIGcpICsgKHIgLSBiKSAqIChnIC0gYikpO1xuICAgICAgICBoID0gYWNvcyhoKTtcbiAgICAgICAgaWYgKGIgPiBnKSB7XG4gICAgICAgICAgICBoID0gVFdPUEkgLSBoO1xuICAgICAgICB9XG4gICAgICAgIGggLz0gVFdPUEk7XG4gICAgfVxuICAgIHJldHVybiBbaCAqIDM2MCwgcywgaV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IyaHNpO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhzaTJyZ2IgZnJvbSAnLi9oc2kycmdiLmpzJztcbmltcG9ydCByZ2IyaHNpIGZyb20gJy4vcmdiMmhzaS5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oc2kgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoc2kodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oc2kgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoc2knKTtcblxuaW5wdXQuZm9ybWF0LmhzaSA9IGhzaTJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2knKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaHNpJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhzbDJyZ2IgZnJvbSAnLi9oc2wycmdiLmpzJztcbmltcG9ydCByZ2IyaHNsIGZyb20gJy4vcmdiMmhzbC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oc2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoc2wodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oc2wgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoc2wnKTtcblxuaW5wdXQuZm9ybWF0LmhzbCA9IGhzbDJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2wnKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaHNsJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgZmxvb3IgfSA9IE1hdGg7XG5cbmNvbnN0IGhzdjJyZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzdicpO1xuICAgIGxldCBbaCwgcywgdl0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuICAgIHYgKj0gMjU1O1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IHY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGggPT09IDM2MCkgaCA9IDA7XG4gICAgICAgIGlmIChoID4gMzYwKSBoIC09IDM2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICAgICAgaCAvPSA2MDtcblxuICAgICAgICBjb25zdCBpID0gZmxvb3IoaCk7XG4gICAgICAgIGNvbnN0IGYgPSBoIC0gaTtcbiAgICAgICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xuICAgICAgICBjb25zdCBxID0gdiAqICgxIC0gcyAqIGYpO1xuICAgICAgICBjb25zdCB0ID0gdiAqICgxIC0gcyAqICgxIC0gZikpO1xuXG4gICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt2LCB0LCBwXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcSwgdiwgcF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3AsIHYsIHRdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtwLCBxLCB2XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdCwgcCwgdl07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3YsIHAsIHFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaHN2MnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IG1pbiwgbWF4IH0gPSBNYXRoO1xuXG4vKlxuICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAqIC0gcmdiMmhzdihyLGcsYilcbiAqIC0gcmdiMmhzdihbcixnLGJdKVxuICogLSByZ2IyaHN2KHtyLGcsYn0pXG4gKi9cbmNvbnN0IHJnYjJoc2wgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGxldCBbciwgZywgYl0gPSBhcmdzO1xuICAgIGNvbnN0IG1pbl8gPSBtaW4ociwgZywgYik7XG4gICAgY29uc3QgbWF4XyA9IG1heChyLCBnLCBiKTtcbiAgICBjb25zdCBkZWx0YSA9IG1heF8gLSBtaW5fO1xuICAgIGxldCBoLCBzLCB2O1xuICAgIHYgPSBtYXhfIC8gMjU1LjA7XG4gICAgaWYgKG1heF8gPT09IDApIHtcbiAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgICAgIHMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHMgPSBkZWx0YSAvIG1heF87XG4gICAgICAgIGlmIChyID09PSBtYXhfKSBoID0gKGcgLSBiKSAvIGRlbHRhO1xuICAgICAgICBpZiAoZyA9PT0gbWF4XykgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gICAgICAgIGlmIChiID09PSBtYXhfKSBoID0gNCArIChyIC0gZykgLyBkZWx0YTtcbiAgICAgICAgaCAqPSA2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICB9XG4gICAgcmV0dXJuIFtoLCBzLCB2XTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoc2w7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaHN2MnJnYiBmcm9tICcuL2hzdjJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoc3YgZnJvbSAnLi9yZ2IyaHN2LmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhzdiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhzdih0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmhzdiA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hzdicpO1xuXG5pbnB1dC5mb3JtYXQuaHN2ID0gaHN2MnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAyLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzdicpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdoc3YnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiZXhwb3J0IGRlZmF1bHQge1xuICAgIC8vIENvcnJlc3BvbmRzIHJvdWdobHkgdG8gUkdCIGJyaWdodGVyL2RhcmtlclxuICAgIEtuOiAxOCxcblxuICAgIC8vIEQ2NSBzdGFuZGFyZCByZWZlcmVudFxuICAgIFhuOiAwLjk1MDQ3LFxuICAgIFluOiAxLFxuICAgIFpuOiAxLjA4ODgzLFxuXG4gICAgdDA6IDAuMTM3OTMxMDM0LCAvLyA0IC8gMjlcbiAgICB0MTogMC4yMDY4OTY1NTIsIC8vIDYgLyAyOVxuICAgIHQyOiAwLjEyODQxODU1LCAvLyAzICogdDEgKiB0MVxuICAgIHQzOiAwLjAwODg1NjQ1MiAvLyB0MSAqIHQxICogdDFcbn07XG4iLCAiaW1wb3J0IExBQl9DT05TVEFOVFMgZnJvbSAnLi9sYWItY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcG93IH0gPSBNYXRoO1xuXG4vKlxuICogTCogWzAuLjEwMF1cbiAqIGEgWy0xMDAuLjEwMF1cbiAqIGIgWy0xMDAuLjEwMF1cbiAqL1xuY29uc3QgbGFiMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGFiJyk7XG4gICAgY29uc3QgW2wsIGEsIGJdID0gYXJncztcbiAgICBsZXQgeCwgeSwgeiwgciwgZywgYl87XG5cbiAgICB5ID0gKGwgKyAxNikgLyAxMTY7XG4gICAgeCA9IGlzTmFOKGEpID8geSA6IHkgKyBhIC8gNTAwO1xuICAgIHogPSBpc05hTihiKSA/IHkgOiB5IC0gYiAvIDIwMDtcblxuICAgIHkgPSBMQUJfQ09OU1RBTlRTLlluICogbGFiX3h5eih5KTtcbiAgICB4ID0gTEFCX0NPTlNUQU5UUy5YbiAqIGxhYl94eXooeCk7XG4gICAgeiA9IExBQl9DT05TVEFOVFMuWm4gKiBsYWJfeHl6KHopO1xuXG4gICAgciA9IHh5el9yZ2IoMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAwLjQ5ODUzMTQgKiB6KTsgLy8gRDY1IC0+IHNSR0JcbiAgICBnID0geHl6X3JnYigtMC45NjkyNjYgKiB4ICsgMS44NzYwMTA4ICogeSArIDAuMDQxNTU2ICogeik7XG4gICAgYl8gPSB4eXpfcmdiKDAuMDU1NjQzNCAqIHggLSAwLjIwNDAyNTkgKiB5ICsgMS4wNTcyMjUyICogeik7XG5cbiAgICByZXR1cm4gW3IsIGcsIGJfLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG59O1xuXG5jb25zdCB4eXpfcmdiID0gKHIpID0+IHtcbiAgICByZXR1cm4gMjU1ICogKHIgPD0gMC4wMDMwNCA/IDEyLjkyICogciA6IDEuMDU1ICogcG93KHIsIDEgLyAyLjQpIC0gMC4wNTUpO1xufTtcblxuY29uc3QgbGFiX3h5eiA9ICh0KSA9PiB7XG4gICAgcmV0dXJuIHQgPiBMQUJfQ09OU1RBTlRTLnQxXG4gICAgICAgID8gdCAqIHQgKiB0XG4gICAgICAgIDogTEFCX0NPTlNUQU5UUy50MiAqICh0IC0gTEFCX0NPTlNUQU5UUy50MCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsYWIycmdiO1xuIiwgImltcG9ydCBMQUJfQ09OU1RBTlRTIGZyb20gJy4vbGFiLWNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHBvdyB9ID0gTWF0aDtcblxuY29uc3QgcmdiMmxhYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCBbeCwgeSwgel0gPSByZ2IyeHl6KHIsIGcsIGIpO1xuICAgIGNvbnN0IGwgPSAxMTYgKiB5IC0gMTY7XG4gICAgcmV0dXJuIFtsIDwgMCA/IDAgOiBsLCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopXTtcbn07XG5cbmNvbnN0IHJnYl94eXogPSAocikgPT4ge1xuICAgIGlmICgociAvPSAyNTUpIDw9IDAuMDQwNDUpIHJldHVybiByIC8gMTIuOTI7XG4gICAgcmV0dXJuIHBvdygociArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufTtcblxuY29uc3QgeHl6X2xhYiA9ICh0KSA9PiB7XG4gICAgaWYgKHQgPiBMQUJfQ09OU1RBTlRTLnQzKSByZXR1cm4gcG93KHQsIDEgLyAzKTtcbiAgICByZXR1cm4gdCAvIExBQl9DT05TVEFOVFMudDIgKyBMQUJfQ09OU1RBTlRTLnQwO1xufTtcblxuY29uc3QgcmdiMnh5eiA9IChyLCBnLCBiKSA9PiB7XG4gICAgciA9IHJnYl94eXoocik7XG4gICAgZyA9IHJnYl94eXooZyk7XG4gICAgYiA9IHJnYl94eXooYik7XG4gICAgY29uc3QgeCA9IHh5el9sYWIoXG4gICAgICAgICgwLjQxMjQ1NjQgKiByICsgMC4zNTc1NzYxICogZyArIDAuMTgwNDM3NSAqIGIpIC8gTEFCX0NPTlNUQU5UUy5YblxuICAgICk7XG4gICAgY29uc3QgeSA9IHh5el9sYWIoXG4gICAgICAgICgwLjIxMjY3MjkgKiByICsgMC43MTUxNTIyICogZyArIDAuMDcyMTc1ICogYikgLyBMQUJfQ09OU1RBTlRTLlluXG4gICAgKTtcbiAgICBjb25zdCB6ID0geHl6X2xhYihcbiAgICAgICAgKDAuMDE5MzMzOSAqIHIgKyAwLjExOTE5MiAqIGcgKyAwLjk1MDMwNDEgKiBiKSAvIExBQl9DT05TVEFOVFMuWm5cbiAgICApO1xuICAgIHJldHVybiBbeCwgeSwgel07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IybGFiO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGxhYjJyZ2IgZnJvbSAnLi9sYWIycmdiLmpzJztcbmltcG9ydCByZ2IybGFiIGZyb20gJy4vcmdiMmxhYi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5sYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJsYWIodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5sYWIgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdsYWInKTtcblxuaW5wdXQuZm9ybWF0LmxhYiA9IGxhYjJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnbGFiJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjaywgREVHMlJBRCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgc2luLCBjb3MgfSA9IE1hdGg7XG5cbmNvbnN0IGxjaDJsYWIgPSAoLi4uYXJncykgPT4ge1xuICAgIC8qXG4gICAgQ29udmVydCBmcm9tIGEgcXVhbGl0YXRpdmUgcGFyYW1ldGVyIGggYW5kIGEgcXVhbnRpdGF0aXZlIHBhcmFtZXRlciBsIHRvIGEgMjQtYml0IHBpeGVsLlxuICAgIFRoZXNlIGZvcm11bGFzIHdlcmUgaW52ZW50ZWQgYnkgRGF2aWQgRGFscnltcGxlIHRvIG9idGFpbiBtYXhpbXVtIGNvbnRyYXN0IHdpdGhvdXQgZ29pbmdcbiAgICBvdXQgb2YgZ2FtdXQgaWYgdGhlIHBhcmFtZXRlcnMgYXJlIGluIHRoZSByYW5nZSAwLTEuXG5cbiAgICBBIHNhdHVyYXRpb24gbXVsdGlwbGllciB3YXMgYWRkZWQgYnkgR3JlZ29yIEFpc2NoXG4gICAgKi9cbiAgICBsZXQgW2wsIGMsIGhdID0gdW5wYWNrKGFyZ3MsICdsY2gnKTtcbiAgICBpZiAoaXNOYU4oaCkpIGggPSAwO1xuICAgIGggPSBoICogREVHMlJBRDtcbiAgICByZXR1cm4gW2wsIGNvcyhoKSAqIGMsIHNpbihoKSAqIGNdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGNoMmxhYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMmxhYiBmcm9tICcuL2xjaDJsYWIuanMnO1xuaW1wb3J0IGxhYjJyZ2IgZnJvbSAnLi4vbGFiL2xhYjJyZ2IuanMnO1xuXG5jb25zdCBsY2gycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsY2gnKTtcbiAgICBjb25zdCBbbCwgYywgaF0gPSBhcmdzO1xuICAgIGNvbnN0IFtMLCBhLCBiX10gPSBsY2gybGFiKGwsIGMsIGgpO1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IGxhYjJyZ2IoTCwgYSwgYl8pO1xuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGNoMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMnJnYiBmcm9tICcuL2xjaDJyZ2IuanMnO1xuXG5jb25zdCBoY2wycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBoY2wgPSB1bnBhY2soYXJncywgJ2hjbCcpLnJldmVyc2UoKTtcbiAgICByZXR1cm4gbGNoMnJnYiguLi5oY2wpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaGNsMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIFJBRDJERUcgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHNxcnQsIGF0YW4yLCByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgbGFiMmxjaCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW2wsIGEsIGJdID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICBjb25zdCBjID0gc3FydChhICogYSArIGIgKiBiKTtcbiAgICBsZXQgaCA9IChhdGFuMihiLCBhKSAqIFJBRDJERUcgKyAzNjApICUgMzYwO1xuICAgIGlmIChyb3VuZChjICogMTAwMDApID09PSAwKSBoID0gTnVtYmVyLk5hTjtcbiAgICByZXR1cm4gW2wsIGMsIGhdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGFiMmxjaDtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgcmdiMmxhYiBmcm9tICcuLi9sYWIvcmdiMmxhYi5qcyc7XG5pbXBvcnQgbGFiMmxjaCBmcm9tICcuL2xhYjJsY2guanMnO1xuXG5jb25zdCByZ2IybGNoID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IFtsLCBhLCBiX10gPSByZ2IybGFiKHIsIGcsIGIpO1xuICAgIHJldHVybiBsYWIybGNoKGwsIGEsIGJfKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJsY2g7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgbGNoMnJnYiBmcm9tICcuL2xjaDJyZ2IuanMnO1xuaW1wb3J0IGhjbDJyZ2IgZnJvbSAnLi9oY2wycmdiLmpzJztcbmltcG9ydCByZ2IybGNoIGZyb20gJy4vcmdiMmxjaC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5sY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJsY2godGhpcy5fcmdiKTtcbn07XG5Db2xvci5wcm90b3R5cGUuaGNsID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IybGNoKHRoaXMuX3JnYikucmV2ZXJzZSgpO1xufTtcblxuY2hyb21hLmxjaCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2xjaCcpO1xuY2hyb21hLmhjbCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hjbCcpO1xuXG5pbnB1dC5mb3JtYXQubGNoID0gbGNoMnJnYjtcbmlucHV0LmZvcm1hdC5oY2wgPSBoY2wycmdiO1xuWydsY2gnLCAnaGNsJ10uZm9yRWFjaCgobSkgPT5cbiAgICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCBtKTtcbiAgICAgICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuKTtcbiIsICIvKipcblx0WDExIGNvbG9yIG5hbWVzXG5cblx0aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8jc3ZnLWNvbG9yXG4qL1xuXG5jb25zdCB3M2N4MTEgPSB7XG4gICAgYWxpY2VibHVlOiAnI2YwZjhmZicsXG4gICAgYW50aXF1ZXdoaXRlOiAnI2ZhZWJkNycsXG4gICAgYXF1YTogJyMwMGZmZmYnLFxuICAgIGFxdWFtYXJpbmU6ICcjN2ZmZmQ0JyxcbiAgICBhenVyZTogJyNmMGZmZmYnLFxuICAgIGJlaWdlOiAnI2Y1ZjVkYycsXG4gICAgYmlzcXVlOiAnI2ZmZTRjNCcsXG4gICAgYmxhY2s6ICcjMDAwMDAwJyxcbiAgICBibGFuY2hlZGFsbW9uZDogJyNmZmViY2QnLFxuICAgIGJsdWU6ICcjMDAwMGZmJyxcbiAgICBibHVldmlvbGV0OiAnIzhhMmJlMicsXG4gICAgYnJvd246ICcjYTUyYTJhJyxcbiAgICBidXJseXdvb2Q6ICcjZGViODg3JyxcbiAgICBjYWRldGJsdWU6ICcjNWY5ZWEwJyxcbiAgICBjaGFydHJldXNlOiAnIzdmZmYwMCcsXG4gICAgY2hvY29sYXRlOiAnI2QyNjkxZScsXG4gICAgY29yYWw6ICcjZmY3ZjUwJyxcbiAgICBjb3JuZmxvd2VyYmx1ZTogJyM2NDk1ZWQnLFxuICAgIGNvcm5zaWxrOiAnI2ZmZjhkYycsXG4gICAgY3JpbXNvbjogJyNkYzE0M2MnLFxuICAgIGN5YW46ICcjMDBmZmZmJyxcbiAgICBkYXJrYmx1ZTogJyMwMDAwOGInLFxuICAgIGRhcmtjeWFuOiAnIzAwOGI4YicsXG4gICAgZGFya2dvbGRlbnJvZDogJyNiODg2MGInLFxuICAgIGRhcmtncmF5OiAnI2E5YTlhOScsXG4gICAgZGFya2dyZWVuOiAnIzAwNjQwMCcsXG4gICAgZGFya2dyZXk6ICcjYTlhOWE5JyxcbiAgICBkYXJra2hha2k6ICcjYmRiNzZiJyxcbiAgICBkYXJrbWFnZW50YTogJyM4YjAwOGInLFxuICAgIGRhcmtvbGl2ZWdyZWVuOiAnIzU1NmIyZicsXG4gICAgZGFya29yYW5nZTogJyNmZjhjMDAnLFxuICAgIGRhcmtvcmNoaWQ6ICcjOTkzMmNjJyxcbiAgICBkYXJrcmVkOiAnIzhiMDAwMCcsXG4gICAgZGFya3NhbG1vbjogJyNlOTk2N2EnLFxuICAgIGRhcmtzZWFncmVlbjogJyM4ZmJjOGYnLFxuICAgIGRhcmtzbGF0ZWJsdWU6ICcjNDgzZDhiJyxcbiAgICBkYXJrc2xhdGVncmF5OiAnIzJmNGY0ZicsXG4gICAgZGFya3NsYXRlZ3JleTogJyMyZjRmNGYnLFxuICAgIGRhcmt0dXJxdW9pc2U6ICcjMDBjZWQxJyxcbiAgICBkYXJrdmlvbGV0OiAnIzk0MDBkMycsXG4gICAgZGVlcHBpbms6ICcjZmYxNDkzJyxcbiAgICBkZWVwc2t5Ymx1ZTogJyMwMGJmZmYnLFxuICAgIGRpbWdyYXk6ICcjNjk2OTY5JyxcbiAgICBkaW1ncmV5OiAnIzY5Njk2OScsXG4gICAgZG9kZ2VyYmx1ZTogJyMxZTkwZmYnLFxuICAgIGZpcmVicmljazogJyNiMjIyMjInLFxuICAgIGZsb3JhbHdoaXRlOiAnI2ZmZmFmMCcsXG4gICAgZm9yZXN0Z3JlZW46ICcjMjI4YjIyJyxcbiAgICBmdWNoc2lhOiAnI2ZmMDBmZicsXG4gICAgZ2FpbnNib3JvOiAnI2RjZGNkYycsXG4gICAgZ2hvc3R3aGl0ZTogJyNmOGY4ZmYnLFxuICAgIGdvbGQ6ICcjZmZkNzAwJyxcbiAgICBnb2xkZW5yb2Q6ICcjZGFhNTIwJyxcbiAgICBncmF5OiAnIzgwODA4MCcsXG4gICAgZ3JlZW46ICcjMDA4MDAwJyxcbiAgICBncmVlbnllbGxvdzogJyNhZGZmMmYnLFxuICAgIGdyZXk6ICcjODA4MDgwJyxcbiAgICBob25leWRldzogJyNmMGZmZjAnLFxuICAgIGhvdHBpbms6ICcjZmY2OWI0JyxcbiAgICBpbmRpYW5yZWQ6ICcjY2Q1YzVjJyxcbiAgICBpbmRpZ286ICcjNGIwMDgyJyxcbiAgICBpdm9yeTogJyNmZmZmZjAnLFxuICAgIGtoYWtpOiAnI2YwZTY4YycsXG4gICAgbGFzZXJsZW1vbjogJyNmZmZmNTQnLFxuICAgIGxhdmVuZGVyOiAnI2U2ZTZmYScsXG4gICAgbGF2ZW5kZXJibHVzaDogJyNmZmYwZjUnLFxuICAgIGxhd25ncmVlbjogJyM3Y2ZjMDAnLFxuICAgIGxlbW9uY2hpZmZvbjogJyNmZmZhY2QnLFxuICAgIGxpZ2h0Ymx1ZTogJyNhZGQ4ZTYnLFxuICAgIGxpZ2h0Y29yYWw6ICcjZjA4MDgwJyxcbiAgICBsaWdodGN5YW46ICcjZTBmZmZmJyxcbiAgICBsaWdodGdvbGRlbnJvZDogJyNmYWZhZDInLFxuICAgIGxpZ2h0Z29sZGVucm9keWVsbG93OiAnI2ZhZmFkMicsXG4gICAgbGlnaHRncmF5OiAnI2QzZDNkMycsXG4gICAgbGlnaHRncmVlbjogJyM5MGVlOTAnLFxuICAgIGxpZ2h0Z3JleTogJyNkM2QzZDMnLFxuICAgIGxpZ2h0cGluazogJyNmZmI2YzEnLFxuICAgIGxpZ2h0c2FsbW9uOiAnI2ZmYTA3YScsXG4gICAgbGlnaHRzZWFncmVlbjogJyMyMGIyYWEnLFxuICAgIGxpZ2h0c2t5Ymx1ZTogJyM4N2NlZmEnLFxuICAgIGxpZ2h0c2xhdGVncmF5OiAnIzc3ODg5OScsXG4gICAgbGlnaHRzbGF0ZWdyZXk6ICcjNzc4ODk5JyxcbiAgICBsaWdodHN0ZWVsYmx1ZTogJyNiMGM0ZGUnLFxuICAgIGxpZ2h0eWVsbG93OiAnI2ZmZmZlMCcsXG4gICAgbGltZTogJyMwMGZmMDAnLFxuICAgIGxpbWVncmVlbjogJyMzMmNkMzInLFxuICAgIGxpbmVuOiAnI2ZhZjBlNicsXG4gICAgbWFnZW50YTogJyNmZjAwZmYnLFxuICAgIG1hcm9vbjogJyM4MDAwMDAnLFxuICAgIG1hcm9vbjI6ICcjN2YwMDAwJyxcbiAgICBtYXJvb24zOiAnI2IwMzA2MCcsXG4gICAgbWVkaXVtYXF1YW1hcmluZTogJyM2NmNkYWEnLFxuICAgIG1lZGl1bWJsdWU6ICcjMDAwMGNkJyxcbiAgICBtZWRpdW1vcmNoaWQ6ICcjYmE1NWQzJyxcbiAgICBtZWRpdW1wdXJwbGU6ICcjOTM3MGRiJyxcbiAgICBtZWRpdW1zZWFncmVlbjogJyMzY2IzNzEnLFxuICAgIG1lZGl1bXNsYXRlYmx1ZTogJyM3YjY4ZWUnLFxuICAgIG1lZGl1bXNwcmluZ2dyZWVuOiAnIzAwZmE5YScsXG4gICAgbWVkaXVtdHVycXVvaXNlOiAnIzQ4ZDFjYycsXG4gICAgbWVkaXVtdmlvbGV0cmVkOiAnI2M3MTU4NScsXG4gICAgbWlkbmlnaHRibHVlOiAnIzE5MTk3MCcsXG4gICAgbWludGNyZWFtOiAnI2Y1ZmZmYScsXG4gICAgbWlzdHlyb3NlOiAnI2ZmZTRlMScsXG4gICAgbW9jY2FzaW46ICcjZmZlNGI1JyxcbiAgICBuYXZham93aGl0ZTogJyNmZmRlYWQnLFxuICAgIG5hdnk6ICcjMDAwMDgwJyxcbiAgICBvbGRsYWNlOiAnI2ZkZjVlNicsXG4gICAgb2xpdmU6ICcjODA4MDAwJyxcbiAgICBvbGl2ZWRyYWI6ICcjNmI4ZTIzJyxcbiAgICBvcmFuZ2U6ICcjZmZhNTAwJyxcbiAgICBvcmFuZ2VyZWQ6ICcjZmY0NTAwJyxcbiAgICBvcmNoaWQ6ICcjZGE3MGQ2JyxcbiAgICBwYWxlZ29sZGVucm9kOiAnI2VlZThhYScsXG4gICAgcGFsZWdyZWVuOiAnIzk4ZmI5OCcsXG4gICAgcGFsZXR1cnF1b2lzZTogJyNhZmVlZWUnLFxuICAgIHBhbGV2aW9sZXRyZWQ6ICcjZGI3MDkzJyxcbiAgICBwYXBheWF3aGlwOiAnI2ZmZWZkNScsXG4gICAgcGVhY2hwdWZmOiAnI2ZmZGFiOScsXG4gICAgcGVydTogJyNjZDg1M2YnLFxuICAgIHBpbms6ICcjZmZjMGNiJyxcbiAgICBwbHVtOiAnI2RkYTBkZCcsXG4gICAgcG93ZGVyYmx1ZTogJyNiMGUwZTYnLFxuICAgIHB1cnBsZTogJyM4MDAwODAnLFxuICAgIHB1cnBsZTI6ICcjN2YwMDdmJyxcbiAgICBwdXJwbGUzOiAnI2EwMjBmMCcsXG4gICAgcmViZWNjYXB1cnBsZTogJyM2NjMzOTknLFxuICAgIHJlZDogJyNmZjAwMDAnLFxuICAgIHJvc3licm93bjogJyNiYzhmOGYnLFxuICAgIHJveWFsYmx1ZTogJyM0MTY5ZTEnLFxuICAgIHNhZGRsZWJyb3duOiAnIzhiNDUxMycsXG4gICAgc2FsbW9uOiAnI2ZhODA3MicsXG4gICAgc2FuZHlicm93bjogJyNmNGE0NjAnLFxuICAgIHNlYWdyZWVuOiAnIzJlOGI1NycsXG4gICAgc2Vhc2hlbGw6ICcjZmZmNWVlJyxcbiAgICBzaWVubmE6ICcjYTA1MjJkJyxcbiAgICBzaWx2ZXI6ICcjYzBjMGMwJyxcbiAgICBza3libHVlOiAnIzg3Y2VlYicsXG4gICAgc2xhdGVibHVlOiAnIzZhNWFjZCcsXG4gICAgc2xhdGVncmF5OiAnIzcwODA5MCcsXG4gICAgc2xhdGVncmV5OiAnIzcwODA5MCcsXG4gICAgc25vdzogJyNmZmZhZmEnLFxuICAgIHNwcmluZ2dyZWVuOiAnIzAwZmY3ZicsXG4gICAgc3RlZWxibHVlOiAnIzQ2ODJiNCcsXG4gICAgdGFuOiAnI2QyYjQ4YycsXG4gICAgdGVhbDogJyMwMDgwODAnLFxuICAgIHRoaXN0bGU6ICcjZDhiZmQ4JyxcbiAgICB0b21hdG86ICcjZmY2MzQ3JyxcbiAgICB0dXJxdW9pc2U6ICcjNDBlMGQwJyxcbiAgICB2aW9sZXQ6ICcjZWU4MmVlJyxcbiAgICB3aGVhdDogJyNmNWRlYjMnLFxuICAgIHdoaXRlOiAnI2ZmZmZmZicsXG4gICAgd2hpdGVzbW9rZTogJyNmNWY1ZjUnLFxuICAgIHllbGxvdzogJyNmZmZmMDAnLFxuICAgIHllbGxvd2dyZWVuOiAnIzlhY2QzMidcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHczY3gxMTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCB7IHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmltcG9ydCB3M2N4MTEgZnJvbSAnLi4vLi4vY29sb3JzL3czY3gxMS5qcyc7XG5pbXBvcnQgaGV4MnJnYiBmcm9tICcuLi9oZXgvaGV4MnJnYi5qcyc7XG5pbXBvcnQgcmdiMmhleCBmcm9tICcuLi9oZXgvcmdiMmhleC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5uYW1lID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGhleCA9IHJnYjJoZXgodGhpcy5fcmdiLCAncmdiJyk7XG4gICAgZm9yIChsZXQgbiBvZiBPYmplY3Qua2V5cyh3M2N4MTEpKSB7XG4gICAgICAgIGlmICh3M2N4MTFbbl0gPT09IGhleCkgcmV0dXJuIG4udG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGhleDtcbn07XG5cbmlucHV0LmZvcm1hdC5uYW1lZCA9IChuYW1lKSA9PiB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodzNjeDExW25hbWVdKSByZXR1cm4gaGV4MnJnYih3M2N4MTFbbmFtZV0pO1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb2xvciBuYW1lOiAnICsgbmFtZSk7XG59O1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDUsXG4gICAgdGVzdDogKGgsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlKGgpID09PSAnc3RyaW5nJyAmJiB3M2N4MTFbaC50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgICAgcmV0dXJuICduYW1lZCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCBudW0ycmdiID0gKG51bSkgPT4ge1xuICAgIGlmICh0eXBlKG51bSkgPT0gJ251bWJlcicgJiYgbnVtID49IDAgJiYgbnVtIDw9IDB4ZmZmZmZmKSB7XG4gICAgICAgIGNvbnN0IHIgPSBudW0gPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAobnVtID4+IDgpICYgMHhmZjtcbiAgICAgICAgY29uc3QgYiA9IG51bSAmIDB4ZmY7XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgMV07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBudW0gY29sb3I6ICcgKyBudW0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbnVtMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmNvbnN0IHJnYjJudW0gPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgcmV0dXJuIChyIDw8IDE2KSArIChnIDw8IDgpICsgYjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJudW07XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IG51bTJyZ2IgZnJvbSAnLi9udW0ycmdiLmpzJztcbmltcG9ydCByZ2IybnVtIGZyb20gJy4vcmdiMm51bS5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5udW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJudW0odGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5udW0gPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdudW0nKTtcblxuaW5wdXQuZm9ybWF0Lm51bSA9IG51bTJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogNSxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBhcmdzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgdHlwZShhcmdzWzBdKSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0gPj0gMCAmJlxuICAgICAgICAgICAgYXJnc1swXSA8PSAweGZmZmZmZlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAnbnVtJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuQ29sb3IucHJvdG90eXBlLnJnYiA9IGZ1bmN0aW9uIChybmQgPSB0cnVlKSB7XG4gICAgaWYgKHJuZCA9PT0gZmFsc2UpIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwgMyk7XG4gICAgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLCAzKS5tYXAocm91bmQpO1xufTtcblxuQ29sb3IucHJvdG90eXBlLnJnYmEgPSBmdW5jdGlvbiAocm5kID0gdHJ1ZSkge1xuICAgIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwgNCkubWFwKCh2LCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBpIDwgMyA/IChybmQgPT09IGZhbHNlID8gdiA6IHJvdW5kKHYpKSA6IHY7XG4gICAgfSk7XG59O1xuXG5jaHJvbWEucmdiID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAncmdiJyk7XG5cbmlucHV0LmZvcm1hdC5yZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHJnYmEgPSB1bnBhY2soYXJncywgJ3JnYmEnKTtcbiAgICBpZiAocmdiYVszXSA9PT0gdW5kZWZpbmVkKSByZ2JhWzNdID0gMTtcbiAgICByZXR1cm4gcmdiYTtcbn07XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMyxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGUoYXJncykgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgIChhcmdzLmxlbmd0aCA9PT0gMyB8fFxuICAgICAgICAgICAgICAgIChhcmdzLmxlbmd0aCA9PT0gNCAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlKGFyZ3NbM10pID09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbM10gPj0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBhcmdzWzNdIDw9IDEpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAncmdiJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgIi8qXG4gKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmVpbGJhcnRsZXR0L2NvbG9yLXRlbXBlcmF0dXJlXG4gKi9cblxuY29uc3QgeyBsb2cgfSA9IE1hdGg7XG5cbmNvbnN0IHRlbXBlcmF0dXJlMnJnYiA9IChrZWx2aW4pID0+IHtcbiAgICBjb25zdCB0ZW1wID0ga2VsdmluIC8gMTAwO1xuICAgIGxldCByLCBnLCBiO1xuICAgIGlmICh0ZW1wIDwgNjYpIHtcbiAgICAgICAgciA9IDI1NTtcbiAgICAgICAgZyA9XG4gICAgICAgICAgICB0ZW1wIDwgNlxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogLTE1NS4yNTQ4NTU2MjcwOTE3OSAtXG4gICAgICAgICAgICAgICAgICAwLjQ0NTk2OTUwNDY5NTc5MTMzICogKGcgPSB0ZW1wIC0gMikgK1xuICAgICAgICAgICAgICAgICAgMTA0LjQ5MjE2MTk5MzkzODg4ICogbG9nKGcpO1xuICAgICAgICBiID1cbiAgICAgICAgICAgIHRlbXAgPCAyMFxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogLTI1NC43NjkzNTE4NDEyMDkwMiArXG4gICAgICAgICAgICAgICAgICAwLjgyNzQwOTYwNjQwMDczOTUgKiAoYiA9IHRlbXAgLSAxMCkgK1xuICAgICAgICAgICAgICAgICAgMTE1LjY3OTk0NDAxMDY2MTQ3ICogbG9nKGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHIgPVxuICAgICAgICAgICAgMzUxLjk3NjkwNTY2ODA1NjkzICtcbiAgICAgICAgICAgIDAuMTE0MjA2NDUzNzg0MTY1ICogKHIgPSB0ZW1wIC0gNTUpIC1cbiAgICAgICAgICAgIDQwLjI1MzY2MzA5MzMyMTI3ICogbG9nKHIpO1xuICAgICAgICBnID1cbiAgICAgICAgICAgIDMyNS40NDk0MTI1NzExOTc0ICtcbiAgICAgICAgICAgIDAuMDc5NDM0NTY1MzY2NjIzNDIgKiAoZyA9IHRlbXAgLSA1MCkgLVxuICAgICAgICAgICAgMjguMDg1Mjk2MzUwNzk1NyAqIGxvZyhnKTtcbiAgICAgICAgYiA9IDI1NTtcbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBlcmF0dXJlMnJnYjtcbiIsICIvKlxuICogQmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgTmVpbCBCYXJ0bGV0dFxuICogaHR0cHM6Ly9naXRodWIuY29tL25laWxiYXJ0bGV0dC9jb2xvci10ZW1wZXJhdHVyZVxuICoqL1xuXG5pbXBvcnQgdGVtcGVyYXR1cmUycmdiIGZyb20gJy4vdGVtcGVyYXR1cmUycmdiLmpzJztcbmltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJ0ZW1wZXJhdHVyZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcmdiID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCByID0gcmdiWzBdLFxuICAgICAgICBiID0gcmdiWzJdO1xuICAgIGxldCBtaW5UZW1wID0gMTAwMDtcbiAgICBsZXQgbWF4VGVtcCA9IDQwMDAwO1xuICAgIGNvbnN0IGVwcyA9IDAuNDtcbiAgICBsZXQgdGVtcDtcbiAgICB3aGlsZSAobWF4VGVtcCAtIG1pblRlbXAgPiBlcHMpIHtcbiAgICAgICAgdGVtcCA9IChtYXhUZW1wICsgbWluVGVtcCkgKiAwLjU7XG4gICAgICAgIGNvbnN0IHJnYiA9IHRlbXBlcmF0dXJlMnJnYih0ZW1wKTtcbiAgICAgICAgaWYgKHJnYlsyXSAvIHJnYlswXSA+PSBiIC8gcikge1xuICAgICAgICAgICAgbWF4VGVtcCA9IHRlbXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5UZW1wID0gdGVtcDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm91bmQodGVtcCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IydGVtcGVyYXR1cmU7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgdGVtcGVyYXR1cmUycmdiIGZyb20gJy4vdGVtcGVyYXR1cmUycmdiLmpzJztcbmltcG9ydCByZ2IydGVtcGVyYXR1cmUgZnJvbSAnLi9yZ2IydGVtcGVyYXR1cmUuanMnO1xuXG5Db2xvci5wcm90b3R5cGUudGVtcCA9XG4gICAgQ29sb3IucHJvdG90eXBlLmtlbHZpbiA9XG4gICAgQ29sb3IucHJvdG90eXBlLnRlbXBlcmF0dXJlID1cbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJnYjJ0ZW1wZXJhdHVyZSh0aGlzLl9yZ2IpO1xuICAgICAgICB9O1xuXG5jaHJvbWEudGVtcCA9XG4gICAgY2hyb21hLmtlbHZpbiA9XG4gICAgY2hyb21hLnRlbXBlcmF0dXJlID1cbiAgICAgICAgKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAndGVtcCcpO1xuXG5pbnB1dC5mb3JtYXQudGVtcCA9XG4gICAgaW5wdXQuZm9ybWF0LmtlbHZpbiA9XG4gICAgaW5wdXQuZm9ybWF0LnRlbXBlcmF0dXJlID1cbiAgICAgICAgdGVtcGVyYXR1cmUycmdiO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcG93LCBzaWduIH0gPSBNYXRoO1xuXG4vKlxuICogTCogWzAuLjEwMF1cbiAqIGEgWy0xMDAuLjEwMF1cbiAqIGIgWy0xMDAuLjEwMF1cbiAqL1xuY29uc3Qgb2tsYWIycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICBjb25zdCBbTCwgYSwgYl0gPSBhcmdzO1xuXG4gICAgY29uc3QgbCA9IHBvdyhMICsgMC4zOTYzMzc3Nzc0ICogYSArIDAuMjE1ODAzNzU3MyAqIGIsIDMpO1xuICAgIGNvbnN0IG0gPSBwb3coTCAtIDAuMTA1NTYxMzQ1OCAqIGEgLSAwLjA2Mzg1NDE3MjggKiBiLCAzKTtcbiAgICBjb25zdCBzID0gcG93KEwgLSAwLjA4OTQ4NDE3NzUgKiBhIC0gMS4yOTE0ODU1NDggKiBiLCAzKTtcblxuICAgIHJldHVybiBbXG4gICAgICAgIDI1NSAqIGxyZ2IycmdiKCs0LjA3Njc0MTY2MjEgKiBsIC0gMy4zMDc3MTE1OTEzICogbSArIDAuMjMwOTY5OTI5MiAqIHMpLFxuICAgICAgICAyNTUgKiBscmdiMnJnYigtMS4yNjg0MzgwMDQ2ICogbCArIDIuNjA5NzU3NDAxMSAqIG0gLSAwLjM0MTMxOTM5NjUgKiBzKSxcbiAgICAgICAgMjU1ICogbHJnYjJyZ2IoLTAuMDA0MTk2MDg2MyAqIGwgLSAwLjcwMzQxODYxNDcgKiBtICsgMS43MDc2MTQ3MDEgKiBzKSxcbiAgICAgICAgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb2tsYWIycmdiO1xuXG5mdW5jdGlvbiBscmdiMnJnYihjKSB7XG4gICAgY29uc3QgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgaWYgKGFicyA+IDAuMDAzMTMwOCkge1xuICAgICAgICByZXR1cm4gKHNpZ24oYykgfHwgMSkgKiAoMS4wNTUgKiBwb3coYWJzLCAxIC8gMi40KSAtIDAuMDU1KTtcbiAgICB9XG4gICAgcmV0dXJuIGMgKiAxMi45Mjtcbn1cbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGNicnQsIHBvdywgc2lnbiB9ID0gTWF0aDtcblxuY29uc3QgcmdiMm9rbGFiID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvLyBPS0xhYiBjb2xvciBzcGFjZSBpbXBsZW1lbnRhdGlvbiB0YWtlbiBmcm9tXG4gICAgLy8gaHR0cHM6Ly9ib3R0b3Nzb24uZ2l0aHViLmlvL3Bvc3RzL29rbGFiL1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgW2xyLCBsZywgbGJdID0gW1xuICAgICAgICByZ2IybHJnYihyIC8gMjU1KSxcbiAgICAgICAgcmdiMmxyZ2IoZyAvIDI1NSksXG4gICAgICAgIHJnYjJscmdiKGIgLyAyNTUpXG4gICAgXTtcbiAgICBjb25zdCBsID0gY2JydCgwLjQxMjIyMTQ3MDggKiBsciArIDAuNTM2MzMyNTM2MyAqIGxnICsgMC4wNTE0NDU5OTI5ICogbGIpO1xuICAgIGNvbnN0IG0gPSBjYnJ0KDAuMjExOTAzNDk4MiAqIGxyICsgMC42ODA2OTk1NDUxICogbGcgKyAwLjEwNzM5Njk1NjYgKiBsYik7XG4gICAgY29uc3QgcyA9IGNicnQoMC4wODgzMDI0NjE5ICogbHIgKyAwLjI4MTcxODgzNzYgKiBsZyArIDAuNjI5OTc4NzAwNSAqIGxiKTtcblxuICAgIHJldHVybiBbXG4gICAgICAgIDAuMjEwNDU0MjU1MyAqIGwgKyAwLjc5MzYxNzc4NSAqIG0gLSAwLjAwNDA3MjA0NjggKiBzLFxuICAgICAgICAxLjk3Nzk5ODQ5NTEgKiBsIC0gMi40Mjg1OTIyMDUgKiBtICsgMC40NTA1OTM3MDk5ICogcyxcbiAgICAgICAgMC4wMjU5MDQwMzcxICogbCArIDAuNzgyNzcxNzY2MiAqIG0gLSAwLjgwODY3NTc2NiAqIHNcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMm9rbGFiO1xuXG5mdW5jdGlvbiByZ2IybHJnYihjKSB7XG4gICAgY29uc3QgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgaWYgKGFicyA8IDAuMDQwNDUpIHtcbiAgICAgICAgcmV0dXJuIGMgLyAxMi45MjtcbiAgICB9XG4gICAgcmV0dXJuIChzaWduKGMpIHx8IDEpICogcG93KChhYnMgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cbiIsICJpbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCBva2xhYjJyZ2IgZnJvbSAnLi9va2xhYjJyZ2IuanMnO1xuaW1wb3J0IHJnYjJva2xhYiBmcm9tICcuL3JnYjJva2xhYi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5va2xhYiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMm9rbGFiKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEub2tsYWIgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdva2xhYicpO1xuXG5pbnB1dC5mb3JtYXQub2tsYWIgPSBva2xhYjJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMyxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdva2xhYicpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdva2xhYic7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMmxhYiBmcm9tICcuLi9sY2gvbGNoMmxhYi5qcyc7XG5pbXBvcnQgb2tsYWIycmdiIGZyb20gJy4uL29rbGFiL29rbGFiMnJnYi5qcyc7XG5cbmNvbnN0IG9rbGNoMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGNoJyk7XG4gICAgY29uc3QgW2wsIGMsIGhdID0gYXJncztcbiAgICBjb25zdCBbTCwgYSwgYl9dID0gbGNoMmxhYihsLCBjLCBoKTtcbiAgICBjb25zdCBbciwgZywgYl0gPSBva2xhYjJyZ2IoTCwgYSwgYl8pO1xuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb2tsY2gycmdiO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCByZ2Iyb2tsYWIgZnJvbSAnLi4vb2tsYWIvcmdiMm9rbGFiLmpzJztcbmltcG9ydCBsYWIybGNoIGZyb20gJy4uL2xjaC9sYWIybGNoLmpzJztcblxuY29uc3QgcmdiMm9rbGNoID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IFtsLCBhLCBiX10gPSByZ2Iyb2tsYWIociwgZywgYik7XG4gICAgcmV0dXJuIGxhYjJsY2gobCwgYSwgYl8pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMm9rbGNoO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IG9rbGNoMnJnYiBmcm9tICcuL29rbGNoMnJnYi5qcyc7XG5pbXBvcnQgcmdiMm9rbGNoIGZyb20gJy4vcmdiMm9rbGNoLmpzJztcblxuQ29sb3IucHJvdG90eXBlLm9rbGNoID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2Iyb2tsY2godGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5va2xjaCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ29rbGNoJyk7XG5cbmlucHV0LmZvcm1hdC5va2xjaCA9IG9rbGNoMnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAzLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ29rbGNoJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ29rbGNoJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUuYWxwaGEgPSBmdW5jdGlvbiAoYSwgbXV0YXRlID0gZmFsc2UpIHtcbiAgICBpZiAoYSAhPT0gdW5kZWZpbmVkICYmIHR5cGUoYSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChtdXRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3JnYlszXSA9IGE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFt0aGlzLl9yZ2JbMF0sIHRoaXMuX3JnYlsxXSwgdGhpcy5fcmdiWzJdLCBhXSwgJ3JnYicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmdiWzNdO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuY2xpcHBlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiLl9jbGlwcGVkIHx8IGZhbHNlO1xufTtcbiIsICJpbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IExBQl9DT05TVEFOVFMgZnJvbSAnLi4vaW8vbGFiL2xhYi1jb25zdGFudHMuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuZGFya2VuID0gZnVuY3Rpb24gKGFtb3VudCA9IDEpIHtcbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY29uc3QgbGFiID0gbWUubGFiKCk7XG4gICAgbGFiWzBdIC09IExBQl9DT05TVEFOVFMuS24gKiBhbW91bnQ7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKS5hbHBoYShtZS5hbHBoYSgpLCB0cnVlKTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5icmlnaHRlbiA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuZGFya2VuKC1hbW91bnQpO1xufTtcblxuQ29sb3IucHJvdG90eXBlLmRhcmtlciA9IENvbG9yLnByb3RvdHlwZS5kYXJrZW47XG5Db2xvci5wcm90b3R5cGUuYnJpZ2h0ZXIgPSBDb2xvci5wcm90b3R5cGUuYnJpZ2h0ZW47XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChtYykge1xuICAgIGNvbnN0IFttb2RlLCBjaGFubmVsXSA9IG1jLnNwbGl0KCcuJyk7XG4gICAgY29uc3Qgc3JjID0gdGhpc1ttb2RlXSgpO1xuICAgIGlmIChjaGFubmVsKSB7XG4gICAgICAgIGNvbnN0IGkgPSBtb2RlLmluZGV4T2YoY2hhbm5lbCkgLSAobW9kZS5zdWJzdHIoMCwgMikgPT09ICdvaycgPyAyIDogMCk7XG4gICAgICAgIGlmIChpID4gLTEpIHJldHVybiBzcmNbaV07XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjaGFubmVsICR7Y2hhbm5lbH0gaW4gbW9kZSAke21vZGV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBwb3cgfSA9IE1hdGg7XG5cbmNvbnN0IEVQUyA9IDFlLTc7XG5jb25zdCBNQVhfSVRFUiA9IDIwO1xuXG5Db2xvci5wcm90b3R5cGUubHVtaW5hbmNlID0gZnVuY3Rpb24gKGx1bSwgbW9kZSA9ICdyZ2InKSB7XG4gICAgaWYgKGx1bSAhPT0gdW5kZWZpbmVkICYmIHR5cGUobHVtKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGx1bSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIHB1cmUgYmxhY2tcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoWzAsIDAsIDAsIHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobHVtID09PSAxKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gcHVyZSB3aGl0ZVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbMjU1LCAyNTUsIDI1NSwgdGhpcy5fcmdiWzNdXSwgJ3JnYicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbXB1dGUgbmV3IGNvbG9yIHVzaW5nLi4uXG4gICAgICAgIGxldCBjdXJfbHVtID0gdGhpcy5sdW1pbmFuY2UoKTtcbiAgICAgICAgbGV0IG1heF9pdGVyID0gTUFYX0lURVI7XG5cbiAgICAgICAgY29uc3QgdGVzdCA9IChsb3csIGhpZ2gpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1pZCA9IGxvdy5pbnRlcnBvbGF0ZShoaWdoLCAwLjUsIG1vZGUpO1xuICAgICAgICAgICAgY29uc3QgbG0gPSBtaWQubHVtaW5hbmNlKCk7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobHVtIC0gbG0pIDwgRVBTIHx8ICFtYXhfaXRlci0tKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgZW5vdWdoXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsbSA+IGx1bSA/IHRlc3QobG93LCBtaWQpIDogdGVzdChtaWQsIGhpZ2gpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJnYiA9IChcbiAgICAgICAgICAgIGN1cl9sdW0gPiBsdW1cbiAgICAgICAgICAgICAgICA/IHRlc3QobmV3IENvbG9yKFswLCAwLCAwXSksIHRoaXMpXG4gICAgICAgICAgICAgICAgOiB0ZXN0KHRoaXMsIG5ldyBDb2xvcihbMjU1LCAyNTUsIDI1NV0pKVxuICAgICAgICApLnJnYigpO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFsuLi5yZ2IsIHRoaXMuX3JnYlszXV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmdiMmx1bWluYW5jZSguLi50aGlzLl9yZ2Iuc2xpY2UoMCwgMykpO1xufTtcblxuY29uc3QgcmdiMmx1bWluYW5jZSA9IChyLCBnLCBiKSA9PiB7XG4gICAgLy8gcmVsYXRpdmUgbHVtaW5hbmNlXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICByID0gbHVtaW5hbmNlX3gocik7XG4gICAgZyA9IGx1bWluYW5jZV94KGcpO1xuICAgIGIgPSBsdW1pbmFuY2VfeChiKTtcbiAgICByZXR1cm4gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xufTtcblxuY29uc3QgbHVtaW5hbmNlX3ggPSAoeCkgPT4ge1xuICAgIHggLz0gMjU1O1xuICAgIHJldHVybiB4IDw9IDAuMDM5MjggPyB4IC8gMTIuOTIgOiBwb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn07XG4iLCAiZXhwb3J0IGRlZmF1bHQge307XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCB7IHR5cGUgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdG9yIGZyb20gJy4uL2ludGVycG9sYXRvci9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChjb2wxLCBjb2wyLCBmID0gMC41LCAuLi5yZXN0KSA9PiB7XG4gICAgbGV0IG1vZGUgPSByZXN0WzBdIHx8ICdscmdiJztcbiAgICBpZiAoIWludGVycG9sYXRvclttb2RlXSAmJiAhcmVzdC5sZW5ndGgpIHtcbiAgICAgICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBzdXBwb3J0ZWQgbW9kZVxuICAgICAgICBtb2RlID0gT2JqZWN0LmtleXMoaW50ZXJwb2xhdG9yKVswXTtcbiAgICB9XG4gICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnRlcnBvbGF0aW9uIG1vZGUgJHttb2RlfSBpcyBub3QgZGVmaW5lZGApO1xuICAgIH1cbiAgICBpZiAodHlwZShjb2wxKSAhPT0gJ29iamVjdCcpIGNvbDEgPSBuZXcgQ29sb3IoY29sMSk7XG4gICAgaWYgKHR5cGUoY29sMikgIT09ICdvYmplY3QnKSBjb2wyID0gbmV3IENvbG9yKGNvbDIpO1xuICAgIHJldHVybiBpbnRlcnBvbGF0b3JbbW9kZV0oY29sMSwgY29sMiwgZikuYWxwaGEoXG4gICAgICAgIGNvbDEuYWxwaGEoKSArIGYgKiAoY29sMi5hbHBoYSgpIC0gY29sMS5hbHBoYSgpKVxuICAgICk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4uL2dlbmVyYXRvci9taXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUubWl4ID0gQ29sb3IucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVuY3Rpb24gKFxuICAgIGNvbDIsXG4gICAgZiA9IDAuNSxcbiAgICAuLi5yZXN0XG4pIHtcbiAgICByZXR1cm4gbWl4KHRoaXMsIGNvbDIsIGYsIC4uLnJlc3QpO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5Db2xvci5wcm90b3R5cGUucHJlbXVsdGlwbHkgPSBmdW5jdGlvbiAobXV0YXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgY29uc3QgYSA9IHJnYlszXTtcbiAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JnYiA9IFtyZ2JbMF0gKiBhLCByZ2JbMV0gKiBhLCByZ2JbMl0gKiBhLCBhXTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbcmdiWzBdICogYSwgcmdiWzFdICogYSwgcmdiWzJdICogYSwgYV0sICdyZ2InKTtcbiAgICB9XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgTEFCX0NPTlNUQU5UUyBmcm9tICcuLi9pby9sYWIvbGFiLWNvbnN0YW50cy5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIGNvbnN0IGxjaCA9IG1lLmxjaCgpO1xuICAgIGxjaFsxXSArPSBMQUJfQ09OU1RBTlRTLktuICogYW1vdW50O1xuICAgIGlmIChsY2hbMV0gPCAwKSBsY2hbMV0gPSAwO1xuICAgIHJldHVybiBuZXcgQ29sb3IobGNoLCAnbGNoJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG59O1xuXG5Db2xvci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuc2F0dXJhdGUoLWFtb3VudCk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG1jLCB2YWx1ZSwgbXV0YXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCBbbW9kZSwgY2hhbm5lbF0gPSBtYy5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHNyYyA9IHRoaXNbbW9kZV0oKTtcbiAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgICBjb25zdCBpID0gbW9kZS5pbmRleE9mKGNoYW5uZWwpIC0gKG1vZGUuc3Vic3RyKDAsIDIpID09PSAnb2snID8gMiA6IDApO1xuICAgICAgICBpZiAoaSA+IC0xKSB7XG4gICAgICAgICAgICBpZiAodHlwZSh2YWx1ZSkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLmNoYXJBdCgwKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSArPSArdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gKz0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldICo9ICt2YWx1ZS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gLz0gK3ZhbHVlLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldID0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSh2YWx1ZSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3JjW2ldID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdmFsdWUgZm9yIENvbG9yLnNldGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3V0ID0gbmV3IENvbG9yKHNyYywgbW9kZSk7XG4gICAgICAgICAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmdiID0gb3V0Ll9yZ2I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjaGFubmVsICR7Y2hhbm5lbH0gaW4gbW9kZSAke21vZGV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGFiL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4uL2dlbmVyYXRvci9taXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUudGludCA9IGZ1bmN0aW9uIChmID0gMC41LCAuLi5yZXN0KSB7XG4gICAgcmV0dXJuIG1peCh0aGlzLCAnd2hpdGUnLCBmLCAuLi5yZXN0KTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5zaGFkZSA9IGZ1bmN0aW9uIChmID0gMC41LCAuLi5yZXN0KSB7XG4gICAgcmV0dXJuIG1peCh0aGlzLCAnYmxhY2snLCBmLCAuLi5yZXN0KTtcbn07XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgcmdiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCB4eXowID0gY29sMS5fcmdiO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLl9yZ2I7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXSAtIHh5ejBbMF0pLFxuICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdIC0geHl6MFsxXSksXG4gICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0gLSB4eXowWzJdKSxcbiAgICAgICAgJ3JnYidcbiAgICApO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5yZ2IgPSByZ2I7XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuY29uc3QgeyBzcXJ0LCBwb3cgfSA9IE1hdGg7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGxyZ2IgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IFt4MSwgeTEsIHoxXSA9IGNvbDEuX3JnYjtcbiAgICBjb25zdCBbeDIsIHkyLCB6Ml0gPSBjb2wyLl9yZ2I7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgc3FydChwb3coeDEsIDIpICogKDEgLSBmKSArIHBvdyh4MiwgMikgKiBmKSxcbiAgICAgICAgc3FydChwb3coeTEsIDIpICogKDEgLSBmKSArIHBvdyh5MiwgMikgKiBmKSxcbiAgICAgICAgc3FydChwb3coejEsIDIpICogKDEgLSBmKSArIHBvdyh6MiwgMikgKiBmKSxcbiAgICAgICAgJ3JnYidcbiAgICApO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5scmdiID0gbHJnYjtcblxuZXhwb3J0IGRlZmF1bHQgbHJnYjtcbiIsICJpbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5jb25zdCBsYWIgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IHh5ejAgPSBjb2wxLmxhYigpO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLmxhYigpO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0gLSB4eXowWzBdKSxcbiAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXSAtIHh5ejBbMV0pLFxuICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdIC0geHl6MFsyXSksXG4gICAgICAgICdsYWInXG4gICAgKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubGFiID0gbGFiO1xuXG5leHBvcnQgZGVmYXVsdCBsYWI7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKGNvbDEsIGNvbDIsIGYsIG0pID0+IHtcbiAgICBsZXQgeHl6MCwgeHl6MTtcbiAgICBpZiAobSA9PT0gJ2hzbCcpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHNsKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzbCgpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzdicpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHN2KCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzdigpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hjZycpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaGNnKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhjZygpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzaScpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHNpKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzaSgpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2xjaCcgfHwgbSA9PT0gJ2hjbCcpIHtcbiAgICAgICAgbSA9ICdoY2wnO1xuICAgICAgICB4eXowID0gY29sMS5oY2woKTtcbiAgICAgICAgeHl6MSA9IGNvbDIuaGNsKCk7XG4gICAgfSBlbHNlIGlmIChtID09PSAnb2tsY2gnKSB7XG4gICAgICAgIHh5ejAgPSBjb2wxLm9rbGNoKCkucmV2ZXJzZSgpO1xuICAgICAgICB4eXoxID0gY29sMi5va2xjaCgpLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBsZXQgaHVlMCwgaHVlMSwgc2F0MCwgc2F0MSwgbGJ2MCwgbGJ2MTtcbiAgICBpZiAobS5zdWJzdHIoMCwgMSkgPT09ICdoJyB8fCBtID09PSAnb2tsY2gnKSB7XG4gICAgICAgIFtodWUwLCBzYXQwLCBsYnYwXSA9IHh5ejA7XG4gICAgICAgIFtodWUxLCBzYXQxLCBsYnYxXSA9IHh5ejE7XG4gICAgfVxuXG4gICAgbGV0IHNhdCwgaHVlLCBsYnYsIGRoO1xuXG4gICAgaWYgKCFpc05hTihodWUwKSAmJiAhaXNOYU4oaHVlMSkpIHtcbiAgICAgICAgLy8gYm90aCBjb2xvcnMgaGF2ZSBodWVcbiAgICAgICAgaWYgKGh1ZTEgPiBodWUwICYmIGh1ZTEgLSBodWUwID4gMTgwKSB7XG4gICAgICAgICAgICBkaCA9IGh1ZTEgLSAoaHVlMCArIDM2MCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaHVlMSA8IGh1ZTAgJiYgaHVlMCAtIGh1ZTEgPiAxODApIHtcbiAgICAgICAgICAgIGRoID0gaHVlMSArIDM2MCAtIGh1ZTA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaCA9IGh1ZTEgLSBodWUwO1xuICAgICAgICB9XG4gICAgICAgIGh1ZSA9IGh1ZTAgKyBmICogZGg7XG4gICAgfSBlbHNlIGlmICghaXNOYU4oaHVlMCkpIHtcbiAgICAgICAgaHVlID0gaHVlMDtcbiAgICAgICAgaWYgKChsYnYxID09IDEgfHwgbGJ2MSA9PSAwKSAmJiBtICE9ICdoc3YnKSBzYXQgPSBzYXQwO1xuICAgIH0gZWxzZSBpZiAoIWlzTmFOKGh1ZTEpKSB7XG4gICAgICAgIGh1ZSA9IGh1ZTE7XG4gICAgICAgIGlmICgobGJ2MCA9PSAxIHx8IGxidjAgPT0gMCkgJiYgbSAhPSAnaHN2Jykgc2F0ID0gc2F0MTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBodWUgPSBOdW1iZXIuTmFOO1xuICAgIH1cblxuICAgIGlmIChzYXQgPT09IHVuZGVmaW5lZCkgc2F0ID0gc2F0MCArIGYgKiAoc2F0MSAtIHNhdDApO1xuICAgIGxidiA9IGxidjAgKyBmICogKGxidjEgLSBsYnYwKTtcbiAgICByZXR1cm4gbSA9PT0gJ29rbGNoJ1xuICAgICAgICA/IG5ldyBDb2xvcihbbGJ2LCBzYXQsIGh1ZV0sIG0pXG4gICAgICAgIDogbmV3IENvbG9yKFtodWUsIHNhdCwgbGJ2XSwgbSk7XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgbGNoID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdsY2gnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubGNoID0gbGNoO1xuaW5kZXguaGNsID0gbGNoO1xuXG5leHBvcnQgZGVmYXVsdCBsY2g7XG4iLCAiaW1wb3J0ICcuLi9pby9udW0vaW5kZXguanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5jb25zdCBudW0gPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IGMxID0gY29sMS5udW0oKTtcbiAgICBjb25zdCBjMiA9IGNvbDIubnVtKCk7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihjMSArIGYgKiAoYzIgLSBjMSksICdudW0nKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubnVtID0gbnVtO1xuXG5leHBvcnQgZGVmYXVsdCBudW07XG4iLCAiaW1wb3J0ICcuLi9pby9oY2cvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRlX2hzeCBmcm9tICcuL19oc3guanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBoY2cgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ2hjZycpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5oY2cgPSBoY2c7XG5cbmV4cG9ydCBkZWZhdWx0IGhjZztcbiIsICJpbXBvcnQgJy4uL2lvL2hzaS9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdGVfaHN4IGZyb20gJy4vX2hzeC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGhzaSA9IChjb2wxLCBjb2wyLCBmKSA9PiB7XG4gICAgcmV0dXJuIGludGVycG9sYXRlX2hzeChjb2wxLCBjb2wyLCBmLCAnaHNpJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4LmhzaSA9IGhzaTtcblxuZXhwb3J0IGRlZmF1bHQgaHNpO1xuIiwgImltcG9ydCAnLi4vaW8vaHNsL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgaHNsID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdoc2wnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXguaHNsID0gaHNsO1xuXG5leHBvcnQgZGVmYXVsdCBoc2w7XG4iLCAiaW1wb3J0ICcuLi9pby9oc3YvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRlX2hzeCBmcm9tICcuL19oc3guanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBoc3YgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ2hzdicpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5oc3YgPSBoc3Y7XG5cbmV4cG9ydCBkZWZhdWx0IGhzdjtcbiIsICJpbXBvcnQgJy4uL2lvL29rbGFiL2luZGV4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5cbmNvbnN0IG9rbGFiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCB4eXowID0gY29sMS5va2xhYigpO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLm9rbGFiKCk7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXSAtIHh5ejBbMF0pLFxuICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdIC0geHl6MFsxXSksXG4gICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0gLSB4eXowWzJdKSxcbiAgICAgICAgJ29rbGFiJ1xuICAgICk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4Lm9rbGFiID0gb2tsYWI7XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGFiO1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3Qgb2tsY2ggPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ29rbGNoJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4Lm9rbGNoID0gb2tsY2g7XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGNoO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyBjbGlwX3JnYiB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcblxuY29uc3QgeyBwb3csIHNxcnQsIFBJLCBjb3MsIHNpbiwgYXRhbjIgfSA9IE1hdGg7XG5cbmV4cG9ydCBkZWZhdWx0IChjb2xvcnMsIG1vZGUgPSAnbHJnYicsIHdlaWdodHMgPSBudWxsKSA9PiB7XG4gICAgY29uc3QgbCA9IGNvbG9ycy5sZW5ndGg7XG4gICAgaWYgKCF3ZWlnaHRzKSB3ZWlnaHRzID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobCkpLm1hcCgoKSA9PiAxKTtcbiAgICAvLyBub3JtYWxpemUgd2VpZ2h0c1xuICAgIGNvbnN0IGsgPVxuICAgICAgICBsIC9cbiAgICAgICAgd2VpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhICsgYjtcbiAgICAgICAgfSk7XG4gICAgd2VpZ2h0cy5mb3JFYWNoKCh3LCBpKSA9PiB7XG4gICAgICAgIHdlaWdodHNbaV0gKj0gaztcbiAgICB9KTtcbiAgICAvLyBjb252ZXJ0IGNvbG9ycyB0byBDb2xvciBvYmplY3RzXG4gICAgY29sb3JzID0gY29sb3JzLm1hcCgoYykgPT4gbmV3IENvbG9yKGMpKTtcbiAgICBpZiAobW9kZSA9PT0gJ2xyZ2InKSB7XG4gICAgICAgIHJldHVybiBfYXZlcmFnZV9scmdiKGNvbG9ycywgd2VpZ2h0cyk7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0ID0gY29sb3JzLnNoaWZ0KCk7XG4gICAgY29uc3QgeHl6ID0gZmlyc3QuZ2V0KG1vZGUpO1xuICAgIGNvbnN0IGNudCA9IFtdO1xuICAgIGxldCBkeCA9IDA7XG4gICAgbGV0IGR5ID0gMDtcbiAgICAvLyBpbml0aWFsIGNvbG9yXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4eXoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgeHl6W2ldID0gKHh5eltpXSB8fCAwKSAqIHdlaWdodHNbMF07XG4gICAgICAgIGNudC5wdXNoKGlzTmFOKHh5eltpXSkgPyAwIDogd2VpZ2h0c1swXSk7XG4gICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnICYmICFpc05hTih4eXpbaV0pKSB7XG4gICAgICAgICAgICBjb25zdCBBID0gKHh5eltpXSAvIDE4MCkgKiBQSTtcbiAgICAgICAgICAgIGR4ICs9IGNvcyhBKSAqIHdlaWdodHNbMF07XG4gICAgICAgICAgICBkeSArPSBzaW4oQSkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGFscGhhID0gZmlyc3QuYWxwaGEoKSAqIHdlaWdodHNbMF07XG4gICAgY29sb3JzLmZvckVhY2goKGMsIGNpKSA9PiB7XG4gICAgICAgIGNvbnN0IHh5ejIgPSBjLmdldChtb2RlKTtcbiAgICAgICAgYWxwaGEgKz0gYy5hbHBoYSgpICogd2VpZ2h0c1tjaSArIDFdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHh5ei5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFpc05hTih4eXoyW2ldKSkge1xuICAgICAgICAgICAgICAgIGNudFtpXSArPSB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUuY2hhckF0KGkpID09PSAnaCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQSA9ICh4eXoyW2ldIC8gMTgwKSAqIFBJO1xuICAgICAgICAgICAgICAgICAgICBkeCArPSBjb3MoQSkgKiB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIGR5ICs9IHNpbihBKSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB4eXpbaV0gKz0geHl6MltpXSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeHl6Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICBsZXQgQSA9IChhdGFuMihkeSAvIGNudFtpXSwgZHggLyBjbnRbaV0pIC8gUEkpICogMTgwO1xuICAgICAgICAgICAgd2hpbGUgKEEgPCAwKSBBICs9IDM2MDtcbiAgICAgICAgICAgIHdoaWxlIChBID49IDM2MCkgQSAtPSAzNjA7XG4gICAgICAgICAgICB4eXpbaV0gPSBBO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeHl6W2ldID0geHl6W2ldIC8gY250W2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFscGhhIC89IGw7XG4gICAgcmV0dXJuIG5ldyBDb2xvcih4eXosIG1vZGUpLmFscGhhKGFscGhhID4gMC45OTk5OSA/IDEgOiBhbHBoYSwgdHJ1ZSk7XG59O1xuXG5jb25zdCBfYXZlcmFnZV9scmdiID0gKGNvbG9ycywgd2VpZ2h0cykgPT4ge1xuICAgIGNvbnN0IGwgPSBjb2xvcnMubGVuZ3RoO1xuICAgIGNvbnN0IHh5eiA9IFswLCAwLCAwLCAwXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb2wgPSBjb2xvcnNbaV07XG4gICAgICAgIGNvbnN0IGYgPSB3ZWlnaHRzW2ldIC8gbDtcbiAgICAgICAgY29uc3QgcmdiID0gY29sLl9yZ2I7XG4gICAgICAgIHh5elswXSArPSBwb3cocmdiWzBdLCAyKSAqIGY7XG4gICAgICAgIHh5elsxXSArPSBwb3cocmdiWzFdLCAyKSAqIGY7XG4gICAgICAgIHh5elsyXSArPSBwb3cocmdiWzJdLCAyKSAqIGY7XG4gICAgICAgIHh5elszXSArPSByZ2JbM10gKiBmO1xuICAgIH1cbiAgICB4eXpbMF0gPSBzcXJ0KHh5elswXSk7XG4gICAgeHl6WzFdID0gc3FydCh4eXpbMV0pO1xuICAgIHh5elsyXSA9IHNxcnQoeHl6WzJdKTtcbiAgICBpZiAoeHl6WzNdID4gMC45OTk5OTk5KSB4eXpbM10gPSAxO1xuICAgIHJldHVybiBuZXcgQ29sb3IoY2xpcF9yZ2IoeHl6KSk7XG59O1xuIiwgIi8vIG1pbmltYWwgbXVsdGktcHVycG9zZSBpbnRlcmZhY2VcblxuLy8gQHJlcXVpcmVzIHV0aWxzIGNvbG9yIGFuYWx5emVcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vY2hyb21hLmpzJztcbmltcG9ydCB7IGxpbWl0LCB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCB7IHBvdyB9ID0gTWF0aDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGNvbG9ycykge1xuICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgbGV0IF9tb2RlID0gJ3JnYic7XG4gICAgbGV0IF9uYWNvbCA9IGNocm9tYSgnI2NjYycpO1xuICAgIGxldCBfc3ByZWFkID0gMDtcbiAgICAvLyBjb25zdCBfZml4ZWQgPSBmYWxzZTtcbiAgICBsZXQgX2RvbWFpbiA9IFswLCAxXTtcbiAgICBsZXQgX3BvcyA9IFtdO1xuICAgIGxldCBfcGFkZGluZyA9IFswLCAwXTtcbiAgICBsZXQgX2NsYXNzZXMgPSBmYWxzZTtcbiAgICBsZXQgX2NvbG9ycyA9IFtdO1xuICAgIGxldCBfb3V0ID0gZmFsc2U7XG4gICAgbGV0IF9taW4gPSAwO1xuICAgIGxldCBfbWF4ID0gMTtcbiAgICBsZXQgX2NvcnJlY3RMaWdodG5lc3MgPSBmYWxzZTtcbiAgICBsZXQgX2NvbG9yQ2FjaGUgPSB7fTtcbiAgICBsZXQgX3VzZUNhY2hlID0gdHJ1ZTtcbiAgICBsZXQgX2dhbW1hID0gMTtcblxuICAgIC8vIHByaXZhdGUgbWV0aG9kc1xuXG4gICAgY29uc3Qgc2V0Q29sb3JzID0gZnVuY3Rpb24gKGNvbG9ycykge1xuICAgICAgICBjb2xvcnMgPSBjb2xvcnMgfHwgWycjZmZmJywgJyMwMDAnXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29sb3JzICYmXG4gICAgICAgICAgICB0eXBlKGNvbG9ycykgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICBjaHJvbWEuYnJld2VyICYmXG4gICAgICAgICAgICBjaHJvbWEuYnJld2VyW2NvbG9ycy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbG9ycyA9IGNocm9tYS5icmV3ZXJbY29sb3JzLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlKGNvbG9ycykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBzaW5nbGUgY29sb3JcbiAgICAgICAgICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY29sb3JzID0gW2NvbG9yc1swXSwgY29sb3JzWzBdXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG1ha2UgYSBjb3B5IG9mIHRoZSBjb2xvcnNcbiAgICAgICAgICAgIGNvbG9ycyA9IGNvbG9ycy5zbGljZSgwKTtcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gY2hyb21hIGNsYXNzZXNcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29sb3JzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgY29sb3JzW2NdID0gY2hyb21hKGNvbG9yc1tjXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhdXRvLWZpbGwgY29sb3IgcG9zaXRpb25cbiAgICAgICAgICAgIF9wb3MubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29sb3JzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgX3Bvcy5wdXNoKGMgLyAoY29sb3JzLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXNldENhY2hlKCk7XG4gICAgICAgIHJldHVybiAoX2NvbG9ycyA9IGNvbG9ycyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldENsYXNzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmIChfY2xhc3NlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gX2NsYXNzZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChpIDwgbiAmJiB2YWx1ZSA+PSBfY2xhc3Nlc1tpXSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpIC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9O1xuXG4gICAgbGV0IHRNYXBMaWdodG5lc3MgPSAodCkgPT4gdDtcbiAgICBsZXQgdE1hcERvbWFpbiA9ICh0KSA9PiB0O1xuXG4gICAgLy8gY29uc3QgY2xhc3NpZnlWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgLy8gICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAvLyAgICAgaWYgKF9jbGFzc2VzLmxlbmd0aCA+IDIpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IG4gPSBfY2xhc3Nlcy5sZW5ndGgtMTtcbiAgICAvLyAgICAgICAgIGNvbnN0IGkgPSBnZXRDbGFzcyh2YWx1ZSk7XG4gICAgLy8gICAgICAgICBjb25zdCBtaW5jID0gX2NsYXNzZXNbMF0gKyAoKF9jbGFzc2VzWzFdLV9jbGFzc2VzWzBdKSAqICgwICsgKF9zcHJlYWQgKiAwLjUpKSk7ICAvLyBjZW50ZXIgb2YgMXN0IGNsYXNzXG4gICAgLy8gICAgICAgICBjb25zdCBtYXhjID0gX2NsYXNzZXNbbi0xXSArICgoX2NsYXNzZXNbbl0tX2NsYXNzZXNbbi0xXSkgKiAoMSAtIChfc3ByZWFkICogMC41KSkpOyAgLy8gY2VudGVyIG9mIGxhc3QgY2xhc3NcbiAgICAvLyAgICAgICAgIHZhbCA9IF9taW4gKyAoKCgoX2NsYXNzZXNbaV0gKyAoKF9jbGFzc2VzW2krMV0gLSBfY2xhc3Nlc1tpXSkgKiAwLjUpKSAtIG1pbmMpIC8gKG1heGMtbWluYykpICogKF9tYXggLSBfbWluKSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgcmV0dXJuIHZhbDtcbiAgICAvLyB9O1xuXG4gICAgY29uc3QgZ2V0Q29sb3IgPSBmdW5jdGlvbiAodmFsLCBieXBhc3NNYXApIHtcbiAgICAgICAgbGV0IGNvbCwgdDtcbiAgICAgICAgaWYgKGJ5cGFzc01hcCA9PSBudWxsKSB7XG4gICAgICAgICAgICBieXBhc3NNYXAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4odmFsKSB8fCB2YWwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBfbmFjb2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgIGlmIChfY2xhc3NlcyAmJiBfY2xhc3Nlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgY2xhc3NcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gZ2V0Q2xhc3ModmFsKTtcbiAgICAgICAgICAgICAgICB0ID0gYyAvIChfY2xhc3Nlcy5sZW5ndGggLSAyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX21heCAhPT0gX21pbikge1xuICAgICAgICAgICAgICAgIC8vIGp1c3QgaW50ZXJwb2xhdGUgYmV0d2VlbiBtaW4vbWF4XG4gICAgICAgICAgICAgICAgdCA9ICh2YWwgLSBfbWluKSAvIChfbWF4IC0gX21pbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHQgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdCA9IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbWFpbiBtYXBcbiAgICAgICAgdCA9IHRNYXBEb21haW4odCk7XG5cbiAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgIHQgPSB0TWFwTGlnaHRuZXNzKHQpOyAvLyBsaWdodG5lc3MgY29ycmVjdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9nYW1tYSAhPT0gMSkge1xuICAgICAgICAgICAgdCA9IHBvdyh0LCBfZ2FtbWEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdCA9IF9wYWRkaW5nWzBdICsgdCAqICgxIC0gX3BhZGRpbmdbMF0gLSBfcGFkZGluZ1sxXSk7XG5cbiAgICAgICAgdCA9IGxpbWl0KHQsIDAsIDEpO1xuXG4gICAgICAgIGNvbnN0IGsgPSBNYXRoLmZsb29yKHQgKiAxMDAwMCk7XG5cbiAgICAgICAgaWYgKF91c2VDYWNoZSAmJiBfY29sb3JDYWNoZVtrXSkge1xuICAgICAgICAgICAgY29sID0gX2NvbG9yQ2FjaGVba107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZShfY29sb3JzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIC8vZm9yIGkgaW4gWzAuLl9wb3MubGVuZ3RoLTFdXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfcG9zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBfcG9zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj0gcCAmJiBpID09PSBfcG9zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCA+IHAgJiYgdCA8IF9wb3NbaSArIDFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHQgLSBwKSAvIChfcG9zW2kgKyAxXSAtIHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gY2hyb21hLmludGVycG9sYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xvcnNbaV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbG9yc1tpICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlKF9jb2xvcnMpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29sID0gX2NvbG9ycyh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfdXNlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICBfY29sb3JDYWNoZVtrXSA9IGNvbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sO1xuICAgIH07XG5cbiAgICB2YXIgcmVzZXRDYWNoZSA9ICgpID0+IChfY29sb3JDYWNoZSA9IHt9KTtcblxuICAgIHNldENvbG9ycyhjb2xvcnMpO1xuXG4gICAgLy8gcHVibGljIGludGVyZmFjZVxuXG4gICAgY29uc3QgZiA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjaHJvbWEoZ2V0Q29sb3IodikpO1xuICAgICAgICBpZiAoX291dCAmJiBjW19vdXRdKSB7XG4gICAgICAgICAgICByZXR1cm4gY1tfb3V0XSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5jbGFzc2VzID0gZnVuY3Rpb24gKGNsYXNzZXMpIHtcbiAgICAgICAgaWYgKGNsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUoY2xhc3NlcykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IGNsYXNzZXM7XG4gICAgICAgICAgICAgICAgX2RvbWFpbiA9IFtjbGFzc2VzWzBdLCBjbGFzc2VzW2NsYXNzZXMubGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gY2hyb21hLmFuYWx5emUoX2RvbWFpbik7XG4gICAgICAgICAgICAgICAgaWYgKGNsYXNzZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBbZC5taW4sIGQubWF4XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IGNocm9tYS5saW1pdHMoZCwgJ2UnLCBjbGFzc2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2NsYXNzZXM7XG4gICAgfTtcblxuICAgIGYuZG9tYWluID0gZnVuY3Rpb24gKGRvbWFpbikge1xuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBfZG9tYWluO1xuICAgICAgICB9XG4gICAgICAgIF9taW4gPSBkb21haW5bMF07XG4gICAgICAgIF9tYXggPSBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdO1xuICAgICAgICBfcG9zID0gW107XG4gICAgICAgIGNvbnN0IGsgPSBfY29sb3JzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPT09IGsgJiYgX21pbiAhPT0gX21heCkge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHBvc2l0aW9uc1xuICAgICAgICAgICAgZm9yIChsZXQgZCBvZiBBcnJheS5mcm9tKGRvbWFpbikpIHtcbiAgICAgICAgICAgICAgICBfcG9zLnB1c2goKGQgLSBfbWluKSAvIChfbWF4IC0gX21pbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBrOyBjKyspIHtcbiAgICAgICAgICAgICAgICBfcG9zLnB1c2goYyAvIChrIC0gMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGRvbWFpbiBtYXBcbiAgICAgICAgICAgICAgICBjb25zdCB0T3V0ID0gZG9tYWluLm1hcCgoZCwgaSkgPT4gaSAvIChkb21haW4ubGVuZ3RoIC0gMSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRCcmVha3MgPSBkb21haW4ubWFwKChkKSA9PiAoZCAtIF9taW4pIC8gKF9tYXggLSBfbWluKSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0QnJlYWtzLmV2ZXJ5KCh2YWwsIGkpID0+IHRPdXRbaV0gPT09IHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdE1hcERvbWFpbiA9ICh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSAwIHx8IHQgPj0gMSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodCA+PSB0QnJlYWtzW2kgKyAxXSkgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQgLSB0QnJlYWtzW2ldKSAvICh0QnJlYWtzW2kgKyAxXSAtIHRCcmVha3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0ID0gdE91dFtpXSArIGYgKiAodE91dFtpICsgMV0gLSB0T3V0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9kb21haW4gPSBbX21pbiwgX21heF07XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLm1vZGUgPSBmdW5jdGlvbiAoX20pIHtcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gX21vZGU7XG4gICAgICAgIH1cbiAgICAgICAgX21vZGUgPSBfbTtcbiAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5yYW5nZSA9IGZ1bmN0aW9uIChjb2xvcnMsIF9wb3MpIHtcbiAgICAgICAgc2V0Q29sb3JzKGNvbG9ycywgX3Bvcyk7XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLm91dCA9IGZ1bmN0aW9uIChfbykge1xuICAgICAgICBfb3V0ID0gX287XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLnNwcmVhZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3NwcmVhZDtcbiAgICAgICAgfVxuICAgICAgICBfc3ByZWFkID0gdmFsO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5jb3JyZWN0TGlnaHRuZXNzID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgaWYgKHYgPT0gbnVsbCkge1xuICAgICAgICAgICAgdiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgX2NvcnJlY3RMaWdodG5lc3MgPSB2O1xuICAgICAgICByZXNldENhY2hlKCk7XG4gICAgICAgIGlmIChfY29ycmVjdExpZ2h0bmVzcykge1xuICAgICAgICAgICAgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgTDAgPSBnZXRDb2xvcigwLCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBMMSA9IGdldENvbG9yKDEsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbCA9IEwwID4gTDE7XG4gICAgICAgICAgICAgICAgbGV0IExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgTF9pZGVhbCA9IEwwICsgKEwxIC0gTDApICogdDtcbiAgICAgICAgICAgICAgICBsZXQgTF9kaWZmID0gTF9hY3R1YWwgLSBMX2lkZWFsO1xuICAgICAgICAgICAgICAgIGxldCB0MCA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHQxID0gMTtcbiAgICAgICAgICAgICAgICBsZXQgbWF4X2l0ZXIgPSAyMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoTWF0aC5hYnMoTF9kaWZmKSA+IDFlLTIgJiYgbWF4X2l0ZXItLSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMX2RpZmYgKj0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTF9kaWZmIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQwID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICs9ICh0MSAtIHQpICogMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAodDAgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKExfZGlmZiA9IExfYWN0dWFsIC0gTF9pZGVhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRNYXBMaWdodG5lc3MgPSAodCkgPT4gdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5wYWRkaW5nID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgaWYgKHAgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUocCkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcCA9IFtwLCBwXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9wYWRkaW5nID0gcDtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIF9wYWRkaW5nO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGYuY29sb3JzID0gZnVuY3Rpb24gKG51bUNvbG9ycywgb3V0KSB7XG4gICAgICAgIC8vIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHJldHVybiB0aGUgb3JpZ2luYWwgY29sb3JzIHRoYXQgd2VyZSBwcm92aWRlZFxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIG91dCA9ICdoZXgnO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gX2NvbG9ycy5zbGljZSgwKTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1Db2xvcnMgPT09IDEpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFtmKDAuNSldO1xuICAgICAgICB9IGVsc2UgaWYgKG51bUNvbG9ycyA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGRtID0gX2RvbWFpblswXTtcbiAgICAgICAgICAgIGNvbnN0IGRkID0gX2RvbWFpblsxXSAtIGRtO1xuICAgICAgICAgICAgcmVzdWx0ID0gX19yYW5nZV9fKDAsIG51bUNvbG9ycywgZmFsc2UpLm1hcCgoaSkgPT5cbiAgICAgICAgICAgICAgICBmKGRtICsgKGkgLyAobnVtQ29sb3JzIC0gMSkpICogZGQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJucyBhbGwgY29sb3JzIGJhc2VkIG9uIHRoZSBkZWZpbmVkIGNsYXNzZXNcbiAgICAgICAgICAgIGNvbG9ycyA9IFtdO1xuICAgICAgICAgICAgbGV0IHNhbXBsZXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChfY2xhc3NlcyAmJiBfY2xhc3Nlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAxLCBlbmQgPSBfY2xhc3Nlcy5sZW5ndGgsIGFzYyA9IDEgPD0gZW5kO1xuICAgICAgICAgICAgICAgICAgICBhc2MgPyBpIDwgZW5kIDogaSA+IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgYXNjID8gaSsrIDogaS0tXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZXMucHVzaCgoX2NsYXNzZXNbaSAtIDFdICsgX2NsYXNzZXNbaV0pICogMC41KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNhbXBsZXMgPSBfZG9tYWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gc2FtcGxlcy5tYXAoKHYpID0+IGYodikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNocm9tYVtvdXRdKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQubWFwKChjKSA9PiBjW291dF0oKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgZi5jYWNoZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChjICE9IG51bGwpIHtcbiAgICAgICAgICAgIF91c2VDYWNoZSA9IGM7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfdXNlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5nYW1tYSA9IGZ1bmN0aW9uIChnKSB7XG4gICAgICAgIGlmIChnICE9IG51bGwpIHtcbiAgICAgICAgICAgIF9nYW1tYSA9IGc7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfZ2FtbWE7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5ub2RhdGEgPSBmdW5jdGlvbiAoZCkge1xuICAgICAgICBpZiAoZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBfbmFjb2wgPSBjaHJvbWEoZCk7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfbmFjb2w7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGY7XG59XG5cbmZ1bmN0aW9uIF9fcmFuZ2VfXyhsZWZ0LCByaWdodCwgaW5jbHVzaXZlKSB7XG4gICAgbGV0IHJhbmdlID0gW107XG4gICAgbGV0IGFzY2VuZGluZyA9IGxlZnQgPCByaWdodDtcbiAgICBsZXQgZW5kID0gIWluY2x1c2l2ZSA/IHJpZ2h0IDogYXNjZW5kaW5nID8gcmlnaHQgKyAxIDogcmlnaHQgLSAxO1xuICAgIGZvciAobGV0IGkgPSBsZWZ0OyBhc2NlbmRpbmcgPyBpIDwgZW5kIDogaSA+IGVuZDsgYXNjZW5kaW5nID8gaSsrIDogaS0tKSB7XG4gICAgICAgIHJhbmdlLnB1c2goaSk7XG4gICAgfVxuICAgIHJldHVybiByYW5nZTtcbn1cbiIsICIvL1xuLy8gaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgY29sb3JzIHV6aW5nIGEgYmV6aWVyIHNwbGluZVxuLy9cblxuLy8gQHJlcXVpcmVzIHV0aWxzIGxhYlxuaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCAnLi4vaW8vbGFiL2luZGV4LmpzJztcbmltcG9ydCBzY2FsZSBmcm9tICcuL3NjYWxlLmpzJztcblxuLy8gbnRoIHJvdyBvZiB0aGUgcGFzY2FsIHRyaWFuZ2xlXG5jb25zdCBiaW5vbV9yb3cgPSBmdW5jdGlvbiAobikge1xuICAgIGxldCByb3cgPSBbMSwgMV07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgbGV0IG5ld3JvdyA9IFsxXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBuZXdyb3dbal0gPSAocm93W2pdIHx8IDApICsgcm93W2ogLSAxXTtcbiAgICAgICAgfVxuICAgICAgICByb3cgPSBuZXdyb3c7XG4gICAgfVxuICAgIHJldHVybiByb3c7XG59O1xuXG5jb25zdCBiZXppZXIgPSBmdW5jdGlvbiAoY29sb3JzKSB7XG4gICAgbGV0IEksIGxhYjAsIGxhYjEsIGxhYjI7XG4gICAgY29sb3JzID0gY29sb3JzLm1hcCgoYykgPT4gbmV3IENvbG9yKGMpKTtcbiAgICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBbbGFiMCwgbGFiMV0gPSBjb2xvcnMubWFwKChjKSA9PiBjLmxhYigpKTtcbiAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBjb25zdCBsYWIgPSBbMCwgMSwgMl0ubWFwKChpKSA9PiBsYWIwW2ldICsgdCAqIChsYWIxW2ldIC0gbGFiMFtpXSkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgLy8gcXVhZHJhdGljIGJlemllciBpbnRlcnBvbGF0aW9uXG4gICAgICAgIFtsYWIwLCBsYWIxLCBsYWIyXSA9IGNvbG9ycy5tYXAoKGMpID0+IGMubGFiKCkpO1xuICAgICAgICBJID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYiA9IFswLCAxLCAyXS5tYXAoXG4gICAgICAgICAgICAgICAgKGkpID0+XG4gICAgICAgICAgICAgICAgICAgICgxIC0gdCkgKiAoMSAtIHQpICogbGFiMFtpXSArXG4gICAgICAgICAgICAgICAgICAgIDIgKiAoMSAtIHQpICogdCAqIGxhYjFbaV0gK1xuICAgICAgICAgICAgICAgICAgICB0ICogdCAqIGxhYjJbaV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGxhYiwgJ2xhYicpO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAvLyBjdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBsZXQgbGFiMztcbiAgICAgICAgW2xhYjAsIGxhYjEsIGxhYjIsIGxhYjNdID0gY29sb3JzLm1hcCgoYykgPT4gYy5sYWIoKSk7XG4gICAgICAgIEkgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgY29uc3QgbGFiID0gWzAsIDEsIDJdLm1hcChcbiAgICAgICAgICAgICAgICAoaSkgPT5cbiAgICAgICAgICAgICAgICAgICAgKDEgLSB0KSAqICgxIC0gdCkgKiAoMSAtIHQpICogbGFiMFtpXSArXG4gICAgICAgICAgICAgICAgICAgIDMgKiAoMSAtIHQpICogKDEgLSB0KSAqIHQgKiBsYWIxW2ldICtcbiAgICAgICAgICAgICAgICAgICAgMyAqICgxIC0gdCkgKiB0ICogdCAqIGxhYjJbaV0gK1xuICAgICAgICAgICAgICAgICAgICB0ICogdCAqIHQgKiBsYWIzW2ldXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPj0gNSkge1xuICAgICAgICAvLyBnZW5lcmFsIGNhc2UgKGRlZ3JlZSBuIGJlemllcilcbiAgICAgICAgbGV0IGxhYnMsIHJvdywgbjtcbiAgICAgICAgbGFicyA9IGNvbG9ycy5tYXAoKGMpID0+IGMubGFiKCkpO1xuICAgICAgICBuID0gY29sb3JzLmxlbmd0aCAtIDE7XG4gICAgICAgIHJvdyA9IGJpbm9tX3JvdyhuKTtcbiAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBjb25zdCB1ID0gMSAtIHQ7XG4gICAgICAgICAgICBjb25zdCBsYWIgPSBbMCwgMSwgMl0ubWFwKChpKSA9PlxuICAgICAgICAgICAgICAgIGxhYnMucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAoc3VtLCBlbCwgaikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArIHJvd1tqXSAqIHUgKiogKG4gLSBqKSAqIHQgKiogaiAqIGVsW2ldLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IobGFiLCAnbGFiJyk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ05vIHBvaW50IGluIHJ1bm5pbmcgYmV6aWVyIHdpdGggb25seSBvbmUgY29sb3IuJyk7XG4gICAgfVxuICAgIHJldHVybiBJO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKGNvbG9ycykgPT4ge1xuICAgIGNvbnN0IGYgPSBiZXppZXIoY29sb3JzKTtcbiAgICBmLnNjYWxlID0gKCkgPT4gc2NhbGUoZik7XG4gICAgcmV0dXJuIGY7XG59O1xuIiwgIi8qXG4gKiBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBjb2xvcnMgdXppbmcgYSBiZXppZXIgc3BsaW5lXG4gKiBibGVuZCBtb2RlIGZvcm11bGFzIHRha2VuIGZyb20gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTgwMTEwMDE0OTQ2L2h0dHA6Ly93d3cudmVudHVyZS13YXJlLmNvbS9rZXZpbi9jb2RpbmcvbGV0cy1sZWFybi1tYXRoLXBob3Rvc2hvcC1ibGVuZC1tb2Rlcy9cbiAqL1xuXG5pbXBvcnQgJy4uL2lvL3JnYi9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uL2Nocm9tYS5qcyc7XG5cbmNvbnN0IGJsZW5kID0gKGJvdHRvbSwgdG9wLCBtb2RlKSA9PiB7XG4gICAgaWYgKCFibGVuZFttb2RlXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gYmxlbmQgbW9kZSAnICsgbW9kZSk7XG4gICAgfVxuICAgIHJldHVybiBibGVuZFttb2RlXShib3R0b20sIHRvcCk7XG59O1xuXG5jb25zdCBibGVuZF9mID0gKGYpID0+IChib3R0b20sIHRvcCkgPT4ge1xuICAgIGNvbnN0IGMwID0gY2hyb21hKHRvcCkucmdiKCk7XG4gICAgY29uc3QgYzEgPSBjaHJvbWEoYm90dG9tKS5yZ2IoKTtcbiAgICByZXR1cm4gY2hyb21hLnJnYihmKGMwLCBjMSkpO1xufTtcblxuY29uc3QgZWFjaCA9IChmKSA9PiAoYzAsIGMxKSA9PiB7XG4gICAgY29uc3Qgb3V0ID0gW107XG4gICAgb3V0WzBdID0gZihjMFswXSwgYzFbMF0pO1xuICAgIG91dFsxXSA9IGYoYzBbMV0sIGMxWzFdKTtcbiAgICBvdXRbMl0gPSBmKGMwWzJdLCBjMVsyXSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbmNvbnN0IG5vcm1hbCA9IChhKSA9PiBhO1xuY29uc3QgbXVsdGlwbHkgPSAoYSwgYikgPT4gKGEgKiBiKSAvIDI1NTtcbmNvbnN0IGRhcmtlbiA9IChhLCBiKSA9PiAoYSA+IGIgPyBiIDogYSk7XG5jb25zdCBsaWdodGVuID0gKGEsIGIpID0+IChhID4gYiA/IGEgOiBiKTtcbmNvbnN0IHNjcmVlbiA9IChhLCBiKSA9PiAyNTUgKiAoMSAtICgxIC0gYSAvIDI1NSkgKiAoMSAtIGIgLyAyNTUpKTtcbmNvbnN0IG92ZXJsYXkgPSAoYSwgYikgPT5cbiAgICBiIDwgMTI4ID8gKDIgKiBhICogYikgLyAyNTUgOiAyNTUgKiAoMSAtIDIgKiAoMSAtIGEgLyAyNTUpICogKDEgLSBiIC8gMjU1KSk7XG5jb25zdCBidXJuID0gKGEsIGIpID0+IDI1NSAqICgxIC0gKDEgLSBiIC8gMjU1KSAvIChhIC8gMjU1KSk7XG5jb25zdCBkb2RnZSA9IChhLCBiKSA9PiB7XG4gICAgaWYgKGEgPT09IDI1NSkgcmV0dXJuIDI1NTtcbiAgICBhID0gKDI1NSAqIChiIC8gMjU1KSkgLyAoMSAtIGEgLyAyNTUpO1xuICAgIHJldHVybiBhID4gMjU1ID8gMjU1IDogYTtcbn07XG5cbi8vICMgYWRkID0gKGEsYikgLT5cbi8vICMgICAgIGlmIChhICsgYiA+IDI1NSkgdGhlbiAyNTUgZWxzZSBhICsgYlxuXG5ibGVuZC5ub3JtYWwgPSBibGVuZF9mKGVhY2gobm9ybWFsKSk7XG5ibGVuZC5tdWx0aXBseSA9IGJsZW5kX2YoZWFjaChtdWx0aXBseSkpO1xuYmxlbmQuc2NyZWVuID0gYmxlbmRfZihlYWNoKHNjcmVlbikpO1xuYmxlbmQub3ZlcmxheSA9IGJsZW5kX2YoZWFjaChvdmVybGF5KSk7XG5ibGVuZC5kYXJrZW4gPSBibGVuZF9mKGVhY2goZGFya2VuKSk7XG5ibGVuZC5saWdodGVuID0gYmxlbmRfZihlYWNoKGxpZ2h0ZW4pKTtcbmJsZW5kLmRvZGdlID0gYmxlbmRfZihlYWNoKGRvZGdlKSk7XG5ibGVuZC5idXJuID0gYmxlbmRfZihlYWNoKGJ1cm4pKTtcbi8vIGJsZW5kLmFkZCA9IGJsZW5kX2YoZWFjaChhZGQpKTtcblxuZXhwb3J0IGRlZmF1bHQgYmxlbmQ7XG4iLCAiLy8gY3ViZWhlbGl4IGludGVycG9sYXRpb25cbi8vIGJhc2VkIG9uIEQuQS4gR3JlZW4gXCJBIGNvbG91ciBzY2hlbWUgZm9yIHRoZSBkaXNwbGF5IG9mIGFzdHJvbm9taWNhbCBpbnRlbnNpdHkgaW1hZ2VzXCJcbi8vIGh0dHA6Ly9hc3Ryb24tc29jLmluL2J1bGxldGluLzExSnVuZS8yODkzOTIwMTEucGRmXG5pbXBvcnQgeyB0eXBlLCBjbGlwX3JnYiwgVFdPUEkgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uL2Nocm9tYS5qcyc7XG5jb25zdCB7IHBvdywgc2luLCBjb3MgfSA9IE1hdGg7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChcbiAgICBzdGFydCA9IDMwMCxcbiAgICByb3RhdGlvbnMgPSAtMS41LFxuICAgIGh1ZSA9IDEsXG4gICAgZ2FtbWEgPSAxLFxuICAgIGxpZ2h0bmVzcyA9IFswLCAxXVxuKSB7XG4gICAgbGV0IGRoID0gMCxcbiAgICAgICAgZGw7XG4gICAgaWYgKHR5cGUobGlnaHRuZXNzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICBkbCA9IGxpZ2h0bmVzc1sxXSAtIGxpZ2h0bmVzc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkbCA9IDA7XG4gICAgICAgIGxpZ2h0bmVzcyA9IFtsaWdodG5lc3MsIGxpZ2h0bmVzc107XG4gICAgfVxuICAgIGNvbnN0IGYgPSBmdW5jdGlvbiAoZnJhY3QpIHtcbiAgICAgICAgY29uc3QgYSA9IFRXT1BJICogKChzdGFydCArIDEyMCkgLyAzNjAgKyByb3RhdGlvbnMgKiBmcmFjdCk7XG4gICAgICAgIGNvbnN0IGwgPSBwb3cobGlnaHRuZXNzWzBdICsgZGwgKiBmcmFjdCwgZ2FtbWEpO1xuICAgICAgICBjb25zdCBoID0gZGggIT09IDAgPyBodWVbMF0gKyBmcmFjdCAqIGRoIDogaHVlO1xuICAgICAgICBjb25zdCBhbXAgPSAoaCAqIGwgKiAoMSAtIGwpKSAvIDI7XG4gICAgICAgIGNvbnN0IGNvc19hID0gY29zKGEpO1xuICAgICAgICBjb25zdCBzaW5fYSA9IHNpbihhKTtcbiAgICAgICAgY29uc3QgciA9IGwgKyBhbXAgKiAoLTAuMTQ4NjEgKiBjb3NfYSArIDEuNzgyNzcgKiBzaW5fYSk7XG4gICAgICAgIGNvbnN0IGcgPSBsICsgYW1wICogKC0wLjI5MjI3ICogY29zX2EgLSAwLjkwNjQ5ICogc2luX2EpO1xuICAgICAgICBjb25zdCBiID0gbCArIGFtcCAqICgrMS45NzI5NCAqIGNvc19hKTtcbiAgICAgICAgcmV0dXJuIGNocm9tYShjbGlwX3JnYihbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NSwgMV0pKTtcbiAgICB9O1xuICAgIGYuc3RhcnQgPSBmdW5jdGlvbiAocykge1xuICAgICAgICBpZiAocyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnQgPSBzO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYucm90YXRpb25zID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdGF0aW9ucztcbiAgICAgICAgfVxuICAgICAgICByb3RhdGlvbnMgPSByO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYuZ2FtbWEgPSBmdW5jdGlvbiAoZykge1xuICAgICAgICBpZiAoZyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2FtbWE7XG4gICAgICAgIH1cbiAgICAgICAgZ2FtbWEgPSBnO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYuaHVlID0gZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgaWYgKGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh1ZTtcbiAgICAgICAgfVxuICAgICAgICBodWUgPSBoO1xuICAgICAgICBpZiAodHlwZShodWUpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBkaCA9IGh1ZVsxXSAtIGh1ZVswXTtcbiAgICAgICAgICAgIGlmIChkaCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGh1ZSA9IGh1ZVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRoID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYubGlnaHRuZXNzID0gZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgaWYgKGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxpZ2h0bmVzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZShoKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgbGlnaHRuZXNzID0gaDtcbiAgICAgICAgICAgIGRsID0gaFsxXSAtIGhbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaWdodG5lc3MgPSBbaCwgaF07XG4gICAgICAgICAgICBkbCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBmLnNjYWxlID0gKCkgPT4gY2hyb21hLnNjYWxlKGYpO1xuICAgIGYuaHVlKGh1ZSk7XG4gICAgcmV0dXJuIGY7XG59XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmNvbnN0IGRpZ2l0cyA9ICcwMTIzNDU2Nzg5YWJjZGVmJztcblxuY29uc3QgeyBmbG9vciwgcmFuZG9tIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICAgbGV0IGNvZGUgPSAnIyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgY29kZSArPSBkaWdpdHMuY2hhckF0KGZsb29yKHJhbmRvbSgpICogMTYpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDb2xvcihjb2RlLCAnaGV4Jyk7XG59O1xuIiwgImltcG9ydCB0eXBlIGZyb20gJy4vdHlwZS5qcyc7XG5cbmNvbnN0IHsgbG9nLCBwb3csIGZsb29yLCBhYnMgfSA9IE1hdGg7XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXplKGRhdGEsIGtleSA9IG51bGwpIHtcbiAgICBjb25zdCByID0ge1xuICAgICAgICBtaW46IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgIG1heDogTnVtYmVyLk1BWF9WQUxVRSAqIC0xLFxuICAgICAgICBzdW06IDAsXG4gICAgICAgIHZhbHVlczogW10sXG4gICAgICAgIGNvdW50OiAwXG4gICAgfTtcbiAgICBpZiAodHlwZShkYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZGF0YSA9IE9iamVjdC52YWx1ZXMoZGF0YSk7XG4gICAgfVxuICAgIGRhdGEuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgIGlmIChrZXkgJiYgdHlwZSh2YWwpID09PSAnb2JqZWN0JykgdmFsID0gdmFsW2tleV07XG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgICAgIHIudmFsdWVzLnB1c2godmFsKTtcbiAgICAgICAgICAgIHIuc3VtICs9IHZhbDtcbiAgICAgICAgICAgIGlmICh2YWwgPCByLm1pbikgci5taW4gPSB2YWw7XG4gICAgICAgICAgICBpZiAodmFsID4gci5tYXgpIHIubWF4ID0gdmFsO1xuICAgICAgICAgICAgci5jb3VudCArPSAxO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByLmRvbWFpbiA9IFtyLm1pbiwgci5tYXhdO1xuXG4gICAgci5saW1pdHMgPSAobW9kZSwgbnVtKSA9PiBsaW1pdHMociwgbW9kZSwgbnVtKTtcblxuICAgIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGltaXRzKGRhdGEsIG1vZGUgPSAnZXF1YWwnLCBudW0gPSA3KSB7XG4gICAgaWYgKHR5cGUoZGF0YSkgPT0gJ2FycmF5Jykge1xuICAgICAgICBkYXRhID0gYW5hbHl6ZShkYXRhKTtcbiAgICB9XG4gICAgY29uc3QgeyBtaW4sIG1heCB9ID0gZGF0YTtcbiAgICBjb25zdCB2YWx1ZXMgPSBkYXRhLnZhbHVlcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG5cbiAgICBpZiAobnVtID09PSAxKSB7XG4gICAgICAgIHJldHVybiBbbWluLCBtYXhdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0cyA9IFtdO1xuXG4gICAgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAnYycpIHtcbiAgICAgICAgLy8gY29udGludW91c1xuICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH1cblxuICAgIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2UnKSB7XG4gICAgICAgIC8vIGVxdWFsIGludGVydmFsXG4gICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbiArIChpIC8gbnVtKSAqIChtYXggLSBtaW4pKTtcbiAgICAgICAgfVxuICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH0gZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwgMSkgPT09ICdsJykge1xuICAgICAgICAvLyBsb2cgc2NhbGVcbiAgICAgICAgaWYgKG1pbiA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0xvZ2FyaXRobWljIHNjYWxlcyBhcmUgb25seSBwb3NzaWJsZSBmb3IgdmFsdWVzID4gMCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWluX2xvZyA9IE1hdGguTE9HMTBFICogbG9nKG1pbik7XG4gICAgICAgIGNvbnN0IG1heF9sb2cgPSBNYXRoLkxPRzEwRSAqIGxvZyhtYXgpO1xuICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgICAgICBsaW1pdHMucHVzaChwb3coMTAsIG1pbl9sb2cgKyAoaSAvIG51bSkgKiAobWF4X2xvZyAtIG1pbl9sb2cpKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICB9IGVsc2UgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAncScpIHtcbiAgICAgICAgLy8gcXVhbnRpbGUgc2NhbGVcbiAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcCA9ICgodmFsdWVzLmxlbmd0aCAtIDEpICogaSkgLyBudW07XG4gICAgICAgICAgICBjb25zdCBwYiA9IGZsb29yKHApO1xuICAgICAgICAgICAgaWYgKHBiID09PSBwKSB7XG4gICAgICAgICAgICAgICAgbGltaXRzLnB1c2godmFsdWVzW3BiXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHAgPiBwYlxuICAgICAgICAgICAgICAgIGNvbnN0IHByID0gcCAtIHBiO1xuICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHZhbHVlc1twYl0gKiAoMSAtIHByKSArIHZhbHVlc1twYiArIDFdICogcHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgfSBlbHNlIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2snKSB7XG4gICAgICAgIC8vIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAvKlxuICAgICAgICBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvblxuICAgICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZmlndWUvc291cmNlL2Jyb3dzZS90cnVuay9maWd1ZS5qcyMzMzZcbiAgICAgICAgc2ltcGxpZmllZCBmb3IgMS1kIGlucHV0IHZhbHVlc1xuICAgICAgICAqL1xuICAgICAgICBsZXQgY2x1c3RlcjtcbiAgICAgICAgY29uc3QgbiA9IHZhbHVlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gbmV3IEFycmF5KG4pO1xuICAgICAgICBjb25zdCBjbHVzdGVyU2l6ZXMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgbGV0IHJlcGVhdCA9IHRydWU7XG4gICAgICAgIGxldCBuYl9pdGVycyA9IDA7XG4gICAgICAgIGxldCBjZW50cm9pZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIGdldCBzZWVkIHZhbHVlc1xuICAgICAgICBjZW50cm9pZHMgPSBbXTtcbiAgICAgICAgY2VudHJvaWRzLnB1c2gobWluKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgY2VudHJvaWRzLnB1c2gobWluICsgKGkgLyBudW0pICogKG1heCAtIG1pbikpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRyb2lkcy5wdXNoKG1heCk7XG5cbiAgICAgICAgd2hpbGUgKHJlcGVhdCkge1xuICAgICAgICAgICAgLy8gYXNzaWdubWVudCBzdGVwXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgY2x1c3RlclNpemVzW2pdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgbGV0IG1pbmRpc3QgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgIGxldCBiZXN0O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdCA9IGFicyhjZW50cm9pZHNbal0gLSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXN0IDwgbWluZGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0ID0gajtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyU2l6ZXNbYmVzdF0rKztcbiAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHNbaV0gPSBiZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdXBkYXRlIGNlbnRyb2lkcyBzdGVwXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50cm9pZHMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbal0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaV07XG4gICAgICAgICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tjbHVzdGVyXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbY2x1c3Rlcl0gPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2NsdXN0ZXJdICs9IHZhbHVlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2pdICo9IDEgLyBjbHVzdGVyU2l6ZXNbal07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGNvbnZlcmdlbmNlXG4gICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3Q2VudHJvaWRzW2pdICE9PSBjZW50cm9pZHNbal0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjZW50cm9pZHMgPSBuZXdDZW50cm9pZHM7XG4gICAgICAgICAgICBuYl9pdGVycysrO1xuXG4gICAgICAgICAgICBpZiAobmJfaXRlcnMgPiAyMDApIHtcbiAgICAgICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZpbmlzaGVkIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAvLyB0aGUgbmV4dCBwYXJ0IGlzIGJvcnJvd2VkIGZyb20gZ2FicmllbGZsb3IuaXRcbiAgICAgICAgY29uc3Qga0NsdXN0ZXJzID0ge307XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgIGtDbHVzdGVyc1tqXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaV07XG4gICAgICAgICAgICBrQ2x1c3RlcnNbY2x1c3Rlcl0ucHVzaCh2YWx1ZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0bXBLTWVhbnNCcmVha3MgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW07IGorKykge1xuICAgICAgICAgICAgdG1wS01lYW5zQnJlYWtzLnB1c2goa0NsdXN0ZXJzW2pdWzBdKTtcbiAgICAgICAgICAgIHRtcEtNZWFuc0JyZWFrcy5wdXNoKGtDbHVzdGVyc1tqXVtrQ2x1c3RlcnNbal0ubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgICAgIHRtcEtNZWFuc0JyZWFrcyA9IHRtcEtNZWFuc0JyZWFrcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgIGxpbWl0cy5wdXNoKHRtcEtNZWFuc0JyZWFrc1swXSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdG1wS01lYW5zQnJlYWtzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdG1wS01lYW5zQnJlYWtzW2ldO1xuICAgICAgICAgICAgaWYgKCFpc05hTih2KSAmJiBsaW1pdHMuaW5kZXhPZih2KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsaW1pdHMucHVzaCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGltaXRzO1xufVxuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgJy4uL29wcy9sdW1pbmFuY2UuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoYSwgYikgPT4ge1xuICAgIC8vIFdDQUcgY29udHJhc3QgcmF0aW9cbiAgICAvLyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNjb250cmFzdC1yYXRpb2RlZlxuICAgIGEgPSBuZXcgQ29sb3IoYSk7XG4gICAgYiA9IG5ldyBDb2xvcihiKTtcbiAgICBjb25zdCBsMSA9IGEubHVtaW5hbmNlKCk7XG4gICAgY29uc3QgbDIgPSBiLmx1bWluYW5jZSgpO1xuICAgIHJldHVybiBsMSA+IGwyID8gKGwxICsgMC4wNSkgLyAobDIgKyAwLjA1KSA6IChsMiArIDAuMDUpIC8gKGwxICsgMC4wNSk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5jb25zdCB7IHNxcnQsIHBvdywgbWluLCBtYXgsIGF0YW4yLCBhYnMsIGNvcywgc2luLCBleHAsIFBJIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoYSwgYiwgS2wgPSAxLCBLYyA9IDEsIEtoID0gMSkge1xuICAgIC8vIERlbHRhIEUgKENJRSAyMDAwKVxuICAgIC8vIHNlZSBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9EZWx0YUVfQ0lFMjAwMC5odG1sXG4gICAgdmFyIHJhZDJkZWcgPSBmdW5jdGlvbiAocmFkKSB7XG4gICAgICAgIHJldHVybiAoMzYwICogcmFkKSAvICgyICogUEkpO1xuICAgIH07XG4gICAgdmFyIGRlZzJyYWQgPSBmdW5jdGlvbiAoZGVnKSB7XG4gICAgICAgIHJldHVybiAoMiAqIFBJICogZGVnKSAvIDM2MDtcbiAgICB9O1xuICAgIGEgPSBuZXcgQ29sb3IoYSk7XG4gICAgYiA9IG5ldyBDb2xvcihiKTtcbiAgICBjb25zdCBbTDEsIGExLCBiMV0gPSBBcnJheS5mcm9tKGEubGFiKCkpO1xuICAgIGNvbnN0IFtMMiwgYTIsIGIyXSA9IEFycmF5LmZyb20oYi5sYWIoKSk7XG4gICAgY29uc3QgYXZnTCA9IChMMSArIEwyKSAvIDI7XG4gICAgY29uc3QgQzEgPSBzcXJ0KHBvdyhhMSwgMikgKyBwb3coYjEsIDIpKTtcbiAgICBjb25zdCBDMiA9IHNxcnQocG93KGEyLCAyKSArIHBvdyhiMiwgMikpO1xuICAgIGNvbnN0IGF2Z0MgPSAoQzEgKyBDMikgLyAyO1xuICAgIGNvbnN0IEcgPSAwLjUgKiAoMSAtIHNxcnQocG93KGF2Z0MsIDcpIC8gKHBvdyhhdmdDLCA3KSArIHBvdygyNSwgNykpKSk7XG4gICAgY29uc3QgYTFwID0gYTEgKiAoMSArIEcpO1xuICAgIGNvbnN0IGEycCA9IGEyICogKDEgKyBHKTtcbiAgICBjb25zdCBDMXAgPSBzcXJ0KHBvdyhhMXAsIDIpICsgcG93KGIxLCAyKSk7XG4gICAgY29uc3QgQzJwID0gc3FydChwb3coYTJwLCAyKSArIHBvdyhiMiwgMikpO1xuICAgIGNvbnN0IGF2Z0NwID0gKEMxcCArIEMycCkgLyAyO1xuICAgIGNvbnN0IGFyY3RhbjEgPSByYWQyZGVnKGF0YW4yKGIxLCBhMXApKTtcbiAgICBjb25zdCBhcmN0YW4yID0gcmFkMmRlZyhhdGFuMihiMiwgYTJwKSk7XG4gICAgY29uc3QgaDFwID0gYXJjdGFuMSA+PSAwID8gYXJjdGFuMSA6IGFyY3RhbjEgKyAzNjA7XG4gICAgY29uc3QgaDJwID0gYXJjdGFuMiA+PSAwID8gYXJjdGFuMiA6IGFyY3RhbjIgKyAzNjA7XG4gICAgY29uc3QgYXZnSHAgPVxuICAgICAgICBhYnMoaDFwIC0gaDJwKSA+IDE4MCA/IChoMXAgKyBoMnAgKyAzNjApIC8gMiA6IChoMXAgKyBoMnApIC8gMjtcbiAgICBjb25zdCBUID1cbiAgICAgICAgMSAtXG4gICAgICAgIDAuMTcgKiBjb3MoZGVnMnJhZChhdmdIcCAtIDMwKSkgK1xuICAgICAgICAwLjI0ICogY29zKGRlZzJyYWQoMiAqIGF2Z0hwKSkgK1xuICAgICAgICAwLjMyICogY29zKGRlZzJyYWQoMyAqIGF2Z0hwICsgNikpIC1cbiAgICAgICAgMC4yICogY29zKGRlZzJyYWQoNCAqIGF2Z0hwIC0gNjMpKTtcbiAgICBsZXQgZGVsdGFIcCA9IGgycCAtIGgxcDtcbiAgICBkZWx0YUhwID1cbiAgICAgICAgYWJzKGRlbHRhSHApIDw9IDE4MFxuICAgICAgICAgICAgPyBkZWx0YUhwXG4gICAgICAgICAgICA6IGgycCA8PSBoMXBcbiAgICAgICAgICAgICAgPyBkZWx0YUhwICsgMzYwXG4gICAgICAgICAgICAgIDogZGVsdGFIcCAtIDM2MDtcbiAgICBkZWx0YUhwID0gMiAqIHNxcnQoQzFwICogQzJwKSAqIHNpbihkZWcycmFkKGRlbHRhSHApIC8gMik7XG4gICAgY29uc3QgZGVsdGFMID0gTDIgLSBMMTtcbiAgICBjb25zdCBkZWx0YUNwID0gQzJwIC0gQzFwO1xuICAgIGNvbnN0IHNsID0gMSArICgwLjAxNSAqIHBvdyhhdmdMIC0gNTAsIDIpKSAvIHNxcnQoMjAgKyBwb3coYXZnTCAtIDUwLCAyKSk7XG4gICAgY29uc3Qgc2MgPSAxICsgMC4wNDUgKiBhdmdDcDtcbiAgICBjb25zdCBzaCA9IDEgKyAwLjAxNSAqIGF2Z0NwICogVDtcbiAgICBjb25zdCBkZWx0YVRoZXRhID0gMzAgKiBleHAoLXBvdygoYXZnSHAgLSAyNzUpIC8gMjUsIDIpKTtcbiAgICBjb25zdCBSYyA9IDIgKiBzcXJ0KHBvdyhhdmdDcCwgNykgLyAocG93KGF2Z0NwLCA3KSArIHBvdygyNSwgNykpKTtcbiAgICBjb25zdCBSdCA9IC1SYyAqIHNpbigyICogZGVnMnJhZChkZWx0YVRoZXRhKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gc3FydChcbiAgICAgICAgcG93KGRlbHRhTCAvIChLbCAqIHNsKSwgMikgK1xuICAgICAgICAgICAgcG93KGRlbHRhQ3AgLyAoS2MgKiBzYyksIDIpICtcbiAgICAgICAgICAgIHBvdyhkZWx0YUhwIC8gKEtoICogc2gpLCAyKSArXG4gICAgICAgICAgICBSdCAqIChkZWx0YUNwIC8gKEtjICogc2MpKSAqIChkZWx0YUhwIC8gKEtoICogc2gpKVxuICAgICk7XG4gICAgcmV0dXJuIG1heCgwLCBtaW4oMTAwLCByZXN1bHQpKTtcbn1cbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG4vLyBzaW1wbGUgRXVjbGlkZWFuIGRpc3RhbmNlXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoYSwgYiwgbW9kZSA9ICdsYWInKSB7XG4gICAgLy8gRGVsdGEgRSAoQ0lFIDE5NzYpXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXF1YXRpb25zLmh0bWxcbiAgICBhID0gbmV3IENvbG9yKGEpO1xuICAgIGIgPSBuZXcgQ29sb3IoYik7XG4gICAgY29uc3QgbDEgPSBhLmdldChtb2RlKTtcbiAgICBjb25zdCBsMiA9IGIuZ2V0KG1vZGUpO1xuICAgIGxldCBzdW1fc3EgPSAwO1xuICAgIGZvciAobGV0IGkgaW4gbDEpIHtcbiAgICAgICAgY29uc3QgZCA9IChsMVtpXSB8fCAwKSAtIChsMltpXSB8fCAwKTtcbiAgICAgICAgc3VtX3NxICs9IGQgKiBkO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5zcXJ0KHN1bV9zcSk7XG59XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgICBuZXcgQ29sb3IoLi4uYXJncyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuIiwgIi8vIHNvbWUgcHJlLWRlZmluZWQgY29sb3Igc2NhbGVzOlxuaW1wb3J0IGNocm9tYSBmcm9tICcuLi9jaHJvbWEuanMnO1xuaW1wb3J0ICcuLi9pby9oc2wvaW5kZXguanMnO1xuaW1wb3J0IHNjYWxlIGZyb20gJy4uL2dlbmVyYXRvci9zY2FsZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb29sKCkge1xuICAgICAgICByZXR1cm4gc2NhbGUoW2Nocm9tYS5oc2woMTgwLCAxLCAwLjkpLCBjaHJvbWEuaHNsKDI1MCwgMC43LCAwLjQpXSk7XG4gICAgfSxcbiAgICBob3QoKSB7XG4gICAgICAgIHJldHVybiBzY2FsZShbJyMwMDAnLCAnI2YwMCcsICcjZmYwJywgJyNmZmYnXSwgWzAsIDAuMjUsIDAuNzUsIDFdKS5tb2RlKFxuICAgICAgICAgICAgJ3JnYidcbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwgIi8qKlxuICAgIENvbG9yQnJld2VyIGNvbG9ycyBmb3IgY2hyb21hLmpzXG5cbiAgICBDb3B5cmlnaHQgKGMpIDIwMDIgQ3ludGhpYSBCcmV3ZXIsIE1hcmsgSGFycm93ZXIsIGFuZCBUaGVcbiAgICBQZW5uc3lsdmFuaWEgU3RhdGUgVW5pdmVyc2l0eS5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZFxuICAgIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SXG4gICAgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuY29uc3QgY29sb3JicmV3ZXIgPSB7XG4gICAgLy8gc2VxdWVudGlhbFxuICAgIE9yUmQ6IFsnI2ZmZjdlYycsICcjZmVlOGM4JywgJyNmZGQ0OWUnLCAnI2ZkYmI4NCcsICcjZmM4ZDU5JywgJyNlZjY1NDgnLCAnI2Q3MzAxZicsICcjYjMwMDAwJywgJyM3ZjAwMDAnXSxcbiAgICBQdUJ1OiBbJyNmZmY3ZmInLCAnI2VjZTdmMicsICcjZDBkMWU2JywgJyNhNmJkZGInLCAnIzc0YTljZicsICcjMzY5MGMwJywgJyMwNTcwYjAnLCAnIzA0NWE4ZCcsICcjMDIzODU4J10sXG4gICAgQnVQdTogWycjZjdmY2ZkJywgJyNlMGVjZjQnLCAnI2JmZDNlNicsICcjOWViY2RhJywgJyM4Yzk2YzYnLCAnIzhjNmJiMScsICcjODg0MTlkJywgJyM4MTBmN2MnLCAnIzRkMDA0YiddLFxuICAgIE9yYW5nZXM6IFsnI2ZmZjVlYicsICcjZmVlNmNlJywgJyNmZGQwYTInLCAnI2ZkYWU2YicsICcjZmQ4ZDNjJywgJyNmMTY5MTMnLCAnI2Q5NDgwMScsICcjYTYzNjAzJywgJyM3ZjI3MDQnXSxcbiAgICBCdUduOiBbJyNmN2ZjZmQnLCAnI2U1ZjVmOScsICcjY2NlY2U2JywgJyM5OWQ4YzknLCAnIzY2YzJhNCcsICcjNDFhZTc2JywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgWWxPckJyOiBbJyNmZmZmZTUnLCAnI2ZmZjdiYycsICcjZmVlMzkxJywgJyNmZWM0NGYnLCAnI2ZlOTkyOScsICcjZWM3MDE0JywgJyNjYzRjMDInLCAnIzk5MzQwNCcsICcjNjYyNTA2J10sXG4gICAgWWxHbjogWycjZmZmZmU1JywgJyNmN2ZjYjknLCAnI2Q5ZjBhMycsICcjYWRkZDhlJywgJyM3OGM2NzknLCAnIzQxYWI1ZCcsICcjMjM4NDQzJywgJyMwMDY4MzcnLCAnIzAwNDUyOSddLFxuICAgIFJlZHM6IFsnI2ZmZjVmMCcsICcjZmVlMGQyJywgJyNmY2JiYTEnLCAnI2ZjOTI3MicsICcjZmI2YTRhJywgJyNlZjNiMmMnLCAnI2NiMTgxZCcsICcjYTUwZjE1JywgJyM2NzAwMGQnXSxcbiAgICBSZFB1OiBbJyNmZmY3ZjMnLCAnI2ZkZTBkZCcsICcjZmNjNWMwJywgJyNmYTlmYjUnLCAnI2Y3NjhhMScsICcjZGQzNDk3JywgJyNhZTAxN2UnLCAnIzdhMDE3NycsICcjNDkwMDZhJ10sXG4gICAgR3JlZW5zOiBbJyNmN2ZjZjUnLCAnI2U1ZjVlMCcsICcjYzdlOWMwJywgJyNhMWQ5OWInLCAnIzc0YzQ3NicsICcjNDFhYjVkJywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgWWxHbkJ1OiBbJyNmZmZmZDknLCAnI2VkZjhiMScsICcjYzdlOWI0JywgJyM3ZmNkYmInLCAnIzQxYjZjNCcsICcjMWQ5MWMwJywgJyMyMjVlYTgnLCAnIzI1MzQ5NCcsICcjMDgxZDU4J10sXG4gICAgUHVycGxlczogWycjZmNmYmZkJywgJyNlZmVkZjUnLCAnI2RhZGFlYicsICcjYmNiZGRjJywgJyM5ZTlhYzgnLCAnIzgwN2RiYScsICcjNmE1MWEzJywgJyM1NDI3OGYnLCAnIzNmMDA3ZCddLFxuICAgIEduQnU6IFsnI2Y3ZmNmMCcsICcjZTBmM2RiJywgJyNjY2ViYzUnLCAnI2E4ZGRiNScsICcjN2JjY2M0JywgJyM0ZWIzZDMnLCAnIzJiOGNiZScsICcjMDg2OGFjJywgJyMwODQwODEnXSxcbiAgICBHcmV5czogWycjZmZmZmZmJywgJyNmMGYwZjAnLCAnI2Q5ZDlkOScsICcjYmRiZGJkJywgJyM5Njk2OTYnLCAnIzczNzM3MycsICcjNTI1MjUyJywgJyMyNTI1MjUnLCAnIzAwMDAwMCddLFxuICAgIFlsT3JSZDogWycjZmZmZmNjJywgJyNmZmVkYTAnLCAnI2ZlZDk3NicsICcjZmViMjRjJywgJyNmZDhkM2MnLCAnI2ZjNGUyYScsICcjZTMxYTFjJywgJyNiZDAwMjYnLCAnIzgwMDAyNiddLFxuICAgIFB1UmQ6IFsnI2Y3ZjRmOScsICcjZTdlMWVmJywgJyNkNGI5ZGEnLCAnI2M5OTRjNycsICcjZGY2NWIwJywgJyNlNzI5OGEnLCAnI2NlMTI1NicsICcjOTgwMDQzJywgJyM2NzAwMWYnXSxcbiAgICBCbHVlczogWycjZjdmYmZmJywgJyNkZWViZjcnLCAnI2M2ZGJlZicsICcjOWVjYWUxJywgJyM2YmFlZDYnLCAnIzQyOTJjNicsICcjMjE3MWI1JywgJyMwODUxOWMnLCAnIzA4MzA2YiddLFxuICAgIFB1QnVHbjogWycjZmZmN2ZiJywgJyNlY2UyZjAnLCAnI2QwZDFlNicsICcjYTZiZGRiJywgJyM2N2E5Y2YnLCAnIzM2OTBjMCcsICcjMDI4MThhJywgJyMwMTZjNTknLCAnIzAxNDYzNiddLFxuICAgIFZpcmlkaXM6IFsnIzQ0MDE1NCcsICcjNDgyNzc3JywgJyMzZjRhOGEnLCAnIzMxNjc4ZScsICcjMjY4MzhmJywgJyMxZjlkOGEnLCAnIzZjY2U1YScsICcjYjZkZTJiJywgJyNmZWU4MjUnXSxcblxuICAgIC8vIGRpdmVyZ2luZ1xuICAgIFNwZWN0cmFsOiBbJyM5ZTAxNDInLCAnI2Q1M2U0ZicsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA4YicsICcjZmZmZmJmJywgJyNlNmY1OTgnLCAnI2FiZGRhNCcsICcjNjZjMmE1JywgJyMzMjg4YmQnLCAnIzVlNGZhMiddLFxuICAgIFJkWWxHbjogWycjYTUwMDI2JywgJyNkNzMwMjcnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOGInLCAnI2ZmZmZiZicsICcjZDllZjhiJywgJyNhNmQ5NmEnLCAnIzY2YmQ2MycsICcjMWE5ODUwJywgJyMwMDY4MzcnXSxcbiAgICBSZEJ1OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZjdmN2Y3JywgJyNkMWU1ZjAnLCAnIzkyYzVkZScsICcjNDM5M2MzJywgJyMyMTY2YWMnLCAnIzA1MzA2MSddLFxuICAgIFBpWUc6IFsnIzhlMDE1MicsICcjYzUxYjdkJywgJyNkZTc3YWUnLCAnI2YxYjZkYScsICcjZmRlMGVmJywgJyNmN2Y3ZjcnLCAnI2U2ZjVkMCcsICcjYjhlMTg2JywgJyM3ZmJjNDEnLCAnIzRkOTIyMScsICcjMjc2NDE5J10sXG4gICAgUFJHbjogWycjNDAwMDRiJywgJyM3NjJhODMnLCAnIzk5NzBhYicsICcjYzJhNWNmJywgJyNlN2Q0ZTgnLCAnI2Y3ZjdmNycsICcjZDlmMGQzJywgJyNhNmRiYTAnLCAnIzVhYWU2MScsICcjMWI3ODM3JywgJyMwMDQ0MWInXSxcbiAgICBSZFlsQnU6IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDkwJywgJyNmZmZmYmYnLCAnI2UwZjNmOCcsICcjYWJkOWU5JywgJyM3NGFkZDEnLCAnIzQ1NzViNCcsICcjMzEzNjk1J10sXG4gICAgQnJCRzogWycjNTQzMDA1JywgJyM4YzUxMGEnLCAnI2JmODEyZCcsICcjZGZjMjdkJywgJyNmNmU4YzMnLCAnI2Y1ZjVmNScsICcjYzdlYWU1JywgJyM4MGNkYzEnLCAnIzM1OTc4ZicsICcjMDE2NjVlJywgJyMwMDNjMzAnXSxcbiAgICBSZEd5OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZmZmZmZmJywgJyNlMGUwZTAnLCAnI2JhYmFiYScsICcjODc4Nzg3JywgJyM0ZDRkNGQnLCAnIzFhMWExYSddLFxuICAgIFB1T3I6IFsnIzdmM2IwOCcsICcjYjM1ODA2JywgJyNlMDgyMTQnLCAnI2ZkYjg2MycsICcjZmVlMGI2JywgJyNmN2Y3ZjcnLCAnI2Q4ZGFlYicsICcjYjJhYmQyJywgJyM4MDczYWMnLCAnIzU0Mjc4OCcsICcjMmQwMDRiJ10sXG5cbiAgICAvLyBxdWFsaXRhdGl2ZVxuICAgIFNldDI6IFsnIzY2YzJhNScsICcjZmM4ZDYyJywgJyM4ZGEwY2InLCAnI2U3OGFjMycsICcjYTZkODU0JywgJyNmZmQ5MmYnLCAnI2U1YzQ5NCcsICcjYjNiM2IzJ10sXG4gICAgQWNjZW50OiBbJyM3ZmM5N2YnLCAnI2JlYWVkNCcsICcjZmRjMDg2JywgJyNmZmZmOTknLCAnIzM4NmNiMCcsICcjZjAwMjdmJywgJyNiZjViMTcnLCAnIzY2NjY2NiddLFxuICAgIFNldDE6IFsnI2U0MWExYycsICcjMzc3ZWI4JywgJyM0ZGFmNGEnLCAnIzk4NGVhMycsICcjZmY3ZjAwJywgJyNmZmZmMzMnLCAnI2E2NTYyOCcsICcjZjc4MWJmJywgJyM5OTk5OTknXSxcbiAgICBTZXQzOiBbJyM4ZGQzYzcnLCAnI2ZmZmZiMycsICcjYmViYWRhJywgJyNmYjgwNzInLCAnIzgwYjFkMycsICcjZmRiNDYyJywgJyNiM2RlNjknLCAnI2ZjY2RlNScsICcjZDlkOWQ5JywgJyNiYzgwYmQnLCAnI2NjZWJjNScsICcjZmZlZDZmJ10sXG4gICAgRGFyazI6IFsnIzFiOWU3NycsICcjZDk1ZjAyJywgJyM3NTcwYjMnLCAnI2U3Mjk4YScsICcjNjZhNjFlJywgJyNlNmFiMDInLCAnI2E2NzYxZCcsICcjNjY2NjY2J10sXG4gICAgUGFpcmVkOiBbJyNhNmNlZTMnLCAnIzFmNzhiNCcsICcjYjJkZjhhJywgJyMzM2EwMmMnLCAnI2ZiOWE5OScsICcjZTMxYTFjJywgJyNmZGJmNmYnLCAnI2ZmN2YwMCcsICcjY2FiMmQ2JywgJyM2YTNkOWEnLCAnI2ZmZmY5OScsICcjYjE1OTI4J10sXG4gICAgUGFzdGVsMjogWycjYjNlMmNkJywgJyNmZGNkYWMnLCAnI2NiZDVlOCcsICcjZjRjYWU0JywgJyNlNmY1YzknLCAnI2ZmZjJhZScsICcjZjFlMmNjJywgJyNjY2NjY2MnXSxcbiAgICBQYXN0ZWwxOiBbJyNmYmI0YWUnLCAnI2IzY2RlMycsICcjY2NlYmM1JywgJyNkZWNiZTQnLCAnI2ZlZDlhNicsICcjZmZmZmNjJywgJyNlNWQ4YmQnLCAnI2ZkZGFlYycsICcjZjJmMmYyJ11cbn07XG5cbi8vIGFkZCBsb3dlcmNhc2UgYWxpYXNlcyBmb3IgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGVzXG5mb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoY29sb3JicmV3ZXIpKSB7XG4gICAgY29sb3JicmV3ZXJba2V5LnRvTG93ZXJDYXNlKCldID0gY29sb3JicmV3ZXJba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29sb3JicmV3ZXI7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuL3NyYy9jaHJvbWEuanMnO1xuXG4vLyBmZWVsIGZyZWUgdG8gY29tbWVudCBvdXQgYW55dGhpbmcgdG8gcm9sbHVwXG4vLyBhIHNtYWxsZXIgY2hyb21hLmpzIGJ1aWx0XG5cbi8vIGlvIC0tPiBjb252ZXJ0IGNvbG9yc1xuaW1wb3J0ICcuL3NyYy9pby9jbXlrL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vY3NzL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vZ2wvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oY2cvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oZXgvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc2kvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc2wvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc3YvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9sYWIvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9sY2gvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9uYW1lZC9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL251bS9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL3JnYi9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL3RlbXAvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9va2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL29rbGNoL2luZGV4LmpzJztcblxuLy8gb3BlcmF0b3JzIC0tPiBtb2RpZnkgZXhpc3RpbmcgQ29sb3JzXG5pbXBvcnQgJy4vc3JjL29wcy9hbHBoYS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9jbGlwcGVkLmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL2Rhcmtlbi5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9nZXQuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvbHVtaW5hbmNlLmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL21peC5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9wcmVtdWx0aXBseS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9zYXR1cmF0ZS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9zZXQuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvc2hhZGUuanMnO1xuXG4vLyBpbnRlcnBvbGF0b3JzXG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9yZ2IuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvbHJnYi5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9sYWIuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvbGNoLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL251bS5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9oY2cuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvaHNpLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL2hzbC5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9oc3YuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3Ivb2tsYWIuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3Ivb2tsY2guanMnO1xuXG4vLyBnZW5lcmF0b3JzIC0tID4gY3JlYXRlIG5ldyBjb2xvcnNcbmltcG9ydCBhdmVyYWdlIGZyb20gJy4vc3JjL2dlbmVyYXRvci9hdmVyYWdlLmpzJztcbmltcG9ydCBiZXppZXIgZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2Jlemllci5qcyc7XG5pbXBvcnQgYmxlbmQgZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2JsZW5kLmpzJztcbmltcG9ydCBjdWJlaGVsaXggZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2N1YmVoZWxpeC5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4vc3JjL2dlbmVyYXRvci9taXguanMnO1xuaW1wb3J0IHJhbmRvbSBmcm9tICcuL3NyYy9nZW5lcmF0b3IvcmFuZG9tLmpzJztcbmltcG9ydCBzY2FsZSBmcm9tICcuL3NyYy9nZW5lcmF0b3Ivc2NhbGUuanMnO1xuXG4vLyBvdGhlciB1dGlsaXR5IG1ldGhvZHNcbmltcG9ydCB7IGFuYWx5emUgfSBmcm9tICcuL3NyYy91dGlscy9hbmFseXplLmpzJztcbmltcG9ydCBjb250cmFzdCBmcm9tICcuL3NyYy91dGlscy9jb250cmFzdC5qcyc7XG5pbXBvcnQgZGVsdGFFIGZyb20gJy4vc3JjL3V0aWxzL2RlbHRhLWUuanMnO1xuaW1wb3J0IGRpc3RhbmNlIGZyb20gJy4vc3JjL3V0aWxzL2Rpc3RhbmNlLmpzJztcbmltcG9ydCB7IGxpbWl0cyB9IGZyb20gJy4vc3JjL3V0aWxzL2FuYWx5emUuanMnO1xuaW1wb3J0IHZhbGlkIGZyb20gJy4vc3JjL3V0aWxzL3ZhbGlkLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuL3NyYy9pby9pbnB1dC5qcyc7XG5cbi8vIHNjYWxlXG5pbXBvcnQgc2NhbGVzIGZyb20gJy4vc3JjL3V0aWxzL3NjYWxlcy5qcyc7XG5cbi8vIGNvbG9yc1xuaW1wb3J0IGNvbG9ycyBmcm9tICcuL3NyYy9jb2xvcnMvdzNjeDExLmpzJztcbmltcG9ydCBicmV3ZXIgZnJvbSAnLi9zcmMvY29sb3JzL2NvbG9yYnJld2VyLmpzJztcblxuT2JqZWN0LmFzc2lnbihjaHJvbWEsIHtcbiAgICBhdmVyYWdlLFxuICAgIGJlemllcixcbiAgICBibGVuZCxcbiAgICBjdWJlaGVsaXgsXG4gICAgbWl4LFxuICAgIGludGVycG9sYXRlOiBtaXgsXG4gICAgcmFuZG9tLFxuICAgIHNjYWxlLFxuICAgIGFuYWx5emUsXG4gICAgY29udHJhc3QsXG4gICAgZGVsdGFFLFxuICAgIGRpc3RhbmNlLFxuICAgIGxpbWl0cyxcbiAgICB2YWxpZCxcbiAgICBzY2FsZXMsXG4gICAgaW5wdXQsXG4gICAgY29sb3JzLFxuICAgIGJyZXdlclxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNocm9tYTtcbiIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuZXhwb3J0IHZhciBNSURfQ09MT1JfU1RPUCA9ICcjRUJFRkY1Jztcbi8qKlxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBhcnJheSBvZiBjb2xvcnMgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgaW50ZXJwb2xhdGVkXG4gKiBjb2xvcnMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBzdGVwcy9sZW4gbmVlZGVkIGZvciB1c2UgaW4gVUkgZWxlbWVudHMgc3VjaCBhcyBjaGFydHMuXG4gKiBEZXJpdmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2drYS9wYWxldHRlcyAoVW5saWNlbnNlZClcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29sb3JQYWxldHRlKFxuLyoqXG4gKiBUaGUgbWFpbiBjb2xvciBjb2RlIG9yIGFycmF5IG9mIGNvZGVzXG4gKi9cbmNvbG9ycykge1xuICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxMDtcbiAgdmFyIGRpdmVyZ2luZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIHZhciBjYXRlZ29yaWNhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogZmFsc2U7XG4gIHZhciBoZXhTdGFydCA9IGNvbG9ycy5zbGljZSgpO1xuICB2YXIgaGV4RW5kID0gW107XG4gIHZhciBldmVuID0gbGVuICUgMiA9PT0gMDtcbiAgdmFyIG51bUNvbG9yc0xlZnQgPSBkaXZlcmdpbmcgPyBNYXRoLmNlaWwobGVuIC8gMikgKyAoZXZlbiA/IDEgOiAwKSA6IGxlbjtcbiAgdmFyIG51bUNvbG9yc1JpZ2h0ID0gZGl2ZXJnaW5nID8gTWF0aC5jZWlsKGxlbiAvIDIpICsgKGV2ZW4gPyAxIDogMCkgOiAwOyAvLyBJZiBvbmx5IGEgc2luZ2xlIGNvbG9yIGlzIHByb3ZpZGVkIHByZXBlbmQgdGhlIG1pZC1wb2ludCBjb2xvclxuXG4gIGlmIChoZXhTdGFydC5sZW5ndGggPT09IDEpIHtcbiAgICBoZXhTdGFydC51bnNoaWZ0KE1JRF9DT0xPUl9TVE9QKTtcbiAgfSAvLyBJZiBkaXZlcmdpbmcsIHNwbGl0IHRoZSBzdGFydCBhcnJheSBhbmQgZHVwbGljYXRlIHRoZSBtaWQgY29sb3JcblxuXG4gIGlmIChkaXZlcmdpbmcpIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIG1pZHBvaW50LCBjcmVhdGUgb25lXG4gICAgaWYgKGhleFN0YXJ0Lmxlbmd0aCA8IDMpIHtcbiAgICAgIGhleFN0YXJ0WzJdID0gaGV4U3RhcnRbMV07XG4gICAgICBoZXhTdGFydFsxXSA9IE1JRF9DT0xPUl9TVE9QO1xuICAgIH1cblxuICAgIHZhciBudW1Db2xvcnNIYWxmID0gTWF0aC5jZWlsKGhleFN0YXJ0Lmxlbmd0aCAvIDIpO1xuICAgIHZhciBjb2xvcnNMZWZ0ID0gaGV4U3RhcnQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKGluZGV4IDwgbnVtQ29sb3JzSGFsZikge1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8ga2VlcCBpdFxuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBjb2xvcnNSaWdodCA9IGhleFN0YXJ0LnJldmVyc2UoKS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPCBudW1Db2xvcnNIYWxmKSB7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBrZWVwIGl0XG4gICAgICB9XG4gICAgfSkucmV2ZXJzZSgpO1xuICAgIGhleFN0YXJ0ID0gY29sb3JzTGVmdDtcbiAgICBoZXhFbmQgPSBjb2xvcnNSaWdodDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0ZXBzKGNvbG9ycywgc3RlcHMpIHtcbiAgICBpZiAoIWNvbG9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBjb2xvcnM7XG4gICAgfVxuXG4gICAgaWYgKCFjYXRlZ29yaWNhbCkge1xuICAgICAgcmV0dXJuIGNocm9tYS5iZXppZXIoY29sb3JzKS5zY2FsZSgpLmNvcnJlY3RMaWdodG5lc3MoKS5jb2xvcnMoc3RlcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2hyb21hLnNjYWxlKGNvbG9ycykuY29sb3JzKHN0ZXBzKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3RlcHNMZWZ0ID0gY3JlYXRlU3RlcHMoaGV4U3RhcnQsIG51bUNvbG9yc0xlZnQpO1xuICB2YXIgc3RlcHNSaWdodCA9IGNyZWF0ZVN0ZXBzKGhleEVuZCwgbnVtQ29sb3JzUmlnaHQpO1xuICByZXR1cm4gKGV2ZW4gJiYgZGl2ZXJnaW5nID8gc3RlcHNMZWZ0LnNsaWNlKDAsIHN0ZXBzTGVmdC5sZW5ndGggLSAxKSA6IHN0ZXBzTGVmdCkuY29uY2F0KHN0ZXBzUmlnaHQuc2xpY2UoMSkpO1xufSIsICJmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBjb2xvclBhbGV0dGUgfSBmcm9tICcuL2NvbG9yX3BhbGV0dGUnO1xuXG52YXIgZmxhdHRlbiA9IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyKSB7XG4gIHZhciBfcmVmO1xuXG4gIHJldHVybiAoX3JlZiA9IFtdKS5jb25jYXQuYXBwbHkoX3JlZiwgX3RvQ29uc3VtYWJsZUFycmF5KGFycikpO1xufTtcblxudmFyIGV1aVBhbGV0dGUgPSBmdW5jdGlvbiBldWlQYWxldHRlKGNvbG9ycywgc3RlcHMpIHtcbiAgdmFyIGRpdmVyZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICB2YXIgY2F0ZWdvcmljYWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHRydWU7XG5cbiAgLy8gVGhpcyBmdW5jdGlvbiBhbHNvIHRyaW1zIHRoZSBmaXJzdCBjb2xvciBzbyB3aGl0ZS9ibGFjayBpcyBuZXZlciBhIGNvbG9yXG4gIGlmICghZGl2ZXJnZSAmJiBzdGVwcyA+IDEpIHtcbiAgICB2YXIgcGFsZXR0ZSA9IGNvbG9yUGFsZXR0ZShjb2xvcnMsIHN0ZXBzICsgMSk7XG4gICAgcGFsZXR0ZS5zaGlmdCgpO1xuICAgIHJldHVybiBwYWxldHRlO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9yUGFsZXR0ZShjb2xvcnMsIHN0ZXBzLCBkaXZlcmdlLCBjYXRlZ29yaWNhbCk7XG59O1xuXG5leHBvcnQgdmFyIGV1aVBhbGV0dGVDb2xvckJsaW5kID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKSB7XG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICBfcmVmMiRyb3RhdGlvbnMgPSBfcmVmMi5yb3RhdGlvbnMsXG4gICAgICByb3RhdGlvbnMgPSBfcmVmMiRyb3RhdGlvbnMgPT09IHZvaWQgMCA/IDEgOiBfcmVmMiRyb3RhdGlvbnMsXG4gICAgICBfcmVmMiRvcmRlciA9IF9yZWYyLm9yZGVyLFxuICAgICAgb3JkZXIgPSBfcmVmMiRvcmRlciA9PT0gdm9pZCAwID8gJ2FwcGVuZCcgOiBfcmVmMiRvcmRlcixcbiAgICAgIF9yZWYyJGRpcmVjdGlvbiA9IF9yZWYyLmRpcmVjdGlvbixcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWYyJGRpcmVjdGlvbiA9PT0gdm9pZCAwID8gJ2xpZ2h0ZXInIDogX3JlZjIkZGlyZWN0aW9uLFxuICAgICAgX3JlZjIkc29ydEJ5ID0gX3JlZjIuc29ydEJ5LFxuICAgICAgc29ydEJ5ID0gX3JlZjIkc29ydEJ5ID09PSB2b2lkIDAgPyAnZGVmYXVsdCcgOiBfcmVmMiRzb3J0QnksXG4gICAgICBfcmVmMiRzb3J0U2hpZnQgPSBfcmVmMi5zb3J0U2hpZnQsXG4gICAgICBzb3J0U2hpZnQgPSBfcmVmMiRzb3J0U2hpZnQgPT09IHZvaWQgMCA/ICctMTAwJyA6IF9yZWYyJHNvcnRTaGlmdDtcblxuICB2YXIgY29sb3JzID0gW107XG4gIHZhciBiYXNlID0gWycjNTRCMzk5JywgLy8gMCBncmVlblxuICAnIzYwOTJDMCcsIC8vIDEgYmx1ZVxuICAnI0QzNjA4NicsIC8vIDIgZGFyayBwaW5rXG4gICcjOTE3MEI4JywgLy8gMyBwdXJwbGVcbiAgJyNDQThFQUUnLCAvLyA0IGxpZ2h0IHBpbmtcbiAgJyNENkJGNTcnLCAvLyA1IHllbGxvd1xuICAnI0I5QTg4OCcsIC8vIDYgdGFuXG4gICcjREE4QjQ1JywgLy8gNyBvcmFuZ2VcbiAgJyNBQTY1NTYnLCAvLyA4IGJyb3duXG4gICcjRTc2NjRDJyAvLyA5IHJlZFxuICBdO1xuXG4gIGlmIChzb3J0QnkgPT09ICduYXR1cmFsJykge1xuICAgIC8vIFNvcnQgdGhlIGNvbG9ycyBiYXNlZCBvbiB0aGUgY29sb3Igd2hlZWwsIGJ1dCBzaGlmdGluZyB0aGUgdmFsdWVzIGJhc2VkIG9uIHNvcnRTaGlmdFxuICAgIGJhc2UgPSBfdG9Db25zdW1hYmxlQXJyYXkoYmFzZSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGNocm9tYShhKS5zZXQoJ2hzbC5oJywgc29ydFNoaWZ0KS5oc2woKVswXSAtIGNocm9tYShiKS5zZXQoJ2hzbC5oJywgc29ydFNoaWZ0KS5oc2woKVswXTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyb3RhdGlvbnMgPiAxKSB7XG4gICAgdmFyIHBhbGV0dGVzID0gYmFzZS5tYXAoZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGRhcmtlc3QgYW5kIGxpZ2h0ZXN0IHZlcnNpb25zIG9mIGVhY2ggY29sb3IgdXNpbmcgYmxhY2sgYW5kIHdoaXRlXG4gICAgICB2YXIgcGFsZXR0ZSA9IGNvbG9yUGFsZXR0ZShbJ2JsYWNrJywgY29sb3IsICd3aGl0ZSddLCA1LCBmYWxzZSwgdHJ1ZSk7IC8vIFRoZW4gcmVtb3ZpbmcgdGhlIGV4dHJlbWVzXG5cbiAgICAgIHBhbGV0dGUucG9wKCk7XG4gICAgICBwYWxldHRlLnNoaWZ0KCk7XG5cbiAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2xpZ2h0ZXInOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUoW3BhbGV0dGVbMV0sIHBhbGV0dGVbMl1dLCByb3RhdGlvbnMsIGZhbHNlLCB0cnVlKTtcblxuICAgICAgICBjYXNlICdkYXJrZXInOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUoW3BhbGV0dGVbMV0sIHBhbGV0dGVbMF1dLCByb3RhdGlvbnMsIGZhbHNlLCB0cnVlKTtcblxuICAgICAgICBjYXNlICdib3RoJzpcbiAgICAgICAgICByZXR1cm4gY29sb3JQYWxldHRlKHBhbGV0dGUsIHJvdGF0aW9ucywgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG9yZGVyID09PSAnZ3JvdXAnKSB7XG4gICAgICBjb2xvcnMgPSBmbGF0dGVuKHBhbGV0dGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgX2NvbG9ycztcblxuICAgICAgICB2YXIgcm90YXRpb24gPSBwYWxldHRlcy5tYXAoZnVuY3Rpb24gKHBhbGV0dGUpIHtcbiAgICAgICAgICByZXR1cm4gcGFsZXR0ZVtpXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgKF9jb2xvcnMgPSBjb2xvcnMpLnB1c2guYXBwbHkoX2NvbG9ycywgX3RvQ29uc3VtYWJsZUFycmF5KHJvdGF0aW9uKSk7XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdGF0aW9uczsgaSsrKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb2xvcnMgPSBiYXNlO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9ycztcbn07XG4vKipcbiAqIENvbG9yIGJsaW5kIHBhbGV0dGUgd2l0aCB0ZXh0IGlzIG1lYW50IGZvciB1c2Ugd2hlbiB0ZXh0IGlzIGFwcGxpZWQgb24gdG9wIG9mIHRoZSBjb2xvci5cbiAqIEl0IGluY3JlYXNlcyB0aGUgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IgdG8gZ2l2ZSB0aGUgdGV4dCBtb3JlIGNvbnRyYXN0LlxuICovXG5cbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0ID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0KCkge1xuICB2YXIgcGFsZXR0ZVByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIG9yaWdpbmFsUGFsZXR0ZSA9IGV1aVBhbGV0dGVDb2xvckJsaW5kKHBhbGV0dGVQcm9wcyk7XG4gIHZhciBuZXdQYWxldHRlID0gb3JpZ2luYWxQYWxldHRlLm1hcChmdW5jdGlvbiAoY29sb3IpIHtcbiAgICByZXR1cm4gY2hyb21hKGNvbG9yKS5icmlnaHRlbigwLjUpLmhleCgpO1xuICB9KTtcbiAgcmV0dXJuIG5ld1BhbGV0dGU7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlRm9yTGlnaHRCYWNrZ3JvdW5kID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUZvckxpZ2h0QmFja2dyb3VuZCgpIHtcbiAgcmV0dXJuIFsnIzAwNkJCNCcsICcjMDE3RDczJywgJyNGNUE3MDAnLCAnI0JEMjcxRScsICcjREQwQTczJ107XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlRm9yRGFya0JhY2tncm91bmQgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yRGFya0JhY2tncm91bmQoKSB7XG4gIHJldHVybiBbJyMxQkE5RjUnLCAnIzdERTJEMScsICcjRjk5MEMwJywgJyNGNjYnLCAnI0ZGQ0U3QSddO1xufTtcbnZhciBwb3NpdGl2ZUNvbG9yID0gJyMyMDkyODAnO1xudmFyIG5lZ2F0aXZlQ29sb3IgPSAnI0NDNTY0Mic7XG52YXIgbGlnaHROZWdhdGl2ZUNvbG9yID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs5XTtcbnZhciBjb29sQXJyYXkgPSBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVsxXSwgJyM2MDkyQzAnXTtcbnZhciB3YXJtQXJyYXkgPSBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs3XSwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs5XV07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JTdGF0dXMgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yU3RhdHVzKHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbcG9zaXRpdmVDb2xvcl07XG4gIH1cblxuICBpZiAoc3RlcHMgPD0gMykge1xuICAgIHJldHVybiBldWlQYWxldHRlKFtwb3NpdGl2ZUNvbG9yLCBldWlQYWxldHRlQ29sb3JCbGluZCgpWzVdLCBuZWdhdGl2ZUNvbG9yXSwgc3RlcHMsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW3Bvc2l0aXZlQ29sb3IsIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbMF0sIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbNV0sIGxpZ2h0TmVnYXRpdmVDb2xvciwgbmVnYXRpdmVDb2xvcl0sIHN0ZXBzLCB0cnVlKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JUZW1wZXJhdHVyZSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVGb3JUZW1wZXJhdHVyZShzdGVwcykge1xuICB2YXIgY29vbHMgPSBjb2xvclBhbGV0dGUoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjb29sQXJyYXkuc2xpY2UoKS5yZXZlcnNlKCkpLCBbJyNFQkVGRjUnXSksIDMpO1xuICB2YXIgd2FybXMgPSBjb2xvclBhbGV0dGUoWycjRjRGM0RCJ10uY29uY2F0KHdhcm1BcnJheSksIDMpO1xuXG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbY29vbHNbMF1dO1xuICB9IGVsc2UgaWYgKHN0ZXBzIDw9IDMpIHtcbiAgICByZXR1cm4gZXVpUGFsZXR0ZShbY29vbHNbMF0sIGxpZ2h0TmVnYXRpdmVDb2xvcl0sIHN0ZXBzLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBldWlQYWxldHRlKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoY29vbHMpLCBfdG9Db25zdW1hYmxlQXJyYXkod2FybXMpKSwgc3RlcHMsIHRydWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvbXBsaW1lbnRhcnkgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29tcGxpbWVudGFyeShzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMV1dO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMV0sIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbN11dLCBzdGVwcywgdHJ1ZSk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlTmVnYXRpdmUgPSBmdW5jdGlvbiBldWlQYWxldHRlTmVnYXRpdmUoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtsaWdodE5lZ2F0aXZlQ29sb3JdO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZScsIG5lZ2F0aXZlQ29sb3JdLCBzdGVwcyk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlUG9zaXRpdmUgPSBmdW5jdGlvbiBldWlQYWxldHRlUG9zaXRpdmUoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtldWlQYWxldHRlQ29sb3JCbGluZCgpWzBdXTtcbiAgfVxuXG4gIHJldHVybiBldWlQYWxldHRlKFsnd2hpdGUnLCBwb3NpdGl2ZUNvbG9yXSwgc3RlcHMpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvb2wgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29vbChzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2Nvb2xBcnJheVsxXV07XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbJ3doaXRlJ10uY29uY2F0KGNvb2xBcnJheSksIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVXYXJtID0gZnVuY3Rpb24gZXVpUGFsZXR0ZVdhcm0oc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtsaWdodE5lZ2F0aXZlQ29sb3JdO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWycjRkJGQkRDJ10uY29uY2F0KHdhcm1BcnJheSksIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVHcmF5ID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUdyYXkoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFsnIzk4YTJiMyddO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZScsICcjZDNkYWU2JywgJyM5OGEyYjMnLCAnIzY5NzA3ZCcsICcjMzQzNzQxJ10sIHN0ZXBzLCBmYWxzZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgaXNWYWxpZEhleCB9IGZyb20gJy4vaXNfdmFsaWRfaGV4JztcblxudmFyIGluT3JpZ2luYWxGb3JtYXQgPSBmdW5jdGlvbiBpbk9yaWdpbmFsRm9ybWF0KG9yaWdpbmFsQ29sb3IsIG5ld0NvbG9yKSB7XG4gIHJldHVybiBpc1ZhbGlkSGV4KG9yaWdpbmFsQ29sb3IpID8gbmV3Q29sb3IuaGV4KCkgOiBuZXdDb2xvci5jc3MoKTtcbn07XG4vKipcbiAqIE1ha2VzIGEgY29sb3IgbW9yZSB0cmFuc3BhcmVudC5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbHBoYSAtIGFscGhhIGNoYW5uZWwgdmFsdWUuIEZyb20gMC0xLlxuICovXG5cblxuZXhwb3J0IHZhciB0cmFuc3BhcmVudGl6ZSA9IGZ1bmN0aW9uIHRyYW5zcGFyZW50aXplKGNvbG9yLCBhbHBoYSkge1xuICByZXR1cm4gY2hyb21hKGNvbG9yKS5hbHBoYShhbHBoYSkuY3NzKCk7XG59O1xuLyoqXG4gKiBNaXhlcyBhIHByb3ZpZGVkIGNvbG9yIHdpdGggd2hpdGUuXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCB3aGl0ZVxuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSB3aGl0ZS5cbiAqL1xuXG5leHBvcnQgdmFyIHRpbnQgPSBmdW5jdGlvbiB0aW50KGNvbG9yLCByYXRpbykge1xuICB2YXIgdGludCA9IGNocm9tYS5taXgoY29sb3IsICcjZmZmJywgcmF0aW8sICdyZ2InKTtcbiAgcmV0dXJuIGluT3JpZ2luYWxGb3JtYXQoY29sb3IsIHRpbnQpO1xufTtcbi8qKlxuICogTWl4ZXMgYSBwcm92aWRlZCBjb2xvciB3aXRoIGJsYWNrLlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWl4IHdpdGggYmxhY2tcbiAqIEBwYXJhbSByYXRpbyAtIE1peCB3ZWlnaHQuIEZyb20gMC0xLiBMYXJnZXIgdmFsdWUgaW5kaWNhdGVzIG1vcmUgYmxhY2suXG4gKi9cblxuZXhwb3J0IHZhciBzaGFkZSA9IGZ1bmN0aW9uIHNoYWRlKGNvbG9yLCByYXRpbykge1xuICB2YXIgc2hhZGUgPSBjaHJvbWEubWl4KGNvbG9yLCAnIzAwMCcsIHJhdGlvLCAncmdiJyk7XG4gIHJldHVybiBpbk9yaWdpbmFsRm9ybWF0KGNvbG9yLCBzaGFkZSk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSB0aW50ZWQgY29sb3IgZm9yIGxpZ2h0IG1vZGUgYW5kIHNoYWRlZCBjb2xvciBmb3IgZGFyayBtb2RlXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCB3aGl0ZVxuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSB3aGl0ZS5cbiAqIEBwYXJhbSBjb2xvck1vZGUgLSBMaWdodCBvciBkYXJrIG9ubHlcbiAqL1xuXG5leHBvcnQgdmFyIHRpbnRPclNoYWRlID0gZnVuY3Rpb24gdGludE9yU2hhZGUoY29sb3IsIHJhdGlvLCBjb2xvck1vZGUpIHtcbiAgcmV0dXJuIGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gc2hhZGUoY29sb3IsIHJhdGlvKSA6IHRpbnQoY29sb3IsIHJhdGlvKTtcbn07XG4vKipcbiAqIFJldHVybnMgdGhlIHNoYWRlZCBjb2xvciBmb3IgbGlnaHQgbW9kZSBhbmQgdGludGVkIGNvbG9yIGZvciBkYXJrIG1vZGVcbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1peCB3aXRoIHdoaXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBNaXggd2VpZ2h0LiBGcm9tIDAtMS4gTGFyZ2VyIHZhbHVlIGluZGljYXRlcyBtb3JlIHdoaXRlLlxuICogQHBhcmFtIGNvbG9yTW9kZSAtIExpZ2h0IG9yIGRhcmsgb25seVxuICovXG5cbmV4cG9ydCB2YXIgc2hhZGVPclRpbnQgPSBmdW5jdGlvbiBzaGFkZU9yVGludChjb2xvciwgcmF0aW8sIGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyB0aW50KGNvbG9yLCByYXRpbykgOiBzaGFkZShjb2xvciwgcmF0aW8pO1xufTtcbi8qKlxuICogSW5jcmVhc2VzIHRoZSBzYXR1cmF0aW9uIG9mIGEgY29sb3IgYnkgbWFuaXB1bGF0aW5nIHRoZSBoc2wgc2F0dXJhdGlvbi5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEuXG4gKi9cblxuZXhwb3J0IHZhciBzYXR1cmF0ZSA9IGZ1bmN0aW9uIHNhdHVyYXRlKGNvbG9yLCBhbW91bnQpIHtcbiAgdmFyIHNhdHVyYXRlID0gY2hyb21hKGNvbG9yKS5zZXQoJ2hzbC5zJywgXCIrXCIuY29uY2F0KGFtb3VudCkpO1xuICByZXR1cm4gaW5PcmlnaW5hbEZvcm1hdChjb2xvciwgc2F0dXJhdGUpO1xufTtcbi8qKlxuICogRGVjcmVhc2VzIHRoZSBzYXR1cmF0aW9uIG9mIGEgY29sb3IgYnkgbWFuaXB1bGF0aW5nIHRoZSBoc2wgc2F0dXJhdGlvbi5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEuXG4gKi9cblxuZXhwb3J0IHZhciBkZXNhdHVyYXRlID0gZnVuY3Rpb24gZGVzYXR1cmF0ZShjb2xvciwgYW1vdW50KSB7XG4gIHZhciBkZXNhdHVyYXRlID0gY2hyb21hKGNvbG9yKS5zZXQoJ2hzbC5zJywgXCItXCIuY29uY2F0KGFtb3VudCkpO1xuICByZXR1cm4gaW5PcmlnaW5hbEZvcm1hdChjb2xvciwgZGVzYXR1cmF0ZSk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBsaWdodG5lc3MgdmFsdWUgb2YgYSBjb2xvci4gMC0xMDBcbiAqIEBwYXJhbSBjb2xvclxuICovXG5cbmV4cG9ydCB2YXIgbGlnaHRuZXNzID0gZnVuY3Rpb24gbGlnaHRuZXNzKGNvbG9yKSB7XG4gIHJldHVybiBjaHJvbWEoY29sb3IpLmdldCgnaHNsLmwnKSAqIDEwMDtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IHNoYWRlLCB0aW50LCBsaWdodG5lc3MgYXMgZ2V0TGlnaHRuZXNzIH0gZnJvbSAnLi9tYW5pcHVsYXRpb24nO1xuaW1wb3J0IHsgZ2V0T24gfSBmcm9tICcuLi90aGVtZS91dGlscyc7XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgY29sb3IgdGhhdCBtZWV0cyBvciBleGNlZWRzIFdDQUcgbGV2ZWwgQUFcbiAqIEBwYXJhbSBmb3JlZ3JvdW5kIC0gQ29sb3IgdG8gbWFuaXB1bGF0ZVxuICogQHBhcmFtIHJhdGlvIC0gQW1vdW50IHRvIGNoYW5nZSBpbiBhYnNvbHV0ZSB0ZXJtcy4gMC0xMC5cbiAqICpcbiAqIEBwYXJhbSB0aGVtZU9yQmFja2dyb3VuZCAtIENvbG9yIHRvIHVzZSBhcyB0aGUgY29udHJhc3QgYmFzaXMgb3IganVzdCBwYXNzIEV1aVRoZW1lXG4gKi9cblxuZXhwb3J0IHZhciBtYWtlSGlnaENvbnRyYXN0Q29sb3IgPSBmdW5jdGlvbiBtYWtlSGlnaENvbnRyYXN0Q29sb3IoX2ZvcmVncm91bmQpIHtcbiAgdmFyIHJhdGlvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiA0Ljg1O1xuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lT3JCYWNrZ3JvdW5kKSB7XG4gICAgdmFyIF9nZXRPbjtcblxuICAgIHZhciBmb3JlZ3JvdW5kID0gX3R5cGVvZih0aGVtZU9yQmFja2dyb3VuZCkgPT09ICdvYmplY3QnID8gKF9nZXRPbiA9IGdldE9uKHRoZW1lT3JCYWNrZ3JvdW5kLCBfZm9yZWdyb3VuZCkpICE9PSBudWxsICYmIF9nZXRPbiAhPT0gdm9pZCAwID8gX2dldE9uIDogX2ZvcmVncm91bmQgOiBfZm9yZWdyb3VuZDtcbiAgICB2YXIgYmFja2dyb3VuZCA9IF90eXBlb2YodGhlbWVPckJhY2tncm91bmQpID09PSAnb2JqZWN0JyA/IHRoZW1lT3JCYWNrZ3JvdW5kLmNvbG9ycy5ib2R5IDogdGhlbWVPckJhY2tncm91bmQ7XG5cbiAgICBpZiAoY2hyb21hKGZvcmVncm91bmQpLmFscGhhKCkgPCAxIHx8IGNocm9tYShiYWNrZ3JvdW5kKS5hbHBoYSgpIDwgMSkge1xuICAgICAgY29uc29sZS53YXJuKFwiQ29udHJhc3QgY2Fubm90IGJlIGFjY3VyYXRlbHkgY2FsY3VsYXRlZCB3aGVuIGNvbG9ycyBoYXZlIGFscGhhIGNoYW5uZWwgb3BhY2l0eS4gTWFrZSBzdXJlIHRoZSBwcm92aWRlZCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyBoYXZlIG5vIHRyYW5zcGFyZW5jeTpcXG5cXG5Gb3JlZ3JvdW5kOiBcIi5jb25jYXQoZm9yZWdyb3VuZCwgXCJcXG5CYWNrZ3JvdW5kOiBcIikuY29uY2F0KGJhY2tncm91bmQpKTtcbiAgICB9XG5cbiAgICB2YXIgY29udHJhc3QgPSBjaHJvbWEuY29udHJhc3QoZm9yZWdyb3VuZCwgYmFja2dyb3VuZCk7IC8vIERldGVybWluZSB0aGUgbGlnaHRuZXNzIGZhY3RvciBvZiB0aGUgYmFja2dyb3VuZCBjb2xvciBmaXJzdCB0b1xuICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRvIHNoYWRlIG9yIHRpbnQgdGhlIGZvcmVncm91bmQuXG5cbiAgICB2YXIgYnJpZ2h0bmVzcyA9IGdldExpZ2h0bmVzcyhiYWNrZ3JvdW5kKTtcbiAgICB2YXIgaGlnaENvbnRyYXN0VGV4dENvbG9yID0gZm9yZWdyb3VuZDtcblxuICAgIHdoaWxlIChjb250cmFzdCA8IHJhdGlvKSB7XG4gICAgICBpZiAoYnJpZ2h0bmVzcyA+IDUwKSB7XG4gICAgICAgIGhpZ2hDb250cmFzdFRleHRDb2xvciA9IHNoYWRlKGhpZ2hDb250cmFzdFRleHRDb2xvciwgMC4wNSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdoQ29udHJhc3RUZXh0Q29sb3IgPSB0aW50KGhpZ2hDb250cmFzdFRleHRDb2xvciwgMC4wNSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRyYXN0ID0gY2hyb21hLmNvbnRyYXN0KGhpZ2hDb250cmFzdFRleHRDb2xvciwgYmFja2dyb3VuZCk7XG4gICAgICB2YXIgbGlnaHRuZXNzID0gZ2V0TGlnaHRuZXNzKGhpZ2hDb250cmFzdFRleHRDb2xvcik7XG5cbiAgICAgIGlmIChsaWdodG5lc3MgPCA1KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSGlnaCBlbm91Z2ggY29udHJhc3QgY291bGQgbm90IGJlIGRldGVybWluZWQuIE1vc3QgbGlrZWx5IHlvdXIgYmFja2dyb3VuZCBjb2xvciBkb2VzIG5vdCBhZGp1c3QgZm9yIGxpZ2h0IG1vZGUuJyk7XG4gICAgICAgIHJldHVybiBoaWdoQ29udHJhc3RUZXh0Q29sb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChsaWdodG5lc3MgPiA5NSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0hpZ2ggZW5vdWdoIGNvbnRyYXN0IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLiBNb3N0IGxpa2VseSB5b3VyIGJhY2tncm91bmQgY29sb3IgZG9lcyBub3QgYWRqdXN0IGZvciBkYXJrIG1vZGUuJyk7XG4gICAgICAgIHJldHVybiBoaWdoQ29udHJhc3RUZXh0Q29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNocm9tYShoaWdoQ29udHJhc3RUZXh0Q29sb3IpLmhleCgpO1xuICB9O1xufTtcbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBjb2xvciB3aXRoIGluY3JlYXNlZCBjb250cmFzdFxuICogRGlzYWJsZWQgY29udGVudCBvbmx5IG5lZWRzIGEgY29udHJhc3Qgb2YgYXQgbGVhc3QgMiBiZWNhdXNlIHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIGF2YWlsYWJsZVxuICogQHBhcmFtIGZvcmVncm91bmQgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEwLlxuICogKlxuICogQHBhcmFtIHRoZW1lT3JCYWNrZ3JvdW5kIC0gQ29sb3IgdG8gdXNlIGFzIHRoZSBjb250cmFzdCBiYXNpc1xuICovXG5cbmV4cG9ydCB2YXIgbWFrZURpc2FibGVkQ29udHJhc3RDb2xvciA9IGZ1bmN0aW9uIG1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IoY29sb3IpIHtcbiAgdmFyIHJhdGlvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAyO1xuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lT3JCYWNrZ3JvdW5kKSB7XG4gICAgcmV0dXJuIG1ha2VIaWdoQ29udHJhc3RDb2xvcihjb2xvciwgcmF0aW8pKHRoZW1lT3JCYWNrZ3JvdW5kKTtcbiAgfTtcbn07IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IG1ha2VIaWdoQ29udHJhc3RDb2xvciwgbWFrZURpc2FibGVkQ29udHJhc3RDb2xvciB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yL2NvbnRyYXN0JztcblxuLypcbiAqIExJR0hUIFRIRU1FXG4gKiBPbmx5IHNwbGl0IHVwIGluIHRoZSBsaWdodCB0aGVtZSB0byBhY2Nlc3MgdGhlIGtleXMgYnkgc2VjdGlvbiBpbiB0aGUgZG9jc1xuICovXG5leHBvcnQgdmFyIGJyYW5kX2NvbG9ycyA9IHtcbiAgcHJpbWFyeTogJyMwN0MnLFxuICBhY2NlbnQ6ICcjRjA0RTk4JyxcbiAgc3VjY2VzczogJyMwMEJGQjMnLFxuICB3YXJuaW5nOiAnI0ZFQzUxNCcsXG4gIGRhbmdlcjogJyNCRDI3MUUnXG59O1xuZXhwb3J0IHZhciBicmFuZF90ZXh0X2NvbG9ycyA9IHtcbiAgcHJpbWFyeVRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLnByaW1hcnknKSksXG4gIGFjY2VudFRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLmFjY2VudCcpKSxcbiAgc3VjY2Vzc1RleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLnN1Y2Nlc3MnKSksXG4gIHdhcm5pbmdUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy53YXJuaW5nJykpLFxuICBkYW5nZXJUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kYW5nZXInKSlcbn07XG5leHBvcnQgdmFyIHNoYWRlX2NvbG9ycyA9IHtcbiAgZW1wdHlTaGFkZTogJyNGRkYnLFxuICBsaWdodGVzdFNoYWRlOiAnI0YxRjRGQScsXG4gIGxpZ2h0U2hhZGU6ICcjRDNEQUU2JyxcbiAgbWVkaXVtU2hhZGU6ICcjOThBMkIzJyxcbiAgZGFya1NoYWRlOiAnIzY5NzA3RCcsXG4gIGRhcmtlc3RTaGFkZTogJyMzNDM3NDEnLFxuICBmdWxsU2hhZGU6ICcjMDAwJ1xufTtcbmV4cG9ydCB2YXIgc3BlY2lhbF9jb2xvcnMgPSB7XG4gIGJvZHk6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMSksXG4gICAgICAgIGxpZ2h0ZXN0U2hhZGUgPSBfcmVmMlswXTtcblxuICAgIHJldHVybiB0aW50KGxpZ2h0ZXN0U2hhZGUsIDAuNCk7XG4gIH0sIFsnY29sb3JzLmxpZ2h0ZXN0U2hhZGUnXSksXG4gIGhpZ2hsaWdodDogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgdmFyIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDEpLFxuICAgICAgICB3YXJuaW5nID0gX3JlZjRbMF07XG5cbiAgICByZXR1cm4gdGludCh3YXJuaW5nLCAwLjkpO1xuICB9LCBbJ2NvbG9ycy53YXJuaW5nJ10pLFxuICBkaXNhYmxlZDogJyNBQkI0QzQnLFxuICBkaXNhYmxlZFRleHQ6IGNvbXB1dGVkKG1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kaXNhYmxlZCcpKSxcbiAgc2hhZG93OiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICB2YXIgY29sb3JzID0gX3JlZjUuY29sb3JzO1xuICAgIHJldHVybiBjb2xvcnMuaW5rO1xuICB9KVxufTtcbmV4cG9ydCB2YXIgdGV4dF9jb2xvcnMgPSB7XG4gIHRleHQ6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNikge1xuICAgIHZhciBfcmVmNyA9IF9zbGljZWRUb0FycmF5KF9yZWY2LCAxKSxcbiAgICAgICAgZGFya2VzdFNoYWRlID0gX3JlZjdbMF07XG5cbiAgICByZXR1cm4gZGFya2VzdFNoYWRlO1xuICB9LCBbJ2NvbG9ycy5kYXJrZXN0U2hhZGUnXSksXG4gIHRpdGxlOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjgpIHtcbiAgICB2YXIgX3JlZjkgPSBfc2xpY2VkVG9BcnJheShfcmVmOCwgMSksXG4gICAgICAgIHRleHQgPSBfcmVmOVswXTtcblxuICAgIHJldHVybiBzaGFkZSh0ZXh0LCAwLjUpO1xuICB9LCBbJ2NvbG9ycy50ZXh0J10pLFxuICBzdWJkdWVkVGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMuZGFya1NoYWRlJykpLFxuICBsaW5rOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjEwKSB7XG4gICAgdmFyIF9yZWYxMSA9IF9zbGljZWRUb0FycmF5KF9yZWYxMCwgMSksXG4gICAgICAgIHByaW1hcnlUZXh0ID0gX3JlZjExWzBdO1xuXG4gICAgcmV0dXJuIHByaW1hcnlUZXh0O1xuICB9LCBbJ2NvbG9ycy5wcmltYXJ5VGV4dCddKVxufTtcbmV4cG9ydCB2YXIgbGlnaHRfY29sb3JzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBicmFuZF9jb2xvcnMpLCBzaGFkZV9jb2xvcnMpLCBzcGVjaWFsX2NvbG9ycyksIGJyYW5kX3RleHRfY29sb3JzKSwgdGV4dF9jb2xvcnMpO1xuLypcbiAqIERBUksgVEhFTUVcbiAqL1xuXG5leHBvcnQgdmFyIGRhcmtfc2hhZGVzID0ge1xuICBlbXB0eVNoYWRlOiAnIzFEMUUyNCcsXG4gIGxpZ2h0ZXN0U2hhZGU6ICcjMjUyNjJFJyxcbiAgbGlnaHRTaGFkZTogJyMzNDM3NDEnLFxuICBtZWRpdW1TaGFkZTogJyM1MzU5NjYnLFxuICBkYXJrU2hhZGU6ICcjOThBMkIzJyxcbiAgZGFya2VzdFNoYWRlOiAnI0Q0REFFNScsXG4gIGZ1bGxTaGFkZTogJyNGRkYnXG59O1xuZXhwb3J0IHZhciBkYXJrX2NvbG9yc19hbXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gIC8vIEJyYW5kXG4gIHByaW1hcnk6ICcjMzZBMkVGJyxcbiAgYWNjZW50OiAnI0Y2OEZCRScsXG4gIHN1Y2Nlc3M6ICcjN0RERUQ4JyxcbiAgd2FybmluZzogJyNGM0QzNzEnLFxuICBkYW5nZXI6ICcjRjg2QjYzJ1xufSwgZGFya19zaGFkZXMpLCB7fSwge1xuICAvLyBTcGVjaWFsXG4gIGJvZHk6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgICB2YXIgX3JlZjEzID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEyLCAxKSxcbiAgICAgICAgbGlnaHRlc3RTaGFkZSA9IF9yZWYxM1swXTtcblxuICAgIHJldHVybiBzaGFkZShsaWdodGVzdFNoYWRlLCAwLjQ1KTtcbiAgfSwgWydjb2xvcnMubGlnaHRlc3RTaGFkZSddKSxcbiAgaGlnaGxpZ2h0OiAnIzJFMkQyNScsXG4gIGRpc2FibGVkOiAnIzUxNTc2MScsXG4gIGRpc2FibGVkVGV4dDogY29tcHV0ZWQobWFrZURpc2FibGVkQ29udHJhc3RDb2xvcignY29sb3JzLmRpc2FibGVkJykpLFxuICBzaGFkb3c6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTQpIHtcbiAgICB2YXIgY29sb3JzID0gX3JlZjE0LmNvbG9ycztcbiAgICByZXR1cm4gY29sb3JzLmluaztcbiAgfSlcbn0sIGJyYW5kX3RleHRfY29sb3JzKSwge30sIHtcbiAgLy8gVGV4dFxuICB0ZXh0OiAnI0RGRTVFRicsXG4gIHRpdGxlOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjE1KSB7XG4gICAgdmFyIF9yZWYxNiA9IF9zbGljZWRUb0FycmF5KF9yZWYxNSwgMSksXG4gICAgICAgIHRleHQgPSBfcmVmMTZbMF07XG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfSwgWydjb2xvcnMudGV4dCddKSxcbiAgc3ViZHVlZFRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLm1lZGl1bVNoYWRlJykpLFxuICBsaW5rOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjE3KSB7XG4gICAgdmFyIF9yZWYxOCA9IF9zbGljZWRUb0FycmF5KF9yZWYxNywgMSksXG4gICAgICAgIHByaW1hcnlUZXh0ID0gX3JlZjE4WzBdO1xuXG4gICAgcmV0dXJuIHByaW1hcnlUZXh0O1xuICB9LCBbJ2NvbG9ycy5wcmltYXJ5VGV4dCddKVxufSk7XG4vKlxuICogRlVMTFxuICovXG5cbmV4cG9ydCB2YXIgY29sb3JzID0ge1xuICBnaG9zdDogJyNGRkYnLFxuICBpbms6ICcjMDAwJyxcbiAgTElHSFQ6IGxpZ2h0X2NvbG9ycyxcbiAgREFSSzogZGFya19jb2xvcnNfYW1zXG59OyIsICJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGFuaW1hdGlvbl9zcGVlZCA9IHtcbiAgZXh0cmFGYXN0OiAnOTBtcycsXG4gIGZhc3Q6ICcxNTBtcycsXG4gIG5vcm1hbDogJzI1MG1zJyxcbiAgc2xvdzogJzM1MG1zJyxcbiAgZXh0cmFTbG93OiAnNTAwbXMnXG59O1xuZXhwb3J0IHZhciBhbmltYXRpb25fZWFzZSA9IHtcbiAgYm91bmNlOiAnY3ViaWMtYmV6aWVyKC4zNCwgMS42MSwgLjcsIDEpJyxcbiAgcmVzaXN0YW5jZTogJ2N1YmljLWJlemllciguNjk0LCAuMDQ4MiwgLjMzNSwgMSknXG59O1xuZXhwb3J0IHZhciBhbmltYXRpb24gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFuaW1hdGlvbl9zcGVlZCksIGFuaW1hdGlvbl9lYXNlKTsiLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb21tb24nO1xuLyoqXG4gKiBFVUkgdXRpbGl6ZXMgbG9naWNhbCBDU1MgcHJvcGVydGllcyB0byBlbmFibGUgZGlyZWN0aW9uYWwgd3JpdGluZy1tb2Rlcy5cbiAqIFRvIGVuY291cmFnZSB1c2Ugb2YgbG9naWNhbCBwcm9wZXJ0aWVzLCB3ZSBwcm92aWRlIGEgZmV3IGhlbHBlciB1dGlsaXRpZXMgdG9cbiAqIGNvbnZlcnQgY2VydGFpbiBkaXJlY3Rpb25hbCBwcm9wZXJ0aWVzIHRvIGxvZ2ljYWwgcHJvcGVydGllcy5cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9DU1NfTG9naWNhbF9Qcm9wZXJ0aWVzXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsU2lkZSA9IHtcbiAgbGVmdDogJ2lubGluZS1zdGFydCcsXG4gIHJpZ2h0OiAnaW5saW5lLWVuZCcsXG4gIHRvcDogJ2Jsb2NrLXN0YXJ0JyxcbiAgYm90dG9tOiAnYmxvY2stZW5kJyxcbiAgaG9yaXpvbnRhbDogJ2lubGluZScsXG4gIHZlcnRpY2FsOiAnYmxvY2snXG59O1xuZXhwb3J0IHZhciBMT0dJQ0FMX1NJREVTID0ga2V5c09mKGxvZ2ljYWxTaWRlKTtcbnZhciBsb2dpY2FsTWFyZ2lucyA9IHtcbiAgJ21hcmdpbi1sZWZ0JzogJ21hcmdpbi1pbmxpbmUtc3RhcnQnLFxuICAnbWFyZ2luLXJpZ2h0JzogJ21hcmdpbi1pbmxpbmUtZW5kJyxcbiAgJ21hcmdpbi10b3AnOiAnbWFyZ2luLWJsb2NrLXN0YXJ0JyxcbiAgJ21hcmdpbi1ib3R0b20nOiAnbWFyZ2luLWJsb2NrLWVuZCcsXG4gICdtYXJnaW4taG9yaXpvbnRhbCc6ICdtYXJnaW4taW5saW5lJyxcbiAgJ21hcmdpbi12ZXJ0aWNhbCc6ICdtYXJnaW4tYmxvY2snXG59O1xudmFyIGxvZ2ljYWxQYWRkaW5ncyA9IHtcbiAgJ3BhZGRpbmctbGVmdCc6ICdwYWRkaW5nLWlubGluZS1zdGFydCcsXG4gICdwYWRkaW5nLXJpZ2h0JzogJ3BhZGRpbmctaW5saW5lLWVuZCcsXG4gICdwYWRkaW5nLXRvcCc6ICdwYWRkaW5nLWJsb2NrLXN0YXJ0JyxcbiAgJ3BhZGRpbmctYm90dG9tJzogJ3BhZGRpbmctYmxvY2stZW5kJyxcbiAgJ3BhZGRpbmctaG9yaXpvbnRhbCc6ICdwYWRkaW5nLWlubGluZScsXG4gICdwYWRkaW5nLXZlcnRpY2FsJzogJ3BhZGRpbmctYmxvY2snXG59O1xudmFyIGxvZ2ljYWxQb3NpdGlvbiA9IHtcbiAgdG9wOiAnaW5zZXQtYmxvY2stc3RhcnQnLFxuICByaWdodDogJ2luc2V0LWlubGluZS1lbmQnLFxuICBib3R0b206ICdpbnNldC1ibG9jay1lbmQnLFxuICBsZWZ0OiAnaW5zZXQtaW5saW5lLXN0YXJ0JyxcbiAgaG9yaXpvbnRhbDogJ2luc2V0LWJsb2NrJyxcbiAgdmVydGljYWw6ICdpbnNldC1pbmxpbmUnLFxuICBpbnNldDogJ2luc2V0J1xufTtcbnZhciBsb2dpY2FsU2l6ZSA9IHtcbiAgaGVpZ2h0OiAnYmxvY2stc2l6ZScsXG4gIHdpZHRoOiAnaW5saW5lLXNpemUnLFxuICAnbWF4LWhlaWdodCc6ICdtYXgtYmxvY2stc2l6ZScsXG4gICdtYXgtd2lkdGgnOiAnbWF4LWlubGluZS1zaXplJyxcbiAgJ21pbi1oZWlnaHQnOiAnbWluLWJsb2NrLXNpemUnLFxuICAnbWluLXdpZHRoJzogJ21pbi1pbmxpbmUtc2l6ZSdcbn07XG52YXIgbG9naWNhbE92ZXJmbG93ID0ge1xuICAnb3ZlcmZsb3cteCc6ICdvdmVyZmxvdy1ibG9jaycsXG4gICdvdmVyZmxvdy15JzogJ292ZXJmbG93LWlubGluZSdcbn07XG52YXIgbG9naWNhbEJvcmRlcnMgPSB7XG4gICdib3JkZXItaG9yaXpvbnRhbCc6ICdib3JkZXItaW5saW5lJyxcbiAgJ2JvcmRlci1ob3Jpem9udGFsLWNvbG9yJzogJ2JvcmRlci1pbmxpbmUtY29sb3InLFxuICAnYm9yZGVyLWhvcml6b250YWwtd2lkdGgnOiAnYm9yZGVyLWlubGluZS13aWR0aCcsXG4gICdib3JkZXItaG9yaXpvbnRhbC1zdHlsZSc6ICdib3JkZXItaW5saW5lLXN0eWxlJyxcbiAgJ2JvcmRlci12ZXJ0aWNhbCc6ICdib3JkZXItYmxvY2snLFxuICAnYm9yZGVyLXZlcnRpY2FsLWNvbG9yJzogJ2JvcmRlci1ibG9jay1jb2xvcicsXG4gICdib3JkZXItdmVydGljYWwtd2lkdGgnOiAnYm9yZGVyLWJsb2NrLXdpZHRoJyxcbiAgJ2JvcmRlci12ZXJ0aWNhbC1zdHlsZSc6ICdib3JkZXItYmxvY2stc3R5bGUnLFxuICAnYm9yZGVyLWJvdHRvbSc6ICdib3JkZXItYmxvY2stZW5kJyxcbiAgJ2JvcmRlci1ib3R0b20tY29sb3InOiAnYm9yZGVyLWJsb2NrLWVuZC1jb2xvcicsXG4gICdib3JkZXItYm90dG9tLXN0eWxlJzogJ2JvcmRlci1ibG9jay1lbmQtc3R5bGUnLFxuICAnYm9yZGVyLWJvdHRvbS13aWR0aCc6ICdib3JkZXItYmxvY2stZW5kLXdpZHRoJyxcbiAgJ2JvcmRlci10b3AnOiAnYm9yZGVyLWJsb2NrLXN0YXJ0JyxcbiAgJ2JvcmRlci10b3AtY29sb3InOiAnYm9yZGVyLWJsb2NrLXN0YXJ0LWNvbG9yJyxcbiAgJ2JvcmRlci10b3Atc3R5bGUnOiAnYm9yZGVyLWJsb2NrLXN0YXJ0LXN0eWxlJyxcbiAgJ2JvcmRlci10b3Atd2lkdGgnOiAnYm9yZGVyLWJsb2NrLXN0YXJ0LXdpZHRoJyxcbiAgJ2JvcmRlci1yaWdodCc6ICdib3JkZXItaW5saW5lLWVuZCcsXG4gICdib3JkZXItcmlnaHQtY29sb3InOiAnYm9yZGVyLWlubGluZS1lbmQtY29sb3InLFxuICAnYm9yZGVyLXJpZ2h0LXN0eWxlJzogJ2JvcmRlci1pbmxpbmUtZW5kLXN0eWxlJyxcbiAgJ2JvcmRlci1yaWdodC13aWR0aCc6ICdib3JkZXItaW5saW5lLWVuZC13aWR0aCcsXG4gICdib3JkZXItbGVmdCc6ICdib3JkZXItaW5saW5lLXN0YXJ0JyxcbiAgJ2JvcmRlci1sZWZ0LWNvbG9yJzogJ2JvcmRlci1pbmxpbmUtc3RhcnQtY29sb3InLFxuICAnYm9yZGVyLWxlZnQtc3R5bGUnOiAnYm9yZGVyLWlubGluZS1zdGFydC1zdHlsZScsXG4gICdib3JkZXItbGVmdC13aWR0aCc6ICdib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoJyxcbiAgJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnOiAnYm9yZGVyLXN0YXJ0LXN0YXJ0LXJhZGl1cycsXG4gICdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyc6ICdib3JkZXItc3RhcnQtZW5kLXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJzogJ2JvcmRlci1lbmQtc3RhcnQtcmFkaXVzJyxcbiAgJ2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzJzogJ2JvcmRlci1lbmQtZW5kLXJhZGl1cydcbn07XG5leHBvcnQgdmFyIGxvZ2ljYWxzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGxvZ2ljYWxNYXJnaW5zKSwgbG9naWNhbFBhZGRpbmdzKSwgbG9naWNhbFBvc2l0aW9uKSwgbG9naWNhbFNpemUpLCBsb2dpY2FsT3ZlcmZsb3cpLCBsb2dpY2FsQm9yZGVycyk7XG5leHBvcnQgdmFyIExPR0lDQUxfUFJPUEVSVElFUyA9IGtleXNPZihsb2dpY2Fscyk7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYHN0cmluZ2AgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsQ1NTID0gZnVuY3Rpb24gbG9naWNhbENTUyhwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KGxvZ2ljYWxzW3Byb3BlcnR5XSwgXCI6IFwiKS5jb25jYXQodmFsdWUsIFwiO1wiKTtcbn07XG4vKipcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIENTUyBsb2dpY2FsIHByb3BlcnR5XG4gKiBAcGFyYW0gdmFsdWUgU3RyaW5nIHRvIG91dHB1dCBhcyB0aGUgcHJvcGVydHkgdmFsdWVcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnR5IHZlcnNpb24gZm9yIHRoZSBnaXZlbiBgcHJvcGVydHk6IHZhbHVlYCBwYWlyXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsU3R5bGUocHJvcGVydHksIHZhbHVlKSB7XG4gIC8vIFN0cmlwIGh5cGhlbnMgYW5kIGNhbWVsQ2FzZSB0aGUgQ1NTIGxvZ2ljYWwgcHJvcGVydHkgc28gUmVhY3QgZG9lc24ndCB0aHJvdyBlcnJvcnNcbiAgdmFyIGNhbWVsQ2FzZWRQcm9wZXJ0eSA9IGxvZ2ljYWxzW3Byb3BlcnR5XS5yZXBsYWNlKC8tXFx3L2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbiAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwgY2FtZWxDYXNlZFByb3BlcnR5LCBcIlwiLmNvbmNhdCh2YWx1ZSkpO1xufTtcbi8qKlxuICpcbiAqIEBwYXJhbSB3aWR0aCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiB3aWR0aFxuICogQHBhcmFtIGhlaWdodCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiBoZWlnaHRcbiAqIEByZXR1cm5zIGBzdHJpbmdgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnRpZXMgZm9yIGhlaWdodCBhbmQgd2lkdGhcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxTaXplQ1NTID0gZnVuY3Rpb24gbG9naWNhbFNpemVDU1Mod2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gXCJcXG4gICAgXCIuY29uY2F0KGxvZ2ljYWxzLndpZHRoLCBcIjogXCIpLmNvbmNhdCh3aWR0aCwgXCI7XFxuICAgIFwiKS5jb25jYXQobG9naWNhbHMuaGVpZ2h0LCBcIjogXCIpLmNvbmNhdChoZWlnaHQsIFwiO1xcbiAgXCIpO1xufTtcbi8qKlxuICpcbiAqIEBwYXJhbSB3aWR0aCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiB3aWR0aFxuICogQHBhcmFtIGhlaWdodCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiBoZWlnaHRcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnRpZXMgZm9yIGhlaWdodCBhbmQgd2lkdGhcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxTaXplU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsU2l6ZVN0eWxlKHdpZHRoLCBoZWlnaHQpIHtcbiAgdmFyIF9yZWYyO1xuXG4gIHJldHVybiBfcmVmMiA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX3JlZjIsIGxvZ2ljYWxzLndpZHRoLCB3aWR0aCksIF9kZWZpbmVQcm9wZXJ0eShfcmVmMiwgbG9naWNhbHMuaGVpZ2h0LCBoZWlnaHQpLCBfcmVmMjtcbn07IC8vIFRleHQgYWxpZ25tZW50IGlzIHNlcGFyYXRlIGJlY2F1c2UgaXRzIHRoZSB2YWx1ZSB0aGF0IGNoYW5nZXMgbm90IHRoZSBwcm9wZXJ0eVxuXG5leHBvcnQgdmFyIGxvZ2ljYWxUZXh0ID0ge1xuICAndGV4dC1hbGlnbic6IHtcbiAgICBsZWZ0OiAnc3RhcnQnLFxuICAgIGNlbnRlcjogJ2NlbnRlcicsXG4gICAgcmlnaHQ6ICdlbmQnXG4gIH1cbn07XG5leHBvcnQgdmFyIExPR0lDQUxfVEVYVF9BTElHTk1FTlQgPSBrZXlzT2YobG9naWNhbFRleHRbJ3RleHQtYWxpZ24nXSk7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYHN0cmluZ2AgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsVGV4dEFsaWduQ1NTID0gZnVuY3Rpb24gbG9naWNhbFRleHRBbGlnbkNTUyh2YWx1ZSkge1xuICByZXR1cm4gXCJ0ZXh0LWFsaWduOiBcIi5jb25jYXQobG9naWNhbFRleHRbJ3RleHQtYWxpZ24nXVt2YWx1ZV0sIFwiO1wiKTtcbn07XG4vKipcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIENTUyBsb2dpY2FsIHByb3BlcnR5XG4gKiBAcGFyYW0gdmFsdWUgU3RyaW5nIHRvIG91dHB1dCBhcyB0aGUgcHJvcGVydHkgdmFsdWVcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnR5IHZlcnNpb24gZm9yIHRoZSBnaXZlbiBgcHJvcGVydHk6IHZhbHVlYCBwYWlyXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsVGV4dEFsaWduU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsVGV4dEFsaWduU3R5bGUodmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0QWxpZ246IGxvZ2ljYWxUZXh0Wyd0ZXh0LWFsaWduJ11bdmFsdWVdXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYHB4YCB2YWx1ZSBiYXNlZCBvbiBhIHNjYWxlIG11bHRpcGxpZXJcbiAqIEBwYXJhbSBzY2FsZSAtIFRoZSBmb250IHNjYWxlIG11bHRpcGxpZXJcbiAqICpcbiAqIEBwYXJhbSB0aGVtZU9yQmFzZSAtIFRoZW1lIGJhc2UgdmFsdWVcbiAqICpcbiAqIEByZXR1cm5zIHN0cmluZyAtIFJlbSB1bml0IGFsaWduZWQgdG8gYmFzZWxpbmVcbiAqL1xuZXhwb3J0IHZhciBzaXplVG9QaXhlbCA9IGZ1bmN0aW9uIHNpemVUb1BpeGVsKCkge1xuICB2YXIgc2NhbGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IDE7XG4gIHJldHVybiBmdW5jdGlvbiAodGhlbWVPckJhc2UpIHtcbiAgICB2YXIgYmFzZSA9IF90eXBlb2YodGhlbWVPckJhc2UpID09PSAnb2JqZWN0JyA/IHRoZW1lT3JCYXNlLmJhc2UgOiB0aGVtZU9yQmFzZTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQoYmFzZSAqIHNjYWxlLCBcInB4XCIpO1xuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBmb250LXNpemUgdmFsdWUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHNjYWxlIGtleVxuICogQHBhcmFtIHNjYWxlIC0gVGhlIGZvbnQgc2NhbGUga2V5XG4gKiBAcGFyYW0gdGhlbWUgLSBSZXF1aXJlcyB0aGUgYGJhc2VgIGFuZCBgZm9udGAga2V5c1xuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIC0gc2VlIF9Gb250U2NhbGVPcHRpb25zXG4gKlxuICogQHJldHVybnMgc3RyaW5nIC0gQ2FsY3VsYXRlZCBmb250LXNpemUgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV1aUZvbnRTaXplRnJvbVNjYWxlKHNjYWxlLCBfcmVmKSB7XG4gIHZhciBiYXNlID0gX3JlZi5iYXNlLFxuICAgICAgZm9udCA9IF9yZWYuZm9udDtcblxuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgICAgX3JlZjIkbWVhc3VyZW1lbnQgPSBfcmVmMi5tZWFzdXJlbWVudCxcbiAgICAgIG1lYXN1cmVtZW50ID0gX3JlZjIkbWVhc3VyZW1lbnQgPT09IHZvaWQgMCA/ICdyZW0nIDogX3JlZjIkbWVhc3VyZW1lbnQsXG4gICAgICBjdXN0b21TY2FsZSA9IF9yZWYyLmN1c3RvbVNjYWxlO1xuXG4gIGlmIChtZWFzdXJlbWVudCA9PT0gJ2VtJykge1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChmb250LnNjYWxlW3NjYWxlXSwgXCJlbVwiKTtcbiAgfVxuXG4gIHZhciBudW1lcmF0b3IgPSBiYXNlICogZm9udC5zY2FsZVtzY2FsZV07XG4gIGlmIChjdXN0b21TY2FsZSkgbnVtZXJhdG9yICo9IGZvbnQuc2NhbGVbY3VzdG9tU2NhbGVdO1xuICB2YXIgZGVub21pbmF0b3IgPSBiYXNlICogZm9udC5zY2FsZVtmb250LmJvZHkuc2NhbGVdO1xuICByZXR1cm4gbWVhc3VyZW1lbnQgPT09ICdweCcgPyBcIlwiLmNvbmNhdChudW1lcmF0b3IsIFwicHhcIikgOiBcIlwiLmNvbmNhdCgobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpLnRvRml4ZWQoNCksIFwicmVtXCIpO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsaW5lLWhlaWdodCB0byB0aGUgY2xvc2VzdCBtdWx0aXBsZSBvZiB0aGUgYmFzZWxpbmVcbiAqIEVYOiBBIHByb3BlciBsaW5lLWhlaWdodCBmb3IgdGV4dCBpcyAxLjUgdGltZXMgdGhlIGZvbnQtc2l6ZS5cbiAqICAgICBJZiBvdXIgYmFzZSBmb250IHNpemUgKGV1aUZvbnRTaXplKSBpcyAxNiwgYW5kIG91ciBiYXNlbGluZSBpcyA0LiBUbyBlbnN1cmUgdGhlXG4gKiAgICAgdGV4dCBzdGF5cyBvbiB0aGUgYmFzZWxpbmUsIHdlIHBhc3MgYSBtdWx0aXBsaWVyIHRvIGNhbGN1bGF0ZSBhIGxpbmUtaGVpZ2h0LlxuICogQHBhcmFtIHNjYWxlIC0gVGhlIGZvbnQgc2NhbGUga2V5XG4gKiBAcGFyYW0gdGhlbWUgLSBSZXF1aXJlcyB0aGUgYGJhc2VgIGFuZCBgZm9udGAga2V5c1xuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIC0gc2VlIF9Gb250U2NhbGVPcHRpb25zXG4gKlxuICogQHJldHVybnMgc3RyaW5nIC0gQ2FsY3VsYXRlZCBsaW5lLWhlaWdodCB2YWx1ZSBhbGlnbmVkIHRvIGJhc2VsaW5lXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV1aUxpbmVIZWlnaHRGcm9tQmFzZWxpbmUoc2NhbGUsIF9yZWYzKSB7XG4gIHZhciBiYXNlID0gX3JlZjMuYmFzZSxcbiAgICAgIGZvbnQgPSBfcmVmMy5mb250O1xuXG4gIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgICBfcmVmNCRtZWFzdXJlbWVudCA9IF9yZWY0Lm1lYXN1cmVtZW50LFxuICAgICAgbWVhc3VyZW1lbnQgPSBfcmVmNCRtZWFzdXJlbWVudCA9PT0gdm9pZCAwID8gJ3JlbScgOiBfcmVmNCRtZWFzdXJlbWVudCxcbiAgICAgIGN1c3RvbVNjYWxlID0gX3JlZjQuY3VzdG9tU2NhbGU7XG5cbiAgdmFyIGJhc2VsaW5lID0gZm9udC5iYXNlbGluZSxcbiAgICAgIGxpbmVIZWlnaHRNdWx0aXBsaWVyID0gZm9udC5saW5lSGVpZ2h0TXVsdGlwbGllcjtcbiAgdmFyIG51bWVyYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW3NjYWxlXTtcbiAgaWYgKGN1c3RvbVNjYWxlKSBudW1lcmF0b3IgKj0gZm9udC5zY2FsZVtjdXN0b21TY2FsZV07XG4gIHZhciBkZW5vbWluYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW2ZvbnQuYm9keS5zY2FsZV07XG5cbiAgdmFyIF9saW5lSGVpZ2h0TXVsdGlwbGllciA9IG51bWVyYXRvciA8PSBiYXNlID8gbGluZUhlaWdodE11bHRpcGxpZXIgOiBsaW5lSGVpZ2h0TXVsdGlwbGllciAqIDAuODMzO1xuXG4gIGlmIChtZWFzdXJlbWVudCA9PT0gJ2VtJykge1xuICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBsaW5lLWhlaWdodCB2aWEgYGVtYCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBhZ2FpbnN0IHRoZSBwaXhlbCBiYXNlbGluZSBncmlkO1xuICAgIC8vIHdlIHdpbGwgYXNzdW1lIHRoYXQgdHlwaWNhbGx5IGxhcmdlciBzY2FsZSBmb250LXNpemVzIHNob3VsZCBoYXZlIGEgc2hvcnRlciBsaW5lLWhlaWdodDtcbiAgICByZXR1cm4gX2xpbmVIZWlnaHRNdWx0aXBsaWVyLnRvRml4ZWQoNCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZhciBwaXhlbFZhbHVlID0gTWF0aC5mbG9vcihNYXRoLnJvdW5kKG51bWVyYXRvciAqIF9saW5lSGVpZ2h0TXVsdGlwbGllcikgLyBiYXNlbGluZSkgKiBiYXNlbGluZTtcbiAgcmV0dXJuIG1lYXN1cmVtZW50ID09PSAncHgnID8gXCJcIi5jb25jYXQocGl4ZWxWYWx1ZSwgXCJweFwiKSA6IFwiXCIuY29uY2F0KChwaXhlbFZhbHVlIC8gZGVub21pbmF0b3IpLnRvRml4ZWQoNCksIFwicmVtXCIpO1xufVxuLyoqXG4gKiBUZXh0IHdlaWdodCBzaGlmdGluZ1xuICpcbiAqIFdoZW4gY2hhbmdpbmcgdGhlIGZvbnQtd2VpZ2h0IGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LFxuICogdGhpcyBtaXhpbiB3aWxsIGVuc3VyZSB0aGF0IHRoZSBzaXppbmcgaXMgZGVwZW5kZW50IG9uIHRoZSBib2xkZXN0XG4gKiB3ZWlnaHQgc28gaXQgZG9lc24ndCBzaGlmdCBzaWJsaW5nIGNvbnRlbnQuXG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0U2hpZnQgPSBmdW5jdGlvbiBldWlUZXh0U2hpZnQoKSB7XG4gIHZhciBmb250V2VpZ2h0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnYm9sZCc7XG4gIHZhciBhdHRyaWJ1dGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdkYXRhLXRleHQnO1xuICB2YXIgZXVpVGhlbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIFwiXFxuICAmOjphZnRlciB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBjb250ZW50OiBhdHRyKFwiLmNvbmNhdChhdHRyaWJ1dGUsIFwiKTtcXG4gICAgZm9udC13ZWlnaHQ6IFwiKS5jb25jYXQoZXVpVGhlbWUuZm9udC53ZWlnaHRbZm9udFdlaWdodF0sIFwiO1xcbiAgICBoZWlnaHQ6IDA7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIH1cIik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgc2l6ZVRvUGl4ZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5leHBvcnQgdmFyIGJhc2UgPSAxNjtcbmV4cG9ydCB2YXIgc2l6ZSA9IHtcbiAgeHhzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjEyNSkpLFxuICB4czogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4yNSkpLFxuICBzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjUpKSxcbiAgbTogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC43NSkpLFxuICBiYXNlOiBjb21wdXRlZChzaXplVG9QaXhlbCgpKSxcbiAgbDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMS41KSksXG4gIHhsOiBjb21wdXRlZChzaXplVG9QaXhlbCgyKSksXG4gIHh4bDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMi41KSksXG4gIHh4eGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDMpKSxcbiAgeHh4eGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDQpKVxufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgc2l6ZVRvUGl4ZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5leHBvcnQgdmFyIGJvcmRlciA9IHtcbiAgY29sb3I6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMSksXG4gICAgICAgIGxpZ2h0U2hhZGUgPSBfcmVmMlswXTtcblxuICAgIHJldHVybiBsaWdodFNoYWRlO1xuICB9LCBbJ2NvbG9ycy5saWdodFNoYWRlJ10pLFxuICB3aWR0aDoge1xuICAgIHRoaW46ICcxcHgnLFxuICAgIHRoaWNrOiAnMnB4J1xuICB9LFxuICByYWRpdXM6IHtcbiAgICBtZWRpdW06IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuMzc1KSksXG4gICAgc21hbGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuMjUpKVxuICB9LFxuICB0aGluOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgICAgIHdpZHRoID0gX3JlZjRbMF0sXG4gICAgICAgIGNvbG9yID0gX3JlZjRbMV07XG5cbiAgICByZXR1cm4gXCJcIi5jb25jYXQod2lkdGgudGhpbiwgXCIgc29saWQgXCIpLmNvbmNhdChjb2xvcik7XG4gIH0sIFsnYm9yZGVyLndpZHRoJywgJ2JvcmRlci5jb2xvciddKSxcbiAgdGhpY2s6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgICAgd2lkdGggPSBfcmVmNlswXSxcbiAgICAgICAgY29sb3IgPSBfcmVmNlsxXTtcblxuICAgIHJldHVybiBcIlwiLmNvbmNhdCh3aWR0aC50aGljaywgXCIgc29saWQgXCIpLmNvbmNhdChjb2xvcik7XG4gIH0sIFsnYm9yZGVyLndpZHRoJywgJ2JvcmRlci5jb2xvciddKSxcbiAgZWRpdGFibGU6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNykge1xuICAgIHZhciBfcmVmOCA9IF9zbGljZWRUb0FycmF5KF9yZWY3LCAyKSxcbiAgICAgICAgd2lkdGggPSBfcmVmOFswXSxcbiAgICAgICAgY29sb3IgPSBfcmVmOFsxXTtcblxuICAgIHJldHVybiBcIlwiLmNvbmNhdCh3aWR0aC50aGljaywgXCIgZG90dGVkIFwiKS5jb25jYXQoY29sb3IpO1xuICB9LCBbJ2JvcmRlci53aWR0aCcsICdib3JkZXIuY29sb3InXSlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGxldmVscyA9IHtcbiAgdG9hc3Q6IDkwMDAsXG4gIG1vZGFsOiA4MDAwLFxuICBtYXNrOiA2MDAwLFxuICBuYXZpZ2F0aW9uOiA2MDAwLFxuICBtZW51OiAyMDAwLFxuICBoZWFkZXI6IDEwMDAsXG4gIGZseW91dDogMTAwMCxcbiAgbWFza0JlbG93SGVhZGVyOiAxMDAwLFxuICBjb250ZW50OiAwXG59OyIsICJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdXRpbHMnO1xuLy8gVHlwb2dyYXBoaWMgc2NhbGUgLS0gbG9vc2VseSBiYXNlZCBvbiBNYWpvciBUaGlyZCAoMS4yNTApXG5leHBvcnQgdmFyIGZvbnRTY2FsZSA9IHtcbiAgeHh4czogMC41NjI1LFxuICB4eHM6IDAuNjg3NSxcbiAgeHM6IDAuNzUsXG4gIHM6IDAuODc1LFxuICBtOiAxLFxuICBsOiAxLjM3NSxcbiAgeGw6IDEuNjg3NSxcbiAgeHhsOiAyLjEyNVxufTsgLy8gRmFtaWxpZXMgJiBiYXNlIGZvbnQgc2V0dGluZ3NcblxuZXhwb3J0IHZhciBmb250QmFzZSA9IHtcbiAgZmFtaWx5OiBcIidJbnRlcicsIEJsaW5rTWFjU3lzdGVtRm9udCwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxuICBmYW1pbHlDb2RlOiBcIidSb2JvdG8gTW9ubycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcbiAgZmFtaWx5U2VyaWY6ICdHZW9yZ2lhLCBUaW1lcywgVGltZXMgTmV3IFJvbWFuLCBzZXJpZicsXG4gIC8vIENhcmVmdWwgdXNpbmcgbGlnYXR1cmVzLiBDb2RlIGVkaXRvcnMgbGlrZSBBQ0Ugd2lsbCBvZnRlbiBlcnJvciBiZWNhdXNlIG9mIHdpZHRoIGNhbGN1bGF0aW9uc1xuICBmZWF0dXJlU2V0dGluZ3M6IFwiJ2NhbHQnIDEsICdrZXJuJyAxLCAnbGlnYScgMVwiLFxuICBiYXNlbGluZTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgICAgYmFzZSA9IF9yZWYyWzBdO1xuXG4gICAgcmV0dXJuIGJhc2UgLyA0O1xuICB9LCBbJ2Jhc2UnXSksXG4gIGxpbmVIZWlnaHRNdWx0aXBsaWVyOiAxLjVcbn07XG5leHBvcnQgdmFyIGZvbnRXZWlnaHQgPSB7XG4gIGxpZ2h0OiAzMDAsXG4gIHJlZ3VsYXI6IDQwMCxcbiAgbWVkaXVtOiA1MDAsXG4gIHNlbWlCb2xkOiA2MDAsXG4gIGJvbGQ6IDcwMFxufTtcbmV4cG9ydCB2YXIgZm9udCA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZm9udEJhc2UpLCB7fSwge1xuICBzY2FsZTogZm9udFNjYWxlLFxuICB3ZWlnaHQ6IGZvbnRXZWlnaHQsXG4gIGJvZHk6IHtcbiAgICBzY2FsZTogJ3MnLFxuICAgIHdlaWdodDogJ3JlZ3VsYXInXG4gIH0sXG4gIHRpdGxlOiB7XG4gICAgd2VpZ2h0OiAnYm9sZCdcbiAgfVxufSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogTk9URTogVGhlc2Ugd2VyZSBxdWljayBjb252ZXJzaW9ucyBvZiB0aGVpciBTYXNzIGNvdW50ZXJwYXJ0cy5cbiAqICAgICAgIFRoZSBjb21tZW50ZWQgb3V0IGtleXMgaGF2ZSBub3QgYmVlbiBlc3RhYmxpc2hlZCBhcyBuZWNlc3NhcnkgeWV0LlxuICovXG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IHNpemVUb1BpeGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NpemUnO1xuZXhwb3J0IHZhciBmb2N1cyA9IHtcbiAgY29sb3I6ICdjdXJyZW50Q29sb3InLFxuICB3aWR0aDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4xMjUpKSAvLyB0cmFuc3BhcmVuY3k6IHsgTElHSFQ6IDAuOSwgREFSSzogMC43IH0sXG4gIC8vIGJhY2tncm91bmRDb2xvcjogY29tcHV0ZWQoKHsgY29sb3JzLCBmb2N1cyB9KSA9PlxuICAvLyAgIHRyYW5zcGFyZW50aXplKGNvbG9ycy5wcmltYXJ5LCBmb2N1cyEudHJhbnNwYXJlbmN5KVxuICAvLyApLFxuICAvLyBPdXRsaW5lXG4gIC8vIG91dGxpbmU6IHtcbiAgLy8gICBvdXRsaW5lOiBjb21wdXRlZCgoeyBmb2N1cyB9KSA9PiBgJHtmb2N1cyEud2lkdGh9IHNvbGlkICR7Zm9jdXMhLmNvbG9yfWApLFxuICAvLyB9LFxuXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgYnVpbGRUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IGNvbG9ycyB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19jb2xvcnMnO1xuaW1wb3J0IHsgYW5pbWF0aW9uIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2FuaW1hdGlvbic7XG5pbXBvcnQgeyBicmVha3BvaW50IH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JyZWFrcG9pbnQnO1xuaW1wb3J0IHsgYmFzZSwgc2l6ZSB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zaXplJztcbmltcG9ydCB7IGJvcmRlciB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19ib3JkZXJzJztcbmltcG9ydCB7IGxldmVscyB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19sZXZlbHMnO1xuaW1wb3J0IHsgZm9udCB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL190eXBvZ3JhcGh5JztcbmltcG9ydCB7IGZvY3VzIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3N0YXRlcyc7XG5leHBvcnQgdmFyIEFNU1RFUkRBTV9OQU1FX0tFWSA9ICdFVUlfVEhFTUVfQU1TVEVSREFNJztcbmV4cG9ydCB2YXIgZXVpVGhlbWVBbXN0ZXJkYW0gPSB7XG4gIGNvbG9yczogY29sb3JzLFxuICBiYXNlOiBiYXNlLFxuICBzaXplOiBzaXplLFxuICBib3JkZXI6IGJvcmRlcixcbiAgZm9udDogZm9udCxcbiAgYW5pbWF0aW9uOiBhbmltYXRpb24sXG4gIGJyZWFrcG9pbnQ6IGJyZWFrcG9pbnQsXG4gIGxldmVsczogbGV2ZWxzLFxuICBmb2N1czogZm9jdXNcbn07XG5leHBvcnQgdmFyIEV1aVRoZW1lQW1zdGVyZGFtID0gYnVpbGRUaGVtZShldWlUaGVtZUFtc3RlcmRhbSwgQU1TVEVSREFNX05BTUVfS0VZKTsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpVGhlbWVDb250ZXh0LCBFdWlNb2RpZmljYXRpb25zQ29udGV4dCwgRXVpQ29sb3JNb2RlQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciB1c2VFdWlUaGVtZSA9IGZ1bmN0aW9uIHVzZUV1aVRoZW1lKCkge1xuICB2YXIgdGhlbWUgPSB1c2VDb250ZXh0KEV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBjb2xvck1vZGUgPSB1c2VDb250ZXh0KEV1aUNvbG9yTW9kZUNvbnRleHQpO1xuICB2YXIgbW9kaWZpY2F0aW9ucyA9IHVzZUNvbnRleHQoRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aVRoZW1lOiB0aGVtZSxcbiAgICBjb2xvck1vZGU6IGNvbG9yTW9kZSxcbiAgICBtb2RpZmljYXRpb25zOiBtb2RpZmljYXRpb25zXG4gIH07XG59O1xuLy8gUHJvdmlkZSB0aGUgY29tcG9uZW50IHByb3BzIGludGVyZmFjZSBhcyB0aGUgZ2VuZXJpYyB0byBhbGxvdyB0aGUgZG9jcyBwcm9wcyB0YWJsZSB0byBwb3B1bGF0ZS5cbi8vIGUuZy4sIGBjb25zdCBFdWlDb21wb25lbnQgPSB3aXRoRXVpVGhlbWU8RXVpQ29tcG9uZW50UHJvcHM+KF9FdWlDb21wb25lbnQpYFxuZXhwb3J0IHZhciB3aXRoRXVpVGhlbWUgPSBmdW5jdGlvbiB3aXRoRXVpVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnRXaXRoVGhlbWUnO1xuXG4gIHZhciBSZW5kZXIgPSBmdW5jdGlvbiBSZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciBfdXNlRXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpLFxuICAgICAgICBldWlUaGVtZSA9IF91c2VFdWlUaGVtZS5ldWlUaGVtZSxcbiAgICAgICAgY29sb3JNb2RlID0gX3VzZUV1aVRoZW1lLmNvbG9yTW9kZSxcbiAgICAgICAgbW9kaWZpY2F0aW9ucyA9IF91c2VFdWlUaGVtZS5tb2RpZmljYXRpb25zO1xuXG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZToge1xuICAgICAgICBldWlUaGVtZTogZXVpVGhlbWUsXG4gICAgICAgIGNvbG9yTW9kZTogY29sb3JNb2RlLFxuICAgICAgICBtb2RpZmljYXRpb25zOiBtb2RpZmljYXRpb25zXG4gICAgICB9LFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcykpO1xuICB9O1xuXG4gIHZhciBXaXRoRXVpVGhlbWUgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihSZW5kZXIpO1xuICBXaXRoRXVpVGhlbWUuZGlzcGxheU5hbWUgPSBjb21wb25lbnROYW1lO1xuICByZXR1cm4gV2l0aEV1aVRoZW1lO1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCB7IEV1aVN5c3RlbUNvbnRleHQsIEV1aVRoZW1lQ29udGV4dCwgRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQsIEV1aUNvbG9yTW9kZUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgYnVpbGRUaGVtZSwgZ2V0Q29sb3JNb2RlLCBnZXRDb21wdXRlZCwgbWVyZ2VEZWVwIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpVGhlbWVQcm92aWRlcihfcmVmKSB7XG4gIHZhciBfc3lzdGVtID0gX3JlZi50aGVtZSxcbiAgICAgIF9jb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZSxcbiAgICAgIF9tb2RpZmljYXRpb25zID0gX3JlZi5tb2RpZnksXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBwYXJlbnRTeXN0ZW0gPSB1c2VDb250ZXh0KEV1aVN5c3RlbUNvbnRleHQpO1xuICB2YXIgcGFyZW50TW9kaWZpY2F0aW9ucyA9IHVzZUNvbnRleHQoRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQpO1xuICB2YXIgcGFyZW50Q29sb3JNb2RlID0gdXNlQ29udGV4dChFdWlDb2xvck1vZGVDb250ZXh0KTtcbiAgdmFyIHBhcmVudFRoZW1lID0gdXNlQ29udGV4dChFdWlUaGVtZUNvbnRleHQpO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShfc3lzdGVtIHx8IHBhcmVudFN5c3RlbSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHN5c3RlbSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRTeXN0ZW0gPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciBwcmV2U3lzdGVtS2V5ID0gdXNlUmVmKHN5c3RlbS5rZXkpO1xuXG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobWVyZ2VEZWVwKHBhcmVudE1vZGlmaWNhdGlvbnMsIF9tb2RpZmljYXRpb25zKSksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBtb2RpZmljYXRpb25zID0gX3VzZVN0YXRlNFswXSxcbiAgICAgIHNldE1vZGlmaWNhdGlvbnMgPSBfdXNlU3RhdGU0WzFdO1xuXG4gIHZhciBwcmV2TW9kaWZpY2F0aW9ucyA9IHVzZVJlZihtb2RpZmljYXRpb25zKTtcblxuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKGdldENvbG9yTW9kZShfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGUpKSxcbiAgICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICAgIGNvbG9yTW9kZSA9IF91c2VTdGF0ZTZbMF0sXG4gICAgICBzZXRDb2xvck1vZGUgPSBfdXNlU3RhdGU2WzFdO1xuXG4gIHZhciBwcmV2Q29sb3JNb2RlID0gdXNlUmVmKGNvbG9yTW9kZSk7XG4gIHZhciBpc1BhcmVudFRoZW1lID0gdXNlUmVmKHByZXZTeXN0ZW1LZXkuY3VycmVudCA9PT0gcGFyZW50U3lzdGVtLmtleSAmJiBjb2xvck1vZGUgPT09IHBhcmVudENvbG9yTW9kZSAmJiBpc0VxdWFsKHBhcmVudE1vZGlmaWNhdGlvbnMsIG1vZGlmaWNhdGlvbnMpKTtcblxuICB2YXIgX3VzZVN0YXRlNyA9IHVzZVN0YXRlKGlzUGFyZW50VGhlbWUuY3VycmVudCAmJiBPYmplY3Qua2V5cyhwYXJlbnRUaGVtZSkubGVuZ3RoID8gcGFyZW50VGhlbWUgOiBnZXRDb21wdXRlZChzeXN0ZW0sIGJ1aWxkVGhlbWUobW9kaWZpY2F0aW9ucywgXCJfXCIuY29uY2F0KHN5c3RlbS5rZXkpKSwgY29sb3JNb2RlKSksXG4gICAgICBfdXNlU3RhdGU4ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNywgMiksXG4gICAgICB0aGVtZSA9IF91c2VTdGF0ZThbMF0sXG4gICAgICBzZXRUaGVtZSA9IF91c2VTdGF0ZThbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3U3lzdGVtID0gX3N5c3RlbSB8fCBwYXJlbnRTeXN0ZW07XG5cbiAgICBpZiAocHJldlN5c3RlbUtleS5jdXJyZW50ICE9PSBuZXdTeXN0ZW0ua2V5KSB7XG4gICAgICBzZXRTeXN0ZW0obmV3U3lzdGVtKTtcbiAgICAgIHByZXZTeXN0ZW1LZXkuY3VycmVudCA9IG5ld1N5c3RlbS5rZXk7XG4gICAgICBpc1BhcmVudFRoZW1lLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtfc3lzdGVtLCBwYXJlbnRTeXN0ZW1dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3TW9kaWZpY2F0aW9ucyA9IG1lcmdlRGVlcChwYXJlbnRNb2RpZmljYXRpb25zLCBfbW9kaWZpY2F0aW9ucyk7XG5cbiAgICBpZiAoIWlzRXF1YWwocHJldk1vZGlmaWNhdGlvbnMuY3VycmVudCwgbmV3TW9kaWZpY2F0aW9ucykpIHtcbiAgICAgIHNldE1vZGlmaWNhdGlvbnMobmV3TW9kaWZpY2F0aW9ucyk7XG4gICAgICBwcmV2TW9kaWZpY2F0aW9ucy5jdXJyZW50ID0gbmV3TW9kaWZpY2F0aW9ucztcbiAgICAgIGlzUGFyZW50VGhlbWUuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW19tb2RpZmljYXRpb25zLCBwYXJlbnRNb2RpZmljYXRpb25zXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5ld0NvbG9yTW9kZSA9IGdldENvbG9yTW9kZShfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGUpO1xuXG4gICAgaWYgKCFpc0VxdWFsKG5ld0NvbG9yTW9kZSwgcHJldkNvbG9yTW9kZS5jdXJyZW50KSkge1xuICAgICAgc2V0Q29sb3JNb2RlKG5ld0NvbG9yTW9kZSk7XG4gICAgICBwcmV2Q29sb3JNb2RlLmN1cnJlbnQgPSBuZXdDb2xvck1vZGU7XG4gICAgICBpc1BhcmVudFRoZW1lLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGVdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWlzUGFyZW50VGhlbWUuY3VycmVudCkge1xuICAgICAgc2V0VGhlbWUoZ2V0Q29tcHV0ZWQoc3lzdGVtLCBidWlsZFRoZW1lKG1vZGlmaWNhdGlvbnMsIFwiX1wiLmNvbmNhdChzeXN0ZW0ua2V5KSksIGNvbG9yTW9kZSkpO1xuICAgIH1cbiAgfSwgW2NvbG9yTW9kZSwgc3lzdGVtLCBtb2RpZmljYXRpb25zXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbG9yTW9kZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29sb3JNb2RlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpU3lzdGVtQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBzeXN0ZW1cbiAgfSwgX19fRW1vdGlvbkpTWChFdWlNb2RpZmljYXRpb25zQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBtb2RpZmljYXRpb25zXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIGNoaWxkcmVuKSkpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIHRocm90dGxlID0gZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcbiAgdmFyIHdhaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDUwO1xuICB2YXIgdGltZSA9IERhdGUubm93KCk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRpbWUgKyB3YWl0IC0gRGF0ZS5ub3coKSA8IDApIHtcbiAgICAgIGZuLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgIHRpbWUgPSBEYXRlLm5vdygpO1xuICAgIH1cbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0IH0gZnJvbSAnLi9jdXJyZW50X2JyZWFrcG9pbnQnO1xuLyoqXG4gKiBIb29rIHV0aWwgLyBzeW50YWN0aWNhbCBzdWdhciBmb3IgdXNlQ29udGV4dCgpXG4gKlxuICogVGhpcyBob29rIGlzIGluIGl0cyBvd24gc2VwYXJhdGUgZmlsZSB0byBtYWtlIG1vY2tpbmcgaXRcbiAqIGFzIGEgdGVzdGVudiBlYXN5IGZvciBKZXN0IHVuaXQgdGVzdHNcbiAqL1xuXG5leHBvcnQgdmFyIHVzZUN1cnJlbnRFdWlCcmVha3BvaW50ID0gZnVuY3Rpb24gdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQoKSB7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUNvbnRleHQoQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0KTtcbiAgcmV0dXJuIGN1cnJlbnRCcmVha3BvaW50O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50IH0gZnJvbSAnLi9jdXJyZW50X2JyZWFrcG9pbnRfaG9vayc7XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IHdpbmRvdy5pbm5lcldpZHRoIGFuZCBhbiBhcnJheSBvZiBicmVha3BvaW50IGtleXMsXG4gKiB0aGlzIGhvb2sgc3RvcmVzIHN0YXRlIGFuZCByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIHdpbmRvdy5pbm5lcldpZHRoXG4gKiBmYWxscyB3aXRoaW4gYW55IG9mIHRoZSBuYW1lZCBicmVha3BvaW50cy5cbiAqXG4gKiBAcGFyYW0ge19FdWlUaGVtZUJyZWFrcG9pbnRbXX0gc2l6ZXMgQW4gYXJyYXkgb2YgbmFtZWQgRVVJIGJyZWFrcG9pbnRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVzcG9uc2l2ZSBTb21lIGNvbXBvbmVudHMgaGF2ZSB0aGUgb3B0aW9uIHRvIHR1cm4gb2ZmIHJlc3BvbnNpdmUgYmVoYXZpb3IuXG4gKiAgIFNpbmNlIGhvb2tzIGNhbid0IGJlIGNhbGxlZCBjb25kaXRpb25hbGx5LCBpdCdzIGVhc2llciB0byBwYXNzIHRoZSBjb25kaXRpb24gaW50byB0aGUgaG9va1xuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGN1cnJlbnQgYnJlYWtwb2ludCBuYW1lIGlzIGluY2x1ZGVkIGluIGBzaXplc2BcbiAqL1xuXG5leHBvcnQgdmFyIHVzZUlzV2l0aGluQnJlYWtwb2ludHMgPSBmdW5jdGlvbiB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKHNpemVzKSB7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50KCk7XG4gIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCAmJiBpc1Jlc3BvbnNpdmUgPyBzaXplcy5pbmNsdWRlcyhjdXJyZW50QnJlYWtwb2ludCkgOiBmYWxzZTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQSBET00gbm9kZSwgYSBzZWxlY3RvciBzdHJpbmcgKHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvXG4gKiBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigpYCB0byBmaW5kIHRoZSBET00gbm9kZSksIG9yIGEgZnVuY3Rpb24gdGhhdFxuICogcmV0dXJucyBhIERPTSBub2RlLlxuICovXG5leHBvcnQgdmFyIGZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmID0gZnVuY3Rpb24gZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYoZWxlbWVudFRhcmdldCkge1xuICB2YXIgbm9kZSA9IGVsZW1lbnRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGVsZW1lbnRUYXJnZXQgOiBudWxsO1xuXG4gIGlmICh0eXBlb2YgZWxlbWVudFRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50VGFyZ2V0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudFRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG5vZGUgPSBlbGVtZW50VGFyZ2V0KCk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5leHBvcnQgdmFyIGFsd2F5cyA9IGZ1bmN0aW9uIGFsd2F5cyhfdmFsdWUpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuZXhwb3J0IHZhciBuZXZlciA9IGZ1bmN0aW9uIG5ldmVyKF92YWx1ZSkge1xuICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IHZhciBpc1VuZGVmaW5lZCA9IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufTtcbmV4cG9ydCB2YXIgaXNOdWxsID0gZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn07XG5leHBvcnQgdmFyIGlzTmlsID0gZnVuY3Rpb24gaXNOaWwodmFsdWUpIHtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSB8fCBpc051bGwodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNNb21lbnQgPSBmdW5jdGlvbiBpc01vbWVudCh2YWx1ZSkge1xuICByZXR1cm4gbW9tZW50LmlzTW9tZW50KHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzRGF0ZSA9IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gbW9tZW50LmlzRGF0ZSh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0RhdGVMaWtlID0gZnVuY3Rpb24gaXNEYXRlTGlrZSh2YWx1ZSkge1xuICByZXR1cm4gaXNNb21lbnQodmFsdWUpIHx8IGlzRGF0ZSh2YWx1ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IF9pc0Z1bmN0aW9uIGZyb20gJ2xvZGFzaC9pc0Z1bmN0aW9uJztcbmltcG9ydCBfaXNBcnJheSBmcm9tICdsb2Rhc2gvaXNBcnJheSc7XG5pbXBvcnQgX2lzU3RyaW5nIGZyb20gJ2xvZGFzaC9pc1N0cmluZyc7XG5pbXBvcnQgX2lzQm9vbGVhbiBmcm9tICdsb2Rhc2gvaXNCb29sZWFuJztcbmltcG9ydCBfaXNOdW1iZXIgZnJvbSAnbG9kYXNoL2lzTnVtYmVyJztcbmltcG9ydCBfaXNOYU4gZnJvbSAnbG9kYXNoL2lzTmFOJztcbmltcG9ydCBfaXNPYmplY3QgZnJvbSAnbG9kYXNoL2lzT2JqZWN0JzsgLy8gd3JhcCB0aGUgbG9kYXNoIGZ1bmN0aW9ucyB0byBhdm9pZCBoYXZpbmcgbG9kYXNoJ3MgVFMgdHlwZSBkZWZpbml0aW9uIGZyb20gYmVpbmdcbi8vIGV4cG9ydGVkLCB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCB0aGUgbG9kYXNoIG5hbWVzcGFjZSBpZiBvdGhlciB2ZXJzaW9ucyBhcmUgdXNlZFxuXG5leHBvcnQgdmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBfaXNGdW5jdGlvbih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gX2lzQXJyYXkodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNTdHJpbmcgPSBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gX2lzU3RyaW5nKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzQm9vbGVhbiA9IGZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gX2lzQm9vbGVhbih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc051bWJlciA9IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiBfaXNOdW1iZXIodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNOYU4gPSBmdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICByZXR1cm4gX2lzTmFOKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIF9pc09iamVjdCh2YWx1ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuZXhwb3J0IHZhciBmb3JtYXRCb29sZWFuID0gZnVuY3Rpb24gZm9ybWF0Qm9vbGVhbih2YWx1ZSkge1xuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfcmVmJHllcyA9IF9yZWYueWVzLFxuICAgICAgeWVzID0gX3JlZiR5ZXMgPT09IHZvaWQgMCA/ICdZZXMnIDogX3JlZiR5ZXMsXG4gICAgICBfcmVmJG5vID0gX3JlZi5ubyxcbiAgICAgIG5vID0gX3JlZiRubyA9PT0gdm9pZCAwID8gJ05vJyA6IF9yZWYkbm8sXG4gICAgICBfcmVmJG5pbCA9IF9yZWYubmlsLFxuICAgICAgbmlsID0gX3JlZiRuaWwgPT09IHZvaWQgMCA/ICcnIDogX3JlZiRuaWw7XG5cbiAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgIHJldHVybiBuaWw7XG4gIH1cblxuICByZXR1cm4gdmFsdWUgPyB5ZXMgOiBubztcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgaXNOaWwsIGlzRnVuY3Rpb24sIGlzU3RyaW5nIH0gZnJvbSAnLi4vcHJlZGljYXRlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxudmFyIGNhbGVuZGFyID0gZnVuY3Rpb24gY2FsZW5kYXIodmFsdWUpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgcmVmVGltZSA9IG9wdGlvbnMucmVmVGltZTtcbiAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuY2FsZW5kYXIocmVmVGltZSwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgdmFyIGRhdGVGb3JtYXRBbGlhc2VzID0ge1xuICBkYXRlOiAnRCBNTU0gWVlZWScsXG4gIGxvbmdEYXRlOiAnREQgTU1NTSBZWVlZJyxcbiAgc2hvcnREYXRlOiAnRCBNTU0gWVknLFxuICBkYXRlVGltZTogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICBsb25nRGF0ZVRpbWU6ICdERCBNTU1NIFlZWVkgSEg6bW06c3MnLFxuICBzaG9ydERhdGVUaW1lOiAnRCBNTU0gWVkgSEg6bW0nLFxuICBkb2JTaG9ydDogJ0RvIE1NTSBZWScsXG4gIGRvYkxvbmc6ICdEbyBNTU1NIFlZWVknLFxuICBpc284NjAxOiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaJyxcbiAgY2FsZW5kYXI6IGNhbGVuZGFyLFxuICBjYWxlbmRhckRhdGVUaW1lOiBmdW5jdGlvbiBjYWxlbmRhckRhdGVUaW1lKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNhbGVuZGFyKHZhbHVlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIEg6bW1BJyxcbiAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIEg6bW1BJyxcbiAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIEg6bW1BJyxcbiAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBIOm1tQScsXG4gICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gSDptbUEnLFxuICAgICAgc2FtZUVsc2U6ICdEbyBNTU0gWVlZWSBbYXRdIEg6bW1BJ1xuICAgIH0sIG9wdGlvbnMpKTtcbiAgfSxcbiAgY2FsZW5kYXJEYXRlOiBmdW5jdGlvbiBjYWxlbmRhckRhdGUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2FsZW5kYXIodmFsdWUsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgc2FtZURheTogJ1tUb2RheV0nLFxuICAgICAgbmV4dERheTogJ1tUb21vcnJvd10nLFxuICAgICAgbmV4dFdlZWs6ICdkZGRkJyxcbiAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5XScsXG4gICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkJyxcbiAgICAgIHNhbWVFbHNlOiAnRG8gTU1NIFlZWVknXG4gICAgfSwgb3B0aW9ucykpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZ0FEYXRlRm9ybWF0KHgpIHtcbiAgcmV0dXJuIGRhdGVGb3JtYXRBbGlhc2VzLmhhc093blByb3BlcnR5KHgpO1xufVxuXG5mdW5jdGlvbiBpbnN0YW5jZU9mRm9ybWF0RGF0ZUNvbmZpZyh4KSB7XG4gIHJldHVybiBfdHlwZW9mKHgpID09PSAnb2JqZWN0JyAmJiAoeC5oYXNPd25Qcm9wZXJ0eSgnZm9ybWF0JykgfHwgeC5oYXNPd25Qcm9wZXJ0eSgnbmlsJykgfHwgeC5oYXNPd25Qcm9wZXJ0eSgnb3B0aW9ucycpKTtcbn1cblxuZXhwb3J0IHZhciBmb3JtYXREYXRlID0gZnVuY3Rpb24gZm9ybWF0RGF0ZSh2YWx1ZSkge1xuICB2YXIgZGF0ZUZvcm1hdEtleU9yQ29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnZGF0ZVRpbWUnO1xuXG4gIGlmIChpc1N0cmluZyhkYXRlRm9ybWF0S2V5T3JDb25maWcpKSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHZhciBkYXRlRm9ybWF0U3RyT3JGdW5jID0gaXNTdHJpbmdBRGF0ZUZvcm1hdChkYXRlRm9ybWF0S2V5T3JDb25maWcpID8gZGF0ZUZvcm1hdEFsaWFzZXNbZGF0ZUZvcm1hdEtleU9yQ29uZmlnXSA6IGRhdGVGb3JtYXRLZXlPckNvbmZpZztcblxuICAgIGlmIChpc0Z1bmN0aW9uKGRhdGVGb3JtYXRTdHJPckZ1bmMpKSB7XG4gICAgICByZXR1cm4gZGF0ZUZvcm1hdFN0ck9yRnVuYyh2YWx1ZSwge30pO1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhkYXRlRm9ybWF0U3RyT3JGdW5jKSkge1xuICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuZm9ybWF0KGRhdGVGb3JtYXRTdHJPckZ1bmMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbnN0YW5jZU9mRm9ybWF0RGF0ZUNvbmZpZyhkYXRlRm9ybWF0S2V5T3JDb25maWcpKSB7XG4gICAgdmFyIF9kYXRlRm9ybWF0S2V5T3JDb25maSA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5mb3JtYXQsXG4gICAgICAgIGZvcm1hdCA9IF9kYXRlRm9ybWF0S2V5T3JDb25maSA9PT0gdm9pZCAwID8gJ2RhdGVUaW1lJyA6IF9kYXRlRm9ybWF0S2V5T3JDb25maSxcbiAgICAgICAgX2RhdGVGb3JtYXRLZXlPckNvbmZpMiA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5uaWwsXG4gICAgICAgIG5pbCA9IF9kYXRlRm9ybWF0S2V5T3JDb25maTIgPT09IHZvaWQgMCA/ICcnIDogX2RhdGVGb3JtYXRLZXlPckNvbmZpMixcbiAgICAgICAgb3B0aW9ucyA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5vcHRpb25zO1xuICAgIHZhciBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdEFsaWFzZXNbZm9ybWF0XSB8fCBmb3JtYXQ7XG5cbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbmlsO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGRhdGVGb3JtYXQpKSB7XG4gICAgICByZXR1cm4gZGF0ZUZvcm1hdCh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGRhdGVGb3JtYXQpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGZvcm1hdCB2YWx1ZSB1c2luZyBkYXRlRm9ybWF0S2V5T3JDb25maWc6IFwiLmNvbmNhdChkYXRlRm9ybWF0S2V5T3JDb25maWcpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgbnVtZXJhbCBmcm9tICdudW1lcmFsJztcbmltcG9ydCB7IGlzTmlsLCBpc1N0cmluZyB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG52YXIgbnVtYmVyRm9ybWF0QWxpYXNlcyA9IHtcbiAgZGVjaW1hbDE6ICcwLDAuMCcsXG4gIGRlY2ltYWwyOiAnMCwwLjAwJyxcbiAgZGVjaW1hbDM6ICcwLDAuMDAwJyxcbiAgb3JkaW5hbDogJzBvJyxcbiAgaW50ZWdlcjogJzAsMCdcbn07XG5leHBvcnQgdmFyIGZvcm1hdE51bWJlciA9IGZ1bmN0aW9uIGZvcm1hdE51bWJlcih2YWx1ZSkge1xuICB2YXIgbnVtYmVyRm9ybWF0T3JDb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgZm9ybWF0O1xuICB2YXIgbmlsID0gJyc7XG4gIHZhciByb3VuZDtcblxuICBpZiAoaXNTdHJpbmcobnVtYmVyRm9ybWF0T3JDb25maWcpKSB7XG4gICAgZm9ybWF0ID0gbnVtYmVyRm9ybWF0T3JDb25maWc7XG4gIH0gZWxzZSB7XG4gICAgZm9ybWF0ID0gbnVtYmVyRm9ybWF0T3JDb25maWcuZm9ybWF0O1xuICAgIG5pbCA9IG51bWJlckZvcm1hdE9yQ29uZmlnLm5pbCB8fCAnJztcbiAgICByb3VuZCA9IG51bWJlckZvcm1hdE9yQ29uZmlnLnJvdW5kO1xuICB9XG5cbiAgaWYgKCFmb3JtYXQpIHtcbiAgICByZXR1cm4gaXNOaWwodmFsdWUpID8gbmlsIDogdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZhciByb3VuZGluZ0Z1bmMgPSByb3VuZCA/IE1hdGgucm91bmQgOiBNYXRoLmZsb29yO1xuICB2YXIgbnVtYmVyRm9ybWF0ID0gbnVtYmVyRm9ybWF0QWxpYXNlc1tmb3JtYXRdIHx8IGZvcm1hdDtcbiAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/IG5pbCA6IG51bWVyYWwodmFsdWUpLmZvcm1hdChudW1iZXJGb3JtYXQsIHJvdW5kaW5nRnVuYyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuZXhwb3J0IHZhciBmb3JtYXRUZXh0ID0gZnVuY3Rpb24gZm9ybWF0VGV4dCh2YWx1ZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgIG5pbDogJydcbiAgfTtcbiAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/IG9wdGlvbnMubmlsIDogdmFsdWUudG9TdHJpbmcoKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBpc05pbCwgaXNBcnJheSwgaXNCb29sZWFuLCBpc0RhdGUsIGlzTmFOLCBpc051bWJlciwgaXNTdHJpbmcgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgZm9ybWF0Qm9vbGVhbiB9IGZyb20gJy4vZm9ybWF0X2Jvb2xlYW4nO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJy4vZm9ybWF0X2RhdGUnO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSAnLi9mb3JtYXRfbnVtYmVyJztcbmltcG9ydCB7IGZvcm1hdFRleHQgfSBmcm9tICcuL2Zvcm1hdF90ZXh0JztcbmV4cG9ydCB2YXIgZm9ybWF0QXV0byA9IGZ1bmN0aW9uIGZvcm1hdEF1dG8odmFsdWUpIHtcbiAgaWYgKGlzTmlsKHZhbHVlKSB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdFRleHQodmFsdWUpO1xuICB9XG5cbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSk7XG4gIH1cblxuICBpZiAoaXNCb29sZWFuKHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXRCb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChpc051bWJlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEF1dG8oaXRlbSk7XG4gICAgfSkuam9pbignLCAnKSA6IGZvcm1hdEF1dG8odmFsdWUpO1xuICB9IC8vIFRPRE8gbm90IHN1cmUgaWYgd2Ugd2FudCB0aGF0Li4gdGhlICgrKSBpcyB0aGF0IHdlIHNob3cgc29tZXRoaW5nLCB0aGUgKC0pIGlzIHRoYXQgaXQncyB2ZXJ5IHRlY2huaWNhbFxuXG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG52YXIgaXNFbGFzdGljSG9zdCA9IC9eKFthLXpBLVowLTldK1xcLikqZWxhc3RpY1xcLmNvJC87IC8vIEluIG9yZGVyIGZvciB0aGUgZG9tYWluIHRvIGJlIHNlY3VyZSBpdCBuZWVkcyB0byBiZSBpbiBhIHBhcnNhYmxlIGZvcm1hdCxcbi8vIHdpdGggdGhlIHByb3RvY29sIG9mIGh0dHA6IG9yIGh0dHBzOiBhbmQgdGhlIGhvc3QgbWF0Y2hpbmcgZWxhc3RpYy5jbyBvclxuLy8gb2Ygb25lIGl0cyBzdWJkb21haW5zXG5cbmV4cG9ydCB2YXIgaXNEb21haW5TZWN1cmUgPSBmdW5jdGlvbiBpc0RvbWFpblNlY3VyZSgpIHtcbiAgdmFyIHVybCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XG5cbiAgdHJ5IHtcbiAgICB2YXIgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIHZhciBwcm90b2NvbE1hdGNoZXMgPSBwYXJzZWQucHJvdG9jb2wgPT09ICdodHRwOicgfHwgcGFyc2VkLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgICB2YXIgZG9tYWluTWF0Y2hlcyA9ICEhcGFyc2VkLmhvc3QubWF0Y2goaXNFbGFzdGljSG9zdCk7XG4gICAgcmV0dXJuIHByb3RvY29sTWF0Y2hlcyAmJiBkb21haW5NYXRjaGVzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIFNlY3VyZXMgb3V0Ym91bmQgbGlua3MuIEZvciBtb3JlIGluZm86XG4gKiBodHRwczovL3d3dy5qaXRiaXQuY29tL2FsZXhibG9nLzI1Ni10YXJnZXRibGFuay0tLXRoZS1tb3N0LXVuZGVyZXN0aW1hdGVkLXZ1bG5lcmFiaWxpdHktZXZlci9cbiAqL1xuaW1wb3J0IHsgaXNEb21haW5TZWN1cmUgfSBmcm9tICcuLi91cmwnO1xuZXhwb3J0IHZhciBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgPSBmdW5jdGlvbiBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoX3JlZikge1xuICB2YXIgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIF9yZWYkdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICB0YXJnZXQgPSBfcmVmJHRhcmdldCA9PT0gdm9pZCAwID8gJycgOiBfcmVmJHRhcmdldCxcbiAgICAgIHJlbCA9IF9yZWYucmVsO1xuICB2YXIgaXNFbGFzdGljSHJlZiA9ICEhaHJlZiAmJiBpc0RvbWFpblNlY3VyZShocmVmKTtcbiAgdmFyIHJlbFBhcnRzID0gISFyZWwgPyByZWwuc3BsaXQoJyAnKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gISFwYXJ0Lmxlbmd0aCAmJiBwYXJ0ICE9PSAnbm9yZWZlcnJlcic7XG4gIH0pIDogW107XG5cbiAgaWYgKCFpc0VsYXN0aWNIcmVmKSB7XG4gICAgcmVsUGFydHMucHVzaCgnbm9yZWZlcnJlcicpO1xuICB9XG5cbiAgaWYgKHRhcmdldC5pbmNsdWRlcygnX2JsYW5rJykgJiYgcmVsUGFydHMuaW5kZXhPZignbm9vcGVuZXInKSA9PT0gLTEpIHtcbiAgICByZWxQYXJ0cy5wdXNoKCdub29wZW5lcicpO1xuICB9XG5cbiAgcmV0dXJuIHJlbFBhcnRzLnNvcnQoKS5qb2luKCcgJykudHJpbSgpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQVNDID0gJ2FzYyc7XG52YXIgREVTQyA9ICdkZXNjJztcbmV4cG9ydCB2YXIgU29ydERpcmVjdGlvbiA9IE9iamVjdC5mcmVlemUoe1xuICBBU0M6IEFTQyxcbiAgREVTQzogREVTQyxcbiAgaXNBc2M6IGZ1bmN0aW9uIGlzQXNjKGRpcmVjdGlvbikge1xuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IEFTQztcbiAgfSxcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZShkaXJlY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc0FzYyhkaXJlY3Rpb24pID8gREVTQyA6IEFTQztcbiAgfVxufSk7XG5leHBvcnQgdmFyIFNvcnREaXJlY3Rpb25UeXBlID0gUHJvcFR5cGVzLm9uZU9mKFtBU0MsIERFU0NdKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBfZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IF9vbWl0IGZyb20gJ2xvZGFzaC9vbWl0JzsgLy8gd3JhcCB0aGUgbG9kYXNoIGZ1bmN0aW9ucyB0byBhdm9pZCBoYXZpbmcgbG9kYXNoJ3MgVFMgdHlwZSBkZWZpbml0aW9uIGZyb20gYmVpbmdcbi8vIGV4cG9ydGVkLCB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCB0aGUgbG9kYXNoIG5hbWVzcGFjZSBpZiBvdGhlciB2ZXJzaW9ucyBhcmUgdXNlZFxuXG5leHBvcnQgdmFyIGdldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4gX2dldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSk7XG59O1xuZXhwb3J0IHZhciBvbWl0ID0gZnVuY3Rpb24gb21pdChvYmplY3QsIHBhdGhzKSB7XG4gIHJldHVybiBfb21pdChvYmplY3QsIHBhdGhzKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi9zb3J0X2RpcmVjdGlvbic7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICcuLi9vYmplY3RzJztcbmV4cG9ydCB2YXIgQ29tcGFyYXRvcnMgPSBPYmplY3QuZnJlZXplKHtcbiAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogU29ydERpcmVjdGlvbi5BU0M7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICAgIC8vIEphdmFTY3JpcHQncyBjb21wYXJpc29uIG9mIG51bGwvdW5kZWZpbmVkIChhbmQgc29tZSBvdGhlcnMgbm90IGhhbmRsZWQgaGVyZSkgdmFsdWVzIGFsd2F5cyByZXR1cm5zIGBmYWxzZWBcbiAgICAgIC8vIChodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLyNzZWMtYWJzdHJhY3QtcmVsYXRpb25hbC1jb21wYXJpc29uKVxuICAgICAgLy8gcmVzdWx0aW5nIGluIGNhc2VzIHdoZXJlIHYxIDwgdjIgYW5kIHYxID4gdjIgYXJlIGJvdGggZmFsc2UuXG4gICAgICAvLyBUaGlzIGxlYWRzIHRvIHVucHJlZGljdGFibGUgc29ydGluZyByZXN1bHRzIGluIG11bHRpcGxlIEpTIGVuZ2luZSBzb3J0aW5nIGFsZ29yaXRobXNcbiAgICAgIC8vIHdoaWNoIGNhdXNlcyB1bnByZWRpY3RhYmxlIHVzZXIgZXhwZXJpZW5jZXMuXG4gICAgICAvLyBJbnN0ZWFkOlxuICAgICAgLy8gKiAxLiBwdXNoIHVuZGVmaW5lZC9udWxsIHZhbHVlcyB0byB0aGUgZW5kIG9mIHRoZSBzb3J0ZWQgbGlzdCwgX3JlZ2FyZGxlc3Mgb2Ygc29ydCBkaXJlY3Rpb25fXG4gICAgICAvLyAgICAobm9uLXNvcnRhYmxlIHZhbHVlcyBhbHdheXMgYXBwZWFyIGF0IHRoZSBlbmQsIGFuZCBzb3J0YWJsZSB2YWx1ZXMgYXJlIHNvcnRlZCBhdCB0aGUgdG9wKVxuICAgICAgLy8gKiAyLiByZXBvcnQgdW5kZWZpbmVkL251bGwgdmFsdWVzIGFzIGVxdWFsXG4gICAgICAvLyAqIDMuIHdoZW4gYm90aCB2YWx1ZXMgYXJlIGNvbXBhcmFibGUgdGhleSBhcmUgc29ydGVkIG5vcm1hbGx5XG4gICAgICB2YXIgdjFJc0NvbXBhcmFibGUgPSB2MSAhPSBudWxsO1xuICAgICAgdmFyIHYySXNDb21wYXJhYmxlID0gdjIgIT0gbnVsbDsgLy8gKiAxLlxuXG4gICAgICBpZiAodjFJc0NvbXBhcmFibGUgJiYgIXYySXNDb21wYXJhYmxlKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF2MUlzQ29tcGFyYWJsZSAmJiB2MklzQ29tcGFyYWJsZSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gLy8gKiAyLlxuXG5cbiAgICAgIGlmICghdjFJc0NvbXBhcmFibGUgJiYgIXYySXNDb21wYXJhYmxlKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSAvLyAqIDMuXG5cblxuICAgICAgaWYgKHYxID09PSB2Mikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IHYxID4gdjIgPyAxIDogLTE7XG4gICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5pc0FzYyhkaXJlY3Rpb24pID8gcmVzdWx0IDogLTEgKiByZXN1bHQ7XG4gICAgfTtcbiAgfSxcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZShjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yKHYyLCB2MSk7XG4gICAgfTtcbiAgfSxcbiAgdmFsdWU6IGZ1bmN0aW9uIChfdmFsdWUpIHtcbiAgICBmdW5jdGlvbiB2YWx1ZShfeCwgX3gyKSB7XG4gICAgICByZXR1cm4gX3ZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgdmFsdWUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3ZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfTtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfShmdW5jdGlvbiAodmFsdWVDYWxsYmFjaywgY29tcGFyYXRvcikge1xuICAgIGlmICghY29tcGFyYXRvcikge1xuICAgICAgY29tcGFyYXRvciA9IHRoaXMuZGVmYXVsdChTb3J0RGlyZWN0aW9uLkFTQyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvMSwgbzIpIHtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yKHZhbHVlQ2FsbGJhY2sobzEpLCB2YWx1ZUNhbGxiYWNrKG8yKSk7XG4gICAgfTtcbiAgfSksXG4gIHByb3BlcnR5OiBmdW5jdGlvbiBwcm9wZXJ0eShwcm9wLCBjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZ2V0KHZhbHVlLCBwcm9wKTtcbiAgICB9LCBjb21wYXJhdG9yKTtcbiAgfVxufSk7IiwgImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgUE9TSVRJT05TID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbnZhciByZWxhdGVkRGltZW5zaW9uID0ge1xuICB0b3A6ICdoZWlnaHQnLFxuICByaWdodDogJ3dpZHRoJyxcbiAgYm90dG9tOiAnaGVpZ2h0JyxcbiAgbGVmdDogJ3dpZHRoJ1xufTtcbnZhciBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZSA9IHtcbiAgaGVpZ2h0OiAndG9wJyxcbiAgd2lkdGg6ICdsZWZ0J1xufTtcbnZhciBwb3NpdGlvbkNvbXBsZW1lbnRzID0ge1xuICB0b3A6ICdib3R0b20nLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICBsZWZ0OiAncmlnaHQnXG59OyAvLyBhbHdheXMgcmVzb2x2aW5nIHRvIHRvcC9sZWZ0IGlzIHRha2VuIGFkdmFudGFnZSBvZiBieSBrbm93aW5nIHRoZXkgYXJlIHRoZVxuLy8gbWluaW11bSBlZGdlcyBvZiB0aGUgYm91bmRpbmcgYm94XG5cbnZhciBwb3NpdGlvblN1YnN0aXR1dGVzID0ge1xuICB0b3A6ICdsZWZ0JyxcbiAgcmlnaHQ6ICd0b3AnLFxuICBib3R0b206ICdsZWZ0JyxcbiAgbGVmdDogJ3RvcCdcbn07XG5cbnZhciBnZXRCdWZmZXJWYWx1ZXMgPSBmdW5jdGlvbiBnZXRCdWZmZXJWYWx1ZXMoYnVmZmVyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGJ1ZmZlcikpIHtcbiAgICB2YXIgX2J1ZmZlciA9IF9zbGljZWRUb0FycmF5KGJ1ZmZlciwgNCksXG4gICAgICAgIHRvcEJ1ZmZlciA9IF9idWZmZXJbMF0sXG4gICAgICAgIHJpZ2h0QnVmZmVyID0gX2J1ZmZlclsxXSxcbiAgICAgICAgYm90dG9tQnVmZmVyID0gX2J1ZmZlclsyXSxcbiAgICAgICAgbGVmdEJ1ZmZlciA9IF9idWZmZXJbM107XG5cbiAgICByZXR1cm4gW3RvcEJ1ZmZlciwgcmlnaHRCdWZmZXIsIGJvdHRvbUJ1ZmZlciwgbGVmdEJ1ZmZlcl07XG4gIH1cblxuICByZXR1cm4gW2J1ZmZlciwgYnVmZmVyLCBidWZmZXIsIGJ1ZmZlcl07XG59O1xuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbmluZyAocmVsYXRpdmUgdG8gZG9jdW1lbnQuYm9keSkgdG8gcGxhY2UgYSBwb3BvdmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gYW5jaG9yIHtIVE1MRWxlbWVudH0gRWxlbWVudCB0byBhbmNob3IgdGhlIHBvcG92ZXIgdG9cbiAqIEBwYXJhbSBwb3BvdmVyIHtIVE1MRWxlbWVudH0gRWxlbWVudCBjb250YWluaW5nIHRoZSBwb3BvdmVyIGNvbnRlbnRcbiAqIEBwYXJhbSBwb3NpdGlvbiB7c3RyaW5nfSBQb3NpdGlvbiB0aGUgdXNlciB3YW50cy4gT25lIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHBhcmFtIFtmb3JjZVBvc2l0aW9uXSB7Ym9vbGVhbn0gSWYgdHJ1ZSwgdXNlIG9ubHkgdGhlIHByb3ZpZGVkIGBwb3NpdGlvbmAgdmFsdWUgYW5kIGRvbid0IHRyeSBhbnkgb3RoZXIgcG9zaXRpb25cbiAqIEBwYXJhbSBbYWxpZ25dIHtzdHJpbmd9IENyb3NzLWF4aXMgYWxpZ25tZW50LiBPbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gW2J1ZmZlcj0xNl0ge251bWJlcn0gTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyXG4gKiBAcGFyYW0gW29mZnNldD0wXSB7bnVtYmVyfSBEaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYW5jaG9yXG4gKiBAcGFyYW0gW2FsbG93Q3Jvc3NBeGlzPXRydWVdIHtib29sZWFufSBXaGV0aGVyIHRvIGFsbG93IHRoZSBwb3BvdmVyIHRvIGJlIHBvc2l0aW9uZWQgb24gdGhlIGNyb3NzLWF4aXNcbiAqIEBwYXJhbSBbY29udGFpbmVyXSB7SFRNTEVsZW1lbnR9IEVsZW1lbnQgdGhlIHBvcG92ZXIgbXVzdCBiZSBjb25zdHJhaW5lZCB0byBmaXQgd2l0aGluXG4gKiBAcGFyYW0gW2Fycm93Q29uZmlnXSB7e2Fycm93V2lkdGg6IG51bWJlciwgYXJyb3dCdWZmZXI6IG51bWJlcn19IElmXG4gKiAgcHJlc2VudCwgZGVzY3JpYmVzIHRoZSBzaXplICYgY29uc3RyYWludHMgZm9yIGFuIGFycm93IGVsZW1lbnQsIGFuZCB0aGVcbiAqICBmdW5jdGlvbiByZXR1cm4gdmFsdWUgd2lsbCBpbmNsdWRlIGFuIGBhcnJvd2AgcGFyYW0gd2l0aCBwb3NpdGlvbiBkZXRhaWxzXG4gKlxuICogQHJldHVybnMge0ZpbmRQb3BvdmVyUG9zaXRpb25SZXN1bHR9IGFic29sdXRlIHBhZ2UgY29vcmRpbmF0ZXMgZm9yIHRoZVxuICogcG9wb3ZlciwgYW5kIHRoZSBwbGFjZW1lbnQncyByZWxhdGlvbiB0byB0aGUgYW5jaG9yIG9yIHVuZGVmaW5lZFxuICogdGhlcmUncyBubyByb29tLlxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQb3BvdmVyUG9zaXRpb24oX3JlZikge1xuICB2YXIgYW5jaG9yID0gX3JlZi5hbmNob3IsXG4gICAgICBwb3BvdmVyID0gX3JlZi5wb3BvdmVyLFxuICAgICAgYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgICAgcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgICAgZm9yY2VQb3NpdGlvbiA9IF9yZWYuZm9yY2VQb3NpdGlvbixcbiAgICAgIF9yZWYkYnVmZmVyID0gX3JlZi5idWZmZXIsXG4gICAgICBidWZmZXIgPSBfcmVmJGJ1ZmZlciA9PT0gdm9pZCAwID8gMTYgOiBfcmVmJGJ1ZmZlcixcbiAgICAgIF9yZWYkb2Zmc2V0ID0gX3JlZi5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfcmVmJG9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkb2Zmc2V0LFxuICAgICAgX3JlZiRhbGxvd0Nyb3NzQXhpcyA9IF9yZWYuYWxsb3dDcm9zc0F4aXMsXG4gICAgICBhbGxvd0Nyb3NzQXhpcyA9IF9yZWYkYWxsb3dDcm9zc0F4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGFsbG93Q3Jvc3NBeGlzLFxuICAgICAgY29udGFpbmVyID0gX3JlZi5jb250YWluZXIsXG4gICAgICBhcnJvd0NvbmZpZyA9IF9yZWYuYXJyb3dDb25maWcsXG4gICAgICByZXR1cm5Cb3VuZGluZ0JveCA9IF9yZWYucmV0dXJuQm91bmRpbmdCb3g7XG4gIC8vIGZpbmQgdGhlIHNjcmVlbi1yZWxhdGl2ZSBib3VuZGluZyBib3hlcyBvZiB0aGUgYW5jaG9yLCBwb3BvdmVyLCBhbmQgY29udGFpbmVyXG4gIHZhciBhbmNob3JCb3VuZGluZ0JveCA9IGdldEVsZW1lbnRCb3VuZGluZ0JveChhbmNob3IpO1xuICB2YXIgcG9wb3ZlckJvdW5kaW5nQm94ID0gZ2V0RWxlbWVudEJvdW5kaW5nQm94KHBvcG92ZXIpOyAvLyBjYWxjdWxhdGUgdGhlIHdpbmRvdydzIGJvdW5kc1xuICAvLyB3aW5kb3cuKGlubmVyV2lkdGh8aW5uZXJIZWlnaHQpIGRvIG5vdCBhY2NvdW50IGZvciBzY3JvbGxiYXJzXG4gIC8vIHNvIHByZWZlciB0aGUgY2xpZW50V2lkdGgvY2xpZW50SGVpZ2h0IG9mIHRoZSBET00gaWYgYXZhaWxhYmxlXG5cbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgd2luZG93LmlubmVyV2lkdGg7XG4gIHZhciBkb2N1bWVudEhlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgd2luZG93LmlubmVySGVpZ2h0O1xuICB2YXIgd2luZG93Qm91bmRpbmdCb3ggPSB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiBkb2N1bWVudFdpZHRoLFxuICAgIGJvdHRvbTogZG9jdW1lbnRIZWlnaHQsXG4gICAgbGVmdDogMCxcbiAgICBoZWlnaHQ6IGRvY3VtZW50SGVpZ2h0LFxuICAgIHdpZHRoOiBkb2N1bWVudFdpZHRoXG4gIH07IC8vIGlmIG5vIGNvbnRhaW5lciBlbGVtZW50IGlzIGdpdmVuIGZhbGwgYmFjayB0byB1c2luZyB0aGUgd2luZG93IHZpZXdwb3J0XG5cbiAgdmFyIGNvbnRhaW5lckJvdW5kaW5nQm94ID0gY29udGFpbmVyID8gZ2V0RWxlbWVudEJvdW5kaW5nQm94KGNvbnRhaW5lcikgOiB3aW5kb3dCb3VuZGluZ0JveDtcbiAgLyoqXG4gICAqIGBwb3NpdGlvbmAgd2FzIHNwZWNpZmllZCBieSB0aGUgZnVuY3Rpb24gY2FsbGVyIGFuZCBpcyBhIHN0cm9uZyBoaW50XG4gICAqIGFzIHRvIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24gb2YgdGhlIHBvcG92ZXIgcmVsYXRpdmUgdG8gdGhlIGFuY2hvci5cbiAgICogSG93ZXZlciwgd2Ugc3Ryb25nbHkgcHJlZmVyIHNob3dpbmcgYWxsIG9mIHRoZSBwb3BvdmVyIGNvbnRlbnQgd2l0aGluXG4gICAqIHRoZSB3aW5kb3crY29udGFpbmVyIGJvdW5kYXJ5IGFuZCB3aWxsIGl0ZXJhdGUgb3ZlciB0aGUgZm91clxuICAgKiBwb3NzaWJsZSBzaWRlcyB1bnRpbCBhIHBlcmZlY3QgZml0IGlzIGxvY2F0ZWQuIElmIG5vbmUgb2YgdGhlIGxvY2F0aW9uc1xuICAgKiBmdWxseSBjb250YWluIHBvcG92ZXIsIHRoZSBsb2NhdGlvbiB3aXRoIHRoZSBiZXN0IGZpdCBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogVGhpcyBhcHByb2FjaCBmaXJzdCBjaGVja3MgdGhlIHByZWZlcnJlZCBgcG9zaXRpb25gLCB0aGVuIGl0cyBvcHBvc2l0ZVxuICAgKiBhbG9uZyB0aGUgc2FtZSBheGlzLCBuZXh0IGEgbG9jYXRpb24gb24gdGhlIGNyb3NzLWF4aXMsIGFuZCBmaW5hbGx5IGl0XG4gICAqIHRlc3RzIHRoZSByZW1haW5pbmcgcG9zaXRpb24uXG4gICAqXG4gICAqIGUuZy5cbiAgICogaWYgcG9zaXRpb24gPSBcInRvcFwiIHRoZSBvcmRlciBpcyB0b3AsIGJvdHRvbSwgbGVmdCByaWdodFxuICAgKiBpZiBwb3NpdGlvbiA9IFwicmlnaHRcIiB0aGUgb3JkZXIgaXMgcmlnaHQsIGxlZnQsIHRvcCwgYm90dG9tXG4gICAqL1xuICAvLyBUcnkgdGhlIHVzZXItZGVzaXJlZCBwb3NpdGlvbiBmaXJzdC5cblxuICB2YXIgaXRlcmF0aW9uUG9zaXRpb25zID0gW3Bvc2l0aW9uXTsgLy8ga2VlcCB1c2VyLWRlZmluZWQgYWxpZ25tZW50IGluIHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMuXG5cbiAgdmFyIGl0ZXJhdGlvbkFsaWdubWVudHMgPSBbYWxpZ25dO1xuXG4gIGlmIChmb3JjZVBvc2l0aW9uICE9PSB0cnVlKSB7XG4gICAgaXRlcmF0aW9uUG9zaXRpb25zLnB1c2gocG9zaXRpb25Db21wbGVtZW50c1twb3NpdGlvbl0pOyAvLyBUcnkgdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24uXG5cbiAgICBpdGVyYXRpb25BbGlnbm1lbnRzLnB1c2goYWxpZ24pOyAvLyBrZWVwIHVzZXItZGVmaW5lZCBhbGlnbm1lbnQgaW4gdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24uXG5cbiAgICBpZiAoYWxsb3dDcm9zc0F4aXMpIHtcbiAgICAgIGl0ZXJhdGlvblBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dLCAvLyBTd2l0Y2ggdG8gdGhlIGNyb3NzIGF4aXMuXG4gICAgICBwb3NpdGlvbkNvbXBsZW1lbnRzW3Bvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dXSAvLyBUcnkgdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24gb24gdGhlIGNyb3NzIGF4aXMuXG4gICAgICApO1xuICAgICAgaXRlcmF0aW9uQWxpZ25tZW50cy5wdXNoKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsgLy8gZGlzY2FyZCBkZXNpcmVkIGFsaWdubWVudCBvbiBjcm9zcy1heGlzXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHBvc2l0aW9uIGlzIGZvcmNlZCwgaWYgaXQgY29uZmxpY3RzIHdpdGggdGhlIGFsaWdubWVudCB0aGVuIHJlc2V0IGFsaWduIHRvIGBudWxsYFxuICAgIC8vIGUuZy4gb3JpZ2luYWwgcGxhY2VtZW50IHJlcXVlc3QgZm9yIGBkb3duTGVmdGAgaXMgbW92ZWQgdG8gdGhlIGBsZWZ0YCBzaWRlLCBmdXR1cmUgY2FsbHNcbiAgICAvLyB3aWxsIHBvc2l0aW9uIGFuZCBhbGlnbiBgbGVmdGAsIGFuZCBgbGVmdExlZnRgIGlzIG5vdCBhIHZhbGlkIHBsYWNlbWVudFxuICAgIGlmIChwb3NpdGlvbiA9PT0gYWxpZ24gfHwgYWxpZ24gIT09IHVuZGVmaW5lZCAmJiBwb3NpdGlvbiA9PT0gcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl0pIHtcbiAgICAgIGl0ZXJhdGlvbkFsaWdubWVudHNbMF0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJlc3RGaXQgPSB1bmRlZmluZWQ7XG4gIHZhciBiZXN0UG9zaXRpb24gPSBudWxsO1xuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGl0ZXJhdGlvblBvc2l0aW9ucy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdmFyIGl0ZXJhdGlvblBvc2l0aW9uID0gaXRlcmF0aW9uUG9zaXRpb25zW2lkeF07IC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHBvc2l0aW9uIHdpdGggYSBiZXR0ZXIgZml0IHRoYW4gd2UndmUgZm91bmQgc28gZmFyLlxuXG4gICAgdmFyIHNjcmVlbkNvb3JkaW5hdGVzID0gZ2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzKHtcbiAgICAgIHBvc2l0aW9uOiBpdGVyYXRpb25Qb3NpdGlvbixcbiAgICAgIGFsaWduOiBpdGVyYXRpb25BbGlnbm1lbnRzW2lkeF0sXG4gICAgICBhbmNob3JCb3VuZGluZ0JveDogYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgICBwb3BvdmVyQm91bmRpbmdCb3g6IHBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIHdpbmRvd0JvdW5kaW5nQm94OiB3aW5kb3dCb3VuZGluZ0JveCxcbiAgICAgIGNvbnRhaW5lckJvdW5kaW5nQm94OiBjb250YWluZXJCb3VuZGluZ0JveCxcbiAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICBhcnJvd0NvbmZpZzogYXJyb3dDb25maWdcbiAgICB9KTtcblxuICAgIGlmIChiZXN0Rml0ID09PSB1bmRlZmluZWQgfHwgc2NyZWVuQ29vcmRpbmF0ZXMuZml0ID4gYmVzdEZpdCkge1xuICAgICAgYmVzdEZpdCA9IHNjcmVlbkNvb3JkaW5hdGVzLmZpdDtcbiAgICAgIGJlc3RQb3NpdGlvbiA9IHtcbiAgICAgICAgZml0OiBzY3JlZW5Db29yZGluYXRlcy5maXQsXG4gICAgICAgIHBvc2l0aW9uOiBpdGVyYXRpb25Qb3NpdGlvbixcbiAgICAgICAgdG9wOiBzY3JlZW5Db29yZGluYXRlcy50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQsXG4gICAgICAgIGxlZnQ6IHNjcmVlbkNvb3JkaW5hdGVzLmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgICAgIGFycm93OiBzY3JlZW5Db29yZGluYXRlcy5hcnJvd1xuICAgICAgfTsgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCB0aGUgaWRlYWwgZml0LCB1c2UgdGhhdCBwb3NpdGlvbi5cblxuICAgICAgaWYgKGJlc3RGaXQgPT09IDEpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSAvLyBJZiB3ZSBoYXZlbid0IGltcHJvdmVkIHRoZSBmaXQsIHRoZW4gY29udGludWUgb24gYW5kIHRyeSBhIG5ldyBwb3NpdGlvbi5cblxuICB9XG5cbiAgaWYgKGJlc3RQb3NpdGlvbiA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY2FsY3VsYXRlIGJlc3RQb3NpdGlvbicpO1xuICB9XG5cbiAgaWYgKHJldHVybkJvdW5kaW5nQm94KSB7XG4gICAgYmVzdFBvc2l0aW9uLmFuY2hvckJvdW5kaW5nQm94ID0gYW5jaG9yQm91bmRpbmdCb3g7XG4gIH1cblxuICByZXR1cm4gYmVzdFBvc2l0aW9uO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgdGFyZ2V0IHBvc2l0aW9uIGFuZCB0aGUgcG9wb3ZlcidzIHN1cnJvdW5kaW5nIGNvbnRleHQsIHJldHVybnMgZWl0aGVyIGFuXG4gKiBvYmplY3Qgd2l0aCB7dG9wLCBsZWZ0fSBzY3JlZW4gY29vcmRpbmF0ZXMgb3IgYG51bGxgIGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNob3dcbiAqIGNvbnRlbnQgaW4gdGhlIHRhcmdldCBwb3NpdGlvblxuICogQHBhcmFtIHBvc2l0aW9uIHtzdHJpbmd9IHRoZSB0YXJnZXQgcG9zaXRpb24sIG9uZSBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEBwYXJhbSBhbGlnbiB7c3RyaW5nfSB0YXJnZXQgYWxpZ25tZW50IG9uIHRoZSBjcm9zcy1heGlzLCBvbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gYW5jaG9yQm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICogQHBhcmFtIHBvcG92ZXJCb3VuZGluZ0JveCB7T2JqZWN0fSBib3VuZGluZyBib3ggb2YgdGhlIHBvcG92ZXIgZWxlbWVudFxuICogQHBhcmFtIHdpbmRvd0JvdW5kaW5nQm94IHtPYmplY3R9IGJvdW5kaW5nIGJveCBvZiB0aGUgd2luZG93XG4gKiBAcGFyYW0gY29udGFpbmVyQm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSBjb250YWluZXJcbiAqIEBwYXJhbSBbYXJyb3dDb25maWddIHt7YXJyb3dXaWR0aDogbnVtYmVyLCBhcnJvd0J1ZmZlcjogbnVtYmVyfX0gSWYgcHJlc2VudCwgZGVzY3JpYmVzIHRoZSBzaXplICZcbiAqICBjb25zdHJhaW50cyBmb3IgYW4gYXJyb3cgZWxlbWVudCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUgd2lsbCBpbmNsdWRlIGFuIGBhcnJvd2AgcGFyYW1cbiAqICB3aXRoIHBvc2l0aW9uIGRldGFpbHNcbiAqIEBwYXJhbSBbb2Zmc2V0PTBdIHtudW1iZXJ9IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSBbYnVmZmVyPTBdIHtudW1iZXJ9IE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlcidzXG4gKiAgcGxhY2VtZW50IGFuZCB0aGUgY29udGFpbmVyIGVkZ2VcbiAqXG4gKiBAcmV0dXJucyB7R2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzUmVzdWx0fVxuICogIG9iamVjdCB3aXRoIHRvcC9sZWZ0IGNvb3JkaW5hdGVzLCB0aGUgcG9wb3ZlcidzIHJlbGF0aXZlIHBvc2l0aW9uIHRvIHRoZSBhbmNob3IsIGFuZCBob3cgd2VsbCB0aGVcbiAqICBwb3BvdmVyIGZpdHMgaW4gdGhlIGxvY2F0aW9uICgwLjAgLT4gMS4wKSBjb29yZGluYXRlcyBhbmQgdGhlIHBvcG92ZXIncyByZWxhdGl2ZSBwb3NpdGlvbiwgaWZcbiAqICB0aGVyZSBpcyBubyByb29tIGluIHRoaXMgcGxhY2VtZW50IHRoZW4gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzKF9yZWYyKSB7XG4gIHZhciBfcG9wb3ZlclBsYWNlbWVudCwgX3JlZjM7XG5cbiAgdmFyIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBhbGlnbiA9IF9yZWYyLmFsaWduLFxuICAgICAgYW5jaG9yQm91bmRpbmdCb3ggPSBfcmVmMi5hbmNob3JCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveCA9IF9yZWYyLnBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIHdpbmRvd0JvdW5kaW5nQm94ID0gX3JlZjIud2luZG93Qm91bmRpbmdCb3gsXG4gICAgICBjb250YWluZXJCb3VuZGluZ0JveCA9IF9yZWYyLmNvbnRhaW5lckJvdW5kaW5nQm94LFxuICAgICAgYXJyb3dDb25maWcgPSBfcmVmMi5hcnJvd0NvbmZpZyxcbiAgICAgIF9yZWYyJG9mZnNldCA9IF9yZWYyLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9yZWYyJG9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9yZWYyJG9mZnNldCxcbiAgICAgIF9yZWYyJGJ1ZmZlciA9IF9yZWYyLmJ1ZmZlcixcbiAgICAgIGJ1ZmZlciA9IF9yZWYyJGJ1ZmZlciA9PT0gdm9pZCAwID8gMCA6IF9yZWYyJGJ1ZmZlcjtcblxuICAvKipcbiAgICogVGhlIGdvYWwgaXMgdG8gZmluZCB0aGUgYmVzdCB3YXkgdG8gYWxpZ24gdGhlIHBvcG92ZXIgY29udGVudFxuICAgKiBvbiB0aGUgZ2l2ZW4gc2lkZSBvZiB0aGUgYW5jaG9yIGVsZW1lbnQuIFRoZSBwb3BvdmVyIHByZWZlcnNcbiAgICogY2VudGVyaW5nIG9uIHRoZSBhbmNob3IgYnV0IGNhbiBzaGlmdCBhbG9uZyB0aGUgY3Jvc3MtYXhpcyBhcyBuZWVkZWQuXG4gICAqXG4gICAqIFdlIHJldHVybiB0aGUgdG9wL2xlZnQgY29vcmRpbmF0ZXMgdGhhdCBiZXN0IGZpdCB0aGUgcG9wb3ZlciBpbnNpZGVcbiAgICogdGhlIGdpdmVuIGJvdW5kYXJpZXMsIGFuZCBhbHNvIHJldHVybiB0aGUgYGZpdGAgdmFsdWUgd2hpY2ggaW5kaWNhdGVzXG4gICAqIHdoYXQgcGVyY2VudGFnZSBvZiB0aGUgcG9wb3ZlciBpcyB3aXRoaW4gdGhlIGJvdW5kcy5cbiAgICpcbiAgICogZS5nLiBmaW5kaW5nIGEgbG9jYXRpb24gd2hlbiBwb3NpdGlvbj10b3BcbiAgICogdGhlIHByZWZlcnJlZCBsb2NhdGlvbiBpcyBkaXJlY3RseSBvdmVyIHRoZSBhbmNob3JcbiAgICpcbiAgICogICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgfCAgICAgICBwb3BvdmVyICAgICAgICB8XG4gICAqICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICAgICAgICAgdlxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICB8ICAgIGFuY2hvciAgICB8XG4gICAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKlxuICAgKiBidXQgaWYgYW5jaG9yIGRvZXNuJ3QgaGF2ZSBtdWNoIChvciBhbnkpIHJvb20gb24gaXRzIHJpZGUgc2lkZVxuICAgKiB0aGUgcG9wb3ZlciB3aWxsIHNoaWZ0IHRvIHRoZSBsZWZ0XG4gICAqXG4gICAqICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICB8ICAgICAgIHBvcG92ZXIgICAgICAgIHxcbiAgICogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgICAgICAgIHZcbiAgICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgfCAgICBhbmNob3IgICAgfFxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICpcbiAgICovXG4gIHZhciBjcm9zc0F4aXNGaXJzdFNpZGUgPSBwb3NpdGlvblN1YnN0aXR1dGVzW3Bvc2l0aW9uXTsgLy8gXCJ0b3BcIiAtPiBcImxlZnRcIlxuXG4gIHZhciBjcm9zc0F4aXNTZWNvbmRTaWRlID0gcG9zaXRpb25Db21wbGVtZW50c1tjcm9zc0F4aXNGaXJzdFNpZGVdOyAvLyBcImxlZnRcIiAtPiBcInJpZ2h0XCJcblxuICB2YXIgY3Jvc3NBeGlzRGltZW5zaW9uID0gcmVsYXRlZERpbWVuc2lvbltjcm9zc0F4aXNGaXJzdFNpZGVdOyAvLyBcImxlZnRcIiAtPiBcIndpZHRoXCJcblxuICB2YXIgX2dldEJ1ZmZlclZhbHVlcyA9IGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpLFxuICAgICAgX2dldEJ1ZmZlclZhbHVlczIgPSBfc2xpY2VkVG9BcnJheShfZ2V0QnVmZmVyVmFsdWVzLCA0KSxcbiAgICAgIHRvcEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzBdLFxuICAgICAgcmlnaHRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzMlsxXSxcbiAgICAgIGJvdHRvbUJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzJdLFxuICAgICAgbGVmdEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzNdO1xuXG4gIHZhciBfZ2V0Q3Jvc3NBeGlzUG9zaXRpb24gPSBnZXRDcm9zc0F4aXNQb3NpdGlvbih7XG4gICAgY3Jvc3NBeGlzRmlyc3RTaWRlOiBjcm9zc0F4aXNGaXJzdFNpZGUsXG4gICAgY3Jvc3NBeGlzU2Vjb25kU2lkZTogY3Jvc3NBeGlzU2Vjb25kU2lkZSxcbiAgICBjcm9zc0F4aXNEaW1lbnNpb246IGNyb3NzQXhpc0RpbWVuc2lvbixcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgYWxpZ246IGFsaWduLFxuICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgIG9mZnNldDogb2Zmc2V0LFxuICAgIHdpbmRvd0JvdW5kaW5nQm94OiB3aW5kb3dCb3VuZGluZ0JveCxcbiAgICBjb250YWluZXJCb3VuZGluZ0JveDogY29udGFpbmVyQm91bmRpbmdCb3gsXG4gICAgcG9wb3ZlckJvdW5kaW5nQm94OiBwb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgYW5jaG9yQm91bmRpbmdCb3g6IGFuY2hvckJvdW5kaW5nQm94LFxuICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICB9KSxcbiAgICAgIGNyb3NzQXhpc1Bvc2l0aW9uID0gX2dldENyb3NzQXhpc1Bvc2l0aW9uLmNyb3NzQXhpc1Bvc2l0aW9uLFxuICAgICAgY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiA9IF9nZXRDcm9zc0F4aXNQb3NpdGlvbi5jcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuXG4gIHZhciBwcmltYXJ5QXhpc0RpbWVuc2lvbiA9IHJlbGF0ZWREaW1lbnNpb25bcG9zaXRpb25dOyAvLyBcInRvcFwiIC0+IFwiaGVpZ2h0XCJcblxuICB2YXIgcHJpbWFyeUF4aXNQb3NpdGlvbk5hbWUgPSBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZVtwcmltYXJ5QXhpc0RpbWVuc2lvbl07IC8vIFwiaGVpZ2h0XCIgLT4gXCJ0b3BcIlxuXG4gIHZhciBfZ2V0UHJpbWFyeUF4aXNQb3NpdGkgPSBnZXRQcmltYXJ5QXhpc1Bvc2l0aW9uKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgcG9wb3ZlckJvdW5kaW5nQm94OiBwb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgYW5jaG9yQm91bmRpbmdCb3g6IGFuY2hvckJvdW5kaW5nQm94LFxuICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICB9KSxcbiAgICAgIHByaW1hcnlBeGlzUG9zaXRpb24gPSBfZ2V0UHJpbWFyeUF4aXNQb3NpdGkucHJpbWFyeUF4aXNQb3NpdGlvbixcbiAgICAgIHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbiA9IF9nZXRQcmltYXJ5QXhpc1Bvc2l0aS5wcmltYXJ5QXhpc0Fycm93UG9zaXRpb247XG5cbiAgdmFyIHBvcG92ZXJQbGFjZW1lbnQgPSAoX3BvcG92ZXJQbGFjZW1lbnQgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9wb3BvdmVyUGxhY2VtZW50LCBjcm9zc0F4aXNGaXJzdFNpZGUsIGNyb3NzQXhpc1Bvc2l0aW9uKSwgX2RlZmluZVByb3BlcnR5KF9wb3BvdmVyUGxhY2VtZW50LCBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSwgcHJpbWFyeUF4aXNQb3NpdGlvbiksIF9wb3BvdmVyUGxhY2VtZW50KTsgLy8gY2FsY3VsYXRlIHRoZSBmaXQgb2YgdGhlIHBvcG92ZXIgaW4gdGhpcyBsb2NhdGlvblxuICAvLyBmaXQgaXMgaW4gcmFuZ2UgMC4wIC0+IDEuMCBhbmQgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcG92ZXIgd2hpY2ggaXMgdmlzaWJsZSBpbiB0aGlzIGxvY2F0aW9uXG5cbiAgdmFyIGNvbWJpbmVkQm91bmRpbmdCb3ggPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKHdpbmRvd0JvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7IC8vIHNocmluayB0aGUgdmlzaWJsZSBib3VuZGluZyBib3ggYnkgYGJ1ZmZlcmBcbiAgLy8gdG8gY29tcHV0ZSBhIGZpdCB2YWx1ZVxuXG4gIGNvbWJpbmVkQm91bmRpbmdCb3gudG9wICs9IHRvcEJ1ZmZlcjtcbiAgY29tYmluZWRCb3VuZGluZ0JveC5yaWdodCAtPSByaWdodEJ1ZmZlcjtcbiAgY29tYmluZWRCb3VuZGluZ0JveC5ib3R0b20gLT0gYm90dG9tQnVmZmVyO1xuICBjb21iaW5lZEJvdW5kaW5nQm94LmxlZnQgKz0gbGVmdEJ1ZmZlcjtcbiAgdmFyIGZpdCA9IGdldFZpc2libGVGaXQoe1xuICAgIHRvcDogcG9wb3ZlclBsYWNlbWVudC50b3AsXG4gICAgcmlnaHQ6IHBvcG92ZXJQbGFjZW1lbnQubGVmdCArIHBvcG92ZXJCb3VuZGluZ0JveC53aWR0aCxcbiAgICBib3R0b206IHBvcG92ZXJQbGFjZW1lbnQudG9wICsgcG9wb3ZlckJvdW5kaW5nQm94LmhlaWdodCxcbiAgICBsZWZ0OiBwb3BvdmVyUGxhY2VtZW50LmxlZnQsXG4gICAgd2lkdGg6IHBvcG92ZXJCb3VuZGluZ0JveC53aWR0aCxcbiAgICBoZWlnaHQ6IHBvcG92ZXJCb3VuZGluZ0JveC5oZWlnaHRcbiAgfSwgY29tYmluZWRCb3VuZGluZ0JveCk7XG4gIHZhciBhcnJvdyA9IGFycm93Q29uZmlnID8gKF9yZWYzID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfcmVmMywgY3Jvc3NBeGlzRmlyc3RTaWRlLCBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uIC0gcG9wb3ZlclBsYWNlbWVudFtjcm9zc0F4aXNGaXJzdFNpZGVdKSwgX2RlZmluZVByb3BlcnR5KF9yZWYzLCBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSwgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uKSwgX3JlZjMpIDogdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGZpdDogZml0LFxuICAgIHRvcDogcG9wb3ZlclBsYWNlbWVudC50b3AsXG4gICAgbGVmdDogcG9wb3ZlclBsYWNlbWVudC5sZWZ0LFxuICAgIGFycm93OiBhcnJvdyA/IHtcbiAgICAgIGxlZnQ6IGFycm93LmxlZnQsXG4gICAgICB0b3A6IGFycm93LnRvcFxuICAgIH0gOiB1bmRlZmluZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3Jvc3NBeGlzUG9zaXRpb24oX3JlZjQpIHtcbiAgdmFyIGNyb3NzQXhpc0ZpcnN0U2lkZSA9IF9yZWY0LmNyb3NzQXhpc0ZpcnN0U2lkZSxcbiAgICAgIGNyb3NzQXhpc1NlY29uZFNpZGUgPSBfcmVmNC5jcm9zc0F4aXNTZWNvbmRTaWRlLFxuICAgICAgY3Jvc3NBeGlzRGltZW5zaW9uID0gX3JlZjQuY3Jvc3NBeGlzRGltZW5zaW9uLFxuICAgICAgcG9zaXRpb24gPSBfcmVmNC5wb3NpdGlvbixcbiAgICAgIGFsaWduID0gX3JlZjQuYWxpZ24sXG4gICAgICBidWZmZXIgPSBfcmVmNC5idWZmZXIsXG4gICAgICBvZmZzZXQgPSBfcmVmNC5vZmZzZXQsXG4gICAgICB3aW5kb3dCb3VuZGluZ0JveCA9IF9yZWY0LndpbmRvd0JvdW5kaW5nQm94LFxuICAgICAgY29udGFpbmVyQm91bmRpbmdCb3ggPSBfcmVmNC5jb250YWluZXJCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveCA9IF9yZWY0LnBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIGFuY2hvckJvdW5kaW5nQm94ID0gX3JlZjQuYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgICBhcnJvd0NvbmZpZyA9IF9yZWY0LmFycm93Q29uZmlnO1xuICAvLyBob3cgbXVjaCBvZiB0aGUgcG9wb3ZlciBvdmVyZmxvd3MgcGFzdCBlaXRoZXIgc2lkZSBvZiB0aGUgYW5jaG9yIGlmIGl0cyBjZW50ZXJlZFxuICB2YXIgcG9wb3ZlclNpemVPbkNyb3NzQXhpcyA9IHBvcG92ZXJCb3VuZGluZ0JveFtjcm9zc0F4aXNEaW1lbnNpb25dO1xuICB2YXIgYW5jaG9yU2l6ZU9uQ3Jvc3NBeGlzID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRGltZW5zaW9uXTtcbiAgdmFyIGFuY2hvckhhbGZTaXplID0gYW5jaG9yU2l6ZU9uQ3Jvc3NBeGlzIC8gMjsgLy8gdGhlIHBvcG92ZXIncyBvcmlnaW5hbCBwb3NpdGlvbiBvbiB0aGUgY3Jvc3MtYXhpcyBpcyBkZXRlcm1pbmVkIGJ5OlxuXG4gIHZhciBjcm9zc0F4aXNQb3NpdGlvbk9yaWdpbmFsID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRmlyc3RTaWRlXSArIC8vIHdoZXJlIHRoZSBhbmNob3IgaXMgbG9jYXRlZFxuICBhbmNob3JIYWxmU2l6ZSAtIC8vIHBsdXMgaGFsZiBhbmNob3IgZGltZW5zaW9uXG4gIHBvcG92ZXJTaXplT25Dcm9zc0F4aXMgLyAyOyAvLyBsZXNzIGhhbGYgdGhlIHBvcG92ZXIgZGltZW5zaW9uXG4gIC8vIFRvIGZpdCB0aGUgY29udGVudCB3aXRoaW4gYm90aCB0aGUgd2luZG93IGFuZCBjb250YWluZXIsXG4gIC8vIGNvbXB1dGUgdGhlIHNtYWxsZXIgb2YgdGhlIHR3byBzcGFjZXMgYWxvbmcgZWFjaCBlZGdlXG5cbiAgdmFyIGNvbWJpbmVkQm91bmRpbmdCb3ggPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKHdpbmRvd0JvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7XG4gIHZhciBhdmFpbGFibGVTcGFjZSA9IGdldEF2YWlsYWJsZVNwYWNlKGFuY2hvckJvdW5kaW5nQm94LCBjb21iaW5lZEJvdW5kaW5nQm94LCBidWZmZXIsIG9mZnNldCwgcG9zaXRpb24pO1xuICB2YXIgbWluaW11bVNwYWNlID0gYXJyb3dDb25maWcgPyBhcnJvd0NvbmZpZy5hcnJvd0J1ZmZlciA6IDA7XG4gIHZhciBjb250ZW50T3ZlcmZsb3dTaXplID0gKHBvcG92ZXJTaXplT25Dcm9zc0F4aXMgLSBhbmNob3JTaXplT25Dcm9zc0F4aXMpIC8gMjtcbiAgdmFyIGFsaWduQW1vdW50ID0gMDtcbiAgdmFyIGFsaWduRGlyZWN0aW9uID0gMTtcbiAgdmFyIGFtb3VudE9mU2hpZnROZWVkZWQgPSAwO1xuICB2YXIgc2hpZnREaXJlY3Rpb24gPSAxO1xuXG4gIGlmIChhbGlnbiAhPSBudWxsKSB7XG4gICAgLy8gbm8gYWxpZ25tZW50LCBmaW5kIGhvdyBtdWNoIHRoZSBjb250YWluZXIgYm91bmRhcnkgcmVxdWlyZXMgdGhlIGNvbnRlbnQgdG8gc2hpZnRcbiAgICBhbGlnbkRpcmVjdGlvbiA9IGFsaWduID09PSAndG9wJyB8fCBhbGlnbiA9PT0gJ2xlZnQnID8gMSA6IC0xO1xuICAgIGFsaWduQW1vdW50ID0gY29udGVudE92ZXJmbG93U2l6ZTtcbiAgICB2YXIgYWxpZ25lZE92ZXJmbG93QW1vdW50ID0gY29udGVudE92ZXJmbG93U2l6ZSArIGFsaWduQW1vdW50O1xuICAgIHZhciBuZWVkc1NoaWZ0ID0gYWxpZ25lZE92ZXJmbG93QW1vdW50ID4gYXZhaWxhYmxlU3BhY2VbcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl1dO1xuICAgIGFtb3VudE9mU2hpZnROZWVkZWQgPSBuZWVkc1NoaWZ0ID8gYWxpZ25lZE92ZXJmbG93QW1vdW50IC0gYXZhaWxhYmxlU3BhY2VbcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl1dIDogMDtcbiAgICBzaGlmdERpcmVjdGlvbiA9IC0xICogYWxpZ25EaXJlY3Rpb247XG4gIH0gZWxzZSB7XG4gICAgLy8gc2hpZnRpbmcgdGhlIHBvcG92ZXIgdG8gb25lIHNpZGUgbWF5IHlpZWxkIGEgYmV0dGVyIGZpdFxuICAgIHZhciBzcGFjZUF2YWlsYWJsZU9uRmlyc3RTaWRlID0gYXZhaWxhYmxlU3BhY2VbY3Jvc3NBeGlzRmlyc3RTaWRlXTtcbiAgICB2YXIgc3BhY2VBdmFpbGFibGVPblNlY29uZFNpZGUgPSBhdmFpbGFibGVTcGFjZVtjcm9zc0F4aXNTZWNvbmRTaWRlXTtcbiAgICB2YXIgaXNTaGlmdFRvd2FyZEZpcnN0U2lkZSA9IHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUgPiBzcGFjZUF2YWlsYWJsZU9uU2Vjb25kU2lkZTtcbiAgICBzaGlmdERpcmVjdGlvbiA9IGlzU2hpZnRUb3dhcmRGaXJzdFNpZGUgPyAtMSA6IDE7IC8vIGRldGVybWluZSB3aGljaCBkaXJlY3Rpb24gaGFzIG1vcmUgcm9vbSBhbmQgdGhlIHBvcG92ZXIgc2hvdWxkIHNoaWZ0IHRvXG5cbiAgICB2YXIgbGVhc3RBdmFpbGFibGVTcGFjZSA9IE1hdGgubWluKHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUsIHNwYWNlQXZhaWxhYmxlT25TZWNvbmRTaWRlKTtcblxuICAgIHZhciBfbmVlZHNTaGlmdCA9IGNvbnRlbnRPdmVyZmxvd1NpemUgPiBsZWFzdEF2YWlsYWJsZVNwYWNlO1xuXG4gICAgYW1vdW50T2ZTaGlmdE5lZWRlZCA9IF9uZWVkc1NoaWZ0ID8gY29udGVudE92ZXJmbG93U2l6ZSAtIGxlYXN0QXZhaWxhYmxlU3BhY2UgOiAwO1xuICB9IC8vIHNoaWZ0IG92ZXIgdGhlIHBvcG92ZXIgaWYgbmVjZXNzYXJ5XG5cblxuICB2YXIgc2hpZnRBbW91bnQgPSBhbW91bnRPZlNoaWZ0TmVlZGVkICogc2hpZnREaXJlY3Rpb247XG4gIHZhciBjcm9zc0F4aXNQb3NpdGlvbiA9IGNyb3NzQXhpc1Bvc2l0aW9uT3JpZ2luYWwgKyBzaGlmdEFtb3VudCArIGFsaWduQW1vdW50ICogYWxpZ25EaXJlY3Rpb247IC8vIGlmIGFuIGBhcnJvd0NvbmZpZ2AgaXMgc3BlY2lmaWVkLCBmaW5kIHdoZXJlIHRvIHBvc2l0aW9uIHRoZSBhcnJvd1xuXG4gIHZhciBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuXG4gIGlmIChhcnJvd0NvbmZpZykge1xuICAgIHZhciBhcnJvd1dpZHRoID0gYXJyb3dDb25maWcuYXJyb3dXaWR0aDtcbiAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRmlyc3RTaWRlXSArIGFuY2hvckhhbGZTaXplIC0gYXJyb3dXaWR0aCAvIDI7IC8vIG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBidWZmZXIgYXJvdW5kIHRoZSBhcnJvd1xuICAgIC8vIGJ5IGNhbGN1bGF0aW5nIGhvdyBob3cgbXVjaCB0aGUgYXJyb3cgd291bGQgbmVlZCB0byBtb3ZlXG4gICAgLy8gYnV0IGluc3RlYWQgb2YgbW92aW5nIHRoZSBhcnJvdywgc2hpZnQgdGhlIHBvcG92ZXIgY29udGVudFxuXG4gICAgaWYgKGNyb3NzQXhpc0Fycm93UG9zaXRpb24gPCBjcm9zc0F4aXNQb3NpdGlvbiArIG1pbmltdW1TcGFjZSkge1xuICAgICAgLy8gYXJyb3cgaXMgdG9vIGNsb3NlIHRvIHRoZSBtaW5pbXVtIHNpZGVcbiAgICAgIHZhciBkaWZmZXJlbmNlID0gY3Jvc3NBeGlzUG9zaXRpb24gKyBtaW5pbXVtU3BhY2UgLSBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuICAgICAgY3Jvc3NBeGlzUG9zaXRpb24gLT0gZGlmZmVyZW5jZTtcbiAgICB9IGVsc2UgaWYgKGNyb3NzQXhpc0Fycm93UG9zaXRpb24gKyBtaW5pbXVtU3BhY2UgKyBhcnJvd1dpZHRoID4gY3Jvc3NBeGlzUG9zaXRpb24gKyBwb3BvdmVyU2l6ZU9uQ3Jvc3NBeGlzKSB7XG4gICAgICAvLyBhcnJvdyBpcyB0b28gY2xvc2UgdG8gdGhlIG1heGltdW0gc2lkZVxuICAgICAgdmFyIGVkZ2UgPSBjcm9zc0F4aXNQb3NpdGlvbiArIHBvcG92ZXJTaXplT25Dcm9zc0F4aXM7XG5cbiAgICAgIHZhciBfZGlmZmVyZW5jZSA9IGNyb3NzQXhpc0Fycm93UG9zaXRpb24gLSAoZWRnZSAtIG1pbmltdW1TcGFjZSAtIGFycm93V2lkdGgpO1xuXG4gICAgICBjcm9zc0F4aXNQb3NpdGlvbiArPSBfZGlmZmVyZW5jZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyb3NzQXhpc1Bvc2l0aW9uOiBjcm9zc0F4aXNQb3NpdGlvbixcbiAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uOiBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFByaW1hcnlBeGlzUG9zaXRpb24oX3JlZjUpIHtcbiAgdmFyIHBvc2l0aW9uID0gX3JlZjUucG9zaXRpb24sXG4gICAgICBvZmZzZXQgPSBfcmVmNS5vZmZzZXQsXG4gICAgICBwb3BvdmVyQm91bmRpbmdCb3ggPSBfcmVmNS5wb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgICBhbmNob3JCb3VuZGluZ0JveCA9IF9yZWY1LmFuY2hvckJvdW5kaW5nQm94LFxuICAgICAgYXJyb3dDb25maWcgPSBfcmVmNS5hcnJvd0NvbmZpZztcbiAgLy8gaWYgcG9zaXRpb25pbmcgdG8gdGhlIHRvcCBvciBsZWZ0LCB0aGUgdGFyZ2V0IHBvc2l0aW9uIGRlY3JlYXNlc1xuICAvLyBmcm9tIHRoZSBhbmNob3IncyB0b3Agb3IgbGVmdCwgb3RoZXJ3aXNlIHRoZSBwb3NpdGlvbiBhZGRzIHRvIHRoZSBhbmNob3Inc1xuICB2YXIgaXNPZmZzZXREZWNyZWFzaW5nID0gcG9zaXRpb24gPT09ICd0b3AnIHx8IHBvc2l0aW9uID09PSAnbGVmdCc7XG4gIHZhciBwcmltYXJ5QXhpc0RpbWVuc2lvbiA9IHJlbGF0ZWREaW1lbnNpb25bcG9zaXRpb25dOyAvLyBcInRvcFwiIC0+IFwiaGVpZ2h0XCJcblxuICB2YXIgcG9wb3ZlclNpemVPblByaW1hcnlBeGlzID0gcG9wb3ZlckJvdW5kaW5nQm94W3ByaW1hcnlBeGlzRGltZW5zaW9uXTsgLy8gc3RhcnQgYXQgdGhlIHRvcCBvciBsZWZ0IGVkZ2Ugb2YgdGhlIGFuY2hvciBlbGVtZW50XG5cbiAgdmFyIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lID0gZGltZW5zaW9uUG9zaXRpb25BdHRyaWJ1dGVbcHJpbWFyeUF4aXNEaW1lbnNpb25dOyAvLyBcImhlaWdodFwiIC0+IFwidG9wXCJcblxuICB2YXIgYW5jaG9yRWRnZU9yaWdpbiA9IGFuY2hvckJvdW5kaW5nQm94W3ByaW1hcnlBeGlzUG9zaXRpb25OYW1lXTsgLy8gZmluZCB0aGUgcG9wb3ZlciBwb3NpdGlvbiBvbiB0aGUgcHJpbWFyeSBheGlzXG5cbiAgdmFyIGFuY2hvclNpemVPblByaW1hcnlBeGlzID0gYW5jaG9yQm91bmRpbmdCb3hbcHJpbWFyeUF4aXNEaW1lbnNpb25dO1xuICB2YXIgcHJpbWFyeUF4aXNPZmZzZXQgPSBpc09mZnNldERlY3JlYXNpbmcgPyBwb3BvdmVyU2l6ZU9uUHJpbWFyeUF4aXMgOiBhbmNob3JTaXplT25QcmltYXJ5QXhpcztcbiAgdmFyIGNvbnRlbnRPZmZzZXQgPSAob2Zmc2V0ICsgcHJpbWFyeUF4aXNPZmZzZXQpICogKGlzT2Zmc2V0RGVjcmVhc2luZyA/IC0xIDogMSk7XG4gIHZhciBwcmltYXJ5QXhpc1Bvc2l0aW9uID0gYW5jaG9yRWRnZU9yaWdpbiArIGNvbnRlbnRPZmZzZXQ7XG4gIHZhciBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb247XG5cbiAgaWYgKGFycm93Q29uZmlnKSB7XG4gICAgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uID0gaXNPZmZzZXREZWNyZWFzaW5nID8gcG9wb3ZlclNpemVPblByaW1hcnlBeGlzIDogMDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcHJpbWFyeUF4aXNQb3NpdGlvbjogcHJpbWFyeUF4aXNQb3NpdGlvbixcbiAgICBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb246IHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvblxuICB9O1xufVxuLyoqXG4gKiBGaW5kcyB0aGUgY2xpZW50IHBpeGVsIGNvb3JkaW5hdGUgb2YgZWFjaCBlZGdlIGZvciB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIGJveCxcbiAqIGFuZCB0aGUgYm91bmRpbmcgYm94J3Mgd2lkdGggJiBoZWlnaHRcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7e3RvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlcn19XG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEJvdW5kaW5nQm94KGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge1xuICAgIHRvcDogcmVjdC50b3AsXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICB3aWR0aDogcmVjdC53aWR0aFxuICB9O1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhdmFpbGFibGUgY29udGVudCBzcGFjZSBiZXR3ZWVuIGFuY2hvciBhbmQgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFuY2hvckJvdW5kaW5nQm94IENsaWVudCBib3VuZGluZyBib3ggb2YgdGhlIGFuY2hvciBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGFpbmVyQm91bmRpbmdCb3ggQ2xpZW50IGJvdW5kaW5nIGJveCBvZiB0aGUgY29udGFpbmVyIGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBidWZmZXIgTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBvZmZzZXRTaWRlIFNpZGUgdGhlIG9mZnNldCBuZWVkcyB0byBiZSBhcHBsaWVkIHRvLCBvbmVcbiAqICBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCBsZWZ0OiBudW1iZXJ9fVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVTcGFjZShhbmNob3JCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gsIGJ1ZmZlciwgb2Zmc2V0LCBvZmZzZXRTaWRlKSB7XG4gIHZhciBfZ2V0QnVmZmVyVmFsdWVzMyA9IGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpLFxuICAgICAgX2dldEJ1ZmZlclZhbHVlczQgPSBfc2xpY2VkVG9BcnJheShfZ2V0QnVmZmVyVmFsdWVzMywgNCksXG4gICAgICB0b3BCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFswXSxcbiAgICAgIHJpZ2h0QnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczRbMV0sXG4gICAgICBib3R0b21CdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFsyXSxcbiAgICAgIGxlZnRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFszXTtcblxuICByZXR1cm4ge1xuICAgIHRvcDogYW5jaG9yQm91bmRpbmdCb3gudG9wIC0gY29udGFpbmVyQm91bmRpbmdCb3gudG9wIC0gdG9wQnVmZmVyIC0gKG9mZnNldFNpZGUgPT09ICd0b3AnID8gb2Zmc2V0IDogMCksXG4gICAgcmlnaHQ6IGNvbnRhaW5lckJvdW5kaW5nQm94LnJpZ2h0IC0gYW5jaG9yQm91bmRpbmdCb3gucmlnaHQgLSByaWdodEJ1ZmZlciAtIChvZmZzZXRTaWRlID09PSAncmlnaHQnID8gb2Zmc2V0IDogMCksXG4gICAgYm90dG9tOiBjb250YWluZXJCb3VuZGluZ0JveC5ib3R0b20gLSBhbmNob3JCb3VuZGluZ0JveC5ib3R0b20gLSBib3R0b21CdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ2JvdHRvbScgPyBvZmZzZXQgOiAwKSxcbiAgICBsZWZ0OiBhbmNob3JCb3VuZGluZ0JveC5sZWZ0IC0gY29udGFpbmVyQm91bmRpbmdCb3gubGVmdCAtIGxlZnRCdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ2xlZnQnID8gb2Zmc2V0IDogMClcbiAgfTtcbn1cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGZpdCAob3ZlcmxhcCkgb2YgdGhlIGNvbnRlbnQgd2l0aGluIHRoZSBjb250YWluZXIsIGZpdCBpcyBpbiByYW5nZSAwLjAgPT4gMS4wXG4gKiBAcGFyYW0gY29udGVudEJvdW5kaW5nQm94IGJvdW5kaW5nIGJveCBvZiBjb250ZW50IHRvIGNhbGN1bGF0ZSBmaXQgZm9yXG4gKiBAcGFyYW0gY29udGFpbmVyQm91bmRpbmdCb3ggYm91bmRpbmcgYm94IG9mIGNvbnRhaW5lclxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzaWJsZUZpdChjb250ZW50Qm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94KSB7XG4gIHZhciBpbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKGNvbnRlbnRCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gpO1xuXG4gIGlmIChpbnRlcnNlY3Rpb24ubGVmdCA+IGludGVyc2VjdGlvbi5yaWdodCB8fCBpbnRlcnNlY3Rpb24udG9wID4gaW50ZXJzZWN0aW9uLnRvcCkge1xuICAgIC8vIHRoZXJlIGlzIG5vIGludGVyc2VjdGlvbiwgdGhlIGJveGVzIGFyZSBjb21wbGV0ZWx5IHNlcGFyYXRlZCBvbiBhdCBsZWFzdCBvbmUgYXhpc1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIGludGVyc2VjdGlvbkFyZWEgPSAoaW50ZXJzZWN0aW9uLnJpZ2h0IC0gaW50ZXJzZWN0aW9uLmxlZnQpICogKGludGVyc2VjdGlvbi5ib3R0b20gLSBpbnRlcnNlY3Rpb24udG9wKTtcbiAgdmFyIGNvbnRlbnRBcmVhID0gKGNvbnRlbnRCb3VuZGluZ0JveC5yaWdodCAtIGNvbnRlbnRCb3VuZGluZ0JveC5sZWZ0KSAqIChjb250ZW50Qm91bmRpbmdCb3guYm90dG9tIC0gY29udGVudEJvdW5kaW5nQm94LnRvcCk7XG4gIHJldHVybiBpbnRlcnNlY3Rpb25BcmVhIC8gY29udGVudEFyZWE7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGludGVyc2VjdGlvbiBzcGFjZSBiZXR3ZWVuIHR3byBib3VuZGluZyBib3hlc1xuICpcbiAqIEBwYXJhbSBmaXJzdEJveFxuICogQHBhcmFtIHNlY29uZEJveFxuICogQHJldHVybnMge0V1aUNsaWVudFJlY3R9XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdEJvdW5kaW5nQm94ZXMoZmlyc3RCb3gsIHNlY29uZEJveCkge1xuICB2YXIgdG9wID0gTWF0aC5tYXgoZmlyc3RCb3gudG9wLCBzZWNvbmRCb3gudG9wKTtcbiAgdmFyIHJpZ2h0ID0gTWF0aC5taW4oZmlyc3RCb3gucmlnaHQsIHNlY29uZEJveC5yaWdodCk7XG4gIHZhciBib3R0b20gPSBNYXRoLm1pbihmaXJzdEJveC5ib3R0b20sIHNlY29uZEJveC5ib3R0b20pO1xuICB2YXIgbGVmdCA9IE1hdGgubWF4KGZpcnN0Qm94LmxlZnQsIHNlY29uZEJveC5sZWZ0KTtcbiAgdmFyIGhlaWdodCA9IE1hdGgubWF4KGJvdHRvbSAtIHRvcCwgMCk7XG4gIHZhciB3aWR0aCA9IE1hdGgubWF4KHJpZ2h0IC0gbGVmdCwgMCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiB0b3AsXG4gICAgcmlnaHQ6IHJpZ2h0LFxuICAgIGJvdHRvbTogYm90dG9tLFxuICAgIGxlZnQ6IGxlZnQsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgd2lkdGg6IHdpZHRoXG4gIH07XG59XG4vKipcbiAqIFJldHVybnMgdGhlIHRvcC1tb3N0IGRlZmluZWQgei1pbmRleCBpbiB0aGUgZWxlbWVudCdzIGFuY2VzdG9yIGhpZXJhcmNoeVxuICogcmVsYXRpdmUgdG8gdGhlIGB0YXJnZXRgIGVsZW1lbnQ7IGlmIG5vIHotaW5kZXggaXMgZGVmaW5lZCwgcmV0dXJucyAwXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9XG4gKiBAcGFyYW0gY291c2luIHtIVE1MRWxlbWVudH1cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRaSW5kZXgoZWxlbWVudCwgY291c2luKSB7XG4gIC8qKlxuICAgKiBmaW5kaW5nIHRoZSB6LWluZGV4IG9mIGBlbGVtZW50YCBpcyBub3QgdGhlIGZ1bGwgc3RvcnlcbiAgICogaXRzIHRoZSBDU1Mgc3RhY2tpbmcgY29udGV4dCB0aGF0IGlzIGltcG9ydGFudFxuICAgKiB0YWtlIHRoaXMgRE9NIGZvciBleGFtcGxlOlxuICAgKiBib2R5XG4gICAqICAgc2VjdGlvblt6LWluZGV4OiAxMDAwXVxuICAgKiAgICAgcFt6LWluZGV4OiA1MDBdXG4gICAqICAgICAgIGJ1dHRvblxuICAgKiAgIGRpdlxuICAgKlxuICAgKiB3aGF0IHotaW5kZXggZG9lcyB0aGUgYGRpdmAgbmVlZCB0byBkaXNwbGF5IG5leHQgdG8gYGJ1dHRvbmA/XG4gICAqIHRoZSBgZGl2YCBhbmQgYHNlY3Rpb25gIGFyZSB3aGVyZSB0aGUgc3RhY2tpbmcgY29udGV4dCBzcGxpdHNcbiAgICogc28gYGRpdmAgbmVlZHMgdG8gY29weSBgc2VjdGlvbmAncyB6LWluZGV4IGluIG9yZGVyIHRvXG4gICAqIGFwcGVhciBuZXh0IHRvIC8gb3ZlciBgYnV0dG9uYFxuICAgKlxuICAgKiBjYWxjdWxhdGUgdGhpcyBieSBzdGFydGluZyBhdCBgYnV0dG9uYCBhbmQgZmluZGluZyBpdHMgb2Zmc2V0UGFyZW50c1xuICAgKiB0aGVuIHdhbGsgdGhlIHBhcmVudHMgZnJvbSB0b3AgLT4gZG93biB1bnRpbCB0aGUgc3RhY2tpbmcgY29udGV4dFxuICAgKiBzcGxpdCBpcyBmb3VuZCwgb3IgaWYgdGhlcmUgaXMgbm8gc3BsaXQgdGhlbiBhIHNwZWNpZmljIHotaW5kZXggaXMgdW5pbXBvcnRhbnRcbiAgICovXG4gIC8vIGJ1aWxkIHRoZSBhcnJheSBvZiB0aGUgZWxlbWVudCArIGl0cyBvZmZzZXQgcGFyZW50c1xuICB2YXIgbm9kZXNUb0luc3BlY3QgPSBbXTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIG5vZGVzVG9JbnNwZWN0LnB1c2goZWxlbWVudCk7IC8vIEFGQUlDVCB0aGlzIGlzIGEgdmFsaWQgY2FzdCAtIHRoZSBsaWJkZWZzIGFwcGVhciB3cm9uZ1xuXG4gICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OyAvLyBzdG9wIGlmIHRoZXJlIGlzIG5vIHBhcmVudFxuXG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfSAvLyBzdG9wIGlmIHRoZSBwYXJlbnQgY29udGFpbnMgdGhlIHJlbGF0ZWQgZWxlbWVudFxuICAgIC8vIGFzIHRoaXMgaXMgdGhlIHotaW5kZXggYW5jZXN0b3JcblxuXG4gICAgaWYgKGVsZW1lbnQuY29udGFpbnMoY291c2luKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9IC8vIHJldmVyc2UgdGhlIG5vZGVzIHRvIHdhbGsgZnJvbSB0b3AgLT4gZWxlbWVudFxuXG5cbiAgbm9kZXNUb0luc3BlY3QucmV2ZXJzZSgpO1xuXG4gIGZvciAodmFyIF9pMiA9IDAsIF9ub2Rlc1RvSW5zcGVjdCA9IG5vZGVzVG9JbnNwZWN0OyBfaTIgPCBfbm9kZXNUb0luc3BlY3QubGVuZ3RoOyBfaTIrKykge1xuICAgIHZhciBub2RlID0gX25vZGVzVG9JbnNwZWN0W19pMl07XG4gICAgLy8gZ2V0IHRoaXMgbm9kZSdzIHotaW5kZXggY3NzIHZhbHVlXG4gICAgdmFyIHpJbmRleCA9IHdpbmRvdy5kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpLmdldFByb3BlcnR5VmFsdWUoJ3otaW5kZXgnKTsgLy8gaWYgdGhlIHotaW5kZXggaXMgbm90IGEgbnVtYmVyIChlLmcuIFwiYXV0b1wiKSByZXR1cm4gbnVsbCwgZWxzZSB0aGUgdmFsdWVcblxuICAgIHZhciBwYXJzZWRaSW5kZXggPSBwYXJzZUludCh6SW5kZXgsIDEwKTtcblxuICAgIGlmICghaXNOYU4ocGFyc2VkWkluZGV4KSkge1xuICAgICAgcmV0dXJuIHBhcnNlZFpJbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbnZhciBHUk9VUF9OVU1FUklDID0gL14oW1xcZC5dKykoc3xtcykvO1xuXG5mdW5jdGlvbiBnZXRNaWxsaXNlY29uZHModmFsdWUsIHVuaXQpIHtcbiAgLy8gR2l2ZW4gdGhlIHJlZ2V4IG1hdGNoIGFuZCBjYXB0dXJlIGdyb3Vwcywgd2UgY2FuIGFzc3VtZSBgdW5pdGAgdG8gYmUgZWl0aGVyICdzJyBvciAnbXMnXG4gIHZhciBtdWx0aXBsaWVyID0gdW5pdCA9PT0gJ3MnID8gMTAwMCA6IDE7XG4gIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKSAqIG11bHRpcGxpZXI7XG59IC8vIEZpbmQgQ1NTIGB0cmFuc2l0aW9uLWR1cmF0aW9uYCBhbmQgYHRyYW5zaXRpb24tZGVsYXlgIGludGVydmFsc1xuLy8gYW5kIHJldHVybiB0aGUgdmFsdWUgb2YgZWFjaCBjb21wdXRlZCBwcm9wZXJ0eSBpbiAnbXMnXG5cblxuZXhwb3J0IHZhciBnZXRUcmFuc2l0aW9uVGltaW5ncyA9IGZ1bmN0aW9uIGdldFRyYW5zaXRpb25UaW1pbmdzKGVsZW1lbnQpIHtcbiAgdmFyIGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgdmFyIGNvbXB1dGVkRHVyYXRpb24gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zaXRpb24tZHVyYXRpb24nKTtcbiAgdmFyIGR1cmF0aW9uTWF0Y2hBcnJheSA9IGNvbXB1dGVkRHVyYXRpb24ubWF0Y2goR1JPVVBfTlVNRVJJQyk7XG4gIHZhciBkdXJhdGlvbk1hdGNoID0gZHVyYXRpb25NYXRjaEFycmF5ID8gZ2V0TWlsbGlzZWNvbmRzKGR1cmF0aW9uTWF0Y2hBcnJheVsxXSwgZHVyYXRpb25NYXRjaEFycmF5WzJdKSA6IDA7XG4gIHZhciBjb21wdXRlZERlbGF5ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCd0cmFuc2l0aW9uLWRlbGF5Jyk7XG4gIHZhciBkZWxheU1hdGNoQXJyYXkgPSBjb21wdXRlZERlbGF5Lm1hdGNoKEdST1VQX05VTUVSSUMpO1xuICB2YXIgZGVsYXlNYXRjaCA9IGRlbGF5TWF0Y2hBcnJheSA/IGdldE1pbGxpc2Vjb25kcyhkZWxheU1hdGNoQXJyYXlbMV0sIGRlbGF5TWF0Y2hBcnJheVsyXSkgOiAwO1xuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uTWF0Y2g6IGR1cmF0aW9uTWF0Y2gsXG4gICAgZGVsYXlNYXRjaDogZGVsYXlNYXRjaFxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNFbGVtZW50Tm9kZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50Lm5vZGVUeXBlID09PSBkb2N1bWVudC5FTEVNRU5UX05PREU7XG59IC8vIFVzZXMgYGdldFRyYW5zaXRpb25UaW1pbmdzYCB0byBmaW5kIHRoZSB0b3RhbCB0cmFuc2l0aW9uIHRpbWUgZm9yXG4vLyBhbGwgZWxlbWVudHMgdGFyZ2V0ZWQgYnkgYSBNdXRhdGlvbk9ic2VydmVyIGNhbGxiYWNrXG5cblxuZXhwb3J0IHZhciBnZXRXYWl0RHVyYXRpb24gPSBmdW5jdGlvbiBnZXRXYWl0RHVyYXRpb24ocmVjb3Jkcykge1xuICByZXR1cm4gcmVjb3Jkcy5yZWR1Y2UoZnVuY3Rpb24gKHdhaXREdXJhdGlvbiwgcmVjb3JkKSB7XG4gICAgLy8gb25seSBjaGVjayBmb3IgQ1NTIHRyYW5zaXRpb24gdmFsdWVzIGZvciBFTEVNRU5UIG5vZGVzXG4gICAgaWYgKGlzRWxlbWVudE5vZGUocmVjb3JkLnRhcmdldCkpIHtcbiAgICAgIHZhciBfZ2V0VHJhbnNpdGlvblRpbWluZ3MgPSBnZXRUcmFuc2l0aW9uVGltaW5ncyhyZWNvcmQudGFyZ2V0KSxcbiAgICAgICAgICBkdXJhdGlvbk1hdGNoID0gX2dldFRyYW5zaXRpb25UaW1pbmdzLmR1cmF0aW9uTWF0Y2gsXG4gICAgICAgICAgZGVsYXlNYXRjaCA9IF9nZXRUcmFuc2l0aW9uVGltaW5ncy5kZWxheU1hdGNoO1xuXG4gICAgICB3YWl0RHVyYXRpb24gPSBNYXRoLm1heCh3YWl0RHVyYXRpb24sIGR1cmF0aW9uTWF0Y2ggKyBkZWxheU1hdGNoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2FpdER1cmF0aW9uO1xuICB9LCAwKTtcbn07IC8vIFVzZXMgYHJlcXVlc3RBbmltYXRpb25GcmFtZWAgdG8gcGVyZm9ybSBhIGdpdmVuIGNhbGxiYWNrIGFmdGVyIGEgc3BlY2lmaWVkIHdhaXRpbmcgcGVyaW9kXG5cbmV4cG9ydCB2YXIgcGVyZm9ybU9uRnJhbWUgPSBmdW5jdGlvbiBwZXJmb3JtT25GcmFtZSh3YWl0RHVyYXRpb24sIHRvUGVyZm9ybSkge1xuICBpZiAod2FpdER1cmF0aW9uID4gMCkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHZhciBlbmRUaW1lID0gc3RhcnRUaW1lICsgd2FpdER1cmF0aW9uO1xuXG4gICAgdmFyIG9uRnJhbWUgPSBmdW5jdGlvbiBvbkZyYW1lKCkge1xuICAgICAgdG9QZXJmb3JtKCk7XG5cbiAgICAgIGlmIChlbmRUaW1lID4gRGF0ZS5ub3coKSkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcbiAgfVxufTsgLy8gQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjb21iaW5pbmcgdGhlIHJlc3VsdCBvZiAnZ2V0V2FpdER1cmF0aW9uJyBkaXJlY3RseSB3aXRoICdwZXJmb3JtT25GcmFtZSdcblxuZXhwb3J0IHZhciBnZXREdXJhdGlvbkFuZFBlcmZvcm1PbkZyYW1lID0gZnVuY3Rpb24gZ2V0RHVyYXRpb25BbmRQZXJmb3JtT25GcmFtZShyZWNvcmRzLCB0b1BlcmZvcm0pIHtcbiAgcGVyZm9ybU9uRnJhbWUoZ2V0V2FpdER1cmF0aW9uKHJlY29yZHMpLCB0b1BlcmZvcm0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuLypcbiAqIEZvciB1c2Ugd2hlbiBhIGNvbXBvbmVudCBuZWVkcyB0byBzZXQgYHJlZmAgb2JqZWN0cyBmcm9tIG11bHRpcGxlIHNvdXJjZXMuXG4gKiBGb3IgaW5zdGFuY2UsIGlmIGEgY29tcG9uZW50IGFjY2VwdHMgYSBgcmVmYCBwcm9wIGJ1dCBhbHNvIG5lZWRzIGl0cyBvd25cbiAqIGxvY2FsIHJlZmVyZW5jZSBmb3IgY2FsY3VsYXRpb25zLCBldGMuXG4gKiBUaGlzIGhvb2sgaGFuZGxlcyBzZXR0aW5nIG11bHRpcGxlIGByZWZgcyBvZiBhbnkgYXZhaWxhYmxlIGByZWZgIHR5cGVcbiAqIGluIGEgc2luZ2xlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5cbmV4cG9ydCB2YXIgdXNlQ29tYmluZWRSZWZzID0gZnVuY3Rpb24gdXNlQ29tYmluZWRSZWZzKHJlZnMpIHtcbiAgcmV0dXJuIHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIHJlZnMuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgICBpZiAoIXJlZikgcmV0dXJuO1xuXG4gICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZWYobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWYuY3VycmVudCA9IG5vZGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtyZWZzXSk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInR5cGVcIiwgXCJidXR0b25SZWZcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImVsZW1lbnRcIiwgXCJiYXNlQ2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaWRlXCIsIFwiY29sb3JcIiwgXCJzaXplXCIsIFwiZmlsbFwiLCBcImlzRGlzYWJsZWRcIiwgXCJpc0xvYWRpbmdcIiwgXCJpc1NlbGVjdGVkXCIsIFwiY29udGVudFByb3BzXCIsIFwidGV4dFByb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwibWluV2lkdGhcIiwgXCJzdHlsZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZCBhcyBFdWlCdXR0b25Db250ZW50IH0gZnJvbSAnLi9fYnV0dG9uX2NvbnRlbnRfZGVwcmVjYXRlZCc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBjb2xvclRvQ2xhc3NOYW1lTWFwID0ge1xuICBwcmltYXJ5OiAnLS1wcmltYXJ5JyxcbiAgYWNjZW50OiAnLS1hY2NlbnQnLFxuICBzdWNjZXNzOiAnLS1zdWNjZXNzJyxcbiAgd2FybmluZzogJy0td2FybmluZycsXG4gIGRhbmdlcjogJy0tZGFuZ2VyJyxcbiAgZ2hvc3Q6ICctLWdob3N0JyxcbiAgdGV4dDogJy0tdGV4dCdcbn07XG5leHBvcnQgdmFyIENPTE9SUyA9IGtleXNPZihjb2xvclRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgc2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBzOiAnLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG4vKipcbiAqIEV4dGVuZHMgRXVpQnV0dG9uQ29udGVudFByb3BzIHdoaWNoIHByb3ZpZGVzXG4gKiBgaWNvblR5cGVgLCBgaWNvblNpZGVgLCBhbmQgYHRleHRQcm9wc2BcbiAqL1xuXG4vKipcbiAqIEV1aUJ1dHRvbiBpcyBsYXJnZWx5IHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgcmVsZXZhbnQgcHJvcHNcbiAqIGFuZCB0aGUgbG9naWMgZm9yIGVsZW1lbnQtc3BlY2lmaWMgYXR0cmlidXRlc1xuICovXG5leHBvcnQgdmFyIEV1aUJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUJ1dHRvbihfcmVmKSB7XG4gIHZhciBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIF9kaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgaXNEaXNhYmxlZCA9IF9pc0Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgdmFyIGJ1dHRvbklzRGlzYWJsZWQgPSByZXN0LmlzTG9hZGluZyB8fCBpc0Rpc2FibGVkIHx8IGRpc2FibGVkO1xuICB2YXIgZWxlbWVudCA9IGhyZWYgJiYgIWlzRGlzYWJsZWQgPyAnYScgOiAnYnV0dG9uJztcbiAgdmFyIGVsZW1lbnRQcm9wcyA9IHt9OyAvLyBQcm9wcyBmb3IgYWxsIGVsZW1lbnRzXG5cbiAgZWxlbWVudFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlbGVtZW50UHJvcHMpLCB7fSwge1xuICAgIGlzRGlzYWJsZWQ6IGJ1dHRvbklzRGlzYWJsZWRcbiAgfSk7IC8vIEVsZW1lbnQtc3BlY2lmaWMgYXR0cmlidXRlc1xuXG4gIGlmIChlbGVtZW50ID09PSAnYnV0dG9uJykge1xuICAgIGVsZW1lbnRQcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWxlbWVudFByb3BzKSwge30sIHtcbiAgICAgIGRpc2FibGVkOiBidXR0b25Jc0Rpc2FibGVkXG4gICAgfSk7XG4gIH1cblxuICB2YXIgcmVsT2JqID0ge307XG5cbiAgaWYgKGhyZWYgJiYgIWJ1dHRvbklzRGlzYWJsZWQpIHtcbiAgICByZWxPYmouaHJlZiA9IGhyZWY7XG4gICAgcmVsT2JqLnJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJlbE9iai50YXJnZXQgPSB0YXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgcmVsT2JqLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgcmV0dXJuICgvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXBhc2NhbC1jYXNlXG4gICAgX19fRW1vdGlvbkpTWChFdWlCdXR0b25EaXNwbGF5RGVwcmVjYXRlZCwgX2V4dGVuZHMoe1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGJhc2VDbGFzc05hbWU6IFwiZXVpQnV0dG9uXCIsXG4gICAgICByZWY6IGJ1dHRvblJlZlxuICAgIH0sIGVsZW1lbnRQcm9wcywgcmVsT2JqLCByZXN0KSlcbiAgKTtcbn07XG5FdWlCdXR0b24ucHJvcFR5cGVzID0ge1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBNYWtlIGJ1dHRvbiBhIHNvbGlkIGNvbG9yIGZvciBwcm9taW5lbmNlXG4gICAgICovXG4gIGZpbGw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJhY2NlbnRcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiLCBcImRhbmdlclwiLCBcImdob3N0XCIsIFwidGV4dFwiXSksXG5cbiAgLyoqXG4gICAgICogVXNlIHNpemUgYHNgIGluIGNvbmZpbmVkIHNwYWNlc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEV4dGVuZHMgdGhlIGJ1dHRvbiB0byAxMDAlIHdpZHRoXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtaW5pbXVtIHdpZHRoXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWluaW11bSB3aWR0aFxuICAgICAqL1xuICBtaW5XaWR0aDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dCAob25seSBpZiB0aGUgY2hpbGRyZW4gaXMgYSBgc3RyaW5nYClcbiAgICAgKiBJdCBkb2Vzbid0IGFwcGx5IHRvIHRoZSBpY29uLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55XG59O1xuRXVpQnV0dG9uLmRpc3BsYXlOYW1lID0gJ0V1aUJ1dHRvbic7XG5cbi8qKlxuICogKkRFUFJFQ0FURUQqXG4gKiBFdWlCdXR0b25EaXNwbGF5IGlzIGFuIGludGVybmFsLW9ubHkgY29tcG9uZW50IHVzZWQgZm9yIGRpc3BsYXlpbmdcbiAqIGFueSBlbGVtZW50IGFzIGEgYnV0dG9uLlxuICogTk9URTogVGhpcyBjb21wb25lbnQgKm11c3QqIGJlIGJlbG93IEV1aUJ1dHRvbiBpbiB0aGUgZmlsZSBhbmRcbiAqIEV1aUJ1dHRvbiBtdXN0IGFsc28gc2V0IGEgZGlzcGxheU5hbWUgZm9yIHJlYWN0LWRvY2dlbi10eXBlc2NyaXB0XG4gKiB0byBjb3JyZWN0bHkgc2V0IEV1aUJ1dHRvbidzIGRvY2dlbkluZm8gYW5kIGRpc3BsYXkgYSBwcm9wcyB0YWJsZS5cbiAqIFRoaXMgY29tcG9uZW50IGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlIG5ldyBFdWlCdXR0b25EaXNwbGF5XG4gKiB0aGF0IGNhbiBiZSBmb3VuZCBpbiBgc3JjL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheS50c3hgXG4gKi9cbmV4cG9ydCB2YXIgRXVpQnV0dG9uRGlzcGxheURlcHJlY2F0ZWQgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZjIsIHJlZikge1xuICB2YXIgX3JlZjIkZWxlbWVudCA9IF9yZWYyLmVsZW1lbnQsXG4gICAgICBlbGVtZW50ID0gX3JlZjIkZWxlbWVudCA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmMiRlbGVtZW50LFxuICAgICAgYmFzZUNsYXNzTmFtZSA9IF9yZWYyLmJhc2VDbGFzc05hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgaWNvblR5cGUgPSBfcmVmMi5pY29uVHlwZSxcbiAgICAgIF9yZWYyJGljb25TaWRlID0gX3JlZjIuaWNvblNpZGUsXG4gICAgICBpY29uU2lkZSA9IF9yZWYyJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmMiRpY29uU2lkZSxcbiAgICAgIF9yZWYyJGNvbG9yID0gX3JlZjIuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYyJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmMiRjb2xvcixcbiAgICAgIF9yZWYyJHNpemUgPSBfcmVmMi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYyJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYyJHNpemUsXG4gICAgICBfcmVmMiRmaWxsID0gX3JlZjIuZmlsbCxcbiAgICAgIGZpbGwgPSBfcmVmMiRmaWxsID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGZpbGwsXG4gICAgICBpc0Rpc2FibGVkID0gX3JlZjIuaXNEaXNhYmxlZCxcbiAgICAgIGlzTG9hZGluZyA9IF9yZWYyLmlzTG9hZGluZyxcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmMi5pc1NlbGVjdGVkLFxuICAgICAgY29udGVudFByb3BzID0gX3JlZjIuY29udGVudFByb3BzLFxuICAgICAgdGV4dFByb3BzID0gX3JlZjIudGV4dFByb3BzLFxuICAgICAgZnVsbFdpZHRoID0gX3JlZjIuZnVsbFdpZHRoLFxuICAgICAgbWluV2lkdGggPSBfcmVmMi5taW5XaWR0aCxcbiAgICAgIHN0eWxlID0gX3JlZjIuc3R5bGUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQyKTtcblxuICB2YXIgYnV0dG9uSXNEaXNhYmxlZCA9IGlzTG9hZGluZyB8fCBpc0Rpc2FibGVkO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoYmFzZUNsYXNzTmFtZSwgY29sb3IgJiYgY29sb3JUb0NsYXNzTmFtZU1hcFtjb2xvcl0gPyBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lKS5jb25jYXQoY29sb3JUb0NsYXNzTmFtZU1hcFtjb2xvcl0pIDogXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSkuY29uY2F0KGNvbG9yVG9DbGFzc05hbWVNYXAucHJpbWFyeSksIHNpemUgJiYgc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdID8gXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSkuY29uY2F0KHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSkgOiBudWxsLCBmaWxsICYmIFwiXCIuY29uY2F0KGJhc2VDbGFzc05hbWUsIFwiLS1maWxsXCIpLCBmdWxsV2lkdGggJiYgXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSwgXCItLWZ1bGxXaWR0aFwiKSwgYnV0dG9uSXNEaXNhYmxlZCAmJiBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lLCBcIi1pc0Rpc2FibGVkXCIpLCBjbGFzc05hbWUpO1xuICAvKipcbiAgICogTm90IGNoYW5naW5nIHRoZSBjb250ZW50IG9yIHRleHQgY2xhc3MgbmFtZXMgdG8gbWF0Y2ggYmFzZUNsYXNzTmFtZSB5ZXQsXG4gICAqIGFzIGl0IGlzIGEgbWFqb3IgYnJlYWtpbmcgY2hhbmdlLlxuICAgKi9cblxuICB2YXIgY29udGVudENsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25fX2NvbnRlbnQnLCBjb250ZW50UHJvcHMgJiYgY29udGVudFByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciB0ZXh0Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbl9fdGV4dCcsIHRleHRQcm9wcyAmJiB0ZXh0UHJvcHMuY2xhc3NOYW1lKTtcblxuICB2YXIgaW5uZXJOb2RlID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25Db250ZW50LCBfZXh0ZW5kcyh7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaWNvblR5cGU6IGljb25UeXBlLFxuICAgIGljb25TaWRlOiBpY29uU2lkZSxcbiAgICB0ZXh0UHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGV4dFByb3BzKSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogdGV4dENsYXNzTmFtZXNcbiAgICB9KVxuICB9LCBjb250ZW50UHJvcHMsIHtcbiAgICAvLyBjbGFzc05hbWUgaGFzIHRvIGNvbWUgbGFzdCB0byBvdmVycmlkZSBjb250ZW50UHJvcHMuY2xhc3NOYW1lXG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NOYW1lc1xuICB9KSwgY2hpbGRyZW4pO1xuXG4gIHZhciBjYWxjdWxhdGVkU3R5bGUgPSBzdHlsZTtcblxuICBpZiAobWluV2lkdGggIT09IHVuZGVmaW5lZCB8fCBtaW5XaWR0aCAhPT0gbnVsbCkge1xuICAgIGNhbGN1bGF0ZWRTdHlsZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY2FsY3VsYXRlZFN0eWxlKSwge30sIHtcbiAgICAgIG1pbldpZHRoOiBtaW5XaWR0aFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGVsZW1lbnQsIF9vYmplY3RTcHJlYWQoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzdHlsZTogY2FsY3VsYXRlZFN0eWxlLFxuICAgIGRpc2FibGVkOiBlbGVtZW50ID09PSAnYnV0dG9uJyAmJiBidXR0b25Jc0Rpc2FibGVkLFxuICAgICdhcmlhLXByZXNzZWQnOiBlbGVtZW50ID09PSAnYnV0dG9uJyA/IGlzU2VsZWN0ZWQgOiB1bmRlZmluZWQsXG4gICAgcmVmOiByZWZcbiAgfSwgcmVzdCksIGlubmVyTm9kZSk7XG59KTtcbkV1aUJ1dHRvbkRpc3BsYXlEZXByZWNhdGVkLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cbiAgZmlsbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKSxcblxuICAvKipcbiAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBFeHRlbmRzIHRoZSBidXR0b24gdG8gMTAwJSB3aWR0aFxuICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1pbmltdW0gd2lkdGhcbiAgICAgKi9cbiAgbWluV2lkdGg6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogUHJvdmlkZSBhIHZhbGlkIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSBlbGVtZW50IGFzXG4gICAgICAgKi9cbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImFcIiwgXCJidXR0b25cIiwgXCJzcGFuXCIsIFwibGFiZWxcIl0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBQcm92aWRlIHRoZSBjb21wb25lbnQncyBiYXNlIGNsYXNzIG5hbWUgdG8gYnVpbGQgdGhlIGNsYXNzIGxpc3Qgb25cbiAgICAgICAqL1xuICBiYXNlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07XG5FdWlCdXR0b25EaXNwbGF5RGVwcmVjYXRlZC5kaXNwbGF5TmFtZSA9ICdFdWlCdXR0b25EaXNwbGF5JzsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwidGV4dFByb3BzXCIsIFwiaXNMb2FkaW5nXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2l6ZVwiLCBcImljb25TaWRlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGljb25TaWRlVG9DbGFzc05hbWVNYXAgPSB7XG4gIGxlZnQ6IG51bGwsXG4gIHJpZ2h0OiAnZXVpQnV0dG9uQ29udGVudC0taWNvblJpZ2h0J1xufTtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IGtleXNPZihpY29uU2lkZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQnV0dG9uQ29udGVudERlcHJlY2F0ZWQgPSBmdW5jdGlvbiBFdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICB0ZXh0UHJvcHMgPSBfcmVmLnRleHRQcm9wcyxcbiAgICAgIF9yZWYkaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgICBpc0xvYWRpbmcgPSBfcmVmJGlzTG9hZGluZyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzTG9hZGluZyxcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIF9yZWYkaWNvblNpemUgPSBfcmVmLmljb25TaXplLFxuICAgICAgaWNvblNpemUgPSBfcmVmJGljb25TaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJGljb25TaXplLFxuICAgICAgX3JlZiRpY29uU2lkZSA9IF9yZWYuaWNvblNpZGUsXG4gICAgICBpY29uU2lkZSA9IF9yZWYkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkaWNvblNpZGUsXG4gICAgICBjb250ZW50UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICAvLyBBZGQgYW4gaWNvbiB0byB0aGUgYnV0dG9uIGlmIG9uZSBleGlzdHMuXG4gIHZhciBidXR0b25JY29uO1xuXG4gIGlmIChpc0xvYWRpbmcpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUJ1dHRvbkNvbnRlbnRfX3NwaW5uZXJcIixcbiAgICAgIHNpemU6IGljb25TaXplXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaWNvblR5cGUpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQnV0dG9uQ29udGVudF9faWNvblwiLFxuICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICBzaXplOiBpY29uU2l6ZSxcbiAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG5cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBjb250ZW50Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkNvbnRlbnQnLCBpY29uU2lkZSA/IGljb25TaWRlVG9DbGFzc05hbWVNYXBbaWNvblNpZGVdIDogbnVsbCwgY29udGVudFByb3BzICYmIGNvbnRlbnRQcm9wcy5jbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe30sIGNvbnRlbnRQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY29udGVudENsYXNzTmFtZXNcbiAgfSksIGJ1dHRvbkljb24sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHRleHRQcm9wcywgY2hpbGRyZW4pKTtcbn07XG5FdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAqIEl0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGljb24uXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BY2Nlc3NpYmlsaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkFjY2Vzc2liaWxpdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDBhOCA4IDAgMTEwIDE2QTggOCAwIDAxOCAwem0wIDFhNyA3IDAgMTAwIDE0QTcgNyAwIDAwOCAxem0zLjk3NCA0LjM0MmEuNS41IDAgMDEtLjIzMy41OTZsLS4wODMuMDM2TDkgNi44NnYyLjU1OWwuOTc0IDIuOTIzYS41LjUgMCAwMS0uMjMzLjU5NmwtLjA4My4wMzZhLjUuNSAwIDAxLS41OTYtLjIzM2wtLjAzNi0uMDgzLTEtM0w4IDkuNWwtLjAyNi4xNTgtMSAzYS41LjUgMCAwMS0uOTctLjIyOGwuMDIyLS4wODhMNyA5LjQxNlY2Ljg2bC0yLjY1OC0uODg2YS41LjUgMCAwMS4yMjgtLjk3bC4wODguMDIyTDcuNTgzIDZoLjgzM2wyLjkyNi0uOTc0YS41LjUgMCAwMS42MzIuMzE2ek04IDNhMSAxIDAgMTEwIDIgMSAxIDAgMDEwLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFjY2Vzc2liaWxpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFnZ3JlZ2F0ZSA9IGZ1bmN0aW9uIEV1aUljb25BZ2dyZWdhdGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi41IDJhLjUuNSAwIDEwMCAxIC41LjUgMCAwMDAtMXptMC0xYTEuNSAxLjUgMCAwMTEuNDE1IDFoMS45MDhhMS41IDEuNSAwIDAxMS4zOTMuOTQzTDguODM5IDdIMTIuNWEuNS41IDAgMDEwIDFIOC44MzlsLTEuNjIzIDQuMDU3QTEuNSAxLjUgMCAwMTUuODIzIDEzSDMuOTE1YTEuNSAxLjUgMCAxMTAtMWgxLjkwOGEuNS41IDAgMDAuNDY0LS4zMTRMNy43NjEgOEgzLjkxNWExLjUgMS41IDAgMTEwLTFINy43Nkw2LjI4NyAzLjMxNEEuNS41IDAgMDA1LjgyMyAzSDMuOTE1QTEuNSAxLjUgMCAxMTIuNSAxem0wIDExYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6TTMgNy41YS41LjUgMCAxMC0xIDAgLjUuNSAwIDAwMSAwem05LjM1NC0zLjM1NGEuNS41IDAgMDAtLjcwOC43MDhMMTMuNzkzIDdhLjcwNy43MDcgMCAwMTAgMWwtMi4xNDcgMi4xNDZhLjUuNSAwIDAwLjcwOC43MDhMMTQuNSA4LjcwN2ExLjcwNyAxLjcwNyAwIDAwMC0yLjQxNGwtMi4xNDYtMi4xNDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFnZ3JlZ2F0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQWxlcnQgPSBmdW5jdGlvbiBFdWlJY29uQWxlcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy41OSAxMC4wNTlMNy4zNSA1LjE4aDEuM0w4LjQgMTAuMDZoLS44MXptLjM5NCAxLjkwMWEuNjEuNjEgMCAwMS0uNDQ4LS4xODYuNjA2LjYwNiAwIDAxLS4xODYtLjQ0NGMwLS4xNzQuMDYyLS4zMjMuMTg2LS40NDZhLjYxNC42MTQgMCAwMS40NDgtLjE4NGMuMTY5IDAgLjMxNS4wNi40NC4xODIuMTI0LjEyMi4xODYuMjcuMTg2LjQ0OGEuNi42IDAgMDEtLjE4OS40NDYuNjA3LjYwNyAwIDAxLS40MzcuMTg0ek0yIDE0YTEgMSAwIDAxLS44NzgtMS40NzlsNi0xMWExIDEgMCAwMTEuNzU2IDBsNiAxMUExIDEgMCAwMTE0IDE0SDJ6bTAtMWgxMkw4IDIgMiAxM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWxlcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFuYWx5emVFdmVudCA9IGZ1bmN0aW9uIEV1aUljb25BbmFseXplRXZlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggOS4xNjlMMiA1LjI1djYuMTdsNiAzLjQyOCA2LTMuNDI4VjUuMjVMOCA5LjE3ek0xNSA0djhsLTcgNC03LTRWNGw3LTQgNyA0em0tMS40MjguMzM2TDggMS4xNTIgMi40MjggNC4zMzYgOCA3Ljk3NGw1LjU3Mi0zLjYzOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQW5hbHl6ZUV2ZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BbmFseXplRXZlbnQgPSBmdW5jdGlvbiBFdWlJY29uQW5hbHl6ZUV2ZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNCxcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjkyNCA0LjAxM2EuNjA1LjYwNSAwIDAwLS4yMjgtLjIzNkw3LjMwNC4wODJhLjYwNy42MDcgMCAwMC0uNjA4IDBMLjMwNCAzLjc3N0EuNjIuNjIgMCAwMDAgNC4zMDR2Ny4zOTJjMCAuMjE3LjExNi40MTguMzA0LjUyN2w2LjM5MiAzLjY5NWMuMTg4LjExLjQyLjExLjYwOCAwbDYuMzkyLTMuNjk1YS42MDkuNjA5IDAgMDAuMzA0LS41MjdWNC4zMDRhLjYwNy42MDcgMCAwMC0uMDc2LS4yOTF6TTEgNS4wNzl2Ni4zOTFsNiAzLjQ3IDYtMy40N1Y1LjA4TDcuMjUyIDguNDMyIDcgOC41NzlsLS4yNTItLjE0N0wxIDUuMDc5em0xMS40NzYtLjg1Mkw3IDEuMDYgMS41MjQgNC4yMjcgNyA3LjQybDUuNDc2LTMuMTk0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BbmFseXplRXZlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFubm90YXRpb24gPSBmdW5jdGlvbiBFdWlJY29uQW5ub3RhdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNi41YTQuNSA0LjUgMCAxMTUgNC40NzNWMTZIN3YtNS4wMjdBNC41IDQuNSAwIDAxMyA2LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFubm90YXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwbVRyYWNlID0gZnVuY3Rpb24gRXVpSWNvbkFwbVRyYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAwaDEyYTIgMiAwIDAxMiAydjEyYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjJhMSAxIDAgMDAtMS0xSDJ6bS41IDJoMTBhLjUuNSAwIDExMCAxaC0xMGEuNS41IDAgMDEwLTF6bTEgM2g2YS41LjUgMCAwMTAgMWgtNmEuNS41IDAgMDEwLTF6bTIgM2g0YS41LjUgMCAwMTAgMWgtNGEuNS41IDAgMDEwLTF6bTMgM2g1YS41LjUgMCAxMTAgMWgtNWEuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwbVRyYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBBZGREYXRhID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFkZERhdGEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMiAzMEgwVjNoMTIuNTdsMyA1SDMydjIyek0yIDI4aDI4VjEwSDE0LjQzbC0zLTVIMnYyM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEgMThoLTR2LTRoLTJ2NGgtNHYyaDR2NGgydi00aDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFkZERhdGE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3MgPSBmdW5jdGlvbiBFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5ncyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMi45MDkgMjYuMTgyaDEuOTM5djQuODQ4SDIuOTA5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC44NDggMTYuNjJWMEgyLjkxdjE2LjYyYTMuODc5IDMuODc5IDAgMTAxLjk0IDB6bS0uOTcgNS42ODNhMS45NCAxLjk0IDAgMTEwLTMuODc5IDEuOTQgMS45NCAwIDAxMCAzLjg3OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTQuNTQ1IDE2LjQ4NWgxLjkzOVYzMS4wM2gtMS45Mzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi40ODUgNi45MjRWMGgtMS45NHY2LjkyNGEzLjg3OSAzLjg3OSAwIDEwMS45NCAwem0tLjk3IDUuNjgyYTEuOTQgMS45NCAwIDExMC0zLjg3OSAxLjk0IDEuOTQgMCAwMTAgMy44OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjYuMTgyIDI2LjE4MmgxLjkzOXY0Ljg0OGgtMS45Mzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOC4xMjEgMTYuNjJWMGgtMS45NHYxNi42MmEzLjg3OSAzLjg3OSAwIDEwMS45NCAwem0tLjk3IDUuNjgzYTEuOTQgMS45NCAwIDExMC0zLjg3OSAxLjk0IDEuOTQgMCAwMTAgMy44Nzl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFnZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFnZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMSAyLjgyTDE2IC4wMzggMTEgMi44MnYyLjI4OWw1LTIuNzgyIDUgMi43ODJ2LTIuMjl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIxIDcuMjgyTDE2IDQuNWwtNSAyLjc4MlY5LjU3bDUtMi43ODEgNSAyLjc4MVY3LjI4MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgNS4wNDVMMiA3LjgyN3YxNS41NzdsMTQgNy43ODggMTQtNy43ODhWNy44MjdsLTUtMi43ODJ2Mi4yODlsMyAxLjY2OXYxMy4yMjVsLTEyIDYuNjc2LTEyLTYuNjc2VjkuMDAzbDMtMS42NjlWNS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjIgMTIuNUwxNiA5bC02IDMuNXY3bDYgMy41IDYtMy41di03em0tOS45NzQgMS4yMDVMMTYgMTEuMzg3bDMuOTc0IDIuMzE4djQuNTlMMTYgMjAuNjEzbC0zLjk3NC0yLjMxOHYtNC41OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQWdlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFwbSA9IGZ1bmN0aW9uIEV1aUljb25BcHBBcG0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDEwaDR2MkgxVjFoMzB2NmgtMlYzSDN2N3ptMjYgMTl2LTZoMnY4SDE4di04aDJ2Nmg5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0zMSAxMEg5djExaDEyYzUuNTIzIDAgMTAtNC40NzcgMTAtMTB2LTF6bS0xMCA5SDExdi03aDE3LjkzOEE4LjAwMSA4LjAwMSAwIDAxMjEgMTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFwbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQXBwU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFwcFNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNS41IDExLjkxNUwyNyA1LjI3OSAxOS41LjkzOGE3LjAwMiA3LjAwMiAwIDAwLTcgMGwtOCA0LjYyQTcgNyAwIDAwMSAxMS42MnY5LjIzN2E3IDcgMCAwMDMuNSA2LjA2MWw3LjUgNC4zM1YxNy45OGE3IDcgMCAwMTMuNS02LjA2M3pNMTAgMjcuNzg1di05LjgwOGE5IDkgMCAwMTQuNS03Ljc5M2w4LjUwMy00LjkxTDE4LjUgMi42NzJhNS4wMDMgNS4wMDMgMCAwMC01IDBsLTggNC42MTlBNSA1IDAgMDAzIDExLjYydjkuMjM4YTUgNSAwIDAwMi41IDQuMzNsNC41IDIuNTk4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTguNDA5IDEzLjU1YTcuMDg5IDcuMDg5IDAgMDExLjAzNSAxLjcxMUE2LjkzIDYuOTMgMCAwMTIwIDE3Ljk4djEzLjI3bDcuNS00LjMzYTcgNyAwIDAwMy41LTYuMDYxdi05LjIzOWE2Ljk5MiA2Ljk5MiAwIDAwLTEuNTg3LTQuNDIxTDE4LjQwOSAxMy41NXptMi43NzcuNzA1QTguOTMzIDguOTMzIDAgMDEyMiAxNy45Nzl2OS44MDdsNC41LTIuNTk4YTUgNSAwIDAwMi41LTQuMzNWMTEuNjJjMC0uNTg4LS4xMDYtMS4xNjEtLjMwMy0xLjdsLTcuNTExIDQuMzM1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBcHBTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEF1ZGl0YmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBBdWRpdGJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE1IDBoMnYzMmgtMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMzJoMTN2LTJIMlYyaDExVjBIMHpNMTkgMHYyaDExdjI4SDE5djJoMTNWMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQXVkaXRiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBDYW52YXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwQ2FudmFzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk03IDE3aDJ2N0g3ek0xMiAxNGgydjEwaC0yek0xNyAxNmgydjhoLTJ6TTIyIDE0aDN2MmgtM3pNMjIgMThoM3YyaC0zek0yMiAyMmgzdjJoLTN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC43MyAyNGE2LjQ3IDYuNDcgMCAwMS40NS0yLjE5Yy4zMzctLjkuNTItMS44NS41NC0yLjgxYTguNTUgOC41NSAwIDAwLS41NC0yLjgxIDYuNDcgNi40NyAwIDAxLS40NS0yLjE5IDkuMiA5LjIgMCAwMS42Mi0yLjQ5Yy41My0xLjU3IDEuMDgtMy4xOS4wOC00LjItMS0xLjAxLTIuNDEtLjQ0LTMuNTIuMDVhNS41OSA1LjU5IDAgMDEtMi4wOS42NCA1LjMgNS4zIDAgMDEtLjU5IDBMMTYgLjI4IDYuNzcgOGE1LjMgNS4zIDAgMDEtLjU5IDAgNS41OSA1LjU5IDAgMDEtMi4wOS0uNjVDMyA2Ljg3IDEuNiA2LjI1LjU3IDcuMzFjLTEuMDMgMS4wNi0uNDUgMi42My4wOCA0LjJBOS4yIDkuMiAwIDAxMS4yNyAxNGE2LjQ3IDYuNDcgMCAwMS0uNDUgMi4xOUE4LjU1IDguNTUgMCAwMC4yOCAxOWMuMDIuOTYuMjAzIDEuOTEuNTQgMi44MUE2LjQ3IDYuNDcgMCAwMTEuMjcgMjRhOS4yIDkuMiAwIDAxLS42MiAyLjQ5Yy0uNTMgMS41Ny0xLjA4IDMuMTktLjA4IDQuMi4zNTMuMzguODUyLjU5IDEuMzcuNThhNS42NyA1LjY3IDAgMDAyLjE1LS42M0E1LjU5IDUuNTkgMCAwMTYuMTggMzBhNy4xMyA3LjEzIDAgMDEyLjI5LjQ3IDggOCAwIDAwMi42Mi41MyA3LjM3IDcuMzcgMCAwMDIuNDctLjUxQTcuMTQgNy4xNCAwIDAxMTYgMzBhNi4yNCA2LjI0IDAgMDEyLjE0LjQ1IDggOCAwIDAwMi43Ny41NSA4LjA4IDguMDggMCAwMDIuNzctLjU1IDYuMjQgNi4yNCAwIDAxMi4xNC0uNDUgNS41OSA1LjU5IDAgMDEyLjA5LjY1YzEuMTEuNDkgMi40OSAxLjExIDMuNTIuMDUgMS4wMy0xLjA2LjQ1LTIuNjMtLjA4LTQuMmE5LjIgOS4yIDAgMDEtLjYyLTIuNXpNMjEuMTcgN2gtLjI2YTggOCAwIDAwLTIuNzcuNTVBNi4yNCA2LjI0IDAgMDExNiA4YTYuMjQgNi4yNCAwIDAxLTIuMTQtLjQ1QTggOCAwIDAwMTEuMDkgN2gtLjI2TDE2IDIuNzIgMjEuMTcgN3ptOC44OSAyMi4yN2E0LjQyIDQuNDIgMCAwMS0xLjM0LS40NiA3LjA4IDcuMDggMCAwMC0yLjktLjgyIDguMTQgOC4xNCAwIDAwLTIuNzguNTUgNi4xMyA2LjEzIDAgMDEtMi4xMy40NSA2LjI0IDYuMjQgMCAwMS0yLjE0LS40NUE4IDggMCAwMDE2IDI4YTkgOSAwIDAwLTMuMDguNiA1Ljc0IDUuNzQgMCAwMS0xLjgzLjQgNi4zNiA2LjM2IDAgMDEtMi0uNDNBOC43MiA4LjcyIDAgMDA2LjE4IDI4YTcuMDggNy4wOCAwIDAwLTIuOS44MiA5LjY1IDkuNjUgMCAwMS0xLjI4LjUyIDYuMDggNi4wOCAwIDAxLjUyLTIuMjFjLjQwMy0xIC42NS0yLjA1NS43My0zLjEzYTguNTUgOC41NSAwIDAwLS41NC0yLjgxQTYuNDcgNi40NyAwIDAxMi4yNyAxOWE2LjQ3IDYuNDcgMCAwMS40NC0yLjE5Yy4zMzctLjkuNTItMS44NS41NC0yLjgxYTEwLjQ4IDEwLjQ4IDAgMDAtLjcyLTMuMTMgOSA5IDAgMDEtLjU5LTIuMTZIMmMuNDQ3LjEuODguMjU1IDEuMjkuNDZhNy4wOCA3LjA4IDAgMDAyLjkuODJBOC4xNCA4LjE0IDAgMDA5IDkuNDQgNi4xMyA2LjEzIDAgMDExMS4wOSA5YTYuMTMgNi4xMyAwIDAxMi4xMy40NUE4LjE0IDguMTQgMCAwMDE2IDEwYTguMTQgOC4xNCAwIDAwMi43OC0uNTVBNi4xMyA2LjEzIDAgMDEyMC45MSA5YTYuMTMgNi4xMyAwIDAxMi4wOS40NCA4LjE0IDguMTQgMCAwMDIuNzguNTUgNy4wOCA3LjA4IDAgMDAyLjktLjgyQTkuNjUgOS42NSAwIDAxMzAgOC42NmE2LjA4IDYuMDggMCAwMS0uNTIgMi4yMWMtLjQwMyAxLS42NSAyLjA1NS0uNzMgMy4xMy4wMi45Ni4yMDMgMS45MS41NCAyLjgxYTYuNDcgNi40NyAwIDAxLjQ0IDIuMTkgNi40NyA2LjQ3IDAgMDEtLjQ0IDIuMTkgOC41NSA4LjU1IDAgMDAtLjU0IDIuODFjLjA3OCAxLjA3NC4zMiAyLjEzLjcyIDMuMTNhOSA5IDAgMDEuNTkgMi4xNnYtLjAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDYW52YXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcENhc2VzID0gZnVuY3Rpb24gRXVpSWNvbkFwcENhc2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIyLjUgMjRhNS41IDUuNSAwIDEwMC0xMSA1LjUgNS41IDAgMDAwIDExem0wIDJhNy41IDcuNSAwIDEwMC0xNSA3LjUgNy41IDAgMDAwIDE1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuMjkzIDI3LjcwN2wtNC00IDEuNDE0LTEuNDE0IDQgNC0xLjQxNCAxLjQxNHpNNiA0SDJ2MjdoMjV2LTNoLTJ2MUg0VjZoMlY0em0xOSA2aDJWNGgtNHYyaDJ2NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNi4zODEgMy4wMjRsLjUzOCAxLjE1OGgyLjI3NGwuNjM2IDIuNTQ1SDkuNjhsLjYzNy0yLjU0NWgyLjU1OGwuNTM4LTEuMTU4Yy4yOTItLjYzLjk1NS0xLjAyNCAxLjQ4NC0xLjAyNC41MyAwIDEuMTkzLjM5NCAxLjQ4NSAxLjAyNHptNi4wMSA1LjcwM2wtMS42MzYtNi41NDVoLTIuNTZDMTcuNi44OTggMTYuMjYyIDAgMTQuODk3IDBjLTEuMzY0IDAtMi43MDMuODk4LTMuMjk5IDIuMTgySDguNzU1TDcuMTE4IDguNzI3aDE1LjI3M3pNNyAxNWg2di0ySDd2MnptNiA1SDd2LTJoNnYyem0tNiA1aDZ2LTJIN3YyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDYXNlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQ29kZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBDb2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMjc2IDI5bC41OTQgMkgwbDcuNjIxLTE0LjI5LjgxMSAyLjczTDMuMzMzIDI5aDcuOTQzek0yOC45MiAzMWwtNC45ODctMTYuNTk4QTE2IDE2IDAgMDA4LjY4OCAzbDEuOCA2SDguNEw2IDFoMi42MDdhMTggMTggMCAwMTE3LjI0MSAxMi44MjhMMzEgMzFoLTIuMDh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTEyLjAzNyAxNC4wMkwxNi40OTIgMjloNi44MjdsLTIuMzMzLTcuODQ5YTEwIDEwIDAgMDAtOC45NDktNy4xM3pNOS4zNSAxMmgyLjA1YTEyIDEyIDAgMDExMS41MDMgOC41ODFMMjYgMzFIMTVMOS4zNSAxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ29kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQ29uc29sZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBDb25zb2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgOUgzYTMgMyAwIDAxLTMtM1YzYTMgMyAwIDAxMy0zaDI2YTMgMyAwIDAxMyAzdjNhMyAzIDAgMDEtMyAzek0zIDJhMSAxIDAgMDAtMSAxdjNhMSAxIDAgMDAxIDFoMjZhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjkgMzJIM2EzIDMgMCAwMS0zLTNWMTRhMyAzIDAgMDEzLTNoMjZhMyAzIDAgMDEzIDN2MTVhMyAzIDAgMDEtMyAzek0zIDEzYTEgMSAwIDAwLTEgMXYxNWExIDEgMCAwMDEgMWgyNmExIDEgMCAwMDEtMVYxNGExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMjkgMTcuNzFsMy4zIDMuMjktMy4zIDMuMjkgMS40MiAxLjQyIDQuNy00LjcxLTQuNy00Ljcxek0xNSAyNGg5djJoLTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENvbnNvbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAwdjE2aDguN2w1LjMtNlYwSDB6bTIgMmgxMHY3SDd2NUgyVjJ6bTguNDUgOUw5IDEyLjY0VjExaDEuNDV6TTE4IDE2djE2aDguN2w1LjMtNlYxNkgxOHptMiAyaDEwdjdoLTV2NWgtNVYxOHptOC40NSA5TDI3IDI4LjY0VjI3aDEuNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTUgMThIM2MwIDYuMDc1IDQuOTI1IDExIDExIDExaDJ2LTJoLTJhOSA5IDAgMDEtOS05ek0xOCAzaC0ydjJoMmE5IDkgMCAwMTkgOWgyYzAtNi4wNzUtNC45MjUtMTEtMTEtMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBEYXNoYm9hcmQgPSBmdW5jdGlvbiBFdWlJY29uQXBwRGFzaGJvYXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgOUgzYTMgMyAwIDAxLTMtM1YzYTMgMyAwIDAxMy0zaDI2YTMgMyAwIDAxMyAzdjNhMyAzIDAgMDEtMyAzek0zIDJhMSAxIDAgMDAtMSAxdjNhMSAxIDAgMDAxIDFoMjZhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTIgMjBIM2EzIDMgMCAwMS0zLTN2LTNhMyAzIDAgMDEzLTNoOWEzIDMgMCAwMTMgM3YzYTMgMyAwIDAxLTMgM3ptLTktN2ExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDEgMWg5YTEgMSAwIDAwMS0xdi0zYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMzFIM2EzIDMgMCAwMS0zLTN2LTNhMyAzIDAgMDEzLTNoOWEzIDMgMCAwMTMgM3YzYTMgMyAwIDAxLTMgM3ptLTktN2ExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDEgMWg5YTEgMSAwIDAwMS0xdi0zYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOSAzMWgtOWEzIDMgMCAwMS0zLTNWMTRhMyAzIDAgMDEzLTNoOWEzIDMgMCAwMTMgM3YxNGEzIDMgMCAwMS0zIDN6bS05LTE4YTEgMSAwIDAwLTEgMXYxNGExIDEgMCAwMDEgMWg5YTEgMSAwIDAwMS0xVjE0YTEgMSAwIDAwLTEtMWgtOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRGFzaGJvYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBEZXZ0b29scyA9IGZ1bmN0aW9uIEV1aUljb25BcHBEZXZ0b29scyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDI4aC0ydi04LjQ5bC42LS4yNkE5IDkgMCAwMDIxIDMuNTJWMTFIMTFWMy41MmE5IDkgMCAwMDEuNCAxNS43M2wuNi4yNlYyOGgtMnYtNy4yMUExMSAxMSAwIDAxMTEuNi45MkwxMyAuMzFWOWg2Vi4zMWwxLjQuNjFhMTEgMTEgMCAwMS42IDE5Ljg3VjI4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMSAzMGgxMHYySDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBEZXZ0b29sczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwRGlzY292ZXIgPSBmdW5jdGlvbiBFdWlJY29uQXBwRGlzY292ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTguMzMgMjMuNjdsNC43OS0xMC41NSAxMC41NS00Ljc5LTQuNzkgMTAuNTUtMTAuNTUgNC43OXptNi4zLTlsLTIuMjggNSA1LTIuMjggMi4yOC01LTUgMi4yOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBDNy4xNjMgMCAwIDcuMTYzIDAgMTZzNy4xNjMgMTYgMTYgMTYgMTYtNy4xNjMgMTYtMTZBMTYgMTYgMCAwMDE2IDB6bTEgMjkuOTVWMjhoLTJ2MS45NUExNCAxNCAwIDAxMi4wNSAxN0g0di0ySDIuMDVBMTQgMTQgMCAwMTE1IDIuMDVWNGgyVjIuMDVBMTQgMTQgMCAwMTI5Ljk1IDE1SDI4djJoMS45NUExNCAxNCAwIDAxMTcgMjkuOTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcERpc2NvdmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBFbXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwRW1zKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0zIDIyaDN2MkgxVjFoMjN2NWgtMlYzSDN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4yMjggMjljMS40OTItMS42NzggMS4zNTMtMi44NTkuMDA5LTUuNjU0LS4wNDktLjEtLjA0OS0uMS0uMDk3LS4yMDMtMS4zNjktMi44NTUtMS42MjYtNC40OTEtLjMyNS02LjU4MiAyLjc5Ni00LjQ5OCA5LjUxNC0yLjY0MiAxNC4xODUgMi4zMTdWMTBIMTB2MTloNS4yMjh6bTIuNDcgMEgyOXYtNi45ODNjLTMuODgtNS40MDYtMTAuMzc2LTcuNzk1LTEyLjQ4Ny00LjQtLjgzIDEuMzM2LS42NjkgMi4zNy40MyA0LjY2MmwuMDk3LjJjMS4zNTIgMi44MTQgMS43MzEgNC42My42NTkgNi41MjF6TTMxIDh2MjNIOFY4aDIzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBFbXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEZpbGViZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEZpbGViZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk04IDE4aDE2djJIOHpNOCAxM2g5djJIOHpNOCAyM2gxNnYySDh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS40MSAwSDVhMyAzIDAgMDAtMyAzdjI2YTMgMyAwIDAwMyAzaDIyYTMgMyAwIDAwMy0zVjguNTlMMjEuNDEgMHpNMjIgMy40MUwyNi41OSA4SDIyVjMuNDF6TTI3IDMwSDVhMSAxIDAgMDEtMS0xVjNhMSAxIDAgMDExLTFoMTV2OGg4djE5YTEgMSAwIDAxLTEgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRmlsZWJlYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEZsZWV0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEZsZWV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi45OTYgMTguNjM2TDAgMjAuNDM0djYuMTMybDYgMy42IDUtMyA1IDMgNS0zIDUgMyA2LTMuNnYtNi4xMzJsLTUtM3YtNWwtNS0zdi01bC02LTMuNi02IDMuNnYyLjgzMmwyIC4wMzNWNS41NjZsNC0yLjQgNCAyLjR2My44NjhsLTEuOTk2IDEuMTk3IDEgMS43MzNMMjEgMTEuMTY2bDQgMi40djMuODY4bC00IDIuNC0yLjI1Ny0xLjM1NC0uOTcxIDEuNzVMMjAgMjEuNTY1djMuODY4bC00IDIuNC00LTIuNHYtMS43bC0yLS4wMzN2MS43MzNsLTQgMi40LTQtMi40di0zLjg2OGwxLjk5Ni0xLjE5Ny0xLTEuNzMzek0yMiAyNS40MzR2LTMuODY4bDQtMi40IDQgMi40djMuODY4bC00IDIuNC00LTIuNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTEgMjIuMTY2bC02LTMuNnYtNi4xMzJsNi0zLjYgNiAzLjZ2Ni4xMzJsLTYgMy42em00LTQuNzMydi0zLjg2OGwtNC0yLjQtNCAyLjR2My44NjhsNCAyLjQgNC0yLjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEZsZWV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBHaXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwR2lzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOS4wMTQgMjMuODlsMi4yOTYgMS4xNDVMMTYgMzIuMTAxLjUzIDI0Ljk2MWwyLjQ5LTEuMDU2IDIuNDUzIDEuMTMyLS4wMDMuMDAyTDE2IDI5Ljg5OWwxMC42OS00LjkzNC0uMDAzLS4wMDEgMi4zMjctMS4wNzR6bS00Ljk3Mi03LjQ4Mmw3LjI2OCAzLjYyN0wxNiAyNy4xMDEuNTMgMTkuOTYxbDcuNjY4LTMuMjUyYy4zOTIuNDg2LjgzOCAxLjAyIDEuMzQgMS42MDRMNS40NyAyMC4wMzkgMTYgMjQuODk5bDEwLjY5LTQuOTM0LTMuOTU0LTEuOTczYy40OTMtLjU4LjkyOC0xLjEwNyAxLjMwNi0xLjU4NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDlhMiAyIDAgMTAtNCAwIDIgMiAwIDAwNCAwem0yIDBhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tMy4yNjggMTIuNjgxbC0uNzMyLjc4Ny0uNzMyLS43ODdjLTMuNTU3LTMuODI0LTUuODE3LTYuNDYyLTYuODEtNy45NkE4Ljc0NiA4Ljc0NiAwIDAxNyA4Ljg3NUM3IDMuOTcgMTEuMDMzIDAgMTYgMHM5IDMuOTcgOSA4Ljg3NWE4Ljc0NiA4Ljc0NiAwIDAxLTEuNDU5IDQuODQ2Yy0uOTkyIDEuNDk4LTMuMjUyIDQuMTM2LTYuODA5IDcuOTZ6bTUuMTQyLTkuMDY0QTYuNzQ3IDYuNzQ3IDAgMDAyMyA4Ljg3NUMyMyA1LjA4MSAxOS44NyAyIDE2IDJTOSA1LjA4MSA5IDguODc1YzAgMS4zNDkuMzk0IDIuNjM2IDEuMTI2IDMuNzQyLjg0NiAxLjI3NyAyLjgxMiAzLjU5MyA1Ljg3NCA2LjkxMiAzLjA2Mi0zLjMyIDUuMDI4LTUuNjM1IDUuODc0LTYuOTEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBHaXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEdyYXBoID0gZnVuY3Rpb24gRXVpSWNvbkFwcEdyYXBoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNCAyMGE0IDQgMCAxMTAtOCA0IDQgMCAwMTAgOHptMC02YTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00em0tOC4yLTUuNjJBNCA0IDAgMTExOCAxLjA2YTQgNCAwIDAxLTIuMiA3LjMyem0wLTZhMiAyIDAgMTAuMDEgMGgtLjAxem0uMDEgMjkuMjRhNCA0IDAgMTEtLjA4My04IDQgNCAwIDAxLjA4MyA4em0wLTZhMiAyIDAgMTAuMzkgMCAyIDIgMCAwMC0uNCAwaC4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDE3di0yaC02LjE0YTQgNCAwIDAwLS44Ni0xLjY0bDIuMzEtMy40NC0xLjY4LTEuMTItMi4zMSAzLjQ0QTQgNCAwIDAwOCAxMmE0IDQgMCAxMDAgOCA0IDQgMCAwMDEuMzItLjI0bDIuMzEgMy40NCAxLjY2LTEuMTJMMTEgMTguNjRhNCA0IDAgMDAuODYtMS42NEgxOHpNNiAxNmEyIDIgMCAxMTQgMCAyIDIgMCAwMS00IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEdyYXBoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBHcm9rID0gZnVuY3Rpb24gRXVpSWNvbkFwcEdyb2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjcyNyAyLjkxVi45N2MtMS4zNTcgMC00LjE4IDAtNS44MTggMS45NC0uOTcgMS4xODItMS4zMjggMi45MDgtLjk3IDQuOTgzLjU2MyAzLjMwNy45NyA2LjMzMi4zMDEgNy4xNTctLjMuMzEtLjk3LjQ2NS0yLjI0LjQ2NXYxLjk0YzEuMjcgMCAxLjk0LjE1NSAyLjI1LjQ5NC42OTguODI0LjI2MiAzLjg3OS0uMyA3LjE1Ni0uMzUgMi4xMjQtLjAxIDMuODAyLjk2IDQuOTU2QzUuNTI3IDMyIDguMzUgMzIgOS43MjYgMzJ2LTEuOTRjLTEuMTQ0IDAtMy4yODcgMC00LjMxNS0xLjIyMWE0LjExMiA0LjExMiAwIDAxLS41MzMtMy40MTRjLjg0My01LjA0Mi45Ny03LjM3LS4xMzYtOC43MjctLjA2OC0uMDc3LS4xNDUtLjEzNi0uMjEzLS4yMDMtLjA2OC0uMDY4LjE0NS0uMTI3LjIxMy0uMjA0IDEuMTQ0LTEuMzY3Ljk3LTMuNjk1LjEzNi04LjcyN2E0LjExMiA0LjExMiAwIDAxLjU0My0zLjQxNEM2LjQ0IDIuOTEgOC41ODMgMi45MSA5LjcyNyAyLjkxek0zMi4wMyAxNy40NTR2LTEuOTRjLTEuMjcgMC0xLjk0LS4xNTUtMi4yNS0uNDk0LS42OTgtLjgyNS0uMjYxLTMuODguMzAxLTcuMTU3LjM1LTIuMTIzIDAtMy44MDEtLjk3LTQuOTg0QzI3LjQ5My45NCAyNC42NzIuOTQgMjMuMjk0Ljk0djEuOTdjMS4xNDUgMCAzLjI4OCAwIDQuMzE1IDEuMjJhNC4xMTIgNC4xMTIgMCAwMS41NDQgMy40MTRjLS44NDQgNS4wNDMtLjk3IDcuMzcuMTM1IDguNzI4LjA2OC4wNzcuMTQ2LjEzNS4yMTQuMjAzLjA2Ny4wNjgtLjE0Ni4xMjYtLjIxNC4yMDQtMS4xNDQgMS4zNjctLjk3IDMuNjk0LS4xMzUgOC43MjcuMzI5IDEuMTYyLjEzIDIuNDEtLjU0NCAzLjQxMy0xLjAxOCAxLjI0Mi0zLjE2IDEuMjQyLTQuMzA1IDEuMjQyVjMyYzEuMzU4IDAgNC4xOCAwIDUuODE4LTEuOTQuOTctMS4xODIgMS4zMjktMi45MDguOTctNC45ODQtLjU2My0zLjMwNi0uOTctNi4zMzItLjMtNy4xNTYuMy0uMzEuOTY5LS40NjUgMi4yNC0uNDY1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNi4yMTIgMTUuNTE1aC0yLjAwN2E3Ljc1OCA3Ljc1OCAwIDAwLTYuNzItNi43MlY2Ljc4OGgtMS45NHYyLjAwN2E3Ljc1OCA3Ljc1OCAwIDAwLTYuNzIgNi43Mkg2LjgxOHYxLjk0aDIuMDA3YTcuNzU4IDcuNzU4IDAgMDA2LjcyIDYuNzJ2Mi4wMDdoMS45NHYtMi4wMDdhNy43NTggNy43NTggMCAwMDYuNzItNi43MmgyLjAwN3YtMS45NHptLTguNzI3IDYuN3YtMS44NTFoLTEuOTR2MS44NTJhNS44MTggNS44MTggMCAwMS00Ljc2LTQuNzYxaDEuODUxdi0xLjk0aC0xLjg1MmE1LjgxOCA1LjgxOCAwIDAxNC43NjEtNC43NjF2MS44NTJoMS45NHYtMS44NTJhNS44MTggNS44MTggMCAwMTQuNzYxIDQuNzYxaC0xLjg1MnYxLjk0aDEuODUyYTUuODE4IDUuODE4IDAgMDEtNC43NjEgNC43NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwR3JvazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwSGVhcnRiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEhlYXJ0YmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNC4xNCAxNS4zOWE4LjA1OCA4LjA1OCAwIDAxLTIuMi00LjA0M0E2Ljc4OCA2Ljc4OCAwIDAxNC4xOTggNS40N2E2LjczIDYuNzMgMCAwMTguNzI3LS4yMTNsMS4yNi0xLjQ2NGE4LjY1IDguNjUgMCAwMC0xMS4yNzcuMjMyQTguNzI3IDguNzI3IDAgMDAuMDY4IDExLjZhMTAuMTcyIDEwLjE3MiAwIDAwMi43OTMgNS4yNzVsMS4yOC0xLjQ4NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjUxNSAzMS4yNzRMNC41NDggMTguNDU0IDE1Ljg1NSA0Ljc2M2E4LjY3IDguNjcgMCAwMTEyLjI2Ni0uNzQ2IDguNzI3IDguNzI3IDAgMDEyLjkxIDcuMjA1Yy0uMjQzIDIuNjk1LTIuMDM3IDQuNzMyLTMuNDgyIDYuMzdMMTUuNTE1IDMxLjI3NXptLTguNDI3LTEyLjgybDguNDI3IDkuODYyIDEwLjU1LTExLjk5NWMxLjMyLTEuNTAzIDIuODIyLTMuMjEgMy4wMDctNS4yNjVhNi43ODggNi43ODggMCAwMC0yLjI0LTUuNTg2IDYuNzMgNi43MyAwIDAwLTkuNTA0LjU2M0w3LjA4OCAxOC40NTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEhlYXJ0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEluZGV4TWFuYWdlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDE4di0yaC0ydjJIM3Y2aDJ2LTRoMTB2NGgydi00aDEwdjRoMnYtNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAzMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC00YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0xMiA0YTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTRhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bTEyIDRhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6bTAtNGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnpNMjMgOFY2aC0yLjFhNSA1IDAgMDAtLjczLTEuNzVsMS40OS0xLjQ5LTEuNDItMS40Mi0xLjQ5IDEuNDlBNSA1IDAgMDAxNyAyLjFWMGgtMnYyLjFhNSA1IDAgMDAtMS43NS43M2wtMS40OS0xLjQ5LTEuNDIgMS40MiAxLjQ5IDEuNDlBNSA1IDAgMDAxMS4xIDZIOXYyaDIuMWE1IDUgMCAwMC43MyAxLjc1bC0xLjQ5IDEuNDkgMS40MSAxLjQxIDEuNDktMS40OWE1IDUgMCAwMDEuNzYuNzRWMTRoMnYtMi4xYTUgNSAwIDAwMS43NS0uNzNsMS40OSAxLjQ5IDEuNDEtMS40MS0xLjQ4LTEuNUE1IDUgMCAwMDIwLjkgOEgyM3ptLTcgMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDhhMSAxIDAgMDEtMS0xIDEuMzkgMS4zOSAwIDAxMC0uMi42NS42NSAwIDAxLjA2LS4xOC43NC43NCAwIDAxLjA5LS4xOCAxLjYxIDEuNjEgMCAwMS4xMi0uMTUuOTMuOTMgMCAwMS4zMy0uMjEgMSAxIDAgMDExLjA5LjIxbC4xMi4xNWEuNzguNzggMCAwMS4wOS4xOC42Mi42MiAwIDAxLjEuMTggMS4yNyAxLjI3IDAgMDEwIC4yIDEgMSAwIDAxLTEgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBJbmRleFBhdHRlcm4gPSBmdW5jdGlvbiBFdWlJY29uQXBwSW5kZXhQYXR0ZXJuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMTRoLThhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoOGEzIDMgMCAwMTMgM3Y4YTMgMyAwIDAxLTMgM3pNMTIgMmExIDEgMCAwMC0xIDF2OGExIDEgMCAwMDEgMWg4YTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xaC04ek0xNyAxOHYtMmgtMnYySDN2Nmgydi00aDEwdjRoMnYtNGgxMHY0aDJ2LTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTQgMzJhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6bTAtNGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnptMTIgNGEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC00YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0xMiA0YTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTRhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6TTEzIDRoNnYyaC02ek0xMyA4aDZ2MmgtNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSW5kZXhQYXR0ZXJuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBJbmRleFJvbGx1cCA9IGZ1bmN0aW9uIEV1aUljb25BcHBJbmRleFJvbGx1cChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMyIDI2di0yaC0yLjFhNSA1IDAgMDAtLjczLTEuNzVsMS40OS0xLjQ5LTEuNDEtMS40MS0xLjQ5IDEuNDlBNSA1IDAgMDAyNiAyMC4xVjE4aC0ydjIuMWE1IDUgMCAwMC0xLjc1LjczbC0xLjQ5LTEuNDktMS40MSAxLjQxIDEuNDkgMS40OUE1IDUgMCAwMDIwLjEgMjRIMTh2MmgyLjFhNSA1IDAgMDAuNzMgMS43NWwtMS40OSAxLjQ5IDEuNDEgMS40MSAxLjQ5LTEuNDlhNSA1IDAgMDAxLjc2Ljc0VjMyaDJ2LTIuMWE1IDUgMCAwMDEuNzUtLjczbDEuNDkgMS40OSAxLjQxLTEuNDEtMS40OS0xLjQ5QTUgNSAwIDAwMjkuOSAyNkgzMnptLTcgMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI1LjcxIDI0LjI5YTEgMSAwIDAwLTEuMDktLjIxIDEuMTUgMS4xNSAwIDAwLS4zMy4yMS45My45MyAwIDAwLS4yMS4zMyAxIDEgMCAwMDEuMyAxLjMgMS4xNSAxLjE1IDAgMDAuMzMtLjIxIDEgMSAwIDAwLjIxLTEuMDkuOTQuOTQgMCAwMC0uMjEtLjMzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk01IDZoMTZ2Mkg1ek01IDEyaDE2djJINXpNNSAxOGgxMHYySDV6TTUgMjRoOHYySDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkgzYTMgMyAwIDAxLTMtM1YzYTMgMyAwIDAxMy0zaDIwYTMgMyAwIDAxMyAzdjEzaC0yVjNhMSAxIDAgMDAtMS0xSDNhMSAxIDAgMDAtMSAxdjI2YTEgMSAwIDAwMSAxaDEzdjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEluZGV4Um9sbHVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBMZW5zID0gZnVuY3Rpb24gRXVpSWNvbkFwcExlbnMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIzLjc5MyAxNC4yOTNsMS40MTQgMS40MTQtNi40MDggNi40MDktMy43NS0zLjI1LTQuMzQyIDQuMzQxLTEuNDE0LTEuNDE0IDUuNjU4LTUuNjU5IDMuNzUgMy4yNSA1LjA5Mi01LjA5MXpNMTIgMTF2NWwtMiAydi03aDJ6bTEwLTZ2OGwtMiAyVjVoMnptLTUgM3Y3bC0yLTJWOGgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgMGM4LjI4NCAwIDE1IDYuNzE2IDE1IDE1IDAgOC4yODQtNi43MTYgMTUtMTUgMTUtMy43ODIgMC03LjIzOC0xLjQtOS44NzYtMy43MWwtNS40MTcgNS40MTctMS40MTQtMS40MTQgNS40MTctNS40MTdBMTQuOTQzIDE0Ljk0MyAwIDAxMiAxNWMwLTEuMDUuMTA4LTIuMDc0LjMxMy0zLjA2MmwxLjkwNi42NzJDNC4wNzUgMTMuMzg1IDQgMTQuMTg0IDQgMTVjMCA3LjE4IDUuODIgMTMgMTMgMTNzMTMtNS44MiAxMy0xM1MyNC4xOCAyIDE3IDJjLTEuMDAyIDAtMS45NzguMTEzLTIuOTE1LjMyOGwtLjc1LTEuODc3QTE1LjAzMSAxNS4wMzEgMCAwMTE3IDB6TTkuNjIxIDEuOTM3bC43NSAxLjg3N2ExMy4wNjIgMTMuMDYyIDAgMDAtNC44MiA1LjAyNGwtMS45MDctLjY3M2ExNS4wNjggMTUuMDY4IDAgMDE1Ljk3Ny02LjIyOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTGVuczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwTG9ncyA9IGZ1bmN0aW9uIEV1aUljb25BcHBMb2dzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSA4YzMuOTgzIDAgNy43MzIgMS4wMTMgMTEuMDAxIDIuNzk3djIuMzEyQTIwLjg4NyAyMC44ODcgMCAwMDIgMTAuMDIzdjExLjAyNWM0Ljg1LjQ2MiA5LjI3IDQuMTgzIDkuOTU1IDguNjkxbC4wMzUuMjYxSDEydjJoLTEuOTM4bC0uMDE4LTEuMjM2Yy0uMTE2LTQuMDE1LTQuMzM2LTcuNjMxLTguNzkzLTcuNzZMMCAyMi45ODZWOGgxem0xMy04aDFjOS4yOCAwIDE2LjgyNSA3LjQzNyAxNi45OTcgMTYuNjc3TDMyIDE3djE1aC0yVjE3YzAtNy44NC02LjAxNC0xNC4yNzQtMTMuNjgtMTQuOTQzTDE2IDIuMDMzdjcuNjgxbC0yLTEuMTQzVjBoMS0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNi45OTcgMzAuNjM2TDI3LjAwOSAzMkgxNFYxMS4zMDVsMS40ODMuODJjNi45OTQgMy44NjEgMTEuMzgyIDEwLjczNSAxMS41MTQgMTguNTF6bS0yLjA0OC0xLjA0QzI0LjUwNSAyMy41NTYgMjEuMjA1IDE4LjIgMTYgMTQuNzcxVjMwaDguOTc0bC0uMDI1LS40MDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcExvZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE1hbmFnZW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWFuYWdlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTYgMjFhNSA1IDAgMTEwLTEwIDUgNSAwIDAxMCAxMHptMC04YTMgMyAwIDEwMCA2IDMgMyAwIDAwMC02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMzJoLTh2LTQuMDZhMSAxIDAgMDAtMS42MS0uNjdsLTIuODggMi44Ny01LjY1LTUuNjUgMi44Ny0yLjg3YS45Mi45MiAwIDAwLjItMSAuOTMuOTMgMCAwMC0uODYtLjZIMFYxMmg0LjA2YS45Mi45MiAwIDAwLjg1LS41OC45NC45NCAwIDAwLS4xOS0xTDEuODYgNy41MWw1LjY1LTUuNjUgMi44NyAyLjg3QTEgMSAwIDAwMTIgNC4wNlYwaDh2NC4wNmExIDEgMCAwMDEuNjEuNjdsMi44Ny0yLjg3IDUuNjYgNS42Ni0yLjg3IDIuODdhLjkyLjkyIDAgMDAtLjIgMSAuOTMuOTMgMCAwMC44Ni42SDMydjhoLTQuMDZhLjkyLjkyIDAgMDAtLjg1LjU4Ljk0Ljk0IDAgMDAuMTkgMWwyLjg3IDIuODctNS42NiA1LjY2LTIuODctMi44N2ExIDEgMCAwMC0xLjYxLjY3TDIwIDMyem0tNi0yaDR2LTIuMDZhMyAzIDAgMDE1LTIuMDhsMS40NiAxLjQ2IDIuODMtMi44M0wyNS44NiAyM2EzIDMgMCAwMTIuMDgtNUgzMHYtNGgtMi4wNmEzIDMgMCAwMS0yLjA4LTVsMS40Ni0xLjQ2LTIuODMtMi44NUwyMyA2LjE0YTMgMyAwIDAxLTUtMi4wOFYyaC00djIuMDZhMyAzIDAgMDEtNSAyLjA4TDcuNTEgNC42OSA0LjY5IDcuNTEgNi4xNCA5YTMgMyAwIDAxLTIuMDggNUgydjRoMi4wNmEzIDMgMCAwMTIuMDggNWwtMS40NSAxLjQ5IDIuODMgMi44M0w5IDI1Ljg2YTMgMyAwIDAxNSAyLjA4VjMwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNYW5hZ2VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBNZXRyaWNiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1ldHJpY2JlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAxLTE2IDE2em0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMDAxNiAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOCAxNmgtMmMwLTUuNTIzLTQuNDc3LTEwLTEwLTEwUzYgMTAuNDc3IDYgMTZINEM0IDkuMzczIDkuMzczIDQgMTYgNHMxMiA1LjM3MyAxMiAxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjcxIDExLjcxTDIwLjMgMTAuMyAxOCAxMi41N2E0IDQgMCAwMC0yLS41NyA0IDQgMCAxMDQgNCA0IDQgMCAwMC0uNTctMmwyLjI4LTIuMjl6TTE2IDE4YTIgMiAwIDExMC00IDIgMiAwIDAxMCA0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNZXRyaWNiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBNZXRyaWNzID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1ldHJpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMCAxOS4wOTJ2MTIuODhIMnYtNS4zODZsNi43NDctNi43NDcuNzA4LjcwOGMuMjM2LjIzNi40OC40NjMuNzMzLjY4TDQgMjcuNDE0djIuNTU4aDI0di04LjkxYy4xODYtLjE2Ni4zNjktLjMzOS41NDYtLjUxNkwzMCAxOS4wOTJ6bS0yMC44NS0zLjE5QTEwLjk1NSAxMC45NTUgMCAwMTggMTFDOCA0LjkyNSAxMi45MjUgMCAxOSAwczExIDQuOTI1IDExIDExYzAgMS43Ni0uNDE0IDMuNDI1LTEuMTUgNC45bC0xLjUxLTEuNTFBOC45NzMgOC45NzMgMCAwMDI4IDExYTkgOSAwIDEwLTE3LjM0IDMuMzkxbC0xLjUxIDEuNTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE5IDIwYTguOTYgOC45NiAwIDAwNS42MTgtMS45NjhsLTQuMjAyLTQuMjA0YTIgMiAwIDAwLTIuODI4IDBsLTQuMjA1IDQuMjA1QTguOTYgOC45NiAwIDAwMTkgMjB6bS0yLjgyNi03LjU4NmE0IDQgMCAwMTUuNjU2IDBsNS42NTYgNS42NTctLjcwNy43MDdBMTAuOTY3IDEwLjk2NyAwIDAxMTkgMjJhMTAuOTY3IDEwLjk2NyAwIDAxLTcuNzc4LTMuMjIxbC0uNzA3LS43MDcgNS42NTktNS42NTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1ldHJpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE1sID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1sKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMCAxOHYuNTZhMSAxIDAgMDEtLjY4Ljk1TDMgMjEuNjFWMTBhMSAxIDAgMDEuNC0uOGwzLjItMi40LTEuMi0xLjYtMy4yIDIuNEEzIDMgMCAwMDEgMTB2MTJhMyAzIDAgMDAxLjIgMi40bDMuMiAyLjQgMS4yLTEuNi0yLjQ3LTEuODUgNS44Mi0xLjk1QTMgMyAwIDAwMTIgMTguNTZWMThoLTJ6TTI5LjggNy42bC0zLjItMi40LTEuMiAxLjYgMy4yIDIuNGExIDEgMCAwMS40Ljh2MTEuNjFsLTYuMzItMi4xMWExIDEgMCAwMS0uNjgtLjk1VjE4aC0ydi41NmEzIDMgMCAwMDIuMDUgMi44NWw1LjgyIDEuOTQtMi40NyAxLjg1IDEuMiAxLjYgMy4yLTIuNEEzIDMgMCAwMDMxIDIyVjEwYTMgMyAwIDAwLTEuMi0yLjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSA2QTMgMyAwIDAxOC44OC44OGEzLjA3IDMuMDcgMCAwMTQuMjQgMEEzIDMgMCAwMTExIDZ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAxMSAyem0wIDMwYTMgMyAwIDAxLTIuMTItNS4xMiAzLjA3IDMuMDcgMCAwMTQuMjQgMEEzIDMgMCAwMTExIDMyem0wLTRhMSAxIDAgMTAtLjAxMiAyQTEgMSAwIDAwMTEgMjh6bTAtMTJhMyAzIDAgMDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMTEgMTZ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAxMSAxMnptMTAtNkEzIDMgMCAwMTE4Ljg4Ljg4YTMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMjEgNnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDIxIDJ6bTAgMzBhMyAzIDAgMDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMjEgMzJ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAyMSAyOHptMC0xMmEzIDMgMCAwMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMDE0LjI0IDBBMyAzIDAgMDEyMSAxNnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDIxIDEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwTW9uaXRvcmluZyA9IGZ1bmN0aW9uIEV1aUljb25BcHBNb25pdG9yaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS44MSAxNS4xOUE4Ljk0IDguOTQgMCAwMTE1LjYyIDMuODZsLjM4LjQyLjM4LS40MmE4Ljk0IDguOTQgMCAwMTE0LjI2IDEwLjY4bC0xLjctMS4wN2E2Ljk0IDYuOTQgMCAwMC0xMS4wNy04LjI4TDE2IDcuMjlsLTEuODctMi4xQTYuOTQgNi45NCAwIDAwMy40MSAxNGwtMS42IDEuMTl6TTE2IDMxLjE4bC03Ljc0LTguNTEgMS40OC0xLjM0TDE2IDI4LjIxbDYuMjYtNi44OCAxLjQ4IDEuMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE2LjE2IDIzLjI5bC00LjEtNy4xN0wxMC42MiAxOUgwdi0yaDkuMzhsMi41Ni01LjEyIDMuOSA2LjgzIDQuMTMtMTAuMzJMMjMuNjYgMTdIMzJ2MmgtOS42NmwtMi4zMS01LjM5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNb25pdG9yaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBOb3RlYm9vayA9IGZ1bmN0aW9uIEV1aUljb25BcHBOb3RlYm9vayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI1IDJoLTVWMGgtMnYyaC0zVjBoLTJ2MmgtM1YwSDh2MkgzdjI2aDIyVjJ6bS0yIDI0SDVWNGgzdjJoMlY0aDN2MmgyVjRoM3YyaDJWNGgzdjIyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgN3YyM0g4djJoMjFWN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOCAxMmgxMnYySDh6TTggMTdoMTJ2Mkg4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBOb3RlYm9vazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUGFja2V0YmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBQYWNrZXRiZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNiAyMGE0IDQgMCAxMTAtOCA0IDQgMCAwMTAgOHptMC02YTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0YTQgNCAwIDEwLTQgNCA0IDQgMCAwMDItLjU3bDUuMjcgNS4yNyAxLjQxLTEuNDFMNy40MyA2QTQgNCAwIDAwOCA0ek00IDZhMiAyIDAgMTEwLTQgMiAyIDAgMDEwIDR6bTE2LjcxIDYuNzFMMjYgNy40M0E0IDQgMCAwMDI4IDhhNCA0IDAgMTAtNC00IDQgNCAwIDAwLjU3IDJsLTUuMjcgNS4yNyAxLjQxIDEuNDR6TTI4IDJhMiAyIDAgMTEwIDQgMiAyIDAgMDEwLTR6TTExLjI5IDE5LjI5TDYgMjQuNTdBNCA0IDAgMDA0IDI0YTQgNCAwIDEwNCA0IDQgNCAwIDAwLS41Ny0ybDUuMjctNS4yNy0xLjQxLTEuNDR6TTQgMzBhMiAyIDAgMTEwLTQgMiAyIDAgMDEwIDR6bTI0LTZhNCA0IDAgMDAtMiAuNTdsLTUuMjctNS4yNy0xLjQxIDEuNDFMMjQuNTcgMjZhNCA0IDAgMDAtLjU3IDIgNCA0IDAgMTA0LTR6bTAgNmEyIDIgMCAxMTAtNCAyIDIgMCAwMTAgNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUGFja2V0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUGlwZWxpbmUgPSBmdW5jdGlvbiBFdWlJY29uQXBwUGlwZWxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSAxMmEzIDMgMCAwMC0zIDNoLTRhMyAzIDAgMDAtMy0zaC02YTMgMyAwIDAwLTMgM0g2YTMgMyAwIDAwLTMtM0gwdjE0aDNhMyAzIDAgMDAzLTNoNGEzIDMgMCAwMDMgM2g2YTMgMyAwIDAwMy0zaDRhMyAzIDAgMDAzIDNoM1YxMmgtM3pNMyAyNEgyVjE0aDFhMSAxIDAgMDExIDF2OGExIDEgMCAwMS0xIDF6bTE3LTN2MmExIDEgMCAwMS0xIDFoLTZhMSAxIDAgMDEtMS0xdi0ySDZ2LTRoNnYtMmExIDEgMCAwMTEtMWg2YTEgMSAwIDAxMSAxdjJoNnY0aC02em0xMCAzaC0xYTEgMSAwIDAxLTEtMXYtOGExIDEgMCAwMTEtMWgxdjEwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMiA2SDEwdjJoNXYyaDJWOGg1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBQaXBlbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQgPSBmdW5jdGlvbiBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAxLTE2IDE2em0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMDAxNiAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNSA0aDJ2OS4xN0EzLjAwOSAzLjAwOSAwIDAxMTguODMgMTVIMjZ2MmgtNy4xN0EzLjAwMSAzLjAwMSAwIDExMTUgMTMuMTdWNHptMSAxM2ExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFJlcG9ydGluZyA9IGZ1bmN0aW9uIEV1aUljb25BcHBSZXBvcnRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNSA1aC0uMTd2MkgyNWExIDEgMCAwMTEgMXYyMGExIDEgMCAwMS0xIDFIN2ExIDEgMCAwMS0xLTFWOGExIDEgMCAwMTEtMWguMTdWNUg3YTMgMyAwIDAwLTMgM3YyMGEzIDMgMCAwMDMgM2gxOGEzIDMgMCAwMDMtM1Y4YTMgMyAwIDAwLTMtM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzIDNoLTNWMGgtOHYzSDl2NmgxNFYzem0tMiA0SDExVjVoM1YyaDR2M2gzdjJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTEwIDEzaDEydjJIMTB6TTEwIDE4aDEydjJIMTB6TTEwIDIzaDEydjJIMTB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFJlcG9ydGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwU2F2ZWRPYmplY3RzID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNhdmVkT2JqZWN0cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjAuMzggNy4wMDFMMTcgOS42MTlWMGgtMnY5LjYxOWwtMy4zNy0yLjYxOC0xLjI1IDEuNTEzTDE2IDEyLjg3OGw1LjYzLTQuMzY0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuMDYuMTY1bC0xLjExIDEuNjEgOS4yNSA1Ljk4M0wxNiAxNi4yOSAyLjggNy43NThsOS4yNS01Ljk4My0xLjEtMS42MUwwIDcuMjM0djEzLjY1M2wxNiAxMC4zMzcgMTYtMTAuMzM3VjcuMjM0TDIxLjA2LjE2NHpNMiA5LjU3bDEzIDguNDA3djEwLjI3OUwyIDE5Ljg0VjkuNTd6bTE1IDE4LjY3NlYxNy45NzhsMTMtOC40MDdWMTkuODVsLTEzIDguMzk3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTYXZlZE9iamVjdHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMS42MyA4aDcuMzh2MmgtNy4zOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgOGgzLjE5djJIN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNyAxNmg3LjM4djJIN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjgxIDE2SDE5djJoLTMuMTl6TTcgMTJoOXYySDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAwQzUuODIgMCAwIDUuODIgMCAxM3M1LjgyIDEzIDEzIDEzIDEzLTUuODIgMTMtMTNBMTMgMTMgMCAwMDEzIDB6bTAgMjRDNi45MjUgMjQgMiAxOS4wNzUgMiAxM1M2LjkyNSAyIDEzIDJzMTEgNC45MjUgMTEgMTEtNC45MjUgMTEtMTEgMTF6TTIyLjU4MSAyMy45OTNsMS40MTQtMS40MTQgNy43MDggNy43MDgtMS40MTQgMS40MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTZWN1cml0eSA9IGZ1bmN0aW9uIEV1aUljb25BcHBTZWN1cml0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDMybC0uMzYtLjE0QTIxLjA3IDIxLjA3IDAgMDEwIDEyLjA3VjUuNDRMMTQgLjA2bDE0IDUuMzh2Ni42M2EyMS4wNyAyMS4wNyAwIDAxLTEzLjY0IDE5Ljc4TDE0IDMyek0yIDYuODJ2NS4yNWExOS4wOCAxOS4wOCAwIDAwMTIgMTcuNzcgMTkuMDggMTkuMDggMCAwMDEyLTE3Ljc3VjYuODJMMTQgMi4yIDIgNi44MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOSAxNy44M2gyVjIzSDl6TTExIDEwLjE4VjdIOXYzLjE4YTMgMyAwIDEwMiAwek0xMCAxNGExIDEgMCAxMTAtMiAxIDEgMCAwMTAgMnpNMTcgN2gydjUuMTdoLTJ6TTIxIDE3YTMgMyAwIDEwLTQgMi44MlYyM2gydi0zLjE4QTMgMyAwIDAwMjEgMTd6bS0zIDFhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlY3VyaXR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTBoNHYySDV2Ny45MjhjMCAxLjI5OS44MDggMi43OTUgMi44OCA0LjQ4IDEuODMgMS40ODkgNC41MjQgMy4wMiA4LjEyIDQuNTg0VjI2aDJ2NS45OTJsLTEuMzgtLjU2N2MtNC4zNzItMS43OTctNy43MjQtMy42MTMtMTAtNS40NjVDNC4zNTggMjQuMTIyIDMgMjIuMTE0IDMgMTkuOTI4VjEwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk05IDEwaDl2MTRsLTEuMjcyLS40NThjLTEuMzY3LS40OTQtMy4yMy0xLjMxNC00Ljc2OC0yLjM5QzEwLjQ4NCAyMC4xMTggOSAxOC42MzYgOSAxNi43NjFWMTB6bTEuODk1IDEuODc2djQuODg3YzAgLjg3Ny43NDQgMS44NjcgMi4xNTggMi44NTYuOTM3LjY1NiAyLjAzOCAxLjIxOSAzLjA1MiAxLjY1N3YtOS40aC01LjIxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgMUg5djdoMlYyLjk2NmgxNlYxNi43M2MwIC41NTgtLjI0NSAxLjEyOC0uNzU2IDEuNzItLjUxNS41OTYtMS4yNTYgMS4xNTgtMi4xMiAxLjY2OC0xLjM4MS44MTgtMi45NjEgMS40MzQtNC4xMjQgMS44MTdWMjRjMS4yNi0uMzc4IDMuMzM0LTEuMTIgNS4xNTUtMi4xOTcuOTY1LS41NyAxLjkwNS0xLjI2MSAyLjYxMi0yLjA4LjcxMi0uODIyIDEuMjMzLTEuODI3IDEuMjMzLTIuOTkyVjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlY3VyaXR5QW5hbHl0aWNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTcGFjZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwU3BhY2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00IDRoNnYySDR6TTIyIDRoNnYyaC02ek00IDIyaDZ2Mkg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAxNGgxNFYwSDB2MTR6TTIgMmgxMHYxMEgyVjJ6bTE2LTJ2MTRoMTRWMEgxOHptMTIgMTJIMjBWMmgxMHYxMHpNMCAzMmgxNFYxOEgwdjE0em0yLTEyaDEwdjEwSDJWMjB6bTE2IDEyaDE0VjE4SDE4djE0em0yLTEyaDEwdjEwSDIwVjIwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMiAyMmg2djJoLTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNwYWNlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwU3FsID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNxbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTggNmg5djJoLTl6TTUgNmg5djJINXpNNSAxMmg5djJINXpNMTggMTJoOXYyaC05ek01IDE4aDl2Mkg1ek0xOCAxOGg5djJoLTl6TTE4IDI0aDl2MmgtOXpNNSAyNGg5djJINXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDMySDNhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoMjZhMyAzIDAgMDEzIDN2MjZhMyAzIDAgMDEtMyAzek0zIDJhMSAxIDAgMDAtMSAxdjI2YTEgMSAwIDAwMSAxaDI2YTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwVGltZWxpb24gPSBmdW5jdGlvbiBFdWlJY29uQXBwVGltZWxpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDR2MjAuMzRMMTYgMzJsMTItNy42NFY0SDR6bTIyIDJ2NGgtNGEzIDMgMCAwMC0zIDN2NWgtNnYtNWEzIDMgMCAwMC0zLTNINlY2aDIwem0tNy44NyAxNEwxNiAyMi41MiAxMy44NyAyMGg0LjI2ek02IDEyaDRhMSAxIDAgMDExIDF2Ni43bDMuNjkgNC4zNy0yLjU4IDMuMDZMNiAyMy4yNFYxMnptNy44MSAxNi4yMmwyLjE5LTIuNiAyLjE5IDIuNkwxNiAyOS42MWwtMi4xOS0xLjM5em02LjA4LTEuMDlsLTIuNTgtMy4wNkwyMSAxOS43VjEzYTEgMSAwIDAxMS0xaDR2MTEuMjRsLTYuMTEgMy44OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAwaDI0djJINHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVGltZWxpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFVwZ3JhZGVBc3Npc3RhbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXBncmFkZUFzc2lzdGFudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTYgMjFhNSA1IDAgMTEwLTEwIDUgNSAwIDAxMCAxMHptMC04YTMgMyAwIDEwMCA2IDMgMyAwIDAwMC02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcuNDIgMTkuNjlhMTIgMTIgMCAwMS0yMy4xMS0xbDIuMjctLjQ1LTQuMzItNC40N0wwIDE5LjU1bDIuMzktLjQ3YTE0IDE0IDAgMDAyNyAxLjIzbC0xLjk3LS42MnptMi4yMy02Ljc3YTE0IDE0IDAgMDAtMjctMS4yM2wxLjkuNjJhMTIgMTIgMCAwMTIzLjExIDFsLTIuMjcuNDUgNC4zMiA0LjQ2TDMyIDEyLjQ1bC0yLjM1LjQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBVcHRpbWUgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXB0aW1lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00LjIxNiAxMi4zNzdBMTAuOTQ4IDEwLjk0OCAwIDAwMi4xODEgMTdILjE1M2ExMi45NDEgMTIuOTQxIDAgMDEyLjY5My02LjExOGwxLjM3IDEuNDk1em0yLjk0OC0yLjcwM2wtMS4zNy0xLjQ5NUExMi45NCAxMi45NCAwIDAxMTMgNnYyYy0yLjE0NCAwLTQuMTQ0LjYxMy01LjgzNiAxLjY3NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI2IDQuNDE0VjE5YzAgNy4xOC01LjgyIDEzLTEzIDEzQzYuNSAzMiAxLjExNSAyNy4yMy4xNTMgMjFIMi4xOGMuOTQgNS4xMiA1LjQyNyA5IDEwLjgxOSA5IDYuMDc1IDAgMTEtNC45MjUgMTEtMTFWNC40MTRsLTQuMjkzIDQuMjkzLTEuNDE0LTEuNDE0TDI1IC41ODZsNi43MDcgNi43MDctMS40MTQgMS40MTRMMjYgNC40MTR6bS03LjgzNiA5LjkwOWwxLjQ3MiAxLjM1NC03LjU3NyA4LjIzNS00LjgzNS00LjQ0MiAxLjM1My0xLjQ3MyAzLjM2NCAzLjA5IDYuMjIzLTYuNzY0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBVcHRpbWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFVzZXJzUm9sZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXNlcnNSb2xlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjMwNyAzLjIxYTIuOTEgMi45MSAwIDEwLS4yMjMgMS45NCAxMS42MzYgMTEuNjM2IDAgMDE4LjIzMiA3LjA0OWwxLjc3NS0uNjk4YTEzLjU3NiAxMy41NzYgMCAwMC05Ljc4NC04LjI5MXptLTIuODIyIDEuNjM4YS45Ny45NyAwIDExMC0xLjkzOS45Ny45NyAwIDAxMCAxLjk0em0tNC4yNjcuODA1bC0uNzE3LTEuNzc0YTEzLjU3NiAxMy41NzYgMCAwMC04LjI5MSA5Ljc4NCAyLjkxIDIuOTEgMCAxMDEuOTQuMjIzIDExLjYzNiAxMS42MzYgMCAwMTcuMDY4LTguMjMzem0tOC4zNCAxMS44MDJhLjk3Ljk3IDAgMTEwLTEuOTQuOTcuOTcgMCAwMTAgMS45NHptMTIuNjA3IDguNzI3YTIuOTEgMi45MSAwIDAwLTIuNTk5IDEuNjIgMTEuNjM2IDExLjYzNiAwIDAxLTguMjMzLTcuMDVsLTEuNzc0LjcxN2ExMy41NzYgMTMuNTc2IDAgMDA5LjgxMyA4LjI5MSAyLjkxIDIuOTEgMCAxMDIuNzkzLTMuNTc4em0wIDMuODc5YS45Ny45NyAwIDExMC0xLjk0Ljk3Ljk3IDAgMDEwIDEuOTR6TTMyIDE2LjQ4NWEyLjkxIDIuOTEgMCAxMC00LjE5OSAyLjU5OSAxMS42MzYgMTEuNjM2IDAgMDEtNy4wNSA4LjIzMmwuNzE4IDEuNzc1YTEzLjU3NiAxMy41NzYgMCAwMDguMjkxLTkuODEzQTIuOTEgMi45MSAwIDAwMzIgMTYuNDg1em0tMi45MS45N2EuOTcuOTcgMCAxMTAtMS45NC45Ny45NyAwIDAxMCAxLjk0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xOS4xOSAxNi4zNWEzLjg3OSAzLjg3OSAwIDEwLTUuNDIgMCA0Ljg0OCA0Ljg0OCAwIDAwLTIuMTM0IDQuMDE0djEuOTM5aDkuNjk3di0xLjk0YTQuODQ4IDQuODQ4IDAgMDAtMi4xNDMtNC4wMTR6bS00LjY0NS0yLjc3NGExLjk0IDEuOTQgMCAxMTMuODggMCAxLjk0IDEuOTQgMCAwMS0zLjg4IDB6bS0uOTcgNi43ODhhMi45MSAyLjkxIDAgMTE1LjgxOSAwaC01LjgxOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVXNlcnNSb2xlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwVmlzdWFsaXplID0gZnVuY3Rpb24gRXVpSWNvbkFwcFZpc3VhbGl6ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMzIgMzJINGE0IDQgMCAwMS00LTRWMGgydjI4YTIgMiAwIDAwMiAyaDI4djJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDIwaDJ2N0g2ek0xNiAxMmgydjE1aC0yek0yNiAxN2gydjEwaC0yelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgNmEzIDMgMCAwMC0yLjA4Ljg0TDIwIDQuMzZBMi4yIDIuMiAwIDAwMjAgNGEzIDMgMCAwMC02IDBjLjAwMS4zNDEuMDYyLjY4LjE4IDFsLTUuNiA0LjQ2QTMgMyAwIDAwNyA5YTMgMyAwIDEwMyAzIDIuOTMgMi45MyAwIDAwLS4xOC0xbDUuNi00LjQ4QTMgMyAwIDAwMTcgN2EzIDMgMCAwMDIuMDgtLjg0bDUgMi40OEEyLjIgMi4yIDAgMDAyNCA5YTMgMyAwIDEwMy0zek03IDEzYTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyem0xMC04YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyem0xMCA1YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBWaXN1YWxpemU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFdhdGNoZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwV2F0Y2hlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNzQgNy43M2wtMS41LTEuMzJhMTMgMTMgMCAwMDAgMTcuMTlsMS41LTEuMzJhMTEgMTEgMCAwMTAtMTQuNTR2LS4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTEgMy42Nkw1IDIuMzRjLTYuMzc3IDcuMjQtNi4zNzcgMTguMDkgMCAyNS4zM2wxLjUtMS4zMkMuNzkyIDE5Ljg2Ny43OTIgMTAuMTUzIDYuNSAzLjY3bC4wMS0uMDF6bTE3LjI1IDIuNzVsLTEuNSAxLjMyYTExIDExIDAgMDEwIDE0LjU0bDEuNSAxLjMyYTEzIDEzIDAgMDAwLTE3LjE5di4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3IDIuMzRsLTEuNSAxLjMyYzUuNzA4IDYuNDgzIDUuNzA4IDE2LjE5NyAwIDIyLjY4bDEuNSAxLjMzYzYuMzc3LTcuMjQgNi4zNzctMTguMDkgMC0yNS4zM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEgMTVhNSA1IDAgMTAtNiA0LjlWMzFoMlYxOS45YTUgNSAwIDAwNC00Ljl6bS01IDNhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFdhdGNoZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25BcHBXb3JrcGxhY2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy44MSAxSDJ2MzBoNS44MTVjMS43MDUgMCAzLjM0My0uNzgzIDQuMzgtMi4wOTRsMy4xODItNC4wMjMuMDA2LjAwNiAyLjYwNy0zLjEzNy4wMS0uMDE0YTkuNDIgOS40MiAwIDAwMS45NTMtNC44MjYgOS4xMTIgOS4xMTIgMCAwMC0xLjg5MS02LjUyMmwtLjAxLS4wMTItMi42MDMtMy4xNTZMMTIuMTk3IDMuMUMxMS4xNiAxLjc4NiA5LjUyIDEgNy44MSAxem02LjExOCA3LjUyM2wtMy4zMS00LjE5NUM5Ljk2OCAzLjUxMiA4LjkxNyAzIDcuODEgM0g0djI2aDMuODE1YzEuMSAwIDIuMTUtLjUwOCAyLjgtMS4zMmwzLjMzLTQuMjEtMS43OTYtMS43Ny0uMDI3LS4wMzNjLTIuODQtMy4zMTctMi44My04LjE5NS4wMjgtMTEuMjg3bC4wMDQtLjAwNGE5OC44OTMgOTguODkzIDAgMDExLjc3NC0xLjg1M3ptNC4wNDMgOC4wOTljLS4xMiAxLjI3OS0uNjE2IDIuNTM3LTEuNDkgMy42NGwtMS4yODggMS42My0xLjU3OC0xLjU1NmMtMi4xOS0yLjU5LTIuMTE4LTYuMy4wMDEtOC41OTYuNi0uNjQgMS4xMTktMS4xODMgMS41NjEtMS42MzVsMS4yOTMgMS42Mzh2LjAwMmwuMDE0LjAxNmMuOTQyIDEuMTkyIDEuNDQ2IDIuNTY0IDEuNTEgMy45NDlhNy4wOSA3LjA5IDAgMDEtLjAyMy45MTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMy44MDEgM2MtLjM4MiAwLTEuMDUyLjIzMS0xLjkyNS44MTItLjYzNi40MjItMS4yMjguOTI4LTEuNjc3IDEuMzU3bDEuNzcxIDIuMjQ1LjAwNS4wMDcuMDI0LjAzLjAwOC4wMWM0LjAwMyA1LjA5OSAzLjk5IDEyLjA1Ny0uMDM1IDE3LjE0NWwtMS43OTMgMi4yNjdhOC4yMDYgOC4yMDYgMCAwMDEuNzY5IDEuNDk4Yy42OTguNDI3IDEuMzM3LjYyOSAxLjg1Mi42MjlIMjhWM2gtNC4xOTl6bS02LjE0OCAyMy44NDJsLjc2NSAxLjA1My4wMjMuMDI3Yy43MTcuODUxIDEuNTY2IDEuNjA3IDIuNDY0IDIuMTU2Ljg5LjU0NCAxLjg5LjkyMiAyLjg5NS45MjJIMzBWMWgtNi4xOTljLS45ODcgMC0yLjA2Ni41MDUtMy4wMzIgMS4xNDZhMTQuOTM0IDE0LjkzNCAwIDAwLTIuMzUyIDEuOTc0bC0uMjc2LjI4OC0uNTk1LjYyOCAyLjg1NSAzLjYxOS4wMDYuMDA2YzMuNDU5IDQuMzc1IDMuNDU3IDEwLjMyOS0uMDA0IDE0LjcwNGwtMi43NSAzLjQ3N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwV29ya3BsYWNlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBzID0gZnVuY3Rpb24gRXVpSWNvbkFwcHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDRWMmgydjJIMnptNSAwVjJoMnYySDd6bTUgMFYyaDJ2MmgtMnpNMiA5VjdoMnYySDJ6bTUgMFY3aDJ2Mkg3em01IDBWN2gydjJoLTJ6TTIgMTR2LTJoMnYySDJ6bTUgMHYtMmgydjJIN3ptNSAwdi0yaDJ2MmgtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dFbmQgPSBmdW5jdGlvbiBFdWlJY29uQXJyb3dFbmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuODU3IDE0LjA0M2EuNzUuNzUgMCAwMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwMDAtLjM0NmwtNC41OS00LjgxYS43NS43NSAwIDAxMS4wODUtMS4wMzVsNC41OSA0LjgxYTEuNzUgMS43NSAwIDAxMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAxLTEuMDYuMDI0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNSAyLjc1YS43NS43NSAwIDAxMS41IDB2MTAuNWEuNzUuNzUgMCAwMS0xLjUgMFYyLjc1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd0VuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dTdGFydCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1N0YXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyLjc1YS43NS43NSAwIDAxMS41IDB2MTAuNWEuNzUuNzUgMCAwMS0xLjUgMFYyLjc1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy4xMzUgMTQuMDQzYS43NS43NSAwIDAwLjAyNS0xLjA2bC00LjU5LTQuODFhLjI1LjI1IDAgMDEwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDAwLTEuMDg1LTEuMDM1bC00LjU5IDQuODFhMS43NSAxLjc1IDAgMDAwIDIuNDE2bDQuNTkgNC44MWMuMjg2LjMuNzYuMzEgMS4wNi4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93U3RhcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFycm93RG93biA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0Rvd24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuOTU3IDQuOTgyYS43NS43NSAwIDAxMS4wNi0uMDI1bDQuODEgNC41OTFhLjI1LjI1IDAgMDAuMzQ2IDBsNC44MS00LjU5YS43NS43NSAwIDAxMS4wMzUgMS4wODVsLTQuODEgNC41OWExLjc1IDEuNzUgMCAwMS0yLjQxNiAwbC00LjgxLTQuNTlhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd0Rvd247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFycm93TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0xlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjAxOCAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI0LTEuMDZsLTQuNTktNC44MWEuMjUuMjUgMCAwMTAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMTAtMS4wODUtMS4wMzVsLTQuNTkgNC44MWExLjc1IDEuNzUgMCAwMDAgMi40MTZsNC41OSA0LjgxYy4yODYuMy43NjEuMzEgMS4wNi4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1JpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljk4MiAxNC4wNDNhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMDAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwMTEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwMTAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwMS0xLjA2LjAyNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dVcCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1VwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xLjk1NyAxMS4wMThjLjI4Ni4zLjc2MS4zMSAxLjA2LjAyNGw0LjgxLTQuNTlhLjI1LjI1IDAgMDEuMzQ2IDBsNC44MSA0LjU5YS43NS43NSAwIDAwMS4wMzUtMS4wODVsLTQuODEtNC41OWExLjc1IDEuNzUgMCAwMC0yLjQxNiAwbC00LjgxIDQuNTlhLjc1Ljc1IDAgMDAtLjAyNSAxLjA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd1VwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Bc3RlcmlzayA9IGZ1bmN0aW9uIEV1aUljb25Bc3RlcmlzayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuOTI4IDguNDY4TDQgNy42MThsLjQ0Ni0xLjQyN0w3LjM3NSA3LjI1IDcuMjg3IDRoMS40ODRsLS4wOTcgMy4yOTYgMi44OC0xLjAzOUwxMiA3LjY5M2wtMi45NzcuODYgMS45MiAyLjU2TDkuNzQxIDEyIDcuOTM3IDkuMjhsLTEuNzQ1IDIuNjU0LTEuMjEzLS44NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXN0ZXJpc2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJlYWtlciA9IGZ1bmN0aW9uIEV1aUljb25CZWFrZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjI3NyAxMC4wODhjLjAyLjAxNC4wNC4wMy4wNTcuMDQ3LjU4Mi41NSAxLjEzNC44MTIgMS42NjYuODEyLjU4NiAwIDEuODQtLjI5MyAzLjcxMy0uODhMOSA2LjIxMlYySDd2NC4yMTJsLTEuNzIzIDMuODc2em0tLjQzOC45ODdMMy41MzkgMTRoOC45MjJsLTEuMzItMi45NjlDOS4wOTYgMTEuNjc3IDcuNzMzIDEyIDcgMTJjLS43NCAwLTEuNDYzLS4zMTUtMi4xNjEtLjkyNXpNNiAySDVWMWg2djFoLTF2NGwzLjM3NSA3LjU5NEExIDEgMCAwMTEyLjQ2MSAxNUgzLjU0YTEgMSAwIDAxLS45MTQtMS40MDZMNiA2VjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJlYWtlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQmVsbCA9IGZ1bmN0aW9uIEV1aUljb25CZWxsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuMzE2IDEyaDEwLjM2OGMtLjE4OC0uNzA0LS4yOC0xLjY5MS0uMzQ4LTMuMDM3LS4wNy0xLjM4Mi0uMTAzLTEuODg4LS4xOS0yLjYxMi0uMDI4LS4yMzYtLjA2LS40NjItLjA5Ni0uNjgtLjMxLTEuODkyLTEuNTA2LTIuOTIzLTMuNzA4LTMuMTMxYTEgMSAwIDEwLTEuNjg0IDBjLTIuMjAyLjIwOC0zLjM5NyAxLjI0LTMuNzA4IDMuMTNhMTYuMDEgMTYuMDEgMCAwMC0uMDk2LjY4Yy0uMDg3LjcyNS0uMTIgMS4yMy0uMTkgMi42MTMtLjA2OCAxLjM0Ni0uMTYgMi4zMzMtLjM0OCAzLjAzN3ptMTAuODQzIDFIMS44NGMtLjMwOC4zNTMtLjczNy41LTEuMzQxLjVhLjUuNSAwIDExMC0xYy43ODYgMCAxLjAyNC0uNzgzIDEuMTY2LTMuNTg3LjA3LTEuNDA3LjEwNS0xLjkyNi4xOTYtMi42ODEuMDMtLjI1LjA2My0uNDkuMTAyLS43MjQuMzM0LTIuMDQxIDEuNTQ2LTMuMzEzIDMuNTU2LTMuNzkyYTIgMiAwIDAxMy45NiAwYzIuMDEuNDc5IDMuMjIyIDEuNzUgMy41NTcgMy43OTJhMTcgMTcgMCAwMS4xMDIuNzI0Yy4wOS43NTUuMTI1IDEuMjc0LjE5NiAyLjY4MS4xNCAyLjgwNC4zNzkgMy41ODcgMS4xNjUgMy41ODdhLjUuNSAwIDExMCAxYy0uNjA0IDAtMS4wMzMtLjE0Ny0xLjM0MS0uNXpNNS41IDE0aDRhMiAyIDAgMTEtNCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CZWxsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CZWxsU2xhc2ggPSBmdW5jdGlvbiBFdWlJY29uQmVsbFNsYXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDE0bC0uMDA1LjE1YTIgMiAwIDAxLTMuOTcyLjE1M2wtLjAxOC0uMTU0TDUuNSAxNGg0em01LjM4LTEyLjgyNWEuNS41IDAgMDEuMDA4LjY0bC0uMDYzLjA2NS0xNCAxMmEuNS41IDAgMDEtLjcxMy0uNjk1bC4wNjMtLjA2NSAxNC0xMmEuNS41IDAgMDEuNzA1LjA1NXpNMTMuMDM2IDUuNTFsLjA1NS4zNTMuMDQ4LjM2OGMuMDY2LjU1NC4xMDMuOTguMTQ1IDEuNzI0bC4wOCAxLjQ5MWMuMTQ2IDIuMzcxLjQwMiAzLjA1MyAxLjEzNiAzLjA1M2EuNS41IDAgMTEwIDFjLS42MDMgMC0xLjAzMS0uMTQ2LTEuMzQtLjQ5OUg0LjE4NWwxLjE4Mi0xaDcuMzE3Yy0uMTcyLS42NDQtLjI2NC0xLjUyOC0uMzMtMi43MDhsLS4wOS0xLjYzOGMtLjAzMy0uNTE0LS4wNjYtLjg3LS4xMTgtMS4zMDRsLS4wMTEtLjA3Ny45MDEtLjc2M3pNNy41IDBhMiAyIDAgMDExLjk4IDEuNzE3Yy40NzYuMTEzLjkwNy4yNyAxLjI5Mi40NzJsLS44MzguNzFhNS43MjggNS43MjggMCAwMC0xLjU5MS0uMzYgMSAxIDAgMTAtMS42ODQgMEM0LjQ1NSAyLjc1IDMuMjYgMy43OCAyLjk1IDUuNjcxbC0uMDUuMzM0LS4wNDYuMzQ3Yy0uMDguNjc2LS4xMTUgMS4xNjEtLjE3NiAyLjM0N2wtLjAxNC4yNjUtLjAwNS4wOS0xLjA1OC44OTdjLjAxOC0uMjM0LjAzNS0uNDg4LjA1LS43NjNsLjA3Ny0xLjQyN2MuMDM4LS42MjYuMDczLTEuMDI1LjEzNC0xLjUyOC4wMy0uMjUuMDYzLS40OS4xMDItLjcyNC4zMzQtMi4wNCAxLjU0Ni0zLjMxMyAzLjU1NS0zLjc5MmwuMDA0LS4wMTlBMiAyIDAgMDE3LjUgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQmVsbFNsYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Cb2x0ID0gZnVuY3Rpb24gRXVpSWNvbkJvbHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjA0IDEzLjI3NGEuNS41IDAgMTAuODkyLjQ1M2wzLjAxNC01LjkzMWEuNS41IDAgMDAtLjQ0NS0uNzI3SDUuMzE2TDguMDMgMS43MjdhLjUuNSAwIDEwLS44OTItLjQ1M0w0LjA1NSA3LjM0M2EuNS41IDAgMDAuNDQ2LjcyNmg1LjE4NUw3LjA0IDEzLjI3NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQm9sdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQm94ZXNIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkJveGVzSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgNmg0djRIMFY2em0xIDF2MmgyVjdIMXptNS0xaDR2NEg2VjZ6bTEgMXYyaDJWN0g3em01LTFoNHY0aC00VjZ6bTEgM2gyVjdoLTJ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQm94ZXNIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Cb3hlc1ZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkJveGVzVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDF2MmgyVjFIN3pNNiAwaDR2NEg2VjB6bTAgNmg0djRINlY2em0xIDF2MmgyVjdIN3ptLTEgNWg0djRINnYtNHptMSAxdjJoMnYtMkg3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Cb3hlc1ZlcnRpY2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CcmFuY2ggPSBmdW5jdGlvbiBFdWlJY29uQnJhbmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMC4wMzhhMy40OSAzLjQ5IDAgMDEyLjUtMS4wNWgyYTIuNSAyLjUgMCAwMDIuNDYyLTIuMDYxIDIgMiAwIDExMS4wMDguMDE3QTMuNSAzLjUgMCAwMTkuNSA5Ljk4N2gtMmEyLjUgMi41IDAgMDAtMi40NjYgMi4wODVBMiAyIDAgMTE0IDEyLjA2M1YzLjkzN2EyIDIgMCAxMTEgMHY2LjF6TTQuNSAzYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem0wIDEyYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem04LTlhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJyYW5jaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQnJhbmNoVXNlciA9IGZ1bmN0aW9uIEV1aUljb25CcmFuY2hVc2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgNy45ODdhMy40OSAzLjQ5IDAgMDAtMi41IDEuMDV2LTQuMWEyIDIgMCAxMC0xIDB2Ni4xMjZhMiAyIDAgMTAxLjAzNC4wMUEyLjUgMi41IDAgMDE2IDguOTg2aDFhMy41IDMuNSAwIDAwMy40Ny0zLjA0MyAyIDIgMCAxMC0xLjAwOS0uMDE3QTIuNSAyLjUgMCAwMTcgNy45ODdINnpNNCAzYTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptMCAxMGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6bTctOWExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNSAxMC41YTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwek05IDE1Yy4yODQtMS4yMjMgMS41MTktMi4xNDMgMy0yLjE0M3MyLjcxNi45MiAzIDIuMTQzSDl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJyYW5jaFVzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJyb29tID0gZnVuY3Rpb24gRXVpSWNvbkJyb29tKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy43MzIgMTMuMDk2bC0uMTk3LS4xOTcgMi44My0yLjgyOC43MDYuNzA3LTIuODI5IDIuODI4LjcwOC43MDggMi44MjgtMi44MjhhMSAxIDAgMDAwLTEuNDE0TDUuNjU4IDcuOTVhLjk5My45OTMgMCAwMC0uNzA4LS4yOTMuOTk0Ljk5NCAwIDAwLS43MDguMjkzbC0yLjgyOCAyLjgyOS43MDcuNzA3IDIuODI5LTIuODMuNzA3LjcwOC0yLjgyOSAyLjgyOS45MDQuOTAzem0xLjIxOC02LjQ0Yy41MTIgMCAxLjAyMy4xOTYgMS40MTQuNTg3bDIuMTIxIDIuMTJhMiAyIDAgMDEwIDIuODNMNC45NSAxNS43MjggMCAxMC43NzhsMy41MzUtMy41MzVhMS45OTMgMS45OTMgMCAwMTEuNDE1LS41ODZ6TTE0LjAyIDFsLjcwOC43MDctNi45NSA2Ljk1LS43MDctLjcwN0wxNC4wMjEgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJvb207IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJydXNoID0gZnVuY3Rpb24gRXVpSWNvbkJydXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTkzIDguMTdjMCAuODMtLjY3MyAxLjUwNy0xLjQ5OSAxLjUwN0g1LjQ5OEExLjUwNSAxLjUwNSAwIDAxMy45OTkgOC4xN1Y2LjY2Mmg3Ljk5NFY4LjE3em0tMi45OTggNS45OThjMCAuNDU1LS40NDguODI3LS45OTkuODI3LS41NSAwLTEtLjM3Mi0xLS44Mjd2LTMuNDg2aDJ2My40ODZ6TTQgNS42NThWMS4wMDVoMS4yNjJ2NC42NTNINHptMi4yNjEgMFYxLjAwNWgxLjI0NHY0LjY1M0g2LjI2em0yLjI0NCAwVjEuMDA1aDEuMjM1djQuNjUzSDguNTA0em0yLjIzNCAwVjEuMDA1aDEuMjU0djQuNjUzaC0xLjI1NHpNMy4wMDggMEwzIDguMTdhMi41MDkgMi41MDkgMCAwMDIuNDk4IDIuNTEyaC41djMuNDg2YzAgMS4wMS44OTYgMS44MzIgMS45OTggMS44MzIgMS4xMDIgMCAxLjk5OC0uODIyIDEuOTk4LTEuODMydi0zLjQ4NmguNWEyLjUwOSAyLjUwOSAwIDAwMi40OTgtMi41MTJMMTMgMEgzLjAwOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJ1c2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJ1ZyA9IGZ1bmN0aW9uIEV1aUljb25CdWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC42NTEgNS4xMjZsLjkyMi0uNDU1Ljg4NC0yLjM0M2EuNS41IDAgMDEuOTM5LjM0NEwxMi4zNzQgNS4zOWwtMS40NS43MTdBNS4zIDUuMyAwIDAxMTEgN2gxLjA0M2wyLjMgMi4xOThhLjUuNSAwIDAxLS42OTIuNzIzTDExLjY0MiA4aC0uNzM3Yy0uMDkuNDY2LS4yNC44OTktLjQ0MSAxLjI4M2wuODkyLjQ5IDEuMjc4IDMuNTU0YS41LjUgMCAwMS0uOTQuMzQybC0xLjE1LTMuMi0uNjU1LS4zNkM5LjM3MyAxMC42NjUgOC43MTYgMTEgOCAxMXMtMS4zNzQtLjMzNS0xLjg5LS44OTNsLS42NTguMzYxLTEuMTUgMy4yMDFhLjUuNSAwIDExLS45NC0uMzQybDEuMjc5LTMuNTU0Ljg5NS0uNDkxQTQuNyA0LjcgMCAwMTUuMDk1IDhoLS43NGwtMi4wMSAxLjkyYS41LjUgMCAwMS0uNjktLjcyMkwzLjk1MiA3SDVhNS4zIDUuMyAwIDAxLjA3NS0uODkyTDMuNjIzIDUuMzkgMi42IDIuNjcyYS41LjUgMCAxMS45MzktLjM0NGwuODg0IDIuMzQzLjkyNC40NTdjLjE3LS40MjguMzk3LS44MS42NjgtMS4xMjhoLjU3YTEuNSAxLjUgMCAxMTIuODMgMGguNTY4Yy4yNy4zMTguNDk3LjY5OS42NjcgMS4xMjZ6TTggNGEuNS41IDAgMTAwLTEgLjUuNSAwIDAwMCAxem0xLjc1MSAxLjU3MUEzLjMyNiAzLjMyNiAwIDAwOS40NzYgNUg2LjUyNGMtLjEwNy4xNzUtLjIuMzY3LS4yNzYuNTczLS4xMS4yOTUtLjE4Ni42MTgtLjIyMy45NTdhNC4zNTQgNC4zNTQgMCAwMC4wOSAxLjQ2NWMuMDcxLjI5NC4xNzIuNTY1LjI5NS44MDYuMTY4LjMyOC4zOC42MDEuNjE2LjgwMy4yOTUuMjUzLjYzMS4zOTYuOTc0LjM5Ni4zNDIgMCAuNjc4LS4xNDIuOTczLS4zOTQuMjM3LS4yMDMuNDQ4LS40NzYuNjE2LS44MDNhMy42MiAzLjYyIDAgMDAuMjk2LS44MDcgNC4yNjMgNC4yNjMgMCAwMC4wOS0xLjQ2NiAzLjk4OCAzLjk4OCAwIDAwLS4yMjQtLjk1OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnVnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CdWxsc2V5ZSA9IGZ1bmN0aW9uIEV1aUljb25CdWxsc2V5ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRBNiA2IDAgMTA4IDJhNiA2IDAgMDAwIDEyem0wIDFBNyA3IDAgMTE4IDFhNyA3IDAgMDEwIDE0em0wLTNhNCA0IDAgMTAwLTggNCA0IDAgMDAwIDh6bTAtMWEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC0yYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CdWxsc2V5ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2FsZW5kYXIgPSBmdW5jdGlvbiBFdWlJY29uQ2FsZW5kYXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCA0di0uOTk0QzE0IDIuNDUgMTMuNTUgMiAxMi45OTQgMkgxMXYxaC0xVjJINnYxSDVWMkgzLjAwNkMyLjQ1IDIgMiAyLjQ1IDIgMy4wMDZ2OS45ODhDMiAxMy41NSAyLjQ1IDE0IDMuMDA2IDE0aDkuOTg4QzEzLjU1IDE0IDE0IDEzLjU1IDE0IDEyLjk5NFY1SDJWNGgxMnptLTMtM2gxLjk5NEMxNC4xMDIgMSAxNSAxLjg5NyAxNSAzLjAwNnY5Ljk4OEEyLjAwNSAyLjAwNSAwIDAxMTIuOTk0IDE1SDMuMDA2QTIuMDA1IDIuMDA1IDAgMDExIDEyLjk5NFYzLjAwNkMxIDEuODk4IDEuODk3IDEgMy4wMDYgMUg1VjBoMXYxaDRWMGgxdjF6TTQgN2gydjFINFY3em0zIDBoMnYxSDdWN3ptMyAwaDJ2MWgtMlY3ek00IDloMnYxSDRWOXptMyAwaDJ2MUg3Vjl6bTMgMGgydjFoLTJWOXptLTYgMmgydjFINHYtMXptMyAwaDJ2MUg3di0xem0zIDBoMnYxaC0ydi0xelwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2FsZW5kYXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNoZWNrID0gZnVuY3Rpb24gRXVpSWNvbkNoZWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNSAxMmEuNTAyLjUwMiAwIDAxLS4zNTQtLjE0NmwtNC00YS41MDIuNTAyIDAgMDEuNzA4LS43MDhMNi41IDEwLjc5M2w2LjY0Ni02LjY0N2EuNTAyLjUwMiAwIDAxLjcwOC43MDhsLTcgN0EuNTAyLjUwMiAwIDAxNi41IDEyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DaGVja0luQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6bTMuNjUtMTAuODU3TDYuOTEgOS44IDQuMzUgNy4yODZhLjUuNSAwIDAwLS43LjcxNGwyLjkwOSAyLjg1N2EuNS41IDAgMDAuNyAwbDUuMDkxLTVhLjUuNSAwIDEwLS43LS43MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNoZWVyID0gZnVuY3Rpb24gRXVpSWNvbkNoZWVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC45MzQgMy4wNjNhMS41IDEuNSAwIDAxLjU0Ny4zMjFsLjExMi4xMTUgNi4wNyA2LjkxNWExLjUgMS41IDAgMDEtLjY0NiAyLjQxbC0uMTQyLjA0LTkuMDMxIDIuMDk3QTEuNSAxLjUgMCAwMS4wMzcgMTMuMTlsLjA0My0uMTU5TDMuMDQgNC4wMmExLjUgMS41IDAgMDExLjg5My0uOTU3ek00LjAyNyA0LjI1bC0uMDM2LjA4My0yLjk2MSA5LjAxMWEuNS41IDAgMDAuNDk4LjY1NmwuMDktLjAxMyAyLjkzNy0uNjgxLTEuMzk5LTEuNTA4YS41LjUgMCAwMS42NjYtLjc0bC4wNjcuMDYgMS43ODggMS45MjcgMi42MzQtLjYxMS0zLjE5OC0zLjYwMWEuNS41IDAgMDEuNjgyLS43MjZsLjA2Ni4wNjIgMy41NTkgNC4wMDcgMS4yMjktLjI4NGEuNS41IDAgMDAuMTUtLjA2M2wuMDY3LS4wNDlhLjUuNSAwIDAwLjA5OS0uNjMybC0uMDUzLS4wNzMtNi4wNy02LjkxNmEuNS41IDAgMDAtLjEzOC0uMTFsLS4wODItLjAzNS0uMDg4LS4wMmEuNS41IDAgMDAtLjUwNy4yNTZ6bTExLjY2IDUuMDM5YTIuNSAyLjUgMCAwMS0uOTc1IDMuMzk5LjUuNSAwIDAxLS40ODUtLjg3NSAxLjUgMS41IDAgMDAtMS40NTQtMi42MjQuNS41IDAgMDEtLjQ4NS0uODc1IDIuNSAyLjUgMCAwMTMuMzk5Ljk3NXptLTUuMDMtNi4yMDZhLjUuNSAwIDAxLjMzOC41NDRsLS4wMi4wODgtLjY3NyAyLjAzNSAyLjA2OC0uNzIxYS41LjUgMCAwMS42LjIyNWwuMDM2LjA4MmEuNS41IDAgMDEtLjIyNS42bC0uMDgyLjAzN0w5LjY3IDcuMDI4YS41LjUgMCAwMS0uNjU5LS41NWwuMDItLjA4Ljk5NS0zYS41LjUgMCAwMS42MzItLjMxNnpNMTQuNSA0YS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6TTcuODYyLjQwM2EyLjUgMi41IDAgMDEuNzM1IDMuNDU5LjUuNSAwIDAxLS44MzktLjU0NSAxLjUgMS41IDAgMTAtMi41MTYtMS42MzQuNS41IDAgMDEtLjgzOS0uNTQ1QTIuNSAyLjUgMCAwMTcuODYyLjQwM3pNMTMuNSAyYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0zLTFhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptNC0xYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DbG9jayA9IGZ1bmN0aW9uIEV1aUljb25DbG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMTNBNS41MDYgNS41MDYgMCAwMTIgNy41QzIgNC40NjcgNC40NjcgMiA3LjUgMlMxMyA0LjQ2NyAxMyA3LjUgMTAuNTMzIDEzIDcuNSAxM20wLTEyYTYuNSA2LjUgMCAxMDAgMTMgNi41IDYuNSAwIDAwMC0xM20zIDZIOFYzLjVhLjUuNSAwIDAwLTEgMHY0YS41LjUgMCAwMC41LjVoM2EuNS41IDAgMDAwLTFcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNsb3VkRHJpenpsZSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZERyaXp6bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjM0OCAzLjc2MUEzLjk5NSAzLjk5NSAwIDAxOCA3YS41LjUgMCAwMS0xIDAgMyAzIDAgMTAtNC44NzggMi4zNC41LjUgMCAwMS0uNjI3Ljc3OSA0IDQgMCAwMTMuOTczLTYuODQgNS41MDIgNS41MDIgMCAwMTEwLjA5NiA0LjM3LjUuNSAwIDExLS45Mi0uMzkgNC41IDQuNSAwIDEwLTguMjk2LTMuNDk3em0tMS42MSA0LjkzNWEuNS41IDAgMTEuNzc1LjYzM2wtMS40NjYgMS43OTJhLjUuNSAwIDExLS43NzQtLjYzM2wxLjQ2Ni0xLjc5MnptLTMuMTIgMy42NDdhLjUuNSAwIDAxLjc3NC42MzRsLTEuNTA1IDEuODRhLjUuNSAwIDAxLS43NzQtLjYzNGwxLjUwNS0xLjg0em03LjYyLTMuNjQ3YS41LjUgMCAwMS43NzUuNjMzbC0xLjQ2NiAxLjc5MmEuNS41IDAgMTEtLjc3NC0uNjMzbDEuNDY2LTEuNzkyem0tMy4xMiAzLjY0N2EuNS41IDAgMDEuNzc0LjYzNGwtMS41MDUgMS44NGEuNS41IDAgMDEtLjc3NC0uNjM0bDEuNTA1LTEuODR6bTcuNjItMy42NDdhLjUuNSAwIDExLjc3NS42MzNsLTEuNDY2IDEuNzkyYS41LjUgMCAxMS0uNzc0LS42MzNsMS40NjYtMS43OTJ6bS0zLjEyIDMuNjQ3YS41LjUgMCAwMS43NzQuNjM0bC0xLjUwNSAxLjg0YS41LjUgMCAwMS0uNzc0LS42MzRsMS41MDUtMS44NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvdWREcml6emxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DbG91ZFN0b3JteSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZFN0b3JteShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNDIxIDQuOTNhLjUuNSAwIDExLS44Ny40OSAzIDMgMCAxMC00LjQzIDMuOTE4LjUuNSAwIDAxLS42MjYuNzggNCA0IDAgMDEzLjk3My02Ljg0bC4wMzIuMDE4VjMuMjhhNS41IDUuNSAwIDExNy4wMDMgNy4zNTcuNS41IDAgMTEtLjM2LS45MzQgNC41IDQuNSAwIDEwLTUuNzctNS45MjNjLjQyLjMxLjc3OC43MDEgMS4wNSAxLjE1aC0uMDAyek05LjYgMTFjLjY2OS4wMDIuNzk0LjY3LjM2IDEuMDAzbC00LjY4IDMuODgyYy0uNDU3LjM3OC0xLjA1My0uMjYtLjY0My0uNjg5bDMuMDgtMy4xOTNBNTQxMS43IDU0MTEuNyAwIDAxNS4xMTMgMTJjLS42NjgtLjAwMS0uNzkzLS42NjktLjM2LTEuMDAzbDQuNjgtMy44ODFjLjQ1OC0uMzc5IDEuMDUzLjI2LjY0My42ODhsLTMuMDggMy4xOTNMOS42IDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG91ZFN0b3JteTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2xvdWRTdW5ueSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZFN1bm55KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNzQ2IDUuMDA1QTUuNSA1LjUgMCAwMTEwLjUgMTZINGE0IDQgMCAwMS0xLjYxLTcuNjYzQTQuNDczIDQuNDczIDAgMDEyLjAyOSA3SC41YS41LjUgMCAwMTAtMWgxLjUyN2E0LjQ3OSA0LjQ3OSAwIDAxLjk1Ny0yLjMwOUwxLjY0NiAyLjM1NGEuNS41IDAgMTEuNzA4LS43MDhMMy42OSAyLjk4NEE0LjQ3OSA0LjQ3OSAwIDAxNiAyLjAyN1YuNWEuNS41IDAgMDExIDB2MS41MjhhNC40OTMgNC40OTMgMCAwMTIuMzA5Ljk1NmwxLjMzNy0xLjMzOGEuNS41IDAgMDEuNzA4LjcwOEwxMC4wMTYgMy42OWMuMzExLjM4OC41Ni44MzEuNzMgMS4zMTR6TTQgMTVoNi41YTQuNSA0LjUgMCAxMC00LjE1Mi02LjIzOUEzLjk5NSAzLjk5NSAwIDAxOCAxMmEuNS41IDAgMTEtMSAwIDMgMyAwIDEwLTMgM3ptNS42OTEtOS45NGEzLjUgMy41IDAgMTAtNi4zMyAyLjk5MSA0LjAyOSA0LjAyOSAwIDAxMi4xMDYuMjI3IDUuNTA1IDUuNTA1IDAgMDE0LjIyNC0zLjIxOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvdWRTdW5ueTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2x1c3RlciA9IGZ1bmN0aW9uIEV1aUljb25DbHVzdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjUgN2EyLjUgMi41IDAgMTAwLTUgMi41IDIuNSAwIDAwMCA1em0wLTZhMy41IDMuNSAwIDAxMy40NjUgM2gzLjEyYTEuNSAxLjUgMCAxMTAgMWgtMy4xMmEzLjQ4MiAzLjQ4MiAwIDAxLS42NjIgMS41OTZsMi4xIDIuMUEzLjUgMy41IDAgMTE4LjAzNiAxMmgtMy4xMmExLjUgMS41IDAgMTEwLS45OTloMy4xMmEzLjQ4MiAzLjQ4MiAwIDAxLjY2Mi0xLjU5NmwtMi4xLTIuMUEzLjUgMy41IDAgMTE0LjUgMXpNMTIgNC41YS41LjUgMCAxMDEgMCAuNS41IDAgMDAtMSAwem0tLjUgOS41YTIuNSAyLjUgMCAxMTAtNSAyLjUgMi41IDAgMDEwIDV6TTQgMTEuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2x1c3RlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29sb3IgPSBmdW5jdGlvbiBFdWlJY29uQ29sb3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAxMWMxLjMzNCAxLjM5MyAyIDIuNDM1IDIgMy4xMjVDMTUgMTUuMTYxIDE0LjEwNSAxNiAxMyAxNmMtMS4xMDQgMC0yLS44NC0yLTEuODc1IDAtLjY5LjY2Ny0xLjczMiAyLTMuMTI1ek01Ljg1Ny4xNWw2LjM0IDYuNDUuMDE2LjAyLjMyNC4zMjFhMS41IDEuNSAwIDAxLjExIDIuMDA2bC0uMTAzLjExNC00LjQ3NCA0LjUxM2ExLjUgMS41IDAgMDEtMi4xMjMuMDA4TDEuNDY0IDkuMDZhMS41IDEuNSAwIDAxLjAwNy0yLjEybDQuNDcyLTQuNDVjLjE0NS0uMTQ2LjMxMy0uMjU0LjQ5Mi0uMzI3TDUuMTQ0Ljg1YS41LjUgMCAwMS43MTMtLjd6bTEuNDk2IDMuMDQ5YS41LjUgMCAwMC0uNzA1IDBMMi4xNzcgNy42NWEuNDk4LjQ5OCAwIDAwLS4xNDguMzVoOS45NWEuNDk4LjQ5OCAwIDAwLS4xNDgtLjM1TDcuMzUzIDMuMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29sb3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbXB1dGUgPSBmdW5jdGlvbiBFdWlJY29uQ29tcHV0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgM2ExIDEgMCAwMC0xIDF2OGExIDEgMCAwMDEgMWg4YTEgMSAwIDAwMS0xVjRhMSAxIDAgMDAtMS0xSDR6bTEwIDh2MWEyIDIgMCAwMS0yIDJoLTF2MmgtMXYtMkg4LjV2MmgtMXYtMkg2djJINXYtMkg0YTIgMiAwIDAxLTItMnYtMUgwdi0xaDJWOC41SDB2LTFoMlY2SDBWNWgyVjRhMiAyIDAgMDEyLTJoMVYwaDF2MmgxLjVWMGgxdjJIMTBWMGgxdjJoMWEyIDIgMCAwMTIgMnYxaDJ2MWgtMnYxLjVoMnYxaC0yVjEwaDJ2MWgtMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiA2LFxuICAgIGhlaWdodDogNixcbiAgICB4OiA1LFxuICAgIHk6IDUsXG4gICAgcng6IDFcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbXB1dGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnNvbGUgPSBmdW5jdGlvbiBFdWlJY29uQ29uc29sZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMTU3IDEyLjIyNEw1Ljc2OCA4LjMyYS40MDQuNDA0IDAgMDAwLS42NGwtNC42MS0zLjkwNGEuNDA3LjQwNyAwIDAxMC0uNjQzLjYwOC42MDggMCAwMS43NTkgMGw0LjYxIDMuOTA0Yy42MzEuNTM0LjYzIDEuMzkzIDAgMS45MjZsLTQuNjEgMy45MDRhLjYwOC42MDggMCAwMS0uNzYgMCAuNDA3LjQwNyAwIDAxMC0uNjQzek05IDEyaDZ2MUg5di0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db25zb2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250YWluZXIgPSBmdW5jdGlvbiBFdWlJY29uQ29udGFpbmVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wIDIuNUEuNS41IDAgMDEuNSAyaDE1YS41LjUgMCAwMTAgMUgxNXYxMGguNWEuNS41IDAgMDEwIDFILjVhLjUuNSAwIDAxMC0xSDFWM0guNWEuNS41IDAgMDEtLjUtLjV6TTIgM2gxMnYxMEgyVjN6bTMgMmEuNS41IDAgMDAtLjUuNXY1YS41LjUgMCAwMDEgMHYtNUEuNS41IDAgMDA1IDV6bTUuNS41YS41LjUgMCAwMTEgMHY1YS41LjUgMCAwMS0xIDB2LTV6TTggNWEuNS41IDAgMDAtLjUuNXY1YS41LjUgMCAwMDEgMHYtNUEuNS41IDAgMDA4IDV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRhaW5lcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29udGludWl0eUFib3ZlID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlBYm92ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNSAzYS41LjUgMCAwMC0uNS41djlhLjUuNSAwIDAwMSAwdi05YS41LjUgMCAwMC0uNS0uNXptMyAwYS41LjUgMCAwMC0uNS41djlhLjUuNSAwIDAwMSAwVjloNnYxLjVhLjUuNSAwIDAwLjgyLjM4NGwzLTIuNWEuNS41IDAgMDAwLS43NjhsLTMtMi41QS41LjUgMCAwMDExIDUuNVY3SDVWMy41YS41LjUgMCAwMC0uNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUFib3ZlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyA9IGZ1bmN0aW9uIEV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSAzYS41LjUgMCAwMS41LjV2OWEuNS41IDAgMDEtMSAwVjlINHYxLjVhLjUuNSAwIDAxLS44Mi4zODRsLTMtMi41YS41LjUgMCAwMTAtLjc2OGwzLTIuNUEuNS41IDAgMDE0IDUuNVY3aDJWMy41YS41LjUgMCAwMS41LS41em0zIDBhLjUuNSAwIDAwLS41LjV2OWEuNS41IDAgMDAxIDBWOWgydjEuNWEuNS41IDAgMDAuODIuMzg0bDMtMi41YS41LjUgMCAwMDAtLjc2OGwtMy0yLjVBLjUuNSAwIDAwMTIgNS41VjdoLTJWMy41YS41LjUgMCAwMC0uNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUFib3ZlQmVsb3c7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyA9IGZ1bmN0aW9uIEV1aUljb25Db250aW51aXR5QmVsb3coX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS41IDNhLjUuNSAwIDAxLjUuNXY5YS41LjUgMCAwMS0xIDBWOUg1djEuNWEuNS41IDAgMDEtLjgyLjM4NGwtMy0yLjVhLjUuNSAwIDAxMC0uNzY4bDMtMi41QS41LjUgMCAwMTUgNS41VjdoNlYzLjVhLjUuNSAwIDAxLjUtLjV6bTMgMGEuNS41IDAgMDEuNS41djlhLjUuNSAwIDAxLTEgMHYtOWEuNS41IDAgMDEuNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUJlbG93OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250aW51aXR5V2l0aGluID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlXaXRoaW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAzYS41LjUgMCAwMC0uNS41djlhLjUuNSAwIDAwMSAwdi05QS41LjUgMCAwMC41IDN6bTE0LjUuNWEuNS41IDAgMDExIDB2OWEuNS41IDAgMDEtMSAwdi05em0tNC43MTIgMS41NDdhLjUuNSAwIDAxLjUzMi4wNjlsMyAyLjVhLjUuNSAwIDAxMCAuNzY4bC0zIDIuNUEuNS41IDAgMDExMCAxMC41VjlINnYxLjVhLjUuNSAwIDAxLS44Mi4zODRsLTMtMi41YS41LjUgMCAwMTAtLjc2OGwzLTIuNUEuNS41IDAgMDE2IDUuNVY3aDRWNS41YS41LjUgMCAwMS4yODgtLjQ1M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eVdpdGhpbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRyb2xzSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjA1IDEwYTIuNSAyLjUgMCAwMTQuOSAwaDEuNTVhLjUuNSAwIDExMCAxaC0xLjU1YTIuNSAyLjUgMCAwMS00LjkgMEgxLjVhLjUuNSAwIDExMC0xaDYuNTV6bS0uMS00YTIuNSAyLjUgMCAwMS00LjkgMEgxLjVhLjUuNSAwIDAxMC0xaDEuNTVhMi41IDIuNSAwIDAxNC45IDBoNi41NWEuNS41IDAgMTEwIDFINy45NXpNNCA1LjVhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6bTggNWExLjUgMS41IDAgMTAtMyAwIDEuNSAxLjUgMCAwMDMgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250cm9sc1ZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRyb2xzVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAgNy45NWEyLjUgMi41IDAgMDEwLTQuOVYxLjVhLjUuNSAwIDExMSAwdjEuNTVhMi41IDIuNSAwIDAxMCA0Ljl2Ni41NWEuNS41IDAgMTEtMSAwVjcuOTV6bS00IC4xYTIuNSAyLjUgMCAwMTAgNC45djEuNTVhLjUuNSAwIDExLTEgMHYtMS41NWEyLjUgMi41IDAgMDEwLTQuOVYxLjVhLjUuNSAwIDAxMSAwdjYuNTV6TTUuNSAxMmExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzem01LThhMS41IDEuNSAwIDEwMCAzIDEuNSAxLjUgMCAwMDAtM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udHJvbHNWZXJ0aWNhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29weSA9IGZ1bmN0aW9uIEV1aUljb25Db3B5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNCAwYy4yMzUgMCAuNDYuMDk5LjYyMi4yNzNsMi43NDMgM2MuMTUxLjE2Mi4yMzUuMzc4LjIzNS42MDJ2OS4yNWEuODY3Ljg2NyAwIDAxLS44NTcuODc1SDMuODU3QS44NjcuODY3IDAgMDEzIDEzLjEyNVYuODc1QzMgLjM5MiAzLjM4NCAwIDMuODU3IDBIMTEuNHpNMTQgNGgtMi42YS40LjQgMCAwMS0uNC0uNFYxSDR2MTJoMTBWNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMUgyYTEgMSAwIDAwLTEgMXYxM2ExIDEgMCAwMDEgMWgxMGExIDEgMCAwMDEtMXYtMWgtMXYxSDJWMmgxVjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvcHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvcHlDbGlwYm9hcmQgPSBmdW5jdGlvbiBFdWlJY29uQ29weUNsaXBib2FyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMi43MjlWMmExIDEgMCAwMTEtMWgydjFIM3YxMmg0djFIM2ExIDEgMCAwMS0xLTFWMi43Mjl6TTE0IDVWMmExIDEgMCAwMC0xLTFoLTJ2MWgydjNoMXptLTEgMWgydjlIOFY2aDVWNUg4YTEgMSAwIDAwLTEgMXY5YTEgMSAwIDAwMSAxaDdhMSAxIDAgMDAxLTFWNmExIDEgMCAwMC0xLTFoLTJ2MXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTBoNVY5SDl2MXptMC0yaDVWN0g5djF6bTAgNGg1di0xSDl2MXptMCAyaDV2LTFIOXYxem0yLTEyVjFhMSAxIDAgMDAtMS0xSDZhMSAxIDAgMDAtMSAxdjFoMVYxaDR2MWgxek01IDNoNlYySDV2MXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29weUNsaXBib2FyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ3Jvc3MgPSBmdW5jdGlvbiBFdWlJY29uQ3Jvc3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjI5MyA4TDMuMTQ2IDMuODU0YS41LjUgMCAxMS43MDgtLjcwOEw4IDcuMjkzbDQuMTQ2LTQuMTQ3YS41LjUgMCAwMS43MDguNzA4TDguNzA3IDhsNC4xNDcgNC4xNDZhLjUuNSAwIDAxLS43MDguNzA4TDggOC43MDdsLTQuMTQ2IDQuMTQ3YS41LjUgMCAwMS0uNzA4LS43MDhMNy4yOTMgOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3Jvc3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNyb3NzSW5BQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbkNyb3NzSW5BQ2lyY2xlRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC43NDYgOGwzLjEtMy4xYS41MjcuNTI3IDAgMTAtLjc0Ni0uNzQ2TDggNy4yNTRsLTMuMS0zLjFhLjUyNy41MjcgMCAxMC0uNzQ2Ljc0NmwzLjEgMy4xLTMuMSAzLjFhLjUyNy41MjcgMCAxMC43NDYuNzQ2bDMuMS0zLjEgMy4xIDMuMWEuNTI3LjUyNyAwIDEwLjc0Ni0uNzQ2TDguNzQ2IDh6TTggMTZBOCA4IDAgMTE4IDBhOCA4IDAgMDEwIDE2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zc0luQUNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ3Jvc3NoYWlycyA9IGZ1bmN0aW9uIEV1aUljb25Dcm9zc2hhaXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS44MjIgMS44NzRhLjUuNSAwIDExLjMzNS45NDIgNS41MTcgNS41MTcgMCAwMC0zLjM0IDMuMzQxLjUuNSAwIDExLS45NDMtLjMzNSA2LjUxNyA2LjUxNyAwIDAxMy45NDgtMy45NDh6TTEuODY0IDEwLjE1YS41LjUgMCAxMS45NDQtLjMzIDUuNTE3IDUuNTE3IDAgMDAzLjM2NSAzLjM3LjUuNSAwIDAxLS4zMzMuOTQzIDYuNTE3IDYuNTE3IDAgMDEtMy45NzYtMy45ODN6bTguMzAyIDMuOTgxYS41LjUgMCAxMS0uMzMzLS45NDMgNS41MTcgNS41MTcgMCAwMDMuMzQ3LTMuMzMyLjUuNSAwIDExLjk0MS4zMzcgNi41MTcgNi41MTcgMCAwMS0zLjk1NSAzLjkzOHptMy45NjgtOC4yODVhLjUuNSAwIDExLS45NDMuMzMxQTUuNTE3IDUuNTE3IDAgMDA5Ljg1IDIuODJhLjUuNSAwIDAxLjMzNy0uOTQyIDYuNTE3IDYuNTE3IDAgMDEzLjk0NiAzLjk2OHpNOC41IDMuNWEuNS41IDAgMDEtMSAwVi45OTdhLjUuNSAwIDAxMSAwVjMuNXptLTQuOTk3IDRhLjUuNSAwIDAxMCAxSDFhLjUuNSAwIDAxMC0xaDIuNTAzek03LjUgMTIuNDk3YS41LjUgMCAwMTEgMFYxNWEuNS41IDAgMTEtMSAwdi0yLjUwM3pNMTIuNDk3IDguNWEuNS41IDAgMDEwLTFIMTVhLjUuNSAwIDExMCAxaC0yLjUwM3pNOCA5YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zc2hhaXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DdXJyZW5jeSA9IGZ1bmN0aW9uIEV1aUljb25DdXJyZW5jeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjk1IDEuNjM2bDEuNDE0IDEuNDE0LTIuMTkyIDIuMTkzQzEyLjY5NSA2LjAzMyAxMyA2Ljk4IDEzIDhjMCAxLjAyLS4zMDUgMS45NjctLjgyOCAyLjc1N2wyLjE5MiAyLjE5My0xLjQxNCAxLjQxNC0yLjE5My0yLjE5MkE0Ljk3NyA0Ljk3NyAwIDAxOCAxM2E0Ljk3NyA0Ljk3NyAwIDAxLTIuNzU3LS44MjhMMy4wNSAxNC4zNjQgMS42MzYgMTIuOTVsMi4xOTItMi4xOTNBNC45NzcgNC45NzcgMCAwMTMgOGMwLTEuMDIuMzA1LTEuOTY3LjgyOC0yLjc1N0wxLjYzNiAzLjA1IDMuMDUgMS42MzZsMi4xOTMgMi4xOTJBNC45NzcgNC45NzcgMCAwMTggM2MxLjAyIDAgMS45NjcuMzA1IDIuNzU3LjgyOGwyLjE5My0yLjE5MnpNOCA1YTIuOTkgMi45OSAwIDAwLTEuMTY4LjIzNmwtLjEyNi4wNTctLjIxOC4xMTYtLjEzMi4wODEtLjA3My4wNWEzLjAxMyAzLjAxMyAwIDAwLS4yNDEuMTg3bC0uMTEzLjEwMy0uMTQ3LjE1Yy0uMDUuMDU0LS4wOTcuMTEtLjE0Mi4xNjhsLS4xLjEzNS0uMDUuMDczLS4wNi4wOTdjLS4wNS4wODItLjA5Ni4xNjYtLjEzNy4yNTNsLS4wNTcuMTI2QTIuOTkgMi45OSAwIDAwNSA4YzAgLjQxNC4wODQuODA5LjIzNiAxLjE2OGwuMDU3LjEyNi4xMTYuMjE4LjA4MS4xMzJjLjA1OS4wODkuMTIxLjE3NS4xODkuMjU3bC4xNS4xNy4xNTEuMTQ3Yy4wNTYuMDUxLjExNC4xLjE3NC4xNDdsLjE0Mi4xMDVjLjA1NC4wMzcuMTA5LjA3Mi4xNjUuMTA2bC0uMTI0LS4wNzkuMDkyLjA2LjA5NC4wNTVjLjQzNi4yNDcuOTQuMzg4IDEuNDc3LjM4OGEyLjk5IDIuOTkgMCAwMDEuMTY4LS4yMzZsLjEyNS0uMDU2LjIxMy0uMTEzLjE1MS0uMDk0LjA1LS4wMzRhMy4wMTEgMy4wMTEgMCAwMC4zMjMtLjI1OGwtLjE1LjEyOS4wOS0uMDc1LjE2OC0uMTU5LjA4LS4wODRjLjA1MS0uMDU2LjEtLjExNC4xNDctLjE3NGwuMTA1LS4xNDIuMTA2LS4xNjVjLjA0Ny0uMDguMDkxLS4xNjEuMTMxLS4yNDVsLjA1Ny0uMTI2QTIuOTkgMi45OSAwIDAwMTEgOGEyLjk5IDIuOTkgMCAwMC0uMjM2LTEuMTY4bC0uMDU2LS4xMjUtLjExMi0uMjExLS4wOTYtLjE1NS0uMDMzLS4wNDlhMy4wMTEgMy4wMTEgMCAwMC0uMjU4LS4zMjJsLjEyOS4xNS0uMDc1LS4wOS0uMTU5LS4xNjgtLjA4NC0uMDhhMy4wMTUgMy4wMTUgMCAwMC0uMTc0LS4xNDdsLS4xODMtLjEzMi0uMTI0LS4wNzlhMi45OTMgMi45OTMgMCAwMC0uMjQ1LS4xMzFsLS4xMjYtLjA1N0EyLjk5IDIuOTkgMCAwMDggNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3VycmVuY3k7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkN1dCA9IGZ1bmN0aW9uIEV1aUljb25DdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4xNDIgMTEuMDc0bC0xLjkxMi41NDhhMi41MzIgMi41MzIgMCAxMS0xLjM5NS00Ljg2N2wxLjk0Ny0uNTU5YTIuNTMyIDIuNTMyIDAgMDEyLjU1NS43MTNsMS41My01LjMzNWMuMTM5LS40ODUuNi0uODk3IDEuMTU5LTEuMjM4LjI3LS4xNjQuNTItLjI3OC43NzktLjMyLjgxNC0uMTMyIDEuNTAzLjU1OCAxLjI2MSAxLjQyMkw5LjU3NCA2LjY0M2w0Ljk4OC0xLjQzYy44NjQtLjI0MiAxLjU1NC40NDcgMS40MjIgMS4yNi0uMDQyLjI2LS4xNTYuNTEtLjMyLjc4LS4zNDEuNTYtLjc1MyAxLjAyLTEuMjM4IDEuMTZMOS41MjMgOS44MTdhMi41MyAyLjUzIDAgMDEuNTYgMi40bC0uNTYgMS45NDdhMi41MzIgMi41MzIgMCAxMS00Ljg2Ny0xLjM5NWwuNDg2LTEuNjk2em0uMzMtMS4xNDhsLjQ4LTEuNjczYTEuNTIgMS41MiAwIDAwLTEuODktMS4wODNsLTEuOTQ4LjU1OGExLjUyIDEuNTIgMCAwMC44MzcgMi45MmwyLjUyLS43MjJ6bTMuNzczLTIuMTM1bC0uMzMgMS4xNDggNS4yMzItMS41Yy4zMjQtLjA5MyAxLjE4Mi0xLjM5LjY5NC0xLjI1M0w5LjI0NSA3Ljc5MXpNNS42MyAxMy4wNDlhMS41MiAxLjUyIDAgMDAyLjkyLjgzN2wuNTU5LTEuOTQ3YTEuNTIgMS41MiAwIDAwLTEuNTUzLTEuOTM1bDIuNTM3LTguODQ1Yy4xMzYtLjQ4OC0xLjE2LjM3LTEuMjUzLjY5NEw1LjYzIDEzLjA1em0uOTczLjI3OWwuNTU5LTEuOTQ3YS41MDYuNTA2IDAgMTEuOTczLjI3OWwtLjU1OCAxLjk0N2EuNTA2LjUwNiAwIDExLS45NzQtLjI4em0tMy45My0zLjY1M2EuNTA2LjUwNiAwIDExLS4yOC0uOTczbDEuOTQ3LS41NThhLjUwNi41MDYgMCAwMS4yOC45NzNsLTEuOTQ4LjU1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3V0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25EYXRhYmFzZSA9IGZ1bmN0aW9uIEV1aUljb25EYXRhYmFzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMTJoMTJ2LTEuOTdjLTEuMjI1LjU4Mi0zLjQ1NC45Ny02IC45N3MtNC43NzUtLjM4OC02LS45N1YxMnptLTEgMFYzYzAtMS4xMDUgMy4xMzQtMiA3LTJzNyAuODk1IDcgMnY5YzAgMS4xMDUtMy4xMzQgMi03IDJzLTctLjg5NS03LTJ6bTEtM2gxMlY3LjAzYy0xLjIyNS41ODItMy40NTQuOTctNiAuOTdzLTQuNzc1LS4zODgtNi0uOTdWOXptMC00Ljk3VjZoMTJWNC4wM2MtMS4yMjUuNTgyLTMuNDU0Ljk3LTYgLjk3cy00Ljc3NS0uMzg4LTYtLjk3em0xMC42NzUtMS40ODNDMTEuNDY3IDIuMjAyIDkuNzk1IDIgOCAyYy0xLjc5NCAwLTMuNDY3LjIwMi00LjY3NS41NDctLjQ5Mi4xNC0uODguMjk4LTEuMTM2LjQ1My4yNTYuMTU1LjY0NC4zMTIgMS4xMzYuNDUzQzQuNTMzIDMuNzk4IDYuMjA1IDQgOCA0YzEuNzk0IDAgMy40NjctLjIwMiA0LjY3NS0uNTQ3LjQ5Mi0uMTQuODgtLjI5OCAxLjEzNi0uNDUzLS4yNTYtLjE1NS0uNjQ0LS4zMTItMS4xMzYtLjQ1M3pNMiA2Yy4yNTcuMTU1LjgzMy4zMTIgMS4zMjUuNDUzQzQuNTMzIDYuNzk4IDYuMjA1IDcgOCA3YzEuNzk0IDAgMy40NjctLjIwMiA0LjY3NS0uNTQ3LjQ5Mi0uMTQgMS4wNy0uMjk4IDEuMzI3LS40NTNIMnptMCAzYy4yNTcuMTU1LjgzMy4zMTIgMS4zMjUuNDUzQzQuNTMzIDkuNzk4IDYuMjA1IDEwIDggMTBjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyem0wIDNjLjI1Ny4xNTUuODMzLjMxMiAxLjMyNS40NTNDNC41MzMgMTIuNzk4IDYuMjA1IDEzIDggMTNjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25EYXRhYmFzZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRGVza3RvcCA9IGZ1bmN0aW9uIEV1aUljb25EZXNrdG9wKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIgMmExIDEgMCAwMC0xIDF2N2ExIDEgMCAwMDEgMWg0bC0xIDNIMy41YS41LjUgMCAwMDAgMWg5YS41LjUgMCAwMDAtMUgxMWwtMS0zaDRhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIMnptMCA4VjNoMTJ2N0gyem01IDFoMmwxIDNINmwxLTN6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDZhLjUuNSAwIDAwMCAxaDFhLjUuNSAwIDAwMC0xaC0xem0zIDBhLjUuNSAwIDAwMCAxaDFhLjUuNSAwIDAwMC0xaC0xem0yLjUuNWEuNS41IDAgMDEuNS0uNWgxYS41LjUgMCAwMTAgMWgtMWEuNS41IDAgMDEtLjUtLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRlc2t0b3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRvY3VtZW50ID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuOCAwYy4yNzQgMCAuNTM3LjExMy43MjYuMzEybDMuMiAzLjQyOGMuMTc2LjE4Ni4yNzQuNDMzLjI3NC42ODlWMTVhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjFhMSAxIDAgMDExLTFoOC44ek0xNCA1aC0zLjVhLjUuNSAwIDAxLS41LS41VjFIMnYxNGgxMlY1em0tOC41IDdhLjUuNSAwIDExMC0xaDVhLjUuNSAwIDExMCAxaC01em0wLTNhLjUuNSAwIDAxMC0xaDVhLjUuNSAwIDExMCAxaC01elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG9jdW1lbnRFZGl0ID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50RWRpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTA1IDguOTk1bDYuNDUzLTYuNDQtMS41LTEuNS02LjQ1MyA2LjQ0IDEuNSAxLjV6TTEyLjk2OC4xOWMuMjU4LS4yMzguNjU3LS4yNi45MSAwbDEuOTI4IDEuOTI5YS42NDIuNjQyIDAgMDEwIC45MDlsLTYuNzggNi43ODRBLjY0MS42NDEgMCAwMTguNTcgMTBINi42NDNBLjY0My42NDMgMCAwMTYgOS4zNTdWNy40M2MwLS4xNy4wNjctLjMzNS4xODgtLjQ1NUwxMi45NjguMTl6TTQuNSAxM2EuNS41IDAgMTEwLTFoN2EuNS41IDAgMTEwIDFoLTd6bTQtMTJhLjUuNSAwIDAxMCAxSDJ2MTNoMTJWNy41YS41LjUgMCAxMTEgMFYxNWExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg2LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50RWRpdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG9jdW1lbnRhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Eb2N1bWVudGF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAzLjVhLjUuNSAwIDExLTEgMCAuNS41IDAgMDExIDB6TTkgNXYzaDF2MUg4VjZIN1Y1aDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy44NTUgMTQuMTQ3YTEuMzQgMS4zNCAwIDAxLS4xNTgtLjI0NkExLjk5OCAxLjk5OCAwIDAxMTMuNSAxM2MwLS40MTQuMTAzLS43MTMuMTk3LS45MDFhMS4zNCAxLjM0IDAgMDEuMTU4LS4yNDZsLjAwMy0uMDA1QS41LjUgMCAwMDE0IDExLjVWLjVhLjUuNSAwIDAwLS41LS41SDMuNDYxbC0uMDgzLjAwNWEyLjk1NyAyLjk1NyAwIDAwLTEuMTAyLjI5OCAyLjI1NyAyLjI1NyAwIDAwLS44OC43NjNDMS4xNDggMS40NCAxIDEuOTEzIDEgMi41VjEzYzAgLjQ2My4xMTcuODQzLjMxOCAxLjE0NS4yLjI5OC40NjIuNDkxLjcwOC42MTVhMi4zNDQgMi4zNDQgMCAwMC45NC4yNEgzdi0xYy0uMDA1IDAtLjAxNSAwLS4wMjktLjAwMmExLjM0NCAxLjM0NCAwIDAxLS40OTgtLjEzMy44MTcuODE3IDAgMDEtLjMyMy0uMjc1QzIuMDcgMTMuNDcgMiAxMy4yODcgMiAxM3MuMDctLjQ3LjE1LS41OWEuODE3LjgxNyAwIDAxLjMyNC0uMjc1QTEuMzQ0IDEuMzQ0IDAgMDEzIDEyaDkuNjU4Yy0uMDkxLjI3LS4xNTguNjA1LS4xNTggMXMuMDY3LjczLjE1OCAxSDh2MWg1LjVhLjUuNSAwIDAwLjM1OS0uODQ4bC0uMDA0LS4wMDV6bS0uMDAxIDBsLjAwMi4wMDItLjAwMi0uMDAyek0yLjcyNCAxLjE5N2MuMDkyLS4wNDYuMTg2LS4wODIuMjc2LS4xMUMzIDIuOTE4IDMuMDAxIDExIDIuOTk5IDExaC0uMDMzYTEuOTc3IDEuOTc3IDAgMDAtLjI4My4wMyAyLjM0NCAyLjM0NCAwIDAwLS42NTcuMjFMMiAxMS4yNTRWMi41YzAtLjQxMy4xMDItLjY4OS4yMjktLjg3OS4xMjgtLjE5My4zMDQtLjMyOC40OTUtLjQyNHpNNCAxMVYxaDl2MTBINHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTNINHYyLjVhLjUuNSAwIDAwLjg1NC4zNTRsLjY0Ni0uNjQ3LjY0Ni42NDdBLjUuNSAwIDAwNyAxNS41VjEzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudGF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb2N1bWVudHMgPSBmdW5jdGlvbiBFdWlJY29uRG9jdW1lbnRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC44IDBjLjI3NCAwIC41MzcuMTEzLjcyNi4zMTJsMy4yIDMuNDI4Yy4xNzYuMTg2LjI3NC40MzMuMjc0LjY4OVYxM2ExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWMWExIDEgMCAwMTEtMWg2Ljh6TTEyIDVIOC41YS41LjUgMCAwMS0uNS0uNVYxSDJ2MTJoMTBWNXptLTcuNSA2YS41LjUgMCAxMTAtMWg1YS41LjUgMCAxMTAgMWgtNXptMC0zYS41LjUgMCAwMTAtMWg1YS41LjUgMCAxMTAgMWgtNXptMSA4YS41LjUgMCAxMTAtMUgxNFY2LjVhLjUuNSAwIDExMSAwVjE1YTEgMSAwIDAxLTEgMUg1LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG90ID0gZnVuY3Rpb24gRXVpSWNvbkRvdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImNpcmNsZVwiLCB7XG4gICAgY3g6IDgsXG4gICAgY3k6IDgsXG4gICAgcjogNFxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG90OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb3VibGVBcnJvd0xlZnQgPSBmdW5jdGlvbiBFdWlJY29uRG91YmxlQXJyb3dMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjEzNSAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI1LTEuMDZsLTQuNTkxLTQuODFhLjI1LjI1IDAgMDEwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDEwLTEuMDg0LTEuMDM1bC00LjU5MSA0LjgxYTEuNzUgMS43NSAwIDAwMCAyLjQxNmw0LjU5IDQuODFjLjI4Ny4zLjc2MS4zMSAxLjA2MS4wMjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0LjEzNSAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI1LTEuMDZsLTQuNTkxLTQuODFhLjI1LjI1IDAgMDEwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDEwLTEuMDg0LTEuMDM1bC00LjU5MSA0LjgxYTEuNzUgMS43NSAwIDAwMCAyLjQxNmw0LjU5IDQuODFjLjI4Ny4zLjc2MS4zMSAxLjA2MS4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvdWJsZUFycm93TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG91YmxlQXJyb3dSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25Eb3VibGVBcnJvd1JpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjIzMiAxNC4wNDNhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMDAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwMTEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwMTAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwMS0xLjA2LjAyNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4yMzIgMTQuMDQzYS43NS43NSAwIDAxLS4wMjUtMS4wNmw0LjU5MS00LjgxYS4yNS4yNSAwIDAwMC0uMzQ2bC00LjU5LTQuODFhLjc1Ljc1IDAgMDExLjA4NS0xLjAzNWw0LjU5IDQuODFhMS43NSAxLjc1IDAgMDEwIDIuNDE2bC00LjU5IDQuODFhLjc1Ljc1IDAgMDEtMS4wNi4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvdWJsZUFycm93UmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRvd25sb2FkID0gZnVuY3Rpb24gRXVpSWNvbkRvd25sb2FkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA5LjExNGwxLjg1LTEuOTQzYS41Mi41MiAwIDAxLjc3IDBjLjIxNC4yMjguMjE0LjYgMCAuODI5bC0xLjk1IDIuMDVhMS41NTIgMS41NTIgMCAwMS0yLjMxIDBMNS40MSA4YS42MTcuNjE3IDAgMDEwLS44MjkuNTIuNTIgMCAwMS43NyAwTDggOS4wODJWLjU1NkM4IC4yNDkgOC4yMjQgMCA4LjUgMHMuNS4yNDkuNS41NTZ2OC41NTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAxMy4wMDZWMTBoLTF2My4wMDZhLjk5NS45OTUgMCAwMS0uOTk0Ljk5NEgzLjAxYS45OTUuOTk1IDAgMDEtLjk5NC0uOTk0VjEwaC0xdjMuMDA2YzAgMS4xLjg5MiAxLjk5NCAxLjk5NCAxLjk5NGgxMC45OTZjMS4xIDAgMS45OTQtLjg5MyAxLjk5NC0xLjk5NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG93bmxvYWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAyaDJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJIN2EyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnpNMS41IDFhLjUuNSAwIDAxLjUuNXYxM2EuNS41IDAgMTEtMSAwdi0xM2EuNS41IDAgMDEuNS0uNXptMTMgMGEuNS41IDAgMDEuNS41djEzYS41LjUgMCAxMS0xIDB2LTEzYS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNWg4YTIgMiAwIDAxMiAydjJhMiAyIDAgMDEtMiAySDRhMiAyIDAgMDEtMi0yVjdhMiAyIDAgMDEyLTJ6TTEuNSAxaDEzYS41LjUgMCAxMTAgMWgtMTNhLjUuNSAwIDAxMC0xem0wIDEzaDEzYS41LjUgMCAxMTAgMWgtMTNhLjUuNSAwIDExMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JEaXN0cmlidXRlVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b20oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDFoMmEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkg3YTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yek0xLjUgMTRoMTNhLjUuNSAwIDExMCAxaC0xM2EuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNEg3VjEuNWEuNS41IDAgMDExIDBWNHptMCA4djIuNWEuNS41IDAgMTEtMSAwVjEyaDF6TTMgNWg5YTIgMiAwIDAxMiAydjJhMiAyIDAgMDEtMiAySDNhMiAyIDAgMDEtMi0yVjdhMiAyIDAgMDEyLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25MZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA1aDhhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJINWEyIDIgMCAwMS0yLTJWN2EyIDIgMCAwMTItMnpNMS41IDFhLjUuNSAwIDAxLjUuNXYxM2EuNS41IDAgMTEtMSAwdi0xM2EuNS41IDAgMDEuNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbk1pZGRsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgN3YxSDEuNWEuNS41IDAgMDEwLTFINHptOCAwaDIuNWEuNS41IDAgMTEwIDFIMTJWN3pNNyAxaDJhMiAyIDAgMDEyIDJ2OWEyIDIgMCAwMS0yIDJIN2EyIDIgMCAwMS0yLTJWM2EyIDIgMCAwMTItMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNWg4YTIgMiAwIDAxMiAydjJhMiAyIDAgMDEtMiAySDNhMiAyIDAgMDEtMi0yVjdhMiAyIDAgMDEyLTJ6bTExLjUtNGEuNS41IDAgMDEuNS41djEzYS41LjUgMCAxMS0xIDB2LTEzYS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduVG9wID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgM2gyYTIgMiAwIDAxMiAydjhhMiAyIDAgMDEtMiAySDdhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJ6TTEuNSAxaDEzYS41LjUgMCAxMTAgMWgtMTNhLjUuNSAwIDAxMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25Ub3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDhoNWExIDEgMCAwMTEgMXY1SDNhMSAxIDAgMDEtMS0xVjh6bTEtN2gxMGEyIDIgMCAwMTIgMnYxMGEyIDIgMCAwMS0yIDJIM2EyIDIgMCAwMS0yLTJWM2EyIDIgMCAwMTItMnptMCAxYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAwMDEgMWgxMGExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgOGg1djVhMSAxIDAgMDEtMSAxSDhWOWExIDEgMCAwMTEtMXpNMyAxaDEwYTIgMiAwIDAxMiAydjEwYTIgMiAwIDAxLTIgMkgzYTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEwYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDJoNXY1YTEgMSAwIDAxLTEgMUgyVjNhMSAxIDAgMDExLTF6bTAtMWgxMGEyIDIgMCAwMTIgMnYxMGEyIDIgMCAwMS0yIDJIM2EyIDIgMCAwMS0yLTJWM2EyIDIgMCAwMTItMnptMCAxYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAwMDEgMWgxMGExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMmg1YTEgMSAwIDAxMSAxdjVIOWExIDEgMCAwMS0xLTFWMnpNMyAxaDEwYTIgMiAwIDAxMiAydjEwYTIgMiAwIDAxLTIgMkgzYTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEwYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA0VjNoNnYxSDV6TTMgN1Y2aDEwdjFIM3ptMiAzVjloNnYxSDV6bS0yIDN2LTFoMTB2MUgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnbkNlbnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQWxpZ25MZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckFsaWduTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgNFYzaDZ2MUgyem0wIDNWNmgxMHYxSDJ6bTAgM1Y5aDZ2MUgyem0wIDN2LTFoMTB2MUgyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnbkxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckFsaWduUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQWxpZ25SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNFYzaDZ2MUg4ek00IDdWNmgxMHYxSDR6bTQgM1Y5aDZ2MUg4em0tNCAzdi0xaDEwdjFINHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQWxpZ25SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQm9sZCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JCb2xkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xOTMgMTNINFYzaDQuMTUxYzEuODE2IDAgMi45ODcuOTc3IDIuOTg3IDIuNDk1IDAgMS4wNzQtLjc5NyAyLjAxLTEuODIzIDIuMTc2di4wNTVjMS4zNTkuMTMyIDIuMzA4IDEuMTEgMi4zMDggMi40MzMgMCAxLjc2LTEuMjk2IDIuODQxLTMuNDMgMi44NDF6TTUuNzg4IDQuMzkzdjIuODJoMS42MzVjMS4yNDggMCAxLjk0OC0uNTI2IDEuOTQ4LTEuNDU1IDAtLjg3My0uNjAzLTEuMzY1LTEuNjctMS4zNjVINS43ODh6bTAgNy4yMTRoMS45OTZjMS4zMTYgMCAyLjAxNi0uNTQ3IDIuMDE2LTEuNTczIDAtMS4wMTktLjcyLTEuNTUyLTIuMDkyLTEuNTUyaC0xLjkydjMuMTI1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JCb2xkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JDaGVja2xpc3QgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ2hlY2tsaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41OTcgM2EuNDExLjQxMSAwIDAwLS4yOTkuMTMybC0xLjg1IDEuOTkzLS43NTYtLjdhLjQxMi40MTIgMCAwMC0uMjgtLjEyNC40Mi40MiAwIDAwLS4yOTIuMDk4LjMzMy4zMzMgMCAwMC0uMTIuMjU3LjMzNS4zMzUgMCAwMC4xMjcuMjU0bDEuMDY0Ljk4MkEuNDE4LjQxOCAwIDAwMi40ODggNmEuNDExLjQxMSAwIDAwLjI4OC0uMTI2TDQuOTA0IDMuNThhLjMyOC4zMjggMCAwMC4wOTUtLjI1LjMzNy4zMzcgMCAwMC0uMTI2LS4yMzhBLjQyMS40MjEgMCAwMDQuNTk3IDN6bS0uMjk5IDQuMTMyQS40MTEuNDExIDAgMDE0LjU5NyA3YS40MjEuNDIxIDAgMDEuMjc2LjA5M2MuMDc2LjA2Mi4xMi4xNDcuMTI2LjIzOGEuMzI4LjMyOCAwIDAxLS4wOTUuMjVMMi43NzYgOS44NzRhLjQxMS40MTEgMCAwMS0uMjg4LjEyNi40MTguNDE4IDAgMDEtLjI5Ny0uMTA4TDEuMTI3IDguOTFBLjMzNS4zMzUgMCAwMTEgOC42NTZhLjMzMy4zMzMgMCAwMS4xMi0uMjU3LjQyLjQyIDAgMDEuMjkyLS4wOThjLjEwOC4wMDUuMjEuMDUuMjguMTIzbC43NTcuNzAxIDEuODQ5LTEuOTkzek00LjU5NyAxMWEuNDExLjQxMSAwIDAwLS4yOTkuMTMybC0xLjg1IDEuOTkzLS43NTYtLjdhLjQxMi40MTIgMCAwMC0uMjgtLjEyNC40MjEuNDIxIDAgMDAtLjI5Mi4wOTguMzMzLjMzMyAwIDAwLS4xMi4yNTcuMzM1LjMzNSAwIDAwLjEyNy4yNTRsMS4wNjQuOTgyYS40MTguNDE4IDAgMDAuMjk3LjEwOC40MTEuNDExIDAgMDAuMjg4LS4xMjZsMi4xMjgtMi4yOTNhLjMyOC4zMjggMCAwMC4wOTUtLjI1LjMzNy4zMzcgMCAwMC0uMTI2LS4yMzguNDIxLjQyMSAwIDAwLS4yNzYtLjA5M3pNNi41IDRhLjUuNSAwIDAwMCAxaDdhLjUuNSAwIDAwMC0xaC03ek02IDguNWEuNS41IDAgMDEuNS0uNWg3YS41LjUgMCAwMTAgMWgtN2EuNS41IDAgMDEtLjUtLjV6bS41IDMuNWEuNS41IDAgMDAwIDFoN2EuNS41IDAgMDAwLTFoLTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckNoZWNrbGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQ29kZUJsb2NrID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckNvZGVCbG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuNDE0IDguMDM2TDQuODkgMTAuNTFhLjUuNSAwIDAxLS43MDcuNzA4TDEuMzU0IDguMzg5YS41LjUgMCAwMTAtLjcwN2wyLjgyOC0yLjgyOGEuNS41IDAgMTEuNzA3LjcwN0wyLjQxNCA4LjAzNnptOC43NjggMi40NzRsMi40NzUtMi40NzQtMi40NzUtMi40NzVhLjUuNSAwIDAxLjcwNy0uNzA3bDIuODI5IDIuODI4YS41LjUgMCAwMTAgLjcwN2wtMi44MjkgMi44MjlhLjUuNSAwIDExLS43MDctLjcwOHpNOC41NTkgMi41MDZhLjUuNSAwIDAxLjk4MS4xOUw3LjQ0MSAxMy40OTRhLjUuNSAwIDAxLS45ODEtLjE5TDguNTU5IDIuNTA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JDb2RlQmxvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckNvbW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ29tbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMTExIDEwSDEyYTEgMSAwIDAwMS0xVjVhMSAxIDAgMDAtMS0xSDRhMSAxIDAgMDAtMSAxdjRhMSAxIDAgMDAxIDFoMXYxLjI5N0w2LjExMSAxMHptLjQ2IDFMNCAxNHYtM2EyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMmg4YTIgMiAwIDAxMiAydjRhMiAyIDAgMDEtMiAySDYuNTcxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JDb21tZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JIZWFkaW5nID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckhlYWRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDExYTEgMSAwIDAxMCAySDRhMSAxIDAgMDEwLTJWNWExIDEgMCAxMTAtMmgyYTEgMSAwIDExMCAydjJoNFY1YTEgMSAwIDExMC0yaDJhMSAxIDAgMDEwIDJ2NmExIDEgMCAwMTAgMmgtMmExIDEgMCAwMTAtMlY5SDZ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySGVhZGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRhbGljID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0YWxpYyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMTYgMTJIOS41YS41LjUgMCAxMTAgMWgtNGEuNS41IDAgMTEwLTFoMS42MzlsMS43LThINy41YS41LjUgMCAwMTAtMWg0YS41LjUgMCAxMTAgMUg5Ljg2MWwtMS43IDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0YWxpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yTGluayA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JMaW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NTYgNS4wNTFhLjQ1LjQ1IDAgMDAuNjM3LjYzN2wxLjUwMy0xLjUwNGMuNDMyLS40MzEgMS4yNzgtLjM4MiAxLjg5LjIzLjYxMi42MTIuNjYyIDEuNDU4LjIzIDEuODlMOS41MTkgOC42Yy0uNDMyLjQzMi0xLjI3OC4zODMtMS44OS0uMjNhLjQ1LjQ1IDAgMTAtLjYzNi42MzdjLjkxNC45MTQgMi4zMyAxLjA2MyAzLjE2Mi4yM2wyLjI5Ny0yLjI5N2MuODMzLS44MzMuNjg0LTIuMjQ4LS4yMy0zLjE2Mi0uOTE0LS45MTUtMi4zMy0xLjA2My0zLjE2Mi0uMjNMNy41NTYgNS4wNTF6bS44ODggNS4yNjFhLjQ1LjQ1IDAgMDAtLjYzNyAwbC0xLjUwMyAxLjUwNGMtLjQzMi40MzEtMS4yNzguMzgyLTEuODktLjIzLS42MTItLjYxMi0uNjYxLTEuNDU4LS4yMy0xLjg5TDYuNDgxIDcuNGMuNDMyLS40MzIgMS4yNzgtLjM4MyAxLjg5LjIzYS40NS40NSAwIDAwLjYzNi0uNjM3Yy0uOTE0LS45MTQtMi4zMy0xLjA2My0zLjE2Mi0uMjNMMy41NDggOS4wNmMtLjgzMy44MzMtLjY4NSAyLjI0OC4yMyAzLjE2Mi45MTQuOTE1IDIuMzMgMS4wNjMgMy4xNjIuMjNsMS41MDQtMS41MDNhLjQ1LjQ1IDAgMDAwLS42Mzd6TTcuODc3IDUuNzZhLjM5LjM5IDAgMDAuMjc0LS4xMTRsMS41MDMtMS41MDQtMS41MDMgMS41MDRhLjM5LjM5IDAgMDEtLjI3NC4xMTR6bS45MTIgMy4xODNjLS40LjAwMy0uODQzLS4xNzItMS4yMDItLjUzLjM1OS4zNTguODAyLjUzMyAxLjIwMi41M3pNMTIuMTggMy44MmMtLjUwMi0uNTAzLTEuMTU1LS43NjYtMS43NzMtLjc2LjYxOC0uMDA2IDEuMjcuMjU3IDEuNzczLjc2Ljg5OC44OTggMS4wMzQgMi4yNzUuMjMgMy4wNzhsLTIuMjk3IDIuMjk3IDIuMjk3LTIuMjk3Yy44MDQtLjgwMy42NjgtMi4xOC0uMjMtMy4wNzh6bS00LjA2MiA2LjQyYS4zOS4zOSAwIDAxLjI4NC42NjdMNi44OTggMTIuNDFsMS41MDQtMS41MDNhLjM5LjM5IDAgMDAtLjI4NC0uNjY3em0tLjkyNi0zLjk2NWMuNjE4LS4wMDYgMS4yNy4yNTcgMS43NzMuNzYtLjUwMi0uNTAzLTEuMTU1LS43NjYtMS43NzMtLjc2ek01LjQxNCAxMi4xNWExLjc2MiAxLjc2MiAwIDAxLTEuMDQyLS41MjJjLS42MjYtLjYyNy0uNjkyLTEuNTExLS4yMy0xLjk3NEw2LjQ0IDcuMzU4IDQuMTQyIDkuNjU0Yy0uNDYyLjQ2My0uMzk2IDEuMzQ4LjIzIDEuOTc0LjMxMS4zMTEuNjg3LjQ4NCAxLjA0Mi41MjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA4djFoMXYxSDFWOWgxVjhIMVY3aDN2MUgzem0xIDR2Mkgxdi0xaDF2LTFIMXYtMWgzdjF6TTMgNWgxdjFIMVY1aDFWNEgxVjNoMnYyem0yLjUtMWg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6bTAgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6bTAgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JSZWRvID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclJlZG8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA2SDVDMy4wNTcgNiAyIDcuMDU3IDIgOXMxLjA1NyAzIDMgM2gxLjV2LTFINWMtMS4zOSAwLTItLjYxLTItMiAwLTEuMzkuNjEtMiAyLTJoNXYzbDMuNS0zLjVMMTAgM3YzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JSZWRvOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JTdHJpa2UgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yU3RyaWtlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMDIzIDEwaDEuMjc0Yy4wMDYuMDguMDEuMTY0LjAxLjI1YTIuNTU3IDIuNTU3IDAgMDEtLjg4MyAxLjk0OWMtLjI4NC4yNS0uNjI3LjQ0Ni0xLjAzLjU4OEE0LjA4NyA0LjA4NyAwIDAxOC4wMjggMTNhNC42MTYgNC42MTYgMCAwMS0zLjM4Mi0xLjQyNmMtLjE5My0uMjU5LS4xOTMtLjUgMC0uNzI0LjE5My0uMjIzLjQzOC0uMjY2LjczNS0uMTMuMzQzLjM2My43NDguNjU1IDEuMjEzLjg3Ni40NjYuMjIuOTQ5LjMzIDEuNDQ5LjMzLjYzNyAwIDEuMTMyLS4xNDQgMS40ODUtLjQzMy4zNTMtLjI5LjUzLS42Ny41My0xLjE0YTEuNzIgMS43MiAwIDAwLS4wMzQtLjM1M3pNNS41ODYgN2EyLjQ5IDIuNDkgMCAwMS0uMjk0LS41MDcgMi4zMTYgMi4zMTYgMCAwMS0uMTc3LS45MzRjMC0uMzYzLjA3Ni0uNzAxLjIyOC0xLjAxNS4xNTItLjMxNC4zNjMtLjU4Ni42MzMtLjgxNi4yNy0uMjMuNTg4LS40MS45NTUtLjUzN0EzLjY4MyAzLjY4MyAwIDAxOC4xNDUgM2MuNTc4IDAgMS4xMTIuMTEgMS42MDMuMzMuNDkuMjIxLjkwNy41MDggMS4yNS44NjEuMTYuMjgyLjE2LjUxMiAwIC42OTItLjE2LjE4LS4zOC4yMTQtLjY2Mi4xMDJhMy40MzggMy40MzggMCAwMC0uOTc4LS42NjkgMi45MTQgMi45MTQgMCAwMC0xLjIxMy0uMjQyYy0uNTQgMC0uOTczLjEyNS0xLjMwMi4zNzUtLjMyOC4yNS0uNDkyLjU5NS0uNDkyIDEuMDM2IDAgLjIzNi4wNDYuNDM0LjE0LjU5Ni4wOTIuMTYyLjIxNy4zMDQuMzc0LjQyNi4xNTcuMTIzLjMyOS4yMy41MTUuMzI0LjExOS4wNi4yNC4xMTYuMzYyLjE2OUg1LjU4NnpNMi41IDhoMTFhLjUuNSAwIDExMCAxaC0xMWEuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclN0cmlrZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yVGFibGUgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVGFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAzdjJIMlYzdjEwaDEyVjN6TTIgMmgxMmMuNTUyIDAgMSAuNDEzIDEgLjkyM3YxMC4xNTRjMCAuNTEtLjQ0OC45MjMtMSAuOTIzSDJjLS41NTIgMC0xLS40MTMtMS0uOTIzVjIuOTIzQzEgMi40MTMgMS40NDggMiAyIDJ6bTAgNWgxMnYxSDJWN3ptMCAzaDEydjFIMnYtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVGFibGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclVuZGVybGluZSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbmRlcmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDMuNTM2VjcuOGMwIDEuNjI4IDEuMjI0IDIuNiAzIDIuNiAxLjc4MyAwIDMtLjk3MiAzLTIuNlYzLjUzNmMwLS4zNTcuMTY3LS41MzYuNS0uNTM2LjMzMyAwIC41LjE3OS41LjUzNnY0LjMxOGMwIDIuMDkzLTEuNjY1IDMuNTQ2LTQgMy41NDZTNCA5Ljg5MyA0IDcuOFYzLjUzNkM0IDMuMTc5IDQuMTY3IDMgNC41IDNjLjMzMyAwIC41LjE3OS41LjUzNnpNMi41IDEzaDExYS41LjUgMCAxMTAgMWgtMTFhLjUuNSAwIDExMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JVbmRlcmxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclVuZG8gPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVW5kbyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNSA2aDVjMS45NDMgMCAzIDEuMDU3IDMgM3MtMS4wNTcgMy0zIDNIOXYtMWgxLjVjMS4zOSAwIDItLjYxIDItMiAwLTEuMzktLjYxLTItMi0yaC01djNMMiA2LjUgNS41IDN2M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVW5kbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDRoOGEuNS41IDAgMTEwIDFoLThhLjUuNSAwIDAxMC0xem0wIDRoOGEuNS41IDAgMTEwIDFoLThhLjUuNSAwIDAxMC0xem0wIDRoOGEuNS41IDAgMTEwIDFoLThhLjUuNSAwIDExMC0xem0tMy03YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTAgNGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0wIDRhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRW1haWwgPSBmdW5jdGlvbiBFdWlJY29uRW1haWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuOTUgMy42ODRMOC42MzcgOC45MTJhMSAxIDAgMDEtMS4yNzYgMEwxLjA1MSAzLjY4NEEuOTk5Ljk5OSAwIDAwMSA0djhhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNGEuOTk5Ljk5OSAwIDAwLS4wNS0uMzE2ek0yIDJoMTJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnptLS4yMSAxbDUuNTc2IDQuNjAzYTEgMSAwIDAwMS4yNy4wMDNMMTQuMjY4IDNIMS43OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRW1haWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVtcHR5ID0gZnVuY3Rpb24gRXVpSWNvbkVtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcykpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FcWwgPSBmdW5jdGlvbiBFdWlJY29uRXFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuODYyIDE0LjE4di4wMDFhLjQ4Mi40ODIgMCAwMS4xLjUyMS41LjUgMCAwMS0uNDQ3LjI5OWgtMy4xNDljLS4wNyAwLS4xMzYgMC0uMi0uMDAzYS42NjQuNjY0IDAgMDEtLjQxNC0uMTRjLS4zNS0uMzEtLjY4NC0uNjM3LTEuMDAxLS45ODFsLTEuNzcyLTEuNzM4YTUuOTQxIDUuOTQxIDAgMDEtMy44MDIuMTRsLS4wNDUtLjAxMmE1Ljg5IDUuODkgMCAwMS0yLjY4Mi0xLjcxMkE1LjcxNSA1LjcxNSAwIDAxMS4wOCA3LjcyYTUuNjYgNS42NiAwIDAxLjM0OC0zLjExOEE1Ljc4IDUuNzggMCAwMTMuMzkgMi4xMjRhNS45NzkgNS45NzkgMCAwMTYuMTM2LS41MDUgNS44MzYgNS44MzYgMCAwMTIuMzU2IDIuMTIzIDUuNjcgNS42NyAwIDAxLjg3MyAzLjAxN2wuMDAxLjAwM2MwIC4xMjgtLjA1MS4yNS0uMTQzLjM0YS40OTUuNDk1IDAgMDEtLjY5NCAwIC40NzYuNDc2IDAgMDEtLjE0My0uMzRjMC0uOTUtLjI4OC0xLjg3OC0uODI2LTIuNjY4YTQuODggNC44OCAwIDAwLTIuMTk4LTEuNzY5IDQuOTkgNC45OSAwIDAwLTIuODMtLjI3MyA0LjkzIDQuOTMgMCAwMC0yLjUwOSAxLjMxNCA0Ljc3NCA0Ljc3NCAwIDAwLTEuMzQgMi40NkE0LjcxNSA0LjcxNSAwIDAwMi4zNTIgOC42YTQuODIgNC44MiAwIDAwMS44MDQgMi4xNTVjLjgwNS41MjggMS43NTIuODEgMi43MjEuODFhNC44OTkgNC44OTkgMCAwMDEuMjk2LS4xOTRsLjAzMi0uMDA5LjcxNy0uMjExYS41MDYuNTA2IDAgMDEuNDgzLjExMWwxLjExIDEuMDI2IDEuNzg4IDEuNzUyaDIuMDNsLTMuNjU3LTMuNTgzYS40NzUuNDc1IDAgMDEuMDE0LS42NjYuNDk1LjQ5NSAwIDAxLjY3OS0uMDEzbDQuNDkzIDQuNDAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4wOTcgMy40NjhMOS42NzkgNC45M2EuNDMzLjQzMyAwIDAxLjIxOC4zN3YyLjkyNGEuNDIyLjQyMiAwIDAxLS4yMTguMzdsLTIuNTgyIDEuNDYxYS40MzguNDM4IDAgMDEtLjQzNyAwTDQuMDc3IDguNTk0YS40MzMuNDMzIDAgMDEtLjIxOC0uMzdWNS4zYS40MjIuNDIyIDAgMDEuMjE4LS4zN0w2LjY2IDMuNDY3YS40NDYuNDQ2IDAgMDEuNDM3IDB6bTEuODQ1IDQuMjdWNS43ODRhLjMyOC4zMjggMCAwMC0uMTctLjI4N0w3LjA0NyA0LjUyYS4zNDIuMzQyIDAgMDAtLjMzOCAwbC0xLjcyNi45NzdhLjMzNi4zMzYgMCAwMC0uMTY4LjI4N3YxLjk1M2EuMzI2LjMyNiAwIDAwLjE3LjI4N2wxLjcyNC45NzdhLjM0Mi4zNDIgMCAwMC4zMzggMGwxLjcyNi0uOTc4YS4zMzQuMzM0IDAgMDAuMTY5LS4yODd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXJhc2VyID0gZnVuY3Rpb24gRXVpSWNvbkVyYXNlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuNjQ4IDkuOTM3bDcuMjktNy4yODhhMi4yMSAyLjIxIDAgMDEzLjEyNCAwbDIuMjkgMi4yODhhMi4yMSAyLjIxIDAgMDEwIDMuMTI2TDEwLjQxMyAxM0gxMi41YS41LjUgMCAwMTAgMUg0LjUwMWEyLjIxIDIuMjEgMCAwMS0xLjU2My0uNjQ3bC43MDctLjcwN2MuMjI3LjIyNi41MzUuMzU0Ljg1Ni4zNTRoNC4wMDVhMS4yMSAxLjIxIDAgMDAuODQ4LS4zNTRsMS4yOTItMS4yOTMtNC00LTMuMjkgMy4yOTFhMS4yMSAxLjIxIDAgMDAwIDEuNzEybC4yOS4yOS0uNzA4LjcwNy0uMjktLjI5YTIuMjEgMi4yMSAwIDAxMC0zLjEyNnpNOCA2aDYuODlhMS4yMDggMS4yMDggMCAwMC0uMjQ2LS4zNTZMMTQgNUg5TDggNnptMi0yaDNsLS42NDUtLjY0NGExLjIxIDEuMjEgMCAwMC0xLjcxIDBMMTAgNHptNC44OSAzSDcuNzA4bDEgMUgxNGwuNjQ0LS42NDRBMS4yMiAxLjIyIDAgMDAxNC44OTEgN3pNOS43MDggOWwxLjY0NiAxLjY0NkwxMyA5SDkuNzA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMTEuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHptMS41LS41YS41LjUgMCAxMDAtMSAuNS41IDAgMDAwIDF6bS0xIDJhLjUuNSAwIDAwMCAxaDFhLjUuNSAwIDAwMC0xaC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FcmFzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkV4aXQgPSBmdW5jdGlvbiBFdWlJY29uRXhpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi41MzUgMTIuNDkzYS40Ny40NyAwIDAxLjQ2OC40Njh2Mi41NjRhLjQ3My40NzMgMCAwMS0uNDY2LjQ3NUgzVjBIMTIuNTk1YS40NS40NSAwIDAxLjM5OC40NjN2Mi41NjVhLjQ2OS40NjkgMCAwMS0uNDY4LjQ2N2gtLjA2NWEuNDY4LjQ2OCAwIDAxLS40NjctLjQ2N1YxSDR2MTRoOC4wMWwtLjAwNy0yLjA0YzAtLjI1Ny4yMS0uNDY3LjQ2Ny0uNDY3aC4wNjV6bS0xLjA5Ni03LjU5bDIuMTIxIDIuMTIyYTEuNSAxLjUgMCAwMTAgMi4xMjFsLTIuMTIgMi4xMjJhLjUuNSAwIDExLS43MDgtLjcwOGwyLjEyMS0yLjEyYS41LjUgMCAwMDAtLjcwOGwtMi4xMjEtMi4xMjFhLjUuNSAwIDAxLjcwNy0uNzA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FeGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FeHBhbmQgPSBmdW5jdGlvbiBFdWlJY29uRXhwYW5kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuMzU0IDEyLjM1NGw4LThhLjUuNSAwIDAwLS43MDgtLjcwOGwtOCA4YS41LjUgMCAwMC43MDguNzA4ek0xIDEwLjVhLjUuNSAwIDExMSAwdjNhLjUuNSAwIDAwLjUuNWgzYS41LjUgMCAxMTAgMWgtM0ExLjUgMS41IDAgMDExIDEzLjV2LTN6bTE0LTVhLjUuNSAwIDExLTEgMHYtM2EuNS41IDAgMDAtLjUtLjVoLTNhLjUuNSAwIDExMC0xaDNBMS41IDEuNSAwIDAxMTUgMi41djN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4cGFuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXhwYW5kTWluaSA9IGZ1bmN0aW9uIEV1aUljb25FeHBhbmRNaW5pKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNzA3IDEwTDEwIDYuNzA3QS41LjUgMCAwMDkuMjkzIDZMNiA5LjI5M2EuNS41IDAgMTAuNzA3LjcwN3pNNCA5LjVhLjUuNSAwIDAxMSAwdjFhLjUuNSAwIDAwLjUuNWgxYS41LjUgMCAxMTAgMWgtMUExLjUgMS41IDAgMDE0IDEwLjV2LTF6bTgtM2EuNS41IDAgMTEtMSAwdi0xYS41LjUgMCAwMC0uNS0uNWgtMWEuNS41IDAgMDEwLTFoMUExLjUgMS41IDAgMDExMiA1LjV2MXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhwYW5kTWluaTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXhwb3J0ID0gZnVuY3Rpb24gRXVpSWNvbkV4cG9ydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTA1IDFjLjQyMi0uMDAzLjg0NC4xNyAxLjE2Ni41MTZsMS45NSAyLjA1Yy4yMTMuMjI4LjIxMy42IDAgLjgyOGEuNTIuNTIgMCAwMS0uNzcxIDBMOSAyLjQ1MXY3Ljk5M2MwIC4zMDctLjIyNC41NTYtLjUuNTU2cy0uNS0uMjQ5LS41LS41NTZ2LTcuOTZsLTEuODIgMS45MWEuNTIuNTIgMCAwMS0uNzcgMCAuNjE3LjYxNyAwIDAxMC0uODI5bDEuOTUtMi4wNUExLjU3NSAxLjU3NSAwIDAxOC41IDFoLjAwNXpNNC4xOCA3Yy0uNDczIDAtLjg4LjI5NC0uOTcyLjcwM2wtMS4xODkgNS4yNWEuNzc2Ljc3NiAwIDAwLS4wMTkuMTcyYzAgLjQ4My40NDQuODc1Ljk5Ljg3NUgxNC4wMWMuMDY1IDAgLjEzLS4wMDYuMTk0LS4wMTcuNTM3LS4wOTUuODg1LS41NTYuNzc4LTEuMDNsLTEuMTktNS4yNUMxMy43IDcuMjk0IDEzLjI5MyA3IDEyLjgyMiA3SDQuMTh6TTYgNnYxaDVWNmgxLjgyNWMuOTQ2IDAgMS43Ni42MDYgMS45NDYgMS40NDdsMS4xOSA1LjRjLjIxNS45NzUtLjQ4MiAxLjkyMy0xLjU1NiAyLjExOGEyLjE4IDIuMTggMCAwMS0uMzkuMDM1SDIuOTg1QzEuODg4IDE1IDEgMTQuMTk0IDEgMTMuMmMwLS4xMTkuMDEzLS4yMzcuMDM5LS4zNTNsMS4xOS01LjRDMi40MTQgNi42MDYgMy4yMjkgNiA0LjE3NCA2SDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4cG9ydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXllID0gZnVuY3Rpb24gRXVpSWNvbkV5ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1Ljk4IDcuODczYy4wMTMuMDMuMDIuMDY0LjAyLjA5OHYuMDZhLjI0LjI0IDAgMDEtLjAyLjA5N0MxNS45NTIgOC4xODggMTMuMjkxIDE0IDggMTRTLjA0NyA4LjE4OC4wMiA4LjEyOEEuMjQuMjQgMCAwMTAgOC4wM3YtLjA1OWMwLS4wMzQuMDA3LS4wNjguMDItLjA5OEMuMDQ4IDcuODEzIDIuNzA5IDIgOCAyczcuOTUzIDUuODEzIDcuOTggNS44NzN6bS0xLjM3LS40MjRhMTIuMDk3IDEyLjA5NyAwIDAwLTEuMzg1LTEuODYyQzExLjczOSAzLjk1NiA5Ljk5OSAzIDggM2MtMiAwLTMuNzQuOTU2LTUuMjI1IDIuNTg3YTEyLjA5OCAxMi4wOTggMCAwMC0xLjcwMSAyLjQxNCAxMi4wOTUgMTIuMDk1IDAgMDAxLjcgMi40MTNDNC4yNiAxMi4wNDMgNi4wMDIgMTMgOCAxM3MzLjc0LS45NTYgNS4yMjUtMi41ODdBMTIuMDk3IDEyLjA5NyAwIDAwMTQuOTI2IDhjLS4wOC0uMTUtLjE4OS0uMzQzLS4zMTUtLjU1MXpNOCA0Ljc1QTMuMjUzIDMuMjUzIDAgMDExMS4yNSA4IDMuMjU0IDMuMjU0IDAgMDE4IDExLjI1IDMuMjUzIDMuMjUzIDAgMDE0Ljc1IDggMy4yNTIgMy4yNTIgMCAwMTggNC43NXptMCAxQzYuNzYgNS43NSA1Ljc1IDYuNzYgNS43NSA4UzYuNzYgMTAuMjUgOCAxMC4yNSAxMC4yNSA5LjI0IDEwLjI1IDggOS4yNCA1Ljc1IDggNS43NXptMCAxLjVhLjc1Ljc1IDAgMTAwIDEuNS43NS43NSAwIDAwMC0xLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV5ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXllQ2xvc2VkID0gZnVuY3Rpb24gRXVpSWNvbkV5ZUNsb3NlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMzE4IDEzLjQ3bC43NzYtLjc3NkE2LjA0IDYuMDQgMCAwMDggMTNjMS45OTkgMCAzLjc0LS45NTYgNS4yMjUtMi41ODdBMTIuMDk3IDEyLjA5NyAwIDAwMTQuOTI2IDhhMTIuMDk3IDEyLjA5NyAwIDAwLTEuNzAxLTIuNDEzbC0uMDExLS4wMTIuNzA3LS43MDhjMS4zNTkgMS40NzYgMi4wNDUgMi45NzYgMi4wNTggMy4wMDYuMDE0LjAzLjAyMS4wNjQuMDIxLjA5OHYuMDZhLjI0LjI0IDAgMDEtLjAyLjA5N0MxNS45NTIgOC4xODggMTMuMjkxIDE0IDggMTRhNy4wMyA3LjAzIDAgMDEtMi42ODItLjUzek0yLjA0IDExLjA5MkMuNzA3IDkuNjI5LjAzNCA4LjE1OC4wMiA4LjEyOEEuMjQuMjQgMCAwMTAgOC4wM3YtLjA1OWMwLS4wMzQuMDA3LS4wNjguMDItLjA5OEMuMDQ4IDcuODEzIDIuNzA5IDIgOCAyYy45NjIgMCAxLjgzNy4xOTIgMi42MjUuNTA3bC0uNzguNzhBNi4wMzkgNi4wMzkgMCAwMDggM2MtMiAwLTMuNzQuOTU2LTUuMjI1IDIuNTg3YTEyLjA5OCAxMi4wOTggMCAwMC0xLjcwMSAyLjQxNCAxMi4xMSAxMi4xMSAwIDAwMS42NzQgMi4zODNsLS43MDguNzA4ek04LjM2MiA0Ljc3TDcuMjU1IDUuODc3YTIuMjYyIDIuMjYyIDAgMDAtMS4zNzggMS4zNzhMNC43NyA4LjM2MkEzLjI1MiAzLjI1MiAwIDAxOC4zNjIgNC43N3ptMi44NiAyLjc5N2EzLjI1NCAzLjI1NCAwIDAxLTMuNjU0IDMuNjU0bDEuMDYtMS4wNmEyLjI2MiAyLjI2MiAwIDAwMS41MzMtMS41MzNsMS4wNi0xLjA2em0tOS4zNjggNy4yODdhLjUuNSAwIDAxLS43MDgtLjcwOGwxMy0xM2EuNS41IDAgMDEuNzA4LjcwOGwtMTMgMTN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV5ZUNsb3NlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRmFjZUhhcHB5ID0gZnVuY3Rpb24gRXVpSWNvbkZhY2VIYXBweShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTZBOCA4IDAgMTE4IDBhOCA4IDAgMDEwIDE2em0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMTA4IDEuMDY3YTYuOTMzIDYuOTMzIDAgMDAwIDEzLjg2NnpNNS4zMzMgNi40YTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzem01LjMzNCAwYTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzek0yLjczOSA4LjgwMmEuNTMzLjUzMyAwIDAxLjkyMi0uNTM3QzQuODE1IDEwLjI0NSA2LjI0OSAxMS4yIDggMTEuMmMxLjc1IDAgMy4xODUtLjk1NiA0LjM0LTIuOTM1YS41MzMuNTMzIDAgMDEuOTIuNTM3Yy0xLjMzMyAyLjI4Ny0zLjEgMy40NjUtNS4yNiAzLjQ2NS0yLjE2IDAtMy45MjctMS4xNzgtNS4yNi0zLjQ2NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmFjZUhhcHB5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GYWNlTmV1dHJhbCA9IGZ1bmN0aW9uIEV1aUljb25GYWNlTmV1dHJhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTZBOCA4IDAgMTE4IDBhOCA4IDAgMDEwIDE2em0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMTA4IDEuMDY3YTYuOTMzIDYuOTMzIDAgMDAwIDEzLjg2NnpNNS4zMzMgNi40YTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzem01LjMzNCAwYTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzek0zLjIgMTAuNjY3YS41MzMuNTMzIDAgMDEwLTEuMDY3aDkuNmEuNTMzLjUzMyAwIDExMCAxLjA2N0gzLjJ6XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GYWNlTmV1dHJhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRmFjZVNhZCA9IGZ1bmN0aW9uIEV1aUljb25GYWNlU2FkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6bTAtMS4wNjdBNi45MzMgNi45MzMgMCAxMDggMS4wNjdhNi45MzMgNi45MzMgMCAwMDAgMTMuODY2ek01LjMzMyA2LjRhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6bTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6bTIuNDg3IDMuODY4YS41MzMuNTMzIDAgMTEtLjcwOC43OTdDMTAuOTM2IDkuNzI1IDkuNDU4IDkuMDY3IDggOS4wNjdjLTEuNDU4IDAtMi45MzcuNjU3LTQuNDQ2IDEuOTk4YS41MzMuNTMzIDAgMTEtLjcwOC0uNzk3QzQuNTM2IDguNzY1IDYuMjU4IDggOCA4czMuNDYzLjc2NSA1LjE1NCAyLjI2OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmFjZVNhZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRmlsdGVyID0gZnVuY3Rpb24gRXVpSWNvbkZpbHRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03Ljk5OSAxNS45OTlhOCA4IDAgMTEwLTE2IDggOCAwIDAxMCAxNnpNOCAxNUE3IDcgMCAxMDggMWE3IDcgMCAwMDAgMTR6TTMuNSA1aDlhLjUuNSAwIDExMCAxaC05YS41LjUgMCAwMTAtMXptMiAzaDVhLjUuNSAwIDExMCAxaC01YS41LjUgMCAwMTAtMXptMiAzaDFhLjUuNSAwIDExMCAxaC0xYS41LjUgMCAxMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmlsdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GbGFnID0gZnVuY3Rpb24gRXVpSWNvbkZsYWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjY4NiA4LjQ2NGMxLjU0Ny0uNjE5IDMuMDgtLjYxOSA0LjYyOCAwQS41LjUgMCAwMDEzIDhWMmEuNS41IDAgMDAtLjI3Ni0uNDQ3QzExLjI1OS44MiA5LjQ1OC44MiA3LjM0MiAxLjUyNmMtMS44ODQuNjI4LTMuNDE3LjYyOC00LjYxOC4wMjdBLjUuNSAwIDAwMiAydjEyLjVhLjUuNSAwIDEwMSAwVjguNTUzYzEuNDExLjYyNyAyLjk4My41OTIgNC42ODYtLjA4OXpNMyAyLjc0MWMxLjMyMi40MiAyLjg3OC4zMjcgNC42NTgtLjI2N0M5LjQgMS44OTQgMTAuODQzIDEuODUgMTIgMi4zMjJ2NC45NzVjLTEuNTYtLjQ2NC0zLjEyOC0uMzg0LTQuNjg2LjIzOS0xLjU0LjYxNi0yLjg5Mi42MTYtNC4wOS4wMTdBLjQ5OC40OTggMCAwMDMgNy41VjIuNzR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZsYWc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGQgPSBmdW5jdGlvbiBFdWlJY29uRm9sZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTQuMTkyTDcuNTMgMi40OWEuNjcuNjcgMCAwMC45NDIgMEwxMC44Ni4xOTJhLjY3Ny42NzcgMCAwMS45NDQgMCAuNjUuNjUgMCAwMTAgLjkzbC0yLjM4OCAyLjNhMi4wMiAyLjAyIDAgMDEtMi44MzIgMGwtMi4zODgtMi4zYS42NS42NSAwIDAxMC0uOTMuNjc3LjY3NyAwIDAxLjk0NCAwem0wIDE1LjYxNmwyLjM5LTIuMjk4YS42Ny42NyAwIDAxLjk0MiAwbDIuMzg5IDIuMjk4Yy4yNi4yNTYuNjg1LjI1Ni45NDQgMGEuNjUuNjUgMCAwMDAtLjkzbC0yLjM4OC0yLjNhMi4wMiAyLjAyIDAgMDAtMi44MzIgMGwtMi4zODggMi4zYS42NS42NSAwIDAwMCAuOTNjLjI2LjI1Ni42ODMuMjU2Ljk0NCAwek0xNiA2SDB2NGgxNlY2ek0xIDlWN2gxNHYySDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGRlckNoZWNrID0gZnVuY3Rpb24gRXVpSWNvbkZvbGRlckNoZWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMkgxdjExaDYuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMDExIDF2My40MTZhNC45NjIgNC45NjIgMCAwMC0xLS4zMTZWNEg3LjEyNUExLjEyNSAxLjEyNSAwIDAxNiAyLjg3NVYyem0xMCAxMGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMDEwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAxLS43MDggMGwtMS0xYS41LjUgMCAwMS43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMDEuNzA4IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGRlckNoZWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Gb2xkZXJDbG9zZWQgPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyQ2xvc2VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAySDJ2MTFoMTJWNEg4LjEyNUExLjEyNSAxLjEyNSAwIDAxNyAyLjg3NVYyem0uMjUtMWEuNzUuNzUgMCAwMS43NS43NXYxLjEyNWMwIC4wNjkuMDU2LjEyNS4xMjUuMTI1SDE0YTEgMSAwIDAxMSAxdjlhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoNS4yNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyQ2xvc2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDkuNWwuODI2LTMuNzE3QTEgMSAwIDAxMi44MDIgNUgxM1Y0SDcuMTI1QTEuMTI1IDEuMTI1IDAgMDE2IDIuODc1VjJIMXY3LjV6bS4yNDcgMy41SDcuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMDExIDF2MWguNzUzYTEgMSAwIDAxLjk3NyAxLjIxN2wtLjQ0NyAyLjAxMWE1LjAxNSA1LjAxNSAwIDAwLS44ODctLjYxOEwxNC43NTMgNkgyLjgwM2wtMS41NTYgN3pNMTYgMTJhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tNCAuNWEuNTc3LjU3NyAwIDAxLS41Ny0uNDk1bC0uMjktMi4wMTVhLjg2Ny44NjcgMCAxMTEuNzE4IDBsLS4yODggMi4wMTVhLjU3Ny41NzcgMCAwMS0uNTcuNDk1em0wIDIuNWExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyRXhjbGFtYXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGRlck9wZW4gPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyT3BlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgOS41bC44MjYtMy43MTdBMSAxIDAgMDEyLjgwMiA1SDEzVjRINy4xMjVBMS4xMjUgMS4xMjUgMCAwMTYgMi44NzVWMkgxdjcuNXptLjI0NyAzLjVoMTEuOTVsMS41NTYtN0gyLjgwM2wtMS41NTYgN3pNMTMgMTRIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMDExIDF2MWguNzUzYTEgMSAwIDAxLjk3NyAxLjIxN2wtMS41NTYgN2ExIDEgMCAwMS0uOTc2Ljc4M0gxM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyT3BlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRnJhbWVOZXh0ID0gZnVuY3Rpb24gRXVpSWNvbkZyYW1lTmV4dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMmExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMTAyIDBWM2ExIDEgMCAwMC0xLTF6bTUuMTQ2LjIybDcuMiA0LjU4MWExLjQyNSAxLjQyNSAwIDAxMCAyLjM5OGwtNy4yIDQuNTgxQzcuMjEgMTQuMzc1IDYgMTMuNjkyIDYgMTIuNTgxVjMuNDJjMC0xLjExMiAxLjIxLTEuNzk1IDIuMTQ2LTEuMnpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZyYW1lTmV4dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRnJhbWVQcmV2aW91cyA9IGZ1bmN0aW9uIEV1aUljb25GcmFtZVByZXZpb3VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgMmExIDEgMCAwMTEgMXYxMGExIDEgMCAxMS0yIDBWM2ExIDEgMCAwMTEtMXptLTUuMTQ2LjIybC03LjIgNC41ODFhMS40MjUgMS40MjUgMCAwMDAgMi4zOThsNy4yIDQuNTgxYy45MzYuNTk1IDIuMTQ2LS4wODggMi4xNDYtMS4xOTlWMy40MmMwLTEuMTExLTEuMjEtMS43OTQtMi4xNDYtMS4xOTl6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GcmFtZVByZXZpb3VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GdWxsU2NyZWVuRXhpdCA9IGZ1bmN0aW9uIEV1aUljb25GdWxsU2NyZWVuRXhpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgN1YzaDF2M2gzdjFIOXpNNyA3SDNWNmgzVjNoMXY0em0yIDJoNHYxaC0zdjNIOVY5ek03IDl2NEg2di0zSDNWOWg0ek0wIDEuOTk0QzAgLjg5My44OTUgMCAxLjk5NCAwaDEyLjAxMkMxNS4xMDcgMCAxNiAuODk1IDE2IDEuOTk0djEyLjAxMkExLjk5NSAxLjk5NSAwIDAxMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMDEwIDE0LjAwNlYxLjk5NHptMSAwdjEyLjAxMmMwIC41NDguNDQ2Ljk5NC45OTQuOTk0aDEyLjAxMmEuOTk1Ljk5NSAwIDAwLjk5NC0uOTk0VjEuOTk0QS45OTUuOTk1IDAgMDAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAwMSAxLjk5NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnVsbFNjcmVlbkV4aXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBFdWlJY29uRnVsbFNjcmVlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDN2NGgtMVY0SDlWM2g0ek0zIDNoNHYxSDR2M0gzVjN6bTEwIDEwSDl2LTFoM1Y5aDF2NHpNMyAxM1Y5aDF2M2gzdjFIM3pNMCAxLjk5NEMwIC44OTMuODk1IDAgMS45OTQgMGgxMi4wMTJDMTUuMTA3IDAgMTYgLjg5NSAxNiAxLjk5NHYxMi4wMTJBMS45OTUgMS45OTUgMCAwMTE0LjAwNiAxNkgxLjk5NEExLjk5NSAxLjk5NSAwIDAxMCAxNC4wMDZWMS45OTR6bTEgMHYxMi4wMTJjMCAuNTQ4LjQ0Ni45OTQuOTk0Ljk5NGgxMi4wMTJhLjk5NS45OTUgMCAwMC45OTQtLjk5NFYxLjk5NEEuOTk1Ljk5NSAwIDAwMTQuMDA2IDFIMS45OTRBLjk5NS45OTUgMCAwMDEgMS45OTR6XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GdWxsU2NyZWVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25GdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDIuMjI2djIuMjE4Yy0uMzU5LS4xNDMtLjg0NS0uMjE4LTEuMzE1LS4yMTgtMS4wNTkgMC0xLjYzMS41MTktMS44MDIgMS41NjVsLS4xNjguOTM3aDIuNzk4djIuMTU5SDkuNDFsLS4zMTMgMS42NzRDOC42OTYgMTIuOTg3IDcuMjYxIDE0IDQuNzg1IDE0Yy0uNzE4IDAtMS4zNS0uMDkyLTEuNzg1LS4yNTF2LTIuMjQzYy40MTguMTc2LjkwNS4yNjggMS4zODMuMjY4IDEuMDA4IDAgMS41NDYtLjQzNSAxLjcyNS0xLjUyM2wuMjQtMS4zNjRIMy43ODdWNi43MjhoMi44MTJsLjI4OC0xLjI2NEM3LjI4NiAzLjA3MSA4LjY2MiAyIDExLjM1MiAyYy41OTggMCAxLjMwNi4xIDEuNjQ4LjIyNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkdlYXIgPSBmdW5jdGlvbiBFdWlJY29uR2VhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS4xNjQgMTAuMzI5TDEuODcgOCAuMTYzIDUuNjdjLjE4LS42MDEuNDMtMS4xOS43NTgtMS43NTdhOC4xOTcgOC4xOTcgMCAwMTEuMTQyLTEuNTM1bDIuODcyLjMxM0w2LjA5OS4wNWE4LjE2NiA4LjE2NiAwIDAxMy44LS4wMDNsMS4xNjYgMi42NDQgMi44NzItLjMxM2E4LjE2NiA4LjE2NiAwIDAxMS44OTkgMy4yOTNMMTQuMTMgOGwxLjcwNiAyLjMzYy0uMTguNjAxLS40MyAxLjE5LS43NTggMS43NTdhOC4xOTcgOC4xOTcgMCAwMS0xLjE0MiAxLjUzNWwtMi44NzItLjMxMy0xLjE2NCAyLjY0MWE4LjE2NiA4LjE2NiAwIDAxLTMuOC4wMDNsLTEuMTY2LTIuNjQ0LTIuODcyLjMxM2E4LjE2NiA4LjE2NiAwIDAxLTEuODk5LTMuMjkzem00LjY2MyAxLjk4NmExIDEgMCAwMTEuMDIzLjU5MWwuOTU3IDIuMTdjLjc5LjEzNCAxLjU5Ny4xMzIgMi4zODctLjAwMWwuOTU2LTIuMTY5YTEgMSAwIDAxMS4wMjMtLjU5bDIuMzU4LjI1NmE3LjIzIDcuMjMgMCAwMDEuMTk0LTIuMDY4bC0xLjQwMS0xLjkxM2ExIDEgMCAwMTAtMS4xODJsMS40LTEuOTEyYTcuMTY1IDcuMTY1IDAgMDAtMS4xOTItMi4wNjlsLTIuMzU5LjI1N2ExIDEgMCAwMS0xLjAyMy0uNTkxTDkuMTkzLjkyNGE3LjE2NSA3LjE2NSAwIDAwLTIuMzg3LjAwMUw1Ljg1IDMuMDk0YTEgMSAwIDAxLTEuMDIzLjU5bC0yLjM1OC0uMjU2YTcuMjMgNy4yMyAwIDAwLTEuMTk0IDIuMDY4bDEuNDAxIDEuOTEzYTEgMSAwIDAxMCAxLjE4MmwtMS40IDEuOTEyYy4yOC43NTEuNjgxIDEuNDUgMS4xOTIgMi4wNjlsMi4zNTktLjI1N3pNOCAxMWEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC0xYTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HZWFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HbGFzc2VzID0gZnVuY3Rpb24gRXVpSWNvbkdsYXNzZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjAzNSA5QTMuNSAzLjUgMCAwMTE1IDcuMDVWNC41YzAtMS4wNzItLjY0OC0xLjcyLTIuMDk4LTIuMDFhLjUuNSAwIDAxLjE5Ni0uOThDMTQuOTgxIDEuODg2IDE2IDIuOTA1IDE2IDQuNXY0LjI1YzAgLjA3Mi0uMDE1LjE0LS4wNDMuMjAyQTMuNSAzLjUgMCAxMTkuMDM1IDEwaC0yLjA3QTMuNSAzLjUgMCAxMS4wNDMgOC45NTIuNDk4LjQ5OCAwIDAxMCA4Ljc1VjQuNWMwLTEuNTk1IDEuMDE5LTIuNjE0IDIuOTAyLTIuOTlhLjUuNSAwIDAxLjE5Ni45OEMxLjY0OCAyLjc4IDEgMy40MjggMSA0LjV2Mi41NUEzLjUgMy41IDAgMDE2Ljk2NSA5aDIuMDd6TTMuNSAxMmEyLjUgMi41IDAgMTAwLTUgMi41IDIuNSAwIDAwMCA1em05IDBhMi41IDIuNSAwIDEwMC01IDIuNSAyLjUgMCAwMDAgNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR2xhc3NlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uR2xvYmUgPSBmdW5jdGlvbiBFdWlJY29uR2xvYmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjAxOSA4YTYuNDYyIDYuNDYyIDAgMDAxLjAwMyAzaDIuMzgyYTE0LjQ2OSAxNC40NjkgMCAwMS0uMzk2LTNoLTIuOTl6bTAtMWgyLjk4OWMuMDMzLTEuMDc4LjE3Mi0yLjA5NC4zOTYtM0gyLjAyMmE2LjQ2MiA2LjQ2MiAwIDAwLTEuMDAzIDN6TTEzLjk4IDhoLTIuOTg5YTE0LjQ2OSAxNC40NjkgMCAwMS0uMzk2IDNoMi4zODJhNi40NjIgNi40NjIgMCAwMDEuMDAzLTN6bTAtMWE2LjQ2MiA2LjQ2MiAwIDAwLTEuMDAzLTNoLTIuMzgyYy4yMjQuOTA2LjM2MyAxLjkyMi4zOTYgM2gyLjk5ek01LjAwOCA4Yy4wMzcgMS4xMDcuMTk1IDIuMTI3LjQyOSAzaDQuMTI2Yy4yMzQtLjg3My4zOTItMS44OTMuNDI5LTNINS4wMDh6bTAtMWg0Ljk4NGExMy40MjIgMTMuNDIyIDAgMDAtLjQyOS0zSDUuNDM3YTEzLjQyMiAxMy40MjIgMCAwMC0uNDI5IDN6TS4wMTYgOEgwVjdoLjAxNmE3LjUgNy41IDAgMDExNC45NjggMEgxNXYxaC0uMDE2QTcuNSA3LjUgMCAwMS4wMTYgOHptMi43OTQgNGE2LjUwMSA2LjUwMSAwIDAwMi43MTcgMS42OTVBNy4zMTUgNy4zMTUgMCAwMTQuNyAxMkgyLjgxem05LjM4IDBIMTAuM2MtLjIzLjY1Ny0uNTEgMS4yMy0uODI3IDEuNjk1QTYuNTAxIDYuNTAxIDAgMDAxMi4xOSAxMnptLTYuNDI4IDBjLjQ4NCAxLjI0IDEuMTMyIDIgMS43MzggMiAuNjA2IDAgMS4yNTQtLjc2IDEuNzM4LTJINS43NjJ6TTIuODEgM0g0LjdjLjIzLS42NTcuNTEtMS4yMy44MjctMS42OTVBNi41MDEgNi41MDEgMCAwMDIuODEgM3ptOS4zOCAwYTYuNTAxIDYuNTAxIDAgMDAtMi43MTctMS42OTVjLjMxNy40NjUuNTk3IDEuMDM4LjgyNyAxLjY5NWgxLjg5ek01Ljc2MiAzaDMuNDc2QzguNzU0IDEuNzYgOC4xMDYgMSA3LjUgMWMtLjYwNiAwLTEuMjU0Ljc2LTEuNzM4IDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdsb2JlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HcmFiID0gZnVuY3Rpb24gRXVpSWNvbkdyYWIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuNSA2Yy4yNzYgMCAuNS4yMzIuNS41IDAgLjI3Ni0uMjI5LjUtLjUuNWgtMTFhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNzYuMjI5LS41LjUtLjVoMTF6bTAgM2MuMjc2IDAgLjUuMjMyLjUuNSAwIC4yNzYtLjIyOS41LS41LjVoLTExYS41MDUuNTA1IDAgMDEtLjUtLjVjMC0uMjc2LjIyOS0uNS41LS41aDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HcmFiOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HcmFiSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIEV1aUljb25HcmFiSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDIuNWMwLS4yNzYuMjMyLS41LjUtLjUuMjc2IDAgLjUuMjI5LjUuNXYxMWMwIC4yNzYtLjIzMi41LS41LjVhLjUwMy41MDMgMCAwMS0uNS0uNXYtMTF6bTMgMGMwLS4yNzYuMjMyLS41LjUtLjUuMjc2IDAgLjUuMjI5LjUuNXYxMWMwIC4yNzYtLjIzMi41LS41LjVhLjUwMy41MDMgMCAwMS0uNS0uNXYtMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyYWJIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HcmlkID0gZnVuY3Rpb24gRXVpSWNvbkdyaWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDVWMWg0djRIMXptMy0xVjJIMnYyaDJ6bTIgMVYxaDR2NEg2em0zLTFWMkg3djJoMnptMiAxVjFoNHY0aC00em0xLTFoMlYyaC0ydjJ6TTEgMTBWNmg0djRIMXptMy0xVjdIMnYyaDJ6bTIgMVY2aDR2NEg2em0zLTFWN0g3djJoMnptMiAxVjZoNHY0aC00em0zLTFWN2gtMnYyaDJ6TTEgMTV2LTRoNHY0SDF6bTEtMWgydi0ySDJ2MnptNCAxdi00aDR2NEg2em0xLTFoMnYtMkg3djJ6bTQgMXYtNGg0djRoLTR6bTEtMWgydi0yaC0ydjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyaWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkhlYXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkhlYXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy40MDIgMy4wOThhMy43NSAzLjc1IDAgMDAtNS4zMDQgNS4zMDRsNS41NTggNS4yN0w4IDE0bDUuODkyLTUuNTg4YTMuNzUgMy43NSAwIDEwLTUuMjk0LTUuMzEzTDggMy42OTdsLS41OTgtLjU5OXpNMi43OTYgNy42ODVhMi43NDcgMi43NDcgMCAwMS4wMS0zLjg4IDIuNzUgMi43NSAwIDAxMy44ODkgMEw4IDUuMTExbDEuMzA1LTEuMzA2YTIuNzUgMi43NSAwIDExMy44OSAzLjg5TDggMTIuNjIgMi43OTYgNy42ODV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkhlYXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25IZWF0bWFwID0gZnVuY3Rpb24gRXVpSWNvbkhlYXRtYXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA5YTMgMyAwIDExMCA2IDMgMyAwIDAxMC02em0wIDFhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6TTQgMmEyIDIgMCAxMTAgNCAyIDIgMCAwMTAtNHptMCAxYTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0wIDVhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMWEzIDMgMCAxMDAgNiAzIDMgMCAwMDAtNnptOC05YTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0wIDFhMyAzIDAgMTAwIDYgMyAzIDAgMDAwLTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkhlYXRtYXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkhlbHAgPSBmdW5jdGlvbiBFdWlJY29uSGVscChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy42IDEyLjE4NmwtMS4zNTctMS4zNThjLS4wMjUtLjAyNS0uMDU4LS4wMzQtLjA4NC0uMDU2LjUzLS43OTQuODQtMS43NDYuODQtMi43NzNhNC45NzcgNC45NzcgMCAwMC0uODQtMi43NzJjLjAyNi0uMDIuMDU5LS4wMy4wODQtLjA1NkwxMy42IDMuODEzYTYuOTYgNi45NiAwIDAxMCA4LjM3M3pNOCAxNUE2Ljk1NiA2Ljk1NiAwIDAxMy44MTQgMTMuNmwxLjM1OC0xLjM1OGMuMDI1LS4wMjUuMDM0LS4wNTcuMDU1LS4wODRDNi4wMiAxMi42ODggNi45NzQgMTMgOCAxM2E0Ljk3OCA0Ljk3OCAwIDAwMi43NzMtLjg0Yy4wMi4wMjYuMDMuMDU4LjA1Ni4wODNsMS4zNTcgMS4zNThBNi45NTYgNi45NTYgMCAwMTggMTV6bS01LjYwMS0yLjgxM2E2Ljk2MyA2Ljk2MyAwIDAxMC04LjM3M2wxLjM1OSAxLjM1OGMuMDI0LjAyNS4wNTcuMDM1LjA4NC4wNTZBNC45NyA0Ljk3IDAgMDAzIDhjMCAxLjAyNy4zMSAxLjk4Ljg0MiAyLjc3My0uMDI3LjAyMi0uMDYuMDMxLS4wODQuMDU2bC0xLjM2IDEuMzU4em01LjYtLjE4N0E0IDQgMCAxMTggNGE0IDQgMCAwMTAgOHpNOCAxYzEuNTczIDAgMy4wMTkuNTI1IDQuMTg3IDEuNGwtMS4zNTcgMS4zNThjLS4wMjUuMDI1LS4wMzUuMDU3LS4wNTYuMDg0QTQuOTc5IDQuOTc5IDAgMDA4IDNhNC45NzkgNC45NzkgMCAwMC0yLjc3My44NDJjLS4wMjEtLjAyNy0uMDMtLjA1OS0uMDU1LS4wODRMMy44MTQgMi40QTYuOTU3IDYuOTU3IDAgMDE4IDF6bTAtMWE4LjAwMSA4LjAwMSAwIDEwLjAwMyAxNi4wMDJBOC4wMDEgOC4wMDEgMCAwMDggMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSGVscDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSG9tZSA9IGZ1bmN0aW9uIEV1aUljb25Ib21lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xMyAxLjIyOWw1LjUgNC40N2ExIDEgMCAwMS4zNy43NzdWMTRhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjYuNDc2YTEgMSAwIDAxLjM3LS43NzZsNS41LTQuNDcxYTEgMSAwIDAxMS4yNiAwek0xMyA2LjQ3Nkw3LjUgMi4wMDUgMiA2LjQ3NVYxNGgxMVY2LjQ3NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSG9tZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSUluQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvbklJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMTEuNTA4TDcuNDY4IDhINi4yNVY3aDIuNDAxbC4wMyAzLjUwOEg5Ljh2MUg3LjV6bS0uMjUtNi4yMDJhLjgzLjgzIDAgMDEuMjA3LS41NzdjLjEzNy0uMTUzLjMzNC0uMjI5LjU5LS4yMjkuMjU2IDAgLjQ1NC4wNzYuNTk0LjIzLjE0LjE1Mi4yMDkuMzQ1LjIwOS41NzYgMCAuMjI4LS4wNy40MTctLjIxLjU2OC0uMTQuMTUtLjMzNy4yMjYtLjU5My4yMjYtLjI1NiAwLS40NTMtLjA3NS0uNTktLjIyNmEuODEuODEgMCAwMS0uMjA3LS41Njh6TTggMTNBNSA1IDAgMTA4IDNhNSA1IDAgMDAwIDEwem0wIDFBNiA2IDAgMTE4IDJhNiA2IDAgMDEwIDEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkltYWdlID0gZnVuY3Rpb24gRXVpSWNvbkltYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA1YTIgMiAwIDExLTQgMCAyIDIgMCAwMTQgMHptOS00YTEgMSAwIDAxMSAxdjEyYTEgMSAwIDAxLTEgMUgxYTEgMSAwIDAxLTEtMVYyYTEgMSAwIDAxMS0xem0tMy40NDggNi4xMzRsLTMuNzYgMi43NjlhLjUuNSAwIDAxLS40MzYuMDc3bC0uMDg3LS4wMzQtMS43MTMtLjg3TDEgMTEuOFYxNGgxNFY5Ljc1MWwtMy40NDgtMi42MTd6TTE1IDJIMXY4LjYzNWw0LjI4LTIuNTU4YS41LjUgMCAwMS4zODktLjA1NGwuMDk0LjAzNyAxLjY4NC44NTUgMy44MTMtMi44MDdhLjUuNSAwIDAxLjUyLS4wNDVsLjA3OS4wNUwxNSA4LjQ5NVYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbWFnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW1wb3J0ID0gZnVuY3Rpb24gRXVpSWNvbkltcG9ydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTAuMTE0bDEuODUtMS45NDNhLjUyLjUyIDAgMDEuNzcgMGMuMjE0LjIyOC4yMTQuNiAwIC44MjlsLTEuOTUgMi4wNWExLjU1MiAxLjU1MiAwIDAxLTIuMzEgMEw1LjQxIDlhLjYxNy42MTcgMCAwMTAtLjgyOS41Mi41MiAwIDAxLjc3IDBMOCAxMC4wODJWMS41NTZDOCAxLjI0OSA4LjIyNCAxIDguNSAxcy41LjI0OS41LjU1NnY4LjU1OHpNNC4xOCA2YS45OTMuOTkzIDAgMDAtLjk3Mi44MDRsLTEuMTg5IDZBLjk5NS45OTUgMCAwMDIuOTkxIDE0aDExLjAxOGExIDEgMCAwMC45NzItMS4xOTZsLTEuMTktNmEuOTkzLjk5MyAwIDAwLS45Ny0uODA0SDQuMTh6TTYgNXYxaDVWNWgxLjgyNWMuOTQ2IDAgMS43Ni42NzMgMS45NDYgMS42MDhsMS4xOSA2QTIgMiAwIDAxMTQuMDE2IDE1SDIuOTg0YTEuOTkyIDEuOTkyIDAgMDEtMS45NDUtMi4zOTJsMS4xOS02QzIuNDE0IDUuNjczIDMuMjI5IDUgNC4xNzQgNUg2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbXBvcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkluZGV4Q2xvc2UgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhDbG9zZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjZoLTFWMnpNNSA1aDUuOTk5VjRINXYxek0zIDVWNGgxdjFIM3ptMiAzVjdoM3YxSDV6TTMgOFY3aDF2MUgzem0yIDN2LTFoMnYxSDV6bTUuNS0xLjIwN0w5LjA4NiA4LjM3OWwtLjcwNy43MDdMOS43OTMgMTAuNWwtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNC0xLjQxNCAxLjQxNCAxLjQxNC43MDctLjcwNy0xLjQxNC0xLjQxNCAxLjQxNC0xLjQxNC0uNzA3LS43MDdMMTAuNSA5Ljc5M3pNMyAxMXYtMWgxdjFIM3ptNy41LTVhNC41IDQuNSAwIDExMCA5IDQuNSA0LjUgMCAwMTAtOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhDbG9zZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhFZGl0ID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4RWRpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg0djFIMVYxaDEydjVoLTFWMnpNNSA1aDUuOTk5VjRINXYxek0zIDVWNGgxdjFIM3ptMiAzVjdoNnYxSDV6TTMgOFY3aDF2MUgzem0yIDN2LTFoM3YxSDV6bS0yIDB2LTFoMXYxSDN6bTQuNTAyIDEuNDFMMTIuOTEzIDcgMTUgOS4wODdsLTUuNDEgNS40MUw3IDE1bC41MDItMi41OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhFZGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleEZsdXNoID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4Rmx1c2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuNTE2IDlIMTAuNWEuNS41IDAgMDEwLTFoNC4wMTZMMTMuMTEgNS45NDhjLS4xNzEtLjI1Mi0uMTM3LS42Mi4wNzktLjgyMS4yMTctLjIuNTMxLS4xNTkuNzAzLjA5MmwyIDIuOTE2YS42NDguNjQ4IDAgMDEuMTA4LjM5Ny42NDMuNjQzIDAgMDEtLjEwOC4zMzJsLTIgMi45MThBLjQ3OC40NzggMCAwMTEzLjUgMTJhLjQ1Ny40NTcgMCAwMS0uMzEyLS4xMjdjLS4yMTYtLjIwMi0uMjUtLjU3LS4wNzktLjgyTDE0LjUxNiA5ek0zIDE1SDFhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoNy44Yy4yNzQgMCAuNTM3LjExMy43MjYuMzEybDIuMiAyLjQyOGMuMTc2LjE4Ni4yNzQuNDMzLjI3NC42ODlWN2gtMVY1SDguNWEuNS41IDAgMDEtLjUtLjVWMkgzdjEyaDh2LTRoMXY0YTEgMSAwIDAxLTEgMUgzem0tMS0xVjJIMXYxMmgxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleEZsdXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleE1hcHBpbmcgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhNYXBwaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA4SDQuOTE1YTEuNSAxLjUgMCAxMTAtMUg4VjIuNUExLjUgMS41IDAgMDE5LjUgMWgyLjU4NWExLjUgMS41IDAgMTEwIDFIOS41YS41LjUgMCAwMC0uNS41djEwYS41LjUgMCAwMC41LjVoMi41ODVhMS41IDEuNSAwIDExMCAxSDkuNUExLjUgMS41IDAgMDE4IDEyLjVWOHpNMy41IDNhMS41IDEuNSAwIDExMC0zIDEuNSAxLjUgMCAwMTAgM3ptMCAxMmExLjUgMS41IDAgMTEwLTMgMS41IDEuNSAwIDAxMCAzem0xMC02YTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4TWFwcGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhPcGVuID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4T3BlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjZoLTFWMnpNNSA1aDUuOTk5VjRINXYxek0zIDVWNGgxdjFIM3ptMiAzVjdoM3YxSDV6TTMgOFY3aDF2MUgzem0yIDN2LTFoMnYxSDV6bTUtMUg4djFoMnYyaDF2LTJoMnYtMWgtMlY4aC0xdjJ6bS03IDF2LTFoMXYxSDN6bTcuNS01YTQuNSA0LjUgMCAxMTAgOSA0LjUgNC41IDAgMDEwLTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4T3BlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhSdW50aW1lID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4UnVudGltZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjYuODM5bC0xLS43MDdWMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTF2LTFINXYxaDN6bTAtMy4wNTVjMC0uMzQyLjA4Mi0uNjY0LjIzLS45NDVINXYxaDN2LS4wNTV6TTUgNWg1Ljk5OVY0SDV2MXpNMyA0djFoMVY0SDN6bTAgM3YxaDFWN0gzem0wIDN2MWgxdi0xSDN6bTExLjYwNy4ybC00LjMyLTMuMDU1QzkuNzI3IDYuNzUgOSA3LjIwNCA5IDcuOTQ1djYuMTA4YzAgLjc0LjcyNiAxLjE5NiAxLjI4Ny44bDQuMzItMy4wNTVjLjUyNC0uMzcuNTI0LTEuMjI4IDAtMS41OTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4UnVudGltZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhTZXR0aW5ncyA9IGZ1bmN0aW9uIEV1aUljb25JbmRleFNldHRpbmdzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA1aDUuOTk5VjRINXYxek0zIDVoMVY0SDN2MXptMCAzaDFWN0gzdjF6bTYuMDIyLTFsLS4xNS4zMzMtLjczNy0uMDc4LS40NjctLjA1LS4zMy4zNDJBNS4xMyA1LjEzIDAgMDA2Ljk0OCA4SDVWN2g0LjAyMnptLTMuMDA1IDNMNiAxMC4wNTZsLjMwNi40MTEuMzk5LjUzM0g1di0xaDEuMDE3ek0zIDExaDF2LTFIM3YxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNy4wNWwtLjE2Mi0uMzU5LS4yLS40NDctLjQ3LS4xMUE1LjAxOSA1LjAxOSAwIDAwMTIgNi4wOThWMkgydjExaDQuMzZjLjE1Ny4zNTQuMzU1LjY5LjU5IDFIMVYxaDEydjYuMDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4wMDQgN2MuMzIyIDAgLjY0Ni4wMzYuOTY2LjEwOWwuNTk1IDEuMjkzIDEuNDY1LS4xNTJjLjQ1Ny40NjIuNzg2IDEuMDE2Ljk2OSAxLjYxbC0uODcgMS4xNC44NzEgMS4xNDFhMy45NCAzLjk0IDAgMDEtLjM4Ny44NTkgNC4wNTggNC4wNTggMCAwMS0uNTgzLjc1bC0xLjQ2NS0uMTUyLS41OTQgMS4yOTJhNC4zNyA0LjM3IDAgMDEtMS45NDEuMDAxbC0uNTk0LTEuMjkzLTEuNDY2LjE1MmEzLjk1NCAzLjk1NCAwIDAxLS45NjktMS42MWwuODctMS4xNEw3IDkuODZhMy45NDcgMy45NDcgMCAwMS45Ny0xLjYxbDEuNDY2LjE1Mi41OTMtMS4yOTJhNC4zNyA0LjM3IDAgMDEuOTc1LS4xMXpNMTEgMTJhMSAxIDAgMTAuMDAyLTEuOTk4QTEgMSAwIDAwMTEgMTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4U2V0dGluZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbklucHV0T3V0cHV0ID0gZnVuY3Rpb24gRXVpSWNvbklucHV0T3V0cHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMTMuOTk5di0yLjk5aDFWMTVIMFYxaDExdjMuOTk5aC0xVjIuMDAxSDF2MTEuOTk4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDEwVjlIMTF2MXpNMTMgOS41bDMtMy0zLTN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgNi41djZsLTMtM3pNNyA3VjZoNi41djF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklucHV0T3V0cHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbnNwZWN0ID0gZnVuY3Rpb24gRXVpSWNvbkluc3BlY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4zNjMgMTQuNjU4YS41LjUgMCAxMS0uNzEzLjdsLTIuOTctMy4wMjNhLjUuNSAwIDAxLjAwMS0uN0EzLjkgMy45IDAgMTA4LjkgMTIuOGEuNS41IDAgMTEwIC45OTkgNC45IDQuOSAwIDExMy44MjEtMS44MzNsMi42NDIgMi42OTF6TTMuMDk0IDEzYS41LjUgMCAxMTAgMUgyLjVBMi41IDIuNSAwIDAxMCAxMS41di05QTIuNSAyLjUgMCAwMTIuNSAwaDlBMi41IDIuNSAwIDAxMTQgMi41di41OTlhLjUuNSAwIDExLTEgMFYyLjVBMS41IDEuNSAwIDAwMTEuNSAxaC05QTEuNSAxLjUgMCAwMDEgMi41djlBMS41IDEuNSAwIDAwMi41IDEzaC41OTR6TTIuNSAzYS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTIgMGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0yIDBhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptLTQgMmEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0yIDBhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptLTIgMWEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0wIDNhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptNi02YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTIgMGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0tOCA4YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluc3BlY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkludmVydCA9IGZ1bmN0aW9uIEV1aUljb25JbnZlcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDEzLjI1YTUuMjUgNS4yNSAwIDEwMC0xMC41IDUuMjUgNS4yNSAwIDAwMCAxMC41ek04IDE0QTYgNiAwIDExOCAyYTYgNiAwIDAxMCAxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMmE2IDYgMCAxMDAgMTJWMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW52ZXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JcCA9IGZ1bmN0aW9uIEV1aUljb25JcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMmg4em0tMiAzSDh2NmgxVjkuMDE0aDFjLjI5OC0uMDEzIDIgMCAyLTIuMDE4IDAtMS43NC0xLjMxNC0xLjk1Mi0xLjgyNS0xLjk4N0wxMCA1ek02IDVINXY2aDFWNXptNCAuOTg0Yy42NjcgMCAxIC4zMzYgMSAxLjAwOEMxMSA3LjY2NCAxMC42NjcgOCAxMCA4SDlWNS45ODR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LZXlib2FyZCA9IGZ1bmN0aW9uIEV1aUljb25LZXlib2FyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMCAzaDE2djExSDBWM3ptMTUgMTBWNEgxdjloMTR6TTIgNWgydjFIMlY1em0yIDd2LTFIMnYxaDJ6bTEwLTF2MWgtMnYtMWgyem0tMyAxdi0xSDV2MWg2ek01IDVoMXYxSDVWNXpNMyA3SDJ2MWgxVjd6bTMgMGgxdjFINlY3ek0zIDlIMnYxaDFWOXptMyAwaDF2MUg2Vjl6bTItNEg3djFoMVY1ek00IDdoMXYxSDRWN3ptNSAwSDh2MWgxVjd6bTEgMGgxdjFoLTFWN3pNNSA5SDR2MWgxVjl6bTMgMGgxdjFIOFY5em0zIDBoLTF2MWgxVjl6TTkgNWgxdjFIOVY1em0zIDBoLTF2MWgxVjV6bTEgMGgxdjFoLTFWNXptMSAyaC0ydjNoMlY3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LZXlib2FyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3FsRmllbGQgPSBmdW5jdGlvbiBFdWlJY29uS3FsRmllbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTAsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTBcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDlhNSA1IDAgMTEwLTggNSA1IDAgMTEwIDh6bS43NS0uNjkyYTQgNCAwIDEwMC02LjYxNUE0Ljk4MSA0Ljk4MSAwIDAxMTAgNWE0Ljk4MSA0Ljk4MSAwIDAxLTEuMjUgMy4zMDh6TTQuMTMzIDhWNS41NTloMi40OTZ2LS42MjVINC4xMzNWMi45OTZoMi43MTl2LS42MzNIMy40M1Y4aC43MDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbEZpZWxkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LcWxGdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25LcWxGdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgN0gzdjJoNHYybDMtMy0zLTN2MnpNNiA2VjVhMSAxIDAgMDExLjcwNy0uNzA3bDMgM2ExIDEgMCAwMTAgMS40MTRsLTMgM0ExIDEgMCAwMTYgMTF2LTFIM2ExIDEgMCAwMS0xLTFWN2ExIDEgMCAwMTEtMWgzem03LjUtM2EuNS41IDAgMDEuNS41djlhLjUuNSAwIDExLTEgMHYtOWEuNS41IDAgMDEuNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbE9wZXJhbmQgPSBmdW5jdGlvbiBFdWlJY29uS3FsT3BlcmFuZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjE5MiAxMC4xNDVsMi4yOTgtMS43OTJjLjI1OS0uMTk2LjI1OS0uNTA5IDAtLjcwNmwtMi4yOTgtMS43OTJjLS4yNTYtLjE5Ni0uMjU2LS41MTMgMC0uNzA4YS44MS44MSAwIDAxLjkzIDBsMi4zIDEuNzkxYy43NzIuNTkuNzcgMS41MzcgMCAyLjEyNGwtMi4zIDEuNzkxYS44MS44MSAwIDAxLS45MyAwYy0uMjU2LS4xOTUtLjI1Ni0uNTEyIDAtLjcwOHptLTYuMzg0LTQuMjlMMi41MSA3LjY0N2MtLjI1OS4xOTYtLjI1OS41MDkgMCAuNzA2bDIuMjk4IDEuNzkyYy4yNTYuMTk2LjI1Ni41MTMgMCAuNzA4YS44MS44MSAwIDAxLS45MyAwbC0yLjMtMS43OTFjLS43NzItLjU5LS43Ny0xLjUzNyAwLTIuMTI0bDIuMy0xLjc5MWEuODEuODEgMCAwMS45MyAwYy4yNTYuMTk1LjI1Ni41MTIgMCAuNzA4ek02LjUgNmgzYS41LjUgMCAwMTAgMWgtM2EuNS41IDAgMDEwLTF6bTAgM2gzYS41LjUgMCAwMTAgMWgtM2EuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbE9wZXJhbmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbFNlbGVjdG9yID0gZnVuY3Rpb24gRXVpSWNvbktxbFNlbGVjdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMmE0IDQgMCAxMDAtOCA0IDQgMCAwMDAgOHptMCAxQTUgNSAwIDExNSAzYTUgNSAwIDAxMCAxMHptNi0xYTQgNCAwIDEwMC04IDQgNCAwIDAwMCA4em0wIDFhNSA1IDAgMTEwLTEwIDUgNSAwIDAxMCAxMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsU2VsZWN0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbFZhbHVlID0gZnVuY3Rpb24gRXVpSWNvbktxbFZhbHVlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0YTUgNSAwIDExMCA4IDUgNSAwIDExMC04em0tLjc1LjY5MmE0IDQgMCAxMDAgNi42MTVBNC45ODEgNC45ODEgMCAwMTYgOGMwLTEuMjY4LjQ3Mi0yLjQyNiAxLjI1LTMuMzA4ek0xMS4zNDggMTFsMi4wNzgtNS42MzdoLS43MzlsLTEuNjU2IDQuNzI3aC0uMDYyTDkuMzEzIDUuMzYzaC0uNzM5TDEwLjY1MiAxMWguNjk2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxWYWx1ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3ViZXJuZXRlc05vZGUgPSBmdW5jdGlvbiBFdWlJY29uS3ViZXJuZXRlc05vZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDExLjQyVjQuNThMOCAxLjE1MiAyIDQuNTh2Ni44NGw2IDMuNDI4IDYtMy40Mjh6TTggMTZsNy00VjRMOCAwIDEgNHY4bDcgNHpNOCA0LjYwN2wzIDEuNzE0VjkuNjhsLTMgMS43MTQtMy0xLjcxNFY2LjMybDMtMS43MTR6bTQgMS4xMzR2NC41MThsLTQgMi4yODYtNC0yLjI4NlY1Ljc0MWw0LTIuMjg2IDQgMi4yODZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkt1YmVybmV0ZXNOb2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LdWJlcm5ldGVzUG9kID0gZnVuY3Rpb24gRXVpSWNvbkt1YmVybmV0ZXNQb2QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDUuMTUxdjYuMjY5bC01LjUgMy4xNDJWOC4yOUwxNCA1LjE1MXptLS41MDgtLjg2MUw4IDEuMTUyIDIuNTA4IDQuMjkgOCA3LjQyNGw1LjQ5Mi0zLjEzNHpNMiA1LjE1MWw1LjUgMy4xNHY2LjI3MkwyIDExLjQyVjUuMTV6TTE1IDEybC03IDQtNy00VjRsNy00IDcgNHY4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LdWJlcm5ldGVzUG9kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MYXllcnMgPSBmdW5jdGlvbiBFdWlJY29uTGF5ZXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yNzYgMS4wNTNhLjUuNSAwIDAxLjQ0OCAwbDYgM2EuNS41IDAgMDEwIC44OTRsLTYgM2EuNS41IDAgMDEtLjQ0OCAwbC02LTNhLjUuNSAwIDAxMC0uODk0bDYtM3pNMi42MTggNC41TDcuNSA2Ljk0MSAxMi4zODIgNC41IDcuNSAyLjA1OSAyLjYxOCA0LjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjA1MyA3LjI3NmEuNS41IDAgMDEuNjctLjIyM0w3LjUgOS45NGw1Ljc3Ni0yLjg4OGEuNS41IDAgMTEuNDQ4Ljg5NGwtNiAzYS41LjUgMCAwMS0uNDQ4IDBsLTYtM2EuNS41IDAgMDEtLjIyMy0uNjd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjcyNCAxMC4wNTNhLjUuNSAwIDEwLS40NDguODk0bDYgM2EuNS41IDAgMDAuNDQ4IDBsNi0zYS41LjUgMCAxMC0uNDQ4LS44OTRMNy41IDEyLjk0bC01Ljc3Ni0yLjg4OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGF5ZXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MZXR0ZXJpbmcgPSBmdW5jdGlvbiBFdWlJY29uTGV0dGVyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUgM2wzIDlIN0w2IDlIM2wtMSAzSDFsMy05aDF6bS0uNSAxLjVMNS42NjcgOEgzLjMzM0w0LjUgNC41em03Ljk5IDEuNjQ3QzEyLjE2IDYuMDA1IDExLjc2IDYgMTEuNSA2Yy0uMzU5IDAtMS4wMjIuMTc1LTEuNjMyLjgzOGwtLjczNi0uNjc2QzkuOTI5IDUuMjk0IDEwLjg1OSA1IDExLjUgNWguMDE2Yy4yNSAwIC44MzYgMCAxLjM2OS4yMjguMjgxLjEyLjU2OC4zMTMuNzgyLjYxNy4yMTYuMzA3LjMzMy42OTMuMzMzIDEuMTU1djVoLTF2LS4zNTRhMi4xMDEgMi4xMDEgMCAwMS0uMDY0LjAzOGMtLjU1NC4zMTctMS4xNjYuMzE2LTEuNDIuMzE2aC0uMDMyYy0uMjUgMC0uODM2IDAtMS4zNjgtLjIyOGExLjgxIDEuODEgMCAwMS0uNzgzLS42MTdDOS4xMTcgMTAuODQ4IDkgMTAuNDYyIDkgMTBjMC0uNDYyLjExNy0uODQ4LjMzMy0xLjE1NS4yMTQtLjMwNC41LS40OTYuNzgzLS42MTdDMTAuNjQ4IDggMTEuMjMzIDggMTEuNDg0IDhoLjAxNmMuMjU4IDAgLjY5LS4wMDMgMS4wNS0uMTA2YS44ODkuODg5IDAgMDAuMzY0LS4xNzljLjA1My0uMDUuMDg2LS4xMDguMDg2LS4yMTVWN2MwLS4yODgtLjA3LS40NjUtLjE1MS0uNThhLjgxNC44MTQgMCAwMC0uMzU4LS4yNzN6TTEzIDguOGMtLjA2LjAyMi0uMTE4LjA0LS4xNzUuMDU3QzEyLjMyIDkgMTEuNzYyIDkgMTEuNTEzIDlIMTEuNWMtLjI1OSAwLS42Ni4wMDUtLjk5LjE0N2EuODE0LjgxNCAwIDAwLS4zNTkuMjc0Yy0uMDguMTE0LS4xNTEuMjkxLS4xNTEuNTc5cy4wNy40NjUuMTUxLjU4YS44MTMuODEzIDAgMDAuMzU4LjI3M2MuMzMxLjE0Mi43MzIuMTQ3Ljk5MS4xNDcuMjU3IDAgLjYzLS4wMDguOTQtLjE4NC4yNTUtLjE0Ni41Ni0uNDYzLjU2LTEuMzE2di0uNzAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MZXR0ZXJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpbmVEYXNoZWQgPSBmdW5jdGlvbiBFdWlJY29uTGluZURhc2hlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjcwNyA0LjcwN2ExIDEgMCAxMS0xLjQxNC0xLjQxNGwyLTJhMSAxIDAgMTExLjQxNCAxLjQxNGwtMiAyem0tNi40MTQgNWExIDEgMCAwMDEuNDE0IDBsMi0yYTEgMSAwIDEwLTEuNDE0LTEuNDE0bC0yIDJhMSAxIDAgMDAwIDEuNDE0em0tNSA1YTEgMSAwIDAwMS40MTQgMGwyLTJhMSAxIDAgMTAtMS40MTQtMS40MTRsLTIgMmExIDEgMCAwMDAgMS40MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVEYXNoZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpbmVEb3R0ZWQgPSBmdW5jdGlvbiBFdWlJY29uTGluZURvdHRlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjUgM2ExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzek0xMSA1LjVhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6TTUuNSAxMWExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzem0tNCA0YTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVEb3R0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpbmVTb2xpZCA9IGZ1bmN0aW9uIEV1aUljb25MaW5lU29saWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjI5MyAxNC43MDdhMSAxIDAgMDAxLjQxNCAwbDEyLTEyYTEgMSAwIDEwLTEuNDE0LTEuNDE0bC0xMiAxMmExIDEgMCAwMDAgMS40MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVTb2xpZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTGluayA9IGZ1bmN0aW9uIEV1aUljb25MaW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy42NiAzLjgwM2EuNS41IDAgMTEtLjcwNi0uNzA3TDkuMjY4Ljc4YzEuMTg3LTEuMTg3IDMuMjQyLTEgNC41OTYuMzU0czEuNTQgMy40MDkuMzU0IDQuNTk2bC0zLjUzNiAzLjUzNmMtMS4xODcgMS4xODctMy4yNDIgMS00LjU5Ni0uMzU0YS41LjUgMCAxMS43MDctLjcwN2MuOTkuOTkgMi40MTcgMS4xMTkgMy4xODIuMzU0bDMuNTM2LTMuNTM2Yy43NjUtLjc2NS42MzUtMi4xOTMtLjM1NC0zLjE4Mi0uOTktLjk5LTIuNDE3LTEuMTE5LTMuMTgyLS4zNTRMNy42NjEgMy44MDN6bS0uMzIgNy4zOTJhLjUuNSAwIDExLjcwNy43MDdsLTIuMzE1IDIuMzE0Yy0xLjE4NyAxLjE4OC0zLjI0MiAxLTQuNTk2LS4zNTMtMS4zNTQtMS4zNTQtMS41NC0zLjQxLS4zNTMtNC41OTZMNC4zMTggNS43M2MxLjE4Ny0xLjE4NyAzLjI0Mi0xIDQuNTk2LjM1NGEuNS41IDAgMDEtLjcwNy43MDdjLS45ODktLjk5LTIuNDE2LTEuMTItMy4xODItLjM1NEwxLjQ5IDkuOTc0Yy0uNzY2Ljc2NS0uNjM2IDIuMTkzLjM1MyAzLjE4Mi45OS45ODkgMi40MTcgMS4xMTkgMy4xODIuMzUzbDIuMzE1LTIuMzE0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MaW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkxpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDRWM2gydjFIMnptNCAwVjNoOHYxSDZ6bTAgM1Y2aDh2MUg2em0wIDNWOWg4djFINnpNMiA3VjZoMnYxSDJ6bTAgM1Y5aDJ2MUgyem00IDN2LTFoOHYxSDZ6bS00IDB2LTFoMnYxSDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpc3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpc3RBZGQgPSBmdW5jdGlvbiBFdWlJY29uTGlzdEFkZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDExSDl2MWgydjJoMXYtMmgydi0xaC0yVjloLTF2MnpNNy43NTggOWE0LjUgNC41IDAgMTEtLjUwMiA0SDZ2LTFoMS4wMjdhNC41NDggNC41NDggMCAwMS4yMy0ySDZWOWgxLjc1OHpNMiA0VjNoMnYxSDJ6bTQgMFYzaDh2MUg2em0wIDNWNmg4djFINnpNMiA3VjZoMnYxSDJ6bTAgM1Y5aDJ2MUgyem0wIDN2LTFoMnYxSDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpc3RBZGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvY2sgPSBmdW5jdGlvbiBFdWlJY29uTG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNXYtLjhDNCAxLjg4IDUuNzkgMCA4IDBzNCAxLjg4IDQgNC4yVjVoMS4xNDNjLjQ3MyAwIC44NTcuNDQ4Ljg1NyAxdjljMCAuNTUyLS4zODQgMS0uODU3IDFIMi44NTdDMi4zODQgMTYgMiAxNS41NTIgMiAxNVY2YzAtLjU1Mi4zODQtMSAuODU3LTFINHpNMyAxNWgxMFY2SDN2OXptNS45OTgtMy43MDZMOS41IDEyLjVoLTNsLjUwMi0xLjIwNkExLjY0NCAxLjY0NCAwIDAxNi41IDEwLjFjMC0uODgzLjY3Mi0xLjYgMS41LTEuNnMxLjUuNzE3IDEuNSAxLjZjMCAuNDc1LS4xOTQuOTAxLS41MDIgMS4xOTR6TTExIDQuMzZDMTEgMi41MDQgOS42NTcgMSA4IDFTNSAyLjUwNCA1IDQuMzZWNWg2di0uNjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvY2tPcGVuID0gZnVuY3Rpb24gRXVpSWNvbkxvY2tPcGVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMTQzIDVjLjQ3MyAwIC44NTcuNDQ4Ljg1NyAxdjljMCAuNTUyLS4zODQgMS0uODU3IDFILjg1N0MuMzg0IDE2IDAgMTUuNTUyIDAgMTVWNmMwLS41NTIuMzg0LTEgLjg1Ny0xSDh2LS44QzggMS44OCA5Ljc5IDAgMTIgMHM0IDEuODggNCA0LjJWNWgtMXYtLjY0QzE1IDIuNTA0IDEzLjY1NyAxIDEyIDFTOSAyLjUwNCA5IDQuMzZWNWgyLjE0M3pNMSAxNWgxMFY2SDF2OXptNS45OTgtMy43MDZMNy41IDEyLjVoLTNsLjUwMi0xLjIwNkExLjY0NCAxLjY0NCAwIDAxNC41IDEwLjFjMC0uODgzLjY3Mi0xLjYgMS41LTEuNnMxLjUuNzE3IDEuNSAxLjZjMCAuNDc1LS4xOTQuOTAxLS41MDIgMS4xOTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvY2tPcGVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQWVyb3NwaWtlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BZXJvc3Bpa2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQzQzNzNBXCIsXG4gICAgZDogXCJNMCAzMS44MDZoMzJWLjc3NkgwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTkuNDQ4IDEyLjUwOGwtOC45ODYgMy44NiA4Ljk4NiAzLjg4M3YtNy43NDN6bS0xMS4zMDQgNC43M2wtMi4wOTQtLjg2MyAyLjA5NC0uOTMxIDE3Ljc0OS03Ljc0MXYyLjA2MmwtNC42NTQgMS45OXY5LjI1bDQuNjU0IDIuMDF2MS45NjhMOC4xNDMgMTcuMjR6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQWVyb3NwaWtlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQXBhY2hlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BcGFjaGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fYXBhY2hlJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IFwiMjEuOTAyJVwiLFxuICAgIHgyOiBcIjE0MS44NzklXCIsXG4gICAgeTE6IFwiNjMuOTA1JVwiLFxuICAgIHkyOiBcIjIwLjIxMyVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNGNjk5MjNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMS4yMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0Y3OUEyM1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjgzLjgzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IFwiLTIxNy42NTElXCIsXG4gICAgeDI6IFwiNzQuNzQzJVwiLFxuICAgIHkxOiBcIjE3Ny4xMjclXCIsXG4gICAgeTI6IFwiMzYuNjY1JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgeDE6IFwiLTgwLjA0NCVcIixcbiAgICB4MjogXCIxNDYuMjQlXCIsXG4gICAgeTE6IFwiNzMuNTc0JVwiLFxuICAgIHkyOiBcIjMxLjUzOSVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMyLjMzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUUyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNjMuMDIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDOTIwMzdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NS4xNCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjMzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0U5NzgyNlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIHgxOiBcIi0xOC4zMTYlXCIsXG4gICAgeDI6IFwiMTY1LjAwMiVcIixcbiAgICB5MTogXCI1Mi40OTclXCIsXG4gICAgeTI6IFwiNDEuNjU2JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzI4MjY2MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjkuNTQ4JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjYyRThEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzguODIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RjIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5NC44NyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjAzMlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIHgxOiBcIi0xMDkuNzAxJVwiLFxuICAgIHgyOiBcIjY0LjYxNyVcIixcbiAgICB5MTogXCI0NjMuNzE1JVwiLFxuICAgIHkyOiBcIjE3LjE5JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgeDE6IFwiLTM0Ljg4JVwiLFxuICAgIHgyOiBcIjExMC41OTklXCIsXG4gICAgeTE6IFwiMTMwLjUyMiVcIixcbiAgICB5MjogXCItOS4xMTglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMi4zMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlFMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjYzLjAyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzkyMDM3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUuMTQlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIzMzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2cnKSxcbiAgICB4MTogXCItMTMuNjczJVwiLFxuICAgIHgyOiBcIjExNy44NTglXCIsXG4gICAgeTE6IFwiMTkyLjU2NCVcIixcbiAgICB5MjogXCItMTM2LjkwNiVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyODI2NjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5LjU0OCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzY2MkU4RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc4LjgyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUYyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiOTQuODclXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIwMzJcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNMTMuNjI4LjE4Yy0uNDk4LjI5My0xLjMzMiAxLjEzNC0yLjMyOCAyLjM0OHYuMDc0bC44NzEgMS42MTMuMDQ0LjAzYy42NDEtLjkxNCAxLjI4OS0xLjc0MiAxLjk0OC0yLjQ0Ni4wNS0uMDU2LjA3NS0uMDguMDc1LS4wOC0uMDI1LjAyNC0uMDUuMDU1LS4wNzUuMDgtLjIxMS4yMzctLjg1OS45ODQtMS44MyAyLjQ3OGwuMTEyLjAyNXMyLjI3My0uMjI0IDMuMzY4LS40MWwuMDYyLS4wNTdjLjM1LTEuOTU1LS4zNDItMi44NTEtLjM0Mi0yLjg1MVMxNC42NjEtLjQyMyAxMy42MjguMTh6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk05LjUyNSA4LjY5N2MuMjgtLjUxNi41Ni0xLjAyNy44NC0xLjUxOS4yOTMtLjUxLjU5Mi0xLjAwOC44OTctMS40ODhhLjM5Ny4zOTcgMCAwMC4wNS0uMDg3Yy4yOTktLjQ3My41OTgtLjkyMS45MDMtMS4zNTdMMTEuMyAyLjUyYy0uMDY5LjA4MS0uMTM3LjE2OC0uMjA2LjI1Ni0uMjYxLjMzLS41MzUuNjc4LS44MTUgMS4wNTJhNTEuNzgzIDUxLjc4MyAwIDAwLTEuODkzIDIuNzA4Yy0uMjYxLjQwNS0uNTMuODE2LS43OSAxLjI0NWwtLjAzMi4wNVY3LjlsMS4xNCAyLjI2LjA1LjAxOWMuMjU1LS40OTguNTEtLjk5Ni43NzEtMS40ODJ6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdjJyksIFwiKVwiKSxcbiAgICBkOiBcIk00LjU2MyAxOS43NmMuMjA2LS41MzUuNDI0LTEuMDc3LjY0Mi0xLjYyNS4yMTEtLjUyMy40MjMtMS4wNTIuNjQ3LTEuNTguMjE4LS41My40NDgtMS4wNi42NzktMS41OTUuMjM2LS41NDEuNDczLTEuMDgzLjcxNi0xLjYxOC4yNDItLjUzLjQ4NS0xLjA1OS43MzQtMS41ODIuMDg3LS4xODYuMTgtLjM4LjI3NC0uNTY2LjE1Ni0uMzI0LjMxOC0uNjQ4LjQ3My0uOTY1LjAwNy0uMDE5LjAyLS4wMzEuMDI1LS4wNUw3LjU2NCA3LjgzMmwtLjA1Ni4wOTNjLS4yNzQuNDU1LS41NTQuOTE1LS44MjIgMS4zODlhNTQuNTM1IDU0LjUzNSAwIDAwLTEuNDUgMi43MTRjLS4wNDQuMDg3LS4wODEuMTY4LS4xMjUuMjU1YTMyLjE1IDMyLjE1IDAgMDAtLjcwMyAxLjU0NGMtLjIzNy41Ni0uNDQ4IDEuMDk2LS42MzUgMS42MDYtLjEyNS4zMzctLjIzLjY1NC0uMzM2Ljk2NS0uMDgxLjI2Mi0uMTYyLjUzLS4yMzcuNzkxLS4xOC42MjMtLjMzIDEuMjM5LS40NTQgMS44NjJsLjAxOC4wNzQgMS4xNCAyLjI2Ni4wMzcuMDJjLjE1NS0uNDI0LjMxNy0uODQ4LjQ4NS0xLjI4My4wNDQtLjEyNS4wOTQtLjI0My4xMzctLjM2OHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTIuNzMzIDE5LjEzMmExOC44NCAxOC44NCAwIDAwLS4zMTEgMi4yNTNjMCAuMDI1LS4wMDYuMDUtLjAwNi4wODEtLjM3NC0uNTk4LTEuMzctMS4xNzctMS4zNy0xLjE3Ny43MTYgMS4wMzQgMS4yNTggMi4wNjEgMS4zMzggMy4wNy0uMzguMDgtLjkwMi0uMDM4LTEuNTEyLS4yNTUuNjI4LjU3OCAxLjEwMi43NCAxLjI4OC43ODQtLjU3OS4wMzctMS4xODMuNDM2LTEuNzkzLjg5Ljg5LS4zNiAxLjYwNy0uNTA0IDIuMTIzLS4zOTItLjgxNSAyLjMxLTEuNjMgNC44NjItMi40NTMgNy41NjQuMjUtLjA3NS4zOTktLjI0My40ODYtLjQ3My4xNDMtLjQ5MiAxLjExNC0zLjcwNCAyLjYyNy03LjkzMS4wNDQtLjExOS4wODctLjI0My4xMy0uMzYyLjAxMy0uMDMuMDI2LS4wNjguMDM4LS4xLjE2Mi0uNDQxLjMyNC0uODk2LjQ5OC0xLjM1Ni4wMzgtLjEwNi4wODEtLjIxMi4xMTktLjMxOHYtLjAwNmwtMS4xOS0yLjM1M2MwIC4wMy0uMDA2LjA1Ni0uMDEyLjA4elwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIiksXG4gICAgZDogXCJNMTIuMzMzIDQuMjgzYy0uMjY4LjQxMS0uNTYuODc4LS44NzggMS40MDctLjAxOC4wMjUtLjAzLjA1Ni0uMDUuMDgxYTYyLjUzOCA2Mi41MzggMCAwMC0xLjY4NyAzLjA1Yy0uMjQ5LjQ4LS41MDQuOTg0LS43NjUgMS41MjZsLjA1Ni4wMjUgMi44OTUtLjMxMS4wNjgtLjA1Yy44NzgtLjQwNSAxLjI3LS43NzIgMS42NS0xLjMwMS4xLS4xNDMuMjA1LS4zLjMwNS0uNDU1LjMxMS0uNDg1LjYxNi0xLjAxNS44ODQtMS41NDQuMjYxLS41MS40OTItMS4wMi42NzItMS40NzVhNi41NiA2LjU2IDAgMDAuMzk4LTEuMzk1Yy0xLjE3LjIwNi0yLjYwOC4zOTktMy41NDguNDQyelwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZicpLCBcIilcIiksXG4gICAgZDogXCJNOC44NCAxMC41OWMtLjEuMjEyLS4yMDUuNDMtLjMxLjY0Ny0uMTEzLjIzNy0uMjMxLjQ4Ni0uMzQzLjczNS0uMDU2LjEyNC0uMTE5LjI1NS0uMTc1LjM4LS4xOC4zODYtLjM1NC43ODQtLjU0MSAxLjE5NWExMDcuMDM1IDEwNy4wMzUgMCAwMC0xLjM1NyAzLjE5NGMtLjIxOC41MjktLjQzNiAxLjA3Ny0uNjU0IDEuNjM3LS4yLjUwNC0uMzk5IDEuMDE1LS41OTggMS41NS0uMDEyLjAyNS0uMDE4LjA1LS4wMy4wNzUtLjIuNTMtLjM5NCAxLjA2OC0uNiAxLjYyMi0uMDA2LjAxMi0uMDE3LjA0NS0uMDIzLjA1N2wuMDQzLjAxLjg2Ni0uMDk0LjA0OC0uMDJjLS4wMTgtLjAwNi0uMDMtLjAzLS4wNDgtLjAzNyAxLjE0NS0uMTQzIDIuNjctMS4wMDIgMy42Ni0yLjA2LjQ1NS0uNDg2Ljg2Ni0xLjA2NSAxLjI1Mi0xLjczOC4yODYtLjUwNC41NDctMS4wNTguODAzLTEuNjc1LjIyNC0uNTM1LjQzNS0xLjEyLjY0LTEuNzQ5YTMuNDU3IDMuNDU3IDAgMDEtLjg5Ni4zMTEgOC45NzcgOC45NzcgMCAwMS0uMTguMDM4Yy0uMDYyLjAxMi0uMTI1LjAxOC0uMTguMDMgMS4wNy0uNDEgMS43NDMtMS4yMDcgMi4yMzQtMi4xNzgtLjI4LjE5My0uNzQuNDQyLTEuMjg4LjU2NmEyLjUyIDIuNTIgMCAwMS0uMjMuMDQ0Yy0uMDIgMC0uMDM4LjAwNi0uMDU3LjAwNi4zNzQtLjE1NS42ODUtLjMzLjk1OS0uNTM1LjA1Ni0uMDQ0LjExMi0uMDg3LjE2OC0uMTM3LjA4MS0uMDc1LjE2Mi0uMTUuMjM3LS4yMjQuMDUtLjA1LjA5My0uMS4xNDMtLjE1Ni4xMDYtLjEyNC4yMDUtLjI2MS4yOTktLjQxLjAzLS4wNDQuMDU2LS4wOTQuMDg3LS4xMzguMDM3LS4wNjguMDY4LS4xMzcuMS0uMjA1LjE0OS0uMy4yNjctLjU2Ny4zNi0uODAzLjA1LS4xMTkuMDg4LS4yMjQuMTI1LS4zMy4wMTMtLjAzOC4wMjUtLjA4MS4wNDQtLjExOS4wMzctLjExMi4wNjgtLjIxMS4wOTMtLjMwNS4wMzctLjEzLjA1Ni0uMjM2LjA2OS0uMzExYTEuMDc3IDEuMDc3IDAgMDEtLjEyNS4wODdjLS4zMjQuMTkzLS44NzguMzY4LTEuMzI2LjQ0OGwuODg0LS4xLS44ODQuMWMtLjA2Mi4wMTMtLjEwNi4wMi0uMTU2LjAzMi4wMDQtLjAwNS0uOTk0LjEwMS0yLjk5NS4zMTZhMi4zMTMgMi4zMTMgMCAwMC0uMTE4LjI0NHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2cnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTQuMTE1IDIxLjkxNGMtLjE1NS40My0uMzE3Ljg3Mi0uNDczIDEuMzIgMCAuMDA2LS4wMDYuMDEzLS4wMDYuMDE5LS4wMjUuMDYyLS4wNDQuMTI0LS4wNjkuMTkzLS4xMDYuMzA1LS4xOTkuNTczLS40MSAxLjE5NS4zNDguMTYyLjYyOC41OC44OTYgMS4wNTlhMS44NzYgMS44NzYgMCAwMC0uNjIzLTEuMzE0YzEuNzI1LjA3NSAzLjIxMy0uMzYxIDMuOTc5LTEuNjE5LjA2OC0uMTEyLjEzLS4yMy4xODYtLjM1NS0uMzQ4LjQ0Mi0uNzg0LjYzLTEuNTkzLjU4NmgtLjAwNy4wMDdjMS4yMDEtLjUzNiAxLjc5OS0xLjA1MiAyLjMzNC0xLjkwNS4xMjUtLjIwNi4yNS0uNDI0LjM3NC0uNjY3LTEuMDUyIDEuMDc4LTIuMjY2IDEuMzgzLTMuNTQzIDEuMTUybC0uOTU4LjEwNmMtLjAzMi4wNjktLjA2My4xNS0uMDk0LjIzelwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BcGFjaGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29BcHBTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0FwcFNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTE5LjUuOTM4YTcuMDAyIDcuMDAyIDAgMDAtNyAwbC04IDQuNjE5QTcgNyAwIDAwMSAxMS42MnY5LjIzN2E3IDcgMCAwMDMuNSA2LjA2Mmw3LjUgNC4zM1YxNy45NzlhNyA3IDAgMDEzLjUtNi4wNjJMMjcgNS4yNzYgMTkuNS45Mzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTkuNS45MzhhNy4wMDIgNy4wMDIgMCAwMC03IDBMNSA1LjI3N2wxMSA2LjM1IDExLTYuMzUtNy41LTQuMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIk0yOC40MzUgNy43NmwtMTAuMDI2IDUuNzlhNi45OTQgNi45OTQgMCAwMTEuNTkgNC40Mjh2MTMuMjdsNy41LTQuMzNhNyA3IDAgMDAzLjUtNi4wNjF2LTkuMjM4YTYuOTkyIDYuOTkyIDAgMDAtMS41ODYtNC40MjJsLS45NzguNTY0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXBwU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQXdzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Bd3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk05LjAxOSAxMy44NzhjMCAuMzkuMDQyLjcwNS4xMTcuOTM2LjA4NS4yMzIuMTkxLjQ4NC4zNC43NThhLjQ1NC40NTQgMCAwMS4wNzUuMjQyYzAgLjEwNS0uMDY0LjIxLS4yMDIuMzE1bC0uNjcuNDQyYS41MTQuNTE0IDAgMDEtLjI3Ny4wOTVjLS4xMDcgMC0uMjEzLS4wNTMtLjMyLS4xNDhhMy4yNTggMy4yNTggMCAwMS0uMzgzLS40OTQgOC4xMDkgOC4xMDkgMCAwMS0uMzMtLjYyYy0uODMuOTY3LTEuODczIDEuNDUtMy4xMjggMS40NS0uODk0IDAtMS42MDctLjI1Mi0yLjEyOS0uNzU2LS41MjEtLjUwNS0uNzg3LTEuMTc4LS43ODctMi4wMiAwLS44OTQuMzE5LTEuNjIuOTY4LTIuMTY2LjY1LS41NDcgMS41MTEtLjgyIDIuNjA3LS44Mi4zNjIgMCAuNzM1LjAzIDEuMTI4LjA4My4zOTQuMDUzLjc5OS4xMzcgMS4yMjQuMjMydi0uNzY4YzAtLjgtLjE3LTEuMzU3LS41LTEuNjgzLS4zNC0uMzI2LS45MTUtLjQ4NC0xLjczNS0uNDg0LS4zNzIgMC0uNzU1LjA0My0xLjE0OS4xMzctLjM5NC4wOTUtLjc3Ny4yMS0xLjE1LjM1OC0uMTcuMDczLS4yOTcuMTE1LS4zNzIuMTM2YS42Ni42NiAwIDAxLS4xNy4wMzJjLS4xNDkgMC0uMjIzLS4xMDUtLjIyMy0uMzI2di0uNTE1YzAtLjE2OS4wMi0uMjk1LjA3NC0uMzY4YS43OTYuNzk2IDAgMDEuMjk4LS4yMjFjLjM3My0uMTkuODItLjM0NyAxLjM0LS40NzRhNi41MjQgNi41MjQgMCAwMTEuNjYxLS4yYzEuMjY2IDAgMi4xOTIuMjg1IDIuNzg4Ljg1Mi41ODYuNTY4Ljg4NCAxLjQzLjg4NCAyLjU4OHYzLjQwN2guMDJ6bS00LjMyIDEuNmMuMzUgMCAuNzEyLS4wNjQgMS4wOTUtLjE5YTIuMzczIDIuMzczIDAgMDAxLjAxMS0uNjczYy4xNy0uMi4yOTgtLjQyMS4zNjItLjY3My4wNjQtLjI1My4xMDctLjU1OC4xMDctLjkxNnYtLjQ0MWE4Ljk4MiA4Ljk4MiAwIDAwLS45OC0uMTc5IDguMTEzIDguMTEzIDAgMDAtMS0uMDYzYy0uNzEzIDAtMS4yMzQuMTM3LTEuNTg2LjQyLS4zNS4yODUtLjUyMS42ODQtLjUyMSAxLjIxIDAgLjQ5NC4xMjguODYyLjM5NCAxLjExNS4yNTUuMjYzLjYyOC4zOSAxLjExNy4zOXptOC41NDUgMS4xMzVjLS4xOTIgMC0uMzItLjAzMi0uNDA1LS4xMDUtLjA4NS0uMDYzLS4xNi0uMjEtLjIyMy0uNDFsLTIuNTAxLTguMTNjLS4wNjQtLjIxLS4wOTYtLjM0Ny0uMDk2LS40MjEgMC0uMTY4LjA4NS0uMjYzLjI1Ni0uMjYzaDEuMDQzYy4yMDIgMCAuMzQuMDMyLjQxNS4xMDUuMDg1LjA2My4xNDkuMjEuMjEyLjQxbDEuNzg4IDYuOTYzIDEuNjYtNi45NjNjLjA1NC0uMjEuMTE3LS4zNDcuMjAzLS40MS4wODUtLjA2My4yMzQtLjEwNS40MjUtLjEwNWguODUyYy4yMDIgMCAuMzQuMDMyLjQyNS4xMDUuMDg1LjA2My4xNi4yMS4yMDMuNDFsMS42ODEgNy4wNDcgMS44NDEtNy4wNDdjLjA2NC0uMjEuMTM4LS4zNDcuMjEzLS40MS4wODUtLjA2My4yMjMtLjEwNS40MTUtLjEwNWguOTljLjE3IDAgLjI2Ni4wODQuMjY2LjI2MyAwIC4wNTItLjAxMS4xMDUtLjAyMi4xNjgtLjAxLjA2My0uMDMyLjE0Ny0uMDc0LjI2M2wtMi41NjUgOC4xM2MtLjA2NC4yMS0uMTM4LjM0Ny0uMjIzLjQxLS4wODUuMDYzLS4yMjQuMTA1LS40MDUuMTA1aC0uOTE1Yy0uMjAyIDAtLjM0LS4wMzEtLjQyNi0uMTA1LS4wODUtLjA3My0uMTYtLjIxLS4yMDItLjQybC0xLjY1LTYuNzg0LTEuNjM4IDYuNzczYy0uMDUzLjIxLS4xMTcuMzQ3LS4yMDIuNDItLjA4Ni4wNzQtLjIzNS4xMDYtLjQyNi4xMDZoLS45MTV6bTEzLjY3NS4yODRhNy4xMjIgNy4xMjIgMCAwMS0xLjY0LS4xOWMtLjUzMS0uMTI2LS45NDYtLjI2Mi0xLjIyMy0uNDItLjE3LS4wOTUtLjI4Ny0uMi0uMzMtLjI5NWEuNzM1LjczNSAwIDAxLS4wNjQtLjI5NHYtLjUzNmMwLS4yMjEuMDg1LS4zMjcuMjQ1LS4zMjdhLjYxLjYxIDAgMDEuMTkyLjAzMmMuMDYzLjAyMS4xNi4wNjMuMjY2LjEwNS4zNjEuMTU4Ljc1NS4yODQgMS4xNy4zNjguNDI2LjA4NC44NC4xMjcgMS4yNjcuMTI3LjY3IDAgMS4xOTItLjExNiAxLjU1My0uMzQ4YTEuMTMgMS4xMyAwIDAwLjU1NC0uOTk5YzAtLjI5NC0uMDk2LS41MzYtLjI4OC0uNzM2LS4xOTEtLjItLjU1My0uMzc5LTEuMDc0LS41NDdsLTEuNTQ0LS40NzNjLS43NzYtLjI0Mi0xLjM1MS0uNi0xLjcwMi0xLjA3M2EyLjQ4NyAyLjQ4NyAwIDAxLS41MzItMS41MjVjMC0uNDQyLjA5NS0uODMuMjg3LTEuMTY3LjE5Mi0uMzM3LjQ0Ny0uNjMxLjc2Ni0uODYzLjMyLS4yNDIuNjgxLS40MiAxLjEwNy0uNTQ3YTQuNjkgNC42OSAwIDAxMS4zNC0uMTc4Yy4yMzUgMCAuNDguMDEuNzE0LjA0Mi4yNDUuMDMxLjQ2OC4wNzMuNjkyLjExNS4yMTIuMDUzLjQxNS4xMDUuNjA2LjE2OS4xOTIuMDYzLjM0LjEyNi40NDcuMTg5YS45MTguOTE4IDAgMDEuMzIuMjYzYy4wNjMuMDg0LjA5NS4yLjA5NS4zNDd2LjQ5NGMwIC4yMjEtLjA4NS4zMzctLjI0NS4zMzctLjA4NSAwLS4yMjMtLjA0Mi0uNDA0LS4xMjYtLjYwNy0uMjc0LTEuMjg4LS40MS0yLjA0My0uNDEtLjYwNyAwLTEuMDg2LjA5NC0xLjQxNi4yOTQtLjMzLjItLjUuNTA1LS41LjkzNiAwIC4yOTQuMTA3LjU0Ny4zMi43NDcuMjEyLjIuNjA2LjQgMS4xNy41NzhsMS41MTEuNDczYy43NjYuMjQyIDEuMzIuNTc5IDEuNjUgMS4wMS4zMy40MzEuNDkuOTI2LjQ5IDEuNDczIDAgLjQ1Mi0uMDk2Ljg2Mi0uMjc3IDEuMjJhMi44MzYgMi44MzYgMCAwMS0uNzc3LjkyNWMtLjMzLjI2My0uNzI0LjQ1Mi0xLjE4Mi41OS0uNDc4LjE0Ni0uOTc5LjIyLTEuNTIxLjIyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjRjkwXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjkzIDIyLjAwOWMtMy41MDEgMi41NTYtOC41ODggMy45MTItMTIuOTYyIDMuOTEyLTYuMTMgMC0xMS42NTMtMi4yNC0xNS44MjUtNS45NjMtLjMzLS4yOTUtLjAzMi0uNjk0LjM2Mi0uNDYzIDQuNTEyIDIuNTg3IDEwLjA3OCA0LjE1NSAxNS44MzYgNC4xNTUgMy44ODQgMCA4LjE1MS0uOCAxMi4wNzgtMi40NC41ODYtLjI2MyAxLjA4Ni4zNzguNTExLjc5OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjM4OCAyMC4zNjhjLS40NDctLjU2OC0yLjk1OC0uMjczLTQuMDk3LS4xMzctLjM0LjA0Mi0uMzk0LS4yNTItLjA4NS0uNDczIDItMS4zODggNS4yODktLjk4OSA1LjY3Mi0uNTI2LjM4My40NzQtLjEwNyAzLjcyMy0xLjk4IDUuMjgtLjI4Ny4yNDItLjU2NC4xMTYtLjQzNi0uMi40MjYtMS4wNDEgMS4zNzMtMy4zODYuOTI2LTMuOTQ0elwiXG4gIH0pKSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Bd3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Bd3NNb25vID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Bd3NNb25vKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNOS4wMTkgMTMuODc4YzAgLjM5LjA0Mi43MDUuMTE3LjkzNi4wODUuMjMyLjE5MS40ODQuMzQuNzU4YS40NTQuNDU0IDAgMDEuMDc1LjI0MmMwIC4xMDUtLjA2NC4yMS0uMjAyLjMxNWwtLjY3LjQ0MmEuNTE0LjUxNCAwIDAxLS4yNzcuMDk1Yy0uMTA3IDAtLjIxMy0uMDUzLS4zMi0uMTQ4YTMuMjU4IDMuMjU4IDAgMDEtLjM4My0uNDk0IDguMTA5IDguMTA5IDAgMDEtLjMzLS42MmMtLjgzLjk2Ny0xLjg3MyAxLjQ1LTMuMTI4IDEuNDUtLjg5NCAwLTEuNjA3LS4yNTItMi4xMjktLjc1Ni0uNTIxLS41MDUtLjc4Ny0xLjE3OC0uNzg3LTIuMDIgMC0uODk0LjMxOS0xLjYyLjk2OC0yLjE2Ni42NS0uNTQ3IDEuNTExLS44MiAyLjYwNy0uODIuMzYyIDAgLjczNS4wMyAxLjEyOC4wODMuMzk0LjA1My43OTkuMTM3IDEuMjI0LjIzMnYtLjc2OGMwLS44LS4xNy0xLjM1Ny0uNS0xLjY4My0uMzQtLjMyNi0uOTE1LS40ODQtMS43MzUtLjQ4NC0uMzcyIDAtLjc1NS4wNDMtMS4xNDkuMTM3LS4zOTQuMDk1LS43NzcuMjEtMS4xNS4zNTgtLjE3LjA3My0uMjk3LjExNS0uMzcyLjEzNmEuNjYuNjYgMCAwMS0uMTcuMDMyYy0uMTQ5IDAtLjIyMy0uMTA1LS4yMjMtLjMyNnYtLjUxNWMwLS4xNjkuMDItLjI5NS4wNzQtLjM2OGEuNzk2Ljc5NiAwIDAxLjI5OC0uMjIxYy4zNzMtLjE5LjgyLS4zNDcgMS4zNC0uNDc0YTYuNTI0IDYuNTI0IDAgMDExLjY2MS0uMmMxLjI2NiAwIDIuMTkyLjI4NSAyLjc4OC44NTIuNTg2LjU2OC44ODQgMS40My44ODQgMi41ODh2My40MDdoLjAyem0tNC4zMiAxLjZjLjM1IDAgLjcxMi0uMDY0IDEuMDk1LS4xOWEyLjM3MyAyLjM3MyAwIDAwMS4wMTEtLjY3M2MuMTctLjIuMjk4LS40MjEuMzYyLS42NzMuMDY0LS4yNTMuMTA3LS41NTguMTA3LS45MTZ2LS40NDFhOC45ODIgOC45ODIgMCAwMC0uOTgtLjE3OSA4LjExMyA4LjExMyAwIDAwLTEtLjA2M2MtLjcxMyAwLTEuMjM0LjEzNy0xLjU4Ni40Mi0uMzUuMjg1LS41MjEuNjg0LS41MjEgMS4yMSAwIC40OTQuMTI4Ljg2Mi4zOTQgMS4xMTUuMjU1LjI2My42MjguMzkgMS4xMTcuMzl6bTguNTQ1IDEuMTM1Yy0uMTkyIDAtLjMyLS4wMzItLjQwNS0uMTA1LS4wODUtLjA2My0uMTYtLjIxLS4yMjMtLjQxbC0yLjUwMS04LjEzYy0uMDY0LS4yMS0uMDk2LS4zNDctLjA5Ni0uNDIxIDAtLjE2OC4wODUtLjI2My4yNTYtLjI2M2gxLjA0M2MuMjAyIDAgLjM0LjAzMi40MTUuMTA1LjA4NS4wNjMuMTQ5LjIxLjIxMi40MWwxLjc4OCA2Ljk2MyAxLjY2LTYuOTYzYy4wNTQtLjIxLjExNy0uMzQ3LjIwMy0uNDEuMDg1LS4wNjMuMjM0LS4xMDUuNDI1LS4xMDVoLjg1MmMuMjAyIDAgLjM0LjAzMi40MjUuMTA1LjA4NS4wNjMuMTYuMjEuMjAzLjQxbDEuNjgxIDcuMDQ3IDEuODQxLTcuMDQ3Yy4wNjQtLjIxLjEzOC0uMzQ3LjIxMy0uNDEuMDg1LS4wNjMuMjIzLS4xMDUuNDE1LS4xMDVoLjk5Yy4xNyAwIC4yNjYuMDg0LjI2Ni4yNjMgMCAuMDUyLS4wMTEuMTA1LS4wMjIuMTY4LS4wMS4wNjMtLjAzMi4xNDctLjA3NC4yNjNsLTIuNTY1IDguMTNjLS4wNjQuMjEtLjEzOC4zNDctLjIyMy40MS0uMDg1LjA2My0uMjI0LjEwNS0uNDA1LjEwNWgtLjkxNWMtLjIwMiAwLS4zNC0uMDMxLS40MjYtLjEwNS0uMDg1LS4wNzMtLjE2LS4yMS0uMjAyLS40MmwtMS42NS02Ljc4NC0xLjYzOCA2Ljc3M2MtLjA1My4yMS0uMTE3LjM0Ny0uMjAyLjQyLS4wODYuMDc0LS4yMzUuMTA2LS40MjYuMTA2aC0uOTE1em0xMy42NzUuMjg0YTcuMTIyIDcuMTIyIDAgMDEtMS42NC0uMTljLS41MzEtLjEyNi0uOTQ2LS4yNjItMS4yMjMtLjQyLS4xNy0uMDk1LS4yODctLjItLjMzLS4yOTVhLjczNS43MzUgMCAwMS0uMDY0LS4yOTR2LS41MzZjMC0uMjIxLjA4NS0uMzI3LjI0NS0uMzI3YS42MS42MSAwIDAxLjE5Mi4wMzJjLjA2My4wMjEuMTYuMDYzLjI2Ni4xMDUuMzYxLjE1OC43NTUuMjg0IDEuMTcuMzY4LjQyNi4wODQuODQuMTI3IDEuMjY3LjEyNy42NyAwIDEuMTkyLS4xMTYgMS41NTMtLjM0OGExLjEzIDEuMTMgMCAwMC41NTQtLjk5OWMwLS4yOTQtLjA5Ni0uNTM2LS4yODgtLjczNi0uMTkxLS4yLS41NTMtLjM3OS0xLjA3NC0uNTQ3bC0xLjU0NC0uNDczYy0uNzc2LS4yNDItMS4zNTEtLjYtMS43MDItMS4wNzNhMi40ODcgMi40ODcgMCAwMS0uNTMyLTEuNTI1YzAtLjQ0Mi4wOTUtLjgzLjI4Ny0xLjE2Ny4xOTItLjMzNy40NDctLjYzMS43NjYtLjg2My4zMi0uMjQyLjY4MS0uNDIgMS4xMDctLjU0N2E0LjY5IDQuNjkgMCAwMTEuMzQtLjE3OGMuMjM1IDAgLjQ4LjAxLjcxNC4wNDIuMjQ1LjAzMS40NjguMDczLjY5Mi4xMTUuMjEyLjA1My40MTUuMTA1LjYwNi4xNjkuMTkyLjA2My4zNC4xMjYuNDQ3LjE4OWEuOTE4LjkxOCAwIDAxLjMyLjI2M2MuMDYzLjA4NC4wOTUuMi4wOTUuMzQ3di40OTRjMCAuMjIxLS4wODUuMzM3LS4yNDUuMzM3LS4wODUgMC0uMjIzLS4wNDItLjQwNC0uMTI2LS42MDctLjI3NC0xLjI4OC0uNDEtMi4wNDMtLjQxLS42MDcgMC0xLjA4Ni4wOTQtMS40MTYuMjk0LS4zMy4yLS41LjUwNS0uNS45MzYgMCAuMjk0LjEwNy41NDcuMzIuNzQ3LjIxMi4yLjYwNi40IDEuMTcuNTc4bDEuNTExLjQ3M2MuNzY2LjI0MiAxLjMyLjU3OSAxLjY1IDEuMDEuMzMuNDMxLjQ5LjkyNi40OSAxLjQ3MyAwIC40NTItLjA5Ni44NjItLjI3NyAxLjIyYTIuODM2IDIuODM2IDAgMDEtLjc3Ny45MjVjLS4zMy4yNjMtLjcyNC40NTItMS4xODIuNTktLjQ3OC4xNDYtLjk3OS4yMi0xLjUyMS4yMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjkzIDIyLjAwOWMtMy41MDEgMi41NTYtOC41ODggMy45MTItMTIuOTYyIDMuOTEyLTYuMTMgMC0xMS42NTMtMi4yNC0xNS44MjUtNS45NjMtLjMzLS4yOTUtLjAzMi0uNjk0LjM2Mi0uNDYzIDQuNTEyIDIuNTg3IDEwLjA3OCA0LjE1NSAxNS44MzYgNC4xNTUgMy44ODQgMCA4LjE1MS0uOCAxMi4wNzgtMi40NC41ODYtLjI2MyAxLjA4Ni4zNzguNTExLjc5OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjM4OCAyMC4zNjhjLS40NDctLjU2OC0yLjk1OC0uMjczLTQuMDk3LS4xMzctLjM0LjA0Mi0uMzk0LS4yNTItLjA4NS0uNDczIDItMS4zODggNS4yODktLjk4OSA1LjY3Mi0uNTI2LjM4My40NzQtLjEwNyAzLjcyMy0xLjk4IDUuMjgtLjI4Ny4yNDItLjU2NC4xMTYtLjQzNi0uMi40MjYtMS4wNDEgMS4zNzMtMy4zODYuOTI2LTMuOTQ0elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F3c01vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29BenVyZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXp1cmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDcyQzZcIixcbiAgICBkOiBcIk0xNy40NDggNGwtOS40MTQgOC4wMUwwIDI2LjE1N2g3LjI0M0wxNy40NDggNHpNMTguNyA1Ljg3NGwtNC4wMTggMTEuMTEgNy43MDQgOS40OTdMNy40NDEgMjloMjQuNDk0TDE4LjcgNS44NzR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BenVyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0F6dXJlTW9ubyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXp1cmVNb25vKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcuNDQ4IDRsLTkuNDE0IDguMDFMMCAyNi4xNTdoNy4yNDNMMTcuNDQ4IDR6TTE4LjcgNS44NzRsLTQuMDE4IDExLjExIDcuNzA0IDkuNDk3TDcuNDQxIDI5aDI0LjQ5NEwxOC43IDUuODc0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXp1cmVNb25vOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQmVhdHMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0JlYXRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTUgMjBINFYwaDExYzUuNTIyIDAgMTAgNC40NzggMTAgMTBzLTQuNDc4IDEwLTEwIDEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEMyQjNcIixcbiAgICBkOiBcIk0yNi43MDIgMTUuNjI0QzI0LjYgMTkuOTc5IDIwLjE1MiAyMyAxNSAyM0g0djloMTVjNS41MjIgMCAxMC00LjQ3OCAxMC0xMGE5Ljk1MiA5Ljk1MiAwIDAwLTIuMjk4LTYuMzc2XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMjQuMzM4IDEzLjU1NEE5Ljk0MiA5Ljk0MiAwIDAwMTkgMTJINHY4aDExYzQuMjcgMCA3LjkwMy0yLjY4IDkuMzM4LTYuNDQ2XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29CZWF0czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29CdXNpbmVzc0FuYWx5dGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMCAyMmMwIDUuNTIyIDQuNDc4IDEwIDEwIDEwVjEyQzQuNDc4IDEyIDAgMTYuNDc4IDAgMjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xMCAxMnYxMGgxMGMwLTUuNTIyLTQuNDc4LTEwLTEwLTEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0xMCAwdjljNy4xNjggMCAxMyA1LjgzMiAxMyAxM2g5QzMyIDkuODUgMjIuMTUgMCAxMCAwXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQnVzaW5lc3NBbmFseXRpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29DZXBoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29DZXBoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjUuNDcxIDI3LjU2Yy0xLjA2LS41NjctMS42NzYtMS4yMDYtMS44MTEtMS45MDItLjEzLS42NzMuMTctMS40MjEuOTE4LTIuMjg4YTExLjI5IDExLjI5IDAgMDAyLjc3My03LjQyQTExLjMyNCAxMS4zMjQgMCAwMDE2LjA0MiA0LjY0bC0uMDUuMDAxaC0uMDVBMTEuMzI0IDExLjMyNCAwIDAwNC42MzIgMTUuOTQ5YTExLjI5MSAxMS4yOTEgMCAwMDIuNzc0IDcuNDIyYy43NTMuODcyIDEuMDQ3IDEuNTkxLjkyOCAyLjI1Ny0uMTMuNjk0LS43NCAxLjM0Mi0xLjgxNyAxLjkzLTEuNjU3LTEuMzc1LTMuMTE2LTMuMjEyLTQuMDEtNS4wNTZhMTQuOTQzIDE0Ljk0MyAwIDAxLTEuMTE3LTMuMTM5QTE0Ljk5NyAxNC45OTcgMCAwMTEgMTUuOTVhMTQuOTAxIDE0LjkwMSAwIDAxNC4zNzgtMTAuNTcgMTQuOTI0IDE0LjkyNCAwIDAxNC43NTItMy4yMDRDMTEuOTcgMS4zOTUgMTMuOTUuOTk2IDE1Ljk0OCAxaC4xMDFhMTQuODg4IDE0Ljg4OCAwIDAxMTAuNTcgNC4zNzggMTQuOTEyIDE0LjkxMiAwIDAxMy45ODIgMTMuOTg1IDE0Ljg3MSAxNC44NzEgMCAwMS0xLjExOCAzLjE0Yy0uOSAxLjg0My0yLjM1OCAzLjY4MS00LjAxIDUuMDU3aC0uMDAzem0tNS41MjMgMi43OThjLS4xNzMtLjExLS43NjctLjU1LTEuMzQ1LTEuMzUzYTYuMTIyIDYuMTIyIDAgMDEtMS4xNzQtMy43MzggOC4yNiA4LjI2IDAgMDEuNjExLTIuOTY0IDguNDIgOC40MiAwIDAxMS42MjctMi41NGwuMDA0LS4wMDguMTU0LS4xNzhjLjI2My0uMzA1LjUzNi0uNjIyLjc1My0uOTkuMjY4LS40NTQuNDYyLS45MzEuNTc4LTEuNDIuMTc4LS43NTguMTg4LTEuNTQ3LjAyOS0yLjMxYTUuMyA1LjMgMCAwMC0uODU4LTEuOTU2IDUuMjY0IDUuMjY0IDAgMDAtNC4yOS0yLjIxN2gtLjEwOGE1LjI1IDUuMjUgMCAwMC00LjI5IDIuMjE2IDUuMzEgNS4zMSAwIDAwLS44NTYgMS45NTZjLS4xNi43NjMtLjE1IDEuNTUyLjAzIDIuMzExLjExNS40ODguMzEuOTY1LjU3NiAxLjQxOS4yMTkuMzcuNDkuNjg0Ljc1My45OWwuMTU1LjE3OS4wMDMuMDA3YTguMzg0IDguMzg0IDAgMDExLjYyOCAyLjU0IDguMjQgOC4yNCAwIDAxLjYxIDIuOTY0IDYuMTIzIDYuMTIzIDAgMDEtMS4xNzMgMy43MzhjLS41OC43OTUtMS4xNzQgMS4yNDMtMS4zNDYgMS4zNTJsLS44NjctLjI2YTE1LjQzNCAxNS40MzQgMCAwMS0yLjQ5LTEuMDk4IDQuMjQ1IDQuMjQ1IDAgMDAyLjIzNC0zLjczNmMwLTEuMDM0LS40MDMtMi4wMjgtMS4xOTUtMi45NWwtLjAzNC0uMDM0LS4yMzctLjI2LS42MzYtLjc0NmE4LjkyNCA4LjkyNCAwIDAxLTEuNTI1LTMuMjYgOC45ODMgOC45ODMgMCAwMS0uMDUtMy45MDUgOC45MDYgOC45MDYgMCAwMTEuNDYtMy4zMTNBOC45OTMgOC45OTMgMCAwMTExLjIzIDguMzlhOC45MzcgOC45MzcgMCAwMTQuNzAyLTEuMzQ0aC4xMTJjLjQyIDAgLjg0LjAyOSAxLjI1NS4wODhhOC45MzggOC45MzggMCAwMTMuNDQ4IDEuMjU2IDkuMDAzIDkuMDAzIDAgMDEyLjU1NCAyLjQwNCA5LjA5MyA5LjA5MyAwIDAxMS40NTkgMy4zMTMgOS4wNDMgOS4wNDMgMCAwMS0uMDUgMy45MTIgOC45MjUgOC45MjUgMCAwMS0xLjUyNiAzLjI2Yy0uMi4yNjUtLjQwOS40OTUtLjYzNy43NDVsLS4yMy4yNTRjLS4wMTcuMDE2LS4wMy4wMjctLjA0LjA0My0uODA0Ljk2MS0xLjE5NSAxLjkyNy0xLjE5NSAyLjk0OGE0LjI1IDQuMjUgMCAwMDIuMjM3IDMuNzM1Yy0uNzk1LjQ0MS0xLjYzLjgwOS0yLjQ5MSAxLjA5OGwtLjg2Mi4yNi0uMDE4LS4wMDR6bS0zLjk1Ni0xMS4zMTRhMi45NTcgMi45NTcgMCAwMS0yLjk1Mi0yLjk1MiAyLjk1NyAyLjk1NyAwIDAxMi45NTItMi45NTIgMi45NTYgMi45NTYgMCAwMTIuOTUgMi45NTIgMi45NTcgMi45NTcgMCAwMS0yLjk1IDIuOTUyXCIsXG4gICAgZmlsbDogXCIjRjA1QzU2XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29DZXBoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQ2xvdWQgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Nsb3VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTIuMzcgMTguMzUyYy4wMzItLjAxLjA2Ni0uMDE0LjEtLjAyM0E2IDYgMCAwMTE4IDEwVjBDOS4xNjMgMCAyIDcuMTY0IDIgMTZjMCAyLjc5My43MiA1LjQxNyAxLjk3NiA3LjcwMmExOC45NDcgMTguOTQ3IDAgMDE4LjM5My01LjM0OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTggMEExNS45NTkgMTUuOTU5IDAgMDA1LjcxNyA1Ljc1YTE2LjAwNiAxNi4wMDYgMCAwMDcuNTQxIDUuMDMyYy43MS4yMiAxLjQ3Ny4xMzUgMi4xNDYtLjE4OEE1Ljk0IDUuOTQgMCAwMTE4IDEwYTUuOTQgNS45NCAwIDAxMi41OTYuNTk0Yy42NjkuMzIzIDEuNDM2LjQwOCAyLjE0Ni4xODhhMTYuMDEgMTYuMDEgMCAwMDcuNTQxLTUuMDMyQTE1Ljk1OSAxNS45NTkgMCAwMDE4IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTIyLjc0MiAyMS4yMThjLS43MS0uMjItMS40NzgtLjEzNS0yLjE0Ni4xODhBNS45NDcgNS45NDcgMCAwMTE4IDIyYTUuOTQgNS45NCAwIDAxLTIuNTk2LS41OTRjLS42NjktLjMyMy0xLjQzNi0uNDA4LTIuMTQ2LS4xODhhMTYuMDA2IDE2LjAwNiAwIDAwLTcuNTQgNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAwMTggMzJjNC45MzYgMCA5LjM0OC0yLjIzNiAxMi4yODMtNS43NWExNi4wMTYgMTYuMDE2IDAgMDAtNy41NC01LjAzMlwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0Nsb3VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQ2xvdWRFY2UgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Nsb3VkRWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTE4IDB2MTBhNiA2IDAgMDAtNS41MyA4LjMzYy0uMDM0LjAwOS0uMDY4LjAxMi0uMS4wMjNBMTguOTQ3IDE4Ljk0NyAwIDAwMy45NzUgMjMuNyAxNS45MzQgMTUuOTM0IDAgMDEyIDE2QzIgNy4xNjQgOS4xNjMgMCAxOCAwem0wIDEzYTMgMyAwIDExMCA2IDMgMyAwIDAxMC02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBBRUZBXCIsXG4gICAgZDogXCJNMjIuNzQyIDIxLjIxOGMtLjcxLS4yMi0xLjQ3OC0uMTM1LTIuMTQ2LjE4OEE1Ljk0NyA1Ljk0NyAwIDAxMTggMjJhNS45NCA1Ljk0IDAgMDEtMi41OTYtLjU5NGMtLjY2OS0uMzIzLTEuNDM2LS40MDgtMi4xNDYtLjE4OGExNi4wMDYgMTYuMDA2IDAgMDAtNy41NCA1LjAzMkExNS45NTkgMTUuOTU5IDAgMDAxOCAzMmM0LjkzNiAwIDkuMzQ4LTIuMjM2IDEyLjI4My01Ljc1YTE2LjAxNiAxNi4wMTYgMCAwMC03LjU0LTUuMDMyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xOCAwQTE1Ljk1OSAxNS45NTkgMCAwMDUuNzE3IDUuNzVhMTYuMDA2IDE2LjAwNiAwIDAwNy41NDEgNS4wMzJjLjcxLjIyIDEuNDc3LjEzNSAyLjE0Ni0uMTg4QTUuOTQgNS45NCAwIDAxMTggMTBhNS45NCA1Ljk0IDAgMDEyLjU5Ni41OTRjLjY2OS4zMjMgMS40MzYuNDA4IDIuMTQ2LjE4OGExNi4wMSAxNi4wMSAwIDAwNy41NDEtNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAwMTggMFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ2xvdWRFY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Db2RlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Db2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTkuNzUgMTJMMTYgMzJoMTBsLTMuNC0xMC44OEExMyAxMyAwIDAwMTAuMTkgMTJoLS40NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzIyQTdGM1wiLFxuICAgIGQ6IFwiTTI1LjcyNSAxMS45M0ExNyAxNyAwIDAwOS41IDBINmwzLjc1IDEyaC40NGExMyAxMyAwIDAxMTIuNDEgOS4xMkwyNiAzMmg2bC02LjI3NS0yMC4wN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAzNzdDQVwiLFxuICAgIGQ6IFwiTTcuOTEgMTYuMTc1TDAgMzJoMTIuODU1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ29kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0NvZGVzYW5kYm94ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Db2Rlc2FuZGJveChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjczOCAyOC4wNDRWMTYuNjgxTDMuMTcyIDEwLjkxOXY2LjQ2bDUuMzIgMi42N3Y0Ljg4OWw2LjI0NiAzLjEwNnptMi4zNDQuMDY2bDYuMzU3LTMuMTd2LTUuMDAybDUuMzUzLTIuNjg2VjEwLjg3bC0xMS43MSA1Ljg1NFYyOC4xMXpNMjcuMzA2IDguOTkzbC02LjAwMy0zLjAxMi01LjI4NiAyLjY1Ni01LjMyNS0yLjY1OUw0LjYzNyA5LjAzbDExLjMxNyA1LjYzOCAxMS4zNTItNS42NzV6TS44MjggMjMuNzQ0VjguMzI0TDE1Ljk4MS42ODlsMTUuMTU1IDcuNjA0VjIzLjcyTDE1Ljk4IDMxLjI4LjgyOCAyMy43NDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Db2Rlc2FuZGJveDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0NvdWNoYmFzZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ291Y2hiYXNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUQyMjI2XCIsXG4gICAgZDogXCJNMTYuMDcyLjAyNEM3LjI5LjAyNC4xNDQgNy4xNDYuMTQ0IDE1Ljk1MmMwIDguNzgyIDcuMTIyIDE1LjkyOCAxNS45MjggMTUuOTI4QzI0Ljg1NCAzMS44OCAzMiAyNC43NTggMzIgMTUuOTUyIDMyIDcuMTQ2IDI0Ljg1NC4wMjQgMTYuMDcyLjAyNHptMTAuNzU1IDE4LjcxOWMwIC45NjItLjU1MyAxLjgwNC0xLjYzNiAxLjk5Ny0xLjg3Ny4zMzYtNS44MjMuNTMtOS4xMTkuNTMtMy4yOTYgMC03LjI0Mi0uMTk0LTkuMTE5LS41My0xLjA4Mi0uMTkzLTEuNjM2LTEuMDM1LTEuNjM2LTEuOTk3di02LjIwOGMwLS45NjIuNzQ2LTEuODUyIDEuNjM2LTEuOTk3LjU1NC0uMDk2IDEuODUzLS4xOTIgMi44NjQtLjE5Mi4zODUgMCAuNjk3LjI4OS42OTcuNzQ2djQuMzU1bDUuNTgyLS4xMiA1LjU4Mi4xMnYtNC4zNTVjMC0uNDU3LjMxMy0uNzQ2LjY5OC0uNzQ2IDEuMDEgMCAyLjMxLjA5NiAyLjg2My4xOTIuOTE0LjE0NSAxLjYzNiAxLjAzNSAxLjYzNiAxLjk5Ny0uMDQ4IDIuMDQ1LS4wNDggNC4xMzktLjA0OCA2LjIwOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NvdWNoYmFzZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0RvY2tlciA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRG9ja2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguMDk5IDE1LjEwOGgzLjMwNHYtMi45NzNIMTguMXYyLjk3M3ptLTMuOTA1IDBoMy4zMDR2LTIuOTczaC0zLjMwNHYyLjk3M3ptLTMuOTA1IDBoMy4zMDR2LTIuOTczSDEwLjI5djIuOTczem0tMy45MDUgMEg5LjY5di0yLjk3M0g2LjM4NHYyLjk3M3ptLTMuOTA0IDBoMy4zMDR2LTIuOTczSDIuNDh2Mi45NzN6bTMuOTA0LTMuNTY4SDkuNjlWOC41NjhINi4zODR2Mi45NzJ6bTMuOTA1IDBoMy4zMDRWOC41NjhIMTAuMjl2Mi45NzJ6bTMuOTA1IDBoMy4zMDRWOC41NjhoLTMuMzA0djIuOTcyem0wLTMuNTY3aDMuMzA0VjVoLTMuMzA0djIuOTczem0xNy4xMzkgNS40MDJjLS43MjItLjQ3OC0yLjM4LS42NTMtMy42NTYtLjQxNS0uMTY0LTEuMTktLjgzNC0yLjIyMS0yLjA1Mi0zLjE1M2wtLjctLjQ2My0uNDY4LjY5NGMtLjU5OC44OTMtLjg5NyAyLjEzLS44IDMuMzE3LjA0NS40MTguMTgzIDEuMTY0LjYxNyAxLjgyLS40MzMuMjMxLTEuMjkuNTQ5LTIuNDIuNTI4SC4xMjRsLS4wNDMuMjQ3Yy0uMjA0IDEuMTkzLS4yIDQuOTE0IDIuMjQgNy43NzRDNC4xNzggMjUuODk4IDYuOTYgMjcgMTAuNTkgMjdjNy44NyAwIDEzLjY5My0zLjU4NiAxNi40Mi0xMC4xMDQgMS4wNzMuMDIgMy4zODEuMDA2IDQuNTY3LTIuMjM3LjAzMS0uMDUxLjEwMi0uMTg2LjMxLS42MWwuMTEzLS4yMzQtLjY2Ny0uNDR6XCIsXG4gICAgZmlsbDogXCIjMTM2RUEzXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRG9ja2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRHJvcHdpemFyZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRHJvcHdpemFyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19kcm9wd2l6YXJkJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAyOS42MXM5LjU1IDQuNzQgMTYuODU2LS44OTNjLTEuOTA1LTUuMTE0LTUuMjUtMTkuODY3LTcuMjI2LTI2LjM4My0uNDIyLTEuMzg5LS40OS0xLjUyNy0uNjYzLTEuOTA5LS45NjQtMi4xMzQtMS45NzggNC4xNDItMy42MjggMTAuNDU5QzEyLjc0OSAxMy4xNDggOCAyOS42MSA4IDI5LjYxXCIsXG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuOTI2IDI4LjU2M3M4LjE3IDQuNzk0IDE0LjkzLjE1NGMtLjE4LS44MDctLjY0Mi0yLjEwMy0uOTU1LTMuMzExLTEuNjY0LTYuNDE2LTQuNjc2LTE3LjI0OC02LjE0NC0yMi42MjYtMS41OS01LjgyMi0yLjEwNS45ODYtMy45NjEgOC4yMy0uNTY0IDIuMjA0LTMuODcgMTcuNTUzLTMuODcgMTcuNTUzXCIsXG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjE0IDI0LjQxbC44NS0xLjQ2Ni43OTMgMS41NDQtLjkwOCAxLjk5LS43MzUtMi4wNjl6bTYuOTM0LTUuNTQ1bC44NS0xLjQ2NS43OTMgMS41NDMtLjkwOCAxLjk5LS43MzUtMi4wNjh6bS00Ljc0Ny01Ljg1MWwuODUtMS40NjUuNzkyIDEuNTQzLS45MDggMS45OS0uNzM0LTIuMDY4XCIsXG4gICAgZmlsbDogXCIjRjlBNzJCXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4xNCAyNC40MWwuODUtMS43MTYuNzkzIDEuNzk0LS45MDcgMS40NjgtLjczNi0xLjU0NnptNi45MzQtNS41NDVsLjg1MS0xLjcxNi43OTIgMS43OTQtLjkwNiAxLjQ2OC0uNzM3LTEuNTQ2em0tNC43NDctNS44NTFsLjg1LTEuNzE2Ljc5MiAxLjc5NC0uOTA2IDEuNDY4LS43MzYtMS41NDZcIixcbiAgICBmaWxsOiBcIiNGRkYyMDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjk4NyAyOC40MjJzNi4wODIgMS4wMTUgMTAuMDg2LTEuNTQ5Yy0uNTAyIDEuNTUtNC45OTEgMy4zMTQtMTAuMDg2IDEuNTVcIixcbiAgICBmaWxsOiBcIiMyNDI2NURcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiAzMy40NzMsXG4gICAgeTE6IDcuNjc0LFxuICAgIHgyOiA3Ljc1MSxcbiAgICB5MjogMjEuMzMxLFxuICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgc3RvcENvbG9yOiBcIiMzODcxQzFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC41MTUsXG4gICAgc3RvcENvbG9yOiBcIiMyQzM3OTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC44NjUsXG4gICAgc3RvcENvbG9yOiBcIiMyNDI2NURcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMSxcbiAgICBzdG9wQ29sb3I6IFwiIzI1Mjc2MVwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiAyMS4wMjgsXG4gICAgeTE6IDE0LjkyOCxcbiAgICB4MjogNi4wMTcsXG4gICAgeTI6IDE4Ljg0NCxcbiAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIHN0b3BDb2xvcjogXCIjMzg3MUMxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuNTE1LFxuICAgIHN0b3BDb2xvcjogXCIjMkMzNzkyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuODY1LFxuICAgIHN0b3BDb2xvcjogXCIjMjQyNjVEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDEsXG4gICAgc3RvcENvbG9yOiBcIiMyNTI3NjFcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRHJvcHdpemFyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0VsYXN0aWMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0VsYXN0aWMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS10eXBlXCI6IFwibG9nb0VsYXN0aWNcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIm91dGxpbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMwLjg2IDEzLjEyOUE2LjMzMyA2LjMzMyAwIDAxMzIgMTYuNzdhNi40MTkgNi40MTkgMCAwMS0xLjE2MiAzLjY1MiA2LjM4MiA2LjM4MiAwIDAxLTMuMDMyIDIuMzMxIDQuODMzIDQuODMzIDAgMDEtMS42NzIgNS41NDIgNC43ODkgNC43ODkgMCAwMS01Ljc3LS4wNzQgOS4wMTYgOS4wMTYgMCAwMS00LjUgMy4zMjIgOC45ODIgOC45ODIgMCAwMS01LjU4Ny4wMjMgOS4wMTQgOS4wMTQgMCAwMS00LjUyNi0zLjI4NyA5LjA2NyA5LjA2NyAwIDAxLTEuNzI3LTUuMzMzYzAtLjU3OS4wNTMtMS4xNTYuMTYtMS43MjVBNi4zMDUgNi4zMDUgMCAwMTEuMTQ1IDE4LjkgNi4zNDEgNi4zNDEgMCAwMTAgMTUuMjQyYTYuNDIgNi40MiAwIDAxMS4xNjMtMy42NTIgNi4zODQgNi4zODQgMCAwMTMuMDM1LTIuMzMgNC44MzMgNC44MzMgMCAwMTEuNjU4LTUuNTU3IDQuNzg5IDQuNzg5IDAgMDE1Ljc4LjA3IDkuMDM3IDkuMDM3IDAgMDE0LjkzLTMuNDQ2IDkuMDA3IDkuMDA3IDAgMDE1Ljk5NC40MTkgOS4wNSA5LjA1IDAgMDE0LjQwNyA0LjA5OCA5LjA5NyA5LjA5NyAwIDAxLjg3MyA1Ljk2NSA2LjI5OCA2LjI5OCAwIDAxMy4wMiAyLjMyem0tMTguMjguNjU4bDcuMDAyIDMuMjExIDcuMDY2LTYuMjEzYTcuODUgNy44NSAwIDAwLjE1Mi0xLjU1N2MwLTEuNjkyLS41MzktMy4zNC0xLjU0LTQuNzA0YTcuODk3IDcuODk3IDAgMDAtNC4wMi0yLjg2OSA3Ljg3IDcuODcgMCAwMC00LjkzMi4wODYgNy45IDcuOSAwIDAwLTMuOTIgMy4wMDdsLTEuMTc0IDYuMTE4IDEuMzY3IDIuOTItLjAwMS4wMDF6bS03LjI0NyA3LjQ0MUE3Ljk2NCA3Ljk2NCAwIDAwNi43MiAyNy41M2E3LjkxOCA3LjkxOCAwIDAwNC4wNCAyLjg3NCA3Ljg5IDcuODkgMCAwMDQuOTUtLjA5NyA3LjkyIDcuOTIgMCAwMDMuOTI2LTMuMDNsMS4xNjYtNi4xMDItMS41NTUtMi45ODUtNy4wMy0zLjIxMS02Ljg4NSA2LjI0OC4wMDEuMDAxem00Ljc1NS0xMS4wMjRsLTQuOC0xLjEzNy4wMDItLjAwMmEzLjgyIDMuODIgMCAwMTEuMzEyLTQuMzU4IDMuNzg1IDMuNzg1IDAgMDE0LjUzOC4wMjNsLTEuMDUyIDUuNDc0em0tNS4yMTYuMDFhNS4yOTQgNS4yOTQgMCAwMC0yLjU5NSAxLjg4MiA1LjMyNCA1LjMyNCAwIDAwLS4xNDIgNi4xMjQgNS4yODcgNS4yODcgMCAwMDIuNTA1IDJsNi43MzMtNi4xMDEtMS4yMzUtMi42NS01LjI2Ni0xLjI1NXptMTguMjg2IDE3Ljg0OGEzLjczNyAzLjczNyAwIDAxLTIuMjg1LS43ODVsMS4wMzctNS40NTQgNC44IDEuMTI1YTMuODEyIDMuODEyIDAgMDEtMS44MDEgNC42OGMtLjU0LjI4My0xLjE0LjQzMi0xLjc1MS40MzR6bS0xLjMxLTcuNDk5bDUuMjggMS4yMzhhNS4zNCA1LjM0IDAgMDAyLjYyMi0xLjkzOCA1LjM3IDUuMzcgMCAwMDEuMDEzLTMuMTA2IDUuMzExIDUuMzExIDAgMDAtLjkzNi0zLjAxIDUuMjgyIDUuMjgyIDAgMDAtMi40NzUtMS45NDRsLTYuOTA0IDYuMDcgMS40IDIuNjl6XCIsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi41OCAxMy43ODdsNy4wMDIgMy4yMTEgNy4wNjYtNi4yMTNhNy44NDkgNy44NDkgMCAwMC4xNTItMS41NTdjMC0xLjY5Mi0uNTM5LTMuMzQtMS41NC00LjcwNGE3Ljg5NyA3Ljg5NyAwIDAwLTQuMDItMi44NjkgNy44NyA3Ljg3IDAgMDAtNC45MzIuMDg2IDcuOSA3LjkgMCAwMC0zLjkyIDMuMDA3bC0xLjE3NCA2LjExOCAxLjM2NyAyLjkyLS4wMDEuMDAxelwiLFxuICAgIGZpbGw6IFwiI0ZFQzUxNFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4zMzMgMjEuMjI4QTcuOTY0IDcuOTY0IDAgMDA2LjcyIDI3LjUzYTcuOTE4IDcuOTE4IDAgMDA0LjA0IDIuODc0IDcuODkgNy44OSAwIDAwNC45NS0uMDk3IDcuOTIgNy45MiAwIDAwMy45MjYtMy4wM2wxLjE2Ni02LjEwMi0xLjU1NS0yLjk4NS03LjAzLTMuMjExLTYuODg1IDYuMjQ4LjAwMS4wMDF6XCIsXG4gICAgZmlsbDogXCIjMDBCRkIzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjI4OCA5LjA2N2w0LjggMS4xMzdMMTEuMTQgNC43M2EzLjc4NSAzLjc4NSAwIDAwLTUuOTE0IDEuOTQgMy44MiAzLjgyIDAgMDAuMDY0IDIuMzk1XCIsXG4gICAgZmlsbDogXCIjRjA0RTk4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00Ljg3MiAxMC4yMTRhNS4yOTQgNS4yOTQgMCAwMC0yLjU5NSAxLjg4MiA1LjMyNCA1LjMyNCAwIDAwLS4xNDIgNi4xMjQgNS4yODcgNS4yODcgMCAwMDIuNTA1IDJsNi43MzMtNi4xMDEtMS4yMzUtMi42NS01LjI2Ni0xLjI1NXpcIixcbiAgICBmaWxsOiBcIiMxQkE5RjVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjg3MyAyNy4yNzdhMy43MzYgMy43MzYgMCAwMDIuMjg1Ljc4NSAzLjc4MyAzLjc4MyAwIDAwMy4xMDEtMS42MyAzLjgxMiAzLjgxMiAwIDAwLjQ1MS0zLjQ4NGwtNC44LTEuMTI1LTEuMDM3IDUuNDU0elwiLFxuICAgIGZpbGw6IFwiIzkzQzkwRVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuODQ4IDIwLjU2M2w1LjI4IDEuMjM4YTUuMzQgNS4zNCAwIDAwMi42MjItMS45MzggNS4zNyA1LjM3IDAgMDAxLjAxMy0zLjEwNiA1LjMxMiA1LjMxMiAwIDAwLS45MzYtMy4wMSA1LjI4MyA1LjI4MyAwIDAwLTIuNDc1LTEuOTQ0bC02LjkwNCA2LjA3IDEuNCAyLjY5elwiLFxuICAgIGZpbGw6IFwiIzA3Q1wiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRWxhc3RpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0VsYXN0aWNTdGFjayA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0zMiA5VjIuNUEyLjUgMi41IDAgMDAyOS41IDBoLTI3QTIuNSAyLjUgMCAwMDAgMi41VjloMzJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0wIDIwaDMydi04SDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xNC41IDIzSDB2Ni41QTIuNSAyLjUgMCAwMDIuNSAzMmgxMnYtOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTE3LjUgMjN2OWgxMmEyLjUgMi41IDAgMDAyLjUtMi41VjIzSDE3LjV6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTIgMTZjMCAxLjM4NC4xOTQgMi43Mi41MjQgNEgyMmE0IDQgMCAwMDAtOEgyLjUyNEExNS45ODQgMTUuOTg0IDAgMDAyIDE2XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk0yOC45MjQgNy42NjJBMTUuMzgxIDE1LjM4MSAwIDAwMzAuNDggNkMyNy41NDcgMi4zNDYgMjMuMDUgMCAxOCAwIDExLjY3OSAwIDYuMjM5IDMuNjc4IDMuNjQ0IDlIMjUuNTFhNS4wMzkgNS4wMzkgMCAwMDMuNDEzLTEuMzM4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0yNS41MSAyM0gzLjY0NUM2LjI0IDI4LjMyMyAxMS42NzkgMzIgMTggMzJjNS4wNSAwIDkuNTQ3LTIuMzQ2IDEyLjQ4LTZhMTUuMzgxIDE1LjM4MSAwIDAwLTEuNTU2LTEuNjYyQTUuMDM0IDUuMDM0IDAgMDAyNS41MSAyM1wiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VsYXN0aWNzZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE2IDBjLTIuOTE4IDAtNS42NDUuNzk0LTggMi4xNTggNC43NzcgMi43NjggOCA3LjkyMyA4IDEzLjg0MiAwIDUuOTE5LTMuMjIzIDExLjA3NC04IDEzLjg0MkExNS45MDcgMTUuOTA3IDAgMDAxNiAzMmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2UzI0LjgzNyAwIDE2IDB6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMjRoMi4yMjJBMTIuOTk2IDEyLjk5NiAwIDAwMTMgMTZjMC0yLjkzNS0xLjAxMi01Ljc0NC0yLjc3OC04SDhhOCA4IDAgMDAwIDE2elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTYgOGgtMi4xNTJBMTUuODc3IDE1Ljg3NyAwIDAxMTYgMTZjMCAyLjkxOC0uNzg2IDUuNjQ3LTIuMTUyIDhIMTZhOCA4IDAgMDAwLTE2elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29FdGNkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FdGNkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjNDE5RURBXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjY1IDE0LjE2NGMwIDEuMTg5LS45MzMgMi4xNS0yLjA4MyAyLjE1LTEuMTUyIDAtMi4wODItLjk2MS0yLjA4Mi0yLjE1IDAtMS4xODUuOTMtMi4xNSAyLjA4Mi0yLjE1IDEuMTUgMCAyLjA4My45NjUgMi4wODMgMi4xNXptMi42OTMgMGMwIDEuMTg5LjkzNCAyLjE1IDIuMDg0IDIuMTVzMi4wODMtLjk2MSAyLjA4My0yLjE1YzAtMS4xODUtLjkzMy0yLjE1LTIuMDgzLTIuMTUtMS4xNSAwLTIuMDg0Ljk2NS0yLjA4NCAyLjE1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzEuNTIyIDE2LjQ5NWE1Ljg0NSA1Ljg0NSAwIDAxLTMuMTA1LS42MThjLjI3Mi0xLjYwMy4zODctMy4yMTguMzU3LTQuODI3YTI0Ljg5NiAyNC44OTYgMCAwMC0zLjAyNy0zLjcwMyA2LjEzNyA2LjEzNyAwIDAxMi4xMzMtMi4zNmwuMzkxLS4yNS0uMzA0LS4zNTRjLTEuNTctMS44MjUtMy40NDQtMy4yMzUtNS41NjgtNC4xOTNMMjEuOTc1IDBsLS4xMDcuNDYyYTYuMjQ4IDYuMjQ4IDAgMDEtMS41MSAyLjgyOSAyMy43NyAyMy43NyAwIDAwLTQuMzYyLTEuODU1IDIzLjc5IDIzLjc5IDAgMDAtNC4zNTUgMS44NTFBNi4yNDYgNi4yNDYgMCAwMTEwLjEzNy40NjVsLS4xMDgtLjQ2Mi0uNDIzLjE4OWMtMi4wOTcuOTQzLTQuMDIyIDIuMzkyLTUuNTY2IDQuMTlsLS4zMDYuMzU1LjM5LjI1YTYuMTI1IDYuMTI1IDAgMDEyLjEyOSAyLjM0NyAyNS4wMDEgMjUuMDAxIDAgMDAtMy4wMjIgMy42ODkgMjYuMDY4IDI2LjA2OCAwIDAwLjM0NyA0Ljg2IDUuODMyIDUuODMyIDAgMDEtMy4wOS42MTJMLjAzIDE2LjQ2bC4wNDMuNDczYTE2LjcyMyAxNi43MjMgMCAwMDIuMTQgNi43NjVsLjIzNC40MS4zNS0uMzA4YTUuOTE0IDUuOTE0IDAgMDEyLjgzNy0xLjM3MiAyNS4yNTUgMjUuMjU1IDAgMDAyLjQyOSA0LjA4M2MxLjQ3NS41MzMgMy4wMTMuOTMgNC42MDEgMS4xNjdhNi4zNTkgNi4zNTkgMCAwMS0uMzgzIDMuMjQzbC0uMTc1LjQzOS40NS4xMDJjMS4xNS4yNjEgMi4zMS4zOTQgMy40NDcuMzk0bDMuNDQ3LS4zOTQuNDUtLjEwMi0uMTc1LS40NGE2LjM3NiA2LjM3NiAwIDAxLS4zODMtMy4yNDQgMjMuOTA1IDIzLjkwNSAwIDAwNC41ODUtMS4xNjUgMjUuMjg2IDI1LjI4NiAwIDAwMi40My00LjA4NiA1Ljk0IDUuOTQgMCAwMTIuODUxIDEuMzczbC4zNS4zMDYuMjMzLS40MDhhMTYuNjYxIDE2LjY2MSAwIDAwMi4xNC02Ljc2NGwuMDQyLS40NzItLjQ1LjAzNnpNMjAuOTMgMjIuMjc4Yy0xLjYzLjQ1OC0zLjI4Ny42ODktNC45MzMuNjg5LTEuNjUgMC0zLjMwNC0uMjMxLTQuOTM2LS42OWEyMC4wMjggMjAuMDI4IDAgMDEtMi4xMTMtNC41OTQgMjAuMDcyIDIwLjA3MiAwIDAxLS44OS01LjA0IDE5LjA3NiAxOS4wNzYgMCAwMTMuNTc2LTMuNTE2IDE4Ljg2NyAxOC44NjcgMCAwMTQuMzYzLTIuNDQ4IDE4Ljk0NCAxOC45NDQgMCAwMTQuMzU1IDIuNDQzIDE5LjE5IDE5LjE5IDAgMDEzLjU5MiAzLjUzOGMtLjA5IDEuNzMtLjM5IDMuNDEtLjg5OSA1LjAxOWExOS45NjUgMTkuOTY1IDAgMDEtMi4xMTUgNC41OTl6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRXRjZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0djcCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR2NwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2djcCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNLjA4NS4xaDQuNTQ5djYuMjkxSC4wODV6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNEQjQ0MzdcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMjIuNTcgMjkuOTgyaC01Ljc0OWMuNTI3IDAgLjk4Ny0uMjgyIDEuMjMzLS43TDI1Ljg1NyAxNiAyMC45MyA3LjYxbDUuNzQ4LjAwMWMuNDkyIDAgLjk3LjI1MSAxLjIzMi43bDMuNjk4IDYuMjkxYy40OS44MzcuNTI2IDEuOSAwIDIuNzk3bC02LjU3MiAxMS4xODVhMi44NTMgMi44NTMgMCAwMS0yLjQ2NCAxLjM5OHptLS43MS0yLjc5NmMwIC4zODYuMzE4LjcuNzEuN2EuNzA1LjcwNSAwIDAwLjcxMi0uN2MwLS4zODYtLjMxOC0uNy0uNzExLS43YS43MDUuNzA1IDAgMDAtLjcxMi43em02LjkyNy0xMC41OGMuMzQuMTkzLjc3NS4wNzguOTcxLS4yNTZhLjY5Mi42OTIgMCAwMC0uMjYtLjk1NS43MTguNzE4IDAgMDAtLjk3Mi4yNTYuNjkyLjY5MiAwIDAwLjI2Ljk1NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzQyODVGNFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0yNS4wMzYgMy40MTZsMi44NzMgNC44OTRhMS40MjcgMS40MjcgMCAwMC0xLjIzMi0uNjk5SDExLjA3MWwtNC45MjggOC4zODgtMi44NzQtNC44OTJhMS4zNzcgMS4zNzcgMCAwMTAtMS4zOTlsMy42OTYtNi4yOTJhMi44NTMgMi44NTMgMCAwMTIuNDY0LTEuMzk4aDEzLjE0M2MuOTgyIDAgMS45MzcuNTAyIDIuNDY0IDEuMzk4ek0xMC4xNCA0LjgxNGMwLS4zODYtLjMxOC0uNy0uNzEtLjdhLjcwNS43MDUgMCAwMC0uNzEyLjdjMCAuMzg2LjMxOC43LjcxMS43YS43MDUuNzA1IDAgMDAuNzExLS43em0xMi43ODcuNjA2YS42OTIuNjkyIDAgMDAuMjYtLjk1NS43MTguNzE4IDAgMDAtLjk3MS0uMjU2LjY5Mi42OTIgMCAwMC0uMjYuOTU1LjcxOC43MTggMCAwMC45NzEuMjU2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjRCNDAwXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTS4zOTQgMTQuNjAxbDIuODc1LTQuODkzYy0uMjYzLjQ0OS0uMjQ1Ljk4IDAgMS4zOTlMMTEuMDcgMjQuMzloOS44NTdsLTIuODc0IDQuODkyYy0uMjQ2LjQxOC0uNzA2LjctMS4yMzMuN0g5LjQyOGEyLjg1NCAyLjg1NCAwIDAxLTIuNDY0LTEuMzk4TC4zOTQgMTcuMzk4YTIuNzU0IDIuNzU0IDAgMDEwLTIuNzk3em0yLjgyLjc5M2EuNzE4LjcxOCAwIDAwLS45NzIuMjU2LjY5My42OTMgMCAwMC4yNi45NTVjLjM0LjE5My43NzUuMDc4Ljk3MS0uMjU2YS42OTIuNjkyIDAgMDAtLjI2LS45NTV6TTkuMDcyIDI2LjU4YS42OTIuNjkyIDAgMDAtLjI2Ljk1NS43MTguNzE4IDAgMDAuOTcxLjI1Ni42OTIuNjkyIDAgMDAuMjYtLjk1NS43MTguNzE4IDAgMDAtLjk3MS0uMjU2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNMTguMDU0IDI5LjI4MmwyLjg3NS00Ljg5MkgxNy45NmwtMS4xMzggNS41OTFjLjUyNiAwIC45ODYtLjI4IDEuMjMyLS42OTlNMjYuNjc4IDcuNjExaC01Ljc0OWwxLjQ4NCAyLjUyN0wyNy45MSA4LjMxYTEuNDI3IDEuNDI3IDAgMDAtMS4yMzItLjdcIixcbiAgICBvcGFjaXR5OiAwLjFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBvcGFjaXR5OiAwLjEsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgyLjk5NCA5LjYwOSlcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTS4yNzUgMS40OThMMy4xNSA2LjM5MWwxLjQ4NS0yLjUyN0wuMjc1LjFjLS4yNjMuNDQ4LS4yNDUuOTggMCAxLjM5OFwiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIilcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQ0NDXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTExLjA3MSAyNC4zOUw2LjE0MyAxNmw0LjkyOC04LjM5aDkuODU4TDI1Ljg1NyAxNmwtNC45MjggOC4zOUgxMS4wN3pNMjAuMjY4IDE2YzAtMi4zMTctMS45MS00LjE5NC00LjI2OC00LjE5NC0yLjM1NyAwLTQuMjY4IDEuODc3LTQuMjY4IDQuMTk0IDAgMi4zMTYgMS45MSA0LjE5NCA0LjI2OCA0LjE5NCAyLjM1NyAwIDQuMjY4LTEuODc4IDQuMjY4LTQuMTk0elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0djcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0djcE1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0djcE1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4yNTYgMTUuOTgyYzAtMi4zMTYtMS45MS00LjE5NC00LjI2OC00LjE5NC0yLjM1NyAwLTQuMjY4IDEuODc4LTQuMjY4IDQuMTk0IDAgMi4zMTcgMS45MTEgNC4xOTUgNC4yNjggNC4xOTUgMi4zNTcgMCA0LjI2OC0xLjg3OCA0LjI2OC00LjE5NVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkuODcgMTYuNTQzYS44NjIuODYyIDAgMDEtMS4xNjcuMzA4LjgzMi44MzIgMCAwMS0uMzEyLTEuMTQ3Ljg2Mi44NjIgMCAwMTEuMTY3LS4zMDguODMyLjgzMiAwIDAxLjMxMiAxLjE0N00yMi41NiAyOC4xNWEuODQ3Ljg0NyAwIDAxLS44NTUtLjg0YzAtLjQ2NC4zODMtLjg0Ljg1NS0uODRzLjg1NC4zNzYuODU0Ljg0YzAgLjQ2NC0uMzgyLjg0LS44NTQuODRtLTEyLjcxNS0uMTEzYS44NjMuODYzIDAgMDEtMS4xNjctLjMwOC44MzIuODMyIDAgMDEuMzEyLTEuMTQ3Ljg2Mi44NjIgMCAwMTEuMTY3LjMwOC44MzIuODMyIDAgMDEtLjMxMiAxLjE0N00zLjU4NiAxNi41NDJhLjg2My44NjMgMCAwMS0xLjE2Ny4zMDguODMyLjgzMiAwIDAxLS4zMTMtMS4xNDcuODYyLjg2MiAwIDAxMS4xNjctLjMwOC44MzIuODMyIDAgMDEuMzEzIDEuMTQ3TTIyLjk4NyA1LjY2NWEuODYyLjg2MiAwIDAxLTEuMTY3LS4zMDguODMyLjgzMiAwIDAxLjMxMi0xLjE0Ny44NjMuODYzIDAgMDExLjE2OC4zMDguODMyLjgzMiAwIDAxLS4zMTMgMS4xNDdtLTEzLjU3LjExMmEuODQ3Ljg0NyAwIDAxLS44NTQtLjg0YzAtLjQ2NC4zODItLjg0Ljg1NC0uODRzLjg1NS4zNzYuODU1Ljg0YzAgLjQ2NC0uMzgzLjg0LS44NTUuODRtMjIuMTc4IDguNzk3bC0zLjY5Ny02LjI5MmMtLjAxNC0uMDIzLS4wMy0uMDQzLS4wNDUtLjA2NWwtMi44My00LjgxOEEyLjg1NCAyLjg1NCAwIDAwMjIuNTYgMkg5LjQxN2EyLjg1MyAyLjg1MyAwIDAwLTIuNDY0IDEuMzk4TDMuMjU3IDkuNjlsMy4yODQgNS41OSA0LjUxOS03LjY5aDE1LjYwNWMuNDkxIDAgLjk2OS4yNTEgMS4yMzIuNjk5aC02LjU2NWw0LjUxMyA3LjY4Mi00LjkzNSA4LjQtMi44NyA0Ljg4M2ExLjQyNiAxLjQyNiAwIDAxLTEuMjMuNjk5bDMuMjc5LTUuNTgyaC05LjAzbC00LjU0NC03LjczOC0uMzg0LS42NTMtMi44NzQtNC44OTNhMS4zNzcgMS4zNzcgMCAwMS0uMDAzLTEuMzkxTC4zODIgMTQuNTg0YTIuNzU0IDIuNzU0IDAgMDAwIDIuNzk2bDYuNTcgMTEuMTg2YTIuODU0IDIuODU0IDAgMDAyLjQ2NSAxLjM5OGg3LjM5MmMuMDU0IDAgLjEwNy0uMDA1LjE2LS4wMTFoNS41OWEyLjg1MyAyLjg1MyAwIDAwMi40NjQtMS4zOTdsNi41NzItMTEuMTg2Yy41MjYtLjg5Ni40OS0xLjk2IDAtMi43OTZcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0djcE1vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29HaXRodWIgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0dpdGh1YihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBDNy4xNjQgMCAwIDcuMzQzIDAgMTYuNGMwIDcuMjQ4IDQuNTg0IDEzLjM5NCAxMC45NDIgMTUuNTYyLjguMTUgMS4wOTItLjM1NiAxLjA5Mi0uNzg5IDAtLjM5LS4wMTQtMS42ODQtLjAyMi0zLjA1My00LjQ1Ljk5MS01LjM5LTEuOTM0LTUuMzktMS45MzQtLjcyOC0xLjg5NC0xLjc3Ni0yLjM5OC0xLjc3Ni0yLjM5OC0xLjQ1NC0xLjAxNy4xMS0uOTk3LjExLS45OTcgMS42MDYuMTE0IDIuNDUyIDEuNjkgMi40NTIgMS42OSAxLjQyOCAyLjUwNiAzLjc0NiAxLjc4MSA0LjY1NiAxLjM2LjE0Ni0xLjA1Ni41Ni0xLjc4IDEuMDE2LTIuMTktMy41NTItLjQxNC03LjI4OC0xLjgyMS03LjI4OC04LjEwNSAwLTEuNzkyLjYyNC0zLjI1NCAxLjY0Ni00LjQwMi0uMTY0LS40MTYtLjcxNC0yLjA4NS4xNTgtNC4zNDIgMCAwIDEuMzQxLS40NCA0LjQgMS42ODFBMTQuODgyIDE0Ljg4MiAwIDAxMTYgNy45MzJjMS4zNi4wMDYgMi43MjguMTg4IDQuMDA2LjU1MyAzLjA1My0yLjEyNCA0LjM5Ni0xLjY4MSA0LjM5Ni0xLjY4MS44NzUgMi4yNTkuMzI1IDMuOTI2LjE2IDQuMzQgMS4wMjYgMS4xNDggMS42NDUgMi42MSAxLjY0NSA0LjQwMiAwIDYuMy0zLjc0MiA3LjY4Ny03LjMwNyA4LjA5NC41NzcuNTA4IDEuMDg2IDEuNTA1IDEuMDg2IDMuMDM1IDAgMi4xOTItLjAyMSAzLjk2LS4wMjEgNC41IDAgLjQzNy4yOS45NDcgMS4xMDEuNzg3QzI3LjQyIDI5Ljc5IDMyIDIzLjY0NCAzMiAxNi40IDMyIDcuMzQzIDI0LjgzNiAwIDE2IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HaXRodWI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29HbWFpbCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR21haWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTY1QTREXCIsXG4gICAgZDogXCJNMjkuMTYyIDQuMTQ5Yy4yOS0uMTc1LjU4OC0uMDc4Ljg3MyAwYTIuNjE2IDIuNjE2IDAgMDExLjkwNyAyLjQ3NmMuMDA2LjI5LS4wMDcuNTgxLS4wMDcuODY2LS4wODQgMC0uMTM1LjA1Mi0uMi4wOTctLjgxNS41ODItMS42NDIgMS4xNjQtMi40NSAxLjc1Mi0uMzMuMjM5LS42OTIuNDI2LS45Ny43My0uMTE2IDAtLjIuMDc4LS4yODQuMTM2LTIuNjkgMS44NTUtNS4zNzkgMy43MDQtOC4wNjIgNS41Ni0xLjMzMS45MTgtMi42NjMgMS44NDktMy45OTUgMi43NzNoLS4xMWMtLjA1OC0uMDQ1LS4xMS0uMTAzLS4xNjgtLjE0Mkw1Ljg2MyAxMS41NWMtLjY3Mi0uNDY2LTEuMzQ0LS45MzgtMi4wMTctMS40MDMtLjA3Ny0uMDUyLS4xNDgtLjE2Mi0uMjQ1LS4xMDQtLjA5LjA1Mi0uMDMzLjE3NS0uMDQ1LjI3Mi0uMDA3LjAzMiAwIC4wNjUgMCAuMDk3djE2LjE5NGMwIC4xMTYuMDA2LjI0LjAxMi4zNTUgMCAuMDY1LS4wMDYuMTIzLS4wMDYuMTg4LTEuMjI4LjE0OS0yLjM0Ny0uMDItMy4xMTYtMS4xMzFhMi4zODEgMi4zODEgMCAwMS0uNDQtMS4zNjRjMC02LjAzMi0uMDA2LTEyLjA1Ny4wMDctMTguMDg5IDAtMS4yMjguOTk1LTIuMzE0IDIuMjE3LTIuNDg4LjE5NC0uMDI2LjM4OC0uMDUyLjU1Ni4wNzcuMDQuMDM5LjA3MS4wNzguMTE3LjExIDQuMjczIDMuMTY4IDguNTQ2IDYuMzM1IDEyLjgxOSA5LjUxLjE2OC4xMjIuMjc4LjExNi40NDYtLjAwNyAzLjQxMy0yLjUyMSA2LjgzMy01LjAzNiAxMC4yNDctNy41NS45MDUtLjY5MiAxLjgyMy0xLjM4NCAyLjc0Ny0yLjA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjZGNEVDXCIsXG4gICAgZDogXCJNMjkuMTYyIDQuMTQ5Yy0uOTI0LjY4NS0xLjg0MiAxLjM3Ny0yLjc2NyAyLjA2Mi0zLjQxMyAyLjUyMS02LjgzMyA1LjAzLTEwLjI0NiA3LjU1LS4xNjguMTIzLS4yNzIuMTMtLjQ0Ni4wMDctNC4yNjctMy4xNzQtOC41NC02LjMzNS0xMi44MTMtOS41MS0uMDQ2LS4wMzItLjA3OC0uMDctLjExNy0uMTEuMDc4LS4xMjkuMjE0LS4wODMuMzI0LS4wODNoMjUuNzQyYy4xMSAwIC4yMzktLjA0Ni4zMjMuMDg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTZFM0Q2XCIsXG4gICAgZDogXCJNMy41NTYgMjYuOTVhNi41MzMgNi41MzMgMCAwMS0uMDEzLS4zNTZWMTAuNGMwLS4wMzItLjAwNy0uMDY1IDAtLjA5Ny4wMTMtLjA5LS4wNDYtLjIxMy4wNDUtLjI3MS4wOTctLjA1OS4xNzQuMDUxLjI0Ni4xMDMuNjcyLjQ2NSAxLjM0NC45MzcgMi4wMTcgMS40MDNsOS44MzIgNi44NDZjLjA1OC4wNDUuMTE3LjA5Ny4xNjguMTQyLS4wMjYuMDI2LS4wNTguMDQ1LS4wODQuMDcxbC0uMDY0LjA2NWMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjRsLS4wNjQuMDY1Yy0uMDA3LjAxMy0uMDIuMDItLjAyNi4wMzIuMDEzLS4wMDYuMDItLjAxOS4wMzItLjAyNWwuMDY1LS4wNjVjLjA1MiAwIC4xMDMtLjAxMy4xMy0uMDY1LjAxOC0uMDIuMDQ0LS4wNDUuMDY0LS4wNjQuMDY0IDAgLjEyOS0uMDA3LjE5NC0uMDA3Ljg5OC42MjcgMS44MDMgMS4yNDggMi43MDIgMS44NzUgMi42NzYgMS44NTUgNS4zNTMgMy43MDQgOC4wMjMgNS41NzIuNDc4LjMzNyAxLjAwMi42MjggMS40MjggMS4wMzUtLjExNi4xMS0uMjU4LjAzOS0uMzg4LjA1OC4wMDctLjE0OS0uMTIyLS4xODgtLjIyLS4yNTItLjQ5LS4zNDMtLjk5NS0uNjcyLTEuNDczLTEuMDI4LS44MDItLjU4OC0xLjYxNy0xLjE1LTIuNDMxLTEuNzItLjY3OS0uNDcyLTEuMzUxLS45NjMtMi4wNS0xLjQwOS0uNjA3LS4zODgtMS4xNy0uODUzLTEuNzc3LTEuMjQ4LS42ODUtLjQ0LTEuMzMyLS45My0yLjAxLTEuMzc3LS41NjMtLjM2OC0xLjExMy0uNzYyLTEuNjYyLTEuMTUtLjExLS4wNzgtLjIwNy0uMTEtLjMyMy0uMDMzLS4yMzMuMTY4LS41My4yNzgtLjcyNC40Ni0uNTU2LjUxLTEuMjM1Ljg0LTEuODE3IDEuMzA1LS43NDMuNTg5LTEuNTQ1IDEuMTEyLTIuMzQgMS42MzYtMS4zMTkuODczLTIuNTk5IDEuODE2LTMuOTExIDIuNjk2YTQzLjY5NyA0My42OTcgMCAwMC0yLjMwOCAxLjYyOWMtLjIwNy4xNTUtLjQ4NS4yMjYtLjYxNC40ODUtLjEzLS4wMTMtLjI3Mi4wMzgtLjM5NS0uMDQ2IDIuMzE1LTEuNjE2IDQuNjMtMy4yMjYgNi45MzctNC44NDIuMzA0LS4yMTMuNjQ2LS4zODEuODk5LS42NjYuMDQ1LS4wMTMuMTAzLS4wMTkuMDk3LS4wODQgMC0uMDA2LS4wMTMtLjAyLS4wMi0uMDItLjA2NS0uMDA2LS4wNzcuMDQ2LS4wOS4wOTEtLjIzMy4wMTMtLjM3NS4xOTQtLjU1LjMxLTIuNDYzIDEuNy00LjkzMiAzLjM4OC03LjM5NSA1LjA3NXptMTEuMTE5LTcuNTY0bC4wNjQtLjA2NWMuMDUyIDAgLjEwNC0uMDEzLjEzLS4wNjRsLjA2NC0uMDY1Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMTktLjAyLjAyNS0uMDMyLS4wMTIuMDA2LS4wMTkuMDItLjAzMi4wMjYtLjA1MiAwLS4xMDMuMDEzLS4xMy4wNjRsLS4wNjQuMDY1Yy0uMDUxIDAtLjEwMy4wMTMtLjEzLjA2NS0uMDE4LjAyNi0uMDM4LjA0NS0uMDU3LjA3LS4wMTMuMDA3LS4wMjYuMDE0LS4wMzMuMDI3LjAxMy0uMDA3LjAyNi0uMDEzLjAzMy0uMDI2em0tLjg0LjU3NWMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjUtLjAzOS4wMDYtLjA5LjAwNi0uMDk3LjA2NSAwIC4wMTIuMDI2LjAzOC4wMzkuMDM4LjA1Mi0uMDA2LjA1OC0uMDUxLjA2NS0uMDkuMDUxLS4wMDcuMDk2LS4wMTMuMTIyLS4wNzhhLjMxMS4zMTEgMCAwMC4wNzEtLjA1OGMuMDUyIDAgLjEwNC0uMDEzLjEzLS4wNjVsLjA2NC0uMDY0Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMi0uMDIuMDI2LS4wMzItLjAxMy4wMDYtLjAyLjAyLS4wMzMuMDI2LS4wNTEgMC0uMTAzLjAxMy0uMTMuMDY0LS4wMTguMDItLjA0NC4wNDYtLjA2NC4wNjUtLjA1MSAwLS4xMDMuMDEzLS4xMjkuMDY1bC0uMDY1LjA2NHptLS44NDEuNTg4Yy0uMDUyIDAtLjEwMy4wMTMtLjEzLjA2NS0uMDUxLjAwNy0uMTAzLjAxMy0uMDk2LjA4NCAwIC4wMDcuMDEzLjAyLjAyLjAyLjA3LjAwNi4wNzctLjA0Ni4wODMtLjA5Ny4wNTItLjAwNy4wOTctLjAyLjEyMy0uMDcyLjAyNi0uMDEyLjA0NS0uMDM4LjA3MS0uMDU4LjA1MiAwIC4xMDMtLjAxMy4xMy0uMDY0bC4wNjQtLjA2NWMuMDUyIDAgLjEwMy0uMDEzLjEzLS4wNjUuMDA2LS4wMTMuMDE5LS4wMTkuMDI1LS4wMzItLjAxMy4wMDctLjAyLjAyLS4wMzIuMDI2LS4wNTIgMC0uMTA0LjAxMy0uMTMuMDY1bC0uMDY0LjA2NGMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjVhLjMwNi4zMDYgMCAwMC0uMDY0LjA2NHptLS42NDcuNDZjLjA1Mi0uMDA3LjEwNC0uMDEzLjA5Ny0uMDg1IDAtLjAwNi0uMDEyLS4wMTktLjAxOS0uMDE5LS4wNzEtLjAwNi0uMDc4LjA0NS0uMDg0LjA5Ny0uMDUyIDAtLjA5Ny4wMTMtLjEzLjA2NWEuMjIzLjIyMyAwIDAwLS4xOTMuMTI5Yy0uMDQ1LjAxMy0uMTA0LjAxMy0uMDk3LjA4NCAwIC4wMDYuMDEzLjAyLjAyLjAyLjA2NC4wMDYuMDc3LS4wNDYuMDgzLS4wOTguMDkgMCAuMTgxLS4wMDYuMTk0LS4xMjkuMDU4LS4wMDYuMTA0LS4wMi4xMy0uMDY1em0yLjEyOC0xLjUzM2MtLjAwOC4wMjctLjAyNS4wNTQtLjAzMy4wNzIuMDI1LjAwOS4wNS4wMzUuMDY3LjAyNy4wMTYtLjAxLjAyNS0uMDQ1LjAzMy0uMDcyYS41NS41NSAwIDAxLS4wNjctLjAyN3ptLTEuODEgMS4zNWMtLjAwOC0uMDI0LS4wMTUtLjA1Ni0uMDMtLjA1Ni0uMDE1LS4wMDgtLjA1Mi4wMDgtLjA2LjAyNC0uMDIyLjAzMy0uMDA3LjA3NC4wMy4wNzQuMDIyIDAgLjAzNy0uMDI1LjA2LS4wNDF6TTE1LjM1NSAxOWEuMTg1LjE4NSAwIDAxLjAzNC0uMDcyYy0uMDI1LS4wMDktLjA1LS4wMzUtLjA2Ny0uMDI2LS4wMTYuMDA4LS4wMjUuMDQ0LS4wMzMuMDcuMDE3LjAxLjA0Mi4wMTkuMDY3LjAyOHptLTMuNTI2IDIuNDAyYy0uMDE2LS4wMjQtLjAzMS0uMDUtLjA0LS4wNTctLjAxNSAwLS4wNTUuMDE2LS4wNTUuMDMzLS4wMTYuMDQuMDA4LjA3NC4wNDguMDY1LjAxNiAwIC4wMzEtLjAyNC4wNDctLjA0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQjZCNUFDXCIsXG4gICAgZDogXCJNMjguMTIxIDI3LjA4NWMtLjQyNi0uNDEzLS45NDQtLjY5OC0xLjQyOC0xLjAzNC0yLjY3LTEuODYyLTUuMzQ3LTMuNzE3LTguMDIzLTUuNTczLS44OTktLjYyNy0xLjgwNC0xLjI0Ny0yLjcwMi0xLjg3NCAwLS4wMi0uMDA3LS4wNDYtLjAwNy0uMDY1bDMuOTk1LTIuNzczYzIuNjktMS44NTYgNS4zNzktMy43MDUgOC4wNjItNS41Ni4wODQtLjA1OC4xNjgtLjEzNi4yODQtLjEzNnYxNy4wNzNjLS4wNTEtLjAxOS0uMTE2LS4wMzgtLjE4LS4wNTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNkUzRDZcIixcbiAgICBkOiBcIk00LjA3MyAyNy4xNDNjLjEyMy0uMjU4LjQwNy0uMzMuNjE0LS40ODRhNDcuODQ1IDQ3Ljg0NSAwIDAxMi4zMDgtMS42M2MxLjMxMi0uODg1IDIuNTkyLTEuODIzIDMuOTEtMi42OTUuNzk2LS41MjQgMS41OTgtMS4wNDggMi4zNDEtMS42MzYuNTg4LS40NjUgMS4yNi0uNzk1IDEuODE3LTEuMzA2LjItLjE4LjQ5LS4yOS43MjQtLjQ1OS4xMS0uMDg0LjIwNy0uMDUxLjMyMy4wMzMuNTUuMzg4IDEuMDk5Ljc4MiAxLjY2MSAxLjE1LjY4LjQ0NiAxLjMyNi45NDQgMi4wMSAxLjM3Ny42MDguMzg4IDEuMTcuODU0IDEuNzc5IDEuMjQ4LjY5OC40NDYgMS4zNy45MzcgMi4wNDkgMS40MS44MTQuNTY4IDEuNjM1IDEuMTMgMi40MyAxLjcxOS40ODUuMzU1Ljk4My42ODUgMS40NzUgMS4wMjguMDkuMDY0LjIyNi4xMDMuMjIuMjUyLTcuODg4LS4wMDctMTUuNzc0LS4wMDctMjMuNjYxLS4wMDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCMTM5MkZcIixcbiAgICBkOiBcIk0yOC4zMTUgMjcuMTQzVjEwLjA3Yy4yNzgtLjMwNC42NC0uNDkxLjk3LS43My44MTQtLjU5NSAxLjYzNS0xLjE3IDIuNDUtMS43NTIuMDU4LS4wNDUuMTE2LS4wOTcuMi0uMDk3LjAwNy4xMS4wMTMuMjEzLjAxMy4zMjMgMCA1LjUwMiAwIDExLjAxLjAwNyAxNi41MSAwIC4zNzYtLjAxMy43NS0uMTA0IDEuMTI2LS4xNjEuNjkxLS41NzUgMS4xNy0xLjI0NyAxLjQwOS0uNzQ0LjI1OS0xLjUxMy4zMy0yLjI4OS4yODR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCRUJEQjNcIixcbiAgICBkOiBcIk0xMS41MTQgMjEuNTljLS4yNTMuMjg1LS41OTUuNDUzLS45LjY2NmEyNjUwLjA3OCAyNjUwLjA3OCAwIDAxLTYuOTM2IDQuODQybC0uMTI5LjAzOWMwLS4wNjUuMDA3LS4xMjMuMDA3LS4xODggMi40Ny0xLjY4NyA0LjkzMi0zLjM3NCA3LjQwMi01LjA2MS4xNzQtLjExNy4zMS0uMzA0LjU1LS4zMWwuMDA2LjAxMnpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HbWFpbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0dvbGFuZyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR29sYW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMTUgMTcuMzAxYy4wNDUuOTQ2IDEgLjUgMS40MTYuMjEuNDE1LS4yOS41LS4wNDUuNTYtLjZhOS4wNyA5LjA3IDAgMDAuMDQ1LTEuMDkgMi42NzYgMi42NzYgMCAwMC0xLjc4Ni40NTVjLS4yNi4xOS0uNzQ1Ljc5LS4yNCAxXCIsXG4gICAgZmlsbDogXCIjRjZEMkEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjgwNSAxNy45ODdhLjYuNiAwIDAxLS4yNy0uMDYuNjIuNjIgMCAwMS0uMzEtLjU1QS40MS40MSAwIDAxNCAxNy4wNWExLjE1IDEuMTUgMCAwMS41LS44MyAyLjc1MiAyLjc1MiAwIDAxMS44NDYtLjQ3aC4wNzV2LjA3NGMuMDEuMjg2LjAwMy41NzItLjAyNS44NTZ2LjI1Yy0uMDI1LjM5LS4xLjQ1LS4zLjVhMS4xMTggMS4xMTggMCAwMC0uMy4xNDVjLS4yODguMjIzLS42My4zNjQtLjk5LjQxem0xLjI3MS0yLjA2N2EyLjUwMiAyLjUwMiAwIDAwLTEuNDcuNDUgMSAxIDAgMDAtLjQyLjY3MS4yNS4yNSAwIDAwLjE3LjIwNWguMDV2LjA1NWEuNS41IDAgMDAuMjEuNDUgMS4zMSAxLjMxIDAgMDAxLjA2NS0uMzEgMS4yOSAxLjI5IDAgMDEuMzQtLjE3Yy4xMy0uMDQ1LjE2LS4wNTUuMTgtLjM2NXYtLjI1Yy4wMjQtLjI1LjAzNC0uNS4wMy0uNzVoLS4xNTV2LjAxNHpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuMzE1IDE3LjNhLjc0NS43NDUgMCAwMC4zNzYtLjIxelwiLFxuICAgIGZpbGw6IFwiI0M3QjE5OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMTUgMTcuMzkxYS4wOTIuMDkyIDAgMTEtLjA1NS0uMTc1aC4wNmEuNTQuNTQgMCAwMC4yNzUtLjE2LjA5Mi4wOTIgMCAwMS4wNi0uMDM1LjA5LjA5IDAgMDEuMDY4LjAxNy4wOS4wOSAwIDAxLjAzNS4wNi4wOTEuMDkxIDAgMDEtLjAxOC4wNjguNy43IDAgMDEtLjM2LjIyaC0uMDY1di4wMDV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjQ5NiA2LjA1QzIuODggNS4wNDkgNS41NzEuNDMgOC40OTggMi4zMjJMNi40OTYgNi4wNXpcIixcbiAgICBmaWxsOiBcIiM3NENERERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTQxIDYuMTU0aC0uMDdjLTEuMDMtLjI5LTEuNjY2LS45LTEuNzg2LTEuNzE2YTIuMzk2IDIuMzk2IDAgMDExLjExNi0yLjI2IDIuNDIxIDIuNDIxIDAgMDEyLjcyMi4wOWwuMDcuMDQ0TDYuNTQgNi4xNTR6bS41LTQuMTkyYy0uNDEgMC0uODExLjEyLTEuMTU1LjM0NUEyLjIxMSAyLjIxMSAwIDAwNC44NSA0LjM5M2MuMTEuNzI2LjY3IDEuMjc2IDEuNTg2IDEuNTUxbDEuOTAxLTMuNTg3YTIuNTAxIDIuNTAxIDAgMDAtMS4yOC0uMzhsLS4wMTUtLjAxNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyLjU2NiAxLjk3N2MyLjg2Mi0yLjAwMSA1LjQ0OCAyLjUwMiAyLjEyMSAzLjY2N2wtMi4xMjEtMy42Njd6XCIsXG4gICAgZmlsbDogXCIjNzRDREREXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNC42NDcgNS43NTRsLTIuMjAxLTMuODAyLjA2NS0uMDQ1YTIuMzYyIDIuMzYyIDAgMDEyLjYyNi0uMjIgMi40MjcgMi40MjcgMCAwMTEuMTk2IDIuMjQxYy0uMDUuNS0uMzIgMS4zNTYtMS42MTYgMS44MDFsLS4wNy4wMjV6bS0xLjk2MS0zLjc1MmwyLjA0MSAzLjUzMmExLjk1NiAxLjk1NiAwIDAwMS40MjYtMS42MiAyLjI0IDIuMjQgMCAwMC0xLjEwNi0yLjA3NyAyLjEyNiAyLjEyNiAwIDAwLTIuMzYxLjE2NXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzLjE4MSAyOC45MjhjLjcyNi40NSAyLjA1NiAxLjgxMS45NjYgMi40NzEtMS4wNDYuOTYxLTEuNjM2LTEuMDU1LTIuNTU3LTEuMzNhMi41NDkgMi41NDkgMCAwMTEuNTkxLTEuMTQxelwiLFxuICAgIGZpbGw6IFwiI0Y2RDJBMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMuNTkyIDMxLjc0NWgtLjA0Yy0uNDE2LS4wMjUtLjc1Ni0uNDMtMS4wODYtLjgxNmEyLjMzIDIuMzMgMCAwMC0uOS0uNzc1bC0uMTItLjAzNS4wNzQtLjEyNWEyLjY1NiAyLjY1NiAwIDAxMS42NDYtMS4xNzZoLjA2NWMuNDY2LjI5IDEuNDI2IDEuMTMgMS40MjEgMS44OTFhLjgzNS44MzUgMCAwMS0uNDUuNzI1LjkwNS45MDUgMCAwMS0uNjEuMzF6bS0xLjg2MS0xLjcyMWMuMzM5LjIuNjMzLjQ2Ny44NjUuNzg1LjIxOS4zNi41Ni42MjguOTYuNzU1YS43MTYuNzE2IDAgMDAuNS0uMjM1LjY2MS42NjEgMCAwMC4zNzEtLjU4YzAtLjYxLS43Ny0xLjM3Ni0xLjMwNi0xLjcyMWEyLjM1MSAyLjM1MSAwIDAwLTEuMzg2Ljk5NmgtLjAwNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0LjE0NyAzMS40OTRhLjA5LjA5IDAgMDEtLjA4LS4wNWMtLjA1My0uMTEtLjEtLjIyNC0uMTQtLjM0YTEuNSAxLjUgMCAwMC0uMzMtLjYxLjA5MS4wOTEgMCAwMS0uMDIyLS4wOTguMDkuMDkgMCAwMS4xNDctLjAzMmMuMTcyLjE4OC4zLjQxNC4zNy42Ni4wMzkuMTEuMDg0LjIxNi4xMzUuMzJhLjA5LjA5IDAgMDEtLjA0LjEybC0uMDQuMDN6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4xODkgMzAuNDY0Yy0uODU2LjEzLTEuMzM2LjktMi4wNDYgMS4yOWEuNjIuNjIgMCAwMS0xLjAwMS0uMjM1LjMyNS4zMjUgMCAwMS0uMjYtLjEyYy0uNjItMSAuNjQ1LTEuNjk2IDEuMzEtMi4xODYuOTM2LS4xOCAxLjUxMS42MTUgMS45OTcgMS4yNXpcIixcbiAgICBmaWxsOiBcIiNGNkQyQTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNjkyIDMxLjk5NWEuNjEzLjYxMyAwIDAxLS4xNiAwIC43NC43NCAwIDAxLS40MzUtLjM3NS4zMDEuMzAxIDAgMDEtLjI0NS0uMTNjLS42LS45NDYuNDItMS42NjIgMS4wOTYtMi4xMzdsLjIzNS0uMTdjLjk0NS0uMTkgMS41NDYuNTkgMi4wMjYgMS4yMmwuMTM1LjE4MWgtLjE1YTIuNTg2IDIuNTg2IDAgMDAtMS4yNjYuNzI1Yy0uMjMuMjEyLS40ODIuNC0uNzUuNTZhMS4wMDEgMS4wMDEgMCAwMS0uNDg2LjEyNnptLS42LS41OGEuMjQ1LjI0NSAwIDAxLjEwNSAwaC4wMjVsLjA0LjA4YS41OC41OCAwIDAwLjMzNS4zMDUuNjg2LjY4NiAwIDAwLjUtLjEyYy4yNi0uMTU1LjUwMy0uMzM3LjcyNi0uNTRhMyAzIDAgMDExLjIwNi0uNzM2Yy0uNDYtLjYtMS0xLjI1LTEuNzg2LTEuMWwtLjIyNS4xNmMtLjY5LjUtMS41NDYgMS4wOS0xLjA1MSAxLjg4NWEuMTQ2LjE0NiAwIDAwLjEwNS4wN2wuMDItLjAwNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMTU3IDMxLjYxNGEuMDkuMDkgMCAwMS0uMDktLjEyYy4wMzctLjI0LjEzNy0uNDY2LjI5LS42NTUuMDcyLS4xLjEzNi0uMjA1LjE5LS4zMTVhLjA5LjA5IDAgMTEuMTY1LjA3NWMtLjA1OC4xMi0uMTI3LjIzNi0uMjA1LjM0NS0uMTMyLjE3LS4yMTcuMzcyLS4yNDUuNTg1YS4wOS4wOSAwIDAxLS4wNjcuMDg0LjA5LjA5IDAgMDEtLjAzOC4wMDJ6TTYuNjQ3IDQuNzhjLS41LS4yNS0uODI2LS41OTYtLjUzNi0xLjE0Ni4yOS0uNTUuNzctLjQ1NSAxLjI1MS0uMjA1bC0uNzE1IDEuMzV6bTE3LjI4NS0uNDhjLjUtLjI1LjgyNS0uNTk2LjUzNS0xLjE0Ni0uMjktLjU1LS43Ny0uNDU2LTEuMjUtLjIwNWwuNzE1IDEuMzV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNy4yMTkgMTcuMTgxYy0uMDQ1Ljk0Ni0xLjAwMS41LTEuNDE2LjIxLS40MTYtLjI5LS41LS4wNDUtLjU2LS42YTkuMDY4IDkuMDY4IDAgMDEtLjA0Ni0xLjA5IDIuNjc3IDIuNjc3IDAgMDExLjc4Ny40NTRjLjI2LjE5Ljc0NS43OS4yNCAxLjAwMVwiLFxuICAgIGZpbGw6IFwiI0Y2RDJBMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYuNzI4IDE3Ljg0NmEyLjA0NiAyLjA0NiAwIDAxLS45NTUtLjM2IDEuMTE3IDEuMTE3IDAgMDAtLjMtLjE0NWMtLjItLjA3LS4yNzUtLjEzLS4zLS41di0uMjVhNi41MTYgNi41MTYgMCAwMS0uMDI2LS44NTZ2LS4xMmguMDc2YTIuNzUxIDIuNzUxIDAgMDExLjg0Ni40NyAxLjE1IDEuMTUgMCAwMS41LjgzLjQxMi40MTIgMCAwMS0uMjI1LjMyNi42Mi42MiAwIDAxLS4zMS41NS42MDUuNjA1IDAgMDEtLjMwNi4wNTV6bS0xLjQ1Ni0yLjA2Yy0uMDAzLjI1LjAwNy41LjAzLjc1di4yNWMwIC4zMDUuMDQ2LjMxNS4xOC4zNjUuMTIyLjA0LjIzNi4wOTcuMzQuMTdhMS4zMDcgMS4zMDcgMCAwMDEuMDY3LjMxLjUwMi41MDIgMCAwMC4yMS0uNDV2LS4wNmguMDVhLjI1LjI1IDAgMDAuMTctLjIwNSAxLjAwMiAxLjAwMiAwIDAwLS40Mi0uNjcgMi41NTIgMi41NTIgMCAwMC0xLjYyNy0uNDZ6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNy4yMTggMTcuMTgxYS43NDYuNzQ2IDAgMDEtLjM3NS0uMTk1elwiLFxuICAgIGZpbGw6IFwiI0M3QjE5OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcuMjE5IDE3LjI3MWgtLjA5NWEuNy43IDAgMDEtLjM1LS4yNS4wOS4wOSAwIDAxLS4wMDctLjEwMS4wOTEuMDkxIDAgMDEuMTUyLS4wMS41NC41NCAwIDAwLjI3NS4xNmguMDZhLjEwMS4xMDEgMCAxMS0uMDM1LjIwMXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjQwNy4wNjZjMy42MjIgMCA3LjAwNC41IDguNzg1IDQuMDAyIDEuNTg2IDMuODk4IDEgOC4xMDUgMS4yNjYgMTIuMjIzLjIxIDMuNTM3LjY3IDcuNjI0LS45NyAxMC45MDYtMS43MTcgMy40NDItNi4wNSA0LjI5Ny05LjYwMSA0LjE4Mi0yLjc5Mi0uMS02LjE2NC0xLTcuNzQtMy41NjItMS44NTEtMy4wMDItLjk3Ni03LjQ0NC0uODQtMTAuNzcxLjE2LTMuOTQyLTEuMDcxLTcuOS4yMjUtMTEuNzYyQzcuODc3IDEuMjgyIDExLjUuMzc2IDE1LjQwMi4wNjZcIixcbiAgICBmaWxsOiBcIiM3NENERERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjUwMiAzMS40OTRoLS42MmExMy4yMDIgMTMuMjAyIDAgMDEtNC4zNTgtLjg3IDYuOTY5IDYuOTY5IDAgMDEtMy40NTctMi43MzdjLTEuNTAxLTIuNDIxLTEuMjMtNS43NjMtMS04LjcxNS4wNi0uNzQuMTE0LTEuNDQ2LjE0LTIuMTA2LjAyNi0xLjQtLjAzNC0yLjgtLjE4LTQuMTkyLS4yMTEtMi41MDItLjQzMS01LjA4OS40MS03LjU5NWE2LjY0NCA2LjY0NCAwIDAxMy41MDEtNC4wNDdDMTEuMjkuNTcyIDEyLjk0LjE5IDE1LjM2NyAwYzMuNTcyLS4wMjUgNy4wOTQuNDc1IDguOTA1IDQuMDIyIDEuMTYgMi44NTIgMS4xNzYgNS45MTQgMS4xOTYgOC44NzYgMCAxLjExIDAgMi4yNTYuMDggMy4zNzcgMCAuMzQuMDQuNjg1LjA2NSAxLjAzLjIxIDMuMjQ3LjQ1IDYuOTM0LTEuMDQ2IDkuOTE2LTEuODcxIDMuNzMyLTYuNTc0IDQuMjcyLTkuMDY1IDQuMjcyek0xNS40MDcuMTU2Yy0zLjc2OC4zMi03LjQ0IDEuMTMtOC43OSA1LjE1OC0uODMxIDIuNDcxLS42MSA1LjAzOC0uNDA2IDcuNTA0LjE0NyAxLjQuMjA3IDIuODA2LjE4IDQuMjEzLS4wMjUuNjY1LS4wODUgMS4zNy0uMTQgMi4xMTYtLjIzIDIuOTIyLS41IDYuMjM5Ljk2NiA4LjYwNS42MTUgMSAyLjU5NiAzLjMzNyA3LjY3IDMuNTAyIDIuMTk2LjA4IDcuNTA0LS4xNyA5LjUwNS00LjE0MiAxLjQ3LTIuOTQyIDEuMjM2LTYuNTk5IDEuMDI2LTkuODI2IDAtLjM1LS4wNDUtLjY5NS0uMDY1LTEuMDNhNjcuNDUxIDY3LjQ1MSAwIDAxLS4wOC0zLjM1M2MwLTIuOTQxLS4wMy02LjAwMy0xLjE4MS04LjgwNUE2LjQzOCA2LjQzOCAwIDAwMjAuNDQ1Ljg0MWExNC45NiAxNC45NiAwIDAwLTUuMDM4LS42ODV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi4wNDIgNC45MjRjLjY1IDMuNzc3IDYuODI0IDIuNzgxIDUuOTM4LTEuMDMtLjc5NS0zLjQxOC02LjE1My0yLjQ3Mi01LjkzOCAxLjAzelwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguOTc5IDcuMzlhMy40NTcgMy40NTcgMCAwMS0xLjEzLS4xODUgMi43OTcgMi43OTcgMCAwMS0xLjg5Mi0yLjI2NiAyLjg4MiAyLjg4MiAwIDAxLjc4LTIuMjIyIDMuNDA3IDMuNDA3IDAgMDEyLjAwMi0xIDMuMjAyIDMuMjAyIDAgMDEyLjAzMS4zNSAyLjcyNyAyLjcyNyAwIDAxMS4yOTYgMS44MDYgMi42NDMgMi42NDMgMCAwMS0uNzcgMi42ODIgMy41MDIgMy41MDIgMCAwMS0yLjMxNy44MzV6bS0yLjg0Ny0yLjQ3NmEyLjYyNiAyLjYyNiAwIDAwMS43NzYgMi4xMjYgMy40MTcgMy40MTcgMCAwMDMuMjc3LS42MiAyLjUwMiAyLjUwMiAwIDAwLjcxNi0yLjUwMiAyLjY3MiAyLjY3MiAwIDAwLTMuMTMyLTIuMDMxIDIuODg3IDIuODg3IDAgMDAtMi42MzcgMy4wMjd6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjY2MyA1LjUzOWMuODQgMy4yODcgNi4xMDMgMi40NDEgNS45MDgtLjg1NS0uMjM1LTMuOTUzLTYuNzE0LTMuMjA3LTUuOTA4Ljg1NXpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjQ3NCA3LjcwNWEzLjIzMiAzLjIzMiAwIDAxLTEuNTM2LS4zNzUgMi43MjcgMi43MjcgMCAwMS0xLjM1NS0xLjc3NiAyLjc1NyAyLjc1NyAwIDAxLjk0LTIuODI3IDMuNTUyIDMuNTUyIDAgMDEzLjUzMi0uNDUgMi42NzIgMi42NzIgMCAwMTEuNjAxIDIuNDAyYy4xMDUgMS43NS0xLjI4NiAyLjc3MS0yLjYxNyAzLjAwMWEzLjY1NyAzLjY1NyAwIDAxLS41NjUuMDI1ek04Ljc2MyA1LjUyQTIuNzMyIDIuNzMyIDAgMDAxMi4wMyA3LjUyYzEuMjYtLjIgMi41NzYtMS4xNiAyLjQ3Ni0yLjgwNmEyLjUwMSAyLjUwMSAwIDAwLTEuNS0yLjI2MiAzLjM3NyAzLjM3NyAwIDAwLTMuMzU4LjQzIDIuNTk3IDIuNTk3IDAgMDAtLjg4NSAyLjYzN3pcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2Ljc2NyA5LjQ4MWMuMDQ5LjUyMS4wNDkgMS4wNDYgMCAxLjU2NmExIDEgMCAwMS0uNTg1LjM2Ljg2MS44NjEgMCAwMS0uNjU1LS41Yy0uMDMyLS41OS0uMDE3LTEuMTgzLjA0NS0xLjc3bDEuMTk1LjM0NHpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjIzNyAxMS40ODNoLS4wMjVhLjk0NC45NDQgMCAwMS0uNzI1LS41NjYgNS45NSA1Ljk1IDAgMDEwLTEuMjE1YzAtLjE4NS4wMy0uMzguMDM1LS41N3YtLjE1bDEuMzUuNDE0di4wODVjMCAuMTYgMCAuMzMuMDI2LjUuMDQ1LjM1OC4wNDUuNzIgMCAxLjA3NnYuMDI1YS43NS43NSAwIDAxLS40NzYuMzRsLS4xNTUuMDZoLS4wM3ptLS41OC0uNjNhLjc2Ni43NjYgMCAwMC41Ni40NDVsLjE0LS4wNTZhLjYuNiAwIDAwLjM2Ni0uMjZjLjA0LS4zMzIuMDQtLjY2OCAwLTEgMC0uMTU1IDAtLjMwNS0uMDI2LS40NTVsLTEtLjMwNmMwIC4xNTUgMCAuMzEtLjAzLjQ2LS4wNDQuMzg4LS4wNS43NzgtLjAxNSAxLjE2NmwuMDA1LjAwNXpNMTAuMTE0IDUuOTY0Yy40OTEgMCAuODktLjQzMi44OS0uOTY1IDAtLjUzNC0uMzk5LS45NjYtLjg5LS45NjYtLjQ5MiAwLS44OS40MzItLjg5Ljk2NiAwIC41MzMuMzk4Ljk2NS44OS45NjV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC41MTkgNS40NjRjLjExNiAwIC4yMS0uMTEuMjEtLjI0NXMtLjA5NC0uMjQ1LS4yMS0uMjQ1Yy0uMTE2IDAtLjIxLjExLS4yMS4yNDVzLjA5NC4yNDUuMjEuMjQ1elwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcuNTY4IDUuNzI0Yy40ODMgMCAuODc1LS40MzIuODc1LS45NjUgMC0uNTMzLS4zOTItLjk2Ni0uODc1LS45NjYtLjQ4NCAwLS44NzYuNDMzLS44NzYuOTY2IDAgLjUzMy4zOTIuOTY1Ljg3Ni45NjV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy45NjMgNS4yMjRjLjExNCAwIC4yMDYtLjExLjIwNi0uMjQ1IDAtLjEzNi0uMDkyLS4yNDUtLjIwNi0uMjQ1LS4xMTMgMC0uMjA1LjExLS4yMDUuMjQ1cy4wOTIuMjQ1LjIwNS4yNDV6TTE0LjI2NiA5LjQwNmMtLjM5Ljk0MS4yMTUgMi44MjIgMS4yNyAxLjQzNmExMS4xMiAxMS4xMiAwIDAxLjA0Ni0xLjc3bC0xLjMxNi4zMzR6XCIsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC44MTIgMTEuNDI4YS41LjUgMCAwMS0uMjYtLjA3Yy0uNDI2LS4yNDYtLjY5MS0xLjI1MS0uMzktMi4wMDJ2LS4wNGwxLjUtLjM4di4xMmMwIC4xOTUgMCAuMzktLjAzNS41NzVhNS43MSA1LjcxIDAgMDAwIDEuMTgxdi4wNjVhMS4wNTYgMS4wNTYgMCAwMS0uODE1LjU1em0tLjQ5Ni0xLjk0N2MtLjIxNS41ODYtLjA0NSAxLjUwMS4zMyAxLjcxNi4yNy4xNTUuNTctLjExNS43OC0uMzg1YTYuMTI4IDYuMTI4IDAgMDEwLTEuMThjMC0uMTQ2IDAtLjMuMDMxLS40NWwtMS4xNC4zelwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuMzggNy41OTVhMS4xNDYgMS4xNDYgMCAwMC0uOTQgMS42MDFjLjUuOSAxLjYxMS0uMDggMi4zMDIgMCAuNzk1IDAgMS40NS44NCAyLjA5LjE1LjcxMS0uNzctLjMwNC0xLjUtMS4xLTEuODU2bC0yLjM1MS4xMDV6XCIsXG4gICAgZmlsbDogXCIjRjZEMkEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy4yNjggOS43MjdhMiAyIDAgMDEtLjczLS4yMDYgMi4yMDcgMi4yMDcgMCAwMC0uNzkxLS4yMmMtLjI4NyAwLS41Ny4wNjItLjgzLjE4LS41NjEuMTk1LTEuMTk2LjQxNi0xLjU1Ny0uMjNhMS4wOCAxLjA4IDAgMDEwLTEuMDUgMS4yODEgMS4yODEgMCAwMTEuMDAxLS42ODZsMi40MDYtLjEwNWMuNTkuMjUgMS4yNjYuNzA2IDEuMzgxIDEuMjM2YS45NTUuOTU1IDAgMDEtLjg4IDEuMDh6bS0xLjUwMS0uNjA2Yy4yOTYuMDI0LjU4NC4xMDQuODUuMjM1LjQ1LjE5LjgwNi4zMzUgMS4xNjYtLjA1NWEuNjY0LjY2NCAwIDAwLjIwNS0uNjA1Yy0uMS0uNDYtLjczNS0uODgtMS4yNTYtMS4xbC0yLjMyNi4wOTRhMS4xMSAxLjExIDAgMDAtLjg1LjU5LjkwNi45MDYgMCAwMDAgLjg3NmMuMjg1LjUuNzk1LjMzNSAxLjM0LjE1LjI3NC0uMTIyLjU3LS4xODUuODctLjE4NXpcIixcbiAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjI2NiA3LjU2Yy0uMDU1LTEuMjUgMi4zMzYtMS40MSAyLjYxNy0uMzYuMjggMS4wNS0yLjUwMiAxLjI5LTIuNjE3LjM2elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR29sYW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvR29vZ2xlRyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR29vZ2xlRyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19nb29nbGVfZycpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNMTUuMzE5IDMuMjc4YzAtMS4xMzEtLjEwMi0yLjIyLS4yOS0zLjI2NEgwdjYuMTcyaDguNTg3Yy0uMzcgMS45OTUtMS40OTQgMy42ODUtMy4xODQgNC44MTZ2NC4wMDRoNS4xNTdjMy4wMTctMi43NzggNC43NTgtNi44NjkgNC43NTgtMTEuNzI4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICBkOiBcIk0xNC4zNDMgMTIuOTU2YzQuMzA4IDAgNy45Mi0xLjQzIDEwLjU2LTMuODY2bC01LjE1Ny00LjAwNGMtMS40MjkuOTU4LTMuMjU2IDEuNTIzLTUuNDAzIDEuNTIzLTQuMTU2IDAtNy42NzQtMi44MDYtOC45MjgtNi41NzhILjA4NHY0LjEzNGMyLjYyNSA1LjIxNSA4LjAyMSA4Ljc5IDE0LjI1OSA4Ljc5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICBkOiBcIk03LjAyOCAxMC4yNWE5LjU5IDkuNTkgMCAwMS0uNS0zLjAzMiA5LjU5IDkuNTkgMCAwMS41LTMuMDMyVi4wNTJoLTUuMzNBMTUuOTUgMTUuOTUgMCAwMDAgNy4yMThjMCAyLjU3NS42MTcgNS4wMTIgMS42OTcgNy4xNjZsNS4zMzEtNC4xMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIGQ6IFwiTTE0LjM0MyA2LjM5MmMyLjM0MiAwIDQuNDQ2LjgwNSA2LjEgMi4zODZsNC41NzYtNC41NzZDMjIuMjU2IDEuNjI3IDE4LjY0NC4wNDYgMTQuMzQzLjA0NiA4LjEwNS4wNDYgMi43MDkgMy42MjIuMDgzIDguODM2bDUuMzMyIDQuMTM0YzEuMjU0LTMuNzcgNC43NzItNi41NzggOC45MjgtNi41Nzh6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDE1Ljk1NSAxMy4wODcpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0Mjg1RjRcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk0uMDAxIDE1LjAwNmgxNS4zMThWLjAxNEguMDAxelwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMS42MTMgMTkuMDAzKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzRBODUzXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNLjA4NCAxMi45NTZoMjQuODE5Vi4wMzFILjA4NHpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgOC43ODQpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQkJDMDRcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdmJyksIFwiKVwiKSxcbiAgICBkOiBcIk0wIDE0LjM4NGg3LjAyOFYuMDUySDB6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxLjYxMylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2gnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdnJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0VBNDMzNVwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2gnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTS4wODQgMTIuOTdoMjQuOTM1Vi4wNDZILjA4NHpcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR29vZ2xlRzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0hhcHJveHkgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0hhcHJveHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29faGFwcm94eScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGNsaXBQYXRoOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2NsaXAwJyksIFwiKVwiKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuMDUgMTMuMjM3bC0zLjExLTMuNjEyXCIsXG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VXaWR0aDogMC4xMixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMTE3IDEwLjUyOGwyLjUwOSAzLjUxMlwiLFxuICAgIHN0cm9rZTogXCIjMDU0ODZEXCIsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDYsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi4wNSAxMy4yMzdsMy4xMS0zLjYxMk0xOS44NjMgMTcuMTVsMy43MTItMy4xMU0xOS44NjMgMTcuMTVsMy43MTIgMy4zMTFNMTkuMTYgMjQuNTc1bC0zLjExLTMuNTExTTEyLjk0IDI0LjU3NWwzLjExLTMuNTExTTguNjI1IDIwLjI2bDMuNTEyLTMuMTFNOC42MjUgMTQuMDRsMy41MTIgMy4xMU0xNi4wNSAxMy4yMzhsLTcuNDI1LjgwMk0xNi4wNSAxMy4yMzhsNy41MjUuODAyTTE5Ljg2MyAxNy4xNWwtLjcwMi03LjUyNU0xOS44NjMgMTcuMTVsLS43MDIgNy40MjVNMjMuNTc1IDIwLjQ2MWwtNy41MjUuNjAyTTguNjI1IDIwLjI2MWw3LjQyNS44MDNNMTIuOTQgMjQuNTc1bC0uODAzLTcuNDI1TTEyLjk0IDkuNjI1bC0uODAzIDcuNTI1XCIsXG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VXaWR0aDogMC4xMixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTE0IDE1LjA0M2wzLjUxMS0xLjAwM005LjMyOCA3LjExN2wzLjYxMiAyLjUwOU0xMy43NDMgNS41MTJsLS44MDMgNC4xMTNNMTMuNzQzIDUuNTEybDUuNDE4IDQuMTEzTTE4LjM1OCA1LjUxMmwuODAzIDQuMTEzTTIyLjc3MyA3LjExN0wxOS4xNiA5LjYyNk0yNS45ODMgMTAuNTI4bC02LjgyMi0uOTAzTTIzLjU3NSAxNC4wNGwyLjQwOC0zLjUxMk0yMy41NzUgMTQuMDRsMy40MTIgMS4wMDNNMjMuNTc1IDE0LjA0bDMuNDEyIDUuMjE3TTE4LjM1OCA1LjUxMkwxMi45NCA5LjYyNU0yMy41NzYgMTQuMDRsLS44MDMtNi45MjNNMjMuNTc1IDIwLjQ2MmwzLjQxMi0xLjIwNE0yMy41NzUgMjAuNDYybDMuNDEyLTUuNDE4TTIzLjU3NSAyMC40NjFsMi40MDggMy4zMTJNMjMuNTc2IDIwLjQ2MWwtLjgwMyA2LjcyM00xOS4xNiAyNC41NzVsMy42MTMgMi42MDlNMTkuMTYgMjQuNTc1bDYuODIzLS44MDJNMTkuMTYgMjQuNTc1bC0uODAyIDQuMjE0TTE5LjE2IDI0LjU3NWwtNS40MTcgNC4yMTRNMTIuOTQgMjQuNTc1bC44MDMgNC4yMTRNMTIuOTQgMjQuNTc1bDUuNDE4IDQuMjE0TTEyLjk0IDI0LjU3NWwtMy42MTIgMi42MDlNMTIuOTQgMjQuNTc1bC02LjgyMy0uODAyTTguNjI2IDIwLjI2MWwtMi41MDkgMy41MTJNOC42MjUgMjAuMjYxbC43MDMgNi45MjNNOC42MjUgMjAuMjZsLTMuNTExLTEuMDAyTTguNjI1IDE0LjA0bC0zLjUxMSA1LjIxN004LjYyNSAyMC4yNmwtMy41MTEtNS4yMTdNOS4zMjggNy4xMTdsLS43MDMgNi45MjNNNi4xMTcgMTAuNTI4bDYuODIzLS45MDNcIixcbiAgICBzdHJva2U6IFwiIzA1NDg2RFwiLFxuICAgIHN0cm9rZVdpZHRoOiAwLjA2LFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4zMjcgNy4xMTdMNi43MiA1LjgxM005LjMyOCA3LjExN2wtLjIwMS0yLjkxTTEzLjc0MiA1LjUxMkw5LjEyNyA0LjIwN00xMy43NDIgNS41MTJsLTIuMDA2LTIuNTA5TTEzLjc0MyA1LjUxMmwuODAyLTIuOTFNOS4zMjggNy4xMTdsMi40MDgtNC4xMTRNMTguMzU4IDUuNTEybC0zLjgxMy0yLjkxTTE4LjM1OCA1LjUxMmwtLjgwMy0zLjAxTTEzLjc0MyA1LjUxMmwzLjgxMi0zLjAxTTE4LjM1OCA1LjUxMmwyLjAwNy0yLjUwOU0yMi43NzMgNy4xMTdsLTIuNDA4LTQuMTE0TTIyLjc3MyA3LjExN2wuMzAxLTIuOTFNMTguMzU4IDUuNTEybDQuNzE2LTEuMzA1TTIyLjc3MyA3LjExN2wyLjcwOS0xLjQwNU0yMi43NzMgNy4xMTdsNC43MTYuNzAzTTI1Ljk4MyAxMC41MjhsMS41MDUtMi43MDlNMjUuOTg0IDEwLjUyOGwtLjUwMi00LjgxNk0yNS45ODMgMTAuNTI4bDMuMTEtLjNNMjUuOTgzIDEwLjUyOGw0LjIxNCAyLjMwOE0yNi45ODcgMTUuMDQ0bDIuMTA3LTQuODE3TTI2Ljk4NyAxNS4wNDNsMy4yMS0yLjIwN00yNi45ODcgMTUuMDQzbDMuNjEyLjcwM00yNi45ODcgMTkuMjU4bDMuNjEyLTMuNTEyTTI2Ljk4NyAxOS4yNThsMy43MTItLjcwM00yNi45ODcgMTUuMDQzbDMuNzEyIDMuNTEyTTI2Ljk4NyAxOS4yNThsMy4xMSAyLjEwN00yNS45ODMgMjMuNzczbDQuMTE0LTIuNDA5TTI1Ljk4MyAyMy43NzNsMy4xMS4zTTI2Ljk4NyAxOS4yNThsMi4xMDcgNC44MTZNMjUuOTgzIDIzLjc3M2wxLjUwNSAyLjcwOU0yNS45ODQgMjMuNzczbC0uNTAyIDQuNzE1TTI1LjQ4MiAyOC40ODhsLTIuNzEtMS4zMDRNMjIuNzczIDI3LjE4NGwuMiAyLjkxTTIyLjc3MyAyNy4xODRsNC43MTYtLjcwM00yMi43NzMgMjcuMTg0bC0yLjQwOCA0LjExNE0xOC4zNTggMjguNzlsMi4wMDcgMi41MDhNMTguMzU4IDI4Ljc5bDQuNjE1IDEuMzA0TTE4LjM1OCAyOC43OWwtLjgwMyAzLjAxTTE4LjM1OCAyOC43OWwtMy44MTMgMy4wMU0xMy43NDMgMjguNzlsLjgwMiAzLjAxTTEzLjc0MyAyOC43OWwzLjgxMiAzLjAxTTEzLjc0MiAyOC43OWwtMi4wMDYgMi41MDhNOS4zMjggMjcuMTg0bDIuNDA4IDQuMTE0TTEzLjc0MiAyOC43OWwtNC42MTUgMS40MDRNOS4zMjggMjcuMTg0bC0uMjAxIDMuMDFNOS4zMjggMjcuMTg0bC0yLjcxIDEuNDA0TTYuMTE3IDIzLjc3M2wuNTAyIDQuODE2TTkuMzI4IDI3LjE4NGwtNC43MTYtLjcwM002LjExNyAyMy43NzNsLTEuNTA1IDIuNzA5TTYuMTE3IDIzLjc3M2wtMy4xMS4zTTYuMTE3IDIzLjc3M2wtNC4yMTQtMi40MDlNNS4xMTQgMTkuMjU4bC0zLjIxIDIuMTA3TTUuMTE0IDE5LjI1OEwxLjQgMTguNTU1TTUuMTE0IDE5LjI1OGwtMi4xMDcgNC44MTZNNS4xMTQgMTUuMDQzTDEuNCAxOC41NTVNNS4xMTQgMTkuMjU4TDEuNCAxNS43NDZNNS4xMTQgMTUuMDQzbC0zLjExLTIuMTA2TTUuMTE0IDE1LjA0M2wtMy43MTMuNzAzTTUuMTE0IDE1LjA0NGwtMi4wMDctNC44MTdNNi4xMTcgMTAuNTI4bC0zLjAxLS4zTTYuMTE3IDEwLjUyOGwtNC4xMTQgMi40MDhNNi4xMTcgMTAuNTI4TDQuNzEyIDcuOTJNNi4xMTcgMTAuNTI4bC42MDItNC43MTVNOS4zMjggNy4xMTdsLTQuNjE2LjgwM1wiLFxuICAgIHN0cm9rZTogXCIjMDgzRDVGXCIsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDUsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy45NDMgMTUuMjQ0aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJ6TTE3Ljc1NiAxMS4zMzFoLTMuNjEydjMuNTkyaDMuNjEydi0zLjU5MnpNMTcuNzU2IDE5LjE1N2gtMy42MTJ2My41OTJoMy42MTJ2LTMuNTkyek0yMS42NjkgMTUuMjQ0aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJ6XCIsXG4gICAgZmlsbDogXCIjMDA2REE4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4zNjUgOC40MjFoLTIuNTA5VjEwLjloMi41MDlWOC40MnpNMTQuMTQ0IDguMzIxaC0yLjUwOXYyLjQ3OGgyLjUwOVY4LjMyMXpNOS44MyAxMi44MzZINy4zMnYyLjQ3OEg5Ljgzdi0yLjQ3OHpNOS44MyAxOC45NTZINy4zMnYyLjQ3OUg5Ljgzdi0yLjQ3OXpNMjQuNjc5IDE4Ljk1NkgyMi4xN3YyLjQ3OWgyLjUwOXYtMi40Nzl6TTI0LjY3OSAxMi43MzZIMjIuMTd2Mi40NzhoMi41MDl2LTIuNDc4elwiLFxuICAgIGZpbGw6IFwiIzJGNzdCQ1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi45MiA5LjYyNUg1LjMxNHYxLjY3Nkg2LjkyVjkuNjI1ek0xMC4xMyA2LjIxNEg4LjUyNnYxLjY3NWgxLjYwNlY2LjIxNHpNMTQuNDQ1IDQuNjA5aC0xLjYwNnYxLjY3NWgxLjYwNlY0LjYxek01LjkxNiAxNC4xNEg0LjMxMXYxLjY3NmgxLjYwNVYxNC4xNHpNMjYuNzg2IDkuODI2SDI1LjA4djEuNjQ2aDEuNzA2VjkuODI2ek0yMy41NzUgNi40MTVIMjEuODdWOC4wNmgxLjcwNVY2LjQxNXpNMTkuMjYgNC44MWgtMS43MDV2MS42NDVoMS43MDZWNC44MDl6TTI3LjY4OSAxNC40NDFoLTEuNjA1djEuNjQ2aDEuNjA1VjE0LjQ0elwiLFxuICAgIGZpbGw6IFwiIzEzOUJEN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuMTQ0IDIzLjI3aC0yLjUwOXYyLjQ3OWgyLjUwOXYtMi40Nzh6TTIwLjI2NCAyMy4yN2gtMi41MDh2Mi40NzloMi41MDh2LTIuNDc4elwiLFxuICAgIGZpbGw6IFwiIzJGNzdCQ1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYuNjg1IDIyLjc3SDI1LjA4djEuNjc1aDEuNjA1di0xLjY3NnpNMjMuMzc1IDI2LjA4SDIxLjc3djEuNjc2aDEuNjA1VjI2LjA4ek0xOS4wNiAyNy42ODZoLTEuNjA1djEuNjc1aDEuNjA1di0xLjY3NXpNMjcuNTg5IDE4LjI1NGgtMS42MDZ2MS42NzZoMS42MDZ2LTEuNjc2ek02LjkyIDIyLjk3SDUuMjE0djEuNjQ2SDYuOTJWMjIuOTd6TTEwLjAzIDI2LjM4MUg4LjMyNXYxLjY0NmgxLjcwNVYyNi4zOHpNMTQuNDQ1IDI3Ljk4N2gtMS43MDZ2MS42NDVoMS43MDZ2LTEuNjQ1ek01LjgxNiAxOC4zNTVINC4yMVYyMGgxLjYwNnYtMS42NDV6XCIsXG4gICAgZmlsbDogXCIjMTM5QkQ3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjEyIDUuMzExaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMS45MDMgMTUuMjQ0SDF2LjkzM2guOTAzdi0uOTMzek0yNS43ODIgNS4yMWgtLjkwM3YuOTM0aC45MDNWNS4yMXpNMi41MDUgMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNHpNMTIuMTM3IDIuNTAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMy41MDggOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzek01LjExMyA3LjMxOEg0LjIxdi45MzNoLjkwM3YtLjkzM3pNOS42MjkgMy44MDZoLS45MDN2LjkwM2guOTAzdi0uOTAzek0xNS4wNDcgMi4xaC0uOTAzdi45MDNoLjkwM1YyLjF6TTIzLjM3NCAzLjYwNWgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI5LjI5NSA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTMwLjQ5OCAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0ek0yNy42OSA3LjMxOGgtLjkwNHYuOTMzaC45MDN2LS45MzN6TTMwLjkgMTUuMTQ0aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMTcuODU2IDJoLS45MDN2LjkzM2guOTAzVjJ6TTIwLjY2NSAyLjYwMmgtLjkwM3YuOTMzaC45MDN2LS45MzN6XCIsXG4gICAgZmlsbDogXCIjMDNBOURBXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjEyIDUuMzExaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMS45MDMgMTUuMjQ0SDF2LjkzM2guOTAzdi0uOTMzek0yNS43ODIgNS4yMWgtLjkwM3YuOTM0aC45MDNWNS4yMXpNMi41MDUgMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNHpNMTIuMTM3IDIuNTAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMy41MDggOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzek01LjExMyA3LjMxOEg0LjIxdi45MzNoLjkwM3YtLjkzM3pNOS42MjkgMy44MDZoLS45MDN2LjkwM2guOTAzdi0uOTAzek0xNS4wNDcgMi4xaC0uOTAzdi45MDNoLjkwM1YyLjF6TTIzLjM3NCAzLjYwNWgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI5LjI5NSA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTMwLjQ5OCAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0ek0yNy42OSA3LjMxOGgtLjkwNHYuOTMzaC45MDN2LS45MzN6TTMwLjkgMTUuMTQ0aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMTcuODU2IDJoLS45MDN2LjkzM2guOTAzVjJ6TTIwLjY2NSAyLjYwMmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI1LjY4MiAyNy44ODZoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zMSAxNy45NTNoLS45MDN2LjkzM0gzMXYtLjkzM3pNNy4xMiAyNy45ODdoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zMC4zOTggMjAuNzYzaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMjAuNjY1IDMwLjU5NmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI5LjI5NSAyMy4zNzFoLS45MDN2LjkzM2guOTAzdi0uOTMzek0yNy42OSAyNS43OGgtLjkwNHYuOTMyaC45MDN2LS45MzN6TTIzLjI3NCAyOS43OTNoLS45MDN2LjkwMmguOTAzdi0uOTAyek0xNy43NTYgMzEuNDk4aC0uOTAzdi45MDNoLjkwM3YtLjkwM3pNOS40MjggMjkuNDkyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMy41MDggMjMuNDcyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMi4zMDQgMjAuODYzaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNNS4wMTMgMjUuODhINC4xMXYuOTMzaC45MDN2LS45MzN6TTEuOTAzIDE3Ljk1M0gxdi45MzNoLjkwM3YtLjkzM3pNMTQuOTQ3IDMxLjQ5OGgtLjkwM3YuOTMzaC45MDJ2LS45MzN6TTEyLjEzNyAzMC41OTZoLS45MDN2LjkzM2guOTAzdi0uOTMzelwiLFxuICAgIGZpbGw6IFwiIzAzQTlEQVwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImNsaXBQYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnY2xpcDAnKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAwaDMydjMySDBWMHpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvSGFwcm94eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0libSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvSWJtKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2libScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiBcIjguMDA1JVwiLFxuICAgIHgyOiBcIjUzLjMzJVwiLFxuICAgIHkxOiBcIjc5LjMyMyVcIixcbiAgICB5MjogXCI3OS4zMjQlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjM0JEQURFXCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzAuNDc2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMzZDRUUxXCIsXG4gICAgc3RvcE9wYWNpdHk6IDAuMzgzXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzIxQTJFRlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiBcIjE5LjQ5NiVcIixcbiAgICB4MjogXCI3MS4zMDklXCIsXG4gICAgeTE6IFwiODMuMzQ0JVwiLFxuICAgIHkyOiBcIjE3LjYzOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyMDdGRkFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RUFGRjFcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICB4MTogXCIyMS45MDklXCIsXG4gICAgeDI6IFwiMjEuOTA5JVwiLFxuICAgIHkxOiBcIjk2LjMxNCVcIixcbiAgICB5MjogXCIyOS40NTQlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNDJDMUU2XCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNTcuMDc2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNkZCOUVGXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiODYuNzE2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjBDQkU3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNUNDRkU1XCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgeDE6IFwiOTYuMjA1JVwiLFxuICAgIHgyOiBcIi0xLjE3MiVcIixcbiAgICB5MTogXCIxMi42NjclXCIsXG4gICAgeTI6IFwiLTIyLjI1MiVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RkI5RUZcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIyMi40MjclXCIsXG4gICAgc3RvcENvbG9yOiBcIiMzOEQyRTBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5MS4yMDMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2QUJGRUNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1Q0NGRTVcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICB4MTogXCI5LjQwOCVcIixcbiAgICB4MjogXCI4MC41ODklXCIsXG4gICAgeTE6IFwiODcuNzY0JVwiLFxuICAgIHkyOiBcIjgzLjEzOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMxMjZDRkRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyMUExRUZcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzOEQyRTBcIixcbiAgICBkOiBcIk00LjI2MiAxMy4xMjJhLjYwNC42MDQgMCAwMS0uMy0uMDhsLTIuODQ0LTEuNjI1YS42MTcuNjE3IDAgMDEtLjI5NS0uNzM0LjYwOC42MDggMCAwMS44NjgtLjMxNWwyLjg0MyAxLjYyNWMuMjkuMTU5LjQwNS41MTQuMjYxLjgxYS42MDMuNjAzIDAgMDEtLjUzMy4zMnptNC45MTQtNC44NjRhLjYwMy42MDMgMCAwMS0uNTIyLS4yOThMNy4wMTIgNS4xNDRhLjYxNS42MTUgMCAwMS4xMTUtLjc4Mi42MDYuNjA2IDAgMDEuOTEuMTU3bDEuNjQgMi44MTNhLjYxNy42MTcgMCAwMS0uMTU4LjgxOWMtLjEuMDctLjIyLjEwNy0uMzQzLjEwN3ptNi4xMDctMi40MTZWMi42MzVhLjYyNC42MjQgMCAwMS41NzUtLjYzNC42MDUuNjA1IDAgMDEuNDQzLjE2NC41OTMuNTkzIDAgMDEuMTg2LjQzMXYzLjI4NWEuNTkzLjU5MyAwIDAxLS4xODYuNDMuNjA1LjYwNSAwIDAxLS40NDMuMTY1LjYyNC42MjQgMCAwMS0uNTc1LS42MzR6bTcuMzEyIDIuNDE2YS42MDQuNjA0IDAgMDEtLjM0My0uMTA3LjYxNy42MTcgMCAwMS0uMTU5LS44MmwxLjY0LTIuODEyYS42MDIuNjAyIDAgMDEuOTExLS4xNTdjLjIyMy4yLjI3MS41MjguMTE1Ljc4MkwyMy4xMTcgNy45NmEuNjAzLjYwMyAwIDAxLS41MjIuMjk4em00LjkxNCA0Ljg2NGEuNjAyLjYwMiAwIDAxLS41MzQtLjMxOS42MTYuNjE2IDAgMDEuMjYyLS44MWwyLjgxOC0xLjYxMWEuNjI2LjYyNiAwIDAxLjc4My4xMTIuNTkyLjU5MiAwIDAxLS4xNTYuOTA2bC0yLjg3MyAxLjY0M2EuNjA0LjYwNCAwIDAxLS4zLjA4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xNi41MzYgMTkuNjQ1bC0xLjIwNC0uMDA5Yy4wMjYtMy4zNzcgMi4xNDYtNi4zOTEgNS4zMzctNy41ODVhOC4zMDggOC4zMDggMCAwMTkuMDY4IDIuMTk3bC0uODk3Ljc5NWE3LjA5NyA3LjA5NyAwIDAwLTcuNzQ1LTEuODc2Yy0yLjcyNiAxLjAxOS00LjUzNyAzLjU5My00LjU1OSA2LjQ3OHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZDogXCJNLjAyOSAyMC45MDljLjAyMi0zLjM1NCAyLjQ3NS02LjIwOCA1LjgxNS02Ljc2NGwuMjAxIDEuMTc2Yy0yLjc2NC40Ni00Ljc5NCAyLjgyLTQuODEyIDUuNTk2TC4wMjkgMjAuOTF6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTguMjQ2IDI0LjczN2ExMC42MjUgMTAuNjI1IDAgMDEwLTE1LjEzMWM0LjIxOS00LjE3OCAxMS4wNi00LjE3OCAxNS4yNzkgMGExMC44OSAxMC44OSAwIDAxMS4zODQgMS42NzhsLTEuMDA0LjY1N2E5LjUxNyA5LjUxNyAwIDAwLTEuMjMxLTEuNDkyYy0zLjc1LTMuNzEzLTkuODI4LTMuNzEzLTEzLjU3NyAwYTkuNDQyIDkuNDQyIDAgMDAwIDEzLjQ0NWwtLjg1MS44NDN6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTUuODM2IDEzLjIzNGMuNDA0LTEuMzMyIDEuMzMtMi41NiAyLjQxLTMuNjI4IDQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwYTEwLjg5IDEwLjg5IDAgMDExLjM4NCAxLjY3OGwtMS4wMDQuNjU3YTkuNTE3IDkuNTE3IDAgMDAtMS4yMzEtMS40OTJjLTMuNzUtMy43MTMtOS44MjgtMy43MTMtMTMuNTc3IDBhOS40NzQgOS40NzQgMCAwMC0yLjA3NCAzLjA2Yy0xLjQ1MiAzLjQ1LTIuMzU4IDMuNTkzLTEuMTg3LS4yNzV6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2UnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTIzLjUyNCAyNy44N0g2Ljk2YTcuMDEyIDcuMDEyIDAgMDEtNC45MjItMi4wNTlBNi44NzYgNi44NzYgMCAwMS4wMjkgMjAuOTFsMS4yMDQuMDA5YTUuNjkgNS42OSAwIDAwMS42NiA0LjA1NSA1LjgwMiA1LjgwMiAwIDAwNC4wNzEgMS43MDVoMTYuNjE4YzIuNzguMDAyIDUuMzAyLTEuNjE2IDYuNDM4LTQuMTNhNi45MjkgNi45MjkgMCAwMC0xLjE4LTcuNTA1bC44OTctLjc5NWE4LjExMiA4LjExMiAwIDAxMS4zODQgOC43ODVjLTEuMzI5IDIuOTQzLTQuMjc5IDQuODM3LTcuNTM0IDQuODM4aC0uMDYzelwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0libTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0libU1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0libU1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNLjA0NyAyMi45MDlsMS4xODYuMDA5YTUuNjkgNS42OSAwIDAwMS42NiA0LjA1NSA1LjgwMiA1LjgwMiAwIDAwNC4wNzEgMS43MDVoMTYuNjE4YzIuNzguMDAyIDUuMzAyLTEuNjE2IDYuNDM4LTQuMTNhNi45MjkgNi45MjkgMCAwMC0xLjE4LTcuNTA1bC44OTctLjc5NWE4LjExMiA4LjExMiAwIDAxMS4zODQgOC43ODVjLTEuMzI5IDIuOTQzLTQuMjc5IDQuODM3LTcuNTM0IDQuODM4SDYuOTZhNy4wMTIgNy4wMTIgMCAwMS00LjkyMi0yLjA2QTYuODc2IDYuODc2IDAgMDEuMDI5IDIyLjkxaC4wMTgtLjAxOGMuMDE3LTIuNzEgMS42Mi01LjA5MSAzLjk5Ny02LjIuMTE0LS4wNTQuMzIuMjkuNjE5IDEuMDNhNS43MSA1LjcxIDAgMDAtMy40MTIgNS4xOGwtMS4xODYtLjAxem00LjIxNS05Ljc4N2EuNjA0LjYwNCAwIDAxLS4zLS4wOGwtMi44NDQtMS42MjVhLjYxNy42MTcgMCAwMS0uMjk1LS43MzQuNjA4LjYwOCAwIDAxLjg2OC0uMzE1bDIuODQzIDEuNjI1Yy4yOS4xNTkuNDA1LjUxNC4yNjEuODFhLjYwMy42MDMgMCAwMS0uNTMzLjMyem00LjkxNC00Ljg2NGEuNjAzLjYwMyAwIDAxLS41MjItLjI5OEw3LjAxMiA1LjE0NGEuNjE1LjYxNSAwIDAxLjExNS0uNzgyLjYwNi42MDYgMCAwMS45MS4xNTdsMS42NCAyLjgxM2EuNjE3LjYxNyAwIDAxLS4xNTguODE5Yy0uMS4wNy0uMjIuMTA3LS4zNDMuMTA3em02LjEwNy0yLjQxNlYyLjYzNWEuNjI0LjYyNCAwIDAxLjU3NS0uNjM0LjYwNS42MDUgMCAwMS40NDMuMTY0LjU5My41OTMgMCAwMS4xODYuNDMxdjMuMjg1YS41OTMuNTkzIDAgMDEtLjE4Ni40My42MDUuNjA1IDAgMDEtLjQ0My4xNjUuNjI0LjYyNCAwIDAxLS41NzUtLjYzNHptNy4zMTIgMi40MTZhLjYwNC42MDQgMCAwMS0uMzQzLS4xMDcuNjE3LjYxNyAwIDAxLS4xNTktLjgybDEuNjQtMi44MTJhLjYwMi42MDIgMCAwMS45MTEtLjE1N2MuMjIzLjIuMjcxLjUyOC4xMTUuNzgyTDIzLjExNyA3Ljk2YS42MDMuNjAzIDAgMDEtLjUyMi4yOTh6bTQuOTE0IDQuODY0YS42MDIuNjAyIDAgMDEtLjUzNC0uMzE5LjYxNi42MTYgMCAwMS4yNjItLjgxbDIuODE4LTEuNjExYS42MjYuNjI2IDAgMDEuNzgzLjExMi41OTIuNTkyIDAgMDEtLjE1Ni45MDZsLTIuODczIDEuNjQzYS42MDQuNjA0IDAgMDEtLjMuMDh6TTE2LjM2NiAxOS43OEgxNmEyLjMyMiAyLjMyMiAwIDAxLS4zMDIgMGMtLjA5LS4wMTEtLjE1Mi4wNS0uMDg2LS4xOTZhOC4yMDQgOC4yMDQgMCAwMTUuMDU3LTUuNTMzIDguMzA4IDguMzA4IDAgMDE5LjA2OCAyLjE5N2wtLjg5Ny43OTVhNy4wOTcgNy4wOTcgMCAwMC03Ljc0NS0xLjg3NiA3LjAwOSA3LjAwOSAwIDAwLTQuMjg4IDQuNjEzYy0uMTE1LjM5OS0uMTE1LjM5OSAwIDBoLS40NHpNNi4xNTQgMjMuODI2YTEwLjYyNiAxMC42MjYgMCAwMTIuMDkyLTEyLjIyYzQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwbC0uODUxLjg0M2MtMy43NS0zLjcxMy05LjgyOC0zLjcxMy0xMy41NzcgMEE5LjQ0MiA5LjQ0MiAwIDAwNy4yNjQgMjMuMzZhNi45OSA2Ljk5IDAgMDAtLjQxOC4xNzJsLS4yMTIuMDk0LS4xNjIuMDc3LS4wOTQuMDMtLjA5LjAzOWMuNjQ4LS4yODIuOTY1LS40Mi45NS0uNDEyLS4wMjYuMDE1LTEuMDczLjQ4OS0xLjA4NC40NjZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29JYm1Nb25vOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvS2Fma2EgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0thZmthKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuNTY1IDE3LjYyM2MtMS4xNzMgMC0yLjIyNS41Mi0yLjk0NSAxLjMzN2wtMS44NDUtMS4zMDZjLjE5Ni0uNTQuMzA5LTEuMTE4LjMwOS0xLjcyNCAwLS41OTYtLjEwOS0xLjE2NS0uMjk4LTEuNjk2bDEuODQtMS4yOTNhMy45MTQgMy45MTQgMCAwMDIuOTM5IDEuMzMxIDMuOTMgMy45MyAwIDAwMy45MjYtMy45MjYgMy45MyAzLjkzIDAgMDAtMy45MjYtMy45MjYgMy45MyAzLjkzIDAgMDAtMy45MjYgMy45MjZjMCAuMzg3LjA1OC43NjEuMTYzIDEuMTE1bC0xLjg0MiAxLjI5M2E1LjA2OCA1LjA2OCAwIDAwLTMuMTQtMS44MjVWOC43MWEzLjkzMiAzLjkzMiAwIDAwMy4xMTktMy44NDJBMy45MyAzLjkzIDAgMDAxMi4wMTIuOTQxYTMuOTMgMy45MyAwIDAwLTMuOTI2IDMuOTI2IDMuOTMgMy45MyAwIDAwMy4wNDggMy44MjR2Mi4yNDlhNS4wNzUgNS4wNzUgMCAwMC00LjE5MyA0Ljk5IDUuMDc1IDUuMDc1IDAgMDA0LjIyOSA0Ljk5NVYyMy4zYTMuOTMxIDMuOTMxIDAgMDAtMy4wODQgMy44MzMgMy45MyAzLjkzIDAgMDAzLjkyNiAzLjkyNiAzLjkzIDMuOTMgMCAwMDMuOTI3LTMuOTI2IDMuOTMxIDMuOTMxIDAgMDAtMy4wODQtMy44MzN2LTIuMzc1YTUuMDcgNS4wNyAwIDAwMy4wODctMS43OTVsMS44NTcgMS4zMTRjLS4xMDMuMzUxLS4xNi43MjEtLjE2IDEuMTA1YTMuOTMgMy45MyAwIDAwMy45MjYgMy45MjYgMy45MyAzLjkzIDAgMDAzLjkyNi0zLjkyNiAzLjkzIDMuOTMgMCAwMC0zLjkyNi0zLjkyNnptMC05LjE4YzEuMDUgMCAxLjkwMy44NTMgMS45MDMgMS45MDNzLS44NTQgMS45MDMtMS45MDMgMS45MDNhMS45MDYgMS45MDYgMCAwMS0xLjkwNC0xLjkwM2MwLTEuMDUuODU0LTEuOTA0IDEuOTA0LTEuOTA0ek0xMC4xMDkgNC44NjZjMC0xLjA1Ljg1NC0xLjkwMyAxLjkwMy0xLjkwMyAxLjA1IDAgMS45MDQuODU0IDEuOTA0IDEuOTAzIDAgMS4wNS0uODU0IDEuOTA0LTEuOTA0IDEuOTA0YTEuOTA2IDEuOTA2IDAgMDEtMS45MDMtMS45MDR6bTMuODA3IDIyLjI2NmMwIDEuMDUtLjg1NCAxLjkwMy0xLjkwNCAxLjkwM2ExLjkwNiAxLjkwNiAwIDAxLTEuOTAzLTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDMtMS45MDQgMS4wNSAwIDEuOTA0Ljg1NCAxLjkwNCAxLjkwNHptLTEuOTA0LTguNTQ4YTIuNjU4IDIuNjU4IDAgMDEtMi42NTUtMi42NTUgMi42NTggMi42NTggMCAwMTIuNjU1LTIuNjU1IDIuNjU4IDIuNjU4IDAgMDEyLjY1NSAyLjY1NSAyLjY1OCAyLjY1OCAwIDAxLTIuNjU1IDIuNjU1em05LjU1MyA0Ljg2N2ExLjkwNiAxLjkwNiAwIDAxLTEuOTA0LTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDQtMS45MDQgMS4wNSAwIDEuOTAzLjg1NCAxLjkwMyAxLjkwNCAwIDEuMDUtLjg1NCAxLjkwMy0xLjkwMyAxLjkwM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0thZmthOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvS2liYW5hID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29LaWJhbmEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTQgMHYyOC43ODlMMjguOTM1LjAxN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk00IDEydjE2Ljc4OWwxMS45MDYtMTMuNzM4QTI0LjcyMSAyNC43MjEgMCAwMDQgMTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTE4LjQ3OSAxNi42NjRMNi4yNjggMzAuNzU0bC0xLjA3MyAxLjIzN2gyMy4xOTFjLTEuMjUyLTYuMjkyLTQuODgzLTExLjcxOS05LjkwOC0xNS4zMjdcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29LaWJhbmE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29LdWJlcm5ldGVzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29LdWJlcm5ldGVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuODkuMDAzYTIuMTQgMi4xNCAwIDAxMS4wMy4yMDZsMTEuMTI3IDUuMzA0YTIuMTEgMi4xMSAwIDAxMS4xNSAxLjQyOWwyLjc1IDExLjkyMWEyLjA5IDIuMDkgMCAwMS0uNDEyIDEuNzgzbC03LjY5NyA5LjU2Yy0uNDA0LjUtMS4wMTYuNzkyLTEuNjYzLjc5MUw5LjgyNyAzMWMtLjY0OCAwLTEuMjYtLjI5Mi0xLjY2NC0uNzkzbC03LjctOS41NThhMi4xMDcgMi4xMDcgMCAwMS0uNDEtMS43ODNMMi43OTggNi45NDVhMi4xMSAyLjExIDAgMDExLjE1MS0xLjQzTDE1LjA3NC4yMWMuMjU1LS4xMjIuNTMyLS4xOTIuODE1LS4yMDZ6TTE2IDQuMDZjLS4zNjggMC0uNjY3LjMzLS42NjcuNzM4bC4wMDIuMDE5YzAgLjA1NS0uMDAzLjEyMi0uMDAyLjE3LjAxLjIzNi4wNi40MTYuMDkxLjYzMi4wNTcuNDY0LjEwMy44NDkuMDc0IDEuMjA2LS4wMjguMTM1LS4xMjcuMjU4LS4yMTYuMzQ0bC0uMDE1LjI4MWE4LjU2OSA4LjU2OSAwIDAwLTUuNTU1IDIuNjY2IDkuOTggOS45OCAwIDAxLS4yNC0uMTdjLS4xMi4wMTYtLjI0LjA1My0uMzk2LS4wMzgtLjI5OC0uMi0uNTctLjQ3Ny0uODk4LS44MS0uMTUtLjE2LS4yNi0uMzEtLjQzOC0uNDY0LS4wNC0uMDM1LS4xMDMtLjA4Mi0uMTQ4LS4xMThhLjc5My43OTMgMCAwMC0uNDY0LS4xNzUuNjQyLjY0MiAwIDAwLS41My4yMzRjLS4yMy4yODgtLjE1Ni43MjYuMTYzLjk4bC4wMS4wMDhjLjA0NC4wMzUuMDk4LjA4LjEzOC4xMS4xOS4xNC4zNjMuMjEyLjU1Mi4zMjMuMzk4LjI0Ni43MjkuNDUuOTkuNjk1LjEwMy4xMDguMTIuMy4xMzQuMzgzbC4yMTQuMTlhOC41OTIgOC41OTIgMCAwMC0xLjM2IDUuOTk4bC0uMjc4LjA4Yy0uMDc0LjA5Ni0uMTc3LjI0NS0uMjg2LjI5LS4zNDMuMTA3LS43MjguMTQ3LTEuMTk0LjE5NS0uMjE4LjAxOC0uNDA3LjAwOC0uNjM5LjA1MS0uMDUuMDEtLjEyMi4wMjktLjE3Ny4wNDJsLS4wMDYuMDAxLS4wMS4wMDNjLS4zOTMuMDk1LS42NDUuNDU1LS41NjQuODEuMDgyLjM1NS40NjUuNTcuODYuNDg1bC4wMS0uMDAxLjAxMy0uMDA0Yy4wNTUtLjAxMi4xMjQtLjAyNi4xNzItLjAzOS4yMjgtLjA2LjM5My0uMTUuNTk3LS4yMjguNDQtLjE1OC44MDYtLjI5IDEuMTYxLS4zNDEuMTQ5LS4wMTIuMzA1LjA5MS4zODMuMTM1bC4yOS0uMDVhOC42NTQgOC42NTQgMCAwMDMuODQgNC43ODdsLS4xMi4yOWMuMDQzLjExMy4wOTEuMjY1LjA1OS4zNzYtLjEzLjMzNC0uMzUuNjg4LS42MDMgMS4wODEtLjEyMi4xODItLjI0Ny4zMjQtLjM1Ny41MzItLjAyNi4wNS0uMDYuMTI2LS4wODYuMTc5LS4xNy4zNjUtLjA0NS43ODYuMjg0Ljk0NC4zMy4xNi43NDEtLjAwOC45MTktLjM3NWwuMDAxLS4wMDF2LS4wMDJjLjAyNS0uMDUxLjA2MS0uMTIuMDgzLS4xNjkuMDk0LS4yMTUuMTI1LS40LjE5Mi0uNjA5LjE3Ni0uNDQyLjI3My0uOTA1LjUxNS0xLjE5NC4wNjctLjA4LjE3NS0uMTEuMjg3LS4xNGwuMTUxLS4yNzNhOC42MTYgOC42MTYgMCAwMDYuMTQ1LjAxNmwuMTQyLjI1NmMuMTE0LjAzNy4yMzkuMDU2LjM0LjIwNi4xODIuMzEuMzA2LjY3NS40NTcgMS4xMTguMDY2LjIwOC4xLjM5My4xOTQuNjEuMDIxLjA0OC4wNTcuMTE3LjA4Mi4xNy4xNzcuMzY3LjU5LjUzNS45Mi4zNzYuMzMtLjE1OC40NTUtLjU4LjI4NC0uOTQ1LS4wMjYtLjA1Mi0uMDYtLjEyOS0uMDg3LS4xNzktLjExLS4yMDgtLjIzNS0uMzQ4LS4zNTctLjUzLS4yNTItLjM5My0uNDYxLS43Mi0uNTktMS4wNTUtLjA1NS0uMTczLjAwOS0uMjguMDUtLjM5Mi0uMDI1LS4wMjktLjA3OS0uMTkyLS4xMS0uMjY4YTguNjU0IDguNjU0IDAgMDAzLjgzOC00LjgyMmMuMDg2LjAxNC4yMzYuMDQuMjg1LjA1LjEtLjA2Ni4xOTItLjE1Mi4zNzMtLjEzOC4zNTUuMDUyLjcyLjE4MyAxLjE2LjM0MS4yMDUuMDc4LjM3LjE3LjU5OC4yMy4wNDguMDEzLjExNy4wMjUuMTcyLjAzN2wuMDEzLjAwNC4wMS4wMDJjLjM5NS4wODUuNzc4LS4xMzEuODYtLjQ4Ni4wOC0uMzU1LS4xNzEtLjcxNS0uNTY0LS44MS0uMDU3LS4wMTMtLjEzOC0uMDM1LS4xOTMtLjA0NS0uMjMyLS4wNDQtLjQyLS4wMzMtLjY0LS4wNTEtLjQ2NS0uMDQ5LS44NS0uMDg5LTEuMTkzLS4xOTYtLjE0LS4wNTQtLjIzOS0uMjItLjI4Ny0uMjg5bC0uMjctLjA3OGE4LjU3MiA4LjU3MiAwIDAwLS4xMzktMy4xMDQgOC41OTkgOC41OTkgMCAwMC0xLjI0Ny0yLjg4Yy4wNjgtLjA2Mi4xOTktLjE3Ny4yMzYtLjIxLjAxLS4xMi4wMDEtLjI0NS4xMjUtLjM3Ny4yNjItLjI0Ni41OTItLjQ1Ljk5LS42OTUuMTktLjExLjM2NC0uMTgyLjU1NC0uMzIyLjA0My0uMDMyLjEwMS0uMDgyLjE0Ni0uMTE4LjMyLS4yNTUuMzkzLS42OTMuMTY0LS45OC0uMjMtLjI4Ny0uNjc0LS4zMTQtLjk5My0uMDYtLjA0Ni4wMzYtLjEwNy4wODMtLjE0OC4xMTgtLjE3OS4xNTMtLjI5LjMwNS0uNDQuNDY0LS4zMjguMzMzLS42LjYxMS0uODk4LjgxMi0uMTI5LjA3NS0uMzE4LjA0OS0uNDA0LjA0NGwtLjI1My4xOGE4LjczMiA4LjczMiAwIDAwLTUuNTI4LTIuNjY2IDE2LjAzNiAxNi4wMzYgMCAwMS0uMDE1LS4yOTdjLS4wODctLjA4My0uMTkyLS4xNTQtLjIxOC0uMzMzLS4wMjktLjM1Ny4wMi0uNzQyLjA3Ni0xLjIwNi4wMy0uMjE2LjA4Mi0uMzk2LjA5LS42MzIuMDAzLS4wNTMgMC0uMTMgMC0uMTg5IDAtLjQwOC0uMjk5LS43MzgtLjY2Ny0uNzM4em0tLjgzNCA1LjE1NmwtLjE5OCAzLjQ4OC0uMDE0LjAwN2EuNTg3LjU4NyAwIDAxLS45MzIuNDQ5bC0uMDA2LjAwMi0yLjg2NC0yLjAyN2E2Ljg2MiA2Ljg2MiAwIDAxNC4wMTQtMS45MTl6bTEuNjY4IDBhNi45MjIgNi45MjIgMCAwMTMuOTkgMS45MmwtMi44NDYgMi4wMTUtLjAxLS4wMDRhLjU4OC41ODggMCAwMS0uOTMzLS40NDhsLS4wMDMtLjAwMS0uMTk4LTMuNDgyem0tNi43MiAzLjIyMmwyLjYxNCAyLjMzNS0uMDAzLjAxNGEuNTg1LjU4NSAwIDAxLS4yMyAxLjAwOGwtLjAwMy4wMS0zLjM1Mi45NjdhNi44MzggNi44MzggMCAwMS45NzMtNC4zMzR6bTExLjc1My4wMDFjLjM4OC42My42ODMgMS4zMzEuODU4IDIuMDkzYTYuOTEgNi45MSAwIDAxLjE0NSAyLjIyOWwtMy4zNy0uOTctLjAwMi0uMDEzYS41ODYuNTg2IDAgMDEtLjIzLTEuMDA4bC0uMDAyLS4wMDcgMi42LTIuMzI0em0tNi40MDQgMi41MTVoMS4wNzFsLjY2Ni44My0uMjM5IDEuMDM4LS45NjIuNDYxLS45NjQtLjQ2My0uMjQtMS4wMzcuNjY4LS44M3ptMy40MzUgMi44NDRhLjU4NS41ODUgMCAwMS4xMzUuMDFsLjAwNS0uMDA4IDMuNDY4LjU4NmE2Ljg1OCA2Ljg1OCAwIDAxLTIuNzc2IDMuNDgxbC0xLjM0Ni0zLjI0Ni4wMDQtLjAwNWEuNTg2LjU4NiAwIDAxLjUxLS44MTh6bS01LjgyNC4wMTRhLjU4Ny41ODcgMCAwMS41My44MTdsLjAxLjAxMi0xLjMzMSAzLjIxNGE2Ljg4NiA2Ljg4NiAwIDAxLTIuNzY3LTMuNDU4bDMuNDM3LS41ODIuMDA2LjAwN2EuNTk1LjU5NSAwIDAxLjExNS0uMDF6bTIuOTA0IDEuNDA3YS41ODIuNTgyIDAgMDEuMjc1LjA1OS41ODMuNTgzIDAgMDEuMjYzLjI1aC4wMTNsMS42OTQgMy4wNTdjLS4yMi4wNzMtLjQ0Ni4xMzYtLjY3Ny4xODlhNi44OTYgNi44OTYgMCAwMS0zLjc1OC0uMTk0bDEuNjktMy4wNWguMDAzYS41ODguNTg4IDAgMDEuNDk3LS4zMXpcIixcbiAgICBmaWxsOiBcIiMzMjZDRTVcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0t1YmVybmV0ZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Mb2dnaW5nID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Mb2dnaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMiAxMHYxM2E5IDkgMCAwMTkgOWgxM2MwLTEyLjE1LTkuODUtMjItMjItMjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xNCAxMy41NjVWMzJoMTBjMC03LjcyMi0zLjk4MS0xNC41MS0xMC0xOC40MzZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTE0IDB2MTAuMjI2QzIxLjY2NiAxNC40NjggMjYuODY5IDIyLjYzNiAyNi44NjkgMzJIMzBWMTZjMC04LjgzNy03LjE2My0xNi0xNi0xNlwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTG9nZ2luZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0xvZ3N0YXNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Mb2dzdGFzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzNFQkVCMFwiLFxuICAgIGQ6IFwiTTE5IDMyaDExVjIwSDE5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJNNCAwSDN2MjBoMTN2LThDMTYgNS4zNzMgMTAuNjI3IDAgNCAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMyAyMGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDFWMjBIM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0xvZ3N0YXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvTWFwcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWFwcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzIyQTdGM1wiLFxuICAgIGQ6IFwiTTI1LjUgOS41YzAgNi42NS05LjUgMTEuNDI1LTkuNSAxMS40MjVTNi41IDE2LjE1IDYuNSA5LjVBOS41IDkuNSAwIDAxMTYgMGE5LjUgOS41IDAgMDE5LjUgOS41XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTYgMjAuOTI1czQuMzI2LTIuMTgzIDcuMTQxLTUuNjQ1bC0yLjUwNS0xLjg3OGE3LjcyNSA3LjcyNSAwIDAwLTkuMjcyIDBMOC44NTkgMTUuMjhDMTEuNjc0IDE4Ljc0MiAxNiAyMC45MjUgMTYgMjAuOTI1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIk0yNS41MyAxNy4wNzNhMjEuMTI0IDIxLjEyNCAwIDAxLTIuODM0IDIuOTE2Yy0yLjYyIDIuMjM1LTUuMjM5IDMuNTYxLTUuMzQ5IDMuNjE2TDE2IDI0LjI4MmwtMS4zNDgtLjY3N2MtLjEwOS0uMDU1LTIuNzI4LTEuMzgxLTUuMzQ5LTMuNjE2YTIxLjE4MiAyMS4xODIgMCAwMS0yLjgzNC0yLjkxNkwwIDIxLjkyNWwxMS4zNjQgOC41MjNhNy43MjQgNy43MjQgMCAwMDkuMjcxIDBMMzIgMjEuOTI1bC02LjQ3LTQuODUyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTWFwczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb01lbWNhY2hlZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWVtY2FjaGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX21lbWNhY2hlZCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIGN4OiBcIjQxLjQwNiVcIixcbiAgICBjeTogXCI0Mi43MDglXCIsXG4gICAgcjogXCIwJVwiLFxuICAgIGZ4OiBcIjQxLjQwNiVcIixcbiAgICBmeTogXCI0Mi43MDglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjREI3QzdDXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzgzNzM3XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicmFkaWFsR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgY3g6IFwiNDQuMjcxJVwiLFxuICAgIGN5OiBcIjQyLjcwOCVcIixcbiAgICByOiBcIjAlXCIsXG4gICAgZng6IFwiNDQuMjcxJVwiLFxuICAgIGZ5OiBcIjQyLjcwOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNEQjdDN0NcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDODM3MzdcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICB4MTogXCI1MCVcIixcbiAgICB4MjogXCI1MCVcIixcbiAgICB5MTogXCIxMDAlXCIsXG4gICAgeTI6IFwiMCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1NzRDNEFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM4MDcxNkRcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICB4MTogXCI4OC43NzglXCIsXG4gICAgeDI6IFwiMzAuMTQ5JVwiLFxuICAgIHkxOiBcIjk4LjM0MiVcIixcbiAgICB5MjogXCItOC42OCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyNjhEODNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyRUExOUVcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNMCAyMS41NjdWMTAuMzUyQzAgMS4yOTQgMS4yOTMgMCAxMC4zNDIgMGgxMS4yMzZjOS4wNDkgMCAxMC4zNDEgMS4yOTQgMTAuMzQxIDEwLjM1MnYxMS4yMTVjMCA5LjA1OS0xLjI5MiAxMC4zNTItMTAuMzQxIDEwLjM1MkgxMC4zNDJDMS4yOTIgMzEuOTIgMCAzMC42MjYgMCAyMS41Njd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTYuODg5IDYuMDE2QzUuMzIgMTUuOTYgNi4xNCAyNS4yNyA2LjE0IDI1LjI3aDQuOTA0Yy0uNDY2LTIuNDgzLTIuMTQtMTMuODI0LS43NDgtMTMuODYxLjc0Ni4xMTggNC4xNTYgOS42MjEgNC4xNTYgOS42MjFzLjc1MS0uMDkzIDEuNTA3LS4wOTNjLjc1NSAwIDEuNTA2LjA5MyAxLjUwNi4wOTNzMy40MS05LjUwMyA0LjE1Ny05LjYyMWMxLjM5Mi4wMzctLjI4MiAxMS4zNzgtLjc0OCAxMy44Nmg0LjkwNHMuODItOS4zMS0uNzQ4LTE5LjI1M2gtNC41NGMtLjg2NS4wMS00LjE1MyA1Ljc3Ny00LjUzMSA1Ljc3Ny0uMzc4IDAtMy42NjYtNS43NjctNC41My01Ljc3N0g2Ljg4OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpLCBcIilcIiksXG4gICAgZDogXCJNMTQuOTkzIDI0LjEwOWExLjE2IDEuMTYgMCAxMS0yLjMyMiAwIDEuMTYgMS4xNiAwIDAxMi4zMjIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNMTkuMjQ5IDI0LjEwOWExLjE2IDEuMTYgMCAxMS0yLjMyMiAwIDEuMTYgMS4xNiAwIDAxMi4zMjIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTI0LjggNi4zNDVjLjcwNyA0Ljc5Ljg3MyA5LjM4OC44NiAxMi44MTMtLjAxMyAzLjUwMy0uMjE0IDUuNzgtLjIxNCA1Ljc4aC00LjEyOGwtLjQ0My4zMzJoNC45MDRzLjgyLTkuMzEtLjc0OC0xOS4yNTRsLS4yMzIuMzI5em0tMTIuOTk2LS4xMjFjMS4yODggMS40MzMgMy41MTYgNS4yMzcgMy44MjMgNS4yMzctLjgxNy0xLjA0NS0yLjgyMy00LjM3OC0zLjgyMy01LjIzN3ptLTEuODQgNC44NTJjLTEuMzkyLjAzOC4yODIgMTEuMzc5Ljc0OSAxMy44NjFINi40M2wtLjI5LjMzM2g0LjkwNGMtLjQ2NC0yLjQ3LTIuMTIzLTEzLjcxLS43NjktMTMuODYxLS4xMjYtLjE5LS4yMzUtLjMyLS4zMTEtLjMzM3ptMTEuMzI2IDBjLS43NDYuMTE5LTQuMTU2IDkuNjIyLTQuMTU2IDkuNjIycy0uNzUxLS4wOTQtMS41MDctLjA5NGMtLjQ0NyAwLS44MzIuMDI4LTEuMDkyLjA1MmwtLjA4Mi4zNzRzLjc1MS0uMDkzIDEuNTA3LS4wOTNjLjc1NSAwIDEuNTA2LjA5MyAxLjUwNi4wOTNzMy4zODUtOS40NCA0LjE0Ni05LjYyMWMtLjA4Mi0uMjA4LS4xODMtLjMzLS4zMjItLjMzM3pcIixcbiAgICBvcGFjaXR5OiAwLjFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk02Ljg4OSA2LjAxNkM1LjMyIDE1Ljk2IDYuMTQgMjUuMjcgNi4xNCAyNS4yN2wuMjg5LS4zMjVjLS4xNDgtMi4xOTctLjU0My0xMC4xNC43OTEtMTguNTk3aDQuNTQxYy4wOTYuMDAyLjIyNS4wOC4zNzQuMjA4LS4yOTctLjMzLS41NDQtLjUzOC0uNzA2LS41NEg2Ljg4OXptMTMuNjAxIDBjLS44NjQuMDEtNC4xNTIgNS43NzctNC41MyA1Ljc3Ny4xNTQuMTk3LjI3OS4zMzMuMzMyLjMzMy4zNzggMCAzLjY2Ni01Ljc2NyA0LjUzLTUuNzc3aDQuMDA4bC4yLS4zMzNoLTQuNTR6bS05Ljg4MSA1LjcyNWMxLjEwMyAxLjY1NyAzLjg0NCA5LjI5IDMuODQ0IDkuMjlsLjA4LS4zNzNjLS42NzYtMS44NTYtMy4yNTYtOC44MTQtMy45MDMtOC45MTdoLS4wMjF6bTExLjM0NiAwYy43NCAxLjg4Ny0uNjYgMTEuMjk1LTEuMDggMTMuNTI5bC40NDQtLjM0OGMuNTY4LTMuMzMxIDEuOTM2LTEzLjE0Ni42MzYtMTMuMTh6XCIsXG4gICAgb3BhY2l0eTogMC4zXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01lbWNhY2hlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb01ldHJpY3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb01ldHJpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTIgMzJoMjhWMjBsLTYuNDY1LTYuNDY1YTUgNSAwIDAwLTcuMDcgMEwyIDI4djR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTYuNDY1IDEzLjUzNWwtMy41MzYgMy41MzZhOS45NjUgOS45NjUgMCAwMDcuMDcgMi45MyA5Ljk2NSA5Ljk2NSAwIDAwNy4wNzItMi45M2wtMy41MzYtMy41MzZhNSA1IDAgMDAtNy4wNyAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk0xNC4zNDMgMTEuNDE0QTcuOTUxIDcuOTUxIDAgMDEyMCA5LjA3MWMyLjEzNyAwIDQuMTQ2LjgzMiA1LjY1NyAyLjM0M2wzLjIwNyAzLjIwN0E5Ljk1NSA5Ljk1NSAwIDAwMzAgMTAuMDAxYzAtNS41MjQtNC40NzctMTAtMTAtMTAtNS41MjIgMC0xMCA0LjQ3Ni0xMCAxMCAwIDEuNjY3LjQxNCAzLjIzNyAxLjEzNyA0LjYybDMuMjA2LTMuMjA3elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01ldHJpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Nb25nb2RiID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Nb25nb2RiKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE2Ljg0NCAzMS44NDdsLS44NDctLjI5cy4xMDQtNC4zMTUtMS40NDUtNC42MjVjLTEuMDMyLTEuMTk4LjE2NS01MC44IDMuODgyLS4xNjUgMCAwLTEuMjguNjQtMS41MDcgMS43MzUtLjI0OCAxLjA3NC0uMDgzIDMuMzQ1LS4wODMgMy4zNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNkEzODVcIixcbiAgICBkOiBcIk0xNi44NDQgMzEuODQ3bC0uODQ3LS4yOXMuMTA0LTQuMzE1LTEuNDQ1LTQuNjI1Yy0xLjAzMi0xLjE5OC4xNjUtNTAuOCAzLjg4Mi0uMTY1IDAgMC0xLjI4LjY0LTEuNTA3IDEuNzM1LS4yNDggMS4wNzQtLjA4MyAzLjM0NS0uMDgzIDMuMzQ1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTcuMjk5IDI3LjY3NnM3LjQxMy00Ljg3NCA1LjY3OC0xNS4wMTNjLTEuNjcyLTcuMzcyLTUuNjE2LTkuNzg4LTYuMDUtMTAuNzE4LS40NzUtLjY2LS45My0xLjgxNy0uOTMtMS44MTdsLjMxIDIwLjUwNmMwIC4wMi0uNjQgNi4yNzguOTkyIDcuMDQyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0OTlENEFcIixcbiAgICBkOiBcIk0xNy4yOTkgMjcuNjc2czcuNDEzLTQuODc0IDUuNjc4LTE1LjAxM2MtMS42NzItNy4zNzItNS42MTYtOS43ODgtNi4wNS0xMC43MTgtLjQ3NS0uNjYtLjkzLTEuODE3LS45My0xLjgxN2wuMzEgMjAuNTA2YzAgLjAyLS42NCA2LjI3OC45OTIgNy4wNDJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE1LjU2NCAyNy45NDRzLTYuOTYtNC43NS02LjU0Ni0xMy4xMTNjLjM5Mi04LjM2MyA1LjMwNy0xMi40NzMgNi4yNTctMTMuMjE2LjYyLS42Ni42NC0uOTA5LjY4MS0xLjU3LjQzNC45My4zNTEgMTMuODk4LjQxMyAxNS40MjYuMTg2IDUuODg2LS4zMyAxMS4zNTgtLjgwNSAxMi40NzN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM1OEFBNTBcIixcbiAgICBkOiBcIk0xNS41NjQgMjcuOTQ0cy02Ljk2LTQuNzUtNi41NDYtMTMuMTEzYy4zOTItOC4zNjMgNS4zMDctMTIuNDczIDYuMjU3LTEzLjIxNi42Mi0uNjYuNjQtLjkwOS42ODEtMS41Ny40MzQuOTMuMzUxIDEzLjg5OC40MTMgMTUuNDI2LjE4NiA1Ljg4Ni0uMzMgMTEuMzU4LS44MDUgMTIuNDczelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01vbmdvZGI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29NeXNxbCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTXlzcWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIiMwMDU0NkJcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkuNDU2IDI0LjI3NmMtMS43NC0uMDQzLTMuMDg4LjEzMS00LjIxOS42MS0uMzI2LjEzLS44NDguMTMtLjg5Mi41NDMuMTc0LjE3NC4xOTYuNDU3LjM0OC42OTYuMjYxLjQzNS43MTggMS4wMjIgMS4xMzEgMS4zMjcuNDU3LjM0OC45MTQuNjk2IDEuMzkyIDEgLjg0OC41MjIgMS44MDUuODI3IDIuNjMxIDEuMzQ5LjQ4LjMwNC45NTcuNjk1IDEuNDM2IDEuMDIyLjI0LjE3My4zOTEuNDU2LjY5Ni41NjV2LS4wNjVjLS4xNTMtLjE5Ni0uMTk2LS40NzktLjM0OC0uNjk2LS4yMTgtLjIxOC0uNDM1LS40MTMtLjY1My0uNjNhMTAuMzE2IDEwLjMxNiAwIDAwLTIuMjYxLTIuMTk3Yy0uNjk2LS40NzktMi4yMTktMS4xMzEtMi41MDEtMS45MzZsLS4wNDQtLjA0M2MuNDc5LS4wNDQgMS4wNDQtLjIxOCAxLjUtLjM0OC43NC0uMTk2IDEuNDE0LS4xNTMgMi4xNzUtLjM0OC4zNDgtLjA4Ny42OTYtLjE5NiAxLjA0NC0uMzA1di0uMTk1Yy0uMzkxLS4zOTItLjY3NC0uOTE0LTEuMDg3LTEuMjg0LTEuMTEtLjk1Ny0yLjMyNy0xLjg5Mi0zLjU4OC0yLjY3NC0uNjc1LS40MzUtMS41NDUtLjcxOC0yLjI2Mi0xLjA4OC0uMjYxLS4xMy0uNjk2LS4xOTYtLjg0OC0uNDEzLS4zOTItLjQ3OS0uNjEtMS4xMS0uODkyLTEuNjc1YTU0LjkyMiA1NC45MjIgMCAwMS0xLjc4My0zLjc4NGMtLjM5Mi0uODQ4LS42My0xLjY5Ni0xLjExLTIuNDc5LTIuMjQtMy42OTctNC42NzUtNS45MzctOC40MTYtOC4xMzQtLjgwNC0uNDU2LTEuNzYxLS42NTItMi43ODMtLjg5MS0uNTQ0LS4wMjItMS4wODgtLjA2NS0xLjYzMS0uMDg3LS4zNDgtLjE1Mi0uNjk2LS41NjYtMS0uNzYxLTEuMjQtLjc4My00LjQzNy0yLjQ4LTUuMzUtLjI0LS41ODggMS40MTQuODcgMi44MDYgMS4zNyAzLjUyNC4zNy41Ljg0OCAxLjA2NSAxLjEwOSAxLjYzLjE1Mi4zNy4xOTUuNzYyLjM0NyAxLjE1My4zNDguOTU3LjY3NSAyLjAyMyAxLjEzMSAyLjkxNC4yNC40NTcuNS45MzYuODA1IDEuMzQ5LjE3NC4yMzkuNDc4LjM0OC41NDQuNzQtLjMwNS40MzQtLjMyNyAxLjA4Ny0uNSAxLjYzLS43ODMgMi40NTgtLjQ3OSA1LjUwMi42MyA3LjMwNy4zNDguNTQ0IDEuMTc1IDEuNzQgMi4yODQgMS4yODQuOTc4LS4zOTIuNzYtMS42MzIgMS4wNDMtMi43MTkuMDY2LS4yNjEuMDIyLS40MzUuMTUzLS42MDl2LjA0NGMuMzA0LjYwOS42MDkgMS4xOTYuODkxIDEuODA1LjY3NSAxLjA2NSAxLjg0OSAyLjE3NCAyLjgyOCAyLjkxNC41MjIuMzkxLjkzNSAxLjA2NSAxLjU4NyAxLjMwNXYtLjA2NmgtLjA0M2MtLjEzLS4xOTUtLjMyNy0uMjgyLS41LS40MzUtLjM5Mi0uMzktLjgyNy0uODctMS4xMzEtMS4zMDQtLjkxNC0xLjIxOC0xLjcxOS0yLjU2Ny0yLjQzNi0zLjk1OC0uMzQ4LS42NzUtLjY1My0xLjQxNC0uOTM1LTIuMDg4LS4xMy0uMjYxLS4xMy0uNjUzLS4zNDgtLjc4My0uMzI3LjQ3OC0uODA1Ljg5Mi0xLjA0NCAxLjQ3OS0uNDEzLjkzNS0uNDU3IDIuMDg4LS42MSAzLjI4NC0uMDg2LjAyMS0uMDQzIDAtLjA4Ni4wNDMtLjY5Ni0uMTc0LS45MzUtLjg5MS0xLjE5Ni0xLjUtLjY1My0xLjU0NS0uNzYxLTQuMDI0LS4xOTYtNS44MDcuMTUyLS40NTcuODA1LTEuODkyLjU0NC0yLjMyNy0uMTMtLjQxMy0uNTY2LS42NTItLjgwNS0uOTc5YTguNzY0IDguNzY0IDAgMDEtLjc4My0xLjM5MmMtLjUyMi0xLjIxNy0uNzgzLTIuNTY2LTEuMzQ4LTMuNzg0LS4yNjEtLjU2NS0uNzE4LTEuMTUyLTEuMDg3LTEuNjc0LS40MTQtLjU4Ny0uODctMS0xLjE5Ny0xLjY5Ny0uMTA4LS4yMzktLjI2LS42My0uMDg3LS44OTEuMDQ0LS4xNzQuMTMtLjI0LjMwNS0uMjgzLjI4My0uMjQgMS4wODcuMDY1IDEuMzcuMTk2LjgwNS4zMjYgMS40NzkuNjMgMi4xNTMgMS4wODcuMzA0LjIxOC42My42MzEgMS4wMjIuNzRoLjQ1N2MuNjk2LjE1MiAxLjQ3OS4wNDMgMi4xMzEuMjM5IDEuMTUzLjM3IDIuMTk2LjkxMyAzLjEzMiAxLjVhMTkuMjk0IDE5LjI5NCAwIDAxNi43ODUgNy40MzhjLjI2MS41LjM3Ljk1Ny42MDkgMS40NzkuNDU3IDEuMDY2IDEuMDIyIDIuMTUzIDEuNDc5IDMuMTk3LjQ1NiAxLjAyMi44OTEgMi4wNjYgMS41NDQgMi45MTQuMzI2LjQ1NyAxLjYzLjY5NiAyLjIxOC45MzUuNDM1LjE5NiAxLjExLjM3IDEuNS42MS43NC40NTYgMS40OC45NzggMi4xNzUgMS40NzguMzQ4LjI2IDEuNDM2LjgwNSAxLjUwMSAxLjI0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yNzMgNS4zNzhjLS4zNyAwLS42My4wNDMtLjg5MS4xMDl2LjA0M2guMDQzYy4xNzQuMzQ4LjQ3OS41ODcuNjk2Ljg5Mi4xNzQuMzQ4LjMyNi42OTYuNSAxLjA0NGwuMDQ0LS4wNDRjLjMwNC0uMjE3LjQ1Ny0uNTY1LjQ1Ny0xLjA4Ny0uMTMxLS4xNTItLjE1My0uMzA1LS4yNjEtLjQ1Ny0uMTMtLjIxOC0uNDE0LS4zMjYtLjU4OC0uNXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29NeXNxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb05naW54ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29OZ2lueChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMTE5NjM5XCIsXG4gICAgZDogXCJNMTYgMGwxMy44NTYgOHYxNkwxNiAzMiAyLjE0NCAyNFY4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTExLjE3IDEzLjUxMnY4LjM3NmExLjYwNyAxLjYwNyAwIDExLTMuMjE1IDBWOS42MzJjMC0xLjQzMiAxLjczMS0yLjE0OSAyLjc0NC0xLjEzNmw5LjUxIDkuNTEyVjkuNjMyYTEuNjA3IDEuNjA3IDAgMDEzLjIxNSAwdjEyLjI1NmMwIDEuNDMyLTEuNzMxIDIuMTQ5LTIuNzQ0IDEuMTM2bC05LjUxLTkuNTEyelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb05naW54OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDMySDcuMjM4QzMuNzkzIDMyIDEgMjguODY1IDEgMjQuOTk4VjE1aDl2MTd6XCIsXG4gICAgZmlsbDogXCIjRjA0RTk4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTAgMzJoOVY4aC05elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzEgMzJoLTlWMGwxLjk3My4wMjRDMjcuODY2LjA3MiAzMSAzLjczMSAzMSA4LjIyOFYzMnpcIixcbiAgICBmaWxsOiBcIiMwN0NcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb09ic2VydmFiaWxpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Pc3F1ZXJ5ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Pc3F1ZXJ5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTTMxLjkwNy4wMzJ2Ny45NjlsLTcuOTUyIDcuOTUxVjcuOTY3TDMxLjkwNy4wMzJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTTE2LjAwMy4wMzJ2Ny45NjlsNy45NTIgNy45NTFWNy45NjdMMTYuMDAzLjAzMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNMzEuOTIzIDMxLjg1NWgtNy45NjhsLTcuOTUyLTcuOTUxaDcuOTg1bDcuOTM1IDcuOTUxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0zMS45MjMgMTUuOTUyaC03Ljk2OGwtNy45NTIgNy45NTJoNy45ODVsNy45MzUtNy45NTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTS4xIDMxLjg3MnYtNy45NjhsNy45NTItNy45NTJ2Ny45ODVMLjEgMzEuODcyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0xNi4wMDQgMzEuODcydi03Ljk2OGwtNy45NTItNy45NTJ2Ny45ODVsNy45NTIgNy45MzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTS4wODQuMDQ4aDcuOTY4TDE2LjAwNCA4SDguMDE5TC4wODQuMDQ4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0uMDg0IDE1Ljk1Mmg3Ljk2OEwxNi4wMDQgOEg4LjAxOUwuMDg0IDE1Ljk1MlwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb09zcXVlcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29QaHAgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1BocChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19waHAnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIGQ6IFwiTS4wMjggNy44NTRDLjAyOCAzLjUzNCA2LjY4OC4wMyAxNC45MDIuMDNzMTQuODc0IDMuNTAzIDE0Ljg3NCA3LjgyNGMwIDQuMzIyLTYuNjYgNy44MjUtMTQuODc0IDcuODI1LTguMjE1IDAtMTQuODc0LTMuNTAzLTE0Ljg3NC03LjgyNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICBkOiBcIk0wIDE3LjQzaDMwLjk4N1YwSDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZicpLFxuICAgIGQ6IFwiTTAgMTcuNDNoMzAuOTg3VjBIMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIGN4OiBcIjMwLjAyJVwiLFxuICAgIGN5OiBcIjgyLjQyMiVcIixcbiAgICByOiBcIjEyNC44MTQlXCIsXG4gICAgZng6IFwiMzAuMDIlXCIsXG4gICAgZnk6IFwiODIuNDIyJVwiLFxuICAgIGdyYWRpZW50VHJhbnNmb3JtOiBcIm1hdHJpeCguNTI2MDQgMCAwIDEgLjE0MiAwKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0FFQjJENVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQUVCMkQ1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0ODRDODlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0ODRDODlcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIHRyYW5zZm9ybTogXCJtYXRyaXgoMSAwIDAgLTEgLjAyNiAyNS40MTMpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLjU5MiAuODYpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uMDI4IDcuODU0Qy4wMjggMy41MzQgNi42ODguMDMgMTQuOTAyLjAzczE0Ljg3NCAzLjUwMyAxNC44NzQgNy44MjRjMCA0LjMyMi02LjY2IDcuODI1LTE0Ljg3NCA3LjgyNS04LjIxNSAwLTE0Ljg3NC0zLjUwMy0xNC44NzQtNy44MjVcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzc3N0JCM1wiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0xNS40OTQgMS40NzJjNy44OTQgMCAxNC4yOTMgMy4yNDMgMTQuMjkzIDcuMjQzcy02LjQgNy4yNDQtMTQuMjkzIDcuMjQ0Yy03Ljg5NCAwLTE0LjI5My0zLjI0My0xNC4yOTMtNy4yNDQgMC00IDYuNC03LjI0MyAxNC4yOTMtNy4yNDNcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2YnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZycpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTguNzAxIDcuODE3Yy42NSAwIDEuMTM0LjEyIDEuNDQuMzU2LjMwNC4yMzMuNTEzLjYzOC42MjMgMS4yMDIuMTAzLjUyOC4wNjQuODk2LS4xMTYgMS4wOTUtLjE4My4yMDMtLjU4LjMwNi0xLjE3Ny4zMDZIOC40MzNsLS41NzUtMi45NTloLjg0M3pNNS4zMSA0LjE3MmEuMTYxLjE2MSAwIDAwLS4xNTkuMTkzbDEuNTI0IDcuODRjLjAxNS4wNzYuMDgyLjEzMS4xNTkuMTMxaDMuMjg0YzEuMDMzIDAgMS44MDEtLjI4IDIuMjg0LS44MzMuNDg1LS41NTYuNjM1LTEuMzMzLjQ0Ni0yLjMwOWEzLjY4NiAzLjY4NiAwIDAwLS4zOTUtMS4wOTggMy42NzYgMy42NzYgMCAwMC0uNzI3LS45MSAzLjE4OSAzLjE4OSAwIDAwLTEuMTk3LS43MThjLS40My0uMTQtLjk4My0uMjEtMS42NDMtLjIxaC0xLjMzbC0uMzgtMS45NTVhLjE2MS4xNjEgMCAwMC0uMTU4LS4xM0g1LjMwOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTguNTY2IDEwLjYxNWguOTA1Yy43MjIgMCAuOTcyLS4xNTggMS4wNTgtLjI1My4xNDEtLjE1Ny4xNjgtLjQ4Ny4wNzctLjk1Ni0uMTAyLS41MjQtLjI5MS0uODk2LS41NjMtMS4xMDUtLjI3Ny0uMjE0LS43MjktLjMyMi0xLjM0MS0uMzIyaC0uNjQ4bC41MTIgMi42MzZ6bTEuNTUxIDEuODgzSDYuODMzYS4zMjMuMzIzIDAgMDEtLjMxNy0uMjYxTDQuOTkyIDQuMzk2YS4zMjMuMzIzIDAgMDEuMzE3LS4zODVoMS43MDhjLjE1NSAwIC4yODcuMTEuMzE3LjI2MmwuMzU0IDEuODIzaDEuMTk3Yy42NzcgMCAxLjI0Ny4wNzQgMS42OTQuMjIuNDYuMTQ5Ljg4Mi40MDIgMS4yNTYuNzUyLjMxLjI4NC41NjQuNjA0Ljc1OC45NS4xOTMuMzQ1LjMzMS43MzEuNDEyIDEuMTQ2LjIgMS4wMjcuMDM4IDEuODUtLjQ4MiAyLjQ0Ni0uNTE1LjU5LTEuMzI1Ljg4OC0yLjQwNi44ODh6TTcuNjYzIDcuNjU2aDEuMDM5Yy42ODggMCAxLjIwMS4xMyAxLjUzOC4zOS4zMzcuMjU5LjU2NS42OTIuNjgzIDEuMjk5LjExMy41ODMuMDYxLjk5NC0uMTU1IDEuMjMzLS4yMTYuMjQtLjY0OC4zNi0xLjI5Ny4zNkg4LjNsLS42MzgtMy4yODJ6bTIuNDU0IDQuNTJjLjk4OSAwIDEuNzEtLjI2IDIuMTYyLS43NzkuNDUzLS41MTguNTktMS4yNDIuNDEtMi4xNzJhMy41MSAzLjUxIDAgMDAtLjM3OC0xLjA1IDMuNTAyIDMuNTAyIDAgMDAtLjY5NS0uODcgMy4wMTcgMy4wMTcgMCAwMC0xLjEzNy0uNjgzYy0uNDE3LS4xMzUtLjk0OC0uMjAzLTEuNTk0LS4yMDNINy40MjJsLS40MDUtMi4wODVINS4zMDlsMS41MjQgNy44NDFoMy4yODR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0xNi43NjMgNi4yNTdhLjE2MS4xNjEgMCAwMC0uMTU5LjE5MmwuNjc0IDMuNDdjLjA2NC4zMy4wNDkuNTY2LS4wNDQuNjY2LS4wNTcuMDYxLS4yMjguMTY0LS43MzIuMTY0SDE1LjI4bC0uODQ3LTQuMzYxYS4xNjEuMTYxIDAgMDAtLjE1OS0uMTMxSDEyLjU4YS4xNjEuMTYxIDAgMDAtLjE1OS4xOTJsMS41MjQgNy44NDFjLjAxNS4wNzYuMDgyLjEzLjE1OS4xM2gxLjY5NGEuMTYxLjE2MSAwIDAwLjE1OS0uMTkxbC0uMzY4LTEuODkzaDEuMzE0YzEgMCAxLjY4LS4xNzYgMi4wNzUtLjU0LjQwMy0uMzcuNTI5LS45NjIuMzc0LTEuNzZsLS43MS0zLjY0OGEuMTYxLjE2MSAwIDAwLS4xNTgtLjEzMWgtMS43MjF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xNS43OTkgMTQuNTgyaC0xLjY5NWEuMzIzLjMyMyAwIDAxLS4zMTctLjI2MUwxMi4yNjMgNi40OGEuMzIzLjMyMyAwIDAxLjMxNy0uMzg1aDEuNjk1Yy4xNTQgMCAuMjg3LjExLjMxNy4yNjJsLjgyMiA0LjIzaDEuMDg4Yy41MDQgMCAuNjEtLjEwNy42MTQtLjExMi4wMy0uMDMzLjA3LS4xODUuMDA0LS41MjZsLS42NzQtMy40N2EuMzIzLjMyMyAwIDAxLjMxNy0uMzg0aDEuNzIxYy4xNTUgMCAuMjg4LjExLjMxNy4yNjJsLjcxIDMuNjQ4Yy4xNjYuODU3LjAyMyAxLjUtLjQyNCAxLjkxLS40MjYuMzkyLTEuMTQuNTgyLTIuMTg0LjU4MmgtMS4xMThsLjMzIDEuN2EuMzIzLjMyMyAwIDAxLS4zMTYuMzg1bTAtLjMyM2wtLjQwNi0yLjA4NGgxLjUxYy45NSAwIDEuNjA1LS4xNjYgMS45NjYtLjQ5Ny4zNi0uMzMyLjQ2OC0uODY5LjMyNC0xLjYxMWwtLjcwOS0zLjY0OWgtMS43MjFsLjY3NCAzLjQ3Yy4wNzcuMzk0LjA0OC42NjMtLjA4NS44MDctLjEzMy4xNDMtLjQxNi4yMTUtLjg1LjIxNWgtMS4zNTRsLS44NzMtNC40OTJIMTIuNThsMS41MjQgNy44NDFoMS42OTVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTIyLjAzMyA3LjgxN2MuNjUgMCAxLjEzNC4xMiAxLjQ0LjM1Ni4zMDQuMjMzLjUxMy42MzguNjIzIDEuMjAyLjEwMy41MjguMDY0Ljg5Ni0uMTE2IDEuMDk1LS4xODMuMjAzLS41OC4zMDYtMS4xNzcuMzA2aC0xLjAzOGwtLjU3NS0yLjk1OWguODQzem0tMy4zOTItMy42NDVhLjE2MS4xNjEgMCAwMC0uMTU5LjE5M2wxLjUyNCA3Ljg0Yy4wMTUuMDc2LjA4Mi4xMzEuMTU5LjEzMWgzLjI4NGMxLjAzMyAwIDEuODAxLS4yOCAyLjI4NC0uODMzLjQ4NS0uNTU2LjYzNS0xLjMzMy40NDYtMi4zMDlhMy42ODkgMy42ODkgMCAwMC0uMzk1LTEuMDk4IDMuNjc2IDMuNjc2IDAgMDAtLjcyNy0uOTEgMy4xODkgMy4xODkgMCAwMC0xLjE5Ny0uNzE4Yy0uNDMtLjE0LS45ODMtLjIxLTEuNjQzLS4yMWgtMS4zM2wtLjM4LTEuOTU1YS4xNjEuMTYxIDAgMDAtLjE1OC0uMTNIMTguNjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0yMS44OTggMTAuNjE1aC45MDVjLjcyMiAwIC45NzItLjE1OCAxLjA1OC0uMjUzLjE0MS0uMTU3LjE2OC0uNDg3LjA3Ny0uOTU2LS4xMDItLjUyNC0uMjkyLS44OTYtLjU2My0xLjEwNS0uMjc3LS4yMTQtLjcyOS0uMzIyLTEuMzQxLS4zMjJoLS42NDhsLjUxMiAyLjYzNnptMS41NTEgMS44ODNoLTMuMjg0YS4zMjMuMzIzIDAgMDEtLjMxNy0uMjYxbC0xLjUyNC03Ljg0MWEuMzIzLjMyMyAwIDAxLjMxNy0uMzg1aDEuNzA4Yy4xNTUgMCAuMjg3LjExLjMxNy4yNjJsLjM1NCAxLjgyM2gxLjE5N2MuNjc3IDAgMS4yNDcuMDc0IDEuNjk0LjIyLjQ2LjE0OS44ODIuNDAyIDEuMjU2Ljc1Mi4zMS4yODQuNTY0LjYwNC43NTguOTUuMTkzLjM0NS4zMzEuNzMxLjQxMiAxLjE0Ni4yIDEuMDI3LjAzOCAxLjg1LS40ODIgMi40NDYtLjUxNS41OS0xLjMyNS44ODgtMi40MDYuODg4em0tMi40NTQtNC44NDJoMS4wMzljLjY4OCAwIDEuMjAxLjEzIDEuNTM4LjM5LjMzNy4yNTkuNTY1LjY5Mi42ODMgMS4yOTkuMTEzLjU4My4wNjEuOTk0LS4xNTUgMS4yMzMtLjIxNi4yNC0uNjQ4LjM2LTEuMjk3LjM2aC0xLjE3bC0uNjM4LTMuMjgyem0yLjQ1NCA0LjUyYy45ODkgMCAxLjcxLS4yNiAyLjE2Mi0uNzc5LjQ1NC0uNTE4LjU5LTEuMjQyLjQxLTIuMTcyYTMuNTEgMy41MSAwIDAwLS4zNzgtMS4wNSAzLjUwMiAzLjUwMiAwIDAwLS42OTUtLjg3IDMuMDE3IDMuMDE3IDAgMDAtMS4xMzctLjY4M2MtLjQxNy0uMTM1LS45NDgtLjIwMy0xLjU5NC0uMjAzaC0xLjQ2M2wtLjQwNS0yLjA4NWgtMS43MDhsMS41MjQgNy44NDFoMy4yODR6XCJcbiAgfSkpKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1BocDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1Bvc3RncmVzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Qb3N0Z3JlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0zMS44NzYgMTkuMTYyYy0uMTkyLS41NjQtLjY5NS0uOTU2LTEuMzQ1LTEuMDUtLjMwNi0uMDQ1LS42NTctLjAyNi0xLjA3Mi4wNTctLjcyNC4xNDUtMS4yNjEuMi0xLjY1NC4yMTEgMS40OC0yLjQyMiAyLjY4My01LjE4NSAzLjM3Ni03Ljc4NSAxLjEyLTQuMjA1LjUyMS02LjEyLS4xNzgtNi45ODctMS44NS0yLjI5My00LjU1MS0zLjUyNS03LjgwOS0zLjU2M2ExNC4yMzkgMTQuMjM5IDAgMDAtNC4wNi41NTEgMTUuNTczIDE1LjU3MyAwIDAwLTIuMzczLS4yMWMtMS41NjctLjAyNC0yLjk1Mi4zMDctNC4xMzUuOTg4YTE5LjMzNCAxOS4zMzQgMCAwMC0yLjkyLS43MTFDNi44NS4yMDggNC41NDkuNTYzIDIuODY2IDEuNzE2LjgyOCAzLjExMi0uMTE3IDUuNTM3LjA1OCA4LjkyNi4xMTMgMTAgLjczNCAxMy4yNzMgMS43MSAxNi4zNzZjLjU2MSAxLjc4NCAxLjE2IDMuMjY2IDEuNzggNC40MDQuODc4IDEuNjE0IDEuODE4IDIuNTY0IDIuODczIDIuOTA2LjU5MS4xOSAxLjY2Ni4zMjUgMi43OTYtLjU4OC4xNDMuMTY4LjMzNC4zMzUuNTg4LjQ5LjMyMi4xOTguNzE2LjM1OSAxLjEwOS40NTQgMS40MTguMzQ0IDIuNzQ1LjI1OCAzLjg3OC0uMjI0LjAwNy4xOTUuMDEzLjM4Mi4wMTcuNTQzLjAwOC4yNjIuMDE1LjUxOC4wMjUuNzU4LjA2NyAxLjYyLjE4MSAyLjg4MS41MTggMy43NjNsLjA3LjIwMWMuMTY4LjUuNDQ5IDEuMzM1IDEuMTY0IDEuOTkuNzQuNjc3IDEuNjM3Ljg4NSAyLjQ1Ny44ODUuNDEyIDAgLjgwNC0uMDUyIDEuMTQ5LS4xMjQgMS4yMjctLjI1NSAyLjYyMS0uNjQzIDMuNjMtMi4wMzYuOTUzLTEuMzE2IDEuNDE3LTMuMjk5IDEuNS02LjQyM2wuMDMxLS4yNTMuMDItLjE2NS4yMjUuMDE5LjA1OC4wMDRjMS4yNS4wNTUgMi43NzktLjIwMiAzLjcxOC0uNjI1Ljc0MS0uMzM0IDMuMTE5LTEuNTUgMi41NTktMy4xOTRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzNjc5MVwiLFxuICAgIGQ6IFwiTTI5LjczOCAxOS40ODFjLTMuNzE3Ljc0NC0zLjk3My0uNDc2LTMuOTczLS40NzYgMy45MjUtNS42NDggNS41NjYtMTIuODE3IDQuMTUtMTQuNTcxQzI2LjA1Mi0uMzUyIDE5LjM2NSAxLjkxIDE5LjI1NCAxLjk3bC0uMDM2LjAwNmExMy42NTcgMTMuNjU3IDAgMDAtMi40OC0uMjVjLTEuNjgyLS4wMjctMi45NTguNDI3LTMuOTI3IDEuMTQgMCAwLTExLjkyOC00Ljc2Ni0xMS4zNzQgNS45OTIuMTE4IDIuMjg5IDMuMzgzIDE3LjMxOCA3LjI3OCAxMi43NzlhNzAuNDQzIDcwLjQ0MyAwIDAxMi43OTgtMy4wNjRjLjY4My40NCAxLjUwMS42NjUgMi4zNTguNTg0bC4wNjctLjA1NWMtLjAyLjIwNi0uMDExLjQwOC4wMjcuNjQ3LTEuMDA0IDEuMDg3LS43MDkgMS4yNzctMi43MTQgMS42NzgtMi4wMy40MDUtLjgzNyAxLjEyNy0uMDYgMS4zMTYuOTQ0LjIyOSAzLjEyNy41NTMgNC42MDItMS40NWwtLjA1OC4yM2MuMzkzLjMwNC42NjkgMS45ODUuNjIzIDMuNTA4LS4wNDcgMS41MjQtLjA3OCAyLjU3LjIzMiAzLjM4Ny4zMS44MTcuNjE5IDIuNjU1IDMuMjU1IDIuMTA3IDIuMjAzLS40NTggMy4zNDUtMS42NDQgMy41MDMtMy42MjMuMTEzLTEuNDA3LjM2OC0xLjE5OS4zODQtMi40NTdsLjIwNS0uNTk1Yy4yMzYtMS45MDcuMDM3LTIuNTIyIDEuMzk0LTIuMjM2bC4zMy4wMjhjMSAuMDQ0IDIuMzA3LS4xNTYgMy4wNzQtLjUwMiAxLjY1Mi0uNzQzIDIuNjMyLTEuOTg1IDEuMDAzLTEuNjU5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xMy41MSA5Ljg4MmMtLjMzNS0uMDQ1LS42MzktLjAwNC0uNzkyLjExYS4yOC4yOCAwIDAwLS4xMi4xODdjLS4wMi4xMzMuMDc3LjI4Mi4xMzYuMzU4LjE2OS4yMTYuNDE0LjM2NS42NTguMzk4LjAzNS4wMDQuMDcuMDA3LjEwNS4wMDcuNDA1IDAgLjc3NC0uMzA3LjgwNy0uNTMzLjA0LS4yODMtLjM4My0uNDcyLS43OTUtLjUyN20xMS4wOTkuMDA5Yy0uMDMyLS4yMjItLjQ0LS4yODUtLjgyNi0uMjMzLS4zODYuMDUyLS43Ni4yMi0uNzMuNDQzLjAyNi4xNzMuMzQ4LjQ2OC43My40NjhhLjcxOC43MTggMCAwMC4wOTctLjAwNi45NDcuOTQ3IDAgMDAuNTMtLjI4MWMuMTM1LS4xMzguMjEzLS4yOTEuMTk5LS4zOTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTMwLjk3NSAxOS4zOTdjLS4xNDItLjQxNi0uNTk4LS41NS0xLjM1Ni0uMzk4LTIuMjUuNDUtMy4wNTYuMTM5LTMuMzIxLS4wNSAxLjc1LTIuNTg0IDMuMTg5LTUuNzA4IDMuOTY1LTguNjIzLjM2OC0xLjM4LjU3LTIuNjYzLjU4Ny0zLjcwOC4wMTktMS4xNDctLjE4My0xLjk5LS41OTgtMi41MDUtMS42NzUtMi4wNzUtNC4xMzQtMy4xODktNy4xMS0zLjIyLTIuMDQ3LS4wMjItMy43NzUuNDg2LTQuMTEuNjI5YTEwLjU0OSAxMC41NDkgMCAwMC0yLjMxMy0uMjg4Yy0xLjUzNi0uMDI0LTIuODY0LjMzMi0zLjk2MyAxLjA2YTE4LjEzMSAxOC4xMzEgMCAwMC0zLjIyLS44MmMtMi42MS0uNDA3LTQuNjgzLS4wOTgtNi4xNjMuOTE4QzEuNjA4IDMuNjA1Ljc5MyA1Ljc3My45NTEgOC44MzZjLjA1MyAxLjAzLjY1OCA0LjIgMS42MTQgNy4yMzYgMS4yNTggMy45OTYgMi42MjUgNi4yNTcgNC4wNjMgNi43MjMuMTY5LjA1NC4zNjMuMDkyLjU3Ny4wOTIuNTI1IDAgMS4xNjgtLjIzIDEuODM4LTEuMDFhNjQuODk0IDY0Ljg5NCAwIDAxMi41MzItMi43NzggNC4xOCA0LjE4IDAgMDAxLjgyMi40NzVsLjAwNS4wNDhjLS4xMS4xMjctLjIxNy4yNTUtLjMyMS4zODUtLjQ0LjU0Mi0uNTMyLjY1NS0xLjk1LjkzOC0uNDAzLjA4LTEuNDczLjI5NC0xLjQ4OSAxLjAyMi0uMDE3Ljc5NSAxLjI2NiAxLjEzIDEuNDEyIDEuMTY1LjUwOS4xMjMgMSAuMTg0IDEuNDY3LjE4NCAxLjEzOCAwIDIuMTQtLjM2MyAyLjk0LTEuMDY0LS4wMjUgMi44MzQuMDk3IDUuNjI4LjQ0OCA2LjQ3OS4yODguNjk2Ljk5IDIuNCAzLjIwOCAyLjM5OWE1LjMgNS4zIDAgMDAxLjA3OC0uMTE5YzIuMzE1LS40OCAzLjMyLTEuNDczIDMuNzEtMy42Ni4yMDgtMS4xNy41NjUtMy45NjEuNzMzLTUuNDU5LjM1NC4xMDcuODEuMTU2IDEuMzA0LjE1NiAxLjAyOSAwIDIuMjE2LS4yMTIgMi45NjEtLjU0Ny44MzctLjM3NyAyLjM0Ni0xLjMgMi4wNzItMi4xMDR6TTI1LjQ2MiA5LjI3OGMtLjAwOC40NDItLjA3Ljg0NC0uMTM3IDEuMjYyLS4wNzIuNDUxLS4xNDUuOTE3LS4xNjQgMS40ODItLjAxOS41NS4wNTIgMS4xMjMuMTIgMS42NzYuMTQgMS4xMTguMjgyIDIuMjY4LS4yNjkgMy40MDNhNC4zNyA0LjM3IDAgMDEtLjI0My0uNDg1Yy0uMDY5LS4xNjEtLjIxNy0uNDItLjQyMy0uNzc3LS44LTEuMzktMi42NzMtNC42NDgtMS43MTQtNS45NzcuMjg2LS4zOTYgMS4wMS0uODAzIDIuODMtLjU4NHptLTIuMjA2LTcuNDljMi42NjcuMDU4IDQuNzc3IDEuMDI1IDYuMjcgMi44NzYgMS4xNDYgMS40Mi0uMTE2IDcuODc5LTMuNzY3IDEzLjQ1bC0uMTExLS4xMzUtLjA0Ni0uMDU2Yy45NDMtMS41MS43NTktMy4wMDYuNTk1LTQuMzMxLS4wNjgtLjU0NC0uMTMyLTEuMDU4LS4xMTUtMS41NDEuMDE2LS41MTEuMDg2LS45NS4xNTQtMS4zNzUuMDgyLS41MjIuMTY3LTEuMDYzLjE0NC0xLjcwMWEuNjg0LjY4NCAwIDAwLjAxNS0uMjRjLS4wNi0uNjExLS43OC0yLjQ0MS0yLjI0Ny00LjA5OGExMC4wOTQgMTAuMDk0IDAgMDAtMy41NzItMi42MDQgMTIuNDA3IDEyLjQwNyAwIDAxMi42OC0uMjQ0ek04LjMzNCAyMS4zMDdjLS43MzcuODYtMS4yNDYuNjk1LTEuNDE0LjY0MS0xLjA5MS0uMzUzLTIuMzU3LTIuNTktMy40NzQtNi4xMzYtLjk2Ni0zLjA2OS0xLjUzLTYuMTU1LTEuNTc1LTcuMDItLjE0MS0yLjczNy41NDMtNC42NDQgMi4wMzMtNS42NjkgMi40MjYtMS42NjggNi40MTQtLjY3IDguMDE2LS4xNjMtLjAyMy4wMjItLjA0Ny4wNDItLjA3LjA2NS0yLjYzIDIuNTc1LTIuNTY3IDYuOTc0LTIuNTYgNy4yNDMgMCAuMTA0LjAwOC4yNTEuMDIuNDUzLjA0Ni43NC4xMyAyLjExNy0uMDk1IDMuNjc3LS4yMDkgMS40NS4yNTIgMi44NjggMS4yNjQgMy44OTIuMTA0LjEwNS4yMTMuMjA1LjMyNy4zLS40NS40NjctMS40MyAxLjUwMi0yLjQ3MiAyLjcxN3ptMi44MS0zLjYzNWMtLjgxNi0uODI2LTEuMTg2LTEuOTc0LTEuMDE3LTMuMTUuMjM4LTEuNjQ4LjE1LTMuMDgzLjEwMy0zLjg1NGwtLjAxNi0uMjc3Yy4zODQtLjMzIDIuMTY1LTEuMjU1IDMuNDM0LS45NzMuNTguMTI5LjkzMi41MTEgMS4wOCAxLjE3Ljc1OSAzLjQwNi4xIDQuODI1LS40MyA1Ljk2Ni0uMTA5LjIzNS0uMjEyLjQ1OC0uMy42ODdsLS4wNjguMTc4Yy0uMTczLjQ1LS4zMzQuODY3LS40MzQgMS4yNjRhMy4zMjUgMy4zMjUgMCAwMS0yLjM1Mi0xLjAxMXptLjEzMyA0LjU5NGEyLjA3IDIuMDcgMCAwMS0uNjE0LS4yNTZjLjExMS0uMDUxLjMxLS4xMi42NTQtLjE5IDEuNjY4LS4zMzIgMS45MjUtLjU2NyAyLjQ4Ny0xLjI2LjEzLS4xNTguMjc1LS4zMzguNDc4LS41NTcuMzAxLS4zMjguNDQtLjI3Mi42OS0uMTcyLjIwMi4wODIuNC4zMjguNDguNTk5LjAzNy4xMjguMDguMzctLjA2LjU2LTEuMTc0IDEuNTk1LTIuODg2IDEuNTc0LTQuMTE1IDEuMjc2em04LjcyNSA3Ljg3M2MtMi4wNC40MjQtMi43NjEtLjU4Ni0zLjIzNy0xLjc0LS4zMDgtLjc0NC0uNDU5LTQuMTAyLS4zNTEtNy44MWEuNDM0LjQzNCAwIDAwLS4wMi0uMTQzIDEuODIzIDEuODIzIDAgMDAtLjA1Ny0uMjYyYy0uMTYtLjU0LS41NDgtLjk5LTEuMDEzLTEuMTc4LS4xODUtLjA3NC0uNTI1LS4yMS0uOTMzLS4xMS4wODctLjM0Ny4yMzgtLjc0LjQwMi0xLjE2NWwuMDY4LS4xNzhjLjA3OC0uMjAyLjE3NS0uNDEuMjc3LS42MzIuNTU0LTEuMTk0IDEuMzEzLTIuODI5LjQ5LTYuNTIyLS4zMDktMS4zODQtMS4zNC0yLjA2LTIuOTAxLTEuOTAzLS45MzYuMDk0LTEuNzkzLjQ2LTIuMjIuNjdhNy4yNTUgNy4yNTUgMCAwMC0uMjU1LjEzMmMuMTItMS4zOTQuNTctNCAyLjI1NS01LjY0NyAxLjA2Mi0xLjAzOCAyLjQ3NS0xLjU1IDQuMTk2LTEuNTIzIDMuMzkzLjA1NCA1LjU2OSAxLjc0MiA2Ljc5NiAzLjE1IDEuMDU4IDEuMjExIDEuNjMxIDIuNDMzIDEuODYgMy4wOTEtMS43Mi0uMTctMi44ODkuMTYtMy40ODIuOTgyLTEuMjkgMS43ODcuNzA2IDUuMjU3IDEuNjY1IDYuOTI0LjE3NS4zMDYuMzI3LjU3LjM3NS42ODIuMzEyLjczNC43MTYgMS4yMjQgMS4wMTIgMS41ODIuMDkuMTEuMTc4LjIxNS4yNDUuMzA4LS41MjEuMTQ2LTEuNDU2LjQ4Mi0xLjM3MSAyLjE2NC0uMDY5Ljg0My0uNTU4IDQuNzkzLS44MDYgNi4xODktLjMyOCAxLjg0My0xLjAyOCAyLjUzLTIuOTk1IDIuOTM5em04LjUxMy05LjQ0N2MtLjUzMi4yNC0xLjQyNC40Mi0yLjI3LjQ1OC0uOTM1LjA0My0xLjQxMS0uMTAxLTEuNTIzLS4xOS0uMDUzLTEuMDQ4LjM1LTEuMTU3Ljc3NS0xLjI3M2EzLjM1IDMuMzUgMCAwMC4xOTUtLjA1OGMuMDQuMDMxLjA4Mi4wNjIuMTMuMDkyLjc1LjQ4MSAyLjA5MS41MzMgMy45ODQuMTU0bC4wMi0uMDA0Yy0uMjU1LjIzMi0uNjkyLjU0Mi0xLjMxLjgyMXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Qb3N0Z3JlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1Byb21ldGhldXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1Byb21ldGhldXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNjUyMkNcIixcbiAgICBkOiBcIk0xNS45MDcuMTg3QzcuMTIyLjE4NyAwIDcuMzA4IDAgMTYuMDkzUzcuMTIyIDMyIDE1LjkwNyAzMmM4Ljc4NCAwIDE1LjkwNi03LjEyMSAxNS45MDYtMTUuOTA2UzI0LjY5LjE4NyAxNS45MDcuMTg3em0wIDI5Ljc3Yy0yLjUgMC00LjUyNi0xLjY3LTQuNTI2LTMuNzI5aDkuMDUxYzAgMi4wNi0yLjAyNiAzLjczLTQuNTI1IDMuNzN6bTcuNDc1LTQuOTYzSDguNDN2LTIuNzExaDE0Ljk1djIuNzF6bS0uMDU0LTQuMTA3SDguNDczYy0uMDUtLjA1Ny0uMS0uMTEzLS4xNDctLjE3LTEuNTMtMS44NTktMS44OTEtMi44MjktMi4yNDEtMy44MTgtLjAwNi0uMDMyIDEuODU1LjM4IDMuMTc2LjY3OCAwIDAgLjY3OS4xNTcgMS42NzIuMzM4LS45NTMtMS4xMTgtMS41Mi0yLjUzOS0xLjUyLTMuOTkxIDAtMy4xODkgMi40NDYtNS45NzUgMS41NjQtOC4yMjcuODU4LjA3IDEuNzc3IDEuODEyIDEuODM5IDQuNTM3LjkxMy0xLjI2MiAxLjI5NS0zLjU2NiAxLjI5NS00Ljk3OCAwLTEuNDYzLjk2My0zLjE2MSAxLjkyNy0zLjIyLS44NiAxLjQxNy4yMjMgMi42MyAxLjE4NCA1LjY0Mi4zNjEgMS4xMzIuMzE1IDMuMDM1LjU5NCA0LjI0My4wOTItMi41MDguNTIzLTYuMTY3IDIuMTE0LTcuNDMtLjcwMiAxLjU5MS4xMDQgMy41ODEuNjU1IDQuNTM4Ljg4OSAxLjU0NCAxLjQyOCAyLjcxNCAxLjQyOCA0LjkyNiAwIDEuNDgzLS41NDggMi44OC0xLjQ3MiAzLjk3MSAxLjA1LS4xOTcgMS43NzYtLjM3NCAxLjc3Ni0uMzc0bDMuNDExLS42NjZzLS40OTUgMi4wMzgtMi40IDQuMDAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUHJvbWV0aGV1czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1JhYmJpdG1xID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29SYWJiaXRtcShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y2MFwiLFxuICAgIGQ6IFwiTTMwLjA4MyAxMy4xOTdoLTkuODc4Yy0uNzktLjA4OC0xLjM5MS0uNzQtMS4zOTEtMS41MDhWMS45N2MwLS44My0uNzE4LTEuNDk1LTEuNTk1LTEuNDk1aC0zLjQ1NmMtLjg4NSAwLTEuNTk1LjY3Mi0xLjU5NSAxLjQ5NXY5LjgyYy0uMDQzLjc0LS42OTYgMS4zMzgtMS40NzggMS40MDZIOC4xMDJjLS43Ni0uMDg4LTEuMzQ4LS42ODYtMS4zOTgtMS40MDZWMS45N2MwLS44My0uNzE4LTEuNDk1LTEuNTk1LTEuNDk1SDEuNjUyQy43NjguNDc2LjA1OCAxLjE0OC4wNTggMS45N3YyOC4zNThjMCAuODMuNzE3IDEuNDk1IDEuNTk0IDEuNDk1aDI4LjQzOWMuODg0IDAgMS41OTQtLjY3MyAxLjU5NC0xLjQ5NVYxNC42OTJjLS4wMDctLjgyOS0uNzE4LTEuNDk1LTEuNjAyLTEuNDk1em0tNC41NSAxMC43MjRjMCAuODI5LS43MTggMS40OTUtMS41OTUgMS40OTVIMjAuNDhjLS44ODQgMC0xLjU5NS0uNjczLTEuNTk1LTEuNDk1di0zLjA1OGMwLS44My43MTgtMS40OTUgMS41OTUtMS40OTVoMy40NTdjLjg4NCAwIDEuNTk0LjY3MiAxLjU5NCAxLjQ5NXYzLjA1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1JhYmJpdG1xOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvUmVkaXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1JlZGlzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDMpXCIsXG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCAyMC43OTFjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNi0xLjg2My45NjYtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS42OTktMTAuNzgyLTQuNDM3LTEyLjQ2LTUuMjM0LS44MzgtLjM5OS0xLjI3OC0uNzM1LTEuMjc4LTEuMDUydi0zLjE4czEyLjEyMS0yLjYyMyAxNC4wNzgtMy4zMmMxLjk1Ny0uNjk5IDIuNjM2LS43MjQgNC4zMDEtLjExOCAxLjY2Ni42MDcgMTEuNjIzIDIuMzkzIDEzLjI3IDIuOTkybC0uMDAxIDMuMTM1YzAgLjMxNC0uMzguNjU5LTEuMjQgMS4xMDR6XCIsXG4gICAgZmlsbDogXCIjQTQxRTExXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTcuNjFjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNy0xLjg2My45NjUtMi44OTguOTU2LTQuMzcuMjU2LTEuNDcxLS42OTgtMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM0LTEuNjc2LS43OTctMS43MTItMS4zNDUtLjA2NC0xLjk4NyAxLjY0Ny0uNjQxIDEwLjkwNy00LjI1MiAxMi44NjQtNC45NSAxLjk1Ny0uNjk4IDIuNjM2LS43MjMgNC4zMDEtLjExNyAxLjY2Ni42MDcgMTAuMzYzIDQuMDQ4IDEyLjAwOSA0LjY0NyAxLjY0Ni42IDEuNzEgMS4wOTMuMDIgMS45Njh6XCIsXG4gICAgZmlsbDogXCIjRDgyQzIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTUuNjA2Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUtMTIuMyA1LjQxNi0xLjg2My45NjUtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS43LTEwLjc4Mi00LjQzOC0xMi40Ni01LjIzNS0uODM4LS4zOTgtMS4yNzgtLjczNC0xLjI3OC0xLjA1MXYtMy4xOFMxMi4zMDcgOS4xOSAxNC4yNjQgOC40OTJjMS45NTctLjY5OCAyLjYzNi0uNzIzIDQuMzAxLS4xMTcgMS42NjYuNjA2IDExLjYyMyAyLjM5MiAxMy4yNyAyLjk5MWwtLjAwMSAzLjEzNWMwIC4zMTUtLjM4LjY2LTEuMjQgMS4xMDV6XCIsXG4gICAgZmlsbDogXCIjQTQxRTExXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTIuNDI1Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUtMTIuMyA1LjQxNi0xLjg2My45NjYtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS42OTktMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM1LTEuNjc2LS43OTYtMS43MTItMS4zNDUtLjA2NC0xLjk4NiAxLjY0Ny0uNjQxIDEwLjkwNy00LjI1MyAxMi44NjQtNC45NSAxLjk1Ny0uNjk4IDIuNjM2LS43MjQgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTAuMzYzIDQuMDQ3IDEyLjAwOSA0LjY0NiAxLjY0Ni42IDEuNzEgMS4wOTQuMDIgMS45Njl6XCIsXG4gICAgZmlsbDogXCIjRDgyQzIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTAuMjI4Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUxLTEyLjMgNS40MTctMS44NjMuOTY1LTIuODk4Ljk1NS00LjM3LjI1Ni0xLjQ3MS0uNjk5LTEwLjc4Mi00LjQzOC0xMi40Ni01LjIzNEMuNjI3IDEwLjI2OC4xODcgOS45MzIuMTg3IDkuNjE1di0zLjE4czEyLjEyMS0yLjYyMyAxNC4wNzgtMy4zMmMxLjk1Ny0uNjk5IDIuNjM2LS43MjQgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTEuNjIzIDIuMzkxIDEzLjI3IDIuOTlsLS4wMDEgMy4xMzZjMCAuMzE0LS4zOC42NTktMS4yNCAxLjEwNHpcIixcbiAgICBmaWxsOiBcIiNBNDFFMTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCA3LjA0N2MtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE3LTEuODYzLjk2NS0yLjg5OC45NTUtNC4zNy4yNTYtMS40NzEtLjY5OS0xMC43ODItNC40MzctMTIuNDYtNS4yMzRDLS4yMTEgNi42ODktLjI0NyA2LjE0IDEuNCA1LjQ5OVMxMi4zMDcgMS4yNDcgMTQuMjY0LjU1YzEuOTU3LS43IDIuNjM2LS43MjQgNC4zMDEtLjExOCAxLjY2Ni42MDcgMTAuMzYzIDQuMDQ4IDEyLjAwOSA0LjY0NyAxLjY0Ni42IDEuNzEgMS4wOTMuMDIgMS45Njh6XCIsXG4gICAgZmlsbDogXCIjRDgyQzIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0yMC4xNTcgMy45ODVsLTIuNzQyLjI4My0uNjE0IDEuNDY4LS45OTItMS42MzgtMy4xNjYtLjI4MyAyLjM2Mi0uODQ3LS43MDgtMS4zIDIuMjEyLjg2IDIuMDg1LS42OC0uNTYzIDEuMzQ1em0tMy41MiA3LjEyM2wtNS4xMTgtMi4xMSA3LjMzNC0xLjExOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImVsbGlwc2VcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGN4OiA5LjU0MSxcbiAgICBjeTogNi4zMTEsXG4gICAgcng6IDMuOTIsXG4gICAgcnk6IDEuNTFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM3QTBDMDBcIixcbiAgICBkOiBcIk0yMy4zOTggNC4zODZsNC4zNCAxLjcwNS00LjMzNiAxLjcwM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0FEMjExNVwiLFxuICAgIGQ6IFwiTTE4LjU5NiA2LjI3NGw0LjgwMi0xLjg4OC4wMDQgMy40MDgtLjQ3MS4xODN6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUmVkaXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29TZWN1cml0eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2VjdXJpdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDcuMDA4VjBoMjB2MTYuNzQ0YzAgMy45MTMtNi4zNzggNi40NzctOS4wMTUgNy4yNTZWNy4wMDhIOXpcIixcbiAgICBmaWxsOiBcIiNGQTc0NEVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMjAuMDczVjEwaDE0djIyQzcuNjY3IDI3Ljk4IDMgMjQuMDA0IDMgMjAuMDczelwiLFxuICAgIGZpbGw6IFwiIzFEQkFCMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMGg4djE0Yy0yLjk4My0xLjE0LTgtMy43NTYtOC03LjA0M1YxMHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29TZWN1cml0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1NpdGVTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NpdGVTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTI3LjA1IDEwaC03LjM0bC0xMSAyMnMxNS42OTYtNC45NiAyMS44NTUtMTYuMDc2QzMyLjAzNyAxMy4yNjYgMzAuMDg4IDEwIDI3LjA1IDEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0yMS4zNTUgMEg3LjUzM0wuNDI3IDE0LjIxMUMtLjkwMyAxNi44NzEgMS4wMzIgMjAgNC4wMDQgMjBoNy4zNTFsMTAtMjB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMi41MzMgMTBMLjQyOCAxNC4yMTFDLS45MDMgMTYuODcxIDEuMDMyIDIwIDQuMDA1IDIwaDcuMzVsNS0xMEgyLjUzM3pcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29TaXRlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvU2tldGNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Ta2V0Y2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZBRTAwXCIsXG4gICAgZDogXCJNMTYgMzJMMCAxMS40NTRsNi45MzEtMTAuMzhMMTYgMGw5LjA2OSAxLjA3NEwzMiAxMS40NTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFQzZDMDBcIixcbiAgICBkOiBcIk0xNiAzMkwwIDExLjQ1NGgzMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGQUUwMFwiLFxuICAgIGQ6IFwiTTE2IDMyTDYuNDc3IDExLjQ1NGgxOS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkVGQjRcIixcbiAgICBkOiBcIk0xNiAwTDYuNDc3IDExLjQ1NGgxOS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkFFMDBcIixcbiAgICBkOiBcIk02LjkzMiAxLjA3NEwzLjM2OSA2LjMuMDAxIDExLjQ1NGg2LjU0MnpNMjUuMDY5IDEuMDc0TDI4LjYzMiA2LjMgMzIgMTEuNDU0aC02LjU0MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFRDMwNVwiLFxuICAgIGQ6IFwiTTYuOTMxIDEuMDc0bC0uNDUzIDEwLjM4TDE2IDB6TTI1LjA2OSAxLjA3NGwuNDUzIDEwLjM4TDE2IDB6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2tldGNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvU2xhY2sgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NsYWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0UwMUU1QVwiLFxuICAgIGQ6IFwiTTYuODEzIDIwLjE4YTMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMjgtMy4zMyAzLjMzNyAzLjMzNyAwIDAxMy4zMjktMy4zMjloMy4zMjl2My4zM3ptMS42NzcgMGEzLjMzNyAzLjMzNyAwIDAxMy4zMy0zLjMyOSAzLjMzNyAzLjMzNyAwIDAxMy4zMjggMy4zM3Y4LjMzNWEzLjMzNyAzLjMzNyAwIDAxLTMuMzI5IDMuMzI5IDMuMzM3IDMuMzM3IDAgMDEtMy4zMjktMy4zM1YyMC4xOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzM2QzVGMFwiLFxuICAgIGQ6IFwiTTExLjgyIDYuODEzYTMuMzM3IDMuMzM3IDAgMDEtMy4zMy0zLjMzQTMuMzM3IDMuMzM3IDAgMDExMS44Mi4xNTZhMy4zMzcgMy4zMzcgMCAwMTMuMzI4IDMuMzI5djMuMzI5SDExLjgyem0wIDEuNjc3YTMuMzM3IDMuMzM3IDAgMDEzLjMyOCAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMjkgMy4zMjhIMy40ODRhMy4zMzcgMy4zMzcgMCAwMS0zLjMzLTMuMzI5IDMuMzM3IDMuMzM3IDAgMDEzLjMzLTMuMzI5aDguMzM1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMkVCNjdEXCIsXG4gICAgZDogXCJNMjUuMTg3IDExLjgyYTMuMzM3IDMuMzM3IDAgMDEzLjMyOS0zLjMzIDMuMzM3IDMuMzM3IDAgMDEzLjMyOSAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMyOGgtMy4zMjhWMTEuODJ6bS0xLjY3OCAwYTMuMzM3IDMuMzM3IDAgMDEtMy4zMjkgMy4zMjggMy4zMzcgMy4zMzcgMCAwMS0zLjMyOS0zLjMyOVYzLjQ4NGEzLjMzNyAzLjMzNyAwIDAxMy4zMy0zLjMzIDMuMzM3IDMuMzM3IDAgMDEzLjMyOCAzLjMzdjguMzM1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUNCMjJFXCIsXG4gICAgZDogXCJNMjAuMTggMjUuMTg3YTMuMzM3IDMuMzM3IDAgMDEzLjMzIDMuMzI5IDMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMyOSAzLjMzNyAzLjMzNyAwIDAxLTMuMzI5LTMuMzN2LTMuMzI4aDMuMzN6bTAtMS42NzhhMy4zMzcgMy4zMzcgMCAwMS0zLjMyOS0zLjMyOSAzLjMzNyAzLjMzNyAwIDAxMy4zMy0zLjMyOWg4LjMzNWEzLjMzNyAzLjMzNyAwIDAxMy4zMjkgMy4zMyAzLjMzNyAzLjMzNyAwIDAxLTMuMzMgMy4zMjhIMjAuMTh6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2xhY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29VcHRpbWUgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1VwdGltZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzNFQkVCMFwiLFxuICAgIGQ6IFwiTTE5IDE1YzAgNy4wNjItNC44ODggMTIuOTY5LTExLjQ2IDE0LjU2M0ExNS45MTQgMTUuOTE0IDAgMDAxNiAzMmM4LjgzNiAwIDE2LTcuMTYzIDE2LTE2di0zbC02LjUtNi02LjUgNnYyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDdDXCIsXG4gICAgZDogXCJNNi44MzMgMjYuNjQ2YTExLjk1NCAxMS45NTQgMCAwMDguNTQ0LTcuODM0QTEyLjQzIDEyLjQzIDAgMDExMyAxMS41Vi4yOTJDNS42IDEuNjk2IDAgOC4xOSAwIDE2LjAwMmMwIDQuMzU4IDEuNzUgOC4zMDYgNC41NzcgMTEuMTkybDIuMjU2LS41NDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMzAuMzYyIDIzLjAyYy0xLjQ5NC42My0zLjEzNy45OC00Ljg2MS45OGExMi40NDMgMTIuNDQzIDAgMDEtNy44NTItMi43OCAxNS4wNDIgMTUuMDQyIDAgMDEtMTAuMTEgOC4zNDNBMTUuOTEgMTUuOTEgMCAwMDE2LjAwMiAzMmM2LjMxNCAwIDExLjc1OC0zLjY2OSAxNC4zNi04Ljk4XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29VcHRpbWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29XZWJob29rID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29XZWJob29rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0M3M0E2M1wiLFxuICAgIGQ6IFwiTTE0Ljk0MyAxMy41NjNjLTEuMzI3IDIuMjMtMi41OTcgNC4zODgtMy44OTQgNi41MzEtLjMzNC41NS0uNDk4Ljk5OC0uMjMyIDEuNjk4LjczNCAxLjkzMS0uMzAyIDMuODExLTIuMjUgNC4zMjEtMS44MzcuNDgyLTMuNjI3LS43MjYtMy45OTItMi42OTItLjMyMy0xLjc0MSAxLjAyOC0zLjQ0OCAyLjk0OC0zLjcyLjE2LS4wMjMuMzI1LS4wMjYuNTk1LS4wNDZsMi45Mi00Ljg5NkM5LjIgMTIuOTMzIDguMTA4IDEwLjggOC4zNSA4LjE1NGMuMTcxLTEuODcuOTA3LTMuNDg2IDIuMjUtNC44MWE3LjYzOSA3LjYzOSAwIDAxOS41MzEtMWMyLjkxIDEuODcgNC4yNDQgNS41MTIgMy4xMDcgOC42MjlsLTIuNjY4LS43MjRjLjM1Ny0xLjczMy4wOTMtMy4yOS0xLjA3Ni00LjYyMy0uNzcyLS44OC0xLjc2My0xLjM0MS0yLjg5LTEuNTExLTIuMjU4LS4zNDEtNC40NzYgMS4xMS01LjEzNCAzLjMyNy0uNzQ4IDIuNTE2LjM4MyA0LjU3MiAzLjQ3MyA2LjEyMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzRCNEI0QlwiLFxuICAgIGQ6IFwiTTE4LjczIDEwLjkyNmwyLjgyMyA0Ljk4YzQuNzUzLTEuNDcgOC4zMzYgMS4xNiA5LjYyMiAzLjk3NyAxLjU1MiAzLjQwMi40OTEgNy40MzItMi41NTggOS41MzEtMy4xMyAyLjE1NS03LjA4OSAxLjc4Ny05Ljg2Mi0uOTgxbDIuMTc2LTEuODIxYzIuNzM5IDEuNzc0IDUuMTM1IDEuNjkgNi45MTMtLjQxYTQuNzY2IDQuNzY2IDAgMDAtLjA3Ny02LjIxOWMtMS44LTIuMDI1LTQuMjEzLTIuMDg2LTcuMTMtLjE0My0xLjIwOS0yLjE0Ni0yLjQ0LTQuMjc1LTMuNjEtNi40MzYtLjM5Ni0uNzI5LS44MzItMS4xNTItMS43MjItMS4zMDYtMS40ODctLjI1Ny0yLjQ0Ni0xLjUzNC0yLjUwNC0yLjk2NGEzLjI1OCAzLjI1OCAwIDAxMi4wOC0zLjE5MiAzLjI0MyAzLjI0MyAwIDAxMy42NzEgMS4wMDJjLjcxLjg5Ni45MzUgMS45MDUuNTYyIDMuMDEtLjEwNC4zMDktLjIzOC42MDctLjM4NC45NzJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0QTRBNEFcIixcbiAgICBkOiBcIk0yMC45NjMgMjQuNDAxaC01LjcyYy0uNTUgMi4yNTYtMS43MzQgNC4wNzctMy43NzUgNS4yMzUtMS41ODYuOS0zLjI5NiAxLjIwNS01LjExNi45MTFDMyAzMC4wMDcuMjYgMjYuOTkuMDE5IDIzLjU5M2MtLjI3My0zLjg0OCAyLjM3Mi03LjI2OCA1Ljg5OC04LjAzNmwuNzMyIDIuNjU4Yy0zLjIzNCAxLjY1LTQuMzUzIDMuNzMtMy40NDggNi4zMy43OTcgMi4yODcgMy4wNiAzLjU0MSA1LjUxOCAzLjA1NiAyLjUxLS40OTUgMy43NzYtMi41ODEgMy42MjEtNS45MjkgMi4zOCAwIDQuNzYxLS4wMjQgNy4xNC4wMTIuOTMuMDE1IDEuNjQ4LS4wODEgMi4zNDgtLjkgMS4xNTItMS4zNDkgMy4yNzMtMS4yMjcgNC41MTUuMDQ2IDEuMjY4IDEuMzAxIDEuMjA3IDMuMzk1LS4xMzUgNC42NDFhMy4yMzYgMy4yMzYgMCAwMS00LjU1My0uMTU3Yy0uMjQ5LS4yNjctLjQ0NS0uNTg1LS42OTItLjkxM3pcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29XZWJob29rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvV2luZG93cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvV2luZG93cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQURFRlwiLFxuICAgIGQ6IFwiTTAgNC41MWwxMi45NzctMS43NjguMDA2IDEyLjUxOC0xMi45NzEuMDc0TDAgNC41MXptMTIuOTcgMTIuMTkybC4wMTEgMTIuNTI5LTEyLjk3LTEuNzg0LS4wMDItMTAuODI5IDEyLjk2Mi4wODR6bTEuNTc0LTE0LjE5TDMxLjc1MSAwdjE1LjFsLTE3LjIwNy4xMzdWMi41MTF6bTE3LjIxIDE0LjMwOGwtLjAwMyAxNS4wMzMtMTcuMjA3LTIuNDI5LS4wMjQtMTIuNjMyIDE3LjIzNS4wMjh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29XaW5kb3dzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy41NTcgNS4wNWMuMTctLjIwMi40NTctLjUxMi44Ni0uOTNDMTkuNDgzIDMuMDE3IDIxLjgyOCAxIDIzLjgwMSAxSDMwdjMwaC02LjJjLTEuOTcyIDAtMy45OTUtMS40NDktNS4zODMtMy4xMDZsLS43NjQtMS4wNTIgMi43NS0zLjQ3N2MzLjQ2Mi00LjM3NiAzLjQ2My0xMC4zMzIuMDAxLTE0LjcwN0wxNy41NTcgNS4wNXpcIixcbiAgICBmaWxsOiBcIiNGRUM1MTRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMzFWMWg1LjgxYzEuNzEgMCAzLjM1Ljc4NiA0LjM4NyAyLjFsNS44NTUgNy40MmMyLjU5OCAzLjI4MyAyLjU5OCA3LjY5OC0uMDAyIDEwLjk4M2wtNS44NTUgNy40MDNDMTEuMTU4IDMwLjIxNyA5LjUyIDMxIDcuODE1IDMxSDJ6XCIsXG4gICAgZmlsbDogXCIjRjA0RTk4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4zODQgMjQuODlMMTIuMTUgMjEuN2MtMi44NjgtMy4zMTgtMi44NjgtOC4yMi4wMDItMTEuMzIyIDEuNTM1LTEuNjM5IDIuNjExLTIuNzE4IDMuMjMtMy4yMzhsMi42NyAzLjIzOGMyLjYzNyAzLjM4NSAyLjU3NSA3Ljk4Ny0uMDYyIDExLjM3NGwtMi42MDcgMy4xMzd6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dzdGFzaEZpbHRlciA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaEZpbHRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuOTE0IDFjLTMuNiAwLTUuODk3IDEuMTExLTUuODk3IDEuODc2IDAgLjc2NiAyLjI5NyAxLjg3NyA1Ljg5NyAxLjg3N3M1Ljg5Ny0xLjExMSA1Ljg5Ny0xLjg3N0MxMy44MTEgMi4xMTEgMTEuNTE0IDEgNy45MTQgMW0zLjk4IDcuOTg4Yy0xLjE4Ny4zMzEtMi42MDEuNTAyLTMuOTguNTAyLTEuMzgzIDAtMi44MDEtLjE3Mi0zLjk5MS0uNTA1bDIuODYzIDMuMjQydjIuNTE1Yy4xMzYuMDguNTE1LjIxNCAxLjEyOC4yMTQuNjEgMCAuOTg5LS4xMzMgMS4xMjYtLjIxM3YtMi41MTVsMi44NTQtMy4yNHptMi4zOTQtMS4yMDZsLTQuMjQ4IDQuODIzdjIuMjQ2aC4wMDRjMCAuNzYzLTEuMDY5IDEuMTA1LTIuMTMgMS4xMDUtMS4wNiAwLTIuMTMtLjM0Mi0yLjEzLTEuMTA1aC4wMDJ2LTIuMjQ1TDEuMzIxIDcuNTVsLjAxLS4wMDhBMS41MyAxLjUzIDAgMDExIDYuNjA3VjIuNzhoLjAyQzEuMTQuOTczIDQuNjI3IDAgNy45MTMgMGMzLjI4NiAwIDYuNzc0Ljk3MyA2Ljg5NCAyLjc4aC4wMnYzLjgyN2MwIC4zNDMtLjEyLjY1Ny0uMzM1Ljk0MWwtLjAwMy4wMDRjLS4wNi4wNzktLjEyOC4xNTUtLjIwMi4yM3ptLS41NzgtLjg1NmEuNTYuNTYgMCAwMC4xMTgtLjMxOVY0LjQxMWMtMS4yODguODc5LTMuNjQ5IDEuMzQyLTUuOTE0IDEuMzQyQzUuNjUgNS43NTMgMy4yODggNS4yOSAyIDQuNDExdjIuMTk2QzIgNy4zNzUgNC4zMDQgOC40OSA3LjkxNCA4LjQ5YzIuODc5IDAgNC45MjctLjcwOSA1LjYzOS0xLjM4NWwuMTU3LS4xOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hGaWx0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ3N0YXNoSWYgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hJZihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuOTE4IDkuNzk5bC00LjgyIDQuODE5IDIuODgtLjQzLjE0OC45ODdMMCAxNS45NDNsLjc2OC01LjEyNi45ODguMTQ4LS40NTMgMy4wMzMgNC45MzYtNC45MzVhMi4wMDMgMi4wMDMgMCAwMTEuMjY1LTIuODg1VjBoMXY2LjE3OGEyLjAwMyAyLjAwMyAwIDAxMS4yNjMgMi44ODRsNC44NjUgNC44NjYtLjQ0My0yLjk2My45ODgtLjE0Ny43NjggNS4xMjYtNS4xMjctLjc2OS4xNS0uOTg4IDIuOTUuNDQxLTQuODMtNC44M2MtLjMxMi4yMDMtLjY4NS4zMi0xLjA4NS4zMi0uNCAwLS43NzMtLjExNy0xLjA4NS0uMzJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoSWY7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ3N0YXNoSW5wdXQgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hJbnB1dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNzQ3IDEwLjk5MmgxMy4xYS4xMjMuMTIzIDAgMDAuMTIyLS4xMjNWOC41MWEuMTIyLjEyMiAwIDAwLS4xMjItLjEyMkgxLjEyMkEuMTIyLjEyMiAwIDAwMSA4LjUxdjIuMzZjMCAuMDY2LjA1NS4xMjIuMTIyLjEyMmguNjI1em0xMi4wMTEgMUgyLjIxVjE2aC0xdi00LjAwOGgtLjA4OEExLjEyNCAxLjEyNCAwIDAxMCAxMC44N1Y4LjUxYzAtLjYyLjUwMy0xLjEyMiAxLjEyMi0xLjEyMmgxMy43MjVjLjYyIDAgMS4xMjIuNTAyIDEuMTIyIDEuMTIydjIuMzZjMCAuNjE4LS41MDMgMS4xMjItMS4xMjIgMS4xMjJoLS4wODlWMTZoLTF2LTQuMDA4em0tNi4yNy03LjQ4N1YwaDF2NC41MjlsMi40MDctMi4yNjIuNjg1LjczTDggNi4zNTYgNC40MiAyLjk5NWwuNjg1LS43MjkgMi4zODMgMi4yNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hJbnB1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nc3Rhc2hPdXRwdXQgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hPdXRwdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjIxIDQuMDA4SDEzLjc2VjBoMXY0LjAwOGguMDg4Yy42MTkgMCAxLjEyMi41MDQgMS4xMjIgMS4xMjNWNy40OWMwIC42Mi0uNTAzIDEuMTIyLTEuMTIyIDEuMTIySDEuMTIyQTEuMTIyIDEuMTIyIDAgMDEwIDcuNDlWNS4xM2MwLS42MTguNTAzLTEuMTIyIDEuMTIyLTEuMTIyaC4wODlWMGgxdjQuMDA4em0xMS41NDkgMUgxLjEyQS4xMjMuMTIzIDAgMDAxIDUuMTNWNy40OWMwIC4wNjguMDU1LjEyMi4xMjIuMTIyaDEzLjcyNWEuMTIyLjEyMiAwIDAwLjEyMi0uMTIyVjUuMTNhLjEyMy4xMjMgMCAwMC0uMTIyLS4xMjJoLTEuMDg4em0tNS4zMDEgOS4wOTdsMi40MDUtMi4yNi42ODYuNzI4LTMuNTggMy4zNjMtMy41OC0zLjM2My42ODYtLjcyOCAyLjM4MyAyLjI0VjkuNTc3aDF2NC41Mjh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoT3V0cHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dzdGFzaFF1ZXVlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ3N0YXNoUXVldWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4zMzkgMTUuNDY0SDQuNzdhMy4yNDggMy4yNDggMCAwMS0zLjI0NS0zLjI0NFY0LjU0OUgwdi0xaDIuNTI2djguNjdhMi4yNDcgMi4yNDcgMCAwMDIuMjQ1IDIuMjQ1aDYuNTY4YTIuMjQ3IDIuMjQ3IDAgMDAyLjI0NC0yLjI0NFYzLjU0OWgyLjQ1NXYxaC0xLjQ1NXY3LjY3YTMuMjQ3IDMuMjQ3IDAgMDEtMy4yNDQgMy4yNDV6bS41MTMtNS45NjJ2MS4wOTVsLTMuODQ4IDEuNzItMy44NS0xLjcyVjkuNTAybDMuODUgMS43MiAzLjg0OC0xLjcyem0wLTQuMjUxdjEuMDk1bC0zLjg0OCAxLjcyLTMuODUtMS43MlY1LjI1bDMuODUgMS43MiAzLjg0OC0xLjcyem0wLTQuMjUxdjEuMDk1bC0zLjg0OCAxLjcyLTMuODUtMS43MlYxbDMuODUgMS43MkwxMS44NTIgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hRdWV1ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWFnbmV0ID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25ldChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNTUyIDEwLjcxYTMuMDA4IDMuMDA4IDAgMDA0LjE5LjczOGwxLjY0Mi0xLjE1IDEuMTUgMS42NDItMS42NDMgMS4xNWE1LjAxMyA1LjAxMyAwIDExLTUuNzUtOC4yMTJsMS42NDItMS4xNSAxLjE1IDEuNjQzLTEuNjQyIDEuMTVhMy4wMDcgMy4wMDcgMCAwMC0uNzM5IDQuMTg5em04LjI5Ni0yLjEzN2wxLjE1IDEuNjQzLTEuNjQzIDEuMTQ5LTEuMTUtMS42NDIgMS42NDMtMS4xNXptLTQuNi02LjU3MWwxLjE1IDEuNjQzLTEuNjQzIDEuMTUtMS4xNS0xLjY0MiAxLjY0Mi0xLjE1MXptMS45NyAxLjA2OEw5LjA3IDEuNDI4YTEuMDAzIDEuMDAzIDAgMDAtMS4zOTctLjI0NkwzLjU2NiA0LjA1N0E1Ljk5NSA1Ljk5NSAwIDAwMS4wOTIgNy45NGE1Ljk5MyA1Ljk5MyAwIDAwLjk5NiA0LjQ5NSA1Ljk5IDUuOTkgMCAwMDMuODgzIDIuNDczIDUuOTkxIDUuOTkxIDAgMDA0LjQ5NS0uOTk2bDQuMTA3LTIuODc1Yy40NTQtLjMxOC41NjMtLjk0My4yNDYtMS4zOTZsLTEuMTUtMS42NDNhMS4wMDIgMS4wMDIgMCAwMC0xLjM5Ni0uMjQ2bC00LjEwNyAyLjg3NWEyLjAwMiAyLjAwMiAwIDAxLTEuNDk4LjMzMiAyIDIgMCAwMS0xLjYyNy0yLjMyM2MuMDktLjUwNS4zNzEtLjk3Ni44MjQtMS4yOTRsNC4xMDctMi44NzZjLjQ1NC0uMzE3LjU2NC0uOTQyLjI0Ni0xLjM5NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFnbmV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4xNDMgMTUuODVsLTMuODcyLTMuODcyYS41LjUgMCAwMS0uMDM0LS43MzggNi4wMSA2LjAxIDAgMDAwLTguNDg2IDYuMDA0IDYuMDA0IDAgMDAtOC40ODQgMCA2LjAxIDYuMDEgMCAwMDAgOC40ODYgNS45NiA1Ljk2IDAgMDA0LjI0MiAxLjc1Ny41LjUgMCAwMTAgMSA2Ljk1NSA2Ljk1NSAwIDAxLTQuOTQ5LTIuMDVjLTIuNzI4LTIuNzMtMi43MjgtNy4xNzEgMC05LjkgMi43MjgtMi43MyA3LjE2OC0yLjczIDkuODk4IDAgMi42MDkgMi42MSAyLjcyMyA2Ljc4NS4zNDIgOS41MzJsMy41NjUgMy41NjRhLjUwMi41MDIgMCAwMS0uNzA4LjcwOHpNNi4yNTQgM2wuMjc3IDUuMDYzaC45MzVMNy43NTQgM2gtMS41em0uMjIyIDcuNTQ4YS43MjcuNzI3IDAgMDAuNTMzLjIyMi43MTcuNzE3IDAgMDAuNTItLjIyLjcxNS43MTUgMCAwMC4yMjUtLjUzLjcxNi43MTYgMCAwMC0uMjIyLS41MzQuNzI0LjcyNCAwIDAwLS41MjMtLjIxNi43MzEuNzMxIDAgMDAtLjUzMy4yMTkuNzE5LjcxOSAwIDAwLS4yMjIuNTNjMCAuMjA1LjA3NC4zOC4yMjIuNTI5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduaWZ5V2l0aE1pbnVzID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25pZnlXaXRoTWludXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgNmEuNS41IDAgMDEwIDFoLTZhLjUuNSAwIDAxMC0xaDZ6bS43NCA0Ljc0YzAtLjExNy4wNC0uMjI1LjEwNy0uMzFBNS40NzggNS40NzggMCAwMDEyIDYuNSA1LjUgNS41IDAgMTA2LjUgMTJhLjUuNSAwIDExMCAxIDYuNSA2LjUgMCAxMTQuOTM2LTIuMjdsNC40MTkgNC40MThhLjUuNSAwIDAxLS43MDcuNzA3bC00Ljc2OC00Ljc2OGEuNDk5LjQ5OSAwIDAxLS4xNC0uMzQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aE1pbnVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduaWZ5V2l0aFBsdXMgPSBmdW5jdGlvbiBFdWlJY29uTWFnbmlmeVdpdGhQbHVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA2aDIuNWEuNS41IDAgMDEwIDFIN3YyLjVhLjUuNSAwIDAxLTEgMFY3SDMuNWEuNS41IDAgMDEwLTFINlYzLjVhLjUuNSAwIDAxMSAwVjZ6bTMuMjQgNC43NGMwLS4xMTcuMDQtLjIyNS4xMDctLjMxQTUuNDc4IDUuNDc4IDAgMDAxMiA2LjUgNS41IDUuNSAwIDEwNi41IDEyYS41LjUgMCAxMTAgMSA2LjUgNi41IDAgMTE0LjkzNi0yLjI3bDQuNDE5IDQuNDE4YS41LjUgMCAwMS0uNzA3LjcwN2wtNC43NjgtNC43NjhhLjQ5OS40OTkgMCAwMS0uMTQtLjM0N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFnbmlmeVdpdGhQbHVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYXBNYXJrZXIgPSBmdW5jdGlvbiBFdWlJY29uTWFwTWFya2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NSAxNC4yMjRhLjUwMi41MDIgMCAwMC44OTcgMGw0LThhLjUuNSAwIDAwLjA1My0uMjM1IDQuNjcyIDQuNjcyIDAgMDAtLjA4NC0uNzA1IDUuNTM4IDUuNTM4IDAgMDAtLjUwNS0xLjUxMkMxMS4xODkgMi4zNjIgOS45MDYgMS41IDggMS41Yy0xLjkwNiAwLTMuMTkuODYyLTMuOTEgMi4yNzItLjI0OC40ODUtLjQxLjk5OC0uNTA2IDEuNTEyLS4wNTguMzEtLjA4LjU1NC0uMDg0LjcwNWEuNS41IDAgMDAuMDUzLjIzNWwzLjk5NyA4ek04IDVhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bS0zLjQ5My44OTVjLjAwOS0uMTA2LjAyNy0uMjUzLjA2LS40MjkuMDc5LS40MjQuMjEzLS44NDguNDEzLTEuMjM4QzUuNTM3IDMuMTM4IDYuNDg3IDIuNSA4IDIuNWMxLjUxMyAwIDIuNDYzLjYzOCAzLjAyIDEuNzI4LjIuMzkuMzM0LjgxNC40MTMgMS4yMzguMDMzLjE3Ni4wNTEuMzIzLjA2LjQzTDggMTIuODgxIDQuNTA3IDUuODk1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYXBNYXJrZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbW9yeSA9IGZ1bmN0aW9uIEV1aUljb25NZW1vcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDEwaDJWNkg3ek0zIDEwaDJWNkgzek0xMS4wMjUgMTBoMlY2aC0yek0zLjUgMTMuNzVoMXYtMi40aC0xek02LjE3NSAxMy43NWgxLjAwMXYtMi40SDYuMTc1ek04Ljg1IDEzLjc1aDF2LTIuNGgtMXpNMTEuNTI1IDEzLjc1aDF2LTIuNGgtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgM3Y3LjA1aDF2My42OThoMXYtMy42OTloMTJ2My42OTloMXYtMy42OTloMVYzSDB6bTEgNmgxNFY0SDF2NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVtb3J5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NZW51ID0gZnVuY3Rpb24gRXVpSWNvbk1lbnUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDJoMTZ2MkgwVjJ6bTAgNWgxNnYySDBWN3ptMTYgNUgwdjJoMTZ2LTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbnVEb3duID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVEb3duKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA3LjVjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwMS0uNDg3LS40MTJMMyA3LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMkw2IDcuNXpNMy41MSA0YS41MTMuNTEzIDAgMDEtLjUwMi0uNDEyTDMgMy41YzAtLjI3Ni4yMjgtLjUuNTEtLjVoOC45OGMuMjUgMCAuNDU5LjE4My41MDIuNDEyTDEzIDMuNWMwIC4yNzYtLjIyOC41LS41MS41SDguNDkzdjcuNzkybDIuMDYtMi4wNmEuNS41IDAgMTEuNzA3LjcwN0w5LjE0IDEyLjU2QTEuNDk2IDEuNDk2IDAgMDE4LjAyNiAxM0w3Ljk5MyAxM2EuNTAxLjUwMSAwIDAxLS4xMTgtLjAxNCAxLjQ5MyAxLjQ5MyAwIDAxLS44NTctLjQyNmwtMi4xMjItMi4xMmEuNS41IDAgMDEuNzA4LS43MDhsMS44ODkgMS44OVY0SDMuNTF6TTEzIDcuNWMwIC4yNzYtLjIxNi41LS40OTUuNWgtMi4wMWEuNTAzLjUwMyAwIDAxLS40ODctLjQxMkwxMCA3LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMkwxMyA3LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVEb3duOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NZW51TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25NZW51TGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMDE0IDcuMzgyYS41MDEuNTAxIDAgMDAtLjAxMy4xNTJjLS4wMTQuNC4xMzMuODA2LjQzOSAxLjExMmwyLjEyIDIuMTIyYS41LjUgMCAxMC43MDgtLjcwOEwyLjIwOCA4SDE0LjVhLjUuNSAwIDAwMC0xSDIuMzc5bDEuODg5LTEuODlhLjUuNSAwIDAwLS43MDctLjcwNkwxLjQ0IDYuNTI0Yy0uMjQxLjI0Mi0uMzgzLjU0NC0uNDI2Ljg1OHpNMTQuNSAzaC03YS41LjUgMCAwMDAgMWg3YS41LjUgMCAwMDAtMXptMCA4aC03YS41LjUgMCAxMDAgMWg3YS41LjUgMCAxMDAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudUxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbnVSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25NZW51UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC45ODYgNy4zODJhLjUwMS41MDEgMCAwMS4wMTMuMTUyYy4wMTQuNC0uMTMzLjgwNi0uNDM5IDEuMTEybC0yLjEyIDIuMTIyYS41LjUgMCAxMS0uNzA4LS43MDhMMTMuNzkyIDhIMS41YS41LjUgMCAwMTAtMWgxMi4xMjFsLTEuODg5LTEuODlhLjUuNSAwIDAxLjcwNy0uNzA2bDIuMTIxIDIuMTJjLjI0MS4yNDIuMzgzLjU0NC40MjYuODU4ek0xLjUgM2g3YS41LjUgMCAwMTAgMWgtN2EuNS41IDAgMDEwLTF6bTAgOGg3YS41LjUgMCAxMTAgMWgtN2EuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVudVVwID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVVcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjAxIDguNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEybC4wMDguMDg4YzAgLjI3Ni0uMjE2LjUtLjQ5NS41aC0yLjAxYS41MDMuNTAzIDAgMDEtLjQ4Ny0uNDEyTDEwLjAxIDguNXpNMTIuNSAxMmMuMjUgMCAuNDU5LjE4My41MDIuNDEybC4wMDguMDg4YzAgLjI3Ni0uMjI4LjUtLjUxLjVIMy41MmEuNTEzLjUxMyAwIDAxLS41MDItLjQxMkwzLjAxIDEyLjVjMC0uMjc2LjIyOC0uNS41MS0uNWgzLjk4N1Y0LjIwOGwtMi4wNiAyLjA2YS41LjUgMCAxMS0uNzA3LS43MDdMNi44NiAzLjQ0QTEuNDk2IDEuNDk2IDAgMDE3Ljk3NCAzTDguMDA3IDNjLjA0IDAgLjA4LjAwNS4xMTguMDE0LjMxNC4wNDMuNjE2LjE4NS44NTcuNDI2bDIuMTIyIDIuMTJhLjUuNSAwIDAxLS43MDguNzA4bC0xLjg4OS0xLjg5VjEySDEyLjV6TTMgOC41YzAtLjI3Ni4yMTYtLjUuNDk1LS41aDIuMDFjLjI0MyAwIC40NDUuMTgzLjQ4Ny40MTJMNiA4LjVjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwMS0uNDg3LS40MTJMMyA4LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVVcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVyZ2UgPSBmdW5jdGlvbiBFdWlJY29uTWVyZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjM1MiA2SDIuNWEuNS41IDAgMDEwLTFoNC44NTJMNS4xMiAyLjcyMWMtLjE4LS4xODMtLjE1NS0uNDYuMDU1LS42MTZhLjU1MS41NTEgMCAwMS43MDUuMDQ4bDMgMy4wNjJjLjE2LjE2NC4xNi40MDUgMCAuNTdsLTMgMy4wNjJBLjUzMi41MzIgMCAwMTUuNSA5YS41NC41NCAwIDAxLS4zMjUtLjEwNmMtLjIxLS4xNTctLjIzNS0uNDMzLS4wNTUtLjYxNkw3LjM1MiA2em0xLjI5NiA0SDEzLjVhLjUuNSAwIDAxMCAxSDguNjQ4bDIuMjMyIDIuMjc4Yy4xOC4xODMuMTU1LjQ2LS4wNTUuNjE3QS41NC41NCAwIDAxMTAuNSAxNGEuNTMyLjUzMiAwIDAxLS4zOC0uMTUzbC0zLTMuMDYzYS4zOTcuMzk3IDAgMDEwLS41NjhsMy0zLjA2M2EuNTUxLjU1MSAwIDAxLjcwNS0uMDQ3Yy4yMS4xNTYuMjM1LjQzMy4wNTUuNjE2TDguNjQ4IDEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZXJnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWluaW1pemUgPSBmdW5jdGlvbiBFdWlJY29uTWluaW1pemUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjE0NiAxNC4xNDZsNC00YS41LjUgMCAwMS43NjUuNjM4bC0uMDU3LjA3LTQgNGEuNS41IDAgMDEtLjc2NS0uNjM4bC4wNTctLjA3IDQtNC00IDR6TTYuNSA4QTEuNSAxLjUgMCAwMTggOS41djNhLjUuNSAwIDExLTEgMHYtM2EuNS41IDAgMDAtLjUtLjVoLTNhLjUuNSAwIDAxMC0xaDN6bTItNWEuNS41IDAgMDEuNS41djNhLjUuNSAwIDAwLjUuNWgzYS41LjUgMCAxMTAgMWgtM0ExLjUgMS41IDAgMDE4IDYuNXYtM2EuNS41IDAgMDEuNS0uNXptMS42NTEgMi4xNDZsNC00YS41LjUgMCAwMS43NjUuNjM4bC0uMDU3LjA3LTQgNGEuNS41IDAgMDEtLjc2NS0uNjM4bC4wNTctLjA3IDQtNC00IDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1pbmltaXplOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NaW51cyA9IGZ1bmN0aW9uIEV1aUljb25NaW51cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiAxMCxcbiAgICBoZWlnaHQ6IDEuNSxcbiAgICB4OiAzLFxuICAgIHk6IDcuMjUsXG4gICAgcng6IDAuNVxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1pbnVzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uTWludXNJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMEMxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwem0wIC44ODJhNi42MTggNi42MTggMCAxMDAgMTMuMjM2QTYuNjE4IDYuNjE4IDAgMDA3LjUuODgyek0zLjUgN2g4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1pbnVzSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1pbnVzSW5DaXJjbGVGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMEMxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwem0tNCA3YS41LjUgMCAwMDAgMWg4YS41LjUgMCAxMDAtMWgtOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxNnY1aDIuMDM4YTEzLjE3OSAxMy4xNzkgMCAwMDAgMkg3djVINXYtNUgwdi0yaDV2LTVoMnpNNyAwdjVoNXYySDd2NUg1VjdIMFY1aDVWMGgyem0xNiAwdjVoNXYyaC01djIuMDM4YTEzLjE3OSAxMy4xNzkgMCAwMC0yIDBWN2gtNVY1aDVWMGgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMiAxMGMzLjA3MyAwIDUuODc3IDEuMTU1IDggMy4wNTZ2My4yNTJBOS44MiA5LjgyIDAgMTAxNi4zMDcgMzBoLTMuMjUxQTExLjk1NSAxMS45NTUgMCAwMTEwIDIyYzAtNi42MjcgNS4zNzMtMTIgMTItMTJ6bTEgOHYzaDN2MmgtM3YzaC0ydi0zaC0zdi0yaDN2LTNoMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVBZHZhbmNlZEpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMzJDNy4xNjMgMzIgMCAyNC44MzcgMCAxNlM3LjE2MyAwIDE2IDBzMTYgNy4xNjMgMTYgMTZoLTJjMC03LjczMi02LjI2OC0xNC0xNC0xNFMyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTR2MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjcgMjB2MTJoLTJWMjBoMnptLTUgNHY4aC0ydi04aDJ6bTEwLTJ2MTBoLTJWMjJoMnpNMTcgOXY2aDZ2MmgtNnY2aC0ydi02SDl2LTJoNlY5aDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1sQ3JlYXRlTXVsdGlNZXRyaWNKb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAyNGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMjQgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHpNNCAyNmEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHptMjQgMGEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHpNMTcgOXY2aDZ2MmgtNnY2aC0ydi02SDl2LTJoNlY5aDJ6TTQgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMjQgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMCAyYTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00ek00IDJhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS4wNzggMjkuMDVjLjEwMi42NzcuMyAxLjMyMi41ODIgMS45MkExNS45NjMgMTUuOTYzIDAgMDExNiAzMmMtMS45OTMgMC0zLjktLjM2NC01LjY2LTEuMDMuMjgxLS41OTguNDgtMS4yNDMuNTgyLTEuOTIgMS41NzQuNjE0IDMuMjg3Ljk1IDUuMDc4Ljk1IDEuNzkxIDAgMy41MDQtLjMzNiA1LjA3OC0uOTV6bTkuODkyLTE4LjcxQTE1Ljk2MyAxNS45NjMgMCAwMTMyIDE2YzAgMS45OTMtLjM2NCAzLjktMS4wMyA1LjY2YTYuOTQ4IDYuOTQ4IDAgMDAtMS45Mi0uNTgyYy42MTQtMS41NzQuOTUtMy4yODcuOTUtNS4wNzggMC0xLjc5MS0uMzM2LTMuNTA0LS45NS01LjA3OGE2Ljk0OCA2Ljk0OCAwIDAwMS45Mi0uNTgyem0tMjkuOTQgMGMuNTk4LjI4MSAxLjI0My40OCAxLjkyLjU4MkExMy45NjUgMTMuOTY1IDAgMDAyIDE2YzAgMS43OTEuMzM2IDMuNTA0Ljk1IDUuMDc4LS42NzcuMTAyLTEuMzIyLjMtMS45Mi41ODJBMTUuOTY0IDE1Ljk2NCAwIDAxMCAxNmMwLTEuOTkzLjM2NC0zLjkgMS4wMy01LjY2ek0xNiAwYzEuOTkzIDAgMy45LjM2NCA1LjY2IDEuMDNhNi45NDggNi45NDggMCAwMC0uNTgyIDEuOTJBMTMuOTY1IDEzLjk2NSAwIDAwMTYgMmMtMS43OTEgMC0zLjUwNC4zMzYtNS4wNzguOTVhNi45NDggNi45NDggMCAwMC0uNTgyLTEuOTJBMTUuOTY0IDE1Ljk2NCAwIDAxMTYgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBjNS41MjMgMCAxMCA0LjQ3NyAxMCAxMHMtNC40NzcgMTAtMTAgMTBTNiAxNS41MjMgNiAxMCAxMC40NzcgMCAxNiAwem0wIDJhOCA4IDAgMTAwIDE2IDggOCAwIDAwMC0xNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOC40IDE5LjI4OGMuNDkyLjQwMiAxLjAxNS43NjYgMS41NjYgMS4wODdMNy4yNiAyMy42ODJhNCA0IDAgMTEtMS40MzctMS4yNDNsMi41NzgtMy4xNTF6bTE1LjIgMGwyLjU3NyAzLjE1YTQgNCAwIDExLTEuNDM3IDEuMjQzbC0yLjcwNi0zLjMwNmExMi4wMzIgMTIuMDMyIDAgMDAxLjU2NS0xLjA4N3pNNCAyNGEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHptMjQgMGEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHpNMTcgNnYzaDN2MmgtM3YzaC0ydi0zaC0zVjloM1Y2aDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAxLTE2IDE2em0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMDAxNiAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMyAxNWgtNlY5aC0ydjZIOXYyaDZ2Nmgydi02aDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlU2luZ2xlTWV0cmljSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbERhdGFWaXN1YWxpemVyID0gZnVuY3Rpb24gRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDIwdjEwaDEwdjJIMFYyMGgyem0zMCAwdjEySDIwdi0yaDEwVjIwaDJ6TTEyIDRhOCA4IDAgMTEwIDE2IDggOCAwIDAxMC0xNnptMCAyYTYgNiAwIDEwMCAxMiA2IDYgMCAwMDAtMTJ6bTAtNnYySDJ2MTBIMFYwaDEyem0yMCAwdjEyaC0yVjJIMjBWMGgxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEuOTk3IDEyLjI1MWMtLjAxNy42ODktLjEwNCAxLjM2LS4yNTMgMi4wMDZhNiA2IDAgMTEtNy40ODcgNy40ODdjLS42NDYuMTUtMS4zMTcuMjM2LTIuMDA2LjI1M2E4IDggMCAxMDkuNzQ2LTkuNzQ2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbERhdGFWaXN1YWxpemVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbE91dGxpZXJEZXRlY3Rpb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxMnY2aDZ2Mkgwdi04aDJ6bTE4IDB2OGgtOHYtMmg2di02aDJ6TTggMHYySDJ2NkgwVjBoOHptMTIgMHY4aC0yVjJoLTZWMGg4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNiAyNGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMTIgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptLTEyIDEuNzVhMi4yNSAyLjI1IDAgMTAwIDQuNSAyLjI1IDIuMjUgMCAwMDAtNC41em0xMiAwYTIuMjUgMi4yNSAwIDEwMCA0LjUgMi4yNSAyLjI1IDAgMDAwLTQuNXpNMjggMTJhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMS43NWEyLjI1IDIuMjUgMCAxMDAgNC41IDIuMjUgMi4yNSAwIDAwMC00LjV6TTEwIDZhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMS43NWEyLjI1IDIuMjUgMCAxMDAgNC41IDIuMjUgMi4yNSAwIDAwMC00LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sT3V0bGllckRldGVjdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxSZWdyZXNzaW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sUmVncmVzc2lvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0IDBhOCA4IDAgMTEtNC45MDYgMTQuMzJsLTQuNzc0IDQuNzc0YTggOCAwIDExLTEuNDE0LTEuNDE0bDQuNzc0LTQuNzc0QTggOCAwIDAxMjQgMHpNOCAxOGE2IDYgMCAxMDAgMTIgNiA2IDAgMDAwLTEyek0yNCAyYTYgNiAwIDEwMCAxMiA2IDYgMCAwMDAtMTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTMyIDIwdjEySDIwVjIwaDEyem0tMiAyaC04djhoOHYtOHpNMTIgMHYxMkgwVjBoMTJ6bS0yIDJIMnY4aDhWMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxSZWdyZXNzaW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Nb2JpbGUgPSBmdW5jdGlvbiBFdWlJY29uTW9iaWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiAyLjVhLjUuNSAwIDAxLjUtLjVoM2EuNS41IDAgMDEwIDFoLTNhLjUuNSAwIDAxLS41LS41elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjUgMEExLjUgMS41IDAgMDAzIDEuNXYxM0ExLjUgMS41IDAgMDA0LjUgMTZoN2ExLjUgMS41IDAgMDAxLjUtMS41di0xM0ExLjUgMS41IDAgMDAxMS41IDBoLTd6TTQgMS41YS41LjUgMCAwMS41LS41aDdhLjUuNSAwIDAxLjUuNVY0SDRWMS41ek00IDEzdjEuNWEuNS41IDAgMDAuNS41aDdhLjUuNSAwIDAwLjUtLjVWMTNINHptMC0xaDhWNUg0djd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1vYmlsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTW9vbiA9IGZ1bmN0aW9uIEV1aUljb25Nb29uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC43OTYgOS4wNDhjLTEuNTUyLTIuMjM4LTEuMTk5LTUuMzIzLjYxLTguMS0zLjQ3LS4xMi02LjYgMi4yMzItNy4yNjkgNS42NzItLjc0MiAzLjgyIDEuODMgNy41MzMgNS43NDkgOC4yOTRhNy4yMjYgNy4yMjYgMCAwMDcuNTI2LTMuMjE4Yy0yLjc5NC4xNzctNS4yNy0uNzExLTYuNjE2LTIuNjQ4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Nb29uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25OYW1lc3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uTmFtZXNwYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDFoMTR2MTRIMVYxem0xMyAxMnYxSDJWMmgxMnYxMXpNNiA2aDR2NEg2VjZ6bS0xIDVWNWg2djZINXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTmFtZXNwYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25OZXN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uTmVzdGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDFhLjUuNSAwIDAxMCAxSDMuMDA2QzIuNDUgMiAyIDIuNDUgMiAzLjAwNnY5Ljk4OEMyIDEzLjU1IDIuNDUgMTQgMy4wMDYgMTRINS41YS41LjUgMCAxMTAgMUgzLjAwNkEyLjAwNSAyLjAwNSAwIDAxMSAxMi45OTRWMy4wMDZDMSAxLjg5OCAxLjg5NyAxIDMuMDA2IDFINS41em03LjQ5NCAwYzEuMDU5IDAgMS45MjQuODE4IDIgMS44NTZsLjAwNi4xNXY5Ljk4OGEyLjAwNSAyLjAwNSAwIDAxLTEuODU2IDJsLS4xNS4wMDZIMTAuNWEuNS41IDAgMDEtLjA5LS45OTJMMTAuNSAxNGgyLjQ5NGMuNTE2IDAgLjk0MS0uMzg4IDEtLjg4OGwuMDA2LS4xMThWMy4wMDZjMC0uNTE2LS4zODgtLjk0MS0uODg4LTFMMTIuOTk0IDJIMTAuNWEuNS41IDAgMDEtLjA5LS45OTJMMTAuNSAxaDIuNDk0ek01IDdhMSAxIDAgMTEwIDIgMSAxIDAgMDEwLTJ6bTMgMGExIDEgMCAxMTAgMiAxIDEgMCAwMTAtMnptMyAwYTEgMSAwIDExMCAyIDEgMSAwIDAxMC0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25OZXN0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk5vZGUgPSBmdW5jdGlvbiBFdWlJY29uTm9kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxLjQ0M2ExIDEgMCAwMC0xIDBMMi41NzIgNC4yOWExIDEgMCAwMC0uNS44NjZ2NS42OWExIDEgMCAwMC41Ljg2Nkw3LjUgMTQuNTU3YTEgMSAwIDAwMSAwbDQuOTI4LTIuODQ2YTEgMSAwIDAwLjUtLjg2NnYtNS42OWExIDEgMCAwMC0uNS0uODY2TDguNSAxLjQ0M3pNOSAuNTc3bDQuOTI4IDIuODQ2YTIgMiAwIDAxMSAxLjczMnY1LjY5YTIgMiAwIDAxLTEgMS43MzJMOSAxNS40MjNhMiAyIDAgMDEtMiAwbC00LjkyOC0yLjg0NmEyIDIgMCAwMS0xLTEuNzMydi01LjY5YTIgMiAwIDAxMS0xLjczMkw3IC41NzdhMiAyIDAgMDEyIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk5vZGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk51bWJlciA9IGZ1bmN0aW9uIEV1aUljb25OdW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjgwOCAxMC4xOTdINi43OTZMNS44NTkgMTNINC40ODVsLjkzNy0yLjgwM0gzLjk2NmwuMjE5LTEuMjVoMS42NDdsLjYwOC0xLjgwNUg0Ljk5MWwuMjI2LTEuMjUxaDEuNjRsLjk1LTIuODQ0aDEuMzY4bC0uOTUgMi44NDRoMS4wMThsLjk1LTIuODQ0aDEuMzc0bC0uOTUgMi44NDRoMS41MWwtLjIxOCAxLjI1aC0xLjcwMmwtLjYwOCAxLjgwNWgxLjQ5N2wtLjIxOSAxLjI1MUg5LjE4Mkw4LjI1MiAxM0g2Ljg3OGwuOTMtMi44MDN6bS0uNjAyLTEuMjVoMS4wMTJsLjYxNS0xLjgwNUg3LjgxNGwtLjYwOCAxLjgwNHpcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk51bWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uT2ZmbGluZSA9IGZ1bmN0aW9uIEV1aUljb25PZmZsaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41MTcgMTIuMjcxbDEuMjU0LTEuMjU0YTEuNSAxLjUgMCAxMS0xLjI1NCAxLjI1NHptMi45NDUtMi45NDRsLjc0LS43NGMuMzYxLjIwOC42OTQuNDY3Ljk4Ny43NzJhLjUuNSAwIDAxLS43MjEuNjkzIDMuNDI0IDMuNDI0IDAgMDAtMS4wMDYtLjcyNXptMi4xNjItMi4xNjNsLjcxNi0uNzE1Yy4zMDguMjMyLjU5OS40OS44Ny43NzJhLjUuNSAwIDExLS43MjIuNjkyIDYuMjYgNi4yNiAwIDAwLS44NjQtLjc0OXpNNy4wNjEgNi4wN0E2LjE5OCA2LjE5OCAwIDAwMy41NCA3Ljg4NWEuNS41IDAgMDEtLjcxNy0uNjk3IDcuMTk5IDcuMTk5IDAgMDE1LjMwOS0yLjE4N2wtMS4wNyAxLjA3em02LjY3Mi0xLjAxNGwuNzEtLjcxYy4yNzQuMjMuNTM2LjQ3Ni43ODYuNzM2YS41LjUgMCAwMS0uNzIxLjY5MiA5LjEgOS4xIDAgMDAtLjc3NS0uNzE4em0tMy44MDctMS44NUE5LjA2IDkuMDYgMCAwMDggM2E4Ljk5IDguOTkgMCAwMC02LjQ2OSAyLjczNC41LjUgMCAxMS0uNzE3LS42OTdBOS45OSA5Ljk5IDAgMDE4IDJjLjk0NCAwIDEuODY4LjEzMSAyLjc1LjM4MmwtLjgyNC44MjR6TTggMTNhLjUuNSAwIDEwMC0xIC41LjUgMCAwMDAgMXptLTUuNDI0IDFhLjUuNSAwIDAxLS43MDctLjcwN0wxNC4xNDYgMS4xNDZhLjUuNSAwIDAxLjcwOC43MDhMMi41NzYgMTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk9mZmxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk9ubGluZSA9IGZ1bmN0aW9uIEV1aUljb25PbmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE0YTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6bTAtMWEuNS41IDAgMTAwLTEgLjUuNSAwIDAwMCAxem0zLjE4OS0zLjY0YS41LjUgMCAwMS0uNzIxLjY5MkEzLjQwOCAzLjQwOCAwIDAwOCA5Yy0uOTM3IDAtMS44MTMuMzc4LTIuNDUzIDEuMDM3YS41LjUgMCAwMS0uNzE3LS42OTdBNC40MDggNC40MDggMCAwMTggOGMxLjIyIDAgMi4zNjEuNDk3IDMuMTg5IDEuMzZ6bTIuMDItMi4xNGEuNS41IDAgMTEtLjcyMS42OTNBNi4yIDYuMiAwIDAwOCA2YTYuMTk5IDYuMTk5IDAgMDAtNC40NiAxLjg4NS41LjUgMCAwMS0uNzE4LS42OTdBNy4xOTkgNy4xOTkgMCAwMTggNWE3LjIgNy4yIDAgMDE1LjIxIDIuMjJ6bTIuMDItMi4xMzhhLjUuNSAwIDAxLS43MjEuNjkyQTguOTkgOC45OSAwIDAwOCAzYTguOTkgOC45OSAwIDAwLTYuNDY5IDIuNzM0LjUuNSAwIDExLS43MTctLjY5N0E5Ljk5IDkuOTkgMCAwMTggMmE5Ljk5IDkuOTkgMCAwMTcuMjMgMy4wODJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk9ubGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFja2FnZSA9IGZ1bmN0aW9uIEV1aUljb25QYWNrYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNDQ3IDMuNzI0bC02LTNhMSAxIDAgMDAtLjg5NCAwbC02IDNBMSAxIDAgMDAxIDQuNjE4djYuNzY0YTEgMSAwIDAwLjU1My44OTRsNiAzYTEgMSAwIDAwLjg5NCAwbDYtM2ExIDEgMCAwMC41NTMtLjg5NFY0LjYxOGExIDEgMCAwMC0uNTUzLS44OTR6TTUuODcxIDUuODk3bDUuMzQzLTIuNjcyIDIuMTU4IDEuMDc5TDggNi45NDN6TTggMS42MThsMi4wOTYgMS4wNDgtNS4zNTMgMi42NzctMi4xMTUtMS4wMzl6TTIgNS4xMWwyLjI1IDEuMTA1VjlhLjUuNSAwIDAwMSAwVjYuNzA2TDcuNSA3LjgxMXY2LjMyMUwyIDExLjM4MnptNi41IDkuMDIydi02LjMyTDE0IDUuMTF2Ni4yNzJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhY2thZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBhZ2VTZWxlY3QgPSBmdW5jdGlvbiBFdWlJY29uUGFnZVNlbGVjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDVhNC45OTUgNC45OTUgMCAwMS0uNTg0LTFIM1YyaDd2MmExIDEgMCAwMDEgMWgydjIuMWMuMzQ4LjA3LjY4Mi4xNzcgMSAuMzE2VjRhMSAxIDAgMDAtLjI5My0uNzA3bC0yLTJBMSAxIDAgMDAxMSAxSDN6bTEzIDExYTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHptLTEuNjQ2LTEuMzU0YS41LjUgMCAwMTAgLjcwOGwtMi41IDIuNWEuNS41IDAgMDEtLjcwOCAwbC0xLTFhLjUuNSAwIDAxLjcwOC0uNzA4bC42NDYuNjQ3IDIuMTQ2LTIuMTQ3YS41LjUgMCAwMS43MDggMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFnZVNlbGVjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFnZXNTZWxlY3QgPSBmdW5jdGlvbiBFdWlJY29uUGFnZXNTZWxlY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyAxYTEgMSAwIDAxMS0xaDhhMSAxIDAgMDEuNzA3LjI5M2wyIDJBMSAxIDAgMDExNSAzdjVhNC45OTUgNC45OTUgMCAwMC0xLS41ODRWNGgtMmExIDEgMCAwMS0xLTFWMUg0djEyaDMuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFINGExIDEgMCAwMS0xLTFWMXptNSAxNEgyVjJhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDdhNS4wMjkgNS4wMjkgMCAwMS0xLTF6bTgtM2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMDEwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAxLS43MDggMGwtMS0xYS41LjUgMCAwMS43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMDEuNzA4IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhZ2VzU2VsZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYWludCA9IGZ1bmN0aW9uIEV1aUljb25QYWludChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjk5MyA4LjE3YzAgLjgzLS42NzMgMS41MDctMS40OTkgMS41MDdINS40OThBMS41MDUgMS41MDUgMCAwMTMuOTk5IDguMTdWNi42NjJoNy45OTRWOC4xN3ptLTIuOTk4IDUuOTk4YzAgLjQ1NS0uNDQ4LjgyNy0uOTk5LjgyNy0uNTUgMC0xLS4zNzItMS0uODI3di0zLjQ4NmgydjMuNDg2ek00IDUuNjU4aDEuMjYyVjEuMDA1SDR2NC42NTN6bTIuMjYxIDBoMS4yNDRWMS4wMDVINi4yNnY0LjY1M3ptMi4yNDQgMGgxLjIzNVYxLjAwNUg4LjUwNHY0LjY1M3ptMi4yMzQgMGgxLjI1NFYxLjAwNWgtMS4yNTR2NC42NTN6TTMuMDA4IDBMMyA4LjE3YTIuNTA5IDIuNTA5IDAgMDAyLjQ5OCAyLjUxMmguNXYzLjQ4NmMwIDEuMDEuODk2IDEuODMyIDEuOTk4IDEuODMyIDEuMTAyIDAgMS45OTgtLjgyMiAxLjk5OC0xLjgzMnYtMy40ODZoLjVhMi41MDkgMi41MDkgMCAwMDIuNDk4LTIuNTEyTDEzIDBIMy4wMDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhaW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXBlckNsaXAgPSBmdW5jdGlvbiBFdWlJY29uUGFwZXJDbGlwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44NCAyLjAxOUwzLjA0NiA4LjU3Yy0uOTg3Ljk1Mi0xLjEzMyAyLjUxNy0uMTk5IDMuNTE2Ljk1MSAxLjAyMSAyLjU4IDEuMTA2IDMuNjQuMTkuMDM0LS4wMy4wNjgtLjA2MS4xLS4wOTJsNS42NTUtNS40NTJhLjQ4NC40ODQgMCAwMDAtLjcwMy41My41MyAwIDAwLS43MjkgMEw1LjkyIDExLjQyMWMtLjU3Mi41NTEtMS41MDUuNjU3LTIuMTMxLjE2M2ExLjQ1NSAxLjQ1NSAwIDAxLS4xMTgtMi4yMTFsNi44OTktNi42NTFhMi42NDYgMi42NDYgMCAwMTMuNjQ0IDAgMi40MjIgMi40MjIgMCAwMTAgMy41MTNMNy4zIDEyLjkwMWMtMS4zMzMgMS4yODUtMy40OTcgMS40OTMtNC45NS4zMzYtMS41NC0xLjIyLTEuNzY0LTMuNDExLS41LTQuODk3YTMuMzMgMy4zMyAwIDAxLjIzOC0uMjUybDUuNzgtNS41NzJhLjQ4NC40ODQgMCAwMDAtLjcwMy41My41MyAwIDAwLS43MyAwbC01Ljc4IDUuNTcyYTQuMzYgNC4zNiAwIDAwMCA2LjMyNGMyLjE4OCAyLjEwOSA1LjIwMiAxLjMxIDYuNjYtLjA5NWw2LjkyNS02LjY3NmEzLjM5IDMuMzkgMCAwMDAtNC45MkMxMy41MzQuNjYgMTEuMjUuNjYgOS44NDEgMi4wMTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhcGVyQ2xpcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFydGlhbCA9IGZ1bmN0aW9uIEV1aUljb25QYXJ0aWFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi42NjQgMTQuODcxYTcgNyAwIDAxLTIuNDItMTIuNzc4LjUuNSAwIDAxLjYxMi4wNmMuNDU2LjQzMSA4LjIxNiA4LjIxMiA4Ljk4IDkuMDAyYS41LjUgMCAwMS4wNjMuNjE4IDcuMDAyIDcuMDAyIDAgMDEtNy4yMzUgMy4wOTh6bTYuMTY4LTMuMzEyYTE5NjEuNzMzIDE5NjEuNzMzIDAgMDAtOC4zNzctOC40IDYgNiAwIDEwOC4zNzggOC40em0yLjA5NS0yLjU0OGEuNS41IDAgMTEtLjk5LS4xNDRjLjAxLS4wNjYuMDEtLjA2Ni4wMTgtLjEzM2E2LjAwNyA2LjAwNyAwIDAwLS4wMzQtMS43MTQuNS41IDAgMTEuOTg3LS4xNjNjLjEwOC42NTUuMTIyIDEuMzI2LjA0IDEuOTk5bC0uMDIxLjE1NXptLTEuMjczLTUuMTM4YS41LjUgMCAxMS0uODA4LjU5IDYuMDI2IDYuMDI2IDAgMDAtMS4zMDQtMS4zMDguNS41IDAgMDEuNTktLjgwNiA3LjAyNiA3LjAyNiAwIDAxMS41MjIgMS41MjR6TTkuMTY5IDEuMDk4YS41LjUgMCAxMS0uMTY2Ljk4NiA2LjEwNSA2LjEwNSAwIDAwLTEuODQ5LS4wMjYuNS41IDAgMDEtLjE0LS45OSA3LjAyIDcuMDIgMCAwMTIuMTU1LjAzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYXJ0aWFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXVzZSA9IGZ1bmN0aW9uIEV1aUljb25QYXVzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMmExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMTAyIDBWM2ExIDEgMCAwMC0xLTF6bTYgMGExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMTAyIDBWM2ExIDEgMCAwMC0xLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhdXNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXltZW50ID0gZnVuY3Rpb24gRXVpSWNvblBheW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNTg2IDIuNTg2QTIgMiAwIDAwMCA0aDFhMSAxIDAgMDExLTFWMmEyIDIgMCAwMC0xLjQxNC41ODZ6TTIgMmgxMC41YS41LjUgMCAwMTAgMUgyVjJ6TTAgNGgxdjYuNWEuNS41IDAgMDEtMSAwVjR6bTIuNTg2LjU4NkEyIDIgMCAwMDIgNmgxYTEgMSAwIDAxMS0xVjRhMiAyIDAgMDAtMS40MTQuNTg2em0wIDguODI4QTIgMiAwIDAxMiAxMmgxYTEgMSAwIDAwMSAxdjFhMiAyIDAgMDEtMS40MTQtLjU4NnptMTIuODI4LTguODI4QTIgMiAwIDAxMTYgNmgtMWExIDEgMCAwMC0xLTFWNGEyIDIgMCAwMTEuNDE0LjU4NnptMCA4LjgyOEEyIDIgMCAwMDE2IDEyaC0xYTEgMSAwIDAxLTEgMXYxYTIgMiAwIDAwMS40MTQtLjU4NnpNNCA0aDEwdjFINHpNMyA3aDEydjFIM3ptMSA2aDEwdjFINHpNMiA2aDF2Nkgyem0xMyAwaDF2NmgtMXptLTUuNSA0YS41LjUgMCAwMTAgMUg3LjQ5NmEuNS41IDAgMDEwLTFIOS41em00IDBhLjUuNSAwIDAxMCAxaC0yLjAwNGEuNS41IDAgMDEwLTFIMTMuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGF5bWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGVuY2lsID0gZnVuY3Rpb24gRXVpSWNvblBlbmNpbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjE0OCAzLjE0OEwxMSAybC05IDl2M2gzbDktOS0xLjE0NC0xLjE0NC04LjAwMiA3Ljk5OGEuNTAyLjUwMiAwIDAxLS43MDggMCAuNTAyLjUwMiAwIDAxMC0uNzA4bDguMDAyLTcuOTk4ek0xMSAxYy4yNTYgMCAuNTEyLjA5OC43MDcuMjkzbDMgM2EuOTk5Ljk5OSAwIDAxMCAxLjQxNGwtOSA5QS45OTcuOTk3IDAgMDE1IDE1SDJhMSAxIDAgMDEtMS0xdi0zYzAtLjI2NS4xMDUtLjUyLjI5My0uNzA3bDktOUEuOTk3Ljk5NyAwIDAxMTEgMXpNNSAxNEgydi0zbDMgM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGVuY2lsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QZXJjZW50ID0gZnVuY3Rpb24gRXVpSWNvblBlcmNlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNSA4YzEuMTA1IDAgMi0xLjEyIDItMi41UzYuMTA1IDMgNSAzIDMgNC4xMiAzIDUuNSAzLjg5NSA4IDUgOHptMC0xYy4zNTYgMCAxLS40NTIgMS0xLjVTNS4zNTYgNCA1IDRzLTEgLjQ1Mi0xIDEuNVM0LjY0NCA3IDUgN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjUgM0gxMkw1LjUgMTNINGw2LjUtMTB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgMTAuNWMwIDEuMzgtLjg5NSAyLjUtMiAyLjVzLTItMS4xMi0yLTIuNVM5Ljg5NSA4IDExIDhzMiAxLjEyIDIgMi41em0tMSAwYzAgMS4wNDgtLjY0NCAxLjUtMSAxLjVzLTEtLjQ1Mi0xLTEuNS42NDQtMS41IDEtMS41IDEgLjQ1MiAxIDEuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGVyY2VudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGluID0gZnVuY3Rpb24gRXVpSWNvblBpbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDExaDQuNWEuNS41IDAgMTAwLTFoLTEwYS41LjUgMCAwMDAgMUg3djQuMjVjMCAuNDE0LjIyNC43NS41Ljc1cy41LS4zMzYuNS0uNzVWMTF6TTQgNGgxdjZINFY0em02IDBoMXY2aC0xVjR6TTQuMjg2IDJDNC4wOCAyIDQgMi4wNjMgNCAydjFjMC0uMDYzLjA4IDAgLjI4NiAwaDYuNDI4QzEwLjkyIDMgMTEgMi45MzcgMTEgM1YyYzAgLjA2My0uMDggMC0uMjg2IDBINC4yODZ6bTAtMWg2LjQyOEMxMS40MjQgMSAxMiAxLjQ0OCAxMiAydjFjMCAuNTUyLS41NzYgMS0xLjI4NiAxSDQuMjg2QzMuNTc2IDQgMyAzLjU1MiAzIDNWMmMwLS41NTIuNTc2LTEgMS4yODYtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGluOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QaW5GaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uUGluRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMWg0LjVhLjUuNSAwIDEwMC0xaC0xMGEuNS41IDAgMTAwIDFIOHY0LjI1YzAgLjQxNC4yMjQuNzUuNS43NXMuNS0uMzM2LjUtLjc1VjExek01IDRoN3Y2SDVWNHptLjI4Ni0zaDYuNDI4QzEyLjQyNCAxIDEzIDEuNDQ4IDEzIDJ2MWMwIC41NTItLjU3NiAxLTEuMjg2IDFINS4yODZDNC41NzYgNCA0IDMuNTUyIDQgM1YyYzAtLjU1Mi41NzYtMSAxLjI4Ni0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaW5GaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsYXkgPSBmdW5jdGlvbiBFdWlJY29uUGxheShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNjA4IDMuMDYzQzQuMzQ1IDIuODk1IDQgMy4wODkgNCAzLjQxOHY5LjE2N2MwIC4zMjkuMzQ1LjUyMy42MDguMzU2bDcuMi00LjU4NGEuNDI2LjQyNiAwIDAwMC0uNzExbC03LjItNC41ODN6bS41MzgtLjg0NGw3LjIgNC41ODNhMS40MjYgMS40MjYgMCAwMTAgMi4zOTlsLTcuMiA0LjU4M0M0LjIxIDE0LjM4IDMgMTMuNjk2IDMgMTIuNTg1VjMuNDE4QzMgMi4zMDcgNC4yMSAxLjYyNCA1LjE0NiAyLjIyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbGF5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QbGF5RmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblBsYXlGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4zNDUgNi44MDFsLTcuMi00LjU4MUM0LjIxIDEuNjI1IDMgMi4zMDggMyAzLjQxOXY5LjE2MmMwIDEuMTExIDEuMjEgMS43OTQgMi4xNDYgMS4xOTlsNy4yLTQuNTgxYTEuNDI1IDEuNDI1IDAgMDAwLTIuMzk4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbGF5RmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QbHVzID0gZnVuY3Rpb24gRXVpSWNvblBsdXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjI1IDNhLjUuNSAwIDAxLjUuNXYzLjc1aDMuNzVhLjUuNSAwIDAxLjUuNXYuNWEuNS41IDAgMDEtLjUuNUg4Ljc1djMuNzVhLjUuNSAwIDAxLS41LjVoLS41YS41LjUgMCAwMS0uNS0uNVY4Ljc1SDMuNWEuNS41IDAgMDEtLjUtLjV2LS41YS41LjUgMCAwMS41LS41aDMuNzVWMy41YS41LjUgMCAwMS41LS41aC41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QbHVzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uUGx1c0luQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggN2gzLjVhLjUuNSAwIDExMCAxSDh2My41YS41LjUgMCAxMS0xIDBWOEgzLjVhLjUuNSAwIDAxMC0xSDdWMy41YS41LjUgMCAwMTEgMFY3em0tLjUtN0MxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwem0wIC44ODJhNi42MTggNi42MTggMCAxMDAgMTMuMjM2QTYuNjE4IDYuNjE4IDAgMDA3LjUuODgyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDdWMy41YS41LjUgMCAwMC0xIDBWN0gzLjVhLjUuNSAwIDAwMCAxSDd2My41YS41LjUgMCAxMDEgMFY4aDMuNWEuNS41IDAgMTAwLTFIOHptLS41IDhhNy41IDcuNSAwIDExMC0xNSA3LjUgNy41IDAgMDEwIDE1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBvcG91dCA9IGZ1bmN0aW9uIEV1aUljb25Qb3BvdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA4LjVhLjUuNSAwIDExMSAwVjEyYTIgMiAwIDAxLTIgMkg0YTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yaDMuNWEuNS41IDAgMDEwIDFINGExIDEgMCAwMC0xIDF2OGExIDEgMCAwMDEgMWg4YTEgMSAwIDAwMS0xVjguNXptLTUuMTIuMzM5YS41LjUgMCAxMS0uNzA2LS43MDdMMTMuMzA1IDJIMTAuNWEuNS41IDAgMTEwLTFIMTRhMSAxIDAgMDExIDF2My41YS41LjUgMCAxMS0xIDBWMi43Mkw3Ljg4IDguODM4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Qb3BvdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblB1c2ggPSBmdW5jdGlvbiBFdWlJY29uUHVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMTcxIDUuMTVMMTAuMTE0IDdIMS41NTZDMS4yNDkgNyAxIDcuMjI0IDEgNy41cy4yNDkuNS41NTYuNWg4LjUyNmwtMS45MSAxLjgyYS41Mi41MiAwIDAwMCAuNzdjLjIyNy4yMTMuNi4yMTMuODI4IDBsMi4wNS0xLjk1YTEuNTUyIDEuNTUyIDAgMDAwLTIuMzFMOSA0LjM4YS42MTcuNjE3IDAgMDAtLjgyOSAwIC41Mi41MiAwIDAwMCAuNzd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjgwNCAxMi43OTJBLjk5My45OTMgMCAwMTYgMTEuODJWMTBINXYxLjgyNmMwIC45NDUuNjczIDEuNzYgMS42MDggMS45NDVsNiAxLjE5QTEuOTkyIDEuOTkyIDAgMDAxNSAxMy4wMTZWMS45ODRBMiAyIDAgMDAxMi42MDguMDRsLTYgMS4xOUM1LjY3MyAxLjQxNSA1IDIuMjMgNSAzLjE3NVY1aDFWMy4xOGMwLS40NzIuMzM2LS44NzkuODA0LS45NzJsNi0xLjE4OUExIDEgMCAwMTE0IDEuOTkxdjExLjAxOGEuOTk1Ljk5NSAwIDAxLTEuMTk2Ljk3MmwtNi0xLjE5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QdXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25RdWVzdGlvbkluQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE0QTYgNiAwIDExOCAyYTYgNiAwIDAxMCAxMnptMC0xQTUgNSAwIDEwOCAzYTUgNSAwIDAwMCAxMHptLS4xODYtMS4wNjVBLjc4NS43ODUgMCAwMTcgMTEuMTJjMC0uNDguMzQtLjgyLjgxNC0uODIuNDc1IDAgLjgwOS4zNC44MDkuODIgMCAuNDc1LS4zMzQuODE1LS44MDkuODE1ek01LjkgNi4zMTdDNS45NiA1LjE2OCA2Ljc1NSA0LjQgOC4wNDggNC40YzEuMjE4IDAgMi4wOTEuNzU5IDIuMDkxIDEuOCAwIC43MzYtLjM2IDEuMzA0LTEuMDMgMS43MDctLjU2LjMzLS43MTcuNTYtLjcxNyAxLjAyMnYuMzA1bC0uMS4xSDcuNDdsLS4xLS4xdi0uNDMxYy0uMDA1LS42NDYuMzAyLTEuMTA0Ljk4Ny0xLjUxNC41MjctLjMyMi43MDgtLjU5LjcwOC0xLjA0NyAwLS41MzYtLjQxNi0uOTEtMS4wNS0uOTEtLjY1MiAwLTEuMDY0LjM3NC0xLjExMi45OThsLS4xLjA5Mkg2bC0uMS0uMTA1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25RdWVzdGlvbkluQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25RdW90ZSA9IGZ1bmN0aW9uIEV1aUljb25RdW90ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuODQ4IDIuNDdhMSAxIDAgMDEtLjMxOCAxLjM3OEE3LjI4NCA3LjI4NCAwIDAwMy43NSA3LjAxIDMgMyAwIDExMSAxMHYtLjAyN2EzLjUyMSAzLjUyMSAwIDAxLjAxLS4yMzJjLjAwOS0uMTUuMDI3LS4zNi4wNjItLjYxOC4wNy0uNTEzLjIwNy0xLjIyLjQ4NC0yLjAxNC41NTItMS41OSAxLjY3LTMuNTU1IDMuOTE0LTQuOTU3YTEgMSAwIDAxMS4zNzguMzE4em03IDBhMSAxIDAgMDEtLjMxOCAxLjM3OCA3LjI4MyA3LjI4MyAwIDAwLTIuNzggMy4xNjJBMyAzIDAgMTE4IDEwdi0uMDI3YTMuNTIxIDMuNTIxIDAgMDEuMDEtLjIzMmMuMDA5LS4xNS4wMjctLjM2LjA2Mi0uNjE4LjA3LS41MTMuMjA3LTEuMjIuNDg0LTIuMDE0LjU1Mi0xLjU5IDEuNjctMy41NTUgMy45MTQtNC45NTdhMSAxIDAgMDExLjM3OC4zMTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblF1b3RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25SZWZyZXNoID0gZnVuY3Rpb24gRXVpSWNvblJlZnJlc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4yMjggMi45NDJhLjUuNSAwIDExLS41MzguODQyQTUgNSAwIDEwMTMgOGEuNS41IDAgMTExIDAgNiA2IDAgMTEtMi43NzItNS4wNTh6TTE0IDEuNXYzQTEuNSAxLjUgMCAwMTEyLjUgNmgtM2EuNS41IDAgMDEwLTFoM2EuNS41IDAgMDAuNS0uNXYtM2EuNS41IDAgMTExIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJlZnJlc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblJlcG9ydGVyID0gZnVuY3Rpb24gRXVpSWNvblJlcG9ydGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNjg0Ljg5NUw2LjA3NC4zNThhMSAxIDAgMDAtMS4yOTYuNzUzTDQuMiA0SDIuNWEuNS41IDAgMDAwIDFoMS42MjZhNC4wMDcgNC4wMDcgMCAwMC4xMSAyLjM1OWwtMi4wNzItLjM0NUExIDEgMCAwMDEgOHYxYy4zNjQgMCAuNzA2LjA5NyAxIC4yNjhWOGwxIC4xNjcgMS44NTkuMzEgMi4xNjMuMzYuNDc4LjA4djZMMiAxNHYtMS4yNjhBMS45OSAxLjk5IDAgMDExIDEzdjFhMSAxIDAgMDAuODM2Ljk4Nmw2IDFjLjEwOC4wMTguMjIuMDE4LjMyOCAwbDYtMUExIDEgMCAwMDE1IDE0di0xYTEuOTkgMS45OSAwIDAxLTEtLjI2OFYxNGwtNS41LjkxN3YtNmwuNDc4LS4wOCAyLjE2My0uMzZMMTMgOC4xNjYgMTQgOHYxLjI2OEExLjk5IDEuOTkgMCAwMTE1IDlWOGExIDEgMCAwMC0xLjE2NC0uOTg2bC0yLjA3My4zNDVBMy45OTEgMy45OTEgMCAwMDExLjg3NCA1SDEzLjVhLjUuNSAwIDAwMC0xaC0xLjdsLS41NzgtMi44OUExIDEgMCAwMDkuOTI1LjM1OUw4LjMxNi44OTVhMSAxIDAgMDEtLjYzMiAwem0yLjg4IDYuNjY0QTMuMDEzIDMuMDEzIDAgMDAxMC44MyA1SDUuMTdhMy4wMTMgMy4wMTMgMCAwMC4yNjYgMi41NTlMOCA3Ljk4NmwyLjU2NC0uNDI3ek0xMC44IDRIOS4yTDkgM2wxLjUtLjUuMyAxLjV6TTEgMTJhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTE0IDBhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJlcG9ydGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25SZXR1cm5LZXkgPSBmdW5jdGlvbiBFdWlJY29uUmV0dXJuS2V5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTk0IDRjMS4wNTkgMCAxLjkyNC44MTggMiAxLjg1NmwuMDA2LjE1djEuOTg4YTIuMDA1IDIuMDA1IDAgMDEtMS44NTYgMkwxMiAxMEgzLjQ4NGwxLjkxIDEuODJhLjUyLjUyIDAgMDEwIC43Ny42MTYuNjE2IDAgMDEtLjgyOSAwbC0yLjA1LTEuOTVhMS41NTEgMS41NTEgMCAwMTAtMi4zMWwyLjA1LTEuOTVhLjYxNy42MTcgMCAwMS44MyAwIC41Mi41MiAwIDAxMCAuNzdMMy40NSA5SDEyYy41MTQtLjAwMy45MzUtLjM5Ljk5My0uODg4TDEzIDcuOTk0VjYuMDA2YzAtLjUxNi0uMzg4LS45NDEtLjg4OC0xTDExLjk5NCA1SDkuNWEuNS41IDAgMDEtLjA5LS45OTJMOS41IDRoMi40OTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJldHVybktleTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2F2ZSA9IGZ1bmN0aW9uIEV1aUljb25TYXZlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4wMDggMkgyLjI4MmMtLjE4MSAwLS4yNDUuMDAyLS4yNzUuMDA3LS4wMDUuMDMtLjAwNy4wOTQtLjAwNy4yNzV2MTEuNDM2YzAgLjE4MS4wMDIuMjQ1LjAwNy4yNzUuMDMuMDA1LjA5NC4wMDcuMjc1LjAwN2gxMS40MzZjLjE4MSAwIC4yNDUtLjAwMi4yNzUtLjAwNy4wMDUtLjAzLjAwNy0uMDk0LjAwNy0uMjc1VjQuNjJjMC0uMTMtLjAwMS0uMTgtLjAwNC0uMjA0YTIuNjU0IDIuNjU0IDAgMDAtLjE0MS0uMTQ3TDExLjczIDIuMTQ1YTIuNjU0IDIuNjU0IDAgMDAtLjE0Ny0uMTQxQTIuNjU0IDIuNjU0IDAgMDAxMS4zOCAyaC0uMzg4Yy4wMDUuMDguMDA4LjE3Mi4wMDguMjgydjIuNDM2YzAgLjQ0Ni0uMDQ2LjYwNy0uMTM0Ljc3YS45MDkuOTA5IDAgMDEtLjM3OC4zNzhjLS4xNjMuMDg4LS4zMjQuMTM0LS43Ny4xMzRINi4yODJjLS40NDYgMC0uNjA3LS4wNDYtLjc3LS4xMzRhLjkwOS45MDkgMCAwMS0uMzc4LS4zNzhDNS4wNDYgNS4zMjUgNSA1LjE2NCA1IDQuNzE4VjIuMjgyYzAtLjExLjAwMy0uMjAyLjAwOC0uMjgyek0yLjI4MiAxaDkuMDk4Yy4yNTkgMCAuMzQ4LjAxLjQ0Ny4wMzJhLjg3Ljg3IDAgMDEuMjczLjExM2MuMDg2LjA1NC4xNTYuMTEuMzM4LjI5M2wyLjEyNCAyLjEyNGMuMTgyLjE4Mi4yMzkuMjUyLjI5My4zMzhhLjg3Ljg3IDAgMDEuMTEzLjI3M2MuMDIzLjEuMDMyLjE4OC4wMzIuNDQ3djkuMDk4YzAgLjQ0Ni0uMDQ2LjYwNy0uMTM0Ljc3YS45MDkuOTA5IDAgMDEtLjM3OC4zNzhjLS4xNjMuMDg4LS4zMjQuMTM0LS43Ny4xMzRIMi4yODJjLS40NDYgMC0uNjA3LS4wNDYtLjc3LS4xMzRhLjkwOS45MDkgMCAwMS0uMzc4LS4zNzhjLS4wODgtLjE2My0uMTM0LS4zMjQtLjEzNC0uNzdWMi4yODJjMC0uNDQ2LjA0Ni0uNjA3LjEzNC0uNzdhLjkwOS45MDkgMCAwMS4zNzgtLjM3OGMuMTYzLS4wODguMzI0LS4xMzQuNzctLjEzNHpNNiAyLjI4MnYyLjQzNmMwIC4xODEuMDAyLjI0NS4wMDcuMjc1LjAzLjAwNS4wOTQuMDA3LjI3NS4wMDdoMy40MzZjLjE4MSAwIC4yNDUtLjAwMi4yNzUtLjAwNy4wMDUtLjAzLjAwNy0uMDk0LjAwNy0uMjc1VjIuMjgyYzAtLjE4MS0uMDAyLS4yNDUtLjAwNy0uMjc1QTIuMjQ4IDIuMjQ4IDAgMDA5LjcxOCAySDYuMjgyYy0uMTgxIDAtLjI0NS4wMDItLjI3NS4wMDctLjAwNS4wMy0uMDA3LjA5NC0uMDA3LjI3NXpNOCAxMmEyIDIgMCAxMTAtNCAyIDIgMCAwMTAgNHptMC0xYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TYXZlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TY2FsZSA9IGZ1bmN0aW9uIEV1aUljb25TY2FsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi41IDEyYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0yIDBhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem00LTJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0yLTFhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptMC0zYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0yIDJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0wIDJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAwYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTItMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem02LTZhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TY2FsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvblNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjI3MSAxMS45NzhsMy44NzIgMy44NzNhLjUwMi41MDIgMCAwMC43MDggMCAuNTAyLjUwMiAwIDAwMC0uNzA4bC0zLjU2NS0zLjU2NGMyLjM4LTIuNzQ3IDIuMjY3LTYuOTIzLS4zNDItOS41MzItMi43My0yLjczLTcuMTctMi43My05Ljg5OCAwLTIuNzI4IDIuNzI5LTIuNzI4IDcuMTcgMCA5LjlhNi45NTUgNi45NTUgMCAwMDQuOTQ5IDIuMDUuNS41IDAgMDAwLTEgNS45NiA1Ljk2IDAgMDEtNC4yNDItMS43NTcgNi4wMSA2LjAxIDAgMDEwLTguNDg2YzIuMzM3LTIuMzQgNi4xNDMtMi4zNCA4LjQ4NCAwYTYuMDEgNi4wMSAwIDAxMCA4LjQ4Ni41LjUgMCAwMC4wMzQuNzM4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjg3NSAzLjQxOGE2IDYgMCAxMC43MDcuNzA3bC0yLjQ2IDIuNDYtMS4xNTYgMS4xNTZhMSAxIDAgMTEtLjcwNy0uNzA3bC43NTctLjc1N2EyIDIgMCAwMC0yLjQzIDMuMTM3LjUuNSAwIDExLS43MDcuNzA3IDMgMyAwIDAxMy44Ni00LjU2N2wuNzE0LS43MTRBNCA0IDAgMTA4IDEyYS41LjUgMCAxMTAgMSA1IDUgMCAxMTMuMTY0LTguODcxbC43MS0uNzF6bS43MDktLjcwOWE3IDcgMCAxMC43MDcuNzA3bC4zNjYtLjM2NmEuNS41IDAgMTAtLjcwNy0uNzA3bC0uMzY2LjM2NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2VjdXJpdHlTaWduYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy42NTcgMy4wNWEuNS41IDAgMDAtLjcwNy0uNzA3bC0uMzY2LjM2NkE3IDcgMCAxMDggMTVhNC45OTQgNC45OTQgMCAwMS0uNTk3LTEuMDMgNiA2IDAgMTE0LjQ3MS0xMC41NTJsLS43MS43MWE1IDUgMCAxMC00LjA4IDguNzg4IDUuMDI3IDUuMDI3IDAgMDEtLjA4Mi0xLjA0MkE0LjAwMiA0LjAwMiAwIDAxOCA0YTMuOTggMy45OCAwIDAxMi40NTMuODRsLS43MTUuNzE0YTMgMyAwIDAwLTMuODYgNC41NjcuNS41IDAgMTAuNzA4LS43MDcgMiAyIDAgMDEyLjQzLTMuMTM3bC0uNzU3Ljc1N2ExIDEgMCAxMC43MDcuNzA3bDEuMTU1LTEuMTU1IDIuNDYtMi40NmE1Ljk3MiA1Ljk3MiAwIDAxMS4zOSAzLjI3N2MuMzY3LjE1OC43MTMuMzYgMS4wMjkuNTk3IDAtMS42MzYtLjU3LTMuMjcxLTEuNzEtNC41ODRsLjM2Ny0uMzY2ek0xNiAxMmE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS00IC41YS41NzcuNTc3IDAgMDEtLjU3LS40OTVsLS4yOS0yLjAxNWEuODY3Ljg2NyAwIDExMS43MTggMGwtLjI4OCAyLjAxNWEuNTc3LjU3NyAwIDAxLS41Ny40OTV6bTAgMi41YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuNjU3IDMuMDVhLjUuNSAwIDEwLS43MDctLjcwN2wtLjM2Ni4zNjZBNyA3IDAgMTA4IDE1YTQuOTk0IDQuOTk0IDAgMDEtLjU5Ny0xLjAzIDYgNiAwIDExNC40NzEtMTAuNTUybC0uNzEuNzFhNSA1IDAgMTAtNC4wOCA4Ljc4OCA1LjAyOCA1LjAyOCAwIDAxLS4wODItMS4wNDJBNC4wMDIgNC4wMDIgMCAwMTggNGEzLjk4IDMuOTggMCAwMTIuNDUzLjg0bC0uNzE1LjcxNGEzIDMgMCAwMC0zLjg2IDQuNTY3LjUuNSAwIDEwLjcwOC0uNzA3IDIgMiAwIDAxMi40My0zLjEzN2wtLjc1Ny43NTdhMSAxIDAgMTAuNzA3LjcwN2wxLjE1NS0xLjE1NSAyLjQ2LTIuNDZhNS45NzIgNS45NzIgMCAwMTEuMzkgMy4yNzdjLjM2Ny4xNTguNzEzLjM2IDEuMDI5LjU5NyAwLTEuNjM2LS41Ny0zLjI3MS0xLjcxLTQuNTg0bC4zNjctLjM2NnpNMTYgMTJhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAxMCAuNzA3bC0yLjUgMi41YS41LjUgMCAwMS0uNzA4IDBsLTEtMWEuNS41IDAgMDEuNzA4LS43MDdsLjY0Ni42NDcgMi4xNDYtMi4xNDdhLjUuNSAwIDAxLjcwOCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TZXNzaW9uVmlld2VyID0gZnVuY3Rpb24gRXVpSWNvblNlc3Npb25WaWV3ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDZoMXYxSDRWNnptMiAySDVWN2gxdjF6bTAgMVY4aDF2MUg2em0tMSAxVjloMXYxSDV6bTAgMHYxSDR2LTFoMXptMiAwaDR2MUg3di0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgM2ExIDEgMCAwMTEtMWgxMmExIDEgMCAwMTEgMXYxMGExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWM3ptMSAxaDEydjlIMlY0elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2Vzc2lvblZpZXdlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2hhcmQgPSBmdW5jdGlvbiBFdWlJY29uU2hhcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjEzNCA3LjAzMUw4IDEyLjc2NGwyLjg2Ni01LjczM0w4IDIuMDE2IDUuMTM0IDcuMDN6TTggMGw0IDctNCA4LTQtOCA0LTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNoYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TaGFyZSA9IGZ1bmN0aW9uIEV1aUljb25TaGFyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNi44MXY2LjM4YzAgLjQ5My40NDguOS45OTIuOWg3LjAxNmMuNTQzIDAgLjk5Mi0uNDA2Ljk5Mi0uOVY2LjgxYzAtLjQ5My0uNDQ4LS45LS45OTItLjlIMy45OTJjLS41NDMgMC0uOTkyLjQwNi0uOTkyLjl6TTYgNXYuOTFoM1Y1aDIuMDA4QzEyLjEwOCA1IDEzIDUuODE4IDEzIDYuODF2Ni4zOGMwIDEtLjkgMS44MS0xLjk5MiAxLjgxSDMuOTkyQzIuODkyIDE1IDIgMTQuMTgyIDIgMTMuMTlWNi44MUMyIDUuODEgMi45IDUgMy45OTIgNUg2em0xLjk5Ny0zLjU1MkEuNTA2LjUwNiAwIDAxOCAxLjV2OGEuNS41IDAgMDEtMSAwdi04YS41MS41MSAwIDAxMC0uMDE3TDUuMTggMy4zOTRhLjUyLjUyIDAgMDEtLjc3IDAgLjYxNy42MTcgMCAwMTAtLjgyOUw2LjM2LjUxNWExLjU1MiAxLjU1MiAwIDAxMi4zMSAwbDEuOTUgMi4wNWMuMjE0LjIyOS4yMTQuNjAxIDAgLjgzYS41Mi41MiAwIDAxLS43NyAwTDcuOTk3IDEuNDQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TaGFyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU25vd2ZsYWtlID0gZnVuY3Rpb24gRXVpSWNvblNub3dmbGFrZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjAwNy41YS41LjUgMCAwMTEgMHYyLjAyNGEuOTk5Ljk5OSAwIDAwLjI2OC0uMjI3bDEuMDI3LTEuMjMzYS41LjUgMCAwMS43NjkuNjRMOC4yNzUgMy44NmEuOTk5Ljk5OSAwIDAxLS4yNjguMjI3djIuNTQ4bDIuMjA3LTEuMjc0YzAtLjExNC4wMi0uMjMxLjA2Mi0uMzQ2bC45NjgtMi42MzJhLjUuNSAwIDExLjkzOC4zNDVsLS41NTQgMS41MDZhLjk5OC45OTggMCAwMC0uMDYyLjM0NmwxLjc1My0xLjAxMmEuNS41IDAgMTEuNS44NjZsLTEuNzUzIDEuMDEyYy4xLjA1Ny4yMS4wOTguMzMuMTE5bDEuNTgyLjI3M2EuNS41IDAgMTEtLjE3Ljk4NmwtMi43NjQtLjQ3OGExIDEgMCAwMS0uMzMtLjEyTDguNTA2IDcuNWwyLjIwNyAxLjI3NGExIDEgMCAwMS4zMy0uMTE5bDIuNzY0LS40NzhhLjUuNSAwIDExLjE3Ljk4NmwtMS41ODIuMjczYS45OTkuOTk5IDAgMDAtLjMzLjEybDEuNzUzIDEuMDExYS41LjUgMCAxMS0uNS44NjZsLTEuNzUzLTEuMDEyYzAgLjExNS4wMi4yMzEuMDYyLjM0NmwuNTU0IDEuNTA2YS41LjUgMCAwMS0uOTM4LjM0NWwtLjk2OC0yLjYzMmEuOTk5Ljk5OSAwIDAxLS4wNjItLjM0Nkw4LjAwNyA4LjM2NnYyLjU0OGMuMDk4LjA1OC4xOS4xMzMuMjY4LjIyN2wxLjc5NiAyLjE1NWEuNS41IDAgMDEtLjc2OS42NGwtMS4wMjctMS4yMzNhLjk5OS45OTkgMCAwMC0uMjY4LS4yMjZWMTQuNWEuNS41IDAgMDEtMSAwdi0yLjAyNGEuOTk5Ljk5OSAwIDAwLS4yNjkuMjI3bC0xLjAyNyAxLjIzM2EuNS41IDAgMDEtLjc2OC0uNjRsMS43OTUtMi4xNTVhLjk5OS45OTkgMCAwMS4yNjktLjIyN1Y4LjM2Nkw0LjggOS42NGMwIC4xMTQtLjAyLjIzMS0uMDYyLjM0NmwtLjk2OSAyLjYzMmEuNS41IDAgMTEtLjkzOC0uMzQ1bC41NTQtMS41MDZhMSAxIDAgMDAuMDYyLS4zNDZsLTEuNzUzIDEuMDEyYS41LjUgMCAwMS0uNS0uODY2bDEuNzUzLTEuMDEyYS45OTkuOTk5IDAgMDAtLjMzLS4xMTlsLTEuNTgyLS4yNzNhLjUuNSAwIDAxLjE3LS45ODZsMi43NjQuNDc4Yy4xMi4wMi4yMzIuMDYyLjMzLjEyTDYuNTA4IDcuNSA0LjMgNi4yMjZhLjk5OS45OTkgMCAwMS0uMzMuMTE5bC0yLjc2NS40NzhhLjUuNSAwIDExLS4xNy0uOTg2bDEuNTgyLS4yNzNhLjk5OS45OTkgMCAwMC4zMy0uMTJMMS4xOTQgNC40MzRhLjUuNSAwIDExLjUtLjg2NmwxLjc1MyAxLjAxMmMwLS4xMTQtLjAyLS4yMzEtLjA2Mi0uMzQ2TDIuODMgMi43MjdhLjUuNSAwIDExLjkzOC0uMzQ1bC45NjkgMi42MzJhLjk5OS45OTkgMCAwMS4wNjIuMzQ2bDIuMjA3IDEuMjc0VjQuMDg2YTEgMSAwIDAxLS4yNjktLjIyN0w0Ljk0MyAxLjcwNGEuNS41IDAgMDEuNzY4LS42NGwxLjAyNyAxLjIzM2MuMDc5LjA5NC4xNy4xNy4yNjkuMjI3Vi41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tbm93Zmxha2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNvcnRMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvblNvcnRMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMDggN2g4LjEzNmMuMzA3IDAgLjU1Ni4yMjQuNTU2LjVzLS4yNDkuNS0uNTU2LjVINC4zMDhsNC4wOTYgNC4wOTZhLjUuNSAwIDAxLS43MDcuNzA3TDMuNDU0IDguNTYxYTEuNDk0IDEuNDk0IDAgMDEtLjQzMy0uOTI1LjQ1NC40NTQgMCAwMTAtLjI3MmMuMDMtLjMzOC4xNzUtLjY2Ni40MzMtLjkyNWw0LjI0My00LjI0MmEuNS41IDAgMTEuNzA3LjcwN0w0LjMwOCA3elwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydExlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNvcnRSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS42OTIgN0gzLjU1NkMzLjI0OSA3IDMgNy4yMjQgMyA3LjVzLjI0OS41LjU1Ni41aDguMTM2bC00LjA5NiA0LjA5NmEuNS41IDAgMDAuNzA3LjcwN2w0LjI0My00LjI0MmMuMjU4LS4yNTkuNDAzLS41ODcuNDMzLS45MjVhLjQ1NC40NTQgMCAwMDAtLjI3MiAxLjQ5NCAxLjQ5NCAwIDAwLS40MzMtLjkyNUw4LjMwMyAyLjE5N2EuNS41IDAgMTAtLjcwNy43MDdMMTEuNjkyIDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU29ydERvd24gPSBmdW5jdGlvbiBFdWlJY29uU29ydERvd24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDExLjY5MlYzLjU1NkM3IDMuMjQ5IDcuMjI0IDMgNy41IDNzLjUuMjQ5LjUuNTU2djguMTM2bDQuMDk2LTQuMDk2YS41LjUgMCAwMS43MDcuNzA3bC00LjI0MiA0LjI0M2ExLjQ5NCAxLjQ5NCAwIDAxLS45MjUuNDMzLjQ1NC40NTQgMCAwMS0uMjcyIDAgMS40OTQgMS40OTQgMCAwMS0uOTI1LS40MzNMMi4xOTcgOC4zMDNhLjUuNSAwIDExLjcwNy0uNzA3TDcgMTEuNjkyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0RG93bjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU29ydFVwID0gZnVuY3Rpb24gRXVpSWNvblNvcnRVcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNC4yMDd2OC4yMzdjMCAuMzA3LS4yMjQuNTU2LS41LjU1NnMtLjUtLjI0OS0uNS0uNTU2VjQuMjA3TDIuOTA0IDguMzAzYS41LjUgMCAwMS0uNzA3LS43MDdsNC4yNDItNC4yNDJhMS41IDEuNSAwIDAxMi4xMjIgMGw0LjI0MiA0LjI0MmEuNS41IDAgMTEtLjcwNy43MDdMOCA0LjIwN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydFVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Tb3J0YWJsZSA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0YWJsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTIuNzg2VjMuMkwzLjYwNCA2LjU5NmEuNS41IDAgMDEtLjcwOC0uNzA3bDMuNTM2LTMuNTM1YTEuNSAxLjUgMCAwMTIuMTIxIDBsMy41MzYgMy41MzVhLjUuNSAwIDAxLS43MDcuNzA3TDggMy4yMTR2OS41NTdsMy4zODItMy4zODJhLjUuNSAwIDAxLjcwNy43MDdsLTMuNTM2IDMuNTM2YTEuNSAxLjUgMCAwMS0yLjEyMSAwbC0zLjUzNi0zLjUzNmEuNS41IDAgMDEuNzA4LS43MDdMNyAxMi43ODZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyUGx1c0VtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJQbHVzRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMm04IDhoMnYxaC0ydjJoLTF2LTJoLTJ2LTFoMlY4aDF2MnpNNiAzYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMDEtLjAyOS4xMjZMOC43NjIgOS4xMjFsLS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw2IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwMS0uMDU0LjAxNi4xMjcuMTI3IDAgMDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwMS4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyUGx1c0VtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyUGx1c0ZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyUGx1c0ZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNCAxMGgydjFoLTJ2MmgtMXYtMmgtMnYtMWgyVjhoMXYyek02IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwNiAyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJQbHVzRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uU3RhckVtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMmEuODYuODYgMCAwMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAwNC44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw4IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwMC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMDA4IDJtMCAxYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMDEtLjAyOS4xMjZsLTIuMjAyIDIuMjI2LS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw4IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwMS0uMDU0LjAxNi4xMjcuMTI3IDAgMDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwMS4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM3LjkwNSAzLjA1IDcuOTI3IDMgOCAzXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJFbXB0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RhckVtcHR5U3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uU3RhckVtcHR5U3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMm0wIDFjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDYgMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAxLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzUuOTA1IDMuMDUgNS45MjcgMyA2IDNcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckVtcHR5U3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uU3RhckZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDQuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMOCAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwOCAyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJGaWxsZWRTcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRmlsbGVkU3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMlwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyRmlsbGVkU3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJNaW51c0VtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJNaW51c0VtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMmEuODYuODYgMCAwMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAwMi44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw2IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwMC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMDA2IDJtMCAxYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMDEtLjAyOS4xMjZMOC43NjIgOS4xMjFsLS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw2IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwMS0uMDU0LjAxNi4xMjcuMTI3IDAgMDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwMS4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzem0xMCA3djFoLTV2LTFoNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3Rhck1pbnVzRW1wdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJNaW51c0ZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyTWludXNGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAxLjc5Mi41MTFsMS4zMyAyLjkyNCAzLjEyOC40NDZjLjcxLjEwMiAxLjAwMS45NzYuNDk2IDEuNDg3TDkuNDMzIDkuNzA0bC41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMTkuMTM2IDE0YS44NjIuODYyIDAgMDEtLjQyOS0uMTE2TDYgMTIuMzQybC0yLjcwNyAxLjU0MmEuODYyLjg2MiAwIDAxLS40My4xMTYuODc3Ljg3NyAwIDAxLS44NTktMS4wMjdsLjU2My0zLjI2OUwuMjU0IDcuMzY4Qy0uMjUgNi44NTcuMDQgNS45ODMuNzUgNS44OGwzLjEyOC0uNDQ2IDEuMzMtMi45MjNBLjg2Ljg2IDAgMDE2IDJ6bTEwIDh2MWgtNXYtMWg1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyTWludXNGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXRzID0gZnVuY3Rpb24gRXVpSWNvblN0YXRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMTR2LTRoMXY0aDVWNWgxdjlhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xdi0yaDF2Mmg2em00Ljg1My0xMC4xNDZsLTIuOTk5IDNhMS41IDEuNSAwIDAxLTIuNTM4IDEuNTY4bC0yLjcxNC45MDRMNCA5LjUyN2ExLjUgMS41IDAgMTEtLjMxNi0uOTQ4TDcgNy40NzNhMS41IDEuNSAwIDAxMi4xNDYtMS4zMjdsMy0zYTEuNSAxLjUgMCAxMS43MDcuNzA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGF0czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RvcCA9IGZ1bmN0aW9uIEV1aUljb25TdG9wKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyaDhhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnptMCAxYTEgMSAwIDAwLTEgMXY4YTEgMSAwIDAwMSAxaDhhMSAxIDAgMDAxLTFWNGExIDEgMCAwMC0xLTFINHpcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0b3BGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uU3RvcEZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiAxMixcbiAgICBoZWlnaHQ6IDEyLFxuICAgIHg6IDIsXG4gICAgeTogMixcbiAgICByeDogMixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3BGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0b3BTbGFzaCA9IGZ1bmN0aW9uIEV1aUljb25TdG9wU2xhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4yNTkgMy4wMzRBMS4wMDEgMS4wMDEgMCAwMDEyIDNINGExIDEgMCAwMC0xIDF2OGMwIC4wOS4wMTIuMTc2LjAzNC4yNTlsOS4yMjUtOS4yMjV6bS43MDcuNzA3bC05LjIyNSA5LjIyNWMuMDgzLjAyMi4xNy4wMzQuMjU5LjAzNGg4YTEgMSAwIDAwMS0xVjRjMC0uMDktLjAxMi0uMTc2LS4wMzQtLjI1OXpNNCAyaDhhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcFNsYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdG9yYWdlID0gZnVuY3Rpb24gRXVpSWNvblN0b3JhZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0yIDZhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoMTJhMSAxIDAgMDExIDF2M2ExIDEgMCAwMS0xIDFIMnptMTMgMnYzYTEgMSAwIDAxLTEgMUgyYTEgMSAwIDAxLTEtMVY4YTEgMSAwIDAxMS0xaDEyYTEgMSAwIDAxMSAxem0xLTNWMmEyIDIgMCAwMC0yLTJIMmEyIDIgMCAwMC0yIDJ2M2MwIC42MDEuMjcxIDEuMTMzLjY5IDEuNUMuMjcxIDYuODY3IDAgNy4zOTkgMCA4djNhMiAyIDAgMDAyIDJoMTJhMiAyIDAgMDAyLTJWOGMwLS42MDEtLjI3MS0xLjEzMy0uNjg5LTEuNS40MTgtLjM2Ny42ODktLjg5OS42ODktMS41elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogNC41LFxuICAgIGN5OiA5LjUsXG4gICAgcjogMS41XG4gIH0pLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogNC41LFxuICAgIGN5OiAzLjUsXG4gICAgcjogMS41XG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgOGgxdjNoLTF6TTEwIDhoMXYzaC0xek0xMiAyaDF2M2gtMXpNMTAgMmgxdjNoLTF6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdG9yYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdHJpbmcgPSBmdW5jdGlvbiBFdWlJY29uU3RyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuMjk3IDNMOC45MyA1LjEwMmgxLjM1MWwtLjMyIDEuODI4SDguNjA5bC0uNjU2IDMuODgzYy0uMDM2LjI2NS0uMDIuNDY2LjA1LjYwMS4wNzEuMTM1LjI0Ny4yMDguNTI4LjIxOS4xMS4wMDUuMzM0LS4wMDguNjcyLS4wNEw5LjAxNiAxMy41YTQuMTYgNC4xNiAwIDAxLTEuMzgzLjE5NWMtLjc5Ny0uMDEtMS4zOTMtLjI0NC0xLjc5LS43MDMtLjM5NS0uNDU4LS41NTctMS4wOC0uNDg0LTEuODY3bC42ODgtNC4xOTVINWwuMzEzLTEuODI4aDEuMDQ2TDYuNzI3IDNoMi41N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RyaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdWJtb2R1bGUgPSBmdW5jdGlvbiBFdWlJY29uU3VibW9kdWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJIMXYxMmgzVjdhMSAxIDAgMDExLTFoNWExIDEgMCAwMTEgMXYxaDRWNEg3Yy0uNjIxIDAtMS0uMzc5LTEtMVYyem0xMCA2djZhMSAxIDAgMDEtMSAxSDFhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoNS4yNWEuNzUuNzUgMCAwMS43NS43NWwtLjAwNC4yMDZDNi45OSAyLjMxNyA2Ljk3NCAzIDcgM2g4YTEgMSAwIDAxMSAxdjR6bS0xIDFoLTRhMSAxIDAgMDEtMS0xVjdINXY3aDEwVjl6TTIgNC41YS41LjUgMCAwMS41LS41aDJhLjUuNSAwIDAxMCAxaC0yYS41LjUgMCAwMS0uNS0uNXpNNi41IDlhLjUuNSAwIDAwMCAxaDJhLjUuNSAwIDAwMC0xaC0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdWJtb2R1bGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN1biA9IGZ1bmN0aW9uIEV1aUljb25TdW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA4YTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHpNNy4yNS43NWEuNzUuNzUgMCAwMTEuNSAwdjEuNWEuNzUuNzUgMCAxMS0xLjUgMFYuNzV6bTAgMTNhLjc1Ljc1IDAgMDExLjUgMHYxLjVhLjc1Ljc1IDAgMDEtMS41IDB2LTEuNXptNS4zNDYtMTEuNDA3YS43NS43NSAwIDAxMS4wNiAxLjA2bC0xLjA2IDEuMDYxYS43NS43NSAwIDAxLTEuMDYtMS4wNmwxLjA2LTEuMDZ6bS05LjE5MiA5LjE5M2EuNzUuNzUgMCAxMTEuMDYgMS4wNmwtMS4wNiAxLjA2YS43NS43NSAwIDAxLTEuMDYtMS4wNmwxLjA2LTEuMDZ6TS43NSA4Ljc1YS43NS43NSAwIDAxMC0xLjVoMS41YS43NS43NSAwIDExMCAxLjVILjc1em0xMyAwYS43NS43NSAwIDAxMC0xLjVoMS41YS43NS43NSAwIDAxMCAxLjVoLTEuNXpNMi4zNDMgMy40MDRhLjc1Ljc1IDAgMTExLjA2LTEuMDZsMS4wNjEgMS4wNmEuNzUuNzUgMCAwMS0xLjA2IDEuMDZsLTEuMDYtMS4wNnptOS4xOTMgOS4xOTJhLjc1Ljc1IDAgMDExLjA2LTEuMDZsMS4wNiAxLjA2YS43NS43NSAwIDAxLTEuMDYgMS4wNmwtMS4wNi0xLjA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN3YXRjaElucHV0ID0gZnVuY3Rpb24gRXVpSWNvblN3YXRjaElucHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgeDogMixcbiAgICB5OiAyLFxuICAgIHdpZHRoOiAxMixcbiAgICBoZWlnaHQ6IDEyLFxuICAgIHJ4OiAzXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVN3YXRjaElucHV0X19zdHJva2VcIixcbiAgICB4OiAyLjUsXG4gICAgeTogMi41LFxuICAgIHdpZHRoOiAxMSxcbiAgICBoZWlnaHQ6IDExLFxuICAgIHJ4OiAyXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Td2F0Y2hJbnB1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3ltbGluayA9IGZ1bmN0aW9uIEV1aUljb25TeW1saW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMC44IDBIMmExIDEgMCAwMC0xIDF2OGwxLTFWMWg4djMuNWEuNS41IDAgMDAuNS41SDE0djEwSDJ2LTFhMy41IDMuNSAwIDAxMy41LTMuNUg4VjEzbDMtMy0zLTN2Mi41SDUuNUE0LjUgNC41IDAgMDAxIDE0djFhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNC40MjljMC0uMjU2LS4wOTgtLjUwMy0uMjc0LS42ODlsLTMuMi0zLjQyOEExLjAwMiAxLjAwMiAwIDAwMTAuOCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TeW1saW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWJsZU9mQ29udGVudHMgPSBmdW5jdGlvbiBFdWlJY29uVGFibGVPZkNvbnRlbnRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSAxdjE0aDE0VjFIMXpNMCAwaDE2djE2SDBWMHptOSAxdjE0aDFWMUg5ek0zIDMuNWg0di0xSDN2MXptMCAzaDR2LTFIM3Yxem0wIDNoNHYtMUgzdjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhYmxlT2ZDb250ZW50czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVGFibGVEZW5zaXR5Q29tcGFjdCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWMmEyIDIgMCAwMTItMmgxMmEyIDIgMCAwMTIgMnYxem0tMSAwVjJhMSAxIDAgMDAtMS0xSDJhMSAxIDAgMDAtMSAxdjFoMTR6bTAgMUgxdjEwYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjR6TTQuNDk2IDdhLjUuNSAwIDAxMCAxSDIuNDk1YS41LjUgMCAwMTAtMWgyLjAwMXptNS4yMTggMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggOCA2IDcuNzc2IDYgNy41cy4xMjgtLjUuMjg2LS41aDMuNDI4ek00LjQ5NiA1YS41LjUgMCAwMTAgMUgyLjQ5NWEuNS41IDAgMDEwLTFoMi4wMDF6bTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDYgNiA1Ljc3NiA2IDUuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpNNC40OTYgOWEuNS41IDAgMDEwIDFIMi40OTVhLjUuNSAwIDAxMC0xaDIuMDAxem01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxMCA2IDkuNzc2IDYgOS41cy4xMjgtLjUuMjg2LS41aDMuNDI4em0tNS4yMTggMmEuNS41IDAgMDEwIDFIMi40OTVhLjUuNSAwIDAxMC0xaDIuMDAxem01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxMiA2IDExLjc3NiA2IDExLjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6bS01LjIxOCAyYS41LjUgMCAwMTAgMUgyLjQ5NWEuNS41IDAgMDEwLTFoMi4wMDF6bTktNmEuNS41IDAgMDEwIDFoLTIuMDAxYS41LjUgMCAwMTAtMWgyLjAwMXptMC0yYS41LjUgMCAwMTAgMWgtMi4wMDFhLjUuNSAwIDAxMC0xaDIuMDAxem0wIDRhLjUuNSAwIDAxMCAxaC0yLjAwMWEuNS41IDAgMDEwLTFoMi4wMDF6bTAgMmEuNS41IDAgMDEwIDFoLTIuMDAxYS41LjUgMCAwMTAtMWgyLjAwMXptMCAyYS41LjUgMCAwMTAgMWgtMi4wMDFhLjUuNSAwIDAxMC0xaDIuMDAxem0tMy43ODIgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTQgNiAxMy43NzYgNiAxMy41cy4xMjgtLjUuMjg2LS41aDMuNDI4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDN2MTFhMiAyIDAgMDEtMiAySDJhMiAyIDAgMDEtMi0yVjJhMiAyIDAgMDEyLTJoMTJhMiAyIDAgMDEyIDJ2MXptLTEgMFYyYTEgMSAwIDAwLTEtMUgyYTEgMSAwIDAwLTEgMXYxaDE0em0wIDFIMXYxMGExIDEgMCAwMDEgMWgxMmExIDEgMCAwMDEtMVY0ek00LjUgN2EuNS41IDAgMDEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptOSAwYS41LjUgMCAxMTAgMWgtNmEuNS41IDAgMDEwLTFoNnptLTkgNGEuNS41IDAgMTEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptOSAwYS41LjUgMCAxMTAgMWgtNmEuNS41IDAgMTEwLTFoNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVEZW5zaXR5RXhwYW5kZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlOb3JtYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzdjExYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yaDEyYTIgMiAwIDAxMiAydjF6bS0xIDBWMmExIDEgMCAwMC0xLTFIMmExIDEgMCAwMC0xIDF2MWgxNHptMCAxSDF2MTBhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNHpNNC41IDZhLjUuNSAwIDAxMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTUuMjE0IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDcgNiA2Ljc3NiA2IDYuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpNNC41IDlhLjUuNSAwIDAxMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTUuMjE0IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEwIDYgOS43NzYgNiA5LjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6TTQuNSAxMmEuNS41IDAgMTEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptOS02YS41LjUgMCAxMTAgMWgtMi4wMDRhLjUuNSAwIDAxMC0xSDEzLjV6bTAgM2EuNS41IDAgMTEwIDFoLTIuMDA0YS41LjUgMCAwMTAtMUgxMy41em0wIDNhLjUuNSAwIDExMCAxaC0yLjAwNGEuNS41IDAgMDEwLTFIMTMuNXptLTMuNzg2IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEzIDYgMTIuNzc2IDYgMTIuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVEZW5zaXR5Tm9ybWFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWcgPSBmdW5jdGlvbiBFdWlJY29uVGFnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4yNTQgMTQuOTdMLjk5NiA5LjcxMmMtLjMxNS0uMzE2LS4zOTctLjQ2My0uNDUtLjY0YS45MDkuOTA5IDAgMDEwLS41MzRjLjA1My0uMTc3LjEzNS0uMzI0LjQ1LS42NEw3LjQzIDEuNDY2Yy4xODItLjE4My4yNTItLjI0LjMzOC0uMjkzYS44Ny44NyAwIDAxLjI3My0uMTEzYy4wOTktLjAyMy4xODgtLjAzMi40NDYtLjAzMmg1LjE3M2MuNDQ1IDAgLjYwNy4wNDYuNzcuMTMzLjE2Mi4wODcuMjkuMjE0LjM3Ny4zNzcuMDg4LjE2Mi4xMzQuMzI0LjEzNi43NjlsLjAxNSA1LjE1YzAgLjI1OS0uMDA5LjM0OC0uMDMyLjQ0OGEuODcuODcgMCAwMS0uMTEyLjI3M2MtLjA1NC4wODctLjExMS4xNTctLjI5NC4zNEw4LjA2NyAxNC45N2MtLjMxNS4zMTUtLjQ2Mi4zOTYtLjYzOS40NWEuOTA5LjkwOSAwIDAxLS41MzUgMGMtLjE3Ni0uMDU0LS4zMjQtLjEzNS0uNjM5LS40NXptMS4xMDYtLjcwN2w2LjQ1My02LjQ1M2MuMDkyLS4wOTIuMTI2LS4xMjguMTQxLS4xNDcuMDAzLS4wMjUuMDA0LS4wNzQuMDA0LS4yMDRsLS4wMTUtNS4xNWMwLS4xODEtLjAwMy0uMjQ1LS4wMDktLjI3NWEyLjI0NyAyLjI0NyAwIDAwLS4yNzQtLjAwN0g4LjQ4N2MtLjEzIDAtLjE3OS4wMDEtLjIwMy4wMDQtLjAyLjAxNS0uMDU1LjA1LS4xNDcuMTQxTDEuNzAzIDguNjA2YTIuMjQ4IDIuMjQ4IDAgMDAtLjE4OS4yYy4wMTcuMDI0LjA2MS4wNy4xOS4xOThsNS4yNTcgNS4yNTljLjEyOC4xMjguMTc1LjE3MS4yLjE4OC4wMjQtLjAxNy4wNzEtLjA2LjItLjE4OHptNC45NzItMTAuNjA3YTIgMiAwIDExLTIuODI4IDIuODI4IDIgMiAwIDAxMi44MjgtMi44Mjh6bS0uNzA3LjcwN2ExIDEgMCAxMC0xLjQxNCAxLjQxNCAxIDEgMCAwMDEuNDE0LTEuNDE0ek02LjgwNyAxMS4yOEw0LjY4NiA5LjE1OWEuNS41IDAgMTEuNzA3LS43MDdsMi4xMjEgMi4xMmEuNS41IDAgMTEtLjcwNy43MDh6bTEuNDE0LTEuNDE0bC0yLjEyLTIuMTIyYS41LjUgMCAxMS43MDYtLjcwN0w4LjkyOCA5LjE2YS41LjUgMCAxMS0uNzA3LjcwN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UZWFyID0gZnVuY3Rpb24gRXVpSWNvblRlYXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1MyAxLjc3NmEuNS41IDAgMDEuODk0IDBsNCA4YS41LjUgMCAwMS4wNTMuMjM1Yy0uMDA0LjE1LS4wMjYuMzk2LS4wODQuNzA1YTUuNTM4IDUuNTM4IDAgMDEtLjUwNSAxLjUxMkMxMS4xODkgMTMuNjM4IDkuOTA2IDE0LjUgOCAxNC41Yy0xLjkwNiAwLTMuMTktLjg2Mi0zLjkxLTIuMjcyYTUuNTM4IDUuNTM4IDAgMDEtLjUwNi0xLjUxMiA0LjY3MiA0LjY3MiAwIDAxLS4wODQtLjcwNS41LjUgMCAwMS4wNTMtLjIzNWw0LTh6bS0zLjA0NiA4LjMyOWMuMDA5LjEwNi4wMjcuMjUzLjA2LjQyOS4wNzkuNDI0LjIxMy44NDguNDEzIDEuMjM4QzUuNTM3IDEyLjg2MiA2LjQ4NyAxMy41IDggMTMuNWMxLjUxMyAwIDIuNDYzLS42MzggMy4wMi0xLjcyOC4yLS4zOS4zMzQtLjgxNC40MTMtMS4yMzguMDMzLS4xNzYuMDUxLS4zMjMuMDYtLjQzTDggMy4xMTlsLTMuNDkzIDYuOTg3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UZWFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UZW1wZXJhdHVyZSA9IGZ1bmN0aW9uIEV1aUljb25UZW1wZXJhdHVyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxNWEzLjUgMy41IDAgMDEtMS43NS02LjUzMkw3IDguMzI0VjIuNUExLjQ5NiAxLjQ5NiAwIDAxOS45MDggMkg4LjV2MUgxMHYxSDguNXYxSDEwdjFIOC41djFIMTB2MS4zMjRsLjI1LjE0NEEzLjUgMy41IDAgMDE4LjUgMTVNMTEgNy43NThWMi41YTIuNSAyLjUgMCAxMC01IDB2NS4yNThhNC41IDQuNSAwIDEwNSAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgOWEyLjUgMi41IDAgMTEwIDUgMi41IDIuNSAwIDAxMC01XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRlbXBlcmF0dXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UaW1lUmVmcmVzaCA9IGZ1bmN0aW9uIEV1aUljb25UaW1lUmVmcmVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIuODA5IDguODA3YTQuNSA0LjUgMCAwMS01LjU3Mi01Ljc1QTUgNSAwIDAwMy4wNCA5LjMxYS41LjUgMCAwMS0uOTY2LjI1OSA2IDYgMCAwMTUuNjcyLTcuNTUzIDQuNSA0LjUgMCAxMTYuMTE3IDYuMzEzIDYuMDAyIDYuMDAyIDAgMDEtNy44MDMgNS40MDkuNS41IDAgMTEuMzAzLS45NTQgNS4wMDEgNS4wMDEgMCAwMDYuNDQ1LTMuOTc5ek0xMS44NTkgNUgxMy41YS41LjUgMCAwMDAtMUgxMlYxLjVhLjUuNSAwIDAwLTEgMHYzYS41LjUgMCAwMC41LjVoLjM2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy43NTcgMTUuODQ4bC0uNzc2LTIuODk3YTEuNSAxLjUgMCAwMTEuMDYtMS44MzhsMi44OTgtLjc3NmEuNS41IDAgMTEuMjU5Ljk2NmwtMi44OTguNzc2YS41LjUgMCAwMC0uMzUzLjYxM2wuNzc2IDIuODk4YS41LjUgMCAwMS0uOTY2LjI1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGltZVJlZnJlc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRpbWVsaW5lID0gZnVuY3Rpb24gRXVpSWNvblRpbWVsaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcgNC41YS41LjUgMCAwMDEgMFY0aDFhMSAxIDAgMDAxLTFWMWExIDEgMCAwMC0xLTFINmExIDEgMCAwMC0xIDF2MmExIDEgMCAwMDEgMWgxdi41ek05IDFINnYyaDNWMXpNMiA3LjVhLjUuNSAwIDExMSAwIC41LjUgMCAwMS0xIDB6TTIuNSA5YTEuNSAxLjUgMCAwMS0xLjQxNS0xSC41YS41LjUgMCAwMTAtMWguNTg1YTEuNSAxLjUgMCAwMTIuODMgMGgyLjE3YTEuNSAxLjUgMCAwMTIuODMgMGgyLjE3YTEuNSAxLjUgMCAwMTIuODMgMGguNTg1YS41LjUgMCAwMTAgMWgtLjU4NWExLjUgMS41IDAgMDEtMi44MyAwaC0yLjE3YTEuNSAxLjUgMCAwMS0yLjgzIDBoLTIuMTdBMS41IDEuNSAwIDAxMi41IDl6TTEzIDcuNWEuNS41IDAgMTAtMSAwIC41LjUgMCAwMDEgMHptLTUgMGEuNS41IDAgMTAtMSAwIC41LjUgMCAwMDEgMHpNMi41IDEwYS41LjUgMCAwMC0uNS41di41SDFhMSAxIDAgMDAtMSAxdjJhMSAxIDAgMDAxIDFoM2ExIDEgMCAwMDEtMXYtMmExIDEgMCAwMC0xLTFIM3YtLjVhLjUuNSAwIDAwLS41LS41ek00IDE0di0ySDF2Mmgzem04LTMuNWEuNS41IDAgMDExIDB2LjVoMWExIDEgMCAwMTEgMXYyYTEgMSAwIDAxLTEgMWgtM2ExIDEgMCAwMS0xLTF2LTJhMSAxIDAgMDExLTFoMXYtLjV6bTIgMi41djFoLTN2LTJoM3YxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVGltZXNsaWRlciA9IGZ1bmN0aW9uIEV1aUljb25UaW1lc2xpZGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuOTIzIDhBNS45MyA1LjkzIDAgMDA4IDIuMDc3IDUuOTMgNS45MyAwIDAwMi4wNzcgOGE1LjkzIDUuOTMgMCAwMDYuMjk2IDUuOTEyYy4zMjgtLjAyMS42MjUuMjI3LjYyNS41NTZhLjUwNC41MDQgMCAwMS0uNDU4LjUxMSA3IDcgMCAxMTYuNDMtNi4zMzNjLS4wMzYuMzk4LS40ODcuNTgtLjgxNy4zNTRhLjU5NS41OTUgMCAwMS0uMjQ4LS41NGMuMDEyLS4xNTIuMDE4LS4zMDUuMDE4LS40NnptMS42ODQgMy4ybC00LjMyLTMuMDU1Yy0uNTYtLjM5Ni0xLjI4Ny4wNTktMS4yODcuOHY2LjEwOGMwIC43NC43MjYgMS4xOTYgMS4yODcuOGw0LjMyLTMuMDU1Yy41MjQtLjM3LjUyNC0xLjIyOCAwLTEuNTk4ek03LjQ2MiA3LjQ2Mkg0Ljc2OWEuNTM5LjUzOSAwIDAwMCAxLjA3Nkg4QS41MzkuNTM5IDAgMDA4LjUzOCA4VjMuNjkyYS41MzkuNTM5IDAgMDAtMS4wNzYgMHYzLjc3elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGltZXNsaWRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5BbGlhcyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFsaWFzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuMDc1IDYuOTUzYS41LjUgMCAxMS0uNzA3LjcwNyAxLjUgMS41IDAgMDAtMi4xMjIgMEw0LjEyNSA5Ljc4MmExLjUgMS41IDAgMTAyLjEyMSAyLjEyMWwxLjE0NS0xLjE0NGEuNS41IDAgMDEuNzA3LjcwN0w2Ljk1MyAxMi42MWEyLjUgMi41IDAgMTEtMy41MzUtMy41MzVsMi4xMjEtMi4xMjJhMi41IDIuNSAwIDAxMy41MzYgMHptMy41MzUtMy41MzVhMi41IDIuNSAwIDAxMCAzLjUzNUwxMC40OSA5LjA3NWEyLjUgMi41IDAgMDEtMy41MzYgMCAuNS41IDAgMTEuNzA3LS43MDggMS41IDEuNSAwIDAwMi4xMjIgMGwyLjEyMS0yLjEyYTEuNSAxLjUgMCAxMC0yLjEyMS0yLjEyMkw4LjYzNyA1LjI2OWEuNS41IDAgMTEtLjcwNy0uNzA3bDEuMTQ1LTEuMTQ0YTIuNSAyLjUgMCAwMTMuNTM1IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQWxpYXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQW5ub3RhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFubm90YXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4xNSAzLjM5MmMyLjc5NyAwIDQuNTI0IDEuNjQ0IDQuNTE3IDQuMjg5LjAwNyAxLjgxNi0uNzA4IDIuODkzLTIuMjEgMy4wMDQtLjkwOC4wNzYtMS4wODEtLjI4Ny0xLjE1Ny0uNzI1aC0uMDQxYy0uMTYzLjQyLS45NjQuNzMyLTEuNzQ0LjY4My0xLjA1My0uMDY1LTIuMDgyLS44NDItMi4wOS0yLjU3Mi4wMDgtMS43MiAxLjA3MS0yLjQ0MSAxLjk1OS0yLjU4Ni44MDQtLjEzNSAxLjU5OC4xNTggMS43MjMuNDYyaC4wNTF2LS4zODZoMS4xOTV2My40NTJjLjAwNy4zLjEyOC40MjUuMzA0LjQyNS40IDAgLjY3Ny0uNTgzLjY3My0xLjg2MS4wMDQtMi4zNzYtMS43MDUtMi45MTQtMy4xODctMi45MTQtMi4zNCAwLTMuNDE1IDEuNTIyLTMuNDIyIDMuMzg3LjAwNyAyLjEyNyAxLjIyIDMuMjc3IDMuNDMzIDMuMjc3LjgwOCAwIDEuNTk4LS4xNzYgMi4wMDYtLjM0OWwuMzkzIDEuMTIyYy0uNDM1LjI3LTEuNDE5LjUwOC0yLjQ5My41MDgtMi45OCAwLTQuNzIzLTEuNjYtNC43MjctNC40OTYuMDA0LTIuODA0IDEuNzQ4LTQuNzIgNC44MTctNC43MnpNNy45NjQgNi43OWMtLjc2IDAtMS4xODUuNDU5LTEuMTg4IDEuMjQuMDAzLjY4My4zIDEuMzMyIDEuMjAyIDEuMzMyLjgyMSAwIDEuMDk0LS40NzMgMS4wNzctMS4zNDMtLjAwNC0uNzE4LS4yMDQtMS4yMy0xLjA5MS0xLjIzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkFubm90YXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQXJyYXkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5BcnJheShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjM5MiAxMlY0aDIuNzEzdjEuMTRoLTEuMjF2NS43MmgxLjIxVjEySDQuMzkyem03LjY5Mi04djhIOS4zN3YtMS4xNGgxLjIwOVY1LjE0SDkuMzdWNGgyLjcxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5BcnJheTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5CaW5hcnkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5CaW5hcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIgNEg0djhoOFY0ek04LjUgNS41aC0zdjVoM3YtNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5CaW5hcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQm9vbGVhbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkJvb2xlYW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxM0E1IDUgMCAxMTggM2E1IDUgMCAwMTAgMTB6bS0yLjgyOC0yLjE3MmE0IDQgMCAwMTUuNjU2LTUuNjU2Yy4wMDQuMDEzLTUuNjQ1IDUuNjc0LTUuNjU2IDUuNjU2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkJvb2xlYW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQ2xhc3MgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5DbGFzcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4zMzMgNy4wMjdIOS4zNzVjLS4wNTYtLjcwOC0uNDgtMS4xODctMS4yMjItMS4xODctLjk3MiAwLTEuNS44MDYtMS41IDIuMTYgMCAxLjQzLjU0NSAyLjE2IDEuNDg2IDIuMTYuNzA4IDAgMS4xMzktLjQxNSAxLjIzNi0xLjA4bDEuOTU4LjAxNUMxMS4yMzYgMTAuNDE4IDEwLjE4MSAxMiA4LjA5NyAxMmMtMS45NTggMC0zLjQzLTEuNDEtMy40My00IDAtMi42IDEuNTE0LTQgMy40My00IDEuNzkyIDAgMy4wODQgMS4wOTUgMy4yMzYgMy4wMjd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQ2xhc3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyA0YTEgMSAwIDAxMS0xaDhhMSAxIDAgMDExIDF2NS45OTZhMSAxIDAgMDEtMSAxaC0xLjY2MUw3LjQgMTMuMkEuMjUuMjUgMCAwMTcgMTN2LTIuMDA0SDRhMSAxIDAgMDEtMS0xVjR6bTEuNSAxYS41LjUgMCAwMS41LS41aDZhLjUuNSAwIDAxLjUuNXY0YS41LjUgMCAwMS0uNS41aC0uOUw4IDExVjkuNUg1YS41LjUgMCAwMS0uNS0uNVY1elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNzUgNmExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnptMi41IDBhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Db25zdGFudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNvbnN0YW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuNDE0IDMuNzU3bDIuODI5IDIuODI5YTIgMiAwIDAxMCAyLjgyOGwtMi44MjkgMi44MjlhMiAyIDAgMDEtMi44MjggMEwzLjc1NyA5LjQxNGEyIDIgMCAwMTAtMi44MjhsMi44MjktMi44MjlhMiAyIDAgMDEyLjgyOCAwem0tMS43NDcgMi45MWExIDEgMCAwMC0xIDF2LjY2NmExIDEgMCAwMDEgMWguNjY2YTEgMSAwIDAwMS0xdi0uNjY2YTEgMSAwIDAwLTEtMWgtLjY2NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Db25zdGFudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5EYXRlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRGF0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMyAxMS41NjdDMTMgMTIuMzYgMTIuMzYgMTMgMTEuNTY3IDEzSDQuNDMzQzMuNjQgMTMgMyAxMi4zNiAzIDExLjU2N1Y0LjQzM0MzIDMuNjQgMy42NCAzIDQuNDMzIDNINnYtLjQ5NWEuNTEuNTEgMCAwMS40MTItLjQ5N0w2LjUgMmMuMjc2IDAgLjUuMjE0LjUuNTA1VjNoMnYtLjQ5NWEuNTEuNTEgMCAwMS40MTItLjQ5N0w5LjUgMmMuMjc2IDAgLjUuMjE0LjUuNTA1VjNoMS41NjdDMTIuMzYgMyAxMyAzLjY0IDEzIDQuNDMzdjcuMTM0ek00IDZ2NS4zM2MwIC4zNy4zLjY3LjY3LjY3aDYuNjZjLjM3IDAgLjY3LS4zLjY3LS42N1Y2SDR6bTEuNSA0Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiAxMC41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDUuNSAxMWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDUuNSAxMHpNOCAxMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEybC4wMDguMDg4YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDggMTFhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw4IDEwem0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDExIDEwLjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSAxMWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDEwLjUgMTB6bS01LTEuNWMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDYgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw1LjUgOS41QS41MDUuNTA1IDAgMDE1IDljMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMNS41IDguNXptMi41IDBjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw4LjUgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw4IDkuNWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDggOC41em0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDExIDljMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSA5LjVBLjUwNS41MDUgMCAwMTEwIDljMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMMTAuNSA4LjV6TTUuNSA3Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiA3LjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMNS41IDhhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw1LjUgN3pNOCA3Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMOC41IDcuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw4IDhhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw4IDd6bTIuNSAwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMMTEgNy41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDEwLjUgOGEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDEwLjUgN3pNNCA1aDh2LS4zM2MwLS4zNy0uMy0uNjctLjY3LS42N0g0LjY3QzQuMyA0IDQgNC4zIDQgNC42N1Y1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkRhdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRGVuc2VWZWN0b3IgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5EZW5zZVZlY3RvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuMTU0IDEyVjRoMi43MTN2MS4xNEg1LjY1OHY1LjcyaDEuMjFWMTJINC4xNTN6bTcuNjkyLTh2OEg5LjEzM3YtMS4xNGgxLjIwOVY1LjE0aC0xLjIxVjRoMi43MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRGVuc2VWZWN0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRWxlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVsZW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy4zOSA5LjczNmwtMS4wNDEuOTRMMy4yNTggOGwzLjA5LTIuNjc3IDEuMDQxLjk0LTIuMDMyIDEuNzIydi4wM2wyLjAzMiAxLjcyMXptMi43NzcuOTRsLTEuMDQtLjk0IDIuMDMyLTEuNzIxdi0uMDNMOS4xMjYgNi4yNjRsMS4wNC0uOTRMMTMuMjU5IDhsLTMuMDkxIDIuNjc3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkVsZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRW51bSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVudW0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4yMTEgMTJWNGg1LjU3OHYxLjU3SDcuMTQ1djEuNjQxaDMuMzU5djEuNTc0SDcuMTQ1djEuNjQ1aDMuNjQ0VjEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkVudW07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRW51bU1lbWJlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVudW1NZW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy42ODIgMTJWOS4yNDdsMS4wMjMtLjg2MWEuNS41IDAgMDAtLjAwMy0uNzY4bC0xLjAyLS44NDRWNGg1LjU3OHYxLjU3SDkuNjE1djEuNjRoMy4zNnYxLjU3NWgtMy4zNnYxLjY0NWgzLjY0NVYxMkg3LjY4MnptLjc0My00LjEwM2EuMTM4LjEzOCAwIDAxMCAuMjA2TDYuMTU4IDkuOTdhLjEzMy4xMzMgMCAwMS0uMjE4LS4xMDN2LS45MzRIMi44NzNBLjEzMy4xMzMgMCAwMTIuNzQgOC44VjcuMmMwLS4wNzQuMDYtLjEzMy4xMzMtLjEzM0g1Ljk0di0uOTM0YS4xMzMuMTMzIDAgMDEuMjE4LS4xMDNsMi4yNjcgMS44Njd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRW51bU1lbWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FdmVudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkV2ZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjIyNSA1LjY1NmMwIC40MjMtLjEwNi43OS0uMzE4IDEuMTAyLS4yMTEuMzExLS41MS41Ny0uODk4Ljc3NWE1LjQzNSA1LjQzNSAwIDAxLTEuMzkyLjQ4NWMtLjU0LjExNy0xLjE0LjE5My0xLjc5OC4yMjlhNi4wNDcgNi4wNDcgMCAwMC0uMDM1LjY3YzAgLjI1OC4wMi41MS4wNjIuNzU3LjA0LjI0Ny4xMTQuNDY0LjIyLjY1MnMuMjUuMzQuNDMyLjQ1OC40MTQuMTc2LjY5Ni4xNzZjLjIxMSAwIC40NjctLjA0NC43NjYtLjEzMi4zLS4wODguNjItLjI0NC45Ni0uNDY3LjEwNi0uMDcuMTkyLS4xMjkuMjU2LS4xNzZhLjM2NS4zNjUgMCAwMS4yMi0uMDdjLjExOCAwIC4xOTcuMDYxLjIzOC4xODVhLjk5Ljk5IDAgMDEuMDYyLjI1NSA3LjEgNy4xIDAgMDEtLjU3My40NjcgNC45MyA0LjkzIDAgMDEtLjc3NS40NjdjLS4yODguMTQxLS42LjI2MS0uOTM0LjM2MS0uMzM1LjEtLjY3OC4xNS0xLjAzLjE1LS41NDEgMC0uOTgyLS4wODgtMS4zMjItLjI2NGEyLjA3MiAyLjA3MiAwIDAxLS43OTMtLjY4OCAyLjYyNiAyLjYyNiAwIDAxLS4zODgtLjkzMyA0Ljk0OSA0Ljk0OSAwIDAxLS4xMDYtMS4wMDVjMC0uNjM0LjEwMy0xLjI1Ny4zMDktMS44NjguMjA1LS42MS40OTktMS4xNTcuODgtMS42MzguMzgzLS40ODIuODM4LS44NyAxLjM2Ni0xLjE2M0EzLjU2NyAzLjU2NyAwIDAxOS4wOTMgNGMuNTk5IDAgMS4xMDQuMTI2IDEuNTE1LjM3OS40MTEuMjUyLjYxNy42NzguNjE3IDEuMjc3em0tMi40NjctLjk1MWMtLjIyMyAwLS40MzUuMDgtLjYzNS4yMzgtLjIuMTU4LS4zODEuMzczLS41NDYuNjQzLS4xNjQuMjctLjMwNS41NzgtLjQyMy45MjVhNi40MiA2LjQyIDAgMDAtLjI2NCAxLjEwMWMuNDctLjA0Ny44NjMtLjEzNSAxLjE4LS4yNjQuMzE4LS4xMy41Ny0uMjg1Ljc1OC0uNDY3LjE4OC0uMTgyLjMyMy0uMzg4LjQwNS0uNjE3LjA4My0uMjI5LjEyNC0uNDY3LjEyNC0uNzEzIDAtLjI3LS4wNTYtLjQ3OS0uMTY4LS42MjZhLjUxOS41MTkgMCAwMC0uNDMxLS4yMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FdmVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FeGNlcHRpb24gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5FeGNlcHRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjQ2MSA3LjMxaDMuMDU1YS43NC43NCAwIDAxLjY2IDEuMDc0bC0yLjE0MSA0LjIxMWEuNzQuNzQgMCAxMS0xLjMxOS0uNjdMOS4zMSA4Ljc5SDYuMjU2YS43NC43NCAwIDAxLS42Ni0xLjA3NWwyLjE5LTQuMzFhLjc0Ljc0IDAgMDExLjMxOS42N0w3LjQ2MSA3LjMxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkV4Y2VwdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5GaWVsZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZpZWxkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUuMjcgMTJWNGg1LjQ2djEuNTdINy4yMDN2MS42NDFoMy4xOHYxLjU3NGgtMy4xOFYxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GaWVsZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5GaWxlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRmlsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODY3IDIuNjY3SDRhLjY2Ny42NjcgMCAwMC0uNjY3LjY2NnY5LjMzNGMwIC4zNjguMjk5LjY2Ni42NjcuNjY2aDhhLjY2Ny42NjcgMCAwMC42NjctLjY2NlY1LjYxOWEuNjY5LjY2OSAwIDAwLS4xODMtLjQ1OWwtMi4xMzMtMi4yODVhLjY2OC42NjggMCAwMC0uNDg0LS4yMDhtMS40NjYgNFYxMkg0LjY2N1Y0aDR2Mi4zMzNjMCAuMTg0LjE0OS4zMzQuMzMzLjMzNGgyLjMzM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GaWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkZsYXR0ZW5lZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZsYXR0ZW5lZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMuMjUgM2EuMjUuMjUgMCAwMC0uMjUuMjV2MmMwIC4xMzguMTEyLjI1LjI1LjI1aDkuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTJhLjI1LjI1IDAgMDAtLjI1LS4yNWgtOS41em0wIDMuNzVBLjI1LjI1IDAgMDAzIDd2MmMwIC4xMzguMTEyLjI1LjI1LjI1SDUuNUEuMjUuMjUgMCAwMDUuNzUgOVY3YS4yNS4yNSAwIDAwLS4yNS0uMjVIMy4yNXptLS4yNSA0YS4yNS4yNSAwIDAxLjI1LS4yNUg1LjVhLjI1LjI1IDAgMDEuMjUuMjV2MmEuMjUuMjUgMCAwMS0uMjUuMjVIMy4yNWEuMjUuMjUgMCAwMS0uMjUtLjI1di0yem0zLjMxLS43MjdjLS4wODItLjA3My0uMDgyLS4yMjQgMC0uMjk2bDMuMDU0LTIuNjgzYS4xNy4xNyAwIDAxLjE5LS4wMjZjLjA2NC4wMzIuMTA0LjEuMTA0LjE3NHYxLjM0MWwzLjE2MS0uMDE2Yy4xIDAgLjE4LjA4Ni4xOC4xOTJ2Mi4zYzAgLjEwNS0uMDguMTkxLS4xOC4xOTFsLTMuMTYxLjAxN3YxLjM0MWMwIC4wNzQtLjA0LjE0Mi0uMTAzLjE3NGEuMTcuMTcgMCAwMS0uMTktLjAyNUw2LjMxIDEwLjAyM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GbGF0dGVuZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRnVuY3Rpb24gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5GdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4yNjYgNC4xNVY1LjYzYTIuNDEgMi40MSAwIDAwLS44NTktLjE0NWMtLjY5MiAwLTEuMDY1LjM0Ni0xLjE3NyAxLjA0M2wtLjExLjYyNWgxLjgyOHYxLjQ0SDguOTIxbC0uMjA0IDEuMTE1QzguNDU1IDExLjMyNSA3LjUxNyAxMiA1LjkgMTJjLS40NjkgMC0uODgyLS4wNjEtMS4xNjYtLjE2N3YtMS40OTVjLjI3My4xMTcuNTkxLjE3OC45MDMuMTc4LjY1OSAwIDEuMDEtLjI5IDEuMTI3LTEuMDE1bC4xNTctLjkxSDUuMjQ3VjcuMTUyaDEuODM3bC4xODgtLjg0MkM3LjUzNCA0LjcxNCA4LjQzMiA0IDEwLjE5IDRjLjM5IDAgLjg1My4wNjcgMS4wNzYuMTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuR2VvID0gZnVuY3Rpb24gRXVpSWNvblRva2VuR2VvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggM2MxLjYzNiAwIDMuMDg4Ljc4NSA0IDIgLjYyOC44MzYgMSAxLjg3NSAxIDNhNC45NzggNC45NzggMCAwMS0uOTk5IDNIMTJhNC45OTIgNC45OTIgMCAwMS00IDIgNC45OTIgNC45OTIgMCAwMS00LTEuOTk5VjExYTUgNSAwIDAxNC04em0uOTQ4IDhINy4wNTJjLjI3Ny42MjYuNjIzIDEgLjk0OCAxIC4zMjUgMCAuNjctLjM3NC45NDgtMXpNNiAxMWwtLjY0NS4wMDFjLjI3NC4yNDIuNTgxLjQ0Ni45MTQuNjA2QTUuNDQ1IDUuNDQ1IDAgMDE2IDExLjAwMXptNC42NDUuMDAxSDEwYTUuNTEgNS41MSAwIDAxLS4yNjkuNjA2Yy4zMzMtLjE2LjY0LS4zNjQuOTE0LS42MDZ6bS01LjEzMy0yLjVINC4wMzFjLjA2OC41NC4yNDMgMS4wNDguNTA1IDEuNWgxLjE3MmE5LjE4NiA5LjE4NiAwIDAxLS4xOTYtMS41em0zLjk3NSAwSDYuNTEzYy4wMy41NDQuMTA0IDEuMDUuMjEgMS41aDIuNTUzYy4xMDctLjQ1LjE4Mi0uOTU2LjIxLTEuNXptMi40ODIgMGgtMS40ODFhOS4xODYgOS4xODYgMCAwMS0uMTk2IDEuNWgxLjE3MmMuMjYyLS40NTIuNDM3LS45Ni41MDUtMS41ek01LjcwOCA2TDQuNTM1IDZjLS4yNjEuNDUyLS40MzcuOTYtLjUwNCAxLjVoMS40ODFBOS4xODcgOS4xODcgMCAwMTUuNzA4IDZ6bTMuNTY4IDBINi43MjRjLS4xMDcuNDQ5LS4xODIuOTU1LS4yMSAxLjQ5OWgyLjk3M2E4LjQ3OSA4LjQ3OSAwIDAwLS4yMS0xLjV6TTExLjQ2NSA2aC0xLjE3M2MuMTAyLjQ2Ny4xNy45NzIuMTk2IDEuNWgxLjQ4MWEzLjk3NCAzLjk3NCAwIDAwLS41MDQtMS41ek02LjI2OSA0LjM5M2wtLjEyNC4wNjJjLS4yODYuMTUtLjU1MS4zMzMtLjc5LjU0NUg2YTUuNTEgNS41MSAwIDAxLjI2OS0uNjA3ek04IDRjLS4zMjYgMC0uNjcxLjM3NS0uOTQ4IDFoMS44OTZDOC42NzEgNC4zNzYgOC4zMjYgNCA4IDR6bTEuNzMuMzkzbC4wMzguMDcxYy4wODMuMTY4LjE2MS4zNDcuMjMyLjUzNmguNjQ2YTQuMDA2IDQuMDA2IDAgMDAtLjkxNS0uNjA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkdlbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5IaXN0b2dyYW0gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5IaXN0b2dyYW0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDNoNHY1aDJWNS41aDRWMTNIMy4wMDF2LTFIM1Yzem0xIDloMlY0SDR2OHptMyAwaDJWOUg3djN6bTMgMGgyVjYuNWgtMlYxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5IaXN0b2dyYW07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuSVAgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5JUChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMSAzYTIgMiAwIDAxMiAydjZhMiAyIDAgMDEtMiAySDVhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJoNnptLTEgMkg4djZoMVY5LjAxNGgxYy4yOTgtLjAxMyAyIDAgMi0yLjAxOCAwLTEuNzQtMS4zMTQtMS45NTItMS44MjUtMS45ODdMMTAgNXpNNiA1SDV2NmgxVjV6bTQgLjk4NGMuNjY3IDAgMSAuMzM2IDEgMS4wMDhDMTEgNy42NjQgMTAuNjY3IDggMTAgOEg5VjUuOTg0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbklQOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkludGVyZmFjZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkludGVyZmFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04Ljk2NyAxMC42NTNoMS43MjdWMTJINS4zMDZ2LTEuMzQ3aDEuNzI3VjUuMzQ3SDUuMzA2VjRoNS4zODh2MS4zNDdIOC45Njd2NS4zMDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuSW50ZXJmYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkpvaW4gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Kb2luKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgNC41djEuMDI1YzAgMS4yNjktMS4xODUgMS45MDgtMi4xMTIgMS43MzdhLjc1Ljc1IDAgMTAwIDEuNDc1Yy45MjctLjE3IDIuMTEyLjQ3IDIuMTEyIDEuNzM5djEuMDIzaDR2LTEuMDA1YTIuNSAyLjUgMCAwMTAtNC45ODhWNC41aC00ek0xMyA0YTEgMSAwIDAwLTEtMUg3YTEgMSAwIDAwLTEgMXYxLjUyNWMwIC4xNzItLjE3Mi4yOTMtLjM0MS4yNjJhMi4yNSAyLjI1IDAgMTAwIDQuNDI2Yy4xNy0uMDMxLjM0MS4wOS4zNDEuMjYyVjEyYTEgMSAwIDAwMSAxaDVhMSAxIDAgMDAxLTFWOS4wMDRhLjE2LjE2IDAgMDAtLjA0LS4xMDVjLS4xMDktLjEyNS0uNTk0LS4xNi0uNzMyLS4wNjhhMSAxIDAgMTEwLTEuNjYyYy4xMzguMDkyLjYyMy4wNTcuNzMyLS4wNjhhLjE2LjE2IDAgMDAuMDQtLjEwNVY0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkpvaW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuS2V5ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuS2V5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyLjY2NyA2LjU0MkEzLjIwOCAzLjIwOCAwIDAxOC44NiA5LjY5NGwtLjQzOC40OTJhLjQzNy40MzcgMCAwMS0uMzI3LjE0N2gtLjY3OHYuNzNhLjQzNy40MzcgMCAwMS0uNDM4LjQzN0g2LjI1di43M2EuNDM3LjQzNyAwIDAxLS40MzguNDM3SDMuNzcyYS40MzcuNDM3IDAgMDEtLjQzOC0uNDM4di0xLjQyM2MwLS4xMTYuMDQ2LS4yMjcuMTI4LS4zMWwyLjk1LTIuOTQ5YTMuMjA4IDMuMjA4IDAgMDEzLjA0Ny00LjIxNCAzLjIwMiAzLjIwMiAwIDAxMy4yMDkgMy4yMDl6bS0zLjIwOS0uODc1YS44NzUuODc1IDAgMTAxLjc1IDAgLjg3NS44NzUgMCAwMC0xLjc1IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuS2V5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbktleXdvcmQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5LZXl3b3JkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMzMgMTAuMjhjLS4xMi4wNC0uMjkuMDctLjQyLjA3LS4yMyAwLS40My0uMDgtLjUzLS4zbC0uNjMtMS4zNCAyLjMyLTIuODFIOS4zTDcuNzYgNy45M2gtLjA5TDguMjIgNEg2LjU5bC0xLjA1IDcuNWgxLjYzbC4yNy0xLjk0aC4xbC40MyAxLjEyYy4yNy43MS43NC45MiAxLjMzLjkyLjIzIDAgLjYtLjA0Ljg2LS4xMWwuMTctMS4yMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5LZXl3b3JkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk1ldGhvZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1ldGhvZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zLjMzMyAxMS4wMjdWNS4wNWgyLjA1OXYxLjEzNmguMDYzYy4yNS0uNzQ3Ljg5MS0xLjIxNCAxLjcyOC0xLjIxNC44NDggMCAxLjUyNC40ODMgMS42NSAxLjIxNGguMDYzYy4yMDQtLjczMS45MjctMS4yMTQgMS44MjItMS4yMTQgMS4xNTUgMCAxLjk0OS43OTggMS45NDkgMi4wMjN2NC4wM2gtMi4xNjlWNy41NDJjMC0uNTIxLS4yOS0uODQtLjczOC0uODRzLS43MjMuMzE5LS43MjMuODR2My40ODZINi45NjNWNy41NGMwLS41MjEtLjI5LS44NC0uNzM5LS44NC0uNDQ3IDAtLjcyMi4zMTktLjcyMi44NHYzLjQ4NkgzLjMzM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRob2Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuTWV0cmljQ291bnRlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1ldHJpY0NvdW50ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAzYTEgMSAwIDAwLTEgMXYxSDlhMSAxIDAgMDAwIDJoMXYxYTEgMSAwIDEwMiAwVjdoMWExIDEgMCAxMDAtMmgtMVY0YTEgMSAwIDAwLTEtMXpNNSA3YTEgMSAwIDAwLTEgMXYxSDNhMSAxIDAgMDAwIDJoMXYxYTEgMSAwIDEwMiAwdi0xaDFhMSAxIDAgMTAwLTJINlY4YTEgMSAwIDAwLTEtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRyaWNDb3VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk1ldHJpY0dhdWdlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTWV0cmljR2F1Z2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDRoLS41YS41LjUgMCAwMTAtMWgxYS41LjUgMCAwMS41LjV2OWEuNS41IDAgMDEtLjUuNWgtMWEuNS41IDAgMDEwLTFINXYtMmgtLjVhLjUuNSAwIDAxMC0xSDVWN2gtLjVhLjUuNSAwIDAxMC0xSDVWNHptMyAxYTEgMSAwIDAwLTEgMXY2YTEgMSAwIDAwMSAxaDJhMSAxIDAgMDAxLTFWNmExIDEgMCAwMC0xLTFIOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRyaWNHYXVnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Nb2R1bGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Nb2R1bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDJsNS4xOTYgM3YuMTc4bC0uODY2LjQ2OFY1LjVMOCAzIDMuNjcgNS41djVMOCAxM2w0LjMzLTIuNVY1Ljc3bC44NjYtLjQ3NFYxMUw4IDE0bC01LjE5Ni0zVjVMOCAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4yNDMgNC40MjlMOS41OTcgNy4wNCA4IDcuOTI4IDMuNzQzIDUuNTYzYS41LjUgMCAxMC0uNDg2Ljg3NEw3LjUgOC43OTRWMTMuNWgxVjguNzk0bDQuMjQzLTIuMzU3YS41MDguNTA4IDAgMDAuMDYtLjA0bC4zOTItLjIwMlY1LjA0N2wtLjkxNy41MDVhLjU3My41NzMgMCAwMC0uMDIuMDFsLS4xMDYuMDYtLjE5MS4xMDUtMS4zNTUuNzUzLTQuODQ5LTIuOTA5LS41MTQuODU4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1vZHVsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OYW1lc3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OYW1lc3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1NiA4LjQxNmwtLjgwNC0xLjY4aC0uMDM2djUuNjRINVY0aDEuOTkybDIuMjkyIDMuOTYuODA0IDEuNjhoLjAzNlY0aDEuNzE2djguMzc2SDkuODQ4bC0yLjI5Mi0zLjk2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk5hbWVzcGFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OZXN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OZXN0ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDNjMS4wNDQgMCAxLjkxMy43NTcgMS45OTQgMS43MzZsLjAwNi4xNDl2Ni4yM2MwIDEtLjgyIDEuODA1LTEuODQ1IDEuODhMMTEgMTNIOS41MDFhLjUuNSAwIDAxLS4wOS0uOTkybC4wOS0uMDA4SDExYy41MiAwIC45MzctLjM1Ljk5My0uNzgzbC4wMDctLjEwMnYtNi4yM2MwLS40NDUtLjM3OS0uODI3LS44ODItLjg3OUwxMSA0SDkuNWEuNS41IDAgMDEtLjA5LS45OTJMOS41IDNIMTF6TTYuNSAzYS41LjUgMCAwMS4wOS45OTJMNi41IDRINWMtLjUyIDAtLjkzNy4zNS0uOTkzLjc4M0w0IDQuODg1djYuMjNjMCAuNDQ1LjM3OS44MjcuODgyLjg3OUw1IDEyaDEuNWEuNS41IDAgMDEuMDkuOTkyTDYuNSAxM0g1Yy0xLjA0NCAwLTEuOTEzLS43NTctMS45OTQtMS43MzZMMyAxMS4xMTV2LTYuMjNjMC0xIC44Mi0xLjgwNSAxLjg0NS0xLjg4TDUgM2gxLjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01Ljg2NCA3LjI1YS43MTQuNzE0IDAgMTEwIDEuNDI5LjcxNC43MTQgMCAwMTAtMS40Mjl6bTIuMTQzIDBhLjcxNC43MTQgMCAxMTAgMS40MjkuNzE0LjcxNCAwIDAxMC0xLjQyOXptMi4xNDMgMGEuNzE0LjcxNCAwIDExMCAxLjQyOS43MTQuNzE0IDAgMDEwLTEuNDI5elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OZXN0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuTnVsbCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk51bGwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjAwMiAxMi40MTJsLS45NjIuOTYyYTEgMSAwIDAxLTEuNDE0LTEuNDE0bC45NjItLjk2MmE1LjMzMyA1LjMzMyAwIDAxNy40MS03LjQxbC45NjItLjk2MmExIDEgMCAxMTEuNDE0IDEuNDE0bC0uOTYyLjk2MmE1LjMzMyA1LjMzMyAwIDAxLTcuNDEgNy40MXptLjk2Ni0uOTY2YTQgNCAwIDAwNS40NzgtNS40NzhsLTUuNDc4IDUuNDc4em0tMS40MTQtMS40MTRsNS40NzgtNS40NzhhNCA0IDAgMDAtNS40NzggNS40Nzh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTnVsbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OdW1iZXIgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OdW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjggOS44MTJoLS44NDJsLS43OCAyLjMzNUg1LjAzMWwuNzgtMi4zMzVINC42bC4xODItMS4wNDNoMS4zNzNsLjUwNy0xLjUwNEg1LjQ1NGwuMTg4LTEuMDQyaDEuMzY3bC43OTItMi4zN0g4Ljk0bC0uNzkyIDIuMzdoLjg0OWwuNzkyLTIuMzdoMS4xNDVsLS43OTIgMi4zN0gxMS40bC0uMTgyIDEuMDQySDkuOEw5LjI5MyA4Ljc3aDEuMjQ4bC0uMTgzIDEuMDQzSDguOTQ2bC0uNzc1IDIuMzM1SDcuMDI2TDcuOCA5LjgxMnptLS41LTEuMDQzaC44NDJsLjUxMy0xLjUwNGgtLjg0OUw3LjMgOC43N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OdW1iZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuT2JqZWN0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuT2JqZWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNjMgMTJjLTEuMjk0IDAtMi4zODMtLjEwNS0yLjM4My0xLjgwMlY5LjZjMC0uNjM4LS4yNDctLjkxNC0uOTgtLjkxNHYtMS4zN2MuNzMzIDAgLjk4LS4yOC45OC0uOTE1di0uNkM0LjI0NyA0LjEwNSA1LjMzNiA0IDYuNjMxIDR2MS4xNGMtLjc1OSAwLS44ODYuMjcyLS44ODYuODQzdi44MTNjMCAuNDc5LS4yMjUuOTM2LTEuMjEyIDEuMTMzdi4xNDJjLjk4Ny4xOTcgMS4yMTIuNjU0IDEuMjEyIDEuMTMzdi44MTNjMCAuNTcuMTI3Ljg0NC44ODYuODQ0VjEyem0yLjI2Ni04YzEuMjk1IDAgMi4zODQuMTA1IDIuMzg0IDEuODAyVjYuNGMwIC42MzguMjQ3LjkxNC45OC45MTR2MS4zN2MtLjczMyAwLS45OC4yOC0uOTguOTE1di42QzExLjI4IDExLjg5NSAxMC4xOSAxMiA4Ljg5NiAxMnYtMS4xNGMuNzU5IDAgLjg4Ni0uMjcyLjg4Ni0uODQzdi0uODEzYzAtLjQ3OS4yMjUtLjkzNiAxLjIxMi0xLjEzM1Y3LjkzYy0uOTg3LS4xOTctMS4yMTItLjY1NC0xLjIxMi0xLjEzM3YtLjgxM2MwLS41Ny0uMTI3LS44NDQtLjg4Ni0uODQ0VjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuT2JqZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk9wZXJhdG9yID0gZnVuY3Rpb24gRXVpSWNvblRva2VuT3BlcmF0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi42NjcgOC4wMDJjMC0xLjUuMzk0LTIuNzQzIDEuMjQ4LTMuODIyaDEuNDM3Yy0uNjUyLjgtMS4xNCAyLjM4OC0xLjE0IDMuODIyIDAgMS40My40ODggMy4wMTggMS4xNCAzLjgxOEgzLjkxNWMtLjg1NC0xLjA4LTEuMjQ4LTIuMzIyLTEuMjQ4LTMuODE4ek02Ljc3IDkuOTk4bC0uODE4LS44MDMgMS4yMy0xLjE5Ny0xLjIzLTEuMjAzLjgzLS43OTMgMS4yMjEgMS4xOTNMOS4yMyA2LjAwMmwuODE4Ljc5My0xLjIyNyAxLjIgMS4yMjcgMS4yLS44MTguODAzTDggOC43OTUgNi43NyA5Ljk5OHptNi41NjMtMmMwIDEuNS0uMzk0IDIuNzQzLTEuMjQ4IDMuODIyaC0xLjQzN2MuNjUyLS44IDEuMTQtMi4zODggMS4xNC0zLjgyMiAwLTEuNDMtLjQ4OC0zLjAxOC0xLjE0LTMuODE4aDEuNDM3Yy44NTQgMS4wOCAxLjI0OCAyLjMyMiAxLjI0OCAzLjgxOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5PcGVyYXRvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5QYWNrYWdlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUGFja2FnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjA0OSAzLjc4NWwzLjg1MiAxLjAwNi00LjA0OSAxLjEwM0w0IDQuNzkxbDMuOTUxLTEuMDA2YS4xOS4xOSAwIDAxLjA5OCAwem0uMDczIDIuNjU0bDQuNTQ1LTEuMzA2djUuNDVsLS4xMzEuMTg0LTQuNDE0IDEuNDU1VjYuNDM5em0tNC43ODkgNC4xNDVWNS4xODhMNy40OTggNi40MXY1LjgxbC00LjAzNC0xLjQ1My0uMTMtLjE4M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5QYWNrYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblBhcmFtZXRlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblBhcmFtZXRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljg4OSAxMlY0aDMuMzA0YzEuNzk3IDAgMi45MjIgMS4xMTcgMi45MTggMi43Ny4wMDQgMS42NTItMS4xNDQgMi43NDYtMi45NzYgMi43NDZINi44MjJWMTJINC44OXptMS45MzMtNC4wMDhoLjk1M2MuODY4IDAgMS4zMzYtLjQ3MiAxLjMzMi0xLjIyMi4wMDQtLjczLS40NjQtMS4yMTEtMS4zMzItMS4yMTFoLS45NTN2Mi40MzN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUGFyYW1ldGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblBlcmNvbGF0b3IgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5QZXJjb2xhdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjUgN2ExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzem0wIDFhMi41IDIuNSAwIDEwMC01IDIuNSAyLjUgMCAwMDAgNXpNMTEgOWExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnptMCAxYTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0em0tMi41IDEuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHptMSAwYTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblBlcmNvbGF0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUHJvcGVydHkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Qcm9wZXJ0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljg4OSAxMlY0aDMuMzA0YzEuNzk3IDAgMi45MjIgMS4xMTcgMi45MTggMi43Ny4wMDQgMS42NTItMS4xNDQgMi43NDYtMi45NzYgMi43NDZINi44MjJWMTJINC44OXptMS45MzMtNC4wMDhoLjk1M2MuODY4IDAgMS4zMzYtLjQ3MiAxLjMzMi0xLjIyMi4wMDQtLjczLS40NjQtMS4yMTEtMS4zMzItMS4yMTFoLS45NTN2Mi40MzN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUHJvcGVydHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUmFuZ2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SYW5nZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44MiA1LjExNmEuNS41IDAgMDAtLjcwNC43MDRsLjA2NC4wNjRMMTEuNzE5IDhsLTIuNTQgMi4xMTZhLjUuNSAwIDAwLS4xMTQuNjNsLjA1LjA3NGEuNS41IDAgMDAuNjMuMTE1bC4wNzUtLjA1IDMtMi41YS41LjUgMCAwMC4wNzEtLjY5N2wtLjA3LS4wNzItMy0yLjV6TTYuMTggNS4xMTZhLjUuNSAwIDAxLjcwNC43MDRsLS4wNjQuMDY0TDQuMjgxIDhsMi41NCAyLjExNmEuNS41IDAgMDEuMTE0LjYzbC0uMDUuMDc0YS41LjUgMCAwMS0uNjMuMTE1bC0uMDc1LS4wNS0zLTIuNWEuNS41IDAgMDEtLjA3MS0uNjk3bC4wNy0uMDcyIDMtMi41elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5SYW5nZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblJhbmtGZWF0dXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNHY4aC0yVjZIOXY0SDV2MkgzVjhoNFY0aDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmFua0ZlYXR1cmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNHY4aC0yVjZIOXY0SDV2MkgzVjhoNFY0aDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblJlcG8gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SZXBvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguNTMzIDkuMDY3Yy0xLjc5MiAwLTIuMzc4LjcyLTIuNTcgMS4xOTRhMS42MDEgMS42MDEgMCAxMS0xLjE2My0uMDM3VjUuNzc2YTEuNTk1IDEuNTk1IDAgMDEtMS4wNjctMS41MWMwLS44ODUuNzE1LTEuNiAxLjYtMS42Ljg4NiAwIDEuNi43MTUgMS42IDEuNiAwIC43LS40NDIgMS4yOTEtMS4wNjYgMS41MXYyLjgyMUM2LjMzNiA4LjI1MSA3LjAxOSA4IDggOGMxLjQyNCAwIDEuODk5LS43MTUgMi4wNTMtMS4xOWExLjYwMyAxLjYwMyAwIDAxLS45ODYtMS40NzdjMC0uODg1LjcxNC0xLjYgMS42LTEuNi44ODUgMCAxLjYuNzE1IDEuNiAxLjZhMS41OSAxLjU5IDAgMDEtMS4xMTUgMS41MjZjLS4xMzkuNzYyLS42NTYgMi4yMDgtMi42MTkgMi4yMDh6bS0zLjIgMi4xMzNhLjUzNS41MzUgMCAwMC0uNTMzLjUzM2MwIC4yOTQuMjQuNTM0LjUzMy41MzRhLjUzNS41MzUgMCAwMDAtMS4wNjd6bTAtNy40NjdhLjUzNS41MzUgMCAwMC0uNTMzLjUzNGMwIC4yOTMuMjQuNTMzLjUzMy41MzMuMjk0IDAgLjUzNC0uMjQuNTM0LS41MzNhLjUzNS41MzUgMCAwMC0uNTM0LS41MzR6TTEwLjY2NyA0LjhhLjUzNS41MzUgMCAwMC0uNTM0LjUzMy41MzUuNTM1IDAgMDAxLjA2NyAwIC41MzUuNTM1IDAgMDAtLjUzMy0uNTMzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblJlcG87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU2VhcmNoVHlwZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblNlYXJjaFR5cGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjI3IDcuNWExIDEgMCAxMTIgMCAxIDEgMCAwMS0yIDB6TTguNzcgNy41YTEgMSAwIDExMiAwIDEgMSAwIDAxLTIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuNzAyIDEwLjY4MmE0LjUwMSA0LjUwMSAwIDAxLTUuNzk2LjQ4Mkw0LjI4IDEyLjc4OWEuNzUuNzUgMCAwMS0xLjA2LTEuMDZMNC44NDcgMTAuMWE0LjUwMSA0LjUwMSAwIDExNi44NTUuNTgxem0tNS4zMDQtMS4wNmEzIDMgMCAxMDQuMjQzLTQuMjQzQTMgMyAwIDAwNi4zOTggOS42MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TZWFyY2hUeXBlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblNoYXBlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU2hhcGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgMTB2M2gtM3YtMUg2djFIM3YtM2gxVjZIM1YzaDN2MWg0VjNoM3YzaC0xdjRoMXptLTggMUg0djFoMXYtMXptNyAwaC0xdjFoMXYtMXpNNSA0SDR2MWgxVjR6bTcgMGgtMXYxaDFWNHptLTEgMmgtMVY1SDZ2MUg1djRoMXYxaDR2LTFoMVY2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblNoYXBlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblN0cmluZyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblN0cmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMTQ3IDQuMjk3bC0uMjU1IDEuNDU1aC45MzZsLS4yMjIgMS4yNjZoLS45MzVsLS40NTUgMi42ODhjLS4wMjUuMTg0LS4wMTMuMzIzLjAzNi40MTcuMDQ4LjA5My4xNy4xNDQuMzY1LjE1MS4wNzUuMDA0LjIzLS4wMDUuNDY1LS4wMjdsLS4xMyAxLjMyYy0uMy4wOTctLjYxOC4xNDItLjk1Ny4xMzUtLjU1Mi0uMDA3LS45NjUtLjE3LTEuMjM5LS40ODctLjI3NC0uMzE3LS4zODYtLjc0OC0uMzM1LTEuMjkzbC40NzYtMi45MDRoLS43MjVsLjIxNi0xLjI2NmguNzI1bC4yNTQtMS40NTVoMS43OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TdHJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU3RydWN0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU3RydWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuNjY3IDQuNjY3aDIuNjY2djIuNjY2SDQuNjY3VjQuNjY3em0wIDRoMi42NjZ2Mi42NjZINC42NjdWOC42Njd6bTQtNGgyLjY2NnYyLjY2Nkg4LjY2N1Y0LjY2N3ptMCA0aDIuNjY2djIuNjY2SDguNjY3VjguNjY3ek0zLjMzMyAzLjMzM3Y5LjMzNGg5LjMzNFYzLjMzM0gzLjMzM3ptMC0xLjMzM2g5LjMzNEMxMy40MDMgMiAxNCAyLjU5NyAxNCAzLjMzM3Y5LjMzNGMwIC43MzYtLjU5NyAxLjMzMy0xLjMzMyAxLjMzM0gzLjMzM0ExLjMzMyAxLjMzMyAwIDAxMiAxMi42NjdWMy4zMzNDMiAyLjU5NyAyLjU5NyAyIDMuMzMzIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU3RydWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblN5bWJvbCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblN5bWJvbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMzE2IDE0YTYgNiAwIDExMC0xMiA2IDYgMCAwMTAgMTJ6bTAtMS4zMzNhNC42NjcgNC42NjcgMCAxMDAtOS4zMzQgNC42NjcgNC42NjcgMCAwMDAgOS4zMzR6bTIuMTktNS43MmgxLjE0M2MuMDE5IDEuNDQ4LS43OTMgMi4zMzgtMS45MjIgMi4zMzgtLjYzMiAwLTEuMTk0LS4yNjctMS43MDYtLjgxMS0uMzYtLjM5Ny0uNjM2LS41NzYtMS0uNTc2LS41MTcgMC0uODQ5LjM1NS0uODg1IDEuMDgzSDQuOTgzYy4wMTQtMS40Ny44NTgtMi4zMTQgMS45NS0yLjMxNC41OTUgMCAxLjEyNS4yNDkgMS42NzguODAyLjM5Mi4zODIuNjQxLjU5NSAxLjAzOC41OTUuNDg0IDAgLjg1Ny0uMzIzLjg1Ny0xLjExNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TeW1ib2w7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuVGFnID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVGFnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgOGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNCA0YTEgMSAwIDAwLTEgMXY2YTEgMSAwIDAwMSAxaDYuOTg5YTEgMSAwIDAwLjgyNS0uNDM2bDIuMDUtM2ExIDEgMCAwMDAtMS4xMjhsLTIuMDUtM0ExIDEgMCAwMDEwLjk5IDRINHptLjc1IDEuMjVhLjUuNSAwIDAwLS41LjV2NC41YS41LjUgMCAwMC41LjVoNS43NDVhLjUuNSAwIDAwLjQwNS0uMjA2bDEuNjM2LTIuMjVhLjUuNSAwIDAwMC0uNTg4TDEwLjkgNS40NTZhLjUuNSAwIDAwLS40MDUtLjIwNkg0Ljc1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblRhZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5UZXh0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVGV4dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMTQ3IDQuMjk3bC0uMjU1IDEuNDU1aC45MzZsLS4yMjIgMS4yNjZoLS45MzVsLS40NTUgMi42ODhjLS4wMjUuMTg0LS4wMTMuMzIzLjAzNi40MTcuMDQ4LjA5My4xNy4xNDQuMzY1LjE1MS4wNzUuMDA0LjIzLS4wMDUuNDY1LS4wMjdsLS4xMyAxLjMyYy0uMy4wOTctLjYxOC4xNDItLjk1Ny4xMzUtLjU1Mi0uMDA3LS45NjUtLjE3LTEuMjM5LS40ODctLjI3NC0uMzE3LS4zODYtLjc0OC0uMzM1LTEuMjkzbC40NzYtMi45MDRoLS43MjVsLjIxNi0xLjI2NmguNzI1bC4yNTQtMS40NTVoMS43OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5UZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblRva2VuQ291bnQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Ub2tlbkNvdW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0SDN2M2g1VjR6TTEzIDlIOHYzaDVWOXpNMTAgNGgzdjNoLTNWNHpNNiA5SDN2M2gzVjl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuVG9rZW5Db3VudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5WYXJpYWJsZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblZhcmlhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNjQ5IDQuNjY3bDEuMzI2IDQuN2guMDVsMS4zMjYtNC43aDEuOTgybC0yLjEzNCA2LjY2Nkg2LjgwMUw0LjY2NyA0LjY2N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5WYXJpYWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVHJhaW5pbmcgPSBmdW5jdGlvbiBFdWlJY29uVHJhaW5pbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4zODYgOS44MzZhMi41IDIuNSAwIDExMy42MTEuNjY3QzE1LjIxMiAxMS4xNzMgMTYgMTIuNDYgMTYgMTR2MS41YS41LjUgMCAxMS0xIDBWMTRjMC0xLjcyNC0xLjI3Ni0zLTMtMy0uOTEgMC0xLjI5OC0uMDItMS44MDUtLjEyMi0xLjI1LS4yNTQtMi4zMzMtMS0zLjU4NS0yLjU2NmEuNS41IDAgMTEuNzgtLjYyNGMuOSAxLjEyNCAxLjY1MyAxLjc0IDIuNDM0IDIuMDQzLjE1NS4wNTIuMzQ1LjA4My41NjIuMTA1em0xLjc4NS4xMjhjLjA4My4wMS4xNjcuMDIxLjI1MS4wMzRMMTIuNSAxMGExLjUgMS41IDAgMTAtLjMzLS4wMzZ6TTkuNzggMTEuOTdhLjUuNSAwIDAxLjUuNWMwIC4wNzYtLjA0Ny4yMjYtLjA1LjIzMS0uMTc5LjM4LS4yMy43NzQtLjIzIDEuMzAydjEuNWEuNS41IDAgMTEtMSAwdi0xLjVjMC0uNjU3LjA3Mi0xLjE4Ni4zMDctMS42OTZhLjUuNSAwIDAxLjQ3My0uMzM3ek01Ljk1OCA1Ljc3MmEuNS41IDAgMDEtLjc4LjYyNUwzLjExIDMuODEyYS41LjUgMCAxMS43OC0uNjI0bDIuMDY4IDIuNTg0ek0xIDExaDUuNWEuNS41IDAgMTEwIDFoLTZhLjUuNSAwIDAxLS41LS41Vi41QS41LjUgMCAwMS41IDBoMTJhLjUuNSAwIDAxLjUuNXYzYS41LjUgMCAxMS0xIDBWMUgxdjEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFpbmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVHJhc2ggPSBmdW5jdGlvbiBFdWlJY29uVHJhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAzaDV2MUgwVjNoNVYxYTEgMSAwIDAxMS0xaDRhMSAxIDAgMDExIDF2MnptLTcuMDU2IDhIN3YxSDQuMWwuMzkyIDIuNTE5Yy4wNDIuMjY5LjI1NC40NTguNDkzLjQ1OGg2LjAzYy4yMzkgMCAuNDUxLS4xODkuNDkzLS40NThsMS40OTgtOS41NzZIMTRsLTEuNTA0IDkuNzNjLS4xMTYuNzQ3LS43NCAxLjMwNC0xLjQ4MSAxLjMwNGgtNi4wM2MtLjc0MSAwLTEuMzY1LS41NTctMS40ODEtMS4zMDRsLTEuNTExLTkuNzNIOVY1Ljk1SDMuMTU3TDMuNDc2IDhIOHYxSDMuNjMybC4zMTIgMnpNNiAzaDRWMUg2djJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25VbmZvbGQgPSBmdW5jdGlvbiBFdWlJY29uVW5mb2xkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4xNCAzLjgwOEw3LjUzIDEuNTFhLjY3LjY3IDAgMDEuOTQyIDBsMi4zODkgMi4yOThjLjI2LjI1Ni42ODUuMjU2Ljk0NCAwYS42NS42NSAwIDAwMC0uOTNMOS40MTYuNTc4YTIuMDIgMi4wMiAwIDAwLTIuODMyIDBsLTIuMzg4IDIuM2EuNjUuNjUgMCAwMDAgLjkzYy4yNi4yNTYuNjgzLjI1Ni45NDQgMHptMCA4LjM4NGwyLjM5IDIuMjk4YS42Ny42NyAwIDAwLjk0MiAwbDIuMzg5LTIuMjk4YS42NzcuNjc3IDAgMDEuOTQ0IDAgLjY1LjY1IDAgMDEwIC45M2wtMi4zODggMi4zYTIuMDIgMi4wMiAwIDAxLTIuODMyIDBsLTIuMzg4LTIuM2EuNjUuNjUgMCAwMTAtLjkzLjY3Ny42NzcgMCAwMS45NDQgMHpNMTYgNkgwdjRoMTZWNnpNMSA5VjdoMTR2MkgxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25VbmZvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblVubGluayA9IGZ1bmN0aW9uIEV1aUljb25VbmxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU2NSAxMC44M2EuNS41IDAgMTEuODE5LjU3M2wtMS44NzcgMi42OGMtLjk2MyAxLjM3Ni0zLjAyIDEuNTUtNC41ODguNDVDLjM1IDEzLjQzNi0uMTkxIDExLjQ0NS43NzMgMTAuMDdMMy42NCA1Ljk3M2MuOTYzLTEuMzc1IDMuMDE5LTEuNTQ4IDQuNTg3LS40NWEuNS41IDAgMTEtLjU3My44MkM2LjUwOSA1LjU0IDUuMDggNS42NiA0LjQ2IDYuNTQ2bC0yLjg2OCA0LjA5NWMtLjYyMS44ODctLjI0NSAyLjI3LjkgMy4wNzMgMS4xNDYuODAyIDIuNTc1LjY4MiAzLjE5Ni0uMjA1bDEuODc3LTIuNjh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03Ljg5MiAzLjQzYS41LjUgMCAxMS0uNTc0LS44MTlMMTAgLjczNGMxLjM3Ni0uOTYzIDMuMzY3LS40MjIgNC40NjUgMS4xNDYgMS4wOTggMS41NjkuOTI2IDMuNjI1LS40NSA0LjU4OEw5LjkxOCA5LjMzNmMtMS4zNzUuOTYzLTMuMzY2LjQyMi00LjQ2NC0xLjE0NmEuNS41IDAgMTEuODE5LS41NzRjLjgwMiAxLjE0NiAyLjE4NSAxLjUyMiAzLjA3Mi45TDEzLjQ0IDUuNjVjLjg4Ni0uNjIxIDEuMDA2LTIuMDUuMjA0LTMuMTk1LS44MDItMS4xNDYtMi4xODYtMS41MjItMy4wNzItLjlMNy44OTIgMy40M3pNNiAuNXYzYS41LjUgMCAwMS0xIDB2LTNhLjUuNSAwIDAxMSAwek0xLjA1OCAyLjIzbDIuNDU4IDEuNzJhLjUuNSAwIDAxLS41NzQuODJMLjQ4NCAzLjA1YS41LjUgMCAxMS41NzQtLjgyem0xMiA3LjA5M2wyLjQ1NyAxLjcyYS41LjUgMCAxMS0uNTczLjgybC0yLjQ1Ny0xLjcyYS41LjUgMCAxMS41NzMtLjgyem0tMi4wOTkgMS4xODF2M2EuNS41IDAgMTEtMSAwdi0zYS41LjUgMCAxMTEgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVW5saW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Vc2VyID0gZnVuY3Rpb24gRXVpSWNvblVzZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCA5YTQgNCAwIDEwMC04IDQgNCAwIDAwMCA4em0wLTFhMyAzIDAgMTAwLTYgMyAzIDAgMDAwIDZ6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUgMTQuMjkxQTkuMDUzIDkuMDUzIDAgMDA4IDExYTkuMDUzIDkuMDUzIDAgMDAtNyAzLjI5MWwuNzE1LjcxQTguMDQ3IDguMDQ3IDAgMDE4IDExLjk5NiA4LjA0NyA4LjA0NyAwIDAxMTQuMjg2IDE1bC43MTQtLjcxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vc2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Vc2VyQXZhdGFyID0gZnVuY3Rpb24gRXVpSWNvblVzZXJBdmF0YXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE4LFxuICAgIGhlaWdodDogMTgsXG4gICAgdmlld0JveDogXCIwIDAgMTggMThcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjY4OSAxMS4xMzJjMS4xNTUgMS4yMjIgMS45NTMgMi44NzkgMi4xODMgNC43NDhhMS4wMDcgMS4wMDcgMCAwMS0xIDEuMTJIMy4wMDdhMS4wMDUgMS4wMDUgMCAwMS0xLTEuMTJjLjIzLTEuODcgMS4wMjgtMy41MjYgMi4xODMtNC43NDguMjQ3LjIyOC41MDUuNDQyLjc4Mi42MzMtMS4wMzggMS4wNjktMS43NjUgMi41NS0xLjk3MiA0LjIzN0wxNC44NzIgMTZjLS4yMDQtMS42ODYtLjkzLTMuMTY2LTEuOTY2LTQuMjM1YTcuMDEgNy4wMSAwIDAwLjc4My0uNjMzek04LjkzOSAxYzEuOSAwIDMgMiA0LjM4IDIuNjMzYTIuNDgzIDIuNDgzIDAgMDEtMS44OC44NjdjLS4yOTggMC0uNTc5LS4wNi0uODQ0LS4xNTdBMy43MjYgMy43MjYgMCAwMTcuNjkgNS43NWMtMS4zOTUgMC0zLjc1LjI1LTMuMjQ1LTEuOTAzQzUuOTQgMyA2Ljk1MiAxIDguOTQgMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguOTQgMmMyLjIwNSAwIDQgMS43OTQgNCA0cy0xLjc5NSA0LTQgNGMtMi4yMDcgMC00LTEuNzk0LTQtNHMxLjc5My00IDQtNG0wIDlBNSA1IDAgMTA4LjkzNy45OTkgNSA1IDAgMDA4Ljk0IDExXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vc2VyQXZhdGFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Vc2VycyA9IGZ1bmN0aW9uIEV1aUljb25Vc2VycyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjQ4MiA0LjM0NGEyIDIgMCAxMC0yLjk2MyAwYy0uMDguMDQyLS4xNTYuMDg3LS4yMy4xMzYtLjQ1Ny4zMDUtLjc1LjcwNC0uOTMzIDEuMDczQTMuNDU3IDMuNDU3IDAgMDAxIDYuOTc4VjlhMSAxIDAgMDAxIDFoMi41YTMuNjkgMy42OSAwIDAxLjY4NC0uOTYyTDUuMTcxIDlIMlY3czAtMiAyLTJjMS4wMDcgMCAxLjUwNy41MDcgMS43NTUgMS4wMS4yMjUtLjI1NC40OTMtLjQ3Ljc5My0uNjM2YTIuNzE3IDIuNzE3IDAgMDAtMS4wNjYtMS4wM3pNNCA0YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem0xMCA2aC0yLjVhMy42ODQgMy42ODQgMCAwMC0uNjg0LS45NjJMMTAuODI5IDlIMTRWN3MwLTItMi0yYy0xLjAwNyAwLTEuNTA3LjUwNy0xLjc1NSAxLjAxYTMuMDEyIDMuMDEyIDAgMDAtLjc5My0uNjM2IDIuNzE2IDIuNzE2IDAgMDExLjA2Ni0xLjAzIDIgMiAwIDExMi45NjMgMGMuMDguMDQyLjE1Ni4wODcuMjMuMTM2LjQ1Ny4zMDUuNzUuNzA0LjkzMyAxLjA3M0EzLjQ1MyAzLjQ1MyAwIDAxMTUgNi45NDRWOWExIDEgMCAwMS0xIDF6bS0yLTZhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAgOGMwIC41MTctLjE5Ni45ODktLjUxOCAxLjM0NGEyLjc1NSAyLjc1NSAwIDAxMS4xNjMgMS4yMUEzLjQ1MyAzLjQ1MyAwIDAxMTEgMTEuOTc3VjE0YTEgMSAwIDAxLTEgMUg2YTEgMSAwIDAxLTEtMXYtMi4wMjJhMi4wMDUgMi4wMDUgMCAwMS4wMDYtLjEzNSAzLjQ1NiAzLjQ1NiAwIDAxLjM1LTEuMjkgMi43NTUgMi43NTUgMCAwMTEuMTYyLTEuMjFBMiAyIDAgMTExMCA4em0tNCA0djJoNHYtMnMwLTItMi0yLTIgMi0yIDJ6bTMtNGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVzZXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WZWN0b3IgPSBmdW5jdGlvbiBFdWlJY29uVmVjdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNSAxMVY1SDExVjMuNUg1VjVIMy41djZINXYxLjVoNlYxMWgxLjV6bTEgMEgxNXY0aC00di0xLjVINVYxNUgxdi00aDEuNVY1SDFWMWg0djEuNWg2VjFoNHY0aC0xLjV2NnpNNCA0VjJIMnYyaDJ6bTggMGgyVjJoLTJ2MnpNMiAxNGgydi0ySDJ2MnptMTAgMGgydi0yaC0ydjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZlY3RvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlkZW9QbGF5ZXIgPSBmdW5jdGlvbiBFdWlJY29uVmlkZW9QbGF5ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDEuOTk0QzAgLjg5My44OTUgMCAxLjk5NCAwaDEyLjAxMkMxNS4xMDcgMCAxNiAuODk1IDE2IDEuOTk0djEyLjAxMkExLjk5NSAxLjk5NSAwIDAxMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMDEwIDE0LjAwNlYxLjk5NHptMSAwdjEyLjAxMmMwIC41NDguNDQ2Ljk5NC45OTQuOTk0aDEyLjAxMmEuOTk1Ljk5NSAwIDAwLjk5NC0uOTk0VjEuOTk0QS45OTUuOTk1IDAgMDAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAwMSAxLjk5NHpNMSA0aDE0djFIMVY0em0xLjUtMWEuNS41IDAgMDEwLTFoMWEuNS41IDAgMDEwIDFoLTF6bTMgMGEuNS41IDAgMDEwLTFoMWEuNS41IDAgMDEwIDFoLTF6bTQuOTQ3IDYuMTA2YTEgMSAwIDAxMCAxLjc4OGwtMyAyQTEgMSAwIDAxNiAxMlY4YTEgMSAwIDAxMS40NDctLjg5NGwzIDJ6TTEwIDEwTDcgOHY0bDMtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlkZW9QbGF5ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0FyZWEgPSBmdW5jdGlvbiBFdWlJY29uVmlzQXJlYShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTNoMTBWOS45MTNsLTIuNTcxLTIuODI2TDguNTYgOC43NTNhLjUuNSAwIDAxLS43MjgtLjA2N0w0LjQ0OCA0LjMxNyAzIDYuMTkxVjEzem01LjI5NS01LjM1bDEuODM3LTEuNjRhLjUuNSAwIDAxLjcwMy4wMzdsMy4wMzUgMy4zMzZhLjUuNSAwIDAxLjEzLjMzN3YzLjc4YS41LjUgMCAwMS0uNS41aC0xMWEuNS41IDAgMDEtLjUtLjVWNi4wMmEuNS41IDAgMDEuMTA0LS4zMDVsMS45NDctMi41MmEuNS41IDAgMDEuNzkxLS4wMDFMOC4yOTUgNy42NXpNMSAxNWgxMy41YS41LjUgMCAxMTAgMUguNWEuNS41IDAgMDEtLjUtLjV2LTE0YS41LjUgMCAwMTEgMFYxNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQXJlYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQXJlYVN0YWNrZWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzQXJlYVN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAxYS41LjUgMCAwMS41LjVWMTVoMTMuNWEuNS41IDAgMTEwIDFILjVhLjUuNSAwIDAxLS41LS41di0xNEEuNS41IDAgMDEuNSAxem00LjM0MiAyLjE5NEw4LjI5NSA3LjY1bDEuODM3LTEuNjRhLjUuNSAwIDAxLjcwMy4wMzdsMy4wMzUgMy4zMzZhLjUuNSAwIDAxLjEzLjMzN3YzLjc4YS41LjUgMCAwMS0uNS41aC0xMWEuNS41IDAgMDEtLjUtLjVWNi4wMmEuNS41IDAgMDEuMTA0LS4zMDVsMS45NDctMi41MmEuNS41IDAgMDEuNzkxLS4wMDF6bS0uMzk0IDEuMTIzTDMgNi4xOTF2NC4xMDFsMS4xNDYtMS4xNDZhLjUuNSAwIDAxLjQ5My0uMTI2bC4wODUuMDMzTDguNSAxMC45NGwxLjc3Ni0uODg4YS41LjUgMCAwMS4zNi0uMDM0bC4wODguMDM0TDEzIDExLjE5VjkuOTEzbC0yLjU3MS0yLjgyNkw4LjU2IDguNzUzYS41LjUgMCAwMS0uNzI4LS4wNjdMNC40NDggNC4zMTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0FyZWFTdGFja2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNCYXJIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvblZpc0Jhckhvcml6b250YWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgMTBoLTZhLjUuNSAwIDAxMC0xSDhWNkgyLjVhLjUuNSAwIDAxMC0xSDEzVjJIMi41YS41LjUgMCAwMTAtMWgxMWEuNS41IDAgMDEuNS41djRhLjUuNSAwIDAxLS41LjVIOXYzaDIuNWEuNS41IDAgMDEuNS41djRhLjUuNSAwIDAxLS41LjVoLTlhLjUuNSAwIDExMC0xSDExdi0zSDguNXpNMCAuNWEuNS41IDAgMTExIDB2MTRhLjUuNSAwIDExLTEgMFYuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFySG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAwYS41LjUgMCAwMS41LjV2MTRhLjUuNSAwIDExLTEgMFYuNUEuNS41IDAgMDEuNSAwem0xMyAxYS41LjUgMCAwMS41LjV2NGEuNS41IDAgMDEtLjUuNUg5djNoMi41YS41LjUgMCAwMS41LjV2NGEuNS41IDAgMDEtLjUuNWgtOWEuNS41IDAgMTEwLTFIOXYtM0gyLjVhLjUuNSAwIDAxMC0xSDZWNkgyLjVhLjUuNSAwIDAxMC0xSDEwVjJIMi41YS41LjUgMCAwMTAtMWgxMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0JhclZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvblZpc0JhclZlcnRpY2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgNy41djZhLjUuNSAwIDExLTEgMFY4SDZ2NS41YS41LjUgMCAxMS0xIDBWM0gydjEwLjVhLjUuNSAwIDExLTEgMHYtMTFhLjUuNSAwIDAxLjUtLjVoNGEuNS41IDAgMDEuNS41VjdoM1Y0LjVhLjUuNSAwIDAxLjUtLjVoNGEuNS41IDAgMDEuNS41djlhLjUuNSAwIDExLTEgMFY1aC0zdjIuNXpNLjUgMTZhLjUuNSAwIDExMC0xaDE0YS41LjUgMCAxMTAgMUguNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFyVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC41IDE1YS41LjUgMCAxMTAgMUguNWEuNS41IDAgMTEwLTFoMTR6bS05LTEzYS41LjUgMCAwMS41LjVMNS45OTkgN0g5VjQuNWEuNS41IDAgMDEuNS0uNWg0YS41LjUgMCAwMS41LjV2OWEuNS41IDAgMTEtMSAwVjdoLTN2Ni41YS41LjUgMCAwMS0uNDEuNDkyTDkuNSAxNGEuNS41IDAgMDEtLjUtLjVWMTBINnYzLjVhLjUuNSAwIDAxLS45OTIuMDlMNSAxMy41VjZIMnY3LjVhLjUuNSAwIDExLTEgMHYtMTFhLjUuNSAwIDAxLjUtLjVoNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFyVmVydGljYWxTdGFja2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNHYXVnZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNHYXVnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjg3NyA1Ljg0N2wtMS4wMiAxLjAyYS41LjUgMCAwMS0uNzA4LS43MDdsMS4xLTEuMDk5Yy0uMDUtLjA1My0uMS0uMTA2LS4xNTItLjE1N0E2LjQ3MSA2LjQ3MSAwIDAwOCAzLjAxOVY0LjVhLjUuNSAwIDAxLTEgMFYzLjAxOWE2LjQ3IDYuNDcgMCAwMC00LjI2MSAyLjA1NWwxLjA3IDEuMDcxYS41LjUgMCAwMS0uNzA2LjcwN2wtLjk5LS45OUE2LjQ2IDYuNDYgMCAwMDEuMDE4IDEwSDIuNWEuNS41IDAgMTEwIDFIMS4xNzRjLjA4My4zNTMuMTk2LjY5Ny4zMzcgMS4wM2EuNS41IDAgMTEtLjkyMi4zOUE3LjQ4NyA3LjQ4NyAwIDAxMCA5LjVhNy40ODMgNy40ODMgMCAwMTIuMTk3LTUuMzA0QTcuNDg3IDcuNDg3IDAgMDE3LjUgMmE3LjQ4NyA3LjQ4NyAwIDAxNS4zMDQgMi4xOTdBNy40ODMgNy40ODMgMCAwMTE1IDkuNWE3LjQ4NyA3LjQ4NyAwIDAxLS41OSAyLjkyLjUuNSAwIDAxLS45Mi0uMzljLjE0LS4zMzMuMjUzLS42NzcuMzM2LTEuMDNIMTIuNWEuNS41IDAgMTEwLTFoMS40ODFhNi40ODMgNi40ODMgMCAwMC0xLjEwNC00LjE1M3ptLTYuMDQxIDUuMzE3YS45OTMuOTkzIDAgMDEtLjAxLTEuNDA0Yy4zODQtLjM4NSAyLjg4Mi0yLjAwMiAzLjE0OS0xLjczNS4yNjcuMjY3LTEuMzUgMi43NjUtMS43MzUgMy4xNWEuOTkzLjk5MyAwIDAxLTEuNDA0LS4wMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzR2F1Z2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0dvYWwgPSBmdW5jdGlvbiBFdWlJY29uVmlzR29hbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjcyNSAzLjY1M2E2IDYgMCAwMTIuODQ3IDcuNTc2LjUuNSAwIDAxLS45MjgtLjM3MiA1IDUgMCAxMC05LjI5My0uMDE0LjUuNSAwIDAxLS4yMTguNjE5TDEuMzkgMTIuNDdhLjUuNSAwIDAxLS43MDgtLjIzQTcuOTkgNy45OSAwIDAxMCA5YTggOCAwIDAxMTEuMjEyLTcuMzI5LjUuNSAwIDAxLjIzNC43MDRsLS43MjEgMS4yNzh6bS0uOTMzLS4zOGwuNS0uODg5YTcgNyAwIDAwLTguOTAyIDguOTNsLjg4Ni0uNTExYTYgNiAwIDAxNy41MTYtNy41M3pNNi43MyA5LjQ2N2ExLjc1IDEuNzUgMCAxMTIuNTM5IDAgMiAyIDAgMTEtMi41MzkgMHpNOCAxMi4wMTNhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTAtM2EuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzR29hbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzTGluZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNMaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNjU0IDMuNDhjLjI0OC4yMjUuNTUyLjM4OS44ODguNDY3TDExLjI0IDkuNDNhMS45OSAxLjk5IDAgMDAtLjkxNS0uNDA0bDIuMzMtNS41NDd6TTkuMTQ2IDkuMTlhMi4wMDggMi4wMDggMCAwMC0uNzY5LjY0bC0xLjU3Mi0yYy4zMTEtLjEzNi41ODEtLjM1Ljc4NS0uNjE4bDEuNTU2IDEuOTc4ek01LjU4MSA3Ljk1NmwtMi4xMzQgNC4yNjhhLjUuNSAwIDAxLS44OTQtLjQ0OGwyLjEzNC00LjI2OGMuMjUuMjIuNTU3LjM3Ni44OTQuNDQ4ek0xIDE1aDEzLjVhLjUuNSAwIDExMCAxSC41YS41LjUgMCAwMS0uNS0uNXYtMTRhLjUuNSAwIDAxMSAwVjE1em01LThhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6bTQgNWExIDEgMCAxMTAtMiAxIDEgMCAwMTAgMnptNC05YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNMaW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNNYXBDb29yZGluYXRlID0gZnVuY3Rpb24gRXVpSWNvblZpc01hcENvb3JkaW5hdGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjUgMTVDNS43NyAxNSAyIDkuOTcgMiA2LjU5NSAyIDMuNTA3IDQuNDYgMSA3LjUgMVMxMyAzLjUwNyAxMyA2LjU5NUMxMyA5Ljk3IDkuMjMgMTUgNy41IDE1em0wLTFjLjI4NiAwIDEuNDgtMS4wNDQgMi40NTktMi4zNUMxMS4yMTkgOS45NjkgMTIgOC4xNTMgMTIgNi41OTYgMTIgNC4wNTUgOS45ODMgMiA3LjUgMlMzIDQuMDU1IDMgNi41OTVjMCAxLjU1Ny43OCAzLjM3MyAyLjA0MSA1LjA1NkM2LjAyIDEyLjk1NiA3LjIxNCAxNCA3LjUgMTR6bTAtNC45OTZhMi41IDIuNSAwIDExMC01IDIuNSAyLjUgMCAwMTAgNXptMC0xYTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01hcENvb3JkaW5hdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc01hcFJlZ2lvbiA9IGZ1bmN0aW9uIEV1aUljb25WaXNNYXBSZWdpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUgMi4zMDl2OC42OWEuNDk5LjQ5OSAwIDAxLS4wMzIuMTc2TDkuNSAxMi42OTFWMy44MDlsLTMtMS41em0tMS0uMDRMMiAzLjgyNXY4LjkwNmwzLjUyNy0xLjU2OGEuNS41IDAgMDEtLjAyNy0uMTY0VjIuMjd6bS4yNzQtMS4yMTZhLjQ5OC40OTggMCAwMS40NzEuMDFsMy43NjggMS44ODQgNC4yODQtMS45MDRBLjUuNSAwIDAxMTUgMS41djEwYS41LjUgMCAwMS0uMjk3LjQ1N2wtNC41IDJhLjUuNSAwIDAxLS40MjctLjAxbC0zLjc4OS0xLjg5NC00LjI4MyAxLjkwNGEuNS41IDAgMDEtLjcwMy0uNDU3di0xMGEuNS41IDAgMDEuMjk3LS40NTdsNC40NzYtMS45OXpNMTAuNSAzLjgyNXY4LjkwNmwzLjUtMS41NTZWMi4yN2wtMy41IDEuNTU2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNNYXBSZWdpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc01ldHJpYyA9IGZ1bmN0aW9uIEV1aUljb25WaXNNZXRyaWMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUzMiA3LjM0YTIuMTYxIDIuMTYxIDAgMTEyLjkzNiAwIDIuNzQ2IDIuNzQ2IDAgMTEtMi45MzYgMHpNMiAwaDEyYTIgMiAwIDAxMiAydjEyYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjJhMSAxIDAgMDAtMS0xSDJ6bTYgNS45MTVhMS4xNjEgMS4xNjEgMCAxMDAtMi4zMjIgMS4xNjEgMS4xNjEgMCAwMDAgMi4zMjJ6bTAgNC40OTJhMS43NDYgMS43NDYgMCAxMDAtMy40OTIgMS43NDYgMS43NDYgMCAwMDAgMy40OTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01ldHJpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzUGllID0gZnVuY3Rpb24gRXVpSWNvblZpc1BpZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSA5YS41LjUgMCAwMS0uNS0uNVYzLjAyM0E1LjUgNS41IDAgMTAxMS45NzggOUg2LjV6TTcgOGg1LjVhLjUuNSAwIDAxLjUuNUE2LjUgNi41IDAgMTE2LjUgMmEuNS41IDAgMDEuNS41Vjh6bTItNi45NzJWNmg0Ljk3MkMxMy42OTYgMy41NTIgMTEuNDQ4IDEuMzA0IDkgMS4wMjh6TTE0LjUgN2gtNmEuNS41IDAgMDEtLjUtLjV2LTZhLjUuNSAwIDAxLjUtLjVDMTEuODUzIDAgMTUgMy4xNDcgMTUgNi41YS41LjUgMCAwMS0uNS41ek02LjE0NiA4Ljg1NGEuNS41IDAgMTEuNzA4LS43MDhsNCA0YS41LjUgMCAwMS0uNzA4LjcwOGwtNC00elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNQaWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc1RhYmxlID0gZnVuY3Rpb24gRXVpSWNvblZpc1RhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWMmEyIDIgMCAwMTItMmgxMmEyIDIgMCAwMTIgMnYxem0tMSAwVjJhMSAxIDAgMDAtMS0xSDJhMSAxIDAgMDAtMSAxdjFoMTR6bTAgMUgxdjEwYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjR6TTQuNSA2YS41LjUgMCAwMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAwMTAtMWg2em0tOSAzYS41LjUgMCAwMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAwMTAtMWg2em0tOSAzYS41LjUgMCAxMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAxMTAtMWg2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUYWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGFnQ2xvdWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzVGFnQ2xvdWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjUgOS4wNDdhLjUuNSAwIDEwMCAxaDEzYS41LjUgMCAwMDAtMWgtMTN6bTAtMWgxM2ExLjUgMS41IDAgMDEwIDNoLTEzYTEuNSAxLjUgMCAwMTAtM3pNMTAgMTNhLjUuNSAwIDExMCAxSDRhLjUuNSAwIDExMC0xaDZ6TTguMDAxIDIuMDE1YS41LjUgMCAxMS0uMDAyIDFsLTUtLjAxNWEuNS41IDAgMTEuMDAzLTFsNSAuMDE1ek0xNCA1YS41LjUgMCAxMTAgMUg2YS41LjUgMCAwMTAtMWg4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUYWdDbG91ZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGV4dCA9IGZ1bmN0aW9uIEV1aUljb25WaXNUZXh0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDV2NmgyYS41LjUgMCAxMTAgMWgtNWEuNS41IDAgMTEwLTFoMlY1SDV2LjVhLjUuNSAwIDAxLTEgMHYtMWEuNS41IDAgMDEuNS0uNWg3YS41LjUgMCAwMS41LjUxbC0uMDIxIDFhLjUuNSAwIDExLTEtLjAybC4wMS0uNDlIOC41ek0xIDE1aDEuNWEuNS41IDAgMTEwIDFoLTJhLjUuNSAwIDAxLS41LS41di0xLjk5NmEuNS41IDAgMDExIDBWMTV6TTEgMXYxLjQ5N2EuNS41IDAgMTEtMSAwVi41QS41LjUgMCAwMS41IDBoMmEuNS41IDAgMDEwIDFIMXptMTQgMGgtMS40OTVhLjUuNSAwIDAxMC0xSDE1LjVhLjUuNSAwIDAxLjUuNXYyYS41LjUgMCAxMS0xIDBWMXptMCAxNHYtMS41YS41LjUgMCAxMTEgMHYyYS41LjUgMCAwMS0uNS41aC0yYS41LjUgMCAxMTAtMUgxNXpNMCA2LjVhLjUuNSAwIDAxMSAwdjNhLjUuNSAwIDAxLTEgMHYtM3pNOS41IDBhLjUuNSAwIDAxMCAxaC0zYS41LjUgMCAwMTAtMWgzek0xNSA2LjVhLjUuNSAwIDExMSAwdjNhLjUuNSAwIDExLTEgMHYtM3pNOS41IDE1YS41LjUgMCAxMTAgMWgtM2EuNS41IDAgMTEwLTFoM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVGV4dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGltZWxpb24gPSBmdW5jdGlvbiBFdWlJY29uVmlzVGltZWxpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC44ODQgMS44MDJjMS4xNzEtLjMwOSAyLjIyLS4yNCAzLjEwMy4wNy4yOTUuMTA0LjUwNy4yMTIuNjMxLjI5MmwuMTY0LjEwNi4wNDguMTg4Yy4yNzggMS4wNjYuMiAyLjE3NS0uMDkxIDMuMjNhNi43MjggNi43MjggMCAwMS0uMTk0LjU5OGMuMDM1LjEyLjA3NC4yNzMuMTEyLjQ1NC4yMjcgMS4wNjUuMjQ3IDIuMTkzLS4wOCAzLjI2N2E0Ljg1NSA0Ljg1NSAwIDAxLS41MzQgMS4xNzVjLS4zMjQuNTE0LS43Ljk1NC0xLjExNyAxLjMyMy0uODA2LjcxMi0xLjYxNiAxLjA3MS0yLjIzNSAxLjIwNi0uMTQuMTc5LS4zNDYuMzgxLS42MjkuNTc4LS42NDMuNDQ3LTEuNDkzLjcxMS0yLjU2MS43MTEtMS4wNyAwLTEuOTItLjI2NC0yLjU2My0uNzExYTIuODc0IDIuODc0IDAgMDEtLjYyOS0uNTc4Yy0uNjE4LS4xMzQtMS40MjgtLjQ5My0yLjIzMi0xLjIwMy0uNDE5LS4zNy0uNzk2LS44MS0xLjEyLTEuMzI2YTQuODU1IDQuODU1IDAgMDEtLjUzNC0xLjE3NUMuMDk2IDguOTMzLjExNiA3LjgwNS4zNDMgNi43NGE2Ljc0IDYuNzQgMCAwMS4xMTItLjQ1NCA2LjcyOCA2LjcyOCAwIDAxLS4xOTQtLjU5OEMtLjAzIDQuNjMzLS4xMDggMy41MjQuMTcgMi40NThsLjA0OC0uMTg4LjE2NC0uMTA2Yy4xMjQtLjA4LjMzNi0uMTg4LjYzLS4yOTEuODg1LS4zMSAxLjkzMy0uMzggMy4xMDQtLjA3LjE4NC0uMTA4LjQzNC0uMjMuNzQ4LS4zNDhDNS42MTYgMS4xNyA2LjQ5NyAxIDcuNTAxIDFjMS4wMDIgMCAxLjg4My4xNyAyLjYzNC40NTUuMzE1LjExOS41NjUuMjQuNzUuMzQ3em0zLjAyNyAxLjExNmEzLjEzIDMuMTMgMCAwMC0uMjU1LS4xMDJjLS43NDktLjI2My0xLjY2LS4zMDktMi43MDguMDA3bC0uMjM4LjA3Mi0uMjAxLS4xNDdjLS4xMS0uMDgtLjM1NC0uMjE3LS43MjgtLjM1OEM5LjE0IDIuMTQ3IDguMzggMiA3LjUwMSAyYy0uODggMC0xLjY0MS4xNDctMi4yODMuMzktLjM3My4xNDEtLjYxNy4yNzgtLjcyNy4zNThsLS4yLjE0Ny0uMjQtLjA3MmMtMS4wNDgtLjMxNi0xLjk1OC0uMjctMi43MDctLjAwN2EzLjEzIDMuMTMgMCAwMC0uMjU1LjEwMmMtLjE2Ny44MTItLjA5NCAxLjY3NC4xMzYgMi41MDMuMDg0LjMwMy4xNjYuNTI0LjIxNy42MzdsLjA4Mi4xODItLjA2Ni4xOWMtLjAzMi4wOS0uMDg0LjI3LS4xMzcuNTE4LS4xOTUuOTE0LS4yMTIgMS44OC4wNTkgMi43NjcuMS4zMzMuMjQxLjY0NS40MjMuOTM1LjI3My40MzQuNTg4LjgwMS45MzYgMS4xMDguNDM0LjM4My44OTguNjU1IDEuMzYuODM0LjI3LjEwNS40NzQuMTU1LjU3NS4xN2wuMjQ4LjAzNC4xMi4yMmMuMDUxLjA5MS4xOTkuMjY2LjQ2Ni40NTIuNDc2LjMzIDEuMTI3LjUzMiAxLjk5My41MzIuODY1IDAgMS41MTYtLjIwMiAxLjk5LS41MzIuMjY4LS4xODYuNDE2LS4zNi40NjYtLjQ1MmwuMTIxLS4yMi4yNDgtLjAzNGMuMTAxLS4wMTUuMzA1LS4wNjUuNTc2LS4xNy40NjItLjE4LjkyNy0uNDUyIDEuMzYyLS44MzYuMzQ3LS4zMDcuNjYtLjY3NC45MzMtMS4xMDcuMTgyLS4yOS4zMjItLjYwMS40MjMtLjkzNC4yNzEtLjg4Ny4yNTQtMS44NTMuMDYtMi43NjdhNC41OTcgNC41OTcgMCAwMC0uMTM4LS41MTlsLS4wNjYtLjE4OS4wODItLjE4MmMuMDUtLjExMy4xMzMtLjMzNC4yMTctLjYzNy4yMy0uODI5LjMwMy0xLjY5MS4xMzYtMi41MDN6TTUgNS4wMDhjLjAwNC4xODEtLjA0OC4zNjQtLjI2NC42MTYtLjQyOC40OTgtLjk4NS40ODgtMS40MzEuMDQ5LS4zMjYtLjMyMS0uMzI1LS43MzItLjI5LTEuMDQ3LjA4NS0uNzYuNzQ4LS43MjIgMS4yNjItLjQ0LjQ4Ni4yNy43MTcuNjE2LjcyMy44MjN6bTUgMGMuMDA2LS4yMDYuMjM3LS41NTMuNzI0LS44MjEuNTE0LS4yODMgMS4xNzYtLjMyMSAxLjI2LjQ0LjAzNi4zMTQuMDM4LjcyNS0uMjg4IDEuMDQ2LS40NDYuNDQtMS4wMDUuNDQ5LTEuNDMzLS4wNS0uMjE3LS4yNS0uMjY3LS40MzQtLjI2My0uNjE0ek03LjUgOGMtLjUwMyAwLS45NzYtLjI0LTEuMzc1LS42NzItLjM5OC0uNDMyLS41OTItMS4xMjYgMC0xLjUyOC4zODQtLjI1OSAxLjA4Mi0uMyAxLjM3NS0uMy4yOTQgMCAuOTkxLjA0MSAxLjM3NS4zLjU5My40MDIuMzk3IDEuMDk2IDAgMS41MjhDOC40NzcgNy43NiA4LjAwMiA4IDcuNSA4em0wIDFjLjgwOCAwIDIuNjU2Ljk5NCAyLjQ5IDIuMDc0LS4xNTMuOTkzLTIuMTE0LjkyNS0yLjQ5LjkyNS0uMzc0IDAtMi4zMzYuMDY4LTIuNDktLjkyNUM0Ljg0NSA5Ljk5NCA2LjY5MyA5IDcuNSA5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUaW1lbGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVmVnYSA9IGZ1bmN0aW9uIEV1aUljb25WaXNWZWdhKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi40MTQgOC4wMzZMNC44OSAxMC41MWEuNS41IDAgMDEtLjcwNy43MDhMMS4zNTQgOC4zODlhLjUuNSAwIDAxMC0uNzA3bDIuODI4LTIuODI4YS41LjUgMCAxMS43MDcuNzA3TDIuNDE0IDguMDM2em04Ljc2OCAyLjQ3NGwyLjQ3NS0yLjQ3NC0yLjQ3NS0yLjQ3NWEuNS41IDAgMDEuNzA3LS43MDdsMi44MjkgMi44MjhhLjUuNSAwIDAxMCAuNzA3bC0yLjgyOSAyLjgyOWEuNS41IDAgMTEtLjcwNy0uNzA4ek04LjU1OSAyLjUwNmEuNS41IDAgMDEuOTgxLjE5TDcuNDQxIDEzLjQ5NGEuNS41IDAgMDEtLjk4MS0uMTlMOC41NTkgMi41MDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1ZlZ2E7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc1Zpc3VhbEJ1aWxkZXIgPSBmdW5jdGlvbiBFdWlJY29uVmlzVmlzdWFsQnVpbGRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODM3IDdjLjExLjkzLjE2NSAxLjg4Ni4xNjUgMi44NjlWMTMuNWEuNS41IDAgMTEtMSAwVjkuODY5QTIzLjMgMjMuMyAwIDAwOC44MyA3SDcuMjljLS4xOTUgMS4wNC0uMjkyIDEuOTg1LS4yOTIgMi44MzVWMTMuNWEuNS41IDAgMTEtMSAwVjkuODM1YzAtLjg2NC4wOTItMS44MDkuMjc2LTIuODM1SDIuNWEuNS41IDAgMDEtLjQ5NS0uNTdjLjI4NS0yLjAyMyAxLjYyNi0zLjM1OCAzLjkzMS0zLjk2IDEuOTY3LS41MTQgNC4yMi0uNjA2IDYuNzU2LS4yNzhBMS41IDEuNSAwIDAxMTQgMy42NzlWNS41QTEuNSAxLjUgMCAwMTEyLjUgN0g5LjgzN3ptLS41NjktMUgxMi41YS41LjUgMCAwMC41LS41VjMuNjhhLjUuNSAwIDAwLS40MzYtLjQ5N2MtMi40MTYtLjMxMS00LjU0LS4yMjUtNi4zNzUuMjU0QzQuNDk0IDMuODggMy40OTEgNC43MjQgMy4xMTcgNkg5LjI2OHpNMiAxMHYzLjVhLjUuNSAwIDExLTEgMHYtNGEuNS41IDAgMDEuNS0uNWgzYS41LjUgMCAwMS41LjV2NGEuNS41IDAgMTEtMSAwVjEwSDJ6bTEwIDMuNWEuNS41IDAgMTEtMSAwdi0yYS41LjUgMCAwMS41LS41aDNhLjUuNSAwIDAxLjUuNXYyYS41LjUgMCAxMS0xIDBWMTJoLTJ2MS41ek0xLjAxNiAxNi4wMjZhLjUuNSAwIDAxMC0xSDE1YS41LjUgMCAxMTAgMUgxLjAxNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVmlzdWFsQnVpbGRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uV29yZFdyYXAgPSBmdW5jdGlvbiBFdWlJY29uV29yZFdyYXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDNoMTJ2MUgyVjN6bTAgOGg2djFIMnYtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgN2g5LjV2LjVWN2guMDM5bC4wODMuMDA1YTIuOTU4IDIuOTU4IDAgMDExLjEwMi4yOThjLjMwOS4xNTQuNjMzLjM5NC44OC43NjMuMjQ4LjM3My4zOTYuODQ3LjM5NiAxLjQzNCAwIC41ODgtLjE0OCAxLjA2MS0uMzk2IDEuNDM0YTIuMjU3IDIuMjU3IDAgMDEtLjg4Ljc2MyAyLjk1NyAyLjk1NyAwIDAxLTEuMTg1LjMwMmgtLjAyNWwtLjAwOS4wMDFoLS4wMDNzLS4wMDIgMC0uMDAyLS41di41SDExdjFsLTItMS41IDItMS41djFoLjUwNmwuMDQ0LS4wMDNhMS45NTkgMS45NTkgMCAwMC43MjYtLjE5NWMuMTkxLS4wOTUuMzY3LS4yMy40OTUtLjQyMy4xMjctLjE5LjIyOS0uNDY2LjIyOS0uODc5cy0uMTAyLS42ODktLjIyOS0uODc5YTEuMjU2IDEuMjU2IDAgMDAtLjQ5NS0uNDI0IDEuOTU4IDEuOTU4IDAgMDAtLjc3LS4xOTdIMlY3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Xb3JkV3JhcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uV29yZFdyYXBEaXNhYmxlZCA9IGZ1bmN0aW9uIEV1aUljb25Xb3JkV3JhcERpc2FibGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMy41TDEyIDJ2MUgydjFoMTB2MWwyLTEuNXpNMTIgOVY4SDJWN2gxMFY2bDIgMS41TDEyIDl6bTAgM3YxbDItMS41LTItMS41djFIMnYxaDEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Xb3JkV3JhcERpc2FibGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25XcmVuY2ggPSBmdW5jdGlvbiBFdWlJY29uV3JlbmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi45MTggOS43NDZsNC41MzcgNC41MzdhMiAyIDAgMTAyLjgyOC0yLjgyOWwtMy4xNTctMy4xNTZhLjUuNSAwIDAxLjcwOC0uNzA4bDMuMTU2IDMuMTU3YTMgMyAwIDExLTQuMjQzIDQuMjQzbC00Ljk0OS00Ljk1YTUuMDAxIDUuMDAxIDAgMDEtNS4yMi03LjEwNi41LjUgMCAwMS44MDUtLjEzOEwzLjY3NiA1LjA5YTEgMSAwIDEwMS40MTUtMS40MTRMMi43OTcgMS4zODJhLjUuNSAwIDAxLjEzOC0uODA1IDUuMDAxIDUuMDAxIDAgMTEzLjk4MyA5LjE2OXpNMS4yMjYgNC4wNTRhNC4wMDIgNC4wMDIgMCAwMDYuNjkzIDMuODY1IDQgNCAwIDAwLTMuODY1LTYuNjkzbDEuNzQ0IDEuNzQzYTIgMiAwIDExLTIuODI5IDIuODI4TDEuMjI2IDQuMDU0em0xMC4yMjkgOC44MTRhMSAxIDAgMTExLjQxNC0xLjQxNCAxIDEgMCAwMS0xLjQxNCAxLjQxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uV3JlbmNoOyIsICJpbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTAgZnJvbSAnLi9hc3NldHMvYWNjZXNzaWJpbGl0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEgZnJvbSAnLi9hc3NldHMvYWdncmVnYXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMiBmcm9tICcuL2Fzc2V0cy9hbGVydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZUV2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNCBmcm9tICcuL2Fzc2V0cy9hbmFseXplX2V2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNSBmcm9tICcuL2Fzc2V0cy9hbm5vdGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNiBmcm9tICcuL2Fzc2V0cy9hcG1fdHJhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3IGZyb20gJy4vYXNzZXRzL2FwcF9hZGRfZGF0YS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTggZnJvbSAnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOSBmcm9tICcuL2Fzc2V0cy9hcHBfYWdlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMCBmcm9tICcuL2Fzc2V0cy9hcHBfYXBtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTEgZnJvbSAnLi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMiBmcm9tICcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMgZnJvbSAnLi9hc3NldHMvYXBwX2NhbnZhcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0IGZyb20gJy4vYXNzZXRzL2FwcF9jYXNlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1IGZyb20gJy4vYXNzZXRzL2FwcF9jb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYgZnJvbSAnLi9hc3NldHMvYXBwX2NvbnNvbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNyBmcm9tICcuL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4IGZyb20gJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOSBmcm9tICcuL2Fzc2V0cy9hcHBfZGV2dG9vbHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMCBmcm9tICcuL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMSBmcm9tICcuL2Fzc2V0cy9hcHBfZW1zLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIgZnJvbSAnLi9hc3NldHMvYXBwX2ZpbGViZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMgZnJvbSAnLi9hc3NldHMvYXBwX2ZsZWV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQgZnJvbSAnLi9hc3NldHMvYXBwX2dpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1IGZyb20gJy4vYXNzZXRzL2FwcF9ncmFwaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2IGZyb20gJy4vYXNzZXRzL2FwcF9ncm9rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcgZnJvbSAnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4IGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkgZnJvbSAnLi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMCBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEgZnJvbSAnLi9hc3NldHMvYXBwX2xlbnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMiBmcm9tICcuL2Fzc2V0cy9hcHBfbG9ncy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzIGZyb20gJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQgZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY2JlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNSBmcm9tICcuL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2IGZyb20gJy4vYXNzZXRzL2FwcF9tbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3IGZyb20gJy4vYXNzZXRzL2FwcF9tb25pdG9yaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzggZnJvbSAnLi9hc3NldHMvYXBwX25vdGVib29rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkgZnJvbSAnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MCBmcm9tICcuL2Fzc2V0cy9hcHBfcGlwZWxpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MSBmcm9tICcuL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIgZnJvbSAnLi9hc3NldHMvYXBwX3JlcG9ydGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzIGZyb20gJy4vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQgZnJvbSAnLi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NyBmcm9tICcuL2Fzc2V0cy9hcHBfc3BhY2VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDggZnJvbSAnLi9hc3NldHMvYXBwX3NxbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5IGZyb20gJy4vYXNzZXRzL2FwcF90aW1lbGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwIGZyb20gJy4vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxIGZyb20gJy4vYXNzZXRzL2FwcF91cHRpbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MiBmcm9tICcuL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MyBmcm9tICcuL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQgZnJvbSAnLi9hc3NldHMvYXBwX3dhdGNoZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NSBmcm9tICcuL2Fzc2V0cy9hcHBfd29ya3BsYWNlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2IGZyb20gJy4vYXNzZXRzL2FwcHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NyBmcm9tICcuL2Fzc2V0cy9hcnJvd0VuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4IGZyb20gJy4vYXNzZXRzL2Fycm93U3RhcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OSBmcm9tICcuL2Fzc2V0cy9hcnJvd19kb3duLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAgZnJvbSAnLi9hc3NldHMvYXJyb3dfbGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxIGZyb20gJy4vYXNzZXRzL2Fycm93X3JpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIgZnJvbSAnLi9hc3NldHMvYXJyb3dfdXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MyBmcm9tICcuL2Fzc2V0cy9hc3Rlcmlzay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0IGZyb20gJy4vYXNzZXRzL2JlYWtlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1IGZyb20gJy4vYXNzZXRzL2JlbGwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NiBmcm9tICcuL2Fzc2V0cy9iZWxsU2xhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NyBmcm9tICcuL2Fzc2V0cy9ib2x0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjggZnJvbSAnLi9hc3NldHMvYm94ZXNfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5IGZyb20gJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAgZnJvbSAnLi9hc3NldHMvYnJhbmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzEgZnJvbSAnLi9hc3NldHMvYnJhbmNoVXNlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyIGZyb20gJy4vYXNzZXRzL2Jyb29tLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMgZnJvbSAnLi9hc3NldHMvYnJ1c2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NCBmcm9tICcuL2Fzc2V0cy9idWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NSBmcm9tICcuL2Fzc2V0cy9idWxsc2V5ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2IGZyb20gJy4vYXNzZXRzL2NhbGVuZGFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcgZnJvbSAnLi9hc3NldHMvY2hlY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OCBmcm9tICcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkgZnJvbSAnLi9hc3NldHMvY2hlZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MCBmcm9tICcuL2Fzc2V0cy9jbG9jay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxIGZyb20gJy4vYXNzZXRzL2Nsb3VkRHJpenpsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyIGZyb20gJy4vYXNzZXRzL2Nsb3VkU3Rvcm15LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMgZnJvbSAnLi9hc3NldHMvY2xvdWRTdW5ueS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0IGZyb20gJy4vYXNzZXRzL2NsdXN0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NSBmcm9tICcuL2Fzc2V0cy9jb2xvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2IGZyb20gJy4vYXNzZXRzL2NvbXB1dGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NyBmcm9tICcuL2Fzc2V0cy9jb25zb2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODggZnJvbSAnLi9hc3NldHMvY29udGFpbmVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MSBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MiBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5V2l0aGluLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTMgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0IGZyb20gJy4vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTUgZnJvbSAnLi9hc3NldHMvY29weS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2IGZyb20gJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTcgZnJvbSAnLi9hc3NldHMvY3Jvc3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OCBmcm9tICcuL2Fzc2V0cy9jcm9zc0luQUNpcmNsZUZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5IGZyb20gJy4vYXNzZXRzL2Nyb3NzaGFpcnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAgZnJvbSAnLi9hc3NldHMvY3VycmVuY3kuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEgZnJvbSAnLi9hc3NldHMvY3V0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAyIGZyb20gJy4vYXNzZXRzL2RhdGFiYXNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAzIGZyb20gJy4vYXNzZXRzL2Rlc2t0b3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDQgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDUgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRFZGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA2IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50YXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDcgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA4IGZyb20gJy4vYXNzZXRzL2RvdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwOSBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTAgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMSBmcm9tICcuL2Fzc2V0cy9kb3dubG9hZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTQgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE1IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE3IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExOCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjAgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIxIGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjIgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIzIGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjQgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjcgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2JvbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjggZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMzIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM0IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzUgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3JlZG8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzYgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3N0cmlrZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzNyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzggZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDEgZnJvbSAnLi9hc3NldHMvZW1haWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDIgZnJvbSAnLi9hc3NldHMvZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDMgZnJvbSAnLi9hc3NldHMvZXFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ0IGZyb20gJy4vYXNzZXRzL2VyYXNlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NSBmcm9tICcuL2Fzc2V0cy9leGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ2IGZyb20gJy4vYXNzZXRzL2V4cGFuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NyBmcm9tICcuL2Fzc2V0cy9leHBhbmRNaW5pLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ4IGZyb20gJy4vYXNzZXRzL2V4cG9ydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0OSBmcm9tICcuL2Fzc2V0cy9leWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTAgZnJvbSAnLi9hc3NldHMvZXllX2Nsb3NlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MSBmcm9tICcuL2Fzc2V0cy9mYWNlX2hhcHB5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUyIGZyb20gJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MyBmcm9tICcuL2Fzc2V0cy9mYWNlX3NhZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NCBmcm9tICcuL2Fzc2V0cy9maWx0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTUgZnJvbSAnLi9hc3NldHMvZmxhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NiBmcm9tICcuL2Fzc2V0cy9mb2xkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU3IGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jaGVjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1OCBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU5IGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MCBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfb3Blbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MSBmcm9tICcuL2Fzc2V0cy9mcmFtZU5leHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjIgZnJvbSAnLi9hc3NldHMvZnJhbWVQcmV2aW91cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MyBmcm9tICcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NCBmcm9tICcuL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NSBmcm9tICcuL2Fzc2V0cy9mdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NiBmcm9tICcuL2Fzc2V0cy9nZWFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY3IGZyb20gJy4vYXNzZXRzL2dsYXNzZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjggZnJvbSAnLi9hc3NldHMvZ2xvYmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjkgZnJvbSAnLi9hc3NldHMvZ3JhYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MCBmcm9tICcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzEgZnJvbSAnLi9hc3NldHMvZ3JpZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MiBmcm9tICcuL2Fzc2V0cy9oZWFydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MyBmcm9tICcuL2Fzc2V0cy9oZWF0bWFwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc0IGZyb20gJy4vYXNzZXRzL2hlbHAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzUgZnJvbSAnLi9hc3NldHMvaG9tZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3NiBmcm9tICcuL2Fzc2V0cy9pSW5DaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzcgZnJvbSAnLi9hc3NldHMvaW1hZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzggZnJvbSAnLi9hc3NldHMvaW1wb3J0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc5IGZyb20gJy4vYXNzZXRzL2luZGV4X2Nsb3NlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTgwIGZyb20gJy4vYXNzZXRzL2luZGV4X2VkaXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODEgZnJvbSAnLi9hc3NldHMvaW5kZXhfZmx1c2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODIgZnJvbSAnLi9hc3NldHMvaW5kZXhfbWFwcGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MyBmcm9tICcuL2Fzc2V0cy9pbmRleF9vcGVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTg0IGZyb20gJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODUgZnJvbSAnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODYgZnJvbSAnLi9hc3NldHMvaW5wdXRPdXRwdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODcgZnJvbSAnLi9hc3NldHMvaW5zcGVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4OCBmcm9tICcuL2Fzc2V0cy9pbnZlcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODkgZnJvbSAnLi9hc3NldHMvaXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTAgZnJvbSAnLi9hc3NldHMva2V5Ym9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTEgZnJvbSAnLi9hc3NldHMva3FsX2ZpZWxkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTkyIGZyb20gJy4vYXNzZXRzL2txbF9mdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5MyBmcm9tICcuL2Fzc2V0cy9rcWxfb3BlcmFuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5NCBmcm9tICcuL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTUgZnJvbSAnLi9hc3NldHMva3FsX3ZhbHVlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk2IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk3IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTggZnJvbSAnLi9hc3NldHMvbGF5ZXJzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk5IGZyb20gJy4vYXNzZXRzL2xldHRlcmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwMCBmcm9tICcuL2Fzc2V0cy9saW5lRGFzaGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAxIGZyb20gJy4vYXNzZXRzL2xpbmVEb3R0ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDIgZnJvbSAnLi9hc3NldHMvbGluZVNvbGlkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAzIGZyb20gJy4vYXNzZXRzL2xpbmsuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDQgZnJvbSAnLi9hc3NldHMvbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNSBmcm9tICcuL2Fzc2V0cy9saXN0X2FkZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNiBmcm9tICcuL2Fzc2V0cy9sb2NrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA3IGZyb20gJy4vYXNzZXRzL2xvY2tPcGVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA4IGZyb20gJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA5IGZyb20gJy4vYXNzZXRzL2xvZ29fYXBhY2hlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEwIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBwX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMSBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMiBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEzIGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTQgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE1IGZyb20gJy4vYXNzZXRzL2xvZ29fYmVhdHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTYgZnJvbSAnLi9hc3NldHMvbG9nb19idXNpbmVzc19hbmFseXRpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTcgZnJvbSAnLi9hc3NldHMvbG9nb19jZXBoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE4IGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTkgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZF9lY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjAgZnJvbSAnLi9hc3NldHMvbG9nb19jb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIxIGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjIgZnJvbSAnLi9hc3NldHMvbG9nb19jb3VjaGJhc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjMgZnJvbSAnLi9hc3NldHMvbG9nb19kb2NrZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjQgZnJvbSAnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI1IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpYy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyNiBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjcgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI4IGZyb20gJy4vYXNzZXRzL2xvZ29fZW50ZXJwcmlzZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjkgZnJvbSAnLi9hc3NldHMvbG9nb19ldGNkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMwIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMxIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzIgZnJvbSAnLi9hc3NldHMvbG9nb19naXRodWIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzMgZnJvbSAnLi9hc3NldHMvbG9nb19nbWFpbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNCBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvbGFuZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNSBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM2IGZyb20gJy4vYXNzZXRzL2xvZ29faGFwcm94eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNyBmcm9tICcuL2Fzc2V0cy9sb2dvX2libS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzOCBmcm9tICcuL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM5IGZyb20gJy4vYXNzZXRzL2xvZ29fa2Fma2EuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDAgZnJvbSAnLi9hc3NldHMvbG9nb19raWJhbmEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDEgZnJvbSAnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQyIGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ3N0YXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ0IGZyb20gJy4vYXNzZXRzL2xvZ29fbWFwcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NSBmcm9tICcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NiBmcm9tICcuL2Fzc2V0cy9sb2dvX21ldHJpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDcgZnJvbSAnLi9hc3NldHMvbG9nb19tb25nb2RiLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ4IGZyb20gJy4vYXNzZXRzL2xvZ29fbXlzcWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDkgZnJvbSAnLi9hc3NldHMvbG9nb19uZ2lueC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1MCBmcm9tICcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTEgZnJvbSAnLi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUyIGZyb20gJy4vYXNzZXRzL2xvZ29fcGhwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUzIGZyb20gJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTQgZnJvbSAnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU1IGZyb20gJy4vYXNzZXRzL2xvZ29fcmFiYml0bXEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTYgZnJvbSAnLi9hc3NldHMvbG9nb19yZWRpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1NyBmcm9tICcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU4IGZyb20gJy4vYXNzZXRzL2xvZ29fc2l0ZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTkgZnJvbSAnLi9hc3NldHMvbG9nb19za2V0Y2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjAgZnJvbSAnLi9hc3NldHMvbG9nb19zbGFjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MSBmcm9tICcuL2Fzc2V0cy9sb2dvX3VwdGltZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MiBmcm9tICcuL2Fzc2V0cy9sb2dvX3dlYmhvb2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjMgZnJvbSAnLi9hc3NldHMvbG9nb193aW5kb3dzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY0IGZyb20gJy4vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2NSBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjYgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaWYuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjcgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjggZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY5IGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcwIGZyb20gJy4vYXNzZXRzL21hZ25ldC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3MSBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcyIGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzMgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc0IGZyb20gJy4vYXNzZXRzL21hcF9tYXJrZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzUgZnJvbSAnLi9hc3NldHMvbWVtb3J5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc2IGZyb20gJy4vYXNzZXRzL21lbnUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzcgZnJvbSAnLi9hc3NldHMvbWVudURvd24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzggZnJvbSAnLi9hc3NldHMvbWVudUxlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzkgZnJvbSAnLi9hc3NldHMvbWVudVJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgwIGZyb20gJy4vYXNzZXRzL21lbnVVcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MSBmcm9tICcuL2Fzc2V0cy9tZXJnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MiBmcm9tICcuL2Fzc2V0cy9taW5pbWl6ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MyBmcm9tICcuL2Fzc2V0cy9taW51cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NCBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODUgZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NiBmcm9tICcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODcgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4OCBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4OSBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTAgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkxIGZyb20gJy4vYXNzZXRzL21sX2RhdGFfdmlzdWFsaXplci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5MiBmcm9tICcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTMgZnJvbSAnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTQgZnJvbSAnLi9hc3NldHMvbW9iaWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk1IGZyb20gJy4vYXNzZXRzL21vb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTYgZnJvbSAnLi9hc3NldHMvbmFtZXNwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk3IGZyb20gJy4vYXNzZXRzL25lc3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5OCBmcm9tICcuL2Fzc2V0cy9ub2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk5IGZyb20gJy4vYXNzZXRzL251bWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwMCBmcm9tICcuL2Fzc2V0cy9vZmZsaW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAxIGZyb20gJy4vYXNzZXRzL29ubGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwMiBmcm9tICcuL2Fzc2V0cy9wYWNrYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAzIGZyb20gJy4vYXNzZXRzL3BhZ2VTZWxlY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDQgZnJvbSAnLi9hc3NldHMvcGFnZXNTZWxlY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDUgZnJvbSAnLi9hc3NldHMvcGFpbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDYgZnJvbSAnLi9hc3NldHMvcGFwZXJfY2xpcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNyBmcm9tICcuL2Fzc2V0cy9wYXJ0aWFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA4IGZyb20gJy4vYXNzZXRzL3BhdXNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA5IGZyb20gJy4vYXNzZXRzL3BheW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTAgZnJvbSAnLi9hc3NldHMvcGVuY2lsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzExIGZyb20gJy4vYXNzZXRzL3BlcmNlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTIgZnJvbSAnLi9hc3NldHMvcGluLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEzIGZyb20gJy4vYXNzZXRzL3Bpbl9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTQgZnJvbSAnLi9hc3NldHMvcGxheS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxNSBmcm9tICcuL2Fzc2V0cy9wbGF5RmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE2IGZyb20gJy4vYXNzZXRzL3BsdXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTcgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTggZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE5IGZyb20gJy4vYXNzZXRzL3BvcG91dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMCBmcm9tICcuL2Fzc2V0cy9wdXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIxIGZyb20gJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMiBmcm9tICcuL2Fzc2V0cy9xdW90ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMyBmcm9tICcuL2Fzc2V0cy9yZWZyZXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI0IGZyb20gJy4vYXNzZXRzL3JlcG9ydGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI1IGZyb20gJy4vYXNzZXRzL3JldHVybl9rZXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjYgZnJvbSAnLi9hc3NldHMvc2F2ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyNyBmcm9tICcuL2Fzc2V0cy9zY2FsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyOCBmcm9tICcuL2Fzc2V0cy9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjkgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzAgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMSBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMyIGZyb20gJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzMgZnJvbSAnLi9hc3NldHMvc2hhcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzQgZnJvbSAnLi9hc3NldHMvc2hhcmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzUgZnJvbSAnLi9hc3NldHMvc25vd2ZsYWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM2IGZyb20gJy4vYXNzZXRzL3NvcnRMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM3IGZyb20gJy4vYXNzZXRzL3NvcnRSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzOCBmcm9tICcuL2Fzc2V0cy9zb3J0X2Rvd24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzkgZnJvbSAnLi9hc3NldHMvc29ydF91cC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0MCBmcm9tICcuL2Fzc2V0cy9zb3J0YWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0MSBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQyIGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQzIGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDQgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NSBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NiBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NyBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ4IGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ5IGZyb20gJy4vYXNzZXRzL3N0YXRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzUwIGZyb20gJy4vYXNzZXRzL3N0b3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTEgZnJvbSAnLi9hc3NldHMvc3RvcF9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTIgZnJvbSAnLi9hc3NldHMvc3RvcF9zbGFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1MyBmcm9tICcuL2Fzc2V0cy9zdG9yYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU0IGZyb20gJy4vYXNzZXRzL3N0cmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1NSBmcm9tICcuL2Fzc2V0cy9zdWJtb2R1bGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTYgZnJvbSAnLi9hc3NldHMvc3VuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU3IGZyb20gJy4vYXNzZXRzL3N3YXRjaF9pbnB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1OCBmcm9tICcuL2Fzc2V0cy9zeW1saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU5IGZyb20gJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MCBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjEgZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MiBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MyBmcm9tICcuL2Fzc2V0cy90YWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjQgZnJvbSAnLi9hc3NldHMvdGVhci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NSBmcm9tICcuL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NiBmcm9tICcuL2Fzc2V0cy90aW1lUmVmcmVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NyBmcm9tICcuL2Fzc2V0cy90aW1lbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2OCBmcm9tICcuL2Fzc2V0cy90aW1lc2xpZGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY5IGZyb20gJy4vYXNzZXRzL3Rva2VuQWxpYXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzAgZnJvbSAnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzcxIGZyb20gJy4vYXNzZXRzL3Rva2VuQXJyYXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzIgZnJvbSAnLi9hc3NldHMvdG9rZW5CaW5hcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzMgZnJvbSAnLi9hc3NldHMvdG9rZW5Cb29sZWFuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc0IGZyb20gJy4vYXNzZXRzL3Rva2VuQ2xhc3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzUgZnJvbSAnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc2IGZyb20gJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzcgZnJvbSAnLi9hc3NldHMvdG9rZW5EYXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc4IGZyb20gJy4vYXNzZXRzL3Rva2VuRGVuc2VWZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzkgZnJvbSAnLi9hc3NldHMvdG9rZW5FbGVtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzgwIGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MSBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW1NZW1iZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODIgZnJvbSAnLi9hc3NldHMvdG9rZW5FdmVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MyBmcm9tICcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NCBmcm9tICcuL2Fzc2V0cy90b2tlbkZpZWxkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg1IGZyb20gJy4vYXNzZXRzL3Rva2VuRmlsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NiBmcm9tICcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NyBmcm9tICcuL2Fzc2V0cy90b2tlbkZ1bmN0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg4IGZyb20gJy4vYXNzZXRzL3Rva2VuR2VvLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg5IGZyb20gJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkwIGZyb20gJy4vYXNzZXRzL3Rva2VuSVAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTEgZnJvbSAnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTIgZnJvbSAnLi9hc3NldHMvdG9rZW5Kb2luLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkzIGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk0IGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NSBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NiBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0NvdW50ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTcgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5OCBmcm9tICcuL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5OSBmcm9tICcuL2Fzc2V0cy90b2tlbk5hbWVzcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMCBmcm9tICcuL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMSBmcm9tICcuL2Fzc2V0cy90b2tlbk51bGwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDIgZnJvbSAnLi9hc3NldHMvdG9rZW5OdW1iZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDMgZnJvbSAnLi9hc3NldHMvdG9rZW5PYmplY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDQgZnJvbSAnLi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNSBmcm9tICcuL2Fzc2V0cy90b2tlblBhY2thZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDYgZnJvbSAnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDcgZnJvbSAnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA4IGZyb20gJy4vYXNzZXRzL3Rva2VuUHJvcGVydHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDkgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5nZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMCBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDExIGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDEyIGZyb20gJy4vYXNzZXRzL3Rva2VuUmVwby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMyBmcm9tICcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTQgZnJvbSAnLi9hc3NldHMvdG9rZW5TaGFwZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNSBmcm9tICcuL2Fzc2V0cy90b2tlblN0cmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNiBmcm9tICcuL2Fzc2V0cy90b2tlblN0cnVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNyBmcm9tICcuL2Fzc2V0cy90b2tlblN5bWJvbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxOCBmcm9tICcuL2Fzc2V0cy90b2tlblRhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxOSBmcm9tICcuL2Fzc2V0cy90b2tlblRleHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjAgZnJvbSAnLi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIxIGZyb20gJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjIgZnJvbSAnLi9hc3NldHMvdHJhaW5pbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjMgZnJvbSAnLi9hc3NldHMvdHJhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjQgZnJvbSAnLi9hc3NldHMvdW5mb2xkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI1IGZyb20gJy4vYXNzZXRzL3VubGluay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyNiBmcm9tICcuL2Fzc2V0cy91c2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI3IGZyb20gJy4vYXNzZXRzL3VzZXJBdmF0YXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjggZnJvbSAnLi9hc3NldHMvdXNlcnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjkgZnJvbSAnLi9hc3NldHMvdmVjdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMwIGZyb20gJy4vYXNzZXRzL3ZpZGVvUGxheWVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMxIGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMyIGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhX3N0YWNrZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzMgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM0IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM1IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzYgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM3IGZyb20gJy4vYXNzZXRzL3Zpc19nYXVnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzOCBmcm9tICcuL2Fzc2V0cy92aXNfZ29hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzOSBmcm9tICcuL2Fzc2V0cy92aXNfbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MCBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDEgZnJvbSAnLi9hc3NldHMvdmlzX21hcF9yZWdpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDIgZnJvbSAnLi9hc3NldHMvdmlzX21ldHJpYy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MyBmcm9tICcuL2Fzc2V0cy92aXNfcGllLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ0IGZyb20gJy4vYXNzZXRzL3Zpc190YWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NSBmcm9tICcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ2IGZyb20gJy4vYXNzZXRzL3Zpc190ZXh0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ3IGZyb20gJy4vYXNzZXRzL3Zpc190aW1lbGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0OCBmcm9tICcuL2Fzc2V0cy92aXNfdmVnYS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0OSBmcm9tICcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTAgZnJvbSAnLi9hc3NldHMvd29yZFdyYXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTEgZnJvbSAnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MiBmcm9tICcuL2Fzc2V0cy93cmVuY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTMgZnJvbSAnLi9hc3NldHMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NCBmcm9tICcuL2Fzc2V0cy9hZ2dyZWdhdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTUgZnJvbSAnLi9hc3NldHMvYWxlcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTYgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZUV2ZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU3IGZyb20gJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTggZnJvbSAnLi9hc3NldHMvYW5ub3RhdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OSBmcm9tICcuL2Fzc2V0cy9hcG1fdHJhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjAgZnJvbSAnLi9hc3NldHMvYXBwX2FkZF9kYXRhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYxIGZyb20gJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MiBmcm9tICcuL2Fzc2V0cy9hcHBfYWdlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjMgZnJvbSAnLi9hc3NldHMvYXBwX2FwbSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NCBmcm9tICcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NSBmcm9tICcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY2IGZyb20gJy4vYXNzZXRzL2FwcF9jYW52YXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjcgZnJvbSAnLi9hc3NldHMvYXBwX2Nhc2VzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY4IGZyb20gJy4vYXNzZXRzL2FwcF9jb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY5IGZyb20gJy4vYXNzZXRzL2FwcF9jb25zb2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDcwIGZyb20gJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDcxIGZyb20gJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzIgZnJvbSAnLi9hc3NldHMvYXBwX2RldnRvb2xzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDczIGZyb20gJy4vYXNzZXRzL2FwcF9kaXNjb3Zlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NCBmcm9tICcuL2Fzc2V0cy9hcHBfZW1zJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc1IGZyb20gJy4vYXNzZXRzL2FwcF9maWxlYmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NiBmcm9tICcuL2Fzc2V0cy9hcHBfZmxlZXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzcgZnJvbSAnLi9hc3NldHMvYXBwX2dpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OCBmcm9tICcuL2Fzc2V0cy9hcHBfZ3JhcGgnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzkgZnJvbSAnLi9hc3NldHMvYXBwX2dyb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODAgZnJvbSAnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MSBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MiBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MyBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg0IGZyb20gJy4vYXNzZXRzL2FwcF9sZW5zJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg1IGZyb20gJy4vYXNzZXRzL2FwcF9sb2dzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg2IGZyb20gJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg3IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg4IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg5IGZyb20gJy4vYXNzZXRzL2FwcF9tbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MCBmcm9tICcuL2Fzc2V0cy9hcHBfbW9uaXRvcmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MSBmcm9tICcuL2Fzc2V0cy9hcHBfbm90ZWJvb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTIgZnJvbSAnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTMgZnJvbSAnLi9hc3NldHMvYXBwX3BpcGVsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk0IGZyb20gJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTUgZnJvbSAnLi9hc3NldHMvYXBwX3JlcG9ydGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NiBmcm9tICcuL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NyBmcm9tICcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk4IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OSBmcm9tICcuL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAwIGZyb20gJy4vYXNzZXRzL2FwcF9zcGFjZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDEgZnJvbSAnLi9hc3NldHMvYXBwX3NxbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwMiBmcm9tICcuL2Fzc2V0cy9hcHBfdGltZWxpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDMgZnJvbSAnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA0IGZyb20gJy4vYXNzZXRzL2FwcF91cHRpbWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDUgZnJvbSAnLi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA2IGZyb20gJy4vYXNzZXRzL2FwcF92aXN1YWxpemUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDcgZnJvbSAnLi9hc3NldHMvYXBwX3dhdGNoZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDggZnJvbSAnLi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDkgZnJvbSAnLi9hc3NldHMvYXBwcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMCBmcm9tICcuL2Fzc2V0cy9hcnJvd0VuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMSBmcm9tICcuL2Fzc2V0cy9hcnJvd1N0YXJ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTEyIGZyb20gJy4vYXNzZXRzL2Fycm93X2Rvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTMgZnJvbSAnLi9hc3NldHMvYXJyb3dfbGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNCBmcm9tICcuL2Fzc2V0cy9hcnJvd19yaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNSBmcm9tICcuL2Fzc2V0cy9hcnJvd191cCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNiBmcm9tICcuL2Fzc2V0cy9hc3Rlcmlzayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNyBmcm9tICcuL2Fzc2V0cy9iZWFrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTggZnJvbSAnLi9hc3NldHMvYmVsbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxOSBmcm9tICcuL2Fzc2V0cy9iZWxsU2xhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjAgZnJvbSAnLi9hc3NldHMvYm9sdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyMSBmcm9tICcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIyIGZyb20gJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIzIGZyb20gJy4vYXNzZXRzL2JyYW5jaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyNCBmcm9tICcuL2Fzc2V0cy9icmFuY2hVc2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI1IGZyb20gJy4vYXNzZXRzL2Jyb29tJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI2IGZyb20gJy4vYXNzZXRzL2JydXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI3IGZyb20gJy4vYXNzZXRzL2J1Zyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyOCBmcm9tICcuL2Fzc2V0cy9idWxsc2V5ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyOSBmcm9tICcuL2Fzc2V0cy9jYWxlbmRhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzMCBmcm9tICcuL2Fzc2V0cy9jaGVjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzMSBmcm9tICcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMyIGZyb20gJy4vYXNzZXRzL2NoZWVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMzIGZyb20gJy4vYXNzZXRzL2Nsb2NrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM0IGZyb20gJy4vYXNzZXRzL2Nsb3VkRHJpenpsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzNSBmcm9tICcuL2Fzc2V0cy9jbG91ZFN0b3JteSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzNiBmcm9tICcuL2Fzc2V0cy9jbG91ZFN1bm55JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM3IGZyb20gJy4vYXNzZXRzL2NsdXN0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzggZnJvbSAnLi9hc3NldHMvY29sb3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzkgZnJvbSAnLi9hc3NldHMvY29tcHV0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MCBmcm9tICcuL2Fzc2V0cy9jb25zb2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQxIGZyb20gJy4vYXNzZXRzL2NvbnRhaW5lcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MiBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDMgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDQgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUJlbG93JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ1IGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDYgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0NyBmcm9tICcuL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0OCBmcm9tICcuL2Fzc2V0cy9jb3B5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ5IGZyb20gJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUwIGZyb20gJy4vYXNzZXRzL2Nyb3NzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUxIGZyb20gJy4vYXNzZXRzL2Nyb3NzSW5BQ2lyY2xlRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUyIGZyb20gJy4vYXNzZXRzL2Nyb3NzaGFpcnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTMgZnJvbSAnLi9hc3NldHMvY3VycmVuY3knO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTQgZnJvbSAnLi9hc3NldHMvY3V0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU1IGZyb20gJy4vYXNzZXRzL2RhdGFiYXNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU2IGZyb20gJy4vYXNzZXRzL2Rlc2t0b3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTcgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTggZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRFZGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU5IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50YXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjAgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYxIGZyb20gJy4vYXNzZXRzL2RvdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MiBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjMgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NCBmcm9tICcuL2Fzc2V0cy9kb3dubG9hZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjcgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY4IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTcwIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzMgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc0IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzUgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc2IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzcgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3OCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODAgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2JvbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4NCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg2IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg3IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODggZnJvbSAnLi9hc3NldHMvZWRpdG9yX3JlZG8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODkgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3N0cmlrZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdGFibGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTQgZnJvbSAnLi9hc3NldHMvZW1haWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTUgZnJvbSAnLi9hc3NldHMvZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTYgZnJvbSAnLi9hc3NldHMvZXFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk3IGZyb20gJy4vYXNzZXRzL2VyYXNlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5OCBmcm9tICcuL2Fzc2V0cy9leGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk5IGZyb20gJy4vYXNzZXRzL2V4cGFuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMCBmcm9tICcuL2Fzc2V0cy9leHBhbmRNaW5pJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAxIGZyb20gJy4vYXNzZXRzL2V4cG9ydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMiBmcm9tICcuL2Fzc2V0cy9leWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDMgZnJvbSAnLi9hc3NldHMvZXllX2Nsb3NlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNCBmcm9tICcuL2Fzc2V0cy9mYWNlX2hhcHB5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA1IGZyb20gJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNiBmcm9tICcuL2Fzc2V0cy9mYWNlX3NhZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNyBmcm9tICcuL2Fzc2V0cy9maWx0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDggZnJvbSAnLi9hc3NldHMvZmxhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwOSBmcm9tICcuL2Fzc2V0cy9mb2xkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEwIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jaGVjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMSBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEyIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMyBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfb3Blbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNCBmcm9tICcuL2Fzc2V0cy9mcmFtZU5leHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTUgZnJvbSAnLi9hc3NldHMvZnJhbWVQcmV2aW91cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNiBmcm9tICcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNyBmcm9tICcuL2Fzc2V0cy9mdWxsX3NjcmVlbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxOCBmcm9tICcuL2Fzc2V0cy9mdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxOSBmcm9tICcuL2Fzc2V0cy9nZWFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIwIGZyb20gJy4vYXNzZXRzL2dsYXNzZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjEgZnJvbSAnLi9hc3NldHMvZ2xvYmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjIgZnJvbSAnLi9hc3NldHMvZ3JhYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMyBmcm9tICcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjQgZnJvbSAnLi9hc3NldHMvZ3JpZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNSBmcm9tICcuL2Fzc2V0cy9oZWFydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNiBmcm9tICcuL2Fzc2V0cy9oZWF0bWFwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI3IGZyb20gJy4vYXNzZXRzL2hlbHAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjggZnJvbSAnLi9hc3NldHMvaG9tZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyOSBmcm9tICcuL2Fzc2V0cy9pSW5DaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzAgZnJvbSAnLi9hc3NldHMvaW1hZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzEgZnJvbSAnLi9hc3NldHMvaW1wb3J0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMyIGZyb20gJy4vYXNzZXRzL2luZGV4X2Nsb3NlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMzIGZyb20gJy4vYXNzZXRzL2luZGV4X2VkaXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzQgZnJvbSAnLi9hc3NldHMvaW5kZXhfZmx1c2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzUgZnJvbSAnLi9hc3NldHMvaW5kZXhfbWFwcGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNiBmcm9tICcuL2Fzc2V0cy9pbmRleF9vcGVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjM3IGZyb20gJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzggZnJvbSAnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzkgZnJvbSAnLi9hc3NldHMvaW5wdXRPdXRwdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDAgZnJvbSAnLi9hc3NldHMvaW5zcGVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MSBmcm9tICcuL2Fzc2V0cy9pbnZlcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDIgZnJvbSAnLi9hc3NldHMvaXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDMgZnJvbSAnLi9hc3NldHMva2V5Ym9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDQgZnJvbSAnLi9hc3NldHMva3FsX2ZpZWxkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ1IGZyb20gJy4vYXNzZXRzL2txbF9mdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NiBmcm9tICcuL2Fzc2V0cy9rcWxfb3BlcmFuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NyBmcm9tICcuL2Fzc2V0cy9rcWxfc2VsZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDggZnJvbSAnLi9hc3NldHMva3FsX3ZhbHVlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ5IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUwIGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTEgZnJvbSAnLi9hc3NldHMvbGF5ZXJzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUyIGZyb20gJy4vYXNzZXRzL2xldHRlcmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1MyBmcm9tICcuL2Fzc2V0cy9saW5lRGFzaGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU0IGZyb20gJy4vYXNzZXRzL2xpbmVEb3R0ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTUgZnJvbSAnLi9hc3NldHMvbGluZVNvbGlkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU2IGZyb20gJy4vYXNzZXRzL2xpbmsnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTcgZnJvbSAnLi9hc3NldHMvbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1OCBmcm9tICcuL2Fzc2V0cy9saXN0X2FkZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1OSBmcm9tICcuL2Fzc2V0cy9sb2NrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYwIGZyb20gJy4vYXNzZXRzL2xvY2tPcGVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYxIGZyb20gJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYyIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBhY2hlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYzIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBwX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3c19tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY2IGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjcgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZV9tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY4IGZyb20gJy4vYXNzZXRzL2xvZ29fYmVhdHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjkgZnJvbSAnLi9hc3NldHMvbG9nb19idXNpbmVzc19hbmFseXRpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzAgZnJvbSAnLi9hc3NldHMvbG9nb19jZXBoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjcxIGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzIgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZF9lY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzMgZnJvbSAnLi9hc3NldHMvbG9nb19jb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc0IGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzUgZnJvbSAnLi9hc3NldHMvbG9nb19jb3VjaGJhc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzYgZnJvbSAnLi9hc3NldHMvbG9nb19kb2NrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzcgZnJvbSAnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc4IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpYyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODAgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgxIGZyb20gJy4vYXNzZXRzL2xvZ29fZW50ZXJwcmlzZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODIgZnJvbSAnLi9hc3NldHMvbG9nb19ldGNkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgzIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg0IGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODUgZnJvbSAnLi9hc3NldHMvbG9nb19naXRodWInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODYgZnJvbSAnLi9hc3NldHMvbG9nb19nbWFpbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvbGFuZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg5IGZyb20gJy4vYXNzZXRzL2xvZ29faGFwcm94eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2libSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2libV9tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkyIGZyb20gJy4vYXNzZXRzL2xvZ29fa2Fma2EnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTMgZnJvbSAnLi9hc3NldHMvbG9nb19raWJhbmEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTQgZnJvbSAnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk1IGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nZ2luZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ3N0YXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk3IGZyb20gJy4vYXNzZXRzL2xvZ29fbWFwcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5OCBmcm9tICcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5OSBmcm9tICcuL2Fzc2V0cy9sb2dvX21ldHJpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDAgZnJvbSAnLi9hc3NldHMvbG9nb19tb25nb2RiJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAxIGZyb20gJy4vYXNzZXRzL2xvZ29fbXlzcWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDIgZnJvbSAnLi9hc3NldHMvbG9nb19uZ2lueCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwMyBmcm9tICcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDQgZnJvbSAnLi9hc3NldHMvbG9nb19vc3F1ZXJ5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA1IGZyb20gJy4vYXNzZXRzL2xvZ29fcGhwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA2IGZyb20gJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDcgZnJvbSAnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA4IGZyb20gJy4vYXNzZXRzL2xvZ29fcmFiYml0bXEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDkgZnJvbSAnLi9hc3NldHMvbG9nb19yZWRpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMCBmcm9tICcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzExIGZyb20gJy4vYXNzZXRzL2xvZ29fc2l0ZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTIgZnJvbSAnLi9hc3NldHMvbG9nb19za2V0Y2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTMgZnJvbSAnLi9hc3NldHMvbG9nb19zbGFjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNCBmcm9tICcuL2Fzc2V0cy9sb2dvX3VwdGltZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNSBmcm9tICcuL2Fzc2V0cy9sb2dvX3dlYmhvb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTYgZnJvbSAnLi9hc3NldHMvbG9nb193aW5kb3dzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE3IGZyb20gJy4vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxOCBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTkgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaWYnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjAgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjEgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIyIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIzIGZyb20gJy4vYXNzZXRzL21hZ25ldCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyNCBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI1IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjYgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI3IGZyb20gJy4vYXNzZXRzL21hcF9tYXJrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjggZnJvbSAnLi9hc3NldHMvbWVtb3J5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI5IGZyb20gJy4vYXNzZXRzL21lbnUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzAgZnJvbSAnLi9hc3NldHMvbWVudURvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzEgZnJvbSAnLi9hc3NldHMvbWVudUxlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzIgZnJvbSAnLi9hc3NldHMvbWVudVJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMzIGZyb20gJy4vYXNzZXRzL21lbnVVcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNCBmcm9tICcuL2Fzc2V0cy9tZXJnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNSBmcm9tICcuL2Fzc2V0cy9taW5pbWl6ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNiBmcm9tICcuL2Fzc2V0cy9taW51cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNyBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzggZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczOSBmcm9tICcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDAgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MSBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MiBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDMgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ0IGZyb20gJy4vYXNzZXRzL21sX2RhdGFfdmlzdWFsaXplcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0NSBmcm9tICcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDYgZnJvbSAnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDcgZnJvbSAnLi9hc3NldHMvbW9iaWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ4IGZyb20gJy4vYXNzZXRzL21vb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDkgZnJvbSAnLi9hc3NldHMvbmFtZXNwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUwIGZyb20gJy4vYXNzZXRzL25lc3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MSBmcm9tICcuL2Fzc2V0cy9ub2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUyIGZyb20gJy4vYXNzZXRzL251bWJlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MyBmcm9tICcuL2Fzc2V0cy9vZmZsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU0IGZyb20gJy4vYXNzZXRzL29ubGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1NSBmcm9tICcuL2Fzc2V0cy9wYWNrYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU2IGZyb20gJy4vYXNzZXRzL3BhZ2VTZWxlY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTcgZnJvbSAnLi9hc3NldHMvcGFnZXNTZWxlY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTggZnJvbSAnLi9hc3NldHMvcGFpbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTkgZnJvbSAnLi9hc3NldHMvcGFwZXJfY2xpcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2MCBmcm9tICcuL2Fzc2V0cy9wYXJ0aWFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYxIGZyb20gJy4vYXNzZXRzL3BhdXNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYyIGZyb20gJy4vYXNzZXRzL3BheW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjMgZnJvbSAnLi9hc3NldHMvcGVuY2lsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY0IGZyb20gJy4vYXNzZXRzL3BlcmNlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjUgZnJvbSAnLi9hc3NldHMvcGluJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY2IGZyb20gJy4vYXNzZXRzL3Bpbl9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjcgZnJvbSAnLi9hc3NldHMvcGxheSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2OCBmcm9tICcuL2Fzc2V0cy9wbGF5RmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY5IGZyb20gJy4vYXNzZXRzL3BsdXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzAgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzEgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcyIGZyb20gJy4vYXNzZXRzL3BvcG91dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MyBmcm9tICcuL2Fzc2V0cy9wdXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc0IGZyb20gJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3NSBmcm9tICcuL2Fzc2V0cy9xdW90ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3NiBmcm9tICcuL2Fzc2V0cy9yZWZyZXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc3IGZyb20gJy4vYXNzZXRzL3JlcG9ydGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc4IGZyb20gJy4vYXNzZXRzL3JldHVybl9rZXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzkgZnJvbSAnLi9hc3NldHMvc2F2ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MCBmcm9tICcuL2Fzc2V0cy9zY2FsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MSBmcm9tICcuL2Fzc2V0cy9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODIgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODMgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NCBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg1IGZyb20gJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODYgZnJvbSAnLi9hc3NldHMvc2hhcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODcgZnJvbSAnLi9hc3NldHMvc2hhcmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODggZnJvbSAnLi9hc3NldHMvc25vd2ZsYWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg5IGZyb20gJy4vYXNzZXRzL3NvcnRMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkwIGZyb20gJy4vYXNzZXRzL3NvcnRSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MSBmcm9tICcuL2Fzc2V0cy9zb3J0X2Rvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTIgZnJvbSAnLi9hc3NldHMvc29ydF91cCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MyBmcm9tICcuL2Fzc2V0cy9zb3J0YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5NCBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk1IGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk2IGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTcgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5OCBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5OSBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwMCBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAxIGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAyIGZyb20gJy4vYXNzZXRzL3N0YXRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAzIGZyb20gJy4vYXNzZXRzL3N0b3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDQgZnJvbSAnLi9hc3NldHMvc3RvcF9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDUgZnJvbSAnLi9hc3NldHMvc3RvcF9zbGFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwNiBmcm9tICcuL2Fzc2V0cy9zdG9yYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA3IGZyb20gJy4vYXNzZXRzL3N0cmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwOCBmcm9tICcuL2Fzc2V0cy9zdWJtb2R1bGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDkgZnJvbSAnLi9hc3NldHMvc3VuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEwIGZyb20gJy4vYXNzZXRzL3N3YXRjaF9pbnB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxMSBmcm9tICcuL2Fzc2V0cy9zeW1saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEyIGZyb20gJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxMyBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTQgZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNSBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNiBmcm9tICcuL2Fzc2V0cy90YWcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTcgZnJvbSAnLi9hc3NldHMvdGVhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxOCBmcm9tICcuL2Fzc2V0cy90ZW1wZXJhdHVyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxOSBmcm9tICcuL2Fzc2V0cy90aW1lUmVmcmVzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMCBmcm9tICcuL2Fzc2V0cy90aW1lbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMSBmcm9tICcuL2Fzc2V0cy90aW1lc2xpZGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIyIGZyb20gJy4vYXNzZXRzL3Rva2VuQWxpYXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjMgZnJvbSAnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI0IGZyb20gJy4vYXNzZXRzL3Rva2VuQXJyYXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjUgZnJvbSAnLi9hc3NldHMvdG9rZW5CaW5hcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjYgZnJvbSAnLi9hc3NldHMvdG9rZW5Cb29sZWFuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI3IGZyb20gJy4vYXNzZXRzL3Rva2VuQ2xhc3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjggZnJvbSAnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI5IGZyb20gJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzAgZnJvbSAnLi9hc3NldHMvdG9rZW5EYXRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMxIGZyb20gJy4vYXNzZXRzL3Rva2VuRGVuc2VWZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzIgZnJvbSAnLi9hc3NldHMvdG9rZW5FbGVtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMzIGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNCBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW1NZW1iZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzUgZnJvbSAnLi9hc3NldHMvdG9rZW5FdmVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNiBmcm9tICcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNyBmcm9tICcuL2Fzc2V0cy90b2tlbkZpZWxkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM4IGZyb20gJy4vYXNzZXRzL3Rva2VuRmlsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzOSBmcm9tICcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0MCBmcm9tICcuL2Fzc2V0cy90b2tlbkZ1bmN0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQxIGZyb20gJy4vYXNzZXRzL3Rva2VuR2VvJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQyIGZyb20gJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQzIGZyb20gJy4vYXNzZXRzL3Rva2VuSVAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDQgZnJvbSAnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDUgZnJvbSAnLi9hc3NldHMvdG9rZW5Kb2luJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ2IGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ3IGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5d29yZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0OCBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldGhvZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0OSBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0NvdW50ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTAgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MSBmcm9tICcuL2Fzc2V0cy90b2tlbk1vZHVsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MiBmcm9tICcuL2Fzc2V0cy90b2tlbk5hbWVzcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MyBmcm9tICcuL2Fzc2V0cy90b2tlbk5lc3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NCBmcm9tICcuL2Fzc2V0cy90b2tlbk51bGwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTUgZnJvbSAnLi9hc3NldHMvdG9rZW5OdW1iZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTYgZnJvbSAnLi9hc3NldHMvdG9rZW5PYmplY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTcgZnJvbSAnLi9hc3NldHMvdG9rZW5PcGVyYXRvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1OCBmcm9tICcuL2Fzc2V0cy90b2tlblBhY2thZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTkgZnJvbSAnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjAgZnJvbSAnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYxIGZyb20gJy4vYXNzZXRzL3Rva2VuUHJvcGVydHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjIgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5nZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2MyBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY0IGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY1IGZyb20gJy4vYXNzZXRzL3Rva2VuUmVwbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2NiBmcm9tICcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjcgZnJvbSAnLi9hc3NldHMvdG9rZW5TaGFwZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2OCBmcm9tICcuL2Fzc2V0cy90b2tlblN0cmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2OSBmcm9tICcuL2Fzc2V0cy90b2tlblN0cnVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MCBmcm9tICcuL2Fzc2V0cy90b2tlblN5bWJvbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MSBmcm9tICcuL2Fzc2V0cy90b2tlblRhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MiBmcm9tICcuL2Fzc2V0cy90b2tlblRleHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzMgZnJvbSAnLi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc0IGZyb20gJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzUgZnJvbSAnLi9hc3NldHMvdHJhaW5pbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzYgZnJvbSAnLi9hc3NldHMvdHJhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzcgZnJvbSAnLi9hc3NldHMvdW5mb2xkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc4IGZyb20gJy4vYXNzZXRzL3VubGluayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3OSBmcm9tICcuL2Fzc2V0cy91c2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODgwIGZyb20gJy4vYXNzZXRzL3VzZXJBdmF0YXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODEgZnJvbSAnLi9hc3NldHMvdXNlcnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODIgZnJvbSAnLi9hc3NldHMvdmVjdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODgzIGZyb20gJy4vYXNzZXRzL3ZpZGVvUGxheWVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg0IGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg1IGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhX3N0YWNrZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODYgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg3IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg4IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODkgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkwIGZyb20gJy4vYXNzZXRzL3Zpc19nYXVnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MSBmcm9tICcuL2Fzc2V0cy92aXNfZ29hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MiBmcm9tICcuL2Fzc2V0cy92aXNfbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MyBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTQgZnJvbSAnLi9hc3NldHMvdmlzX21hcF9yZWdpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTUgZnJvbSAnLi9hc3NldHMvdmlzX21ldHJpYyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NiBmcm9tICcuL2Fzc2V0cy92aXNfcGllJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk3IGZyb20gJy4vYXNzZXRzL3Zpc190YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5OCBmcm9tICcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk5IGZyb20gJy4vYXNzZXRzL3Zpc190ZXh0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAwIGZyb20gJy4vYXNzZXRzL3Zpc190aW1lbGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMSBmcm9tICcuL2Fzc2V0cy92aXNfdmVnYSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMiBmcm9tICcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDMgZnJvbSAnLi9hc3NldHMvd29yZFdyYXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDQgZnJvbSAnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwNSBmcm9tICcuL2Fzc2V0cy93cmVuY2gnO1xuY29uc3QgX0R5bmFtaWNJbXBvcnRNb2R1bGVNYXAgPSB7Jy4vYXNzZXRzL2FjY2Vzc2liaWxpdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMCwnLi9hc3NldHMvYWdncmVnYXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEsJy4vYXNzZXRzL2FsZXJ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIsJy4vYXNzZXRzL2FuYWx5emVFdmVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzLCcuL2Fzc2V0cy9hbmFseXplX2V2ZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQsJy4vYXNzZXRzL2Fubm90YXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNSwnLi9hc3NldHMvYXBtX3RyYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYsJy4vYXNzZXRzL2FwcF9hZGRfZGF0YS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3LCcuL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOCwnLi9hc3NldHMvYXBwX2FnZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTksJy4vYXNzZXRzL2FwcF9hcG0uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAsJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExLCcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyLCcuL2Fzc2V0cy9hcHBfY2FudmFzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzLCcuL2Fzc2V0cy9hcHBfY2FzZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQsJy4vYXNzZXRzL2FwcF9jb2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1LCcuL2Fzc2V0cy9hcHBfY29uc29sZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNiwnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcsJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgsJy4vYXNzZXRzL2FwcF9kZXZ0b29scy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOSwnLi9hc3NldHMvYXBwX2Rpc2NvdmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwLCcuL2Fzc2V0cy9hcHBfZW1zLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxLCcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIsJy4vYXNzZXRzL2FwcF9mbGVldC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMywnLi9hc3NldHMvYXBwX2dpcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNCwnLi9hc3NldHMvYXBwX2dyYXBoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1LCcuL2Fzc2V0cy9hcHBfZ3Jvay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNiwnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNywnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgsJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5LCcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwLCcuL2Fzc2V0cy9hcHBfbGVucy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMSwnLi9hc3NldHMvYXBwX2xvZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIsJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzLCcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNCwnLi9hc3NldHMvYXBwX21ldHJpY3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUsJy4vYXNzZXRzL2FwcF9tbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNiwnLi9hc3NldHMvYXBwX21vbml0b3JpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcsJy4vYXNzZXRzL2FwcF9ub3RlYm9vay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOCwnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzksJy4vYXNzZXRzL2FwcF9waXBlbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MCwnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MSwnLi9hc3NldHMvYXBwX3JlcG9ydGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MiwnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMsJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQsJy4vYXNzZXRzL2FwcF9zZWN1cml0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NSwnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NiwnLi9hc3NldHMvYXBwX3NwYWNlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NywnLi9hc3NldHMvYXBwX3NxbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OCwnLi9hc3NldHMvYXBwX3RpbWVsaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5LCcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAsJy4vYXNzZXRzL2FwcF91cHRpbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEsJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MiwnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MywnLi9hc3NldHMvYXBwX3dhdGNoZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQsJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1LCcuL2Fzc2V0cy9hcHBzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2LCcuL2Fzc2V0cy9hcnJvd0VuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NywnLi9hc3NldHMvYXJyb3dTdGFydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OCwnLi9hc3NldHMvYXJyb3dfZG93bi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OSwnLi9hc3NldHMvYXJyb3dfbGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MCwnLi9hc3NldHMvYXJyb3dfcmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEsJy4vYXNzZXRzL2Fycm93X3VwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyLCcuL2Fzc2V0cy9hc3Rlcmlzay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MywnLi9hc3NldHMvYmVha2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0LCcuL2Fzc2V0cy9iZWxsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1LCcuL2Fzc2V0cy9iZWxsU2xhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYsJy4vYXNzZXRzL2JvbHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjcsJy4vYXNzZXRzL2JveGVzX2hvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgsJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5LCcuL2Fzc2V0cy9icmFuY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAsJy4vYXNzZXRzL2JyYW5jaFVzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzEsJy4vYXNzZXRzL2Jyb29tLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyLCcuL2Fzc2V0cy9icnVzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MywnLi9hc3NldHMvYnVnLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0LCcuL2Fzc2V0cy9idWxsc2V5ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NSwnLi9hc3NldHMvY2FsZW5kYXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzYsJy4vYXNzZXRzL2NoZWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3LCcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4LCcuL2Fzc2V0cy9jaGVlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OSwnLi9hc3NldHMvY2xvY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAsJy4vYXNzZXRzL2Nsb3VkRHJpenpsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MSwnLi9hc3NldHMvY2xvdWRTdG9ybXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODIsJy4vYXNzZXRzL2Nsb3VkU3VubnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODMsJy4vYXNzZXRzL2NsdXN0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQsJy4vYXNzZXRzL2NvbG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1LCcuL2Fzc2V0cy9jb21wdXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2LCcuL2Fzc2V0cy9jb25zb2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3LCcuL2Fzc2V0cy9jb250YWluZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgsJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OSwnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAsJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MSwnLi9hc3NldHMvY29udGludWl0eVdpdGhpbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MiwnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MywnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQsJy4vYXNzZXRzL2NvcHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTUsJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2LCcuL2Fzc2V0cy9jcm9zcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NywnLi9hc3NldHMvY3Jvc3NJbkFDaXJjbGVGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTgsJy4vYXNzZXRzL2Nyb3NzaGFpcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTksJy4vYXNzZXRzL2N1cnJlbmN5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMCwnLi9hc3NldHMvY3V0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMSwnLi9hc3NldHMvZGF0YWJhc2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAyLCcuL2Fzc2V0cy9kZXNrdG9wLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMywnLi9hc3NldHMvZG9jdW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA0LCcuL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA1LCcuL2Fzc2V0cy9kb2N1bWVudGF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwNiwnLi9hc3NldHMvZG9jdW1lbnRzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwNywnLi9hc3NldHMvZG90LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwOCwnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwOSwnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTAsJy4vYXNzZXRzL2Rvd25sb2FkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExMSwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEyLCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEzLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE0LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE1LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNiwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNywnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE4LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE5LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIwLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMSwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMiwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjMsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI0LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjUsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjYsJy4vYXNzZXRzL2VkaXRvcl9ib2xkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyNywnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjgsJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyOSwnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMwLCcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzEsJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMyLCcuL2Fzc2V0cy9lZGl0b3JfbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzMsJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM0LCcuL2Fzc2V0cy9lZGl0b3JfcmVkby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzUsJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM2LCcuL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM3LCcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzOCwnLi9hc3NldHMvZWRpdG9yX3VuZG8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM5LCcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQwLCcuL2Fzc2V0cy9lbWFpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDEsJy4vYXNzZXRzL2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MiwnLi9hc3NldHMvZXFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MywnLi9hc3NldHMvZXJhc2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0NCwnLi9hc3NldHMvZXhpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDUsJy4vYXNzZXRzL2V4cGFuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDYsJy4vYXNzZXRzL2V4cGFuZE1pbmkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ3LCcuL2Fzc2V0cy9leHBvcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ4LCcuL2Fzc2V0cy9leWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ5LCcuL2Fzc2V0cy9leWVfY2xvc2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MCwnLi9hc3NldHMvZmFjZV9oYXBweS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTEsJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTIsJy4vYXNzZXRzL2ZhY2Vfc2FkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MywnLi9hc3NldHMvZmlsdGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1NCwnLi9hc3NldHMvZmxhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTUsJy4vYXNzZXRzL2ZvbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU2LCcuL2Fzc2V0cy9mb2xkZXJfY2hlY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU3LCcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1OCwnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1OSwnLi9hc3NldHMvZm9sZGVyX29wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYwLCcuL2Fzc2V0cy9mcmFtZU5leHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYxLCcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2MiwnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYzLCcuL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjQsJy4vYXNzZXRzL2Z1bmN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NSwnLi9hc3NldHMvZ2Vhci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjYsJy4vYXNzZXRzL2dsYXNzZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY3LCcuL2Fzc2V0cy9nbG9iZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjgsJy4vYXNzZXRzL2dyYWIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY5LCcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcwLCcuL2Fzc2V0cy9ncmlkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3MSwnLi9hc3NldHMvaGVhcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcyLCcuL2Fzc2V0cy9oZWF0bWFwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3MywnLi9hc3NldHMvaGVscC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzQsJy4vYXNzZXRzL2hvbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc1LCcuL2Fzc2V0cy9pSW5DaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc2LCcuL2Fzc2V0cy9pbWFnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzcsJy4vYXNzZXRzL2ltcG9ydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzgsJy4vYXNzZXRzL2luZGV4X2Nsb3NlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3OSwnLi9hc3NldHMvaW5kZXhfZWRpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODAsJy4vYXNzZXRzL2luZGV4X2ZsdXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MSwnLi9hc3NldHMvaW5kZXhfbWFwcGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODIsJy4vYXNzZXRzL2luZGV4X29wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgzLCcuL2Fzc2V0cy9pbmRleF9ydW50aW1lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4NCwnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg1LCcuL2Fzc2V0cy9pbnB1dE91dHB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODYsJy4vYXNzZXRzL2luc3BlY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg3LCcuL2Fzc2V0cy9pbnZlcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg4LCcuL2Fzc2V0cy9pcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODksJy4vYXNzZXRzL2tleWJvYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MCwnLi9hc3NldHMva3FsX2ZpZWxkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MSwnLi9hc3NldHMva3FsX2Z1bmN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MiwnLi9hc3NldHMva3FsX29wZXJhbmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkzLCcuL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk0LCcuL2Fzc2V0cy9rcWxfdmFsdWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk1LCcuL2Fzc2V0cy9rdWJlcm5ldGVzTm9kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTYsJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk3LCcuL2Fzc2V0cy9sYXllcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk4LCcuL2Fzc2V0cy9sZXR0ZXJpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk5LCcuL2Fzc2V0cy9saW5lRGFzaGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwMCwnLi9hc3NldHMvbGluZURvdHRlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDEsJy4vYXNzZXRzL2xpbmVTb2xpZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDIsJy4vYXNzZXRzL2xpbmsuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAzLCcuL2Fzc2V0cy9saXN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwNCwnLi9hc3NldHMvbGlzdF9hZGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA1LCcuL2Fzc2V0cy9sb2NrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwNiwnLi9hc3NldHMvbG9ja09wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA3LCcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDgsJy4vYXNzZXRzL2xvZ29fYXBhY2hlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwOSwnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMCwnLi9hc3NldHMvbG9nb19hd3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjExLCcuL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMiwnLi9hc3NldHMvbG9nb19henVyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTMsJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTQsJy4vYXNzZXRzL2xvZ29fYmVhdHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE1LCcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTYsJy4vYXNzZXRzL2xvZ29fY2VwaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTcsJy4vYXNzZXRzL2xvZ29fY2xvdWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE4LCcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTksJy4vYXNzZXRzL2xvZ29fY29kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjAsJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIxLCcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjIsJy4vYXNzZXRzL2xvZ29fZG9ja2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyMywnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNCwnLi9hc3NldHMvbG9nb19lbGFzdGljLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNSwnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNiwnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNywnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjgsJy4vYXNzZXRzL2xvZ29fZXRjZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjksJy4vYXNzZXRzL2xvZ29fZ2NwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMCwnLi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzEsJy4vYXNzZXRzL2xvZ29fZ2l0aHViLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMiwnLi9hc3NldHMvbG9nb19nbWFpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzMsJy4vYXNzZXRzL2xvZ29fZ29sYW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNCwnLi9hc3NldHMvbG9nb19nb29nbGVfZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzUsJy4vYXNzZXRzL2xvZ29faGFwcm94eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzYsJy4vYXNzZXRzL2xvZ29faWJtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNywnLi9hc3NldHMvbG9nb19pYm1fbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzgsJy4vYXNzZXRzL2xvZ29fa2Fma2EuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM5LCcuL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDAsJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDEsJy4vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDIsJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQzLCcuL2Fzc2V0cy9sb2dvX21hcHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ0LCcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDUsJy4vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDYsJy4vYXNzZXRzL2xvZ29fbW9uZ29kYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDcsJy4vYXNzZXRzL2xvZ29fbXlzcWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ4LCcuL2Fzc2V0cy9sb2dvX25naW54LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0OSwnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MCwnLi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MSwnLi9hc3NldHMvbG9nb19waHAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUyLCcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MywnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NCwnLi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTUsJy4vYXNzZXRzL2xvZ29fcmVkaXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU2LCcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NywnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTgsJy4vYXNzZXRzL2xvZ29fc2tldGNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1OSwnLi9hc3NldHMvbG9nb19zbGFjay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjAsJy4vYXNzZXRzL2xvZ29fdXB0aW1lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MSwnLi9hc3NldHMvbG9nb193ZWJob29rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MiwnLi9hc3NldHMvbG9nb193aW5kb3dzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MywnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NCwnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NSwnLi9hc3NldHMvbG9nc3Rhc2hfaWYuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY2LCcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjcsJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjgsJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2OSwnLi9hc3NldHMvbWFnbmV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3MCwnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzEsJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjcyLCcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjczLCcuL2Fzc2V0cy9tYXBfbWFya2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NCwnLi9hc3NldHMvbWVtb3J5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NSwnLi9hc3NldHMvbWVudS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzYsJy4vYXNzZXRzL21lbnVEb3duLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NywnLi9hc3NldHMvbWVudUxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc4LCcuL2Fzc2V0cy9tZW51UmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc5LCcuL2Fzc2V0cy9tZW51VXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgwLCcuL2Fzc2V0cy9tZXJnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODEsJy4vYXNzZXRzL21pbmltaXplLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4MiwnLi9hc3NldHMvbWludXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgzLCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg0LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NSwnLi9hc3NldHMvbWxfY2xhc3NpZmljYXRpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NiwnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODcsJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4OCwnLi9hc3NldHMvbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4OSwnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MCwnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MSwnLi9hc3NldHMvbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MiwnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkzLCcuL2Fzc2V0cy9tb2JpbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk0LCcuL2Fzc2V0cy9tb29uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NSwnLi9hc3NldHMvbmFtZXNwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NiwnLi9hc3NldHMvbmVzdGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NywnLi9hc3NldHMvbm9kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTgsJy4vYXNzZXRzL251bWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTksJy4vYXNzZXRzL29mZmxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAwLCcuL2Fzc2V0cy9vbmxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAxLCcuL2Fzc2V0cy9wYWNrYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwMiwnLi9hc3NldHMvcGFnZVNlbGVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDMsJy4vYXNzZXRzL3BhZ2VzU2VsZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNCwnLi9hc3NldHMvcGFpbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA1LCcuL2Fzc2V0cy9wYXBlcl9jbGlwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNiwnLi9hc3NldHMvcGFydGlhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDcsJy4vYXNzZXRzL3BhdXNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwOCwnLi9hc3NldHMvcGF5bWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDksJy4vYXNzZXRzL3BlbmNpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTAsJy4vYXNzZXRzL3BlcmNlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzExLCcuL2Fzc2V0cy9waW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzEyLCcuL2Fzc2V0cy9waW5fZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxMywnLi9hc3NldHMvcGxheS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTQsJy4vYXNzZXRzL3BsYXlGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE1LCcuL2Fzc2V0cy9wbHVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxNiwnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE3LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE4LCcuL2Fzc2V0cy9wb3BvdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE5LCcuL2Fzc2V0cy9wdXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMCwnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMSwnLi9hc3NldHMvcXVvdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIyLCcuL2Fzc2V0cy9yZWZyZXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMywnLi9hc3NldHMvcmVwb3J0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI0LCcuL2Fzc2V0cy9yZXR1cm5fa2V5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNSwnLi9hc3NldHMvc2F2ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjYsJy4vYXNzZXRzL3NjYWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNywnLi9hc3NldHMvc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyOCwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI5LCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMCwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxSZXNvbHZlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzEsJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMyLCcuL2Fzc2V0cy9zaGFyZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzMsJy4vYXNzZXRzL3NoYXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNCwnLi9hc3NldHMvc25vd2ZsYWtlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNSwnLi9hc3NldHMvc29ydExlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM2LCcuL2Fzc2V0cy9zb3J0UmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM3LCcuL2Fzc2V0cy9zb3J0X2Rvd24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM4LCcuL2Fzc2V0cy9zb3J0X3VwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzOSwnLi9hc3NldHMvc29ydGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQwLCcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0MSwnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQyLCcuL2Fzc2V0cy9zdGFyX2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0MywnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDQsJy4vYXNzZXRzL3N0YXJfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NSwnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ2LCcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NywnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ4LCcuL2Fzc2V0cy9zdGF0cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDksJy4vYXNzZXRzL3N0b3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUwLCcuL2Fzc2V0cy9zdG9wX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTEsJy4vYXNzZXRzL3N0b3Bfc2xhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUyLCcuL2Fzc2V0cy9zdG9yYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1MywnLi9hc3NldHMvc3RyaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NCwnLi9hc3NldHMvc3VibW9kdWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NSwnLi9hc3NldHMvc3VuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NiwnLi9hc3NldHMvc3dhdGNoX2lucHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NywnLi9hc3NldHMvc3ltbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTgsJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTksJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjAsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzYxLCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjIsJy4vYXNzZXRzL3RhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjMsJy4vYXNzZXRzL3RlYXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY0LCcuL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjUsJy4vYXNzZXRzL3RpbWVSZWZyZXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2NiwnLi9hc3NldHMvdGltZWxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY3LCcuL2Fzc2V0cy90aW1lc2xpZGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2OCwnLi9hc3NldHMvdG9rZW5BbGlhcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjksJy4vYXNzZXRzL3Rva2VuQW5ub3RhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzAsJy4vYXNzZXRzL3Rva2VuQXJyYXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcxLCcuL2Fzc2V0cy90b2tlbkJpbmFyeS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzIsJy4vYXNzZXRzL3Rva2VuQm9vbGVhbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzMsJy4vYXNzZXRzL3Rva2VuQ2xhc3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc0LCcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc1LCcuL2Fzc2V0cy90b2tlbkNvbnN0YW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3NiwnLi9hc3NldHMvdG9rZW5EYXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3NywnLi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzgsJy4vYXNzZXRzL3Rva2VuRWxlbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzksJy4vYXNzZXRzL3Rva2VuRW51bS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODAsJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODEsJy4vYXNzZXRzL3Rva2VuRXZlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzgyLCcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODMsJy4vYXNzZXRzL3Rva2VuRmllbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg0LCcuL2Fzc2V0cy90b2tlbkZpbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg1LCcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODYsJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg3LCcuL2Fzc2V0cy90b2tlbkdlby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODgsJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4OSwnLi9hc3NldHMvdG9rZW5JUC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTAsJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MSwnLi9hc3NldHMvdG9rZW5Kb2luLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MiwnLi9hc3NldHMvdG9rZW5LZXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzkzLCcuL2Fzc2V0cy90b2tlbktleXdvcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk0LCcuL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTUsJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTYsJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk3LCcuL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTgsJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5OSwnLi9hc3NldHMvdG9rZW5OZXN0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAwLCcuL2Fzc2V0cy90b2tlbk51bGwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAxLCcuL2Fzc2V0cy90b2tlbk51bWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDIsJy4vYXNzZXRzL3Rva2VuT2JqZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMywnLi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDQsJy4vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDUsJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNiwnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNywnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDgsJy4vYXNzZXRzL3Rva2VuUmFuZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA5LCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxMCwnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDExLCcuL2Fzc2V0cy90b2tlblJlcG8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEyLCcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEzLCcuL2Fzc2V0cy90b2tlblNoYXBlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNCwnLi9hc3NldHMvdG9rZW5TdHJpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE1LCcuL2Fzc2V0cy90b2tlblN0cnVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTYsJy4vYXNzZXRzL3Rva2VuU3ltYm9sLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNywnLi9hc3NldHMvdG9rZW5UYWcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE4LCcuL2Fzc2V0cy90b2tlblRleHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE5LCcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIwLCcuL2Fzc2V0cy90b2tlblZhcmlhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyMSwnLi9hc3NldHMvdHJhaW5pbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIyLCcuL2Fzc2V0cy90cmFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjMsJy4vYXNzZXRzL3VuZm9sZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjQsJy4vYXNzZXRzL3VubGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjUsJy4vYXNzZXRzL3VzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI2LCcuL2Fzc2V0cy91c2VyQXZhdGFyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyNywnLi9hc3NldHMvdXNlcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI4LCcuL2Fzc2V0cy92ZWN0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI5LCcuL2Fzc2V0cy92aWRlb1BsYXllci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzAsJy4vYXNzZXRzL3Zpc19hcmVhLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMSwnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzIsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzMsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNCwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzUsJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzYsJy4vYXNzZXRzL3Zpc19nYXVnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzcsJy4vYXNzZXRzL3Zpc19nb2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzOCwnLi9hc3NldHMvdmlzX2xpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM5LCcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQwLCcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDEsJy4vYXNzZXRzL3Zpc19tZXRyaWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQyLCcuL2Fzc2V0cy92aXNfcGllLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MywnLi9hc3NldHMvdmlzX3RhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NCwnLi9hc3NldHMvdmlzX3RhZ19jbG91ZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDUsJy4vYXNzZXRzL3Zpc190ZXh0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NiwnLi9hc3NldHMvdmlzX3RpbWVsaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NywnLi9hc3NldHMvdmlzX3ZlZ2EuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ4LCcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ5LCcuL2Fzc2V0cy93b3JkV3JhcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTAsJy4vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUxLCcuL2Fzc2V0cy93cmVuY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUyLCcuL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MywnLi9hc3NldHMvYWdncmVnYXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NCwnLi9hc3NldHMvYWxlcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU1LCcuL2Fzc2V0cy9hbmFseXplRXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU2LCcuL2Fzc2V0cy9hbmFseXplX2V2ZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NywnLi9hc3NldHMvYW5ub3RhdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTgsJy4vYXNzZXRzL2FwbV90cmFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTksJy4vYXNzZXRzL2FwcF9hZGRfZGF0YSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjAsJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjEsJy4vYXNzZXRzL2FwcF9hZ2VudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjIsJy4vYXNzZXRzL2FwcF9hcG0nOl9EeW5hbWljSW1wb3J0TW9kdWxlNDYzLCcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjQsJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY1LCcuL2Fzc2V0cy9hcHBfY2FudmFzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NiwnLi9hc3NldHMvYXBwX2Nhc2VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NywnLi9hc3NldHMvYXBwX2NvZGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY4LCcuL2Fzc2V0cy9hcHBfY29uc29sZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjksJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MCwnLi9hc3NldHMvYXBwX2Rhc2hib2FyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzEsJy4vYXNzZXRzL2FwcF9kZXZ0b29scyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzIsJy4vYXNzZXRzL2FwcF9kaXNjb3Zlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzMsJy4vYXNzZXRzL2FwcF9lbXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc0LCcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc1LCcuL2Fzc2V0cy9hcHBfZmxlZXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc2LCcuL2Fzc2V0cy9hcHBfZ2lzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NywnLi9hc3NldHMvYXBwX2dyYXBoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OCwnLi9hc3NldHMvYXBwX2dyb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc5LCcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MCwnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgxLCcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybic6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODIsJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgzLCcuL2Fzc2V0cy9hcHBfbGVucyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODQsJy4vYXNzZXRzL2FwcF9sb2dzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NSwnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg2LCcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODcsJy4vYXNzZXRzL2FwcF9tZXRyaWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OCwnLi9hc3NldHMvYXBwX21sJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OSwnLi9hc3NldHMvYXBwX21vbml0b3JpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDkwLCcuL2Fzc2V0cy9hcHBfbm90ZWJvb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNDkxLCcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTIsJy4vYXNzZXRzL2FwcF9waXBlbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTMsJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk0LCcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NSwnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk2LCcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NywnLi9hc3NldHMvYXBwX3NlY3VyaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OCwnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTksJy4vYXNzZXRzL2FwcF9zcGFjZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAwLCcuL2Fzc2V0cy9hcHBfc3FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMSwnLi9hc3NldHMvYXBwX3RpbWVsaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMiwnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMywnLi9hc3NldHMvYXBwX3VwdGltZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDQsJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDUsJy4vYXNzZXRzL2FwcF92aXN1YWxpemUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTA2LCcuL2Fzc2V0cy9hcHBfd2F0Y2hlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDcsJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwOCwnLi9hc3NldHMvYXBwcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDksJy4vYXNzZXRzL2Fycm93RW5kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMCwnLi9hc3NldHMvYXJyb3dTdGFydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTEsJy4vYXNzZXRzL2Fycm93X2Rvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEyLCcuL2Fzc2V0cy9hcnJvd19sZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMywnLi9hc3NldHMvYXJyb3dfcmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE0LCcuL2Fzc2V0cy9hcnJvd191cCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTUsJy4vYXNzZXRzL2FzdGVyaXNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNiwnLi9hc3NldHMvYmVha2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNywnLi9hc3NldHMvYmVsbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTgsJy4vYXNzZXRzL2JlbGxTbGFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTksJy4vYXNzZXRzL2JvbHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIwLCcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyMSwnLi9hc3NldHMvYm94ZXNfdmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIyLCcuL2Fzc2V0cy9icmFuY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIzLCcuL2Fzc2V0cy9icmFuY2hVc2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyNCwnLi9hc3NldHMvYnJvb20nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI1LCcuL2Fzc2V0cy9icnVzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjYsJy4vYXNzZXRzL2J1Zyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjcsJy4vYXNzZXRzL2J1bGxzZXllJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyOCwnLi9hc3NldHMvY2FsZW5kYXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI5LCcuL2Fzc2V0cy9jaGVjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzAsJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTMxLCcuL2Fzc2V0cy9jaGVlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzIsJy4vYXNzZXRzL2Nsb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMywnLi9hc3NldHMvY2xvdWREcml6emxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNCwnLi9hc3NldHMvY2xvdWRTdG9ybXknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM1LCcuL2Fzc2V0cy9jbG91ZFN1bm55JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNiwnLi9hc3NldHMvY2x1c3Rlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzcsJy4vYXNzZXRzL2NvbG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzOCwnLi9hc3NldHMvY29tcHV0ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzksJy4vYXNzZXRzL2NvbnNvbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQwLCcuL2Fzc2V0cy9jb250YWluZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQxLCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQyLCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDMsJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDQsJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ1LCcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0NiwnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ3LCcuL2Fzc2V0cy9jb3B5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0OCwnLi9hc3NldHMvY29weV9jbGlwYm9hcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ5LCcuL2Fzc2V0cy9jcm9zcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTAsJy4vYXNzZXRzL2Nyb3NzSW5BQ2lyY2xlRmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MSwnLi9hc3NldHMvY3Jvc3NoYWlycyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTIsJy4vYXNzZXRzL2N1cnJlbmN5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MywnLi9hc3NldHMvY3V0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1NCwnLi9hc3NldHMvZGF0YWJhc2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU1LCcuL2Fzc2V0cy9kZXNrdG9wJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1NiwnLi9hc3NldHMvZG9jdW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU3LCcuL2Fzc2V0cy9kb2N1bWVudEVkaXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU4LCcuL2Fzc2V0cy9kb2N1bWVudGF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1OSwnLi9hc3NldHMvZG9jdW1lbnRzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MCwnLi9hc3NldHMvZG90JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MSwnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MiwnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjMsJy4vYXNzZXRzL2Rvd25sb2FkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2NCwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY1LCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY2LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY3LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY4LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2OSwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3MCwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcxLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcyLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTczLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NCwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NSwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzYsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc3LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzgsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzksJy4vYXNzZXRzL2VkaXRvcl9ib2xkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MCwnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODEsJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MiwnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgzLCcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODQsJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg1LCcuL2Fzc2V0cy9lZGl0b3JfbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODYsJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg3LCcuL2Fzc2V0cy9lZGl0b3JfcmVkbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODgsJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg5LCcuL2Fzc2V0cy9lZGl0b3JfdGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkwLCcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5MSwnLi9hc3NldHMvZWRpdG9yX3VuZG8nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkyLCcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkzLCcuL2Fzc2V0cy9lbWFpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTQsJy4vYXNzZXRzL2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NSwnLi9hc3NldHMvZXFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NiwnLi9hc3NldHMvZXJhc2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NywnLi9hc3NldHMvZXhpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTgsJy4vYXNzZXRzL2V4cGFuZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTksJy4vYXNzZXRzL2V4cGFuZE1pbmknOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAwLCcuL2Fzc2V0cy9leHBvcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAxLCcuL2Fzc2V0cy9leWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAyLCcuL2Fzc2V0cy9leWVfY2xvc2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwMywnLi9hc3NldHMvZmFjZV9oYXBweSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDQsJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDUsJy4vYXNzZXRzL2ZhY2Vfc2FkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNiwnLi9hc3NldHMvZmlsdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNywnLi9hc3NldHMvZmxhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDgsJy4vYXNzZXRzL2ZvbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA5LCcuL2Fzc2V0cy9mb2xkZXJfY2hlY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEwLCcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxMSwnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxMiwnLi9hc3NldHMvZm9sZGVyX29wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEzLCcuL2Fzc2V0cy9mcmFtZU5leHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE0LCcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxNSwnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE2LCcuL2Fzc2V0cy9mdWxsX3NjcmVlbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTcsJy4vYXNzZXRzL2Z1bmN0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxOCwnLi9hc3NldHMvZ2Vhcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTksJy4vYXNzZXRzL2dsYXNzZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIwLCcuL2Fzc2V0cy9nbG9iZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjEsJy4vYXNzZXRzL2dyYWInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIyLCcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIzLCcuL2Fzc2V0cy9ncmlkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNCwnLi9hc3NldHMvaGVhcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI1LCcuL2Fzc2V0cy9oZWF0bWFwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNiwnLi9hc3NldHMvaGVscCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjcsJy4vYXNzZXRzL2hvbWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI4LCcuL2Fzc2V0cy9pSW5DaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI5LCcuL2Fzc2V0cy9pbWFnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzAsJy4vYXNzZXRzL2ltcG9ydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzEsJy4vYXNzZXRzL2luZGV4X2Nsb3NlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMiwnLi9hc3NldHMvaW5kZXhfZWRpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzMsJy4vYXNzZXRzL2luZGV4X2ZsdXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNCwnLi9hc3NldHMvaW5kZXhfbWFwcGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzUsJy4vYXNzZXRzL2luZGV4X29wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM2LCcuL2Fzc2V0cy9pbmRleF9ydW50aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNywnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM4LCcuL2Fzc2V0cy9pbnB1dE91dHB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzksJy4vYXNzZXRzL2luc3BlY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQwLCcuL2Fzc2V0cy9pbnZlcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQxLCcuL2Fzc2V0cy9pcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDIsJy4vYXNzZXRzL2tleWJvYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0MywnLi9hc3NldHMva3FsX2ZpZWxkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NCwnLi9hc3NldHMva3FsX2Z1bmN0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NSwnLi9hc3NldHMva3FsX29wZXJhbmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ2LCcuL2Fzc2V0cy9rcWxfc2VsZWN0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ3LCcuL2Fzc2V0cy9rcWxfdmFsdWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ4LCcuL2Fzc2V0cy9rdWJlcm5ldGVzTm9kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDksJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUwLCcuL2Fzc2V0cy9sYXllcnMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUxLCcuL2Fzc2V0cy9sZXR0ZXJpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUyLCcuL2Fzc2V0cy9saW5lRGFzaGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1MywnLi9hc3NldHMvbGluZURvdHRlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTQsJy4vYXNzZXRzL2xpbmVTb2xpZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTUsJy4vYXNzZXRzL2xpbmsnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU2LCcuL2Fzc2V0cy9saXN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1NywnLi9hc3NldHMvbGlzdF9hZGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU4LCcuL2Fzc2V0cy9sb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1OSwnLi9hc3NldHMvbG9ja09wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYwLCcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjEsJy4vYXNzZXRzL2xvZ29fYXBhY2hlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MiwnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MywnLi9hc3NldHMvbG9nb19hd3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY0LCcuL2Fzc2V0cy9sb2dvX2F3c19tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2NSwnLi9hc3NldHMvbG9nb19henVyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjYsJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjcsJy4vYXNzZXRzL2xvZ29fYmVhdHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY4LCcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjksJy4vYXNzZXRzL2xvZ29fY2VwaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzAsJy4vYXNzZXRzL2xvZ29fY2xvdWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjcxLCcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzIsJy4vYXNzZXRzL2xvZ29fY29kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzMsJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc0LCcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzUsJy4vYXNzZXRzL2xvZ29fZG9ja2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NiwnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NywnLi9hc3NldHMvbG9nb19lbGFzdGljJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3OCwnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3OSwnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MCwnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODEsJy4vYXNzZXRzL2xvZ29fZXRjZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODIsJy4vYXNzZXRzL2xvZ29fZ2NwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MywnLi9hc3NldHMvbG9nb19nY3BfbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODQsJy4vYXNzZXRzL2xvZ29fZ2l0aHViJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NSwnLi9hc3NldHMvbG9nb19nbWFpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODYsJy4vYXNzZXRzL2xvZ29fZ29sYW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NywnLi9hc3NldHMvbG9nb19nb29nbGVfZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODgsJy4vYXNzZXRzL2xvZ29faGFwcm94eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODksJy4vYXNzZXRzL2xvZ29faWJtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MCwnLi9hc3NldHMvbG9nb19pYm1fbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTEsJy4vYXNzZXRzL2xvZ29fa2Fma2EnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjkyLCcuL2Fzc2V0cy9sb2dvX2tpYmFuYSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTMsJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTQsJy4vYXNzZXRzL2xvZ29fbG9nZ2luZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTUsJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk2LCcuL2Fzc2V0cy9sb2dvX21hcHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk3LCcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTgsJy4vYXNzZXRzL2xvZ29fbWV0cmljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTksJy4vYXNzZXRzL2xvZ29fbW9uZ29kYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDAsJy4vYXNzZXRzL2xvZ29fbXlzcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAxLCcuL2Fzc2V0cy9sb2dvX25naW54JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMiwnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMywnLi9hc3NldHMvbG9nb19vc3F1ZXJ5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNCwnLi9hc3NldHMvbG9nb19waHAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA1LCcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNiwnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNywnLi9hc3NldHMvbG9nb19yYWJiaXRtcSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDgsJy4vYXNzZXRzL2xvZ29fcmVkaXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA5LCcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMCwnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTEsJy4vYXNzZXRzL2xvZ29fc2tldGNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMiwnLi9hc3NldHMvbG9nb19zbGFjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTMsJy4vYXNzZXRzL2xvZ29fdXB0aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNCwnLi9hc3NldHMvbG9nb193ZWJob29rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNSwnLi9hc3NldHMvbG9nb193aW5kb3dzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNiwnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNywnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxOCwnLi9hc3NldHMvbG9nc3Rhc2hfaWYnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE5LCcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjAsJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjEsJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMiwnLi9hc3NldHMvbWFnbmV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMywnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjQsJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI1LCcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI2LCcuL2Fzc2V0cy9tYXBfbWFya2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyNywnLi9hc3NldHMvbWVtb3J5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyOCwnLi9hc3NldHMvbWVudSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjksJy4vYXNzZXRzL21lbnVEb3duJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczMCwnLi9hc3NldHMvbWVudUxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMxLCcuL2Fzc2V0cy9tZW51UmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMyLCcuL2Fzc2V0cy9tZW51VXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMzLCcuL2Fzc2V0cy9tZXJnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzQsJy4vYXNzZXRzL21pbmltaXplJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczNSwnLi9hc3NldHMvbWludXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM2LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM3LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczOCwnLi9hc3NldHMvbWxfY2xhc3NpZmljYXRpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczOSwnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDAsJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MSwnLi9hc3NldHMvbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MiwnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MywnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0NCwnLi9hc3NldHMvbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0NSwnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ2LCcuL2Fzc2V0cy9tb2JpbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ3LCcuL2Fzc2V0cy9tb29uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0OCwnLi9hc3NldHMvbmFtZXNwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0OSwnLi9hc3NldHMvbmVzdGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MCwnLi9hc3NldHMvbm9kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTEsJy4vYXNzZXRzL251bWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTIsJy4vYXNzZXRzL29mZmxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzUzLCcuL2Fzc2V0cy9vbmxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU0LCcuL2Fzc2V0cy9wYWNrYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NSwnLi9hc3NldHMvcGFnZVNlbGVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTYsJy4vYXNzZXRzL3BhZ2VzU2VsZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NywnLi9hc3NldHMvcGFpbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU4LCcuL2Fzc2V0cy9wYXBlcl9jbGlwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1OSwnLi9hc3NldHMvcGFydGlhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjAsJy4vYXNzZXRzL3BhdXNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MSwnLi9hc3NldHMvcGF5bWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjIsJy4vYXNzZXRzL3BlbmNpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjMsJy4vYXNzZXRzL3BlcmNlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY0LCcuL2Fzc2V0cy9waW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY1LCcuL2Fzc2V0cy9waW5fZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2NiwnLi9hc3NldHMvcGxheSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjcsJy4vYXNzZXRzL3BsYXlGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY4LCcuL2Fzc2V0cy9wbHVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2OSwnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcwLCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcxLCcuL2Fzc2V0cy9wb3BvdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcyLCcuL2Fzc2V0cy9wdXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3MywnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NCwnLi9hc3NldHMvcXVvdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc1LCcuL2Fzc2V0cy9yZWZyZXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NiwnLi9hc3NldHMvcmVwb3J0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc3LCcuL2Fzc2V0cy9yZXR1cm5fa2V5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3OCwnLi9hc3NldHMvc2F2ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzksJy4vYXNzZXRzL3NjYWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MCwnLi9hc3NldHMvc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MSwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgyLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MywnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxSZXNvbHZlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODQsJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg1LCcuL2Fzc2V0cy9zaGFyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODYsJy4vYXNzZXRzL3NoYXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4NywnLi9hc3NldHMvc25vd2ZsYWtlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4OCwnLi9hc3NldHMvc29ydExlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg5LCcuL2Fzc2V0cy9zb3J0UmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkwLCcuL2Fzc2V0cy9zb3J0X2Rvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkxLCcuL2Fzc2V0cy9zb3J0X3VwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5MiwnLi9hc3NldHMvc29ydGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkzLCcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NCwnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk1LCcuL2Fzc2V0cy9zdGFyX2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NiwnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTcsJy4vYXNzZXRzL3N0YXJfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5OCwnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk5LCcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwMCwnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAxLCcuL2Fzc2V0cy9zdGF0cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDIsJy4vYXNzZXRzL3N0b3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAzLCcuL2Fzc2V0cy9zdG9wX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDQsJy4vYXNzZXRzL3N0b3Bfc2xhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA1LCcuL2Fzc2V0cy9zdG9yYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNiwnLi9hc3NldHMvc3RyaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNywnLi9hc3NldHMvc3VibW9kdWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwOCwnLi9hc3NldHMvc3VuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwOSwnLi9hc3NldHMvc3dhdGNoX2lucHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMCwnLi9hc3NldHMvc3ltbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTEsJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTIsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTMsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODE0LCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTUsJy4vYXNzZXRzL3RhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTYsJy4vYXNzZXRzL3RlYXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODE3LCcuL2Fzc2V0cy90ZW1wZXJhdHVyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTgsJy4vYXNzZXRzL3RpbWVSZWZyZXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxOSwnLi9hc3NldHMvdGltZWxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODIwLCcuL2Fzc2V0cy90aW1lc2xpZGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyMSwnLi9hc3NldHMvdG9rZW5BbGlhcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjIsJy4vYXNzZXRzL3Rva2VuQW5ub3RhdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjMsJy4vYXNzZXRzL3Rva2VuQXJyYXknOl9EeW5hbWljSW1wb3J0TW9kdWxlODI0LCcuL2Fzc2V0cy90b2tlbkJpbmFyeSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjUsJy4vYXNzZXRzL3Rva2VuQm9vbGVhbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjYsJy4vYXNzZXRzL3Rva2VuQ2xhc3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI3LCcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODI4LCcuL2Fzc2V0cy90b2tlbkNvbnN0YW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyOSwnLi9hc3NldHMvdG9rZW5EYXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMCwnLi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzEsJy4vYXNzZXRzL3Rva2VuRWxlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzIsJy4vYXNzZXRzL3Rva2VuRW51bSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzMsJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzQsJy4vYXNzZXRzL3Rva2VuRXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODM1LCcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzYsJy4vYXNzZXRzL3Rva2VuRmllbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODM3LCcuL2Fzc2V0cy90b2tlbkZpbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODM4LCcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzksJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlODQwLCcuL2Fzc2V0cy90b2tlbkdlbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDEsJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MiwnLi9hc3NldHMvdG9rZW5JUCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDMsJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NCwnLi9hc3NldHMvdG9rZW5Kb2luJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NSwnLi9hc3NldHMvdG9rZW5LZXknOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ2LCcuL2Fzc2V0cy90b2tlbktleXdvcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ3LCcuL2Fzc2V0cy90b2tlbk1ldGhvZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDgsJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDksJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUwLCcuL2Fzc2V0cy90b2tlbk1vZHVsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTEsJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1MiwnLi9hc3NldHMvdG9rZW5OZXN0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUzLCcuL2Fzc2V0cy90b2tlbk51bGwnOl9EeW5hbWljSW1wb3J0TW9kdWxlODU0LCcuL2Fzc2V0cy90b2tlbk51bWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTUsJy4vYXNzZXRzL3Rva2VuT2JqZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NiwnLi9hc3NldHMvdG9rZW5PcGVyYXRvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTcsJy4vYXNzZXRzL3Rva2VuUGFja2FnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTgsJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1OSwnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MCwnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjEsJy4vYXNzZXRzL3Rva2VuUmFuZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODYyLCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MywnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY0LCcuL2Fzc2V0cy90b2tlblJlcG8nOl9EeW5hbWljSW1wb3J0TW9kdWxlODY1LCcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY2LCcuL2Fzc2V0cy90b2tlblNoYXBlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2NywnLi9hc3NldHMvdG9rZW5TdHJpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY4LCcuL2Fzc2V0cy90b2tlblN0cnVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjksJy4vYXNzZXRzL3Rva2VuU3ltYm9sJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3MCwnLi9hc3NldHMvdG9rZW5UYWcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcxLCcuL2Fzc2V0cy90b2tlblRleHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcyLCcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODczLCcuL2Fzc2V0cy90b2tlblZhcmlhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3NCwnLi9hc3NldHMvdHJhaW5pbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODc1LCcuL2Fzc2V0cy90cmFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzYsJy4vYXNzZXRzL3VuZm9sZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzcsJy4vYXNzZXRzL3VubGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzgsJy4vYXNzZXRzL3VzZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODc5LCcuL2Fzc2V0cy91c2VyQXZhdGFyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4MCwnLi9hc3NldHMvdXNlcnMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgxLCcuL2Fzc2V0cy92ZWN0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlODgyLCcuL2Fzc2V0cy92aWRlb1BsYXllcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODMsJy4vYXNzZXRzL3Zpc19hcmVhJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NCwnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODUsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODYsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NywnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODgsJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODksJy4vYXNzZXRzL3Zpc19nYXVnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTAsJy4vYXNzZXRzL3Zpc19nb2FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5MSwnLi9hc3NldHMvdmlzX2xpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODkyLCcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODkzLCcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTQsJy4vYXNzZXRzL3Zpc19tZXRyaWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk1LCcuL2Fzc2V0cy92aXNfcGllJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NiwnLi9hc3NldHMvdmlzX3RhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NywnLi9hc3NldHMvdmlzX3RhZ19jbG91ZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTgsJy4vYXNzZXRzL3Zpc190ZXh0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5OSwnLi9hc3NldHMvdmlzX3RpbWVsaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwMCwnLi9hc3NldHMvdmlzX3ZlZ2EnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAxLCcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAyLCcuL2Fzc2V0cy93b3JkV3JhcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDMsJy4vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA0LCcuL2Fzc2V0cy93cmVuY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA1fTtcbmZ1bmN0aW9uIF9EeW5hbWljSW1wb3J0KHBhdGgpIHtjb25zdCBtb2Q9X0R5bmFtaWNJbXBvcnRNb2R1bGVNYXBbcGF0aF07bW9kW1N5bWJvbC50b1N0cmluZ1RhZ109J01vZHVsZSc7cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2QpOyB9XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJ0eXBlXCIsIFwic2l6ZVwiLCBcImNvbG9yXCIsIFwiY2xhc3NOYW1lXCIsIFwidGFiSW5kZXhcIiwgXCJ0aXRsZVwiLCBcIm9uSWNvbkxvYWRcIiwgXCJ0aGVtZVwiLCBcInN0eWxlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB0eXBlVG9QYXRoTWFwIH0gZnJvbSAnLi9pY29uX21hcCc7XG5pbXBvcnQgeyBpY29uIGFzIGVtcHR5IH0gZnJvbSAnLi9hc3NldHMvZW1wdHknO1xuaW1wb3J0IHsgZW5xdWV1ZVN0YXRlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yLCB3aXRoRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5leHBvcnQgeyBDT0xPUlMgfSBmcm9tICcuL25hbWVkX2NvbG9ycyc7XG5pbXBvcnQgeyBpc05hbWVkQ29sb3IgfSBmcm9tICcuL25hbWVkX2NvbG9ycyc7XG5pbXBvcnQgeyBldWlJY29uU3R5bGVzIH0gZnJvbSAnLi9pY29uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgZ2V0SXNBcHBJY29uID0gZnVuY3Rpb24gZ2V0SXNBcHBJY29uKGljb25UeXBlKSB7XG4gIGlmICh0eXBlb2YgaWNvblR5cGUgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gIGlmIChpY29uVHlwZSA9PT0gJ2RhdGFWaXN1YWxpemVyJykgcmV0dXJuIHRydWU7IC8vIFNwZWNpYWwgY2FzZVxuXG4gIGlmIChpY29uVHlwZS5pbmRleE9mKCdkYXRhOicpID09PSAwKSByZXR1cm4gZmFsc2U7IC8vIElubGluZSBkYXRhIFVSSXMgc2hvdWxkIGJlIHNob3J0LWNpcmN1aXRlZCBmb3IgcGVyZm9ybWFuY2VcblxuICByZXR1cm4gaWNvblR5cGUuZW5kc1dpdGgoJ0FwcCcpIHx8IGljb25UeXBlLmVuZHNXaXRoKCdKb2InKTtcbn07XG5cbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvUGF0aE1hcCk7XG5leHBvcnQgdmFyIFNJWkVTID0gWydvcmlnaW5hbCcsICdzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcblxuZnVuY3Rpb24gaXNFdWlJY29uVHlwZSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ3N0cmluZycgJiYgdHlwZVRvUGF0aE1hcC5oYXNPd25Qcm9wZXJ0eSh4KTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5pdGlhbEljb24oaWNvbikge1xuICBpZiAoaWNvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChpc0V1aUljb25UeXBlKGljb24pKSB7XG4gICAgaWYgKGljb25Db21wb25lbnRDYWNoZS5oYXNPd25Qcm9wZXJ0eShpY29uKSkge1xuICAgICAgcmV0dXJuIGljb25Db21wb25lbnRDYWNoZVtpY29uXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGljb247XG59XG5cbnZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCk7XG52YXIgaWNvbkNvbXBvbmVudENhY2hlID0ge307XG5leHBvcnQgdmFyIGNsZWFySWNvbkNvbXBvbmVudENhY2hlID0gZnVuY3Rpb24gY2xlYXJJY29uQ29tcG9uZW50Q2FjaGUoaWNvblR5cGUpIHtcbiAgaWYgKGljb25UeXBlICE9IG51bGwpIHtcbiAgICBkZWxldGUgaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXTtcbiAgfSBlbHNlIHtcbiAgICBpY29uQ29tcG9uZW50Q2FjaGUgPSB7fTtcbiAgfVxufTtcbmV4cG9ydCB2YXIgYXBwZW5kSWNvbkNvbXBvbmVudENhY2hlID0gZnVuY3Rpb24gYXBwZW5kSWNvbkNvbXBvbmVudENhY2hlKGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwKSB7XG4gIGZvciAodmFyIF9pY29uVHlwZSBpbiBpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcCkge1xuICAgIGlmIChpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcC5oYXNPd25Qcm9wZXJ0eShfaWNvblR5cGUpKSB7XG4gICAgICBpY29uQ29tcG9uZW50Q2FjaGVbX2ljb25UeXBlXSA9IGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwW19pY29uVHlwZV07XG4gICAgfVxuICB9XG59O1xuZXhwb3J0IHZhciBFdWlJY29uQ2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlJY29uQ2xhc3MsIF9QdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUljb25DbGFzcyk7XG5cbiAgZnVuY3Rpb24gRXVpSWNvbkNsYXNzKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUljb25DbGFzcyk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpc01vdW50ZWRcIiwgdHJ1ZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibG9hZEljb25Db21wb25lbnRcIiwgZnVuY3Rpb24gKGljb25UeXBlKSB7XG4gICAgICBpZiAoaWNvbkNvbXBvbmVudENhY2hlLmhhc093blByb3BlcnR5KGljb25UeXBlKSkge1xuICAgICAgICAvLyBleGlzdHMgaW4gY2FjaGVcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgbmVlZGVkTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaWNvbjogaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXVxuICAgICAgICB9KTtcblxuICAgICAgICBfdGhpcy5vbkljb25Mb2FkKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfRHluYW1pY0ltcG9ydChgLi9hc3NldHMvJHt0eXBlVG9QYXRoTWFwW2ljb25UeXBlXX1gKS50aGVuKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBpY29uID0gX3JlZi5pY29uO1xuICAgICAgICBpY29uQ29tcG9uZW50Q2FjaGVbaWNvblR5cGVdID0gaWNvbjtcbiAgICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuaXNNb3VudGVkICYmIF90aGlzLnByb3BzLnR5cGUgPT09IGljb25UeXBlKSB7XG4gICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGljb246IGljb24sXG4gICAgICAgICAgICAgIGljb25UaXRsZTogaWNvblR5cGUsXG4gICAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICAgIH0sIF90aGlzLm9uSWNvbkxvYWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkljb25Mb2FkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBvbkljb25Mb2FkID0gX3RoaXMucHJvcHMub25JY29uTG9hZDtcblxuICAgICAgaWYgKG9uSWNvbkxvYWQpIHtcbiAgICAgICAgb25JY29uTG9hZCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuICAgIHZhciBpbml0aWFsSWNvbiA9IGdldEluaXRpYWxJY29uKHR5cGUpO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaWNvbjogaW5pdGlhbEljb24sXG4gICAgICBpY29uVGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBuZWVkZWRMb2FkaW5nOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUljb25DbGFzcywgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgdHlwZSA9IHRoaXMucHJvcHMudHlwZTtcblxuICAgICAgaWYgKGlzRXVpSWNvblR5cGUodHlwZSkgJiYgdGhpcy5zdGF0ZS5pY29uID09IG51bGwpIHtcbiAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLW1vdW50LXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBuZWVkZWRMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2FkSWNvbkNvbXBvbmVudCh0eXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25JY29uTG9hZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIHR5cGUgPSB0aGlzLnByb3BzLnR5cGU7XG5cbiAgICAgIGlmICh0eXBlICE9PSBwcmV2UHJvcHMudHlwZSkge1xuICAgICAgICBpZiAoaXNFdWlJY29uVHlwZSh0eXBlKSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbmVlZGVkTG9hZGluZzogaWNvbkNvbXBvbmVudENhY2hlLmhhc093blByb3BlcnR5KHR5cGUpLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2FkSWNvbkNvbXBvbmVudCh0eXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLXVwZGF0ZS1zZXQtc3RhdGVcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGljb246IHR5cGUsXG4gICAgICAgICAgICBuZWVkZWRMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgdHlwZSA9IF90aGlzJHByb3BzLnR5cGUsXG4gICAgICAgICAgX3RoaXMkcHJvcHMkc2l6ZSA9IF90aGlzJHByb3BzLnNpemUsXG4gICAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF90aGlzJHByb3BzJHNpemUsXG4gICAgICAgICAgY29sb3IgPSBfdGhpcyRwcm9wcy5jb2xvcixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgdGFiSW5kZXggPSBfdGhpcyRwcm9wcy50YWJJbmRleCxcbiAgICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzLnRpdGxlLFxuICAgICAgICAgIG9uSWNvbkxvYWQgPSBfdGhpcyRwcm9wcy5vbkljb25Mb2FkLFxuICAgICAgICAgIHRoZW1lID0gX3RoaXMkcHJvcHMudGhlbWUsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wcy5zdHlsZSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHN0YXRlLmlzTG9hZGluZyxcbiAgICAgICAgICBuZWVkZWRMb2FkaW5nID0gX3RoaXMkc3RhdGUubmVlZGVkTG9hZGluZyxcbiAgICAgICAgICBpY29uVGl0bGUgPSBfdGhpcyRzdGF0ZS5pY29uVGl0bGU7XG4gICAgICB2YXIgaXNMb2FkZWQgPSAhaXNMb2FkaW5nICYmIG5lZWRlZExvYWRpbmc7XG4gICAgICB2YXIgaXNDdXN0b21Db2xvciA9IGNvbG9yICYmICFpc05hbWVkQ29sb3IoY29sb3IpO1xuICAgICAgdmFyIG9wdGlvbmFsQ3VzdG9tU3R5bGVzID0gaXNDdXN0b21Db2xvciA/IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0sIHN0eWxlKSA6IHN0eWxlOyAvLyBUaGVzZSBpY29ucyBhcmUgYSBsaXR0bGUgc3BlY2lhbCBhbmQgZ2V0IHNvbWUgZXh0cmEgQ1NTIGZsZXhpYmlsaXR5XG5cbiAgICAgIHZhciBpc0FwcEljb24gPSBnZXRJc0FwcEljb24odHlwZSk7IC8vIEFwcCBjb2xvciBzdHlsZXMgYXJlIG9ubHkgYXBwbGllZCBpZiBubyBjb2xvciBpcyBwYXNzZWQgb3IgaWYgY29sb3I9XCJkZWZhdWx0XCIgaXMgcGFzc2VkXG5cbiAgICAgIHZhciBhcHBJY29uSGFzQ29sb3IgPSBjb2xvciAmJiBjb2xvciAhPT0gJ2RlZmF1bHQnOyAvLyBUaGUgRWxhc3RpYyBsb2dvIHNob3VsZCBiZSBhbiBvdXRsaW5lIGluIHRleHQgYW5kIGdob3N0IG1vZGVcblxuICAgICAgdmFyIGlzRWxhc3RpY0xvZ29PdXRsaW5lID0gdHlwZSA9PT0gJ2xvZ29FbGFzdGljJyAmJiAoY29sb3IgPT09ICdnaG9zdCcgfHwgY29sb3IgPT09ICd0ZXh0Jyk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUljb24nLCBjbGFzc05hbWUpOyAvLyBFbW90aW9uIHN0eWxlc1xuXG4gICAgICB2YXIgc3R5bGVzID0gZXVpSWNvblN0eWxlcyh0aGVtZSk7XG4gICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJY29uLCBzdHlsZXNbc2l6ZV0sIGNvbG9yICYmIGlzTmFtZWRDb2xvcihjb2xvcikgJiYgc3R5bGVzW2NvbG9yXSwgaXNDdXN0b21Db2xvciAmJiBzdHlsZXMuY3VzdG9tQ29sb3IsIGlzRWxhc3RpY0xvZ29PdXRsaW5lICYmIHN0eWxlcy5sb2dvRWxhc3RpY091dGxpbmUsIGlzQXBwSWNvbiAmJiAhYXBwSWNvbkhhc0NvbG9yICYmIHN0eWxlcy5hcHAsIGlzTG9hZGluZyAmJiBzdHlsZXMuaXNMb2FkaW5nLCAhaXNMb2FkaW5nICYmIG5lZWRlZExvYWRpbmcgJiYgc3R5bGVzLmlzTG9hZGVkXTtcbiAgICAgIHZhciBpY29uID0gdGhpcy5zdGF0ZS5pY29uIHx8IGVtcHR5OyAvLyBUaGlzIGlzIGEgZml4IGZvciBJRSBhbmQgRWRnZSwgd2hpY2ggaWdub3JlcyB0YWJpbmRleD1cIi0xXCIgb24gYW4gU1ZHLCBidXQgcmVzcGVjdHNcbiAgICAgIC8vIGZvY3VzYWJsZT1cImZhbHNlXCIuXG4gICAgICAvLyAgIC0gSWYgdGhlcmUncyBubyB0YWJpbmRleCBzcGVjaWZpZWQsIHdlJ2xsIGRlZmF1bHQgdGhlIGljb24gdG8gbm90IGJlIGZvY3VzYWJsZSxcbiAgICAgIC8vICAgICB3aGljaCBpcyBob3cgU1ZHcyBiZWhhdmUgaW4gQ2hyb21lLCBTYWZhcmksIGFuZCBGRi5cbiAgICAgIC8vICAgLSBJZiB0YWJpbmRleCBpcyAtMSwgdGhlbiB0aGUgY29uc3VtZXIgd2FudHMgdGhlIGljb24gdG8gYmUgZm9jdXNhYmxlIGJ5IEphdmFTY3JpcHQgb25seS5cbiAgICAgIC8vICAgLSBJZiB0aGUgdGFiaW5kZXggaXMgMCwgdGhlIGNvbnN1bWVyIHdhbnRzIHRoZSBpY29uIHRvIGJlIGtleWJvYXJkIGZvY3VzYWJsZS5cblxuICAgICAgdmFyIGZvY3VzYWJsZSA9IHRhYkluZGV4ID09IG51bGwgfHwgdGFiSW5kZXggPT09IC0xID8gJ2ZhbHNlJyA6ICd0cnVlJztcblxuICAgICAgaWYgKHR5cGVvZiBpY29uID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImltZ1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgYWx0OiB0aXRsZSA/IHRpdGxlIDogJycsXG4gICAgICAgICAgc3JjOiBpY29uLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXhcbiAgICAgICAgfSwgcmVzdCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIFN2ZyA9IGljb247IC8vIElmIGl0J3MgYW4gZW1wdHkgaWNvbiwgb3IgaWYgdGhlcmUgaXMgbm8gYXJpYS1sYWJlbCwgYXJpYS1sYWJlbGxlZGJ5LCBvciB0aXRsZSBpdCBnZXRzIGFyaWEtaGlkZGVuIHRydWVcblxuICAgICAgICB2YXIgaXNBcmlhSGlkZGVuID0gaWNvbiA9PT0gZW1wdHkgfHwgISh0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10gfHwgdGhpcy5wcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10gfHwgdGhpcy5wcm9wcy50aXRsZSk7XG4gICAgICAgIHZhciBoaWRlSWNvbkVtcHR5ID0gaXNBcmlhSGlkZGVuICYmIHtcbiAgICAgICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHZhciB0aXRsZUlkOyAvLyBJZiBubyBhcmlhLWxhYmVsIG9yIGFyaWEtbGFiZWxsZWRieSBpcyBwcm92aWRlZCBidXQgdGhlcmUncyBhIHRpdGxlLCBhIHRpdGxlSWQgaXMgZ2VuZXJhdGVkXG4gICAgICAgIC8vICBUaGUgc3ZnIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgZ2V0cyB0aGlzIHRpdGxlSWRcbiAgICAgICAgLy8gIFRoZSBzdmcgdGl0bGUgZWxlbWVudCBnZXRzIHRoaXMgdGl0bGVJZCBhcyBhbiBpZFxuXG4gICAgICAgIGlmICghdGhpcy5wcm9wc1snYXJpYS1sYWJlbCddICYmICF0aGlzLnByb3BzWydhcmlhLWxhYmVsbGVkYnknXSAmJiB0aXRsZSkge1xuICAgICAgICAgIHRpdGxlSWQgPSB7XG4gICAgICAgICAgICB0aXRsZUlkOiBnZW5lcmF0ZUlkKClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goU3ZnLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlcyxcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICAgICAgZm9jdXNhYmxlOiBmb2N1c2FibGUsXG4gICAgICAgICAgcm9sZTogXCJpbWdcIixcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgXCJkYXRhLWljb24tdHlwZVwiOiBpY29uVGl0bGUsXG4gICAgICAgICAgXCJkYXRhLWlzLWxvYWRlZFwiOiBpc0xvYWRlZCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgXCJkYXRhLWlzLWxvYWRpbmdcIjogaXNMb2FkaW5nIHx8IHVuZGVmaW5lZFxuICAgICAgICB9LCB0aXRsZUlkLCByZXN0LCBoaWRlSWNvbkVtcHR5KSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUljb25DbGFzcztcbn0oUHVyZUNvbXBvbmVudCk7XG5FdWlJY29uQ2xhc3MucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBgRW51bWAgaXMgYW55IG9mIHRoZSBuYW1lZCBpY29ucyBsaXN0ZWQgaW4gdGhlIGRvY3MsIGBzdHJpbmdgIGlzIHVzdWFsbHkgYSBVUkwgdG8gYW4gU1ZHIGZpbGUsIGFuZCBgZWxlbWVudFR5cGVgIGlzIGFueSBSZWFjdCBTVkcgY29tcG9uZW50XG4gICAgICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIE9uZSBvZiBFVUkncyBjb2xvciBwYWxldHRlIG9yIGEgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jb2xvcl92YWx1ZS5cbiAgICAgICAqIE5vdGUgdGhhdCBjb2xvcmluZyBvbmx5IHdvcmtzIGlmIHlvdXIgU1ZHIGlzIHJlbW92ZWQgb2YgZmlsbCBhdHRyaWJ1dGVzLlxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogTm90ZSB0aGF0IGV2ZXJ5IHNpemUgb3RoZXIgdGhhbiBgb3JpZ2luYWxgIGFzc3VtZXMgdGhlIHByb3ZpZGVkIFNWRyBzaXRzIG9uIGEgc3F1YXJlIHZpZXdib3guXG4gICAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIERlc2NyaXB0aXZlIHRpdGxlIGZvciBuYW1pbmcgdGhlIGljb24gYmFzZWQgb24gaXRzIHVzZVxuICAgICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHRpdGxlIGVsZW1lbnRcbiAgICAgICAqL1xuICB0aXRsZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogSXRzIHZhbHVlIHNob3VsZCBiZSBvbmUgb3IgbW9yZSBlbGVtZW50IElEc1xuICAgICAgICovXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBDYWxsYmFjayB3aGVuIHRoZSBpY29uIGhhcyBiZWVuIGxvYWRlZCAmIHJlbmRlcmVkXG4gICAgICAgKi9cbiAgb25JY29uTG9hZDogUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnQgdmFyIEV1aUljb24gPSB3aXRoRXVpVGhlbWUoRXVpSWNvbkNsYXNzKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgdHlwZVRvUGF0aE1hcCA9IHtcbiAgYWNjZXNzaWJpbGl0eTogJ2FjY2Vzc2liaWxpdHknLFxuICBhZGREYXRhQXBwOiAnYXBwX2FkZF9kYXRhJyxcbiAgYWR2YW5jZWRTZXR0aW5nc0FwcDogJ2FwcF9hZHZhbmNlZF9zZXR0aW5ncycsXG4gIGFnZW50QXBwOiAnYXBwX2ZsZWV0JyxcbiAgYWdncmVnYXRlOiAnYWdncmVnYXRlJyxcbiAgYWxlcnQ6ICdhbGVydCcsXG4gIGFuYWx5emVFdmVudDogJ2FuYWx5emVFdmVudCcsXG4gIGFubm90YXRpb246ICdhbm5vdGF0aW9uJyxcbiAgYXBtQXBwOiAnYXBwX2FwbScsXG4gIGFwbVRyYWNlOiAnYXBtX3RyYWNlJyxcbiAgYXBwU2VhcmNoQXBwOiAnYXBwX2FwcF9zZWFyY2gnLFxuICBhcHBzOiAnYXBwcycsXG4gIGFycm93RG93bjogJ2Fycm93X2Rvd24nLFxuICBhcnJvd0xlZnQ6ICdhcnJvd19sZWZ0JyxcbiAgYXJyb3dSaWdodDogJ2Fycm93X3JpZ2h0JyxcbiAgYXJyb3dVcDogJ2Fycm93X3VwJyxcbiAgYXJyb3dTdGFydDogJ2Fycm93U3RhcnQnLFxuICBhcnJvd0VuZDogJ2Fycm93RW5kJyxcbiAgYXN0ZXJpc2s6ICdhc3RlcmlzaycsXG4gIGF1ZGl0YmVhdEFwcDogJ2FwcF9hdWRpdGJlYXQnLFxuICBiZWFrZXI6ICdiZWFrZXInLFxuICBiZWxsOiAnYmVsbCcsXG4gIGJlbGxTbGFzaDogJ2JlbGxTbGFzaCcsXG4gIGJvbHQ6ICdib2x0JyxcbiAgYm94ZXNIb3Jpem9udGFsOiAnYm94ZXNfaG9yaXpvbnRhbCcsXG4gIGJveGVzVmVydGljYWw6ICdib3hlc192ZXJ0aWNhbCcsXG4gIGJyYW5jaDogJ2JyYW5jaCcsXG4gIGJyYW5jaFVzZXI6ICdicmFuY2hVc2VyJyxcbiAgYnJvb206ICdicm9vbScsXG4gIGJydXNoOiAnYnJ1c2gnLFxuICBidWc6ICdidWcnLFxuICBidWxsc2V5ZTogJ2J1bGxzZXllJyxcbiAgY2FsZW5kYXI6ICdjYWxlbmRhcicsXG4gIGNhbnZhc0FwcDogJ2FwcF9jYW52YXMnLFxuICBjYXNlc0FwcDogJ2FwcF9jYXNlcycsXG4gIGNoZWNrOiAnY2hlY2snLFxuICBjaGVja0luQ2lyY2xlRmlsbGVkOiAnY2hlY2tJbkNpcmNsZUZpbGxlZCcsXG4gIGNoZWVyOiAnY2hlZXInLFxuICBjbGFzc2lmaWNhdGlvbkpvYjogJ21sX2NsYXNzaWZpY2F0aW9uX2pvYicsXG4gIGNsb2NrOiAnY2xvY2snLFxuICBjbG91ZERyaXp6bGU6ICdjbG91ZERyaXp6bGUnLFxuICBjbG91ZFN0b3JteTogJ2Nsb3VkU3Rvcm15JyxcbiAgY2xvdWRTdW5ueTogJ2Nsb3VkU3VubnknLFxuICBjbHVzdGVyOiAnY2x1c3RlcicsXG4gIGNvZGVBcHA6ICdhcHBfY29kZScsXG4gIGNvbG9yOiAnY29sb3InLFxuICBjb21wdXRlOiAnY29tcHV0ZScsXG4gIGNvbnNvbGU6ICdjb25zb2xlJyxcbiAgY29uc29sZUFwcDogJ2FwcF9jb25zb2xlJyxcbiAgY29udGFpbmVyOiAnY29udGFpbmVyJyxcbiAgY29udGludWl0eUFib3ZlOiAnY29udGludWl0eUFib3ZlJyxcbiAgY29udGludWl0eUFib3ZlQmVsb3c6ICdjb250aW51aXR5QWJvdmVCZWxvdycsXG4gIGNvbnRpbnVpdHlCZWxvdzogJ2NvbnRpbnVpdHlCZWxvdycsXG4gIGNvbnRpbnVpdHlXaXRoaW46ICdjb250aW51aXR5V2l0aGluJyxcbiAgY29udHJvbHNIb3Jpem9udGFsOiAnY29udHJvbHNfaG9yaXpvbnRhbCcsXG4gIGNvbnRyb2xzVmVydGljYWw6ICdjb250cm9sc192ZXJ0aWNhbCcsXG4gIGNvcHk6ICdjb3B5JyxcbiAgY29weUNsaXBib2FyZDogJ2NvcHlfY2xpcGJvYXJkJyxcbiAgY3JlYXRlQWR2YW5jZWRKb2I6ICdtbF9jcmVhdGVfYWR2YW5jZWRfam9iJyxcbiAgY3JlYXRlTXVsdGlNZXRyaWNKb2I6ICdtbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYicsXG4gIGNyZWF0ZVBvcHVsYXRpb25Kb2I6ICdtbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InLFxuICBjcmVhdGVTaW5nbGVNZXRyaWNKb2I6ICdtbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2InLFxuICBjcm9zczogJ2Nyb3NzJyxcbiAgY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHA6ICdhcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbicsXG4gIGNyb3NzSW5BQ2lyY2xlRmlsbGVkOiAnY3Jvc3NJbkFDaXJjbGVGaWxsZWQnLFxuICBjcm9zc2hhaXJzOiAnY3Jvc3NoYWlycycsXG4gIGN1cnJlbmN5OiAnY3VycmVuY3knLFxuICBjdXQ6ICdjdXQnLFxuICBkYXNoYm9hcmRBcHA6ICdhcHBfZGFzaGJvYXJkJyxcbiAgZGF0YVZpc3VhbGl6ZXI6ICdtbF9kYXRhX3Zpc3VhbGl6ZXInLFxuICBkYXRhYmFzZTogJ2RhdGFiYXNlJyxcbiAgZGVza3RvcDogJ2Rlc2t0b3AnLFxuICBkZXZUb29sc0FwcDogJ2FwcF9kZXZ0b29scycsXG4gIGRpc2NvdmVyQXBwOiAnYXBwX2Rpc2NvdmVyJyxcbiAgZG9jdW1lbnQ6ICdkb2N1bWVudCcsXG4gIGRvY3VtZW50RWRpdDogJ2RvY3VtZW50RWRpdCcsXG4gIGRvY3VtZW50YXRpb246ICdkb2N1bWVudGF0aW9uJyxcbiAgZG9jdW1lbnRzOiAnZG9jdW1lbnRzJyxcbiAgZG90OiAnZG90JyxcbiAgZG91YmxlQXJyb3dMZWZ0OiAnZG91YmxlQXJyb3dMZWZ0JyxcbiAgZG91YmxlQXJyb3dSaWdodDogJ2RvdWJsZUFycm93UmlnaHQnLFxuICBkb3dubG9hZDogJ2Rvd25sb2FkJyxcbiAgZWRpdG9yQWxpZ25DZW50ZXI6ICdlZGl0b3JfYWxpZ25fY2VudGVyJyxcbiAgZWRpdG9yQWxpZ25MZWZ0OiAnZWRpdG9yX2FsaWduX2xlZnQnLFxuICBlZGl0b3JBbGlnblJpZ2h0OiAnZWRpdG9yX2FsaWduX3JpZ2h0JyxcbiAgZWRpdG9yQm9sZDogJ2VkaXRvcl9ib2xkJyxcbiAgZWRpdG9yQ2hlY2tsaXN0OiAnZWRpdG9yX2NoZWNrbGlzdCcsXG4gIGVkaXRvckNvZGVCbG9jazogJ2VkaXRvcl9jb2RlX2Jsb2NrJyxcbiAgZWRpdG9yQ29tbWVudDogJ2VkaXRvcl9jb21tZW50JyxcbiAgZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWw6ICdlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCcsXG4gIGVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbDogJ2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCcsXG4gIGVkaXRvckhlYWRpbmc6ICdlZGl0b3JfaGVhZGluZycsXG4gIGVkaXRvckl0YWxpYzogJ2VkaXRvcl9pdGFsaWMnLFxuICBlZGl0b3JJdGVtQWxpZ25Cb3R0b206ICdlZGl0b3JJdGVtQWxpZ25Cb3R0b20nLFxuICBlZGl0b3JJdGVtQWxpZ25DZW50ZXI6ICdlZGl0b3JJdGVtQWxpZ25DZW50ZXInLFxuICBlZGl0b3JJdGVtQWxpZ25MZWZ0OiAnZWRpdG9ySXRlbUFsaWduTGVmdCcsXG4gIGVkaXRvckl0ZW1BbGlnbk1pZGRsZTogJ2VkaXRvckl0ZW1BbGlnbk1pZGRsZScsXG4gIGVkaXRvckl0ZW1BbGlnblJpZ2h0OiAnZWRpdG9ySXRlbUFsaWduUmlnaHQnLFxuICBlZGl0b3JJdGVtQWxpZ25Ub3A6ICdlZGl0b3JJdGVtQWxpZ25Ub3AnLFxuICBlZGl0b3JMaW5rOiAnZWRpdG9yX2xpbmsnLFxuICBlZGl0b3JPcmRlcmVkTGlzdDogJ2VkaXRvcl9vcmRlcmVkX2xpc3QnLFxuICBlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQ6ICdlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnLFxuICBlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0OiAnZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCcsXG4gIGVkaXRvclBvc2l0aW9uVG9wTGVmdDogJ2VkaXRvclBvc2l0aW9uVG9wTGVmdCcsXG4gIGVkaXRvclBvc2l0aW9uVG9wUmlnaHQ6ICdlZGl0b3JQb3NpdGlvblRvcFJpZ2h0JyxcbiAgZWRpdG9yUmVkbzogJ2VkaXRvcl9yZWRvJyxcbiAgZWRpdG9yU3RyaWtlOiAnZWRpdG9yX3N0cmlrZScsXG4gIGVkaXRvclRhYmxlOiAnZWRpdG9yX3RhYmxlJyxcbiAgZWRpdG9yVW5kZXJsaW5lOiAnZWRpdG9yX3VuZGVybGluZScsXG4gIGVkaXRvclVuZG86ICdlZGl0b3JfdW5kbycsXG4gIGVkaXRvclVub3JkZXJlZExpc3Q6ICdlZGl0b3JfdW5vcmRlcmVkX2xpc3QnLFxuICBlbWFpbDogJ2VtYWlsJyxcbiAgZW1wdHk6ICdlbXB0eScsXG4gIGVtc0FwcDogJ2FwcF9lbXMnLFxuICBlcWw6ICdlcWwnLFxuICBlcmFzZXI6ICdlcmFzZXInLFxuICBleGl0OiAnZXhpdCcsXG4gIGV4cGFuZDogJ2V4cGFuZCcsXG4gIGV4cGFuZE1pbmk6ICdleHBhbmRNaW5pJyxcbiAgZXhwb3J0QWN0aW9uOiAnZXhwb3J0JyxcbiAgZXllOiAnZXllJyxcbiAgZXllQ2xvc2VkOiAnZXllX2Nsb3NlZCcsXG4gIGZhY2VIYXBweTogJ2ZhY2VfaGFwcHknLFxuICBmYWNlTmV1dHJhbDogJ2ZhY2VfbmV1dHJhbCcsXG4gIGZhY2VTYWQ6ICdmYWNlX3NhZCcsXG4gIGZpbGViZWF0QXBwOiAnYXBwX2ZpbGViZWF0JyxcbiAgZmlsdGVyOiAnZmlsdGVyJyxcbiAgZmxhZzogJ2ZsYWcnLFxuICBmbGVldEFwcDogJ2FwcF9hZ2VudCcsXG4gIGZvbGQ6ICdmb2xkJyxcbiAgZm9sZGVyQ2hlY2s6ICdmb2xkZXJfY2hlY2snLFxuICBmb2xkZXJDbG9zZWQ6ICdmb2xkZXJfY2xvc2VkJyxcbiAgZm9sZGVyRXhjbGFtYXRpb246ICdmb2xkZXJfZXhjbGFtYXRpb24nLFxuICBmb2xkZXJPcGVuOiAnZm9sZGVyX29wZW4nLFxuICBmcmFtZU5leHQ6ICdmcmFtZU5leHQnLFxuICBmcmFtZVByZXZpb3VzOiAnZnJhbWVQcmV2aW91cycsXG4gIGZ1bGxTY3JlZW46ICdmdWxsX3NjcmVlbicsXG4gIGZ1bGxTY3JlZW5FeGl0OiAnZnVsbFNjcmVlbkV4aXQnLFxuICBmdW5jdGlvbjogJ2Z1bmN0aW9uJyxcbiAgZ2VhcjogJ2dlYXInLFxuICBnaXNBcHA6ICdhcHBfZ2lzJyxcbiAgZ2xhc3NlczogJ2dsYXNzZXMnLFxuICBnbG9iZTogJ2dsb2JlJyxcbiAgZ3JhYjogJ2dyYWInLFxuICBncmFiSG9yaXpvbnRhbDogJ2dyYWJfaG9yaXpvbnRhbCcsXG4gIGdyYXBoQXBwOiAnYXBwX2dyYXBoJyxcbiAgZ3JpZDogJ2dyaWQnLFxuICBncm9rQXBwOiAnYXBwX2dyb2snLFxuICBoZWFydDogJ2hlYXJ0JyxcbiAgaGVhcnRiZWF0QXBwOiAnYXBwX2hlYXJ0YmVhdCcsXG4gIGhlYXRtYXA6ICdoZWF0bWFwJyxcbiAgaGVscDogJ2hlbHAnLFxuICBob21lOiAnaG9tZScsXG4gIGlJbkNpcmNsZTogJ2lJbkNpcmNsZScsXG4gIGltYWdlOiAnaW1hZ2UnLFxuICBpbXBvcnRBY3Rpb246ICdpbXBvcnQnLFxuICBpbmRleENsb3NlOiAnaW5kZXhfY2xvc2UnLFxuICBpbmRleEVkaXQ6ICdpbmRleF9lZGl0JyxcbiAgaW5kZXhGbHVzaDogJ2luZGV4X2ZsdXNoJyxcbiAgaW5kZXhNYW5hZ2VtZW50QXBwOiAnYXBwX2luZGV4X21hbmFnZW1lbnQnLFxuICBpbmRleE1hcHBpbmc6ICdpbmRleF9tYXBwaW5nJyxcbiAgaW5kZXhPcGVuOiAnaW5kZXhfb3BlbicsXG4gIGluZGV4UGF0dGVybkFwcDogJ2FwcF9pbmRleF9wYXR0ZXJuJyxcbiAgaW5kZXhSb2xsdXBBcHA6ICdhcHBfaW5kZXhfcm9sbHVwJyxcbiAgaW5kZXhSdW50aW1lOiAnaW5kZXhfcnVudGltZScsXG4gIGluZGV4U2V0dGluZ3M6ICdpbmRleF9zZXR0aW5ncycsXG4gIGlucHV0T3V0cHV0OiAnaW5wdXRPdXRwdXQnLFxuICBpbnNwZWN0OiAnaW5zcGVjdCcsXG4gIGludmVydDogJ2ludmVydCcsXG4gIGlwOiAnaXAnLFxuICBrZXlib2FyZDogJ2tleWJvYXJkJyxcbiAga3FsRmllbGQ6ICdrcWxfZmllbGQnLFxuICBrcWxGdW5jdGlvbjogJ2txbF9mdW5jdGlvbicsXG4gIGtxbE9wZXJhbmQ6ICdrcWxfb3BlcmFuZCcsXG4gIGtxbFNlbGVjdG9yOiAna3FsX3NlbGVjdG9yJyxcbiAga3FsVmFsdWU6ICdrcWxfdmFsdWUnLFxuICBrdWJlcm5ldGVzTm9kZTogJ2t1YmVybmV0ZXNOb2RlJyxcbiAga3ViZXJuZXRlc1BvZDogJ2t1YmVybmV0ZXNQb2QnLFxuICBsYXllcnM6ICdsYXllcnMnLFxuICBsZW5zQXBwOiAnYXBwX2xlbnMnLFxuICBsZXR0ZXJpbmc6ICdsZXR0ZXJpbmcnLFxuICBsaW5lRGFzaGVkOiAnbGluZURhc2hlZCcsXG4gIGxpbmVEb3R0ZWQ6ICdsaW5lRG90dGVkJyxcbiAgbGluZVNvbGlkOiAnbGluZVNvbGlkJyxcbiAgbGluazogJ2xpbmsnLFxuICBsaXN0OiAnbGlzdCcsXG4gIGxpc3RBZGQ6ICdsaXN0X2FkZCcsXG4gIGxvY2s6ICdsb2NrJyxcbiAgbG9ja09wZW46ICdsb2NrT3BlbicsXG4gIGxvZ29BV1M6ICdsb2dvX2F3cycsXG4gIGxvZ29BV1NNb25vOiAnbG9nb19hd3NfbW9ubycsXG4gIGxvZ29BZXJvc3Bpa2U6ICdsb2dvX2Flcm9zcGlrZScsXG4gIGxvZ29BcGFjaGU6ICdsb2dvX2FwYWNoZScsXG4gIGxvZ29BcHBTZWFyY2g6ICdsb2dvX2FwcF9zZWFyY2gnLFxuICBsb2dvQXp1cmU6ICdsb2dvX2F6dXJlJyxcbiAgbG9nb0F6dXJlTW9ubzogJ2xvZ29fYXp1cmVfbW9ubycsXG4gIGxvZ29CZWF0czogJ2xvZ29fYmVhdHMnLFxuICBsb2dvQnVzaW5lc3NBbmFseXRpY3M6ICdsb2dvX2J1c2luZXNzX2FuYWx5dGljcycsXG4gIGxvZ29DZXBoOiAnbG9nb19jZXBoJyxcbiAgbG9nb0Nsb3VkOiAnbG9nb19jbG91ZCcsXG4gIGxvZ29DbG91ZEVudGVycHJpc2U6ICdsb2dvX2Nsb3VkX2VjZScsXG4gIGxvZ29Db2RlOiAnbG9nb19jb2RlJyxcbiAgbG9nb0NvZGVzYW5kYm94OiAnbG9nb19jb2Rlc2FuZGJveCcsXG4gIGxvZ29Db3VjaGJhc2U6ICdsb2dvX2NvdWNoYmFzZScsXG4gIGxvZ29Eb2NrZXI6ICdsb2dvX2RvY2tlcicsXG4gIGxvZ29Ecm9wd2l6YXJkOiAnbG9nb19kcm9wd2l6YXJkJyxcbiAgbG9nb0VsYXN0aWM6ICdsb2dvX2VsYXN0aWMnLFxuICBsb2dvRWxhc3RpY1N0YWNrOiAnbG9nb19lbGFzdGljX3N0YWNrJyxcbiAgbG9nb0VsYXN0aWNzZWFyY2g6ICdsb2dvX2VsYXN0aWNzZWFyY2gnLFxuICBsb2dvRW50ZXJwcmlzZVNlYXJjaDogJ2xvZ29fZW50ZXJwcmlzZV9zZWFyY2gnLFxuICBsb2dvRXRjZDogJ2xvZ29fZXRjZCcsXG4gIGxvZ29HQ1A6ICdsb2dvX2djcCcsXG4gIGxvZ29HQ1BNb25vOiAnbG9nb19nY3BfbW9ubycsXG4gIGxvZ29HaXRodWI6ICdsb2dvX2dpdGh1YicsXG4gIGxvZ29HbWFpbDogJ2xvZ29fZ21haWwnLFxuICBsb2dvR29sYW5nOiAnbG9nb19nb2xhbmcnLFxuICBsb2dvR29vZ2xlRzogJ2xvZ29fZ29vZ2xlX2cnLFxuICBsb2dvSEFwcm94eTogJ2xvZ29faGFwcm94eScsXG4gIGxvZ29JQk06ICdsb2dvX2libScsXG4gIGxvZ29JQk1Nb25vOiAnbG9nb19pYm1fbW9ubycsXG4gIGxvZ29LYWZrYTogJ2xvZ29fa2Fma2EnLFxuICBsb2dvS2liYW5hOiAnbG9nb19raWJhbmEnLFxuICBsb2dvS3ViZXJuZXRlczogJ2xvZ29fa3ViZXJuZXRlcycsXG4gIGxvZ29Mb2dnaW5nOiAnbG9nb19sb2dnaW5nJyxcbiAgbG9nb0xvZ3N0YXNoOiAnbG9nb19sb2dzdGFzaCcsXG4gIGxvZ29NYXBzOiAnbG9nb19tYXBzJyxcbiAgbG9nb01lbWNhY2hlZDogJ2xvZ29fbWVtY2FjaGVkJyxcbiAgbG9nb01ldHJpY3M6ICdsb2dvX21ldHJpY3MnLFxuICBsb2dvTW9uZ29kYjogJ2xvZ29fbW9uZ29kYicsXG4gIGxvZ29NeVNRTDogJ2xvZ29fbXlzcWwnLFxuICBsb2dvTmdpbng6ICdsb2dvX25naW54JyxcbiAgbG9nb09ic2VydmFiaWxpdHk6ICdsb2dvX29ic2VydmFiaWxpdHknLFxuICBsb2dvT3NxdWVyeTogJ2xvZ29fb3NxdWVyeScsXG4gIGxvZ29QaHA6ICdsb2dvX3BocCcsXG4gIGxvZ29Qb3N0Z3JlczogJ2xvZ29fcG9zdGdyZXMnLFxuICBsb2dvUHJvbWV0aGV1czogJ2xvZ29fcHJvbWV0aGV1cycsXG4gIGxvZ29SYWJiaXRtcTogJ2xvZ29fcmFiYml0bXEnLFxuICBsb2dvUmVkaXM6ICdsb2dvX3JlZGlzJyxcbiAgbG9nb1NlY3VyaXR5OiAnbG9nb19zZWN1cml0eScsXG4gIGxvZ29TaXRlU2VhcmNoOiAnbG9nb19zaXRlX3NlYXJjaCcsXG4gIGxvZ29Ta2V0Y2g6ICdsb2dvX3NrZXRjaCcsXG4gIGxvZ29TbGFjazogJ2xvZ29fc2xhY2snLFxuICBsb2dvVXB0aW1lOiAnbG9nb191cHRpbWUnLFxuICBsb2dvV2ViaG9vazogJ2xvZ29fd2ViaG9vaycsXG4gIGxvZ29XaW5kb3dzOiAnbG9nb193aW5kb3dzJyxcbiAgbG9nb1dvcmtwbGFjZVNlYXJjaDogJ2xvZ29fd29ya3BsYWNlX3NlYXJjaCcsXG4gIGxvZ3NBcHA6ICdhcHBfbG9ncycsXG4gIGxvZ3N0YXNoRmlsdGVyOiAnbG9nc3Rhc2hfZmlsdGVyJyxcbiAgbG9nc3Rhc2hJZjogJ2xvZ3N0YXNoX2lmJyxcbiAgbG9nc3Rhc2hJbnB1dDogJ2xvZ3N0YXNoX2lucHV0JyxcbiAgbG9nc3Rhc2hPdXRwdXQ6ICdsb2dzdGFzaF9vdXRwdXQnLFxuICBsb2dzdGFzaFF1ZXVlOiAnbG9nc3Rhc2hfcXVldWUnLFxuICBtYWNoaW5lTGVhcm5pbmdBcHA6ICdhcHBfbWwnLFxuICBtYWduZXQ6ICdtYWduZXQnLFxuICBtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uOiAnbWFnbmlmeVdpdGhFeGNsYW1hdGlvbicsXG4gIG1hZ25pZnlXaXRoTWludXM6ICdtYWduaWZ5V2l0aE1pbnVzJyxcbiAgbWFnbmlmeVdpdGhQbHVzOiAnbWFnbmlmeVdpdGhQbHVzJyxcbiAgbWFuYWdlbWVudEFwcDogJ2FwcF9tYW5hZ2VtZW50JyxcbiAgbWFwTWFya2VyOiAnbWFwX21hcmtlcicsXG4gIG1lbW9yeTogJ21lbW9yeScsXG4gIG1lbnU6ICdtZW51JyxcbiAgbWVudURvd246ICdtZW51RG93bicsXG4gIG1lbnVMZWZ0OiAnbWVudUxlZnQnLFxuICBtZW51UmlnaHQ6ICdtZW51UmlnaHQnLFxuICBtZW51VXA6ICdtZW51VXAnLFxuICBtZXJnZTogJ21lcmdlJyxcbiAgbWV0cmljYmVhdEFwcDogJ2FwcF9tZXRyaWNiZWF0JyxcbiAgbWV0cmljc0FwcDogJ2FwcF9tZXRyaWNzJyxcbiAgbWluaW1pemU6ICdtaW5pbWl6ZScsXG4gIG1pbnVzOiAnbWludXMnLFxuICBtaW51c0luQ2lyY2xlOiAnbWludXNfaW5fY2lyY2xlJyxcbiAgbWludXNJbkNpcmNsZUZpbGxlZDogJ21pbnVzX2luX2NpcmNsZV9maWxsZWQnLFxuICBtb2JpbGU6ICdtb2JpbGUnLFxuICBtb25pdG9yaW5nQXBwOiAnYXBwX21vbml0b3JpbmcnLFxuICBtb29uOiAnbW9vbicsXG4gIG5hbWVzcGFjZTogJ25hbWVzcGFjZScsXG4gIG5lc3RlZDogJ25lc3RlZCcsXG4gIG5vZGU6ICdub2RlJyxcbiAgbm90ZWJvb2tBcHA6ICdhcHBfbm90ZWJvb2snLFxuICBudW1iZXI6ICdudW1iZXInLFxuICBvZmZsaW5lOiAnb2ZmbGluZScsXG4gIG9ubGluZTogJ29ubGluZScsXG4gIG91dGxpZXJEZXRlY3Rpb25Kb2I6ICdtbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InLFxuICBwYWNrYWdlOiAncGFja2FnZScsXG4gIHBhY2tldGJlYXRBcHA6ICdhcHBfcGFja2V0YmVhdCcsXG4gIHBhZ2VTZWxlY3Q6ICdwYWdlU2VsZWN0JyxcbiAgcGFnZXNTZWxlY3Q6ICdwYWdlc1NlbGVjdCcsXG4gIHBhcGVyQ2xpcDogJ3BhcGVyX2NsaXAnLFxuICBwYXJ0aWFsOiAncGFydGlhbCcsXG4gIHBhdXNlOiAncGF1c2UnLFxuICBwYXltZW50OiAncGF5bWVudCcsXG4gIHBlbmNpbDogJ3BlbmNpbCcsXG4gIHBlcmNlbnQ6ICdwZXJjZW50JyxcbiAgcGluOiAncGluJyxcbiAgcGluRmlsbGVkOiAncGluX2ZpbGxlZCcsXG4gIHBpcGVsaW5lQXBwOiAnYXBwX3BpcGVsaW5lJyxcbiAgcGxheTogJ3BsYXknLFxuICBwbGF5RmlsbGVkOiAncGxheUZpbGxlZCcsXG4gIHBsdXM6ICdwbHVzJyxcbiAgcGx1c0luQ2lyY2xlOiAncGx1c19pbl9jaXJjbGUnLFxuICBwbHVzSW5DaXJjbGVGaWxsZWQ6ICdwbHVzX2luX2NpcmNsZV9maWxsZWQnLFxuICBwb3BvdXQ6ICdwb3BvdXQnLFxuICBwdXNoOiAncHVzaCcsXG4gIHF1ZXN0aW9uSW5DaXJjbGU6ICdxdWVzdGlvbl9pbl9jaXJjbGUnLFxuICBxdW90ZTogJ3F1b3RlJyxcbiAgcmVjZW50bHlWaWV3ZWRBcHA6ICdhcHBfcmVjZW50bHlfdmlld2VkJyxcbiAgcmVmcmVzaDogJ3JlZnJlc2gnLFxuICByZWdyZXNzaW9uSm9iOiAnbWxfcmVncmVzc2lvbl9qb2InLFxuICByZXBvcnRlcjogJ3JlcG9ydGVyJyxcbiAgcmVwb3J0aW5nQXBwOiAnYXBwX3JlcG9ydGluZycsXG4gIHJldHVybktleTogJ3JldHVybl9rZXknLFxuICBzYXZlOiAnc2F2ZScsXG4gIHNhdmVkT2JqZWN0c0FwcDogJ2FwcF9zYXZlZF9vYmplY3RzJyxcbiAgc2NhbGU6ICdzY2FsZScsXG4gIHNlYXJjaDogJ3NlYXJjaCcsXG4gIHNlYXJjaFByb2ZpbGVyQXBwOiAnYXBwX3NlYXJjaF9wcm9maWxlcicsXG4gIHNlY3VyaXR5QW5hbHl0aWNzQXBwOiAnYXBwX3NlY3VyaXR5X2FuYWx5dGljcycsXG4gIHNlY3VyaXR5QXBwOiAnYXBwX3NlY3VyaXR5JyxcbiAgc2VjdXJpdHlTaWduYWw6ICdzZWN1cml0eVNpZ25hbCcsXG4gIHNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQ6ICdzZWN1cml0eVNpZ25hbERldGVjdGVkJyxcbiAgc2VjdXJpdHlTaWduYWxSZXNvbHZlZDogJ3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQnLFxuICBzZXNzaW9uVmlld2VyOiAnc2Vzc2lvblZpZXdlcicsXG4gIHNoYXJkOiAnc2hhcmQnLFxuICBzaGFyZTogJ3NoYXJlJyxcbiAgc25vd2ZsYWtlOiAnc25vd2ZsYWtlJyxcbiAgc29ydERvd246ICdzb3J0X2Rvd24nLFxuICBzb3J0TGVmdDogJ3NvcnRMZWZ0JyxcbiAgc29ydFJpZ2h0OiAnc29ydFJpZ2h0JyxcbiAgc29ydFVwOiAnc29ydF91cCcsXG4gIHNvcnRhYmxlOiAnc29ydGFibGUnLFxuICBzcGFjZXNBcHA6ICdhcHBfc3BhY2VzJyxcbiAgc3FsQXBwOiAnYXBwX3NxbCcsXG4gIHN0YXJFbXB0eTogJ3N0YXJfZW1wdHknLFxuICBzdGFyRW1wdHlTcGFjZTogJ3N0YXJfZW1wdHlfc3BhY2UnLFxuICBzdGFyRmlsbGVkOiAnc3Rhcl9maWxsZWQnLFxuICBzdGFyRmlsbGVkU3BhY2U6ICdzdGFyX2ZpbGxlZF9zcGFjZScsXG4gIHN0YXJNaW51c0VtcHR5OiAnc3Rhcl9taW51c19lbXB0eScsXG4gIHN0YXJNaW51c0ZpbGxlZDogJ3N0YXJfbWludXNfZmlsbGVkJyxcbiAgc3RhclBsdXNFbXB0eTogJ3N0YXJQbHVzRW1wdHknLFxuICBzdGFyUGx1c0ZpbGxlZDogJ3N0YXJQbHVzRmlsbGVkJyxcbiAgc3RhdHM6ICdzdGF0cycsXG4gIHN0b3A6ICdzdG9wJyxcbiAgc3RvcEZpbGxlZDogJ3N0b3BfZmlsbGVkJyxcbiAgc3RvcFNsYXNoOiAnc3RvcF9zbGFzaCcsXG4gIHN0b3JhZ2U6ICdzdG9yYWdlJyxcbiAgc3RyaW5nOiAnc3RyaW5nJyxcbiAgc3VibW9kdWxlOiAnc3VibW9kdWxlJyxcbiAgc3VuOiAnc3VuJyxcbiAgc3dhdGNoSW5wdXQ6ICdzd2F0Y2hfaW5wdXQnLFxuICAvLyBVbmRvY3VtZW50ZWQgb24gcHVycG9zZS4gSGFzIGFuIGV4dHJhIHN0cm9rZSBmb3IgRXVpQ29sb3JQaWNrZXJcbiAgc3ltbGluazogJ3N5bWxpbmsnLFxuICB0YWJsZURlbnNpdHlDb21wYWN0OiAndGFibGVfZGVuc2l0eV9jb21wYWN0JyxcbiAgdGFibGVEZW5zaXR5RXhwYW5kZWQ6ICd0YWJsZV9kZW5zaXR5X2V4cGFuZGVkJyxcbiAgdGFibGVEZW5zaXR5Tm9ybWFsOiAndGFibGVfZGVuc2l0eV9ub3JtYWwnLFxuICB0YWJsZU9mQ29udGVudHM6ICd0YWJsZU9mQ29udGVudHMnLFxuICB0YWc6ICd0YWcnLFxuICB0ZWFyOiAndGVhcicsXG4gIHRlbXBlcmF0dXJlOiAndGVtcGVyYXR1cmUnLFxuICB0aW1lbGluZTogJ3RpbWVsaW5lJyxcbiAgdGltZWxpb25BcHA6ICdhcHBfdGltZWxpb24nLFxuICB0aW1lUmVmcmVzaDogJ3RpbWVSZWZyZXNoJyxcbiAgdGltZXNsaWRlcjogJ3RpbWVzbGlkZXInLFxuICB0cmFpbmluZzogJ3RyYWluaW5nJyxcbiAgdHJhc2g6ICd0cmFzaCcsXG4gIHVuZm9sZDogJ3VuZm9sZCcsXG4gIHVubGluazogJ3VubGluaycsXG4gIHVwZ3JhZGVBc3Npc3RhbnRBcHA6ICdhcHBfdXBncmFkZV9hc3Npc3RhbnQnLFxuICB1cHRpbWVBcHA6ICdhcHBfdXB0aW1lJyxcbiAgdXNlcjogJ3VzZXInLFxuICB1c2VyQXZhdGFyOiAndXNlckF2YXRhcicsXG4gIHVzZXJzOiAndXNlcnMnLFxuICB1c2Vyc1JvbGVzQXBwOiAnYXBwX3VzZXJzX3JvbGVzJyxcbiAgdmVjdG9yOiAndmVjdG9yJyxcbiAgdmlkZW9QbGF5ZXI6ICd2aWRlb1BsYXllcicsXG4gIHZpc0FyZWE6ICd2aXNfYXJlYScsXG4gIHZpc0FyZWFTdGFja2VkOiAndmlzX2FyZWFfc3RhY2tlZCcsXG4gIHZpc0Jhckhvcml6b250YWw6ICd2aXNfYmFyX2hvcml6b250YWwnLFxuICB2aXNCYXJIb3Jpem9udGFsU3RhY2tlZDogJ3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJyxcbiAgdmlzQmFyVmVydGljYWw6ICd2aXNfYmFyX3ZlcnRpY2FsJyxcbiAgdmlzQmFyVmVydGljYWxTdGFja2VkOiAndmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJyxcbiAgdmlzR2F1Z2U6ICd2aXNfZ2F1Z2UnLFxuICB2aXNHb2FsOiAndmlzX2dvYWwnLFxuICB2aXNMaW5lOiAndmlzX2xpbmUnLFxuICB2aXNNYXBDb29yZGluYXRlOiAndmlzX21hcF9jb29yZGluYXRlJyxcbiAgdmlzTWFwUmVnaW9uOiAndmlzX21hcF9yZWdpb24nLFxuICB2aXNNZXRyaWM6ICd2aXNfbWV0cmljJyxcbiAgdmlzUGllOiAndmlzX3BpZScsXG4gIHZpc1RhYmxlOiAndmlzX3RhYmxlJyxcbiAgdmlzVGFnQ2xvdWQ6ICd2aXNfdGFnX2Nsb3VkJyxcbiAgdmlzVGV4dDogJ3Zpc190ZXh0JyxcbiAgdmlzVGltZWxpb246ICd2aXNfdGltZWxpb24nLFxuICB2aXNWZWdhOiAndmlzX3ZlZ2EnLFxuICB2aXNWaXN1YWxCdWlsZGVyOiAndmlzX3Zpc3VhbF9idWlsZGVyJyxcbiAgdmlzdWFsaXplQXBwOiAnYXBwX3Zpc3VhbGl6ZScsXG4gIHdhdGNoZXNBcHA6ICdhcHBfd2F0Y2hlcycsXG4gIHdvcmRXcmFwOiAnd29yZFdyYXAnLFxuICB3b3JkV3JhcERpc2FibGVkOiAnd29yZFdyYXBEaXNhYmxlZCcsXG4gIHdvcmtwbGFjZVNlYXJjaEFwcDogJ2FwcF93b3JrcGxhY2Vfc2VhcmNoJyxcbiAgd3JlbmNoOiAnd3JlbmNoJyxcbiAgLy8gVG9rZW4gSWNvbiBJbXBvcnRzXG4gIHRva2VuQWxpYXM6ICd0b2tlbkFsaWFzJyxcbiAgdG9rZW5Bbm5vdGF0aW9uOiAndG9rZW5Bbm5vdGF0aW9uJyxcbiAgdG9rZW5BcnJheTogJ3Rva2VuQXJyYXknLFxuICB0b2tlbkJpbmFyeTogJ3Rva2VuQmluYXJ5JyxcbiAgdG9rZW5Cb29sZWFuOiAndG9rZW5Cb29sZWFuJyxcbiAgdG9rZW5DbGFzczogJ3Rva2VuQ2xhc3MnLFxuICB0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXI6ICd0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXInLFxuICB0b2tlbkNvbnN0YW50OiAndG9rZW5Db25zdGFudCcsXG4gIHRva2VuRGF0ZTogJ3Rva2VuRGF0ZScsXG4gIHRva2VuRGVuc2VWZWN0b3I6ICd0b2tlbkRlbnNlVmVjdG9yJyxcbiAgdG9rZW5FbGVtZW50OiAndG9rZW5FbGVtZW50JyxcbiAgdG9rZW5FbnVtOiAndG9rZW5FbnVtJyxcbiAgdG9rZW5FbnVtTWVtYmVyOiAndG9rZW5FbnVtTWVtYmVyJyxcbiAgdG9rZW5FdmVudDogJ3Rva2VuRXZlbnQnLFxuICB0b2tlbkV4Y2VwdGlvbjogJ3Rva2VuRXhjZXB0aW9uJyxcbiAgdG9rZW5GaWVsZDogJ3Rva2VuRmllbGQnLFxuICB0b2tlbkZpbGU6ICd0b2tlbkZpbGUnLFxuICB0b2tlbkZsYXR0ZW5lZDogJ3Rva2VuRmxhdHRlbmVkJyxcbiAgdG9rZW5GdW5jdGlvbjogJ3Rva2VuRnVuY3Rpb24nLFxuICB0b2tlbkdlbzogJ3Rva2VuR2VvJyxcbiAgdG9rZW5IaXN0b2dyYW06ICd0b2tlbkhpc3RvZ3JhbScsXG4gIHRva2VuSW50ZXJmYWNlOiAndG9rZW5JbnRlcmZhY2UnLFxuICB0b2tlbklQOiAndG9rZW5JUCcsXG4gIHRva2VuSm9pbjogJ3Rva2VuSm9pbicsXG4gIHRva2VuS2V5OiAndG9rZW5LZXknLFxuICB0b2tlbktleXdvcmQ6ICd0b2tlbktleXdvcmQnLFxuICB0b2tlbk1ldGhvZDogJ3Rva2VuTWV0aG9kJyxcbiAgdG9rZW5NZXRyaWNDb3VudGVyOiAndG9rZW5NZXRyaWNDb3VudGVyJyxcbiAgdG9rZW5NZXRyaWNHYXVnZTogJ3Rva2VuTWV0cmljR2F1Z2UnLFxuICB0b2tlbk1vZHVsZTogJ3Rva2VuTW9kdWxlJyxcbiAgdG9rZW5OYW1lc3BhY2U6ICd0b2tlbk5hbWVzcGFjZScsXG4gIHRva2VuTmVzdGVkOiAndG9rZW5OZXN0ZWQnLFxuICB0b2tlbk51bGw6ICd0b2tlbk51bGwnLFxuICB0b2tlbk51bWJlcjogJ3Rva2VuTnVtYmVyJyxcbiAgdG9rZW5PYmplY3Q6ICd0b2tlbk9iamVjdCcsXG4gIHRva2VuT3BlcmF0b3I6ICd0b2tlbk9wZXJhdG9yJyxcbiAgdG9rZW5QYWNrYWdlOiAndG9rZW5QYWNrYWdlJyxcbiAgdG9rZW5QYXJhbWV0ZXI6ICd0b2tlblBhcmFtZXRlcicsXG4gIHRva2VuUGVyY29sYXRvcjogJ3Rva2VuUGVyY29sYXRvcicsXG4gIHRva2VuUHJvcGVydHk6ICd0b2tlblByb3BlcnR5JyxcbiAgdG9rZW5SYW5nZTogJ3Rva2VuUmFuZ2UnLFxuICB0b2tlblJhbmtGZWF0dXJlOiAndG9rZW5SYW5rRmVhdHVyZScsXG4gIHRva2VuUmFua0ZlYXR1cmVzOiAndG9rZW5SYW5rRmVhdHVyZXMnLFxuICB0b2tlblJlcG86ICd0b2tlblJlcG8nLFxuICB0b2tlblNlYXJjaFR5cGU6ICd0b2tlblNlYXJjaFR5cGUnLFxuICB0b2tlblNoYXBlOiAndG9rZW5TaGFwZScsXG4gIHRva2VuU3RyaW5nOiAndG9rZW5TdHJpbmcnLFxuICB0b2tlblN0cnVjdDogJ3Rva2VuU3RydWN0JyxcbiAgdG9rZW5TeW1ib2w6ICd0b2tlblN5bWJvbCcsXG4gIHRva2VuVGFnOiAndG9rZW5UYWcnLFxuICB0b2tlblRleHQ6ICd0b2tlblRleHQnLFxuICB0b2tlblRva2VuQ291bnQ6ICd0b2tlblRva2VuQ291bnQnLFxuICB0b2tlblZhcmlhYmxlOiAndG9rZW5WYXJpYWJsZSdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJ3JlYWN0LWRvbSc7XG52YXIgX3F1ZXVlID0gW107XG5cbmZ1bmN0aW9uIHByb2Nlc3NRdWV1ZSgpIHtcbiAgLy8gdGhlIHF1ZXVlZCBmdW5jdGlvbnMgdHJpZ2dlciByZWFjdCBzZXRTdGF0ZXMgd2hpY2gsIGlmIHVuYmF0Y2hlZCxcbiAgLy8gZWFjaCBjYXVzZSBhIGZ1bGwgdXBkYXRlLT5yZW5kZXItPmRvbSBwYXNzIF9wZXIgZnVuY3Rpb25fXG4gIC8vIGluc3RlYWQsIHRlbGwgUmVhY3QgdG8gd2FpdCB1bnRpbCBhbGwgdXBkYXRlcyBhcmUgZmluaXNoZWQgYmVmb3JlIHJlLXJlbmRlcmluZ1xuICB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIF9xdWV1ZVtpXSgpO1xuICAgIH1cblxuICAgIF9xdWV1ZS5sZW5ndGggPSAwO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVucXVldWVTdGF0ZUNoYW5nZShmbikge1xuICBpZiAoX3F1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHNldFRpbWVvdXQocHJvY2Vzc1F1ZXVlKTtcbiAgfVxuXG4gIF9xdWV1ZS5wdXNoKGZuKTtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgQ09MT1JTID0gWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnd2FybmluZycsICdkYW5nZXInLCAndGV4dCcsICdzdWJkdWVkJywgJ2dob3N0JywgJ2luaGVyaXQnXTtcbmV4cG9ydCBmdW5jdGlvbiBpc05hbWVkQ29sb3IobmFtZSkge1xuICByZXR1cm4gQ09MT1JTLmluY2x1ZGVzKG5hbWUpO1xufSIsICJmdW5jdGlvbiBfb2JqZWN0RGVzdHJ1Y3R1cmluZ0VtcHR5KG9iaikgeyBpZiAob2JqID09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgZGVzdHJ1Y3R1cmUgdW5kZWZpbmVkXCIpOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgR2xvYmFsLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGV1aVNjcm9sbEJhclN0eWxlcyB9IGZyb20gJy4uL21peGlucyc7XG5pbXBvcnQgeyBzaGFkZSwgdGludCwgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IHJlc2V0U3R5bGVzIGFzIHJlc2V0IH0gZnJvbSAnLi9yZXNldCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlHbG9iYWxTdHlsZXMgPSBmdW5jdGlvbiBFdWlHbG9iYWxTdHlsZXMoX3JlZikge1xuICBfb2JqZWN0RGVzdHJ1Y3R1cmluZ0VtcHR5KF9yZWYpO1xuXG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICB2YXIgYmFzZSA9IGV1aVRoZW1lLmJhc2UsXG4gICAgICBjb2xvcnMgPSBldWlUaGVtZS5jb2xvcnMsXG4gICAgICBmb250ID0gZXVpVGhlbWUuZm9udDtcbiAgLyoqXG4gICAqIERlY2xhcmluZyB0aGUgdG9wIGxldmVsIHNjcm9sbGJhciBjb2xvcnMgdG8gbWF0Y2ggdGhlIHRoZW1lIGFsc28gcmVxdWlyZXMgc2V0dGluZyB0aGUgc2l6ZXMgb24gQ2hyb21lXG4gICAqIHNvIHRoYXQgaXQga25vd3MgdG8gdXNlIGN1c3RvbSBzdHlsZXMuIFRoZXJlZm9yZSwgd2UganVzdCByZXVzZSB0aGUgc2FtZSBzY3JvbGxiYXIgbWl4aW4gd2l0aCB0aGljayBzaXplLlxuICAgKi9cblxuICB2YXIgc2Nyb2xsYmFyU3R5bGVzID0gZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwge1xuICAgIHRyYWNrQ29sb3I6IGNvbG9yTW9kZSA9PT0gJ0xJR0hUJyA/IHNoYWRlKGNvbG9ycy5ib2R5LCAwLjAzKSA6IHRpbnQoY29sb3JzLmJvZHksIDAuMDcpLFxuICAgIHdpZHRoOiAnYXV0bydcbiAgfSk7XG4gIC8qKlxuICAgKiBUaGlzIGZvbnQgcmVzZXQgc2V0cyBhbGwgb3VyIGJhc2UgZm9udC90eXBvZ3JhcGh5IHJlbGF0ZWQgcHJvcGVydGllc1xuICAgKiB0aGF0IGFyZSBuZWVkZWQgdG8gb3ZlcnJpZGUgYnJvd3Nlci1zcGVjaWZpYyBlbGVtZW50IHNldHRpbmdzLlxuICAgKi9cblxuICB2YXIgZm9udFJlc2V0ID0gXCJcXG4gICAgZm9udC1mYW1pbHk6IFwiLmNvbmNhdChmb250LmZhbWlseSwgXCI7XFxuICAgIGZvbnQtc2l6ZTogXCIsIFwiXCIuY29uY2F0KGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXSAqIGJhc2UsIFwicHhcIiksIFwiO1xcbiAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChiYXNlIC8gKGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXSAqIGJhc2UpLCBcIjtcXG4gICAgZm9udC13ZWlnaHQ6IFwiKS5jb25jYXQoZm9udC53ZWlnaHRbZm9udC5ib2R5LndlaWdodF0sIFwiO1xcbiAgXCIpO1xuICAvKipcbiAgICogRmluYWwgc3R5bGVzXG4gICAqL1xuXG4gIHZhciBzdHlsZXMgPSAvKiNfX1BVUkVfXyovY3NzKHJlc2V0LCBcIiBodG1se1wiLCBzY3JvbGxiYXJTdHlsZXMsIFwiIFwiLCBmb250UmVzZXQsIFwiIHRleHQtc2l6ZS1hZGp1c3Q6MTAwJTtmb250LWtlcm5pbmc6bm9ybWFsO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6XCIsIGNvbG9ycy5ib2R5LCBcIjtjb2xvcjpcIiwgY29sb3JzLnRleHQsIFwiO31jb2RlLHByZSxrYmQsc2FtcHtmb250LWZhbWlseTpcIiwgZm9udC5mYW1pbHlDb2RlLCBcIjt9aW5wdXQsdGV4dGFyZWEsc2VsZWN0e1wiLCBmb250UmVzZXQsIFwiO31idXR0b257Zm9udC1mYW1pbHk6XCIsIGZvbnQuZmFtaWx5LCBcIjt9ZW17Zm9udC1zdHlsZTppdGFsaWM7fXN0cm9uZ3tmb250LXdlaWdodDpcIiwgZm9udC53ZWlnaHQuYm9sZCwgXCI7fSo6Zm9jdXN7XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZSksIFwiO306OnNlbGVjdGlvbntiYWNrZ3JvdW5kOlwiLCB0cmFuc3BhcmVudGl6ZShjb2xvcnMucHJpbWFyeSwgY29sb3JNb2RlID09PSAnTElHSFQnID8gMC4xIDogMC4yKSwgXCI7fWF7Y29sb3I6XCIsIGNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7JiwmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fX0uZXVpQm9keS1oYXNQb3J0YWxDb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO307bGFiZWw6c3R5bGVzO1wiKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBzdHlsZXNcbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIHRyYW5zcGFyZW50aXplLCB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmV4cG9ydCB2YXIgQkFDS0dST1VORF9DT0xPUlMgPSBbJ3RyYW5zcGFyZW50JywgJ3BsYWluJywgJ3N1YmR1ZWQnLCAnYWNjZW50JywgJ3ByaW1hcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJywgJ2RhbmdlciddO1xuZXhwb3J0IHZhciBldWlCYWNrZ3JvdW5kQ29sb3IgPSBmdW5jdGlvbiBldWlCYWNrZ3JvdW5kQ29sb3IoX3JlZiwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgICBtZXRob2QgPSBfcmVmMi5tZXRob2Q7XG5cbiAgaWYgKGNvbG9yID09PSAndHJhbnNwYXJlbnQnKSByZXR1cm4gJ3RyYW5zcGFyZW50JztcblxuICBpZiAobWV0aG9kID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgaWYgKGNvbG9yID09PSAncGxhaW4nKSB7XG4gICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmdob3N0LCAwLjIpO1xuICAgIH0gZWxzZSBpZiAoY29sb3IgPT09ICdzdWJkdWVkJykge1xuICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzW2NvbG9yXSwgMC4xKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRpbnRPclNoYWRlID0gZnVuY3Rpb24gdGludE9yU2hhZGUoY29sb3IpIHtcbiAgICAgIHJldHVybiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHNoYWRlKGNvbG9yLCAwLjgpIDogdGludChjb2xvciwgMC45KTtcbiAgICB9O1xuXG4gICAgc3dpdGNoIChjb2xvcikge1xuICAgICAgY2FzZSAncGxhaW4nOlxuICAgICAgICByZXR1cm4gZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGU7XG5cbiAgICAgIGNhc2UgJ3N1YmR1ZWQnOlxuICAgICAgICByZXR1cm4gZXVpVGhlbWUuY29sb3JzLmJvZHk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aW50T3JTaGFkZShldWlUaGVtZS5jb2xvcnNbY29sb3JdKTtcbiAgICB9XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aUJhY2tncm91bmRDb2xvciA9IGZ1bmN0aW9uIHVzZUV1aUJhY2tncm91bmRDb2xvcihjb2xvcikge1xuICB2YXIgX3JlZjMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgbWV0aG9kID0gX3JlZjMubWV0aG9kO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWUsIGNvbG9yLCB7XG4gICAgbWV0aG9kOiBtZXRob2RcbiAgfSk7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MgPSBmdW5jdGlvbiB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MoKSB7XG4gIHJldHVybiB7XG4gICAgdHJhbnNwYXJlbnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ3RyYW5zcGFyZW50JyksIFwiOztsYWJlbDp0cmFuc3BhcmVudDtcIiksXG4gICAgcGxhaW46IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ3BsYWluJyksIFwiOztsYWJlbDpwbGFpbjtcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignc3ViZHVlZCcpLCBcIjs7bGFiZWw6c3ViZHVlZDtcIiksXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCdhY2NlbnQnKSwgXCI7O2xhYmVsOmFjY2VudDtcIiksXG4gICAgcHJpbWFyeTogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcigncHJpbWFyeScpLCBcIjs7bGFiZWw6cHJpbWFyeTtcIiksXG4gICAgc3VjY2VzczogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignc3VjY2VzcycpLCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgd2FybmluZzogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignd2FybmluZycpLCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgZGFuZ2VyOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCdkYW5nZXInKSwgXCI7O2xhYmVsOmRhbmdlcjtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29sb3InO1xuLyoqXG4gKiBTZXQgc2Nyb2xsIGJhciBhcHBlYXJhbmNlIG9uIENocm9tZSAoYW5kIGZpcmVmb3gpLlxuICogQWxsIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGFuZCBkZWZhdWx0IHRvIHNwZWNpZmljIGdsb2JhbCBzZXR0aW5ncy5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNjcm9sbEJhclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNjcm9sbEJhclN0eWxlcyhfcmVmKSB7XG4gIHZhciBfcmVmJGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICAgIGNvbG9ycyA9IF9yZWYkZXVpVGhlbWUuY29sb3JzLFxuICAgICAgc2l6ZSA9IF9yZWYkZXVpVGhlbWUuc2l6ZTtcblxuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX3RodW1iQ29sb3IgPSBfcmVmMi50aHVtYkNvbG9yLFxuICAgICAgX3JlZjIkdHJhY2tDb2xvciA9IF9yZWYyLnRyYWNrQ29sb3IsXG4gICAgICB0cmFja0NvbG9yID0gX3JlZjIkdHJhY2tDb2xvciA9PT0gdm9pZCAwID8gJ3RyYW5zcGFyZW50JyA6IF9yZWYyJHRyYWNrQ29sb3IsXG4gICAgICBfcmVmMiR3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgd2lkdGggPSBfcmVmMiR3aWR0aCA9PT0gdm9pZCAwID8gJ3RoaW4nIDogX3JlZjIkd2lkdGgsXG4gICAgICBfc2l6ZSA9IF9yZWYyLnNpemUsXG4gICAgICBfY29ybmVyID0gX3JlZjIuY29ybmVyO1xuXG4gIC8vIFNldCBkZWZhdWx0cyBmcm9tIHRoZW1lXG4gIHZhciB0aHVtYkNvbG9yID0gX3RodW1iQ29sb3IgfHwgdHJhbnNwYXJlbnRpemUoY29sb3JzLmRhcmtTaGFkZSwgMC41KTtcblxuICB2YXIgc2Nyb2xsQmFyU2l6ZSA9IF9zaXplIHx8IHNpemUuYmFzZTtcbiAgdmFyIHNjcm9sbEJhckNvcm5lciA9IF9jb3JuZXIgfHwgd2lkdGggPT09ICd0aGluJyA/IFwiY2FsYyhcIi5jb25jYXQoc2l6ZS5zLCBcIiAqIDAuNzUpXCIpIDogc2l6ZS54czsgLy8gRmlyZWZveCdzIHNjcm9sbGJhciBjb2xvcmluZyBjYXNjYWRlcywgYnV0IHRoZSBzaXppbmcgZG9lcyBub3QsXG4gIC8vIHNvIGl0J3MgYmVpbmcgYWRkZWQgdG8gdGhpcyBtaXhpbiBmb3IgYWxsb3dpbmcgc3VwcG9ydCB3aGVyZXZlciBjdXN0b20gc2Nyb2xsYmFycyBhcmVcblxuICB2YXIgZmlyZWZveFN1cHBvcnQgPSBcInNjcm9sbGJhci1jb2xvcjogXCIuY29uY2F0KHRodW1iQ29sb3IsIFwiIFwiKS5jb25jYXQodHJhY2tDb2xvciwgXCI7XCIpO1xuICByZXR1cm4gXCJzY3JvbGxiYXItd2lkdGg6IFwiLmNvbmNhdCh3aWR0aCwgXCI7XFxuXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gICAgICB3aWR0aDogXCIpLmNvbmNhdChzY3JvbGxCYXJTaXplLCBcIjtcXG4gICAgICBoZWlnaHQ6IFwiKS5jb25jYXQoc2Nyb2xsQmFyU2l6ZSwgXCI7XFxuICAgIH1cXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQodGh1bWJDb2xvciwgXCI7XFxuICAgICAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveDtcXG4gICAgICBib3JkZXItcmFkaXVzOiBcIikuY29uY2F0KHNjcm9sbEJhclNpemUsIFwiO1xcbiAgICAgIGJvcmRlcjogXCIpLmNvbmNhdChzY3JvbGxCYXJDb3JuZXIsIFwiIHNvbGlkIFwiKS5jb25jYXQodHJhY2tDb2xvciwgXCI7XFxuICAgIH1cXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLFxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdCh0cmFja0NvbG9yLCBcIjtcXG4gICAgfVxcblxcbiAgICBcIikuY29uY2F0KGZpcmVmb3hTdXBwb3J0LCBcIlxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2Nyb2xsQmFyID0gZnVuY3Rpb24gdXNlRXVpU2Nyb2xsQmFyKG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiAqSU5URVJOQUwqXG4gKiBPdmVyZmxvdyBzaGFkb3cgbWFza3MgZm9yIHVzZSBpbiBZU2Nyb2xsIGFuZCBYU2Nyb2xsIGhlbHBlcnNcbiAqL1xuXG52YXIgZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMgPSBmdW5jdGlvbiBldWlPdmVyZmxvd1NoYWRvd1N0eWxlcyhfcmVmMykge1xuICB2YXIgc2l6ZSA9IF9yZWYzLmV1aVRoZW1lLnNpemU7XG5cbiAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9kaXJlY3Rpb24gPSBfcmVmNC5kaXJlY3Rpb24sXG4gICAgICBfc2lkZSA9IF9yZWY0LnNpZGU7XG5cbiAgdmFyIGRpcmVjdGlvbiA9IF9kaXJlY3Rpb24gfHwgJ3knO1xuICB2YXIgc2lkZSA9IF9zaWRlIHx8ICdib3RoJztcbiAgdmFyIGhpZGVIZWlnaHQgPSBcImNhbGMoXCIuY29uY2F0KHNpemUuYmFzZSwgXCIgKiAwLjc1ICogMS4yNSlcIik7XG4gIHZhciBncmFkaWVudFN0YXJ0ID0gXCJcXG4gIFwiLmNvbmNhdCh0cmFuc3BhcmVudGl6ZSgncmVkJywgMC4xKSwgXCIgMCUsXFxuICBcIikuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAxKSwgXCIgXCIpLmNvbmNhdChoaWRlSGVpZ2h0LCBcIlxcbiAgXCIpO1xuICB2YXIgZ3JhZGllbnRFbmQgPSBcIlxcbiAgXCIuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAxKSwgXCIgY2FsYygxMDAlIC0gXCIpLmNvbmNhdChoaWRlSGVpZ2h0LCBcIiksXFxuICBcIikuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAwLjEpLCBcIiAxMDAlXFxuICBcIik7XG4gIHZhciBncmFkaWVudCA9ICcnO1xuXG4gIGlmIChzaWRlKSB7XG4gICAgaWYgKHNpZGUgPT09ICdib3RoJykge1xuICAgICAgZ3JhZGllbnQgPSBcIlwiLmNvbmNhdChncmFkaWVudFN0YXJ0LCBcIiwgXCIpLmNvbmNhdChncmFkaWVudEVuZCk7XG4gICAgfSBlbHNlIGlmIChzaWRlID09PSAnc3RhcnQnKSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50U3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50RW5kKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGlyZWN0aW9uID09PSAneScpIHtcbiAgICByZXR1cm4gXCJtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCBcIi5jb25jYXQoZ3JhZGllbnQsIFwiKTtcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQoZ3JhZGllbnQsIFwiKTtcIik7XG4gIH1cbn07XG4vKipcbiAqIDEuIEZvY3VzIHJpbmdzIHNob3VsZG4ndCBiZSB2aXNpYmxlIG9uIHNjcm9sbGFibGUgcmVnaW9ucywgYnV0IGExMXkgcmVxdWlyZXMgdGhlbSB0byBiZSBmb2N1c2FibGUuXG4gKiAgICBCcm93c2VyJ3Mgc3VwcG9ydGluZyBgOmZvY3VzLXZpc2libGVgIHdpbGwgc3RpbGwgc2hvdyBvdXRsaW5lIG9uIGtleWJvYXJkIGZvY3VzIG9ubHkuXG4gKiAgICBPdGhlcnMgbGlrZSBTYWZhcmksIHdvbid0IHNob3cgYW55dGhpbmcgYXQgYWxsLlxuICovXG4vLyBUT0RPOiBIb3cgZG8gd2UgdXNlIEVtb3Rpb24gdG8gb3V0cHV0IHRoZSBDU1MgY2xhc3MgdXRpbGl0aWVzIGluc3RlYWQ/XG5cblxuZXhwb3J0IHZhciBldWlZU2Nyb2xsID0gZnVuY3Rpb24gZXVpWVNjcm9sbChldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWUpLCBcIlxcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gICY6Zm9jdXMge1xcbiAgICBvdXRsaW5lOiBub25lOyAvKiAxICovXFxuICB9XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWVNjcm9sbCA9IGZ1bmN0aW9uIHVzZUV1aVlTY3JvbGwoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlZU2Nyb2xsKGV1aVRoZW1lKTtcbn07XG5leHBvcnQgdmFyIGV1aVlTY3JvbGxXaXRoU2hhZG93cyA9IGZ1bmN0aW9uIGV1aVlTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlZU2Nyb2xsKGV1aVRoZW1lKSwgXCJcXG4gIFwiKS5jb25jYXQoZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMoZXVpVGhlbWUsIHtcbiAgICBkaXJlY3Rpb246ICd5J1xuICB9KSwgXCJcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlZU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiB1c2VFdWlZU2Nyb2xsV2l0aFNoYWRvd3MoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpWFNjcm9sbCA9IGZ1bmN0aW9uIGV1aVhTY3JvbGwoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lKSwgXCJcXG4gIG92ZXJmbG93LXg6IGF1dG87XFxuICAmOmZvY3VzIHtcXG4gICAgb3V0bGluZTogbm9uZTsgLyogMSAqL1xcbiAgfVxcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVhTY3JvbGwgPSBmdW5jdGlvbiB1c2VFdWlYU2Nyb2xsKCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWFNjcm9sbChldWlUaGVtZSk7XG59O1xuZXhwb3J0IHZhciBldWlYU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiBldWlYU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpWFNjcm9sbChldWlUaGVtZSksIFwiXFxuICBcIikuY29uY2F0KGV1aU92ZXJmbG93U2hhZG93U3R5bGVzKGV1aVRoZW1lLCB7XG4gICAgZGlyZWN0aW9uOiAneCdcbiAgfSksIFwiXFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWFNjcm9sbFdpdGhTaGFkb3dzID0gZnVuY3Rpb24gdXNlRXVpWFNjcm9sbFdpdGhTaGFkb3dzKCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKTtcbn07XG5leHBvcnQgdmFyIGV1aU92ZXJmbG93U2Nyb2xsID0gZnVuY3Rpb24gZXVpT3ZlcmZsb3dTY3JvbGwoZXVpVGhlbWUpIHtcbiAgdmFyIF9yZWY1ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWY1LmRpcmVjdGlvbixcbiAgICAgIF9yZWY1JG1hc2sgPSBfcmVmNS5tYXNrLFxuICAgICAgbWFzayA9IF9yZWY1JG1hc2sgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjUkbWFzaztcblxuICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG1hc2sgPyBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIDogZXVpWVNjcm9sbChldWlUaGVtZSk7XG5cbiAgICBjYXNlICd4JzpcbiAgICAgIHJldHVybiBtYXNrID8gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKSA6IGV1aVhTY3JvbGwoZXVpVGhlbWUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUud2FybignUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBkaXJlY3Rpb24gb3B0aW9uIHRvIHVzZUV1aU92ZXJmbG93U2Nyb2xsJyk7XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aU92ZXJmbG93U2Nyb2xsID0gZnVuY3Rpb24gdXNlRXVpT3ZlcmZsb3dTY3JvbGwoZGlyZWN0aW9uKSB7XG4gIHZhciBtYXNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aU92ZXJmbG93U2Nyb2xsKGV1aVRoZW1lLCB7XG4gICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgbWFzazogbWFza1xuICB9KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IGxvZ2ljYWxTaWRlIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmV4cG9ydCB2YXIgUEFERElOR19TSVpFUyA9IFsnbm9uZScsICd4cycsICdzJywgJ20nLCAnbCcsICd4bCddO1xuZXhwb3J0IHZhciBldWlQYWRkaW5nU2l6ZSA9IGZ1bmN0aW9uIGV1aVBhZGRpbmdTaXplKF9yZWYsIHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcblxuICBzd2l0Y2ggKHNpemUpIHtcbiAgICBjYXNlICdub25lJzpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gZXVpVGhlbWUuc2l6ZS5iYXNlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldWlUaGVtZS5zaXplW3NpemVdO1xuICB9XG59O1xuZXhwb3J0IHZhciB1c2VFdWlQYWRkaW5nU2l6ZSA9IGZ1bmN0aW9uIHVzZUV1aVBhZGRpbmdTaXplKHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVBhZGRpbmdTaXplKGV1aVRoZW1lLCBzaXplKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVBhZGRpbmdDU1MgPSBmdW5jdGlvbiB1c2VFdWlQYWRkaW5nQ1NTKHNpZGUpIHtcbiAgdmFyIHByb3BlcnR5ID0gc2lkZSA/IFwicGFkZGluZy1cIi5jb25jYXQobG9naWNhbFNpZGVbc2lkZV0pIDogJ3BhZGRpbmcnO1xuICByZXR1cm4ge1xuICAgIG5vbmU6IG51bGwsXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MocHJvcGVydHksIFwiOlwiLCB1c2VFdWlQYWRkaW5nU2l6ZSgneHMnKSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKHByb3BlcnR5LCBcIjpcIiwgdXNlRXVpUGFkZGluZ1NpemUoJ3MnKSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MocHJvcGVydHksIFwiOlwiLCB1c2VFdWlQYWRkaW5nU2l6ZSgnbScpLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2Nzcyhwcm9wZXJ0eSwgXCI6XCIsIHVzZUV1aVBhZGRpbmdTaXplKCdsJyksIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2Nzcyhwcm9wZXJ0eSwgXCI6XCIsIHVzZUV1aVBhZGRpbmdTaXplKCd4bCcpLCBcIjs7bGFiZWw6eGw7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbi8qKlxuICogSXQgaXMgYmVzdCBwcmFjdGljZSB0byB1dGlsaXplIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBgb3V0bGluZWAgcHJvcGVydHkgZm9yIGhhbmRsaW5nIGZvY3VzIHJpbmdzLlxuICogSG93ZXZlciwgc29tZSBjb21wb25lbnRzIG5lZWQgdG8gYmUgZm9yY2VkIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IsIG9yIGFkanVzdCB0aGUgZGlzcGxheS5cbiAqIFRoaXMgZnVuY3Rpb24gcmUtYXBwbGllcyB0aGUgc2FtZSBkZWZhdWx0IG91dGxpbmUgd2l0aCBhIGNvdXBsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gZXVpVGhlbWUgVXNlRXVpVGhlbWUuZXVpVGhlbWVcbiAqIEBwYXJhbSBvZmZzZXQgQWNjZXB0cyBhIHNwZWNpZmljIG1lYXN1cmVtZW50IG9yICdpbnNldCcsICdvdXRzZXQnIG9yICdjZW50ZXInIHRvIGFkanVzdCBvdXRsaW5lIHBvc2l0aW9uXG4gKiBAcGFyYW0gY29sb3IgQWNjZXB0cyBhbnkgQ1NTIGNvbG9yLCAqKk5vdGU6IG9ubHkgd29ya3MgaW4gLXdlYmtpdC0qKlxuICovXG5leHBvcnQgdmFyIGV1aUZvY3VzUmluZyA9IGZ1bmN0aW9uIGV1aUZvY3VzUmluZyhldWlUaGVtZSkge1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnY2VudGVyJztcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgLy8gV2lkdGggaXMgZW5mb3JjZWQgYXMgYSBjb25zdGFudCBhdCB0aGUgZ2xvYmFsIHRoZW1lIGxheWVyXG4gIHZhciBvdXRsaW5lV2lkdGggPSBldWlUaGVtZS5mb2N1cy53aWR0aDtcbiAgdmFyIG91dGxpbmVDb2xvciA9IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29sb3IpIHx8IGV1aVRoZW1lLmZvY3VzLmNvbG9yO1xuICB2YXIgb3V0bGluZU9mZnNldCA9IG9mZnNldDtcblxuICBpZiAob2Zmc2V0ID09PSAnaW5zZXQnKSB7XG4gICAgb3V0bGluZU9mZnNldCA9IFwiLVwiLmNvbmNhdChvdXRsaW5lV2lkdGgpO1xuICB9IGVsc2UgaWYgKG9mZnNldCA9PT0gJ291dHNldCcpIHtcbiAgICBvdXRsaW5lT2Zmc2V0ID0gXCJcIi5jb25jYXQob3V0bGluZVdpZHRoKTtcbiAgfSBlbHNlIGlmIChvZmZzZXQgPT09ICdjZW50ZXInKSB7XG4gICAgb3V0bGluZU9mZnNldCA9IFwiY2FsYyhcIi5jb25jYXQob3V0bGluZVdpZHRoLCBcIiAvIC0yKTtcIik7XG4gIH0gLy8gVGhpcyBmdW5jdGlvbiB1dGlsaXplcyBgZm9jdXMtdmlzaWJsZWAgdG8gdHVybiBvbiBmb2N1cyBvdXRsaW5lcy5cbiAgLy8gQnV0IHRoaXMgaXMgYnJvd3Nlci1kZXBlbmRlbmQ6XG4gIC8vIFx1RDgzRFx1REM0OSBTYWZhcmkgYW5kIEZpcmVmb3ggaW5uYXRlbHkgcmVzcGVjdCBvbmx5IHNob3dpbmcgdGhlIG91dGxpbmUgd2l0aCBrZXlib2FyZCBvbmx5XG4gIC8vIFx1RDgzRFx1REM5NCBCdXQgdGhleSBkb24ndCBhbGxvdyBjb2xvcmluZyBvZiB0aGUgJ2F1dG8nL2RlZmF1bHQgb3V0bGluZSwgc28gY29udHJhc3QgaXMgbm8gZ29vZCBpbiBkYXJrIG1vZGUuXG4gIC8vIFx1RDgzRFx1REM0OSBGb3IgdGhlc2UgYnJvd3NlcnMgd2UgdXNlIHRoZSBzb2xpZCB0eXBlIGluIG9yZGVyIHRvIG1hdGNoIHdpdGggYGN1cnJlbnRDb2xvci5cbiAgLy8gXHVEODNEXHVERTI2IFdoaWNoIGRvZXMgbWVhbnMgdGhlIG91dGxpbmUgd2lsbCBiZSBzcXVhcmVcblxuXG4gIHJldHVybiBcIlxcbiAgICBvdXRsaW5lOiBcIi5jb25jYXQob3V0bGluZVdpZHRoLCBcIiBzb2xpZCBcIikuY29uY2F0KG91dGxpbmVDb2xvciwgXCI7XFxuICAgIG91dGxpbmUtb2Zmc2V0OiBcIikuY29uY2F0KG91dGxpbmVPZmZzZXQsIFwiO1xcblxcbiAgICAvLyBcXHVEODNEXFx1REM0MCBDaHJvbWUgcmVzcGVjdHMgOmZvY3VzLXZpc2libGUgYW5kIGFsbG93cyBjb2xvcmluZyB0aGUgYGF1dG9gIHN0eWxlXFxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgb3V0bGluZS1zdHlsZTogYXV0bztcXG4gICAgfVxcblxcbiAgICAvLyBcXHVEODNEXFx1REU0NVxcdTIwMERcXHUyNjQwXFx1RkUwRiBCdXQgQ2hyb21lIGFsc28gbmVlZHMgdG8gaGF2ZSB0aGUgb3V0bGluZSBmb3JjZWZ1bGx5IHJlbW92ZWQgZnJvbSByZWd1bGFyIGA6Zm9jdXNgIHN0YXRlXFxuICAgICY6bm90KDpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgfVxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpRm9jdXNSaW5nID0gZnVuY3Rpb24gdXNlRXVpRm9jdXNSaW5nKG9mZnNldCwgY29sb3IpIHtcbiAgdmFyIF91c2VFdWlUaGVtZSA9IHVzZUV1aVRoZW1lKCksXG4gICAgICBldWlUaGVtZSA9IF91c2VFdWlUaGVtZS5ldWlUaGVtZTtcblxuICByZXR1cm4gZXVpRm9jdXNSaW5nKGV1aVRoZW1lLCBvZmZzZXQsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgZXVpTGluZUhlaWdodEZyb21CYXNlbGluZSwgZXVpRm9udFNpemVGcm9tU2NhbGUgfSBmcm9tICcuLi9mdW5jdGlvbnMvdHlwb2dyYXBoeSc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL2hvb2tzJztcblxuLyoqXG4gKiBSZXR1cm5zIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHRcbiAqL1xuZXhwb3J0IHZhciBldWlGb250U2l6ZSA9IGZ1bmN0aW9uIGV1aUZvbnRTaXplKF9yZWYsIHNjYWxlLCBvcHRpb25zKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZm9udFNpemU6IGV1aUZvbnRTaXplRnJvbVNjYWxlKHNjYWxlLCBldWlUaGVtZSwgb3B0aW9ucyksXG4gICAgbGluZUhlaWdodDogZXVpTGluZUhlaWdodEZyb21CYXNlbGluZShzY2FsZSwgZXVpVGhlbWUsIG9wdGlvbnMpXG4gIH07XG59O1xuZXhwb3J0IHZhciB1c2VFdWlGb250U2l6ZSA9IGZ1bmN0aW9uIHVzZUV1aUZvbnRTaXplKHNjYWxlLCBvcHRpb25zKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlGb250U2l6ZShldWlUaGVtZSwgc2NhbGUsIG9wdGlvbnMpO1xufTtcbi8qKlxuICogRm9yY2UgdGV4dCB0byB3cmFwIG9uIG5hdHVyYWwgd29yZCBicmVha3MgKGUuZy4gc3BhY2VzICYgaHlwaGVucylcbiAqIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL3ByZXZlbnQtbG9uZy11cmxzLWZyb20tYnJlYWtpbmctb3V0LW9mLWNvbnRhaW5lci9cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRleHRCcmVha1dvcmQgPSBmdW5jdGlvbiBldWlUZXh0QnJlYWtXb3JkKCkge1xuICByZXR1cm4gXCJcXG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQgIWltcG9ydGFudDsgLy8gbWFrZXMgc3VyZSB0aGUgbG9uZyBzdHJpbmcgd2lsbCB3cmFwIGFuZCBub3QgYnVzdCBvdXQgb2YgdGhlIGNvbnRhaW5lclxcbiAgd29yZC13cmFwOiBicmVhay13b3JkICFpbXBvcnRhbnQ7IC8vIHNwZWMgc2F5cywgdGhleSBhcmUgbGl0ZXJhbGx5IGp1c3QgYWx0ZXJuYXRlIG5hbWVzIGZvciBlYWNoIG90aGVyIGJ1dCBzb21lIGJyb3dzZXJzIHN1cHBvcnQgb25lIGFuZCBub3QgdGhlIG90aGVyXFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkOyAvLyBJRSBkb2Vzbid0IHVuZGVyc3RhbmQgYnV0IHRoYXQncyBva1xcblwiO1xufTtcbi8qKlxuICogUHJldmVudCB0ZXh0IGZyb20gd3JhcHBpbmcgb250byBtdWx0aXBsZSBsaW5lcywgYW5kIHRydW5jYXRlIHdpdGggYW4gZWxsaXBzaXMuXG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0VHJ1bmNhdGUgPSBmdW5jdGlvbiBldWlUZXh0VHJ1bmNhdGUoKSB7XG4gIHZhciBtYXhXaWR0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJzEwMCUnO1xuICByZXR1cm4gXCJcXG4gIG1heC13aWR0aDogXCIuY29uY2F0KG1heFdpZHRoLCBcIjsgLy8gRW5zdXJlIHRoYXQgdGhlIG5vZGUgaGFzIGEgbWF4aW11bSB3aWR0aCBhZnRlciB3aGljaCB0cnVuY2F0aW9uIGNhbiBvY2N1clxcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgIWltcG9ydGFudDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcXG5cIik7XG59O1xuLyoqXG4gKiBGaXhlZC13aWR0aCBudW1iZXJzIGZvciB0YWJ1bGFyIGRhdGFcbiAqL1xuXG5leHBvcnQgdmFyIGV1aU51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIGV1aU51bWJlckZvcm1hdChfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIFwiXFxuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFwiLmNvbmNhdChldWlUaGVtZS5mb250LmZlYXR1cmVTZXR0aW5ncywgXCIsICd0bnVtJyAxO1xcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aU51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIHVzZUV1aU51bWJlckZvcm1hdCgpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aU51bWJlckZvcm1hdChldWlUaGVtZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIEEgY29uc3RhbnQgc3RvcmluZyB0aGUgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIG1lZGlhIHF1ZXJ5XG4gKiBzbyB0aGF0IHdoZW4gaXQgaXMgdHVybmVkIG9mZiwgYW5pbWF0aW9ucyBhcmUgbm90IHJ1bi5cbiAqL1xuZXhwb3J0IHZhciBldWlDYW5BbmltYXRlID0gJ0BtZWRpYSBzY3JlZW4gYW5kIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSc7XG4vKipcbiAqIEEgY29uc3RhbnQgc3RvcmluZyB0aGUgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIG1lZGlhIHF1ZXJ5IHRoYXQgd2lsbFxuICogb25seSBhcHBseSB0aGUgY29udGVudCBpZiB0aGUgc2V0dGluZyBpcyBvZmYgKHJlZHVjZSkuXG4gKi9cblxuZXhwb3J0IHZhciBldWlDYW50QW5pbWF0ZSA9ICdAbWVkaWEgc2NyZWVuIGFuZCAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSc7XG4vKipcbiAqIFNwZWVkcyAvIER1cmF0aW9ucyAvIERlbGF5c1xuICovXG5cbmV4cG9ydCB2YXIgRXVpVGhlbWVBbmltYXRpb25TcGVlZHMgPSBbJ2V4dHJhRmFzdCcsICdmYXN0JywgJ25vcm1hbCcsICdzbG93JywgJ2V4dHJhU2xvdyddO1xuXG4vKipcbiAqIEVhc2luZ3MgLyBUaW1pbmcgZnVuY3Rpb25zXG4gKi9cbmV4cG9ydCB2YXIgRXVpVGhlbWVBbmltYXRpb25FYXNpbmdzID0gWydib3VuY2UnLCAncmVzaXN0YW5jZSddOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciByZXNldFN0eWxlcyA9IFwiXFxuLyogLy8gQWRhcHRlZCBmcm9tIEVyaWMgTWV5ZXIncyByZXNldCAoaHR0cDovL21leWVyd2ViLmNvbS9lcmljL3Rvb2xzL2Nzcy9yZXNldC8sIHYyLjAgfCAyMDExMDEyNikuICovXFxuXFxuXFxuKiwgKjpiZWZvcmUsICo6YWZ0ZXIge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBhcHBsZXQsIG9iamVjdCwgaWZyYW1lLFxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSxcXG5hLCBhYmJyLCBhY3JvbnltLCBhZGRyZXNzLCBiaWcsIGNpdGUsIGNvZGUsXFxuZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzLCBzYW1wLFxcbnNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsXFxuYiwgdSwgaSwgY2VudGVyLFxcbmRsLCBkdCwgZGQsIG9sLCB1bCwgbGksXFxuZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsXFxudGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsXFxuYXJ0aWNsZSwgYXNpZGUsIGNhbnZhcywgZGV0YWlscywgZW1iZWQsXFxuZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLFxcbm1lbnUsIG5hdiwgb3V0cHV0LCBydWJ5LCBzZWN0aW9uLCBzdW1tYXJ5LFxcbnRpbWUsIG1hcmssIGF1ZGlvLCB2aWRlbyB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbn1cXG5cXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBwIHtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxufVxcblxcbi8qIEhUTUw1IGRpc3BsYXktcm9sZSByZXNldCBmb3Igb2xkZXIgYnJvd3NlcnMgKi9cXG5hcnRpY2xlLCBhc2lkZSwgZGV0YWlscywgZmlnY2FwdGlvbiwgZmlndXJlLFxcbmZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIG1lbnUsIG5hdiwgc2VjdGlvbiB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuYVtocmVmXSxcXG5idXR0b24sXFxuW3JvbGU9J2J1dHRvbiddIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuYnV0dG9uIHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBib3JkZXI6IG5vbmU7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbn1cXG5cXG5pbnB1dCB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG5pbnB1dDpkaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAxOyAvKiByZXF1aXJlZCBvbiBpT1MgKi9cXG59XFxuXFxub2wsXFxudWwge1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuXFxuYmxvY2txdW90ZSxcXG5xIHtcXG4gIHF1b3Rlczogbm9uZTtcXG59XFxuXFxuYmxvY2txdW90ZTpiZWZvcmUsXFxuYmxvY2txdW90ZTphZnRlcixcXG5xOmJlZm9yZSxcXG5xOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbn1cXG5cXG50YWJsZSB7XFxuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xcbiAgYm9yZGVyLXNwYWNpbmc6IDA7XFxufVxcblxcbmhyIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuZmllbGRzZXQge1xcbiAgbWluLWlubGluZS1zaXplOiBhdXRvO1xcbn1cXG5cXG4vKiBDaHJvbWUgaGFzIGFuIGlzc3VlIGFyb3VuZCBSVEwgbGFuZ3VhZ2VzIGluIFNWR3Mgd2hlbiBsZXR0ZXItc3BhY2luZyBpcyBuZWdhdGl2ZVxcbiAqIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTk2NjQ4MFxcbiAqL1xcbnN2ZyB0ZXh0IHtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWwgIWltcG9ydGFudDtcXG59XCI7IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7IGlmICghcmF3KSB7IHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7IH0gcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsgfVxuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbnZhciBpY29uU2l6ZSA9IGZ1bmN0aW9uIGljb25TaXplKHNpemUpIHtcbiAgcmV0dXJuIFwiXFxuICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIHNpemUpLCBcIjtcXG4gICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCBzaXplKSwgXCI7XFxuICBcIik7XG59O1xuXG5leHBvcnQgdmFyIGljb25Mb2FkaW5nT3BhY2l0eSA9IDAuMDU7XG52YXIgaWNvbkxvYWRpbmcgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgMCUge1xcbiAgICBvcGFjaXR5OiBcIiwgXCI7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG5cIl0pKSwgaWNvbkxvYWRpbmdPcGFjaXR5KTtcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibmpkNzQ5LWxvZ29FbGFzdGljT3V0bGluZVwiLFxuICBzdHlsZXM6IFwiKltmaWxsXXtmaWxsOm5vbmUhaW1wb3J0YW50O30ub3V0bGluZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDpsb2dvRWxhc3RpY091dGxpbmU7XCJcbn0gOiB7XG4gIG5hbWU6IFwibmpkNzQ5LWxvZ29FbGFzdGljT3V0bGluZVwiLFxuICBzdHlsZXM6IFwiKltmaWxsXXtmaWxsOm5vbmUhaW1wb3J0YW50O30ub3V0bGluZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDpsb2dvRWxhc3RpY091dGxpbmU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInVhY2pjNS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJjb2xvcjppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aUljb25TdHlsZXMgPSBmdW5jdGlvbiBldWlJY29uU3R5bGVzKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJY29uOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDpjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLCAwKTsuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYXJrZXN0U2hhZGUsIFwiO307bGFiZWw6ZXVpSWNvbjtcIiksXG4gICAgLy8gQ29sb3JzXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0LCBcIjs7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQsIFwiOztsYWJlbDpkYW5nZXI7XCIpLFxuICAgIGdob3N0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7KltmaWxsXSwuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOmdob3N0O1wiKSxcbiAgICBwcmltYXJ5OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7O2xhYmVsOnByaW1hcnk7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0LCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQsIFwiOztsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICB0ZXh0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50aXRsZSwgXCI7KltmaWxsXSwuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOnRleHQ7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLndhcm5pbmdUZXh0LCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgaW5oZXJpdDogX3JlZjIsXG4gICAgZGVmYXVsdDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpkZWZhdWx0O1wiKSxcbiAgICBjdXN0b21Db2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpjdXN0b21Db2xvcjtcIiksXG4gICAgbG9nb0VsYXN0aWNPdXRsaW5lOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgb3JpZ2luYWw6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6b3JpZ2luYWw7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoaWNvblNpemUoZXVpVGhlbWUuc2l6ZS5tKSwgXCI7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhpY29uU2l6ZShldWlUaGVtZS5zaXplLmJhc2UpLCBcIjtsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUubCksIFwiO2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUueGwpLCBcIjtsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUueHhsKSwgXCI7bGFiZWw6eHhsO1wiKSxcbiAgICAvLyBWYXJpYW50c1xuICAgIC8vIEFwcCBpY29ucyBhcmUgdHdvLXRvbmVkLiBUaGlzIHByb3ZpZGVzIHRoZSBiYXNlIGNvbG9yLlxuICAgIGFwcDogLyojX19QVVJFX18qL2NzcyhcImZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjsuZXVpSWNvbl9fZmlsbFNlY29uZGFyeXtmaWxsOlwiLCBldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQsIFwiO307bGFiZWw6YXBwO1wiKSxcbiAgICBsb2dvOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmxvZ287XCIpLFxuICAgIC8vIExvYWRpbmcgc3RhdGVzXG4gICAgaXNMb2FkaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwib3BhY2l0eTpcIiwgaWNvbkxvYWRpbmdPcGFjaXR5LCBcIjtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjtib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLCBcIjs7bGFiZWw6aXNMb2FkaW5nO1wiKSxcbiAgICBpc0xvYWRlZDogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIGljb25Mb2FkaW5nLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCwgXCIgZWFzZS1pbiAwcyAxIGZvcndhcmRzO307bGFiZWw6aXNMb2FkZWQ7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlJMThuQ29uc3VtZXIgfSBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9jb250ZXh0JztcbmltcG9ydCB7IHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuIH0gZnJvbSAnLi9pMThuX3V0aWwnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxuZnVuY3Rpb24gZXJyb3JPbk1pc3NpbmdWYWx1ZXModG9rZW4pIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiSTE4biBtYXBwaW5nIGZvciB0b2tlbiBcXFwiXCIuY29uY2F0KHRva2VuLCBcIlxcXCIgaXMgYSBmb3JtYXR0aW5nIGZ1bmN0aW9uIGJ1dCBubyB2YWx1ZXMgd2VyZSBwcm92aWRlZC5cIikpO1xufVxuXG5mdW5jdGlvbiBsb29rdXBUb2tlbihvcHRpb25zKSB7XG4gIHZhciB0b2tlbiA9IG9wdGlvbnMudG9rZW4sXG4gICAgICBpMThuTWFwcGluZyA9IG9wdGlvbnMuaTE4bk1hcHBpbmcsXG4gICAgICB2YWx1ZURlZmF1bHQgPSBvcHRpb25zLnZhbHVlRGVmYXVsdCxcbiAgICAgIGkxOG5NYXBwaW5nRnVuYyA9IG9wdGlvbnMuaTE4bk1hcHBpbmdGdW5jLFxuICAgICAgdmFsdWVzID0gb3B0aW9ucy52YWx1ZXMsXG4gICAgICByZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgdmFyIHJlbmRlcmFibGUgPSBpMThuTWFwcGluZyAmJiBpMThuTWFwcGluZ1t0b2tlbl0gfHwgdmFsdWVEZWZhdWx0O1xuXG4gIGlmICh0eXBlb2YgcmVuZGVyYWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVycm9yT25NaXNzaW5nVmFsdWVzKHRva2VuKTtcbiAgICB9IC8vIEB0cy1pZ25vcmUgVHlwZVNjcmlwdCBjb21wbGFpbnMgdGhhdCBgREVGQVVMVGAgZG9lc24ndCBoYXZlIGEgY2FsbCBzaWduYXR1cmUgYnV0IHdlIHZlcmlmaWVkIGByZW5kZXJhYmxlYCBpcyBhIGZ1bmN0aW9uXG5cblxuICAgIHZhciByZW5kZXJlZCA9IHJlbmRlcmFibGUodmFsdWVzKTtcbiAgICByZXR1cm4gaTE4bk1hcHBpbmdGdW5jICYmIHR5cGVvZiByZW5kZXJlZCA9PT0gJ3N0cmluZycgPyBpMThuTWFwcGluZ0Z1bmMocmVuZGVyZWQpIDogcmVuZGVyZWQ7XG4gIH0gZWxzZSBpZiAodmFsdWVzID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHJlbmRlcmFibGUgIT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGkxOG5NYXBwaW5nRnVuYyAmJiB0eXBlb2YgdmFsdWVEZWZhdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVuZGVyYWJsZSA9IGkxOG5NYXBwaW5nRnVuYyh2YWx1ZURlZmF1bHQpO1xuICAgIH0gLy8gdGhlcmUncyBhIGhvbGUgaW4gdGhlIHR5cGluZ3MgaGVyZSBhcyB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBpMThuTWFwcGluZ0Z1bmNcbiAgICAvLyByZXR1cm5lZCB0aGUgc2FtZSB0eXBlIG9mIHRoZSBkZWZhdWx0IHZhbHVlLCBidXQgd2UgbmVlZCB0byBrZWVwIHRoYXQgYXNzdW1wdGlvblxuXG5cbiAgICByZXR1cm4gcmVuZGVyYWJsZTtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuKHJlbmRlcmFibGUsIHZhbHVlcywgaTE4bk1hcHBpbmdGdW5jKTtcblxuICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJykge1xuICAgIC8vIGxpa2V3aXNlLCBgcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW5gIHJldHVybnMgYSBzdHJpbmcgb3IgUmVhY3RDaGlsZFtdIGRlcGVuZGluZyBvblxuICAgIC8vIHRoZSB0eXBlIG9mIGB2YWx1ZXNgLCBzbyB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBjb3JyZWN0LlxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIHZhciBDb21wb25lbnQgPSByZW5kZXIgPyByZW5kZXIoY2hpbGRyZW4pIDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG4gIH07IC8vIHNhbWUgcmVhc29ucyBhcyBhYm92ZSwgd2UgY2FuJ3QgcHJvbWlzZSB0aGUgdHJhbnNmb3JtcyBtYXRjaCB0aGUgZGVmYXVsdCdzIHR5cGVcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCB2YWx1ZXMpO1xufVxuXG5mdW5jdGlvbiBpc0kxOG5Ub2tlbnNTaGFwZSh4KSB7XG4gIHJldHVybiB4LnRva2VucyAhPSBudWxsO1xufSAvLyBNdXN0IHVzZSB0aGUgZ2VuZXJpY3MgPFQgZXh0ZW5kcyB7fT5cbi8vIElmIGluc3RlYWQgdHlwZWQgd2l0aCBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudCB0aGVyZSBpc24ndCBmZWVkYmFjayBnaXZlbiBiYWNrIHRvIHRoZSBkZXZcbi8vIHdoZW4gdXNpbmcgYSBgdmFsdWVzYCBvYmplY3Qgd2l0aCBhIHJlbmRlcmVyIGNhbGxiYWNrLlxuXG5cbnZhciBFdWlJMThuID0gZnVuY3Rpb24gRXVpSTE4bihwcm9wcykge1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChpMThuQ29uZmlnKSB7XG4gICAgdmFyIG1hcHBpbmcgPSBpMThuQ29uZmlnLm1hcHBpbmcsXG4gICAgICAgIG1hcHBpbmdGdW5jID0gaTE4bkNvbmZpZy5tYXBwaW5nRnVuYyxcbiAgICAgICAgcmVuZGVyID0gaTE4bkNvbmZpZy5yZW5kZXI7XG5cbiAgICBpZiAoaXNJMThuVG9rZW5zU2hhcGUocHJvcHMpKSB7XG4gICAgICByZXR1cm4gcHJvcHMuY2hpbGRyZW4ocHJvcHMudG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4sIGlkeCkge1xuICAgICAgICByZXR1cm4gbG9va3VwVG9rZW4oe1xuICAgICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgICAgIHZhbHVlRGVmYXVsdDogcHJvcHMuZGVmYXVsdHNbaWR4XSxcbiAgICAgICAgICByZW5kZXI6IHJlbmRlclxuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5WYWx1ZSA9IGxvb2t1cFRva2VuKHtcbiAgICAgIHRva2VuOiBwcm9wcy50b2tlbixcbiAgICAgIGkxOG5NYXBwaW5nOiBtYXBwaW5nLFxuICAgICAgdmFsdWVEZWZhdWx0OiBwcm9wcy5kZWZhdWx0LFxuICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgIHZhbHVlczogcHJvcHMudmFsdWVzLFxuICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIHByb3BzLmNoaWxkcmVuKHRva2VuVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdG9rZW5WYWx1ZTtcbiAgICB9XG4gIH0pO1xufTsgLy8gQSBzaW5nbGUgZGVmYXVsdCBjb3VsZCBiZSBhIHN0cmluZywgcmVhY3QgY2hpbGQsIG9yIHJlbmRlciBmdW5jdGlvblxuXG5cbmZ1bmN0aW9uIHVzZUV1aUkxOG4oKSB7XG4gIHZhciBpMThuQ29uZmlnID0gdXNlQ29udGV4dChJMThuQ29udGV4dCk7XG4gIHZhciBtYXBwaW5nID0gaTE4bkNvbmZpZy5tYXBwaW5nLFxuICAgICAgbWFwcGluZ0Z1bmMgPSBpMThuQ29uZmlnLm1hcHBpbmdGdW5jLFxuICAgICAgcmVuZGVyID0gaTE4bkNvbmZpZy5yZW5kZXI7XG5cbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHByb3BzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHByb3BzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwcm9wc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgX3Rva2VuID0gcHJvcHNbMF0sXG4gICAgICAgIF9kZWZhdWx0VmFsdWUgPSBwcm9wc1sxXSxcbiAgICAgICAgX3ZhbHVlcyA9IHByb3BzWzJdO1xuICAgIHJldHVybiBsb29rdXBUb2tlbih7XG4gICAgICB0b2tlbjogX3Rva2VuLFxuICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICB2YWx1ZURlZmF1bHQ6IF9kZWZhdWx0VmFsdWUsXG4gICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgdmFsdWVzOiBfdmFsdWVzLFxuICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX3JlZiA9IHByb3BzLFxuICAgICAgICBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgICBfdG9rZW5zID0gX3JlZjJbMF0sXG4gICAgICAgIF9kZWZhdWx0VmFsdWVzID0gX3JlZjJbMV07XG5cbiAgICByZXR1cm4gX3Rva2Vucy5tYXAoZnVuY3Rpb24gKHRva2VuLCBpZHgpIHtcbiAgICAgIHJldHVybiBsb29rdXBUb2tlbih7XG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICAgIHZhbHVlRGVmYXVsdDogX2RlZmF1bHRWYWx1ZXNbaWR4XSxcbiAgICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBJMThuQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHt9KTtcbnZhciBFdWlJMThuUHJvdmlkZXIgPSBJMThuQ29udGV4dC5Qcm92aWRlcixcbiAgICBFdWlJMThuQ29uc3VtZXIgPSBJMThuQ29udGV4dC5Db25zdW1lcjtcblxudmFyIEV1aUNvbnRleHQgPSBmdW5jdGlvbiBFdWlDb250ZXh0KF9yZWYpIHtcbiAgdmFyIF9yZWYkaTE4biA9IF9yZWYuaTE4bixcbiAgICAgIGkxOG4gPSBfcmVmJGkxOG4gPT09IHZvaWQgMCA/IHt9IDogX3JlZiRpMThuLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogaTE4blxuICB9LCBjaGlsZHJlbik7XG59O1xuXG5FdWlDb250ZXh0LnByb3BUeXBlcyA9IHtcbiAgaTE4bjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtYXBwaW5nOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuICAgIG1hcHBpbmdGdW5jOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogU29tZSBicm93c2VycycgdHJhbnNsYXRpb24gZmVhdHVyZXMgZG9uJ3Qgd29yayB3aXRoIGEgcmVuZGVyZWQgYDxGcmFnbWVudD5gIGNvbXBvbmVudC5cbiAgICAgICAqIFRoZSBgcmVuZGVyYCBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHBhc3MgaW4gYW5vdGhlciBjb21wb25lbnQgaW5zdGVhZCwgZS5nLiBgPGRpdj5gXG4gICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZvcm1hdE51bWJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9ybWF0RGF0ZVRpbWU6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxvY2FsZTogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59O1xuZXhwb3J0IHsgRXVpQ29udGV4dCwgRXVpSTE4bkNvbnN1bWVyLCBJMThuQ29udGV4dCB9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjbG9uZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0Jvb2xlYW4sIGlzU3RyaW5nLCBpc051bWJlciwgaXNVbmRlZmluZWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICByZXR1cm4gaXNCb29sZWFuKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpIHx8IGlzVW5kZWZpbmVkKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaGFzUHJvcE5hbWUoY2hpbGQpIHtcbiAgcmV0dXJuIGNoaWxkID8gX3R5cGVvZihjaGlsZCkgPT09ICdvYmplY3QnICYmIGNoaWxkLmhhc093blByb3BlcnR5KCdwcm9wTmFtZScpIDogZmFsc2U7XG59XG4vKipcbiAqIFJlcGxhY2VzIHBsYWNlaG9sZGVyIHZhbHVlcyBpbiBgaW5wdXRgIHdpdGggdGhlaXIgbWF0Y2hpbmcgdmFsdWUgaW4gYHZhbHVlc2BcbiAqIGUuZy4gaW5wdXQ6J0hlbGxvLCB7bmFtZX0nIHdpbGwgcmVwbGFjZSBge25hbWV9YCB3aXRoIGB2YWx1ZXNbbmFtZV1gXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7UmVuZGVyYWJsZVZhbHVlc30gdmFsdWVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpMThuTWFwcGluZ0Z1bmNcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBSZWFjdC5SZWFjdENoaWxkW119XG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW4oaW5wdXQsIHZhbHVlcywgaTE4bk1hcHBpbmdGdW5jKSB7XG4gIHZhciBjaGlsZHJlbiA9IFtdO1xuICB2YXIgY2hpbGQ7XG5cbiAgZnVuY3Rpb24gYXBwZW5kQ2hhclRvQ2hpbGQoY2hhcikge1xuICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzdGFydGluZyBhIG5ldyBzdHJpbmcgbGl0ZXJhbFxuICAgICAgY2hpbGQgPSBjaGFyO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZXhpc3Rpbmcgc3RyaW5nIGxpdGVyYWxcbiAgICAgIGNoaWxkID0gY2hpbGQgKyBjaGFyO1xuICAgIH0gZWxzZSBpZiAoaGFzUHJvcE5hbWUoY2hpbGQpKSB7XG4gICAgICAvLyBhZGRpbmcgdG8gdGhlIHByb3BOYW1lIG9mIGEgdmFsdWVzIGxvb2t1cFxuICAgICAgY2hpbGQucHJvcE5hbWUgPSBjaGlsZC5wcm9wTmFtZSArIGNoYXI7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwZW5kVmFsdWVUb0NoaWxkcmVuKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgIC8vIGFuIGFycmF5IHdpdGggYW55IFJlYWN0RWxlbWVudHMgd2lsbCBiZSBrZXB0IGFzIGFuIGFycmF5XG4gICAgICAvLyBzbyB0aGV5IG5lZWQgdG8gYmUgYXNzaWduZWQgYSBrZXlcbiAgICAgIGNoaWxkcmVuLnB1c2goIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQodmFsdWUsIHtcbiAgICAgICAga2V5OiBjaGlsZHJlbi5sZW5ndGhcbiAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKGhhc1Byb3BOYW1lKHZhbHVlKSkgey8vIHRoaXMgd29uJ3QgYmUgY2FsbGVkLCBwcm9wTmFtZSBjaGlsZHJlbiBhcmUgY29udmVydGVkIHRvIGEgUmVhY3RDaGlsZCBiZWZvcmUgY2FsbGluZyB0aGlzXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBjYW4gZ28gc3RyYWlnaHQgaW5cbiAgICAgIGlmIChpMThuTWFwcGluZ0Z1bmMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlID0gaTE4bk1hcHBpbmdGdW5jKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGRyZW4ucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9IC8vIGlmIHdlIGRvbid0IGVuY291bnRlciBhIG5vbi1wcmltaXRpdmVcbiAgLy8gdGhlbiBgY2hpbGRyZW5gIGNhbiBiZSBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgYXQgdGhlIGVuZFxuXG5cbiAgdmFyIGVuY291bnRlcmVkTm9uUHJpbWl0aXZlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaGFyID0gaW5wdXRbaV07XG5cbiAgICBpZiAoY2hhciA9PT0gJ1xcXFwnKSB7XG4gICAgICAvLyBwZWVrIGF0IHRoZSBuZXh0IGNoYXJhY3RlciB0byBrbm93IGlmIHRoaXMgaXMgYW4gZXNjYXBlXG4gICAgICB2YXIgbmV4dENoYXIgPSBpbnB1dFtpICsgMV07XG4gICAgICB2YXIgY2hhclRvQWRkID0gY2hhcjsgLy8gaWYgdGhpcyBpc24ndCBhbiBlc2NhcGUgc2VxdWVuY2UgdGhlbiB3ZSB3aWxsIGFkZCB0aGUgYmFja3NsYXNoXG5cbiAgICAgIGlmIChuZXh0Q2hhciA9PT0gJ3snIHx8IG5leHRDaGFyID09PSAnfScpIHtcbiAgICAgICAgLy8gZXNjYXBpbmcgYSBicmFjZVxuICAgICAgICBpICs9IDE7IC8vIGFkdmFuY2UgcGFzc2VkIHRoZSBicmFjZVxuXG4gICAgICAgIGNoYXJUb0FkZCA9IGlucHV0W2ldO1xuICAgICAgfVxuXG4gICAgICBhcHBlbmRDaGFyVG9DaGlsZChjaGFyVG9BZGQpO1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJ3snKSB7XG4gICAgICBhcHBlbmRWYWx1ZVRvQ2hpbGRyZW4oY2hpbGQpO1xuICAgICAgY2hpbGQgPSB7XG4gICAgICAgIHByb3BOYW1lOiAnJ1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICd9Jykge1xuICAgICAgdmFyIHByb3BOYW1lID0gY2hpbGQucHJvcE5hbWU7XG5cbiAgICAgIGlmICghdmFsdWVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJLZXkgXFxcIlwiLmNvbmNhdChwcm9wTmFtZSwgXCJcXFwiIG5vdCBmb3VuZCBpbiBcIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KHZhbHVlcywgbnVsbCwgMikpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHZhbHVlc1twcm9wTmFtZV07XG4gICAgICBlbmNvdW50ZXJlZE5vblByaW1pdGl2ZSA9IGVuY291bnRlcmVkTm9uUHJpbWl0aXZlIHx8ICFpc1ByaW1pdGl2ZShwcm9wVmFsdWUpO1xuICAgICAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKHByb3BWYWx1ZSk7XG4gICAgICBjaGlsZCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hhclRvQ2hpbGQoY2hhcik7XG4gICAgfVxuICB9IC8vIGluY2x1ZGUgYW55IHJlbWFpbmluZyBjaGlsZCB2YWx1ZVxuXG5cbiAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKGNoaWxkKTtcbiAgcmV0dXJuIGVuY291bnRlcmVkTm9uUHJpbWl0aXZlID8gY2hpbGRyZW4gOiBjaGlsZHJlbi5qb2luKCcnKTtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmV4cG9ydCB2YXIgdXNlTG9hZGluZ0FyaWFMYWJlbCA9IGZ1bmN0aW9uIHVzZUxvYWRpbmdBcmlhTGFiZWwoKSB7XG4gIHJldHVybiB1c2VFdWlJMThuKCdldWlMb2FkaW5nU3RyaW5ncy5hcmlhTGFiZWwnLCAnTG9hZGluZycpO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInNpemVcIiwgXCJjbGFzc05hbWVcIiwgXCJhcmlhLWxhYmVsXCIsIFwiY29sb3JcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VMb2FkaW5nQXJpYUxhYmVsIH0gZnJvbSAnLi9fbG9hZGluZ19zdHJpbmdzJztcbmltcG9ydCB7IGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzIH0gZnJvbSAnLi9sb2FkaW5nX3NwaW5uZXIuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbmV4cG9ydCB2YXIgRXVpTG9hZGluZ1NwaW5uZXIgPSBmdW5jdGlvbiBFdWlMb2FkaW5nU3Bpbm5lcihfcmVmKSB7XG4gIHZhciBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMoZXVpVGhlbWUsIGNvbG9yKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpTG9hZGluZ1NwaW5uZXIsIHN0eWxlc1tzaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpTG9hZGluZ1NwaW5uZXInLCBjbGFzc05hbWUpO1xuICB2YXIgZGVmYXVsdExhYmVsID0gdXNlTG9hZGluZ0FyaWFMYWJlbCgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICByb2xlOiBcInByb2dyZXNzYmFyXCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCB8fCBkZWZhdWx0TGFiZWxcbiAgfSwgcmVzdCkpO1xufTtcbkV1aUxvYWRpbmdTcGlubmVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIGJvcmRlciBhbmQgaGlnaGxpZ2h0LlxuICAgICAgICogRWFjaCBrZXkgYWNjZXB0cyBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGFzIGEgYHN0cmluZ2BcbiAgICAgICAqIFNlZSAjRXVpTG9hZGluZ1NwaW5uZXJDb2xvclxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJvcmRlcjogUHJvcFR5cGVzLmFueSxcbiAgICBoaWdobGlnaHQ6IFByb3BUeXBlcy5hbnlcbiAgfSlcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7IGlmICghcmF3KSB7IHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7IH0gcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgX2xvYWRpbmdTcGlubmVyID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIGZyb20ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG5cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcXG4gIH1cXG5cIl0pKSk7XG5cbnZhciBzcGlubmVyU2l6ZXMgPSB7XG4gIHM6ICdtJyxcbiAgbTogJ2Jhc2UnLFxuICBsOiAnbCcsXG4gIHhsOiAneGwnLFxuICB4eGw6ICd4eGwnXG59O1xuXG52YXIgc3Bpbm5lckNvbG9yc0NTUyA9IGZ1bmN0aW9uIHNwaW5uZXJDb2xvcnNDU1MoYm9yZGVyLCBoaWdobGlnaHQpIHtcbiAgcmV0dXJuIFwiXFxuICAgIGJvcmRlci1jb2xvcjogXCIuY29uY2F0KGhpZ2hsaWdodCwgXCIgXCIpLmNvbmNhdChib3JkZXIsIFwiIFwiKS5jb25jYXQoYm9yZGVyLCBcIiBcIikuY29uY2F0KGJvcmRlciwgXCI7XFxuICBcIik7XG59O1xuXG5leHBvcnQgdmFyIGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzID0gZnVuY3Rpb24gZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMoX3JlZiwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlMb2FkaW5nU3Bpbm5lcjogLyojX19QVVJFX18qL2NzcyhcImZsZXgtc2hyaW5rOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIudGhpY2ssIFwiO1wiLCBzcGlubmVyQ29sb3JzQ1NTKChjb2xvciA9PT0gbnVsbCB8fCBjb2xvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29sb3IuYm9yZGVyKSB8fCBldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgKGNvbG9yID09PSBudWxsIHx8IGNvbG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb2xvci5oaWdobGlnaHQpIHx8IGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5KSwgXCI7XCIsIGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgX2xvYWRpbmdTcGlubmVyLCBcIiAwLjZzIGluZmluaXRlIGxpbmVhcjt9O2xhYmVsOmV1aUxvYWRpbmdTcGlubmVyO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJ3aWR0aDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMuc10sIFwiO2hlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMuc10sIFwiO2JvcmRlci13aWR0aDpjYWxjKFwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgKiAxLjUpOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLm1dLCBcIjtoZWlnaHQ6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLm1dLCBcIjtib3JkZXItd2lkdGg6Y2FsYyhcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiICogMS41KTs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhcIndpZHRoOlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5sXSwgXCI7aGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5sXSwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnhsXSwgXCI7aGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy54bF0sIFwiOztsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnh4bF0sIFwiO2hlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueHhsXSwgXCI7O2xhYmVsOnh4bDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgVVJMIGZyb20gJ3VybC1wYXJzZSc7XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVIcmVmKGhyZWYpIHtcbiAgLy8gY2hlY2sgaHJlZiBhbmQgdHJlYXQgaXQgYXMgaW52YWxpZCBpZiBpdCB1c2VzIHRoZSBqYXZhc2NyaXB0OiBwcm90b2NvbFxuICB2YXIgcGFydHMgPSBuZXcgVVJMKGhyZWYpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2NyaXB0LXVybFxuXG4gIHJldHVybiBwYXJ0cy5wcm90b2NvbCAhPT0gJ2phdmFzY3JpcHQ6Jztcbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyJztcbmV4cG9ydCB2YXIgaGFzUmVzaXplT2JzZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LlJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbmV4cG9ydCB2YXIgRXVpUmVzaXplT2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9FdWlPYnNlcnZlcikge1xuICBfaW5oZXJpdHMoRXVpUmVzaXplT2JzZXJ2ZXIsIF9FdWlPYnNlcnZlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlSZXNpemVPYnNlcnZlcik7XG5cbiAgZnVuY3Rpb24gRXVpUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVJlc2l6ZU9ic2VydmVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibmFtZVwiLCAnRXVpUmVzaXplT2JzZXJ2ZXInKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICB3aWR0aDogMFxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uUmVzaXplXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGBlbnRyeS5jb250ZW50UmVjdGAgcHJvdmlkZXMgaW5jb21wbGV0ZSBgaGVpZ2h0YCBhbmQgYHdpZHRoYCBkYXRhLlxuICAgICAgLy8gVXNlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgYW5kIGJvcmRlci5cbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01SZWN0UmVhZE9ubHlcbiAgICAgIGlmICghX3RoaXMuY2hpbGROb2RlKSByZXR1cm47XG5cbiAgICAgIHZhciBfdGhpcyRjaGlsZE5vZGUkZ2V0Qm8gPSBfdGhpcy5jaGlsZE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkY2hpbGROb2RlJGdldEJvLmhlaWdodCxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJGNoaWxkTm9kZSRnZXRCby53aWR0aDsgLy8gQ2hlY2sgZm9yIGFjdHVhbCByZXNpemUgZXZlbnRcblxuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUuaGVpZ2h0ID09PSBoZWlnaHQgJiYgX3RoaXMuc3RhdGUud2lkdGggPT09IHdpZHRoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMucHJvcHMub25SZXNpemUoe1xuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhlIHN1cGVyY2xhc3MgY2hlY2tzIHRoYXQgY2hpbGROb2RlIGlzIG5vdCBudWxsIGJlZm9yZSBpbnZva2luZ1xuICAgICAgLy8gYmVnaW5PYnNlcnZlKClcbiAgICAgIHZhciBjaGlsZE5vZGUgPSBfdGhpcy5jaGlsZE5vZGU7XG4gICAgICBfdGhpcy5vYnNlcnZlciA9IG1ha2VSZXNpemVPYnNlcnZlcihjaGlsZE5vZGUsIF90aGlzLm9uUmVzaXplKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBFdWlSZXNpemVPYnNlcnZlcjtcbn0oRXVpT2JzZXJ2ZXIpO1xuXG52YXIgbWFrZVJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gbWFrZVJlc2l6ZU9ic2VydmVyKG5vZGUsIGNhbGxiYWNrKSB7XG4gIHZhciBvYnNlcnZlcjtcblxuICBpZiAoaGFzUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICBvYnNlcnZlciA9IG5ldyB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSk7XG4gIH1cblxuICByZXR1cm4gb2JzZXJ2ZXI7XG59O1xuXG5leHBvcnQgdmFyIHVzZVJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gdXNlUmVzaXplT2JzZXJ2ZXIoY29udGFpbmVyLCBkaW1lbnNpb24pIHtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHtcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDBcbiAgfSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHNpemUgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgX3NldFNpemUgPSBfdXNlU3RhdGUyWzFdOyAvLyBfY3VycmVudERpbWVuc2lvbnMgYW5kIF9zZXRTaXplIGFyZSB1c2VkIHRvIG9ubHkgc3RvcmUgdGhlXG4gIC8vIG5ldyBzdGF0ZSAoYW5kIHRyaWdnZXIgYSByZS1yZW5kZXIpIHdoZW4gdGhlIG5ldyBkaW1lbnNpb25zIGFjdHVhbGx5IGRpZmZlclxuXG5cbiAgdmFyIF9jdXJyZW50RGltZW5zaW9ucyA9IHVzZVJlZihzaXplKTtcblxuICB2YXIgc2V0U2l6ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChkaW1lbnNpb25zKSB7XG4gICAgdmFyIGRvZXNXaWR0aE1hdHRlciA9IGRpbWVuc2lvbiAhPT0gJ2hlaWdodCc7XG4gICAgdmFyIGRvZXNIZWlnaHRNYXR0ZXIgPSBkaW1lbnNpb24gIT09ICd3aWR0aCc7XG5cbiAgICBpZiAoZG9lc1dpZHRoTWF0dGVyICYmIF9jdXJyZW50RGltZW5zaW9ucy5jdXJyZW50LndpZHRoICE9PSBkaW1lbnNpb25zLndpZHRoIHx8IGRvZXNIZWlnaHRNYXR0ZXIgJiYgX2N1cnJlbnREaW1lbnNpb25zLmN1cnJlbnQuaGVpZ2h0ICE9PSBkaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgX2N1cnJlbnREaW1lbnNpb25zLmN1cnJlbnQgPSBkaW1lbnNpb25zO1xuXG4gICAgICBfc2V0U2l6ZShkaW1lbnNpb25zKTtcbiAgICB9XG4gIH0sIFtkaW1lbnNpb25dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgIC8vIFJlc2l6ZU9ic2VydmVyJ3MgZmlyc3QgY2FsbCB0byB0aGUgb2JzZXJ2YXRpb24gY2FsbGJhY2sgaXMgc2NoZWR1bGVkIGluIHRoZSBmdXR1cmVcbiAgICAgIC8vIHNvIGZpbmQgdGhlIGNvbnRhaW5lcidzIGluaXRpYWwgZGltZW5zaW9ucyBub3dcbiAgICAgIHZhciBib3VuZGluZ1JlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBzZXRTaXplKHtcbiAgICAgICAgd2lkdGg6IGJvdW5kaW5nUmVjdC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib3VuZGluZ1JlY3QuaGVpZ2h0XG4gICAgICB9KTtcbiAgICAgIHZhciBvYnNlcnZlciA9IG1ha2VSZXNpemVPYnNlcnZlcihjb250YWluZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gYGVudHJ5LmNvbnRlbnRSZWN0YCBwcm92aWRlcyBpbmNvbXBsZXRlIGBoZWlnaHRgIGFuZCBgd2lkdGhgIGRhdGEuXG4gICAgICAgIC8vIFVzZSBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGFuZCBib3JkZXIuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01SZWN0UmVhZE9ubHlcbiAgICAgICAgdmFyIF9jb250YWluZXIkZ2V0Qm91bmRpbiA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICAgIGhlaWdodCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi5oZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi53aWR0aDtcblxuICAgICAgICBzZXRTaXplKHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZlciAmJiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTaXplKHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY29udGFpbmVyLCBzZXRTaXplXSk7XG4gIHJldHVybiBzaXplO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgRXVpT2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aU9ic2VydmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aU9ic2VydmVyKTtcblxuICBmdW5jdGlvbiBFdWlPYnNlcnZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpT2JzZXJ2ZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJuYW1lXCIsICdFdWlPYnNlcnZlcicpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNoaWxkTm9kZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvYnNlcnZlclwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ1cGRhdGVDaGlsZE5vZGVcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgaWYgKF90aGlzLmNoaWxkTm9kZSA9PT0gcmVmKSByZXR1cm47IC8vIG5vZGUgaGFzbid0IGNoYW5nZWRcbiAgICAgIC8vIGlmIHRoZXJlJ3MgYW4gZXhpc3Rpbmcgb2JzZXJ2ZXIgZGlzY29ubmVjdCBpdFxuXG4gICAgICBpZiAoX3RoaXMub2JzZXJ2ZXIgIT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cbiAgICAgICAgX3RoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jaGlsZE5vZGUgPSByZWY7XG5cbiAgICAgIGlmIChfdGhpcy5jaGlsZE5vZGUgIT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5iZWdpbk9ic2VydmUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdWlPYnNlcnZlciBoYXMgbm8gZGVmYXVsdCBvYnNlcnZhdGlvbiBtZXRob2QnKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlPYnNlcnZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5jaGlsZE5vZGUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIi5jb25jYXQodGhpcy5uYW1lLCBcIiBkaWQgbm90IHJlY2VpdmUgYSByZWZcIikpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLm9ic2VydmVyICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHByb3BzLmNoaWxkcmVuKHRoaXMudXBkYXRlQ2hpbGROb2RlKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpT2JzZXJ2ZXI7XG59KENvbXBvbmVudCk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJzaXplXCIsIFwiY29sb3JcIiwgXCJncm93XCIsIFwidGV4dEFsaWduXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRleHRTdHlsZXMgfSBmcm9tICcuL3RleHQuc3R5bGVzJztcbmltcG9ydCB7IEV1aVRleHRDb2xvciB9IGZyb20gJy4vdGV4dF9jb2xvcic7XG5pbXBvcnQgeyBFdWlUZXh0QWxpZ24gfSBmcm9tICcuL3RleHRfYWxpZ24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgVEVYVF9TSVpFUyA9IFsneHMnLCAncycsICdtJywgJ3JlbGF0aXZlJ107XG5leHBvcnQgdmFyIEV1aVRleHQgPSBmdW5jdGlvbiBFdWlUZXh0KF9yZWYpIHtcbiAgdmFyIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIF9yZWYkZ3JvdyA9IF9yZWYuZ3JvdyxcbiAgICAgIGdyb3cgPSBfcmVmJGdyb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGdyb3csXG4gICAgICB0ZXh0QWxpZ24gPSBfcmVmLnRleHRBbGlnbixcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlUZXh0U3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dCwgIWdyb3cgPyBzdHlsZXMuY29uc3RyYWluZWRXaWR0aCA6IHVuZGVmaW5lZCwgc3R5bGVzW3NpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUZXh0JywgY2xhc3NOYW1lKTtcblxuICB2YXIgdGV4dCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuXG4gIGlmIChjb2xvcikge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aVRleHRDb2xvciwge1xuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY2xvbmVFbGVtZW50OiB0cnVlXG4gICAgfSwgdGV4dCk7XG4gIH1cblxuICBpZiAodGV4dEFsaWduKSB7XG4gICAgdGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpVGV4dEFsaWduLCB7XG4gICAgICB0ZXh0QWxpZ246IHRleHRBbGlnbixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNsb25lRWxlbWVudDogdHJ1ZVxuICAgIH0sIHRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRleHQ7XG59O1xuRXVpVGV4dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgdGV4dCBzaXplLiBDaG9vc2UgYHJlbGF0aXZlYCB0byBjb250cm9sIHRoZSBgZm9udC1zaXplYCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYSBwYXJlbnQgY29udGFpbmVyLlxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycyBvciBhIGBoZXhgLCBgcmdiYCBvciBgcmdiYWAgdmFsdWUuXG4gICAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gIGdyb3c6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbnZhciBfY29sb3JDU1MgPSBmdW5jdGlvbiBfY29sb3JDU1MoY29sb3IpIHtcbiAgcmV0dXJuIFwiXFxuICAgIGNvbG9yOiBcIi5jb25jYXQoY29sb3IsIFwiO1xcblxcbiAgICAmOmhvdmVyLFxcbiAgICAmOmZvY3VzLFxcbiAgICAmOnRhcmdldCB7XFxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgIH1cXG5cXG4gICAgJjp0YXJnZXQge1xcbiAgICAgIGNvbG9yOiBkYXJrZW4oXCIpLmNvbmNhdChjb2xvciwgXCIsIDEwJSk7XFxuICAgIH1cXG4gIFwiKTtcbn07XG5cbmV4cG9ydCB2YXIgZXVpTGlua0hvdmVyQ1NTID0gZnVuY3Rpb24gZXVpTGlua0hvdmVyQ1NTKCkge1xuICByZXR1cm4gXCJcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICBcIjtcbn07XG5leHBvcnQgdmFyIGV1aUxpbmtGb2N1c0NTUyA9IGZ1bmN0aW9uIGV1aUxpbmtGb2N1c0NTUyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IFwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2ssIFwiICFpbXBvcnRhbnQ7XFxuICBcIik7XG59O1xuZXhwb3J0IHZhciBldWlMaW5rQ1NTID0gZnVuY3Rpb24gZXVpTGlua0NTUyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gICAgZm9udC13ZWlnaHQ6IFwiLmNvbmNhdChldWlUaGVtZS5mb250LndlaWdodC5tZWRpdW0sIFwiO1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBcIikuY29uY2F0KGV1aUxpbmtIb3ZlckNTUygpLCBcIlxcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMge1xcbiAgICAgIFwiKS5jb25jYXQoZXVpRm9jdXNSaW5nKGV1aVRoZW1lLCAnb3V0c2V0JyksIFwiXFxuICAgICAgXCIpLmNvbmNhdChldWlMaW5rRm9jdXNDU1MoZXVpVGhlbWUpLCBcIlxcbiAgICB9XFxuICBcIik7XG59O1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI5bmpiaTUtZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImZvbnQtd2VpZ2h0OmluaGVyaXQ7Jjpob3ZlcntjdXJzb3I6YXV0bzt9Jjpob3ZlciwmOmZvY3VzLCY6dGFyZ2V0e3RleHQtZGVjb3JhdGlvbjpub25lO307bGFiZWw6ZGlzYWJsZWQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiOW5qYmk1LWRpc2FibGVkXCIsXG4gIHN0eWxlczogXCJmb250LXdlaWdodDppbmhlcml0OyY6aG92ZXJ7Y3Vyc29yOmF1dG87fSY6aG92ZXIsJjpmb2N1cywmOnRhcmdldHt0ZXh0LWRlY29yYXRpb246bm9uZTt9O2xhYmVsOmRpc2FibGVkO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpTGlua1N0eWxlcyA9IGZ1bmN0aW9uIGV1aUxpbmtTdHlsZXMoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpTGluazogLyojX19QVVJFX18qL2NzcyhldWlMaW5rQ1NTKGV1aVRoZW1lKSwgXCIgdXNlci1zZWxlY3Q6dGV4dDsmW3RhcmdldD0nX2JsYW5rJ117cG9zaXRpb246cmVsYXRpdmU7fTtsYWJlbDpldWlMaW5rO1wiKSxcbiAgICBkaXNhYmxlZDogX3JlZixcbiAgICAvLyBDb2xvciBzdHlsZXNcbiAgICBwcmltYXJ5OiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQpLCBcIjtsYWJlbDpwcmltYXJ5O1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQpLCBcIjtsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICBzdWNjZXNzOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQpLCBcIjtsYWJlbDpzdWNjZXNzO1wiKSxcbiAgICBhY2NlbnQ6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0KSwgXCI7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5kYW5nZXJUZXh0KSwgXCI7bGFiZWw6ZGFuZ2VyO1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMud2FybmluZ1RleHQpLCBcIjtsYWJlbDp3YXJuaW5nO1wiKSxcbiAgICBnaG9zdDogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLmdob3N0KSwgXCI7bGFiZWw6Z2hvc3Q7XCIpLFxuICAgIHRleHQ6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy50ZXh0KSwgXCI7bGFiZWw6dGV4dDtcIiksXG4gICAgLy8gQ2hpbGRyZW5cbiAgICBldWlMaW5rX19zY3JlZW5SZWFkZXJUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2xlZnQnLCAnMHB4JyksIFwiOztsYWJlbDpldWlMaW5rX19zY3JlZW5SZWFkZXJUZXh0O1wiKSxcbiAgICBldWlMaW5rX19leHRlcm5hbEljb246IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOmV1aUxpbmtfX2V4dGVybmFsSWNvbjtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUZXh0QnJlYWtXb3JkLCBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpVGl0bGUgPSBmdW5jdGlvbiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIHNjYWxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnbSc7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHRpdGxlU2NhbGVUb0ZvbnRTaXplU2NhbGVNYXAgPSB7XG4gICAgeHh4czogJ3hzJyxcbiAgICB4eHM6ICdzJyxcbiAgICB4czogJ20nLFxuICAgIHM6ICdsJyxcbiAgICBtOiAneGwnLFxuICAgIGw6ICd4eGwnXG4gIH07XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgdGl0bGVTY2FsZVRvRm9udFNpemVTY2FsZU1hcFtzY2FsZV0sIG9wdGlvbnMpKSwge30sIHtcbiAgICBmb250V2VpZ2h0OiBldWlUaGVtZS5mb250LndlaWdodFtldWlUaGVtZS5mb250LnRpdGxlLndlaWdodF0sXG4gICAgY29sb3I6IGV1aVRoZW1lLmNvbG9ycy50aXRsZVxuICB9KTtcbn07IC8vIEhvb2sgdmVyc2lvblxuXG5leHBvcnQgdmFyIHVzZUV1aVRpdGxlID0gZnVuY3Rpb24gdXNlRXVpVGl0bGUoc2NhbGUsIG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVRpdGxlKGV1aVRoZW1lLCBzY2FsZSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiBTdHlsZXNcbiAqL1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxeDJxc2IxLXVwcGVyY2FzZVwiLFxuICBzdHlsZXM6IFwidGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xhYmVsOnVwcGVyY2FzZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxeDJxc2IxLXVwcGVyY2FzZVwiLFxuICBzdHlsZXM6IFwidGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xhYmVsOnVwcGVyY2FzZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aVRpdGxlU3R5bGVzID0gZnVuY3Rpb24gZXVpVGl0bGVTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiB7XG4gICAgZXVpVGl0bGU6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dEJyZWFrV29yZCgpLCBcIiAmKyZ7bWFyZ2luLXRvcDpcIiwgZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLnNpemUubCwgXCI7fTtsYWJlbDpldWlUaXRsZTtcIiksXG4gICAgdXBwZXJjYXNlOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgeHh4czogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksIFwiOztsYWJlbDp4eHhzO1wiKSxcbiAgICB4eHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiOztsYWJlbDp4eHM7XCIpLFxuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjs7bGFiZWw6bDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBldWlGb250U2l6ZSwgZXVpQmFja2dyb3VuZENvbG9yIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpTGlua0NTUyB9IGZyb20gJy4uL2xpbmsvbGluay5zdHlsZXMnO1xuaW1wb3J0IHsgZXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZS90aXRsZS5zdHlsZXMnO1xuLyoqXG4gKiBUT0RPOiBNYWtlIHRoaXMgYSBnbG9iYWwgdmFsdWUgc28gaXQgY2FuIGJlIHNldCBieSB0aGVtZT9cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRleHRDb25zdHJhaW5lZE1heFdpZHRoID0gJ21heCg2NGNoLCA3NSUpJztcbi8qKlxuICogTWl4aW5zXG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0ID0gZnVuY3Rpb24gZXVpVGV4dChldWlUaGVtZSkge1xuICB2YXIgaW5oZXJpdENvbG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBjb2xvcjogaW5oZXJpdENvbG9yID8gJ2luaGVyaXQnIDogZXVpVGhlbWUuY29sb3JzLnRleHQsXG4gICAgZm9udFdlaWdodDogZXVpVGhlbWUuZm9udC53ZWlnaHQucmVndWxhclxuICB9O1xufTsgLy8gSW50ZXJuYWwgdXRpbGl0eSBmb3IgRXVpVGV4dCBzY2FsZXMvc2l6ZXNcblxudmFyIGV1aVNjYWxlVGV4dCA9IGZ1bmN0aW9uIGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIG9wdGlvbnMpIHtcbiAgdmFyIF9ldWlGb250U2l6ZSA9IGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ20nLCBvcHRpb25zKSxcbiAgICAgIGZvbnRTaXplID0gX2V1aUZvbnRTaXplLmZvbnRTaXplLFxuICAgICAgbGluZUhlaWdodCA9IF9ldWlGb250U2l6ZS5saW5lSGVpZ2h0O1xuXG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIG1lYXN1cmVtZW50ID0gb3B0aW9ucy5tZWFzdXJlbWVudCxcbiAgICAgIF9jdXN0b21TY2FsZSA9IG9wdGlvbnMuY3VzdG9tU2NhbGU7XG4gIHZhciBsaW5lSGVpZ2h0U2l6ZSA9IG1lYXN1cmVtZW50ID09PSAnZW0nID8gXCJcIi5jb25jYXQobGluZUhlaWdodCwgXCJlbVwiKSA6IGxpbmVIZWlnaHQ7XG4gIHZhciBoZWFkaW5ncyA9IHtcbiAgICBoMTogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcsIG9wdGlvbnMpLFxuICAgIGgyOiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdtJywgb3B0aW9ucyksXG4gICAgaDM6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3MnLCBvcHRpb25zKSxcbiAgICBoNDogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHMnLCBvcHRpb25zKSxcbiAgICBoNTogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJywgb3B0aW9ucyksXG4gICAgaDY6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnLCBvcHRpb25zKVxuICB9OyAvLyBHZW5lcmF0ZSBtYXJnaW5zIGZvciBoZWFkaW5ncyBiYXNlZCBvbiBjdXN0b21TY2FsZSAobm90IG9uIGhlYWRpbmcgbGV2ZWwpXG5cbiAgdmFyIGN1c3RvbVNjYWxlID0gX2N1c3RvbVNjYWxlID09PSAneHh4cycgPyAneHhzJyA6IF9jdXN0b21TY2FsZSB8fCAnbSc7XG4gIHZhciBoZWFkaW5nTWFyZ2luVG9wID0gXCJcIi5jb25jYXQocGFyc2VGbG9hdChldWlUaGVtZS5zaXplW2N1c3RvbVNjYWxlXSkgKiAyLCBcInB4XCIpO1xuICB2YXIgaGVhZGluZ01hcmdpbkJvdHRvbSA9IGV1aVRoZW1lLnNpemVbY3VzdG9tU2NhbGVdO1xuICByZXR1cm4gXCJcXG4gICAgZm9udC1zaXplOiBcIi5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChsaW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgaDEge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMS5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDEubGluZUhlaWdodCwgXCI7XFxuICAgIH1cXG4gICAgaDE6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgIH1cXG5cXG4gICAgaDIge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMi5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDIubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoMyB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmgzLmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oMy5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGg0IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDQuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmg0LmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaDUge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oNS5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDUubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoNiB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmg2LmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oNi5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHAsXFxuICAgIHVsLFxcbiAgICBvbCxcXG4gICAgZGwsXFxuICAgIGJsb2NrcXVvdGUsXFxuICAgIGltZyxcXG4gICAgcHJlIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBsaW5lSGVpZ2h0U2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgdWwsXFxuICAgIG9sIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgbGluZUhlaWdodFNpemUpLCBcIlxcbiAgICB9XFxuICBcXG4gICAgYmxvY2txdW90ZSB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGZvbnRTaXplLCBcIjtcXG4gICAgICBwYWRkaW5nOiBcIikuY29uY2F0KGxpbmVIZWlnaHRTaXplLCBcIjtcXG4gICAgfVxcblxcbiAgICBkZCArIGR0IHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBmb250U2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgZHQsXFxuICAgIC5ldWktZGVmaW5pdGlvbkxpc3RSZXZlcnNlIGRkIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGxpbmVIZWlnaHQsIFwiO1xcbiAgICB9XFxuXFxuICAgIC5ldWktZGVmaW5pdGlvbkxpc3RSZXZlcnNlIGR0IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnLCBvcHRpb25zKS5mb250U2l6ZSwgXCI7XFxuICAgICAgY29sb3I6IFwiKS5jb25jYXQoZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO1xcbiAgICB9XFxuXFxuICAgIHNtYWxsIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycsIG9wdGlvbnMpLmZvbnRTaXplLCBcIjtcXG4gICAgfVxcblxcbiAgICBwcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSkge1xcbiAgICAgIHBhZGRpbmc6IFwiKS5jb25jYXQobGluZUhlaWdodFNpemUsIFwiO1xcbiAgICB9XFxuXFxuICAgIGNvZGU6bm90KC5ldWlDb2RlKTpub3QoLmV1aUNvZGVCbG9ja19fY29kZSkgIHtcXG4gICAgICBmb250LXNpemU6IC45ZW07IC8vIDkwJSBvZiBwYXJlbnQgZm9udCBzaXplXFxuICAgIH1cXG4gICAgXCIpLmNvbmNhdCggLy8gd2hlbiB0ZXh0U2l6ZSBpcyAnbScsIHRoZSAna2JkJyBlbGVtZW50IGdldHMgYSBsaW5lIGJldHdlZW4gdGhlIHRleHQgYW5kIHRoZSBib3JkZXItYm90dG9tXG4gIF9jdXN0b21TY2FsZSA9PT0gJ20nID8gXCJcXG4gICAga2JkIHtcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1ib3R0b20nLCBldWlUaGVtZS5zaXplLnhzKSwgXCJcXG4gICAgICAvLyBlbnN1cmVzIHdoZW4gb25seSBvbmUgY2hhcmFjdGVyIHRoZSBzaGFwZSBsb29rcyBsaWtlIGEgc3F1YXJlXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCBldWlUaGVtZS5zaXplLmwpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiXFxuICAgIH1cXG4gICAgXFxuICAgIGtiZDo6YWZ0ZXIge1xcbiAgICAgIGNvbnRlbnQ6ICcnO1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnYm9yZGVyLWJvdHRvbScsIFwiXCIuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIikuY29uY2F0KGV1aVRoZW1lLmNvbG9ycy50ZXh0KSksIFwiXFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnYm90dG9tJywgZXVpVGhlbWUuc2l6ZS54eHMpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbGVmdCcsIDApLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIlxcbiAgICB9XCIpIDogJycsIFwiXFxuICBcIik7XG59O1xuLyoqXG4gKiBTdHlsZXNcbiAqL1xuXG5cbmV4cG9ydCB2YXIgZXVpVGV4dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRleHRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHQoZXVpVGhlbWUsIHRydWUpLCBcIjtjbGVhcjpib3RoO2E6bm90KFtjbGFzc10pe1wiLCBldWlMaW5rQ1NTKGV1aVRoZW1lKSwgXCI7fWltZ3tkaXNwbGF5OmJsb2NrO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIjt9dWx7bGlzdC1zdHlsZTpkaXNjO31vbHtsaXN0LXN0eWxlOmRlY2ltYWw7fWJsb2NrcXVvdGU6bm90KC5ldWlNYXJrZG93bkZvcm1hdF9fYmxvY2txdW90ZSl7cG9zaXRpb246cmVsYXRpdmU7XCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLWhvcml6b250YWwnLCAnYXV0bycpLCBcIiBmb250LWZhbWlseTpcIiwgZXVpVGhlbWUuZm9udC5mYW1pbHlTZXJpZiwgXCI7Zm9udC1zdHlsZTppdGFsaWM7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3A6bGFzdC1jaGlsZHtcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsICcwJyksIFwiO30mOmJlZm9yZSwmOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6Jyc7XCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGljayksIFwiIFwiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICc1MCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCAnMjUlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdyaWdodCcsICcyNSUnKSwgXCIgYmFja2dyb3VuZDpcIiwgZXVpVGhlbWUuY29sb3JzLmRhcmtTaGFkZSwgXCI7fSY6YmVmb3Jle1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCAnMCcpLCBcIjt9JjphZnRlcntcIiwgbG9naWNhbENTUygnYm90dG9tJywgJzAnKSwgXCI7fX1oMXtcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjt9aDJ7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7fWgze1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiO31oNCxkdHtcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCI7fWg1e1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHMnKSwgXCI7fWg2e1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksIFwiIHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt9aDEsaDIsaDMsaDQsaDUsaDYsZHR7Y29sb3I6aW5oZXJpdDt9cHJlOm5vdCguZXVpQ29kZUJsb2NrX19wcmUpe3doaXRlLXNwYWNlOnByZS13cmFwO2JhY2tncm91bmQ6XCIsIGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZUNvbnRleHQsICdzdWJkdWVkJyksIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7fXByZTpub3QoLmV1aUNvZGVCbG9ja19fcHJlKSxwcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSkgY29kZXtkaXNwbGF5OmJsb2NrO30+Omxhc3QtY2hpbGR7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCAnMCAhaW1wb3J0YW50JyksIFwiO31rYmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBldWlUaGVtZS5zaXplLnh4cyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgbGluZS1oZWlnaHQ6MTtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO2JvcmRlci1yYWRpdXM6Y2FsYyhcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgXCIgLyAyKTt9O2xhYmVsOmV1aVRleHQ7XCIpLFxuICAgIGNvbnN0cmFpbmVkV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LXdpZHRoJywgZXVpVGV4dENvbnN0cmFpbmVkTWF4V2lkdGgpLCBcIjs7bGFiZWw6Y29uc3RyYWluZWRXaWR0aDtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIG1lYXN1cmVtZW50OiAncmVtJyxcbiAgICAgIGN1c3RvbVNjYWxlOiAnbSdcbiAgICB9KSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgbWVhc3VyZW1lbnQ6ICdyZW0nLFxuICAgICAgY3VzdG9tU2NhbGU6ICdzJ1xuICAgIH0pLCBcIjs7bGFiZWw6cztcIiksXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgbWVhc3VyZW1lbnQ6ICdyZW0nLFxuICAgICAgY3VzdG9tU2NhbGU6ICd4cydcbiAgICB9KSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICByZWxhdGl2ZTogLyojX19QVVJFX18qL2NzcyhldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICBtZWFzdXJlbWVudDogJ2VtJ1xuICAgIH0pLCBcIjs7bGFiZWw6cmVsYXRpdmU7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImNsb25lRWxlbWVudFwiLCBcInN0eWxlXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudCc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRleHRDb2xvclN0eWxlcyB9IGZyb20gJy4vdGV4dF9jb2xvci5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ09MT1JTID0gWydkZWZhdWx0JywgJ3N1YmR1ZWQnLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnZGFuZ2VyJywgJ3dhcm5pbmcnLCAnZ2hvc3QnLCAnaW5oZXJpdCddO1xuZXhwb3J0IHZhciBFdWlUZXh0Q29sb3IgPSBmdW5jdGlvbiBFdWlUZXh0Q29sb3IoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJGNvbXBvbmVudCA9IF9yZWYuY29tcG9uZW50LFxuICAgICAgY29tcG9uZW50ID0gX3JlZiRjb21wb25lbnQgPT09IHZvaWQgMCA/ICdzcGFuJyA6IF9yZWYkY29tcG9uZW50LFxuICAgICAgX3JlZiRjbG9uZUVsZW1lbnQgPSBfcmVmLmNsb25lRWxlbWVudCxcbiAgICAgIGNsb25lRWxlbWVudCA9IF9yZWYkY2xvbmVFbGVtZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2xvbmVFbGVtZW50LFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc05hbWVkQ29sb3IgPSBDT0xPUlMuaW5jbHVkZXMoY29sb3IpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpVGV4dENvbG9yU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dENvbG9yLCBpc05hbWVkQ29sb3IgPyBzdHlsZXNbY29sb3JdIDogc3R5bGVzLmN1c3RvbUNvbG9yXTsgLy8gV2UncmUgY2hlY2tpbmcgaWYgaXMgYSBjdXN0b20gY29sb3IuXG4gIC8vIElmIGl0IGlzIGEgY3VzdG9tIGNvbG9yIHdlIHNldCB0aGUgYGNvbG9yYCBvZiB0aGUgYC5ldWlUZXh0Q29sb3JgIGRpdiB0byB0aGF0IGN1c3RvbSBjb2xvci5cbiAgLy8gVGhpcyB3YXkgdGhlIGNoaWxkcmVuIHRleHQgZWxlbWVudHMgY2FuIGBpbmhlcml0YCB0aGF0IGNvbG9yIGFuZCBib3JkZXIgYW5kIGJhY2tncm91bmRzIGNhbiBnZXQgdGhhdCBgY3VycmVudENvbG9yYC5cblxuICB2YXIgZXVpVGV4dFN0eWxlID0gIWlzTmFtZWRDb2xvciA/IF9vYmplY3RTcHJlYWQoe1xuICAgIGNvbG9yOiBjb2xvclxuICB9LCBzdHlsZSkgOiBfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZSk7XG5cbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgc3R5bGU6IGV1aVRleHRTdHlsZVxuICB9LCByZXN0KTtcblxuICBpZiAoIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiYgY2xvbmVFbGVtZW50KSB7XG4gICAgdmFyIGNoaWxkcmVuU3R5bGUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNoaWxkcmVuLnByb3BzLnN0eWxlKSwgZXVpVGV4dFN0eWxlKTtcblxuICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIHN0eWxlOiBjaGlsZHJlblN0eWxlXG4gICAgfSkpO1xuICB9IGVsc2Uge1xuICAgIHZhciBDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpVGV4dENvbG9yLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMgb3IgYSBgaGV4YCwgYHJnYmAgb3IgYHJnYmFgIHZhbHVlLlxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgcm9vdCBlbGVtZW50XG4gICAgICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCIsIFwic3BhblwiXSksXG5cbiAgLyoqXG4gICAgICAgKiBBcHBsaWVzIHRleHQgc3R5bGluZyB0byB0aGUgY2hpbGQgZWxlbWVudCBpbnN0ZWFkIG9mIHJlbmRlcmluZyBhIHBhcmVudCB3cmFwcGVyIGBzcGFuYC9gZGl2YC5cbiAgICAgICAqIENhbiBvbmx5IGJlIHVzZWQgd2hlbiB3cmFwcGluZyBhICpzaW5nbGUqIGNoaWxkIGVsZW1lbnQvdGFnLCBhbmQgbm90IHJhdyB0ZXh0LlxuICAgICAgICovXG4gIGNsb25lRWxlbWVudDogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIlxufSA6IHtcbiAgbmFtZTogXCJ1YWNqYzUtaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiY29sb3I6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpVGV4dENvbG9yU3R5bGVzID0gZnVuY3Rpb24gZXVpVGV4dENvbG9yU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVRleHRDb2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlUZXh0Q29sb3I7XCIpLFxuICAgIGRlZmF1bHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiOztsYWJlbDpkZWZhdWx0O1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCwgXCI7O2xhYmVsOnN1YmR1ZWQ7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0LCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0LCBcIjs7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQsIFwiOztsYWJlbDpkYW5nZXI7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLndhcm5pbmdUZXh0LCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgZ2hvc3Q6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmdob3N0LCBcIiFpbXBvcnRhbnQ7O2xhYmVsOmdob3N0O1wiKSxcbiAgICBpbmhlcml0OiBfcmVmLFxuICAgIGN1c3RvbUNvbG9yOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmN1c3RvbUNvbG9yO1wiKSAvLyBIYW5kbGVkIGJ5IGBzdHlsZWAgdGFnIC0gdGhpcyBpcyBqdXN0IGhlcmUgZm9yIGEgY2xhc3NOYW1lIGhvb2tcblxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwidGV4dEFsaWduXCIsIFwiY2xvbmVFbGVtZW50XCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudCc7XG5pbXBvcnQgeyBldWlUZXh0QWxpZ25TdHlsZXMgfSBmcm9tICcuL3RleHRfYWxpZ24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEFMSUdOTUVOVFMgPSBbJ2xlZnQnLCAncmlnaHQnLCAnY2VudGVyJ107XG5leHBvcnQgdmFyIEV1aVRleHRBbGlnbiA9IGZ1bmN0aW9uIEV1aVRleHRBbGlnbihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJHRleHRBbGlnbiA9IF9yZWYudGV4dEFsaWduLFxuICAgICAgdGV4dEFsaWduID0gX3JlZiR0ZXh0QWxpZ24gPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkdGV4dEFsaWduLFxuICAgICAgX3JlZiRjbG9uZUVsZW1lbnQgPSBfcmVmLmNsb25lRWxlbWVudCxcbiAgICAgIGNsb25lRWxlbWVudCA9IF9yZWYkY2xvbmVFbGVtZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2xvbmVFbGVtZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBzdHlsZXMgPSBldWlUZXh0QWxpZ25TdHlsZXMoKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dEFsaWduLCBzdHlsZXNbdGV4dEFsaWduXV07XG5cbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCk7XG5cbiAgaWYgKCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNsb25lRWxlbWVudCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBwcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgcHJvcHMsIGNoaWxkcmVuKTtcbiAgfVxufTtcbkV1aVRleHRBbGlnbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQXBwbGllcyB0ZXh0IHN0eWxpbmcgdG8gdGhlIGNoaWxkIGVsZW1lbnQgaW5zdGVhZCBvZiByZW5kZXJpbmcgYSBwYXJlbnQgd3JhcHBlciBgZGl2YC5cbiAgICAgICAqIENhbiBvbmx5IGJlIHVzZWQgd2hlbiB3cmFwcGluZyBhICpzaW5nbGUqIGNoaWxkIGVsZW1lbnQvdGFnLCBhbmQgbm90IHJhdyB0ZXh0LlxuICAgICAgICovXG4gIGNsb25lRWxlbWVudDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlUZXh0QWxpZ25TdHlsZXMgPSBmdW5jdGlvbiBldWlUZXh0QWxpZ25TdHlsZXMoKSB7XG4gIHJldHVybiB7XG4gICAgZXVpVGV4dEFsaWduOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aVRleHRBbGlnbjtcIiksXG4gICAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiOztsYWJlbDpsZWZ0O1wiKSxcbiAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdyaWdodCcpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpLFxuICAgIGNlbnRlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCI7O2xhYmVsOmNlbnRlcjtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpZGVcIiwgXCJpY29uU2l6ZVwiLCBcImNvbG9yXCIsIFwic2l6ZVwiLCBcImZsdXNoXCIsIFwiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiaXNMb2FkaW5nXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInR5cGVcIiwgXCJidXR0b25SZWZcIiwgXCJjb250ZW50UHJvcHNcIiwgXCJ0ZXh0UHJvcHNcIiwgXCJpc1NlbGVjdGVkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uQ29udGVudERlcHJlY2F0ZWQgYXMgRXVpQnV0dG9uQ29udGVudCB9IGZyb20gJy4uL19idXR0b25fY29udGVudF9kZXByZWNhdGVkJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgY29sb3JUb0NsYXNzTmFtZU1hcCA9IHtcbiAgcHJpbWFyeTogJ2V1aUJ1dHRvbkVtcHR5LS1wcmltYXJ5JyxcbiAgZGFuZ2VyOiAnZXVpQnV0dG9uRW1wdHktLWRhbmdlcicsXG4gIHRleHQ6ICdldWlCdXR0b25FbXB0eS0tdGV4dCcsXG4gIGdob3N0OiAnZXVpQnV0dG9uRW1wdHktLWdob3N0JyxcbiAgc3VjY2VzczogJ2V1aUJ1dHRvbkVtcHR5LS1zdWNjZXNzJyxcbiAgd2FybmluZzogJ2V1aUJ1dHRvbkVtcHR5LS13YXJuaW5nJ1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc05hbWVNYXApO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgeHM6ICdldWlCdXR0b25FbXB0eS0teFNtYWxsJyxcbiAgczogJ2V1aUJ1dHRvbkVtcHR5LS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG52YXIgZmx1c2hUeXBlVG9DbGFzc05hbWVNYXAgPSB7XG4gIGxlZnQ6ICdldWlCdXR0b25FbXB0eS0tZmx1c2hMZWZ0JyxcbiAgcmlnaHQ6ICdldWlCdXR0b25FbXB0eS0tZmx1c2hSaWdodCcsXG4gIGJvdGg6ICdldWlCdXR0b25FbXB0eS0tZmx1c2hCb3RoJ1xufTtcbmV4cG9ydCB2YXIgRkxVU0hfVFlQRVMgPSBrZXlzT2YoZmx1c2hUeXBlVG9DbGFzc05hbWVNYXApO1xuLyoqXG4gKiBFeHRlbmRzIEV1aUJ1dHRvbkNvbnRlbnRQcm9wcyB3aGljaCBwcm92aWRlc1xuICogYGljb25UeXBlYCwgYGljb25TaWRlYCwgYW5kIGB0ZXh0UHJvcHNgXG4gKi9cblxuZXhwb3J0IHZhciBFdWlCdXR0b25FbXB0eSA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkVtcHR5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgICAgX3JlZiRpY29uU2lkZSA9IF9yZWYuaWNvblNpZGUsXG4gICAgICBpY29uU2lkZSA9IF9yZWYkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkaWNvblNpZGUsXG4gICAgICBfcmVmJGljb25TaXplID0gX3JlZi5pY29uU2l6ZSxcbiAgICAgIGljb25TaXplID0gX3JlZiRpY29uU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRpY29uU2l6ZSxcbiAgICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgICAgZmx1c2ggPSBfcmVmLmZsdXNoLFxuICAgICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBfZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgICBjb250ZW50UHJvcHMgPSBfcmVmLmNvbnRlbnRQcm9wcyxcbiAgICAgIHRleHRQcm9wcyA9IF9yZWYudGV4dFByb3BzLFxuICAgICAgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkOyAvLyBJZiBpbiB0aGUgbG9hZGluZyBzdGF0ZSwgZm9yY2UgZGlzYWJsZWQgdG8gdHJ1ZVxuXG4gIHZhciBidXR0b25Jc0Rpc2FibGVkID0gaXNMb2FkaW5nIHx8IGlzRGlzYWJsZWQgfHwgZGlzYWJsZWQ7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uRW1wdHknLCBjb2xvclRvQ2xhc3NOYW1lTWFwW2NvbG9yXSwgc2l6ZSA/IHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSA6IG51bGwsIGZsdXNoID8gZmx1c2hUeXBlVG9DbGFzc05hbWVNYXBbZmx1c2hdIDogbnVsbCwge1xuICAgICdldWlCdXR0b25FbXB0eS1pc0Rpc2FibGVkJzogYnV0dG9uSXNEaXNhYmxlZFxuICB9LCBjbGFzc05hbWUpO1xuICB2YXIgY29udGVudENsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25FbXB0eV9fY29udGVudCcsIGNvbnRlbnRQcm9wcyAmJiBjb250ZW50UHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHRleHRDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uRW1wdHlfX3RleHQnLCB0ZXh0UHJvcHMgJiYgdGV4dFByb3BzLmNsYXNzTmFtZSk7XG5cbiAgdmFyIGlubmVyTm9kZSA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uQ29udGVudCwgX2V4dGVuZHMoe1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIGljb25UeXBlOiBpY29uVHlwZSxcbiAgICBpY29uU2lkZTogaWNvblNpZGUsXG4gICAgaWNvblNpemU6IHNpemUgPT09ICd4cycgPyAncycgOiBpY29uU2l6ZSxcbiAgICB0ZXh0UHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGV4dFByb3BzKSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogdGV4dENsYXNzTmFtZXNcbiAgICB9KVxuICB9LCBjb250ZW50UHJvcHMsIHtcbiAgICAvLyBjbGFzc05hbWUgaGFzIHRvIGNvbWUgbGFzdCB0byBvdmVycmlkZSBjb250ZW50UHJvcHMuY2xhc3NOYW1lXG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NOYW1lc1xuICB9KSwgY2hpbGRyZW4pOyAvLyA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuXG5cbiAgaWYgKGhyZWYgJiYgIWJ1dHRvbklzRGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgaW5uZXJOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICBkaXNhYmxlZDogYnV0dG9uSXNEaXNhYmxlZCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgdHlwZTogdHlwZSxcbiAgICByZWY6IGJ1dHRvblJlZixcbiAgICBcImFyaWEtcHJlc3NlZFwiOiBpc1NlbGVjdGVkXG4gIH0sIHJlc3QpLCBpbm5lck5vZGUpO1xufTtcbkV1aUJ1dHRvbkVtcHR5LnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJ4c1wiLCBcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICBmbHVzaDogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIl0pLFxuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIiwgXCJzdWJtaXRcIl0pLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQgKG9ubHkgaWYgdGhlIGNoaWxkcmVuIGlzIGEgYHN0cmluZ2ApXG4gICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaXplXCIsIFwiY29sb3JcIiwgXCJpc0Rpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiwgXCJocmVmXCIsIFwidHlwZVwiLCBcImRpc3BsYXlcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJzaXplXCIsIFwiYnV0dG9uUmVmXCIsIFwiaXNTZWxlY3RlZFwiLCBcImlzTG9hZGluZ1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uLy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBkaXNwbGF5VG9DbGFzc05hbWVNYXAgPSB7XG4gIGJhc2U6IG51bGwsXG4gIGVtcHR5OiAnZXVpQnV0dG9uSWNvbi0tZW1wdHknLFxuICBmaWxsOiAnZXVpQnV0dG9uSWNvbi0tZmlsbCdcbn07XG5leHBvcnQgdmFyIERJU1BMQVlTID0ga2V5c09mKGRpc3BsYXlUb0NsYXNzTmFtZU1hcCk7XG52YXIgY29sb3JUb0NsYXNzTmFtZU1hcCA9IHtcbiAgYWNjZW50OiAnZXVpQnV0dG9uSWNvbi0tYWNjZW50JyxcbiAgZGFuZ2VyOiAnZXVpQnV0dG9uSWNvbi0tZGFuZ2VyJyxcbiAgZ2hvc3Q6ICdldWlCdXR0b25JY29uLS1naG9zdCcsXG4gIHByaW1hcnk6ICdldWlCdXR0b25JY29uLS1wcmltYXJ5JyxcbiAgc3VjY2VzczogJ2V1aUJ1dHRvbkljb24tLXN1Y2Nlc3MnLFxuICB0ZXh0OiAnZXVpQnV0dG9uSWNvbi0tdGV4dCcsXG4gIHdhcm5pbmc6ICdldWlCdXR0b25JY29uLS13YXJuaW5nJ1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc05hbWVNYXApO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgeHM6ICdldWlCdXR0b25JY29uLS14U21hbGwnLFxuICBzOiAnZXVpQnV0dG9uSWNvbi0tc21hbGwnLFxuICBtOiAnZXVpQnV0dG9uSWNvbi0tbWVkaXVtJ1xufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQnV0dG9uSWNvbiA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkljb24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgICBfcmVmJGljb25TaXplID0gX3JlZi5pY29uU2l6ZSxcbiAgICAgIGljb25TaXplID0gX3JlZiRpY29uU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRpY29uU2l6ZSxcbiAgICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgICBfcmVmJGRpc3BsYXkgPSBfcmVmLmRpc3BsYXksXG4gICAgICBkaXNwbGF5ID0gX3JlZiRkaXNwbGF5ID09PSB2b2lkIDAgPyAnZW1wdHknIDogX3JlZiRkaXNwbGF5LFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICd4cycgOiBfcmVmJHNpemUsXG4gICAgICBidXR0b25SZWYgPSBfcmVmLmJ1dHRvblJlZixcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkIHx8IGlzTG9hZGluZztcbiAgdmFyIGFyaWFIaWRkZW4gPSByZXN0WydhcmlhLWhpZGRlbiddO1xuICB2YXIgaXNBcmlhSGlkZGVuID0gYXJpYUhpZGRlbiA9PT0gJ3RydWUnIHx8IGFyaWFIaWRkZW4gPT09IHRydWU7XG5cbiAgaWYgKCFyZXN0WydhcmlhLWxhYmVsJ10gJiYgIXJlc3RbJ2FyaWEtbGFiZWxsZWRieSddICYmICFpc0FyaWFIaWRkZW4pIHtcbiAgICBjb25zb2xlLndhcm4oXCJFdWlCdXR0b25JY29uIHJlcXVpcmVzIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IHRvIGJlIHNwZWNpZmllZCBiZWNhdXNlIGljb24tb25seVxcbiAgICAgIGJ1dHRvbnMgYXJlIHNjcmVlbi1yZWFkZXItaW5hY2Nlc3NpYmxlIHdpdGhvdXQgdGhlbS5cIik7XG4gIH1cblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkljb24nLCB7XG4gICAgJ2V1aUJ1dHRvbkljb24taXNEaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgfSwgY29sb3JUb0NsYXNzTmFtZU1hcFtjb2xvcl0sIGRpc3BsYXkgJiYgZGlzcGxheVRvQ2xhc3NOYW1lTWFwW2Rpc3BsYXldLCBzaXplICYmIHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSwgY2xhc3NOYW1lKTsgLy8gQWRkIGFuIGljb24gdG8gdGhlIGJ1dHRvbiBpZiBvbmUgZXhpc3RzLlxuXG4gIHZhciBidXR0b25JY29uO1xuXG4gIGlmIChpY29uVHlwZSAmJiAhaXNMb2FkaW5nKSB7XG4gICAgYnV0dG9uSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUJ1dHRvbkljb25fX2ljb25cIixcbiAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgc2l6ZTogaWNvblNpemUsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICAgIH0pO1xuICB9IC8vIGBvcmlnaW5hbGAgc2l6ZSBkb2Vzbid0IGV4aXN0IGluIGBFdWlMb2FkaW5nU3Bpbm5lcmBcbiAgLy8gd2hlbiB0aGUgYGljb25TaXplYCBpcyBgb3JpZ2luYWxgIHdlIGRvbid0IHBhc3MgYW55IHNpemUgdG8gdGhlIGBFdWlMb2FkaW5nU3Bpbm5lcmBcbiAgLy8gc28gaXQgZ2V0cyB0aGUgZGVmYXVsdCBzaXplXG5cblxuICB2YXIgbG9hZGluZ1NpemUgPSBpY29uU2l6ZSA9PT0gJ29yaWdpbmFsJyA/IHVuZGVmaW5lZCA6IGljb25TaXplO1xuXG4gIGlmIChpY29uVHlwZSAmJiBpc0xvYWRpbmcpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgc2l6ZTogbG9hZGluZ1NpemVcbiAgICB9KTtcbiAgfSAvLyA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuXG5cbiAgaWYgKGhyZWYgJiYgIWlzRGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIHRhYkluZGV4OiBpc0FyaWFIaWRkZW4gPyAtMSA6IHVuZGVmaW5lZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgYnV0dG9uSWNvbik7XG4gIH1cblxuICB2YXIgYnV0dG9uVHlwZTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIHRhYkluZGV4OiBpc0FyaWFIaWRkZW4gPyAtMSA6IHVuZGVmaW5lZCxcbiAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgXCJhcmlhLXByZXNzZWRcIjogaXNTZWxlY3RlZCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIHJlZjogYnV0dG9uUmVmXG4gIH0sIHJlc3QpLCBidXR0b25JY29uKTtcbn07XG5FdWlCdXR0b25JY29uLnByb3BUeXBlcyA9IHtcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9uZU9mKFtcInN1Ym1pdFwiLCBcInJlc2V0XCIsIFwiYnV0dG9uXCJdKV0pLFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIHRoZSBuYW1lZCBjb2xvciBwYWxldHRlIG9wdGlvbnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKSxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE92ZXJhbGwgc2l6ZSBvZiBidXR0b24uXG4gICAgICogTWF0Y2hlcyB0aGUgc2l6ZXMgb2Ygb3RoZXIgRXVpQnV0dG9uc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIE92ZXJhbGwgc2l6ZSBvZiBidXR0b24uXG4gICAgICogTWF0Y2hlcyB0aGUgc2l6ZXMgb2Ygb3RoZXIgRXVpQnV0dG9uc1xuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogU2l6ZSBvZiB0aGUgaWNvbiBvbmx5LlxuICAgICAqIFRoaXMgd2lsbCBub3QgYWZmZWN0IHRoZSBvdmVyYWxsIHNpemUgb2YgdGhlIGJ1dHRvblxuICAgICAqL1xuICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXNwbGF5IHN0eWxlIGZvciBtYXRjaGluZyBvdGhlciBFdWlCdXR0b24gdHlwZXMuXG4gICAgICogYGJhc2VgIGlzIGVxdWl2YWxlbnQgdG8gYSB0eXBpY2FsIEV1aUJ1dHRvblxuICAgICAqIGBmaWxsYCBpcyBlcXVpdmFsZW50IHRvIGEgZmlsbGVkIEV1aUJ1dHRvblxuICAgICAqIGBlbXB0eWAgKGRlZmF1bHQpIGlzIGVxdWl2YWxlbnQgdG8gYW4gRXVpQnV0dG9uRW1wdHlcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXNwbGF5IHN0eWxlIGZvciBtYXRjaGluZyBvdGhlciBFdWlCdXR0b24gdHlwZXMuXG4gICAgICogYGJhc2VgIGlzIGVxdWl2YWxlbnQgdG8gYSB0eXBpY2FsIEV1aUJ1dHRvblxuICAgICAqIGBmaWxsYCBpcyBlcXVpdmFsZW50IHRvIGEgZmlsbGVkIEV1aUJ1dHRvblxuICAgICAqIGBlbXB0eWAgKGRlZmF1bHQpIGlzIGVxdWl2YWxlbnQgdG8gYW4gRXVpQnV0dG9uRW1wdHlcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLm9uZU9mKFtcImJhc2VcIiwgXCJlbXB0eVwiLCBcImZpbGxcIl0pLFxuXG4gIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgZnVuY3Rpb24gdXNlSW5uZXJUZXh0KGlubmVyVGV4dEZhbGxiYWNrKSB7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgcmVmID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldFJlZiA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShpbm5lclRleHRGYWxsYmFjayksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBpbm5lclRleHQgPSBfdXNlU3RhdGU0WzBdLFxuICAgICAgc2V0SW5uZXJUZXh0ID0gX3VzZVN0YXRlNFsxXTtcblxuICB2YXIgdXBkYXRlSW5uZXJUZXh0ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUpIHJldHVybjtcbiAgICBzZXRJbm5lclRleHQoIC8vIENoZWNrIGZvciBgaW5uZXJUZXh0YCBpbXBsZW1lbnRhdGlvbiByYXRoZXIgdGhhbiBhIHNpbXBsZSBPUiBjaGVja1xuICAgIC8vIGJlY2F1c2UgaW4gcmVhbCBjYXNlcyB0aGUgcmVzdWx0IG9mIGBpbm5lclRleHRgIGNvdWxkIGNvcnJlY3RseSBiZSBgbnVsbGBcbiAgICAvLyB3aGlsZSB0aGUgcmVzdWx0IG9mIGB0ZXh0Q29udGVudGAgY291bGQgY29ycmVjdGx5IGJlIG5vbi1gbnVsbGAgZHVlIHRvXG4gICAgLy8gZGlmZmVyaW5nIHJlbGlhbmNlIG9uIGJyb3dzZXIgbGF5b3V0IGNhbGN1bGF0aW9ucy5cbiAgICAvLyBXZSBwcmVmZXIgdGhlIHJlc3VsdCBvZiBgaW5uZXJUZXh0YCwgaWYgYXZhaWxhYmxlLlxuICAgICdpbm5lclRleHQnIGluIG5vZGUgPyBub2RlLmlubmVyVGV4dCA6IG5vZGUudGV4dENvbnRlbnQgfHwgaW5uZXJUZXh0RmFsbGJhY2spO1xuICB9LCBbaW5uZXJUZXh0RmFsbGJhY2tdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zTGlzdCkge1xuICAgICAgaWYgKG11dGF0aW9uc0xpc3QubGVuZ3RoKSB1cGRhdGVJbm5lclRleHQocmVmKTtcbiAgICB9KTtcblxuICAgIGlmIChyZWYpIHtcbiAgICAgIHVwZGF0ZUlubmVyVGV4dChyZWYpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShyZWYsIHtcbiAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH07XG4gIH0sIFtyZWYsIHVwZGF0ZUlubmVyVGV4dF0pO1xuICByZXR1cm4gW3NldFJlZiwgaW5uZXJUZXh0XTtcbn1cbmV4cG9ydCB2YXIgRXVpSW5uZXJUZXh0ID0gZnVuY3Rpb24gRXVpSW5uZXJUZXh0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGZhbGxiYWNrID0gX3JlZi5mYWxsYmFjaztcblxuICB2YXIgX3VzZUlubmVyVGV4dCA9IHVzZUlubmVyVGV4dChmYWxsYmFjayksXG4gICAgICBfdXNlSW5uZXJUZXh0MiA9IF9zbGljZWRUb0FycmF5KF91c2VJbm5lclRleHQsIDIpLFxuICAgICAgcmVmID0gX3VzZUlubmVyVGV4dDJbMF0sXG4gICAgICBpbm5lclRleHQgPSBfdXNlSW5uZXJUZXh0MlsxXTtcblxuICByZXR1cm4gY2hpbGRyZW4ocmVmLCBpbm5lclRleHQpO1xufTtcbkV1aUlubmVyVGV4dC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBmYWxsYmFjazogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIERldGVjdCBFbGVtZW50IFJlc2l6ZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zZGVjaW1hL2phdmFzY3JpcHQtZGV0ZWN0LWVsZW1lbnQtcmVzaXplXG4gKiBTZWJhc3RpYW4gRGVjaW1hXG4gKlxuICogRm9ya2VkIGZyb20gdmVyc2lvbiAwLjUuMzsgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zOlxuICogMSkgR3VhcmQgYWdhaW5zdCB1bnNhZmUgJ3dpbmRvdycgYW5kICdkb2N1bWVudCcgcmVmZXJlbmNlcyAodG8gc3VwcG9ydCBTU1IpLlxuICogMikgRGVmZXIgaW5pdGlhbGl6YXRpb24gY29kZSB2aWEgYSB0b3AtbGV2ZWwgZnVuY3Rpb24gd3JhcHBlciAodG8gc3VwcG9ydCBTU1IpLlxuICogMykgQXZvaWQgdW5uZWNlc3NhcnkgcmVmbG93cyBieSBub3QgbWVhc3VyaW5nIHNpemUgZm9yIHNjcm9sbCBldmVudHMgYnViYmxpbmcgZnJvbSBjaGlsZHJlbi5cbiAqIDQpIEFkZCBub25jZSBmb3Igc3R5bGUgZWxlbWVudC5cbiAqIDUpIFVzZSAnZXhwb3J0JyBzdGF0ZW1lbnQgb3ZlciAnbW9kdWxlLmV4cG9ydHMnIGFzc2lnbm1lbnRcbiAqKi9cblxuLy8gQ2hlY2sgYGRvY3VtZW50YCBhbmQgYHdpbmRvd2AgaW4gY2FzZSBvZiBzZXJ2ZXItc2lkZSByZW5kZXJpbmdcbmxldCB3aW5kb3dPYmplY3Q7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB3aW5kb3dPYmplY3QgPSB3aW5kb3c7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gIHdpbmRvd09iamVjdCA9IHNlbGY7XG59IGVsc2Uge1xuICB3aW5kb3dPYmplY3QgPSBnbG9iYWw7XG59XG5sZXQgY2FuY2VsRnJhbWUgPSBudWxsO1xubGV0IHJlcXVlc3RGcmFtZSA9IG51bGw7XG5jb25zdCBUSU1FT1VUX0RVUkFUSU9OID0gMjA7XG5jb25zdCBjbGVhclRpbWVvdXRGbiA9IHdpbmRvd09iamVjdC5jbGVhclRpbWVvdXQ7XG5jb25zdCBzZXRUaW1lb3V0Rm4gPSB3aW5kb3dPYmplY3Quc2V0VGltZW91dDtcbmNvbnN0IGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4gPSB3aW5kb3dPYmplY3QuY2FuY2VsQW5pbWF0aW9uRnJhbWUgfHwgd2luZG93T2JqZWN0Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZTtcbmNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuID0gd2luZG93T2JqZWN0LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3QubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5pZiAoY2FuY2VsQW5pbWF0aW9uRnJhbWVGbiA9PSBudWxsIHx8IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuID09IG51bGwpIHtcbiAgLy8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgYW5pbWF0aW9uIGZyYW1lLFxuICAvLyBmYWxsYmFjayB0byBhIHNldFRpbWVvdXQgYmFzZWQgYXBwcm9hY2guXG4gIGNhbmNlbEZyYW1lID0gY2xlYXJUaW1lb3V0Rm47XG4gIHJlcXVlc3RGcmFtZSA9IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZVZpYVNldFRpbWVvdXQoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gc2V0VGltZW91dEZuKGNhbGxiYWNrLCBUSU1FT1VUX0RVUkFUSU9OKTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIENvdW50ZXIgaW50dWl0aXZlbHksIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgYW5pbWF0aW9uIGZyYW1lcyBjYW4gYmUgdHJpY2tpZXIuXG4gIC8vIENocm9tZSdzIFwiVGhyb3R0bGUgbm9uLXZpc2libGUgY3Jvc3Mtb3JpZ2luIGlmcmFtZXNcIiBmbGFnIGNhbiBwcmV2ZW50IHJBRnMgZnJvbSBiZWluZyBjYWxsZWQuXG4gIC8vIEluIHRoaXMgY2FzZSwgd2Ugc2hvdWxkIGZhbGxiYWNrIHRvIGEgc2V0VGltZW91dCgpIGltcGxlbWVudGF0aW9uLlxuICBjYW5jZWxGcmFtZSA9IGZ1bmN0aW9uIGNhbmNlbEZyYW1lKFthbmltYXRpb25GcmFtZUlELCB0aW1lb3V0SURdKSB7XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbihhbmltYXRpb25GcmFtZUlEKTtcbiAgICBjbGVhclRpbWVvdXRGbih0aW1lb3V0SUQpO1xuICB9O1xuICByZXF1ZXN0RnJhbWUgPSBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVXaXRoU2V0VGltZW91dEZhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgYW5pbWF0aW9uRnJhbWVJRCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuKGZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lQ2FsbGJhY2soKSB7XG4gICAgICBjbGVhclRpbWVvdXRGbih0aW1lb3V0SUQpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0Rm4oZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbihhbmltYXRpb25GcmFtZUlEKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSwgVElNRU9VVF9EVVJBVElPTik7XG4gICAgcmV0dXJuIFthbmltYXRpb25GcmFtZUlELCB0aW1lb3V0SURdO1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlRGV0ZWN0RWxlbWVudFJlc2l6ZShub25jZSkge1xuICBsZXQgYW5pbWF0aW9uS2V5ZnJhbWVzO1xuICBsZXQgYW5pbWF0aW9uTmFtZTtcbiAgbGV0IGFuaW1hdGlvblN0YXJ0RXZlbnQ7XG4gIGxldCBhbmltYXRpb25TdHlsZTtcbiAgbGV0IGNoZWNrVHJpZ2dlcnM7XG4gIGxldCByZXNldFRyaWdnZXJzO1xuICBsZXQgc2Nyb2xsTGlzdGVuZXI7XG4gIGNvbnN0IGF0dGFjaEV2ZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmF0dGFjaEV2ZW50O1xuICBpZiAoIWF0dGFjaEV2ZW50KSB7XG4gICAgcmVzZXRUcmlnZ2VycyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBjb25zdCB0cmlnZ2VycyA9IGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLFxuICAgICAgICBleHBhbmQgPSB0cmlnZ2Vycy5maXJzdEVsZW1lbnRDaGlsZCxcbiAgICAgICAgY29udHJhY3QgPSB0cmlnZ2Vycy5sYXN0RWxlbWVudENoaWxkLFxuICAgICAgICBleHBhbmRDaGlsZCA9IGV4cGFuZC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgIGNvbnRyYWN0LnNjcm9sbExlZnQgPSBjb250cmFjdC5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnRyYWN0LnNjcm9sbFRvcCA9IGNvbnRyYWN0LnNjcm9sbEhlaWdodDtcbiAgICAgIGV4cGFuZENoaWxkLnN0eWxlLndpZHRoID0gZXhwYW5kLm9mZnNldFdpZHRoICsgMSArIFwicHhcIjtcbiAgICAgIGV4cGFuZENoaWxkLnN0eWxlLmhlaWdodCA9IGV4cGFuZC5vZmZzZXRIZWlnaHQgKyAxICsgXCJweFwiO1xuICAgICAgZXhwYW5kLnNjcm9sbExlZnQgPSBleHBhbmQuc2Nyb2xsV2lkdGg7XG4gICAgICBleHBhbmQuc2Nyb2xsVG9wID0gZXhwYW5kLnNjcm9sbEhlaWdodDtcbiAgICB9O1xuICAgIGNoZWNrVHJpZ2dlcnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0V2lkdGggIT09IGVsZW1lbnQuX19yZXNpemVMYXN0X18ud2lkdGggfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQgIT09IGVsZW1lbnQuX19yZXNpemVMYXN0X18uaGVpZ2h0O1xuICAgIH07XG4gICAgc2Nyb2xsTGlzdGVuZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgLy8gRG9uJ3QgbWVhc3VyZSAod2hpY2ggZm9yY2VzKSByZWZsb3cgZm9yIHNjcm9sbHMgdGhhdCBoYXBwZW4gaW5zaWRlIG9mIGNoaWxkcmVuIVxuICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSAmJiB0eXBlb2YgZS50YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YgPT09IFwiZnVuY3Rpb25cIiAmJiBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImNvbnRyYWN0LXRyaWdnZXJcIikgPCAwICYmIGUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKFwiZXhwYW5kLXRyaWdnZXJcIikgPCAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzO1xuICAgICAgcmVzZXRUcmlnZ2Vycyh0aGlzKTtcbiAgICAgIGlmICh0aGlzLl9fcmVzaXplUkFGX18pIHtcbiAgICAgICAgY2FuY2VsRnJhbWUodGhpcy5fX3Jlc2l6ZVJBRl9fKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX19yZXNpemVSQUZfXyA9IHJlcXVlc3RGcmFtZShmdW5jdGlvbiBhbmltYXRpb25GcmFtZSgpIHtcbiAgICAgICAgaWYgKGNoZWNrVHJpZ2dlcnMoZWxlbWVudCkpIHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLndpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLmhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hSZXNpemVMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgZm4uY2FsbChlbGVtZW50LCBlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qIERldGVjdCBDU1MgQW5pbWF0aW9ucyBzdXBwb3J0IHRvIGRldGVjdCBlbGVtZW50IGRpc3BsYXkvcmUtYXR0YWNoICovXG4gICAgbGV0IGFuaW1hdGlvbiA9IGZhbHNlO1xuICAgIGxldCBrZXlmcmFtZXByZWZpeCA9IFwiXCI7XG4gICAgYW5pbWF0aW9uU3RhcnRFdmVudCA9IFwiYW5pbWF0aW9uc3RhcnRcIjtcbiAgICBjb25zdCBkb21QcmVmaXhlcyA9IFwiV2Via2l0IE1veiBPIG1zXCIuc3BsaXQoXCIgXCIpO1xuICAgIGxldCBzdGFydEV2ZW50cyA9IFwid2Via2l0QW5pbWF0aW9uU3RhcnQgYW5pbWF0aW9uc3RhcnQgb0FuaW1hdGlvblN0YXJ0IE1TQW5pbWF0aW9uU3RhcnRcIi5zcGxpdChcIiBcIik7XG4gICAgbGV0IHBmeCA9IFwiXCI7XG4gICAge1xuICAgICAgY29uc3QgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZha2VlbGVtZW50XCIpO1xuICAgICAgaWYgKGVsbS5zdHlsZS5hbmltYXRpb25OYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhbmltYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tUHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZWxtLnN0eWxlW2RvbVByZWZpeGVzW2ldICsgXCJBbmltYXRpb25OYW1lXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBmeCA9IGRvbVByZWZpeGVzW2ldO1xuICAgICAgICAgICAga2V5ZnJhbWVwcmVmaXggPSBcIi1cIiArIHBmeC50b0xvd2VyQ2FzZSgpICsgXCItXCI7XG4gICAgICAgICAgICBhbmltYXRpb25TdGFydEV2ZW50ID0gc3RhcnRFdmVudHNbaV07XG4gICAgICAgICAgICBhbmltYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFuaW1hdGlvbk5hbWUgPSBcInJlc2l6ZWFuaW1cIjtcbiAgICBhbmltYXRpb25LZXlmcmFtZXMgPSBcIkBcIiArIGtleWZyYW1lcHJlZml4ICsgXCJrZXlmcmFtZXMgXCIgKyBhbmltYXRpb25OYW1lICsgXCIgeyBmcm9tIHsgb3BhY2l0eTogMDsgfSB0byB7IG9wYWNpdHk6IDA7IH0gfSBcIjtcbiAgICBhbmltYXRpb25TdHlsZSA9IGtleWZyYW1lcHJlZml4ICsgXCJhbmltYXRpb246IDFtcyBcIiArIGFuaW1hdGlvbk5hbWUgKyBcIjsgXCI7XG4gIH1cbiAgY29uc3QgY3JlYXRlU3R5bGVzID0gZnVuY3Rpb24gKGRvYykge1xuICAgIGlmICghZG9jLmdldEVsZW1lbnRCeUlkKFwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiKSkge1xuICAgICAgLy9vcGFjaXR5OjAgd29ya3MgYXJvdW5kIGEgY2hyb21lIGJ1ZyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mjg2MzYwXG4gICAgICBjb25zdCBjc3MgPSAoYW5pbWF0aW9uS2V5ZnJhbWVzID8gYW5pbWF0aW9uS2V5ZnJhbWVzIDogXCJcIikgKyBcIi5yZXNpemUtdHJpZ2dlcnMgeyBcIiArIChhbmltYXRpb25TdHlsZSA/IGFuaW1hdGlvblN0eWxlIDogXCJcIikgKyBcInZpc2liaWxpdHk6IGhpZGRlbjsgb3BhY2l0eTogMDsgfSBcIiArICcucmVzaXplLXRyaWdnZXJzLCAucmVzaXplLXRyaWdnZXJzID4gZGl2LCAuY29udHJhY3QtdHJpZ2dlcjpiZWZvcmUgeyBjb250ZW50OiBcIiBcIjsgZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyB6LWluZGV4OiAtMTsgfSAucmVzaXplLXRyaWdnZXJzID4gZGl2IHsgYmFja2dyb3VuZDogI2VlZTsgb3ZlcmZsb3c6IGF1dG87IH0gLmNvbnRyYWN0LXRyaWdnZXI6YmVmb3JlIHsgd2lkdGg6IDIwMCU7IGhlaWdodDogMjAwJTsgfScsXG4gICAgICAgIGhlYWQgPSBkb2MuaGVhZCB8fCBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLFxuICAgICAgICBzdHlsZSA9IGRvYy5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICBzdHlsZS5pZCA9IFwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiO1xuICAgICAgc3R5bGUudHlwZSA9IFwidGV4dC9jc3NcIjtcbiAgICAgIGlmIChub25jZSAhPSBudWxsKSB7XG4gICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICAgIH1cbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgYWRkUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgZm4pIHtcbiAgICBpZiAoYXR0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoXCJvbnJlc2l6ZVwiLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18pIHtcbiAgICAgICAgY29uc3QgZG9jID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICBjb25zdCBlbGVtZW50U3R5bGUgPSB3aW5kb3dPYmplY3QuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSAmJiBlbGVtZW50U3R5bGUucG9zaXRpb24gPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZVN0eWxlcyhkb2MpO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fID0ge307XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXyA9IFtdO1xuICAgICAgICAoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18gPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuY2xhc3NOYW1lID0gXCJyZXNpemUtdHJpZ2dlcnNcIjtcbiAgICAgICAgY29uc3QgZXhwYW5kVHJpZ2dlciA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBleHBhbmRUcmlnZ2VyLmNsYXNzTmFtZSA9IFwiZXhwYW5kLXRyaWdnZXJcIjtcbiAgICAgICAgZXhwYW5kVHJpZ2dlci5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0VHJpZ2dlciA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBjb250cmFjdFRyaWdnZXIuY2xhc3NOYW1lID0gXCJjb250cmFjdC10cmlnZ2VyXCI7XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFwcGVuZENoaWxkKGV4cGFuZFRyaWdnZXIpO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5hcHBlbmRDaGlsZChjb250cmFjdFRyaWdnZXIpO1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKTtcbiAgICAgICAgcmVzZXRUcmlnZ2VycyhlbGVtZW50KTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHNjcm9sbExpc3RlbmVyLCB0cnVlKTtcblxuICAgICAgICAvKiBMaXN0ZW4gZm9yIGEgY3NzIGFuaW1hdGlvbiB0byBkZXRlY3QgZWxlbWVudCBkaXNwbGF5L3JlLWF0dGFjaCAqL1xuICAgICAgICBpZiAoYW5pbWF0aW9uU3RhcnRFdmVudCkge1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyA9IGZ1bmN0aW9uIGFuaW1hdGlvbkxpc3RlbmVyKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmFuaW1hdGlvbk5hbWUgPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgcmVzZXRUcmlnZ2VycyhlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFkZEV2ZW50TGlzdGVuZXIoYW5pbWF0aW9uU3RhcnRFdmVudCwgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLnB1c2goZm4pO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcmVtb3ZlUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgZm4pIHtcbiAgICBpZiAoYXR0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoXCJvbnJlc2l6ZVwiLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5zcGxpY2UoZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmluZGV4T2YoZm4pLCAxKTtcbiAgICAgIGlmICghZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmxlbmd0aCkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2Nyb2xsTGlzdGVuZXIsIHRydWUpO1xuICAgICAgICBpZiAoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhbmltYXRpb25TdGFydEV2ZW50LCBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18pO1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyA9ICFlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIFByZWFjdCBjb21wYXQ7IHNlZSBkZXZlbG9waXQvcHJlYWN0LWNvbXBhdC9pc3N1ZXMvMjI4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiB7XG4gICAgYWRkUmVzaXplTGlzdGVuZXIsXG4gICAgcmVtb3ZlUmVzaXplTGlzdGVuZXJcbiAgfTtcbn1cblxuY2xhc3MgQXV0b1NpemVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMucHJvcHMuZGVmYXVsdEhlaWdodCB8fCAwLFxuICAgICAgc2NhbGVkSGVpZ2h0OiB0aGlzLnByb3BzLmRlZmF1bHRIZWlnaHQgfHwgMCxcbiAgICAgIHNjYWxlZFdpZHRoOiB0aGlzLnByb3BzLmRlZmF1bHRXaWR0aCB8fCAwLFxuICAgICAgd2lkdGg6IHRoaXMucHJvcHMuZGVmYXVsdFdpZHRoIHx8IDBcbiAgICB9O1xuICAgIHRoaXMuX2F1dG9TaXplciA9IG51bGw7XG4gICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSA9IG51bGw7XG4gICAgdGhpcy5fcGFyZW50Tm9kZSA9IG51bGw7XG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIHRoaXMuX3RpbWVvdXRJZCA9IG51bGw7XG4gICAgdGhpcy5fb25SZXNpemUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl90aW1lb3V0SWQgPSBudWxsO1xuICAgICAgY29uc3Qge1xuICAgICAgICBkaXNhYmxlSGVpZ2h0LFxuICAgICAgICBkaXNhYmxlV2lkdGgsXG4gICAgICAgIG9uUmVzaXplXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7XG4gICAgICAgIC8vIEd1YXJkIGFnYWluc3QgQXV0b1NpemVyIGNvbXBvbmVudCBiZWluZyByZW1vdmVkIGZyb20gdGhlIERPTSBpbW1lZGlhdGVseSBhZnRlciBiZWluZyBhZGRlZC5cbiAgICAgICAgLy8gVGhpcyBjYW4gcmVzdWx0IGluIGludmFsaWQgc3R5bGUgdmFsdWVzIHdoaWNoIGNhbiByZXN1bHQgaW4gTmFOIHZhbHVlcyBpZiB3ZSBkb24ndCBoYW5kbGUgdGhlbS5cbiAgICAgICAgLy8gU2VlIGlzc3VlICMxNTAgZm9yIG1vcmUgY29udGV4dC5cblxuICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX3BhcmVudE5vZGUpIHx8IHt9O1xuICAgICAgICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0xlZnQgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdSaWdodCB8fCBcIjBcIik7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdUb3AgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tIHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuX3BhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNjYWxlZEhlaWdodCA9IHJlY3QuaGVpZ2h0IC0gcGFkZGluZ1RvcCAtIHBhZGRpbmdCb3R0b207XG4gICAgICAgIGNvbnN0IHNjYWxlZFdpZHRoID0gcmVjdC53aWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0O1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9wYXJlbnROb2RlLm9mZnNldEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuX3BhcmVudE5vZGUub2Zmc2V0V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDtcbiAgICAgICAgaWYgKCFkaXNhYmxlSGVpZ2h0ICYmICh0aGlzLnN0YXRlLmhlaWdodCAhPT0gaGVpZ2h0IHx8IHRoaXMuc3RhdGUuc2NhbGVkSGVpZ2h0ICE9PSBzY2FsZWRIZWlnaHQpIHx8ICFkaXNhYmxlV2lkdGggJiYgKHRoaXMuc3RhdGUud2lkdGggIT09IHdpZHRoIHx8IHRoaXMuc3RhdGUuc2NhbGVkV2lkdGggIT09IHNjYWxlZFdpZHRoKSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBzY2FsZWRIZWlnaHQsXG4gICAgICAgICAgICBzY2FsZWRXaWR0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZXNpemUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgb25SZXNpemUoe1xuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHNjYWxlZEhlaWdodCxcbiAgICAgICAgICAgICAgc2NhbGVkV2lkdGgsXG4gICAgICAgICAgICAgIHdpZHRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3NldFJlZiA9IGF1dG9TaXplciA9PiB7XG4gICAgICB0aGlzLl9hdXRvU2l6ZXIgPSBhdXRvU2l6ZXI7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBub25jZVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9hdXRvU2l6ZXIgPyB0aGlzLl9hdXRvU2l6ZXIucGFyZW50Tm9kZSA6IG51bGw7XG4gICAgaWYgKHBhcmVudE5vZGUgIT0gbnVsbCAmJiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQgJiYgcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIHBhcmVudE5vZGUgaW5zdGFuY2VvZiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuSFRNTEVsZW1lbnQpIHtcbiAgICAgIC8vIERlbGF5IGFjY2VzcyBvZiBwYXJlbnROb2RlIHVudGlsIG1vdW50LlxuICAgICAgLy8gVGhpcyBoYW5kbGVzIGVkZ2UtY2FzZXMgd2hlcmUgdGhlIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubW91bnRlZCBiZWZvcmUgaXRzIHJlZiBoYXMgYmVlbiBzZXQsXG4gICAgICAvLyBBcyB3ZWxsIGFzIGxpYnJhcmllcyBsaWtlIHJlYWN0LWxpdGUgd2hpY2ggaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBsaWZlY3ljbGUuXG4gICAgICB0aGlzLl9wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcblxuICAgICAgLy8gVXNlIFJlc2l6ZU9ic2VydmVyIGZyb20gdGhlIHNhbWUgY29udGV4dCB3aGVyZSBwYXJlbnROb2RlICh3aGljaCB3ZSB3aWxsIG9ic2VydmUpIHdhcyBkZWZpbmVkXG4gICAgICAvLyBVc2luZyBqdXN0IGdsb2JhbCBjYW4gcmVzdWx0IGludG8gb25SZXNpemUgZXZlbnRzIG5vdCBiZWluZyBlbWl0dGVkIGluIGNhc2VzIHdpdGggbXVsdGlwbGUgcmVhbG1zXG4gICAgICBjb25zdCBSZXNpemVPYnNlcnZlckluc3RhbmNlID0gcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LlJlc2l6ZU9ic2VydmVyO1xuICAgICAgaWYgKFJlc2l6ZU9ic2VydmVySW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlckluc3RhbmNlKCgpID0+IHtcbiAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IFwiUmVzaXplT2JzZXJ2ZXIgbG9vcCBsaW1pdCBleGNlZWRlZFwiIGVycm9yO1xuICAgICAgICAgIC8vIGNvdWxkIGJlIHRyaWdnZXJlZCBpZiB0aGUgc3RhdGUgdXBkYXRlIGNhdXNlcyB0aGUgUmVzaXplT2JzZXJ2ZXIgaGFuZGxlciB0byBydW4gbG9uZy5cbiAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci9pc3N1ZXMvNTVcbiAgICAgICAgICB0aGlzLl90aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHRoaXMuX29uUmVzaXplLCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUocGFyZW50Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEZWZlciByZXF1aXJpbmcgcmVzaXplIGhhbmRsZXIgaW4gb3JkZXIgdG8gc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgICAgIC8vIFNlZSBpc3N1ZSAjNDFcbiAgICAgICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSA9IGNyZWF0ZURldGVjdEVsZW1lbnRSZXNpemUobm9uY2UpO1xuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLmFkZFJlc2l6ZUxpc3RlbmVyKHBhcmVudE5vZGUsIHRoaXMuX29uUmVzaXplKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29uUmVzaXplKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7XG4gICAgICBpZiAodGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSkge1xuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLnJlbW92ZVJlc2l6ZUxpc3RlbmVyKHRoaXMuX3BhcmVudE5vZGUsIHRoaXMuX29uUmVzaXplKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl90aW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fcmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBkZWZhdWx0SGVpZ2h0LFxuICAgICAgZGVmYXVsdFdpZHRoLFxuICAgICAgZGlzYWJsZUhlaWdodCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVdpZHRoID0gZmFsc2UsXG4gICAgICBkb05vdEJhaWxPdXRPbkVtcHR5Q2hpbGRyZW4gPSBmYWxzZSxcbiAgICAgIG5vbmNlLFxuICAgICAgb25SZXNpemUsXG4gICAgICBzdHlsZSA9IHt9LFxuICAgICAgdGFnTmFtZSA9IFwiZGl2XCIsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgaGVpZ2h0LFxuICAgICAgc2NhbGVkSGVpZ2h0LFxuICAgICAgc2NhbGVkV2lkdGgsXG4gICAgICB3aWR0aFxuICAgIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gT3V0ZXIgZGl2IHNob3VsZCBub3QgZm9yY2Ugd2lkdGgvaGVpZ2h0IHNpbmNlIHRoYXQgbWF5IHByZXZlbnQgY29udGFpbmVycyBmcm9tIHNocmlua2luZy5cbiAgICAvLyBJbm5lciBjb21wb25lbnQgc2hvdWxkIG92ZXJmbG93IGFuZCB1c2UgY2FsY3VsYXRlZCB3aWR0aC9oZWlnaHQuXG4gICAgLy8gU2VlIGlzc3VlICM2OCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICBjb25zdCBvdXRlclN0eWxlID0ge1xuICAgICAgb3ZlcmZsb3c6IFwidmlzaWJsZVwiXG4gICAgfTtcbiAgICBjb25zdCBjaGlsZFBhcmFtcyA9IHt9O1xuXG4gICAgLy8gQXZvaWQgcmVuZGVyaW5nIGNoaWxkcmVuIGJlZm9yZSB0aGUgaW5pdGlhbCBtZWFzdXJlbWVudHMgaGF2ZSBiZWVuIGNvbGxlY3RlZC5cbiAgICAvLyBBdCBiZXN0IHRoaXMgd291bGQganVzdCBiZSB3YXN0aW5nIGN5Y2xlcy5cbiAgICBsZXQgYmFpbG91dE9uQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICBpZiAoIWRpc2FibGVIZWlnaHQpIHtcbiAgICAgIGlmIChoZWlnaHQgPT09IDApIHtcbiAgICAgICAgYmFpbG91dE9uQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgb3V0ZXJTdHlsZS5oZWlnaHQgPSAwO1xuICAgICAgY2hpbGRQYXJhbXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgY2hpbGRQYXJhbXMuc2NhbGVkSGVpZ2h0ID0gc2NhbGVkSGVpZ2h0O1xuICAgIH1cbiAgICBpZiAoIWRpc2FibGVXaWR0aCkge1xuICAgICAgaWYgKHdpZHRoID09PSAwKSB7XG4gICAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG91dGVyU3R5bGUud2lkdGggPSAwO1xuICAgICAgY2hpbGRQYXJhbXMud2lkdGggPSB3aWR0aDtcbiAgICAgIGNoaWxkUGFyYW1zLnNjYWxlZFdpZHRoID0gc2NhbGVkV2lkdGg7XG4gICAgfVxuICAgIGlmIChkb05vdEJhaWxPdXRPbkVtcHR5Q2hpbGRyZW4pIHtcbiAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIHtcbiAgICAgIHJlZjogdGhpcy5fc2V0UmVmLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgLi4ub3V0ZXJTdHlsZSxcbiAgICAgICAgLi4uc3R5bGVcbiAgICAgIH0sXG4gICAgICAuLi5yZXN0XG4gICAgfSwgIWJhaWxvdXRPbkNoaWxkcmVuICYmIGNoaWxkcmVuKGNoaWxkUGFyYW1zKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWlnaHRBbmRXaWR0aFByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ICE9PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCAhPT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzSGVpZ2h0T25seVByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ICE9PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCA9PT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzV2lkdGhPbmx5UHJvcHMocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzICYmIHByb3BzLmRpc2FibGVIZWlnaHQgPT09IHRydWUgJiYgcHJvcHMuZGlzYWJsZVdpZHRoICE9PSB0cnVlO1xufVxuXG5leHBvcnQgeyBBdXRvU2l6ZXIgYXMgZGVmYXVsdCwgaXNIZWlnaHRBbmRXaWR0aFByb3BzLCBpc0hlaWdodE9ubHlQcm9wcywgaXNXaWR0aE9ubHlQcm9wcyB9O1xuIiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IEF1dG9TaXplciBmcm9tICdyZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyJztcbmV4cG9ydCB2YXIgRXVpQXV0b1NpemVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQXV0b1NpemVyKSB7XG4gIF9pbmhlcml0cyhFdWlBdXRvU2l6ZXIsIF9BdXRvU2l6ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQXV0b1NpemVyKTtcblxuICBmdW5jdGlvbiBFdWlBdXRvU2l6ZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUF1dG9TaXplcik7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gRXVpQXV0b1NpemVyO1xufShBdXRvU2l6ZXIpOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpZGVcIiwgXCJjbGFzc05hbWVcIiwgXCJpc0Rpc2FibGVkXCIsIFwib25DbGlja1wiLCBcImljb25PbkNsaWNrXCIsIFwib25DbGlja0FyaWFMYWJlbFwiLCBcImljb25PbkNsaWNrQXJpYUxhYmVsXCIsIFwiY2xvc2VCdXR0b25Qcm9wc1wiLCBcImhyZWZcIiwgXCJyZWxcIiwgXCJ0YXJnZXRcIiwgXCJzdHlsZVwiXTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0LCBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIGlzQ29sb3JEYXJrIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBjaHJvbWFWYWxpZCwgcGFyc2VDb2xvciB9IGZyb20gJy4uL2NvbG9yX3BpY2tlci91dGlscyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLy8gVE9ETyAtIHJlcGxhY2Ugd2l0aCB2YXJpYWJsZXMgb25jZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzI3MzEgaXMgY2xvc2VkXG52YXIgY29sb3JJbmsgPSAnIzAwMCc7XG52YXIgY29sb3JHaG9zdCA9ICcjZmZmJzsgLy8gVGhlIGNvbG9yIGJsaW5kIHBhbGV0dGUgaGFzIHNvbWUgc3RyaWN0ZXIgYWNjZXNzaWJpbGl0eSBuZWVkcyB3aXRoIHJlZ2FyZHMgdG9cbi8vIGNoYXJ0cyBhbmQgY29udHJhc3QuIFdlIHVzZSB0aGUgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0IHZhcmlhbnQgaGVyZSBzaW5jZSBvdXJcbi8vIGFjY2Vzc2liaWxpdHkgY29uY2VybnMgcGVydGFpbiB0byBmb3JlZ3JvdW5kICh0ZXh0KSBhbmQgYmFja2dyb3VuZCBjb250cmFzdFxuXG52YXIgdmlzQ29sb3JzID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0KCk7XG52YXIgY29sb3JUb0hleE1hcCA9IHtcbiAgLy8gVE9ETyAtIHJlcGxhY2Ugd2l0aCB2YXJpYWJsZSBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMjczMSBpcyBjbG9zZWRcbiAgZGVmYXVsdDogJyNkM2RhZTYnLFxuICBwcmltYXJ5OiB2aXNDb2xvcnNbMV0sXG4gIHN1Y2Nlc3M6IHZpc0NvbG9yc1swXSxcbiAgYWNjZW50OiB2aXNDb2xvcnNbMl0sXG4gIHdhcm5pbmc6IHZpc0NvbG9yc1s1XSxcbiAgZGFuZ2VyOiB2aXNDb2xvcnNbOV1cbn07XG5leHBvcnQgdmFyIENPTE9SUyA9IGtleXNPZihjb2xvclRvSGV4TWFwKTtcbnZhciBpY29uU2lkZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBsZWZ0OiAnZXVpQmFkZ2UtLWljb25MZWZ0JyxcbiAgcmlnaHQ6ICdldWlCYWRnZS0taWNvblJpZ2h0J1xufTtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IGtleXNPZihpY29uU2lkZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQmFkZ2UgPSBmdW5jdGlvbiBFdWlCYWRnZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2RlZmF1bHQnIDogX3JlZiRjb2xvcixcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIF9yZWYkaWNvblNpZGUgPSBfcmVmLmljb25TaWRlLFxuICAgICAgaWNvblNpZGUgPSBfcmVmJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmJGljb25TaWRlLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICBpY29uT25DbGljayA9IF9yZWYuaWNvbk9uQ2xpY2ssXG4gICAgICBvbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgaWNvbk9uQ2xpY2tBcmlhTGFiZWwgPSBfcmVmLmljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgY2xvc2VCdXR0b25Qcm9wcyA9IF9yZWYuY2xvc2VCdXR0b25Qcm9wcyxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfaXNEaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBvcHRpb25hbEN1c3RvbVN0eWxlcyA9IHN0eWxlO1xuICB2YXIgdGV4dENvbG9yID0gbnVsbDsgLy8gVE9ETyAtIHJlcGxhY2Ugd2l0aCB2YXJpYWJsZSBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMjczMSBpcyBjbG9zZWRcblxuICB2YXIgd2NhZ0NvbnRyYXN0QmFzZSA9IDQuNTsgLy8gV0NBRyBBQSBjb250cmFzdCBsZXZlbFxuXG4gIHZhciB3Y2FnQ29udHJhc3QgPSBudWxsO1xuICB2YXIgY29sb3JIZXggPSBudWxsOyAvLyBDaGVjayBpZiBhIHZhbGlkIGNvbG9yIG5hbWUgd2FzIHByb3ZpZGVkXG5cbiAgdHJ5IHtcbiAgICBpZiAoQ09MT1JTLmluZGV4T2YoY29sb3IpID4gLTEpIHtcbiAgICAgIC8vIEdldCB0aGUgaGV4IGVxdWl2YWxlbnQgZm9yIHRoZSBwcm92aWRlZCBjb2xvciBuYW1lXG4gICAgICBjb2xvckhleCA9IGNvbG9yVG9IZXhNYXBbY29sb3JdOyAvLyBTZXQgZGFyayBvciBsaWdodCB0ZXh0IGNvbG9yIGJhc2VkIHVwb24gYmVzdCBjb250cmFzdFxuXG4gICAgICB0ZXh0Q29sb3IgPSBzZXRUZXh0Q29sb3IoY29sb3JIZXgpO1xuICAgICAgb3B0aW9uYWxDdXN0b21TdHlsZXMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvckhleCxcbiAgICAgICAgY29sb3I6IHRleHRDb2xvclxuICAgICAgfSwgb3B0aW9uYWxDdXN0b21TdHlsZXMpO1xuICAgIH0gZWxzZSBpZiAoY29sb3IgIT09ICdob2xsb3cnKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgY3VzdG9tIGNvbG9yIHRoYXQgaXMgbmVpdGhlciBmcm9tIHRoZSBiYXNlIHBhbGV0dGUgbm9yIGhvbGxvd1xuICAgICAgLy8gTGV0J3MgZG8gb3VyIGJlc3QgdG8gZW5zdXJlIHRoYXQgaXQgcHJvdmlkZXMgc3VmZmljaWVudCBjb250cmFzdFxuICAgICAgLy8gU2V0IGRhcmsgb3IgbGlnaHQgdGV4dCBjb2xvciBiYXNlZCB1cG9uIGJlc3QgY29udHJhc3RcbiAgICAgIHRleHRDb2xvciA9IHNldFRleHRDb2xvcihjb2xvcik7IC8vIENoZWNrIHRoZSBjb250cmFzdFxuXG4gICAgICB3Y2FnQ29udHJhc3QgPSBnZXRDb2xvckNvbnRyYXN0KHRleHRDb2xvciwgY29sb3IpO1xuXG4gICAgICBpZiAod2NhZ0NvbnRyYXN0IDwgd2NhZ0NvbnRyYXN0QmFzZSkge1xuICAgICAgICAvLyBJdCdzIGxvdyBjb250cmFzdCwgc28gbGV0cyBzaG93IGEgd2FybmluZyBpbiB0aGUgY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6ICcsIGNvbG9yLCAnIGJhZGdlIGhhcyBsb3cgY29udHJhc3Qgb2YgJywgd2NhZ0NvbnRyYXN0LnRvRml4ZWQoMiksICcuIFNob3VsZCBiZSBhYm92ZSAnLCB3Y2FnQ29udHJhc3RCYXNlLCAnLicpO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25hbEN1c3RvbVN0eWxlcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLFxuICAgICAgICBjb2xvcjogdGV4dENvbG9yXG4gICAgICB9LCBvcHRpb25hbEN1c3RvbVN0eWxlcyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBoYW5kbGVJbnZhbGlkQ29sb3IoY29sb3IpO1xuICB9XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCYWRnZScsIHtcbiAgICAnZXVpQmFkZ2UtaXNDbGlja2FibGUnOiAob25DbGljayB8fCBocmVmKSAmJiAhaWNvbk9uQ2xpY2ssXG4gICAgJ2V1aUJhZGdlLWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkLFxuICAgICdldWlCYWRnZS0taG9sbG93JzogY29sb3IgPT09ICdob2xsb3cnXG4gIH0sIGljb25TaWRlVG9DbGFzc05hbWVNYXBbaWNvblNpZGVdLCBjbGFzc05hbWUpO1xuICB2YXIgY2xvc2VDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQmFkZ2VfX2ljb24nLCBjbG9zZUJ1dHRvblByb3BzICYmIGNsb3NlQnV0dG9uUHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIEVsZW1lbnQgPSBocmVmICYmICFpc0Rpc2FibGVkID8gJ2EnIDogJ2J1dHRvbic7XG4gIHZhciByZWxPYmogPSB7fTtcblxuICBpZiAoaHJlZiAmJiAhaXNEaXNhYmxlZCkge1xuICAgIHJlbE9iai5ocmVmID0gaHJlZjtcbiAgICByZWxPYmoudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHJlbE9iai5yZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChvbkNsaWNrKSB7XG4gICAgcmVsT2JqLm9uQ2xpY2sgPSBvbkNsaWNrO1xuICB9XG5cbiAgdmFyIG9wdGlvbmFsSWNvbiA9IG51bGw7XG5cbiAgaWYgKGljb25UeXBlKSB7XG4gICAgaWYgKGljb25PbkNsaWNrKSB7XG4gICAgICBpZiAoIWljb25PbkNsaWNrQXJpYUxhYmVsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignV2hlbiBwYXNzaW5nIHRoZSBpY29uT25DbGljayBwcm9wcyB0byBFdWlCYWRnZSwgeW91IG11c3QgYWxzbyBwcm92aWRlIGljb25PbkNsaWNrQXJpYUxhYmVsJyk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbmFsSWNvbiA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2ljb25CdXR0b25cIixcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgdGl0bGU6IGljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICBvbkNsaWNrOiBpY29uT25DbGlja1xuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgICBzaXplOiBcInNcIixcbiAgICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICAgICAgfSwgY2xvc2VCdXR0b25Qcm9wcywge1xuICAgICAgICBjbGFzc05hbWU6IGNsb3NlQ2xhc3NOYW1lc1xuICAgICAgfSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uYWxJY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgICBzaXplOiBjaGlsZHJlbiA/ICdzJyA6ICdtJyxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX19pY29uXCIsXG4gICAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG5cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvbkNsaWNrICYmICFvbkNsaWNrQXJpYUxhYmVsKSB7XG4gICAgY29uc29sZS53YXJuKCdXaGVuIHBhc3Npbmcgb25DbGljayB0byBFdWlCYWRnZSwgeW91IG11c3QgYWxzbyBwcm92aWRlIG9uQ2xpY2tBcmlhTGFiZWwnKTtcbiAgfVxuXG4gIHZhciBjb250ZW50ID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fY29udGVudFwiXG4gIH0sIGNoaWxkcmVuICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX3RleHRcIlxuICB9LCBjaGlsZHJlbiksIG9wdGlvbmFsSWNvbik7XG5cbiAgaWYgKGljb25PbkNsaWNrKSB7XG4gICAgcmV0dXJuIG9uQ2xpY2sgfHwgaHJlZiA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlc1xuICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fY29udGVudFwiXG4gICAgfSwgX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2NoaWxkQnV0dG9uXCIsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogb25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlbE9iaiwgcmVzdCksIGNoaWxkcmVuKTtcbiAgICB9KSwgb3B0aW9uYWxJY29uKSkgOiBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlcyxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlc3QpLCBjb250ZW50KTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChvbkNsaWNrIHx8IGhyZWYpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IG9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgc3R5bGU6IG9wdGlvbmFsQ3VzdG9tU3R5bGVzLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVsT2JqLCByZXN0KSwgY29udGVudCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgc3R5bGU6IG9wdGlvbmFsQ3VzdG9tU3R5bGVzLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVzdCksIGNvbnRlbnQpO1xuICAgIH0pO1xuICB9XG59O1xuRXVpQmFkZ2UucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBBY2NlcHRzIGFueSBzdHJpbmcgZnJvbSBvdXIgaWNvbiBsaWJyYXJ5XG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBUaGUgc2lkZSBvZiB0aGUgYmFkZ2UgdGhlIGljb24gc2hvdWxkIHNpdFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogV2lsbCBvdmVycmlkZSBhbnkgY29sb3IgcGFzc2VkIHRocm91Z2ggdGhlIGBjb2xvcmAgcHJvcC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUHJvcHMgcGFzc2VkIHRvIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICovXG4gIGNsb3NlQnV0dG9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gaWNvbiB3aXRoaW4gdGhlIGJhZGdlXG4gICAgICovXG4gIGljb25PbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIGljb25PbkNsaWNrIGJ1dHRvblxuICAgICAqL1xuICBpY29uT25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICovXG4gIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5mdW5jdGlvbiBnZXRDb2xvckNvbnRyYXN0KHRleHRDb2xvciwgY29sb3IpIHtcbiAgdmFyIGNvbnRyYXN0VmFsdWUgPSBjaHJvbWEuY29udHJhc3QodGV4dENvbG9yLCBjb2xvcik7XG4gIHJldHVybiBjb250cmFzdFZhbHVlO1xufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29sb3IoYmdDb2xvcikge1xuICB2YXIgdGV4dENvbG9yID0gaXNDb2xvckRhcmsuYXBwbHkodm9pZCAwLCBfdG9Db25zdW1hYmxlQXJyYXkoY2hyb21hKGJnQ29sb3IpLnJnYigpKSkgPyBjb2xvckdob3N0IDogY29sb3JJbms7XG4gIHJldHVybiB0ZXh0Q29sb3I7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUludmFsaWRDb2xvcihjb2xvcikge1xuICB2YXIgaXNOYW1lZENvbG9yID0gY29sb3IgJiYgQ09MT1JTLmluY2x1ZGVzKGNvbG9yKSB8fCBjb2xvciA9PT0gJ2hvbGxvdyc7XG4gIHZhciBpc1ZhbGlkQ29sb3JTdHJpbmcgPSBjb2xvciAmJiBjaHJvbWFWYWxpZChwYXJzZUNvbG9yKGNvbG9yKSB8fCAnJyk7XG5cbiAgaWYgKCFpc05hbWVkQ29sb3IgJiYgIWlzVmFsaWRDb2xvclN0cmluZykge1xuICAgIGNvbnNvbGUud2FybignRXVpQmFkZ2UgZXhwZWN0cyBhIHZhbGlkIGNvbG9yLiBUaGlzIGNhbiBlaXRoZXIgYmUgYSB0aHJlZSBvciBzaXggJyArIFwiY2hhcmFjdGVyIGhleCB2YWx1ZSwgcmdiKGEpIHZhbHVlLCBoc3YgdmFsdWUsIGhvbGxvdywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmc6IFwiLmNvbmNhdChDT0xPUlMsIFwiLiBcIikgKyBcIkluc3RlYWQgZ290IFwiLmNvbmNhdChjb2xvciwgXCIuXCIpKTtcbiAgfVxufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5leHBvcnQgdmFyIGdldEV2ZW50UG9zaXRpb24gPSBmdW5jdGlvbiBnZXRFdmVudFBvc2l0aW9uKGxvY2F0aW9uLCBjb250YWluZXIpIHtcbiAgdmFyIHggPSBsb2NhdGlvbi54LFxuICAgICAgeSA9IGxvY2F0aW9uLnk7XG5cbiAgdmFyIF9jb250YWluZXIkZ2V0Qm91bmRpbiA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIHdpZHRoID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLmhlaWdodCxcbiAgICAgIGxlZnQgPSBfY29udGFpbmVyJGdldEJvdW5kaW4ubGVmdCxcbiAgICAgIHRvcCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi50b3A7XG5cbiAgdmFyIGxlZnRQb3MgPSB4IC0gKGxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQpO1xuICB2YXIgdG9wUG9zID0geSAtICh0b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQpO1xuXG4gIGlmIChsZWZ0UG9zIDwgMCkge1xuICAgIGxlZnRQb3MgPSAwO1xuICB9IGVsc2UgaWYgKGxlZnRQb3MgPiB3aWR0aCkge1xuICAgIGxlZnRQb3MgPSB3aWR0aDtcbiAgfVxuXG4gIGlmICh0b3BQb3MgPCAwKSB7XG4gICAgdG9wUG9zID0gMDtcbiAgfSBlbHNlIGlmICh0b3BQb3MgPiBoZWlnaHQpIHtcbiAgICB0b3BQb3MgPSBoZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxlZnQ6IGxlZnRQb3MsXG4gICAgdG9wOiB0b3BQb3MsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59O1xuZXhwb3J0IHZhciBIRVhfRkFMTEJBQ0sgPSAnJztcbmV4cG9ydCB2YXIgSFNWX0ZBTExCQUNLID0gWzAsIDAsIDBdO1xuZXhwb3J0IHZhciBSR0JfRkFMTEJBQ0sgPSBbTmFOLCBOYU4sIE5hTiwgMV07XG5leHBvcnQgdmFyIFJHQl9KT0lOID0gJywgJzsgLy8gR2l2ZW4gYSBzdHJpbmcsIHRoaXMgYXR0ZW1wdHMgdG8gcmV0dXJuIGEgZm9ybWF0IHRoYXQgY2FuIGJlIGNvbnN1bWVkIGJ5IGNocm9tYS1qc1xuXG5leHBvcnQgdmFyIHBhcnNlQ29sb3IgPSBmdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0KSB7XG4gIHZhciBwYXJzZWQ7XG4gIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gIGlmIChpbnB1dC5pbmRleE9mKCcsJykgPiAwKSB7XG4gICAgaWYgKCEvXltcXHMsLjAtOV0qJC8udGVzdChpbnB1dCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciByZ2IgPSBpbnB1dC50cmltKCkuc3BsaXQoJywnKS5maWx0ZXIoZnVuY3Rpb24gKG4pIHtcbiAgICAgIHJldHVybiBuICE9PSAnJztcbiAgICB9KS5tYXAoTnVtYmVyKTtcbiAgICBwYXJzZWQgPSByZ2IubGVuZ3RoID4gMiAmJiByZ2IubGVuZ3RoIDwgNSA/IHJnYiA6IEhFWF9GQUxMQkFDSztcbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQgPSBpbnB1dDtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59OyAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGlucHV0IHdpbGwgcmV0dXJuIGEgdmFsaWQgY2hyb21hLWpzIG9iamVjdCB3aGVuIGRlc2lnbmF0ZWQgYXMgb25lIG9mXG4vLyB0aGUgYWNjZXB0YWJsZSBmb3JtYXRzOiBoZXgsIHJnYiwgcmdiYVxuXG5leHBvcnQgdmFyIGNocm9tYVZhbGlkID0gZnVuY3Rpb24gY2hyb21hVmFsaWQoY29sb3IpIHtcbiAgdmFyIHBhcnNlZCA9IGNvbG9yO1xuXG4gIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFyc2VkID0gcGFyc2VDb2xvcihjb2xvcik7XG4gIH1cblxuICBpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChfdHlwZW9mKHBhcnNlZCkgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGNocm9tYS52YWxpZChwYXJzZWQsICdyZ2InKSB8fCBjaHJvbWEudmFsaWQocGFyc2VkLCAncmdiYScpO1xuICB9XG5cbiAgcmV0dXJuIGNocm9tYS52YWxpZChjb2xvciwgJ2hleCcpO1xufTsgLy8gR2l2ZW4gYW4gaW5wdXQgYW5kIG9wYWNpdHkgY29uZmlndXJhdGlvbiwgdGhpcyByZXR1cm5zIGEgdmFsaWQgY2hyb21hLWpzIG9iamVjdFxuXG5leHBvcnQgdmFyIGdldENocm9tYUNvbG9yID0gZnVuY3Rpb24gZ2V0Q2hyb21hQ29sb3IoaW5wdXQpIHtcbiAgdmFyIGFsbG93T3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gIHZhciBwYXJzZWQgPSBwYXJzZUNvbG9yKGlucHV0KTtcblxuICBpZiAocGFyc2VkICYmIGNocm9tYVZhbGlkKHBhcnNlZCkpIHtcbiAgICAvLyB0eXBlIGd1YXJkIGZvciB0aGUgZnVuY3Rpb24gb3ZlcmxvYWRcbiAgICB2YXIgY2hyb21hQ29sb3IgPSBfdHlwZW9mKHBhcnNlZCkgPT09ICdvYmplY3QnID8gY2hyb21hKHBhcnNlZCkgOiBjaHJvbWEocGFyc2VkKTtcblxuICAgIGlmICghYWxsb3dPcGFjaXR5ICYmIGNocm9tYUNvbG9yLmFscGhhKCkgPCAxKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hyb21hQ29sb3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07IC8vIEdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBrZXkgdmFsdWUgcGFpcnMgc3RvcC9jb2xvciByZXR1cm5zIGEgY3NzIGxpbmVhci1ncmFkaWVudFxuLy8gT3IgZ2l2ZW4gYW4gYXJyYXkgb2YgaGV4IGNvbG9ycyByZXR1cm5zIGEgY3NzIGxpbmVhci1ncmFkaWVudFxuXG5leHBvcnQgdmFyIGdldExpbmVhckdyYWRpZW50ID0gZnVuY3Rpb24gZ2V0TGluZWFyR3JhZGllbnQocGFsZXR0ZSkge1xuICB2YXIgbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb24gPSBwYWxldHRlLmxlbmd0aCAtIDE7XG4gIHZhciBsaW5lYXJHcmFkaWVudDtcbiAgdmFyIHBhbGV0dGVIYXNTdG9wcyA9IHBhbGV0dGUuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBfdHlwZW9mKGl0ZW0pID09PSAnb2JqZWN0JztcbiAgfSk7XG5cbiAgaWYgKHBhbGV0dGVIYXNTdG9wcykge1xuICAgIHZhciBwYWxldHRlQ29sb3JTdG9wID0gcGFsZXR0ZTtcbiAgICBsaW5lYXJHcmFkaWVudCA9IFwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFswXS5jb2xvciwgXCIgMCUsXCIpO1xuICAgIHZhciBsYXN0Q29sb3JTdG9wRGVjaW1hbCA9IDEwMCAvIHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLnN0b3A7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uOyBpKyspIHtcbiAgICAgIGxpbmVhckdyYWRpZW50ID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFtpXS5jb2xvciwgXCIgXCIpLmNvbmNhdChNYXRoLmZsb29yKHBhbGV0dGVDb2xvclN0b3BbaV0uc3RvcCAqIGxhc3RDb2xvclN0b3BEZWNpbWFsKSwgXCIlLFwiKTtcbiAgICB9XG5cbiAgICB2YXIgbGluZWFyR3JhZGllbnRTdHlsZSA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLmNvbG9yLCBcIiAxMDAlKVwiKTtcbiAgICByZXR1cm4gbGluZWFyR3JhZGllbnRTdHlsZTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lYXJHcmFkaWVudCA9IFwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQocGFsZXR0ZVswXSwgXCIgMCUsXCIpO1xuXG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uOyBfaSsrKSB7XG4gICAgICBsaW5lYXJHcmFkaWVudCA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVbX2ldLCBcIiBcIikuY29uY2F0KE1hdGguZmxvb3IoMTAwICogX2kgLyBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiksIFwiJSxcIik7XG4gICAgfVxuXG4gICAgdmFyIF9saW5lYXJHcmFkaWVudFN0eWxlID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZVtsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbl0sIFwiIDEwMCUpXCIpO1xuXG4gICAgcmV0dXJuIF9saW5lYXJHcmFkaWVudFN0eWxlO1xuICB9XG59OyAvLyBHaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGgga2V5IHZhbHVlIHBhaXJzIHN0b3AvY29sb3Igb3IgYW4gYXJyYXkgb2YgaGV4IGNvbG9yc1xuLy8gcmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGgga2V5IHZhbHVlIHBhaXJzIGNvbG9yL3dpZHRoXG5cbmV4cG9ydCB2YXIgZ2V0Rml4ZWRMaW5lYXJHcmFkaWVudCA9IGZ1bmN0aW9uIGdldEZpeGVkTGluZWFyR3JhZGllbnQocGFsZXR0ZSkge1xuICB2YXIgcGFsZXR0ZUhhc1N0b3BzID0gcGFsZXR0ZS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIF90eXBlb2YoaXRlbSkgPT09ICdvYmplY3QnO1xuICB9KTtcblxuICBpZiAocGFsZXR0ZUhhc1N0b3BzKSB7XG4gICAgdmFyIHBhbGV0dGVDb2xvclN0b3AgPSBwYWxldHRlO1xuICAgIHZhciBmaXhlZExpbmVhckdyYWRpZW50V2l0aFN0b3BzID0gcGFsZXR0ZUNvbG9yU3RvcC5tYXAoZnVuY3Rpb24gKGNvbG9yU3RvcCwgaW5kZXgpIHtcbiAgICAgIHZhciBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiA9IHBhbGV0dGUubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0Q29sb3JTdG9wRGVjaW1hbCA9IDEwMCAvIHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLnN0b3A7XG4gICAgICB2YXIgaXNGaXJzdENvbG9yU3RvcCA9IGluZGV4ID09PSAwO1xuICAgICAgdmFyIHByZXZpb3VzQ29sb3JTdG9wV2lkdGg7XG5cbiAgICAgIGlmIChpc0ZpcnN0Q29sb3JTdG9wKSB7XG4gICAgICAgIHByZXZpb3VzQ29sb3JTdG9wV2lkdGggPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJldmlvdXNDb2xvclN0b3BXaWR0aCA9IE1hdGguZmxvb3IocGFsZXR0ZUNvbG9yU3RvcFtpbmRleCAtIDFdLnN0b3AgKiBsYXN0Q29sb3JTdG9wRGVjaW1hbCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjdXJyZW50Q29sb3JTdG9wV2lkdGggPSBNYXRoLmZsb29yKGNvbG9yU3RvcC5zdG9wICogbGFzdENvbG9yU3RvcERlY2ltYWwpO1xuICAgICAgdmFyIGNvbG9yU3RvcFdpZHRoID0gY3VycmVudENvbG9yU3RvcFdpZHRoIC0gcHJldmlvdXNDb2xvclN0b3BXaWR0aDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBjb2xvclN0b3AuY29sb3IsXG4gICAgICAgIHdpZHRoOiBcIlwiLmNvbmNhdChjb2xvclN0b3BXaWR0aCwgXCIlXCIpXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBmaXhlZExpbmVhckdyYWRpZW50V2l0aFN0b3BzO1xuICB9IGVsc2Uge1xuICAgIHZhciBfcGFsZXR0ZUNvbG9yU3RvcCA9IHBhbGV0dGU7XG4gICAgdmFyIHBhbGV0dGVXaWR0aCA9IDEwMCAvIHBhbGV0dGUubGVuZ3RoO1xuXG4gICAgdmFyIGZpeGVkTGluZWFyR3JhZGllbnRXaWR0aEF1dG8gPSBfcGFsZXR0ZUNvbG9yU3RvcC5tYXAoZnVuY3Rpb24gKGhleENvZGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBoZXhDb2RlLFxuICAgICAgICB3aWR0aDogXCJcIi5jb25jYXQocGFsZXR0ZVdpZHRoLCBcIiVcIilcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZml4ZWRMaW5lYXJHcmFkaWVudFdpZHRoQXV0bztcbiAgfVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImxhYmVsXCIsIFwiY29sb3JcIiwgXCJ0b29sdGlwQ29udGVudFwiLCBcInRvb2x0aXBQb3NpdGlvblwiLCBcInRpdGxlXCIsIFwiaWNvblR5cGVcIiwgXCJvbkNsaWNrXCIsIFwib25DbGlja0FyaWFMYWJlbFwiLCBcImhyZWZcIiwgXCJyZWxcIiwgXCJ0YXJnZXRcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBjb2xvclRvQ2xhc3NNYXAgPSB7XG4gIGFjY2VudDogJ2V1aUJldGFCYWRnZS0tYWNjZW50JyxcbiAgc3ViZHVlZDogJ2V1aUJldGFCYWRnZS0tc3ViZHVlZCcsXG4gIGhvbGxvdzogJ2V1aUJldGFCYWRnZS0taG9sbG93J1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc01hcCk7XG5leHBvcnQgdmFyIHNpemVUb0NsYXNzTWFwID0ge1xuICBzOiAnZXVpQmV0YUJhZGdlLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTWFwKTtcbmV4cG9ydCB2YXIgRXVpQmV0YUJhZGdlID0gZnVuY3Rpb24gRXVpQmV0YUJhZGdlKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdob2xsb3cnIDogX3JlZiRjb2xvcixcbiAgICAgIHRvb2x0aXBDb250ZW50ID0gX3JlZi50b29sdGlwQ29udGVudCxcbiAgICAgIF9yZWYkdG9vbHRpcFBvc2l0aW9uID0gX3JlZi50b29sdGlwUG9zaXRpb24sXG4gICAgICB0b29sdGlwUG9zaXRpb24gPSBfcmVmJHRvb2x0aXBQb3NpdGlvbiA9PT0gdm9pZCAwID8gJ3RvcCcgOiBfcmVmJHRvb2x0aXBQb3NpdGlvbixcbiAgICAgIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICBvbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHNpbmdsZUxldHRlciA9IGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnICYmIGxhYmVsLmxlbmd0aCA9PT0gMSkge1xuICAgIHNpbmdsZUxldHRlciA9IHRydWU7XG4gIH1cblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJldGFCYWRnZScsIHtcbiAgICAnZXVpQmV0YUJhZGdlLS1pY29uT25seSc6IGljb25UeXBlLFxuICAgICdldWlCZXRhQmFkZ2UtLXNpbmdsZUxldHRlcic6IHNpbmdsZUxldHRlcixcbiAgICAnZXVpQmV0YUJhZGdlLWlzQ2xpY2thYmxlJzogb25DbGljayB8fCBocmVmXG4gIH0sIGNvbG9yVG9DbGFzc01hcFtjb2xvcl0sIHNpemVUb0NsYXNzTWFwW3NpemVdLCBjbGFzc05hbWUpO1xuICB2YXIgaWNvbjtcblxuICBpZiAoaWNvblR5cGUpIHtcbiAgICBpY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQmV0YUJhZGdlX19pY29uXCIsXG4gICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgIHNpemU6IHNpemUgPT09ICdtJyA/ICdtJyA6ICdzJyxcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuXG4gICAgfSk7XG4gIH1cblxuICB2YXIgRWxlbWVudCA9IGhyZWYgPyAnYScgOiAnYnV0dG9uJztcbiAgdmFyIHJlbE9iaiA9IHt9O1xuXG4gIGlmIChocmVmKSB7XG4gICAgcmVsT2JqLmhyZWYgPSBocmVmO1xuICAgIHJlbE9iai50YXJnZXQgPSB0YXJnZXQ7XG4gICAgcmVsT2JqLnJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZWxPYmoub25DbGljayA9IG9uQ2xpY2s7XG4gIH1cblxuICB2YXIgY29udGVudDtcblxuICBpZiAob25DbGljayB8fCBocmVmKSB7XG4gICAgY29udGVudCA9IF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWxhYmVsXCI6IG9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICB0aXRsZTogdHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyA/IGxhYmVsIDogdGl0bGVcbiAgICB9LCByZWxPYmosIHJlc3QpLCBpY29uIHx8IGxhYmVsKTtcblxuICAgIGlmICh0b29sdGlwQ29udGVudCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgICAgICBwb3NpdGlvbjogdG9vbHRpcFBvc2l0aW9uLFxuICAgICAgICBjb250ZW50OiB0b29sdGlwQ29udGVudCxcbiAgICAgICAgdGl0bGU6IHRpdGxlIHx8IGxhYmVsXG4gICAgICB9LCBjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGNvbnRlbnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodG9vbHRpcENvbnRlbnQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIHtcbiAgICAgICAgcG9zaXRpb246IHRvb2x0aXBQb3NpdGlvbixcbiAgICAgICAgY29udGVudDogdG9vbHRpcENvbnRlbnQsXG4gICAgICAgIHRpdGxlOiB0aXRsZSB8fCBsYWJlbFxuICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICB0YWJJbmRleDogMCxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICByb2xlOiBcImJ1dHRvblwiXG4gICAgICB9LCByZXN0KSwgaWNvbiB8fCBsYWJlbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3BhblRpdGxlID0gdGl0bGUgfHwgbGFiZWw7XG5cbiAgICAgIGlmIChzcGFuVGl0bGUgJiYgdHlwZW9mIHNwYW5UaXRsZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiT25seSBzdHJpbmcgdGl0bGVzIGFyZSBwZXJtaXR0ZWQgb24gYmFkZ2VzIHRoYXQgZG8gbm90IHVzZSB0b29sdGlwcy4gRm91bmQ6IFwiLmNvbmNhdChfdHlwZW9mKHNwYW5UaXRsZSkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICB0aXRsZTogc3BhblRpdGxlXG4gICAgICB9LCByZXN0KSwgaWNvbiB8fCBsYWJlbCk7XG4gICAgfVxuICB9XG59O1xuRXVpQmV0YUJhZGdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgKi9cbiAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogU3VwcGx5IGFuIGljb24gdHlwZSBpZiB0aGUgYmFkZ2Ugc2hvdWxkIGp1c3QgYmUgYW4gaWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogT25lIHdvcmQgbGFiZWwgbGlrZSBcIkJldGFcIiBvciBcIkxhYlwiXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogT25lIHdvcmQgbGFiZWwgbGlrZSBcIkJldGFcIiBvciBcIkxhYlwiXG4gICAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBDb250ZW50IGZvciB0aGUgdG9vbHRpcFxuICAgICAqL1xuICB0b29sdGlwQ29udGVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXSldKSxcblxuICAvKipcbiAgICAgKiBDdXN0b20gcG9zaXRpb24gb2YgdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgdG9vbHRpcFBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKSxcblxuICAvKipcbiAgICAgKiBPcHRpb25hbCB0aXRsZSB3aWxsIGJlIHN1cHBsaWVkIGFzIHRvb2x0aXAgdGl0bGUgb3IgdGl0bGUgYXR0cmlidXRlXG4gICAgICogb3RoZXJ3aXNlIHRoZSBsYWJlbCB3aWxsIGJlIHVzZWRcbiAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZ10pXSksXG5cbiAgLyoqXG4gICAgICogQWNjZXB0cyBhY2NlbnQsIHN1YmR1ZWQgYW5kIGhvbGxvdy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJhY2NlbnRcIiwgXCJzdWJkdWVkXCIsIFwiaG9sbG93XCJdKSxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJhbmNob3JDbGFzc05hbWVcIiwgXCJjb250ZW50XCIsIFwidGl0bGVcIiwgXCJkZWxheVwiLCBcImRpc3BsYXlcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjbG9uZUVsZW1lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpUG9ydGFsIH0gZnJvbSAnLi4vcG9ydGFsJztcbmltcG9ydCB7IEV1aVRvb2xUaXBQb3BvdmVyIH0gZnJvbSAnLi90b29sX3RpcF9wb3BvdmVyJztcbmltcG9ydCB7IGVucXVldWVTdGF0ZUNoYW5nZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlYWN0JztcbmltcG9ydCB7IGZpbmRQb3BvdmVyUG9zaXRpb24sIGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgcG9zaXRpb25zVG9DbGFzc05hbWVNYXAgPSB7XG4gIHRvcDogJ2V1aVRvb2xUaXAtLXRvcCcsXG4gIHJpZ2h0OiAnZXVpVG9vbFRpcC0tcmlnaHQnLFxuICBib3R0b206ICdldWlUb29sVGlwLS1ib3R0b20nLFxuICBsZWZ0OiAnZXVpVG9vbFRpcC0tbGVmdCdcbn07XG5leHBvcnQgdmFyIFBPU0lUSU9OUyA9IGtleXNPZihwb3NpdGlvbnNUb0NsYXNzTmFtZU1hcCk7XG52YXIgZGVsYXlUb01zTWFwID0ge1xuICByZWd1bGFyOiAyNTAsXG4gIGxvbmc6IDI1MCAqIDVcbn07XG52YXIgZGlzcGxheVRvQ2xhc3NOYW1lTWFwID0ge1xuICBpbmxpbmVCbG9jazogdW5kZWZpbmVkLFxuICBibG9jazogJ2V1aVRvb2xUaXBBbmNob3ItLWRpc3BsYXlCbG9jaydcbn07XG52YXIgREVGQVVMVF9UT09MVElQX1NUWUxFUyA9IHtcbiAgLy8gcG9zaXRpb24gdGhlIHRvb2x0aXAgY29udGVudCBuZWFyIHRoZSB0b3AtbGVmdFxuICAvLyBjb3JuZXIgb2YgdGhlIHdpbmRvdyBzbyBpdCBjYW4ndCBjcmVhdGUgc2Nyb2xsYmFyc1xuICAvLyA1MCw1MCBiZWNhdXNlIHdobyBrbm93cyB3aGF0IG5lZ2F0aXZlIG1hcmdpbnMsIHBhZGRpbmcsIGV0Y1xuICB0b3A6IDUwLFxuICBsZWZ0OiA1MCxcbiAgLy8ganVzdCBpbiBjYXNlLCBhdm9pZCBhbnkgcG90ZW50aWFsIGZsaWNrZXIgYnkgaGlkaW5nXG4gIC8vIHRoZSB0b29sdGlwIGJlZm9yZSBpdCBpcyBwb3NpdGlvbmVkXG4gIG9wYWNpdHk6IDAsXG4gIC8vIHByZXZlbnQgYWNjaWRlbnRhbCBtb3VzZSBpbnRlcmFjdGlvbiB3aGlsZSBwb3NpdGlvbmluZ1xuICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xufTtcbmV4cG9ydCB2YXIgRXVpVG9vbFRpcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVG9vbFRpcCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlUb29sVGlwKTtcblxuICBmdW5jdGlvbiBFdWlUb29sVGlwKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUb29sVGlwKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX2lzTW91bnRlZFwiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYW5jaG9yXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvcG92ZXJcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGltZW91dElkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgICBjYWxjdWxhdGVkUG9zaXRpb246IF90aGlzLnByb3BzLnBvc2l0aW9uLFxuICAgICAgdG9vbFRpcFN0eWxlczogREVGQVVMVF9UT09MVElQX1NUWUxFUyxcbiAgICAgIGFycm93U3R5bGVzOiB1bmRlZmluZWQsXG4gICAgICBpZDogX3RoaXMucHJvcHMuaWQgfHwgaHRtbElkR2VuZXJhdG9yKCkoKVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsZWFyQW5pbWF0aW9uVGltZW91dFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMudGltZW91dElkKSB7XG4gICAgICAgIF90aGlzLnRpbWVvdXRJZCA9IGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRlc3RBbmNob3JcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gd2hlbiB0aGUgdG9vbHRpcCBpcyB2aXNpYmxlLCB0aGlzIGNoZWNrcyBpZiB0aGUgYW5jaG9yIGlzIHN0aWxsIHBhcnQgb2YgZG9jdW1lbnRcbiAgICAgIC8vIHRoaXMgZml4ZXMgd2hlbiB0aGUgcmVhY3Qgcm9vdCBpcyByZW1vdmVkIGZyb20gdGhlIGRvbSB3aXRob3V0IHVubW91bnRpbmdcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMTEwNVxuICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnMoX3RoaXMuYW5jaG9yKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gdGhlIGFuY2hvciBpcyBubyBsb25nZXIgcGFydCBvZiBgZG9jdW1lbnRgXG4gICAgICAgIF90aGlzLmhpZGVUb29sVGlwKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoX3RoaXMuc3RhdGUudmlzaWJsZSkge1xuICAgICAgICAgIC8vIGlmIHN0aWxsIHZpc2libGUsIGtlZXAgY2hlY2tpbmdcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMudGVzdEFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRQb3BvdmVyUmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnBvcG92ZXIgPSByZWY7IC8vIGlmIHRoZSBwb3BvdmVyIGhhcyBiZWVuIHVubW91bnRlZCwgY2xlYXJcbiAgICAgIC8vIGFueSBwcmV2aW91cyBrbm93bGVkZ2UgYWJvdXQgaXRzIHNpemVcblxuICAgICAgaWYgKHJlZiA9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB0b29sVGlwU3R5bGVzOiBERUZBVUxUX1RPT0xUSVBfU1RZTEVTLFxuICAgICAgICAgIGFycm93U3R5bGVzOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2hvd1Rvb2xUaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFfdGhpcy50aW1lb3V0SWQpIHtcbiAgICAgICAgX3RoaXMudGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIHZpc2libGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBkZWxheVRvTXNNYXBbX3RoaXMucHJvcHMuZGVsYXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3NpdGlvblRvb2xUaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlcXVlc3RlZFBvc2l0aW9uID0gX3RoaXMucHJvcHMucG9zaXRpb247XG5cbiAgICAgIGlmICghX3RoaXMuYW5jaG9yIHx8ICFfdGhpcy5wb3BvdmVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF9maW5kUG9wb3ZlclBvc2l0aW9uID0gZmluZFBvcG92ZXJQb3NpdGlvbih7XG4gICAgICAgIGFuY2hvcjogX3RoaXMuYW5jaG9yLFxuICAgICAgICBwb3BvdmVyOiBfdGhpcy5wb3BvdmVyLFxuICAgICAgICBwb3NpdGlvbjogcmVxdWVzdGVkUG9zaXRpb24sXG4gICAgICAgIG9mZnNldDogMTYsXG4gICAgICAgIC8vIG9mZnNldCBwb3BvdmVyIDE2cHggZnJvbSB0aGUgYW5jaG9yXG4gICAgICAgIGFycm93Q29uZmlnOiB7XG4gICAgICAgICAgYXJyb3dXaWR0aDogMTIsXG4gICAgICAgICAgYXJyb3dCdWZmZXI6IDRcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAgICAgcG9zaXRpb24gPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5wb3NpdGlvbixcbiAgICAgICAgICBsZWZ0ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ubGVmdCxcbiAgICAgICAgICB0b3AgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi50b3AsXG4gICAgICAgICAgYXJyb3cgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5hcnJvdzsgLy8gSWYgZW5jcm9hY2hpbmcgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHdpbmRvdzpcbiAgICAgIC8vIFdoZW4gYHByb3BzLmNvbnRlbnRgIGNoYW5nZXMgYW5kIGlzIGxvbmdlciB0aGFuIGBwcmV2UHJvcHMuY29udGVudGAsIHRoZSB0b29sdGlwIHdpZHRoIHJlbWFpbnMgYW5kXG4gICAgICAvLyB0aGUgcmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgd2lsbCBmaXJlIHR3aWNlIChvbmNlIGZvciB2ZXJ0aWNhbCByZXNpemUgY2F1c2VkIGJ5IHRleHQgbGluZSB3cmFwcGluZyxcbiAgICAgIC8vIG9uY2UgZm9yIGEgc3Vic2VxdWVudCBwb3NpdGlvbiBjb3JyZWN0aW9uKSBhbmQgY2F1c2UgYSBmbGFzaCByZXJlbmRlciBhbmQgcmVwb3NpdGlvbi5cbiAgICAgIC8vIFRvIHByZXZlbnQgdGhpcywgd2UgY2FuIG9yaWVudCBmcm9tIHRoZSByaWdodCBzbyB0aGF0IHRleHQgbGluZSB3cmFwcGluZyBkb2VzIG5vdCBvY2N1ciwgbmVnYXRpbmdcbiAgICAgIC8vIHRoZSBzZWNvbmQgcmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgY2FsbC5cblxuXG4gICAgICB2YXIgd2luZG93V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgICB2YXIgdXNlUmlnaHRWYWx1ZSA9IHdpbmRvd1dpZHRoIC8gMiA8IGxlZnQ7XG4gICAgICB2YXIgdG9vbFRpcFN0eWxlcyA9IHtcbiAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgIGxlZnQ6IHVzZVJpZ2h0VmFsdWUgPyAnYXV0bycgOiBsZWZ0LFxuICAgICAgICByaWdodDogdXNlUmlnaHRWYWx1ZSA/IHdpbmRvd1dpZHRoIC0gbGVmdCAtIF90aGlzLnBvcG92ZXIub2Zmc2V0V2lkdGggOiAnYXV0bydcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgY2FsY3VsYXRlZFBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgdG9vbFRpcFN0eWxlczogdG9vbFRpcFN0eWxlcyxcbiAgICAgICAgYXJyb3dTdHlsZXM6IGFycm93XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoaWRlVG9vbFRpcFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5jbGVhckFuaW1hdGlvblRpbWVvdXQoKTtcblxuICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl9pc01vdW50ZWQpIHtcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5zaG93VG9vbFRpcCgpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQmx1clwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLmhpZGVUb29sVGlwKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Nb3VzZU91dFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIFByZXZlbnQgbW91c2luZyBvdmVyIGNoaWxkcmVuIGZyb20gaGlkaW5nIHRoZSB0b29sdGlwIGJ5IHRlc3RpbmcgZm9yIHdoZXRoZXIgdGhlIG1vdXNlIGhhc1xuICAgICAgLy8gbGVmdCB0aGUgYW5jaG9yIGZvciBhIG5vbi1jaGlsZC5cbiAgICAgIGlmIChfdGhpcy5hbmNob3IgPT09IGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgX3RoaXMuYW5jaG9yICE9IG51bGwgJiYgIV90aGlzLmFuY2hvci5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICBpZiAoIV90aGlzLnN0YXRlLmhhc0ZvY3VzKSB7XG4gICAgICAgICAgX3RoaXMuaGlkZVRvb2xUaXAoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25Nb3VzZU91dCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbk1vdXNlT3V0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUb29sVGlwLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhckFuaW1hdGlvblRpbWVvdXQoKTtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLnZpc2libGUgPT09IGZhbHNlICYmIHRoaXMuc3RhdGUudmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy50ZXN0QW5jaG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGFuY2hvckNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmFuY2hvckNsYXNzTmFtZSxcbiAgICAgICAgICBjb250ZW50ID0gX3RoaXMkcHJvcHMuY29udGVudCxcbiAgICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzLnRpdGxlLFxuICAgICAgICAgIGRlbGF5ID0gX3RoaXMkcHJvcHMuZGVsYXksXG4gICAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBhcnJvd1N0eWxlcyA9IF90aGlzJHN0YXRlLmFycm93U3R5bGVzLFxuICAgICAgICAgIGlkID0gX3RoaXMkc3RhdGUuaWQsXG4gICAgICAgICAgdG9vbFRpcFN0eWxlcyA9IF90aGlzJHN0YXRlLnRvb2xUaXBTdHlsZXMsXG4gICAgICAgICAgdmlzaWJsZSA9IF90aGlzJHN0YXRlLnZpc2libGU7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXAnLCBwb3NpdGlvbnNUb0NsYXNzTmFtZU1hcFt0aGlzLnN0YXRlLmNhbGN1bGF0ZWRQb3NpdGlvbl0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgYW5jaG9yQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXBBbmNob3InLCBkaXNwbGF5ID8gZGlzcGxheVRvQ2xhc3NOYW1lTWFwW2Rpc3BsYXldIDogbnVsbCwgYW5jaG9yQ2xhc3NOYW1lKTtcbiAgICAgIHZhciB0b29sdGlwO1xuXG4gICAgICBpZiAodmlzaWJsZSAmJiAoY29udGVudCB8fCB0aXRsZSkpIHtcbiAgICAgICAgdG9vbHRpcCA9IF9fX0Vtb3Rpb25KU1goRXVpUG9ydGFsLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXBQb3BvdmVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHN0eWxlOiB0b29sVGlwU3R5bGVzLFxuICAgICAgICAgIHBvc2l0aW9uVG9vbFRpcDogdGhpcy5wb3NpdGlvblRvb2xUaXAsXG4gICAgICAgICAgcG9wb3ZlclJlZjogdGhpcy5zZXRQb3BvdmVyUmVmLFxuICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgcm9sZTogXCJ0b29sdGlwXCJcbiAgICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIHN0eWxlOiBhcnJvd1N0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpVG9vbFRpcF9fYXJyb3dcIlxuICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlSZXNpemVPYnNlcnZlciwge1xuICAgICAgICAgIG9uUmVzaXplOiB0aGlzLnBvc2l0aW9uVG9vbFRpcFxuICAgICAgICB9LCBmdW5jdGlvbiAocmVzaXplUmVmKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgcmVmOiByZXNpemVSZWZcbiAgICAgICAgICB9LCBjb250ZW50KTtcbiAgICAgICAgfSkpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFuY2hvciA9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9tb3VzZS1ldmVudHMtaGF2ZS1rZXktZXZlbnRzXG4gICAgICBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKGFuY2hvcikge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuYW5jaG9yID0gYW5jaG9yO1xuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWU6IGFuY2hvckNsYXNzZXMsXG4gICAgICAgIG9uTW91c2VPdmVyOiB0aGlzLnNob3dUb29sVGlwLFxuICAgICAgICBvbk1vdXNlT3V0OiB0aGlzLm9uTW91c2VPdXRcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBvbkZvY3VzOiBmdW5jdGlvbiBvbkZvY3VzKGUpIHtcbiAgICAgICAgICBfdGhpczIub25Gb2N1cygpO1xuXG4gICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25Gb2N1cyAmJiBjaGlsZHJlbi5wcm9wcy5vbkZvY3VzKGUpO1xuICAgICAgICB9LFxuICAgICAgICBvbkJsdXI6IGZ1bmN0aW9uIG9uQmx1cihlKSB7XG4gICAgICAgICAgX3RoaXMyLm9uQmx1cigpO1xuXG4gICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25CbHVyICYmIGNoaWxkcmVuLnByb3BzLm9uQmx1cihlKTtcbiAgICAgICAgfVxuICAgICAgfSwgdmlzaWJsZSAmJiB7XG4gICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogdGhpcy5zdGF0ZS5pZFxuICAgICAgfSkpKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGFuY2hvciwgdG9vbHRpcCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVRvb2xUaXA7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlUb29sVGlwLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHBvc2l0aW9uOiAndG9wJyxcbiAgZGVsYXk6ICdyZWd1bGFyJyxcbiAgZGlzcGxheTogJ2lubGluZUJsb2NrJ1xufSk7XG5cbkV1aVRvb2xUaXAucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGFuY2hvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBUaGUgaW4tdmlldyB0cmlnZ2VyIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSB0b29sdGlwIGl0c2VsZiwgbm90IHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVGhlIG1haW4gY29udGVudCBvZiB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIENvbW1vbiBkaXNwbGF5IGFsdGVybmF0aXZlcyBmb3IgdGhlIGFuY2hvciB3cmFwcGVyXG4gICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5vbmVPZihbXCJpbmxpbmVCbG9ja1wiLCBcImJsb2NrXCJdKSxcblxuICAvKipcbiAgICAgKiBEZWxheSBiZWZvcmUgc2hvd2luZyB0b29sdGlwLiBHb29kIGZvciByZXBlYXRhYmxlIGl0ZW1zLlxuICAgICAqL1xuICBkZWxheTogUHJvcFR5cGVzLm9uZU9mKFtcInJlZ3VsYXJcIiwgXCJsb25nXCJdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBVbmxlc3MgeW91IHByb3ZpZGUgb25lLCB0aGlzIHdpbGwgYmUgcmFuZG9tbHkgZ2VuZXJhdGVkLlxuICAgICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBTdWdnZXN0ZWQgcG9zaXRpb24uIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSBmb3IgaXQgdGhpcyB3aWxsIGJlIGNoYW5nZWQuXG4gICAgICovXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIElmIHN1cHBsaWVkLCBjYWxsZWQgd2hlbiBtb3VzZSBtb3ZlbWVudCBjYXVzZXMgdGhlIHRvb2wgdGlwIHRvIGJlXG4gICAgICogaGlkZGVuLlxuICAgICAqL1xuICBvbk1vdXNlT3V0OiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBOT1RFOiBXZSBjYW4ndCB0ZXN0IHRoaXMgY29tcG9uZW50IGJlY2F1c2UgRW56eW1lIGRvZXNuJ3Qgc3VwcG9ydCByZW5kZXJpbmdcbiAqIGludG8gcG9ydGFscy5cbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5leHBvcnQgdmFyIGluc2VydFBvc2l0aW9ucyA9IHtcbiAgYWZ0ZXI6ICdhZnRlcmVuZCcsXG4gIGJlZm9yZTogJ2JlZm9yZWJlZ2luJ1xufTtcbmV4cG9ydCB2YXIgSU5TRVJUX1BPU0lUSU9OUyA9IGtleXNPZihpbnNlcnRQb3NpdGlvbnMpO1xuZXhwb3J0IHZhciBFdWlQb3J0YWwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVBvcnRhbCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlQb3J0YWwpO1xuXG4gIGZ1bmN0aW9uIEV1aVBvcnRhbChwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlQb3J0YWwpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9ydGFsTm9kZVwiLCBudWxsKTtcblxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzKTsgLy8gUHJldmVudCBTU1IgZXJyb3JzXG5cbiAgICB2YXIgaW5zZXJ0ID0gX3RoaXMucHJvcHMuaW5zZXJ0O1xuICAgIF90aGlzLnBvcnRhbE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBfdGhpcy5wb3J0YWxOb2RlLmRhdGFzZXQuZXVpcG9ydGFsID0gJ3RydWUnO1xuXG4gICAgaWYgKGluc2VydCA9PSBudWxsKSB7XG4gICAgICAvLyBubyBpbnNlcnRpb24gZGVmaW5lZCwgYXBwZW5kIHRvIGJvZHlcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoX3RoaXMucG9ydGFsTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluc2VydGluZyBiZWZvcmUgb3IgYWZ0ZXIgYW4gZWxlbWVudFxuICAgICAgdmFyIHNpYmxpbmcgPSBpbnNlcnQuc2libGluZyxcbiAgICAgICAgICBwb3NpdGlvbiA9IGluc2VydC5wb3NpdGlvbjtcbiAgICAgIHNpYmxpbmcuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KGluc2VydFBvc2l0aW9uc1twb3NpdGlvbl0sIF90aGlzLnBvcnRhbE5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlQb3J0YWwsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy51cGRhdGVQb3J0YWxSZWYodGhpcy5wb3J0YWxOb2RlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcG9ydGFsTm9kZTtcblxuICAgICAgaWYgKChfdGhpcyRwb3J0YWxOb2RlID0gdGhpcy5wb3J0YWxOb2RlKSAhPT0gbnVsbCAmJiBfdGhpcyRwb3J0YWxOb2RlICE9PSB2b2lkIDAgJiYgX3RoaXMkcG9ydGFsTm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIHRoaXMucG9ydGFsTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9ydGFsTm9kZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlUG9ydGFsUmVmKG51bGwpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVQb3J0YWxSZWZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlUG9ydGFsUmVmKHJlZikge1xuICAgICAgaWYgKHRoaXMucHJvcHMucG9ydGFsUmVmKSB7XG4gICAgICAgIHRoaXMucHJvcHMucG9ydGFsUmVmKHJlZik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb3J0YWxOb2RlID8gLyojX19QVVJFX18qL2NyZWF0ZVBvcnRhbCh0aGlzLnByb3BzLmNoaWxkcmVuLCB0aGlzLnBvcnRhbE5vZGUpIDogbnVsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpUG9ydGFsO1xufShDb21wb25lbnQpO1xuRXVpUG9ydGFsLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIGluc2VydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzaWJsaW5nOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJiZWZvcmVcIiwgXCJhZnRlclwiXSkuaXNSZXF1aXJlZFxuICB9KSxcbiAgcG9ydGFsUmVmOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJ0aXRsZVwiLCBcImNsYXNzTmFtZVwiLCBcInBvc2l0aW9uVG9vbFRpcFwiLCBcInBvcG92ZXJSZWZcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVG9vbFRpcFBvcG92ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVRvb2xUaXBQb3BvdmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVRvb2xUaXBQb3BvdmVyKTtcblxuICBmdW5jdGlvbiBFdWlUb29sVGlwUG9wb3ZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVG9vbFRpcFBvcG92ZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3BvdmVyXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlRGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBCZWNhdXNlIG9mIHRoaXMgZGVsYXksIHNvbWV0aW1lcyBgcG9zaXRpb25Ub29sVGlwYCBiZWNvbWVzIHVuYXZhaWxhYmxlLlxuICAgICAgICBpZiAoX3RoaXMucG9wb3Zlcikge1xuICAgICAgICAgIF90aGlzLnByb3BzLnBvc2l0aW9uVG9vbFRpcCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRQb3BvdmVyUmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnBvcG92ZXIgPSByZWY7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5wb3BvdmVyUmVmKSB7XG4gICAgICAgIF90aGlzLnByb3BzLnBvcG92ZXJSZWYocmVmKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUb29sVGlwUG9wb3ZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2V1aUJvZHktaGFzUG9ydGFsQ29udGVudCcpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMudXBkYXRlRGltZW5zaW9ucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdldWlCb2R5LWhhc1BvcnRhbENvbnRlbnQnKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnVwZGF0ZURpbWVuc2lvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIHRpdGxlID0gX3RoaXMkcHJvcHMudGl0bGUsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIHBvc2l0aW9uVG9vbFRpcCA9IF90aGlzJHByb3BzLnBvc2l0aW9uVG9vbFRpcCxcbiAgICAgICAgICBwb3BvdmVyUmVmID0gX3RoaXMkcHJvcHMucG9wb3ZlclJlZixcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXBQb3BvdmVyJywgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBvcHRpb25hbFRpdGxlO1xuXG4gICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgb3B0aW9uYWxUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlUb29sVGlwX190aXRsZVwiXG4gICAgICAgIH0sIHRpdGxlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHJlZjogdGhpcy5zZXRQb3BvdmVyUmVmXG4gICAgICB9LCByZXN0KSwgb3B0aW9uYWxUaXRsZSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUb29sVGlwUG9wb3Zlcjtcbn0oQ29tcG9uZW50KTtcbkV1aVRvb2xUaXBQb3BvdmVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwb3NpdGlvblRvb2xUaXA6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICBwb3BvdmVyUmVmOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJhcmlhLWxhYmVsXCIsIFwiY29sb3JcIiwgXCJzaXplXCIsIFwiaWNvblByb3BzXCIsIFwicG9zaXRpb25cIiwgXCJkZWxheVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi90b29sX3RpcCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJY29uVGlwID0gZnVuY3Rpb24gRXVpSWNvblRpcChfcmVmKSB7XG4gIHZhciBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAncXVlc3Rpb25JbkNpcmNsZScgOiBfcmVmJHR5cGUsXG4gICAgICBfcmVmJGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXSxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWYkYXJpYUxhYmVsID09PSB2b2lkIDAgPyAnSW5mbycgOiBfcmVmJGFyaWFMYWJlbCxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBpY29uUHJvcHMgPSBfcmVmLmljb25Qcm9wcyxcbiAgICAgIF9yZWYkcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgICAgcG9zaXRpb24gPSBfcmVmJHBvc2l0aW9uID09PSB2b2lkIDAgPyAndG9wJyA6IF9yZWYkcG9zaXRpb24sXG4gICAgICBfcmVmJGRlbGF5ID0gX3JlZi5kZWxheSxcbiAgICAgIGRlbGF5ID0gX3JlZiRkZWxheSA9PT0gdm9pZCAwID8gJ3JlZ3VsYXInIDogX3JlZiRkZWxheSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIGRlbGF5OiBkZWxheVxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCBfZXh0ZW5kcyh7XG4gICAgdGFiSW5kZXg6IDAsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb2xvcjogY29sb3IsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsXG4gIH0sIGljb25Qcm9wcykpKTtcbn07XG5FdWlJY29uVGlwLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBhbmNob3JDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHRvb2x0aXAgaXRzZWxmLCBub3QgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBUaGUgbWFpbiBjb250ZW50IG9mIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgY29udGVudDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogQ29tbW9uIGRpc3BsYXkgYWx0ZXJuYXRpdmVzIGZvciB0aGUgYW5jaG9yIHdyYXBwZXJcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLm9uZU9mKFtcImlubGluZUJsb2NrXCIsIFwiYmxvY2tcIl0pLFxuXG4gIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBVbmxlc3MgeW91IHByb3ZpZGUgb25lLCB0aGlzIHdpbGwgYmUgcmFuZG9tbHkgZ2VuZXJhdGVkLlxuICAgICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBJZiBzdXBwbGllZCwgY2FsbGVkIHdoZW4gbW91c2UgbW92ZW1lbnQgY2F1c2VzIHRoZSB0b29sIHRpcCB0byBiZVxuICAgICAqIGhpZGRlbi5cbiAgICAgKi9cbiAgb25Nb3VzZU91dDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogVGhlIGljb24gY29sb3IuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIHR5cGUuXG4gICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIHNpemUuXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogRXhwbGFpbiB3aGF0IHRoaXMgaWNvbiBtZWFucyBmb3Igc2NyZWVuIHJlYWRlcnMuXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFBhc3MgY2VydGFpbiBwcm9wcyBkb3duIHRvIGBFdWlJY29uYFxuICAgICAqL1xuICAvLyBFdWlJY29uVGlwJ3MgYHR5cGVgIGlzIHBhc3NlZCB0byBFdWlJY29uLCBzbyB3ZSB3YW50IHRvIGV4Y2x1ZGUgYHR5cGVgIGZyb21cbiAgLy8gaWNvblByb3BzOyBob3dldmVyLCBkdWUgdG8gVFMncyBiaXZhcmlhbnQgZnVuY3Rpb24gYXJndW1lbnRzIGB0eXBlYCBjb3VsZCBiZVxuICAvLyBwYXNzZWQgd2l0aG91dCBhbnkgZXJyb3IvZmVlZGJhY2sgc28gd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gYG5ldmVyYCB0eXBlXG4gIGljb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLy8gVGhpcyBhcmUgY29waWVkIGZyb20gRXVpVG9vbFRpcFByb3BzLCBidXQgbWFkZSBvcHRpb25hbC4gRGVmYXVsdHNcbiAgLy8gYXJlIGFwcGxpZWQgYmVsb3cuXG4gIGRlbGF5OiBQcm9wVHlwZXMuYW55LFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IENPTE9SX01PREVTX1NUQU5EQVJEIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdHlwZXMnOyAvLyBDcmVhdGUgYSBDU1MgY29sb3IgdmFsdWUgdXNpbmcgd2hvc2Ugb3BhY2l0eSBpcyBkZXRlcm1pbmVkIGJhc2VkXG4vLyBvbiBlaXRoZXIgYSBsaWdodCBvciBkYXJrIHRoZW1lLiBXZSB1c2UgYSBtdWx0aXBsaWVyXG4vLyBvZiAxIGZvciBsaWdodCB0aGVtZXMgYW5kIDIuNSBmb3IgZGFyayB0aGVtZXNcblxuZXhwb3J0IHZhciBnZXRTaGFkb3dDb2xvciA9IGZ1bmN0aW9uIGdldFNoYWRvd0NvbG9yKGNvbG9yLCBvcGFjaXR5LCBjb2xvck1vZGUpIHtcbiAgdmFyIHRoZW1lT3BhY2l0eSA9IGNvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayA/IG9wYWNpdHkgKiAzLjUgOiBvcGFjaXR5ICogMTtcbiAgcmV0dXJuIGNocm9tYShjb2xvcikuYWxwaGEodGhlbWVPcGFjaXR5KS5jc3MoKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IGdldFNoYWRvd0NvbG9yIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuLyoqXG4gKiBldWlTbGlnaHRTaGFkb3dcbiAqL1xuZXhwb3J0IHZhciBldWlTaGFkb3dYU21hbGwgPSBmdW5jdGlvbiBldWlTaGFkb3dYU21hbGwoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWYyLmNvbG9yO1xuXG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAuOHB4IC44cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMi4zcHggMnB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDMsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG4vKipcbiAqIGJvdHRvbVNoYWRvd1NtYWxsXG4gKi9cblxuZXhwb3J0IHZhciBldWlTaGFkb3dTbWFsbCA9IGZ1bmN0aW9uIGV1aVNoYWRvd1NtYWxsKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZjMuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfY29sb3IgPSBfcmVmNC5jb2xvcjtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgLjdweCAxLjRweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAxLjlweCA0cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDQuNXB4IDEwcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbi8qKlxuICogYm90dG9tU2hhZG93TWVkaXVtXG4gKi9cblxuZXhwb3J0IHZhciBldWlTaGFkb3dNZWRpdW0gPSBmdW5jdGlvbiBldWlTaGFkb3dNZWRpdW0oX3JlZjUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjUuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmNS5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWY2ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWY2LmNvbG9yLFxuICAgICAgcHJvcGVydHkgPSBfcmVmNi5wcm9wZXJ0eTtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgdmFyIGFycmF5ID0gW1wiMCAuOXB4IDRweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDgsIGNvbG9yTW9kZSkpLCBcIjAgMi42cHggOHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNiwgY29sb3JNb2RlKSksIFwiMCA1LjdweCAxMnB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSksIFwiMCAxNXB4IDE1cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpKV07XG5cbiAgaWYgKHByb3BlcnR5ID09PSAnZmlsdGVyJykge1xuICAgIHJldHVybiBcImZpbHRlcjogXCIuY29uY2F0KGFycmF5LnJlZHVjZShmdW5jdGlvbiAodiwgaSkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHYsIFwiIGRyb3Atc2hhZG93KFwiKS5jb25jYXQoaSwgXCIpXCIpO1xuICAgIH0sICcnKSwgXCI7XCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcImJveC1zaGFkb3c6IFwiLmNvbmNhdChhcnJheS5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiB2O1xuICAgIH0pLCBcIjtcIik7XG4gIH1cbn07XG4vKipcbiAqIGJvdHRvbVNoYWRvd1xuICovXG5cbmV4cG9ydCB2YXIgZXVpU2hhZG93TGFyZ2UgPSBmdW5jdGlvbiBldWlTaGFkb3dMYXJnZShfcmVmNykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNy5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWY3LmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2NvbG9yID0gX3JlZjguY29sb3I7XG5cbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDFweCA1cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjEsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAzLjZweCAxM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCA4LjRweCAyM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAyM3B4IDM1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbi8qKlxuICogYm90dG9tU2hhZG93TGFyZ2VcbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNoYWRvd1hMYXJnZSA9IGZ1bmN0aW9uIGV1aVNoYWRvd1hMYXJnZShfcmVmOSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmOS5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWY5LmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjEwID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWYxMC5jb2xvcixcbiAgICAgIHJldmVyc2UgPSBfcmVmMTAucmV2ZXJzZTtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgXCIuY29uY2F0KHJldmVyc2UgPyAnLScgOiAnJywgXCIyLjdweCA5cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4xMywgY29sb3JNb2RlKSwgXCIsXFxuICAwIFwiKS5jb25jYXQocmV2ZXJzZSA/ICctJyA6ICcnLCBcIjkuNHB4IDI0cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wOSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIFwiKS5jb25jYXQocmV2ZXJzZSA/ICctJyA6ICcnLCBcIjIxLjhweCA0M3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDgsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG4vKipcbiAqIHNsaWdodFNoYWRvd0hvdmVyXG4gKiBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgb25seSB1c2VkIGJ5IHBhbmVscy9jYXJkcyBpbiB0aGUgQW1zdGVyZGFtIHRoZW1lLCBtb3ZlIHRoZXJlXG4gKi9cblxuZXhwb3J0IHZhciBldWlTbGlnaHRTaGFkb3dIb3ZlciA9IGZ1bmN0aW9uIGV1aVNsaWdodFNoYWRvd0hvdmVyKF9yZWYxMSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMTEuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmMTEuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmMTIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2NvbG9yID0gX3JlZjEyLmNvbG9yO1xuXG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAxcHggNXB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4xLCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMy42cHggMTNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA3LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgOC40cHggMjNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA2LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMjNweCAzNXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVNsaWdodFNoYWRvd0hvdmVyID0gZnVuY3Rpb24gdXNlRXVpU2xpZ2h0U2hhZG93SG92ZXIoY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTbGlnaHRTaGFkb3dIb3ZlcihldWlUaGVtZUNvbnRleHQsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59O1xuLyoqXG4gKiBib3R0b21TaGFkb3dGbGF0XG4gKlxuICogU2ltaWxhciB0byBzaGFkb3cgbWVkaXVtIGJ1dCB3aXRob3V0IHRoZSBib3R0b20gZGVwdGguXG4gKiBVc2VmdWwgZm9yIHBvcG92ZXJzIHRoYXQgZHJvcCBVUCByYXRoZXIgdGhhbiBET1dOLlxuICovXG5cbmV4cG9ydCB2YXIgZXVpU2hhZG93RmxhdCA9IGZ1bmN0aW9uIGV1aVNoYWRvd0ZsYXQoX3JlZjEzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYxMy5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYxMy5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWYxNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfY29sb3IgPSBfcmVmMTQuY29sb3I7XG5cbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDAgLjhweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAwIDJweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMCA1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNCwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDAgMTdweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjAzLCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTaGFkb3dGbGF0ID0gZnVuY3Rpb24gdXNlRXVpU2hhZG93RmxhdChjb2xvcikge1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNoYWRvd0ZsYXQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTtcbmV4cG9ydCB2YXIgZXVpU2hhZG93ID0gZnVuY3Rpb24gZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2wnO1xuXG4gIHZhciBfcmVmMTUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgICAgY29sb3IgPSBfcmVmMTUuY29sb3I7XG5cbiAgc3dpdGNoIChzaXplKSB7XG4gICAgY2FzZSAneHMnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1hTbWFsbChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1NtYWxsKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93TWVkaXVtKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbCc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93TGFyZ2UoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG5cbiAgICBjYXNlICd4bCc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93WExhcmdlKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUud2FybignUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzaXplIG9wdGlvbiB0byB1c2VFdWlTaGFkb3cnKTtcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2hhZG93ID0gZnVuY3Rpb24gdXNlRXVpU2hhZG93KCkge1xuICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ2wnO1xuICB2YXIgY29sb3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCBzaXplLCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY29sb3JcIiwgXCJjbGFzc05hbWVcIiwgXCJocmVmXCIsIFwiZXh0ZXJuYWxcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJ0eXBlXCIsIFwib25DbGlja1wiLCBcImRpc2FibGVkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUxpbmtTdHlsZXMgfSBmcm9tICcuL2xpbmsuc3R5bGVzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENPTE9SUyA9IFsncHJpbWFyeScsICdzdWJkdWVkJywgJ3N1Y2Nlc3MnLCAnYWNjZW50JywgJ2RhbmdlcicsICd3YXJuaW5nJywgJ3RleHQnLCAnZ2hvc3QnXTtcbnZhciBFdWlMaW5rID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwcmltYXJ5JyA6IF9yZWYkY29sb3IsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICBleHRlcm5hbCA9IF9yZWYuZXh0ZXJuYWwsXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgX2Rpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpTGlua1N0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUxpbmtdO1xuICB2YXIgY3NzU2NyZWVuUmVhZGVyVGV4dFN0eWxlcyA9IFtzdHlsZXMuZXVpTGlua19fc2NyZWVuUmVhZGVyVGV4dF07XG4gIHZhciBjc3NFeHRlcm5hbExpbmtJY29uU3R5bGVzID0gW3N0eWxlcy5ldWlMaW5rX19leHRlcm5hbEljb25dO1xuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG5cbiAgdmFyIG5ld1RhcmdldFNjcmVlbnJlYWRlclRleHQgPSBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIHtcbiAgICBjc3M6IGNzc1NjcmVlblJlYWRlclRleHRTdHlsZXNcbiAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpTGluay5uZXdUYXJnZXQuc2NyZWVuUmVhZGVyT25seVRleHRcIixcbiAgICBkZWZhdWx0OiBcIihvcGVucyBpbiBhIG5ldyB0YWIgb3Igd2luZG93KVwiXG4gIH0pKSk7XG5cbiAgdmFyIGV4dGVybmFsTGlua0ljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICBcImFyaWEtbGFiZWxcIjogdXNlRXVpSTE4bignZXVpTGluay5leHRlcm5hbC5hcmlhTGFiZWwnLCAnRXh0ZXJuYWwgbGluaycpLFxuICAgIHNpemU6IFwic1wiLFxuICAgIGNzczogY3NzRXh0ZXJuYWxMaW5rSWNvblN0eWxlcyxcbiAgICB0eXBlOiBcInBvcG91dFwiXG4gIH0pO1xuXG4gIGlmIChocmVmID09PSB1bmRlZmluZWQgfHwgIWlzSHJlZlZhbGlkKSB7XG4gICAgdmFyIGJ1dHRvblByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aUxpbmsnLCBjbGFzc05hbWUpLFxuICAgICAgY3NzOiBbY3NzU3R5bGVzLCBkaXNhYmxlZCA/IFtzdHlsZXMuZGlzYWJsZWRdIDogc3R5bGVzW2NvbG9yXV0sXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICAgIH0sIHJlc3QpO1xuXG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiByZWZcbiAgICB9LCBidXR0b25Qcm9wcyksIGNoaWxkcmVuKTtcbiAgfVxuXG4gIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgIGhyZWY6IGhyZWYsXG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgcmVsOiByZWxcbiAgfSk7XG5cbiAgdmFyIGFuY2hvclByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlMaW5rJywgY2xhc3NOYW1lKSxcbiAgICBjc3M6IFtjc3NTdHlsZXMsIHN0eWxlc1tjb2xvcl1dLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgb25DbGljazogb25DbGlja1xuICB9LCByZXN0KTtcblxuICB2YXIgc2hvd0V4dGVybmFsTGlua0ljb24gPSB0YXJnZXQgPT09ICdfYmxhbmsnICYmIGV4dGVybmFsICE9PSBmYWxzZSB8fCBleHRlcm5hbCA9PT0gdHJ1ZTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZlxuICB9LCBhbmNob3JQcm9wcyksIGNoaWxkcmVuLCBzaG93RXh0ZXJuYWxMaW5rSWNvbiAmJiBleHRlcm5hbExpbmtJY29uLCB0YXJnZXQgPT09ICdfYmxhbmsnICYmIG5ld1RhcmdldFNjcmVlbnJlYWRlclRleHQpO1xufSk7XG5FdWlMaW5rLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwicmVzZXRcIiwgXCJzdWJtaXRcIl0pLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gc2hvdyBhbiBpY29uIGluZGljYXRpbmcgdGhhdCBpdCBpcyBhbiBleHRlcm5hbCBsaW5rO1xuICAgICAqIERlZmF1bHRzIHRvIHRydWUgaWYgYHRhcmdldD1cIl9ibGFua1wiYFxuICAgICAqL1xuICBleHRlcm5hbDogUHJvcFR5cGVzLmJvb2xcbn07XG5FdWlMaW5rLmRpc3BsYXlOYW1lID0gJ0V1aUxpbmsnO1xuZXhwb3J0IHsgRXVpTGluayB9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsaWNrT3V0c2lkZURpc2FibGVzXCIsIFwiZGlzYWJsZWRcIiwgXCJyZXR1cm5Gb2N1c1wiLCBcIm5vSXNvbGF0aW9uXCIsIFwic2Nyb2xsTG9ja1wiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBGb2N1c09uIH0gZnJvbSAncmVhY3QtZm9jdXMtb24nO1xuaW1wb3J0IHsgZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb2N1c1RyYXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZvY3VzVHJhcCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGb2N1c1RyYXApO1xuXG4gIGZ1bmN0aW9uIEV1aUZvY3VzVHJhcCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRm9jdXNUcmFwKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsYXN0SW50ZXJjZXB0ZWRFdmVudFwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmV2ZW50Rm9jdXNFeGl0XCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRJbml0aWFsRm9jdXNcIiwgZnVuY3Rpb24gKGluaXRpYWxGb2N1cykge1xuICAgICAgaWYgKCFpbml0aWFsRm9jdXMpIHJldHVybjtcbiAgICAgIHZhciBub2RlID0gZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYoaW5pdGlhbEZvY3VzKTtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuOyAvLyBgZGF0YS1hdXRvZm9jdXNgIGlzIHBhcnQgb2YgdGhlICdyZWFjdC1mb2N1cy1vbicgQVBJXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWF1dG9mb2N1cycsICd0cnVlJyk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Nb3VzZXVwT3V0c2lkZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXMucmVtb3ZlTW91c2V1cExpc3RlbmVyKCk7IC8vIFRpbWVvdXQgZ2l2ZXMgcHJlY2VkZW5jZSB0byB0aGUgY29uc3VtZXIgdG8gaW5pdGlhdGUgY2xvc2UgaWYgaXQgaGFzIHRvZ2dsZSBiZWhhdmlvci5cbiAgICAgIC8vIE90aGVyd2lzZSB0aGlzIGV2ZW50IG1heSBvY2N1ciBmaXJzdCBhbmQgdGhlIGNvbnN1bWVyIHRvZ2dsZSB3aWxsIHJlb3BlbiB0aGUgZmx5b3V0LlxuXG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25DbGlja091LCBfdGhpcyRwcm9wcztcblxuICAgICAgICByZXR1cm4gKF90aGlzJHByb3BzJG9uQ2xpY2tPdSA9IChfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzKS5vbkNsaWNrT3V0c2lkZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DbGlja091ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkNsaWNrT3UuY2FsbChfdGhpcyRwcm9wcywgZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhZGRNb3VzZXVwTGlzdGVuZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVNb3VzZXVwTGlzdGVuZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVPdXRzaWRlQ2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DbGlja091dHNpZGUgPSBfdGhpcyRwcm9wczIub25DbGlja091dHNpZGUsXG4gICAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXMgPSBfdGhpcyRwcm9wczIuY2xpY2tPdXRzaWRlRGlzYWJsZXMsXG4gICAgICAgICAgY2xvc2VPbk1vdXNldXAgPSBfdGhpcyRwcm9wczIuY2xvc2VPbk1vdXNldXA7XG5cbiAgICAgIGlmIChjbGlja091dHNpZGVEaXNhYmxlcykge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9uQ2xpY2tPdXRzaWRlKSB7XG4gICAgICAgIGNsb3NlT25Nb3VzZXVwID8gX3RoaXMuYWRkTW91c2V1cExpc3RlbmVyKCkgOiBvbkNsaWNrT3V0c2lkZShldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRm9jdXNUcmFwLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbEZvY3VzKHRoaXMucHJvcHMuaW5pdGlhbEZvY3VzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMuZGlzYWJsZWQgPT09IHRydWUgJiYgdGhpcy5wcm9wcy5kaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0JlZW5EaXNhYmxlZEJ5Q2xpY2s6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMucmVtb3ZlTW91c2V1cExpc3RlbmVyKCk7XG4gICAgfSAvLyBQcm9ncmFtbWF0aWNhbGx5IHNldHMgZm9jdXMgb24gYSBuZXN0ZWQgRE9NIG5vZGU7IG9wdGlvbmFsXG5cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXMgPSBfdGhpcyRwcm9wczMuY2xpY2tPdXRzaWRlRGlzYWJsZXMsXG4gICAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wczMuZGlzYWJsZWQsXG4gICAgICAgICAgcmV0dXJuRm9jdXMgPSBfdGhpcyRwcm9wczMucmV0dXJuRm9jdXMsXG4gICAgICAgICAgbm9Jc29sYXRpb24gPSBfdGhpcyRwcm9wczMubm9Jc29sYXRpb24sXG4gICAgICAgICAgc2Nyb2xsTG9jayA9IF90aGlzJHByb3BzMy5zY3JvbGxMb2NrLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IGRpc2FibGVkIHx8IHRoaXMuc3RhdGUuaGFzQmVlbkRpc2FibGVkQnlDbGljaztcblxuICAgICAgdmFyIGZvY3VzT25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyxcbiAgICAgICAgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLFxuICAgICAgICBzY3JvbGxMb2NrOiBzY3JvbGxMb2NrLFxuICAgICAgICBlbmFibGVkOiAhaXNEaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIHt9LCB7XG4gICAgICAgIG9uQ2xpY2tPdXRzaWRlOiB0aGlzLmhhbmRsZU91dHNpZGVDbGlja1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZvY3VzT24sIGZvY3VzT25Qcm9wcywgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGb2N1c1RyYXA7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGb2N1c1RyYXAsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IGZhbHNlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIHJldHVybkZvY3VzOiB0cnVlLFxuICBub0lzb2xhdGlvbjogdHJ1ZSxcbiAgc2Nyb2xsTG9jazogZmFsc2Vcbn0pO1xuXG5FdWlGb2N1c1RyYXAucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogV2hldGhlciBgb25DbGlja091dHNpZGVgIHNob3VsZCBiZSBjYWxsZWQgb24gbW91c2V1cCBpbnN0ZWFkIG9mIG1vdXNlZG93bi5cbiAgICAgKiBUaGlzIGZsYWcgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCBvdXRzaWRlIHRvZ2dsZSBidXR0b25zIGJ5IGRlbGF5aW5nIHRoZSBjbG9zaW5nIGNsaWNrIGNhbGxiYWNrLlxuICAgICAqL1xuICBjbG9zZU9uTW91c2V1cDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ2xpY2tpbmcgb3V0c2lkZSB0aGUgdHJhcCBhcmVhIHdpbGwgZGlzYWJsZSB0aGUgdHJhcFxuICAgICAqL1xuICBjbGlja091dHNpZGVEaXNhYmxlczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIGVsZW1lbnQgdGhhdCB3aWxsIGdldCBmb2N1cyB3aGVuIHRoZSB0cmFwIGlzIGluaXRpYXRlZFxuICAgICAqL1xuICBpbml0aWFsRm9jdXM6IFByb3BUeXBlcy5hbnksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICB0W3BdID0gc1twXTtcbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICB9XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcbiAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XG4gIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xuICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xuICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xuICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcbiAgZG9uZSA9IHRydWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xuICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcbiAgfVxuICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2UsIGlubmVyO1xuICAgIGlmIChhc3luYykge1xuICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgICAgaWYgKGFzeW5jKSBpbm5lciA9IGRpc3Bvc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcbiAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsgdHJ5IHsgaW5uZXIuY2FsbCh0aGlzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IH0gfTtcbiAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xuICB9XG4gIGVsc2UgaWYgKGFzeW5jKSB7XG4gICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgdmFyIHIsIHMgPSAwO1xuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHdoaWxlIChyID0gZW52LnN0YWNrLnBvcCgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXIuYXN5bmMgJiYgcyA9PT0gMSkgcmV0dXJuIHMgPSAwLCBlbnYuc3RhY2sucHVzaChyKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0KTtcbiAgICAgICAgaWYgKHIuZGlzcG9zZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSByLmRpc3Bvc2UuY2FsbChyLnZhbHVlKTtcbiAgICAgICAgICBpZiAoci5hc3luYykgcmV0dXJuIHMgfD0gMiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgcyB8PSAxO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbn07XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZvY3VzT24gYXMgUmVhY3RGb2N1c09uIH0gZnJvbSAnLi9VSSc7XG5pbXBvcnQgU2lkZUNhciBmcm9tICcuL3NpZGVjYXInO1xudmFyIFJlcXVpcmVTaWRlQ2FyID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgX19hc3NpZ24oe30sIHByb3BzKSk7XG59O1xuZXhwb3J0IHZhciBGb2N1c09uID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdEZvY3VzT24sIF9fYXNzaWduKHt9LCBwcm9wcywgeyByZWY6IHJlZiwgc2lkZUNhcjogUmVxdWlyZVNpZGVDYXIgfSkpOyB9KTtcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGwgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsL1VJJztcbmltcG9ydCBSZWFjdEZvY3VzTG9jayBmcm9tICdyZWFjdC1mb2N1cy1sb2NrL1VJJztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBQUkVWRU5UX1NDUk9MTCA9IHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9O1xuZXhwb3J0IHZhciBGb2N1c09uID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHBhcmVudFJlZikge1xuICAgIHZhciBfYSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKSwgbG9ja1Byb3BzID0gX2FbMF0sIHNldExvY2tQcm9wcyA9IF9hWzFdO1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBhdXRvRm9jdXMgPSBwcm9wcy5hdXRvRm9jdXMsIHNoYXJkcyA9IHByb3BzLnNoYXJkcywgY3Jvc3NGcmFtZSA9IHByb3BzLmNyb3NzRnJhbWUsIF9iID0gcHJvcHMuZW5hYmxlZCwgZW5hYmxlZCA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2IsIF9jID0gcHJvcHMuc2Nyb2xsTG9jaywgc2Nyb2xsTG9jayA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2MsIF9kID0gcHJvcHMuZm9jdXNMb2NrLCBmb2N1c0xvY2sgPSBfZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9kLCBfZSA9IHByb3BzLnJldHVybkZvY3VzLCByZXR1cm5Gb2N1cyA9IF9lID09PSB2b2lkIDAgPyB0cnVlIDogX2UsIGluZXJ0ID0gcHJvcHMuaW5lcnQsIGFsbG93UGluY2hab29tID0gcHJvcHMuYWxsb3dQaW5jaFpvb20sIHNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHNob3VsZElnbm9yZSA9IHByb3BzLnNob3VsZElnbm9yZSwgcHJldmVudFNjcm9sbE9uRm9jdXMgPSBwcm9wcy5wcmV2ZW50U2Nyb2xsT25Gb2N1cywgc3R5bGUgPSBwcm9wcy5zdHlsZSwgYXMgPSBwcm9wcy5hcywgZ2FwTW9kZSA9IHByb3BzLmdhcE1vZGUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiYXV0b0ZvY3VzXCIsIFwic2hhcmRzXCIsIFwiY3Jvc3NGcmFtZVwiLCBcImVuYWJsZWRcIiwgXCJzY3JvbGxMb2NrXCIsIFwiZm9jdXNMb2NrXCIsIFwicmV0dXJuRm9jdXNcIiwgXCJpbmVydFwiLCBcImFsbG93UGluY2hab29tXCIsIFwic2lkZUNhclwiLCBcImNsYXNzTmFtZVwiLCBcInNob3VsZElnbm9yZVwiLCBcInByZXZlbnRTY3JvbGxPbkZvY3VzXCIsIFwic3R5bGVcIiwgXCJhc1wiLCBcImdhcE1vZGVcIl0pO1xuICAgIHZhciBTaWRlQ2FyID0gc2lkZUNhcjtcbiAgICB2YXIgb25BY3RpdmF0aW9uID0gbG9ja1Byb3BzLm9uQWN0aXZhdGlvbiwgb25EZWFjdGl2YXRpb24gPSBsb2NrUHJvcHMub25EZWFjdGl2YXRpb24sIHJlc3RQcm9wcyA9IF9fcmVzdChsb2NrUHJvcHMsIFtcIm9uQWN0aXZhdGlvblwiLCBcIm9uRGVhY3RpdmF0aW9uXCJdKTtcbiAgICB2YXIgYXBwbGllZExvY2tQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0UHJvcHMpLCB7IGFzOiBhcyxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaWRlQ2FyOiBzaWRlQ2FyLFxuICAgICAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICAgICAgYWxsb3dQaW5jaFpvb206IGFsbG93UGluY2hab29tLFxuICAgICAgICBnYXBNb2RlOiBnYXBNb2RlLFxuICAgICAgICBpbmVydDogaW5lcnQsIGVuYWJsZWQ6IGVuYWJsZWQgJiYgc2Nyb2xsTG9jayB9KTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3RGb2N1c0xvY2ssIHsgcmVmOiBwYXJlbnRSZWYsIHNpZGVDYXI6IHNpZGVDYXIsIGRpc2FibGVkOiAhKGxvY2tQcm9wcyAmJiBlbmFibGVkICYmIGZvY3VzTG9jayksIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cywgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsIHNoYXJkczogc2hhcmRzLCBjcm9zc0ZyYW1lOiBjcm9zc0ZyYW1lLCBvbkFjdGl2YXRpb246IG9uQWN0aXZhdGlvbiwgb25EZWFjdGl2YXRpb246IG9uRGVhY3RpdmF0aW9uLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgd2hpdGVMaXN0OiBzaG91bGRJZ25vcmUsIGxvY2tQcm9wczogYXBwbGllZExvY2tQcm9wcywgZm9jdXNPcHRpb25zOiBwcmV2ZW50U2Nyb2xsT25Gb2N1cyA/IFBSRVZFTlRfU0NST0xMIDogdW5kZWZpbmVkLCBhczogUmVtb3ZlU2Nyb2xsIH0sIGNoaWxkcmVuKSxcbiAgICAgICAgZW5hYmxlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCBfX2Fzc2lnbih7fSwgcmVzdCwgeyBzaWRlQ2FyOiBlZmZlY3RDYXIsIHNldExvY2tQcm9wczogc2V0TG9ja1Byb3BzLCBzaGFyZHM6IHNoYXJkcyB9KSkpKSk7XG59KTtcbmV4cG9ydCAqIGZyb20gJy4vcmVFeHBvcnRzJztcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmdWxsV2lkdGhDbGFzc05hbWUsIHplcm9SaWdodENsYXNzTmFtZSB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB1c2VNZXJnZVJlZnMgfSBmcm9tICd1c2UtY2FsbGJhY2stcmVmJztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBub3RoaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybjtcbn07XG4vKipcbiAqIFJlbW92ZXMgc2Nyb2xsYmFyIGZyb20gdGhlIHBhZ2UgYW5kIGNvbnRhaW4gdGhlIHNjcm9sbCB3aXRoaW4gdGhlIExvY2tcbiAqL1xudmFyIFJlbW92ZVNjcm9sbCA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCBwYXJlbnRSZWYpIHtcbiAgICB2YXIgcmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAgIHZhciBfYSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICAgICAgb25TY3JvbGxDYXB0dXJlOiBub3RoaW5nLFxuICAgICAgICBvbldoZWVsQ2FwdHVyZTogbm90aGluZyxcbiAgICAgICAgb25Ub3VjaE1vdmVDYXB0dXJlOiBub3RoaW5nLFxuICAgIH0pLCBjYWxsYmFja3MgPSBfYVswXSwgc2V0Q2FsbGJhY2tzID0gX2FbMV07XG4gICAgdmFyIGZvcndhcmRQcm9wcyA9IHByb3BzLmZvcndhcmRQcm9wcywgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCByZW1vdmVTY3JvbGxCYXIgPSBwcm9wcy5yZW1vdmVTY3JvbGxCYXIsIGVuYWJsZWQgPSBwcm9wcy5lbmFibGVkLCBzaGFyZHMgPSBwcm9wcy5zaGFyZHMsIHNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLCBub0lzb2xhdGlvbiA9IHByb3BzLm5vSXNvbGF0aW9uLCBpbmVydCA9IHByb3BzLmluZXJ0LCBhbGxvd1BpbmNoWm9vbSA9IHByb3BzLmFsbG93UGluY2hab29tLCBfYiA9IHByb3BzLmFzLCBDb250YWluZXIgPSBfYiA9PT0gdm9pZCAwID8gJ2RpdicgOiBfYiwgZ2FwTW9kZSA9IHByb3BzLmdhcE1vZGUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImZvcndhcmRQcm9wc1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwicmVtb3ZlU2Nyb2xsQmFyXCIsIFwiZW5hYmxlZFwiLCBcInNoYXJkc1wiLCBcInNpZGVDYXJcIiwgXCJub0lzb2xhdGlvblwiLCBcImluZXJ0XCIsIFwiYWxsb3dQaW5jaFpvb21cIiwgXCJhc1wiLCBcImdhcE1vZGVcIl0pO1xuICAgIHZhciBTaWRlQ2FyID0gc2lkZUNhcjtcbiAgICB2YXIgY29udGFpbmVyUmVmID0gdXNlTWVyZ2VSZWZzKFtyZWYsIHBhcmVudFJlZl0pO1xuICAgIHZhciBjb250YWluZXJQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0KSwgY2FsbGJhY2tzKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIGVuYWJsZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgeyBzaWRlQ2FyOiBlZmZlY3RDYXIsIHJlbW92ZVNjcm9sbEJhcjogcmVtb3ZlU2Nyb2xsQmFyLCBzaGFyZHM6IHNoYXJkcywgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLCBpbmVydDogaW5lcnQsIHNldENhbGxiYWNrczogc2V0Q2FsbGJhY2tzLCBhbGxvd1BpbmNoWm9vbTogISFhbGxvd1BpbmNoWm9vbSwgbG9ja1JlZjogcmVmLCBnYXBNb2RlOiBnYXBNb2RlIH0pKSxcbiAgICAgICAgZm9yd2FyZFByb3BzID8gKFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSwgX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbnRhaW5lclByb3BzKSwgeyByZWY6IGNvbnRhaW5lclJlZiB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyLCBfX2Fzc2lnbih7fSwgY29udGFpbmVyUHJvcHMsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWUsIHJlZjogY29udGFpbmVyUmVmIH0pLCBjaGlsZHJlbikpKSk7XG59KTtcblJlbW92ZVNjcm9sbC5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICByZW1vdmVTY3JvbGxCYXI6IHRydWUsXG4gICAgaW5lcnQ6IGZhbHNlLFxufTtcblJlbW92ZVNjcm9sbC5jbGFzc05hbWVzID0ge1xuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoQ2xhc3NOYW1lLFxuICAgIHplcm9SaWdodDogemVyb1JpZ2h0Q2xhc3NOYW1lLFxufTtcbmV4cG9ydCB7IFJlbW92ZVNjcm9sbCB9O1xuIiwgImV4cG9ydCB2YXIgemVyb1JpZ2h0Q2xhc3NOYW1lID0gJ3JpZ2h0LXNjcm9sbC1iYXItcG9zaXRpb24nO1xuZXhwb3J0IHZhciBmdWxsV2lkdGhDbGFzc05hbWUgPSAnd2lkdGgtYmVmb3JlLXNjcm9sbC1iYXInO1xuZXhwb3J0IHZhciBub1Njcm9sbGJhcnNDbGFzc05hbWUgPSAnd2l0aC1zY3JvbGwtYmFycy1oaWRkZW4nO1xuLyoqXG4gKiBOYW1lIG9mIGEgQ1NTIHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIGFtb3VudCBvZiBcImhpZGRlblwiIHNjcm9sbGJhclxuICogISBtaWdodCBiZSB1bmRlZmluZWQgISB1c2Ugd2lsbCBmYWxsYmFjayFcbiAqL1xuZXhwb3J0IHZhciByZW1vdmVkQmFyU2l6ZVZhcmlhYmxlID0gJy0tcmVtb3ZlZC1ib2R5LXNjcm9sbC1iYXItc2l6ZSc7XG4iLCAiLyoqXG4gKiBBc3NpZ25zIGEgdmFsdWUgZm9yIGEgZ2l2ZW4gcmVmLCBubyBtYXR0ZXIgb2YgdGhlIHJlZiBmb3JtYXRcbiAqIEBwYXJhbSB7UmVmT2JqZWN0fSByZWYgLSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIHJlZiBvYmplY3RcbiAqIEBwYXJhbSB2YWx1ZSAtIGEgbmV3IHZhbHVlXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3VzZS1jYWxsYmFjay1yZWYjYXNzaWducmVmXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmVmT2JqZWN0ID0gdXNlUmVmKCk7XG4gKiBjb25zdCByZWZGbiA9IChyZWYpID0+IHsuLi4ufVxuICpcbiAqIGFzc2lnblJlZihyZWZPYmplY3QsIFwicmVmVmFsdWVcIik7XG4gKiBhc3NpZ25SZWYocmVmRm4sIFwicmVmVmFsdWVcIik7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25SZWYocmVmLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlZih2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJlZikge1xuICAgICAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVmO1xufVxuIiwgImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBjcmVhdGVzIGEgTXV0YWJsZVJlZiB3aXRoIHJlZiBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBpbml0aWFsIHJlZiB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBhIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHZhbHVlIGNoYW5nZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmVmID0gdXNlQ2FsbGJhY2tSZWYoMCwgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4gY29uc29sZS5sb2cob2xkVmFsdWUsICctPicsIG5ld1ZhbHVlKTtcbiAqIHJlZi5jdXJyZW50ID0gMTtcbiAqIC8vIHByaW50cyAwIC0+IDFcbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VyZWZcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI3VzZWNhbGxiYWNrcmVmLS0tdG8tcmVwbGFjZS1yZWFjdHVzZXJlZlxuICogQHJldHVybnMge011dGFibGVSZWZPYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDYWxsYmFja1JlZihpbml0aWFsVmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVN0YXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgICAgIC8vIHZhbHVlXG4gICAgICAgIHZhbHVlOiBpbml0aWFsVmFsdWUsXG4gICAgICAgIC8vIGxhc3QgY2FsbGJhY2tcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICAvLyBcIm1lbW9pemVkXCIgcHVibGljIGludGVyZmFjZVxuICAgICAgICBmYWNhZGU6IHtcbiAgICAgICAgICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWYudmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IGN1cnJlbnQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IHJlZi52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5jYWxsYmFjayh2YWx1ZSwgbGFzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KTsgfSlbMF07XG4gICAgLy8gdXBkYXRlIGNhbGxiYWNrXG4gICAgcmVmLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgcmV0dXJuIHJlZi5mYWNhZGU7XG59XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgYXNzaWduUmVmIH0gZnJvbSAnLi9hc3NpZ25SZWYnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2tSZWYgfSBmcm9tICcuL3VzZVJlZic7XG52YXIgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0O1xudmFyIGN1cnJlbnRWYWx1ZXMgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBNZXJnZXMgdHdvIG9yIG1vcmUgcmVmcyB0b2dldGhlciBwcm92aWRpbmcgYSBzaW5nbGUgaW50ZXJmYWNlIHRvIHNldCB0aGVpciB2YWx1ZVxuICogQHBhcmFtIHtSZWZPYmplY3R8UmVmfSByZWZzXG4gKiBAcmV0dXJucyB7TXV0YWJsZVJlZk9iamVjdH0gLSBhIG5ldyByZWYsIHdoaWNoIHRyYW5zbGF0ZXMgYWxsIGNoYW5nZXMgdG8ge3JlZnN9XG4gKlxuICogQHNlZSB7QGxpbmsgbWVyZ2VSZWZzfSBhIHZlcnNpb24gd2l0aG91dCBidWl0LWluIG1lbW9pemF0aW9uXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvdXNlLWNhbGxiYWNrLXJlZiN1c2VtZXJnZXJlZnNcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBDb21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XG4gKiAgIGNvbnN0IG93blJlZiA9IHVzZVJlZigpO1xuICogICBjb25zdCBkb21SZWYgPSB1c2VNZXJnZVJlZnMoW3JlZiwgb3duUmVmXSk7IC8vIFx1RDgzRFx1REM0OCBtZXJnZSB0b2dldGhlclxuICogICByZXR1cm4gPGRpdiByZWY9e2RvbVJlZn0+Li4uPC9kaXY+XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZXJnZVJlZnMocmVmcywgZGVmYXVsdFZhbHVlKSB7XG4gICAgdmFyIGNhbGxiYWNrUmVmID0gdXNlQ2FsbGJhY2tSZWYoZGVmYXVsdFZhbHVlIHx8IG51bGwsIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICByZXR1cm4gcmVmcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHsgcmV0dXJuIGFzc2lnblJlZihyZWYsIG5ld1ZhbHVlKTsgfSk7XG4gICAgfSk7XG4gICAgLy8gaGFuZGxlIHJlZnMgY2hhbmdlcyAtIGFkZGVkIG9yIHJlbW92ZWRcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gY3VycmVudFZhbHVlcy5nZXQoY2FsbGJhY2tSZWYpO1xuICAgICAgICBpZiAob2xkVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBwcmV2UmVmc18xID0gbmV3IFNldChvbGRWYWx1ZSk7XG4gICAgICAgICAgICB2YXIgbmV4dFJlZnNfMSA9IG5ldyBTZXQocmVmcyk7XG4gICAgICAgICAgICB2YXIgY3VycmVudF8xID0gY2FsbGJhY2tSZWYuY3VycmVudDtcbiAgICAgICAgICAgIHByZXZSZWZzXzEuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0UmVmc18xLmhhcyhyZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblJlZihyZWYsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbmV4dFJlZnNfMS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZSZWZzXzEuaGFzKHJlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduUmVmKHJlZiwgY3VycmVudF8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50VmFsdWVzLnNldChjYWxsYmFja1JlZiwgcmVmcyk7XG4gICAgfSwgW3JlZnNdKTtcbiAgICByZXR1cm4gY2FsbGJhY2tSZWY7XG59XG4iLCAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgIHRbcF0gPSBzW3BdO1xuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgIH1cbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cbiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XG4gICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xuICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XG4gICAgICB9XG4gIH1cbiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xuICBkb25lID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XG4gIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xuICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICB2YXIgciwgcyA9IDA7XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKHIgPSBlbnYuc3RhY2sucG9wKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xuICAgICAgICBpZiAoci5kaXNwb3NlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xuICAgICAgICAgIGlmIChyLmFzeW5jKSByZXR1cm4gcyB8PSAyLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBzIHw9IDE7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxufTtcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuZnVuY3Rpb24gSXRvSShhKSB7XG4gICAgcmV0dXJuIGE7XG59XG5mdW5jdGlvbiBpbm5lckNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSkge1xuICAgIGlmIChtaWRkbGV3YXJlID09PSB2b2lkIDApIHsgbWlkZGxld2FyZSA9IEl0b0k7IH1cbiAgICB2YXIgYnVmZmVyID0gW107XG4gICAgdmFyIGFzc2lnbmVkID0gZmFsc2U7XG4gICAgdmFyIG1lZGl1bSA9IHtcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGFzc2lnbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyOiBjb3VsZCBub3QgYHJlYWRgIGZyb20gYW4gYGFzc2lnbmVkYCBtZWRpdW0uIGByZWFkYCBjb3VsZCBiZSB1c2VkIG9ubHkgd2l0aCBgdXNlTWVkaXVtYC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lZGl1bTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gbWlkZGxld2FyZShkYXRhLCBhc3NpZ25lZCk7XG4gICAgICAgICAgICBidWZmZXIucHVzaChpdGVtKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAhPT0gaXRlbTsgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBhc3NpZ25TeW5jTWVkaXVtOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGFzc2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHdoaWxlIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSB7XG4gICAgICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIGNiKHgpOyB9LFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnVmZmVyOyB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgYXNzaWduTWVkaXVtOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGFzc2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBwZW5kaW5nUXVldWUgPSBbXTtcbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICAgICAgcGVuZGluZ1F1ZXVlID0gYnVmZmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGV4ZWN1dGVRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2JzID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IFtdO1xuICAgICAgICAgICAgICAgIGNicy5mb3JFYWNoKGNiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgY3ljbGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGV4ZWN1dGVRdWV1ZSk7IH07XG4gICAgICAgICAgICBjeWNsZSgpO1xuICAgICAgICAgICAgYnVmZmVyID0ge1xuICAgICAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZS5wdXNoKHgpO1xuICAgICAgICAgICAgICAgICAgICBjeWNsZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IHBlbmRpbmdRdWV1ZS5maWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBtZWRpdW07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVkaXVtKGRlZmF1bHRzLCBtaWRkbGV3YXJlKSB7XG4gICAgaWYgKG1pZGRsZXdhcmUgPT09IHZvaWQgMCkgeyBtaWRkbGV3YXJlID0gSXRvSTsgfVxuICAgIHJldHVybiBpbm5lckNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSk7XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpZGVjYXJNZWRpdW0ob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIG1lZGl1bSA9IGlubmVyQ3JlYXRlTWVkaXVtKG51bGwpO1xuICAgIG1lZGl1bS5vcHRpb25zID0gX19hc3NpZ24oeyBhc3luYzogdHJ1ZSwgc3NyOiBmYWxzZSB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gbWVkaXVtO1xufVxuIiwgImltcG9ydCB7IF9fYXNzaWduLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBTaWRlQ2FyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNpZGVDYXIgPSBfYS5zaWRlQ2FyLCByZXN0ID0gX19yZXN0KF9hLCBbXCJzaWRlQ2FyXCJdKTtcbiAgICBpZiAoIXNpZGVDYXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyOiBwbGVhc2UgcHJvdmlkZSBgc2lkZUNhcmAgcHJvcGVydHkgdG8gaW1wb3J0IHRoZSByaWdodCBjYXInKTtcbiAgICB9XG4gICAgdmFyIFRhcmdldCA9IHNpZGVDYXIucmVhZCgpO1xuICAgIGlmICghVGFyZ2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhciBtZWRpdW0gbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhcmdldCwgX19hc3NpZ24oe30sIHJlc3QpKTtcbn07XG5TaWRlQ2FyLmlzU2lkZUNhckV4cG9ydCA9IHRydWU7XG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0U2lkZWNhcihtZWRpdW0sIGV4cG9ydGVkKSB7XG4gICAgbWVkaXVtLnVzZU1lZGl1bShleHBvcnRlZCk7XG4gICAgcmV0dXJuIFNpZGVDYXI7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lkZWNhck1lZGl1bSB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmV4cG9ydCB2YXIgZWZmZWN0Q2FyID0gY3JlYXRlU2lkZWNhck1lZGl1bSgpO1xuIiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbm9kZSwgYm9vbCwgc3RyaW5nLCBhbnksIGFycmF5T2YsIG9uZU9mVHlwZSwgb2JqZWN0LCBmdW5jIH0gZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnZm9jdXMtbG9jay9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlTWVyZ2VSZWZzIH0gZnJvbSAndXNlLWNhbGxiYWNrLXJlZic7XG5pbXBvcnQgeyBoaWRkZW5HdWFyZCB9IGZyb20gJy4vRm9jdXNHdWFyZCc7XG5pbXBvcnQgeyBtZWRpdW1Gb2N1cywgbWVkaXVtQmx1ciwgbWVkaXVtU2lkZWNhciB9IGZyb20gJy4vbWVkaXVtJztcbmltcG9ydCB7IGZvY3VzU2NvcGUgfSBmcm9tICcuL3Njb3BlJztcbnZhciBlbXB0eUFycmF5ID0gW107XG52YXIgRm9jdXNMb2NrID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9jdXNMb2NrVUkocHJvcHMsIHBhcmVudFJlZikge1xuICB2YXIgX2V4dGVuZHMyO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoKSxcbiAgICByZWFsT2JzZXJ2ZWQgPSBfUmVhY3QkdXNlU3RhdGVbMF0sXG4gICAgc2V0T2JzZXJ2ZWQgPSBfUmVhY3QkdXNlU3RhdGVbMV07XG4gIHZhciBvYnNlcnZlZCA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgaXNBY3RpdmUgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICB2YXIgb3JpZ2luYWxGb2N1c2VkRWxlbWVudCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTIgPSBSZWFjdC51c2VTdGF0ZSh7fSksXG4gICAgdXBkYXRlID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgX3Byb3BzJGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQsXG4gICAgZGlzYWJsZWQgPSBfcHJvcHMkZGlzYWJsZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJGRpc2FibGVkLFxuICAgIF9wcm9wcyRub0ZvY3VzR3VhcmRzID0gcHJvcHMubm9Gb2N1c0d1YXJkcyxcbiAgICBub0ZvY3VzR3VhcmRzID0gX3Byb3BzJG5vRm9jdXNHdWFyZHMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJG5vRm9jdXNHdWFyZHMsXG4gICAgX3Byb3BzJHBlcnNpc3RlbnRGb2N1ID0gcHJvcHMucGVyc2lzdGVudEZvY3VzLFxuICAgIHBlcnNpc3RlbnRGb2N1cyA9IF9wcm9wcyRwZXJzaXN0ZW50Rm9jdSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcHJvcHMkcGVyc2lzdGVudEZvY3UsXG4gICAgX3Byb3BzJGNyb3NzRnJhbWUgPSBwcm9wcy5jcm9zc0ZyYW1lLFxuICAgIGNyb3NzRnJhbWUgPSBfcHJvcHMkY3Jvc3NGcmFtZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRjcm9zc0ZyYW1lLFxuICAgIF9wcm9wcyRhdXRvRm9jdXMgPSBwcm9wcy5hdXRvRm9jdXMsXG4gICAgYXV0b0ZvY3VzID0gX3Byb3BzJGF1dG9Gb2N1cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRhdXRvRm9jdXMsXG4gICAgYWxsb3dUZXh0U2VsZWN0aW9uID0gcHJvcHMuYWxsb3dUZXh0U2VsZWN0aW9uLFxuICAgIGdyb3VwID0gcHJvcHMuZ3JvdXAsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHdoaXRlTGlzdCA9IHByb3BzLndoaXRlTGlzdCxcbiAgICBoYXNQb3NpdGl2ZUluZGljZXMgPSBwcm9wcy5oYXNQb3NpdGl2ZUluZGljZXMsXG4gICAgX3Byb3BzJHNoYXJkcyA9IHByb3BzLnNoYXJkcyxcbiAgICBzaGFyZHMgPSBfcHJvcHMkc2hhcmRzID09PSB2b2lkIDAgPyBlbXB0eUFycmF5IDogX3Byb3BzJHNoYXJkcyxcbiAgICBfcHJvcHMkYXMgPSBwcm9wcy5hcyxcbiAgICBDb250YWluZXIgPSBfcHJvcHMkYXMgPT09IHZvaWQgMCA/ICdkaXYnIDogX3Byb3BzJGFzLFxuICAgIF9wcm9wcyRsb2NrUHJvcHMgPSBwcm9wcy5sb2NrUHJvcHMsXG4gICAgY29udGFpbmVyUHJvcHMgPSBfcHJvcHMkbG9ja1Byb3BzID09PSB2b2lkIDAgPyB7fSA6IF9wcm9wcyRsb2NrUHJvcHMsXG4gICAgU2lkZUNhciA9IHByb3BzLnNpZGVDYXIsXG4gICAgX3Byb3BzJHJldHVybkZvY3VzID0gcHJvcHMucmV0dXJuRm9jdXMsXG4gICAgc2hvdWxkUmV0dXJuRm9jdXMgPSBfcHJvcHMkcmV0dXJuRm9jdXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJHJldHVybkZvY3VzLFxuICAgIGZvY3VzT3B0aW9ucyA9IHByb3BzLmZvY3VzT3B0aW9ucyxcbiAgICBvbkFjdGl2YXRpb25DYWxsYmFjayA9IHByb3BzLm9uQWN0aXZhdGlvbixcbiAgICBvbkRlYWN0aXZhdGlvbkNhbGxiYWNrID0gcHJvcHMub25EZWFjdGl2YXRpb247XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUoe30pLFxuICAgIGlkID0gX1JlYWN0JHVzZVN0YXRlM1swXTtcbiAgdmFyIG9uQWN0aXZhdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIGNhcHR1cmVGb2N1c1Jlc3RvcmUgPSBfcmVmLmNhcHR1cmVGb2N1c1Jlc3RvcmU7XG4gICAgaWYgKCFvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQpIHtcbiAgICAgIHZhciBfZG9jdW1lbnQ7XG4gICAgICB2YXIgYWN0aXZlRWxlbWVudCA9IChfZG9jdW1lbnQgPSBkb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50ID0gYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmIChhY3RpdmVFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCA9IGNhcHR1cmVGb2N1c1Jlc3RvcmUoYWN0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvYnNlcnZlZC5jdXJyZW50ICYmIG9uQWN0aXZhdGlvbkNhbGxiYWNrKSB7XG4gICAgICBvbkFjdGl2YXRpb25DYWxsYmFjayhvYnNlcnZlZC5jdXJyZW50KTtcbiAgICB9XG4gICAgaXNBY3RpdmUuY3VycmVudCA9IHRydWU7XG4gICAgdXBkYXRlKCk7XG4gIH0sIFtvbkFjdGl2YXRpb25DYWxsYmFja10pO1xuICB2YXIgb25EZWFjdGl2YXRpb24gPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaXNBY3RpdmUuY3VycmVudCA9IGZhbHNlO1xuICAgIGlmIChvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKSB7XG4gICAgICBvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKG9ic2VydmVkLmN1cnJlbnQpO1xuICAgIH1cbiAgICB1cGRhdGUoKTtcbiAgfSwgW29uRGVhY3RpdmF0aW9uQ2FsbGJhY2tdKTtcbiAgdmFyIHJldHVybkZvY3VzID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGFsbG93RGVmZXIpIHtcbiAgICB2YXIgZm9jdXNSZXN0b3JlID0gb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50O1xuICAgIGlmIChmb2N1c1Jlc3RvcmUpIHtcbiAgICAgIHZhciByZXR1cm5Gb2N1c1RvID0gKHR5cGVvZiBmb2N1c1Jlc3RvcmUgPT09ICdmdW5jdGlvbicgPyBmb2N1c1Jlc3RvcmUoKSA6IGZvY3VzUmVzdG9yZSkgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgIHZhciBob3dUb1JldHVybkZvY3VzID0gdHlwZW9mIHNob3VsZFJldHVybkZvY3VzID09PSAnZnVuY3Rpb24nID8gc2hvdWxkUmV0dXJuRm9jdXMocmV0dXJuRm9jdXNUbykgOiBzaG91bGRSZXR1cm5Gb2N1cztcbiAgICAgIGlmIChob3dUb1JldHVybkZvY3VzKSB7XG4gICAgICAgIHZhciByZXR1cm5Gb2N1c09wdGlvbnMgPSB0eXBlb2YgaG93VG9SZXR1cm5Gb2N1cyA9PT0gJ29iamVjdCcgPyBob3dUb1JldHVybkZvY3VzIDogdW5kZWZpbmVkO1xuICAgICAgICBvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBpZiAoYWxsb3dEZWZlcikge1xuICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybkZvY3VzVG8uZm9jdXMocmV0dXJuRm9jdXNPcHRpb25zKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm5Gb2N1c1RvLmZvY3VzKHJldHVybkZvY3VzT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzaG91bGRSZXR1cm5Gb2N1c10pO1xuICB2YXIgb25Gb2N1cyA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChpc0FjdGl2ZS5jdXJyZW50KSB7XG4gICAgICBtZWRpdW1Gb2N1cy51c2VNZWRpdW0oZXZlbnQpO1xuICAgIH1cbiAgfSwgW10pO1xuICB2YXIgb25CbHVyID0gbWVkaXVtQmx1ci51c2VNZWRpdW07XG4gIHZhciBzZXRPYnNlcnZlTm9kZSA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdPYnNlcnZlZCkge1xuICAgIGlmIChvYnNlcnZlZC5jdXJyZW50ICE9PSBuZXdPYnNlcnZlZCkge1xuICAgICAgb2JzZXJ2ZWQuY3VycmVudCA9IG5ld09ic2VydmVkO1xuICAgICAgc2V0T2JzZXJ2ZWQobmV3T2JzZXJ2ZWQpO1xuICAgIH1cbiAgfSwgW10pO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgYWxsb3dUZXh0U2VsZWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS53YXJuKCdSZWFjdC1Gb2N1cy1Mb2NrOiBhbGxvd1RleHRTZWxlY3Rpb24gaXMgZGVwcmVjYXRlZCBhbmQgZW5hYmxlZCBieSBkZWZhdWx0Jyk7XG4gICAgfVxuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIW9ic2VydmVkLmN1cnJlbnQgJiYgdHlwZW9mIENvbnRhaW5lciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRm9jdXNMb2NrOiBjb3VsZCBub3Qgb2J0YWluIHJlZiB0byBpbnRlcm5hbCBub2RlJyk7XG4gICAgICB9XG4gICAgfSwgW10pO1xuICB9XG4gIHZhciBsb2NrUHJvcHMgPSBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltjb25zdGFudHMuRk9DVVNfRElTQUJMRURdID0gZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgX2V4dGVuZHMyW2NvbnN0YW50cy5GT0NVU19HUk9VUF0gPSBncm91cCwgX2V4dGVuZHMyKSwgY29udGFpbmVyUHJvcHMpO1xuICB2YXIgaGFzTGVhZGluZ0d1YXJkcyA9IG5vRm9jdXNHdWFyZHMgIT09IHRydWU7XG4gIHZhciBoYXNUYWlsaW5nR3VhcmRzID0gaGFzTGVhZGluZ0d1YXJkcyAmJiBub0ZvY3VzR3VhcmRzICE9PSAndGFpbCc7XG4gIHZhciBtZXJnZWRSZWYgPSB1c2VNZXJnZVJlZnMoW3BhcmVudFJlZiwgc2V0T2JzZXJ2ZU5vZGVdKTtcbiAgdmFyIGZvY3VzU2NvcGVWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvYnNlcnZlZDogb2JzZXJ2ZWQsXG4gICAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICAgIGVuYWJsZWQ6ICFkaXNhYmxlZCxcbiAgICAgIGFjdGl2ZTogaXNBY3RpdmUuY3VycmVudFxuICAgIH07XG4gIH0sIFtkaXNhYmxlZCwgaXNBY3RpdmUuY3VycmVudCwgc2hhcmRzLCByZWFsT2JzZXJ2ZWRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBoYXNMZWFkaW5nR3VhcmRzICYmIFtcbiAgLyojX19QVVJFX18qL1xuICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtZmlyc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IDAsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pLCBoYXNQb3NpdGl2ZUluZGljZXMgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLW5lYXJlc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IDEsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pIDogbnVsbF0sICFkaXNhYmxlZCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCB7XG4gICAgaWQ6IGlkLFxuICAgIHNpZGVDYXI6IG1lZGl1bVNpZGVjYXIsXG4gICAgb2JzZXJ2ZWQ6IHJlYWxPYnNlcnZlZCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgcGVyc2lzdGVudEZvY3VzOiBwZXJzaXN0ZW50Rm9jdXMsXG4gICAgY3Jvc3NGcmFtZTogY3Jvc3NGcmFtZSxcbiAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICB3aGl0ZUxpc3Q6IHdoaXRlTGlzdCxcbiAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICBvbkFjdGl2YXRpb246IG9uQWN0aXZhdGlvbixcbiAgICBvbkRlYWN0aXZhdGlvbjogb25EZWFjdGl2YXRpb24sXG4gICAgcmV0dXJuRm9jdXM6IHJldHVybkZvY3VzLFxuICAgIGZvY3VzT3B0aW9uczogZm9jdXNPcHRpb25zLFxuICAgIG5vRm9jdXNHdWFyZHM6IG5vRm9jdXNHdWFyZHNcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRhaW5lciwgX2V4dGVuZHMoe1xuICAgIHJlZjogbWVyZ2VkUmVmXG4gIH0sIGxvY2tQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIG9uQmx1cjogb25CbHVyLFxuICAgIG9uRm9jdXM6IG9uRm9jdXNcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGZvY3VzU2NvcGUuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogZm9jdXNTY29wZVZhbHVlXG4gIH0sIGNoaWxkcmVuKSksIGhhc1RhaWxpbmdHdWFyZHMgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IC0xIDogMCxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSkpO1xufSk7XG5Gb2N1c0xvY2sucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBjaGlsZHJlbjogbm9kZSxcbiAgZGlzYWJsZWQ6IGJvb2wsXG4gIHJldHVybkZvY3VzOiBvbmVPZlR5cGUoW2Jvb2wsIG9iamVjdCwgZnVuY10pLFxuICBmb2N1c09wdGlvbnM6IG9iamVjdCxcbiAgbm9Gb2N1c0d1YXJkczogYm9vbCxcbiAgaGFzUG9zaXRpdmVJbmRpY2VzOiBib29sLFxuICBhbGxvd1RleHRTZWxlY3Rpb246IGJvb2wsXG4gIGF1dG9Gb2N1czogYm9vbCxcbiAgcGVyc2lzdGVudEZvY3VzOiBib29sLFxuICBjcm9zc0ZyYW1lOiBib29sLFxuICBncm91cDogc3RyaW5nLFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgd2hpdGVMaXN0OiBmdW5jLFxuICBzaGFyZHM6IGFycmF5T2YoYW55KSxcbiAgYXM6IG9uZU9mVHlwZShbc3RyaW5nLCBmdW5jLCBvYmplY3RdKSxcbiAgbG9ja1Byb3BzOiBvYmplY3QsXG4gIG9uQWN0aXZhdGlvbjogZnVuYyxcbiAgb25EZWFjdGl2YXRpb246IGZ1bmMsXG4gIHNpZGVDYXI6IGFueS5pc1JlcXVpcmVkXG59IDoge307XG5leHBvcnQgZGVmYXVsdCBGb2N1c0xvY2s7IiwgIi8qKlxuICogZGVmaW5lcyBhIGZvY3VzIGdyb3VwXG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfR1JPVVAgPSAnZGF0YS1mb2N1cy1sb2NrJztcbi8qKlxuICogZGlzYWJsZXMgZWxlbWVudCBkaXNjb3ZlcnkgaW5zaWRlIGEgZ3JvdXAgbWFya2VkIGJ5IGtleVxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0RJU0FCTEVEID0gJ2RhdGEtZm9jdXMtbG9jay1kaXNhYmxlZCc7XG4vKipcbiAqIGFsbG93cyB1bmNvbnRyb2xsZWQgZm9jdXMgd2l0aGluIHRoZSBtYXJrZWQgYXJlYSwgZWZmZWN0aXZlbHkgZGlzYWJsaW5nIGZvY3VzIGxvY2sgZm9yIGl0J3MgY29udGVudFxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0FMTE9XID0gJ2RhdGEtbm8tZm9jdXMtbG9jayc7XG4vKipcbiAqIGluc3RydWN0cyBhdXRvZm9jdXMgZW5naW5lIHRvIHBpY2sgZGVmYXVsdCBhdXRvZm9jdXMgaW5zaWRlIGEgZ2l2ZW4gbm9kZVxuICogY2FuIGJlIHNldCBvbiB0aGUgZWxlbWVudCBvciBjb250YWluZXJcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19BVVRPID0gJ2RhdGEtYXV0b2ZvY3VzLWluc2lkZSc7XG4vKipcbiAqIGluc3RydWN0cyBhdXRvZm9jdXMgdG8gaWdub3JlIGVsZW1lbnRzIHdpdGhpbiBhIGdpdmVuIG5vZGVcbiAqIGNhbiBiZSBzZXQgb24gdGhlIGVsZW1lbnQgb3IgY29udGFpbmVyXG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfTk9fQVVUT0ZPQ1VTID0gJ2RhdGEtbm8tYXV0b2ZvY3VzJztcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuZXhwb3J0IHZhciBoaWRkZW5HdWFyZCA9IHtcbiAgd2lkdGg6ICcxcHgnLFxuICBoZWlnaHQ6ICcwcHgnLFxuICBwYWRkaW5nOiAwLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHBvc2l0aW9uOiAnZml4ZWQnLFxuICB0b3A6ICcxcHgnLFxuICBsZWZ0OiAnMXB4J1xufTtcbnZhciBJbkZvY3VzR3VhcmQgPSBmdW5jdGlvbiBJbkZvY3VzR3VhcmQoX3JlZikge1xuICB2YXIgX3JlZiRjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2hpbGRyZW4gPSBfcmVmJGNoaWxkcmVuID09PSB2b2lkIDAgPyBudWxsIDogX3JlZiRjaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLWZpcnN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgXCJkYXRhLWZvY3VzLWF1dG8tZ3VhcmRcIjogdHJ1ZSxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSksIGNoaWxkcmVuLCBjaGlsZHJlbiAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLWxhc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICBcImRhdGEtZm9jdXMtYXV0by1ndWFyZFwiOiB0cnVlLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSk7XG59O1xuSW5Gb2N1c0d1YXJkLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59IDoge307XG5leHBvcnQgZGVmYXVsdCBJbkZvY3VzR3VhcmQ7IiwgImltcG9ydCB7IGNyZWF0ZU1lZGl1bSwgY3JlYXRlU2lkZWNhck1lZGl1bSB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmV4cG9ydCB2YXIgbWVkaXVtRm9jdXMgPSBjcmVhdGVNZWRpdW0oe30sIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICBjdXJyZW50VGFyZ2V0ID0gX3JlZi5jdXJyZW50VGFyZ2V0O1xuICByZXR1cm4ge1xuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgfTtcbn0pO1xuZXhwb3J0IHZhciBtZWRpdW1CbHVyID0gY3JlYXRlTWVkaXVtKCk7XG5leHBvcnQgdmFyIG1lZGl1bUVmZmVjdCA9IGNyZWF0ZU1lZGl1bSgpO1xuZXhwb3J0IHZhciBtZWRpdW1TaWRlY2FyID0gY3JlYXRlU2lkZWNhck1lZGl1bSh7XG4gIGFzeW5jOiB0cnVlLFxuICBzc3I6IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbn0pOyIsICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBmb2N1c1Njb3BlID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTsiLCAiZXhwb3J0IGZ1bmN0aW9uIGRlZmVyQWN0aW9uKGFjdGlvbikge1xuICBzZXRUaW1lb3V0KGFjdGlvbiwgMSk7XG59XG5leHBvcnQgdmFyIGlubGluZVByb3AgPSBmdW5jdGlvbiBpbmxpbmVQcm9wKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBvYmogPSB7fTtcbiAgb2JqW25hbWVdID0gdmFsdWU7XG4gIHJldHVybiBvYmo7XG59O1xuZXhwb3J0IHZhciBleHRyYWN0UmVmID0gZnVuY3Rpb24gZXh0cmFjdFJlZihyZWYpIHtcbiAgcmV0dXJuIHJlZiAmJiAnY3VycmVudCcgaW4gcmVmID8gcmVmLmN1cnJlbnQgOiByZWY7XG59OyIsICJpbXBvcnQgRm9jdXNMb2NrVUkgZnJvbSAnLi9Mb2NrJztcbmltcG9ydCBBdXRvRm9jdXNJbnNpZGUgZnJvbSAnLi9BdXRvRm9jdXNJbnNpZGUnO1xuaW1wb3J0IE1vdmVGb2N1c0luc2lkZSwgeyB1c2VGb2N1c0luc2lkZSB9IGZyb20gJy4vTW92ZUZvY3VzSW5zaWRlJztcbmltcG9ydCBGcmVlRm9jdXNJbnNpZGUgZnJvbSAnLi9GcmVlRm9jdXNJbnNpZGUnO1xuaW1wb3J0IEluRm9jdXNHdWFyZCBmcm9tICcuL0ZvY3VzR3VhcmQnO1xuaW1wb3J0IHsgdXNlRm9jdXNDb250cm9sbGVyLCB1c2VGb2N1c1Njb3BlIH0gZnJvbSAnLi91c2UtZm9jdXMtc2NvcGUnO1xuaW1wb3J0IHsgdXNlRm9jdXNTdGF0ZSB9IGZyb20gJy4vdXNlLWZvY3VzLXN0YXRlJztcbmV4cG9ydCB7IEF1dG9Gb2N1c0luc2lkZSwgTW92ZUZvY3VzSW5zaWRlLCBGcmVlRm9jdXNJbnNpZGUsIEluRm9jdXNHdWFyZCwgRm9jdXNMb2NrVUksIHVzZUZvY3VzSW5zaWRlLCB1c2VGb2N1c0NvbnRyb2xsZXIsIHVzZUZvY3VzU2NvcGUsIHVzZUZvY3VzU3RhdGUgfTtcbmV4cG9ydCBkZWZhdWx0IEZvY3VzTG9ja1VJOyIsICJpbXBvcnQgeyBjcmVhdGVTaWRlY2FyTWVkaXVtIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuZXhwb3J0IHZhciBlZmZlY3RDYXIgPSBjcmVhdGVTaWRlY2FyTWVkaXVtKCk7XG5leHBvcnQgdmFyIGZvY3VzSGlkZGVuTWFya2VyID0gJ2RhdGEtZm9jdXMtb24taGlkZGVuJztcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHdpdGhTaWRlRWZmZWN0IGZyb20gJ3JlYWN0LWNsaWVudHNpZGUtZWZmZWN0JztcbmltcG9ydCB7IG1vdmVGb2N1c0luc2lkZSwgZm9jdXNJbnNpZGUsIGZvY3VzSXNIaWRkZW4sIGV4cGFuZEZvY3VzYWJsZU5vZGVzLCBnZXRGb2N1c2FibGVOb2RlcywgZm9jdXNOZXh0RWxlbWVudCwgZm9jdXNQcmV2RWxlbWVudCwgZm9jdXNGaXJzdEVsZW1lbnQsIGZvY3VzTGFzdEVsZW1lbnQsIGNhcHR1cmVGb2N1c1Jlc3RvcmUgfSBmcm9tICdmb2N1cy1sb2NrJztcbmltcG9ydCB7IGRlZmVyQWN0aW9uLCBleHRyYWN0UmVmIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IG1lZGl1bUZvY3VzLCBtZWRpdW1CbHVyLCBtZWRpdW1FZmZlY3QgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgZm9jdXNPbkJvZHkgPSBmdW5jdGlvbiBmb2N1c09uQm9keSgpIHtcbiAgcmV0dXJuIGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHk7XG59O1xudmFyIGlzRnJlZUZvY3VzID0gZnVuY3Rpb24gaXNGcmVlRm9jdXMoKSB7XG4gIHJldHVybiBmb2N1c09uQm9keSgpIHx8IGZvY3VzSXNIaWRkZW4oKTtcbn07XG52YXIgbGFzdEFjdGl2ZVRyYXAgPSBudWxsO1xudmFyIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG52YXIgdHJ5UmVzdG9yZUZvY3VzID0gZnVuY3Rpb24gdHJ5UmVzdG9yZUZvY3VzKCkge1xuICByZXR1cm4gbnVsbDtcbn07XG52YXIgbGFzdFBvcnRhbGVkRWxlbWVudCA9IG51bGw7XG52YXIgZm9jdXNXYXNPdXRzaWRlV2luZG93ID0gZmFsc2U7XG52YXIgd2luZG93Rm9jdXNlZCA9IGZhbHNlO1xudmFyIGRlZmF1bHRXaGl0ZWxpc3QgPSBmdW5jdGlvbiBkZWZhdWx0V2hpdGVsaXN0KCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgZm9jdXNXaGl0ZWxpc3RlZCA9IGZ1bmN0aW9uIGZvY3VzV2hpdGVsaXN0ZWQoYWN0aXZlRWxlbWVudCkge1xuICByZXR1cm4gKGxhc3RBY3RpdmVUcmFwLndoaXRlTGlzdCB8fCBkZWZhdWx0V2hpdGVsaXN0KShhY3RpdmVFbGVtZW50KTtcbn07XG52YXIgcmVjb3JkUG9ydGFsID0gZnVuY3Rpb24gcmVjb3JkUG9ydGFsKG9ic2VydmVyTm9kZSwgcG9ydGFsZWRFbGVtZW50KSB7XG4gIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSB7XG4gICAgb2JzZXJ2ZXJOb2RlOiBvYnNlcnZlck5vZGUsXG4gICAgcG9ydGFsZWRFbGVtZW50OiBwb3J0YWxlZEVsZW1lbnRcbiAgfTtcbn07XG52YXIgZm9jdXNJc1BvcnRhbGVkUGFpciA9IGZ1bmN0aW9uIGZvY3VzSXNQb3J0YWxlZFBhaXIoZWxlbWVudCkge1xuICByZXR1cm4gbGFzdFBvcnRhbGVkRWxlbWVudCAmJiBsYXN0UG9ydGFsZWRFbGVtZW50LnBvcnRhbGVkRWxlbWVudCA9PT0gZWxlbWVudDtcbn07XG5mdW5jdGlvbiBhdXRvR3VhcmQoc3RhcnRJbmRleCwgZW5kLCBzdGVwLCBhbGxOb2Rlcykge1xuICB2YXIgbGFzdEd1YXJkID0gbnVsbDtcbiAgdmFyIGkgPSBzdGFydEluZGV4O1xuICBkbyB7XG4gICAgdmFyIGl0ZW0gPSBhbGxOb2Rlc1tpXTtcbiAgICBpZiAoaXRlbS5ndWFyZCkge1xuICAgICAgaWYgKGl0ZW0ubm9kZS5kYXRhc2V0LmZvY3VzQXV0b0d1YXJkKSB7XG4gICAgICAgIGxhc3RHdWFyZCA9IGl0ZW07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpdGVtLmxvY2tJdGVtKSB7XG4gICAgICBpZiAoaSAhPT0gc3RhcnRJbmRleCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXN0R3VhcmQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gd2hpbGUgKChpICs9IHN0ZXApICE9PSBlbmQpO1xuICBpZiAobGFzdEd1YXJkKSB7XG4gICAgbGFzdEd1YXJkLm5vZGUudGFiSW5kZXggPSAwO1xuICB9XG59XG52YXIgZm9jdXNXYXNPdXRzaWRlID0gZnVuY3Rpb24gZm9jdXNXYXNPdXRzaWRlKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgaWYgKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgICByZXR1cm4gQm9vbGVhbihmb2N1c1dhc091dHNpZGVXaW5kb3cpO1xuICB9XG4gIHJldHVybiBmb2N1c1dhc091dHNpZGVXaW5kb3cgPT09ICdtZWFud2hpbGUnO1xufTtcbnZhciBjaGVja0luSG9zdCA9IGZ1bmN0aW9uIGNoZWNrSW5Ib3N0KGNoZWNrLCBlbCwgYm91bmRhcnkpIHtcbiAgcmV0dXJuIGVsICYmIChlbC5ob3N0ID09PSBjaGVjayAmJiAoIWVsLmFjdGl2ZUVsZW1lbnQgfHwgYm91bmRhcnkuY29udGFpbnMoZWwuYWN0aXZlRWxlbWVudCkpIHx8IGVsLnBhcmVudE5vZGUgJiYgY2hlY2tJbkhvc3QoY2hlY2ssIGVsLnBhcmVudE5vZGUsIGJvdW5kYXJ5KSk7XG59O1xudmFyIHdpdGhpbkhvc3QgPSBmdW5jdGlvbiB3aXRoaW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdBcmVhKSB7XG4gIHJldHVybiB3b3JraW5nQXJlYS5zb21lKGZ1bmN0aW9uIChhcmVhKSB7XG4gICAgcmV0dXJuIGNoZWNrSW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIGFyZWEsIGFyZWEpO1xuICB9KTtcbn07XG52YXIgZ2V0Tm9kZUZvY3VzYWJsZXMgPSBmdW5jdGlvbiBnZXROb2RlRm9jdXNhYmxlcyhub2Rlcykge1xuICByZXR1cm4gZ2V0Rm9jdXNhYmxlTm9kZXMobm9kZXMsIG5ldyBNYXAoKSk7XG59O1xudmFyIGlzTm90Rm9jdXNhYmxlID0gZnVuY3Rpb24gaXNOb3RGb2N1c2FibGUobm9kZSkge1xuICByZXR1cm4gIWdldE5vZGVGb2N1c2FibGVzKFtub2RlLnBhcmVudE5vZGVdKS5zb21lKGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBlbC5ub2RlID09PSBub2RlO1xuICB9KTtcbn07XG52YXIgYWN0aXZhdGVUcmFwID0gZnVuY3Rpb24gYWN0aXZhdGVUcmFwKCkge1xuICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gIGlmIChsYXN0QWN0aXZlVHJhcCkge1xuICAgIHZhciBfbGFzdEFjdGl2ZVRyYXAgPSBsYXN0QWN0aXZlVHJhcCxcbiAgICAgIG9ic2VydmVkID0gX2xhc3RBY3RpdmVUcmFwLm9ic2VydmVkLFxuICAgICAgcGVyc2lzdGVudEZvY3VzID0gX2xhc3RBY3RpdmVUcmFwLnBlcnNpc3RlbnRGb2N1cyxcbiAgICAgIGF1dG9Gb2N1cyA9IF9sYXN0QWN0aXZlVHJhcC5hdXRvRm9jdXMsXG4gICAgICBzaGFyZHMgPSBfbGFzdEFjdGl2ZVRyYXAuc2hhcmRzLFxuICAgICAgY3Jvc3NGcmFtZSA9IF9sYXN0QWN0aXZlVHJhcC5jcm9zc0ZyYW1lLFxuICAgICAgZm9jdXNPcHRpb25zID0gX2xhc3RBY3RpdmVUcmFwLmZvY3VzT3B0aW9ucyxcbiAgICAgIG5vRm9jdXNHdWFyZHMgPSBfbGFzdEFjdGl2ZVRyYXAubm9Gb2N1c0d1YXJkcztcbiAgICB2YXIgd29ya2luZ05vZGUgPSBvYnNlcnZlZCB8fCBsYXN0UG9ydGFsZWRFbGVtZW50ICYmIGxhc3RQb3J0YWxlZEVsZW1lbnQucG9ydGFsZWRFbGVtZW50O1xuICAgIGlmIChmb2N1c09uQm9keSgpICYmIGxhc3RBY3RpdmVGb2N1cykge1xuICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGxhc3RBY3RpdmVGb2N1cykgfHwgaXNOb3RGb2N1c2FibGUobGFzdEFjdGl2ZUZvY3VzKSkge1xuICAgICAgICBsYXN0QWN0aXZlRm9jdXMgPSBudWxsO1xuICAgICAgICB2YXIgbmV3VGFyZ2V0ID0gdHJ5UmVzdG9yZUZvY3VzKCk7XG4gICAgICAgIGlmIChuZXdUYXJnZXQpIHtcbiAgICAgICAgICBuZXdUYXJnZXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKHdvcmtpbmdOb2RlKSB7XG4gICAgICB2YXIgd29ya2luZ0FyZWEgPSBbd29ya2luZ05vZGVdLmNvbmNhdChzaGFyZHMubWFwKGV4dHJhY3RSZWYpLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICB2YXIgc2hvdWxkRm9yY2VSZXN0b3JlRm9jdXMgPSBmdW5jdGlvbiBzaG91bGRGb3JjZVJlc3RvcmVGb2N1cygpIHtcbiAgICAgICAgaWYgKCFmb2N1c1dhc091dHNpZGUoY3Jvc3NGcmFtZSkgfHwgIW5vRm9jdXNHdWFyZHMgfHwgIWxhc3RBY3RpdmVGb2N1cyB8fCB3aW5kb3dGb2N1c2VkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBub2RlcyA9IGdldE5vZGVGb2N1c2FibGVzKHdvcmtpbmdBcmVhKTtcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IG5vZGVzLmZpbmRJbmRleChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgIHZhciBub2RlID0gX3JlZi5ub2RlO1xuICAgICAgICAgIHJldHVybiBub2RlID09PSBsYXN0QWN0aXZlRm9jdXM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbGFzdEluZGV4ID09PSAwIHx8IGxhc3RJbmRleCA9PT0gbm9kZXMubGVuZ3RoIC0gMTtcbiAgICAgIH07XG4gICAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgZm9jdXNXaGl0ZWxpc3RlZChhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBpZiAocGVyc2lzdGVudEZvY3VzIHx8IHNob3VsZEZvcmNlUmVzdG9yZUZvY3VzKCkgfHwgIWlzRnJlZUZvY3VzKCkgfHwgIWxhc3RBY3RpdmVGb2N1cyAmJiBhdXRvRm9jdXMpIHtcbiAgICAgICAgICBpZiAod29ya2luZ05vZGUgJiYgIShmb2N1c0luc2lkZSh3b3JraW5nQXJlYSkgfHwgYWN0aXZlRWxlbWVudCAmJiB3aXRoaW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdBcmVhKSB8fCBmb2N1c0lzUG9ydGFsZWRQYWlyKGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdOb2RlKSkpIHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudCAmJiAhbGFzdEFjdGl2ZUZvY3VzICYmIGFjdGl2ZUVsZW1lbnQgJiYgIWF1dG9Gb2N1cykge1xuICAgICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudC5ibHVyKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdWx0ID0gbW92ZUZvY3VzSW5zaWRlKHdvcmtpbmdBcmVhLCBsYXN0QWN0aXZlRm9jdXMsIHtcbiAgICAgICAgICAgICAgICBmb2N1c09wdGlvbnM6IGZvY3VzT3B0aW9uc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgbGFzdFBvcnRhbGVkRWxlbWVudCA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb2N1c1dhc091dHNpZGVXaW5kb3cgPSBmYWxzZTtcbiAgICAgICAgICBsYXN0QWN0aXZlRm9jdXMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgIHRyeVJlc3RvcmVGb2N1cyA9IGNhcHR1cmVGb2N1c1Jlc3RvcmUobGFzdEFjdGl2ZUZvY3VzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRvY3VtZW50ICYmIGFjdGl2ZUVsZW1lbnQgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZm9jdXMtYXV0by1ndWFyZF0nKSkge1xuICAgICAgICB2YXIgbmV3QWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHZhciBhbGxOb2RlcyA9IGV4cGFuZEZvY3VzYWJsZU5vZGVzKHdvcmtpbmdBcmVhKTtcbiAgICAgICAgdmFyIGZvY3VzZWRJbmRleCA9IGFsbE5vZGVzLm1hcChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IF9yZWYyLm5vZGU7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0pLmluZGV4T2YobmV3QWN0aXZlRWxlbWVudCk7XG4gICAgICAgIGlmIChmb2N1c2VkSW5kZXggPiAtMSkge1xuICAgICAgICAgIGFsbE5vZGVzLmZpbHRlcihmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgICAgIHZhciBndWFyZCA9IF9yZWYzLmd1YXJkLFxuICAgICAgICAgICAgICBub2RlID0gX3JlZjMubm9kZTtcbiAgICAgICAgICAgIHJldHVybiBndWFyZCAmJiBub2RlLmRhdGFzZXQuZm9jdXNBdXRvR3VhcmQ7XG4gICAgICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gX3JlZjQubm9kZTtcbiAgICAgICAgICAgIHJldHVybiBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndGFiSW5kZXgnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhdXRvR3VhcmQoZm9jdXNlZEluZGV4LCBhbGxOb2Rlcy5sZW5ndGgsICsxLCBhbGxOb2Rlcyk7XG4gICAgICAgICAgYXV0b0d1YXJkKGZvY3VzZWRJbmRleCwgLTEsIC0xLCBhbGxOb2Rlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgb25UcmFwID0gZnVuY3Rpb24gb25UcmFwKGV2ZW50KSB7XG4gIGlmIChhY3RpdmF0ZVRyYXAoKSAmJiBldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn07XG52YXIgb25CbHVyID0gZnVuY3Rpb24gb25CbHVyKCkge1xuICByZXR1cm4gZGVmZXJBY3Rpb24oYWN0aXZhdGVUcmFwKTtcbn07XG52YXIgb25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoZXZlbnQpIHtcbiAgdmFyIHNvdXJjZSA9IGV2ZW50LnRhcmdldDtcbiAgdmFyIGN1cnJlbnROb2RlID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgaWYgKCFjdXJyZW50Tm9kZS5jb250YWlucyhzb3VyY2UpKSB7XG4gICAgcmVjb3JkUG9ydGFsKGN1cnJlbnROb2RlLCBzb3VyY2UpO1xuICB9XG59O1xudmFyIEZvY3VzV2F0Y2hlciA9IGZ1bmN0aW9uIEZvY3VzV2F0Y2hlcigpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xudmFyIEZvY3VzVHJhcCA9IGZ1bmN0aW9uIEZvY3VzVHJhcChfcmVmNSkge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmNS5jaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBvbkZvY3VzOiBvbkZvY3VzXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5Gb2N1c1RyYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZFxufSA6IHt9O1xudmFyIG9uV2luZG93Rm9jdXMgPSBmdW5jdGlvbiBvbldpbmRvd0ZvY3VzKCkge1xuICB3aW5kb3dGb2N1c2VkID0gdHJ1ZTtcbn07XG52YXIgb25XaW5kb3dCbHVyID0gZnVuY3Rpb24gb25XaW5kb3dCbHVyKCkge1xuICB3aW5kb3dGb2N1c2VkID0gZmFsc2U7XG4gIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdqdXN0JztcbiAgZGVmZXJBY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdtZWFud2hpbGUnO1xuICB9KTtcbn07XG52YXIgYXR0YWNoSGFuZGxlciA9IGZ1bmN0aW9uIGF0dGFjaEhhbmRsZXIoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBvblRyYXApO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIG9uQmx1cik7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIG9uV2luZG93Rm9jdXMpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uV2luZG93Qmx1cik7XG59O1xudmFyIGRldGFjaEhhbmRsZXIgPSBmdW5jdGlvbiBkZXRhY2hIYW5kbGVyKCkge1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgb25UcmFwKTtcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBvbkJsdXIpO1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbldpbmRvd0ZvY3VzKTtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbldpbmRvd0JsdXIpO1xufTtcbmZ1bmN0aW9uIHJlZHVjZVByb3BzVG9TdGF0ZShwcm9wc0xpc3QpIHtcbiAgcmV0dXJuIHByb3BzTGlzdC5maWx0ZXIoZnVuY3Rpb24gKF9yZWY2KSB7XG4gICAgdmFyIGRpc2FibGVkID0gX3JlZjYuZGlzYWJsZWQ7XG4gICAgcmV0dXJuICFkaXNhYmxlZDtcbiAgfSk7XG59XG52YXIgZm9jdXNMb2NrQVBJID0ge1xuICBtb3ZlRm9jdXNJbnNpZGU6IG1vdmVGb2N1c0luc2lkZSxcbiAgZm9jdXNJbnNpZGU6IGZvY3VzSW5zaWRlLFxuICBmb2N1c05leHRFbGVtZW50OiBmb2N1c05leHRFbGVtZW50LFxuICBmb2N1c1ByZXZFbGVtZW50OiBmb2N1c1ByZXZFbGVtZW50LFxuICBmb2N1c0ZpcnN0RWxlbWVudDogZm9jdXNGaXJzdEVsZW1lbnQsXG4gIGZvY3VzTGFzdEVsZW1lbnQ6IGZvY3VzTGFzdEVsZW1lbnQsXG4gIGNhcHR1cmVGb2N1c1Jlc3RvcmU6IGNhcHR1cmVGb2N1c1Jlc3RvcmVcbn07XG5mdW5jdGlvbiBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KHRyYXBzKSB7XG4gIHZhciB0cmFwID0gdHJhcHMuc2xpY2UoLTEpWzBdO1xuICBpZiAodHJhcCAmJiAhbGFzdEFjdGl2ZVRyYXApIHtcbiAgICBhdHRhY2hIYW5kbGVyKCk7XG4gIH1cbiAgdmFyIGxhc3RUcmFwID0gbGFzdEFjdGl2ZVRyYXA7XG4gIHZhciBzYW1lVHJhcCA9IGxhc3RUcmFwICYmIHRyYXAgJiYgdHJhcC5pZCA9PT0gbGFzdFRyYXAuaWQ7XG4gIGxhc3RBY3RpdmVUcmFwID0gdHJhcDtcbiAgaWYgKGxhc3RUcmFwICYmICFzYW1lVHJhcCkge1xuICAgIGxhc3RUcmFwLm9uRGVhY3RpdmF0aW9uKCk7XG4gICAgaWYgKCF0cmFwcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWY3KSB7XG4gICAgICB2YXIgaWQgPSBfcmVmNy5pZDtcbiAgICAgIHJldHVybiBpZCA9PT0gbGFzdFRyYXAuaWQ7XG4gICAgfSkubGVuZ3RoKSB7XG4gICAgICBsYXN0VHJhcC5yZXR1cm5Gb2N1cyghdHJhcCk7XG4gICAgfVxuICB9XG4gIGlmICh0cmFwKSB7XG4gICAgbGFzdEFjdGl2ZUZvY3VzID0gbnVsbDtcbiAgICBpZiAoIXNhbWVUcmFwIHx8IGxhc3RUcmFwLm9ic2VydmVkICE9PSB0cmFwLm9ic2VydmVkKSB7XG4gICAgICB0cmFwLm9uQWN0aXZhdGlvbihmb2N1c0xvY2tBUEkpO1xuICAgIH1cbiAgICBhY3RpdmF0ZVRyYXAodHJ1ZSk7XG4gICAgZGVmZXJBY3Rpb24oYWN0aXZhdGVUcmFwKTtcbiAgfSBlbHNlIHtcbiAgICBkZXRhY2hIYW5kbGVyKCk7XG4gICAgbGFzdEFjdGl2ZUZvY3VzID0gbnVsbDtcbiAgfVxufVxubWVkaXVtRm9jdXMuYXNzaWduU3luY01lZGl1bShvbkZvY3VzKTtcbm1lZGl1bUJsdXIuYXNzaWduTWVkaXVtKG9uQmx1cik7XG5tZWRpdW1FZmZlY3QuYXNzaWduTWVkaXVtKGZ1bmN0aW9uIChjYikge1xuICByZXR1cm4gY2IoZm9jdXNMb2NrQVBJKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgd2l0aFNpZGVFZmZlY3QocmVkdWNlUHJvcHNUb1N0YXRlLCBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KShGb2N1c1dhdGNoZXIpOyIsICJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkge1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX3NldFByb3RvdHlwZU9mIGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZSh0LCBvKSB7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdCwgc2V0UHJvdG90eXBlT2YodCwgbyk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHNMb29zZSBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxuZXhwb3J0IHsgdG9QcmltaXRpdmUgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlJztcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIHdpdGhTaWRlRWZmZWN0KHJlZHVjZVByb3BzVG9TdGF0ZSwgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKHR5cGVvZiByZWR1Y2VQcm9wc1RvU3RhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcmVkdWNlUHJvcHNUb1N0YXRlIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShXcmFwcGVkQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoV3JhcHBlZENvbXBvbmVudCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlb2YgV3JhcHBlZENvbXBvbmVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFdyYXBwZWRDb21wb25lbnQgdG8gYmUgYSBSZWFjdCBjb21wb25lbnQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1vdW50ZWRJbnN0YW5jZXMgPSBbXTtcbiAgICB2YXIgc3RhdGU7XG5cbiAgICBmdW5jdGlvbiBlbWl0Q2hhbmdlKCkge1xuICAgICAgc3RhdGUgPSByZWR1Y2VQcm9wc1RvU3RhdGUobW91bnRlZEluc3RhbmNlcy5tYXAoZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5wcm9wcztcbiAgICAgIH0pKTtcbiAgICAgIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQoc3RhdGUpO1xuICAgIH1cblxuICAgIHZhciBTaWRlRWZmZWN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgICAgX2luaGVyaXRzTG9vc2UoU2lkZUVmZmVjdCwgX1B1cmVDb21wb25lbnQpO1xuXG4gICAgICBmdW5jdGlvbiBTaWRlRWZmZWN0KCkge1xuICAgICAgICByZXR1cm4gX1B1cmVDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgdG8gdXNlIGRpc3BsYXlOYW1lIG9mIHdyYXBwZWQgY29tcG9uZW50XG4gICAgICBTaWRlRWZmZWN0LnBlZWsgPSBmdW5jdGlvbiBwZWVrKCkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9O1xuXG4gICAgICB2YXIgX3Byb3RvID0gU2lkZUVmZmVjdC5wcm90b3R5cGU7XG5cbiAgICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBtb3VudGVkSW5zdGFuY2VzLnB1c2godGhpcyk7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB2YXIgaW5kZXggPSBtb3VudGVkSW5zdGFuY2VzLmluZGV4T2YodGhpcyk7XG4gICAgICAgIG1vdW50ZWRJbnN0YW5jZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgZW1pdENoYW5nZSgpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIHRoaXMucHJvcHMpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFNpZGVFZmZlY3Q7XG4gICAgfShQdXJlQ29tcG9uZW50KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShTaWRlRWZmZWN0LCBcImRpc3BsYXlOYW1lXCIsIFwiU2lkZUVmZmVjdChcIiArIGdldERpc3BsYXlOYW1lKFdyYXBwZWRDb21wb25lbnQpICsgXCIpXCIpO1xuXG4gICAgcmV0dXJuIFNpZGVFZmZlY3Q7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTaWRlRWZmZWN0O1xuIiwgIi8qXG5JRTExIHN1cHBvcnRcbiAqL1xuZXhwb3J0IHZhciB0b0FycmF5ID0gZnVuY3Rpb24gKGEpIHtcbiAgICB2YXIgcmV0ID0gQXJyYXkoYS5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkge1xuICAgICAgICByZXRbaV0gPSBhW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufTtcbmV4cG9ydCB2YXIgYXNBcnJheSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAoQXJyYXkuaXNBcnJheShhKSA/IGEgOiBbYV0pOyB9O1xuZXhwb3J0IHZhciBnZXRGaXJzdCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAoQXJyYXkuaXNBcnJheShhKSA/IGFbMF0gOiBhKTsgfTtcbiIsICJpbXBvcnQgeyBGT0NVU19OT19BVVRPRk9DVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xudmFyIGlzRWxlbWVudEhpZGRlbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gd2UgY2FuIG1lYXN1cmUgb25seSBcImVsZW1lbnRzXCJcbiAgICAvLyBjb25zaWRlciBvdGhlcnMgYXMgXCJ2aXNpYmxlXCJcbiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpO1xuICAgIGlmICghY29tcHV0ZWRTdHlsZSB8fCAhY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnIHx8IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAnaGlkZGVuJyk7XG59O1xudmFyIGdldFBhcmVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgY2FuIGFsc28gcG9pbnQgb24gU2hhZG93Um9vdC4gSW4gdGhpcyBjYXNlIC5ob3N0IHdpbGwgcG9pbnQgb24gdGhlIG5leHQgbm9kZVxuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcbiAgICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLmhvc3RcbiAgICAgICAgOiBub2RlLnBhcmVudE5vZGU7XG59O1xudmFyIGlzVG9wTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBub2RlID09PSBkb2N1bWVudCB8fCAobm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpO1xufTtcbnZhciBpc0luZXJ0ID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuaGFzQXR0cmlidXRlKCdpbmVydCcpOyB9O1xuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvamVzdC1kb20vYmxvYi9tYWluL3NyYy90by1iZS12aXNpYmxlLmpzXG4gKi9cbnZhciBpc1Zpc2libGVVbmNhY2hlZCA9IGZ1bmN0aW9uIChub2RlLCBjaGVja1BhcmVudCkge1xuICAgIHJldHVybiAhbm9kZSB8fCBpc1RvcE5vZGUobm9kZSkgfHwgKCFpc0VsZW1lbnRIaWRkZW4obm9kZSkgJiYgIWlzSW5lcnQobm9kZSkgJiYgY2hlY2tQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSkpO1xufTtcbmV4cG9ydCB2YXIgaXNWaXNpYmxlQ2FjaGVkID0gZnVuY3Rpb24gKHZpc2liaWxpdHlDYWNoZSwgbm9kZSkge1xuICAgIHZhciBjYWNoZWQgPSB2aXNpYmlsaXR5Q2FjaGUuZ2V0KG5vZGUpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gaXNWaXNpYmxlVW5jYWNoZWQobm9kZSwgaXNWaXNpYmxlQ2FjaGVkLmJpbmQodW5kZWZpbmVkLCB2aXNpYmlsaXR5Q2FjaGUpKTtcbiAgICB2aXNpYmlsaXR5Q2FjaGUuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgaXNBdXRvRm9jdXNBbGxvd2VkVW5jYWNoZWQgPSBmdW5jdGlvbiAobm9kZSwgY2hlY2tQYXJlbnQpIHtcbiAgICByZXR1cm4gbm9kZSAmJiAhaXNUb3BOb2RlKG5vZGUpID8gKGlzQXV0b0ZvY3VzQWxsb3dlZChub2RlKSA/IGNoZWNrUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpIDogZmFsc2UpIDogdHJ1ZTtcbn07XG5leHBvcnQgdmFyIGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZCA9IGZ1bmN0aW9uIChjYWNoZSwgbm9kZSkge1xuICAgIHZhciBjYWNoZWQgPSBjYWNoZS5nZXQobm9kZSk7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBpc0F1dG9Gb2N1c0FsbG93ZWRVbmNhY2hlZChub2RlLCBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQuYmluZCh1bmRlZmluZWQsIGNhY2hlKSk7XG4gICAgY2FjaGUuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgdmFyIGdldERhdGFzZXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbm9kZS5kYXRhc2V0O1xufTtcbmV4cG9ydCB2YXIgaXNIVE1MQnV0dG9uRWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdCVVRUT04nOyB9O1xuZXhwb3J0IHZhciBpc0hUTUxJbnB1dEVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnSU5QVVQnOyB9O1xuZXhwb3J0IHZhciBpc1JhZGlvRWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIGlzSFRNTElucHV0RWxlbWVudChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdyYWRpbyc7XG59O1xuZXhwb3J0IHZhciBub3RIaWRkZW5JbnB1dCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuICEoKGlzSFRNTElucHV0RWxlbWVudChub2RlKSB8fCBpc0hUTUxCdXR0b25FbGVtZW50KG5vZGUpKSAmJiAobm9kZS50eXBlID09PSAnaGlkZGVuJyB8fCBub2RlLmRpc2FibGVkKSk7XG59O1xuZXhwb3J0IHZhciBpc0F1dG9Gb2N1c0FsbG93ZWQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBhdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZShGT0NVU19OT19BVVRPRk9DVVMpO1xuICAgIHJldHVybiAhW3RydWUsICd0cnVlJywgJyddLmluY2x1ZGVzKGF0dHJpYnV0ZSk7XG59O1xuZXhwb3J0IHZhciBpc0d1YXJkID0gZnVuY3Rpb24gKG5vZGUpIHsgdmFyIF9hOyByZXR1cm4gQm9vbGVhbihub2RlICYmICgoX2EgPSBnZXREYXRhc2V0KG5vZGUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXNHdWFyZCkpOyB9O1xuZXhwb3J0IHZhciBpc05vdEFHdWFyZCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiAhaXNHdWFyZChub2RlKTsgfTtcbmV4cG9ydCB2YXIgaXNEZWZpbmVkID0gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIEJvb2xlYW4oeCk7IH07XG4iLCAiaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuZXhwb3J0IHZhciB0YWJTb3J0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgYVRhYiA9IE1hdGgubWF4KDAsIGEudGFiSW5kZXgpO1xuICAgIHZhciBiVGFiID0gTWF0aC5tYXgoMCwgYi50YWJJbmRleCk7XG4gICAgdmFyIHRhYkRpZmYgPSBhVGFiIC0gYlRhYjtcbiAgICB2YXIgaW5kZXhEaWZmID0gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgaWYgKHRhYkRpZmYpIHtcbiAgICAgICAgaWYgKCFhVGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJUYWIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFiRGlmZiB8fCBpbmRleERpZmY7XG59O1xudmFyIGdldFRhYkluZGV4ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAobm9kZS50YWJJbmRleCA8IDApIHtcbiAgICAgICAgLy8gYWxsIFwiZm9jdXNhYmxlXCIgZWxlbWVudHMgYXJlIGFscmVhZHkgcHJlc2VsZWN0ZWRcbiAgICAgICAgLy8gYnV0IHNvbWUgbWlnaHQgaGF2ZSBpbXBsaWNpdCBuZWdhdGl2ZSB0YWJJbmRleFxuICAgICAgICAvLyByZXR1cm4gMCBmb3IgPGF1ZGlvIHdpdGhvdXQgdGFiSW5kZXggYXR0cmlidXRlIC0gaXQgaXMgXCJ0YWJiYWJsZVwiXG4gICAgICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlLnRhYkluZGV4O1xufTtcbmV4cG9ydCB2YXIgb3JkZXJCeVRhYkluZGV4ID0gZnVuY3Rpb24gKG5vZGVzLCBmaWx0ZXJOZWdhdGl2ZSwga2VlcEd1YXJkcykge1xuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSBnZXRUYWJJbmRleChub2RlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICB0YWJJbmRleDoga2VlcEd1YXJkcyAmJiB0YWJJbmRleCA9PT0gLTEgPyAoKG5vZGUuZGF0YXNldCB8fCB7fSkuZm9jdXNHdWFyZCA/IDAgOiAtMSkgOiB0YWJJbmRleCxcbiAgICAgICAgfTtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiAhZmlsdGVyTmVnYXRpdmUgfHwgZGF0YS50YWJJbmRleCA+PSAwOyB9KVxuICAgICAgICAuc29ydCh0YWJTb3J0KTtcbn07XG4iLCAiLyoqXG4gKiBsaXN0IG9mIHRoZSBvYmplY3QgdG8gYmUgY29uc2lkZXJlZCBhcyBmb2N1c2FibGVcbiAqL1xuZXhwb3J0IHZhciB0YWJiYWJsZXMgPSBbXG4gICAgJ2J1dHRvbjplbmFibGVkJyxcbiAgICAnc2VsZWN0OmVuYWJsZWQnLFxuICAgICd0ZXh0YXJlYTplbmFibGVkJyxcbiAgICAnaW5wdXQ6ZW5hYmxlZCcsXG4gICAgLy8gZWxlbWVudHMgd2l0aCBleHBsaWNpdCByb2xlcyB3aWxsIGFsc28gdXNlIGV4cGxpY2l0IHRhYmluZGV4XG4gICAgLy8gJ1tyb2xlPVwiYnV0dG9uXCJdJyxcbiAgICAnYVtocmVmXScsXG4gICAgJ2FyZWFbaHJlZl0nLFxuICAgICdzdW1tYXJ5JyxcbiAgICAnaWZyYW1lJyxcbiAgICAnb2JqZWN0JyxcbiAgICAnZW1iZWQnLFxuICAgICdhdWRpb1tjb250cm9sc10nLFxuICAgICd2aWRlb1tjb250cm9sc10nLFxuICAgICdbdGFiaW5kZXhdJyxcbiAgICAnW2NvbnRlbnRlZGl0YWJsZV0nLFxuICAgICdbYXV0b2ZvY3VzXScsXG5dO1xuIiwgImltcG9ydCB7IEZPQ1VTX0FVVE8gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuaW1wb3J0IHsgdGFiYmFibGVzIH0gZnJvbSAnLi90YWJiYWJsZXMnO1xudmFyIHF1ZXJ5VGFiYmFibGVzID0gdGFiYmFibGVzLmpvaW4oJywnKTtcbnZhciBxdWVyeUd1YXJkVGFiYmFibGVzID0gXCJcIi5jb25jYXQocXVlcnlUYWJiYWJsZXMsIFwiLCBbZGF0YS1mb2N1cy1ndWFyZF1cIik7XG52YXIgZ2V0Rm9jdXNhYmxlc1dpdGhTaGFkb3dEb20gPSBmdW5jdGlvbiAocGFyZW50LCB3aXRoR3VhcmRzKSB7XG4gICAgcmV0dXJuIHRvQXJyYXkoKHBhcmVudC5zaGFkb3dSb290IHx8IHBhcmVudCkuY2hpbGRyZW4pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjaGlsZCkge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChjaGlsZC5tYXRjaGVzKHdpdGhHdWFyZHMgPyBxdWVyeUd1YXJkVGFiYmFibGVzIDogcXVlcnlUYWJiYWJsZXMpID8gW2NoaWxkXSA6IFtdLCBnZXRGb2N1c2FibGVzV2l0aFNoYWRvd0RvbShjaGlsZCkpO1xuICAgIH0sIFtdKTtcbn07XG52YXIgZ2V0Rm9jdXNhYmxlc1dpdGhJRnJhbWUgPSBmdW5jdGlvbiAocGFyZW50LCB3aXRoR3VhcmRzKSB7XG4gICAgdmFyIF9hO1xuICAgIC8vIGNvbnRlbnREb2N1bWVudCBvZiBpZnJhbWUgd2lsbCBiZSBudWxsIGlmIGN1cnJlbnQgb3JpZ2luIGNhbm5vdCBhY2Nlc3MgaXRcbiAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgJiYgKChfYSA9IHBhcmVudC5jb250ZW50RG9jdW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ib2R5KSkge1xuICAgICAgICByZXR1cm4gZ2V0Rm9jdXNhYmxlcyhbcGFyZW50LmNvbnRlbnREb2N1bWVudC5ib2R5XSwgd2l0aEd1YXJkcyk7XG4gICAgfVxuICAgIHJldHVybiBbcGFyZW50XTtcbn07XG5leHBvcnQgdmFyIGdldEZvY3VzYWJsZXMgPSBmdW5jdGlvbiAocGFyZW50cywgd2l0aEd1YXJkcykge1xuICAgIHJldHVybiBwYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgZm9jdXNhYmxlV2l0aFNoYWRvd0RvbSA9IGdldEZvY3VzYWJsZXNXaXRoU2hhZG93RG9tKHBhcmVudCwgd2l0aEd1YXJkcyk7XG4gICAgICAgIHZhciBmb2N1c2FibGVXaXRoSWZyYW1lcyA9IChfYSA9IFtdKS5jb25jYXQuYXBwbHkoX2EsIGZvY3VzYWJsZVdpdGhTaGFkb3dEb20ubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBnZXRGb2N1c2FibGVzV2l0aElGcmFtZShub2RlLCB3aXRoR3VhcmRzKTsgfSkpO1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChcbiAgICAgICAgLy8gYWRkIGFsbCB0YWJiYWJsZXMgaW5zaWRlIGFuZCB3aXRoaW4gc2hhZG93IERPTXMgaW4gRE9NIG9yZGVyXG4gICAgICAgIGZvY3VzYWJsZVdpdGhJZnJhbWVzLCBcbiAgICAgICAgLy8gYWRkIGlmIG5vZGUgaXMgdGFiYmFibGUgaXRzZWxmXG4gICAgICAgIHBhcmVudC5wYXJlbnROb2RlXG4gICAgICAgICAgICA/IHRvQXJyYXkocGFyZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeVRhYmJhYmxlcykpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZSA9PT0gcGFyZW50OyB9KVxuICAgICAgICAgICAgOiBbXSk7XG4gICAgfSwgW10pO1xufTtcbi8qKlxuICogcmV0dXJuIGEgbGlzdCBvZiBmb2N1c2FibGUgbm9kZXMgd2l0aGluIGFuIGFyZWEgbWFya2VkIGFzIFwiYXV0by1mb2N1c2FibGVcIlxuICogQHBhcmFtIHBhcmVudFxuICovXG5leHBvcnQgdmFyIGdldFBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgIHZhciBwYXJlbnRGb2N1cyA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW1wiLmNvbmNhdChGT0NVU19BVVRPLCBcIl1cIikpO1xuICAgIHJldHVybiB0b0FycmF5KHBhcmVudEZvY3VzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBnZXRGb2N1c2FibGVzKFtub2RlXSk7IH0pXG4gICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbm9kZXMpIHsgcmV0dXJuIGFjYy5jb25jYXQobm9kZXMpOyB9LCBbXSk7XG59O1xuIiwgImltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmltcG9ydCB7IGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZCwgaXNWaXNpYmxlQ2FjaGVkLCBub3RIaWRkZW5JbnB1dCB9IGZyb20gJy4vaXMnO1xuaW1wb3J0IHsgb3JkZXJCeVRhYkluZGV4IH0gZnJvbSAnLi90YWJPcmRlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVzLCBnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyB9IGZyb20gJy4vdGFiVXRpbHMnO1xuLyoqXG4gKiBnaXZlbiBsaXN0IG9mIGZvY3VzYWJsZSBlbGVtZW50cyBrZWVwcyB0aGUgb25lcyB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoXG4gKiBAcGFyYW0gbm9kZXNcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGVcbiAqL1xuZXhwb3J0IHZhciBmaWx0ZXJGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBpc1Zpc2libGVDYWNoZWQodmlzaWJpbGl0eUNhY2hlLCBub2RlKTsgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm90SGlkZGVuSW5wdXQobm9kZSk7IH0pO1xufTtcbmV4cG9ydCB2YXIgZmlsdGVyQXV0b0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2RlcywgY2FjaGUpIHtcbiAgICBpZiAoY2FjaGUgPT09IHZvaWQgMCkgeyBjYWNoZSA9IG5ldyBNYXAoKTsgfVxuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZChjYWNoZSwgbm9kZSk7IH0pO1xufTtcbi8qKlxuICogIV9fV0FSTklOR19fISBMb3cgbGV2ZWwgQVBJLlxuICogQHJldHVybnMgYWxsIHRhYmJhYmxlIG5vZGVzXG4gKlxuICogQHNlZSB7QGxpbmsgZ2V0Rm9jdXNhYmxlTm9kZXN9IHRvIGdldCBhbnkgZm9jdXNhYmxlIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gdG9wTm9kZXMgLSBhcnJheSBvZiB0b3AgbGV2ZWwgSFRNTEVsZW1lbnRzIHRvIHNlYXJjaCBpbnNpZGVcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGUgLSBhbiBjYWNoZSB0byBzdG9yZSBpbnRlcm1lZGlhdGUgbWVhc3VyZW1lbnRzLiBFeHBlY3RlZCB0byBiZSBhIGZyZXNoIGBuZXcgTWFwYCBvbiBldmVyeSBjYWxsXG4gKi9cbmV4cG9ydCB2YXIgZ2V0VGFiYmFibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlcywgdmlzaWJpbGl0eUNhY2hlLCB3aXRoR3VhcmRzKSB7XG4gICAgcmV0dXJuIG9yZGVyQnlUYWJJbmRleChmaWx0ZXJGb2N1c2FibGUoZ2V0Rm9jdXNhYmxlcyh0b3BOb2Rlcywgd2l0aEd1YXJkcyksIHZpc2liaWxpdHlDYWNoZSksIHRydWUsIHdpdGhHdWFyZHMpO1xufTtcbi8qKlxuICogIV9fV0FSTklOR19fISBMb3cgbGV2ZWwgQVBJLlxuICpcbiAqIEByZXR1cm5zIGFueXRoaW5nIFwiZm9jdXNhYmxlXCIsIG5vdCBvbmx5IHRhYmJhYmxlLiBUaGUgZGlmZmVyZW5jZSBpcyBpbiBgdGFiSW5kZXg9LTFgXG4gKiAod2l0aG91dCBndWFyZHMsIGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIGV2ZXIgZm9jdXNlZClcbiAqXG4gKiBAc2VlIHtAbGluayBnZXRUYWJiYWJsZU5vZGVzfSB0byBnZXQgb25seSB0YWJibGUgbm9kZXMgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB0b3BOb2RlcyAtIGFycmF5IG9mIHRvcCBsZXZlbCBIVE1MRWxlbWVudHMgdG8gc2VhcmNoIGluc2lkZVxuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZSAtIGFuIGNhY2hlIHRvIHN0b3JlIGludGVybWVkaWF0ZSBtZWFzdXJlbWVudHMuIEV4cGVjdGVkIHRvIGJlIGEgZnJlc2ggYG5ldyBNYXBgIG9uIGV2ZXJ5IGNhbGxcbiAqL1xuZXhwb3J0IHZhciBnZXRGb2N1c2FibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlcywgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIG9yZGVyQnlUYWJJbmRleChmaWx0ZXJGb2N1c2FibGUoZ2V0Rm9jdXNhYmxlcyh0b3BOb2RlcyksIHZpc2liaWxpdHlDYWNoZSksIGZhbHNlKTtcbn07XG4vKipcbiAqIHJldHVybiBsaXN0IG9mIG5vZGVzIHdoaWNoIGFyZSBleHBlY3RlZCB0byBiZSBhdXRvLWZvY3VzZWRcbiAqIEBwYXJhbSB0b3BOb2RlXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlXG4gKi9cbmV4cG9ydCB2YXIgcGFyZW50QXV0b2ZvY3VzYWJsZXMgPSBmdW5jdGlvbiAodG9wTm9kZSwgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIGZpbHRlckZvY3VzYWJsZShnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyh0b3BOb2RlKSwgdmlzaWJpbGl0eUNhY2hlKTtcbn07XG4vKlxuICogRGV0ZXJtaW5lcyBpZiBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBzY29wZSwgaW5jbHVkaW5nIG5lc3RlZCBzaGFkb3cgRE9Nc1xuICovXG5leHBvcnQgdmFyIGNvbnRhaW5zID0gZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50KSB7XG4gICAgaWYgKHNjb3BlLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHNjb3BlLnNoYWRvd1Jvb3QsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzY29wZSkuY29udGFpbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNjb3BlKS5jb250YWlucy5jYWxsKHNjb3BlLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvQXJyYXkoc2NvcGUuY2hpbGRyZW4pLnNvbWUoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHZhciBpZnJhbWVCb2R5ID0gKF9hID0gY2hpbGQuY29udGVudERvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYm9keTtcbiAgICAgICAgICAgICAgICBpZiAoaWZyYW1lQm9keSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbnMoaWZyYW1lQm9keSwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWlucyhjaGlsZCwgZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHsgRk9DVVNfRElTQUJMRUQsIEZPQ1VTX0dST1VQIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFzQXJyYXksIHRvQXJyYXkgfSBmcm9tICcuL2FycmF5Jztcbi8qKlxuICogaW4gY2FzZSBvZiBtdWx0aXBsZSBub2RlcyBuZXN0ZWQgaW5zaWRlIGVhY2ggb3RoZXJcbiAqIGtlZXBzIG9ubHkgdG9wIG9uZXNcbiAqIHRoaXMgaXMgTyhubG9nbilcbiAqIEBwYXJhbSBub2Rlc1xuICogQHJldHVybnMgeyp9XG4gKi9cbnZhciBmaWx0ZXJOZXN0ZWQgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICB2YXIgY29udGFpbmVkID0gbmV3IFNldCgpO1xuICAgIHZhciBsID0gbm9kZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSArPSAxKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IGw7IGogKz0gMSkge1xuICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gbm9kZXNbaV0uY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZXNbal0pO1xuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb250YWluZWQuYWRkKGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMpID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lZC5hZGQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoXywgaW5kZXgpIHsgcmV0dXJuICFjb250YWluZWQuaGFzKGluZGV4KTsgfSk7XG59O1xuLyoqXG4gKiBmaW5kcyB0b3AgbW9zdCBwYXJlbnQgZm9yIGEgbm9kZVxuICogQHBhcmFtIG5vZGVcbiAqIEByZXR1cm5zIHsqfVxuICovXG52YXIgZ2V0VG9wUGFyZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlID8gZ2V0VG9wUGFyZW50KG5vZGUucGFyZW50Tm9kZSkgOiBub2RlO1xufTtcbi8qKlxuICogcmV0dXJucyBhbGwgXCJmb2N1cyBjb250YWluZXJzXCIgaW5zaWRlIGEgZ2l2ZW4gbm9kZVxuICogQHBhcmFtIG5vZGUgLSBub2RlIG9yIG5vZGVzIHRvIGxvb2sgaW5zaWRlXG4gKiBAcmV0dXJucyBFbGVtZW50W11cbiAqL1xuZXhwb3J0IHZhciBnZXRBbGxBZmZlY3RlZE5vZGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgbm9kZXMgPSBhc0FycmF5KG5vZGUpO1xuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoQm9vbGVhbikucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGN1cnJlbnROb2RlKSB7XG4gICAgICAgIHZhciBncm91cCA9IGN1cnJlbnROb2RlLmdldEF0dHJpYnV0ZShGT0NVU19HUk9VUCk7XG4gICAgICAgIGFjYy5wdXNoLmFwcGx5KGFjYywgKGdyb3VwXG4gICAgICAgICAgICA/IGZpbHRlck5lc3RlZCh0b0FycmF5KGdldFRvcFBhcmVudChjdXJyZW50Tm9kZSkucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfR1JPVVAsIFwiPVxcXCJcIikuY29uY2F0KGdyb3VwLCBcIlxcXCJdOm5vdChbXCIpLmNvbmNhdChGT0NVU19ESVNBQkxFRCwgXCI9XFxcImRpc2FibGVkXFxcIl0pXCIpKSkpXG4gICAgICAgICAgICA6IFtjdXJyZW50Tm9kZV0pKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG59O1xuIiwgImV4cG9ydCB2YXIgc2FmZVByb2JlID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufTtcbiIsICIvKipcbiAqIHJldHVybnMgYWN0aXZlIGVsZW1lbnQgZnJvbSBkb2N1bWVudCBvciBmcm9tIG5lc3RlZCBzaGFkb3dkb21zXG4gKi9cbmltcG9ydCB7IHNhZmVQcm9iZSB9IGZyb20gJy4vc2FmZSc7XG4vKipcbiAqIHJldHVybnMgY3VycmVudCBhY3RpdmUgZWxlbWVudC4gSWYgdGhlIGFjdGl2ZSBlbGVtZW50IGlzIGEgXCJjb250YWluZXJcIiBpdHNlbGYoc2hhZG93Um9vdCBvciBpZnJhbWUpIHJldHVybnMgYWN0aXZlIGVsZW1lbnQgaW5zaWRlIGl0XG4gKiBAcGFyYW0gW2luRG9jdW1lbnRdXG4gKi9cbmV4cG9ydCB2YXIgZ2V0QWN0aXZlRWxlbWVudCA9IGZ1bmN0aW9uIChpbkRvY3VtZW50KSB7XG4gICAgaWYgKGluRG9jdW1lbnQgPT09IHZvaWQgMCkgeyBpbkRvY3VtZW50ID0gZG9jdW1lbnQ7IH1cbiAgICBpZiAoIWluRG9jdW1lbnQgfHwgIWluRG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGluRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gKGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdFxuICAgICAgICA/IGdldEFjdGl2ZUVsZW1lbnQoYWN0aXZlRWxlbWVudC5zaGFkb3dSb290KVxuICAgICAgICA6IGFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCAmJiBzYWZlUHJvYmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gYWN0aXZlRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50OyB9KVxuICAgICAgICAgICAgPyBnZXRBY3RpdmVFbGVtZW50KGFjdGl2ZUVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudClcbiAgICAgICAgICAgIDogYWN0aXZlRWxlbWVudCk7XG59O1xuIiwgImltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi91dGlscy9ET011dGlscyc7XG5pbXBvcnQgeyBnZXRBbGxBZmZlY3RlZE5vZGVzIH0gZnJvbSAnLi91dGlscy9hbGwtYWZmZWN0ZWQnO1xuaW1wb3J0IHsgZ2V0Rmlyc3QsIHRvQXJyYXkgfSBmcm9tICcuL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xudmFyIGZvY3VzSW5GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZSwgYWN0aXZlRWxlbWVudCkgeyByZXR1cm4gZnJhbWUgPT09IGFjdGl2ZUVsZW1lbnQ7IH07XG52YXIgZm9jdXNJbnNpZGVJZnJhbWUgPSBmdW5jdGlvbiAodG9wTm9kZSwgYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybiBCb29sZWFuKHRvQXJyYXkodG9wTm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKSkuc29tZShmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZm9jdXNJbkZyYW1lKG5vZGUsIGFjdGl2ZUVsZW1lbnQpOyB9KSk7XG59O1xuLyoqXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSwgaWYgdGhlIGN1cnJlbnQgZm9jdXMgaXMgaW5zaWRlIGdpdmVuIG5vZGUgb3Igbm9kZXMuXG4gKiBTdXBwb3J0cyBub2RlcyBoaWRkZW4gaW5zaWRlIHNoYWRvd0RvbVxuICovXG5leHBvcnQgdmFyIGZvY3VzSW5zaWRlID0gZnVuY3Rpb24gKHRvcE5vZGUsIGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAvLyBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQgJiYgZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIGlmIChhY3RpdmVFbGVtZW50ID09PSB2b2lkIDApIHsgYWN0aXZlRWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoZ2V0Rmlyc3QodG9wTm9kZSkub3duZXJEb2N1bWVudCk7IH1cbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgKGFjdGl2ZUVsZW1lbnQuZGF0YXNldCAmJiBhY3RpdmVFbGVtZW50LmRhdGFzZXQuZm9jdXNHdWFyZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5zb21lKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHJldHVybiBjb250YWlucyhub2RlLCBhY3RpdmVFbGVtZW50KSB8fCBmb2N1c0luc2lkZUlmcmFtZShub2RlLCBhY3RpdmVFbGVtZW50KTtcbiAgICB9KTtcbn07XG4iLCAiaW1wb3J0IHsgRk9DVVNfQUxMT1cgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb250YWlucyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgZ2V0QWN0aXZlRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvZ2V0QWN0aXZlRWxlbWVudCc7XG4vKipcbiAqIGNoZWNrcyBpZiBmb2N1cyBpcyBoaWRkZW4gRlJPTSB0aGUgZm9jdXMtbG9ja1xuICogaWUgY29udGFpbmVkIGluc2lkZSBhIG5vZGUgZm9jdXMtbG9jayBzaGFsbCBpZ25vcmVcbiAqXG4gKiBUaGlzIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBjb3VwbGVkIHdpdGgge0BsaW5rIEZPQ1VTX0FMTE9XfSBjb25zdGFudFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBmb2N1cyBpcyBjdXJyZW50bHkgaXMgaW4gXCJhbGxvd1wiIGFyZWFcbiAqL1xuZXhwb3J0IHZhciBmb2N1c0lzSGlkZGVuID0gZnVuY3Rpb24gKGluRG9jdW1lbnQpIHtcbiAgICBpZiAoaW5Eb2N1bWVudCA9PT0gdm9pZCAwKSB7IGluRG9jdW1lbnQgPSBkb2N1bWVudDsgfVxuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChpbkRvY3VtZW50KTtcbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyB0aGlzIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBGT0NVU19BTExPVyB3aXRoaW4gc2hhZG93IGRvbVxuICAgIHJldHVybiB0b0FycmF5KGluRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfQUxMT1csIFwiXVwiKSkpLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGNvbnRhaW5zKG5vZGUsIGFjdGl2ZUVsZW1lbnQpOyB9KTtcbn07XG4iLCAiaW1wb3J0IHsgaXNSYWRpb0VsZW1lbnQgfSBmcm9tICcuL2lzJztcbnZhciBmaW5kU2VsZWN0ZWRSYWRpbyA9IGZ1bmN0aW9uIChub2RlLCBub2Rlcykge1xuICAgIHJldHVybiBub2Rlc1xuICAgICAgICAuZmlsdGVyKGlzUmFkaW9FbGVtZW50KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwubmFtZSA9PT0gbm9kZS5uYW1lOyB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2hlY2tlZDsgfSlbMF0gfHwgbm9kZTtcbn07XG5leHBvcnQgdmFyIGNvcnJlY3ROb2RlID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVzKSB7XG4gICAgaWYgKGlzUmFkaW9FbGVtZW50KG5vZGUpICYmIG5vZGUubmFtZSkge1xuICAgICAgICByZXR1cm4gZmluZFNlbGVjdGVkUmFkaW8obm9kZSwgbm9kZXMpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn07XG4vKipcbiAqIGdpdmluZyBhIHNldCBvZiByYWRpbyBpbnB1dHMga2VlcHMgb25seSBzZWxlY3RlZCAodGFiYmFibGUpIG9uZXNcbiAqIEBwYXJhbSBub2Rlc1xuICovXG5leHBvcnQgdmFyIGNvcnJlY3ROb2RlcyA9IGZ1bmN0aW9uIChub2Rlcykge1xuICAgIC8vIElFMTEgaGFzIG5vIFNldChhcnJheSkgY29uc3RydWN0b3JcbiAgICB2YXIgcmVzdWx0U2V0ID0gbmV3IFNldCgpO1xuICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlc3VsdFNldC5hZGQoY29ycmVjdE5vZGUobm9kZSwgbm9kZXMpKTsgfSk7XG4gICAgLy8gdXNpbmcgZmlsdGVyIHRvIHN1cHBvcnQgSUUxMVxuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlc3VsdFNldC5oYXMobm9kZSk7IH0pO1xufTtcbiIsICJpbXBvcnQgeyBjb3JyZWN0Tm9kZSB9IGZyb20gJy4vY29ycmVjdEZvY3VzJztcbmV4cG9ydCB2YXIgcGlja0ZpcnN0Rm9jdXMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICBpZiAobm9kZXNbMF0gJiYgbm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gY29ycmVjdE5vZGUobm9kZXNbMF0sIG5vZGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzWzBdO1xufTtcbmV4cG9ydCB2YXIgcGlja0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2Rlcywgbm9kZSkge1xuICAgIHJldHVybiBub2Rlcy5pbmRleE9mKGNvcnJlY3ROb2RlKG5vZGUsIG5vZGVzKSk7XG59O1xuIiwgImltcG9ydCB7IGNvcnJlY3ROb2RlcyB9IGZyb20gJy4vdXRpbHMvY29ycmVjdEZvY3VzJztcbmltcG9ydCB7IHBpY2tGb2N1c2FibGUgfSBmcm9tICcuL3V0aWxzL2ZpcnN0Rm9jdXMnO1xuaW1wb3J0IHsgaXNHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuZXhwb3J0IHZhciBORVdfRk9DVVMgPSAnTkVXX0ZPQ1VTJztcbi8qKlxuICogTWFpbiBzb2x2ZXIgZm9yIHRoZSBcImZpbmQgbmV4dCBmb2N1c1wiIHF1ZXN0aW9uXG4gKiBAcGFyYW0gaW5uZXJOb2RlcyAtIHVzZWQgdG8gY29udHJvbCBcInJldHVybiBmb2N1c1wiXG4gKiBAcGFyYW0gaW5uZXJUYWJiYWJsZXMgLSB1c2VkIHRvIGNvbnRyb2wgXCJhdXRvZm9jdXNcIlxuICogQHBhcmFtIG91dGVyTm9kZXNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50XG4gKiBAcGFyYW0gbGFzdE5vZGVcbiAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfHVuZGVmaW5lZHwqfVxuICovXG5leHBvcnQgdmFyIG5ld0ZvY3VzID0gZnVuY3Rpb24gKGlubmVyTm9kZXMsIGlubmVyVGFiYmFibGVzLCBvdXRlck5vZGVzLCBhY3RpdmVFbGVtZW50LCBsYXN0Tm9kZSkge1xuICAgIHZhciBjbnQgPSBpbm5lck5vZGVzLmxlbmd0aDtcbiAgICB2YXIgZmlyc3RGb2N1cyA9IGlubmVyTm9kZXNbMF07XG4gICAgdmFyIGxhc3RGb2N1cyA9IGlubmVyTm9kZXNbY250IC0gMV07XG4gICAgdmFyIGlzT25HdWFyZCA9IGlzR3VhcmQoYWN0aXZlRWxlbWVudCk7XG4gICAgLy8gZm9jdXMgaXMgaW5zaWRlXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgaW5uZXJOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gYWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkID8gb3V0ZXJOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIGxhc3RJbmRleCA9IGxhc3ROb2RlID8gb3V0ZXJOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IGFjdGl2ZUluZGV4O1xuICAgIHZhciBsYXN0Tm9kZUluc2lkZSA9IGxhc3ROb2RlID8gaW5uZXJOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IC0xO1xuICAgIC8vIG5vIGFjdGl2ZSBmb2N1cyAob3IgZm9jdXMgaXMgb24gdGhlIGJvZHkpXG4gICAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSkge1xuICAgICAgICAvLyBrbm93biBmYWxsYmFja1xuICAgICAgICBpZiAobGFzdE5vZGVJbnNpZGUgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5FV19GT0NVUztcbiAgICB9XG4gICAgLy8gbmV3IGZvY3VzLCBub3RoaW5nIHRvIGNhbGN1bGF0ZVxuICAgIGlmIChsYXN0Tm9kZUluc2lkZSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIE5FV19GT0NVUztcbiAgICB9XG4gICAgdmFyIGluZGV4RGlmZiA9IGFjdGl2ZUluZGV4IC0gbGFzdEluZGV4O1xuICAgIHZhciBmaXJzdE5vZGVJbmRleCA9IG91dGVyTm9kZXMuaW5kZXhPZihmaXJzdEZvY3VzKTtcbiAgICB2YXIgbGFzdE5vZGVJbmRleCA9IG91dGVyTm9kZXMuaW5kZXhPZihsYXN0Rm9jdXMpO1xuICAgIHZhciBjb3JyZWN0ZWROb2RlcyA9IGNvcnJlY3ROb2RlcyhvdXRlck5vZGVzKTtcbiAgICB2YXIgY29ycmVjdGVkSW5kZXggPSBhY3RpdmVFbGVtZW50ICE9PSB1bmRlZmluZWQgPyBjb3JyZWN0ZWROb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIGNvcnJlY3RlZEluZGV4RGlmZiA9IGNvcnJlY3RlZEluZGV4IC0gKGxhc3ROb2RlID8gY29ycmVjdGVkTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiBhY3RpdmVJbmRleCk7XG4gICAgLy8gb2xkIGZvY3VzXG4gICAgaWYgKCFpbmRleERpZmYgJiYgbGFzdE5vZGVJbnNpZGUgPj0gMCkge1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIC8vIG5vIHRhYmJhYmxlIGVsZW1lbnRzLCBhdXRvZm9jdXMgaXMgbm90IHBvc3NpYmxlXG4gICAgaWYgKGlubmVyVGFiYmFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBhbiBlZGdlIGNhc2Ugd2l0aCBubyB0YWJiYWJsZSBlbGVtZW50c1xuICAgICAgICAvLyByZXR1cm4gdGhlIGxhc3QgZm9jdXNhYmxlIG9uZVxuICAgICAgICAvLyB3aXRoIHNvbWUgcHJvYmFiaWxpdHkgdGhpcyB3aWxsIHByZXZlbnQgZm9jdXMgZnJvbSBjeWNsaW5nIGFjcm9zcyB0aGUgbG9jaywgYnV0IHRoZXJlIGlzIG5vIHRhYmJhbGUgZWxlbWVudHMgdG8gY3ljbGUgdG9cbiAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgIH1cbiAgICB2YXIgcmV0dXJuRmlyc3ROb2RlID0gcGlja0ZvY3VzYWJsZShpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlc1swXSk7XG4gICAgdmFyIHJldHVybkxhc3ROb2RlID0gcGlja0ZvY3VzYWJsZShpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlc1tpbm5lclRhYmJhYmxlcy5sZW5ndGggLSAxXSk7XG4gICAgLy8gZmlyc3QgZWxlbWVudFxuICAgIGlmIChhY3RpdmVJbmRleCA8PSBmaXJzdE5vZGVJbmRleCAmJiBpc09uR3VhcmQgJiYgTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkxhc3ROb2RlO1xuICAgIH1cbiAgICAvLyBsYXN0IGVsZW1lbnRcbiAgICBpZiAoYWN0aXZlSW5kZXggPj0gbGFzdE5vZGVJbmRleCAmJiBpc09uR3VhcmQgJiYgTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkZpcnN0Tm9kZTtcbiAgICB9XG4gICAgLy8ganVtcCBvdXQsIGJ1dCBub3Qgb24gdGhlIGd1YXJkXG4gICAgaWYgKGluZGV4RGlmZiAmJiBNYXRoLmFicyhjb3JyZWN0ZWRJbmRleERpZmYpID4gMSkge1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIC8vIGZvY3VzIGFib3ZlIGxvY2tcbiAgICBpZiAoYWN0aXZlSW5kZXggPD0gZmlyc3ROb2RlSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkxhc3ROb2RlO1xuICAgIH1cbiAgICAvLyBmb2N1cyBiZWxvdyBsb2NrXG4gICAgaWYgKGFjdGl2ZUluZGV4ID4gbGFzdE5vZGVJbmRleCkge1xuICAgICAgICByZXR1cm4gcmV0dXJuRmlyc3ROb2RlO1xuICAgIH1cbiAgICAvLyBpbmRleCBpcyBpbnNpZGUgdGFiIG9yZGVyLCBidXQgb3V0c2lkZSBMb2NrXG4gICAgaWYgKGluZGV4RGlmZikge1xuICAgICAgICBpZiAoTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0Tm9kZUluc2lkZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGNudCArIGxhc3ROb2RlSW5zaWRlICsgaW5kZXhEaWZmKSAlIGNudDtcbiAgICB9XG4gICAgLy8gZG8gbm90aGluZ1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgImltcG9ydCB7IGZpbHRlckF1dG9Gb2N1c2FibGUgfSBmcm9tICcuL0RPTXV0aWxzJztcbmltcG9ydCB7IHBpY2tGaXJzdEZvY3VzIH0gZnJvbSAnLi9maXJzdEZvY3VzJztcbmltcG9ydCB7IGdldERhdGFzZXQgfSBmcm9tICcuL2lzJztcbnZhciBmaW5kQXV0b0ZvY3VzZWQgPSBmdW5jdGlvbiAoYXV0b0ZvY3VzYWJsZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgYXV0b2ZvY3VzID0gKF9hID0gZ2V0RGF0YXNldChub2RlKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmF1dG9mb2N1cztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBub2RlLmF1dG9mb2N1cyB8fFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIChhdXRvZm9jdXMgIT09IHVuZGVmaW5lZCAmJiBhdXRvZm9jdXMgIT09ICdmYWxzZScpIHx8XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgYXV0b0ZvY3VzYWJsZXMuaW5kZXhPZihub2RlKSA+PSAwKTtcbiAgICB9O1xufTtcbmV4cG9ydCB2YXIgcGlja0F1dG9mb2N1cyA9IGZ1bmN0aW9uIChub2Rlc0luZGV4ZXMsIG9yZGVyZWROb2RlcywgZ3JvdXBzKSB7XG4gICAgdmFyIG5vZGVzID0gbm9kZXNJbmRleGVzLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgYXV0b0ZvY3VzYWJsZSA9IGZpbHRlckF1dG9Gb2N1c2FibGUobm9kZXMuZmlsdGVyKGZpbmRBdXRvRm9jdXNlZChncm91cHMpKSk7XG4gICAgaWYgKGF1dG9Gb2N1c2FibGUgJiYgYXV0b0ZvY3VzYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHBpY2tGaXJzdEZvY3VzKGF1dG9Gb2N1c2FibGUpO1xuICAgIH1cbiAgICByZXR1cm4gcGlja0ZpcnN0Rm9jdXMoZmlsdGVyQXV0b0ZvY3VzYWJsZShvcmRlcmVkTm9kZXMpKTtcbn07XG4iLCAiaW1wb3J0IHsgcGFyZW50QXV0b2ZvY3VzYWJsZXMgfSBmcm9tICcuL0RPTXV0aWxzJztcbmltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi9ET011dGlscyc7XG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG52YXIgZ2V0UGFyZW50cyA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnRzKSB7XG4gICAgaWYgKHBhcmVudHMgPT09IHZvaWQgMCkgeyBwYXJlbnRzID0gW107IH1cbiAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBnZXRQYXJlbnRzKG5vZGUucGFyZW50Tm9kZS5ob3N0IHx8IG5vZGUucGFyZW50Tm9kZSwgcGFyZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xufTtcbi8qKlxuICogZmluZHMgYSBwYXJlbnQgZm9yIGJvdGggbm9kZUEgYW5kIG5vZGVCXG4gKiBAcGFyYW0gbm9kZUFcbiAqIEBwYXJhbSBub2RlQlxuICogQHJldHVybnMge2Jvb2xlYW58Kn1cbiAqL1xuZXhwb3J0IHZhciBnZXRDb21tb25QYXJlbnQgPSBmdW5jdGlvbiAobm9kZUEsIG5vZGVCKSB7XG4gICAgdmFyIHBhcmVudHNBID0gZ2V0UGFyZW50cyhub2RlQSk7XG4gICAgdmFyIHBhcmVudHNCID0gZ2V0UGFyZW50cyhub2RlQik7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHNBLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBjdXJyZW50UGFyZW50ID0gcGFyZW50c0FbaV07XG4gICAgICAgIGlmIChwYXJlbnRzQi5pbmRleE9mKGN1cnJlbnRQYXJlbnQpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgdmFyIGdldFRvcENvbW1vblBhcmVudCA9IGZ1bmN0aW9uIChiYXNlQWN0aXZlRWxlbWVudCwgbGVmdEVudHJ5LCByaWdodEVudHJpZXMpIHtcbiAgICB2YXIgYWN0aXZlRWxlbWVudHMgPSBhc0FycmF5KGJhc2VBY3RpdmVFbGVtZW50KTtcbiAgICB2YXIgbGVmdEVudHJpZXMgPSBhc0FycmF5KGxlZnRFbnRyeSk7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBhY3RpdmVFbGVtZW50c1swXTtcbiAgICB2YXIgdG9wQ29tbW9uID0gZmFsc2U7XG4gICAgbGVmdEVudHJpZXMuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIHRvcENvbW1vbiA9IGdldENvbW1vblBhcmVudCh0b3BDb21tb24gfHwgZW50cnksIGVudHJ5KSB8fCB0b3BDb21tb247XG4gICAgICAgIHJpZ2h0RW50cmllcy5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoc3ViRW50cnkpIHtcbiAgICAgICAgICAgIHZhciBjb21tb24gPSBnZXRDb21tb25QYXJlbnQoYWN0aXZlRWxlbWVudCwgc3ViRW50cnkpO1xuICAgICAgICAgICAgaWYgKGNvbW1vbikge1xuICAgICAgICAgICAgICAgIGlmICghdG9wQ29tbW9uIHx8IGNvbnRhaW5zKGNvbW1vbiwgdG9wQ29tbW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0b3BDb21tb24gPSBjb21tb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b3BDb21tb24gPSBnZXRDb21tb25QYXJlbnQoY29tbW9uLCB0b3BDb21tb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gVE9ETzogYWRkIGFzc2VydCBoZXJlP1xuICAgIHJldHVybiB0b3BDb21tb247XG59O1xuLyoqXG4gKiByZXR1cm4gbGlzdCBvZiBub2RlcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gYmUgYXV0b2ZvY3VzZWQgaW5zaWRlIGEgZ2l2ZW4gdG9wIG5vZGVzXG4gKiBAcGFyYW0gZW50cmllc1xuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZVxuICovXG5leHBvcnQgdmFyIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiBlbnRyaWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBub2RlKSB7IHJldHVybiBhY2MuY29uY2F0KHBhcmVudEF1dG9mb2N1c2FibGVzKG5vZGUsIHZpc2liaWxpdHlDYWNoZSkpOyB9LCBbXSk7XG59O1xuIiwgImltcG9ydCB7IE5FV19GT0NVUywgbmV3Rm9jdXMgfSBmcm9tICcuL3NvbHZlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGFzQXJyYXksIGdldEZpcnN0IH0gZnJvbSAnLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBwaWNrQXV0b2ZvY3VzIH0gZnJvbSAnLi91dGlscy9hdXRvLWZvY3VzJztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xuaW1wb3J0IHsgaXNEZWZpbmVkLCBpc05vdEFHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMsIGdldFRvcENvbW1vblBhcmVudCB9IGZyb20gJy4vdXRpbHMvcGFyZW50aW5nJztcbnZhciByZW9yZGVyTm9kZXMgPSBmdW5jdGlvbiAoc3JjTm9kZXMsIGRzdE5vZGVzKSB7XG4gICAgdmFyIHJlbWFwID0gbmV3IE1hcCgpO1xuICAgIC8vIG5vIFNldChkc3ROb2RlcykgZm9yIElFMTEgOihcbiAgICBkc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHkpIHsgcmV0dXJuIHJlbWFwLnNldChlbnRpdHkubm9kZSwgZW50aXR5KTsgfSk7XG4gICAgLy8gcmVtYXAgdG8gZHN0Tm9kZXNcbiAgICByZXR1cm4gc3JjTm9kZXMubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiByZW1hcC5nZXQobm9kZSk7IH0pLmZpbHRlcihpc0RlZmluZWQpO1xufTtcbi8qKlxuICogY29udGFpbnMgdGhlIG1haW4gbG9naWMgb2YgdGhlIGBmb2N1cy1sb2NrYCBwYWNrYWdlLlxuICpcbiAqICEgeW91IHByb2JhYmx5IGRvbnQgbmVlZCB0aGlzIGZ1bmN0aW9uICFcbiAqXG4gKiBnaXZlbiB0b3Agbm9kZShzKSBhbmQgdGhlIGxhc3QgYWN0aXZlIGVsZW1lbnQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBiZSBmb2N1c2VkIG5leHRcbiAqIEByZXR1cm5zIGVsZW1lbnQgd2hpY2ggc2hvdWxkIGJlIGZvY3VzZWQgdG8gbW92ZSBmb2N1cyBpbnNpZGVcbiAqIEBwYXJhbSB0b3BOb2RlXG4gKiBAcGFyYW0gbGFzdE5vZGVcbiAqL1xuZXhwb3J0IHZhciBmb2N1c1NvbHZlciA9IGZ1bmN0aW9uICh0b3BOb2RlLCBsYXN0Tm9kZSkge1xuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChhc0FycmF5KHRvcE5vZGUpLmxlbmd0aCA+IDAgPyBkb2N1bWVudCA6IGdldEZpcnN0KHRvcE5vZGUpLm93bmVyRG9jdW1lbnQpO1xuICAgIHZhciBlbnRyaWVzID0gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5maWx0ZXIoaXNOb3RBR3VhcmQpO1xuICAgIHZhciBjb21tb25QYXJlbnQgPSBnZXRUb3BDb21tb25QYXJlbnQoYWN0aXZlRWxlbWVudCB8fCB0b3BOb2RlLCB0b3BOb2RlLCBlbnRyaWVzKTtcbiAgICB2YXIgdmlzaWJpbGl0eUNhY2hlID0gbmV3IE1hcCgpO1xuICAgIHZhciBhbnlGb2N1c2FibGUgPSBnZXRGb2N1c2FibGVOb2RlcyhlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpO1xuICAgIHZhciBpbm5lckVsZW1lbnRzID0gYW55Rm9jdXNhYmxlLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gaXNOb3RBR3VhcmQobm9kZSk7XG4gICAgfSk7XG4gICAgaWYgKCFpbm5lckVsZW1lbnRzWzBdKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBvdXRlck5vZGVzID0gZ2V0Rm9jdXNhYmxlTm9kZXMoW2NvbW1vblBhcmVudF0sIHZpc2liaWxpdHlDYWNoZSkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBvcmRlcmVkSW5uZXJFbGVtZW50cyA9IHJlb3JkZXJOb2RlcyhvdXRlck5vZGVzLCBpbm5lckVsZW1lbnRzKTtcbiAgICAvLyBjb2xsZWN0IGlubmVyIGZvY3VzYWJsZSBhbmQgc2VwYXJhdGVseSB0YWJiYWJsZXNcbiAgICB2YXIgaW5uZXJGb2N1c2FibGVzID0gb3JkZXJlZElubmVyRWxlbWVudHMubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBpbm5lclRhYmJhYmxlID0gb3JkZXJlZElubmVyRWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSBfYS50YWJJbmRleDtcbiAgICAgICAgcmV0dXJuIHRhYkluZGV4ID49IDA7XG4gICAgfSkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBuZXdJZCA9IG5ld0ZvY3VzKGlubmVyRm9jdXNhYmxlcywgaW5uZXJUYWJiYWJsZSwgb3V0ZXJOb2RlcywgYWN0aXZlRWxlbWVudCwgbGFzdE5vZGUpO1xuICAgIGlmIChuZXdJZCA9PT0gTkVXX0ZPQ1VTKSB7XG4gICAgICAgIHZhciBmb2N1c05vZGUgPSBcbiAgICAgICAgLy8gZmlyc3QgdHJ5IG9ubHkgdGFiYmFibGUsIGFuZCB0aGUgZmFsbGJhY2sgdG8gYWxsIGZvY3VzYWJsZSwgYXMgbG9uZyBhcyBhdCBsZWFzdCBvbmUgZWxlbWVudCBzaG91bGQgYmUgcGlja2VkIGZvciBmb2N1c1xuICAgICAgICBwaWNrQXV0b2ZvY3VzKGFueUZvY3VzYWJsZSwgaW5uZXJUYWJiYWJsZSwgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMoZW50cmllcywgdmlzaWJpbGl0eUNhY2hlKSkgfHxcbiAgICAgICAgICAgIHBpY2tBdXRvZm9jdXMoYW55Rm9jdXNhYmxlLCBpbm5lckZvY3VzYWJsZXMsIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkpO1xuICAgICAgICBpZiAoZm9jdXNOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBmb2N1c05vZGUgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZm9jdXMtbG9jazogY2Fubm90IGZpbmQgYW55IG5vZGUgdG8gbW92ZSBmb2N1cyBpbnRvJyk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChuZXdJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuZXdJZDtcbiAgICB9XG4gICAgcmV0dXJuIG9yZGVyZWRJbm5lckVsZW1lbnRzW25ld0lkXTtcbn07XG4iLCAiaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGlzR3VhcmQsIGlzTm90QUd1YXJkIH0gZnJvbSAnLi91dGlscy9pcyc7XG5pbXBvcnQgeyBnZXRUb3BDb21tb25QYXJlbnQgfSBmcm9tICcuL3V0aWxzL3BhcmVudGluZyc7XG5pbXBvcnQgeyBvcmRlckJ5VGFiSW5kZXggfSBmcm9tICcuL3V0aWxzL3RhYk9yZGVyJztcbmltcG9ydCB7IGdldEZvY3VzYWJsZXMgfSBmcm9tICcuL3V0aWxzL3RhYlV0aWxzJztcbi8qKlxuICogdHJhdmVyc2VzIGFsbCByZWxhdGVkIG5vZGVzIChpbmNsdWRpbmcgZ3JvdXBzKSByZXR1cm5pbmcgYSBsaXN0IG9mIGFsbCBub2RlcyhvdXRlciBhbmQgaW50ZXJuYWwpIHdpdGggbWV0YSBpbmZvcm1hdGlvblxuICogVGhpcyBpcyBsb3ctbGV2ZWwgQVBJIVxuICogQHJldHVybnMgbGlzdCBvZiBmb2N1c2FibGUgZWxlbWVudHMgaW5zaWRlIGEgZ2l2ZW4gdG9wKCEpIG5vZGUuXG4gKiBAc2VlIHtAbGluayBnZXRGb2N1c2FibGVOb2Rlc30gcHJvdmlkaW5nIGEgc2ltcGxlciBBUElcbiAqL1xuZXhwb3J0IHZhciBleHBhbmRGb2N1c2FibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRBbGxBZmZlY3RlZE5vZGVzKHRvcE5vZGUpLmZpbHRlcihpc05vdEFHdWFyZCk7XG4gICAgdmFyIGNvbW1vblBhcmVudCA9IGdldFRvcENvbW1vblBhcmVudCh0b3BOb2RlLCB0b3BOb2RlLCBlbnRyaWVzKTtcbiAgICB2YXIgb3V0ZXJOb2RlcyA9IG9yZGVyQnlUYWJJbmRleChnZXRGb2N1c2FibGVzKFtjb21tb25QYXJlbnRdLCB0cnVlKSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgdmFyIGlubmVyRWxlbWVudHMgPSBnZXRGb2N1c2FibGVzKGVudHJpZXMsIGZhbHNlKTtcbiAgICByZXR1cm4gb3V0ZXJOb2Rlcy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZSwgaW5kZXggPSBfYS5pbmRleDtcbiAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgbG9ja0l0ZW06IGlubmVyRWxlbWVudHMuaW5kZXhPZihub2RlKSA+PSAwLFxuICAgICAgICAgICAgZ3VhcmQ6IGlzR3VhcmQobm9kZSksXG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiIsICJleHBvcnQgdmFyIGZvY3VzT24gPSBmdW5jdGlvbiAodGFyZ2V0LCBmb2N1c09wdGlvbnMpIHtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAvLyBub3QgY2xlYXIgaG93LCBidXQgaXMgcG9zc2libGUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9mb2N1cy1sb2NrL2lzc3Vlcy81M1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgnZm9jdXMnIGluIHRhcmdldCkge1xuICAgICAgICB0YXJnZXQuZm9jdXMoZm9jdXNPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCdjb250ZW50V2luZG93JyBpbiB0YXJnZXQgJiYgdGFyZ2V0LmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgdGFyZ2V0LmNvbnRlbnRXaW5kb3cuZm9jdXMoKTtcbiAgICB9XG59O1xuIiwgImltcG9ydCB7IGZvY3VzT24gfSBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IGZvY3VzU29sdmVyIH0gZnJvbSAnLi9mb2N1c1NvbHZlcic7XG52YXIgZ3VhcmRDb3VudCA9IDA7XG52YXIgbG9ja0Rpc2FibGVkID0gZmFsc2U7XG4vKipcbiAqIFRoZSBtYWluIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGZvY3VzLWxvY2sgcGFja2FnZVxuICpcbiAqIENvbnRhaW5zIGZvY3VzIGF0IGEgZ2l2ZW4gbm9kZS5cbiAqIFRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aWxsIGhlbHAgdG8gZGV0ZXJtaW5lIHdoaWNoIGVsZW1lbnQoZmlyc3Qgb3IgbGFzdCkgc2hvdWxkIGJlIGZvY3VzZWQuXG4gKiBUaGUgZm91bmQgZWxlbWVudCB3aWxsIGJlIGZvY3VzZWQuXG4gKlxuICogVGhpcyBpcyBvbmUgdGltZSBhY3Rpb24gKG1vdmUpLCBub3QgYSBwZXJzaXN0ZW50IGZvY3VzLWxvY2tcbiAqXG4gKiBIVE1MIG1hcmtlcnMgKHNlZSB7QGxpbmsgaW1wb3J0KCcuL2NvbnN0YW50cycpLkZPQ1VTX0FVVE99IGNvbnN0YW50cykgY2FuIGNvbnRyb2wgYXV0b2ZvY3VzXG4gKiBAc2VlIHtAbGluayBmb2N1c1NvbHZlcn0gZm9yIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBhdXRvZm9jdXNcbiAqL1xuZXhwb3J0IHZhciBtb3ZlRm9jdXNJbnNpZGUgPSBmdW5jdGlvbiAodG9wTm9kZSwgbGFzdE5vZGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBmb2N1c2FibGUgPSBmb2N1c1NvbHZlcih0b3BOb2RlLCBsYXN0Tm9kZSk7XG4gICAgLy8gZ2xvYmFsIGxvY2FsIHNpZGUgZWZmZWN0IHRvIGNvdW50YWluIHJlY3Vyc2l2ZSBsb2NrIGFjdGl2YXRpb24gYW5kIHJlc29sdmUgZm9jdXMtZmlnaHRpbmdcbiAgICBpZiAobG9ja0Rpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZvY3VzYWJsZSkge1xuICAgICAgICAvKiogK0ZPQ1VTLUZJR0hUSU5HIHByZXZlbnRpb24gKiovXG4gICAgICAgIGlmIChndWFyZENvdW50ID4gMikge1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSByZWN1cnNpdmUgZW50ZXJlZCBiYWNrIHRoZSBsb2NrIGFjdGl2YXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZvY3VzTG9jazogZm9jdXMtZmlnaHRpbmcgZGV0ZWN0ZWQuIE9ubHkgb25lIGZvY3VzIG1hbmFnZW1lbnQgc3lzdGVtIGNvdWxkIGJlIGFjdGl2ZS4gJyArXG4gICAgICAgICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L2ZvY3VzLWxvY2svI2ZvY3VzLWZpZ2h0aW5nJyk7XG4gICAgICAgICAgICBsb2NrRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9ja0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBndWFyZENvdW50Kys7XG4gICAgICAgIGZvY3VzT24oZm9jdXNhYmxlLm5vZGUsIG9wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICAgICAgZ3VhcmRDb3VudC0tO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHsgZ2V0VGFiYmFibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuZnVuY3Rpb24gd2Vha1JlZih2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICM2OCBTYWZhcmkgMTQuMSBkb250IGhhdmUgaXQgeWV0XG4gICAgLy8gRklYTUU6IHJlbW92ZSBpbiAyMDI1XG4gICAgaWYgKHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWUgfHwgbnVsbDsgfTtcbiAgICB9XG4gICAgdmFyIHcgPSB2YWx1ZSA/IG5ldyBXZWFrUmVmKHZhbHVlKSA6IG51bGw7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuICh3ID09PSBudWxsIHx8IHcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHcuZGVyZWYoKSkgfHwgbnVsbDsgfTtcbn1cbmV4cG9ydCB2YXIgcmVjb3JkRWxlbWVudExvY2F0aW9uID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgd2hpbGUgKGN1cnJlbnRFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgY3VycmVudDogd2Vha1JlZihjdXJyZW50RWxlbWVudCksXG4gICAgICAgICAgICBwYXJlbnQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudCksXG4gICAgICAgICAgICBsZWZ0OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpLFxuICAgICAgICAgICAgcmlnaHQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudDogd2Vha1JlZihlbGVtZW50KSxcbiAgICAgICAgc3RhY2s6IHN0YWNrLFxuICAgICAgICBvd25lckRvY3VtZW50OiBlbGVtZW50Lm93bmVyRG9jdW1lbnQsXG4gICAgfTtcbn07XG52YXIgcmVzdG9yZUZvY3VzVG8gPSBmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIHN0YWNrID0gbG9jYXRpb24uc3RhY2ssIG93bmVyRG9jdW1lbnQgPSBsb2NhdGlvbi5vd25lckRvY3VtZW50O1xuICAgIHZhciB2aXNpYmlsaXR5Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgZm9yICh2YXIgX2kgPSAwLCBzdGFja18xID0gc3RhY2s7IF9pIDwgc3RhY2tfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIGxpbmUgPSBzdGFja18xW19pXTtcbiAgICAgICAgdmFyIHBhcmVudF8xID0gKF9hID0gbGluZS5wYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGxpbmUpO1xuICAgICAgICAvLyBpcyBpdCBzdGlsbCBoZXJlP1xuICAgICAgICBpZiAocGFyZW50XzEgJiYgb3duZXJEb2N1bWVudC5jb250YWlucyhwYXJlbnRfMSkpIHtcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gKF9iID0gbGluZS5sZWZ0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChsaW5lKTtcbiAgICAgICAgICAgIHZhciBzYXZlZEN1cnJlbnQgPSBsaW5lLmN1cnJlbnQoKTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gcGFyZW50XzEuY29udGFpbnMoc2F2ZWRDdXJyZW50KSA/IHNhdmVkQ3VycmVudCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHZhciByaWdodCA9IChfYyA9IGxpbmUucmlnaHQpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYWxsKGxpbmUpO1xuICAgICAgICAgICAgdmFyIGZvY3VzYWJsZXMgPSBnZXRUYWJiYWJsZU5vZGVzKFtwYXJlbnRfMV0sIHZpc2liaWxpdHlDYWNoZSk7XG4gICAgICAgICAgICB2YXIgYWltID0gXG4gICAgICAgICAgICAvLyB0aGF0IGlzIGVsZW1lbnQgaXRzZWxmXG4gICAgICAgICAgICAoX2UgPSAoX2QgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQgIT09IHZvaWQgMCA/IGN1cnJlbnQgOiBcbiAgICAgICAgICAgIC8vIG9yIHNvbWV0aGluZyBpbiBpdCdzIHBsYWNlXG4gICAgICAgICAgICBsZWZ0ID09PSBudWxsIHx8IGxlZnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxlZnQubmV4dEVsZW1lbnRTaWJsaW5nKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBcbiAgICAgICAgICAgIC8vIG9yIHNvbWVib2R5IHRvIHRoZSByaWdodCwgc3RpbGwgY2xvc2UgZW5vdWdoXG4gICAgICAgICAgICByaWdodCkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogXG4gICAgICAgICAgICAvLyBvciBzb21lYm9keSB0byB0aGUgbGVmdCwgc29tZXRoaW5nP1xuICAgICAgICAgICAgbGVmdDtcbiAgICAgICAgICAgIHdoaWxlIChhaW0pIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZiA9IDAsIGZvY3VzYWJsZXNfMSA9IGZvY3VzYWJsZXM7IF9mIDwgZm9jdXNhYmxlc18xLmxlbmd0aDsgX2YrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9jdXNhYmxlID0gZm9jdXNhYmxlc18xW19mXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFpbSA9PT0gbnVsbCB8fCBhaW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFpbS5jb250YWlucyhmb2N1c2FibGUubm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGUubm9kZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhaW0gPSBhaW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvY3VzYWJsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgcGFyZW50IGNvbnRhaW5zIGEgZm9jdXNhYmxlIC0gbW92ZSB0aGVyZVxuICAgICAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGVzWzBdLm5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbm90aGluZyBtYXRjaGVkXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4vKipcbiAqIENhcHR1cmVzIHRoZSBjdXJyZW50IGZvY3VzZWQgZWxlbWVudCB0byByZXN0b3JlIGZvY3VzIGFzIGNsb3NlIGFzIHBvc3NpYmxlIGluIHRoZSBmdXR1cmVcbiAqIEhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSB0aGUgZm9jdXNlZCBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIG5vIGxvbmdlciBmb2N1c2FibGVcbiAqIG1vdmluZyBmb2N1cyB0byB0aGUgY2xvc2VzdCBmb2N1c2FibGUgZWxlbWVudFxuICogQHBhcmFtIHRhcmdldEVsZW1lbnQgLSBlbGVtZW50IHdoZXJlIGZvY3VzIHNob3VsZCBiZSByZXN0b3JlZFxuICogQHJldHVybnMgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBuZXcgZWxlbWVudCB0byBmb2N1c1xuICovXG5leHBvcnQgdmFyIGNhcHR1cmVGb2N1c1Jlc3RvcmUgPSBmdW5jdGlvbiAodGFyZ2V0RWxlbWVudCkge1xuICAgIHZhciBsb2NhdGlvbiA9IHJlY29yZEVsZW1lbnRMb2NhdGlvbih0YXJnZXRFbGVtZW50KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVzdG9yZUZvY3VzVG8obG9jYXRpb24pO1xuICAgIH07XG59O1xuIiwgImltcG9ydCB7IGZvY3VzT24gfSBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IGdldFRhYmJhYmxlTm9kZXMsIGNvbnRhaW5zLCBnZXRGb2N1c2FibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuLyoqXG4gKiBmb3IgYSBnaXZlbiBgZWxlbWVudGAgaW4gYSBnaXZlbiBgc2NvcGVgIHJldHVybnMgZm9jdXNhYmxlIHNpYmxpbmdzXG4gKiBAcGFyYW0gZWxlbWVudCAtIGJhc2UgZWxlbWVudFxuICogQHBhcmFtIHNjb3BlIC0gY29tbW9uIHBhcmVudC4gQ2FuIGJlIGRvY3VtZW50LCBidXQgYmV0dGVyIHRvIG5hcnJvdyBpdCBkb3duIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gKiBAcmV0dXJucyB7cHJldixuZXh0fSAtIHJlZmVyZW5jZXMgdG8gYSBmb2N1c2FibGUgZWxlbWVudCBiZWZvcmUgYW5kIGFmdGVyXG4gKiBAcmV0dXJucyB1bmRlZmluZWQgLSBpZiBvcGVyYXRpb24gaXMgbm90IGFwcGxpY2FibGVcbiAqL1xuZXhwb3J0IHZhciBnZXRSZWxhdGl2ZUZvY3VzYWJsZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBzY29wZSwgdXNlVGFiYmFibGVzKSB7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFzY29wZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdubyBlbGVtZW50IG9yIHNjb3BlIGdpdmVuJyk7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgdmFyIHNoYXJkcyA9IGFzQXJyYXkoc2NvcGUpO1xuICAgIGlmIChzaGFyZHMuZXZlcnkoZnVuY3Rpb24gKHNoYXJkKSB7IHJldHVybiAhY29udGFpbnMoc2hhcmQsIGVsZW1lbnQpOyB9KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmUgZWxlbWVudCBpcyBub3QgY29udGFpbmVkIGluIHRoZSBzY29wZScpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHZhciBmb2N1c2FibGVzID0gdXNlVGFiYmFibGVzXG4gICAgICAgID8gZ2V0VGFiYmFibGVOb2RlcyhzaGFyZHMsIG5ldyBNYXAoKSlcbiAgICAgICAgOiBnZXRGb2N1c2FibGVOb2RlcyhzaGFyZHMsIG5ldyBNYXAoKSk7XG4gICAgdmFyIGN1cnJlbnQgPSBmb2N1c2FibGVzLmZpbmRJbmRleChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZSA9PT0gZWxlbWVudDtcbiAgICB9KTtcbiAgICBpZiAoY3VycmVudCA9PT0gLTEpIHtcbiAgICAgICAgLy8gYW4gZWRnZSBjYXNlLCB3aGVuIGFuY2hvciBlbGVtZW50IGlzIG5vdCBmb3VuZFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwcmV2OiBmb2N1c2FibGVzW2N1cnJlbnQgLSAxXSxcbiAgICAgICAgbmV4dDogZm9jdXNhYmxlc1tjdXJyZW50ICsgMV0sXG4gICAgICAgIGZpcnN0OiBmb2N1c2FibGVzWzBdLFxuICAgICAgICBsYXN0OiBmb2N1c2FibGVzW2ZvY3VzYWJsZXMubGVuZ3RoIC0gMV0sXG4gICAgfTtcbn07XG52YXIgZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbiAoc2hhcmRzLCB1c2VUYWJiYWJsZXMpIHtcbiAgICB2YXIgc2V0ID0gdXNlVGFiYmFibGVzXG4gICAgICAgID8gZ2V0VGFiYmFibGVOb2Rlcyhhc0FycmF5KHNoYXJkcyksIG5ldyBNYXAoKSlcbiAgICAgICAgOiBnZXRGb2N1c2FibGVOb2Rlcyhhc0FycmF5KHNoYXJkcyksIG5ldyBNYXAoKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmlyc3Q6IHNldFswXSxcbiAgICAgICAgbGFzdDogc2V0W3NldC5sZW5ndGggLSAxXSxcbiAgICB9O1xufTtcbnZhciBkZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBzY29wZTogZG9jdW1lbnQuYm9keSxcbiAgICAgICAgY3ljbGU6IHRydWUsXG4gICAgICAgIG9ubHlUYWJiYWJsZTogdHJ1ZSxcbiAgICB9LCBvcHRpb25zKTtcbn07XG52YXIgbW92ZUZvY3VzID0gZnVuY3Rpb24gKGZyb21FbGVtZW50LCBvcHRpb25zLCBjYikge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIG5ld09wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgc29sdXRpb24gPSBnZXRSZWxhdGl2ZUZvY3VzYWJsZShmcm9tRWxlbWVudCwgbmV3T3B0aW9ucy5zY29wZSwgbmV3T3B0aW9ucy5vbmx5VGFiYmFibGUpO1xuICAgIGlmICghc29sdXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGFyZ2V0ID0gY2Ioc29sdXRpb24sIG5ld09wdGlvbnMuY3ljbGUpO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgZm9jdXNPbih0YXJnZXQubm9kZSwgbmV3T3B0aW9ucy5mb2N1c09wdGlvbnMpO1xuICAgIH1cbn07XG4vKipcbiAqIGZvY3VzZXMgbmV4dCBlbGVtZW50IGluIHRoZSB0YWItb3JkZXJcbiAqIEBwYXJhbSBmcm9tRWxlbWVudCAtIGNvbW1vbiBwYXJlbnQgdG8gc2NvcGUgYWN0aXZlIGVsZW1lbnQgc2VhcmNoIG9yIHRhYiBjeWNsZSBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBbb3B0aW9uc10gLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNOZXh0RWxlbWVudCA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgbW92ZUZvY3VzKGZyb21FbGVtZW50LCBvcHRpb25zLCBmdW5jdGlvbiAoX2EsIGN5Y2xlKSB7XG4gICAgICAgIHZhciBuZXh0ID0gX2EubmV4dCwgZmlyc3QgPSBfYS5maXJzdDtcbiAgICAgICAgcmV0dXJuIG5leHQgfHwgKGN5Y2xlICYmIGZpcnN0KTtcbiAgICB9KTtcbn07XG4vKipcbiAqIGZvY3VzZXMgcHJldiBlbGVtZW50IGluIHRoZSB0YWIgb3JkZXJcbiAqIEBwYXJhbSBmcm9tRWxlbWVudCAtIGNvbW1vbiBwYXJlbnQgdG8gc2NvcGUgYWN0aXZlIGVsZW1lbnQgc2VhcmNoIG9yIHRhYiBjeWNsZSBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBbb3B0aW9uc10gLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNQcmV2RWxlbWVudCA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgbW92ZUZvY3VzKGZyb21FbGVtZW50LCBvcHRpb25zLCBmdW5jdGlvbiAoX2EsIGN5Y2xlKSB7XG4gICAgICAgIHZhciBwcmV2ID0gX2EucHJldiwgbGFzdCA9IF9hLmxhc3Q7XG4gICAgICAgIHJldHVybiBwcmV2IHx8IChjeWNsZSAmJiBsYXN0KTtcbiAgICB9KTtcbn07XG52YXIgcGlja0JvdW5kYXJ5ID0gZnVuY3Rpb24gKHNjb3BlLCBvcHRpb25zLCB3aGF0KSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciBib3VuZGFyeSA9IGdldEJvdW5kYXJ5KHNjb3BlLCAoX2EgPSBvcHRpb25zLm9ubHlUYWJiYWJsZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZSk7XG4gICAgdmFyIG5vZGUgPSBib3VuZGFyeVt3aGF0XTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgICBmb2N1c09uKG5vZGUubm9kZSwgb3B0aW9ucy5mb2N1c09wdGlvbnMpO1xuICAgIH1cbn07XG4vKipcbiAqIGZvY3VzZXMgZmlyc3QgZWxlbWVudCBpbiB0aGUgdGFiLW9yZGVyXG4gKiBAcGFyYW0ge0ZvY3VzTmV4dE9wdGlvbnN9IG9wdGlvbnMgLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNGaXJzdEVsZW1lbnQgPSBmdW5jdGlvbiAoc2NvcGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHBpY2tCb3VuZGFyeShzY29wZSwgb3B0aW9ucywgJ2ZpcnN0Jyk7XG59O1xuLyoqXG4gKiBmb2N1c2VzIGxhc3QgZWxlbWVudCBpbiB0aGUgdGFiIG9yZGVyXG4gKiBAcGFyYW0ge0ZvY3VzTmV4dE9wdGlvbnN9IG9wdGlvbnMgLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNMYXN0RWxlbWVudCA9IGZ1bmN0aW9uIChzY29wZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcGlja0JvdW5kYXJ5KHNjb3BlLCBvcHRpb25zLCAnbGFzdCcpO1xufTtcbiIsICJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuL1RyYXAnO1xuaW1wb3J0IHsgbWVkaXVtU2lkZWNhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIobWVkaXVtU2lkZWNhciwgRm9jdXNUcmFwKTsiLCAiaW1wb3J0IHsgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsQmFyIH0gZnJvbSAncmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXInO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgbm9uUGFzc2l2ZSB9IGZyb20gJy4vYWdncmVzaXZlQ2FwdHVyZSc7XG5pbXBvcnQgeyBoYW5kbGVTY3JvbGwsIGxvY2F0aW9uQ291bGRCZVNjcm9sbGVkIH0gZnJvbSAnLi9oYW5kbGVTY3JvbGwnO1xuZXhwb3J0IHZhciBnZXRUb3VjaFhZID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdjaGFuZ2VkVG91Y2hlcycgaW4gZXZlbnQgPyBbZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCwgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WV0gOiBbMCwgMF07XG59O1xuZXhwb3J0IHZhciBnZXREZWx0YVhZID0gZnVuY3Rpb24gKGV2ZW50KSB7IHJldHVybiBbZXZlbnQuZGVsdGFYLCBldmVudC5kZWx0YVldOyB9O1xudmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgcmV0dXJuIHJlZiAmJiAnY3VycmVudCcgaW4gcmVmID8gcmVmLmN1cnJlbnQgOiByZWY7XG59O1xudmFyIGRlbHRhQ29tcGFyZSA9IGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiB4WzBdID09PSB5WzBdICYmIHhbMV0gPT09IHlbMV07IH07XG52YXIgZ2VuZXJhdGVTdHlsZSA9IGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gXCJcXG4gIC5ibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCwgXCIge3BvaW50ZXItZXZlbnRzOiBub25lO31cXG4gIC5hbGxvdy1pbnRlcmFjdGl2aXR5LVwiKS5jb25jYXQoaWQsIFwiIHtwb2ludGVyLWV2ZW50czogYWxsO31cXG5cIik7IH07XG52YXIgaWRDb3VudGVyID0gMDtcbnZhciBsb2NrU3RhY2sgPSBbXTtcbmV4cG9ydCBmdW5jdGlvbiBSZW1vdmVTY3JvbGxTaWRlQ2FyKHByb3BzKSB7XG4gICAgdmFyIHNob3VsZFByZXZlbnRRdWV1ZSA9IFJlYWN0LnVzZVJlZihbXSk7XG4gICAgdmFyIHRvdWNoU3RhcnRSZWYgPSBSZWFjdC51c2VSZWYoWzAsIDBdKTtcbiAgICB2YXIgYWN0aXZlQXhpcyA9IFJlYWN0LnVzZVJlZigpO1xuICAgIHZhciBpZCA9IFJlYWN0LnVzZVN0YXRlKGlkQ291bnRlcisrKVswXTtcbiAgICB2YXIgU3R5bGUgPSBSZWFjdC51c2VTdGF0ZShzdHlsZVNpbmdsZXRvbilbMF07XG4gICAgdmFyIGxhc3RQcm9wcyA9IFJlYWN0LnVzZVJlZihwcm9wcyk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGFzdFByb3BzLmN1cnJlbnQgPSBwcm9wcztcbiAgICB9LCBbcHJvcHNdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocHJvcHMuaW5lcnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImJsb2NrLWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7XG4gICAgICAgICAgICB2YXIgYWxsb3dfMSA9IF9fc3ByZWFkQXJyYXkoW3Byb3BzLmxvY2tSZWYuY3VycmVudF0sIChwcm9wcy5zaGFyZHMgfHwgW10pLm1hcChleHRyYWN0UmVmKSwgdHJ1ZSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICAgICAgYWxsb3dfMS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2xhc3NMaXN0LmFkZChcImFsbG93LWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7IH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpO1xuICAgICAgICAgICAgICAgIGFsbG93XzEuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoXCJhbGxvdy1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpOyB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH0sIFtwcm9wcy5pbmVydCwgcHJvcHMubG9ja1JlZi5jdXJyZW50LCBwcm9wcy5zaGFyZHNdKTtcbiAgICB2YXIgc2hvdWxkQ2FuY2VsRXZlbnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQsIHBhcmVudCkge1xuICAgICAgICBpZiAoJ3RvdWNoZXMnIGluIGV2ZW50ICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gIWxhc3RQcm9wcy5jdXJyZW50LmFsbG93UGluY2hab29tO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b3VjaCA9IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICB2YXIgdG91Y2hTdGFydCA9IHRvdWNoU3RhcnRSZWYuY3VycmVudDtcbiAgICAgICAgdmFyIGRlbHRhWCA9ICdkZWx0YVgnIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFYIDogdG91Y2hTdGFydFswXSAtIHRvdWNoWzBdO1xuICAgICAgICB2YXIgZGVsdGFZID0gJ2RlbHRhWScgaW4gZXZlbnQgPyBldmVudC5kZWx0YVkgOiB0b3VjaFN0YXJ0WzFdIC0gdG91Y2hbMV07XG4gICAgICAgIHZhciBjdXJyZW50QXhpcztcbiAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgdmFyIG1vdmVEaXJlY3Rpb24gPSBNYXRoLmFicyhkZWx0YVgpID4gTWF0aC5hYnMoZGVsdGFZKSA/ICdoJyA6ICd2JztcbiAgICAgICAgLy8gYWxsb3cgaG9yaXpvbnRhbCB0b3VjaCBtb3ZlIG9uIFJhbmdlIGlucHV0cy4gVGhleSB3aWxsIG5vdCBjYXVzZSBhbnkgc2Nyb2xsXG4gICAgICAgIGlmICgndG91Y2hlcycgaW4gZXZlbnQgJiYgbW92ZURpcmVjdGlvbiA9PT0gJ2gnICYmIHRhcmdldC50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24gPSBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZChtb3ZlRGlyZWN0aW9uLCB0YXJnZXQpO1xuICAgICAgICBpZiAoIWNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBjdXJyZW50QXhpcyA9IG1vdmVEaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50QXhpcyA9IG1vdmVEaXJlY3Rpb24gPT09ICd2JyA/ICdoJyA6ICd2JztcbiAgICAgICAgICAgIGNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24gPSBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZChtb3ZlRGlyZWN0aW9uLCB0YXJnZXQpO1xuICAgICAgICAgICAgLy8gb3RoZXIgYXhpcyBtaWdodCBiZSBub3Qgc2Nyb2xsYWJsZVxuICAgICAgICB9XG4gICAgICAgIGlmICghY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYWN0aXZlQXhpcy5jdXJyZW50ICYmICdjaGFuZ2VkVG91Y2hlcycgaW4gZXZlbnQgJiYgKGRlbHRhWCB8fCBkZWx0YVkpKSB7XG4gICAgICAgICAgICBhY3RpdmVBeGlzLmN1cnJlbnQgPSBjdXJyZW50QXhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN1cnJlbnRBeGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FuY2VsaW5nQXhpcyA9IGFjdGl2ZUF4aXMuY3VycmVudCB8fCBjdXJyZW50QXhpcztcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNjcm9sbChjYW5jZWxpbmdBeGlzLCBwYXJlbnQsIGV2ZW50LCBjYW5jZWxpbmdBeGlzID09PSAnaCcgPyBkZWx0YVggOiBkZWx0YVksIHRydWUpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2hvdWxkUHJldmVudCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfZXZlbnQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gX2V2ZW50O1xuICAgICAgICBpZiAoIWxvY2tTdGFjay5sZW5ndGggfHwgbG9ja1N0YWNrW2xvY2tTdGFjay5sZW5ndGggLSAxXSAhPT0gU3R5bGUpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbGFzdCBhY3RpdmVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsdGEgPSAnZGVsdGFZJyBpbiBldmVudCA/IGdldERlbHRhWFkoZXZlbnQpIDogZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIHZhciBzb3VyY2VFdmVudCA9IHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5uYW1lID09PSBldmVudC50eXBlICYmIChlLnRhcmdldCA9PT0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnRhcmdldCA9PT0gZS5zaGFkb3dQYXJlbnQpICYmIGRlbHRhQ29tcGFyZShlLmRlbHRhLCBkZWx0YSk7IH0pWzBdO1xuICAgICAgICAvLyBzZWxmIGV2ZW50LCBhbmQgc2hvdWxkIGJlIGNhbmNlbGVkXG4gICAgICAgIGlmIChzb3VyY2VFdmVudCAmJiBzb3VyY2VFdmVudC5zaG91bGQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdXRzaWRlIG9yIHNoYXJkIGV2ZW50XG4gICAgICAgIGlmICghc291cmNlRXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBzaGFyZE5vZGVzID0gKGxhc3RQcm9wcy5jdXJyZW50LnNoYXJkcyB8fCBbXSlcbiAgICAgICAgICAgICAgICAubWFwKGV4dHJhY3RSZWYpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuY29udGFpbnMoZXZlbnQudGFyZ2V0KTsgfSk7XG4gICAgICAgICAgICB2YXIgc2hvdWxkU3RvcCA9IHNoYXJkTm9kZXMubGVuZ3RoID4gMCA/IHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBzaGFyZE5vZGVzWzBdKSA6ICFsYXN0UHJvcHMuY3VycmVudC5ub0lzb2xhdGlvbjtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdG9wKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgdmFyIHNob3VsZENhbmNlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuYW1lLCBkZWx0YSwgdGFyZ2V0LCBzaG91bGQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0geyBuYW1lOiBuYW1lLCBkZWx0YTogZGVsdGEsIHRhcmdldDogdGFyZ2V0LCBzaG91bGQ6IHNob3VsZCwgc2hhZG93UGFyZW50OiBnZXRPdXRlcm1vc3RTaGFkb3dQYXJlbnQodGFyZ2V0KSB9O1xuICAgICAgICBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5wdXNoKGV2ZW50KTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudCA9IHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSAhPT0gZXZlbnQ7IH0pO1xuICAgICAgICB9LCAxKTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFRvdWNoU3RhcnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdG91Y2hTdGFydFJlZi5jdXJyZW50ID0gZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIGFjdGl2ZUF4aXMuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFdoZWVsID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHNob3VsZENhbmNlbChldmVudC50eXBlLCBnZXREZWx0YVhZKGV2ZW50KSwgZXZlbnQudGFyZ2V0LCBzaG91bGRDYW5jZWxFdmVudChldmVudCwgcHJvcHMubG9ja1JlZi5jdXJyZW50KSk7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxUb3VjaE1vdmUgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsKGV2ZW50LnR5cGUsIGdldFRvdWNoWFkoZXZlbnQpLCBldmVudC50YXJnZXQsIHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBwcm9wcy5sb2NrUmVmLmN1cnJlbnQpKTtcbiAgICB9LCBbXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG9ja1N0YWNrLnB1c2goU3R5bGUpO1xuICAgICAgICBwcm9wcy5zZXRDYWxsYmFja3Moe1xuICAgICAgICAgICAgb25TY3JvbGxDYXB0dXJlOiBzY3JvbGxXaGVlbCxcbiAgICAgICAgICAgIG9uV2hlZWxDYXB0dXJlOiBzY3JvbGxXaGVlbCxcbiAgICAgICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZTogc2Nyb2xsVG91Y2hNb3ZlLFxuICAgICAgICB9KTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBzY3JvbGxUb3VjaFN0YXJ0LCBub25QYXNzaXZlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvY2tTdGFjayA9IGxvY2tTdGFjay5maWx0ZXIoZnVuY3Rpb24gKGluc3QpIHsgcmV0dXJuIGluc3QgIT09IFN0eWxlOyB9KTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBzY3JvbGxUb3VjaFN0YXJ0LCBub25QYXNzaXZlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHJlbW92ZVNjcm9sbEJhciA9IHByb3BzLnJlbW92ZVNjcm9sbEJhciwgaW5lcnQgPSBwcm9wcy5pbmVydDtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIGluZXJ0ID8gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IGdlbmVyYXRlU3R5bGUoaWQpIH0pIDogbnVsbCxcbiAgICAgICAgcmVtb3ZlU2Nyb2xsQmFyID8gUmVhY3QuY3JlYXRlRWxlbWVudChSZW1vdmVTY3JvbGxCYXIsIHsgZ2FwTW9kZTogcHJvcHMuZ2FwTW9kZSB9KSA6IG51bGwpKTtcbn1cbmZ1bmN0aW9uIGdldE91dGVybW9zdFNoYWRvd1BhcmVudChub2RlKSB7XG4gICAgdmFyIHNoYWRvd1BhcmVudCA9IG51bGw7XG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBzaGFkb3dQYXJlbnQgPSBub2RlLmhvc3Q7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBzaGFkb3dQYXJlbnQ7XG59XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgZnVsbFdpZHRoQ2xhc3NOYW1lLCB6ZXJvUmlnaHRDbGFzc05hbWUsIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgcmVtb3ZlZEJhclNpemVWYXJpYWJsZSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldEdhcFdpZHRoIH0gZnJvbSAnLi91dGlscyc7XG52YXIgU3R5bGUgPSBzdHlsZVNpbmdsZXRvbigpO1xuZXhwb3J0IHZhciBsb2NrQXR0cmlidXRlID0gJ2RhdGEtc2Nyb2xsLWxvY2tlZCc7XG4vLyBpbXBvcnRhbnQgdGlwIC0gb25jZSB3ZSBtZWFzdXJlIHNjcm9sbEJhciB3aWR0aCBhbmQgcmVtb3ZlIHRoZW1cbi8vIHdlIGNvdWxkIG5vdCByZXBlYXQgdGhpcyBvcGVyYXRpb25cbi8vIHRodXMgd2UgYXJlIHVzaW5nIHN0eWxlLXNpbmdsZXRvbiAtIG9ubHkgdGhlIGZpcnN0IFwieWV0IGNvcnJlY3RcIiBzdHlsZSB3aWxsIGJlIGFwcGxpZWQuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24gKF9hLCBhbGxvd1JlbGF0aXZlLCBnYXBNb2RlLCBpbXBvcnRhbnQpIHtcbiAgICB2YXIgbGVmdCA9IF9hLmxlZnQsIHRvcCA9IF9hLnRvcCwgcmlnaHQgPSBfYS5yaWdodCwgZ2FwID0gX2EuZ2FwO1xuICAgIGlmIChnYXBNb2RlID09PSB2b2lkIDApIHsgZ2FwTW9kZSA9ICdtYXJnaW4nOyB9XG4gICAgcmV0dXJuIFwiXFxuICAuXCIuY29uY2F0KG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgXCIge1xcbiAgIG92ZXJmbG93OiBoaWRkZW4gXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgIHBhZGRpbmctcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIGJvZHlbXCIpLmNvbmNhdChsb2NrQXR0cmlidXRlLCBcIl0ge1xcbiAgICBvdmVyZmxvdzogaGlkZGVuIFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcXG4gICAgXCIpLmNvbmNhdChbXG4gICAgICAgIGFsbG93UmVsYXRpdmUgJiYgXCJwb3NpdGlvbjogcmVsYXRpdmUgXCIuY29uY2F0KGltcG9ydGFudCwgXCI7XCIpLFxuICAgICAgICBnYXBNb2RlID09PSAnbWFyZ2luJyAmJlxuICAgICAgICAgICAgXCJcXG4gICAgcGFkZGluZy1sZWZ0OiBcIi5jb25jYXQobGVmdCwgXCJweDtcXG4gICAgcGFkZGluZy10b3A6IFwiKS5jb25jYXQodG9wLCBcInB4O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiBcIikuY29uY2F0KHJpZ2h0LCBcInB4O1xcbiAgICBtYXJnaW4tbGVmdDowO1xcbiAgICBtYXJnaW4tdG9wOjA7XFxuICAgIG1hcmdpbi1yaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgICBcIiksXG4gICAgICAgIGdhcE1vZGUgPT09ICdwYWRkaW5nJyAmJiBcInBhZGRpbmctcmlnaHQ6IFwiLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1wiKSxcbiAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJycpLCBcIlxcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIHtcXG4gICAgcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoZnVsbFdpZHRoQ2xhc3NOYW1lLCBcIiB7XFxuICAgIG1hcmdpbi1yaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIC5cIikuY29uY2F0KHplcm9SaWdodENsYXNzTmFtZSwgXCIge1xcbiAgICByaWdodDogMCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIgLlwiKS5jb25jYXQoZnVsbFdpZHRoQ2xhc3NOYW1lLCBcIiB7XFxuICAgIG1hcmdpbi1yaWdodDogMCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIGJvZHlbXCIpLmNvbmNhdChsb2NrQXR0cmlidXRlLCBcIl0ge1xcbiAgICBcIikuY29uY2F0KHJlbW92ZWRCYXJTaXplVmFyaWFibGUsIFwiOiBcIikuY29uY2F0KGdhcCwgXCJweDtcXG4gIH1cXG5cIik7XG59O1xudmFyIGdldEN1cnJlbnRVc2VDb3VudGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb3VudGVyID0gcGFyc2VJbnQoZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSkgfHwgJzAnLCAxMCk7XG4gICAgcmV0dXJuIGlzRmluaXRlKGNvdW50ZXIpID8gY291bnRlciA6IDA7XG59O1xuZXhwb3J0IHZhciB1c2VMb2NrQXR0cmlidXRlID0gZnVuY3Rpb24gKCkge1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUsIChnZXRDdXJyZW50VXNlQ291bnRlcigpICsgMSkudG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbmV3Q291bnRlciA9IGdldEN1cnJlbnRVc2VDb3VudGVyKCkgLSAxO1xuICAgICAgICAgICAgaWYgKG5ld0NvdW50ZXIgPD0gMCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSwgbmV3Q291bnRlci50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG59O1xuLyoqXG4gKiBSZW1vdmVzIHBhZ2Ugc2Nyb2xsYmFyIGFuZCBibG9ja3MgcGFnZSBzY3JvbGwgd2hlbiBtb3VudGVkXG4gKi9cbmV4cG9ydCB2YXIgUmVtb3ZlU2Nyb2xsQmFyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIG5vUmVsYXRpdmUgPSBfYS5ub1JlbGF0aXZlLCBub0ltcG9ydGFudCA9IF9hLm5vSW1wb3J0YW50LCBfYiA9IF9hLmdhcE1vZGUsIGdhcE1vZGUgPSBfYiA9PT0gdm9pZCAwID8gJ21hcmdpbicgOiBfYjtcbiAgICB1c2VMb2NrQXR0cmlidXRlKCk7XG4gICAgLypcbiAgICAgZ2FwIHdpbGwgYmUgbWVhc3VyZWQgb24gZXZlcnkgY29tcG9uZW50IG1vdW50XG4gICAgIGhvd2V2ZXIgaXQgd2lsbCBiZSB1c2VkIG9ubHkgYnkgdGhlIFwiZmlyc3RcIiBpbnZvY2F0aW9uXG4gICAgIGR1ZSB0byBzaW5nbGV0b24gbmF0dXJlIG9mIDxTdHlsZVxuICAgICAqL1xuICAgIHZhciBnYXAgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldEdhcFdpZHRoKGdhcE1vZGUpOyB9LCBbZ2FwTW9kZV0pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlLCB7IHN0eWxlczogZ2V0U3R5bGVzKGdhcCwgIW5vUmVsYXRpdmUsIGdhcE1vZGUsICFub0ltcG9ydGFudCA/ICchaW1wb3J0YW50JyA6ICcnKSB9KTtcbn07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVzaGVldFNpbmdsZXRvbiB9IGZyb20gJy4vc2luZ2xldG9uJztcbi8qKlxuICogY3JlYXRlcyBhIGhvb2sgdG8gY29udHJvbCBzdHlsZSBzaW5nbGV0b25cbiAqIEBzZWUge0BsaW5rIHN0eWxlU2luZ2xldG9ufSBmb3IgYSBzYWZlciBjb21wb25lbnQgdmVyc2lvblxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgdXNlU3R5bGUgPSBzdHlsZUhvb2tTaW5nbGV0b24oKTtcbiAqIC8vL1xuICogdXNlU3R5bGUoJ2JvZHkgeyBvdmVyZmxvdzogaGlkZGVufScpO1xuICovXG5leHBvcnQgdmFyIHN0eWxlSG9va1NpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXQgPSBzdHlsZXNoZWV0U2luZ2xldG9uKCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdHlsZXMsIGlzRHluYW1pYykge1xuICAgICAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hlZXQuYWRkKHN0eWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNoZWV0LnJlbW92ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgW3N0eWxlcyAmJiBpc0R5bmFtaWNdKTtcbiAgICB9O1xufTtcbiIsICJ2YXIgY3VycmVudE5vbmNlO1xuZXhwb3J0IHZhciBzZXROb25jZSA9IGZ1bmN0aW9uIChub25jZSkge1xuICAgIGN1cnJlbnROb25jZSA9IG5vbmNlO1xufTtcbmV4cG9ydCB2YXIgZ2V0Tm9uY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGN1cnJlbnROb25jZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE5vbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gX193ZWJwYWNrX25vbmNlX187XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgImltcG9ydCB7IGdldE5vbmNlIH0gZnJvbSAnZ2V0LW5vbmNlJztcbmZ1bmN0aW9uIG1ha2VTdHlsZVRhZygpIHtcbiAgICBpZiAoIWRvY3VtZW50KVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICB0YWcudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgdmFyIG5vbmNlID0gZ2V0Tm9uY2UoKTtcbiAgICBpZiAobm9uY2UpIHtcbiAgICAgICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBub25jZSk7XG4gICAgfVxuICAgIHJldHVybiB0YWc7XG59XG5mdW5jdGlvbiBpbmplY3RTdHlsZXModGFnLCBjc3MpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHRhZy5zdHlsZVNoZWV0KSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGFnLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnNlcnRTdHlsZVRhZyh0YWcpIHtcbiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHRhZyk7XG59XG5leHBvcnQgdmFyIHN0eWxlc2hlZXRTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBzdHlsZXNoZWV0ID0gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBhZGQ6IGZ1bmN0aW9uIChzdHlsZSkge1xuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICgoc3R5bGVzaGVldCA9IG1ha2VTdHlsZVRhZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBpbmplY3RTdHlsZXMoc3R5bGVzaGVldCwgc3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnRTdHlsZVRhZyhzdHlsZXNoZWV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY291bnRlci0tO1xuICAgICAgICAgICAgaWYgKCFjb3VudGVyICYmIHN0eWxlc2hlZXQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZXNoZWV0LnBhcmVudE5vZGUgJiYgc3R5bGVzaGVldC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlc2hlZXQpO1xuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59O1xuIiwgImltcG9ydCB7IHN0eWxlSG9va1NpbmdsZXRvbiB9IGZyb20gJy4vaG9vayc7XG4vKipcbiAqIGNyZWF0ZSBhIENvbXBvbmVudCB0byBhZGQgc3R5bGVzIG9uIGRlbWFuZFxuICogLSBzdHlsZXMgYXJlIGFkZGVkIHdoZW4gZmlyc3QgaW5zdGFuY2UgaXMgbW91bnRlZFxuICogLSBzdHlsZXMgYXJlIHJlbW92ZWQgd2hlbiB0aGUgbGFzdCBpbnN0YW5jZSBpcyB1bm1vdW50ZWRcbiAqIC0gY2hhbmdpbmcgc3R5bGVzIGluIHJ1bnRpbWUgZG9lcyBub3RoaW5nIHVubGVzcyBkeW5hbWljIGlzIHNldC4gQnV0IHdpdGggbXVsdGlwbGUgY29tcG9uZW50cyB0aGF0IGNhbiBsZWFkIHRvIHRoZSB1bmRlZmluZWQgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IHZhciBzdHlsZVNpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXNlU3R5bGUgPSBzdHlsZUhvb2tTaW5nbGV0b24oKTtcbiAgICB2YXIgU2hlZXQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHN0eWxlcyA9IF9hLnN0eWxlcywgZHluYW1pYyA9IF9hLmR5bmFtaWM7XG4gICAgICAgIHVzZVN0eWxlKHN0eWxlcywgZHluYW1pYyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIFNoZWV0O1xufTtcbiIsICJleHBvcnQgdmFyIHplcm9HYXAgPSB7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgZ2FwOiAwLFxufTtcbnZhciBwYXJzZSA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiBwYXJzZUludCh4IHx8ICcnLCAxMCkgfHwgMDsgfTtcbnZhciBnZXRPZmZzZXQgPSBmdW5jdGlvbiAoZ2FwTW9kZSkge1xuICAgIHZhciBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpO1xuICAgIHZhciBsZWZ0ID0gY3NbZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnID8gJ3BhZGRpbmdMZWZ0JyA6ICdtYXJnaW5MZWZ0J107XG4gICAgdmFyIHRvcCA9IGNzW2dhcE1vZGUgPT09ICdwYWRkaW5nJyA/ICdwYWRkaW5nVG9wJyA6ICdtYXJnaW5Ub3AnXTtcbiAgICB2YXIgcmlnaHQgPSBjc1tnYXBNb2RlID09PSAncGFkZGluZycgPyAncGFkZGluZ1JpZ2h0JyA6ICdtYXJnaW5SaWdodCddO1xuICAgIHJldHVybiBbcGFyc2UobGVmdCksIHBhcnNlKHRvcCksIHBhcnNlKHJpZ2h0KV07XG59O1xuZXhwb3J0IHZhciBnZXRHYXBXaWR0aCA9IGZ1bmN0aW9uIChnYXBNb2RlKSB7XG4gICAgaWYgKGdhcE1vZGUgPT09IHZvaWQgMCkgeyBnYXBNb2RlID0gJ21hcmdpbic7IH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHplcm9HYXA7XG4gICAgfVxuICAgIHZhciBvZmZzZXRzID0gZ2V0T2Zmc2V0KGdhcE1vZGUpO1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IG9mZnNldHNbMF0sXG4gICAgICAgIHRvcDogb2Zmc2V0c1sxXSxcbiAgICAgICAgcmlnaHQ6IG9mZnNldHNbMl0sXG4gICAgICAgIGdhcDogTWF0aC5tYXgoMCwgd2luZG93V2lkdGggLSBkb2N1bWVudFdpZHRoICsgb2Zmc2V0c1syXSAtIG9mZnNldHNbMF0pLFxuICAgIH07XG59O1xuIiwgInZhciBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IHZhciBub25QYXNzaXZlID0gcGFzc2l2ZVN1cHBvcnRlZCA/IHsgcGFzc2l2ZTogZmFsc2UgfSA6IGZhbHNlO1xuIiwgInZhciBhbHdheXNDb250YWluc1Njcm9sbCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gdGV4dGFyZWEgd2lsbCBhbHdheXMgX2NvbnRhaW5fIHNjcm9sbCBpbnNpZGUgc2VsZi4gSXQgb25seSBjYW4gYmUgaGlkZGVuXG4gICAgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJztcbn07XG52YXIgZWxlbWVudENhbkJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSwgb3ZlcmZsb3cpIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG4gICAgcmV0dXJuIChcbiAgICAvLyBub3Qtbm90LXNjcm9sbGFibGVcbiAgICBzdHlsZXNbb3ZlcmZsb3ddICE9PSAnaGlkZGVuJyAmJlxuICAgICAgICAvLyBjb250YWlucyBzY3JvbGwgaW5zaWRlIHNlbGZcbiAgICAgICAgIShzdHlsZXMub3ZlcmZsb3dZID09PSBzdHlsZXMub3ZlcmZsb3dYICYmICFhbHdheXNDb250YWluc1Njcm9sbChub2RlKSAmJiBzdHlsZXNbb3ZlcmZsb3ddID09PSAndmlzaWJsZScpKTtcbn07XG52YXIgZWxlbWVudENvdWxkQmVWU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZWxlbWVudENhbkJlU2Nyb2xsZWQobm9kZSwgJ292ZXJmbG93WScpOyB9O1xudmFyIGVsZW1lbnRDb3VsZEJlSFNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGVsZW1lbnRDYW5CZVNjcm9sbGVkKG5vZGUsICdvdmVyZmxvd1gnKTsgfTtcbmV4cG9ydCB2YXIgbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHZhciBjdXJyZW50ID0gbm9kZTtcbiAgICBkbyB7XG4gICAgICAgIC8vIFNraXAgb3ZlciBzaGFkb3cgcm9vdFxuICAgICAgICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgIT09ICd1bmRlZmluZWQnICYmIGN1cnJlbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBpc1Njcm9sbGFibGUgPSBlbGVtZW50Q291bGRCZVNjcm9sbGVkKGF4aXMsIGN1cnJlbnQpO1xuICAgICAgICBpZiAoaXNTY3JvbGxhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBnZXRTY3JvbGxWYXJpYWJsZXMoYXhpcywgY3VycmVudCksIHNjcm9sbEhlaWdodCA9IF9hWzFdLCBjbGllbnRIZWlnaHQgPSBfYVsyXTtcbiAgICAgICAgICAgIGlmIChzY3JvbGxIZWlnaHQgPiBjbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnROb2RlO1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPT0gb3duZXJEb2N1bWVudC5ib2R5KTtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xudmFyIGdldFZTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2Nyb2xsVG9wID0gX2Euc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgPSBfYS5zY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCA9IF9hLmNsaWVudEhlaWdodDtcbiAgICByZXR1cm4gW1xuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgIF07XG59O1xudmFyIGdldEhTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2Nyb2xsTGVmdCA9IF9hLnNjcm9sbExlZnQsIHNjcm9sbFdpZHRoID0gX2Euc2Nyb2xsV2lkdGgsIGNsaWVudFdpZHRoID0gX2EuY2xpZW50V2lkdGg7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsV2lkdGgsXG4gICAgICAgIGNsaWVudFdpZHRoLFxuICAgIF07XG59O1xudmFyIGVsZW1lbnRDb3VsZEJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHJldHVybiBheGlzID09PSAndicgPyBlbGVtZW50Q291bGRCZVZTY3JvbGxlZChub2RlKSA6IGVsZW1lbnRDb3VsZEJlSFNjcm9sbGVkKG5vZGUpO1xufTtcbnZhciBnZXRTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHJldHVybiBheGlzID09PSAndicgPyBnZXRWU2Nyb2xsVmFyaWFibGVzKG5vZGUpIDogZ2V0SFNjcm9sbFZhcmlhYmxlcyhub2RlKTtcbn07XG52YXIgZ2V0RGlyZWN0aW9uRmFjdG9yID0gZnVuY3Rpb24gKGF4aXMsIGRpcmVjdGlvbikge1xuICAgIC8qKlxuICAgICAqIElmIHRoZSBlbGVtZW50J3MgZGlyZWN0aW9uIGlzIHJ0bCAocmlnaHQtdG8tbGVmdCksIHRoZW4gc2Nyb2xsTGVmdCBpcyAwIHdoZW4gdGhlIHNjcm9sbGJhciBpcyBhdCBpdHMgcmlnaHRtb3N0IHBvc2l0aW9uLFxuICAgICAqIGFuZCB0aGVuIGluY3JlYXNpbmdseSBuZWdhdGl2ZSBhcyB5b3Ugc2Nyb2xsIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgY29udGVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3Njcm9sbExlZnRcbiAgICAgKi9cbiAgICByZXR1cm4gYXhpcyA9PT0gJ2gnICYmIGRpcmVjdGlvbiA9PT0gJ3J0bCcgPyAtMSA6IDE7XG59O1xuZXhwb3J0IHZhciBoYW5kbGVTY3JvbGwgPSBmdW5jdGlvbiAoYXhpcywgZW5kVGFyZ2V0LCBldmVudCwgc291cmNlRGVsdGEsIG5vT3ZlcnNjcm9sbCkge1xuICAgIHZhciBkaXJlY3Rpb25GYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3IoYXhpcywgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZW5kVGFyZ2V0KS5kaXJlY3Rpb24pO1xuICAgIHZhciBkZWx0YSA9IGRpcmVjdGlvbkZhY3RvciAqIHNvdXJjZURlbHRhO1xuICAgIC8vIGZpbmQgc2Nyb2xsYWJsZSB0YXJnZXRcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHZhciB0YXJnZXRJbkxvY2sgPSBlbmRUYXJnZXQuY29udGFpbnModGFyZ2V0KTtcbiAgICB2YXIgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gZmFsc2U7XG4gICAgdmFyIGlzRGVsdGFQb3NpdGl2ZSA9IGRlbHRhID4gMDtcbiAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsID0gMDtcbiAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsVG9wID0gMDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBfYSA9IGdldFNjcm9sbFZhcmlhYmxlcyhheGlzLCB0YXJnZXQpLCBwb3NpdGlvbiA9IF9hWzBdLCBzY3JvbGxfMSA9IF9hWzFdLCBjYXBhY2l0eSA9IF9hWzJdO1xuICAgICAgICB2YXIgZWxlbWVudFNjcm9sbCA9IHNjcm9sbF8xIC0gY2FwYWNpdHkgLSBkaXJlY3Rpb25GYWN0b3IgKiBwb3NpdGlvbjtcbiAgICAgICAgaWYgKHBvc2l0aW9uIHx8IGVsZW1lbnRTY3JvbGwpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Q291bGRCZVNjcm9sbGVkKGF4aXMsIHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVTY3JvbGwgKz0gZWxlbWVudFNjcm9sbDtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVTY3JvbGxUb3AgKz0gcG9zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlIChcbiAgICAvLyBwb3J0YWxlZCBjb250ZW50XG4gICAgKCF0YXJnZXRJbkxvY2sgJiYgdGFyZ2V0ICE9PSBkb2N1bWVudC5ib2R5KSB8fFxuICAgICAgICAvLyBzZWxmIGNvbnRlbnRcbiAgICAgICAgKHRhcmdldEluTG9jayAmJiAoZW5kVGFyZ2V0LmNvbnRhaW5zKHRhcmdldCkgfHwgZW5kVGFyZ2V0ID09PSB0YXJnZXQpKSk7XG4gICAgLy8gaGFuZGxlIGVwc2lsb24gYXJvdW5kIDAgKG5vbiBzdGFuZGFyZCB6b29tIGxldmVscylcbiAgICBpZiAoaXNEZWx0YVBvc2l0aXZlICYmXG4gICAgICAgICgobm9PdmVyc2Nyb2xsICYmIE1hdGguYWJzKGF2YWlsYWJsZVNjcm9sbCkgPCAxKSB8fCAoIW5vT3ZlcnNjcm9sbCAmJiBkZWx0YSA+IGF2YWlsYWJsZVNjcm9sbCkpKSB7XG4gICAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpc0RlbHRhUG9zaXRpdmUgJiZcbiAgICAgICAgKChub092ZXJzY3JvbGwgJiYgTWF0aC5hYnMoYXZhaWxhYmxlU2Nyb2xsVG9wKSA8IDEpIHx8ICghbm9PdmVyc2Nyb2xsICYmIC1kZWx0YSA+IGF2YWlsYWJsZVNjcm9sbFRvcCkpKSB7XG4gICAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzaG91bGRDYW5jZWxTY3JvbGw7XG59O1xuIiwgImltcG9ydCB7IGV4cG9ydFNpZGVjYXIgfSBmcm9tICd1c2Utc2lkZWNhcic7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGxTaWRlQ2FyIH0gZnJvbSAnLi9TaWRlRWZmZWN0JztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIoZWZmZWN0Q2FyLCBSZW1vdmVTY3JvbGxTaWRlQ2FyKTtcbiIsICJpbXBvcnQgeyBfX3NwcmVhZEFycmF5cyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaGlkZU90aGVycyB9IGZyb20gJ2FyaWEtaGlkZGVuJztcbmltcG9ydCB7IEludGVyYWN0aXZpdHlEaXNhYmxlciB9IGZyb20gJy4vSW50ZXJhY3Rpdml0eURpc2FibGVyJztcbmltcG9ydCB7IGZvY3VzSGlkZGVuTWFya2VyIH0gZnJvbSAnLi9tZWRpdW0nO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xudmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgcmV0dXJuICdjdXJyZW50JyBpbiByZWYgPyByZWYuY3VycmVudCA6IHJlZjtcbn07XG5leHBvcnQgZnVuY3Rpb24gRWZmZWN0KF9hKSB7XG4gICAgdmFyIHNldExvY2tQcm9wcyA9IF9hLnNldExvY2tQcm9wcywgb25Fc2NhcGVLZXkgPSBfYS5vbkVzY2FwZUtleSwgb25DbGlja091dHNpZGUgPSBfYS5vbkNsaWNrT3V0c2lkZSwgc2hhcmRzID0gX2Euc2hhcmRzLCBvbkFjdGl2YXRpb24gPSBfYS5vbkFjdGl2YXRpb24sIG9uRGVhY3RpdmF0aW9uID0gX2Eub25EZWFjdGl2YXRpb24sIG5vSXNvbGF0aW9uID0gX2Eubm9Jc29sYXRpb247XG4gICAgdmFyIF9iID0gdXNlU3RhdGUodW5kZWZpbmVkKSwgYWN0aXZlTm9kZSA9IF9iWzBdLCBzZXRBY3RpdmVOb2RlID0gX2JbMV07XG4gICAgdmFyIGxhc3RFdmVudFRhcmdldCA9IHVzZVJlZihudWxsKTtcbiAgICB2YXIgbW91c2VUb3VjaGVzID0gdXNlUmVmKDApO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvbktleURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgIGlmICgoZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScgfHxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudC5rZXlDb2RlID09PSAyNykgJiZcbiAgICAgICAgICAgICAgICAgICAgb25Fc2NhcGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgb25Fc2NhcGVLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fFxuICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgfHxcbiAgICAgICAgICAgICAgICAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50ICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhcmRzICYmXG4gICAgICAgICAgICAgICAgc2hhcmRzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoZXh0cmFjdFJlZilcbiAgICAgICAgICAgICAgICAgICAgLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChub2RlICYmIG5vZGUuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPT09IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbkNsaWNrT3V0c2lkZSkge1xuICAgICAgICAgICAgICAgIG9uQ2xpY2tPdXRzaWRlKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgb25Nb3VzZURvd24oZXZlbnQpO1xuICAgICAgICAgICAgbW91c2VUb3VjaGVzLmN1cnJlbnQgPSBldmVudC50b3VjaGVzLmxlbmd0aDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIG1vdXNlVG91Y2hlcy5jdXJyZW50ID0gZXZlbnQudG91Y2hlcy5sZW5ndGg7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZURvd24pO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSwgW2FjdGl2ZU5vZGUsIG9uQ2xpY2tPdXRzaWRlLCBvbkVzY2FwZUtleV0pO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChhY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICBpZiAob25BY3RpdmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgb25BY3RpdmF0aW9uKGFjdGl2ZU5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAob25EZWFjdGl2YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgb25EZWFjdGl2YXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSwgWyEhYWN0aXZlTm9kZV0pO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdW5kbyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH07XG4gICAgICAgIHZhciB1bm1vdW50ZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIG9uTm9kZUFjdGl2YXRpb24gPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKCFub0lzb2xhdGlvbikge1xuICAgICAgICAgICAgICAgIF91bmRvID0gaGlkZU90aGVycyhfX3NwcmVhZEFycmF5cyhbbm9kZV0sIChzaGFyZHMgfHwgW10pLm1hcChleHRyYWN0UmVmKSksIGRvY3VtZW50LmJvZHksIGZvY3VzSGlkZGVuTWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEFjdGl2ZU5vZGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZTsgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbk5vZGVEZWFjdGl2YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdW5kbygpO1xuICAgICAgICAgICAgaWYgKCF1bm1vdW50ZWQpIHtcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVOb2RlKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRMb2NrUHJvcHMoe1xuICAgICAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblRvdWNoU3RhcnQ6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkFjdGl2YXRpb246IG9uTm9kZUFjdGl2YXRpb24sXG4gICAgICAgICAgICBvbkRlYWN0aXZhdGlvbjogb25Ob2RlRGVhY3RpdmF0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW5tb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldExvY2tQcm9wcyhmYWxzZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEludGVyYWN0aXZpdHlEaXNhYmxlciwgbnVsbCk7XG59XG4iLCAidmFyIGdldERlZmF1bHRQYXJlbnQgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHNhbXBsZVRhcmdldCA9IEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXRbMF0gOiBvcmlnaW5hbFRhcmdldDtcbiAgICByZXR1cm4gc2FtcGxlVGFyZ2V0Lm93bmVyRG9jdW1lbnQuYm9keTtcbn07XG52YXIgY291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG52YXIgdW5jb250cm9sbGVkTm9kZXMgPSBuZXcgV2Vha01hcCgpO1xudmFyIG1hcmtlck1hcCA9IHt9O1xudmFyIGxvY2tDb3VudCA9IDA7XG52YXIgdW53cmFwSG9zdCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgKG5vZGUuaG9zdCB8fCB1bndyYXBIb3N0KG5vZGUucGFyZW50Tm9kZSkpO1xufTtcbnZhciBjb3JyZWN0VGFyZ2V0cyA9IGZ1bmN0aW9uIChwYXJlbnQsIHRhcmdldHMpIHtcbiAgICByZXR1cm4gdGFyZ2V0c1xuICAgICAgICAubWFwKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKHBhcmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb3JyZWN0ZWRUYXJnZXQgPSB1bndyYXBIb3N0KHRhcmdldCk7XG4gICAgICAgIGlmIChjb3JyZWN0ZWRUYXJnZXQgJiYgcGFyZW50LmNvbnRhaW5zKGNvcnJlY3RlZFRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JyZWN0ZWRUYXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcignYXJpYS1oaWRkZW4nLCB0YXJnZXQsICdpbiBub3QgY29udGFpbmVkIGluc2lkZScsIHBhcmVudCwgJy4gRG9pbmcgbm90aGluZycpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiBCb29sZWFuKHgpOyB9KTtcbn07XG4vKipcbiAqIE1hcmtzIGV2ZXJ5dGhpbmcgZXhjZXB0IGdpdmVuIG5vZGUob3Igbm9kZXMpIGFzIGFyaWEtaGlkZGVuXG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbY29udHJvbEF0dHJpYnV0ZV0gLSBodG1sIEF0dHJpYnV0ZSB0byBjb250cm9sXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xudmFyIGFwcGx5QXR0cmlidXRlVG9PdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUsIGNvbnRyb2xBdHRyaWJ1dGUpIHtcbiAgICB2YXIgdGFyZ2V0cyA9IGNvcnJlY3RUYXJnZXRzKHBhcmVudE5vZGUsIEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXQgOiBbb3JpZ2luYWxUYXJnZXRdKTtcbiAgICBpZiAoIW1hcmtlck1hcFttYXJrZXJOYW1lXSkge1xuICAgICAgICBtYXJrZXJNYXBbbWFya2VyTmFtZV0gPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cbiAgICB2YXIgbWFya2VyQ291bnRlciA9IG1hcmtlck1hcFttYXJrZXJOYW1lXTtcbiAgICB2YXIgaGlkZGVuTm9kZXMgPSBbXTtcbiAgICB2YXIgZWxlbWVudHNUb0tlZXAgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGVsZW1lbnRzVG9TdG9wID0gbmV3IFNldCh0YXJnZXRzKTtcbiAgICB2YXIga2VlcCA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICBpZiAoIWVsIHx8IGVsZW1lbnRzVG9LZWVwLmhhcyhlbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50c1RvS2VlcC5hZGQoZWwpO1xuICAgICAgICBrZWVwKGVsLnBhcmVudE5vZGUpO1xuICAgIH07XG4gICAgdGFyZ2V0cy5mb3JFYWNoKGtlZXApO1xuICAgIHZhciBkZWVwID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICBpZiAoIXBhcmVudCB8fCBlbGVtZW50c1RvU3RvcC5oYXMocGFyZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwocGFyZW50LmNoaWxkcmVuLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRzVG9LZWVwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgIGRlZXAobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IG5vZGUuZ2V0QXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWxyZWFkeUhpZGRlbiA9IGF0dHIgIT09IG51bGwgJiYgYXR0ciAhPT0gJ2ZhbHNlJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ZXJWYWx1ZSA9IChjb3VudGVyTWFwLmdldChub2RlKSB8fCAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXJWYWx1ZSA9IChtYXJrZXJDb3VudGVyLmdldChub2RlKSB8fCAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXJNYXAuc2V0KG5vZGUsIGNvdW50ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlckNvdW50ZXIuc2V0KG5vZGUsIG1hcmtlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuTm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXJWYWx1ZSA9PT0gMSAmJiBhbHJlYWR5SGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmNvbnRyb2xsZWROb2Rlcy5zZXQobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmtlclZhbHVlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShtYXJrZXJOYW1lLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxyZWFkeUhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoY29udHJvbEF0dHJpYnV0ZSwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdhcmlhLWhpZGRlbjogY2Fubm90IG9wZXJhdGUgb24gJywgbm9kZSwgZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGRlZXAocGFyZW50Tm9kZSk7XG4gICAgZWxlbWVudHNUb0tlZXAuY2xlYXIoKTtcbiAgICBsb2NrQ291bnQrKztcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBoaWRkZW5Ob2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICB2YXIgY291bnRlclZhbHVlID0gY291bnRlck1hcC5nZXQobm9kZSkgLSAxO1xuICAgICAgICAgICAgdmFyIG1hcmtlclZhbHVlID0gbWFya2VyQ291bnRlci5nZXQobm9kZSkgLSAxO1xuICAgICAgICAgICAgY291bnRlck1hcC5zZXQobm9kZSwgY291bnRlclZhbHVlKTtcbiAgICAgICAgICAgIG1hcmtlckNvdW50ZXIuc2V0KG5vZGUsIG1hcmtlclZhbHVlKTtcbiAgICAgICAgICAgIGlmICghY291bnRlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1bmNvbnRyb2xsZWROb2Rlcy5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoY29udHJvbEF0dHJpYnV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVuY29udHJvbGxlZE5vZGVzLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbWFya2VyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShtYXJrZXJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvY2tDb3VudC0tO1xuICAgICAgICBpZiAoIWxvY2tDb3VudCkge1xuICAgICAgICAgICAgLy8gY2xlYXJcbiAgICAgICAgICAgIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgY291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB1bmNvbnRyb2xsZWROb2RlcyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICBtYXJrZXJNYXAgPSB7fTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBhcmlhLWhpZGRlblxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xuZXhwb3J0IHZhciBoaWRlT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKSB7XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gJ2RhdGEtYXJpYS1oaWRkZW4nOyB9XG4gICAgdmFyIHRhcmdldHMgPSBBcnJheS5mcm9tKEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXQgOiBbb3JpZ2luYWxUYXJnZXRdKTtcbiAgICB2YXIgYWN0aXZlUGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgZ2V0RGVmYXVsdFBhcmVudChvcmlnaW5hbFRhcmdldCk7XG4gICAgaWYgKCFhY3RpdmVQYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgIH1cbiAgICAvLyB3ZSBzaG91bGQgbm90IGhpZGUgYXJpYUxpdmUgZWxlbWVudHMgLSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L2FyaWEtaGlkZGVuL2lzc3Vlcy8xMFxuICAgIHRhcmdldHMucHVzaC5hcHBseSh0YXJnZXRzLCBBcnJheS5mcm9tKGFjdGl2ZVBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2FyaWEtbGl2ZV0nKSkpO1xuICAgIHJldHVybiBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzKHRhcmdldHMsIGFjdGl2ZVBhcmVudE5vZGUsIG1hcmtlck5hbWUsICdhcmlhLWhpZGRlbicpO1xufTtcbi8qKlxuICogTWFya3MgZXZlcnl0aGluZyBleGNlcHQgZ2l2ZW4gbm9kZShvciBub2RlcykgYXMgaW5lcnRcbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgaW5lcnRPdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpIHtcbiAgICBpZiAobWFya2VyTmFtZSA9PT0gdm9pZCAwKSB7IG1hcmtlck5hbWUgPSAnZGF0YS1pbmVydC1lZCc7IH1cbiAgICB2YXIgYWN0aXZlUGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgZ2V0RGVmYXVsdFBhcmVudChvcmlnaW5hbFRhcmdldCk7XG4gICAgaWYgKCFhY3RpdmVQYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgIH1cbiAgICByZXR1cm4gYXBwbHlBdHRyaWJ1dGVUb090aGVycyhvcmlnaW5hbFRhcmdldCwgYWN0aXZlUGFyZW50Tm9kZSwgbWFya2VyTmFtZSwgJ2luZXJ0Jyk7XG59O1xuLyoqXG4gKiBAcmV0dXJucyBpZiBjdXJyZW50IGJyb3dzZXIgc3VwcG9ydHMgaW5lcnRcbiAqL1xuZXhwb3J0IHZhciBzdXBwb3J0c0luZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIEhUTUxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnaW5lcnQnKTtcbn07XG4vKipcbiAqIEF1dG9tYXRpYyBmdW5jdGlvbiB0byBcInN1cHByZXNzXCIgRE9NIGVsZW1lbnRzIC0gX2hpZGVfIG9yIF9pbmVydF8gaW4gdGhlIGJlc3QgcG9zc2libGUgd2F5XG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEByZXR1cm4ge1VuZG99IHVuZG8gY29tbWFuZFxuICovXG5leHBvcnQgdmFyIHN1cHByZXNzT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKSB7XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gJ2RhdGEtc3VwcHJlc3NlZCc7IH1cbiAgICByZXR1cm4gKHN1cHBvcnRzSW5lcnQoKSA/IGluZXJ0T3RoZXJzIDogaGlkZU90aGVycykob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpO1xufTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZVNpbmdsZXRvbiB9IGZyb20gJ3JlYWN0LXN0eWxlLXNpbmdsZXRvbic7XG5pbXBvcnQgeyBmb2N1c0hpZGRlbk1hcmtlciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBTdHlsZSA9IHN0eWxlU2luZ2xldG9uKCk7XG52YXIgc3R5bGVzID0gXCJcXG4gW1wiICsgZm9jdXNIaWRkZW5NYXJrZXIgKyBcIl0ge1xcbiAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XFxuIH1cXG5cIjtcbmV4cG9ydCB2YXIgSW50ZXJhY3Rpdml0eURpc2FibGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IHN0eWxlcyB9KTsgfTtcbiIsICJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0ICdyZWFjdC1mb2N1cy1sb2NrL3NpZGVjYXInO1xuaW1wb3J0ICdyZWFjdC1yZW1vdmUtc2Nyb2xsL3NpZGVjYXInO1xuaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnLi9FZmZlY3QnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuZXhwb3J0IGRlZmF1bHQgZXhwb3J0U2lkZWNhcihlZmZlY3RDYXIsIEVmZmVjdCk7XG4iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5pbXBvcnQgeyBjc3MgYXMgX2NzcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIF9leGNsdWRlZCA9IFtcImFuY2hvckNsYXNzTmFtZVwiLCBcImFuY2hvclBvc2l0aW9uXCIsIFwiYnV0dG9uXCIsIFwiYnV0dG9uUmVmXCIsIFwiaW5zZXJ0XCIsIFwiaXNPcGVuXCIsIFwib3duRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNsb3NlUG9wb3ZlclwiLCBcInBhbmVsQ2xhc3NOYW1lXCIsIFwicGFuZWxQYWRkaW5nU2l6ZVwiLCBcInBhbmVsUHJvcHNcIiwgXCJwYW5lbFJlZlwiLCBcInBhbmVsU3R5bGVcIiwgXCJwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dFwiLCBcInBvcG92ZXJSZWZcIiwgXCJoYXNBcnJvd1wiLCBcImFycm93Q2hpbGRyZW5cIiwgXCJyZXBvc2l0aW9uT25TY3JvbGxcIiwgXCJ6SW5kZXhcIiwgXCJhdHRhY2hUb0FuY2hvclwiLCBcImRpc3BsYXlcIiwgXCJvZmZzZXRcIiwgXCJvblRyYXBEZWFjdGl2YXRpb25cIiwgXCJidWZmZXJcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwiY29udGFpbmVyXCIsIFwiZm9jdXNUcmFwUHJvcHNcIiwgXCJpbml0aWFsRm9jdXNcIiwgXCJ0YWJJbmRleFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBmb2N1c2FibGUgfSBmcm9tICd0YWJiYWJsZSc7XG5pbXBvcnQgeyBFdWlGb2N1c1RyYXAgfSBmcm9tICcuLi9mb2N1c190cmFwJztcbmltcG9ydCB7IGNhc2NhZGluZ01lbnVLZXlzLCBnZXRUcmFuc2l0aW9uVGltaW5ncywgZ2V0V2FpdER1cmF0aW9uLCBwZXJmb3JtT25GcmFtZSwgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpUG9ydGFsIH0gZnJvbSAnLi4vcG9ydGFsJztcbmltcG9ydCB7IEV1aU11dGF0aW9uT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlci9tdXRhdGlvbl9vYnNlcnZlcic7XG5pbXBvcnQgeyBmaW5kUG9wb3ZlclBvc2l0aW9uLCBnZXRFbGVtZW50WkluZGV4IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciB9IGZyb20gJy4uL291dHNpZGVfY2xpY2tfZGV0ZWN0b3InO1xuaW1wb3J0IHsgRXVpUG9wb3ZlckFycm93IH0gZnJvbSAnLi9wb3BvdmVyX2Fycm93JztcbmltcG9ydCB7IGV1aVBvcG92ZXJTdHlsZXMgfSBmcm9tICcuL3BvcG92ZXIuc3R5bGVzJztcbmltcG9ydCB7IEV1aVBvcG92ZXJQYW5lbCB9IGZyb20gJy4vcG9wb3Zlcl9wYW5lbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBwb3BvdmVyQW5jaG9yUG9zaXRpb24gPSBbJ3VwQ2VudGVyJywgJ3VwTGVmdCcsICd1cFJpZ2h0JywgJ2Rvd25DZW50ZXInLCAnZG93bkxlZnQnLCAnZG93blJpZ2h0JywgJ2xlZnRDZW50ZXInLCAnbGVmdFVwJywgJ2xlZnREb3duJywgJ3JpZ2h0Q2VudGVyJywgJ3JpZ2h0VXAnLCAncmlnaHREb3duJ107XG52YXIgYW5jaG9yUG9zaXRpb25Ub1BvcG92ZXJQb3NpdGlvbk1hcCA9IHtcbiAgdXA6ICd0b3AnLFxuICByaWdodDogJ3JpZ2h0JyxcbiAgZG93bjogJ2JvdHRvbScsXG4gIGxlZnQ6ICdsZWZ0J1xufTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BvdmVyUG9zaXRpb25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pIHtcbiAgLy8gbWFwcyB0aGUgYW5jaG9yIHBvc2l0aW9uIHRvIHRoZSBtYXRjaGluZyBwb3BvdmVyIHBvc2l0aW9uXG4gIC8vIGUuZy4gXCJ1cExlZnRcIiAtPiBcInRvcFwiLCBcImRvd25SaWdodFwiIC0+IFwiYm90dG9tXCJcbiAgLy8gZXh0cmFjdCB0aGUgZmlyc3QgcG9zaXRpb25hbCB3b3JkIGZyb20gYW5jaG9yUG9zaXRpb246XG4gIC8vIHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIChcIiBeIFwiKSBvZiBhbmNob3JQb3NpdGlvbiBhbmRcbiAgLy8gY2FwdHVyZXMgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIChcIiAoLio/KSBcIikgdW50aWwgdGhlXG4gIC8vIGZpcnN0IGNhcGl0YWwgbGV0dGVyIChcIiBbQS1aXSBcIikgaXMgZW5jb3VudGVyZWRcbiAgdmFyIF9yZWYgPSBhbmNob3JQb3NpdGlvbi5tYXRjaCgvXiguKj8pW0EtWl0vKSxcbiAgICAgIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICBwcmltYXJ5UG9zaXRpb24gPSBfcmVmMlsxXTtcblxuICByZXR1cm4gYW5jaG9yUG9zaXRpb25Ub1BvcG92ZXJQb3NpdGlvbk1hcFtwcmltYXJ5UG9zaXRpb25dO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcG92ZXJBbGlnbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbikge1xuICAvLyBtYXBzIHRoZSBncmF2aXR5IHRvIHRoZSBtYXRjaGluZyBwb3BvdmVyIHBvc2l0aW9uXG4gIC8vIGUuZy4gXCJ1cExlZnRcIiAtPiBcImxlZnRcIiwgXCJyaWdodERvd25cIiAtPiBcImJvdHRvbVwiXG4gIC8vIGV4dHJhY3QgdGhlIHNlY29uZCBwb3NpdGlvbmFsIHdvcmQgZnJvbSBhbmNob3JQb3NpdGlvbjpcbiAgLy8gc3RhcnRzIGEgY2FwdHVyZSBncm91cCBhdCB0aGUgZmlyc3QgY2FwaXRhbCBsZXR0ZXJcbiAgLy8gYW5kIGluY2x1ZGVzIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXRcbiAgdmFyIF9yZWYzID0gYW5jaG9yUG9zaXRpb24ubWF0Y2goLyhbQS1aXS4qKS8pLFxuICAgICAgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgICBhbGlnbiA9IF9yZWY0WzFdOyAvLyB0aGlzIHBlcmZvcm1zIHR3byB0YXNrczpcbiAgLy8gMS4gbm9ybWFsaXplcyB0aGUgYWxpZ24gcG9zaXRpb24gYnkgbG93ZXJjYXNpbmcgaXRcbiAgLy8gMi4gYGNlbnRlcmAgZG9lc24ndCBleGlzdCBpbiB0aGUgbG9va3VwIG1hcCB3aGljaCBjb252ZXJ0cyBpdCB0byBgdW5kZWZpbmVkYCBtZWFuaW5nIG5vIGFsaWduXG5cblxuICByZXR1cm4gYW5jaG9yUG9zaXRpb25Ub1BvcG92ZXJQb3NpdGlvbk1hcFthbGlnbi50b0xvd2VyQ2FzZSgpXTtcbn1cbnZhciBERUZBVUxUX1BPUE9WRVJfU1RZTEVTID0ge1xuICB0b3A6IDUwLFxuICBsZWZ0OiA1MFxufTtcbnZhciByZXR1cm5Gb2N1c0NvbmZpZyA9IHtcbiAgcHJldmVudFNjcm9sbDogdHJ1ZVxufTtcbnZhciBjbG9zaW5nVHJhbnNpdGlvblRpbWUgPSAyNTA7IC8vIFRPRE86IERSWSBvdXQgdmFyIHdoZW4gY29udmVydGluZyB0byBDU1MtaW4tSlNcblxuZXhwb3J0IHZhciBFdWlQb3BvdmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlQb3BvdmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVBvcG92ZXIpO1xuXG4gIGZ1bmN0aW9uIEV1aVBvcG92ZXIocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpUG9wb3Zlcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZXNwb3NpdGlvblRpbWVvdXRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdHJhbmRlZEZvY3VzVGltZW91dFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsb3NpbmdUcmFuc2l0aW9uVGltZW91dFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWVcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJidXR0b25cIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicGFuZWxcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZGVzY3JpcHRpb25JZFwiLCBodG1sSWRHZW5lcmF0b3IoKSgpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbG9zZVBvcG92ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmlzT3Blbikge1xuICAgICAgICBfdGhpcy5wcm9wcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkVzY2FwZUtleVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgX3RoaXMuY2xvc2VQb3BvdmVyKCk7XG5cbiAgICAgICAgX3RoaXMuaGFuZGxlU3RyYW5kZWRGb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVN0cmFuZGVkRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc3RyYW5kZWRGb2N1c1RpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIElmIGByZXR1cm5Gb2N1c2AgZmFpbGVkIGFuZCBmb2N1cyB3YXMgc3RyYW5kZWQgb24gdGhlIGJvZHksXG4gICAgICAgIC8vIGF0dGVtcHQgdG8gbWFudWFsbHkgcmVzdG9yZSBmb2N1cyB0byB0aGUgdG9nZ2xlIGJ1dHRvblxuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICAgIGlmICghX3RoaXMuYnV0dG9uKSByZXR1cm47XG4gICAgICAgICAgdmFyIGZvY3VzYWJsZUl0ZW1zID0gZm9jdXNhYmxlKF90aGlzLmJ1dHRvbik7XG4gICAgICAgICAgaWYgKCFmb2N1c2FibGVJdGVtcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICB2YXIgdG9nZ2xlQnV0dG9uID0gZm9jdXNhYmxlSXRlbXNbMF07XG4gICAgICAgICAgdG9nZ2xlQnV0dG9uLmZvY3VzKHJldHVybkZvY3VzQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfSwgY2xvc2luZ1RyYW5zaXRpb25UaW1lKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBjYXNjYWRpbmdNZW51S2V5cy5FU0NBUEUpIHtcbiAgICAgICAgX3RoaXMub25Fc2NhcGVLZXkoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xpY2tPdXRzaWRlXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gb25seSBjbG9zZSB0aGUgcG9wb3ZlciBpZiB0aGUgZXZlbnQgc291cmNlIGlzbid0IHRoZSBhbmNob3IgYnV0dG9uXG4gICAgICAvLyBvdGhlcndpc2UsIGl0IGlzIHVwIHRvIHRoZSBhbmNob3IgdG8gdG9nZ2xlIHRoZSBwb3BvdmVyJ3Mgb3BlbiBzdGF0dXNcbiAgICAgIGlmIChfdGhpcy5idXR0b24gJiYgX3RoaXMuYnV0dG9uLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgPT09IGZhbHNlKSB7XG4gICAgICAgIF90aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uT3BlblBvcG92ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnN0cmFuZGVkRm9jdXNUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dChfdGhpcy5jbG9zaW5nVHJhbnNpdGlvblRpbWVvdXQpO1xuXG4gICAgICBpZiAoX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZSkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShfdGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lKTtcbiAgICAgIH0gLy8gV2UgbmVlZCB0byBzZXQgdGhpcyBzdGF0ZSBhIGJlYXQgYWZ0ZXIgdGhlIHJlbmRlciB0YWtlcyBwbGFjZSwgc28gdGhhdCB0aGUgQ1NTXG4gICAgICAvLyB0cmFuc2l0aW9uIGNhbiB0YWtlIGVmZmVjdC5cblxuXG4gICAgICBfdGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc09wZW5pbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9KTsgLy8gZm9yIGVhY2ggY2hpbGQgZWxlbWVudCBvZiBgdGhpcy5wYW5lbGAsIGZpbmQgYW55IHRyYW5zaXRpb24gZHVyYXRpb24gd2Ugc2hvdWxkIHdhaXQgZm9yIGJlZm9yZSBzdGFiaWxpemluZ1xuXG4gICAgICB2YXIgX0FycmF5JHByb3RvdHlwZSRzbGljID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoX3RoaXMucGFuZWwgPyBbX3RoaXMucGFuZWxdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoQXJyYXkuZnJvbShfdGhpcy5wYW5lbC5jaGlsZHJlbikpKSA6IFtdKS5yZWR1Y2UoZnVuY3Rpb24gKF9yZWY1LCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBkdXJhdGlvbk1hdGNoID0gX3JlZjUuZHVyYXRpb25NYXRjaCxcbiAgICAgICAgICAgIGRlbGF5TWF0Y2ggPSBfcmVmNS5kZWxheU1hdGNoO1xuICAgICAgICB2YXIgdHJhbnNpdGlvblRpbWluZ3MgPSBnZXRUcmFuc2l0aW9uVGltaW5ncyhlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkdXJhdGlvbk1hdGNoOiBNYXRoLm1heChkdXJhdGlvbk1hdGNoLCB0cmFuc2l0aW9uVGltaW5ncy5kdXJhdGlvbk1hdGNoKSxcbiAgICAgICAgICBkZWxheU1hdGNoOiBNYXRoLm1heChkZWxheU1hdGNoLCB0cmFuc2l0aW9uVGltaW5ncy5kZWxheU1hdGNoKVxuICAgICAgICB9O1xuICAgICAgfSwge1xuICAgICAgICBkdXJhdGlvbk1hdGNoOiAwLFxuICAgICAgICBkZWxheU1hdGNoOiAwXG4gICAgICB9KSxcbiAgICAgICAgICBkdXJhdGlvbk1hdGNoID0gX0FycmF5JHByb3RvdHlwZSRzbGljLmR1cmF0aW9uTWF0Y2gsXG4gICAgICAgICAgZGVsYXlNYXRjaCA9IF9BcnJheSRwcm90b3R5cGUkc2xpYy5kZWxheU1hdGNoO1xuXG4gICAgICBjbGVhclRpbWVvdXQoX3RoaXMucmVzcG9zaXRpb25UaW1lb3V0KTtcbiAgICAgIF90aGlzLnJlc3Bvc2l0aW9uVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzT3BlblN0YWJsZTogdHJ1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBkdXJhdGlvbk1hdGNoICsgZGVsYXlNYXRjaCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25NdXRhdGlvblwiLCBmdW5jdGlvbiAocmVjb3Jkcykge1xuICAgICAgdmFyIHdhaXREdXJhdGlvbiA9IGdldFdhaXREdXJhdGlvbihyZWNvcmRzKTtcblxuICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQoKTtcblxuICAgICAgcGVyZm9ybU9uRnJhbWUod2FpdER1cmF0aW9uLCBfdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9zaXRpb25Qb3BvdmVyXCIsIGZ1bmN0aW9uIChhbGxvd0VuZm9yY2VQb3NpdGlvbikge1xuICAgICAgaWYgKF90aGlzLmJ1dHRvbiA9PSBudWxsIHx8IF90aGlzLnBhbmVsID09IG51bGwpIHJldHVybjtcbiAgICAgIHZhciBfcmVmNiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGFuY2hvclBvc2l0aW9uID0gX3JlZjYuYW5jaG9yUG9zaXRpb247XG4gICAgICB2YXIgcG9zaXRpb24gPSBnZXRQb3BvdmVyUG9zaXRpb25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pO1xuICAgICAgdmFyIGZvcmNlUG9zaXRpb24gPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChhbGxvd0VuZm9yY2VQb3NpdGlvbiAmJiBfdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgJiYgX3RoaXMuc3RhdGUub3BlblBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgICAgcG9zaXRpb24gPSBfdGhpcy5zdGF0ZS5vcGVuUG9zaXRpb247XG4gICAgICAgIGZvcmNlUG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2ZpbmRQb3BvdmVyUG9zaXRpb24gPSBmaW5kUG9wb3ZlclBvc2l0aW9uKHtcbiAgICAgICAgY29udGFpbmVyOiBfdGhpcy5wcm9wcy5jb250YWluZXIsXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgZm9yY2VQb3NpdGlvbjogZm9yY2VQb3NpdGlvbixcbiAgICAgICAgYWxpZ246IGdldFBvcG92ZXJBbGlnbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbiksXG4gICAgICAgIGFuY2hvcjogX3RoaXMuYnV0dG9uLFxuICAgICAgICBwb3BvdmVyOiBfdGhpcy5wYW5lbCxcbiAgICAgICAgb2Zmc2V0OiAhX3RoaXMucHJvcHMuYXR0YWNoVG9BbmNob3IgJiYgX3RoaXMucHJvcHMuaGFzQXJyb3cgPyAxNiArIChfdGhpcy5wcm9wcy5vZmZzZXQgfHwgMCkgOiA4ICsgKF90aGlzLnByb3BzLm9mZnNldCB8fCAwKSxcbiAgICAgICAgYXJyb3dDb25maWc6IHtcbiAgICAgICAgICBhcnJvd1dpZHRoOiAyNCxcbiAgICAgICAgICBhcnJvd0J1ZmZlcjogMTBcbiAgICAgICAgfSxcbiAgICAgICAgcmV0dXJuQm91bmRpbmdCb3g6IF90aGlzLnByb3BzLmF0dGFjaFRvQW5jaG9yLFxuICAgICAgICBidWZmZXI6IF90aGlzLnByb3BzLmJ1ZmZlclxuICAgICAgfSksXG4gICAgICAgICAgdG9wID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24udG9wLFxuICAgICAgICAgIGxlZnQgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5sZWZ0LFxuICAgICAgICAgIGZvdW5kUG9zaXRpb24gPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5wb3NpdGlvbixcbiAgICAgICAgICBhcnJvdyA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmFycm93LFxuICAgICAgICAgIGFuY2hvckJvdW5kaW5nQm94ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24uYW5jaG9yQm91bmRpbmdCb3g7IC8vIHRoZSBwb3BvdmVyJ3Mgei1pbmRleCBtdXN0IGluaGVyaXQgZnJvbSB0aGUgYnV0dG9uXG4gICAgICAvLyB0aGlzIGtlZXBzIGEgYnV0dG9uJ3MgcG9wb3ZlciB1bmRlciBhIGZseW91dCB0aGF0IHdvdWxkIGNvdmVyIHRoZSBidXR0b25cbiAgICAgIC8vIGJ1dCBhIHBvcG92ZXIgdHJpZ2dlcmVkIGluc2lkZSBhIGZseW91dCB3aWxsIGFwcGVhciBvdmVyIHRoYXQgZmx5b3V0XG5cblxuICAgICAgdmFyIHpJbmRleFByb3AgPSBfdGhpcy5wcm9wcy56SW5kZXg7XG4gICAgICB2YXIgekluZGV4ID0gekluZGV4UHJvcCA9PSBudWxsID8gZ2V0RWxlbWVudFpJbmRleChfdGhpcy5idXR0b24sIF90aGlzLnBhbmVsKSArIDIwMDAgOiB6SW5kZXhQcm9wO1xuXG4gICAgICB2YXIgcG9wb3ZlclN0eWxlcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgX3RoaXMucHJvcHMucGFuZWxTdHlsZSksIHt9LCB7XG4gICAgICAgIHRvcDogdG9wLFxuICAgICAgICBsZWZ0OiBfdGhpcy5wcm9wcy5hdHRhY2hUb0FuY2hvciAmJiBhbmNob3JCb3VuZGluZ0JveCA/IGFuY2hvckJvdW5kaW5nQm94LmxlZnQgOiBsZWZ0LFxuICAgICAgICB6SW5kZXg6IHpJbmRleFxuICAgICAgfSk7XG5cbiAgICAgIHZhciB3aWxsUmVuZGVyQXJyb3cgPSAhX3RoaXMucHJvcHMuYXR0YWNoVG9BbmNob3IgJiYgX3RoaXMucHJvcHMuaGFzQXJyb3c7XG4gICAgICB2YXIgYXJyb3dTdHlsZXMgPSB3aWxsUmVuZGVyQXJyb3cgPyBhcnJvdyA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBhcnJvd1Bvc2l0aW9uID0gZm91bmRQb3NpdGlvbjtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwb3BvdmVyU3R5bGVzOiBwb3BvdmVyU3R5bGVzLFxuICAgICAgICBhcnJvd1N0eWxlczogYXJyb3dTdHlsZXMsXG4gICAgICAgIGFycm93UG9zaXRpb246IGFycm93UG9zaXRpb24sXG4gICAgICAgIG9wZW5Qb3NpdGlvbjogZm91bmRQb3NpdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9zaXRpb25Qb3BvdmVyRml4ZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyKHRydWUpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvc2l0aW9uUG9wb3ZlckZsdWlkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlcihmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicGFuZWxSZWZcIiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIF90aGlzLnBhbmVsID0gbm9kZTtcbiAgICAgIF90aGlzLnByb3BzLnBhbmVsUmVmICYmIF90aGlzLnByb3BzLnBhbmVsUmVmKG5vZGUpO1xuXG4gICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgIC8vIHBhbmVsIGhhcyB1bm1vdW50ZWQsIHJlc3RvcmUgdGhlIHN0YXRlIGRlZmF1bHRzXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBwb3BvdmVyU3R5bGVzOiBERUZBVUxUX1BPUE9WRVJfU1RZTEVTLFxuICAgICAgICAgIGFycm93U3R5bGVzOiB7fSxcbiAgICAgICAgICBhcnJvd1Bvc2l0aW9uOiBudWxsLFxuICAgICAgICAgIG9wZW5Qb3NpdGlvbjogbnVsbCxcbiAgICAgICAgICBpc09wZW5TdGFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBfdGhpcy5wb3NpdGlvblBvcG92ZXJGbHVpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwYW5lbCBpcyBjb21pbmcgaW50byBleGlzdGVuY2VcbiAgICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQoKTtcblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgX3RoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImJ1dHRvblJlZlwiLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgX3RoaXMuYnV0dG9uID0gbm9kZTtcbiAgICAgIF90aGlzLnByb3BzLmJ1dHRvblJlZiAmJiBfdGhpcy5wcm9wcy5idXR0b25SZWYobm9kZSk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHByZXZQcm9wczoge1xuICAgICAgICBpc09wZW46IHByb3BzLmlzT3BlblxuICAgICAgfSxcbiAgICAgIHN1cHByZXNzaW5nUG9wb3ZlcjogcHJvcHMuaXNPcGVuLFxuICAgICAgLy8gb25seSBzdXBwcmVzcyBpZiBjcmVhdGVkIHdpdGggaXNPcGVuPXRydWVcbiAgICAgIGlzQ2xvc2luZzogZmFsc2UsXG4gICAgICBpc09wZW5pbmc6IGZhbHNlLFxuICAgICAgcG9wb3ZlclN0eWxlczogREVGQVVMVF9QT1BPVkVSX1NUWUxFUyxcbiAgICAgIGFycm93U3R5bGVzOiB7fSxcbiAgICAgIGFycm93UG9zaXRpb246IG51bGwsXG4gICAgICBvcGVuUG9zaXRpb246IG51bGwsXG4gICAgICAvLyBvbmNlIGEgc3RhYmxlIHBvc2l0aW9uIGhhcyBiZWVuIGZvdW5kLCBrZWVwIHRoZSBjb250ZW50cyBvbiB0aGF0IHNpZGVcbiAgICAgIGlzT3BlblN0YWJsZTogZmFsc2UgLy8gd2FpdCBmb3IgYW55IGluaXRpYWwgb3BlbmluZyB0cmFuc2l0aW9ucyB0byBmaW5pc2ggYmVmb3JlIG1hcmtpbmcgYXMgc3RhYmxlXG5cbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlQb3BvdmVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5zdGF0ZS5zdXBwcmVzc2luZ1BvcG92ZXIpIHtcbiAgICAgICAgLy8gY29tcG9uZW50IHdhcyBjcmVhdGVkIHdpdGggaXNPcGVuPXRydWU7IG5vdyB0aGF0IGl0J3MgbW91bnRlZFxuICAgICAgICAvLyBzdG9wIHN1cHByZXNzaW5nIGFuZCBzdGFydCBvcGVuaW5nXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtbW91bnQtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHN1cHByZXNzaW5nUG9wb3ZlcjogZmFsc2UsXG4gICAgICAgICAgaXNPcGVuaW5nOiB0cnVlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIub25PcGVuUG9wb3ZlcigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICAvLyBUaGUgcG9wb3ZlciBpcyBiZWluZyBvcGVuZWQuXG4gICAgICBpZiAoIXByZXZQcm9wcy5pc09wZW4gJiYgdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5vbk9wZW5Qb3BvdmVyKCk7XG4gICAgICB9IC8vIHVwZGF0ZSBzY3JvbGwgbGlzdGVuZXJcblxuXG4gICAgICBpZiAocHJldlByb3BzLnJlcG9zaXRpb25PblNjcm9sbCAhPT0gdGhpcy5wcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUaGUgcG9wb3ZlciBpcyBiZWluZyBjbG9zZWQuXG5cblxuICAgICAgaWYgKHByZXZQcm9wcy5pc09wZW4gJiYgIXRoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBqdXN0IGNsb3NlZCB0aGUgcG9wb3ZlciwgcXVldWUgdXAgdGhlIHJlbW92YWwgb2YgdGhlIGNvbnRlbnQgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIHRyYW5zaXRpb24gaXMgY29tcGxldGUuXG4gICAgICAgIHRoaXMuY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc0Nsb3Npbmc6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNsb3NpbmdUcmFuc2l0aW9uVGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQsIHRydWUpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVzcG9zaXRpb25UaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN0cmFuZGVkRm9jdXNUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NpbmdUcmFuc2l0aW9uVGltZW91dCk7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYW5jaG9yQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuYW5jaG9yQ2xhc3NOYW1lLFxuICAgICAgICAgIGFuY2hvclBvc2l0aW9uID0gX3RoaXMkcHJvcHMuYW5jaG9yUG9zaXRpb24sXG4gICAgICAgICAgYnV0dG9uID0gX3RoaXMkcHJvcHMuYnV0dG9uLFxuICAgICAgICAgIGJ1dHRvblJlZiA9IF90aGlzJHByb3BzLmJ1dHRvblJlZixcbiAgICAgICAgICBpbnNlcnQgPSBfdGhpcyRwcm9wcy5pbnNlcnQsXG4gICAgICAgICAgaXNPcGVuID0gX3RoaXMkcHJvcHMuaXNPcGVuLFxuICAgICAgICAgIG93bkZvY3VzID0gX3RoaXMkcHJvcHMub3duRm9jdXMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgY2xvc2VQb3BvdmVyID0gX3RoaXMkcHJvcHMuY2xvc2VQb3BvdmVyLFxuICAgICAgICAgIHBhbmVsQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMucGFuZWxDbGFzc05hbWUsXG4gICAgICAgICAgcGFuZWxQYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzLnBhbmVsUGFkZGluZ1NpemUsXG4gICAgICAgICAgcGFuZWxQcm9wcyA9IF90aGlzJHByb3BzLnBhbmVsUHJvcHMsXG4gICAgICAgICAgcGFuZWxSZWYgPSBfdGhpcyRwcm9wcy5wYW5lbFJlZixcbiAgICAgICAgICBwYW5lbFN0eWxlID0gX3RoaXMkcHJvcHMucGFuZWxTdHlsZSxcbiAgICAgICAgICBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCA9IF90aGlzJHByb3BzLnBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0LFxuICAgICAgICAgIHBvcG92ZXJSZWYgPSBfdGhpcyRwcm9wcy5wb3BvdmVyUmVmLFxuICAgICAgICAgIGhhc0Fycm93ID0gX3RoaXMkcHJvcHMuaGFzQXJyb3csXG4gICAgICAgICAgYXJyb3dDaGlsZHJlbiA9IF90aGlzJHByb3BzLmFycm93Q2hpbGRyZW4sXG4gICAgICAgICAgcmVwb3NpdGlvbk9uU2Nyb2xsID0gX3RoaXMkcHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsLFxuICAgICAgICAgIHpJbmRleCA9IF90aGlzJHByb3BzLnpJbmRleCxcbiAgICAgICAgICBhdHRhY2hUb0FuY2hvciA9IF90aGlzJHByb3BzLmF0dGFjaFRvQW5jaG9yLFxuICAgICAgICAgIGRpc3BsYXkgPSBfdGhpcyRwcm9wcy5kaXNwbGF5LFxuICAgICAgICAgIG9mZnNldCA9IF90aGlzJHByb3BzLm9mZnNldCxcbiAgICAgICAgICBvblRyYXBEZWFjdGl2YXRpb24gPSBfdGhpcyRwcm9wcy5vblRyYXBEZWFjdGl2YXRpb24sXG4gICAgICAgICAgYnVmZmVyID0gX3RoaXMkcHJvcHMuYnVmZmVyLFxuICAgICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYUxhYmVsbGVkQnkgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgICAgY29udGFpbmVyID0gX3RoaXMkcHJvcHMuY29udGFpbmVyLFxuICAgICAgICAgIGZvY3VzVHJhcFByb3BzID0gX3RoaXMkcHJvcHMuZm9jdXNUcmFwUHJvcHMsXG4gICAgICAgICAgaW5pdGlhbEZvY3VzUHJvcCA9IF90aGlzJHByb3BzLmluaXRpYWxGb2N1cyxcbiAgICAgICAgICB0YWJJbmRleFByb3AgPSBfdGhpcyRwcm9wcy50YWJJbmRleCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgc3R5bGVzID0gZXVpUG9wb3ZlclN0eWxlcygpO1xuICAgICAgdmFyIHBvcG92ZXJTdHlsZXMgPSBbc3R5bGVzLmV1aVBvcG92ZXIsIHtcbiAgICAgICAgZGlzcGxheTogZGlzcGxheVxuICAgICAgfV07XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBvcG92ZXInLCB7XG4gICAgICAgICdldWlQb3BvdmVyLWlzT3Blbic6IHRoaXMuc3RhdGUuaXNPcGVuaW5nXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIGFuY2hvckNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQb3BvdmVyX19hbmNob3InLCBhbmNob3JDbGFzc05hbWUpO1xuICAgICAgdmFyIHNob3dBcnJvdyA9IGhhc0Fycm93ICYmICFhdHRhY2hUb0FuY2hvcjtcbiAgICAgIHZhciBwYW5lbDtcblxuICAgICAgaWYgKCF0aGlzLnN0YXRlLnN1cHByZXNzaW5nUG9wb3ZlciAmJiAoaXNPcGVuIHx8IHRoaXMuc3RhdGUuaXNDbG9zaW5nKSkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSB0YWJJbmRleFByb3A7XG4gICAgICAgIHZhciBpbml0aWFsRm9jdXMgPSBpbml0aWFsRm9jdXNQcm9wO1xuICAgICAgICB2YXIgYXJpYURlc2NyaWJlZGJ5O1xuICAgICAgICB2YXIgYXJpYUxpdmU7XG4gICAgICAgIHZhciBwYW5lbEFyaWFNb2RhbCA9IHBhbmVsUHJvcHMgIT09IG51bGwgJiYgcGFuZWxQcm9wcyAhPT0gdm9pZCAwICYmIHBhbmVsUHJvcHMuaGFzT3duUHJvcGVydHkoJ2FyaWEtbW9kYWwnKSA/IHBhbmVsUHJvcHNbJ2FyaWEtbW9kYWwnXSA6ICd0cnVlJztcbiAgICAgICAgdmFyIHBhbmVsUm9sZSA9IHBhbmVsUHJvcHMgIT09IG51bGwgJiYgcGFuZWxQcm9wcyAhPT0gdm9pZCAwICYmIHBhbmVsUHJvcHMuaGFzT3duUHJvcGVydHkoJ3JvbGUnKSA/IHBhbmVsUHJvcHMucm9sZSA6ICdkaWFsb2cnO1xuXG4gICAgICAgIGlmIChvd25Gb2N1cyB8fCBwYW5lbEFyaWFNb2RhbCAhPT0gJ3RydWUnKSB7XG4gICAgICAgICAgdGFiSW5kZXggPSB0YWJJbmRleFByb3AgIT09IG51bGwgJiYgdGFiSW5kZXhQcm9wICE9PSB2b2lkIDAgPyB0YWJJbmRleFByb3AgOiAwO1xuICAgICAgICAgIGFyaWFMaXZlID0gJ29mZic7XG5cbiAgICAgICAgICBpZiAoIWluaXRpYWxGb2N1cykge1xuICAgICAgICAgICAgaW5pdGlhbEZvY3VzID0gZnVuY3Rpb24gaW5pdGlhbEZvY3VzKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXM0LnBhbmVsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJpYUxpdmUgPSAnYXNzZXJ0aXZlJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmb2N1c1RyYXBTY3JlZW5SZWFkZXJUZXh0O1xuXG4gICAgICAgIGlmIChvd25Gb2N1cyB8fCBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCkge1xuICAgICAgICAgIGFyaWFEZXNjcmliZWRieSA9IHRoaXMuZGVzY3JpcHRpb25JZDtcbiAgICAgICAgICBmb2N1c1RyYXBTY3JlZW5SZWFkZXJUZXh0ID0gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgICBpZDogdGhpcy5kZXNjcmlwdGlvbklkXG4gICAgICAgICAgfSwgb3duRm9jdXMgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlQb3BvdmVyLnNjcmVlblJlYWRlckFubm91bmNlbWVudFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJZb3UgYXJlIGluIGEgZGlhbG9nLiBUbyBjbG9zZSB0aGlzIGRpYWxvZywgaGl0IGVzY2FwZS5cIlxuICAgICAgICAgIH0pLCBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJldHVybkZvY3VzID0gdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgPyByZXR1cm5Gb2N1c0NvbmZpZyA6IGZhbHNlO1xuICAgICAgICBwYW5lbCA9IF9fX0Vtb3Rpb25KU1goRXVpUG9ydGFsLCB7XG4gICAgICAgICAgaW5zZXJ0OiBpbnNlcnRcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlGb2N1c1RyYXAsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGlja091dHNpZGVEaXNhYmxlczogdHJ1ZVxuICAgICAgICB9LCBmb2N1c1RyYXBQcm9wcywge1xuICAgICAgICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyAvLyBJZ25vcmUgdGVtcG9yYXJ5IHN0YXRlIG9mIGluZGVjaXNpdmUgZm9jdXNcbiAgICAgICAgICAsXG4gICAgICAgICAgaW5pdGlhbEZvY3VzOiBpbml0aWFsRm9jdXMsXG4gICAgICAgICAgb25EZWFjdGl2YXRpb246IG9uVHJhcERlYWN0aXZhdGlvbixcbiAgICAgICAgICBvbkNsaWNrT3V0c2lkZTogdGhpcy5vbkNsaWNrT3V0c2lkZSxcbiAgICAgICAgICBvbkVzY2FwZUtleTogdGhpcy5vbkVzY2FwZUtleSxcbiAgICAgICAgICBkaXNhYmxlZDogIW93bkZvY3VzIHx8ICF0aGlzLnN0YXRlLmlzT3BlblN0YWJsZSB8fCB0aGlzLnN0YXRlLmlzQ2xvc2luZ1xuICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyUGFuZWwsIF9leHRlbmRzKHt9LCBwYW5lbFByb3BzLCB7XG4gICAgICAgICAgcGFuZWxSZWY6IHRoaXMucGFuZWxSZWYsXG4gICAgICAgICAgaXNPcGVuOiB0aGlzLnN0YXRlLmlzT3BlbmluZyxcbiAgICAgICAgICBwb3NpdGlvbjogdGhpcy5zdGF0ZS5hcnJvd1Bvc2l0aW9uLFxuICAgICAgICAgIGlzQXR0YWNoZWQ6IGF0dGFjaFRvQW5jaG9yLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhwYW5lbENsYXNzTmFtZSwgcGFuZWxQcm9wcyA9PT0gbnVsbCB8fCBwYW5lbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYW5lbFByb3BzLmNsYXNzTmFtZSksXG4gICAgICAgICAgaGFzU2hhZG93OiBmYWxzZSxcbiAgICAgICAgICBwYWRkaW5nU2l6ZTogcGFuZWxQYWRkaW5nU2l6ZSxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICAgICAgXCJhcmlhLWxpdmVcIjogYXJpYUxpdmUsXG4gICAgICAgICAgcm9sZTogcGFuZWxSb2xlLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkQnksXG4gICAgICAgICAgXCJhcmlhLW1vZGFsXCI6IHBhbmVsQXJpYU1vZGFsLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAgICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGhpcy5zdGF0ZS5wb3BvdmVyU3R5bGVzKSwge30sIHtcbiAgICAgICAgICAgIC8vIEFkZGluZyBgd2lsbC1jaGFuZ2VgIHRvIHJlZHVjZSByaXNrIG9mIGEgYmx1cnJ5IGFuaW1hdGlvbiBpbiBDaHJvbWUgODYrXG4gICAgICAgICAgICB3aWxsQ2hhbmdlOiAhdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgPyAndHJhbnNmb3JtLCBvcGFjaXR5JyA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pLCBzaG93QXJyb3cgJiYgdGhpcy5zdGF0ZS5hcnJvd1Bvc2l0aW9uICYmIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlckFycm93LCB7XG4gICAgICAgICAgcG9zaXRpb246IHRoaXMuc3RhdGUuYXJyb3dQb3NpdGlvbixcbiAgICAgICAgICBzdHlsZTogdGhpcy5zdGF0ZS5hcnJvd1N0eWxlc1xuICAgICAgICB9LCBhcnJvd0NoaWxkcmVuKSwgZm9jdXNUcmFwU2NyZWVuUmVhZGVyVGV4dCwgX19fRW1vdGlvbkpTWChFdWlNdXRhdGlvbk9ic2VydmVyLCB7XG4gICAgICAgICAgb2JzZXJ2ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgLy8gZWxlbWVudCBhdHRyaWJ1dGUgY2hhbmdlc1xuICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgICAgLy8gYWRkZWQvcmVtb3ZlZCBlbGVtZW50c1xuICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIC8vIHRleHQgY2hhbmdlc1xuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSAvLyB3YXRjaCBhbGwgY2hpbGQgZWxlbWVudHNcblxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25NdXRhdGlvbjogdGhpcy5vbk11dGF0aW9uXG4gICAgICAgIH0sIGZ1bmN0aW9uIChtdXRhdGlvblJlZikge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIHJlZjogbXV0YXRpb25SZWZcbiAgICAgICAgICB9LCBjaGlsZHJlbik7XG4gICAgICAgIH0pKSkpO1xuICAgICAgfSAvLyByZWFjdC1mb2N1cy1vbiBhbmQgcmVsYXRlZCBkbyBub3QgcmVnaXN0ZXIgb3V0c2lkZSBjbGljayBkZXRlY3Rpb25cbiAgICAgIC8vIHdoZW4gZGlzYWJsZWQsIHNvIHdlIHN0aWxsIG5lZWQgdG8gY29uZGl0aW9uYWxseSBjaGVjayBmb3IgdGhhdCBvdXJzZWx2ZXNcblxuXG4gICAgICBpZiAob3duRm9jdXMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNzczogcG9wb3ZlclN0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgcmVmOiBwb3BvdmVyUmVmXG4gICAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBjc3M6IC8qI19fUFVSRV9fKi9fY3NzKHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXlcbiAgICAgICAgICB9LCBcIjtsYWJlbDpyZW5kZXI7XCIpLFxuICAgICAgICAgIGNsYXNzTmFtZTogYW5jaG9yQ2xhc3NlcyxcbiAgICAgICAgICByZWY6IHRoaXMuYnV0dG9uUmVmXG4gICAgICAgIH0sIGJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gbnVsbCA6IGJ1dHRvbiksIHBhbmVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aU91dHNpZGVDbGlja0RldGVjdG9yLCB7XG4gICAgICAgICAgb25PdXRzaWRlQ2xpY2s6IHRoaXMuY2xvc2VQb3BvdmVyXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNzczogcG9wb3ZlclN0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgcmVmOiBwb3BvdmVyUmVmLFxuICAgICAgICAgIG9uS2V5RG93bjogdGhpcy5vbktleURvd25cbiAgICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNzczogLyojX19QVVJFX18qL19jc3Moe1xuICAgICAgICAgICAgZGlzcGxheTogZGlzcGxheVxuICAgICAgICAgIH0sIFwiO2xhYmVsOnJlbmRlcjtcIiksXG4gICAgICAgICAgY2xhc3NOYW1lOiBhbmNob3JDbGFzc2VzLFxuICAgICAgICAgIHJlZjogdGhpcy5idXR0b25SZWZcbiAgICAgICAgfSwgYnV0dG9uIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBudWxsIDogYnV0dG9uKSwgcGFuZWwpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLnByZXZQcm9wcy5pc09wZW4gJiYgIW5leHRQcm9wcy5pc09wZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcmV2UHJvcHM6IHtcbiAgICAgICAgICAgIGlzT3BlbjogbmV4dFByb3BzLmlzT3BlblxuICAgICAgICAgIH0sXG4gICAgICAgICAgaXNDbG9zaW5nOiB0cnVlLFxuICAgICAgICAgIGlzT3BlbmluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZTdGF0ZS5wcmV2UHJvcHMuaXNPcGVuICE9PSBuZXh0UHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJldlByb3BzOiB7XG4gICAgICAgICAgICBpc09wZW46IG5leHRQcm9wcy5pc09wZW5cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlQb3BvdmVyO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpUG9wb3ZlciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpc09wZW46IGZhbHNlLFxuICBvd25Gb2N1czogdHJ1ZSxcbiAgYW5jaG9yUG9zaXRpb246ICdkb3duQ2VudGVyJyxcbiAgcGFuZWxQYWRkaW5nU2l6ZTogJ20nLFxuICBoYXNBcnJvdzogdHJ1ZSxcbiAgZGlzcGxheTogJ2lubGluZS1ibG9jaydcbn0pO1xuXG5FdWlQb3BvdmVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogQ2xhc3MgbmFtZSBwYXNzZWQgdG8gdGhlIGRpcmVjdCBwYXJlbnQgb2YgdGhlIGJ1dHRvblxuICAgICAqL1xuICBhbmNob3JDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogQWxpZ25tZW50IG9mIHRoZSBwb3BvdmVyIGFuZCBhcnJvdyByZWxhdGl2ZSB0byB0aGUgYnV0dG9uXG4gICAgICovXG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFN0eWxlIGFuZCBwb3NpdGlvbiBhbHRlcmF0aW9uIGZvciBhcnJvdy1sZXNzLCBsZWZ0LWFsaWduZWRcbiAgICAgKiBhdHRhY2htZW50LiBJbnRlbmRlZCBmb3IgdXNlIHdpdGggaW5wdXRzIGFzIGFuY2hvcnMsIGUuZy5cbiAgICAgKiBFdWlJbnB1dFBvcG92ZXJcbiAgICAgKi9cbiAgYXR0YWNoVG9BbmNob3I6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFRyaWdnZXJpbmcgZWxlbWVudCBmb3Igd2hpY2ggdG8gYWxpZ24gdGhlIHBvcG92ZXIgdG9cbiAgICAgKi9cbiAgYnV0dG9uOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBoYW5kbGUgaGlkaW5nIG9mIHRoZSBwb3BvdmVyXG4gICAgICovXG4gIGNsb3NlUG9wb3ZlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBSZXN0cmljdCB0aGUgcG9wb3ZlcidzIHBvc2l0aW9uIHdpdGhpbiB0aGlzIGVsZW1lbnRcbiAgICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENTUyBkaXNwbGF5IHR5cGUgZm9yIGJvdGggdGhlIHBvcG92ZXIgYW5kIGFuY2hvclxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gRXVpRm9jdXNUcmFwXG4gICAgICovXG4gIGZvY3VzVHJhcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFNob3cgYXJyb3cgaW5kaWNhdGluZyB0byBvcmlnaW5hdGluZyBidXR0b25cbiAgICAgKi9cbiAgaGFzQXJyb3c6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFNwZWNpZmllcyB3aGF0IGVsZW1lbnQgc2hvdWxkIGluaXRpYWxseSBoYXZlIGZvY3VzOyBDYW4gYmUgYSBET01cbiAgICAgKiBub2RlLCBvciBhIHNlbGVjdG9yIHN0cmluZyAod2hpY2ggd2lsbCBiZSBwYXNzZWQgdG9cbiAgICAgKiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCkgdG8gZmluZCB0aGUgRE9NIG5vZGUpLCBvciBhIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiByZXR1cm5zIGEgRE9NIG5vZGUuXG4gICAgICpcbiAgICAgKiBJZiBub3QgcGFzc2VkLCBpbml0aWFsIGZvY3VzIGRlZmF1bHRzIHRvIHRoZSBwb3BvdmVyIHBhbmVsLlxuICAgICAqL1xuICBpbml0aWFsRm9jdXM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogUGFzc2VkIGRpcmVjdGx5IHRvIEV1aVBvcnRhbCBmb3IgRE9NIHBvc2l0aW9uaW5nLiBCb3RoIHByb3BlcnRpZXMgYXJlXG4gICAgICogcmVxdWlyZWQgaWYgcHJvcCBpcyBzcGVjaWZpZWRcbiAgICAgKi9cbiAgaW5zZXJ0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHNpYmxpbmc6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcImJlZm9yZVwiLCBcImFmdGVyXCJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuXG4gIC8qKlxuICAgICAqIFZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIHBvcG92ZXJcbiAgICAgKi9cbiAgaXNPcGVuOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBUcmFwcyB0YWIgZm9jdXMgd2l0aGluIHRoZSBwb3BvdmVyIGNvbnRlbnRzXG4gICAgICovXG4gIG93bkZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBDdXN0b20gY2xhc3MgYWRkZWQgdG8gdGhlIEV1aVBhbmVsIGNvbnRhaW5pbmcgdGhlIHBvcG92ZXIgY29udGVudHNcbiAgICAgKi9cbiAgcGFuZWxDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRXVpUGFuZWwgcGFkZGluZyBvbiBhbGwgc2lkZXNcbiAgICAgKi9cbiAgcGFuZWxQYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBTdGFuZGFyZCBET00gYHN0eWxlYCBhdHRyaWJ1dGUuIFBhc3NlZCB0byB0aGUgRXVpUGFuZWxcbiAgICAgKi9cbiAgcGFuZWxTdHlsZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIEV1aVBhbmVsLiBTZWUgI0V1aVBvcG92ZXJQYW5lbFByb3BzXG4gICAgICovXG4gIHBhbmVsUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIHBhbmVsUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9wdGlvbmFsIHNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHRvIGFubm91bmNlIHVwb24gcG9wb3ZlciBvcGVuLFxuICAgICAqIGluIGFkZGl0aW9uIHRvIEVVSSdzIGRlZmF1bHQgcG9wb3ZlciBpbnN0cnVjdGlvbnMgZm9yIEVzY2FwZSBvbiBjbG9zZS5cbiAgICAgKiBVc2VmdWwgZm9yIHBvcG92ZXJzIHRoYXQgbWF5IGhhdmUgYWRkaXRpb25hbCBrZXlib2FyZCBjYXBhYmlsaXRpZXMgc3VjaCBhc1xuICAgICAqIGFycm93IG5hdmlnYXRpb24uXG4gICAgICovXG4gIHBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRdKSxcbiAgcG9wb3ZlclJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCwgdGhlIHBvcG92ZXIncyBwb3NpdGlvbiBpcyByZS1jYWxjdWxhdGVkIHdoZW4gdGhlIHVzZXJcbiAgICAgKiBzY3JvbGxzLCB0aGlzIHN1cHBvcnRzIGhhdmluZyBmaXhlZC1wb3NpdGlvbiBwb3BvdmVyIGFuY2hvcnMuIFdoZW4gbmVzdGluZ1xuICAgICAqIGFuIGBFdWlQb3BvdmVyYCBpbiBhIHNjcm9sbGFibGUgY29udGFpbmVyLCBgcmVwb3NpdGlvbk9uU2Nyb2xsYCBzaG91bGQgYmUgYHRydWVgXG4gICAgICovXG4gIHJlcG9zaXRpb25PblNjcm9sbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgcG9wb3ZlciBjb250ZW50IGluaGVyaXRzIHRoZSB6LWluZGV4IG9mIHRoZSBhbmNob3JcbiAgICAgKiBjb21wb25lbnQ7IHBhc3MgYHpJbmRleGAgdG8gb3ZlcnJpZGVcbiAgICAgKi9cbiAgekluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIEZ1bmN0aW9uIGNhbGxiYWNrIGZvciB3aGVuIHRoZSBmb2N1cyB0cmFwIGlzIGRlYWN0aXZhdGVkXG4gICAgICovXG4gIG9uVHJhcERlYWN0aXZhdGlvbjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBEaXN0YW5jZSBhd2F5IGZyb20gdGhlIGFuY2hvciB0aGF0IHRoZSBwb3BvdmVyIHdpbGwgcmVuZGVyXG4gICAgICovXG4gIG9mZnNldDogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBib3VuZGluZyBjb250YWluZXI7XG4gICAgICogUGFzcyBhbiBhcnJheSBvZiA0IHZhbHVlcyB0byBhZGp1c3QgZWFjaCBzaWRlIGRpZmZlcmVudGx5OiBgW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF1gXG4gICAgICogRGVmYXVsdCBpcyAxNlxuICAgICAqL1xuICBidWZmZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogRWxlbWVudCB0byBwYXNzIGFzIHRoZSBjaGlsZCBlbGVtZW50IG9mIHRoZSBhcnJvdztcbiAgICAgKiBVc2UgY2FzZSBpcyB0eXBpY2FsbHkgbGltaXRlZCB0byBhbiBhY2NvbXBhbnlpbmcgYEV1aUJlYWNvbmBcbiAgICAgKi9cbiAgYXJyb3dDaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogUHJvdmlkZSBhIG5hbWUgdG8gdGhlIHBvcG92ZXIgcGFuZWxcbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogQWx0ZXJuYXRpdmUgb3B0aW9uIHRvIGBhcmlhLWxhYmVsYCB0aGF0IHRha2VzIGFuIGBpZGAuXG4gICAgICogVXN1YWxseSB0YWtlcyB0aGUgYGlkYCBvZiB0aGUgcG9wb3ZlciB0aXRsZVxuICAgICAqL1xuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXInO1xuZXhwb3J0IHZhciBFdWlNdXRhdGlvbk9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRXVpT2JzZXJ2ZXIpIHtcbiAgX2luaGVyaXRzKEV1aU11dGF0aW9uT2JzZXJ2ZXIsIF9FdWlPYnNlcnZlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlNdXRhdGlvbk9ic2VydmVyKTtcblxuICBmdW5jdGlvbiBFdWlNdXRhdGlvbk9ic2VydmVyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlNdXRhdGlvbk9ic2VydmVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibmFtZVwiLCAnRXVpTXV0YXRpb25PYnNlcnZlcicpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTXV0YXRpb25cIiwgZnVuY3Rpb24gKHJlY29yZHMsIG9ic2VydmVyKSB7XG4gICAgICBfdGhpcy5wcm9wcy5vbk11dGF0aW9uKHJlY29yZHMsIG9ic2VydmVyKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNoaWxkTm9kZSA9IF90aGlzLmNoaWxkTm9kZTtcbiAgICAgIF90aGlzLm9ic2VydmVyID0gbWFrZU11dGF0aW9uT2JzZXJ2ZXIoY2hpbGROb2RlLCBfdGhpcy5wcm9wcy5vYnNlcnZlck9wdGlvbnMsIF90aGlzLm9uTXV0YXRpb24pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEV1aU11dGF0aW9uT2JzZXJ2ZXI7XG59KEV1aU9ic2VydmVyKTtcblxudmFyIG1ha2VNdXRhdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gbWFrZU11dGF0aW9uT2JzZXJ2ZXIobm9kZSwgX29ic2VydmVyT3B0aW9ucywgY2FsbGJhY2spIHtcbiAgLy8gSUUxMSBhbmQgdGhlIE11dGF0aW9uT2JzZXJ2ZXIgcG9seWZpbGwgdXNlZCBpbiBLaWJhbmEgKGZvciBKZXN0KSBpbXBsZW1lbnRcbiAgLy8gYW4gb2xkZXIgc3BlYyBpbiB3aGljaCBzcGVjaWZ5aW5nIGBhdHRyaWJ1dGVPbGRWYWx1ZWAgb3IgYGF0dHJpYnV0ZUZpbHRlcmBcbiAgLy8gd2l0aG91dCBzcGVjaWZ5aW5nIGBhdHRyaWJ1dGVzYCByZXN1bHRzIGluIGEgYFN5bnRheEVycm9yYC5cbiAgLy8gVGhlIGZvbGxvd2luZyBsb2dpYyBwYXRjaGVzIHRoZSBuZXdlciBzcGVjIGluIHdoaWNoIGBhdHRyaWJ1dGVzOiB0cnVlYCBjYW4gYmVcbiAgLy8gaW1wbGllZCB3aGVuIGFwcHJvcHJpYXRlIChgYXR0cmlidXRlT2xkVmFsdWVgIG9yIGBhdHRyaWJ1dGVGaWx0ZXJgIGlzIHNwZWNpZmllZCkuXG4gIHZhciBvYnNlcnZlck9wdGlvbnMgPSBfb2JqZWN0U3ByZWFkKHt9LCBfb2JzZXJ2ZXJPcHRpb25zKTtcblxuICB2YXIgbmVlZHNBdHRyaWJ1dGVzID0gb2JzZXJ2ZXJPcHRpb25zLmhhc093blByb3BlcnR5KCdhdHRyaWJ1dGVPbGRWYWx1ZScpIHx8IG9ic2VydmVyT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRlRmlsdGVyJyk7XG5cbiAgaWYgKG5lZWRzQXR0cmlidXRlcyAmJiAhb2JzZXJ2ZXJPcHRpb25zLmhhc093blByb3BlcnR5KCdhdHRyaWJ1dGVzJykpIHtcbiAgICBvYnNlcnZlck9wdGlvbnMuYXR0cmlidXRlcyA9IHRydWU7XG4gIH1cblxuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG4gIG9ic2VydmVyLm9ic2VydmUobm9kZSwgb2JzZXJ2ZXJPcHRpb25zKTtcbiAgcmV0dXJuIG9ic2VydmVyO1xufTtcblxuZXhwb3J0IHZhciB1c2VNdXRhdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcihjb250YWluZXIsIGNhbGxiYWNrLCBvYnNlcnZlck9wdGlvbnMpIHtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IG1ha2VNdXRhdGlvbk9ic2VydmVyKGNvbnRhaW5lciwgb2JzZXJ2ZXJPcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIC8vIGlnbm9yZSBjaGFuZ2luZyBvYnNlcnZlck9wdGlvbnNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIFtjb250YWluZXIsIGNhbGxiYWNrXSk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmV4cG9ydCB2YXIgRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aU91dHNpZGVDbGlja0RldGVjdG9yLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aU91dHNpZGVDbGlja0RldGVjdG9yKTtcblxuICAvLyBXZSBhcmUgd29ya2luZyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSBjbGljayBldmVudCBpc1xuICAvLyBlcXVpdmFsZW50IHRvIGEgc2VxdWVudGlhbCwgY29tcG91bmQgcHJlc3MgYW5kIHJlbGVhc2Ugb2ZcbiAgLy8gdGhlIHBvaW50aW5nIGRldmljZSAobW91c2UsIGZpbmdlciwgc3R5bHVzLCBldGMuKS5cbiAgLy8gQSBjbGljayBldmVudCdzIHRhcmdldCBjYW4gYmUgaW1wcmVjaXNlLCBhcyB0aGUgdmFsdWUgd2lsbCBiZVxuICAvLyB0aGUgY2xvc2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHByZXNzIChtb3VzZWRvd24sIHRvdWNoc3RhcnQpXG4gIC8vIGFuZCByZWxlYXNlIChtb3VzZXVwLCB0b3VjaGVuZCkgZXZlbnRzIChvZnRlbiA8Ym9keSAvPikgaWZcbiAgLy8gdGhlIHRoZSB0YXJnZXQgb2YgZWFjaCBldmVudCBkaWZmZXJzLlxuICAvLyBXZSBuZWVkIHRoZSBhY3R1YWwgZXZlbnQgdGFyZ2V0cyB0byBtYWtlIHRoZSBjb3JyZWN0IGRlY2lzaW9uc1xuICAvLyBhYm91dCB1c2VyIGludGVudGlvbi4gU28sIGNvbnNpZGVyIHRoZSBkb3duL3N0YXJ0IGFuZCB1cC9lbmRcbiAgLy8gaXRlbXMgYmVsb3cgYXMgdGhlIGRlY29uc3RydWN0aW9uIG9mIGEgY2xpY2sgZXZlbnQuXG4gIGZ1bmN0aW9uIEV1aU91dHNpZGVDbGlja0RldGVjdG9yKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aU91dHNpZGVDbGlja0RldGVjdG9yKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpOyAvLyB0aGUgaWQgaXMgdXNlZCB0byBpZGVudGlmeSB3aGljaCBFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvclxuICAgIC8vIGlzIHRoZSBzb3VyY2Ugb2YgYSBjbGljayBldmVudDsgYXMgdGhlIGNsaWNrIGV2ZW50IGJ1YmJsZXNcbiAgICAvLyB1cCBhbmQgcmVhY2hlcyB0aGUgY2xpY2sgZGV0ZWN0b3IncyBjaGlsZCBjb21wb25lbnQgdGhlXG4gICAgLy8gaWQgdmFsdWUgaXMgc3RhbXBlZCBvbiB0aGUgZXZlbnQuIFRoaXMgaWQgaXMgaW5zcGVjdGVkXG4gICAgLy8gaW4gdGhlIGRvY3VtZW50J3MgY2xpY2sgaGFuZGxlciwgYW5kIGlmIHRoZSBpZCBkb2Vzbid0XG4gICAgLy8gZXhpc3Qgb3IgZG9lc24ndCBtYXRjaCB0aGlzIGRldGVjdG9yJ3MgaWQsIHRoZW4gdHJpZ2dlclxuICAgIC8vIHRoZSBvdXRzaWRlQ2xpY2sgY2FsbGJhY2suXG4gICAgLy9cbiAgICAvLyBUYWtpbmcgdGhpcyBhcHByb2FjaCBpbnN0ZWFkIG9mIGNoZWNraW5nIGlmIHRoZSBldmVudCdzXG4gICAgLy8gdGFyZ2V0IGVsZW1lbnQgZXhpc3RzIGluIHRoaXMgY29tcG9uZW50J3MgRE9NIHN1Yi10cmVlIGlzXG4gICAgLy8gbmVjZXNzYXJ5IGZvciBoYW5kbGluZyBjbGlja3Mgb3JpZ2luYXRpbmcgZnJvbSBjaGlsZHJlblxuICAgIC8vIHJlbmRlcmVkIHRocm91Z2ggUmVhY3QncyBwb3J0YWxzIChFdWlQb3J0YWwpLiBUaGUgaWQgdHJhY2tpbmdcbiAgICAvLyB3b3JrcyBiZWNhdXNlIFJlYWN0IGd1YXJhbnRlZXMgdGhlIGV2ZW50IGJ1YmJsZXMgdGhyb3VnaCB0aGVcbiAgICAvLyB2aXJ0dWFsIERPTSBhbmQgZXhlY3V0ZXMgRXVpQ2xpY2tEZXRlY3RvcidzIG9uQ2xpY2sgaGFuZGxlcixcbiAgICAvLyBzdGFtcGluZyB0aGUgaWQgZXZlbiB0aG91Z2ggdGhlIGV2ZW50IG9yaWdpbmF0ZXMgb3V0c2lkZVxuICAgIC8vIHRoaXMgY29tcG9uZW50J3MgcmVpZmllZCBET00gdHJlZS5cblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNhcHR1cmVkRG93bklkc1wiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xpY2tPdXRzaWRlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgICBvbk91dHNpZGVDbGljayA9IF90aGlzJHByb3BzLm9uT3V0c2lkZUNsaWNrO1xuXG4gICAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBbXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXZlbnQgPSBlO1xuXG4gICAgICBpZiAoZXZlbnQuZXVpR2VuZXJhdGVkQnkgJiYgZXZlbnQuZXVpR2VuZXJhdGVkQnkuaW5jbHVkZXMoX3RoaXMuaWQpIHx8IF90aGlzLmNhcHR1cmVkRG93bklkcy5pbmNsdWRlcyhfdGhpcy5pZCkpIHtcbiAgICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgICByZXR1cm4gb25PdXRzaWRlQ2xpY2soZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2hpbGRDbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQsIGNiKSB7XG4gICAgICAvLyB0byBzdXBwb3J0IG5lc3RlZCBjbGljayBkZXRlY3RvcnMsIGJ1aWxkIGFuIGFycmF5XG4gICAgICAvLyBvZiBkZXRlY3RvciBpZHMgdGhhdCBoYXZlIGJlZW4gZW5jb3VudGVyZWQ7XG4gICAgICBpZiAoZXZlbnQubmF0aXZlRXZlbnQuaGFzT3duUHJvcGVydHkoJ2V1aUdlbmVyYXRlZEJ5JykpIHtcbiAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuZXVpR2VuZXJhdGVkQnkucHVzaChfdGhpcy5pZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5uYXRpdmVFdmVudC5ldWlHZW5lcmF0ZWRCeSA9IFtfdGhpcy5pZF07XG4gICAgICB9XG5cbiAgICAgIGlmIChjYikgY2IoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2hpbGRNb3VzZURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5vbkNoaWxkQ2xpY2soZXZlbnQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBuYXRpdmVFdmVudCA9IGUubmF0aXZlRXZlbnQ7XG4gICAgICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IG5hdGl2ZUV2ZW50LmV1aUdlbmVyYXRlZEJ5O1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Nb3VzZURvd24pIF90aGlzLnByb3BzLm9uTW91c2VEb3duKGUpO1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Ub3VjaFN0YXJ0KSBfdGhpcy5wcm9wcy5vblRvdWNoU3RhcnQoZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNoaWxkTW91c2VVcFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLm9uQ2hpbGRDbGljayhldmVudCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uTW91c2VVcCkgX3RoaXMucHJvcHMub25Nb3VzZVVwKGUpO1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Ub3VjaEVuZCkgX3RoaXMucHJvcHMub25Ub3VjaEVuZChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuaWQgPSBodG1sSWRHZW5lcmF0b3IoKSgpO1xuICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IFtdO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uQ2xpY2tPdXRzaWRlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRoaXMucHJvcHMuY2hpbGRyZW4ucHJvcHMpLCB7XG4gICAgICAgIG9uTW91c2VEb3duOiB0aGlzLm9uQ2hpbGRNb3VzZURvd24sXG4gICAgICAgIG9uVG91Y2hTdGFydDogdGhpcy5vbkNoaWxkTW91c2VEb3duLFxuICAgICAgICBvbk1vdXNlVXA6IHRoaXMub25DaGlsZE1vdXNlVXAsXG4gICAgICAgIG9uVG91Y2hFbmQ6IHRoaXMub25DaGlsZE1vdXNlVXBcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY2hpbGQgPSBDaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGQsIHByb3BzKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3I7XG59KENvbXBvbmVudCk7XG5FdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBvbk91dHNpZGVDbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uTW91c2VEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb3VzZVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Ub3VjaFN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Ub3VjaEVuZDogUHJvcFR5cGVzLmZ1bmNcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcInBvc2l0aW9uXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGV1aVBvcG92ZXJBcnJvd1N0eWxlcyB9IGZyb20gJy4vX3BvcG92ZXJfYXJyb3cuc3R5bGVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgUE9TSVRJT05TID0gWyd0b3AnLCAnbGVmdCcsICdyaWdodCcsICdib3R0b20nXTtcbmV4cG9ydCB2YXIgRXVpUG9wb3ZlckFycm93ID0gZnVuY3Rpb24gRXVpUG9wb3ZlckFycm93KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpUG9wb3ZlckFycm93U3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpUG9wb3ZlckFycm93LCBzdHlsZXNbcG9zaXRpb25dXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS1wb3BvdmVyLWFycm93XCI6IHBvc2l0aW9uLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpUG9wb3ZlckFycm93LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpQmFja2dyb3VuZENvbG9yLCBsb2dpY2FscywgbG9naWNhbFNpemVDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIHBvcG92ZXJBcnJvd1NpemUgPSAnbSc7XG5leHBvcnQgdmFyIGV1aVBvcG92ZXJBcnJvd1N0eWxlcyA9IGZ1bmN0aW9uIGV1aVBvcG92ZXJBcnJvd1N0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lOyAvLyBNYXRjaCB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiBwYW5lbHNcblxuICB2YXIgYm9yZGVyQ29sb3IgPSBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAncGxhaW4nKTtcbiAgdmFyIGFycm93U2l6ZSA9IGV1aVRoZW1lLnNpemVbcG9wb3ZlckFycm93U2l6ZV07XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBvcG92ZXJBcnJvdzogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsU2l6ZUNTUygwLCAwKSwgXCImOmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsU2l6ZUNTUygwLCAwKSwgXCI7fTtsYWJlbDpldWlQb3BvdmVyQXJyb3c7XCIpLFxuICAgIC8vIFBPU0lUSU9OU1xuICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhcIiY6YmVmb3Jle1wiLCBsb2dpY2Fscy5ib3R0b20sIFwiOi1cIiwgYXJyb3dTaXplLCBcIjtcIiwgbG9naWNhbHNbJ2JvcmRlci1sZWZ0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXJpZ2h0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXRvcCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6dG9wO1wiKSxcbiAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoXCImOmJlZm9yZXtcIiwgbG9naWNhbHMudG9wLCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItbGVmdCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1yaWdodCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1ib3R0b20nXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcIiY6YmVmb3Jle1wiLCBsb2dpY2Fscy50b3AsIFwiOjUwJTtcIiwgbG9naWNhbHMucmlnaHQsIFwiOi1cIiwgYXJyb3dTaXplLCBcIjtcIiwgbG9naWNhbHNbJ2JvcmRlci10b3AnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItYm90dG9tJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWxlZnQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwiJjpiZWZvcmV7XCIsIGxvZ2ljYWxzLnRvcCwgXCI6NTAlO1wiLCBsb2dpY2Fscy5sZWZ0LCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItdG9wJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWJvdHRvbSddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1yaWdodCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6cmlnaHQ7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpUG9wb3ZlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVBvcG92ZXJTdHlsZXMoKSB7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZSBhbmNob3Igd3JhcHBlclxuICAgIGV1aVBvcG92ZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpldWlQb3BvdmVyO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaXNPcGVuXCIsIFwiaXNBdHRhY2hlZFwiLCBcInBvc2l0aW9uXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlQYW5lbCB9IGZyb20gJy4uLy4uL3BhbmVsL3BhbmVsJztcbmltcG9ydCB7IGV1aVBvcG92ZXJQYW5lbFN0eWxlcyB9IGZyb20gJy4vX3BvcG92ZXJfcGFuZWwuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVBvcG92ZXJQYW5lbENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh7XG4gIHBhZGRpbmdTaXplOiAnbCdcbn0pO1xuXG4vKipcbiAqICpJTlRFUk5BTCBPTkxZKlxuICogUHVyZWx5IGZvciByZS11c2Ugb2Ygc3R5bGluZ1xuICovXG5leHBvcnQgdmFyIEV1aVBvcG92ZXJQYW5lbCA9IGZ1bmN0aW9uIEV1aVBvcG92ZXJQYW5lbChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGlzT3BlbiA9IF9yZWYuaXNPcGVuLFxuICAgICAgaXNBdHRhY2hlZCA9IF9yZWYuaXNBdHRhY2hlZCxcbiAgICAgIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgcGFuZWxDb250ZXh0ID0gdXNlQ29udGV4dChFdWlQb3BvdmVyUGFuZWxDb250ZXh0KTtcbiAgaWYgKHJlc3QucGFkZGluZ1NpemUpIHBhbmVsQ29udGV4dC5wYWRkaW5nU2l6ZSA9IHJlc3QucGFkZGluZ1NpemU7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpOyAvLyBVc2luZyBCRU0gY2hpbGQgY2xhc3MgZm9yIEJXQ1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUG9wb3Zlcl9fcGFuZWwnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gZXVpUG9wb3ZlclBhbmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBwYW5lbENTUyA9IFtzdHlsZXMuZXVpUG9wb3Zlcl9fcGFuZWwsIGlzT3BlbiAmJiBzdHlsZXMuaXNPcGVuLCBpc09wZW4gJiYgcG9zaXRpb24gJiYgc3R5bGVzW3Bvc2l0aW9uXV07XG5cbiAgaWYgKGlzQXR0YWNoZWQpIHtcbiAgICBwYW5lbENTUyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocGFuZWxDU1MpLCBbaXNPcGVuICYmIHN0eWxlcy5hdHRhY2hlZC5pc09wZW4sIHBvc2l0aW9uICYmIHN0eWxlcy5hdHRhY2hlZFtwb3NpdGlvbl1dKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXJQYW5lbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcGFuZWxDb250ZXh0XG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpUGFuZWwsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBwYW5lbENTUyxcbiAgICBcImRhdGEtcG9wb3Zlci1wYW5lbFwiOiB0cnVlLFxuICAgIFwiZGF0YS1wb3BvdmVyLW9wZW5cIjogaXNPcGVuIHx8IHVuZGVmaW5lZFxuICB9LCByZXN0KSwgY2hpbGRyZW4pKTtcbn07XG5FdWlQb3BvdmVyUGFuZWwucHJvcFR5cGVzID0ge1xuICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCJdKSxcblxuICAvKipcbiAgICAgKiBBZGRzIGEgbWVkaXVtIHNoYWRvdyB0byB0aGUgcGFuZWw7XG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluXCJgXG4gICAgICovXG4gIGhhc1NoYWRvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIHNsaWdodCAxcHggYm9yZGVyIG9uIGFsbCBlZGdlcy5cbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW4gfCB0cmFuc3BhcmVudFwiYFxuICAgICAqL1xuICBoYXNCb3JkZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFBhZGRpbmcgZm9yIGFsbCBmb3VyIHNpZGVzXG4gICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENvcm5lciBib3JkZXIgcmFkaXVzXG4gICAgICovXG4gIGJvcmRlclJhZGl1czogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBXaGVuIHRydWUgdGhlIHBhbmVsIHdpbGwgZ3JvdyBpbiBoZWlnaHQgdG8gbWF0Y2ggYEV1aUZsZXhJdGVtYFxuICAgICAqL1xuICBncm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFuZWxSZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWw7XG4gICAgICogVXN1YWxseSBhIGxpZ2h0ZW5lZCBmb3JtIG9mIHRoZSBicmFuZCBjb2xvcnNcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNBdHRhY2hlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInBhZGRpbmdTaXplXCIsIFwiYm9yZGVyUmFkaXVzXCIsIFwiY29sb3JcIiwgXCJoYXNTaGFkb3dcIiwgXCJoYXNCb3JkZXJcIiwgXCJncm93XCIsIFwicGFuZWxSZWZcIiwgXCJlbGVtZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MsIHVzZUV1aVBhZGRpbmdDU1MsIEJBQ0tHUk9VTkRfQ09MT1JTLCBQQURESU5HX1NJWkVTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGV1aVBhbmVsU3R5bGVzIH0gZnJvbSAnLi9wYW5lbC5zdHlsZSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFBBRERJTkdfU0laRVM7IC8vIEV4cG9ydGVkIHBhZGRpbmcgc2l6ZXMgYW5kIGNsYXNzIG5hbWVzIG5lY2Vzc2FyeSBmb3IgRXVpUG9wb3ZlciBhbmQgRXVpQ2FyZC5cbi8vIFdoaWNoIGN1cnJlbnRseSB3aWxsIG9ubHkgbWFpbnRhaW4gc3VwcG9ydCBmb3IgdGhlIG9yaWdpbmFsIHZhbHVlcyB1bnRpbCBjb252ZXJzaW9uLlxuXG52YXIgcGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbm9uZTogbnVsbCxcbiAgczogJ3BhZGRpbmdTbWFsbCcsXG4gIG06ICdwYWRkaW5nTWVkaXVtJyxcbiAgbDogJ3BhZGRpbmdMYXJnZSdcbn07XG5cbnZhciBfU0laRVMgPSBrZXlzT2YocGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCk7XG5cbmV4cG9ydCB2YXIgQk9SREVSX1JBRElJID0gWydub25lJywgJ20nXTtcbmV4cG9ydCB2YXIgQ09MT1JTID0gQkFDS0dST1VORF9DT0xPUlM7XG5leHBvcnQgdmFyIEV1aVBhbmVsID0gZnVuY3Rpb24gRXVpUGFuZWwoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJHBhZGRpbmdTaXplID0gX3JlZi5wYWRkaW5nU2l6ZSxcbiAgICAgIHBhZGRpbmdTaXplID0gX3JlZiRwYWRkaW5nU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRwYWRkaW5nU2l6ZSxcbiAgICAgIF9yZWYkYm9yZGVyUmFkaXVzID0gX3JlZi5ib3JkZXJSYWRpdXMsXG4gICAgICBib3JkZXJSYWRpdXMgPSBfcmVmJGJvcmRlclJhZGl1cyA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRib3JkZXJSYWRpdXMsXG4gICAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3BsYWluJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJGhhc1NoYWRvdyA9IF9yZWYuaGFzU2hhZG93LFxuICAgICAgaGFzU2hhZG93ID0gX3JlZiRoYXNTaGFkb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGhhc1NoYWRvdyxcbiAgICAgIF9yZWYkaGFzQm9yZGVyID0gX3JlZi5oYXNCb3JkZXIsXG4gICAgICBoYXNCb3JkZXIgPSBfcmVmJGhhc0JvcmRlciA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGhhc0JvcmRlcixcbiAgICAgIF9yZWYkZ3JvdyA9IF9yZWYuZ3JvdyxcbiAgICAgIGdyb3cgPSBfcmVmJGdyb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGdyb3csXG4gICAgICBwYW5lbFJlZiA9IF9yZWYucGFuZWxSZWYsXG4gICAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7IC8vIFNoYWRvd3MgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHRoZXJlJ3MgYSB3aGl0ZSBiYWNrZ3JvdW5kIChwbGFpbilcblxuICB2YXIgY2FuSGF2ZVNoYWRvdyA9ICFoYXNCb3JkZXIgJiYgY29sb3IgPT09ICdwbGFpbic7XG4gIHZhciBjYW5IYXZlQm9yZGVyID0gY29sb3IgPT09ICdwbGFpbicgfHwgY29sb3IgPT09ICd0cmFuc3BhcmVudCc7XG4gIHZhciBzdHlsZXMgPSBldWlQYW5lbFN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVBhbmVsLCBncm93ICYmIHN0eWxlcy5ncm93LCBzdHlsZXMucmFkaXVzW2JvcmRlclJhZGl1c10sIHVzZUV1aVBhZGRpbmdDU1MoKVtwYWRkaW5nU2l6ZV0sIHVzZUV1aUJhY2tncm91bmRDb2xvckNTUygpW2NvbG9yXSwgY2FuSGF2ZVNoYWRvdyAmJiBoYXNTaGFkb3cgPT09IHRydWUgJiYgc3R5bGVzLmhhc1NoYWRvdywgY2FuSGF2ZUJvcmRlciAmJiBoYXNCb3JkZXIgPT09IHRydWUgJiYgc3R5bGVzLmhhc0JvcmRlciwgcmVzdC5vbkNsaWNrICYmIHN0eWxlcy5pc0NsaWNrYWJsZV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUGFuZWwnLCBcImV1aVBhbmVsLS1cIi5jb25jYXQoY29sb3IpLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiZXVpUGFuZWwtLVwiLmNvbmNhdChwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwW3BhZGRpbmdTaXplXSksIHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXBbcGFkZGluZ1NpemVdKSwgY2xhc3NOYW1lKTtcblxuICBpZiAocmVzdC5vbkNsaWNrICYmIGVsZW1lbnQgIT09ICdkaXYnKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBwYW5lbFJlZixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNzczogY3NzU3R5bGVzXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHBhbmVsUmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVBhbmVsLnByb3BUeXBlcyA9IHtcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIl0pXSksXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIG1lZGl1bSBzaGFkb3cgdG8gdGhlIHBhbmVsO1xuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpblwiYFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFkZHMgYSBtZWRpdW0gc2hhZG93IHRvIHRoZSBwYW5lbDtcbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW5cImBcbiAgICAgKi9cbiAgaGFzU2hhZG93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBZGRzIGEgc2xpZ2h0IDFweCBib3JkZXIgb24gYWxsIGVkZ2VzLlxuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpbiB8IHRyYW5zcGFyZW50XCJgXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIHNsaWdodCAxcHggYm9yZGVyIG9uIGFsbCBlZGdlcy5cbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW4gfCB0cmFuc3BhcmVudFwiYFxuICAgICAqL1xuICBoYXNCb3JkZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFBhZGRpbmcgZm9yIGFsbCBmb3VyIHNpZGVzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUGFkZGluZyBmb3IgYWxsIGZvdXIgc2lkZXNcbiAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQ29ybmVyIGJvcmRlciByYWRpdXNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBDb3JuZXIgYm9yZGVyIHJhZGl1c1xuICAgICAqL1xuICBib3JkZXJSYWRpdXM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogV2hlbiB0cnVlIHRoZSBwYW5lbCB3aWxsIGdyb3cgaW4gaGVpZ2h0IHRvIG1hdGNoIGBFdWlGbGV4SXRlbWBcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBXaGVuIHRydWUgdGhlIHBhbmVsIHdpbGwgZ3JvdyBpbiBoZWlnaHQgdG8gbWF0Y2ggYEV1aUZsZXhJdGVtYFxuICAgICAqL1xuICBncm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFuZWxSZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWw7XG4gICAgICogVXN1YWxseSBhIGxpZ2h0ZW5lZCBmb3JtIG9mIHRoZSBicmFuZCBjb2xvcnNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwYW5lbDtcbiAgICAgKiBVc3VhbGx5IGEgbGlnaHRlbmVkIGZvcm0gb2YgdGhlIGJyYW5kIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlTaGFkb3cgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxMjJsdzBlLWdyb3dcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmdyb3c7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTIybHcwZS1ncm93XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpncm93O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxa2s3b2RpLWV1aVBhbmVsXCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MDtsYWJlbDpldWlQYW5lbDtcIlxufSA6IHtcbiAgbmFtZTogXCIxa2s3b2RpLWV1aVBhbmVsXCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MDtsYWJlbDpldWlQYW5lbDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aVBhbmVsU3R5bGVzID0gZnVuY3Rpb24gZXVpUGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpUGFuZWw6IF9yZWYyLFxuICAgIGdyb3c6IF9yZWYsXG4gICAgaGFzU2hhZG93OiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdtJyksIFwiOztsYWJlbDpoYXNTaGFkb3c7XCIpLFxuICAgIGhhc0JvcmRlcjogLyojX19QVVJFX18qL2NzcyhcImJvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLnRoaW4sIFwiOztsYWJlbDpoYXNCb3JkZXI7XCIpLFxuICAgIHJhZGl1czoge1xuICAgICAgbm9uZTogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpub25lO1wiKSxcbiAgICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgXCI7O2xhYmVsOm07XCIpXG4gICAgfSxcbiAgICAvLyBTZXR1cCBpbnRlcmFjdGl2ZSBiZWhhdmlvclxuICAgIGlzQ2xpY2thYmxlOiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246Ym94LXNoYWRvdyBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCIsdHJhbnNmb3JtIFwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIjt9JjplbmFibGVke2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjt9Jjpob3ZlciwmOmZvY3Vze1wiLCBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTtjdXJzb3I6cG9pbnRlcjt9O2xhYmVsOmlzQ2xpY2thYmxlO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aVNoYWRvdywgZXVpU2hhZG93RmxhdCwgZXVpU2hhZG93TWVkaXVtIH0gZnJvbSAnLi4vLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciB0cmFuc2xhdGVEaXN0YW5jZSA9ICdzJztcbi8qKlxuICogMS4gQ2FuIGV4cGFuZCBmdXJ0aGVyLCBidXQgaXQgbG9va3Mgd2VpcmQgaWYgaXQncyBzbWFsbGVyIHRoYW4gdGhlIG9yaWdpbmF0aW5nIGJ1dHRvbi5cbiAqIDIuIEFuaW1hdGlvbiBoYXBwZW5zIG9uIHRoZSBwYW5lbC4gQnV0IGRvbid0IGFuaW1hdGUgcG9zaXRpb24gd2hlbiB1c2luZyB0aGUgYXR0YWNoZWQgbW9kZSBsaWtlIGZvciBpbnB1dHNcbiAqIDMuIE1ha2Ugc3VyZSB0aGUgcGFuZWwgc3RheXMgd2l0aGluIHRoZSB3aW5kb3cuXG4gKi9cblxuZXhwb3J0IHZhciBldWlQb3BvdmVyUGFuZWxTdHlsZXMgPSBmdW5jdGlvbiBldWlQb3BvdmVyUGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpUG9wb3Zlcl9fcGFuZWw6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygnbWluLXdpZHRoJywgXCJcIi5jb25jYXQoZXVpVGhlbWUuYmFzZSAqIDcsIFwicHhcIikpLCBcIjtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgXCJjYWxjKDEwMHZ3IC0gXCIuY29uY2F0KGV1aVRoZW1lLnNpemUueGwsIFwiKVwiKSksIFwiO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApIHRyYW5zbGF0ZVgoMCkgdHJhbnNsYXRlWigwKTtcIiwgZXVpU2hhZG93TWVkaXVtKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgcHJvcGVydHk6ICdmaWx0ZXInXG4gICAgfSksIFwiICY6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6MDt9O2xhYmVsOmV1aVBvcG92ZXJfX3BhbmVsO1wiKSxcbiAgICAvLyBJcyB2aXNpYmxlIC8gb3BlblxuICAgIGlzT3BlbjogLyojX19QVVJFX18qL2NzcyhcIm9wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphdXRvO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ib3VuY2UsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24uc2xvdywgXCIsdHJhbnNmb3JtIFwiLCBldWlUaGVtZS5hbmltYXRpb24uYm91bmNlLCBcIiBjYWxjKFwiLCBldWlUaGVtZS5hbmltYXRpb24uc2xvdywgXCIgKyAxMDBtcyk7fTtsYWJlbDppc09wZW47XCIpLFxuICAgIC8vIFBvc2l0aW9uc1xuICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVZKFwiLCBldWlUaGVtZS5zaXplW3RyYW5zbGF0ZURpc3RhbmNlXSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOnRvcDtcIiksXG4gICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVkoLVwiLCBldWlUaGVtZS5zaXplW3RyYW5zbGF0ZURpc3RhbmNlXSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVYKFwiLCBldWlUaGVtZS5zaXplW3RyYW5zbGF0ZURpc3RhbmNlXSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVgoLVwiLCBldWlUaGVtZS5zaXplW3RyYW5zbGF0ZURpc3RhbmNlXSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOnJpZ2h0O1wiKSxcbiAgICAvLyBBdHRhY2hlZCB2ZXJzaW9uIG92ZXJyaWRlc1xuICAgIGF0dGFjaGVkOiB7XG4gICAgICBpc09wZW46IC8qI19fUFVSRV9fKi9jc3MoXCJmaWx0ZXI6bm9uZTtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpvcGFjaXR5IFwiLCBldWlUaGVtZS5hbmltYXRpb24uYm91bmNlLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnNsb3csIFwiO307bGFiZWw6aXNPcGVuO1wiKSxcbiAgICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3dGbGF0KGV1aVRoZW1lQ29udGV4dCksIFwiOztsYWJlbDp0b3A7XCIpLFxuICAgICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdtJyksIFwiOztsYWJlbDpib3R0b207XCIpLFxuICAgICAgLy8gU2F0aXNmaWVzIFRTXG4gICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmxlZnQ7XCIpLFxuICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6cmlnaHQ7XCIpXG4gICAgfVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInNpemVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInRleHRUcmFuc2Zvcm1cIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudCc7XG5pbXBvcnQgeyBldWlUaXRsZVN0eWxlcyB9IGZyb20gJy4vdGl0bGUuc3R5bGVzJztcbmV4cG9ydCB2YXIgVElUTEVfU0laRVMgPSBbJ3h4eHMnLCAneHhzJywgJ3hzJywgJ3MnLCAnbScsICdsJ107XG5leHBvcnQgdmFyIFRFWFRfVFJBTlNGT1JNID0gWyd1cHBlcmNhc2UnXTtcbmV4cG9ydCB2YXIgRXVpVGl0bGUgPSBmdW5jdGlvbiBFdWlUaXRsZShfcmVmKSB7XG4gIHZhciBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHRleHRUcmFuc2Zvcm0gPSBfcmVmLnRleHRUcmFuc2Zvcm0sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVRpdGxlU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGl0bGUsIHRleHRUcmFuc2Zvcm0gPyBzdHlsZXNbdGV4dFRyYW5zZm9ybV0gOiB1bmRlZmluZWQsIHN0eWxlc1tzaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGl0bGUnLCBjbGFzc05hbWUsIGNoaWxkcmVuLnByb3BzLmNsYXNzTmFtZSk7XG5cbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpO1xuXG4gIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBwcm9wcyk7XG59O1xuRXVpVGl0bGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUmVhY3RFbGVtZW50IHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIHRleHRUcmFuc2Zvcm06IFByb3BUeXBlcy5hbnksXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJpc0Rpc2FibGVkXCIsIFwidGl0bGVcIiwgXCJ0aXRsZUVsZW1lbnRcIiwgXCJ0aXRsZVNpemVcIiwgXCJpY29uXCIsIFwiaW1hZ2VcIiwgXCJjaGlsZHJlblwiLCBcImZvb3RlclwiLCBcIm9uQ2xpY2tcIiwgXCJocmVmXCIsIFwicmVsXCIsIFwidGFyZ2V0XCIsIFwidGV4dEFsaWduXCIsIFwiYmV0YUJhZGdlUHJvcHNcIiwgXCJsYXlvdXRcIiwgXCJzZWxlY3RhYmxlXCIsIFwiZGlzcGxheVwiLCBcInBhZGRpbmdTaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHsgRXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZSc7XG5pbXBvcnQgeyBFdWlCZXRhQmFkZ2UgfSBmcm9tICcuLi9iYWRnZS9iZXRhX2JhZGdlJztcbmltcG9ydCB7IEV1aUNhcmRTZWxlY3QsIGV1aUNhcmRTZWxlY3RhYmxlQ29sb3IgfSBmcm9tICcuL2NhcmRfc2VsZWN0JztcbmltcG9ydCB7IHVzZUdlbmVyYXRlZEh0bWxJZCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsgRXVpUGFuZWwgfSBmcm9tICcuLi9wYW5lbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHRleHRBbGlnblRvQ2xhc3NOYW1lTWFwID0ge1xuICBsZWZ0OiAnZXVpQ2FyZC0tbGVmdEFsaWduZWQnLFxuICBjZW50ZXI6ICdldWlDYXJkLS1jZW50ZXJBbGlnbmVkJyxcbiAgcmlnaHQ6ICdldWlDYXJkLS1yaWdodEFsaWduZWQnXG59O1xuZXhwb3J0IHZhciBBTElHTk1FTlRTID0ga2V5c09mKHRleHRBbGlnblRvQ2xhc3NOYW1lTWFwKTtcbnZhciBsYXlvdXRUb0NsYXNzTmFtZU1hcCA9IHtcbiAgdmVydGljYWw6ICcnLFxuICBob3Jpem9udGFsOiAnZXVpQ2FyZC0taG9yaXpvbnRhbCdcbn07XG5leHBvcnQgdmFyIExBWU9VVF9BTElHTk1FTlRTID0ga2V5c09mKGxheW91dFRvQ2xhc3NOYW1lTWFwKTtcbi8qKlxuICogQ2VydGFpbiBwcm9wcyBhcmUgb25seSBhbGxvd2VkIHdoZW4gdGhlIGxheW91dCBpcyB2ZXJ0aWNhbFxuICovXG5cbmV4cG9ydCB2YXIgRXVpQ2FyZCA9IGZ1bmN0aW9uIEV1aUNhcmQoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBkZXNjcmlwdGlvbiA9IF9yZWYuZGVzY3JpcHRpb24sXG4gICAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIF9yZWYkdGl0bGVFbGVtZW50ID0gX3JlZi50aXRsZUVsZW1lbnQsXG4gICAgICB0aXRsZUVsZW1lbnQgPSBfcmVmJHRpdGxlRWxlbWVudCA9PT0gdm9pZCAwID8gJ3NwYW4nIDogX3JlZiR0aXRsZUVsZW1lbnQsXG4gICAgICBfcmVmJHRpdGxlU2l6ZSA9IF9yZWYudGl0bGVTaXplLFxuICAgICAgdGl0bGVTaXplID0gX3JlZiR0aXRsZVNpemUgPT09IHZvaWQgMCA/ICdzJyA6IF9yZWYkdGl0bGVTaXplLFxuICAgICAgaWNvbiA9IF9yZWYuaWNvbixcbiAgICAgIGltYWdlID0gX3JlZi5pbWFnZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGZvb3RlciA9IF9yZWYuZm9vdGVyLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgX3JlZiR0ZXh0QWxpZ24gPSBfcmVmLnRleHRBbGlnbixcbiAgICAgIHRleHRBbGlnbiA9IF9yZWYkdGV4dEFsaWduID09PSB2b2lkIDAgPyAnY2VudGVyJyA6IF9yZWYkdGV4dEFsaWduLFxuICAgICAgYmV0YUJhZGdlUHJvcHMgPSBfcmVmLmJldGFCYWRnZVByb3BzLFxuICAgICAgX3JlZiRsYXlvdXQgPSBfcmVmLmxheW91dCxcbiAgICAgIGxheW91dCA9IF9yZWYkbGF5b3V0ID09PSB2b2lkIDAgPyAndmVydGljYWwnIDogX3JlZiRsYXlvdXQsXG4gICAgICBzZWxlY3RhYmxlID0gX3JlZi5zZWxlY3RhYmxlLFxuICAgICAgZGlzcGxheSA9IF9yZWYuZGlzcGxheSxcbiAgICAgIHBhZGRpbmdTaXplID0gX3JlZi5wYWRkaW5nU2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgaXNDbGlja2FibGUgPSAhaXNEaXNhYmxlZCAmJiAob25DbGljayB8fCBocmVmIHx8IHNlbGVjdGFibGUgJiYgIXNlbGVjdGFibGUuaXNEaXNhYmxlZCk7XG4gIC8qKlxuICAgKiBGb3IgYTExeSwgd2Ugc2ltdWxhdGUgdGhlIHNhbWUgY2xpY2sgdGhhdCdzIHByb3ZpZGVkIG9uIHRoZSB0aXRsZSB3aGVuIGNsaWNraW5nIHRoZSB3aG9sZSBjYXJkXG4gICAqIHdpdGhvdXQgaGF2aW5nIHRvIG1ha2UgdGhlIHdob2xlIGNhcmQgYSBidXR0b24gb3IgYW5jaG9yIHRhZy5cbiAgICogKkNhcmQgQWNjZXNzaWJpbGl0eTogVGhlIHJlZHVuZGFudCBjbGljayBldmVudCBodHRwczovL2luY2x1c2l2ZS1jb21wb25lbnRzLmRlc2lnbi9jYXJkcy8qXG4gICAqL1xuXG4gIHZhciBsaW5rID0gbnVsbDtcblxuICB2YXIgb3V0ZXJPbkNsaWNrID0gZnVuY3Rpb24gb3V0ZXJPbkNsaWNrKGUpIHtcbiAgICBpZiAobGluayAmJiBsaW5rICE9PSBlLnRhcmdldCkge1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH1cbiAgfTtcblxuICBpZiAobGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICBpZiAoaW1hZ2UgfHwgZm9vdGVyIHx8IHRleHRBbGlnbiAhPT0gJ2NlbnRlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXVpQ2FyZDogYGxheW91dD1cImhvcml6b250YWxcImAgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgaW1hZ2VgLCBgZm9vdGVyYCwgb3IgYHRleHRBbGlnbmAuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHNlbGVjdGFibGVDb2xvckNsYXNzID0gc2VsZWN0YWJsZSA/IFwiZXVpQ2FyZC0taXNTZWxlY3RhYmxlLS1cIi5jb25jYXQoZXVpQ2FyZFNlbGVjdGFibGVDb2xvcihzZWxlY3RhYmxlLmNvbG9yLCBzZWxlY3RhYmxlLmlzU2VsZWN0ZWQpKSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDYXJkJywgdGV4dEFsaWduVG9DbGFzc05hbWVNYXBbdGV4dEFsaWduXSwgbGF5b3V0VG9DbGFzc05hbWVNYXBbbGF5b3V0XSwge1xuICAgICdldWlDYXJkLS1pc0NsaWNrYWJsZSc6IGlzQ2xpY2thYmxlLFxuICAgICdldWlDYXJkLS1oYXNCZXRhQmFkZ2UnOiBiZXRhQmFkZ2VQcm9wcyA9PT0gbnVsbCB8fCBiZXRhQmFkZ2VQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmV0YUJhZGdlUHJvcHMubGFiZWwsXG4gICAgJ2V1aUNhcmQtLWhhc0ljb24nOiBpY29uLFxuICAgICdldWlDYXJkLS1pc1NlbGVjdGFibGUnOiBzZWxlY3RhYmxlLFxuICAgICdldWlDYXJkLWlzU2VsZWN0ZWQnOiBzZWxlY3RhYmxlID09PSBudWxsIHx8IHNlbGVjdGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGFibGUuaXNTZWxlY3RlZCxcbiAgICAnZXVpQ2FyZC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZFxuICB9LCBzZWxlY3RhYmxlQ29sb3JDbGFzcywgY2xhc3NOYW1lKTtcbiAgdmFyIGFyaWFJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCgpO1xuICB2YXIgYXJpYURlc2MgPSBkZXNjcmlwdGlvbiA/IFwiXCIuY29uY2F0KGFyaWFJZCwgXCJEZXNjcmlwdGlvblwiKSA6ICcnO1xuICAvKipcbiAgICogVG9wIGFyZWEgY29udGFpbmluZyBpbWFnZSwgaWNvbiBvciBib3RoXG4gICAqL1xuXG4gIHZhciBpbWFnZU5vZGU7XG5cbiAgaWYgKGltYWdlICYmIGxheW91dCA9PT0gJ3ZlcnRpY2FsJykge1xuICAgIGlmICggLyojX19QVVJFX18qL2lzVmFsaWRFbGVtZW50KGltYWdlKSB8fCB0eXBlb2YgaW1hZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbWFnZU5vZGUgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2ltYWdlXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChpbWFnZSkgPyBpbWFnZSA6IF9fX0Vtb3Rpb25KU1goXCJpbWdcIiwge1xuICAgICAgICBzcmM6IGltYWdlLFxuICAgICAgICBhbHQ6IFwiXCJcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW1hZ2VOb2RlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgaWNvbk5vZGU7XG5cbiAgaWYgKGljb24pIHtcbiAgICBpY29uTm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGljb24ucHJvcHMuY2xhc3NOYW1lLCAnZXVpQ2FyZF9faWNvbicpXG4gICAgfSk7XG4gIH1cblxuICB2YXIgb3B0aW9uYWxDYXJkVG9wO1xuXG4gIGlmIChpbWFnZU5vZGUgfHwgaWNvbk5vZGUpIHtcbiAgICBvcHRpb25hbENhcmRUb3AgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX190b3BcIlxuICAgIH0sIGltYWdlTm9kZSwgaWNvbk5vZGUpO1xuICB9XG4gIC8qKlxuICAgKiBPcHRpb25hbCBFdWlCZXRhQmFkZ2VcbiAgICovXG5cblxuICB2YXIgb3B0aW9uYWxCZXRhQmFkZ2U7XG4gIHZhciBvcHRpb25hbEJldGFCYWRnZUlEID0gJyc7XG5cbiAgaWYgKGJldGFCYWRnZVByb3BzICE9PSBudWxsICYmIGJldGFCYWRnZVByb3BzICE9PSB2b2lkIDAgJiYgYmV0YUJhZGdlUHJvcHMubGFiZWwpIHtcbiAgICBvcHRpb25hbEJldGFCYWRnZUlEID0gXCJcIi5jb25jYXQoYXJpYUlkLCBcIkJldGFCYWRnZVwiKTtcbiAgICBvcHRpb25hbEJldGFCYWRnZSA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19iZXRhQmFkZ2VXcmFwcGVyXCJcbiAgICB9LCBfX19FbW90aW9uSlNYKEV1aUJldGFCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IG9wdGlvbmFsQmV0YUJhZGdlSURcbiAgICB9LCBiZXRhQmFkZ2VQcm9wcywge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlDYXJkX19iZXRhQmFkZ2UnLCBiZXRhQmFkZ2VQcm9wcyA9PT0gbnVsbCB8fCBiZXRhQmFkZ2VQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmV0YUJhZGdlUHJvcHMuY2xhc3NOYW1lKVxuICAgIH0pKSk7IC8vIEluY3JlYXNlIHBhZGRpbmcgc2l6ZSB3aGVuIHRoZXJlIGlzIGEgYmV0YSBiYWRnZSB1bmxlc3MgaXQncyBhbHJlYWR5IGRldGVybWluZWRcblxuICAgIHBhZGRpbmdTaXplID0gcGFkZGluZ1NpemUgfHwgJ2wnO1xuICB9XG4gIC8qKlxuICAgKiBPcHRpb25hbCBzZWxlY3RhYmxlIGJ1dHRvblxuICAgKi9cblxuXG4gIGlmIChzZWxlY3RhYmxlICYmIGlzRGlzYWJsZWQgJiYgc2VsZWN0YWJsZS5pc0Rpc2FibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICBzZWxlY3RhYmxlLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgdmFyIG9wdGlvbmFsU2VsZWN0QnV0dG9uO1xuXG4gIGlmIChzZWxlY3RhYmxlKSB7XG4gICAgb3B0aW9uYWxTZWxlY3RCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUNhcmRTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBcIlwiLmNvbmNhdChhcmlhSWQsIFwiVGl0bGUgXCIpLmNvbmNhdChhcmlhRGVzYylcbiAgICB9LCBzZWxlY3RhYmxlLCB7XG4gICAgICBidXR0b25SZWY6IGZ1bmN0aW9uIGJ1dHRvblJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuICAvKipcbiAgICogV3JhcHMgdGhlIHRpdGxlIHdpdGggdGhlIGxpbmsgKDxhPikgb3IgYnV0dG9uLlxuICAgKiBUaGlzIG1ha2VzIHRoZSB0aXRsZSBlbGVtZW50IGExMXkgZnJpZW5kbHkgYW5kIGdldHMgZGVzY3JpYmVkIGJ5IGl0cyBjb250ZW50IGlmIGl0cyBpbnRlcmFjdGFibGUuXG4gICAqL1xuXG5cbiAgdmFyIHRoZVRpdGxlO1xuXG4gIGlmICghaXNEaXNhYmxlZCAmJiBocmVmKSB7XG4gICAgdGhlVGl0bGUgPSBfX19FbW90aW9uSlNYKFwiYVwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fdGl0bGVBbmNob3JcIixcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2MsXG4gICAgICByZWw6IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICByZWw6IHJlbFxuICAgICAgfSksXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0sIHRpdGxlKTtcbiAgfSBlbHNlIGlmIChpc0Rpc2FibGVkIHx8IG9uQ2xpY2spIHtcbiAgICB0aGVUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RpdGxlQnV0dG9uXCIsXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogXCJcIi5jb25jYXQob3B0aW9uYWxCZXRhQmFkZ2VJRCwgXCIgXCIpLmNvbmNhdChhcmlhRGVzYyksXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0sIHRpdGxlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGVUaXRsZSA9IHRpdGxlO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0IHRpdGxlRWxlbWVudCB0byBhIGNhcGl0YWwgVGl0bGVFbGVtZW50XG4gICAqL1xuXG5cbiAgdmFyIFRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbWVudDtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUGFuZWwsIF9leHRlbmRzKHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBvbkNsaWNrOiBpc0NsaWNrYWJsZSA/IG91dGVyT25DbGljayA6IHVuZGVmaW5lZCxcbiAgICBjb2xvcjogaXNEaXNhYmxlZCA/ICdzdWJkdWVkJyA6IGRpc3BsYXksXG4gICAgaGFzU2hhZG93OiBpc0Rpc2FibGVkIHx8IGRpc3BsYXkgPyBmYWxzZSA6IHRydWUsXG4gICAgaGFzQm9yZGVyOiBkaXNwbGF5ID8gZmFsc2UgOiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplXG4gIH0sIHJlc3QpLCBvcHRpb25hbENhcmRUb3AsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19jb250ZW50XCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlUaXRsZSwge1xuICAgIGlkOiBcIlwiLmNvbmNhdChhcmlhSWQsIFwiVGl0bGVcIiksXG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RpdGxlXCIsXG4gICAgc2l6ZTogdGl0bGVTaXplXG4gIH0sIF9fX0Vtb3Rpb25KU1goVGl0bGVFbGVtZW50LCBudWxsLCB0aGVUaXRsZSkpLCBkZXNjcmlwdGlvbiAmJiBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICBpZDogYXJpYURlc2MsXG4gICAgc2l6ZTogXCJzXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2Rlc2NyaXB0aW9uXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgZGVzY3JpcHRpb24pKSwgY2hpbGRyZW4gJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2NoaWxkcmVuXCJcbiAgfSwgY2hpbGRyZW4pKSwgb3B0aW9uYWxCZXRhQmFkZ2UsIGxheW91dCA9PT0gJ3ZlcnRpY2FsJyAmJiBmb290ZXIgJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2Zvb3RlclwiXG4gIH0sIGZvb3RlciksIG9wdGlvbmFsU2VsZWN0QnV0dG9uKTtcbn07XG5FdWlDYXJkLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICAgKiBDaGFuZ2UgdG8gXCJob3Jpem9udGFsXCIgaWYgeW91IG5lZWQgdGhlIGljb24gdG8gYmUgbGVmdCBvZiB0aGUgY29udGVudC5cbiAgICAgICAqIEhvcml6b250YWwgbGF5b3V0cyBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBpbWFnZWAsIGBmb290ZXJgLCBvciBgdGV4dEFsaWduYC5cbiAgICAgICAqL1xuICBsYXlvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJ2ZXJ0aWNhbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJob3Jpem9udGFsXCJdKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDaGFuZ2VzIGFsaWdubWVudCBvZiB0aGUgdGl0bGUgYW5kIGRlc2NyaXB0aW9uXG4gICAgICAgKi9cbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcImNlbnRlclwiLCBcInJpZ2h0XCJdKSxcblxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IGNvbWJpbmF0aW9uIG9mIGVsZW1lbnRzXG4gICAgICAgKi9cbiAgZm9vdGVyOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYSB1cmwgaW4gc3RyaW5nIGZvcm0gb3IgUmVhY3RFbGVtZW50IGZvciBhIGN1c3RvbSBpbWFnZSBjb21wb25lbnRcbiAgICAgICAqL1xuICBpbWFnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDYXJkcyBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBhdCBsZWFzdCBhIHRpdGxlIGFuZCBhIGRlc2NyaXB0aW9uIGFuZC9vciBjaGlsZHJlblxuICAgICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHRoZSB0aXRsZSdzIGhlYWRpbmcgZWxlbWVudFxuICAgICAgICovXG4gIHRpdGxlRWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJzcGFuXCJdKSxcblxuICAvKipcbiAgICAgICAqIERldGVybWluZXMgdGhlIHRpdGxlJ3Mgc2l6ZSwgbWF0Y2hpbmcgdGhhdCBvZiBFdWlUaXRsZS5cbiAgICAgICAqIFRob3VnaCwgY2FyZCB0aXRsZXMgY2FuJ3QgYmUgdG9vIGxhcmdlIG9yIHNtYWxsIHJlbGF0aXZlIHRvIHRoZSBkZXNjcmlwdGlvbiB0ZXh0LlxuICAgICAgICovXG4gIHRpdGxlU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJ4c1wiXSksXG4gIC8vIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkIGlmIGNoaWxkcmVuIGlzIG9taXR0ZWRcbiAgLy8gZGVzY3JpcHRpb24gYmVjb21lcyBvcHRpb25hbCB3aGVuIGNoaWxkcmVuIGlzIHByZXNlbnRcblxuICAvKipcbiAgICAgICAqIFBsYWNlZCB3aXRoaW4gYSBzbWFsbCBFdWlUZXh0IGA8cD5gIHRhZ1xuICAgICAgICovXG4gIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQWNjZXB0cyBhbiBgPEV1aUljb24+YCBub2RlIG9yIGBudWxsYFxuICAgICAgICovXG4gIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSksXG5cbiAgLyoqXG4gICAgICAgKiBDdXN0b20gY2hpbGRyZW5cbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBVc2Ugb25seSBpZiB5b3Ugd2FudCB0byBmb3JlZ28gYSBidXR0b24gaW4gdGhlIGZvb3RlciBhbmQgbWFrZSB0aGUgd2hvbGUgY2FyZCBjbGlja2FibGVcbiAgICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIEFkZHMgYSBiYWRnZSB0byB0b3Agb2YgdGhlIGNhcmQgdG8gbGFiZWwgaXQgYXMgXCJCZXRhXCIgb3Igb3RoZXIgbm9uLUdBIHN0YXRlLlxuICAgICAgICogQWNjZXB0cyBhbGwgdGhlIHByb3BzIG9mIFtFdWlCZXRhQmFkZ2VdKCMvZGlzcGxheS9iYWRnZSNiZXRhLWJhZGdlLXR5cGUpLCB3aGVyZSBgbGFiZWxgIGlzIHJlcXVpcmVkLlxuICAgICAgICovXG4gIGJldGFCYWRnZVByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogTWF0Y2hlcyB0byB0aGUgY29sb3IgcHJvcGVydHkgb2YgRXVpUGFuZWwuIElmIGRlZmluZWQsIHJlbW92ZXMgYW55IGJvcmRlciAmIHNoYWRvdy5cbiAgICAgICAqIExlYXZlIGFzIGB1bmRlZmluZWRgIHRvIGRpc3BsYXkgYXMgYSBkZWZhdWx0IHBhbmVsLlxuICAgICAgICogU2VsZWN0YWJsZSBjYXJkcyB3aWxsIGFsd2F5cyBkaXNwbGF5IGFzIGEgZGVmYXVsdCBwYW5lbC5cbiAgICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogUGFkZGluZyBhcHBsaWVkIGFyb3VuZCB0aGUgY29udGVudCBvZiB0aGUgY2FyZFxuICAgICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQWRkcyBhIGJ1dHRvbiB0byB0aGUgYm90dG9tIG9mIHRoZSBjYXJkIHRvIGFsbG93IGZvciBpbi1wbGFjZSBzZWxlY3Rpb25cbiAgICAgICAqL1xuICBzZWxlY3RhYmxlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImRhbmdlclwiLCBcInRleHRcIiwgXCJnaG9zdFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCJdKSxcbiAgICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICAgKi9cbiAgICBmbHVzaDogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICAgKi9cbiAgICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAqL1xuICAgIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIElzIGluIHRoZSBzZWxlY3RlZCBzdGF0ZVxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAgICovXG4gICAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwic3VibWl0XCJdKSxcbiAgICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgICAvKipcbiAgICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgICAqL1xuICAgIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAgIC8qKlxuICAgICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICAgKi9cbiAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICAgKi9cbiAgICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgICAqL1xuICAgIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLFxuICAgIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG5cbiAgLyoqXG4gICAgICAgKiBVc2UgYSBib3JkZXIgc3R5bGUgb2YgY2FyZCBpbnN0ZWFkIG9mIHNoYWRvd1xuICAgICAgICovXG4gIGhhc0JvcmRlcjogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpc1NlbGVjdGVkXCIsIFwiaXNEaXNhYmxlZFwiLCBcImNvbG9yXCIsIFwiY2hpbGRyZW5cIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uL2J1dHRvbi9idXR0b25fZW1wdHknO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ2FyZFNlbGVjdCA9IGZ1bmN0aW9uIEV1aUNhcmRTZWxlY3QoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBpc1NlbGVjdGVkID0gX3JlZiRpc1NlbGVjdGVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNTZWxlY3RlZCxcbiAgICAgIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNoaWxkID0gZXVpQ2FyZFNlbGVjdGFibGVUZXh0KGlzU2VsZWN0ZWQsIGlzRGlzYWJsZWQsIGNoaWxkcmVuKTtcbiAgdmFyIHNlbGVjdENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDYXJkU2VsZWN0JywgXCJldWlDYXJkU2VsZWN0LS1cIi5jb25jYXQoZXVpQ2FyZFNlbGVjdGFibGVDb2xvcihjb2xvciwgaXNTZWxlY3RlZCkpLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogc2VsZWN0Q2xhc3NlcyxcbiAgICBjb2xvcjogY29sb3IgfHwgJ3RleHQnLFxuICAgIHNpemU6IFwieHNcIixcbiAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgIGljb25UeXBlOiBpc1NlbGVjdGVkID8gJ2NoZWNrJyA6IHVuZGVmaW5lZCxcbiAgICByb2xlOiBcInN3aXRjaFwiLFxuICAgIFwiYXJpYS1jaGVja2VkXCI6IGlzU2VsZWN0ZWRcbiAgfSwgcmVzdCksIGNoaWxkKTtcbn07XG5FdWlDYXJkU2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJ4c1wiLCBcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICBmbHVzaDogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIl0pLFxuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJcyBpbiB0aGUgc2VsZWN0ZWQgc3RhdGVcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIiwgXCJzdWJtaXRcIl0pLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQgKG9ubHkgaWYgdGhlIGNoaWxkcmVuIGlzIGEgYHN0cmluZ2ApXG4gICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmZ1bmN0aW9uIGV1aUNhcmRTZWxlY3RhYmxlVGV4dChpc1NlbGVjdGVkLCBpc0Rpc2FibGVkLCBjaGlsZHJlbikge1xuICBpZiAoY2hpbGRyZW4pIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgdGV4dDtcblxuICBpZiAoaXNTZWxlY3RlZCkge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNhcmRTZWxlY3Quc2VsZWN0ZWRcIixcbiAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0ZWRcIlxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnVuYXZhaWxhYmxlXCIsXG4gICAgICBkZWZhdWx0OiBcIlVuYXZhaWxhYmxlXCJcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnNlbGVjdFwiLFxuICAgICAgZGVmYXVsdDogXCJTZWxlY3RcIlxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldWlDYXJkU2VsZWN0YWJsZUNvbG9yKGNvbG9yLCBpc1NlbGVjdGVkKSB7XG4gIHZhciBjYWxjdWxhdGVkQ29sb3I7XG5cbiAgaWYgKGNvbG9yKSB7XG4gICAgY2FsY3VsYXRlZENvbG9yID0gY29sb3I7XG4gIH0gZWxzZSBpZiAoaXNTZWxlY3RlZCkge1xuICAgIGNhbGN1bGF0ZWRDb2xvciA9ICdzdWNjZXNzJztcbiAgfSBlbHNlIHtcbiAgICBjYWxjdWxhdGVkQ29sb3IgPSAndGV4dCc7XG4gIH1cblxuICByZXR1cm4gY2FsY3VsYXRlZENvbG9yO1xufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpZFwiLCBcImNoZWNrZWRcIiwgXCJsYWJlbFwiLCBcIm9uQ2hhbmdlXCIsIFwidHlwZVwiLCBcImRpc2FibGVkXCIsIFwiY29tcHJlc3NlZFwiLCBcImluZGV0ZXJtaW5hdGVcIiwgXCJpbnB1dFJlZlwiLCBcImxhYmVsUHJvcHNcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgdHlwZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBpbkxpc3Q6ICdldWlDaGVja2JveC0taW5MaXN0J1xufTtcbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQ2hlY2tib3ggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNoZWNrYm94LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUNoZWNrYm94KTtcblxuICBmdW5jdGlvbiBFdWlDaGVja2JveCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ2hlY2tib3gpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnB1dFJlZlwiLCB1bmRlZmluZWQpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldElucHV0UmVmXCIsIGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgX3RoaXMuaW5wdXRSZWYgPSBpbnB1dDtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLmlucHV0UmVmKSB7XG4gICAgICAgIF90aGlzLnByb3BzLmlucHV0UmVmKGlucHV0KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuaW52YWxpZGF0ZUluZGV0ZXJtaW5hdGUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDaGVja2JveCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLmludmFsaWRhdGVJbmRldGVybWluYXRlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB0aGlzLmludmFsaWRhdGVJbmRldGVybWluYXRlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzLmlkLFxuICAgICAgICAgIGNoZWNrZWQgPSBfdGhpcyRwcm9wcy5jaGVja2VkLFxuICAgICAgICAgIGxhYmVsID0gX3RoaXMkcHJvcHMubGFiZWwsXG4gICAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wcy5vbkNoYW5nZSxcbiAgICAgICAgICB0eXBlID0gX3RoaXMkcHJvcHMudHlwZSxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wcy5jb21wcmVzc2VkLFxuICAgICAgICAgIGluZGV0ZXJtaW5hdGUgPSBfdGhpcyRwcm9wcy5pbmRldGVybWluYXRlLFxuICAgICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHMuaW5wdXRSZWYsXG4gICAgICAgICAgbGFiZWxQcm9wcyA9IF90aGlzJHByb3BzLmxhYmVsUHJvcHMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDaGVja2JveCcsIHR5cGUgJiYgdHlwZVRvQ2xhc3NOYW1lTWFwW3R5cGVdLCB7XG4gICAgICAgICdldWlDaGVja2JveC0tbm9MYWJlbCc6ICFsYWJlbCxcbiAgICAgICAgJ2V1aUNoZWNrYm94LS1jb21wcmVzc2VkJzogY29tcHJlc3NlZFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBsYWJlbENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDaGVja2JveF9fbGFiZWwnLCBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuY2xhc3NOYW1lKTtcbiAgICAgIHZhciBvcHRpb25hbExhYmVsO1xuXG4gICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgb3B0aW9uYWxMYWJlbCA9IF9fX0Vtb3Rpb25KU1goXCJsYWJlbFwiLCBfZXh0ZW5kcyh7fSwgbGFiZWxQcm9wcywge1xuICAgICAgICAgIGNsYXNzTmFtZTogbGFiZWxDbGFzc2VzLFxuICAgICAgICAgIGh0bWxGb3I6IGlkXG4gICAgICAgIH0pLCBsYWJlbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICB9LCBfX19FbW90aW9uSlNYKFwiaW5wdXRcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ2hlY2tib3hfX2lucHV0XCIsXG4gICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgcmVmOiB0aGlzLnNldElucHV0UmVmXG4gICAgICB9LCByZXN0KSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ2hlY2tib3hfX3NxdWFyZVwiXG4gICAgICB9KSwgb3B0aW9uYWxMYWJlbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImludmFsaWRhdGVJbmRldGVybWluYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGludmFsaWRhdGVJbmRldGVybWluYXRlKCkge1xuICAgICAgaWYgKHRoaXMuaW5wdXRSZWYpIHtcbiAgICAgICAgdGhpcy5pbnB1dFJlZi5pbmRldGVybWluYXRlID0gdGhpcy5wcm9wcy5pbmRldGVybWluYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDaGVja2JveDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUNoZWNrYm94LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGNoZWNrZWQ6IGZhbHNlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGluZGV0ZXJtaW5hdGU6IGZhbHNlLFxuICBjb21wcmVzc2VkOiBmYWxzZVxufSk7XG5cbkV1aUNoZWNrYm94LnByb3BUeXBlcyA9IHtcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIC8vIG92ZXJyaWRpbmcgdG8gbWFrZSBpdCByZXF1aXJlZFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImluTGlzdFwiXSksXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiB3aGVuIGB0cnVlYCBjcmVhdGVzIGEgc2hvcnRlciBoZWlnaHQgY2hlY2tib3ggcm93XG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpbmRldGVybWluYXRlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8bGFiZWwvPlxuICAgICAqL1xuICBsYWJlbFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZ3V0dGVyU2l6ZVwiLCBcImFsaWduSXRlbXNcIiwgXCJyZXNwb25zaXZlXCIsIFwianVzdGlmeUNvbnRlbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJ3cmFwXCIsIFwiY29tcG9uZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGd1dHRlclNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbm9uZTogbnVsbCxcbiAgeHM6ICdldWlGbGV4R3JvdXAtLWd1dHRlckV4dHJhU21hbGwnLFxuICBzOiAnZXVpRmxleEdyb3VwLS1ndXR0ZXJTbWFsbCcsXG4gIG06ICdldWlGbGV4R3JvdXAtLWd1dHRlck1lZGl1bScsXG4gIGw6ICdldWlGbGV4R3JvdXAtLWd1dHRlckxhcmdlJyxcbiAgeGw6ICdldWlGbGV4R3JvdXAtLWd1dHRlckV4dHJhTGFyZ2UnXG59O1xuZXhwb3J0IHZhciBHVVRURVJfU0laRVMgPSBrZXlzT2YoZ3V0dGVyU2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbnZhciBhbGlnbkl0ZW1zVG9DbGFzc05hbWVNYXAgPSB7XG4gIHN0cmV0Y2g6IG51bGwsXG4gIGZsZXhTdGFydDogJ2V1aUZsZXhHcm91cC0tYWxpZ25JdGVtc0ZsZXhTdGFydCcsXG4gIGZsZXhFbmQ6ICdldWlGbGV4R3JvdXAtLWFsaWduSXRlbXNGbGV4RW5kJyxcbiAgY2VudGVyOiAnZXVpRmxleEdyb3VwLS1hbGlnbkl0ZW1zQ2VudGVyJyxcbiAgYmFzZWxpbmU6ICdldWlGbGV4R3JvdXAtLWFsaWduSXRlbXNCYXNlbGluZSdcbn07XG5leHBvcnQgdmFyIEFMSUdOX0lURU1TID0ga2V5c09mKGFsaWduSXRlbXNUb0NsYXNzTmFtZU1hcCk7XG52YXIganVzdGlmeUNvbnRlbnRUb0NsYXNzTmFtZU1hcCA9IHtcbiAgZmxleFN0YXJ0OiBudWxsLFxuICBmbGV4RW5kOiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudEZsZXhFbmQnLFxuICBjZW50ZXI6ICdldWlGbGV4R3JvdXAtLWp1c3RpZnlDb250ZW50Q2VudGVyJyxcbiAgc3BhY2VCZXR3ZWVuOiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudFNwYWNlQmV0d2VlbicsXG4gIHNwYWNlQXJvdW5kOiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudFNwYWNlQXJvdW5kJyxcbiAgc3BhY2VFdmVubHk6ICdldWlGbGV4R3JvdXAtLWp1c3RpZnlDb250ZW50U3BhY2VFdmVubHknXG59O1xuZXhwb3J0IHZhciBKVVNUSUZZX0NPTlRFTlRTID0ga2V5c09mKGp1c3RpZnlDb250ZW50VG9DbGFzc05hbWVNYXApO1xudmFyIGRpcmVjdGlvblRvQ2xhc3NOYW1lTWFwID0ge1xuICByb3c6ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvblJvdycsXG4gIHJvd1JldmVyc2U6ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvblJvd1JldmVyc2UnLFxuICBjb2x1bW46ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvbkNvbHVtbicsXG4gIGNvbHVtblJldmVyc2U6ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvbkNvbHVtblJldmVyc2UnXG59O1xuZXhwb3J0IHZhciBESVJFQ1RJT05TID0ga2V5c09mKGRpcmVjdGlvblRvQ2xhc3NOYW1lTWFwKTtcblxudmFyIGlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQoY29tcG9uZW50KSB7XG4gIHJldHVybiBbJ2RpdicsICdzcGFuJ10uaW5jbHVkZXMoY29tcG9uZW50KTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpRmxleEdyb3VwID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGd1dHRlclNpemUgPSBfcmVmLmd1dHRlclNpemUsXG4gICAgICBndXR0ZXJTaXplID0gX3JlZiRndXR0ZXJTaXplID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJGd1dHRlclNpemUsXG4gICAgICBfcmVmJGFsaWduSXRlbXMgPSBfcmVmLmFsaWduSXRlbXMsXG4gICAgICBhbGlnbkl0ZW1zID0gX3JlZiRhbGlnbkl0ZW1zID09PSB2b2lkIDAgPyAnc3RyZXRjaCcgOiBfcmVmJGFsaWduSXRlbXMsXG4gICAgICBfcmVmJHJlc3BvbnNpdmUgPSBfcmVmLnJlc3BvbnNpdmUsXG4gICAgICByZXNwb25zaXZlID0gX3JlZiRyZXNwb25zaXZlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRyZXNwb25zaXZlLFxuICAgICAgX3JlZiRqdXN0aWZ5Q29udGVudCA9IF9yZWYuanVzdGlmeUNvbnRlbnQsXG4gICAgICBqdXN0aWZ5Q29udGVudCA9IF9yZWYkanVzdGlmeUNvbnRlbnQgPT09IHZvaWQgMCA/ICdmbGV4U3RhcnQnIDogX3JlZiRqdXN0aWZ5Q29udGVudCxcbiAgICAgIF9yZWYkZGlyZWN0aW9uID0gX3JlZi5kaXJlY3Rpb24sXG4gICAgICBkaXJlY3Rpb24gPSBfcmVmJGRpcmVjdGlvbiA9PT0gdm9pZCAwID8gJ3JvdycgOiBfcmVmJGRpcmVjdGlvbixcbiAgICAgIF9yZWYkd3JhcCA9IF9yZWYud3JhcCxcbiAgICAgIHdyYXAgPSBfcmVmJHdyYXAgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiR3cmFwLFxuICAgICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYkY29tcG9uZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRmxleEdyb3VwJywgZ3V0dGVyU2l6ZVRvQ2xhc3NOYW1lTWFwW2d1dHRlclNpemVdLCBhbGlnbkl0ZW1zVG9DbGFzc05hbWVNYXBbYWxpZ25JdGVtc10sIGp1c3RpZnlDb250ZW50VG9DbGFzc05hbWVNYXBbanVzdGlmeUNvbnRlbnRdLCBkaXJlY3Rpb25Ub0NsYXNzTmFtZU1hcFtkaXJlY3Rpb25dLCB7XG4gICAgJ2V1aUZsZXhHcm91cC0tcmVzcG9uc2l2ZSc6IHJlc3BvbnNpdmUsXG4gICAgJ2V1aUZsZXhHcm91cC0td3JhcCc6IHdyYXBcbiAgfSwgY2xhc3NOYW1lKTtcblxuICBpZiAoIWlzVmFsaWRFbGVtZW50KGNvbXBvbmVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50LCBcIiBpcyBub3QgYSB2YWxpZCBlbGVtZW50IHR5cGUuIFVzZSBgZGl2YCBvciBgc3BhbmAuXCIpKTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnQgPT09ICdzcGFuJyA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgcmVmOiByZWZcbiAgfSwgcmVzdCksIGNoaWxkcmVuKSA6IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICByZWY6IHJlZlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufSk7XG5FdWlGbGV4R3JvdXAucHJvcFR5cGVzID0ge1xuICBhbGlnbkl0ZW1zOiBQcm9wVHlwZXMub25lT2YoW1wic3RyZXRjaFwiLCBcImZsZXhTdGFydFwiLCBcImZsZXhFbmRcIiwgXCJjZW50ZXJcIiwgXCJiYXNlbGluZVwiXSksXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiLCBcInNwYW5cIl0pLFxuICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZihbXCJyb3dcIiwgXCJyb3dSZXZlcnNlXCIsIFwiY29sdW1uXCIsIFwiY29sdW1uUmV2ZXJzZVwiXSksXG4gIGd1dHRlclNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJub25lXCIsIFwieHNcIiwgXCJzXCIsIFwibVwiLCBcImxcIiwgXCJ4bFwiXSksXG4gIGp1c3RpZnlDb250ZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZmxleFN0YXJ0XCIsIFwiZmxleEVuZFwiLCBcImNlbnRlclwiLCBcInNwYWNlQmV0d2VlblwiLCBcInNwYWNlQXJvdW5kXCIsIFwic3BhY2VFdmVubHlcIl0pLFxuICByZXNwb25zaXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgd3JhcDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTtcbkV1aUZsZXhHcm91cC5kaXNwbGF5TmFtZSA9ICdFdWlGbGV4R3JvdXAnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJncm93XCIsIFwiY29tcG9uZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgR1JPV19TSVpFUyA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF07XG5leHBvcnQgdmFyIEV1aUZsZXhJdGVtID0gZnVuY3Rpb24gRXVpRmxleEl0ZW0oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGdyb3cgPSBfcmVmLmdyb3csXG4gICAgICBncm93ID0gX3JlZiRncm93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRncm93LFxuICAgICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICAgIENvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYkY29tcG9uZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhbGlkYXRlR3Jvd1ZhbHVlKGdyb3cpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZsZXhJdGVtJywgX2RlZmluZVByb3BlcnR5KHtcbiAgICAnZXVpRmxleEl0ZW0tLWZsZXhHcm93WmVybyc6ICFncm93XG4gIH0sIFwiZXVpRmxleEl0ZW0tLWZsZXhHcm93XCIuY29uY2F0KGdyb3cpLCB0eXBlb2YgZ3JvdyA9PT0gJ251bWJlcicgPyBHUk9XX1NJWkVTLmluZGV4T2YoZ3JvdykgPj0gMCA6IHVuZGVmaW5lZCksIGNsYXNzTmFtZSk7XG4gIHJldHVybiAoLy8gQHRzLWlnbm9yZSBkaWZmaWN1bHQgdG8gdmVyaWZ5IGByZXN0YCBhcHBsaWVzIHRvIGBDb21wb25lbnRgXG4gICAgX19fRW1vdGlvbkpTWChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbilcbiAgKTtcbn07XG5FdWlGbGV4SXRlbS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgZ3JvdzogUHJvcFR5cGVzLm9uZU9mKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgdHJ1ZSwgZmFsc2UsIG51bGxdKSxcbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55XG59O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUdyb3dWYWx1ZSh2YWx1ZSkge1xuICB2YXIgdmFsaWRWYWx1ZXMgPSBbbnVsbCwgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZV0uY29uY2F0KEdST1dfU0laRVMpO1xuXG4gIGlmICh2YWxpZFZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9wIGBncm93YCBwYXNzZWQgdG8gYEV1aUZsZXhJdGVtYCBtdXN0IGJlIGEgYm9vbGVhbiBvciBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAsIHJlY2VpdmVkIGBcIi5jb25jYXQodmFsdWUsIFwiYFwiKSk7XG4gIH1cbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJpY29uXCIsIFwiY2xlYXJcIiwgXCJmdWxsV2lkdGhcIiwgXCJpc0xvYWRpbmdcIiwgXCJpc0Rpc2FibGVkXCIsIFwiY29tcHJlc3NlZFwiLCBcImNsYXNzTmFtZVwiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIiwgXCJyZWFkT25seVwiLCBcImlzSW52YWxpZFwiLCBcImlzRHJvcGRvd25cIiwgXCJpbnB1dElkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9pY29ucyc7XG5pbXBvcnQgeyBFdWlGb3JtTGFiZWwgfSBmcm9tICcuLi9mb3JtX2xhYmVsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgeyBJQ09OX1NJREVTIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2ljb25zJztcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZvcm1Db250cm9sTGF5b3V0LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZvcm1Db250cm9sTGF5b3V0KTtcblxuICBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRm9ybUNvbnRyb2xMYXlvdXQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUZvcm1Db250cm9sTGF5b3V0LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGljb24gPSBfdGhpcyRwcm9wcy5pY29uLFxuICAgICAgICAgIGNsZWFyID0gX3RoaXMkcHJvcHMuY2xlYXIsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMuZnVsbFdpZHRoLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzLmlzTG9hZGluZyxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMuY29tcHJlc3NlZCxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzLnByZXBlbmQsXG4gICAgICAgICAgYXBwZW5kID0gX3RoaXMkcHJvcHMuYXBwZW5kLFxuICAgICAgICAgIHJlYWRPbmx5ID0gX3RoaXMkcHJvcHMucmVhZE9ubHksXG4gICAgICAgICAgaW52YWxpZCA9IF90aGlzJHByb3BzLmlzSW52YWxpZCxcbiAgICAgICAgICBpc0Ryb3Bkb3duID0gX3RoaXMkcHJvcHMuaXNEcm9wZG93bixcbiAgICAgICAgICBpbnB1dElkID0gX3RoaXMkcHJvcHMuaW5wdXRJZCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0Jywge1xuICAgICAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAgICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LS1yZWFkT25seSc6IHJlYWRPbmx5LFxuICAgICAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtLWdyb3VwJzogcHJlcGVuZCB8fCBhcHBlbmQsXG4gICAgICAgICdldWlGb3JtQ29udHJvbExheW91dC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBwcmVwZW5kTm9kZXMgPSB0aGlzLnJlbmRlclNpZGVOb2RlKCdwcmVwZW5kJywgcHJlcGVuZCwgaW5wdXRJZCk7XG4gICAgICB2YXIgYXBwZW5kTm9kZXMgPSB0aGlzLnJlbmRlclNpZGVOb2RlKCdhcHBlbmQnLCBhcHBlbmQsIGlucHV0SWQpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgIH0sIHJlc3QpLCBwcmVwZW5kTm9kZXMsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlclwiXG4gICAgICB9LCBjaGlsZHJlbiwgX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dEljb25zLCB7XG4gICAgICAgIGljb246IGljb24sXG4gICAgICAgIGNsZWFyOiBjbGVhcixcbiAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgIGlzSW52YWxpZDogaW52YWxpZCxcbiAgICAgICAgaXNEcm9wZG93bjogIXJlYWRPbmx5ICYmICFpc0Rpc2FibGVkICYmIGlzRHJvcGRvd25cbiAgICAgIH0pKSwgYXBwZW5kTm9kZXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJTaWRlTm9kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJTaWRlTm9kZShzaWRlLCBub2RlcywgaW5wdXRJZCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCFub2Rlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygbm9kZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZvcm1MYWJlbChzaWRlLCBub2RlcywgaW5wdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcHBlbmROb2RlcyA9IFJlYWN0LkNoaWxkcmVuLm1hcChub2RlcywgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgPyBfdGhpcy5jcmVhdGVGb3JtTGFiZWwoc2lkZSwgaXRlbSwgaW5wdXRJZCkgOiBfdGhpcy5jcmVhdGVTaWRlTm9kZShzaWRlLCBpdGVtLCBpbmRleCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhcHBlbmROb2RlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY3JlYXRlRm9ybUxhYmVsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZUZvcm1MYWJlbChzaWRlLCBzdHJpbmcsIGlucHV0SWQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1MYWJlbCwge1xuICAgICAgICBodG1sRm9yOiBpbnB1dElkLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRfX1wiLmNvbmNhdChzaWRlKVxuICAgICAgfSwgc3RyaW5nKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY3JlYXRlU2lkZU5vZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlU2lkZU5vZGUoc2lkZSwgbm9kZSwga2V5KSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChub2RlLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcImV1aUZvcm1Db250cm9sTGF5b3V0X19cIi5jb25jYXQoc2lkZSksIG5vZGUucHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgICAga2V5OiBrZXlcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGb3JtQ29udHJvbExheW91dDtcbn0oQ29tcG9uZW50KTtcbkV1aUZvcm1Db250cm9sTGF5b3V0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGJlZm9yZSBjaGlsZHJlbi5cbiAgICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYWZ0ZXIgY2hpbGRyZW4uXG4gICAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgIHNpZGU6IFByb3BUeXBlcy5hbnksXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gICAgcmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICB9KS5pc1JlcXVpcmVkXSksXG4gIGNsZWFyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2l6ZTogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBDb250cm9scyB0aGUgYWRkaW5nIG9mIGFuZCB2aXNpYmlsaXR5IG9mIGEgZG93biBhcnJvdyBpY29uXG4gICAgICAgKi9cbiAgaXNEcm9wZG93bjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBDb25uZWN0cyB0aGUgcHJlcGVuZCBhbmQgYXBwZW5kIGxhYmVscyB0byB0aGUgaW5wdXRcbiAgICAgICAqL1xuICBpbnB1dElkOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJyZWZcIiwgXCJzaWRlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24gfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfY2xlYXJfYnV0dG9uJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9jdXN0b21faWNvbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBJQ09OX1NJREVTID0gWydsZWZ0JywgJ3JpZ2h0J107XG5cbmZ1bmN0aW9uIGlzSWNvblNoYXBlKGljb24pIHtcbiAgcmV0dXJuICEhaWNvbiAmJiBpY29uLmhhc093blByb3BlcnR5KCd0eXBlJyk7XG59XG5cbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGb3JtQ29udHJvbExheW91dEljb25zKTtcblxuICBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dEljb25zKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGb3JtQ29udHJvbExheW91dEljb25zKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlGb3JtQ29udHJvbExheW91dEljb25zLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpY29uID0gX3RoaXMkcHJvcHMuaWNvbixcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wcy5pc0ludmFsaWQsXG4gICAgICAgICAgaXNEcm9wZG93biA9IF90aGlzJHByb3BzLmlzRHJvcGRvd247XG4gICAgICB2YXIgaWNvblNpZGUgPSBpc0ljb25TaGFwZShpY29uKSAmJiBpY29uLnNpZGUgPyBpY29uLnNpZGUgOiAnbGVmdCc7XG4gICAgICB2YXIgY3VzdG9tSWNvbiA9IHRoaXMucmVuZGVyQ3VzdG9tSWNvbigpO1xuICAgICAgdmFyIGxvYWRpbmdTcGlubmVyID0gdGhpcy5yZW5kZXJMb2FkaW5nU3Bpbm5lcigpO1xuICAgICAgdmFyIGNsZWFyQnV0dG9uID0gdGhpcy5yZW5kZXJDbGVhckJ1dHRvbigpO1xuICAgICAgdmFyIGludmFsaWRJY29uID0gdGhpcy5yZW5kZXJJbnZhbGlkSWNvbigpO1xuICAgICAgdmFyIGRyb3Bkb3duSWNvbiA9IHRoaXMucmVuZGVyRHJvcGRvd25JY29uKCk7XG4gICAgICB2YXIgbGVmdEljb25zO1xuXG4gICAgICBpZiAoY3VzdG9tSWNvbiAmJiBpY29uU2lkZSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGxlZnRJY29ucyA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEljb25zXCJcbiAgICAgICAgfSwgY3VzdG9tSWNvbik7XG4gICAgICB9XG5cbiAgICAgIHZhciByaWdodEljb25zOyAvLyBJZiB0aGUgaWNvbiBpcyBvbiB0aGUgcmlnaHQsIGl0IHNob3VsZCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIGNsZWFyIGJ1dHRvbiBpbiB0aGUgRE9NLlxuXG4gICAgICBpZiAoY2xlYXJCdXR0b24gfHwgbG9hZGluZ1NwaW5uZXIgfHwgaXNJbnZhbGlkIHx8IGlzRHJvcGRvd24gfHwgY3VzdG9tSWNvbiAmJiBpY29uU2lkZSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICByaWdodEljb25zID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMgZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucy0tcmlnaHRcIlxuICAgICAgICB9LCBjbGVhckJ1dHRvbiwgbG9hZGluZ1NwaW5uZXIsIGludmFsaWRJY29uLCBpY29uU2lkZSA9PT0gJ3JpZ2h0JyA/IGN1c3RvbUljb24gOiB1bmRlZmluZWQsIGRyb3Bkb3duSWNvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBsZWZ0SWNvbnMsIHJpZ2h0SWNvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDdXN0b21JY29uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckN1c3RvbUljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpY29uID0gX3RoaXMkcHJvcHMyLmljb24sXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMi5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWljb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIE5vcm1hbGl6ZSB0aGUgaWNvbiB0byBhbiBvYmplY3QgaWYgaXQncyBhIHN0cmluZy5cblxuXG4gICAgICB2YXIgaWNvblByb3BzID0gaXNJY29uU2hhcGUoaWNvbikgPyBpY29uIDoge1xuICAgICAgICB0eXBlOiBpY29uXG4gICAgICB9O1xuXG4gICAgICB2YXIgaWNvblJlZiA9IGljb25Qcm9wcy5yZWYsXG4gICAgICAgICAgc2lkZSA9IGljb25Qcm9wcy5zaWRlLFxuICAgICAgICAgIGljb25SZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGljb25Qcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbScsXG4gICAgICAgIGljb25SZWY6IGljb25SZWZcbiAgICAgIH0sIGljb25SZXN0KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckRyb3Bkb3duSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJEcm9wZG93bkljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0Ryb3Bkb3duID0gX3RoaXMkcHJvcHMzLmlzRHJvcGRvd24sXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMy5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWlzRHJvcGRvd24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiwge1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICB0eXBlOiBcImFycm93RG93blwiXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTG9hZGluZ1NwaW5uZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyTG9hZGluZ1NwaW5uZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczQuaXNMb2FkaW5nLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczQuY29tcHJlc3NlZDtcblxuICAgICAgaWYgKCFpc0xvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbSdcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDbGVhckJ1dHRvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJDbGVhckJ1dHRvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsZWFyID0gX3RoaXMkcHJvcHM1LmNsZWFyLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczUuY29tcHJlc3NlZDtcblxuICAgICAgaWYgKCFjbGVhcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiwgX2V4dGVuZHMoe1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nXG4gICAgICB9LCBjbGVhcikpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJbnZhbGlkSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJbnZhbGlkSWNvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzSW52YWxpZCA9IF90aGlzJHByb3BzNi5pc0ludmFsaWQsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzNi5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWlzSW52YWxpZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICBjb2xvcjogXCJkYW5nZXJcIixcbiAgICAgICAgdHlwZTogXCJhbGVydFwiXG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucztcbn0oQ29tcG9uZW50KTtcbkV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMucHJvcFR5cGVzID0ge1xuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgc2lkZTogUHJvcFR5cGVzLmFueSxcbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgICByZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgY2xlYXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzaXplOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0Ryb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJvbkNsaWNrXCIsIFwic2l6ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgczogJ2V1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24tLXNtYWxsJyxcbiAgbTogbnVsbFxufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbicsIHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSwgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24ubGFiZWxcIixcbiAgICBkZWZhdWx0OiBcIkNsZWFyIGlucHV0XCJcbiAgfSwgZnVuY3Rpb24gKGxhYmVsKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBcImFyaWEtbGFiZWxcIjogbGFiZWxcbiAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbl9faWNvblwiLFxuICAgICAgdHlwZTogXCJjcm9zc1wiXG4gICAgfSkpO1xuICB9KTtcbn07XG5FdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwib25DbGlja1wiLCBcInR5cGVcIiwgXCJpY29uUmVmXCIsIFwic2l6ZVwiLCBcImNvbG9yXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uID0gZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICBpY29uUmVmID0gX3JlZi5pY29uUmVmLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbicsIGNsYXNzTmFtZSwge1xuICAgICdldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24tLWNsaWNrYWJsZSc6IG9uQ2xpY2tcbiAgfSk7XG5cbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHJlZjogaWNvblJlZlxuICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb25fX2ljb25cIixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICBzaXplOiBzaXplLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGNvbG9yOiBjb2xvclxuICAgIH0pKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHJlZjogaWNvblJlZlxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbl9faWNvblwiLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbG9yOiBjb2xvclxuICB9KSk7XG59O1xuRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICBpY29uUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJpc0ZvY3VzZWRcIiwgXCJpc0ludmFsaWRcIiwgXCJpc0Rpc2FibGVkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtTGFiZWwgPSBmdW5jdGlvbiBFdWlGb3JtTGFiZWwoX3JlZikge1xuICB2YXIgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2xhYmVsJyA6IF9yZWYkdHlwZSxcbiAgICAgIGlzRm9jdXNlZCA9IF9yZWYuaXNGb2N1c2VkLFxuICAgICAgaXNJbnZhbGlkID0gX3JlZi5pc0ludmFsaWQsXG4gICAgICBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtTGFiZWwnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpRm9ybUxhYmVsLWlzRm9jdXNlZCc6IGlzRm9jdXNlZCxcbiAgICAnZXVpRm9ybUxhYmVsLWlzSW52YWxpZCc6IGlzSW52YWxpZCxcbiAgICAnZXVpRm9ybUxhYmVsLWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gIH0pO1xuXG4gIGlmICh0eXBlID09PSAnbGVnZW5kJykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGVnZW5kXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsYWJlbFwiLCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpRm9ybUxhYmVsLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogRGVmYXVsdCB0eXBlIGlzIGEgYGxhYmVsYCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBgbGVnZW5kYFxuICAgICAqIGlmIHVzaW5nIGluc2lkZSBhIGBmaWVsZHNldGAuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRGVmYXVsdCB0eXBlIGlzIGEgYGxhYmVsYCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBgbGVnZW5kYFxuICAgICAqIGlmIHVzaW5nIGluc2lkZSBhIGBmaWVsZHNldGAuXG4gICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiLCBcImxlZ2VuZFwiXSldKSwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImxlZ2VuZFwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImxhYmVsXCIsIFwibGVnZW5kXCJdKV0pXSksXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ2hhbmdlcyBgY3Vyc29yYCB0byBgZGVmYXVsdGAuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQ2hhbmdlcyBgY3Vyc29yYCB0byBgZGVmYXVsdGAuXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5cbmZ1bmN0aW9uIGlzTXV0YWJsZVJlZihyZWYpIHtcbiAgcmV0dXJuIHJlZiAhPSBudWxsICYmIHJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpO1xufVxuXG5leHBvcnQgdmFyIEV1aVZhbGlkYXRhYmxlQ29udHJvbCA9IGZ1bmN0aW9uIEV1aVZhbGlkYXRhYmxlQ29udHJvbChfcmVmKSB7XG4gIHZhciBpc0ludmFsaWQgPSBfcmVmLmlzSW52YWxpZCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIGNvbnRyb2wgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRSZWYgPSBjaGlsZC5yZWY7XG4gIHZhciByZXBsYWNlZFJlZiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgY29udHJvbC5jdXJyZW50ID0gZWxlbWVudDsgLy8gQ2FsbCB0aGUgb3JpZ2luYWwgcmVmLCBpZiBhbnlcblxuICAgIGlmICh0eXBlb2YgY2hpbGRSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNoaWxkUmVmKGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAoaXNNdXRhYmxlUmVmKGNoaWxkUmVmKSkge1xuICAgICAgY2hpbGRSZWYuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICB9LCBbY2hpbGRSZWZdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udHJvbC5jdXJyZW50ID09PSBudWxsIHx8IHR5cGVvZiBjb250cm9sLmN1cnJlbnQuc2V0Q3VzdG9tVmFsaWRpdHkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjsgLy8ganNkb20gZG9lc24ndCBwb2x5ZmlsbCB0aGlzIGZvciB0aGUgc2VydmVyLXNpZGVcbiAgICB9XG5cbiAgICBpZiAoaXNJbnZhbGlkKSB7XG4gICAgICBjb250cm9sLmN1cnJlbnQuc2V0Q3VzdG9tVmFsaWRpdHkoJ0ludmFsaWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbC5jdXJyZW50LnNldEN1c3RvbVZhbGlkaXR5KCcnKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZCwge1xuICAgIHJlZjogcmVwbGFjZWRSZWYsXG4gICAgJ2FyaWEtaW52YWxpZCc6IGlzSW52YWxpZFxuICB9KTtcbn07XG5FdWlWYWxpZGF0YWJsZUNvbnRyb2wucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcmVmOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWRcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogVGhlIGBnZXRGb3JtQ29udHJvbENsYXNzTmFtZUZvckljb25Db3VudGAgZnVuY3Rpb24gaGVscHMgc2V0dXAgdGhlIGNsYXNzTmFtZSBhcHBlbmR1bVxuICogZGVwZW5kaW5nIG9uIHRoZSBmb3JtIGNvbnRyb2wncyBjdXJyZW50IHNldHRpbmdzL3N0YXRlLlxuICpcbiAqIEBwYXJhbSBpY29uIHtib29sZWFufSBEb2VzIGl0IGNvbnRhaW4gYSBzdGF0aWMgaWNvbiBsaWtlIGFycm93RG93blxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBJcyBpdCBjdXJyZW50bHkgY2xlYXJhYmxlXG4gKiBAcGFyYW0gaXNMb2FkaW5nIHtib29sZWFufSBJcyBpcyBjdXJyZW50bHkgbG9hZGluZ1xuICogQHBhcmFtIGlzSW52YWxpZCB7Ym9vbGVhbn0gSXQgaXMgY3VycmVudGx5IGludmFsaWRcbiAqIEBwYXJhbSBpc0Ryb3Bkb3duIHtib29sZWFufSBJdCBpcyBhcyBkcm9wZG93blxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gUmV0dXJucyB0aGUgc3RyaW5nIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBjbGFzc05hbWUgb2YgdGhlIGZvcm0gY29udHJvbDsgb3IgYHVuZGVmaW5lZGAgaWYgYWxsIGV2YWx1YXRlIHRvIGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtQ29udHJvbENsYXNzTmFtZUZvckljb25Db3VudChfcmVmKSB7XG4gIHZhciBpY29uID0gX3JlZi5pY29uLFxuICAgICAgY2xlYXIgPSBfcmVmLmNsZWFyLFxuICAgICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgICBpc0ludmFsaWQgPSBfcmVmLmlzSW52YWxpZCxcbiAgICAgIGlzRHJvcGRvd24gPSBfcmVmLmlzRHJvcGRvd247XG4gIHZhciBudW1JY29ucyA9IFtpY29uLCBjbGVhciwgaXNJbnZhbGlkLCBpc0xvYWRpbmcsIGlzRHJvcGRvd25dLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBpdGVtID09PSB0cnVlO1xuICB9KS5sZW5ndGg7IC8vIFRoaXMgY2xhc3NOYW1lIGlzIGFsc28gc3BlY2lmaWNhbGx5IHVzZWQgaW4gYHNyYy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX2Zvcm0uc2Nzc2BcblxuICByZXR1cm4gbnVtSWNvbnMgPiAwID8gXCJldWlGb3JtQ29udHJvbExheW91dC0tXCIuY29uY2F0KG51bUljb25zLCBcImljb25zXCIpIDogdW5kZWZpbmVkO1xufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpZFwiLCBcIm5hbWVcIiwgXCJwbGFjZWhvbGRlclwiLCBcImlzSW52YWxpZFwiLCBcImZ1bGxXaWR0aFwiLCBcImlzTG9hZGluZ1wiLCBcImlucHV0UmVmXCIsIFwiaW5jcmVtZW50YWxcIiwgXCJjb21wcmVzc2VkXCIsIFwib25TZWFyY2hcIiwgXCJpc0NsZWFyYWJsZVwiLCBcImFwcGVuZFwiLCBcInByZXBlbmRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgQnJvd3NlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Jyb3dzZXInO1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0IH0gZnJvbSAnLi4vZm9ybV9jb250cm9sX2xheW91dCc7XG5pbXBvcnQgeyBFdWlWYWxpZGF0YWJsZUNvbnRyb2wgfSBmcm9tICcuLi92YWxpZGF0YWJsZV9jb250cm9sJztcbmltcG9ydCB7IGdldEZvcm1Db250cm9sQ2xhc3NOYW1lRm9ySWNvbkNvdW50IH0gZnJvbSAnLi4vZm9ybV9jb250cm9sX2xheW91dC9fbnVtX2ljb25zJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaXNTZWFyY2hTdXBwb3J0ZWQgPSBmYWxzZTtcbmV4cG9ydCB2YXIgRXVpRmllbGRTZWFyY2ggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZpZWxkU2VhcmNoLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZpZWxkU2VhcmNoKTtcblxuICBmdW5jdGlvbiBFdWlGaWVsZFNlYXJjaCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRmllbGRTZWFyY2gpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICB2YWx1ZTogX3RoaXMucHJvcHMudmFsdWUgfHwgU3RyaW5nKF90aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSB8fCAnJylcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnB1dEVsZW1lbnRcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYW51cHNcIiwgW10pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xlYXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gY2xlYXIgdGhlIGZpZWxkJ3MgdmFsdWVcbiAgICAgIC8vIDEuIFJlYWN0IGRvZXNuJ3QgbGlzdGVuIGZvciBgY2hhbmdlYCBldmVudHMsIGluc3RlYWQgaXQgbWFwcyBgaW5wdXRgIGV2ZW50cyB0byBgY2hhbmdlYFxuICAgICAgLy8gMi4gUmVhY3Qgb25seSBmaXJlcyB0aGUgbWFwcGVkIGBjaGFuZ2VgIGV2ZW50IGlmIHRoZSBlbGVtZW50J3MgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAgIC8vIDMuIEFuIGlucHV0J3MgdmFsdWUgaXMsIGluIGFkZGl0aW9uIHRvIG90aGVyIG1ldGhvZHMsIHRyYWNrZWQgYnkgaW50ZXJjZXB0aW5nIGVsZW1lbnQudmFsdWUgPSAnLi4uJ1xuICAgICAgLy9cbiAgICAgIC8vIFNvIHdlIGhhdmUgdG8gZ28gYmVsb3cgdGhlIGVsZW1lbnQncyB2YWx1ZSBzZXR0ZXIgdG8gYXZvaWQgUmVhY3QgaW50ZXJjZXB0aW5nIGl0LFxuICAgICAgLy8gb25seSB0aGVuIHdpbGwgUmVhY3QgdHJlYXQgdGhlIHZhbHVlIGFzIGRpZmZlcmVudCBhbmQgZmlyZSBpdHMgYGNoYW5nZWAgZXZlbnRcbiAgICAgIC8vXG4gICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMzg5MjU0Ny93aGF0LWlzLXRoZS1iZXN0LXdheS10by10cmlnZ2VyLW9uY2hhbmdlLWV2ZW50LWluLXJlYWN0LWpzXG4gICAgICB2YXIgbmF0aXZlSW5wdXRWYWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsICd2YWx1ZScpO1xuICAgICAgdmFyIG5hdGl2ZUlucHV0VmFsdWVTZXR0ZXIgPSBuYXRpdmVJbnB1dFZhbHVlID8gbmF0aXZlSW5wdXRWYWx1ZS5zZXQgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuYXRpdmVJbnB1dFZhbHVlU2V0dGVyKSB7XG4gICAgICAgIG5hdGl2ZUlucHV0VmFsdWVTZXR0ZXIuY2FsbChfdGhpcy5pbnB1dEVsZW1lbnQsICcnKTtcbiAgICAgIH0gLy8gZGlzcGF0Y2ggaW5wdXQgZXZlbnQsIHdpdGggSUUxMSBzdXBwb3J0L2ZhbGxiYWNrXG5cblxuICAgICAgdmFyIGV2ZW50O1xuXG4gICAgICBpZiAoJ0V2ZW50JyBpbiB3aW5kb3cgJiYgdHlwZW9mIEV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KCdpbnB1dCcsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSUUxMVxuICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgICAgICBldmVudC5pbml0RXZlbnQoJ2lucHV0JywgdHJ1ZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIF90aGlzLmlucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgfSAvLyBzZXQgZm9jdXMgb24gdGhlIHNlYXJjaCBmaWVsZFxuXG5cbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtZW50LmZvY3VzKCk7XG5cbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnKSk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9KTtcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaW5jcmVtZW50YWwgPSBfdGhpcyRwcm9wcy5pbmNyZW1lbnRhbCxcbiAgICAgICAgICBvblNlYXJjaCA9IF90aGlzJHByb3BzLm9uU2VhcmNoO1xuXG4gICAgICBpZiAob25TZWFyY2ggJiYgaW5jcmVtZW50YWwpIHtcbiAgICAgICAgb25TZWFyY2goJycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldFJlZlwiLCBmdW5jdGlvbiAoaW5wdXRFbGVtZW50KSB7XG4gICAgICBfdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW1lbnQ7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pbnB1dFJlZikge1xuICAgICAgICBfdGhpcy5wcm9wcy5pbnB1dFJlZihpbnB1dEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uS2V5VXBcIiwgZnVuY3Rpb24gKGV2ZW50LCBpbmNyZW1lbnRhbCwgb25TZWFyY2gpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbktleVVwKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uS2V5VXAoZXZlbnQpO1xuXG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvblNlYXJjaCAmJiAoZXZlbnQua2V5ICE9PSBrZXlzLkVOVEVSICYmIGluY3JlbWVudGFsIHx8IGV2ZW50LmtleSA9PT0ga2V5cy5FTlRFUiAmJiAhaXNTZWFyY2hTdXBwb3J0ZWQpKSB7XG4gICAgICAgIG9uU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRmllbGRTZWFyY2gsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQpIHJldHVybjtcbiAgICAgIGlzU2VhcmNoU3VwcG9ydGVkID0gQnJvd3Nlci5pc0V2ZW50U3VwcG9ydGVkKCdzZWFyY2gnLCB0aGlzLmlucHV0RWxlbWVudCk7XG5cbiAgICAgIGlmIChpc1NlYXJjaFN1cHBvcnRlZCkge1xuICAgICAgICB2YXIgb25TZWFyY2ggPSBmdW5jdGlvbiBvblNlYXJjaChldmVudCkge1xuICAgICAgICAgIGlmIChfdGhpczIucHJvcHMub25TZWFyY2gpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIF90aGlzMi5wcm9wcy5vblNlYXJjaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWFyY2gnLCBvblNlYXJjaCk7XG4gICAgICAgIHRoaXMuY2xlYW51cHMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFfdGhpczIuaW5wdXRFbGVtZW50KSByZXR1cm47XG5cbiAgICAgICAgICBfdGhpczIuaW5wdXRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NlYXJjaCcsIG9uU2VhcmNoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LnZhbHVlICE9PSBfdGhpczIuc3RhdGUudmFsdWUpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKF90aGlzMi5wcm9wcy5vblNlYXJjaCkge1xuICAgICAgICAgICAgX3RoaXMyLnByb3BzLm9uU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhbnVwcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGVhbnVwKSB7XG4gICAgICAgIHJldHVybiBjbGVhbnVwKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMyLmlkLFxuICAgICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wczIubmFtZSxcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzMi5wbGFjZWhvbGRlcixcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wczIuaXNJbnZhbGlkLFxuICAgICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzMi5mdWxsV2lkdGgsXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMyLmlzTG9hZGluZyxcbiAgICAgICAgICBpbnB1dFJlZiA9IF90aGlzJHByb3BzMi5pbnB1dFJlZixcbiAgICAgICAgICBpbmNyZW1lbnRhbCA9IF90aGlzJHByb3BzMi5pbmNyZW1lbnRhbCxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQsXG4gICAgICAgICAgb25TZWFyY2ggPSBfdGhpcyRwcm9wczIub25TZWFyY2gsXG4gICAgICAgICAgX2lzQ2xlYXJhYmxlID0gX3RoaXMkcHJvcHMyLmlzQ2xlYXJhYmxlLFxuICAgICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzMi5hcHBlbmQsXG4gICAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzMi5wcmVwZW5kLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnZhbHVlICE9PSAnc3RyaW5nJykgdmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlOyAvLyBTZXQgYWN0dWFsIHZhbHVlIG9mIGlzQ2xlYXJhYmxlIGlmIHZhbHVlIGV4aXN0cyBhcyB3ZWxsXG5cbiAgICAgIHZhciBpc0NsZWFyYWJsZSA9IEJvb2xlYW4oX2lzQ2xlYXJhYmxlICYmIHZhbHVlICYmICFyZXN0LnJlYWRPbmx5ICYmICFyZXN0LmRpc2FibGVkKTtcbiAgICAgIHZhciBudW1JY29uc0NsYXNzID0gZ2V0Rm9ybUNvbnRyb2xDbGFzc05hbWVGb3JJY29uQ291bnQoe1xuICAgICAgICBjbGVhcjogaXNDbGVhcmFibGUsXG4gICAgICAgIGlzSW52YWxpZDogaXNJbnZhbGlkLFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1xuICAgICAgfSk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZpZWxkU2VhcmNoJywgbnVtSWNvbnNDbGFzcywge1xuICAgICAgICAnZXVpRmllbGRTZWFyY2gtLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLS1pbkdyb3VwJzogcHJlcGVuZCB8fCBhcHBlbmQsXG4gICAgICAgICdldWlGaWVsZFNlYXJjaC1pc0xvYWRpbmcnOiBpc0xvYWRpbmcsXG4gICAgICAgICdldWlGaWVsZFNlYXJjaC1pc0NsZWFyYWJsZSc6IGlzQ2xlYXJhYmxlLFxuICAgICAgICAnZXVpRmllbGRTZWFyY2gtaXNJbnZhbGlkJzogaXNJbnZhbGlkXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXQsIHtcbiAgICAgICAgaWNvbjogXCJzZWFyY2hcIixcbiAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICAgICAgY2xlYXI6IGlzQ2xlYXJhYmxlID8ge1xuICAgICAgICAgIG9uQ2xpY2s6IHRoaXMub25DbGVhcixcbiAgICAgICAgICAnZGF0YS10ZXN0LXN1YmonOiAnY2xlYXJTZWFyY2hCdXR0b24nXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgIGFwcGVuZDogYXBwZW5kLFxuICAgICAgICBwcmVwZW5kOiBwcmVwZW5kXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVZhbGlkYXRhYmxlQ29udHJvbCwge1xuICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZFxuICAgICAgfSwgX19fRW1vdGlvbkpTWChcImlucHV0XCIsIF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogXCJzZWFyY2hcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgb25LZXlVcDogZnVuY3Rpb24gb25LZXlVcChlKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMy5vbktleVVwKGUsIGluY3JlbWVudGFsLCBvblNlYXJjaCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogdGhpcy5zZXRSZWZcbiAgICAgIH0sIHJlc3QpKSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGaWVsZFNlYXJjaDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUZpZWxkU2VhcmNoLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGZ1bGxXaWR0aDogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGluY3JlbWVudGFsOiBmYWxzZSxcbiAgY29tcHJlc3NlZDogZmFsc2UsXG4gIGlzQ2xlYXJhYmxlOiB0cnVlXG59KTtcblxuRXVpRmllbGRTZWFyY2gucHJvcFR5cGVzID0ge1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHByZXNzZXMgW0VudGVyXSBPUiBvbiBjaGFuZ2UgaWYgdGhlIGluY3JlbWVudGFsIHByb3AgaXMgYHRydWVgLlxuICAgICAqIElmIHlvdSBkb24ndCBuZWVkIHRoZSBvbltFbnRlcl0gZnVuY3Rpb25hbGl0eSwgcHJlZmVyIHVzaW5nIG9uQ2hhbmdlXG4gICAgICovXG4gIG9uU2VhcmNoOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCB0aGUgc2VhcmNoIHdpbGwgYmUgZXhlY3V0ZWQgKHRoYXQgaXMsIHRoZSBgb25TZWFyY2hgIHdpbGwgYmUgY2FsbGVkKSBhcyB0aGVcbiAgICAgKiB1c2VyIHR5cGVzLlxuICAgICAqL1xuICBpbmNyZW1lbnRhbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogd2hlbiBgdHJ1ZWAgY3JlYXRlcyBhIHNob3J0ZXIgaGVpZ2h0IGlucHV0XG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogU2hvd3MgYSBidXR0b24gdGhhdCBxdWlja2x5IGNsZWFycyBhbnkgaW5wdXRcbiAgICAgKi9cbiAgaXNDbGVhcmFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgaW5wdXRcbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYWZ0ZXIgaW5wdXQuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gV2UgZG9uJ3Qgbm9ybWFsbHkgdXNlICdJJyBwcmVmaXhlcywgdGhpcyBmaWxlIGlzIGFuIGV4Y2VwdGlvblxudmFyIEJyb3dzZXJJbXBsID0ge1xuICBpc0V2ZW50U3VwcG9ydGVkOiBmdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKG5hbWUsIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gXCJvblwiLmNvbmNhdChuYW1lKSBpbiBlbGVtZW50O1xuICB9XG59O1xuZXhwb3J0IHZhciBCcm93c2VyID0gT2JqZWN0LmZyZWV6ZShCcm93c2VySW1wbCk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1FcnJvclRleHQgPSBmdW5jdGlvbiBFdWlGb3JtRXJyb3JUZXh0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUVycm9yVGV4dCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aUZvcm1FcnJvclRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1IZWxwVGV4dCA9IGZ1bmN0aW9uIEV1aUZvcm1IZWxwVGV4dChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1IZWxwVGV4dCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlGb3JtSGVscFRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiaGVscFRleHRcIiwgXCJpc0ludmFsaWRcIiwgXCJlcnJvclwiLCBcImxhYmVsXCIsIFwibGFiZWxUeXBlXCIsIFwibGFiZWxBcHBlbmRcIiwgXCJoYXNFbXB0eUxhYmVsU3BhY2VcIiwgXCJmdWxsV2lkdGhcIiwgXCJjbGFzc05hbWVcIiwgXCJkZXNjcmliZWRCeUlkc1wiLCBcImRpc3BsYXlcIiwgXCJoYXNDaGlsZExhYmVsXCIsIFwiaWRcIiwgXCJpc0Rpc2FibGVkXCJdO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBDb21wb25lbnQsIENoaWxkcmVuIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb2JqZWN0cyc7XG5pbXBvcnQgeyBFdWlGb3JtSGVscFRleHQgfSBmcm9tICcuLi9mb3JtX2hlbHBfdGV4dCc7XG5pbXBvcnQgeyBFdWlGb3JtRXJyb3JUZXh0IH0gZnJvbSAnLi4vZm9ybV9lcnJvcl90ZXh0JztcbmltcG9ydCB7IEV1aUZvcm1MYWJlbCB9IGZyb20gJy4uL2Zvcm1fbGFiZWwnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGRpc3BsYXlUb0NsYXNzTmFtZU1hcCA9IHtcbiAgcm93OiBudWxsLFxuICByb3dDb21wcmVzc2VkOiAnZXVpRm9ybVJvdy0tY29tcHJlc3NlZCcsXG4gIGNvbHVtbkNvbXByZXNzZWQ6ICdldWlGb3JtUm93LS1jb21wcmVzc2VkIGV1aUZvcm1Sb3ctLWhvcml6b250YWwnLFxuICBjZW50ZXI6IG51bGwsXG4gIGNlbnRlckNvbXByZXNzZWQ6ICdldWlGb3JtUm93LS1jb21wcmVzc2VkJyxcbiAgY29sdW1uQ29tcHJlc3NlZFN3aXRjaDogJ2V1aUZvcm1Sb3ctLWNvbXByZXNzZWQgZXVpRm9ybVJvdy0taG9yaXpvbnRhbCBldWlGb3JtUm93LS1oYXNTd2l0Y2gnXG59O1xuZXhwb3J0IHZhciBESVNQTEFZUyA9IGtleXNPZihkaXNwbGF5VG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlGb3JtUm93ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlGb3JtUm93LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZvcm1Sb3cpO1xuXG4gIGZ1bmN0aW9uIEV1aUZvcm1Sb3coKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZvcm1Sb3cpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF9hcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgX2FyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoX2FyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaWQ6IF90aGlzLnByb3BzLmlkIHx8IGh0bWxJZEdlbmVyYXRvcigpKClcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERvaW5nIHRoaXMgdG8gYWxsb3cgb25Gb2N1cyB0byBiZSBjYWxsZWQgY29ycmVjdGx5IGZyb20gdGhlIGNoaWxkIGlucHV0IGVsZW1lbnQgYXMgdGhpcyBjb21wb25lbnQgb3ZlcnJpZGVzIGl0XG4gICAgICB2YXIgb25DaGlsZEZvY3VzID0gZ2V0KF90aGlzLnByb3BzLCAnY2hpbGRyZW4ucHJvcHMub25Gb2N1cycpO1xuXG4gICAgICBpZiAob25DaGlsZEZvY3VzKSB7XG4gICAgICAgIG9uQ2hpbGRGb2N1cy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBpc0ZvY3VzZWQgPSBfcmVmLmlzRm9jdXNlZDtcblxuICAgICAgICBpZiAoIWlzRm9jdXNlZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc0ZvY3VzZWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkJsdXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gRG9pbmcgdGhpcyB0byBhbGxvdyBvbkJsdXIgdG8gYmUgY2FsbGVkIGNvcnJlY3RseSBmcm9tIHRoZSBjaGlsZCBpbnB1dCBlbGVtZW50IGFzIHRoaXMgY29tcG9uZW50IG92ZXJyaWRlcyBpdFxuICAgICAgdmFyIG9uQ2hpbGRCbHVyID0gZ2V0KF90aGlzLnByb3BzLCAnY2hpbGRyZW4ucHJvcHMub25CbHVyJyk7XG5cbiAgICAgIGlmIChvbkNoaWxkQmx1cikge1xuICAgICAgICBvbkNoaWxkQmx1ci5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRm9ybVJvdywgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfcmVmMiwgX2NoaWxkJHByb3BzJGRpc2FibGVkO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgaGVscFRleHQgPSBfdGhpcyRwcm9wcy5oZWxwVGV4dCxcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wcy5pc0ludmFsaWQsXG4gICAgICAgICAgZXJyb3IgPSBfdGhpcyRwcm9wcy5lcnJvcixcbiAgICAgICAgICBsYWJlbCA9IF90aGlzJHByb3BzLmxhYmVsLFxuICAgICAgICAgIGxhYmVsVHlwZSA9IF90aGlzJHByb3BzLmxhYmVsVHlwZSxcbiAgICAgICAgICBsYWJlbEFwcGVuZCA9IF90aGlzJHByb3BzLmxhYmVsQXBwZW5kLFxuICAgICAgICAgIGhhc0VtcHR5TGFiZWxTcGFjZSA9IF90aGlzJHByb3BzLmhhc0VtcHR5TGFiZWxTcGFjZSxcbiAgICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wcy5mdWxsV2lkdGgsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGRlc2NyaWJlZEJ5SWRzID0gX3RoaXMkcHJvcHMuZGVzY3JpYmVkQnlJZHMsXG4gICAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgICAgaGFzQ2hpbGRMYWJlbCA9IF90aGlzJHByb3BzLmhhc0NoaWxkTGFiZWwsXG4gICAgICAgICAgcHJvcHNJZCA9IF90aGlzJHByb3BzLmlkLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBpZCA9IHRoaXMuc3RhdGUuaWQ7XG4gICAgICB2YXIgaGFzTGFiZWwgPSBsYWJlbCB8fCBsYWJlbEFwcGVuZDtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybVJvdycsIHtcbiAgICAgICAgJ2V1aUZvcm1Sb3ctLWhhc0VtcHR5TGFiZWxTcGFjZSc6IGhhc0VtcHR5TGFiZWxTcGFjZSxcbiAgICAgICAgJ2V1aUZvcm1Sb3ctLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUZvcm1Sb3ctLWhhc0xhYmVsJzogaGFzTGFiZWxcbiAgICAgIH0sIGRpc3BsYXlUb0NsYXNzTmFtZU1hcFtkaXNwbGF5XSwgLy8gU2FmZSB1c2Ugb2YgISBhcyBkZWZhdWx0IHByb3AgaXMgJ3JvdydcbiAgICAgIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgb3B0aW9uYWxIZWxwVGV4dHM7XG5cbiAgICAgIGlmIChoZWxwVGV4dCkge1xuICAgICAgICB2YXIgaGVscFRleHRzID0gQXJyYXkuaXNBcnJheShoZWxwVGV4dCkgPyBoZWxwVGV4dCA6IFtoZWxwVGV4dF07XG4gICAgICAgIG9wdGlvbmFsSGVscFRleHRzID0gaGVscFRleHRzLm1hcChmdW5jdGlvbiAoaGVscFRleHQsIGkpIHtcbiAgICAgICAgICB2YXIga2V5ID0gdHlwZW9mIGhlbHBUZXh0ID09PSAnc3RyaW5nJyA/IGhlbHBUZXh0IDogaTtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtSGVscFRleHQsIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1oZWxwLVwiKS5jb25jYXQoaSksXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fdGV4dFwiXG4gICAgICAgICAgfSwgaGVscFRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbmFsRXJyb3JzO1xuXG4gICAgICBpZiAoZXJyb3IgJiYgaXNJbnZhbGlkKSB7XG4gICAgICAgIHZhciBlcnJvclRleHRzID0gQXJyYXkuaXNBcnJheShlcnJvcikgPyBlcnJvciA6IFtlcnJvcl07XG4gICAgICAgIG9wdGlvbmFsRXJyb3JzID0gZXJyb3JUZXh0cy5tYXAoZnVuY3Rpb24gKGVycm9yLCBpKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycgPyBlcnJvciA6IGk7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUVycm9yVGV4dCwge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBpZDogXCJcIi5jb25jYXQoaWQsIFwiLWVycm9yLVwiKS5jb25jYXQoaSksXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fdGV4dFwiXG4gICAgICAgICAgfSwgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbmFsTGFiZWw7XG4gICAgICB2YXIgaXNMZWdlbmQgPSBsYWJlbCAmJiBsYWJlbFR5cGUgPT09ICdsZWdlbmQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdmFyIGxhYmVsSWQgPSBcIlwiLmNvbmNhdChpZCwgXCItbGFiZWxcIik7XG5cbiAgICAgIGlmIChoYXNMYWJlbCkge1xuICAgICAgICB2YXIgbGFiZWxQcm9wcyA9IHt9O1xuXG4gICAgICAgIGlmIChpc0xlZ2VuZCkge1xuICAgICAgICAgIGxhYmVsUHJvcHMgPSB7XG4gICAgICAgICAgICB0eXBlOiBsYWJlbFR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhYmVsUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaHRtbEZvcjogaGFzQ2hpbGRMYWJlbCA/IGlkIDogdW5kZWZpbmVkXG4gICAgICAgICAgfSwgIWlzRGlzYWJsZWQgJiYge1xuICAgICAgICAgICAgaXNGb2N1c2VkOiB0aGlzLnN0YXRlLmlzRm9jdXNlZFxuICAgICAgICAgIH0pLCB7fSwge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHJvdyBpcyBkaXNhYmxlZCwgZG9uJ3QgcGFzcyB0aGUgaXNGb2N1c2VkIHN0YXRlLlxuICAgICAgICAgICAgdHlwZTogbGFiZWxUeXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25hbExhYmVsID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX2xhYmVsV3JhcHBlclwiXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUxhYmVsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX2xhYmVsXCIsXG4gICAgICAgICAgaXNJbnZhbGlkOiBpc0ludmFsaWQsXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBpc0ludmFsaWQsXG4gICAgICAgICAgaWQ6IGxhYmVsSWRcbiAgICAgICAgfSwgbGFiZWxQcm9wcyksIGxhYmVsKSwgbGFiZWxBcHBlbmQgJiYgJyAnLCBsYWJlbEFwcGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25hbFByb3BzID0ge307XG4gICAgICAvKipcbiAgICAgICAqIFNhZmUgdXNlIG9mICEgYXMgZGVmYXVsdCBwcm9wIGlzIFtdXG4gICAgICAgKi9cblxuICAgICAgdmFyIGRlc2NyaWJpbmdJZHMgPSBfdG9Db25zdW1hYmxlQXJyYXkoZGVzY3JpYmVkQnlJZHMpO1xuXG4gICAgICBpZiAob3B0aW9uYWxIZWxwVGV4dHMpIHtcbiAgICAgICAgb3B0aW9uYWxIZWxwVGV4dHMuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uYWxIZWxwVGV4dCkge1xuICAgICAgICAgIHJldHVybiBkZXNjcmliaW5nSWRzLnB1c2gob3B0aW9uYWxIZWxwVGV4dC5wcm9wcy5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uYWxFcnJvcnMpIHtcbiAgICAgICAgb3B0aW9uYWxFcnJvcnMuZm9yRWFjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmluZ0lkcy5wdXNoKGVycm9yLnByb3BzLmlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXNjcmliaW5nSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0aW9uYWxQcm9wc1snYXJpYS1kZXNjcmliZWRieSddID0gZGVzY3JpYmluZ0lkcy5qb2luKCcgJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICAgICAgdmFyIGZpZWxkID0gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZCwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgLy8gQWxsb3cgdGhlIGNoaWxkJ3MgZGlzYWJsZWQgb3IgaXNEaXNhYmxlZCBwcm9wIHRvIHN1cGVyY2VkZSB0aGUgYGlzRGlzYWJsZWRgXG4gICAgICAgIGRpc2FibGVkOiAoX3JlZjIgPSAoX2NoaWxkJHByb3BzJGRpc2FibGVkID0gY2hpbGQucHJvcHMuZGlzYWJsZWQpICE9PSBudWxsICYmIF9jaGlsZCRwcm9wcyRkaXNhYmxlZCAhPT0gdm9pZCAwID8gX2NoaWxkJHByb3BzJGRpc2FibGVkIDogY2hpbGQucHJvcHMuaXNEaXNhYmxlZCkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogaXNEaXNhYmxlZCxcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25CbHVyXG4gICAgICB9LCBvcHRpb25hbFByb3BzKSk7XG4gICAgICB2YXIgZmllbGRXcmFwcGVyQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Sb3dfX2ZpZWxkV3JhcHBlcicsIHtcbiAgICAgICAgZXVpRm9ybVJvd19fZmllbGRXcmFwcGVyRGlzcGxheU9ubHk6XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTYWZlIHVzZSBvZiAhIGFzIGRlZmF1bHQgcHJvcCBpcyAncm93J1xuICAgICAgICAgKi9cbiAgICAgICAgZGlzcGxheS5zdGFydHNXaXRoKCdjZW50ZXInKVxuICAgICAgfSk7XG4gICAgICB2YXIgc2hhcmVkUHJvcHMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1yb3dcIilcbiAgICAgIH07XG5cbiAgICAgIHZhciBjb250ZW50cyA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIG9wdGlvbmFsTGFiZWwsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IGZpZWxkV3JhcHBlckNsYXNzZXNcbiAgICAgIH0sIGZpZWxkLCBvcHRpb25hbEVycm9ycywgb3B0aW9uYWxIZWxwVGV4dHMpKTtcblxuICAgICAgcmV0dXJuIGxhYmVsVHlwZSA9PT0gJ2xlZ2VuZCcgPyBfX19FbW90aW9uSlNYKFwiZmllbGRzZXRcIiwgX2V4dGVuZHMoe30sIHNoYXJlZFByb3BzLCByZXN0KSwgY29udGVudHMpIDogX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgc2hhcmVkUHJvcHMsIHJlc3QpLCBjb250ZW50cyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUZvcm1Sb3c7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGb3JtUm93LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGRpc3BsYXk6ICdyb3cnLFxuICBoYXNFbXB0eUxhYmVsU3BhY2U6IGZhbHNlLFxuICBmdWxsV2lkdGg6IGZhbHNlLFxuICBkZXNjcmliZWRCeUlkczogW10sXG4gIGxhYmVsVHlwZTogJ2xhYmVsJyxcbiAgaGFzQ2hpbGRMYWJlbDogdHJ1ZVxufSk7XG5cbkV1aUZvcm1Sb3cucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBEZWZhdWx0cyB0byByZW5kZXJpbmcgYSBgPGxhYmVsPmAgYnV0IGlmIHBhc3NlZCBgJ2xlZ2VuZCdgIGZvciBsYWJlbFR5cGUsXG4gICAgICogd2lsbCByZW5kZXIgYm90aCBhIGA8bGVnZW5kPmAgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250YWluZXIgYXMgYSBgPGZpZWxkc2V0PmBcbiAgICAgKi9cbiAgbGFiZWxUeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wibGFiZWxcIl0pLCBQcm9wVHlwZXMub25lT2YoW1wibGVnZW5kXCJdKV0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogV2hlbiBgcm93Q29tcHJlc3NlZGAsIGp1c3QgdGlnaHRlbnMgdXAgdGhlIHNwYWNpbmc7XG4gICAgICogU2V0IHRvIGBjb2x1bW5Db21wcmVzc2VkYCBpZiBjb21wcmVzc2VkXG4gICAgICogYW5kIGhvcml6b250YWwgbGF5b3V0IGlzIG5lZWRlZC5cbiAgICAgKiBTZXQgdG8gYGNlbnRlcmAgb3IgYGNlbnRlckNvbXByZXNzZWRgIHRvIGFsaWduIG5vbi1pbnB1dFxuICAgICAqIGNvbnRlbnQgYmV0dGVyIHdpdGggaW5saW5lIHJvd3MuXG4gICAgICogU2V0IHRvIGBjb2x1bW5Db21wcmVzc2VkU3dpdGNoYCBpZiB0aGUgZm9ybSBjb250cm9sIGJlaW5nIHBhc3NlZFxuICAgICAqIGFzIHRoZSBjaGlsZCBpcyBhIHN3aXRjaC5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBXaGVuIGByb3dDb21wcmVzc2VkYCwganVzdCB0aWdodGVucyB1cCB0aGUgc3BhY2luZztcbiAgICAgKiBTZXQgdG8gYGNvbHVtbkNvbXByZXNzZWRgIGlmIGNvbXByZXNzZWRcbiAgICAgKiBhbmQgaG9yaXpvbnRhbCBsYXlvdXQgaXMgbmVlZGVkLlxuICAgICAqIFNldCB0byBgY2VudGVyYCBvciBgY2VudGVyQ29tcHJlc3NlZGAgdG8gYWxpZ24gbm9uLWlucHV0XG4gICAgICogY29udGVudCBiZXR0ZXIgd2l0aCBpbmxpbmUgcm93cy5cbiAgICAgKiBTZXQgdG8gYGNvbHVtbkNvbXByZXNzZWRTd2l0Y2hgIGlmIHRoZSBmb3JtIGNvbnRyb2wgYmVpbmcgcGFzc2VkXG4gICAgICogYXMgdGhlIGNoaWxkIGlzIGEgc3dpdGNoLlxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMub25lT2YoW1wicm93XCIsIFwicm93Q29tcHJlc3NlZFwiLCBcImNvbHVtbkNvbXByZXNzZWRcIiwgXCJjZW50ZXJcIiwgXCJjZW50ZXJDb21wcmVzc2VkXCIsIFwiY29sdW1uQ29tcHJlc3NlZFN3aXRjaFwiXSksXG4gIGhhc0VtcHR5TGFiZWxTcGFjZTogUHJvcFR5cGVzLmJvb2wsXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSURzIG9mIGFkZGl0aW9uYWwgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgcGFydCBvZiBjaGlsZHJlbidzIGBhcmlhLWRlc2NyaWJlZGJ5YFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIElEcyBvZiBhZGRpdGlvbmFsIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHBhcnQgb2YgY2hpbGRyZW4ncyBgYXJpYS1kZXNjcmliZWRieWBcbiAgICAgKi9cbiAgZGVzY3JpYmVkQnlJZHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCksXG5cbiAgLyoqXG4gICAgICogRXNjYXBlIGhhdGNoIHRvIG5vdCByZW5kZXIgZHVwbGljYXRlIGxhYmVscyBpZiB0aGUgY2hpbGQgYWxzbyByZW5kZXJzIGEgbGFiZWxcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBFc2NhcGUgaGF0Y2ggdG8gbm90IHJlbmRlciBkdXBsaWNhdGUgbGFiZWxzIGlmIHRoZSBjaGlsZCBhbHNvIHJlbmRlcnMgYSBsYWJlbFxuICAgICAqL1xuICBoYXNDaGlsZExhYmVsOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBSZWFjdEVsZW1lbnQgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogQWRkcyBhbiBleHRyYSBub2RlIHRvIHRoZSByaWdodCBvZiB0aGUgZm9ybSBsYWJlbCB3aXRob3V0XG4gICAgICogYmVpbmcgY29udGFpbmVkIGluc2lkZSB0aGUgZm9ybSBsYWJlbC4gR29vZCBmb3IgdGhpbmdzXG4gICAgICogbGlrZSBkb2N1bWVudGF0aW9uIGxpbmtzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFkZHMgYW4gZXh0cmEgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIGZvcm0gbGFiZWwgd2l0aG91dFxuICAgICAqIGJlaW5nIGNvbnRhaW5lZCBpbnNpZGUgdGhlIGZvcm0gbGFiZWwuIEdvb2QgZm9yIHRoaW5nc1xuICAgICAqIGxpa2UgZG9jdW1lbnRhdGlvbiBsaW5rcy5cbiAgICAgKi9cbiAgbGFiZWxBcHBlbmQ6IFByb3BUeXBlcy5hbnksXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBlcnJvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqICBBZGRzIGEgc2luZ2xlIG5vZGUvc3RyaW5nIG9yIGFuIGFycmF5IG9mIG5vZGVzL3N0cmluZ3MgYmVsb3cgdGhlIGlucHV0XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogIEFkZHMgYSBzaW5nbGUgbm9kZS9zdHJpbmcgb3IgYW4gYXJyYXkgb2Ygbm9kZXMvc3RyaW5ncyBiZWxvdyB0aGUgaW5wdXRcbiAgICAgKi9cbiAgaGVscFRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiAgUGFzc2VkIGFsb25nIHRvIHRoZSBsYWJlbCBlbGVtZW50OyBhbmQgdG8gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQgd2hlbiBgZGlzYWJsZWRgIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiB0aGUgY2hpbGQgZmllbGQgZWxlbWVudC5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiAgUGFzc2VkIGFsb25nIHRvIHRoZSBsYWJlbCBlbGVtZW50OyBhbmQgdG8gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQgd2hlbiBgZGlzYWJsZWRgIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiB0aGUgY2hpbGQgZmllbGQgZWxlbWVudC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwib25DbG9zZVwiLCBcInRpdGxlXCIsIFwib25IZWlnaHRDaGFuZ2VcIiwgXCJ0cmFuc2l0aW9uVHlwZVwiLCBcInRyYW5zaXRpb25EaXJlY3Rpb25cIiwgXCJvblRyYW5zaXRpb25Db21wbGV0ZVwiLCBcIm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlXCIsIFwiaXRlbXNcIiwgXCJpbml0aWFsRm9jdXNlZEl0ZW1JbmRleFwiLCBcInNob3dOZXh0UGFuZWxcIiwgXCJzaG93UHJldmlvdXNQYW5lbFwiLCBcInNpemVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB0YWJiYWJsZSB9IGZyb20gJ3RhYmJhYmxlJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlSZXNpemVPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyL3Jlc2l6ZV9vYnNlcnZlcic7XG5pbXBvcnQgeyBjYXNjYWRpbmdNZW51S2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSB9IGZyb20gJy4vY29udGV4dF9tZW51X2l0ZW0nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciB0aXRsZVNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgczogJ2V1aUNvbnRleHRNZW51UGFuZWxUaXRsZS0tc21hbGwnLFxuICBtOiBudWxsXG59O1xuZXhwb3J0IHZhciBTSVpFUyA9IGtleXNPZih0aXRsZVNpemVUb0NsYXNzTmFtZU1hcCk7XG52YXIgdHJhbnNpdGlvbkRpcmVjdGlvbkFuZFR5cGVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbmV4dDoge1xuICAgIGluOiAnZXVpQ29udGV4dE1lbnVQYW5lbC10eEluTGVmdCcsXG4gICAgb3V0OiAnZXVpQ29udGV4dE1lbnVQYW5lbC10eE91dExlZnQnXG4gIH0sXG4gIHByZXZpb3VzOiB7XG4gICAgaW46ICdldWlDb250ZXh0TWVudVBhbmVsLXR4SW5SaWdodCcsXG4gICAgb3V0OiAnZXVpQ29udGV4dE1lbnVQYW5lbC10eE91dFJpZ2h0J1xuICB9XG59O1xuZXhwb3J0IHZhciBFdWlDb250ZXh0TWVudVBhbmVsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb250ZXh0TWVudVBhbmVsLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUNvbnRleHRNZW51UGFuZWwpO1xuXG4gIGZ1bmN0aW9uIEV1aUNvbnRleHRNZW51UGFuZWwocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29udGV4dE1lbnVQYW5lbCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfaXNNb3VudGVkXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiYWNrQnV0dG9uXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBhbmVsXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluaXRpYWxQb3BvdmVyUGFyZW50XCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImZpbmRNZW51SXRlbXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGl0ZW1zO1xuXG4gICAgICBpZiAoIV90aGlzLnBhbmVsKSByZXR1cm47XG4gICAgICBpZiAoISgoX3RoaXMkcHJvcHMkaXRlbXMgPSBfdGhpcy5wcm9wcy5pdGVtcykgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkaXRlbXMgIT09IHZvaWQgMCAmJiBfdGhpcyRwcm9wcyRpdGVtcy5sZW5ndGgpKSByZXR1cm47IC8vIFdlIG9ubHkgbmVlZCBtZW51IGl0ZW1zL2Fycm93IGtleSBuYXZpZ2F0aW9uIGZvciB0aGUgYGl0ZW1zYCBBUElcblxuICAgICAgaWYgKF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHJldHVybjsgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIG1lbnUgaXRlbXMsIG5vIG5lZWQgdG8gY29udGludWVcblxuICAgICAgdmFyIHRhYmJhYmxlSXRlbXMgPSB0YWJiYWJsZShfdGhpcy5wYW5lbCk7XG5cbiAgICAgIGlmICh0YWJiYWJsZUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbWVudUl0ZW1zOiB0YWJiYWJsZUl0ZW1zXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImZvY3VzTWVudUl0ZW1cIiwgZnVuY3Rpb24gKGRpcmVjdGlvbikge1xuICAgICAgdmFyIF90aGlzJHN0YXRlJG1lbnVJdGVtcztcblxuICAgICAgdmFyIGluZGV4T2Zmc2V0ID0gZGlyZWN0aW9uID09PSAndXAnID8gLTEgOiAxO1xuICAgICAgdmFyIG5leHRGb2N1c2VkSXRlbUluZGV4O1xuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdXNlcidzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIG1lbnUsIHRoZW4gd2UnbGwgZm9jdXNcbiAgICAgICAgLy8gZWl0aGVyIHRoZSBmaXJzdCBvciBsYXN0IGl0ZW0uXG4gICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gZGlyZWN0aW9uID09PSAndXAnID8gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dEZvY3VzZWRJdGVtSW5kZXggPSBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ICsgaW5kZXhPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG5leHRGb2N1c2VkSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dEZvY3VzZWRJdGVtSW5kZXggPT09IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICBuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkSXRlbUluZGV4OiBuZXh0Rm9jdXNlZEl0ZW1JbmRleFxuICAgICAgfSk7XG5cbiAgICAgIChfdGhpcyRzdGF0ZSRtZW51SXRlbXMgPSBfdGhpcy5zdGF0ZS5tZW51SXRlbXNbbmV4dEZvY3VzZWRJdGVtSW5kZXhdKSA9PT0gbnVsbCB8fCBfdGhpcyRzdGF0ZSRtZW51SXRlbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHN0YXRlJG1lbnVJdGVtcy5mb2N1cygpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIElmIHRoaXMgcGFuZWwgY29udGFpbnMgaXRlbXMgeW91IGNhbiB1c2UgdGhlIGxlZnQgYXJyb3cga2V5IHRvIGdvIGJhY2sgYXQgYW55IHRpbWUuXG4gICAgICAvLyBCdXQgaWYgaXQgZG9lc24ndCBjb250YWluIGl0ZW1zLCB0aGVuIHlvdSBoYXZlIHRvIGZvY3VzIG9uIHRoZSBiYWNrIGJ1dHRvbiBzcGVjaWZpY2FsbHksXG4gICAgICAvLyBzaW5jZSB0aGVyZSBjb3VsZCBiZSBjb250ZW50IGluc2lkZSB0aGUgcGFuZWwgd2hpY2ggcmVxdWlyZXMgdXNlIG9mIHRoZSBsZWZ0IGFycm93IGtleSxcbiAgICAgIC8vIGUuZy4gdGV4dCBpbnB1dHMuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzLml0ZW1zLFxuICAgICAgICAgIG9uQ2xvc2UgPSBfdGhpcyRwcm9wcy5vbkNsb3NlLFxuICAgICAgICAgIHNob3dQcmV2aW91c1BhbmVsID0gX3RoaXMkcHJvcHMuc2hvd1ByZXZpb3VzUGFuZWw7XG5cbiAgICAgIGlmIChvbkNsb3NlICYmIChpdGVtcyAhPT0gbnVsbCAmJiBpdGVtcyAhPT0gdm9pZCAwICYmIGl0ZW1zLmxlbmd0aCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBfdGhpcy5iYWNrQnV0dG9uIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IF90aGlzLnBhbmVsKSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBjYXNjYWRpbmdNZW51S2V5cy5BUlJPV19MRUZUKSB7XG4gICAgICAgICAgaWYgKHNob3dQcmV2aW91c1BhbmVsKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBzaG93UHJldmlvdXNQYW5lbCgpO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1zICE9PSBudWxsICYmIGl0ZW1zICE9PSB2b2lkIDAgJiYgaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgY2FzZSBjYXNjYWRpbmdNZW51S2V5cy5UQUI6XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBOT1RFOiBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlzIHN0YWxlIGlmIG5vdCB3cmFwcGVkIGluIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgICAgICAgICB2YXIgZm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpOyAvLyBXZSBuZWVkIHRvIHN5bmMgb3VyIGludGVybmFsIHN0YXRlIHdpdGggdGhlIHVzZXIgdGFiYmluZyB0aHJvdWdoIGl0ZW1zXG5cblxuICAgICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDogZm9jdXNlZEl0ZW1JbmRleCA+PSAwICYmIGZvY3VzZWRJdGVtSW5kZXggPCBfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoID8gZm9jdXNlZEl0ZW1JbmRleCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIGNhc2NhZGluZ01lbnVLZXlzLkFSUk9XX1VQOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgX3RoaXMuZm9jdXNNZW51SXRlbSgndXAnKTtcblxuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBjYXNjYWRpbmdNZW51S2V5cy5BUlJPV19ET1dOOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgX3RoaXMuZm9jdXNNZW51SXRlbSgnZG93bicpO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIGNhc2NhZGluZ01lbnVLZXlzLkFSUk9XX1JJR0hUOlxuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLnNob3dOZXh0UGFuZWwpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5zaG93TmV4dFBhbmVsKG9uQ2xvc2UgJiYgX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCA/IF90aGlzLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggLSAxIC8vIEFjY291bnQgZm9yIHBhbmVsIHRpdGxlIGJhY2sgYnV0dG9uXG4gICAgICAgICAgICAgIDogX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCk7XG5cbiAgICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlY2xhaW1Qb3BvdmVyRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB3YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXI6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMudGFrZUluaXRpYWxGb2N1cygpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uVHJhbnNpdGlvbkNvbXBsZXRlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vblRyYW5zaXRpb25Db21wbGV0ZSkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vblRyYW5zaXRpb25Db21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBhbmVsUmVmXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5wYW5lbCA9IG5vZGU7XG5cbiAgICAgIF90aGlzLnVwZGF0ZUhlaWdodCgpO1xuXG4gICAgICBfdGhpcy5nZXRJbml0aWFsUG9wb3ZlclBhcmVudCgpO1xuXG4gICAgICBfdGhpcy5maW5kTWVudUl0ZW1zKCk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHByZXZQcm9wczoge1xuICAgICAgICBpdGVtczogX3RoaXMucHJvcHMuaXRlbXNcbiAgICAgIH0sXG4gICAgICBtZW51SXRlbXM6IFtdLFxuICAgICAgZm9jdXNlZEl0ZW1JbmRleDogcHJvcHMub25DbG9zZSAmJiBwcm9wcy5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCAhPSBudWxsID8gcHJvcHMuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXggKyAxIC8vIEFjY291bnQgZm9yIHBhbmVsIHRpdGxlIGJhY2sgYnV0dG9uXG4gICAgICA6IHByb3BzLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4LFxuICAgICAgY3VycmVudEhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgd2FpdGluZ0ZvckluaXRpYWxQb3BvdmVyOiBmYWxzZSxcbiAgICAgIHRvb2tJbml0aWFsRm9jdXM6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH0gLy8gRmluZCBhbGwgdGFiYmFibGUgbWVudSBpdGVtcyBvbiBib3RoIHBhbmVsIGluaXQgYW5kXG4gIC8vIHdoZW5ldmVyIGBtZW51SXRlbXNgIHJlc2V0cyB3aGVuIGBwcm9wcy5pdGVtc2AgY2hhbmdlc1xuXG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUNvbnRleHRNZW51UGFuZWwsIFt7XG4gICAga2V5OiBcInRha2VJbml0aWFsRm9jdXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdGFrZUluaXRpYWxGb2N1cygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBHaXZlIHBvc2l0aW9uaW5nIHRpbWUgdG8gcmVuZGVyIGJlZm9yZSBmb2N1cyBpcyBhcHBsaWVkLiBPdGhlcndpc2UgcGFnZSBqdW1wcy5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMyLl9pc01vdW50ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gRG9uJ3QgdGFrZSBmb2N1cyB5ZXQgaWYgRXVpQ29udGV4dE1lbnUgaXMgaW4gYSBwb3BvdmVyXG4gICAgICAgIC8vIGFuZCB0aGUgcG9wb3ZlciBpcyBpbml0aWFsbHkgb3BlbmluZy90cmFuc2l0aW9uaW5nIGluXG5cblxuICAgICAgICBpZiAoX3RoaXMyLmluaXRpYWxQb3BvdmVyUGFyZW50ICYmIF90aGlzMi5zdGF0ZS53YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU2V0dGluZyBmb2N1cyB3aGlsZSB0cmFuc2l0aW9uaW5nIGNhdXNlcyB0aGUgYW5pbWF0aW9uIHRvIGdsaXRjaCwgc28gd2UgaGF2ZSB0byB3YWl0XG4gICAgICAgIC8vIHVudGlsIGl0J3MgZmluaXNoZWQgYmVmb3JlIHdlIGZvY3VzIGFueXRoaW5nLlxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5wcm9wcy50cmFuc2l0aW9uVHlwZSkge1xuICAgICAgICAgIHZhciBfdGhpczIkcGFuZWw7XG5cbiAgICAgICAgICAvLyBJZiB0aGUgcGFuZWwgaXMgdHJhbnNpdGlvbmluZywgc2V0IGZvY3VzIHRvIHRoZSBwYW5lbCBzbyB0aGF0IHVzZXJzIHVzaW5nXG4gICAgICAgICAgLy8gYXJyb3cga2V5cyB0aGF0IGFyZSBmYXN0IGNsaWNrZXJzIGRvbid0IGFjY2lkZW50YWxseSBnZXQgc3RyYW5kZWQgZm9jdXNcbiAgICAgICAgICAvLyBvciB0cmlnZ2VyIGtleXN0cm9rZXMgd2hlbiBpdCBzaG91bGRuJ3RcbiAgICAgICAgICAoX3RoaXMyJHBhbmVsID0gX3RoaXMyLnBhbmVsKSA9PT0gbnVsbCB8fCBfdGhpczIkcGFuZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzMiRwYW5lbC5mb2N1cyh7XG4gICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIEluaXRpYWwgZm9jdXMgaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLCBubyBuZWVkIHRvIGNvbnRpbnVlIGFuZCBwb3RlbnRpYWxseSBoaWphY2svZm9jdXMgZmlnaHRcblxuXG4gICAgICAgIGlmIChfdGhpczIuc3RhdGUudG9va0luaXRpYWxGb2N1cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBJZiBhbiBpdGVtIHNob3VsZCBiZSBmb2N1c2VkLCBmb2N1cyBpdCAoaWYgaXQgZXhpc3RzKVxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ICE9IG51bGwgJiYgX3RoaXMyLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZm9jdXNlZEl0ZW0gPSBfdGhpczIuc3RhdGUubWVudUl0ZW1zW190aGlzMi5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4XTtcblxuICAgICAgICAgIGlmIChmb2N1c2VkSXRlbSkge1xuICAgICAgICAgICAgZm9jdXNlZEl0ZW0uZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gT3RoZXJ3aXNlLCBpZiB0aGUgYmFjayBidXR0b24gcGFuZWwgdGl0bGUgaXMgcHJlc2VudCwgZm9jdXMgaXRcblxuXG4gICAgICAgIGlmIChfdGhpczIuYmFja0J1dHRvbikge1xuICAgICAgICAgIC8vIEZvY3VzIHRoZSBiYWNrIGJ1dHRvbiBmb3IgYm90aCBgaXRlbXNgIGFuZCBgY2hpbGRyZW5gIEFQSXNcbiAgICAgICAgICBfdGhpczIuYmFja0J1dHRvbi5mb2N1cygpOyAvLyBJZiBgaXRlbXNgLCBlbnN1cmUgb3VyIGZvY3VzZWQgaXRlbSBpbmRleCBpcyBjb3JyZWN0XG5cblxuICAgICAgICAgIGlmIChfdGhpczIuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gLy8gRm9jdXMgb24gdGhlIHBhbmVsIGFzIGEgbGFzdCByZXNvcnQuXG5cblxuICAgICAgICBpZiAoX3RoaXMyLnBhbmVsICYmICFfdGhpczIucGFuZWwuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICBfdGhpczIucGFuZWwuZm9jdXMoKTtcblxuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKF8sIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS5tZW51SXRlbXMgIT09IHRoaXMuc3RhdGUubWVudUl0ZW1zKSB7XG4gICAgICAgIHRoaXMuZmluZE1lbnVJdGVtcygpO1xuICAgICAgfSAvLyBGb2N1cyBpc24ndCBhbHdheXMgcmVhZHkgdG8gYmUgdGFrZW4gb24gbW91bnQsIHNvIHdlIG5lZWQgdG8gY2FsbCBpdFxuICAgICAgLy8gb24gdXBkYXRlIGFzIHdlbGwganVzdCBpbiBjYXNlXG5cblxuICAgICAgdGhpcy50YWtlSW5pdGlhbEZvY3VzKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgLy8gSWYgRXVpQ29udGV4dE1lbnUgaXMgdXNlZCB3aXRoaW4gYW4gRXVpUG9wb3Zlciwgd2UgbmVlZCB0byB3YWl0IGZvciBFdWlQb3BvdmVyIHRvOlxuICAgICAgLy8gMS4gQ29ycmVjdGx5IHNldCBpdHMgYHJldHVybkZvY3VzYCB0byB0aGUgdG9nZ2xpbmcgYnV0dG9uLFxuICAgICAgLy8gICAgc28gZm9jdXMgaXMgY29ycmVjdGx5IHJlc3RvcmVkIHRvIHRoZSBwb3BvdmVyIHRvZ2dsZSBvbiBjbG9zZVxuICAgICAgLy8gMi4gRmluaXNoIGl0cyByZWFjdC1mb2N1cy1vbiBgYXV0b0ZvY3VzYCBiZWhhdmlvciBhZnRlciB0cmFuc2l0aW9uaW5nIGluLFxuICAgICAgLy8gICAgc28gdGhlIHBhbmVsIGNhbiBoYW5kbGUgaXRzIG93biBmb2N1cyB3aXRob3V0IGZvY3VzIGZpZ2h0aW5nXG4gICAgICBpZiAodGhpcy5pbml0aWFsUG9wb3ZlclBhcmVudCkge1xuICAgICAgICB0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5yZWNsYWltUG9wb3ZlckZvY3VzLCB7XG4gICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFrZUluaXRpYWxGb2N1cygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRpbml0aWFsUG9wb3ZlclA7XG5cbiAgICAgIChfdGhpcyRpbml0aWFsUG9wb3ZlclAgPSB0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyRpbml0aWFsUG9wb3ZlclAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGluaXRpYWxQb3BvdmVyUC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMucmVjbGFpbVBvcG92ZXJGb2N1cyk7XG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXBkYXRlSGVpZ2h0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZUhlaWdodCgpIHtcbiAgICAgIHZhciBjdXJyZW50SGVpZ2h0ID0gdGhpcy5wYW5lbCA/IHRoaXMucGFuZWwuY2xpZW50SGVpZ2h0IDogMDtcblxuICAgICAgaWYgKHRoaXMuc3RhdGUuaGVpZ2h0ICE9PSBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uSGVpZ2h0Q2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vbkhlaWdodENoYW5nZShjdXJyZW50SGVpZ2h0KTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGhlaWdodDogY3VycmVudEhlaWdodFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEluaXRpYWxQb3BvdmVyUGFyZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEluaXRpYWxQb3BvdmVyUGFyZW50KCkge1xuICAgICAgdmFyIF9wYXJlbnQkcGFyZW50Tm9kZTtcblxuICAgICAgLy8gSWYgYHRyYW5zaXRpb25UeXBlYCBleGlzdHMsIHRoYXQgbWVhbnMgd2UncmUgbmF2aWdhdGluZyBiZXR3ZWVuIHBhbmVsc1xuICAgICAgLy8gYW5kIHRoZSBpbml0aWFsIHBvcG92ZXIgaGFzIGFscmVhZHkgbG9hZGVkLCBzbyB3ZSBzaG91bGRuJ3QgbmVlZCB0aGlzIGxvZ2ljXG4gICAgICBpZiAodGhpcy5wcm9wcy50cmFuc2l0aW9uVHlwZSkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLnBhbmVsKSByZXR1cm47XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYW5lbC5wYXJlbnROb2RlO1xuICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgICAgIHZhciBoYXNFdWlDb250ZXh0TWVudVBhcmVudCA9IHBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aUNvbnRleHRNZW51Jyk7IC8vIEl0J3MgcG9zc2libGUgdG8gdXNlIGFuIEV1aUNvbnRleHRNZW51UGFuZWwgZGlyZWN0bHkgaW4gYSBwb3BvdmVyIHdpdGhvdXRcbiAgICAgIC8vIGFuIEV1aUNvbnRleHRNZW51LCBzbyB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQgd2hlbiBzZWFyY2hpbmcgcGFyZW50IG5vZGVzXG5cbiAgICAgIHZhciBwb3BvdmVyUGFyZW50ID0gaGFzRXVpQ29udGV4dE1lbnVQYXJlbnQgPyBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3BhcmVudCRwYXJlbnROb2RlID0gcGFyZW50LnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9wYXJlbnQkcGFyZW50Tm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BhcmVudCRwYXJlbnROb2RlLnBhcmVudE5vZGUgOiBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgIGlmICghcG9wb3ZlclBhcmVudCkgcmV0dXJuO1xuICAgICAgdmFyIGhhc1BvcG92ZXJQYXJlbnQgPSAhIXBvcG92ZXJQYXJlbnQuZGF0YXNldC5wb3BvdmVyUGFuZWw7XG4gICAgICBpZiAoIWhhc1BvcG92ZXJQYXJlbnQpIHJldHVybjtcbiAgICAgIHRoaXMuaW5pdGlhbFBvcG92ZXJQYXJlbnQgPSBwb3BvdmVyUGFyZW50O1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHdhaXRpbmdGb3JJbml0aWFsUG9wb3ZlcjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczIuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgICBvbkNsb3NlID0gX3RoaXMkcHJvcHMyLm9uQ2xvc2UsXG4gICAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wczIudGl0bGUsXG4gICAgICAgICAgb25IZWlnaHRDaGFuZ2UgPSBfdGhpcyRwcm9wczIub25IZWlnaHRDaGFuZ2UsXG4gICAgICAgICAgdHJhbnNpdGlvblR5cGUgPSBfdGhpcyRwcm9wczIudHJhbnNpdGlvblR5cGUsXG4gICAgICAgICAgdHJhbnNpdGlvbkRpcmVjdGlvbiA9IF90aGlzJHByb3BzMi50cmFuc2l0aW9uRGlyZWN0aW9uLFxuICAgICAgICAgIG9uVHJhbnNpdGlvbkNvbXBsZXRlID0gX3RoaXMkcHJvcHMyLm9uVHJhbnNpdGlvbkNvbXBsZXRlLFxuICAgICAgICAgIG9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlID0gX3RoaXMkcHJvcHMyLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMyLml0ZW1zLFxuICAgICAgICAgIGluaXRpYWxGb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMkcHJvcHMyLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4LFxuICAgICAgICAgIHNob3dOZXh0UGFuZWwgPSBfdGhpcyRwcm9wczIuc2hvd05leHRQYW5lbCxcbiAgICAgICAgICBzaG93UHJldmlvdXNQYW5lbCA9IF90aGlzJHByb3BzMi5zaG93UHJldmlvdXNQYW5lbCxcbiAgICAgICAgICBzaXplID0gX3RoaXMkcHJvcHMyLnNpemUsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBwYW5lbFRpdGxlO1xuXG4gICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgdmFyIHRpdGxlQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbnRleHRNZW51UGFuZWxUaXRsZScsIHNpemUgJiYgdGl0bGVTaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0pO1xuXG4gICAgICAgIGlmIChCb29sZWFuKG9uQ2xvc2UpKSB7XG4gICAgICAgICAgcGFuZWxUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiB0aXRsZUNsYXNzZXMsXG4gICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgb25DbGljazogb25DbG9zZSxcbiAgICAgICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMzLmJhY2tCdXR0b24gPSBub2RlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjb250ZXh0TWVudVBhbmVsVGl0bGVCdXR0b25cIlxuICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9faXRlbUxheW91dFwiXG4gICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgICB0eXBlOiBcImFycm93TGVmdFwiLFxuICAgICAgICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX2ljb25cIlxuICAgICAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX3RleHRcIlxuICAgICAgICAgIH0sIHRpdGxlKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhbmVsVGl0bGUgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogdGl0bGVDbGFzc2VzXG4gICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19pdGVtTGF5b3V0XCJcbiAgICAgICAgICB9LCB0aXRsZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29udGV4dE1lbnVQYW5lbCcsIGNsYXNzTmFtZSwgdHJhbnNpdGlvbkRpcmVjdGlvbiAmJiB0cmFuc2l0aW9uVHlwZSAmJiB0cmFuc2l0aW9uRGlyZWN0aW9uQW5kVHlwZVRvQ2xhc3NOYW1lTWFwW3RyYW5zaXRpb25EaXJlY3Rpb25dID8gdHJhbnNpdGlvbkRpcmVjdGlvbkFuZFR5cGVUb0NsYXNzTmFtZU1hcFt0cmFuc2l0aW9uRGlyZWN0aW9uXVt0cmFuc2l0aW9uVHlwZV0gOiB1bmRlZmluZWQpO1xuICAgICAgdmFyIGNvbnRlbnQgPSBpdGVtcyAmJiBpdGVtcy5sZW5ndGggPyBpdGVtcy5tYXAoZnVuY3Rpb24gKE1lbnVJdGVtKSB7XG4gICAgICAgIHZhciBjbG9uZVByb3BzID0ge307XG5cbiAgICAgICAgaWYgKHNpemUpIHtcbiAgICAgICAgICBjbG9uZVByb3BzLnNpemUgPSBzaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE1lbnVJdGVtLnR5cGUgPT09IEV1aUNvbnRleHRNZW51SXRlbSA/IC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoTWVudUl0ZW0sIGNsb25lUHJvcHMpIDogTWVudUl0ZW07XG4gICAgICB9KSA6IGNoaWxkcmVuO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IHRoaXMucGFuZWxSZWYsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICBvbkFuaW1hdGlvbkVuZDogdGhpcy5vblRyYW5zaXRpb25Db21wbGV0ZVxuICAgICAgfSwgcmVzdCksIHBhbmVsVGl0bGUsIF9fX0Vtb3Rpb25KU1goRXVpUmVzaXplT2JzZXJ2ZXIsIHtcbiAgICAgICAgb25SZXNpemU6IGZ1bmN0aW9uIG9uUmVzaXplKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMudXBkYXRlSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGZ1bmN0aW9uIChyZXNpemVSZWYpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIHJlZjogcmVzaXplUmVmXG4gICAgICAgIH0sIGNvbnRlbnQpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhciBuZWVkc1VwZGF0ZSA9IGZhbHNlO1xuICAgICAgdmFyIG5leHRTdGF0ZSA9IHt9OyAvLyBDbGVhciByZWZzIHRvIG1lbnVJdGVtcyBpZiB3ZSdyZSBnZXR0aW5nIG5ldyBvbmVzLlxuXG4gICAgICBpZiAobmV4dFByb3BzLml0ZW1zICE9PSBwcmV2U3RhdGUucHJldlByb3BzLml0ZW1zKSB7XG4gICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgbmV4dFN0YXRlLm1lbnVJdGVtcyA9IFtdO1xuICAgICAgICBuZXh0U3RhdGUucHJldlByb3BzID0ge1xuICAgICAgICAgIGl0ZW1zOiBuZXh0UHJvcHMuaXRlbXNcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZWRzVXBkYXRlKSB7XG4gICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb250ZXh0TWVudVBhbmVsO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ29udGV4dE1lbnVQYW5lbCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpdGVtczogW11cbn0pO1xuXG5FdWlDb250ZXh0TWVudVBhbmVsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpbml0aWFsRm9jdXNlZEl0ZW1JbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQpLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25IZWlnaHRDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblRyYW5zaXRpb25Db21wbGV0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2hvd05leHRQYW5lbDogUHJvcFR5cGVzLmZ1bmMsXG4gIHNob3dQcmV2aW91c1BhbmVsOiBQcm9wVHlwZXMuZnVuYyxcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICB0cmFuc2l0aW9uRGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wibmV4dFwiLCBcInByZXZpb3VzXCJdKSxcbiAgdHJhbnNpdGlvblR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJpblwiLCBcIm91dFwiXSksXG5cbiAgLyoqXG4gICAgICogQWx0ZXJzIHRoZSBzaXplIG9mIHRoZSBpdGVtcyBhbmQgdGhlIHRpdGxlXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImhhc1BhbmVsXCIsIFwiaWNvblwiLCBcImJ1dHRvblJlZlwiLCBcImRpc2FibGVkXCIsIFwibGF5b3V0QWxpZ25cIiwgXCJ0b29sVGlwVGl0bGVcIiwgXCJ0b29sVGlwQ29udGVudFwiLCBcInRvb2xUaXBQb3NpdGlvblwiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgc2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBzOiAnZXVpQ29udGV4dE1lbnVJdGVtLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG52YXIgbGF5b3V0QWxpZ25Ub0NsYXNzTmFtZXMgPSB7XG4gIGNlbnRlcjogbnVsbCxcbiAgdG9wOiAnZXVpQ29udGV4dE1lbnVfX2l0ZW1MYXlvdXQtLXRvcCcsXG4gIGJvdHRvbTogJ2V1aUNvbnRleHRNZW51X19pdGVtTGF5b3V0LS1ib3R0b20nXG59O1xuZXhwb3J0IHZhciBMQVlPVVRfQUxJR04gPSBrZXlzT2YobGF5b3V0QWxpZ25Ub0NsYXNzTmFtZXMpO1xuZXhwb3J0IHZhciBFdWlDb250ZXh0TWVudUl0ZW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbnRleHRNZW51SXRlbSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlDb250ZXh0TWVudUl0ZW0pO1xuXG4gIGZ1bmN0aW9uIEV1aUNvbnRleHRNZW51SXRlbSgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29udGV4dE1lbnVJdGVtKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb250ZXh0TWVudUl0ZW0sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGhhc1BhbmVsID0gX3RoaXMkcHJvcHMuaGFzUGFuZWwsXG4gICAgICAgICAgaWNvbiA9IF90aGlzJHByb3BzLmljb24sXG4gICAgICAgICAgYnV0dG9uUmVmID0gX3RoaXMkcHJvcHMuYnV0dG9uUmVmLFxuICAgICAgICAgIF9kaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIF90aGlzJHByb3BzJGxheW91dEFsaSA9IF90aGlzJHByb3BzLmxheW91dEFsaWduLFxuICAgICAgICAgIGxheW91dEFsaWduID0gX3RoaXMkcHJvcHMkbGF5b3V0QWxpID09PSB2b2lkIDAgPyAnY2VudGVyJyA6IF90aGlzJHByb3BzJGxheW91dEFsaSxcbiAgICAgICAgICB0b29sVGlwVGl0bGUgPSBfdGhpcyRwcm9wcy50b29sVGlwVGl0bGUsXG4gICAgICAgICAgdG9vbFRpcENvbnRlbnQgPSBfdGhpcyRwcm9wcy50b29sVGlwQ29udGVudCxcbiAgICAgICAgICBfdGhpcyRwcm9wcyR0b29sVGlwUG8gPSBfdGhpcyRwcm9wcy50b29sVGlwUG9zaXRpb24sXG4gICAgICAgICAgdG9vbFRpcFBvc2l0aW9uID0gX3RoaXMkcHJvcHMkdG9vbFRpcFBvID09PSB2b2lkIDAgPyAncmlnaHQnIDogX3RoaXMkcHJvcHMkdG9vbFRpcFBvLFxuICAgICAgICAgIGhyZWYgPSBfdGhpcyRwcm9wcy5ocmVmLFxuICAgICAgICAgIHRhcmdldCA9IF90aGlzJHByb3BzLnRhcmdldCxcbiAgICAgICAgICByZWwgPSBfdGhpcyRwcm9wcy5yZWwsXG4gICAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzLnNpemUsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGljb25JbnN0YW5jZTtcbiAgICAgIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgICAgIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG5cbiAgICAgIGlmIChpY29uKSB7XG4gICAgICAgIHN3aXRjaCAoX3R5cGVvZihpY29uKSkge1xuICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBpY29uSW5zdGFuY2UgPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICAgICAgdHlwZTogaWNvbixcbiAgICAgICAgICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9faWNvblwiLFxuICAgICAgICAgICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEFzc3VtZSBpdCdzIGFscmVhZHkgYW4gaW5zdGFuY2Ugb2YgYW4gaWNvbi5cbiAgICAgICAgICAgIGljb25JbnN0YW5jZSA9IC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoaWNvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdldWlDb250ZXh0TWVudV9faWNvbidcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBhcnJvdztcblxuICAgICAgaWYgKGhhc1BhbmVsKSB7XG4gICAgICAgIGFycm93ID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgdHlwZTogXCJhcnJvd1JpZ2h0XCIsXG4gICAgICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19hcnJvd1wiXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbnRleHRNZW51SXRlbScsIHNpemUgJiYgc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdLCBjbGFzc05hbWUsIHtcbiAgICAgICAgJ2V1aUNvbnRleHRNZW51SXRlbS1pc0Rpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH0pO1xuICAgICAgdmFyIGxheW91dENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb250ZXh0TWVudV9faXRlbUxheW91dCcsIGxheW91dEFsaWduVG9DbGFzc05hbWVzW2xheW91dEFsaWduXSk7XG5cbiAgICAgIHZhciBidXR0b25Jbm5lciA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBsYXlvdXRDbGFzc2VzXG4gICAgICB9LCBpY29uSW5zdGFuY2UsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51SXRlbV9fdGV4dFwiXG4gICAgICB9LCBjaGlsZHJlbiksIGFycm93KTtcblxuICAgICAgdmFyIGJ1dHRvbjsgLy8gPGE+IGVsZW1lbnRzIGRvbid0IHJlc3BlY3QgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLiBTbyBpZiB3ZSdyZSBkaXNhYmxlZCwgd2UnbGwganVzdCBwcmV0ZW5kXG4gICAgICAvLyB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG5cbiAgICAgIGlmIChocmVmICYmICFkaXNhYmxlZCkge1xuICAgICAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgIHJlbDogcmVsXG4gICAgICAgIH0pO1xuICAgICAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgICAgICAgcmVmOiBidXR0b25SZWZcbiAgICAgICAgfSwgcmVzdCksIGJ1dHRvbklubmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICByZWY6IGJ1dHRvblJlZlxuICAgICAgICB9LCByZXN0KSwgYnV0dG9uSW5uZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9vbFRpcENvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgICAgICAgIHRpdGxlOiB0b29sVGlwVGl0bGUgPyB0b29sVGlwVGl0bGUgOiBudWxsLFxuICAgICAgICAgIGNvbnRlbnQ6IHRvb2xUaXBDb250ZW50LFxuICAgICAgICAgIGFuY2hvckNsYXNzTmFtZTogXCJldWktZGlzcGxheUJsb2NrXCIsXG4gICAgICAgICAgcG9zaXRpb246IHRvb2xUaXBQb3NpdGlvblxuICAgICAgICB9LCBidXR0b24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJ1dHRvbjtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpQ29udGV4dE1lbnVJdGVtO1xufShDb21wb25lbnQpO1xuRXVpQ29udGV4dE1lbnVJdGVtLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICBoYXNQYW5lbDogUHJvcFR5cGVzLmJvb2wsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBSZXF1aXJlZCBpZiB1c2luZyBhIHRvb2x0aXAuIEFkZCBhbiBvcHRpb25hbCB0b29sdGlwIG9uIGhvdmVyXG4gICAgICovXG4gIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBPcHRpb25hbCB0aXRsZSBmb3IgdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgdG9vbFRpcFRpdGxlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBEaWN0YXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAuXG4gICAgICovXG4gIHRvb2xUaXBQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEhvdyB0byBhbGlnbiBpY29uIHdpdGggY29udGVudCBvZiBidXR0b25cbiAgICAgKi9cbiAgbGF5b3V0QWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJjZW50ZXJcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0pLFxuXG4gIC8qKlxuICAgICAqIFJlZHVjZSB0aGUgc2l6ZSB0byBgc2Agd2hlbiBpbiBuZWVkIG9mIGEgbW9yZSBjb21wcmVzc2VkIG1lbnVcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInNpemVcIiwgXCJtYXJnaW5cIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUhvcml6b250YWxSdWxlU3R5bGVzIH0gZnJvbSAnLi9ob3Jpem9udGFsX3J1bGUuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydmdWxsJywgJ2hhbGYnLCAncXVhcnRlciddO1xuZXhwb3J0IHZhciBNQVJHSU5TID0gWydub25lJywgJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xudmFyIG1hcmdpblRvQ2xhc3NOYW1lTWFwID0ge1xuICBub25lOiBudWxsLFxuICB4czogJ21hcmdpblhTbWFsbCcsXG4gIHM6ICdtYXJnaW5TbWFsbCcsXG4gIG06ICdtYXJnaW5NZWRpdW0nLFxuICBsOiAnbWFyZ2luTGFyZ2UnLFxuICB4bDogJ21hcmdpblhMYXJnZScsXG4gIHh4bDogJ21hcmdpblhYTGFyZ2UnXG59O1xuZXhwb3J0IHZhciBFdWlIb3Jpem9udGFsUnVsZSA9IGZ1bmN0aW9uIEV1aUhvcml6b250YWxSdWxlKF9yZWYpIHtcbiAgdmFyIF9jbGFzc05hbWVzO1xuXG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdmdWxsJyA6IF9yZWYkc2l6ZSxcbiAgICAgIF9yZWYkbWFyZ2luID0gX3JlZi5tYXJnaW4sXG4gICAgICBtYXJnaW4gPSBfcmVmJG1hcmdpbiA9PT0gdm9pZCAwID8gJ2wnIDogX3JlZiRtYXJnaW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUhvcml6b250YWxSdWxlU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlIb3Jpem9udGFsUnVsZScsIChfY2xhc3NOYW1lcyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzTmFtZXMsIFwiZXVpSG9yaXpvbnRhbFJ1bGUtLVwiLmNvbmNhdChzaXplKSwgc2l6ZSksIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3NOYW1lcywgXCJldWlIb3Jpem9udGFsUnVsZS0tXCIuY29uY2F0KG1hcmdpblRvQ2xhc3NOYW1lTWFwW21hcmdpbl0pLCBtYXJnaW4gJiYgbWFyZ2luICE9PSAnbm9uZScpLCBfY2xhc3NOYW1lcyksIGNsYXNzTmFtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUhvcml6b250YWxSdWxlLCBzdHlsZXNbc2l6ZV0sIHN0eWxlc1ttYXJnaW5dXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJoclwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpKTtcbn07XG5FdWlIb3Jpem9udGFsUnVsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBIUi5cbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgbWFyZ2luOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlIb3Jpem9udGFsUnVsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUhvcml6b250YWxSdWxlU3R5bGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlIb3Jpem9udGFsUnVsZTogLyojX19QVVJFX18qL2NzcyhcImJvcmRlcjpub25lO1wiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiksIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmJvcmRlci5jb2xvciwgXCI7ZmxleC1zaHJpbms6MDtmbGV4LWdyb3c6MDs7bGFiZWw6ZXVpSG9yaXpvbnRhbFJ1bGU7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgZnVsbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsO1wiKSxcbiAgICBoYWxmOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzUwJScpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLWhvcml6b250YWwnLCAnYXV0bycpLCBcIjs7bGFiZWw6aGFsZjtcIiksXG4gICAgcXVhcnRlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcyNSUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ob3Jpem9udGFsJywgJ2F1dG8nKSwgXCI7O2xhYmVsOnF1YXJ0ZXI7XCIpLFxuICAgIC8vIE1hcmdpbnNcbiAgICBub25lOiAnJyxcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUubSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLnhsLCBcIjs7bGFiZWw6eGw7XCIpLFxuICAgIHh4bDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wibGFiZWxcIiwgXCJpZFwiLCBcImNoZWNrZWRcIiwgXCJkaXNhYmxlZFwiLCBcImNvbXByZXNzZWRcIiwgXCJvbkNoYW5nZVwiLCBcImNsYXNzTmFtZVwiLCBcInNob3dMYWJlbFwiLCBcInR5cGVcIiwgXCJsYWJlbFByb3BzXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVN3aXRjaCA9IGZ1bmN0aW9uIEV1aVN3aXRjaChfcmVmKSB7XG4gIHZhciBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgICBpZCA9IF9yZWYuaWQsXG4gICAgICBjaGVja2VkID0gX3JlZi5jaGVja2VkLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICAgIG9uQ2hhbmdlID0gX3JlZi5vbkNoYW5nZSxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRzaG93TGFiZWwgPSBfcmVmLnNob3dMYWJlbCxcbiAgICAgIHNob3dMYWJlbCA9IF9yZWYkc2hvd0xhYmVsID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzaG93TGFiZWwsXG4gICAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYkdHlwZSxcbiAgICAgIGxhYmVsUHJvcHMgPSBfcmVmLmxhYmVsUHJvcHMsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHN3aXRjaElkID0gdXNlR2VuZXJhdGVkSHRtbElkKHtcbiAgICBjb25kaXRpb25hbElkOiBpZFxuICB9KTtcbiAgdmFyIGxhYmVsSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoe1xuICAgIGNvbmRpdGlvbmFsSWQ6IGxhYmVsUHJvcHMgPT09IG51bGwgfHwgbGFiZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFiZWxQcm9wcy5pZFxuICB9KTtcbiAgdmFyIG9uQ2xpY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZSkge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBldmVudCA9IGU7XG4gICAgZXZlbnQudGFyZ2V0LmNoZWNrZWQgPSAhY2hlY2tlZDtcbiAgICBvbkNoYW5nZShldmVudCk7XG4gIH0sIFtjaGVja2VkLCBkaXNhYmxlZCwgb25DaGFuZ2VdKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTd2l0Y2gnLCB7XG4gICAgJ2V1aVN3aXRjaC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWRcbiAgfSwgY2xhc3NOYW1lKTtcbiAgdmFyIGxhYmVsQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVN3aXRjaF9fbGFiZWwnLCBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuY2xhc3NOYW1lKTtcblxuICBpZiAoc2hvd0xhYmVsID09PSBmYWxzZSAmJiB0eXBlb2YgbGFiZWwgIT09ICdzdHJpbmcnKSB7XG4gICAgY29uc29sZS53YXJuKCdFdWlTd2l0Y2ggYGxhYmVsYCBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gYHNob3dMYWJlbGAgaXMgZmFsc2UuJyk7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIGlkOiBzd2l0Y2hJZCxcbiAgICBcImFyaWEtY2hlY2tlZFwiOiBjaGVja2VkIHx8IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2J1dHRvblwiLFxuICAgIHJvbGU6IFwic3dpdGNoXCIsXG4gICAgdHlwZTogdHlwZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBcImFyaWEtbGFiZWxcIjogc2hvd0xhYmVsID8gdW5kZWZpbmVkIDogbGFiZWwsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogc2hvd0xhYmVsID8gbGFiZWxJZCA6IHVuZGVmaW5lZFxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2JvZHlcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9fdGh1bWJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX3RyYWNrXCJcbiAgfSwgIWNvbXByZXNzZWQgJiYgX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJjcm9zc1wiLFxuICAgIHNpemU6IFwibVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2ljb25cIlxuICB9KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJjaGVja1wiLFxuICAgIHNpemU6IFwibVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2ljb24gZXVpU3dpdGNoX19pY29uLS1jaGVja2VkXCJcbiAgfSkpKSkpLCBzaG93TGFiZWwgJiYgLy8gPGJ1dHRvbj4gKyA8bGFiZWw+IGhhcyBwb29yIHNjcmVlbiByZWFkZXIgc3VwcG9ydC5cbiAgLy8gQ2xpY2sgaGFuZGxlciBhZGRlZCB0byBzaW11bGF0ZSBuYXR1cmFsLCBzZWNvbmRhcnkgPGxhYmVsPiBpbnRlcmFjdGl2aXR5LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvbm8tbm9uaW50ZXJhY3RpdmUtZWxlbWVudC1pbnRlcmFjdGlvbnNcbiAgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe30sIGxhYmVsUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGxhYmVsQ2xhc3NlcyxcbiAgICBpZDogbGFiZWxJZCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrXG4gIH0pLCBsYWJlbCkpO1xufTtcbkV1aVN3aXRjaC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSByZW5kZXIgdGhlIHRleHQgbGFiZWxcbiAgICAgICAqL1xuICBzaG93TGFiZWw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogTXVzdCBiZSBhIHN0cmluZyBpZiBgc2hvd0xhYmVsYCBwcm9wIGlzIGZhbHNlXG4gICAgICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wic3VibWl0XCIsIFwicmVzZXRcIiwgXCJidXR0b25cIl0pLFxuXG4gIC8qKlxuICAgICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgbGFiZWwncyA8c3Bhbi8+XG4gICAgICAgKi9cbiAgbGFiZWxQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pXG59OyIsICJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbmV4cG9ydCB7IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgYXMgZGVmYXVsdCB9OyIsICJ2YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBsYXN0VGhpcztcbiAgICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgICB2YXIgbGFzdFJlc3VsdDtcbiAgICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgICAgICB2YXIgbmV3QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3QXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsZWRPbmNlICYmIGxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgbGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhbGxlZE9uY2UgPSB0cnVlO1xuICAgICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICAgIGxhc3RBcmdzID0gbmV3QXJncztcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBtZW1vaXplZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZU9uZTtcbiIsICJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmIChlLmluY2x1ZGVzKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCAiLy8gQGZsb3dcblxuLy8gQW5pbWF0aW9uIGZyYW1lIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNldFRpbWVvdXQuXG4vLyBJbnNwaXJlZCBieSBKb2UgTGFtYmVydCwgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vam9lbGFtYmVydC8xMDAyMTE2I2ZpbGUtcmVxdWVzdHRpbWVvdXQtanNcblxuY29uc3QgaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3cgPVxuICB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmNvbnN0IG5vdyA9IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93XG4gID8gKCkgPT4gcGVyZm9ybWFuY2Uubm93KClcbiAgOiAoKSA9PiBEYXRlLm5vdygpO1xuXG5leHBvcnQgdHlwZSBUaW1lb3V0SUQgPSB7fFxuICBpZDogQW5pbWF0aW9uRnJhbWVJRCxcbnx9O1xuXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsVGltZW91dCh0aW1lb3V0SUQ6IFRpbWVvdXRJRCkge1xuICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lb3V0SUQuaWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQoY2FsbGJhY2s6IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyKTogVGltZW91dElEIHtcbiAgY29uc3Qgc3RhcnQgPSBub3coKTtcblxuICBmdW5jdGlvbiB0aWNrKCkge1xuICAgIGlmIChub3coKSAtIHN0YXJ0ID49IGRlbGF5KSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lb3V0SUQuaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGltZW91dElEOiBUaW1lb3V0SUQgPSB7XG4gICAgaWQ6IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKSxcbiAgfTtcblxuICByZXR1cm4gdGltZW91dElEO1xufVxuIiwgIi8vIEBmbG93XG5cbmxldCBzaXplOiBudW1iZXIgPSAtMTtcblxuLy8gVGhpcyB1dGlsaXR5IGNvcGllZCBmcm9tIFwiZG9tLWhlbHBlcnNcIiBwYWNrYWdlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcm9sbGJhclNpemUocmVjYWxjdWxhdGU/OiBib29sZWFuID0gZmFsc2UpOiBudW1iZXIge1xuICBpZiAoc2l6ZSA9PT0gLTEgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBzdHlsZSA9IGRpdi5zdHlsZTtcbiAgICBzdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBzdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5hcHBlbmRDaGlsZChkaXYpO1xuXG4gICAgc2l6ZSA9IGRpdi5vZmZzZXRXaWR0aCAtIGRpdi5jbGllbnRXaWR0aDtcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5yZW1vdmVDaGlsZChkaXYpO1xuICB9XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCB0eXBlIFJUTE9mZnNldFR5cGUgPVxuICB8ICduZWdhdGl2ZSdcbiAgfCAncG9zaXRpdmUtZGVzY2VuZGluZydcbiAgfCAncG9zaXRpdmUtYXNjZW5kaW5nJztcblxubGV0IGNhY2hlZFJUTFJlc3VsdDogUlRMT2Zmc2V0VHlwZSB8IG51bGwgPSBudWxsO1xuXG4vLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4vLyBDaHJvbWUgZG9lcyBub3Qgc2VlbSB0byBhZGhlcmU7IGl0cyBzY3JvbGxMZWZ0IHZhbHVlcyBhcmUgcG9zaXRpdmUgKG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbi8vIFNhZmFyaSdzIGVsYXN0aWMgYm91bmNlIG1ha2VzIGRldGVjdGluZyB0aGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCB3cnQgcG90ZW50aWFsIGZhbHNlIHBvc2l0aXZlcy5cbi8vIFRoZSBzYWZlc3Qgd2F5IHRvIGNoZWNrIHRoaXMgaXMgdG8gaW50ZW50aW9uYWxseSBzZXQgYSBuZWdhdGl2ZSBvZmZzZXQsXG4vLyBhbmQgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgc3Vic2VxdWVudCBcInNjcm9sbFwiIGV2ZW50IG1hdGNoZXMgdGhlIG5lZ2F0aXZlIG9mZnNldC5cbi8vIElmIGl0IGRvZXMgbm90IG1hdGNoLCB0aGVuIHdlIGNhbiBhc3N1bWUgYSBub24tc3RhbmRhcmQgUlRMIHNjcm9sbCBpbXBsZW1lbnRhdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSVExPZmZzZXRUeXBlKHJlY2FsY3VsYXRlPzogYm9vbGVhbiA9IGZhbHNlKTogUlRMT2Zmc2V0VHlwZSB7XG4gIGlmIChjYWNoZWRSVExSZXN1bHQgPT09IG51bGwgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICBjb25zdCBvdXRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IG91dGVyU3R5bGUgPSBvdXRlckRpdi5zdHlsZTtcbiAgICBvdXRlclN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBvdXRlclN0eWxlLmRpcmVjdGlvbiA9ICdydGwnO1xuXG4gICAgY29uc3QgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBpbm5lclN0eWxlID0gaW5uZXJEaXYuc3R5bGU7XG4gICAgaW5uZXJTdHlsZS53aWR0aCA9ICcxMDBweCc7XG4gICAgaW5uZXJTdHlsZS5oZWlnaHQgPSAnMTAwcHgnO1xuXG4gICAgb3V0ZXJEaXYuYXBwZW5kQ2hpbGQoaW5uZXJEaXYpO1xuXG4gICAgKChkb2N1bWVudC5ib2R5OiBhbnkpOiBIVE1MQm9keUVsZW1lbnQpLmFwcGVuZENoaWxkKG91dGVyRGl2KTtcblxuICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID4gMCkge1xuICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRlckRpdi5zY3JvbGxMZWZ0ID0gMTtcbiAgICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID09PSAwKSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICduZWdhdGl2ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtYXNjZW5kaW5nJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAoKGRvY3VtZW50LmJvZHk6IGFueSk6IEhUTUxCb2R5RWxlbWVudCkucmVtb3ZlQ2hpbGQob3V0ZXJEaXYpO1xuXG4gICAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG59XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNhbmNlbFRpbWVvdXQsIHJlcXVlc3RUaW1lb3V0IH0gZnJvbSAnLi90aW1lcic7XG5pbXBvcnQgeyBnZXRTY3JvbGxiYXJTaXplLCBnZXRSVExPZmZzZXRUeXBlIH0gZnJvbSAnLi9kb21IZWxwZXJzJztcblxuaW1wb3J0IHR5cGUgeyBUaW1lb3V0SUQgfSBmcm9tICcuL3RpbWVyJztcblxudHlwZSBEaXJlY3Rpb24gPSAnbHRyJyB8ICdydGwnO1xuZXhwb3J0IHR5cGUgU2Nyb2xsVG9BbGlnbiA9ICdhdXRvJyB8ICdzbWFydCcgfCAnY2VudGVyJyB8ICdzdGFydCcgfCAnZW5kJztcblxudHlwZSBpdGVtU2l6ZSA9IG51bWJlciB8ICgoaW5kZXg6IG51bWJlcikgPT4gbnVtYmVyKTtcblxudHlwZSBSZW5kZXJDb21wb25lbnRQcm9wczxUPiA9IHt8XG4gIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gIGRhdGE6IFQsXG4gIGlzU2Nyb2xsaW5nPzogYm9vbGVhbixcbiAgcm93SW5kZXg6IG51bWJlcixcbiAgc3R5bGU6IE9iamVjdCxcbnx9O1xuZXhwb3J0IHR5cGUgUmVuZGVyQ29tcG9uZW50PFQ+ID0gUmVhY3QkQ29tcG9uZW50VHlwZTxcbiAgJFNoYXBlPFJlbmRlckNvbXBvbmVudFByb3BzPFQ+PlxuPjtcblxudHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuXG50eXBlIE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrID0gKHtcbiAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhblJvd1N0b3BJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVSb3dTdGFydEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVSb3dTdG9wSW5kZXg6IG51bWJlcixcbn0pID0+IHZvaWQ7XG50eXBlIE9uU2Nyb2xsQ2FsbGJhY2sgPSAoe1xuICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbiAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbn0pID0+IHZvaWQ7XG5cbnR5cGUgU2Nyb2xsRXZlbnQgPSBTeW50aGV0aWNFdmVudDxIVE1MRGl2RWxlbWVudD47XG50eXBlIEl0ZW1TdHlsZUNhY2hlID0geyBba2V5OiBzdHJpbmddOiBPYmplY3QgfTtcblxudHlwZSBPdXRlclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIGNsYXNzTmFtZTogc3RyaW5nIHwgdm9pZCxcbiAgb25TY3JvbGw6IFNjcm9sbEV2ZW50ID0+IHZvaWQsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbnR5cGUgSW5uZXJQcm9wcyA9IHt8XG4gIGNoaWxkcmVuOiBSZWFjdCROb2RlLFxuICBzdHlsZToge1xuICAgIFtzdHJpbmddOiBtaXhlZCxcbiAgfSxcbnx9O1xuXG5leHBvcnQgdHlwZSBQcm9wczxUPiA9IHt8XG4gIGNoaWxkcmVuOiBSZW5kZXJDb21wb25lbnQ8VD4sXG4gIGNsYXNzTmFtZT86IHN0cmluZyxcbiAgY29sdW1uQ291bnQ6IG51bWJlcixcbiAgY29sdW1uV2lkdGg6IGl0ZW1TaXplLFxuICBkaXJlY3Rpb246IERpcmVjdGlvbixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGluaXRpYWxTY3JvbGxMZWZ0PzogbnVtYmVyLFxuICBpbml0aWFsU2Nyb2xsVG9wPzogbnVtYmVyLFxuICBpbm5lclJlZj86IGFueSxcbiAgaW5uZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PElubmVyUHJvcHMsIGFueT4sXG4gIGlubmVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBpdGVtRGF0YTogVCxcbiAgaXRlbUtleT86IChwYXJhbXM6IHt8XG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBkYXRhOiBULFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gIHx9KSA9PiBhbnksXG4gIG9uSXRlbXNSZW5kZXJlZD86IE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrLFxuICBvblNjcm9sbD86IE9uU2Nyb2xsQ2FsbGJhY2ssXG4gIG91dGVyUmVmPzogYW55LFxuICBvdXRlckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8T3V0ZXJQcm9wcywgYW55PixcbiAgb3V0ZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ29sdW1uQ291bnQ/OiBudW1iZXIsXG4gIG92ZXJzY2FuQ29sdW1uc0NvdW50PzogbnVtYmVyLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ291bnQ/OiBudW1iZXIsIC8vIGRlcHJlY2F0ZWRcbiAgb3ZlcnNjYW5Sb3dDb3VudD86IG51bWJlcixcbiAgb3ZlcnNjYW5Sb3dzQ291bnQ/OiBudW1iZXIsIC8vIGRlcHJlY2F0ZWRcbiAgcm93Q291bnQ6IG51bWJlcixcbiAgcm93SGVpZ2h0OiBpdGVtU2l6ZSxcbiAgc3R5bGU/OiBPYmplY3QsXG4gIHVzZUlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICB3aWR0aDogbnVtYmVyLFxufH07XG5cbnR5cGUgU3RhdGUgPSB7fFxuICBpbnN0YW5jZTogYW55LFxuICBpc1Njcm9sbGluZzogYm9vbGVhbixcbiAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG4gIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG58fTtcblxudHlwZSBnZXRJdGVtT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgZ2V0SXRlbVNpemUgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlUHJvcHM6IGFueSkgPT4gbnVtYmVyO1xudHlwZSBHZXRPZmZzZXRGb3JJdGVtQW5kQWxpZ25tZW50ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnksXG4gIHNjcm9sbGJhclNpemU6IG51bWJlclxuKSA9PiBudW1iZXI7XG50eXBlIEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBvZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEluaXRJbnN0YW5jZVByb3BzID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KSA9PiBhbnk7XG50eXBlIFZhbGlkYXRlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4pID0+IHZvaWQ7XG5cbmNvbnN0IElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxuY29uc3QgZGVmYXVsdEl0ZW1LZXkgPSAoeyBjb2x1bW5JbmRleCwgZGF0YSwgcm93SW5kZXggfSkgPT5cbiAgYCR7cm93SW5kZXh9OiR7Y29sdW1uSW5kZXh9YDtcblxuLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5sZXQgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbnVsbDtcbmxldCBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG5ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lID0gbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBnZXRDb2x1bW5XaWR0aCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50LFxuICBnZXRSb3dIZWlnaHQsXG4gIGdldFJvd09mZnNldCxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gIHZhbGlkYXRlUHJvcHMsXG59OiB7fFxuICBnZXRDb2x1bW5PZmZzZXQ6IGdldEl0ZW1PZmZzZXQsXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGdldENvbHVtbldpZHRoOiBnZXRJdGVtU2l6ZSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IEdldE9mZnNldEZvckl0ZW1BbmRBbGlnbm1lbnQsXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogR2V0T2Zmc2V0Rm9ySXRlbUFuZEFsaWdubWVudCxcbiAgZ2V0Um93T2Zmc2V0OiBnZXRJdGVtT2Zmc2V0LFxuICBnZXRSb3dIZWlnaHQ6IGdldEl0ZW1TaXplLFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wczogSW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGJvb2xlYW4sXG4gIHZhbGlkYXRlUHJvcHM6IFZhbGlkYXRlUHJvcHMsXG58fSkge1xuICByZXR1cm4gY2xhc3MgR3JpZDxUPiBleHRlbmRzIFB1cmVDb21wb25lbnQ8UHJvcHM8VD4sIFN0YXRlPiB7XG4gICAgX2luc3RhbmNlUHJvcHM6IGFueSA9IGluaXRJbnN0YW5jZVByb3BzKHRoaXMucHJvcHMsIHRoaXMpO1xuICAgIF9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkOiBUaW1lb3V0SUQgfCBudWxsID0gbnVsbDtcbiAgICBfb3V0ZXJSZWY6ID9IVE1MRGl2RWxlbWVudDtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgc3RhdGU6IFN0YXRlID0ge1xuICAgICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICBzY3JvbGxMZWZ0OlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnRcbiAgICAgICAgICA6IDAsXG4gICAgICBzY3JvbGxUb3A6XG4gICAgICAgIHR5cGVvZiB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInXG4gICAgICAgICAgPyB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3BcbiAgICAgICAgICA6IDAsXG4gICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICB9O1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxUPikge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFByb3BzPFQ+LFxuICAgICAgcHJldlN0YXRlOiBTdGF0ZVxuICAgICk6ICRTaGFwZTxTdGF0ZT4gfCBudWxsIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG8oe1xuICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcCxcbiAgICB9OiB7XG4gICAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICB9KTogdm9pZCB7XG4gICAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzY3JvbGxUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gcHJldlN0YXRlLnNjcm9sbExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsVG9wID0gcHJldlN0YXRlLnNjcm9sbFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJlxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWUsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsVG9wIDwgc2Nyb2xsVG9wID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH1cblxuICAgIHNjcm9sbFRvSXRlbSh7XG4gICAgICBhbGlnbiA9ICdhdXRvJyxcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgcm93SW5kZXgsXG4gICAgfToge1xuICAgICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgICBjb2x1bW5JbmRleD86IG51bWJlcixcbiAgICAgIHJvd0luZGV4PzogbnVtYmVyLFxuICAgIH0pOiB2b2lkIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uQ291bnQsIGhlaWdodCwgcm93Q291bnQsIHdpZHRoIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gZ2V0U2Nyb2xsYmFyU2l6ZSgpO1xuXG4gICAgICBpZiAoY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb2x1bW5JbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkluZGV4LCBjb2x1bW5Db3VudCAtIDEpKTtcbiAgICAgIH1cbiAgICAgIGlmIChyb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvd0luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93SW5kZXgsIHJvd0NvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldyxcbiAgICAgIC8vIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuICAgICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbGJhclNpemUgPVxuICAgICAgICBlc3RpbWF0ZWRUb3RhbFdpZHRoID4gd2lkdGggPyBzY3JvbGxiYXJTaXplIDogMDtcbiAgICAgIGNvbnN0IHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgIGVzdGltYXRlZFRvdGFsSGVpZ2h0ID4gaGVpZ2h0ID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG8oe1xuICAgICAgICBzY3JvbGxMZWZ0OlxuICAgICAgICAgIGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgYWxpZ24sXG4gICAgICAgICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFRvcDpcbiAgICAgICAgICByb3dJbmRleCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgIGFsaWduLFxuICAgICAgICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzLFxuICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJTaXplXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogc2Nyb2xsVG9wLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IGluaXRpYWxTY3JvbGxMZWZ0LCBpbml0aWFsU2Nyb2xsVG9wIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvdXRlclJlZiA9ICgodGhpcy5fb3V0ZXJSZWY6IGFueSk6IEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxUb3A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbExlZnQsIHNjcm9sbFRvcCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGgsIHNjcm9sbFdpZHRoIH0gPSBvdXRlclJlZjtcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHNjcm9sbExlZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBpbm5lclJlZixcbiAgICAgICAgaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgaW5uZXJUYWdOYW1lLFxuICAgICAgICBpdGVtRGF0YSxcbiAgICAgICAgaXRlbUtleSA9IGRlZmF1bHRJdGVtS2V5LFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICBvdXRlclRhZ05hbWUsXG4gICAgICAgIHJvd0NvdW50LFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgdXNlSXNTY3JvbGxpbmcsXG4gICAgICAgIHdpZHRoLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGlzU2Nyb2xsaW5nIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBjb25zdCBbXG4gICAgICAgIGNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgIGNvbHVtblN0b3BJbmRleCxcbiAgICAgIF0gPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpO1xuICAgICAgY29uc3QgW3Jvd1N0YXJ0SW5kZXgsIHJvd1N0b3BJbmRleF0gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKTtcblxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgIGlmIChjb2x1bW5Db3VudCA+IDAgJiYgcm93Q291bnQpIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBsZXQgcm93SW5kZXggPSByb3dTdGFydEluZGV4O1xuICAgICAgICAgIHJvd0luZGV4IDw9IHJvd1N0b3BJbmRleDtcbiAgICAgICAgICByb3dJbmRleCsrXG4gICAgICAgICkge1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBsZXQgY29sdW1uSW5kZXggPSBjb2x1bW5TdGFydEluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXggPD0gY29sdW1uU3RvcEluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXgrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGtleTogaXRlbUtleSh7IGNvbHVtbkluZGV4LCBkYXRhOiBpdGVtRGF0YSwgcm93SW5kZXggfSksXG4gICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShyb3dJbmRleCwgY29sdW1uSW5kZXgpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cbiAgICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIG9uU2Nyb2xsOiB0aGlzLl9vblNjcm9sbCxcbiAgICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGhlaWdodDogZXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHdpZHRoOiBlc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkOiAoXG4gICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVSb3dTdG9wSW5kZXg6IG51bWJlclxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoXG4gICAgICAoXG4gICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4OiBudW1iZXJcbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZDogYW55KTogT25JdGVtc1JlbmRlcmVkQ2FsbGJhY2spKHtcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxPblNjcm9sbDogKFxuICAgICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25TY3JvbGw6IGFueSk6IE9uU2Nyb2xsQ2FsbGJhY2spKHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uQ291bnQsIG9uSXRlbXNSZW5kZXJlZCwgb25TY3JvbGwsIHJvd0NvdW50IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIG9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50ID4gMCkge1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpO1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKFxuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoXG4gICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIF9nZXRJdGVtU3R5bGU6IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiBPYmplY3Q7XG4gICAgX2dldEl0ZW1TdHlsZSA9IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogT2JqZWN0ID0+IHtcbiAgICAgIGNvbnN0IHsgY29sdW1uV2lkdGgsIGRpcmVjdGlvbiwgcm93SGVpZ2h0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBpdGVtU3R5bGVDYWNoZSA9IHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGNvbHVtbldpZHRoLFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbixcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiByb3dIZWlnaHRcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fToke2NvbHVtbkluZGV4fWA7XG5cbiAgICAgIGxldCBzdHlsZTtcbiAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGdldENvbHVtbk9mZnNldChcbiAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICBpdGVtU3R5bGVDYWNoZVtrZXldID0gc3R5bGUgPSB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBvZmZzZXQsXG4gICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0IDogdW5kZWZpbmVkLFxuICAgICAgICAgIHRvcDogZ2V0Um93T2Zmc2V0KHRoaXMucHJvcHMsIHJvd0luZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICBoZWlnaHQ6IGdldFJvd0hlaWdodCh0aGlzLnByb3BzLCByb3dJbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgd2lkdGg6IGdldENvbHVtbldpZHRoKHRoaXMucHJvcHMsIGNvbHVtbkluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH07XG5cbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGU6IChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiBJdGVtU3R5bGVDYWNoZTtcbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiAoe30pKTtcblxuICAgIF9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgICAgb3ZlcnNjYW5Db3VudCxcbiAgICAgICAgcm93Q291bnQsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiwgaXNTY3JvbGxpbmcsIHNjcm9sbExlZnQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQ291bnRSZXNvbHZlZDogbnVtYmVyID1cbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5Db3VudCB8fCBvdmVyc2NhbkNvbHVtbnNDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0b3BJbmRleCA9IGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcbiAgICAgIGNvbnN0IG92ZXJzY2FuRm9yd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc3RvcEluZGV4LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgIG92ZXJzY2FuQ291bnQsXG4gICAgICAgIG92ZXJzY2FuUm93Q291bnQsXG4gICAgICAgIG92ZXJzY2FuUm93c0NvdW50LFxuICAgICAgICByb3dDb3VudCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZywgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sIHNjcm9sbFRvcCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgY29uc3Qgb3ZlcnNjYW5Db3VudFJlc29sdmVkOiBudW1iZXIgPVxuICAgICAgICBvdmVyc2NhblJvd0NvdW50IHx8IG92ZXJzY2FuUm93c0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG4gICAgICBjb25zdCBvdmVyc2NhbkZvcndhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLFxuICAgICAgICBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzdG9wSW5kZXgsXG4gICAgICBdO1xuICAgIH1cblxuICAgIF9vblNjcm9sbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgICAgICBjbGllbnRXaWR0aCxcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgfSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJlxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuICAgICAgICBsZXQgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oY2FsY3VsYXRlZFNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRTY3JvbGxUb3AgPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogY2FsY3VsYXRlZFNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBjYWxjdWxhdGVkU2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb3V0ZXJSZWZTZXR0ZXIgPSAocmVmOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgb3V0ZXJSZWYgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIHRoaXMuX291dGVyUmVmID0gKChyZWY6IGFueSk6IEhUTUxEaXZFbGVtZW50KTtcblxuICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgb3V0ZXJSZWYgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmXG4gICAgICAgIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JylcbiAgICAgICkge1xuICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChcbiAgICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZyxcbiAgICAgICAgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXNTY3JvbGxpbmc6IGZhbHNlIH0sICgpID0+IHtcbiAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG5jb25zdCB2YWxpZGF0ZVNoYXJlZFByb3BzID0gKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgZGlyZWN0aW9uLFxuICAgIGhlaWdodCxcbiAgICBpbm5lclRhZ05hbWUsXG4gICAgb3V0ZXJUYWdOYW1lLFxuICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgIG92ZXJzY2FuQ291bnQsXG4gICAgb3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgd2lkdGgsXG4gIH06IFByb3BzPGFueT4sXG4gIHsgaW5zdGFuY2UgfTogU3RhdGVcbik6IHZvaWQgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2Ygb3ZlcnNjYW5Db3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBvdmVyc2NhbkNvdW50IHByb3AgaGFzIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3ZlcnNjYW5Db2x1bW5zQ291bnQgPT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlb2Ygb3ZlcnNjYW5Sb3dzQ291bnQgPT09ICdudW1iZXInXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ICYmXG4gICAgICAgICFkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5oYXMoaW5zdGFuY2UpXG4gICAgICApIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgb3ZlcnNjYW5Db2x1bW5zQ291bnQgYW5kIG92ZXJzY2FuUm93c0NvdW50IHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICtcbiAgICAgICAgICBgXCIke2NoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICtcbiAgICAgICAgICAgIGBcIiR7ZGlyZWN0aW9ufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArXG4gICAgICAgICAgYFwiJHt3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICtcbiAgICAgICAgICBgXCIke2hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH1cbiAgfVxufTtcbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgY3JlYXRlR3JpZENvbXBvbmVudCBmcm9tICcuL2NyZWF0ZUdyaWRDb21wb25lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzLCBTY3JvbGxUb0FsaWduIH0gZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuY29uc3QgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFID0gNTA7XG5cbnR5cGUgVmFyaWFibGVTaXplUHJvcHMgPSB7fFxuICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogbnVtYmVyLFxuICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IG51bWJlcixcbiAgLi4uUHJvcHM8YW55Pixcbnx9O1xuXG50eXBlIGl0ZW1TaXplR2V0dGVyID0gKGluZGV4OiBudW1iZXIpID0+IG51bWJlcjtcbnR5cGUgSXRlbVR5cGUgPSAnY29sdW1uJyB8ICdyb3cnO1xuXG50eXBlIEl0ZW1NZXRhZGF0YSA9IHt8XG4gIG9mZnNldDogbnVtYmVyLFxuICBzaXplOiBudW1iZXIsXG58fTtcbnR5cGUgSXRlbU1ldGFkYXRhTWFwID0geyBbaW5kZXg6IG51bWJlcl06IEl0ZW1NZXRhZGF0YSB9O1xudHlwZSBJbnN0YW5jZVByb3BzID0ge3xcbiAgY29sdW1uTWV0YWRhdGFNYXA6IEl0ZW1NZXRhZGF0YU1hcCxcbiAgZXN0aW1hdGVkQ29sdW1uV2lkdGg6IG51bWJlcixcbiAgZXN0aW1hdGVkUm93SGVpZ2h0OiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4OiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZFJvd0luZGV4OiBudW1iZXIsXG4gIHJvd01ldGFkYXRhTWFwOiBJdGVtTWV0YWRhdGFNYXAsXG58fTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQgPSAoXG4gIHsgcm93Q291bnQgfTogUHJvcHM8YW55PixcbiAgeyByb3dNZXRhZGF0YU1hcCwgZXN0aW1hdGVkUm93SGVpZ2h0LCBsYXN0TWVhc3VyZWRSb3dJbmRleCB9OiBJbnN0YW5jZVByb3BzXG4pID0+IHtcbiAgbGV0IHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDtcblxuICAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gcm93Q291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IHJvd0NvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSAwKSB7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gcm93TWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkUm93SW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gcm93Q291bnQgLSBsYXN0TWVhc3VyZWRSb3dJbmRleCAtIDE7XG4gIGNvbnN0IHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkUm93SGVpZ2h0O1xuXG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCA9IChcbiAgeyBjb2x1bW5Db3VudCB9OiBQcm9wczxhbnk+LFxuICB7XG4gICAgY29sdW1uTWV0YWRhdGFNYXAsXG4gICAgZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgsXG4gIH06IEluc3RhbmNlUHJvcHNcbikgPT4ge1xuICBsZXQgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwO1xuXG4gIC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSBjb2x1bW5Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gY29sdW1uQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IDApIHtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBjb2x1bW5NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRDb2x1bW5JbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICBjb25zdCBudW1Vbm1lYXN1cmVkSXRlbXMgPSBjb2x1bW5Db3VudCAtIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4IC0gMTtcbiAgY29uc3QgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRDb2x1bW5XaWR0aDtcblxuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IGdldEl0ZW1NZXRhZGF0YSA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuKTogSXRlbU1ldGFkYXRhID0+IHtcbiAgbGV0IGl0ZW1NZXRhZGF0YU1hcCwgaXRlbVNpemUsIGxhc3RNZWFzdXJlZEluZGV4O1xuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9ICgocHJvcHMuY29sdW1uV2lkdGg6IGFueSk6IGl0ZW1TaXplR2V0dGVyKTtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9ICgocHJvcHMucm93SGVpZ2h0OiBhbnkpOiBpdGVtU2l6ZUdldHRlcik7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIGxldCBzaXplID0gaXRlbVNpemUoaSk7XG5cbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBzaXplLFxuICAgICAgfTtcblxuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW0gPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIG9mZnNldDogbnVtYmVyXG4pID0+IHtcbiAgbGV0IGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXg7XG4gIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGNvbnN0IGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPVxuICAgIGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCxcbiAgICAgIDAsXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIGhpZ2g6IG51bWJlcixcbiAgbG93OiBudW1iZXIsXG4gIG9mZnNldDogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICBpdGVtVHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgbWlkZGxlLFxuICAgICAgaW5zdGFuY2VQcm9wc1xuICAgICkub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgaW5kZXg6IG51bWJlcixcbiAgb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IGl0ZW1Db3VudCA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLmNvbHVtbkNvdW50IDogcHJvcHMucm93Q291bnQ7XG4gIGxldCBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKFxuICAgIGluZGV4IDwgaXRlbUNvdW50ICYmXG4gICAgZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldFxuICApIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICBpdGVtVHlwZSxcbiAgICBwcm9wcyxcbiAgICBpbnN0YW5jZVByb3BzLFxuICAgIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSxcbiAgICBNYXRoLmZsb29yKGluZGV4IC8gMiksXG4gICAgb2Zmc2V0XG4gICk7XG59O1xuXG5jb25zdCBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IHNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy53aWR0aCA6IHByb3BzLmhlaWdodDtcbiAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuXG4gIC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG4gIGNvbnN0IGVzdGltYXRlZFRvdGFsU2l6ZSA9XG4gICAgaXRlbVR5cGUgPT09ICdjb2x1bW4nXG4gICAgICA/IGdldEVzdGltYXRlZFRvdGFsV2lkdGgocHJvcHMsIGluc3RhbmNlUHJvcHMpXG4gICAgICA6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHByb3BzLCBpbnN0YW5jZVByb3BzKTtcblxuICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1heChcbiAgICAwLFxuICAgIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpXG4gICk7XG4gIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgIDAsXG4gICAgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBzY3JvbGxiYXJTaXplICsgaXRlbU1ldGFkYXRhLnNpemVcbiAgKTtcblxuICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAoYWxpZ24pIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgfVxuICB9XG59O1xuXG5jb25zdCBWYXJpYWJsZVNpemVHcmlkID0gY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCxcblxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGZpbmROZWFyZXN0SXRlbSgnY29sdW1uJywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbExlZnQpLFxuXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IGNvbHVtbkNvdW50LCB3aWR0aCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICAnY29sdW1uJyxcbiAgICAgIHByb3BzLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbExlZnQgKyB3aWR0aDtcblxuICAgIGxldCBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgbGV0IHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgY29sdW1uQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG5cbiAgZ2V0Q29sdW1uV2lkdGg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXBbaW5kZXhdLnNpemUsXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG5cbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChcbiAgICAgICdjb2x1bW4nLFxuICAgICAgcHJvcHMsXG4gICAgICBpbmRleCxcbiAgICAgIGFsaWduLFxuICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIHNjcm9sbGJhclNpemVcbiAgICApLFxuXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAncm93JyxcbiAgICAgIHByb3BzLFxuICAgICAgaW5kZXgsXG4gICAgICBhbGlnbixcbiAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBzY3JvbGxiYXJTaXplXG4gICAgKSxcblxuICBnZXRSb3dPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQsXG5cbiAgZ2V0Um93SGVpZ2h0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwW2luZGV4XS5zaXplLFxuXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBmaW5kTmVhcmVzdEl0ZW0oJ3JvdycsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxUb3ApLFxuXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHsgcm93Q291bnQsIGhlaWdodCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICAncm93JyxcbiAgICAgIHByb3BzLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbFRvcCArIGhlaWdodDtcblxuICAgIGxldCBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgbGV0IHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgcm93Q291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG5cbiAgaW5pdEluc3RhbmNlUHJvcHMocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpOiBJbnN0YW5jZVByb3BzIHtcbiAgICBjb25zdCB7XG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICAgIGVzdGltYXRlZFJvd0hlaWdodCxcbiAgICB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGNvbHVtbk1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoOiBlc3RpbWF0ZWRDb2x1bW5XaWR0aCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IGVzdGltYXRlZFJvd0hlaWdodCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogLTEsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleDogLTEsXG4gICAgICByb3dNZXRhZGF0YU1hcDoge30sXG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJDb2x1bW5JbmRleCA9IChcbiAgICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZT86IGJvb2xlYW4gPSB0cnVlXG4gICAgKSA9PiB7XG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7IGNvbHVtbkluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlclJvd0luZGV4ID0gKFxuICAgICAgcm93SW5kZXg6IG51bWJlcixcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlPzogYm9vbGVhbiA9IHRydWVcbiAgICApID0+IHtcbiAgICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzKHsgcm93SW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlIH0pO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyA9ICh7XG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlLFxuICAgIH06IHtcbiAgICAgIGNvbHVtbkluZGV4PzogbnVtYmVyLFxuICAgICAgcm93SW5kZXg/OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZTogYm9vbGVhbixcbiAgICB9KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbkluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleCAtIDFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygcm93SW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4LFxuICAgICAgICAgIHJvd0luZGV4IC0gMVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcblxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBjb2x1bW5XaWR0aCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7XG4gICAgICAgICAgICAgIGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoXG4gICAgICAgICAgICB9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgK1xuICAgICAgICAgICAgYFwiJHtyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWYXJpYWJsZVNpemVHcmlkO1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjYW5jZWxUaW1lb3V0LCByZXF1ZXN0VGltZW91dCB9IGZyb20gJy4vdGltZXInO1xuaW1wb3J0IHsgZ2V0U2Nyb2xsYmFyU2l6ZSwgZ2V0UlRMT2Zmc2V0VHlwZSB9IGZyb20gJy4vZG9tSGVscGVycyc7XG5cbmltcG9ydCB0eXBlIHsgVGltZW91dElEIH0gZnJvbSAnLi90aW1lcic7XG5cbmV4cG9ydCB0eXBlIFNjcm9sbFRvQWxpZ24gPSAnYXV0bycgfCAnc21hcnQnIHwgJ2NlbnRlcicgfCAnc3RhcnQnIHwgJ2VuZCc7XG5cbnR5cGUgaXRlbVNpemUgPSBudW1iZXIgfCAoKGluZGV4OiBudW1iZXIpID0+IG51bWJlcik7XG4vLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb25zIFwiaG9yaXpvbnRhbFwiIGFuZCBcInZlcnRpY2FsXCJcbnR5cGUgRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJyB8ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG50eXBlIExheW91dCA9ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG5cbnR5cGUgUmVuZGVyQ29tcG9uZW50UHJvcHM8VD4gPSB7fFxuICBkYXRhOiBULFxuICBpbmRleDogbnVtYmVyLFxuICBpc1Njcm9sbGluZz86IGJvb2xlYW4sXG4gIHN0eWxlOiBPYmplY3QsXG58fTtcbnR5cGUgUmVuZGVyQ29tcG9uZW50PFQ+ID0gUmVhY3QkQ29tcG9uZW50VHlwZTwkU2hhcGU8UmVuZGVyQ29tcG9uZW50UHJvcHM8VD4+PjtcblxudHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuXG50eXBlIG9uSXRlbXNSZW5kZXJlZENhbGxiYWNrID0gKHtcbiAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVTdGFydEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVTdG9wSW5kZXg6IG51bWJlcixcbn0pID0+IHZvaWQ7XG50eXBlIG9uU2Nyb2xsQ2FsbGJhY2sgPSAoe1xuICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbn0pID0+IHZvaWQ7XG5cbnR5cGUgU2Nyb2xsRXZlbnQgPSBTeW50aGV0aWNFdmVudDxIVE1MRGl2RWxlbWVudD47XG50eXBlIEl0ZW1TdHlsZUNhY2hlID0geyBbaW5kZXg6IG51bWJlcl06IE9iamVjdCB9O1xuXG50eXBlIE91dGVyUHJvcHMgPSB7fFxuICBjaGlsZHJlbjogUmVhY3QkTm9kZSxcbiAgY2xhc3NOYW1lOiBzdHJpbmcgfCB2b2lkLFxuICBvblNjcm9sbDogU2Nyb2xsRXZlbnQgPT4gdm9pZCxcbiAgc3R5bGU6IHtcbiAgICBbc3RyaW5nXTogbWl4ZWQsXG4gIH0sXG58fTtcblxudHlwZSBJbm5lclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbmV4cG9ydCB0eXBlIFByb3BzPFQ+ID0ge3xcbiAgY2hpbGRyZW46IFJlbmRlckNvbXBvbmVudDxUPixcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxuICBkaXJlY3Rpb246IERpcmVjdGlvbixcbiAgaGVpZ2h0OiBudW1iZXIgfCBzdHJpbmcsXG4gIGluaXRpYWxTY3JvbGxPZmZzZXQ/OiBudW1iZXIsXG4gIGlubmVyUmVmPzogYW55LFxuICBpbm5lckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8SW5uZXJQcm9wcywgYW55PixcbiAgaW5uZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIGl0ZW1Db3VudDogbnVtYmVyLFxuICBpdGVtRGF0YTogVCxcbiAgaXRlbUtleT86IChpbmRleDogbnVtYmVyLCBkYXRhOiBUKSA9PiBhbnksXG4gIGl0ZW1TaXplOiBpdGVtU2l6ZSxcbiAgbGF5b3V0OiBMYXlvdXQsXG4gIG9uSXRlbXNSZW5kZXJlZD86IG9uSXRlbXNSZW5kZXJlZENhbGxiYWNrLFxuICBvblNjcm9sbD86IG9uU2Nyb2xsQ2FsbGJhY2ssXG4gIG91dGVyUmVmPzogYW55LFxuICBvdXRlckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8T3V0ZXJQcm9wcywgYW55PixcbiAgb3V0ZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ291bnQ6IG51bWJlcixcbiAgc3R5bGU/OiBPYmplY3QsXG4gIHVzZUlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICB3aWR0aDogbnVtYmVyIHwgc3RyaW5nLFxufH07XG5cbnR5cGUgU3RhdGUgPSB7fFxuICBpbnN0YW5jZTogYW55LFxuICBpc1Njcm9sbGluZzogYm9vbGVhbixcbiAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG58fTtcblxudHlwZSBHZXRJdGVtT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0SXRlbVNpemUgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlUHJvcHM6IGFueSkgPT4gbnVtYmVyO1xudHlwZSBHZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RhcnRJbmRleEZvck9mZnNldCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIG9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgc3RhcnRJbmRleDogbnVtYmVyLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgSW5pdEluc3RhbmNlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpID0+IGFueTtcbnR5cGUgVmFsaWRhdGVQcm9wcyA9IChwcm9wczogUHJvcHM8YW55PikgPT4gdm9pZDtcblxuY29uc3QgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMID0gMTUwO1xuXG5jb25zdCBkZWZhdWx0SXRlbUtleSA9IChpbmRleDogbnVtYmVyLCBkYXRhOiBhbnkpID0+IGluZGV4O1xuXG4vLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cbmxldCBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSBuZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSA9IG5ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQsXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0SXRlbVNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wcyxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSxcbiAgdmFsaWRhdGVQcm9wcyxcbn06IHt8XG4gIGdldEl0ZW1PZmZzZXQ6IEdldEl0ZW1PZmZzZXQsXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogR2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRJdGVtU2l6ZTogR2V0SXRlbVNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBHZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogR2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IEluaXRJbnN0YW5jZVByb3BzLFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBib29sZWFuLFxuICB2YWxpZGF0ZVByb3BzOiBWYWxpZGF0ZVByb3BzLFxufH0pIHtcbiAgcmV0dXJuIGNsYXNzIExpc3Q8VD4gZXh0ZW5kcyBQdXJlQ29tcG9uZW50PFByb3BzPFQ+LCBTdGF0ZT4ge1xuICAgIF9pbnN0YW5jZVByb3BzOiBhbnkgPSBpbml0SW5zdGFuY2VQcm9wcyh0aGlzLnByb3BzLCB0aGlzKTtcbiAgICBfb3V0ZXJSZWY6ID9IVE1MRGl2RWxlbWVudDtcbiAgICBfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZDogVGltZW91dElEIHwgbnVsbCA9IG51bGw7XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgICBsYXlvdXQ6ICd2ZXJ0aWNhbCcsXG4gICAgICBvdmVyc2NhbkNvdW50OiAyLFxuICAgICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgIH07XG5cbiAgICBzdGF0ZTogU3RhdGUgPSB7XG4gICAgICBpbnN0YW5jZTogdGhpcyxcbiAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgIHNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgc2Nyb2xsT2Zmc2V0OlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0XG4gICAgICAgICAgOiAwLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxUPikge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFByb3BzPFQ+LFxuICAgICAgcHJldlN0YXRlOiBTdGF0ZVxuICAgICk6ICRTaGFwZTxTdGF0ZT4gfCBudWxsIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG8oc2Nyb2xsT2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIHNjcm9sbE9mZnNldCk7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9JdGVtKGluZGV4OiBudW1iZXIsIGFsaWduOiBTY3JvbGxUb0FsaWduID0gJ2F1dG8nKTogdm9pZCB7XG4gICAgICBjb25zdCB7IGl0ZW1Db3VudCwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxPZmZzZXQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpKTtcblxuICAgICAgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LCB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cbiAgICAgIC8vIFRoaXMgaXMgYW4gZWRnZSBjYXNlIGZvciBsaXN0czsgbm9ybWFsbHkgdGhleSBvbmx5IHNjcm9sbCBpbiB0aGUgZG9taW5hbnQgZGlyZWN0aW9uLlxuICAgICAgbGV0IHNjcm9sbGJhclNpemUgPSAwO1xuICAgICAgaWYgKHRoaXMuX291dGVyUmVmKSB7XG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuICAgICAgICBpZiAobGF5b3V0ID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxXaWR0aCA+IG91dGVyUmVmLmNsaWVudFdpZHRoXG4gICAgICAgICAgICAgID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID1cbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbEhlaWdodCA+IG91dGVyUmVmLmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICA/IGdldFNjcm9sbGJhclNpemUoKVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUbyhcbiAgICAgICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBhbGlnbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICBzY3JvbGxiYXJTaXplXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgaW5pdGlhbFNjcm9sbE9mZnNldCwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBsYXlvdXQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbE9mZnNldCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxXaWR0aCB9ID0gb3V0ZXJSZWY7XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaW5uZXJSZWYsXG4gICAgICAgIGlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgIGlubmVyVGFnTmFtZSxcbiAgICAgICAgaXRlbUNvdW50LFxuICAgICAgICBpdGVtRGF0YSxcbiAgICAgICAgaXRlbUtleSA9IGRlZmF1bHRJdGVtS2V5LFxuICAgICAgICBsYXlvdXQsXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgIG91dGVyVGFnTmFtZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICBjb25zdCBpc0hvcml6b250YWwgPVxuICAgICAgICBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgICAgY29uc3Qgb25TY3JvbGwgPSBpc0hvcml6b250YWxcbiAgICAgICAgPyB0aGlzLl9vblNjcm9sbEhvcml6b250YWxcbiAgICAgICAgOiB0aGlzLl9vblNjcm9sbFZlcnRpY2FsO1xuXG4gICAgICBjb25zdCBbc3RhcnRJbmRleCwgc3RvcEluZGV4XSA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKTtcblxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnRJbmRleDsgaW5kZXggPD0gc3RvcEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgIGtleTogaXRlbUtleShpbmRleCwgaXRlbURhdGEpLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoaW5kZXgpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2JyxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBvblNjcm9sbCxcbiAgICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGhlaWdodDogaXNIb3Jpem9udGFsID8gJzEwMCUnIDogZXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gZXN0aW1hdGVkVG90YWxTaXplIDogJzEwMCUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkOiAoXG4gICAgICBvdmVyc2NhblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVN0b3BJbmRleDogbnVtYmVyXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShcbiAgICAgIChcbiAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVTdG9wSW5kZXg6IG51bWJlclxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkOiBhbnkpOiBvbkl0ZW1zUmVuZGVyZWRDYWxsYmFjaykoe1xuICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4LFxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBfY2FsbE9uU2Nyb2xsOiAoXG4gICAgICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25TY3JvbGw6IGFueSk6IG9uU2Nyb2xsQ2FsbGJhY2spKHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgeyBpdGVtQ291bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgY29uc3QgW1xuICAgICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdG9wSW5kZXgsXG4gICAgICAgICAgXSA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKFxuICAgICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdG9wSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIF9nZXRJdGVtU3R5bGU6IChpbmRleDogbnVtYmVyKSA9PiBPYmplY3Q7XG4gICAgX2dldEl0ZW1TdHlsZSA9IChpbmRleDogbnVtYmVyKTogT2JqZWN0ID0+IHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBpdGVtU2l6ZSwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBpdGVtU3R5bGVDYWNoZSA9IHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGl0ZW1TaXplLFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGxheW91dCxcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb25cbiAgICAgICk7XG5cbiAgICAgIGxldCBzdHlsZTtcbiAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcbiAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtpbmRleF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRJdGVtT2Zmc2V0KHRoaXMucHJvcHMsIGluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGdldEl0ZW1TaXplKHRoaXMucHJvcHMsIGluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcblxuICAgICAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID1cbiAgICAgICAgICBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgICAgICBjb25zdCBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgIGNvbnN0IG9mZnNldEhvcml6b250YWwgPSBpc0hvcml6b250YWwgPyBvZmZzZXQgOiAwO1xuICAgICAgICBpdGVtU3R5bGVDYWNoZVtpbmRleF0gPSBzdHlsZSA9IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IG9mZnNldEhvcml6b250YWwsXG4gICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0SG9yaXpvbnRhbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0b3A6ICFpc0hvcml6b250YWwgPyBvZmZzZXQgOiAwLFxuICAgICAgICAgIGhlaWdodDogIWlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuXG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlOiAoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gSXRlbVN0eWxlQ2FjaGU7XG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZSgoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gKHt9KSk7XG5cbiAgICBfZ2V0UmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7IGl0ZW1Db3VudCwgb3ZlcnNjYW5Db3VudCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaXNTY3JvbGxpbmcsIHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsT2Zmc2V0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KVxuICAgICAgICAgIDogMTtcbiAgICAgIGNvbnN0IG92ZXJzY2FuRm9yd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHN0b3BJbmRleCxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgX29uU2Nyb2xsSG9yaXpvbnRhbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGgsIHNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIH0gPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRpcmVjdGlvbiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBsZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxPZmZzZXQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb25TY3JvbGxWZXJ0aWNhbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50SGVpZ2h0LCBzY3JvbGxIZWlnaHQsIHNjcm9sbFRvcCB9ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgY29uc3Qgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9vdXRlclJlZlNldHRlciA9IChyZWY6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyBvdXRlclJlZiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgdGhpcy5fb3V0ZXJSZWYgPSAoKHJlZjogYW55KTogSFRNTERpdkVsZW1lbnQpO1xuXG4gICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBvdXRlclJlZiAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKVxuICAgICAgKSB7XG4gICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KFxuICAgICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nLFxuICAgICAgICBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nID0gKCkgPT4ge1xuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc1Njcm9sbGluZzogZmFsc2UgfSwgKCkgPT4ge1xuICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgIHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xLCBudWxsKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG59XG5cbi8vIE5PVEU6IEkgY29uc2lkZXJlZCBmdXJ0aGVyIHdyYXBwaW5nIGluZGl2aWR1YWwgaXRlbXMgd2l0aCBhIHB1cmUgTGlzdEl0ZW0gY29tcG9uZW50LlxuLy8gVGhpcyB3b3VsZCBhdm9pZCBldmVyIGNhbGxpbmcgdGhlIHJlbmRlciBmdW5jdGlvbiBmb3IgdGhlIHNhbWUgaW5kZXggbW9yZSB0aGFuIG9uY2UsXG4vLyBCdXQgaXQgd291bGQgYWxzbyBhZGQgdGhlIG92ZXJoZWFkIG9mIGEgbG90IG9mIGNvbXBvbmVudHMvZmliZXJzLlxuLy8gSSBhc3N1bWUgcGVvcGxlIGFscmVhZHkgZG8gdGhpcyAocmVuZGVyIGZ1bmN0aW9uIHJldHVybmluZyBhIGNsYXNzIGNvbXBvbmVudCksXG4vLyBTbyBteSBkb2luZyBpdCB3b3VsZCBqdXN0IHVubmVjZXNzYXJpbHkgZG91YmxlIHRoZSB3cmFwcGVycy5cblxuY29uc3QgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IChcbiAge1xuICAgIGNoaWxkcmVuLFxuICAgIGRpcmVjdGlvbixcbiAgICBoZWlnaHQsXG4gICAgbGF5b3V0LFxuICAgIGlubmVyVGFnTmFtZSxcbiAgICBvdXRlclRhZ05hbWUsXG4gICAgd2lkdGgsXG4gIH06IFByb3BzPGFueT4sXG4gIHsgaW5zdGFuY2UgfTogU3RhdGVcbik6IHZvaWQgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICBpZiAoZGV2V2FybmluZ3NEaXJlY3Rpb24gJiYgIWRldldhcm5pbmdzRGlyZWN0aW9uLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbi5hZGQoaW5zdGFuY2UpO1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdUaGUgZGlyZWN0aW9uIHByb3Agc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIChkZWZhdWx0KSBvciBcInJ0bFwiLiAnICtcbiAgICAgICAgICAgICAgJ1BsZWFzZSB1c2UgdGhlIGxheW91dCBwcm9wIHRvIHNwZWNpZnkgXCJ2ZXJ0aWNhbFwiIChkZWZhdWx0KSBvciBcImhvcml6b250YWxcIiBvcmllbnRhdGlvbi4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArXG4gICAgICAgICAgICBgXCIke2RpcmVjdGlvbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGxheW91dCkge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwibGF5b3V0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJob3Jpem9udGFsXCIgb3IgXCJ2ZXJ0aWNhbFwiLiAnICtcbiAgICAgICAgICAgIGBcIiR7bGF5b3V0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICtcbiAgICAgICAgICBgXCIke2NoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsICYmIHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdIb3Jpem9udGFsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgK1xuICAgICAgICAgIGBcIiR7d2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGh9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRhbCAmJiB0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdWZXJ0aWNhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArXG4gICAgICAgICAgYFwiJHtoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUxpc3RDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbmNvbnN0IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSA9IDUwO1xuXG50eXBlIFZhcmlhYmxlU2l6ZVByb3BzID0ge3xcbiAgZXN0aW1hdGVkSXRlbVNpemU6IG51bWJlcixcbiAgLi4uUHJvcHM8YW55Pixcbnx9O1xuXG50eXBlIGl0ZW1TaXplR2V0dGVyID0gKGluZGV4OiBudW1iZXIpID0+IG51bWJlcjtcblxudHlwZSBJdGVtTWV0YWRhdGEgPSB7fFxuICBvZmZzZXQ6IG51bWJlcixcbiAgc2l6ZTogbnVtYmVyLFxufH07XG50eXBlIEluc3RhbmNlUHJvcHMgPSB7fFxuICBpdGVtTWV0YWRhdGFNYXA6IHsgW2luZGV4OiBudW1iZXJdOiBJdGVtTWV0YWRhdGEgfSxcbiAgZXN0aW1hdGVkSXRlbVNpemU6IG51bWJlcixcbiAgbGFzdE1lYXN1cmVkSW5kZXg6IG51bWJlcixcbnx9O1xuXG5jb25zdCBnZXRJdGVtTWV0YWRhdGEgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4pOiBJdGVtTWV0YWRhdGEgPT4ge1xuICBjb25zdCB7IGl0ZW1TaXplIH0gPSAoKHByb3BzOiBhbnkpOiBWYXJpYWJsZVNpemVQcm9wcyk7XG4gIGNvbnN0IHsgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleCB9ID0gaW5zdGFuY2VQcm9wcztcblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgbGV0IHNpemUgPSAoKGl0ZW1TaXplOiBhbnkpOiBpdGVtU2l6ZUdldHRlcikoaSk7XG5cbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBzaXplLFxuICAgICAgfTtcblxuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW0gPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBvZmZzZXQ6IG51bWJlclxuKSA9PiB7XG4gIGNvbnN0IHsgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleCB9ID0gaW5zdGFuY2VQcm9wcztcblxuICBjb25zdCBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID1cbiAgICBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4LFxuICAgICAgMCxcbiAgICAgIG9mZnNldFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBoaWdoOiBudW1iZXIsXG4gIGxvdzogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICBjb25zdCBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBpbmRleDogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgY29uc3QgeyBpdGVtQ291bnQgfSA9IHByb3BzO1xuICBsZXQgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChcbiAgICBpbmRleCA8IGl0ZW1Db3VudCAmJlxuICAgIGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldFxuICApIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICBwcm9wcyxcbiAgICBpbnN0YW5jZVByb3BzLFxuICAgIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSxcbiAgICBNYXRoLmZsb29yKGluZGV4IC8gMiksXG4gICAgb2Zmc2V0XG4gICk7XG59O1xuXG5jb25zdCBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAoXG4gIHsgaXRlbUNvdW50IH06IFByb3BzPGFueT4sXG4gIHsgaXRlbU1ldGFkYXRhTWFwLCBlc3RpbWF0ZWRJdGVtU2l6ZSwgbGFzdE1lYXN1cmVkSW5kZXggfTogSW5zdGFuY2VQcm9wc1xuKSA9PiB7XG4gIGxldCB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSAwO1xuXG4gIC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSBpdGVtQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGl0ZW1Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gaXRlbUNvdW50IC0gbGFzdE1lYXN1cmVkSW5kZXggLSAxO1xuICBjb25zdCB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZEl0ZW1TaXplO1xuXG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IFZhcmlhYmxlU2l6ZUxpc3QgPSBjcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0LFxuXG4gIGdldEl0ZW1TaXplOiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG5cbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgeyBkaXJlY3Rpb24sIGhlaWdodCwgbGF5b3V0LCB3aWR0aCB9ID0gcHJvcHM7XG5cbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuXG4gICAgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZShwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG5cbiAgICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSArIHNjcm9sbGJhclNpemVcbiAgICApO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmXG4gICAgICAgIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplXG4gICAgICApIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGZpbmROZWFyZXN0SXRlbShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KSxcblxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBpdGVtQ291bnQsIGxheW91dCwgd2lkdGggfSA9IHByb3BzO1xuXG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbE9mZnNldCArIHNpemU7XG5cbiAgICBsZXQgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIGxldCBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGl0ZW1Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KTogSW5zdGFuY2VQcm9wcyB7XG4gICAgY29uc3QgeyBlc3RpbWF0ZWRJdGVtU2l6ZSB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZTogZXN0aW1hdGVkSXRlbVNpemUgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXg6IC0xLFxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kZXggPSAoXG4gICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGU/OiBib29sZWFuID0gdHJ1ZVxuICAgICkgPT4ge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IE1hdGgubWluKFxuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4LFxuICAgICAgICBpbmRleCAtIDFcbiAgICAgICk7XG5cbiAgICAgIC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuXG4gIHZhbGlkYXRlUHJvcHM6ICh7IGl0ZW1TaXplIH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7aXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemV9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZhcmlhYmxlU2l6ZUxpc3Q7XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUdyaWRDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlR3JpZENvbXBvbmVudCc7XG5cbmNvbnN0IEZpeGVkU2l6ZUdyaWQgPSBjcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiAoeyBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldENvbHVtbldpZHRoOiAoeyBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSxcblxuICBnZXRSb3dPZmZzZXQ6ICh7IHJvd0hlaWdodCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSxcblxuICBnZXRSb3dIZWlnaHQ6ICh7IHJvd0hlaWdodCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6ICh7IHJvd0NvdW50LCByb3dIZWlnaHQgfTogUHJvcHM8YW55PikgPT5cbiAgICAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAqIHJvd0NvdW50LFxuXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6ICh7IGNvbHVtbkNvdW50LCBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+KSA9PlxuICAgICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgKiBjb2x1bW5Db3VudCxcblxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IChcbiAgICB7IGNvbHVtbkNvdW50LCBjb2x1bW5XaWR0aCwgd2lkdGggfTogUHJvcHM8YW55PixcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiB0eXBlb2YgdW5kZWZpbmVkLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGxhc3RDb2x1bW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBjb2x1bW5Db3VudCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgLSB3aWR0aFxuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICBsYXN0Q29sdW1uT2Zmc2V0LFxuICAgICAgY29sdW1uSW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBjb2x1bW5JbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgLVxuICAgICAgICB3aWR0aCArXG4gICAgICAgIHNjcm9sbGJhclNpemUgK1xuICAgICAgICAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0IC0gd2lkdGggJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQgKyB3aWR0aCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgY29uc3QgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbCh3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RDb2x1bW5PZmZzZXQgKyBNYXRoLmZsb29yKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdENvbHVtbk9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsTGVmdDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IChcbiAgICB7IHJvd0hlaWdodCwgaGVpZ2h0LCByb3dDb3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogdHlwZW9mIHVuZGVmaW5lZCxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsYXN0Um93T2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgcm93Q291bnQgKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAtIGhlaWdodFxuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICBsYXN0Um93T2Zmc2V0LFxuICAgICAgcm93SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgcm93SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAtXG4gICAgICAgIGhlaWdodCArXG4gICAgICAgIHNjcm9sbGJhclNpemUgK1xuICAgICAgICAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0IC0gaGVpZ2h0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQgKyBoZWlnaHQpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIGNvbnN0IG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgbWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdFJvd09mZnNldCArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdFJvd09mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsVG9wIDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICB7IGNvbHVtbldpZHRoLCBjb2x1bW5Db3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHNjcm9sbExlZnQ6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgY29sdW1uQ291bnQgLSAxLFxuICAgICAgICBNYXRoLmZsb29yKHNjcm9sbExlZnQgLyAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpKVxuICAgICAgKVxuICAgICksXG5cbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogKFxuICAgIHsgY29sdW1uV2lkdGgsIGNvbHVtbkNvdW50LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsZWZ0ID0gc3RhcnRJbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgbnVtVmlzaWJsZUNvbHVtbnMgPSBNYXRoLmNlaWwoXG4gICAgICAod2lkdGggKyBzY3JvbGxMZWZ0IC0gbGVmdCkgLyAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGNvbHVtbkNvdW50IC0gMSxcbiAgICAgICAgc3RhcnRJbmRleCArIG51bVZpc2libGVDb2x1bW5zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgICApXG4gICAgKTtcbiAgfSxcblxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyByb3dIZWlnaHQsIHJvd0NvdW50IH06IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4ocm93Q291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbFRvcCAvICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpKSlcbiAgICApLFxuXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IHJvd0hlaWdodCwgcm93Q291bnQsIGhlaWdodCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxUb3A6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHRvcCA9IHN0YXJ0SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBudW1WaXNpYmxlUm93cyA9IE1hdGguY2VpbChcbiAgICAgIChoZWlnaHQgKyBzY3JvbGxUb3AgLSB0b3ApIC8gKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgcm93Q291bnQgLSAxLFxuICAgICAgICBzdGFydEluZGV4ICsgbnVtVmlzaWJsZVJvd3MgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICAgIClcbiAgICApO1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+KTogYW55IHtcbiAgICAvLyBOb29wXG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBjb2x1bW5XaWR0aCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgK1xuICAgICAgICAgICAgYFwiJHtcbiAgICAgICAgICAgICAgY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGhcbiAgICAgICAgICAgIH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArXG4gICAgICAgICAgICBgXCIke3Jvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpeGVkU2l6ZUdyaWQ7XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUxpc3RDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbnR5cGUgSW5zdGFuY2VQcm9wcyA9IGFueTtcblxuY29uc3QgRml4ZWRTaXplTGlzdCA9IGNyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldEl0ZW1TaXplOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6ICh7IGl0ZW1Db3VudCwgaXRlbVNpemUgfTogUHJvcHM8YW55PikgPT5cbiAgICAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpICogaXRlbUNvdW50LFxuXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiAoXG4gICAgeyBkaXJlY3Rpb24sIGhlaWdodCwgaXRlbUNvdW50LCBpdGVtU2l6ZSwgbGF5b3V0LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IGxhc3RJdGVtT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgaXRlbUNvdW50ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAtIHNpemVcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgbGFzdEl0ZW1PZmZzZXQsXG4gICAgICBpbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGluZGV4ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAtXG4gICAgICAgIHNpemUgK1xuICAgICAgICAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpICtcbiAgICAgICAgc2Nyb2xsYmFyU2l6ZVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiZcbiAgICAgICAgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemVcbiAgICAgICkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6IHtcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICBjb25zdCBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMlxuICAgICAgICApO1xuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHNpemUgLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0SXRlbU9mZnNldCArIE1hdGguZmxvb3Ioc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RJdGVtT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyBpdGVtQ291bnQsIGl0ZW1TaXplIH06IFByb3BzPGFueT4sXG4gICAgb2Zmc2V0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgTWF0aC5mbG9vcihvZmZzZXQgLyAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpKSlcbiAgICApLFxuXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBpdGVtQ291bnQsIGl0ZW1TaXplLCBsYXlvdXQsIHdpZHRoIH06IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRJbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBudW1WaXNpYmxlSXRlbXMgPSBNYXRoLmNlaWwoXG4gICAgICAoc2l6ZSArIHNjcm9sbE9mZnNldCAtIG9mZnNldCkgLyAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGl0ZW1Db3VudCAtIDEsXG4gICAgICAgIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlSXRlbXMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICAgIClcbiAgICApO1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+KTogYW55IHtcbiAgICAvLyBOb29wXG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICtcbiAgICAgICAgICAgIGBcIiR7aXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemV9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpeGVkU2l6ZUxpc3Q7XG4iLCAiLy8gQGZsb3dcblxuLy8gUHVsbGVkIGZyb20gcmVhY3QtY29tcGF0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvYmxvYi83YzVkZTAwZTdjODVlMmZmZDAxMWJmM2FmMDI4OTliNjNmNjk5ZDNhL3NyYy9pbmRleC5qcyNMMzQ5XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGFsbG93RGlmZmVycyhwcmV2OiBPYmplY3QsIG5leHQ6IE9iamVjdCk6IGJvb2xlYW4ge1xuICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gcHJldikge1xuICAgIGlmICghKGF0dHJpYnV0ZSBpbiBuZXh0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBuZXh0KSB7XG4gICAgaWYgKHByZXZbYXR0cmlidXRlXSAhPT0gbmV4dFthdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBzaGFsbG93RGlmZmVycyBmcm9tICcuL3NoYWxsb3dEaWZmZXJzJztcblxuLy8gQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW8oKS5cbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RtZW1vXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcmVFcXVhbChcbiAgcHJldlByb3BzOiBPYmplY3QsXG4gIG5leHRQcm9wczogT2JqZWN0XG4pOiBib29sZWFuIHtcbiAgY29uc3QgeyBzdHlsZTogcHJldlN0eWxlLCAuLi5wcmV2UmVzdCB9ID0gcHJldlByb3BzO1xuICBjb25zdCB7IHN0eWxlOiBuZXh0U3R5bGUsIC4uLm5leHRSZXN0IH0gPSBuZXh0UHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICAhc2hhbGxvd0RpZmZlcnMocHJldlN0eWxlLCBuZXh0U3R5bGUpICYmICFzaGFsbG93RGlmZmVycyhwcmV2UmVzdCwgbmV4dFJlc3QpXG4gICk7XG59XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGFyZUVxdWFsIGZyb20gJy4vYXJlRXF1YWwnO1xuaW1wb3J0IHNoYWxsb3dEaWZmZXJzIGZyb20gJy4vc2hhbGxvd0RpZmZlcnMnO1xuXG4vLyBDdXN0b20gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGZvciBjbGFzcyBjb21wb25lbnRzLlxuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1jb21wb25lbnQuaHRtbCNzaG91bGRjb21wb25lbnR1cGRhdGVcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgbmV4dFByb3BzOiBPYmplY3QsXG4gIG5leHRTdGF0ZTogT2JqZWN0XG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAhYXJlRXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBuZXh0U3RhdGUpXG4gICk7XG59XG4iLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCIsIFwib25DbGlja1wiLCBcImhlYWRlclppbmRleExvY2F0aW9uXCIsIFwibWFza1JlZlwiXTtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIE5PVEU6IFdlIGNhbid0IHRlc3QgdGhpcyBjb21wb25lbnQgYmVjYXVzZSBFbnp5bWUgZG9lc24ndCBzdXBwb3J0IHJlbmRlcmluZ1xuICogaW50byBwb3J0YWxzLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IHVzZUNvbWJpbmVkUmVmcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aU92ZXJsYXlNYXNrID0gZnVuY3Rpb24gRXVpT3ZlcmxheU1hc2soX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgX3JlZiRoZWFkZXJaaW5kZXhMb2NhID0gX3JlZi5oZWFkZXJaaW5kZXhMb2NhdGlvbixcbiAgICAgIGhlYWRlclppbmRleExvY2F0aW9uID0gX3JlZiRoZWFkZXJaaW5kZXhMb2NhID09PSB2b2lkIDAgPyAnYWJvdmUnIDogX3JlZiRoZWFkZXJaaW5kZXhMb2NhLFxuICAgICAgbWFza1JlZiA9IF9yZWYubWFza1JlZixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgb3ZlcmxheU1hc2tOb2RlID0gdXNlUmVmKCk7XG4gIHZhciBjb21iaW5lZE1hc2tSZWYgPSB1c2VDb21iaW5lZFJlZnMoW292ZXJsYXlNYXNrTm9kZSwgbWFza1JlZl0pO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIGlzUG9ydGFsVGFyZ2V0UmVhZHkgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0SXNQb3J0YWxUYXJnZXRSZWFkeSA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2V1aUJvZHktaGFzT3ZlcmxheU1hc2snKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdldWlCb2R5LWhhc092ZXJsYXlNYXNrJyk7XG4gICAgfTtcbiAgfSwgW10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb21iaW5lZE1hc2tSZWYoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgIH1cbiAgfSwgW10pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvcnRhbFRhcmdldCA9IG92ZXJsYXlNYXNrTm9kZS5jdXJyZW50O1xuXG4gICAgaWYgKHBvcnRhbFRhcmdldCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwb3J0YWxUYXJnZXQpO1xuICAgIH1cblxuICAgIHNldElzUG9ydGFsVGFyZ2V0UmVhZHkodHJ1ZSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChwb3J0YWxUYXJnZXQpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChwb3J0YWxUYXJnZXQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIW92ZXJsYXlNYXNrTm9kZS5jdXJyZW50KSByZXR1cm47XG4gICAga2V5c09mKHJlc3QpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKHR5cGVvZiByZXN0W2tleV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBwcm9wZXJ0eSB0eXBlLiBFdWlPdmVybGF5TWFzayBwcm9wZXJ0eSBcIi5jb25jYXQoa2V5LCBcIiBpcyBub3QgYSBzdHJpbmcuXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG92ZXJsYXlNYXNrTm9kZS5jdXJyZW50KSB7XG4gICAgICAgIG92ZXJsYXlNYXNrTm9kZS5jdXJyZW50LnNldEF0dHJpYnV0ZShrZXksIHJlc3Rba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtdKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghb3ZlcmxheU1hc2tOb2RlLmN1cnJlbnQpIHJldHVybjtcbiAgICBvdmVybGF5TWFza05vZGUuY3VycmVudC5jbGFzc05hbWUgPSBjbGFzc05hbWVzKCdldWlPdmVybGF5TWFzaycsIFwiZXVpT3ZlcmxheU1hc2stLVwiLmNvbmNhdChoZWFkZXJaaW5kZXhMb2NhdGlvbiwgXCJIZWFkZXJcIiksIGNsYXNzTmFtZSk7XG4gIH0sIFtjbGFzc05hbWUsIGhlYWRlclppbmRleExvY2F0aW9uXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvcnRhbFRhcmdldCA9IG92ZXJsYXlNYXNrTm9kZS5jdXJyZW50O1xuICAgIGlmICghcG9ydGFsVGFyZ2V0IHx8ICFvbkNsaWNrKSByZXR1cm47XG5cbiAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcihlKSB7XG4gICAgICBpZiAoZS50YXJnZXQgPT09IHBvcnRhbFRhcmdldCkge1xuICAgICAgICBvbkNsaWNrKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHBvcnRhbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcG9ydGFsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbGlzdGVuZXIpO1xuICAgIH07XG4gIH0sIFtvbkNsaWNrXSk7XG4gIHJldHVybiBpc1BvcnRhbFRhcmdldFJlYWR5ID8gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL2NyZWF0ZVBvcnRhbChjaGlsZHJlbiwgb3ZlcmxheU1hc2tOb2RlLmN1cnJlbnQpKSA6IG51bGw7XG59O1xuRXVpT3ZlcmxheU1hc2sucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRnVuY3Rpb24gdGhhdCBhcHBsaWVzIHRvIGNsaWNraW5nIHRoZSBtYXNrIGl0c2VsZiBhbmQgbm90IHRoZSBjaGlsZHJlblxuICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBtYXNrIHZpc3VhbGx5IHNpdCBhYm92ZSBvciBiZWxvdyB0aGUgRXVpSGVhZGVyIChjb250cm9sbGVkIGJ5IHotaW5kZXgpXG4gICAgICovXG4gIGhlYWRlclppbmRleExvY2F0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYWJvdmVcIiwgXCJiZWxvd1wiXSksXG5cbiAgLyoqXG4gICAgICogUmVhY3QgcmVmIHRvIGJlIHBhc3NlZCB0byB0aGUgd3JhcHBpbmcgY29udGFpbmVyXG4gICAgICovXG4gIG1hc2tSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlTcGFjZXJTdHlsZXMgfSBmcm9tICcuL3NwYWNlci5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xuZXhwb3J0IHZhciBFdWlTcGFjZXIgPSBmdW5jdGlvbiBFdWlTcGFjZXIoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVNwYWNlclN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU3BhY2VyJywgX2RlZmluZVByb3BlcnR5KHt9LCBcImV1aVNwYWNlci0tXCIuY29uY2F0KHNpemUpLCBzaXplKSwgY2xhc3NOYW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpU3BhY2VyLCBzdHlsZXNbc2l6ZV1dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpKTtcbn07XG5FdWlTcGFjZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOTF4aTFuLWV1aVNwYWNlclwiLFxuICBzdHlsZXM6IFwiZmxleC1zaHJpbms6MDtsYWJlbDpldWlTcGFjZXI7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTkxeGkxbi1ldWlTcGFjZXJcIixcbiAgc3R5bGVzOiBcImZsZXgtc2hyaW5rOjA7bGFiZWw6ZXVpU3BhY2VyO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpU3BhY2VyU3R5bGVzID0gZnVuY3Rpb24gZXVpU3BhY2VyU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVNwYWNlcjogX3JlZixcbiAgICAvLyBTaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUueHMsIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJkYXRhLXRlc3Qtc3VialwiLCBcImFzeW5jXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcHJlc3NlZFwiLCBcImN1c3RvbU9wdGlvblRleHRcIiwgXCJmdWxsV2lkdGhcIiwgXCJpZFwiLCBcImlucHV0UmVmXCIsIFwiaXNDbGVhcmFibGVcIiwgXCJpc0Rpc2FibGVkXCIsIFwiaXNJbnZhbGlkXCIsIFwiaXNMb2FkaW5nXCIsIFwibm9TdWdnZXN0aW9uc1wiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25DcmVhdGVPcHRpb25cIiwgXCJvblNlYXJjaENoYW5nZVwiLCBcIm9wdGlvbnNcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlbmRlck9wdGlvblwiLCBcInJvd0hlaWdodFwiLCBcInNlbGVjdGVkT3B0aW9uc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcInByZXBlbmRcIiwgXCJzb3J0TWF0Y2hlc0J5XCIsIFwiZGVsaW1pdGVyXCIsIFwiYXBwZW5kXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBFbGVtZW50cyB3aXRoaW4gRXVpQ29tYm9Cb3ggd2hpY2ggd291bGQgbm9ybWFsbHkgYmUgdGFiYmFibGUgKGlucHV0cywgYnV0dG9ucykgaGF2ZSBiZWVuIHJlbW92ZWRcbiAqIGZyb20gdGhlIHRhYiBvcmRlciB3aXRoIHRhYmluZGV4PXstMX0gc28gdGhhdCB3ZSBjYW4gY29udHJvbCB0aGUga2V5Ym9hcmQgbmF2aWdhdGlvbiBpbnRlcmZhY2UuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGZpbmRQb3BvdmVyUG9zaXRpb24sIGh0bWxJZEdlbmVyYXRvciwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVBvcnRhbCB9IGZyb20gJy4uL3BvcnRhbCc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbnNMaXN0IH0gZnJvbSAnLi9jb21ib19ib3hfb3B0aW9uc19saXN0JztcbmltcG9ydCB7IGdldE1hdGNoaW5nT3B0aW9ucywgZmxhdHRlbk9wdGlvbkdyb3VwcywgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSB9IGZyb20gJy4vbWF0Y2hpbmdfb3B0aW9ucyc7XG5pbXBvcnQgeyBFdWlDb21ib0JveElucHV0IH0gZnJvbSAnLi9jb21ib19ib3hfaW5wdXQvY29tYm9fYm94X2lucHV0JztcbmltcG9ydCB7IGdldEVsZW1lbnRaSW5kZXggfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wb3BvdmVyJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaW5pdGlhbFNlYXJjaFZhbHVlID0gJyc7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlDb21ib0JveCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3goKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94KTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IC0xLFxuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgICAgaXNMaXN0T3BlbjogZmFsc2UsXG4gICAgICBsaXN0RWxlbWVudDogbnVsbCxcbiAgICAgIGxpc3RQb3NpdGlvbjogJ2JvdHRvbScsXG4gICAgICBsaXN0WkluZGV4OiB1bmRlZmluZWQsXG4gICAgICBtYXRjaGluZ09wdGlvbnM6IGdldE1hdGNoaW5nT3B0aW9ucyhfdGhpcy5wcm9wcy5vcHRpb25zLCBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMsIGluaXRpYWxTZWFyY2hWYWx1ZSwgX3RoaXMucHJvcHMuYXN5bmMsIEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSwgX3RoaXMucHJvcHMuc29ydE1hdGNoZXNCeSksXG4gICAgICBzZWFyY2hWYWx1ZTogaW5pdGlhbFNlYXJjaFZhbHVlLFxuICAgICAgd2lkdGg6IDBcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfaXNNb3VudGVkXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyb290SWRcIiwgaHRtbElkR2VuZXJhdG9yKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNvbWJvQm94UmVmSW5zdGFuY2VcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY29tYm9Cb3hSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAvLyBJRTExIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYHJlbGF0ZWRUYXJnZXRgIGV2ZW50IHByb3BlcnR5IGZvciBibHVyIGV2ZW50c1xuICAgICAgLy8gYnV0IGRvZXMgYWRkIGl0IGZvciBmb2N1c291dC4gUmVhY3QgZG9lc24ndCBzdXBwb3J0IGBvbkZvY3VzT3V0YCBzbyBoZXJlIHdlIGFyZS5cbiAgICAgIGlmIChfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBfdGhpcy5vbkNvbnRhaW5lckJsdXIpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlID0gcmVmO1xuXG4gICAgICBpZiAoX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSkge1xuICAgICAgICBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgX3RoaXMub25Db250YWluZXJCbHVyKTtcblxuICAgICAgICB2YXIgY29tYm9Cb3hCb3VuZHMgPSBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB3aWR0aDogY29tYm9Cb3hCb3VuZHMud2lkdGhcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYXV0b1NpemVJbnB1dFJlZkluc3RhbmNlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImF1dG9TaXplSW5wdXRSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5hdXRvU2l6ZUlucHV0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2VhcmNoSW5wdXRSZWZJbnN0YW5jZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZWFyY2hJbnB1dFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaW5wdXRSZWYpIF90aGlzLnByb3BzLmlucHV0UmVmKHJlZik7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdFJlZkluc3RhbmNlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBpZiAoX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSkge1xuICAgICAgICAvLyBmaW5kIHRoZSB6SW5kZXggb2YgdGhlIGNvbWJvYm94IHJlbGF0aXZlIHRvIHRoZSBwYWdlIGJvZHlcbiAgICAgICAgLy8gYW5kIHVzZSB0aGF0IHRvIGRlcHRoLXBvc2l0aW9uIHRoZSBsaXN0IGJveFxuICAgICAgICAvLyBhZGRzIGFuIGV4dHJhIGAxMDBgIHRvIHByb3ZpZGUgc29tZSBkZWZlbnNlIGFyb3VuZCBuZWlnaGJvcmluZyBlbGVtZW50cycgcG9zaXRpb25pbmdcbiAgICAgICAgdmFyIGxpc3RaSW5kZXggPSBnZXRFbGVtZW50WkluZGV4KF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UsIGRvY3VtZW50LmJvZHkpICsgMTAwO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBsaXN0WkluZGV4OiBsaXN0WkluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5saXN0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9nZ2xlQnV0dG9uUmVmSW5zdGFuY2VcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9nZ2xlQnV0dG9uUmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMudG9nZ2xlQnV0dG9uUmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3B0aW9uc1JlZkluc3RhbmNlc1wiLCBbXSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3B0aW9uUmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKGluZGV4LCByZWYpIHtcbiAgICAgIF90aGlzLm9wdGlvbnNSZWZJbnN0YW5jZXNbaW5kZXhdID0gcmVmO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9wZW5MaXN0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNMaXN0T3BlbjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VMaXN0XCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhcmdldCA9PT0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICAvLyByZWFsbHkgbG9uZyBzZWFyY2ggdmFsdWVzIC8gY3VzdG9tIGVudHJpZXMgdHJpZ2dlcnMgYSBzY3JvbGwgZXZlbnQgb24gdGhlIGlucHV0XG4gICAgICAgIC8vIHdoaWNoIHRoZSBFdWlDb21ib0JveE9wdGlvbnNMaXN0IHBhc3NlcyB0aHJvdWdoIGhlcmVcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGxpc3RaSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNMaXN0T3BlbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZVBvc2l0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBsaXN0RWxlbWVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogX3RoaXMuc3RhdGUubGlzdEVsZW1lbnQ7XG5cbiAgICAgIGlmICghX3RoaXMuX2lzTW91bnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghbGlzdEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdXBkYXRlTGlzdFBvc2l0aW9uIGlzIGNhbGxlZCB3aGVuIGxpc3RFbGVtZW50IGlzIGJlY29taW5nIHZpc2libGUsIGJ1dCBpc24ndCB5ZXRcblxuXG4gICAgICB2YXIgbGlzdEVsZW1lbnRCb3VuZHMgPSBsaXN0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgaWYgKGxpc3RFbGVtZW50Qm91bmRzLndpZHRoID09PSAwIHx8IGxpc3RFbGVtZW50Qm91bmRzLmhlaWdodCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21ib0JveEJvdW5kcyA9IF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIHZhciBfcmVmID0gZmluZFBvcG92ZXJQb3NpdGlvbih7XG4gICAgICAgIGFsbG93Q3Jvc3NBeGlzOiBmYWxzZSxcbiAgICAgICAgYW5jaG9yOiBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLFxuICAgICAgICBwb3BvdmVyOiBsaXN0RWxlbWVudCxcbiAgICAgICAgcG9zaXRpb246ICdib3R0b20nXG4gICAgICB9KSxcbiAgICAgICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgICAgICAgdG9wID0gX3JlZi50b3A7XG5cbiAgICAgIGlmIChfdGhpcy5saXN0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgX3RoaXMubGlzdFJlZkluc3RhbmNlLnN0eWxlLnRvcCA9IFwiXCIuY29uY2F0KHRvcCwgXCJweFwiKTsgLy8gbGlzdEVsZW1lbnQgZG9lc24ndCBoYXZlIGl0cyB3aWR0aCBzZXQgdW50aWwgYWZ0ZXIgdXBkYXRpbmcgdGhlIHBvc2l0aW9uXG4gICAgICAgIC8vIHdoaWNoIG1lYW5zIHRoZSBwb3BvdmVyIHNlcnZpY2Ugd29uJ3Qga25vdyBhYm91dCB0aGUgY29ycmVjdCB3aWR0aFxuICAgICAgICAvLyBob3dldmVyLCB3ZSBhbHJlYWR5IGtub3cgd2hlcmUgdG8gcG9zaXRpb24gdGhlIGVsZW1lbnRcblxuICAgICAgICBfdGhpcy5saXN0UmVmSW5zdGFuY2Uuc3R5bGUubGVmdCA9IFwiXCIuY29uY2F0KGNvbWJvQm94Qm91bmRzLmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQsIFwicHhcIik7XG4gICAgICAgIF90aGlzLmxpc3RSZWZJbnN0YW5jZS5zdHlsZS53aWR0aCA9IFwiXCIuY29uY2F0KGNvbWJvQm94Qm91bmRzLndpZHRoLCBcInB4XCIpO1xuICAgICAgfSAvLyBDYWNoZSBmb3IgZnV0dXJlIGNhbGxzLlxuXG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbGlzdEVsZW1lbnQ6IGxpc3RFbGVtZW50LFxuICAgICAgICBsaXN0UG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICB3aWR0aDogY29tYm9Cb3hCb3VuZHMud2lkdGhcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4XCIsIGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvcHRpb25zIGF2YWlsYWJsZSwgZG8gbm90aGluZy5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBfcmVmMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IF9yZWYyLm1hdGNoaW5nT3B0aW9ucztcbiAgICAgICAgdmFyIG5leHRBY3RpdmVPcHRpb25JbmRleDtcblxuICAgICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1c2VyJ3Mga2V5Ym9hcmQgbmF2aWdhdGlvbiBvZiB0aGUgbWVudSwgdGhlbiB3ZSdsbCBmb2N1c1xuICAgICAgICAgIC8vIGVpdGhlciB0aGUgZmlyc3Qgb3IgbGFzdCBpdGVtLlxuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFtb3VudCA8IDAgPyBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYWN0aXZlT3B0aW9uSW5kZXggKyBhbW91bnQ7XG5cbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIEdyb3VwIHRpdGxlcyBhcmUgaW5jbHVkZWQgaW4gb3B0aW9uIGxpc3QgYnV0IGFyZSBub3Qgc2VsZWN0YWJsZVxuICAgICAgICAvLyBTa2lwIGdyb3VwIHRpdGxlIG9wdGlvbnNcblxuXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gMSA6IC0xO1xuXG4gICAgICAgIHdoaWxlIChtYXRjaGluZ09wdGlvbnNbbmV4dEFjdGl2ZU9wdGlvbkluZGV4XS5pc0dyb3VwTGFiZWxPcHRpb24pIHtcbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBuZXh0QWN0aXZlT3B0aW9uSW5kZXggKyBkaXJlY3Rpb247XG5cbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYXNBY3RpdmVPcHRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ID4gLTEgJiYgX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggPCBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsZWFyQWN0aXZlT3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IC0xXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhclNlYXJjaFZhbHVlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLm9uU2VhcmNoQ2hhbmdlKCcnKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVMYXN0T3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIEJhY2tzcGFjZSB3aWxsIGJlIHVzZWQgdG8gZGVsZXRlIHRoZSBpbnB1dCwgbm90IGEgcGlsbC5cblxuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUuc2VhcmNoVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRGVsZXRlIGxhc3QgcGlsbC5cblxuXG4gICAgICBfdGhpcy5vblJlbW92ZU9wdGlvbihfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnNbX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAtIDFdKTtcblxuICAgICAgaWYgKEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSAmJiAhX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImFkZEN1c3RvbU9wdGlvblwiLCBmdW5jdGlvbiAoaXNDb250YWluZXJCbHVyLCBzZWFyY2hWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DcmVhdGVPcHRpb24gPSBfdGhpcyRwcm9wcy5vbkNyZWF0ZU9wdGlvbixcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wcy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucztcblxuICAgICAgaWYgKF90aGlzLmRvZXNTZWFyY2hNYXRjaE9ubHlPcHRpb24oKSkge1xuICAgICAgICBfdGhpcy5vbkFkZE9wdGlvbihtYXRjaGluZ09wdGlvbnNbMF0sIGlzQ29udGFpbmVyQmx1cik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9uQ3JlYXRlT3B0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG9uJ3QgYm90aGVyIHRyeWluZyB0byBjcmVhdGUgYW4gb3B0aW9uIGlmIHRoZSB1c2VyIGhhc24ndCB0eXBlZCBhbnl0aGluZy5cblxuXG4gICAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG9uJ3QgY3JlYXRlIHRoZSB2YWx1ZSBpZiBpdCdzIGFscmVhZHkgYmVlbiBzZWxlY3RlZC5cblxuXG4gICAgICBpZiAoZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShzZWFyY2hWYWx1ZSwgc2VsZWN0ZWRPcHRpb25zKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIEFkZCBuZXcgY3VzdG9tIHBpbGwgaWYgdGhpcyBpcyBjdXN0b20gaW5wdXQsIGV2ZW4gaWYgaXQgcGFydGlhbGx5IG1hdGNoZXMgYW4gb3B0aW9uLlxuXG5cbiAgICAgIHZhciBpc09wdGlvbkNyZWF0ZWQgPSBvbkNyZWF0ZU9wdGlvbihzZWFyY2hWYWx1ZSwgZmxhdHRlbk9wdGlvbkdyb3VwcyhvcHRpb25zKSk7IC8vIEV4cGVjdCB0aGUgY29uc3VtZXIgdG8gYmUgZXhwbGljaXQgaW4gcmVqZWN0aW5nIGEgY3VzdG9tIG9wdGlvbi5cblxuICAgICAgaWYgKGlzT3B0aW9uQ3JlYXRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jbGVhclNlYXJjaFZhbHVlKCk7XG5cbiAgICAgIGlmIChCb29sZWFuKHNpbmdsZVNlbGVjdGlvbikpIHtcbiAgICAgICAgLy8gQWRkaW5nIGEgY3VzdG9tIG9wdGlvbiB0byBhIHNpbmdsZSBzZWxlY3QgdGhhdCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9uc1xuICAgICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJkb2VzU2VhcmNoTWF0Y2hPbmx5T3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IF90aGlzLnN0YXRlLnNlYXJjaFZhbHVlO1xuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnNbMF0ubGFiZWwudG9Mb3dlckNhc2UoKSA9PT0gc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhcmVBbGxPcHRpb25zU2VsZWN0ZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczIub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIGFzeW5jID0gX3RoaXMkcHJvcHMyLmFzeW5jOyAvLyBBc3N1bWUgaWYgdGhpcyBpcyBhc3luYyB0aGVuIHRoZXJlIGNvdWxkIGJlIGluZmluaXRlIG9wdGlvbnMuXG5cbiAgICAgIGlmIChhc3luYykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBmbGF0dGVuT3B0aW9ucyA9IGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9ucykubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKSwge30sIHtcbiAgICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB2YXIgbnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnMgPSAwO1xuICAgICAgc2VsZWN0ZWRPcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciBsYWJlbCA9IF9yZWYzLmxhYmVsO1xuICAgICAgICB2YXIgdHJpbW1lZExhYmVsID0gbGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChmbGF0dGVuT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgIHJldHVybiBvcHRpb24ubGFiZWwgPT09IHRyaW1tZWRMYWJlbDtcbiAgICAgICAgfSkgIT09IC0xKSBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucyArPSAxO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmxhdHRlbk9wdGlvbnMubGVuZ3RoID09PSBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucztcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNvbWJvQm94Rm9jdXNcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25Gb2N1cykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkZvY3VzKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMub3Blbkxpc3QoKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0Q3VzdG9tT3B0aW9uc1wiLCBmdW5jdGlvbiAoaXNDb250YWluZXJCbHVyKSB7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWFyY2hWYWx1ZTtcbiAgICAgIHZhciBkZWxpbWl0ZXIgPSBfdGhpcy5wcm9wcy5kZWxpbWl0ZXI7XG5cbiAgICAgIGlmIChkZWxpbWl0ZXIpIHtcbiAgICAgICAgc2VhcmNoVmFsdWUuc3BsaXQoZGVsaW1pdGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICBpZiAob3B0aW9uLmxlbmd0aCA+IDApIF90aGlzLmFkZEN1c3RvbU9wdGlvbihpc0NvbnRhaW5lckJsdXIsIG9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuYWRkQ3VzdG9tT3B0aW9uKGlzQ29udGFpbmVyQmx1ciwgc2VhcmNoVmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ29udGFpbmVyQmx1clwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIGNsb3NlIHRoZSBvcHRpb25zIGxpc3QsIHVubGVzcyB0aGUgdXNlciBjbGlja2VkIG9uIGFuIG9wdGlvblxuXG4gICAgICAvKipcbiAgICAgICAqIEZpcmVGb3ggcmV0dXJucyBgcmVsYXRlZFRhcmdldGAgYXMgYG51bGxgIGZvciBzZWN1cml0eSByZWFzb25zLCBidXQgcHJvdmlkZXMgYSBwcm9wcmlldGFyeSBgZXhwbGljaXRPcmlnaW5hbFRhcmdldGAuXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudC9leHBsaWNpdE9yaWdpbmFsVGFyZ2V0XG4gICAgICAgKi9cbiAgICAgIHZhciBmb2N1c0V2ZW50ID0gZXZlbnQ7XG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGZvY3VzRXZlbnQucmVsYXRlZFRhcmdldCB8fCBmb2N1c0V2ZW50LmV4cGxpY2l0T3JpZ2luYWxUYXJnZXQ7XG5cbiAgICAgIHZhciBmb2N1c2VkSW5PcHRpb25zTGlzdCA9IHJlbGF0ZWRUYXJnZXQgJiYgX3RoaXMubGlzdFJlZkluc3RhbmNlICYmIF90aGlzLmxpc3RSZWZJbnN0YW5jZS5jb250YWlucyhyZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgdmFyIGZvY3VzZWRJbklucHV0ID0gcmVsYXRlZFRhcmdldCAmJiBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlICYmIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UuY29udGFpbnMocmVsYXRlZFRhcmdldCk7XG5cbiAgICAgIGlmICghZm9jdXNlZEluT3B0aW9uc0xpc3QgJiYgIWZvY3VzZWRJbklucHV0KSB7XG4gICAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuXG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgICB9KTsgLy8gSWYgdGhlIHVzZXIgdGFicyBhd2F5IG9yIGNoYW5nZXMgZm9jdXMgdG8gYW5vdGhlciBlbGVtZW50LCB0YWtlIHdoYXRldmVyIGlucHV0IHRoZXkndmVcbiAgICAgICAgLy8gdHlwZWQgYW5kIGNvbnZlcnQgaXQgaW50byBhIHBpbGwsIHRvIHByZXZlbnQgdGhlIGNvbWJvIGJveCBmcm9tIGxvb2tpbmcgbGlrZSBhIHRleHQgaW5wdXQuXG5cblxuICAgICAgICBpZiAoIV90aGlzLmhhc0FjdGl2ZU9wdGlvbigpKSB7XG4gICAgICAgICAgX3RoaXMuc2V0Q3VzdG9tT3B0aW9ucyh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmb2N1c2VkSW5PcHRpb25zTGlzdCkge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzUxNzlcbiAgICAgICAgLy8gbmVlZCB0byByZXN0b3JlIGZvY3VzIHRvIHRoZSBpbnB1dCBib3ggd2hlbiBjbGlja2luZyBub24taW50ZXJhY3RpdmUgZWxlbWVudHNcbiAgICAgICAgLy8gZmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgY2FsbGluZyAuZm9jdXMoKSBkdXJpbmcgYSBibHVyIGV2ZW50XG4gICAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTc5XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJHNlYXJjaElucHV0UmVmSTtcblxuICAgICAgICAgIChfdGhpcyRzZWFyY2hJbnB1dFJlZkkgPSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSA9PT0gbnVsbCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHNlYXJjaElucHV0UmVmSS5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaXNEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfVVA6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgtMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0RPV046XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuQkFDS1NQQUNFOlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgX3RoaXMucmVtb3ZlTGFzdE9wdGlvbigpO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLkVTQ0FQRTpcbiAgICAgICAgICBpZiAoX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuRU5URVI6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5oYXNBY3RpdmVPcHRpb24oKSkge1xuICAgICAgICAgICAgX3RoaXMub25BZGRPcHRpb24oX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zW190aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLnNldEN1c3RvbU9wdGlvbnMoZmFsc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Uga2V5cy5UQUI6XG4gICAgICAgICAgLy8gRGlzYWxsb3cgdGFiYmluZyB3aGVuIHRoZSB1c2VyIGlzIG5hdmlnYXRpbmcgdGhlIG9wdGlvbnMuXG4gICAgICAgICAgaWYgKF90aGlzLmhhc0FjdGl2ZU9wdGlvbigpICYmIF90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbktleURvd24pIHtcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uS2V5RG93bihldmVudCk7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcHRpb25FbnRlcktleVwiLCBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICBfdGhpcy5vbkFkZE9wdGlvbihvcHRpb24pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uT3B0aW9uQ2xpY2tcIiwgZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgX3RoaXMub25BZGRPcHRpb24ob3B0aW9uKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkFkZE9wdGlvblwiLCBmdW5jdGlvbiAoYWRkZWRPcHRpb24sIGlzQ29udGFpbmVyQmx1cikge1xuICAgICAgaWYgKGFkZGVkT3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMzLm9uQ2hhbmdlLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uUHJvcCA9IF90aGlzJHByb3BzMy5zaW5nbGVTZWxlY3Rpb247XG4gICAgICB2YXIgc2luZ2xlU2VsZWN0aW9uID0gQm9vbGVhbihzaW5nbGVTZWxlY3Rpb25Qcm9wKTtcbiAgICAgIHZhciBjaGFuZ2VPcHRpb25zID0gc2luZ2xlU2VsZWN0aW9uID8gW2FkZGVkT3B0aW9uXSA6IHNlbGVjdGVkT3B0aW9ucy5jb25jYXQoYWRkZWRPcHRpb24pO1xuXG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoY2hhbmdlT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNsZWFyU2VhcmNoVmFsdWUoKTtcblxuICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcblxuICAgICAgaWYgKCFpc0NvbnRhaW5lckJsdXIpIHtcbiAgICAgICAgaWYgKF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgICBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbikge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5pbmRleE9mKGFkZGVkT3B0aW9uKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblJlbW92ZU9wdGlvblwiLCBmdW5jdGlvbiAocmVtb3ZlZE9wdGlvbikge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHM0Lm9uQ2hhbmdlLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNC5zZWxlY3RlZE9wdGlvbnM7XG5cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uICE9PSByZW1vdmVkT3B0aW9uO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYXJTZWxlY3RlZE9wdGlvbnNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9uQ2hhbmdlID0gX3RoaXMucHJvcHMub25DaGFuZ2U7XG5cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShbXSk7XG4gICAgICB9IC8vIENsaWNraW5nIHRoZSBjbGVhciBidXR0b24gd2lsbCBhbHNvIGNhdXNlIGl0IHRvIGRpc2FwcGVhci4gVGhpcyB3b3VsZCByZXN1bHQgaW4gZm9jdXNcbiAgICAgIC8vIHNoaWZ0aW5nIHVuZXhwZWN0ZWRseSB0byB0aGUgYm9keSBlbGVtZW50IHNvIHdlIHNldCBpdCB0byB0aGUgaW5wdXQgd2hpY2ggaXMgbW9yZSByZWFzb25hYmxlLFxuXG5cbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Db21ib0JveENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFdoZW4gdGhlIHVzZXIgY2xpY2tzIGFueXdoZXJlIG9uIHRoZSBib3gsIGVudGVyIHRoZSBpbnRlcmFjdGlvbiBzdGF0ZS5cbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH0gLy8gSWYgdGhlIHVzZXIgZG9lcyB0aGlzIGZyb20gYSBzdGF0ZSBpbiB3aGljaCBhbiBvcHRpb24gaGFzIGZvY3VzLCB0aGVuIHdlIG5lZWQgdG8gcmVzZXQgaXQgb3IgY2xlYXIgaXQuXG5cblxuICAgICAgaWYgKEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSAmJiBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZE9wdGlvbkluZGV4ID0gX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbi5sYWJlbCA9PT0gX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsICYmIG9wdGlvbi5rZXkgPT09IF90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9uc1swXS5rZXk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogc2VsZWN0ZWRPcHRpb25JbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcGVuTGlzdENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcHRpb25MaXN0U2Nyb2xsXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsb3NlTGlzdENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uU2VhcmNoQ2hhbmdlXCIsIGZ1bmN0aW9uIChzZWFyY2hWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uU2VhcmNoQ2hhbmdlID0gX3RoaXMkcHJvcHM1Lm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzNS5kZWxpbWl0ZXI7XG5cbiAgICAgIGlmIChvblNlYXJjaENoYW5nZSkge1xuICAgICAgICB2YXIgX2hhc01hdGNoaW5nT3B0aW9ucyA9IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgIG9uU2VhcmNoQ2hhbmdlKHNlYXJjaFZhbHVlLCBfaGFzTWF0Y2hpbmdPcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWVcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNlYXJjaFZhbHVlICYmIF90aGlzLnN0YXRlLmlzTGlzdE9wZW4gPT09IGZhbHNlKSBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkZWxpbWl0ZXIgJiYgc2VhcmNoVmFsdWUuZW5kc1dpdGgoZGVsaW1pdGVyKSkge1xuICAgICAgICBfdGhpcy5zZXRDdXN0b21PcHRpb25zKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ1cGRhdGVNYXRjaGluZ09wdGlvbnNJZkRpZmZlcmVudFwiLCBmdW5jdGlvbiAobmV3TWF0Y2hpbmdPcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSBfdGhpcy5zdGF0ZSxcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRzdGF0ZS5tYXRjaGluZ09wdGlvbnMsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZS5hY3RpdmVPcHRpb25JbmRleDtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczYuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNi5zZWxlY3RlZE9wdGlvbnM7XG4gICAgICB2YXIgYXJlT3B0aW9uc0RpZmZlcmVudCA9IGZhbHNlO1xuXG4gICAgICBpZiAobWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAhPT0gbmV3TWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBhcmVPcHRpb25zRGlmZmVyZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF0Y2hpbmdPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nT3B0aW9uc1tpXS5sYWJlbCAhPT0gbmV3TWF0Y2hpbmdPcHRpb25zW2ldLmxhYmVsKSB7XG4gICAgICAgICAgICBhcmVPcHRpb25zRGlmZmVyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYXJlT3B0aW9uc0RpZmZlcmVudCkge1xuICAgICAgICBfdGhpcy5vcHRpb25zUmVmSW5zdGFuY2VzID0gW107XG4gICAgICAgIHZhciBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhY3RpdmVPcHRpb25JbmRleDsgLy8gZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzaW5nbGUgb3B0aW9uIGlzIGFjdGl2ZSBpZiBpdCBpcyBpbiB0aGUgbWF0Y2hpbmdPcHRpb25zXG5cbiAgICAgICAgaWYgKEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgaWYgKG5ld01hdGNoaW5nT3B0aW9ucy5pbmNsdWRlcyhzZWxlY3RlZE9wdGlvbnNbMF0pKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBuZXdNYXRjaGluZ09wdGlvbnMuaW5kZXhPZihzZWxlY3RlZE9wdGlvbnNbMF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnM6IG5ld01hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghbmV3TWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW5kbGVzcyBzZXRTdGF0ZSAtPiBjb21wb25lbnRXaWxsVXBkYXRlIC0+IHNldFN0YXRlIGxvb3AuXG4gICAgICAgICAgaWYgKF90aGlzLmhhc0FjdGl2ZU9wdGlvbigpKSB7XG4gICAgICAgICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUNvbWJvQm94LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlOyAvLyBUT0RPOiBUaGlzIHdpbGwgbmVlZCB0byBiZSBjYWxsZWQgb25jZSB0aGUgYWN0dWFsIHN0eWxlc2hlZXQgbG9hZHMuXG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMyLmF1dG9TaXplSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICAgIF90aGlzMi5hdXRvU2l6ZUlucHV0UmVmSW5zdGFuY2UuY29weUlucHV0U3R5bGVzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM3Lm9wdGlvbnMsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM3LnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczcuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHNvcnRNYXRjaGVzQnkgPSBfdGhpcyRwcm9wczcuc29ydE1hdGNoZXNCeTtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IHRoaXMuc3RhdGUuc2VhcmNoVmFsdWU7IC8vIFJlYWN0IDE2LjMgaGFzIGEgYnVnIChmaXhlZCBpbiAxNi40KSB3aGVyZSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcbiAgICAgIC8vIGlzbid0IGNhbGxlZCBhZnRlciBhIHN0YXRlIGNoYW5nZSwgYW5kIHdlIHRyYWNrIGBzZWFyY2hWYWx1ZWAgaW4gc3RhdGVcbiAgICAgIC8vIGluc3RlYWQgd2UgbmVlZCB0byByZWFjdCB0byBhIGNoYW5nZSBpbiBzZWFyY2hWYWx1ZSBoZXJlXG5cbiAgICAgIHRoaXMudXBkYXRlTWF0Y2hpbmdPcHRpb25zSWZEaWZmZXJlbnQoZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkT3B0aW9ucywgc2VhcmNoVmFsdWUsIHRoaXMucHJvcHMuYXN5bmMsIEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSwgc29ydE1hdGNoZXNCeSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRhdGFUZXN0U3ViaiA9IF90aGlzJHByb3BzOFsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgICAgICBhc3luYyA9IF90aGlzJHByb3BzOC5hc3luYyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczguY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczguY29tcHJlc3NlZCxcbiAgICAgICAgICBjdXN0b21PcHRpb25UZXh0ID0gX3RoaXMkcHJvcHM4LmN1c3RvbU9wdGlvblRleHQsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHM4LmZ1bGxXaWR0aCxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzOC5pZCxcbiAgICAgICAgICBpbnB1dFJlZiA9IF90aGlzJHByb3BzOC5pbnB1dFJlZixcbiAgICAgICAgICBpc0NsZWFyYWJsZSA9IF90aGlzJHByb3BzOC5pc0NsZWFyYWJsZSxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM4LmlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNJbnZhbGlkID0gX3RoaXMkcHJvcHM4LmlzSW52YWxpZCxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczguaXNMb2FkaW5nLFxuICAgICAgICAgIG5vU3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczgubm9TdWdnZXN0aW9ucyxcbiAgICAgICAgICBvbkJsdXIgPSBfdGhpcyRwcm9wczgub25CbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHM4Lm9uQ2hhbmdlLFxuICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHM4Lm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgIG9uU2VhcmNoQ2hhbmdlID0gX3RoaXMkcHJvcHM4Lm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczgub3B0aW9ucyxcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzOC5wbGFjZWhvbGRlcixcbiAgICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczgucmVuZGVyT3B0aW9uLFxuICAgICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzOC5yb3dIZWlnaHQsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM4LnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczguc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wczgucHJlcGVuZCxcbiAgICAgICAgICBzb3J0TWF0Y2hlc0J5ID0gX3RoaXMkcHJvcHM4LnNvcnRNYXRjaGVzQnksXG4gICAgICAgICAgZGVsaW1pdGVyID0gX3RoaXMkcHJvcHM4LmRlbGltaXRlcixcbiAgICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczguYXBwZW5kLFxuICAgICAgICAgIGF1dG9Gb2N1cyA9IF90aGlzJHByb3BzOC5hdXRvRm9jdXMsXG4gICAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHM4WydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wczhbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHM4LCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHN0YXRlMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBoYXNGb2N1cyA9IF90aGlzJHN0YXRlMi5oYXNGb2N1cyxcbiAgICAgICAgICBpc0xpc3RPcGVuID0gX3RoaXMkc3RhdGUyLmlzTGlzdE9wZW4sXG4gICAgICAgICAgbGlzdFBvc2l0aW9uID0gX3RoaXMkc3RhdGUyLmxpc3RQb3NpdGlvbixcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHN0YXRlMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHN0YXRlMi53aWR0aCxcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRzdGF0ZTIubWF0Y2hpbmdPcHRpb25zOyAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIElEIGlmIHVzZXJzIGRvbid0IHBhc3Mgb25lIGFzIGEgcHJvcFxuXG4gICAgICB2YXIgaW5wdXRJZCA9IGlkICE9PSBudWxsICYmIGlkICE9PSB2b2lkIDAgPyBpZCA6IHRoaXMucm9vdElkKCdfZXVpLWNvbWJvYm94LWlkJyk7IC8vIFZpc3VhbGx5IGluZGljYXRlIHRoZSBjb21ib2JveCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIGl0IGhhcyBsb3N0IGZvY3VzIGJ1dCB0aGVyZSBpcyB0ZXh0IGVudGVyZWQgaW4gdGhlIGlucHV0LlxuICAgICAgLy8gV2hlbiBjdXN0b20gb3B0aW9ucyBhcmUgZGlzYWJsZWQgYW5kIHRoZSB1c2VyIGxlYXZlcyB0aGUgY29tYm8gYm94IGFmdGVyIGVudGVyaW5nIHRleHQgdGhhdCBkb2VzIG5vdCBtYXRjaCBhbnlcbiAgICAgIC8vIG9wdGlvbnMsIHRoaXMgdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGV5J3ZlIGVudGVyZWQgaW52YWxpZCBpbnB1dC5cblxuICAgICAgdmFyIG1hcmtBc0ludmFsaWQgPSBpc0ludmFsaWQgfHwgKGhhc0ZvY3VzID09PSBmYWxzZSB8fCBpc0xpc3RPcGVuID09PSBmYWxzZSkgJiYgc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94JywgY2xhc3NOYW1lLCB7XG4gICAgICAgICdldWlDb21ib0JveC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWQsXG4gICAgICAgICdldWlDb21ib0JveC0tZnVsbFdpZHRoJzogZnVsbFdpZHRoLFxuICAgICAgICAnZXVpQ29tYm9Cb3gtLXByZXBlbmRlZCc6IHByZXBlbmQsXG4gICAgICAgICdldWlDb21ib0JveC0tYXBwZW5kZWQnOiBhcHBlbmQsXG4gICAgICAgICdldWlDb21ib0JveC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAgICAgJ2V1aUNvbWJvQm94LWlzSW52YWxpZCc6IG1hcmtBc0ludmFsaWQsXG4gICAgICAgICdldWlDb21ib0JveC1pc09wZW4nOiBpc0xpc3RPcGVuXG4gICAgICB9KTtcbiAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24gKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbi5sYWJlbDtcbiAgICAgIH0pLmpvaW4oJywgJyk7XG4gICAgICB2YXIgb3B0aW9uc0xpc3Q7XG5cbiAgICAgIGlmICghbm9TdWdnZXN0aW9ucyAmJiBpc0xpc3RPcGVuKSB7XG4gICAgICAgIHZhciBvcHRpb25zTGlzdERhdGFUZXN0U3ViaiA9IGRhdGFUZXN0U3ViaiA/IFwiXCIuY29uY2F0KGRhdGFUZXN0U3ViaiwgXCItb3B0aW9uc0xpc3RcIikgOiB1bmRlZmluZWQ7XG4gICAgICAgIG9wdGlvbnNMaXN0ID0gX19fRW1vdGlvbkpTWChFdWlQb3J0YWwsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94Lmxpc3Rib3hBcmlhTGFiZWxcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkNob29zZSBmcm9tIHRoZSBmb2xsb3dpbmcgb3B0aW9uc1wiXG4gICAgICAgIH0sIGZ1bmN0aW9uIChsaXN0Ym94QXJpYUxhYmVsKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwge1xuICAgICAgICAgICAgekluZGV4OiBfdGhpczMuc3RhdGUubGlzdFpJbmRleCxcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBfdGhpczMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgICBhcmVBbGxPcHRpb25zU2VsZWN0ZWQ6IF90aGlzMy5hcmVBbGxPcHRpb25zU2VsZWN0ZWQoKSxcbiAgICAgICAgICAgIGN1c3RvbU9wdGlvblRleHQ6IGN1c3RvbU9wdGlvblRleHQsXG4gICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IG9wdGlvbnNMaXN0RGF0YVRlc3RTdWJqLFxuICAgICAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICAgIGxpc3RSZWY6IF90aGlzMy5saXN0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgICBtYXRjaGluZ09wdGlvbnM6IG1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIG9uQ2xvc2VMaXN0OiBfdGhpczMuY2xvc2VMaXN0LFxuICAgICAgICAgICAgb25DcmVhdGVPcHRpb246IG9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgICAgb25PcHRpb25DbGljazogX3RoaXMzLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgICBvbk9wdGlvbkVudGVyS2V5OiBfdGhpczMub25PcHRpb25FbnRlcktleSxcbiAgICAgICAgICAgIG9uU2Nyb2xsOiBfdGhpczMub25PcHRpb25MaXN0U2Nyb2xsLFxuICAgICAgICAgICAgb3B0aW9uUmVmOiBfdGhpczMub3B0aW9uUmVmQ2FsbGJhY2ssXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgICAgcG9zaXRpb246IGxpc3RQb3NpdGlvbixcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbjogc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgICAgcmVuZGVyT3B0aW9uOiByZW5kZXJPcHRpb24sXG4gICAgICAgICAgICByb290SWQ6IF90aGlzMy5yb290SWQsXG4gICAgICAgICAgICByb3dIZWlnaHQ6IHJvd0hlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbFRvSW5kZXg6IGFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgICB1cGRhdGVQb3NpdGlvbjogX3RoaXMzLnVwZGF0ZVBvc2l0aW9uLFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgZGVsaW1pdGVyOiBkZWxpbWl0ZXIsXG4gICAgICAgICAgICBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlOiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgbGlzdGJveEFyaWFMYWJlbDogbGlzdGJveEFyaWFMYWJlbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFdWlDb21ib0JveCBmb2xsb3dzIHRoZSBXQUktQVJJQSAxLjIgc3BlYyBmb3IgZWRpdGFibGUgY29tYm9ib3hlc1xuICAgICAgICAgKiB3aXRoIGxpc3QgYXV0b2NvbXBsZXRlLiBUaGlzIHBhdHRlcm4gaXMgYW4gaW1wcm92ZW1lbnQgb24gdGhlIHVzZXJcbiAgICAgICAgICogZXhwZXJpZW5jZSBmb3Igc2NyZWVuIHJlYWRlcnMgb3ZlciB0aGUgV0FJLUFSSUEgMS4xIHBhdHRlcm4uXG4gICAgICAgICAqXG4gICAgICAgICAqIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4yL2V4YW1wbGVzL2NvbWJvYm94L2NvbWJvYm94LWF1dG9jb21wbGV0ZS1saXN0Lmh0bWxcbiAgICAgICAgICovXG4gICAgICAgIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmosXG4gICAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgICByZWY6IHRoaXMuY29tYm9Cb3hSZWZDYWxsYmFja1xuICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlDb21ib0JveElucHV0LCB7XG4gICAgICAgICAgYXV0b1NpemVJbnB1dFJlZjogdGhpcy5hdXRvU2l6ZUlucHV0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgICBmb2N1c2VkT3B0aW9uSWQ6IHRoaXMuaGFzQWN0aXZlT3B0aW9uKCkgPyB0aGlzLnJvb3RJZChcIl9vcHRpb24tXCIuY29uY2F0KHRoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgpKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwLFxuICAgICAgICAgIGlkOiBpbnB1dElkLFxuICAgICAgICAgIGlucHV0UmVmOiB0aGlzLnNlYXJjaElucHV0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0xpc3RPcGVuOiBpc0xpc3RPcGVuLFxuICAgICAgICAgIG5vSWNvbjogISFub1N1Z2dlc3Rpb25zLFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIG9uQ2xlYXI6IGlzQ2xlYXJhYmxlICYmICFpc0Rpc2FibGVkID8gdGhpcy5jbGVhclNlbGVjdGVkT3B0aW9ucyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQ29tYm9Cb3hDbGljayxcbiAgICAgICAgICBvbkNsb3NlTGlzdENsaWNrOiB0aGlzLm9uQ2xvc2VMaXN0Q2xpY2ssXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5vbkNvbWJvQm94Rm9jdXMsXG4gICAgICAgICAgb25PcGVuTGlzdENsaWNrOiB0aGlzLm9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgICBvblJlbW92ZU9wdGlvbjogdGhpcy5vblJlbW92ZU9wdGlvbixcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgcm9vdElkOiB0aGlzLnJvb3RJZCxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgdG9nZ2xlQnV0dG9uUmVmOiB0aGlzLnRvZ2dsZUJ1dHRvblJlZkNhbGxiYWNrLFxuICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uOiB0aGlzLnVwZGF0ZVBvc2l0aW9uLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBhcHBlbmQ6IHNpbmdsZVNlbGVjdGlvbiA/IGFwcGVuZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwcmVwZW5kOiBzaW5nbGVTZWxlY3Rpb24gPyBwcmVwZW5kIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkYnlcbiAgICAgICAgfSksIG9wdGlvbnNMaXN0KVxuICAgICAgKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IG5leHRQcm9wcy5vcHRpb25zLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IG5leHRQcm9wcy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gbmV4dFByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBzb3J0TWF0Y2hlc0J5ID0gbmV4dFByb3BzLnNvcnRNYXRjaGVzQnk7XG4gICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBwcmV2U3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBwcmV2U3RhdGUuc2VhcmNoVmFsdWU7IC8vIENhbGN1bGF0ZSBhbmQgY2FjaGUgdGhlIG9wdGlvbnMgd2hpY2ggbWF0Y2ggdGhlIHNlYXJjaFZhbHVlLCBiZWNhdXNlIHdlIHVzZSB0aGlzIGluZm9ybWF0aW9uXG4gICAgICAvLyBpbiBtdWx0aXBsZSBwbGFjZXMgYW5kIGl0IHdvdWxkIGJlIGV4cGVuc2l2ZSB0byBjYWxjdWxhdGUgcmVwZWF0ZWRseS5cblxuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZE9wdGlvbnMsIHNlYXJjaFZhbHVlLCBuZXh0UHJvcHMuYXN5bmMsIEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSwgc29ydE1hdGNoZXNCeSk7XG4gICAgICB2YXIgc3RhdGVVcGRhdGUgPSB7XG4gICAgICAgIG1hdGNoaW5nT3B0aW9uczogbWF0Y2hpbmdPcHRpb25zXG4gICAgICB9O1xuXG4gICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPj0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZVVwZGF0ZS5hY3RpdmVPcHRpb25JbmRleCA9IC0xO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGVVcGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUNvbWJvQm94O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3gsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgYXN5bmM6IGZhbHNlLFxuICBjb21wcmVzc2VkOiBmYWxzZSxcbiAgZnVsbFdpZHRoOiBmYWxzZSxcbiAgaXNDbGVhcmFibGU6IHRydWUsXG4gIG9wdGlvbnM6IFtdLFxuICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICBzaW5nbGVTZWxlY3Rpb246IGZhbHNlLFxuICBwcmVwZW5kOiB1bmRlZmluZWQsXG4gIGFwcGVuZDogdW5kZWZpbmVkLFxuICBzb3J0TWF0Y2hlc0J5OiAnbm9uZSdcbn0pO1xuXG5FdWlDb21ib0JveC5wcm9wVHlwZXMgPSB7XG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIG9wdGlvbnMgYXN5bmNocm9ub3VzbHlcbiAgICAgKi9cbiAgYXN5bmM6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCBjcmVhdGVzIGEgc2hvcnRlciBoZWlnaHQgaW5wdXRcbiAgICAgKi9cbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCBleHBhbmRzIHRvIHRoZSBlbnRpcmUgd2lkdGggYXZhaWxhYmxlXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFNob3dzIGEgYnV0dG9uIHRoYXQgcXVpY2tseSBjbGVhcnMgYW55IGlucHV0XG4gICAgICovXG4gIGlzQ2xlYXJhYmxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBpbnB1dFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBTd2FwcyB0aGUgZHJvcGRvd24gb3B0aW9ucyBmb3IgYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBEb2Vzbid0IHNob3cgdGhlIHN1Z2dlc3Rpb25zIGxpc3QvZHJvcGRvd25cbiAgICAgKi9cbiAgbm9TdWdnZXN0aW9uczogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgcXVlcnkgaW4gdGhlIGNvbWJvIGJveCBpcyBwYXJzZWRcbiAgICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuYW55LFxuICBvbktleURvd246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQ2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIHRleHQgcXVlcnkgaW4gdGhlIHNlYXJjaCBib3ggaXMgcGFyc2VkXG4gICAgICovXG4gIG9uU2VhcmNoQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBwbGFjZWhvbGRlciBvZiB0aGUgaW5wdXRcbiAgICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRXZlcnkgb3B0aW9uIG11c3QgYmUgdGhlIHNhbWUgaGVpZ2h0IGFuZCBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IGlmIHVzaW5nIGEgY3VzdG9tIHJlbmRlclxuICAgICAqL1xuICByb3dIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgb25seSBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGEgc2luZ2xlIG9wdGlvbi4gU2V0IHRvIGB7IGFzUGxhaW5UZXh0OiB0cnVlIH1gIHRvIG5vdCByZW5kZXIgaW5wdXQgc2VsZWN0aW9uIGFzIHBpbGxzXG4gICAgICovXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogRGlzcGxheSBtYXRjaGluZyBvcHRpb25zIGJ5OlxuICAgICAqIGBzdGFydHNXaXRoYDogbW92ZXMgaXRlbXMgdGhhdCBzdGFydCB3aXRoIHNlYXJjaCB2YWx1ZSB0byB0b3Agb2YgdGhlIGxpc3Q7XG4gICAgICogYG5vbmVgOiBkb24ndCBjaGFuZ2UgdGhlIHNvcnQgb3JkZXIgb2YgaW5pdGlhbCBvYmplY3RcbiAgICAgKi9cbiAgc29ydE1hdGNoZXNCeTogUHJvcFR5cGVzLm9uZU9mKFtcIm5vbmVcIiwgXCJzdGFydHNXaXRoXCJdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgaW5wdXQuIEl0IHdvbid0IHNob3cgaWYgYHNpbmdsZVNlbGVjdGlvbmAgaXMgc2V0IHRvIGBmYWxzZWAuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBhZnRlciBpbnB1dC4gSXQgd29uJ3Qgc2hvdyBpZiBgc2luZ2xlU2VsZWN0aW9uYCBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBIHNwZWNpYWwgY2hhcmFjdGVyIHRvIHVzZSBhcyBhIHZhbHVlIHNlcGFyYXRvci4gVHlwaWNhbGx5IGEgY29tbWEgYCxgXG4gICAgICovXG4gIGRlbGltaXRlcjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgaW5wdXQgc2hvdWxkIGhhdmUgZm9jdXMgd2hlbiB0aGUgY29tcG9uZW50IGxvYWRzXG4gICAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVxdWlyZWQgd2hlbiByZW5kZXJpbmcgd2l0aG91dCBhIHZpc2libGUgbGFiZWwgZnJvbSBbRXVpRm9ybVJvd10oLyMvZm9ybXMvZm9ybS1sYXlvdXRzKS5cbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUmVmZXJlbmNlIElEIG9mIGEgdGV4dCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHZpc2libGUgbGFiZWwgZm9yIHRoZSBjb21ibyBib3ggd2hlbiBub3RcbiAgICAgKiBzdXBwbGllZCBieSBgYXJpYS1sYWJlbGAgb3IgZnJvbSBbRXVpRm9ybVJvd10oLyMvZm9ybXMvZm9ybS1sYXlvdXRzKS5cbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wia2V5XCIsIFwiaXNHcm91cExhYmVsT3B0aW9uXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiZGF0YS10ZXN0LXN1YmpcIiwgXCJhY3RpdmVPcHRpb25JbmRleFwiLCBcImFyZUFsbE9wdGlvbnNTZWxlY3RlZFwiLCBcImN1c3RvbU9wdGlvblRleHRcIiwgXCJmdWxsV2lkdGhcIiwgXCJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlXCIsIFwiaXNMb2FkaW5nXCIsIFwibGlzdFJlZlwiLCBcIm1hdGNoaW5nT3B0aW9uc1wiLCBcIm9uQ2xvc2VMaXN0XCIsIFwib25DcmVhdGVPcHRpb25cIiwgXCJvbk9wdGlvbkNsaWNrXCIsIFwib25PcHRpb25FbnRlcktleVwiLCBcIm9uU2Nyb2xsXCIsIFwib3B0aW9uUmVmXCIsIFwib3B0aW9uc1wiLCBcInBvc2l0aW9uXCIsIFwicmVuZGVyT3B0aW9uXCIsIFwicm9vdElkXCIsIFwicm93SGVpZ2h0XCIsIFwic2Nyb2xsVG9JbmRleFwiLCBcInNlYXJjaFZhbHVlXCIsIFwic2VsZWN0ZWRPcHRpb25zXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwidXBkYXRlUG9zaXRpb25cIiwgXCJ3aWR0aFwiLCBcImRlbGltaXRlclwiLCBcInpJbmRleFwiLCBcInN0eWxlXCIsIFwibGlzdGJveEFyaWFMYWJlbFwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QgfSBmcm9tICdyZWFjdC13aW5kb3cnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uLy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpSGlnaGxpZ2h0IH0gZnJvbSAnLi4vLi4vaGlnaGxpZ2h0JztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi8uLi90ZXh0JztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlDb21ib0JveFRpdGxlIH0gZnJvbSAnLi9jb21ib19ib3hfdGl0bGUnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpRmlsdGVyU2VsZWN0SXRlbSB9IGZyb20gJy4uLy4uL2ZpbHRlcl9ncm91cC9maWx0ZXJfc2VsZWN0X2l0ZW0nO1xuaW1wb3J0IHsgRXVpQmFkZ2UgfSBmcm9tICcuLi8uLi9iYWRnZS8nO1xuaW1wb3J0IHsgRXVpUG9wb3ZlclBhbmVsIH0gZnJvbSAnLi4vLi4vcG9wb3Zlci9wb3BvdmVyX3BhbmVsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgT1BUSU9OX0NPTlRFTlRfQ0xBU1NOQU1FID0gJ2V1aUNvbWJvQm94T3B0aW9uX19jb250ZW50JztcblxudmFyIGhpdEVudGVyQmFkZ2UgPSBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCB7XG4gIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW50ZXJCYWRnZVwiLFxuICBjb2xvcjogXCJob2xsb3dcIixcbiAgaWNvblR5cGU6IFwicmV0dXJuS2V5XCIsXG4gIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCJcbn0pO1xuXG5leHBvcnQgdmFyIEV1aUNvbWJvQm94T3B0aW9uc0xpc3QgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZJbnN0YW5jZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsaXN0UmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RCb3hSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlUG9zaXRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gV2FpdCBhIGJlYXQgZm9yIHRoZSBET00gdG8gdXBkYXRlLCBzaW5jZSB3ZSBkZXBlbmQgb24gRE9NIGVsZW1lbnRzJyBib3VuZHMuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5wcm9wcy51cGRhdGVQb3NpdGlvbihfdGhpcy5saXN0UmVmSW5zdGFuY2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VMaXN0T25TY3JvbGxcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBDbG9zZSB0aGUgbGlzdCB3aGVuIGEgc2Nyb2xsIGV2ZW50IGhhcHBlbnMsIGJ1dCBub3QgaWYgdGhlIHNjcm9sbCBoYXBwZW5lZCBpbiB0aGUgb3B0aW9ucyBsaXN0LlxuICAgICAgLy8gVGhpcyBtaXJyb3JzIEZpcmVmb3gncyBhcHByb2FjaCBvZiBhdXRvLWNsb3NpbmcgYHNlbGVjdGAgZWxlbWVudHMgb25zY3JvbGwuXG4gICAgICBpZiAoX3RoaXMubGlzdFJlZkluc3RhbmNlICYmIGV2ZW50LnRhcmdldCAmJiBfdGhpcy5saXN0UmVmSW5zdGFuY2UuY29udGFpbnMoZXZlbnQudGFyZ2V0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25DbG9zZUxpc3QoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5wcm9wcy5saXN0UmVmKHJlZik7XG5cbiAgICAgIF90aGlzLmxpc3RSZWZJbnN0YW5jZSA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRMaXN0UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RSZWYgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0TGlzdEJveFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0Qm94UmVmID0gcmVmO1xuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBfdGhpcy5wcm9wcy5saXN0Ym94QXJpYUxhYmVsKTtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnaWQnLCBfdGhpcy5wcm9wcy5yb290SWQoJ2xpc3Rib3gnKSk7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbGlzdGJveCcpO1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsICcwJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiTGlzdFJvd1wiLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIF9vcHRpb24ka2V5O1xuXG4gICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgICAgICBpbmRleCA9IF9yZWYuaW5kZXgsXG4gICAgICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlO1xuICAgICAgdmFyIG9wdGlvbiA9IGRhdGFbaW5kZXhdO1xuXG4gICAgICB2YXIga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgICBpc0dyb3VwTGFiZWxPcHRpb24gPSBvcHRpb24uaXNHcm91cExhYmVsT3B0aW9uLFxuICAgICAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICAgIHZhbHVlID0gb3B0aW9uLnZhbHVlLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wcy5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIG9wdGlvblJlZiA9IF90aGlzJHByb3BzLm9wdGlvblJlZixcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzLnJlbmRlck9wdGlvbixcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzLnNlYXJjaFZhbHVlLFxuICAgICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzLnJvb3RJZDtcblxuICAgICAgaWYgKGlzR3JvdXBMYWJlbE9wdGlvbikge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAga2V5OiBrZXkgIT09IG51bGwgJiYga2V5ICE9PSB2b2lkIDAgPyBrZXkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94VGl0bGUsIG51bGwsIGxhYmVsKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGVja2VkID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggJiYgc2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsID09PSBsYWJlbCAmJiBzZWxlY3RlZE9wdGlvbnNbMF0ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgY2hlY2tlZCA9ICdvbic7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25Jc0ZvY3VzZWQgPSBhY3RpdmVPcHRpb25JbmRleCA9PT0gaW5kZXg7XG4gICAgICB2YXIgb3B0aW9uSXNEaXNhYmxlZCA9IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSAmJiBvcHRpb24uZGlzYWJsZWQgPT09IHRydWU7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGaWx0ZXJTZWxlY3RJdGVtLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAga2V5OiAoX29wdGlvbiRrZXkgPSBvcHRpb24ua2V5KSAhPT0gbnVsbCAmJiBfb3B0aW9uJGtleSAhPT0gdm9pZCAwID8gX29wdGlvbiRrZXkgOiBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICBpZiAob25PcHRpb25DbGljaykge1xuICAgICAgICAgICAgb25PcHRpb25DbGljayhvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiBvcHRpb25SZWYuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgaW5kZXgpLFxuICAgICAgICBpc0ZvY3VzZWQ6IG9wdGlvbklzRm9jdXNlZCxcbiAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgc2hvd0ljb25zOiBzaW5nbGVTZWxlY3Rpb24gPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIGlkOiByb290SWQoXCJfb3B0aW9uLVwiLmNvbmNhdChpbmRleCkpLFxuICAgICAgICB0aXRsZTogbGFiZWxcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgfSwgcmVuZGVyT3B0aW9uID8gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IE9QVElPTl9DT05URU5UX0NMQVNTTkFNRVxuICAgICAgfSwgcmVuZGVyT3B0aW9uKG9wdGlvbiwgc2VhcmNoVmFsdWUsICdldWlDb21ib0JveE9wdGlvbl9fcmVuZGVyT3B0aW9uJykpIDogX19fRW1vdGlvbkpTWChFdWlIaWdobGlnaHQsIHtcbiAgICAgICAgc2VhcmNoOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBPUFRJT05fQ09OVEVOVF9DTEFTU05BTUVcbiAgICAgIH0sIGxhYmVsKSwgb3B0aW9uSXNGb2N1c2VkICYmICFvcHRpb25Jc0Rpc2FibGVkID8gaGl0RW50ZXJCYWRnZSA6IG51bGwpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveE9wdGlvbnNMaXN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBXYWl0IGEgZnJhbWUsIG90aGVyd2lzZSBtb3ZpbmcgZm9jdXMgZnJvbSBvbmUgY29tYm8gYm94IHRvIGFub3RoZXIgd2lsbCByZXN1bHQgaW4gdGhlIGNsYXNzXG4gICAgICAvLyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGJvZHkuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2V1aUJvZHktaGFzUG9ydGFsQ29udGVudCcpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVQb3NpdGlvbik7IC8vIEZpcmVmb3ggd2lsbCB0cmlnZ2VyIGEgc2Nyb2xsIGV2ZW50IGluIG1hbnkgY29tbW9uIHNpdHVhdGlvbnMgd2hlbiB0aGUgb3B0aW9ucyBsaXN0IGRpdiBpcyBhcHBlbmRlZFxuICAgICAgLy8gdG8gdGhlIERPTTsgaW4gdGVzdGluZyBpdCB3YXMgYWx3YXlzIHdpdGhpbiAxMDBtcywgYnV0IHNldHRpbmcgYSB0aW1lb3V0IGhlcmUgZm9yIDUwMG1zIHRvIGJlIHNhZmVcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBfdGhpczIuY2xvc2VMaXN0T25TY3JvbGwsIHtcbiAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICAgIC8vIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgYXMgd2Ugd29uJ3QgY2FsbCBwcmV2ZW50RGVmYXVsdFxuICAgICAgICAgIGNhcHR1cmU6IHRydWUgLy8gc2Nyb2xsIGV2ZW50cyBkb24ndCBidWJibGUsIHRoZXkgbXVzdCBiZSBjYXB0dXJlZCBpbnN0ZWFkXG5cbiAgICAgICAgfSk7XG4gICAgICB9LCA1MDApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIG9wdGlvbnMgPSBwcmV2UHJvcHMub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBwcmV2UHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gcHJldlByb3BzLnNlYXJjaFZhbHVlOyAvLyBXZSBkb24ndCBjb21wYXJlIG1hdGNoaW5nT3B0aW9ucyBiZWNhdXNlIHRoYXQgd2lsbCByZXN1bHQgaW4gYSBsb29wLlxuXG4gICAgICBpZiAoc2VhcmNoVmFsdWUgIT09IHRoaXMucHJvcHMuc2VhcmNoVmFsdWUgfHwgb3B0aW9ucyAhPT0gdGhpcy5wcm9wcy5vcHRpb25zIHx8IHNlbGVjdGVkT3B0aW9ucyAhPT0gdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saXN0UmVmICYmIHR5cGVvZiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSBwcmV2UHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgdGhpcy5saXN0UmVmLnNjcm9sbFRvSXRlbSh0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LCAnYXV0bycpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnZXVpQm9keS1oYXNQb3J0YWxDb250ZW50Jyk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVQb3NpdGlvbik7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5jbG9zZUxpc3RPblNjcm9sbCwge1xuICAgICAgICBjYXB0dXJlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRhdGFUZXN0U3ViaiA9IF90aGlzJHByb3BzMlsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBhcmVBbGxPcHRpb25zU2VsZWN0ZWQgPSBfdGhpcyRwcm9wczIuYXJlQWxsT3B0aW9uc1NlbGVjdGVkLFxuICAgICAgICAgIGN1c3RvbU9wdGlvblRleHQgPSBfdGhpcyRwcm9wczIuY3VzdG9tT3B0aW9uVGV4dCxcbiAgICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wczIuZnVsbFdpZHRoLFxuICAgICAgICAgIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczIuaXNMb2FkaW5nLFxuICAgICAgICAgIGxpc3RSZWYgPSBfdGhpcyRwcm9wczIubGlzdFJlZixcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRwcm9wczIubWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICAgIG9uQ2xvc2VMaXN0ID0gX3RoaXMkcHJvcHMyLm9uQ2xvc2VMaXN0LFxuICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHMyLm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczIub25PcHRpb25DbGljayxcbiAgICAgICAgICBvbk9wdGlvbkVudGVyS2V5ID0gX3RoaXMkcHJvcHMyLm9uT3B0aW9uRW50ZXJLZXksXG4gICAgICAgICAgb25TY3JvbGwgPSBfdGhpcyRwcm9wczIub25TY3JvbGwsXG4gICAgICAgICAgb3B0aW9uUmVmID0gX3RoaXMkcHJvcHMyLm9wdGlvblJlZixcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMyLm9wdGlvbnMsXG4gICAgICAgICAgX3RoaXMkcHJvcHMyJHBvc2l0aW9uID0gX3RoaXMkcHJvcHMyLnBvc2l0aW9uLFxuICAgICAgICAgIHBvc2l0aW9uID0gX3RoaXMkcHJvcHMyJHBvc2l0aW9uID09PSB2b2lkIDAgPyAnYm90dG9tJyA6IF90aGlzJHByb3BzMiRwb3NpdGlvbixcbiAgICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczIucmVuZGVyT3B0aW9uLFxuICAgICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzMi5yb290SWQsXG4gICAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMyLnJvd0hlaWdodCxcbiAgICAgICAgICBzY3JvbGxUb0luZGV4ID0gX3RoaXMkcHJvcHMyLnNjcm9sbFRvSW5kZXgsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczIuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uID0gX3RoaXMkcHJvcHMyLnVwZGF0ZVBvc2l0aW9uLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHMyLndpZHRoLFxuICAgICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzMi5kZWxpbWl0ZXIsXG4gICAgICAgICAgekluZGV4ID0gX3RoaXMkcHJvcHMyLnpJbmRleCxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzMi5zdHlsZSxcbiAgICAgICAgICBsaXN0Ym94QXJpYUxhYmVsID0gX3RoaXMkcHJvcHMyLmxpc3Rib3hBcmlhTGFiZWwsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZDIpO1xuXG4gICAgICB2YXIgZW1wdHlTdGF0ZUNvbnRlbnQ7XG5cbiAgICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgICAgICAgIGd1dHRlclNpemU6IFwic1wiLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgICBncm93OiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgICAgc2l6ZTogXCJtXCJcbiAgICAgICAgfSkpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5sb2FkaW5nT3B0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiTG9hZGluZyBvcHRpb25zXCJcbiAgICAgICAgfSkpKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVmFsdWUgJiYgbWF0Y2hpbmdPcHRpb25zICYmIG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKG9uQ3JlYXRlT3B0aW9uICYmIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICBpZiAoZGVsaW1pdGVyICYmIHNlYXJjaFZhbHVlLmluY2x1ZGVzKGRlbGltaXRlcikpIHtcbiAgICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2VtcHR5U3RhdGVUZXh0XCJcbiAgICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmRlbGltaXRlck1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgZGVmYXVsdDogXCJBZGQgZWFjaCBpdGVtIHNlcGFyYXRlZCBieSB7ZGVsaW1pdGVyfVwiLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXI6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgZGVsaW1pdGVyKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSksIGhpdEVudGVyQmFkZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb25Gb3JWYWx1ZSA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoc2VhcmNoVmFsdWUsIHNlbGVjdGVkT3B0aW9ucyk7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbkZvclZhbHVlKSB7XG4gICAgICAgICAgICAgIC8vIERpc2FsbG93IGR1cGxpY2F0ZSBjdXN0b20gb3B0aW9ucy5cbiAgICAgICAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmFscmVhZHlBZGRlZFwiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwie2xhYmVsfSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkXCIsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWxlY3RlZE9wdGlvbkZvclZhbHVlLmxhYmVsKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGhpZ2hsaWdodFNlYXJjaFZhbHVlID0gZnVuY3Rpb24gaGlnaGxpZ2h0U2VhcmNoVmFsdWUodGV4dCwgc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgvKFxce3NlYXJjaFZhbHVlfSkvLCAnZ2knKTtcbiAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSB0ZXh0LnNwbGl0KHJlZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgICAgIH0sIHBhcnRzLm1hcChmdW5jdGlvbiAocGFydCwgaWR4KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGFydC5tYXRjaChyZWcpID8gX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaWR4XG4gICAgICAgICAgICAgICAgICB9LCBzZWFyY2hWYWx1ZSkgOiBwYXJ0O1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgICAgICAgICB9LCBjdXN0b21PcHRpb25UZXh0ID8gaGlnaGxpZ2h0U2VhcmNoVmFsdWUoY3VzdG9tT3B0aW9uVGV4dCwgc2VhcmNoVmFsdWUpIDogX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmNyZWF0ZUN1c3RvbU9wdGlvblwiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiQWRkIHtzZWFyY2hWYWx1ZX0gYXMgYSBjdXN0b20gb3B0aW9uXCIsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWFyY2hWYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKSwgaGl0RW50ZXJCYWRnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0Lm5vTWF0Y2hpbmdPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIntzZWFyY2hWYWx1ZX0gZG9lc24ndCBtYXRjaCBhbnkgb3B0aW9uc1wiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlYXJjaFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0Lm5vQXZhaWxhYmxlT3B0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVGhlcmUgYXJlbid0IGFueSBvcHRpb25zIGF2YWlsYWJsZVwiXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJlQWxsT3B0aW9uc1NlbGVjdGVkKSB7XG4gICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5hbGxPcHRpb25zU2VsZWN0ZWRcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIllvdSd2ZSBzZWxlY3RlZCBhbGwgYXZhaWxhYmxlIG9wdGlvbnNcIlxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbXB0eVN0YXRlID0gZW1wdHlTdGF0ZUNvbnRlbnQgPyBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgICAgc2l6ZTogXCJ4c1wiLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdF9fZW1wdHlcIlxuICAgICAgfSwgZW1wdHlTdGF0ZUNvbnRlbnQpIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIG51bVZpc2libGVPcHRpb25zID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA8IDcgPyBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIDogNztcbiAgICAgIHZhciBoZWlnaHQgPSBudW1WaXNpYmxlT3B0aW9ucyAqIChyb3dIZWlnaHQgKyAxKTsgLy8gQWRkIG9uZSBmb3IgdGhlIGJvcmRlclxuICAgICAgLy8gYm91bmRlZCBieSBtYXgtaGVpZ2h0IG9mIGV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX3Jvd1dyYXBcblxuICAgICAgdmFyIGJvdW5kZWRIZWlnaHQgPSBoZWlnaHQgPiAyMDAgPyAyMDAgOiBoZWlnaHQ7XG5cbiAgICAgIHZhciBvcHRpb25zTGlzdCA9IF9fX0Vtb3Rpb25KU1goRml4ZWRTaXplTGlzdCwge1xuICAgICAgICBoZWlnaHQ6IGJvdW5kZWRIZWlnaHQsXG4gICAgICAgIG9uU2Nyb2xsOiBvblNjcm9sbCxcbiAgICAgICAgaXRlbUNvdW50OiBtYXRjaGluZ09wdGlvbnMubGVuZ3RoLFxuICAgICAgICBpdGVtU2l6ZTogcm93SGVpZ2h0LFxuICAgICAgICBpdGVtRGF0YTogbWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICByZWY6IHRoaXMuc2V0TGlzdFJlZixcbiAgICAgICAgaW5uZXJSZWY6IHRoaXMuc2V0TGlzdEJveFJlZixcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9LCB0aGlzLkxpc3RSb3cpO1xuICAgICAgLyoqXG4gICAgICAgKiBSZXVzaW5nIHRoZSBFdWlQb3BvdmVyX19wYW5lbCBjbGFzc2VzIHRvIGhlbHAgd2l0aCBjb25zaXN0ZW5jeS9tYWludGVuYW5jZS5cbiAgICAgICAqIEJ1dCB0aGlzIHNob3VsZCByZWFsbHkgYmUgY29udmVydGVkIHRvIHVzZXIgdGhlIHBvcG92ZXIgY29tcG9uZW50LlxuICAgICAgICovXG5cblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveE9wdGlvbnNMaXN0Jyk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyUGFuZWwsIF9leHRlbmRzKHtcbiAgICAgICAgcGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgICAgICBoYXNTaGFkb3c6IGZhbHNlLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHBhbmVsUmVmOiB0aGlzLmxpc3RSZWZDYWxsYmFjayxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNvbWJvQm94T3B0aW9uc0xpc3QgXCIuY29uY2F0KGRhdGFUZXN0U3ViaiksXG4gICAgICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKSwge30sIHtcbiAgICAgICAgICB6SW5kZXg6IHpJbmRleFxuICAgICAgICB9KSxcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBpc0F0dGFjaGVkOiB0cnVlLFxuICAgICAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX3Jvd1dyYXBcIlxuICAgICAgfSwgZW1wdHlTdGF0ZSB8fCBvcHRpb25zTGlzdCkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb21ib0JveE9wdGlvbnNMaXN0O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICAnZGF0YS10ZXN0LXN1YmonOiAnJyxcbiAgcm93SGVpZ2h0OiAyOSAvLyByb3cgaGVpZ2h0IG9mIGRlZmF1bHQgb3B0aW9uIHJlbmRlcmVyXG5cbn0pO1xuXG5FdWlDb21ib0JveE9wdGlvbnNMaXN0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcbiAgYWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGFyZUFsbE9wdGlvbnNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGxpc3Rib3hBcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSBjdXN0b20gdGV4dCBvcHRpb24uIFlvdSBjYW4gdXNlIGB7c2VhcmNoVmFsdWV9YCBpbnNpZGUgeW91ciBzdHJpbmcgdG8gYmV0dGVyIGN1c3RvbWl6ZSB5b3VyIHRleHQuXG4gICAgICAgKiBJdCB3b24ndCBzaG93IGlmIHRoZXJlJ3Mgbm8gb25DcmVhdGVPcHRpb24uXG4gICAgICAgKi9cbiAgY3VzdG9tT3B0aW9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGxpc3RSZWY6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgbWF0Y2hpbmdPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIG9uQ2xvc2VMaXN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNyZWF0ZU9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uT3B0aW9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbk9wdGlvbkVudGVyS2V5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TY3JvbGw6IFByb3BUeXBlcy5hbnksXG4gIG9wdGlvblJlZjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIEFycmF5IG9mIEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uIG9iamVjdHMuIFNlZSAjRXVpQ29tYm9Cb3hPcHRpb25PcHRpb25cbiAgICAgICAqL1xuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwiYm90dG9tXCJdKSxcbiAgcmVuZGVyT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgcm9vdElkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIHJvd0hlaWdodDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBzY3JvbGxUb0luZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBzZWFyY2hWYWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWxlY3RlZE9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgdXBkYXRlUG9zaXRpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICBkZWxpbWl0ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHpJbmRleDogUHJvcFR5cGVzLm51bWJlclxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic2VhcmNoXCIsIFwic3RyaWN0XCIsIFwiaGlnaGxpZ2h0QWxsXCIsIFwiaGFzU2NyZWVuUmVhZGVySGVscFRleHRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlNYXJrIH0gZnJvbSAnLi4vbWFyayc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgaGlnaGxpZ2h0ID0gZnVuY3Rpb24gaGlnaGxpZ2h0KHNlYXJjaFN1YmplY3QsIHNlYXJjaFZhbHVlLCBpc1N0cmljdCwgaGlnaGxpZ2h0QWxsLCBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCkge1xuICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHNlYXJjaFN1YmplY3Q7XG4gIH1cblxuICBpZiAoIXNlYXJjaFN1YmplY3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChoaWdobGlnaHRBbGwpIHtcbiAgICB2YXIgY2h1bmtzID0gZ2V0SGlnaHRsaWdodFdvcmRzKHNlYXJjaFN1YmplY3QsIHNlYXJjaFZhbHVlLCBpc1N0cmljdCk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGNodW5rcy5tYXAoZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICB2YXIgZW5kID0gY2h1bmsuZW5kLFxuICAgICAgICAgIGhpZ2hsaWdodCA9IGNodW5rLmhpZ2hsaWdodCxcbiAgICAgICAgICBzdGFydCA9IGNodW5rLnN0YXJ0O1xuICAgICAgdmFyIHZhbHVlID0gc2VhcmNoU3ViamVjdC5zdWJzdHIoc3RhcnQsIGVuZCAtIHN0YXJ0KTtcblxuICAgICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlNYXJrLCB7XG4gICAgICAgICAga2V5OiBzdGFydCxcbiAgICAgICAgICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDogaGFzU2NyZWVuUmVhZGVySGVscFRleHRcbiAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSkpO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hTdWJqZWN0ID0gaXNTdHJpY3QgPyBzZWFyY2hTdWJqZWN0IDogc2VhcmNoU3ViamVjdC50b0xvd2VyQ2FzZSgpO1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gaXNTdHJpY3QgPyBzZWFyY2hWYWx1ZSA6IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBpbmRleE9mTWF0Y2ggPSBub3JtYWxpemVkU2VhcmNoU3ViamVjdC5pbmRleE9mKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSk7XG5cbiAgaWYgKGluZGV4T2ZNYXRjaCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc2VhcmNoU3ViamVjdDtcbiAgfVxuXG4gIHZhciBwcmVNYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyKDAsIGluZGV4T2ZNYXRjaCk7XG4gIHZhciBtYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyKGluZGV4T2ZNYXRjaCwgc2VhcmNoVmFsdWUubGVuZ3RoKTtcbiAgdmFyIHBvc3RNYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyKGluZGV4T2ZNYXRjaCArIHNlYXJjaFZhbHVlLmxlbmd0aCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBwcmVNYXRjaCwgX19fRW1vdGlvbkpTWChFdWlNYXJrLCB7XG4gICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IGhhc1NjcmVlblJlYWRlckhlbHBUZXh0XG4gIH0sIG1hdGNoKSwgcG9zdE1hdGNoKTtcbn07XG5cbnZhciBnZXRIaWdodGxpZ2h0V29yZHMgPSBmdW5jdGlvbiBnZXRIaWdodGxpZ2h0V29yZHMoc2VhcmNoU3ViamVjdCwgc2VhcmNoVmFsdWUsIGlzU3RyaWN0KSB7XG4gIHZhciByZWdleCA9IG5ldyBSZWdFeHAoc2VhcmNoVmFsdWUsIGlzU3RyaWN0ID8gJ2cnIDogJ2dpJyk7XG4gIHZhciBtYXRjaGVzID0gW107XG4gIHZhciBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhzZWFyY2hTdWJqZWN0KSkgIT09IG51bGwpIHtcbiAgICBtYXRjaGVzLnB1c2goe1xuICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4LFxuICAgICAgZW5kOiAobWF0Y2guaW5kZXggfHwgMCkgKyBtYXRjaFswXS5sZW5ndGhcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmaWxsSW5DaHVua3MobWF0Y2hlcywgc2VhcmNoU3ViamVjdC5sZW5ndGgpO1xufTtcblxudmFyIGZpbGxJbkNodW5rcyA9IGZ1bmN0aW9uIGZpbGxJbkNodW5rcyhjaHVua3NUb0hpZ2hsaWdodCwgdG90YWxMZW5ndGgpIHtcbiAgdmFyIGFsbENodW5rcyA9IFtdO1xuXG4gIHZhciBhcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQoc3RhcnQsIGVuZCwgaGlnaGxpZ2h0KSB7XG4gICAgaWYgKGVuZCAtIHN0YXJ0ID4gMCkge1xuICAgICAgYWxsQ2h1bmtzLnB1c2goe1xuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIGVuZDogZW5kLFxuICAgICAgICBoaWdobGlnaHQ6IGhpZ2hsaWdodFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGlmIChjaHVua3NUb0hpZ2hsaWdodC5sZW5ndGggPT09IDApIHtcbiAgICBhcHBlbmQoMCwgdG90YWxMZW5ndGgsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGFzdEluZGV4ID0gMDtcbiAgICBjaHVua3NUb0hpZ2hsaWdodC5mb3JFYWNoKGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgYXBwZW5kKGxhc3RJbmRleCwgY2h1bmsuc3RhcnQsIGZhbHNlKTtcbiAgICAgIGFwcGVuZChjaHVuay5zdGFydCwgY2h1bmsuZW5kLCB0cnVlKTtcbiAgICAgIGxhc3RJbmRleCA9IGNodW5rLmVuZDtcbiAgICB9KTtcbiAgICBhcHBlbmQobGFzdEluZGV4LCB0b3RhbExlbmd0aCwgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIGFsbENodW5rcztcbn07XG5cbmV4cG9ydCB2YXIgRXVpSGlnaGxpZ2h0ID0gZnVuY3Rpb24gRXVpSGlnaGxpZ2h0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgc2VhcmNoID0gX3JlZi5zZWFyY2gsXG4gICAgICBfcmVmJHN0cmljdCA9IF9yZWYuc3RyaWN0LFxuICAgICAgc3RyaWN0ID0gX3JlZiRzdHJpY3QgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRzdHJpY3QsXG4gICAgICBfcmVmJGhpZ2hsaWdodEFsbCA9IF9yZWYuaGlnaGxpZ2h0QWxsLFxuICAgICAgaGlnaGxpZ2h0QWxsID0gX3JlZiRoaWdobGlnaHRBbGwgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRoaWdobGlnaHRBbGwsXG4gICAgICBfcmVmJGhhc1NjcmVlblJlYWRlckggPSBfcmVmLmhhc1NjcmVlblJlYWRlckhlbHBUZXh0LFxuICAgICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQgPSBfcmVmJGhhc1NjcmVlblJlYWRlckggPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGhhc1NjcmVlblJlYWRlckgsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCByZXN0KSwgaGlnaGxpZ2h0KGNoaWxkcmVuLCBzZWFyY2gsIHN0cmljdCwgaGlnaGxpZ2h0QWxsLCBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCkpO1xufTtcbkV1aUhpZ2hsaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIHN0cmluZyB0byBoaWdobGlnaHQgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIFdoYXQgdG8gc2VhcmNoIGZvclxuICAgICAgICovXG4gIHNlYXJjaDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogU2hvdWxkIHRoZSBzZWFyY2ggYmUgc3RyaWN0IG9yIG5vdFxuICAgICAgICovXG4gIHN0cmljdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBTaG91bGQgaGlnaGxpZ2h0IGFsbCBtYXRjaGVzXG4gICAgICAgKi9cbiAgaGlnaGxpZ2h0QWxsOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGFzU2NyZWVuUmVhZGVySGVscFRleHRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aU1hcmtTdHlsZXMgfSBmcm9tICcuL21hcmsuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aU1hcmsgPSBmdW5jdGlvbiBFdWlNYXJrKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRoYXNTY3JlZW5SZWFkZXJIID0gX3JlZi5oYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCxcbiAgICAgIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ID0gX3JlZiRoYXNTY3JlZW5SZWFkZXJIID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNTY3JlZW5SZWFkZXJILFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciB1c2VUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBoaWdobGlnaHRTdGFydCA9IHVzZUV1aUkxOG4oJ2V1aU1hcmsuaGlnaGxpZ2h0U3RhcnQnLCAnaGlnaGxpZ2h0IHN0YXJ0Jyk7XG4gIHZhciBoaWdobGlnaHRFbmQgPSB1c2VFdWlJMThuKCdldWlNYXJrLmhpZ2hsaWdodEVuZCcsICdoaWdobGlnaHQgZW5kJyk7XG4gIHZhciBzdHlsZXMgPSBldWlNYXJrU3R5bGVzKHVzZVRoZW1lLCB7XG4gICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IGhhc1NjcmVlblJlYWRlckhlbHBUZXh0LFxuICAgIGhpZ2hsaWdodFN0YXJ0OiBoaWdobGlnaHRTdGFydCxcbiAgICBoaWdobGlnaHRFbmQ6IGhpZ2hsaWdodEVuZFxuICB9KTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlNYXJrJywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJtYXJrXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IFtzdHlsZXMsIFwiO2xhYmVsOkV1aU1hcms7XCJdLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aU1hcmsucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byByZW1vdmUgdGhlIENTUyA6YmVmb3JlIGFuZCA6YWZ0ZXJcbiAgICAgICAqIHNjcmVlbiByZWFkZXIgaGVscGVyIHRleHRcbiAgICAgICAqL1xuICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5leHBvcnQgdmFyIGV1aU1hcmtTdHlsZXMgPSBmdW5jdGlvbiBldWlNYXJrU3R5bGVzKF9yZWYsIF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZTtcbiAgdmFyIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ID0gX3JlZjIuaGFzU2NyZWVuUmVhZGVySGVscFRleHQsXG4gICAgICBoaWdobGlnaHRTdGFydCA9IF9yZWYyLmhpZ2hsaWdodFN0YXJ0LFxuICAgICAgaGlnaGxpZ2h0RW5kID0gX3JlZjIuaGlnaGxpZ2h0RW5kO1xuICAvLyBUT0RPOiBXYXMgJGV1aUZvY3VzQmFja2dyb3VuZENvbG9yXG4gIHZhciB0cmFuc3BhcmVuY3kgPSB7XG4gICAgTElHSFQ6IDAuMSxcbiAgICBEQVJLOiAwLjNcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgdHJhbnNwYXJlbmN5W2NvbG9yTW9kZV0pLCBcIjtmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQuYm9sZCwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjtcIiwgaGFzU2NyZWVuUmVhZGVySGVscFRleHQgPT09IHRydWUgJiYgXCJcXG4gICAgICAmOmJlZm9yZSxcXG4gICAgICAmOmFmdGVyIHtcXG4gICAgICAgIFwiLmNvbmNhdChldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6YmVmb3JlIHtcXG4gICAgICAgIGNvbnRlbnQ6ICcgW1wiKS5jb25jYXQoaGlnaGxpZ2h0U3RhcnQsIFwiXSAnO1xcbiAgICAgIH1cXG5cXG4gICAgICAmOmFmdGVyIHtcXG4gICAgICAgIGNvbnRlbnQ6ICcgW1wiKS5jb25jYXQoaGlnaGxpZ2h0RW5kLCBcIl0gJztcXG4gICAgICB9XFxuICAgIFwiKSwgXCI7O2xhYmVsOmV1aU1hcmtTdHlsZXM7XCIpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveFRpdGxlID0gZnVuY3Rpb24gRXVpQ29tYm9Cb3hUaXRsZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hUaXRsZVwiXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5FdWlDb21ib0JveFRpdGxlLnByb3BUeXBlcyA9IHt9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiY2hlY2tlZFwiLCBcImlzRm9jdXNlZFwiLCBcInNob3dJY29uc1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtIH0gZnJvbSAnLi4vZmxleCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgcmVzb2x2ZUljb25BbmRDb2xvciA9IGZ1bmN0aW9uIHJlc29sdmVJY29uQW5kQ29sb3IoY2hlY2tlZCkge1xuICBpZiAoIWNoZWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWNvbjogJ2VtcHR5J1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gY2hlY2tlZCA9PT0gJ29uJyA/IHtcbiAgICBpY29uOiAnY2hlY2snLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfSA6IHtcbiAgICBpY29uOiAnY3Jvc3MnLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpRmlsdGVyU2VsZWN0SXRlbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpRmlsdGVyU2VsZWN0SXRlbSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGaWx0ZXJTZWxlY3RJdGVtKTtcblxuICBmdW5jdGlvbiBFdWlGaWx0ZXJTZWxlY3RJdGVtKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGaWx0ZXJTZWxlY3RJdGVtKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYnV0dG9uUmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5idXR0b25SZWYpIHtcbiAgICAgICAgX3RoaXMuYnV0dG9uUmVmLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFzRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmhhc0ZvY3VzO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUZpbHRlclNlbGVjdEl0ZW0sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIGNoZWNrZWQgPSBfdGhpcyRwcm9wcy5jaGVja2VkLFxuICAgICAgICAgIGlzRm9jdXNlZCA9IF90aGlzJHByb3BzLmlzRm9jdXNlZCxcbiAgICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wcy5zaG93SWNvbnMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGaWx0ZXJTZWxlY3RJdGVtJywge1xuICAgICAgICAnZXVpRmlsdGVyU2VsZWN0SXRlbS1pc0ZvY3VzZWQnOiBpc0ZvY3VzZWRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgaWNvbk5vZGU7XG5cbiAgICAgIGlmIChzaG93SWNvbnMpIHtcbiAgICAgICAgdmFyIF9yZXNvbHZlSWNvbkFuZENvbG9yID0gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSxcbiAgICAgICAgICAgIGljb24gPSBfcmVzb2x2ZUljb25BbmRDb2xvci5pY29uLFxuICAgICAgICAgICAgY29sb3IgPSBfcmVzb2x2ZUljb25BbmRDb2xvci5jb2xvcjtcblxuICAgICAgICBpY29uTm9kZSA9IF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgICBncm93OiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgdHlwZTogaWNvblxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoX3JlZikge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuYnV0dG9uUmVmID0gX3JlZjtcbiAgICAgICAgfSxcbiAgICAgICAgcm9sZTogXCJvcHRpb25cIixcbiAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IGlzRm9jdXNlZCxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIGd1dHRlclNpemU6IFwic1wiLFxuICAgICAgICBjb21wb25lbnQ6IFwic3BhblwiLFxuICAgICAgICByZXNwb25zaXZlOiBmYWxzZVxuICAgICAgfSwgaWNvbk5vZGUsIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZpbHRlclNlbGVjdEl0ZW1fX2NvbnRlbnRcIixcbiAgICAgICAgY29tcG9uZW50OiBcInNwYW5cIlxuICAgICAgfSwgY2hpbGRyZW4pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUZpbHRlclNlbGVjdEl0ZW07XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGaWx0ZXJTZWxlY3RJdGVtLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHNob3dJY29uczogdHJ1ZVxufSk7XG5cbkV1aUZpbHRlclNlbGVjdEl0ZW0ucHJvcFR5cGVzID0ge1xuICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIl0pLFxuICBzaG93SWNvbnM6IFByb3BUeXBlcy5ib29sLFxuICBpc0ZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgZmxhdHRlbk9wdGlvbkdyb3VwcyA9IGZ1bmN0aW9uIGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9uc09yR3JvdXBzKSB7XG4gIHJldHVybiBvcHRpb25zT3JHcm91cHMucmVkdWNlKGZ1bmN0aW9uIChvcHRpb25zLCBvcHRpb25Pckdyb3VwKSB7XG4gICAgaWYgKG9wdGlvbk9yR3JvdXAub3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuY29uY2F0KG9wdGlvbk9yR3JvdXAub3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucHVzaChvcHRpb25Pckdyb3VwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfSwgW10pO1xufTtcbmV4cG9ydCB2YXIgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSA9IGZ1bmN0aW9uIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoc2VhcmNoVmFsdWUsIHNlbGVjdGVkT3B0aW9ucywgb3B0aW9uS2V5KSB7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbmQoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKSA9PT0gbm9ybWFsaXplZFNlYXJjaFZhbHVlICYmICghb3B0aW9uS2V5IHx8IG9wdGlvbi5rZXkgPT09IG9wdGlvbktleSk7XG4gIH0pO1xufTtcblxudmFyIGNvbGxlY3RNYXRjaGluZ09wdGlvbiA9IGZ1bmN0aW9uIGNvbGxlY3RNYXRjaGluZ09wdGlvbihhY2N1bXVsYXRvciwgb3B0aW9uLCBzZWxlY3RlZE9wdGlvbnMsIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2hvd1ByZXZTZWxlY3RlZCkge1xuICAvLyBPbmx5IHNob3cgb3B0aW9ucyB3aGljaCBoYXZlbid0IHlldCBiZWVuIHNlbGVjdGVkIHVubGVzcyByZXF1ZXN0ZWQuXG4gIHZhciBzZWxlY3RlZE9wdGlvbiA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUob3B0aW9uLmxhYmVsLCBzZWxlY3RlZE9wdGlvbnMsIG9wdGlvbi5rZXkpO1xuXG4gIGlmIChzZWxlY3RlZE9wdGlvbiAmJiAhc2hvd1ByZXZTZWxlY3RlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiB0aGUgb3B0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBwcmUtZmlsdGVyZWQgdGhlbiB3ZSBjYW4gc2tpcCBmaWx0ZXJpbmcgYWdhaW5zdCB0aGUgc2VhcmNoIHZhbHVlLlxuXG5cbiAgaWYgKGlzUHJlRmlsdGVyZWQpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZWRPcHRpb24gPSBvcHRpb24ubGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKG5vcm1hbGl6ZWRPcHRpb24uaW5jbHVkZXMobm9ybWFsaXplZFNlYXJjaFZhbHVlKSkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgfVxufTtcblxuZXhwb3J0IHZhciBnZXRNYXRjaGluZ09wdGlvbnMgPSBmdW5jdGlvbiBnZXRNYXRjaGluZ09wdGlvbnMob3B0aW9ucywgc2VsZWN0ZWRPcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2hvd1ByZXZTZWxlY3RlZCwgc29ydE1hdGNoZXNCeSkge1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBtYXRjaGluZ09wdGlvbnMgPSBbXTtcbiAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICBpZiAob3B0aW9uLm9wdGlvbnMpIHtcbiAgICAgIHZhciBtYXRjaGluZ09wdGlvbnNGb3JHcm91cCA9IFtdO1xuICAgICAgb3B0aW9uLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXBPcHRpb24pIHtcbiAgICAgICAgY29sbGVjdE1hdGNoaW5nT3B0aW9uKG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwLCBncm91cE9wdGlvbiwgc2VsZWN0ZWRPcHRpb25zLCBub3JtYWxpemVkU2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQsIHNob3dQcmV2U2VsZWN0ZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChtYXRjaGluZ09wdGlvbnNGb3JHcm91cC5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEFkZCBvcHRpb24gZm9yIGdyb3VwIGxhYmVsXG4gICAgICAgIG1hdGNoaW5nT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICBrZXk6IG9wdGlvbi5rZXksXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICBpc0dyb3VwTGFiZWxPcHRpb246IHRydWVcbiAgICAgICAgfSk7IC8vIEFkZCBtYXRjaGluZyBvcHRpb25zIGZvciBncm91cFxuICAgICAgICAvLyB1c2UgY29uY2F0IG92ZXIgc3ByZWFkaW5nIHRvIHN1cHBvcnQgbGFyZ2UgYXJyYXlzIC0gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL2RlbW8vamF2YXNjcmlwdC1hcmd1bWVudC1jb3VudFxuXG4gICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IG1hdGNoaW5nT3B0aW9ucy5jb25jYXQobWF0Y2hpbmdPcHRpb25zRm9yR3JvdXApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2xsZWN0TWF0Y2hpbmdPcHRpb24obWF0Y2hpbmdPcHRpb25zLCBvcHRpb24sIHNlbGVjdGVkT3B0aW9ucywgbm9ybWFsaXplZFNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzaG93UHJldlNlbGVjdGVkKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChzb3J0TWF0Y2hlc0J5ID09PSAnc3RhcnRzV2l0aCcpIHtcbiAgICB2YXIgcmVmT2JqID0ge1xuICAgICAgc3RhcnRXaXRoOiBbXSxcbiAgICAgIG90aGVyczogW11cbiAgICB9O1xuICAgIG1hdGNoaW5nT3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIGlmIChvYmplY3QubGFiZWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkpIHtcbiAgICAgICAgcmVmT2JqLnN0YXJ0V2l0aC5wdXNoKG9iamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZPYmoub3RoZXJzLnB1c2gob2JqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZWZPYmouc3RhcnRXaXRoKSwgX3RvQ29uc3VtYWJsZUFycmF5KHJlZk9iai5vdGhlcnMpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGluZ09wdGlvbnM7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wia2V5XCIsIFwibGFiZWxcIiwgXCJjb2xvclwiLCBcIm9uQ2xpY2tcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQXV0b3NpemVJbnB1dCBmcm9tICdyZWFjdC1pbnB1dC1hdXRvc2l6ZSc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dCB9IGZyb20gJy4uLy4uL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dCc7XG5pbXBvcnQgeyBFdWlDb21ib0JveFBpbGwgfSBmcm9tICcuL2NvbWJvX2JveF9waWxsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94SW5wdXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94SW5wdXQsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29tYm9Cb3hJbnB1dCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3hJbnB1dCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZVBvc2l0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFdhaXQgYSBiZWF0IGZvciB0aGUgRE9NIHRvIHVwZGF0ZSwgc2luY2Ugd2UgZGVwZW5kIG9uIERPTSBlbGVtZW50cycgYm91bmRzLlxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMucHJvcHMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uRm9jdXNcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5wcm9wcy5vbkZvY3VzKGV2ZW50KTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25CbHVyXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uQmx1cikge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5wdXRPbkNoYW5nZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wcy5zZWFyY2hWYWx1ZTtcblxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5wdXRSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICB2YXIgYXV0b1NpemVJbnB1dFJlZiA9IF90aGlzLnByb3BzLmF1dG9TaXplSW5wdXRSZWY7XG5cbiAgICAgIGlmIChhdXRvU2l6ZUlucHV0UmVmKSB7XG4gICAgICAgIGF1dG9TaXplSW5wdXRSZWYocmVmKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveElucHV0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gcHJldlByb3BzLnNlYXJjaFZhbHVlOyAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgcG9zaXRpb24gb2YgZXZlcnl0aGluZyBpZiB0aGUgdXNlciBlbnRlcnMgZW5vdWdoIGlucHV0IHRvIGNoYW5nZVxuICAgICAgLy8gdGhlIHNpemUgb2YgdGhlIGlucHV0LlxuXG4gICAgICBpZiAoc2VhcmNoVmFsdWUgIT09IHRoaXMucHJvcHMuc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMi5jb21wcmVzc2VkLFxuICAgICAgICAgIGZvY3VzZWRPcHRpb25JZCA9IF90aGlzJHByb3BzMi5mb2N1c2VkT3B0aW9uSWQsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMyLmZ1bGxXaWR0aCxcbiAgICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuaGFzU2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMyLmlkLFxuICAgICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHMyLmlucHV0UmVmLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczIuaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0xpc3RPcGVuID0gX3RoaXMkcHJvcHMyLmlzTGlzdE9wZW4sXG4gICAgICAgICAgbm9JY29uID0gX3RoaXMkcHJvcHMyLm5vSWNvbixcbiAgICAgICAgICBvbkNsZWFyID0gX3RoaXMkcHJvcHMyLm9uQ2xlYXIsXG4gICAgICAgICAgb25DbGljayA9IF90aGlzJHByb3BzMi5vbkNsaWNrLFxuICAgICAgICAgIG9uQ2xvc2VMaXN0Q2xpY2sgPSBfdGhpcyRwcm9wczIub25DbG9zZUxpc3RDbGljayxcbiAgICAgICAgICBvbk9wZW5MaXN0Q2xpY2sgPSBfdGhpcyRwcm9wczIub25PcGVuTGlzdENsaWNrLFxuICAgICAgICAgIG9uUmVtb3ZlT3B0aW9uID0gX3RoaXMkcHJvcHMyLm9uUmVtb3ZlT3B0aW9uLFxuICAgICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMyLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzMi5yb290SWQsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb25Qcm9wID0gX3RoaXMkcHJvcHMyLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICB0b2dnbGVCdXR0b25SZWYgPSBfdGhpcyRwcm9wczIudG9nZ2xlQnV0dG9uUmVmLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcHJvcHMyLnZhbHVlLFxuICAgICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wczIucHJlcGVuZCxcbiAgICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczIuYXBwZW5kLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMi5pc0xvYWRpbmcsXG4gICAgICAgICAgYXV0b0ZvY3VzID0gX3RoaXMkcHJvcHMyLmF1dG9Gb2N1cyxcbiAgICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wczJbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzMlsnYXJpYS1sYWJlbGxlZGJ5J107XG4gICAgICB2YXIgc2luZ2xlU2VsZWN0aW9uID0gQm9vbGVhbihzaW5nbGVTZWxlY3Rpb25Qcm9wKTtcbiAgICAgIHZhciBhc1BsYWluVGV4dCA9IHNpbmdsZVNlbGVjdGlvblByb3AgJiYgX3R5cGVvZihzaW5nbGVTZWxlY3Rpb25Qcm9wKSA9PT0gJ29iamVjdCcgJiYgc2luZ2xlU2VsZWN0aW9uUHJvcC5hc1BsYWluVGV4dCB8fCBmYWxzZTtcbiAgICAgIHZhciBwaWxscyA9IHNlbGVjdGVkT3B0aW9ucyA/IHNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICB2YXIga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICAgICAgY29sb3IgPSBvcHRpb24uY29sb3IsXG4gICAgICAgICAgICBvbkNsaWNrID0gb3B0aW9uLm9uQ2xpY2ssXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkKTtcblxuICAgICAgICB2YXIgcGlsbE9uQ2xvc2UgPSBpc0Rpc2FibGVkIHx8IHNpbmdsZVNlbGVjdGlvbiB8fCBvbkNsaWNrID8gdW5kZWZpbmVkIDogb25SZW1vdmVPcHRpb247XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94UGlsbCwgX2V4dGVuZHMoe1xuICAgICAgICAgIG9wdGlvbjogb3B0aW9uLFxuICAgICAgICAgIG9uQ2xvc2U6IHBpbGxPbkNsb3NlLFxuICAgICAgICAgIGtleToga2V5ICE9PSBudWxsICYmIGtleSAhPT0gdm9pZCAwID8ga2V5IDogbGFiZWwudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgICBvbkNsaWNrQXJpYUxhYmVsOiBvbkNsaWNrID8gJ0NoYW5nZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgYXNQbGFpblRleHQ6IGFzUGxhaW5UZXh0XG4gICAgICAgIH0sIHJlc3QpLCBsYWJlbCk7XG4gICAgICB9KSA6IG51bGw7XG4gICAgICB2YXIgcmVtb3ZlT3B0aW9uTWVzc2FnZTtcbiAgICAgIHZhciByZW1vdmVPcHRpb25NZXNzYWdlSWQ7XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlLmhhc0ZvY3VzKSB7XG4gICAgICAgIHZhciByZWFkUGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlciA/IFwiXCIuY29uY2F0KHBsYWNlaG9sZGVyLCBcIi5cIikgOiAnJztcbiAgICAgICAgdmFyIHJlbW92ZU9wdGlvbk1lc3NhZ2VDb250ZW50ID0gXCJDb21ibyBib3guIFNlbGVjdGVkLiBcIi5jb25jYXQoc2VhcmNoVmFsdWUgPyBcIlwiLmNvbmNhdChzZWFyY2hWYWx1ZSwgXCIuIFNlbGVjdGVkLiBcIikgOiAnJykuY29uY2F0KHNlbGVjdGVkT3B0aW9ucyAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCA/IFwiXCIuY29uY2F0KHZhbHVlLCBcIi4gUHJlc3MgQmFja3NwYWNlIHRvIGRlbGV0ZSBcIikuY29uY2F0KHNlbGVjdGVkT3B0aW9uc1tzZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMV0ubGFiZWwsIFwiLiBcIikgOiAnJywgXCJDb21ibyBib3ggaW5wdXQuIFwiKS5jb25jYXQocmVhZFBsYWNlaG9sZGVyLCBcIiBUeXBlIHNvbWUgdGV4dCBvciwgdG8gZGlzcGxheSBhIGxpc3Qgb2YgY2hvaWNlcywgcHJlc3MgRG93biBBcnJvdy4gXCIpICsgJ1RvIGV4aXQgdGhlIGxpc3Qgb2YgY2hvaWNlcywgcHJlc3MgRXNjYXBlLic7XG4gICAgICAgIHJlbW92ZU9wdGlvbk1lc3NhZ2VJZCA9IHJvb3RJZCgncmVtb3ZlT3B0aW9uTWVzc2FnZScpOyAvLyBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIiB3aWxsIHJlYWQgdGhpcyBtZXNzYWdlIGFsb3VkIGltbWVkaWF0ZWx5IG9uY2UgaXQgZW50ZXJzIHRoZSBET00uXG4gICAgICAgIC8vIFdlJ2xsIHJlbmRlciB0byB0aGUgRE9NIHdoZW4gdGhlIGlucHV0IGdhaW5zIGZvY3VzIGFuZCByZW1vdmUgaXQgd2hlbiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMuXG4gICAgICAgIC8vIFdlJ2xsIHVzZSBhcmlhLWhpZGRlbiB0byBwcmV2ZW50IGRlZmF1bHQgYXJpYSBpbmZvcm1hdGlvbiBmcm9tIGJlaW5nIHJlYWQgYnkgdGhlIHNjcmVlblxuICAgICAgICAvLyByZWFkZXIuXG5cbiAgICAgICAgcmVtb3ZlT3B0aW9uTWVzc2FnZSA9IF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgIFwiYXJpYS1saXZlXCI6IFwicG9saXRlXCIsXG4gICAgICAgICAgaWQ6IHJlbW92ZU9wdGlvbk1lc3NhZ2VJZFxuICAgICAgICB9LCByZW1vdmVPcHRpb25NZXNzYWdlQ29udGVudCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGxhY2Vob2xkZXJNZXNzYWdlO1xuXG4gICAgICBpZiAocGxhY2Vob2xkZXIgJiYgc2VsZWN0ZWRPcHRpb25zICYmICFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoICYmICFzZWFyY2hWYWx1ZSkge1xuICAgICAgICBwbGFjZWhvbGRlck1lc3NhZ2UgPSBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94UGxhY2Vob2xkZXJcIlxuICAgICAgICB9LCBwbGFjZWhvbGRlcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGlja1Byb3BzID0ge307XG5cbiAgICAgIGlmICghaXNEaXNhYmxlZCAmJiBvbkNsZWFyICYmIGhhc1NlbGVjdGVkT3B0aW9ucykge1xuICAgICAgICBjbGlja1Byb3BzLmNsZWFyID0ge1xuICAgICAgICAgICdkYXRhLXRlc3Qtc3Viaic6ICdjb21ib0JveENsZWFyQnV0dG9uJyxcbiAgICAgICAgICBvbkNsaWNrOiBvbkNsZWFyXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBpY29uO1xuXG4gICAgICBpZiAoIW5vSWNvbikge1xuICAgICAgICBpY29uID0ge1xuICAgICAgICAgICdhcmlhLWxhYmVsJzogaXNMaXN0T3BlbiA/ICdDbG9zZSBsaXN0IG9mIG9wdGlvbnMnIDogJ09wZW4gbGlzdCBvZiBvcHRpb25zJyxcbiAgICAgICAgICAnZGF0YS10ZXN0LXN1YmonOiAnY29tYm9Cb3hUb2dnbGVMaXN0QnV0dG9uJyxcbiAgICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBvbkNsaWNrOiBpc0xpc3RPcGVuICYmICFpc0Rpc2FibGVkID8gb25DbG9zZUxpc3RDbGljayA6IG9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgICByZWY6IHRvZ2dsZUJ1dHRvblJlZixcbiAgICAgICAgICBzaWRlOiAncmlnaHQnLFxuICAgICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgICB0eXBlOiAnYXJyb3dEb3duJ1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgd3JhcENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveF9faW5wdXRXcmFwJywge1xuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWQsXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLS1mdWxsV2lkdGgnOiBmdWxsV2lkdGgsXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLS1ub1dyYXAnOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLWlzTG9hZGluZyc6IGlzTG9hZGluZyxcbiAgICAgICAgJ2V1aUNvbWJvQm94X19pbnB1dFdyYXAtaXNDbGVhcmFibGUnOiBvbkNsZWFyLFxuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC0taW5Hcm91cCc6IHByZXBlbmQgfHwgYXBwZW5kXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0LCBfZXh0ZW5kcyh7XG4gICAgICAgIGljb246IGljb25cbiAgICAgIH0sIGNsaWNrUHJvcHMsIHtcbiAgICAgICAgaW5wdXRJZDogaWQsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICAgICAgYXBwZW5kOiBhcHBlbmRcbiAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiB3cmFwQ2xhc3NlcyxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNvbWJvQm94SW5wdXRcIixcbiAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgdGFiSW5kZXg6IC0xIC8vIGJlY29tZXMgb25CbHVyIGV2ZW50J3MgcmVsYXRlZFRhcmdldCwgb3RoZXJ3aXNlIHJlbGF0ZWRUYXJnZXQgaXMgbnVsbCB3aGVuIGNsaWNraW5nIG9uIHRoaXMgZGl2XG5cbiAgICAgIH0sICFzaW5nbGVTZWxlY3Rpb24gfHwgIXNlYXJjaFZhbHVlID8gcGlsbHMgOiBudWxsLCBwbGFjZWhvbGRlck1lc3NhZ2UsIF9fX0Vtb3Rpb25KU1goQXV0b3NpemVJbnB1dCwge1xuICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBmb2N1c2VkT3B0aW9uSWQsXG4gICAgICAgIFwiYXJpYS1hdXRvY29tcGxldGVcIjogXCJsaXN0XCIsXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBpc0xpc3RPcGVuID8gcm9vdElkKCdsaXN0Ym94JykgOiAnJyxcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IGlzTGlzdE9wZW4sXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZGJ5LFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hfX2lucHV0XCIsXG4gICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjb21ib0JveFNlYXJjaElucHV0XCIsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGlucHV0UmVmOiBpbnB1dFJlZixcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuaW5wdXRPbkNoYW5nZSxcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICByZWY6IHRoaXMuaW5wdXRSZWZDYWxsYmFjayxcbiAgICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGZvbnRTaXplOiAxNFxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzXG4gICAgICB9KSwgcmVtb3ZlT3B0aW9uTWVzc2FnZSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb21ib0JveElucHV0O1xufShDb21wb25lbnQpO1xuRXVpQ29tYm9Cb3hJbnB1dC5wcm9wVHlwZXMgPSB7XG4gIGF1dG9TaXplSW5wdXRSZWY6IFByb3BUeXBlcy5hbnksXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGZvY3VzZWRPcHRpb25JZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGFzU2VsZWN0ZWRPcHRpb25zOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5hbnksXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0xpc3RPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBub0ljb246IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmFueSxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xvc2VMaXN0Q2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgb25PcGVuTGlzdENsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvblJlbW92ZU9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICByb290SWQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2VsZWN0ZWRPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLFxuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgdG9nZ2xlQnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuICB1cGRhdGVQb3NpdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiYXNQbGFpblRleHRcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwib25DbGlja1wiLCBcIm9uQ2xpY2tBcmlhTGFiZWxcIiwgXCJvbkNsb3NlXCIsIFwib3B0aW9uXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJhZGdlIH0gZnJvbSAnLi4vLi4vYmFkZ2UnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3hQaWxsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveFBpbGwsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29tYm9Cb3hQaWxsKTtcblxuICBmdW5jdGlvbiBFdWlDb21ib0JveFBpbGwoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94UGlsbCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xvc2VCdXR0b25DbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNsb3NlID0gX3RoaXMkcHJvcHMub25DbG9zZSxcbiAgICAgICAgICBvcHRpb24gPSBfdGhpcyRwcm9wcy5vcHRpb247XG5cbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIG9uQ2xvc2Uob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveFBpbGwsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYXNQbGFpblRleHQgPSBfdGhpcyRwcm9wczIuYXNQbGFpblRleHQsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczIuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgICBjb2xvciA9IF90aGlzJHByb3BzMi5jb2xvcixcbiAgICAgICAgICBvbkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uQ2xpY2ssXG4gICAgICAgICAgb25DbGlja0FyaWFMYWJlbCA9IF90aGlzJHByb3BzMi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICAgIG9uQ2xvc2UgPSBfdGhpcyRwcm9wczIub25DbG9zZSxcbiAgICAgICAgICBvcHRpb24gPSBfdGhpcyRwcm9wczIub3B0aW9uLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94UGlsbCcsIHtcbiAgICAgICAgJ2V1aUNvbWJvQm94UGlsbC0tcGxhaW5UZXh0JzogYXNQbGFpblRleHRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgb25DbGlja1Byb3BzID0gb25DbGljayAmJiBvbkNsaWNrQXJpYUxhYmVsID8ge1xuICAgICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgICBvbkNsaWNrQXJpYUxhYmVsOiBvbkNsaWNrQXJpYUxhYmVsXG4gICAgICB9IDoge307XG5cbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveFBpbGwucmVtb3ZlU2VsZWN0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJSZW1vdmUge2NoaWxkcmVufSBmcm9tIHNlbGVjdGlvbiBpbiB0aGlzIGdyb3VwXCIsXG4gICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZW1vdmVTZWxlY3Rpb24pIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICAgICAgaWNvbk9uQ2xpY2s6IF90aGlzMi5vbkNsb3NlQnV0dG9uQ2xpY2ssXG4gICAgICAgICAgICBpY29uT25DbGlja0FyaWFMYWJlbDogcmVtb3ZlU2VsZWN0aW9uLFxuICAgICAgICAgICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICAgICAgICAgIGljb25UeXBlOiBcImNyb3NzXCIsXG4gICAgICAgICAgICB0aXRsZTogY2hpbGRyZW5cbiAgICAgICAgICB9LCBvbkNsaWNrUHJvcHMsIHJlc3QpLCBjaGlsZHJlbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNQbGFpblRleHQpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQmFkZ2UsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgIHRpdGxlOiBjaGlsZHJlblxuICAgICAgfSwgcmVzdCwgb25DbGlja1Byb3BzKSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb21ib0JveFBpbGw7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlDb21ib0JveFBpbGwsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY29sb3I6ICdob2xsb3cnXG59KTtcblxuRXVpQ29tYm9Cb3hQaWxsLnByb3BUeXBlcyA9IHtcbiAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICBvcHRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImFjdGl2ZVBhZ2VcIiwgXCJpdGVtc1BlclBhZ2VcIiwgXCJpdGVtc1BlclBhZ2VPcHRpb25zXCIsIFwic2hvd1BlclBhZ2VPcHRpb25zXCIsIFwib25DaGFuZ2VJdGVtc1BlclBhZ2VcIiwgXCJvbkNoYW5nZVBhZ2VcIiwgXCJwYWdlQ291bnRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uLy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudUl0ZW0sIEV1aUNvbnRleHRNZW51UGFuZWwgfSBmcm9tICcuLi8uLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uLy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpUGFnaW5hdGlvbiB9IGZyb20gJy4uLy4uL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4uLy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVQYWdpbmF0aW9uID0gZnVuY3Rpb24gRXVpVGFibGVQYWdpbmF0aW9uKF9yZWYpIHtcbiAgdmFyIGFjdGl2ZVBhZ2UgPSBfcmVmLmFjdGl2ZVBhZ2UsXG4gICAgICBfcmVmJGl0ZW1zUGVyUGFnZSA9IF9yZWYuaXRlbXNQZXJQYWdlLFxuICAgICAgaXRlbXNQZXJQYWdlID0gX3JlZiRpdGVtc1BlclBhZ2UgPT09IHZvaWQgMCA/IDUwIDogX3JlZiRpdGVtc1BlclBhZ2UsXG4gICAgICBfcmVmJGl0ZW1zUGVyUGFnZU9wdGkgPSBfcmVmLml0ZW1zUGVyUGFnZU9wdGlvbnMsXG4gICAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gX3JlZiRpdGVtc1BlclBhZ2VPcHRpID09PSB2b2lkIDAgPyBbMTAsIDIwLCA1MCwgMTAwXSA6IF9yZWYkaXRlbXNQZXJQYWdlT3B0aSxcbiAgICAgIF9yZWYkc2hvd1BlclBhZ2VPcHRpbyA9IF9yZWYuc2hvd1BlclBhZ2VPcHRpb25zLFxuICAgICAgc2hvd1BlclBhZ2VPcHRpb25zID0gX3JlZiRzaG93UGVyUGFnZU9wdGlvID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzaG93UGVyUGFnZU9wdGlvLFxuICAgICAgX3JlZiRvbkNoYW5nZUl0ZW1zUGVyID0gX3JlZi5vbkNoYW5nZUl0ZW1zUGVyUGFnZSxcbiAgICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlID0gX3JlZiRvbkNoYW5nZUl0ZW1zUGVyID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoKSB7fSA6IF9yZWYkb25DaGFuZ2VJdGVtc1BlcixcbiAgICAgIG9uQ2hhbmdlUGFnZSA9IF9yZWYub25DaGFuZ2VQYWdlLFxuICAgICAgcGFnZUNvdW50ID0gX3JlZi5wYWdlQ291bnQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgaXNQb3BvdmVyT3BlbiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRJc1BvcG92ZXJPcGVuID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgdG9nZ2xlUG9wb3ZlciA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJc1BvcG92ZXJPcGVuKGZ1bmN0aW9uIChpc09wZW4pIHtcbiAgICAgIHJldHVybiAhaXNPcGVuO1xuICAgIH0pO1xuICB9LCBbXSk7XG4gIHZhciBjbG9zZVBvcG92ZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgc2V0SXNQb3BvdmVyT3BlbihmYWxzZSk7XG4gIH0sIFtdKTtcblxuICB2YXIgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgIHNpemU6IFwieHNcIixcbiAgICBjb2xvcjogXCJ0ZXh0XCIsXG4gICAgaWNvblR5cGU6IFwiYXJyb3dEb3duXCIsXG4gICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVQYWdpbmF0aW9uUG9wb3ZlckJ1dHRvblwiLFxuICAgIG9uQ2xpY2s6IHRvZ2dsZVBvcG92ZXJcbiAgfSwgaXRlbXNQZXJQYWdlID09PSAwID8gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLmFsbFJvd3NcIixcbiAgICBkZWZhdWx0OiBcIlNob3dpbmcgYWxsIHJvd3NcIlxuICB9KSA6IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5yb3dzUGVyUGFnZVwiLFxuICAgIGRlZmF1bHQ6IFwiUm93cyBwZXIgcGFnZVwiXG4gIH0pLCBcIjogXCIsIGl0ZW1zUGVyUGFnZSkpO1xuXG4gIHZhciBpdGVtcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpdGVtc1BlclBhZ2VPcHRpb25zLm1hcChmdW5jdGlvbiAoaXRlbXNQZXJQYWdlT3B0aW9uKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIHtcbiAgICAgICAga2V5OiBpdGVtc1BlclBhZ2VPcHRpb24sXG4gICAgICAgIGljb246IGl0ZW1zUGVyUGFnZU9wdGlvbiA9PT0gaXRlbXNQZXJQYWdlID8gJ2NoZWNrJyA6ICdlbXB0eScsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgICAgb25DaGFuZ2VJdGVtc1BlclBhZ2UoaXRlbXNQZXJQYWdlT3B0aW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlUGFnaW5hdGlvbi1cIi5jb25jYXQoaXRlbXNQZXJQYWdlT3B0aW9uLCBcIi1yb3dzXCIpXG4gICAgICB9LCBpdGVtc1BlclBhZ2VPcHRpb24gPT09IDAgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLnJvd3NQZXJQYWdlT3B0aW9uU2hvd0FsbFJvd3NcIixcbiAgICAgICAgZGVmYXVsdDogXCJTaG93IGFsbCByb3dzXCJcbiAgICAgIH0pIDogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5yb3dzUGVyUGFnZU9wdGlvblwiLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICByb3dzUGVyUGFnZTogaXRlbXNQZXJQYWdlT3B0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IFwie3Jvd3NQZXJQYWdlfSByb3dzXCJcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfSwgW2l0ZW1zUGVyUGFnZU9wdGlvbnMsIGl0ZW1zUGVyUGFnZSwgb25DaGFuZ2VJdGVtc1BlclBhZ2UsIGNsb3NlUG9wb3Zlcl0pO1xuXG4gIHZhciBpdGVtc1BlclBhZ2VQb3BvdmVyID0gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyLCB7XG4gICAgYnV0dG9uOiBidXR0b24sXG4gICAgaXNPcGVuOiBpc1BvcG92ZXJPcGVuLFxuICAgIGNsb3NlUG9wb3ZlcjogY2xvc2VQb3BvdmVyLFxuICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgIGFuY2hvclBvc2l0aW9uOiBcInVwUmlnaHRcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51UGFuZWwsIHtcbiAgICBpdGVtczogaXRlbXNcbiAgfSkpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgIGp1c3RpZnlDb250ZW50OiBcInNwYWNlQmV0d2VlblwiLFxuICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgcmVzcG9uc2l2ZTogZmFsc2UsXG4gICAgd3JhcDogdHJ1ZSxcbiAgICBndXR0ZXJTaXplOiBcInNcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpLXhTY3JvbGxcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgc2hvd1BlclBhZ2VPcHRpb25zICYmIGl0ZW1zUGVyUGFnZVBvcG92ZXIpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgaXRlbXNQZXJQYWdlID4gMCAmJiBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb24sIF9leHRlbmRzKHtcbiAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudCxcbiAgICBhY3RpdmVQYWdlOiBhY3RpdmVQYWdlLFxuICAgIG9uUGFnZUNsaWNrOiBvbkNoYW5nZVBhZ2VcbiAgfSwgcmVzdCkpKSk7XG59O1xuRXVpVGFibGVQYWdpbmF0aW9uLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogT3B0aW9uIHRvIGNvbXBsZXRlbHkgaGlkZSB0aGUgXCJSb3dzIHBlciBwYWdlXCIgc2VsZWN0b3IuXG4gICAgICovXG4gIHNob3dQZXJQYWdlT3B0aW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ3VycmVudCBzZWxlY3Rpb24gZm9yIFwiUm93cyBwZXIgcGFnZVwiLlxuICAgICAqIFBhc3MgYDBgIHRvIGRpc3BsYXkgdGhlIHNlbGVjdGVkIFwiU2hvdyBhbGxcIiBvcHRpb24gYW5kIGhpZGUgdGhlIHBhZ2luYXRpb24uXG4gICAgICovXG4gIGl0ZW1zUGVyUGFnZTogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBDdXN0b20gYXJyYXkgb2Ygb3B0aW9ucyBmb3IgXCJSb3dzIHBlciBwYWdlXCIuXG4gICAgICogUGFzcyBgMGAgYXMgb25lIG9mIHRoZSBvcHRpb25zIHRvIGNyZWF0ZSBhIFwiU2hvdyBhbGxcIiBvcHRpb24uXG4gICAgICovXG4gIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCksXG5cbiAgLyoqXG4gICAgICogQ2xpY2sgaGFuZGxlciB0aGF0IHBhc3NlcyBiYWNrIHNlbGVjdGVkIGBwYWdlU2l6ZWAgbnVtYmVyXG4gICAgICovXG4gIG9uQ2hhbmdlSXRlbXNQZXJQYWdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DaGFuZ2VQYWdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBSZXF1aXJlcyB0aGUgYGlkYCBvZiB0aGUgdGFibGUgYmVpbmcgY29udHJvbGxlZFxuICAgICAqL1xuICBcImFyaWEtY29udHJvbHNcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJwYWdlQ291bnRcIiwgXCJhY3RpdmVQYWdlXCIsIFwib25QYWdlQ2xpY2tcIiwgXCJjb21wcmVzc2VkXCIsIFwiYXJpYS1jb250cm9sc1wiLCBcInJlc3BvbnNpdmVcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVBhZ2luYXRpb25CdXR0b24gfSBmcm9tICcuL3BhZ2luYXRpb25fYnV0dG9uJztcbmltcG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi90ZXh0JztcbmltcG9ydCB7IEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyB9IGZyb20gJy4vcGFnaW5hdGlvbl9idXR0b25fYXJyb3cnO1xuaW1wb3J0IHsgdXNlSXNXaXRoaW5CcmVha3BvaW50cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgTUFYX1ZJU0lCTEVfUEFHRVMgPSA1O1xudmFyIE5VTUJFUl9TVVJST1VORElOR19QQUdFUyA9IE1hdGguZmxvb3IoTUFYX1ZJU0lCTEVfUEFHRVMgKiAwLjUpO1xuZXhwb3J0IHZhciBFdWlQYWdpbmF0aW9uID0gZnVuY3Rpb24gRXVpUGFnaW5hdGlvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkcGFnZUNvdW50ID0gX3JlZi5wYWdlQ291bnQsXG4gICAgICBwYWdlQ291bnQgPSBfcmVmJHBhZ2VDb3VudCA9PT0gdm9pZCAwID8gMSA6IF9yZWYkcGFnZUNvdW50LFxuICAgICAgX3JlZiRhY3RpdmVQYWdlID0gX3JlZi5hY3RpdmVQYWdlLFxuICAgICAgYWN0aXZlUGFnZSA9IF9yZWYkYWN0aXZlUGFnZSA9PT0gdm9pZCAwID8gMCA6IF9yZWYkYWN0aXZlUGFnZSxcbiAgICAgIF9yZWYkb25QYWdlQ2xpY2sgPSBfcmVmLm9uUGFnZUNsaWNrLFxuICAgICAgb25QYWdlQ2xpY2sgPSBfcmVmJG9uUGFnZUNsaWNrID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoKSB7fSA6IF9yZWYkb25QYWdlQ2xpY2ssXG4gICAgICBfY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICAgIGFyaWFDb250cm9scyA9IF9yZWZbJ2FyaWEtY29udHJvbHMnXSxcbiAgICAgIF9yZWYkcmVzcG9uc2l2ZSA9IF9yZWYucmVzcG9uc2l2ZSxcbiAgICAgIHJlc3BvbnNpdmUgPSBfcmVmJHJlc3BvbnNpdmUgPT09IHZvaWQgMCA/IFsneHMnLCAncyddIDogX3JlZiRyZXNwb25zaXZlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKHJlc3BvbnNpdmUsICEhcmVzcG9uc2l2ZSk7IC8vIEZvcmNlIHRvIGBjb21wcmVzc2VkYCB2ZXJzaW9uIGlmIHNwZWNpZmllZCBvciB3aXRoaW4gdGhlIHJlc3BvbnNpdmUgYnJlYWtwb2ludHNcblxuICB2YXIgY29tcHJlc3NlZCA9IF9jb21wcmVzc2VkIHx8IGlzUmVzcG9uc2l2ZTtcblxuICB2YXIgc2FmZUNsaWNrID0gZnVuY3Rpb24gc2FmZUNsaWNrKGUsIHBhZ2VJbmRleCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmIChhcmlhQ29udHJvbHMpIHtcbiAgICAgIHZhciBjb250cm9sbGVkRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyaWFDb250cm9scyk7XG5cbiAgICAgIGlmIChjb250cm9sbGVkRWxlbWVudCkge1xuICAgICAgICBjb250cm9sbGVkRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9uUGFnZUNsaWNrKHBhZ2VJbmRleCk7XG4gIH07XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQYWdpbmF0aW9uJywgY2xhc3NOYW1lKTtcblxuICB2YXIgZmlyc3RCdXR0b24gPSAocGFnZUNvdW50IDwgMSB8fCBjb21wcmVzc2VkKSAmJiBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwiZmlyc3RcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgMCk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gMFxuICB9KTtcblxuICB2YXIgcHJldmlvdXNCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwicHJldmlvdXNcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgYWN0aXZlUGFnZSAtIDEpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGFjdGl2ZVBhZ2UgPT09IDBcbiAgfSk7XG5cbiAgdmFyIG5leHRCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwibmV4dFwiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBhY3RpdmVQYWdlICsgMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gLTEgfHwgYWN0aXZlUGFnZSA9PT0gcGFnZUNvdW50IC0gMVxuICB9KTtcblxuICB2YXIgbGFzdEJ1dHRvbiA9IChwYWdlQ291bnQgPCAxIHx8IGNvbXByZXNzZWQpICYmIF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LCB7XG4gICAgdHlwZTogXCJsYXN0XCIsXG4gICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIHBhZ2VDb3VudCA/IHBhZ2VDb3VudCAtIDEgOiAtMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gLTEgfHwgYWN0aXZlUGFnZSA9PT0gcGFnZUNvdW50IC0gMVxuICB9KTtcblxuICB2YXIgY2VudGVyUGFnZUNvdW50O1xuXG4gIGlmIChwYWdlQ291bnQpIHtcbiAgICB2YXIgc2hhcmVkQnV0dG9uUHJvcHMgPSB7XG4gICAgICBhY3RpdmVQYWdlOiBhY3RpdmVQYWdlLFxuICAgICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgICBzYWZlQ2xpY2s6IHNhZmVDbGljayxcbiAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgfTtcblxuICAgIGlmIChjb21wcmVzc2VkKSB7XG4gICAgICBjZW50ZXJQYWdlQ291bnQgPSBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19jb21wcmVzc2VkVGV4dFwiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbi5wYWdlT2ZUb3RhbENvbXByZXNzZWRcIixcbiAgICAgICAgZGVmYXVsdDogXCJ7cGFnZX0gb2Yge3RvdGFsfVwiLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICBwYWdlOiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBudWxsLCBhY3RpdmVQYWdlICsgMSksXG4gICAgICAgICAgdG90YWw6IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIHBhZ2VDb3VudClcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcGFnZXMgPSBbXTtcbiAgICAgIHZhciBmaXJzdFBhZ2VJblJhbmdlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oYWN0aXZlUGFnZSAtIE5VTUJFUl9TVVJST1VORElOR19QQUdFUywgcGFnZUNvdW50IC0gTUFYX1ZJU0lCTEVfUEFHRVMpKTtcbiAgICAgIHZhciBsYXN0UGFnZUluUmFuZ2UgPSBNYXRoLm1pbihwYWdlQ291bnQsIGZpcnN0UGFnZUluUmFuZ2UgKyBNQVhfVklTSUJMRV9QQUdFUyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSBmaXJzdFBhZ2VJblJhbmdlLCBpbmRleCA9IDA7IGkgPCBsYXN0UGFnZUluUmFuZ2U7IGkrKywgaW5kZXgrKykge1xuICAgICAgICBwYWdlcy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBwYWdlSW5kZXg6IGksXG4gICAgICAgICAga2V5OiBpXG4gICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RQYWdlQnV0dG9ucyA9IFtdO1xuXG4gICAgICBpZiAoZmlyc3RQYWdlSW5SYW5nZSA+IDApIHtcbiAgICAgICAgZmlyc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAga2V5OiAwXG4gICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuXG4gICAgICAgIGlmIChmaXJzdFBhZ2VJblJhbmdlID4gMSAmJiBmaXJzdFBhZ2VJblJhbmdlICE9PSAyKSB7XG4gICAgICAgICAgZmlyc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAga2V5OiBcInN0YXJ0aW5nRWxsaXBzZXNcIixcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb24uZmlyc3RSYW5nZUFyaWFMYWJlbFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJTa2lwcGluZyBwYWdlcyAyIHRvIHtsYXN0UGFnZX1cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBsYXN0UGFnZTogZmlyc3RQYWdlSW5SYW5nZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChmaXJzdFJhbmdlQXJpYUxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGZpcnN0UmFuZ2VBcmlhTGFiZWwsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uQnV0dG9uLWlzUGxhY2Vob2xkZXIgZXVpUGFnaW5hdGlvbl9faXRlbVwiXG4gICAgICAgICAgICB9LCBcIlxcdTIwMjZcIik7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0UGFnZUluUmFuZ2UgPT09IDIpIHtcbiAgICAgICAgICBmaXJzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgcGFnZUluZGV4OiAxLFxuICAgICAgICAgICAga2V5OiAxXG4gICAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxhc3RQYWdlQnV0dG9ucyA9IFtdO1xuXG4gICAgICBpZiAobGFzdFBhZ2VJblJhbmdlIDwgcGFnZUNvdW50KSB7XG4gICAgICAgIGlmIChsYXN0UGFnZUluUmFuZ2UgKyAxID09PSBwYWdlQ291bnQgLSAxKSB7XG4gICAgICAgICAgbGFzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgcGFnZUluZGV4OiBsYXN0UGFnZUluUmFuZ2UsXG4gICAgICAgICAgICBrZXk6IGxhc3RQYWdlSW5SYW5nZVxuICAgICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3RQYWdlSW5SYW5nZSA8IHBhZ2VDb3VudCAtIDEpIHtcbiAgICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIGtleTogXCJlbmRpbmdFbGxpcHNlc1wiLFxuICAgICAgICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbi5sYXN0UmFuZ2VBcmlhTGFiZWxcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiU2tpcHBpbmcgcGFnZXMge2ZpcnN0UGFnZX0gdG8ge2xhc3RQYWdlfVwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGZpcnN0UGFnZTogbGFzdFBhZ2VJblJhbmdlICsgMSxcbiAgICAgICAgICAgICAgbGFzdFBhZ2U6IHBhZ2VDb3VudCAtIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBmdW5jdGlvbiAobGFzdFJhbmdlQXJpYUxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGxhc3RSYW5nZUFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25CdXR0b24taXNQbGFjZWhvbGRlciBldWlQYWdpbmF0aW9uX19pdGVtXCJcbiAgICAgICAgICAgIH0sIFwiXFx1MjAyNlwiKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgcGFnZUluZGV4OiBwYWdlQ291bnQgLSAxLFxuICAgICAgICAgIGtleTogcGFnZUNvdW50IC0gMVxuICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlbGVjdGFibGVQYWdlcyA9IHBhZ2VzO1xuXG4gICAgICB2YXIgYWNjZXNzaWJsZU5hbWUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RbJ2FyaWEtbGFiZWwnXSAmJiB7XG4gICAgICAgICdhcmlhLWxhYmVsJzogcmVzdFsnYXJpYS1sYWJlbCddXG4gICAgICB9KSwgcmVzdFsnYXJpYS1sYWJlbGxlZGJ5J10gJiYge1xuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogcmVzdFsnYXJpYS1sYWJlbGxlZGJ5J11cbiAgICAgIH0pO1xuXG4gICAgICBjZW50ZXJQYWdlQ291bnQgPSBfX19FbW90aW9uSlNYKFwidWxcIiwgX2V4dGVuZHMoe30sIGFjY2Vzc2libGVOYW1lLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19saXN0XCJcbiAgICAgIH0pLCBmaXJzdFBhZ2VCdXR0b25zLCBzZWxlY3RhYmxlUGFnZXMsIGxhc3RQYWdlQnV0dG9ucyk7XG4gICAgfVxuICB9IC8vIEFsbCB0aGUgaTE4biBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHdob2xlIFNSLW9ubHkgdGV4dFxuXG5cbiAgdmFyIGxhc3RMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ubGFzdCcsICdMYXN0Jyk7XG4gIHZhciBwYWdlTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLnBhZ2UnLCAnUGFnZScpO1xuICB2YXIgb2ZMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ub2YnLCAnb2YnKTtcbiAgdmFyIGNvbGxlY3Rpb25MYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24uY29sbGVjdGlvbicsICdjb2xsZWN0aW9uJyk7XG4gIHZhciBmcm9tRW5kTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLmZyb21FbmRMYWJlbCcsICdmcm9tIGVuZCcpOyAvLyBCYXNlZCBvbiB0aGUgYGFjdGl2ZVBhZ2VgIGNvdW50LCBidWlsZCB0aGUgZnJvbnQgb2YgdGhlIFNSLW9ubHkgdGV4dFxuICAvLyBpLmUuIGBQYWdlIDFgLCBgUGFnZSAyIGZyb20gZW5kYCwgYExhc3QgUGFnZWBcblxuICB2YXIgYWNjZXNzaWJsZVBhZ2VTdHJpbmcgPSBmdW5jdGlvbiBhY2Nlc3NpYmxlUGFnZVN0cmluZygpIHtcbiAgICBpZiAoYWN0aXZlUGFnZSA8IC0xKSByZXR1cm4gXCJcIi5jb25jYXQocGFnZUxhYmVsLCBcIiBcIikuY29uY2F0KE1hdGguYWJzKGFjdGl2ZVBhZ2UpLCBcIiBcIikuY29uY2F0KGZyb21FbmRMYWJlbCk7XG4gICAgaWYgKGFjdGl2ZVBhZ2UgPT09IC0xKSByZXR1cm4gXCJcIi5jb25jYXQobGFzdExhYmVsLCBcIiBcIikuY29uY2F0KHBhZ2VMYWJlbCk7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHBhZ2VMYWJlbCwgXCIgXCIpLmNvbmNhdChhY3RpdmVQYWdlICsgMSk7XG4gIH07IC8vIElmIGBwYWdlQ291bnRgIGlzIHVua25vd24gY2FsbCBpdCBgY29sbGVjdGlvbmBcblxuXG4gIHZhciBhY2Nlc3NpYmxlQ29sbGVjdGlvblN0cmluZyA9IHBhZ2VDb3VudCA9PT0gMCA/IGNvbGxlY3Rpb25MYWJlbCA6IHBhZ2VDb3VudC50b1N0cmluZygpOyAvLyBDcmVhdGUgdGhlIHdob2xlIHN0cmluZyB3aXRoIHRvdGFsIHBhZ2VDb3VudCBvciBgY29sbGVjdGlvbmBcblxuICB2YXIgYWNjZXNzaWJsZVBhZ2VDb3VudCA9IFwiXCIuY29uY2F0KGFjY2Vzc2libGVQYWdlU3RyaW5nKCksIFwiIFwiKS5jb25jYXQob2ZMYWJlbCwgXCIgXCIpLmNvbmNhdChhY2Nlc3NpYmxlQ29sbGVjdGlvblN0cmluZyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwibmF2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIFwiYXJpYS1hdG9taWNcIjogXCJ0cnVlXCIsXG4gICAgXCJhcmlhLXJlbGV2YW50XCI6IFwiYWRkaXRpb25zIHRleHRcIixcbiAgICByb2xlOiBcInN0YXR1c1wiXG4gIH0sIGFjY2Vzc2libGVQYWdlQ291bnQpKSwgZmlyc3RCdXR0b24sIHByZXZpb3VzQnV0dG9uLCBjZW50ZXJQYWdlQ291bnQsIG5leHRCdXR0b24sIGxhc3RCdXR0b24pO1xufTtcbkV1aVBhZ2luYXRpb24ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcy5cbiAgICAgKiBQYXNzIGAwYCBpZiB0b3RhbCBjb3VudCBpcyB1bmtub3duLlxuICAgICAqL1xuICBwYWdlQ291bnQ6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcGFnZSB1c2luZyBhIHplcm8gYmFzZWQgaW5kZXguXG4gICAgICogU28gaWYgeW91IHNldCB0aGUgYWN0aXZlUGFnZSB0byAxLCBpdCB3aWxsIGFjdGl2YXRlIHRoZSBzZWNvbmQgcGFnZS5cbiAgICAgKiBQYXNzIGAtMWAgZm9yIGZvcmNpbmcgdG8gbGFzdCBwYWdlLlxuICAgICAqL1xuICBhY3RpdmVQYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIENsaWNrIGhhbmRsZXIgdGhhdCBwYXNzZXMgYmFjayB0aGUgaW50ZXJuYWxseSBjYWxjdWxhdGVkIGBhY3RpdmVQYWdlYCBpbmRleFxuICAgICAqL1xuICBvblBhZ2VDbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogSWYgdHJ1ZSwgd2lsbCBvbmx5IHNob3cgbmV4dC9wcmV2IGFycm93cyBhbmQgc2ltcGxpZmllZCBudW1iZXIgc2V0LlxuICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJZiBwYXNzZWQgaW4sIHBhc3NlcyB2YWx1ZSB0aHJvdWdoIHRvIGVhY2ggYnV0dG9uIHRvIHNldCBhcmlhLWNvbnRyb2xzLlxuICAgICAqL1xuICBcImFyaWEtY29udHJvbHNcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBBdXRvbWF0aWNhbGx5IHJlZHVjZXMgdG8gdGhlIGBjb21wcmVzc2VkYCB2ZXJzaW9uIG9uIHNtYWxsZXIgc2NyZWVucy5cbiAgICAgKiBSZW1vdmUgY29tcGxldGVseSB3aXRoIGBmYWxzZWAgb3IgcHJvdmlkZSB5b3VyIG93biBsaXN0IG9mIHJlc3BvbnNpdmUgYnJlYWtwb2ludHMuXG4gICAgICovXG4gIHJlc3BvbnNpdmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbZmFsc2VdKSwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSlcbn07XG5cbnZhciBQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciA9IGZ1bmN0aW9uIFBhZ2luYXRpb25CdXR0b25XcmFwcGVyKF9yZWYyKSB7XG4gIHZhciBwYWdlSW5kZXggPSBfcmVmMi5wYWdlSW5kZXgsXG4gICAgICBfcmVmMiRpbkxpc3QgPSBfcmVmMi5pbkxpc3QsXG4gICAgICBpbkxpc3QgPSBfcmVmMiRpbkxpc3QgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRpbkxpc3QsXG4gICAgICBhY3RpdmVQYWdlID0gX3JlZjIuYWN0aXZlUGFnZSxcbiAgICAgIHBhZ2VDb3VudCA9IF9yZWYyLnBhZ2VDb3VudCxcbiAgICAgIGFyaWFDb250cm9scyA9IF9yZWYyLmFyaWFDb250cm9scyxcbiAgICAgIHNhZmVDbGljayA9IF9yZWYyLnNhZmVDbGljayxcbiAgICAgIGRpc2FibGVkID0gX3JlZjIuZGlzYWJsZWQ7XG5cbiAgdmFyIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbiwge1xuICAgIGlzQWN0aXZlOiBwYWdlSW5kZXggPT09IGFjdGl2ZVBhZ2UsXG4gICAgdG90YWxQYWdlczogcGFnZUNvdW50LFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBwYWdlSW5kZXgpO1xuICAgIH0sXG4gICAgcGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgXCJhcmlhLWNvbnRyb2xzXCI6IGFyaWFDb250cm9scyxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgfSk7XG5cbiAgaWYgKGluTGlzdCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25fX2l0ZW1cIlxuICAgIH0sIGJ1dHRvbik7XG4gIH1cblxuICByZXR1cm4gYnV0dG9uO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImlzQWN0aXZlXCIsIFwiaXNQbGFjZWhvbGRlclwiLCBcInBhZ2VJbmRleFwiLCBcInRvdGFsUGFnZXNcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVBhZ2luYXRpb25CdXR0b24gPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgaXNBY3RpdmUgPSBfcmVmLmlzQWN0aXZlLFxuICAgICAgaXNQbGFjZWhvbGRlciA9IF9yZWYuaXNQbGFjZWhvbGRlcixcbiAgICAgIHBhZ2VJbmRleCA9IF9yZWYucGFnZUluZGV4LFxuICAgICAgdG90YWxQYWdlcyA9IF9yZWYudG90YWxQYWdlcyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBhZ2luYXRpb25CdXR0b24nLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpUGFnaW5hdGlvbkJ1dHRvbi1pc0FjdGl2ZSc6IGlzQWN0aXZlLFxuICAgICdldWlQYWdpbmF0aW9uQnV0dG9uLWlzUGxhY2Vob2xkZXInOiBpc1BsYWNlaG9sZGVyXG4gIH0pO1xuXG4gIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc2l6ZTogJ3MnLFxuICAgIGNvbG9yOiAndGV4dCcsXG4gICAgJ2RhdGEtdGVzdC1zdWJqJzogXCJwYWdpbmF0aW9uLWJ1dHRvbi1cIi5jb25jYXQocGFnZUluZGV4KSxcbiAgICBpc0Rpc2FibGVkOiBpc1BsYWNlaG9sZGVyIHx8IGlzQWN0aXZlXG4gIH0sIGlzQWN0aXZlICYmIHtcbiAgICAnYXJpYS1jdXJyZW50JzogdHJ1ZVxuICB9KSwgcmVzdFsnYXJpYS1jb250cm9scyddICYmIHtcbiAgICBocmVmOiBcIiNcIi5jb25jYXQocmVzdFsnYXJpYS1jb250cm9scyddKVxuICB9KSwgcmVzdCk7XG5cbiAgdmFyIHBhZ2VOdW1iZXIgPSBwYWdlSW5kZXggKyAxO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbkJ1dHRvbi5sb25nUGFnZVN0cmluZ1wiLFxuICAgIGRlZmF1bHQ6IFwiUGFnZSB7cGFnZX0gb2Yge3RvdGFsUGFnZXN9XCIsXG4gICAgdmFsdWVzOiB7XG4gICAgICBwYWdlOiBwYWdlTnVtYmVyLFxuICAgICAgdG90YWxQYWdlczogdG90YWxQYWdlc1xuICAgIH1cbiAgfSwgZnVuY3Rpb24gKGxvbmdQYWdlU3RyaW5nKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbkJ1dHRvbi5zaG9ydFBhZ2VTdHJpbmdcIixcbiAgICAgIGRlZmF1bHQ6IFwiUGFnZSB7cGFnZX1cIixcbiAgICAgIHZhbHVlczoge1xuICAgICAgICBwYWdlOiBwYWdlTnVtYmVyXG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHNob3J0UGFnZVN0cmluZykge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRW1wdHksIF9leHRlbmRzKHtcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRvdGFsUGFnZXMgPyBsb25nUGFnZVN0cmluZyA6IHNob3J0UGFnZVN0cmluZ1xuICAgICAgfSwgcHJvcHMpLCBwYWdlTnVtYmVyKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuRXVpUGFnaW5hdGlvbkJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiZGFuZ2VyXCIsIFwidGV4dFwiLCBcImdob3N0XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIl0pLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgZmx1c2g6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJib3RoXCJdKSxcblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwic3VibWl0XCJdKSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAqIEl0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGljb24uXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRm9yIGVsbGlwc2lzIG9yIG90aGVyIG5vbi1jbGlja2FibGUgYnV0dG9ucy5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBGb3IgZWxsaXBzaXMgb3Igb3RoZXIgbm9uLWNsaWNrYWJsZSBidXR0b25zLlxuICAgICAqL1xuICBpc1BsYWNlaG9sZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFnZUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHRvdGFsUGFnZXM6IFByb3BUeXBlcy5udW1iZXJcbn07IiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbl9pY29uJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHR5cGVUb0ljb25UeXBlTWFwID0ge1xuICBmaXJzdDogJ2Fycm93U3RhcnQnLFxuICBwcmV2aW91czogJ2Fycm93TGVmdCcsXG4gIG5leHQ6ICdhcnJvd1JpZ2h0JyxcbiAgbGFzdDogJ2Fycm93RW5kJ1xufTtcbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvSWNvblR5cGVNYXApO1xuZXhwb3J0IHZhciBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cgPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3coX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgYXJpYUNvbnRyb2xzID0gX3JlZi5hcmlhQ29udHJvbHMsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrO1xuICB2YXIgbGFiZWxzID0ge1xuICAgIGZpcnN0OiB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cuZmlyc3RQYWdlJywgJ0ZpcnN0IHBhZ2UnKSxcbiAgICBwcmV2aW91czogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LnByZXZpb3VzUGFnZScsICdQcmV2aW91cyBwYWdlJyksXG4gICAgbmV4dDogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93Lm5leHRQYWdlJywgJ05leHQgcGFnZScpLFxuICAgIGxhc3Q6IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5sYXN0UGFnZScsICdMYXN0IHBhZ2UnKVxuICB9O1xuICB2YXIgYnV0dG9uUHJvcHMgPSB7fTtcblxuICBpZiAoYXJpYUNvbnRyb2xzICYmICFkaXNhYmxlZCkge1xuICAgIGJ1dHRvblByb3BzLmhyZWYgPSBcIiNcIi5jb25jYXQoYXJpYUNvbnRyb2xzKTtcbiAgICBidXR0b25Qcm9wc1snYXJpYS1jb250cm9scyddID0gYXJpYUNvbnRyb2xzO1xuICB9XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpUGFnaW5hdGlvbkFycm93QnV0dG9uJywgY2xhc3NOYW1lKSxcbiAgICBjb2xvcjogXCJ0ZXh0XCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGxhYmVsc1t0eXBlXSxcbiAgICB0aXRsZTogZGlzYWJsZWQgPyB1bmRlZmluZWQgOiBsYWJlbHNbdHlwZV0sXG4gICAgaXNEaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwicGFnaW5hdGlvbi1idXR0b24tXCIuY29uY2F0KHR5cGUpLFxuICAgIGljb25UeXBlOiB0eXBlVG9JY29uVHlwZU1hcFt0eXBlXVxuICB9LCBidXR0b25Qcm9wcykpO1xufTtcbkV1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5wcm9wVHlwZXMgPSB7XG4gIHR5cGU6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBhcmlhQ29udHJvbHM6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJpc1NlbGVjdGVkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFiID0gZnVuY3Rpb24gRXVpVGFiKF9yZWYpIHtcbiAgdmFyIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9kaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIHByZXBlbmQgPSBfcmVmLnByZXBlbmQsXG4gICAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFiJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYi1pc1NlbGVjdGVkJzogaXNTZWxlY3RlZCxcbiAgICAnZXVpVGFiLWlzRGlzYWJsZWQnOiBkaXNhYmxlZFxuICB9KTtcblxuICB2YXIgcHJlcGVuZE5vZGUgPSBwcmVwZW5kICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFiX19wcmVwZW5kXCJcbiAgfSwgcHJlcGVuZCk7XG5cbiAgdmFyIGFwcGVuZE5vZGUgPSBhcHBlbmQgJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2FwcGVuZFwiXG4gIH0sIGFwcGVuZCk7IC8vICA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gIHRoaXMgaXMgYSBidXR0b24gYW5kIHBpZ2d5YmFjayBvZmYgaXRzIGRpc2FibGVkIHN0eWxlcy5cblxuXG4gIGlmIChocmVmICYmICFkaXNhYmxlZCkge1xuICAgIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImFcIiwgX2V4dGVuZHMoe1xuICAgICAgcm9sZTogXCJ0YWJcIixcbiAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhIWlzU2VsZWN0ZWQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHNlY3VyZVJlbFxuICAgIH0sIHJlc3QpLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYl9fY29udGVudFwiXG4gICAgfSwgY2hpbGRyZW4pLCBhcHBlbmROb2RlKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcInRhYlwiLFxuICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhIWlzU2VsZWN0ZWQsXG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gIH0sIHJlc3QpLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2NvbnRlbnRcIlxuICB9LCBjaGlsZHJlbiksIGFwcGVuZE5vZGUpO1xufTtcbkV1aVRhYi5wcm9wVHlwZXMgPSB7XG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYmVmb3JlIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBiZWZvcmUgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBhZnRlciB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYWZ0ZXIgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJib3R0b21Cb3JkZXJcIiwgXCJleHBhbmRcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgczogJ2V1aVRhYnMtLXNtYWxsJyxcbiAgbTogbnVsbCxcbiAgbDogJ2V1aVRhYnMtLWxhcmdlJyxcbiAgeGw6ICdldWlUYWJzLS14bGFyZ2UnXG59O1xuZXhwb3J0IHZhciBTSVpFUyA9IGtleXNPZihzaXplVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlUYWJzID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGJvdHRvbUJvcmRlciA9IF9yZWYuYm90dG9tQm9yZGVyLFxuICAgICAgYm90dG9tQm9yZGVyID0gX3JlZiRib3R0b21Cb3JkZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGJvdHRvbUJvcmRlcixcbiAgICAgIF9yZWYkZXhwYW5kID0gX3JlZi5leHBhbmQsXG4gICAgICBleHBhbmQgPSBfcmVmJGV4cGFuZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGV4cGFuZCxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYnMnLCBzaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0sIHtcbiAgICAnZXVpVGFicy0tZXhwYW5kJzogZXhwYW5kLFxuICAgICdldWlUYWJzLS1ib3R0b21Cb3JkZXInOiBib3R0b21Cb3JkZXJcbiAgfSwgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCBjaGlsZHJlbiAmJiB7XG4gICAgcm9sZTogJ3RhYmxpc3QnXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59KTtcbkV1aVRhYnMuZGlzcGxheU5hbWUgPSAnRXVpVGFicyc7IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImV4cGFuZFwiLCBcImluaXRpYWxTZWxlY3RlZFRhYlwiLCBcIm9uVGFiQ2xpY2tcIiwgXCJzZWxlY3RlZFRhYlwiLCBcInNpemVcIiwgXCJ0YWJzXCIsIFwiYXV0b0ZvY3VzXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJpZFwiLCBcIm5hbWVcIiwgXCJjb250ZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgY3JlYXRlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVGFicyB9IGZyb20gJy4uL3RhYnMnO1xuaW1wb3J0IHsgRXVpVGFiIH0gZnJvbSAnLi4vdGFiJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbi8qKlxuICogTWFya2VkIGFzIGNvbnN0IHNvIHR5cGUgaXMgYFsnaW5pdGlhbCcsICdzZWxlY3RlZCddYCBpbnN0ZWFkIG9mIGBzdHJpbmdbXWBcbiAqL1xuZXhwb3J0IHZhciBBVVRPRk9DVVMgPSBbJ2luaXRpYWwnLCAnc2VsZWN0ZWQnXTtcbmV4cG9ydCB2YXIgRXVpVGFiYmVkQ29udGVudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVGFiYmVkQ29udGVudCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlUYWJiZWRDb250ZW50KTtcblxuICBmdW5jdGlvbiBFdWlUYWJiZWRDb250ZW50KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVRhYmJlZENvbnRlbnQpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicm9vdElkXCIsIGh0bWxJZEdlbmVyYXRvcigpKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRhYnNSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJmb2N1c1RhYlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGFyZ2V0VGFiID0gX3RoaXMudGFic1JlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCIjXCIuY29uY2F0KF90aGlzLnN0YXRlLnNlbGVjdGVkVGFiSWQpKTtcblxuICAgICAgdGFyZ2V0VGFiLmZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5pdGlhbGl6ZUZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaW5Gb2N1cyAmJiBfdGhpcy5wcm9wcy5hdXRvRm9jdXMgPT09ICdzZWxlY3RlZCcpIHtcbiAgICAgICAgLy8gTXVzdCB3YWl0IGZvciBzZXRTdGF0ZSB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgYC5mb2N1cygpYFxuICAgICAgICAvLyBhcyB0aGUgZm9jdXMgY2FsbCB0cmlnZ2VycyBhIGJsdXIgb24gdGhlIGZpcnN0IHRhYlxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5Gb2N1czogdHJ1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNUYWIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVtb3ZlRm9jdXNcIiwgZnVuY3Rpb24gKGJsdXJFdmVudCkge1xuICAgICAgLy8gb25seSBzZXQgaW5Gb2N1cyB0byBmYWxzZSBpZiB0aGUgd3JhcHBpbmcgZGl2IGRvZXNuJ3QgY29udGFpbiB0aGUgbm93LWZvY3VzaW5nIGVsZW1lbnRcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gYmx1ckV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGJsdXJFdmVudC5yZWxhdGVkVGFyZ2V0O1xuXG4gICAgICBpZiAoY3VycmVudFRhcmdldC5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGluRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uVGFiQ2xpY2tcIiwgZnVuY3Rpb24gKHNlbGVjdGVkVGFiKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvblRhYkNsaWNrID0gX3RoaXMkcHJvcHMub25UYWJDbGljayxcbiAgICAgICAgICBleHRlcm5hbFNlbGVjdGVkVGFiID0gX3RoaXMkcHJvcHMuc2VsZWN0ZWRUYWI7XG5cbiAgICAgIGlmIChvblRhYkNsaWNrKSB7XG4gICAgICAgIG9uVGFiQ2xpY2soc2VsZWN0ZWRUYWIpO1xuICAgICAgfSAvLyBPbmx5IHRyYWNrIHNlbGVjdGlvbiBzdGF0ZSBpZiBpdCdzIG5vdCBjb250cm9sbGVkIGV4dGVybmFsbHkuXG5cblxuICAgICAgaWYgKCFleHRlcm5hbFNlbGVjdGVkVGFiKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzZWxlY3RlZFRhYklkOiBzZWxlY3RlZFRhYi5pZFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNUYWIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgaW5pdGlhbFNlbGVjdGVkVGFiID0gcHJvcHMuaW5pdGlhbFNlbGVjdGVkVGFiLFxuICAgICAgICBfc2VsZWN0ZWRUYWIgPSBwcm9wcy5zZWxlY3RlZFRhYixcbiAgICAgICAgdGFicyA9IHByb3BzLnRhYnM7IC8vIE9ubHkgdHJhY2sgc2VsZWN0aW9uIHN0YXRlIGlmIGl0J3Mgbm90IGNvbnRyb2xsZWQgZXh0ZXJuYWxseS5cblxuICAgIHZhciBzZWxlY3RlZFRhYklkO1xuXG4gICAgaWYgKCFfc2VsZWN0ZWRUYWIpIHtcbiAgICAgIHNlbGVjdGVkVGFiSWQgPSBpbml0aWFsU2VsZWN0ZWRUYWIgJiYgaW5pdGlhbFNlbGVjdGVkVGFiLmlkIHx8IHRhYnNbMF0uaWQ7XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzZWxlY3RlZFRhYklkOiBzZWxlY3RlZFRhYklkLFxuICAgICAgaW5Gb2N1czogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUYWJiZWRDb250ZW50LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIC8vIElFMTEgZG9lc24ndCBzdXBwb3J0IHRoZSBgcmVsYXRlZFRhcmdldGAgZXZlbnQgcHJvcGVydHkgZm9yIGJsdXIgZXZlbnRzXG4gICAgICAvLyBidXQgZG9lcyBhZGQgaXQgZm9yIGZvY3Vzb3V0LiBSZWFjdCBkb2Vzbid0IHN1cHBvcnQgYG9uRm9jdXNPdXRgIHNvIGhlcmUgd2UgYXJlLlxuICAgICAgaWYgKHRoaXMudGFic1JlZi5jdXJyZW50KSB7XG4gICAgICAgIC8vIEN1cnJlbnQgc2hvcnQtdGVybSBzb2x1dGlvbiBmb3IgZXZlbnQgbGlzdGVuZXIgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC8yNzE3KVxuICAgICAgICB0aGlzLnRhYnNSZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMucmVtb3ZlRm9jdXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnRhYnNSZWYuY3VycmVudCkge1xuICAgICAgICAvLyBDdXJyZW50IHNob3J0LXRlcm0gc29sdXRpb24gZm9yIGV2ZW50IGxpc3RlbmVyIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvMjcxNylcbiAgICAgICAgdGhpcy50YWJzUmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLnJlbW92ZUZvY3VzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICAgIGV4cGFuZCA9IF90aGlzJHByb3BzMi5leHBhbmQsXG4gICAgICAgICAgaW5pdGlhbFNlbGVjdGVkVGFiID0gX3RoaXMkcHJvcHMyLmluaXRpYWxTZWxlY3RlZFRhYixcbiAgICAgICAgICBvblRhYkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uVGFiQ2xpY2ssXG4gICAgICAgICAgZXh0ZXJuYWxTZWxlY3RlZFRhYiA9IF90aGlzJHByb3BzMi5zZWxlY3RlZFRhYixcbiAgICAgICAgICBzaXplID0gX3RoaXMkcHJvcHMyLnNpemUsXG4gICAgICAgICAgdGFicyA9IF90aGlzJHByb3BzMi50YWJzLFxuICAgICAgICAgIGF1dG9Gb2N1cyA9IF90aGlzJHByb3BzMi5hdXRvRm9jdXMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7IC8vIEFsbG93IHRoZSBjb25zdW1lciB0byBjb250cm9sIHRhYiBzZWxlY3Rpb24uXG5cblxuICAgICAgdmFyIHNlbGVjdGVkVGFiID0gZXh0ZXJuYWxTZWxlY3RlZFRhYiB8fCB0YWJzLmZpbmQoZnVuY3Rpb24gKHRhYikge1xuICAgICAgICByZXR1cm4gdGFiLmlkID09PSBfdGhpczIuc3RhdGUuc2VsZWN0ZWRUYWJJZDtcbiAgICAgIH0pO1xuICAgICAgdmFyIF9yZWYgPSBzZWxlY3RlZFRhYixcbiAgICAgICAgICBzZWxlY3RlZFRhYkNvbnRlbnQgPSBfcmVmLmNvbnRlbnQsXG4gICAgICAgICAgc2VsZWN0ZWRUYWJJZCA9IF9yZWYuaWQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlUYWJzLCB7XG4gICAgICAgIHJlZjogdGhpcy50YWJzUmVmLFxuICAgICAgICBleHBhbmQ6IGV4cGFuZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgb25Gb2N1czogdGhpcy5pbml0aWFsaXplRm9jdXNcbiAgICAgIH0sIHRhYnMubWFwKGZ1bmN0aW9uICh0YWIpIHtcbiAgICAgICAgdmFyIGlkID0gdGFiLmlkLFxuICAgICAgICAgICAgbmFtZSA9IHRhYi5uYW1lLFxuICAgICAgICAgICAgY29udGVudCA9IHRhYi5jb250ZW50LFxuICAgICAgICAgICAgdGFiUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXModGFiLCBfZXhjbHVkZWQyKTtcblxuICAgICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIGtleTogaWQsXG4gICAgICAgICAgaWQ6IGlkXG4gICAgICAgIH0sIHRhYlByb3BzKSwge30sIHtcbiAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vblRhYkNsaWNrKHRhYik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc1NlbGVjdGVkOiB0YWIgPT09IHNlbGVjdGVkVGFiLFxuICAgICAgICAgICdhcmlhLWNvbnRyb2xzJzogXCJcIi5jb25jYXQoX3RoaXMyLnJvb3RJZClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFiLCBwcm9wcywgbmFtZSk7XG4gICAgICB9KSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICByb2xlOiBcInRhYnBhbmVsXCIsXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdCh0aGlzLnJvb3RJZCksXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHNlbGVjdGVkVGFiSWRcbiAgICAgIH0sIHNlbGVjdGVkVGFiQ29udGVudCkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUYWJiZWRDb250ZW50O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpVGFiYmVkQ29udGVudCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBhdXRvRm9jdXM6ICdpbml0aWFsJ1xufSk7XG5cbkV1aVRhYmJlZENvbnRlbnQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBXaGVuIHRhYmJpbmcgaW50byB0aGUgdGFicywgc2V0IHRoZSBmb2N1cyBvbiBgaW5pdGlhbGAgZm9yIHRoZSBmaXJzdCB0YWIsXG4gICAgICAgKiBvciBgc2VsZWN0ZWRgIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhYi4gQmVzdCB1c2UgY2FzZSBpcyBmb3IgaW5zaWRlIG9mXG4gICAgICAgKiBvdmVybGF5IGNvbnRlbnQgbGlrZSBwb3BvdmVycyBvciBmbHlvdXRzLlxuICAgICAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLm9uZU9mKFtcImluaXRpYWxcIiwgXCJzZWxlY3RlZFwiXSksXG5cbiAgLyoqXG4gICAgICAgKiBFdmVubHkgc3RyZXRjaGVzIGVhY2ggdGFiIHRvIGZpbGwgdGhlIGhvcml6b250YWwgc3BhY2VcbiAgICAgICAqL1xuICBleHBhbmQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogVXNlIHRoaXMgcHJvcCB0byBzZXQgdGhlIGluaXRpYWxseSBzZWxlY3RlZCB0YWIgd2hpbGUgbGV0dGluZyB0aGUgdGFiYmVkIGNvbnRlbnQgY29tcG9uZW50XG4gICAgICAgKiBjb250cm9sIHNlbGVjdGlvbiBzdGF0ZSBpbnRlcm5hbGx5XG4gICAgICAgKi9cbiAgaW5pdGlhbFNlbGVjdGVkVGFiOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogUGxhY2VzIGNvbnRlbnQgYmVmb3JlIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAgICovXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgICAvKipcbiAgICAgICAqIFBsYWNlcyBjb250ZW50IGFmdGVyIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAgICovXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBvblRhYkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIFVzZSB0aGlzIHByb3AgaWYgeW91IHdhbnQgdG8gY29udHJvbCBzZWxlY3Rpb24gc3RhdGUgd2l0aGluIHRoZSBvd25lciBjb21wb25lbnRcbiAgICAgICAqL1xuICBzZWxlY3RlZFRhYjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgY29udGVudDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIiwgXCJsXCIsIFwieGxcIl0pLFxuXG4gIC8qKlxuICAgICAgICogRWFjaCB0YWIgbmVlZHMgaWQgYW5kIGNvbnRlbnQgcHJvcGVydGllcywgc28gd2UgY2FuIGFzc29jaWF0ZSBpdCB3aXRoIGl0cyBwYW5lbCBmb3IgYWNjZXNzaWJpbGl0eS5cbiAgICAgICAqIFRoZSBuYW1lIHByb3BlcnR5IChhIG5vZGUpIGlzIGFsc28gcmVxdWlyZWQgdG8gZGlzcGxheSB0byB0aGUgdXNlci5cbiAgICAgICAqL1xuICB0YWJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmV4cG9ydCB2YXIgRXVpRGVsYXlSZW5kZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aURlbGF5UmVuZGVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aURlbGF5UmVuZGVyKTtcblxuICBmdW5jdGlvbiBFdWlEZWxheVJlbmRlcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlEZWxheVJlbmRlcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJkZWxheUlEXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9CZURlbGF5ZWRcIiwgdHJ1ZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhcnREZWxheWluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KF90aGlzLmRlbGF5SUQpO1xuICAgICAgX3RoaXMudG9CZURlbGF5ZWQgPSB0cnVlO1xuICAgICAgX3RoaXMuZGVsYXlJRCA9IHdpbmRvdy5zZXRUaW1lb3V0KF90aGlzLnN0b3BEZWxheWluZywgX3RoaXMucHJvcHMuZGVsYXkpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0b3BEZWxheWluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KF90aGlzLmRlbGF5SUQpO1xuICAgICAgX3RoaXMudG9CZURlbGF5ZWQgPSBmYWxzZTtcblxuICAgICAgX3RoaXMuc2hvdWxkVXBkYXRlKCk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHRvZ2dsZTogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlEZWxheVJlbmRlciwgW3tcbiAgICBrZXk6IFwic2hvdWxkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIHRvZ2dsZSA9IF9yZWYudG9nZ2xlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRvZ2dsZTogIXRvZ2dsZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5zdGFydERlbGF5aW5nKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNob3VsZENvbXBvbmVudFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgICBpZiAodGhpcy50b0JlRGVsYXllZCkge1xuICAgICAgICB0aGlzLnN0YXJ0RGVsYXlpbmcoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5zdG9wRGVsYXlpbmcoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMudG9CZURlbGF5ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuICF0aGlzLnRvQmVEZWxheWVkID8gdGhpcy5wcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aURlbGF5UmVuZGVyO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpRGVsYXlSZW5kZXIsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgZGVsYXk6IDUwMFxufSk7XG5cbkV1aURlbGF5UmVuZGVyLnByb3BUeXBlcyA9IHtcbiAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJ0ZXh0U2l6ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpSGVhbHRoU3R5bGVzIH0gZnJvbSAnLi9oZWFsdGguc3R5bGVzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0gfSBmcm9tICcuLi9mbGV4JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFRFWFRfU0laRVMgPSBbJ3hzJywgJ3MnLCAnbScsICdpbmhlcml0J107XG5leHBvcnQgdmFyIEV1aUhlYWx0aCA9IGZ1bmN0aW9uIEV1aUhlYWx0aChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIF9yZWYkdGV4dFNpemUgPSBfcmVmLnRleHRTaXplLFxuICAgICAgdGV4dFNpemUgPSBfcmVmJHRleHRTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHRleHRTaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlIZWFsdGhTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlIZWFsdGgsIHN0eWxlc1t0ZXh0U2l6ZV1dO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUhlYWx0aCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgZ3V0dGVyU2l6ZTogXCJ4c1wiLFxuICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgcmVzcG9uc2l2ZTogZmFsc2VcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiZG90XCIsXG4gICAgY29sb3I6IGNvbG9yXG4gIH0pKSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIGNoaWxkcmVuKSkpO1xufTtcbkV1aUhlYWx0aC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBkb3QgaWNvbi5cbiAgICAgICAqIEl0IGFjY2VwdHMgYW55IGBJY29uQ29sb3JgOiBgZGVmYXVsdGAsIGBwcmltYXJ5YCwgYHN1Y2Nlc3NgLCBgYWNjZW50YCwgYHdhcm5pbmdgLCBgZGFuZ2VyYCwgYHRleHRgLFxuICAgICAgICogYHN1YmR1ZWRgIG9yIGBnaG9zdGA7IG9yIGFueSB2YWxpZCBDU1MgY29sb3IgdmFsdWUgYXMgYSBgc3RyaW5nYFxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogTWF0Y2hlcyB0aGUgdGV4dCBzY2FsZXMgb2YgRXVpVGV4dC5cbiAgICAgICAqIFRoZSBgaW5oZXJpdGAgc3R5bGUgd2lsbCBnZXQgaXRzIGZvbnQgc2l6ZSBmcm9tIHRoZSBwYXJlbnQgZWxlbWVudFxuICAgICAgICovXG4gIHRleHRTaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXFob2pyaS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJmb250LXNpemU6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiXG59IDoge1xuICBuYW1lOiBcIjFxaG9qcmktaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiZm9udC1zaXplOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiajh1aGNrLWV1aUhlYWx0aFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7bGFiZWw6ZXVpSGVhbHRoO1wiXG59IDoge1xuICBuYW1lOiBcImo4dWhjay1ldWlIZWFsdGhcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lLWJsb2NrO2xhYmVsOmV1aUhlYWx0aDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aUhlYWx0aFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUhlYWx0aFN0eWxlcyhldWlUaGVtZSkge1xuICByZXR1cm4ge1xuICAgIGV1aUhlYWx0aDogX3JlZjIsXG4gICAgLy8gVGV4dCBzaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAneHMnKSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAncycpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZSwgJ20nKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGluaGVyaXQ6IF9yZWZcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJhbHRcIiwgXCJ1cmxcIiwgXCJzcmNcIiwgXCJzaXplXCIsIFwiaGFzU2hhZG93XCIsIFwic3R5bGVcIiwgXCJ3cmFwcGVyUHJvcHNcIiwgXCJmdWxsU2NyZWVuSWNvbkNvbG9yXCIsIFwiYWxsb3dGdWxsU2NyZWVuXCIsIFwiY2FwdGlvblwiLCBcImZsb2F0XCIsIFwibWFyZ2luXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZVdyYXBwZXIgfSBmcm9tICcuL2ltYWdlX3dyYXBwZXInO1xuaW1wb3J0IHsgZXVpSW1hZ2VTdHlsZXMgfSBmcm9tICcuL2ltYWdlLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyIH0gZnJvbSAnLi9pbWFnZV9mdWxsc2NyZWVuX3dyYXBwZXInO1xuaW1wb3J0IHsgU0laRVMgfSBmcm9tICcuL2ltYWdlX3R5cGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlID0gZnVuY3Rpb24gRXVpSW1hZ2UoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBhbHQgPSBfcmVmLmFsdCxcbiAgICAgIHVybCA9IF9yZWYudXJsLFxuICAgICAgc3JjID0gX3JlZi5zcmMsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnb3JpZ2luYWwnIDogX3JlZiRzaXplLFxuICAgICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICB3cmFwcGVyUHJvcHMgPSBfcmVmLndyYXBwZXJQcm9wcyxcbiAgICAgIGZ1bGxTY3JlZW5JY29uQ29sb3IgPSBfcmVmLmZ1bGxTY3JlZW5JY29uQ29sb3IsXG4gICAgICBhbGxvd0Z1bGxTY3JlZW4gPSBfcmVmLmFsbG93RnVsbFNjcmVlbixcbiAgICAgIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgICBmbG9hdCA9IF9yZWYuZmxvYXQsXG4gICAgICBtYXJnaW4gPSBfcmVmLm1hcmdpbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBpc0Z1bGxTY3JlZW4gPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0SXNGdWxsU2NyZWVuID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgaXNOYW1lZFNpemUgPSB0eXBlb2Ygc2l6ZSA9PT0gJ3N0cmluZycgJiYgU0laRVMuaW5jbHVkZXMoc2l6ZSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSW1hZ2UnLCBjbGFzc05hbWUpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSW1hZ2VTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZSwgaXNOYW1lZFNpemUgJiYgc3R5bGVzW3NpemVdLCAhaXNOYW1lZFNpemUgJiYgc3R5bGVzLmN1c3RvbVNpemUsIGhhc1NoYWRvdyAmJiBzdHlsZXMuaGFzU2hhZG93XTtcbiAgdmFyIGNzc0lzRnVsbFNjcmVlblN0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2UsIHN0eWxlcy5pc0Z1bGxTY3JlZW5dO1xuICB2YXIgaXNDdXN0b21TaXplID0gIWlzTmFtZWRTaXplICYmIHNpemUgIT09ICdvcmlnaW5hbCc7XG4gIHZhciBjdXN0b21TaXplID0gdHlwZW9mIHNpemUgPT09ICdzdHJpbmcnID8gc2l6ZSA6IFwiXCIuY29uY2F0KHNpemUsIFwicHhcIik7XG4gIHZhciBpbWFnZVN0eWxlV2l0aEN1c3RvbVNpemUgPSBpc0N1c3RvbVNpemUgPyBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKSwge30sIHtcbiAgICBtYXhXaWR0aDogY3VzdG9tU2l6ZSxcbiAgICBtYXhIZWlnaHQ6IGN1c3RvbVNpemVcbiAgfSkgOiBzdHlsZTtcbiAgdmFyIGlzRnVsbFdpZHRoID0gc2l6ZSA9PT0gJ2Z1bGxXaWR0aCc7XG4gIHZhciBjb21tb25XcmFwcGVyUHJvcHMgPSB7XG4gICAgaGFzU2hhZG93OiBoYXNTaGFkb3csXG4gICAgd3JhcHBlclByb3BzOiB3cmFwcGVyUHJvcHMsXG4gICAgc2V0SXNGdWxsU2NyZWVuOiBzZXRJc0Z1bGxTY3JlZW4sXG4gICAgZnVsbFNjcmVlbkljb25Db2xvcjogZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICBpc0Z1bGxXaWR0aDogaXNGdWxsV2lkdGgsXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBhbGxvd0Z1bGxTY3JlZW4sXG4gICAgYWx0OiBhbHQsXG4gICAgY2FwdGlvbjogY2FwdGlvbixcbiAgICBmbG9hdDogZmxvYXQsXG4gICAgbWFyZ2luOiBtYXJnaW5cbiAgfTtcblxuICB2YXIgY29tbW9uSW1nUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc3JjOiBzcmMgfHwgdXJsXG4gIH0sIHJlc3QpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUltYWdlV3JhcHBlciwgY29tbW9uV3JhcHBlclByb3BzLCBfX19FbW90aW9uSlNYKFwiaW1nXCIsIF9leHRlbmRzKHtcbiAgICBhbHQ6IGFsdCxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBzdHlsZTogaW1hZ2VTdHlsZVdpdGhDdXN0b21TaXplXG4gIH0sIGNvbW1vbkltZ1Byb3BzKSkpLCBhbGxvd0Z1bGxTY3JlZW4gJiYgaXNGdWxsU2NyZWVuICYmIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciwgY29tbW9uV3JhcHBlclByb3BzLCBfX19FbW90aW9uSlNYKFwiaW1nXCIsIF9leHRlbmRzKHtcbiAgICBhbHQ6IGFsdCxcbiAgICBjc3M6IGNzc0lzRnVsbFNjcmVlblN0eWxlcyxcbiAgICBzdHlsZTogc3R5bGVcbiAgfSwgY29tbW9uSW1nUHJvcHMpKSkpO1xufTtcbkV1aUltYWdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogUmVxdWlyZXMgZWl0aGVyIGBzcmNgIG9yIGB1cmxgIGJ1dCBkZWZhdWx0cyB0byB1c2luZyBgc3JjYCBpZiBib3RoIGFyZSBwcm92aWRlZFxuICAgICAgICovXG4gIHNyYzogUHJvcFR5cGVzLnN0cmluZyxcbiAgdXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQWx0IHRleHQgc2hvdWxkIGRlc2NyaWJlIHRoZSBpbWFnZSB0byBhaWQgc2NyZWVuIHJlYWRlciB1c2Vycy4gU2VlXG4gICAgICAgKiBodHRwczovL3dlYmFpbS5vcmcvdGVjaG5pcXVlcy9hbHR0ZXh0LyBmb3IgYSBndWlkZSBvbiB3cml0aW5nXG4gICAgICAgKiBlZmZlY3RpdmUgYWx0IHRleHQuXG4gICAgICAgKlxuICAgICAgICogSWYgbm8gbWVhbmluZ2Z1bCBkZXNjcmlwdGlvbiBleGlzdHMsIG9yIGlmIHRoZSBpbWFnZSBpcyBhZGVxdWF0ZWx5XG4gICAgICAgKiBkZXNjcmliZWQgYnkgdGhlIHN1cnJvdW5kaW5nIHRleHQsIHBhc3MgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICovXG4gIGFsdDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogUHJvdmlkZXMgYSB2aXNpYmxlIGNhcHRpb24gdG8gdGhlIGltYWdlXG4gICAgICAgKi9cbiAgY2FwdGlvbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGBzYCAvIGBtYCAvIGBsYCAvIGB4bGAgLyBgb3JpZ2luYWxgIC8gYGZ1bGxXaWR0aGAgLyBvciBhIENTUyBzaXplIG9mIGBudW1iZXJgIG9yIGBzdHJpbmdgLlxuICAgICAgICogYGZ1bGxXaWR0aGAgd2lsbCBzZXQgdGhlIGZpZ3VyZSB0byBzdHJldGNoIHRvIDEwMCUgb2YgaXRzIGNvbnRhaW5lci5cbiAgICAgICAqIGBzdHJpbmdgIGFuZCBgbnVtYmVyYCB0eXBlcyB3aWxsIG1heCBib3RoIHRoZSB3aWR0aCBvciBoZWlnaHQsIHdoaWNoZXZlciBpcyBncmVhdGVyLlxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIEZsb2F0IHRoZSBpbWFnZSB0byB0aGUgbGVmdCBvciByaWdodC4gVXNlZnVsIGluIGxhcmdlIHRleHQgYmxvY2tzLlxuICAgICAgICovXG4gIGZsb2F0OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogTWFyZ2luIGFyb3VuZCB0aGUgaW1hZ2UuXG4gICAgICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogV2hlbiBzZXQgdG8gYHRydWVgIChkZWZhdWx0KSB3aWxsIGFwcGx5IGEgc2xpZ2h0IHNoYWRvdyB0byB0aGUgaW1hZ2VcbiAgICAgICAqL1xuICBoYXNTaGFkb3c6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogV2hlbiBzZXQgdG8gYHRydWVgIHdpbGwgbWFrZSB0aGUgaW1hZ2UgY2xpY2thYmxlIHRvIGEgbGFyZ2VyIHZlcnNpb25cbiAgICAgICAqL1xuICBhbGxvd0Z1bGxTY3JlZW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogQ2hhbmdlcyB0aGUgY29sb3Igb2YgdGhlIGljb24gdGhhdCBmbG9hdHMgYWJvdmUgdGhlIGltYWdlIHdoZW4gaXQgY2FuIGJlIGNsaWNrZWQgdG8gZnVsbHNjcmVlbi5cbiAgICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIGBsaWdodGAgaXMgZmluZSB1bmxlc3MgeW91ciBpbWFnZSBoYXMgYSB3aGl0ZSBiYWNrZ3JvdW5kLCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgY2hhbmdlIGl0IHRvIGBkYXJrYC5cbiAgICAgICAqL1xuICBmdWxsU2NyZWVuSWNvbkNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wibGlnaHRcIiwgXCJkYXJrXCJdKSxcblxuICAvKipcbiAgICAgICAqIFByb3BzIHRvIGFkZCB0byB0aGUgd3JhcHBpbmcgZmlndXJlIGVsZW1lbnRcbiAgICAgICAqL1xuICB3cmFwcGVyUHJvcHM6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBldWlJbWFnZVdyYXBwZXJTdHlsZXMgfSBmcm9tICcuL2ltYWdlX3dyYXBwZXIuc3R5bGVzJztcbmltcG9ydCB7IEV1aUltYWdlQnV0dG9uIH0gZnJvbSAnLi9pbWFnZV9idXR0b24nO1xuaW1wb3J0IHsgRXVpSW1hZ2VDYXB0aW9uIH0gZnJvbSAnLi9pbWFnZV9jYXB0aW9uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlV3JhcHBlciA9IGZ1bmN0aW9uIEV1aUltYWdlV3JhcHBlcihfcmVmKSB7XG4gIHZhciBhbHQgPSBfcmVmLmFsdCxcbiAgICAgIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgICBoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICAgIGFsbG93RnVsbFNjcmVlbiA9IF9yZWYuYWxsb3dGdWxsU2NyZWVuLFxuICAgICAgZmxvYXQgPSBfcmVmLmZsb2F0LFxuICAgICAgbWFyZ2luID0gX3JlZi5tYXJnaW4sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBzZXRJc0Z1bGxTY3JlZW4gPSBfcmVmLnNldElzRnVsbFNjcmVlbixcbiAgICAgIHdyYXBwZXJQcm9wcyA9IF9yZWYud3JhcHBlclByb3BzLFxuICAgICAgZnVsbFNjcmVlbkljb25Db2xvciA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICAgIGlzRnVsbFdpZHRoID0gX3JlZi5pc0Z1bGxXaWR0aDtcblxuICB2YXIgb3BlbkZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBvcGVuRnVsbFNjcmVlbigpIHtcbiAgICBzZXRJc0Z1bGxTY3JlZW4odHJ1ZSk7XG4gIH07XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlJbWFnZVdyYXBwZXInLCB3cmFwcGVyUHJvcHMgJiYgd3JhcHBlclByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlJbWFnZVdyYXBwZXJTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzRmlndXJlU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZVdyYXBwZXIsIGZsb2F0ICYmIHN0eWxlc1tmbG9hdF0sIG1hcmdpbiAmJiBzdHlsZXNbbWFyZ2luXSwgYWxsb3dGdWxsU2NyZWVuICYmIHN0eWxlcy5hbGxvd0Z1bGxTY3JlZW4sIGlzRnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGhdO1xuXG4gIHZhciBfdXNlSW5uZXJUZXh0ID0gdXNlSW5uZXJUZXh0KCksXG4gICAgICBfdXNlSW5uZXJUZXh0MiA9IF9zbGljZWRUb0FycmF5KF91c2VJbm5lclRleHQsIDIpLFxuICAgICAgb3B0aW9uYWxDYXB0aW9uUmVmID0gX3VzZUlubmVyVGV4dDJbMF0sXG4gICAgICBvcHRpb25hbENhcHRpb25UZXh0ID0gX3VzZUlubmVyVGV4dDJbMV07XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJmaWd1cmVcIiwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1sYWJlbFwiOiBvcHRpb25hbENhcHRpb25UZXh0XG4gIH0sIHdyYXBwZXJQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc0ZpZ3VyZVN0eWxlc1xuICB9KSwgYWxsb3dGdWxsU2NyZWVuID8gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUJ1dHRvbiwge1xuICAgIGhhc0FsdDogISFhbHQsXG4gICAgaGFzU2hhZG93OiBoYXNTaGFkb3csXG4gICAgb25DbGljazogb3BlbkZ1bGxTY3JlZW4sXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImFjdGl2YXRlRnVsbFNjcmVlbkJ1dHRvblwiLFxuICAgIGlzRnVsbFdpZHRoOiBpc0Z1bGxXaWR0aCxcbiAgICBmdWxsU2NyZWVuSWNvbkNvbG9yOiBmdWxsU2NyZWVuSWNvbkNvbG9yXG4gIH0sIGNoaWxkcmVuKSkgOiBjaGlsZHJlbiwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUNhcHRpb24sIHtcbiAgICByZWY6IG9wdGlvbmFsQ2FwdGlvblJlZixcbiAgICBjYXB0aW9uOiBjYXB0aW9uXG4gIH0pKTtcbn07XG5FdWlJbWFnZVdyYXBwZXIucHJvcFR5cGVzID0ge1xuICBpc0Z1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgc2V0SXNGdWxsU2NyZWVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBsb2dpY2FsU2lkZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiZ2Fjbm1jLWFsbG93RnVsbFNjcmVlblwiLFxuICBzdHlsZXM6IFwiJjpob3ZlciBbY2xhc3MqPSdldWlJbWFnZUNhcHRpb24nXXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO307bGFiZWw6YWxsb3dGdWxsU2NyZWVuO1wiXG59IDoge1xuICBuYW1lOiBcImdhY25tYy1hbGxvd0Z1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcIiY6aG92ZXIgW2NsYXNzKj0nZXVpSW1hZ2VDYXB0aW9uJ117dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmFsbG93RnVsbFNjcmVlbjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aUltYWdlV3JhcHBlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlV3JhcHBlclN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJbWFnZVdyYXBwZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmlubGluZS1ibG9jaztcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIjtsaW5lLWhlaWdodDowO2ZsZXgtc2hyaW5rOjA7O2xhYmVsOmV1aUltYWdlV3JhcHBlcjtcIiksXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBfcmVmLFxuICAgIC8vIE1hcmdpbnNcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luOlwiLCBldWlUaGVtZS5zaXplLmJhc2UsIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luOlwiLCBldWlUaGVtZS5zaXplLmwsIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbjpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICAvLyBGbG9hdHNcbiAgICAvLyAxOiBMb2dpY2FsIHByb3BlcnRpZXMvdmFsdWVzIGluIGBmbG9hdGAgaXMgY3VycmVudGx5IG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2VycyB3L28gZmxhZ3NcbiAgICAvLyBAc2VlIGh0dHBzOi8vY2FuaXVzZS5jb20vbWRuLWNzc19wcm9wZXJ0aWVzX2Zsb2F0X2Zsb3dfcmVsYXRpdmVfdmFsdWVzIGZvciB3aGVuIHdlIGNhbiByZW1vdmUgbGVmdC9yaWdodCBmYWxsYmFja3NcbiAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBcIiwgZXVpVGhlbWUuYnJlYWtwb2ludC5tLCBcInB4KXtmbG9hdDpsZWZ0O2Zsb2F0OlwiLCBsb2dpY2FsU2lkZS5sZWZ0LCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCAnMCcpLCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsICcwJyksIFwiO307bGFiZWw6bGVmdDtcIiksXG4gICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IFwiLCBldWlUaGVtZS5icmVha3BvaW50Lm0sIFwicHgpe2Zsb2F0OnJpZ2h0O2Zsb2F0OlwiLCBsb2dpY2FsU2lkZS5yaWdodCwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1yaWdodCcsICcwJyksIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgJzAnKSwgXCI7fTtsYWJlbDpyaWdodDtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImhhc0FsdFwiLCBcImhhc1NoYWRvd1wiLCBcImNoaWxkcmVuXCIsIFwib25DbGlja1wiLCBcIm9uS2V5RG93blwiLCBcImlzRnVsbFNjcmVlblwiLCBcImlzRnVsbFdpZHRoXCIsIFwiZnVsbFNjcmVlbkljb25Db2xvclwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGV1aUltYWdlQnV0dG9uU3R5bGVzLCBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMgfSBmcm9tICcuL2ltYWdlX2J1dHRvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBmdWxsU2NyZWVuSWNvbkNvbG9yTWFwID0ge1xuICBsaWdodDogJ2dob3N0JyxcbiAgZGFyazogJ2RlZmF1bHQnXG59O1xuZXhwb3J0IHZhciBFdWlJbWFnZUJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUltYWdlQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGhhc0FsdCA9IF9yZWYuaGFzQWx0LFxuICAgICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgb25LZXlEb3duID0gX3JlZi5vbktleURvd24sXG4gICAgICBpc0Z1bGxTY3JlZW4gPSBfcmVmLmlzRnVsbFNjcmVlbixcbiAgICAgIGlzRnVsbFdpZHRoID0gX3JlZi5pc0Z1bGxXaWR0aCxcbiAgICAgIF9yZWYkZnVsbFNjcmVlbkljb25DbyA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICAgIGZ1bGxTY3JlZW5JY29uQ29sb3IgPSBfcmVmJGZ1bGxTY3JlZW5JY29uQ28gPT09IHZvaWQgMCA/ICdsaWdodCcgOiBfcmVmJGZ1bGxTY3JlZW5JY29uQ28sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGJ1dHRvblN0eWxlcyA9IGV1aUltYWdlQnV0dG9uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0J1dHRvblN0eWxlcyA9IFtidXR0b25TdHlsZXMuZXVpSW1hZ2VCdXR0b24sIGhhc1NoYWRvdyA/IGJ1dHRvblN0eWxlcy5oYXNTaGFkb3dIb3ZlciA6IGJ1dHRvblN0eWxlcy5zaGFkb3dIb3ZlciwgIWlzRnVsbFNjcmVlbiAmJiBpc0Z1bGxXaWR0aCAmJiBidXR0b25TdHlsZXMuZnVsbFdpZHRoXTtcbiAgdmFyIGljb25TdHlsZXMgPSBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzSWNvblN0eWxlcyA9IFtpY29uU3R5bGVzLmV1aUltYWdlQnV0dG9uX19pY29uLCBpY29uU3R5bGVzLm9wZW5GdWxsU2NyZWVuXTtcbiAgdmFyIG9wZW5GdWxsU2NyZWVuSW5zdHJ1Y3Rpb25zID0gdXNlRXVpSTE4bignZXVpSW1hZ2VCdXR0b24ub3BlbkZ1bGxTY3JlZW4nLCAnQ2xpY2sgdG8gb3BlbiB0aGlzIGltYWdlIGluIGZ1bGxzY3JlZW4gbW9kZScpO1xuICB2YXIgY2xvc2VGdWxsU2NyZWVuSW5zdHJ1Y3Rpb25zID0gdXNlRXVpSTE4bignZXVpSW1hZ2VCdXR0b24uY2xvc2VGdWxsU2NyZWVuJywgJ1ByZXNzIEVzY2FwZSBvciBjbGljayB0byBjbG9zZSBpbWFnZSBmdWxsc2NyZWVuIG1vZGUnKTtcbiAgdmFyIGljb25Db2xvciA9IGZ1bGxTY3JlZW5JY29uQ29sb3JNYXBbZnVsbFNjcmVlbkljb25Db2xvcl07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIGNzczogY3NzQnV0dG9uU3R5bGVzLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgb25LZXlEb3duOiBvbktleURvd25cbiAgfSwgcmVzdCksIGlzRnVsbFNjcmVlbiAmJiAvLyBJbiBmdWxsc2NyZWVuIG1vZGUsIGluc3RydWN0aW9ucyBzaG91bGQgY29tZSBmaXJzdCB0byBhbGxvdyBzY3JlZW4gcmVhZGVyXG4gIC8vIHVzZXJzIHRvIHF1aWNrbHkgZXhpdCB2cy4gcG90ZW50aWFsbHkgcmVhZGluZyBvdXQgbG9uZy91bnNraXBwYWJsZSBhbHQgdGV4dFxuICBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGNsb3NlRnVsbFNjcmVlbkluc3RydWN0aW9ucywgaGFzQWx0ICYmICcgXHUyMDE0ICcpKSwgY2hpbGRyZW4sICFpc0Z1bGxTY3JlZW4gJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY3NzOiBjc3NJY29uU3R5bGVzXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgaGFzQWx0ICYmICcgXHUyMDE0ICcsIG9wZW5GdWxsU2NyZWVuSW5zdHJ1Y3Rpb25zKSksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiZnVsbFNjcmVlblwiLFxuICAgIGNvbG9yOiBpY29uQ29sb3JcbiAgfSkpKSk7XG59O1xuRXVpSW1hZ2VCdXR0b24ucHJvcFR5cGVzID0ge1xuICBoYXNBbHQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIGlzRnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpc0Z1bGxTY3JlZW46IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGxvZ2ljYWxDU1MsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlTaGFkb3cgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5leHBvcnQgdmFyIGV1aUltYWdlQnV0dG9uU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VCdXR0b25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VCdXR0b246IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOm1hdGNoLXBhcmVudDtsaW5lLWhlaWdodDowOyY6OmJlZm9yZXtvcGFjaXR5OjA7Y29udGVudDonJztwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO319Jjpob3ZlciwmOmZvY3VzeyY6OmJlZm9yZXtvcGFjaXR5OjE7fVtjbGFzcyo9J2V1aUltYWdlQnV0dG9uX19pY29uJ117b3BhY2l0eToxO319Jjpmb2N1c3tcIiwgZXVpRm9jdXNSaW5nKGV1aVRoZW1lLCAnb3V0c2V0JyksIFwiO307bGFiZWw6ZXVpSW1hZ2VCdXR0b247XCIpLFxuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpLFxuICAgIHNoYWRvd0hvdmVyOiAvKiNfX1BVUkVfXyovY3NzKFwiJjo6YmVmb3Jle1wiLCBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIjt9O2xhYmVsOnNoYWRvd0hvdmVyO1wiKSxcbiAgICBoYXNTaGFkb3dIb3ZlcjogLyojX19QVVJFX18qL2NzcyhcIiY6OmJlZm9yZXtcIiwgZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7fTtsYWJlbDpoYXNTaGFkb3dIb3ZlcjtcIilcbiAgfTtcbn07XG5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInhqNGRzYS1jbG9zZUZ1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcInBvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6Y2xvc2VGdWxsU2NyZWVuO1wiXG59IDoge1xuICBuYW1lOiBcInhqNGRzYS1jbG9zZUZ1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcInBvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6Y2xvc2VGdWxsU2NyZWVuO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJbWFnZUJ1dHRvbl9faWNvbjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCBldWlUaGVtZS5zaXplLmJhc2UpLCBcIjtcIiwgbG9naWNhbENTUygncmlnaHQnLCBldWlUaGVtZS5zaXplLmJhc2UpLCBcIjs7bGFiZWw6ZXVpSW1hZ2VCdXR0b25fX2ljb247XCIpLFxuICAgIG9wZW5GdWxsU2NyZWVuOiAvKiNfX1BVUkVfXyovY3NzKFwib3BhY2l0eTowO2N1cnNvcjpwb2ludGVyO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5zbG93LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO307bGFiZWw6b3BlbkZ1bGxTY3JlZW47XCIpLFxuICAgIGNsb3NlRnVsbFNjcmVlbjogX3JlZlxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlJbWFnZUNhcHRpb25TdHlsZXMgfSBmcm9tICcuL2ltYWdlX2NhcHRpb24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlQ2FwdGlvbiA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgICBfcmVmJGlzT25PdmVybGF5TWFzayA9IF9yZWYuaXNPbk92ZXJsYXlNYXNrLFxuICAgICAgaXNPbk92ZXJsYXlNYXNrID0gX3JlZiRpc09uT3ZlcmxheU1hc2sgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpc09uT3ZlcmxheU1hc2s7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlJbWFnZUNhcHRpb25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZUNhcHRpb24sIGlzT25PdmVybGF5TWFzayAmJiBzdHlsZXMuaXNPbk92ZXJsYXlNYXNrXTtcbiAgcmV0dXJuIGNhcHRpb24gPyBfX19FbW90aW9uSlNYKFwiZmlnY2FwdGlvblwiLCB7XG4gICAgcmVmOiByZWYsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgY2FwdGlvbikgOiBudWxsO1xufSk7XG5FdWlJbWFnZUNhcHRpb24ucHJvcFR5cGVzID0ge1xuICBpc09uT3ZlcmxheU1hc2s6IFByb3BUeXBlcy5ib29sXG59O1xuRXVpSW1hZ2VDYXB0aW9uLmRpc3BsYXlOYW1lID0gJ0V1aUltYWdlQ2FwdGlvbic7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHZhciBldWlJbWFnZUNhcHRpb25TdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZUNhcHRpb25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VDYXB0aW9uOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOmV1aUltYWdlQ2FwdGlvbjtcIiksXG4gICAgaXNPbk92ZXJsYXlNYXNrOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7dGV4dC1zaGFkb3c6MCAxcHggMnB4IFwiLCB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMuaW5rLCAwLjYpLCBcIjtbY2xhc3MqPSdldWlMaW5rJ117Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7fTtsYWJlbDppc09uT3ZlcmxheU1hc2s7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVNoYWRvdyB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbmV4cG9ydCB2YXIgZXVpSW1hZ2VTdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlJbWFnZTogLyojX19QVVJFX18qL2NzcyhcInZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCI7JixbY2xhc3MqPSdldWlUZXh0J10gJntcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIDApLCBcIjt9O2xhYmVsOmV1aUltYWdlO1wiKSxcbiAgICAvLyBWYXJpYXRpb25zXG4gICAgaXNGdWxsU2NyZWVuOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7XCIsIGxvZ2ljYWxDU1MoJ21heC1oZWlnaHQnLCAnODB2aCcpLCBcIjtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzgwdncnKSwgXCI7O2xhYmVsOmlzRnVsbFNjcmVlbjtcIiksXG4gICAgaGFzU2hhZG93OiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdzJyksIFwiOztsYWJlbDpoYXNTaGFkb3c7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgLy8gVGhlc2Ugc2l6ZXMgYXJlIG1vc3RseSBzdWdnZXN0aW9ucy4gRG9uJ3QgbG9vayB0b28gaGFyZCBmb3IgbWVhbmluZyBpbiB0aGVpciB2YWx1ZXMuXG4gICAgLy8gU2l6ZSBpcyBhcHBsaWVkIHRvIHRoZSBpbWFnZSwgcmF0aGVyIHRoYW4gdGhlIHdyYXBwZXIgZmlndXJlIHRvIHdvcmsgYmV0dGVyIHdpdGggZmxvYXRzXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDBweCcpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcyMDBweCcpLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICczNjBweCcpLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnNjAwcHgnKSwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICBvcmlnaW5hbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICdhdXRvJyksIFwiOztsYWJlbDpvcmlnaW5hbDtcIiksXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIiksXG4gICAgY3VzdG9tU2l6ZTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICdhdXRvJyksIFwiOztsYWJlbDpjdXN0b21TaXplO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRm9jdXNUcmFwIH0gZnJvbSAnLi4vZm9jdXNfdHJhcCc7XG5pbXBvcnQgeyBFdWlPdmVybGF5TWFzayB9IGZyb20gJy4uL292ZXJsYXlfbWFzayc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlclN0eWxlcyB9IGZyb20gJy4vaW1hZ2VfZnVsbHNjcmVlbl93cmFwcGVyLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUJ1dHRvbiB9IGZyb20gJy4vaW1hZ2VfYnV0dG9uJztcbmltcG9ydCB7IGV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyB9IGZyb20gJy4vaW1hZ2VfYnV0dG9uLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUNhcHRpb24gfSBmcm9tICcuL2ltYWdlX2NhcHRpb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciA9IGZ1bmN0aW9uIEV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIoX3JlZikge1xuICB2YXIgYWx0ID0gX3JlZi5hbHQsXG4gICAgICBoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICAgIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBzZXRJc0Z1bGxTY3JlZW4gPSBfcmVmLnNldElzRnVsbFNjcmVlbixcbiAgICAgIHdyYXBwZXJQcm9wcyA9IF9yZWYud3JhcHBlclByb3BzLFxuICAgICAgaXNGdWxsV2lkdGggPSBfcmVmLmlzRnVsbFdpZHRoLFxuICAgICAgZnVsbFNjcmVlbkljb25Db2xvciA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcjtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyJywgd3JhcHBlclByb3BzICYmIHdyYXBwZXJQcm9wcy5jbGFzc05hbWUpO1xuXG4gIHZhciBvbktleURvd24gPSBmdW5jdGlvbiBvbktleURvd24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkVTQ0FQRSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY2xvc2VGdWxsU2NyZWVuKCk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBjbG9zZUZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBjbG9zZUZ1bGxTY3JlZW4oKSB7XG4gICAgc2V0SXNGdWxsU2NyZWVuKGZhbHNlKTtcbiAgfTtcblxuICB2YXIgX3VzZUlubmVyVGV4dCA9IHVzZUlubmVyVGV4dCgpLFxuICAgICAgX3VzZUlubmVyVGV4dDIgPSBfc2xpY2VkVG9BcnJheShfdXNlSW5uZXJUZXh0LCAyKSxcbiAgICAgIG9wdGlvbmFsQ2FwdGlvblJlZiA9IF91c2VJbm5lclRleHQyWzBdLFxuICAgICAgb3B0aW9uYWxDYXB0aW9uVGV4dCA9IF91c2VJbm5lclRleHQyWzFdO1xuXG4gIHZhciBpY29uU3R5bGVzID0gZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0ljb25TdHlsZXMgPSBbaWNvblN0eWxlcy5ldWlJbWFnZUJ1dHRvbl9faWNvbiwgaWNvblN0eWxlcy5jbG9zZUZ1bGxTY3JlZW5dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlPdmVybGF5TWFzaywge1xuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJmdWxsU2NyZWVuT3ZlcmxheU1hc2tcIixcbiAgICBvbkNsaWNrOiBjbG9zZUZ1bGxTY3JlZW5cbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGb2N1c1RyYXAsIHtcbiAgICBjbGlja091dHNpZGVEaXNhYmxlczogdHJ1ZVxuICB9LCBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwiZmlndXJlXCIsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtbGFiZWxcIjogb3B0aW9uYWxDYXB0aW9uVGV4dFxuICB9LCB3cmFwcGVyUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VCdXR0b24sIHtcbiAgICBoYXNBbHQ6ICEhYWx0LFxuICAgIGhhc1NoYWRvdzogaGFzU2hhZG93LFxuICAgIG9uQ2xpY2s6IGNsb3NlRnVsbFNjcmVlbixcbiAgICBvbktleURvd246IG9uS2V5RG93bixcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZGVhY3RpdmF0ZUZ1bGxTY3JlZW5CdXR0b25cIixcbiAgICBpc0Z1bGxTY3JlZW46IHRydWUsXG4gICAgaXNGdWxsV2lkdGg6IGlzRnVsbFdpZHRoLFxuICAgIGZ1bGxTY3JlZW5JY29uQ29sb3I6IGZ1bGxTY3JlZW5JY29uQ29sb3JcbiAgfSwgY2hpbGRyZW4pLCBfX19FbW90aW9uSlNYKEV1aUltYWdlQ2FwdGlvbiwge1xuICAgIGNhcHRpb246IGNhcHRpb24sXG4gICAgcmVmOiBvcHRpb25hbENhcHRpb25SZWYsXG4gICAgaXNPbk92ZXJsYXlNYXNrOiB0cnVlXG4gIH0pKSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJmdWxsU2NyZWVuRXhpdFwiLFxuICAgIGNvbG9yOiBcImdob3N0XCIsXG4gICAgY3NzOiBjc3NJY29uU3R5bGVzXG4gIH0pKSkpO1xufTtcbkV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIucHJvcFR5cGVzID0ge1xuICBpc0Z1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgc2V0SXNGdWxsU2NyZWVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0O1xuXG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKHN0cmluZ3MsIHJhdykgeyBpZiAoIXJhdykgeyByYXcgPSBzdHJpbmdzLnNsaWNlKDApOyB9IHJldHVybiBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0cmluZ3MsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHJhdykgfSB9KSk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbFRleHRBbGlnbkNTUywgZXVpQ2FuQW5pbWF0ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXgtaGVpZ2h0JywgJzgwdmgnKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICc4MHZ3JyksIFwiO1wiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCI7bGluZS1oZWlnaHQ6MDtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBldWlJbWFnZUZ1bGxTY3JlZW4oZXVpVGhlbWUuc2l6ZS54eHh4bCksIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24uZXh0cmFTbG93LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCI7fSY6aG92ZXIgW2NsYXNzKj0nZXVpSW1hZ2VDYXB0aW9uJ117dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXI7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIilcbiAgfTtcbn07XG5cbnZhciBldWlJbWFnZUZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBldWlJbWFnZUZ1bGxTY3JlZW4oc2l6ZSkge1xuICByZXR1cm4ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKFwiLCBcIik7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgfVxcblwiXSkpLCBzaXplKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nLCAnbCcsICd4bCcsICdmdWxsV2lkdGgnLCAnb3JpZ2luYWwnXTtcbnZhciBGTE9BVFMgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbnZhciBNQVJHSU5TID0gWydzJywgJ20nLCAnbCcsICd4bCddOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aUdsb2JhbFN0eWxlcyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L2dsb2JhbF9zdHlsZXMnO1xuaW1wb3J0IHsgRXVpVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZy91dGlsaXR5L3V0aWxpdHknO1xuaW1wb3J0IHsgRXVpVGhlbWVQcm92aWRlciwgQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVRoZW1lQW1zdGVyZGFtIH0gZnJvbSAnLi4vLi4vdGhlbWVzJztcbmltcG9ydCB7IEV1aUNhY2hlUHJvdmlkZXIgfSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBpc0Vtb3Rpb25DYWNoZU9iamVjdCA9IGZ1bmN0aW9uIGlzRW1vdGlvbkNhY2hlT2JqZWN0KG9iaikge1xuICByZXR1cm4gb2JqLmhhc093blByb3BlcnR5KCdrZXknKTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICAgIHRoZW1lID0gX3JlZiR0aGVtZSA9PT0gdm9pZCAwID8gRXVpVGhlbWVBbXN0ZXJkYW0gOiBfcmVmJHRoZW1lLFxuICAgICAgX3JlZiRnbG9iYWxTdHlsZXMgPSBfcmVmLmdsb2JhbFN0eWxlcyxcbiAgICAgIEdsb2JhbHMgPSBfcmVmJGdsb2JhbFN0eWxlcyA9PT0gdm9pZCAwID8gRXVpR2xvYmFsU3R5bGVzIDogX3JlZiRnbG9iYWxTdHlsZXMsXG4gICAgICBfcmVmJHV0aWxpdHlDbGFzc2VzID0gX3JlZi51dGlsaXR5Q2xhc3NlcyxcbiAgICAgIFV0aWxpdGllcyA9IF9yZWYkdXRpbGl0eUNsYXNzZXMgPT09IHZvaWQgMCA/IEV1aVV0aWxpdHlDbGFzc2VzIDogX3JlZiR1dGlsaXR5Q2xhc3NlcyxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlLFxuICAgICAgbW9kaWZ5ID0gX3JlZi5tb2RpZnksXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBkZWZhdWx0Q2FjaGU7XG4gIHZhciBnbG9iYWxDYWNoZTtcbiAgdmFyIHV0aWxpdHlDYWNoZTtcblxuICBpZiAoY2FjaGUpIHtcbiAgICBpZiAoaXNFbW90aW9uQ2FjaGVPYmplY3QoY2FjaGUpKSB7XG4gICAgICBkZWZhdWx0Q2FjaGUgPSBjYWNoZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmYXVsdENhY2hlID0gY2FjaGUuZGVmYXVsdDtcbiAgICAgIGdsb2JhbENhY2hlID0gY2FjaGUuZ2xvYmFsO1xuICAgICAgdXRpbGl0eUNhY2hlID0gY2FjaGUudXRpbGl0eTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDYWNoZVByb3ZpZGVyLCB7XG4gICAgY2FjaGU6IGRlZmF1bHRDYWNoZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aVRoZW1lUHJvdmlkZXIsIHtcbiAgICB0aGVtZTogdGhlbWUgIT09IG51bGwgJiYgdGhlbWUgIT09IHZvaWQgMCA/IHRoZW1lIDogdW5kZWZpbmVkLFxuICAgIGNvbG9yTW9kZTogY29sb3JNb2RlLFxuICAgIG1vZGlmeTogbW9kaWZ5XG4gIH0sIHRoZW1lICYmIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpQ2FjaGVQcm92aWRlciwge1xuICAgIGNhY2hlOiBnbG9iYWxDYWNoZSxcbiAgICBjaGlsZHJlbjogR2xvYmFscyAmJiBfX19FbW90aW9uSlNYKEdsb2JhbHMsIG51bGwpXG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aUNhY2hlUHJvdmlkZXIsIHtcbiAgICBjYWNoZTogdXRpbGl0eUNhY2hlLFxuICAgIGNoaWxkcmVuOiBVdGlsaXRpZXMgJiYgX19fRW1vdGlvbkpTWChVdGlsaXRpZXMsIG51bGwpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChDdXJyZW50RXVpQnJlYWtwb2ludFByb3ZpZGVyLCBudWxsLCBjaGlsZHJlbikpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgR2xvYmFsLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfb25seS9zY3JlZW5fcmVhZGVyX29ubHkuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZ2xvYmFsU3R5bGVzID0gLyojX19QVVJFX18qL2NzcyhcIi5ldWlTY3JlZW5SZWFkZXJPbmx5e1wiLCBldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO307bGFiZWw6Z2xvYmFsU3R5bGVzO1wiKTtcbmV4cG9ydCB2YXIgRXVpVXRpbGl0eUNsYXNzZXMgPSBmdW5jdGlvbiBFdWlVdGlsaXR5Q2xhc3NlcygpIHtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXNcbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENhY2hlUHJvdmlkZXIgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDYWNoZVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpQ2FjaGVQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBjaGlsZHJlbiAmJiBjYWNoZSA/IF9fX0Vtb3Rpb25KU1goQ2FjaGVQcm92aWRlciwge1xuICAgIHZhbHVlOiBjYWNoZVxuICB9LCBjaGlsZHJlbikgOiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcIml0ZW1zXCIsIFwiZGlzcGxheVwiLCBcImV4cGFuZEJ5RGVmYXVsdFwiLCBcInNob3dFeHBhbnNpb25BcnJvd3NcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyBrZXlzLCBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJbm5lclRleHQgfSBmcm9tICcuLi9pbm5lcl90ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpVHJlZVZpZXdDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoJycpO1xuXG5mdW5jdGlvbiBoYXNBcmlhTGFiZWwoeCkge1xuICByZXR1cm4geC5oYXNPd25Qcm9wZXJ0eSgnYXJpYS1sYWJlbCcpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmVlSWQocHJvcElkLCBjb250ZXh0SWQsIGlkR2VuZXJhdG9yKSB7XG4gIHJldHVybiBwcm9wSWQgIT09IG51bGwgJiYgcHJvcElkICE9PSB2b2lkIDAgPyBwcm9wSWQgOiBjb250ZXh0SWQgPT09ICcnID8gaWRHZW5lcmF0b3IoKSA6IGNvbnRleHRJZDtcbn1cblxudmFyIGRpc3BsYXlUb0NsYXNzTmFtZU1hcCA9IHtcbiAgZGVmYXVsdDogbnVsbCxcbiAgY29tcHJlc3NlZDogJ2V1aVRyZWVWaWV3LS1jb21wcmVzc2VkJ1xufTtcbmV4cG9ydCB2YXIgRXVpVHJlZVZpZXcgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVRyZWVWaWV3LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVRyZWVWaWV3KTtcblxuICBmdW5jdGlvbiBFdWlUcmVlVmlldygpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVHJlZVZpZXcpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0cmVlSWRHZW5lcmF0b3JcIiwgaHRtbElkR2VuZXJhdG9yKCdldWlUcmVlVmlldycpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpc05lc3RlZFwiLCAhIV90aGlzLmNvbnRleHQpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIG9wZW5JdGVtczogX3RoaXMucHJvcHMuZXhwYW5kQnlEZWZhdWx0ID8gX3RoaXMucHJvcHMuaXRlbXMubWFwKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBpZCA9IF9yZWYuaWQsXG4gICAgICAgICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gICAgICAgIHJldHVybiBjaGlsZHJlbiA/IGlkIDogbnVsbDtcbiAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPSBudWxsO1xuICAgICAgfSkgOiBfdGhpcy5wcm9wcy5pdGVtcy5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBpZCA9IF9yZWYyLmlkLFxuICAgICAgICAgICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICAgICAgICAgIGlzRXhwYW5kZWQgPSBfcmVmMi5pc0V4cGFuZGVkO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgaXNFeHBhbmRlZCA/IGlkIDogbnVsbDtcbiAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPSBudWxsO1xuICAgICAgfSksXG4gICAgICBhY3RpdmVJdGVtOiAnJyxcbiAgICAgIHRyZWVJRDogZ2V0VHJlZUlkKF90aGlzLnByb3BzLmlkLCBfdGhpcy5jb250ZXh0LCBfdGhpcy50cmVlSWRHZW5lcmF0b3IpLFxuICAgICAgZXhwYW5kQ2hpbGROb2RlczogX3RoaXMucHJvcHMuZXhwYW5kQnlEZWZhdWx0IHx8IGZhbHNlXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYnV0dG9uUmVmXCIsIFtdKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRCdXR0b25SZWZcIiwgZnVuY3Rpb24gKHJlZiwgaW5kZXgpIHtcbiAgICAgIF90aGlzLmJ1dHRvblJlZltpbmRleF0gPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTm9kZUNsaWNrXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgaWdub3JlQ2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gICAgICB2YXIgaW5kZXggPSBfdGhpcy5zdGF0ZS5vcGVuSXRlbXMuaW5kZXhPZihub2RlLmlkKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBleHBhbmRDaGlsZE5vZGVzOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIG5vZGUuaXNFeHBhbmRlZCA9ICFub2RlLmlzRXhwYW5kZWQ7XG5cbiAgICAgIGlmICghaWdub3JlQ2FsbGJhY2sgJiYgbm9kZS5jYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuY2FsbGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLmlzTm9kZU9wZW4obm9kZSkpIHtcbiAgICAgICAgLy8gaWYgdGhlIG5vZGUgaXMgcGFydCBvZiBvcGVuSXRlbXNbXSB0aGVuIHJlbW92ZSBpdFxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgb3Blbkl0ZW1zOiBfdGhpcy5zdGF0ZS5vcGVuSXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gaSAhPT0gaW5kZXg7XG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiB0aGUgbm9kZSBpc24ndCBwYXJ0IG9mIG9wZW5JdGVtc1tdIHRoZW4gYWRkIGl0XG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3Blbkl0ZW1zOiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHByZXZTdGF0ZS5vcGVuSXRlbXMpLCBbbm9kZS5pZF0pLFxuICAgICAgICAgICAgYWN0aXZlSXRlbTogbm9kZS5pZFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImlzTm9kZU9wZW5cIiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5vcGVuSXRlbXMuaW5jbHVkZXMobm9kZS5pZCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCwgbm9kZSkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0RPV046XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5vZGVCdXR0b25zID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtdGVzdC1zdWJqPVxcXCJldWlUcmVlVmlld0J1dHRvbi1cIi5jb25jYXQoX3RoaXMuc3RhdGUudHJlZUlELCBcIlxcXCJdXCIpKSk7XG4gICAgICAgICAgICB2YXIgY3VycmVudEluZGV4ID0gbm9kZUJ1dHRvbnMuaW5kZXhPZihldmVudC5jdXJyZW50VGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgIHZhciBuZXh0QnV0dG9uID0gbm9kZUJ1dHRvbnNbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgICAgICAgICAgaWYgKG5leHRCdXR0b24pIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIG5leHRCdXR0b24uZm9jdXMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX1VQOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbm9kZUJ1dHRvbnMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS10ZXN0LXN1Ymo9XFxcImV1aVRyZWVWaWV3QnV0dG9uLVwiLmNvbmNhdChfdGhpcy5zdGF0ZS50cmVlSUQsIFwiXFxcIl1cIikpKTtcblxuICAgICAgICAgICAgdmFyIF9jdXJyZW50SW5kZXggPSBfbm9kZUJ1dHRvbnMuaW5kZXhPZihldmVudC5jdXJyZW50VGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKF9jdXJyZW50SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICB2YXIgcHJldkJ1dHRvbiA9IF9ub2RlQnV0dG9uc1tfY3VycmVudEluZGV4ICsgLTFdO1xuXG4gICAgICAgICAgICAgIGlmIChwcmV2QnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBwcmV2QnV0dG9uLmZvY3VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19SSUdIVDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzTm9kZU9wZW4obm9kZSkpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgICAgX3RoaXMuaGFuZGxlTm9kZUNsaWNrKG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0xFRlQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzTm9kZU9wZW4obm9kZSkpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgICAgX3RoaXMuaGFuZGxlTm9kZUNsaWNrKG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2hpbGRyZW5LZXlkb3duXCIsIGZ1bmN0aW9uIChldmVudCwgaW5kZXgpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuQVJST1dfTEVGVCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBfdGhpcy5idXR0b25SZWZbaW5kZXhdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpVHJlZVZpZXcsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5pZCAhPT0gcHJldlByb3BzLmlkKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB0cmVlSUQ6IGdldFRyZWVJZCh0aGlzLnByb3BzLmlkLCB0aGlzLmNvbnRleHQsIHRoaXMudHJlZUlkR2VuZXJhdG9yKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMuaXRlbXMsXG4gICAgICAgICAgX3RoaXMkcHJvcHMkZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzJGRpc3BsYXkgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF90aGlzJHByb3BzJGRpc3BsYXksXG4gICAgICAgICAgZXhwYW5kQnlEZWZhdWx0ID0gX3RoaXMkcHJvcHMuZXhwYW5kQnlEZWZhdWx0LFxuICAgICAgICAgIHNob3dFeHBhbnNpb25BcnJvd3MgPSBfdGhpcyRwcm9wcy5zaG93RXhwYW5zaW9uQXJyb3dzLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7IC8vIENvbXB1dGVkIGNsYXNzTmFtZXNcblxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRyZWVWaWV3JywgZGlzcGxheSA/IGRpc3BsYXlUb0NsYXNzTmFtZU1hcFtkaXNwbGF5XSA6IG51bGwsIHtcbiAgICAgICAgJ2V1aVRyZWVWaWV3LS13aXRoQXJyb3dzJzogc2hvd0V4cGFuc2lvbkFycm93c1xuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBpbnN0cnVjdGlvbnNJZCA9IFwiXCIuY29uY2F0KHRoaXMuc3RhdGUudHJlZUlELCBcIi0taW5zdHJ1Y3Rpb25cIik7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUcmVlVmlld0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IHRoaXMuc3RhdGUudHJlZUlEXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgICAgc2l6ZTogZGlzcGxheSA9PT0gJ2NvbXByZXNzZWQnID8gJ3MnIDogJ20nLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpVHJlZVZpZXdfX3dyYXBwZXJcIlxuICAgICAgfSwgIXRoaXMuaXNOZXN0ZWQgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRyZWVWaWV3Lmxpc3ROYXZpZ2F0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiWW91IGNhbiBxdWlja2x5IG5hdmlnYXRlIHRoaXMgbGlzdCB1c2luZyBhcnJvdyBrZXlzLlwiXG4gICAgICB9LCBmdW5jdGlvbiAobGlzdE5hdmlnYXRpb25JbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgIGlkOiBpbnN0cnVjdGlvbnNJZFxuICAgICAgICB9LCBsaXN0TmF2aWdhdGlvbkluc3RydWN0aW9ucykpO1xuICAgICAgfSksIF9fX0Vtb3Rpb25KU1goXCJ1bFwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgaWQ6ICF0aGlzLmlzTmVzdGVkID8gdGhpcy5zdGF0ZS50cmVlSUQgOiB1bmRlZmluZWQsXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiAhdGhpcy5pc05lc3RlZCA/IGluc3RydWN0aW9uc0lkIDogdW5kZWZpbmVkXG4gICAgICB9LCByZXN0KSwgaXRlbXMubWFwKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICB2YXIgYnV0dG9uSWQgPSBub2RlLmlkO1xuXG4gICAgICAgIHZhciB3cmFwcGluZ0lkID0gX3RoaXMyLnRyZWVJZEdlbmVyYXRvcihidXR0b25JZCk7XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCB7XG4gICAgICAgICAga2V5OiBub2RlLmlkICsgaW5kZXgsXG4gICAgICAgICAgZmFsbGJhY2s6IHR5cGVvZiBub2RlLmxhYmVsID09PSAnc3RyaW5nJyA/IG5vZGUubGFiZWwgOiAnJ1xuICAgICAgICB9LCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICBrZXk6IG5vZGUuaWQgKyBpbmRleCxcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVRyZWVWaWV3LmFyaWFMYWJlbFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJ7bm9kZUxhYmVsfSBjaGlsZCBvZiB7YXJpYUxhYmVsfVwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIG5vZGVMYWJlbDogaW5uZXJUZXh0LFxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IGhhc0FyaWFMYWJlbChyZXN0KSA/IHJlc3RbJ2FyaWEtbGFiZWwnXSA6ICcnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGFyaWFMYWJlbCkge1xuICAgICAgICAgICAgdmFyIGxhYmVsID0gaGFzQXJpYUxhYmVsKHJlc3QpID8ge1xuICAgICAgICAgICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbFxuICAgICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IFwiXCIuY29uY2F0KGJ1dHRvbklkLCBcIiBcIikuY29uY2F0KHJlc3RbJ2FyaWEtbGFiZWxsZWRieSddKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBub2RlQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRyZWVWaWV3X19ub2RlJywgZGlzcGxheSA/IGRpc3BsYXlUb0NsYXNzTmFtZU1hcFtkaXNwbGF5XSA6IG51bGwsIHtcbiAgICAgICAgICAgICAgJ2V1aVRyZWVWaWV3X19ub2RlLS1leHBhbmRlZCc6IF90aGlzMi5pc05vZGVPcGVuKG5vZGUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBub2RlQnV0dG9uQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRyZWVWaWV3X19ub2RlSW5uZXInLCBzaG93RXhwYW5zaW9uQXJyb3dzICYmIG5vZGUuY2hpbGRyZW4gPyAnZXVpVHJlZVZpZXdfX25vZGVJbm5lci0td2l0aEFycm93cycgOiBudWxsLCBfdGhpczIuc3RhdGUuYWN0aXZlSXRlbSA9PT0gbm9kZS5pZCA/ICdldWlUcmVlVmlld19fbm9kZS0tYWN0aXZlJyA6IG51bGwsIG5vZGUuY2xhc3NOYW1lID8gbm9kZS5jbGFzc05hbWUgOiBudWxsKTtcbiAgICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IG5vZGVDbGFzc2VzXG4gICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgaWQ6IGJ1dHRvbklkLFxuICAgICAgICAgICAgICBcImFyaWEtY29udHJvbHNcIjogd3JhcHBpbmdJZCxcbiAgICAgICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF90aGlzMi5pc05vZGVPcGVuKG5vZGUpLFxuICAgICAgICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihfcmVmMykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuc2V0QnV0dG9uUmVmKF9yZWYzLCBpbmRleCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJldWlUcmVlVmlld0J1dHRvbi1cIi5jb25jYXQoX3RoaXMyLnN0YXRlLnRyZWVJRCksXG4gICAgICAgICAgICAgIG9uS2V5RG93bjogZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vbktleURvd24oZXZlbnQsIG5vZGUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlTm9kZUNsaWNrKG5vZGUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IG5vZGVCdXR0b25DbGFzc2VzXG4gICAgICAgICAgICB9LCBzaG93RXhwYW5zaW9uQXJyb3dzICYmIG5vZGUuY2hpbGRyZW4gPyBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRyZWVWaWV3X19leHBhbnNpb25BcnJvd1wiLFxuICAgICAgICAgICAgICBzaXplOiBkaXNwbGF5ID09PSAnY29tcHJlc3NlZCcgPyAncycgOiAnbScsXG4gICAgICAgICAgICAgIHR5cGU6IF90aGlzMi5pc05vZGVPcGVuKG5vZGUpID8gJ2Fycm93RG93bicgOiAnYXJyb3dSaWdodCdcbiAgICAgICAgICAgIH0pIDogbnVsbCwgbm9kZS5pY29uICYmICFub2RlLnVzZUVtcHR5SWNvbiA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRyZWVWaWV3X19pY29uV3JhcHBlclwiXG4gICAgICAgICAgICB9LCBfdGhpczIuaXNOb2RlT3Blbihub2RlKSAmJiBub2RlLmljb25XaGVuRXhwYW5kZWQgPyBub2RlLmljb25XaGVuRXhwYW5kZWQgOiBub2RlLmljb24pIDogbnVsbCwgbm9kZS51c2VFbXB0eUljb24gJiYgIW5vZGUuaWNvbiA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRyZWVWaWV3X19pY29uUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgfSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgIHJlZjogcmVmLFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpVHJlZVZpZXdfX25vZGVMYWJlbFwiXG4gICAgICAgICAgICB9LCBub2RlLmxhYmVsKSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgICBpZDogd3JhcHBpbmdJZCxcbiAgICAgICAgICAgICAgb25LZXlEb3duOiBmdW5jdGlvbiBvbktleURvd24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLm9uQ2hpbGRyZW5LZXlkb3duKGV2ZW50LCBpbmRleCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG5vZGUuY2hpbGRyZW4gJiYgX3RoaXMyLmlzTm9kZU9wZW4obm9kZSkgPyBfX19FbW90aW9uSlNYKEV1aVRyZWVWaWV3LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICAgIGl0ZW1zOiBub2RlLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxuICAgICAgICAgICAgICBzaG93RXhwYW5zaW9uQXJyb3dzOiBzaG93RXhwYW5zaW9uQXJyb3dzLFxuICAgICAgICAgICAgICBleHBhbmRCeURlZmF1bHQ6IF90aGlzMi5zdGF0ZS5leHBhbmRDaGlsZE5vZGVzXG4gICAgICAgICAgICB9LCBsYWJlbCkpIDogbnVsbCkpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpVHJlZVZpZXc7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlUcmVlVmlldywgXCJjb250ZXh0VHlwZVwiLCBFdWlUcmVlVmlld0NvbnRleHQpO1xuXG5FdWlUcmVlVmlldy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKiBBbiBhcnJheSBvZiBFdWlUcmVlVmlld05vZGVzXG4gICAgICAgKi9cbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIEFuIGFycmF5IG9mIEV1aVRyZWVWaWV3Tm9kZXMgdG8gcmVuZGVyIGFzIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcblxuICAgIC8qKiBUaGUgcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBpdGVtXG4gICAgICAgKi9cbiAgICBsYWJlbDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcblxuICAgIC8qKiBBIHVuaXF1ZSBJRFxuICAgICAgICovXG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAgIC8qKiBBbiBpY29uIHRvIHVzZSBvbiB0aGUgbGVmdCBvZiB0aGUgbGFiZWxcbiAgICAgICAqL1xuICAgIGljb246IFByb3BUeXBlcy5lbGVtZW50LFxuXG4gICAgLyoqIERpc3BsYXkgYSBkaWZmZXJlbnQgaWNvbiB3aGVuIHRoZSBpdGVtIGlzIGV4cGFuZGVkLlxuICAgICAgRm9yIGluc3RhbmNlLCBhbiBvcGVuIGZvbGRlciBvciBhIGRvd24gYXJyb3dcbiAgICAgICovXG4gICAgaWNvbldoZW5FeHBhbmRlZDogUHJvcFR5cGVzLmVsZW1lbnQsXG5cbiAgICAvKiogVXNlIGFuIGVtcHR5IGljb24gdG8ga2VlcCBpdGVtcyB3aXRob3V0IGFuIGljb25cbiAgICAgIGxpbmVkIHVwIHdpdGggdGhlaXIgc2libGluZ3NcbiAgICAgICovXG4gICAgdXNlRW1wdHlJY29uOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgaXRlbSBpcyBleHBhbmRlZC5cbiAgICAgICAqL1xuICAgIGlzRXhwYW5kZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqIE9wdGlvbmFsIGNsYXNzIHRvIHRocm93IG9uIHRoZSBub2RlXG4gICAgICAgKi9cbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKiogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBpdGVtIGlzIGNsaWNrZWQuXG4gICAgICAgVGhlIG9wZW4gc3RhdGUgb2YgdGhlIGl0ZW0gd2lsbCBhbHdheXMgYmUgdG9nZ2xlZC5cbiAgICAgICAqL1xuICAgIGNhbGxiYWNrOiBQcm9wVHlwZXMuZnVuY1xuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuXG4gIC8qKiBPcHRpb25hbGx5IHVzZSBhIHZhcmlhdGlvbiB3aXRoIHNtYWxsZXIgdGV4dCBhbmQgaWNvbiBzaXplc1xuICAgICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5vbmVPZihbXCJkZWZhdWx0XCIsIFwiY29tcHJlc3NlZFwiXSksXG5cbiAgLyoqIFNldCBhbGwgaXRlbXMgdG8gb3BlbiBvbiBpbml0aWFsIGxvYWRcbiAgICAgICAqL1xuICBleHBhbmRCeURlZmF1bHQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKiBEaXNwbGF5IGV4cGFuc2lvbiBhcnJvd3MgbmV4dCB0byBhbGwgaXRlbXNcbiAgICAgICAqIHRoYXQgY29udGFpbiBjaGlsZHJlblxuICAgICAgICovXG4gIHNob3dFeHBhbnNpb25BcnJvd3M6IFByb3BUeXBlcy5ib29sLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJvcHRpb25zXCIsIFwib25DaGFuZ2VcIiwgXCJvbkFjdGl2ZU9wdGlvbkNoYW5nZVwiLCBcInNlYXJjaGFibGVcIiwgXCJzZWFyY2hQcm9wc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcImlzTG9hZGluZ1wiLCBcImxpc3RQcm9wc1wiLCBcInJlbmRlck9wdGlvblwiLCBcImhlaWdodFwiLCBcImFsbG93RXhjbHVzaW9uc1wiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwibG9hZGluZ01lc3NhZ2VcIiwgXCJub01hdGNoZXNNZXNzYWdlXCIsIFwiZW1wdHlNZXNzYWdlXCIsIFwiZXJyb3JNZXNzYWdlXCIsIFwiaXNQcmVGaWx0ZXJlZFwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJvbkNoYW5nZVwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImlucHV0UmVmXCJdLFxuICAgIF9leGNsdWRlZDMgPSBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcImlzVmlydHVhbGl6ZWRcIiwgXCJyb3dIZWlnaHRcIl07XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIGNyZWF0ZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZVNlYXJjaCB9IGZyb20gJy4vc2VsZWN0YWJsZV9zZWFyY2gnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZU1lc3NhZ2UgfSBmcm9tICcuL3NlbGVjdGFibGVfbWVzc2FnZSc7XG5pbXBvcnQgeyBFdWlTZWxlY3RhYmxlTGlzdCB9IGZyb20gJy4vc2VsZWN0YWJsZV9saXN0JztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlTcGFjZXIgfSBmcm9tICcuLi9zcGFjZXInO1xuaW1wb3J0IHsgZ2V0TWF0Y2hpbmdPcHRpb25zIH0gZnJvbSAnLi9tYXRjaGluZ19vcHRpb25zJztcbmltcG9ydCB7IGtleXMsIGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlckxpdmUsIEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVNlbGVjdGFibGUsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpU2VsZWN0YWJsZSk7XG5cbiAgZnVuY3Rpb24gRXVpU2VsZWN0YWJsZShwcm9wcykge1xuICAgIHZhciBfc2VhcmNoUHJvcHMkb25DaGFuZ2U7XG5cbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpU2VsZWN0YWJsZSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnB1dFJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjb250YWluZXJSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvcHRpb25zTGlzdFJlZlwiLCAvKiNfX1BVUkVfXyovY3JlYXRlUmVmKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByZXZlbnRPbkZvY3VzXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyb290SWRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJtZXNzYWdlQ29udGVudElkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdElkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Nb3VzZURvd25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQnlwYXNzIG9uRm9jdXMgd2hlbiBhIGNsaWNrIGV2ZW50IG9yaWdpbmF0ZXMgZnJvbSB0aGlzLmNvbnRhaW5lclJlZi5cbiAgICAgIC8vIFByZXZlbnRzIG9uRm9jdXMgZnJvbSBzY3JvbGxpbmcgYXdheSBmcm9tIGEgY2xpY2tlZCBvcHRpb24gYW5kIG5lZ2F0aW5nIHRoZSBzZWxlY3Rpb24gZXZlbnQuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzQxNDdcbiAgICAgIF90aGlzLnByZXZlbnRPbkZvY3VzID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcmV2ZW50T25Gb2N1cykge1xuICAgICAgICBfdGhpcy5wcmV2ZW50T25Gb2N1cyA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMubGVuZ3RoIHx8IF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RTZWxlY3RlZCA9IF90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24uY2hlY2tlZCAmJiAhb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaXNHcm91cExhYmVsO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaXJzdFNlbGVjdGVkID4gLTEpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBmaXJzdFNlbGVjdGVkLFxuICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiAhb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaXNHcm91cExhYmVsO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgb3B0aW9uc0xpc3QgPSBfdGhpcy5vcHRpb25zTGlzdFJlZi5jdXJyZW50O1xuXG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfVVA6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIF90aGlzLmluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4KC0xKTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19ET1dOOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgxKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBGb3Igbm9uLXNlYXJjaGFibGUgaW5zdGFuY2VzLCBTUEFDRSBpbnRlcmFjdGlvbiBzaG91bGQgYWxpZ24gd2l0aFxuICAgICAgICAvLyB0aGUgdXNlciBleHBlY3RhdGlvbiBvZiBzZWxlY3Rpb24gdG9nZ2xpbmcgKGUuZy4sIGlucHV0W3R5cGU9Y2hlY2tib3hdKS5cbiAgICAgICAgLy8gRU5URVIgaXMgYWxzbyBhIHZhbGlkIHNlbGVjdGlvbiBtZWNoYW5pc20gaW4gdGhpcyBjYXNlLlxuXG4gICAgICAgIGNhc2Uga2V5cy5FTlRFUjpcbiAgICAgICAgY2FzZSBrZXlzLlNQQUNFOlxuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5zZWFyY2hhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkb3B0aW9uc0xpc3RSZWYkLCBfdGhpcyRvcHRpb25zTGlzdFJlZiQyO1xuXG4gICAgICAgICAgICAvLyBGb3Igc2VhcmNoYWJsZSBpbnN0YW5jZXMsIFNQQUNFIGlzIHJlc2VydmVkIGFzIGEgY2hhcmFjdGVyIGZvciBmaWx0ZXJpbmdcbiAgICAgICAgICAgIC8vIHZpYSB0aGUgaW5wdXQgYm94LCBhbmQgYXMgc3VjaCBvbmx5IEVOVEVSIHdpbGwgdG9nZ2xlIHNlbGVjdGlvbi5cbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IF90aGlzLmlucHV0UmVmICYmIGV2ZW50LmtleSA9PT0ga2V5cy5TUEFDRSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IC8vIENoZWNrIGlmIHRoZSB1c2VyIGlzIGludGVyYWN0aW5nIHdpdGggc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlXG4gICAgICAgICAgICAvLyBzZWFyY2hib3ggb3Igc2VsZWN0aW9uIGxpc3QuIElmIG5vdCwgdGhlIHVzZXIgaXMgYXR0ZW1wdGluZyB0b1xuICAgICAgICAgICAgLy8gaW50ZXJhY3Qgd2l0aCBhbiBpbnRlcm5hbCBidXR0b24gc3VjaCBhcyB0aGUgY2xlYXIgYnV0dG9uLFxuICAgICAgICAgICAgLy8gYW5kIHRoZSBldmVudCBzaG91bGQgbm90IGJlIGFsdGVyZWQuXG5cblxuICAgICAgICAgICAgaWYgKCEoZXZlbnQudGFyZ2V0ID09PSBfdGhpcy5pbnB1dFJlZiB8fCBldmVudC50YXJnZXQgPT09ICgoX3RoaXMkb3B0aW9uc0xpc3RSZWYkID0gX3RoaXMub3B0aW9uc0xpc3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3RoaXMkb3B0aW9uc0xpc3RSZWYkMiA9IF90aGlzJG9wdGlvbnNMaXN0UmVmJC5saXN0Qm94UmVmKSA9PT0gbnVsbCB8fCBfdGhpcyRvcHRpb25zTGlzdFJlZiQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zTGlzdFJlZiQyLnBhcmVudEVsZW1lbnQpKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPSBudWxsICYmIG9wdGlvbnNMaXN0KSB7XG4gICAgICAgICAgICBldmVudC5wZXJzaXN0KCk7IC8vIE5PVEU6IFRoaXMgaXMgbmVlZGVkIGZvciBSZWFjdCB2MTYgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuICAgICAgICAgICAgb3B0aW9uc0xpc3Qub25BZGRPclJlbW92ZU9wdGlvbihfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9uc1tfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleF0sIGV2ZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuQUxUOlxuICAgICAgICBjYXNlIGtleXMuU0hJRlQ6XG4gICAgICAgIGNhc2Uga2V5cy5DVFJMOlxuICAgICAgICBjYXNlIGtleXMuTUVUQTpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWRcbiAgICAgICAgICB9LCBfdGhpcy5vbkZvY3VzKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4XCIsIGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvcHRpb25zIGF2YWlsYWJsZSwgZG8gbm90aGluZy5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3JlZi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICAgIHZpc2libGVPcHRpb25zID0gX3JlZi52aXNpYmxlT3B0aW9ucztcbiAgICAgICAgdmFyIG5leHRBY3RpdmVPcHRpb25JbmRleDtcblxuICAgICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdXNlcidzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIG1lbnUsIHRoZW4gd2UnbGwgZm9jdXNcbiAgICAgICAgICAvLyBlaXRoZXIgdGhlIGZpcnN0IG9yIGxhc3QgaXRlbS5cbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhbW91bnQgPCAwID8gdmlzaWJsZU9wdGlvbnMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYWN0aXZlT3B0aW9uSW5kZXggKyBhbW91bnQ7XG5cbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA9PT0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBHcm91cCB0aXRsZXMgYW5kIGRpc2FibGVkIG9wdGlvbnMgYXJlIGluY2x1ZGVkIGluIG9wdGlvbiBsaXN0IGJ1dCBhcmUgbm90IHNlbGVjdGFibGVcblxuXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gMSA6IC0xO1xuXG4gICAgICAgIHdoaWxlICh2aXNpYmxlT3B0aW9uc1tuZXh0QWN0aXZlT3B0aW9uSW5kZXhdLmlzR3JvdXBMYWJlbCB8fCB2aXNpYmxlT3B0aW9uc1tuZXh0QWN0aXZlT3B0aW9uSW5kZXhdLmRpc2FibGVkKSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbmV4dEFjdGl2ZU9wdGlvbkluZGV4ICsgZGlyZWN0aW9uO1xuXG4gICAgICAgICAgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IHZpc2libGVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IHZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBuZXh0QWN0aXZlT3B0aW9uSW5kZXhcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uU2VhcmNoQ2hhbmdlXCIsIGZ1bmN0aW9uIChzZWFyY2hWYWx1ZSwgdmlzaWJsZU9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRzZWFyY2hQcm8sIF90aGlzJHByb3BzJHNlYXJjaFBybzI7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICB2aXNpYmxlT3B0aW9uczogdmlzaWJsZU9wdGlvbnMsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWRcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLnN0YXRlLmlzRm9jdXNlZCkge1xuICAgICAgICAgIF90aGlzLm9uRm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIChfdGhpcyRwcm9wcyRzZWFyY2hQcm8gPSBfdGhpcy5wcm9wcy5zZWFyY2hQcm9wcykgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkc2VhcmNoUHJvID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3RoaXMkcHJvcHMkc2VhcmNoUHJvMiA9IF90aGlzJHByb3BzJHNlYXJjaFByby5vbkNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkc2VhcmNoUHJvMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkc2VhcmNoUHJvMi5jYWxsKF90aGlzJHByb3BzJHNlYXJjaFBybywgc2VhcmNoVmFsdWUsIHZpc2libGVPcHRpb25zKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNvbnRhaW5lckJsdXJcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfZSRyZWxhdGVkVGFyZ2V0LCBfZSRyZWxhdGVkVGFyZ2V0JGZpcnM7XG5cbiAgICAgIC8vIElnbm9yZSBibHVyIGV2ZW50cyB3aGVuIG1vdmluZyBmcm9tIHNlYXJjaCB0byBvcHRpb24gdG8gYXZvaWQgYWN0aXZlT3B0aW9uSW5kZXggY29uZmxpY3RzXG4gICAgICBpZiAoKChfZSRyZWxhdGVkVGFyZ2V0ID0gZS5yZWxhdGVkVGFyZ2V0KSA9PT0gbnVsbCB8fCBfZSRyZWxhdGVkVGFyZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2UkcmVsYXRlZFRhcmdldCRmaXJzID0gX2UkcmVsYXRlZFRhcmdldC5maXJzdENoaWxkKSA9PT0gbnVsbCB8fCBfZSRyZWxhdGVkVGFyZ2V0JGZpcnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lJHJlbGF0ZWRUYXJnZXQkZmlycy5pZCkgPT09IF90aGlzLmxpc3RJZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcHRpb25DbGlja1wiLCBmdW5jdGlvbiAob3B0aW9ucywgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGlzUHJlRmlsdGVyZWQgPSBfdGhpcyRwcm9wcy5pc1ByZUZpbHRlcmVkLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2U7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWFyY2hWYWx1ZTtcbiAgICAgIHZhciB2aXNpYmxlT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnM6IHZpc2libGVPcHRpb25zXG4gICAgICB9KTtcblxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKG9wdGlvbnMsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzY3JvbGxUb0l0ZW1cIiwgZnVuY3Rpb24gKGluZGV4LCBhbGlnbikge1xuICAgICAgdmFyIF90aGlzJG9wdGlvbnNMaXN0UmVmJDMsIF90aGlzJG9wdGlvbnNMaXN0UmVmJDQ7XG5cbiAgICAgIChfdGhpcyRvcHRpb25zTGlzdFJlZiQzID0gX3RoaXMub3B0aW9uc0xpc3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF90aGlzJG9wdGlvbnNMaXN0UmVmJDQgPSBfdGhpcyRvcHRpb25zTGlzdFJlZiQzLmxpc3RSZWYpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnNMaXN0UmVmJDQuc2Nyb2xsVG9JdGVtKGluZGV4LCBhbGlnbik7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibWFrZU9wdGlvbklkXCIsIGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICE9IG51bGwgPyBcIlwiLmNvbmNhdChfdGhpcy5saXN0SWQsIFwiX29wdGlvbi1cIikuY29uY2F0KGluZGV4KSA6ICcnO1xuICAgIH0pO1xuXG4gICAgX3RoaXMucm9vdElkID0gcHJvcHMuaWQgPyBmdW5jdGlvbiAoc3VmZml4KSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQocHJvcHMuaWQpLmNvbmNhdChzdWZmaXggPyBcIl9cIi5jb25jYXQoc3VmZml4KSA6ICcnKTtcbiAgICB9IDogaHRtbElkR2VuZXJhdG9yKCk7XG4gICAgX3RoaXMubGlzdElkID0gX3RoaXMucm9vdElkKCdsaXN0Ym94Jyk7XG4gICAgX3RoaXMubWVzc2FnZUNvbnRlbnRJZCA9IF90aGlzLnJvb3RJZCgnbWVzc2FnZUNvbnRlbnQnKTtcbiAgICB2YXIgX29wdGlvbnMgPSBwcm9wcy5vcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBwcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIF9pc1ByZUZpbHRlcmVkID0gcHJvcHMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgc2VhcmNoUHJvcHMgPSBwcm9wcy5zZWFyY2hQcm9wcztcbiAgICB2YXIgaW5pdGlhbFNlYXJjaFZhbHVlID0gKHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWFyY2hQcm9wcy52YWx1ZSkgfHwgU3RyaW5nKChzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VhcmNoUHJvcHMuZGVmYXVsdFZhbHVlKSB8fCAnJyk7XG5cbiAgICB2YXIgX3Zpc2libGVPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKF9vcHRpb25zLCBpbml0aWFsU2VhcmNoVmFsdWUsIF9pc1ByZUZpbHRlcmVkKTtcblxuICAgIHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3NlYXJjaFByb3BzJG9uQ2hhbmdlID0gc2VhcmNoUHJvcHMub25DaGFuZ2UpID09PSBudWxsIHx8IF9zZWFyY2hQcm9wcyRvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3NlYXJjaFByb3BzJG9uQ2hhbmdlLmNhbGwoc2VhcmNoUHJvcHMsIGluaXRpYWxTZWFyY2hWYWx1ZSwgX3Zpc2libGVPcHRpb25zKTsgLy8gZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzaW5nbGUgb3B0aW9uIGlzIGFjdGl2ZSBpZiBpdCBpcyBpbiB0aGUgdmlzaWJsZU9wdGlvbnNcblxuICAgIHZhciBzZWxlY3RlZE9wdGlvbnMgPSBfb3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgcmV0dXJuIG9wdGlvbi5jaGVja2VkO1xuICAgIH0pO1xuXG4gICAgdmFyIF9hY3RpdmVPcHRpb25JbmRleDtcblxuICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKF92aXNpYmxlT3B0aW9ucy5pbmNsdWRlcyhzZWxlY3RlZE9wdGlvbnNbMF0pKSB7XG4gICAgICAgIF9hY3RpdmVPcHRpb25JbmRleCA9IF92aXNpYmxlT3B0aW9ucy5pbmRleE9mKHNlbGVjdGVkT3B0aW9uc1swXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBhY3RpdmVPcHRpb25JbmRleDogX2FjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgc2VhcmNoVmFsdWU6IGluaXRpYWxTZWFyY2hWYWx1ZSxcbiAgICAgIHZpc2libGVPcHRpb25zOiBfdmlzaWJsZU9wdGlvbnMsXG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpU2VsZWN0YWJsZSwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPT0gdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25BY3RpdmVPLCBfdGhpcyRwcm9wczI7XG5cbiAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbiA9IHRoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbCA/IHRoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnNbdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleF0gOiBudWxsO1xuICAgICAgICAoX3RoaXMkcHJvcHMkb25BY3RpdmVPID0gKF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMpLm9uQWN0aXZlT3B0aW9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkFjdGl2ZU8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uQWN0aXZlTy5jYWxsKF90aGlzJHByb3BzMiwgYWN0aXZlT3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczMuY2xhc3NOYW1lLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczMub3B0aW9ucyxcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMy5vbkNoYW5nZSxcbiAgICAgICAgICBvbkFjdGl2ZU9wdGlvbkNoYW5nZSA9IF90aGlzJHByb3BzMy5vbkFjdGl2ZU9wdGlvbkNoYW5nZSxcbiAgICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMzLnNlYXJjaGFibGUsXG4gICAgICAgICAgc2VhcmNoUHJvcHMgPSBfdGhpcyRwcm9wczMuc2VhcmNoUHJvcHMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczMuaXNMb2FkaW5nLFxuICAgICAgICAgIGxpc3RQcm9wcyA9IF90aGlzJHByb3BzMy5saXN0UHJvcHMsXG4gICAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMzLnJlbmRlck9wdGlvbixcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczMuaGVpZ2h0LFxuICAgICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzMy5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHMzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gX3RoaXMkcHJvcHMzWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgICAgbG9hZGluZ01lc3NhZ2UgPSBfdGhpcyRwcm9wczMubG9hZGluZ01lc3NhZ2UsXG4gICAgICAgICAgbm9NYXRjaGVzTWVzc2FnZSA9IF90aGlzJHByb3BzMy5ub01hdGNoZXNNZXNzYWdlLFxuICAgICAgICAgIGVtcHR5TWVzc2FnZSA9IF90aGlzJHByb3BzMy5lbXB0eU1lc3NhZ2UsXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gX3RoaXMkcHJvcHMzLmVycm9yTWVzc2FnZSxcbiAgICAgICAgICBpc1ByZUZpbHRlcmVkID0gX3RoaXMkcHJvcHMzLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRzdGF0ZS5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF90aGlzJHN0YXRlLnZpc2libGVPcHRpb25zLFxuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXg7IC8vIFNvbWUgbWVzc3kgZGVzdHJ1Y3R1cmluZyBoZXJlIHRvIHJlbW92ZSBhcmlhLWxhYmVsL2Rlc2NyaWJlZGJ5IGZyb20gc2VhcmNoUHJvcHMgYW5kIGxpc3RQcm9wc1xuICAgICAgLy8gTWFkZSBtZXNzaWVyIGJ5IHNvbWUgVFMgcmVxdWlyZW1lbnRzXG4gICAgICAvLyBUaGUgYXJpYSBhdHRyaWJ1dGVzIGFyZSB0aGVuIHVzZWQgaW4gZ2V0QWNjZXNzaWJsZU5hbWUoKSB0byBwbGFjZSB0aGVtIHdoZXJlIHRoZXkgbmVlZCB0byBnb1xuXG4gICAgICB2YXIgdW5rbm93bkFjY2Vzc2libGVOYW1lID0ge1xuICAgICAgICAnYXJpYS1sYWJlbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICAgIHZhciBfcmVmMiA9IHNlYXJjaFByb3BzIHx8IHVua25vd25BY2Nlc3NpYmxlTmFtZSxcbiAgICAgICAgICBzZWFyY2hBcmlhTGFiZWwgPSBfcmVmMlsnYXJpYS1sYWJlbCddLFxuICAgICAgICAgIHNlYXJjaEFyaWFEZXNjcmliZWRieSA9IF9yZWYyWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgICAgcHJvcHNPbkNoYW5nZSA9IF9yZWYyLm9uQ2hhbmdlLFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IF9yZWYyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICBpbnB1dFJlZiA9IF9yZWYyLmlucHV0UmVmLFxuICAgICAgICAgIGNsZWFuZWRTZWFyY2hQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgX2V4Y2x1ZGVkMik7XG5cbiAgICAgIHZhciBfcmVmMyA9IGxpc3RQcm9wcyB8fCB1bmtub3duQWNjZXNzaWJsZU5hbWUsXG4gICAgICAgICAgbGlzdEFyaWFMYWJlbCA9IF9yZWYzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgbGlzdEFyaWFEZXNjcmliZWRieSA9IF9yZWYzWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgICAgaXNWaXJ0dWFsaXplZCA9IF9yZWYzLmlzVmlydHVhbGl6ZWQsXG4gICAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjMucm93SGVpZ2h0LFxuICAgICAgICAgIGNsZWFuZWRMaXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIF9leGNsdWRlZDMpO1xuXG4gICAgICB2YXIgdmlydHVhbGl6ZWRQcm9wcztcblxuICAgICAgaWYgKGlzVmlydHVhbGl6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHZpcnR1YWxpemVkUHJvcHMgPSB7XG4gICAgICAgICAgaXNWaXJ0dWFsaXplZDogaXNWaXJ0dWFsaXplZFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChyb3dIZWlnaHQgIT0gbnVsbCkge1xuICAgICAgICB2aXJ0dWFsaXplZFByb3BzID0ge1xuICAgICAgICAgIHJvd0hlaWdodDogcm93SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZScsIHtcbiAgICAgICAgJ2V1aVNlbGVjdGFibGUtZnVsbEhlaWdodCc6IGhlaWdodCA9PT0gJ2Z1bGwnXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgLyoqIENyZWF0ZSBtZXNzYWdlIGNvbnRlbnQgdGhhdCByZXBsYWNlcyB0aGUgbGlzdCBpZiBubyBvcHRpb25zIGFyZSBhdmFpbGFibGUgKHlldCkgKi9cblxuICAgICAgdmFyIG1lc3NhZ2VDb250ZW50O1xuXG4gICAgICBpZiAoZXJyb3JNZXNzYWdlICE9IG51bGwpIHtcbiAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSB0eXBlb2YgZXJyb3JNZXNzYWdlID09PSAnc3RyaW5nJyA/IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGVycm9yTWVzc2FnZSkgOiBlcnJvck1lc3NhZ2U7XG4gICAgICB9IGVsc2UgaWYgKGlzTG9hZGluZykge1xuICAgICAgICBpZiAobG9hZGluZ01lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgbG9hZGluZ01lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgICAgICBzaXplOiBcIm1cIlxuICAgICAgICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aVNwYWNlciwge1xuICAgICAgICAgICAgc2l6ZTogXCJ4c1wiXG4gICAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGxvYWRpbmdNZXNzYWdlIHx8IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5sb2FkaW5nT3B0aW9uc1wiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJMb2FkaW5nIG9wdGlvbnNcIlxuICAgICAgICAgIH0pKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGxvYWRpbmdNZXNzYWdlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLm1lc3NhZ2VDb250ZW50SWRcbiAgICAgICAgICB9LCBsb2FkaW5nTWVzc2FnZS5wcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNlYXJjaFZhbHVlICYmIHZpc2libGVPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAobm9NYXRjaGVzTWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBub01hdGNoZXNNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgbm9NYXRjaGVzTWVzc2FnZSB8fCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUubm9NYXRjaGluZ09wdGlvbnNcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwie3NlYXJjaFZhbHVlfSBkb2Vzbid0IG1hdGNoIGFueSBvcHRpb25zXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgc2VhcmNoVmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChub01hdGNoZXNNZXNzYWdlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLm1lc3NhZ2VDb250ZW50SWRcbiAgICAgICAgICB9LCBub01hdGNoZXNNZXNzYWdlLnByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChlbXB0eU1lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgZW1wdHlNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgZW1wdHlNZXNzYWdlIHx8IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5ub0F2YWlsYWJsZU9wdGlvbnNcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiTm8gb3B0aW9ucyBhdmFpbGFibGVcIlxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoZW1wdHlNZXNzYWdlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLm1lc3NhZ2VDb250ZW50SWRcbiAgICAgICAgICB9LCBlbXB0eU1lc3NhZ2UucHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBUaGVyZSBhcmUgbG90cyBvZiB3YXlzIHRvIGFkZCBhbiBhY2Nlc3NpYmxlIG5hbWVcbiAgICAgICAqIFVzdWFsbHkgd2Ugd2FudCB0aGUgc2FtZSBuYW1lIGZvciB0aGUgaW5wdXQgYW5kIHRoZSBsaXN0Ym94ICh3aGljaCBpcyBhZGRlZCBieSBhcmlhLWxhYmVsL2Rlc2NyaWJlZGJ5KVxuICAgICAgICogQnV0IHlvdSBjYW4gYWx3YXlzIG92ZXJyaWRlIGl0IHVzaW5nIHNlYXJjaFByb3BzIG9yIGxpc3RQcm9wc1xuICAgICAgICogVGhpcyBmaW5kcyB0aGUgY29ycmVjdCBuYW1lIHRvIHVzZVxuICAgICAgICpcbiAgICAgICAqIFRPRE86IFRoaXMgZG9lc24ndCBoYW5kbGUgYmVpbmcgbGFiZWxsZWQgKDxsYWJlbCBmb3I9XCJpZE9mSW5wdXRcIj4pXG4gICAgICAgKi9cblxuXG4gICAgICB2YXIgZ2V0QWNjZXNzaWJsZU5hbWUgPSBmdW5jdGlvbiBnZXRBY2Nlc3NpYmxlTmFtZShwcm9wcywgbWVzc2FnZUNvbnRlbnRJZCkge1xuICAgICAgICBpZiAocHJvcHMgJiYgcHJvcHNbJ2FyaWEtbGFiZWwnXSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6IHByb3BzWydhcmlhLWxhYmVsJ11cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1lc3NhZ2VDb250ZW50SWRTdHJpbmcgPSBtZXNzYWdlQ29udGVudElkID8gXCIgXCIuY29uY2F0KG1lc3NhZ2VDb250ZW50SWQpIDogJyc7XG5cbiAgICAgICAgaWYgKHByb3BzICYmIHByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J10pIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBcIlwiLmNvbmNhdChwcm9wc1snYXJpYS1kZXNjcmliZWRieSddKS5jb25jYXQobWVzc2FnZUNvbnRlbnRJZFN0cmluZylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyaWFMYWJlbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJpYURlc2NyaWJlZGJ5KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogXCJcIi5jb25jYXQoYXJpYURlc2NyaWJlZGJ5KS5jb25jYXQobWVzc2FnZUNvbnRlbnRJZFN0cmluZylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfTtcblxuICAgICAgdmFyIHNlYXJjaEFjY2Vzc2libGVOYW1lID0gZ2V0QWNjZXNzaWJsZU5hbWUoc2VhcmNoUHJvcHMsIHRoaXMubWVzc2FnZUNvbnRlbnRJZCk7XG4gICAgICB2YXIgc2VhcmNoSGFzQWNjZXNzaWJsZU5hbWUgPSBCb29sZWFuKE9iamVjdC5rZXlzKHNlYXJjaEFjY2Vzc2libGVOYW1lKS5sZW5ndGgpO1xuICAgICAgdmFyIHNlYXJjaCA9IHNlYXJjaGFibGUgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5wbGFjZWhvbGRlck5hbWVcIixcbiAgICAgICAgZGVmYXVsdDogXCJGaWx0ZXIgb3B0aW9uc1wiXG4gICAgICB9LCBmdW5jdGlvbiAocGxhY2Vob2xkZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVTZWFyY2gsIF9leHRlbmRzKHtcbiAgICAgICAgICBrZXk6IFwibGlzdFNlYXJjaFwiLFxuICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgdmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczIub25TZWFyY2hDaGFuZ2UsXG4gICAgICAgICAgbGlzdElkOiBfdGhpczIub3B0aW9uc0xpc3RSZWYuY3VycmVudCA/IF90aGlzMi5saXN0SWQgOiB1bmRlZmluZWQgLy8gT25seSBwYXNzIHRoZSBsaXN0SWQgaWYgaXQgZXhpc3RzIG9uIHRoZSBwYWdlXG4gICAgICAgICAgLFxuICAgICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IF90aGlzMi5tYWtlT3B0aW9uSWQoYWN0aXZlT3B0aW9uSW5kZXgpIC8vIHRoZSBjdXJyZW50IGZhdXgtZm9jdXNlZCBvcHRpb25cbiAgICAgICAgICAsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyTmFtZSxcbiAgICAgICAgICBpc1ByZUZpbHRlcmVkOiBpc1ByZUZpbHRlcmVkICE9PSBudWxsICYmIGlzUHJlRmlsdGVyZWQgIT09IHZvaWQgMCA/IGlzUHJlRmlsdGVyZWQgOiBmYWxzZSxcbiAgICAgICAgICBpbnB1dFJlZjogZnVuY3Rpb24gaW5wdXRSZWYobm9kZSkge1xuICAgICAgICAgICAgdmFyIF9zZWFyY2hQcm9wcyRpbnB1dFJlZjtcblxuICAgICAgICAgICAgX3RoaXMyLmlucHV0UmVmID0gbm9kZTtcbiAgICAgICAgICAgIHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3NlYXJjaFByb3BzJGlucHV0UmVmID0gc2VhcmNoUHJvcHMuaW5wdXRSZWYpID09PSBudWxsIHx8IF9zZWFyY2hQcm9wcyRpbnB1dFJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3NlYXJjaFByb3BzJGlucHV0UmVmLmNhbGwoc2VhcmNoUHJvcHMsIG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgc2VhcmNoSGFzQWNjZXNzaWJsZU5hbWUgPyBzZWFyY2hBY2Nlc3NpYmxlTmFtZSA6IHtcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IHBsYWNlaG9sZGVyTmFtZVxuICAgICAgICB9LCBjbGVhbmVkU2VhcmNoUHJvcHMpKTtcbiAgICAgIH0pIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIHJlc3VsdHNMZW5ndGggPSB2aXNpYmxlT3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gIW9wdGlvbi5kaXNhYmxlZDtcbiAgICAgIH0pLmxlbmd0aDtcblxuICAgICAgdmFyIGxpc3RTY3JlZW5SZWFkZXJTdGF0dXMgPSBzZWFyY2hhYmxlICYmIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLnNlYXJjaFJlc3VsdHNcIixcbiAgICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoX3JlZjQpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0c0xlbmd0aCA9IF9yZWY0LnJlc3VsdHNMZW5ndGg7XG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHJlc3VsdHNMZW5ndGgsIFwiIHJlc3VsdFwiKS5jb25jYXQocmVzdWx0c0xlbmd0aCA9PT0gMSA/ICcnIDogJ3MnLCBcIiBhdmFpbGFibGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIHJlc3VsdHNMZW5ndGg6IHJlc3VsdHNMZW5ndGhcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBsaXN0QXJpYURlc2NyaWJlZGJ5SWQgPSB0aGlzLnJvb3RJZCgnaW5zdHJ1Y3Rpb25zJyk7XG4gICAgICB2YXIgbGlzdEFjY2Vzc2libGVOYW1lID0gZ2V0QWNjZXNzaWJsZU5hbWUobGlzdFByb3BzLCBsaXN0QXJpYURlc2NyaWJlZGJ5SWQpO1xuICAgICAgdmFyIGxpc3RIYXNBY2Nlc3NpYmxlTmFtZSA9IEJvb2xlYW4oT2JqZWN0LmtleXMobGlzdEFjY2Vzc2libGVOYW1lKS5sZW5ndGgpO1xuXG4gICAgICB2YXIgbGlzdCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbnM6IFsnZXVpU2VsZWN0YWJsZS5zY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMnLCAnZXVpU2VsZWN0YWJsZS5wbGFjZWhvbGRlck5hbWUnXSxcbiAgICAgICAgZGVmYXVsdHM6IFsnVXNlIHVwIGFuZCBkb3duIGFycm93cyB0byBtb3ZlIGZvY3VzIG92ZXIgb3B0aW9ucy4gRW50ZXIgdG8gc2VsZWN0LiBFc2NhcGUgdG8gY29sbGFwc2Ugb3B0aW9ucy4nLCAnRmlsdGVyIG9wdGlvbnMnXVxuICAgICAgfSwgZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyTmFtZSA9IF9yZWY2WzBdLFxuICAgICAgICAgICAgc2NyZWVuUmVhZGVySW5zdHJ1Y3Rpb25zID0gX3JlZjZbMV07XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHNlYXJjaGFibGUgJiYgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJMaXZlLCB7XG4gICAgICAgICAgaXNBY3RpdmU6IG1lc3NhZ2VDb250ZW50ICE9IG51bGwgfHwgYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbFxuICAgICAgICB9LCBtZXNzYWdlQ29udGVudCB8fCBsaXN0U2NyZWVuUmVhZGVyU3RhdHVzKSwgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgaWQ6IGxpc3RBcmlhRGVzY3JpYmVkYnlJZFxuICAgICAgICB9LCBzY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMpKSwgbWVzc2FnZUNvbnRlbnQgPyBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVNZXNzYWdlLCB7XG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aVNlbGVjdGFibGVNZXNzYWdlXCIsXG4gICAgICAgICAgaWQ6IF90aGlzMi5tZXNzYWdlQ29udGVudElkLFxuICAgICAgICAgIGJvcmRlcmVkOiBsaXN0UHJvcHMgJiYgbGlzdFByb3BzLmJvcmRlcmVkXG4gICAgICAgIH0sIG1lc3NhZ2VDb250ZW50KSA6IF9fX0Vtb3Rpb25KU1goRXVpU2VsZWN0YWJsZUxpc3QsIF9leHRlbmRzKHtcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpU2VsZWN0YWJsZUxpc3RcIixcbiAgICAgICAgICBrZXk6IFwibGlzdFwiLFxuICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnM6IHZpc2libGVPcHRpb25zLFxuICAgICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXg6IGZ1bmN0aW9uIHNldEFjdGl2ZU9wdGlvbkluZGV4KGluZGV4LCBjYikge1xuICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGluZGV4XG4gICAgICAgICAgICB9LCBjYik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrOiBfdGhpczIub25PcHRpb25DbGljayxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb246IHNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICByZWY6IF90aGlzMi5vcHRpb25zTGlzdFJlZixcbiAgICAgICAgICByZW5kZXJPcHRpb246IHJlbmRlck9wdGlvbixcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnM6IGFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBzZWFyY2hhYmxlOiBzZWFyY2hhYmxlLFxuICAgICAgICAgIG1ha2VPcHRpb25JZDogX3RoaXMyLm1ha2VPcHRpb25JZCxcbiAgICAgICAgICBsaXN0SWQ6IF90aGlzMi5saXN0SWRcbiAgICAgICAgfSwgbGlzdEhhc0FjY2Vzc2libGVOYW1lID8gbGlzdEFjY2Vzc2libGVOYW1lIDogc2VhcmNoYWJsZSAmJiB7XG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwbGFjZWhvbGRlck5hbWVcbiAgICAgICAgfSwgY2xlYW5lZExpc3RQcm9wcywgdmlydHVhbGl6ZWRQcm9wcykpKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogdGhpcy5jb250YWluZXJSZWYsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQ29udGFpbmVyQmx1cixcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbk1vdXNlRG93blxuICAgICAgfSwgcmVzdCksIGNoaWxkcmVuICYmIGNoaWxkcmVuKGxpc3QsIHNlYXJjaCkpO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gbmV4dFByb3BzLm9wdGlvbnMsXG4gICAgICAgICAgaXNQcmVGaWx0ZXJlZCA9IG5leHRQcm9wcy5pc1ByZUZpbHRlcmVkLFxuICAgICAgICAgIHNlYXJjaFByb3BzID0gbmV4dFByb3BzLnNlYXJjaFByb3BzO1xuICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gcHJldlN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gcHJldlN0YXRlLnNlYXJjaFZhbHVlO1xuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCk7XG4gICAgICB2YXIgc3RhdGVVcGRhdGUgPSB7XG4gICAgICAgIHZpc2libGVPcHRpb25zOiBtYXRjaGluZ09wdGlvbnMsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBhY3RpdmVPcHRpb25JbmRleFxuICAgICAgfTtcblxuICAgICAgaWYgKGFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwgJiYgYWN0aXZlT3B0aW9uSW5kZXggPj0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZVVwZGF0ZS5hY3RpdmVPcHRpb25JbmRleCA9IC0xO1xuICAgICAgfVxuXG4gICAgICBpZiAoKHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWFyY2hQcm9wcy52YWx1ZSkgIT0gbnVsbCAmJiBzZWFyY2hQcm9wcy52YWx1ZSAhPT0gc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUuc2VhcmNoVmFsdWUgPSBzZWFyY2hQcm9wcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0YXRlVXBkYXRlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlTZWxlY3RhYmxlO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpU2VsZWN0YWJsZSwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBvcHRpb25zOiBbXSxcbiAgc2luZ2xlU2VsZWN0aW9uOiBmYWxzZSxcbiAgc2VhcmNoYWJsZTogZmFsc2UsXG4gIGlzUHJlRmlsdGVyZWQ6IGZhbHNlXG59KTtcblxuRXVpU2VsZWN0YWJsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIEhvb2tzIHVwIGEgc2VhcmNoIGJveCB0byBmaWx0ZXIgdGhlIGxpc3QgKGJvb2xlYW4pXG4gICAgICAgKi9cbiAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogUGFzc2VzIHByb3BzIGRvd24gdG8gdGhlIGBFdWlGaWVsZFNlYXJjaGAuXG4gICAgICAgKiBTZWUgI0V1aVNlbGVjdGFibGVTZWFyY2hQcm9wc1xuICAgICAgICovXG4gIHNlYXJjaFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogRnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgYGxpc3RgIG5vZGUgYW5kIHRoZW5cbiAgICAgICAqIHRoZSBgc2VhcmNoYCBub2RlIChpZiBgc2VhcmNoYWJsZWAgaXMgYXBwbGllZClcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICAgKiBBcnJheSBvZiBFdWlTZWxlY3RhYmxlT3B0aW9uIG9iamVjdHMuIFNlZSAjRXVpU2VsZWN0YWJsZU9wdGlvblByb3BzXG4gICAgICAgKi9cbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGBib29sZWFuYC5cbiAgICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gaW5kaWNhdGUgb2JqZWN0IGlzIGp1c3QgYSBncm91cGluZyBsYWJlbCwgbm90IGEgc2VsZWN0YWJsZSBpdGVtXG4gICAgICAgKi9cbiAgICBpc0dyb3VwTGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIFZpc2libGUgbGFiZWwgb2Ygb3B0aW9uLlxuICAgICAgICogTXVzdCBiZSB1bmlxdWUgYWNyb3NzIGl0ZW1zIGlmIGBrZXlgIGlzIG5vdCBzdXBwbGllZFxuICAgICAgICovXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsbHkgY2hhbmdlIHRoZSBzZWFyY2hhYmxlIHRlcm0gYnkgcGFzc2luZyBhIGRpZmZlcmVudCBzdHJpbmcgb3RoZXIgdGhhbiB0aGUgYGxhYmVsYC5cbiAgICAgICAqIEJlc3QgdXNlZCB3aGVuIGNyZWF0aW5nIGEgY3VzdG9tIGBvcHRpb25SZW5kZXJgIHRvIHNlcGFyYXRlIHRoZSBsYWJlbCBmcm9tIG1ldGFkYXRhIGJ1dCBhbGxvd2luZyB0byBzZWFyY2ggb24gYm90aFxuICAgICAgICovXG4gICAgc2VhcmNoYWJsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgaXRlbXMuXG4gICAgICAgKiBXaWxsIGJlIHVzZWQgdG8gbWF0Y2ggb3B0aW9ucyBpbnN0ZWFkIG9mIGBsYWJlbGBcbiAgICAgICAqL1xuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogTGVhdmUgYHVuZGVmaW5lZGAgdG8gaW5kaWNhdGUgbm90IHNlbGVjdGVkLFxuICAgICAgICogJ29uJyB0byBpbmRpY2F0ZSBpbmNsdXNpb24gYW5kXG4gICAgICAgKiAnb2ZmJyB0byBpbmRpY2F0ZSBleGNsdXNpb25cbiAgICAgICAqL1xuICAgIGNoZWNrZWQ6IFByb3BUeXBlcy5vbmVPZihbXCJvblwiLCBcIm9mZlwiLCB1bmRlZmluZWRdKSxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIE5vZGUgdG8gYWRkIGJldHdlZW4gdGhlIHNlbGVjdGlvbiBpY29uIGFuZCB0aGUgbGFiZWxcbiAgICAgICAqL1xuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCB0byB0aGUgZmFyIHJpZ2h0IG9mIHRoZSBpdGVtXG4gICAgICAgKi9cbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHJlZjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIE9wdGlvbiBkYXRhIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgYHJlbmRlck9wdGlvbnNgIGVsZW1lbnQuXG4gICAgICAgKiBCeXBhc3MgYEV1aVNlbGVjdGFibGVJdGVtYCBhbmQgYXZvaWQgRE9NIGF0dHJpYnV0ZSB3YXJuaW5ncy5cbiAgICAgICAqL1xuICAgIGRhdGE6IFByb3BUeXBlcy5zaGFwZSh7fSlcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIFBhc3NlcyBiYWNrIHRoZSBhbHRlcmVkIGBvcHRpb25zYCBhcnJheSB3aXRoIHNlbGVjdGVkIG9wdGlvbnMgaGF2aW5nIGBjaGVja2VkOiAnb24nYC5cbiAgICAgICAqIEFsc28gcGFzc2VzIGJhY2sgdGhlIFJlYWN0IGNsaWNrL2tleWJvYXJkIGV2ZW50IGFzIGEgc2Vjb25kIGFyZ3VtZW50LlxuICAgICAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIFBhc3NlcyBiYWNrIHRoZSBjdXJyZW50IGFjdGl2ZSBvcHRpb24gd2hlbmV2ZXIgdGhlIHVzZXIgY2hhbmdlcyB0aGUgY3VycmVudGx5XG4gICAgICAgKiBoaWdobGlnaHRlZCBvcHRpb24gdmlhIGtleWJvYXJkIG5hdmlnYXRpb24gb3Igc2VhcmNoaW5nLlxuICAgICAgICovXG4gIG9uQWN0aXZlT3B0aW9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIHNpbmdsZSBzZWxlY3Rpb24gcG9saWN5IG9mXG4gICAgICAgKiBgZmFsc2VgOiBhbGxvd3MgbXVsdGlwbGUgc2VsZWN0aW9uXG4gICAgICAgKiBgdHJ1ZWA6IG9ubHkgYWxsb3dzIG9uZSBzZWxlY3Rpb25cbiAgICAgICAqIGBhbHdheXNgOiBjYW4gYW5kIG11c3QgaGF2ZSBvbmx5IG9uZSBzZWxlY3Rpb25cbiAgICAgICAqL1xuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhbHdheXNcIl0pLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBBbGxvd3MgbWFya2luZyBvcHRpb25zIGFzIGBjaGVja2VkPSdvZmYnYCBhcyB3ZWxsIGFzIGAnb24nYFxuICAgICAgICovXG4gIGFsbG93RXhjbHVzaW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBTaG93IGFuIGxvYWRpbmcgaW5kaWNhdG9yIHdoaWxlIHlvdSBsb2FkIGFuZCBob29rIHVwIHlvdXIgZGF0YVxuICAgICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBtYXggaGVpZ2h0IGluIHBpeGVscyBvciBwYXNzIGBmdWxsYCB0byBhbGxvd1xuICAgICAgICogdGhlIHdob2xlIGdyb3VwIHRvIGZpbGwgdGhlIGhlaWdodCBvZiBpdHMgY29udGFpbmVyIGFuZFxuICAgICAgICogYWxsb3dzIHRoZSBsaXN0IGdyb3cgYXMgd2VsbFxuICAgICAgICovXG4gIGhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1wiZnVsbFwiXSldKSxcblxuICAvKipcbiAgICAgICAqIFNlZSAjRXVpU2VsZWN0YWJsZU9wdGlvbnNMaXN0XG4gICAgICAgKi9cbiAgbGlzdFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQ3VzdG9tIHJlbmRlciBmdW5jdGlvbiBmb3IgZWFjaCBvcHRpb24uXG4gICAgICAgKiBSZXR1cm5zIGAob3B0aW9uLCBzZWFyY2hWYWx1ZSlgXG4gICAgICAgKi9cbiAgcmVuZGVyT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIEN1c3RvbWl6ZSB0aGUgbG9hZGluZyBtZXNzYWdlLiBQYXNzIGEgc3RyaW5nIHRvIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQsXG4gICAgICAgKiBvciBhIG5vZGUgdG8gcmVwbGFjZSB0aGUgd2hvbGUgY29udGVudC5cbiAgICAgICAqL1xuICBsb2FkaW5nTWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDdXN0b21pemUgdGhlIG5vIG1hdGNoZXMgbWVzc2FnZS4gUGFzcyBhIHN0cmluZyB0byBzaW1wbHkgY2hhbmdlIHRoZSB0ZXh0LFxuICAgICAgICogb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKi9cbiAgbm9NYXRjaGVzTWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDdXN0b21pemUgdGhlIGVtcHR5IG1lc3NhZ2UuIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCxcbiAgICAgICAqIG9yIGEgbm9kZSB0byByZXBsYWNlIHRoZSB3aG9sZSBjb250ZW50LlxuICAgICAgICovXG4gIGVtcHR5TWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBBZGQgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICAgICAqIFRoZSBtZXNzYWdlIHdpbGwgYmUgc2hvd24gd2hlbiB0aGUgdmFsdWUgaXMgbm90IGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAgICAgICAqIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCwgb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKlxuICAgICAgICogYGVycm9yTWVzc2FnZT17aGFzRXJyb3JzID8gJ015IGVycm9yIG1lc3NhZ2UnIDogbnVsbH1gXG4gICAgICAgKi9cbiAgZXJyb3JNZXNzYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSksXG5cbiAgLyoqXG4gICAgICAgKiBDb250cm9sIHdoZXRoZXIgb3Igbm90IG9wdGlvbnMgZ2V0IGZpbHRlcmVkIGludGVybmFsbHkgb3IgaWYgY29uc3VtZXIgd2lsbCBmaWx0ZXJcbiAgICAgICAqIERlZmF1bHQ6IGZhbHNlXG4gICAgICAgKi9cbiAgaXNQcmVGaWx0ZXJlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJvbkNoYW5nZVwiLCBcIm9wdGlvbnNcIiwgXCJ2YWx1ZVwiLCBcInBsYWNlaG9sZGVyXCIsIFwiaXNQcmVGaWx0ZXJlZFwiLCBcImxpc3RJZFwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRmllbGRTZWFyY2ggfSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7IGdldE1hdGNoaW5nT3B0aW9ucyB9IGZyb20gJy4uL21hdGNoaW5nX29wdGlvbnMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVTZWFyY2goX3JlZikge1xuICB2YXIgb25DaGFuZ2VDYWxsYmFjayA9IF9yZWYub25DaGFuZ2UsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgICAgcGxhY2Vob2xkZXIgPSBfcmVmLnBsYWNlaG9sZGVyLFxuICAgICAgaXNQcmVGaWx0ZXJlZCA9IF9yZWYuaXNQcmVGaWx0ZXJlZCxcbiAgICAgIGxpc3RJZCA9IF9yZWYubGlzdElkLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgc2VhcmNoVmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkKTtcbiAgICBvbkNoYW5nZUNhbGxiYWNrKHNlYXJjaFZhbHVlLCBtYXRjaGluZ09wdGlvbnMpO1xuICB9LCBbb3B0aW9ucywgaXNQcmVGaWx0ZXJlZCwgb25DaGFuZ2VDYWxsYmFja10pO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVTZWFyY2gnLCBjbGFzc05hbWUpO1xuICB2YXIgYXJpYVByb3BzSWZMaXN0SXNQcmVzZW50ID0gbGlzdElkID8ge1xuICAgIHJvbGU6ICdjb21ib2JveCcsXG4gICAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogJ2xpc3QnLFxuICAgICdhcmlhLWV4cGFuZGVkJzogdHJ1ZSxcbiAgICAnYXJpYS1jb250cm9scyc6IGxpc3RJZCxcbiAgICAnYXJpYS1vd25zJzogbGlzdElkIC8vIGxlZ2FjeSBhdHRyaWJ1dGUgYnV0IHNoaW1zIHN1cHBvcnQgZm9yIG5lYXJseSBldmVyeXRoaW5nIGF0bVxuXG4gIH0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZpZWxkU2VhcmNoLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIGluY3JlbWVudGFsOiB0cnVlLFxuICAgIGZ1bGxXaWR0aDogdHJ1ZSxcbiAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgXCJhcmlhLWhhc3BvcHVwXCI6IFwibGlzdGJveFwiXG4gIH0sIGFyaWFQcm9wc0lmTGlzdElzUHJlc2VudCwgcmVzdCkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbnZhciBnZXRTZWFyY2hhYmxlTGFiZWwgPSBmdW5jdGlvbiBnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uKSB7XG4gIHZhciBub3JtYWxpemUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBzZWFyY2hhYmxlTGFiZWwgPSBvcHRpb24uc2VhcmNoYWJsZUxhYmVsIHx8IG9wdGlvbi5sYWJlbDtcbiAgcmV0dXJuIG5vcm1hbGl6ZSA/IHNlYXJjaGFibGVMYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSA6IHNlYXJjaGFibGVMYWJlbDtcbn07XG5cbnZhciBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShzZWFyY2hWYWx1ZSwgc2VsZWN0ZWRPcHRpb25zKSB7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbmQoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIHJldHVybiBnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uKSA9PT0gbm9ybWFsaXplZFNlYXJjaFZhbHVlO1xuICB9KTtcbn07XG5cbnZhciBjb2xsZWN0TWF0Y2hpbmdPcHRpb24gPSBmdW5jdGlvbiBjb2xsZWN0TWF0Y2hpbmdPcHRpb24oYWNjdW11bGF0b3IsIG9wdGlvbiwgbm9ybWFsaXplZFNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzZWxlY3RlZE9wdGlvbnMpIHtcbiAgLy8gRG9uJ3Qgc2hvdyBvcHRpb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGlmXG4gIC8vIHRoZSBzZWxlY3RlZE9wdGlvbnMgbGlzdCBleGlzdHNcbiAgaWYgKHNlbGVjdGVkT3B0aW9ucykge1xuICAgIHZhciBzZWxlY3RlZE9wdGlvbiA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoZ2V0U2VhcmNoYWJsZUxhYmVsKG9wdGlvbiwgZmFsc2UpLCBzZWxlY3RlZE9wdGlvbnMpO1xuXG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IC8vIElmIHRoZSBvcHRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIHByZWZpbHRlcmVkIHRoZW4gd2UgY2FuIHNraXAgZmlsdGVyaW5nIGFnYWluc3QgdGhlIHNlYXJjaCB2YWx1ZS5cbiAgLy8gVE9ETzogSSBzdGlsbCBkb24ndCBxdWl0ZSB1bmRlcnN0YW5kIGhvdyB0aGlzIHdvcmtzIHdoZW4gaG9va2VkIHVwIHRvIGFzeW5jXG5cblxuICBpZiAoaXNQcmVGaWx0ZXJlZCkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIW5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbm9ybWFsaXplZE9wdGlvbiA9IGdldFNlYXJjaGFibGVMYWJlbChvcHRpb24pO1xuXG4gIGlmIChub3JtYWxpemVkT3B0aW9uLmluY2x1ZGVzKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gIH1cbn07XG5cbmV4cG9ydCB2YXIgZ2V0TWF0Y2hpbmdPcHRpb25zID0gZnVuY3Rpb24gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzZWxlY3RlZE9wdGlvbnMpIHtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBtYXRjaGluZ09wdGlvbnMgPSBbXTtcbiAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICBjb2xsZWN0TWF0Y2hpbmdPcHRpb24obWF0Y2hpbmdPcHRpb25zLCBvcHRpb24sIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2VsZWN0ZWRPcHRpb25zKTtcbiAgfSk7XG4gIHJldHVybiBtYXRjaGluZ09wdGlvbnM7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJib3JkZXJlZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi8uLi90ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGVNZXNzYWdlID0gZnVuY3Rpb24gRXVpU2VsZWN0YWJsZU1lc3NhZ2UoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGJvcmRlcmVkID0gX3JlZi5ib3JkZXJlZCxcbiAgICAgIGJvcmRlcmVkID0gX3JlZiRib3JkZXJlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGJvcmRlcmVkLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZU1lc3NhZ2UnLCB7XG4gICAgJ2V1aVNlbGVjdGFibGVNZXNzYWdlLS1ib3JkZXJlZCc6IGJvcmRlcmVkXG4gIH0sIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRleHQsIF9leHRlbmRzKHtcbiAgICBjb2xvcjogXCJzdWJkdWVkXCIsXG4gICAgc2l6ZTogXCJ4c1wiLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVNlbGVjdGFibGVNZXNzYWdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogTWF0Y2ggdGhpcyB0byB0aGUgYGxpc3RQcm9wcy5ib3JkZXJlZGAgcHJvcGVydHkgb2YgeW91ciBgRXVpU2VsZWN0YWJsZWAgaW5zdGFuY2VcbiAgICAgICAqL1xuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImRhdGFcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImxhYmVsXCIsIFwiaXNHcm91cExhYmVsXCIsIFwiY2hlY2tlZFwiLCBcImRpc2FibGVkXCIsIFwicHJlcGVuZFwiLCBcImFwcGVuZFwiLCBcInJlZlwiLCBcImtleVwiLCBcInNlYXJjaGFibGVMYWJlbFwiLCBcImRhdGFcIl0sXG4gICAgX2V4Y2x1ZGVkMyA9IFtcImNsYXNzTmFtZVwiLCBcIm9wdGlvbnNcIiwgXCJzZWFyY2hWYWx1ZVwiLCBcIm9uT3B0aW9uQ2xpY2tcIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJoZWlnaHRcIiwgXCJ3aW5kb3dQcm9wc1wiLCBcInJvd0hlaWdodFwiLCBcImFjdGl2ZU9wdGlvbkluZGV4XCIsIFwibWFrZU9wdGlvbklkXCIsIFwic2hvd0ljb25zXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwidmlzaWJsZU9wdGlvbnNcIiwgXCJhbGxvd0V4Y2x1c2lvbnNcIiwgXCJib3JkZXJlZFwiLCBcInBhZGRpbmdTaXplXCIsIFwic2VhcmNoYWJsZVwiLCBcIm9uRm9jdXNCYWRnZVwiLCBcImxpc3RJZFwiLCBcInNldEFjdGl2ZU9wdGlvbkluZGV4XCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJyb2xlXCIsIFwiaXNWaXJ0dWFsaXplZFwiLCBcInRleHRXcmFwXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgbWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRml4ZWRTaXplTGlzdCwgYXJlRXF1YWwgfSBmcm9tICdyZWFjdC13aW5kb3cnO1xuaW1wb3J0IHsgRXVpQXV0b1NpemVyIH0gZnJvbSAnLi4vLi4vYXV0b19zaXplcic7XG5pbXBvcnQgeyBFdWlIaWdobGlnaHQgfSBmcm9tICcuLi8uLi9oaWdobGlnaHQnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZUxpc3RJdGVtIH0gZnJvbSAnLi9zZWxlY3RhYmxlX2xpc3RfaXRlbSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlTGlzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpU2VsZWN0YWJsZUxpc3QsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpU2VsZWN0YWJsZUxpc3QpO1xuXG4gIGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVMaXN0KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVNlbGVjdGFibGVMaXN0KTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdEJveFJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRMaXN0UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RSZWYgPSByZWY7XG5cbiAgICAgIGlmIChyZWYgJiYgX3RoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgcmVmLnNjcm9sbFRvSXRlbShfdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCwgJ2F1dG8nKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVTY3JvbGxhYmxlVGFiU3RvcFwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAvLyBGaXJlZm94IGFkZHMgYSB0YWIgc3RvcCBmb3Igc2Nyb2xsYWJsZSBjb250YWluZXJzXG4gICAgICAvLyBXZSBoYW5kbGUgdGhpcyBpbnNpZGUgc28gbmVlZCB0byBzdG9wIGZpcmVmb3ggZnJvbSBkb2luZyBpdHMgdGhpbmdcbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRMaXN0Qm94UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RCb3hSZWYgPSByZWY7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBsaXN0SWQgPSBfdGhpcyRwcm9wcy5saXN0SWQsXG4gICAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzLnNlYXJjaGFibGUsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gX3RoaXMkcHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXTtcblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdpZCcsIGxpc3RJZCk7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbGlzdGJveCcpO1xuXG4gICAgICAgIGlmIChzZWFyY2hhYmxlICE9PSB0cnVlKSB7XG4gICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuXG4gICAgICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbiAhPT0gJ2Fsd2F5cycgJiYgc2luZ2xlU2VsZWN0aW9uICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLW11bHRpc2VsZWN0YWJsZScsICd0cnVlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmlhTGFiZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGFyaWFMYWJlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyaWFMYWJlbGxlZGJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGFyaWFMYWJlbGxlZGJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJpYURlc2NyaWJlZGJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGFyaWFEZXNjcmliZWRieSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJMaXN0Um93XCIsIC8qI19fUFVSRV9fKi9tZW1vKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgICAgICBpbmRleCA9IF9yZWYuaW5kZXgsXG4gICAgICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlO1xuICAgICAgdmFyIG9wdGlvbiA9IGRhdGFbaW5kZXhdO1xuXG4gICAgICB2YXIgb3B0aW9uRGF0YSA9IG9wdGlvbi5kYXRhLFxuICAgICAgICAgIF9vcHRpb24gPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgbGFiZWwgPSBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgaXNHcm91cExhYmVsID0gb3B0aW9uLmlzR3JvdXBMYWJlbCxcbiAgICAgICAgICBjaGVja2VkID0gb3B0aW9uLmNoZWNrZWQsXG4gICAgICAgICAgZGlzYWJsZWQgPSBvcHRpb24uZGlzYWJsZWQsXG4gICAgICAgICAgcHJlcGVuZCA9IG9wdGlvbi5wcmVwZW5kLFxuICAgICAgICAgIGFwcGVuZCA9IG9wdGlvbi5hcHBlbmQsXG4gICAgICAgICAgcmVmID0gb3B0aW9uLnJlZixcbiAgICAgICAgICBrZXkgPSBvcHRpb24ua2V5LFxuICAgICAgICAgIHNlYXJjaGFibGVMYWJlbCA9IG9wdGlvbi5zZWFyY2hhYmxlTGFiZWwsXG4gICAgICAgICAgX2RhdGEgPSBvcHRpb24uZGF0YSxcbiAgICAgICAgICBvcHRpb25SZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkMik7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczIuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICAgIG9uRm9jdXNCYWRnZSA9IF90aGlzJHByb3BzMi5vbkZvY3VzQmFkZ2UsXG4gICAgICAgICAgcGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wczIucGFkZGluZ1NpemUsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHMyLnNob3dJY29ucyxcbiAgICAgICAgICBtYWtlT3B0aW9uSWQgPSBfdGhpcyRwcm9wczIubWFrZU9wdGlvbklkLFxuICAgICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzMi5yZW5kZXJPcHRpb24sXG4gICAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczIuc2V0QWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzMi5zZWFyY2hhYmxlLFxuICAgICAgICAgIHRleHRXcmFwID0gX3RoaXMkcHJvcHMyLnRleHRXcmFwO1xuXG4gICAgICBpZiAoaXNHcm91cExhYmVsKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIHJvbGU6IFwicHJlc2VudGF0aW9uXCIsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0X19ncm91cExhYmVsXCIsXG4gICAgICAgICAgc3R5bGU6IHN0eWxlIC8vIEB0cy1pZ25vcmUgY29tcGxleFxuXG4gICAgICAgIH0sIG9wdGlvblJlc3QpLCBwcmVwZW5kLCBsYWJlbCwgYXBwZW5kKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxhYmVsQ291bnQgPSBkYXRhLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24uaXNHcm91cExhYmVsO1xuICAgICAgfSkubGVuZ3RoO1xuICAgICAgdmFyIGlkID0gbWFrZU9wdGlvbklkKGluZGV4KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVMaXN0SXRlbSwgX2V4dGVuZHMoe1xuICAgICAgICBrZXk6IGlkLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIG9uTW91c2VEb3duKCkge1xuICAgICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4KGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTsgLy8gTk9URTogVGhpcyBpcyBuZWVkZWQgZm9yIFJlYWN0IHYxNiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXG4gICAgICAgICAgX3RoaXMub25BZGRPclJlbW92ZU9wdGlvbihvcHRpb24sIGV2ZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiByZWYgPyByZWYuYmluZChudWxsLCBpbmRleCkgOiB1bmRlZmluZWQsXG4gICAgICAgIGlzRm9jdXNlZDogYWN0aXZlT3B0aW9uSW5kZXggPT09IGluZGV4LFxuICAgICAgICB0aXRsZTogc2VhcmNoYWJsZUxhYmVsIHx8IGxhYmVsLFxuICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIHByZXBlbmQ6IHByZXBlbmQsXG4gICAgICAgIGFwcGVuZDogYXBwZW5kLFxuICAgICAgICBcImFyaWEtcG9zaW5zZXRcIjogaW5kZXggKyAxIC0gbGFiZWxDb3VudCxcbiAgICAgICAgXCJhcmlhLXNldHNpemVcIjogZGF0YS5sZW5ndGggLSBsYWJlbENvdW50LFxuICAgICAgICBvbkZvY3VzQmFkZ2U6IG9uRm9jdXNCYWRnZSxcbiAgICAgICAgYWxsb3dFeGNsdXNpb25zOiBhbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIHNob3dJY29uczogc2hvd0ljb25zLFxuICAgICAgICBwYWRkaW5nU2l6ZTogcGFkZGluZ1NpemUsXG4gICAgICAgIHNlYXJjaGFibGU6IHNlYXJjaGFibGUsXG4gICAgICAgIHRleHRXcmFwOiB0ZXh0V3JhcFxuICAgICAgfSwgb3B0aW9uUmVzdCksIHJlbmRlck9wdGlvbiA/IHJlbmRlck9wdGlvbiggLy8gQHRzLWlnbm9yZSBjb21wbGV4XG4gICAgICBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIF9vcHRpb24pLCBvcHRpb25EYXRhKSwgX3RoaXMucHJvcHMuc2VhcmNoVmFsdWUpIDogX19fRW1vdGlvbkpTWChFdWlIaWdobGlnaHQsIHtcbiAgICAgICAgc2VhcmNoOiBzZWFyY2hWYWx1ZVxuICAgICAgfSwgbGFiZWwpKTtcbiAgICB9LCBhcmVFcXVhbCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQWRkT3JSZW1vdmVPcHRpb25cIiwgZnVuY3Rpb24gKG9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIGlmIChvcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMzLmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMzLm9wdGlvbnMsXG4gICAgICAgICAgX3RoaXMkcHJvcHMzJHZpc2libGVPID0gX3RoaXMkcHJvcHMzLnZpc2libGVPcHRpb25zLFxuICAgICAgICAgIHZpc2libGVPcHRpb25zID0gX3RoaXMkcHJvcHMzJHZpc2libGVPID09PSB2b2lkIDAgPyBvcHRpb25zIDogX3RoaXMkcHJvcHMzJHZpc2libGVPO1xuXG4gICAgICBfdGhpcy5wcm9wcy5zZXRBY3RpdmVPcHRpb25JbmRleCh2aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBsYWJlbCA9IF9yZWYyLmxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWwgPT09IG9wdGlvbi5sYWJlbDtcbiAgICAgIH0pLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChvcHRpb24uY2hlY2tlZCA9PT0gJ29uJyAmJiBhbGxvd0V4Y2x1c2lvbnMpIHtcbiAgICAgICAgICBfdGhpcy5vbkV4Y2x1ZGVPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmNoZWNrZWQgPT09ICdvbicgfHwgb3B0aW9uLmNoZWNrZWQgPT09ICdvZmYnKSB7XG4gICAgICAgICAgX3RoaXMub25SZW1vdmVPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMub25BZGRPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQWRkT3B0aW9uXCIsIGZ1bmN0aW9uIChhZGRlZE9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHM0Lm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzNC5vcHRpb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzNC5zaW5nbGVTZWxlY3Rpb247XG4gICAgICB2YXIgdXBkYXRlZE9wdGlvbnMgPSBvcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIC8vIGlmIHNpbmdsZVNlbGVjdGlvbiBpcyBlbmFibGVkLCB1bmNoZWNrIGFueSBzZWxlY3RlZCBvcHRpb24ocylcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuXG4gICAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICBkZWxldGUgdXBkYXRlZE9wdGlvbi5jaGVja2VkO1xuICAgICAgICB9IC8vIGlmIHRoaXMgaXMgdGhlIG5vdy1zZWxlY3RlZCBvcHRpb24sIGNoZWNrIGl0XG5cblxuICAgICAgICBpZiAob3B0aW9uID09PSBhZGRlZE9wdGlvbikge1xuICAgICAgICAgIHVwZGF0ZWRPcHRpb24uY2hlY2tlZCA9ICdvbic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZE9wdGlvbjtcbiAgICAgIH0pO1xuICAgICAgb25PcHRpb25DbGljayh1cGRhdGVkT3B0aW9ucywgZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uUmVtb3ZlT3B0aW9uXCIsIGZ1bmN0aW9uIChyZW1vdmVkT3B0aW9uLCBldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczUub25PcHRpb25DbGljayxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczUuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczUub3B0aW9ucztcbiAgICAgIHZhciB1cGRhdGVkT3B0aW9ucyA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuXG4gICAgICAgIGlmIChvcHRpb24gPT09IHJlbW92ZWRPcHRpb24gJiYgc2luZ2xlU2VsZWN0aW9uICE9PSAnYWx3YXlzJykge1xuICAgICAgICAgIGRlbGV0ZSB1cGRhdGVkT3B0aW9uLmNoZWNrZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZE9wdGlvbjtcbiAgICAgIH0pO1xuICAgICAgb25PcHRpb25DbGljayh1cGRhdGVkT3B0aW9ucywgZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uRXhjbHVkZU9wdGlvblwiLCBmdW5jdGlvbiAoZXhjbHVkZWRPcHRpb24sIGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzNi5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczYub3B0aW9ucztcbiAgICAgIGV4Y2x1ZGVkT3B0aW9uLmNoZWNrZWQgPSAnb2ZmJztcbiAgICAgIHZhciB1cGRhdGVkT3B0aW9ucyA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuXG4gICAgICAgIGlmIChvcHRpb24gPT09IGV4Y2x1ZGVkT3B0aW9uKSB7XG4gICAgICAgICAgdXBkYXRlZE9wdGlvbi5jaGVja2VkID0gJ29mZic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZE9wdGlvbjtcbiAgICAgIH0pO1xuICAgICAgb25PcHRpb25DbGljayh1cGRhdGVkT3B0aW9ucywgZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVNlbGVjdGFibGVMaXN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleDtcblxuICAgICAgaWYgKHRoaXMubGlzdEJveFJlZiAmJiB0aGlzLnByb3BzLnNlYXJjaGFibGUgIT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5saXN0Qm94UmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgXCJcIi5jb25jYXQodGhpcy5wcm9wcy5tYWtlT3B0aW9uSWQoYWN0aXZlT3B0aW9uSW5kZXgpKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxpc3RSZWYgJiYgdHlwZW9mIHRoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMubGlzdFJlZi5zY3JvbGxUb0l0ZW0odGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCwgJ2F1dG8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczcuY2xhc3NOYW1lLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczcub3B0aW9ucyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzNy5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHM3Lm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHM3LnJlbmRlck9wdGlvbixcbiAgICAgICAgICBmb3JjZWRIZWlnaHQgPSBfdGhpcyRwcm9wczcuaGVpZ2h0LFxuICAgICAgICAgIHdpbmRvd1Byb3BzID0gX3RoaXMkcHJvcHM3LndpbmRvd1Byb3BzLFxuICAgICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzNy5yb3dIZWlnaHQsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczcuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgbWFrZU9wdGlvbklkID0gX3RoaXMkcHJvcHM3Lm1ha2VPcHRpb25JZCxcbiAgICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wczcuc2hvd0ljb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzNy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnMgPSBfdGhpcyRwcm9wczcudmlzaWJsZU9wdGlvbnMsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHM3LmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBib3JkZXJlZCA9IF90aGlzJHByb3BzNy5ib3JkZXJlZCxcbiAgICAgICAgICBwYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzNy5wYWRkaW5nU2l6ZSxcbiAgICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHM3LnNlYXJjaGFibGUsXG4gICAgICAgICAgb25Gb2N1c0JhZGdlID0gX3RoaXMkcHJvcHM3Lm9uRm9jdXNCYWRnZSxcbiAgICAgICAgICBsaXN0SWQgPSBfdGhpcyRwcm9wczcubGlzdElkLFxuICAgICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHM3LnNldEFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzN1snYXJpYS1sYWJlbCddLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZGJ5ID0gX3RoaXMkcHJvcHM3WydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSBfdGhpcyRwcm9wczdbJ2FyaWEtZGVzY3JpYmVkYnknXSxcbiAgICAgICAgICByb2xlID0gX3RoaXMkcHJvcHM3LnJvbGUsXG4gICAgICAgICAgaXNWaXJ0dWFsaXplZCA9IF90aGlzJHByb3BzNy5pc1ZpcnR1YWxpemVkLFxuICAgICAgICAgIHRleHRXcmFwID0gX3RoaXMkcHJvcHM3LnRleHRXcmFwLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHM3LCBfZXhjbHVkZWQzKTtcblxuICAgICAgdmFyIG9wdGlvbkFycmF5ID0gdmlzaWJsZU9wdGlvbnMgfHwgb3B0aW9ucztcbiAgICAgIHZhciBoZWlnaHRJc0Z1bGwgPSBmb3JjZWRIZWlnaHQgPT09ICdmdWxsJztcbiAgICAgIHZhciBjYWxjdWxhdGVkSGVpZ2h0ID0gaGVpZ2h0SXNGdWxsID8gZmFsc2UgOiBmb3JjZWRIZWlnaHQ7IC8vIElmIGNhbGN1bGF0ZWRIZWlnaHQgaXMgc3RpbGwgdW5kZWZpbmVkLCB0aGVuIGNhbGN1bGF0ZSBpdFxuXG4gICAgICBpZiAoY2FsY3VsYXRlZEhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBtYXhWaXNpYmxlT3B0aW9ucyA9IDc7XG4gICAgICAgIHZhciBudW1WaXNpYmxlT3B0aW9ucyA9IG9wdGlvbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgdmFyIG51bVZpc2libGVNb3JlVGhhbk1heCA9IG9wdGlvbkFycmF5Lmxlbmd0aCA+IG1heFZpc2libGVPcHRpb25zO1xuXG4gICAgICAgIGlmIChudW1WaXNpYmxlTW9yZVRoYW5NYXgpIHtcbiAgICAgICAgICAvLyBTaG93IG9ubHkgaGFsZiBvZiB0aGUgbGFzdCBvbmUgdG8gaW5kaWNhdGUgdGhlcmUncyBtb3JlIHRvIHNjcm9sbCB0b1xuICAgICAgICAgIGNhbGN1bGF0ZWRIZWlnaHQgPSAobWF4VmlzaWJsZU9wdGlvbnMgLSAwLjUpICogcm93SGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGN1bGF0ZWRIZWlnaHQgPSBudW1WaXNpYmxlT3B0aW9ucyAqIHJvd0hlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0Jywge1xuICAgICAgICAnZXVpU2VsZWN0YWJsZUxpc3QtZnVsbEhlaWdodCc6IGhlaWdodElzRnVsbCxcbiAgICAgICAgJ2V1aVNlbGVjdGFibGVMaXN0LWJvcmRlcmVkJzogYm9yZGVyZWRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgfSwgcmVzdCksIGlzVmlydHVhbGl6ZWQgPyBfX19FbW90aW9uSlNYKEV1aUF1dG9TaXplciwge1xuICAgICAgICBkaXNhYmxlSGVpZ2h0OiAhaGVpZ2h0SXNGdWxsXG4gICAgICB9LCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgdmFyIHdpZHRoID0gX3JlZjMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQgPSBfcmVmMy5oZWlnaHQ7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZpeGVkU2l6ZUxpc3QsIF9leHRlbmRzKHtcbiAgICAgICAgICByZWY6IF90aGlzMi5zZXRMaXN0UmVmLFxuICAgICAgICAgIG91dGVyUmVmOiBfdGhpczIucmVtb3ZlU2Nyb2xsYWJsZVRhYlN0b3AsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0X19saXN0XCIsXG4gICAgICAgICAgXCJkYXRhLXNraXAtYXhlXCI6IFwic2Nyb2xsYWJsZS1yZWdpb24tZm9jdXNhYmxlXCIsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIGhlaWdodDogY2FsY3VsYXRlZEhlaWdodCB8fCBoZWlnaHQsXG4gICAgICAgICAgaXRlbUNvdW50OiBvcHRpb25BcnJheS5sZW5ndGgsXG4gICAgICAgICAgaXRlbURhdGE6IG9wdGlvbkFycmF5LFxuICAgICAgICAgIGl0ZW1TaXplOiByb3dIZWlnaHQsXG4gICAgICAgICAgaW5uZXJFbGVtZW50VHlwZTogXCJ1bFwiLFxuICAgICAgICAgIGlubmVyUmVmOiBfdGhpczIuc2V0TGlzdEJveFJlZlxuICAgICAgICB9LCB3aW5kb3dQcm9wcyksIF90aGlzMi5MaXN0Um93KTtcbiAgICAgIH0pIDogX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdF9fbGlzdFwiLFxuICAgICAgICByZWY6IHRoaXMucmVtb3ZlU2Nyb2xsYWJsZVRhYlN0b3BcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJ1bFwiLCB7XG4gICAgICAgIHJlZjogdGhpcy5zZXRMaXN0Qm94UmVmXG4gICAgICB9LCBvcHRpb25BcnJheS5tYXAoZnVuY3Rpb24gKF8sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChfdGhpczIuTGlzdFJvdywge1xuICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgZGF0YTogb3B0aW9uQXJyYXksXG4gICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH0sIG51bGwpO1xuICAgICAgfSkpKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVNlbGVjdGFibGVMaXN0O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpU2VsZWN0YWJsZUxpc3QsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgcm93SGVpZ2h0OiAzMixcbiAgc2VhcmNoVmFsdWU6ICcnLFxuICBpc1ZpcnR1YWxpemVkOiB0cnVlXG59KTtcblxuRXVpU2VsZWN0YWJsZUxpc3QucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBUaGUgaW5kZXggb2YgdGhlIG9wdGlvbiB0byBiZSBoaWdobGlnaHRlZCBhcyBwc2V1ZG8tZm9jdXNlZDtcbiAgICAgICAqIEdvb2QgZm9yIHVzZSB3aGVuIG9ubHkgb25lIHNlbGVjdGlvbiBpcyBhbGxvd2VkIGFuZCBuZWVkaW5nIHRvIG9wZW5cbiAgICAgICAqIGRpcmVjdGx5IHRvIHRoYXQgb3B0aW9uXG4gICAgICAgKi9cbiAgYWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICAgKiBTaG93IHRoZSBjaGVjay9jcm9zcyBzZWxlY3Rpb24gaW5kaWNhdG9yIGljb25zXG4gICAgICAgKi9cbiAgc2hvd0ljb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWx3YXlzXCJdKSwgUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQW55IHByb3BzIHRvIHNlbmQgc3BlY2lmaWNhbGx5IHRvIHRoZSByZWFjdC13aW5kb3cgYEZpeGVkU2l6ZUxpc3RgXG4gICAgICAgKi9cbiAgd2luZG93UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBBZGRzIGEgYm9yZGVyIGFyb3VuZCB0aGUgbGlzdCB0byBpbmRpY2F0ZSB0aGUgYm91bmRzO1xuICAgICAgICogVXNlZnVsIHdoZW4gdGhlIGxpc3Qgc2Nyb2xscywgb3RoZXJ3aXNlIHVzZSB5b3VyIG93biBjb250YWluZXJcbiAgICAgICAqL1xuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBXaGVuIGVuYWJsZWQgYnkgc2V0dGluZyB0byBlaXRoZXIgYHRydWVgIG9yIHBhc3NpbmcgY3VzdG9tIHRleHQsXG4gICAgICAgKiBzaG93cyBhIGhvbGxvdyBiYWRnZSBhcyBhbiBhcHBlbmQgKGZhciByaWdodCkgd2hlbiB0aGUgaXRlbSBpcyBmb2N1c2VkLlxuICAgICAgICogVGhlIGRlZmF1bHQgY29udGVudCB3aGVuIGB0cnVlYCBpcyBgXHUyMUE5IHRvIHNlbGVjdC9kZXNlbGVjdC9pbmNsdWRlL2V4Y2x1ZGVgXG4gICAgICAgKi9cbiAgb25Gb2N1c0JhZGdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBhbnkgc3RyaW5nIGZyb20gb3VyIGljb24gbGlicmFyeVxuICAgICAgICovXG4gICAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgc2lkZSBvZiB0aGUgYmFkZ2UgdGhlIGljb24gc2hvdWxkIHNpdFxuICAgICAgICovXG4gICAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGVpdGhlciBvdXIgcGFsZXR0ZSBjb2xvcnMgKHByaW1hcnksIHN1Y2Nlc3MgLi5ldGMpIG9yIGEgaGV4IHZhbHVlIGAjRkZGRkZGYCwgYCMwMDBgLlxuICAgICAgICovXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIFdpbGwgb3ZlcnJpZGUgYW55IGNvbG9yIHBhc3NlZCB0aHJvdWdoIHRoZSBgY29sb3JgIHByb3AuXG4gICAgICAgKi9cbiAgICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogUHJvcHMgcGFzc2VkIHRvIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICAgKi9cbiAgICBjbG9zZUJ1dHRvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byBpY29uIHdpdGhpbiB0aGUgYmFkZ2VcbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBpY29uT25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAgICovXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gICAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIFBhZGRpbmcgZm9yIHRoZSBsaXN0IGl0ZW1zLlxuICAgICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogSG93IHRvIGhhbmRsZSBsb25nIHRleHQgd2l0aGluIHRoZSBpdGVtLlxuICAgICAgICogV3JhcHBpbmcgb25seSB3b3JrcyBpZiB2aXJ0dWFsaXphdGlvbiBpcyBvZmYuXG4gICAgICAgKi9cbiAgdGV4dFdyYXA6IFByb3BUeXBlcy5vbmVPZihbXCJ0cnVuY2F0ZVwiLCBcIndyYXBcIl0pLFxuXG4gIC8qKlxuICAgICAgICogVXNlIHZpcnR1YWxpemVkIHJlbmRlcmluZyBmb3IgbGlzdCBpdGVtcyB3aXRoIGByZWFjdC13aW5kb3dgLlxuICAgICAgICogU2V0cyBlYWNoIHJvdydzIGhlaWdodCB0byB0aGUgdmFsdWUgb2YgYHJvd0hlaWdodGAuXG4gICAgICAgKi9cbiAgaXNWaXJ0dWFsaXplZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSksIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiAgVGhlIGhlaWdodCBvZiBlYWNoIG9wdGlvbiBpbiBwaXhlbHMuIERlZmF1bHRzIHRvIGAzMmAuXG4gICAgICAgKiAgSGFzIG5vIGVmZmVjdCBpZiBgaXNWaXJ0dWFsaXplZD1mYWxzZWAuXG4gICAgICAgKi9cbiAgcm93SGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIEFsbCBwb3NzaWJsZSBvcHRpb25zXG4gICAgICovXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBgYm9vbGVhbmAuXG4gICAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGluZGljYXRlIG9iamVjdCBpcyBqdXN0IGEgZ3JvdXBpbmcgbGFiZWwsIG5vdCBhIHNlbGVjdGFibGUgaXRlbVxuICAgICAgICovXG4gICAgaXNHcm91cExhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBWaXNpYmxlIGxhYmVsIG9mIG9wdGlvbi5cbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcyBpZiBga2V5YCBpcyBub3Qgc3VwcGxpZWRcbiAgICAgICAqL1xuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbGx5IGNoYW5nZSB0aGUgc2VhcmNoYWJsZSB0ZXJtIGJ5IHBhc3NpbmcgYSBkaWZmZXJlbnQgc3RyaW5nIG90aGVyIHRoYW4gdGhlIGBsYWJlbGAuXG4gICAgICAgKiBCZXN0IHVzZWQgd2hlbiBjcmVhdGluZyBhIGN1c3RvbSBgb3B0aW9uUmVuZGVyYCB0byBzZXBhcmF0ZSB0aGUgbGFiZWwgZnJvbSBtZXRhZGF0YSBidXQgYWxsb3dpbmcgdG8gc2VhcmNoIG9uIGJvdGhcbiAgICAgICAqL1xuICAgIHNlYXJjaGFibGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogTXVzdCBiZSB1bmlxdWUgYWNyb3NzIGl0ZW1zLlxuICAgICAgICogV2lsbCBiZSB1c2VkIHRvIG1hdGNoIG9wdGlvbnMgaW5zdGVhZCBvZiBgbGFiZWxgXG4gICAgICAgKi9cbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIExlYXZlIGB1bmRlZmluZWRgIHRvIGluZGljYXRlIG5vdCBzZWxlY3RlZCxcbiAgICAgICAqICdvbicgdG8gaW5kaWNhdGUgaW5jbHVzaW9uIGFuZFxuICAgICAgICogJ29mZicgdG8gaW5kaWNhdGUgZXhjbHVzaW9uXG4gICAgICAgKi9cbiAgICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIiwgdW5kZWZpbmVkXSksXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCBiZXR3ZWVuIHRoZSBzZWxlY3Rpb24gaWNvbiBhbmQgdGhlIGxhYmVsXG4gICAgICAgKi9cbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcblxuICAgIC8qKlxuICAgICAgICogTm9kZSB0byBhZGQgdG8gdGhlIGZhciByaWdodCBvZiB0aGUgaXRlbVxuICAgICAgICovXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICByZWY6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb24gZGF0YSB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGByZW5kZXJPcHRpb25zYCBlbGVtZW50LlxuICAgICAgICogQnlwYXNzIGBFdWlTZWxlY3RhYmxlSXRlbWAgYW5kIGF2b2lkIERPTSBhdHRyaWJ1dGUgd2FybmluZ3MuXG4gICAgICAgKi9cbiAgICBkYXRhOiBQcm9wVHlwZXMuc2hhcGUoe30pXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogRmlsdGVyZWQgb3B0aW9ucyBsaXN0IChpZiBhcHBsaWNhYmxlKVxuICAgICAqL1xuICB2aXNpYmxlT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VhcmNoYWJsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIiwgdW5kZWZpbmVkXSksXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgcmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBkYXRhOiBQcm9wVHlwZXMuc2hhcGUoe30pXG4gIH0pLmlzUmVxdWlyZWQpLFxuXG4gIC8qKlxuICAgICAqIFNlYXJjaCB2YWx1ZSB0byBoaWdobGlnaHQgb24gdGhlIG9wdGlvbiByZW5kZXJcbiAgICAgKi9cbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhcnJheSBvZiBvcHRpb25zIHdpdGggYWx0ZXJlZCBjaGVja2VkIHN0YXRlXG4gICAgICovXG4gIG9uT3B0aW9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogQ3VzdG9tIHJlbmRlciBmb3IgdGhlIGxhYmVsIHBvcnRpb24gb2YgdGhlIG9wdGlvbjtcbiAgICAgKiBUYWtlcyAob3B0aW9uLCBzZWFyY2hWYWx1ZSksIHJldHVybnMgUmVhY3ROb2RlXG4gICAgICovXG4gIHJlbmRlck9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF4IGhlaWdodCBpbiBwaXhlbHMgb3IgcGFzcyBgZnVsbGAgdG8gYWxsb3dcbiAgICAgKiB0aGUgd2hvbGUgZ3JvdXAgdG8gZmlsbCB0aGUgaGVpZ2h0IG9mIGl0cyBjb250YWluZXIgYW5kXG4gICAgICogYWxsb3dzIHRoZSBsaXN0IGdyb3cgYXMgd2VsbFxuICAgICAqL1xuICBoZWlnaHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImZ1bGxcIl0pXSksXG5cbiAgLyoqXG4gICAgICogQWxsb3cgY3ljbGluZyB0aHJvdWdoIHRoZSBvbiwgb2ZmIGFuZCB1bmRlZmluZWQgc3RhdGUgb2Ygb3B0aW9uLmNoZWNrZWRcbiAgICAgKiBhbmQgbm90IGp1c3Qgb24gYW5kIHVuZGVmaW5lZFxuICAgICAqL1xuICBhbGxvd0V4Y2x1c2lvbnM6IFByb3BUeXBlcy5ib29sLFxuICBzZWFyY2hhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgbWFrZU9wdGlvbklkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBsaXN0SWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2V0QWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJjaGVja2VkXCIsIFwiaXNGb2N1c2VkXCIsIFwic2hvd0ljb25zXCIsIFwicHJlcGVuZFwiLCBcImFwcGVuZFwiLCBcImFsbG93RXhjbHVzaW9uc1wiLCBcIm9uRm9jdXNCYWRnZVwiLCBcInBhZGRpbmdTaXplXCIsIFwicm9sZVwiLCBcInNlYXJjaGFibGVcIiwgXCJ0ZXh0V3JhcFwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi8uLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUJhZGdlIH0gZnJvbSAnLi4vLi4vYmFkZ2UnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxuZnVuY3Rpb24gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSB7XG4gIGlmICghY2hlY2tlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpY29uOiAnZW1wdHknXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBjaGVja2VkID09PSAnb24nID8ge1xuICAgIGljb246ICdjaGVjaycsXG4gICAgY29sb3I6ICd0ZXh0J1xuICB9IDoge1xuICAgIGljb246ICdjcm9zcycsXG4gICAgY29sb3I6ICd0ZXh0J1xuICB9O1xufVxuXG52YXIgcGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbm9uZTogbnVsbCxcbiAgczogJ2V1aVNlbGVjdGFibGVMaXN0SXRlbS0tcGFkZGluZ1NtYWxsJ1xufTtcbmV4cG9ydCB2YXIgUEFERElOR19TSVpFUyA9IGtleXNPZihwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcmVmZXItc3RhdGVsZXNzLWZ1bmN0aW9uXG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGVMaXN0SXRlbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpU2VsZWN0YWJsZUxpc3RJdGVtLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVNlbGVjdGFibGVMaXN0SXRlbSk7XG5cbiAgZnVuY3Rpb24gRXVpU2VsZWN0YWJsZUxpc3RJdGVtKHByb3BzKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVNlbGVjdGFibGVMaXN0SXRlbSk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVNlbGVjdGFibGVMaXN0SXRlbSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgICBjaGVja2VkID0gX3RoaXMkcHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICBpc0ZvY3VzZWQgPSBfdGhpcyRwcm9wcy5pc0ZvY3VzZWQsXG4gICAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHMuc2hvd0ljb25zLFxuICAgICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wcy5wcmVwZW5kLFxuICAgICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzLmFwcGVuZCxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wcy5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgb25Gb2N1c0JhZGdlID0gX3RoaXMkcHJvcHMub25Gb2N1c0JhZGdlLFxuICAgICAgICAgIF90aGlzJHByb3BzJHBhZGRpbmdTaSA9IF90aGlzJHByb3BzLnBhZGRpbmdTaXplLFxuICAgICAgICAgIHBhZGRpbmdTaXplID0gX3RoaXMkcHJvcHMkcGFkZGluZ1NpID09PSB2b2lkIDAgPyAncycgOiBfdGhpcyRwcm9wcyRwYWRkaW5nU2ksXG4gICAgICAgICAgX3RoaXMkcHJvcHMkcm9sZSA9IF90aGlzJHByb3BzLnJvbGUsXG4gICAgICAgICAgcm9sZSA9IF90aGlzJHByb3BzJHJvbGUgPT09IHZvaWQgMCA/ICdvcHRpb24nIDogX3RoaXMkcHJvcHMkcm9sZSxcbiAgICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMuc2VhcmNoYWJsZSxcbiAgICAgICAgICB0ZXh0V3JhcCA9IF90aGlzJHByb3BzLnRleHRXcmFwLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZUxpc3RJdGVtJywge1xuICAgICAgICAnZXVpU2VsZWN0YWJsZUxpc3RJdGVtLWlzRm9jdXNlZCc6IGlzRm9jdXNlZFxuICAgICAgfSwgcGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcFtwYWRkaW5nU2l6ZV0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgdGV4dENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHQnLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0LS1cIi5jb25jYXQodGV4dFdyYXApLCB0ZXh0V3JhcCkpO1xuICAgICAgdmFyIG9wdGlvbkljb247XG5cbiAgICAgIGlmIChzaG93SWNvbnMpIHtcbiAgICAgICAgdmFyIF9yZXNvbHZlSWNvbkFuZENvbG9yID0gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSxcbiAgICAgICAgICAgIGljb24gPSBfcmVzb2x2ZUljb25BbmRDb2xvci5pY29uLFxuICAgICAgICAgICAgY29sb3IgPSBfcmVzb2x2ZUljb25BbmRDb2xvci5jb2xvcjtcblxuICAgICAgICBvcHRpb25JY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9faWNvblwiLFxuICAgICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgICB0eXBlOiBpY29uXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhdGU7XG4gICAgICB2YXIgaW5zdHJ1Y3Rpb247XG5cbiAgICAgIGlmIChhbGxvd0V4Y2x1c2lvbnMgJiYgY2hlY2tlZCA9PT0gJ29uJykge1xuICAgICAgICBzdGF0ZSA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5pbmNsdWRlZE9wdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0ZWQgb3B0aW9uLlwiXG4gICAgICAgIH0pO1xuICAgICAgICBpbnN0cnVjdGlvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5pbmNsdWRlZE9wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gZXhjbHVkZSB0aGlzIG9wdGlvbiwgcHJlc3MgZW50ZXIuXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGFsbG93RXhjbHVzaW9ucyAmJiBjaGVja2VkID09PSAnb2ZmJykge1xuICAgICAgICBzdGF0ZSA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5leGNsdWRlZE9wdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiRXhjbHVkZWQgb3B0aW9uLlwiXG4gICAgICAgIH0pO1xuICAgICAgICBpbnN0cnVjdGlvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5leGNsdWRlZE9wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gdW5jaGVjayB0aGlzIG9wdGlvbiwgcHJlc3MgZW50ZXIuXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGFsbG93RXhjbHVzaW9ucyAmJiAhY2hlY2tlZCkge1xuICAgICAgICBpbnN0cnVjdGlvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS51bmNrZWNrZWRPcHRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIHNlbGVjdCB0aGlzIG9wdGlvbiwgcHJlc3MgZW50ZXIuXCJcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0NoZWNrZWQgPSAhZGlzYWJsZWQgJiYgdHlwZW9mIGNoZWNrZWQgPT09ICdzdHJpbmcnO1xuXG4gICAgICBpZiAoIWFsbG93RXhjbHVzaW9ucyAmJiBpc0NoZWNrZWQpIHtcbiAgICAgICAgc3RhdGUgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uY2hlY2tlZE9wdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiQ2hlY2tlZCBvcHRpb24uXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGluc3RydWN0aW9uID0gc2VhcmNoYWJsZSA/IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5jaGVja2VkT3B0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyB1bmNoZWNrIHRoaXMgb3B0aW9uLCBwcmVzcyBlbnRlci5cIlxuICAgICAgICB9KSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgdmFyIHByZXBlbmROb2RlO1xuXG4gICAgICBpZiAocHJlcGVuZCkge1xuICAgICAgICBwcmVwZW5kTm9kZSA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19wcmVwZW5kXCJcbiAgICAgICAgfSwgcHJlcGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcHBlbmROb2RlO1xuXG4gICAgICBpZiAoYXBwZW5kIHx8ICEhb25Gb2N1c0JhZGdlKSB7XG4gICAgICAgIHZhciBvbkZvY3VzQmFkZ2VOb2RlO1xuICAgICAgICB2YXIgZGVmYXVsdE9uRm9jdXNCYWRnZVByb3BzID0ge1xuICAgICAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICAgICAgaWNvblR5cGU6ICdyZXR1cm5LZXknLFxuICAgICAgICAgIGljb25TaWRlOiAnbGVmdCcsXG4gICAgICAgICAgY29sb3I6ICdob2xsb3cnXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG9uRm9jdXNCYWRnZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG9uRm9jdXNCYWRnZU5vZGUgPSBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19vbkZvY3VzQmFkZ2VcIlxuICAgICAgICAgIH0sIGRlZmF1bHRPbkZvY3VzQmFkZ2VQcm9wcykpO1xuICAgICAgICB9IGVsc2UgaWYgKCEhb25Gb2N1c0JhZGdlICYmIG9uRm9jdXNCYWRnZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICB2YXIgX2NoaWxkcmVuID0gb25Gb2N1c0JhZGdlLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBfY2xhc3NOYW1lID0gb25Gb2N1c0JhZGdlLmNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgcmVzdEJhZGdlUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob25Gb2N1c0JhZGdlLCBfZXhjbHVkZWQyKTtcblxuICAgICAgICAgIG9uRm9jdXNCYWRnZU5vZGUgPSBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0SXRlbV9fb25Gb2N1c0JhZGdlJywgX2NsYXNzTmFtZSlcbiAgICAgICAgICB9LCBkZWZhdWx0T25Gb2N1c0JhZGdlUHJvcHMsIHJlc3RCYWRnZVByb3BzKSwgX2NoaWxkcmVuKTtcbiAgICAgICAgfSAvLyBPbmx5IGRpc3BsYXkgdGhlIGFwcGVuZCB3cmFwcGVyIGlmIGFwcGVuZCBleGlzdHMgb3IgaXNGb2N1c2VkXG5cblxuICAgICAgICBpZiAoYXBwZW5kIHx8IGlzRm9jdXNlZCAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgICBhcHBlbmROb2RlID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fYXBwZW5kXCJcbiAgICAgICAgICB9LCBhcHBlbmQsIFwiIFwiLCBpc0ZvY3VzZWQgJiYgIWRpc2FibGVkID8gb25Gb2N1c0JhZGdlTm9kZSA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnN0cnVjdGlvbnMgPSAoaW5zdHJ1Y3Rpb24gfHwgc3RhdGUpICYmIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCBudWxsLCBzdGF0ZSB8fCBpbnN0cnVjdGlvbiA/ICcgLSAnIDogbnVsbCwgc3RhdGUsIHN0YXRlICYmIGluc3RydWN0aW9uID8gJyAnIDogbnVsbCwgaW5zdHJ1Y3Rpb24pKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJvbGU6IHJvbGUsXG4gICAgICAgIFwiZGF0YS10ZXN0LXNlbGVjdGVkXCI6IGlzQ2hlY2tlZCAvLyBXaGV0aGVyIHRoZSBpdGVtIGlzIGNoZWNrZWQvc2VsZWN0ZWRcbiAgICAgICAgLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiByb2xlID09PSAnb3B0aW9uJyA/IGlzQ2hlY2tlZCA6IHVuZGVmaW5lZCAvLyBXaGV0aGVyIHRoZSBpdGVtIGlzIFwiY2hlY2tlZFwiXG4gICAgICAgICxcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6ICFkaXNhYmxlZCAmJiBpc0ZvY3VzZWQgLy8gV2hldGhlciB0aGUgaXRlbSBoYXMga2V5Ym9hcmQgZm9jdXMgcGVyIFczIHNwZWNcbiAgICAgICAgLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fY29udGVudFwiXG4gICAgICB9LCBvcHRpb25JY29uLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IHRleHRDbGFzc2VzXG4gICAgICB9LCBjaGlsZHJlbiwgaW5zdHJ1Y3Rpb25zKSwgYXBwZW5kTm9kZSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlTZWxlY3RhYmxlTGlzdEl0ZW07XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlTZWxlY3RhYmxlTGlzdEl0ZW0sIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgc2hvd0ljb25zOiB0cnVlLFxuICBvbkZvY3VzQmFkZ2U6IHRydWUsXG4gIHRleHRXcmFwOiAndHJ1bmNhdGUnXG59KTtcblxuRXVpU2VsZWN0YWJsZUxpc3RJdGVtLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBBcHBsaWVzIGFuIGljb24gYW5kIHZpc3VhbCBzdHlsaW5nIHRvIGFjdGl2YXRlZCBpdGVtc1xuICAgICAgICovXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5vbmVPZihbXCJvblwiLCBcIm9mZlwiLCB1bmRlZmluZWRdKSxcblxuICAvKipcbiAgICAgICAqIFNob3dzIGljb25zIGJhc2VkIG9uIGBjaGVja2VkYCB0eXBlXG4gICAgICAgKi9cbiAgc2hvd0ljb25zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIEhpZ2hsaWdodHMgdGhlIGl0ZW0gZm9yIHBzZXVkbyBmb2N1c1xuICAgICAgICovXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gIGFsbG93RXhjbHVzaW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBXaGVuIGVuYWJsZWQgYnkgc2V0dGluZyB0byBlaXRoZXIgYHRydWVgIG9yIHBhc3NpbmcgY3VzdG9tIGEgY3VzdG9tIGJhZGdlLFxuICAgICAgICogc2hvd3MgYSBob2xsb3cgYmFkZ2UgYXMgYW4gYXBwZW5kIChmYXIgcmlnaHQpIHdoZW4gdGhlIGl0ZW0gaXMgZm9jdXNlZC5cbiAgICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgd2hlbiBgdHJ1ZWAgaXMgYFx1MjFBOSB0byBzZWxlY3QvZGVzZWxlY3QvaW5jbHVkZS9leGNsdWRlYFxuICAgICAgICovXG4gIG9uRm9jdXNCYWRnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IHN0cmluZyBmcm9tIG91ciBpY29uIGxpYnJhcnlcbiAgICAgICAqL1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAgIC8qKlxuICAgICAgICogVGhlIHNpZGUgb2YgdGhlIGJhZGdlIHRoZSBpY29uIHNob3VsZCBzaXRcbiAgICAgICAqL1xuICAgIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIG92ZXJyaWRlIGFueSBjb2xvciBwYXNzZWQgdGhyb3VnaCB0aGUgYGNvbG9yYCBwcm9wLlxuICAgICAgICovXG4gICAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIFByb3BzIHBhc3NlZCB0byB0aGUgY2xvc2UgYnV0dG9uLlxuICAgICAgICovXG4gICAgY2xvc2VCdXR0b25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gaWNvbiB3aXRoaW4gdGhlIGJhZGdlXG4gICAgICAgKi9cbiAgICBpY29uT25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgaWNvbk9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBpY29uT25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcblxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgICAqL1xuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlbDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBQYWRkaW5nIGZvciB0aGUgbGlzdCBpdGVtcy5cbiAgICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIFdoZXRoZXIgdGhlIGBFdWlTZWxlY3RhYmxlYCBpbnN0YW5jZSBpcyBzZWFyY2hhYmxlLlxuICAgICAgICogV2hlbiB0cnVlLCB0aGUgU3BhY2Uga2V5IHdpbGwgbm90IHRvZ2dsZSBzZWxlY3Rpb24sIGFzIGl0IHdpbGwgdHlwZSBpbnRvIHRoZSBzZWFyY2ggYm94IGluc3RlYWQuIFNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUgYWRkZWQgaW5zdHJ1Y3RpbmcgdXNlcnMgdG8gdXNlIHRoZSBFbnRlciBrZXkgdG8gc2VsZWN0IGl0ZW1zLlxuICAgICAgICogV2hlbiBmYWxzZSwgdGhlIFNwYWNlIGtleSB3aWxsIHRvZ2dsZSBpdGVtIHNlbGVjdGlvbi4gTm8gZXh0cmEgc2NyZWVuIHJlYWRlciBpbnN0cnVjdGlvbnMgd2lsbCBiZSBhZGRlZCwgYXMgU3BhY2UgdG8gdG9nZ2xlIGlzIGEgZ2VuZXJhbGx5IHN0YW5kYXJkIGZvciBtb3N0IHNlbGVjdC9jaGVja2VkIGVsZW1lbnRzLlxuICAgICAgICovXG4gIHNlYXJjaGFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogQXR0cmlidXRlIGFwcGxpZWQgdGhlIG9wdGlvbiBgPGxpPmAuXG4gICAgICAgKiBJZiBjb25maWd1cmVkIHRvIHNvbWV0aGluZyBiZXNpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBvcHRpb25gLFxuICAgICAgICogb3RoZXIgQVJJQSBhdHRyaWJ1dGVzIHN1Y2ggYXMgYGFyaWEtY2hlY2tlZGAgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBjb25maWd1cmVkLlxuICAgICAgICovXG4gIHJvbGU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBIb3cgdG8gaGFuZGxlIGxvbmcgdGV4dCB3aXRoaW4gdGhlIGl0ZW0uXG4gICAgICAgKiBXcmFwcGluZyBvbmx5IHdvcmtzIGlmIHZpcnR1YWxpemF0aW9uIGlzIG9mZi5cbiAgICAgICAqL1xuICB0ZXh0V3JhcDogUHJvcFR5cGVzLm9uZU9mKFtcInRydW5jYXRlXCIsIFwid3JhcFwiXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXByZXNzZWRcIiwgXCJ0YWJsZUxheW91dFwiLCBcInJlc3BvbnNpdmVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHRhYmxlTGF5b3V0VG9DbGFzc01hcCA9IHtcbiAgZml4ZWQ6IG51bGwsXG4gIGF1dG86ICdldWlUYWJsZS0tYXV0bydcbn07XG5leHBvcnQgdmFyIEV1aVRhYmxlID0gZnVuY3Rpb24gRXVpVGFibGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBjb21wcmVzc2VkID0gX3JlZi5jb21wcmVzc2VkLFxuICAgICAgX3JlZiR0YWJsZUxheW91dCA9IF9yZWYudGFibGVMYXlvdXQsXG4gICAgICB0YWJsZUxheW91dCA9IF9yZWYkdGFibGVMYXlvdXQgPT09IHZvaWQgMCA/ICdmaXhlZCcgOiBfcmVmJHRhYmxlTGF5b3V0LFxuICAgICAgX3JlZiRyZXNwb25zaXZlID0gX3JlZi5yZXNwb25zaXZlLFxuICAgICAgcmVzcG9uc2l2ZSA9IF9yZWYkcmVzcG9uc2l2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkcmVzcG9uc2l2ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlLS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAnZXVpVGFibGUtLXJlc3BvbnNpdmUnOiByZXNwb25zaXZlXG4gIH0sIHRhYmxlTGF5b3V0VG9DbGFzc01hcFt0YWJsZUxheW91dF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRhYmxlXCIsIF9leHRlbmRzKHtcbiAgICB0YWJJbmRleDogLTEsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpVGFibGUucHJvcFR5cGVzID0ge1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgcmVzcG9uc2l2ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eVxuICAgICAqL1xuICB0YWJsZUxheW91dDogUHJvcFR5cGVzLm9uZU9mKFtcImZpeGVkXCIsIFwiYXV0b1wiXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYm9keVJlZlwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUJvZHkgPSBmdW5jdGlvbiBFdWlUYWJsZUJvZHkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBib2R5UmVmID0gX3JlZi5ib2R5UmVmLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGJvZHlcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIHJlZjogYm9keVJlZlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlQm9keS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYm9keVJlZjogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlRm9vdGVyID0gZnVuY3Rpb24gRXVpVGFibGVGb290ZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0Zm9vdFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBudWxsLCBjaGlsZHJlbikpO1xufTtcbkV1aVRhYmxlRm9vdGVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJhbGlnblwiLCBcImNsYXNzTmFtZVwiLCBcIndpZHRoXCIsIFwic3R5bGVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBMRUZUX0FMSUdOTUVOVCwgUklHSFRfQUxJR05NRU5ULCBDRU5URVJfQUxJR05NRU5UIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVGb290ZXJDZWxsID0gZnVuY3Rpb24gRXVpVGFibGVGb290ZXJDZWxsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgICAgYWxpZ24gPSBfcmVmJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYkYWxpZ24sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlRm9vdGVyQ2VsbCcsIGNsYXNzTmFtZSk7XG4gIHZhciBjb250ZW50Q2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlQ2VsbENvbnRlbnQnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25SaWdodCc6IGFsaWduID09PSBSSUdIVF9BTElHTk1FTlQsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduQ2VudGVyJzogYWxpZ24gPT09IENFTlRFUl9BTElHTk1FTlRcbiAgfSk7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0ZFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHN0eWxlOiBzdHlsZU9ialxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3Nlc1xuICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlQ2VsbENvbnRlbnRfX3RleHRcIlxuICB9LCBjaGlsZHJlbikpKTtcbn07XG5FdWlUYWJsZUZvb3RlckNlbGwucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCIsIFwiY2VudGVyXCJdKSxcbiAgd2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ3aWR0aFwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBXQVJOSU5HX01FU1NBR0UgPSAnVHdvIGB3aWR0aGAgcHJvcGVydGllcyB3ZXJlIHByb3ZpZGVkLiBQcm92aWRlIG9ubHkgb25lIG9mIGBzdHlsZS53aWR0aGAgb3IgYHdpZHRoYCB0byBhdm9pZCBjb25mbGljdHMuJztcbmV4cG9ydCB2YXIgcmVzb2x2ZVdpZHRoQXNTdHlsZSA9IGZ1bmN0aW9uIHJlc29sdmVXaWR0aEFzU3R5bGUoKSB7XG4gIHZhciBzdHlsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciB3aWR0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuXG4gIHZhciBzdHlsZVdpZHRoID0gc3R5bGUud2lkdGgsXG4gICAgICBzdHlsZVJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc3R5bGUsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGF0dHJXaWR0aCA9IHdpZHRoO1xuXG4gIGlmIChhdHRyV2lkdGggIT0gbnVsbCAmJiAodHlwZW9mIGF0dHJXaWR0aCA9PT0gJ251bWJlcicgfHwgIWlzTmFOKE51bWJlcihhdHRyV2lkdGgpKSkgLy8gdHJhbnNmb3JtIHtudW1iZXJ9IG9yIHVuaXRsZXNzICdudW1iZXInIHRvIHB4IHN0cmluZ1xuICApIHtcbiAgICBhdHRyV2lkdGggPSBcIlwiLmNvbmNhdChhdHRyV2lkdGgsIFwicHhcIik7XG4gIH1cblxuICBpZiAoc3R5bGVXaWR0aCAmJiBhdHRyV2lkdGgpIHtcbiAgICBjb25zb2xlLndhcm4oV0FSTklOR19NRVNTQUdFKTtcbiAgfVxuXG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlUmVzdCksIHt9LCB7XG4gICAgd2lkdGg6IGF0dHJXaWR0aCB8fCBzdHlsZVdpZHRoXG4gIH0pO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwid3JhcFdpdGhUYWJsZVJvd1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUhlYWRlciA9IGZ1bmN0aW9uIEV1aVRhYmxlSGVhZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiR3cmFwV2l0aFRhYmxlUm93ID0gX3JlZi53cmFwV2l0aFRhYmxlUm93LFxuICAgICAgd3JhcFdpdGhUYWJsZVJvdyA9IF9yZWYkd3JhcFdpdGhUYWJsZVJvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkd3JhcFdpdGhUYWJsZVJvdyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRoZWFkXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCByZXN0KSwgd3JhcFdpdGhUYWJsZVJvdyA/IF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBudWxsLCBjaGlsZHJlbikgOiBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVIZWFkZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBDaGlsZHJlbiBtdXN0IGJlIHZhbGlkIERPTSBzdHJ1Y3R1cmUgcmVzaWRpbmcgd2l0aGluIGA8dGhlYWQ+YC5cbiAgICAgICAqIFVzZSBgPHRkPiB8IDx0aD5gIGJ5IGRlZmF1bHQsIG9yIGA8dHI+PHRoLz48L3RyPmAgd2hlbiBgd3JhcFdpdGhUYWJsZVJvdz1mYWxzZWBcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBBdXRvbWF0aWNhbGx5IGFkZHMgYSB3cmFwcGluZyBgPHRyPmAgZWxlbWVudCBhcm91bmQgdGhlIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgd3JhcFdpdGhUYWJsZVJvdzogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImFsaWduXCIsIFwib25Tb3J0XCIsIFwiaXNTb3J0ZWRcIiwgXCJpc1NvcnRBc2NlbmRpbmdcIiwgXCJjbGFzc05hbWVcIiwgXCJzY29wZVwiLCBcIm1vYmlsZU9wdGlvbnNcIiwgXCJ3aWR0aFwiLCBcInN0eWxlXCIsIFwicmVhZE9ubHlcIiwgXCJkZXNjcmlwdGlvblwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IHJlc29sdmVXaWR0aEFzU3R5bGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEV1aUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgTEVGVF9BTElHTk1FTlQsIFJJR0hUX0FMSUdOTUVOVCwgQ0VOVEVSX0FMSUdOTUVOVCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBDZWxsQ29udGVudHMgPSBmdW5jdGlvbiBDZWxsQ29udGVudHMoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBkZXNjcmlwdGlvbiA9IF9yZWYuZGVzY3JpcHRpb24sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBpc1NvcnRlZCA9IF9yZWYuaXNTb3J0ZWQsXG4gICAgICBpc1NvcnRBc2NlbmRpbmcgPSBfcmVmLmlzU29ydEFzY2VuZGluZyxcbiAgICAgIHNob3dTb3J0TXNnID0gX3JlZi5zaG93U29ydE1zZztcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpVGFibGVIZWFkZXJDZWxsLnRpdGxlVGV4dFdpdGhEZXNjXCIsXG4gICAgICBkZWZhdWx0OiBcIntpbm5lclRleHR9OyB7ZGVzY3JpcHRpb259XCIsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgaW5uZXJUZXh0OiBpbm5lclRleHQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uICh0aXRsZVRleHRXaXRoRGVzYykge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgdGl0bGU6IGRlc2NyaXB0aW9uID8gdGl0bGVUZXh0V2l0aERlc2MgOiBpbm5lclRleHQsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDZWxsQ29udGVudF9fdGV4dFwiXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfSk7XG4gIH0pLCBkZXNjcmlwdGlvbiAmJiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIGRlc2NyaXB0aW9uKSksIHNob3dTb3J0TXNnICYmIGlzU29ydGVkICYmIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZVNvcnRJY29uXCIsXG4gICAgdHlwZTogaXNTb3J0QXNjZW5kaW5nID8gJ3NvcnRVcCcgOiAnc29ydERvd24nLFxuICAgIHNpemU6IFwibVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJDZWxsID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXJDZWxsKF9yZWYyKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgX3JlZjIkYWxpZ24gPSBfcmVmMi5hbGlnbixcbiAgICAgIGFsaWduID0gX3JlZjIkYWxpZ24gPT09IHZvaWQgMCA/IExFRlRfQUxJR05NRU5UIDogX3JlZjIkYWxpZ24sXG4gICAgICBvblNvcnQgPSBfcmVmMi5vblNvcnQsXG4gICAgICBpc1NvcnRlZCA9IF9yZWYyLmlzU29ydGVkLFxuICAgICAgaXNTb3J0QXNjZW5kaW5nID0gX3JlZjIuaXNTb3J0QXNjZW5kaW5nLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgc2NvcGUgPSBfcmVmMi5zY29wZSxcbiAgICAgIF9yZWYyJG1vYmlsZU9wdGlvbnMgPSBfcmVmMi5tb2JpbGVPcHRpb25zLFxuICAgICAgbW9iaWxlT3B0aW9ucyA9IF9yZWYyJG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHtcbiAgICBzaG93OiB0cnVlXG4gIH0gOiBfcmVmMiRtb2JpbGVPcHRpb25zLFxuICAgICAgd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICAgIHN0eWxlID0gX3JlZjIuc3R5bGUsXG4gICAgICByZWFkT25seSA9IF9yZWYyLnJlYWRPbmx5LFxuICAgICAgZGVzY3JpcHRpb24gPSBfcmVmMi5kZXNjcmlwdGlvbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlckNlbGwnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVIZWFkZXJDZWxsLS1oaWRlRm9yRGVza3RvcCc6IG1vYmlsZU9wdGlvbnMub25seSxcbiAgICAnZXVpVGFibGVIZWFkZXJDZWxsLS1oaWRlRm9yTW9iaWxlJzogIW1vYmlsZU9wdGlvbnMuc2hvd1xuICB9KTtcbiAgdmFyIGNvbnRlbnRDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVDZWxsQ29udGVudCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnblJpZ2h0JzogYWxpZ24gPT09IFJJR0hUX0FMSUdOTUVOVCxcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25DZW50ZXInOiBhbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVFxuICB9KTtcbiAgdmFyIHN0eWxlT2JqID0gcmVzb2x2ZVdpZHRoQXNTdHlsZShzdHlsZSwgd2lkdGgpO1xuICB2YXIgQ2VsbENvbXBvbmVudCA9IGNoaWxkcmVuID8gJ3RoJyA6ICd0ZCc7XG4gIHZhciBjZWxsU2NvcGUgPSBDZWxsQ29tcG9uZW50ID09PSAndGgnID8gc2NvcGUgIT09IG51bGwgJiYgc2NvcGUgIT09IHZvaWQgMCA/IHNjb3BlIDogJ2NvbCcgOiB1bmRlZmluZWQ7IC8vIGBzY29wZWAgaXMgb25seSB2YWxpZCBvbiBgdGhgIGVsZW1lbnRzXG5cbiAgaWYgKG9uU29ydCB8fCBpc1NvcnRlZCkge1xuICAgIHZhciBidXR0b25DbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVIZWFkZXJCdXR0b24nLCB7XG4gICAgICAnZXVpVGFibGVIZWFkZXJCdXR0b24taXNTb3J0ZWQnOiBpc1NvcnRlZFxuICAgIH0pO1xuICAgIHZhciBhcmlhU29ydFZhbHVlID0gJ25vbmUnO1xuXG4gICAgaWYgKGlzU29ydGVkKSB7XG4gICAgICBhcmlhU29ydFZhbHVlID0gaXNTb3J0QXNjZW5kaW5nID8gJ2FzY2VuZGluZycgOiAnZGVzY2VuZGluZyc7XG4gICAgfVxuXG4gICAgdmFyIGNlbGxDb250ZW50cyA9IF9fX0Vtb3Rpb25KU1goQ2VsbENvbnRlbnRzLCB7XG4gICAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc2VzLFxuICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgc2hvd1NvcnRNc2c6IHRydWUsXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICBpc1NvcnRlZDogaXNTb3J0ZWQsXG4gICAgICBpc1NvcnRBc2NlbmRpbmc6IGlzU29ydEFzY2VuZGluZ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ2VsbENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgc2NvcGU6IGNlbGxTY29wZSxcbiAgICAgIHJvbGU6IFwiY29sdW1uaGVhZGVyXCIsXG4gICAgICBcImFyaWEtc29ydFwiOiBhcmlhU29ydFZhbHVlLFxuICAgICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIixcbiAgICAgIHN0eWxlOiBzdHlsZU9ialxuICAgIH0sIHJlc3QpLCBvblNvcnQgJiYgIXJlYWRPbmx5ID8gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgY2xhc3NOYW1lOiBidXR0b25DbGFzc2VzLFxuICAgICAgb25DbGljazogb25Tb3J0LFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyU29ydEJ1dHRvblwiXG4gICAgfSwgY2VsbENvbnRlbnRzKSA6IGNlbGxDb250ZW50cyk7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChDZWxsQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNjb3BlOiBjZWxsU2NvcGUsXG4gICAgcm9sZTogXCJjb2x1bW5oZWFkZXJcIixcbiAgICBzdHlsZTogc3R5bGVPYmpcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goQ2VsbENvbnRlbnRzLCB7XG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NlcyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgc2hvd1NvcnRNc2c6IGZhbHNlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBpc1NvcnRlZDogaXNTb3J0ZWQsXG4gICAgaXNTb3J0QXNjZW5kaW5nOiBpc1NvcnRBc2NlbmRpbmdcbiAgfSkpO1xufTtcbkV1aVRhYmxlSGVhZGVyQ2VsbC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuICBpc1NvcnRBc2NlbmRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc1NvcnRlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBNb2JpbGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyBkaWZmZXJlbnRseSBhdCBzbWFsbCBzY3JlZW5zXG4gICAgICAgKi9cbiAgbW9iaWxlT3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAgICAgKiBJZiBmYWxzZSwgd2lsbCBub3QgcmVuZGVyIHRoZSBjb2x1bW4gYXQgYWxsIGZvciBtb2JpbGVcbiAgICAgICAgICAgKi9cbiAgICBzaG93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICAgICAqIE9ubHkgc2hvdyBmb3IgbW9iaWxlPyBJZiB0cnVlLCB3aWxsIG5vdCByZW5kZXIgdGhlIGNvbHVtbiBhdCBhbGxcbiAgICAgICAgICAgKiBmb3IgZGVza3RvcFxuICAgICAgICAgICAqL1xuICAgIG9ubHk6IFByb3BUeXBlcy5ib29sXG4gIH0pLFxuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBzY29wZTogUHJvcFR5cGVzLm9uZU9mKFtcImNvbFwiLCBcInJvd1wiLCBcImNvbGdyb3VwXCIsIFwicm93Z3JvdXBcIl0pLFxuICB3aWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSxcbiAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBTaG93cyB0aGUgc29ydCBpbmRpY2F0b3IgYnV0IHJlbW92ZXMgdGhlIGJ1dHRvblxuICAgICAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic2NvcGVcIiwgXCJzdHlsZVwiLCBcIndpZHRoXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3ggPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgc2NvcGUgPSBfcmVmJHNjb3BlID09PSB2b2lkIDAgPyAnY29sJyA6IF9yZWYkc2NvcGUsXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCcsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0aFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNjb3BlOiBzY29wZSxcbiAgICBzdHlsZTogc3R5bGVPYmpcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNlbGxDb250ZW50XCJcbiAgfSwgY2hpbGRyZW4pKTtcbn07XG5FdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgd2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSksXG4gIHNjb3BlOiBQcm9wVHlwZXMub25lT2YoW1wiY29sXCIsIFwicm93XCIsIFwiY29sZ3JvdXBcIiwgXCJyb3dncm91cFwiXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlSGVhZGVyTW9iaWxlID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXJNb2JpbGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlck1vYmlsZScsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZUhlYWRlck1vYmlsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiYW5jaG9yUG9zaXRpb25cIiwgXCJpdGVtc1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uLy4uL2J1dHRvbi9idXR0b25fZW1wdHknO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4uLy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpQ29udGV4dE1lbnVQYW5lbCB9IGZyb20gJy4uLy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlUYWJsZVNvcnRNb2JpbGVJdGVtIH0gZnJvbSAnLi90YWJsZV9zb3J0X21vYmlsZV9pdGVtJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlU29ydE1vYmlsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVGFibGVTb3J0TW9iaWxlLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVRhYmxlU29ydE1vYmlsZSk7XG5cbiAgZnVuY3Rpb24gRXVpVGFibGVTb3J0TW9iaWxlKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUYWJsZVNvcnRNb2JpbGUpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBpc1BvcG92ZXJPcGVuOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQnV0dG9uQ2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc1BvcG92ZXJPcGVuOiAhX3RoaXMuc3RhdGUuaXNQb3BvdmVyT3BlblxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNQb3BvdmVyT3BlbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVRhYmxlU29ydE1vYmlsZSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGFuY2hvclBvc2l0aW9uID0gX3RoaXMkcHJvcHMuYW5jaG9yUG9zaXRpb24sXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wcy5pdGVtcyxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlU29ydE1vYmlsZScsIGNsYXNzTmFtZSk7XG5cbiAgICAgIHZhciBtb2JpbGVTb3J0QnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgICAgICBpY29uVHlwZTogXCJhcnJvd0Rvd25cIixcbiAgICAgICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICAgICAgb25DbGljazogdGhpcy5vbkJ1dHRvbkNsaWNrLmJpbmQodGhpcyksXG4gICAgICAgIGZsdXNoOiBcInJpZ2h0XCIsXG4gICAgICAgIHNpemU6IFwieHNcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlU29ydE1vYmlsZS5zb3J0aW5nXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU29ydGluZ1wiXG4gICAgICB9KSk7XG5cbiAgICAgIHZhciBtb2JpbGVTb3J0UG9wb3ZlciA9IF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlciwgX2V4dGVuZHMoe1xuICAgICAgICBidXR0b246IG1vYmlsZVNvcnRCdXR0b24sXG4gICAgICAgIGlzT3BlbjogdGhpcy5zdGF0ZS5pc1BvcG92ZXJPcGVuLFxuICAgICAgICBjbG9zZVBvcG92ZXI6IHRoaXMuY2xvc2VQb3BvdmVyLFxuICAgICAgICBhbmNob3JQb3NpdGlvbjogYW5jaG9yUG9zaXRpb24gfHwgJ2Rvd25SaWdodCcsXG4gICAgICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudVBhbmVsLCB7XG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgbWluV2lkdGg6IDIwMFxuICAgICAgICB9LFxuICAgICAgICBpdGVtczogaXRlbXMgJiYgaXRlbXMubGVuZ3RoID8gaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVTb3J0TW9iaWxlSXRlbSwge1xuICAgICAgICAgICAga2V5OiBpdGVtLmtleSxcbiAgICAgICAgICAgIG9uU29ydDogaXRlbS5vblNvcnQsXG4gICAgICAgICAgICBpc1NvcnRlZDogaXRlbS5pc1NvcnRlZCxcbiAgICAgICAgICAgIGlzU29ydEFzY2VuZGluZzogaXRlbS5pc1NvcnRBc2NlbmRpbmdcbiAgICAgICAgICB9LCBpdGVtLm5hbWUpO1xuICAgICAgICB9KSA6IHVuZGVmaW5lZFxuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgfSwgbW9iaWxlU29ydFBvcG92ZXIpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUYWJsZVNvcnRNb2JpbGU7XG59KENvbXBvbmVudCk7XG5FdWlUYWJsZVNvcnRNb2JpbGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LFxuICBpdGVtczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLmFueSxcbiAgICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzU29ydGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc1NvcnRBc2NlbmRpbmc6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWQpXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJvblNvcnRcIiwgXCJpc1NvcnRlZFwiLCBcImlzU29ydEFzY2VuZGluZ1wiLCBcImNsYXNzTmFtZVwiLCBcImFyaWFMYWJlbFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSB9IGZyb20gJy4uLy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVNvcnRNb2JpbGVJdGVtID0gZnVuY3Rpb24gRXVpVGFibGVTb3J0TW9iaWxlSXRlbShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBvblNvcnQgPSBfcmVmLm9uU29ydCxcbiAgICAgIGlzU29ydGVkID0gX3JlZi5pc1NvcnRlZCxcbiAgICAgIGlzU29ydEFzY2VuZGluZyA9IF9yZWYuaXNTb3J0QXNjZW5kaW5nLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBhcmlhTGFiZWwgPSBfcmVmLmFyaWFMYWJlbCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgc29ydEljb24gPSAnZW1wdHknO1xuXG4gIGlmIChpc1NvcnRlZCkge1xuICAgIHNvcnRJY29uID0gaXNTb3J0QXNjZW5kaW5nID8gJ3NvcnRVcCcgOiAnc29ydERvd24nO1xuICB9XG5cbiAgdmFyIGJ1dHRvbkNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVNvcnRNb2JpbGVJdGVtJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlU29ydE1vYmlsZUl0ZW0taXNTb3J0ZWQnOiBpc1NvcnRlZFxuICB9KTtcbiAgdmFyIGNvbHVtblRpdGxlID0gYXJpYUxhYmVsID8gYXJpYUxhYmVsIDogY2hpbGRyZW47XG4gIHZhciBzdGF0ZWZ1bEFyaWFMYWJlbCA9IFwiU29ydCBcIi5jb25jYXQoY29sdW1uVGl0bGUsIFwiIFwiKS5jb25jYXQoaXNTb3J0QXNjZW5kaW5nID8gJ2Rlc2NlbmRpbmcnIDogJ2FzY2VuZGluZycpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGJ1dHRvbkNsYXNzZXMsXG4gICAgaWNvbjogc29ydEljb24sXG4gICAgb25DbGljazogb25Tb3J0LFxuICAgIFwiYXJpYS1sYWJlbFwiOiBzdGF0ZWZ1bEFyaWFMYWJlbFxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlU29ydE1vYmlsZUl0ZW0ucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBrbm93IHdoZW4gYW4gaXRlbSBoYXMgYmVlbiBjbGlja2VkXG4gICAgICovXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGN1cnJlbnQgb3B0aW9uIGlzIHRoZSBzb3J0ZWQgb24gY29sdW1uXG4gICAgICovXG4gIGlzU29ydGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBzb3J0ZWQgb25cbiAgICAgKi9cbiAgaXNTb3J0QXNjZW5kaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImlzU2VsZWN0ZWRcIiwgXCJpc1NlbGVjdGFibGVcIiwgXCJoYXNBY3Rpb25zXCIsIFwiaXNFeHBhbmRlZFJvd1wiLCBcImlzRXhwYW5kYWJsZVwiLCBcIm9uQ2xpY2tcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVSb3cgPSBmdW5jdGlvbiBFdWlUYWJsZVJvdyhfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBpc1NlbGVjdGFibGUgPSBfcmVmLmlzU2VsZWN0YWJsZSxcbiAgICAgIGhhc0FjdGlvbnMgPSBfcmVmLmhhc0FjdGlvbnMsXG4gICAgICBpc0V4cGFuZGVkUm93ID0gX3JlZi5pc0V4cGFuZGVkUm93LFxuICAgICAgaXNFeHBhbmRhYmxlID0gX3JlZi5pc0V4cGFuZGFibGUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVSb3cnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVSb3ctaXNTZWxlY3RhYmxlJzogaXNTZWxlY3RhYmxlLFxuICAgICdldWlUYWJsZVJvdy1pc1NlbGVjdGVkJzogaXNTZWxlY3RlZCxcbiAgICAnZXVpVGFibGVSb3ctaGFzQWN0aW9ucyc6IGhhc0FjdGlvbnMsXG4gICAgJ2V1aVRhYmxlUm93LWlzRXhwYW5kZWRSb3cnOiBpc0V4cGFuZGVkUm93LFxuICAgICdldWlUYWJsZVJvdy1pc0V4cGFuZGFibGUnOiBpc0V4cGFuZGFibGUsXG4gICAgJ2V1aVRhYmxlUm93LWlzQ2xpY2thYmxlJzogb25DbGlja1xuICB9KTtcblxuICBpZiAoIW9uQ2xpY2spIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRyXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH1cblxuICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgLy8gUHJldmVudCBhIHNjcm9sbCBmcm9tIG9jY3VycmluZyBpZiB0aGUgdXNlciBoYXMgaGl0IHNwYWNlLlxuICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuU1BBQ0UpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgdmFyIG9uS2V5VXAgPSBmdW5jdGlvbiBvbktleVVwKGV2ZW50KSB7XG4gICAgLy8gU3VwcG9ydCBrZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGJ5IGVtdWxhdGluZyBtb3VzZSBjbGljayBvbiBFTlRFUiBvciBTUEFDRSBrZXlwcmVzcy5cbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkVOVEVSIHx8IGV2ZW50LmtleSA9PT0ga2V5cy5TUEFDRSkge1xuICAgICAgb25DbGljayhldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidHJcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uS2V5RG93bjogb25LZXlEb3duLFxuICAgIG9uS2V5VXA6IG9uS2V5VXAsXG4gICAgdGFiSW5kZXg6IDBcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHRhYmxlIGhhcyBhIHNpbmdsZSBjb2x1bW4gb2YgY2hlY2tib3hlcyBmb3Igc2VsZWN0aW5nXG4gICAgICogcm93cyAoYWZmZWN0cyBtb2JpbGUgb25seSlcbiAgICAgKi9cbiAgaXNTZWxlY3RhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgcm93IGhhcyBiZWVuIHNlbGVjdGVkXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgdGFibGUgaGFzIGEgZGVkaWNhdGVkIGNvbHVtbiBmb3IgaWNvbi1vbmx5IGFjdGlvbnNcbiAgICAgKiAoYWZmZWN0cyBtb2JpbGUgb25seSlcbiAgICAgKi9cbiAgaGFzQWN0aW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSByb3cgd2lsbCBoYXZlIGFuIGV4cGFuZGVkIHJvd1xuICAgICAqL1xuICBpc0V4cGFuZGFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgcm93IHdpbGwgYmUgdGhlIGV4cGFuZGVkIHJvd1xuICAgICAqL1xuICBpc0V4cGFuZGVkUm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbGljazogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImFsaWduXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJ0cnVuY2F0ZVRleHRcIiwgXCJzZXRTY29wZVJvd1wiLCBcInNob3dPbkhvdmVyXCIsIFwidGV4dE9ubHlcIiwgXCJoYXNBY3Rpb25zXCIsIFwiaXNFeHBhbmRlclwiLCBcInN0eWxlXCIsIFwid2lkdGhcIiwgXCJ2YWxpZ25cIiwgXCJtb2JpbGVPcHRpb25zXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IExFRlRfQUxJR05NRU5ULCBSSUdIVF9BTElHTk1FTlQsIENFTlRFUl9BTElHTk1FTlQsIHVzZUlzV2l0aGluQnJlYWtwb2ludHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyByZXNvbHZlV2lkdGhBc1N0eWxlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVJvd0NlbGwgPSBmdW5jdGlvbiBFdWlUYWJsZVJvd0NlbGwoX3JlZikge1xuICB2YXIgX21vYmlsZU9wdGlvbnMkc2hvd09uLCBfbW9iaWxlT3B0aW9ucyR0cnVuY2E7XG5cbiAgdmFyIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgICAgYWxpZ24gPSBfcmVmJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYkYWxpZ24sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHRydW5jYXRlVGV4dCA9IF9yZWYudHJ1bmNhdGVUZXh0LFxuICAgICAgc2V0U2NvcGVSb3cgPSBfcmVmLnNldFNjb3BlUm93LFxuICAgICAgc2hvd09uSG92ZXIgPSBfcmVmLnNob3dPbkhvdmVyLFxuICAgICAgX3JlZiR0ZXh0T25seSA9IF9yZWYudGV4dE9ubHksXG4gICAgICB0ZXh0T25seSA9IF9yZWYkdGV4dE9ubHkgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHRleHRPbmx5LFxuICAgICAgaGFzQWN0aW9ucyA9IF9yZWYuaGFzQWN0aW9ucyxcbiAgICAgIGlzRXhwYW5kZXIgPSBfcmVmLmlzRXhwYW5kZXIsXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICBfcmVmJHZhbGlnbiA9IF9yZWYudmFsaWduLFxuICAgICAgdmFsaWduID0gX3JlZiR2YWxpZ24gPT09IHZvaWQgMCA/ICdtaWRkbGUnIDogX3JlZiR2YWxpZ24sXG4gICAgICBfcmVmJG1vYmlsZU9wdGlvbnMgPSBfcmVmLm1vYmlsZU9wdGlvbnMsXG4gICAgICBtb2JpbGVPcHRpb25zID0gX3JlZiRtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB7XG4gICAgc2hvdzogdHJ1ZVxuICB9IDogX3JlZiRtb2JpbGVPcHRpb25zLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjZWxsQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlUm93Q2VsbCcsIF9kZWZpbmVQcm9wZXJ0eSh7XG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taGFzQWN0aW9ucyc6IGhhc0FjdGlvbnMsXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taXNFeHBhbmRlcic6IGlzRXhwYW5kZXIsXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taGlkZUZvckRlc2t0b3AnOiBtb2JpbGVPcHRpb25zLm9ubHksXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0tZW5sYXJnZUZvck1vYmlsZSc6IG1vYmlsZU9wdGlvbnMuZW5sYXJnZVxuICB9LCBcImV1aVRhYmxlUm93Q2VsbC0tXCIuY29uY2F0KHZhbGlnbiksIHZhbGlnbikpO1xuICB2YXIgY29udGVudENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUNlbGxDb250ZW50JywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduUmlnaHQnOiBhbGlnbiA9PT0gUklHSFRfQUxJR05NRU5ULFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnbkNlbnRlcic6IGFsaWduID09PSBDRU5URVJfQUxJR05NRU5ULFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1zaG93T25Ib3Zlcic6IHNob3dPbkhvdmVyLFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS10cnVuY2F0ZVRleHQnOiB0cnVuY2F0ZVRleHQsXG4gICAgLy8gV2UncmUgZG9pbmcgdGhpcyByaWdhbWFyb2xlIGluc3RlYWQgb2YgY3JlYXRpbmcgYGV1aVRhYmxlQ2VsbENvbnRlbnQtLXRleHRPbmx5YCBmb3IgQldDXG4gICAgLy8gcHVycG9zZXMgZm9yIHRoZSB0aW1lLWJlaW5nLlxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1vdmVyZmxvd2luZ0NvbnRlbnQnOiB0ZXh0T25seSAhPT0gdHJ1ZVxuICB9KTtcbiAgdmFyIG1vYmlsZUNvbnRlbnRDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVDZWxsQ29udGVudCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnblJpZ2h0JzogbW9iaWxlT3B0aW9ucy5hbGlnbiA9PT0gUklHSFRfQUxJR05NRU5UIHx8IGFsaWduID09PSBSSUdIVF9BTElHTk1FTlQsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduQ2VudGVyJzogbW9iaWxlT3B0aW9ucy5hbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVCB8fCBhbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVCxcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tc2hvd09uSG92ZXInOiAoX21vYmlsZU9wdGlvbnMkc2hvd09uID0gbW9iaWxlT3B0aW9ucy5zaG93T25Ib3ZlcikgIT09IG51bGwgJiYgX21vYmlsZU9wdGlvbnMkc2hvd09uICE9PSB2b2lkIDAgPyBfbW9iaWxlT3B0aW9ucyRzaG93T24gOiBzaG93T25Ib3ZlcixcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tdHJ1bmNhdGVUZXh0JzogKF9tb2JpbGVPcHRpb25zJHRydW5jYSA9IG1vYmlsZU9wdGlvbnMudHJ1bmNhdGVUZXh0KSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyR0cnVuY2EgIT09IHZvaWQgMCA/IF9tb2JpbGVPcHRpb25zJHRydW5jYSA6IHRydW5jYXRlVGV4dCxcbiAgICAvLyBXZSdyZSBkb2luZyB0aGlzIHJpZ2FtYXJvbGUgaW5zdGVhZCBvZiBjcmVhdGluZyBgZXVpVGFibGVDZWxsQ29udGVudC0tdGV4dE9ubHlgIGZvciBCV0NcbiAgICAvLyBwdXJwb3NlcyBmb3IgdGhlIHRpbWUtYmVpbmcuXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLW92ZXJmbG93aW5nQ29udGVudCc6IG1vYmlsZU9wdGlvbnMudGV4dE9ubHkgIT09IHRydWUgfHwgdGV4dE9ubHkgIT09IHRydWVcbiAgfSk7XG4gIHZhciBjaGlsZENsYXNzZXMgPSBjbGFzc05hbWVzKHtcbiAgICBldWlUYWJsZUNlbGxDb250ZW50X190ZXh0OiB0ZXh0T25seSA9PT0gdHJ1ZSxcbiAgICBldWlUYWJsZUNlbGxDb250ZW50X19ob3Zlckl0ZW06IHNob3dPbkhvdmVyXG4gIH0pO1xuICB2YXIgd2lkdGhWYWx1ZSA9IHVzZUlzV2l0aGluQnJlYWtwb2ludHMoWyd4cycsICdzJ10pICYmIG1vYmlsZU9wdGlvbnMud2lkdGggPyBtb2JpbGVPcHRpb25zLndpZHRoIDogd2lkdGg7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoVmFsdWUpO1xuXG4gIGZ1bmN0aW9uIG1vZGlmeUNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgdmFyIG1vZGlmaWVkQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgIGlmICh0ZXh0T25seSA9PT0gdHJ1ZSkge1xuICAgICAgbW9kaWZpZWRDaGlsZHJlbiA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjaGlsZENsYXNzZXNcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9IGVsc2UgaWYgKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICBtb2RpZmllZENoaWxkcmVuID0gUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoY2hpbGQucHJvcHMuY2xhc3NOYW1lLCBjaGlsZENsYXNzZXMpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGlmaWVkQ2hpbGRyZW47XG4gIH1cblxuICB2YXIgY2hpbGRyZW5Ob2RlID0gbW9kaWZ5Q2hpbGRyZW4oY2hpbGRyZW4pO1xuICB2YXIgaGlkZUZvck1vYmlsZUNsYXNzZXMgPSAnZXVpVGFibGVSb3dDZWxsLS1oaWRlRm9yTW9iaWxlJztcbiAgdmFyIHNob3dGb3JNb2JpbGVDbGFzc2VzID0gJ2V1aVRhYmxlUm93Q2VsbC0taGlkZUZvckRlc2t0b3AnO1xuICB2YXIgRWxlbWVudCA9IHNldFNjb3BlUm93ID8gJ3RoJyA6ICd0ZCc7XG5cbiAgdmFyIHNoYXJlZFByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgc2NvcGU6IHNldFNjb3BlUm93ID8gJ3JvdycgOiB1bmRlZmluZWQsXG4gICAgc3R5bGU6IHN0eWxlT2JqXG4gIH0sIHJlc3QpO1xuXG4gIGlmIChtb2JpbGVPcHRpb25zLnNob3cgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChjZWxsQ2xhc3NlcywgXCIgXCIpLmNvbmNhdChoaWRlRm9yTW9iaWxlQ2xhc3NlcylcbiAgICB9LCBzaGFyZWRQcm9wcyksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3Nlc1xuICAgIH0sIGNoaWxkcmVuTm9kZSkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2VsbENsYXNzZXNcbiAgICB9LCBzaGFyZWRQcm9wcyksIG1vYmlsZU9wdGlvbnMuaGVhZGVyICYmIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlUm93Q2VsbF9fbW9iaWxlSGVhZGVyIFwiLmNvbmNhdChzaG93Rm9yTW9iaWxlQ2xhc3NlcylcbiAgICB9LCBtb2JpbGVPcHRpb25zLmhlYWRlciksIG1vYmlsZU9wdGlvbnMucmVuZGVyID8gX19fRW1vdGlvbkpTWChGcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KG1vYmlsZUNvbnRlbnRDbGFzc2VzLCBcIiBcIikuY29uY2F0KHNob3dGb3JNb2JpbGVDbGFzc2VzKVxuICAgIH0sIG1vZGlmeUNoaWxkcmVuKG1vYmlsZU9wdGlvbnMucmVuZGVyKSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChjb250ZW50Q2xhc3NlcywgXCIgXCIpLmNvbmNhdChoaWRlRm9yTW9iaWxlQ2xhc3NlcylcbiAgICB9LCBjaGlsZHJlbk5vZGUpKSA6IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3Nlc1xuICAgIH0sIGNoaWxkcmVuTm9kZSkpO1xuICB9XG59O1xuRXVpVGFibGVSb3dDZWxsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFZlcnRpY2FsIGFsaWdubWVudCBvZiB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuICAgICAqL1xuICB2YWxpZ246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNlbGwgc2hvdWxkIGJlIG1hcmtlZCBhcyB0aGUgaGVhZGluZyBmb3IgaXRzIHJvd1xuICAgICAqL1xuICBzZXRTY29wZVJvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gaXMgZGVkaWNhdGVkIHRvIGljb24tb25seSBhY3Rpb25zIChjdXJyZW50bHlcbiAgICAgKiBhZmZlY3RzIG1vYmlsZSBvbmx5KVxuICAgICAqL1xuICBoYXNBY3Rpb25zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiBpcyBkZWRpY2F0ZWQgYXMgdGhlIGV4cGFuZGFibGUgcm93IHRvZ2dsZVxuICAgICAqL1xuICBpc0V4cGFuZGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBNb2JpbGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyBkaWZmZXJlbnRseSBhdCBzbWFsbCBzY3JlZW5zO1xuICAgICAqIFNlZSAjRXVpVGFibGVSb3dDZWxsTW9iaWxlT3B0aW9uc1NoYXBlXG4gICAgICovXG4gIG1vYmlsZU9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBJZiBmYWxzZSwgd2lsbCBub3QgcmVuZGVyIHRoZSBjZWxsIGF0IGFsbCBmb3IgbW9iaWxlXG4gICAgICAgKi9cbiAgICBzaG93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogT25seSBzaG93IGZvciBtb2JpbGU/IElmIHRydWUsIHdpbGwgbm90IHJlbmRlciB0aGUgY29sdW1uIGF0IGFsbCBmb3IgZGVza3RvcFxuICAgICAgICovXG4gICAgb25seTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIEN1c3RvbSByZW5kZXIvY2hpbGRyZW4gaWYgZGlmZmVyZW50IGZyb20gZGVza3RvcFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMubm9kZSxcblxuICAgIC8qKlxuICAgICAgICogVGhlIGNvbHVtbidzIGhlYWRlciBmb3IgdXNlIGluIG1vYmlsZSB2aWV3IChhdXRvbWF0aWNhbGx5IHBhc3NlZCBkb3duXG4gICAgICAgKiB3aGVuIHVzaW5nIGBFdWlCYXNpY1RhYmxlYCkuXG4gICAgICAgKiBPciBwYXNzIGBmYWxzZWAgdG8gbm90IHNob3cgYSBoZWFkZXIgYXQgYWxsLlxuICAgICAgICovXG4gICAgaGVhZGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIEluY3JlYXNlIHRleHQgc2l6ZSBjb21wYXJlZCB0byByZXN0IG9mIGNlbGxzXG4gICAgICAgKi9cbiAgICBlbmxhcmdlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogQXBwbGllcyB0aGUgdmFsdWUgdG8gdGhlIHdpZHRoIG9mIHRoZSBjZWxsIGluIG1vYmlsZSB2aWV3ICh0eXBpY2FsbHkgNTAlKVxuICAgICAgICovXG4gICAgd2lkdGg6IFByb3BUeXBlcy5hbnksXG5cbiAgICAvKipcbiAgICAgICAqIEhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSB0ZXh0IGluIHRoZSBjZWxsXG4gICAgICAgKi9cbiAgICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImNlbnRlclwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIF9TaG91bGQgb25seSBiZSB1c2VkIGZvciBhY3Rpb24gY2VsbHNfXG4gICAgICAgKi9cbiAgICBzaG93T25Ib3ZlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIFNldHRpbmcgYHRleHRPbmx5YCB0byBgZmFsc2VgIHdpbGwgYnJlYWsgd29yZHMgdW5uZWNlc3NhcmlseSBvbiBGRiBhbmRcbiAgICAgICAqIElFLiAgVG8gY29tYmF0IHRoaXMgcHJvYmxlbSBvbiBGRiwgd3JhcCBjb250ZW50cyB3aXRoIHRoZSBjc3MgdXRpbGl0eVxuICAgICAgICogYC5ldWktdGV4dEJyZWFrV29yZGAuXG4gICAgICAgKi9cbiAgICB0ZXh0T25seTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIERvbid0IGFsbG93IGxpbmUgYnJlYWtzIHdpdGhpbiBjZWxsc1xuICAgICAgICovXG4gICAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMuYm9vbFxuICB9KSxcblxuICAvKipcbiAgICAgKiBIb3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGUgdGV4dCBpbiB0aGUgY2VsbFxuICAgICAqL1xuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImNlbnRlclwiXSksXG5cbiAgLyoqXG4gICAgICogX1Nob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGFjdGlvbiBjZWxsc19cbiAgICAgKi9cbiAgc2hvd09uSG92ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFNldHRpbmcgYHRleHRPbmx5YCB0byBgZmFsc2VgIHdpbGwgYnJlYWsgd29yZHMgdW5uZWNlc3NhcmlseSBvbiBGRiBhbmRcbiAgICAgKiBJRS4gIFRvIGNvbWJhdCB0aGlzIHByb2JsZW0gb24gRkYsIHdyYXAgY29udGVudHMgd2l0aCB0aGUgY3NzIHV0aWxpdHlcbiAgICAgKiBgLmV1aS10ZXh0QnJlYWtXb3JkYC5cbiAgICAgKi9cbiAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIERvbid0IGFsbG93IGxpbmUgYnJlYWtzIHdpdGhpbiBjZWxsc1xuICAgICAqL1xuICB0cnVuY2F0ZVRleHQ6IFByb3BUeXBlcy5ib29sLFxuICB3aWR0aDogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVSb3dDZWxsQ2hlY2tib3ggPSBmdW5jdGlvbiBFdWlUYWJsZVJvd0NlbGxDaGVja2JveChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlUm93Q2VsbENoZWNrYm94JywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0ZFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDZWxsQ29udGVudFwiXG4gIH0sIGNoaWxkcmVuKSk7XG59O1xuRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImxvYWRpbmdcIiwgXCJpdGVtc1wiLCBcIml0ZW1JZFwiLCBcImNvbHVtbnNcIiwgXCJwYWdpbmF0aW9uXCIsIFwic29ydGluZ1wiLCBcInNlbGVjdGlvblwiLCBcIm9uQ2hhbmdlXCIsIFwiZXJyb3JcIiwgXCJub0l0ZW1zTWVzc2FnZVwiLCBcImNvbXByZXNzZWRcIiwgXCJpdGVtSWRUb0V4cGFuZGVkUm93TWFwXCIsIFwicmVzcG9uc2l2ZVwiLCBcImlzU2VsZWN0YWJsZVwiLCBcImlzRXhwYW5kYWJsZVwiLCBcImhhc0FjdGlvbnNcIiwgXCJyb3dQcm9wc1wiLCBcImNlbGxQcm9wc1wiLCBcInRhYmxlQ2FwdGlvblwiLCBcInJvd0hlYWRlclwiLCBcInRhYmxlTGF5b3V0XCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJhbGlnblwiLCBcInJlbmRlclwiLCBcImRhdGFUeXBlXCIsIFwiaXNFeHBhbmRlclwiLCBcInRleHRPbmx5XCIsIFwibmFtZVwiLCBcImZpZWxkXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJzb3J0YWJsZVwiLCBcImZvb3RlclwiLCBcIm1vYmlsZU9wdGlvbnNcIl07XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBmb3JtYXRBdXRvLCBmb3JtYXRCb29sZWFuLCBmb3JtYXREYXRlLCBmb3JtYXROdW1iZXIsIGZvcm1hdFRleHQsIExFRlRfQUxJR05NRU5ULCBSSUdIVF9BTElHTk1FTlQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IGdldCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29iamVjdHMnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpQ2hlY2tib3ggfSBmcm9tICcuLi9mb3JtJztcbmltcG9ydCB7IEV1aVRhYmxlLCBFdWlUYWJsZUJvZHksIEV1aVRhYmxlRm9vdGVyLCBFdWlUYWJsZUZvb3RlckNlbGwsIEV1aVRhYmxlSGVhZGVyLCBFdWlUYWJsZUhlYWRlckNlbGwsIEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LCBFdWlUYWJsZUhlYWRlck1vYmlsZSwgRXVpVGFibGVSb3csIEV1aVRhYmxlUm93Q2VsbCwgRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gsIEV1aVRhYmxlU29ydE1vYmlsZSB9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7IENvbGxhcHNlZEl0ZW1BY3Rpb25zIH0gZnJvbSAnLi9jb2xsYXBzZWRfaXRlbV9hY3Rpb25zJztcbmltcG9ydCB7IEV4cGFuZGVkSXRlbUFjdGlvbnMgfSBmcm9tICcuL2V4cGFuZGVkX2l0ZW1fYWN0aW9ucyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQmFyIH0gZnJvbSAnLi9wYWdpbmF0aW9uX2Jhcic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlEZWxheVJlbmRlciB9IGZyb20gJy4uL2RlbGF5X3JlbmRlcic7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZGF0YVR5cGVzUHJvZmlsZXMgPSB7XG4gIGF1dG86IHtcbiAgICBhbGlnbjogTEVGVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRBdXRvKHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIHN0cmluZzoge1xuICAgIGFsaWduOiBMRUZUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFRleHQodmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgbnVtYmVyOiB7XG4gICAgYWxpZ246IFJJR0hUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBib29sZWFuOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0Qm9vbGVhbih2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBkYXRlOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG59O1xudmFyIERBVEFfVFlQRVMgPSBPYmplY3Qua2V5cyhkYXRhVHlwZXNQcm9maWxlcyk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZCkge1xuICBpZiAoaXRlbUlkKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oaXRlbUlkKSkge1xuICAgICAgcmV0dXJuIGl0ZW1JZChpdGVtKTtcbiAgICB9IC8vIEB0cy1pZ25vcmUgbmV2ZXIgbWluZCBhYm91dCB0aGUgaW5kZXggc2lnbmF0dXJlXG5cblxuICAgIHJldHVybiBpdGVtW2l0ZW1JZF07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Um93UHJvcHMoaXRlbSwgcm93UHJvcHMpIHtcbiAgaWYgKHJvd1Byb3BzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24ocm93UHJvcHMpKSB7XG4gICAgICByZXR1cm4gcm93UHJvcHMoaXRlbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd1Byb3BzO1xuICB9XG5cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDZWxsUHJvcHMoaXRlbSwgY29sdW1uLCBjZWxsUHJvcHMpIHtcbiAgaWYgKGNlbGxQcm9wcykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNlbGxQcm9wcykpIHtcbiAgICAgIHJldHVybiBjZWxsUHJvcHMoaXRlbSwgY29sdW1uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbFByb3BzO1xuICB9XG5cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDb2x1bW5Gb290ZXIoY29sdW1uLCBfcmVmKSB7XG4gIHZhciBpdGVtcyA9IF9yZWYuaXRlbXMsXG4gICAgICBwYWdpbmF0aW9uID0gX3JlZi5wYWdpbmF0aW9uO1xuICB2YXIgX3JlZjIgPSBjb2x1bW4sXG4gICAgICBmb290ZXIgPSBfcmVmMi5mb290ZXI7XG5cbiAgaWYgKGZvb3Rlcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZvb3RlcikpIHtcbiAgICAgIHJldHVybiBmb290ZXIoe1xuICAgICAgICBpdGVtczogaXRlbXMsXG4gICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmb290ZXI7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNQYWdpbmF0aW9uKHgpIHtcbiAgcmV0dXJuIHguaGFzT3duUHJvcGVydHkoJ3BhZ2luYXRpb24nKSAmJiAhIXgucGFnaW5hdGlvbjtcbn1cblxuZXhwb3J0IHZhciBFdWlCYXNpY1RhYmxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlCYXNpY1RhYmxlLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUJhc2ljVGFibGUpO1xuXG4gIGZ1bmN0aW9uIEV1aUJhc2ljVGFibGUocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQmFzaWNUYWJsZSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhbnVwc1wiLCBbXSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGJvZHlcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0VGJvZHlcIiwgZnVuY3Rpb24gKHRib2R5KSB7XG4gICAgICAvLyByZW1vdmUgbGlzdGVuZXJzIGZyb20gYW4gZXhpc3RpbmcgZWxlbWVudFxuICAgICAgX3RoaXMucmVtb3ZlTG9hZGluZ0xpc3RlbmVycygpOyAvLyB1cGRhdGUgdGhlIHJlZlxuXG5cbiAgICAgIF90aGlzLnRib2R5ID0gdGJvZHk7IC8vIGlmIGxvYWRpbmcsIGFkZCBsaXN0ZW5lcnNcblxuICAgICAgaWYgKF90aGlzLnByb3BzLmxvYWRpbmcgPT09IHRydWUgJiYgdGJvZHkpIHtcbiAgICAgICAgX3RoaXMuYWRkTG9hZGluZ0xpc3RlbmVycyh0Ym9keSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYWRkTG9hZGluZ0xpc3RlbmVyc1wiLCBmdW5jdGlvbiAodGJvZHkpIHtcbiAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfTtcblxuICAgICAgWydtb3VzZWRvd24nLCAnbW91c2V1cCcsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2VlbnRlcicsICdtb3VzZWxlYXZlJywgJ2NsaWNrJywgJ2RibGNsaWNrJywgJ2tleWRvd24nLCAna2V5dXAnLCAna2V5cHJlc3MnXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB0Ym9keS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgdHJ1ZSk7XG5cbiAgICAgICAgX3RoaXMuY2xlYW51cHMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbW92ZUxvYWRpbmdMaXN0ZW5lcnNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuY2xlYW51cHMuZm9yRWFjaChmdW5jdGlvbiAoY2xlYW51cCkge1xuICAgICAgICByZXR1cm4gY2xlYW51cCgpO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLmNsZWFudXBzLmxlbmd0aCA9IDA7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGFibGVJZFwiLCBodG1sSWRHZW5lcmF0b3IoJ19fdGFibGUnKSgpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZWxlY3RBbGxJZEdlbmVyYXRvclwiLCBodG1sSWRHZW5lcmF0b3IoJ19zZWxlY3Rpb25fY29sdW1uLWNoZWNrYm94JykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbmRlclNlbGVjdEFsbFwiLCBmdW5jdGlvbiAoaXNNb2JpbGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMuaXRlbXMsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2VsZWN0aW9uO1xuXG4gICAgICBpZiAoIXNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWxlY3RhYmxlSXRlbXMgPSBpdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuICFzZWxlY3Rpb24uc2VsZWN0YWJsZSB8fCBzZWxlY3Rpb24uc2VsZWN0YWJsZShpdGVtKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGNoZWNrZWQgPSBfdGhpcy5zdGF0ZS5zZWxlY3Rpb24gJiYgc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aCA+IDAgJiYgX3RoaXMuc3RhdGUuc2VsZWN0aW9uLmxlbmd0aCA9PT0gc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciBkaXNhYmxlZCA9IHNlbGVjdGFibGVJdGVtcy5sZW5ndGggPT09IDA7XG5cbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNlbGVjdGlvbihzZWxlY3RhYmxlSXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNlbGVjdGlvbihbXSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS5zZWxlY3RBbGxSb3dzXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0IGFsbCByb3dzXCJcbiAgICAgIH0sIGZ1bmN0aW9uIChzZWxlY3RBbGxSb3dzKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNoZWNrYm94LCB7XG4gICAgICAgICAgaWQ6IF90aGlzLnNlbGVjdEFsbElkR2VuZXJhdG9yKGlzTW9iaWxlID8gJ21vYmlsZScgOiAnZGVza3RvcCcpLFxuICAgICAgICAgIHR5cGU6IGlzTW9iaWxlID8gdW5kZWZpbmVkIDogJ2luTGlzdCcsXG4gICAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlIC8vIE9ubHkgYWRkIGRhdGEtdGVzdC1zdWJqIHRvIG9uZSBvZiB0aGUgY2hlY2tib3hlc1xuICAgICAgICAgICxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGlzTW9iaWxlID8gdW5kZWZpbmVkIDogJ2NoZWNrYm94U2VsZWN0QWxsJyxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogc2VsZWN0QWxsUm93cyxcbiAgICAgICAgICBsYWJlbDogaXNNb2JpbGUgPyBzZWxlY3RBbGxSb3dzIDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uXCIsIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBzb3J0aW5nID0gX3RoaXMucHJvcHMuc29ydGluZztcbiAgICAgIHZhciBfcmVmMyA9IGNvbHVtbixcbiAgICAgICAgICBzb3J0YWJsZSA9IF9yZWYzLnNvcnRhYmxlLFxuICAgICAgICAgIGZpZWxkID0gX3JlZjMuZmllbGQsXG4gICAgICAgICAgbmFtZSA9IF9yZWYzLm5hbWU7XG5cbiAgICAgIGlmICghc29ydGluZyB8fCAhc29ydGluZy5zb3J0IHx8ICFzb3J0YWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3J0aW5nLnNvcnQuZmllbGQgPT09IGZpZWxkIHx8IHNvcnRpbmcuc29ydC5maWVsZCA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gc29ydGluZy5zb3J0LmRpcmVjdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZXNvbHZlQ29sdW1uT25Tb3J0XCIsIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBzb3J0aW5nID0gX3RoaXMucHJvcHMuc29ydGluZztcbiAgICAgIHZhciBfcmVmNCA9IGNvbHVtbixcbiAgICAgICAgICBzb3J0YWJsZSA9IF9yZWY0LnNvcnRhYmxlLFxuICAgICAgICAgIG5hbWUgPSBfcmVmNC5uYW1lO1xuXG4gICAgICBpZiAoIXNvcnRpbmcgfHwgIXNvcnRhYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYXNpY1RhYmxlIGlzIGNvbmZpZ3VyZWQgdG8gYmUgc29ydGFibGUgb24gY29sdW1uIFtcIi5jb25jYXQobmFtZSwgXCJdIGJ1dFxcbiAgICAgICAgICBbb25DaGFuZ2VdIGlzIG5vdCBjb25maWd1cmVkLiBUaGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHRoZSBzb3J0IHJlcXVlc3RzXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9uQ29sdW1uU29ydENoYW5nZShjb2x1bW4pO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgLy8gdXNlZCBmb3IgY2hlY2tpbmcgaWYgIGluaXRpYWwgc2VsZWN0aW9uIGlzIHJlbmRlcmVkXG4gICAgICBpbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uOiBbXVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUJhc2ljVGFibGUsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMubG9hZGluZyAmJiB0aGlzLnRib2R5KSB0aGlzLmFkZExvYWRpbmdMaXN0ZW5lcnModGhpcy50Ym9keSk7XG4gICAgICB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMubG9hZGluZyAhPT0gdGhpcy5wcm9wcy5sb2FkaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmxvYWRpbmcgJiYgdGhpcy50Ym9keSkge1xuICAgICAgICAgIHRoaXMuYWRkTG9hZGluZ0xpc3RlbmVycyh0aGlzLnRib2R5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxvYWRpbmdMaXN0ZW5lcnMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLnJlbW92ZUxvYWRpbmdMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SW5pdGlhbFNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbml0aWFsU2VsZWN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uICYmIHRoaXMucHJvcHMuc2VsZWN0aW9uLmluaXRpYWxTZWxlY3RlZCAmJiAhdGhpcy5zdGF0ZS5pbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQgJiYgdGhpcy5wcm9wcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5wcm9wcy5zZWxlY3Rpb24uaW5pdGlhbFNlbGVjdGVkXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJidWlsZENyaXRlcmlhXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkQ3JpdGVyaWEocHJvcHMpIHtcbiAgICAgIHZhciBjcml0ZXJpYSA9IHt9O1xuXG4gICAgICBpZiAoaGFzUGFnaW5hdGlvbihwcm9wcykpIHtcbiAgICAgICAgY3JpdGVyaWEucGFnZSA9IHtcbiAgICAgICAgICBpbmRleDogcHJvcHMucGFnaW5hdGlvbi5wYWdlSW5kZXgsXG4gICAgICAgICAgc2l6ZTogcHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc29ydGluZykge1xuICAgICAgICBjcml0ZXJpYS5zb3J0ID0gcHJvcHMuc29ydGluZy5zb3J0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JpdGVyaWE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNoYW5nZVNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMuc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uLm9uU2VsZWN0aW9uQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMucHJvcHMuc2VsZWN0aW9uLm9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFyU2VsZWN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oW10pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvblBhZ2VTaXplQ2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uUGFnZVNpemVDaGFuZ2Uoc2l6ZSkge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgdmFyIGN1cnJlbnRDcml0ZXJpYSA9IHRoaXMuYnVpbGRDcml0ZXJpYSh0aGlzLnByb3BzKTtcblxuICAgICAgdmFyIGNyaXRlcmlhID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEpLCB7fSwge1xuICAgICAgICBwYWdlOiB7XG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgLy8gd2hlbiBwYWdlIHNpemUgY2hhbmdlcywgd2UgdGFrZSB0aGUgdXNlciBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlXG4gICAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShjcml0ZXJpYSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uUGFnZUNoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblBhZ2VDaGFuZ2UoaW5kZXgpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHZhciBjdXJyZW50Q3JpdGVyaWEgPSB0aGlzLmJ1aWxkQ3JpdGVyaWEodGhpcy5wcm9wcyk7XG5cbiAgICAgIHZhciBjcml0ZXJpYSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhKSwge30sIHtcbiAgICAgICAgcGFnZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEucGFnZSksIHt9LCB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH0pXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShjcml0ZXJpYSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ29sdW1uU29ydENoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNvbHVtblNvcnRDaGFuZ2UoY29sdW1uKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB2YXIgY3VycmVudENyaXRlcmlhID0gdGhpcy5idWlsZENyaXRlcmlhKHRoaXMucHJvcHMpO1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IFNvcnREaXJlY3Rpb24uQVNDO1xuXG4gICAgICBpZiAoY3VycmVudENyaXRlcmlhICYmIGN1cnJlbnRDcml0ZXJpYS5zb3J0ICYmIChjdXJyZW50Q3JpdGVyaWEuc29ydC5maWVsZCA9PT0gY29sdW1uLmZpZWxkIHx8IGN1cnJlbnRDcml0ZXJpYS5zb3J0LmZpZWxkID09PSBjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gU29ydERpcmVjdGlvbi5yZXZlcnNlKGN1cnJlbnRDcml0ZXJpYS5zb3J0LmRpcmVjdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjcml0ZXJpYSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhKSwge30sIHtcbiAgICAgICAgLy8gcmVzZXR0aW5nIHRoZSBwYWdlIGlmIHRoZSBjcml0ZXJpYSBoYXMgb25lXG4gICAgICAgIHBhZ2U6ICFjdXJyZW50Q3JpdGVyaWEucGFnZSA/IHVuZGVmaW5lZCA6IHtcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBzaXplOiBjdXJyZW50Q3JpdGVyaWEucGFnZS5zaXplXG4gICAgICAgIH0sXG4gICAgICAgIHNvcnQ6IHtcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkIHx8IGNvbHVtbi5uYW1lLFxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGNvbXBsZXggcmVsYXRpb25zaGlwIGJldHdlZW4gcGFnaW5hdGlvbidzIGV4aXN0ZW5jZSBhbmQgY3JpdGVyaWEsIHRoZSBjb2RlIGxvZ2ljIGVuc3VyZXMgdGhpcyBpcyBjb3JyZWN0bHkgbWFpbnRhaW5lZFxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGNyaXRlcmlhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgbG9hZGluZyA9IF90aGlzJHByb3BzMi5sb2FkaW5nLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMyLml0ZW1zLFxuICAgICAgICAgIGl0ZW1JZCA9IF90aGlzJHByb3BzMi5pdGVtSWQsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzMi5jb2x1bW5zLFxuICAgICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczIucGFnaW5hdGlvbixcbiAgICAgICAgICBzb3J0aW5nID0gX3RoaXMkcHJvcHMyLnNvcnRpbmcsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHMyLnNlbGVjdGlvbixcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMi5vbkNoYW5nZSxcbiAgICAgICAgICBlcnJvciA9IF90aGlzJHByb3BzMi5lcnJvcixcbiAgICAgICAgICBub0l0ZW1zTWVzc2FnZSA9IF90aGlzJHByb3BzMi5ub0l0ZW1zTWVzc2FnZSxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQsXG4gICAgICAgICAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9IF90aGlzJHByb3BzMi5pdGVtSWRUb0V4cGFuZGVkUm93TWFwLFxuICAgICAgICAgIHJlc3BvbnNpdmUgPSBfdGhpcyRwcm9wczIucmVzcG9uc2l2ZSxcbiAgICAgICAgICBpc1NlbGVjdGFibGUgPSBfdGhpcyRwcm9wczIuaXNTZWxlY3RhYmxlLFxuICAgICAgICAgIGlzRXhwYW5kYWJsZSA9IF90aGlzJHByb3BzMi5pc0V4cGFuZGFibGUsXG4gICAgICAgICAgaGFzQWN0aW9ucyA9IF90aGlzJHByb3BzMi5oYXNBY3Rpb25zLFxuICAgICAgICAgIHJvd1Byb3BzID0gX3RoaXMkcHJvcHMyLnJvd1Byb3BzLFxuICAgICAgICAgIGNlbGxQcm9wcyA9IF90aGlzJHByb3BzMi5jZWxsUHJvcHMsXG4gICAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHMyLnRhYmxlQ2FwdGlvbixcbiAgICAgICAgICByb3dIZWFkZXIgPSBfdGhpcyRwcm9wczIucm93SGVhZGVyLFxuICAgICAgICAgIHRhYmxlTGF5b3V0ID0gX3RoaXMkcHJvcHMyLnRhYmxlTGF5b3V0LFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJhc2ljVGFibGUnLCB7XG4gICAgICAgICdldWlCYXNpY1RhYmxlLWxvYWRpbmcnOiBsb2FkaW5nXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIHRhYmxlID0gdGhpcy5yZW5kZXJUYWJsZSgpO1xuICAgICAgdmFyIHBhZ2luYXRpb25CYXIgPSB0aGlzLnJlbmRlclBhZ2luYXRpb25CYXIoKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICB9LCByZXN0KSwgdGFibGUsIHBhZ2luYXRpb25CYXIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczMuY29tcHJlc3NlZCxcbiAgICAgICAgICByZXNwb25zaXZlID0gX3RoaXMkcHJvcHMzLnJlc3BvbnNpdmUsXG4gICAgICAgICAgdGFibGVMYXlvdXQgPSBfdGhpcyRwcm9wczMudGFibGVMYXlvdXQ7XG4gICAgICB2YXIgbW9iaWxlSGVhZGVyID0gcmVzcG9uc2l2ZSA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJNb2JpbGUsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgICAgIHJlc3BvbnNpdmU6IGZhbHNlLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJzcGFjZUJldHdlZW5cIixcbiAgICAgICAgYWxpZ25JdGVtczogXCJiYXNlbGluZVwiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgIGdyb3c6IGZhbHNlXG4gICAgICB9LCB0aGlzLnJlbmRlclNlbGVjdEFsbCh0cnVlKSksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgIH0sIHRoaXMucmVuZGVyVGFibGVNb2JpbGVTb3J0KCkpKSkgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgY2FwdGlvbiA9IHRoaXMucmVuZGVyVGFibGVDYXB0aW9uKCk7XG4gICAgICB2YXIgaGVhZCA9IHRoaXMucmVuZGVyVGFibGVIZWFkKCk7XG4gICAgICB2YXIgYm9keSA9IHRoaXMucmVuZGVyVGFibGVCb2R5KCk7XG4gICAgICB2YXIgZm9vdGVyID0gdGhpcy5yZW5kZXJUYWJsZUZvb3RlcigpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgbnVsbCwgbW9iaWxlSGVhZGVyLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlLCB7XG4gICAgICAgIGlkOiB0aGlzLnRhYmxlSWQsXG4gICAgICAgIHRhYmxlTGF5b3V0OiB0YWJsZUxheW91dCxcbiAgICAgICAgcmVzcG9uc2l2ZTogcmVzcG9uc2l2ZSxcbiAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZFxuICAgICAgfSwgY2FwdGlvbiwgaGVhZCwgYm9keSwgZm9vdGVyKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlTW9iaWxlU29ydFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZU1vYmlsZVNvcnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNC5jb2x1bW5zLFxuICAgICAgICAgIHNvcnRpbmcgPSBfdGhpcyRwcm9wczQuc29ydGluZztcbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoIXNvcnRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uLCBpbmRleCkge1xuICAgICAgICB2YXIgX2NvbHVtbiwgX2NvbHVtbiRtb2JpbGVPcHRpb25zO1xuXG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgJiYgc29ydGluZy5zb3J0ICYmICEhc29ydGluZy5lbmFibGVBbGxDb2x1bW5zICYmIGNvbHVtbi5zb3J0YWJsZSA9PSBudWxsKSB7XG4gICAgICAgICAgY29sdW1uID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb2x1bW4pLCB7fSwge1xuICAgICAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29sdW1uLnNvcnRhYmxlIHx8ICgoX2NvbHVtbiA9IGNvbHVtbikgPT09IG51bGwgfHwgX2NvbHVtbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9jb2x1bW4kbW9iaWxlT3B0aW9ucyA9IF9jb2x1bW4ubW9iaWxlT3B0aW9ucykgPT09IG51bGwgfHwgX2NvbHVtbiRtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJG1vYmlsZU9wdGlvbnMuc2hvdykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNvcnREaXJlY3Rpb24gPSBfdGhpczIucmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb24oY29sdW1uKTtcblxuICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICBrZXk6IFwiX2RhdGFfc19cIi5jb25jYXQoY29sdW1uLmZpZWxkLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICBvblNvcnQ6IF90aGlzMi5yZXNvbHZlQ29sdW1uT25Tb3J0KGNvbHVtbiksXG4gICAgICAgICAgaXNTb3J0ZWQ6ICEhc29ydERpcmVjdGlvbixcbiAgICAgICAgICBpc1NvcnRBc2NlbmRpbmc6IHNvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKHNvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gaXRlbXMubGVuZ3RoID8gX19fRW1vdGlvbkpTWChFdWlUYWJsZVNvcnRNb2JpbGUsIHtcbiAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICB9KSA6IG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlQ2FwdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUNhcHRpb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzNS5pdGVtcyxcbiAgICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHM1LnBhZ2luYXRpb24sXG4gICAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHM1LnRhYmxlQ2FwdGlvbjtcbiAgICAgIHZhciBpdGVtQ291bnQgPSBpdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgdG90YWxJdGVtQ291bnQgPSBwYWdpbmF0aW9uID8gcGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCA6IGl0ZW1Db3VudDtcbiAgICAgIHZhciBwYWdlID0gcGFnaW5hdGlvbiA/IHBhZ2luYXRpb24ucGFnZUluZGV4ICsgMSA6IDE7XG4gICAgICB2YXIgcGFnZUNvdW50ID0gcGFnaW5hdGlvbiAhPT0gbnVsbCAmJiBwYWdpbmF0aW9uICE9PSB2b2lkIDAgJiYgcGFnaW5hdGlvbi5wYWdlU2l6ZSA/IE1hdGguY2VpbChwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50IC8gcGFnaW5hdGlvbi5wYWdlU2l6ZSkgOiAxO1xuICAgICAgdmFyIGNhcHRpb25FbGVtZW50O1xuXG4gICAgICBpZiAodGFibGVDYXB0aW9uKSB7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVDYXB0aW9uV2l0aFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwie3RhYmxlQ2FwdGlvbn07IFBhZ2Uge3BhZ2V9IG9mIHtwYWdlQ291bnR9LlwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHRhYmxlQ2FwdGlvbjogdGFibGVDYXB0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gdGFibGVDYXB0aW9uO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGFnaW5hdGlvbikge1xuICAgICAgICAgIGlmIChwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50ID4gMCkge1xuICAgICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZUF1dG9DYXB0aW9uV2l0aFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgICAgZGVmYXVsdDogXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3Mgb3V0IG9mIHt0b3RhbEl0ZW1Db3VudH0gcm93czsgUGFnZSB7cGFnZX0gb2Yge3BhZ2VDb3VudH0uXCIsXG4gICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgIHRvdGFsSXRlbUNvdW50OiB0b3RhbEl0ZW1Db3VudCxcbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlU2ltcGxlQXV0b0NhcHRpb25XaXRoUGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93czsgUGFnZSB7cGFnZX0gb2Yge3BhZ2VDb3VudH0uXCIsXG4gICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgIGl0ZW1Db3VudDogaXRlbUNvdW50LFxuICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZUNvdW50OiBwYWdlQ291bnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlQXV0b0NhcHRpb25XaXRob3V0UGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3MuXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwiY2FwdGlvblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNhcHRpb25cIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlEZWxheVJlbmRlciwgbnVsbCwgY2FwdGlvbkVsZW1lbnQpKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlSGVhZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUhlYWQoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNi5jb2x1bW5zLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzNi5zZWxlY3Rpb247XG4gICAgICB2YXIgaGVhZGVycyA9IFtdO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LCB7XG4gICAgICAgICAga2V5OiBcIl9zZWxlY3Rpb25fY29sdW1uX2hcIlxuICAgICAgICB9LCB0aGlzLnJlbmRlclNlbGVjdEFsbChmYWxzZSkpKTtcbiAgICAgIH1cblxuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGluZGV4KSB7XG4gICAgICAgIHZhciBfcmVmNSA9IGNvbHVtbixcbiAgICAgICAgICAgIGZpZWxkID0gX3JlZjUuZmllbGQsXG4gICAgICAgICAgICB3aWR0aCA9IF9yZWY1LndpZHRoLFxuICAgICAgICAgICAgbmFtZSA9IF9yZWY1Lm5hbWUsXG4gICAgICAgICAgICBhbGlnbiA9IF9yZWY1LmFsaWduLFxuICAgICAgICAgICAgZGF0YVR5cGUgPSBfcmVmNS5kYXRhVHlwZSxcbiAgICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjUuc29ydGFibGUsXG4gICAgICAgICAgICBtb2JpbGVPcHRpb25zID0gX3JlZjUubW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICAgIHJlYWRPbmx5ID0gX3JlZjUucmVhZE9ubHksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IF9yZWY1LmRlc2NyaXB0aW9uO1xuXG4gICAgICAgIHZhciBjb2x1bW5BbGlnbiA9IGFsaWduIHx8IF90aGlzMy5nZXRBbGlnbkZvckRhdGFUeXBlKGRhdGFUeXBlKTsgLy8gYWN0aW9ucyBjb2x1bW5cblxuXG4gICAgICAgIGlmIChjb2x1bW4uYWN0aW9ucykge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbCwge1xuICAgICAgICAgICAga2V5OiBcIl9hY3Rpb25zX2hfXCIuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICAgIGFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBtb2JpbGVPcHRpb25zOiBtb2JpbGVPcHRpb25zXG4gICAgICAgICAgfSwgbmFtZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBjb21wdXRlZCBjb2x1bW5cblxuXG4gICAgICAgIGlmICghY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgdmFyIF9zb3J0aW5nID0ge307IC8vIGNvbXB1dGVkIGNvbHVtbnMgYXJlIG9ubHkgc29ydGFibGUgaWYgdGhlaXIgYHNvcnRhYmxlYCBpcyBhIGZ1bmN0aW9uXG5cbiAgICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcgJiYgdHlwZW9mIHNvcnRhYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgc29ydERpcmVjdGlvbiA9IF90aGlzMy5yZXNvbHZlQ29sdW1uU29ydERpcmVjdGlvbihjb2x1bW4pO1xuXG4gICAgICAgICAgICBfc29ydGluZy5pc1NvcnRlZCA9ICEhc29ydERpcmVjdGlvbjtcbiAgICAgICAgICAgIF9zb3J0aW5nLmlzU29ydEFzY2VuZGluZyA9IHNvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKHNvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgX3NvcnRpbmcub25Tb3J0ID0gX3RoaXMzLnJlc29sdmVDb2x1bW5PblNvcnQoY29sdW1uKTtcbiAgICAgICAgICAgIF9zb3J0aW5nLnJlYWRPbmx5ID0gX3RoaXMzLnByb3BzLnNvcnRpbmcucmVhZE9ubHkgfHwgcmVhZE9ubHk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBrZXk6IFwiX2NvbXB1dGVkX2NvbHVtbl9oX1wiLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBtb2JpbGVPcHRpb25zOiBtb2JpbGVPcHRpb25zLFxuICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyQ2VsbF9cIi5jb25jYXQodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnID8gbmFtZSA6ICcnLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgICAgIH0sIF9zb3J0aW5nKSwgbmFtZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBmaWVsZCBkYXRhIGNvbHVtblxuXG5cbiAgICAgICAgdmFyIHNvcnRpbmcgPSB7fTtcblxuICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcpIHtcbiAgICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcuc29ydCAmJiAhIV90aGlzMy5wcm9wcy5zb3J0aW5nLmVuYWJsZUFsbENvbHVtbnMgJiYgY29sdW1uLnNvcnRhYmxlID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29sdW1uKSwge30sIHtcbiAgICAgICAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfcmVmNiA9IGNvbHVtbixcbiAgICAgICAgICAgICAgX3NvcnRhYmxlID0gX3JlZjYuc29ydGFibGU7XG5cbiAgICAgICAgICBpZiAoX3NvcnRhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX3NvcnREaXJlY3Rpb24gPSBfdGhpczMucmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb24oY29sdW1uKTtcblxuICAgICAgICAgICAgc29ydGluZy5pc1NvcnRlZCA9ICEhX3NvcnREaXJlY3Rpb247XG4gICAgICAgICAgICBzb3J0aW5nLmlzU29ydEFzY2VuZGluZyA9IF9zb3J0RGlyZWN0aW9uID8gU29ydERpcmVjdGlvbi5pc0FzYyhfc29ydERpcmVjdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBzb3J0aW5nLm9uU29ydCA9IF90aGlzMy5yZXNvbHZlQ29sdW1uT25Tb3J0KGNvbHVtbik7XG4gICAgICAgICAgICBzb3J0aW5nLnJlYWRPbmx5ID0gX3RoaXMzLnByb3BzLnNvcnRpbmcucmVhZE9ubHkgfHwgcmVhZE9ubHk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAga2V5OiBcIl9kYXRhX2hfXCIuY29uY2F0KGZpZWxkLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIG1vYmlsZU9wdGlvbnM6IG1vYmlsZU9wdGlvbnMsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyQ2VsbF9cIi5jb25jYXQoZmllbGQsIFwiX1wiKS5jb25jYXQoaW5kZXgpLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgICB9LCBzb3J0aW5nKSwgbmFtZSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlciwgbnVsbCwgaGVhZGVycyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlRm9vdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlRm9vdGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczcuaXRlbXMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNy5jb2x1bW5zLFxuICAgICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczcucGFnaW5hdGlvbixcbiAgICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczcuc2VsZWN0aW9uO1xuICAgICAgdmFyIGZvb3RlcnMgPSBbXTtcbiAgICAgIHZhciBoYXNEZWZpbmVkRm9vdGVyID0gZmFsc2U7XG5cbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGVtcHR5IGNlbGwgdG8gY29tcGVuc2F0ZSBmb3IgYWRkaXRpb25hbCBzZWxlY3Rpb24gY29sdW1uXG4gICAgICAgIGZvb3RlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlRm9vdGVyQ2VsbCwge1xuICAgICAgICAgIGtleTogXCJfc2VsZWN0aW9uX2NvbHVtbl9mXCJcbiAgICAgICAgfSwgdW5kZWZpbmVkKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHZhciBmb290ZXIgPSBnZXRDb2x1bW5Gb290ZXIoY29sdW1uLCB7XG4gICAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBfcmVmNyA9IGNvbHVtbixcbiAgICAgICAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmNy5tb2JpbGVPcHRpb25zLFxuICAgICAgICAgICAgZmllbGQgPSBfcmVmNy5maWVsZCxcbiAgICAgICAgICAgIGFsaWduID0gX3JlZjcuYWxpZ247XG5cbiAgICAgICAgaWYgKG1vYmlsZU9wdGlvbnMgIT09IG51bGwgJiYgbW9iaWxlT3B0aW9ucyAhPT0gdm9pZCAwICYmIG1vYmlsZU9wdGlvbnMub25seSkge1xuICAgICAgICAgIHJldHVybjsgLy8gZXhjbHVkZSBjb2x1bW5zIHRoYXQgb25seSBleGlzdCBmb3IgbW9iaWxlIGhlYWRlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb290ZXIpIHtcbiAgICAgICAgICBmb290ZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlckNlbGwsIHtcbiAgICAgICAgICAgIGtleTogXCJmb290ZXJfXCIuY29uY2F0KGZpZWxkLCBcIl9cIikuY29uY2F0KGZvb3RlcnMubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25cbiAgICAgICAgICB9LCBmb290ZXIpKTtcbiAgICAgICAgICBoYXNEZWZpbmVkRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb290ZXIgaXMgdW5kZWZpbmVkLCBzbyBjcmVhdGUgYW4gZW1wdHkgY2VsbCB0byBwcmVzZXJ2ZSBsYXlvdXRcbiAgICAgICAgICBmb290ZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlckNlbGwsIHtcbiAgICAgICAgICAgIGtleTogXCJmb290ZXJfZW1wdHlfXCIuY29uY2F0KGZvb3RlcnMubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25cbiAgICAgICAgICB9LCB1bmRlZmluZWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZm9vdGVycy5sZW5ndGggJiYgaGFzRGVmaW5lZEZvb3RlciA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVGb290ZXIsIG51bGwsIGZvb3RlcnMpIDogbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVCb2R5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlQm9keSgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5lcnJvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvckJvZHkodGhpcy5wcm9wcy5lcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVtcyA9IHRoaXMucHJvcHMuaXRlbXM7XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRW1wdHlCb2R5KCk7XG4gICAgICB9XG5cbiAgICAgIHZhciByb3dzID0gaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAvLyBpZiB0aGVyZSdzIHBhZ2luYXRpb24gdGhlIGl0ZW0ncyBpbmRleCBtdXN0IGJlIGFkanVzdGVkIHRvIHRoZSB3aGVyZSBpdCBpcyBpbiB0aGUgd2hvbGUgZGF0YXNldFxuICAgICAgICB2YXIgdGFibGVJdGVtSW5kZXggPSBoYXNQYWdpbmF0aW9uKF90aGlzNC5wcm9wcykgJiYgX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgPiAwID8gX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZUluZGV4ICogX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgKyBpbmRleCA6IGluZGV4O1xuICAgICAgICByZXR1cm4gX3RoaXM0LnJlbmRlckl0ZW1Sb3coaXRlbSwgdGFibGVJdGVtSW5kZXgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUJvZHksIHtcbiAgICAgICAgYm9keVJlZjogdGhpcy5zZXRUYm9keVxuICAgICAgfSwgcm93cyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckVycm9yQm9keVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJFcnJvckJvZHkoZXJyb3IpIHtcbiAgICAgIHZhciBjb2xTcGFuID0gdGhpcy5wcm9wcy5jb2x1bW5zLmxlbmd0aCArICh0aGlzLnByb3BzLnNlbGVjdGlvbiA/IDEgOiAwKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlQm9keSwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGNvbFNwYW46IGNvbFNwYW4sXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IHtcbiAgICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICAgIH1cbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICB0eXBlOiBcIm1pbnVzSW5DaXJjbGVcIixcbiAgICAgICAgY29sb3I6IFwiZGFuZ2VyXCJcbiAgICAgIH0pLCBcIiBcIiwgZXJyb3IpKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckVtcHR5Qm9keVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJFbXB0eUJvZHkoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM4ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHM4LmNvbHVtbnMsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHM4LnNlbGVjdGlvbixcbiAgICAgICAgICBub0l0ZW1zTWVzc2FnZSA9IF90aGlzJHByb3BzOC5ub0l0ZW1zTWVzc2FnZTtcbiAgICAgIHZhciBjb2xTcGFuID0gY29sdW1ucy5sZW5ndGggKyAoc2VsZWN0aW9uID8gMSA6IDApO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVCb2R5LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgY29sU3BhbjogY29sU3BhbixcbiAgICAgICAgbW9iaWxlT3B0aW9uczoge1xuICAgICAgICAgIHdpZHRoOiAnMTAwJSdcbiAgICAgICAgfVxuICAgICAgfSwgbm9JdGVtc01lc3NhZ2UpKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1Sb3dcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbVJvdyhpdGVtLCByb3dJbmRleCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczkuY29sdW1ucyxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczkuc2VsZWN0aW9uLFxuICAgICAgICAgIGlzU2VsZWN0YWJsZSA9IF90aGlzJHByb3BzOS5pc1NlbGVjdGFibGUsXG4gICAgICAgICAgaGFzQWN0aW9ucyA9IF90aGlzJHByb3BzOS5oYXNBY3Rpb25zLFxuICAgICAgICAgIHJvd0hlYWRlciA9IF90aGlzJHByb3BzOS5yb3dIZWFkZXIsXG4gICAgICAgICAgX3RoaXMkcHJvcHM5JGl0ZW1JZFRvID0gX3RoaXMkcHJvcHM5Lml0ZW1JZFRvRXhwYW5kZWRSb3dNYXAsXG4gICAgICAgICAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9IF90aGlzJHByb3BzOSRpdGVtSWRUbyA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wczkkaXRlbUlkVG8sXG4gICAgICAgICAgaXNFeHBhbmRhYmxlID0gX3RoaXMkcHJvcHM5LmlzRXhwYW5kYWJsZTtcbiAgICAgIHZhciBjZWxscyA9IFtdO1xuICAgICAgdmFyIGl0ZW1JZENhbGxiYWNrID0gdGhpcy5wcm9wcy5pdGVtSWQ7XG4gICAgICB2YXIgaXRlbUlkID0gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZENhbGxiYWNrKSAhPSBudWxsID8gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZENhbGxiYWNrKSA6IHJvd0luZGV4O1xuICAgICAgdmFyIHNlbGVjdGVkID0gIXNlbGVjdGlvbiA/IGZhbHNlIDogdGhpcy5zdGF0ZS5zZWxlY3Rpb24gJiYgISF0aGlzLnN0YXRlLnNlbGVjdGlvbi5maW5kKGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGdldEl0ZW1JZChzZWxlY3RlZEl0ZW0sIGl0ZW1JZENhbGxiYWNrKSA9PT0gaXRlbUlkO1xuICAgICAgfSk7XG4gICAgICB2YXIgY2FsY3VsYXRlZEhhc1NlbGVjdGlvbjtcblxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjZWxscy5wdXNoKHRoaXMucmVuZGVySXRlbVNlbGVjdGlvbkNlbGwoaXRlbUlkLCBpdGVtLCBzZWxlY3RlZCkpO1xuICAgICAgICBjYWxjdWxhdGVkSGFzU2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNhbGN1bGF0ZWRIYXNBY3Rpb25zO1xuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGNvbHVtbkluZGV4KSB7XG4gICAgICAgIGlmIChjb2x1bW4uYWN0aW9ucykge1xuICAgICAgICAgIGNlbGxzLnB1c2goX3RoaXM1LnJlbmRlckl0ZW1BY3Rpb25zQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpKTtcbiAgICAgICAgICBjYWxjdWxhdGVkSGFzQWN0aW9ucyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgdmFyIGZpZWxkRGF0YUNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICBjZWxscy5wdXNoKF90aGlzNS5yZW5kZXJJdGVtRmllbGREYXRhQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIGZpZWxkRGF0YUNvbHVtbi5maWVsZCA9PT0gcm93SGVhZGVyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2VsbHMucHVzaChfdGhpczUucmVuZGVySXRlbUNvbXB1dGVkQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7IC8vIE9jY3VweSBmdWxsIHdpZHRoIG9mIHRhYmxlLCB0YWtpbmcgY2hlY2tib3ggJiBtb2JpbGUgb25seSBjb2x1bW5zIGludG8gYWNjb3VudC5cblxuICAgICAgdmFyIGV4cGFuZGVkUm93Q29sU3BhbiA9IHNlbGVjdGlvbiA/IGNvbHVtbnMubGVuZ3RoICsgMSA6IGNvbHVtbnMubGVuZ3RoO1xuICAgICAgdmFyIG1vYmlsZU9ubHlDb2xzID0gY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24gKG51bSwgY29sdW1uKSB7XG4gICAgICAgIHZhciBfbW9iaWxlT3B0aW9ucztcblxuICAgICAgICByZXR1cm4gY29sdW1uICE9PSBudWxsICYmIGNvbHVtbiAhPT0gdm9pZCAwICYmIChfbW9iaWxlT3B0aW9ucyA9IGNvbHVtbi5tb2JpbGVPcHRpb25zKSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyAhPT0gdm9pZCAwICYmIF9tb2JpbGVPcHRpb25zLm9ubHkgPyBudW0gKyAxIDogbnVtICsgMDsgLy8gQldDIG9ubHlcbiAgICAgIH0sIDApO1xuICAgICAgZXhwYW5kZWRSb3dDb2xTcGFuID0gZXhwYW5kZWRSb3dDb2xTcGFuIC0gbW9iaWxlT25seUNvbHM7IC8vIFdlJ2xsIHVzZSB0aGUgSUQgdG8gYXNzb2NpYXRlIHRoZSBleHBhbmRlZCByb3cgd2l0aCB0aGUgb3JpZ2luYWwuXG5cbiAgICAgIHZhciBoYXNFeHBhbmRlZFJvdyA9IGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXAuaGFzT3duUHJvcGVydHkoaXRlbUlkKTtcbiAgICAgIHZhciBleHBhbmRlZFJvd0lkID0gaGFzRXhwYW5kZWRSb3cgPyBcInJvd19cIi5jb25jYXQoaXRlbUlkLCBcIl9leHBhbnNpb25cIikgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgZXhwYW5kZWRSb3cgPSBoYXNFeHBhbmRlZFJvdyA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIHtcbiAgICAgICAgaWQ6IGV4cGFuZGVkUm93SWQsXG4gICAgICAgIGlzRXhwYW5kZWRSb3c6IHRydWUsXG4gICAgICAgIGlzU2VsZWN0YWJsZTogaXNTZWxlY3RhYmxlXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBjb2xTcGFuOiBleHBhbmRlZFJvd0NvbFNwYW4sXG4gICAgICAgIHRleHRPbmx5OiBmYWxzZVxuICAgICAgfSwgaXRlbUlkVG9FeHBhbmRlZFJvd01hcFtpdGVtSWRdKSkgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgcm93UHJvcHNDYWxsYmFjayA9IHRoaXMucHJvcHMucm93UHJvcHM7XG4gICAgICB2YXIgcm93UHJvcHMgPSBnZXRSb3dQcm9wcyhpdGVtLCByb3dQcm9wc0NhbGxiYWNrKTtcblxuICAgICAgdmFyIHJvdyA9IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIF9leHRlbmRzKHtcbiAgICAgICAgXCJhcmlhLW93bnNcIjogZXhwYW5kZWRSb3dJZCxcbiAgICAgICAgaXNTZWxlY3RhYmxlOiBpc1NlbGVjdGFibGUgPT0gbnVsbCA/IGNhbGN1bGF0ZWRIYXNTZWxlY3Rpb24gOiBpc1NlbGVjdGFibGUsXG4gICAgICAgIGlzU2VsZWN0ZWQ6IHNlbGVjdGVkLFxuICAgICAgICBoYXNBY3Rpb25zOiBoYXNBY3Rpb25zID09IG51bGwgPyBjYWxjdWxhdGVkSGFzQWN0aW9ucyA6IGhhc0FjdGlvbnMsXG4gICAgICAgIGlzRXhwYW5kYWJsZTogaXNFeHBhbmRhYmxlXG4gICAgICB9LCByb3dQcm9wcyksIGNlbGxzKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIHtcbiAgICAgICAga2V5OiBcInJvd19cIi5jb25jYXQoaXRlbUlkKVxuICAgICAgfSwgcm93LCBleHBhbmRlZFJvdyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsKGl0ZW1JZCwgaXRlbSwgc2VsZWN0ZWQpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5wcm9wcy5zZWxlY3Rpb247XG4gICAgICB2YXIga2V5ID0gXCJfc2VsZWN0aW9uX2NvbHVtbl9cIi5jb25jYXQoaXRlbUlkKTtcbiAgICAgIHZhciBjaGVja2VkID0gc2VsZWN0ZWQ7XG4gICAgICB2YXIgZGlzYWJsZWQgPSBzZWxlY3Rpb24uc2VsZWN0YWJsZSAmJiAhc2VsZWN0aW9uLnNlbGVjdGFibGUoaXRlbSk7XG4gICAgICB2YXIgdGl0bGUgPSBzZWxlY3Rpb24uc2VsZWN0YWJsZU1lc3NhZ2UgJiYgc2VsZWN0aW9uLnNlbGVjdGFibGVNZXNzYWdlKCFkaXNhYmxlZCwgaXRlbSk7XG5cbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgIF90aGlzNi5jaGFuZ2VTZWxlY3Rpb24oW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShfdGhpczYuc3RhdGUuc2VsZWN0aW9uKSwgW2l0ZW1dKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGl0ZW1JZENhbGxiYWNrID0gX3RoaXM2LnByb3BzLml0ZW1JZDtcblxuICAgICAgICAgIF90aGlzNi5jaGFuZ2VTZWxlY3Rpb24oX3RoaXM2LnN0YXRlLnNlbGVjdGlvbi5yZWR1Y2UoZnVuY3Rpb24gKHNlbGVjdGlvbiwgc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICBpZiAoZ2V0SXRlbUlkKHNlbGVjdGVkSXRlbSwgaXRlbUlkQ2FsbGJhY2spICE9PSBpdGVtSWQpIHtcbiAgICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2goc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICAgICAgICB9LCBbXSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGxDaGVja2JveCwge1xuICAgICAgICBrZXk6IGtleVxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUuc2VsZWN0VGhpc1Jvd1wiLFxuICAgICAgICBkZWZhdWx0OiBcIlNlbGVjdCB0aGlzIHJvd1wiXG4gICAgICB9LCBmdW5jdGlvbiAoc2VsZWN0VGhpc1Jvdykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDaGVja2JveCwge1xuICAgICAgICAgIGlkOiBcIlwiLmNvbmNhdChfdGhpczYudGFibGVJZCkuY29uY2F0KGtleSwgXCItY2hlY2tib3hcIiksXG4gICAgICAgICAgdHlwZTogXCJpbkxpc3RcIixcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlIHx8IHNlbGVjdFRoaXNSb3csXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRpdGxlIHx8IHNlbGVjdFRoaXNSb3csXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNoZWNrYm94U2VsZWN0Um93LVwiLmNvbmNhdChpdGVtSWQpXG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQWN0aW9uc0NlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbUFjdGlvbnNDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIHZhciBhY3Rpb25FbmFibGVkID0gZnVuY3Rpb24gYWN0aW9uRW5hYmxlZChhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIF90aGlzNy5zdGF0ZS5zZWxlY3Rpb24ubGVuZ3RoID09PSAwICYmICghYWN0aW9uLmVuYWJsZWQgfHwgYWN0aW9uLmVuYWJsZWQoaXRlbSkpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGFjdHVhbEFjdGlvbnMgPSBjb2x1bW4uYWN0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICByZXR1cm4gIWFjdGlvbi5hdmFpbGFibGUgfHwgYWN0aW9uLmF2YWlsYWJsZShpdGVtKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYWN0dWFsQWN0aW9ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgIC8vIGlmIGFueSBvZiB0aGUgYWN0aW9ucyBgaXNQcmltYXJ5YCwgYWRkIHRoZW0gaW5saW5lIGFzIHdlbGwsIGJ1dCBvbmx5IHRoZSBmaXJzdCAyXG4gICAgICAgIHZhciBwcmltYXJ5QWN0aW9ucyA9IGFjdHVhbEFjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgcmV0dXJuIG8uaXNQcmltYXJ5O1xuICAgICAgICB9KTtcbiAgICAgICAgYWN0dWFsQWN0aW9ucyA9IHByaW1hcnlBY3Rpb25zLnNsaWNlKDAsIDIpOyAvLyBpZiB3ZSBoYXZlIG1vcmUgdGhhbiAxIGFjdGlvbiwgd2UgZG9uJ3Qgc2hvdyB0aGVtIGFsbCBpbiB0aGUgY2VsbCwgaW5zdGVhZCB3ZVxuICAgICAgICAvLyBwdXQgdGhlbSBhbGwgaW4gYSBwb3BvdmVyIHRvb2wuIFRoaXMgZWZmZWN0aXZlbHkgbWVhbnMgd2UgY2FuIG9ubHkgaGF2ZSBhIG1heGltdW1cbiAgICAgICAgLy8gb2Ygb25lIHRvb2wgcGVyIHJvdyAoaXQncyBlaXRoZXIgYW5kIG5vcm1hbCBhY3Rpb24sIG9yIGl0J3MgYSBwb3BvdmVyIHRoYXQgc2hvd3MgbXVsdGlwbGUgYWN0aW9ucylcbiAgICAgICAgLy9cbiAgICAgICAgLy8gaGVyZSB3ZSBjcmVhdGUgYSBzaW5nbGUgY3VzdG9tIGFjdGlvbiB0aGF0IHRyaWdnZXJzIHRoZSBwb3BvdmVyIHdpdGggYWxsIHRoZSBjb25maWd1cmVkIGFjdGlvbnNcblxuICAgICAgICBhY3R1YWxBY3Rpb25zLnB1c2goe1xuICAgICAgICAgIG5hbWU6ICdBbGwgYWN0aW9ucycsXG4gICAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29sbGFwc2VkSXRlbUFjdGlvbnMsIHtcbiAgICAgICAgICAgICAgYWN0aW9uczogY29sdW1uLmFjdGlvbnMsXG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICBhY3Rpb25FbmFibGVkOiBhY3Rpb25FbmFibGVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgdG9vbHMgPSBfX19FbW90aW9uSlNYKEV4cGFuZGVkSXRlbUFjdGlvbnMsIHtcbiAgICAgICAgYWN0aW9uczogYWN0dWFsQWN0aW9ucyxcbiAgICAgICAgaXRlbUlkOiBpdGVtSWQsXG4gICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgIGFjdGlvbkVuYWJsZWQ6IGFjdGlvbkVuYWJsZWRcbiAgICAgIH0pO1xuXG4gICAgICB2YXIga2V5ID0gXCJyZWNvcmRfYWN0aW9uc19cIi5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGNvbHVtbkluZGV4KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBzaG93T25Ib3ZlcjogdHJ1ZSxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgIHRleHRPbmx5OiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uczogdHJ1ZVxuICAgICAgfSwgdG9vbHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtRmllbGREYXRhQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtRmllbGREYXRhQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIHNldFNjb3BlUm93KSB7XG4gICAgICB2YXIgZmllbGQgPSBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgcmVuZGVyID0gY29sdW1uLnJlbmRlcixcbiAgICAgICAgICBkYXRhVHlwZSA9IGNvbHVtbi5kYXRhVHlwZTtcbiAgICAgIHZhciBrZXkgPSBcIl9kYXRhX2NvbHVtbl9cIi5jb25jYXQoZmllbGQsIFwiX1wiKS5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGNvbHVtbkluZGV4KTtcbiAgICAgIHZhciBjb250ZW50UmVuZGVyZXIgPSByZW5kZXIgfHwgdGhpcy5nZXRSZW5kZXJlckZvckRhdGFUeXBlKGRhdGFUeXBlKTtcbiAgICAgIHZhciB2YWx1ZSA9IGdldChpdGVtLCBmaWVsZCk7XG4gICAgICB2YXIgY29udGVudCA9IGNvbnRlbnRSZW5kZXJlcih2YWx1ZSwgaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGtleSwgY29udGVudCwgc2V0U2NvcGVSb3cpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQ29tcHV0ZWRDZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1Db21wdXRlZENlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4KSB7XG4gICAgICB2YXIgcmVuZGVyID0gY29sdW1uLnJlbmRlcjtcbiAgICAgIHZhciBrZXkgPSBcIl9jb21wdXRlZF9jb2x1bW5fXCIuY29uY2F0KGl0ZW1JZCwgXCJfXCIpLmNvbmNhdChjb2x1bW5JbmRleCk7XG4gICAgICB2YXIgY29udGVudFJlbmRlcmVyID0gcmVuZGVyIHx8IHRoaXMuZ2V0UmVuZGVyZXJGb3JEYXRhVHlwZSgpO1xuICAgICAgdmFyIGNvbnRlbnQgPSBjb250ZW50UmVuZGVyZXIoaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGtleSwgY29udGVudCwgZmFsc2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGtleSwgY29udGVudCwgc2V0U2NvcGVSb3cpIHtcbiAgICAgIHZhciBfcmVmOCA9IGNvbHVtbixcbiAgICAgICAgICBhbGlnbiA9IF9yZWY4LmFsaWduLFxuICAgICAgICAgIHJlbmRlciA9IF9yZWY4LnJlbmRlcixcbiAgICAgICAgICBkYXRhVHlwZSA9IF9yZWY4LmRhdGFUeXBlLFxuICAgICAgICAgIGlzRXhwYW5kZXIgPSBfcmVmOC5pc0V4cGFuZGVyLFxuICAgICAgICAgIHRleHRPbmx5ID0gX3JlZjgudGV4dE9ubHksXG4gICAgICAgICAgbmFtZSA9IF9yZWY4Lm5hbWUsXG4gICAgICAgICAgZmllbGQgPSBfcmVmOC5maWVsZCxcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IF9yZWY4LmRlc2NyaXB0aW9uLFxuICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjguc29ydGFibGUsXG4gICAgICAgICAgZm9vdGVyID0gX3JlZjguZm9vdGVyLFxuICAgICAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmOC5tb2JpbGVPcHRpb25zLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjgsIF9leGNsdWRlZDIpO1xuXG4gICAgICB2YXIgY29sdW1uQWxpZ24gPSBhbGlnbiB8fCB0aGlzLmdldEFsaWduRm9yRGF0YVR5cGUoZGF0YVR5cGUpO1xuICAgICAgdmFyIGNlbGxQcm9wc0NhbGxiYWNrID0gdGhpcy5wcm9wcy5jZWxsUHJvcHM7XG4gICAgICB2YXIgY2VsbFByb3BzID0gZ2V0Q2VsbFByb3BzKGl0ZW0sIGNvbHVtbiwgY2VsbFByb3BzQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgIGlzRXhwYW5kZXI6IGlzRXhwYW5kZXIsXG4gICAgICAgIHRleHRPbmx5OiB0ZXh0T25seSB8fCAhcmVuZGVyLFxuICAgICAgICBzZXRTY29wZVJvdzogc2V0U2NvcGVSb3csXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbW9iaWxlT3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgcmVuZGVyOiBtb2JpbGVPcHRpb25zICYmIG1vYmlsZU9wdGlvbnMucmVuZGVyICYmIG1vYmlsZU9wdGlvbnMucmVuZGVyKGl0ZW0pLFxuICAgICAgICAgIGhlYWRlcjogbW9iaWxlT3B0aW9ucyAmJiBtb2JpbGVPcHRpb25zLmhlYWRlciA9PT0gZmFsc2UgPyBmYWxzZSA6IG5hbWVcbiAgICAgICAgfSlcbiAgICAgIH0sIGNlbGxQcm9wcywgcmVzdCksIGNvbnRlbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZW5kZXJlckZvckRhdGFUeXBlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVyRm9yRGF0YVR5cGUoKSB7XG4gICAgICB2YXIgZGF0YVR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdhdXRvJztcbiAgICAgIHZhciBwcm9maWxlID0gZGF0YVR5cGVzUHJvZmlsZXNbZGF0YVR5cGVdO1xuXG4gICAgICBpZiAoIXByb2ZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBkYXRhVHlwZSBbXCIuY29uY2F0KGRhdGFUeXBlLCBcIl0uIFRoZSBzdXBwb3J0ZWQgZGF0YSB0eXBlcyBhcmUgW1wiKS5jb25jYXQoREFUQV9UWVBFUy5qb2luKCcsICcpLCBcIl1cIikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvZmlsZS5yZW5kZXI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEFsaWduRm9yRGF0YVR5cGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWxpZ25Gb3JEYXRhVHlwZSgpIHtcbiAgICAgIHZhciBkYXRhVHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ2F1dG8nO1xuICAgICAgdmFyIHByb2ZpbGUgPSBkYXRhVHlwZXNQcm9maWxlc1tkYXRhVHlwZV07XG5cbiAgICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlIFtcIi5jb25jYXQoZGF0YVR5cGUsIFwiXS4gVGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzIGFyZSBbXCIpLmNvbmNhdChEQVRBX1RZUEVTLmpvaW4oJywgJyksIFwiXVwiKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9maWxlLmFsaWduO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJQYWdpbmF0aW9uQmFyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclBhZ2luYXRpb25CYXIoKSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMTAgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGVycm9yID0gX3RoaXMkcHJvcHMxMC5lcnJvcixcbiAgICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHMxMC5wYWdpbmF0aW9uLFxuICAgICAgICAgIHRhYmxlQ2FwdGlvbiA9IF90aGlzJHByb3BzMTAudGFibGVDYXB0aW9uLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMxMC5vbkNoYW5nZTtcblxuICAgICAgaWYgKCFlcnJvciAmJiBwYWdpbmF0aW9uICYmIHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGlmICghb25DaGFuZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgQmFzaWMgVGFibGUgaXMgY29uZmlndXJlZCB3aXRoIHBhZ2luYXRpb24gYnV0IFtvbkNoYW5nZV0gaXNcXG4gICAgICAgIG5vdCBjb25maWd1cmVkLiBUaGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHBhZ2luYXRpb24gY2hhbmdlc1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlUGFnaW5hdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiUGFnaW5hdGlvbiBmb3IgdGFibGU6IHt0YWJsZUNhcHRpb259XCIsXG4gICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICB0YWJsZUNhcHRpb246IHRhYmxlQ2FwdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKHRhYmxlUGFnaW5hdGlvbikge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CYXIsIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb24sXG4gICAgICAgICAgICBvblBhZ2VTaXplQ2hhbmdlOiBfdGhpczgub25QYWdlU2l6ZUNoYW5nZS5iaW5kKF90aGlzOCksXG4gICAgICAgICAgICBvblBhZ2VDaGFuZ2U6IF90aGlzOC5vblBhZ2VDaGFuZ2UuYmluZChfdGhpczgpLFxuICAgICAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IF90aGlzOC50YWJsZUlkLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRhYmxlUGFnaW5hdGlvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAoIW5leHRQcm9wcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gbmV4dCBwcm9wcyBkb2Vzbid0IGhhdmUgYSBzZWxlY3Rpb24sIHJlc2V0IG91ciBzdGF0ZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlbGVjdGlvbjogW11cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZW1JZCA9IG5leHRQcm9wcy5pdGVtSWQ7XG4gICAgICB2YXIgc2VsZWN0aW9uID0gcHJldlN0YXRlLnNlbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICByZXR1cm4gbmV4dFByb3BzLml0ZW1zLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBnZXRJdGVtSWQoaXRlbSwgaXRlbUlkKSA9PT0gZ2V0SXRlbUlkKHNlbGVjdGVkSXRlbSwgaXRlbUlkKTtcbiAgICAgICAgfSkgIT09IC0xO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoICE9PSBwcmV2U3RhdGUuc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBpZiAobmV4dFByb3BzLnNlbGVjdGlvbi5vblNlbGVjdGlvbkNoYW5nZSkge1xuICAgICAgICAgIG5leHRQcm9wcy5zZWxlY3Rpb24ub25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb25cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyB1c2VkIGZvciBtb3ZpbmcgaW4gJiBvdXQgb2YgYGxvYWRpbmdgIHN0YXRlXG5cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlCYXNpY1RhYmxlO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQmFzaWNUYWJsZSwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICByZXNwb25zaXZlOiB0cnVlLFxuICB0YWJsZUxheW91dDogJ2ZpeGVkJyxcbiAgbm9JdGVtc01lc3NhZ2U6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUubm9JdGVtc01lc3NhZ2VcIixcbiAgICBkZWZhdWx0OiBcIk5vIGl0ZW1zIGZvdW5kXCJcbiAgfSlcbn0pO1xuXG5FdWlCYXNpY1RhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyBob3cgdG8gZXh0cmFjdCBhIHVuaXF1ZSBJRCBmcm9tIGVhY2ggaXRlbSwgdXNlZCBmb3Igc2VsZWN0aW9ucyAmIGV4cGFuZGVkIHJvd3NcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBEZXNjcmliZXMgaG93IHRvIGV4dHJhY3QgYSB1bmlxdWUgSUQgZnJvbSBlYWNoIGl0ZW0sIHVzZWQgZm9yIHNlbGVjdGlvbnMgJiBleHBhbmRlZCByb3dzXG4gICAgICovXG4gIGl0ZW1JZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBSb3cgZXhwYW5zaW9uIHVzZXMgdGhlIGl0ZW1JZCBwcm9wIHRvIGlkZW50aWZ5IGVhY2ggcm93XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUm93IGV4cGFuc2lvbiB1c2VzIHRoZSBpdGVtSWQgcHJvcCB0byBpZGVudGlmeSBlYWNoIHJvd1xuICAgICAqL1xuICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuXG4gIC8qKlxuICAgICAqIEEgbGlzdCBvZiBvYmplY3RzIHRvIGFwcGVhciBpbiB0aGUgdGFibGUgLSBhbiBpdGVtIHBlciByb3dcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBIGxpc3Qgb2Ygb2JqZWN0cyB0byBhcHBlYXIgaW4gdGhlIHRhYmxlIC0gYW4gaXRlbSBwZXIgcm93XG4gICAgICovXG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gYEV1aVRhYmxlUm93Q2VsbGBcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd0NlbGxgXG4gICAgICovXG4gIGNlbGxQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRXVpVGFibGVGaWVsZERhdGFDb2x1bW5UeXBlLCAjRXVpVGFibGVDb21wdXRlZENvbHVtblR5cGUgb3IgI0V1aVRhYmxlQWN0aW9uc0NvbHVtblR5cGUuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRXVpVGFibGVGaWVsZERhdGFDb2x1bW5UeXBlLCAjRXVpVGFibGVDb21wdXRlZENvbHVtblR5cGUgb3IgI0V1aVRhYmxlQWN0aW9uc0NvbHVtblR5cGUuXG4gICAgICovXG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBIGZpZWxkIG9mIHRoZSBpdGVtIChtYXkgYmUgYSBuZXN0ZWQgZmllbGQpXG4gICAgICAgKi9cbiAgICAvLyB0eXBlIGhhY2sgdXNlZCBmb3IgYmV0dGVyIGF1dG9jb21wbGV0ZSBzdXBwb3J0XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yOTcyOVxuICAgIGZpZWxkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgLy8gc3VwcG9ydHMgb3V0ZXIuaW5uZXIga2V5IHBhdGhzXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgY29sdW1uICh3aWxsIGJlIHByZXNlbnRlZCBhcyBhIHRpdGxlIG92ZXIgdGhlIGNvbHVtbiBoZWFkZXIpXG4gICAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogRGVzY3JpYmVzIHRoZSBkYXRhIHR5cGVzIG9mIHRoZSBkaXNwbGF5ZWQgdmFsdWUgKHNlcnZlcyBhcyBhIHJlbmRlcmluZyBoaW50IGZvciB0aGUgdGFibGUpXG4gICAgICAgKi9cbiAgICBkYXRhVHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImF1dG9cIiwgXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCIsIFwiZGF0ZVwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIEEgQ1NTIHdpZHRoIHByb3BlcnR5LiBIaW50cyBmb3IgdGhlIHJlcXVpcmVkIHdpZHRoIG9mIHRoZSBjb2x1bW4gKGUuZy4gXCIzMCVcIiwgXCIxMDBweFwiLCBldGMuLilcbiAgICAgICAqL1xuICAgIHdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHVzZXIgY2FuIHNvcnQgb24gdGhpcyBjb2x1bW4uIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgdG8gc29ydCBhZ2FpbnN0XG4gICAgICAgKi9cbiAgICBzb3J0YWJsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAgIGlzRXhwYW5kZXI6IFByb3BUeXBlcy5ib29sLFxuICAgIHRleHRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRGVmaW5lcyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNvbHVtbiBzaG91bGQgdHJ1bmNhdGUgaXRzIGNvbnRlbnQgd2hlbiBpdCBkb2Vzbid0IGZpdFxuICAgICAgICovXG4gICAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBtb2JpbGVPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuY1xuICAgIH0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZXNjcmliZSBhIGN1c3RvbSByZW5kZXJlciBmdW5jdGlvbiBmb3IgdGhlIGNvbnRlbnRcbiAgICAgICAqL1xuICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIENvbnRlbnQgdG8gZGlzcGxheSBpbiB0aGUgZm9vdGVyIGJlbmVhdGggdGhpcyBjb2x1bW5cbiAgICAgICAqL1xuICAgIGZvb3RlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIERpc2FibGVzIHRoZSB1c2VyJ3MgYWJpbGl0eSB0byBjaGFuZ2UgdGhlIHNvcnQgYnV0IHN0aWxsIHNob3dzIHRoZSBjdXJyZW50IGRpcmVjdGlvblxuICAgICAgICovXG4gICAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyB0aGUgdmFsdWUgZm9yIGVhY2ggaXRlbSBhbmQgcmVuZGVycyBpdFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjb2x1bW4gKHdpbGwgYmUgcHJlc2VudGVkIGFzIGEgdGl0bGUgb3ZlciB0aGUgY29sdW1uIGhlYWRlclxuICAgICAgICovXG4gICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIElmIHByb3ZpZGVkLCBhbGxvd3MgdGhpcyBjb2x1bW4gdG8gYmUgc29ydGVkIG9uLiBNdXN0IHJldHVybiB0aGUgdmFsdWUgdG8gc29ydCBhZ2FpbnN0LlxuICAgICAgICovXG4gICAgc29ydGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIENTUyB3aWR0aCBwcm9wZXJ0eS4gSGludHMgZm9yIHRoZSByZXF1aXJlZCB3aWR0aCBvZiB0aGUgY29sdW1uXG4gICAgICAgKi9cbiAgICB3aWR0aDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjb2x1bW4gc2hvdWxkIHRydW5jYXRlIGl0cyBjb250ZW50IHdoZW4gaXQgZG9lc24ndCBmaXRcbiAgICAgICAqL1xuICAgIHRydW5jYXRlVGV4dDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNFeHBhbmRlcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBEaXNhYmxlcyB0aGUgdXNlcidzIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBzb3J0IGJ1dCBzdGlsbCBzaG93cyB0aGUgY3VycmVudCBkaXJlY3Rpb25cbiAgICAgICAqL1xuICAgIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBbiBhcnJheSBvZiBvbmUgb2YgdGhlIG9iamVjdHM6ICNEZWZhdWx0SXRlbUFjdGlvbiBvciAjQ3VzdG9tSXRlbUFjdGlvblxuICAgICAgICovXG4gICAgYWN0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdHlwZSBvZiBhY3Rpb25cbiAgICAgICAgICovXG4gICAgICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImljb25cIl0pLmlzUmVxdWlyZWRdKSxcblxuICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGNvbG9yIG9mIHRoZSBidXR0b25cbiAgICAgICAgICovXG4gICAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSldKSxcblxuICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGFjdGlvbiAod2lsbCBiZSB0aGUgYnV0dG9uIGNhcHRpb24pXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gY2FwdGlvbilcbiAgICAgICAgICovXG4gICAgICBuYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAgICAgLyoqXG4gICAgICAgICAqIERlc2NyaWJlcyB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gdGl0bGUpXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiB0aXRsZSlcbiAgICAgICAgICovXG4gICAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGFjdGlvblxuICAgICAgICAgKi9cblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgaGFuZGxlciBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBhY3Rpb25cbiAgICAgICAgICovXG4gICAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICAgKi9cbiAgICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICAgKi9cblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgICAqL1xuICAgICAgZW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBpc1ByaW1hcnk6IFByb3BUeXBlcy5ib29sLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQXNzb2NpYXRlcyBhbiBpY29uIHdpdGggdGhlIGJ1dHRvblxuICAgICAgICAgKi9cbiAgICAgIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gICAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZnVuY3Rpb24gdGhhdCByZW5kZXJzIHRoZSBhY3Rpb24uIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgbm9kZSBpcyBleHBlY3RlZCB0byBoYXZlIGBvbkZvY3VzYCBhbmQgYG9uQmx1cmAgZnVuY3Rpb25zXG4gICAgICAgICAqL1xuICAgICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayB0aGF0IGRlZmluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICAgKi9cbiAgICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICAgKi9cbiAgICAgIGVuYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgaXNQcmltYXJ5OiBQcm9wVHlwZXMuYm9vbFxuICAgIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjb2x1bW4gKHdpbGwgYmUgcHJlc2VudGVkIGFzIGEgdGl0bGUgb3ZlciB0aGUgY29sdW1uIGhlYWRlclxuICAgICAgICovXG4gICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIEEgQ1NTIHdpZHRoIHByb3BlcnR5LiBIaW50cyBmb3IgdGhlIHJlcXVpcmVkIHdpZHRoIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIHdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKSxcblxuICAvKipcbiAgICAgKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXlcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXlcbiAgICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRGVzY3JpYmVzIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGNhcHRpb24gd2lsbCBiZSBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93cy5cIlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyB0aGUgY29udGVudCBvZiB0aGUgdGFibGUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjYXB0aW9uIHdpbGwgYmUgXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3MuXCJcbiAgICAgKi9cbiAgdGFibGVDYXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGljaCBjb2x1bW4gc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGlkZW50aWZ5aW5nIGNlbGwgaW4gZWFjaCByb3cuIFNob3VsZCBtYXRjaCBhIFwiZmllbGRcIiBwcm9wIGluIEZpZWxkRGF0YUNvbHVtblxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGljaCBjb2x1bW4gc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGlkZW50aWZ5aW5nIGNlbGwgaW4gZWFjaCByb3cuIFNob3VsZCBtYXRjaCBhIFwiZmllbGRcIiBwcm9wIGluIEZpZWxkRGF0YUNvbHVtblxuICAgICAqL1xuICByb3dIZWFkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhhc0FjdGlvbnM6IFByb3BUeXBlcy5ib29sLFxuICBpc0V4cGFuZGFibGU6IFByb3BUeXBlcy5ib29sLFxuICBpc1NlbGVjdGFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFByb3ZpZGVzIGFuIGluZmluaXRlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUHJvdmlkZXMgYW4gaW5maW5pdGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgKi9cbiAgbG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogTWVzc2FnZSB0byBkaXNwbGF5IGlmIHRhYmxlIGlzIGVtcHR5XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogTWVzc2FnZSB0byBkaXNwbGF5IGlmIHRhYmxlIGlzIGVtcHR5XG4gICAgICovXG4gIG5vSXRlbXNNZXNzYWdlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbmV2ZXIgcGFnaW5hdGlvbiBvciBzb3J0aW5nIGNoYW5nZXMgKHRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgd2hlbiBlaXRoZXIgcGFnaW5hdGlvbiBvciBzb3J0aW5nIGlzIGNvbmZpZ3VyZWQpLiBTZWUgI0NyaXRlcmlhIG9yICNDcml0ZXJpYVdpdGhQYWdpbmF0aW9uXG4gICAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNQYWdpbmF0aW9uXG4gICAgICovXG4gIHBhZ2luYXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSksIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBUaGUgY3VycmVudCBwYWdlICh6ZXJvLWJhc2VkKSBpbmRleFxuICAgICAgICovXG4gICAgcGFnZUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzaG93biBpbiBhIHNpbmdsZSBwYWdlLlxuICAgICAgICogUGFzcyBgMGAgdG8gZGlzcGxheSB0aGUgc2VsZWN0ZWQgXCJTaG93IGFsbFwiIG9wdGlvbiBhbmQgaGlkZSB0aGUgcGFnaW5hdGlvbi5cbiAgICAgICAqL1xuICAgIHBhZ2VTaXplOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgdGhlIHBhZ2UgaXMgXCJzbGljZWRcIiBvZlxuICAgICAgICovXG4gICAgdG90YWxJdGVtQ291bnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogQ29uZmlndXJlcyB0aGUgcGFnZSBzaXplIGRyb3Bkb3duIG9wdGlvbnMuXG4gICAgICAgKiBQYXNzIGAwYCBhcyBvbmUgb2YgdGhlIG9wdGlvbnMgdG8gY3JlYXRlIGEgXCJTaG93IGFsbFwiIG9wdGlvbi5cbiAgICAgICAqL1xuICAgIHBhZ2VTaXplT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkKSxcblxuICAgIC8qKlxuICAgICAgICogSGlkZXMgdGhlIHBhZ2Ugc2l6ZSBkcm9wZG93blxuICAgICAgICovXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zOiBQcm9wVHlwZXMuYm9vbFxuICB9KV0pLFxuXG4gIC8qKlxuICAgICAqIElmIHRydWUsIHdpbGwgY29udmVydCB0YWJsZSB0byBjYXJkcyBpbiBtb2JpbGUgdmlld1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIElmIHRydWUsIHdpbGwgY29udmVydCB0YWJsZSB0byBjYXJkcyBpbiBtb2JpbGUgdmlld1xuICAgICAqL1xuICByZXNwb25zaXZlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd2BcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd2BcbiAgICAgKi9cbiAgcm93UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU2VsZWN0aW9uVHlwZVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU2VsZWN0aW9uVHlwZVxuICAgICAqL1xuICBzZWxlY3Rpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGl0ZW0gc2VsZWN0aW9uIGNoYW5nZXNcbiAgICAgICAqL1xuICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCBwZXIgaXRlbSB0byBpbmRpY2F0ZSB3aGV0aGVyIGl0IGlzIHNlbGVjdGFibGVcbiAgICAgICAqL1xuICAgIHNlbGVjdGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHBlciBpdGVtIHRvIHJldHJpZXZlIGEgbWVzc2FnZSBmb3IgaXRzIHNlbGVjdGFibGUgc3RhdGUuV2UgZGlzcGxheSB0aGVzZSBtZXNzYWdlcyBhcyBhIHRvb2x0aXAgb24gYW4gdW5zZWxlY3RhYmxlIGNoZWNrYm94XG4gICAgICAgKi9cbiAgICBzZWxlY3RhYmxlTWVzc2FnZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaW5pdGlhbFNlbGVjdGVkOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpXG4gIH0pLFxuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU29ydGluZ1R5cGVcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNFdWlUYWJsZVNvcnRpbmdUeXBlXG4gICAgICovXG4gIHNvcnRpbmc6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBJbmRpY2F0ZXMgdGhlIHByb3BlcnR5L2ZpZWxkIHRvIHNvcnQgb25cbiAgICAgICAqL1xuICAgIHNvcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBmaWVsZDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgICAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYXNjXCIsIFwiZGVzY1wiXSkuaXNSZXF1aXJlZFxuICAgIH0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBFbmFibGVzL2Rpc2FibGVzIHVuc29ydGluZyBvZiB0YWJsZSBjb2x1bW5zLiBTdXBwb3J0ZWQgYnkgRXVpSW5NZW1vcnlUYWJsZS5cbiAgICAgICAqL1xuICAgIGFsbG93TmV1dHJhbFNvcnQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBFbmFibGVzIHRoZSBkZWZhdWx0IHNvcnRpbmcgYWJpbGl0eSBmb3IgZWFjaCBjb2x1bW4uXG4gICAgICAgKi9cbiAgICBlbmFibGVBbGxDb2x1bW5zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRGlzYWJsZXMgdGhlIHVzZXIncyBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgc29ydCBidXQgc3RpbGwgc2hvd3MgdGhlIGN1cnJlbnQgZGlyZWN0aW9uXG4gICAgICAgKi9cbiAgICByZWFkT25seTogUHJvcFR5cGVzLmJvb2xcbiAgfSksXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eS4gTm90ZSB0aGF0IGF1dG8gdGFibGVMYXlvdXQgcHJldmVudHMgdHJ1bmNhdGVUZXh0IGZyb20gd29ya2luZyBwcm9wZXJseS5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSB0YWJsZS1sYXlvdXQgQ1NTIHByb3BlcnR5LiBOb3RlIHRoYXQgYXV0byB0YWJsZUxheW91dCBwcmV2ZW50cyB0cnVuY2F0ZVRleHQgZnJvbSB3b3JraW5nIHByb3Blcmx5LlxuICAgICAqL1xuICB0YWJsZUxheW91dDogUHJvcFR5cGVzLm9uZU9mKFtcImZpeGVkXCIsIFwiYXV0b1wiXSksXG5cbiAgLyoqXG4gICAgICogQXBwbGllZCB0byB0YWJsZSBjZWxscyA9PiBBbnkgY2VsbCB1c2luZyByZW5kZXIgZnVuY3Rpb24gd2lsbCBzZXQgdGhpcyB0byBiZSBmYWxzZSwgbGVhZGluZyB0byB1bm5lY2Vzc2FyeSB3b3JkIGJyZWFrcy4gQXBwbHkgdGV4dE9ubHk6IHRydWUgaW4gb3JkZXIgdG8gZW5zdXJlIGl0IGJyZWFrcyBwcm9wZXJseVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gdGFibGUgY2VsbHMgPT4gQW55IGNlbGwgdXNpbmcgcmVuZGVyIGZ1bmN0aW9uIHdpbGwgc2V0IHRoaXMgdG8gYmUgZmFsc2UsIGxlYWRpbmcgdG8gdW5uZWNlc3Nhcnkgd29yZCBicmVha3MuIEFwcGx5IHRleHRPbmx5OiB0cnVlIGluIG9yZGVyIHRvIGVuc3VyZSBpdCBicmVha3MgcHJvcGVybHlcbiAgICAgKi9cbiAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSwgRXVpQ29udGV4dE1lbnVQYW5lbCB9IGZyb20gJy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyIH0gZnJvbSAnLi4vcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG5mdW5jdGlvbiBhY3Rpb25Jc0N1c3RvbUl0ZW1BY3Rpb24oYWN0aW9uKSB7XG4gIHJldHVybiBhY3Rpb24uaGFzT3duUHJvcGVydHkoJ3JlbmRlcicpO1xufVxuXG5leHBvcnQgdmFyIENvbGxhcHNlZEl0ZW1BY3Rpb25zID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhDb2xsYXBzZWRJdGVtQWN0aW9ucywgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihDb2xsYXBzZWRJdGVtQWN0aW9ucyk7XG5cbiAgZnVuY3Rpb24gQ29sbGFwc2VkSXRlbUFjdGlvbnMoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbGxhcHNlZEl0ZW1BY3Rpb25zKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9wb3ZlckRpdlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBwb3BvdmVyT3BlbjogZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0b2dnbGVQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwb3BvdmVyT3BlbjogIXByZXZTdGF0ZS5wb3BvdmVyT3BlblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcG9wb3Zlck9wZW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblBvcG92ZXJCbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHlvdSBtdXN0IGJlIGFza2luZy4uLiBXVEY/IEkga25vdy4uLiBidXQgdGhpcyB0aW1lb3V0IGlzXG4gICAgICAvLyByZXF1aXJlZCB0byBtYWtlIHN1cmUgd2UgcHJvY2VzcyB0aGUgb25CbHVyIGV2ZW50cyBhZnRlciB0aGUgaW5pdGlhbFxuICAgICAgLy8gZXZlbnQgY3ljbGUuIFJlZmVyZW5jZTpcbiAgICAgIC8vIGh0dHBzOi8vbWVkaXVtLmNvbS9AamVzc2ViZWFjaC9kZWFsaW5nLXdpdGgtZm9jdXMtYW5kLWJsdXItaW4tYS1jb21wb3NpdGUtd2lkZ2V0LWluLXJlYWN0LTkwZDNjM2I0OWE5YlxuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMucG9wb3ZlckRpdi5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSAmJiBfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVnaXN0ZXJQb3BvdmVyRGl2XCIsIGZ1bmN0aW9uIChwb3BvdmVyRGl2KSB7XG4gICAgICBpZiAoIV90aGlzLnBvcG92ZXJEaXYpIHtcbiAgICAgICAgX3RoaXMucG9wb3ZlckRpdiA9IHBvcG92ZXJEaXY7XG4gICAgICAgIF90aGlzLnBvcG92ZXJEaXYgJiYgX3RoaXMucG9wb3ZlckRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIF90aGlzLm9uUG9wb3ZlckJsdXIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xpY2tJdGVtXCIsIGZ1bmN0aW9uIChvbkNsaWNrQWN0aW9uKSB7XG4gICAgICBfdGhpcy5jbG9zZVBvcG92ZXIoKTtcblxuICAgICAgaWYgKG9uQ2xpY2tBY3Rpb24pIHtcbiAgICAgICAgb25DbGlja0FjdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKENvbGxhcHNlZEl0ZW1BY3Rpb25zLCBbe1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnBvcG92ZXJEaXYpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5vblBvcG92ZXJCbHVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFjdGlvbnMgPSBfdGhpcyRwcm9wcy5hY3Rpb25zLFxuICAgICAgICAgIGl0ZW1JZCA9IF90aGlzJHByb3BzLml0ZW1JZCxcbiAgICAgICAgICBpdGVtID0gX3RoaXMkcHJvcHMuaXRlbSxcbiAgICAgICAgICBhY3Rpb25FbmFibGVkID0gX3RoaXMkcHJvcHMuYWN0aW9uRW5hYmxlZCxcbiAgICAgICAgICBvbkZvY3VzID0gX3RoaXMkcHJvcHMub25Gb2N1cyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWU7XG4gICAgICB2YXIgaXNPcGVuID0gdGhpcy5zdGF0ZS5wb3BvdmVyT3BlbjtcbiAgICAgIHZhciBhbGxEaXNhYmxlZCA9IHRydWU7XG4gICAgICB2YXIgY29udHJvbHMgPSBhY3Rpb25zLnJlZHVjZShmdW5jdGlvbiAoY29udHJvbHMsIGFjdGlvbiwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IFwiYWN0aW9uX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoaW5kZXgpO1xuICAgICAgICB2YXIgYXZhaWxhYmxlID0gYWN0aW9uLmF2YWlsYWJsZSA/IGFjdGlvbi5hdmFpbGFibGUoaXRlbSkgOiB0cnVlO1xuXG4gICAgICAgIGlmICghYXZhaWxhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRyb2xzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVuYWJsZWQgPSBhY3Rpb25FbmFibGVkKGFjdGlvbik7XG4gICAgICAgIGFsbERpc2FibGVkID0gYWxsRGlzYWJsZWQgJiYgIWVuYWJsZWQ7XG5cbiAgICAgICAgaWYgKGFjdGlvbklzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pKSB7XG4gICAgICAgICAgdmFyIGN1c3RvbUFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgICB2YXIgYWN0aW9uQ29udHJvbCA9IGN1c3RvbUFjdGlvbi5yZW5kZXIoaXRlbSwgZW5hYmxlZCk7XG4gICAgICAgICAgdmFyIGFjdGlvbkNvbnRyb2xPbkNsaWNrID0gYWN0aW9uQ29udHJvbCAmJiBhY3Rpb25Db250cm9sLnByb3BzICYmIGFjdGlvbkNvbnRyb2wucHJvcHMub25DbGljaztcbiAgICAgICAgICBjb250cm9scy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCB7XG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIub25DbGlja0l0ZW0oYWN0aW9uQ29udHJvbE9uQ2xpY2sgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbkNvbnRyb2xPbkNsaWNrKGl0ZW0pO1xuICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBhY3Rpb25Db250cm9sKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9vbkNsaWNrID0gYWN0aW9uLm9uQ2xpY2ssXG4gICAgICAgICAgICAgIG5hbWUgPSBhY3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgaHJlZiA9IGFjdGlvbi5ocmVmLFxuICAgICAgICAgICAgICB0YXJnZXQgPSBhY3Rpb24udGFyZ2V0LFxuICAgICAgICAgICAgICBkYXRhVGVzdFN1YmogPSBhY3Rpb25bJ2RhdGEtdGVzdC1zdWJqJ107XG4gICAgICAgICAgdmFyIGJ1dHRvbkljb24gPSBhY3Rpb24uaWNvbjtcbiAgICAgICAgICB2YXIgaWNvbjtcblxuICAgICAgICAgIGlmIChidXR0b25JY29uKSB7XG4gICAgICAgICAgICBpY29uID0gaXNTdHJpbmcoYnV0dG9uSWNvbikgPyBidXR0b25JY29uIDogYnV0dG9uSWNvbihpdGVtKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgYnV0dG9uQ29udGVudCA9IHR5cGVvZiBuYW1lID09PSAnZnVuY3Rpb24nID8gbmFtZShpdGVtKSA6IG5hbWU7XG4gICAgICAgICAgY29udHJvbHMucHVzaChfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51SXRlbSwge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBkaXNhYmxlZDogIWVuYWJsZWQsXG4gICAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBpY29uOiBpY29uLFxuICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmosXG4gICAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLm9uQ2xpY2tJdGVtKF9vbkNsaWNrID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfb25DbGljayhpdGVtKTtcbiAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgYnV0dG9uQ29udGVudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xzO1xuICAgICAgfSwgW10pO1xuXG4gICAgICB2YXIgcG9wb3ZlckJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlDb2xsYXBzZWRJdGVtQWN0aW9ucy5hbGxBY3Rpb25zXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiQWxsIGFjdGlvbnNcIlxuICAgICAgfSwgZnVuY3Rpb24gKGFsbEFjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhbGxBY3Rpb25zLFxuICAgICAgICAgIGljb25UeXBlOiBcImJveGVzSG9yaXpvbnRhbFwiLFxuICAgICAgICAgIGNvbG9yOiBcInRleHRcIixcbiAgICAgICAgICBpc0Rpc2FibGVkOiBhbGxEaXNhYmxlZCxcbiAgICAgICAgICBvbkNsaWNrOiBfdGhpczIudG9nZ2xlUG9wb3Zlci5iaW5kKF90aGlzMiksXG4gICAgICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpQ29sbGFwc2VkSXRlbUFjdGlvbnNCdXR0b25cIlxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgd2l0aFRvb2x0aXAgPSAhYWxsRGlzYWJsZWQgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aUNvbGxhcHNlZEl0ZW1BY3Rpb25zLmFsbEFjdGlvbnNcIixcbiAgICAgICAgZGVmYXVsdDogXCJBbGwgYWN0aW9uc1wiXG4gICAgICB9LCBmdW5jdGlvbiAoYWxsQWN0aW9ucykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgICAgICAgY29udGVudDogYWxsQWN0aW9ucyxcbiAgICAgICAgICBkZWxheTogXCJsb25nXCJcbiAgICAgICAgfSwgcG9wb3ZlckJ1dHRvbik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3Zlciwge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgcG9wb3ZlclJlZjogdGhpcy5yZWdpc3RlclBvcG92ZXJEaXYsXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdChpdGVtSWQsIFwiLWFjdGlvbnNcIiksXG4gICAgICAgIGlzT3BlbjogaXNPcGVuLFxuICAgICAgICBidXR0b246IHdpdGhUb29sdGlwIHx8IHBvcG92ZXJCdXR0b24sXG4gICAgICAgIGNsb3NlUG9wb3ZlcjogdGhpcy5jbG9zZVBvcG92ZXIsXG4gICAgICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgICAgICBhbmNob3JQb3NpdGlvbjogXCJsZWZ0Q2VudGVyXCJcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVQYW5lbCwge1xuICAgICAgICBpdGVtczogY29udHJvbHNcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29sbGFwc2VkSXRlbUFjdGlvbnM7XG59KENvbXBvbmVudCk7XG5Db2xsYXBzZWRJdGVtQWN0aW9ucy5wcm9wVHlwZXMgPSB7XG4gIGFjdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBUaGUgdHlwZSBvZiBhY3Rpb25cbiAgICAgICAqL1xuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIl0pLCBQcm9wVHlwZXMub25lT2YoW1wiaWNvblwiXSkuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZWZpbmVzIHRoZSBjb2xvciBvZiB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSldKSxcblxuICAgIC8qKlxuICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gY2FwdGlvbilcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiBjYXB0aW9uKVxuICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIERlc2NyaWJlcyB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gdGl0bGUpXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiB0aXRsZSlcbiAgICAgICAqL1xuICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIEEgaGFuZGxlciBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBhY3Rpb25cbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBBIGhhbmRsZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgYWN0aW9uXG4gICAgICAgKi9cbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAqL1xuICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAqL1xuICAgIGVuYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzUHJpbWFyeTogUHJvcFR5cGVzLmJvb2wsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBBc3NvY2lhdGVzIGFuIGljb24gd2l0aCB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogVGhlIGZ1bmN0aW9uIHRoYXQgcmVuZGVycyB0aGUgYWN0aW9uLiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIG5vZGUgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBgb25Gb2N1c2AgYW5kIGBvbkJsdXJgIGZ1bmN0aW9uc1xuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgKi9cbiAgICBhdmFpbGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICovXG4gICAgZW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNQcmltYXJ5OiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgaXRlbTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBpdGVtSWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgYWN0aW9uRW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IERlZmF1bHRJdGVtQWN0aW9uIH0gZnJvbSAnLi9kZWZhdWx0X2l0ZW1fYWN0aW9uJztcbmltcG9ydCB7IEN1c3RvbUl0ZW1BY3Rpb24gfSBmcm9tICcuL2N1c3RvbV9pdGVtX2FjdGlvbic7XG5pbXBvcnQgeyBpc0N1c3RvbUl0ZW1BY3Rpb24gfSBmcm9tICcuL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFeHBhbmRlZEl0ZW1BY3Rpb25zID0gZnVuY3Rpb24gRXhwYW5kZWRJdGVtQWN0aW9ucyhfcmVmKSB7XG4gIHZhciBhY3Rpb25zID0gX3JlZi5hY3Rpb25zLFxuICAgICAgaXRlbUlkID0gX3JlZi5pdGVtSWQsXG4gICAgICBpdGVtID0gX3JlZi5pdGVtLFxuICAgICAgYWN0aW9uRW5hYmxlZCA9IF9yZWYuYWN0aW9uRW5hYmxlZCxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lO1xuICB2YXIgbW9yZVRoYW5UaHJlZSA9IGFjdGlvbnMubGVuZ3RoID4gMjtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIGFjdGlvbnMucmVkdWNlKGZ1bmN0aW9uICh0b29scywgYWN0aW9uLCBpbmRleCkge1xuICAgIHZhciBhdmFpbGFibGUgPSBhY3Rpb24uYXZhaWxhYmxlID8gYWN0aW9uLmF2YWlsYWJsZShpdGVtKSA6IHRydWU7XG5cbiAgICBpZiAoIWF2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIHRvb2xzO1xuICAgIH1cblxuICAgIHZhciBlbmFibGVkID0gYWN0aW9uRW5hYmxlZChhY3Rpb24pO1xuICAgIHZhciBrZXkgPSBcIml0ZW1fYWN0aW9uX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoaW5kZXgpO1xuICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcyhjbGFzc05hbWUsIHtcbiAgICAgIGV4cGFuZGVkSXRlbUFjdGlvbnNfX2NvbXBsZXRlbHlIaWRlOiBtb3JlVGhhblRocmVlICYmIGluZGV4IDwgMlxuICAgIH0pO1xuXG4gICAgaWYgKGlzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pKSB7XG4gICAgICAvLyBjdXN0b20gYWN0aW9uIGhhcyBhIHJlbmRlciBmdW5jdGlvblxuICAgICAgdG9vbHMucHVzaChfX19FbW90aW9uSlNYKEN1c3RvbUl0ZW1BY3Rpb24sIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgZW5hYmxlZDogZW5hYmxlZCxcbiAgICAgICAgaXRlbTogaXRlbVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b29scy5wdXNoKF9fX0Vtb3Rpb25KU1goRGVmYXVsdEl0ZW1BY3Rpb24sIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQsXG4gICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9vbHM7XG4gIH0sIFtdKSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5LCBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG4vLyBJbiBvcmRlciB0byB1c2UgZ2VuZXJpY3Mgd2l0aCBhbiBhcnJvdyBmdW5jdGlvbiBpbnNpZGUgYSAudHN4IGZpbGUsIGl0J3MgbmVjZXNzYXJ5IHRvIHVzZVxuLy8gdGhpcyBgZXh0ZW5kc2AgaGFjayBhbmQgZGVjbGFyZSB0aGUgdHlwZXMgYXMgc2hvd24sIGluc3RlYWQgb2YgZGVjbGFyaW5nIHRoZSBjb25zdCBhcyBhXG4vLyBGdW5jdGlvbkNvbXBvbmVudFxuZXhwb3J0IHZhciBEZWZhdWx0SXRlbUFjdGlvbiA9IGZ1bmN0aW9uIERlZmF1bHRJdGVtQWN0aW9uKF9yZWYpIHtcbiAgdmFyIGFjdGlvbiA9IF9yZWYuYWN0aW9uLFxuICAgICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZCxcbiAgICAgIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZTtcblxuICBpZiAoIWFjdGlvbi5vbkNsaWNrICYmICFhY3Rpb24uaHJlZikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZW5kZXIgaXRlbSBhY3Rpb24gW1wiLmNvbmNhdChhY3Rpb24ubmFtZSwgXCJdLiBNaXNzaW5nIHJlcXVpcmVkICdvbkNsaWNrJyBjYWxsYmFja1xcbiAgICAgIG9yICdocmVmJyBzdHJpbmcuIElmIHlvdSB3YW50IHRvIHByb3ZpZGUgYSBjdXN0b20gYWN0aW9uIGNvbnRyb2wsIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhlICdyZW5kZXInIGNhbGxiYWNrXCIpKTtcbiAgfVxuXG4gIHZhciBvbkNsaWNrID0gYWN0aW9uLm9uQ2xpY2sgPyBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGFjdGlvbi5vbkNsaWNrKGl0ZW0pO1xuICB9IDogdW5kZWZpbmVkO1xuICB2YXIgYnV0dG9uQ29sb3IgPSBhY3Rpb24uY29sb3I7XG4gIHZhciBjb2xvciA9ICdwcmltYXJ5JztcblxuICBpZiAoYnV0dG9uQ29sb3IpIHtcbiAgICBjb2xvciA9IGlzU3RyaW5nKGJ1dHRvbkNvbG9yKSA/IGJ1dHRvbkNvbG9yIDogYnV0dG9uQ29sb3IoaXRlbSk7XG4gIH1cblxuICB2YXIgYnV0dG9uSWNvbiA9IGFjdGlvbi5pY29uO1xuICB2YXIgaWNvbjtcblxuICBpZiAoYnV0dG9uSWNvbikge1xuICAgIGljb24gPSBpc1N0cmluZyhidXR0b25JY29uKSA/IGJ1dHRvbkljb24gOiBidXR0b25JY29uKGl0ZW0pO1xuICB9XG5cbiAgdmFyIGJ1dHRvbjtcbiAgdmFyIGFjdGlvbkNvbnRlbnQgPSB0eXBlb2YgYWN0aW9uLm5hbWUgPT09ICdmdW5jdGlvbicgPyBhY3Rpb24ubmFtZShpdGVtKSA6IGFjdGlvbi5uYW1lO1xuICB2YXIgYXJpYUxhYmVsSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoKTtcblxuICBpZiAoYWN0aW9uLnR5cGUgPT09ICdpY29uJykge1xuICAgIGlmICghaWNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHJlbmRlciBpdGVtIGFjdGlvbiBbXCIuY29uY2F0KGFjdGlvbi5uYW1lLCBcIl0uIEl0IGlzIGNvbmZpZ3VyZWQgdG8gcmVuZGVyIGFzIGFuIGljb24gYnV0IG5vXFxuICAgICAgaWNvbiBpcyBwcm92aWRlZC4gTWFrZSBzdXJlIHRvIHNldCB0aGUgJ2ljb24nIHByb3BlcnR5IG9mIHRoZSBhY3Rpb25cIikpO1xuICAgIH1cblxuICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcmlhTGFiZWxJZCxcbiAgICAgIGlzRGlzYWJsZWQ6ICFlbmFibGVkLFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgaWNvblR5cGU6IGljb24sXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgaHJlZjogYWN0aW9uLmhyZWYsXG4gICAgICB0YXJnZXQ6IGFjdGlvbi50YXJnZXQsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGFjdGlvblsnZGF0YS10ZXN0LXN1YmonXVxuICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGlkOiBhcmlhTGFiZWxJZFxuICAgIH0sIGFjdGlvbkNvbnRlbnQpKSk7XG4gIH0gZWxzZSB7XG4gICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICBzaXplOiBcInNcIixcbiAgICAgIGlzRGlzYWJsZWQ6ICFlbmFibGVkLFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgaWNvblR5cGU6IGljb24sXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgaHJlZjogYWN0aW9uLmhyZWYsXG4gICAgICB0YXJnZXQ6IGFjdGlvbi50YXJnZXQsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGFjdGlvblsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgIGZsdXNoOiBcInJpZ2h0XCJcbiAgICB9LCBhY3Rpb25Db250ZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbmFibGVkICYmIGFjdGlvbi5kZXNjcmlwdGlvbiA/IF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgIGNvbnRlbnQ6IGFjdGlvbi5kZXNjcmlwdGlvbixcbiAgICBkZWxheTogXCJsb25nXCJcbiAgfSwgYnV0dG9uKSA6IGJ1dHRvbjtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjbG9uZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDdXN0b21JdGVtQWN0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhDdXN0b21JdGVtQWN0aW9uLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEN1c3RvbUl0ZW1BY3Rpb24pO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUl0ZW1BY3Rpb24ocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ3VzdG9tSXRlbUFjdGlvbik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJtb3VudGVkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMubW91bnRlZCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25CbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5tb3VudGVkKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNGb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFzRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmhhc0ZvY3VzO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBoYXNGb2N1czogZmFsc2VcbiAgICB9OyAvLyB3aGlsZSBnZW5lcmFsbHkgY29uc2lkZXJlZCBhbiBhbnRpLXBhdHRlcm4sIGhlcmUgd2UgcmVxdWlyZVxuICAgIC8vIHRvIGRvIHRoYXQgYXMgdGhlIG9uRm9jdXMvb25CbHVyIGV2ZW50cyBvZiB0aGUgYWN0aW9uIGNvbnRyb2xzXG4gICAgLy8gbWF5IHRyaWdnZXIgd2hpbGUgdGhpcyBjb21wb25lbnQgaXMgdW5tb3VudGVkLiBBbiBhbHRlcm5hdGl2ZVxuICAgIC8vIChhdCBsZWFzdCB0aGUgd29ya2Fyb3VuZHMgc3VnZ2VzdGVkIGJ5IHJlYWN0IGlzIHRvIHVucmVnaXN0ZXJcbiAgICAvLyB0aGUgb25Gb2N1cy9vbkJsdXIgbGlzdGVuZXJzIGZyb20gdGhlIGFjdGlvbiBjb250cm9scy4uLiB0aGlzXG4gICAgLy8gdW5mb3J0dW5hdGVseSB3aWxsIGxlYWQgdG8gdW5uZWNlc3NhcmlseSBjb21wbGV4IGNvZGUuLi4gc28gd2UnbGxcbiAgICAvLyBzdGljayB0byB0aGlzIGFwcHJvYWNoIGZvciBub3cpXG5cbiAgICBfdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEN1c3RvbUl0ZW1BY3Rpb24sIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYWN0aW9uID0gX3RoaXMkcHJvcHMuYWN0aW9uLFxuICAgICAgICAgIGVuYWJsZWQgPSBfdGhpcyRwcm9wcy5lbmFibGVkLFxuICAgICAgICAgIGl0ZW0gPSBfdGhpcyRwcm9wcy5pdGVtLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZTtcbiAgICAgIHZhciB0b29sID0gYWN0aW9uLnJlbmRlcihpdGVtLCBlbmFibGVkKTtcbiAgICAgIHZhciBjbG9uZWRUb29sID0gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudCh0b29sLCB7XG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQmx1clxuICAgICAgfSk7XG4gICAgICB2YXIgc3R5bGUgPSB0aGlzLmhhc0ZvY3VzKCkgPyB7XG4gICAgICAgIG9wYWNpdHk6IDFcbiAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgICAgIH0sIGNsb25lZFRvb2wpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDdXN0b21JdGVtQWN0aW9uO1xufShDb21wb25lbnQpO1xuQ3VzdG9tSXRlbUFjdGlvbi5wcm9wVHlwZXMgPSB7XG4gIGFjdGlvbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBlbmFibGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpdGVtOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpbmRleDogUHJvcFR5cGVzLm51bWJlclxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgaXNDdXN0b21JdGVtQWN0aW9uID0gZnVuY3Rpb24gaXNDdXN0b21JdGVtQWN0aW9uKGFjdGlvbikge1xuICByZXR1cm4gYWN0aW9uLmhhc093blByb3BlcnR5KCdyZW5kZXInKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpU3BhY2VyIH0gZnJvbSAnLi4vc3BhY2VyJztcbmltcG9ydCB7IEV1aVRhYmxlUGFnaW5hdGlvbiB9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIGRlZmF1bHRzID0ge1xuICBwYWdlU2l6ZU9wdGlvbnM6IFsxMCwgMjUsIDUwXVxufTtcbmV4cG9ydCB2YXIgUGFnaW5hdGlvbkJhciA9IGZ1bmN0aW9uIFBhZ2luYXRpb25CYXIoX3JlZikge1xuICB2YXIgcGFnaW5hdGlvbiA9IF9yZWYucGFnaW5hdGlvbixcbiAgICAgIG9uUGFnZVNpemVDaGFuZ2UgPSBfcmVmLm9uUGFnZVNpemVDaGFuZ2UsXG4gICAgICBvblBhZ2VDaGFuZ2UgPSBfcmVmLm9uUGFnZUNoYW5nZSxcbiAgICAgIGFyaWFDb250cm9scyA9IF9yZWZbJ2FyaWEtY29udHJvbHMnXSxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXTtcbiAgdmFyIHBhZ2VTaXplT3B0aW9ucyA9IHBhZ2luYXRpb24ucGFnZVNpemVPcHRpb25zID8gcGFnaW5hdGlvbi5wYWdlU2l6ZU9wdGlvbnMgOiBkZWZhdWx0cy5wYWdlU2l6ZU9wdGlvbnM7XG4gIHZhciBwYWdlQ291bnQgPSBwYWdpbmF0aW9uLnBhZ2VTaXplID8gTWF0aC5jZWlsKHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgLyBwYWdpbmF0aW9uLnBhZ2VTaXplKSA6IDE7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHBhZ2VDb3VudCA8IHBhZ2luYXRpb24ucGFnZUluZGV4ICsgMSkge1xuICAgICAgb25QYWdlQ2hhbmdlID09PSBudWxsIHx8IG9uUGFnZUNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25QYWdlQ2hhbmdlKHBhZ2VDb3VudCAtIDEpO1xuICAgIH1cbiAgfSwgW3BhZ2VDb3VudCwgb25QYWdlQ2hhbmdlLCBwYWdpbmF0aW9uXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpU3BhY2VyLCB7XG4gICAgc2l6ZTogXCJtXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVQYWdpbmF0aW9uLCB7XG4gICAgYWN0aXZlUGFnZTogcGFnaW5hdGlvbi5wYWdlSW5kZXgsXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zOiBwYWdpbmF0aW9uLnNob3dQZXJQYWdlT3B0aW9ucyxcbiAgICBpdGVtc1BlclBhZ2U6IHBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9uczogcGFnZVNpemVPcHRpb25zLFxuICAgIHBhZ2VDb3VudDogcGFnZUNvdW50LFxuICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlOiBvblBhZ2VTaXplQ2hhbmdlLFxuICAgIG9uQ2hhbmdlUGFnZTogb25QYWdlQ2hhbmdlLFxuICAgIFwiYXJpYS1jb250cm9sc1wiOiBhcmlhQ29udHJvbHMsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbFxuICB9KSk7XG59OyIsICJleHBvcnQgdmFyIFN1YnNjcmliYWJsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN1YnNjcmliYWJsZSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN1YnNjcmliYWJsZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBsaXN0ZW5lciB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTtcbiAgICB0aGlzLm9uU3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmxpc3RlbmVycyA9IF90aGlzLmxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IGNhbGxiYWNrO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLm9uVW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5oYXNMaXN0ZW5lcnMgPSBmdW5jdGlvbiBoYXNMaXN0ZW5lcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXJzLmxlbmd0aCA+IDA7XG4gIH07XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7Ly8gRG8gbm90aGluZ1xuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHsvLyBEbyBub3RoaW5nXG4gIH07XG5cbiAgcmV0dXJuIFN1YnNjcmliYWJsZTtcbn0oKTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG4vLyBUWVBFU1xuLy8gVVRJTFNcbmV4cG9ydCB2YXIgaXNTZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJztcbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1cGRhdGVyID09PSAnZnVuY3Rpb24nID8gdXBkYXRlcihpbnB1dCkgOiB1cGRhdGVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUaW1lb3V0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDAgJiYgdmFsdWUgIT09IEluZmluaXR5O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVF1ZXJ5S2V5QXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2UoYXJyYXkxLCBhcnJheTIpIHtcbiAgcmV0dXJuIGFycmF5MS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gYXJyYXkyLmluZGV4T2YoeCkgPT09IC0xO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQXQoYXJyYXksIGluZGV4LCB2YWx1ZSkge1xuICB2YXIgY29weSA9IGFycmF5LnNsaWNlKDApO1xuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xuICByZXR1cm4gY29weTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aW1lVW50aWxTdGFsZSh1cGRhdGVkQXQsIHN0YWxlVGltZSkge1xuICByZXR1cm4gTWF0aC5tYXgodXBkYXRlZEF0ICsgKHN0YWxlVGltZSB8fCAwKSAtIERhdGUubm93KCksIDApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKCFpc1F1ZXJ5S2V5KGFyZzEpKSB7XG4gICAgcmV0dXJuIGFyZzE7XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZzIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzMsIHtcbiAgICAgIHF1ZXJ5S2V5OiBhcmcxLFxuICAgICAgcXVlcnlGbjogYXJnMlxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgcXVlcnlLZXk6IGFyZzFcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdXRhdGlvbkFyZ3MoYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAoaXNRdWVyeUtleShhcmcxKSkge1xuICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmczLCB7XG4gICAgICAgIG11dGF0aW9uS2V5OiBhcmcxLFxuICAgICAgICBtdXRhdGlvbkZuOiBhcmcyXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICAgIG11dGF0aW9uS2V5OiBhcmcxXG4gICAgfSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZzEgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICAgIG11dGF0aW9uRm46IGFyZzFcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgcmV0dXJuIGlzUXVlcnlLZXkoYXJnMSkgPyBbX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICBxdWVyeUtleTogYXJnMVxuICB9KSwgYXJnM10gOiBbYXJnMSB8fCB7fSwgYXJnMl07XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdXRhdGlvbkZpbHRlckFyZ3MoYXJnMSwgYXJnMikge1xuICByZXR1cm4gaXNRdWVyeUtleShhcmcxKSA/IF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgbXV0YXRpb25LZXk6IGFyZzFcbiAgfSkgOiBhcmcxO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hcFF1ZXJ5U3RhdHVzRmlsdGVyKGFjdGl2ZSwgaW5hY3RpdmUpIHtcbiAgaWYgKGFjdGl2ZSA9PT0gdHJ1ZSAmJiBpbmFjdGl2ZSA9PT0gdHJ1ZSB8fCBhY3RpdmUgPT0gbnVsbCAmJiBpbmFjdGl2ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICdhbGwnO1xuICB9IGVsc2UgaWYgKGFjdGl2ZSA9PT0gZmFsc2UgJiYgaW5hY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICdub25lJztcbiAgfSBlbHNlIHtcbiAgICAvLyBBdCB0aGlzIHBvaW50LCBhY3RpdmV8aW5hY3RpdmUgY2FuIG9ubHkgYmUgdHJ1ZXxmYWxzZSBvciBmYWxzZXx0cnVlXG4gICAgLy8gc28sIHdoZW4gb25seSBvbmUgdmFsdWUgaXMgcHJvdmlkZWQsIHRoZSBtaXNzaW5nIG9uZSBoYXMgdG8gYmUgdGhlIG5lZ2F0ZWQgdmFsdWVcbiAgICB2YXIgaXNBY3RpdmUgPSBhY3RpdmUgIT0gbnVsbCA/IGFjdGl2ZSA6ICFpbmFjdGl2ZTtcbiAgICByZXR1cm4gaXNBY3RpdmUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZSc7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KSB7XG4gIHZhciBhY3RpdmUgPSBmaWx0ZXJzLmFjdGl2ZSxcbiAgICAgIGV4YWN0ID0gZmlsdGVycy5leGFjdCxcbiAgICAgIGZldGNoaW5nID0gZmlsdGVycy5mZXRjaGluZyxcbiAgICAgIGluYWN0aXZlID0gZmlsdGVycy5pbmFjdGl2ZSxcbiAgICAgIHByZWRpY2F0ZSA9IGZpbHRlcnMucHJlZGljYXRlLFxuICAgICAgcXVlcnlLZXkgPSBmaWx0ZXJzLnF1ZXJ5S2V5LFxuICAgICAgc3RhbGUgPSBmaWx0ZXJzLnN0YWxlO1xuXG4gIGlmIChpc1F1ZXJ5S2V5KHF1ZXJ5S2V5KSkge1xuICAgIGlmIChleGFjdCkge1xuICAgICAgaWYgKHF1ZXJ5LnF1ZXJ5SGFzaCAhPT0gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBxdWVyeS5vcHRpb25zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KHF1ZXJ5LnF1ZXJ5S2V5LCBxdWVyeUtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgcXVlcnlTdGF0dXNGaWx0ZXIgPSBtYXBRdWVyeVN0YXR1c0ZpbHRlcihhY3RpdmUsIGluYWN0aXZlKTtcblxuICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdub25lJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChxdWVyeVN0YXR1c0ZpbHRlciAhPT0gJ2FsbCcpIHtcbiAgICB2YXIgaXNBY3RpdmUgPSBxdWVyeS5pc0FjdGl2ZSgpO1xuXG4gICAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnYWN0aXZlJyAmJiAhaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdpbmFjdGl2ZScgJiYgaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHN0YWxlID09PSAnYm9vbGVhbicgJiYgcXVlcnkuaXNTdGFsZSgpICE9PSBzdGFsZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmV0Y2hpbmcgPT09ICdib29sZWFuJyAmJiBxdWVyeS5pc0ZldGNoaW5nKCkgIT09IGZldGNoaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKHF1ZXJ5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pIHtcbiAgdmFyIGV4YWN0ID0gZmlsdGVycy5leGFjdCxcbiAgICAgIGZldGNoaW5nID0gZmlsdGVycy5mZXRjaGluZyxcbiAgICAgIHByZWRpY2F0ZSA9IGZpbHRlcnMucHJlZGljYXRlLFxuICAgICAgbXV0YXRpb25LZXkgPSBmaWx0ZXJzLm11dGF0aW9uS2V5O1xuXG4gIGlmIChpc1F1ZXJ5S2V5KG11dGF0aW9uS2V5KSkge1xuICAgIGlmICghbXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChleGFjdCkge1xuICAgICAgaWYgKGhhc2hRdWVyeUtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5KSAhPT0gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXksIG11dGF0aW9uS2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgZmV0Y2hpbmcgPT09ICdib29sZWFuJyAmJiBtdXRhdGlvbi5zdGF0ZS5zdGF0dXMgPT09ICdsb2FkaW5nJyAhPT0gZmV0Y2hpbmcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUobXV0YXRpb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gIHZhciBoYXNoRm4gPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5xdWVyeUtleUhhc2hGbikgfHwgaGFzaFF1ZXJ5S2V5O1xuICByZXR1cm4gaGFzaEZuKHF1ZXJ5S2V5KTtcbn1cbi8qKlxuICogRGVmYXVsdCBxdWVyeSBrZXlzIGhhc2ggZnVuY3Rpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hRdWVyeUtleShxdWVyeUtleSkge1xuICB2YXIgYXNBcnJheSA9IGVuc3VyZVF1ZXJ5S2V5QXJyYXkocXVlcnlLZXkpO1xuICByZXR1cm4gc3RhYmxlVmFsdWVIYXNoKGFzQXJyYXkpO1xufVxuLyoqXG4gKiBIYXNoZXMgdGhlIHZhbHVlIGludG8gYSBzdGFibGUgaGFzaC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhYmxlVmFsdWVIYXNoKHZhbHVlKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgZnVuY3Rpb24gKF8sIHZhbCkge1xuICAgIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbCkgPyBPYmplY3Qua2V5cyh2YWwpLnNvcnQoKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbFtrZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSkgOiB2YWw7XG4gIH0pO1xufVxuLyoqXG4gKiBDaGVja3MgaWYga2V5IGBiYCBwYXJ0aWFsbHkgbWF0Y2hlcyB3aXRoIGtleSBgYWAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWxNYXRjaEtleShhLCBiKSB7XG4gIHJldHVybiBwYXJ0aWFsRGVlcEVxdWFsKGVuc3VyZVF1ZXJ5S2V5QXJyYXkoYSksIGVuc3VyZVF1ZXJ5S2V5QXJyYXkoYikpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgYGJgIHBhcnRpYWxseSBtYXRjaGVzIHdpdGggYGFgLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsRGVlcEVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gIU9iamVjdC5rZXlzKGIpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuICFwYXJ0aWFsRGVlcEVxdWFsKGFba2V5XSwgYltrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGBhYCBpZiBgYmAgaXMgZGVlcGx5IGVxdWFsLlxuICogSWYgbm90LCBpdCB3aWxsIHJlcGxhY2UgYW55IGRlZXBseSBlcXVhbCBjaGlsZHJlbiBvZiBgYmAgd2l0aCB0aG9zZSBvZiBgYWAuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBzdHJ1Y3R1cmFsIHNoYXJpbmcgYmV0d2VlbiBKU09OIHZhbHVlcyBmb3IgZXhhbXBsZS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUVxdWFsRGVlcChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgYXJyYXkgPSBBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYik7XG5cbiAgaWYgKGFycmF5IHx8IGlzUGxhaW5PYmplY3QoYSkgJiYgaXNQbGFpbk9iamVjdChiKSkge1xuICAgIHZhciBhU2l6ZSA9IGFycmF5ID8gYS5sZW5ndGggOiBPYmplY3Qua2V5cyhhKS5sZW5ndGg7XG4gICAgdmFyIGJJdGVtcyA9IGFycmF5ID8gYiA6IE9iamVjdC5rZXlzKGIpO1xuICAgIHZhciBiU2l6ZSA9IGJJdGVtcy5sZW5ndGg7XG4gICAgdmFyIGNvcHkgPSBhcnJheSA/IFtdIDoge307XG4gICAgdmFyIGVxdWFsSXRlbXMgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiU2l6ZTsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gYXJyYXkgPyBpIDogYkl0ZW1zW2ldO1xuICAgICAgY29weVtrZXldID0gcmVwbGFjZUVxdWFsRGVlcChhW2tleV0sIGJba2V5XSk7XG5cbiAgICAgIGlmIChjb3B5W2tleV0gPT09IGFba2V5XSkge1xuICAgICAgICBlcXVhbEl0ZW1zKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFTaXplID09PSBiU2l6ZSAmJiBlcXVhbEl0ZW1zID09PSBhU2l6ZSA/IGEgOiBjb3B5O1xuICB9XG5cbiAgcmV0dXJuIGI7XG59XG4vKipcbiAqIFNoYWxsb3cgY29tcGFyZSBvYmplY3RzLiBPbmx5IHdvcmtzIHdpdGggb2JqZWN0cyB0aGF0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIHByb3BlcnRpZXMuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbE9iamVjdHMoYSwgYikge1xuICBpZiAoYSAmJiAhYiB8fCBiICYmICFhKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIga2V5IGluIGEpIHtcbiAgICBpZiAoYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn0gLy8gQ29waWVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdFxuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvKSB7XG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKG8pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIGhhcyBtb2RpZmllZCBjb25zdHJ1Y3RvclxuXG5cbiAgdmFyIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuXG4gIGlmICh0eXBlb2YgY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBJZiBoYXMgbW9kaWZpZWQgcHJvdG90eXBlXG5cblxuICB2YXIgcHJvdCA9IGN0b3IucHJvdG90eXBlO1xuXG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKHByb3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIGNvbnN0cnVjdG9yIGRvZXMgbm90IGhhdmUgYW4gT2JqZWN0LXNwZWNpZmljIG1ldGhvZFxuXG5cbiAgaWYgKCFwcm90Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gTW9zdCBsaWtlbHkgYSBwbGFpbiBPYmplY3RcblxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYXNPYmplY3RQcm90b3R5cGUobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUXVlcnlLZXkodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFcnJvcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcCh0aW1lb3V0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCk7XG4gIH0pO1xufVxuLyoqXG4gKiBTY2hlZHVsZXMgYSBtaWNyb3Rhc2suXG4gKiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gc2NoZWR1bGUgc3RhdGUgdXBkYXRlcyBhZnRlciByZW5kZXJpbmcuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlTWljcm90YXNrKGNhbGxiYWNrKSB7XG4gIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oY2FsbGJhY2spLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBYm9ydENvbnRyb2xsZXIoKSB7XG4gIGlmICh0eXBlb2YgQWJvcnRDb250cm9sbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgfVxufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIEZvY3VzTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShGb2N1c01hbmFnZXIsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIEZvY3VzTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc2V0dXAgPSBmdW5jdGlvbiAob25Gb2N1cykge1xuICAgICAgdmFyIF93aW5kb3c7XG5cbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgKChfd2luZG93ID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHtcbiAgICAgICAgICByZXR1cm4gb25Gb2N1cygpO1xuICAgICAgICB9OyAvLyBMaXN0ZW4gdG8gdmlzaWJpbGxpdHljaGFuZ2UgYW5kIGZvY3VzXG5cblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byB1bnN1YnNjcmliZSBpZiBhIG5ldyBoYW5kbGVyIGlzIHNldFxuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgbGlzdGVuZXIpO1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IEZvY3VzTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmNsZWFudXApIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRMaXN0ZW5lcih0aGlzLnNldHVwKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdmFyIF90aGlzJGNsZWFudXA7XG5cbiAgICAgIChfdGhpcyRjbGVhbnVwID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cC5jYWxsKHRoaXMpO1xuICAgICAgdGhpcy5jbGVhbnVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHNldEV2ZW50TGlzdGVuZXIoc2V0dXApIHtcbiAgICB2YXIgX3RoaXMkY2xlYW51cDIsXG4gICAgICAgIF90aGlzMiA9IHRoaXM7XG5cbiAgICB0aGlzLnNldHVwID0gc2V0dXA7XG4gICAgKF90aGlzJGNsZWFudXAyID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cDIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLmNsZWFudXAgPSBzZXR1cChmdW5jdGlvbiAoZm9jdXNlZCkge1xuICAgICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX3RoaXMyLnNldEZvY3VzZWQoZm9jdXNlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczIub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5zZXRGb2N1c2VkID0gZnVuY3Rpb24gc2V0Rm9jdXNlZChmb2N1c2VkKSB7XG4gICAgdGhpcy5mb2N1c2VkID0gZm9jdXNlZDtcblxuICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICB0aGlzLm9uRm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc0ZvY3VzZWQgPSBmdW5jdGlvbiBpc0ZvY3VzZWQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmZvY3VzZWQgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcbiAgICB9IC8vIGRvY3VtZW50IGdsb2JhbCBjYW4gYmUgdW5hdmFpbGFibGUgaW4gcmVhY3QgbmF0aXZlXG5cblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3VuZGVmaW5lZCwgJ3Zpc2libGUnLCAncHJlcmVuZGVyJ10uaW5jbHVkZXMoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlKTtcbiAgfTtcblxuICByZXR1cm4gRm9jdXNNYW5hZ2VyO1xufShTdWJzY3JpYmFibGUpO1xuZXhwb3J0IHZhciBmb2N1c01hbmFnZXIgPSBuZXcgRm9jdXNNYW5hZ2VyKCk7IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB2YXIgT25saW5lTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShPbmxpbmVNYW5hZ2VyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBPbmxpbmVNYW5hZ2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5zZXR1cCA9IGZ1bmN0aW9uIChvbk9ubGluZSkge1xuICAgICAgdmFyIF93aW5kb3c7XG5cbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgKChfd2luZG93ID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHtcbiAgICAgICAgICByZXR1cm4gb25PbmxpbmUoKTtcbiAgICAgICAgfTsgLy8gTGlzdGVuIHRvIG9ubGluZVxuXG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBCZSBzdXJlIHRvIHVuc3Vic2NyaWJlIGlmIGEgbmV3IGhhbmRsZXIgaXMgc2V0XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE9ubGluZU1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy5zZXR1cCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHZhciBfdGhpcyRjbGVhbnVwO1xuXG4gICAgICAoX3RoaXMkY2xlYW51cCA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdmFyIF90aGlzJGNsZWFudXAyLFxuICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXR1cCA9IHNldHVwO1xuICAgIChfdGhpcyRjbGVhbnVwMiA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5jbGVhbnVwID0gc2V0dXAoZnVuY3Rpb24gKG9ubGluZSkge1xuICAgICAgaWYgKHR5cGVvZiBvbmxpbmUgPT09ICdib29sZWFuJykge1xuICAgICAgICBfdGhpczIuc2V0T25saW5lKG9ubGluZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczIub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0T25saW5lID0gZnVuY3Rpb24gc2V0T25saW5lKG9ubGluZSkge1xuICAgIHRoaXMub25saW5lID0gb25saW5lO1xuXG4gICAgaWYgKG9ubGluZSkge1xuICAgICAgdGhpcy5vbk9ubGluZSgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNPbmxpbmUgPSBmdW5jdGlvbiBpc09ubGluZSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMub25saW5lID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ubGluZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIG5hdmlnYXRvci5vbkxpbmUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yLm9uTGluZTtcbiAgfTtcblxuICByZXR1cm4gT25saW5lTWFuYWdlcjtcbn0oU3Vic2NyaWJhYmxlKTtcbmV4cG9ydCB2YXIgb25saW5lTWFuYWdlciA9IG5ldyBPbmxpbmVNYW5hZ2VyKCk7IiwgImltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gJy4vZm9jdXNNYW5hZ2VyJztcbmltcG9ydCB7IG9ubGluZU1hbmFnZXIgfSBmcm9tICcuL29ubGluZU1hbmFnZXInO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuL3V0aWxzJztcblxuZnVuY3Rpb24gZGVmYXVsdFJldHJ5RGVsYXkoZmFpbHVyZUNvdW50KSB7XG4gIHJldHVybiBNYXRoLm1pbigxMDAwICogTWF0aC5wb3coMiwgZmFpbHVyZUNvdW50KSwgMzAwMDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDYW5jZWxhYmxlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgKHZhbHVlID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZS5jYW5jZWwpID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0IHZhciBDYW5jZWxsZWRFcnJvciA9IGZ1bmN0aW9uIENhbmNlbGxlZEVycm9yKG9wdGlvbnMpIHtcbiAgdGhpcy5yZXZlcnQgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJldmVydDtcbiAgdGhpcy5zaWxlbnQgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnNpbGVudDtcbn07XG5leHBvcnQgZnVuY3Rpb24gaXNDYW5jZWxsZWRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBDYW5jZWxsZWRFcnJvcjtcbn0gLy8gQ0xBU1NcblxuZXhwb3J0IHZhciBSZXRyeWVyID0gZnVuY3Rpb24gUmV0cnllcihjb25maWcpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIgY2FuY2VsUmV0cnkgPSBmYWxzZTtcbiAgdmFyIGNhbmNlbEZuO1xuICB2YXIgY29udGludWVGbjtcbiAgdmFyIHByb21pc2VSZXNvbHZlO1xuICB2YXIgcHJvbWlzZVJlamVjdDtcbiAgdGhpcy5hYm9ydCA9IGNvbmZpZy5hYm9ydDtcblxuICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uIChjYW5jZWxPcHRpb25zKSB7XG4gICAgcmV0dXJuIGNhbmNlbEZuID09IG51bGwgPyB2b2lkIDAgOiBjYW5jZWxGbihjYW5jZWxPcHRpb25zKTtcbiAgfTtcblxuICB0aGlzLmNhbmNlbFJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIGNhbmNlbFJldHJ5ID0gdHJ1ZTtcbiAgfTtcblxuICB0aGlzLmNvbnRpbnVlUmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2FuY2VsUmV0cnkgPSBmYWxzZTtcbiAgfTtcblxuICB0aGlzLmNvbnRpbnVlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gIH07XG5cbiAgdGhpcy5mYWlsdXJlQ291bnQgPSAwO1xuICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gIHRoaXMuaXNSZXNvbHZlZCA9IGZhbHNlO1xuICB0aGlzLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSA9IGZhbHNlO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAob3V0ZXJSZXNvbHZlLCBvdXRlclJlamVjdCkge1xuICAgIHByb21pc2VSZXNvbHZlID0gb3V0ZXJSZXNvbHZlO1xuICAgIHByb21pc2VSZWplY3QgPSBvdXRlclJlamVjdDtcbiAgfSk7XG5cbiAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICBfdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vblN1Y2Nlc3ModmFsdWUpO1xuICAgICAgY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICAgICAgcHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcmVqZWN0ID0gZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICBfdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25FcnJvcih2YWx1ZSk7XG4gICAgICBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gICAgICBwcm9taXNlUmVqZWN0KHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBhdXNlID0gZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChjb250aW51ZVJlc29sdmUpIHtcbiAgICAgIGNvbnRpbnVlRm4gPSBjb250aW51ZVJlc29sdmU7XG4gICAgICBfdGhpcy5pc1BhdXNlZCA9IHRydWU7XG4gICAgICBjb25maWcub25QYXVzZSA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uUGF1c2UoKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnRpbnVlRm4gPSB1bmRlZmluZWQ7XG4gICAgICBfdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgY29uZmlnLm9uQ29udGludWUgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkNvbnRpbnVlKCk7XG4gICAgfSk7XG4gIH07IC8vIENyZWF0ZSBsb29wIGZ1bmN0aW9uXG5cblxuICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKCkge1xuICAgIC8vIERvIG5vdGhpbmcgaWYgYWxyZWFkeSByZXNvbHZlZFxuICAgIGlmIChfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb21pc2VPclZhbHVlOyAvLyBFeGVjdXRlIHF1ZXJ5XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBjb25maWcuZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSAvLyBDcmVhdGUgY2FsbGJhY2sgdG8gY2FuY2VsIHRoaXMgZmV0Y2hcblxuXG4gICAgY2FuY2VsRm4gPSBmdW5jdGlvbiBjYW5jZWxGbihjYW5jZWxPcHRpb25zKSB7XG4gICAgICBpZiAoIV90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBDYW5jZWxsZWRFcnJvcihjYW5jZWxPcHRpb25zKSk7XG4gICAgICAgIF90aGlzLmFib3J0ID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5hYm9ydCgpOyAvLyBDYW5jZWwgdHJhbnNwb3J0IGlmIHN1cHBvcnRlZFxuXG4gICAgICAgIGlmIChpc0NhbmNlbGFibGUocHJvbWlzZU9yVmFsdWUpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb21pc2VPclZhbHVlLmNhbmNlbCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKF91bnVzZWQpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9OyAvLyBDaGVjayBpZiB0aGUgdHJhbnNwb3J0IGxheWVyIHN1cHBvcnQgY2FuY2VsbGF0aW9uXG5cblxuICAgIF90aGlzLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSA9IGlzQ2FuY2VsYWJsZShwcm9taXNlT3JWYWx1ZSk7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHByb21pc2VPclZhbHVlKS50aGVuKHJlc29sdmUpLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgdmFyIF9jb25maWckcmV0cnksIF9jb25maWckcmV0cnlEZWxheTtcblxuICAgICAgLy8gU3RvcCBpZiB0aGUgZmV0Y2ggaXMgYWxyZWFkeSByZXNvbHZlZFxuICAgICAgaWYgKF90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEbyB3ZSBuZWVkIHRvIHJldHJ5IHRoZSByZXF1ZXN0P1xuXG5cbiAgICAgIHZhciByZXRyeSA9IChfY29uZmlnJHJldHJ5ID0gY29uZmlnLnJldHJ5KSAhPSBudWxsID8gX2NvbmZpZyRyZXRyeSA6IDM7XG4gICAgICB2YXIgcmV0cnlEZWxheSA9IChfY29uZmlnJHJldHJ5RGVsYXkgPSBjb25maWcucmV0cnlEZWxheSkgIT0gbnVsbCA/IF9jb25maWckcmV0cnlEZWxheSA6IGRlZmF1bHRSZXRyeURlbGF5O1xuICAgICAgdmFyIGRlbGF5ID0gdHlwZW9mIHJldHJ5RGVsYXkgPT09ICdmdW5jdGlvbicgPyByZXRyeURlbGF5KF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpIDogcmV0cnlEZWxheTtcbiAgICAgIHZhciBzaG91bGRSZXRyeSA9IHJldHJ5ID09PSB0cnVlIHx8IHR5cGVvZiByZXRyeSA9PT0gJ251bWJlcicgJiYgX3RoaXMuZmFpbHVyZUNvdW50IDwgcmV0cnkgfHwgdHlwZW9mIHJldHJ5ID09PSAnZnVuY3Rpb24nICYmIHJldHJ5KF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpO1xuXG4gICAgICBpZiAoY2FuY2VsUmV0cnkgfHwgIXNob3VsZFJldHJ5KSB7XG4gICAgICAgIC8vIFdlIGFyZSBkb25lIGlmIHRoZSBxdWVyeSBkb2VzIG5vdCBuZWVkIHRvIGJlIHJldHJpZWRcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5mYWlsdXJlQ291bnQrKzsgLy8gTm90aWZ5IG9uIGZhaWxcblxuICAgICAgY29uZmlnLm9uRmFpbCA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uRmFpbChfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKTsgLy8gRGVsYXlcblxuICAgICAgc2xlZXAoZGVsYXkpIC8vIFBhdXNlIGlmIHRoZSBkb2N1bWVudCBpcyBub3QgdmlzaWJsZSBvciB3aGVuIHRoZSBkZXZpY2UgaXMgb2ZmbGluZVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSB8fCAhb25saW5lTWFuYWdlci5pc09ubGluZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY2FuY2VsUmV0cnkpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJ1bigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTsgLy8gU3RhcnQgbG9vcFxuXG5cbiAgcnVuKCk7XG59OyIsICJpbXBvcnQgeyBzY2hlZHVsZU1pY3JvdGFzayB9IGZyb20gJy4vdXRpbHMnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBOb3RpZnlNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTm90aWZ5TWFuYWdlcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy50cmFuc2FjdGlvbnMgPSAwO1xuXG4gICAgdGhpcy5ub3RpZnlGbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuXG4gICAgdGhpcy5iYXRjaE5vdGlmeUZuID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTm90aWZ5TWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJhdGNoID0gZnVuY3Rpb24gYmF0Y2goY2FsbGJhY2spIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIHRoaXMudHJhbnNhY3Rpb25zKys7XG5cbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbGJhY2soKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbnMtLTtcblxuICAgICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9ucykge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uc2NoZWR1bGUgPSBmdW5jdGlvbiBzY2hlZHVsZShjYWxsYmFjaykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbnMpIHtcbiAgICAgIHRoaXMucXVldWUucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMubm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBbGwgY2FsbHMgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24gd2lsbCBiZSBiYXRjaGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5iYXRjaENhbGxzID0gZnVuY3Rpb24gYmF0Y2hDYWxscyhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWxsYmFjay5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBxdWV1ZSA9IHRoaXMucXVldWU7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMuYmF0Y2hOb3RpZnlGbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcXVldWUuZm9yRWFjaChmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIF90aGlzMy5ub3RpZnlGbihjYWxsYmFjayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIG5vdGlmeSBmdW5jdGlvbi5cbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBmb3IgZXhhbXBsZSB3cmFwIG5vdGlmaWNhdGlvbnMgd2l0aCBgUmVhY3QuYWN0YCB3aGlsZSBydW5uaW5nIHRlc3RzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXROb3RpZnlGdW5jdGlvbiA9IGZ1bmN0aW9uIHNldE5vdGlmeUZ1bmN0aW9uKGZuKSB7XG4gICAgdGhpcy5ub3RpZnlGbiA9IGZuO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIGZ1bmN0aW9uIHRvIGJhdGNoIG5vdGlmaWNhdGlvbnMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSB0aWNrLlxuICAgKiBCeSBkZWZhdWx0IFJlYWN0IFF1ZXJ5IHdpbGwgdXNlIHRoZSBiYXRjaCBmdW5jdGlvbiBwcm92aWRlZCBieSBSZWFjdERPTSBvciBSZWFjdCBOYXRpdmUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldEJhdGNoTm90aWZ5RnVuY3Rpb24gPSBmdW5jdGlvbiBzZXRCYXRjaE5vdGlmeUZ1bmN0aW9uKGZuKSB7XG4gICAgdGhpcy5iYXRjaE5vdGlmeUZuID0gZm47XG4gIH07XG5cbiAgcmV0dXJuIE5vdGlmeU1hbmFnZXI7XG59KCk7IC8vIFNJTkdMRVRPTlxuXG5leHBvcnQgdmFyIG5vdGlmeU1hbmFnZXIgPSBuZXcgTm90aWZ5TWFuYWdlcigpOyIsICIvLyBUWVBFU1xuLy8gRlVOQ1RJT05TXG52YXIgbG9nZ2VyID0gY29uc29sZTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2dnZXIoKSB7XG4gIHJldHVybiBsb2dnZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0TG9nZ2VyKG5ld0xvZ2dlcikge1xuICBsb2dnZXIgPSBuZXdMb2dnZXI7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2V0QWJvcnRDb250cm9sbGVyLCBmdW5jdGlvbmFsVXBkYXRlLCBpc1ZhbGlkVGltZW91dCwgbm9vcCwgcmVwbGFjZUVxdWFsRGVlcCwgdGltZVVudGlsU3RhbGUsIGVuc3VyZVF1ZXJ5S2V5QXJyYXkgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgUmV0cnllciwgaXNDYW5jZWxsZWRFcnJvciB9IGZyb20gJy4vcmV0cnllcic7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUXVlcnkoY29uZmlnKSB7XG4gICAgdGhpcy5hYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgdGhpcy5oYWRPYnNlcnZlcnMgPSBmYWxzZTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhjb25maWcub3B0aW9ucyk7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLmNhY2hlID0gY29uZmlnLmNhY2hlO1xuICAgIHRoaXMucXVlcnlLZXkgPSBjb25maWcucXVlcnlLZXk7XG4gICAgdGhpcy5xdWVyeUhhc2ggPSBjb25maWcucXVlcnlIYXNoO1xuICAgIHRoaXMuaW5pdGlhbFN0YXRlID0gY29uZmlnLnN0YXRlIHx8IHRoaXMuZ2V0RGVmYXVsdFN0YXRlKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMubWV0YSA9IGNvbmZpZy5tZXRhO1xuICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5LnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJGNhY2hlVGk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgdGhpcy5tZXRhID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tZXRhOyAvLyBEZWZhdWx0IHRvIDUgbWludXRlcyBpZiBub3QgY2FjaGUgdGltZSBpcyBzZXRcblxuICAgIHRoaXMuY2FjaGVUaW1lID0gTWF0aC5tYXgodGhpcy5jYWNoZVRpbWUgfHwgMCwgKF90aGlzJG9wdGlvbnMkY2FjaGVUaSA9IHRoaXMub3B0aW9ucy5jYWNoZVRpbWUpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJGNhY2hlVGkgOiA1ICogNjAgKiAxMDAwKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNjaGVkdWxlR2MgPSBmdW5jdGlvbiBzY2hlZHVsZUdjKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG5cbiAgICBpZiAoaXNWYWxpZFRpbWVvdXQodGhpcy5jYWNoZVRpbWUpKSB7XG4gICAgICB0aGlzLmdjVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgfSwgdGhpcy5jYWNoZVRpbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXJHY1RpbWVvdXQgPSBmdW5jdGlvbiBjbGVhckdjVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy5nY1RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmdjVGltZW91dCk7XG4gICAgICB0aGlzLmdjVGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9wdGlvbmFsUmVtb3ZlID0gZnVuY3Rpb24gb3B0aW9uYWxSZW1vdmUoKSB7XG4gICAgaWYgKCF0aGlzLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmlzRmV0Y2hpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFkT2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RGF0YSA9IGZ1bmN0aW9uIHNldERhdGEodXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJGlzRGF0YUUsIF90aGlzJG9wdGlvbnM7XG5cbiAgICB2YXIgcHJldkRhdGEgPSB0aGlzLnN0YXRlLmRhdGE7IC8vIEdldCB0aGUgbmV3IGRhdGFcblxuICAgIHZhciBkYXRhID0gZnVuY3Rpb25hbFVwZGF0ZSh1cGRhdGVyLCBwcmV2RGF0YSk7IC8vIFVzZSBwcmV2IGRhdGEgaWYgYW4gaXNEYXRhRXF1YWwgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgcmV0dXJucyBgdHJ1ZWBcblxuICAgIGlmICgoX3RoaXMkb3B0aW9ucyRpc0RhdGFFID0gKF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMpLmlzRGF0YUVxdWFsKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRpc0RhdGFFLmNhbGwoX3RoaXMkb3B0aW9ucywgcHJldkRhdGEsIGRhdGEpKSB7XG4gICAgICBkYXRhID0gcHJldkRhdGE7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAvLyBTdHJ1Y3R1cmFsbHkgc2hhcmUgZGF0YSBiZXR3ZWVuIHByZXYgYW5kIG5ldyBkYXRhIGlmIG5lZWRlZFxuICAgICAgZGF0YSA9IHJlcGxhY2VFcXVhbERlZXAocHJldkRhdGEsIGRhdGEpO1xuICAgIH0gLy8gU2V0IGRhdGEgYW5kIG1hcmsgaXQgYXMgY2FjaGVkXG5cblxuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudXBkYXRlZEF0XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgX3Byb3RvLnNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUsIHNldFN0YXRlT3B0aW9ucykge1xuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ3NldFN0YXRlJyxcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldFN0YXRlT3B0aW9uczogc2V0U3RhdGVPcHRpb25zXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXI7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcbiAgICAoX3RoaXMkcmV0cnllciA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIuY2FuY2VsKG9wdGlvbnMpO1xuICAgIHJldHVybiBwcm9taXNlID8gcHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcbiAgICB0aGlzLmNhbmNlbCh7XG4gICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuaW5pdGlhbFN0YXRlKTtcbiAgfTtcblxuICBfcHJvdG8uaXNBY3RpdmUgPSBmdW5jdGlvbiBpc0FjdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMuc29tZShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlci5vcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc0ZldGNoaW5nID0gZnVuY3Rpb24gaXNGZXRjaGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ZldGNoaW5nO1xuICB9O1xuXG4gIF9wcm90by5pc1N0YWxlID0gZnVuY3Rpb24gaXNTdGFsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkIHx8ICF0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgfHwgdGhpcy5vYnNlcnZlcnMuc29tZShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCkuaXNTdGFsZTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNTdGFsZUJ5VGltZSA9IGZ1bmN0aW9uIGlzU3RhbGVCeVRpbWUoc3RhbGVUaW1lKSB7XG4gICAgaWYgKHN0YWxlVGltZSA9PT0gdm9pZCAwKSB7XG4gICAgICBzdGFsZVRpbWUgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgIXRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCB8fCAhdGltZVVudGlsU3RhbGUodGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0LCBzdGFsZVRpbWUpO1xuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjI7XG5cbiAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKTtcbiAgICB9KTtcblxuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIucmVmZXRjaCgpO1xuICAgIH0gLy8gQ29udGludWUgZmV0Y2ggaWYgY3VycmVudGx5IHBhdXNlZFxuXG5cbiAgICAoX3RoaXMkcmV0cnllcjIgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyMi5jb250aW51ZSgpO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyMztcblxuICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnNob3VsZEZldGNoT25SZWNvbm5lY3QoKTtcbiAgICB9KTtcblxuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIucmVmZXRjaCgpO1xuICAgIH0gLy8gQ29udGludWUgZmV0Y2ggaWYgY3VycmVudGx5IHBhdXNlZFxuXG5cbiAgICAoX3RoaXMkcmV0cnllcjMgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyMy5jb250aW51ZSgpO1xuICB9O1xuXG4gIF9wcm90by5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpID09PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgICB0aGlzLmhhZE9ic2VydmVycyA9IHRydWU7IC8vIFN0b3AgdGhlIHF1ZXJ5IGZyb20gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWRcblxuICAgICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgICAgdGhpcy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnb2JzZXJ2ZXJBZGRlZCcsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLFxuICAgICAgICBvYnNlcnZlcjogb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBvYnNlcnZlcjtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAvLyBJZiB0aGUgdHJhbnNwb3J0IGxheWVyIGRvZXMgbm90IHN1cHBvcnQgY2FuY2VsbGF0aW9uXG4gICAgICAgIC8vIHdlJ2xsIGxldCB0aGUgcXVlcnkgY29udGludWUgc28gdGhlIHJlc3VsdCBjYW4gYmUgY2FjaGVkXG4gICAgICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXRyeWVyLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSB8fCB0aGlzLmFib3J0U2lnbmFsQ29uc3VtZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmV0cnllci5jYW5jZWwoe1xuICAgICAgICAgICAgICByZXZlcnQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsUmV0cnkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWNoZVRpbWUpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNhY2hlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdvYnNlcnZlclJlbW92ZWQnLFxuICAgICAgICBxdWVyeTogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZXI6IG9ic2VydmVyXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE9ic2VydmVyc0NvdW50ID0gZnVuY3Rpb24gZ2V0T2JzZXJ2ZXJzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZSA9IGZ1bmN0aW9uIGludmFsaWRhdGUoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnaW52YWxpZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZmV0Y2ggPSBmdW5jdGlvbiBmZXRjaChvcHRpb25zLCBmZXRjaE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcyxcbiAgICAgICAgX3RoaXMkb3B0aW9ucyRiZWhhdmlvLFxuICAgICAgICBfY29udGV4dCRmZXRjaE9wdGlvbnMsXG4gICAgICAgIF9hYm9ydENvbnRyb2xsZXIkYWJvcjtcblxuICAgIGlmICh0aGlzLnN0YXRlLmlzRmV0Y2hpbmcpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgJiYgKGZldGNoT3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hPcHRpb25zLmNhbmNlbFJlZmV0Y2gpKSB7XG4gICAgICAgIC8vIFNpbGVudGx5IGNhbmNlbCBjdXJyZW50IGZldGNoIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGNhbmNlbCByZWZldGNoZXNcbiAgICAgICAgdGhpcy5jYW5jZWwoe1xuICAgICAgICAgIHNpbGVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9taXNlKSB7XG4gICAgICAgIHZhciBfdGhpcyRyZXRyeWVyNDtcblxuICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCByZXRyaWVzIHRoYXQgd2VyZSBwb3RlbnRpYWxseSBjYW5jZWxsZWQgZHVlIHRvIHVubW91bnRzIGNhbiBjb250aW51ZVxuICAgICAgICAoX3RoaXMkcmV0cnllcjQgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyNC5jb250aW51ZVJldHJ5KCk7IC8vIFJldHVybiBjdXJyZW50IHByb21pc2UgaWYgd2UgYXJlIGFscmVhZHkgZmV0Y2hpbmdcblxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgICAgfVxuICAgIH0gLy8gVXBkYXRlIGNvbmZpZyBpZiBwYXNzZWQsIG90aGVyd2lzZSB0aGUgY29uZmlnIGZyb20gdGhlIGxhc3QgZXhlY3V0aW9uIGlzIHVzZWRcblxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9IC8vIFVzZSB0aGUgb3B0aW9ucyBmcm9tIHRoZSBmaXJzdCBvYnNlcnZlciB3aXRoIGEgcXVlcnkgZnVuY3Rpb24gaWYgbm8gZnVuY3Rpb24gaXMgZm91bmQuXG4gICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIHF1ZXJ5IGlzIGh5ZHJhdGVkIG9yIGNyZWF0ZWQgd2l0aCBzZXRRdWVyeURhdGEuXG5cblxuICAgIGlmICghdGhpcy5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHgub3B0aW9ucy5xdWVyeUZuO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICB0aGlzLnNldE9wdGlvbnMob2JzZXJ2ZXIub3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHF1ZXJ5S2V5ID0gZW5zdXJlUXVlcnlLZXlBcnJheSh0aGlzLnF1ZXJ5S2V5KTtcbiAgICB2YXIgYWJvcnRDb250cm9sbGVyID0gZ2V0QWJvcnRDb250cm9sbGVyKCk7IC8vIENyZWF0ZSBxdWVyeSBmdW5jdGlvbiBjb250ZXh0XG5cbiAgICB2YXIgcXVlcnlGbkNvbnRleHQgPSB7XG4gICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICBwYWdlUGFyYW06IHVuZGVmaW5lZCxcbiAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5Rm5Db250ZXh0LCAnc2lnbmFsJywge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAgICAgX3RoaXMyLmFib3J0U2lnbmFsQ29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTsgLy8gQ3JlYXRlIGZldGNoIGZ1bmN0aW9uXG5cbiAgICB2YXIgZmV0Y2hGbiA9IGZ1bmN0aW9uIGZldGNoRm4oKSB7XG4gICAgICBpZiAoIV90aGlzMi5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHF1ZXJ5Rm4nKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLmFib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5xdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICB9OyAvLyBUcmlnZ2VyIGJlaGF2aW9yIGhvb2tcblxuXG4gICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICBmZXRjaE9wdGlvbnM6IGZldGNoT3B0aW9ucyxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgZmV0Y2hGbjogZmV0Y2hGbixcbiAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgIH07XG5cbiAgICBpZiAoKF90aGlzJG9wdGlvbnMkYmVoYXZpbyA9IHRoaXMub3B0aW9ucy5iZWhhdmlvcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkYmVoYXZpby5vbkZldGNoKSB7XG4gICAgICB2YXIgX3RoaXMkb3B0aW9ucyRiZWhhdmlvMjtcblxuICAgICAgKF90aGlzJG9wdGlvbnMkYmVoYXZpbzIgPSB0aGlzLm9wdGlvbnMuYmVoYXZpb3IpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGJlaGF2aW8yLm9uRmV0Y2goY29udGV4dCk7XG4gICAgfSAvLyBTdG9yZSBzdGF0ZSBpbiBjYXNlIHRoZSBjdXJyZW50IGZldGNoIG5lZWRzIHRvIGJlIHJldmVydGVkXG5cblxuICAgIHRoaXMucmV2ZXJ0U3RhdGUgPSB0aGlzLnN0YXRlOyAvLyBTZXQgdG8gZmV0Y2hpbmcgc3RhdGUgaWYgbm90IGFscmVhZHkgaW4gaXRcblxuICAgIGlmICghdGhpcy5zdGF0ZS5pc0ZldGNoaW5nIHx8IHRoaXMuc3RhdGUuZmV0Y2hNZXRhICE9PSAoKF9jb250ZXh0JGZldGNoT3B0aW9ucyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zLm1ldGEpKSB7XG4gICAgICB2YXIgX2NvbnRleHQkZmV0Y2hPcHRpb25zMjtcblxuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdmZXRjaCcsXG4gICAgICAgIG1ldGE6IChfY29udGV4dCRmZXRjaE9wdGlvbnMyID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMyLm1ldGFcbiAgICAgIH0pO1xuICAgIH0gLy8gVHJ5IHRvIGZldGNoIHRoZSBkYXRhXG5cblxuICAgIHRoaXMucmV0cnllciA9IG5ldyBSZXRyeWVyKHtcbiAgICAgIGZuOiBjb250ZXh0LmZldGNoRm4sXG4gICAgICBhYm9ydDogYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiAoX2Fib3J0Q29udHJvbGxlciRhYm9yID0gYWJvcnRDb250cm9sbGVyLmFib3J0KSA9PSBudWxsID8gdm9pZCAwIDogX2Fib3J0Q29udHJvbGxlciRhYm9yLmJpbmQoYWJvcnRDb250cm9sbGVyKSxcbiAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gb25TdWNjZXNzKGRhdGEpIHtcbiAgICAgICAgX3RoaXMyLnNldERhdGEoZGF0YSk7IC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuXG5cbiAgICAgICAgX3RoaXMyLmNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzMi5jYWNoZS5jb25maWcub25TdWNjZXNzKGRhdGEsIF90aGlzMik7IC8vIFJlbW92ZSBxdWVyeSBhZnRlciBmZXRjaGluZyBpZiBjYWNoZSB0aW1lIGlzIDBcblxuICAgICAgICBpZiAoX3RoaXMyLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgICAgIF90aGlzMi5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25FcnJvcjogZnVuY3Rpb24gb25FcnJvcihlcnJvcikge1xuICAgICAgICAvLyBPcHRpbWlzdGljYWxseSB1cGRhdGUgc3RhdGUgaWYgbmVlZGVkXG4gICAgICAgIGlmICghKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnNpbGVudCkpIHtcbiAgICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0NhbmNlbGxlZEVycm9yKGVycm9yKSkge1xuICAgICAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgICAgIF90aGlzMi5jYWNoZS5jb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMyLmNhY2hlLmNvbmZpZy5vbkVycm9yKGVycm9yLCBfdGhpczIpOyAvLyBMb2cgZXJyb3JcblxuICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKGVycm9yKTtcbiAgICAgICAgfSAvLyBSZW1vdmUgcXVlcnkgYWZ0ZXIgZmV0Y2hpbmcgaWYgY2FjaGUgdGltZSBpcyAwXG5cblxuICAgICAgICBpZiAoX3RoaXMyLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgICAgIF90aGlzMi5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25GYWlsOiBmdW5jdGlvbiBvbkZhaWwoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25QYXVzZTogZnVuY3Rpb24gb25QYXVzZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAncGF1c2UnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6IGZ1bmN0aW9uIG9uQ29udGludWUoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2NvbnRpbnVlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogY29udGV4dC5vcHRpb25zLnJldHJ5LFxuICAgICAgcmV0cnlEZWxheTogY29udGV4dC5vcHRpb25zLnJldHJ5RGVsYXlcbiAgICB9KTtcbiAgICB0aGlzLnByb21pc2UgPSB0aGlzLnJldHJ5ZXIucHJvbWlzZTtcbiAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucmVkdWNlcih0aGlzLnN0YXRlLCBhY3Rpb24pO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vblF1ZXJ5VXBkYXRlKGFjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHF1ZXJ5OiBfdGhpczMsXG4gICAgICAgIHR5cGU6ICdxdWVyeVVwZGF0ZWQnLFxuICAgICAgICBhY3Rpb246IGFjdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldERlZmF1bHRTdGF0ZSA9IGZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZShvcHRpb25zKSB7XG4gICAgdmFyIGRhdGEgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuaW5pdGlhbERhdGEoKSA6IG9wdGlvbnMuaW5pdGlhbERhdGE7XG4gICAgdmFyIGhhc0luaXRpYWxEYXRhID0gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGEgIT09ICd1bmRlZmluZWQnO1xuICAgIHZhciBpbml0aWFsRGF0YVVwZGF0ZWRBdCA9IGhhc0luaXRpYWxEYXRhID8gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0KCkgOiBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0IDogMDtcbiAgICB2YXIgaGFzRGF0YSA9IHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJztcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGRhdGFVcGRhdGVDb3VudDogMCxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IGhhc0RhdGEgPyBpbml0aWFsRGF0YVVwZGF0ZWRBdCAhPSBudWxsID8gaW5pdGlhbERhdGFVcGRhdGVkQXQgOiBEYXRlLm5vdygpIDogMCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgZXJyb3JVcGRhdGVDb3VudDogMCxcbiAgICAgIGVycm9yVXBkYXRlZEF0OiAwLFxuICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICBmZXRjaE1ldGE6IG51bGwsXG4gICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgc3RhdHVzOiBoYXNEYXRhID8gJ3N1Y2Nlc3MnIDogJ2lkbGUnXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8ucmVkdWNlciA9IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgIHZhciBfYWN0aW9uJG1ldGEsIF9hY3Rpb24kZGF0YVVwZGF0ZWRBdDtcblxuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQgKyAxXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdwYXVzZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc1BhdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnY29udGludWUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdmZXRjaCc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgICAgICBmZXRjaE1ldGE6IChfYWN0aW9uJG1ldGEgPSBhY3Rpb24ubWV0YSkgIT0gbnVsbCA/IF9hY3Rpb24kbWV0YSA6IG51bGwsXG4gICAgICAgICAgaXNGZXRjaGluZzogdHJ1ZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgfSwgIXN0YXRlLmRhdGFVcGRhdGVkQXQgJiYge1xuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIHN0YXR1czogJ2xvYWRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICAgIGRhdGFVcGRhdGVDb3VudDogc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICBkYXRhVXBkYXRlZEF0OiAoX2FjdGlvbiRkYXRhVXBkYXRlZEF0ID0gYWN0aW9uLmRhdGFVcGRhdGVkQXQpICE9IG51bGwgPyBfYWN0aW9uJGRhdGFVcGRhdGVkQXQgOiBEYXRlLm5vdygpLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICB2YXIgZXJyb3IgPSBhY3Rpb24uZXJyb3I7XG5cbiAgICAgICAgaWYgKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnJldmVydCAmJiB0aGlzLnJldmVydFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLnJldmVydFN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgZXJyb3JVcGRhdGVDb3VudDogc3RhdGUuZXJyb3JVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgZXJyb3JVcGRhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiAnZXJyb3InXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdpbnZhbGlkYXRlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3NldFN0YXRlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgYWN0aW9uLnN0YXRlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUXVlcnk7XG59KCk7IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgaGFzaFF1ZXJ5S2V5QnlPcHRpb25zLCBtYXRjaFF1ZXJ5LCBwYXJzZUZpbHRlckFyZ3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5Q2FjaGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoUXVlcnlDYWNoZSwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gUXVlcnlDYWNoZShjb25maWcpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBfdGhpcy5xdWVyaWVzID0gW107XG4gICAgX3RoaXMucXVlcmllc01hcCA9IHt9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeUNhY2hlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGQgPSBmdW5jdGlvbiBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgdmFyIF9vcHRpb25zJHF1ZXJ5SGFzaDtcblxuICAgIHZhciBxdWVyeUtleSA9IG9wdGlvbnMucXVlcnlLZXk7XG4gICAgdmFyIHF1ZXJ5SGFzaCA9IChfb3B0aW9ucyRxdWVyeUhhc2ggPSBvcHRpb25zLnF1ZXJ5SGFzaCkgIT0gbnVsbCA/IF9vcHRpb25zJHF1ZXJ5SGFzaCA6IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucyk7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5nZXQocXVlcnlIYXNoKTtcblxuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHtcbiAgICAgICAgY2FjaGU6IHRoaXMsXG4gICAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgICAgcXVlcnlIYXNoOiBxdWVyeUhhc2gsXG4gICAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpLFxuICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBjbGllbnQuZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSksXG4gICAgICAgIG1ldGE6IG9wdGlvbnMubWV0YVxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZChxdWVyeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9O1xuXG4gIF9wcm90by5hZGQgPSBmdW5jdGlvbiBhZGQocXVlcnkpIHtcbiAgICBpZiAoIXRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdKSB7XG4gICAgICB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXSA9IHF1ZXJ5O1xuICAgICAgdGhpcy5xdWVyaWVzLnB1c2gocXVlcnkpO1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAncXVlcnlBZGRlZCcsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocXVlcnkpIHtcbiAgICB2YXIgcXVlcnlJbk1hcCA9IHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdO1xuXG4gICAgaWYgKHF1ZXJ5SW5NYXApIHtcbiAgICAgIHF1ZXJ5LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMucXVlcmllcyA9IHRoaXMucXVlcmllcy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IHF1ZXJ5O1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChxdWVyeUluTWFwID09PSBxdWVyeSkge1xuICAgICAgICBkZWxldGUgdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF07XG4gICAgICB9XG5cbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5UmVtb3ZlZCcsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBfdGhpczIucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXQgPSBmdW5jdGlvbiBnZXQocXVlcnlIYXNoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllc01hcFtxdWVyeUhhc2hdO1xuICB9O1xuXG4gIF9wcm90by5nZXRBbGwgPSBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllcztcbiAgfTtcblxuICBfcHJvdG8uZmluZCA9IGZ1bmN0aW9uIGZpbmQoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnc1swXTtcblxuICAgIGlmICh0eXBlb2YgZmlsdGVycy5leGFjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbHRlcnMuZXhhY3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1ZXJpZXMuZmluZChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHJldHVybiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmluZEFsbCA9IGZ1bmN0aW9uIGZpbmRBbGwoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzMiA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3MyWzBdO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDAgPyB0aGlzLnF1ZXJpZXMuZmlsdGVyKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgcmV0dXJuIG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpO1xuICAgIH0pIDogdGhpcy5xdWVyaWVzO1xuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoZXZlbnQpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcihldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNC5xdWVyaWVzLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Lm9uRm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5vbk9ubGluZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2FjaGU7XG59KFN1YnNjcmliYWJsZSk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBSZXRyeWVyIH0gZnJvbSAnLi9yZXRyeWVyJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL3V0aWxzJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTXV0YXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNdXRhdGlvbihjb25maWcpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgY29uZmlnLmRlZmF1bHRPcHRpb25zLCBjb25maWcub3B0aW9ucyk7XG4gICAgdGhpcy5tdXRhdGlvbklkID0gY29uZmlnLm11dGF0aW9uSWQ7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGU7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLnN0YXRlID0gY29uZmlnLnN0YXRlIHx8IGdldERlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMubWV0YSA9IGNvbmZpZy5tZXRhO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE11dGF0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ3NldFN0YXRlJyxcbiAgICAgIHN0YXRlOiBzdGF0ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpID09PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICE9PSBvYnNlcnZlcjtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgIHRoaXMucmV0cnllci5jYW5jZWwoKTtcbiAgICAgIHJldHVybiB0aGlzLnJldHJ5ZXIucHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcblxuICBfcHJvdG8uY29udGludWUgPSBmdW5jdGlvbiBfY29udGludWUoKSB7XG4gICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgdGhpcy5yZXRyeWVyLmNvbnRpbnVlKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSgpO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlID0gZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGRhdGE7XG4gICAgdmFyIHJlc3RvcmVkID0gdGhpcy5zdGF0ZS5zdGF0dXMgPT09ICdsb2FkaW5nJztcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgaWYgKCFyZXN0b3JlZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgdmFyaWFibGVzOiB0aGlzLm9wdGlvbnMudmFyaWFibGVzXG4gICAgICB9KTtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25NdXRhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlKF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uTXV0YXRlID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uTXV0YXRlKF90aGlzLnN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ICE9PSBfdGhpcy5zdGF0ZS5jb250ZXh0KSB7XG4gICAgICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2xvYWRpbmcnLFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgICAgIHZhcmlhYmxlczogX3RoaXMuc3RhdGUudmFyaWFibGVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLmV4ZWN1dGVNdXRhdGlvbigpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgZGF0YSA9IHJlc3VsdDsgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG5cbiAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25TdWNjZXNzKGRhdGEsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCwgX3RoaXMpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU3VjY2VzcyhkYXRhLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZChkYXRhLCBudWxsLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvcihlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0LCBfdGhpcyk7IC8vIExvZyBlcnJvclxuXG4gICAgICBnZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25FcnJvcihlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25TZXR0bGVkKHVuZGVmaW5lZCwgZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVNdXRhdGlvbiA9IGZ1bmN0aW9uIGV4ZWN1dGVNdXRhdGlvbigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcyxcbiAgICAgICAgX3RoaXMkb3B0aW9ucyRyZXRyeTtcblxuICAgIHRoaXMucmV0cnllciA9IG5ldyBSZXRyeWVyKHtcbiAgICAgIGZuOiBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgaWYgKCFfdGhpczIub3B0aW9ucy5tdXRhdGlvbkZuKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdObyBtdXRhdGlvbkZuIGZvdW5kJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMubXV0YXRpb25GbihfdGhpczIuc3RhdGUudmFyaWFibGVzKTtcbiAgICAgIH0sXG4gICAgICBvbkZhaWw6IGZ1bmN0aW9uIG9uRmFpbCgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiBmdW5jdGlvbiBvblBhdXNlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdwYXVzZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogZnVuY3Rpb24gb25Db250aW51ZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnY29udGludWUnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJldHJ5OiAoX3RoaXMkb3B0aW9ucyRyZXRyeSA9IHRoaXMub3B0aW9ucy5yZXRyeSkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkcmV0cnkgOiAwLFxuICAgICAgcmV0cnlEZWxheTogdGhpcy5vcHRpb25zLnJldHJ5RGVsYXlcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnN0YXRlID0gcmVkdWNlcih0aGlzLnN0YXRlLCBhY3Rpb24pO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vbk11dGF0aW9uVXBkYXRlKGFjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMzLm11dGF0aW9uQ2FjaGUubm90aWZ5KF90aGlzMyk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE11dGF0aW9uO1xufSgpO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0OiB1bmRlZmluZWQsXG4gICAgZGF0YTogdW5kZWZpbmVkLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGZhaWx1cmVDb3VudDogMCxcbiAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgc3RhdHVzOiAnaWRsZScsXG4gICAgdmFyaWFibGVzOiB1bmRlZmluZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZhaWx1cmVDb3VudCArIDFcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAncGF1c2UnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc1BhdXNlZDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdjb250aW51ZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdsb2FkaW5nJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgY29udGV4dDogYWN0aW9uLmNvbnRleHQsXG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICAgIHZhcmlhYmxlczogYWN0aW9uLnZhcmlhYmxlc1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogYWN0aW9uLmVycm9yLFxuICAgICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZhaWx1cmVDb3VudCArIDEsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3NldFN0YXRlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIGFjdGlvbi5zdGF0ZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBNdXRhdGlvbiB9IGZyb20gJy4vbXV0YXRpb24nO1xuaW1wb3J0IHsgbWF0Y2hNdXRhdGlvbiwgbm9vcCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBNdXRhdGlvbkNhY2hlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKE11dGF0aW9uQ2FjaGUsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIE11dGF0aW9uQ2FjaGUoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG4gICAgX3RoaXMubXV0YXRpb25zID0gW107XG4gICAgX3RoaXMubXV0YXRpb25JZCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE11dGF0aW9uQ2FjaGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZCA9IGZ1bmN0aW9uIGJ1aWxkKGNsaWVudCwgb3B0aW9ucywgc3RhdGUpIHtcbiAgICB2YXIgbXV0YXRpb24gPSBuZXcgTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb25DYWNoZTogdGhpcyxcbiAgICAgIG11dGF0aW9uSWQ6ICsrdGhpcy5tdXRhdGlvbklkLFxuICAgICAgb3B0aW9uczogY2xpZW50LmRlZmF1bHRNdXRhdGlvbk9wdGlvbnMob3B0aW9ucyksXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9ucy5tdXRhdGlvbktleSA/IGNsaWVudC5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMubXV0YXRpb25LZXkpIDogdW5kZWZpbmVkLFxuICAgICAgbWV0YTogb3B0aW9ucy5tZXRhXG4gICAgfSk7XG4gICAgdGhpcy5hZGQobXV0YXRpb24pO1xuICAgIHJldHVybiBtdXRhdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKG11dGF0aW9uKSB7XG4gICAgdGhpcy5tdXRhdGlvbnMucHVzaChtdXRhdGlvbik7XG4gICAgdGhpcy5ub3RpZnkobXV0YXRpb24pO1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUobXV0YXRpb24pIHtcbiAgICB0aGlzLm11dGF0aW9ucyA9IHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggIT09IG11dGF0aW9uO1xuICAgIH0pO1xuICAgIG11dGF0aW9uLmNhbmNlbCgpO1xuICAgIHRoaXMubm90aWZ5KG11dGF0aW9uKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLm11dGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICBfdGhpczIucmVtb3ZlKG11dGF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXRBbGwgPSBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zO1xuICB9O1xuXG4gIF9wcm90by5maW5kID0gZnVuY3Rpb24gZmluZChmaWx0ZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBmaWx0ZXJzLmV4YWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZmlsdGVycy5leGFjdCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zLmZpbmQoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICByZXR1cm4gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbik7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmRBbGwgPSBmdW5jdGlvbiBmaW5kQWxsKGZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkobXV0YXRpb24pIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcihtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICB9O1xuXG4gIF9wcm90by5yZXN1bWVQYXVzZWRNdXRhdGlvbnMgPSBmdW5jdGlvbiByZXN1bWVQYXVzZWRNdXRhdGlvbnMoKSB7XG4gICAgdmFyIHBhdXNlZE11dGF0aW9ucyA9IHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc3RhdGUuaXNQYXVzZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHBhdXNlZE11dGF0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHByb21pc2UsIG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBtdXRhdGlvbi5jb250aW51ZSgpLmNhdGNoKG5vb3ApO1xuICAgICAgICB9KTtcbiAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTXV0YXRpb25DYWNoZTtcbn0oU3Vic2NyaWJhYmxlKTsiLCAiaW1wb3J0IHsgaXNDYW5jZWxhYmxlIH0gZnJvbSAnLi9yZXRyeWVyJztcbmltcG9ydCB7IGdldEFib3J0Q29udHJvbGxlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGluZmluaXRlUXVlcnlCZWhhdmlvcigpIHtcbiAgcmV0dXJuIHtcbiAgICBvbkZldGNoOiBmdW5jdGlvbiBvbkZldGNoKGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuZmV0Y2hGbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9jb250ZXh0JGZldGNoT3B0aW9ucywgX2NvbnRleHQkZmV0Y2hPcHRpb25zMiwgX2NvbnRleHQkZmV0Y2hPcHRpb25zMywgX2NvbnRleHQkZmV0Y2hPcHRpb25zNCwgX2NvbnRleHQkc3RhdGUkZGF0YSwgX2NvbnRleHQkc3RhdGUkZGF0YTI7XG5cbiAgICAgICAgdmFyIHJlZmV0Y2hQYWdlID0gKF9jb250ZXh0JGZldGNoT3B0aW9ucyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF9jb250ZXh0JGZldGNoT3B0aW9uczIgPSBfY29udGV4dCRmZXRjaE9wdGlvbnMubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczIucmVmZXRjaFBhZ2U7XG4gICAgICAgIHZhciBmZXRjaE1vcmUgPSAoX2NvbnRleHQkZmV0Y2hPcHRpb25zMyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF9jb250ZXh0JGZldGNoT3B0aW9uczQgPSBfY29udGV4dCRmZXRjaE9wdGlvbnMzLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnM0LmZldGNoTW9yZTtcbiAgICAgICAgdmFyIHBhZ2VQYXJhbSA9IGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLnBhZ2VQYXJhbTtcbiAgICAgICAgdmFyIGlzRmV0Y2hpbmdOZXh0UGFnZSA9IChmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5kaXJlY3Rpb24pID09PSAnZm9yd2FyZCc7XG4gICAgICAgIHZhciBpc0ZldGNoaW5nUHJldmlvdXNQYWdlID0gKGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLmRpcmVjdGlvbikgPT09ICdiYWNrd2FyZCc7XG4gICAgICAgIHZhciBvbGRQYWdlcyA9ICgoX2NvbnRleHQkc3RhdGUkZGF0YSA9IGNvbnRleHQuc3RhdGUuZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JHN0YXRlJGRhdGEucGFnZXMpIHx8IFtdO1xuICAgICAgICB2YXIgb2xkUGFnZVBhcmFtcyA9ICgoX2NvbnRleHQkc3RhdGUkZGF0YTIgPSBjb250ZXh0LnN0YXRlLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRzdGF0ZSRkYXRhMi5wYWdlUGFyYW1zKSB8fCBbXTtcbiAgICAgICAgdmFyIGFib3J0Q29udHJvbGxlciA9IGdldEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICB2YXIgYWJvcnRTaWduYWwgPSBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgIHZhciBuZXdQYWdlUGFyYW1zID0gb2xkUGFnZVBhcmFtcztcbiAgICAgICAgdmFyIGNhbmNlbGxlZCA9IGZhbHNlOyAvLyBHZXQgcXVlcnkgZnVuY3Rpb25cblxuICAgICAgICB2YXIgcXVlcnlGbiA9IGNvbnRleHQub3B0aW9ucy5xdWVyeUZuIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcXVlcnlGbicpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBidWlsZE5ld1BhZ2VzID0gZnVuY3Rpb24gYnVpbGROZXdQYWdlcyhwYWdlcywgcGFyYW0sIHBhZ2UsIHByZXZpb3VzKSB7XG4gICAgICAgICAgbmV3UGFnZVBhcmFtcyA9IHByZXZpb3VzID8gW3BhcmFtXS5jb25jYXQobmV3UGFnZVBhcmFtcykgOiBbXS5jb25jYXQobmV3UGFnZVBhcmFtcywgW3BhcmFtXSk7XG4gICAgICAgICAgcmV0dXJuIHByZXZpb3VzID8gW3BhZ2VdLmNvbmNhdChwYWdlcykgOiBbXS5jb25jYXQocGFnZXMsIFtwYWdlXSk7XG4gICAgICAgIH07IC8vIENyZWF0ZSBmdW5jdGlvbiB0byBmZXRjaCBhIHBhZ2VcblxuXG4gICAgICAgIHZhciBmZXRjaFBhZ2UgPSBmdW5jdGlvbiBmZXRjaFBhZ2UocGFnZXMsIG1hbnVhbCwgcGFyYW0sIHByZXZpb3VzKSB7XG4gICAgICAgICAgaWYgKGNhbmNlbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdDYW5jZWxsZWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAndW5kZWZpbmVkJyAmJiAhbWFudWFsICYmIHBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwYWdlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgICAgICAgcXVlcnlLZXk6IGNvbnRleHQucXVlcnlLZXksXG4gICAgICAgICAgICBzaWduYWw6IGFib3J0U2lnbmFsLFxuICAgICAgICAgICAgcGFnZVBhcmFtOiBwYXJhbSxcbiAgICAgICAgICAgIG1ldGE6IGNvbnRleHQubWV0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgdmFyIHF1ZXJ5Rm5SZXN1bHQgPSBxdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShxdWVyeUZuUmVzdWx0KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVpbGROZXdQYWdlcyhwYWdlcywgcGFyYW0sIHBhZ2UsIHByZXZpb3VzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpc0NhbmNlbGFibGUocXVlcnlGblJlc3VsdCkpIHtcbiAgICAgICAgICAgIHZhciBwcm9taXNlQXNBbnkgPSBwcm9taXNlO1xuICAgICAgICAgICAgcHJvbWlzZUFzQW55LmNhbmNlbCA9IHF1ZXJ5Rm5SZXN1bHQuY2FuY2VsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBwcm9taXNlOyAvLyBGZXRjaCBmaXJzdCBwYWdlP1xuXG4gICAgICAgIGlmICghb2xkUGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShbXSk7XG4gICAgICAgIH0gLy8gRmV0Y2ggbmV4dCBwYWdlP1xuICAgICAgICBlbHNlIGlmIChpc0ZldGNoaW5nTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgIHZhciBtYW51YWwgPSB0eXBlb2YgcGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIHZhciBwYXJhbSA9IG1hbnVhbCA/IHBhZ2VQYXJhbSA6IGdldE5leHRQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBvbGRQYWdlcyk7XG4gICAgICAgICAgICBwcm9taXNlID0gZmV0Y2hQYWdlKG9sZFBhZ2VzLCBtYW51YWwsIHBhcmFtKTtcbiAgICAgICAgICB9IC8vIEZldGNoIHByZXZpb3VzIHBhZ2U/XG4gICAgICAgICAgZWxzZSBpZiAoaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSkge1xuICAgICAgICAgICAgICB2YXIgX21hbnVhbCA9IHR5cGVvZiBwYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgICAgICAgIHZhciBfcGFyYW0gPSBfbWFudWFsID8gcGFnZVBhcmFtIDogZ2V0UHJldmlvdXNQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBvbGRQYWdlcyk7XG5cbiAgICAgICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShvbGRQYWdlcywgX21hbnVhbCwgX3BhcmFtLCB0cnVlKTtcbiAgICAgICAgICAgIH0gLy8gUmVmZXRjaCBwYWdlc1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIG5ld1BhZ2VQYXJhbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgIHZhciBtYW51YWwgPSB0eXBlb2YgY29udGV4dC5vcHRpb25zLmdldE5leHRQYWdlUGFyYW0gPT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZEZldGNoRmlyc3RQYWdlID0gcmVmZXRjaFBhZ2UgJiYgb2xkUGFnZXNbMF0gPyByZWZldGNoUGFnZShvbGRQYWdlc1swXSwgMCwgb2xkUGFnZXMpIDogdHJ1ZTsgLy8gRmV0Y2ggZmlyc3QgcGFnZVxuXG4gICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2hvdWxkRmV0Y2hGaXJzdFBhZ2UgPyBmZXRjaFBhZ2UoW10sIG1hbnVhbCwgb2xkUGFnZVBhcmFtc1swXSkgOiBQcm9taXNlLnJlc29sdmUoYnVpbGROZXdQYWdlcyhbXSwgb2xkUGFnZVBhcmFtc1swXSwgb2xkUGFnZXNbMF0pKTsgLy8gRmV0Y2ggcmVtYWluaW5nIHBhZ2VzXG5cbiAgICAgICAgICAgICAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAocGFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hvdWxkRmV0Y2hOZXh0UGFnZSA9IHJlZmV0Y2hQYWdlICYmIG9sZFBhZ2VzW2ldID8gcmVmZXRjaFBhZ2Uob2xkUGFnZXNbaV0sIGksIG9sZFBhZ2VzKSA6IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRmV0Y2hOZXh0UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wYXJhbTIgPSBtYW51YWwgPyBvbGRQYWdlUGFyYW1zW2ldIDogZ2V0TmV4dFBhZ2VQYXJhbShjb250ZXh0Lm9wdGlvbnMsIHBhZ2VzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoUGFnZShwYWdlcywgbWFudWFsLCBfcGFyYW0yKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJ1aWxkTmV3UGFnZXMocGFnZXMsIG9sZFBhZ2VQYXJhbXNbaV0sIG9sZFBhZ2VzW2ldKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBvbGRQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBfbG9vcChpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZpbmFsUHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAocGFnZXMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFnZXM6IHBhZ2VzLFxuICAgICAgICAgICAgcGFnZVBhcmFtczogbmV3UGFnZVBhcmFtc1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZmluYWxQcm9taXNlQXNBbnkgPSBmaW5hbFByb21pc2U7XG5cbiAgICAgICAgZmluYWxQcm9taXNlQXNBbnkuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcblxuICAgICAgICAgIGlmIChpc0NhbmNlbGFibGUocHJvbWlzZSkpIHtcbiAgICAgICAgICAgIHByb21pc2UuY2FuY2VsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBmaW5hbFByb21pc2U7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIHJldHVybiBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0gPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbShwYWdlc1twYWdlcy5sZW5ndGggLSAxXSwgcGFnZXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIHJldHVybiBvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtKHBhZ2VzWzBdLCBwYWdlcyk7XG59XG4vKipcbiAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIG5leHQgcGFnZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc05leHRQYWdlKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIGlmIChvcHRpb25zLmdldE5leHRQYWdlUGFyYW0gJiYgQXJyYXkuaXNBcnJheShwYWdlcykpIHtcbiAgICB2YXIgbmV4dFBhZ2VQYXJhbSA9IGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpO1xuICAgIHJldHVybiB0eXBlb2YgbmV4dFBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmV4dFBhZ2VQYXJhbSAhPT0gbnVsbCAmJiBuZXh0UGFnZVBhcmFtICE9PSBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBwcmV2aW91cyBwYWdlLlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJldmlvdXNQYWdlKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIGlmIChvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtICYmIEFycmF5LmlzQXJyYXkocGFnZXMpKSB7XG4gICAgdmFyIHByZXZpb3VzUGFnZVBhcmFtID0gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpO1xuICAgIHJldHVybiB0eXBlb2YgcHJldmlvdXNQYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnICYmIHByZXZpb3VzUGFnZVBhcmFtICE9PSBudWxsICYmIHByZXZpb3VzUGFnZVBhcmFtICE9PSBmYWxzZTtcbiAgfVxufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleSwgbm9vcCwgcGFyc2VGaWx0ZXJBcmdzLCBwYXJzZVF1ZXJ5QXJncywgcGFydGlhbE1hdGNoS2V5LCBoYXNoUXVlcnlLZXlCeU9wdGlvbnMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5Q2FjaGUgfSBmcm9tICcuL3F1ZXJ5Q2FjaGUnO1xuaW1wb3J0IHsgTXV0YXRpb25DYWNoZSB9IGZyb20gJy4vbXV0YXRpb25DYWNoZSc7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgaW5maW5pdGVRdWVyeUJlaGF2aW9yIH0gZnJvbSAnLi9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3InO1xuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeUNsaWVudChjb25maWcpIHtcbiAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHtcbiAgICAgIGNvbmZpZyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMucXVlcnlDYWNoZSA9IGNvbmZpZy5xdWVyeUNhY2hlIHx8IG5ldyBRdWVyeUNhY2hlKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGUgfHwgbmV3IE11dGF0aW9uQ2FjaGUoKTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zIHx8IHt9O1xuICAgIHRoaXMucXVlcnlEZWZhdWx0cyA9IFtdO1xuICAgIHRoaXMubXV0YXRpb25EZWZhdWx0cyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5Q2xpZW50LnByb3RvdHlwZTtcblxuICBfcHJvdG8ubW91bnQgPSBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZUZvY3VzID0gZm9jdXNNYW5hZ2VyLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpICYmIG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLm9uRm9jdXMoKTtcblxuICAgICAgICBfdGhpcy5xdWVyeUNhY2hlLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlT25saW5lID0gb25saW5lTWFuYWdlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5vbk9ubGluZSgpO1xuXG4gICAgICAgIF90aGlzLnF1ZXJ5Q2FjaGUub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udW5tb3VudCA9IGZ1bmN0aW9uIHVubW91bnQoKSB7XG4gICAgdmFyIF90aGlzJHVuc3Vic2NyaWJlRm9jdSwgX3RoaXMkdW5zdWJzY3JpYmVPbmxpO1xuXG4gICAgKF90aGlzJHVuc3Vic2NyaWJlRm9jdSA9IHRoaXMudW5zdWJzY3JpYmVGb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuc3Vic2NyaWJlRm9jdS5jYWxsKHRoaXMpO1xuICAgIChfdGhpcyR1bnN1YnNjcmliZU9ubGkgPSB0aGlzLnVuc3Vic2NyaWJlT25saW5lKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkdW5zdWJzY3JpYmVPbmxpLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBmaWx0ZXJzLmZldGNoaW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pc011dGF0aW5nID0gZnVuY3Rpb24gaXNNdXRhdGluZyhmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZS5maW5kQWxsKF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICBmZXRjaGluZzogdHJ1ZVxuICAgIH0pKS5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJ5RGF0YShxdWVyeUtleSwgZmlsdGVycykge1xuICAgIHZhciBfdGhpcyRxdWVyeUNhY2hlJGZpbmQ7XG5cbiAgICByZXR1cm4gKF90aGlzJHF1ZXJ5Q2FjaGUkZmluZCA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZC5zdGF0ZS5kYXRhO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlDYWNoZSgpLmZpbmRBbGwocXVlcnlLZXlPckZpbHRlcnMpLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHF1ZXJ5S2V5ID0gX3JlZi5xdWVyeUtleSxcbiAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gICAgICB2YXIgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBkYXRhXTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcnlEYXRhID0gZnVuY3Rpb24gc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhxdWVyeUtleSk7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMocGFyc2VkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKS5zZXREYXRhKHVwZGF0ZXIsIG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIHNldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzLCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLmdldFF1ZXJ5Q2FjaGUoKS5maW5kQWxsKHF1ZXJ5S2V5T3JGaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBxdWVyeUtleSA9IF9yZWYyLnF1ZXJ5S2V5O1xuICAgICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBfdGhpczIuc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKV07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlTdGF0ZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5U3RhdGUocXVlcnlLZXksIGZpbHRlcnMpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlDYWNoZSRmaW5kMjtcblxuICAgIHJldHVybiAoX3RoaXMkcXVlcnlDYWNoZSRmaW5kMiA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIuc3RhdGU7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZVF1ZXJpZXMgPSBmdW5jdGlvbiByZW1vdmVRdWVyaWVzKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Q2FjaGUucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldFF1ZXJpZXMgPSBmdW5jdGlvbiByZXNldFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczNbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzM1sxXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuXG4gICAgdmFyIHJlZmV0Y2hGaWx0ZXJzID0gX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIGFjdGl2ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LnJlc2V0KCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfdGhpczMucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxRdWVyaWVzID0gZnVuY3Rpb24gY2FuY2VsUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczQgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNFswXSxcbiAgICAgICAgX3BhcnNlRmlsdGVyQXJnczQkID0gX3BhcnNlRmlsdGVyQXJnczRbMV0sXG4gICAgICAgIGNhbmNlbE9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNCQgPT09IHZvaWQgMCA/IHt9IDogX3BhcnNlRmlsdGVyQXJnczQkO1xuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxPcHRpb25zLnJldmVydCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNhbmNlbE9wdGlvbnMucmV2ZXJ0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmNhbmNlbChjYW5jZWxPcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZVF1ZXJpZXMgPSBmdW5jdGlvbiBpbnZhbGlkYXRlUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF9yZWYzLFxuICAgICAgICBfZmlsdGVycyRyZWZldGNoQWN0aXYsXG4gICAgICAgIF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCxcbiAgICAgICAgX3RoaXM1ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNSA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M1WzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczVbMV07XG5cbiAgICB2YXIgcmVmZXRjaEZpbHRlcnMgPSBfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgLy8gaWYgZmlsdGVycy5yZWZldGNoQWN0aXZlIGlzIG5vdCBwcm92aWRlZCBhbmQgZmlsdGVycy5hY3RpdmUgaXMgZXhwbGljaXRseSBmYWxzZSxcbiAgICAgIC8vIGUuZy4gaW52YWxpZGF0ZVF1ZXJpZXMoeyBhY3RpdmU6IGZhbHNlIH0pLCB3ZSBkb24ndCB3YW50IHRvIHJlZmV0Y2ggYWN0aXZlIHF1ZXJpZXNcbiAgICAgIGFjdGl2ZTogKF9yZWYzID0gKF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA9IGZpbHRlcnMucmVmZXRjaEFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA6IGZpbHRlcnMuYWN0aXZlKSAhPSBudWxsID8gX3JlZjMgOiB0cnVlLFxuICAgICAgaW5hY3RpdmU6IChfZmlsdGVycyRyZWZldGNoSW5hY3QgPSBmaWx0ZXJzLnJlZmV0Y2hJbmFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCA6IGZhbHNlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LmludmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaFF1ZXJpZXMgPSBmdW5jdGlvbiByZWZldGNoUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczYgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNlswXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M2WzFdO1xuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM2LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5mZXRjaCh1bmRlZmluZWQsIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgcmVmZXRjaFBhZ2U6IGZpbHRlcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZpbHRlcnMucmVmZXRjaFBhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCk7XG5cbiAgICBpZiAoIShvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnRocm93T25FcnJvcikpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaFF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhwYXJzZWRPcHRpb25zKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rhbm5lcmxpbnNsZXkvcmVhY3QtcXVlcnkvaXNzdWVzLzY1MlxuXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSkgPyBxdWVyeS5mZXRjaChkZWZhdWx0ZWRPcHRpb25zKSA6IFByb21pc2UucmVzb2x2ZShxdWVyeS5zdGF0ZS5kYXRhKTtcbiAgfTtcblxuICBfcHJvdG8ucHJlZmV0Y2hRdWVyeSA9IGZ1bmN0aW9uIHByZWZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hJbmZpbml0ZVF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIHBhcnNlZE9wdGlvbnMuYmVoYXZpb3IgPSBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KHBhcnNlZE9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5wcmVmZXRjaEluZmluaXRlUXVlcnkgPSBmdW5jdGlvbiBwcmVmZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxNdXRhdGlvbnMgPSBmdW5jdGlvbiBjYW5jZWxNdXRhdGlvbnMoKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczcubXV0YXRpb25DYWNoZS5nZXRBbGwoKS5tYXAoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldE11dGF0aW9uQ2FjaGUoKS5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZU11dGF0aW9uID0gZnVuY3Rpb24gZXhlY3V0ZU11dGF0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlLmJ1aWxkKHRoaXMsIG9wdGlvbnMpLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlDYWNoZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5Q2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TXV0YXRpb25DYWNoZSA9IGZ1bmN0aW9uIGdldE11dGF0aW9uQ2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0T3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucXVlcnlEZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KHF1ZXJ5S2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgucXVlcnlLZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeURlZmF1bHRzLnB1c2goe1xuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5RGVmYXVsdHMkZjtcblxuICAgIHJldHVybiBxdWVyeUtleSA/IChfdGhpcyRxdWVyeURlZmF1bHRzJGYgPSB0aGlzLnF1ZXJ5RGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShxdWVyeUtleSwgeC5xdWVyeUtleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeURlZmF1bHRzJGYuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLnNldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMubXV0YXRpb25EZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgubXV0YXRpb25LZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXRhdGlvbkRlZmF1bHRzLnB1c2goe1xuICAgICAgICBtdXRhdGlvbktleTogbXV0YXRpb25LZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5KSB7XG4gICAgdmFyIF90aGlzJG11dGF0aW9uRGVmYXVsdDtcblxuICAgIHJldHVybiBtdXRhdGlvbktleSA/IChfdGhpcyRtdXRhdGlvbkRlZmF1bHQgPSB0aGlzLm11dGF0aW9uRGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShtdXRhdGlvbktleSwgeC5tdXRhdGlvbktleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRtdXRhdGlvbkRlZmF1bHQuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRRdWVyeU9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5fZGVmYXVsdGVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLnF1ZXJpZXMsIHRoaXMuZ2V0UXVlcnlEZWZhdWx0cyhvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5S2V5KSwgb3B0aW9ucywge1xuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCAmJiBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5KSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCA9IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdGVkT3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0TXV0YXRpb25PcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLm11dGF0aW9ucywgdGhpcy5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubXV0YXRpb25LZXkpLCBvcHRpb25zLCB7XG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGhpcy5xdWVyeUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlLmNsZWFyKCk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2xpZW50O1xufSgpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgaXNTZXJ2ZXIsIGlzVmFsaWRUaW1lb3V0LCBub29wLCByZXBsYWNlRXF1YWxEZWVwLCBzaGFsbG93RXF1YWxPYmplY3RzLCB0aW1lVW50aWxTdGFsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBpc0NhbmNlbGxlZEVycm9yIH0gZnJvbSAnLi9yZXRyeWVyJztcbmV4cG9ydCB2YXIgUXVlcnlPYnNlcnZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShRdWVyeU9ic2VydmVyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBRdWVyeU9ic2VydmVyKGNsaWVudCwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIF90aGlzLnRyYWNrZWRQcm9wcyA9IFtdO1xuICAgIF90aGlzLnNlbGVjdEVycm9yID0gbnVsbDtcblxuICAgIF90aGlzLmJpbmRNZXRob2RzKCk7XG5cbiAgICBfdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5T2JzZXJ2ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5iaW5kTWV0aG9kcyA9IGZ1bmN0aW9uIGJpbmRNZXRob2RzKCkge1xuICAgIHRoaXMucmVtb3ZlID0gdGhpcy5yZW1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlZmV0Y2ggPSB0aGlzLnJlZmV0Y2guYmluZCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVyeS5hZGRPYnNlcnZlcih0aGlzKTtcblxuICAgICAgaWYgKHNob3VsZEZldGNoT25Nb3VudCh0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLmV4ZWN1dGVGZXRjaCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVRpbWVycygpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmxpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2hvdWxkRmV0Y2hPblJlY29ubmVjdCA9IGZ1bmN0aW9uIHNob3VsZEZldGNoT25SZWNvbm5lY3QoKSB7XG4gICAgcmV0dXJuIHNob3VsZEZldGNoT24odGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucywgdGhpcy5vcHRpb25zLnJlZmV0Y2hPblJlY29ubmVjdCk7XG4gIH07XG5cbiAgX3Byb3RvLnNob3VsZEZldGNoT25XaW5kb3dGb2N1cyA9IGZ1bmN0aW9uIHNob3VsZEZldGNoT25XaW5kb3dGb2N1cygpIHtcbiAgICByZXR1cm4gc2hvdWxkRmV0Y2hPbih0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zLCB0aGlzLm9wdGlvbnMucmVmZXRjaE9uV2luZG93Rm9jdXMpO1xuICB9O1xuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuY2xlYXJUaW1lcnMoKTtcbiAgICB0aGlzLmN1cnJlbnRRdWVyeS5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucywgbm90aWZ5T3B0aW9ucykge1xuICAgIHZhciBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5jbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZW5hYmxlZCB0byBiZSBhIGJvb2xlYW4nKTtcbiAgICB9IC8vIEtlZXAgcHJldmlvdXMgcXVlcnkga2V5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHN1cHBseSBvbmVcblxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlLZXkpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5xdWVyeUtleSA9IHByZXZPcHRpb25zLnF1ZXJ5S2V5O1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUXVlcnkoKTtcbiAgICB2YXIgbW91bnRlZCA9IHRoaXMuaGFzTGlzdGVuZXJzKCk7IC8vIEZldGNoIGlmIHRoZXJlIGFyZSBzdWJzY3JpYmVyc1xuXG4gICAgaWYgKG1vdW50ZWQgJiYgc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHRoaXMuY3VycmVudFF1ZXJ5LCBwcmV2UXVlcnksIHRoaXMub3B0aW9ucywgcHJldk9wdGlvbnMpKSB7XG4gICAgICB0aGlzLmV4ZWN1dGVGZXRjaCgpO1xuICAgIH0gLy8gVXBkYXRlIHJlc3VsdFxuXG5cbiAgICB0aGlzLnVwZGF0ZVJlc3VsdChub3RpZnlPcHRpb25zKTsgLy8gVXBkYXRlIHN0YWxlIGludGVydmFsIGlmIG5lZWRlZFxuXG4gICAgaWYgKG1vdW50ZWQgJiYgKHRoaXMuY3VycmVudFF1ZXJ5ICE9PSBwcmV2UXVlcnkgfHwgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IHByZXZPcHRpb25zLmVuYWJsZWQgfHwgdGhpcy5vcHRpb25zLnN0YWxlVGltZSAhPT0gcHJldk9wdGlvbnMuc3RhbGVUaW1lKSkge1xuICAgICAgdGhpcy51cGRhdGVTdGFsZVRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFJlZmV0Y2hJbnRlcnZhbCA9IHRoaXMuY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpOyAvLyBVcGRhdGUgcmVmZXRjaCBpbnRlcnZhbCBpZiBuZWVkZWRcblxuICAgIGlmIChtb3VudGVkICYmICh0aGlzLmN1cnJlbnRRdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSBwcmV2T3B0aW9ucy5lbmFibGVkIHx8IG5leHRSZWZldGNoSW50ZXJ2YWwgIT09IHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCkpIHtcbiAgICAgIHRoaXMudXBkYXRlUmVmZXRjaEludGVydmFsKG5leHRSZWZldGNoSW50ZXJ2YWwpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0T3B0aW1pc3RpY1Jlc3VsdCA9IGZ1bmN0aW9uIGdldE9wdGltaXN0aWNSZXN1bHQob3B0aW9ucykge1xuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5jbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLmNsaWVudCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0Q3VycmVudFJlc3VsdCA9IGZ1bmN0aW9uIGdldEN1cnJlbnRSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8udHJhY2tSZXN1bHQgPSBmdW5jdGlvbiB0cmFja1Jlc3VsdChyZXN1bHQsIGRlZmF1bHRlZE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciB0cmFja2VkUmVzdWx0ID0ge307XG5cbiAgICB2YXIgdHJhY2tQcm9wID0gZnVuY3Rpb24gdHJhY2tQcm9wKGtleSkge1xuICAgICAgaWYgKCFfdGhpczIudHJhY2tlZFByb3BzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgX3RoaXMyLnRyYWNrZWRQcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHJhY2tlZFJlc3VsdCwga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHRyYWNrUHJvcChrZXkpO1xuICAgICAgICAgIHJldHVybiByZXN1bHRba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy51c2VFcnJvckJvdW5kYXJ5IHx8IGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UpIHtcbiAgICAgIHRyYWNrUHJvcCgnZXJyb3InKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhY2tlZFJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TmV4dFJlc3VsdCA9IGZ1bmN0aW9uIGdldE5leHRSZXN1bHQob3B0aW9ucykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciB1bnN1YnNjcmliZSA9IF90aGlzMy5zdWJzY3JpYmUoZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICBpZiAoIXJlc3VsdC5pc0ZldGNoaW5nKSB7XG4gICAgICAgICAgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgIGlmIChyZXN1bHQuaXNFcnJvciAmJiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICAgICAgICByZWplY3QocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldEN1cnJlbnRRdWVyeSA9IGZ1bmN0aW9uIGdldEN1cnJlbnRRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UXVlcnk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICB0aGlzLmNsaWVudC5nZXRRdWVyeUNhY2hlKCkucmVtb3ZlKHRoaXMuY3VycmVudFF1ZXJ5KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaCA9IGZ1bmN0aW9uIHJlZmV0Y2gob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZldGNoKF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICBtZXRhOiB7XG4gICAgICAgIHJlZmV0Y2hQYWdlOiBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJlZmV0Y2hQYWdlXG4gICAgICB9XG4gICAgfSkpO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaE9wdGltaXN0aWMgPSBmdW5jdGlvbiBmZXRjaE9wdGltaXN0aWMob3B0aW9ucykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmNsaWVudC5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmJ1aWxkKHRoaXMuY2xpZW50LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuZmV0Y2goKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2ggPSBmdW5jdGlvbiBmZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVGZXRjaChmZXRjaE9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnVwZGF0ZVJlc3VsdCgpO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LmN1cnJlbnRSZXN1bHQ7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVGZXRjaCA9IGZ1bmN0aW9uIGV4ZWN1dGVGZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICAvLyBNYWtlIHN1cmUgd2UgcmVmZXJlbmNlIHRoZSBsYXRlc3QgcXVlcnkgYXMgdGhlIGN1cnJlbnQgb25lIG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkXG4gICAgdGhpcy51cGRhdGVRdWVyeSgpOyAvLyBGZXRjaFxuXG4gICAgdmFyIHByb21pc2UgPSB0aGlzLmN1cnJlbnRRdWVyeS5mZXRjaCh0aGlzLm9wdGlvbnMsIGZldGNoT3B0aW9ucyk7XG5cbiAgICBpZiAoIShmZXRjaE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoT3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlU3RhbGVUaW1lb3V0ID0gZnVuY3Rpb24gdXBkYXRlU3RhbGVUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhclN0YWxlVGltZW91dCgpO1xuXG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMuY3VycmVudFJlc3VsdC5pc1N0YWxlIHx8ICFpc1ZhbGlkVGltZW91dCh0aGlzLm9wdGlvbnMuc3RhbGVUaW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0aW1lID0gdGltZVVudGlsU3RhbGUodGhpcy5jdXJyZW50UmVzdWx0LmRhdGFVcGRhdGVkQXQsIHRoaXMub3B0aW9ucy5zdGFsZVRpbWUpOyAvLyBUaGUgdGltZW91dCBpcyBzb21ldGltZXMgdHJpZ2dlcmVkIDEgbXMgYmVmb3JlIHRoZSBzdGFsZSB0aW1lIGV4cGlyYXRpb24uXG4gICAgLy8gVG8gbWl0aWdhdGUgdGhpcyBpc3N1ZSB3ZSBhbHdheXMgYWRkIDEgbXMgdG8gdGhlIHRpbWVvdXQuXG5cbiAgICB2YXIgdGltZW91dCA9IHRpbWUgKyAxO1xuICAgIHRoaXMuc3RhbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXM2LmN1cnJlbnRSZXN1bHQuaXNTdGFsZSkge1xuICAgICAgICBfdGhpczYudXBkYXRlUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfSwgdGltZW91dCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXB1dGVSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiBjb21wdXRlUmVmZXRjaEludGVydmFsKCkge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJHJlZmV0Y2g7XG5cbiAgICByZXR1cm4gdHlwZW9mIHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwgPT09ICdmdW5jdGlvbicgPyB0aGlzLm9wdGlvbnMucmVmZXRjaEludGVydmFsKHRoaXMuY3VycmVudFJlc3VsdC5kYXRhLCB0aGlzLmN1cnJlbnRRdWVyeSkgOiAoX3RoaXMkb3B0aW9ucyRyZWZldGNoID0gdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkcmVmZXRjaCA6IGZhbHNlO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiB1cGRhdGVSZWZldGNoSW50ZXJ2YWwobmV4dEludGVydmFsKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyUmVmZXRjaEludGVydmFsKCk7XG4gICAgdGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsID0gbmV4dEludGVydmFsO1xuXG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMub3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSB8fCAhaXNWYWxpZFRpbWVvdXQodGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsKSB8fCB0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlZmV0Y2hJbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzNy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbEluQmFja2dyb3VuZCB8fCBmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkpIHtcbiAgICAgICAgX3RoaXM3LmV4ZWN1dGVGZXRjaCgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCk7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVRpbWVycyA9IGZ1bmN0aW9uIHVwZGF0ZVRpbWVycygpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMudXBkYXRlUmVmZXRjaEludGVydmFsKHRoaXMuY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXJUaW1lcnMgPSBmdW5jdGlvbiBjbGVhclRpbWVycygpIHtcbiAgICB0aGlzLmNsZWFyU3RhbGVUaW1lb3V0KCk7XG4gICAgdGhpcy5jbGVhclJlZmV0Y2hJbnRlcnZhbCgpO1xuICB9O1xuXG4gIF9wcm90by5jbGVhclN0YWxlVGltZW91dCA9IGZ1bmN0aW9uIGNsZWFyU3RhbGVUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLnN0YWxlVGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGFsZVRpbWVvdXRJZCk7XG4gICAgICB0aGlzLnN0YWxlVGltZW91dElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXJSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiBjbGVhclJlZmV0Y2hJbnRlcnZhbCgpIHtcbiAgICBpZiAodGhpcy5yZWZldGNoSW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlZmV0Y2hJbnRlcnZhbElkKTtcbiAgICAgIHRoaXMucmVmZXRjaEludGVydmFsSWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jcmVhdGVSZXN1bHQgPSBmdW5jdGlvbiBjcmVhdGVSZXN1bHQocXVlcnksIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdmFyIHByZXZPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBwcmV2UmVzdWx0ID0gdGhpcy5jdXJyZW50UmVzdWx0O1xuICAgIHZhciBwcmV2UmVzdWx0U3RhdGUgPSB0aGlzLmN1cnJlbnRSZXN1bHRTdGF0ZTtcbiAgICB2YXIgcHJldlJlc3VsdE9wdGlvbnMgPSB0aGlzLmN1cnJlbnRSZXN1bHRPcHRpb25zO1xuICAgIHZhciBxdWVyeUNoYW5nZSA9IHF1ZXJ5ICE9PSBwcmV2UXVlcnk7XG4gICAgdmFyIHF1ZXJ5SW5pdGlhbFN0YXRlID0gcXVlcnlDaGFuZ2UgPyBxdWVyeS5zdGF0ZSA6IHRoaXMuY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlO1xuICAgIHZhciBwcmV2UXVlcnlSZXN1bHQgPSBxdWVyeUNoYW5nZSA/IHRoaXMuY3VycmVudFJlc3VsdCA6IHRoaXMucHJldmlvdXNRdWVyeVJlc3VsdDtcbiAgICB2YXIgc3RhdGUgPSBxdWVyeS5zdGF0ZTtcbiAgICB2YXIgZGF0YVVwZGF0ZWRBdCA9IHN0YXRlLmRhdGFVcGRhdGVkQXQsXG4gICAgICAgIGVycm9yID0gc3RhdGUuZXJyb3IsXG4gICAgICAgIGVycm9yVXBkYXRlZEF0ID0gc3RhdGUuZXJyb3JVcGRhdGVkQXQsXG4gICAgICAgIGlzRmV0Y2hpbmcgPSBzdGF0ZS5pc0ZldGNoaW5nLFxuICAgICAgICBzdGF0dXMgPSBzdGF0ZS5zdGF0dXM7XG4gICAgdmFyIGlzUHJldmlvdXNEYXRhID0gZmFsc2U7XG4gICAgdmFyIGlzUGxhY2Vob2xkZXJEYXRhID0gZmFsc2U7XG4gICAgdmFyIGRhdGE7IC8vIE9wdGltaXN0aWNhbGx5IHNldCByZXN1bHQgaW4gZmV0Y2hpbmcgc3RhdGUgaWYgbmVlZGVkXG5cbiAgICBpZiAob3B0aW9ucy5vcHRpbWlzdGljUmVzdWx0cykge1xuICAgICAgdmFyIG1vdW50ZWQgPSB0aGlzLmhhc0xpc3RlbmVycygpO1xuICAgICAgdmFyIGZldGNoT25Nb3VudCA9ICFtb3VudGVkICYmIHNob3VsZEZldGNoT25Nb3VudChxdWVyeSwgb3B0aW9ucyk7XG4gICAgICB2YXIgZmV0Y2hPcHRpb25hbGx5ID0gbW91bnRlZCAmJiBzaG91bGRGZXRjaE9wdGlvbmFsbHkocXVlcnksIHByZXZRdWVyeSwgb3B0aW9ucywgcHJldk9wdGlvbnMpO1xuXG4gICAgICBpZiAoZmV0Y2hPbk1vdW50IHx8IGZldGNoT3B0aW9uYWxseSkge1xuICAgICAgICBpc0ZldGNoaW5nID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIWRhdGFVcGRhdGVkQXQpIHtcbiAgICAgICAgICBzdGF0dXMgPSAnbG9hZGluZyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEtlZXAgcHJldmlvdXMgZGF0YSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKG9wdGlvbnMua2VlcFByZXZpb3VzRGF0YSAmJiAhc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICYmIChwcmV2UXVlcnlSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZRdWVyeVJlc3VsdC5pc1N1Y2Nlc3MpICYmIHN0YXR1cyAhPT0gJ2Vycm9yJykge1xuICAgICAgZGF0YSA9IHByZXZRdWVyeVJlc3VsdC5kYXRhO1xuICAgICAgZGF0YVVwZGF0ZWRBdCA9IHByZXZRdWVyeVJlc3VsdC5kYXRhVXBkYXRlZEF0O1xuICAgICAgc3RhdHVzID0gcHJldlF1ZXJ5UmVzdWx0LnN0YXR1cztcbiAgICAgIGlzUHJldmlvdXNEYXRhID0gdHJ1ZTtcbiAgICB9IC8vIFNlbGVjdCBkYXRhIGlmIG5lZWRlZFxuICAgIGVsc2UgaWYgKG9wdGlvbnMuc2VsZWN0ICYmIHR5cGVvZiBzdGF0ZS5kYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBNZW1vaXplIHNlbGVjdCByZXN1bHRcbiAgICAgICAgaWYgKHByZXZSZXN1bHQgJiYgc3RhdGUuZGF0YSA9PT0gKHByZXZSZXN1bHRTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdFN0YXRlLmRhdGEpICYmIG9wdGlvbnMuc2VsZWN0ID09PSB0aGlzLnNlbGVjdEZuKSB7XG4gICAgICAgICAgZGF0YSA9IHRoaXMuc2VsZWN0UmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEZuID0gb3B0aW9ucy5zZWxlY3Q7XG4gICAgICAgICAgICBkYXRhID0gb3B0aW9ucy5zZWxlY3Qoc3RhdGUuZGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBkYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0LmRhdGEsIGRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVycm9yID0gbnVsbDtcbiAgICAgICAgICB9IGNhdGNoIChzZWxlY3RFcnJvcikge1xuICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3Ioc2VsZWN0RXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IHNlbGVjdEVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBVc2UgcXVlcnkgZGF0YVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICAgIH0gLy8gU2hvdyBwbGFjZWhvbGRlciBkYXRhIGlmIG5lZWRlZFxuXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYgKHN0YXR1cyA9PT0gJ2xvYWRpbmcnIHx8IHN0YXR1cyA9PT0gJ2lkbGUnKSkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyRGF0YTsgLy8gTWVtb2l6ZSBwbGFjZWhvbGRlciBkYXRhXG5cbiAgICAgIGlmICgocHJldlJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdC5pc1BsYWNlaG9sZGVyRGF0YSkgJiYgb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgPT09IChwcmV2UmVzdWx0T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdE9wdGlvbnMucGxhY2Vob2xkZXJEYXRhKSkge1xuICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSBwcmV2UmVzdWx0LmRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSB0eXBlb2Ygb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSgpIDogb3B0aW9ucy5wbGFjZWhvbGRlckRhdGE7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc2VsZWN0ICYmIHR5cGVvZiBwbGFjZWhvbGRlckRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IG9wdGlvbnMuc2VsZWN0KHBsYWNlaG9sZGVyRGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSByZXBsYWNlRXF1YWxEZWVwKHByZXZSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHQuZGF0YSwgcGxhY2Vob2xkZXJEYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgfSBjYXRjaCAoc2VsZWN0RXJyb3IpIHtcbiAgICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKHNlbGVjdEVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RXJyb3IgPSBzZWxlY3RFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBwbGFjZWhvbGRlckRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHN0YXR1cyA9ICdzdWNjZXNzJztcbiAgICAgICAgZGF0YSA9IHBsYWNlaG9sZGVyRGF0YTtcbiAgICAgICAgaXNQbGFjZWhvbGRlckRhdGEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdEVycm9yKSB7XG4gICAgICBlcnJvciA9IHRoaXMuc2VsZWN0RXJyb3I7XG4gICAgICBkYXRhID0gdGhpcy5zZWxlY3RSZXN1bHQ7XG4gICAgICBlcnJvclVwZGF0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICBzdGF0dXMgPSAnZXJyb3InO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgIGlzTG9hZGluZzogc3RhdHVzID09PSAnbG9hZGluZycsXG4gICAgICBpc1N1Y2Nlc3M6IHN0YXR1cyA9PT0gJ3N1Y2Nlc3MnLFxuICAgICAgaXNFcnJvcjogc3RhdHVzID09PSAnZXJyb3InLFxuICAgICAgaXNJZGxlOiBzdGF0dXMgPT09ICdpZGxlJyxcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBkYXRhVXBkYXRlZEF0LFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgZXJyb3JVcGRhdGVkQXQ6IGVycm9yVXBkYXRlZEF0LFxuICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCxcbiAgICAgIGVycm9yVXBkYXRlQ291bnQ6IHN0YXRlLmVycm9yVXBkYXRlQ291bnQsXG4gICAgICBpc0ZldGNoZWQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCA+IDAgfHwgc3RhdGUuZXJyb3JVcGRhdGVDb3VudCA+IDAsXG4gICAgICBpc0ZldGNoZWRBZnRlck1vdW50OiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgPiBxdWVyeUluaXRpYWxTdGF0ZS5kYXRhVXBkYXRlQ291bnQgfHwgc3RhdGUuZXJyb3JVcGRhdGVDb3VudCA+IHF1ZXJ5SW5pdGlhbFN0YXRlLmVycm9yVXBkYXRlQ291bnQsXG4gICAgICBpc0ZldGNoaW5nOiBpc0ZldGNoaW5nLFxuICAgICAgaXNSZWZldGNoaW5nOiBpc0ZldGNoaW5nICYmIHN0YXR1cyAhPT0gJ2xvYWRpbmcnLFxuICAgICAgaXNMb2FkaW5nRXJyb3I6IHN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBzdGF0ZS5kYXRhVXBkYXRlZEF0ID09PSAwLFxuICAgICAgaXNQbGFjZWhvbGRlckRhdGE6IGlzUGxhY2Vob2xkZXJEYXRhLFxuICAgICAgaXNQcmV2aW91c0RhdGE6IGlzUHJldmlvdXNEYXRhLFxuICAgICAgaXNSZWZldGNoRXJyb3I6IHN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBzdGF0ZS5kYXRhVXBkYXRlZEF0ICE9PSAwLFxuICAgICAgaXNTdGFsZTogaXNTdGFsZShxdWVyeSwgb3B0aW9ucyksXG4gICAgICByZWZldGNoOiB0aGlzLnJlZmV0Y2gsXG4gICAgICByZW1vdmU6IHRoaXMucmVtb3ZlXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIF9wcm90by5zaG91bGROb3RpZnlMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzaG91bGROb3RpZnlMaXN0ZW5lcnMocmVzdWx0LCBwcmV2UmVzdWx0KSB7XG4gICAgaWYgKCFwcmV2UmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgbm90aWZ5T25DaGFuZ2VQcm9wcyA9IF90aGlzJG9wdGlvbnMubm90aWZ5T25DaGFuZ2VQcm9wcyxcbiAgICAgICAgbm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnMgPSBfdGhpcyRvcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zO1xuXG4gICAgaWYgKCFub3RpZnlPbkNoYW5nZVByb3BzICYmICFub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJyAmJiAhdGhpcy50cmFja2VkUHJvcHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgaW5jbHVkZWRQcm9wcyA9IG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJyA/IHRoaXMudHJhY2tlZFByb3BzIDogbm90aWZ5T25DaGFuZ2VQcm9wcztcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocmVzdWx0KS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciB0eXBlZEtleSA9IGtleTtcbiAgICAgIHZhciBjaGFuZ2VkID0gcmVzdWx0W3R5cGVkS2V5XSAhPT0gcHJldlJlc3VsdFt0eXBlZEtleV07XG4gICAgICB2YXIgaXNJbmNsdWRlZCA9IGluY2x1ZGVkUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGluY2x1ZGVkUHJvcHMuc29tZShmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCA9PT0ga2V5O1xuICAgICAgfSk7XG4gICAgICB2YXIgaXNFeGNsdWRlZCA9IG5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zID09IG51bGwgPyB2b2lkIDAgOiBub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucy5zb21lKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ID09PSBrZXk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjaGFuZ2VkICYmICFpc0V4Y2x1ZGVkICYmICghaW5jbHVkZWRQcm9wcyB8fCBpc0luY2x1ZGVkKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlUmVzdWx0ID0gZnVuY3Rpb24gdXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpIHtcbiAgICB2YXIgcHJldlJlc3VsdCA9IHRoaXMuY3VycmVudFJlc3VsdDtcbiAgICB0aGlzLmN1cnJlbnRSZXN1bHQgPSB0aGlzLmNyZWF0ZVJlc3VsdCh0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmN1cnJlbnRSZXN1bHRTdGF0ZSA9IHRoaXMuY3VycmVudFF1ZXJ5LnN0YXRlO1xuICAgIHRoaXMuY3VycmVudFJlc3VsdE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7IC8vIE9ubHkgbm90aWZ5IGlmIHNvbWV0aGluZyBoYXMgY2hhbmdlZFxuXG4gICAgaWYgKHNoYWxsb3dFcXVhbE9iamVjdHModGhpcy5jdXJyZW50UmVzdWx0LCBwcmV2UmVzdWx0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGV0ZXJtaW5lIHdoaWNoIGNhbGxiYWNrcyB0byB0cmlnZ2VyXG5cblxuICAgIHZhciBkZWZhdWx0Tm90aWZ5T3B0aW9ucyA9IHtcbiAgICAgIGNhY2hlOiB0cnVlXG4gICAgfTtcblxuICAgIGlmICgobm90aWZ5T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogbm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMpICE9PSBmYWxzZSAmJiB0aGlzLnNob3VsZE5vdGlmeUxpc3RlbmVycyh0aGlzLmN1cnJlbnRSZXN1bHQsIHByZXZSZXN1bHQpKSB7XG4gICAgICBkZWZhdWx0Tm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KF9leHRlbmRzKHt9LCBkZWZhdWx0Tm90aWZ5T3B0aW9ucywgbm90aWZ5T3B0aW9ucykpO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVRdWVyeSA9IGZ1bmN0aW9uIHVwZGF0ZVF1ZXJ5KCkge1xuICAgIHZhciBxdWVyeSA9IHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLmNsaWVudCwgdGhpcy5vcHRpb25zKTtcblxuICAgIGlmIChxdWVyeSA9PT0gdGhpcy5jdXJyZW50UXVlcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdGhpcy5jdXJyZW50UXVlcnkgPSBxdWVyeTtcbiAgICB0aGlzLmN1cnJlbnRRdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5LnN0YXRlO1xuICAgIHRoaXMucHJldmlvdXNRdWVyeVJlc3VsdCA9IHRoaXMuY3VycmVudFJlc3VsdDtcblxuICAgIGlmICh0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICBwcmV2UXVlcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZRdWVyeS5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgICAgIHF1ZXJ5LmFkZE9ic2VydmVyKHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25RdWVyeVVwZGF0ZSA9IGZ1bmN0aW9uIG9uUXVlcnlVcGRhdGUoYWN0aW9uKSB7XG4gICAgdmFyIG5vdGlmeU9wdGlvbnMgPSB7fTtcblxuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICBub3RpZnlPcHRpb25zLm9uU3VjY2VzcyA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gJ2Vycm9yJyAmJiAhaXNDYW5jZWxsZWRFcnJvcihhY3Rpb24uZXJyb3IpKSB7XG4gICAgICBub3RpZnlPcHRpb25zLm9uRXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpO1xuXG4gICAgaWYgKHRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlVGltZXJzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkobm90aWZ5T3B0aW9ucykge1xuICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBGaXJzdCB0cmlnZ2VyIHRoZSBjb25maWd1cmF0aW9uIGNhbGxiYWNrc1xuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMub25TdWNjZXNzKSB7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXM4Lm9wdGlvbnMub25TdWNjZXNzKF90aGlzOC5jdXJyZW50UmVzdWx0LmRhdGEpO1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZChfdGhpczguY3VycmVudFJlc3VsdC5kYXRhLCBudWxsKTtcbiAgICAgIH0gZWxzZSBpZiAobm90aWZ5T3B0aW9ucy5vbkVycm9yKSB7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uRXJyb3IoX3RoaXM4LmN1cnJlbnRSZXN1bHQuZXJyb3IpO1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIF90aGlzOC5jdXJyZW50UmVzdWx0LmVycm9yKTtcbiAgICAgIH0gLy8gVGhlbiB0cmlnZ2VyIHRoZSBsaXN0ZW5lcnNcblxuXG4gICAgICBpZiAobm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMpIHtcbiAgICAgICAgX3RoaXM4Lmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICAgIGxpc3RlbmVyKF90aGlzOC5jdXJyZW50UmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIFRoZW4gdGhlIGNhY2hlIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmIChub3RpZnlPcHRpb25zLmNhY2hlKSB7XG4gICAgICAgIF90aGlzOC5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLm5vdGlmeSh7XG4gICAgICAgICAgcXVlcnk6IF90aGlzOC5jdXJyZW50UXVlcnksXG4gICAgICAgICAgdHlwZTogJ29ic2VydmVyUmVzdWx0c1VwZGF0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeU9ic2VydmVyO1xufShTdWJzY3JpYmFibGUpO1xuXG5mdW5jdGlvbiBzaG91bGRMb2FkT25Nb3VudChxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZSAmJiAhcXVlcnkuc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiAhKHF1ZXJ5LnN0YXRlLnN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBvcHRpb25zLnJldHJ5T25Nb3VudCA9PT0gZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHNob3VsZExvYWRPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB8fCBxdWVyeS5zdGF0ZS5kYXRhVXBkYXRlZEF0ID4gMCAmJiBzaG91bGRGZXRjaE9uKHF1ZXJ5LCBvcHRpb25zLCBvcHRpb25zLnJlZmV0Y2hPbk1vdW50KTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbihxdWVyeSwgb3B0aW9ucywgZmllbGQpIHtcbiAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICB2YXIgdmFsdWUgPSB0eXBlb2YgZmllbGQgPT09ICdmdW5jdGlvbicgPyBmaWVsZChxdWVyeSkgOiBmaWVsZDtcbiAgICByZXR1cm4gdmFsdWUgPT09ICdhbHdheXMnIHx8IHZhbHVlICE9PSBmYWxzZSAmJiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHF1ZXJ5LCBwcmV2UXVlcnksIG9wdGlvbnMsIHByZXZPcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlICYmIChxdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHByZXZPcHRpb25zLmVuYWJsZWQgPT09IGZhbHNlKSAmJiAoIW9wdGlvbnMuc3VzcGVuc2UgfHwgcXVlcnkuc3RhdGUuc3RhdHVzICE9PSAnZXJyb3InKSAmJiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gaXNTdGFsZShxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShvcHRpb25zLnN0YWxlVGltZSk7XG59IiwgImltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuZXhwb3J0IHZhciB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IFJlYWN0RE9NLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOyIsICJpbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJy4vcmVhY3RCYXRjaGVkVXBkYXRlcyc7XG5ub3RpZnlNYW5hZ2VyLnNldEJhdGNoTm90aWZ5RnVuY3Rpb24odW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMpOyIsICJleHBvcnQgdmFyIGxvZ2dlciA9IGNvbnNvbGU7IiwgImltcG9ydCB7IHNldExvZ2dlciB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuc2V0TG9nZ2VyKGxvZ2dlcik7IiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgZGVmYXVsdENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xudmFyIFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChmYWxzZSk7IC8vIGlmIGNvbnRleHRTaGFyaW5nIGlzIG9uLCB3ZSBzaGFyZSB0aGUgZmlyc3QgYW5kIGF0IGxlYXN0IG9uZVxuLy8gaW5zdGFuY2Ugb2YgdGhlIGNvbnRleHQgYWNyb3NzIHRoZSB3aW5kb3dcbi8vIHRvIGVuc3VyZSB0aGF0IGlmIFJlYWN0IFF1ZXJ5IGlzIHVzZWQgYWNyb3NzXG4vLyBkaWZmZXJlbnQgYnVuZGxlcyBvciBtaWNyb2Zyb250ZW5kcyB0aGV5IHdpbGxcbi8vIGFsbCB1c2UgdGhlIHNhbWUgKippbnN0YW5jZSoqIG9mIGNvbnRleHQsIHJlZ2FyZGxlc3Ncbi8vIG9mIG1vZHVsZSBzY29waW5nLlxuXG5mdW5jdGlvbiBnZXRRdWVyeUNsaWVudENvbnRleHQoY29udGV4dFNoYXJpbmcpIHtcbiAgaWYgKGNvbnRleHRTaGFyaW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKCF3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQpIHtcbiAgICAgIHdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dCA9IGRlZmF1bHRDb250ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiB3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQ7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdENvbnRleHQ7XG59XG5cbmV4cG9ydCB2YXIgdXNlUXVlcnlDbGllbnQgPSBmdW5jdGlvbiB1c2VRdWVyeUNsaWVudCgpIHtcbiAgdmFyIHF1ZXJ5Q2xpZW50ID0gUmVhY3QudXNlQ29udGV4dChnZXRRdWVyeUNsaWVudENvbnRleHQoUmVhY3QudXNlQ29udGV4dChRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0KSkpO1xuXG4gIGlmICghcXVlcnlDbGllbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFF1ZXJ5Q2xpZW50IHNldCwgdXNlIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgdG8gc2V0IG9uZScpO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5Q2xpZW50O1xufTtcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnRQcm92aWRlciA9IGZ1bmN0aW9uIFF1ZXJ5Q2xpZW50UHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2xpZW50ID0gX3JlZi5jbGllbnQsXG4gICAgICBfcmVmJGNvbnRleHRTaGFyaW5nID0gX3JlZi5jb250ZXh0U2hhcmluZyxcbiAgICAgIGNvbnRleHRTaGFyaW5nID0gX3JlZiRjb250ZXh0U2hhcmluZyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNvbnRleHRTaGFyaW5nLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGNsaWVudC5tb3VudCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjbGllbnQudW5tb3VudCgpO1xuICAgIH07XG4gIH0sIFtjbGllbnRdKTtcbiAgdmFyIENvbnRleHQgPSBnZXRRdWVyeUNsaWVudENvbnRleHQoY29udGV4dFNoYXJpbmcpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0U2hhcmluZ1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNsaWVudFxuICB9LCBjaGlsZHJlbikpO1xufTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8gQ09OVEVYVFxuXG5mdW5jdGlvbiBjcmVhdGVWYWx1ZSgpIHtcbiAgdmFyIF9pc1Jlc2V0ID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgY2xlYXJSZXNldDogZnVuY3Rpb24gY2xlYXJSZXNldCgpIHtcbiAgICAgIF9pc1Jlc2V0ID0gZmFsc2U7XG4gICAgfSxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICBfaXNSZXNldCA9IHRydWU7XG4gICAgfSxcbiAgICBpc1Jlc2V0OiBmdW5jdGlvbiBpc1Jlc2V0KCkge1xuICAgICAgcmV0dXJuIF9pc1Jlc2V0O1xuICAgIH1cbiAgfTtcbn1cblxudmFyIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KGNyZWF0ZVZhbHVlKCkpOyAvLyBIT09LXG5cbmV4cG9ydCB2YXIgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgPSBmdW5jdGlvbiB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0KTtcbn07IC8vIENPTVBPTkVOVFxuXG5leHBvcnQgdmFyIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgdmFsdWUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY3JlYXRlVmFsdWUoKTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHZhbHVlXG4gIH0sIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHZhbHVlKSA6IGNoaWxkcmVuKTtcbn07IiwgImV4cG9ydCBmdW5jdGlvbiBzaG91bGRUaHJvd0Vycm9yKHN1c3BlbnNlLCBfdXNlRXJyb3JCb3VuZGFyeSwgcGFyYW1zKSB7XG4gIC8vIEFsbG93IHVzZUVycm9yQm91bmRhcnkgZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhyb3dpbmcgYmVoYXZpb3Igb24gYSBwZXItZXJyb3IgYmFzaXNcbiAgaWYgKHR5cGVvZiBfdXNlRXJyb3JCb3VuZGFyeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBfdXNlRXJyb3JCb3VuZGFyeS5hcHBseSh2b2lkIDAsIHBhcmFtcyk7XG4gIH0gLy8gQWxsb3cgdXNlRXJyb3JCb3VuZGFyeSB0byBvdmVycmlkZSBzdXNwZW5zZSdzIHRocm93aW5nIGJlaGF2aW9yXG5cblxuICBpZiAodHlwZW9mIF91c2VFcnJvckJvdW5kYXJ5ID09PSAnYm9vbGVhbicpIHJldHVybiBfdXNlRXJyb3JCb3VuZGFyeTsgLy8gSWYgc3VzcGVuc2UgaXMgZW5hYmxlZCBkZWZhdWx0IHRvIHRocm93aW5nIGVycm9yc1xuXG4gIHJldHVybiAhIXN1c3BlbnNlO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4uL2NvcmUvbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSB9IGZyb20gJy4vUXVlcnlFcnJvclJlc2V0Qm91bmRhcnknO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tICcuL1F1ZXJ5Q2xpZW50UHJvdmlkZXInO1xuaW1wb3J0IHsgc2hvdWxkVGhyb3dFcnJvciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhc2VRdWVyeShvcHRpb25zLCBPYnNlcnZlcikge1xuICB2YXIgbW91bnRlZFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG5cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKDApLFxuICAgICAgZm9yY2VVcGRhdGUgPSBfUmVhY3QkdXNlU3RhdGVbMV07XG5cbiAgdmFyIHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgdmFyIGVycm9yUmVzZXRCb3VuZGFyeSA9IHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5KCk7XG4gIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gcXVlcnlDbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpOyAvLyBNYWtlIHN1cmUgcmVzdWx0cyBhcmUgb3B0aW1pc3RpY2FsbHkgc2V0IGluIGZldGNoaW5nIHN0YXRlIGJlZm9yZSBzdWJzY3JpYmluZyBvciB1cGRhdGluZyBvcHRpb25zXG5cbiAgZGVmYXVsdGVkT3B0aW9ucy5vcHRpbWlzdGljUmVzdWx0cyA9IHRydWU7IC8vIEluY2x1ZGUgY2FsbGJhY2tzIGluIGJhdGNoIHJlbmRlcnNcblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yKSB7XG4gICAgZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yID0gbm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKGRlZmF1bHRlZE9wdGlvbnMub25FcnJvcik7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MpIHtcbiAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2VzcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2Vzcyk7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQpIHtcbiAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCA9IG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCk7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSkge1xuICAgIC8vIEFsd2F5cyBzZXQgc3RhbGUgdGltZSB3aGVuIHVzaW5nIHN1c3BlbnNlIHRvIHByZXZlbnRcbiAgICAvLyBmZXRjaGluZyBhZ2FpbiB3aGVuIGRpcmVjdGx5IG1vdW50aW5nIGFmdGVyIHN1c3BlbmRpbmdcbiAgICBpZiAodHlwZW9mIGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lICE9PSAnbnVtYmVyJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUgPSAxMDAwO1xuICAgIH0gLy8gU2V0IGNhY2hlIHRpbWUgdG8gMSBpZiB0aGUgb3B0aW9uIGhhcyBiZWVuIHNldCB0byAwXG4gICAgLy8gd2hlbiB1c2luZyBzdXNwZW5zZSB0byBwcmV2ZW50IGluZmluaXRlIGxvb3Agb2YgZmV0Y2hlc1xuXG5cbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5jYWNoZVRpbWUgPT09IDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMuY2FjaGVUaW1lID0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSB8fCBkZWZhdWx0ZWRPcHRpb25zLnVzZUVycm9yQm91bmRhcnkpIHtcbiAgICAvLyBQcmV2ZW50IHJldHJ5aW5nIGZhaWxlZCBxdWVyeSBpZiB0aGUgZXJyb3IgYm91bmRhcnkgaGFzIG5vdCBiZWVuIHJlc2V0IHlldFxuICAgIGlmICghZXJyb3JSZXNldEJvdW5kYXJ5LmlzUmVzZXQoKSkge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeU9uTW91bnQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgX1JlYWN0JHVzZVN0YXRlMiA9IFJlYWN0LnVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmVyKHF1ZXJ5Q2xpZW50LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgfSksXG4gICAgICBvYnNlcnZlciA9IF9SZWFjdCR1c2VTdGF0ZTJbMF07XG5cbiAgdmFyIHJlc3VsdCA9IG9ic2VydmVyLmdldE9wdGltaXN0aWNSZXN1bHQoZGVmYXVsdGVkT3B0aW9ucyk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgbW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xuICAgIHZhciB1bnN1YnNjcmliZSA9IG9ic2VydmVyLnN1YnNjcmliZShub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG1vdW50ZWRSZWYuY3VycmVudCkge1xuICAgICAgICBmb3JjZVVwZGF0ZShmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIHJldHVybiB4ICsgMTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkpOyAvLyBVcGRhdGUgcmVzdWx0IHRvIG1ha2Ugc3VyZSB3ZSBkaWQgbm90IG1pc3MgYW55IHF1ZXJ5IHVwZGF0ZXNcbiAgICAvLyBiZXR3ZWVuIGNyZWF0aW5nIHRoZSBvYnNlcnZlciBhbmQgc3Vic2NyaWJpbmcgdG8gaXQuXG5cbiAgICBvYnNlcnZlci51cGRhdGVSZXN1bHQoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgbW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB1bnN1YnNjcmliZSgpO1xuICAgIH07XG4gIH0sIFtlcnJvclJlc2V0Qm91bmRhcnksIG9ic2VydmVyXSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgLy8gRG8gbm90IG5vdGlmeSBvbiB1cGRhdGVzIGJlY2F1c2Ugb2YgY2hhbmdlcyBpbiB0aGUgb3B0aW9ucyBiZWNhdXNlXG4gICAgLy8gdGhlc2UgY2hhbmdlcyBzaG91bGQgYWxyZWFkeSBiZSByZWZsZWN0ZWQgaW4gdGhlIG9wdGltaXN0aWMgcmVzdWx0LlxuICAgIG9ic2VydmVyLnNldE9wdGlvbnMoZGVmYXVsdGVkT3B0aW9ucywge1xuICAgICAgbGlzdGVuZXJzOiBmYWxzZVxuICAgIH0pO1xuICB9LCBbZGVmYXVsdGVkT3B0aW9ucywgb2JzZXJ2ZXJdKTsgLy8gSGFuZGxlIHN1c3BlbnNlXG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UgJiYgcmVzdWx0LmlzTG9hZGluZykge1xuICAgIHRocm93IG9ic2VydmVyLmZldGNoT3B0aW1pc3RpYyhkZWZhdWx0ZWRPcHRpb25zKS50aGVuKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2VzcyhkYXRhKTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZChkYXRhLCBudWxsKTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGVycm9yUmVzZXRCb3VuZGFyeS5jbGVhclJlc2V0KCk7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGRlZmF1bHRlZE9wdGlvbnMub25FcnJvcihlcnJvcik7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQodW5kZWZpbmVkLCBlcnJvcik7XG4gICAgfSk7XG4gIH0gLy8gSGFuZGxlIGVycm9yIGJvdW5kYXJ5XG5cblxuICBpZiAocmVzdWx0LmlzRXJyb3IgJiYgIWVycm9yUmVzZXRCb3VuZGFyeS5pc1Jlc2V0KCkgJiYgIXJlc3VsdC5pc0ZldGNoaW5nICYmIHNob3VsZFRocm93RXJyb3IoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSwgZGVmYXVsdGVkT3B0aW9ucy51c2VFcnJvckJvdW5kYXJ5LCBbcmVzdWx0LmVycm9yLCBvYnNlcnZlci5nZXRDdXJyZW50UXVlcnkoKV0pKSB7XG4gICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICB9IC8vIEhhbmRsZSByZXN1bHQgcHJvcGVydHkgdXNhZ2UgdHJhY2tpbmdcblxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJykge1xuICAgIHJlc3VsdCA9IG9ic2VydmVyLnRyYWNrUmVzdWx0KHJlc3VsdCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufSIsICJpbXBvcnQgeyBRdWVyeU9ic2VydmVyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBwYXJzZVF1ZXJ5QXJncyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgdXNlQmFzZVF1ZXJ5IH0gZnJvbSAnLi91c2VCYXNlUXVlcnknOyAvLyBIT09LXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMyk7XG4gIHJldHVybiB1c2VCYXNlUXVlcnkocGFyc2VkT3B0aW9ucywgUXVlcnlPYnNlcnZlcik7XG59IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQmFkZ2UsIEV1aUljb259IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7QnJlYWRjcnVtYlByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIEJyZWFkY3J1bWJQcmVzZW50YXRpb24ocHJvcHM6IEJyZWFkY3J1bWJQcmVzZW50YXRpb25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KHByb3BzLm9udG9sb2d5SWQgfHwgXCJcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQpfX0+XG4gICAgICAgICAgICAgICAgPEV1aUJhZGdlIGNsYXNzTmFtZT17cHJvcHMub250b2xvZ3lJZCA/IFwiYnJlYWRjcnVtYiBjbGlja2FibGUtYnJlYWRjcnVtYlwiIDogXCJicmVhZGNydW1iXCJ9IGNvbG9yPXtwcm9wcy5jb2xvckZpcnN0IHx8IFwicHJpbWFyeVwifT5cbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLm9udG9sb2d5TmFtZSA/IHByb3BzLm9udG9sb2d5TmFtZS50b1VwcGVyQ2FzZSgpIDogXCJObyBvbnRvbG9neSBuYW1lIGF2YWlsYWJsZVwifVxuICAgICAgICAgICAgICAgIDwvRXVpQmFkZ2U+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICZuYnNwOzxFdWlJY29uIHR5cGU9XCJhcnJvd1JpZ2h0XCIvPiZuYnNwO1xuICAgICAgICAgICAgPEV1aUJhZGdlIGNsYXNzTmFtZT1cImJyZWFkY3J1bWJcIiBjb2xvcj17cHJvcHMuY29sb3JTZWNvbmQgfHwgXCJzdWNjZXNzXCJ9PlxuICAgICAgICAgICAgICAgIHtwcm9wcy5zaG9ydEZvcm0gPyBwcm9wcy5zaG9ydEZvcm0udG9VcHBlckNhc2UoKSA6IFwiTm8gc2hvcnQgZm9ybSBhdmFpbGFibGVcIn1cbiAgICAgICAgICAgIDwvRXVpQmFkZ2U+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQnJlYWRjcnVtYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQ2FyZCwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtPbnRvbG9naWVzfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtEYXRhQ29udGVudFdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBEYXRhQ29udGVudFdpZGdldChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgcGFyYW1ldGVyLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBvbnRvbG9naWVzRGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNFcnJvcixcbiAgICBkYXRhVXBkYXRlZEF0XG4gIH0gPSB1c2VRdWVyeTxPbnRvbG9naWVzPihcbiAgICBbXCJvbnRvbG9naWVzRGF0YVwiLCBhcGksIHBhcmFtZXRlcl0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRPbnRvbG9naWVzRGF0YShcbiAgICAgICAgcHJvcHMucGFyYW1ldGVyXG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXVpQ2FyZFxuICAgICAgICB0aXRsZT1cIkRhdGEgQ29udGVudFwiXG4gICAgICAgIGRlc2NyaXB0aW9uPXtkYXRhVXBkYXRlZEF0ID8gYFVwZGF0ZWQgJHtuZXcgRGF0ZShkYXRhVXBkYXRlZEF0KS50b0xvY2FsZVN0cmluZygpfWAgOiBcIlwifVxuICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgID5cbiAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgIHsoaXNFcnJvcikgJiYgPEV1aVRleHQ+Tm8gZGF0YSBjb250ZW50IGF2YWlsYWJsZTwvRXVpVGV4dD59XG4gICAgICAgICAge2lzTG9hZGluZ1xuICAgICAgICAgICAgPyA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgICAgOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICB7KG9udG9sb2dpZXNEYXRhPy5nZXRUb3RhbE9udG9sb2dpZXMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0VG90YWxPbnRvbG9naWVzKCkudG9Mb2NhbGVTdHJpbmcoKX0gb250b2xvZ2llcyBhbmQgdGVybWlub2xvZ2llczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19Pm9udG9sb2d5IG51bWJlciBub3QgYXZhaWxhYmxlPC9saT4pfVxuICAgICAgICAgICAgICB7KG9udG9sb2dpZXNEYXRhPy5nZXROdW1DbGFzc2VzKClcbiAgICAgICAgICAgICAgICA/IDxsaT57b250b2xvZ2llc0RhdGE/LmdldE51bUNsYXNzZXMoKS50b0xvY2FsZVN0cmluZygpfSB0ZXJtczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PnRlcm0gbnVtYmVyIG5vdCBhdmFpbGFibGU8L2xpPil9XG4gICAgICAgICAgICAgIHsob250b2xvZ2llc0RhdGE/LmdldE51bVByb3BlcnRpZXMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0TnVtUHJvcGVydGllcygpLnRvTG9jYWxlU3RyaW5nKCl9IHByb3BlcnRpZXM8L2xpPlxuICAgICAgICAgICAgICAgIDogPGxpIHN0eWxlPXt7IGZvbnRTdHlsZTogXCJpdGFsaWNcIiB9fT5wcm9wZXJ0eSBudW1iZXIgbm90IGF2YWlsYWJsZTwvbGk+KX1cbiAgICAgICAgICAgICAgeyhvbnRvbG9naWVzRGF0YT8uZ2V0TnVtSW5kaXZpZHVhbHMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0TnVtSW5kaXZpZHVhbHMoKS50b0xvY2FsZVN0cmluZygpfSBpbmRpdmlkdWFsczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PmluZGl2aWR1YWwgbnVtYmVyIG5vdCBhdmFpbGFibGU8L2xpPil9XG4gICAgICAgICAgICAgIHsvKiA8bGk+VmVyc2lvbiB7Tk9UX0FWQUlMQUJMRX08L2xpPiAqL30gey8qIFRPRE8gaG93IHRvIGdldCBBUEkgdmVyc2lvbj8gKi99XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgPC9FdWlDYXJkPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEYXRhQ29udGVudChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWREYXRhQ29udGVudFdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRGF0YUNvbnRlbnRXaWRnZXQocHJvcHM6IERhdGFDb250ZW50V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8RGF0YUNvbnRlbnRXaWRnZXRcbiAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBEYXRhQ29udGVudFdpZGdldCwgY3JlYXRlRGF0YUNvbnRlbnQgfTtcbiIsICJpbXBvcnQgUmVhY3QsIHtSZWFjdEVsZW1lbnR9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlDYXJkLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlTcGFjZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gJ3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7YXNBcnJheSwgY2FwaXRhbGl6ZSwgZGVDYW1lbENhc2UsIGRlVW5kZXJzY29yZSwgZ2V0RW50aXR5VHlwZU5hbWUsIHJhbmRvbVN0cmluZywgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5fSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYLCBnZXRFbnRpdHlMaW5rSlNYLCBnZXRSZWlmaWVkSlNYLCBnZXRUb29sdGlwfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQge1Byb3BlcnR5LCBUaGluZywgQ2xhc3MsIEVudGl0eSwgSW5kaXZpZHVhbH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7aXNDbGFzcywgaXNQcm9wZXJ0eSwgaXNJbmRpdmlkdWFsfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7RW50aXR5SW5mb1dpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0hBU19USVRMRSA9IHRydWU7XG5cbmZ1bmN0aW9uIEVudGl0eUluZm9XaWRnZXQocHJvcHM6IEVudGl0eUluZm9XaWRnZXRQcm9wcykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7IGFwaSwgaXJpLCBvbnRvbG9neUlkLCBoYXNUaXRsZSA9IERFRkFVTFRfSEFTX1RJVExFLCBlbnRpdHlUeXBlLCBwYXJhbWV0ZXIsIHNob3dCYWRnZXMgLCB1c2VMZWdhY3ksIG9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSAsIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogZW50aXR5LFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ0VudGl0eSxcbiAgICAgICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NFbnRpdHksXG4gICAgICAgIGlzRXJyb3I6IGlzRXJyb3JFbnRpdHksXG4gICAgICAgIGVycm9yOiBlcnJvckVudGl0eSxcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICAgIFtcbiAgICAgICAgICAgIFwiZW50aXR5SW5mb1wiLFxuICAgICAgICAgICAgcHJvcHNcbiAgICAgICAgXSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gZ2V0TGFiZWxTZWN0aW9uKGVudGl0eTogRW50aXR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtlbnRpdHkuZ2V0TGFiZWwoKSAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkxhYmVsOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnRpdHkuZ2V0TGFiZWwoKX1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48RXVpU3BhY2VyLz48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTeW5vbnltc1NlY3Rpb24oZW50aXR5OiBFbnRpdHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2VudGl0eS5nZXRTeW5vbnltcygpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5TeW5vbnltczo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZW50aXR5LmdldFN5bm9ueW1zKCkubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntlbnRpdHkuZ2V0U3lub255bXMoKS5tYXAoKHN5bm9ueW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17c3lub255bS52YWx1ZX0+e2dldFJlaWZpZWRKU1goZW50aXR5LCBzeW5vbnltLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBlbnRpdHkuZ2V0U3lub255bXMoKVswXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEhhc0tleVNlY3Rpb24odGVybTogQ2xhc3MpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHRlcm0uZ2V0SGFzS2V5KCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtrZXlzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5IYXMgS2V5OjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtrZXlzLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57a2V5cy5tYXAoKGtleXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwga2V5cywgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldENsYXNzRXhwcmVzc2lvbkpTWCh0ZXJtLCB0ZXJtLmdldExpbmtlZEVudGl0aWVzKCksIGtleXNbMF0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTdWJzZXRzU2VjdGlvbih0ZXJtOiBDbGFzcykgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7IHRlcm0uZ2V0U3Vic2V0cygpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5JbiBTdWJzZXRzOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0ZXJtLmdldFN1YnNldHMoKS5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e3Rlcm0uZ2V0U3Vic2V0cygpLm1hcCgoc3Vic2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gaWQ9e3N1YnNldCArIHJhbmRvbVN0cmluZygpfT57Z2V0RW50aXR5TGlua0pTWCh0ZXJtLCB0ZXJtLmdldExpbmtlZEVudGl0aWVzKCksIHN1YnNldCwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldEVudGl0eUxpbmtKU1godGVybSwgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLCB0ZXJtLmdldFN1YnNldHMoKVswXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFByb3BlcnR5Q2hhcmFjdGVyaXN0aWNzU2VjdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyaXN0aWNzID0gcHJvcGVydHkuZ2V0UmRmVHlwZXMoKS5tYXAodHlwZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHtcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjRnVuY3Rpb25hbFByb3BlcnR5JzogJ0Z1bmN0aW9uYWwnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNJbnZlcnNlRnVuY3Rpb25hbFByb3BlcnR5JzogJ0ludmVyc2UgRnVuY3Rpb25hbCcsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RyYW5zaXRpdmVQcm9wZXJ0eSc6ICdUcmFuc2l0aXZlJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjU3ltbWV0cmljUHJvcGVydHknOiAnU3ltbWV0cmljJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjQXN5bW1ldHJpY1Byb3BlcnR5JzogJ0FzeW1tZXRyaWMnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNSZWZsZXhpdmVQcm9wZXJ0eSc6ICdSZWZsZXhpdmUnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNJcnJlZmxleGl2ZVByb3BlcnR5JzogJ0lycmVmbGV4aXZlJyxcbiAgICAgICAgICAgIH0pW3R5cGVdO1xuICAgICAgICB9KS5maWx0ZXIoKHR5cGUpID0+ICEhdHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2NoYXJhY3RlcmlzdGljcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q2hhcmFjdGVyaXN0aWNzOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGFyYWN0ZXJpc3RpY3MubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntjaGFyYWN0ZXJpc3RpY3MubWFwKChjaGFyYWN0ZXJpc3RpYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntjaGFyYWN0ZXJpc3RpY308L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KCl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntjaGFyYWN0ZXJpc3RpY3NbMF19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERvbWFpblNlY3Rpb24ocHJvcGVydHk6IFByb3BlcnR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRvbWFpbnMgPSBwcm9wZXJ0eS5nZXREb21haW4oKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2RvbWFpbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkRvbWFpbjo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZG9tYWlucy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e2RvbWFpbnMubWFwKChkb21haW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZG9tYWlucywgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZG9tYWluc1swXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFJhbmdlU2VjdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcmFuZ2VzID0gcHJvcGVydHkuZ2V0UmFuZ2UoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3Jhbmdlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPlJhbmdlOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtyYW5nZXMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntyYW5nZXMubWFwKChyYW5nZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCByYW5nZXMsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRDbGFzc0V4cHJlc3Npb25KU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIHJhbmdlc1swXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEluZGl2aWR1YWxQcm9wZXJ0eUFzc2VydGlvbnNTZWN0aW9uKGluZGl2aWR1YWw6IEluZGl2aWR1YWwpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlJcmlzID0gT2JqZWN0LmtleXMoaW5kaXZpZHVhbC5wcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgbmVnYXRpdmVQcm9wZXJ0aWVzID0gcHJvcGVydHlJcmlzLmZpbHRlcigoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aChcIm5lZ2F0aXZlUHJvcGVydHlBc3NlcnRpb24rXCIpKTtcbiAgICAgICAgY29uc3Qgb2JqZWN0UHJvcGVydGllcyA9IHByb3BlcnR5SXJpcy5maWx0ZXIoKGtleSkgPT4gaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLmdldChrZXkpICYmIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KT8udHlwZS5pbmRleE9mKFwib2JqZWN0UHJvcGVydHlcIikgIT09IC0xKVxuICAgICAgICBjb25zdCBkYXRhUHJvcGVydGllcyA9IHByb3BlcnR5SXJpcy5maWx0ZXIoKGtleSkgPT4gaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLmdldChrZXkpICYmIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KT8udHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMSlcbiAgICAgICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25zOiBSZWFjdEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgICAgIGZvcihjb25zdCBpcmkgb2Ygb2JqZWN0UHJvcGVydGllcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gYXNBcnJheShpbmRpdmlkdWFsLnByb3BlcnRpZXNbaXJpXSk7XG4gICAgICAgICAgICBmb3IoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBpcmksIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAge3R5cGVvZiB2ID09PSBcInN0cmluZ1wiICYmIHYuaW5jbHVkZXMoXCJodHRwXCIpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwifX0+JiM5NjU2Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgdiwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRUb29sdGlwKCh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiA/IHYgOiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiB2LnZhbHVlID8gSlNPTi5zdHJpbmdpZnkodi52YWx1ZSkgOiBKU09OLnN0cmluZ2lmeSh2KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvcihjb25zdCBpcmkgb2YgZGF0YVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoaW5kaXZpZHVhbC5wcm9wZXJ0aWVzW2lyaV0pO1xuICAgICAgICAgICAgZm9yKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgaXJpLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHs8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiYjOTY1Njs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB2LCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPn1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yKGNvbnN0IGtleSBvZiBuZWdhdGl2ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlyaSA9IGtleS5zbGljZShcIm5lZ2F0aXZlUHJvcGVydHlBc3NlcnRpb24rXCIubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtlZEVudGl0eSA9IGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoaXJpKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RhdGFQcm9wZXJ0eSA9IGxpbmtlZEVudGl0eT8udHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMTtcbiAgICAgICAgICAgIGNvbnN0IGhhc09iamVjdFByb3BlcnR5ID0gbGlua2VkRW50aXR5Py50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTE7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhc0FycmF5KGluZGl2aWR1YWwucHJvcGVydGllc1trZXldKTtcblxuICAgICAgICAgICAgZm9yKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+bm90PC9pPntcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBpcmksIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAge3R5cGVvZiB2ID09PSBcInN0cmluZ1wiICYmIHYuaW5jbHVkZXMoXCJodHRwXCIpID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mIzk2NTY7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB2LCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT2JqZWN0UHJvcGVydHkgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VG9vbHRpcCgodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgPyB2IDogdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodikgJiYgdi52YWx1ZSA/IEpTT04uc3RyaW5naWZ5KHYudmFsdWUpIDogSlNPTi5zdHJpbmdpZnkodikpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNEYXRhUHJvcGVydHkgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiYjOTY1Njs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHYsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3Byb3BlcnR5QXNzZXJ0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+UHJvcGVydHkgYXNzZXJ0aW9uczo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cHJvcGVydHlBc3NlcnRpb25zLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57cHJvcGVydHlBc3NlcnRpb25zLm1hcCgocGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57cGF9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgpfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57cHJvcGVydHlBc3NlcnRpb25zWzBdfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRBbm5vdGF0aW9uU2VjdGlvbih0aGluZzogVGhpbmcpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3RoaW5nLmdldEFubm90YXRpb25QcmVkaWNhdGVzKCkubWFwKChhbm5vS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFubm9zID0gdGhpbmcuZ2V0QW5ub3RhdGlvbkJ5SWQoYW5ub0tleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGFubm9zLmxlbmd0aCA9PSAwKSByZXR1cm4gPD48Lz47XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0ga2V5PXthbm5vS2V5fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPntjYXBpdGFsaXplKGRlVW5kZXJzY29yZShkZUNhbWVsQ2FzZSh0aGluZy5nZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGFubm9LZXkpKSkpfTo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YW5ub3MubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPnthbm5vcy5tYXAoKGFubm90YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17YW5ub3RhdGlvbi52YWx1ZX0+e2dldFJlaWZpZWRKU1godGhpbmcsIGFubm90YXRpb24sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UmVpZmllZEpTWCh0aGluZywgYW5ub3NbMF0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAgPEV1aUNhcmRcbiAgICAgICAgICAgICAgICB0aXRsZT17aGFzVGl0bGUgPyAoZW50aXR5VHlwZSA/IGNhcGl0YWxpemUoZ2V0RW50aXR5VHlwZU5hbWUoZW50aXR5VHlwZSkpIDogKGlzU3VjY2Vzc0VudGl0eSAmJiBlbnRpdHkpID8gY2FwaXRhbGl6ZShlbnRpdHkuZ2V0VHlwZSgpKSA6IFwiXCIpICArIFwiIEluZm9ybWF0aW9uXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgIGxheW91dD1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAge2lzTG9hZGluZ0VudGl0eSAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17J3MnfS8+fVxuICAgICAgICAgICAgICAgIHtpc1N1Y2Nlc3NFbnRpdHkgJiYgZW50aXR5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2dldExhYmVsU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAge2dldFN5bm9ueW1zU2VjdGlvbihlbnRpdHkpfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNDbGFzcyhlbnRpdHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldFN1YnNldHNTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRIYXNLZXlTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1Byb3BlcnR5KGVudGl0eSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0UHJvcGVydHlDaGFyYWN0ZXJpc3RpY3NTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXREb21haW5TZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRSYW5nZVNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAge2lzSW5kaXZpZHVhbChlbnRpdHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEluZGl2aWR1YWxQcm9wZXJ0eUFzc2VydGlvbnNTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRBbm5vdGF0aW9uU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtpc0Vycm9yRW50aXR5ICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3JFbnRpdHksIFwiaW5mb3JtYXRpb25cIil9PC9FdWlUZXh0Pn1cbiAgICAgICAgICAgIDwvRXVpQ2FyZD5cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5SW5mbyhwcm9wczogRW50aXR5SW5mb1dpZGdldFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkRW50aXRpeUluZm9XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0aXlJbmZvV2lkZ2V0KHByb3BzOiBFbnRpdHlJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEVudGl0eUluZm9XaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBoYXNUaXRsZT17cHJvcHMuaGFzVGl0bGV9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcz17cHJvcHMuc2hvd0JhZGdlc31cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IEVudGl0eUluZm9XaWRnZXQsIGNyZWF0ZUVudGl0eUluZm8gfTtcbiIsICJpbXBvcnQge1RoaW5nfSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgUmVhY3QsIHtSZWFjdEVsZW1lbnR9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlJY29uVGlwLCBFdWlJY29ufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge2FzQXJyYXksIGluZmVyVHlwZUZyb21UeXBlQXJyYXksIHJhbmRvbVN0cmluZ30gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcbmltcG9ydCBcIi4uL3N0eWxlL3NlbWxvb2twLXN0eWxlcy5jc3NcIjtcbmltcG9ydCB7T25OYXZpZ2F0ZXN9IGZyb20gXCIuLi9hcHAvdHlwZXNcIjtcblxuY29uc3QgREVGQVVMVF9TSE9XX0JBREdFUyA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sdGlwKHRleHQ6IHN0cmluZykgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlJY29uVGlwIHR5cGU9e1wiaUluQ2lyY2xlXCJ9IGNvbG9yPXtcInN1YmR1ZWRcIn0gY29udGVudD17dGV4dH0vPlxuICAgICk7XG59XG5cbi8qKlxuICogT05MWSBVU0FCTEUgV0lUSCBWMi1BUEkgRU5USVRJRVNcbiAqXG4gKiBSZXR1cm5zIFJlaWZpZWQgYXhpb21zIGFzIEpTWCBlbGVtZW50IChzaW1pbGFyIHRvIE1ldGFkYXRhVG9vbHRpcCBjb21wb25lbnQgaW4gb2xzNCBwcm9qZWN0KVxuICogQHBhcmFtIHBhcmVudEVudGl0eSB0aGUgc3Vycm91bmRpbmcgZW50aXR5IG9mIHRoZSBheGlvbXMgYXJyYXkgKGZvciBldmVudHVhbCBsYWJlbCBmZXRjaGluZylcbiAqIEBwYXJhbSBheGlvbXNEaWN0IHRoZSBlbnRpdGllcyBheGlvbXMgaW4gdGhlIGZvcm1hdCByZXR1cm5lZCBieSBSZWlmaWVkOjpnZXRNZXRhZGF0YSgpXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGF4aW9tcyBpbiBKU1ggZm9ybWF0IHRvIGRpc3BsYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF4aW9tc0luZm9ybWF0aW9uSlNYKHBhcmVudEVudGl0eTogVGhpbmcsIGF4aW9tc0RpY3Q6IGFueSB8IG51bGwpIDogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBheGlvbXNUZXh0ID0gT2JqZWN0LmtleXMoYXhpb21zRGljdClcbiAgICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IHBhcmVudEVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLmdldExhYmVsRm9ySXJpKGtleSkgfHwga2V5O1xuICAgICAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgXCIqXCIgKyBheGlvbXNEaWN0W2tleV0gKyBcIiAoXCIgKyBsYWJlbCArIFwiKVwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIFwiXCI7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiXFxuXCIpXG5cbiAgICByZXR1cm4gZ2V0VG9vbHRpcChheGlvbXNUZXh0KTtcbn1cblxuLyoqXG4gKiBPTkxZIFVTQUJMRSBXSVRIIFYyLUFQSSBFTlRJVElFU1xuICpcbiAqIFJldHVybnMgYSBsYWJlbGVkIGVudGl0eSBsaW5rIGFzIEpTWCBlbGVtZW50XG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBlbnRpdHkgb2JqZWN0IGluIHdoaWNoIHRoZSBsaW5rZWQgZW50aXR5IGV4aXN0c1xuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzIHRoZSBsaW5rZWRFbnRpdGllcyBvYmplY3QgKGV4aXN0cyBhcyBwYXJhbSBiZWNhdXNlIGl0IGlzIG5lY2Vzc2FyeSB0aGF0IHRoZSBlbnRpdHkgaGFzIGEgbGlua2VkRW50aXRpZXMgYmxvY2sgaW4gcHJvcGVydGllcylcbiAqIEBwYXJhbSBpcmkgICB0aGUgZW50aXRpZXMnIGlyaVxuICogQHBhcmFtIHNob3dCYWRnZXMgICAgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGVudGl0eSBsaW5rIEpTWFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXR5TGlua0pTWChwYXJlbnRFbnRpdHk6IFRoaW5nLCBsaW5rZWRFbnRpdGllczogTGlua2VkRW50aXRpZXMsIGlyaTogc3RyaW5nLCBzaG93QmFkZ2VzIDogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgbGFiZWwgPSBsaW5rZWRFbnRpdGllcy5nZXRMYWJlbEZvcklyaShpcmkpIHx8IGlyaS5zcGxpdChcIi9cIikucG9wKCkgfHwgaXJpO1xuICAgIGNvbnN0IGxpbmtlZEVudGl0eSA9IGxpbmtlZEVudGl0aWVzLmdldChpcmkpO1xuICAgIGNvbnN0IGxvY2FsT250b2xvZ3kgPSBwYXJlbnRFbnRpdHkuZ2V0T250b2xvZ3lJZCgpO1xuXG4gICAgLy8gcmVmZXJlbmNlIHRvIHNlbGY6IGp1c3QgZGlzcGxheSBsYWJlbCBiZWNhdXNlIHdlIGFyZSBhbHJlYWR5IG9uIHRoYXQgcGFnZVxuICAgIGlmIChwYXJlbnRFbnRpdHkuZ2V0VHlwZSgpICE9PSBcIm9udG9sb2d5XCIgJiYgaXJpID09PSBwYXJlbnRFbnRpdHk/LmdldElyaSgpKSB7XG4gICAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJoaWdobGlnaHRcIj57cGFyZW50RW50aXR5LmdldExhYmVsKCl9PC9zcGFuPlxuICAgIH1cblxuICAgIGlmICghbGlua2VkRW50aXR5KSB7XG4gICAgICAgIGlmKGlyaS5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e2lyaX0+e2xhYmVsfTwvYT47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBTbyBmYXIgb25seSBrbm93biBvY2N1cnJlbmNlIG9mIHRoaXMgYnJhbmNoIGlzIGZvciBvd2wjVGhpbmdcbiAgICAgICAgICAgIHJldHVybiA8c3Bhbj57bGFiZWx9PC9zcGFuPjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG90aGVyRGVmaW5lZEJ5ID0gbGlua2VkRW50aXR5W1wiZGVmaW5lZEJ5XCJdID8gbGlua2VkRW50aXR5W1wiZGVmaW5lZEJ5XCJdLmZpbHRlcigoZWxlbTogYW55KSA9PiB7cmV0dXJuIGVsZW0gIT09IGxvY2FsT250b2xvZ3l9KSA6IFtdO1xuICAgIGNvbnN0IGxpbmtlZEVudGl0eVR5cGUgPSBsaW5rZWRFbnRpdHlbXCJ0eXBlXCJdID8gaW5mZXJUeXBlRnJvbVR5cGVBcnJheShsaW5rZWRFbnRpdHlbXCJ0eXBlXCJdKSA6IHBhcmVudEVudGl0eS5nZXRUeXBlKCk7XG5cbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRsYWIuemJtZWQuZGUva20vc2VtbG9va3Avb2xzNC8tL2Jsb2IvZGV2L2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL0VudGl0eUxpbmsudHN4IGZvciBvcmlnaW5hbCByZWZlcmVuY2VcbiAgICBpZihvdGhlckRlZmluZWRCeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYobGlua2VkRW50aXR5W1wiaGFzTG9jYWxEZWZpbml0aW9uXCJdKSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQ+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhpcyBvbnRvbG9neSBhbmQgPG9udG9sb2d5SWQ+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoZSBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eShsb2NhbE9udG9sb2d5LCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+e2xhYmVsfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJuby1kZWNvcmF0aW9uXCIgb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neShvdGhlckRlZmluZWRCeVswXSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19Pns8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntvdGhlckRlZmluZWRCeVswXS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj59PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQ+IGxpbmtpbmcgdG8gdGhlIHRlcm0gaW4gdGhlIGRlZmluaW5nIG9udG9sb2d5XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KG90aGVyRGVmaW5lZEJ5WzBdLCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+e2xhYmVsfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJuby1kZWNvcmF0aW9uXCIgb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neShvdGhlckRlZmluZWRCeVswXSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19Pns8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntvdGhlckRlZmluZWRCeVswXS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj59PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZihvdGhlckRlZmluZWRCeS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmKGxpbmtlZEVudGl0eVtcImhhc0xvY2FsRGVmaW5pdGlvblwiXSkge1xuICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+IDxvbnRvbG9neUlkMT4gPG9udG9sb2d5SWQyPiAuLi4gPG9udG9sb2d5SWROPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoaXMgb250b2xvZ3kgYW5kIDxvbnRvbG9neUlkST4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhhdCBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eShsb2NhbE9udG9sb2d5LCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+e2xhYmVsfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge290aGVyRGVmaW5lZEJ5Lm1hcCgoZWxlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIiBrZXk9e3JhbmRvbVN0cmluZygpfSBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5KGVsZW0sIGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT57PHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57ZWxlbS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj59PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+PElDT04+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm1zJyBpcmkgYW5kIDxJQ09OPiBsaW5rcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e2lyaX0+e2xhYmVsfTwvYT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwibm8tZGVjb3JhdGlvblwiIGtleT17cmFuZG9tU3RyaW5nKCl9IG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZShsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpSWNvbiB0eXBlPXtcInNlYXJjaFwifSBzaXplPXtcInNcIn0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3RoZXJEZWZpbmVkQnkubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XCJvbnRvbG9naWVzXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZihsaW5rZWRFbnRpdHlbXCJoYXNMb2NhbERlZmluaXRpb25cIl0pIHtcbiAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoaXMgb250b2xvZ3lcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkobG9jYWxPbnRvbG9neSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19PntsYWJlbH08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmKHBhcnNlSW50KGxpbmtlZEVudGl0eVtcIm51bUFwcGVhcnNJblwiXSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+PElDT04+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm1zJyBpcmkgYW5kIDxJQ09OPiBsaW5rcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e2lyaX0+e2xhYmVsfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJuby1kZWNvcmF0aW9uXCIga2V5PXtyYW5kb21TdHJpbmcoKX0gb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlKGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpSWNvbiB0eXBlPXtcInNlYXJjaFwifSBzaXplPXtcInNcIn0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xpbmtlZEVudGl0eVtcIm51bUFwcGVhcnNJblwiXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJzZUludChsaW5rZWRFbnRpdHlbXCJudW1BcHBlYXJzSW5cIl0pID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIm9udG9sb2dpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIm9udG9sb2d5XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHNob3cgcmF3IGlyaVxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXtsaW5rZWRFbnRpdHlbXCJ1cmxcIl0gfHwgaXJpfT57bGFiZWx9PC9hPlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogT05MWSBVU0FCTEUgV0lUSCBWMi1BUEkgRU5USVRJRVNcbiAqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgb25lIGVsZW1lbnQgb2YgYSBzZWN0aW9ucycgbGlzdCwgcG9zc2libHkgaW4gYSByZWN1cnNpdmUgZmFzaGlvbiBieSBwYXJzaW5nIHRoZSByZXNwb25zZSBvYmplY3QgYXQgdGhlIGN1cnJlbnRSZXNwb25zZVBhdGggdG8gc2hvdyBNYW5jaGVzdGVyIHN5bnRheC5cbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHkgdGhlIGVudGl0eSBvYmplY3QgcG9zc2Vzc2luZyB0aGUgd2hvbGUgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gbGlua2VkRW50aXRpZXMgdGhlIGxpbmtlZEVudGl0aWVzIG9iamVjdCAoZXhpc3RzIGFzIHBhcmFtIGJlY2F1c2UgaXQgaXMgbmVjZXNzYXJ5IHRoYXQgdGhlIGVudGl0eSBoYXMgYSBsaW5rZWRFbnRpdGllcyBibG9jayBpbiBwcm9wZXJ0aWVzKVxuICogQHBhcmFtIGN1cnJlbnRSZXNwb25zZVBhdGggdGhlIGN1cnJlbnQgc3ViLW9iamVjdCBvZiB0aGUgcGFyZW50RW50aXRpZXMgcmVzcG9uc2Ugb2JqZWN0IHBhcnNlZCBhcyBjbGFzcyBleHByZXNzaW9uXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMgZnVuY3Rpb25zIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBjbGlja2FibGUgaXRlbXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIGVudGl0aWVzIG5hbWVcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gb250b2xvZ3kgYmFkZ2VcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGEgZGlzYW1iaWd1YXRpb24gYmFkZ2VcbiAqIEByZXR1cm5zIFJlYWN0RWxlbWVudCB0aGUgY2xhc3MgZXhwcmVzc2lvbiBKU1hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHk6IFRoaW5nLCBsaW5rZWRFbnRpdGllczogTGlua2VkRW50aXRpZXMsIGN1cnJlbnRSZXNwb25zZVBhdGg6IGFueSwgc2hvd0JhZGdlczogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgbGV0IHJlc3VsdCA9IDw+PC8+O1xuXG4gICAgLy8gbWVyZ2UgbGlua2VkRW50aXRpZXMgb2YgY3VycmVudFJlc3BvbnNlUGF0aCBpZiBjdXJyZW50UmVzcG9uc2VQYXRoLmxpbmtlZEVudGl0aWVzIGlzIG5vdCB1bmRlZmluZWRcbiAgICBsaW5rZWRFbnRpdGllcyA9IGxpbmtlZEVudGl0aWVzLm1lcmdlV2l0aChjdXJyZW50UmVzcG9uc2VQYXRoLmxpbmtlZEVudGl0aWVzKTtcblxuICAgIGlmICh0eXBlb2YgY3VycmVudFJlc3BvbnNlUGF0aCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXN1bHQgPSBnZXRFbnRpdHlMaW5rSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGN1cnJlbnRSZXNwb25zZVBhdGgsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGN1cnJlbnRSZXNwb25zZVBhdGggPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aCkgJiYgQXJyYXkuaXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoW1widHlwZVwiXSkgJiYgY3VycmVudFJlc3BvbnNlUGF0aFtcInR5cGVcIl0uaW5kZXhPZihcInJlaWZpY2F0aW9uXCIpICE9PSAtMSkgeyAvLyBUT0RPOiBDb25jYXQgd2l0aCBlbHNlIHBhcnQ/IFNlZSByZWxhdGVkRnJvbSAoTWFuY2hlc3RlciBzeW50YXggZG9lcyBub3QgZ2V0IGRpc3BsYXllZCwgYnV0IG5laXRoZXIgaW4gb2xzNClcbiAgICAgICAgLy8gY3VycmVudCByZXNwb25zZSBwYXRoIGlzIHJlaWZpY2F0aW9uXG4gICAgICAgIHJlc3VsdCA9IGdldFJlaWZpZWRKU1gocGFyZW50RW50aXR5LCBSZWlmaWVkLmZyb21Kc29uPGFueT4oY3VycmVudFJlc3BvbnNlUGF0aClbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICB9XG4gICAgZWxzZSB7IC8vIHR5cGUgPT09IFwib2JqZWN0XCJcbiAgICAgICAgY29uc3Qgc29tZVZhbHVlc0Zyb20gPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc29tZVZhbHVlc0Zyb21cIl07XG4gICAgICAgIGNvbnN0IGFsbFZhbHVlc0Zyb20gPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjYWxsVmFsdWVzRnJvbVwiXTtcbiAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uT2YgPSBhc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNpbnRlcnNlY3Rpb25PZlwiXSk7XG4gICAgICAgIGNvbnN0IHVuaW9uT2YgPSBhc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN1bmlvbk9mXCJdKTtcbiAgICAgICAgY29uc3QgaGFzVmFsdWUgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzVmFsdWVcIl07XG4gICAgICAgIGNvbnN0IG1pbkNhcmRpbmFsaXR5ID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21pbkNhcmRpbmFsaXR5XCJdIHx8IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNtaW5RdWFsaWZpZWRDYXJkaW5hbGl0eVwiXTtcbiAgICAgICAgY29uc3QgbWF4Q2FyZGluYWxpdHkgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjbWF4Q2FyZGluYWxpdHlcIl0gfHwgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21heFF1YWxpZmllZENhcmRpbmFsaXR5XCJdO1xuICAgICAgICBjb25zdCBjYXJkaW5hbGl0eSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNjYXJkaW5hbGl0eVwiXSB8fCBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcXVhbGlmaWVkQ2FyZGluYWxpdHlcIl07XG4gICAgICAgIGNvbnN0IGhhc1NlbGYgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzU2VsZlwiXTtcbiAgICAgICAgY29uc3QgY29tcGxlbWVudE9mID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2NvbXBsZW1lbnRPZlwiXTtcbiAgICAgICAgY29uc3Qgb25lT2YgPSBhc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNvbmVPZlwiXSk7XG4gICAgICAgIGNvbnN0IGludmVyc2VPZiA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNpbnZlcnNlT2ZcIl07XG4gICAgICAgIGNvbnN0IG9uUHJvcGVydHkgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjb25Qcm9wZXJ0eVwiXTtcbiAgICAgICAgY29uc3Qgb25EYXRhVHlwZSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNvbkRhdGF0eXBlXCJdO1xuXG4gICAgICAgIGlmKG9uRGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWFjdEVsZW1lbnRbXSA9IFtcbiAgICAgICAgICAgICAgICBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25EYXRhVHlwZSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICBjb25zdCB3aXRoUmVzdHJpY3Rpb25zID0gYXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjd2l0aFJlc3RyaWN0aW9uc1wiXSk7XG4gICAgICAgICAgICBpZih3aXRoUmVzdHJpY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKDw+WzwvPik7XG5cbiAgICAgICAgICAgICAgICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IHJlc3RyaWN0aW9uIG9mIHdpdGhSZXN0cmljdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNGaXJzdCkgaXNGaXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGVsZW1lbnRzLnB1c2goPD4sJm5ic3A7PC8+KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5FeGNsdXNpdmUgPSByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21pbkV4Y2x1c2l2ZVwiXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluSW5jbHVzaXZlID0gcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtaW5JbmNsdXNpdmVcIl07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heEV4Y2x1c2l2ZSA9IHJlc3RyaWN0aW9uW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjbWF4RXhjbHVzaXZlXCJdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhJbmNsdXNpdmUgPSByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21heEluY2x1c2l2ZVwiXTtcblxuICAgICAgICAgICAgICAgICAgICBpZihtaW5FeGNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mZ3Q7IHttaW5FeGNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtaW5JbmNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mZ2U7IHttaW5JbmNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtYXhFeGNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mbHQ7IHttYXhFeGNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtYXhJbmNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mbGU7IHttYXhJbmNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKDw+XTwvPik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdCA9IDw+e2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPil9PC8+XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc29tZVZhbHVlc0Zyb20pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PiBzb21lIDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KHNvbWVWYWx1ZXNGcm9tKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhbGxWYWx1ZXNGcm9tKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gb25seSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShhbGxWYWx1ZXNGcm9tKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbnRlcnNlY3Rpb25PZi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiM0MDtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtIG9mIGludGVyc2VjdGlvbk9mKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpPiBhbmQgPC9pPlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgZWxlbSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiM0MTtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDxzcGFuPntlbGVtZW50cy5tYXAoKGVsZW0pID0+IDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PntlbGVtfTwvc3Bhbj4pfTwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pb25PZi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiM0MDtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtIG9mIHVuaW9uT2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGk+IG9yIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGVsZW0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjNDE7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8c3Bhbj57ZWxlbWVudHMubWFwKChlbGVtKSA9PiA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+KX08L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gdmFsdWUgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoaGFzVmFsdWUpWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1pbkNhcmRpbmFsaXR5KSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gbWluIDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KG1pbkNhcmRpbmFsaXR5KVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXhDYXJkaW5hbGl0eSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IG1heCA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShtYXhDYXJkaW5hbGl0eSlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FyZGluYWxpdHkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PiBleGFjdGx5IDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KGNhcmRpbmFsaXR5KVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYXNTZWxmKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gU2VsZiA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShoYXNTZWxmKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb21wbGVtZW50T2YpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8aT5ub3QgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoY29tcGxlbWVudE9mKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvbmVPZi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiMxMjM7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbSBvZiBvbmVPZikge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAmIzQ0OyZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgZWxlbSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiMxMjU7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8c3Bhbj57ZWxlbWVudHMubWFwKChlbGVtKSA9PiA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+KX08L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGludmVyc2VPZikge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT5pbnZlcnNlIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAmIzQwO1xuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgaW52ZXJzZU9mLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJiM0MTtcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHNlY3Rpb24gbGlzdCBlbGVtZW50cyBzcGVjaWZpZWQgYXQgYGN1cnJlbnRSZXNwb25zZVBhdGhgXG4gKiBAcGFyYW0gcGFyZW50RW50aXR5XG4gKiBAcGFyYW0gbGlua2VkRW50aXRpZXNcbiAqIEBwYXJhbSBhcnJheVxuICogQHBhcmFtIHNob3dCYWRnZXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcyBmdW5jdGlvbnMgZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIGNsaWNrYWJsZSBpdGVtc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gZW50aXRpZXMgbmFtZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBvbnRvbG9neSBiYWRnZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYSBkaXNhbWJpZ3VhdGlvbiBiYWRnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdGlvbkxpc3RKU1gocGFyZW50RW50aXR5OiBUaGluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLCBhcnJheTogYW55W10sIHNob3dCYWRnZXM6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTLCAvKlRPRE86IGNoYW5nZSB0byB1c2luZyAoZW50aXR5IDogRW50aXR5RGF0YSkgbGF0ZXIqLyBvbk5hdmlnYXRlczogT25OYXZpZ2F0ZXMpOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICB7YXJyYXkubGVuZ3RoID09PSAxID8gKFxuICAgICAgICAgICAgICAgIDxwPntnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBwYXJlbnRFbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgYXJyYXlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX08L3A+XG4gICAgICAgICAgICApIDpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5Lm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSA+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIHBhcmVudEVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBpdGVtLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9PC9saT4pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdWw+fVxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG4vKipcbiAqIEluc2VydHMgbGlua3MgaW50byB0ZXh0IChwb3RlbnRpYWxseSB3aXRoIGxhYmVsIGluc3RlYWQgb2YgbGluayBkaXNwbGF5ZWQgaWYgbGluayBleGlzdHMgYXMga2V5IGluc2lkZSBsaW5rZWRFbnRpdGllcykgYW5kIHJldHVybnMgdGhlIHJlc3VsdGluZyBKU1ggZWxlbWVudFxuICogQHBhcmFtIHBhcmVudEVudGl0eSB0aGUgZW50aXR5IG9iamVjdCBwb3NzZXNzaW5nIHRoZSB3aG9sZSByZXNwb25zZSBvYmplY3RcbiAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IHRvIGluc2VydCBsaW5rcyBpbnRvXG4gKiBAcGFyYW0gbGlua2VkRW50aXRpZXMgdGhlIGxpbmtlZEVudGl0aWVzIG9iamVjdCAoaWYgdW5kZWZpbmVkLCBubyBsYWJlbHMgYXJlIGluZmVycmVkKVxuICogQHBhcmFtIHNob3dCYWRnZXMgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKi9cbmZ1bmN0aW9uIGFkZExpbmtzVG9UZXh0KHBhcmVudEVudGl0eTogVGhpbmcsIHRleHQ6IHN0cmluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzIHwgdW5kZWZpbmVkLCBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUywgLypUT0RPOiBjaGFuZ2UgdG8gdXNpbmcgKGVudGl0eSA6IEVudGl0eURhdGEpIGxhdGVyKi8gb25OYXZpZ2F0ZXM6IE9uTmF2aWdhdGVzKSB7XG4gICAgY29uc3QgbGlua3NUb1NwbGljZTogQXJyYXk8eyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlcjsgbGluazogUmVhY3RFbGVtZW50IH0+ID1cbiAgICAgICAgW107XG5cbiAgICBpZihsaW5rZWRFbnRpdGllcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIE9iamVjdC5rZXlzKGxpbmtlZEVudGl0aWVzLmxpbmtlZEVudGl0aWVzKSkge1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBsZXQgbiA9IHRleHQuaW5kZXhPZihlbnRpdHlJZCwgMCk7XG4gICAgICAgICAgICAgICAgbiAhPT0gLTE7XG4gICAgICAgICAgICAgICAgbiA9IHRleHQuaW5kZXhPZihlbnRpdHlJZCwgbilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxpbmtzVG9TcGxpY2UucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBuLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IG4gKyBlbnRpdHlJZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGxpbms6IGdldEVudGl0eUxpbmtKU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgZW50aXR5SWQsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIG4gKz0gZW50aXR5SWQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXJsUmUgPSAvW0Etel0rOlxcL1xcL1teXFxzXSsvZztcbiAgICBmb3IgKGxldCBtYXRjaCA9IHVybFJlLmV4ZWModGV4dCk7IG1hdGNoOyBtYXRjaCA9IHVybFJlLmV4ZWModGV4dCkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gbWF0Y2hbMF07XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZm91bmQgbWF0Y2ggXCIgKyB1cmwpO1xuXG4gICAgICAgIGxpbmtzVG9TcGxpY2UucHVzaCh7XG4gICAgICAgICAgICBzdGFydDogbWF0Y2guaW5kZXgsXG4gICAgICAgICAgICBlbmQ6IG1hdGNoLmluZGV4ICsgdXJsLmxlbmd0aCxcbiAgICAgICAgICAgIGxpbms6IChcbiAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgaHJlZj17dXJsfT57dXJsfTwvYT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsaW5rc1RvU3BsaWNlLnNvcnQoKGEsYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpO1xuXG4gICAgcmVtb3ZlT3ZlcmxhcHBpbmc6IGZvciAobGV0IG4gPSAwOyBuIDwgbGlua3NUb1NwbGljZS5sZW5ndGg7ICkge1xuICAgICAgICBmb3IgKGxldCBuMiA9IG4gKyAxOyBuMiA8IGxpbmtzVG9TcGxpY2UubGVuZ3RoOyArK24yKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpY2VBID0gbGlua3NUb1NwbGljZVtuXTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGljZUIgPSBsaW5rc1RvU3BsaWNlW24yXTtcblxuICAgICAgICAgICAgaWYgKHNwbGljZUEgPT09IHNwbGljZUIpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBUaGUgc3BsaWNlcyBvdmVybGFwIGlmIG5laXRoZXIgZW5kcyBiZWZvcmUgdGhlIG90aGVyIHN0YXJ0c1xuICAgICAgICAgICAgaWYgKHNwbGljZUEuZW5kID49IHNwbGljZUIuc3RhcnQgJiYgc3BsaWNlQi5lbmQgPj0gc3BsaWNlQS5zdGFydCkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiUmVtb3Zpbmcgb3ZlcmxhcHBpbmdcIik7XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHNob3J0ZXIgbGluayBvZiBib3RoXG4gICAgICAgICAgICAgICAgaWYoc3BsaWNlQS5lbmQgLSBzcGxpY2VBLnN0YXJ0IDwgc3BsaWNlQi5lbmQgLSBzcGxpY2VCLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmtzVG9TcGxpY2Uuc3BsaWNlKG4sIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGlua3NUb1NwbGljZS5zcGxpY2UobjIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZSByZW1vdmVPdmVybGFwcGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICArK247XG4gICAgfVxuXG4gICAgaWYgKGxpbmtzVG9TcGxpY2UubGVuZ3RoID09PSAwKSByZXR1cm4gPD57dGV4dH08Lz47XG5cbiAgICBjb25zdCByZXM6IFJlYWN0RWxlbWVudFtdID0gW107XG4gICAgbGV0IG4gPSAwO1xuXG4gICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzVG9TcGxpY2UpIHtcbiAgICAgICAgcmVzLnB1c2goXG4gICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICB7dGV4dC5zdWJzdHJpbmcobiwgbGluay5zdGFydCl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICk7XG4gICAgICAgIHJlcy5wdXNoKGxpbmsubGluayk7XG4gICAgICAgIG4gPSBsaW5rLmVuZDtcbiAgICB9XG4gICAgcmVzLnB1c2goXG4gICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9Pnt0ZXh0LnNsaWNlKG4pfTwvc3Bhbj5cbiAgICApO1xuXG4gICAgcmV0dXJuIDw+e3Jlc308Lz47XG59XG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZ2l2ZW4gUmVpZmllZFxuICogQHBhcmFtIGVudGl0eSB0aGUgZW50aXR5IHRoZSBSZWlmaWVkIGV4aXN0cyBpblxuICogQHBhcmFtIHJlaWZpZWQgdGhlIFJlaWZpZWRcbiAqIEBwYXJhbSBzaG93QmFkZ2VzIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIGlmIGJhZGdlcyBzaG91bGQgYmUgc2hvd25cbiAqIEBwYXJhbSBvbk5hdmlnYXRlcyBmdW5jdGlvbnMgZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIGNsaWNrYWJsZSBpdGVtc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gZW50aXRpZXMgbmFtZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBvbnRvbG9neSBiYWRnZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYSBkaXNhbWJpZ3VhdGlvbiBiYWRnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVpZmllZEpTWChlbnRpdHk6IFRoaW5nLCByZWlmaWVkOiBSZWlmaWVkPGFueT4sIHNob3dCYWRnZXM6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTLCAvKlRPRE86IGNoYW5nZSB0byB1c2luZyAoZW50aXR5IDogRW50aXR5RGF0YSkgbGF0ZXIqLyBvbk5hdmlnYXRlczogT25OYXZpZ2F0ZXMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGZ1bmN0aW9uIGdldFZhbHVlSlNYKHZhbHVlOiBSZWlmaWVkPGFueT4pOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBsaW5rZWRFbnRpdGllcyA9IGVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpO1xuXG4gICAgICAgIC8vIGxpbmtlZEVudGl0aWVzIG5vdCBleGlzdGVudCBvbiBlbnRpdHkgKC0+IHByb2JhYmx5IGxlZ2FjeSBhcGkgdmVyc2lvbilcbiAgICAgICAgaWYoT2JqZWN0LmtleXMobGlua2VkRW50aXRpZXMubGlua2VkRW50aXRpZXMpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBpZih0eXBlb2YgdmFsdWUudmFsdWUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZGRMaW5rc1RvVGV4dChlbnRpdHksIHZhbHVlLnZhbHVlLnRvU3RyaW5nKCksIHVuZGVmaW5lZCwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogc2hvdWxkIG5vdCBoYXBwZW4sIHByb3ZlIHRoYXQgdGhpcyBpcyBuZXZlciB0aGUgY2FzZVxuICAgICAgICAgICAgICAgIHJldHVybiA8PntKU09OLnN0cmluZ2lmeSh2YWx1ZS52YWx1ZSl9PC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGlua2VkRW50aXR5ID0gbGlua2VkRW50aXRpZXMuZ2V0KHZhbHVlLnZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKGxpbmtlZEVudGl0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRFbnRpdHlMaW5rSlNYKGVudGl0eSwgbGlua2VkRW50aXRpZXMsIHZhbHVlLnZhbHVlLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGVudGl0eS5nZXRUeXBlKCkgPT0gXCJvbnRvbG9neVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPD57SlNPTi5zdHJpbmdpZnkodmFsdWUudmFsdWUpfTwvPjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRDbGFzc0V4cHJlc3Npb25KU1goZW50aXR5LCBsaW5rZWRFbnRpdGllcywgdmFsdWUudmFsdWUsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZExpbmtzVG9UZXh0KGVudGl0eSwgdmFsdWUudmFsdWUudG9TdHJpbmcoKSwgbGlua2VkRW50aXRpZXMsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge2dldFZhbHVlSlNYKHJlaWZpZWQpfVxuICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICB7cmVpZmllZC5oYXNNZXRhZGF0YSgpICYmIGdldEF4aW9tc0luZm9ybWF0aW9uSlNYKGVudGl0eSwgcmVpZmllZC5nZXRNZXRhZGF0YSgpKX1cbiAgICAgICAgPC8+XG4gICAgKTtcbn0iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlCdXR0b24sIEV1aVByb3ZpZGVyfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0pzb25BcGlXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXJ9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuXG5mdW5jdGlvbiBKc29uQXBpV2lkZ2V0KHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGlRdWVyeSwgYnV0dG9uVGV4dCwgYnV0dG9uU2l6ZSB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpQnV0dG9uIGhyZWY9e2FwaVF1ZXJ5fSB0YXJnZXQ9XCJfYmxhbmtcIiBzaXplPXtidXR0b25TaXplIHx8IFwibVwifT57YnV0dG9uVGV4dH08L0V1aUJ1dHRvbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSnNvbkFwaShwcm9wczogSnNvbkFwaVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRKc29uQXBpV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRKc29uQXBpV2lkZ2V0KHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8SnNvbkFwaVdpZGdldFxuICAgICAgICAgICAgICBhcGlRdWVyeT17cHJvcHMuYXBpUXVlcnl9XG4gICAgICAgICAgICAgIGJ1dHRvblRleHQ9e3Byb3BzLmJ1dHRvblRleHR9XG4gICAgICAgICAgICAgIGJ1dHRvblNpemU9e3Byb3BzLmJ1dHRvblNpemV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBKc29uQXBpV2lkZ2V0LCBjcmVhdGVKc29uQXBpIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlCYWRnZSwgRXVpSWNvbiwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge09sc0FwaX0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtCcmVhZGNydW1iV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7aXNFbnRpdHl9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQnJlYWRjcnVtYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0JyZWFkY3J1bWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS9zZW1sb29rcC1zdHlsZXMuY3NzXCI7XG5cbmZ1bmN0aW9uIEJyZWFkY3J1bWJXaWRnZXQocHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgb250b2xvZ3lJZCwgaXJpLCBlbnRpdHlUeXBlLCBjb2xvckZpcnN0LCBjb2xvclNlY29uZCwgcGFyYW1ldGVyICwgdXNlTGVnYWN5LCBvbk5hdmlnYXRlVG9PbnRvbG9neX0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnkoXG4gICAgW1wiYnJlYWRjcnVtYlwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nICYmXG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHtpZihwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSAmJiBwcm9wcy5vbnRvbG9neUlkKSBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neShwcm9wcy5vbnRvbG9neUlkIHx8IFwiXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKX19PlxuICAgICAgICAgICAgICAgIDxFdWlCYWRnZSBjbGFzc05hbWU9e3Byb3BzLm9udG9sb2d5SWQgPyBcImJyZWFkY3J1bWIgY2xpY2thYmxlLWJyZWFkY3J1bWJcIiA6IFwiYnJlYWRjcnVtYlwifSBjb2xvcj17Y29sb3JGaXJzdCB8fCAoKHByb3BzLm9udG9sb2d5SWQpID8gXCJwcmltYXJ5XCIgOiBcIndhcm5pbmdcIil9Pntwcm9wcy5vbnRvbG9neUlkPy50b1VwcGVyQ2FzZSgpIHx8IDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXtcInNcIn0vPn08L0V1aUJhZGdlPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgJm5ic3A7PEV1aUljb24gdHlwZT1cImFycm93UmlnaHRcIi8+Jm5ic3A7XG4gICAgICAgICAgICA8RXVpQmFkZ2UgY2xhc3NOYW1lPVwiYnJlYWRjcnVtYlwiIGNvbG9yPXtjb2xvclNlY29uZCB8fCBcIndhcm5pbmdcIn0+ezxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXtcInNcIn0vPn08L0V1aUJhZGdlPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBpc0VudGl0eShkYXRhKSAmJlxuICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgIG9udG9sb2d5TmFtZT17ZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgc2hvcnRGb3JtPXtkYXRhLmdldFNob3J0Rm9ybSgpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e29udG9sb2d5SWQgfHwgZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgY29sb3JGaXJzdD17Y29sb3JGaXJzdH1cbiAgICAgICAgICBjb2xvclNlY29uZD17Y29sb3JTZWNvbmR9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAvPlxuICAgICAgfVxuICAgICAge2lzRXJyb3IgJiZcbiAgICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgICAgICBvbnRvbG9neU5hbWU9e3Byb3BzLm9udG9sb2d5SWQ/LnRvVXBwZXJDYXNlKCkgfHwgKGRhdGEgJiYgZGF0YS5nZXRPbnRvbG9neUlkKCkudG9VcHBlckNhc2UoKSkgfHwgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcIm9udG9sb2d5XCIpfVxuICAgICAgICAgICAgICBzaG9ydEZvcm09eyhkYXRhICYmIGRhdGEuZ2V0U2hvcnRGb3JtKCkpID8gZGF0YS5nZXRTaG9ydEZvcm0oKS50b1VwcGVyQ2FzZSgpIDogXCJcIn1cbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17b250b2xvZ3lJZCB8fCAoZGF0YSA/IGRhdGEuZ2V0T250b2xvZ3lJZCgpIDogXCJcIil9XG4gICAgICAgICAgICAgIGNvbG9yRmlyc3Q9e2NvbG9yRmlyc3QgfHwgKChwcm9wcy5vbnRvbG9neUlkIHx8IChkYXRhICYmIGRhdGEuZ2V0T250b2xvZ3lJZCgpKSkgPyBcInByaW1hcnlcIiA6IFwiZGFuZ2VyXCIpfVxuICAgICAgICAgICAgICBjb2xvclNlY29uZD17Y29sb3JTZWNvbmQgfHwgKChkYXRhICYmIGRhdGEuZ2V0U2hvcnRGb3JtKCkpID8gXCJzdWNjZXNzXCIgOiBcImRhbmdlclwiKX1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIC8+XG4gICAgICB9XG4gICAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnJlYWRjcnVtYihwcm9wczogQnJlYWRjcnVtYldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzooKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEJyZWFkY3J1bWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEJyZWFkY3J1bWJXaWRnZXQocHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxCcmVhZGNydW1iV2lkZ2V0XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgY29sb3JGaXJzdD17cHJvcHMuY29sb3JGaXJzdH1cbiAgICAgICAgICAgICAgY29sb3JTZWNvbmQ9e3Byb3BzLmNvbG9yU2Vjb25kfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IEJyZWFkY3J1bWJXaWRnZXQsIGNyZWF0ZUJyZWFkY3J1bWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtEZXNjcmlwdGlvbldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBEZXNjcmlwdGlvblByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0Rlc2NyaXB0aW9uUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBOT19ERVNDUklQVElPTiA9IFwiTm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlLlwiO1xuXG5mdW5jdGlvbiBEZXNjcmlwdGlvbldpZGdldChwcm9wczogRGVzY3JpcHRpb25XaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgb250b2xvZ3lJZCwgaXJpLCBkZXNjVGV4dCwgdGhpbmdUeXBlLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJkZXNjcmlwdGlvblwiLCBhcGksIHBhcmFtZXRlciwgdGhpbmdUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+fVxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmXG4gICAgICAgIDxEZXNjcmlwdGlvblByZXNlbnRhdGlvbiBkZXNjcmlwdGlvbj17ZGF0YS5nZXREZXNjcmlwdGlvbigpIHx8IE5PX0RFU0NSSVBUSU9OfSBkZXNjVGV4dD17ZGVzY1RleHR9IHsuLi5yZXN0fS8+XG4gICAgICB9XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImRlc2NyaXB0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlc2NyaXB0aW9uKHByb3BzOiBEZXNjcmlwdGlvbldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzooKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZERlc2NyaXB0aW9uV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWREZXNjcmlwdGlvbldpZGdldChwcm9wczogRGVzY3JpcHRpb25XaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxEZXNjcmlwdGlvbldpZGdldFxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgIGRlc2NUZXh0PXtwcm9wcy5kZXNjVGV4dH1cbiAgICAgICAgICAgICAgdGhpbmdUeXBlPXtwcm9wcy50aGluZ1R5cGV9XG4gICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICBjb2xvcj17cHJvcHMuY29sb3J9XG4gICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgRGVzY3JpcHRpb25XaWRnZXQsIGNyZWF0ZURlc2NyaXB0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7RGVzY3JpcHRpb25QcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBEZXNjcmlwdGlvblByZXNlbnRhdGlvbihwcm9wczogRGVzY3JpcHRpb25QcmVzZW50YXRpb25Qcm9wcykge1xuICBjb25zdCB7ZGVzY1RleHQsIGRlc2NyaXB0aW9uLCAuLi5yZXN0fSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT57ZGVzY1RleHQgfHwgZGVzY3JpcHRpb259PC9FdWlUZXh0PlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgeyBEZXNjcmlwdGlvblByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCwge3VzZVN0YXRlfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpRmxleEl0ZW0sIEV1aUxpbmssIEV1aVByb3ZpZGVyLCBFdWlCdXR0b25JY29ufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0lyaVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge2lzRXVpTGlua0NvbG9yLCBpc0hleENvbG9yLCBpc1JnYkNvbG9yfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcblxuZnVuY3Rpb24gSXJpV2lkZ2V0KHByb3BzOiBJcmlXaWRnZXRQcm9wcykgeyAgICAgICBcbiAgY29uc3QgeyBpcmksIGlyaVRleHQsIGNvbG9yLCBleHRlcm5hbEljb24sIHVybFByZWZpeCwgY29weUJ1dHRvbiB9ID0gcHJvcHM7XG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHVybFByZWZpeEV4aXN0ID0gdHlwZW9mKHVybFByZWZpeCkgIT09IFwidW5kZWZpbmVkXCIgJiYgdXJsUHJlZml4ICE9PSBcIlwiID8gdHJ1ZSA6IGZhbHNlO1xuICBjb25zdCBpcmlVcmwgPSB1cmxQcmVmaXhFeGlzdCA/IHVybFByZWZpeCArIGVuY29kZVVSSUNvbXBvbmVudChpcmkpIDogaXJpO1xuXG4gIGNvbnN0IENvcHlMaW5rQnV0dG9uID0gKCkgPT4ge1xuICAgIGlmICghY29waWVkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RXVpQnV0dG9uSWNvbiBcbiAgICAgICAgICBkaXNwbGF5PVwiYmFzZVwiXG4gICAgICAgICAgaWNvblR5cGU9XCJjb3B5XCIgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgIGtleT17XCJjb3B5LWJ0blwifVxuICAgICAgICAgIHN0eWxlPXt7bWFyZ2luTGVmdDogXCI1cHhcIiwgY29sb3I6IGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCJ9fSBcbiAgICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4geyAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaXJpVXJsKTtcbiAgICAgICAgICAgIHNldENvcGllZCh0cnVlKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3NldENvcGllZChmYWxzZSk7fSwgMjAwMCk7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgIH19XG4gICAgICAgICAgPiAgICAgICAgICAgIFxuICAgICAgICA8L0V1aUJ1dHRvbkljb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPEV1aUJ1dHRvbkljb24gXG4gICAgICAgIHN0eWxlPXt7bWFyZ2luTGVmdDogXCI1cHhcIiwgY29sb3I6IGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCJ9fSAgIFxuICAgICAgICBkaXNwbGF5PVwiYmFzZVwiIFxuICAgICAgICBpY29uVHlwZT1cImNoZWNrXCIgXG4gICAgICAgIGtleT17XCJjb3B5LWJ0blwifVxuICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgID5cbiAgICAgIDwvRXVpQnV0dG9uSWNvbj5cbiAgICApOyAgICBcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICA8ZGl2PlxuICAgICAgICA8RXVpTGluayBcbiAgICAgICAgICBocmVmPXtpcmlVcmx9IFxuICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiIFxuICAgICAgICAgIHN0eWxlPXt7Y29sb3I6IGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCJ9fSBcbiAgICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgICAgZXh0ZXJuYWw9e2V4dGVybmFsSWNvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAge2lyaVRleHQgPyBpcmlUZXh0IDogaXJpfSAgICAgICAgICBcbiAgICAgICAgPC9FdWlMaW5rPlxuICAgICAgICB7Y29weUJ1dHRvbiAmJiA8Q29weUxpbmtCdXR0b24gLz59XG4gICAgICA8L2Rpdj5cbiAgICA8L0V1aUZsZXhJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJcmkocHJvcHM6IElyaVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHsgICAgICAgXG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRJcmlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZElyaVdpZGdldChwcm9wczogSXJpV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpOyAgICBcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxJcmlXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGlyaVRleHQ9e3Byb3BzLmlyaVRleHR9XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPXtwcm9wcy5jb2xvcn1cbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxJY29uPXtwcm9wcy5leHRlcm5hbEljb259XG4gICAgICAgICAgICAgICAgICAgIHVybFByZWZpeD17cHJvcHMudXJsUHJlZml4fVxuICAgICAgICAgICAgICAgICAgICBjb3B5QnV0dG9uPXtwcm9wcy5jb3B5QnV0dG9ufVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBJcmlXaWRnZXQsIGNyZWF0ZUlyaSB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge09sc0FwaX0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7VGFiV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9UYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlUeXBlTmFtZSwgaXNFbnRpdHl9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuZnVuY3Rpb24gVGFiV2lkZ2V0KHByb3BzOiBUYWJXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSwgaGllcmFyY2h5VGFiLCBjcm9zc1JlZlRhYiwgdGVybWlub2xvZ3lJbmZvVGFiLCBhbHROYW1lc1RhYiwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PEVudGl0eT4oXG4gICAgW1widGFiZGF0YVwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICBmdW5jdGlvbiByZW5kZXIoZGF0YTogRW50aXR5KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUYWJQcmVzZW50YXRpb24gey4uLnJlc3R9XG4gICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgIGlyaT17aXJpfVxuICAgICAgICBhcGk9e2FwaX1cbiAgICAgICAgdXNlTGVnYWN5PXt1c2VMZWdhY3l9XG4gICAgICAgIGVudGl0eVR5cGU9e2RhdGEuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lfVxuICAgICAgICBvbnRvbG9neUlkPXtvbnRvbG9neUlkID8gb250b2xvZ3lJZCA6IGRhdGEuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICBoaWVyYXJjaHlUYWI9e2hpZXJhcmNoeVRhYn1cbiAgICAgICAgY3Jvc3NSZWZUYWI9e2Nyb3NzUmVmVGFifVxuICAgICAgICB0ZXJtaW5vbG9neUluZm9UYWI9e3Rlcm1pbm9sb2d5SW5mb1RhYn1cbiAgICAgICAgYWx0TmFtZXNUYWI9e2FsdE5hbWVzVGFifVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImRlc2NyaXB0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPD5cbiAgICAgICAgICB7aXNFbnRpdHkoZGF0YSkgPyByZW5kZXIoZGF0YSkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgIH1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGFiKHByb3BzOiBUYWJXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkVGFiV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRUYWJXaWRnZXQocHJvcHM6IFRhYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPFRhYldpZGdldFxuICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgYWx0TmFtZXNUYWI9e3Byb3BzLmFsdE5hbWVzVGFifVxuICAgICAgICAgICAgICBoaWVyYXJjaHlUYWI9e3Byb3BzLmhpZXJhcmNoeVRhYn1cbiAgICAgICAgICAgICAgY3Jvc3NSZWZUYWI9e3Byb3BzLmNyb3NzUmVmVGFifVxuICAgICAgICAgICAgICB0ZXJtaW5vbG9neUluZm9UYWI9e3Byb3BzLnRlcm1pbm9sb2d5SW5mb1RhYn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IFRhYldpZGdldCwgY3JlYXRlVGFiIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGFiYmVkQ29udGVudCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IEhpZXJhcmNoeVdpZGdldE9MUyB9IGZyb20gXCIuL0hpZXJhcmNoeVdpZGdldFwiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IGlzRW50aXR5LCBpc0luZGl2aWR1YWwsIGlzUHJvcGVydHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IEFsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQgfSBmcm9tIFwiLi9IaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IHtUYWJQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgT250b2xvZ3lJbmZvV2lkZ2V0IH0gZnJvbSBcIi4uLy4uL09udG9sb2d5SW5mb1dpZGdldFwiO1xuXG5mdW5jdGlvbiBUYWJQcmVzZW50YXRpb24ocHJvcHM6IFRhYlByZXNlbnRhdGlvblByb3BzKSB7XG4gIGZ1bmN0aW9uIHJlbmRlcihkYXRhOiBFbnRpdHkpIHtcbiAgICBjb25zdCB0YWJzID0gW107XG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyB0byBzaG93IHRoZSB0YWJzLiBUaGVyZWZvcmUsIHVuZGVmaW5lZCBnZXRzIHRyZWF0ZWQgYXMgdHJ1dGh5LlxuICAgICAqL1xuICAgIGlmKHByb3BzLmFsdE5hbWVzVGFiID09PSB1bmRlZmluZWQgfHwgcHJvcHMuYWx0TmFtZXNUYWIpe1xuICAgICAgdGFicy5wdXNoKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb250ZW50OiAoXG4gICAgICAgICAgICAgICAgPEFsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbiBzeW5vbnltcz17ZGF0YS5nZXRTeW5vbnltcygpLm1hcChzeW5vbnltID0+IHN5bm9ueW0udmFsdWUpfSAvPlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBpZDogXCJ0YWIxXCIsXG4gICAgICAgICAgICAgIG5hbWU6IFwiQWx0ZXJuYXRpdmUgTmFtZXNcIlxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5oaWVyYXJjaHlUYWIgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5oaWVyYXJjaHlUYWIpe1xuICAgICAgdGFicy5wdXNoKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAoXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG92ZXJmbG93OiBcImF1dG9cIn19PlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMudXNlTGVnYWN5ID09IHVuZGVmaW5lZCB8fCBwcm9wcy51c2VMZWdhY3lcbiAgICAgICAgICAgICAgICAgICAgICA/IDxIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkIHx8ICgoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKSAhPT0gdW5kZWZpbmVkKSA/IGRhdGEuZ2V0T250b2xvZ3lJZCgpIDogXCJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA6IDxIaWVyYXJjaHlXaWRnZXRPTFNcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkIHx8ICgoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKSAhPT0gdW5kZWZpbmVkKSA/IGRhdGEuZ2V0T250b2xvZ3lJZCgpIDogXCJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGlkOiBcInRhYjJcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkhpZXJhcmNoeVwiXG4gICAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZihwcm9wcy5jcm9zc1JlZlRhYiA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmNyb3NzUmVmVGFiICl7XG4gICAgICB0YWJzLnB1c2goXG4gICAgICAgICAge1xuICAgICAgICAgICAgICBjb250ZW50OlxuICAgICAgICAgICAgICAgIDxDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiBjcm9zc3JlZnM9e1JlaWZpZWQuZnJvbUpzb24oZGF0YS5nZXRDcm9zc1JlZmVyZW5jZXMoKSkubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pfSAvPixcbiAgICAgICAgICAgICAgaWQ6IFwidGFiM1wiLFxuICAgICAgICAgICAgICBuYW1lOiBcIkNyb3NzIHJlZmVyZW5jZXNcIlxuICAgICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYocHJvcHMudGVybWlub2xvZ3lJbmZvVGFiID09PSB1bmRlZmluZWQgfHwgcHJvcHMudGVybWlub2xvZ3lJbmZvVGFiKXtcbiAgICAgIHRhYnMucHVzaChcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGVudDpcbiAgICAgICAgICAgICAgPE9udG9sb2d5SW5mb1dpZGdldFxuICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtcIlwifVxuICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgIHNob3dCYWRnZXM9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGhhc1RpdGxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgICB3aWR0aD17NjAwfVxuICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgaWQ6IFwidGFiNFwiLFxuICAgICAgICAgICAgICBuYW1lOiBgQWJvdXQgJHtwcm9wcy5vbnRvbG9neUlkPy50b1VwcGVyQ2FzZSgpfWBcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cblxuICAgIGlmKHRhYnMubGVuZ3RoID09PSAwKXtcbiAgICAgIC8qKlxuICAgICAgICogRXVpVGFiYmVkQ29udGVudCBjb21wb25lbnQgcmFpc2VzIGV4Y2VwdGlvbiBpZiBubyB0YWIgaXMgcHJvdmlkZWQuXG4gICAgICAgKi9cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICAgIDxFdWlUYWJiZWRDb250ZW50IHNpemU9XCJzXCIgdGFicz17dGFic30gLz5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNFbnRpdHkocHJvcHMuZGF0YSkgfHwgaXNQcm9wZXJ0eShwcm9wcy5kYXRhKSB8fCBpc0luZGl2aWR1YWwocHJvcHMuZGF0YSkgPyByZW5kZXIocHJvcHMuZGF0YSkgOiBudWxsfVxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgeyBUYWJQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQge0V1aVBhbmVsLCBFdWlQcm92aWRlcn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFwiQHpibWVkL29scy10cmVldmlld1wiXG5pbXBvcnQgXCIuLi8uLi8uLi8uLi8uLi9zdHlsZS90cmVlc3R5bGVzLmNzc1wiO1xuaW1wb3J0IHtIaWVyYXJjaHlXaWRnZXRPTFNQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXJ9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgSGllcmFyY2h5V2lkZ2V0T0xTID0gKHByb3BzOiBIaWVyYXJjaHlXaWRnZXRPTFNQcm9wcykgPT4ge1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdHJlZUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0cmVlX2NvbnRhaW5lcicpO1xuICAgICh3aW5kb3cgYXMgYW55KVtcIk9MU1dpZGdldHNcIl0uY3JlYXRlRW50aXR5VHJlZSh7XG4gICAgICBpcmk6IHByb3BzLmlyaSxcbiAgICAgIG9udG9sb2d5SWQ6IHByb3BzLm9udG9sb2d5SWQsXG4gICAgICBhcGlVcmw6IHByb3BzLmFwaS5zdWJzdHJpbmcoMCwgcHJvcHMuYXBpLmxhc3RJbmRleE9mKFwiYXBpXCIpKSxcbiAgICAgIGVudGl0eVR5cGU6IChwcm9wcy5lbnRpdHlUeXBlID8gcGx1cmFsaXplVHlwZShwcm9wcy5lbnRpdHlUeXBlLCBmYWxzZSkgOiB1bmRlZmluZWQpIHx8IFwiZW50aXRpZXNcIixcbiAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5ID8gcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5IDogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZTogc3RyaW5nLCBpcmk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgbmF2aWdhdGUgdG8gZW50aXR5IHdpdGggb250b2xvZ3lJZDogJHtvbnRvbG9neUlkfSwgZW50aXR5VHlwZTogJHtlbnRpdHlUeXBlfSwgaXJpOiAke2lyaX1gLCk7XG4gICAgICB9LFxuICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5ID8gcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kgOiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlOiBzdHJpbmcsIGlyaTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBuYXZpZ2F0ZSB0byBvbnRvbG9neSB3aXRoIG9udG9sb2d5SWQ6ICR7b250b2xvZ3lJZH0sIGVudGl0eVR5cGU6ICR7ZW50aXR5VHlwZX0sIGlyaTogJHtpcml9YCwpO1xuICAgICAgfVxuICAgIH0sIHRyZWVDb250YWluZXIpO1xuICB9LCBbcHJvcHMuYXBpLCBwcm9wcy5pcmksIHByb3BzLm9udG9sb2d5SWQsIHByb3BzLmVudGl0eVR5cGUsIHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIFwiSGllcmFyY2h5V2lkZ2V0T0xTXCJdKTtcblxuICByZXR1cm4gKFxuICAgIC8vbWluV2lkdGggcmVxdWlyZWQgd29ya2Fyb3VuZCB1bnRpbCBvdmVybGFwcGluZyBjaGVja2JveGVzIGFyZSBmaXhlZCBpbiBvbHM0LXdpZGdldHNcbiAgICA8RXVpUGFuZWwgc3R5bGU9e3ttaW5XaWR0aDogXCI2MDBweFwifX0+XG4gICAgICA8ZGl2IGlkPVwidHJlZV9jb250YWluZXJcIi8+XG4gICAgPC9FdWlQYW5lbD5cbiAgKTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZXJhcmNoeU9MUyhwcm9wczogSGllcmFyY2h5V2lkZ2V0T0xTUHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEhpZXJhcmNoeVdpZGdldE9MUyhwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkSGllcmFyY2h5V2lkZ2V0T0xTKHByb3BzOiBIaWVyYXJjaHlXaWRnZXRPTFNQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxIaWVyYXJjaHlXaWRnZXRPTFNcbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgSGllcmFyY2h5V2lkZ2V0T0xTLCBjcmVhdGVIaWVyYXJjaHlPTFMgfTtcbiIsICIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGw9cmVxdWlyZShcIm9iamVjdC1hc3NpZ25cIiksbj02MDEwMyxwPTYwMTA2O2V4cG9ydHMuRnJhZ21lbnQ9NjAxMDc7ZXhwb3J0cy5TdHJpY3RNb2RlPTYwMTA4O2V4cG9ydHMuUHJvZmlsZXI9NjAxMTQ7dmFyIHE9NjAxMDkscj02MDExMCx0PTYwMTEyO2V4cG9ydHMuU3VzcGVuc2U9NjAxMTM7dmFyIHU9NjAxMTUsdj02MDExNjtcbmlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciB3PVN5bWJvbC5mb3I7bj13KFwicmVhY3QuZWxlbWVudFwiKTtwPXcoXCJyZWFjdC5wb3J0YWxcIik7ZXhwb3J0cy5GcmFnbWVudD13KFwicmVhY3QuZnJhZ21lbnRcIik7ZXhwb3J0cy5TdHJpY3RNb2RlPXcoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTtleHBvcnRzLlByb2ZpbGVyPXcoXCJyZWFjdC5wcm9maWxlclwiKTtxPXcoXCJyZWFjdC5wcm92aWRlclwiKTtyPXcoXCJyZWFjdC5jb250ZXh0XCIpO3Q9dyhcInJlYWN0LmZvcndhcmRfcmVmXCIpO2V4cG9ydHMuU3VzcGVuc2U9dyhcInJlYWN0LnN1c3BlbnNlXCIpO3U9dyhcInJlYWN0Lm1lbW9cIik7dj13KFwicmVhY3QubGF6eVwiKX12YXIgeD1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7XG5mdW5jdGlvbiB5KGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT14JiZhW3hdfHxhW1wiQEBpdGVyYXRvclwiXTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGx9ZnVuY3Rpb24geihhKXtmb3IodmFyIGI9XCJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD1cIithLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWIrPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2NdKTtyZXR1cm5cIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIithK1wiOyB2aXNpdCBcIitiK1wiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIn1cbnZhciBBPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxCPXt9O2Z1bmN0aW9uIEMoYSxiLGMpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9Qjt0aGlzLnVwZGF0ZXI9Y3x8QX1DLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O0MucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGEsYil7aWYoXCJvYmplY3RcIiE9PXR5cGVvZiBhJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYSYmbnVsbCE9YSl0aHJvdyBFcnJvcih6KDg1KSk7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGEsYixcInNldFN0YXRlXCIpfTtDLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsYSxcImZvcmNlVXBkYXRlXCIpfTtcbmZ1bmN0aW9uIEQoKXt9RC5wcm90b3R5cGU9Qy5wcm90b3R5cGU7ZnVuY3Rpb24gRShhLGIsYyl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1CO3RoaXMudXBkYXRlcj1jfHxBfXZhciBGPUUucHJvdG90eXBlPW5ldyBEO0YuY29uc3RydWN0b3I9RTtsKEYsQy5wcm90b3R5cGUpO0YuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEc9e2N1cnJlbnQ6bnVsbH0sSD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEk9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtcbmZ1bmN0aW9uIEooYSxiLGMpe3ZhciBlLGQ9e30saz1udWxsLGg9bnVsbDtpZihudWxsIT1iKWZvcihlIGluIHZvaWQgMCE9PWIucmVmJiYoaD1iLnJlZiksdm9pZCAwIT09Yi5rZXkmJihrPVwiXCIrYi5rZXkpLGIpSC5jYWxsKGIsZSkmJiFJLmhhc093blByb3BlcnR5KGUpJiYoZFtlXT1iW2VdKTt2YXIgZz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWcpZC5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxnKXtmb3IodmFyIGY9QXJyYXkoZyksbT0wO208ZzttKyspZlttXT1hcmd1bWVudHNbbSsyXTtkLmNoaWxkcmVuPWZ9aWYoYSYmYS5kZWZhdWx0UHJvcHMpZm9yKGUgaW4gZz1hLmRlZmF1bHRQcm9wcyxnKXZvaWQgMD09PWRbZV0mJihkW2VdPWdbZV0pO3JldHVybnskJHR5cGVvZjpuLHR5cGU6YSxrZXk6ayxyZWY6aCxwcm9wczpkLF9vd25lcjpHLmN1cnJlbnR9fVxuZnVuY3Rpb24gSyhhLGIpe3JldHVybnskJHR5cGVvZjpuLHR5cGU6YS50eXBlLGtleTpiLHJlZjphLnJlZixwcm9wczphLnByb3BzLF9vd25lcjphLl9vd25lcn19ZnVuY3Rpb24gTChhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09bn1mdW5jdGlvbiBlc2NhcGUoYSl7dmFyIGI9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9O3JldHVyblwiJFwiK2EucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfSl9dmFyIE09L1xcLysvZztmdW5jdGlvbiBOKGEsYil7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmbnVsbCE9YS5rZXk/ZXNjYXBlKFwiXCIrYS5rZXkpOmIudG9TdHJpbmcoMzYpfVxuZnVuY3Rpb24gTyhhLGIsYyxlLGQpe3ZhciBrPXR5cGVvZiBhO2lmKFwidW5kZWZpbmVkXCI9PT1rfHxcImJvb2xlYW5cIj09PWspYT1udWxsO3ZhciBoPSExO2lmKG51bGw9PT1hKWg9ITA7ZWxzZSBzd2l0Y2goayl7Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJudW1iZXJcIjpoPSEwO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBuOmNhc2UgcDpoPSEwfX1pZihoKXJldHVybiBoPWEsZD1kKGgpLGE9XCJcIj09PWU/XCIuXCIrTihoLDApOmUsQXJyYXkuaXNBcnJheShkKT8oYz1cIlwiLG51bGwhPWEmJihjPWEucmVwbGFjZShNLFwiJCYvXCIpK1wiL1wiKSxPKGQsYixjLFwiXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KSk6bnVsbCE9ZCYmKEwoZCkmJihkPUsoZCxjKyghZC5rZXl8fGgmJmgua2V5PT09ZC5rZXk/XCJcIjooXCJcIitkLmtleSkucmVwbGFjZShNLFwiJCYvXCIpK1wiL1wiKSthKSksYi5wdXNoKGQpKSwxO2g9MDtlPVwiXCI9PT1lP1wiLlwiOmUrXCI6XCI7aWYoQXJyYXkuaXNBcnJheShhKSlmb3IodmFyIGc9XG4wO2c8YS5sZW5ndGg7ZysrKXtrPWFbZ107dmFyIGY9ZStOKGssZyk7aCs9TyhrLGIsYyxmLGQpfWVsc2UgaWYoZj15KGEpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmKWZvcihhPWYuY2FsbChhKSxnPTA7IShrPWEubmV4dCgpKS5kb25lOylrPWsudmFsdWUsZj1lK04oayxnKyspLGgrPU8oayxiLGMsZixkKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1rKXRocm93IGI9XCJcIithLEVycm9yKHooMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PWI/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhhKS5qb2luKFwiLCBcIikrXCJ9XCI6YikpO3JldHVybiBofWZ1bmN0aW9uIFAoYSxiLGMpe2lmKG51bGw9PWEpcmV0dXJuIGE7dmFyIGU9W10sZD0wO08oYSxlLFwiXCIsXCJcIixmdW5jdGlvbihhKXtyZXR1cm4gYi5jYWxsKGMsYSxkKyspfSk7cmV0dXJuIGV9XG5mdW5jdGlvbiBRKGEpe2lmKC0xPT09YS5fc3RhdHVzKXt2YXIgYj1hLl9yZXN1bHQ7Yj1iKCk7YS5fc3RhdHVzPTA7YS5fcmVzdWx0PWI7Yi50aGVuKGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihiPWIuZGVmYXVsdCxhLl9zdGF0dXM9MSxhLl9yZXN1bHQ9Yil9LGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihhLl9zdGF0dXM9MixhLl9yZXN1bHQ9Yil9KX1pZigxPT09YS5fc3RhdHVzKXJldHVybiBhLl9yZXN1bHQ7dGhyb3cgYS5fcmVzdWx0O312YXIgUj17Y3VycmVudDpudWxsfTtmdW5jdGlvbiBTKCl7dmFyIGE9Ui5jdXJyZW50O2lmKG51bGw9PT1hKXRocm93IEVycm9yKHooMzIxKSk7cmV0dXJuIGF9dmFyIFQ9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6UixSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzp7dHJhbnNpdGlvbjowfSxSZWFjdEN1cnJlbnRPd25lcjpHLElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxhc3NpZ246bH07XG5leHBvcnRzLkNoaWxkcmVuPXttYXA6UCxmb3JFYWNoOmZ1bmN0aW9uKGEsYixjKXtQKGEsZnVuY3Rpb24oKXtiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYyl9LGNvdW50OmZ1bmN0aW9uKGEpe3ZhciBiPTA7UChhLGZ1bmN0aW9uKCl7YisrfSk7cmV0dXJuIGJ9LHRvQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIFAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYX0pfHxbXX0sb25seTpmdW5jdGlvbihhKXtpZighTChhKSl0aHJvdyBFcnJvcih6KDE0MykpO3JldHVybiBhfX07ZXhwb3J0cy5Db21wb25lbnQ9QztleHBvcnRzLlB1cmVDb21wb25lbnQ9RTtleHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPVQ7XG5leHBvcnRzLmNsb25lRWxlbWVudD1mdW5jdGlvbihhLGIsYyl7aWYobnVsbD09PWF8fHZvaWQgMD09PWEpdGhyb3cgRXJyb3IoeigyNjcsYSkpO3ZhciBlPWwoe30sYS5wcm9wcyksZD1hLmtleSxrPWEucmVmLGg9YS5fb3duZXI7aWYobnVsbCE9Yil7dm9pZCAwIT09Yi5yZWYmJihrPWIucmVmLGg9Ry5jdXJyZW50KTt2b2lkIDAhPT1iLmtleSYmKGQ9XCJcIitiLmtleSk7aWYoYS50eXBlJiZhLnR5cGUuZGVmYXVsdFByb3BzKXZhciBnPWEudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKGYgaW4gYilILmNhbGwoYixmKSYmIUkuaGFzT3duUHJvcGVydHkoZikmJihlW2ZdPXZvaWQgMD09PWJbZl0mJnZvaWQgMCE9PWc/Z1tmXTpiW2ZdKX12YXIgZj1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWYpZS5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxmKXtnPUFycmF5KGYpO2Zvcih2YXIgbT0wO208ZjttKyspZ1ttXT1hcmd1bWVudHNbbSsyXTtlLmNoaWxkcmVuPWd9cmV0dXJueyQkdHlwZW9mOm4sdHlwZTphLnR5cGUsXG5rZXk6ZCxyZWY6ayxwcm9wczplLF9vd25lcjpofX07ZXhwb3J0cy5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9bnVsbCk7YT17JCR0eXBlb2Y6cixfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6YixfY3VycmVudFZhbHVlOmEsX2N1cnJlbnRWYWx1ZTI6YSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9O2EuUHJvdmlkZXI9eyQkdHlwZW9mOnEsX2NvbnRleHQ6YX07cmV0dXJuIGEuQ29uc3VtZXI9YX07ZXhwb3J0cy5jcmVhdGVFbGVtZW50PUo7ZXhwb3J0cy5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGEpe3ZhciBiPUouYmluZChudWxsLGEpO2IudHlwZT1hO3JldHVybiBifTtleHBvcnRzLmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fTtleHBvcnRzLmZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnQscmVuZGVyOmF9fTtleHBvcnRzLmlzVmFsaWRFbGVtZW50PUw7XG5leHBvcnRzLmxhenk9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnYsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDphfSxfaW5pdDpRfX07ZXhwb3J0cy5tZW1vPWZ1bmN0aW9uKGEsYil7cmV0dXJueyQkdHlwZW9mOnUsdHlwZTphLGNvbXBhcmU6dm9pZCAwPT09Yj9udWxsOmJ9fTtleHBvcnRzLnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoKS51c2VDYWxsYmFjayhhLGIpfTtleHBvcnRzLnVzZUNvbnRleHQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUygpLnVzZUNvbnRleHQoYSxiKX07ZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVzZUVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlRWZmZWN0KGEsYil9O2V4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIFMoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGEsYixjKX07XG5leHBvcnRzLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlTGF5b3V0RWZmZWN0KGEsYil9O2V4cG9ydHMudXNlTWVtbz1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlTWVtbyhhLGIpfTtleHBvcnRzLnVzZVJlZHVjZXI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBTKCkudXNlUmVkdWNlcihhLGIsYyl9O2V4cG9ydHMudXNlUmVmPWZ1bmN0aW9uKGEpe3JldHVybiBTKCkudXNlUmVmKGEpfTtleHBvcnRzLnVzZVN0YXRlPWZ1bmN0aW9uKGEpe3JldHVybiBTKCkudXNlU3RhdGUoYSl9O2V4cG9ydHMudmVyc2lvbj1cIjE3LjAuMlwiO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBmLGcsaCxrO2lmKFwib2JqZWN0XCI9PT10eXBlb2YgcGVyZm9ybWFuY2UmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBwZXJmb3JtYW5jZS5ub3cpe3ZhciBsPXBlcmZvcm1hbmNlO2V4cG9ydHMudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGwubm93KCl9fWVsc2V7dmFyIHA9RGF0ZSxxPXAubm93KCk7ZXhwb3J0cy51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gcC5ub3coKS1xfX1cbmlmKFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93fHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgTWVzc2FnZUNoYW5uZWwpe3ZhciB0PW51bGwsdT1udWxsLHc9ZnVuY3Rpb24oKXtpZihudWxsIT09dCl0cnl7dmFyIGE9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTt0KCEwLGEpO3Q9bnVsbH1jYXRjaChiKXt0aHJvdyBzZXRUaW1lb3V0KHcsMCksYjt9fTtmPWZ1bmN0aW9uKGEpe251bGwhPT10P3NldFRpbWVvdXQoZiwwLGEpOih0PWEsc2V0VGltZW91dCh3LDApKX07Zz1mdW5jdGlvbihhLGIpe3U9c2V0VGltZW91dChhLGIpfTtoPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHUpfTtleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2s9ZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZT1mdW5jdGlvbigpe319ZWxzZXt2YXIgeD13aW5kb3cuc2V0VGltZW91dCx5PXdpbmRvdy5jbGVhclRpbWVvdXQ7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBjb25zb2xlKXt2YXIgej1cbndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZTtcImZ1bmN0aW9uXCIhPT10eXBlb2Ygd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSYmY29uc29sZS5lcnJvcihcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzXCIpO1wiZnVuY3Rpb25cIiE9PXR5cGVvZiB6JiZjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBjYW5jZWxBbmltYXRpb25GcmFtZS4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSBwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxsc1wiKX12YXIgQT0hMSxCPW51bGwsQz0tMSxEPTUsRT0wO2V4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZXhwb3J0cy51bnN0YWJsZV9ub3coKT49XG5FfTtrPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKGEpezA+YXx8MTI1PGE/Y29uc29sZS5lcnJvcihcImZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCBmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZFwiKTpEPTA8YT9NYXRoLmZsb29yKDFFMy9hKTo1fTt2YXIgRj1uZXcgTWVzc2FnZUNoYW5uZWwsRz1GLnBvcnQyO0YucG9ydDEub25tZXNzYWdlPWZ1bmN0aW9uKCl7aWYobnVsbCE9PUIpe3ZhciBhPWV4cG9ydHMudW5zdGFibGVfbm93KCk7RT1hK0Q7dHJ5e0IoITAsYSk/Ry5wb3N0TWVzc2FnZShudWxsKTooQT0hMSxCPW51bGwpfWNhdGNoKGIpe3Rocm93IEcucG9zdE1lc3NhZ2UobnVsbCksYjt9fWVsc2UgQT0hMX07Zj1mdW5jdGlvbihhKXtCPWE7QXx8KEE9ITAsRy5wb3N0TWVzc2FnZShudWxsKSl9O2c9ZnVuY3Rpb24oYSxiKXtDPVxueChmdW5jdGlvbigpe2EoZXhwb3J0cy51bnN0YWJsZV9ub3coKSl9LGIpfTtoPWZ1bmN0aW9uKCl7eShDKTtDPS0xfX1mdW5jdGlvbiBIKGEsYil7dmFyIGM9YS5sZW5ndGg7YS5wdXNoKGIpO2E6Zm9yKDs7KXt2YXIgZD1jLTE+Pj4xLGU9YVtkXTtpZih2b2lkIDAhPT1lJiYwPEkoZSxiKSlhW2RdPWIsYVtjXT1lLGM9ZDtlbHNlIGJyZWFrIGF9fWZ1bmN0aW9uIEooYSl7YT1hWzBdO3JldHVybiB2b2lkIDA9PT1hP251bGw6YX1cbmZ1bmN0aW9uIEsoYSl7dmFyIGI9YVswXTtpZih2b2lkIDAhPT1iKXt2YXIgYz1hLnBvcCgpO2lmKGMhPT1iKXthWzBdPWM7YTpmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTspe3ZhciBtPTIqKGQrMSktMSxuPWFbbV0sdj1tKzEscj1hW3ZdO2lmKHZvaWQgMCE9PW4mJjA+SShuLGMpKXZvaWQgMCE9PXImJjA+SShyLG4pPyhhW2RdPXIsYVt2XT1jLGQ9dik6KGFbZF09bixhW21dPWMsZD1tKTtlbHNlIGlmKHZvaWQgMCE9PXImJjA+SShyLGMpKWFbZF09cixhW3ZdPWMsZD12O2Vsc2UgYnJlYWsgYX19cmV0dXJuIGJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSShhLGIpe3ZhciBjPWEuc29ydEluZGV4LWIuc29ydEluZGV4O3JldHVybiAwIT09Yz9jOmEuaWQtYi5pZH12YXIgTD1bXSxNPVtdLE49MSxPPW51bGwsUD0zLFE9ITEsUj0hMSxTPSExO1xuZnVuY3Rpb24gVChhKXtmb3IodmFyIGI9SihNKTtudWxsIT09Yjspe2lmKG51bGw9PT1iLmNhbGxiYWNrKUsoTSk7ZWxzZSBpZihiLnN0YXJ0VGltZTw9YSlLKE0pLGIuc29ydEluZGV4PWIuZXhwaXJhdGlvblRpbWUsSChMLGIpO2Vsc2UgYnJlYWs7Yj1KKE0pfX1mdW5jdGlvbiBVKGEpe1M9ITE7VChhKTtpZighUilpZihudWxsIT09SihMKSlSPSEwLGYoVik7ZWxzZXt2YXIgYj1KKE0pO251bGwhPT1iJiZnKFUsYi5zdGFydFRpbWUtYSl9fVxuZnVuY3Rpb24gVihhLGIpe1I9ITE7UyYmKFM9ITEsaCgpKTtRPSEwO3ZhciBjPVA7dHJ5e1QoYik7Zm9yKE89SihMKTtudWxsIT09TyYmKCEoTy5leHBpcmF0aW9uVGltZT5iKXx8YSYmIWV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQoKSk7KXt2YXIgZD1PLmNhbGxiYWNrO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkKXtPLmNhbGxiYWNrPW51bGw7UD1PLnByaW9yaXR5TGV2ZWw7dmFyIGU9ZChPLmV4cGlyYXRpb25UaW1lPD1iKTtiPWV4cG9ydHMudW5zdGFibGVfbm93KCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGU/Ty5jYWxsYmFjaz1lOk89PT1KKEwpJiZLKEwpO1QoYil9ZWxzZSBLKEwpO089SihMKX1pZihudWxsIT09Tyl2YXIgbT0hMDtlbHNle3ZhciBuPUooTSk7bnVsbCE9PW4mJmcoVSxuLnN0YXJ0VGltZS1iKTttPSExfXJldHVybiBtfWZpbmFsbHl7Tz1udWxsLFA9YyxRPSExfX12YXIgVz1rO2V4cG9ydHMudW5zdGFibGVfSWRsZVByaW9yaXR5PTU7XG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5PTE7ZXhwb3J0cy51bnN0YWJsZV9Mb3dQcmlvcml0eT00O2V4cG9ydHMudW5zdGFibGVfTm9ybWFsUHJpb3JpdHk9MztleHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZz1udWxsO2V4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9MjtleHBvcnRzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKGEpe2EuY2FsbGJhY2s9bnVsbH07ZXhwb3J0cy51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe1J8fFF8fChSPSEwLGYoVikpfTtleHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIFB9O2V4cG9ydHMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gSihMKX07XG5leHBvcnRzLnVuc3RhYmxlX25leHQ9ZnVuY3Rpb24oYSl7c3dpdGNoKFApe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciBiPTM7YnJlYWs7ZGVmYXVsdDpiPVB9dmFyIGM9UDtQPWI7dHJ5e3JldHVybiBhKCl9ZmluYWxseXtQPWN9fTtleHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludD1XO2V4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDphPTN9dmFyIGM9UDtQPWE7dHJ5e3JldHVybiBiKCl9ZmluYWxseXtQPWN9fTtcbmV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcIm9iamVjdFwiPT09dHlwZW9mIGMmJm51bGwhPT1jPyhjPWMuZGVsYXksYz1cIm51bWJlclwiPT09dHlwZW9mIGMmJjA8Yz9kK2M6ZCk6Yz1kO3N3aXRjaChhKXtjYXNlIDE6dmFyIGU9LTE7YnJlYWs7Y2FzZSAyOmU9MjUwO2JyZWFrO2Nhc2UgNTplPTEwNzM3NDE4MjM7YnJlYWs7Y2FzZSA0OmU9MUU0O2JyZWFrO2RlZmF1bHQ6ZT01RTN9ZT1jK2U7YT17aWQ6TisrLGNhbGxiYWNrOmIscHJpb3JpdHlMZXZlbDphLHN0YXJ0VGltZTpjLGV4cGlyYXRpb25UaW1lOmUsc29ydEluZGV4Oi0xfTtjPmQ/KGEuc29ydEluZGV4PWMsSChNLGEpLG51bGw9PT1KKEwpJiZhPT09SihNKSYmKFM/aCgpOlM9ITAsZyhVLGMtZCkpKTooYS5zb3J0SW5kZXg9ZSxIKEwsYSksUnx8UXx8KFI9ITAsZihWKSkpO3JldHVybiBhfTtcbmV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKGEpe3ZhciBiPVA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9UDtQPWI7dHJ5e3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e1A9Y319fTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLypcbiBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiovXG4ndXNlIHN0cmljdCc7dmFyIGFhPXJlcXVpcmUoXCJyZWFjdFwiKSxtPXJlcXVpcmUoXCJvYmplY3QtYXNzaWduXCIpLHI9cmVxdWlyZShcInNjaGVkdWxlclwiKTtmdW5jdGlvbiB5KGEpe2Zvcih2YXIgYj1cImh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PVwiK2EsYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYis9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbY10pO3JldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2ErXCI7IHZpc2l0IFwiK2IrXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifWlmKCFhYSl0aHJvdyBFcnJvcih5KDIyNykpO3ZhciBiYT1uZXcgU2V0LGNhPXt9O2Z1bmN0aW9uIGRhKGEsYil7ZWEoYSxiKTtlYShhK1wiQ2FwdHVyZVwiLGIpfVxuZnVuY3Rpb24gZWEoYSxiKXtjYVthXT1iO2ZvcihhPTA7YTxiLmxlbmd0aDthKyspYmEuYWRkKGJbYV0pfVxudmFyIGZhPSEoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KSxoYT0vXls6QS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRF1bOkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRcXC0uMC05XFx1MDBCN1xcdTAzMDAtXFx1MDM2RlxcdTIwM0YtXFx1MjA0MF0qJC8saWE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbmphPXt9LGthPXt9O2Z1bmN0aW9uIGxhKGEpe2lmKGlhLmNhbGwoa2EsYSkpcmV0dXJuITA7aWYoaWEuY2FsbChqYSxhKSlyZXR1cm4hMTtpZihoYS50ZXN0KGEpKXJldHVybiBrYVthXT0hMDtqYVthXT0hMDtyZXR1cm4hMX1mdW5jdGlvbiBtYShhLGIsYyxkKXtpZihudWxsIT09YyYmMD09PWMudHlwZSlyZXR1cm4hMTtzd2l0Y2godHlwZW9mIGIpe2Nhc2UgXCJmdW5jdGlvblwiOmNhc2UgXCJzeW1ib2xcIjpyZXR1cm4hMDtjYXNlIFwiYm9vbGVhblwiOmlmKGQpcmV0dXJuITE7aWYobnVsbCE9PWMpcmV0dXJuIWMuYWNjZXB0c0Jvb2xlYW5zO2E9YS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSk7cmV0dXJuXCJkYXRhLVwiIT09YSYmXCJhcmlhLVwiIT09YTtkZWZhdWx0OnJldHVybiExfX1cbmZ1bmN0aW9uIG5hKGEsYixjLGQpe2lmKG51bGw9PT1ifHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIGJ8fG1hKGEsYixjLGQpKXJldHVybiEwO2lmKGQpcmV0dXJuITE7aWYobnVsbCE9PWMpc3dpdGNoKGMudHlwZSl7Y2FzZSAzOnJldHVybiFiO2Nhc2UgNDpyZXR1cm4hMT09PWI7Y2FzZSA1OnJldHVybiBpc05hTihiKTtjYXNlIDY6cmV0dXJuIGlzTmFOKGIpfHwxPmJ9cmV0dXJuITF9ZnVuY3Rpb24gQihhLGIsYyxkLGUsZixnKXt0aGlzLmFjY2VwdHNCb29sZWFucz0yPT09Ynx8Mz09PWJ8fDQ9PT1iO3RoaXMuYXR0cmlidXRlTmFtZT1kO3RoaXMuYXR0cmlidXRlTmFtZXNwYWNlPWU7dGhpcy5tdXN0VXNlUHJvcGVydHk9Yzt0aGlzLnByb3BlcnR5TmFtZT1hO3RoaXMudHlwZT1iO3RoaXMuc2FuaXRpemVVUkw9Zjt0aGlzLnJlbW92ZUVtcHR5U3RyaW5nPWd9dmFyIEQ9e307XG5cImNoaWxkcmVuIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGRlZmF1bHRWYWx1ZSBkZWZhdWx0Q2hlY2tlZCBpbm5lckhUTUwgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZyBzdHlsZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwwLCExLGEsbnVsbCwhMSwhMSl9KTtbW1wiYWNjZXB0Q2hhcnNldFwiLFwiYWNjZXB0LWNoYXJzZXRcIl0sW1wiY2xhc3NOYW1lXCIsXCJjbGFzc1wiXSxbXCJodG1sRm9yXCIsXCJmb3JcIl0sW1wiaHR0cEVxdWl2XCIsXCJodHRwLWVxdWl2XCJdXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWFbMF07RFtiXT1uZXcgQihiLDEsITEsYVsxXSxudWxsLCExLCExKX0pO1tcImNvbnRlbnRFZGl0YWJsZVwiLFwiZHJhZ2dhYmxlXCIsXCJzcGVsbENoZWNrXCIsXCJ2YWx1ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwyLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1xuW1wiYXV0b1JldmVyc2VcIixcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIixcImZvY3VzYWJsZVwiLFwicHJlc2VydmVBbHBoYVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwyLCExLGEsbnVsbCwhMSwhMSl9KTtcImFsbG93RnVsbFNjcmVlbiBhc3luYyBhdXRvRm9jdXMgYXV0b1BsYXkgY29udHJvbHMgZGVmYXVsdCBkZWZlciBkaXNhYmxlZCBkaXNhYmxlUGljdHVyZUluUGljdHVyZSBkaXNhYmxlUmVtb3RlUGxheWJhY2sgZm9ybU5vVmFsaWRhdGUgaGlkZGVuIGxvb3Agbm9Nb2R1bGUgbm9WYWxpZGF0ZSBvcGVuIHBsYXlzSW5saW5lIHJlYWRPbmx5IHJlcXVpcmVkIHJldmVyc2VkIHNjb3BlZCBzZWFtbGVzcyBpdGVtU2NvcGVcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMywhMSxhLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtcbltcImNoZWNrZWRcIixcIm11bHRpcGxlXCIsXCJtdXRlZFwiLFwic2VsZWN0ZWRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMywhMCxhLG51bGwsITEsITEpfSk7W1wiY2FwdHVyZVwiLFwiZG93bmxvYWRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsNCwhMSxhLG51bGwsITEsITEpfSk7W1wiY29sc1wiLFwicm93c1wiLFwic2l6ZVwiLFwic3BhblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSw2LCExLGEsbnVsbCwhMSwhMSl9KTtbXCJyb3dTcGFuXCIsXCJzdGFydFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSw1LCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO3ZhciBvYT0vW1xcLTpdKFthLXpdKS9nO2Z1bmN0aW9uIHBhKGEpe3JldHVybiBhWzFdLnRvVXBwZXJDYXNlKCl9XG5cImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0XCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKG9hLFxucGEpO0RbYl09bmV3IEIoYiwxLCExLGEsbnVsbCwhMSwhMSl9KTtcInhsaW5rOmFjdHVhdGUgeGxpbms6YXJjcm9sZSB4bGluazpyb2xlIHhsaW5rOnNob3cgeGxpbms6dGl0bGUgeGxpbms6dHlwZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShvYSxwYSk7RFtiXT1uZXcgQihiLDEsITEsYSxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiwhMSwhMSl9KTtbXCJ4bWw6YmFzZVwiLFwieG1sOmxhbmdcIixcInhtbDpzcGFjZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShvYSxwYSk7RFtiXT1uZXcgQihiLDEsITEsYSxcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLCExLCExKX0pO1tcInRhYkluZGV4XCIsXCJjcm9zc09yaWdpblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwxLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1xuRC54bGlua0hyZWY9bmV3IEIoXCJ4bGlua0hyZWZcIiwxLCExLFwieGxpbms6aHJlZlwiLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLCEwLCExKTtbXCJzcmNcIixcImhyZWZcIixcImFjdGlvblwiLFwiZm9ybUFjdGlvblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwxLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCEwLCEwKX0pO1xuZnVuY3Rpb24gcWEoYSxiLGMsZCl7dmFyIGU9RC5oYXNPd25Qcm9wZXJ0eShiKT9EW2JdOm51bGw7dmFyIGY9bnVsbCE9PWU/MD09PWUudHlwZTpkPyExOiEoMjxiLmxlbmd0aCl8fFwib1wiIT09YlswXSYmXCJPXCIhPT1iWzBdfHxcIm5cIiE9PWJbMV0mJlwiTlwiIT09YlsxXT8hMTohMDtmfHwobmEoYixjLGUsZCkmJihjPW51bGwpLGR8fG51bGw9PT1lP2xhKGIpJiYobnVsbD09PWM/YS5yZW1vdmVBdHRyaWJ1dGUoYik6YS5zZXRBdHRyaWJ1dGUoYixcIlwiK2MpKTplLm11c3RVc2VQcm9wZXJ0eT9hW2UucHJvcGVydHlOYW1lXT1udWxsPT09Yz8zPT09ZS50eXBlPyExOlwiXCI6YzooYj1lLmF0dHJpYnV0ZU5hbWUsZD1lLmF0dHJpYnV0ZU5hbWVzcGFjZSxudWxsPT09Yz9hLnJlbW92ZUF0dHJpYnV0ZShiKTooZT1lLnR5cGUsYz0zPT09ZXx8ND09PWUmJiEwPT09Yz9cIlwiOlwiXCIrYyxkP2Euc2V0QXR0cmlidXRlTlMoZCxiLGMpOmEuc2V0QXR0cmlidXRlKGIsYykpKSl9XG52YXIgcmE9YWEuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsc2E9NjAxMDMsdGE9NjAxMDYsdWE9NjAxMDcsd2E9NjAxMDgseGE9NjAxMTQseWE9NjAxMDksemE9NjAxMTAsQWE9NjAxMTIsQmE9NjAxMTMsQ2E9NjAxMjAsRGE9NjAxMTUsRWE9NjAxMTYsRmE9NjAxMjEsR2E9NjAxMjgsSGE9NjAxMjksSWE9NjAxMzAsSmE9NjAxMzE7XG5pZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgRT1TeW1ib2wuZm9yO3NhPUUoXCJyZWFjdC5lbGVtZW50XCIpO3RhPUUoXCJyZWFjdC5wb3J0YWxcIik7dWE9RShcInJlYWN0LmZyYWdtZW50XCIpO3dhPUUoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTt4YT1FKFwicmVhY3QucHJvZmlsZXJcIik7eWE9RShcInJlYWN0LnByb3ZpZGVyXCIpO3phPUUoXCJyZWFjdC5jb250ZXh0XCIpO0FhPUUoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTtCYT1FKFwicmVhY3Quc3VzcGVuc2VcIik7Q2E9RShcInJlYWN0LnN1c3BlbnNlX2xpc3RcIik7RGE9RShcInJlYWN0Lm1lbW9cIik7RWE9RShcInJlYWN0LmxhenlcIik7RmE9RShcInJlYWN0LmJsb2NrXCIpO0UoXCJyZWFjdC5zY29wZVwiKTtHYT1FKFwicmVhY3Qub3BhcXVlLmlkXCIpO0hhPUUoXCJyZWFjdC5kZWJ1Z190cmFjZV9tb2RlXCIpO0lhPUUoXCJyZWFjdC5vZmZzY3JlZW5cIik7SmE9RShcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIil9XG52YXIgS2E9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIExhKGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT1LYSYmYVtLYV18fGFbXCJAQGl0ZXJhdG9yXCJdO3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBhP2E6bnVsbH12YXIgTWE7ZnVuY3Rpb24gTmEoYSl7aWYodm9pZCAwPT09TWEpdHJ5e3Rocm93IEVycm9yKCk7fWNhdGNoKGMpe3ZhciBiPWMuc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7TWE9YiYmYlsxXXx8XCJcIn1yZXR1cm5cIlxcblwiK01hK2F9dmFyIE9hPSExO1xuZnVuY3Rpb24gUGEoYSxiKXtpZighYXx8T2EpcmV0dXJuXCJcIjtPYT0hMDt2YXIgYz1FcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT12b2lkIDA7dHJ5e2lmKGIpaWYoYj1mdW5jdGlvbigpe3Rocm93IEVycm9yKCk7fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5wcm90b3R5cGUsXCJwcm9wc1wiLHtzZXQ6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpO319KSxcIm9iamVjdFwiPT09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QoYixbXSl9Y2F0Y2goayl7dmFyIGQ9a31SZWZsZWN0LmNvbnN0cnVjdChhLFtdLGIpfWVsc2V7dHJ5e2IuY2FsbCgpfWNhdGNoKGspe2Q9a31hLmNhbGwoYi5wcm90b3R5cGUpfWVsc2V7dHJ5e3Rocm93IEVycm9yKCk7fWNhdGNoKGspe2Q9a31hKCl9fWNhdGNoKGspe2lmKGsmJmQmJlwic3RyaW5nXCI9PT10eXBlb2Ygay5zdGFjayl7Zm9yKHZhciBlPWsuc3RhY2suc3BsaXQoXCJcXG5cIiksXG5mPWQuc3RhY2suc3BsaXQoXCJcXG5cIiksZz1lLmxlbmd0aC0xLGg9Zi5sZW5ndGgtMTsxPD1nJiYwPD1oJiZlW2ddIT09ZltoXTspaC0tO2Zvcig7MTw9ZyYmMDw9aDtnLS0saC0tKWlmKGVbZ10hPT1mW2hdKXtpZigxIT09Z3x8MSE9PWgpe2RvIGlmKGctLSxoLS0sMD5ofHxlW2ddIT09ZltoXSlyZXR1cm5cIlxcblwiK2VbZ10ucmVwbGFjZShcIiBhdCBuZXcgXCIsXCIgYXQgXCIpO3doaWxlKDE8PWcmJjA8PWgpfWJyZWFrfX19ZmluYWxseXtPYT0hMSxFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1jfXJldHVybihhPWE/YS5kaXNwbGF5TmFtZXx8YS5uYW1lOlwiXCIpP05hKGEpOlwiXCJ9XG5mdW5jdGlvbiBRYShhKXtzd2l0Y2goYS50YWcpe2Nhc2UgNTpyZXR1cm4gTmEoYS50eXBlKTtjYXNlIDE2OnJldHVybiBOYShcIkxhenlcIik7Y2FzZSAxMzpyZXR1cm4gTmEoXCJTdXNwZW5zZVwiKTtjYXNlIDE5OnJldHVybiBOYShcIlN1c3BlbnNlTGlzdFwiKTtjYXNlIDA6Y2FzZSAyOmNhc2UgMTU6cmV0dXJuIGE9UGEoYS50eXBlLCExKSxhO2Nhc2UgMTE6cmV0dXJuIGE9UGEoYS50eXBlLnJlbmRlciwhMSksYTtjYXNlIDIyOnJldHVybiBhPVBhKGEudHlwZS5fcmVuZGVyLCExKSxhO2Nhc2UgMTpyZXR1cm4gYT1QYShhLnR5cGUsITApLGE7ZGVmYXVsdDpyZXR1cm5cIlwifX1cbmZ1bmN0aW9uIFJhKGEpe2lmKG51bGw9PWEpcmV0dXJuIG51bGw7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEpcmV0dXJuIGEuZGlzcGxheU5hbWV8fGEubmFtZXx8bnVsbDtpZihcInN0cmluZ1wiPT09dHlwZW9mIGEpcmV0dXJuIGE7c3dpdGNoKGEpe2Nhc2UgdWE6cmV0dXJuXCJGcmFnbWVudFwiO2Nhc2UgdGE6cmV0dXJuXCJQb3J0YWxcIjtjYXNlIHhhOnJldHVyblwiUHJvZmlsZXJcIjtjYXNlIHdhOnJldHVyblwiU3RyaWN0TW9kZVwiO2Nhc2UgQmE6cmV0dXJuXCJTdXNwZW5zZVwiO2Nhc2UgQ2E6cmV0dXJuXCJTdXNwZW5zZUxpc3RcIn1pZihcIm9iamVjdFwiPT09dHlwZW9mIGEpc3dpdGNoKGEuJCR0eXBlb2Ype2Nhc2UgemE6cmV0dXJuKGEuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Db25zdW1lclwiO2Nhc2UgeWE6cmV0dXJuKGEuX2NvbnRleHQuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Qcm92aWRlclwiO2Nhc2UgQWE6dmFyIGI9YS5yZW5kZXI7Yj1iLmRpc3BsYXlOYW1lfHxiLm5hbWV8fFwiXCI7XG5yZXR1cm4gYS5kaXNwbGF5TmFtZXx8KFwiXCIhPT1iP1wiRm9yd2FyZFJlZihcIitiK1wiKVwiOlwiRm9yd2FyZFJlZlwiKTtjYXNlIERhOnJldHVybiBSYShhLnR5cGUpO2Nhc2UgRmE6cmV0dXJuIFJhKGEuX3JlbmRlcik7Y2FzZSBFYTpiPWEuX3BheWxvYWQ7YT1hLl9pbml0O3RyeXtyZXR1cm4gUmEoYShiKSl9Y2F0Y2goYyl7fX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBTYShhKXtzd2l0Y2godHlwZW9mIGEpe2Nhc2UgXCJib29sZWFuXCI6Y2FzZSBcIm51bWJlclwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwic3RyaW5nXCI6Y2FzZSBcInVuZGVmaW5lZFwiOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuXCJcIn19ZnVuY3Rpb24gVGEoYSl7dmFyIGI9YS50eXBlO3JldHVybihhPWEubm9kZU5hbWUpJiZcImlucHV0XCI9PT1hLnRvTG93ZXJDYXNlKCkmJihcImNoZWNrYm94XCI9PT1ifHxcInJhZGlvXCI9PT1iKX1cbmZ1bmN0aW9uIFVhKGEpe3ZhciBiPVRhKGEpP1wiY2hlY2tlZFwiOlwidmFsdWVcIixjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsYiksZD1cIlwiK2FbYl07aWYoIWEuaGFzT3duUHJvcGVydHkoYikmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgYyYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGMuZ2V0JiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgYy5zZXQpe3ZhciBlPWMuZ2V0LGY9Yy5zZXQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmNhbGwodGhpcyl9LHNldDpmdW5jdGlvbihhKXtkPVwiXCIrYTtmLmNhbGwodGhpcyxhKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtlbnVtZXJhYmxlOmMuZW51bWVyYWJsZX0pO3JldHVybntnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiBkfSxzZXRWYWx1ZTpmdW5jdGlvbihhKXtkPVwiXCIrYX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7YS5fdmFsdWVUcmFja2VyPVxubnVsbDtkZWxldGUgYVtiXX19fX1mdW5jdGlvbiBWYShhKXthLl92YWx1ZVRyYWNrZXJ8fChhLl92YWx1ZVRyYWNrZXI9VWEoYSkpfWZ1bmN0aW9uIFdhKGEpe2lmKCFhKXJldHVybiExO3ZhciBiPWEuX3ZhbHVlVHJhY2tlcjtpZighYilyZXR1cm4hMDt2YXIgYz1iLmdldFZhbHVlKCk7dmFyIGQ9XCJcIjthJiYoZD1UYShhKT9hLmNoZWNrZWQ/XCJ0cnVlXCI6XCJmYWxzZVwiOmEudmFsdWUpO2E9ZDtyZXR1cm4gYSE9PWM/KGIuc2V0VmFsdWUoYSksITApOiExfWZ1bmN0aW9uIFhhKGEpe2E9YXx8KFwidW5kZWZpbmVkXCIhPT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwKTtpZihcInVuZGVmaW5lZFwiPT09dHlwZW9mIGEpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBhLmFjdGl2ZUVsZW1lbnR8fGEuYm9keX1jYXRjaChiKXtyZXR1cm4gYS5ib2R5fX1cbmZ1bmN0aW9uIFlhKGEsYil7dmFyIGM9Yi5jaGVja2VkO3JldHVybiBtKHt9LGIse2RlZmF1bHRDaGVja2VkOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLHZhbHVlOnZvaWQgMCxjaGVja2VkOm51bGwhPWM/YzphLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWR9KX1mdW5jdGlvbiBaYShhLGIpe3ZhciBjPW51bGw9PWIuZGVmYXVsdFZhbHVlP1wiXCI6Yi5kZWZhdWx0VmFsdWUsZD1udWxsIT1iLmNoZWNrZWQ/Yi5jaGVja2VkOmIuZGVmYXVsdENoZWNrZWQ7Yz1TYShudWxsIT1iLnZhbHVlP2IudmFsdWU6Yyk7YS5fd3JhcHBlclN0YXRlPXtpbml0aWFsQ2hlY2tlZDpkLGluaXRpYWxWYWx1ZTpjLGNvbnRyb2xsZWQ6XCJjaGVja2JveFwiPT09Yi50eXBlfHxcInJhZGlvXCI9PT1iLnR5cGU/bnVsbCE9Yi5jaGVja2VkOm51bGwhPWIudmFsdWV9fWZ1bmN0aW9uICRhKGEsYil7Yj1iLmNoZWNrZWQ7bnVsbCE9YiYmcWEoYSxcImNoZWNrZWRcIixiLCExKX1cbmZ1bmN0aW9uIGFiKGEsYil7JGEoYSxiKTt2YXIgYz1TYShiLnZhbHVlKSxkPWIudHlwZTtpZihudWxsIT1jKWlmKFwibnVtYmVyXCI9PT1kKXtpZigwPT09YyYmXCJcIj09PWEudmFsdWV8fGEudmFsdWUhPWMpYS52YWx1ZT1cIlwiK2N9ZWxzZSBhLnZhbHVlIT09XCJcIitjJiYoYS52YWx1ZT1cIlwiK2MpO2Vsc2UgaWYoXCJzdWJtaXRcIj09PWR8fFwicmVzZXRcIj09PWQpe2EucmVtb3ZlQXR0cmlidXRlKFwidmFsdWVcIik7cmV0dXJufWIuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKT9iYihhLGIudHlwZSxjKTpiLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFZhbHVlXCIpJiZiYihhLGIudHlwZSxTYShiLmRlZmF1bHRWYWx1ZSkpO251bGw9PWIuY2hlY2tlZCYmbnVsbCE9Yi5kZWZhdWx0Q2hlY2tlZCYmKGEuZGVmYXVsdENoZWNrZWQ9ISFiLmRlZmF1bHRDaGVja2VkKX1cbmZ1bmN0aW9uIGNiKGEsYixjKXtpZihiLmhhc093blByb3BlcnR5KFwidmFsdWVcIil8fGIuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikpe3ZhciBkPWIudHlwZTtpZighKFwic3VibWl0XCIhPT1kJiZcInJlc2V0XCIhPT1kfHx2b2lkIDAhPT1iLnZhbHVlJiZudWxsIT09Yi52YWx1ZSkpcmV0dXJuO2I9XCJcIithLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlO2N8fGI9PT1hLnZhbHVlfHwoYS52YWx1ZT1iKTthLmRlZmF1bHRWYWx1ZT1ifWM9YS5uYW1lO1wiXCIhPT1jJiYoYS5uYW1lPVwiXCIpO2EuZGVmYXVsdENoZWNrZWQ9ISFhLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQ7XCJcIiE9PWMmJihhLm5hbWU9Yyl9XG5mdW5jdGlvbiBiYihhLGIsYyl7aWYoXCJudW1iZXJcIiE9PWJ8fFhhKGEub3duZXJEb2N1bWVudCkhPT1hKW51bGw9PWM/YS5kZWZhdWx0VmFsdWU9XCJcIithLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlOmEuZGVmYXVsdFZhbHVlIT09XCJcIitjJiYoYS5kZWZhdWx0VmFsdWU9XCJcIitjKX1mdW5jdGlvbiBkYihhKXt2YXIgYj1cIlwiO2FhLkNoaWxkcmVuLmZvckVhY2goYSxmdW5jdGlvbihhKXtudWxsIT1hJiYoYis9YSl9KTtyZXR1cm4gYn1mdW5jdGlvbiBlYihhLGIpe2E9bSh7Y2hpbGRyZW46dm9pZCAwfSxiKTtpZihiPWRiKGIuY2hpbGRyZW4pKWEuY2hpbGRyZW49YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIGZiKGEsYixjLGQpe2E9YS5vcHRpb25zO2lmKGIpe2I9e307Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspYltcIiRcIitjW2VdXT0hMDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWU9Yi5oYXNPd25Qcm9wZXJ0eShcIiRcIithW2NdLnZhbHVlKSxhW2NdLnNlbGVjdGVkIT09ZSYmKGFbY10uc2VsZWN0ZWQ9ZSksZSYmZCYmKGFbY10uZGVmYXVsdFNlbGVjdGVkPSEwKX1lbHNle2M9XCJcIitTYShjKTtiPW51bGw7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7aWYoYVtlXS52YWx1ZT09PWMpe2FbZV0uc2VsZWN0ZWQ9ITA7ZCYmKGFbZV0uZGVmYXVsdFNlbGVjdGVkPSEwKTtyZXR1cm59bnVsbCE9PWJ8fGFbZV0uZGlzYWJsZWR8fChiPWFbZV0pfW51bGwhPT1iJiYoYi5zZWxlY3RlZD0hMCl9fVxuZnVuY3Rpb24gZ2IoYSxiKXtpZihudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKXRocm93IEVycm9yKHkoOTEpKTtyZXR1cm4gbSh7fSxiLHt2YWx1ZTp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCxjaGlsZHJlbjpcIlwiK2EuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWV9KX1mdW5jdGlvbiBoYihhLGIpe3ZhciBjPWIudmFsdWU7aWYobnVsbD09Yyl7Yz1iLmNoaWxkcmVuO2I9Yi5kZWZhdWx0VmFsdWU7aWYobnVsbCE9Yyl7aWYobnVsbCE9Yil0aHJvdyBFcnJvcih5KDkyKSk7aWYoQXJyYXkuaXNBcnJheShjKSl7aWYoISgxPj1jLmxlbmd0aCkpdGhyb3cgRXJyb3IoeSg5MykpO2M9Y1swXX1iPWN9bnVsbD09YiYmKGI9XCJcIik7Yz1ifWEuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOlNhKGMpfX1cbmZ1bmN0aW9uIGliKGEsYil7dmFyIGM9U2EoYi52YWx1ZSksZD1TYShiLmRlZmF1bHRWYWx1ZSk7bnVsbCE9YyYmKGM9XCJcIitjLGMhPT1hLnZhbHVlJiYoYS52YWx1ZT1jKSxudWxsPT1iLmRlZmF1bHRWYWx1ZSYmYS5kZWZhdWx0VmFsdWUhPT1jJiYoYS5kZWZhdWx0VmFsdWU9YykpO251bGwhPWQmJihhLmRlZmF1bHRWYWx1ZT1cIlwiK2QpfWZ1bmN0aW9uIGpiKGEpe3ZhciBiPWEudGV4dENvbnRlbnQ7Yj09PWEuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJlwiXCIhPT1iJiZudWxsIT09YiYmKGEudmFsdWU9Yil9dmFyIGtiPXtodG1sOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLG1hdGhtbDpcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIixzdmc6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifTtcbmZ1bmN0aW9uIGxiKGEpe3N3aXRjaChhKXtjYXNlIFwic3ZnXCI6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO2Nhc2UgXCJtYXRoXCI6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI7ZGVmYXVsdDpyZXR1cm5cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIn19ZnVuY3Rpb24gbWIoYSxiKXtyZXR1cm4gbnVsbD09YXx8XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI9PT1hP2xiKGIpOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj09PWEmJlwiZm9yZWlnbk9iamVjdFwiPT09Yj9cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjphfVxudmFyIG5iLG9iPWZ1bmN0aW9uKGEpe3JldHVyblwidW5kZWZpbmVkXCIhPT10eXBlb2YgTVNBcHAmJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKGIsYyxkLGUpe01TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGEoYixjLGQsZSl9KX06YX0oZnVuY3Rpb24oYSxiKXtpZihhLm5hbWVzcGFjZVVSSSE9PWtiLnN2Z3x8XCJpbm5lckhUTUxcImluIGEpYS5pbm5lckhUTUw9YjtlbHNle25iPW5ifHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO25iLmlubmVySFRNTD1cIjxzdmc+XCIrYi52YWx1ZU9mKCkudG9TdHJpbmcoKStcIjwvc3ZnPlwiO2ZvcihiPW5iLmZpcnN0Q2hpbGQ7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7Zm9yKDtiLmZpcnN0Q2hpbGQ7KWEuYXBwZW5kQ2hpbGQoYi5maXJzdENoaWxkKX19KTtcbmZ1bmN0aW9uIHBiKGEsYil7aWYoYil7dmFyIGM9YS5maXJzdENoaWxkO2lmKGMmJmM9PT1hLmxhc3RDaGlsZCYmMz09PWMubm9kZVR5cGUpe2Mubm9kZVZhbHVlPWI7cmV0dXJufX1hLnRleHRDb250ZW50PWJ9XG52YXIgcWI9e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGJvcmRlckltYWdlT3V0c2V0OiEwLGJvcmRlckltYWdlU2xpY2U6ITAsYm9yZGVySW1hZ2VXaWR0aDohMCxib3hGbGV4OiEwLGJveEZsZXhHcm91cDohMCxib3hPcmRpbmFsR3JvdXA6ITAsY29sdW1uQ291bnQ6ITAsY29sdW1uczohMCxmbGV4OiEwLGZsZXhHcm93OiEwLGZsZXhQb3NpdGl2ZTohMCxmbGV4U2hyaW5rOiEwLGZsZXhOZWdhdGl2ZTohMCxmbGV4T3JkZXI6ITAsZ3JpZEFyZWE6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTcGFuOiEwLGdyaWRSb3dTdGFydDohMCxncmlkQ29sdW1uOiEwLGdyaWRDb2x1bW5FbmQ6ITAsZ3JpZENvbHVtblNwYW46ITAsZ3JpZENvbHVtblN0YXJ0OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUNsYW1wOiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHRhYlNpemU6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwLGZpbGxPcGFjaXR5OiEwLFxuZmxvb2RPcGFjaXR5OiEwLHN0b3BPcGFjaXR5OiEwLHN0cm9rZURhc2hhcnJheTohMCxzdHJva2VEYXNob2Zmc2V0OiEwLHN0cm9rZU1pdGVybGltaXQ6ITAsc3Ryb2tlT3BhY2l0eTohMCxzdHJva2VXaWR0aDohMH0scmI9W1wiV2Via2l0XCIsXCJtc1wiLFwiTW96XCIsXCJPXCJdO09iamVjdC5rZXlzKHFiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JiLmZvckVhY2goZnVuY3Rpb24oYil7Yj1iK2EuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zdWJzdHJpbmcoMSk7cWJbYl09cWJbYV19KX0pO2Z1bmN0aW9uIHNiKGEsYixjKXtyZXR1cm4gbnVsbD09Ynx8XCJib29sZWFuXCI9PT10eXBlb2YgYnx8XCJcIj09PWI/XCJcIjpjfHxcIm51bWJlclwiIT09dHlwZW9mIGJ8fDA9PT1ifHxxYi5oYXNPd25Qcm9wZXJ0eShhKSYmcWJbYV0/KFwiXCIrYikudHJpbSgpOmIrXCJweFwifVxuZnVuY3Rpb24gdGIoYSxiKXthPWEuc3R5bGU7Zm9yKHZhciBjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7dmFyIGQ9MD09PWMuaW5kZXhPZihcIi0tXCIpLGU9c2IoYyxiW2NdLGQpO1wiZmxvYXRcIj09PWMmJihjPVwiY3NzRmxvYXRcIik7ZD9hLnNldFByb3BlcnR5KGMsZSk6YVtjXT1lfX12YXIgdWI9bSh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtcbmZ1bmN0aW9uIHZiKGEsYil7aWYoYil7aWYodWJbYV0mJihudWxsIT1iLmNoaWxkcmVufHxudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSl0aHJvdyBFcnJvcih5KDEzNyxhKSk7aWYobnVsbCE9Yi5kYW5nZXJvdXNseVNldElubmVySFRNTCl7aWYobnVsbCE9Yi5jaGlsZHJlbil0aHJvdyBFcnJvcih5KDYwKSk7aWYoIShcIm9iamVjdFwiPT09dHlwZW9mIGIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJlwiX19odG1sXCJpbiBiLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSl0aHJvdyBFcnJvcih5KDYxKSk7fWlmKG51bGwhPWIuc3R5bGUmJlwib2JqZWN0XCIhPT10eXBlb2YgYi5zdHlsZSl0aHJvdyBFcnJvcih5KDYyKSk7fX1cbmZ1bmN0aW9uIHdiKGEsYil7aWYoLTE9PT1hLmluZGV4T2YoXCItXCIpKXJldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYi5pcztzd2l0Y2goYSl7Y2FzZSBcImFubm90YXRpb24teG1sXCI6Y2FzZSBcImNvbG9yLXByb2ZpbGVcIjpjYXNlIFwiZm9udC1mYWNlXCI6Y2FzZSBcImZvbnQtZmFjZS1zcmNcIjpjYXNlIFwiZm9udC1mYWNlLXVyaVwiOmNhc2UgXCJmb250LWZhY2UtZm9ybWF0XCI6Y2FzZSBcImZvbnQtZmFjZS1uYW1lXCI6Y2FzZSBcIm1pc3NpbmctZ2x5cGhcIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1mdW5jdGlvbiB4YihhKXthPWEudGFyZ2V0fHxhLnNyY0VsZW1lbnR8fHdpbmRvdzthLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoYT1hLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KTtyZXR1cm4gMz09PWEubm9kZVR5cGU/YS5wYXJlbnROb2RlOmF9dmFyIHliPW51bGwsemI9bnVsbCxBYj1udWxsO1xuZnVuY3Rpb24gQmIoYSl7aWYoYT1DYihhKSl7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIHliKXRocm93IEVycm9yKHkoMjgwKSk7dmFyIGI9YS5zdGF0ZU5vZGU7YiYmKGI9RGIoYikseWIoYS5zdGF0ZU5vZGUsYS50eXBlLGIpKX19ZnVuY3Rpb24gRWIoYSl7emI/QWI/QWIucHVzaChhKTpBYj1bYV06emI9YX1mdW5jdGlvbiBGYigpe2lmKHpiKXt2YXIgYT16YixiPUFiO0FiPXpiPW51bGw7QmIoYSk7aWYoYilmb3IoYT0wO2E8Yi5sZW5ndGg7YSsrKUJiKGJbYV0pfX1mdW5jdGlvbiBHYihhLGIpe3JldHVybiBhKGIpfWZ1bmN0aW9uIEhiKGEsYixjLGQsZSl7cmV0dXJuIGEoYixjLGQsZSl9ZnVuY3Rpb24gSWIoKXt9dmFyIEpiPUdiLEtiPSExLExiPSExO2Z1bmN0aW9uIE1iKCl7aWYobnVsbCE9PXpifHxudWxsIT09QWIpSWIoKSxGYigpfVxuZnVuY3Rpb24gTmIoYSxiLGMpe2lmKExiKXJldHVybiBhKGIsYyk7TGI9ITA7dHJ5e3JldHVybiBKYihhLGIsYyl9ZmluYWxseXtMYj0hMSxNYigpfX1cbmZ1bmN0aW9uIE9iKGEsYil7dmFyIGM9YS5zdGF0ZU5vZGU7aWYobnVsbD09PWMpcmV0dXJuIG51bGw7dmFyIGQ9RGIoYyk7aWYobnVsbD09PWQpcmV0dXJuIG51bGw7Yz1kW2JdO2E6c3dpdGNoKGIpe2Nhc2UgXCJvbkNsaWNrXCI6Y2FzZSBcIm9uQ2xpY2tDYXB0dXJlXCI6Y2FzZSBcIm9uRG91YmxlQ2xpY2tcIjpjYXNlIFwib25Eb3VibGVDbGlja0NhcHR1cmVcIjpjYXNlIFwib25Nb3VzZURvd25cIjpjYXNlIFwib25Nb3VzZURvd25DYXB0dXJlXCI6Y2FzZSBcIm9uTW91c2VNb3ZlXCI6Y2FzZSBcIm9uTW91c2VNb3ZlQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlVXBcIjpjYXNlIFwib25Nb3VzZVVwQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlRW50ZXJcIjooZD0hZC5kaXNhYmxlZCl8fChhPWEudHlwZSxkPSEoXCJidXR0b25cIj09PWF8fFwiaW5wdXRcIj09PWF8fFwic2VsZWN0XCI9PT1hfHxcInRleHRhcmVhXCI9PT1hKSk7YT0hZDticmVhayBhO2RlZmF1bHQ6YT0hMX1pZihhKXJldHVybiBudWxsO2lmKGMmJlwiZnVuY3Rpb25cIiE9PVxudHlwZW9mIGMpdGhyb3cgRXJyb3IoeSgyMzEsYix0eXBlb2YgYykpO3JldHVybiBjfXZhciBQYj0hMTtpZihmYSl0cnl7dmFyIFFiPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShRYixcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7UGI9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsUWIsUWIpO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLFFiLFFiKX1jYXRjaChhKXtQYj0hMX1mdW5jdGlvbiBSYihhLGIsYyxkLGUsZixnLGgsayl7dmFyIGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDMpO3RyeXtiLmFwcGx5KGMsbCl9Y2F0Y2gobil7dGhpcy5vbkVycm9yKG4pfX12YXIgU2I9ITEsVGI9bnVsbCxVYj0hMSxWYj1udWxsLFdiPXtvbkVycm9yOmZ1bmN0aW9uKGEpe1NiPSEwO1RiPWF9fTtmdW5jdGlvbiBYYihhLGIsYyxkLGUsZixnLGgsayl7U2I9ITE7VGI9bnVsbDtSYi5hcHBseShXYixhcmd1bWVudHMpfVxuZnVuY3Rpb24gWWIoYSxiLGMsZCxlLGYsZyxoLGspe1hiLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihTYil7aWYoU2Ipe3ZhciBsPVRiO1NiPSExO1RiPW51bGx9ZWxzZSB0aHJvdyBFcnJvcih5KDE5OCkpO1VifHwoVWI9ITAsVmI9bCl9fWZ1bmN0aW9uIFpiKGEpe3ZhciBiPWEsYz1hO2lmKGEuYWx0ZXJuYXRlKWZvcig7Yi5yZXR1cm47KWI9Yi5yZXR1cm47ZWxzZXthPWI7ZG8gYj1hLDAhPT0oYi5mbGFncyYxMDI2KSYmKGM9Yi5yZXR1cm4pLGE9Yi5yZXR1cm47d2hpbGUoYSl9cmV0dXJuIDM9PT1iLnRhZz9jOm51bGx9ZnVuY3Rpb24gJGIoYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9YS5tZW1vaXplZFN0YXRlO251bGw9PT1iJiYoYT1hLmFsdGVybmF0ZSxudWxsIT09YSYmKGI9YS5tZW1vaXplZFN0YXRlKSk7aWYobnVsbCE9PWIpcmV0dXJuIGIuZGVoeWRyYXRlZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBhYyhhKXtpZihaYihhKSE9PWEpdGhyb3cgRXJyb3IoeSgxODgpKTt9XG5mdW5jdGlvbiBiYyhhKXt2YXIgYj1hLmFsdGVybmF0ZTtpZighYil7Yj1aYihhKTtpZihudWxsPT09Yil0aHJvdyBFcnJvcih5KDE4OCkpO3JldHVybiBiIT09YT9udWxsOmF9Zm9yKHZhciBjPWEsZD1iOzspe3ZhciBlPWMucmV0dXJuO2lmKG51bGw9PT1lKWJyZWFrO3ZhciBmPWUuYWx0ZXJuYXRlO2lmKG51bGw9PT1mKXtkPWUucmV0dXJuO2lmKG51bGwhPT1kKXtjPWQ7Y29udGludWV9YnJlYWt9aWYoZS5jaGlsZD09PWYuY2hpbGQpe2ZvcihmPWUuY2hpbGQ7Zjspe2lmKGY9PT1jKXJldHVybiBhYyhlKSxhO2lmKGY9PT1kKXJldHVybiBhYyhlKSxiO2Y9Zi5zaWJsaW5nfXRocm93IEVycm9yKHkoMTg4KSk7fWlmKGMucmV0dXJuIT09ZC5yZXR1cm4pYz1lLGQ9ZjtlbHNle2Zvcih2YXIgZz0hMSxoPWUuY2hpbGQ7aDspe2lmKGg9PT1jKXtnPSEwO2M9ZTtkPWY7YnJlYWt9aWYoaD09PWQpe2c9ITA7ZD1lO2M9ZjticmVha31oPWguc2libGluZ31pZighZyl7Zm9yKGg9Zi5jaGlsZDtoOyl7aWYoaD09PVxuYyl7Zz0hMDtjPWY7ZD1lO2JyZWFrfWlmKGg9PT1kKXtnPSEwO2Q9ZjtjPWU7YnJlYWt9aD1oLnNpYmxpbmd9aWYoIWcpdGhyb3cgRXJyb3IoeSgxODkpKTt9fWlmKGMuYWx0ZXJuYXRlIT09ZCl0aHJvdyBFcnJvcih5KDE5MCkpO31pZigzIT09Yy50YWcpdGhyb3cgRXJyb3IoeSgxODgpKTtyZXR1cm4gYy5zdGF0ZU5vZGUuY3VycmVudD09PWM/YTpifWZ1bmN0aW9uIGNjKGEpe2E9YmMoYSk7aWYoIWEpcmV0dXJuIG51bGw7Zm9yKHZhciBiPWE7Oyl7aWYoNT09PWIudGFnfHw2PT09Yi50YWcpcmV0dXJuIGI7aWYoYi5jaGlsZCliLmNoaWxkLnJldHVybj1iLGI9Yi5jaGlsZDtlbHNle2lmKGI9PT1hKWJyZWFrO2Zvcig7IWIuc2libGluZzspe2lmKCFiLnJldHVybnx8Yi5yZXR1cm49PT1hKXJldHVybiBudWxsO2I9Yi5yZXR1cm59Yi5zaWJsaW5nLnJldHVybj1iLnJldHVybjtiPWIuc2libGluZ319cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBkYyhhLGIpe2Zvcih2YXIgYz1hLmFsdGVybmF0ZTtudWxsIT09Yjspe2lmKGI9PT1hfHxiPT09YylyZXR1cm4hMDtiPWIucmV0dXJufXJldHVybiExfXZhciBlYyxmYyxnYyxoYyxpYz0hMSxqYz1bXSxrYz1udWxsLGxjPW51bGwsbWM9bnVsbCxuYz1uZXcgTWFwLG9jPW5ldyBNYXAscGM9W10scWM9XCJtb3VzZWRvd24gbW91c2V1cCB0b3VjaGNhbmNlbCB0b3VjaGVuZCB0b3VjaHN0YXJ0IGF1eGNsaWNrIGRibGNsaWNrIHBvaW50ZXJjYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlcnVwIGRyYWdlbmQgZHJhZ3N0YXJ0IGRyb3AgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IHRleHRJbnB1dCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXQgc3VibWl0XCIuc3BsaXQoXCIgXCIpO1xuZnVuY3Rpb24gcmMoYSxiLGMsZCxlKXtyZXR1cm57YmxvY2tlZE9uOmEsZG9tRXZlbnROYW1lOmIsZXZlbnRTeXN0ZW1GbGFnczpjfDE2LG5hdGl2ZUV2ZW50OmUsdGFyZ2V0Q29udGFpbmVyczpbZF19fWZ1bmN0aW9uIHNjKGEsYil7c3dpdGNoKGEpe2Nhc2UgXCJmb2N1c2luXCI6Y2FzZSBcImZvY3Vzb3V0XCI6a2M9bnVsbDticmVhaztjYXNlIFwiZHJhZ2VudGVyXCI6Y2FzZSBcImRyYWdsZWF2ZVwiOmxjPW51bGw7YnJlYWs7Y2FzZSBcIm1vdXNlb3ZlclwiOmNhc2UgXCJtb3VzZW91dFwiOm1jPW51bGw7YnJlYWs7Y2FzZSBcInBvaW50ZXJvdmVyXCI6Y2FzZSBcInBvaW50ZXJvdXRcIjpuYy5kZWxldGUoYi5wb2ludGVySWQpO2JyZWFrO2Nhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpvYy5kZWxldGUoYi5wb2ludGVySWQpfX1cbmZ1bmN0aW9uIHRjKGEsYixjLGQsZSxmKXtpZihudWxsPT09YXx8YS5uYXRpdmVFdmVudCE9PWYpcmV0dXJuIGE9cmMoYixjLGQsZSxmKSxudWxsIT09YiYmKGI9Q2IoYiksbnVsbCE9PWImJmZjKGIpKSxhO2EuZXZlbnRTeXN0ZW1GbGFnc3w9ZDtiPWEudGFyZ2V0Q29udGFpbmVycztudWxsIT09ZSYmLTE9PT1iLmluZGV4T2YoZSkmJmIucHVzaChlKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIHVjKGEsYixjLGQsZSl7c3dpdGNoKGIpe2Nhc2UgXCJmb2N1c2luXCI6cmV0dXJuIGtjPXRjKGtjLGEsYixjLGQsZSksITA7Y2FzZSBcImRyYWdlbnRlclwiOnJldHVybiBsYz10YyhsYyxhLGIsYyxkLGUpLCEwO2Nhc2UgXCJtb3VzZW92ZXJcIjpyZXR1cm4gbWM9dGMobWMsYSxiLGMsZCxlKSwhMDtjYXNlIFwicG9pbnRlcm92ZXJcIjp2YXIgZj1lLnBvaW50ZXJJZDtuYy5zZXQoZix0YyhuYy5nZXQoZil8fG51bGwsYSxiLGMsZCxlKSk7cmV0dXJuITA7Y2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6cmV0dXJuIGY9ZS5wb2ludGVySWQsb2Muc2V0KGYsdGMob2MuZ2V0KGYpfHxudWxsLGEsYixjLGQsZSkpLCEwfXJldHVybiExfVxuZnVuY3Rpb24gdmMoYSl7dmFyIGI9d2MoYS50YXJnZXQpO2lmKG51bGwhPT1iKXt2YXIgYz1aYihiKTtpZihudWxsIT09YylpZihiPWMudGFnLDEzPT09Yil7aWYoYj0kYihjKSxudWxsIT09Yil7YS5ibG9ja2VkT249YjtoYyhhLmxhbmVQcmlvcml0eSxmdW5jdGlvbigpe3IudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KGEucHJpb3JpdHksZnVuY3Rpb24oKXtnYyhjKX0pfSk7cmV0dXJufX1lbHNlIGlmKDM9PT1iJiZjLnN0YXRlTm9kZS5oeWRyYXRlKXthLmJsb2NrZWRPbj0zPT09Yy50YWc/Yy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3JldHVybn19YS5ibG9ja2VkT249bnVsbH1cbmZ1bmN0aW9uIHhjKGEpe2lmKG51bGwhPT1hLmJsb2NrZWRPbilyZXR1cm4hMTtmb3IodmFyIGI9YS50YXJnZXRDb250YWluZXJzOzA8Yi5sZW5ndGg7KXt2YXIgYz15YyhhLmRvbUV2ZW50TmFtZSxhLmV2ZW50U3lzdGVtRmxhZ3MsYlswXSxhLm5hdGl2ZUV2ZW50KTtpZihudWxsIT09YylyZXR1cm4gYj1DYihjKSxudWxsIT09YiYmZmMoYiksYS5ibG9ja2VkT249YywhMTtiLnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gemMoYSxiLGMpe3hjKGEpJiZjLmRlbGV0ZShiKX1cbmZ1bmN0aW9uIEFjKCl7Zm9yKGljPSExOzA8amMubGVuZ3RoOyl7dmFyIGE9amNbMF07aWYobnVsbCE9PWEuYmxvY2tlZE9uKXthPUNiKGEuYmxvY2tlZE9uKTtudWxsIT09YSYmZWMoYSk7YnJlYWt9Zm9yKHZhciBiPWEudGFyZ2V0Q29udGFpbmVyczswPGIubGVuZ3RoOyl7dmFyIGM9eWMoYS5kb21FdmVudE5hbWUsYS5ldmVudFN5c3RlbUZsYWdzLGJbMF0sYS5uYXRpdmVFdmVudCk7aWYobnVsbCE9PWMpe2EuYmxvY2tlZE9uPWM7YnJlYWt9Yi5zaGlmdCgpfW51bGw9PT1hLmJsb2NrZWRPbiYmamMuc2hpZnQoKX1udWxsIT09a2MmJnhjKGtjKSYmKGtjPW51bGwpO251bGwhPT1sYyYmeGMobGMpJiYobGM9bnVsbCk7bnVsbCE9PW1jJiZ4YyhtYykmJihtYz1udWxsKTtuYy5mb3JFYWNoKHpjKTtvYy5mb3JFYWNoKHpjKX1cbmZ1bmN0aW9uIEJjKGEsYil7YS5ibG9ja2VkT249PT1iJiYoYS5ibG9ja2VkT249bnVsbCxpY3x8KGljPSEwLHIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LEFjKSkpfVxuZnVuY3Rpb24gQ2MoYSl7ZnVuY3Rpb24gYihiKXtyZXR1cm4gQmMoYixhKX1pZigwPGpjLmxlbmd0aCl7QmMoamNbMF0sYSk7Zm9yKHZhciBjPTE7YzxqYy5sZW5ndGg7YysrKXt2YXIgZD1qY1tjXTtkLmJsb2NrZWRPbj09PWEmJihkLmJsb2NrZWRPbj1udWxsKX19bnVsbCE9PWtjJiZCYyhrYyxhKTtudWxsIT09bGMmJkJjKGxjLGEpO251bGwhPT1tYyYmQmMobWMsYSk7bmMuZm9yRWFjaChiKTtvYy5mb3JFYWNoKGIpO2ZvcihjPTA7YzxwYy5sZW5ndGg7YysrKWQ9cGNbY10sZC5ibG9ja2VkT249PT1hJiYoZC5ibG9ja2VkT249bnVsbCk7Zm9yKDswPHBjLmxlbmd0aCYmKGM9cGNbMF0sbnVsbD09PWMuYmxvY2tlZE9uKTspdmMoYyksbnVsbD09PWMuYmxvY2tlZE9uJiZwYy5zaGlmdCgpfVxuZnVuY3Rpb24gRGMoYSxiKXt2YXIgYz17fTtjW2EudG9Mb3dlckNhc2UoKV09Yi50b0xvd2VyQ2FzZSgpO2NbXCJXZWJraXRcIithXT1cIndlYmtpdFwiK2I7Y1tcIk1velwiK2FdPVwibW96XCIrYjtyZXR1cm4gY312YXIgRWM9e2FuaW1hdGlvbmVuZDpEYyhcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uRW5kXCIpLGFuaW1hdGlvbml0ZXJhdGlvbjpEYyhcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uSXRlcmF0aW9uXCIpLGFuaW1hdGlvbnN0YXJ0OkRjKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25TdGFydFwiKSx0cmFuc2l0aW9uZW5kOkRjKFwiVHJhbnNpdGlvblwiLFwiVHJhbnNpdGlvbkVuZFwiKX0sRmM9e30sR2M9e307XG5mYSYmKEdjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGUsXCJBbmltYXRpb25FdmVudFwiaW4gd2luZG93fHwoZGVsZXRlIEVjLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIEVjLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIEVjLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksXCJUcmFuc2l0aW9uRXZlbnRcImluIHdpbmRvd3x8ZGVsZXRlIEVjLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7ZnVuY3Rpb24gSGMoYSl7aWYoRmNbYV0pcmV0dXJuIEZjW2FdO2lmKCFFY1thXSlyZXR1cm4gYTt2YXIgYj1FY1thXSxjO2ZvcihjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSYmYyBpbiBHYylyZXR1cm4gRmNbYV09YltjXTtyZXR1cm4gYX1cbnZhciBJYz1IYyhcImFuaW1hdGlvbmVuZFwiKSxKYz1IYyhcImFuaW1hdGlvbml0ZXJhdGlvblwiKSxLYz1IYyhcImFuaW1hdGlvbnN0YXJ0XCIpLExjPUhjKFwidHJhbnNpdGlvbmVuZFwiKSxNYz1uZXcgTWFwLE5jPW5ldyBNYXAsT2M9W1wiYWJvcnRcIixcImFib3J0XCIsSWMsXCJhbmltYXRpb25FbmRcIixKYyxcImFuaW1hdGlvbkl0ZXJhdGlvblwiLEtjLFwiYW5pbWF0aW9uU3RhcnRcIixcImNhbnBsYXlcIixcImNhblBsYXlcIixcImNhbnBsYXl0aHJvdWdoXCIsXCJjYW5QbGF5VGhyb3VnaFwiLFwiZHVyYXRpb25jaGFuZ2VcIixcImR1cmF0aW9uQ2hhbmdlXCIsXCJlbXB0aWVkXCIsXCJlbXB0aWVkXCIsXCJlbmNyeXB0ZWRcIixcImVuY3J5cHRlZFwiLFwiZW5kZWRcIixcImVuZGVkXCIsXCJlcnJvclwiLFwiZXJyb3JcIixcImdvdHBvaW50ZXJjYXB0dXJlXCIsXCJnb3RQb2ludGVyQ2FwdHVyZVwiLFwibG9hZFwiLFwibG9hZFwiLFwibG9hZGVkZGF0YVwiLFwibG9hZGVkRGF0YVwiLFwibG9hZGVkbWV0YWRhdGFcIixcImxvYWRlZE1ldGFkYXRhXCIsXCJsb2Fkc3RhcnRcIixcImxvYWRTdGFydFwiLFxuXCJsb3N0cG9pbnRlcmNhcHR1cmVcIixcImxvc3RQb2ludGVyQ2FwdHVyZVwiLFwicGxheWluZ1wiLFwicGxheWluZ1wiLFwicHJvZ3Jlc3NcIixcInByb2dyZXNzXCIsXCJzZWVraW5nXCIsXCJzZWVraW5nXCIsXCJzdGFsbGVkXCIsXCJzdGFsbGVkXCIsXCJzdXNwZW5kXCIsXCJzdXNwZW5kXCIsXCJ0aW1ldXBkYXRlXCIsXCJ0aW1lVXBkYXRlXCIsTGMsXCJ0cmFuc2l0aW9uRW5kXCIsXCJ3YWl0aW5nXCIsXCJ3YWl0aW5nXCJdO2Z1bmN0aW9uIFBjKGEsYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0yKXt2YXIgZD1hW2NdLGU9YVtjKzFdO2U9XCJvblwiKyhlWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSk7TmMuc2V0KGQsYik7TWMuc2V0KGQsZSk7ZGEoZSxbZF0pfX12YXIgUWM9ci51bnN0YWJsZV9ub3c7UWMoKTt2YXIgRj04O1xuZnVuY3Rpb24gUmMoYSl7aWYoMCE9PSgxJmEpKXJldHVybiBGPTE1LDE7aWYoMCE9PSgyJmEpKXJldHVybiBGPTE0LDI7aWYoMCE9PSg0JmEpKXJldHVybiBGPTEzLDQ7dmFyIGI9MjQmYTtpZigwIT09YilyZXR1cm4gRj0xMixiO2lmKDAhPT0oYSYzMikpcmV0dXJuIEY9MTEsMzI7Yj0xOTImYTtpZigwIT09YilyZXR1cm4gRj0xMCxiO2lmKDAhPT0oYSYyNTYpKXJldHVybiBGPTksMjU2O2I9MzU4NCZhO2lmKDAhPT1iKXJldHVybiBGPTgsYjtpZigwIT09KGEmNDA5NikpcmV0dXJuIEY9Nyw0MDk2O2I9NDE4NjExMiZhO2lmKDAhPT1iKXJldHVybiBGPTYsYjtiPTYyOTE0NTYwJmE7aWYoMCE9PWIpcmV0dXJuIEY9NSxiO2lmKGEmNjcxMDg4NjQpcmV0dXJuIEY9NCw2NzEwODg2NDtpZigwIT09KGEmMTM0MjE3NzI4KSlyZXR1cm4gRj0zLDEzNDIxNzcyODtiPTgwNTMwNjM2OCZhO2lmKDAhPT1iKXJldHVybiBGPTIsYjtpZigwIT09KDEwNzM3NDE4MjQmYSkpcmV0dXJuIEY9MSwxMDczNzQxODI0O1xuRj04O3JldHVybiBhfWZ1bmN0aW9uIFNjKGEpe3N3aXRjaChhKXtjYXNlIDk5OnJldHVybiAxNTtjYXNlIDk4OnJldHVybiAxMDtjYXNlIDk3OmNhc2UgOTY6cmV0dXJuIDg7Y2FzZSA5NTpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBUYyhhKXtzd2l0Y2goYSl7Y2FzZSAxNTpjYXNlIDE0OnJldHVybiA5OTtjYXNlIDEzOmNhc2UgMTI6Y2FzZSAxMTpjYXNlIDEwOnJldHVybiA5ODtjYXNlIDk6Y2FzZSA4OmNhc2UgNzpjYXNlIDY6Y2FzZSA0OmNhc2UgNTpyZXR1cm4gOTc7Y2FzZSAzOmNhc2UgMjpjYXNlIDE6cmV0dXJuIDk1O2Nhc2UgMDpyZXR1cm4gOTA7ZGVmYXVsdDp0aHJvdyBFcnJvcih5KDM1OCxhKSk7fX1cbmZ1bmN0aW9uIFVjKGEsYil7dmFyIGM9YS5wZW5kaW5nTGFuZXM7aWYoMD09PWMpcmV0dXJuIEY9MDt2YXIgZD0wLGU9MCxmPWEuZXhwaXJlZExhbmVzLGc9YS5zdXNwZW5kZWRMYW5lcyxoPWEucGluZ2VkTGFuZXM7aWYoMCE9PWYpZD1mLGU9Rj0xNTtlbHNlIGlmKGY9YyYxMzQyMTc3MjcsMCE9PWYpe3ZhciBrPWYmfmc7MCE9PWs/KGQ9UmMoayksZT1GKTooaCY9ZiwwIT09aCYmKGQ9UmMoaCksZT1GKSl9ZWxzZSBmPWMmfmcsMCE9PWY/KGQ9UmMoZiksZT1GKTowIT09aCYmKGQ9UmMoaCksZT1GKTtpZigwPT09ZClyZXR1cm4gMDtkPTMxLVZjKGQpO2Q9YyYoKDA+ZD8wOjE8PGQpPDwxKS0xO2lmKDAhPT1iJiZiIT09ZCYmMD09PShiJmcpKXtSYyhiKTtpZihlPD1GKXJldHVybiBiO0Y9ZX1iPWEuZW50YW5nbGVkTGFuZXM7aWYoMCE9PWIpZm9yKGE9YS5lbnRhbmdsZW1lbnRzLGImPWQ7MDxiOyljPTMxLVZjKGIpLGU9MTw8YyxkfD1hW2NdLGImPX5lO3JldHVybiBkfVxuZnVuY3Rpb24gV2MoYSl7YT1hLnBlbmRpbmdMYW5lcyYtMTA3Mzc0MTgyNTtyZXR1cm4gMCE9PWE/YTphJjEwNzM3NDE4MjQ/MTA3Mzc0MTgyNDowfWZ1bmN0aW9uIFhjKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTU6cmV0dXJuIDE7Y2FzZSAxNDpyZXR1cm4gMjtjYXNlIDEyOnJldHVybiBhPVljKDI0Jn5iKSwwPT09YT9YYygxMCxiKTphO2Nhc2UgMTA6cmV0dXJuIGE9WWMoMTkyJn5iKSwwPT09YT9YYyg4LGIpOmE7Y2FzZSA4OnJldHVybiBhPVljKDM1ODQmfmIpLDA9PT1hJiYoYT1ZYyg0MTg2MTEyJn5iKSwwPT09YSYmKGE9NTEyKSksYTtjYXNlIDI6cmV0dXJuIGI9WWMoODA1MzA2MzY4Jn5iKSwwPT09YiYmKGI9MjY4NDM1NDU2KSxifXRocm93IEVycm9yKHkoMzU4LGEpKTt9ZnVuY3Rpb24gWWMoYSl7cmV0dXJuIGEmLWF9ZnVuY3Rpb24gWmMoYSl7Zm9yKHZhciBiPVtdLGM9MDszMT5jO2MrKyliLnB1c2goYSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiAkYyhhLGIsYyl7YS5wZW5kaW5nTGFuZXN8PWI7dmFyIGQ9Yi0xO2Euc3VzcGVuZGVkTGFuZXMmPWQ7YS5waW5nZWRMYW5lcyY9ZDthPWEuZXZlbnRUaW1lcztiPTMxLVZjKGIpO2FbYl09Y312YXIgVmM9TWF0aC5jbHozMj9NYXRoLmNsejMyOmFkLGJkPU1hdGgubG9nLGNkPU1hdGguTE4yO2Z1bmN0aW9uIGFkKGEpe3JldHVybiAwPT09YT8zMjozMS0oYmQoYSkvY2R8MCl8MH12YXIgZGQ9ci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxlZD1yLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSxmZD0hMDtmdW5jdGlvbiBnZChhLGIsYyxkKXtLYnx8SWIoKTt2YXIgZT1oZCxmPUtiO0tiPSEwO3RyeXtIYihlLGEsYixjLGQpfWZpbmFsbHl7KEtiPWYpfHxNYigpfX1mdW5jdGlvbiBpZChhLGIsYyxkKXtlZChkZCxoZC5iaW5kKG51bGwsYSxiLGMsZCkpfVxuZnVuY3Rpb24gaGQoYSxiLGMsZCl7aWYoZmQpe3ZhciBlO2lmKChlPTA9PT0oYiY0KSkmJjA8amMubGVuZ3RoJiYtMTxxYy5pbmRleE9mKGEpKWE9cmMobnVsbCxhLGIsYyxkKSxqYy5wdXNoKGEpO2Vsc2V7dmFyIGY9eWMoYSxiLGMsZCk7aWYobnVsbD09PWYpZSYmc2MoYSxkKTtlbHNle2lmKGUpe2lmKC0xPHFjLmluZGV4T2YoYSkpe2E9cmMoZixhLGIsYyxkKTtqYy5wdXNoKGEpO3JldHVybn1pZih1YyhmLGEsYixjLGQpKXJldHVybjtzYyhhLGQpfWpkKGEsYixkLG51bGwsYyl9fX19XG5mdW5jdGlvbiB5YyhhLGIsYyxkKXt2YXIgZT14YihkKTtlPXdjKGUpO2lmKG51bGwhPT1lKXt2YXIgZj1aYihlKTtpZihudWxsPT09ZillPW51bGw7ZWxzZXt2YXIgZz1mLnRhZztpZigxMz09PWcpe2U9JGIoZik7aWYobnVsbCE9PWUpcmV0dXJuIGU7ZT1udWxsfWVsc2UgaWYoMz09PWcpe2lmKGYuc3RhdGVOb2RlLmh5ZHJhdGUpcmV0dXJuIDM9PT1mLnRhZz9mLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7ZT1udWxsfWVsc2UgZiE9PWUmJihlPW51bGwpfX1qZChhLGIsZCxlLGMpO3JldHVybiBudWxsfXZhciBrZD1udWxsLGxkPW51bGwsbWQ9bnVsbDtcbmZ1bmN0aW9uIG5kKCl7aWYobWQpcmV0dXJuIG1kO3ZhciBhLGI9bGQsYz1iLmxlbmd0aCxkLGU9XCJ2YWx1ZVwiaW4ga2Q/a2QudmFsdWU6a2QudGV4dENvbnRlbnQsZj1lLmxlbmd0aDtmb3IoYT0wO2E8YyYmYlthXT09PWVbYV07YSsrKTt2YXIgZz1jLWE7Zm9yKGQ9MTtkPD1nJiZiW2MtZF09PT1lW2YtZF07ZCsrKTtyZXR1cm4gbWQ9ZS5zbGljZShhLDE8ZD8xLWQ6dm9pZCAwKX1mdW5jdGlvbiBvZChhKXt2YXIgYj1hLmtleUNvZGU7XCJjaGFyQ29kZVwiaW4gYT8oYT1hLmNoYXJDb2RlLDA9PT1hJiYxMz09PWImJihhPTEzKSk6YT1iOzEwPT09YSYmKGE9MTMpO3JldHVybiAzMjw9YXx8MTM9PT1hP2E6MH1mdW5jdGlvbiBwZCgpe3JldHVybiEwfWZ1bmN0aW9uIHFkKCl7cmV0dXJuITF9XG5mdW5jdGlvbiByZChhKXtmdW5jdGlvbiBiKGIsZCxlLGYsZyl7dGhpcy5fcmVhY3ROYW1lPWI7dGhpcy5fdGFyZ2V0SW5zdD1lO3RoaXMudHlwZT1kO3RoaXMubmF0aXZlRXZlbnQ9Zjt0aGlzLnRhcmdldD1nO3RoaXMuY3VycmVudFRhcmdldD1udWxsO2Zvcih2YXIgYyBpbiBhKWEuaGFzT3duUHJvcGVydHkoYykmJihiPWFbY10sdGhpc1tjXT1iP2IoZik6ZltjXSk7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9KG51bGwhPWYuZGVmYXVsdFByZXZlbnRlZD9mLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1mLnJldHVyblZhbHVlKT9wZDpxZDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXFkO3JldHVybiB0aGlzfW0oYi5wcm90b3R5cGUse3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwO3ZhciBhPXRoaXMubmF0aXZlRXZlbnQ7YSYmKGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOlwidW5rbm93blwiIT09dHlwZW9mIGEucmV0dXJuVmFsdWUmJlxuKGEucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPXBkKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uYXRpdmVFdmVudDthJiYoYS5zdG9wUHJvcGFnYXRpb24/YS5zdG9wUHJvcGFnYXRpb24oKTpcInVua25vd25cIiE9PXR5cGVvZiBhLmNhbmNlbEJ1YmJsZSYmKGEuY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXBkKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OnBkfSk7cmV0dXJuIGJ9XG52YXIgc2Q9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihhKXtyZXR1cm4gYS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0sdGQ9cmQoc2QpLHVkPW0oe30sc2Qse3ZpZXc6MCxkZXRhaWw6MH0pLHZkPXJkKHVkKSx3ZCx4ZCx5ZCxBZD1tKHt9LHVkLHtzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MCxjbGllbnRZOjAscGFnZVg6MCxwYWdlWTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxnZXRNb2RpZmllclN0YXRlOnpkLGJ1dHRvbjowLGJ1dHRvbnM6MCxyZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hLnJlbGF0ZWRUYXJnZXQ/YS5mcm9tRWxlbWVudD09PWEuc3JjRWxlbWVudD9hLnRvRWxlbWVudDphLmZyb21FbGVtZW50OmEucmVsYXRlZFRhcmdldH0sbW92ZW1lbnRYOmZ1bmN0aW9uKGEpe2lmKFwibW92ZW1lbnRYXCJpblxuYSlyZXR1cm4gYS5tb3ZlbWVudFg7YSE9PXlkJiYoeWQmJlwibW91c2Vtb3ZlXCI9PT1hLnR5cGU/KHdkPWEuc2NyZWVuWC15ZC5zY3JlZW5YLHhkPWEuc2NyZWVuWS15ZC5zY3JlZW5ZKTp4ZD13ZD0wLHlkPWEpO3JldHVybiB3ZH0sbW92ZW1lbnRZOmZ1bmN0aW9uKGEpe3JldHVyblwibW92ZW1lbnRZXCJpbiBhP2EubW92ZW1lbnRZOnhkfX0pLEJkPXJkKEFkKSxDZD1tKHt9LEFkLHtkYXRhVHJhbnNmZXI6MH0pLERkPXJkKENkKSxFZD1tKHt9LHVkLHtyZWxhdGVkVGFyZ2V0OjB9KSxGZD1yZChFZCksR2Q9bSh7fSxzZCx7YW5pbWF0aW9uTmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksSGQ9cmQoR2QpLElkPW0oe30sc2Qse2NsaXBib2FyZERhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuXCJjbGlwYm9hcmREYXRhXCJpbiBhP2EuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxKZD1yZChJZCksS2Q9bSh7fSxzZCx7ZGF0YTowfSksTGQ9cmQoS2QpLE1kPXtFc2M6XCJFc2NhcGVcIixcblNwYWNlYmFyOlwiIFwiLExlZnQ6XCJBcnJvd0xlZnRcIixVcDpcIkFycm93VXBcIixSaWdodDpcIkFycm93UmlnaHRcIixEb3duOlwiQXJyb3dEb3duXCIsRGVsOlwiRGVsZXRlXCIsV2luOlwiT1NcIixNZW51OlwiQ29udGV4dE1lbnVcIixBcHBzOlwiQ29udGV4dE1lbnVcIixTY3JvbGw6XCJTY3JvbGxMb2NrXCIsTW96UHJpbnRhYmxlS2V5OlwiVW5pZGVudGlmaWVkXCJ9LE5kPXs4OlwiQmFja3NwYWNlXCIsOTpcIlRhYlwiLDEyOlwiQ2xlYXJcIiwxMzpcIkVudGVyXCIsMTY6XCJTaGlmdFwiLDE3OlwiQ29udHJvbFwiLDE4OlwiQWx0XCIsMTk6XCJQYXVzZVwiLDIwOlwiQ2Fwc0xvY2tcIiwyNzpcIkVzY2FwZVwiLDMyOlwiIFwiLDMzOlwiUGFnZVVwXCIsMzQ6XCJQYWdlRG93blwiLDM1OlwiRW5kXCIsMzY6XCJIb21lXCIsMzc6XCJBcnJvd0xlZnRcIiwzODpcIkFycm93VXBcIiwzOTpcIkFycm93UmlnaHRcIiw0MDpcIkFycm93RG93blwiLDQ1OlwiSW5zZXJ0XCIsNDY6XCJEZWxldGVcIiwxMTI6XCJGMVwiLDExMzpcIkYyXCIsMTE0OlwiRjNcIiwxMTU6XCJGNFwiLDExNjpcIkY1XCIsMTE3OlwiRjZcIiwxMTg6XCJGN1wiLFxuMTE5OlwiRjhcIiwxMjA6XCJGOVwiLDEyMTpcIkYxMFwiLDEyMjpcIkYxMVwiLDEyMzpcIkYxMlwiLDE0NDpcIk51bUxvY2tcIiwxNDU6XCJTY3JvbGxMb2NrXCIsMjI0OlwiTWV0YVwifSxPZD17QWx0OlwiYWx0S2V5XCIsQ29udHJvbDpcImN0cmxLZXlcIixNZXRhOlwibWV0YUtleVwiLFNoaWZ0Olwic2hpZnRLZXlcIn07ZnVuY3Rpb24gUGQoYSl7dmFyIGI9dGhpcy5uYXRpdmVFdmVudDtyZXR1cm4gYi5nZXRNb2RpZmllclN0YXRlP2IuZ2V0TW9kaWZpZXJTdGF0ZShhKTooYT1PZFthXSk/ISFiW2FdOiExfWZ1bmN0aW9uIHpkKCl7cmV0dXJuIFBkfVxudmFyIFFkPW0oe30sdWQse2tleTpmdW5jdGlvbihhKXtpZihhLmtleSl7dmFyIGI9TWRbYS5rZXldfHxhLmtleTtpZihcIlVuaWRlbnRpZmllZFwiIT09YilyZXR1cm4gYn1yZXR1cm5cImtleXByZXNzXCI9PT1hLnR5cGU/KGE9b2QoYSksMTM9PT1hP1wiRW50ZXJcIjpTdHJpbmcuZnJvbUNoYXJDb2RlKGEpKTpcImtleWRvd25cIj09PWEudHlwZXx8XCJrZXl1cFwiPT09YS50eXBlP05kW2Eua2V5Q29kZV18fFwiVW5pZGVudGlmaWVkXCI6XCJcIn0sY29kZTowLGxvY2F0aW9uOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLHJlcGVhdDowLGxvY2FsZTowLGdldE1vZGlmaWVyU3RhdGU6emQsY2hhckNvZGU6ZnVuY3Rpb24oYSl7cmV0dXJuXCJrZXlwcmVzc1wiPT09YS50eXBlP29kKGEpOjB9LGtleUNvZGU6ZnVuY3Rpb24oYSl7cmV0dXJuXCJrZXlkb3duXCI9PT1hLnR5cGV8fFwia2V5dXBcIj09PWEudHlwZT9hLmtleUNvZGU6MH0sd2hpY2g6ZnVuY3Rpb24oYSl7cmV0dXJuXCJrZXlwcmVzc1wiPT09XG5hLnR5cGU/b2QoYSk6XCJrZXlkb3duXCI9PT1hLnR5cGV8fFwia2V5dXBcIj09PWEudHlwZT9hLmtleUNvZGU6MH19KSxSZD1yZChRZCksU2Q9bSh7fSxBZCx7cG9pbnRlcklkOjAsd2lkdGg6MCxoZWlnaHQ6MCxwcmVzc3VyZTowLHRhbmdlbnRpYWxQcmVzc3VyZTowLHRpbHRYOjAsdGlsdFk6MCx0d2lzdDowLHBvaW50ZXJUeXBlOjAsaXNQcmltYXJ5OjB9KSxUZD1yZChTZCksVWQ9bSh7fSx1ZCx7dG91Y2hlczowLHRhcmdldFRvdWNoZXM6MCxjaGFuZ2VkVG91Y2hlczowLGFsdEtleTowLG1ldGFLZXk6MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxnZXRNb2RpZmllclN0YXRlOnpkfSksVmQ9cmQoVWQpLFdkPW0oe30sc2Qse3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksWGQ9cmQoV2QpLFlkPW0oe30sQWQse2RlbHRhWDpmdW5jdGlvbihhKXtyZXR1cm5cImRlbHRhWFwiaW4gYT9hLmRlbHRhWDpcIndoZWVsRGVsdGFYXCJpbiBhPy1hLndoZWVsRGVsdGFYOjB9LFxuZGVsdGFZOmZ1bmN0aW9uKGEpe3JldHVyblwiZGVsdGFZXCJpbiBhP2EuZGVsdGFZOlwid2hlZWxEZWx0YVlcImluIGE/LWEud2hlZWxEZWx0YVk6XCJ3aGVlbERlbHRhXCJpbiBhPy1hLndoZWVsRGVsdGE6MH0sZGVsdGFaOjAsZGVsdGFNb2RlOjB9KSxaZD1yZChZZCksJGQ9WzksMTMsMjcsMzJdLGFlPWZhJiZcIkNvbXBvc2l0aW9uRXZlbnRcImluIHdpbmRvdyxiZT1udWxsO2ZhJiZcImRvY3VtZW50TW9kZVwiaW4gZG9jdW1lbnQmJihiZT1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBjZT1mYSYmXCJUZXh0RXZlbnRcImluIHdpbmRvdyYmIWJlLGRlPWZhJiYoIWFlfHxiZSYmODxiZSYmMTE+PWJlKSxlZT1TdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSxmZT0hMTtcbmZ1bmN0aW9uIGdlKGEsYil7c3dpdGNoKGEpe2Nhc2UgXCJrZXl1cFwiOnJldHVybi0xIT09JGQuaW5kZXhPZihiLmtleUNvZGUpO2Nhc2UgXCJrZXlkb3duXCI6cmV0dXJuIDIyOSE9PWIua2V5Q29kZTtjYXNlIFwia2V5cHJlc3NcIjpjYXNlIFwibW91c2Vkb3duXCI6Y2FzZSBcImZvY3Vzb3V0XCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gaGUoYSl7YT1hLmRldGFpbDtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJlwiZGF0YVwiaW4gYT9hLmRhdGE6bnVsbH12YXIgaWU9ITE7ZnVuY3Rpb24gamUoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6cmV0dXJuIGhlKGIpO2Nhc2UgXCJrZXlwcmVzc1wiOmlmKDMyIT09Yi53aGljaClyZXR1cm4gbnVsbDtmZT0hMDtyZXR1cm4gZWU7Y2FzZSBcInRleHRJbnB1dFwiOnJldHVybiBhPWIuZGF0YSxhPT09ZWUmJmZlP251bGw6YTtkZWZhdWx0OnJldHVybiBudWxsfX1cbmZ1bmN0aW9uIGtlKGEsYil7aWYoaWUpcmV0dXJuXCJjb21wb3NpdGlvbmVuZFwiPT09YXx8IWFlJiZnZShhLGIpPyhhPW5kKCksbWQ9bGQ9a2Q9bnVsbCxpZT0hMSxhKTpudWxsO3N3aXRjaChhKXtjYXNlIFwicGFzdGVcIjpyZXR1cm4gbnVsbDtjYXNlIFwia2V5cHJlc3NcIjppZighKGIuY3RybEtleXx8Yi5hbHRLZXl8fGIubWV0YUtleSl8fGIuY3RybEtleSYmYi5hbHRLZXkpe2lmKGIuY2hhciYmMTxiLmNoYXIubGVuZ3RoKXJldHVybiBiLmNoYXI7aWYoYi53aGljaClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShiLndoaWNoKX1yZXR1cm4gbnVsbDtjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpyZXR1cm4gZGUmJlwia29cIiE9PWIubG9jYWxlP251bGw6Yi5kYXRhO2RlZmF1bHQ6cmV0dXJuIG51bGx9fVxudmFyIGxlPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLFwiZGF0ZXRpbWUtbG9jYWxcIjohMCxlbWFpbDohMCxtb250aDohMCxudW1iZXI6ITAscGFzc3dvcmQ6ITAscmFuZ2U6ITAsc2VhcmNoOiEwLHRlbDohMCx0ZXh0OiEwLHRpbWU6ITAsdXJsOiEwLHdlZWs6ITB9O2Z1bmN0aW9uIG1lKGEpe3ZhciBiPWEmJmEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT1iPyEhbGVbYS50eXBlXTpcInRleHRhcmVhXCI9PT1iPyEwOiExfWZ1bmN0aW9uIG5lKGEsYixjLGQpe0ViKGQpO2I9b2UoYixcIm9uQ2hhbmdlXCIpOzA8Yi5sZW5ndGgmJihjPW5ldyB0ZChcIm9uQ2hhbmdlXCIsXCJjaGFuZ2VcIixudWxsLGMsZCksYS5wdXNoKHtldmVudDpjLGxpc3RlbmVyczpifSkpfXZhciBwZT1udWxsLHFlPW51bGw7ZnVuY3Rpb24gcmUoYSl7c2UoYSwwKX1mdW5jdGlvbiB0ZShhKXt2YXIgYj11ZShhKTtpZihXYShiKSlyZXR1cm4gYX1cbmZ1bmN0aW9uIHZlKGEsYil7aWYoXCJjaGFuZ2VcIj09PWEpcmV0dXJuIGJ9dmFyIHdlPSExO2lmKGZhKXt2YXIgeGU7aWYoZmEpe3ZhciB5ZT1cIm9uaW5wdXRcImluIGRvY3VtZW50O2lmKCF5ZSl7dmFyIHplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7emUuc2V0QXR0cmlidXRlKFwib25pbnB1dFwiLFwicmV0dXJuO1wiKTt5ZT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgemUub25pbnB1dH14ZT15ZX1lbHNlIHhlPSExO3dlPXhlJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8OTxkb2N1bWVudC5kb2N1bWVudE1vZGUpfWZ1bmN0aW9uIEFlKCl7cGUmJihwZS5kZXRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIixCZSkscWU9cGU9bnVsbCl9ZnVuY3Rpb24gQmUoYSl7aWYoXCJ2YWx1ZVwiPT09YS5wcm9wZXJ0eU5hbWUmJnRlKHFlKSl7dmFyIGI9W107bmUoYixxZSxhLHhiKGEpKTthPXJlO2lmKEtiKWEoYik7ZWxzZXtLYj0hMDt0cnl7R2IoYSxiKX1maW5hbGx5e0tiPSExLE1iKCl9fX19XG5mdW5jdGlvbiBDZShhLGIsYyl7XCJmb2N1c2luXCI9PT1hPyhBZSgpLHBlPWIscWU9YyxwZS5hdHRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIixCZSkpOlwiZm9jdXNvdXRcIj09PWEmJkFlKCl9ZnVuY3Rpb24gRGUoYSl7aWYoXCJzZWxlY3Rpb25jaGFuZ2VcIj09PWF8fFwia2V5dXBcIj09PWF8fFwia2V5ZG93blwiPT09YSlyZXR1cm4gdGUocWUpfWZ1bmN0aW9uIEVlKGEsYil7aWYoXCJjbGlja1wiPT09YSlyZXR1cm4gdGUoYil9ZnVuY3Rpb24gRmUoYSxiKXtpZihcImlucHV0XCI9PT1hfHxcImNoYW5nZVwiPT09YSlyZXR1cm4gdGUoYil9ZnVuY3Rpb24gR2UoYSxiKXtyZXR1cm4gYT09PWImJigwIT09YXx8MS9hPT09MS9iKXx8YSE9PWEmJmIhPT1ifXZhciBIZT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpHZSxJZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gSmUoYSxiKXtpZihIZShhLGIpKXJldHVybiEwO2lmKFwib2JqZWN0XCIhPT10eXBlb2YgYXx8bnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYnx8bnVsbD09PWIpcmV0dXJuITE7dmFyIGM9T2JqZWN0LmtleXMoYSksZD1PYmplY3Qua2V5cyhiKTtpZihjLmxlbmd0aCE9PWQubGVuZ3RoKXJldHVybiExO2ZvcihkPTA7ZDxjLmxlbmd0aDtkKyspaWYoIUllLmNhbGwoYixjW2RdKXx8IUhlKGFbY1tkXV0sYltjW2RdXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gS2UoYSl7Zm9yKDthJiZhLmZpcnN0Q2hpbGQ7KWE9YS5maXJzdENoaWxkO3JldHVybiBhfVxuZnVuY3Rpb24gTGUoYSxiKXt2YXIgYz1LZShhKTthPTA7Zm9yKHZhciBkO2M7KXtpZigzPT09Yy5ub2RlVHlwZSl7ZD1hK2MudGV4dENvbnRlbnQubGVuZ3RoO2lmKGE8PWImJmQ+PWIpcmV0dXJue25vZGU6YyxvZmZzZXQ6Yi1hfTthPWR9YTp7Zm9yKDtjOyl7aWYoYy5uZXh0U2libGluZyl7Yz1jLm5leHRTaWJsaW5nO2JyZWFrIGF9Yz1jLnBhcmVudE5vZGV9Yz12b2lkIDB9Yz1LZShjKX19ZnVuY3Rpb24gTWUoYSxiKXtyZXR1cm4gYSYmYj9hPT09Yj8hMDphJiYzPT09YS5ub2RlVHlwZT8hMTpiJiYzPT09Yi5ub2RlVHlwZT9NZShhLGIucGFyZW50Tm9kZSk6XCJjb250YWluc1wiaW4gYT9hLmNvbnRhaW5zKGIpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSYxNik6ITE6ITF9XG5mdW5jdGlvbiBOZSgpe2Zvcih2YXIgYT13aW5kb3csYj1YYSgpO2IgaW5zdGFuY2VvZiBhLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBjPVwic3RyaW5nXCI9PT10eXBlb2YgYi5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWZ9Y2F0Y2goZCl7Yz0hMX1pZihjKWE9Yi5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7Yj1YYShhLmRvY3VtZW50KX1yZXR1cm4gYn1mdW5jdGlvbiBPZShhKXt2YXIgYj1hJiZhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGImJihcImlucHV0XCI9PT1iJiYoXCJ0ZXh0XCI9PT1hLnR5cGV8fFwic2VhcmNoXCI9PT1hLnR5cGV8fFwidGVsXCI9PT1hLnR5cGV8fFwidXJsXCI9PT1hLnR5cGV8fFwicGFzc3dvcmRcIj09PWEudHlwZSl8fFwidGV4dGFyZWFcIj09PWJ8fFwidHJ1ZVwiPT09YS5jb250ZW50RWRpdGFibGUpfVxudmFyIFBlPWZhJiZcImRvY3VtZW50TW9kZVwiaW4gZG9jdW1lbnQmJjExPj1kb2N1bWVudC5kb2N1bWVudE1vZGUsUWU9bnVsbCxSZT1udWxsLFNlPW51bGwsVGU9ITE7XG5mdW5jdGlvbiBVZShhLGIsYyl7dmFyIGQ9Yy53aW5kb3c9PT1jP2MuZG9jdW1lbnQ6OT09PWMubm9kZVR5cGU/YzpjLm93bmVyRG9jdW1lbnQ7VGV8fG51bGw9PVFlfHxRZSE9PVhhKGQpfHwoZD1RZSxcInNlbGVjdGlvblN0YXJ0XCJpbiBkJiZPZShkKT9kPXtzdGFydDpkLnNlbGVjdGlvblN0YXJ0LGVuZDpkLnNlbGVjdGlvbkVuZH06KGQ9KGQub3duZXJEb2N1bWVudCYmZC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpLGQ9e2FuY2hvck5vZGU6ZC5hbmNob3JOb2RlLGFuY2hvck9mZnNldDpkLmFuY2hvck9mZnNldCxmb2N1c05vZGU6ZC5mb2N1c05vZGUsZm9jdXNPZmZzZXQ6ZC5mb2N1c09mZnNldH0pLFNlJiZKZShTZSxkKXx8KFNlPWQsZD1vZShSZSxcIm9uU2VsZWN0XCIpLDA8ZC5sZW5ndGgmJihiPW5ldyB0ZChcIm9uU2VsZWN0XCIsXCJzZWxlY3RcIixudWxsLGIsYyksYS5wdXNoKHtldmVudDpiLGxpc3RlbmVyczpkfSksYi50YXJnZXQ9UWUpKSl9XG5QYyhcImNhbmNlbCBjYW5jZWwgY2xpY2sgY2xpY2sgY2xvc2UgY2xvc2UgY29udGV4dG1lbnUgY29udGV4dE1lbnUgY29weSBjb3B5IGN1dCBjdXQgYXV4Y2xpY2sgYXV4Q2xpY2sgZGJsY2xpY2sgZG91YmxlQ2xpY2sgZHJhZ2VuZCBkcmFnRW5kIGRyYWdzdGFydCBkcmFnU3RhcnQgZHJvcCBkcm9wIGZvY3VzaW4gZm9jdXMgZm9jdXNvdXQgYmx1ciBpbnB1dCBpbnB1dCBpbnZhbGlkIGludmFsaWQga2V5ZG93biBrZXlEb3duIGtleXByZXNzIGtleVByZXNzIGtleXVwIGtleVVwIG1vdXNlZG93biBtb3VzZURvd24gbW91c2V1cCBtb3VzZVVwIHBhc3RlIHBhc3RlIHBhdXNlIHBhdXNlIHBsYXkgcGxheSBwb2ludGVyY2FuY2VsIHBvaW50ZXJDYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlckRvd24gcG9pbnRlcnVwIHBvaW50ZXJVcCByYXRlY2hhbmdlIHJhdGVDaGFuZ2UgcmVzZXQgcmVzZXQgc2Vla2VkIHNlZWtlZCBzdWJtaXQgc3VibWl0IHRvdWNoY2FuY2VsIHRvdWNoQ2FuY2VsIHRvdWNoZW5kIHRvdWNoRW5kIHRvdWNoc3RhcnQgdG91Y2hTdGFydCB2b2x1bWVjaGFuZ2Ugdm9sdW1lQ2hhbmdlXCIuc3BsaXQoXCIgXCIpLFxuMCk7UGMoXCJkcmFnIGRyYWcgZHJhZ2VudGVyIGRyYWdFbnRlciBkcmFnZXhpdCBkcmFnRXhpdCBkcmFnbGVhdmUgZHJhZ0xlYXZlIGRyYWdvdmVyIGRyYWdPdmVyIG1vdXNlbW92ZSBtb3VzZU1vdmUgbW91c2VvdXQgbW91c2VPdXQgbW91c2VvdmVyIG1vdXNlT3ZlciBwb2ludGVybW92ZSBwb2ludGVyTW92ZSBwb2ludGVyb3V0IHBvaW50ZXJPdXQgcG9pbnRlcm92ZXIgcG9pbnRlck92ZXIgc2Nyb2xsIHNjcm9sbCB0b2dnbGUgdG9nZ2xlIHRvdWNobW92ZSB0b3VjaE1vdmUgd2hlZWwgd2hlZWxcIi5zcGxpdChcIiBcIiksMSk7UGMoT2MsMik7Zm9yKHZhciBWZT1cImNoYW5nZSBzZWxlY3Rpb25jaGFuZ2UgdGV4dElucHV0IGNvbXBvc2l0aW9uc3RhcnQgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb251cGRhdGVcIi5zcGxpdChcIiBcIiksV2U9MDtXZTxWZS5sZW5ndGg7V2UrKylOYy5zZXQoVmVbV2VdLDApO2VhKFwib25Nb3VzZUVudGVyXCIsW1wibW91c2VvdXRcIixcIm1vdXNlb3ZlclwiXSk7XG5lYShcIm9uTW91c2VMZWF2ZVwiLFtcIm1vdXNlb3V0XCIsXCJtb3VzZW92ZXJcIl0pO2VhKFwib25Qb2ludGVyRW50ZXJcIixbXCJwb2ludGVyb3V0XCIsXCJwb2ludGVyb3ZlclwiXSk7ZWEoXCJvblBvaW50ZXJMZWF2ZVwiLFtcInBvaW50ZXJvdXRcIixcInBvaW50ZXJvdmVyXCJdKTtkYShcIm9uQ2hhbmdlXCIsXCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKSk7ZGEoXCJvblNlbGVjdFwiLFwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlXCIuc3BsaXQoXCIgXCIpKTtkYShcIm9uQmVmb3JlSW5wdXRcIixbXCJjb21wb3NpdGlvbmVuZFwiLFwia2V5cHJlc3NcIixcInRleHRJbnB1dFwiLFwicGFzdGVcIl0pO2RhKFwib25Db21wb3NpdGlvbkVuZFwiLFwiY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO1xuZGEoXCJvbkNvbXBvc2l0aW9uU3RhcnRcIixcImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO2RhKFwib25Db21wb3NpdGlvblVwZGF0ZVwiLFwiY29tcG9zaXRpb251cGRhdGUgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO3ZhciBYZT1cImFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2Ugc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmdcIi5zcGxpdChcIiBcIiksWWU9bmV3IFNldChcImNhbmNlbCBjbG9zZSBpbnZhbGlkIGxvYWQgc2Nyb2xsIHRvZ2dsZVwiLnNwbGl0KFwiIFwiKS5jb25jYXQoWGUpKTtcbmZ1bmN0aW9uIFplKGEsYixjKXt2YXIgZD1hLnR5cGV8fFwidW5rbm93bi1ldmVudFwiO2EuY3VycmVudFRhcmdldD1jO1liKGQsYix2b2lkIDAsYSk7YS5jdXJyZW50VGFyZ2V0PW51bGx9XG5mdW5jdGlvbiBzZShhLGIpe2I9MCE9PShiJjQpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgZD1hW2NdLGU9ZC5ldmVudDtkPWQubGlzdGVuZXJzO2E6e3ZhciBmPXZvaWQgMDtpZihiKWZvcih2YXIgZz1kLmxlbmd0aC0xOzA8PWc7Zy0tKXt2YXIgaD1kW2ddLGs9aC5pbnN0YW5jZSxsPWguY3VycmVudFRhcmdldDtoPWgubGlzdGVuZXI7aWYoayE9PWYmJmUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBhO1plKGUsaCxsKTtmPWt9ZWxzZSBmb3IoZz0wO2c8ZC5sZW5ndGg7ZysrKXtoPWRbZ107az1oLmluc3RhbmNlO2w9aC5jdXJyZW50VGFyZ2V0O2g9aC5saXN0ZW5lcjtpZihrIT09ZiYmZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGE7WmUoZSxoLGwpO2Y9a319fWlmKFViKXRocm93IGE9VmIsVWI9ITEsVmI9bnVsbCxhO31cbmZ1bmN0aW9uIEcoYSxiKXt2YXIgYz0kZShiKSxkPWErXCJfX2J1YmJsZVwiO2MuaGFzKGQpfHwoYWYoYixhLDIsITEpLGMuYWRkKGQpKX12YXIgYmY9XCJfcmVhY3RMaXN0ZW5pbmdcIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtmdW5jdGlvbiBjZihhKXthW2JmXXx8KGFbYmZdPSEwLGJhLmZvckVhY2goZnVuY3Rpb24oYil7WWUuaGFzKGIpfHxkZihiLCExLGEsbnVsbCk7ZGYoYiwhMCxhLG51bGwpfSkpfVxuZnVuY3Rpb24gZGYoYSxiLGMsZCl7dmFyIGU9NDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOjAsZj1jO1wic2VsZWN0aW9uY2hhbmdlXCI9PT1hJiY5IT09Yy5ub2RlVHlwZSYmKGY9Yy5vd25lckRvY3VtZW50KTtpZihudWxsIT09ZCYmIWImJlllLmhhcyhhKSl7aWYoXCJzY3JvbGxcIiE9PWEpcmV0dXJuO2V8PTI7Zj1kfXZhciBnPSRlKGYpLGg9YStcIl9fXCIrKGI/XCJjYXB0dXJlXCI6XCJidWJibGVcIik7Zy5oYXMoaCl8fChiJiYoZXw9NCksYWYoZixhLGUsYiksZy5hZGQoaCkpfVxuZnVuY3Rpb24gYWYoYSxiLGMsZCl7dmFyIGU9TmMuZ2V0KGIpO3N3aXRjaCh2b2lkIDA9PT1lPzI6ZSl7Y2FzZSAwOmU9Z2Q7YnJlYWs7Y2FzZSAxOmU9aWQ7YnJlYWs7ZGVmYXVsdDplPWhkfWM9ZS5iaW5kKG51bGwsYixjLGEpO2U9dm9pZCAwOyFQYnx8XCJ0b3VjaHN0YXJ0XCIhPT1iJiZcInRvdWNobW92ZVwiIT09YiYmXCJ3aGVlbFwiIT09Ynx8KGU9ITApO2Q/dm9pZCAwIT09ZT9hLmFkZEV2ZW50TGlzdGVuZXIoYixjLHtjYXB0dXJlOiEwLHBhc3NpdmU6ZX0pOmEuYWRkRXZlbnRMaXN0ZW5lcihiLGMsITApOnZvaWQgMCE9PWU/YS5hZGRFdmVudExpc3RlbmVyKGIsYyx7cGFzc2l2ZTplfSk6YS5hZGRFdmVudExpc3RlbmVyKGIsYywhMSl9XG5mdW5jdGlvbiBqZChhLGIsYyxkLGUpe3ZhciBmPWQ7aWYoMD09PShiJjEpJiYwPT09KGImMikmJm51bGwhPT1kKWE6Zm9yKDs7KXtpZihudWxsPT09ZClyZXR1cm47dmFyIGc9ZC50YWc7aWYoMz09PWd8fDQ9PT1nKXt2YXIgaD1kLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2lmKGg9PT1lfHw4PT09aC5ub2RlVHlwZSYmaC5wYXJlbnROb2RlPT09ZSlicmVhaztpZig0PT09Zylmb3IoZz1kLnJldHVybjtudWxsIT09Zzspe3ZhciBrPWcudGFnO2lmKDM9PT1rfHw0PT09aylpZihrPWcuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8saz09PWV8fDg9PT1rLm5vZGVUeXBlJiZrLnBhcmVudE5vZGU9PT1lKXJldHVybjtnPWcucmV0dXJufWZvcig7bnVsbCE9PWg7KXtnPXdjKGgpO2lmKG51bGw9PT1nKXJldHVybjtrPWcudGFnO2lmKDU9PT1rfHw2PT09ayl7ZD1mPWc7Y29udGludWUgYX1oPWgucGFyZW50Tm9kZX19ZD1kLnJldHVybn1OYihmdW5jdGlvbigpe3ZhciBkPWYsZT14YihjKSxnPVtdO1xuYTp7dmFyIGg9TWMuZ2V0KGEpO2lmKHZvaWQgMCE9PWgpe3ZhciBrPXRkLHg9YTtzd2l0Y2goYSl7Y2FzZSBcImtleXByZXNzXCI6aWYoMD09PW9kKGMpKWJyZWFrIGE7Y2FzZSBcImtleWRvd25cIjpjYXNlIFwia2V5dXBcIjprPVJkO2JyZWFrO2Nhc2UgXCJmb2N1c2luXCI6eD1cImZvY3VzXCI7az1GZDticmVhaztjYXNlIFwiZm9jdXNvdXRcIjp4PVwiYmx1clwiO2s9RmQ7YnJlYWs7Y2FzZSBcImJlZm9yZWJsdXJcIjpjYXNlIFwiYWZ0ZXJibHVyXCI6az1GZDticmVhaztjYXNlIFwiY2xpY2tcIjppZigyPT09Yy5idXR0b24pYnJlYWsgYTtjYXNlIFwiYXV4Y2xpY2tcIjpjYXNlIFwiZGJsY2xpY2tcIjpjYXNlIFwibW91c2Vkb3duXCI6Y2FzZSBcIm1vdXNlbW92ZVwiOmNhc2UgXCJtb3VzZXVwXCI6Y2FzZSBcIm1vdXNlb3V0XCI6Y2FzZSBcIm1vdXNlb3ZlclwiOmNhc2UgXCJjb250ZXh0bWVudVwiOms9QmQ7YnJlYWs7Y2FzZSBcImRyYWdcIjpjYXNlIFwiZHJhZ2VuZFwiOmNhc2UgXCJkcmFnZW50ZXJcIjpjYXNlIFwiZHJhZ2V4aXRcIjpjYXNlIFwiZHJhZ2xlYXZlXCI6Y2FzZSBcImRyYWdvdmVyXCI6Y2FzZSBcImRyYWdzdGFydFwiOmNhc2UgXCJkcm9wXCI6az1cbkRkO2JyZWFrO2Nhc2UgXCJ0b3VjaGNhbmNlbFwiOmNhc2UgXCJ0b3VjaGVuZFwiOmNhc2UgXCJ0b3VjaG1vdmVcIjpjYXNlIFwidG91Y2hzdGFydFwiOms9VmQ7YnJlYWs7Y2FzZSBJYzpjYXNlIEpjOmNhc2UgS2M6az1IZDticmVhaztjYXNlIExjOms9WGQ7YnJlYWs7Y2FzZSBcInNjcm9sbFwiOms9dmQ7YnJlYWs7Y2FzZSBcIndoZWVsXCI6az1aZDticmVhaztjYXNlIFwiY29weVwiOmNhc2UgXCJjdXRcIjpjYXNlIFwicGFzdGVcIjprPUpkO2JyZWFrO2Nhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpjYXNlIFwicG9pbnRlcmNhbmNlbFwiOmNhc2UgXCJwb2ludGVyZG93blwiOmNhc2UgXCJwb2ludGVybW92ZVwiOmNhc2UgXCJwb2ludGVyb3V0XCI6Y2FzZSBcInBvaW50ZXJvdmVyXCI6Y2FzZSBcInBvaW50ZXJ1cFwiOms9VGR9dmFyIHc9MCE9PShiJjQpLHo9IXcmJlwic2Nyb2xsXCI9PT1hLHU9dz9udWxsIT09aD9oK1wiQ2FwdHVyZVwiOm51bGw6aDt3PVtdO2Zvcih2YXIgdD1kLHE7bnVsbCE9PVxudDspe3E9dDt2YXIgdj1xLnN0YXRlTm9kZTs1PT09cS50YWcmJm51bGwhPT12JiYocT12LG51bGwhPT11JiYodj1PYih0LHUpLG51bGwhPXYmJncucHVzaChlZih0LHYscSkpKSk7aWYoeilicmVhazt0PXQucmV0dXJufTA8dy5sZW5ndGgmJihoPW5ldyBrKGgseCxudWxsLGMsZSksZy5wdXNoKHtldmVudDpoLGxpc3RlbmVyczp3fSkpfX1pZigwPT09KGImNykpe2E6e2g9XCJtb3VzZW92ZXJcIj09PWF8fFwicG9pbnRlcm92ZXJcIj09PWE7az1cIm1vdXNlb3V0XCI9PT1hfHxcInBvaW50ZXJvdXRcIj09PWE7aWYoaCYmMD09PShiJjE2KSYmKHg9Yy5yZWxhdGVkVGFyZ2V0fHxjLmZyb21FbGVtZW50KSYmKHdjKHgpfHx4W2ZmXSkpYnJlYWsgYTtpZihrfHxoKXtoPWUud2luZG93PT09ZT9lOihoPWUub3duZXJEb2N1bWVudCk/aC5kZWZhdWx0Vmlld3x8aC5wYXJlbnRXaW5kb3c6d2luZG93O2lmKGspe2lmKHg9Yy5yZWxhdGVkVGFyZ2V0fHxjLnRvRWxlbWVudCxrPWQseD14P3djKHgpOm51bGwsbnVsbCE9PVxueCYmKHo9WmIoeCkseCE9PXp8fDUhPT14LnRhZyYmNiE9PXgudGFnKSl4PW51bGx9ZWxzZSBrPW51bGwseD1kO2lmKGshPT14KXt3PUJkO3Y9XCJvbk1vdXNlTGVhdmVcIjt1PVwib25Nb3VzZUVudGVyXCI7dD1cIm1vdXNlXCI7aWYoXCJwb2ludGVyb3V0XCI9PT1hfHxcInBvaW50ZXJvdmVyXCI9PT1hKXc9VGQsdj1cIm9uUG9pbnRlckxlYXZlXCIsdT1cIm9uUG9pbnRlckVudGVyXCIsdD1cInBvaW50ZXJcIjt6PW51bGw9PWs/aDp1ZShrKTtxPW51bGw9PXg/aDp1ZSh4KTtoPW5ldyB3KHYsdCtcImxlYXZlXCIsayxjLGUpO2gudGFyZ2V0PXo7aC5yZWxhdGVkVGFyZ2V0PXE7dj1udWxsO3djKGUpPT09ZCYmKHc9bmV3IHcodSx0K1wiZW50ZXJcIix4LGMsZSksdy50YXJnZXQ9cSx3LnJlbGF0ZWRUYXJnZXQ9eix2PXcpO3o9djtpZihrJiZ4KWI6e3c9azt1PXg7dD0wO2ZvcihxPXc7cTtxPWdmKHEpKXQrKztxPTA7Zm9yKHY9dTt2O3Y9Z2YodikpcSsrO2Zvcig7MDx0LXE7KXc9Z2YodyksdC0tO2Zvcig7MDxxLXQ7KXU9XG5nZih1KSxxLS07Zm9yKDt0LS07KXtpZih3PT09dXx8bnVsbCE9PXUmJnc9PT11LmFsdGVybmF0ZSlicmVhayBiO3c9Z2Yodyk7dT1nZih1KX13PW51bGx9ZWxzZSB3PW51bGw7bnVsbCE9PWsmJmhmKGcsaCxrLHcsITEpO251bGwhPT14JiZudWxsIT09eiYmaGYoZyx6LHgsdywhMCl9fX1hOntoPWQ/dWUoZCk6d2luZG93O2s9aC5ub2RlTmFtZSYmaC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKFwic2VsZWN0XCI9PT1rfHxcImlucHV0XCI9PT1rJiZcImZpbGVcIj09PWgudHlwZSl2YXIgSj12ZTtlbHNlIGlmKG1lKGgpKWlmKHdlKUo9RmU7ZWxzZXtKPURlO3ZhciBLPUNlfWVsc2Uoaz1oLm5vZGVOYW1lKSYmXCJpbnB1dFwiPT09ay50b0xvd2VyQ2FzZSgpJiYoXCJjaGVja2JveFwiPT09aC50eXBlfHxcInJhZGlvXCI9PT1oLnR5cGUpJiYoSj1FZSk7aWYoSiYmKEo9SihhLGQpKSl7bmUoZyxKLGMsZSk7YnJlYWsgYX1LJiZLKGEsaCxkKTtcImZvY3Vzb3V0XCI9PT1hJiYoSz1oLl93cmFwcGVyU3RhdGUpJiZcbksuY29udHJvbGxlZCYmXCJudW1iZXJcIj09PWgudHlwZSYmYmIoaCxcIm51bWJlclwiLGgudmFsdWUpfUs9ZD91ZShkKTp3aW5kb3c7c3dpdGNoKGEpe2Nhc2UgXCJmb2N1c2luXCI6aWYobWUoSyl8fFwidHJ1ZVwiPT09Sy5jb250ZW50RWRpdGFibGUpUWU9SyxSZT1kLFNlPW51bGw7YnJlYWs7Y2FzZSBcImZvY3Vzb3V0XCI6U2U9UmU9UWU9bnVsbDticmVhaztjYXNlIFwibW91c2Vkb3duXCI6VGU9ITA7YnJlYWs7Y2FzZSBcImNvbnRleHRtZW51XCI6Y2FzZSBcIm1vdXNldXBcIjpjYXNlIFwiZHJhZ2VuZFwiOlRlPSExO1VlKGcsYyxlKTticmVhaztjYXNlIFwic2VsZWN0aW9uY2hhbmdlXCI6aWYoUGUpYnJlYWs7Y2FzZSBcImtleWRvd25cIjpjYXNlIFwia2V5dXBcIjpVZShnLGMsZSl9dmFyIFE7aWYoYWUpYjp7c3dpdGNoKGEpe2Nhc2UgXCJjb21wb3NpdGlvbnN0YXJ0XCI6dmFyIEw9XCJvbkNvbXBvc2l0aW9uU3RhcnRcIjticmVhayBiO2Nhc2UgXCJjb21wb3NpdGlvbmVuZFwiOkw9XCJvbkNvbXBvc2l0aW9uRW5kXCI7YnJlYWsgYjtcbmNhc2UgXCJjb21wb3NpdGlvbnVwZGF0ZVwiOkw9XCJvbkNvbXBvc2l0aW9uVXBkYXRlXCI7YnJlYWsgYn1MPXZvaWQgMH1lbHNlIGllP2dlKGEsYykmJihMPVwib25Db21wb3NpdGlvbkVuZFwiKTpcImtleWRvd25cIj09PWEmJjIyOT09PWMua2V5Q29kZSYmKEw9XCJvbkNvbXBvc2l0aW9uU3RhcnRcIik7TCYmKGRlJiZcImtvXCIhPT1jLmxvY2FsZSYmKGllfHxcIm9uQ29tcG9zaXRpb25TdGFydFwiIT09TD9cIm9uQ29tcG9zaXRpb25FbmRcIj09PUwmJmllJiYoUT1uZCgpKTooa2Q9ZSxsZD1cInZhbHVlXCJpbiBrZD9rZC52YWx1ZTprZC50ZXh0Q29udGVudCxpZT0hMCkpLEs9b2UoZCxMKSwwPEsubGVuZ3RoJiYoTD1uZXcgTGQoTCxhLG51bGwsYyxlKSxnLnB1c2goe2V2ZW50OkwsbGlzdGVuZXJzOkt9KSxRP0wuZGF0YT1ROihRPWhlKGMpLG51bGwhPT1RJiYoTC5kYXRhPVEpKSkpO2lmKFE9Y2U/amUoYSxjKTprZShhLGMpKWQ9b2UoZCxcIm9uQmVmb3JlSW5wdXRcIiksMDxkLmxlbmd0aCYmKGU9bmV3IExkKFwib25CZWZvcmVJbnB1dFwiLFxuXCJiZWZvcmVpbnB1dFwiLG51bGwsYyxlKSxnLnB1c2goe2V2ZW50OmUsbGlzdGVuZXJzOmR9KSxlLmRhdGE9USl9c2UoZyxiKX0pfWZ1bmN0aW9uIGVmKGEsYixjKXtyZXR1cm57aW5zdGFuY2U6YSxsaXN0ZW5lcjpiLGN1cnJlbnRUYXJnZXQ6Y319ZnVuY3Rpb24gb2UoYSxiKXtmb3IodmFyIGM9YitcIkNhcHR1cmVcIixkPVtdO251bGwhPT1hOyl7dmFyIGU9YSxmPWUuc3RhdGVOb2RlOzU9PT1lLnRhZyYmbnVsbCE9PWYmJihlPWYsZj1PYihhLGMpLG51bGwhPWYmJmQudW5zaGlmdChlZihhLGYsZSkpLGY9T2IoYSxiKSxudWxsIT1mJiZkLnB1c2goZWYoYSxmLGUpKSk7YT1hLnJldHVybn1yZXR1cm4gZH1mdW5jdGlvbiBnZihhKXtpZihudWxsPT09YSlyZXR1cm4gbnVsbDtkbyBhPWEucmV0dXJuO3doaWxlKGEmJjUhPT1hLnRhZyk7cmV0dXJuIGE/YTpudWxsfVxuZnVuY3Rpb24gaGYoYSxiLGMsZCxlKXtmb3IodmFyIGY9Yi5fcmVhY3ROYW1lLGc9W107bnVsbCE9PWMmJmMhPT1kOyl7dmFyIGg9YyxrPWguYWx0ZXJuYXRlLGw9aC5zdGF0ZU5vZGU7aWYobnVsbCE9PWsmJms9PT1kKWJyZWFrOzU9PT1oLnRhZyYmbnVsbCE9PWwmJihoPWwsZT8oaz1PYihjLGYpLG51bGwhPWsmJmcudW5zaGlmdChlZihjLGssaCkpKTplfHwoaz1PYihjLGYpLG51bGwhPWsmJmcucHVzaChlZihjLGssaCkpKSk7Yz1jLnJldHVybn0wIT09Zy5sZW5ndGgmJmEucHVzaCh7ZXZlbnQ6YixsaXN0ZW5lcnM6Z30pfWZ1bmN0aW9uIGpmKCl7fXZhciBrZj1udWxsLGxmPW51bGw7ZnVuY3Rpb24gbWYoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImJ1dHRvblwiOmNhc2UgXCJpbnB1dFwiOmNhc2UgXCJzZWxlY3RcIjpjYXNlIFwidGV4dGFyZWFcIjpyZXR1cm4hIWIuYXV0b0ZvY3VzfXJldHVybiExfVxuZnVuY3Rpb24gbmYoYSxiKXtyZXR1cm5cInRleHRhcmVhXCI9PT1hfHxcIm9wdGlvblwiPT09YXx8XCJub3NjcmlwdFwiPT09YXx8XCJzdHJpbmdcIj09PXR5cGVvZiBiLmNoaWxkcmVufHxcIm51bWJlclwiPT09dHlwZW9mIGIuY2hpbGRyZW58fFwib2JqZWN0XCI9PT10eXBlb2YgYi5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9PWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sfXZhciBvZj1cImZ1bmN0aW9uXCI9PT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OnZvaWQgMCxwZj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDp2b2lkIDA7ZnVuY3Rpb24gcWYoYSl7MT09PWEubm9kZVR5cGU/YS50ZXh0Q29udGVudD1cIlwiOjk9PT1hLm5vZGVUeXBlJiYoYT1hLmJvZHksbnVsbCE9YSYmKGEudGV4dENvbnRlbnQ9XCJcIikpfVxuZnVuY3Rpb24gcmYoYSl7Zm9yKDtudWxsIT1hO2E9YS5uZXh0U2libGluZyl7dmFyIGI9YS5ub2RlVHlwZTtpZigxPT09Ynx8Mz09PWIpYnJlYWt9cmV0dXJuIGF9ZnVuY3Rpb24gc2YoYSl7YT1hLnByZXZpb3VzU2libGluZztmb3IodmFyIGI9MDthOyl7aWYoOD09PWEubm9kZVR5cGUpe3ZhciBjPWEuZGF0YTtpZihcIiRcIj09PWN8fFwiJCFcIj09PWN8fFwiJD9cIj09PWMpe2lmKDA9PT1iKXJldHVybiBhO2ItLX1lbHNlXCIvJFwiPT09YyYmYisrfWE9YS5wcmV2aW91c1NpYmxpbmd9cmV0dXJuIG51bGx9dmFyIHRmPTA7ZnVuY3Rpb24gdWYoYSl7cmV0dXJueyQkdHlwZW9mOkdhLHRvU3RyaW5nOmEsdmFsdWVPZjphfX12YXIgdmY9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksd2Y9XCJfX3JlYWN0RmliZXIkXCIrdmYseGY9XCJfX3JlYWN0UHJvcHMkXCIrdmYsZmY9XCJfX3JlYWN0Q29udGFpbmVyJFwiK3ZmLHlmPVwiX19yZWFjdEV2ZW50cyRcIit2ZjtcbmZ1bmN0aW9uIHdjKGEpe3ZhciBiPWFbd2ZdO2lmKGIpcmV0dXJuIGI7Zm9yKHZhciBjPWEucGFyZW50Tm9kZTtjOyl7aWYoYj1jW2ZmXXx8Y1t3Zl0pe2M9Yi5hbHRlcm5hdGU7aWYobnVsbCE9PWIuY2hpbGR8fG51bGwhPT1jJiZudWxsIT09Yy5jaGlsZClmb3IoYT1zZihhKTtudWxsIT09YTspe2lmKGM9YVt3Zl0pcmV0dXJuIGM7YT1zZihhKX1yZXR1cm4gYn1hPWM7Yz1hLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2IoYSl7YT1hW3dmXXx8YVtmZl07cmV0dXJuIWF8fDUhPT1hLnRhZyYmNiE9PWEudGFnJiYxMyE9PWEudGFnJiYzIT09YS50YWc/bnVsbDphfWZ1bmN0aW9uIHVlKGEpe2lmKDU9PT1hLnRhZ3x8Nj09PWEudGFnKXJldHVybiBhLnN0YXRlTm9kZTt0aHJvdyBFcnJvcih5KDMzKSk7fWZ1bmN0aW9uIERiKGEpe3JldHVybiBhW3hmXXx8bnVsbH1cbmZ1bmN0aW9uICRlKGEpe3ZhciBiPWFbeWZdO3ZvaWQgMD09PWImJihiPWFbeWZdPW5ldyBTZXQpO3JldHVybiBifXZhciB6Zj1bXSxBZj0tMTtmdW5jdGlvbiBCZihhKXtyZXR1cm57Y3VycmVudDphfX1mdW5jdGlvbiBIKGEpezA+QWZ8fChhLmN1cnJlbnQ9emZbQWZdLHpmW0FmXT1udWxsLEFmLS0pfWZ1bmN0aW9uIEkoYSxiKXtBZisrO3pmW0FmXT1hLmN1cnJlbnQ7YS5jdXJyZW50PWJ9dmFyIENmPXt9LE09QmYoQ2YpLE49QmYoITEpLERmPUNmO1xuZnVuY3Rpb24gRWYoYSxiKXt2YXIgYz1hLnR5cGUuY29udGV4dFR5cGVzO2lmKCFjKXJldHVybiBDZjt2YXIgZD1hLnN0YXRlTm9kZTtpZihkJiZkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9PT1iKXJldHVybiBkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O3ZhciBlPXt9LGY7Zm9yKGYgaW4gYyllW2ZdPWJbZl07ZCYmKGE9YS5zdGF0ZU5vZGUsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PWIsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1lKTtyZXR1cm4gZX1mdW5jdGlvbiBGZihhKXthPWEuY2hpbGRDb250ZXh0VHlwZXM7cmV0dXJuIG51bGwhPT1hJiZ2b2lkIDAhPT1hfWZ1bmN0aW9uIEdmKCl7SChOKTtIKE0pfWZ1bmN0aW9uIEhmKGEsYixjKXtpZihNLmN1cnJlbnQhPT1DZil0aHJvdyBFcnJvcih5KDE2OCkpO0koTSxiKTtJKE4sYyl9XG5mdW5jdGlvbiBJZihhLGIsYyl7dmFyIGQ9YS5zdGF0ZU5vZGU7YT1iLmNoaWxkQ29udGV4dFR5cGVzO2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBkLmdldENoaWxkQ29udGV4dClyZXR1cm4gYztkPWQuZ2V0Q2hpbGRDb250ZXh0KCk7Zm9yKHZhciBlIGluIGQpaWYoIShlIGluIGEpKXRocm93IEVycm9yKHkoMTA4LFJhKGIpfHxcIlVua25vd25cIixlKSk7cmV0dXJuIG0oe30sYyxkKX1mdW5jdGlvbiBKZihhKXthPShhPWEuc3RhdGVOb2RlKSYmYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dHx8Q2Y7RGY9TS5jdXJyZW50O0koTSxhKTtJKE4sTi5jdXJyZW50KTtyZXR1cm4hMH1mdW5jdGlvbiBLZihhLGIsYyl7dmFyIGQ9YS5zdGF0ZU5vZGU7aWYoIWQpdGhyb3cgRXJyb3IoeSgxNjkpKTtjPyhhPUlmKGEsYixEZiksZC5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dD1hLEgoTiksSChNKSxJKE0sYSkpOkgoTik7SShOLGMpfVxudmFyIExmPW51bGwsTWY9bnVsbCxOZj1yLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSxPZj1yLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssUGY9ci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxRZj1yLnVuc3RhYmxlX3Nob3VsZFlpZWxkLFJmPXIudW5zdGFibGVfcmVxdWVzdFBhaW50LFNmPXIudW5zdGFibGVfbm93LFRmPXIudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsVWY9ci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxWZj1yLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFdmPXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksWGY9ci51bnN0YWJsZV9Mb3dQcmlvcml0eSxZZj1yLnVuc3RhYmxlX0lkbGVQcmlvcml0eSxaZj17fSwkZj12b2lkIDAhPT1SZj9SZjpmdW5jdGlvbigpe30sYWc9bnVsbCxiZz1udWxsLGNnPSExLGRnPVNmKCksTz0xRTQ+ZGc/U2Y6ZnVuY3Rpb24oKXtyZXR1cm4gU2YoKS1kZ307XG5mdW5jdGlvbiBlZygpe3N3aXRjaChUZigpKXtjYXNlIFVmOnJldHVybiA5OTtjYXNlIFZmOnJldHVybiA5ODtjYXNlIFdmOnJldHVybiA5NztjYXNlIFhmOnJldHVybiA5NjtjYXNlIFlmOnJldHVybiA5NTtkZWZhdWx0OnRocm93IEVycm9yKHkoMzMyKSk7fX1mdW5jdGlvbiBmZyhhKXtzd2l0Y2goYSl7Y2FzZSA5OTpyZXR1cm4gVWY7Y2FzZSA5ODpyZXR1cm4gVmY7Y2FzZSA5NzpyZXR1cm4gV2Y7Y2FzZSA5NjpyZXR1cm4gWGY7Y2FzZSA5NTpyZXR1cm4gWWY7ZGVmYXVsdDp0aHJvdyBFcnJvcih5KDMzMikpO319ZnVuY3Rpb24gZ2coYSxiKXthPWZnKGEpO3JldHVybiBOZihhLGIpfWZ1bmN0aW9uIGhnKGEsYixjKXthPWZnKGEpO3JldHVybiBPZihhLGIsYyl9ZnVuY3Rpb24gaWcoKXtpZihudWxsIT09Ymcpe3ZhciBhPWJnO2JnPW51bGw7UGYoYSl9amcoKX1cbmZ1bmN0aW9uIGpnKCl7aWYoIWNnJiZudWxsIT09YWcpe2NnPSEwO3ZhciBhPTA7dHJ5e3ZhciBiPWFnO2dnKDk5LGZ1bmN0aW9uKCl7Zm9yKDthPGIubGVuZ3RoO2ErKyl7dmFyIGM9YlthXTtkbyBjPWMoITApO3doaWxlKG51bGwhPT1jKX19KTthZz1udWxsfWNhdGNoKGMpe3Rocm93IG51bGwhPT1hZyYmKGFnPWFnLnNsaWNlKGErMSkpLE9mKFVmLGlnKSxjO31maW5hbGx5e2NnPSExfX19dmFyIGtnPXJhLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO2Z1bmN0aW9uIGxnKGEsYil7aWYoYSYmYS5kZWZhdWx0UHJvcHMpe2I9bSh7fSxiKTthPWEuZGVmYXVsdFByb3BzO2Zvcih2YXIgYyBpbiBhKXZvaWQgMD09PWJbY10mJihiW2NdPWFbY10pO3JldHVybiBifXJldHVybiBifXZhciBtZz1CZihudWxsKSxuZz1udWxsLG9nPW51bGwscGc9bnVsbDtmdW5jdGlvbiBxZygpe3BnPW9nPW5nPW51bGx9XG5mdW5jdGlvbiByZyhhKXt2YXIgYj1tZy5jdXJyZW50O0gobWcpO2EudHlwZS5fY29udGV4dC5fY3VycmVudFZhbHVlPWJ9ZnVuY3Rpb24gc2coYSxiKXtmb3IoO251bGwhPT1hOyl7dmFyIGM9YS5hbHRlcm5hdGU7aWYoKGEuY2hpbGRMYW5lcyZiKT09PWIpaWYobnVsbD09PWN8fChjLmNoaWxkTGFuZXMmYik9PT1iKWJyZWFrO2Vsc2UgYy5jaGlsZExhbmVzfD1iO2Vsc2UgYS5jaGlsZExhbmVzfD1iLG51bGwhPT1jJiYoYy5jaGlsZExhbmVzfD1iKTthPWEucmV0dXJufX1mdW5jdGlvbiB0ZyhhLGIpe25nPWE7cGc9b2c9bnVsbDthPWEuZGVwZW5kZW5jaWVzO251bGwhPT1hJiZudWxsIT09YS5maXJzdENvbnRleHQmJigwIT09KGEubGFuZXMmYikmJih1Zz0hMCksYS5maXJzdENvbnRleHQ9bnVsbCl9XG5mdW5jdGlvbiB2ZyhhLGIpe2lmKHBnIT09YSYmITEhPT1iJiYwIT09Yil7aWYoXCJudW1iZXJcIiE9PXR5cGVvZiBifHwxMDczNzQxODIzPT09YilwZz1hLGI9MTA3Mzc0MTgyMztiPXtjb250ZXh0OmEsb2JzZXJ2ZWRCaXRzOmIsbmV4dDpudWxsfTtpZihudWxsPT09b2cpe2lmKG51bGw9PT1uZyl0aHJvdyBFcnJvcih5KDMwOCkpO29nPWI7bmcuZGVwZW5kZW5jaWVzPXtsYW5lczowLGZpcnN0Q29udGV4dDpiLHJlc3BvbmRlcnM6bnVsbH19ZWxzZSBvZz1vZy5uZXh0PWJ9cmV0dXJuIGEuX2N1cnJlbnRWYWx1ZX12YXIgd2c9ITE7ZnVuY3Rpb24geGcoYSl7YS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmEubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsfSxlZmZlY3RzOm51bGx9fVxuZnVuY3Rpb24geWcoYSxiKXthPWEudXBkYXRlUXVldWU7Yi51cGRhdGVRdWV1ZT09PWEmJihiLnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6YS5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmEuZmlyc3RCYXNlVXBkYXRlLGxhc3RCYXNlVXBkYXRlOmEubGFzdEJhc2VVcGRhdGUsc2hhcmVkOmEuc2hhcmVkLGVmZmVjdHM6YS5lZmZlY3RzfSl9ZnVuY3Rpb24gemcoYSxiKXtyZXR1cm57ZXZlbnRUaW1lOmEsbGFuZTpiLHRhZzowLHBheWxvYWQ6bnVsbCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH19ZnVuY3Rpb24gQWcoYSxiKXthPWEudXBkYXRlUXVldWU7aWYobnVsbCE9PWEpe2E9YS5zaGFyZWQ7dmFyIGM9YS5wZW5kaW5nO251bGw9PT1jP2IubmV4dD1iOihiLm5leHQ9Yy5uZXh0LGMubmV4dD1iKTthLnBlbmRpbmc9Yn19XG5mdW5jdGlvbiBCZyhhLGIpe3ZhciBjPWEudXBkYXRlUXVldWUsZD1hLmFsdGVybmF0ZTtpZihudWxsIT09ZCYmKGQ9ZC51cGRhdGVRdWV1ZSxjPT09ZCkpe3ZhciBlPW51bGwsZj1udWxsO2M9Yy5maXJzdEJhc2VVcGRhdGU7aWYobnVsbCE9PWMpe2Rve3ZhciBnPXtldmVudFRpbWU6Yy5ldmVudFRpbWUsbGFuZTpjLmxhbmUsdGFnOmMudGFnLHBheWxvYWQ6Yy5wYXlsb2FkLGNhbGxiYWNrOmMuY2FsbGJhY2ssbmV4dDpudWxsfTtudWxsPT09Zj9lPWY9ZzpmPWYubmV4dD1nO2M9Yy5uZXh0fXdoaWxlKG51bGwhPT1jKTtudWxsPT09Zj9lPWY9YjpmPWYubmV4dD1ifWVsc2UgZT1mPWI7Yz17YmFzZVN0YXRlOmQuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTplLGxhc3RCYXNlVXBkYXRlOmYsc2hhcmVkOmQuc2hhcmVkLGVmZmVjdHM6ZC5lZmZlY3RzfTthLnVwZGF0ZVF1ZXVlPWM7cmV0dXJufWE9Yy5sYXN0QmFzZVVwZGF0ZTtudWxsPT09YT9jLmZpcnN0QmFzZVVwZGF0ZT1iOmEubmV4dD1cbmI7Yy5sYXN0QmFzZVVwZGF0ZT1ifVxuZnVuY3Rpb24gQ2coYSxiLGMsZCl7dmFyIGU9YS51cGRhdGVRdWV1ZTt3Zz0hMTt2YXIgZj1lLmZpcnN0QmFzZVVwZGF0ZSxnPWUubGFzdEJhc2VVcGRhdGUsaD1lLnNoYXJlZC5wZW5kaW5nO2lmKG51bGwhPT1oKXtlLnNoYXJlZC5wZW5kaW5nPW51bGw7dmFyIGs9aCxsPWsubmV4dDtrLm5leHQ9bnVsbDtudWxsPT09Zz9mPWw6Zy5uZXh0PWw7Zz1rO3ZhciBuPWEuYWx0ZXJuYXRlO2lmKG51bGwhPT1uKXtuPW4udXBkYXRlUXVldWU7dmFyIEE9bi5sYXN0QmFzZVVwZGF0ZTtBIT09ZyYmKG51bGw9PT1BP24uZmlyc3RCYXNlVXBkYXRlPWw6QS5uZXh0PWwsbi5sYXN0QmFzZVVwZGF0ZT1rKX19aWYobnVsbCE9PWYpe0E9ZS5iYXNlU3RhdGU7Zz0wO249bD1rPW51bGw7ZG97aD1mLmxhbmU7dmFyIHA9Zi5ldmVudFRpbWU7aWYoKGQmaCk9PT1oKXtudWxsIT09biYmKG49bi5uZXh0PXtldmVudFRpbWU6cCxsYW5lOjAsdGFnOmYudGFnLHBheWxvYWQ6Zi5wYXlsb2FkLGNhbGxiYWNrOmYuY2FsbGJhY2ssXG5uZXh0Om51bGx9KTthOnt2YXIgQz1hLHg9ZjtoPWI7cD1jO3N3aXRjaCh4LnRhZyl7Y2FzZSAxOkM9eC5wYXlsb2FkO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBDKXtBPUMuY2FsbChwLEEsaCk7YnJlYWsgYX1BPUM7YnJlYWsgYTtjYXNlIDM6Qy5mbGFncz1DLmZsYWdzJi00MDk3fDY0O2Nhc2UgMDpDPXgucGF5bG9hZDtoPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBDP0MuY2FsbChwLEEsaCk6QztpZihudWxsPT09aHx8dm9pZCAwPT09aClicmVhayBhO0E9bSh7fSxBLGgpO2JyZWFrIGE7Y2FzZSAyOndnPSEwfX1udWxsIT09Zi5jYWxsYmFjayYmKGEuZmxhZ3N8PTMyLGg9ZS5lZmZlY3RzLG51bGw9PT1oP2UuZWZmZWN0cz1bZl06aC5wdXNoKGYpKX1lbHNlIHA9e2V2ZW50VGltZTpwLGxhbmU6aCx0YWc6Zi50YWcscGF5bG9hZDpmLnBheWxvYWQsY2FsbGJhY2s6Zi5jYWxsYmFjayxuZXh0Om51bGx9LG51bGw9PT1uPyhsPW49cCxrPUEpOm49bi5uZXh0PXAsZ3w9aDtmPWYubmV4dDtpZihudWxsPT09XG5mKWlmKGg9ZS5zaGFyZWQucGVuZGluZyxudWxsPT09aClicmVhaztlbHNlIGY9aC5uZXh0LGgubmV4dD1udWxsLGUubGFzdEJhc2VVcGRhdGU9aCxlLnNoYXJlZC5wZW5kaW5nPW51bGx9d2hpbGUoMSk7bnVsbD09PW4mJihrPUEpO2UuYmFzZVN0YXRlPWs7ZS5maXJzdEJhc2VVcGRhdGU9bDtlLmxhc3RCYXNlVXBkYXRlPW47RGd8PWc7YS5sYW5lcz1nO2EubWVtb2l6ZWRTdGF0ZT1BfX1mdW5jdGlvbiBFZyhhLGIsYyl7YT1iLmVmZmVjdHM7Yi5lZmZlY3RzPW51bGw7aWYobnVsbCE9PWEpZm9yKGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGQ9YVtiXSxlPWQuY2FsbGJhY2s7aWYobnVsbCE9PWUpe2QuY2FsbGJhY2s9bnVsbDtkPWM7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIGUpdGhyb3cgRXJyb3IoeSgxOTEsZSkpO2UuY2FsbChkKX19fXZhciBGZz0obmV3IGFhLkNvbXBvbmVudCkucmVmcztcbmZ1bmN0aW9uIEdnKGEsYixjLGQpe2I9YS5tZW1vaXplZFN0YXRlO2M9YyhkLGIpO2M9bnVsbD09PWN8fHZvaWQgMD09PWM/YjptKHt9LGIsYyk7YS5tZW1vaXplZFN0YXRlPWM7MD09PWEubGFuZXMmJihhLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1jKX1cbnZhciBLZz17aXNNb3VudGVkOmZ1bmN0aW9uKGEpe3JldHVybihhPWEuX3JlYWN0SW50ZXJuYWxzKT9aYihhKT09PWE6ITF9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihhLGIsYyl7YT1hLl9yZWFjdEludGVybmFsczt2YXIgZD1IZygpLGU9SWcoYSksZj16ZyhkLGUpO2YucGF5bG9hZD1iO3ZvaWQgMCE9PWMmJm51bGwhPT1jJiYoZi5jYWxsYmFjaz1jKTtBZyhhLGYpO0pnKGEsZSxkKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihhLGIsYyl7YT1hLl9yZWFjdEludGVybmFsczt2YXIgZD1IZygpLGU9SWcoYSksZj16ZyhkLGUpO2YudGFnPTE7Zi5wYXlsb2FkPWI7dm9pZCAwIT09YyYmbnVsbCE9PWMmJihmLmNhbGxiYWNrPWMpO0FnKGEsZik7SmcoYSxlLGQpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oYSxiKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBjPUhnKCksZD1JZyhhKSxlPXpnKGMsZCk7ZS50YWc9Mjt2b2lkIDAhPT1iJiZudWxsIT09YiYmKGUuY2FsbGJhY2s9XG5iKTtBZyhhLGUpO0pnKGEsZCxjKX19O2Z1bmN0aW9uIExnKGEsYixjLGQsZSxmLGcpe2E9YS5zdGF0ZU5vZGU7cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGEuc2hvdWxkQ29tcG9uZW50VXBkYXRlP2Euc2hvdWxkQ29tcG9uZW50VXBkYXRlKGQsZixnKTpiLnByb3RvdHlwZSYmYi5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQ/IUplKGMsZCl8fCFKZShlLGYpOiEwfVxuZnVuY3Rpb24gTWcoYSxiLGMpe3ZhciBkPSExLGU9Q2Y7dmFyIGY9Yi5jb250ZXh0VHlwZTtcIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mP2Y9dmcoZik6KGU9RmYoYik/RGY6TS5jdXJyZW50LGQ9Yi5jb250ZXh0VHlwZXMsZj0oZD1udWxsIT09ZCYmdm9pZCAwIT09ZCk/RWYoYSxlKTpDZik7Yj1uZXcgYihjLGYpO2EubWVtb2l6ZWRTdGF0ZT1udWxsIT09Yi5zdGF0ZSYmdm9pZCAwIT09Yi5zdGF0ZT9iLnN0YXRlOm51bGw7Yi51cGRhdGVyPUtnO2Euc3RhdGVOb2RlPWI7Yi5fcmVhY3RJbnRlcm5hbHM9YTtkJiYoYT1hLnN0YXRlTm9kZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9ZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWYpO3JldHVybiBifVxuZnVuY3Rpb24gTmcoYSxiLGMsZCl7YT1iLnN0YXRlO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJmIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhjLGQpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZiLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGMsZCk7Yi5zdGF0ZSE9PWEmJktnLmVucXVldWVSZXBsYWNlU3RhdGUoYixiLnN0YXRlLG51bGwpfVxuZnVuY3Rpb24gT2coYSxiLGMsZCl7dmFyIGU9YS5zdGF0ZU5vZGU7ZS5wcm9wcz1jO2Uuc3RhdGU9YS5tZW1vaXplZFN0YXRlO2UucmVmcz1GZzt4ZyhhKTt2YXIgZj1iLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWY/ZS5jb250ZXh0PXZnKGYpOihmPUZmKGIpP0RmOk0uY3VycmVudCxlLmNvbnRleHQ9RWYoYSxmKSk7Q2coYSxjLGUsZCk7ZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGU7Zj1iLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcImZ1bmN0aW9uXCI9PT10eXBlb2YgZiYmKEdnKGEsYixmLGMpLGUuc3RhdGU9YS5tZW1vaXplZFN0YXRlKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHN8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZS5jb21wb25lbnRXaWxsTW91bnR8fFxuKGI9ZS5zdGF0ZSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5jb21wb25lbnRXaWxsTW91bnQmJmUuY29tcG9uZW50V2lsbE1vdW50KCksXCJmdW5jdGlvblwiPT09dHlwZW9mIGUuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksYiE9PWUuc3RhdGUmJktnLmVucXVldWVSZXBsYWNlU3RhdGUoZSxlLnN0YXRlLG51bGwpLENnKGEsYyxlLGQpLGUuc3RhdGU9YS5tZW1vaXplZFN0YXRlKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5jb21wb25lbnREaWRNb3VudCYmKGEuZmxhZ3N8PTQpfXZhciBQZz1BcnJheS5pc0FycmF5O1xuZnVuY3Rpb24gUWcoYSxiLGMpe2E9Yy5yZWY7aWYobnVsbCE9PWEmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBhJiZcIm9iamVjdFwiIT09dHlwZW9mIGEpe2lmKGMuX293bmVyKXtjPWMuX293bmVyO2lmKGMpe2lmKDEhPT1jLnRhZyl0aHJvdyBFcnJvcih5KDMwOSkpO3ZhciBkPWMuc3RhdGVOb2RlfWlmKCFkKXRocm93IEVycm9yKHkoMTQ3LGEpKTt2YXIgZT1cIlwiK2E7aWYobnVsbCE9PWImJm51bGwhPT1iLnJlZiYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGIucmVmJiZiLnJlZi5fc3RyaW5nUmVmPT09ZSlyZXR1cm4gYi5yZWY7Yj1mdW5jdGlvbihhKXt2YXIgYj1kLnJlZnM7Yj09PUZnJiYoYj1kLnJlZnM9e30pO251bGw9PT1hP2RlbGV0ZSBiW2VdOmJbZV09YX07Yi5fc3RyaW5nUmVmPWU7cmV0dXJuIGJ9aWYoXCJzdHJpbmdcIiE9PXR5cGVvZiBhKXRocm93IEVycm9yKHkoMjg0KSk7aWYoIWMuX293bmVyKXRocm93IEVycm9yKHkoMjkwLGEpKTt9cmV0dXJuIGF9XG5mdW5jdGlvbiBSZyhhLGIpe2lmKFwidGV4dGFyZWFcIiE9PWEudHlwZSl0aHJvdyBFcnJvcih5KDMxLFwiW29iamVjdCBPYmplY3RdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYik/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhiKS5qb2luKFwiLCBcIikrXCJ9XCI6YikpO31cbmZ1bmN0aW9uIFNnKGEpe2Z1bmN0aW9uIGIoYixjKXtpZihhKXt2YXIgZD1iLmxhc3RFZmZlY3Q7bnVsbCE9PWQ/KGQubmV4dEVmZmVjdD1jLGIubGFzdEVmZmVjdD1jKTpiLmZpcnN0RWZmZWN0PWIubGFzdEVmZmVjdD1jO2MubmV4dEVmZmVjdD1udWxsO2MuZmxhZ3M9OH19ZnVuY3Rpb24gYyhjLGQpe2lmKCFhKXJldHVybiBudWxsO2Zvcig7bnVsbCE9PWQ7KWIoYyxkKSxkPWQuc2libGluZztyZXR1cm4gbnVsbH1mdW5jdGlvbiBkKGEsYil7Zm9yKGE9bmV3IE1hcDtudWxsIT09YjspbnVsbCE9PWIua2V5P2Euc2V0KGIua2V5LGIpOmEuc2V0KGIuaW5kZXgsYiksYj1iLnNpYmxpbmc7cmV0dXJuIGF9ZnVuY3Rpb24gZShhLGIpe2E9VGcoYSxiKTthLmluZGV4PTA7YS5zaWJsaW5nPW51bGw7cmV0dXJuIGF9ZnVuY3Rpb24gZihiLGMsZCl7Yi5pbmRleD1kO2lmKCFhKXJldHVybiBjO2Q9Yi5hbHRlcm5hdGU7aWYobnVsbCE9PWQpcmV0dXJuIGQ9ZC5pbmRleCxkPGM/KGIuZmxhZ3M9MixcbmMpOmQ7Yi5mbGFncz0yO3JldHVybiBjfWZ1bmN0aW9uIGcoYil7YSYmbnVsbD09PWIuYWx0ZXJuYXRlJiYoYi5mbGFncz0yKTtyZXR1cm4gYn1mdW5jdGlvbiBoKGEsYixjLGQpe2lmKG51bGw9PT1ifHw2IT09Yi50YWcpcmV0dXJuIGI9VWcoYyxhLm1vZGUsZCksYi5yZXR1cm49YSxiO2I9ZShiLGMpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gayhhLGIsYyxkKXtpZihudWxsIT09YiYmYi5lbGVtZW50VHlwZT09PWMudHlwZSlyZXR1cm4gZD1lKGIsYy5wcm9wcyksZC5yZWY9UWcoYSxiLGMpLGQucmV0dXJuPWEsZDtkPVZnKGMudHlwZSxjLmtleSxjLnByb3BzLG51bGwsYS5tb2RlLGQpO2QucmVmPVFnKGEsYixjKTtkLnJldHVybj1hO3JldHVybiBkfWZ1bmN0aW9uIGwoYSxiLGMsZCl7aWYobnVsbD09PWJ8fDQhPT1iLnRhZ3x8Yi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PWMuY29udGFpbmVySW5mb3x8Yi5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1jLmltcGxlbWVudGF0aW9uKXJldHVybiBiPVxuV2coYyxhLm1vZGUsZCksYi5yZXR1cm49YSxiO2I9ZShiLGMuY2hpbGRyZW58fFtdKTtiLnJldHVybj1hO3JldHVybiBifWZ1bmN0aW9uIG4oYSxiLGMsZCxmKXtpZihudWxsPT09Ynx8NyE9PWIudGFnKXJldHVybiBiPVhnKGMsYS5tb2RlLGQsZiksYi5yZXR1cm49YSxiO2I9ZShiLGMpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gQShhLGIsYyl7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBifHxcIm51bWJlclwiPT09dHlwZW9mIGIpcmV0dXJuIGI9VWcoXCJcIitiLGEubW9kZSxjKSxiLnJldHVybj1hLGI7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBiJiZudWxsIT09Yil7c3dpdGNoKGIuJCR0eXBlb2Ype2Nhc2Ugc2E6cmV0dXJuIGM9VmcoYi50eXBlLGIua2V5LGIucHJvcHMsbnVsbCxhLm1vZGUsYyksYy5yZWY9UWcoYSxudWxsLGIpLGMucmV0dXJuPWEsYztjYXNlIHRhOnJldHVybiBiPVdnKGIsYS5tb2RlLGMpLGIucmV0dXJuPWEsYn1pZihQZyhiKXx8TGEoYikpcmV0dXJuIGI9WGcoYixcbmEubW9kZSxjLG51bGwpLGIucmV0dXJuPWEsYjtSZyhhLGIpfXJldHVybiBudWxsfWZ1bmN0aW9uIHAoYSxiLGMsZCl7dmFyIGU9bnVsbCE9PWI/Yi5rZXk6bnVsbDtpZihcInN0cmluZ1wiPT09dHlwZW9mIGN8fFwibnVtYmVyXCI9PT10eXBlb2YgYylyZXR1cm4gbnVsbCE9PWU/bnVsbDpoKGEsYixcIlwiK2MsZCk7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBjJiZudWxsIT09Yyl7c3dpdGNoKGMuJCR0eXBlb2Ype2Nhc2Ugc2E6cmV0dXJuIGMua2V5PT09ZT9jLnR5cGU9PT11YT9uKGEsYixjLnByb3BzLmNoaWxkcmVuLGQsZSk6ayhhLGIsYyxkKTpudWxsO2Nhc2UgdGE6cmV0dXJuIGMua2V5PT09ZT9sKGEsYixjLGQpOm51bGx9aWYoUGcoYyl8fExhKGMpKXJldHVybiBudWxsIT09ZT9udWxsOm4oYSxiLGMsZCxudWxsKTtSZyhhLGMpfXJldHVybiBudWxsfWZ1bmN0aW9uIEMoYSxiLGMsZCxlKXtpZihcInN0cmluZ1wiPT09dHlwZW9mIGR8fFwibnVtYmVyXCI9PT10eXBlb2YgZClyZXR1cm4gYT1hLmdldChjKXx8XG5udWxsLGgoYixhLFwiXCIrZCxlKTtpZihcIm9iamVjdFwiPT09dHlwZW9mIGQmJm51bGwhPT1kKXtzd2l0Y2goZC4kJHR5cGVvZil7Y2FzZSBzYTpyZXR1cm4gYT1hLmdldChudWxsPT09ZC5rZXk/YzpkLmtleSl8fG51bGwsZC50eXBlPT09dWE/bihiLGEsZC5wcm9wcy5jaGlsZHJlbixlLGQua2V5KTprKGIsYSxkLGUpO2Nhc2UgdGE6cmV0dXJuIGE9YS5nZXQobnVsbD09PWQua2V5P2M6ZC5rZXkpfHxudWxsLGwoYixhLGQsZSl9aWYoUGcoZCl8fExhKGQpKXJldHVybiBhPWEuZ2V0KGMpfHxudWxsLG4oYixhLGQsZSxudWxsKTtSZyhiLGQpfXJldHVybiBudWxsfWZ1bmN0aW9uIHgoZSxnLGgsayl7Zm9yKHZhciBsPW51bGwsdD1udWxsLHU9Zyx6PWc9MCxxPW51bGw7bnVsbCE9PXUmJno8aC5sZW5ndGg7eisrKXt1LmluZGV4Pno/KHE9dSx1PW51bGwpOnE9dS5zaWJsaW5nO3ZhciBuPXAoZSx1LGhbel0sayk7aWYobnVsbD09PW4pe251bGw9PT11JiYodT1xKTticmVha31hJiZ1JiZudWxsPT09XG5uLmFsdGVybmF0ZSYmYihlLHUpO2c9ZihuLGcseik7bnVsbD09PXQ/bD1uOnQuc2libGluZz1uO3Q9bjt1PXF9aWYoej09PWgubGVuZ3RoKXJldHVybiBjKGUsdSksbDtpZihudWxsPT09dSl7Zm9yKDt6PGgubGVuZ3RoO3orKyl1PUEoZSxoW3pdLGspLG51bGwhPT11JiYoZz1mKHUsZyx6KSxudWxsPT09dD9sPXU6dC5zaWJsaW5nPXUsdD11KTtyZXR1cm4gbH1mb3IodT1kKGUsdSk7ejxoLmxlbmd0aDt6KyspcT1DKHUsZSx6LGhbel0sayksbnVsbCE9PXEmJihhJiZudWxsIT09cS5hbHRlcm5hdGUmJnUuZGVsZXRlKG51bGw9PT1xLmtleT96OnEua2V5KSxnPWYocSxnLHopLG51bGw9PT10P2w9cTp0LnNpYmxpbmc9cSx0PXEpO2EmJnUuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYihlLGEpfSk7cmV0dXJuIGx9ZnVuY3Rpb24gdyhlLGcsaCxrKXt2YXIgbD1MYShoKTtpZihcImZ1bmN0aW9uXCIhPT10eXBlb2YgbCl0aHJvdyBFcnJvcih5KDE1MCkpO2g9bC5jYWxsKGgpO2lmKG51bGw9PVxuaCl0aHJvdyBFcnJvcih5KDE1MSkpO2Zvcih2YXIgdD1sPW51bGwsdT1nLHo9Zz0wLHE9bnVsbCxuPWgubmV4dCgpO251bGwhPT11JiYhbi5kb25lO3orKyxuPWgubmV4dCgpKXt1LmluZGV4Pno/KHE9dSx1PW51bGwpOnE9dS5zaWJsaW5nO3ZhciB3PXAoZSx1LG4udmFsdWUsayk7aWYobnVsbD09PXcpe251bGw9PT11JiYodT1xKTticmVha31hJiZ1JiZudWxsPT09dy5hbHRlcm5hdGUmJmIoZSx1KTtnPWYodyxnLHopO251bGw9PT10P2w9dzp0LnNpYmxpbmc9dzt0PXc7dT1xfWlmKG4uZG9uZSlyZXR1cm4gYyhlLHUpLGw7aWYobnVsbD09PXUpe2Zvcig7IW4uZG9uZTt6Kyssbj1oLm5leHQoKSluPUEoZSxuLnZhbHVlLGspLG51bGwhPT1uJiYoZz1mKG4sZyx6KSxudWxsPT09dD9sPW46dC5zaWJsaW5nPW4sdD1uKTtyZXR1cm4gbH1mb3IodT1kKGUsdSk7IW4uZG9uZTt6Kyssbj1oLm5leHQoKSluPUModSxlLHosbi52YWx1ZSxrKSxudWxsIT09biYmKGEmJm51bGwhPT1uLmFsdGVybmF0ZSYmXG51LmRlbGV0ZShudWxsPT09bi5rZXk/ejpuLmtleSksZz1mKG4sZyx6KSxudWxsPT09dD9sPW46dC5zaWJsaW5nPW4sdD1uKTthJiZ1LmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGIoZSxhKX0pO3JldHVybiBsfXJldHVybiBmdW5jdGlvbihhLGQsZixoKXt2YXIgaz1cIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mJiZmLnR5cGU9PT11YSYmbnVsbD09PWYua2V5O2smJihmPWYucHJvcHMuY2hpbGRyZW4pO3ZhciBsPVwib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWY7aWYobClzd2l0Y2goZi4kJHR5cGVvZil7Y2FzZSBzYTphOntsPWYua2V5O2ZvcihrPWQ7bnVsbCE9PWs7KXtpZihrLmtleT09PWwpe3N3aXRjaChrLnRhZyl7Y2FzZSA3OmlmKGYudHlwZT09PXVhKXtjKGEsay5zaWJsaW5nKTtkPWUoayxmLnByb3BzLmNoaWxkcmVuKTtkLnJldHVybj1hO2E9ZDticmVhayBhfWJyZWFrO2RlZmF1bHQ6aWYoay5lbGVtZW50VHlwZT09PWYudHlwZSl7YyhhLGsuc2libGluZyk7XG5kPWUoayxmLnByb3BzKTtkLnJlZj1RZyhhLGssZik7ZC5yZXR1cm49YTthPWQ7YnJlYWsgYX19YyhhLGspO2JyZWFrfWVsc2UgYihhLGspO2s9ay5zaWJsaW5nfWYudHlwZT09PXVhPyhkPVhnKGYucHJvcHMuY2hpbGRyZW4sYS5tb2RlLGgsZi5rZXkpLGQucmV0dXJuPWEsYT1kKTooaD1WZyhmLnR5cGUsZi5rZXksZi5wcm9wcyxudWxsLGEubW9kZSxoKSxoLnJlZj1RZyhhLGQsZiksaC5yZXR1cm49YSxhPWgpfXJldHVybiBnKGEpO2Nhc2UgdGE6YTp7Zm9yKGs9Zi5rZXk7bnVsbCE9PWQ7KXtpZihkLmtleT09PWspaWYoND09PWQudGFnJiZkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvPT09Zi5jb250YWluZXJJbmZvJiZkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbj09PWYuaW1wbGVtZW50YXRpb24pe2MoYSxkLnNpYmxpbmcpO2Q9ZShkLGYuY2hpbGRyZW58fFtdKTtkLnJldHVybj1hO2E9ZDticmVhayBhfWVsc2V7YyhhLGQpO2JyZWFrfWVsc2UgYihhLGQpO2Q9ZC5zaWJsaW5nfWQ9XG5XZyhmLGEubW9kZSxoKTtkLnJldHVybj1hO2E9ZH1yZXR1cm4gZyhhKX1pZihcInN0cmluZ1wiPT09dHlwZW9mIGZ8fFwibnVtYmVyXCI9PT10eXBlb2YgZilyZXR1cm4gZj1cIlwiK2YsbnVsbCE9PWQmJjY9PT1kLnRhZz8oYyhhLGQuc2libGluZyksZD1lKGQsZiksZC5yZXR1cm49YSxhPWQpOihjKGEsZCksZD1VZyhmLGEubW9kZSxoKSxkLnJldHVybj1hLGE9ZCksZyhhKTtpZihQZyhmKSlyZXR1cm4geChhLGQsZixoKTtpZihMYShmKSlyZXR1cm4gdyhhLGQsZixoKTtsJiZSZyhhLGYpO2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgZiYmIWspc3dpdGNoKGEudGFnKXtjYXNlIDE6Y2FzZSAyMjpjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnRocm93IEVycm9yKHkoMTUyLFJhKGEudHlwZSl8fFwiQ29tcG9uZW50XCIpKTt9cmV0dXJuIGMoYSxkKX19dmFyIFlnPVNnKCEwKSxaZz1TZyghMSksJGc9e30sYWg9QmYoJGcpLGJoPUJmKCRnKSxjaD1CZigkZyk7XG5mdW5jdGlvbiBkaChhKXtpZihhPT09JGcpdGhyb3cgRXJyb3IoeSgxNzQpKTtyZXR1cm4gYX1mdW5jdGlvbiBlaChhLGIpe0koY2gsYik7SShiaCxhKTtJKGFoLCRnKTthPWIubm9kZVR5cGU7c3dpdGNoKGEpe2Nhc2UgOTpjYXNlIDExOmI9KGI9Yi5kb2N1bWVudEVsZW1lbnQpP2IubmFtZXNwYWNlVVJJOm1iKG51bGwsXCJcIik7YnJlYWs7ZGVmYXVsdDphPTg9PT1hP2IucGFyZW50Tm9kZTpiLGI9YS5uYW1lc3BhY2VVUkl8fG51bGwsYT1hLnRhZ05hbWUsYj1tYihiLGEpfUgoYWgpO0koYWgsYil9ZnVuY3Rpb24gZmgoKXtIKGFoKTtIKGJoKTtIKGNoKX1mdW5jdGlvbiBnaChhKXtkaChjaC5jdXJyZW50KTt2YXIgYj1kaChhaC5jdXJyZW50KTt2YXIgYz1tYihiLGEudHlwZSk7YiE9PWMmJihJKGJoLGEpLEkoYWgsYykpfWZ1bmN0aW9uIGhoKGEpe2JoLmN1cnJlbnQ9PT1hJiYoSChhaCksSChiaCkpfXZhciBQPUJmKDApO1xuZnVuY3Rpb24gaWgoYSl7Zm9yKHZhciBiPWE7bnVsbCE9PWI7KXtpZigxMz09PWIudGFnKXt2YXIgYz1iLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWMmJihjPWMuZGVoeWRyYXRlZCxudWxsPT09Y3x8XCIkP1wiPT09Yy5kYXRhfHxcIiQhXCI9PT1jLmRhdGEpKXJldHVybiBifWVsc2UgaWYoMTk9PT1iLnRhZyYmdm9pZCAwIT09Yi5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyKXtpZigwIT09KGIuZmxhZ3MmNjQpKXJldHVybiBifWVsc2UgaWYobnVsbCE9PWIuY2hpbGQpe2IuY2hpbGQucmV0dXJuPWI7Yj1iLmNoaWxkO2NvbnRpbnVlfWlmKGI9PT1hKWJyZWFrO2Zvcig7bnVsbD09PWIuc2libGluZzspe2lmKG51bGw9PT1iLnJldHVybnx8Yi5yZXR1cm49PT1hKXJldHVybiBudWxsO2I9Yi5yZXR1cm59Yi5zaWJsaW5nLnJldHVybj1iLnJldHVybjtiPWIuc2libGluZ31yZXR1cm4gbnVsbH12YXIgamg9bnVsbCxraD1udWxsLGxoPSExO1xuZnVuY3Rpb24gbWgoYSxiKXt2YXIgYz1uaCg1LG51bGwsbnVsbCwwKTtjLmVsZW1lbnRUeXBlPVwiREVMRVRFRFwiO2MudHlwZT1cIkRFTEVURURcIjtjLnN0YXRlTm9kZT1iO2MucmV0dXJuPWE7Yy5mbGFncz04O251bGwhPT1hLmxhc3RFZmZlY3Q/KGEubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWMsYS5sYXN0RWZmZWN0PWMpOmEuZmlyc3RFZmZlY3Q9YS5sYXN0RWZmZWN0PWN9ZnVuY3Rpb24gb2goYSxiKXtzd2l0Y2goYS50YWcpe2Nhc2UgNTp2YXIgYz1hLnR5cGU7Yj0xIT09Yi5ub2RlVHlwZXx8Yy50b0xvd2VyQ2FzZSgpIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP251bGw6YjtyZXR1cm4gbnVsbCE9PWI/KGEuc3RhdGVOb2RlPWIsITApOiExO2Nhc2UgNjpyZXR1cm4gYj1cIlwiPT09YS5wZW5kaW5nUHJvcHN8fDMhPT1iLm5vZGVUeXBlP251bGw6YixudWxsIT09Yj8oYS5zdGF0ZU5vZGU9YiwhMCk6ITE7Y2FzZSAxMzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiExfX1cbmZ1bmN0aW9uIHBoKGEpe2lmKGxoKXt2YXIgYj1raDtpZihiKXt2YXIgYz1iO2lmKCFvaChhLGIpKXtiPXJmKGMubmV4dFNpYmxpbmcpO2lmKCFifHwhb2goYSxiKSl7YS5mbGFncz1hLmZsYWdzJi0xMDI1fDI7bGg9ITE7amg9YTtyZXR1cm59bWgoamgsYyl9amg9YTtraD1yZihiLmZpcnN0Q2hpbGQpfWVsc2UgYS5mbGFncz1hLmZsYWdzJi0xMDI1fDIsbGg9ITEsamg9YX19ZnVuY3Rpb24gcWgoYSl7Zm9yKGE9YS5yZXR1cm47bnVsbCE9PWEmJjUhPT1hLnRhZyYmMyE9PWEudGFnJiYxMyE9PWEudGFnOylhPWEucmV0dXJuO2poPWF9XG5mdW5jdGlvbiByaChhKXtpZihhIT09amgpcmV0dXJuITE7aWYoIWxoKXJldHVybiBxaChhKSxsaD0hMCwhMTt2YXIgYj1hLnR5cGU7aWYoNSE9PWEudGFnfHxcImhlYWRcIiE9PWImJlwiYm9keVwiIT09YiYmIW5mKGIsYS5tZW1vaXplZFByb3BzKSlmb3IoYj1raDtiOyltaChhLGIpLGI9cmYoYi5uZXh0U2libGluZyk7cWgoYSk7aWYoMTM9PT1hLnRhZyl7YT1hLm1lbW9pemVkU3RhdGU7YT1udWxsIT09YT9hLmRlaHlkcmF0ZWQ6bnVsbDtpZighYSl0aHJvdyBFcnJvcih5KDMxNykpO2E6e2E9YS5uZXh0U2libGluZztmb3IoYj0wO2E7KXtpZig4PT09YS5ub2RlVHlwZSl7dmFyIGM9YS5kYXRhO2lmKFwiLyRcIj09PWMpe2lmKDA9PT1iKXtraD1yZihhLm5leHRTaWJsaW5nKTticmVhayBhfWItLX1lbHNlXCIkXCIhPT1jJiZcIiQhXCIhPT1jJiZcIiQ/XCIhPT1jfHxiKyt9YT1hLm5leHRTaWJsaW5nfWtoPW51bGx9fWVsc2Uga2g9amg/cmYoYS5zdGF0ZU5vZGUubmV4dFNpYmxpbmcpOm51bGw7cmV0dXJuITB9XG5mdW5jdGlvbiBzaCgpe2toPWpoPW51bGw7bGg9ITF9dmFyIHRoPVtdO2Z1bmN0aW9uIHVoKCl7Zm9yKHZhciBhPTA7YTx0aC5sZW5ndGg7YSsrKXRoW2FdLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PW51bGw7dGgubGVuZ3RoPTB9dmFyIHZoPXJhLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsd2g9cmEuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcseGg9MCxSPW51bGwsUz1udWxsLFQ9bnVsbCx5aD0hMSx6aD0hMTtmdW5jdGlvbiBBaCgpe3Rocm93IEVycm9yKHkoMzIxKSk7fWZ1bmN0aW9uIEJoKGEsYil7aWYobnVsbD09PWIpcmV0dXJuITE7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aCYmYzxhLmxlbmd0aDtjKyspaWYoIUhlKGFbY10sYltjXSkpcmV0dXJuITE7cmV0dXJuITB9XG5mdW5jdGlvbiBDaChhLGIsYyxkLGUsZil7eGg9ZjtSPWI7Yi5tZW1vaXplZFN0YXRlPW51bGw7Yi51cGRhdGVRdWV1ZT1udWxsO2IubGFuZXM9MDt2aC5jdXJyZW50PW51bGw9PT1hfHxudWxsPT09YS5tZW1vaXplZFN0YXRlP0RoOkVoO2E9YyhkLGUpO2lmKHpoKXtmPTA7ZG97emg9ITE7aWYoISgyNT5mKSl0aHJvdyBFcnJvcih5KDMwMSkpO2YrPTE7VD1TPW51bGw7Yi51cGRhdGVRdWV1ZT1udWxsO3ZoLmN1cnJlbnQ9Rmg7YT1jKGQsZSl9d2hpbGUoemgpfXZoLmN1cnJlbnQ9R2g7Yj1udWxsIT09UyYmbnVsbCE9PVMubmV4dDt4aD0wO1Q9Uz1SPW51bGw7eWg9ITE7aWYoYil0aHJvdyBFcnJvcih5KDMwMCkpO3JldHVybiBhfWZ1bmN0aW9uIEhoKCl7dmFyIGE9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxiYXNlUXVldWU6bnVsbCxxdWV1ZTpudWxsLG5leHQ6bnVsbH07bnVsbD09PVQ/Ui5tZW1vaXplZFN0YXRlPVQ9YTpUPVQubmV4dD1hO3JldHVybiBUfVxuZnVuY3Rpb24gSWgoKXtpZihudWxsPT09Uyl7dmFyIGE9Ui5hbHRlcm5hdGU7YT1udWxsIT09YT9hLm1lbW9pemVkU3RhdGU6bnVsbH1lbHNlIGE9Uy5uZXh0O3ZhciBiPW51bGw9PT1UP1IubWVtb2l6ZWRTdGF0ZTpULm5leHQ7aWYobnVsbCE9PWIpVD1iLFM9YTtlbHNle2lmKG51bGw9PT1hKXRocm93IEVycm9yKHkoMzEwKSk7Uz1hO2E9e21lbW9pemVkU3RhdGU6Uy5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTpTLmJhc2VTdGF0ZSxiYXNlUXVldWU6Uy5iYXNlUXVldWUscXVldWU6Uy5xdWV1ZSxuZXh0Om51bGx9O251bGw9PT1UP1IubWVtb2l6ZWRTdGF0ZT1UPWE6VD1ULm5leHQ9YX1yZXR1cm4gVH1mdW5jdGlvbiBKaChhLGIpe3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBiP2IoYSk6Yn1cbmZ1bmN0aW9uIEtoKGEpe3ZhciBiPUloKCksYz1iLnF1ZXVlO2lmKG51bGw9PT1jKXRocm93IEVycm9yKHkoMzExKSk7Yy5sYXN0UmVuZGVyZWRSZWR1Y2VyPWE7dmFyIGQ9UyxlPWQuYmFzZVF1ZXVlLGY9Yy5wZW5kaW5nO2lmKG51bGwhPT1mKXtpZihudWxsIT09ZSl7dmFyIGc9ZS5uZXh0O2UubmV4dD1mLm5leHQ7Zi5uZXh0PWd9ZC5iYXNlUXVldWU9ZT1mO2MucGVuZGluZz1udWxsfWlmKG51bGwhPT1lKXtlPWUubmV4dDtkPWQuYmFzZVN0YXRlO3ZhciBoPWc9Zj1udWxsLGs9ZTtkb3t2YXIgbD1rLmxhbmU7aWYoKHhoJmwpPT09bCludWxsIT09aCYmKGg9aC5uZXh0PXtsYW5lOjAsYWN0aW9uOmsuYWN0aW9uLGVhZ2VyUmVkdWNlcjprLmVhZ2VyUmVkdWNlcixlYWdlclN0YXRlOmsuZWFnZXJTdGF0ZSxuZXh0Om51bGx9KSxkPWsuZWFnZXJSZWR1Y2VyPT09YT9rLmVhZ2VyU3RhdGU6YShkLGsuYWN0aW9uKTtlbHNle3ZhciBuPXtsYW5lOmwsYWN0aW9uOmsuYWN0aW9uLGVhZ2VyUmVkdWNlcjprLmVhZ2VyUmVkdWNlcixcbmVhZ2VyU3RhdGU6ay5lYWdlclN0YXRlLG5leHQ6bnVsbH07bnVsbD09PWg/KGc9aD1uLGY9ZCk6aD1oLm5leHQ9bjtSLmxhbmVzfD1sO0RnfD1sfWs9ay5uZXh0fXdoaWxlKG51bGwhPT1rJiZrIT09ZSk7bnVsbD09PWg/Zj1kOmgubmV4dD1nO0hlKGQsYi5tZW1vaXplZFN0YXRlKXx8KHVnPSEwKTtiLm1lbW9pemVkU3RhdGU9ZDtiLmJhc2VTdGF0ZT1mO2IuYmFzZVF1ZXVlPWg7Yy5sYXN0UmVuZGVyZWRTdGF0ZT1kfXJldHVybltiLm1lbW9pemVkU3RhdGUsYy5kaXNwYXRjaF19XG5mdW5jdGlvbiBMaChhKXt2YXIgYj1JaCgpLGM9Yi5xdWV1ZTtpZihudWxsPT09Yyl0aHJvdyBFcnJvcih5KDMxMSkpO2MubGFzdFJlbmRlcmVkUmVkdWNlcj1hO3ZhciBkPWMuZGlzcGF0Y2gsZT1jLnBlbmRpbmcsZj1iLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWUpe2MucGVuZGluZz1udWxsO3ZhciBnPWU9ZS5uZXh0O2RvIGY9YShmLGcuYWN0aW9uKSxnPWcubmV4dDt3aGlsZShnIT09ZSk7SGUoZixiLm1lbW9pemVkU3RhdGUpfHwodWc9ITApO2IubWVtb2l6ZWRTdGF0ZT1mO251bGw9PT1iLmJhc2VRdWV1ZSYmKGIuYmFzZVN0YXRlPWYpO2MubGFzdFJlbmRlcmVkU3RhdGU9Zn1yZXR1cm5bZixkXX1cbmZ1bmN0aW9uIE1oKGEsYixjKXt2YXIgZD1iLl9nZXRWZXJzaW9uO2Q9ZChiLl9zb3VyY2UpO3ZhciBlPWIuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk7aWYobnVsbCE9PWUpYT1lPT09ZDtlbHNlIGlmKGE9YS5tdXRhYmxlUmVhZExhbmVzLGE9KHhoJmEpPT09YSliLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PWQsdGgucHVzaChiKTtpZihhKXJldHVybiBjKGIuX3NvdXJjZSk7dGgucHVzaChiKTt0aHJvdyBFcnJvcih5KDM1MCkpO31cbmZ1bmN0aW9uIE5oKGEsYixjLGQpe3ZhciBlPVU7aWYobnVsbD09PWUpdGhyb3cgRXJyb3IoeSgzNDkpKTt2YXIgZj1iLl9nZXRWZXJzaW9uLGc9ZihiLl9zb3VyY2UpLGg9dmguY3VycmVudCxrPWgudXNlU3RhdGUoZnVuY3Rpb24oKXtyZXR1cm4gTWgoZSxiLGMpfSksbD1rWzFdLG49a1swXTtrPVQ7dmFyIEE9YS5tZW1vaXplZFN0YXRlLHA9QS5yZWZzLEM9cC5nZXRTbmFwc2hvdCx4PUEuc291cmNlO0E9QS5zdWJzY3JpYmU7dmFyIHc9UjthLm1lbW9pemVkU3RhdGU9e3JlZnM6cCxzb3VyY2U6YixzdWJzY3JpYmU6ZH07aC51c2VFZmZlY3QoZnVuY3Rpb24oKXtwLmdldFNuYXBzaG90PWM7cC5zZXRTbmFwc2hvdD1sO3ZhciBhPWYoYi5fc291cmNlKTtpZighSGUoZyxhKSl7YT1jKGIuX3NvdXJjZSk7SGUobixhKXx8KGwoYSksYT1JZyh3KSxlLm11dGFibGVSZWFkTGFuZXN8PWEmZS5wZW5kaW5nTGFuZXMpO2E9ZS5tdXRhYmxlUmVhZExhbmVzO2UuZW50YW5nbGVkTGFuZXN8PWE7Zm9yKHZhciBkPVxuZS5lbnRhbmdsZW1lbnRzLGg9YTswPGg7KXt2YXIgaz0zMS1WYyhoKSx2PTE8PGs7ZFtrXXw9YTtoJj1+dn19fSxbYyxiLGRdKTtoLnVzZUVmZmVjdChmdW5jdGlvbigpe3JldHVybiBkKGIuX3NvdXJjZSxmdW5jdGlvbigpe3ZhciBhPXAuZ2V0U25hcHNob3QsYz1wLnNldFNuYXBzaG90O3RyeXtjKGEoYi5fc291cmNlKSk7dmFyIGQ9SWcodyk7ZS5tdXRhYmxlUmVhZExhbmVzfD1kJmUucGVuZGluZ0xhbmVzfWNhdGNoKHEpe2MoZnVuY3Rpb24oKXt0aHJvdyBxO30pfX0pfSxbYixkXSk7SGUoQyxjKSYmSGUoeCxiKSYmSGUoQSxkKXx8KGE9e3BlbmRpbmc6bnVsbCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6SmgsbGFzdFJlbmRlcmVkU3RhdGU6bn0sYS5kaXNwYXRjaD1sPU9oLmJpbmQobnVsbCxSLGEpLGsucXVldWU9YSxrLmJhc2VRdWV1ZT1udWxsLG49TWgoZSxiLGMpLGsubWVtb2l6ZWRTdGF0ZT1rLmJhc2VTdGF0ZT1uKTtyZXR1cm4gbn1cbmZ1bmN0aW9uIFBoKGEsYixjKXt2YXIgZD1JaCgpO3JldHVybiBOaChkLGEsYixjKX1mdW5jdGlvbiBRaChhKXt2YXIgYj1IaCgpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBhJiYoYT1hKCkpO2IubWVtb2l6ZWRTdGF0ZT1iLmJhc2VTdGF0ZT1hO2E9Yi5xdWV1ZT17cGVuZGluZzpudWxsLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpKaCxsYXN0UmVuZGVyZWRTdGF0ZTphfTthPWEuZGlzcGF0Y2g9T2guYmluZChudWxsLFIsYSk7cmV0dXJuW2IubWVtb2l6ZWRTdGF0ZSxhXX1cbmZ1bmN0aW9uIFJoKGEsYixjLGQpe2E9e3RhZzphLGNyZWF0ZTpiLGRlc3Ryb3k6YyxkZXBzOmQsbmV4dDpudWxsfTtiPVIudXBkYXRlUXVldWU7bnVsbD09PWI/KGI9e2xhc3RFZmZlY3Q6bnVsbH0sUi51cGRhdGVRdWV1ZT1iLGIubGFzdEVmZmVjdD1hLm5leHQ9YSk6KGM9Yi5sYXN0RWZmZWN0LG51bGw9PT1jP2IubGFzdEVmZmVjdD1hLm5leHQ9YTooZD1jLm5leHQsYy5uZXh0PWEsYS5uZXh0PWQsYi5sYXN0RWZmZWN0PWEpKTtyZXR1cm4gYX1mdW5jdGlvbiBTaChhKXt2YXIgYj1IaCgpO2E9e2N1cnJlbnQ6YX07cmV0dXJuIGIubWVtb2l6ZWRTdGF0ZT1hfWZ1bmN0aW9uIFRoKCl7cmV0dXJuIEloKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBVaChhLGIsYyxkKXt2YXIgZT1IaCgpO1IuZmxhZ3N8PWE7ZS5tZW1vaXplZFN0YXRlPVJoKDF8YixjLHZvaWQgMCx2b2lkIDA9PT1kP251bGw6ZCl9XG5mdW5jdGlvbiBWaChhLGIsYyxkKXt2YXIgZT1JaCgpO2Q9dm9pZCAwPT09ZD9udWxsOmQ7dmFyIGY9dm9pZCAwO2lmKG51bGwhPT1TKXt2YXIgZz1TLm1lbW9pemVkU3RhdGU7Zj1nLmRlc3Ryb3k7aWYobnVsbCE9PWQmJkJoKGQsZy5kZXBzKSl7UmgoYixjLGYsZCk7cmV0dXJufX1SLmZsYWdzfD1hO2UubWVtb2l6ZWRTdGF0ZT1SaCgxfGIsYyxmLGQpfWZ1bmN0aW9uIFdoKGEsYil7cmV0dXJuIFVoKDUxNiw0LGEsYil9ZnVuY3Rpb24gWGgoYSxiKXtyZXR1cm4gVmgoNTE2LDQsYSxiKX1mdW5jdGlvbiBZaChhLGIpe3JldHVybiBWaCg0LDIsYSxiKX1mdW5jdGlvbiBaaChhLGIpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBiKXJldHVybiBhPWEoKSxiKGEpLGZ1bmN0aW9uKCl7YihudWxsKX07aWYobnVsbCE9PWImJnZvaWQgMCE9PWIpcmV0dXJuIGE9YSgpLGIuY3VycmVudD1hLGZ1bmN0aW9uKCl7Yi5jdXJyZW50PW51bGx9fVxuZnVuY3Rpb24gJGgoYSxiLGMpe2M9bnVsbCE9PWMmJnZvaWQgMCE9PWM/Yy5jb25jYXQoW2FdKTpudWxsO3JldHVybiBWaCg0LDIsWmguYmluZChudWxsLGIsYSksYyl9ZnVuY3Rpb24gYWkoKXt9ZnVuY3Rpb24gYmkoYSxiKXt2YXIgYz1JaCgpO2I9dm9pZCAwPT09Yj9udWxsOmI7dmFyIGQ9Yy5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1kJiZudWxsIT09YiYmQmgoYixkWzFdKSlyZXR1cm4gZFswXTtjLm1lbW9pemVkU3RhdGU9W2EsYl07cmV0dXJuIGF9ZnVuY3Rpb24gY2koYSxiKXt2YXIgYz1JaCgpO2I9dm9pZCAwPT09Yj9udWxsOmI7dmFyIGQ9Yy5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1kJiZudWxsIT09YiYmQmgoYixkWzFdKSlyZXR1cm4gZFswXTthPWEoKTtjLm1lbW9pemVkU3RhdGU9W2EsYl07cmV0dXJuIGF9XG5mdW5jdGlvbiBkaShhLGIpe3ZhciBjPWVnKCk7Z2coOTg+Yz85ODpjLGZ1bmN0aW9uKCl7YSghMCl9KTtnZyg5NzxjPzk3OmMsZnVuY3Rpb24oKXt2YXIgYz13aC50cmFuc2l0aW9uO3doLnRyYW5zaXRpb249MTt0cnl7YSghMSksYigpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1jfX0pfVxuZnVuY3Rpb24gT2goYSxiLGMpe3ZhciBkPUhnKCksZT1JZyhhKSxmPXtsYW5lOmUsYWN0aW9uOmMsZWFnZXJSZWR1Y2VyOm51bGwsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sZz1iLnBlbmRpbmc7bnVsbD09PWc/Zi5uZXh0PWY6KGYubmV4dD1nLm5leHQsZy5uZXh0PWYpO2IucGVuZGluZz1mO2c9YS5hbHRlcm5hdGU7aWYoYT09PVJ8fG51bGwhPT1nJiZnPT09Uil6aD15aD0hMDtlbHNle2lmKDA9PT1hLmxhbmVzJiYobnVsbD09PWd8fDA9PT1nLmxhbmVzKSYmKGc9Yi5sYXN0UmVuZGVyZWRSZWR1Y2VyLG51bGwhPT1nKSl0cnl7dmFyIGg9Yi5sYXN0UmVuZGVyZWRTdGF0ZSxrPWcoaCxjKTtmLmVhZ2VyUmVkdWNlcj1nO2YuZWFnZXJTdGF0ZT1rO2lmKEhlKGssaCkpcmV0dXJufWNhdGNoKGwpe31maW5hbGx5e31KZyhhLGUsZCl9fVxudmFyIEdoPXtyZWFkQ29udGV4dDp2Zyx1c2VDYWxsYmFjazpBaCx1c2VDb250ZXh0OkFoLHVzZUVmZmVjdDpBaCx1c2VJbXBlcmF0aXZlSGFuZGxlOkFoLHVzZUxheW91dEVmZmVjdDpBaCx1c2VNZW1vOkFoLHVzZVJlZHVjZXI6QWgsdXNlUmVmOkFoLHVzZVN0YXRlOkFoLHVzZURlYnVnVmFsdWU6QWgsdXNlRGVmZXJyZWRWYWx1ZTpBaCx1c2VUcmFuc2l0aW9uOkFoLHVzZU11dGFibGVTb3VyY2U6QWgsdXNlT3BhcXVlSWRlbnRpZmllcjpBaCx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LERoPXtyZWFkQ29udGV4dDp2Zyx1c2VDYWxsYmFjazpmdW5jdGlvbihhLGIpe0hoKCkubWVtb2l6ZWRTdGF0ZT1bYSx2b2lkIDA9PT1iP251bGw6Yl07cmV0dXJuIGF9LHVzZUNvbnRleHQ6dmcsdXNlRWZmZWN0OldoLHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oYSxiLGMpe2M9bnVsbCE9PWMmJnZvaWQgMCE9PWM/Yy5jb25jYXQoW2FdKTpudWxsO3JldHVybiBVaCg0LDIsWmguYmluZChudWxsLFxuYixhKSxjKX0sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIFVoKDQsMixhLGIpfSx1c2VNZW1vOmZ1bmN0aW9uKGEsYil7dmFyIGM9SGgoKTtiPXZvaWQgMD09PWI/bnVsbDpiO2E9YSgpO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX0sdXNlUmVkdWNlcjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SGgoKTtiPXZvaWQgMCE9PWM/YyhiKTpiO2QubWVtb2l6ZWRTdGF0ZT1kLmJhc2VTdGF0ZT1iO2E9ZC5xdWV1ZT17cGVuZGluZzpudWxsLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphLGxhc3RSZW5kZXJlZFN0YXRlOmJ9O2E9YS5kaXNwYXRjaD1PaC5iaW5kKG51bGwsUixhKTtyZXR1cm5bZC5tZW1vaXplZFN0YXRlLGFdfSx1c2VSZWY6U2gsdXNlU3RhdGU6UWgsdXNlRGVidWdWYWx1ZTphaSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPVFoKGEpLGM9YlswXSxkPWJbMV07V2goZnVuY3Rpb24oKXt2YXIgYj13aC50cmFuc2l0aW9uO1xud2gudHJhbnNpdGlvbj0xO3RyeXtkKGEpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1ifX0sW2FdKTtyZXR1cm4gY30sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPVFoKCExKSxiPWFbMF07YT1kaS5iaW5kKG51bGwsYVsxXSk7U2goYSk7cmV0dXJuW2EsYl19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUhoKCk7ZC5tZW1vaXplZFN0YXRlPXtyZWZzOntnZXRTbmFwc2hvdDpiLHNldFNuYXBzaG90Om51bGx9LHNvdXJjZTphLHN1YnNjcmliZTpjfTtyZXR1cm4gTmgoZCxhLGIsYyl9LHVzZU9wYXF1ZUlkZW50aWZpZXI6ZnVuY3Rpb24oKXtpZihsaCl7dmFyIGE9ITEsYj11ZihmdW5jdGlvbigpe2F8fChhPSEwLGMoXCJyOlwiKyh0ZisrKS50b1N0cmluZygzNikpKTt0aHJvdyBFcnJvcih5KDM1NSkpO30pLGM9UWgoYilbMV07MD09PShSLm1vZGUmMikmJihSLmZsYWdzfD01MTYsUmgoNSxmdW5jdGlvbigpe2MoXCJyOlwiKyh0ZisrKS50b1N0cmluZygzNikpfSxcbnZvaWQgMCxudWxsKSk7cmV0dXJuIGJ9Yj1cInI6XCIrKHRmKyspLnRvU3RyaW5nKDM2KTtRaChiKTtyZXR1cm4gYn0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxFaD17cmVhZENvbnRleHQ6dmcsdXNlQ2FsbGJhY2s6YmksdXNlQ29udGV4dDp2Zyx1c2VFZmZlY3Q6WGgsdXNlSW1wZXJhdGl2ZUhhbmRsZTokaCx1c2VMYXlvdXRFZmZlY3Q6WWgsdXNlTWVtbzpjaSx1c2VSZWR1Y2VyOktoLHVzZVJlZjpUaCx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBLaChKaCl9LHVzZURlYnVnVmFsdWU6YWksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihhKXt2YXIgYj1LaChKaCksYz1iWzBdLGQ9YlsxXTtYaChmdW5jdGlvbigpe3ZhciBiPXdoLnRyYW5zaXRpb247d2gudHJhbnNpdGlvbj0xO3RyeXtkKGEpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1ifX0sW2FdKTtyZXR1cm4gY30sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPUtoKEpoKVswXTtyZXR1cm5bVGgoKS5jdXJyZW50LFxuYV19LHVzZU11dGFibGVTb3VyY2U6UGgsdXNlT3BhcXVlSWRlbnRpZmllcjpmdW5jdGlvbigpe3JldHVybiBLaChKaClbMF19LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sRmg9e3JlYWRDb250ZXh0OnZnLHVzZUNhbGxiYWNrOmJpLHVzZUNvbnRleHQ6dmcsdXNlRWZmZWN0OlhoLHVzZUltcGVyYXRpdmVIYW5kbGU6JGgsdXNlTGF5b3V0RWZmZWN0OlloLHVzZU1lbW86Y2ksdXNlUmVkdWNlcjpMaCx1c2VSZWY6VGgsdXNlU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gTGgoSmgpfSx1c2VEZWJ1Z1ZhbHVlOmFpLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9TGgoSmgpLGM9YlswXSxkPWJbMV07WGgoZnVuY3Rpb24oKXt2YXIgYj13aC50cmFuc2l0aW9uO3doLnRyYW5zaXRpb249MTt0cnl7ZChhKX1maW5hbGx5e3doLnRyYW5zaXRpb249Yn19LFthXSk7cmV0dXJuIGN9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgYT1MaChKaClbMF07cmV0dXJuW1RoKCkuY3VycmVudCxcbmFdfSx1c2VNdXRhYmxlU291cmNlOlBoLHVzZU9wYXF1ZUlkZW50aWZpZXI6ZnVuY3Rpb24oKXtyZXR1cm4gTGgoSmgpWzBdfSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LGVpPXJhLlJlYWN0Q3VycmVudE93bmVyLHVnPSExO2Z1bmN0aW9uIGZpKGEsYixjLGQpe2IuY2hpbGQ9bnVsbD09PWE/WmcoYixudWxsLGMsZCk6WWcoYixhLmNoaWxkLGMsZCl9ZnVuY3Rpb24gZ2koYSxiLGMsZCxlKXtjPWMucmVuZGVyO3ZhciBmPWIucmVmO3RnKGIsZSk7ZD1DaChhLGIsYyxkLGYsZSk7aWYobnVsbCE9PWEmJiF1ZylyZXR1cm4gYi51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlLGIuZmxhZ3MmPS01MTcsYS5sYW5lcyY9fmUsaGkoYSxiLGUpO2IuZmxhZ3N8PTE7ZmkoYSxiLGQsZSk7cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiBpaShhLGIsYyxkLGUsZil7aWYobnVsbD09PWEpe3ZhciBnPWMudHlwZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZyYmIWppKGcpJiZ2b2lkIDA9PT1nLmRlZmF1bHRQcm9wcyYmbnVsbD09PWMuY29tcGFyZSYmdm9pZCAwPT09Yy5kZWZhdWx0UHJvcHMpcmV0dXJuIGIudGFnPTE1LGIudHlwZT1nLGtpKGEsYixnLGQsZSxmKTthPVZnKGMudHlwZSxudWxsLGQsYixiLm1vZGUsZik7YS5yZWY9Yi5yZWY7YS5yZXR1cm49YjtyZXR1cm4gYi5jaGlsZD1hfWc9YS5jaGlsZDtpZigwPT09KGUmZikmJihlPWcubWVtb2l6ZWRQcm9wcyxjPWMuY29tcGFyZSxjPW51bGwhPT1jP2M6SmUsYyhlLGQpJiZhLnJlZj09PWIucmVmKSlyZXR1cm4gaGkoYSxiLGYpO2IuZmxhZ3N8PTE7YT1UZyhnLGQpO2EucmVmPWIucmVmO2EucmV0dXJuPWI7cmV0dXJuIGIuY2hpbGQ9YX1cbmZ1bmN0aW9uIGtpKGEsYixjLGQsZSxmKXtpZihudWxsIT09YSYmSmUoYS5tZW1vaXplZFByb3BzLGQpJiZhLnJlZj09PWIucmVmKWlmKHVnPSExLDAhPT0oZiZlKSkwIT09KGEuZmxhZ3MmMTYzODQpJiYodWc9ITApO2Vsc2UgcmV0dXJuIGIubGFuZXM9YS5sYW5lcyxoaShhLGIsZik7cmV0dXJuIGxpKGEsYixjLGQsZil9XG5mdW5jdGlvbiBtaShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1kLmNoaWxkcmVuLGY9bnVsbCE9PWE/YS5tZW1vaXplZFN0YXRlOm51bGw7aWYoXCJoaWRkZW5cIj09PWQubW9kZXx8XCJ1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZ1wiPT09ZC5tb2RlKWlmKDA9PT0oYi5tb2RlJjQpKWIubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjB9LG5pKGIsYyk7ZWxzZSBpZigwIT09KGMmMTA3Mzc0MTgyNCkpYi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MH0sbmkoYixudWxsIT09Zj9mLmJhc2VMYW5lczpjKTtlbHNlIHJldHVybiBhPW51bGwhPT1mP2YuYmFzZUxhbmVzfGM6YyxiLmxhbmVzPWIuY2hpbGRMYW5lcz0xMDczNzQxODI0LGIubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOmF9LG5pKGIsYSksbnVsbDtlbHNlIG51bGwhPT1mPyhkPWYuYmFzZUxhbmVzfGMsYi5tZW1vaXplZFN0YXRlPW51bGwpOmQ9YyxuaShiLGQpO2ZpKGEsYixlLGMpO3JldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gb2koYSxiKXt2YXIgYz1iLnJlZjtpZihudWxsPT09YSYmbnVsbCE9PWN8fG51bGwhPT1hJiZhLnJlZiE9PWMpYi5mbGFnc3w9MTI4fWZ1bmN0aW9uIGxpKGEsYixjLGQsZSl7dmFyIGY9RmYoYyk/RGY6TS5jdXJyZW50O2Y9RWYoYixmKTt0ZyhiLGUpO2M9Q2goYSxiLGMsZCxmLGUpO2lmKG51bGwhPT1hJiYhdWcpcmV0dXJuIGIudXBkYXRlUXVldWU9YS51cGRhdGVRdWV1ZSxiLmZsYWdzJj0tNTE3LGEubGFuZXMmPX5lLGhpKGEsYixlKTtiLmZsYWdzfD0xO2ZpKGEsYixjLGUpO3JldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gcGkoYSxiLGMsZCxlKXtpZihGZihjKSl7dmFyIGY9ITA7SmYoYil9ZWxzZSBmPSExO3RnKGIsZSk7aWYobnVsbD09PWIuc3RhdGVOb2RlKW51bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZmxhZ3N8PTIpLE1nKGIsYyxkKSxPZyhiLGMsZCxlKSxkPSEwO2Vsc2UgaWYobnVsbD09PWEpe3ZhciBnPWIuc3RhdGVOb2RlLGg9Yi5tZW1vaXplZFByb3BzO2cucHJvcHM9aDt2YXIgaz1nLmNvbnRleHQsbD1jLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgbCYmbnVsbCE9PWw/bD12ZyhsKToobD1GZihjKT9EZjpNLmN1cnJlbnQsbD1FZihiLGwpKTt2YXIgbj1jLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxBPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBufHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtBfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmXG5cImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwoaCE9PWR8fGshPT1sKSYmTmcoYixnLGQsbCk7d2c9ITE7dmFyIHA9Yi5tZW1vaXplZFN0YXRlO2cuc3RhdGU9cDtDZyhiLGQsZyxlKTtrPWIubWVtb2l6ZWRTdGF0ZTtoIT09ZHx8cCE9PWt8fE4uY3VycmVudHx8d2c/KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBuJiYoR2coYixjLG4sZCksaz1iLm1lbW9pemVkU3RhdGUpLChoPXdnfHxMZyhiLGMsaCxkLHAsayxsKSk/KEF8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxNb3VudHx8KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxNb3VudCYmZy5jb21wb25lbnRXaWxsTW91bnQoKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZnLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksXCJmdW5jdGlvblwiPT09XG50eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZmxhZ3N8PTQpKTooXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50RGlkTW91bnQmJihiLmZsYWdzfD00KSxiLm1lbW9pemVkUHJvcHM9ZCxiLm1lbW9pemVkU3RhdGU9ayksZy5wcm9wcz1kLGcuc3RhdGU9ayxnLmNvbnRleHQ9bCxkPWgpOihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZmxhZ3N8PTQpLGQ9ITEpfWVsc2V7Zz1iLnN0YXRlTm9kZTt5ZyhhLGIpO2g9Yi5tZW1vaXplZFByb3BzO2w9Yi50eXBlPT09Yi5lbGVtZW50VHlwZT9oOmxnKGIudHlwZSxoKTtnLnByb3BzPWw7QT1iLnBlbmRpbmdQcm9wcztwPWcuY29udGV4dDtrPWMuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBrJiZudWxsIT09az9rPXZnKGspOihrPUZmKGMpP0RmOk0uY3VycmVudCxrPUVmKGIsaykpO3ZhciBDPWMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyhuPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBDfHxcblwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKXx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChoIT09QXx8cCE9PWspJiZOZyhiLGcsZCxrKTt3Zz0hMTtwPWIubWVtb2l6ZWRTdGF0ZTtnLnN0YXRlPXA7Q2coYixkLGcsZSk7dmFyIHg9Yi5tZW1vaXplZFN0YXRlO2ghPT1BfHxwIT09eHx8Ti5jdXJyZW50fHx3Zz8oXCJmdW5jdGlvblwiPT09dHlwZW9mIEMmJihHZyhiLGMsQyxkKSx4PWIubWVtb2l6ZWRTdGF0ZSksKGw9d2d8fExnKGIsYyxsLGQscCx4LGspKT8obnx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxVcGRhdGV8fChcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnRXaWxsVXBkYXRlJiZnLmNvbXBvbmVudFdpbGxVcGRhdGUoZCxcbngsayksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJmcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUoZCx4LGspKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGUmJihiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSYmKGIuZmxhZ3N8PTI1NikpOihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJnA9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTI1NiksYi5tZW1vaXplZFByb3BzPWQsYi5tZW1vaXplZFN0YXRlPXgpLGcucHJvcHM9ZCxnLnN0YXRlPXgsZy5jb250ZXh0PWssZD1sKTooXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50RGlkVXBkYXRlfHxcbmg9PT1hLm1lbW9pemVkUHJvcHMmJnA9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTI1NiksZD0hMSl9cmV0dXJuIHFpKGEsYixjLGQsZixlKX1cbmZ1bmN0aW9uIHFpKGEsYixjLGQsZSxmKXtvaShhLGIpO3ZhciBnPTAhPT0oYi5mbGFncyY2NCk7aWYoIWQmJiFnKXJldHVybiBlJiZLZihiLGMsITEpLGhpKGEsYixmKTtkPWIuc3RhdGVOb2RlO2VpLmN1cnJlbnQ9Yjt2YXIgaD1nJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYy5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I/bnVsbDpkLnJlbmRlcigpO2IuZmxhZ3N8PTE7bnVsbCE9PWEmJmc/KGIuY2hpbGQ9WWcoYixhLmNoaWxkLG51bGwsZiksYi5jaGlsZD1ZZyhiLG51bGwsaCxmKSk6ZmkoYSxiLGgsZik7Yi5tZW1vaXplZFN0YXRlPWQuc3RhdGU7ZSYmS2YoYixjLCEwKTtyZXR1cm4gYi5jaGlsZH1mdW5jdGlvbiByaShhKXt2YXIgYj1hLnN0YXRlTm9kZTtiLnBlbmRpbmdDb250ZXh0P0hmKGEsYi5wZW5kaW5nQ29udGV4dCxiLnBlbmRpbmdDb250ZXh0IT09Yi5jb250ZXh0KTpiLmNvbnRleHQmJkhmKGEsYi5jb250ZXh0LCExKTtlaChhLGIuY29udGFpbmVySW5mbyl9XG52YXIgc2k9e2RlaHlkcmF0ZWQ6bnVsbCxyZXRyeUxhbmU6MH07XG5mdW5jdGlvbiB0aShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1QLmN1cnJlbnQsZj0hMSxnOyhnPTAhPT0oYi5mbGFncyY2NCkpfHwoZz1udWxsIT09YSYmbnVsbD09PWEubWVtb2l6ZWRTdGF0ZT8hMTowIT09KGUmMikpO2c/KGY9ITAsYi5mbGFncyY9LTY1KTpudWxsIT09YSYmbnVsbD09PWEubWVtb2l6ZWRTdGF0ZXx8dm9pZCAwPT09ZC5mYWxsYmFja3x8ITA9PT1kLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrfHwoZXw9MSk7SShQLGUmMSk7aWYobnVsbD09PWEpe3ZvaWQgMCE9PWQuZmFsbGJhY2smJnBoKGIpO2E9ZC5jaGlsZHJlbjtlPWQuZmFsbGJhY2s7aWYoZilyZXR1cm4gYT11aShiLGEsZSxjKSxiLmNoaWxkLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczpjfSxiLm1lbW9pemVkU3RhdGU9c2ksYTtpZihcIm51bWJlclwiPT09dHlwZW9mIGQudW5zdGFibGVfZXhwZWN0ZWRMb2FkVGltZSlyZXR1cm4gYT11aShiLGEsZSxjKSxiLmNoaWxkLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczpjfSxcbmIubWVtb2l6ZWRTdGF0ZT1zaSxiLmxhbmVzPTMzNTU0NDMyLGE7Yz12aSh7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjphfSxiLm1vZGUsYyxudWxsKTtjLnJldHVybj1iO3JldHVybiBiLmNoaWxkPWN9aWYobnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSl7aWYoZilyZXR1cm4gZD13aShhLGIsZC5jaGlsZHJlbixkLmZhbGxiYWNrLGMpLGY9Yi5jaGlsZCxlPWEuY2hpbGQubWVtb2l6ZWRTdGF0ZSxmLm1lbW9pemVkU3RhdGU9bnVsbD09PWU/e2Jhc2VMYW5lczpjfTp7YmFzZUxhbmVzOmUuYmFzZUxhbmVzfGN9LGYuY2hpbGRMYW5lcz1hLmNoaWxkTGFuZXMmfmMsYi5tZW1vaXplZFN0YXRlPXNpLGQ7Yz14aShhLGIsZC5jaGlsZHJlbixjKTtiLm1lbW9pemVkU3RhdGU9bnVsbDtyZXR1cm4gY31pZihmKXJldHVybiBkPXdpKGEsYixkLmNoaWxkcmVuLGQuZmFsbGJhY2ssYyksZj1iLmNoaWxkLGU9YS5jaGlsZC5tZW1vaXplZFN0YXRlLGYubWVtb2l6ZWRTdGF0ZT1udWxsPT09ZT97YmFzZUxhbmVzOmN9Olxue2Jhc2VMYW5lczplLmJhc2VMYW5lc3xjfSxmLmNoaWxkTGFuZXM9YS5jaGlsZExhbmVzJn5jLGIubWVtb2l6ZWRTdGF0ZT1zaSxkO2M9eGkoYSxiLGQuY2hpbGRyZW4sYyk7Yi5tZW1vaXplZFN0YXRlPW51bGw7cmV0dXJuIGN9ZnVuY3Rpb24gdWkoYSxiLGMsZCl7dmFyIGU9YS5tb2RlLGY9YS5jaGlsZDtiPXttb2RlOlwiaGlkZGVuXCIsY2hpbGRyZW46Yn07MD09PShlJjIpJiZudWxsIT09Zj8oZi5jaGlsZExhbmVzPTAsZi5wZW5kaW5nUHJvcHM9Yik6Zj12aShiLGUsMCxudWxsKTtjPVhnKGMsZSxkLG51bGwpO2YucmV0dXJuPWE7Yy5yZXR1cm49YTtmLnNpYmxpbmc9YzthLmNoaWxkPWY7cmV0dXJuIGN9XG5mdW5jdGlvbiB4aShhLGIsYyxkKXt2YXIgZT1hLmNoaWxkO2E9ZS5zaWJsaW5nO2M9VGcoZSx7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjpjfSk7MD09PShiLm1vZGUmMikmJihjLmxhbmVzPWQpO2MucmV0dXJuPWI7Yy5zaWJsaW5nPW51bGw7bnVsbCE9PWEmJihhLm5leHRFZmZlY3Q9bnVsbCxhLmZsYWdzPTgsYi5maXJzdEVmZmVjdD1iLmxhc3RFZmZlY3Q9YSk7cmV0dXJuIGIuY2hpbGQ9Y31cbmZ1bmN0aW9uIHdpKGEsYixjLGQsZSl7dmFyIGY9Yi5tb2RlLGc9YS5jaGlsZDthPWcuc2libGluZzt2YXIgaD17bW9kZTpcImhpZGRlblwiLGNoaWxkcmVuOmN9OzA9PT0oZiYyKSYmYi5jaGlsZCE9PWc/KGM9Yi5jaGlsZCxjLmNoaWxkTGFuZXM9MCxjLnBlbmRpbmdQcm9wcz1oLGc9Yy5sYXN0RWZmZWN0LG51bGwhPT1nPyhiLmZpcnN0RWZmZWN0PWMuZmlyc3RFZmZlY3QsYi5sYXN0RWZmZWN0PWcsZy5uZXh0RWZmZWN0PW51bGwpOmIuZmlyc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0PW51bGwpOmM9VGcoZyxoKTtudWxsIT09YT9kPVRnKGEsZCk6KGQ9WGcoZCxmLGUsbnVsbCksZC5mbGFnc3w9Mik7ZC5yZXR1cm49YjtjLnJldHVybj1iO2Muc2libGluZz1kO2IuY2hpbGQ9YztyZXR1cm4gZH1mdW5jdGlvbiB5aShhLGIpe2EubGFuZXN8PWI7dmFyIGM9YS5hbHRlcm5hdGU7bnVsbCE9PWMmJihjLmxhbmVzfD1iKTtzZyhhLnJldHVybixiKX1cbmZ1bmN0aW9uIHppKGEsYixjLGQsZSxmKXt2YXIgZz1hLm1lbW9pemVkU3RhdGU7bnVsbD09PWc/YS5tZW1vaXplZFN0YXRlPXtpc0JhY2t3YXJkczpiLHJlbmRlcmluZzpudWxsLHJlbmRlcmluZ1N0YXJ0VGltZTowLGxhc3Q6ZCx0YWlsOmMsdGFpbE1vZGU6ZSxsYXN0RWZmZWN0OmZ9OihnLmlzQmFja3dhcmRzPWIsZy5yZW5kZXJpbmc9bnVsbCxnLnJlbmRlcmluZ1N0YXJ0VGltZT0wLGcubGFzdD1kLGcudGFpbD1jLGcudGFpbE1vZGU9ZSxnLmxhc3RFZmZlY3Q9Zil9XG5mdW5jdGlvbiBBaShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1kLnJldmVhbE9yZGVyLGY9ZC50YWlsO2ZpKGEsYixkLmNoaWxkcmVuLGMpO2Q9UC5jdXJyZW50O2lmKDAhPT0oZCYyKSlkPWQmMXwyLGIuZmxhZ3N8PTY0O2Vsc2V7aWYobnVsbCE9PWEmJjAhPT0oYS5mbGFncyY2NCkpYTpmb3IoYT1iLmNoaWxkO251bGwhPT1hOyl7aWYoMTM9PT1hLnRhZyludWxsIT09YS5tZW1vaXplZFN0YXRlJiZ5aShhLGMpO2Vsc2UgaWYoMTk9PT1hLnRhZyl5aShhLGMpO2Vsc2UgaWYobnVsbCE9PWEuY2hpbGQpe2EuY2hpbGQucmV0dXJuPWE7YT1hLmNoaWxkO2NvbnRpbnVlfWlmKGE9PT1iKWJyZWFrIGE7Zm9yKDtudWxsPT09YS5zaWJsaW5nOyl7aWYobnVsbD09PWEucmV0dXJufHxhLnJldHVybj09PWIpYnJlYWsgYTthPWEucmV0dXJufWEuc2libGluZy5yZXR1cm49YS5yZXR1cm47YT1hLnNpYmxpbmd9ZCY9MX1JKFAsZCk7aWYoMD09PShiLm1vZGUmMikpYi5tZW1vaXplZFN0YXRlPVxubnVsbDtlbHNlIHN3aXRjaChlKXtjYXNlIFwiZm9yd2FyZHNcIjpjPWIuY2hpbGQ7Zm9yKGU9bnVsbDtudWxsIT09YzspYT1jLmFsdGVybmF0ZSxudWxsIT09YSYmbnVsbD09PWloKGEpJiYoZT1jKSxjPWMuc2libGluZztjPWU7bnVsbD09PWM/KGU9Yi5jaGlsZCxiLmNoaWxkPW51bGwpOihlPWMuc2libGluZyxjLnNpYmxpbmc9bnVsbCk7emkoYiwhMSxlLGMsZixiLmxhc3RFZmZlY3QpO2JyZWFrO2Nhc2UgXCJiYWNrd2FyZHNcIjpjPW51bGw7ZT1iLmNoaWxkO2ZvcihiLmNoaWxkPW51bGw7bnVsbCE9PWU7KXthPWUuYWx0ZXJuYXRlO2lmKG51bGwhPT1hJiZudWxsPT09aWgoYSkpe2IuY2hpbGQ9ZTticmVha31hPWUuc2libGluZztlLnNpYmxpbmc9YztjPWU7ZT1hfXppKGIsITAsYyxudWxsLGYsYi5sYXN0RWZmZWN0KTticmVhaztjYXNlIFwidG9nZXRoZXJcIjp6aShiLCExLG51bGwsbnVsbCx2b2lkIDAsYi5sYXN0RWZmZWN0KTticmVhaztkZWZhdWx0OmIubWVtb2l6ZWRTdGF0ZT1udWxsfXJldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gaGkoYSxiLGMpe251bGwhPT1hJiYoYi5kZXBlbmRlbmNpZXM9YS5kZXBlbmRlbmNpZXMpO0RnfD1iLmxhbmVzO2lmKDAhPT0oYyZiLmNoaWxkTGFuZXMpKXtpZihudWxsIT09YSYmYi5jaGlsZCE9PWEuY2hpbGQpdGhyb3cgRXJyb3IoeSgxNTMpKTtpZihudWxsIT09Yi5jaGlsZCl7YT1iLmNoaWxkO2M9VGcoYSxhLnBlbmRpbmdQcm9wcyk7Yi5jaGlsZD1jO2ZvcihjLnJldHVybj1iO251bGwhPT1hLnNpYmxpbmc7KWE9YS5zaWJsaW5nLGM9Yy5zaWJsaW5nPVRnKGEsYS5wZW5kaW5nUHJvcHMpLGMucmV0dXJuPWI7Yy5zaWJsaW5nPW51bGx9cmV0dXJuIGIuY2hpbGR9cmV0dXJuIG51bGx9dmFyIEJpLENpLERpLEVpO1xuQmk9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yi5jaGlsZDtudWxsIT09Yzspe2lmKDU9PT1jLnRhZ3x8Nj09PWMudGFnKWEuYXBwZW5kQ2hpbGQoYy5zdGF0ZU5vZGUpO2Vsc2UgaWYoNCE9PWMudGFnJiZudWxsIT09Yy5jaGlsZCl7Yy5jaGlsZC5yZXR1cm49YztjPWMuY2hpbGQ7Y29udGludWV9aWYoYz09PWIpYnJlYWs7Zm9yKDtudWxsPT09Yy5zaWJsaW5nOyl7aWYobnVsbD09PWMucmV0dXJufHxjLnJldHVybj09PWIpcmV0dXJuO2M9Yy5yZXR1cm59Yy5zaWJsaW5nLnJldHVybj1jLnJldHVybjtjPWMuc2libGluZ319O0NpPWZ1bmN0aW9uKCl7fTtcbkRpPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWEubWVtb2l6ZWRQcm9wcztpZihlIT09ZCl7YT1iLnN0YXRlTm9kZTtkaChhaC5jdXJyZW50KTt2YXIgZj1udWxsO3N3aXRjaChjKXtjYXNlIFwiaW5wdXRcIjplPVlhKGEsZSk7ZD1ZYShhLGQpO2Y9W107YnJlYWs7Y2FzZSBcIm9wdGlvblwiOmU9ZWIoYSxlKTtkPWViKGEsZCk7Zj1bXTticmVhaztjYXNlIFwic2VsZWN0XCI6ZT1tKHt9LGUse3ZhbHVlOnZvaWQgMH0pO2Q9bSh7fSxkLHt2YWx1ZTp2b2lkIDB9KTtmPVtdO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmU9Z2IoYSxlKTtkPWdiKGEsZCk7Zj1bXTticmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlLm9uQ2xpY2smJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLm9uQ2xpY2smJihhLm9uY2xpY2s9amYpfXZiKGMsZCk7dmFyIGc7Yz1udWxsO2ZvcihsIGluIGUpaWYoIWQuaGFzT3duUHJvcGVydHkobCkmJmUuaGFzT3duUHJvcGVydHkobCkmJm51bGwhPWVbbF0paWYoXCJzdHlsZVwiPT09XG5sKXt2YXIgaD1lW2xdO2ZvcihnIGluIGgpaC5oYXNPd25Qcm9wZXJ0eShnKSYmKGN8fChjPXt9KSxjW2ddPVwiXCIpfWVsc2VcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCIhPT1sJiZcImNoaWxkcmVuXCIhPT1sJiZcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiIT09bCYmXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIiE9PWwmJlwiYXV0b0ZvY3VzXCIhPT1sJiYoY2EuaGFzT3duUHJvcGVydHkobCk/Znx8KGY9W10pOihmPWZ8fFtdKS5wdXNoKGwsbnVsbCkpO2ZvcihsIGluIGQpe3ZhciBrPWRbbF07aD1udWxsIT1lP2VbbF06dm9pZCAwO2lmKGQuaGFzT3duUHJvcGVydHkobCkmJmshPT1oJiYobnVsbCE9a3x8bnVsbCE9aCkpaWYoXCJzdHlsZVwiPT09bClpZihoKXtmb3IoZyBpbiBoKSFoLmhhc093blByb3BlcnR5KGcpfHxrJiZrLmhhc093blByb3BlcnR5KGcpfHwoY3x8KGM9e30pLGNbZ109XCJcIik7Zm9yKGcgaW4gaylrLmhhc093blByb3BlcnR5KGcpJiZoW2ddIT09a1tnXSYmKGN8fFxuKGM9e30pLGNbZ109a1tnXSl9ZWxzZSBjfHwoZnx8KGY9W10pLGYucHVzaChsLGMpKSxjPWs7ZWxzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09PWw/KGs9az9rLl9faHRtbDp2b2lkIDAsaD1oP2guX19odG1sOnZvaWQgMCxudWxsIT1rJiZoIT09ayYmKGY9Znx8W10pLnB1c2gobCxrKSk6XCJjaGlsZHJlblwiPT09bD9cInN0cmluZ1wiIT09dHlwZW9mIGsmJlwibnVtYmVyXCIhPT10eXBlb2Yga3x8KGY9Znx8W10pLnB1c2gobCxcIlwiK2spOlwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCIhPT1sJiZcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiIT09bCYmKGNhLmhhc093blByb3BlcnR5KGwpPyhudWxsIT1rJiZcIm9uU2Nyb2xsXCI9PT1sJiZHKFwic2Nyb2xsXCIsYSksZnx8aD09PWt8fChmPVtdKSk6XCJvYmplY3RcIj09PXR5cGVvZiBrJiZudWxsIT09ayYmay4kJHR5cGVvZj09PUdhP2sudG9TdHJpbmcoKTooZj1mfHxbXSkucHVzaChsLGspKX1jJiYoZj1mfHxbXSkucHVzaChcInN0eWxlXCIsXG5jKTt2YXIgbD1mO2lmKGIudXBkYXRlUXVldWU9bCliLmZsYWdzfD00fX07RWk9ZnVuY3Rpb24oYSxiLGMsZCl7YyE9PWQmJihiLmZsYWdzfD00KX07ZnVuY3Rpb24gRmkoYSxiKXtpZighbGgpc3dpdGNoKGEudGFpbE1vZGUpe2Nhc2UgXCJoaWRkZW5cIjpiPWEudGFpbDtmb3IodmFyIGM9bnVsbDtudWxsIT09YjspbnVsbCE9PWIuYWx0ZXJuYXRlJiYoYz1iKSxiPWIuc2libGluZztudWxsPT09Yz9hLnRhaWw9bnVsbDpjLnNpYmxpbmc9bnVsbDticmVhaztjYXNlIFwiY29sbGFwc2VkXCI6Yz1hLnRhaWw7Zm9yKHZhciBkPW51bGw7bnVsbCE9PWM7KW51bGwhPT1jLmFsdGVybmF0ZSYmKGQ9YyksYz1jLnNpYmxpbmc7bnVsbD09PWQ/Ynx8bnVsbD09PWEudGFpbD9hLnRhaWw9bnVsbDphLnRhaWwuc2libGluZz1udWxsOmQuc2libGluZz1udWxsfX1cbmZ1bmN0aW9uIEdpKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcztzd2l0Y2goYi50YWcpe2Nhc2UgMjpjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gRmYoYi50eXBlKSYmR2YoKSxudWxsO2Nhc2UgMzpmaCgpO0goTik7SChNKTt1aCgpO2Q9Yi5zdGF0ZU5vZGU7ZC5wZW5kaW5nQ29udGV4dCYmKGQuY29udGV4dD1kLnBlbmRpbmdDb250ZXh0LGQucGVuZGluZ0NvbnRleHQ9bnVsbCk7aWYobnVsbD09PWF8fG51bGw9PT1hLmNoaWxkKXJoKGIpP2IuZmxhZ3N8PTQ6ZC5oeWRyYXRlfHwoYi5mbGFnc3w9MjU2KTtDaShiKTtyZXR1cm4gbnVsbDtjYXNlIDU6aGgoYik7dmFyIGU9ZGgoY2guY3VycmVudCk7Yz1iLnR5cGU7aWYobnVsbCE9PWEmJm51bGwhPWIuc3RhdGVOb2RlKURpKGEsYixjLGQsZSksYS5yZWYhPT1iLnJlZiYmKGIuZmxhZ3N8PTEyOCk7ZWxzZXtpZighZCl7aWYobnVsbD09PVxuYi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoeSgxNjYpKTtyZXR1cm4gbnVsbH1hPWRoKGFoLmN1cnJlbnQpO2lmKHJoKGIpKXtkPWIuc3RhdGVOb2RlO2M9Yi50eXBlO3ZhciBmPWIubWVtb2l6ZWRQcm9wcztkW3dmXT1iO2RbeGZdPWY7c3dpdGNoKGMpe2Nhc2UgXCJkaWFsb2dcIjpHKFwiY2FuY2VsXCIsZCk7RyhcImNsb3NlXCIsZCk7YnJlYWs7Y2FzZSBcImlmcmFtZVwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwiZW1iZWRcIjpHKFwibG9hZFwiLGQpO2JyZWFrO2Nhc2UgXCJ2aWRlb1wiOmNhc2UgXCJhdWRpb1wiOmZvcihhPTA7YTxYZS5sZW5ndGg7YSsrKUcoWGVbYV0sZCk7YnJlYWs7Y2FzZSBcInNvdXJjZVwiOkcoXCJlcnJvclwiLGQpO2JyZWFrO2Nhc2UgXCJpbWdcIjpjYXNlIFwiaW1hZ2VcIjpjYXNlIFwibGlua1wiOkcoXCJlcnJvclwiLGQpO0coXCJsb2FkXCIsZCk7YnJlYWs7Y2FzZSBcImRldGFpbHNcIjpHKFwidG9nZ2xlXCIsZCk7YnJlYWs7Y2FzZSBcImlucHV0XCI6WmEoZCxmKTtHKFwiaW52YWxpZFwiLGQpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjpkLl93cmFwcGVyU3RhdGU9XG57d2FzTXVsdGlwbGU6ISFmLm11bHRpcGxlfTtHKFwiaW52YWxpZFwiLGQpO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmhiKGQsZiksRyhcImludmFsaWRcIixkKX12YihjLGYpO2E9bnVsbDtmb3IodmFyIGcgaW4gZilmLmhhc093blByb3BlcnR5KGcpJiYoZT1mW2ddLFwiY2hpbGRyZW5cIj09PWc/XCJzdHJpbmdcIj09PXR5cGVvZiBlP2QudGV4dENvbnRlbnQhPT1lJiYoYT1bXCJjaGlsZHJlblwiLGVdKTpcIm51bWJlclwiPT09dHlwZW9mIGUmJmQudGV4dENvbnRlbnQhPT1cIlwiK2UmJihhPVtcImNoaWxkcmVuXCIsXCJcIitlXSk6Y2EuaGFzT3duUHJvcGVydHkoZykmJm51bGwhPWUmJlwib25TY3JvbGxcIj09PWcmJkcoXCJzY3JvbGxcIixkKSk7c3dpdGNoKGMpe2Nhc2UgXCJpbnB1dFwiOlZhKGQpO2NiKGQsZiwhMCk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6VmEoZCk7amIoZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmNhc2UgXCJvcHRpb25cIjpicmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIj09PXR5cGVvZiBmLm9uQ2xpY2smJihkLm9uY2xpY2s9XG5qZil9ZD1hO2IudXBkYXRlUXVldWU9ZDtudWxsIT09ZCYmKGIuZmxhZ3N8PTQpfWVsc2V7Zz05PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudDthPT09a2IuaHRtbCYmKGE9bGIoYykpO2E9PT1rYi5odG1sP1wic2NyaXB0XCI9PT1jPyhhPWcuY3JlYXRlRWxlbWVudChcImRpdlwiKSxhLmlubmVySFRNTD1cIjxzY3JpcHQ+XFx4M2Mvc2NyaXB0PlwiLGE9YS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpKTpcInN0cmluZ1wiPT09dHlwZW9mIGQuaXM/YT1nLmNyZWF0ZUVsZW1lbnQoYyx7aXM6ZC5pc30pOihhPWcuY3JlYXRlRWxlbWVudChjKSxcInNlbGVjdFwiPT09YyYmKGc9YSxkLm11bHRpcGxlP2cubXVsdGlwbGU9ITA6ZC5zaXplJiYoZy5zaXplPWQuc2l6ZSkpKTphPWcuY3JlYXRlRWxlbWVudE5TKGEsYyk7YVt3Zl09YjthW3hmXT1kO0JpKGEsYiwhMSwhMSk7Yi5zdGF0ZU5vZGU9YTtnPXdiKGMsZCk7c3dpdGNoKGMpe2Nhc2UgXCJkaWFsb2dcIjpHKFwiY2FuY2VsXCIsYSk7RyhcImNsb3NlXCIsYSk7XG5lPWQ7YnJlYWs7Y2FzZSBcImlmcmFtZVwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwiZW1iZWRcIjpHKFwibG9hZFwiLGEpO2U9ZDticmVhaztjYXNlIFwidmlkZW9cIjpjYXNlIFwiYXVkaW9cIjpmb3IoZT0wO2U8WGUubGVuZ3RoO2UrKylHKFhlW2VdLGEpO2U9ZDticmVhaztjYXNlIFwic291cmNlXCI6RyhcImVycm9yXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJpbWdcIjpjYXNlIFwiaW1hZ2VcIjpjYXNlIFwibGlua1wiOkcoXCJlcnJvclwiLGEpO0coXCJsb2FkXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJkZXRhaWxzXCI6RyhcInRvZ2dsZVwiLGEpO2U9ZDticmVhaztjYXNlIFwiaW5wdXRcIjpaYShhLGQpO2U9WWEoYSxkKTtHKFwiaW52YWxpZFwiLGEpO2JyZWFrO2Nhc2UgXCJvcHRpb25cIjplPWViKGEsZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmEuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFkLm11bHRpcGxlfTtlPW0oe30sZCx7dmFsdWU6dm9pZCAwfSk7RyhcImludmFsaWRcIixhKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjpoYihhLGQpO2U9XG5nYihhLGQpO0coXCJpbnZhbGlkXCIsYSk7YnJlYWs7ZGVmYXVsdDplPWR9dmIoYyxlKTt2YXIgaD1lO2ZvcihmIGluIGgpaWYoaC5oYXNPd25Qcm9wZXJ0eShmKSl7dmFyIGs9aFtmXTtcInN0eWxlXCI9PT1mP3RiKGEsayk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT09Zj8oaz1rP2suX19odG1sOnZvaWQgMCxudWxsIT1rJiZvYihhLGspKTpcImNoaWxkcmVuXCI9PT1mP1wic3RyaW5nXCI9PT10eXBlb2Ygaz8oXCJ0ZXh0YXJlYVwiIT09Y3x8XCJcIiE9PWspJiZwYihhLGspOlwibnVtYmVyXCI9PT10eXBlb2YgayYmcGIoYSxcIlwiK2spOlwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCIhPT1mJiZcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiIT09ZiYmXCJhdXRvRm9jdXNcIiE9PWYmJihjYS5oYXNPd25Qcm9wZXJ0eShmKT9udWxsIT1rJiZcIm9uU2Nyb2xsXCI9PT1mJiZHKFwic2Nyb2xsXCIsYSk6bnVsbCE9ayYmcWEoYSxmLGssZykpfXN3aXRjaChjKXtjYXNlIFwiaW5wdXRcIjpWYShhKTtjYihhLGQsITEpO1xuYnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6VmEoYSk7amIoYSk7YnJlYWs7Y2FzZSBcIm9wdGlvblwiOm51bGwhPWQudmFsdWUmJmEuc2V0QXR0cmlidXRlKFwidmFsdWVcIixcIlwiK1NhKGQudmFsdWUpKTticmVhaztjYXNlIFwic2VsZWN0XCI6YS5tdWx0aXBsZT0hIWQubXVsdGlwbGU7Zj1kLnZhbHVlO251bGwhPWY/ZmIoYSwhIWQubXVsdGlwbGUsZiwhMSk6bnVsbCE9ZC5kZWZhdWx0VmFsdWUmJmZiKGEsISFkLm11bHRpcGxlLGQuZGVmYXVsdFZhbHVlLCEwKTticmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLm9uQ2xpY2smJihhLm9uY2xpY2s9amYpfW1mKGMsZCkmJihiLmZsYWdzfD00KX1udWxsIT09Yi5yZWYmJihiLmZsYWdzfD0xMjgpfXJldHVybiBudWxsO2Nhc2UgNjppZihhJiZudWxsIT1iLnN0YXRlTm9kZSlFaShhLGIsYS5tZW1vaXplZFByb3BzLGQpO2Vsc2V7aWYoXCJzdHJpbmdcIiE9PXR5cGVvZiBkJiZudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoeSgxNjYpKTtcbmM9ZGgoY2guY3VycmVudCk7ZGgoYWguY3VycmVudCk7cmgoYik/KGQ9Yi5zdGF0ZU5vZGUsYz1iLm1lbW9pemVkUHJvcHMsZFt3Zl09YixkLm5vZGVWYWx1ZSE9PWMmJihiLmZsYWdzfD00KSk6KGQ9KDk9PT1jLm5vZGVUeXBlP2M6Yy5vd25lckRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZShkKSxkW3dmXT1iLGIuc3RhdGVOb2RlPWQpfXJldHVybiBudWxsO2Nhc2UgMTM6SChQKTtkPWIubWVtb2l6ZWRTdGF0ZTtpZigwIT09KGIuZmxhZ3MmNjQpKXJldHVybiBiLmxhbmVzPWMsYjtkPW51bGwhPT1kO2M9ITE7bnVsbD09PWE/dm9pZCAwIT09Yi5tZW1vaXplZFByb3BzLmZhbGxiYWNrJiZyaChiKTpjPW51bGwhPT1hLm1lbW9pemVkU3RhdGU7aWYoZCYmIWMmJjAhPT0oYi5tb2RlJjIpKWlmKG51bGw9PT1hJiYhMCE9PWIubWVtb2l6ZWRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFja3x8MCE9PShQLmN1cnJlbnQmMSkpMD09PVYmJihWPTMpO2Vsc2V7aWYoMD09PVZ8fDM9PT1WKVY9XG40O251bGw9PT1VfHwwPT09KERnJjEzNDIxNzcyNykmJjA9PT0oSGkmMTM0MjE3NzI3KXx8SWkoVSxXKX1pZihkfHxjKWIuZmxhZ3N8PTQ7cmV0dXJuIG51bGw7Y2FzZSA0OnJldHVybiBmaCgpLENpKGIpLG51bGw9PT1hJiZjZihiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxudWxsO2Nhc2UgMTA6cmV0dXJuIHJnKGIpLG51bGw7Y2FzZSAxNzpyZXR1cm4gRmYoYi50eXBlKSYmR2YoKSxudWxsO2Nhc2UgMTk6SChQKTtkPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsPT09ZClyZXR1cm4gbnVsbDtmPTAhPT0oYi5mbGFncyY2NCk7Zz1kLnJlbmRlcmluZztpZihudWxsPT09ZylpZihmKUZpKGQsITEpO2Vsc2V7aWYoMCE9PVZ8fG51bGwhPT1hJiYwIT09KGEuZmxhZ3MmNjQpKWZvcihhPWIuY2hpbGQ7bnVsbCE9PWE7KXtnPWloKGEpO2lmKG51bGwhPT1nKXtiLmZsYWdzfD02NDtGaShkLCExKTtmPWcudXBkYXRlUXVldWU7bnVsbCE9PWYmJihiLnVwZGF0ZVF1ZXVlPWYsYi5mbGFnc3w9NCk7XG5udWxsPT09ZC5sYXN0RWZmZWN0JiYoYi5maXJzdEVmZmVjdD1udWxsKTtiLmxhc3RFZmZlY3Q9ZC5sYXN0RWZmZWN0O2Q9Yztmb3IoYz1iLmNoaWxkO251bGwhPT1jOylmPWMsYT1kLGYuZmxhZ3MmPTIsZi5uZXh0RWZmZWN0PW51bGwsZi5maXJzdEVmZmVjdD1udWxsLGYubGFzdEVmZmVjdD1udWxsLGc9Zi5hbHRlcm5hdGUsbnVsbD09PWc/KGYuY2hpbGRMYW5lcz0wLGYubGFuZXM9YSxmLmNoaWxkPW51bGwsZi5tZW1vaXplZFByb3BzPW51bGwsZi5tZW1vaXplZFN0YXRlPW51bGwsZi51cGRhdGVRdWV1ZT1udWxsLGYuZGVwZW5kZW5jaWVzPW51bGwsZi5zdGF0ZU5vZGU9bnVsbCk6KGYuY2hpbGRMYW5lcz1nLmNoaWxkTGFuZXMsZi5sYW5lcz1nLmxhbmVzLGYuY2hpbGQ9Zy5jaGlsZCxmLm1lbW9pemVkUHJvcHM9Zy5tZW1vaXplZFByb3BzLGYubWVtb2l6ZWRTdGF0ZT1nLm1lbW9pemVkU3RhdGUsZi51cGRhdGVRdWV1ZT1nLnVwZGF0ZVF1ZXVlLGYudHlwZT1nLnR5cGUsYT1nLmRlcGVuZGVuY2llcyxcbmYuZGVwZW5kZW5jaWVzPW51bGw9PT1hP251bGw6e2xhbmVzOmEubGFuZXMsZmlyc3RDb250ZXh0OmEuZmlyc3RDb250ZXh0fSksYz1jLnNpYmxpbmc7SShQLFAuY3VycmVudCYxfDIpO3JldHVybiBiLmNoaWxkfWE9YS5zaWJsaW5nfW51bGwhPT1kLnRhaWwmJk8oKT5KaSYmKGIuZmxhZ3N8PTY0LGY9ITAsRmkoZCwhMSksYi5sYW5lcz0zMzU1NDQzMil9ZWxzZXtpZighZilpZihhPWloKGcpLG51bGwhPT1hKXtpZihiLmZsYWdzfD02NCxmPSEwLGM9YS51cGRhdGVRdWV1ZSxudWxsIT09YyYmKGIudXBkYXRlUXVldWU9YyxiLmZsYWdzfD00KSxGaShkLCEwKSxudWxsPT09ZC50YWlsJiZcImhpZGRlblwiPT09ZC50YWlsTW9kZSYmIWcuYWx0ZXJuYXRlJiYhbGgpcmV0dXJuIGI9Yi5sYXN0RWZmZWN0PWQubGFzdEVmZmVjdCxudWxsIT09YiYmKGIubmV4dEVmZmVjdD1udWxsKSxudWxsfWVsc2UgMipPKCktZC5yZW5kZXJpbmdTdGFydFRpbWU+SmkmJjEwNzM3NDE4MjQhPT1jJiYoYi5mbGFnc3w9XG42NCxmPSEwLEZpKGQsITEpLGIubGFuZXM9MzM1NTQ0MzIpO2QuaXNCYWNrd2FyZHM/KGcuc2libGluZz1iLmNoaWxkLGIuY2hpbGQ9Zyk6KGM9ZC5sYXN0LG51bGwhPT1jP2Muc2libGluZz1nOmIuY2hpbGQ9ZyxkLmxhc3Q9Zyl9cmV0dXJuIG51bGwhPT1kLnRhaWw/KGM9ZC50YWlsLGQucmVuZGVyaW5nPWMsZC50YWlsPWMuc2libGluZyxkLmxhc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0LGQucmVuZGVyaW5nU3RhcnRUaW1lPU8oKSxjLnNpYmxpbmc9bnVsbCxiPVAuY3VycmVudCxJKFAsZj9iJjF8MjpiJjEpLGMpOm51bGw7Y2FzZSAyMzpjYXNlIDI0OnJldHVybiBLaSgpLG51bGwhPT1hJiZudWxsIT09YS5tZW1vaXplZFN0YXRlIT09KG51bGwhPT1iLm1lbW9pemVkU3RhdGUpJiZcInVuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nXCIhPT1kLm1vZGUmJihiLmZsYWdzfD00KSxudWxsfXRocm93IEVycm9yKHkoMTU2LGIudGFnKSk7fVxuZnVuY3Rpb24gTGkoYSl7c3dpdGNoKGEudGFnKXtjYXNlIDE6RmYoYS50eXBlKSYmR2YoKTt2YXIgYj1hLmZsYWdzO3JldHVybiBiJjQwOTY/KGEuZmxhZ3M9YiYtNDA5N3w2NCxhKTpudWxsO2Nhc2UgMzpmaCgpO0goTik7SChNKTt1aCgpO2I9YS5mbGFncztpZigwIT09KGImNjQpKXRocm93IEVycm9yKHkoMjg1KSk7YS5mbGFncz1iJi00MDk3fDY0O3JldHVybiBhO2Nhc2UgNTpyZXR1cm4gaGgoYSksbnVsbDtjYXNlIDEzOnJldHVybiBIKFApLGI9YS5mbGFncyxiJjQwOTY/KGEuZmxhZ3M9YiYtNDA5N3w2NCxhKTpudWxsO2Nhc2UgMTk6cmV0dXJuIEgoUCksbnVsbDtjYXNlIDQ6cmV0dXJuIGZoKCksbnVsbDtjYXNlIDEwOnJldHVybiByZyhhKSxudWxsO2Nhc2UgMjM6Y2FzZSAyNDpyZXR1cm4gS2koKSxudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fVxuZnVuY3Rpb24gTWkoYSxiKXt0cnl7dmFyIGM9XCJcIixkPWI7ZG8gYys9UWEoZCksZD1kLnJldHVybjt3aGlsZShkKTt2YXIgZT1jfWNhdGNoKGYpe2U9XCJcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBcIitmLm1lc3NhZ2UrXCJcXG5cIitmLnN0YWNrfXJldHVybnt2YWx1ZTphLHNvdXJjZTpiLHN0YWNrOmV9fWZ1bmN0aW9uIE5pKGEsYil7dHJ5e2NvbnNvbGUuZXJyb3IoYi52YWx1ZSl9Y2F0Y2goYyl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGM7fSl9fXZhciBPaT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgV2Vha01hcD9XZWFrTWFwOk1hcDtmdW5jdGlvbiBQaShhLGIsYyl7Yz16ZygtMSxjKTtjLnRhZz0zO2MucGF5bG9hZD17ZWxlbWVudDpudWxsfTt2YXIgZD1iLnZhbHVlO2MuY2FsbGJhY2s9ZnVuY3Rpb24oKXtRaXx8KFFpPSEwLFJpPWQpO05pKGEsYil9O3JldHVybiBjfVxuZnVuY3Rpb24gU2koYSxiLGMpe2M9emcoLTEsYyk7Yy50YWc9Mzt2YXIgZD1hLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkKXt2YXIgZT1iLnZhbHVlO2MucGF5bG9hZD1mdW5jdGlvbigpe05pKGEsYik7cmV0dXJuIGQoZSl9fXZhciBmPWEuc3RhdGVOb2RlO251bGwhPT1mJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgZi5jb21wb25lbnREaWRDYXRjaCYmKGMuY2FsbGJhY2s9ZnVuY3Rpb24oKXtcImZ1bmN0aW9uXCIhPT10eXBlb2YgZCYmKG51bGw9PT1UaT9UaT1uZXcgU2V0KFt0aGlzXSk6VGkuYWRkKHRoaXMpLE5pKGEsYikpO3ZhciBjPWIuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaChiLnZhbHVlLHtjb21wb25lbnRTdGFjazpudWxsIT09Yz9jOlwiXCJ9KX0pO3JldHVybiBjfXZhciBVaT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgV2Vha1NldD9XZWFrU2V0OlNldDtcbmZ1bmN0aW9uIFZpKGEpe3ZhciBiPWEucmVmO2lmKG51bGwhPT1iKWlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBiKXRyeXtiKG51bGwpfWNhdGNoKGMpe1dpKGEsYyl9ZWxzZSBiLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBYaShhLGIpe3N3aXRjaChiLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpjYXNlIDIyOnJldHVybjtjYXNlIDE6aWYoYi5mbGFncyYyNTYmJm51bGwhPT1hKXt2YXIgYz1hLm1lbW9pemVkUHJvcHMsZD1hLm1lbW9pemVkU3RhdGU7YT1iLnN0YXRlTm9kZTtiPWEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoYi5lbGVtZW50VHlwZT09PWIudHlwZT9jOmxnKGIudHlwZSxjKSxkKTthLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlPWJ9cmV0dXJuO2Nhc2UgMzpiLmZsYWdzJjI1NiYmcWYoYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7cmV0dXJuO2Nhc2UgNTpjYXNlIDY6Y2FzZSA0OmNhc2UgMTc6cmV0dXJufXRocm93IEVycm9yKHkoMTYzKSk7fVxuZnVuY3Rpb24gWWkoYSxiLGMpe3N3aXRjaChjLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpjYXNlIDIyOmI9Yy51cGRhdGVRdWV1ZTtiPW51bGwhPT1iP2IubGFzdEVmZmVjdDpudWxsO2lmKG51bGwhPT1iKXthPWI9Yi5uZXh0O2Rve2lmKDM9PT0oYS50YWcmMykpe3ZhciBkPWEuY3JlYXRlO2EuZGVzdHJveT1kKCl9YT1hLm5leHR9d2hpbGUoYSE9PWIpfWI9Yy51cGRhdGVRdWV1ZTtiPW51bGwhPT1iP2IubGFzdEVmZmVjdDpudWxsO2lmKG51bGwhPT1iKXthPWI9Yi5uZXh0O2Rve3ZhciBlPWE7ZD1lLm5leHQ7ZT1lLnRhZzswIT09KGUmNCkmJjAhPT0oZSYxKSYmKFppKGMsYSksJGkoYyxhKSk7YT1kfXdoaWxlKGEhPT1iKX1yZXR1cm47Y2FzZSAxOmE9Yy5zdGF0ZU5vZGU7Yy5mbGFncyY0JiYobnVsbD09PWI/YS5jb21wb25lbnREaWRNb3VudCgpOihkPWMuZWxlbWVudFR5cGU9PT1jLnR5cGU/Yi5tZW1vaXplZFByb3BzOmxnKGMudHlwZSxiLm1lbW9pemVkUHJvcHMpLGEuY29tcG9uZW50RGlkVXBkYXRlKGQsXG5iLm1lbW9pemVkU3RhdGUsYS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSkpKTtiPWMudXBkYXRlUXVldWU7bnVsbCE9PWImJkVnKGMsYixhKTtyZXR1cm47Y2FzZSAzOmI9Yy51cGRhdGVRdWV1ZTtpZihudWxsIT09Yil7YT1udWxsO2lmKG51bGwhPT1jLmNoaWxkKXN3aXRjaChjLmNoaWxkLnRhZyl7Y2FzZSA1OmE9Yy5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOmE9Yy5jaGlsZC5zdGF0ZU5vZGV9RWcoYyxiLGEpfXJldHVybjtjYXNlIDU6YT1jLnN0YXRlTm9kZTtudWxsPT09YiYmYy5mbGFncyY0JiZtZihjLnR5cGUsYy5tZW1vaXplZFByb3BzKSYmYS5mb2N1cygpO3JldHVybjtjYXNlIDY6cmV0dXJuO2Nhc2UgNDpyZXR1cm47Y2FzZSAxMjpyZXR1cm47Y2FzZSAxMzpudWxsPT09Yy5tZW1vaXplZFN0YXRlJiYoYz1jLmFsdGVybmF0ZSxudWxsIT09YyYmKGM9Yy5tZW1vaXplZFN0YXRlLG51bGwhPT1jJiYoYz1jLmRlaHlkcmF0ZWQsbnVsbCE9PWMmJkNjKGMpKSkpO1xucmV0dXJuO2Nhc2UgMTk6Y2FzZSAxNzpjYXNlIDIwOmNhc2UgMjE6Y2FzZSAyMzpjYXNlIDI0OnJldHVybn10aHJvdyBFcnJvcih5KDE2MykpO31cbmZ1bmN0aW9uIGFqKGEsYil7Zm9yKHZhciBjPWE7Oyl7aWYoNT09PWMudGFnKXt2YXIgZD1jLnN0YXRlTm9kZTtpZihiKWQ9ZC5zdHlsZSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5zZXRQcm9wZXJ0eT9kLnNldFByb3BlcnR5KFwiZGlzcGxheVwiLFwibm9uZVwiLFwiaW1wb3J0YW50XCIpOmQuZGlzcGxheT1cIm5vbmVcIjtlbHNle2Q9Yy5zdGF0ZU5vZGU7dmFyIGU9Yy5tZW1vaXplZFByb3BzLnN0eWxlO2U9dm9pZCAwIT09ZSYmbnVsbCE9PWUmJmUuaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5XCIpP2UuZGlzcGxheTpudWxsO2Quc3R5bGUuZGlzcGxheT1zYihcImRpc3BsYXlcIixlKX19ZWxzZSBpZig2PT09Yy50YWcpYy5zdGF0ZU5vZGUubm9kZVZhbHVlPWI/XCJcIjpjLm1lbW9pemVkUHJvcHM7ZWxzZSBpZigoMjMhPT1jLnRhZyYmMjQhPT1jLnRhZ3x8bnVsbD09PWMubWVtb2l6ZWRTdGF0ZXx8Yz09PWEpJiZudWxsIT09Yy5jaGlsZCl7Yy5jaGlsZC5yZXR1cm49YztjPWMuY2hpbGQ7Y29udGludWV9aWYoYz09PVxuYSlicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YSlyZXR1cm47Yz1jLnJldHVybn1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9Yy5zaWJsaW5nfX1cbmZ1bmN0aW9uIGJqKGEsYil7aWYoTWYmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBNZi5vbkNvbW1pdEZpYmVyVW5tb3VudCl0cnl7TWYub25Db21taXRGaWJlclVubW91bnQoTGYsYil9Y2F0Y2goZil7fXN3aXRjaChiLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMjI6YT1iLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1hJiYoYT1hLmxhc3RFZmZlY3QsbnVsbCE9PWEpKXt2YXIgYz1hPWEubmV4dDtkb3t2YXIgZD1jLGU9ZC5kZXN0cm95O2Q9ZC50YWc7aWYodm9pZCAwIT09ZSlpZigwIT09KGQmNCkpWmkoYixjKTtlbHNle2Q9Yjt0cnl7ZSgpfWNhdGNoKGYpe1dpKGQsZil9fWM9Yy5uZXh0fXdoaWxlKGMhPT1hKX1icmVhaztjYXNlIDE6VmkoYik7YT1iLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYS5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7YS5wcm9wcz1iLm1lbW9pemVkUHJvcHMsYS5zdGF0ZT1iLm1lbW9pemVkU3RhdGUsYS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKGYpe1dpKGIsXG5mKX1icmVhaztjYXNlIDU6VmkoYik7YnJlYWs7Y2FzZSA0OmNqKGEsYil9fWZ1bmN0aW9uIGRqKGEpe2EuYWx0ZXJuYXRlPW51bGw7YS5jaGlsZD1udWxsO2EuZGVwZW5kZW5jaWVzPW51bGw7YS5maXJzdEVmZmVjdD1udWxsO2EubGFzdEVmZmVjdD1udWxsO2EubWVtb2l6ZWRQcm9wcz1udWxsO2EubWVtb2l6ZWRTdGF0ZT1udWxsO2EucGVuZGluZ1Byb3BzPW51bGw7YS5yZXR1cm49bnVsbDthLnVwZGF0ZVF1ZXVlPW51bGx9ZnVuY3Rpb24gZWooYSl7cmV0dXJuIDU9PT1hLnRhZ3x8Mz09PWEudGFnfHw0PT09YS50YWd9XG5mdW5jdGlvbiBmaihhKXthOntmb3IodmFyIGI9YS5yZXR1cm47bnVsbCE9PWI7KXtpZihlaihiKSlicmVhayBhO2I9Yi5yZXR1cm59dGhyb3cgRXJyb3IoeSgxNjApKTt9dmFyIGM9YjtiPWMuc3RhdGVOb2RlO3N3aXRjaChjLnRhZyl7Y2FzZSA1OnZhciBkPSExO2JyZWFrO2Nhc2UgMzpiPWIuY29udGFpbmVySW5mbztkPSEwO2JyZWFrO2Nhc2UgNDpiPWIuY29udGFpbmVySW5mbztkPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoeSgxNjEpKTt9Yy5mbGFncyYxNiYmKHBiKGIsXCJcIiksYy5mbGFncyY9LTE3KTthOmI6Zm9yKGM9YTs7KXtmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGVqKGMucmV0dXJuKSl7Yz1udWxsO2JyZWFrIGF9Yz1jLnJldHVybn1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2ZvcihjPWMuc2libGluZzs1IT09Yy50YWcmJjYhPT1jLnRhZyYmMTghPT1jLnRhZzspe2lmKGMuZmxhZ3MmMiljb250aW51ZSBiO2lmKG51bGw9PT1cbmMuY2hpbGR8fDQ9PT1jLnRhZyljb250aW51ZSBiO2Vsc2UgYy5jaGlsZC5yZXR1cm49YyxjPWMuY2hpbGR9aWYoIShjLmZsYWdzJjIpKXtjPWMuc3RhdGVOb2RlO2JyZWFrIGF9fWQ/Z2ooYSxjLGIpOmhqKGEsYyxiKX1cbmZ1bmN0aW9uIGdqKGEsYixjKXt2YXIgZD1hLnRhZyxlPTU9PT1kfHw2PT09ZDtpZihlKWE9ZT9hLnN0YXRlTm9kZTphLnN0YXRlTm9kZS5pbnN0YW5jZSxiPzg9PT1jLm5vZGVUeXBlP2MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxiKTpjLmluc2VydEJlZm9yZShhLGIpOig4PT09Yy5ub2RlVHlwZT8oYj1jLnBhcmVudE5vZGUsYi5pbnNlcnRCZWZvcmUoYSxjKSk6KGI9YyxiLmFwcGVuZENoaWxkKGEpKSxjPWMuX3JlYWN0Um9vdENvbnRhaW5lcixudWxsIT09YyYmdm9pZCAwIT09Y3x8bnVsbCE9PWIub25jbGlja3x8KGIub25jbGljaz1qZikpO2Vsc2UgaWYoNCE9PWQmJihhPWEuY2hpbGQsbnVsbCE9PWEpKWZvcihnaihhLGIsYyksYT1hLnNpYmxpbmc7bnVsbCE9PWE7KWdqKGEsYixjKSxhPWEuc2libGluZ31cbmZ1bmN0aW9uIGhqKGEsYixjKXt2YXIgZD1hLnRhZyxlPTU9PT1kfHw2PT09ZDtpZihlKWE9ZT9hLnN0YXRlTm9kZTphLnN0YXRlTm9kZS5pbnN0YW5jZSxiP2MuaW5zZXJ0QmVmb3JlKGEsYik6Yy5hcHBlbmRDaGlsZChhKTtlbHNlIGlmKDQhPT1kJiYoYT1hLmNoaWxkLG51bGwhPT1hKSlmb3IoaGooYSxiLGMpLGE9YS5zaWJsaW5nO251bGwhPT1hOyloaihhLGIsYyksYT1hLnNpYmxpbmd9XG5mdW5jdGlvbiBjaihhLGIpe2Zvcih2YXIgYz1iLGQ9ITEsZSxmOzspe2lmKCFkKXtkPWMucmV0dXJuO2E6Zm9yKDs7KXtpZihudWxsPT09ZCl0aHJvdyBFcnJvcih5KDE2MCkpO2U9ZC5zdGF0ZU5vZGU7c3dpdGNoKGQudGFnKXtjYXNlIDU6Zj0hMTticmVhayBhO2Nhc2UgMzplPWUuY29udGFpbmVySW5mbztmPSEwO2JyZWFrIGE7Y2FzZSA0OmU9ZS5jb250YWluZXJJbmZvO2Y9ITA7YnJlYWsgYX1kPWQucmV0dXJufWQ9ITB9aWYoNT09PWMudGFnfHw2PT09Yy50YWcpe2E6Zm9yKHZhciBnPWEsaD1jLGs9aDs7KWlmKGJqKGcsayksbnVsbCE9PWsuY2hpbGQmJjQhPT1rLnRhZylrLmNoaWxkLnJldHVybj1rLGs9ay5jaGlsZDtlbHNle2lmKGs9PT1oKWJyZWFrIGE7Zm9yKDtudWxsPT09ay5zaWJsaW5nOyl7aWYobnVsbD09PWsucmV0dXJufHxrLnJldHVybj09PWgpYnJlYWsgYTtrPWsucmV0dXJufWsuc2libGluZy5yZXR1cm49ay5yZXR1cm47az1rLnNpYmxpbmd9Zj8oZz1lLGg9Yy5zdGF0ZU5vZGUsXG44PT09Zy5ub2RlVHlwZT9nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCk6Zy5yZW1vdmVDaGlsZChoKSk6ZS5yZW1vdmVDaGlsZChjLnN0YXRlTm9kZSl9ZWxzZSBpZig0PT09Yy50YWcpe2lmKG51bGwhPT1jLmNoaWxkKXtlPWMuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87Zj0hMDtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX19ZWxzZSBpZihiaihhLGMpLG51bGwhPT1jLmNoaWxkKXtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09YilicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YilyZXR1cm47Yz1jLnJldHVybjs0PT09Yy50YWcmJihkPSExKX1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9Yy5zaWJsaW5nfX1cbmZ1bmN0aW9uIGlqKGEsYil7c3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAyMjp2YXIgYz1iLnVwZGF0ZVF1ZXVlO2M9bnVsbCE9PWM/Yy5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWMpe3ZhciBkPWM9Yy5uZXh0O2RvIDM9PT0oZC50YWcmMykmJihhPWQuZGVzdHJveSxkLmRlc3Ryb3k9dm9pZCAwLHZvaWQgMCE9PWEmJmEoKSksZD1kLm5leHQ7d2hpbGUoZCE9PWMpfXJldHVybjtjYXNlIDE6cmV0dXJuO2Nhc2UgNTpjPWIuc3RhdGVOb2RlO2lmKG51bGwhPWMpe2Q9Yi5tZW1vaXplZFByb3BzO3ZhciBlPW51bGwhPT1hP2EubWVtb2l6ZWRQcm9wczpkO2E9Yi50eXBlO3ZhciBmPWIudXBkYXRlUXVldWU7Yi51cGRhdGVRdWV1ZT1udWxsO2lmKG51bGwhPT1mKXtjW3hmXT1kO1wiaW5wdXRcIj09PWEmJlwicmFkaW9cIj09PWQudHlwZSYmbnVsbCE9ZC5uYW1lJiYkYShjLGQpO3diKGEsZSk7Yj13YihhLGQpO2ZvcihlPTA7ZTxmLmxlbmd0aDtlKz1cbjIpe3ZhciBnPWZbZV0saD1mW2UrMV07XCJzdHlsZVwiPT09Zz90YihjLGgpOlwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09PWc/b2IoYyxoKTpcImNoaWxkcmVuXCI9PT1nP3BiKGMsaCk6cWEoYyxnLGgsYil9c3dpdGNoKGEpe2Nhc2UgXCJpbnB1dFwiOmFiKGMsZCk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6aWIoYyxkKTticmVhaztjYXNlIFwic2VsZWN0XCI6YT1jLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUsYy5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPSEhZC5tdWx0aXBsZSxmPWQudmFsdWUsbnVsbCE9Zj9mYihjLCEhZC5tdWx0aXBsZSxmLCExKTphIT09ISFkLm11bHRpcGxlJiYobnVsbCE9ZC5kZWZhdWx0VmFsdWU/ZmIoYywhIWQubXVsdGlwbGUsZC5kZWZhdWx0VmFsdWUsITApOmZiKGMsISFkLm11bHRpcGxlLGQubXVsdGlwbGU/W106XCJcIiwhMSkpfX19cmV0dXJuO2Nhc2UgNjppZihudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoeSgxNjIpKTtiLnN0YXRlTm9kZS5ub2RlVmFsdWU9XG5iLm1lbW9pemVkUHJvcHM7cmV0dXJuO2Nhc2UgMzpjPWIuc3RhdGVOb2RlO2MuaHlkcmF0ZSYmKGMuaHlkcmF0ZT0hMSxDYyhjLmNvbnRhaW5lckluZm8pKTtyZXR1cm47Y2FzZSAxMjpyZXR1cm47Y2FzZSAxMzpudWxsIT09Yi5tZW1vaXplZFN0YXRlJiYoamo9TygpLGFqKGIuY2hpbGQsITApKTtraihiKTtyZXR1cm47Y2FzZSAxOTpraihiKTtyZXR1cm47Y2FzZSAxNzpyZXR1cm47Y2FzZSAyMzpjYXNlIDI0OmFqKGIsbnVsbCE9PWIubWVtb2l6ZWRTdGF0ZSk7cmV0dXJufXRocm93IEVycm9yKHkoMTYzKSk7fWZ1bmN0aW9uIGtqKGEpe3ZhciBiPWEudXBkYXRlUXVldWU7aWYobnVsbCE9PWIpe2EudXBkYXRlUXVldWU9bnVsbDt2YXIgYz1hLnN0YXRlTm9kZTtudWxsPT09YyYmKGM9YS5zdGF0ZU5vZGU9bmV3IFVpKTtiLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGQ9bGouYmluZChudWxsLGEsYik7Yy5oYXMoYil8fChjLmFkZChiKSxiLnRoZW4oZCxkKSl9KX19XG5mdW5jdGlvbiBtaihhLGIpe3JldHVybiBudWxsIT09YSYmKGE9YS5tZW1vaXplZFN0YXRlLG51bGw9PT1hfHxudWxsIT09YS5kZWh5ZHJhdGVkKT8oYj1iLm1lbW9pemVkU3RhdGUsbnVsbCE9PWImJm51bGw9PT1iLmRlaHlkcmF0ZWQpOiExfXZhciBuaj1NYXRoLmNlaWwsb2o9cmEuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixwaj1yYS5SZWFjdEN1cnJlbnRPd25lcixYPTAsVT1udWxsLFk9bnVsbCxXPTAscWo9MCxyaj1CZigwKSxWPTAsc2o9bnVsbCx0aj0wLERnPTAsSGk9MCx1aj0wLHZqPW51bGwsamo9MCxKaT1JbmZpbml0eTtmdW5jdGlvbiB3aigpe0ppPU8oKSs1MDB9dmFyIFo9bnVsbCxRaT0hMSxSaT1udWxsLFRpPW51bGwseGo9ITEseWo9bnVsbCx6aj05MCxBaj1bXSxCaj1bXSxDaj1udWxsLERqPTAsRWo9bnVsbCxGaj0tMSxHaj0wLEhqPTAsSWo9bnVsbCxKaj0hMTtmdW5jdGlvbiBIZygpe3JldHVybiAwIT09KFgmNDgpP08oKTotMSE9PUZqP0ZqOkZqPU8oKX1cbmZ1bmN0aW9uIElnKGEpe2E9YS5tb2RlO2lmKDA9PT0oYSYyKSlyZXR1cm4gMTtpZigwPT09KGEmNCkpcmV0dXJuIDk5PT09ZWcoKT8xOjI7MD09PUdqJiYoR2o9dGopO2lmKDAhPT1rZy50cmFuc2l0aW9uKXswIT09SGomJihIaj1udWxsIT09dmo/dmoucGVuZGluZ0xhbmVzOjApO2E9R2o7dmFyIGI9NDE4NjExMiZ+SGo7YiY9LWI7MD09PWImJihhPTQxODYxMTImfmEsYj1hJi1hLDA9PT1iJiYoYj04MTkyKSk7cmV0dXJuIGJ9YT1lZygpOzAhPT0oWCY0KSYmOTg9PT1hP2E9WGMoMTIsR2opOihhPVNjKGEpLGE9WGMoYSxHaikpO3JldHVybiBhfVxuZnVuY3Rpb24gSmcoYSxiLGMpe2lmKDUwPERqKXRocm93IERqPTAsRWo9bnVsbCxFcnJvcih5KDE4NSkpO2E9S2ooYSxiKTtpZihudWxsPT09YSlyZXR1cm4gbnVsbDskYyhhLGIsYyk7YT09PVUmJihIaXw9Yiw0PT09ViYmSWkoYSxXKSk7dmFyIGQ9ZWcoKTsxPT09Yj8wIT09KFgmOCkmJjA9PT0oWCY0OCk/TGooYSk6KE1qKGEsYyksMD09PVgmJih3aigpLGlnKCkpKTooMD09PShYJjQpfHw5OCE9PWQmJjk5IT09ZHx8KG51bGw9PT1Daj9Daj1uZXcgU2V0KFthXSk6Q2ouYWRkKGEpKSxNaihhLGMpKTt2aj1hfWZ1bmN0aW9uIEtqKGEsYil7YS5sYW5lc3w9Yjt2YXIgYz1hLmFsdGVybmF0ZTtudWxsIT09YyYmKGMubGFuZXN8PWIpO2M9YTtmb3IoYT1hLnJldHVybjtudWxsIT09YTspYS5jaGlsZExhbmVzfD1iLGM9YS5hbHRlcm5hdGUsbnVsbCE9PWMmJihjLmNoaWxkTGFuZXN8PWIpLGM9YSxhPWEucmV0dXJuO3JldHVybiAzPT09Yy50YWc/Yy5zdGF0ZU5vZGU6bnVsbH1cbmZ1bmN0aW9uIE1qKGEsYil7Zm9yKHZhciBjPWEuY2FsbGJhY2tOb2RlLGQ9YS5zdXNwZW5kZWRMYW5lcyxlPWEucGluZ2VkTGFuZXMsZj1hLmV4cGlyYXRpb25UaW1lcyxnPWEucGVuZGluZ0xhbmVzOzA8Zzspe3ZhciBoPTMxLVZjKGcpLGs9MTw8aCxsPWZbaF07aWYoLTE9PT1sKXtpZigwPT09KGsmZCl8fDAhPT0oayZlKSl7bD1iO1JjKGspO3ZhciBuPUY7ZltoXT0xMDw9bj9sKzI1MDo2PD1uP2wrNUUzOi0xfX1lbHNlIGw8PWImJihhLmV4cGlyZWRMYW5lc3w9ayk7ZyY9fmt9ZD1VYyhhLGE9PT1VP1c6MCk7Yj1GO2lmKDA9PT1kKW51bGwhPT1jJiYoYyE9PVpmJiZQZihjKSxhLmNhbGxiYWNrTm9kZT1udWxsLGEuY2FsbGJhY2tQcmlvcml0eT0wKTtlbHNle2lmKG51bGwhPT1jKXtpZihhLmNhbGxiYWNrUHJpb3JpdHk9PT1iKXJldHVybjtjIT09WmYmJlBmKGMpfTE1PT09Yj8oYz1Mai5iaW5kKG51bGwsYSksbnVsbD09PWFnPyhhZz1bY10sYmc9T2YoVWYsamcpKTphZy5wdXNoKGMpLFxuYz1aZik6MTQ9PT1iP2M9aGcoOTksTGouYmluZChudWxsLGEpKTooYz1UYyhiKSxjPWhnKGMsTmouYmluZChudWxsLGEpKSk7YS5jYWxsYmFja1ByaW9yaXR5PWI7YS5jYWxsYmFja05vZGU9Y319XG5mdW5jdGlvbiBOaihhKXtGaj0tMTtIaj1Haj0wO2lmKDAhPT0oWCY0OCkpdGhyb3cgRXJyb3IoeSgzMjcpKTt2YXIgYj1hLmNhbGxiYWNrTm9kZTtpZihPaigpJiZhLmNhbGxiYWNrTm9kZSE9PWIpcmV0dXJuIG51bGw7dmFyIGM9VWMoYSxhPT09VT9XOjApO2lmKDA9PT1jKXJldHVybiBudWxsO3ZhciBkPWM7dmFyIGU9WDtYfD0xNjt2YXIgZj1QaigpO2lmKFUhPT1hfHxXIT09ZCl3aigpLFFqKGEsZCk7ZG8gdHJ5e1JqKCk7YnJlYWt9Y2F0Y2goaCl7U2ooYSxoKX13aGlsZSgxKTtxZygpO29qLmN1cnJlbnQ9ZjtYPWU7bnVsbCE9PVk/ZD0wOihVPW51bGwsVz0wLGQ9Vik7aWYoMCE9PSh0aiZIaSkpUWooYSwwKTtlbHNlIGlmKDAhPT1kKXsyPT09ZCYmKFh8PTY0LGEuaHlkcmF0ZSYmKGEuaHlkcmF0ZT0hMSxxZihhLmNvbnRhaW5lckluZm8pKSxjPVdjKGEpLDAhPT1jJiYoZD1UaihhLGMpKSk7aWYoMT09PWQpdGhyb3cgYj1zaixRaihhLDApLElpKGEsYyksTWooYSxPKCkpLGI7YS5maW5pc2hlZFdvcms9XG5hLmN1cnJlbnQuYWx0ZXJuYXRlO2EuZmluaXNoZWRMYW5lcz1jO3N3aXRjaChkKXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKHkoMzQ1KSk7Y2FzZSAyOlVqKGEpO2JyZWFrO2Nhc2UgMzpJaShhLGMpO2lmKChjJjYyOTE0NTYwKT09PWMmJihkPWpqKzUwMC1PKCksMTA8ZCkpe2lmKDAhPT1VYyhhLDApKWJyZWFrO2U9YS5zdXNwZW5kZWRMYW5lcztpZigoZSZjKSE9PWMpe0hnKCk7YS5waW5nZWRMYW5lc3w9YS5zdXNwZW5kZWRMYW5lcyZlO2JyZWFrfWEudGltZW91dEhhbmRsZT1vZihVai5iaW5kKG51bGwsYSksZCk7YnJlYWt9VWooYSk7YnJlYWs7Y2FzZSA0OklpKGEsYyk7aWYoKGMmNDE4NjExMik9PT1jKWJyZWFrO2Q9YS5ldmVudFRpbWVzO2ZvcihlPS0xOzA8Yzspe3ZhciBnPTMxLVZjKGMpO2Y9MTw8ZztnPWRbZ107Zz5lJiYoZT1nKTtjJj1+Zn1jPWU7Yz1PKCktYztjPSgxMjA+Yz8xMjA6NDgwPmM/NDgwOjEwODA+Yz8xMDgwOjE5MjA+Yz8xOTIwOjNFMz5jPzNFMzo0MzIwPlxuYz80MzIwOjE5NjAqbmooYy8xOTYwKSktYztpZigxMDxjKXthLnRpbWVvdXRIYW5kbGU9b2YoVWouYmluZChudWxsLGEpLGMpO2JyZWFrfVVqKGEpO2JyZWFrO2Nhc2UgNTpVaihhKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKHkoMzI5KSk7fX1NaihhLE8oKSk7cmV0dXJuIGEuY2FsbGJhY2tOb2RlPT09Yj9Oai5iaW5kKG51bGwsYSk6bnVsbH1mdW5jdGlvbiBJaShhLGIpe2ImPX51ajtiJj1+SGk7YS5zdXNwZW5kZWRMYW5lc3w9YjthLnBpbmdlZExhbmVzJj1+Yjtmb3IoYT1hLmV4cGlyYXRpb25UaW1lczswPGI7KXt2YXIgYz0zMS1WYyhiKSxkPTE8PGM7YVtjXT0tMTtiJj1+ZH19XG5mdW5jdGlvbiBMaihhKXtpZigwIT09KFgmNDgpKXRocm93IEVycm9yKHkoMzI3KSk7T2ooKTtpZihhPT09VSYmMCE9PShhLmV4cGlyZWRMYW5lcyZXKSl7dmFyIGI9Vzt2YXIgYz1UaihhLGIpOzAhPT0odGomSGkpJiYoYj1VYyhhLGIpLGM9VGooYSxiKSl9ZWxzZSBiPVVjKGEsMCksYz1UaihhLGIpOzAhPT1hLnRhZyYmMj09PWMmJihYfD02NCxhLmh5ZHJhdGUmJihhLmh5ZHJhdGU9ITEscWYoYS5jb250YWluZXJJbmZvKSksYj1XYyhhKSwwIT09YiYmKGM9VGooYSxiKSkpO2lmKDE9PT1jKXRocm93IGM9c2osUWooYSwwKSxJaShhLGIpLE1qKGEsTygpKSxjO2EuZmluaXNoZWRXb3JrPWEuY3VycmVudC5hbHRlcm5hdGU7YS5maW5pc2hlZExhbmVzPWI7VWooYSk7TWooYSxPKCkpO3JldHVybiBudWxsfVxuZnVuY3Rpb24gVmooKXtpZihudWxsIT09Q2ope3ZhciBhPUNqO0NqPW51bGw7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuZXhwaXJlZExhbmVzfD0yNCZhLnBlbmRpbmdMYW5lcztNaihhLE8oKSl9KX1pZygpfWZ1bmN0aW9uIFdqKGEsYil7dmFyIGM9WDtYfD0xO3RyeXtyZXR1cm4gYShiKX1maW5hbGx5e1g9YywwPT09WCYmKHdqKCksaWcoKSl9fWZ1bmN0aW9uIFhqKGEsYil7dmFyIGM9WDtYJj0tMjtYfD04O3RyeXtyZXR1cm4gYShiKX1maW5hbGx5e1g9YywwPT09WCYmKHdqKCksaWcoKSl9fWZ1bmN0aW9uIG5pKGEsYil7SShyaixxaik7cWp8PWI7dGp8PWJ9ZnVuY3Rpb24gS2koKXtxaj1yai5jdXJyZW50O0gocmopfVxuZnVuY3Rpb24gUWooYSxiKXthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRMYW5lcz0wO3ZhciBjPWEudGltZW91dEhhbmRsZTstMSE9PWMmJihhLnRpbWVvdXRIYW5kbGU9LTEscGYoYykpO2lmKG51bGwhPT1ZKWZvcihjPVkucmV0dXJuO251bGwhPT1jOyl7dmFyIGQ9Yztzd2l0Y2goZC50YWcpe2Nhc2UgMTpkPWQudHlwZS5jaGlsZENvbnRleHRUeXBlcztudWxsIT09ZCYmdm9pZCAwIT09ZCYmR2YoKTticmVhaztjYXNlIDM6ZmgoKTtIKE4pO0goTSk7dWgoKTticmVhaztjYXNlIDU6aGgoZCk7YnJlYWs7Y2FzZSA0OmZoKCk7YnJlYWs7Y2FzZSAxMzpIKFApO2JyZWFrO2Nhc2UgMTk6SChQKTticmVhaztjYXNlIDEwOnJnKGQpO2JyZWFrO2Nhc2UgMjM6Y2FzZSAyNDpLaSgpfWM9Yy5yZXR1cm59VT1hO1k9VGcoYS5jdXJyZW50LG51bGwpO1c9cWo9dGo9YjtWPTA7c2o9bnVsbDt1aj1IaT1EZz0wfVxuZnVuY3Rpb24gU2ooYSxiKXtkb3t2YXIgYz1ZO3RyeXtxZygpO3ZoLmN1cnJlbnQ9R2g7aWYoeWgpe2Zvcih2YXIgZD1SLm1lbW9pemVkU3RhdGU7bnVsbCE9PWQ7KXt2YXIgZT1kLnF1ZXVlO251bGwhPT1lJiYoZS5wZW5kaW5nPW51bGwpO2Q9ZC5uZXh0fXloPSExfXhoPTA7VD1TPVI9bnVsbDt6aD0hMTtwai5jdXJyZW50PW51bGw7aWYobnVsbD09PWN8fG51bGw9PT1jLnJldHVybil7Vj0xO3NqPWI7WT1udWxsO2JyZWFrfWE6e3ZhciBmPWEsZz1jLnJldHVybixoPWMsaz1iO2I9VztoLmZsYWdzfD0yMDQ4O2guZmlyc3RFZmZlY3Q9aC5sYXN0RWZmZWN0PW51bGw7aWYobnVsbCE9PWsmJlwib2JqZWN0XCI9PT10eXBlb2YgayYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGsudGhlbil7dmFyIGw9aztpZigwPT09KGgubW9kZSYyKSl7dmFyIG49aC5hbHRlcm5hdGU7bj8oaC51cGRhdGVRdWV1ZT1uLnVwZGF0ZVF1ZXVlLGgubWVtb2l6ZWRTdGF0ZT1uLm1lbW9pemVkU3RhdGUsaC5sYW5lcz1uLmxhbmVzKTpcbihoLnVwZGF0ZVF1ZXVlPW51bGwsaC5tZW1vaXplZFN0YXRlPW51bGwpfXZhciBBPTAhPT0oUC5jdXJyZW50JjEpLHA9Zztkb3t2YXIgQztpZihDPTEzPT09cC50YWcpe3ZhciB4PXAubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09eClDPW51bGwhPT14LmRlaHlkcmF0ZWQ/ITA6ITE7ZWxzZXt2YXIgdz1wLm1lbW9pemVkUHJvcHM7Qz12b2lkIDA9PT13LmZhbGxiYWNrPyExOiEwIT09dy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjaz8hMDpBPyExOiEwfX1pZihDKXt2YXIgej1wLnVwZGF0ZVF1ZXVlO2lmKG51bGw9PT16KXt2YXIgdT1uZXcgU2V0O3UuYWRkKGwpO3AudXBkYXRlUXVldWU9dX1lbHNlIHouYWRkKGwpO2lmKDA9PT0ocC5tb2RlJjIpKXtwLmZsYWdzfD02NDtoLmZsYWdzfD0xNjM4NDtoLmZsYWdzJj0tMjk4MTtpZigxPT09aC50YWcpaWYobnVsbD09PWguYWx0ZXJuYXRlKWgudGFnPTE3O2Vsc2V7dmFyIHQ9emcoLTEsMSk7dC50YWc9MjtBZyhoLHQpfWgubGFuZXN8PTE7YnJlYWsgYX1rPVxudm9pZCAwO2g9Yjt2YXIgcT1mLnBpbmdDYWNoZTtudWxsPT09cT8ocT1mLnBpbmdDYWNoZT1uZXcgT2ksaz1uZXcgU2V0LHEuc2V0KGwsaykpOihrPXEuZ2V0KGwpLHZvaWQgMD09PWsmJihrPW5ldyBTZXQscS5zZXQobCxrKSkpO2lmKCFrLmhhcyhoKSl7ay5hZGQoaCk7dmFyIHY9WWouYmluZChudWxsLGYsbCxoKTtsLnRoZW4odix2KX1wLmZsYWdzfD00MDk2O3AubGFuZXM9YjticmVhayBhfXA9cC5yZXR1cm59d2hpbGUobnVsbCE9PXApO2s9RXJyb3IoKFJhKGgudHlwZSl8fFwiQSBSZWFjdCBjb21wb25lbnRcIikrXCIgc3VzcGVuZGVkIHdoaWxlIHJlbmRlcmluZywgYnV0IG5vIGZhbGxiYWNrIFVJIHdhcyBzcGVjaWZpZWQuXFxuXFxuQWRkIGEgPFN1c3BlbnNlIGZhbGxiYWNrPS4uLj4gY29tcG9uZW50IGhpZ2hlciBpbiB0aGUgdHJlZSB0byBwcm92aWRlIGEgbG9hZGluZyBpbmRpY2F0b3Igb3IgcGxhY2Vob2xkZXIgdG8gZGlzcGxheS5cIil9NSE9PVYmJihWPTIpO2s9TWkoayxoKTtwPVxuZztkb3tzd2l0Y2gocC50YWcpe2Nhc2UgMzpmPWs7cC5mbGFnc3w9NDA5NjtiJj0tYjtwLmxhbmVzfD1iO3ZhciBKPVBpKHAsZixiKTtCZyhwLEopO2JyZWFrIGE7Y2FzZSAxOmY9azt2YXIgSz1wLnR5cGUsUT1wLnN0YXRlTm9kZTtpZigwPT09KHAuZmxhZ3MmNjQpJiYoXCJmdW5jdGlvblwiPT09dHlwZW9mIEsuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxudWxsIT09USYmXCJmdW5jdGlvblwiPT09dHlwZW9mIFEuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09VGl8fCFUaS5oYXMoUSkpKSl7cC5mbGFnc3w9NDA5NjtiJj0tYjtwLmxhbmVzfD1iO3ZhciBMPVNpKHAsZixiKTtCZyhwLEwpO2JyZWFrIGF9fXA9cC5yZXR1cm59d2hpbGUobnVsbCE9PXApfVpqKGMpfWNhdGNoKHZhKXtiPXZhO1k9PT1jJiZudWxsIT09YyYmKFk9Yz1jLnJldHVybik7Y29udGludWV9YnJlYWt9d2hpbGUoMSl9XG5mdW5jdGlvbiBQaigpe3ZhciBhPW9qLmN1cnJlbnQ7b2ouY3VycmVudD1HaDtyZXR1cm4gbnVsbD09PWE/R2g6YX1mdW5jdGlvbiBUaihhLGIpe3ZhciBjPVg7WHw9MTY7dmFyIGQ9UGooKTtVPT09YSYmVz09PWJ8fFFqKGEsYik7ZG8gdHJ5e2FrKCk7YnJlYWt9Y2F0Y2goZSl7U2ooYSxlKX13aGlsZSgxKTtxZygpO1g9Yztvai5jdXJyZW50PWQ7aWYobnVsbCE9PVkpdGhyb3cgRXJyb3IoeSgyNjEpKTtVPW51bGw7Vz0wO3JldHVybiBWfWZ1bmN0aW9uIGFrKCl7Zm9yKDtudWxsIT09WTspYmsoWSl9ZnVuY3Rpb24gUmooKXtmb3IoO251bGwhPT1ZJiYhUWYoKTspYmsoWSl9ZnVuY3Rpb24gYmsoYSl7dmFyIGI9Y2soYS5hbHRlcm5hdGUsYSxxaik7YS5tZW1vaXplZFByb3BzPWEucGVuZGluZ1Byb3BzO251bGw9PT1iP1pqKGEpOlk9Yjtwai5jdXJyZW50PW51bGx9XG5mdW5jdGlvbiBaaihhKXt2YXIgYj1hO2Rve3ZhciBjPWIuYWx0ZXJuYXRlO2E9Yi5yZXR1cm47aWYoMD09PShiLmZsYWdzJjIwNDgpKXtjPUdpKGMsYixxaik7aWYobnVsbCE9PWMpe1k9YztyZXR1cm59Yz1iO2lmKDI0IT09Yy50YWcmJjIzIT09Yy50YWd8fG51bGw9PT1jLm1lbW9pemVkU3RhdGV8fDAhPT0ocWomMTA3Mzc0MTgyNCl8fDA9PT0oYy5tb2RlJjQpKXtmb3IodmFyIGQ9MCxlPWMuY2hpbGQ7bnVsbCE9PWU7KWR8PWUubGFuZXN8ZS5jaGlsZExhbmVzLGU9ZS5zaWJsaW5nO2MuY2hpbGRMYW5lcz1kfW51bGwhPT1hJiYwPT09KGEuZmxhZ3MmMjA0OCkmJihudWxsPT09YS5maXJzdEVmZmVjdCYmKGEuZmlyc3RFZmZlY3Q9Yi5maXJzdEVmZmVjdCksbnVsbCE9PWIubGFzdEVmZmVjdCYmKG51bGwhPT1hLmxhc3RFZmZlY3QmJihhLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1iLmZpcnN0RWZmZWN0KSxhLmxhc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0KSwxPGIuZmxhZ3MmJihudWxsIT09XG5hLmxhc3RFZmZlY3Q/YS5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9YjphLmZpcnN0RWZmZWN0PWIsYS5sYXN0RWZmZWN0PWIpKX1lbHNle2M9TGkoYik7aWYobnVsbCE9PWMpe2MuZmxhZ3MmPTIwNDc7WT1jO3JldHVybn1udWxsIT09YSYmKGEuZmlyc3RFZmZlY3Q9YS5sYXN0RWZmZWN0PW51bGwsYS5mbGFnc3w9MjA0OCl9Yj1iLnNpYmxpbmc7aWYobnVsbCE9PWIpe1k9YjtyZXR1cm59WT1iPWF9d2hpbGUobnVsbCE9PWIpOzA9PT1WJiYoVj01KX1mdW5jdGlvbiBVaihhKXt2YXIgYj1lZygpO2dnKDk5LGRrLmJpbmQobnVsbCxhLGIpKTtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGRrKGEsYil7ZG8gT2ooKTt3aGlsZShudWxsIT09eWopO2lmKDAhPT0oWCY0OCkpdGhyb3cgRXJyb3IoeSgzMjcpKTt2YXIgYz1hLmZpbmlzaGVkV29yaztpZihudWxsPT09YylyZXR1cm4gbnVsbDthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRMYW5lcz0wO2lmKGM9PT1hLmN1cnJlbnQpdGhyb3cgRXJyb3IoeSgxNzcpKTthLmNhbGxiYWNrTm9kZT1udWxsO3ZhciBkPWMubGFuZXN8Yy5jaGlsZExhbmVzLGU9ZCxmPWEucGVuZGluZ0xhbmVzJn5lO2EucGVuZGluZ0xhbmVzPWU7YS5zdXNwZW5kZWRMYW5lcz0wO2EucGluZ2VkTGFuZXM9MDthLmV4cGlyZWRMYW5lcyY9ZTthLm11dGFibGVSZWFkTGFuZXMmPWU7YS5lbnRhbmdsZWRMYW5lcyY9ZTtlPWEuZW50YW5nbGVtZW50cztmb3IodmFyIGc9YS5ldmVudFRpbWVzLGg9YS5leHBpcmF0aW9uVGltZXM7MDxmOyl7dmFyIGs9MzEtVmMoZiksbD0xPDxrO2Vba109MDtnW2tdPS0xO2hba109LTE7ZiY9fmx9bnVsbCE9PVxuQ2omJjA9PT0oZCYyNCkmJkNqLmhhcyhhKSYmQ2ouZGVsZXRlKGEpO2E9PT1VJiYoWT1VPW51bGwsVz0wKTsxPGMuZmxhZ3M/bnVsbCE9PWMubGFzdEVmZmVjdD8oYy5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9YyxkPWMuZmlyc3RFZmZlY3QpOmQ9YzpkPWMuZmlyc3RFZmZlY3Q7aWYobnVsbCE9PWQpe2U9WDtYfD0zMjtwai5jdXJyZW50PW51bGw7a2Y9ZmQ7Zz1OZSgpO2lmKE9lKGcpKXtpZihcInNlbGVjdGlvblN0YXJ0XCJpbiBnKWg9e3N0YXJ0Omcuc2VsZWN0aW9uU3RhcnQsZW5kOmcuc2VsZWN0aW9uRW5kfTtlbHNlIGE6aWYoaD0oaD1nLm93bmVyRG9jdW1lbnQpJiZoLmRlZmF1bHRWaWV3fHx3aW5kb3csKGw9aC5nZXRTZWxlY3Rpb24mJmguZ2V0U2VsZWN0aW9uKCkpJiYwIT09bC5yYW5nZUNvdW50KXtoPWwuYW5jaG9yTm9kZTtmPWwuYW5jaG9yT2Zmc2V0O2s9bC5mb2N1c05vZGU7bD1sLmZvY3VzT2Zmc2V0O3RyeXtoLm5vZGVUeXBlLGsubm9kZVR5cGV9Y2F0Y2godmEpe2g9bnVsbDtcbmJyZWFrIGF9dmFyIG49MCxBPS0xLHA9LTEsQz0wLHg9MCx3PWcsej1udWxsO2I6Zm9yKDs7KXtmb3IodmFyIHU7Oyl7dyE9PWh8fDAhPT1mJiYzIT09dy5ub2RlVHlwZXx8KEE9bitmKTt3IT09a3x8MCE9PWwmJjMhPT13Lm5vZGVUeXBlfHwocD1uK2wpOzM9PT13Lm5vZGVUeXBlJiYobis9dy5ub2RlVmFsdWUubGVuZ3RoKTtpZihudWxsPT09KHU9dy5maXJzdENoaWxkKSlicmVhazt6PXc7dz11fWZvcig7Oyl7aWYodz09PWcpYnJlYWsgYjt6PT09aCYmKytDPT09ZiYmKEE9bik7ej09PWsmJisreD09PWwmJihwPW4pO2lmKG51bGwhPT0odT13Lm5leHRTaWJsaW5nKSlicmVhazt3PXo7ej13LnBhcmVudE5vZGV9dz11fWg9LTE9PT1BfHwtMT09PXA/bnVsbDp7c3RhcnQ6QSxlbmQ6cH19ZWxzZSBoPW51bGw7aD1ofHx7c3RhcnQ6MCxlbmQ6MH19ZWxzZSBoPW51bGw7bGY9e2ZvY3VzZWRFbGVtOmcsc2VsZWN0aW9uUmFuZ2U6aH07ZmQ9ITE7SWo9bnVsbDtKaj0hMTtaPWQ7ZG8gdHJ5e2VrKCl9Y2F0Y2godmEpe2lmKG51bGw9PT1cblopdGhyb3cgRXJyb3IoeSgzMzApKTtXaShaLHZhKTtaPVoubmV4dEVmZmVjdH13aGlsZShudWxsIT09Wik7SWo9bnVsbDtaPWQ7ZG8gdHJ5e2ZvcihnPWE7bnVsbCE9PVo7KXt2YXIgdD1aLmZsYWdzO3QmMTYmJnBiKFouc3RhdGVOb2RlLFwiXCIpO2lmKHQmMTI4KXt2YXIgcT1aLmFsdGVybmF0ZTtpZihudWxsIT09cSl7dmFyIHY9cS5yZWY7bnVsbCE9PXYmJihcImZ1bmN0aW9uXCI9PT10eXBlb2Ygdj92KG51bGwpOnYuY3VycmVudD1udWxsKX19c3dpdGNoKHQmMTAzOCl7Y2FzZSAyOmZqKFopO1ouZmxhZ3MmPS0zO2JyZWFrO2Nhc2UgNjpmaihaKTtaLmZsYWdzJj0tMztpaihaLmFsdGVybmF0ZSxaKTticmVhaztjYXNlIDEwMjQ6Wi5mbGFncyY9LTEwMjU7YnJlYWs7Y2FzZSAxMDI4OlouZmxhZ3MmPS0xMDI1O2lqKFouYWx0ZXJuYXRlLFopO2JyZWFrO2Nhc2UgNDppaihaLmFsdGVybmF0ZSxaKTticmVhaztjYXNlIDg6aD1aO2NqKGcsaCk7dmFyIEo9aC5hbHRlcm5hdGU7ZGooaCk7bnVsbCE9PVxuSiYmZGooSil9Wj1aLm5leHRFZmZlY3R9fWNhdGNoKHZhKXtpZihudWxsPT09Wil0aHJvdyBFcnJvcih5KDMzMCkpO1dpKFosdmEpO1o9Wi5uZXh0RWZmZWN0fXdoaWxlKG51bGwhPT1aKTt2PWxmO3E9TmUoKTt0PXYuZm9jdXNlZEVsZW07Zz12LnNlbGVjdGlvblJhbmdlO2lmKHEhPT10JiZ0JiZ0Lm93bmVyRG9jdW1lbnQmJk1lKHQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdCkpe251bGwhPT1nJiZPZSh0KSYmKHE9Zy5zdGFydCx2PWcuZW5kLHZvaWQgMD09PXYmJih2PXEpLFwic2VsZWN0aW9uU3RhcnRcImluIHQ/KHQuc2VsZWN0aW9uU3RhcnQ9cSx0LnNlbGVjdGlvbkVuZD1NYXRoLm1pbih2LHQudmFsdWUubGVuZ3RoKSk6KHY9KHE9dC5vd25lckRvY3VtZW50fHxkb2N1bWVudCkmJnEuZGVmYXVsdFZpZXd8fHdpbmRvdyx2LmdldFNlbGVjdGlvbiYmKHY9di5nZXRTZWxlY3Rpb24oKSxoPXQudGV4dENvbnRlbnQubGVuZ3RoLEo9TWF0aC5taW4oZy5zdGFydCxoKSxnPXZvaWQgMD09PVxuZy5lbmQ/SjpNYXRoLm1pbihnLmVuZCxoKSwhdi5leHRlbmQmJko+ZyYmKGg9ZyxnPUosSj1oKSxoPUxlKHQsSiksZj1MZSh0LGcpLGgmJmYmJigxIT09di5yYW5nZUNvdW50fHx2LmFuY2hvck5vZGUhPT1oLm5vZGV8fHYuYW5jaG9yT2Zmc2V0IT09aC5vZmZzZXR8fHYuZm9jdXNOb2RlIT09Zi5ub2RlfHx2LmZvY3VzT2Zmc2V0IT09Zi5vZmZzZXQpJiYocT1xLmNyZWF0ZVJhbmdlKCkscS5zZXRTdGFydChoLm5vZGUsaC5vZmZzZXQpLHYucmVtb3ZlQWxsUmFuZ2VzKCksSj5nPyh2LmFkZFJhbmdlKHEpLHYuZXh0ZW5kKGYubm9kZSxmLm9mZnNldCkpOihxLnNldEVuZChmLm5vZGUsZi5vZmZzZXQpLHYuYWRkUmFuZ2UocSkpKSkpKTtxPVtdO2Zvcih2PXQ7dj12LnBhcmVudE5vZGU7KTE9PT12Lm5vZGVUeXBlJiZxLnB1c2goe2VsZW1lbnQ6dixsZWZ0OnYuc2Nyb2xsTGVmdCx0b3A6di5zY3JvbGxUb3B9KTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgdC5mb2N1cyYmdC5mb2N1cygpO2Zvcih0PVxuMDt0PHEubGVuZ3RoO3QrKyl2PXFbdF0sdi5lbGVtZW50LnNjcm9sbExlZnQ9di5sZWZ0LHYuZWxlbWVudC5zY3JvbGxUb3A9di50b3B9ZmQ9ISFrZjtsZj1rZj1udWxsO2EuY3VycmVudD1jO1o9ZDtkbyB0cnl7Zm9yKHQ9YTtudWxsIT09Wjspe3ZhciBLPVouZmxhZ3M7SyYzNiYmWWkodCxaLmFsdGVybmF0ZSxaKTtpZihLJjEyOCl7cT12b2lkIDA7dmFyIFE9Wi5yZWY7aWYobnVsbCE9PVEpe3ZhciBMPVouc3RhdGVOb2RlO3N3aXRjaChaLnRhZyl7Y2FzZSA1OnE9TDticmVhaztkZWZhdWx0OnE9TH1cImZ1bmN0aW9uXCI9PT10eXBlb2YgUT9RKHEpOlEuY3VycmVudD1xfX1aPVoubmV4dEVmZmVjdH19Y2F0Y2godmEpe2lmKG51bGw9PT1aKXRocm93IEVycm9yKHkoMzMwKSk7V2koWix2YSk7Wj1aLm5leHRFZmZlY3R9d2hpbGUobnVsbCE9PVopO1o9bnVsbDskZigpO1g9ZX1lbHNlIGEuY3VycmVudD1jO2lmKHhqKXhqPSExLHlqPWEsemo9YjtlbHNlIGZvcihaPWQ7bnVsbCE9PVo7KWI9XG5aLm5leHRFZmZlY3QsWi5uZXh0RWZmZWN0PW51bGwsWi5mbGFncyY4JiYoSz1aLEsuc2libGluZz1udWxsLEsuc3RhdGVOb2RlPW51bGwpLFo9YjtkPWEucGVuZGluZ0xhbmVzOzA9PT1kJiYoVGk9bnVsbCk7MT09PWQ/YT09PUVqP0RqKys6KERqPTAsRWo9YSk6RGo9MDtjPWMuc3RhdGVOb2RlO2lmKE1mJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgTWYub25Db21taXRGaWJlclJvb3QpdHJ5e01mLm9uQ29tbWl0RmliZXJSb290KExmLGMsdm9pZCAwLDY0PT09KGMuY3VycmVudC5mbGFncyY2NCkpfWNhdGNoKHZhKXt9TWooYSxPKCkpO2lmKFFpKXRocm93IFFpPSExLGE9UmksUmk9bnVsbCxhO2lmKDAhPT0oWCY4KSlyZXR1cm4gbnVsbDtpZygpO3JldHVybiBudWxsfVxuZnVuY3Rpb24gZWsoKXtmb3IoO251bGwhPT1aOyl7dmFyIGE9Wi5hbHRlcm5hdGU7Smp8fG51bGw9PT1Janx8KDAhPT0oWi5mbGFncyY4KT9kYyhaLElqKSYmKEpqPSEwKToxMz09PVoudGFnJiZtaihhLFopJiZkYyhaLElqKSYmKEpqPSEwKSk7dmFyIGI9Wi5mbGFnczswIT09KGImMjU2KSYmWGkoYSxaKTswPT09KGImNTEyKXx8eGp8fCh4aj0hMCxoZyg5NyxmdW5jdGlvbigpe09qKCk7cmV0dXJuIG51bGx9KSk7Wj1aLm5leHRFZmZlY3R9fWZ1bmN0aW9uIE9qKCl7aWYoOTAhPT16ail7dmFyIGE9OTc8emo/OTc6emo7emo9OTA7cmV0dXJuIGdnKGEsZmspfXJldHVybiExfWZ1bmN0aW9uICRpKGEsYil7QWoucHVzaChiLGEpO3hqfHwoeGo9ITAsaGcoOTcsZnVuY3Rpb24oKXtPaigpO3JldHVybiBudWxsfSkpfWZ1bmN0aW9uIFppKGEsYil7QmoucHVzaChiLGEpO3hqfHwoeGo9ITAsaGcoOTcsZnVuY3Rpb24oKXtPaigpO3JldHVybiBudWxsfSkpfVxuZnVuY3Rpb24gZmsoKXtpZihudWxsPT09eWopcmV0dXJuITE7dmFyIGE9eWo7eWo9bnVsbDtpZigwIT09KFgmNDgpKXRocm93IEVycm9yKHkoMzMxKSk7dmFyIGI9WDtYfD0zMjt2YXIgYz1CajtCaj1bXTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrPTIpe3ZhciBlPWNbZF0sZj1jW2QrMV0sZz1lLmRlc3Ryb3k7ZS5kZXN0cm95PXZvaWQgMDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZyl0cnl7ZygpfWNhdGNoKGspe2lmKG51bGw9PT1mKXRocm93IEVycm9yKHkoMzMwKSk7V2koZixrKX19Yz1BajtBaj1bXTtmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCs9Mil7ZT1jW2RdO2Y9Y1tkKzFdO3RyeXt2YXIgaD1lLmNyZWF0ZTtlLmRlc3Ryb3k9aCgpfWNhdGNoKGspe2lmKG51bGw9PT1mKXRocm93IEVycm9yKHkoMzMwKSk7V2koZixrKX19Zm9yKGg9YS5jdXJyZW50LmZpcnN0RWZmZWN0O251bGwhPT1oOylhPWgubmV4dEVmZmVjdCxoLm5leHRFZmZlY3Q9bnVsbCxoLmZsYWdzJjgmJihoLnNpYmxpbmc9XG5udWxsLGguc3RhdGVOb2RlPW51bGwpLGg9YTtYPWI7aWcoKTtyZXR1cm4hMH1mdW5jdGlvbiBnayhhLGIsYyl7Yj1NaShjLGIpO2I9UGkoYSxiLDEpO0FnKGEsYik7Yj1IZygpO2E9S2ooYSwxKTtudWxsIT09YSYmKCRjKGEsMSxiKSxNaihhLGIpKX1cbmZ1bmN0aW9uIFdpKGEsYil7aWYoMz09PWEudGFnKWdrKGEsYSxiKTtlbHNlIGZvcih2YXIgYz1hLnJldHVybjtudWxsIT09Yzspe2lmKDM9PT1jLnRhZyl7Z2soYyxhLGIpO2JyZWFrfWVsc2UgaWYoMT09PWMudGFnKXt2YXIgZD1jLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYy50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGQuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09VGl8fCFUaS5oYXMoZCkpKXthPU1pKGIsYSk7dmFyIGU9U2koYyxhLDEpO0FnKGMsZSk7ZT1IZygpO2M9S2ooYywxKTtpZihudWxsIT09YykkYyhjLDEsZSksTWooYyxlKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PVRpfHwhVGkuaGFzKGQpKSl0cnl7ZC5jb21wb25lbnREaWRDYXRjaChiLGEpfWNhdGNoKGYpe31icmVha319Yz1jLnJldHVybn19XG5mdW5jdGlvbiBZaihhLGIsYyl7dmFyIGQ9YS5waW5nQ2FjaGU7bnVsbCE9PWQmJmQuZGVsZXRlKGIpO2I9SGcoKTthLnBpbmdlZExhbmVzfD1hLnN1c3BlbmRlZExhbmVzJmM7VT09PWEmJihXJmMpPT09YyYmKDQ9PT1WfHwzPT09ViYmKFcmNjI5MTQ1NjApPT09VyYmNTAwPk8oKS1qaj9RaihhLDApOnVqfD1jKTtNaihhLGIpfWZ1bmN0aW9uIGxqKGEsYil7dmFyIGM9YS5zdGF0ZU5vZGU7bnVsbCE9PWMmJmMuZGVsZXRlKGIpO2I9MDswPT09YiYmKGI9YS5tb2RlLDA9PT0oYiYyKT9iPTE6MD09PShiJjQpP2I9OTk9PT1lZygpPzE6MjooMD09PUdqJiYoR2o9dGopLGI9WWMoNjI5MTQ1NjAmfkdqKSwwPT09YiYmKGI9NDE5NDMwNCkpKTtjPUhnKCk7YT1LaihhLGIpO251bGwhPT1hJiYoJGMoYSxiLGMpLE1qKGEsYykpfXZhciBjaztcbmNrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1iLmxhbmVzO2lmKG51bGwhPT1hKWlmKGEubWVtb2l6ZWRQcm9wcyE9PWIucGVuZGluZ1Byb3BzfHxOLmN1cnJlbnQpdWc9ITA7ZWxzZSBpZigwIT09KGMmZCkpdWc9MCE9PShhLmZsYWdzJjE2Mzg0KT8hMDohMTtlbHNle3VnPSExO3N3aXRjaChiLnRhZyl7Y2FzZSAzOnJpKGIpO3NoKCk7YnJlYWs7Y2FzZSA1OmdoKGIpO2JyZWFrO2Nhc2UgMTpGZihiLnR5cGUpJiZKZihiKTticmVhaztjYXNlIDQ6ZWgoYixiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTticmVhaztjYXNlIDEwOmQ9Yi5tZW1vaXplZFByb3BzLnZhbHVlO3ZhciBlPWIudHlwZS5fY29udGV4dDtJKG1nLGUuX2N1cnJlbnRWYWx1ZSk7ZS5fY3VycmVudFZhbHVlPWQ7YnJlYWs7Y2FzZSAxMzppZihudWxsIT09Yi5tZW1vaXplZFN0YXRlKXtpZigwIT09KGMmYi5jaGlsZC5jaGlsZExhbmVzKSlyZXR1cm4gdGkoYSxiLGMpO0koUCxQLmN1cnJlbnQmMSk7Yj1oaShhLGIsYyk7cmV0dXJuIG51bGwhPT1cbmI/Yi5zaWJsaW5nOm51bGx9SShQLFAuY3VycmVudCYxKTticmVhaztjYXNlIDE5OmQ9MCE9PShjJmIuY2hpbGRMYW5lcyk7aWYoMCE9PShhLmZsYWdzJjY0KSl7aWYoZClyZXR1cm4gQWkoYSxiLGMpO2IuZmxhZ3N8PTY0fWU9Yi5tZW1vaXplZFN0YXRlO251bGwhPT1lJiYoZS5yZW5kZXJpbmc9bnVsbCxlLnRhaWw9bnVsbCxlLmxhc3RFZmZlY3Q9bnVsbCk7SShQLFAuY3VycmVudCk7aWYoZClicmVhaztlbHNlIHJldHVybiBudWxsO2Nhc2UgMjM6Y2FzZSAyNDpyZXR1cm4gYi5sYW5lcz0wLG1pKGEsYixjKX1yZXR1cm4gaGkoYSxiLGMpfWVsc2UgdWc9ITE7Yi5sYW5lcz0wO3N3aXRjaChiLnRhZyl7Y2FzZSAyOmQ9Yi50eXBlO251bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZmxhZ3N8PTIpO2E9Yi5wZW5kaW5nUHJvcHM7ZT1FZihiLE0uY3VycmVudCk7dGcoYixjKTtlPUNoKG51bGwsYixkLGEsZSxjKTtiLmZsYWdzfD0xO2lmKFwib2JqZWN0XCI9PT1cbnR5cGVvZiBlJiZudWxsIT09ZSYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGUucmVuZGVyJiZ2b2lkIDA9PT1lLiQkdHlwZW9mKXtiLnRhZz0xO2IubWVtb2l6ZWRTdGF0ZT1udWxsO2IudXBkYXRlUXVldWU9bnVsbDtpZihGZihkKSl7dmFyIGY9ITA7SmYoYil9ZWxzZSBmPSExO2IubWVtb2l6ZWRTdGF0ZT1udWxsIT09ZS5zdGF0ZSYmdm9pZCAwIT09ZS5zdGF0ZT9lLnN0YXRlOm51bGw7eGcoYik7dmFyIGc9ZC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XCJmdW5jdGlvblwiPT09dHlwZW9mIGcmJkdnKGIsZCxnLGEpO2UudXBkYXRlcj1LZztiLnN0YXRlTm9kZT1lO2UuX3JlYWN0SW50ZXJuYWxzPWI7T2coYixkLGEsYyk7Yj1xaShudWxsLGIsZCwhMCxmLGMpfWVsc2UgYi50YWc9MCxmaShudWxsLGIsZSxjKSxiPWIuY2hpbGQ7cmV0dXJuIGI7Y2FzZSAxNjplPWIuZWxlbWVudFR5cGU7YTp7bnVsbCE9PWEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5mbGFnc3w9Mik7XG5hPWIucGVuZGluZ1Byb3BzO2Y9ZS5faW5pdDtlPWYoZS5fcGF5bG9hZCk7Yi50eXBlPWU7Zj1iLnRhZz1oayhlKTthPWxnKGUsYSk7c3dpdGNoKGYpe2Nhc2UgMDpiPWxpKG51bGwsYixlLGEsYyk7YnJlYWsgYTtjYXNlIDE6Yj1waShudWxsLGIsZSxhLGMpO2JyZWFrIGE7Y2FzZSAxMTpiPWdpKG51bGwsYixlLGEsYyk7YnJlYWsgYTtjYXNlIDE0OmI9aWkobnVsbCxiLGUsbGcoZS50eXBlLGEpLGQsYyk7YnJlYWsgYX10aHJvdyBFcnJvcih5KDMwNixlLFwiXCIpKTt9cmV0dXJuIGI7Y2FzZSAwOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLGxpKGEsYixkLGUsYyk7Y2FzZSAxOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLHBpKGEsYixkLGUsYyk7Y2FzZSAzOnJpKGIpO2Q9Yi51cGRhdGVRdWV1ZTtpZihudWxsPT09YXx8bnVsbD09PWQpdGhyb3cgRXJyb3IoeSgyODIpKTtcbmQ9Yi5wZW5kaW5nUHJvcHM7ZT1iLm1lbW9pemVkU3RhdGU7ZT1udWxsIT09ZT9lLmVsZW1lbnQ6bnVsbDt5ZyhhLGIpO0NnKGIsZCxudWxsLGMpO2Q9Yi5tZW1vaXplZFN0YXRlLmVsZW1lbnQ7aWYoZD09PWUpc2goKSxiPWhpKGEsYixjKTtlbHNle2U9Yi5zdGF0ZU5vZGU7aWYoZj1lLmh5ZHJhdGUpa2g9cmYoYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mby5maXJzdENoaWxkKSxqaD1iLGY9bGg9ITA7aWYoZil7YT1lLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE7aWYobnVsbCE9YSlmb3IoZT0wO2U8YS5sZW5ndGg7ZSs9MilmPWFbZV0sZi5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeT1hW2UrMV0sdGgucHVzaChmKTtjPVpnKGIsbnVsbCxkLGMpO2ZvcihiLmNoaWxkPWM7YzspYy5mbGFncz1jLmZsYWdzJi0zfDEwMjQsYz1jLnNpYmxpbmd9ZWxzZSBmaShhLGIsZCxjKSxzaCgpO2I9Yi5jaGlsZH1yZXR1cm4gYjtjYXNlIDU6cmV0dXJuIGdoKGIpLG51bGw9PT1hJiZcbnBoKGIpLGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZj1udWxsIT09YT9hLm1lbW9pemVkUHJvcHM6bnVsbCxnPWUuY2hpbGRyZW4sbmYoZCxlKT9nPW51bGw6bnVsbCE9PWYmJm5mKGQsZikmJihiLmZsYWdzfD0xNiksb2koYSxiKSxmaShhLGIsZyxjKSxiLmNoaWxkO2Nhc2UgNjpyZXR1cm4gbnVsbD09PWEmJnBoKGIpLG51bGw7Y2FzZSAxMzpyZXR1cm4gdGkoYSxiLGMpO2Nhc2UgNDpyZXR1cm4gZWgoYixiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxkPWIucGVuZGluZ1Byb3BzLG51bGw9PT1hP2IuY2hpbGQ9WWcoYixudWxsLGQsYyk6ZmkoYSxiLGQsYyksYi5jaGlsZDtjYXNlIDExOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLGdpKGEsYixkLGUsYyk7Y2FzZSA3OnJldHVybiBmaShhLGIsYi5wZW5kaW5nUHJvcHMsYyksYi5jaGlsZDtjYXNlIDg6cmV0dXJuIGZpKGEsYixiLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbmMpLGIuY2hpbGQ7Y2FzZSAxMjpyZXR1cm4gZmkoYSxiLGIucGVuZGluZ1Byb3BzLmNoaWxkcmVuLGMpLGIuY2hpbGQ7Y2FzZSAxMDphOntkPWIudHlwZS5fY29udGV4dDtlPWIucGVuZGluZ1Byb3BzO2c9Yi5tZW1vaXplZFByb3BzO2Y9ZS52YWx1ZTt2YXIgaD1iLnR5cGUuX2NvbnRleHQ7SShtZyxoLl9jdXJyZW50VmFsdWUpO2guX2N1cnJlbnRWYWx1ZT1mO2lmKG51bGwhPT1nKWlmKGg9Zy52YWx1ZSxmPUhlKGgsZik/MDooXCJmdW5jdGlvblwiPT09dHlwZW9mIGQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzP2QuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzKGgsZik6MTA3Mzc0MTgyMyl8MCwwPT09Zil7aWYoZy5jaGlsZHJlbj09PWUuY2hpbGRyZW4mJiFOLmN1cnJlbnQpe2I9aGkoYSxiLGMpO2JyZWFrIGF9fWVsc2UgZm9yKGg9Yi5jaGlsZCxudWxsIT09aCYmKGgucmV0dXJuPWIpO251bGwhPT1oOyl7dmFyIGs9aC5kZXBlbmRlbmNpZXM7aWYobnVsbCE9PWspe2c9aC5jaGlsZDtmb3IodmFyIGw9XG5rLmZpcnN0Q29udGV4dDtudWxsIT09bDspe2lmKGwuY29udGV4dD09PWQmJjAhPT0obC5vYnNlcnZlZEJpdHMmZikpezE9PT1oLnRhZyYmKGw9emcoLTEsYyYtYyksbC50YWc9MixBZyhoLGwpKTtoLmxhbmVzfD1jO2w9aC5hbHRlcm5hdGU7bnVsbCE9PWwmJihsLmxhbmVzfD1jKTtzZyhoLnJldHVybixjKTtrLmxhbmVzfD1jO2JyZWFrfWw9bC5uZXh0fX1lbHNlIGc9MTA9PT1oLnRhZz9oLnR5cGU9PT1iLnR5cGU/bnVsbDpoLmNoaWxkOmguY2hpbGQ7aWYobnVsbCE9PWcpZy5yZXR1cm49aDtlbHNlIGZvcihnPWg7bnVsbCE9PWc7KXtpZihnPT09Yil7Zz1udWxsO2JyZWFrfWg9Zy5zaWJsaW5nO2lmKG51bGwhPT1oKXtoLnJldHVybj1nLnJldHVybjtnPWg7YnJlYWt9Zz1nLnJldHVybn1oPWd9ZmkoYSxiLGUuY2hpbGRyZW4sYyk7Yj1iLmNoaWxkfXJldHVybiBiO2Nhc2UgOTpyZXR1cm4gZT1iLnR5cGUsZj1iLnBlbmRpbmdQcm9wcyxkPWYuY2hpbGRyZW4sdGcoYixjKSxlPXZnKGUsXG5mLnVuc3RhYmxlX29ic2VydmVkQml0cyksZD1kKGUpLGIuZmxhZ3N8PTEsZmkoYSxiLGQsYyksYi5jaGlsZDtjYXNlIDE0OnJldHVybiBlPWIudHlwZSxmPWxnKGUsYi5wZW5kaW5nUHJvcHMpLGY9bGcoZS50eXBlLGYpLGlpKGEsYixlLGYsZCxjKTtjYXNlIDE1OnJldHVybiBraShhLGIsYi50eXBlLGIucGVuZGluZ1Byb3BzLGQsYyk7Y2FzZSAxNzpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6bGcoZCxlKSxudWxsIT09YSYmKGEuYWx0ZXJuYXRlPW51bGwsYi5hbHRlcm5hdGU9bnVsbCxiLmZsYWdzfD0yKSxiLnRhZz0xLEZmKGQpPyhhPSEwLEpmKGIpKTphPSExLHRnKGIsYyksTWcoYixkLGUpLE9nKGIsZCxlLGMpLHFpKG51bGwsYixkLCEwLGEsYyk7Y2FzZSAxOTpyZXR1cm4gQWkoYSxiLGMpO2Nhc2UgMjM6cmV0dXJuIG1pKGEsYixjKTtjYXNlIDI0OnJldHVybiBtaShhLGIsYyl9dGhyb3cgRXJyb3IoeSgxNTYsYi50YWcpKTtcbn07ZnVuY3Rpb24gaWsoYSxiLGMsZCl7dGhpcy50YWc9YTt0aGlzLmtleT1jO3RoaXMuc2libGluZz10aGlzLmNoaWxkPXRoaXMucmV0dXJuPXRoaXMuc3RhdGVOb2RlPXRoaXMudHlwZT10aGlzLmVsZW1lbnRUeXBlPW51bGw7dGhpcy5pbmRleD0wO3RoaXMucmVmPW51bGw7dGhpcy5wZW5kaW5nUHJvcHM9Yjt0aGlzLmRlcGVuZGVuY2llcz10aGlzLm1lbW9pemVkU3RhdGU9dGhpcy51cGRhdGVRdWV1ZT10aGlzLm1lbW9pemVkUHJvcHM9bnVsbDt0aGlzLm1vZGU9ZDt0aGlzLmZsYWdzPTA7dGhpcy5sYXN0RWZmZWN0PXRoaXMuZmlyc3RFZmZlY3Q9dGhpcy5uZXh0RWZmZWN0PW51bGw7dGhpcy5jaGlsZExhbmVzPXRoaXMubGFuZXM9MDt0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uIG5oKGEsYixjLGQpe3JldHVybiBuZXcgaWsoYSxiLGMsZCl9ZnVuY3Rpb24gamkoYSl7YT1hLnByb3RvdHlwZTtyZXR1cm4hKCFhfHwhYS5pc1JlYWN0Q29tcG9uZW50KX1cbmZ1bmN0aW9uIGhrKGEpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXJldHVybiBqaShhKT8xOjA7aWYodm9pZCAwIT09YSYmbnVsbCE9PWEpe2E9YS4kJHR5cGVvZjtpZihhPT09QWEpcmV0dXJuIDExO2lmKGE9PT1EYSlyZXR1cm4gMTR9cmV0dXJuIDJ9XG5mdW5jdGlvbiBUZyhhLGIpe3ZhciBjPWEuYWx0ZXJuYXRlO251bGw9PT1jPyhjPW5oKGEudGFnLGIsYS5rZXksYS5tb2RlKSxjLmVsZW1lbnRUeXBlPWEuZWxlbWVudFR5cGUsYy50eXBlPWEudHlwZSxjLnN0YXRlTm9kZT1hLnN0YXRlTm9kZSxjLmFsdGVybmF0ZT1hLGEuYWx0ZXJuYXRlPWMpOihjLnBlbmRpbmdQcm9wcz1iLGMudHlwZT1hLnR5cGUsYy5mbGFncz0wLGMubmV4dEVmZmVjdD1udWxsLGMuZmlyc3RFZmZlY3Q9bnVsbCxjLmxhc3RFZmZlY3Q9bnVsbCk7Yy5jaGlsZExhbmVzPWEuY2hpbGRMYW5lcztjLmxhbmVzPWEubGFuZXM7Yy5jaGlsZD1hLmNoaWxkO2MubWVtb2l6ZWRQcm9wcz1hLm1lbW9pemVkUHJvcHM7Yy5tZW1vaXplZFN0YXRlPWEubWVtb2l6ZWRTdGF0ZTtjLnVwZGF0ZVF1ZXVlPWEudXBkYXRlUXVldWU7Yj1hLmRlcGVuZGVuY2llcztjLmRlcGVuZGVuY2llcz1udWxsPT09Yj9udWxsOntsYW5lczpiLmxhbmVzLGZpcnN0Q29udGV4dDpiLmZpcnN0Q29udGV4dH07XG5jLnNpYmxpbmc9YS5zaWJsaW5nO2MuaW5kZXg9YS5pbmRleDtjLnJlZj1hLnJlZjtyZXR1cm4gY31cbmZ1bmN0aW9uIFZnKGEsYixjLGQsZSxmKXt2YXIgZz0yO2Q9YTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYSlqaShhKSYmKGc9MSk7ZWxzZSBpZihcInN0cmluZ1wiPT09dHlwZW9mIGEpZz01O2Vsc2UgYTpzd2l0Y2goYSl7Y2FzZSB1YTpyZXR1cm4gWGcoYy5jaGlsZHJlbixlLGYsYik7Y2FzZSBIYTpnPTg7ZXw9MTY7YnJlYWs7Y2FzZSB3YTpnPTg7ZXw9MTticmVhaztjYXNlIHhhOnJldHVybiBhPW5oKDEyLGMsYixlfDgpLGEuZWxlbWVudFR5cGU9eGEsYS50eXBlPXhhLGEubGFuZXM9ZixhO2Nhc2UgQmE6cmV0dXJuIGE9bmgoMTMsYyxiLGUpLGEudHlwZT1CYSxhLmVsZW1lbnRUeXBlPUJhLGEubGFuZXM9ZixhO2Nhc2UgQ2E6cmV0dXJuIGE9bmgoMTksYyxiLGUpLGEuZWxlbWVudFR5cGU9Q2EsYS5sYW5lcz1mLGE7Y2FzZSBJYTpyZXR1cm4gdmkoYyxlLGYsYik7Y2FzZSBKYTpyZXR1cm4gYT1uaCgyNCxjLGIsZSksYS5lbGVtZW50VHlwZT1KYSxhLmxhbmVzPWYsYTtkZWZhdWx0OmlmKFwib2JqZWN0XCI9PT1cbnR5cGVvZiBhJiZudWxsIT09YSlzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSB5YTpnPTEwO2JyZWFrIGE7Y2FzZSB6YTpnPTk7YnJlYWsgYTtjYXNlIEFhOmc9MTE7YnJlYWsgYTtjYXNlIERhOmc9MTQ7YnJlYWsgYTtjYXNlIEVhOmc9MTY7ZD1udWxsO2JyZWFrIGE7Y2FzZSBGYTpnPTIyO2JyZWFrIGF9dGhyb3cgRXJyb3IoeSgxMzAsbnVsbD09YT9hOnR5cGVvZiBhLFwiXCIpKTt9Yj1uaChnLGMsYixlKTtiLmVsZW1lbnRUeXBlPWE7Yi50eXBlPWQ7Yi5sYW5lcz1mO3JldHVybiBifWZ1bmN0aW9uIFhnKGEsYixjLGQpe2E9bmgoNyxhLGQsYik7YS5sYW5lcz1jO3JldHVybiBhfWZ1bmN0aW9uIHZpKGEsYixjLGQpe2E9bmgoMjMsYSxkLGIpO2EuZWxlbWVudFR5cGU9SWE7YS5sYW5lcz1jO3JldHVybiBhfWZ1bmN0aW9uIFVnKGEsYixjKXthPW5oKDYsYSxudWxsLGIpO2EubGFuZXM9YztyZXR1cm4gYX1cbmZ1bmN0aW9uIFdnKGEsYixjKXtiPW5oKDQsbnVsbCE9PWEuY2hpbGRyZW4/YS5jaGlsZHJlbjpbXSxhLmtleSxiKTtiLmxhbmVzPWM7Yi5zdGF0ZU5vZGU9e2NvbnRhaW5lckluZm86YS5jb250YWluZXJJbmZvLHBlbmRpbmdDaGlsZHJlbjpudWxsLGltcGxlbWVudGF0aW9uOmEuaW1wbGVtZW50YXRpb259O3JldHVybiBifVxuZnVuY3Rpb24gamsoYSxiLGMpe3RoaXMudGFnPWI7dGhpcy5jb250YWluZXJJbmZvPWE7dGhpcy5maW5pc2hlZFdvcms9dGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGw7dGhpcy50aW1lb3V0SGFuZGxlPS0xO3RoaXMucGVuZGluZ0NvbnRleHQ9dGhpcy5jb250ZXh0PW51bGw7dGhpcy5oeWRyYXRlPWM7dGhpcy5jYWxsYmFja05vZGU9bnVsbDt0aGlzLmNhbGxiYWNrUHJpb3JpdHk9MDt0aGlzLmV2ZW50VGltZXM9WmMoMCk7dGhpcy5leHBpcmF0aW9uVGltZXM9WmMoLTEpO3RoaXMuZW50YW5nbGVkTGFuZXM9dGhpcy5maW5pc2hlZExhbmVzPXRoaXMubXV0YWJsZVJlYWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MDt0aGlzLmVudGFuZ2xlbWVudHM9WmMoMCk7dGhpcy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPW51bGx9XG5mdW5jdGlvbiBrayhhLGIsYyl7dmFyIGQ9Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOnRhLGtleTpudWxsPT1kP251bGw6XCJcIitkLGNoaWxkcmVuOmEsY29udGFpbmVySW5mbzpiLGltcGxlbWVudGF0aW9uOmN9fVxuZnVuY3Rpb24gbGsoYSxiLGMsZCl7dmFyIGU9Yi5jdXJyZW50LGY9SGcoKSxnPUlnKGUpO2E6aWYoYyl7Yz1jLl9yZWFjdEludGVybmFscztiOntpZihaYihjKSE9PWN8fDEhPT1jLnRhZyl0aHJvdyBFcnJvcih5KDE3MCkpO3ZhciBoPWM7ZG97c3dpdGNoKGgudGFnKXtjYXNlIDM6aD1oLnN0YXRlTm9kZS5jb250ZXh0O2JyZWFrIGI7Y2FzZSAxOmlmKEZmKGgudHlwZSkpe2g9aC5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7YnJlYWsgYn19aD1oLnJldHVybn13aGlsZShudWxsIT09aCk7dGhyb3cgRXJyb3IoeSgxNzEpKTt9aWYoMT09PWMudGFnKXt2YXIgaz1jLnR5cGU7aWYoRmYoaykpe2M9SWYoYyxrLGgpO2JyZWFrIGF9fWM9aH1lbHNlIGM9Q2Y7bnVsbD09PWIuY29udGV4dD9iLmNvbnRleHQ9YzpiLnBlbmRpbmdDb250ZXh0PWM7Yj16ZyhmLGcpO2IucGF5bG9hZD17ZWxlbWVudDphfTtkPXZvaWQgMD09PWQ/bnVsbDpkO251bGwhPT1cbmQmJihiLmNhbGxiYWNrPWQpO0FnKGUsYik7SmcoZSxnLGYpO3JldHVybiBnfWZ1bmN0aW9uIG1rKGEpe2E9YS5jdXJyZW50O2lmKCFhLmNoaWxkKXJldHVybiBudWxsO3N3aXRjaChhLmNoaWxkLnRhZyl7Y2FzZSA1OnJldHVybiBhLmNoaWxkLnN0YXRlTm9kZTtkZWZhdWx0OnJldHVybiBhLmNoaWxkLnN0YXRlTm9kZX19ZnVuY3Rpb24gbmsoYSxiKXthPWEubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09YSYmbnVsbCE9PWEuZGVoeWRyYXRlZCl7dmFyIGM9YS5yZXRyeUxhbmU7YS5yZXRyeUxhbmU9MCE9PWMmJmM8Yj9jOmJ9fWZ1bmN0aW9uIG9rKGEsYil7bmsoYSxiKTsoYT1hLmFsdGVybmF0ZSkmJm5rKGEsYil9ZnVuY3Rpb24gcGsoKXtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIHFrKGEsYixjKXt2YXIgZD1udWxsIT1jJiZudWxsIT1jLmh5ZHJhdGlvbk9wdGlvbnMmJmMuaHlkcmF0aW9uT3B0aW9ucy5tdXRhYmxlU291cmNlc3x8bnVsbDtjPW5ldyBqayhhLGIsbnVsbCE9YyYmITA9PT1jLmh5ZHJhdGUpO2I9bmgoMyxudWxsLG51bGwsMj09PWI/NzoxPT09Yj8zOjApO2MuY3VycmVudD1iO2Iuc3RhdGVOb2RlPWM7eGcoYik7YVtmZl09Yy5jdXJyZW50O2NmKDg9PT1hLm5vZGVUeXBlP2EucGFyZW50Tm9kZTphKTtpZihkKWZvcihhPTA7YTxkLmxlbmd0aDthKyspe2I9ZFthXTt2YXIgZT1iLl9nZXRWZXJzaW9uO2U9ZShiLl9zb3VyY2UpO251bGw9PWMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT9jLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9W2IsZV06Yy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLnB1c2goYixlKX10aGlzLl9pbnRlcm5hbFJvb3Q9Y31cbnFrLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oYSl7bGsoYSx0aGlzLl9pbnRlcm5hbFJvb3QsbnVsbCxudWxsKX07cWsucHJvdG90eXBlLnVubW91bnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pbnRlcm5hbFJvb3QsYj1hLmNvbnRhaW5lckluZm87bGsobnVsbCxhLG51bGwsZnVuY3Rpb24oKXtiW2ZmXT1udWxsfSl9O2Z1bmN0aW9uIHJrKGEpe3JldHVybiEoIWF8fDEhPT1hLm5vZGVUeXBlJiY5IT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlJiYoOCE9PWEubm9kZVR5cGV8fFwiIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlIFwiIT09YS5ub2RlVmFsdWUpKX1cbmZ1bmN0aW9uIHNrKGEsYil7Ynx8KGI9YT85PT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVudDphLmZpcnN0Q2hpbGQ6bnVsbCxiPSEoIWJ8fDEhPT1iLm5vZGVUeXBlfHwhYi5oYXNBdHRyaWJ1dGUoXCJkYXRhLXJlYWN0cm9vdFwiKSkpO2lmKCFiKWZvcih2YXIgYztjPWEubGFzdENoaWxkOylhLnJlbW92ZUNoaWxkKGMpO3JldHVybiBuZXcgcWsoYSwwLGI/e2h5ZHJhdGU6ITB9OnZvaWQgMCl9XG5mdW5jdGlvbiB0ayhhLGIsYyxkLGUpe3ZhciBmPWMuX3JlYWN0Um9vdENvbnRhaW5lcjtpZihmKXt2YXIgZz1mLl9pbnRlcm5hbFJvb3Q7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGUpe3ZhciBoPWU7ZT1mdW5jdGlvbigpe3ZhciBhPW1rKGcpO2guY2FsbChhKX19bGsoYixnLGEsZSl9ZWxzZXtmPWMuX3JlYWN0Um9vdENvbnRhaW5lcj1zayhjLGQpO2c9Zi5faW50ZXJuYWxSb290O2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlKXt2YXIgaz1lO2U9ZnVuY3Rpb24oKXt2YXIgYT1tayhnKTtrLmNhbGwoYSl9fVhqKGZ1bmN0aW9uKCl7bGsoYixnLGEsZSl9KX1yZXR1cm4gbWsoZyl9ZWM9ZnVuY3Rpb24oYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9SGcoKTtKZyhhLDQsYik7b2soYSw0KX19O2ZjPWZ1bmN0aW9uKGEpe2lmKDEzPT09YS50YWcpe3ZhciBiPUhnKCk7SmcoYSw2NzEwODg2NCxiKTtvayhhLDY3MTA4ODY0KX19O1xuZ2M9ZnVuY3Rpb24oYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9SGcoKSxjPUlnKGEpO0pnKGEsYyxiKTtvayhhLGMpfX07aGM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYigpfTtcbnliPWZ1bmN0aW9uKGEsYixjKXtzd2l0Y2goYil7Y2FzZSBcImlucHV0XCI6YWIoYSxjKTtiPWMubmFtZTtpZihcInJhZGlvXCI9PT1jLnR5cGUmJm51bGwhPWIpe2ZvcihjPWE7Yy5wYXJlbnROb2RlOyljPWMucGFyZW50Tm9kZTtjPWMucXVlcnlTZWxlY3RvckFsbChcImlucHV0W25hbWU9XCIrSlNPTi5zdHJpbmdpZnkoXCJcIitiKSsnXVt0eXBlPVwicmFkaW9cIl0nKTtmb3IoYj0wO2I8Yy5sZW5ndGg7YisrKXt2YXIgZD1jW2JdO2lmKGQhPT1hJiZkLmZvcm09PT1hLmZvcm0pe3ZhciBlPURiKGQpO2lmKCFlKXRocm93IEVycm9yKHkoOTApKTtXYShkKTthYihkLGUpfX19YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6aWIoYSxjKTticmVhaztjYXNlIFwic2VsZWN0XCI6Yj1jLnZhbHVlLG51bGwhPWImJmZiKGEsISFjLm11bHRpcGxlLGIsITEpfX07R2I9V2o7XG5IYj1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPVg7WHw9NDt0cnl7cmV0dXJuIGdnKDk4LGEuYmluZChudWxsLGIsYyxkLGUpKX1maW5hbGx5e1g9ZiwwPT09WCYmKHdqKCksaWcoKSl9fTtJYj1mdW5jdGlvbigpezA9PT0oWCY0OSkmJihWaigpLE9qKCkpfTtKYj1mdW5jdGlvbihhLGIpe3ZhciBjPVg7WHw9Mjt0cnl7cmV0dXJuIGEoYil9ZmluYWxseXtYPWMsMD09PVgmJih3aigpLGlnKCkpfX07ZnVuY3Rpb24gdWsoYSxiKXt2YXIgYz0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZighcmsoYikpdGhyb3cgRXJyb3IoeSgyMDApKTtyZXR1cm4ga2soYSxiLG51bGwsYyl9dmFyIHZrPXtFdmVudHM6W0NiLHVlLERiLEViLEZiLE9qLHtjdXJyZW50OiExfV19LHdrPXtmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTp3YyxidW5kbGVUeXBlOjAsdmVyc2lvbjpcIjE3LjAuMlwiLHJlbmRlcmVyUGFja2FnZU5hbWU6XCJyZWFjdC1kb21cIn07XG52YXIgeGs9e2J1bmRsZVR5cGU6d2suYnVuZGxlVHlwZSx2ZXJzaW9uOndrLnZlcnNpb24scmVuZGVyZXJQYWNrYWdlTmFtZTp3ay5yZW5kZXJlclBhY2thZ2VOYW1lLHJlbmRlcmVyQ29uZmlnOndrLnJlbmRlcmVyQ29uZmlnLG92ZXJyaWRlSG9va1N0YXRlOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wczpudWxsLG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6bnVsbCxzZXRTdXNwZW5zZUhhbmRsZXI6bnVsbCxzY2hlZHVsZVVwZGF0ZTpudWxsLGN1cnJlbnREaXNwYXRjaGVyUmVmOnJhLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6ZnVuY3Rpb24oYSl7YT1jYyhhKTtyZXR1cm4gbnVsbD09PWE/bnVsbDphLnN0YXRlTm9kZX0sZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6d2suZmluZEZpYmVyQnlIb3N0SW5zdGFuY2V8fFxucGssZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOm51bGwsc2NoZWR1bGVSZWZyZXNoOm51bGwsc2NoZWR1bGVSb290Om51bGwsc2V0UmVmcmVzaEhhbmRsZXI6bnVsbCxnZXRDdXJyZW50RmliZXI6bnVsbH07aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pe3ZhciB5az1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYoIXlrLmlzRGlzYWJsZWQmJnlrLnN1cHBvcnRzRmliZXIpdHJ5e0xmPXlrLmluamVjdCh4ayksTWY9eWt9Y2F0Y2goYSl7fX1leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPXZrO2V4cG9ydHMuY3JlYXRlUG9ydGFsPXVrO1xuZXhwb3J0cy5maW5kRE9NTm9kZT1mdW5jdGlvbihhKXtpZihudWxsPT1hKXJldHVybiBudWxsO2lmKDE9PT1hLm5vZGVUeXBlKXJldHVybiBhO3ZhciBiPWEuX3JlYWN0SW50ZXJuYWxzO2lmKHZvaWQgMD09PWIpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhLnJlbmRlcil0aHJvdyBFcnJvcih5KDE4OCkpO3Rocm93IEVycm9yKHkoMjY4LE9iamVjdC5rZXlzKGEpKSk7fWE9Y2MoYik7YT1udWxsPT09YT9udWxsOmEuc3RhdGVOb2RlO3JldHVybiBhfTtleHBvcnRzLmZsdXNoU3luYz1mdW5jdGlvbihhLGIpe3ZhciBjPVg7aWYoMCE9PShjJjQ4KSlyZXR1cm4gYShiKTtYfD0xO3RyeXtpZihhKXJldHVybiBnZyg5OSxhLmJpbmQobnVsbCxiKSl9ZmluYWxseXtYPWMsaWcoKX19O2V4cG9ydHMuaHlkcmF0ZT1mdW5jdGlvbihhLGIsYyl7aWYoIXJrKGIpKXRocm93IEVycm9yKHkoMjAwKSk7cmV0dXJuIHRrKG51bGwsYSxiLCEwLGMpfTtcbmV4cG9ydHMucmVuZGVyPWZ1bmN0aW9uKGEsYixjKXtpZighcmsoYikpdGhyb3cgRXJyb3IoeSgyMDApKTtyZXR1cm4gdGsobnVsbCxhLGIsITEsYyl9O2V4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZT1mdW5jdGlvbihhKXtpZighcmsoYSkpdGhyb3cgRXJyb3IoeSg0MCkpO3JldHVybiBhLl9yZWFjdFJvb3RDb250YWluZXI/KFhqKGZ1bmN0aW9uKCl7dGsobnVsbCxudWxsLGEsITEsZnVuY3Rpb24oKXthLl9yZWFjdFJvb3RDb250YWluZXI9bnVsbDthW2ZmXT1udWxsfSl9KSwhMCk6ITF9O2V4cG9ydHMudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM9V2o7ZXhwb3J0cy51bnN0YWJsZV9jcmVhdGVQb3J0YWw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdWsoYSxiLDI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsKX07XG5leHBvcnRzLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyPWZ1bmN0aW9uKGEsYixjLGQpe2lmKCFyayhjKSl0aHJvdyBFcnJvcih5KDIwMCkpO2lmKG51bGw9PWF8fHZvaWQgMD09PWEuX3JlYWN0SW50ZXJuYWxzKXRocm93IEVycm9yKHkoMzgpKTtyZXR1cm4gdGsoYSxiLGMsITEsZCl9O2V4cG9ydHMudmVyc2lvbj1cIjE3LjAuMlwiO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZT1yZXF1aXJlKFwicmVhY3RcIik7ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIGs9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6aCxsPWUudXNlU3RhdGUsbT1lLnVzZUVmZmVjdCxuPWUudXNlTGF5b3V0RWZmZWN0LHA9ZS51c2VEZWJ1Z1ZhbHVlO2Z1bmN0aW9uIHEoYSxiKXt2YXIgZD1iKCksZj1sKHtpbnN0Ont2YWx1ZTpkLGdldFNuYXBzaG90OmJ9fSksYz1mWzBdLmluc3QsZz1mWzFdO24oZnVuY3Rpb24oKXtjLnZhbHVlPWQ7Yy5nZXRTbmFwc2hvdD1iO3IoYykmJmcoe2luc3Q6Y30pfSxbYSxkLGJdKTttKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSk7cmV0dXJuIGEoZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KX0pfSxbYV0pO3AoZCk7cmV0dXJuIGR9XG5mdW5jdGlvbiByKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgZD1iKCk7cmV0dXJuIWsoYSxkKX1jYXRjaChmKXtyZXR1cm4hMH19ZnVuY3Rpb24gdChhLGIpe3JldHVybiBiKCl9dmFyIHU9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P3Q6cTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPXZvaWQgMCE9PWUudXNlU3luY0V4dGVybmFsU3RvcmU/ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZTp1O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHVzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGg9cmVxdWlyZShcInJlYWN0XCIpLG49cmVxdWlyZShcInVzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW1cIik7ZnVuY3Rpb24gcChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIHE9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6cCxyPW4udXNlU3luY0V4dGVybmFsU3RvcmUsdD1oLnVzZVJlZix1PWgudXNlRWZmZWN0LHY9aC51c2VNZW1vLHc9aC51c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3Rvcj1mdW5jdGlvbihhLGIsZSxsLGcpe3ZhciBjPXQobnVsbCk7aWYobnVsbD09PWMuY3VycmVudCl7dmFyIGY9e2hhc1ZhbHVlOiExLHZhbHVlOm51bGx9O2MuY3VycmVudD1mfWVsc2UgZj1jLmN1cnJlbnQ7Yz12KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtpZighYyl7Yz0hMDtkPWE7YT1sKGEpO2lmKHZvaWQgMCE9PWcmJmYuaGFzVmFsdWUpe3ZhciBiPWYudmFsdWU7aWYoZyhiLGEpKXJldHVybiBrPWJ9cmV0dXJuIGs9YX1iPWs7aWYocShkLGEpKXJldHVybiBiO3ZhciBlPWwoYSk7aWYodm9pZCAwIT09ZyYmZyhiLGUpKXJldHVybiBiO2Q9YTtyZXR1cm4gaz1lfXZhciBjPSExLGQsayxtPXZvaWQgMD09PWU/bnVsbDplO3JldHVybltmdW5jdGlvbigpe3JldHVybiBhKGIoKSl9LG51bGw9PT1tP3ZvaWQgMDpmdW5jdGlvbigpe3JldHVybiBhKG0oKSl9XX0sW2IsZSxsLGddKTt2YXIgZD1yKGEsY1swXSxjWzFdKTtcbnUoZnVuY3Rpb24oKXtmLmhhc1ZhbHVlPSEwO2YudmFsdWU9ZH0sW2RdKTt3KGQpO3JldHVybiBkfTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7dmFyIGI9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcixjPWI/U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIik6NjAxMDMsZD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIik6NjAxMDYsZT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKTo2MDEwNyxmPWI/U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpOjYwMTA4LGc9Yj9TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik6NjAxMTQsaD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKTo2MDEwOSxrPWI/U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIik6NjAxMTAsbD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5hc3luY19tb2RlXCIpOjYwMTExLG09Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpOjYwMTExLG49Yj9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIscD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTo2MDExMyxxPWI/XG5TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTo2MDEyMCxyPWI/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsdD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LHY9Yj9TeW1ib2wuZm9yKFwicmVhY3QuYmxvY2tcIik6NjAxMjEsdz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTo2MDExNyx4PWI/U3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKTo2MDExOCx5PWI/U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpOjYwMTE5O1xuZnVuY3Rpb24geihhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgdT1hLiQkdHlwZW9mO3N3aXRjaCh1KXtjYXNlIGM6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgbDpjYXNlIG06Y2FzZSBlOmNhc2UgZzpjYXNlIGY6Y2FzZSBwOnJldHVybiBhO2RlZmF1bHQ6c3dpdGNoKGE9YSYmYS4kJHR5cGVvZixhKXtjYXNlIGs6Y2FzZSBuOmNhc2UgdDpjYXNlIHI6Y2FzZSBoOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuIHV9fWNhc2UgZDpyZXR1cm4gdX19fWZ1bmN0aW9uIEEoYSl7cmV0dXJuIHooYSk9PT1tfWV4cG9ydHMuQXN5bmNNb2RlPWw7ZXhwb3J0cy5Db25jdXJyZW50TW9kZT1tO2V4cG9ydHMuQ29udGV4dENvbnN1bWVyPWs7ZXhwb3J0cy5Db250ZXh0UHJvdmlkZXI9aDtleHBvcnRzLkVsZW1lbnQ9YztleHBvcnRzLkZvcndhcmRSZWY9bjtleHBvcnRzLkZyYWdtZW50PWU7ZXhwb3J0cy5MYXp5PXQ7ZXhwb3J0cy5NZW1vPXI7ZXhwb3J0cy5Qb3J0YWw9ZDtcbmV4cG9ydHMuUHJvZmlsZXI9ZztleHBvcnRzLlN0cmljdE1vZGU9ZjtleHBvcnRzLlN1c3BlbnNlPXA7ZXhwb3J0cy5pc0FzeW5jTW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gQShhKXx8eihhKT09PWx9O2V4cG9ydHMuaXNDb25jdXJyZW50TW9kZT1BO2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1rfTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09aH07ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWN9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09bn07ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZX07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT10fTtcbmV4cG9ydHMuaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cn07ZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWR9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWd9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Zn07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cH07XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfHxhPT09ZXx8YT09PW18fGE9PT1nfHxhPT09Znx8YT09PXB8fGE9PT1xfHxcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiYoYS4kJHR5cGVvZj09PXR8fGEuJCR0eXBlb2Y9PT1yfHxhLiQkdHlwZW9mPT09aHx8YS4kJHR5cGVvZj09PWt8fGEuJCR0eXBlb2Y9PT1ufHxhLiQkdHlwZW9mPT09d3x8YS4kJHR5cGVvZj09PXh8fGEuJCR0eXBlb2Y9PT15fHxhLiQkdHlwZW9mPT09dil9O2V4cG9ydHMudHlwZU9mPXo7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbnZhciBSRUFDVF9TVEFUSUNTID0ge1xuICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgY29udGV4dFR5cGU6IHRydWUsXG4gIGNvbnRleHRUeXBlczogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgZ2V0RGVmYXVsdFByb3BzOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogdHJ1ZSxcbiAgbWl4aW5zOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgS05PV05fU1RBVElDUyA9IHtcbiAgbmFtZTogdHJ1ZSxcbiAgbGVuZ3RoOiB0cnVlLFxuICBwcm90b3R5cGU6IHRydWUsXG4gIGNhbGxlcjogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBhcmd1bWVudHM6IHRydWUsXG4gIGFyaXR5OiB0cnVlXG59O1xudmFyIEZPUldBUkRfUkVGX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIHJlbmRlcjogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlXG59O1xudmFyIE1FTU9fU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgY29tcGFyZTogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIFRZUEVfU1RBVElDUyA9IHt9O1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuRm9yd2FyZFJlZl0gPSBGT1JXQVJEX1JFRl9TVEFUSUNTO1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuTWVtb10gPSBNRU1PX1NUQVRJQ1M7XG5cbmZ1bmN0aW9uIGdldFN0YXRpY3MoY29tcG9uZW50KSB7XG4gIC8vIFJlYWN0IHYxNi4xMSBhbmQgYmVsb3dcbiAgaWYgKHJlYWN0SXMuaXNNZW1vKGNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gTUVNT19TVEFUSUNTO1xuICB9IC8vIFJlYWN0IHYxNi4xMiBhbmQgYWJvdmVcblxuXG4gIHJldHVybiBUWVBFX1NUQVRJQ1NbY29tcG9uZW50WyckJHR5cGVvZiddXSB8fCBSRUFDVF9TVEFUSUNTO1xufVxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBvYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuZnVuY3Rpb24gaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21wb25lbnQsIGJsYWNrbGlzdCkge1xuICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xuICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgICBpZiAoaW5oZXJpdGVkQ29tcG9uZW50ICYmIGluaGVyaXRlZENvbXBvbmVudCAhPT0gb2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICAgIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgaW5oZXJpdGVkQ29tcG9uZW50LCBibGFja2xpc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0U3RhdGljcyA9IGdldFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50KTtcbiAgICB2YXIgc291cmNlU3RhdGljcyA9IGdldFN0YXRpY3Moc291cmNlQ29tcG9uZW50KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghS05PV05fU1RBVElDU1trZXldICYmICEoYmxhY2tsaXN0ICYmIGJsYWNrbGlzdFtrZXldKSAmJiAhKHNvdXJjZVN0YXRpY3MgJiYgc291cmNlU3RhdGljc1trZXldKSAmJiAhKHRhcmdldFN0YXRpY3MgJiYgdGFyZ2V0U3RhdGljc1trZXldKSkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBBdm9pZCBmYWlsdXJlcyBmcm9tIHJlYWQtb25seSBwcm9wZXJ0aWVzXG4gICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaG9pc3ROb25SZWFjdFN0YXRpY3M7XG4iLCAiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBiPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLGM9U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxkPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxlPVN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxmPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSxnPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSxoPVN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLGs9U3ltYm9sLmZvcihcInJlYWN0LnNlcnZlcl9jb250ZXh0XCIpLGw9U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLG09U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLG49U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIikscD1TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxxPVN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLHQ9U3ltYm9sLmZvcihcInJlYWN0Lm9mZnNjcmVlblwiKSx1O3U9U3ltYm9sLmZvcihcInJlYWN0Lm1vZHVsZS5yZWZlcmVuY2VcIik7XG5mdW5jdGlvbiB2KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciByPWEuJCR0eXBlb2Y7c3dpdGNoKHIpe2Nhc2UgYjpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBkOmNhc2UgZjpjYXNlIGU6Y2FzZSBtOmNhc2UgbjpyZXR1cm4gYTtkZWZhdWx0OnN3aXRjaChhPWEmJmEuJCR0eXBlb2YsYSl7Y2FzZSBrOmNhc2UgaDpjYXNlIGw6Y2FzZSBxOmNhc2UgcDpjYXNlIGc6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gcn19Y2FzZSBjOnJldHVybiByfX19ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aDtleHBvcnRzLkNvbnRleHRQcm92aWRlcj1nO2V4cG9ydHMuRWxlbWVudD1iO2V4cG9ydHMuRm9yd2FyZFJlZj1sO2V4cG9ydHMuRnJhZ21lbnQ9ZDtleHBvcnRzLkxhenk9cTtleHBvcnRzLk1lbW89cDtleHBvcnRzLlBvcnRhbD1jO2V4cG9ydHMuUHJvZmlsZXI9ZjtleHBvcnRzLlN0cmljdE1vZGU9ZTtleHBvcnRzLlN1c3BlbnNlPW07XG5leHBvcnRzLlN1c3BlbnNlTGlzdD1uO2V4cG9ydHMuaXNBc3luY01vZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1ofTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09Z307ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWJ9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bH07ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09ZH07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1xfTtleHBvcnRzLmlzTWVtbz1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PXB9O1xuZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWN9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWZ9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09ZX07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bX07ZXhwb3J0cy5pc1N1c3BlbnNlTGlzdD1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PW59O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgYXx8YT09PWR8fGE9PT1mfHxhPT09ZXx8YT09PW18fGE9PT1ufHxhPT09dHx8XCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmKGEuJCR0eXBlb2Y9PT1xfHxhLiQkdHlwZW9mPT09cHx8YS4kJHR5cGVvZj09PWd8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09bHx8YS4kJHR5cGVvZj09PXV8fHZvaWQgMCE9PWEuZ2V0TW9kdWxlSWQpPyEwOiExfTtleHBvcnRzLnR5cGVPZj12O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG4vKiBnbG9iYWwgbW9kdWxlLCBkZWZpbmUgKi9cblxuZnVuY3Rpb24gbWFwRWFjaChtYXAsIG9wZXJhdGlvbil7XG4gIHZhciBrZXlzID0gbWFwLmtleXMoKTtcbiAgdmFyIG5leHQ7XG4gIHdoaWxlKCEobmV4dCA9IGtleXMubmV4dCgpKS5kb25lKSB7XG4gICAgb3BlcmF0aW9uKG1hcC5nZXQobmV4dC52YWx1ZSksIG5leHQudmFsdWUsIG1hcCk7XG4gIH1cbn1cblxudmFyIE11bHRpbWFwID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgbWFwQ3RvcjtcbiAgaWYgKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbWFwQ3RvciA9IE1hcDtcblxuICAgIGlmICghTWFwLnByb3RvdHlwZS5rZXlzKSB7XG4gICAgICBNYXAucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0sIGtleSkge1xuICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIE11bHRpbWFwKGl0ZXJhYmxlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgc2VsZi5fbWFwID0gbWFwQ3RvcjtcblxuICAgIGlmIChNdWx0aW1hcC5NYXApIHtcbiAgICAgIHNlbGYuX21hcCA9IE11bHRpbWFwLk1hcDtcbiAgICB9XG5cbiAgICBzZWxmLl8gPSBzZWxmLl9tYXAgPyBuZXcgc2VsZi5fbWFwKCkgOiB7fTtcblxuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgaXRlcmFibGUuZm9yRWFjaChmdW5jdGlvbihpKSB7XG4gICAgICAgIHNlbGYuc2V0KGlbMF0sIGlbMV0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBrZXlcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHZhbHVlcywgdW5kZWZpbmVkIGlmIG5vIHN1Y2ggYSBrZXk7XG4gICAqL1xuICBNdWx0aW1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcCA/IHRoaXMuXy5nZXQoa2V5KSA6IHRoaXMuX1trZXldO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWwuLi5cbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICAgIGtleSA9IGFyZ3Muc2hpZnQoKTtcblxuICAgIHZhciBlbnRyeSA9IHRoaXMuZ2V0KGtleSk7XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgZW50cnkgPSBbXTtcbiAgICAgIGlmICh0aGlzLl9tYXApXG4gICAgICAgIHRoaXMuXy5zZXQoa2V5LCBlbnRyeSk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMuX1trZXldID0gZW50cnk7XG4gICAgfVxuXG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZW50cnksIGFyZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5XG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gdmFsXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgYW55IHRoaW5nIGNoYW5nZWRcbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgIGlmICghdGhpcy5oYXMoa2V5KSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAgIHRoaXMuX21hcCA/ICh0aGlzLl8uZGVsZXRlKGtleSkpIDogKGRlbGV0ZSB0aGlzLl9ba2V5XSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVudHJ5ID0gdGhpcy5nZXQoa2V5KTtcbiAgICAgIHZhciBpZHggPSBlbnRyeS5pbmRleE9mKHZhbCk7XG4gICAgICBpZiAoaWR4ICE9IC0xKSB7XG4gICAgICAgIGVudHJ5LnNwbGljZShpZHgsIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBrZXlcbiAgICogQHBhcmFtIHtPYmplY3Q9fSB2YWxcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGUgbWFwIGNvbnRhaW5zICdrZXknIG9yICdrZXk9PnZhbCcgcGFpclxuICAgKi9cbiAgTXVsdGltYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKGtleSwgdmFsKSB7XG4gICAgdmFyIGhhc0tleSA9IHRoaXMuX21hcCA/IHRoaXMuXy5oYXMoa2V5KSA6IHRoaXMuXy5oYXNPd25Qcm9wZXJ0eShrZXkpO1xuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSB8fCAhaGFzS2V5KVxuICAgICAgcmV0dXJuIGhhc0tleTtcblxuICAgIHZhciBlbnRyeSA9IHRoaXMuZ2V0KGtleSkgfHwgW107XG4gICAgcmV0dXJuIGVudHJ5LmluZGV4T2YodmFsKSAhPSAtMTtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtBcnJheX0gYWxsIHRoZSBrZXlzIGluIHRoZSBtYXBcbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX21hcClcbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcy5fLmtleXMoKSk7XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKE9iamVjdC5rZXlzKHRoaXMuXykpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtBcnJheX0gYWxsIHRoZSB2YWx1ZXMgaW4gdGhlIG1hcFxuICAgKi9cbiAgTXVsdGltYXAucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWxzID0gW107XG4gICAgdGhpcy5mb3JFYWNoRW50cnkoZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHZhbHMsIGVudHJ5KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IodmFscyk7XG4gIH07XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBNdWx0aW1hcC5wcm90b3R5cGUuZm9yRWFjaEVudHJ5ID0gZnVuY3Rpb24oaXRlcikge1xuICAgIG1hcEVhY2godGhpcywgaXRlcik7XG4gIH07XG5cbiAgTXVsdGltYXAucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihpdGVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuZm9yRWFjaEVudHJ5KGZ1bmN0aW9uKGVudHJ5LCBrZXkpIHtcbiAgICAgIGVudHJ5LmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICBpdGVyKGl0ZW0sIGtleSwgc2VsZik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuXG4gIE11bHRpbWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgIHRoaXMuXy5jbGVhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl8gPSB7fTtcbiAgICB9XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgIE11bHRpbWFwLnByb3RvdHlwZSxcbiAgICBcInNpemVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdG90YWwgPSAwO1xuXG4gICAgICAgIG1hcEVhY2godGhpcywgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgICAgIHRvdGFsICs9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRvdGFsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICBNdWx0aW1hcC5wcm90b3R5cGUsXG4gICAgXCJjb3VudFwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl8uc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB2YXIgc2FmYXJpTmV4dDtcblxuICB0cnl7XG4gICAgc2FmYXJpTmV4dCA9IG5ldyBGdW5jdGlvbignaXRlcmF0b3InLCAnbWFrZUl0ZXJhdG9yJywgJ3ZhciBrZXlzQXJyYXkgPSBbXTsgZm9yKHZhciBrZXkgb2YgaXRlcmF0b3Ipe2tleXNBcnJheS5wdXNoKGtleSk7fSByZXR1cm4gbWFrZUl0ZXJhdG9yKGtleXNBcnJheSkubmV4dDsnKTtcbiAgfWNhdGNoKGVycm9yKXtcbiAgICAvLyBmb3Igb2Ygbm90IGltcGxlbWVudGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFrZUl0ZXJhdG9yKGl0ZXJhdG9yKXtcbiAgICBpZihBcnJheS5pc0FycmF5KGl0ZXJhdG9yKSl7XG4gICAgICB2YXIgbmV4dEluZGV4ID0gMDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oKXtcbiAgICAgICAgICByZXR1cm4gbmV4dEluZGV4IDwgaXRlcmF0b3IubGVuZ3RoID9cbiAgICAgICAgICAgIHt2YWx1ZTogaXRlcmF0b3JbbmV4dEluZGV4KytdLCBkb25lOiBmYWxzZX0gOlxuICAgICAgICAgIHtkb25lOiB0cnVlfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IGFuIGlzc3VlIGluIHNhZmFyaVxuICAgIGlmKCFpdGVyYXRvci5uZXh0ICYmIHNhZmFyaU5leHQpe1xuICAgICAgaXRlcmF0b3IubmV4dCA9IHNhZmFyaU5leHQoaXRlcmF0b3IsIG1ha2VJdGVyYXRvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIE11bHRpbWFwO1xufSkoKTtcblxuXG5pZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgbW9kdWxlICYmIG1vZHVsZS5leHBvcnRzKVxuICBtb2R1bGUuZXhwb3J0cyA9IE11bHRpbWFwO1xuZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG4gIGRlZmluZShmdW5jdGlvbigpIHsgcmV0dXJuIE11bHRpbWFwOyB9KTtcbiIsICIvKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIFx1Mjc2NFx1RkUwRlxuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuLy8gJEZsb3dGaXhNZVxuZnVuY3Rpb24gc2hlZXRGb3JUYWcodGFnKSB7XG4gIGlmICh0YWcuc2hlZXQpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIHRhZy5zaGVldDtcbiAgfSAvLyB0aGlzIHdlaXJkbmVzcyBicm91Z2h0IHRvIHlvdSBieSBmaXJlZm94XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlID09PSB0YWcpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIG9wdGlvbnMua2V5KTtcblxuICBpZiAob3B0aW9ucy5ub25jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBvcHRpb25zLm5vbmNlKTtcbiAgfVxuXG4gIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gIHJldHVybiB0YWc7XG59XG5cbnZhciBTdHlsZVNoZWV0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgLy8gVXNpbmcgTm9kZSBpbnN0ZWFkIG9mIEhUTUxFbGVtZW50IHNpbmNlIGNvbnRhaW5lciBtYXkgYmUgYSBTaGFkb3dSb290XG4gIGZ1bmN0aW9uIFN0eWxlU2hlZXQob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9pbnNlcnRUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gICAgICB2YXIgYmVmb3JlO1xuXG4gICAgICBpZiAoX3RoaXMudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKF90aGlzLmluc2VydGlvblBvaW50KSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuaW5zZXJ0aW9uUG9pbnQubmV4dFNpYmxpbmc7XG4gICAgICAgIH0gZWxzZSBpZiAoX3RoaXMucHJlcGVuZCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmJlZm9yZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVmb3JlID0gX3RoaXMudGFnc1tfdGhpcy50YWdzLmxlbmd0aCAtIDFdLm5leHRTaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKHRhZywgYmVmb3JlKTtcblxuICAgICAgX3RoaXMudGFncy5wdXNoKHRhZyk7XG4gICAgfTtcblxuICAgIHRoaXMuaXNTcGVlZHkgPSBvcHRpb25zLnNwZWVkeSA9PT0gdW5kZWZpbmVkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgaXNJbXBvcnRSdWxlID0gcnVsZS5jaGFyQ29kZUF0KDApID09PSA2NCAmJiBydWxlLmNoYXJDb2RlQXQoMSkgPT09IDEwNTtcblxuICAgICAgaWYgKGlzSW1wb3J0UnVsZSAmJiB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSkge1xuICAgICAgICAvLyB0aGlzIHdvdWxkIG9ubHkgY2F1c2UgcHJvYmxlbSBpbiBzcGVlZHkgbW9kZVxuICAgICAgICAvLyBidXQgd2UgZG9uJ3Qgd2FudCBlbmFibGluZyBzcGVlZHkgdG8gYWZmZWN0IHRoZSBvYnNlcnZhYmxlIGJlaGF2aW9yXG4gICAgICAgIC8vIHNvIHdlIHJlcG9ydCB0aGlzIGVycm9yIGF0IGFsbCB0aW1lc1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiWW91J3JlIGF0dGVtcHRpbmcgdG8gaW5zZXJ0IHRoZSBmb2xsb3dpbmcgcnVsZTpcXG5cIiArIHJ1bGUgKyAnXFxuXFxuYEBpbXBvcnRgIHJ1bGVzIG11c3QgYmUgYmVmb3JlIGFsbCBvdGhlciB0eXBlcyBvZiBydWxlcyBpbiBhIHN0eWxlc2hlZXQgYnV0IG90aGVyIHJ1bGVzIGhhdmUgYWxyZWFkeSBiZWVuIGluc2VydGVkLiBQbGVhc2UgZW5zdXJlIHRoYXQgYEBpbXBvcnRgIHJ1bGVzIGFyZSBiZWZvcmUgYWxsIG90aGVyIHJ1bGVzLicpO1xuICAgICAgfVxuICAgICAgdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUgPSB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSB8fCAhaXNJbXBvcnRSdWxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIS86KC1tb3otcGxhY2Vob2xkZXJ8LW1vei1mb2N1cy1pbm5lcnwtbW96LWZvY3VzcmluZ3wtbXMtaW5wdXQtcGxhY2Vob2xkZXJ8LW1vei1yZWFkLXdyaXRlfC1tb3otcmVhZC1vbmx5fC1tcy1jbGVhcnwtbXMtZXhwYW5kfC1tcy1yZXZlYWwpey8udGVzdChydWxlKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGVyZSB3YXMgYSBwcm9ibGVtIGluc2VydGluZyB0aGUgZm9sbG93aW5nIHJ1bGU6IFxcXCJcIiArIHJ1bGUgKyBcIlxcXCJcIiwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICB0aGlzLnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnKSB7XG4gICAgICByZXR1cm4gdGFnLnBhcmVudE5vZGUgJiYgdGFnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsICJleHBvcnQgdmFyIE1TID0gJy1tcy0nXG5leHBvcnQgdmFyIE1PWiA9ICctbW96LSdcbmV4cG9ydCB2YXIgV0VCS0lUID0gJy13ZWJraXQtJ1xuXG5leHBvcnQgdmFyIENPTU1FTlQgPSAnY29tbSdcbmV4cG9ydCB2YXIgUlVMRVNFVCA9ICdydWxlJ1xuZXhwb3J0IHZhciBERUNMQVJBVElPTiA9ICdkZWNsJ1xuXG5leHBvcnQgdmFyIFBBR0UgPSAnQHBhZ2UnXG5leHBvcnQgdmFyIE1FRElBID0gJ0BtZWRpYSdcbmV4cG9ydCB2YXIgSU1QT1JUID0gJ0BpbXBvcnQnXG5leHBvcnQgdmFyIENIQVJTRVQgPSAnQGNoYXJzZXQnXG5leHBvcnQgdmFyIFZJRVdQT1JUID0gJ0B2aWV3cG9ydCdcbmV4cG9ydCB2YXIgU1VQUE9SVFMgPSAnQHN1cHBvcnRzJ1xuZXhwb3J0IHZhciBET0NVTUVOVCA9ICdAZG9jdW1lbnQnXG5leHBvcnQgdmFyIE5BTUVTUEFDRSA9ICdAbmFtZXNwYWNlJ1xuZXhwb3J0IHZhciBLRVlGUkFNRVMgPSAnQGtleWZyYW1lcydcbmV4cG9ydCB2YXIgRk9OVF9GQUNFID0gJ0Bmb250LWZhY2UnXG5leHBvcnQgdmFyIENPVU5URVJfU1RZTEUgPSAnQGNvdW50ZXItc3R5bGUnXG5leHBvcnQgdmFyIEZPTlRfRkVBVFVSRV9WQUxVRVMgPSAnQGZvbnQtZmVhdHVyZS12YWx1ZXMnXG5leHBvcnQgdmFyIExBWUVSID0gJ0BsYXllcidcbiIsICIvKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgZnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHJldHVybiBjaGFyYXQodmFsdWUsIDApIF4gNDUgPyAoKCgoKCgobGVuZ3RoIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAwKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDEpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMikpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAzKSA6IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS50cmltKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmc/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2ggKHZhbHVlLCBwYXR0ZXJuKSB7XG5cdHJldHVybiAodmFsdWUgPSBwYXR0ZXJuLmV4ZWModmFsdWUpKSA/IHZhbHVlWzBdIDogdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UgKHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gpIHtcblx0cmV0dXJuIHZhbHVlLmluZGV4T2Yoc2VhcmNoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG4iLCAiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vZGUgKHZhbHVlLCByb290LCBwYXJlbnQsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHJldHVybiB7dmFsdWU6IHZhbHVlLCByb290OiByb290LCBwYXJlbnQ6IHBhcmVudCwgdHlwZTogdHlwZSwgcHJvcHM6IHByb3BzLCBjaGlsZHJlbjogY2hpbGRyZW4sIGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uLCBsZW5ndGg6IGxlbmd0aCwgcmV0dXJuOiAnJ31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChyb290LCBwcm9wcykge1xuXHRyZXR1cm4gYXNzaWduKG5vZGUoJycsIG51bGwsIG51bGwsICcnLCBudWxsLCBudWxsLCAwKSwgcm9vdCwge2xlbmd0aDogLXJvb3QubGVuZ3RofSwgcHJvcHMpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwgImltcG9ydCB7Q09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7YWJzLCBjaGFyYXQsIHRyaW0sIGZyb20sIHNpemVvZiwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgcmVwbGFjZSwgaW5kZXhvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtub2RlLCBjaGFyLCBwcmV2LCBuZXh0LCBwZWVrLCBjYXJldCwgYWxsb2MsIGRlYWxsb2MsIGRlbGltaXQsIHdoaXRlc3BhY2UsIGVzY2FwaW5nLCBpZGVudGlmaWVyLCBjb21tZW50ZXJ9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7b2JqZWN0W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyhwYXJzZSgnJywgbnVsbCwgbnVsbCwgbnVsbCwgWycnXSwgdmFsdWUgPSBhbGxvYyh2YWx1ZSksIDAsIFswXSwgdmFsdWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNldHNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBzZXVkb1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZWNsYXJhdGlvbnNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBydWxlLCBydWxlcywgcnVsZXNldHMsIHBzZXVkbywgcG9pbnRzLCBkZWNsYXJhdGlvbnMpIHtcblx0dmFyIGluZGV4ID0gMFxuXHR2YXIgb2Zmc2V0ID0gMFxuXHR2YXIgbGVuZ3RoID0gcHNldWRvXG5cdHZhciBhdHJ1bGUgPSAwXG5cdHZhciBwcm9wZXJ0eSA9IDBcblx0dmFyIHByZXZpb3VzID0gMFxuXHR2YXIgdmFyaWFibGUgPSAxXG5cdHZhciBzY2FubmluZyA9IDFcblx0dmFyIGFtcGVyc2FuZCA9IDFcblx0dmFyIGNoYXJhY3RlciA9IDBcblx0dmFyIHR5cGUgPSAnJ1xuXHR2YXIgcHJvcHMgPSBydWxlc1xuXHR2YXIgY2hpbGRyZW4gPSBydWxlc2V0c1xuXHR2YXIgcmVmZXJlbmNlID0gcnVsZVxuXHR2YXIgY2hhcmFjdGVycyA9IHR5cGVcblxuXHR3aGlsZSAoc2Nhbm5pbmcpXG5cdFx0c3dpdGNoIChwcmV2aW91cyA9IGNoYXJhY3RlciwgY2hhcmFjdGVyID0gbmV4dCgpKSB7XG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAocHJldmlvdXMgIT0gMTA4ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCBsZW5ndGggLSAxKSA9PSA1OCkge1xuXHRcdFx0XHRcdGlmIChpbmRleG9mKGNoYXJhY3RlcnMgKz0gcmVwbGFjZShkZWxpbWl0KGNoYXJhY3RlciksICcmJywgJyZcXGYnKSwgJyZcXGYnKSAhPSAtMSlcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IC0xXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0Ly8gXCIgJyBbXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDkxOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFx0IFxcbiBcXHIgXFxzXG5cdFx0XHRjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gd2hpdGVzcGFjZShwcmV2aW91cylcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGVzY2FwaW5nKGNhcmV0KCkgLSAxLCA3KVxuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0Ly8gL1xuXHRcdFx0Y2FzZSA0Nzpcblx0XHRcdFx0c3dpdGNoIChwZWVrKCkpIHtcblx0XHRcdFx0XHRjYXNlIDQyOiBjYXNlIDQ3OlxuXHRcdFx0XHRcdFx0YXBwZW5kKGNvbW1lbnQoY29tbWVudGVyKG5leHQoKSwgY2FyZXQoKSksIHJvb3QsIHBhcmVudCksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGgpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSkgOiBkZWNsYXJhdGlvbihyZXBsYWNlKGNoYXJhY3RlcnMsICcgJywgJycpICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDIpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEAgO1xuXHRcdFx0XHRcdGNhc2UgNTk6IGNoYXJhY3RlcnMgKz0gJzsnXG5cdFx0XHRcdFx0Ly8geyBydWxlL2F0LXJ1bGVcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YXBwZW5kKHJlZmVyZW5jZSA9IHJ1bGVzZXQoY2hhcmFjdGVycywgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcyA9IFtdLCBjaGlsZHJlbiA9IFtdLCBsZW5ndGgpLCBydWxlc2V0cylcblxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gMTIzKVxuXHRcdFx0XHRcdFx0XHRpZiAob2Zmc2V0ID09PSAwKVxuXHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJvb3QsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBwcm9wcywgcnVsZXNldHMsIGxlbmd0aCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoYXRydWxlID09PSA5OSAmJiBjaGFyYXQoY2hhcmFjdGVycywgMykgPT09IDExMCA/IDEwMCA6IGF0cnVsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZCBsIG0gc1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAxMDA6IGNhc2UgMTA4OiBjYXNlIDEwOTogY2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcnVsZSAmJiBhcHBlbmQocnVsZXNldCh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIDAsIDAsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHJ1bGVzLCBwcm9wcyA9IFtdLCBsZW5ndGgpLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNldCAodmFsdWUsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0dmFyIHBvc3QgPSBvZmZzZXQgLSAxXG5cdHZhciBydWxlID0gb2Zmc2V0ID09PSAwID8gcnVsZXMgOiBbJyddXG5cdHZhciBzaXplID0gc2l6ZW9mKHJ1bGUpXG5cblx0Zm9yICh2YXIgaSA9IDAsIGogPSAwLCBrID0gMDsgaSA8IGluZGV4OyArK2kpXG5cdFx0Zm9yICh2YXIgeCA9IDAsIHkgPSBzdWJzdHIodmFsdWUsIHBvc3QgKyAxLCBwb3N0ID0gYWJzKGogPSBwb2ludHNbaV0pKSwgeiA9IHZhbHVlOyB4IDwgc2l6ZTsgKyt4KVxuXHRcdFx0aWYgKHogPSB0cmltKGogPiAwID8gcnVsZVt4XSArICcgJyArIHkgOiByZXBsYWNlKHksIC8mXFxmL2csIHJ1bGVbeF0pKSlcblx0XHRcdFx0cHJvcHNbaysrXSA9IHpcblxuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBvZmZzZXQgPT09IDAgPyBSVUxFU0VUIDogdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnQgKHZhbHVlLCByb290LCBwYXJlbnQpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgQ09NTUVOVCwgZnJvbShjaGFyKCkpLCBzdWJzdHIodmFsdWUsIDIsIC0yKSwgMClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHZhbHVlLCByb290LCBwYXJlbnQsIGxlbmd0aCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBERUNMQVJBVElPTiwgc3Vic3RyKHZhbHVlLCAwLCBsZW5ndGgpLCBzdWJzdHIodmFsdWUsIGxlbmd0aCArIDEsIC0xKSwgbGVuZ3RoKVxufVxuIiwgImltcG9ydCB7TVMsIE1PWiwgV0VCS0lUfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2hhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCByZXBsYWNlLCBzdWJzdHIsIG1hdGNofSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ICh2YWx1ZSwgbGVuZ3RoLCBjaGlsZHJlbikge1xuXHRzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcblx0XHQvLyBjb2xvci1hZGp1c3Rcblx0XHRjYXNlIDUxMDM6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cdFx0Y2FzZSA1NzM3OiBjYXNlIDQyMDE6IGNhc2UgMzE3NzogY2FzZSAzNDMzOiBjYXNlIDE2NDE6IGNhc2UgNDQ1NzogY2FzZSAyOTIxOlxuXHRcdC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblx0XHRjYXNlIDU1NzI6IGNhc2UgNjM1NjogY2FzZSA1ODQ0OiBjYXNlIDMxOTE6IGNhc2UgNjY0NTogY2FzZSAzMDA1OlxuXHRcdC8vIG1hc2ssIG1hc2staW1hZ2UsIG1hc2stKG1vZGV8Y2xpcHxzaXplKSwgbWFzay0ocmVwZWF0fG9yaWdpbiksIG1hc2stcG9zaXRpb24sIG1hc2stY29tcG9zaXRlLFxuXHRcdGNhc2UgNjM5MTogY2FzZSA1ODc5OiBjYXNlIDU2MjM6IGNhc2UgNjEzNTogY2FzZSA0NTk5OiBjYXNlIDQ4NTU6XG5cdFx0Ly8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblx0XHRjYXNlIDQyMTU6IGNhc2UgNjM4OTogY2FzZSA1MTA5OiBjYXNlIDUzNjU6IGNhc2UgNTYyMTogY2FzZSAzODI5OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWVcblx0XHQvLyB0YWItc2l6ZVxuXHRcdGNhc2UgNDc4OTpcblx0XHRcdHJldHVybiBNT1ogKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXHRcdGNhc2UgNTM0OTogY2FzZSA0MjQ2OiBjYXNlIDQ4MTA6IGNhc2UgNjk2ODogY2FzZSAyNzU2OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWVcblx0XHQvLyB3cml0aW5nLW1vZGVcblx0XHRjYXNlIDU5MzY6XG5cdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG5cdFx0XHRcdC8vIHZlcnRpY2FsLWwocilcblx0XHRcdFx0Y2FzZSAxMTQ6XG5cdFx0XHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWVcblx0XHRcdFx0Ly8gdmVydGljYWwtcihsKVxuXHRcdFx0XHRjYXNlIDEwODpcblx0XHRcdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyBob3Jpem9udGFsKC0pdGJcblx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyBkZWZhdWx0OiBmYWxsdGhyb3VnaCB0byBiZWxvd1xuXHRcdFx0fVxuXHRcdC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uLCBzY3JvbGwtc25hcC10eXBlLCB3cml0aW5nLW1vZGVcblx0XHRjYXNlIDY4Mjg6IGNhc2UgNDI2ODogY2FzZSAyOTAzOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gb3JkZXJcblx0XHRjYXNlIDYxNjU6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYWxpZ24taXRlbXNcblx0XHRjYXNlIDUxODc6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWVcblx0XHQvLyBhbGlnbi1zZWxmXG5cdFx0Y2FzZSA1NDQzOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvZywgJycpICsgKCFtYXRjaCh2YWx1ZSwgL2ZsZXgtfGJhc2VsaW5lLykgPyBNUyArICdncmlkLXJvdy0nICsgcmVwbGFjZSh2YWx1ZSwgL2ZsZXgtfC1zZWxmL2csICcnKSA6ICcnKSArIHZhbHVlXG5cdFx0Ly8gYWxpZ24tY29udGVudFxuXHRcdGNhc2UgNDY3NTpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmL2csICcnKSArIHZhbHVlXG5cdFx0Ly8gZmxleC1zaHJpbmtcblx0XHRjYXNlIDU1NDg6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlXG5cdFx0Ly8gZmxleC1iYXNpc1xuXHRcdGNhc2UgNTI5Mjpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZVxuXHRcdC8vIGZsZXgtZ3Jvd1xuXHRcdGNhc2UgNjA2MDpcblx0XHRcdHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlXG5cdFx0Ly8gdHJhbnNpdGlvblxuXHRcdGNhc2UgNDU1NDpcblx0XHRcdHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWVcblx0XHQvLyBjdXJzb3Jcblx0XHRjYXNlIDYxODc6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2Vcblx0XHRjYXNlIDU0OTU6IGNhc2UgMzk1OTpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKGltYWdlLXNldFxcKFteXSopLywgV0VCS0lUICsgJyQxJyArICckYCQxJylcblx0XHQvLyBqdXN0aWZ5LWNvbnRlbnRcblx0XHRjYXNlIDQ5Njg6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKC4rOikoZmxleC0pPyguKikvLCBXRUJLSVQgKyAnYm94LXBhY2s6JDMnICsgTVMgKyAnZmxleC1wYWNrOiQzJyksIC9zListYlteO10rLywgJ2p1c3RpZnknKSArIFdFQktJVCArIHZhbHVlICsgdmFsdWVcblx0XHQvLyBqdXN0aWZ5LXNlbGZcblx0XHRjYXNlIDQyMDA6XG5cdFx0XHRpZiAoIW1hdGNoKHZhbHVlLCAvZmxleC18YmFzZWxpbmUvKSkgcmV0dXJuIE1TICsgJ2dyaWQtY29sdW1uLWFsaWduJyArIHN1YnN0cih2YWx1ZSwgbGVuZ3RoKSArIHZhbHVlXG5cdFx0XHRicmVha1xuXHRcdC8vIGdyaWQtdGVtcGxhdGUtKGNvbHVtbnN8cm93cylcblx0XHRjYXNlIDI1OTI6IGNhc2UgMzM2MDpcblx0XHRcdHJldHVybiBNUyArIHJlcGxhY2UodmFsdWUsICd0ZW1wbGF0ZS0nLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGdyaWQtKHJvd3xjb2x1bW4pLXN0YXJ0XG5cdFx0Y2FzZSA0Mzg0OiBjYXNlIDM2MTY6XG5cdFx0XHRpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4uc29tZShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgpIHsgcmV0dXJuIGxlbmd0aCA9IGluZGV4LCBtYXRjaChlbGVtZW50LnByb3BzLCAvZ3JpZC1cXHcrLWVuZC8pIH0pKSB7XG5cdFx0XHRcdHJldHVybiB+aW5kZXhvZih2YWx1ZSArIChjaGlsZHJlbiA9IGNoaWxkcmVuW2xlbmd0aF0udmFsdWUpLCAnc3BhbicpID8gdmFsdWUgOiAoTVMgKyByZXBsYWNlKHZhbHVlLCAnLXN0YXJ0JywgJycpICsgdmFsdWUgKyBNUyArICdncmlkLXJvdy1zcGFuOicgKyAofmluZGV4b2YoY2hpbGRyZW4sICdzcGFuJykgPyBtYXRjaChjaGlsZHJlbiwgL1xcZCsvKSA6ICttYXRjaChjaGlsZHJlbiwgL1xcZCsvKSAtICttYXRjaCh2YWx1ZSwgL1xcZCsvKSkgKyAnOycpXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gTVMgKyByZXBsYWNlKHZhbHVlLCAnLXN0YXJ0JywgJycpICsgdmFsdWVcblx0XHQvLyBncmlkLShyb3d8Y29sdW1uKS1lbmRcblx0XHRjYXNlIDQ4OTY6IGNhc2UgNDEyODpcblx0XHRcdHJldHVybiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4uc29tZShmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gbWF0Y2goZWxlbWVudC5wcm9wcywgL2dyaWQtXFx3Ky1zdGFydC8pIH0pKSA/IHZhbHVlIDogTVMgKyByZXBsYWNlKHJlcGxhY2UodmFsdWUsICctZW5kJywgJy1zcGFuJyksICdzcGFuICcsICcnKSArIHZhbHVlXG5cdFx0Ly8gKG1hcmdpbnxwYWRkaW5nKS1pbmxpbmUtKHN0YXJ0fGVuZClcblx0XHRjYXNlIDQwOTU6IGNhc2UgMzU4MzogY2FzZSA0MDY4OiBjYXNlIDI1MzI6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZVxuXHRcdC8vIChtaW58bWF4KT8od2lkdGh8aGVpZ2h0fGlubGluZS1zaXplfGJsb2NrLXNpemUpXG5cdFx0Y2FzZSA4MTE2OiBjYXNlIDcwNTk6IGNhc2UgNTc1MzogY2FzZSA1NTM1OlxuXHRcdGNhc2UgNTQ0NTogY2FzZSA1NzAxOiBjYXNlIDQ5MzM6IGNhc2UgNDY3Nzpcblx0XHRjYXNlIDU1MzM6IGNhc2UgNTc4OTogY2FzZSA1MDIxOiBjYXNlIDQ3NjU6XG5cdFx0XHQvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG5cdFx0XHRpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KVxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcblx0XHRcdFx0XHQvLyAobSlheC1jb250ZW50LCAobSlpbi1jb250ZW50XG5cdFx0XHRcdFx0Y2FzZSAxMDk6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyA0KSAhPT0gNDUpXG5cdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXHRcdFx0XHRcdGNhc2UgMTAyOlxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KSguKyktKFteXSspLywgJyQxJyArIFdFQktJVCArICckMi0kMycgKyAnJDEnICsgTU9aICsgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMykgPT0gMTA4ID8gJyQzJyA6ICckMi0kMycpKSArIHZhbHVlXG5cdFx0XHRcdFx0Ly8gKHMpdHJldGNoXG5cdFx0XHRcdFx0Y2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRyZXR1cm4gfmluZGV4b2YodmFsdWUsICdzdHJldGNoJykgPyBwcmVmaXgocmVwbGFjZSh2YWx1ZSwgJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgbGVuZ3RoLCBjaGlsZHJlbikgKyB2YWx1ZSA6IHZhbHVlXG5cdFx0XHRcdH1cblx0XHRcdGJyZWFrXG5cdFx0Ly8gZ3JpZC0oY29sdW1ufHJvdylcblx0XHRjYXNlIDUxNTI6IGNhc2UgNTkyMDpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rPyk6KFxcZCspKFxccypcXC9cXHMqKHNwYW4pP1xccyooXFxkKykpPyguKikvLCBmdW5jdGlvbiAoXywgYSwgYiwgYywgZCwgZSwgZikgeyByZXR1cm4gKE1TICsgYSArICc6JyArIGIgKyBmKSArIChjID8gKE1TICsgYSArICctc3BhbjonICsgKGQgPyBlIDogK2UgLSArYikpICsgZiA6ICcnKSArIHZhbHVlIH0pXG5cdFx0Ly8gcG9zaXRpb246IHN0aWNreVxuXHRcdGNhc2UgNDk0OTpcblx0XHRcdC8vIHN0aWNrKHkpP1xuXHRcdFx0aWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNikgPT09IDEyMSlcblx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsICc6JywgJzonICsgV0VCS0lUKSArIHZhbHVlXG5cdFx0XHRicmVha1xuXHRcdC8vIGRpc3BsYXk6IChmbGV4fGlubGluZS1mbGV4fGdyaWR8aW5saW5lLWdyaWQpXG5cdFx0Y2FzZSA2NDQ0OlxuXHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIGNoYXJhdCh2YWx1ZSwgMTQpID09PSA0NSA/IDE4IDogMTEpKSB7XG5cdFx0XHRcdC8vIChpbmxpbmUtKT9mbGUoeClcblx0XHRcdFx0Y2FzZSAxMjA6XG5cdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KShbXjtcXHMhXSspKDt8KFxccyspPyEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyAoaW5saW5lLSk/Z3JpKGQpXG5cdFx0XHRcdGNhc2UgMTAwOlxuXHRcdFx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIE1TKSArIHZhbHVlXG5cdFx0XHR9XG5cdFx0XHRicmVha1xuXHRcdC8vIHNjcm9sbC1tYXJnaW4sIHNjcm9sbC1tYXJnaW4tKHRvcHxyaWdodHxib3R0b218bGVmdClcblx0XHRjYXNlIDU3MTk6IGNhc2UgMjY0NzogY2FzZSAyMTM1OiBjYXNlIDM5Mjc6IGNhc2UgMjM5MTpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAnc2Nyb2xsLScsICdzY3JvbGwtc25hcC0nKSArIHZhbHVlXG5cdH1cblxuXHRyZXR1cm4gdmFsdWVcbn1cbiIsICJpbXBvcnQge0lNUE9SVCwgTEFZRVIsIENPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OLCBLRVlGUkFNRVN9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7c3RybGVuLCBzaXplb2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZSAoY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHZhciBvdXRwdXQgPSAnJ1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNoaWxkcmVuKVxuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0b3V0cHV0ICs9IGNhbGxiYWNrKGNoaWxkcmVuW2ldLCBpLCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0cmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5IChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBMQVlFUjogaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSBicmVha1xuXHRcdGNhc2UgSU1QT1JUOiBjYXNlIERFQ0xBUkFUSU9OOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnJldHVybiB8fCBlbGVtZW50LnZhbHVlXG5cdFx0Y2FzZSBDT01NRU5UOiByZXR1cm4gJydcblx0XHRjYXNlIEtFWUZSQU1FUzogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykgKyAnfSdcblx0XHRjYXNlIFJVTEVTRVQ6IGVsZW1lbnQudmFsdWUgPSBlbGVtZW50LnByb3BzLmpvaW4oJywnKVxuXHR9XG5cblx0cmV0dXJuIHN0cmxlbihjaGlsZHJlbiA9IHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykpID8gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgY2hpbGRyZW4gKyAnfScgOiAnJ1xufVxuIiwgImltcG9ydCB7TVMsIE1PWiwgV0VCS0lULCBSVUxFU0VULCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge21hdGNoLCBjaGFyYXQsIHN1YnN0ciwgc3RybGVuLCBzaXplb2YsIHJlcGxhY2UsIGNvbWJpbmV9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7Y29weSwgdG9rZW5pemV9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuaW1wb3J0IHtzZXJpYWxpemV9IGZyb20gJy4vU2VyaWFsaXplci5qcydcbmltcG9ydCB7cHJlZml4fSBmcm9tICcuL1ByZWZpeGVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb25bXX0gY29sbGVjdGlvblxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWRkbGV3YXJlIChjb2xsZWN0aW9uKSB7XG5cdHZhciBsZW5ndGggPSBzaXplb2YoY29sbGVjdGlvbilcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0XHR2YXIgb3V0cHV0ID0gJydcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRvdXRwdXQgKz0gY29sbGVjdGlvbltpXShlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdFx0cmV0dXJuIG91dHB1dFxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNoZWV0IChjYWxsYmFjaykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRpZiAoIWVsZW1lbnQucm9vdClcblx0XHRcdGlmIChlbGVtZW50ID0gZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRcdGNhbGxiYWNrKGVsZW1lbnQpXG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVyIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKVxuXHRcdGlmICghZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0XHRjYXNlIERFQ0xBUkFUSU9OOiBlbGVtZW50LnJldHVybiA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCwgY2hpbGRyZW4pXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGNhc2UgS0VZRlJBTUVTOlxuXHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3ZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdFx0XHRpZiAoZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyA6cmVhZC0ob25seXx3cml0ZSlcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6cmVhZC1vbmx5JzogY2FzZSAnOnJlYWQtd3JpdGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldfSldLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0XHQvLyA6cGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6OnBsYWNlaG9sZGVyJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldfSlcblx0XHRcdFx0XHRcdFx0XHRcdF0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2UgKGVsZW1lbnQpIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRlbGVtZW50LnByb3BzID0gZWxlbWVudC5wcm9wcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBjb21iaW5lKHRva2VuaXplKHZhbHVlKSwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgMCkpIHtcblx0XHRcdFx0XHRcdC8vIFxcZlxuXHRcdFx0XHRcdFx0Y2FzZSAxMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YnN0cih2YWx1ZSwgMSwgc3RybGVuKHZhbHVlKSlcblx0XHRcdFx0XHRcdC8vIFxcMCAoICsgPiB+XG5cdFx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgNDA6IGNhc2UgNDM6IGNhc2UgNjI6IGNhc2UgMTI2OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdC8vIDpcblx0XHRcdFx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdFx0XHRcdGlmIChjaGlsZHJlblsrK2luZGV4XSA9PT0gJ2dsb2JhbCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW5baW5kZXhdID0gJycsIGNoaWxkcmVuWysraW5kZXhdID0gJ1xcZicgKyBzdWJzdHIoY2hpbGRyZW5baW5kZXhdLCBpbmRleCA9IDEsIC0xKVxuXHRcdFx0XHRcdFx0Ly8gXFxzXG5cdFx0XHRcdFx0XHRjYXNlIDMyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAwOiBlbGVtZW50ID0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaXplb2YoY2hpbGRyZW4pID4gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRjYXNlIGluZGV4ID0gc2l6ZW9mKGNoaWxkcmVuKSAtIDE6IGNhc2UgMjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMiA/IHZhbHVlICsgZWxlbWVudCArIGVsZW1lbnQgOiB2YWx1ZSArIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXHR9XG59XG4iLCAiZXhwb3J0ICogZnJvbSAnLi9zcmMvRW51bS5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1V0aWxpdHkuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9QYXJzZXIuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9QcmVmaXhlci5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1Rva2VuaXplci5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1NlcmlhbGl6ZXIuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9NaWRkbGV3YXJlLmpzJ1xuIiwgInZhciB3ZWFrTWVtb2l6ZSA9IGZ1bmN0aW9uIHdlYWtNZW1vaXplKGZ1bmMpIHtcbiAgLy8gJEZsb3dGaXhNZSBmbG93IGRvZXNuJ3QgaW5jbHVkZSBhbGwgbm9uLXByaW1pdGl2ZSB0eXBlcyBhcyBhbGxvd2VkIGZvciB3ZWFrbWFwc1xuICB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChjYWNoZS5oYXMoYXJnKSkge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGNhY2hlLmdldChhcmcpO1xuICAgIH1cblxuICAgIHZhciByZXQgPSBmdW5jKGFyZyk7XG4gICAgY2FjaGUuc2V0KGFyZywgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xufTtcblxuZXhwb3J0IHsgd2Vha01lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwgImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBSVUxFU0VULCBjb21iaW5lLCBtYXRjaCwgc2VyaWFsaXplLCBjb3B5LCByZXBsYWNlLCBXRUJLSVQsIE1PWiwgTVMsIEtFWUZSQU1FUywgREVDTEFSQVRJT04sIGhhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCBzdHJpbmdpZnksIENPTU1FTlQsIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nID0gZnVuY3Rpb24gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKGJlZ2luLCBwb2ludHMsIGluZGV4KSB7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcHJldmlvdXMgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gcGVlaygpOyAvLyAmXFxmXG5cbiAgICBpZiAocHJldmlvdXMgPT09IDM4ICYmIGNoYXJhY3RlciA9PT0gMTIpIHtcbiAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgIH1cblxuICAgIGlmICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2UoYmVnaW4sIHBvc2l0aW9uKTtcbn07XG5cbnZhciB0b1J1bGVzID0gZnVuY3Rpb24gdG9SdWxlcyhwYXJzZWQsIHBvaW50cykge1xuICAvLyBwcmV0ZW5kIHdlJ3ZlIHN0YXJ0ZWQgd2l0aCBhIGNvbW1hXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgY2hhcmFjdGVyID0gNDQ7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAmXFxmXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDM4ICYmIHBlZWsoKSA9PT0gMTIpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIHdlIGRvbid0IGFjY291bnQgZm9yIGxpdGVyYWwgc2VxdWVuY2VzIGhlcmUgLSBsaWtlIGZvciBleGFtcGxlIHF1b3RlZCBzdHJpbmdzXG4gICAgICAgICAgLy8gc3R5bGlzIGluc2VydHMgXFxmIGFmdGVyICYgdG8ga25vdyB3aGVuICYgd2hlcmUgaXQgc2hvdWxkIHJlcGxhY2UgdGhpcyBzZXF1ZW5jZSB3aXRoIHRoZSBjb250ZXh0IHNlbGVjdG9yXG4gICAgICAgICAgLy8gYW5kIHdoZW4gaXQgc2hvdWxkIGp1c3QgY29uY2F0ZW5hdGUgdGhlIG91dGVyIGFuZCBpbm5lciBzZWxlY3RvcnNcbiAgICAgICAgICAvLyBpdCdzIHZlcnkgdW5saWtlbHkgZm9yIHRoaXMgc2VxdWVuY2UgdG8gYWN0dWFsbHkgYXBwZWFyIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIHNvIHdlIGp1c3QgbGV2ZXJhZ2UgdGhpcyBmYWN0IGhlcmVcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKHBvc2l0aW9uIC0gMSwgcG9pbnRzLCBpbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZGVsaW1pdChjaGFyYWN0ZXIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICAvLyBjb21tYVxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSA0NCkge1xuICAgICAgICAgIC8vIGNvbG9uXG4gICAgICAgICAgcGFyc2VkWysraW5kZXhdID0gcGVlaygpID09PSA1OCA/ICcmXFxmJyA6ICcnO1xuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSBwYXJzZWRbaW5kZXhdLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGZyb20oY2hhcmFjdGVyKTtcbiAgICB9XG4gIH0gd2hpbGUgKGNoYXJhY3RlciA9IG5leHQoKSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbnZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpIHtcbiAgcmV0dXJuIGRlYWxsb2ModG9SdWxlcyhhbGxvYyh2YWx1ZSksIHBvaW50cykpO1xufTsgLy8gV2Vha1NldCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBidXQgb25seSBXZWFrTWFwIGlzIHN1cHBvcnRlZCBpbiBJRTExXG5cblxudmFyIGZpeGVkRWxlbWVudHMgPSAvKiAjX19QVVJFX18gKi9uZXcgV2Vha01hcCgpO1xudmFyIGNvbXBhdCA9IGZ1bmN0aW9uIGNvbXBhdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCAhZWxlbWVudC5wYXJlbnQgfHwgLy8gcG9zaXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgY29udGFpbnMgcHNldWRvXG4gIC8vIG5lZ2F0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGhhcyBiZWVuIGFscmVhZHkgcHJlZml4ZWRcbiAgZWxlbWVudC5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZSxcbiAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICB2YXIgaXNJbXBsaWNpdFJ1bGUgPSBlbGVtZW50LmNvbHVtbiA9PT0gcGFyZW50LmNvbHVtbiAmJiBlbGVtZW50LmxpbmUgPT09IHBhcmVudC5saW5lO1xuXG4gIHdoaWxlIChwYXJlbnQudHlwZSAhPT0gJ3J1bGUnKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICB9IC8vIHNob3J0LWNpcmN1aXQgZm9yIHRoZSBzaW1wbGVzdCBjYXNlXG5cblxuICBpZiAoZWxlbWVudC5wcm9wcy5sZW5ndGggPT09IDEgJiYgdmFsdWUuY2hhckNvZGVBdCgwKSAhPT0gNThcbiAgLyogY29sb24gKi9cbiAgJiYgIWZpeGVkRWxlbWVudHMuZ2V0KHBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBpbXBsaWNpdGx5IGluc2VydGVkIHJ1bGUgKHRoZSBvbmUgZWFnZXJseSBpbnNlcnRlZCBhdCB0aGUgZWFjaCBuZXcgbmVzdGVkIGxldmVsKVxuICAvLyB0aGVuIHRoZSBwcm9wcyBoYXMgYWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkIGJlZm9yZWhhbmQgYXMgdGhleSB0aGF0IGFycmF5IGlzIHNoYXJlZCBiZXR3ZWVuIGl0IGFuZCBpdHMgXCJydWxlIHBhcmVudFwiXG5cblxuICBpZiAoaXNJbXBsaWNpdFJ1bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaXhlZEVsZW1lbnRzLnNldChlbGVtZW50LCB0cnVlKTtcbiAgdmFyIHBvaW50cyA9IFtdO1xuICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKTtcbiAgdmFyIHBhcmVudFJ1bGVzID0gcGFyZW50LnByb3BzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJlbnRSdWxlcy5sZW5ndGg7IGorKywgaysrKSB7XG4gICAgICBlbGVtZW50LnByb3BzW2tdID0gcG9pbnRzW2ldID8gcnVsZXNbaV0ucmVwbGFjZSgvJlxcZi9nLCBwYXJlbnRSdWxlc1tqXSkgOiBwYXJlbnRSdWxlc1tqXSArIFwiIFwiICsgcnVsZXNbaV07XG4gICAgfVxuICB9XG59O1xudmFyIHJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnZGVjbCcpIHtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCAvLyBjaGFyY29kZSBmb3IgbFxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDEwOCAmJiAvLyBjaGFyY29kZSBmb3IgYlxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMikgPT09IDk4KSB7XG4gICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cbn07XG52YXIgaWdub3JlRmxhZyA9ICdlbW90aW9uLWRpc2FibGUtc2VydmVyLXJlbmRlcmluZy11bnNhZmUtc2VsZWN0b3Itd2FybmluZy1wbGVhc2UtZG8tbm90LXVzZS10aGlzLXRoZS13YXJuaW5nLWV4aXN0cy1mb3ItYS1yZWFzb24nO1xuXG52YXIgaXNJZ25vcmluZ0NvbW1lbnQgPSBmdW5jdGlvbiBpc0lnbm9yaW5nQ29tbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdjb21tJyAmJiBlbGVtZW50LmNoaWxkcmVuLmluZGV4T2YoaWdub3JlRmxhZykgPiAtMTtcbn07XG5cbnZhciBjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSA9IGZ1bmN0aW9uIGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtKGNhY2hlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8IGNhY2hlLmNvbXBhdCkgcmV0dXJuO1xuICAgIHZhciB1bnNhZmVQc2V1ZG9DbGFzc2VzID0gZWxlbWVudC52YWx1ZS5tYXRjaCgvKDpmaXJzdHw6bnRofDpudGgtbGFzdCktY2hpbGQvZyk7XG5cbiAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3Nlcykge1xuICAgICAgdmFyIGlzTmVzdGVkID0gISFlbGVtZW50LnBhcmVudDsgLy8gaW4gbmVzdGVkIHJ1bGVzIGNvbW1lbnRzIGJlY29tZSBjaGlsZHJlbiBvZiB0aGUgXCJhdXRvLWluc2VydGVkXCIgcnVsZSBhbmQgdGhhdCdzIGFsd2F5cyB0aGUgYGVsZW1lbnQucGFyZW50YFxuICAgICAgLy9cbiAgICAgIC8vIGNvbnNpZGVyaW5nIHRoaXMgaW5wdXQ6XG4gICAgICAvLyAuYSB7XG4gICAgICAvLyAgIC5iIC8qIGNvbW0gKi8ge31cbiAgICAgIC8vICAgY29sb3I6IGhvdHBpbms7XG4gICAgICAvLyB9XG4gICAgICAvLyB3ZSBnZXQgb3V0cHV0IGNvcnJlc3BvbmRpbmcgdG8gdGhpczpcbiAgICAgIC8vIC5hIHtcbiAgICAgIC8vICAgJiB7XG4gICAgICAvLyAgICAgLyogY29tbSAqL1xuICAgICAgLy8gICAgIGNvbG9yOiBob3RwaW5rO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIC5iIHt9XG4gICAgICAvLyB9XG5cbiAgICAgIHZhciBjb21tZW50Q29udGFpbmVyID0gaXNOZXN0ZWQgPyBlbGVtZW50LnBhcmVudC5jaGlsZHJlbiA6IC8vIGdsb2JhbCBydWxlIGF0IHRoZSByb290IGxldmVsXG4gICAgICBjaGlsZHJlbjtcblxuICAgICAgZm9yICh2YXIgaSA9IGNvbW1lbnRDb250YWluZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBjb21tZW50Q29udGFpbmVyW2ldO1xuXG4gICAgICAgIGlmIChub2RlLmxpbmUgPCBlbGVtZW50LmxpbmUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBpdCBpcyBxdWl0ZSB3ZWlyZCBidXQgY29tbWVudHMgYXJlICp1c3VhbGx5KiBwdXQgYXQgYGNvbHVtbjogZWxlbWVudC5jb2x1bW4gLSAxYFxuICAgICAgICAvLyBzbyB3ZSBzZWVrICpmcm9tIHRoZSBlbmQqIGZvciB0aGUgbm9kZSB0aGF0IGlzIGVhcmxpZXIgdGhhbiB0aGUgcnVsZSdzIGBlbGVtZW50YCBhbmQgY2hlY2sgdGhhdFxuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBtYXRjaCBpbnB1dHMgbGlrZSB0aGlzOlxuICAgICAgICAvLyAuYSB7XG4gICAgICAgIC8vICAgLyogY29tbSAqL1xuICAgICAgICAvLyAgIC5iIHt9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYnV0IHRoYXQgaXMgZmluZVxuICAgICAgICAvL1xuICAgICAgICAvLyBpdCB3b3VsZCBiZSB0aGUgZWFzaWVzdCB0byBjaGFuZ2UgdGhlIHBsYWNlbWVudCBvZiB0aGUgY29tbWVudCB0byBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJ1bGU6XG4gICAgICAgIC8vIC5hIHtcbiAgICAgICAgLy8gICAuYiB7IC8qIGNvbW0gKi8gfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHdpdGggc3VjaCBpbnB1dHMgd2Ugd291bGRuJ3QgaGF2ZSB0byBzZWFyY2ggZm9yIHRoZSBjb21tZW50IGF0IGFsbFxuICAgICAgICAvLyBUT0RPOiBjb25zaWRlciBjaGFuZ2luZyB0aGlzIGNvbW1lbnQgcGxhY2VtZW50IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cblxuXG4gICAgICAgIGlmIChub2RlLmNvbHVtbiA8IGVsZW1lbnQuY29sdW1uKSB7XG4gICAgICAgICAgaWYgKGlzSWdub3JpbmdDb21tZW50KG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdW5zYWZlUHNldWRvQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uICh1bnNhZmVQc2V1ZG9DbGFzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIHBzZXVkbyBjbGFzcyBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcyArIFwiXFxcIiBpcyBwb3RlbnRpYWxseSB1bnNhZmUgd2hlbiBkb2luZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIFRyeSBjaGFuZ2luZyBpdCB0byBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcy5zcGxpdCgnLWNoaWxkJylbMF0gKyBcIi1vZi10eXBlXFxcIi5cIik7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgaXNJbXBvcnRSdWxlID0gZnVuY3Rpb24gaXNJbXBvcnRSdWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZS5jaGFyQ29kZUF0KDEpID09PSAxMDUgJiYgZWxlbWVudC50eXBlLmNoYXJDb2RlQXQoMCkgPT09IDY0O1xufTtcblxudmFyIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyA9IGZ1bmN0aW9uIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pIHtcbiAgZm9yICh2YXIgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoIWlzSW1wb3J0UnVsZShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07IC8vIHVzZSB0aGlzIHRvIHJlbW92ZSBpbmNvcnJlY3QgZWxlbWVudHMgZnJvbSBmdXJ0aGVyIHByb2Nlc3Npbmdcbi8vIHNvIHRoZXkgZG9uJ3QgZ2V0IGhhbmRlZCB0byB0aGUgYHNoZWV0YCAob3IgYW55dGhpbmcgZWxzZSlcbi8vIGFzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhZGRpdGlvbmFsIGxvZ3Mgd2hpY2ggaW4gdHVybiBjb3VsZCBiZSBvdmVyaGVsbWluZyB0byB0aGUgdXNlclxuXG5cbnZhciBudWxsaWZ5RWxlbWVudCA9IGZ1bmN0aW9uIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpIHtcbiAgZWxlbWVudC50eXBlID0gJyc7XG4gIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICBlbGVtZW50LmNoaWxkcmVuID0gJyc7XG4gIGVsZW1lbnQucHJvcHMgPSAnJztcbn07XG5cbnZhciBpbmNvcnJlY3RJbXBvcnRBbGFybSA9IGZ1bmN0aW9uIGluY29ycmVjdEltcG9ydEFsYXJtKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbikge1xuICBpZiAoIWlzSW1wb3J0UnVsZShlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlbGVtZW50LnBhcmVudCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJgQGltcG9ydGAgcnVsZXMgY2FuJ3QgYmUgbmVzdGVkIGluc2lkZSBvdGhlciBydWxlcy4gUGxlYXNlIG1vdmUgaXQgdG8gdGhlIHRvcCBsZXZlbCBhbmQgcHV0IGl0IGJlZm9yZSByZWd1bGFyIHJ1bGVzLiBLZWVwIGluIG1pbmQgdGhhdCB0aGV5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGdsb2JhbCBzdHlsZXMuXCIpO1xuICAgIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpO1xuICB9IGVsc2UgaWYgKGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pKSB7XG4gICAgY29uc29sZS5lcnJvcihcImBAaW1wb3J0YCBydWxlcyBjYW4ndCBiZSBhZnRlciBvdGhlciBydWxlcy4gUGxlYXNlIHB1dCB5b3VyIGBAaW1wb3J0YCBydWxlcyBiZWZvcmUgeW91ciBvdGhlciBydWxlcy5cIik7XG4gICAgbnVsbGlmeUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoICovXG5cbmZ1bmN0aW9uIHByZWZpeCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuICAgIC8vIGNvbG9yLWFkanVzdFxuICAgIGNhc2UgNTEwMzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cbiAgICBjYXNlIDU3Mzc6XG4gICAgY2FzZSA0MjAxOlxuICAgIGNhc2UgMzE3NzpcbiAgICBjYXNlIDM0MzM6XG4gICAgY2FzZSAxNjQxOlxuICAgIGNhc2UgNDQ1NzpcbiAgICBjYXNlIDI5MjE6IC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblxuICAgIGNhc2UgNTU3MjpcbiAgICBjYXNlIDYzNTY6XG4gICAgY2FzZSA1ODQ0OlxuICAgIGNhc2UgMzE5MTpcbiAgICBjYXNlIDY2NDU6XG4gICAgY2FzZSAzMDA1OiAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OiAvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXG4gICAgY2FzZSA0MjE1OlxuICAgIGNhc2UgNjM4OTpcbiAgICBjYXNlIDUxMDk6XG4gICAgY2FzZSA1MzY1OlxuICAgIGNhc2UgNTYyMTpcbiAgICBjYXNlIDM4Mjk6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cbiAgICBjYXNlIDUzNDk6XG4gICAgY2FzZSA0MjQ2OlxuICAgIGNhc2UgNDgxMDpcbiAgICBjYXNlIDY5Njg6XG4gICAgY2FzZSAyNzU2OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gZmxleCwgZmxleC1kaXJlY3Rpb25cblxuICAgIGNhc2UgNjgyODpcbiAgICBjYXNlIDQyNjg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gb3JkZXJcblxuICAgIGNhc2UgNjE2NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYWxpZ24taXRlbXNcblxuICAgIGNhc2UgNTE4NzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1zZWxmXG5cbiAgICBjYXNlIDU0NDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWNvbnRlbnRcblxuICAgIGNhc2UgNDY3NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gZmxleC1zaHJpbmtcblxuICAgIGNhc2UgNTU0ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1iYXNpc1xuXG4gICAgY2FzZSA1MjkyOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtZ3Jvd1xuXG4gICAgY2FzZSA2MDYwOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gdHJhbnNpdGlvblxuXG4gICAgY2FzZSA0NTU0OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZTtcbiAgICAvLyBjdXJzb3JcblxuICAgIGNhc2UgNjE4NzpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlO1xuICAgIC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2VcblxuICAgIGNhc2UgNTQ5NTpcbiAgICBjYXNlIDM5NTk6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpO1xuICAgIC8vIGp1c3RpZnktY29udGVudFxuXG4gICAgY2FzZSA0OTY4OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cbiAgICBjYXNlIDQwOTU6XG4gICAgY2FzZSAzNTgzOlxuICAgIGNhc2UgNDA2ODpcbiAgICBjYXNlIDI1MzI6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZTtcbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXG4gICAgY2FzZSA4MTE2OlxuICAgIGNhc2UgNzA1OTpcbiAgICBjYXNlIDU3NTM6XG4gICAgY2FzZSA1NTM1OlxuICAgIGNhc2UgNTQ0NTpcbiAgICBjYXNlIDU3MDE6XG4gICAgY2FzZSA0OTMzOlxuICAgIGNhc2UgNDY3NzpcbiAgICBjYXNlIDU1MzM6XG4gICAgY2FzZSA1Nzg5OlxuICAgIGNhc2UgNTAyMTpcbiAgICBjYXNlIDQ3NjU6XG4gICAgICAvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG4gICAgICBpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KSBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcbiAgICAgICAgLy8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAvLyAtXG4gICAgICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KSBicmVhaztcbiAgICAgICAgLy8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKHMpdHJldGNoXG5cbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gcG9zaXRpb246IHN0aWNreVxuXG4gICAgY2FzZSA0OTQ5OlxuICAgICAgLy8gKHMpdGlja3k/XG4gICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSAhPT0gMTE1KSBicmVhaztcbiAgICAvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleClcblxuICAgIGNhc2UgNjQ0NDpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBzdHJsZW4odmFsdWUpIC0gMyAtICh+aW5kZXhvZih2YWx1ZSwgJyFpbXBvcnRhbnQnKSAmJiAxMCkpKSB7XG4gICAgICAgIC8vIHN0aWMoayl5XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKGlubGluZS0pP2ZsKGUpeFxuXG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147IV0rKSg7fCEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgLy8gd3JpdGluZy1tb2RlXG5cbiAgICBjYXNlIDU5MzY6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG4gICAgICAgIC8vIHZlcnRpY2FsLWwocilcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWU7XG4gICAgICAgIC8vIHZlcnRpY2FsLXIobClcblxuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCgtKXRiXG5cbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgcHJlZml4ZXIgPSBmdW5jdGlvbiBwcmVmaXhlcihlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnRbXCJyZXR1cm5cIl0pIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBERUNMQVJBVElPTjpcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEtFWUZSQU1FUzpcbiAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICB2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVClcbiAgICAgIH0pXSwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSBSVUxFU0VUOlxuICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoKSByZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcbiAgICAgICAgICAvLyA6cmVhZC0ob25seXx3cml0ZSlcbiAgICAgICAgICBjYXNlICc6cmVhZC1vbmx5JzpcbiAgICAgICAgICBjYXNlICc6cmVhZC13cml0ZSc6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAvLyA6cGxhY2Vob2xkZXJcblxuICAgICAgICAgIGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSk7XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0U3R5bGlzUGx1Z2lucyA9IFtwcmVmaXhlcl07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKG9wdGlvbnMpIHtcbiAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFrZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgaGF2ZSB0byBjb25maWd1cmUgYGtleWAgZm9yIHlvdXIgY2FjaGUuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB1bmlxdWUgKGFuZCBub3QgZXF1YWwgdG8gJ2NzcycpIGFzIGl0J3MgdXNlZCBmb3IgbGlua2luZyBzdHlsZXMgdG8geW91ciBjYWNoZS5cXG5cIiArIFwiSWYgbXVsdGlwbGUgY2FjaGVzIHNoYXJlIHRoZSBzYW1lIGtleSB0aGV5IG1pZ2h0IFxcXCJmaWdodFxcXCIgZm9yIGVhY2ggb3RoZXIncyBzdHlsZSBlbGVtZW50cy5cIik7XG4gIH1cblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBpZiAoL1teYS16LV0vLnRlc3Qoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1vdGlvbiBrZXkgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXIgY2FzZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyBhbmQgLSBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwYXNzZWRcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb25cIikuc3BsaXQoJyAnKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBvbW5pcHJlc2VudFBsdWdpbnMucHVzaChjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSh7XG4gICAgICBnZXQgY29tcGF0KCkge1xuICAgICAgICByZXR1cm4gY2FjaGUuY29tcGF0O1xuICAgICAgfVxuXG4gICAgfSksIGluY29ycmVjdEltcG9ydEFsYXJtKTtcbiAgfVxuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgaWYgKCFlbGVtZW50LnJvb3QpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KGVsZW1lbnRbXCJyZXR1cm5cIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudmFsdWUgJiYgZWxlbWVudC50eXBlICE9PSBDT01NRU5UKSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGVtcHR5IHJ1bGUgaW4gbm9uLXByb2R1Y3Rpb24gZW52aXJvbm1lbnRzXG4gICAgICAgICAgLy8gc28gQGVtb3Rpb24vamVzdCBjYW4gZ3JhYiBga2V5YCBmcm9tIHRoZSAoSlMpRE9NIGZvciBjYWNoZXMgd2l0aG91dCBhbnkgcnVsZXMgaW5zZXJ0ZWQgeWV0XG4gICAgICAgICAgY3VycmVudFNoZWV0Lmluc2VydChlbGVtZW50LnZhbHVlICsgXCJ7fVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gOiBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN1cnJlbnRTaGVldCA9IHtcbiAgICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnQocnVsZSArIHNlcmlhbGl6ZWQubWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCBob2lzdE5vblJlYWN0U3RhdGljcyQxIGZyb20gJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcblxuLy8gdGhpcyBmaWxlIGlzb2xhdGVzIHRoaXMgcGFja2FnZSB0aGF0IGlzIG5vdCB0cmVlLXNoYWtlYWJsZVxuLy8gYW5kIGlmIHRoaXMgbW9kdWxlIGRvZXNuJ3QgYWN0dWFsbHkgY29udGFpbiBhbnkgbG9naWMgb2YgaXRzIG93blxuLy8gdGhlbiBSb2xsdXAganVzdCB1c2UgJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJyBkaXJlY3RseSBpbiBvdGhlciBjaHVua3NcblxudmFyIGhvaXN0Tm9uUmVhY3RTdGF0aWNzID0gKGZ1bmN0aW9uICh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCkge1xuICByZXR1cm4gaG9pc3ROb25SZWFjdFN0YXRpY3MkMSh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCk7XG59KTtcblxuZXhwb3J0IHsgaG9pc3ROb25SZWFjdFN0YXRpY3MgYXMgZGVmYXVsdCB9O1xuIiwgInZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gKyBcIjtcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhd0NsYXNzTmFtZSArPSBjbGFzc05hbWUgKyBcIiBcIjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmF3Q2xhc3NOYW1lO1xufVxudmFyIHJlZ2lzdGVyU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgKSAmJiBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICB9XG59O1xudmFyIGluc2VydFN0eWxlcyA9IGZ1bmN0aW9uIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmIChjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgY3VycmVudCA9IHNlcmlhbGl6ZWQ7XG5cbiAgICBkbyB7XG4gICAgICBjYWNoZS5pbnNlcnQoc2VyaWFsaXplZCA9PT0gY3VycmVudCA/IFwiLlwiICsgY2xhc3NOYW1lIDogJycsIGN1cnJlbnQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcblxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICB9IHdoaWxlIChjdXJyZW50ICE9PSB1bmRlZmluZWQpO1xuICB9XG59O1xuXG5leHBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzIH07XG4iLCAiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FhcHBsZWJ5L3NtaGFzaGVyL2Jsb2IvNjFhMDUzMGYyODI3N2YyZTg1MGJmYzM5NjAwY2U2MWQwMmI1MThkZS9zcmMvTXVybXVySGFzaDIuY3BwI0wzNy1MODZcbmZ1bmN0aW9uIG11cm11cjIoc3RyKSB7XG4gIC8vICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3RhbnRzIGdlbmVyYXRlZCBvZmZsaW5lLlxuICAvLyBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywgdGhleSBqdXN0IGhhcHBlbiB0byB3b3JrIHdlbGwuXG4gIC8vIGNvbnN0IG0gPSAweDViZDFlOTk1O1xuICAvLyBjb25zdCByID0gMjQ7XG4gIC8vIEluaXRpYWxpemUgdGhlIGhhc2hcbiAgdmFyIGggPSAwOyAvLyBNaXggNCBieXRlcyBhdCBhIHRpbWUgaW50byB0aGUgaGFzaFxuXG4gIHZhciBrLFxuICAgICAgaSA9IDAsXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGZvciAoOyBsZW4gPj0gNDsgKytpLCBsZW4gLT0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgICBrIF49XG4gICAgLyogayA+Pj4gcjogKi9cbiAgICBrID4+PiAyNDtcbiAgICBoID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KSBeXG4gICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gSGFuZGxlIHRoZSBsYXN0IGZldyBieXRlcyBvZiB0aGUgaW5wdXQgYXJyYXlcblxuXG4gIHN3aXRjaCAobGVuKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID1cbiAgICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gRG8gYSBmZXcgZmluYWwgbWl4ZXMgb2YgdGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZld1xuICAvLyBieXRlcyBhcmUgd2VsbC1pbmNvcnBvcmF0ZWQuXG5cblxuICBoIF49IGggPj4+IDEzO1xuICBoID1cbiAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICByZXR1cm4gKChoIF4gaCA+Pj4gMTUpID4+PiAwKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCB7IG11cm11cjIgYXMgZGVmYXVsdCB9O1xuIiwgInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBhc3BlY3RSYXRpbzogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SID0gXCJZb3UgaGF2ZSBpbGxlZ2FsIGVzY2FwZSBzZXF1ZW5jZSBpbiB5b3VyIHRlbXBsYXRlIGxpdGVyYWwsIG1vc3QgbGlrZWx5IGluc2lkZSBjb250ZW50J3MgcHJvcGVydHkgdmFsdWUuXFxuQmVjYXVzZSB5b3Ugd3JpdGUgeW91ciBDU1MgaW5zaWRlIGEgSmF2YVNjcmlwdCBzdHJpbmcgeW91IGFjdHVhbGx5IGhhdmUgdG8gZG8gZG91YmxlIGVzY2FwaW5nLCBzbyBmb3IgZXhhbXBsZSBcXFwiY29udGVudDogJ1xcXFwwMGQ3JztcXFwiIHNob3VsZCBiZWNvbWUgXFxcImNvbnRlbnQ6ICdcXFxcXFxcXDAwZDcnO1xcXCIuXFxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxcbmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1RlbXBsYXRlX2xpdGVyYWxzI0VTMjAxOF9yZXZpc2lvbl9vZl9pbGxlZ2FsX2VzY2FwZV9zZXF1ZW5jZXNcIjtcbnZhciBVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUiA9IFwiWW91IGhhdmUgcGFzc2VkIGluIGZhbHN5IHZhbHVlIGFzIHN0eWxlIG9iamVjdCdzIGtleSAoY2FuIGhhcHBlbiB3aGVuIGluIGV4YW1wbGUgeW91IHBhc3MgdW5leHBvcnRlZCBjb21wb25lbnQgYXMgY29tcHV0ZWQga2V5KS5cIjtcbnZhciBoeXBoZW5hdGVSZWdleCA9IC9bQS1aXXxebXMvZztcbnZhciBhbmltYXRpb25SZWdleCA9IC9fRU1PXyhbXl9dKz8pXyhbXl0qPylfRU1PXy9nO1xuXG52YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIGlzQ3VzdG9tUHJvcGVydHkocHJvcGVydHkpIHtcbiAgcmV0dXJuIHByb3BlcnR5LmNoYXJDb2RlQXQoMSkgPT09IDQ1O1xufTtcblxudmFyIGlzUHJvY2Vzc2FibGVWYWx1ZSA9IGZ1bmN0aW9uIGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbn07XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBpc0N1c3RvbVByb3BlcnR5KHN0eWxlTmFtZSkgPyBzdHlsZU5hbWUgOiBzdHlsZU5hbWUucmVwbGFjZShoeXBoZW5hdGVSZWdleCwgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG59KTtcblxudmFyIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHAxLFxuICAgICAgICAgICAgICBzdHlsZXM6IHAyLFxuICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGlmICh1bml0bGVzc1trZXldICE9PSAxICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgY29udGVudFZhbHVlUGF0dGVybiA9IC8odmFyfGF0dHJ8Y291bnRlcnM/fHVybHxlbGVtZW50fCgoKHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsKSl8Y29uaWMpLWdyYWRpZW50KVxcKHwobm8tKT8ob3BlbnxjbG9zZSktcXVvdGUvO1xuICB2YXIgY29udGVudFZhbHVlcyA9IFsnbm9ybWFsJywgJ25vbmUnLCAnaW5pdGlhbCcsICdpbmhlcml0JywgJ3Vuc2V0J107XG4gIHZhciBvbGRQcm9jZXNzU3R5bGVWYWx1ZSA9IHByb2Nlc3NTdHlsZVZhbHVlO1xuICB2YXIgbXNQYXR0ZXJuID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuICB2YXIgaHlwaGVuYXRlZENhY2hlID0ge307XG5cbiAgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCBjb250ZW50VmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSAmJiAhY29udGVudFZhbHVlUGF0dGVybi50ZXN0KHZhbHVlKSAmJiAodmFsdWUuY2hhckF0KDApICE9PSB2YWx1ZS5jaGFyQXQodmFsdWUubGVuZ3RoIC0gMSkgfHwgdmFsdWUuY2hhckF0KDApICE9PSAnXCInICYmIHZhbHVlLmNoYXJBdCgwKSAhPT0gXCInXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBzZWVtIHRvIGJlIHVzaW5nIGEgdmFsdWUgZm9yICdjb250ZW50JyB3aXRob3V0IHF1b3RlcywgdHJ5IHJlcGxhY2luZyBpdCB3aXRoIGBjb250ZW50OiAnXFxcIlwiICsgdmFsdWUgKyBcIlxcXCInYFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvY2Vzc2VkID0gb2xkUHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSk7XG5cbiAgICBpZiAocHJvY2Vzc2VkICE9PSAnJyAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIGtleS5pbmRleE9mKCctJykgIT09IC0xICYmIGh5cGhlbmF0ZWRDYWNoZVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGh5cGhlbmF0ZWRDYWNoZVtrZXldID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJVc2luZyBrZWJhYi1jYXNlIGZvciBjc3MgcHJvcGVydGllcyBpbiBvYmplY3RzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiBcIiArIGtleS5yZXBsYWNlKG1zUGF0dGVybiwgJ21zLScpLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKHN0ciwgX2NoYXIpIHtcbiAgICAgICAgcmV0dXJuIF9jaGFyLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9KSArIFwiP1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9O1xufVxuXG52YXIgbm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UgPSAnQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJyArICdAZW1vdGlvbi9iYWJlbC1wbHVnaW4sIHRoZSBzd2MgRW1vdGlvbiBwbHVnaW4sIG9yIGFub3RoZXIgRW1vdGlvbi1hd2FyZSAnICsgJ2NvbXBpbGVyIHRyYW5zZm9ybS4nO1xuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKSB7XG4gIGlmIChpbnRlcnBvbGF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaW50ZXJwb2xhdGlvbi5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLnRvU3RyaW5nKCkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnBvbGF0aW9uO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5hbmltID09PSAxKSB7XG4gICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgbmFtZTogaW50ZXJwb2xhdGlvbi5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBpbnRlcnBvbGF0aW9uLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVycG9sYXRpb24ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBpbnRlcnBvbGF0aW9uLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gaW50ZXJwb2xhdGlvbi5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGludGVycG9sYXRpb24ubWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0eWxlcyArPSBpbnRlcnBvbGF0aW9uLm1hcDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICBpZiAobWVyZ2VkUHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0N1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgY3Vyc29yID0gcHJldmlvdXNDdXJzb3I7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Z1bmN0aW9ucyB0aGF0IGFyZSBpbnRlcnBvbGF0ZWQgaW4gY3NzIGNhbGxzIHdpbGwgYmUgc3RyaW5naWZpZWQuXFxuJyArICdJZiB5b3Ugd2FudCB0byBoYXZlIGEgY3NzIGNhbGwgYmFzZWQgb24gcHJvcHMsIGNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNzcyBjYWxsIGxpa2UgdGhpc1xcbicgKyAnbGV0IGR5bmFtaWNTdHlsZSA9IChwcm9wcykgPT4gY3NzYGNvbG9yOiAke3Byb3BzLmNvbG9yfWBcXG4nICsgJ0l0IGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgd2l0aCBwcm9wcyBvciBpbnRlcnBvbGF0ZWQgaW4gYSBzdHlsZWQgY2FsbCBsaWtlIHRoaXNcXG4nICsgXCJsZXQgU29tZUNvbXBvbmVudCA9IHN0eWxlZCgnZGl2JylgJHtkeW5hbWljU3R5bGV9YFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gW107XG4gICAgICAgIHZhciByZXBsYWNlZCA9IGludGVycG9sYXRpb24ucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICB2YXIgZmFrZVZhck5hbWUgPSBcImFuaW1hdGlvblwiICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgICAgbWF0Y2hlZC5wdXNoKFwiY29uc3QgXCIgKyBmYWtlVmFyTmFtZSArIFwiID0ga2V5ZnJhbWVzYFwiICsgcDIucmVwbGFjZSgvXkBrZXlmcmFtZXMgYW5pbWF0aW9uLVxcdysvLCAnJykgKyBcImBcIik7XG4gICAgICAgICAgcmV0dXJuIFwiJHtcIiArIGZha2VWYXJOYW1lICsgXCJ9XCI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2BrZXlmcmFtZXNgIG91dHB1dCBnb3QgaW50ZXJwb2xhdGVkIGludG8gcGxhaW4gc3RyaW5nLCBwbGVhc2Ugd3JhcCBpdCB3aXRoIGBjc3NgLlxcblxcbicgKyAnSW5zdGVhZCBvZiBkb2luZyB0aGlzOlxcblxcbicgKyBbXS5jb25jYXQobWF0Y2hlZCwgW1wiYFwiICsgcmVwbGFjZWQgKyBcImBcIl0pLmpvaW4oJ1xcbicpICsgJ1xcblxcbllvdSBzaG91bGQgd3JhcCBpdCB3aXRoIGBjc3NgIGxpa2UgdGhpczpcXG5cXG4nICsgKFwiY3NzYFwiICsgcmVwbGFjZWQgKyBcImBcIikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIGlmIChyZWdpc3RlcmVkID09IG51bGwpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2ludGVycG9sYXRpb25dO1xuICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgPyBjYWNoZWQgOiBpbnRlcnBvbGF0aW9uO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmopIHtcbiAgdmFyIHN0cmluZyA9ICcnO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9ialtpXSkgKyBcIjtcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2tleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtfa2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIHJlZ2lzdGVyZWRbdmFsdWVdICsgXCJ9XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShfa2V5LCB2YWx1ZSkgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF9rZXkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ3N0cmluZycgJiYgKHJlZ2lzdGVyZWQgPT0gbnVsbCB8fCByZWdpc3RlcmVkW3ZhbHVlWzBdXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB2YWx1ZS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWVbX2ldKSkge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChfa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgaW50ZXJwb2xhdGVkICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIF9rZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFVOREVGSU5FRF9BU19PQkpFQ1RfS0VZX0VSUk9SKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgaW50ZXJwb2xhdGVkICsgXCJ9XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgbGFiZWxQYXR0ZXJuID0gL2xhYmVsOlxccyooW15cXHM7XFxue10rKVxccyooO3wkKS9nO1xudmFyIHNvdXJjZU1hcFBhdHRlcm47XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHNvdXJjZU1hcFBhdHRlcm4gPSAvXFwvXFwqI1xcc3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblxcL2pzb247XFxTK1xccytcXCpcXC8vZztcbn0gLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbnZhciBzZXJpYWxpemVTdHlsZXMgPSBmdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgfVxuXG4gICAgc3R5bGVzICs9IHN0cmluZ3NbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0pO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzICs9IHN0cmluZ3NbaV07XG4gICAgfVxuICB9XG5cbiAgdmFyIHNvdXJjZU1hcDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHN0eWxlcyA9IHN0eWxlcy5yZXBsYWNlKHNvdXJjZU1hcFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgc291cmNlTWFwID0gbWF0Y2g7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gIH0gLy8gdXNpbmcgYSBnbG9iYWwgcmVnZXggd2l0aCAuZXhlYyBpcyBzdGF0ZWZ1bCBzbyBsYXN0SW5kZXggaGFzIHRvIGJlIHJlc2V0IGVhY2ggdGltZVxuXG5cbiAgbGFiZWxQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHZhciBpZGVudGlmaWVyTmFtZSA9ICcnO1xuICB2YXIgbWF0Y2g7IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWI4MDljMmNmMjk0OTgwMGEwZjYxZmI1XG5cbiAgd2hpbGUgKChtYXRjaCA9IGxhYmVsUGF0dGVybi5leGVjKHN0eWxlcykpICE9PSBudWxsKSB7XG4gICAgaWRlbnRpZmllck5hbWUgKz0gJy0nICsgLy8gJEZsb3dGaXhNZSB3ZSBrbm93IGl0J3Mgbm90IG51bGxcbiAgICBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFNlcmlhbGl6ZWRTdHlsZXMgdHlwZSBkb2Vzbid0IGhhdmUgdG9TdHJpbmcgcHJvcGVydHkgKGFuZCB3ZSBkb24ndCB3YW50IHRvIGFkZCBpdClcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHN0eWxlczogc3R5bGVzLFxuICAgICAgbWFwOiBzb3VyY2VNYXAsXG4gICAgICBuZXh0OiBjdXJzb3IsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufTtcblxuZXhwb3J0IHsgc2VyaWFsaXplU3R5bGVzIH07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG52YXIgc3luY0ZhbGxiYWNrID0gZnVuY3Rpb24gc3luY0ZhbGxiYWNrKGNyZWF0ZSkge1xuICByZXR1cm4gY3JlYXRlKCk7XG59O1xuXG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gPyBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA6IGZhbHNlO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgc3luY0ZhbGxiYWNrO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBSZWFjdC51c2VMYXlvdXRFZmZlY3Q7XG5cbmV4cG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayB9O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IHdlYWtNZW1vaXplIGZyb20gJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MgZnJvbSAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnO1xudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgRW1vdGlvbkNhY2hlQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbkNhY2hlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2FjaGVDb250ZXh0Jztcbn1cblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG59O1xuXG52YXIgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG5pZiAoIWlzQnJvd3Nlcikge1xuICB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcblxuICAgICAgaWYgKGNhY2hlID09PSBudWxsKSB7XG4gICAgICAgIC8vIHllcywgd2UncmUgcG90ZW50aWFsbHkgY3JlYXRpbmcgdGhpcyBvbiBldmVyeSByZW5kZXJcbiAgICAgICAgLy8gaXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIgdGhvdWdoIHNpbmNlIGl0J3Mgb25seSBvbiB0aGUgc2VydmVyXG4gICAgICAgIC8vIHNvIHRoZXJlIHdpbGwgb25seSBldmVyeSBiZSBhIHNpbmdsZSByZW5kZXJcbiAgICAgICAgLy8gdGhhdCBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBiZWNhdXNlIG9mIHN1c3BlbnNlIGFuZCBldGMuIGJ1dCBmb3Igbm93LFxuICAgICAgICAvLyB0aGlzIHdvcmtzIGFuZCBpIGRvbid0IHdhbnQgdG8gb3B0aW1pc2UgZm9yIGEgZnV0dXJlIHRoaW5nIHRoYXQgd2UgYXJlbid0IHN1cmUgYWJvdXRcbiAgICAgICAgY2FjaGUgPSBjcmVhdGVDYWNoZSh7XG4gICAgICAgICAga2V5OiAnY3NzJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogY2FjaGVcbiAgICAgICAgfSwgZnVuYyhwcm9wcywgY2FjaGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cblxudmFyIFRoZW1lQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnRW1vdGlvblRoZW1lQ29udGV4dCc7XG59XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKG1lcmdlZFRoZW1lID09IG51bGwgfHwgdHlwZW9mIG1lcmdlZFRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG1lcmdlZFRoZW1lKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW1RoZW1lUHJvdmlkZXJdIFBsZWFzZSByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLiB0aGVtZT17KCkgPT4gKHt9KX0hJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKHRoZW1lID09IG51bGwgfHwgdHlwZW9mIHRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHRoZW1lKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tUaGVtZVByb3ZpZGVyXSBQbGVhc2UgbWFrZSB5b3VyIHRoZW1lIHByb3AgYSBwbGFpbiBvYmplY3QnKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgdGhlbWUpO1xufTtcblxudmFyIGNyZWF0ZUNhY2hlV2l0aFRoZW1lID0gLyogI19fUFVSRV9fICovd2Vha01lbW9pemUoZnVuY3Rpb24gKG91dGVyVGhlbWUpIHtcbiAgcmV0dXJuIHdlYWtNZW1vaXplKGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHJldHVybiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSk7XG4gIH0pO1xufSk7XG52YXIgVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9wcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICB0aGVtZSA9IGNyZWF0ZUNhY2hlV2l0aFRoZW1lKHRoZW1lKShwcm9wcy50aGVtZSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiB3aXRoVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07IC8vICRGbG93Rml4TWVcblxuXG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihyZW5kZXIpO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGdldExhc3RQYXJ0ID0gZnVuY3Rpb24gZ2V0TGFzdFBhcnQoZnVuY3Rpb25OYW1lKSB7XG4gIC8vIFRoZSBtYXRjaCBtYXkgYmUgc29tZXRoaW5nIGxpa2UgJ09iamVjdC5jcmVhdGVFbW90aW9uUHJvcHMnIG9yXG4gIC8vICdMb2FkZXIucHJvdG90eXBlLnJlbmRlcidcbiAgdmFyIHBhcnRzID0gZnVuY3Rpb25OYW1lLnNwbGl0KCcuJyk7XG4gIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbn07XG5cbnZhciBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUgPSBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUobGluZSkge1xuICAvLyBWOFxuICB2YXIgbWF0Y2ggPSAvXlxccythdFxccysoW0EtWmEtejAtOSQuXSspXFxzLy5leGVjKGxpbmUpO1xuICBpZiAobWF0Y2gpIHJldHVybiBnZXRMYXN0UGFydChtYXRjaFsxXSk7IC8vIFNhZmFyaSAvIEZpcmVmb3hcblxuICBtYXRjaCA9IC9eKFtBLVphLXowLTkkLl0rKUAvLmV4ZWMobGluZSk7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGdldExhc3RQYXJ0KG1hdGNoWzFdKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciBpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcyA9IC8qICNfX1BVUkVfXyAqL25ldyBTZXQoWydyZW5kZXJXaXRoSG9va3MnLCAncHJvY2Vzc0NoaWxkJywgJ2ZpbmlzaENsYXNzQ29tcG9uZW50JywgJ3JlbmRlclRvU3RyaW5nJ10pOyAvLyBUaGVzZSBpZGVudGlmaWVycyBjb21lIGZyb20gZXJyb3Igc3RhY2tzLCBzbyB0aGV5IGhhdmUgdG8gYmUgdmFsaWQgSlNcbi8vIGlkZW50aWZpZXJzLCB0aHVzIHdlIG9ubHkgbmVlZCB0byByZXBsYWNlIHdoYXQgaXMgYSB2YWxpZCBjaGFyYWN0ZXIgZm9yIEpTLFxuLy8gYnV0IG5vdCBmb3IgQ1NTLlxuXG52YXIgc2FuaXRpemVJZGVudGlmaWVyID0gZnVuY3Rpb24gc2FuaXRpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgcmV0dXJuIGlkZW50aWZpZXIucmVwbGFjZSgvXFwkL2csICctJyk7XG59O1xuXG52YXIgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIGdldExhYmVsRnJvbVN0YWNrVHJhY2Uoc3RhY2tUcmFjZSkge1xuICBpZiAoIXN0YWNrVHJhY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciBsaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lKGxpbmVzW2ldKTsgLy8gVGhlIGZpcnN0IGxpbmUgb2YgVjggc3RhY2sgdHJhY2VzIGlzIGp1c3QgXCJFcnJvclwiXG5cbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgY29udGludWU7IC8vIElmIHdlIHJlYWNoIG9uZSBvZiB0aGVzZSwgd2UgaGF2ZSBnb25lIHRvbyBmYXIgYW5kIHNob3VsZCBxdWl0XG5cbiAgICBpZiAoaW50ZXJuYWxSZWFjdEZ1bmN0aW9uTmFtZXMuaGFzKGZ1bmN0aW9uTmFtZSkpIGJyZWFrOyAvLyBUaGUgY29tcG9uZW50IG5hbWUgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzdGFjayB0aGF0IHN0YXJ0cyB3aXRoIGFuXG4gICAgLy8gdXBwZXJjYXNlIGxldHRlclxuXG4gICAgaWYgKC9eW0EtWl0vLnRlc3QoZnVuY3Rpb25OYW1lKSkgcmV0dXJuIHNhbml0aXplSWRlbnRpZmllcihmdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciB0eXBlUHJvcE5hbWUgPSAnX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgbGFiZWxQcm9wTmFtZSA9ICdfX0VNT1RJT05fTEFCRUxfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgY3JlYXRlRW1vdGlvblByb3BzID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBwcm9wcy5jc3MgPT09ICdzdHJpbmcnICYmIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgY3NzIGRlY2xhcmF0aW9uXG4gIHByb3BzLmNzcy5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaW5ncyBhcmUgbm90IGFsbG93ZWQgYXMgY3NzIHByb3AgdmFsdWVzLCBwbGVhc2Ugd3JhcCBpdCBpbiBhIGNzcyB0ZW1wbGF0ZSBsaXRlcmFsIGZyb20gJ0BlbW90aW9uL3JlYWN0JyBsaWtlIHRoaXM6IGNzc2BcIiArIHByb3BzLmNzcyArIFwiYFwiKTtcbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHNbdHlwZVByb3BOYW1lXSA9IHR5cGU7IC8vIEZvciBwZXJmb3JtYW5jZSwgb25seSBjYWxsIGdldExhYmVsRnJvbVN0YWNrVHJhY2UgaW4gZGV2ZWxvcG1lbnQgYW5kIHdoZW5cbiAgLy8gdGhlIGxhYmVsIGhhc24ndCBhbHJlYWR5IGJlZW4gY29tcHV0ZWRcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhIXByb3BzLmNzcyAmJiAodHlwZW9mIHByb3BzLmNzcyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHByb3BzLmNzcy5uYW1lICE9PSAnc3RyaW5nJyB8fCBwcm9wcy5jc3MubmFtZS5pbmRleE9mKCctJykgPT09IC0xKSkge1xuICAgIHZhciBsYWJlbCA9IGdldExhYmVsRnJvbVN0YWNrVHJhY2UobmV3IEVycm9yKCkuc3RhY2spO1xuICAgIGlmIChsYWJlbCkgbmV3UHJvcHNbbGFiZWxQcm9wTmFtZV0gPSBsYWJlbDtcbiAgfVxuXG4gIHJldHVybiBuZXdQcm9wcztcbn07XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZCA9IF9yZWYuc2VyaWFsaXplZCxcbiAgICAgIGlzU3RyaW5nVGFnID0gX3JlZi5pc1N0cmluZ1RhZztcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBFbW90aW9uID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgdmFyIGNzc1Byb3AgPSBwcm9wcy5jc3M7IC8vIHNvIHRoYXQgdXNpbmcgYGNzc2AgZnJvbSBgZW1vdGlvbmAgYW5kIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgY3NzIHByb3Agd29ya3NcbiAgLy8gbm90IHBhc3NpbmcgdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8gc2VyaWFsaXplU3R5bGVzIGJlY2F1c2UgaXQgd291bGRcbiAgLy8gbWFrZSBjZXJ0YWluIGJhYmVsIG9wdGltaXNhdGlvbnMgbm90IHBvc3NpYmxlXG5cbiAgaWYgKHR5cGVvZiBjc3NQcm9wID09PSAnc3RyaW5nJyAmJiBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICBjc3NQcm9wID0gY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXTtcbiAgfVxuXG4gIHZhciBXcmFwcGVkQ29tcG9uZW50ID0gcHJvcHNbdHlwZVByb3BOYW1lXTtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbY3NzUHJvcF07XG4gIHZhciBjbGFzc05hbWUgPSAnJztcblxuICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIHByb3BzLmNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHJlZ2lzdGVyZWRTdHlsZXMsIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHZhciBsYWJlbEZyb21TdGFjayA9IHByb3BzW2xhYmVsUHJvcE5hbWVdO1xuXG4gICAgaWYgKGxhYmVsRnJvbVN0YWNrKSB7XG4gICAgICBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzZXJpYWxpemVkLCAnbGFiZWw6JyArIGxhYmVsRnJvbVN0YWNrICsgJzsnXSk7XG4gICAgfVxuICB9XG5cbiAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIGtleSkgJiYga2V5ICE9PSAnY3NzJyAmJiBrZXkgIT09IHR5cGVQcm9wTmFtZSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyB8fCBrZXkgIT09IGxhYmVsUHJvcE5hbWUpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEVtb3Rpb24uZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNzc1Byb3BJbnRlcm5hbCc7XG59XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNCcm93c2VyIGFzIGksIHVzZVRoZW1lIGFzIHUsIHdpdGhFbW90aW9uQ2FjaGUgYXMgdyB9O1xuIiwgImltcG9ydCB7IGggYXMgaGFzT3duLCBFIGFzIEVtb3Rpb24sIGMgYXMgY3JlYXRlRW1vdGlvblByb3BzLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIFQgYXMgVGhlbWVDb250ZXh0LCBpIGFzIGlzQnJvd3NlciQxIH0gZnJvbSAnLi9lbW90aW9uLWVsZW1lbnQtNDNjNmZlYTAuYnJvd3Nlci5lc20uanMnO1xuZXhwb3J0IHsgQyBhcyBDYWNoZVByb3ZpZGVyLCBUIGFzIFRoZW1lQ29udGV4dCwgYSBhcyBUaGVtZVByb3ZpZGVyLCBfIGFzIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSwgdSBhcyB1c2VUaGVtZSwgdyBhcyB3aXRoRW1vdGlvbkNhY2hlLCBiIGFzIHdpdGhUaGVtZSB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTQzYzZmZWEwLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGdldFJlZ2lzdGVyZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcblxudmFyIHBrZyA9IHtcblx0bmFtZTogXCJAZW1vdGlvbi9yZWFjdFwiLFxuXHR2ZXJzaW9uOiBcIjExLjExLjRcIixcblx0bWFpbjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCIsXG5cdG1vZHVsZTogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCIsXG5cdGJyb3dzZXI6IHtcblx0XHRcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzXCJcblx0fSxcblx0ZXhwb3J0czoge1xuXHRcdFwiLlwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0Lndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtcnVudGltZVwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9faXNvbGF0ZWQtaG5yc1wiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWVcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS5janMuanNcIlxuXHRcdH0sXG5cdFx0XCIuL3BhY2thZ2UuanNvblwiOiBcIi4vcGFja2FnZS5qc29uXCIsXG5cdFx0XCIuL3R5cGVzL2Nzcy1wcm9wXCI6IFwiLi90eXBlcy9jc3MtcHJvcC5kLnRzXCIsXG5cdFx0XCIuL21hY3JvXCI6IHtcblx0XHRcdHR5cGVzOiB7XG5cdFx0XHRcdFwiaW1wb3J0XCI6IFwiLi9tYWNyby5kLm10c1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmQudHNcIlxuXHRcdFx0fSxcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vbWFjcm8uanNcIlxuXHRcdH1cblx0fSxcblx0dHlwZXM6IFwidHlwZXMvaW5kZXguZC50c1wiLFxuXHRmaWxlczogW1xuXHRcdFwic3JjXCIsXG5cdFx0XCJkaXN0XCIsXG5cdFx0XCJqc3gtcnVudGltZVwiLFxuXHRcdFwianN4LWRldi1ydW50aW1lXCIsXG5cdFx0XCJfaXNvbGF0ZWQtaG5yc1wiLFxuXHRcdFwidHlwZXMvKi5kLnRzXCIsXG5cdFx0XCJtYWNyby4qXCJcblx0XSxcblx0c2lkZUVmZmVjdHM6IGZhbHNlLFxuXHRhdXRob3I6IFwiRW1vdGlvbiBDb250cmlidXRvcnNcIixcblx0bGljZW5zZTogXCJNSVRcIixcblx0c2NyaXB0czoge1xuXHRcdFwidGVzdDp0eXBlc2NyaXB0XCI6IFwiZHRzbGludCB0eXBlc1wiXG5cdH0sXG5cdGRlcGVuZGVuY2llczoge1xuXHRcdFwiQGJhYmVsL3J1bnRpbWVcIjogXCJeNy4xOC4zXCIsXG5cdFx0XCJAZW1vdGlvbi9iYWJlbC1wbHVnaW5cIjogXCJeMTEuMTEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vY2FjaGVcIjogXCJeMTEuMTEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vc2VyaWFsaXplXCI6IFwiXjEuMS4zXCIsXG5cdFx0XCJAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrc1wiOiBcIl4xLjAuMVwiLFxuXHRcdFwiQGVtb3Rpb24vdXRpbHNcIjogXCJeMS4yLjFcIixcblx0XHRcIkBlbW90aW9uL3dlYWstbWVtb2l6ZVwiOiBcIl4wLjMuMVwiLFxuXHRcdFwiaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3NcIjogXCJeMy4zLjFcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzOiB7XG5cdFx0cmVhY3Q6IFwiPj0xNi44LjBcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzTWV0YToge1xuXHRcdFwiQHR5cGVzL3JlYWN0XCI6IHtcblx0XHRcdG9wdGlvbmFsOiB0cnVlXG5cdFx0fVxuXHR9LFxuXHRkZXZEZXBlbmRlbmNpZXM6IHtcblx0XHRcIkBkZWZpbml0ZWx5dHlwZWQvZHRzbGludFwiOiBcIjAuMC4xMTJcIixcblx0XHRcIkBlbW90aW9uL2Nzc1wiOiBcIjExLjExLjJcIixcblx0XHRcIkBlbW90aW9uL2Nzcy1wcmV0dGlmaWVyXCI6IFwiMS4xLjNcIixcblx0XHRcIkBlbW90aW9uL3NlcnZlclwiOiBcIjExLjExLjBcIixcblx0XHRcIkBlbW90aW9uL3N0eWxlZFwiOiBcIjExLjExLjBcIixcblx0XHRcImh0bWwtdGFnLW5hbWVzXCI6IFwiXjEuMS4yXCIsXG5cdFx0cmVhY3Q6IFwiMTYuMTQuMFwiLFxuXHRcdFwic3ZnLXRhZy1uYW1lc1wiOiBcIl4xLjEuMVwiLFxuXHRcdHR5cGVzY3JpcHQ6IFwiXjQuNS41XCJcblx0fSxcblx0cmVwb3NpdG9yeTogXCJodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL3RyZWUvbWFpbi9wYWNrYWdlcy9yZWFjdFwiLFxuXHRwdWJsaXNoQ29uZmlnOiB7XG5cdFx0YWNjZXNzOiBcInB1YmxpY1wiXG5cdH0sXG5cdFwidW1kOm1haW5cIjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QudW1kLm1pbi5qc1wiLFxuXHRwcmVjb25zdHJ1Y3Q6IHtcblx0XHRlbnRyeXBvaW50czogW1xuXHRcdFx0XCIuL2luZGV4LmpzXCIsXG5cdFx0XHRcIi4vanN4LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9faXNvbGF0ZWQtaG5ycy5qc1wiXG5cdFx0XSxcblx0XHR1bWROYW1lOiBcImVtb3Rpb25SZWFjdFwiLFxuXHRcdGV4cG9ydHM6IHtcblx0XHRcdGVudkNvbmRpdGlvbnM6IFtcblx0XHRcdFx0XCJicm93c2VyXCIsXG5cdFx0XHRcdFwid29ya2VyXCJcblx0XHRcdF0sXG5cdFx0XHRleHRyYToge1xuXHRcdFx0XHRcIi4vdHlwZXMvY3NzLXByb3BcIjogXCIuL3R5cGVzL2Nzcy1wcm9wLmQudHNcIixcblx0XHRcdFx0XCIuL21hY3JvXCI6IHtcblx0XHRcdFx0XHR0eXBlczoge1xuXHRcdFx0XHRcdFx0XCJpbXBvcnRcIjogXCIuL21hY3JvLmQubXRzXCIsXG5cdFx0XHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmQudHNcIlxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9tYWNyby5qc1wiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbnZhciBqc3ggPSBmdW5jdGlvbiBqc3godHlwZSwgcHJvcHMpIHtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgaWYgKHByb3BzID09IG51bGwgfHwgIWhhc093bi5jYWxsKHByb3BzLCAnY3NzJykpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9IC8vICRGbG93Rml4TWVcblxuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KG51bGwsIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSk7XG59O1xuXG52YXIgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gZmFsc2U7IC8vIG1haW50YWluIHBsYWNlIG92ZXIgcmVyZW5kZXJzLlxuLy8gaW5pdGlhbCByZW5kZXIgZnJvbSBicm93c2VyLCBpbnNlcnRCZWZvcmUgY29udGV4dC5zaGVldC50YWdzWzBdIG9yIGlmIGEgc3R5bGUgaGFzbid0IGJlZW4gaW5zZXJ0ZWQgdGhlcmUgeWV0LCBhcHBlbmRDaGlsZFxuLy8gaW5pdGlhbCBjbGllbnQtc2lkZSByZW5kZXIgZnJvbSBTU1IsIHVzZSBwbGFjZSBvZiBoeWRyYXRpbmcgdGFnXG5cbnZhciBHbG9iYWwgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCAmJiAoIC8vIGNoZWNrIGZvciBjbGFzc05hbWUgYXMgd2VsbCBzaW5jZSB0aGUgdXNlciBpc1xuICAvLyBwcm9iYWJseSB1c2luZyB0aGUgY3VzdG9tIGNyZWF0ZUVsZW1lbnQgd2hpY2hcbiAgLy8gbWVhbnMgaXQgd2lsbCBiZSB0dXJuZWQgaW50byBhIGNsYXNzTmFtZSBwcm9wXG4gIC8vICRGbG93Rml4TWUgSSBkb24ndCByZWFsbHkgd2FudCB0byBhZGQgaXQgdG8gdGhlIHR5cGUgc2luY2UgaXQgc2hvdWxkbid0IGJlIHVzZWRcbiAgcHJvcHMuY2xhc3NOYW1lIHx8IHByb3BzLmNzcykpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIGNzcyBwcm9wIG9uIEdsb2JhbCwgZGlkIHlvdSBtZWFuIHRvIHVzZSB0aGUgc3R5bGVzIHByb3AgaW5zdGVhZD9cIik7XG4gICAgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBzdHlsZXMgPSBwcm9wcy5zdHlsZXM7XG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzdHlsZXNdLCB1bmRlZmluZWQsIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG5cbiAgaWYgKCFpc0Jyb3dzZXIkMSkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIHNlcmlhbGl6ZWROYW1lcyA9IHNlcmlhbGl6ZWQubmFtZTtcbiAgICB2YXIgc2VyaWFsaXplZFN0eWxlcyA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICAgIHZhciBuZXh0ID0gc2VyaWFsaXplZC5uZXh0O1xuXG4gICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VyaWFsaXplZE5hbWVzICs9ICcgJyArIG5leHQubmFtZTtcbiAgICAgIHNlcmlhbGl6ZWRTdHlsZXMgKz0gbmV4dC5zdHlsZXM7XG4gICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgIH1cblxuICAgIHZhciBzaG91bGRDYWNoZSA9IGNhY2hlLmNvbXBhdCA9PT0gdHJ1ZTtcbiAgICB2YXIgcnVsZXMgPSBjYWNoZS5pbnNlcnQoXCJcIiwge1xuICAgICAgbmFtZTogc2VyaWFsaXplZE5hbWVzLFxuICAgICAgc3R5bGVzOiBzZXJpYWxpemVkU3R5bGVzXG4gICAgfSwgY2FjaGUuc2hlZXQsIHNob3VsZENhY2hlKTtcblxuICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgKF9yZWYgPSB7fSwgX3JlZltcImRhdGEtZW1vdGlvblwiXSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbCBcIiArIHNlcmlhbGl6ZWROYW1lcywgX3JlZi5kYW5nZXJvdXNseVNldElubmVySFRNTCA9IHtcbiAgICAgIF9faHRtbDogcnVsZXNcbiAgICB9LCBfcmVmLm5vbmNlID0gY2FjaGUuc2hlZXQubm9uY2UsIF9yZWYpKTtcbiAgfSAvLyB5ZXMsIGkga25vdyB0aGVzZSBob29rcyBhcmUgdXNlZCBjb25kaXRpb25hbGx5XG4gIC8vIGJ1dCBpdCBpcyBiYXNlZCBvbiBhIGNvbnN0YW50IHRoYXQgd2lsbCBuZXZlciBjaGFuZ2UgYXQgcnVudGltZVxuICAvLyBpdCdzIGVmZmVjdGl2ZWx5IGxpa2UgaGF2aW5nIHR3byBpbXBsZW1lbnRhdGlvbnMgYW5kIHN3aXRjaGluZyB0aGVtIG91dFxuICAvLyBzbyBpdCdzIG5vdCBhY3R1YWxseSBicmVha2luZyBhbnl0aGluZ1xuXG5cbiAgdmFyIHNoZWV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtleSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbFwiOyAvLyB1c2UgY2FzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8yNjc1XG5cbiAgICB2YXIgc2hlZXQgPSBuZXcgY2FjaGUuc2hlZXQuY29uc3RydWN0b3Ioe1xuICAgICAga2V5OiBrZXksXG4gICAgICBub25jZTogY2FjaGUuc2hlZXQubm9uY2UsXG4gICAgICBjb250YWluZXI6IGNhY2hlLnNoZWV0LmNvbnRhaW5lcixcbiAgICAgIHNwZWVkeTogY2FjaGUuc2hlZXQuaXNTcGVlZHlcbiAgICB9KTtcbiAgICB2YXIgcmVoeWRyYXRpbmcgPSBmYWxzZTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uPVxcXCJcIiArIGtleSArIFwiIFwiICsgc2VyaWFsaXplZC5uYW1lICsgXCJcXFwiXVwiKTtcblxuICAgIGlmIChjYWNoZS5zaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgc2hlZXQuYmVmb3JlID0gY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmVoeWRyYXRpbmcgPSB0cnVlOyAvLyBjbGVhciB0aGUgaGFzaCBzbyB0aGlzIG5vZGUgd29uJ3QgYmUgcmVjb2duaXphYmxlIGFzIHJlaHlkcmF0YWJsZSBieSBvdGhlciA8R2xvYmFsLz5zXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBrZXkpO1xuICAgICAgc2hlZXQuaHlkcmF0ZShbbm9kZV0pO1xuICAgIH1cblxuICAgIHNoZWV0UmVmLmN1cnJlbnQgPSBbc2hlZXQsIHJlaHlkcmF0aW5nXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9O1xuICB9LCBbY2FjaGVdKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXRSZWZDdXJyZW50ID0gc2hlZXRSZWYuY3VycmVudDtcbiAgICB2YXIgc2hlZXQgPSBzaGVldFJlZkN1cnJlbnRbMF0sXG4gICAgICAgIHJlaHlkcmF0aW5nID0gc2hlZXRSZWZDdXJyZW50WzFdO1xuXG4gICAgaWYgKHJlaHlkcmF0aW5nKSB7XG4gICAgICBzaGVldFJlZkN1cnJlbnRbMV0gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZC5uZXh0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHNoZWV0LnRhZ3Nbc2hlZXQudGFncy5sZW5ndGggLSAxXS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICBzaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICBjYWNoZS5pbnNlcnQoXCJcIiwgc2VyaWFsaXplZCwgc2hlZXQsIGZhbHNlKTtcbiAgfSwgW2NhY2hlLCBzZXJpYWxpemVkLm5hbWVdKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgR2xvYmFsLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25HbG9iYWwnO1xufVxuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG52YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICB2YXIgaW5zZXJ0YWJsZSA9IGNzcy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIHZhciBuYW1lID0gXCJhbmltYXRpb24tXCIgKyBpbnNlcnRhYmxlLm5hbWU7IC8vICRGbG93Rml4TWVcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxudmFyIGNsYXNzbmFtZXMgPSBmdW5jdGlvbiBjbGFzc25hbWVzKGFyZ3MpIHtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PSBudWxsKSBjb250aW51ZTtcbiAgICB2YXIgdG9BZGQgPSB2b2lkIDA7XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhcmcuc3R5bGVzICE9PSB1bmRlZmluZWQgJiYgYXJnLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdZb3UgaGF2ZSBwYXNzZWQgc3R5bGVzIGNyZWF0ZWQgd2l0aCBgY3NzYCBmcm9tIGBAZW1vdGlvbi9yZWFjdGAgcGFja2FnZSB0byB0aGUgYGN4YC5cXG4nICsgJ2BjeGAgaXMgbWVhbnQgdG8gY29tcG9zZSBjbGFzcyBuYW1lcyAoc3RyaW5ncykgc28geW91IHNob3VsZCBjb252ZXJ0IHRob3NlIHN0eWxlcyB0byBhIGNsYXNzIG5hbWUgYnkgcGFzc2luZyB0aGVtIHRvIHRoZSBgY3NzYCByZWNlaXZlZCBmcm9tIDxDbGFzc05hbWVzLz4gY29tcG9uZW50LicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkQXJyID0gX3JlZi5zZXJpYWxpemVkQXJyO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWFsaXplZEFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkQXJyW2ldLCBmYWxzZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBDbGFzc05hbWVzID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBDbGFzc05hbWVzLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25DbGFzc05hbWVzJztcbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnOyAvLyAjMTcyNywgIzI5MDUgZm9yIHNvbWUgcmVhc29uIEplc3QgYW5kIFZpdGVzdCBldmFsdWF0ZSBtb2R1bGVzIHR3aWNlIGlmIHNvbWUgY29uc3VtaW5nIG1vZHVsZSBnZXRzIG1vY2tlZFxuXG4gIHZhciBpc1Rlc3RFbnYgPSB0eXBlb2YgamVzdCAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHZpICE9PSAndW5kZWZpbmVkJztcblxuICBpZiAoaXNCcm93c2VyICYmICFpc1Rlc3RFbnYpIHtcbiAgICAvLyBnbG9iYWxUaGlzIGhhcyB3aWRlIGJyb3dzZXIgc3VwcG9ydCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1nbG9iYWxUaGlzLCBOb2RlLmpzIDEyIGFuZCBsYXRlclxuICAgIHZhciBnbG9iYWxDb250ZXh0ID0gLy8gJEZsb3dJZ25vcmVcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICA6IGlzQnJvd3NlciA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgICB2YXIgZ2xvYmFsS2V5ID0gXCJfX0VNT1RJT05fUkVBQ1RfXCIgKyBwa2cudmVyc2lvbi5zcGxpdCgnLicpWzBdICsgXCJfX1wiO1xuXG4gICAgaWYgKGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSkge1xuICAgICAgY29uc29sZS53YXJuKCdZb3UgYXJlIGxvYWRpbmcgQGVtb3Rpb24vcmVhY3Qgd2hlbiBpdCBpcyBhbHJlYWR5IGxvYWRlZC4gUnVubmluZyAnICsgJ211bHRpcGxlIGluc3RhbmNlcyBtYXkgY2F1c2UgcHJvYmxlbXMuIFRoaXMgY2FuIGhhcHBlbiBpZiBtdWx0aXBsZSAnICsgJ3ZlcnNpb25zIGFyZSB1c2VkLCBvciBpZiBtdWx0aXBsZSBidWlsZHMgb2YgdGhlIHNhbWUgdmVyc2lvbiBhcmUgJyArICd1c2VkLicpO1xuICAgIH1cblxuICAgIGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSA9IHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ2xhc3NOYW1lcywgR2xvYmFsLCBqc3ggYXMgY3JlYXRlRWxlbWVudCwgY3NzLCBqc3gsIGtleWZyYW1lcyB9O1xuIiwgImZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgXCJkZWZhdWx0XCI6IG9ialxuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZm9ybWF0TXVpRXJyb3JNZXNzYWdlO1xuLyoqXG4gKiBXQVJOSU5HOiBEb24ndCBpbXBvcnQgdGhpcyBkaXJlY3RseS5cbiAqIFVzZSBgTXVpRXJyb3JgIGZyb20gYEBtdWkvaW50ZXJuYWwtYmFiZWwtbWFjcm9zL011aUVycm9yLm1hY3JvYCBpbnN0ZWFkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0TXVpRXJyb3JNZXNzYWdlKGNvZGUpIHtcbiAgLy8gQXBwbHkgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS10ZW1wbGF0ZS1saXRlcmFscyBpbiBsb29zZSBtb2RlXG4gIC8vIGxvb3NlIG1vZGUgaXMgc2FmZSBpZiB3ZSdyZSBjb25jYXRlbmF0aW5nIHByaW1pdGl2ZXNcbiAgLy8gc2VlIGh0dHBzOi8vYmFiZWxqcy5pby9kb2NzL2VuL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tdGVtcGxhdGUtbGl0ZXJhbHMjbG9vc2VcbiAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLXRlbXBsYXRlICovXG4gIGxldCB1cmwgPSAnaHR0cHM6Ly9tdWkuY29tL3Byb2R1Y3Rpb24tZXJyb3IvP2NvZGU9JyArIGNvZGU7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgLy8gcmVzdCBwYXJhbXMgb3Zlci10cmFuc3BpbGUgZm9yIHRoaXMgY2FzZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICB1cmwgKz0gJyZhcmdzW109JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiAnTWluaWZpZWQgTVVJIGVycm9yICMnICsgY29kZSArICc7IHZpc2l0ICcgKyB1cmwgKyAnIGZvciB0aGUgZnVsbCBtZXNzYWdlLic7XG4gIC8qIGVzbGludC1lbmFibGUgcHJlZmVyLXRlbXBsYXRlICovXG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCIpKTsiLCAiaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciByZWFjdFByb3BzUmVnZXggPSAvXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhYmJyfGFjY2VwdHxhY2NlcHRDaGFyc2V0fGFjY2Vzc0tleXxhY3Rpb258YWxsb3d8YWxsb3dVc2VyTWVkaWF8YWxsb3dQYXltZW50UmVxdWVzdHxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlY29kaW5nfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlfGRpc2FibGVSZW1vdGVQbGF5YmFja3xkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxlbnRlcktleUhpbnR8Zm9ybXxmb3JtQWN0aW9ufGZvcm1FbmNUeXBlfGZvcm1NZXRob2R8Zm9ybU5vVmFsaWRhdGV8Zm9ybVRhcmdldHxmcmFtZUJvcmRlcnxoZWFkZXJzfGhlaWdodHxoaWRkZW58aGlnaHxocmVmfGhyZWZMYW5nfGh0bWxGb3J8aHR0cEVxdWl2fGlkfGlucHV0TW9kZXxpbnRlZ3JpdHl8aXN8a2V5UGFyYW1zfGtleVR5cGV8a2luZHxsYWJlbHxsYW5nfGxpc3R8bG9hZGluZ3xsb29wfGxvd3xtYXJnaW5IZWlnaHR8bWFyZ2luV2lkdGh8bWF4fG1heExlbmd0aHxtZWRpYXxtZWRpYUdyb3VwfG1ldGhvZHxtaW58bWluTGVuZ3RofG11bHRpcGxlfG11dGVkfG5hbWV8bm9uY2V8bm9WYWxpZGF0ZXxvcGVufG9wdGltdW18cGF0dGVybnxwbGFjZWhvbGRlcnxwbGF5c0lubGluZXxwb3N0ZXJ8cHJlbG9hZHxwcm9maWxlfHJhZGlvR3JvdXB8cmVhZE9ubHl8cmVmZXJyZXJQb2xpY3l8cmVsfHJlcXVpcmVkfHJldmVyc2VkfHJvbGV8cm93c3xyb3dTcGFufHNhbmRib3h8c2NvcGV8c2NvcGVkfHNjcm9sbGluZ3xzZWFtbGVzc3xzZWxlY3RlZHxzaGFwZXxzaXplfHNpemVzfHNsb3R8c3BhbnxzcGVsbENoZWNrfHNyY3xzcmNEb2N8c3JjTGFuZ3xzcmNTZXR8c3RhcnR8c3RlcHxzdHlsZXxzdW1tYXJ5fHRhYkluZGV4fHRhcmdldHx0aXRsZXx0cmFuc2xhdGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmNyZW1lbnRhbHxmYWxsYmFja3xpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258b3B0aW9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLzsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YmZlZTY4YTRjZDdlNjAwOWVmNjFkMjNcblxudmFyIGlzUHJvcFZhbGlkID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAocHJvcCkge1xuICByZXR1cm4gcmVhY3RQcm9wc1JlZ2V4LnRlc3QocHJvcCkgfHwgcHJvcC5jaGFyQ29kZUF0KDApID09PSAxMTFcbiAgLyogbyAqL1xuICAmJiBwcm9wLmNoYXJDb2RlQXQoMSkgPT09IDExMFxuICAvKiBuICovXG4gICYmIHByb3AuY2hhckNvZGVBdCgyKSA8IDkxO1xufVxuLyogWisxICovXG4pO1xuXG5leHBvcnQgeyBpc1Byb3BWYWxpZCBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGlzUHJvcFZhbGlkIGZyb20gJ0BlbW90aW9uL2lzLXByb3AtdmFsaWQnO1xuaW1wb3J0IHsgd2l0aEVtb3Rpb25DYWNoZSwgVGhlbWVDb250ZXh0IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgdGVzdE9taXRQcm9wc09uU3RyaW5nVGFnID0gaXNQcm9wVmFsaWQ7XG5cbnZhciB0ZXN0T21pdFByb3BzT25Db21wb25lbnQgPSBmdW5jdGlvbiB0ZXN0T21pdFByb3BzT25Db21wb25lbnQoa2V5KSB7XG4gIHJldHVybiBrZXkgIT09ICd0aGVtZSc7XG59O1xuXG52YXIgZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wID0gZnVuY3Rpb24gZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiYgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5NiA/IHRlc3RPbWl0UHJvcHNPblN0cmluZ1RhZyA6IHRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudDtcbn07XG52YXIgY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyA9IGZ1bmN0aW9uIGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHModGFnLCBvcHRpb25zLCBpc1JlYWwpIHtcbiAgdmFyIHNob3VsZEZvcndhcmRQcm9wO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgdmFyIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcCA9IG9wdGlvbnMuc2hvdWxkRm9yd2FyZFByb3A7XG4gICAgc2hvdWxkRm9yd2FyZFByb3AgPSB0YWcuX19lbW90aW9uX2ZvcndhcmRQcm9wICYmIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcCA/IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgICAgcmV0dXJuIHRhZy5fX2Vtb3Rpb25fZm9yd2FyZFByb3AocHJvcE5hbWUpICYmIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcChwcm9wTmFtZSk7XG4gICAgfSA6IG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2hvdWxkRm9yd2FyZFByb3AgIT09ICdmdW5jdGlvbicgJiYgaXNSZWFsKSB7XG4gICAgc2hvdWxkRm9yd2FyZFByb3AgPSB0YWcuX19lbW90aW9uX2ZvcndhcmRQcm9wO1xuICB9XG5cbiAgcmV0dXJuIHNob3VsZEZvcndhcmRQcm9wO1xufTtcblxudmFyIElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SID0gXCJZb3UgaGF2ZSBpbGxlZ2FsIGVzY2FwZSBzZXF1ZW5jZSBpbiB5b3VyIHRlbXBsYXRlIGxpdGVyYWwsIG1vc3QgbGlrZWx5IGluc2lkZSBjb250ZW50J3MgcHJvcGVydHkgdmFsdWUuXFxuQmVjYXVzZSB5b3Ugd3JpdGUgeW91ciBDU1MgaW5zaWRlIGEgSmF2YVNjcmlwdCBzdHJpbmcgeW91IGFjdHVhbGx5IGhhdmUgdG8gZG8gZG91YmxlIGVzY2FwaW5nLCBzbyBmb3IgZXhhbXBsZSBcXFwiY29udGVudDogJ1xcXFwwMGQ3JztcXFwiIHNob3VsZCBiZWNvbWUgXFxcImNvbnRlbnQ6ICdcXFxcXFxcXDAwZDcnO1xcXCIuXFxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxcbmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1RlbXBsYXRlX2xpdGVyYWxzI0VTMjAxOF9yZXZpc2lvbl9vZl9pbGxlZ2FsX2VzY2FwZV9zZXF1ZW5jZXNcIjtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIGNyZWF0ZVN0eWxlZCA9IGZ1bmN0aW9uIGNyZWF0ZVN0eWxlZCh0YWcsIG9wdGlvbnMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodGFnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGFyZSB0cnlpbmcgdG8gY3JlYXRlIGEgc3R5bGVkIGVsZW1lbnQgd2l0aCBhbiB1bmRlZmluZWQgY29tcG9uZW50LlxcbllvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gaW1wb3J0IGl0LicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpc1JlYWwgPSB0YWcuX19lbW90aW9uX3JlYWwgPT09IHRhZztcbiAgdmFyIGJhc2VUYWcgPSBpc1JlYWwgJiYgdGFnLl9fZW1vdGlvbl9iYXNlIHx8IHRhZztcbiAgdmFyIGlkZW50aWZpZXJOYW1lO1xuICB2YXIgdGFyZ2V0Q2xhc3NOYW1lO1xuXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZGVudGlmaWVyTmFtZSA9IG9wdGlvbnMubGFiZWw7XG4gICAgdGFyZ2V0Q2xhc3NOYW1lID0gb3B0aW9ucy50YXJnZXQ7XG4gIH1cblxuICB2YXIgc2hvdWxkRm9yd2FyZFByb3AgPSBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzKHRhZywgb3B0aW9ucywgaXNSZWFsKTtcbiAgdmFyIGRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wIHx8IGdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcChiYXNlVGFnKTtcbiAgdmFyIHNob3VsZFVzZUFzID0gIWRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCgnYXMnKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3R5bGVzID0gaXNSZWFsICYmIHRhZy5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQgPyB0YWcuX19lbW90aW9uX3N0eWxlcy5zbGljZSgwKSA6IFtdO1xuXG4gICAgaWYgKGlkZW50aWZpZXJOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0eWxlcy5wdXNoKFwibGFiZWw6XCIgKyBpZGVudGlmaWVyTmFtZSArIFwiO1wiKTtcbiAgICB9XG5cbiAgICBpZiAoYXJnc1swXSA9PSBudWxsIHx8IGFyZ3NbMF0ucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0eWxlcy5wdXNoLmFwcGx5KHN0eWxlcywgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFyZ3NbMF1bMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzLnB1c2goYXJnc1swXVswXSk7XG4gICAgICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gICAgICB2YXIgaSA9IDE7XG5cbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXJnc1swXVtpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZXMucHVzaChhcmdzW2ldLCBhcmdzWzBdW2ldKTtcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWU6IHdlIG5lZWQgdG8gY2FzdCBTdGF0ZWxlc3NGdW5jdGlvbmFsQ29tcG9uZW50IHRvIG91ciBQcml2YXRlU3R5bGVkQ29tcG9uZW50IGNsYXNzXG5cblxuICAgIHZhciBTdHlsZWQgPSB3aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICAgICAgdmFyIEZpbmFsVGFnID0gc2hvdWxkVXNlQXMgJiYgcHJvcHMuYXMgfHwgYmFzZVRhZztcbiAgICAgIHZhciBjbGFzc05hbWUgPSAnJztcbiAgICAgIHZhciBjbGFzc0ludGVycG9sYXRpb25zID0gW107XG4gICAgICB2YXIgbWVyZ2VkUHJvcHMgPSBwcm9wcztcblxuICAgICAgaWYgKHByb3BzLnRoZW1lID09IG51bGwpIHtcbiAgICAgICAgbWVyZ2VkUHJvcHMgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICBtZXJnZWRQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lcmdlZFByb3BzLnRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhjYWNoZS5yZWdpc3RlcmVkLCBjbGFzc0ludGVycG9sYXRpb25zLCBwcm9wcy5jbGFzc05hbWUpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoc3R5bGVzLmNvbmNhdChjbGFzc0ludGVycG9sYXRpb25zKSwgY2FjaGUucmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gICAgICBpZiAodGFyZ2V0Q2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgdGFyZ2V0Q2xhc3NOYW1lO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmluYWxTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZFVzZUFzICYmIHNob3VsZEZvcndhcmRQcm9wID09PSB1bmRlZmluZWQgPyBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AoRmluYWxUYWcpIDogZGVmYXVsdFNob3VsZEZvcndhcmRQcm9wO1xuICAgICAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgICAgIGZvciAodmFyIF9rZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgaWYgKHNob3VsZFVzZUFzICYmIF9rZXkgPT09ICdhcycpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICggLy8gJEZsb3dGaXhNZVxuICAgICAgICBmaW5hbFNob3VsZEZvcndhcmRQcm9wKF9rZXkpKSB7XG4gICAgICAgICAgbmV3UHJvcHNbX2tleV0gPSBwcm9wc1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXdQcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgICAgICBjYWNoZTogY2FjaGUsXG4gICAgICAgIHNlcmlhbGl6ZWQ6IHNlcmlhbGl6ZWQsXG4gICAgICAgIGlzU3RyaW5nVGFnOiB0eXBlb2YgRmluYWxUYWcgPT09ICdzdHJpbmcnXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRmluYWxUYWcsIG5ld1Byb3BzKSk7XG4gICAgfSk7XG4gICAgU3R5bGVkLmRpc3BsYXlOYW1lID0gaWRlbnRpZmllck5hbWUgIT09IHVuZGVmaW5lZCA/IGlkZW50aWZpZXJOYW1lIDogXCJTdHlsZWQoXCIgKyAodHlwZW9mIGJhc2VUYWcgPT09ICdzdHJpbmcnID8gYmFzZVRhZyA6IGJhc2VUYWcuZGlzcGxheU5hbWUgfHwgYmFzZVRhZy5uYW1lIHx8ICdDb21wb25lbnQnKSArIFwiKVwiO1xuICAgIFN0eWxlZC5kZWZhdWx0UHJvcHMgPSB0YWcuZGVmYXVsdFByb3BzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fcmVhbCA9IFN0eWxlZDtcbiAgICBTdHlsZWQuX19lbW90aW9uX2Jhc2UgPSBiYXNlVGFnO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fc3R5bGVzID0gc3R5bGVzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fZm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3R5bGVkLCAndG9TdHJpbmcnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoKSB7XG4gICAgICAgIGlmICh0YXJnZXRDbGFzc05hbWUgPT09IHVuZGVmaW5lZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuICdOT19DT01QT05FTlRfU0VMRUNUT1InO1xuICAgICAgICB9IC8vICRGbG93Rml4TWU6IGNvZXJjZSB1bmRlZmluZWQgdG8gc3RyaW5nXG5cblxuICAgICAgICByZXR1cm4gXCIuXCIgKyB0YXJnZXRDbGFzc05hbWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBTdHlsZWQud2l0aENvbXBvbmVudCA9IGZ1bmN0aW9uIChuZXh0VGFnLCBuZXh0T3B0aW9ucykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVN0eWxlZChuZXh0VGFnLCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywgbmV4dE9wdGlvbnMsIHtcbiAgICAgICAgc2hvdWxkRm9yd2FyZFByb3A6IGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHMoU3R5bGVkLCBuZXh0T3B0aW9ucywgdHJ1ZSlcbiAgICAgIH0pKS5hcHBseSh2b2lkIDAsIHN0eWxlcyk7XG4gICAgfTtcblxuICAgIHJldHVybiBTdHlsZWQ7XG4gIH07XG59O1xuXG5leHBvcnQgeyBjcmVhdGVTdHlsZWQgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCBjcmVhdGVTdHlsZWQgZnJvbSAnLi4vYmFzZS9kaXN0L2Vtb3Rpb24tc3R5bGVkLWJhc2UuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdyZWFjdCc7XG5pbXBvcnQgJ0BlbW90aW9uL2lzLXByb3AtdmFsaWQnO1xuaW1wb3J0ICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgdGFncyA9IFsnYScsICdhYmJyJywgJ2FkZHJlc3MnLCAnYXJlYScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2F1ZGlvJywgJ2InLCAnYmFzZScsICdiZGknLCAnYmRvJywgJ2JpZycsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJywgJ2NhbnZhcycsICdjYXB0aW9uJywgJ2NpdGUnLCAnY29kZScsICdjb2wnLCAnY29sZ3JvdXAnLCAnZGF0YScsICdkYXRhbGlzdCcsICdkZCcsICdkZWwnLCAnZGV0YWlscycsICdkZm4nLCAnZGlhbG9nJywgJ2RpdicsICdkbCcsICdkdCcsICdlbScsICdlbWJlZCcsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsICdpJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaW5zJywgJ2tiZCcsICdrZXlnZW4nLCAnbGFiZWwnLCAnbGVnZW5kJywgJ2xpJywgJ2xpbmsnLCAnbWFpbicsICdtYXAnLCAnbWFyaycsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0YScsICdtZXRlcicsICduYXYnLCAnbm9zY3JpcHQnLCAnb2JqZWN0JywgJ29sJywgJ29wdGdyb3VwJywgJ29wdGlvbicsICdvdXRwdXQnLCAncCcsICdwYXJhbScsICdwaWN0dXJlJywgJ3ByZScsICdwcm9ncmVzcycsICdxJywgJ3JwJywgJ3J0JywgJ3J1YnknLCAncycsICdzYW1wJywgJ3NjcmlwdCcsICdzZWN0aW9uJywgJ3NlbGVjdCcsICdzbWFsbCcsICdzb3VyY2UnLCAnc3BhbicsICdzdHJvbmcnLCAnc3R5bGUnLCAnc3ViJywgJ3N1bW1hcnknLCAnc3VwJywgJ3RhYmxlJywgJ3Rib2R5JywgJ3RkJywgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpbWUnLCAndGl0bGUnLCAndHInLCAndHJhY2snLCAndScsICd1bCcsICd2YXInLCAndmlkZW8nLCAnd2JyJywgLy8gU1ZHXG4nY2lyY2xlJywgJ2NsaXBQYXRoJywgJ2RlZnMnLCAnZWxsaXBzZScsICdmb3JlaWduT2JqZWN0JywgJ2cnLCAnaW1hZ2UnLCAnbGluZScsICdsaW5lYXJHcmFkaWVudCcsICdtYXNrJywgJ3BhdGgnLCAncGF0dGVybicsICdwb2x5Z29uJywgJ3BvbHlsaW5lJywgJ3JhZGlhbEdyYWRpZW50JywgJ3JlY3QnLCAnc3RvcCcsICdzdmcnLCAndGV4dCcsICd0c3BhbiddO1xuXG52YXIgbmV3U3R5bGVkID0gY3JlYXRlU3R5bGVkLmJpbmQoKTtcbnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnTmFtZSkge1xuICAvLyAkRmxvd0ZpeE1lOiB3ZSBjYW4gaWdub3JlIHRoaXMgYmVjYXVzZSBpdHMgZXhwb3NlZCB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIENyZWF0ZVN0eWxlZCB0eXBlXG4gIG5ld1N0eWxlZFt0YWdOYW1lXSA9IG5ld1N0eWxlZCh0YWdOYW1lKTtcbn0pO1xuXG5leHBvcnQgeyBuZXdTdHlsZWQgYXMgZGVmYXVsdCB9O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0JztyZXF1aXJlKFwib2JqZWN0LWFzc2lnblwiKTt2YXIgZj1yZXF1aXJlKFwicmVhY3RcIiksZz02MDEwMztleHBvcnRzLkZyYWdtZW50PTYwMTA3O2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBoPVN5bWJvbC5mb3I7Zz1oKFwicmVhY3QuZWxlbWVudFwiKTtleHBvcnRzLkZyYWdtZW50PWgoXCJyZWFjdC5mcmFnbWVudFwiKX12YXIgbT1mLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxwPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07XG5mdW5jdGlvbiBxKGMsYSxrKXt2YXIgYixkPXt9LGU9bnVsbCxsPW51bGw7dm9pZCAwIT09ayYmKGU9XCJcIitrKTt2b2lkIDAhPT1hLmtleSYmKGU9XCJcIithLmtleSk7dm9pZCAwIT09YS5yZWYmJihsPWEucmVmKTtmb3IoYiBpbiBhKW4uY2FsbChhLGIpJiYhcC5oYXNPd25Qcm9wZXJ0eShiKSYmKGRbYl09YVtiXSk7aWYoYyYmYy5kZWZhdWx0UHJvcHMpZm9yKGIgaW4gYT1jLmRlZmF1bHRQcm9wcyxhKXZvaWQgMD09PWRbYl0mJihkW2JdPWFbYl0pO3JldHVybnskJHR5cGVvZjpnLHR5cGU6YyxrZXk6ZSxyZWY6bCxwcm9wczpkLF9vd25lcjptLmN1cnJlbnR9fWV4cG9ydHMuanN4PXE7ZXhwb3J0cy5qc3hzPXE7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFN0eWxlZEVuZ2luZVByb3ZpZGVyO1xudmFyIFJlYWN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgX3JlYWN0MiA9IHJlcXVpcmUoXCJAZW1vdGlvbi9yZWFjdFwiKTtcbnZhciBfY2FjaGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAZW1vdGlvbi9jYWNoZVwiKSk7XG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbi8vIHByZXBlbmQ6IHRydWUgbW92ZXMgTVVJIHN0eWxlcyB0byB0aGUgdG9wIG9mIHRoZSA8aGVhZD4gc28gdGhleSdyZSBsb2FkZWQgZmlyc3QuXG4vLyBJdCBhbGxvd3MgZGV2ZWxvcGVycyB0byBlYXNpbHkgb3ZlcnJpZGUgTVVJIHN0eWxlcyB3aXRoIG90aGVyIHN0eWxpbmcgc29sdXRpb25zLCBsaWtlIENTUyBtb2R1bGVzLlxubGV0IGNhY2hlO1xuaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ29iamVjdCcpIHtcbiAgY2FjaGUgPSAoMCwgX2NhY2hlLmRlZmF1bHQpKHtcbiAgICBrZXk6ICdjc3MnLFxuICAgIHByZXBlbmQ6IHRydWVcbiAgfSk7XG59XG5mdW5jdGlvbiBTdHlsZWRFbmdpbmVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgaW5qZWN0Rmlyc3QsXG4gICAgY2hpbGRyZW5cbiAgfSA9IHByb3BzO1xuICByZXR1cm4gaW5qZWN0Rmlyc3QgJiYgY2FjaGUgPyAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoX3JlYWN0Mi5DYWNoZVByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNhY2hlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KSA6IGNoaWxkcmVuO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3R5bGVkRW5naW5lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBfcHJvcFR5cGVzLmRlZmF1bHQubm9kZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBzdHlsZXMgYXJlIGluamVjdGVkIGxhc3QgaW4gdGhlIDxoZWFkPiBlbGVtZW50IG9mIHRoZSBwYWdlLlxuICAgKiBBcyBhIHJlc3VsdCwgdGhleSBnYWluIG1vcmUgc3BlY2lmaWNpdHkgdGhhbiBhbnkgb3RoZXIgc3R5bGUgc2hlZXQuXG4gICAqIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIE1VSSdzIHN0eWxlcywgc2V0IHRoaXMgcHJvcC5cbiAgICovXG4gIGluamVjdEZpcnN0OiBfcHJvcFR5cGVzLmRlZmF1bHQuYm9vbFxufSA6IHZvaWQgMDsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX1N0eWxlZEVuZ2luZVByb3ZpZGVyLmRlZmF1bHQ7XG4gIH1cbn0pO1xudmFyIF9TdHlsZWRFbmdpbmVQcm92aWRlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vU3R5bGVkRW5naW5lUHJvdmlkZXJcIikpOyIsICJcInVzZSBzdHJpY3RcIjtcbid1c2UgY2xpZW50JztcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gR2xvYmFsU3R5bGVzO1xudmFyIFJlYWN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgX3JlYWN0MiA9IHJlcXVpcmUoXCJAZW1vdGlvbi9yZWFjdFwiKTtcbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmZ1bmN0aW9uIEdsb2JhbFN0eWxlcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgc3R5bGVzLFxuICAgIGRlZmF1bHRUaGVtZSA9IHt9XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZ2xvYmFsU3R5bGVzID0gdHlwZW9mIHN0eWxlcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoZW1lSW5wdXQgPT4gc3R5bGVzKGlzRW1wdHkodGhlbWVJbnB1dCkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZUlucHV0KSA6IHN0eWxlcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShfcmVhY3QyLkdsb2JhbCwge1xuICAgIHN0eWxlczogZ2xvYmFsU3R5bGVzXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR2xvYmFsU3R5bGVzLnByb3BUeXBlcyA9IHtcbiAgZGVmYXVsdFRoZW1lOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICBzdHlsZXM6IF9wcm9wVHlwZXMuZGVmYXVsdC5vbmVPZlR5cGUoW19wcm9wVHlwZXMuZGVmYXVsdC5hcnJheSwgX3Byb3BUeXBlcy5kZWZhdWx0LnN0cmluZywgX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCwgX3Byb3BUeXBlcy5kZWZhdWx0LmZ1bmNdKVxufSA6IHZvaWQgMDsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX0dsb2JhbFN0eWxlcy5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfR2xvYmFsU3R5bGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9HbG9iYWxTdHlsZXNcIikpOyIsICIvKipcbiAqIEBtdWkvc3R5bGVkLWVuZ2luZSB2NS4xNS4xMVxuICpcbiAqIEBsaWNlbnNlIE1JVFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuJ3VzZSBjbGllbnQnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiR2xvYmFsU3R5bGVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9HbG9iYWxTdHlsZXMuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTdHlsZWRFbmdpbmVQcm92aWRlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfU3R5bGVkRW5naW5lUHJvdmlkZXIuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUaGVtZUNvbnRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3JlYWN0LlRoZW1lQ29udGV4dDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3JlYWN0LmNzcztcbiAgfVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBzdHlsZWQ7XG5leHBvcnRzLmludGVybmFsX3Byb2Nlc3NTdHlsZXMgPSB2b2lkIDA7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJrZXlmcmFtZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3JlYWN0LmtleWZyYW1lcztcbiAgfVxufSk7XG52YXIgX3N0eWxlZCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBlbW90aW9uL3N0eWxlZFwiKSk7XG52YXIgX3JlYWN0ID0gcmVxdWlyZShcIkBlbW90aW9uL3JlYWN0XCIpO1xudmFyIF9TdHlsZWRFbmdpbmVQcm92aWRlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vU3R5bGVkRW5naW5lUHJvdmlkZXJcIikpO1xudmFyIF9HbG9iYWxTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL0dsb2JhbFN0eWxlc1wiKSk7XG5mdW5jdGlvbiBzdHlsZWQodGFnLCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0eWxlc0ZhY3RvcnkgPSAoMCwgX3N0eWxlZC5kZWZhdWx0KSh0YWcsIG9wdGlvbnMpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiAoLi4uc3R5bGVzKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyA/IGBcIiR7dGFnfVwiYCA6ICdjb21wb25lbnQnO1xuICAgICAgaWYgKHN0eWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogU2VlbXMgbGlrZSB5b3UgY2FsbGVkIFxcYHN0eWxlZCgke2NvbXBvbmVudH0pKClcXGAgd2l0aG91dCBhIFxcYHN0eWxlXFxgIGFyZ3VtZW50LmAsICdZb3UgbXVzdCBwcm92aWRlIGEgYHN0eWxlc2AgYXJndW1lbnQ6IGBzdHlsZWQoXCJkaXZcIikoc3R5bGVZb3VGb3Jnb3RUb1Bhc3MpYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlcy5zb21lKHN0eWxlID0+IHN0eWxlID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogdGhlIHN0eWxlZCgke2NvbXBvbmVudH0pKC4uLmFyZ3MpIEFQSSByZXF1aXJlcyBhbGwgaXRzIGFyZ3MgdG8gYmUgZGVmaW5lZC5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZXNGYWN0b3J5KC4uLnN0eWxlcyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gc3R5bGVzRmFjdG9yeTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuY29uc3QgaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyA9ICh0YWcsIHByb2Nlc3NvcikgPT4ge1xuICAvLyBFbW90aW9uIGF0dGFjaGVzIGFsbCB0aGUgc3R5bGVzIGFzIGBfX2Vtb3Rpb25fc3R5bGVzYC5cbiAgLy8gUmVmOiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvMTZkOTcxZDBkYTIyOTU5NmQ2YmNjMzlkMjgyYmE5NzUzYzllZTdjZi9wYWNrYWdlcy9zdHlsZWQvc3JjL2Jhc2UuanMjTDE4NlxuICBpZiAoQXJyYXkuaXNBcnJheSh0YWcuX19lbW90aW9uX3N0eWxlcykpIHtcbiAgICB0YWcuX19lbW90aW9uX3N0eWxlcyA9IHByb2Nlc3Nvcih0YWcuX19lbW90aW9uX3N0eWxlcyk7XG4gIH1cbn07XG5leHBvcnRzLmludGVybmFsX3Byb2Nlc3NTdHlsZXMgPSBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzOyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWVwbWVyZ2U7XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2lzLXBsYWluLW9iai9ibG9iL21haW4vaW5kZXguanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QoaXRlbSkge1xuICBpZiAodHlwZW9mIGl0ZW0gIT09ICdvYmplY3QnIHx8IGl0ZW0gPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGl0ZW0pO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGl0ZW0pICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIGl0ZW0pO1xufVxuZnVuY3Rpb24gZGVlcENsb25lKHNvdXJjZSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0ge307XG4gIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgIG91dHB1dFtrZXldID0gZGVlcENsb25lKHNvdXJjZVtrZXldKTtcbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5mdW5jdGlvbiBkZWVwbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMgPSB7XG4gIGNsb25lOiB0cnVlXG59KSB7XG4gIGNvbnN0IG91dHB1dCA9IG9wdGlvbnMuY2xvbmUgPyAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCB0YXJnZXQpIDogdGFyZ2V0O1xuICBpZiAoaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIGlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgLy8gQXZvaWQgcHJvdG90eXBlIHBvbGx1dGlvblxuICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzUGxhaW5PYmplY3Qoc291cmNlW2tleV0pICYmIGtleSBpbiB0YXJnZXQgJiYgaXNQbGFpbk9iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgLy8gU2luY2UgYG91dHB1dGAgaXMgYSBjbG9uZSBvZiBgdGFyZ2V0YCBhbmQgd2UgaGF2ZSBuYXJyb3dlZCBgdGFyZ2V0YCBpbiB0aGlzIGJsb2NrIHdlIGNhbiBjYXN0IHRvIHRoZSBzYW1lIHR5cGUuXG4gICAgICAgIG91dHB1dFtrZXldID0gZGVlcG1lcmdlKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2xvbmUpIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBpc1BsYWluT2JqZWN0KHNvdXJjZVtrZXldKSA/IGRlZXBDbG9uZShzb3VyY2Vba2V5XSkgOiBzb3VyY2Vba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG52YXIgX2V4cG9ydE5hbWVzID0ge307XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kZWVwbWVyZ2UuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2RlZXBtZXJnZSA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL2RlZXBtZXJnZVwiKSk7XG5PYmplY3Qua2V5cyhfZGVlcG1lcmdlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfZGVlcG1lcmdlW2tleV0pIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX2RlZXBtZXJnZVtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gY2FwaXRhbGl6ZTtcbnZhciBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCIpKTtcbi8vIEl0IHNob3VsZCB0byBiZSBub3RlZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXF1aXZhbGVudCB0byBgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemVgLlxuLy9cbi8vIEEgc3RyaWN0IGNhcGl0YWxpemF0aW9uIHNob3VsZCB1cHBlcmNhc2UgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgaW4gdGhlIHNlbnRlbmNlLlxuLy8gV2Ugb25seSBoYW5kbGUgdGhlIGZpcnN0IHdvcmQuXG5mdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogXFxgY2FwaXRhbGl6ZShzdHJpbmcpXFxgIGV4cGVjdHMgYSBzdHJpbmcgYXJndW1lbnQuYCA6ICgwLCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMi5kZWZhdWx0KSg3KSk7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2NhcGl0YWxpemUuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2NhcGl0YWxpemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NhcGl0YWxpemVcIikpOyIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGdldERpc3BsYXlOYW1lO1xuZXhwb3J0cy5nZXRGdW5jdGlvbk5hbWUgPSBnZXRGdW5jdGlvbk5hbWU7XG52YXIgX3JlYWN0SXMgPSByZXF1aXJlKFwicmVhY3QtaXNcIik7XG4vLyBTaW1wbGlmaWVkIHBvbHlmaWxsIGZvciBJRTExIHN1cHBvcnRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KYW1lc01HcmVlbmUvRnVuY3Rpb24ubmFtZS9ibG9iLzU4YjMxNGQ0YTk4MzExMGMzNjgyZjEyMjhmODQ1ZDM5Y2NjYTE4MTcvRnVuY3Rpb24ubmFtZS5qcyNMM1xuY29uc3QgZm5OYW1lTWF0Y2hSZWdleCA9IC9eXFxzKmZ1bmN0aW9uKD86XFxzfFxccypcXC9cXCouKlxcKlxcL1xccyopKyhbXihcXHMvXSopXFxzKi87XG5mdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWUoZm4pIHtcbiAgY29uc3QgbWF0Y2ggPSBgJHtmbn1gLm1hdGNoKGZuTmFtZU1hdGNoUmVnZXgpO1xuICBjb25zdCBuYW1lID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG4gIHJldHVybiBuYW1lIHx8ICcnO1xufVxuZnVuY3Rpb24gZ2V0RnVuY3Rpb25Db21wb25lbnROYW1lKENvbXBvbmVudCwgZmFsbGJhY2sgPSAnJykge1xuICByZXR1cm4gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8IGdldEZ1bmN0aW9uTmFtZShDb21wb25lbnQpIHx8IGZhbGxiYWNrO1xufVxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGdldEZ1bmN0aW9uQ29tcG9uZW50TmFtZShpbm5lclR5cGUpO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gYCR7d3JhcHBlck5hbWV9KCR7ZnVuY3Rpb25OYW1lfSlgIDogd3JhcHBlck5hbWUpO1xufVxuXG4vKipcbiAqIGNoZXJyeS1waWNrIGZyb21cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzc2OWIxZjI3MGUxMjUxZDlkYmRjZTBmY2JkOWU5MmU1MDJkMDU5YjgvcGFja2FnZXMvc2hhcmVkL2dldENvbXBvbmVudE5hbWUuanNcbiAqIG9yaWdpbmFsbHkgZm9ya2VkIGZyb20gcmVjb21wb3NlL2dldERpc3BsYXlOYW1lIHdpdGggYWRkZWQgSUUxMSBzdXBwb3J0XG4gKi9cbmZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKENvbXBvbmVudCkge1xuICBpZiAoQ29tcG9uZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBDb21wb25lbnQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2V0RnVuY3Rpb25Db21wb25lbnROYW1lKENvbXBvbmVudCwgJ0NvbXBvbmVudCcpO1xuICB9XG5cbiAgLy8gVHlwZVNjcmlwdCBjYW4ndCBoYXZlIGNvbXBvbmVudHMgYXMgb2JqZWN0cyBidXQgdGhleSBleGlzdCBpbiB0aGUgZm9ybSBvZiBgbWVtb2Agb3IgYFN1c3BlbnNlYFxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKENvbXBvbmVudC4kJHR5cGVvZikge1xuICAgICAgY2FzZSBfcmVhY3RJcy5Gb3J3YXJkUmVmOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUoQ29tcG9uZW50LCBDb21wb25lbnQucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuICAgICAgY2FzZSBfcmVhY3RJcy5NZW1vOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUoQ29tcG9uZW50LCBDb21wb25lbnQudHlwZSwgJ21lbW8nKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIF9leHBvcnROYW1lcyA9IHt9O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZ2V0RGlzcGxheU5hbWUuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2dldERpc3BsYXlOYW1lID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vZ2V0RGlzcGxheU5hbWVcIikpO1xuT2JqZWN0LmtleXMoX2dldERpc3BsYXlOYW1lKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfZ2V0RGlzcGxheU5hbWVba2V5XSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfZ2V0RGlzcGxheU5hbWVba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5mdW5jdGlvbiBjbGFtcCh2YWwsIG1pbiA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLCBtYXggPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xuICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbih2YWwsIG1heCkpO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gY2xhbXA7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9jbGFtcC5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfY2xhbXAgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NsYW1wXCIpKTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZGVlcG1lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9kZWVwbWVyZ2VcIikpO1xuZnVuY3Rpb24gbWVyZ2UoYWNjLCBpdGVtKSB7XG4gIGlmICghaXRlbSkge1xuICAgIHJldHVybiBhY2M7XG4gIH1cbiAgcmV0dXJuICgwLCBfZGVlcG1lcmdlLmRlZmF1bHQpKGFjYywgaXRlbSwge1xuICAgIGNsb25lOiBmYWxzZSAvLyBObyBuZWVkIHRvIGNsb25lIGRlZXAsIGl0J3Mgd2F5IGZhc3Rlci5cbiAgfSk7XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBtZXJnZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5jb25zdCByZXNwb25zaXZlUHJvcFR5cGUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX3Byb3BUeXBlcy5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlcy5kZWZhdWx0Lm51bWJlciwgX3Byb3BUeXBlcy5kZWZhdWx0LnN0cmluZywgX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCwgX3Byb3BUeXBlcy5kZWZhdWx0LmFycmF5XSkgOiB7fTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHJlc3BvbnNpdmVQcm9wVHlwZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcHV0ZUJyZWFrcG9pbnRzQmFzZSA9IGNvbXB1dGVCcmVha3BvaW50c0Jhc2U7XG5leHBvcnRzLmNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdDtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMuaGFuZGxlQnJlYWtwb2ludHMgPSBoYW5kbGVCcmVha3BvaW50cztcbmV4cG9ydHMubWVyZ2VCcmVha3BvaW50c0luT3JkZXIgPSBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcjtcbmV4cG9ydHMucmVtb3ZlVW51c2VkQnJlYWtwb2ludHMgPSByZW1vdmVVbnVzZWRCcmVha3BvaW50cztcbmV4cG9ydHMucmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcztcbmV4cG9ydHMudmFsdWVzID0gdm9pZCAwO1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG52YXIgX3Byb3BUeXBlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIF9kZWVwbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKSk7XG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZXJnZVwiKSk7XG4vLyBUaGUgYnJlYWtwb2ludCAqKnN0YXJ0KiogYXQgdGhpcyB2YWx1ZS5cbi8vIEZvciBpbnN0YW5jZSB3aXRoIHRoZSBmaXJzdCBicmVha3BvaW50IHhzOiBbeHMsIHNtWy5cbmNvbnN0IHZhbHVlcyA9IGV4cG9ydHMudmFsdWVzID0ge1xuICB4czogMCxcbiAgLy8gcGhvbmVcbiAgc206IDYwMCxcbiAgLy8gdGFibGV0XG4gIG1kOiA5MDAsXG4gIC8vIHNtYWxsIGxhcHRvcFxuICBsZzogMTIwMCxcbiAgLy8gZGVza3RvcFxuICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbn07XG5jb25zdCBkZWZhdWx0QnJlYWtwb2ludHMgPSB7XG4gIC8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbiAgLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuICBrZXlzOiBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ10sXG4gIHVwOiBrZXkgPT4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWVzW2tleV19cHgpYFxufTtcbmZ1bmN0aW9uIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSkge1xuICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lIHx8IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICByZXR1cm4gcHJvcFZhbHVlLnJlZHVjZSgoYWNjLCBpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgYWNjW3RoZW1lQnJlYWtwb2ludHMudXAodGhlbWVCcmVha3BvaW50cy5rZXlzW2luZGV4XSldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVtpbmRleF0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcFZhbHVlKS5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgLy8ga2V5IGlzIGJyZWFrcG9pbnRcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGVtZUJyZWFrcG9pbnRzLnZhbHVlcyB8fCB2YWx1ZXMpLmluZGV4T2YoYnJlYWtwb2ludCkgIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG1lZGlhS2V5ID0gdGhlbWVCcmVha3BvaW50cy51cChicmVha3BvaW50KTtcbiAgICAgICAgYWNjW21lZGlhS2V5XSA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWVbYnJlYWtwb2ludF0sIGJyZWFrcG9pbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3NzS2V5ID0gYnJlYWtwb2ludDtcbiAgICAgICAgYWNjW2Nzc0tleV0gPSBwcm9wVmFsdWVbY3NzS2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWUpO1xuICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gYnJlYWtwb2ludHMoc3R5bGVGdW5jdGlvbikge1xuICAvLyBmYWxzZSBwb3NpdGl2ZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbiAgY29uc3QgbmV3U3R5bGVGdW5jdGlvbiA9IHByb3BzID0+IHtcbiAgICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lIHx8IHt9O1xuICAgIGNvbnN0IGJhc2UgPSBzdHlsZUZ1bmN0aW9uKHByb3BzKTtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIGNvbnN0IGV4dGVuZGVkID0gdGhlbWVCcmVha3BvaW50cy5rZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGlmIChwcm9wc1trZXldKSB7XG4gICAgICAgIGFjYyA9IGFjYyB8fCB7fTtcbiAgICAgICAgYWNjW3RoZW1lQnJlYWtwb2ludHMudXAoa2V5KV0gPSBzdHlsZUZ1bmN0aW9uKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgICAgIHRoZW1lXG4gICAgICAgIH0sIHByb3BzW2tleV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbnVsbCk7XG4gICAgcmV0dXJuICgwLCBfbWVyZ2UuZGVmYXVsdCkoYmFzZSwgZXh0ZW5kZWQpO1xuICB9O1xuICBuZXdTdHlsZUZ1bmN0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBzdHlsZUZ1bmN0aW9uLnByb3BUeXBlcywge1xuICAgIHhzOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIHNtOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIG1kOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIGxnOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIHhsOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0XG4gIH0pIDoge307XG4gIG5ld1N0eWxlRnVuY3Rpb24uZmlsdGVyUHJvcHMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgLi4uc3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wc107XG4gIHJldHVybiBuZXdTdHlsZUZ1bmN0aW9uO1xufVxuZnVuY3Rpb24gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQgPSB7fSkge1xuICB2YXIgX2JyZWFrcG9pbnRzSW5wdXQka2V5O1xuICBjb25zdCBicmVha3BvaW50c0luT3JkZXIgPSAoX2JyZWFrcG9pbnRzSW5wdXQka2V5ID0gYnJlYWtwb2ludHNJbnB1dC5rZXlzKSA9PSBudWxsID8gdm9pZCAwIDogX2JyZWFrcG9pbnRzSW5wdXQka2V5LnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50U3R5bGVLZXkgPSBicmVha3BvaW50c0lucHV0LnVwKGtleSk7XG4gICAgYWNjW2JyZWFrcG9pbnRTdHlsZUtleV0gPSB7fTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBicmVha3BvaW50c0luT3JkZXIgfHwge307XG59XG5mdW5jdGlvbiByZW1vdmVVbnVzZWRCcmVha3BvaW50cyhicmVha3BvaW50S2V5cywgc3R5bGUpIHtcbiAgcmV0dXJuIGJyZWFrcG9pbnRLZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50T3V0cHV0ID0gYWNjW2tleV07XG4gICAgY29uc3QgaXNCcmVha3BvaW50VW51c2VkID0gIWJyZWFrcG9pbnRPdXRwdXQgfHwgT2JqZWN0LmtleXMoYnJlYWtwb2ludE91dHB1dCkubGVuZ3RoID09PSAwO1xuICAgIGlmIChpc0JyZWFrcG9pbnRVbnVzZWQpIHtcbiAgICAgIGRlbGV0ZSBhY2Nba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgc3R5bGUpO1xufVxuZnVuY3Rpb24gbWVyZ2VCcmVha3BvaW50c0luT3JkZXIoYnJlYWtwb2ludHNJbnB1dCwgLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGVtcHR5QnJlYWtwb2ludHMgPSBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QoYnJlYWtwb2ludHNJbnB1dCk7XG4gIGNvbnN0IG1lcmdlZE91dHB1dCA9IFtlbXB0eUJyZWFrcG9pbnRzLCAuLi5zdHlsZXNdLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gKDAsIF9kZWVwbWVyZ2UuZGVmYXVsdCkocHJldiwgbmV4dCksIHt9KTtcbiAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpLCBtZXJnZWRPdXRwdXQpO1xufVxuXG4vLyBjb21wdXRlIGJhc2UgZm9yIHJlc3BvbnNpdmUgdmFsdWVzOyBlLmcuLFxuLy8gWzEsMiwzXSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbi8vIHt4czogMSwgc206IDIsIG1kOiAzfSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbmZ1bmN0aW9uIGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cykge1xuICAvLyBmaXhlZCB2YWx1ZVxuICBpZiAodHlwZW9mIGJyZWFrcG9pbnRWYWx1ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IGJhc2UgPSB7fTtcbiAgY29uc3QgYnJlYWtwb2ludHNLZXlzID0gT2JqZWN0LmtleXModGhlbWVCcmVha3BvaW50cyk7XG4gIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goKGJyZWFrcG9pbnQsIGkpID0+IHtcbiAgICAgIGlmIChpIDwgYnJlYWtwb2ludFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgYmFzZVticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgICBpZiAoYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBiYXNlO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICB2YWx1ZXM6IGJyZWFrcG9pbnRWYWx1ZXMsXG4gIGJyZWFrcG9pbnRzOiB0aGVtZUJyZWFrcG9pbnRzLFxuICBiYXNlOiBjdXN0b21CYXNlXG59KSB7XG4gIGNvbnN0IGJhc2UgPSBjdXN0b21CYXNlIHx8IGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhiYXNlKTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJyZWFrcG9pbnRWYWx1ZXM7XG4gIH1cbiAgbGV0IHByZXZpb3VzO1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCwgaSkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzW2ldICE9IG51bGwgPyBicmVha3BvaW50VmFsdWVzW2ldIDogYnJlYWtwb2ludFZhbHVlc1twcmV2aW91c107XG4gICAgICBwcmV2aW91cyA9IGk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYnJlYWtwb2ludFZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gYnJlYWtwb2ludDtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlcztcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gYnJlYWtwb2ludHM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5leHBvcnRzLmdldFBhdGggPSBnZXRQYXRoO1xuZXhwb3J0cy5nZXRTdHlsZVZhbHVlID0gZ2V0U3R5bGVWYWx1ZTtcbnZhciBfY2FwaXRhbGl6ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2FwaXRhbGl6ZVwiKSk7XG52YXIgX3Jlc3BvbnNpdmVQcm9wVHlwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcmVzcG9uc2l2ZVByb3BUeXBlXCIpKTtcbnZhciBfYnJlYWtwb2ludHMgPSByZXF1aXJlKFwiLi9icmVha3BvaW50c1wiKTtcbmZ1bmN0aW9uIGdldFBhdGgob2JqLCBwYXRoLCBjaGVja1ZhcnMgPSB0cnVlKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIENTUyB2YXJpYWJsZXMgYXJlIHVzZWRcbiAgaWYgKG9iaiAmJiBvYmoudmFycyAmJiBjaGVja1ZhcnMpIHtcbiAgICBjb25zdCB2YWwgPSBgdmFycy4ke3BhdGh9YC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiBhY2MgJiYgYWNjW2l0ZW1dID8gYWNjW2l0ZW1dIDogbnVsbCwgb2JqKTtcbiAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICBpZiAoYWNjICYmIGFjY1tpdGVtXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gYWNjW2l0ZW1dO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSwgb2JqKTtcbn1cbmZ1bmN0aW9uIGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsLCB1c2VyVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCkge1xuICBsZXQgdmFsdWU7XG4gIGlmICh0eXBlb2YgdGhlbWVNYXBwaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmcocHJvcFZhbHVlRmluYWwpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhlbWVNYXBwaW5nKSkge1xuICAgIHZhbHVlID0gdGhlbWVNYXBwaW5nW3Byb3BWYWx1ZUZpbmFsXSB8fCB1c2VyVmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBnZXRQYXRoKHRoZW1lTWFwcGluZywgcHJvcFZhbHVlRmluYWwpIHx8IHVzZXJWYWx1ZTtcbiAgfVxuICBpZiAodHJhbnNmb3JtKSB7XG4gICAgdmFsdWUgPSB0cmFuc2Zvcm0odmFsdWUsIHVzZXJWYWx1ZSwgdGhlbWVNYXBwaW5nKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzdHlsZShvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBwcm9wLFxuICAgIGNzc1Byb3BlcnR5ID0gb3B0aW9ucy5wcm9wLFxuICAgIHRoZW1lS2V5LFxuICAgIHRyYW5zZm9ybVxuICB9ID0gb3B0aW9ucztcblxuICAvLyBmYWxzZSBwb3NpdGl2ZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbiAgY29uc3QgZm4gPSBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzW3Byb3BdID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1twcm9wXTtcbiAgICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lO1xuICAgIGNvbnN0IHRoZW1lTWFwcGluZyA9IGdldFBhdGgodGhlbWUsIHRoZW1lS2V5KSB8fCB7fTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBnZXRTdHlsZVZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBwcm9wVmFsdWVGaW5hbCk7XG4gICAgICBpZiAocHJvcFZhbHVlRmluYWwgPT09IHZhbHVlICYmIHR5cGVvZiBwcm9wVmFsdWVGaW5hbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGF2ZW4ndCBmb3VuZCB2YWx1ZVxuICAgICAgICB2YWx1ZSA9IGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIGAke3Byb3B9JHtwcm9wVmFsdWVGaW5hbCA9PT0gJ2RlZmF1bHQnID8gJycgOiAoMCwgX2NhcGl0YWxpemUuZGVmYXVsdCkocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfTtcbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgICBbcHJvcF06IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxuICB9IDoge307XG4gIGZuLmZpbHRlclByb3BzID0gW3Byb3BdO1xuICByZXR1cm4gZm47XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzdHlsZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBtZW1vaXplO1xuZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICBjb25zdCBjYWNoZSA9IHt9O1xuICByZXR1cm4gYXJnID0+IHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuYXJ5U3BhY2luZyA9IGNyZWF0ZVVuYXJ5U3BhY2luZztcbmV4cG9ydHMuY3JlYXRlVW5hcnlVbml0ID0gY3JlYXRlVW5hcnlVbml0O1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZXhwb3J0cy5nZXRTdHlsZUZyb21Qcm9wVmFsdWUgPSBnZXRTdHlsZUZyb21Qcm9wVmFsdWU7XG5leHBvcnRzLmdldFZhbHVlID0gZ2V0VmFsdWU7XG5leHBvcnRzLm1hcmdpbiA9IG1hcmdpbjtcbmV4cG9ydHMubWFyZ2luS2V5cyA9IHZvaWQgMDtcbmV4cG9ydHMucGFkZGluZyA9IHBhZGRpbmc7XG5leHBvcnRzLnBhZGRpbmdLZXlzID0gdm9pZCAwO1xudmFyIF9yZXNwb25zaXZlUHJvcFR5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Jlc3BvbnNpdmVQcm9wVHlwZVwiKSk7XG52YXIgX2JyZWFrcG9pbnRzID0gcmVxdWlyZShcIi4vYnJlYWtwb2ludHNcIik7XG52YXIgX3N0eWxlID0gcmVxdWlyZShcIi4vc3R5bGVcIik7XG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZXJnZVwiKSk7XG52YXIgX21lbW9pemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21lbW9pemVcIikpO1xuY29uc3QgcHJvcGVydGllcyA9IHtcbiAgbTogJ21hcmdpbicsXG4gIHA6ICdwYWRkaW5nJ1xufTtcbmNvbnN0IGRpcmVjdGlvbnMgPSB7XG4gIHQ6ICdUb3AnLFxuICByOiAnUmlnaHQnLFxuICBiOiAnQm90dG9tJyxcbiAgbDogJ0xlZnQnLFxuICB4OiBbJ0xlZnQnLCAnUmlnaHQnXSxcbiAgeTogWydUb3AnLCAnQm90dG9tJ11cbn07XG5jb25zdCBhbGlhc2VzID0ge1xuICBtYXJnaW5YOiAnbXgnLFxuICBtYXJnaW5ZOiAnbXknLFxuICBwYWRkaW5nWDogJ3B4JyxcbiAgcGFkZGluZ1k6ICdweSdcbn07XG5cbi8vIG1lbW9pemUoKSBpbXBhY3Q6XG4vLyBGcm9tIDMwMCwwMDAgb3BzL3NlY1xuLy8gVG8gMzUwLDAwMCBvcHMvc2VjXG5jb25zdCBnZXRDc3NQcm9wZXJ0aWVzID0gKDAsIF9tZW1vaXplLmRlZmF1bHQpKHByb3AgPT4ge1xuICAvLyBJdCdzIG5vdCBhIHNob3J0aGFuZCBub3RhdGlvbi5cbiAgaWYgKHByb3AubGVuZ3RoID4gMikge1xuICAgIGlmIChhbGlhc2VzW3Byb3BdKSB7XG4gICAgICBwcm9wID0gYWxpYXNlc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtwcm9wXTtcbiAgICB9XG4gIH1cbiAgY29uc3QgW2EsIGJdID0gcHJvcC5zcGxpdCgnJyk7XG4gIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1thXTtcbiAgY29uc3QgZGlyZWN0aW9uID0gZGlyZWN0aW9uc1tiXSB8fCAnJztcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGlyZWN0aW9uKSA/IGRpcmVjdGlvbi5tYXAoZGlyID0+IHByb3BlcnR5ICsgZGlyKSA6IFtwcm9wZXJ0eSArIGRpcmVjdGlvbl07XG59KTtcbmNvbnN0IG1hcmdpbktleXMgPSBleHBvcnRzLm1hcmdpbktleXMgPSBbJ20nLCAnbXQnLCAnbXInLCAnbWInLCAnbWwnLCAnbXgnLCAnbXknLCAnbWFyZ2luJywgJ21hcmdpblRvcCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5YJywgJ21hcmdpblknLCAnbWFyZ2luSW5saW5lJywgJ21hcmdpbklubGluZVN0YXJ0JywgJ21hcmdpbklubGluZUVuZCcsICdtYXJnaW5CbG9jaycsICdtYXJnaW5CbG9ja1N0YXJ0JywgJ21hcmdpbkJsb2NrRW5kJ107XG5jb25zdCBwYWRkaW5nS2V5cyA9IGV4cG9ydHMucGFkZGluZ0tleXMgPSBbJ3AnLCAncHQnLCAncHInLCAncGInLCAncGwnLCAncHgnLCAncHknLCAncGFkZGluZycsICdwYWRkaW5nVG9wJywgJ3BhZGRpbmdSaWdodCcsICdwYWRkaW5nQm90dG9tJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdYJywgJ3BhZGRpbmdZJywgJ3BhZGRpbmdJbmxpbmUnLCAncGFkZGluZ0lubGluZVN0YXJ0JywgJ3BhZGRpbmdJbmxpbmVFbmQnLCAncGFkZGluZ0Jsb2NrJywgJ3BhZGRpbmdCbG9ja1N0YXJ0JywgJ3BhZGRpbmdCbG9ja0VuZCddO1xuY29uc3Qgc3BhY2luZ0tleXMgPSBbLi4ubWFyZ2luS2V5cywgLi4ucGFkZGluZ0tleXNdO1xuZnVuY3Rpb24gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCB0aGVtZUtleSwgZGVmYXVsdFZhbHVlLCBwcm9wTmFtZSkge1xuICB2YXIgX2dldFBhdGg7XG4gIGNvbnN0IHRoZW1lU3BhY2luZyA9IChfZ2V0UGF0aCA9ICgwLCBfc3R5bGUuZ2V0UGF0aCkodGhlbWUsIHRoZW1lS2V5LCBmYWxzZSkpICE9IG51bGwgPyBfZ2V0UGF0aCA6IGRlZmF1bHRWYWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWJzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogRXhwZWN0ZWQgJHtwcm9wTmFtZX0gYXJndW1lbnQgdG8gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcsIGdvdCAke2Fic30uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGVtZVNwYWNpbmcgKiBhYnM7XG4gICAgfTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZVNwYWNpbmcpKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhYnMpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFycmF5IHR5cGUgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggbm9uIGludGVnZXIgdmFsdWVzLmAgKyBgWW91IHNob3VsZCBlaXRoZXIgdXNlIGFuIGludGVnZXIgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbmRleCwgb3IgZGVmaW5lIHRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCBhcyBhIG51bWJlci5gXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWJzID4gdGhlbWVTcGFjaW5nLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgdmFsdWUgcHJvdmlkZWQgKCR7YWJzfSkgb3ZlcmZsb3dzLmAsIGBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7SlNPTi5zdHJpbmdpZnkodGhlbWVTcGFjaW5nKX0uYCwgYCR7YWJzfSA+ICR7dGhlbWVTcGFjaW5nLmxlbmd0aCAtIDF9LCB5b3UgbmVlZCB0byBhZGQgdGhlIG1pc3NpbmcgdmFsdWVzLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZ1thYnNdO1xuICAgIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdGhlbWVTcGFjaW5nO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIHZhbHVlICgke3RoZW1lU3BhY2luZ30pIGlzIGludmFsaWQuYCwgJ0l0IHNob3VsZCBiZSBhIG51bWJlciwgYW4gYXJyYXkgb3IgYSBmdW5jdGlvbi4nXS5qb2luKCdcXG4nKSk7XG4gIH1cbiAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVVuYXJ5U3BhY2luZyh0aGVtZSkge1xuICByZXR1cm4gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCAnc3BhY2luZycsIDgsICdzcGFjaW5nJyk7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyB8fCBwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9wVmFsdWU7XG4gIH1cbiAgY29uc3QgYWJzID0gTWF0aC5hYnMocHJvcFZhbHVlKTtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1lcihhYnMpO1xuICBpZiAocHJvcFZhbHVlID49IDApIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lZCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gLXRyYW5zZm9ybWVkO1xuICB9XG4gIHJldHVybiBgLSR7dHJhbnNmb3JtZWR9YDtcbn1cbmZ1bmN0aW9uIGdldFN0eWxlRnJvbVByb3BWYWx1ZShjc3NQcm9wZXJ0aWVzLCB0cmFuc2Zvcm1lcikge1xuICByZXR1cm4gcHJvcFZhbHVlID0+IGNzc1Byb3BlcnRpZXMucmVkdWNlKChhY2MsIGNzc1Byb3BlcnR5KSA9PiB7XG4gICAgYWNjW2Nzc1Byb3BlcnR5XSA9IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpIHtcbiAgLy8gVXNpbmcgYSBoYXNoIGNvbXB1dGF0aW9uIG92ZXIgYW4gYXJyYXkgaXRlcmF0aW9uIGNvdWxkIGJlIGZhc3RlciwgYnV0IHdpdGggb25seSAyOCBpdGVtcyxcbiAgLy8gaXQncyBkb2Vzbid0IHdvcnRoIHRoZSBidW5kbGUgc2l6ZS5cbiAgaWYgKGtleXMuaW5kZXhPZihwcm9wKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjc3NQcm9wZXJ0aWVzID0gZ2V0Q3NzUHJvcGVydGllcyhwcm9wKTtcbiAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKTtcbiAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcF07XG4gIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xufVxuZnVuY3Rpb24gc3R5bGUocHJvcHMsIGtleXMpIHtcbiAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcocHJvcHMudGhlbWUpO1xuICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLm1hcChwcm9wID0+IHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpKS5yZWR1Y2UoX21lcmdlLmRlZmF1bHQsIHt9KTtcbn1cbmZ1bmN0aW9uIG1hcmdpbihwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIG1hcmdpbktleXMpO1xufVxubWFyZ2luLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBtYXJnaW5LZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHQ7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbm1hcmdpbi5maWx0ZXJQcm9wcyA9IG1hcmdpbktleXM7XG5mdW5jdGlvbiBwYWRkaW5nKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgcGFkZGluZ0tleXMpO1xufVxucGFkZGluZy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcGFkZGluZ0tleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdDtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xucGFkZGluZy5maWx0ZXJQcm9wcyA9IHBhZGRpbmdLZXlzO1xuZnVuY3Rpb24gc3BhY2luZyhwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIHNwYWNpbmdLZXlzKTtcbn1cbnNwYWNpbmcucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHNwYWNpbmdLZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHQ7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbnNwYWNpbmcuZmlsdGVyUHJvcHMgPSBzcGFjaW5nS2V5cztcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHNwYWNpbmc7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZXJnZVwiKSk7XG5mdW5jdGlvbiBjb21wb3NlKC4uLnN0eWxlcykge1xuICBjb25zdCBoYW5kbGVycyA9IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IHtcbiAgICBzdHlsZS5maWx0ZXJQcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgYWNjW3Byb3BdID0gc3R5bGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICBpZiAoaGFuZGxlcnNbcHJvcF0pIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbWVyZ2UuZGVmYXVsdCkoYWNjLCBoYW5kbGVyc1twcm9wXShwcm9wcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH07XG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc3R5bGUucHJvcFR5cGVzKSwge30pIDoge307XG4gIGZuLmZpbHRlclByb3BzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gYWNjLmNvbmNhdChzdHlsZS5maWx0ZXJQcm9wcyksIFtdKTtcbiAgcmV0dXJuIGZuO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gY29tcG9zZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9yZGVyVG9wQ29sb3IgPSBleHBvcnRzLmJvcmRlclRvcCA9IGV4cG9ydHMuYm9yZGVyUmlnaHRDb2xvciA9IGV4cG9ydHMuYm9yZGVyUmlnaHQgPSBleHBvcnRzLmJvcmRlclJhZGl1cyA9IGV4cG9ydHMuYm9yZGVyTGVmdENvbG9yID0gZXhwb3J0cy5ib3JkZXJMZWZ0ID0gZXhwb3J0cy5ib3JkZXJDb2xvciA9IGV4cG9ydHMuYm9yZGVyQm90dG9tQ29sb3IgPSBleHBvcnRzLmJvcmRlckJvdHRvbSA9IGV4cG9ydHMuYm9yZGVyID0gdm9pZCAwO1xuZXhwb3J0cy5ib3JkZXJUcmFuc2Zvcm0gPSBib3JkZXJUcmFuc2Zvcm07XG5leHBvcnRzLm91dGxpbmVDb2xvciA9IGV4cG9ydHMub3V0bGluZSA9IGV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfcmVzcG9uc2l2ZVByb3BUeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXNwb25zaXZlUHJvcFR5cGVcIikpO1xudmFyIF9zdHlsZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVcIikpO1xudmFyIF9jb21wb3NlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb3NlXCIpKTtcbnZhciBfc3BhY2luZyA9IHJlcXVpcmUoXCIuL3NwYWNpbmdcIik7XG52YXIgX2JyZWFrcG9pbnRzID0gcmVxdWlyZShcIi4vYnJlYWtwb2ludHNcIik7XG5mdW5jdGlvbiBib3JkZXJUcmFuc2Zvcm0odmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGAke3ZhbHVlfXB4IHNvbGlkYDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUJvcmRlclN0eWxlKHByb3AsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gICAgcHJvcCxcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybVxuICB9KTtcbn1cbmNvbnN0IGJvcmRlciA9IGV4cG9ydHMuYm9yZGVyID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlcicsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBib3JkZXJUb3AgPSBleHBvcnRzLmJvcmRlclRvcCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJUb3AnLCBib3JkZXJUcmFuc2Zvcm0pO1xuY29uc3QgYm9yZGVyUmlnaHQgPSBleHBvcnRzLmJvcmRlclJpZ2h0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclJpZ2h0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmNvbnN0IGJvcmRlckJvdHRvbSA9IGV4cG9ydHMuYm9yZGVyQm90dG9tID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbScsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBib3JkZXJMZWZ0ID0gZXhwb3J0cy5ib3JkZXJMZWZ0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckxlZnQnLCBib3JkZXJUcmFuc2Zvcm0pO1xuY29uc3QgYm9yZGVyQ29sb3IgPSBleHBvcnRzLmJvcmRlckNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckNvbG9yJyk7XG5jb25zdCBib3JkZXJUb3BDb2xvciA9IGV4cG9ydHMuYm9yZGVyVG9wQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wQ29sb3InKTtcbmNvbnN0IGJvcmRlclJpZ2h0Q29sb3IgPSBleHBvcnRzLmJvcmRlclJpZ2h0Q29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyUmlnaHRDb2xvcicpO1xuY29uc3QgYm9yZGVyQm90dG9tQ29sb3IgPSBleHBvcnRzLmJvcmRlckJvdHRvbUNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbUNvbG9yJyk7XG5jb25zdCBib3JkZXJMZWZ0Q29sb3IgPSBleHBvcnRzLmJvcmRlckxlZnRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0Q29sb3InKTtcbmNvbnN0IG91dGxpbmUgPSBleHBvcnRzLm91dGxpbmUgPSBjcmVhdGVCb3JkZXJTdHlsZSgnb3V0bGluZScsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBvdXRsaW5lQ29sb3IgPSBleHBvcnRzLm91dGxpbmVDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lQ29sb3InKTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3QgYm9yZGVyUmFkaXVzID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuYm9yZGVyUmFkaXVzICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuYm9yZGVyUmFkaXVzICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NoYXBlLmJvcmRlclJhZGl1cycsIDQsICdib3JkZXJSYWRpdXMnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGJvcmRlclJhZGl1czogKDAsIF9zcGFjaW5nLmdldFZhbHVlKSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcHMuYm9yZGVyUmFkaXVzLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmV4cG9ydHMuYm9yZGVyUmFkaXVzID0gYm9yZGVyUmFkaXVzO1xuYm9yZGVyUmFkaXVzLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGJvcmRlclJhZGl1czogX3Jlc3BvbnNpdmVQcm9wVHlwZS5kZWZhdWx0XG59IDoge307XG5ib3JkZXJSYWRpdXMuZmlsdGVyUHJvcHMgPSBbJ2JvcmRlclJhZGl1cyddO1xuY29uc3QgYm9yZGVycyA9ICgwLCBfY29tcG9zZS5kZWZhdWx0KShib3JkZXIsIGJvcmRlclRvcCwgYm9yZGVyUmlnaHQsIGJvcmRlckJvdHRvbSwgYm9yZGVyTGVmdCwgYm9yZGVyQ29sb3IsIGJvcmRlclRvcENvbG9yLCBib3JkZXJSaWdodENvbG9yLCBib3JkZXJCb3R0b21Db2xvciwgYm9yZGVyTGVmdENvbG9yLCBib3JkZXJSYWRpdXMsIG91dGxpbmUsIG91dGxpbmVDb2xvcik7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBib3JkZXJzOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dHYXAgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZVJvd3MgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZUFyZWFzID0gZXhwb3J0cy5ncmlkUm93ID0gZXhwb3J0cy5ncmlkQ29sdW1uID0gZXhwb3J0cy5ncmlkQXV0b1Jvd3MgPSBleHBvcnRzLmdyaWRBdXRvRmxvdyA9IGV4cG9ydHMuZ3JpZEF1dG9Db2x1bW5zID0gZXhwb3J0cy5ncmlkQXJlYSA9IGV4cG9ydHMuZ2FwID0gZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5jb2x1bW5HYXAgPSB2b2lkIDA7XG52YXIgX3N0eWxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHlsZVwiKSk7XG52YXIgX2NvbXBvc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvc2VcIikpO1xudmFyIF9zcGFjaW5nID0gcmVxdWlyZShcIi4vc3BhY2luZ1wiKTtcbnZhciBfYnJlYWtwb2ludHMgPSByZXF1aXJlKFwiLi9icmVha3BvaW50c1wiKTtcbnZhciBfcmVzcG9uc2l2ZVByb3BUeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXNwb25zaXZlUHJvcFR5cGVcIikpO1xuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3QgZ2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuZ2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZ2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnZ2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBnYXA6ICgwLCBfc3BhY2luZy5nZXRWYWx1ZSkodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLmdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLmdhcCA9IGdhcDtcbmdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBnYXA6IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxufSA6IHt9O1xuZ2FwLmZpbHRlclByb3BzID0gWydnYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3QgY29sdW1uR2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuY29sdW1uR2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuY29sdW1uR2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnY29sdW1uR2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBjb2x1bW5HYXA6ICgwLCBfc3BhY2luZy5nZXRWYWx1ZSkodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLmNvbHVtbkdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLmNvbHVtbkdhcCA9IGNvbHVtbkdhcDtcbmNvbHVtbkdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBjb2x1bW5HYXA6IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxufSA6IHt9O1xuY29sdW1uR2FwLmZpbHRlclByb3BzID0gWydjb2x1bW5HYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3Qgcm93R2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMucm93R2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMucm93R2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAncm93R2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICByb3dHYXA6ICgwLCBfc3BhY2luZy5nZXRWYWx1ZSkodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLnJvd0dhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLnJvd0dhcCA9IHJvd0dhcDtcbnJvd0dhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICByb3dHYXA6IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxufSA6IHt9O1xucm93R2FwLmZpbHRlclByb3BzID0gWydyb3dHYXAnXTtcbmNvbnN0IGdyaWRDb2x1bW4gPSBleHBvcnRzLmdyaWRDb2x1bW4gPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRDb2x1bW4nXG59KTtcbmNvbnN0IGdyaWRSb3cgPSBleHBvcnRzLmdyaWRSb3cgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRSb3cnXG59KTtcbmNvbnN0IGdyaWRBdXRvRmxvdyA9IGV4cG9ydHMuZ3JpZEF1dG9GbG93ID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQXV0b0Zsb3cnXG59KTtcbmNvbnN0IGdyaWRBdXRvQ29sdW1ucyA9IGV4cG9ydHMuZ3JpZEF1dG9Db2x1bW5zID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQXV0b0NvbHVtbnMnXG59KTtcbmNvbnN0IGdyaWRBdXRvUm93cyA9IGV4cG9ydHMuZ3JpZEF1dG9Sb3dzID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQXV0b1Jvd3MnXG59KTtcbmNvbnN0IGdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnXG59KTtcbmNvbnN0IGdyaWRUZW1wbGF0ZVJvd3MgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZVJvd3MgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZVJvd3MnXG59KTtcbmNvbnN0IGdyaWRUZW1wbGF0ZUFyZWFzID0gZXhwb3J0cy5ncmlkVGVtcGxhdGVBcmVhcyA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlQXJlYXMnXG59KTtcbmNvbnN0IGdyaWRBcmVhID0gZXhwb3J0cy5ncmlkQXJlYSA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZEFyZWEnXG59KTtcbmNvbnN0IGdyaWQgPSAoMCwgX2NvbXBvc2UuZGVmYXVsdCkoZ2FwLCBjb2x1bW5HYXAsIHJvd0dhcCwgZ3JpZENvbHVtbiwgZ3JpZFJvdywgZ3JpZEF1dG9GbG93LCBncmlkQXV0b0NvbHVtbnMsIGdyaWRBdXRvUm93cywgZ3JpZFRlbXBsYXRlQ29sdW1ucywgZ3JpZFRlbXBsYXRlUm93cywgZ3JpZFRlbXBsYXRlQXJlYXMsIGdyaWRBcmVhKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGdyaWQ7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLmNvbG9yID0gZXhwb3J0cy5iZ2NvbG9yID0gZXhwb3J0cy5iYWNrZ3JvdW5kQ29sb3IgPSB2b2lkIDA7XG5leHBvcnRzLnBhbGV0dGVUcmFuc2Zvcm0gPSBwYWxldHRlVHJhbnNmb3JtO1xudmFyIF9zdHlsZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVcIikpO1xudmFyIF9jb21wb3NlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb3NlXCIpKTtcbmZ1bmN0aW9uIHBhbGV0dGVUcmFuc2Zvcm0odmFsdWUsIHVzZXJWYWx1ZSkge1xuICBpZiAodXNlclZhbHVlID09PSAnZ3JleScpIHtcbiAgICByZXR1cm4gdXNlclZhbHVlO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmNvbnN0IGNvbG9yID0gZXhwb3J0cy5jb2xvciA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnY29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuY29uc3QgYmdjb2xvciA9IGV4cG9ydHMuYmdjb2xvciA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnYmdjb2xvcicsXG4gIGNzc1Byb3BlcnR5OiAnYmFja2dyb3VuZENvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG59KTtcbmNvbnN0IGJhY2tncm91bmRDb2xvciA9IGV4cG9ydHMuYmFja2dyb3VuZENvbG9yID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuY29uc3QgcGFsZXR0ZSA9ICgwLCBfY29tcG9zZS5kZWZhdWx0KShjb2xvciwgYmdjb2xvciwgYmFja2dyb3VuZENvbG9yKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHBhbGV0dGU7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVXaWR0aCA9IGV4cG9ydHMuc2l6ZUhlaWdodCA9IGV4cG9ydHMubWluV2lkdGggPSBleHBvcnRzLm1pbkhlaWdodCA9IGV4cG9ydHMubWF4V2lkdGggPSBleHBvcnRzLm1heEhlaWdodCA9IGV4cG9ydHMuaGVpZ2h0ID0gZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5ib3hTaXppbmcgPSB2b2lkIDA7XG5leHBvcnRzLnNpemluZ1RyYW5zZm9ybSA9IHNpemluZ1RyYW5zZm9ybTtcbmV4cG9ydHMud2lkdGggPSB2b2lkIDA7XG52YXIgX3N0eWxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHlsZVwiKSk7XG52YXIgX2NvbXBvc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvc2VcIikpO1xudmFyIF9icmVha3BvaW50cyA9IHJlcXVpcmUoXCIuL2JyZWFrcG9pbnRzXCIpO1xuZnVuY3Rpb24gc2l6aW5nVHJhbnNmb3JtKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA8PSAxICYmIHZhbHVlICE9PSAwID8gYCR7dmFsdWUgKiAxMDB9JWAgOiB2YWx1ZTtcbn1cbmNvbnN0IHdpZHRoID0gZXhwb3J0cy53aWR0aCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnd2lkdGgnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5jb25zdCBtYXhXaWR0aCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLm1heFdpZHRoICE9PSB1bmRlZmluZWQgJiYgcHJvcHMubWF4V2lkdGggIT09IG51bGwpIHtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4ge1xuICAgICAgdmFyIF9wcm9wcyR0aGVtZSwgX3Byb3BzJHRoZW1lMjtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSAoKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBfcHJvcHMkdGhlbWUuYnJlYWtwb2ludHMpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IF9wcm9wcyR0aGVtZS52YWx1ZXMpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkdGhlbWVbcHJvcFZhbHVlXSkgfHwgX2JyZWFrcG9pbnRzLnZhbHVlc1twcm9wVmFsdWVdO1xuICAgICAgaWYgKCFicmVha3BvaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IHNpemluZ1RyYW5zZm9ybShwcm9wVmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKChfcHJvcHMkdGhlbWUyID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZTIgPSBfcHJvcHMkdGhlbWUyLmJyZWFrcG9pbnRzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lMi51bml0KSAhPT0gJ3B4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1heFdpZHRoOiBgJHticmVha3BvaW50fSR7cHJvcHMudGhlbWUuYnJlYWtwb2ludHMudW5pdH1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXhXaWR0aDogYnJlYWtwb2ludFxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcHMubWF4V2lkdGgsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZXhwb3J0cy5tYXhXaWR0aCA9IG1heFdpZHRoO1xubWF4V2lkdGguZmlsdGVyUHJvcHMgPSBbJ21heFdpZHRoJ107XG5jb25zdCBtaW5XaWR0aCA9IGV4cG9ydHMubWluV2lkdGggPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ21pbldpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3QgaGVpZ2h0ID0gZXhwb3J0cy5oZWlnaHQgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2hlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmNvbnN0IG1heEhlaWdodCA9IGV4cG9ydHMubWF4SGVpZ2h0ID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdtYXhIZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5jb25zdCBtaW5IZWlnaHQgPSBleHBvcnRzLm1pbkhlaWdodCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnbWluSGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3Qgc2l6ZVdpZHRoID0gZXhwb3J0cy5zaXplV2lkdGggPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ3NpemUnLFxuICBjc3NQcm9wZXJ0eTogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3Qgc2l6ZUhlaWdodCA9IGV4cG9ydHMuc2l6ZUhlaWdodCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnc2l6ZScsXG4gIGNzc1Byb3BlcnR5OiAnaGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3QgYm94U2l6aW5nID0gZXhwb3J0cy5ib3hTaXppbmcgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2JveFNpemluZydcbn0pO1xuY29uc3Qgc2l6aW5nID0gKDAsIF9jb21wb3NlLmRlZmF1bHQpKHdpZHRoLCBtYXhXaWR0aCwgbWluV2lkdGgsIGhlaWdodCwgbWF4SGVpZ2h0LCBtaW5IZWlnaHQsIGJveFNpemluZyk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzaXppbmc7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9zcGFjaW5nID0gcmVxdWlyZShcIi4uL3NwYWNpbmdcIik7XG52YXIgX2JvcmRlcnMgPSByZXF1aXJlKFwiLi4vYm9yZGVyc1wiKTtcbnZhciBfY3NzR3JpZCA9IHJlcXVpcmUoXCIuLi9jc3NHcmlkXCIpO1xudmFyIF9wYWxldHRlID0gcmVxdWlyZShcIi4uL3BhbGV0dGVcIik7XG52YXIgX3NpemluZyA9IHJlcXVpcmUoXCIuLi9zaXppbmdcIik7XG5jb25zdCBkZWZhdWx0U3hDb25maWcgPSB7XG4gIC8vIGJvcmRlcnNcbiAgYm9yZGVyOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IF9ib3JkZXJzLmJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJUb3A6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlclJpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IF9ib3JkZXJzLmJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJCb3R0b206IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckxlZnQ6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJUb3BDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyUmlnaHRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyQm90dG9tQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlckxlZnRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgb3V0bGluZToge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBfYm9yZGVycy5ib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgb3V0bGluZUNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJSYWRpdXM6IHtcbiAgICB0aGVtZUtleTogJ3NoYXBlLmJvcmRlclJhZGl1cycsXG4gICAgc3R5bGU6IF9ib3JkZXJzLmJvcmRlclJhZGl1c1xuICB9LFxuICAvLyBwYWxldHRlXG4gIGNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICB0cmFuc2Zvcm06IF9wYWxldHRlLnBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgYmdjb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgIHRyYW5zZm9ybTogX3BhbGV0dGUucGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICBiYWNrZ3JvdW5kQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIHRyYW5zZm9ybTogX3BhbGV0dGUucGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICAvLyBzcGFjaW5nXG4gIHA6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwdDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHByOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGI6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwbDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHB4OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcHk6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1RvcDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdSaWdodDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCb3R0b206IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nTGVmdDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdYOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1k6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZUVuZDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9jazoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9ja1N0YXJ0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrRW5kOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgbToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbXQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1yOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYjoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWw6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG14OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBteToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5Ub3A6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpblJpZ2h0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5Cb3R0b206IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkxlZnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpblg6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpblk6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lU3RhcnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZUVuZDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2s6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrU3RhcnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrRW5kOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICAvLyBkaXNwbGF5XG4gIGRpc3BsYXlQcmludDoge1xuICAgIGNzc1Byb3BlcnR5OiBmYWxzZSxcbiAgICB0cmFuc2Zvcm06IHZhbHVlID0+ICh7XG4gICAgICAnQG1lZGlhIHByaW50Jzoge1xuICAgICAgICBkaXNwbGF5OiB2YWx1ZVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIGRpc3BsYXk6IHt9LFxuICBvdmVyZmxvdzoge30sXG4gIHRleHRPdmVyZmxvdzoge30sXG4gIHZpc2liaWxpdHk6IHt9LFxuICB3aGl0ZVNwYWNlOiB7fSxcbiAgLy8gZmxleGJveFxuICBmbGV4QmFzaXM6IHt9LFxuICBmbGV4RGlyZWN0aW9uOiB7fSxcbiAgZmxleFdyYXA6IHt9LFxuICBqdXN0aWZ5Q29udGVudDoge30sXG4gIGFsaWduSXRlbXM6IHt9LFxuICBhbGlnbkNvbnRlbnQ6IHt9LFxuICBvcmRlcjoge30sXG4gIGZsZXg6IHt9LFxuICBmbGV4R3Jvdzoge30sXG4gIGZsZXhTaHJpbms6IHt9LFxuICBhbGlnblNlbGY6IHt9LFxuICBqdXN0aWZ5SXRlbXM6IHt9LFxuICBqdXN0aWZ5U2VsZjoge30sXG4gIC8vIGdyaWRcbiAgZ2FwOiB7XG4gICAgc3R5bGU6IF9jc3NHcmlkLmdhcFxuICB9LFxuICByb3dHYXA6IHtcbiAgICBzdHlsZTogX2Nzc0dyaWQucm93R2FwXG4gIH0sXG4gIGNvbHVtbkdhcDoge1xuICAgIHN0eWxlOiBfY3NzR3JpZC5jb2x1bW5HYXBcbiAgfSxcbiAgZ3JpZENvbHVtbjoge30sXG4gIGdyaWRSb3c6IHt9LFxuICBncmlkQXV0b0Zsb3c6IHt9LFxuICBncmlkQXV0b0NvbHVtbnM6IHt9LFxuICBncmlkQXV0b1Jvd3M6IHt9LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiB7fSxcbiAgZ3JpZFRlbXBsYXRlUm93czoge30sXG4gIGdyaWRUZW1wbGF0ZUFyZWFzOiB7fSxcbiAgZ3JpZEFyZWE6IHt9LFxuICAvLyBwb3NpdGlvbnNcbiAgcG9zaXRpb246IHt9LFxuICB6SW5kZXg6IHtcbiAgICB0aGVtZUtleTogJ3pJbmRleCdcbiAgfSxcbiAgdG9wOiB7fSxcbiAgcmlnaHQ6IHt9LFxuICBib3R0b206IHt9LFxuICBsZWZ0OiB7fSxcbiAgLy8gc2hhZG93c1xuICBib3hTaGFkb3c6IHtcbiAgICB0aGVtZUtleTogJ3NoYWRvd3MnXG4gIH0sXG4gIC8vIHNpemluZ1xuICB3aWR0aDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWF4V2lkdGg6IHtcbiAgICBzdHlsZTogX3NpemluZy5tYXhXaWR0aFxuICB9LFxuICBtaW5XaWR0aDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgaGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBfc2l6aW5nLnNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtYXhIZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IF9zaXppbmcuc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1pbkhlaWdodDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgYm94U2l6aW5nOiB7fSxcbiAgLy8gdHlwb2dyYXBoeVxuICBmb250RmFtaWx5OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250U2l6ZToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFN0eWxlOiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250V2VpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBsZXR0ZXJTcGFjaW5nOiB7fSxcbiAgdGV4dFRyYW5zZm9ybToge30sXG4gIGxpbmVIZWlnaHQ6IHt9LFxuICB0ZXh0QWxpZ246IHt9LFxuICB0eXBvZ3JhcGh5OiB7XG4gICAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfVxufTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGRlZmF1bHRTeENvbmZpZzsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMudW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4O1xudmFyIF9jYXBpdGFsaXplID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9jYXBpdGFsaXplXCIpKTtcbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9tZXJnZVwiKSk7XG52YXIgX3N0eWxlID0gcmVxdWlyZShcIi4uL3N0eWxlXCIpO1xudmFyIF9icmVha3BvaW50cyA9IHJlcXVpcmUoXCIuLi9icmVha3BvaW50c1wiKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kZWZhdWx0U3hDb25maWdcIikpO1xuZnVuY3Rpb24gb2JqZWN0c0hhdmVTYW1lS2V5cyguLi5vYmplY3RzKSB7XG4gIGNvbnN0IGFsbEtleXMgPSBvYmplY3RzLnJlZHVjZSgoa2V5cywgb2JqZWN0KSA9PiBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpKSwgW10pO1xuICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoYWxsS2V5cyk7XG4gIHJldHVybiBvYmplY3RzLmV2ZXJ5KG9iamVjdCA9PiB1bmlvbi5zaXplID09PSBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBjYWxsSWZGbihtYXliZUZuLCBhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nID8gbWF5YmVGbihhcmcpIDogbWF5YmVGbjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZnVuY3Rpb24gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCkge1xuICBmdW5jdGlvbiBnZXRUaGVtZVZhbHVlKHByb3AsIHZhbCwgdGhlbWUsIGNvbmZpZykge1xuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgW3Byb3BdOiB2YWwsXG4gICAgICB0aGVtZVxuICAgIH07XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbmZpZ1twcm9wXTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICBjc3NQcm9wZXJ0eSA9IHByb3AsXG4gICAgICB0aGVtZUtleSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHN0eWxlXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPIHY2OiByZW1vdmUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzgxMjNcbiAgICBpZiAodGhlbWVLZXkgPT09ICd0eXBvZ3JhcGh5JyAmJiB2YWwgPT09ICdpbmhlcml0Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3Byb3BdOiB2YWxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHRoZW1lTWFwcGluZyA9ICgwLCBfc3R5bGUuZ2V0UGF0aCkodGhlbWUsIHRoZW1lS2V5KSB8fCB7fTtcbiAgICBpZiAoc3R5bGUpIHtcbiAgICAgIHJldHVybiBzdHlsZShwcm9wcyk7XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9ICgwLCBfc3R5bGUuZ2V0U3R5bGVWYWx1ZSkodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gKDAsIF9zdHlsZS5nZXRTdHlsZVZhbHVlKSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6ICgwLCBfY2FwaXRhbGl6ZS5kZWZhdWx0KShwcm9wVmFsdWVGaW5hbCl9YCwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgfVxuICAgICAgaWYgKGNzc1Byb3BlcnR5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbY3NzUHJvcGVydHldOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgdmFsLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIGZ1bmN0aW9uIHN0eWxlRnVuY3Rpb25TeChwcm9wcykge1xuICAgIHZhciBfdGhlbWUkdW5zdGFibGVfc3hDb247XG4gICAgY29uc3Qge1xuICAgICAgc3gsXG4gICAgICB0aGVtZSA9IHt9XG4gICAgfSA9IHByb3BzIHx8IHt9O1xuICAgIGlmICghc3gpIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBFbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMgd2lsbCBuZWdsZWN0IG51bGxcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gKF90aGVtZSR1bnN0YWJsZV9zeENvbiA9IHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3RoZW1lJHVuc3RhYmxlX3N4Q29uIDogX2RlZmF1bHRTeENvbmZpZy5kZWZhdWx0O1xuXG4gICAgLypcbiAgICAgKiBSZWNlaXZlIGBzeElucHV0YCBhcyBvYmplY3Qgb3IgY2FsbGJhY2tcbiAgICAgKiBhbmQgdGhlbiByZWN1cnNpdmVseSBjaGVjayBrZXlzICYgdmFsdWVzIHRvIGNyZWF0ZSBtZWRpYSBxdWVyeSBvYmplY3Qgc3R5bGVzLlxuICAgICAqICh0aGUgcmVzdWx0IHdpbGwgYmUgdXNlZCBpbiBgc3R5bGVkYClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmF2ZXJzZShzeElucHV0KSB7XG4gICAgICBsZXQgc3hPYmplY3QgPSBzeElucHV0O1xuICAgICAgaWYgKHR5cGVvZiBzeElucHV0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHN4T2JqZWN0ID0gc3hJbnB1dCh0aGVtZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzeElucHV0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyB2YWx1ZVxuICAgICAgICByZXR1cm4gc3hJbnB1dDtcbiAgICAgIH1cbiAgICAgIGlmICghc3hPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBlbXB0eUJyZWFrcG9pbnRzID0gKDAsIF9icmVha3BvaW50cy5jcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QpKHRoZW1lLmJyZWFrcG9pbnRzKTtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpO1xuICAgICAgbGV0IGNzcyA9IGVtcHR5QnJlYWtwb2ludHM7XG4gICAgICBPYmplY3Qua2V5cyhzeE9iamVjdCkuZm9yRWFjaChzdHlsZUtleSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2FsbElmRm4oc3hPYmplY3Rbc3R5bGVLZXldLCB0aGVtZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChjb25maWdbc3R5bGVLZXldKSB7XG4gICAgICAgICAgICAgIGNzcyA9ICgwLCBfbWVyZ2UuZGVmYXVsdCkoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludHNWYWx1ZXMgPSAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKSh7XG4gICAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgICAgfSwgdmFsdWUsIHggPT4gKHtcbiAgICAgICAgICAgICAgICBbc3R5bGVLZXldOiB4XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgaWYgKG9iamVjdHNIYXZlU2FtZUtleXMoYnJlYWtwb2ludHNWYWx1ZXMsIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNzc1tzdHlsZUtleV0gPSBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgICAgICAgICAgICAgc3g6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjc3MgPSAoMCwgX21lcmdlLmRlZmF1bHQpKGNzcywgYnJlYWtwb2ludHNWYWx1ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNzcyA9ICgwLCBfbWVyZ2UuZGVmYXVsdCkoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUsIGNvbmZpZykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5yZW1vdmVVbnVzZWRCcmVha3BvaW50cykoYnJlYWtwb2ludHNLZXlzLCBjc3MpO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShzeCkgPyBzeC5tYXAodHJhdmVyc2UpIDogdHJhdmVyc2Uoc3gpO1xuICB9XG4gIHJldHVybiBzdHlsZUZ1bmN0aW9uU3g7XG59XG5jb25zdCBzdHlsZUZ1bmN0aW9uU3ggPSB1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3goKTtcbnN0eWxlRnVuY3Rpb25TeC5maWx0ZXJQcm9wcyA9IFsnc3gnXTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHN0eWxlRnVuY3Rpb25TeDsiLCAiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4dGVuZFN4UHJvcDtcbnZhciBfZXh0ZW5kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIikpO1xudmFyIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiKSk7XG52YXIgX2RlZXBtZXJnZSA9IHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kZWZhdWx0U3hDb25maWdcIikpO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wic3hcIl07XG5jb25zdCBzcGxpdFByb3BzID0gcHJvcHMgPT4ge1xuICB2YXIgX3Byb3BzJHRoZW1lJHVuc3RhYmxlLCBfcHJvcHMkdGhlbWU7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBzeXN0ZW1Qcm9wczoge30sXG4gICAgb3RoZXJQcm9wczoge31cbiAgfTtcbiAgY29uc3QgY29uZmlnID0gKF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA9IHByb3BzID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3Byb3BzJHRoZW1lJHVuc3RhYmxlIDogX2RlZmF1bHRTeENvbmZpZy5kZWZhdWx0O1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICBpZiAoY29uZmlnW3Byb3BdKSB7XG4gICAgICByZXN1bHQuc3lzdGVtUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0Lm90aGVyUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmZ1bmN0aW9uIGV4dGVuZFN4UHJvcChwcm9wcykge1xuICBjb25zdCB7XG4gICAgICBzeDogaW5TeFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHtcbiAgICBzeXN0ZW1Qcm9wcyxcbiAgICBvdGhlclByb3BzXG4gIH0gPSBzcGxpdFByb3BzKG90aGVyKTtcbiAgbGV0IGZpbmFsU3g7XG4gIGlmIChBcnJheS5pc0FycmF5KGluU3gpKSB7XG4gICAgZmluYWxTeCA9IFtzeXN0ZW1Qcm9wcywgLi4uaW5TeF07XG4gIH0gZWxzZSBpZiAodHlwZW9mIGluU3ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBmaW5hbFN4ID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGluU3goLi4uYXJncyk7XG4gICAgICBpZiAoISgwLCBfZGVlcG1lcmdlLmlzUGxhaW5PYmplY3QpKHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHN5c3RlbVByb3BzO1xuICAgICAgfVxuICAgICAgcmV0dXJuICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHN5c3RlbVByb3BzLCByZXN1bHQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZmluYWxTeCA9ICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHN5c3RlbVByb3BzLCBpblN4KTtcbiAgfVxuICByZXR1cm4gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgb3RoZXJQcm9wcywge1xuICAgIHN4OiBmaW5hbFN4XG4gIH0pO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfc3R5bGVGdW5jdGlvblN4LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXh0ZW5kU3hQcm9wXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9leHRlbmRTeFByb3AuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3hcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3N0eWxlRnVuY3Rpb25TeC51bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kZWZhdWx0U3hDb25maWcuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX3N0eWxlRnVuY3Rpb25TeCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL3N0eWxlRnVuY3Rpb25TeFwiKSk7XG52YXIgX2V4dGVuZFN4UHJvcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZXh0ZW5kU3hQcm9wXCIpKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kZWZhdWx0U3hDb25maWdcIikpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJyZWFrcG9pbnRLZXlzID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlQnJlYWtwb2ludHM7XG52YXIgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpKTtcbnZhciBfZXh0ZW5kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIikpO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1widmFsdWVzXCIsIFwidW5pdFwiLCBcInN0ZXBcIl07XG4vLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4vLyBJdCBjYW4ndCBiZSBjb25maWd1cmVkIGFzIGl0J3MgdXNlZCBzdGF0aWNhbGx5IGZvciBwcm9wVHlwZXMuXG5jb25zdCBicmVha3BvaW50S2V5cyA9IGV4cG9ydHMuYnJlYWtwb2ludEtleXMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ107XG5jb25zdCBzb3J0QnJlYWtwb2ludHNWYWx1ZXMgPSB2YWx1ZXMgPT4ge1xuICBjb25zdCBicmVha3BvaW50c0FzQXJyYXkgPSBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcChrZXkgPT4gKHtcbiAgICBrZXksXG4gICAgdmFsOiB2YWx1ZXNba2V5XVxuICB9KSkgfHwgW107XG4gIC8vIFNvcnQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gIGJyZWFrcG9pbnRzQXNBcnJheS5zb3J0KChicmVha3BvaW50MSwgYnJlYWtwb2ludDIpID0+IGJyZWFrcG9pbnQxLnZhbCAtIGJyZWFrcG9pbnQyLnZhbCk7XG4gIHJldHVybiBicmVha3BvaW50c0FzQXJyYXkucmVkdWNlKChhY2MsIG9iaikgPT4ge1xuICAgIHJldHVybiAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBhY2MsIHtcbiAgICAgIFtvYmoua2V5XTogb2JqLnZhbFxuICAgIH0pO1xuICB9LCB7fSk7XG59O1xuXG4vLyBLZWVwIGluIG1pbmQgdGhhdCBAbWVkaWEgaXMgaW5jbHVzaXZlIGJ5IHRoZSBDU1Mgc3BlY2lmaWNhdGlvbi5cbmZ1bmN0aW9uIGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzKSB7XG4gIGNvbnN0IHtcbiAgICAgIC8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuICAgICAgLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc20pLlxuICAgICAgdmFsdWVzID0ge1xuICAgICAgICB4czogMCxcbiAgICAgICAgLy8gcGhvbmVcbiAgICAgICAgc206IDYwMCxcbiAgICAgICAgLy8gdGFibGV0XG4gICAgICAgIG1kOiA5MDAsXG4gICAgICAgIC8vIHNtYWxsIGxhcHRvcFxuICAgICAgICBsZzogMTIwMCxcbiAgICAgICAgLy8gZGVza3RvcFxuICAgICAgICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbiAgICAgIH0sXG4gICAgICB1bml0ID0gJ3B4JyxcbiAgICAgIHN0ZXAgPSA1XG4gICAgfSA9IGJyZWFrcG9pbnRzLFxuICAgIG90aGVyID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShicmVha3BvaW50cywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgc29ydGVkVmFsdWVzID0gc29ydEJyZWFrcG9pbnRzVmFsdWVzKHZhbHVlcyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzb3J0ZWRWYWx1ZXMpO1xuICBmdW5jdGlvbiB1cChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5XSA6IGtleTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWV9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIGRvd24oa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1heC13aWR0aDoke3ZhbHVlIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gYmV0d2VlbihzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgZW5kSW5kZXggPSBrZXlzLmluZGV4T2YoZW5kKTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dHlwZW9mIHZhbHVlc1tzdGFydF0gPT09ICdudW1iZXInID8gdmFsdWVzW3N0YXJ0XSA6IHN0YXJ0fSR7dW5pdH0pIGFuZCBgICsgYChtYXgtd2lkdGg6JHsoZW5kSW5kZXggIT09IC0xICYmIHR5cGVvZiB2YWx1ZXNba2V5c1tlbmRJbmRleF1dID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXlzW2VuZEluZGV4XV0gOiBlbmQpIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gb25seShrZXkpIHtcbiAgICBpZiAoa2V5cy5pbmRleE9mKGtleSkgKyAxIDwga2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKTtcbiAgICB9XG4gICAgcmV0dXJuIHVwKGtleSk7XG4gIH1cbiAgZnVuY3Rpb24gbm90KGtleSkge1xuICAgIC8vIGhhbmRsZSBmaXJzdCBhbmQgbGFzdCBrZXkgc2VwYXJhdGVseSwgZm9yIGJldHRlciByZWFkYWJpbGl0eVxuICAgIGNvbnN0IGtleUluZGV4ID0ga2V5cy5pbmRleE9mKGtleSk7XG4gICAgaWYgKGtleUluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdXAoa2V5c1sxXSk7XG4gICAgfVxuICAgIGlmIChrZXlJbmRleCA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gZG93bihrZXlzW2tleUluZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKS5yZXBsYWNlKCdAbWVkaWEnLCAnQG1lZGlhIG5vdCBhbGwgYW5kJyk7XG4gIH1cbiAgcmV0dXJuICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgIGtleXMsXG4gICAgdmFsdWVzOiBzb3J0ZWRWYWx1ZXMsXG4gICAgdXAsXG4gICAgZG93bixcbiAgICBiZXR3ZWVuLFxuICAgIG9ubHksXG4gICAgbm90LFxuICAgIHVuaXRcbiAgfSwgb3RoZXIpO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmNvbnN0IHNoYXBlID0ge1xuICBib3JkZXJSYWRpdXM6IDRcbn07XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzaGFwZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVTcGFjaW5nO1xudmFyIF9zcGFjaW5nID0gcmVxdWlyZShcIi4uL3NwYWNpbmdcIik7XG4vLyBUaGUgZGlmZmVyZW50IHNpZ25hdHVyZXMgaW1wbHkgZGlmZmVyZW50IG1lYW5pbmcgZm9yIHRoZWlyIGFyZ3VtZW50cyB0aGF0IGNhbid0IGJlIGV4cHJlc3NlZCBzdHJ1Y3R1cmFsbHkuXG4vLyBXZSBleHByZXNzIHRoZSBkaWZmZXJlbmNlIHdpdGggdmFyaWFibGUgbmFtZXMuXG5cbmZ1bmN0aW9uIGNyZWF0ZVNwYWNpbmcoc3BhY2luZ0lucHV0ID0gOCkge1xuICAvLyBBbHJlYWR5IHRyYW5zZm9ybWVkLlxuICBpZiAoc3BhY2luZ0lucHV0Lm11aSkge1xuICAgIHJldHVybiBzcGFjaW5nSW5wdXQ7XG4gIH1cblxuICAvLyBNYXRlcmlhbCBEZXNpZ24gbGF5b3V0cyBhcmUgdmlzdWFsbHkgYmFsYW5jZWQuIE1vc3QgbWVhc3VyZW1lbnRzIGFsaWduIHRvIGFuIDhkcCBncmlkLCB3aGljaCBhbGlnbnMgYm90aCBzcGFjaW5nIGFuZCB0aGUgb3ZlcmFsbCBsYXlvdXQuXG4gIC8vIFNtYWxsZXIgY29tcG9uZW50cywgc3VjaCBhcyBpY29ucywgY2FuIGFsaWduIHRvIGEgNGRwIGdyaWQuXG4gIC8vIGh0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL2xheW91dC91bmRlcnN0YW5kaW5nLWxheW91dC5odG1sXG4gIGNvbnN0IHRyYW5zZm9ybSA9ICgwLCBfc3BhY2luZy5jcmVhdGVVbmFyeVNwYWNpbmcpKHtcbiAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXRcbiAgfSk7XG4gIGNvbnN0IHNwYWNpbmcgPSAoLi4uYXJnc0lucHV0KSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghKGFyZ3NJbnB1dC5sZW5ndGggPD0gNCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUb28gbWFueSBhcmd1bWVudHMgcHJvdmlkZWQsIGV4cGVjdGVkIGJldHdlZW4gMCBhbmQgNCwgZ290ICR7YXJnc0lucHV0Lmxlbmd0aH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYXJncyA9IGFyZ3NJbnB1dC5sZW5ndGggPT09IDAgPyBbMV0gOiBhcmdzSW5wdXQ7XG4gICAgcmV0dXJuIGFyZ3MubWFwKGFyZ3VtZW50ID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHRyYW5zZm9ybShhcmd1bWVudCk7XG4gICAgICByZXR1cm4gdHlwZW9mIG91dHB1dCA9PT0gJ251bWJlcicgPyBgJHtvdXRwdXR9cHhgIDogb3V0cHV0O1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfTtcbiAgc3BhY2luZy5tdWkgPSB0cnVlO1xuICByZXR1cm4gc3BhY2luZztcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBhcHBseVN0eWxlcztcbi8qKlxuICogQSB1bml2ZXJzYWwgdXRpbGl0eSB0byBzdHlsZSBjb21wb25lbnRzIHdpdGggbXVsdGlwbGUgY29sb3IgbW9kZXMuIEFsd2F5cyB1c2UgaXQgZnJvbSB0aGUgdGhlbWUgb2JqZWN0LlxuICogSXQgd29ya3Mgd2l0aDpcbiAqICAtIFtCYXNpYyB0aGVtZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vZGFyay1tb2RlLylcbiAqICAtIFtDU1MgdGhlbWUgdmFyaWFibGVzXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvZXhwZXJpbWVudGFsLWFwaS9jc3MtdGhlbWUtdmFyaWFibGVzL292ZXJ2aWV3LylcbiAqICAtIFplcm8tcnVudGltZSBlbmdpbmVcbiAqXG4gKiBUaXBzOiBVc2UgYW4gYXJyYXkgb3ZlciBvYmplY3Qgc3ByZWFkIGFuZCBwbGFjZSBgdGhlbWUuYXBwbHlTdHlsZXMoKWAgbGFzdC5cbiAqXG4gKiBcdTI3MDUgW3sgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywgeyBiYWNrZ3JvdW5kOiAnIzFjMWMxYycgfSldXG4gKlxuICogXHVEODNEXHVERUFCIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnLCAuLi50aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pfVxuICpcbiAqIEBleGFtcGxlXG4gKiAxLiB1c2luZyB3aXRoIGBzdHlsZWRgOlxuICogYGBganN4XG4gKiAgIGNvbnN0IENvbXBvbmVudCA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gW1xuICogICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgIH0pLFxuICogICBdKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAyLiB1c2luZyB3aXRoIGBzeGAgcHJvcDpcbiAqIGBgYGpzeFxuICogICA8Qm94IHN4PXt0aGVtZSA9PiBbXG4gKiAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgfSksXG4gKiAgICAgXX1cbiAqICAgLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAzLiB0aGVtaW5nIGEgY29tcG9uZW50OlxuICogYGBganN4XG4gKiAgIGV4dGVuZFRoZW1lKHtcbiAqICAgICBjb21wb25lbnRzOiB7XG4gKiAgICAgICBNdWlCdXR0b246IHtcbiAqICAgICAgICAgc3R5bGVPdmVycmlkZXM6IHtcbiAqICAgICAgICAgICByb290OiAoeyB0aGVtZSB9KSA9PiBbXG4gKiAgICAgICAgICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgICAgICAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgICAgICAgIH0pLFxuICogICAgICAgICAgIF0sXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogICB9KVxuICpgYGBcbiAqL1xuZnVuY3Rpb24gYXBwbHlTdHlsZXMoa2V5LCBzdHlsZXMpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzICdhbnknIHR5cGVcbiAgY29uc3QgdGhlbWUgPSB0aGlzO1xuICBpZiAodGhlbWUudmFycyAmJiB0eXBlb2YgdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIENzc1ZhcnNQcm92aWRlciBpcyB1c2VkIGFzIGEgcHJvdmlkZXIsXG4gICAgLy8gcmV0dXJucyAnKiA6d2hlcmUoW2RhdGEtbXVpLWNvbG9yLXNjaGVtZT1cImxpZ2h0fGRhcmtcIl0pICYnXG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKGtleSkucmVwbGFjZSgvKFxcW1teXFxdXStcXF0pLywgJyo6d2hlcmUoJDEpJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtzZWxlY3Rvcl06IHN0eWxlc1xuICAgIH07XG4gIH1cbiAgaWYgKHRoZW1lLnBhbGV0dGUubW9kZSA9PT0ga2V5KSB7XG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxuICByZXR1cm4ge307XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcbnZhciBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIikpO1xudmFyIF9kZWVwbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKSk7XG52YXIgX2NyZWF0ZUJyZWFrcG9pbnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVCcmVha3BvaW50c1wiKSk7XG52YXIgX3NoYXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zaGFwZVwiKSk7XG52YXIgX2NyZWF0ZVNwYWNpbmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZVNwYWNpbmdcIikpO1xudmFyIF9zdHlsZUZ1bmN0aW9uU3ggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9zdHlsZUZ1bmN0aW9uU3gvc3R5bGVGdW5jdGlvblN4XCIpKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZ1wiKSk7XG52YXIgX2FwcGx5U3R5bGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hcHBseVN0eWxlc1wiKSk7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcInBhbGV0dGVcIiwgXCJzcGFjaW5nXCIsIFwic2hhcGVcIl07XG5mdW5jdGlvbiBjcmVhdGVUaGVtZShvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgY29uc3Qge1xuICAgICAgYnJlYWtwb2ludHM6IGJyZWFrcG9pbnRzSW5wdXQgPSB7fSxcbiAgICAgIHBhbGV0dGU6IHBhbGV0dGVJbnB1dCA9IHt9LFxuICAgICAgc3BhY2luZzogc3BhY2luZ0lucHV0LFxuICAgICAgc2hhcGU6IHNoYXBlSW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICBjb25zdCBicmVha3BvaW50cyA9ICgwLCBfY3JlYXRlQnJlYWtwb2ludHMuZGVmYXVsdCkoYnJlYWtwb2ludHNJbnB1dCk7XG4gIGNvbnN0IHNwYWNpbmcgPSAoMCwgX2NyZWF0ZVNwYWNpbmcuZGVmYXVsdCkoc3BhY2luZ0lucHV0KTtcbiAgbGV0IG11aVRoZW1lID0gKDAsIF9kZWVwbWVyZ2UuZGVmYXVsdCkoe1xuICAgIGJyZWFrcG9pbnRzLFxuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgLy8gSW5qZWN0IGNvbXBvbmVudCBkZWZpbml0aW9ucy5cbiAgICBwYWxldHRlOiAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIG1vZGU6ICdsaWdodCdcbiAgICB9LCBwYWxldHRlSW5wdXQpLFxuICAgIHNwYWNpbmcsXG4gICAgc2hhcGU6ICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIF9zaGFwZS5kZWZhdWx0LCBzaGFwZUlucHV0KVxuICB9LCBvdGhlcik7XG4gIG11aVRoZW1lLmFwcGx5U3R5bGVzID0gX2FwcGx5U3R5bGVzLmRlZmF1bHQ7XG4gIG11aVRoZW1lID0gYXJncy5yZWR1Y2UoKGFjYywgYXJndW1lbnQpID0+ICgwLCBfZGVlcG1lcmdlLmRlZmF1bHQpKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnID0gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgX2RlZmF1bHRTeENvbmZpZy5kZWZhdWx0LCBvdGhlciA9PSBudWxsID8gdm9pZCAwIDogb3RoZXIudW5zdGFibGVfc3hDb25maWcpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeCA9IGZ1bmN0aW9uIHN4KHByb3BzKSB7XG4gICAgcmV0dXJuICgwLCBfc3R5bGVGdW5jdGlvblN4LmRlZmF1bHQpKHtcbiAgICAgIHN4OiBwcm9wcyxcbiAgICAgIHRoZW1lOiB0aGlzXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBtdWlUaGVtZTtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVRoZW1lOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfY3JlYXRlVGhlbWUuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcml2YXRlX2NyZWF0ZUJyZWFrcG9pbnRzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9jcmVhdGVCcmVha3BvaW50cy5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuc3RhYmxlX2FwcGx5U3R5bGVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcHBseVN0eWxlcy5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfY3JlYXRlVGhlbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZVRoZW1lXCIpKTtcbnZhciBfY3JlYXRlQnJlYWtwb2ludHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZUJyZWFrcG9pbnRzXCIpKTtcbnZhciBfYXBwbHlTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FwcGx5U3R5bGVzXCIpKTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWxwaGEgPSBhbHBoYTtcbmV4cG9ydHMuYmxlbmQgPSBibGVuZDtcbmV4cG9ydHMuY29sb3JDaGFubmVsID0gdm9pZCAwO1xuZXhwb3J0cy5kYXJrZW4gPSBkYXJrZW47XG5leHBvcnRzLmRlY29tcG9zZUNvbG9yID0gZGVjb21wb3NlQ29sb3I7XG5leHBvcnRzLmVtcGhhc2l6ZSA9IGVtcGhhc2l6ZTtcbmV4cG9ydHMuZ2V0Q29udHJhc3RSYXRpbyA9IGdldENvbnRyYXN0UmF0aW87XG5leHBvcnRzLmdldEx1bWluYW5jZSA9IGdldEx1bWluYW5jZTtcbmV4cG9ydHMuaGV4VG9SZ2IgPSBoZXhUb1JnYjtcbmV4cG9ydHMuaHNsVG9SZ2IgPSBoc2xUb1JnYjtcbmV4cG9ydHMubGlnaHRlbiA9IGxpZ2h0ZW47XG5leHBvcnRzLnByaXZhdGVfc2FmZUFscGhhID0gcHJpdmF0ZV9zYWZlQWxwaGE7XG5leHBvcnRzLnByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IHZvaWQgMDtcbmV4cG9ydHMucHJpdmF0ZV9zYWZlRGFya2VuID0gcHJpdmF0ZV9zYWZlRGFya2VuO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVFbXBoYXNpemUgPSBwcml2YXRlX3NhZmVFbXBoYXNpemU7XG5leHBvcnRzLnByaXZhdGVfc2FmZUxpZ2h0ZW4gPSBwcml2YXRlX3NhZmVMaWdodGVuO1xuZXhwb3J0cy5yZWNvbXBvc2VDb2xvciA9IHJlY29tcG9zZUNvbG9yO1xuZXhwb3J0cy5yZ2JUb0hleCA9IHJnYlRvSGV4O1xudmFyIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIikpO1xudmFyIF9jbGFtcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2xhbXBcIikpO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5cbi8qKlxuICogUmV0dXJucyBhIG51bWJlciB3aG9zZSB2YWx1ZSBpcyBsaW1pdGVkIHRvIHRoZSBnaXZlbiByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgY2xhbXBlZFxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiBUaGUgbG93ZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHBhcmFtIHtudW1iZXJ9IG1heCBUaGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHJldHVybnMge251bWJlcn0gQSBudW1iZXIgaW4gdGhlIHJhbmdlIFttaW4sIG1heF1cbiAqL1xuZnVuY3Rpb24gY2xhbXBXcmFwcGVyKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRoZSB2YWx1ZSBwcm92aWRlZCAke3ZhbHVlfSBpcyBvdXQgb2YgcmFuZ2UgWyR7bWlufSwgJHttYXh9XS5gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICgwLCBfY2xhbXAuZGVmYXVsdCkodmFsdWUsIG1pbiwgbWF4KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIGZyb20gQ1NTIGhleCBmb3JtYXQgdG8gQ1NTIHJnYiBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBIZXggY29sb3IsIGkuZS4gI25ubiBvciAjbm5ubm5uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyByZ2IgY29sb3Igc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGhleFRvUmdiKGNvbG9yKSB7XG4gIGNvbG9yID0gY29sb3Iuc2xpY2UoMSk7XG4gIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgLnsxLCR7Y29sb3IubGVuZ3RoID49IDYgPyAyIDogMX19YCwgJ2cnKTtcbiAgbGV0IGNvbG9ycyA9IGNvbG9yLm1hdGNoKHJlKTtcbiAgaWYgKGNvbG9ycyAmJiBjb2xvcnNbMF0ubGVuZ3RoID09PSAxKSB7XG4gICAgY29sb3JzID0gY29sb3JzLm1hcChuID0+IG4gKyBuKTtcbiAgfVxuICByZXR1cm4gY29sb3JzID8gYHJnYiR7Y29sb3JzLmxlbmd0aCA9PT0gNCA/ICdhJyA6ICcnfSgke2NvbG9ycy5tYXAoKG4sIGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIGluZGV4IDwgMyA/IHBhcnNlSW50KG4sIDE2KSA6IE1hdGgucm91bmQocGFyc2VJbnQobiwgMTYpIC8gMjU1ICogMTAwMCkgLyAxMDAwO1xuICB9KS5qb2luKCcsICcpfSlgIDogJyc7XG59XG5mdW5jdGlvbiBpbnRUb0hleChpbnQpIHtcbiAgY29uc3QgaGV4ID0gaW50LnRvU3RyaW5nKDE2KTtcbiAgcmV0dXJuIGhleC5sZW5ndGggPT09IDEgPyBgMCR7aGV4fWAgOiBoZXg7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgdHlwZSBhbmQgdmFsdWVzIG9mIGEgY29sb3IuXG4gKlxuICogTm90ZTogRG9lcyBub3Qgc3VwcG9ydCByZ2IgJSB2YWx1ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIEEgTVVJIGNvbG9yIG9iamVjdDoge3R5cGU6IHN0cmluZywgdmFsdWVzOiBudW1iZXJbXX1cbiAqL1xuZnVuY3Rpb24gZGVjb21wb3NlQ29sb3IoY29sb3IpIHtcbiAgLy8gSWRlbXBvdGVudFxuICBpZiAoY29sb3IudHlwZSkge1xuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuICBpZiAoY29sb3IuY2hhckF0KDApID09PSAnIycpIHtcbiAgICByZXR1cm4gZGVjb21wb3NlQ29sb3IoaGV4VG9SZ2IoY29sb3IpKTtcbiAgfVxuICBjb25zdCBtYXJrZXIgPSBjb2xvci5pbmRleE9mKCcoJyk7XG4gIGNvbnN0IHR5cGUgPSBjb2xvci5zdWJzdHJpbmcoMCwgbWFya2VyKTtcbiAgaWYgKFsncmdiJywgJ3JnYmEnLCAnaHNsJywgJ2hzbGEnLCAnY29sb3InXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBVbnN1cHBvcnRlZCBcXGAke2NvbG9yfVxcYCBjb2xvci5cblRoZSBmb2xsb3dpbmcgZm9ybWF0cyBhcmUgc3VwcG9ydGVkOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpLmAgOiAoMCwgX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIuZGVmYXVsdCkoOSwgY29sb3IpKTtcbiAgfVxuICBsZXQgdmFsdWVzID0gY29sb3Iuc3Vic3RyaW5nKG1hcmtlciArIDEsIGNvbG9yLmxlbmd0aCAtIDEpO1xuICBsZXQgY29sb3JTcGFjZTtcbiAgaWYgKHR5cGUgPT09ICdjb2xvcicpIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJyAnKTtcbiAgICBjb2xvclNwYWNlID0gdmFsdWVzLnNoaWZ0KCk7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDQgJiYgdmFsdWVzWzNdLmNoYXJBdCgwKSA9PT0gJy8nKSB7XG4gICAgICB2YWx1ZXNbM10gPSB2YWx1ZXNbM10uc2xpY2UoMSk7XG4gICAgfVxuICAgIGlmIChbJ3NyZ2InLCAnZGlzcGxheS1wMycsICdhOTgtcmdiJywgJ3Byb3Bob3RvLXJnYicsICdyZWMtMjAyMCddLmluZGV4T2YoY29sb3JTcGFjZSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogdW5zdXBwb3J0ZWQgXFxgJHtjb2xvclNwYWNlfVxcYCBjb2xvciBzcGFjZS5cblRoZSBmb2xsb3dpbmcgY29sb3Igc3BhY2VzIGFyZSBzdXBwb3J0ZWQ6IHNyZ2IsIGRpc3BsYXktcDMsIGE5OC1yZ2IsIHByb3Bob3RvLXJnYiwgcmVjLTIwMjAuYCA6ICgwLCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMi5kZWZhdWx0KSgxMCwgY29sb3JTcGFjZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJywnKTtcbiAgfVxuICB2YWx1ZXMgPSB2YWx1ZXMubWFwKHZhbHVlID0+IHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlLFxuICAgIHZhbHVlcyxcbiAgICBjb2xvclNwYWNlXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNoYW5uZWwgY3JlYXRlZCBmcm9tIHRoZSBpbnB1dCBjb2xvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBjaGFubmVsIGZvciB0aGUgY29sb3IsIHRoYXQgY2FuIGJlIHVzZWQgaW4gcmdiYSBvciBoc2xhIGNvbG9yc1xuICovXG5jb25zdCBjb2xvckNoYW5uZWwgPSBjb2xvciA9PiB7XG4gIGNvbnN0IGRlY29tcG9zZWRDb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGRlY29tcG9zZWRDb2xvci52YWx1ZXMuc2xpY2UoMCwgMykubWFwKCh2YWwsIGlkeCkgPT4gZGVjb21wb3NlZENvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xICYmIGlkeCAhPT0gMCA/IGAke3ZhbH0lYCA6IHZhbCkuam9pbignICcpO1xufTtcbmV4cG9ydHMuY29sb3JDaGFubmVsID0gY29sb3JDaGFubmVsO1xuY29uc3QgcHJpdmF0ZV9zYWZlQ29sb3JDaGFubmVsID0gKGNvbG9yLCB3YXJuaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbG9yQ2hhbm5lbChjb2xvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBvYmplY3Qgd2l0aCB0eXBlIGFuZCB2YWx1ZXMgdG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0ge29iamVjdH0gY29sb3IgLSBEZWNvbXBvc2VkIGNvbG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IudHlwZSAtIE9uZSBvZjogJ3JnYicsICdyZ2JhJywgJ2hzbCcsICdoc2xhJywgJ2NvbG9yJ1xuICogQHBhcmFtIHthcnJheX0gY29sb3IudmFsdWVzIC0gW24sbixuXSBvciBbbixuLG4sbl1cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZ1xuICovXG5leHBvcnRzLnByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IHByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbDtcbmZ1bmN0aW9uIHJlY29tcG9zZUNvbG9yKGNvbG9yKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIGNvbG9yU3BhY2VcbiAgfSA9IGNvbG9yO1xuICBsZXQge1xuICAgIHZhbHVlc1xuICB9ID0gY29sb3I7XG4gIGlmICh0eXBlLmluZGV4T2YoJ3JnYicpICE9PSAtMSkge1xuICAgIC8vIE9ubHkgY29udmVydCB0aGUgZmlyc3QgMyB2YWx1ZXMgdG8gaW50IChpLmUuIG5vdCBhbHBoYSlcbiAgICB2YWx1ZXMgPSB2YWx1ZXMubWFwKChuLCBpKSA9PiBpIDwgMyA/IHBhcnNlSW50KG4sIDEwKSA6IG4pO1xuICB9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgdmFsdWVzWzFdID0gYCR7dmFsdWVzWzFdfSVgO1xuICAgIHZhbHVlc1syXSA9IGAke3ZhbHVlc1syXX0lYDtcbiAgfVxuICBpZiAodHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIHZhbHVlcyA9IGAke2NvbG9yU3BhY2V9ICR7dmFsdWVzLmpvaW4oJyAnKX1gO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlcyA9IGAke3ZhbHVlcy5qb2luKCcsICcpfWA7XG4gIH1cbiAgcmV0dXJuIGAke3R5cGV9KCR7dmFsdWVzfSlgO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3IgZnJvbSBDU1MgcmdiIGZvcm1hdCB0byBDU1MgaGV4IGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIFJHQiBjb2xvciwgaS5lLiByZ2IobiwgbiwgbilcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIHJnYiBjb2xvciBzdHJpbmcsIGkuZS4gI25ubm5ublxuICovXG5mdW5jdGlvbiByZ2JUb0hleChjb2xvcikge1xuICAvLyBJZGVtcG90ZW50XG4gIGlmIChjb2xvci5pbmRleE9mKCcjJykgPT09IDApIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbiAgY29uc3Qge1xuICAgIHZhbHVlc1xuICB9ID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICByZXR1cm4gYCMke3ZhbHVlcy5tYXAoKG4sIGkpID0+IGludFRvSGV4KGkgPT09IDMgPyBNYXRoLnJvdW5kKDI1NSAqIG4pIDogbikpLmpvaW4oJycpfWA7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBmcm9tIGhzbCBmb3JtYXQgdG8gcmdiIGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIEhTTCBjb2xvciB2YWx1ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHJnYiBjb2xvciB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gaHNsVG9SZ2IoY29sb3IpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvbnN0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGNvbG9yO1xuICBjb25zdCBoID0gdmFsdWVzWzBdO1xuICBjb25zdCBzID0gdmFsdWVzWzFdIC8gMTAwO1xuICBjb25zdCBsID0gdmFsdWVzWzJdIC8gMTAwO1xuICBjb25zdCBhID0gcyAqIE1hdGgubWluKGwsIDEgLSBsKTtcbiAgY29uc3QgZiA9IChuLCBrID0gKG4gKyBoIC8gMzApICUgMTIpID0+IGwgLSBhICogTWF0aC5tYXgoTWF0aC5taW4oayAtIDMsIDkgLSBrLCAxKSwgLTEpO1xuICBsZXQgdHlwZSA9ICdyZ2InO1xuICBjb25zdCByZ2IgPSBbTWF0aC5yb3VuZChmKDApICogMjU1KSwgTWF0aC5yb3VuZChmKDgpICogMjU1KSwgTWF0aC5yb3VuZChmKDQpICogMjU1KV07XG4gIGlmIChjb2xvci50eXBlID09PSAnaHNsYScpIHtcbiAgICB0eXBlICs9ICdhJztcbiAgICByZ2IucHVzaCh2YWx1ZXNbM10pO1xuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcih7XG4gICAgdHlwZSxcbiAgICB2YWx1ZXM6IHJnYlxuICB9KTtcbn1cbi8qKlxuICogVGhlIHJlbGF0aXZlIGJyaWdodG5lc3Mgb2YgYW55IHBvaW50IGluIGEgY29sb3Igc3BhY2UsXG4gKiBub3JtYWxpemVkIHRvIDAgZm9yIGRhcmtlc3QgYmxhY2sgYW5kIDEgZm9yIGxpZ2h0ZXN0IHdoaXRlLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgcmVsYXRpdmUgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKi9cbmZ1bmN0aW9uIGdldEx1bWluYW5jZShjb2xvcikge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgbGV0IHJnYiA9IGNvbG9yLnR5cGUgPT09ICdoc2wnIHx8IGNvbG9yLnR5cGUgPT09ICdoc2xhJyA/IGRlY29tcG9zZUNvbG9yKGhzbFRvUmdiKGNvbG9yKSkudmFsdWVzIDogY29sb3IudmFsdWVzO1xuICByZ2IgPSByZ2IubWFwKHZhbCA9PiB7XG4gICAgaWYgKGNvbG9yLnR5cGUgIT09ICdjb2xvcicpIHtcbiAgICAgIHZhbCAvPSAyNTU7IC8vIG5vcm1hbGl6ZWRcbiAgICB9XG4gICAgcmV0dXJuIHZhbCA8PSAwLjAzOTI4ID8gdmFsIC8gMTIuOTIgOiAoKHZhbCArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQ7XG4gIH0pO1xuXG4gIC8vIFRydW5jYXRlIGF0IDMgZGlnaXRzXG4gIHJldHVybiBOdW1iZXIoKDAuMjEyNiAqIHJnYlswXSArIDAuNzE1MiAqIHJnYlsxXSArIDAuMDcyMiAqIHJnYlsyXSkudG9GaXhlZCgzKSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgY29udHJhc3QgcmF0aW8gYmV0d2VlbiB0d28gY29sb3JzLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yZWdyb3VuZCAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKClcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYWNrZ3JvdW5kIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKVxuICogQHJldHVybnMge251bWJlcn0gQSBjb250cmFzdCByYXRpbyB2YWx1ZSBpbiB0aGUgcmFuZ2UgMCAtIDIxLlxuICovXG5mdW5jdGlvbiBnZXRDb250cmFzdFJhdGlvKGZvcmVncm91bmQsIGJhY2tncm91bmQpIHtcbiAgY29uc3QgbHVtQSA9IGdldEx1bWluYW5jZShmb3JlZ3JvdW5kKTtcbiAgY29uc3QgbHVtQiA9IGdldEx1bWluYW5jZShiYWNrZ3JvdW5kKTtcbiAgcmV0dXJuIChNYXRoLm1heChsdW1BLCBsdW1CKSArIDAuMDUpIC8gKE1hdGgubWluKGx1bUEsIGx1bUIpICsgMC4wNSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYWJzb2x1dGUgdHJhbnNwYXJlbmN5IG9mIGEgY29sb3IuXG4gKiBBbnkgZXhpc3RpbmcgYWxwaGEgdmFsdWVzIGFyZSBvdmVyd3JpdHRlbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIHZhbHVlIHRvIHNldCB0aGUgYWxwaGEgY2hhbm5lbCB0byBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cbmZ1bmN0aW9uIGFscGhhKGNvbG9yLCB2YWx1ZSkge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgdmFsdWUgPSBjbGFtcFdyYXBwZXIodmFsdWUpO1xuICBpZiAoY29sb3IudHlwZSA9PT0gJ3JnYicgfHwgY29sb3IudHlwZSA9PT0gJ2hzbCcpIHtcbiAgICBjb2xvci50eXBlICs9ICdhJztcbiAgfVxuICBpZiAoY29sb3IudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IGAvJHt2YWx1ZX1gO1xuICB9IGVsc2Uge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcihjb2xvcik7XG59XG5mdW5jdGlvbiBwcml2YXRlX3NhZmVBbHBoYShjb2xvciwgdmFsdWUsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYWxwaGEoY29sb3IsIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIERhcmtlbnMgYSBjb2xvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2VmZmljaWVudCAtIG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5mdW5jdGlvbiBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb2VmZmljaWVudCA9IGNsYW1wV3JhcHBlcihjb2VmZmljaWVudCk7XG4gIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIGNvbG9yLnZhbHVlc1syXSAqPSAxIC0gY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEgfHwgY29sb3IudHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICBjb2xvci52YWx1ZXNbaV0gKj0gMSAtIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlRGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCwgd2FybmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIExpZ2h0ZW5zIGEgY29sb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gY29lZmZpY2llbnQgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvZWZmaWNpZW50ID0gY2xhbXBXcmFwcGVyKGNvZWZmaWNpZW50KTtcbiAgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgY29sb3IudmFsdWVzWzJdICs9ICgxMDAgLSBjb2xvci52YWx1ZXNbMl0pICogY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgyNTUgLSBjb2xvci52YWx1ZXNbaV0pICogY29lZmZpY2llbnQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgxIC0gY29sb3IudmFsdWVzW2ldKSAqIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlTGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59XG5cbi8qKlxuICogRGFya2VuIG9yIGxpZ2h0ZW4gYSBjb2xvciwgZGVwZW5kaW5nIG9uIGl0cyBsdW1pbmFuY2UuXG4gKiBMaWdodCBjb2xvcnMgYXJlIGRhcmtlbmVkLCBkYXJrIGNvbG9ycyBhcmUgbGlnaHRlbmVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZWZmaWNpZW50PTAuMTUgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gZW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCA9IDAuMTUpIHtcbiAgcmV0dXJuIGdldEx1bWluYW5jZShjb2xvcikgPiAwLjUgPyBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSA6IGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbn1cbmZ1bmN0aW9uIHByaXZhdGVfc2FmZUVtcGhhc2l6ZShjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJpdmF0ZV9zYWZlRW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBCbGVuZCBhIHRyYW5zcGFyZW50IG92ZXJsYXkgY29sb3Igd2l0aCBhIGJhY2tncm91bmQgY29sb3IsIHJlc3VsdGluZyBpbiBhIHNpbmdsZVxuICogUkdCIGNvbG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGJhY2tncm91bmQgLSBDU1MgY29sb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBvdmVybGF5IC0gQ1NTIGNvbG9yXG4gKiBAcGFyYW0ge251bWJlcn0gb3BhY2l0eSAtIE9wYWNpdHkgbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZ2FtbWE9MS4wXSAtIEdhbW1hIGNvcnJlY3Rpb24gZmFjdG9yLiBGb3IgZ2FtbWEtY29ycmVjdCBibGVuZGluZywgMi4yIGlzIHVzdWFsLlxuICovXG5mdW5jdGlvbiBibGVuZChiYWNrZ3JvdW5kLCBvdmVybGF5LCBvcGFjaXR5LCBnYW1tYSA9IDEuMCkge1xuICBjb25zdCBibGVuZENoYW5uZWwgPSAoYiwgbykgPT4gTWF0aC5yb3VuZCgoYiAqKiAoMSAvIGdhbW1hKSAqICgxIC0gb3BhY2l0eSkgKyBvICoqICgxIC8gZ2FtbWEpICogb3BhY2l0eSkgKiogZ2FtbWEpO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBkZWNvbXBvc2VDb2xvcihiYWNrZ3JvdW5kKTtcbiAgY29uc3Qgb3ZlcmxheUNvbG9yID0gZGVjb21wb3NlQ29sb3Iob3ZlcmxheSk7XG4gIGNvbnN0IHJnYiA9IFtibGVuZENoYW5uZWwoYmFja2dyb3VuZENvbG9yLnZhbHVlc1swXSwgb3ZlcmxheUNvbG9yLnZhbHVlc1swXSksIGJsZW5kQ2hhbm5lbChiYWNrZ3JvdW5kQ29sb3IudmFsdWVzWzFdLCBvdmVybGF5Q29sb3IudmFsdWVzWzFdKSwgYmxlbmRDaGFubmVsKGJhY2tncm91bmRDb2xvci52YWx1ZXNbMl0sIG92ZXJsYXlDb2xvci52YWx1ZXNbMl0pXTtcbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKHtcbiAgICB0eXBlOiAncmdiJyxcbiAgICB2YWx1ZXM6IHJnYlxuICB9KTtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVN0eWxlZDtcbmV4cG9ydHMuc2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbmV4cG9ydHMuc3lzdGVtRGVmYXVsdFRoZW1lID0gdm9pZCAwO1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG52YXIgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpKTtcbnZhciBfc3R5bGVkRW5naW5lID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIkBtdWkvc3R5bGVkLWVuZ2luZVwiKSk7XG52YXIgX2RlZXBtZXJnZSA9IHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKTtcbnZhciBfY2FwaXRhbGl6ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2FwaXRhbGl6ZVwiKSk7XG52YXIgX2dldERpc3BsYXlOYW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9nZXREaXNwbGF5TmFtZVwiKSk7XG52YXIgX2NyZWF0ZVRoZW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVUaGVtZVwiKSk7XG52YXIgX3N0eWxlRnVuY3Rpb25TeCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVGdW5jdGlvblN4XCIpKTtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm93bmVyU3RhdGVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJ2YXJpYW50c1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcIm5hbWVcIiwgXCJzbG90XCIsIFwic2tpcFZhcmlhbnRzUmVzb2x2ZXJcIiwgXCJza2lwU3hcIiwgXCJvdmVycmlkZXNSZXNvbHZlclwiXTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzI2ZGVkNjEwOWZjZDhjYTk4NzVjYzJjZTQ1NjRmZWU2NzhhM2YzYzUvcGFja2FnZXMvc3R5bGVkL3NyYy91dGlscy5qcyNMNDBcbmZ1bmN0aW9uIGlzU3RyaW5nVGFnKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiZcbiAgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5Njtcbn1cblxuLy8gVXBkYXRlIC9zeXN0ZW0vc3R5bGVkLyNhcGkgaW4gY2FzZSBpZiB0aGlzIGNoYW5nZXNcbmZ1bmN0aW9uIHNob3VsZEZvcndhcmRQcm9wKHByb3ApIHtcbiAgcmV0dXJuIHByb3AgIT09ICdvd25lclN0YXRlJyAmJiBwcm9wICE9PSAndGhlbWUnICYmIHByb3AgIT09ICdzeCcgJiYgcHJvcCAhPT0gJ2FzJztcbn1cbmNvbnN0IHN5c3RlbURlZmF1bHRUaGVtZSA9IGV4cG9ydHMuc3lzdGVtRGVmYXVsdFRoZW1lID0gKDAsIF9jcmVhdGVUaGVtZS5kZWZhdWx0KSgpO1xuY29uc3QgbG93ZXJjYXNlRmlyc3RMZXR0ZXIgPSBzdHJpbmcgPT4ge1xuICBpZiAoIXN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn07XG5mdW5jdGlvbiByZXNvbHZlVGhlbWUoe1xuICBkZWZhdWx0VGhlbWUsXG4gIHRoZW1lLFxuICB0aGVtZUlkXG59KSB7XG4gIHJldHVybiBpc0VtcHR5KHRoZW1lKSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lW3RoZW1lSWRdIHx8IHRoZW1lO1xufVxuZnVuY3Rpb24gZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyKHNsb3QpIHtcbiAgaWYgKCFzbG90KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXNbc2xvdF07XG59XG5mdW5jdGlvbiBwcm9jZXNzU3R5bGVBcmcoY2FsbGFibGVTdHlsZSwgX3JlZikge1xuICBsZXQge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBfcmVmLFxuICAgIHByb3BzID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShfcmVmLCBfZXhjbHVkZWQpO1xuICBjb25zdCByZXNvbHZlZFN0eWxlc0FyZyA9IHR5cGVvZiBjYWxsYWJsZVN0eWxlID09PSAnZnVuY3Rpb24nID8gY2FsbGFibGVTdHlsZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHByb3BzKSkgOiBjYWxsYWJsZVN0eWxlO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZykpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmcuZmxhdE1hcChyZXNvbHZlZFN0eWxlID0+IHByb2Nlc3NTdHlsZUFyZyhyZXNvbHZlZFN0eWxlLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9LCBwcm9wcykpKTtcbiAgfVxuICBpZiAoISFyZXNvbHZlZFN0eWxlc0FyZyAmJiB0eXBlb2YgcmVzb2x2ZWRTdHlsZXNBcmcgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkocmVzb2x2ZWRTdHlsZXNBcmcudmFyaWFudHMpKSB7XG4gICAgY29uc3Qge1xuICAgICAgICB2YXJpYW50cyA9IFtdXG4gICAgICB9ID0gcmVzb2x2ZWRTdHlsZXNBcmcsXG4gICAgICBvdGhlclN0eWxlcyA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkocmVzb2x2ZWRTdHlsZXNBcmcsIF9leGNsdWRlZDIpO1xuICAgIGxldCByZXN1bHQgPSBvdGhlclN0eWxlcztcbiAgICB2YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xuICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiB2YXJpYW50LnByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlzTWF0Y2ggPSB2YXJpYW50LnByb3BzKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhbnQucHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoKG93bmVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG93bmVyU3RhdGVba2V5XSkgIT09IHZhcmlhbnQucHJvcHNba2V5XSAmJiBwcm9wc1trZXldICE9PSB2YXJpYW50LnByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh0eXBlb2YgdmFyaWFudC5zdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhcmlhbnQuc3R5bGUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgICB9LCBwcm9wcywgb3duZXJTdGF0ZSkpIDogdmFyaWFudC5zdHlsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmc7XG59XG5mdW5jdGlvbiBjcmVhdGVTdHlsZWQoaW5wdXQgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGhlbWVJZCxcbiAgICBkZWZhdWx0VGhlbWUgPSBzeXN0ZW1EZWZhdWx0VGhlbWUsXG4gICAgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3AsXG4gICAgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3BcbiAgfSA9IGlucHV0O1xuICBjb25zdCBzeXN0ZW1TeCA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gKDAsIF9zdHlsZUZ1bmN0aW9uU3guZGVmYXVsdCkoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICB0aGVtZUlkXG4gICAgICB9KSlcbiAgICB9KSk7XG4gIH07XG4gIHN5c3RlbVN4Ll9fbXVpX3N5c3RlbVN4ID0gdHJ1ZTtcbiAgcmV0dXJuICh0YWcsIGlucHV0T3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgLy8gRmlsdGVyIG91dCB0aGUgYHN4YCBzdHlsZSBmdW5jdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdHlsZWQgY29tcG9uZW50IHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkgc3R5bGVzIGdlbmVyYXRlZCBieSB0aGUgY29tcG9zaXRlIGNvbXBvbmVudHMuXG4gICAgKDAsIF9zdHlsZWRFbmdpbmUuaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcykodGFnLCBzdHlsZXMgPT4gc3R5bGVzLmZpbHRlcihzdHlsZSA9PiAhKHN0eWxlICE9IG51bGwgJiYgc3R5bGUuX19tdWlfc3lzdGVtU3gpKSk7XG4gICAgY29uc3Qge1xuICAgICAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICBzbG90OiBjb21wb25lbnRTbG90LFxuICAgICAgICBza2lwVmFyaWFudHNSZXNvbHZlcjogaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlcixcbiAgICAgICAgc2tpcFN4OiBpbnB1dFNraXBTeCxcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBvdmVycmlkZXNSZXNvbHZlciA9IGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90KSlcbiAgICAgIH0gPSBpbnB1dE9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShpbnB1dE9wdGlvbnMsIF9leGNsdWRlZDMpO1xuXG4gICAgLy8gaWYgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgb3B0aW9uIGlzIGRlZmluZWQsIHRha2UgdGhlIHZhbHVlLCBvdGhlcndpc2UsIHRydWUgZm9yIHJvb3QgYW5kIGZhbHNlIGZvciBvdGhlciBzbG90cy5cbiAgICBjb25zdCBza2lwVmFyaWFudHNSZXNvbHZlciA9IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgIT09IHVuZGVmaW5lZCA/IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgOlxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGNvbXBvbmVudFNsb3QgJiYgY29tcG9uZW50U2xvdCAhPT0gJ1Jvb3QnICYmIGNvbXBvbmVudFNsb3QgIT09ICdyb290JyB8fCBmYWxzZTtcbiAgICBjb25zdCBza2lwU3ggPSBpbnB1dFNraXBTeCB8fCBmYWxzZTtcbiAgICBsZXQgbGFiZWw7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgbG93ZXJjYXNlRmlyc3RMZXR0ZXIoKWAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgICAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICAgICAgbGFiZWwgPSBgJHtjb21wb25lbnROYW1lfS0ke2xvd2VyY2FzZUZpcnN0TGV0dGVyKGNvbXBvbmVudFNsb3QgfHwgJ1Jvb3QnKX1gO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzaG91bGRGb3J3YXJkUHJvcDtcblxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGlmIChjb21wb25lbnRTbG90ID09PSAnUm9vdCcgfHwgY29tcG9uZW50U2xvdCA9PT0gJ3Jvb3QnKSB7XG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHJvb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGNvbXBvbmVudFNsb3QpIHtcbiAgICAgIC8vIGFueSBvdGhlciBzbG90IHNwZWNpZmllZFxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzbG90U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZ1RhZyh0YWcpKSB7XG4gICAgICAvLyBmb3Igc3RyaW5nIChodG1sKSB0YWcsIHByZXNlcnZlIHRoZSBiZWhhdmlvciBpbiBlbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMuXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFN0eWxlZFJlc29sdmVyID0gKDAsIF9zdHlsZWRFbmdpbmUuZGVmYXVsdCkodGFnLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbixcbiAgICAgIGxhYmVsXG4gICAgfSwgb3B0aW9ucykpO1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0eWxlQXJnID0gc3R5bGVzQXJnID0+IHtcbiAgICAgIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgIGlmICh0eXBlb2Ygc3R5bGVzQXJnID09PSAnZnVuY3Rpb24nICYmIHN0eWxlc0FyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVzQXJnIHx8ICgwLCBfZGVlcG1lcmdlLmlzUGxhaW5PYmplY3QpKHN0eWxlc0FyZykpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzID0+IHByb2Nlc3NTdHlsZUFyZyhzdHlsZXNBcmcsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSh7XG4gICAgICAgICAgICB0aGVtZTogcHJvcHMudGhlbWUsXG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0FyZztcbiAgICB9O1xuICAgIGNvbnN0IG11aVN0eWxlZFJlc29sdmVyID0gKHN0eWxlQXJnLCAuLi5leHByZXNzaW9ucykgPT4ge1xuICAgICAgbGV0IHRyYW5zZm9ybWVkU3R5bGVBcmcgPSB0cmFuc2Zvcm1TdHlsZUFyZyhzdHlsZUFyZyk7XG4gICAgICBjb25zdCBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUgPSBleHByZXNzaW9ucyA/IGV4cHJlc3Npb25zLm1hcCh0cmFuc2Zvcm1TdHlsZUFyZykgOiBbXTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmIG92ZXJyaWRlc1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBpZiAoIXRoZW1lLmNvbXBvbmVudHMgfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0gfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IHRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXM7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyA9IHt9O1xuICAgICAgICAgIC8vIFRPRE86IHY3IHJlbW92ZSBpdGVyYXRpb24gYW5kIHVzZSBgcmVzb2x2ZVN0eWxlQXJnKHN0eWxlT3ZlcnJpZGVzW3Nsb3RdKWAgZGlyZWN0bHlcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhzdHlsZU92ZXJyaWRlcykuZm9yRWFjaCgoW3Nsb3RLZXksIHNsb3RTdHlsZV0pID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVkU3R5bGVPdmVycmlkZXNbc2xvdEtleV0gPSBwcm9jZXNzU3R5bGVBcmcoc2xvdFN0eWxlLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBvdmVycmlkZXNSZXNvbHZlcihwcm9wcywgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgIXNraXBWYXJpYW50c1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICB2YXIgX3RoZW1lJGNvbXBvbmVudHM7XG4gICAgICAgICAgY29uc3QgdGhlbWUgPSByZXNvbHZlVGhlbWUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgY29uc3QgdGhlbWVWYXJpYW50cyA9IHRoZW1lID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50c1tjb21wb25lbnROYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnZhcmlhbnRzO1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzU3R5bGVBcmcoe1xuICAgICAgICAgICAgdmFyaWFudHM6IHRoZW1lVmFyaWFudHNcbiAgICAgICAgICB9LCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFza2lwU3gpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2goc3lzdGVtU3gpO1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID0gZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLmxlbmd0aCAtIGV4cHJlc3Npb25zLmxlbmd0aDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN0eWxlQXJnKSAmJiBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IG5ldyBBcnJheShudW1PZkN1c3RvbUZuc0FwcGxpZWQpLmZpbGwoJycpO1xuICAgICAgICAvLyBJZiB0aGUgdHlwZSBpcyBhcnJheSwgdGhhbiB3ZSBuZWVkIHRvIGFkZCBwbGFjZWhvbGRlcnMgaW4gdGhlIHRlbXBsYXRlIGZvciB0aGUgb3ZlcnJpZGVzLCB2YXJpYW50cyBhbmQgdGhlIHN4IHN0eWxlcy5cbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IFsuLi5zdHlsZUFyZywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZy5yYXcgPSBbLi4uc3R5bGVBcmcucmF3LCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgfVxuICAgICAgY29uc3QgQ29tcG9uZW50ID0gZGVmYXVsdFN0eWxlZFJlc29sdmVyKHRyYW5zZm9ybWVkU3R5bGVBcmcsIC4uLmV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBsZXQgZGlzcGxheU5hbWU7XG4gICAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSBgJHtjb21wb25lbnROYW1lfSR7KDAsIF9jYXBpdGFsaXplLmRlZmF1bHQpKGNvbXBvbmVudFNsb3QgfHwgJycpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpc3BsYXlOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGBTdHlsZWQoJHsoMCwgX2dldERpc3BsYXlOYW1lLmRlZmF1bHQpKHRhZyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodGFnLm11aU5hbWUpIHtcbiAgICAgICAgQ29tcG9uZW50Lm11aU5hbWUgPSB0YWcubXVpTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgfTtcbiAgICBpZiAoZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWcpIHtcbiAgICAgIG11aVN0eWxlZFJlc29sdmVyLndpdGhDb25maWcgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIG11aVN0eWxlZFJlc29sdmVyO1xuICB9O1xufSIsICJpbXBvcnQgeyBGcmFnbWVudCwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gXCIuLi9hcHAvaG9va3NcIjtcbmltcG9ydCB7IHN0b3JlIH0gZnJvbSBcIi4uL2FwcC9zdG9yZVwiO1xuaW1wb3J0IEVudGl0eVRyZWUgZnJvbSBcIi4uL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvRW50aXR5VHJlZVwiO1xuaW1wb3J0IHsgZ2V0Q2xhc3NJbnN0YW5jZXMsIGdldEVudGl0eSwgZ2V0RW50aXR5V2l0aFR5cGUsIGdldE9udG9sb2d5IH0gZnJvbSBcIi4uL3BhZ2VzL29udG9sb2dpZXMvb250b2xvZ2llc1NsaWNlXCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IE9udG9sb2d5IGZyb20gJy4uL21vZGVsL09udG9sb2d5J1xuaW1wb3J0IEVudGl0eSBmcm9tICcuLi9tb2RlbC9FbnRpdHknXG5pbXBvcnQgeyBDaXJjdWxhclByb2dyZXNzIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUcmVlV2lkZ2V0UHJvcHMge1xuICAgIGlyaT86IHN0cmluZztcbiAgICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gICAgYXBpVXJsOiBzdHJpbmc7XG4gICAgZW50aXR5VHlwZT86IFwiZW50aXRpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCI7XG4gICAgbGFuZz86IHN0cmluZztcbiAgICBvbk5hdmlnYXRlVG9FbnRpdHk/OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlOiBzdHJpbmcsIGlyaTogc3RyaW5nKSA9PiB2b2lkO1xuICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PzogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZTogc3RyaW5nLCBpcmk6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudGl0eVRyZWUoXG4gICAgcHJvcHM6IEVudGl0eVRyZWVXaWRnZXRQcm9wcyxcbiAgICBjb250YWluZXI6IGFueSxcbiAgICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICAgIFJlYWN0RE9NLnJlbmRlcihFbnRpdHlUcmVlV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIEVudGl0eVRyZWVXaWRnZXQocHJvcHM6IEVudGl0eVRyZWVXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlfT5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxFbnRpdHlUcmVlV2lkZ2V0SW5uZXJcbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIGFwaVVybD17cHJvcHMuYXBpVXJsfVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG5cbiAgICAgICAgPC9Qcm92aWRlcj5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBFbnRpdHlUcmVlV2lkZ2V0SW5uZXIocHJvcHM6IEVudGl0eVRyZWVXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgbGFuZyA9IFwiZW5cIixcbiAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5ID0gKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neSA9ICgpID0+IHtcbiAgICAgICAgfSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBvbnRvbG9neSA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5vbnRvbG9neSk7XG4gICAgY29uc3QgbG9hZGluZ09udG9sb2d5ID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmxvYWRpbmdPbnRvbG9neSk7XG5cbiAgICBjb25zdCBlbnRpdHkgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuZW50aXR5KTtcbiAgICBjb25zdCBsb2FkaW5nRW50aXR5ID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmxvYWRpbmdFbnRpdHkpO1xuXG4gICAgLy9jb25zdCBjbGFzc0luc3RhbmNlcyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5jbGFzc0luc3RhbmNlcyk7XG4gICAgY29uc3QgbG9hZGluZ0NsYXNzSW5zdGFuY2VzID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmxvYWRpbmdDbGFzc0luc3RhbmNlcyk7XG5cblxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcblxuICAgIGNvbnN0IGhhbmRsZU5hdmlnYXRlVG9FbnRpdHkgPSAob250b2xvZ3k6IE9udG9sb2d5LCBlbnRpdHk6IEVudGl0eSkgPT4ge1xuICAgICAgICBjb25zdCBvbnRvbG9neUlkID0gb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpO1xuICAgICAgICBjb25zdCBlbnRpdHlUeXBlID0gZW50aXR5LmdldFR5cGVQbHVyYWwoKTtcbiAgICAgICAgY29uc3QgaXJpID0gZW50aXR5LmdldElyaSgpO1xuXG4gICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eShvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBpcmkpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVOYXZpZ2F0ZVRvT250b2xvZ3kgPSAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHk6IEVudGl0eSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHlUeXBlID0gZW50aXR5LmdldFR5cGVQbHVyYWwoKTtcbiAgICAgICAgY29uc3QgaXJpID0gZW50aXR5LmdldElyaSgpO1xuXG4gICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIGlyaSk7XG4gICAgfTtcblxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgICBnZXRPbnRvbG9neSh7XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICBsYW5nOiBcImVuXCIsXG4gICAgICAgICAgICAgICAgYXBpVXJsOiBwcm9wcy5hcGlVcmwsXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0sIFtkaXNwYXRjaCwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuYXBpVXJsXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAob250b2xvZ3kgJiYgcHJvcHMuaXJpKSB7XG4gICAgICAgICAgICBpZiAocHJvcHMuZW50aXR5VHlwZSAmJiBwcm9wcy5lbnRpdHlUeXBlICE9PSBcImVudGl0aWVzXCIpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZ2V0RW50aXR5V2l0aFR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlOiBwcm9wcy5lbnRpdHlUeXBlIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlJcmk6IHByb3BzLmlyaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYXJhbXM6IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIGRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIGdldEVudGl0eShcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eUlyaTogcHJvcHMuaXJpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgIH0sIFtkaXNwYXRjaCwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuZW50aXR5VHlwZSwgcHJvcHMuaXJpLCBvbnRvbG9neV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGVudGl0eSAmJiBwcm9wcy5lbnRpdHlUeXBlID09PSBcImNsYXNzZXNcIikge1xuICAgICAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgZ2V0Q2xhc3NJbnN0YW5jZXMoe1xuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkOiBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc0lyaTogZW50aXR5LmdldElyaSgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYXJhbXM6IG5ldyBVUkxTZWFyY2hQYXJhbXMoKSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0sIFtkaXNwYXRjaCwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuZW50aXR5VHlwZSwgcHJvcHMuaXJpLCBlbnRpdHldKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgIHsobG9hZGluZ0VudGl0eSB8fCBsb2FkaW5nT250b2xvZ3kgfHwgbG9hZGluZ0NsYXNzSW5zdGFuY2VzKSAmJlxuICAgICAgICAgICAgICAgIDxDaXJjdWxhclByb2dyZXNzLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHshbG9hZGluZ0VudGl0eSAmJiAhbG9hZGluZ09udG9sb2d5ICYmICFsb2FkaW5nQ2xhc3NJbnN0YW5jZXMgJiYgb250b2xvZ3kgJiYgKFxuICAgICAgICAgICAgICAgIDxFbnRpdHlUcmVlXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5PXtvbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17ZW50aXR5VHlwZSA/IGVudGl0eVR5cGUgOiBcImVudGl0aWVzXCJ9XG4gICAgICAgICAgICAgICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRW50aXR5PXtlbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17aGFuZGxlTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e2hhbmRsZU5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgYXBpVXJsPXtwcm9wcy5hcGlVcmx9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKTtcbn1cbiIsICIvLyBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludCBhc3N1bWVzIHdlJ3JlIHdvcmtpbmcgd2l0aCBzdGFuZGFyZCBSZWFjdERPTS9STiwgYnV0XG4vLyBvbGRlciB2ZXJzaW9ucyB0aGF0IGRvIG5vdCBpbmNsdWRlIGB1c2VTeW5jRXh0ZXJuYWxTdG9yZWAgKFJlYWN0IDE2LjkgLSAxNy54KS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhlIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGNvbXBhdCBzaGltIGlzIG5lZWRlZC5cbmltcG9ydCB7IHVzZVN5bmNFeHRlcm5hbFN0b3JlIH0gZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbSc7XG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vd2l0aC1zZWxlY3Rvcic7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyBhcyBiYXRjaCB9IGZyb20gJy4vdXRpbHMvcmVhY3RCYXRjaGVkVXBkYXRlcyc7XG5pbXBvcnQgeyBzZXRCYXRjaCB9IGZyb20gJy4vdXRpbHMvYmF0Y2gnO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZVVzZVNlbGVjdG9yIH0gZnJvbSAnLi9ob29rcy91c2VTZWxlY3Rvcic7XG5pbXBvcnQgeyBpbml0aWFsaXplQ29ubmVjdCB9IGZyb20gJy4vY29tcG9uZW50cy9jb25uZWN0JztcbmluaXRpYWxpemVVc2VTZWxlY3Rvcih1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3Rvcik7XG5pbml0aWFsaXplQ29ubmVjdCh1c2VTeW5jRXh0ZXJuYWxTdG9yZSk7IC8vIEVuYWJsZSBiYXRjaGVkIHVwZGF0ZXMgaW4gb3VyIHN1YnNjcmlwdGlvbnMgZm9yIHVzZVxuLy8gd2l0aCBzdGFuZGFyZCBSZWFjdCByZW5kZXJlcnMgKFJlYWN0RE9NLCBSZWFjdCBOYXRpdmUpXG5cbnNldEJhdGNoKGJhdGNoKTtcbmV4cG9ydCB7IGJhdGNoIH07XG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydHMnOyIsICJleHBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJ3JlYWN0LWRvbSc7IiwgIi8vIERlZmF1bHQgdG8gYSBkdW1teSBcImJhdGNoXCIgaW1wbGVtZW50YXRpb24gdGhhdCBqdXN0IHJ1bnMgdGhlIGNhbGxiYWNrXG5mdW5jdGlvbiBkZWZhdWx0Tm9vcEJhdGNoKGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKCk7XG59XG5cbmxldCBiYXRjaCA9IGRlZmF1bHROb29wQmF0Y2g7IC8vIEFsbG93IGluamVjdGluZyBhbm90aGVyIGJhdGNoaW5nIGZ1bmN0aW9uIGxhdGVyXG5cbmV4cG9ydCBjb25zdCBzZXRCYXRjaCA9IG5ld0JhdGNoID0+IGJhdGNoID0gbmV3QmF0Y2g7IC8vIFN1cHBseSBhIGdldHRlciBqdXN0IHRvIHNraXAgZGVhbGluZyB3aXRoIEVTTSBiaW5kaW5nc1xuXG5leHBvcnQgY29uc3QgZ2V0QmF0Y2ggPSAoKSA9PiBiYXRjaDsiLCAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZURlYnVnVmFsdWUsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVJlZHV4Q29udGV4dEhvb2ssIHVzZVJlZHV4Q29udGV4dCBhcyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi91c2VSZWR1eENvbnRleHQnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IHsgbm90SW5pdGlhbGl6ZWQgfSBmcm9tICcuLi91dGlscy91c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG5sZXQgdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IgPSBub3RJbml0aWFsaXplZDtcbmV4cG9ydCBjb25zdCBpbml0aWFsaXplVXNlU2VsZWN0b3IgPSBmbiA9PiB7XG4gIHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yID0gZm47XG59O1xuXG5jb25zdCByZWZFcXVhbGl0eSA9IChhLCBiKSA9PiBhID09PSBiO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VTZWxlY3RvcmAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZVNlbGVjdG9yYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9ySG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgY29uc3QgdXNlUmVkdXhDb250ZXh0ID0gY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IDogY3JlYXRlUmVkdXhDb250ZXh0SG9vayhjb250ZXh0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVNlbGVjdG9yKHNlbGVjdG9yLCBlcXVhbGl0eUZuT3JPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBlcXVhbGl0eUZuID0gcmVmRXF1YWxpdHksXG4gICAgICBzdGFiaWxpdHlDaGVjayA9IHVuZGVmaW5lZCxcbiAgICAgIG5vb3BDaGVjayA9IHVuZGVmaW5lZFxuICAgIH0gPSB0eXBlb2YgZXF1YWxpdHlGbk9yT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJyA/IHtcbiAgICAgIGVxdWFsaXR5Rm46IGVxdWFsaXR5Rm5Pck9wdGlvbnNcbiAgICB9IDogZXF1YWxpdHlGbk9yT3B0aW9ucztcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIHNlbGVjdG9yIHRvIHVzZVNlbGVjdG9yYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgYSBzZWxlY3RvciB0byB1c2VTZWxlY3RvcmApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGVxdWFsaXR5Rm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgYW4gZXF1YWxpdHkgZnVuY3Rpb24gdG8gdXNlU2VsZWN0b3JgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBzdG9yZSxcbiAgICAgIHN1YnNjcmlwdGlvbixcbiAgICAgIGdldFNlcnZlclN0YXRlLFxuICAgICAgc3RhYmlsaXR5Q2hlY2s6IGdsb2JhbFN0YWJpbGl0eUNoZWNrLFxuICAgICAgbm9vcENoZWNrOiBnbG9iYWxOb29wQ2hlY2tcbiAgICB9ID0gdXNlUmVkdXhDb250ZXh0KCk7XG4gICAgY29uc3QgZmlyc3RSdW4gPSB1c2VSZWYodHJ1ZSk7XG4gICAgY29uc3Qgd3JhcHBlZFNlbGVjdG9yID0gdXNlQ2FsbGJhY2soe1xuICAgICAgW3NlbGVjdG9yLm5hbWVdKHN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0b3Ioc3RhdGUpO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgZmluYWxTdGFiaWxpdHlDaGVjayA9IHR5cGVvZiBzdGFiaWxpdHlDaGVjayA9PT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxTdGFiaWxpdHlDaGVjayA6IHN0YWJpbGl0eUNoZWNrO1xuXG4gICAgICAgICAgaWYgKGZpbmFsU3RhYmlsaXR5Q2hlY2sgPT09ICdhbHdheXMnIHx8IGZpbmFsU3RhYmlsaXR5Q2hlY2sgPT09ICdvbmNlJyAmJiBmaXJzdFJ1bi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0b0NvbXBhcmUgPSBzZWxlY3RvcihzdGF0ZSk7XG5cbiAgICAgICAgICAgIGlmICghZXF1YWxpdHlGbihzZWxlY3RlZCwgdG9Db21wYXJlKSkge1xuICAgICAgICAgICAgICBsZXQgc3RhY2sgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgICAgICAgICB9ID0gZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1NlbGVjdG9yICcgKyAoc2VsZWN0b3IubmFtZSB8fCAndW5rbm93bicpICsgJyByZXR1cm5lZCBhIGRpZmZlcmVudCByZXN1bHQgd2hlbiBjYWxsZWQgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHJlcmVuZGVycy4nICsgJ1xcblNlbGVjdG9ycyB0aGF0IHJldHVybiBhIG5ldyByZWZlcmVuY2UgKHN1Y2ggYXMgYW4gb2JqZWN0IG9yIGFuIGFycmF5KSBzaG91bGQgYmUgbWVtb2l6ZWQ6IGh0dHBzOi8vcmVkdXguanMub3JnL3VzYWdlL2Rlcml2aW5nLWRhdGEtc2VsZWN0b3JzI29wdGltaXppbmctc2VsZWN0b3JzLXdpdGgtbWVtb2l6YXRpb24nLCB7XG4gICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQyOiB0b0NvbXBhcmUsXG4gICAgICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZmluYWxOb29wQ2hlY2sgPSB0eXBlb2Ygbm9vcENoZWNrID09PSAndW5kZWZpbmVkJyA/IGdsb2JhbE5vb3BDaGVjayA6IG5vb3BDaGVjaztcblxuICAgICAgICAgIGlmIChmaW5hbE5vb3BDaGVjayA9PT0gJ2Fsd2F5cycgfHwgZmluYWxOb29wQ2hlY2sgPT09ICdvbmNlJyAmJiBmaXJzdFJ1bi5jdXJyZW50KSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHN0YXRlKSB7XG4gICAgICAgICAgICAgIGxldCBzdGFjayA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICAgIH0gPSBlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignU2VsZWN0b3IgJyArIChzZWxlY3Rvci5uYW1lIHx8ICd1bmtub3duJykgKyAnIHJldHVybmVkIHRoZSByb290IHN0YXRlIHdoZW4gY2FsbGVkLiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHJlcmVuZGVycy4nICsgJ1xcblNlbGVjdG9ycyB0aGF0IHJldHVybiB0aGUgZW50aXJlIHN0YXRlIGFyZSBhbG1vc3QgY2VydGFpbmx5IGEgbWlzdGFrZSwgYXMgdGhleSB3aWxsIGNhdXNlIGEgcmVyZW5kZXIgd2hlbmV2ZXIgKmFueXRoaW5nKiBpbiBzdGF0ZSBjaGFuZ2VzLicsIHtcbiAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmlyc3RSdW4uY3VycmVudCkgZmlyc3RSdW4uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkO1xuICAgICAgfVxuXG4gICAgfVtzZWxlY3Rvci5uYW1lXSwgW3NlbGVjdG9yLCBnbG9iYWxTdGFiaWxpdHlDaGVjaywgc3RhYmlsaXR5Q2hlY2tdKTtcbiAgICBjb25zdCBzZWxlY3RlZFN0YXRlID0gdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3Ioc3Vic2NyaXB0aW9uLmFkZE5lc3RlZFN1Yiwgc3RvcmUuZ2V0U3RhdGUsIGdldFNlcnZlclN0YXRlIHx8IHN0b3JlLmdldFN0YXRlLCB3cmFwcGVkU2VsZWN0b3IsIGVxdWFsaXR5Rm4pO1xuICAgIHVzZURlYnVnVmFsdWUoc2VsZWN0ZWRTdGF0ZSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkU3RhdGU7XG4gIH07XG59XG4vKipcclxuICogQSBob29rIHRvIGFjY2VzcyB0aGUgcmVkdXggc3RvcmUncyBzdGF0ZS4gVGhpcyBob29rIHRha2VzIGEgc2VsZWN0b3IgZnVuY3Rpb25cclxuICogYXMgYW4gYXJndW1lbnQuIFRoZSBzZWxlY3RvciBpcyBjYWxsZWQgd2l0aCB0aGUgc3RvcmUgc3RhdGUuXHJcbiAqXHJcbiAqIFRoaXMgaG9vayB0YWtlcyBhbiBvcHRpb25hbCBlcXVhbGl0eSBjb21wYXJpc29uIGZ1bmN0aW9uIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyXHJcbiAqIHRoYXQgYWxsb3dzIHlvdSB0byBjdXN0b21pemUgdGhlIHdheSB0aGUgc2VsZWN0ZWQgc3RhdGUgaXMgY29tcGFyZWQgdG8gZGV0ZXJtaW5lXHJcbiAqIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBuZWVkcyB0byBiZSByZS1yZW5kZXJlZC5cclxuICpcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2VsZWN0b3IgdGhlIHNlbGVjdG9yIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBlcXVhbGl0eUZuIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgZXF1YWxpdHlcclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHNlbGVjdGVkIHN0YXRlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IENvdW50ZXJDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgY29uc3QgY291bnRlciA9IHVzZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLmNvdW50ZXIpXHJcbiAqICAgcmV0dXJuIDxkaXY+e2NvdW50ZXJ9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VTZWxlY3RvciA9IC8qI19fUFVSRV9fKi9jcmVhdGVTZWxlY3Rvckhvb2soKTsiLCAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcblxuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VSZWR1eENvbnRleHRgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LiBUaGlzIGlzIGEgbG93LWxldmVsXHJcbiAqIGhvb2sgdGhhdCB5b3Ugc2hvdWxkIHVzdWFsbHkgbm90IG5lZWQgdG8gY2FsbCBkaXJlY3RseS5cclxuICpcclxuICogQHBhcmFtIHtSZWFjdC5Db250ZXh0fSBbY29udGV4dD1SZWFjdFJlZHV4Q29udGV4dF0gQ29udGV4dCBwYXNzZWQgdG8geW91ciBgPFByb3ZpZGVyPmAuXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBgdXNlUmVkdXhDb250ZXh0YCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkdXhDb250ZXh0SG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVJlZHV4Q29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VDb250ZXh0KGNvbnRleHQpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbnRleHRWYWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCByZWFjdC1yZWR1eCBjb250ZXh0IHZhbHVlOyBwbGVhc2UgZW5zdXJlIHRoZSBjb21wb25lbnQgaXMgd3JhcHBlZCBpbiBhIDxQcm92aWRlcj4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dFZhbHVlO1xuICB9O1xufVxuLyoqXHJcbiAqIEEgaG9vayB0byBhY2Nlc3MgdGhlIHZhbHVlIG9mIHRoZSBgUmVhY3RSZWR1eENvbnRleHRgLiBUaGlzIGlzIGEgbG93LWxldmVsXHJcbiAqIGhvb2sgdGhhdCB5b3Ugc2hvdWxkIHVzdWFsbHkgbm90IG5lZWQgdG8gY2FsbCBkaXJlY3RseS5cclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHZhbHVlIG9mIHRoZSBgUmVhY3RSZWR1eENvbnRleHRgXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlUmVkdXhDb250ZXh0IH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyQ29tcG9uZW50ID0gKCkgPT4ge1xyXG4gKiAgIGNvbnN0IHsgc3RvcmUgfSA9IHVzZVJlZHV4Q29udGV4dCgpXHJcbiAqICAgcmV0dXJuIDxkaXY+e3N0b3JlLmdldFN0YXRlKCl9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VSZWR1eENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlUmVkdXhDb250ZXh0SG9vaygpOyIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCBDb250ZXh0S2V5ID0gU3ltYm9sLmZvcihgcmVhY3QtcmVkdXgtY29udGV4dGApO1xuY29uc3QgZ1QgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFRoaXMgOlxuLyogZmFsbCBiYWNrIHRvIGEgcGVyLW1vZHVsZSBzY29wZSAocHJlLTguMSBiZWhhdmlvdXIpIGlmIGBnbG9iYWxUaGlzYCBpcyBub3QgYXZhaWxhYmxlICovXG57fTtcblxuZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgdmFyIF9nVCRDb250ZXh0S2V5O1xuXG4gIGlmICghUmVhY3QuY3JlYXRlQ29udGV4dCkgcmV0dXJuIHt9O1xuICBjb25zdCBjb250ZXh0TWFwID0gKF9nVCRDb250ZXh0S2V5ID0gZ1RbQ29udGV4dEtleV0pICE9IG51bGwgPyBfZ1QkQ29udGV4dEtleSA6IGdUW0NvbnRleHRLZXldID0gbmV3IE1hcCgpO1xuICBsZXQgcmVhbENvbnRleHQgPSBjb250ZXh0TWFwLmdldChSZWFjdC5jcmVhdGVDb250ZXh0KTtcblxuICBpZiAoIXJlYWxDb250ZXh0KSB7XG4gICAgcmVhbENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJlYWxDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1JlYWN0UmVkdXgnO1xuICAgIH1cblxuICAgIGNvbnRleHRNYXAuc2V0KFJlYWN0LmNyZWF0ZUNvbnRleHQsIHJlYWxDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWFsQ29udGV4dDtcbn1cblxuZXhwb3J0IGNvbnN0IFJlYWN0UmVkdXhDb250ZXh0ID0gLyojX19QVVJFX18qL2dldENvbnRleHQoKTtcbmV4cG9ydCBkZWZhdWx0IFJlYWN0UmVkdXhDb250ZXh0OyIsICJleHBvcnQgY29uc3Qgbm90SW5pdGlhbGl6ZWQgPSAoKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcigndVNFUyBub3QgaW5pdGlhbGl6ZWQhJyk7XG59OyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wicmVhY3RSZWR1eEZvcndhcmRlZFJlZlwiXTtcblxuLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IGhvaXN0U3RhdGljcyBmcm9tICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc1ZhbGlkRWxlbWVudFR5cGUsIGlzQ29udGV4dENvbnN1bWVyIH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IGRlZmF1bHRTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi4vY29ubmVjdC9zZWxlY3RvckZhY3RvcnknO1xuaW1wb3J0IHsgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yeSB9IGZyb20gJy4uL2Nvbm5lY3QvbWFwRGlzcGF0Y2hUb1Byb3BzJztcbmltcG9ydCB7IG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcnkgfSBmcm9tICcuLi9jb25uZWN0L21hcFN0YXRlVG9Qcm9wcyc7XG5pbXBvcnQgeyBtZXJnZVByb3BzRmFjdG9yeSB9IGZyb20gJy4uL2Nvbm5lY3QvbWVyZ2VQcm9wcyc7XG5pbXBvcnQgeyBjcmVhdGVTdWJzY3JpcHRpb24gfSBmcm9tICcuLi91dGlscy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4uL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QnO1xuaW1wb3J0IHNoYWxsb3dFcXVhbCBmcm9tICcuLi91dGlscy9zaGFsbG93RXF1YWwnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnLi4vdXRpbHMvd2FybmluZyc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vQ29udGV4dCc7XG5pbXBvcnQgeyBub3RJbml0aWFsaXplZCB9IGZyb20gJy4uL3V0aWxzL3VzZVN5bmNFeHRlcm5hbFN0b3JlJztcbmxldCB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IG5vdEluaXRpYWxpemVkO1xuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVDb25uZWN0ID0gZm4gPT4ge1xuICB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IGZuO1xufTsgLy8gRGVmaW5lIHNvbWUgY29uc3RhbnQgYXJyYXlzIGp1c3QgdG8gYXZvaWQgcmUtY3JlYXRpbmcgdGhlc2VcblxuY29uc3QgRU1QVFlfQVJSQVkgPSBbbnVsbCwgMF07XG5jb25zdCBOT19TVUJTQ1JJUFRJT05fQVJSQVkgPSBbbnVsbCwgbnVsbF07IC8vIEF0dGVtcHRzIHRvIHN0cmluZ2lmeSB3aGF0ZXZlciBub3QtcmVhbGx5LWEtY29tcG9uZW50IHZhbHVlIHdlIHdlcmUgZ2l2ZW5cbi8vIGZvciBsb2dnaW5nIGluIGFuIGVycm9yIG1lc3NhZ2VcblxuY29uc3Qgc3RyaW5naWZ5Q29tcG9uZW50ID0gQ29tcCA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KENvbXApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gU3RyaW5nKENvbXApO1xuICB9XG59O1xuXG4vLyBUaGlzIGlzIFwianVzdFwiIGEgYHVzZUxheW91dEVmZmVjdGAsIGJ1dCB3aXRoIHR3byBtb2RpZmljYXRpb25zOlxuLy8gLSB3ZSBuZWVkIHRvIGZhbGwgYmFjayB0byBgdXNlRWZmZWN0YCBpbiBTU1IgdG8gYXZvaWQgYW5ub3lpbmcgd2FybmluZ3Ncbi8vIC0gd2UgZXh0cmFjdCB0aGlzIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYXZvaWQgY2xvc2luZyBvdmVyIHZhbHVlc1xuLy8gICBhbmQgY2F1c2luZyBtZW1vcnkgbGVha3NcbmZ1bmN0aW9uIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3RXaXRoQXJncyhlZmZlY3RGdW5jLCBlZmZlY3RBcmdzLCBkZXBlbmRlbmNpZXMpIHtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiBlZmZlY3RGdW5jKC4uLmVmZmVjdEFyZ3MpLCBkZXBlbmRlbmNpZXMpO1xufSAvLyBFZmZlY3QgY2FsbGJhY2ssIGV4dHJhY3RlZDogYXNzaWduIHRoZSBsYXRlc3QgcHJvcHMgdmFsdWVzIHRvIHJlZnMgZm9yIGxhdGVyIHVzYWdlXG5cblxuZnVuY3Rpb24gY2FwdHVyZVdyYXBwZXJQcm9wcyhsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIHdyYXBwZXJQcm9wcywgLy8gYWN0dWFsQ2hpbGRQcm9wczogdW5rbm93bixcbmNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnMpIHtcbiAgLy8gV2Ugd2FudCB0byBjYXB0dXJlIHRoZSB3cmFwcGVyIHByb3BzIGFuZCBjaGlsZCBwcm9wcyB3ZSB1c2VkIGZvciBsYXRlciBjb21wYXJpc29uc1xuICBsYXN0V3JhcHBlclByb3BzLmN1cnJlbnQgPSB3cmFwcGVyUHJvcHM7XG4gIHJlbmRlcklzU2NoZWR1bGVkLmN1cnJlbnQgPSBmYWxzZTsgLy8gSWYgdGhlIHJlbmRlciB3YXMgZnJvbSBhIHN0b3JlIHVwZGF0ZSwgY2xlYXIgb3V0IHRoYXQgcmVmZXJlbmNlIGFuZCBjYXNjYWRlIHRoZSBzdWJzY3JpYmVyIHVwZGF0ZVxuXG4gIGlmIChjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQpIHtcbiAgICBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQgPSBudWxsO1xuICAgIG5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgfVxufSAvLyBFZmZlY3QgY2FsbGJhY2ssIGV4dHJhY3RlZDogc3Vic2NyaWJlIHRvIHRoZSBSZWR1eCBzdG9yZSBvciBuZWFyZXN0IGNvbm5lY3RlZCBhbmNlc3Rvcixcbi8vIGNoZWNrIGZvciB1cGRhdGVzIGFmdGVyIGRpc3BhdGNoZWQgYWN0aW9ucywgYW5kIHRyaWdnZXIgcmUtcmVuZGVycy5cblxuXG5mdW5jdGlvbiBzdWJzY3JpYmVVcGRhdGVzKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcywgc3RvcmUsIHN1YnNjcmlwdGlvbiwgY2hpbGRQcm9wc1NlbGVjdG9yLCBsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIGlzTW91bnRlZCwgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSwgbm90aWZ5TmVzdGVkU3VicywgLy8gZm9yY2VDb21wb25lbnRVcGRhdGVEaXNwYXRjaDogUmVhY3QuRGlzcGF0Y2g8YW55PixcbmFkZGl0aW9uYWxTdWJzY3JpYmVMaXN0ZW5lcikge1xuICAvLyBJZiB3ZSdyZSBub3Qgc3Vic2NyaWJlZCB0byB0aGUgc3RvcmUsIG5vdGhpbmcgdG8gZG8gaGVyZVxuICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuICgpID0+IHt9OyAvLyBDYXB0dXJlIHZhbHVlcyBmb3IgY2hlY2tpbmcgaWYgYW5kIHdoZW4gdGhpcyBjb21wb25lbnQgdW5tb3VudHNcblxuICBsZXQgZGlkVW5zdWJzY3JpYmUgPSBmYWxzZTtcbiAgbGV0IGxhc3RUaHJvd25FcnJvciA9IG51bGw7IC8vIFdlJ2xsIHJ1biB0aGlzIGNhbGxiYWNrIGV2ZXJ5IHRpbWUgYSBzdG9yZSBzdWJzY3JpcHRpb24gdXBkYXRlIHByb3BhZ2F0ZXMgdG8gdGhpcyBjb21wb25lbnRcblxuICBjb25zdCBjaGVja0ZvclVwZGF0ZXMgPSAoKSA9PiB7XG4gICAgaWYgKGRpZFVuc3Vic2NyaWJlIHx8ICFpc01vdW50ZWQuY3VycmVudCkge1xuICAgICAgLy8gRG9uJ3QgcnVuIHN0YWxlIGxpc3RlbmVycy5cbiAgICAgIC8vIFJlZHV4IGRvZXNuJ3QgZ3VhcmFudGVlIHVuc3Vic2NyaXB0aW9ucyBoYXBwZW4gdW50aWwgbmV4dCBkaXNwYXRjaC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFRPRE8gV2UncmUgY3VycmVudGx5IGNhbGxpbmcgZ2V0U3RhdGUgb3Vyc2VsdmVzIGhlcmUsIHJhdGhlciB0aGFuIGxldHRpbmcgYHVTRVNgIGRvIGl0XG5cblxuICAgIGNvbnN0IGxhdGVzdFN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGxldCBuZXdDaGlsZFByb3BzLCBlcnJvcjtcblxuICAgIHRyeSB7XG4gICAgICAvLyBBY3R1YWxseSBydW4gdGhlIHNlbGVjdG9yIHdpdGggdGhlIG1vc3QgcmVjZW50IHN0b3JlIHN0YXRlIGFuZCB3cmFwcGVyIHByb3BzXG4gICAgICAvLyB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY2hpbGQgcHJvcHMgc2hvdWxkIGJlXG4gICAgICBuZXdDaGlsZFByb3BzID0gY2hpbGRQcm9wc1NlbGVjdG9yKGxhdGVzdFN0b3JlU3RhdGUsIGxhc3RXcmFwcGVyUHJvcHMuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3IgPSBlO1xuICAgICAgbGFzdFRocm93bkVycm9yID0gZTtcbiAgICB9XG5cbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICBsYXN0VGhyb3duRXJyb3IgPSBudWxsO1xuICAgIH0gLy8gSWYgdGhlIGNoaWxkIHByb3BzIGhhdmVuJ3QgY2hhbmdlZCwgbm90aGluZyB0byBkbyBoZXJlIC0gY2FzY2FkZSB0aGUgc3Vic2NyaXB0aW9uIHVwZGF0ZVxuXG5cbiAgICBpZiAobmV3Q2hpbGRQcm9wcyA9PT0gbGFzdENoaWxkUHJvcHMuY3VycmVudCkge1xuICAgICAgaWYgKCFyZW5kZXJJc1NjaGVkdWxlZC5jdXJyZW50KSB7XG4gICAgICAgIG5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2F2ZSByZWZlcmVuY2VzIHRvIHRoZSBuZXcgY2hpbGQgcHJvcHMuICBOb3RlIHRoYXQgd2UgdHJhY2sgdGhlIFwiY2hpbGQgcHJvcHMgZnJvbSBzdG9yZSB1cGRhdGVcIlxuICAgICAgLy8gYXMgYSByZWYgaW5zdGVhZCBvZiBhIHVzZVN0YXRlL3VzZVJlZHVjZXIgYmVjYXVzZSB3ZSBuZWVkIGEgd2F5IHRvIGRldGVybWluZSBpZiB0aGF0IHZhbHVlIGhhc1xuICAgICAgLy8gYmVlbiBwcm9jZXNzZWQuICBJZiB0aGlzIHdlbnQgaW50byB1c2VTdGF0ZS91c2VSZWR1Y2VyLCB3ZSBjb3VsZG4ndCBjbGVhciBvdXQgdGhlIHZhbHVlIHdpdGhvdXRcbiAgICAgIC8vIGZvcmNpbmcgYW5vdGhlciByZS1yZW5kZXIsIHdoaWNoIHdlIGRvbid0IHdhbnQuXG4gICAgICBsYXN0Q2hpbGRQcm9wcy5jdXJyZW50ID0gbmV3Q2hpbGRQcm9wcztcbiAgICAgIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCA9IG5ld0NoaWxkUHJvcHM7XG4gICAgICByZW5kZXJJc1NjaGVkdWxlZC5jdXJyZW50ID0gdHJ1ZTsgLy8gVE9ETyBUaGlzIGlzIGhhY2t5IGFuZCBub3QgaG93IGB1U0VTYCBpcyBtZWFudCB0byBiZSB1c2VkXG4gICAgICAvLyBUcmlnZ2VyIHRoZSBSZWFjdCBgdXNlU3luY0V4dGVybmFsU3RvcmVgIHN1YnNjcmliZXJcblxuICAgICAgYWRkaXRpb25hbFN1YnNjcmliZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9OyAvLyBBY3R1YWxseSBzdWJzY3JpYmUgdG8gdGhlIG5lYXJlc3QgY29ubmVjdGVkIGFuY2VzdG9yIChvciBzdG9yZSlcblxuXG4gIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gY2hlY2tGb3JVcGRhdGVzO1xuICBzdWJzY3JpcHRpb24udHJ5U3Vic2NyaWJlKCk7IC8vIFB1bGwgZGF0YSBmcm9tIHRoZSBzdG9yZSBhZnRlciBmaXJzdCByZW5kZXIgaW4gY2FzZSB0aGUgc3RvcmUgaGFzXG4gIC8vIGNoYW5nZWQgc2luY2Ugd2UgYmVnYW4uXG5cbiAgY2hlY2tGb3JVcGRhdGVzKCk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVXcmFwcGVyID0gKCkgPT4ge1xuICAgIGRpZFVuc3Vic2NyaWJlID0gdHJ1ZTtcbiAgICBzdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcbiAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IG51bGw7XG5cbiAgICBpZiAobGFzdFRocm93bkVycm9yKSB7XG4gICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgY2F1Z2h0IGFuIGVycm9yIGR1ZSB0byBhIGJhZCBtYXBTdGF0ZSBmdW5jdGlvbiwgYnV0IHRoZVxuICAgICAgLy8gcGFyZW50IHJlLXJlbmRlcmVkIHdpdGhvdXQgdGhpcyBjb21wb25lbnQgYW5kIHdlJ3JlIGFib3V0IHRvIHVubW91bnQuXG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYXMgbG9uZyBhcyB3ZSBkbyB0b3AtZG93biBzdWJzY3JpcHRpb25zIGNvcnJlY3RseSwgYnV0XG4gICAgICAvLyBpZiB3ZSBldmVyIGRvIHRob3NlIHdyb25nLCB0aGlzIHRocm93IHdpbGwgc3VyZmFjZSB0aGUgZXJyb3IgaW4gb3VyIHRlc3RzLlxuICAgICAgLy8gSW4gdGhhdCBjYXNlLCB0aHJvdyB0aGUgZXJyb3IgZnJvbSBoZXJlIHNvIGl0IGRvZXNuJ3QgZ2V0IGxvc3QuXG4gICAgICB0aHJvdyBsYXN0VGhyb3duRXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1bnN1YnNjcmliZVdyYXBwZXI7XG59IC8vIFJlZHVjZXIgaW5pdGlhbCBzdGF0ZSBjcmVhdGlvbiBmb3Igb3VyIHVwZGF0ZSByZWR1Y2VyXG5cblxuY29uc3QgaW5pdFN0YXRlVXBkYXRlcyA9ICgpID0+IEVNUFRZX0FSUkFZO1xuXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufVxuLyoqXHJcbiAqIEluZmVycyB0aGUgdHlwZSBvZiBwcm9wcyB0aGF0IGEgY29ubmVjdG9yIHdpbGwgaW5qZWN0IGludG8gYSBjb21wb25lbnQuXHJcbiAqL1xuXG5cbmxldCBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRQdXJlT3B0aW9uID0gZmFsc2U7XG4vKipcclxuICogQ29ubmVjdHMgYSBSZWFjdCBjb21wb25lbnQgdG8gYSBSZWR1eCBzdG9yZS5cclxuICpcclxuICogLSBXaXRob3V0IGFyZ3VtZW50cywganVzdCB3cmFwcyB0aGUgY29tcG9uZW50LCB3aXRob3V0IGNoYW5naW5nIHRoZSBiZWhhdmlvciAvIHByb3BzXHJcbiAqXHJcbiAqIC0gSWYgMiBwYXJhbXMgYXJlIHBhc3NlZCAoM3JkIHBhcmFtLCBtZXJnZVByb3BzLCBpcyBza2lwcGVkKSwgZGVmYXVsdCBiZWhhdmlvclxyXG4gKiBpcyB0byBvdmVycmlkZSBvd25Qcm9wcyAoYXMgc3RhdGVkIGluIHRoZSBkb2NzKSwgc28gd2hhdCByZW1haW5zIGlzIGV2ZXJ5dGhpbmcgdGhhdCdzXHJcbiAqIG5vdCBhIHN0YXRlIG9yIGRpc3BhdGNoIHByb3BcclxuICpcclxuICogLSBXaGVuIDNyZCBwYXJhbSBpcyBwYXNzZWQsIHdlIGRvbid0IGtub3cgaWYgb3duUHJvcHMgcHJvcGFnYXRlIGFuZCB3aGV0aGVyIHRoZXlcclxuICogc2hvdWxkIGJlIHZhbGlkIGNvbXBvbmVudCBwcm9wcywgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIG1lcmdlUHJvcHMgaW1wbGVtZW50YXRpb24uXHJcbiAqIEFzIHN1Y2gsIGl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZXh0ZW5kIG93blByb3BzIGludGVyZmFjZSBmcm9tIHN0YXRlIG9yXHJcbiAqIGRpc3BhdGNoIHByb3BzIG9yIGJvdGggd2hlbiBhcHBsaWNhYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSBtYXBTdGF0ZVRvUHJvcHMgQSBmdW5jdGlvbiB0aGF0IGV4dHJhY3RzIHZhbHVlcyBmcm9tIHN0YXRlXHJcbiAqIEBwYXJhbSBtYXBEaXNwYXRjaFRvUHJvcHMgU2V0dXAgZm9yIGRpc3BhdGNoaW5nIGFjdGlvbnNcclxuICogQHBhcmFtIG1lcmdlUHJvcHMgT3B0aW9uYWwgY2FsbGJhY2sgdG8gbWVyZ2Ugc3RhdGUgYW5kIGRpc3BhdGNoIHByb3BzIHRvZ2V0aGVyXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBjb25uZWN0aW9uXHJcbiAqXHJcbiAqL1xuXG5mdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCB7XG4gIC8vIFRoZSBgcHVyZWAgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQsIHNvIFRTIGRvZXNuJ3QgbGlrZSB1cyBkZXN0cnVjdHVyaW5nIHRoaXMgdG8gY2hlY2sgaXRzIGV4aXN0ZW5jZS5cbiAgLy8gQHRzLWlnbm9yZVxuICBwdXJlLFxuICBhcmVTdGF0ZXNFcXVhbCA9IHN0cmljdEVxdWFsLFxuICBhcmVPd25Qcm9wc0VxdWFsID0gc2hhbGxvd0VxdWFsLFxuICBhcmVTdGF0ZVByb3BzRXF1YWwgPSBzaGFsbG93RXF1YWwsXG4gIGFyZU1lcmdlZFByb3BzRXF1YWwgPSBzaGFsbG93RXF1YWwsXG4gIC8vIHVzZSBSZWFjdCdzIGZvcndhcmRSZWYgdG8gZXhwb3NlIGEgcmVmIG9mIHRoZSB3cmFwcGVkIGNvbXBvbmVudFxuICBmb3J3YXJkUmVmID0gZmFsc2UsXG4gIC8vIHRoZSBjb250ZXh0IGNvbnN1bWVyIHRvIHVzZVxuICBjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHRcbn0gPSB7fSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChwdXJlICE9PSB1bmRlZmluZWQgJiYgIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZFB1cmVPcHRpb24pIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZFB1cmVPcHRpb24gPSB0cnVlO1xuICAgICAgd2FybmluZygnVGhlIGBwdXJlYCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZC4gYGNvbm5lY3RgIGlzIG5vdyBhbHdheXMgYSBcInB1cmUvbWVtb2l6ZWRcIiBjb21wb25lbnQnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBDb250ZXh0ID0gY29udGV4dDtcbiAgY29uc3QgaW5pdE1hcFN0YXRlVG9Qcm9wcyA9IG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcnkobWFwU3RhdGVUb1Byb3BzKTtcbiAgY29uc3QgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcnkobWFwRGlzcGF0Y2hUb1Byb3BzKTtcbiAgY29uc3QgaW5pdE1lcmdlUHJvcHMgPSBtZXJnZVByb3BzRmFjdG9yeShtZXJnZVByb3BzKTtcbiAgY29uc3Qgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzID0gQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpO1xuXG4gIGNvbnN0IHdyYXBXaXRoQ29ubmVjdCA9IFdyYXBwZWRDb21wb25lbnQgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFpc1ZhbGlkRWxlbWVudFR5cGUoV3JhcHBlZENvbXBvbmVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIGNvbXBvbmVudCB0byB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgY29ubmVjdC4gSW5zdGVhZCByZWNlaXZlZCAke3N0cmluZ2lmeUNvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB3cmFwcGVkQ29tcG9uZW50TmFtZSA9IFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gYENvbm5lY3QoJHt3cmFwcGVkQ29tcG9uZW50TmFtZX0pYDtcbiAgICBjb25zdCBzZWxlY3RvckZhY3RvcnlPcHRpb25zID0ge1xuICAgICAgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxuICAgICAgZGlzcGxheU5hbWUsXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZSxcbiAgICAgIFdyYXBwZWRDb21wb25lbnQsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpbml0TWFwU3RhdGVUb1Byb3BzLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcbiAgICAgIGluaXRNZXJnZVByb3BzLFxuICAgICAgYXJlU3RhdGVzRXF1YWwsXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWwsXG4gICAgICBhcmVPd25Qcm9wc0VxdWFsLFxuICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBDb25uZWN0RnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgIGNvbnN0IFtwcm9wc0NvbnRleHQsIHJlYWN0UmVkdXhGb3J3YXJkZWRSZWYsIHdyYXBwZXJQcm9wc10gPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gRGlzdGluZ3Vpc2ggYmV0d2VlbiBhY3R1YWwgXCJkYXRhXCIgcHJvcHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGUgd3JhcHBlciBjb21wb25lbnQsXG4gICAgICAgIC8vIGFuZCB2YWx1ZXMgbmVlZGVkIHRvIGNvbnRyb2wgYmVoYXZpb3IgKGZvcndhcmRlZCByZWZzLCBhbHRlcm5hdGUgY29udGV4dCBpbnN0YW5jZXMpLlxuICAgICAgICAvLyBUbyBtYWludGFpbiB0aGUgd3JhcHBlclByb3BzIG9iamVjdCByZWZlcmVuY2UsIG1lbW9pemUgdGhpcyBkZXN0cnVjdHVyaW5nLlxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcmVhY3RSZWR1eEZvcndhcmRlZFJlZlxuICAgICAgICB9ID0gcHJvcHMsXG4gICAgICAgICAgICAgIHdyYXBwZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICAgIHJldHVybiBbcHJvcHMuY29udGV4dCwgcmVhY3RSZWR1eEZvcndhcmRlZFJlZiwgd3JhcHBlclByb3BzXTtcbiAgICAgIH0sIFtwcm9wc10pO1xuICAgICAgY29uc3QgQ29udGV4dFRvVXNlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIC8vIFVzZXJzIG1heSBvcHRpb25hbGx5IHBhc3MgaW4gYSBjdXN0b20gY29udGV4dCBpbnN0YW5jZSB0byB1c2UgaW5zdGVhZCBvZiBvdXIgUmVhY3RSZWR1eENvbnRleHQuXG4gICAgICAgIC8vIE1lbW9pemUgdGhlIGNoZWNrIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBjb250ZXh0IGluc3RhbmNlIHdlIHNob3VsZCB1c2UuXG4gICAgICAgIHJldHVybiBwcm9wc0NvbnRleHQgJiYgcHJvcHNDb250ZXh0LkNvbnN1bWVyICYmIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaXNDb250ZXh0Q29uc3VtZXIoIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KHByb3BzQ29udGV4dC5Db25zdW1lciwgbnVsbCkpID8gcHJvcHNDb250ZXh0IDogQ29udGV4dDtcbiAgICAgIH0sIFtwcm9wc0NvbnRleHQsIENvbnRleHRdKTsgLy8gUmV0cmlldmUgdGhlIHN0b3JlIGFuZCBhbmNlc3RvciBzdWJzY3JpcHRpb24gdmlhIGNvbnRleHQsIGlmIGF2YWlsYWJsZVxuXG4gICAgICBjb25zdCBjb250ZXh0VmFsdWUgPSBSZWFjdC51c2VDb250ZXh0KENvbnRleHRUb1VzZSk7IC8vIFRoZSBzdG9yZSBfbXVzdF8gZXhpc3QgYXMgZWl0aGVyIGEgcHJvcCBvciBpbiBjb250ZXh0LlxuICAgICAgLy8gV2UnbGwgY2hlY2sgdG8gc2VlIGlmIGl0IF9sb29rc18gbGlrZSBhIFJlZHV4IHN0b3JlIGZpcnN0LlxuICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcGFzcyB0aHJvdWdoIGEgYHN0b3JlYCBwcm9wIHRoYXQgaXMganVzdCBhIHBsYWluIHZhbHVlLlxuXG4gICAgICBjb25zdCBkaWRTdG9yZUNvbWVGcm9tUHJvcHMgPSBCb29sZWFuKHByb3BzLnN0b3JlKSAmJiBCb29sZWFuKHByb3BzLnN0b3JlLmdldFN0YXRlKSAmJiBCb29sZWFuKHByb3BzLnN0b3JlLmRpc3BhdGNoKTtcbiAgICAgIGNvbnN0IGRpZFN0b3JlQ29tZUZyb21Db250ZXh0ID0gQm9vbGVhbihjb250ZXh0VmFsdWUpICYmIEJvb2xlYW4oY29udGV4dFZhbHVlLnN0b3JlKTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWRpZFN0b3JlQ29tZUZyb21Qcm9wcyAmJiAhZGlkU3RvcmVDb21lRnJvbUNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBcInN0b3JlXCIgaW4gdGhlIGNvbnRleHQgb2YgYCArIGBcIiR7ZGlzcGxheU5hbWV9XCIuIEVpdGhlciB3cmFwIHRoZSByb290IGNvbXBvbmVudCBpbiBhIDxQcm92aWRlcj4sIGAgKyBgb3IgcGFzcyBhIGN1c3RvbSBSZWFjdCBjb250ZXh0IHByb3ZpZGVyIHRvIDxQcm92aWRlcj4gYW5kIHRoZSBjb3JyZXNwb25kaW5nIGAgKyBgUmVhY3QgY29udGV4dCBjb25zdW1lciB0byAke2Rpc3BsYXlOYW1lfSBpbiBjb25uZWN0IG9wdGlvbnMuYCk7XG4gICAgICB9IC8vIEJhc2VkIG9uIHRoZSBwcmV2aW91cyBjaGVjaywgb25lIG9mIHRoZXNlIG11c3QgYmUgdHJ1ZVxuXG5cbiAgICAgIGNvbnN0IHN0b3JlID0gZGlkU3RvcmVDb21lRnJvbVByb3BzID8gcHJvcHMuc3RvcmUgOiBjb250ZXh0VmFsdWUuc3RvcmU7XG4gICAgICBjb25zdCBnZXRTZXJ2ZXJTdGF0ZSA9IGRpZFN0b3JlQ29tZUZyb21Db250ZXh0ID8gY29udGV4dFZhbHVlLmdldFNlcnZlclN0YXRlIDogc3RvcmUuZ2V0U3RhdGU7XG4gICAgICBjb25zdCBjaGlsZFByb3BzU2VsZWN0b3IgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gVGhlIGNoaWxkIHByb3BzIHNlbGVjdG9yIG5lZWRzIHRoZSBzdG9yZSByZWZlcmVuY2UgYXMgYW4gaW5wdXQuXG4gICAgICAgIC8vIFJlLWNyZWF0ZSB0aGlzIHNlbGVjdG9yIHdoZW5ldmVyIHRoZSBzdG9yZSBjaGFuZ2VzLlxuICAgICAgICByZXR1cm4gZGVmYXVsdFNlbGVjdG9yRmFjdG9yeShzdG9yZS5kaXNwYXRjaCwgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyk7XG4gICAgICB9LCBbc3RvcmVdKTtcbiAgICAgIGNvbnN0IFtzdWJzY3JpcHRpb24sIG5vdGlmeU5lc3RlZFN1YnNdID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm4gTk9fU1VCU0NSSVBUSU9OX0FSUkFZOyAvLyBUaGlzIFN1YnNjcmlwdGlvbidzIHNvdXJjZSBzaG91bGQgbWF0Y2ggd2hlcmUgc3RvcmUgY2FtZSBmcm9tOiBwcm9wcyB2cy4gY29udGV4dC4gQSBjb21wb25lbnRcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMgc2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxuXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNyZWF0ZVN1YnNjcmlwdGlvbihzdG9yZSwgZGlkU3RvcmVDb21lRnJvbVByb3BzID8gdW5kZWZpbmVkIDogY29udGV4dFZhbHVlLnN1YnNjcmlwdGlvbik7IC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBsaWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzIHVubW91bnRlZCBpblxuICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcCwgd2hlcmUgYHN1YnNjcmlwdGlvbmAgd2lsbCB0aGVuIGJlIG51bGwuIFRoaXMgY2FuXG4gICAgICAgIC8vIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYgU3Vic2NyaXB0aW9uJ3MgbGlzdGVuZXJzIGxvZ2ljIGlzIGNoYW5nZWQgdG8gbm90IGNhbGwgbGlzdGVuZXJzXG4gICAgICAgIC8vIHRoYXQgaGF2ZSBiZWVuIHVuc3Vic2NyaWJlZCBpbiB0aGUgIG1pZGRsZSBvZiB0aGUgbm90aWZpY2F0aW9uIGxvb3AuXG5cbiAgICAgICAgY29uc3Qgbm90aWZ5TmVzdGVkU3VicyA9IHN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzLmJpbmQoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIFtzdWJzY3JpcHRpb24sIG5vdGlmeU5lc3RlZFN1YnNdO1xuICAgICAgfSwgW3N0b3JlLCBkaWRTdG9yZUNvbWVGcm9tUHJvcHMsIGNvbnRleHRWYWx1ZV0pOyAvLyBEZXRlcm1pbmUgd2hhdCB7c3RvcmUsIHN1YnNjcmlwdGlvbn0gdmFsdWUgc2hvdWxkIGJlIHB1dCBpbnRvIG5lc3RlZCBjb250ZXh0LCBpZiBuZWNlc3NhcnksXG4gICAgICAvLyBhbmQgbWVtb2l6ZSB0aGF0IHZhbHVlIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvbnRleHQgdXBkYXRlcy5cblxuICAgICAgY29uc3Qgb3ZlcnJpZGRlbkNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoZGlkU3RvcmVDb21lRnJvbVByb3BzKSB7XG4gICAgICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgZGlyZWN0bHkgc3Vic2NyaWJlZCB0byBhIHN0b3JlIGZyb20gcHJvcHMuXG4gICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBkZXNjZW5kYW50cyByZWFkaW5nIGZyb20gdGhpcyBzdG9yZSAtIHBhc3MgZG93biB3aGF0ZXZlclxuICAgICAgICAgIC8vIHRoZSBleGlzdGluZyBjb250ZXh0IHZhbHVlIGlzIGZyb20gdGhlIG5lYXJlc3QgY29ubmVjdGVkIGFuY2VzdG9yLlxuICAgICAgICAgIHJldHVybiBjb250ZXh0VmFsdWU7XG4gICAgICAgIH0gLy8gT3RoZXJ3aXNlLCBwdXQgdGhpcyBjb21wb25lbnQncyBzdWJzY3JpcHRpb24gaW5zdGFuY2UgaW50byBjb250ZXh0LCBzbyB0aGF0XG4gICAgICAgIC8vIGNvbm5lY3RlZCBkZXNjZW5kYW50cyB3b24ndCB1cGRhdGUgdW50aWwgYWZ0ZXIgdGhpcyBjb21wb25lbnQgaXMgZG9uZVxuXG5cbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBjb250ZXh0VmFsdWUsIHtcbiAgICAgICAgICBzdWJzY3JpcHRpb25cbiAgICAgICAgfSk7XG4gICAgICB9LCBbZGlkU3RvcmVDb21lRnJvbVByb3BzLCBjb250ZXh0VmFsdWUsIHN1YnNjcmlwdGlvbl0pOyAvLyBTZXQgdXAgcmVmcyB0byBjb29yZGluYXRlIHZhbHVlcyBiZXR3ZWVuIHRoZSBzdWJzY3JpcHRpb24gZWZmZWN0IGFuZCB0aGUgcmVuZGVyIGxvZ2ljXG5cbiAgICAgIGNvbnN0IGxhc3RDaGlsZFByb3BzID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICBjb25zdCBsYXN0V3JhcHBlclByb3BzID0gUmVhY3QudXNlUmVmKHdyYXBwZXJQcm9wcyk7XG4gICAgICBjb25zdCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICBjb25zdCByZW5kZXJJc1NjaGVkdWxlZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgICBjb25zdCBpc1Byb2Nlc3NpbmdEaXNwYXRjaCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgICBjb25zdCBpc01vdW50ZWQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgICAgY29uc3QgbGF0ZXN0U3Vic2NyaXB0aW9uQ2FsbGJhY2tFcnJvciA9IFJlYWN0LnVzZVJlZigpO1xuICAgICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlzTW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBpc01vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgfSwgW10pO1xuICAgICAgY29uc3QgYWN0dWFsQ2hpbGRQcm9wc1NlbGVjdG9yID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFRyaWNreSBsb2dpYyBoZXJlOlxuICAgICAgICAgIC8vIC0gVGhpcyByZW5kZXIgbWF5IGhhdmUgYmVlbiB0cmlnZ2VyZWQgYnkgYSBSZWR1eCBzdG9yZSB1cGRhdGUgdGhhdCBwcm9kdWNlZCBuZXcgY2hpbGQgcHJvcHNcbiAgICAgICAgICAvLyAtIEhvd2V2ZXIsIHdlIG1heSBoYXZlIGdvdHRlbiBuZXcgd3JhcHBlciBwcm9wcyBhZnRlciB0aGF0XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBuZXcgY2hpbGQgcHJvcHMsIGFuZCB0aGUgc2FtZSB3cmFwcGVyIHByb3BzLCB3ZSBrbm93IHdlIHNob3VsZCB1c2UgdGhlIG5ldyBjaGlsZCBwcm9wcyBhcy1pcy5cbiAgICAgICAgICAvLyBCdXQsIGlmIHdlIGhhdmUgbmV3IHdyYXBwZXIgcHJvcHMsIHRob3NlIG1pZ2h0IGNoYW5nZSB0aGUgY2hpbGQgcHJvcHMsIHNvIHdlIGhhdmUgdG8gcmVjYWxjdWxhdGUgdGhpbmdzLlxuICAgICAgICAgIC8vIFNvLCB3ZSdsbCB1c2UgdGhlIGNoaWxkIHByb3BzIGZyb20gc3RvcmUgdXBkYXRlIG9ubHkgaWYgdGhlIHdyYXBwZXIgcHJvcHMgYXJlIHRoZSBzYW1lIGFzIGxhc3QgdGltZS5cbiAgICAgICAgICBpZiAoY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ICYmIHdyYXBwZXJQcm9wcyA9PT0gbGFzdFdyYXBwZXJQcm9wcy5jdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50O1xuICAgICAgICAgIH0gLy8gVE9ETyBXZSdyZSByZWFkaW5nIHRoZSBzdG9yZSBkaXJlY3RseSBpbiByZW5kZXIoKSBoZXJlLiBCYWQgaWRlYT9cbiAgICAgICAgICAvLyBUaGlzIHdpbGwgbGlrZWx5IGNhdXNlIEJhZCBUaGluZ3MgKFRNKSB0byBoYXBwZW4gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyB0aGlzIGJlY2F1c2Ugb24gcmVuZGVycyBfbm90XyBjYXVzZWQgYnkgc3RvcmUgdXBkYXRlcywgd2UgbmVlZCB0aGUgbGF0ZXN0IHN0b3JlIHN0YXRlXG4gICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNoaWxkIHByb3BzIHNob3VsZCBiZS5cblxuXG4gICAgICAgICAgcmV0dXJuIGNoaWxkUHJvcHNTZWxlY3RvcihzdG9yZS5nZXRTdGF0ZSgpLCB3cmFwcGVyUHJvcHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICAgIH0sIFtzdG9yZSwgd3JhcHBlclByb3BzXSk7IC8vIFdlIG5lZWQgdGhpcyB0byBleGVjdXRlIHN5bmNocm9ub3VzbHkgZXZlcnkgdGltZSB3ZSByZS1yZW5kZXIuIEhvd2V2ZXIsIFJlYWN0IHdhcm5zXG4gICAgICAvLyBhYm91dCB1c2VMYXlvdXRFZmZlY3QgaW4gU1NSLCBzbyB3ZSB0cnkgdG8gZGV0ZWN0IGVudmlyb25tZW50IGFuZCBmYWxsIGJhY2sgdG9cbiAgICAgIC8vIGp1c3QgdXNlRWZmZWN0IGluc3RlYWQgdG8gYXZvaWQgdGhlIHdhcm5pbmcsIHNpbmNlIG5laXRoZXIgd2lsbCBydW4gYW55d2F5LlxuXG4gICAgICBjb25zdCBzdWJzY3JpYmVGb3JSZWFjdCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpYmUgPSByZWFjdExpc3RlbmVyID0+IHtcbiAgICAgICAgICBpZiAoIXN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdWJzY3JpYmVVcGRhdGVzKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcywgc3RvcmUsIHN1YnNjcmlwdGlvbiwgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGNoaWxkUHJvcHNTZWxlY3RvciwgbGFzdFdyYXBwZXJQcm9wcywgbGFzdENoaWxkUHJvcHMsIHJlbmRlcklzU2NoZWR1bGVkLCBpc01vdW50ZWQsIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnMsIHJlYWN0TGlzdGVuZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzdWJzY3JpYmU7XG4gICAgICB9LCBbc3Vic2NyaXB0aW9uXSk7XG4gICAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0V2l0aEFyZ3MoY2FwdHVyZVdyYXBwZXJQcm9wcywgW2xhc3RXcmFwcGVyUHJvcHMsIGxhc3RDaGlsZFByb3BzLCByZW5kZXJJc1NjaGVkdWxlZCwgd3JhcHBlclByb3BzLCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLCBub3RpZnlOZXN0ZWRTdWJzXSk7XG4gICAgICBsZXQgYWN0dWFsQ2hpbGRQcm9wcztcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYWN0dWFsQ2hpbGRQcm9wcyA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlKCAvLyBUT0RPIFdlJ3JlIHBhc3NpbmcgdGhyb3VnaCBhIGJpZyB3cmFwcGVyIHRoYXQgZG9lcyBhIGJ1bmNoIG9mIGV4dHJhIHNpZGUgZWZmZWN0cyBiZXNpZGVzIHN1YnNjcmliaW5nXG4gICAgICAgIHN1YnNjcmliZUZvclJlYWN0LCAvLyBUT0RPIFRoaXMgaXMgaW5jcmVkaWJseSBoYWNreS4gV2UndmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhlIHN0b3JlIHVwZGF0ZSBhbmQgY2FsY3VsYXRlZCBuZXcgY2hpbGQgcHJvcHMsXG4gICAgICAgIC8vIFRPRE8gYW5kIHdlJ3JlIGp1c3QgcGFzc2luZyB0aGF0IHRocm91Z2ggc28gaXQgdHJpZ2dlcnMgYSByZS1yZW5kZXIgZm9yIHVzIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gYHVTRVNgLlxuICAgICAgICBhY3R1YWxDaGlsZFByb3BzU2VsZWN0b3IsIGdldFNlcnZlclN0YXRlID8gKCkgPT4gY2hpbGRQcm9wc1NlbGVjdG9yKGdldFNlcnZlclN0YXRlKCksIHdyYXBwZXJQcm9wcykgOiBhY3R1YWxDaGlsZFByb3BzU2VsZWN0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yLmN1cnJlbnQpIHtcbiAgICAgICAgICA7XG4gICAgICAgICAgZXJyLm1lc3NhZ2UgKz0gYFxcblRoZSBlcnJvciBtYXkgYmUgY29ycmVsYXRlZCB3aXRoIHRoaXMgcHJldmlvdXMgZXJyb3I6XFxuJHtsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yLmN1cnJlbnQuc3RhY2t9XFxuXFxuYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxhdGVzdFN1YnNjcmlwdGlvbkNhbGxiYWNrRXJyb3IuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBsYXN0Q2hpbGRQcm9wcy5jdXJyZW50ID0gYWN0dWFsQ2hpbGRQcm9wcztcbiAgICAgIH0pOyAvLyBOb3cgdGhhdCBhbGwgdGhhdCdzIGRvbmUsIHdlIGNhbiBmaW5hbGx5IHRyeSB0byBhY3R1YWxseSByZW5kZXIgdGhlIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgIC8vIFdlIG1lbW9pemUgdGhlIGVsZW1lbnRzIGZvciB0aGUgcmVuZGVyZWQgY2hpbGQgY29tcG9uZW50IGFzIGFuIG9wdGltaXphdGlvbi5cblxuICAgICAgY29uc3QgcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIF9leHRlbmRzKHt9LCBhY3R1YWxDaGlsZFByb3BzLCB7XG4gICAgICAgICAgICByZWY6IHJlYWN0UmVkdXhGb3J3YXJkZWRSZWZcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgIH0sIFtyZWFjdFJlZHV4Rm9yd2FyZGVkUmVmLCBXcmFwcGVkQ29tcG9uZW50LCBhY3R1YWxDaGlsZFByb3BzXSk7IC8vIElmIFJlYWN0IHNlZXMgdGhlIGV4YWN0IHNhbWUgZWxlbWVudCByZWZlcmVuY2UgYXMgbGFzdCB0aW1lLCBpdCBiYWlscyBvdXQgb2YgcmUtcmVuZGVyaW5nXG4gICAgICAvLyB0aGF0IGNoaWxkLCBzYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIFJlYWN0Lm1lbW8oKSBvciByZXR1cm5lZCBmYWxzZSBmcm9tIHNob3VsZENvbXBvbmVudFVwZGF0ZS5cblxuICAgICAgY29uc3QgcmVuZGVyZWRDaGlsZCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBjb21wb25lbnQgaXMgc3Vic2NyaWJlZCB0byBzdG9yZSB1cGRhdGVzLCB3ZSBuZWVkIHRvIHBhc3MgaXRzIG93blxuICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbiBpbnN0YW5jZSBkb3duIHRvIG91ciBkZXNjZW5kYW50cy4gVGhhdCBtZWFucyByZW5kZXJpbmcgdGhlIHNhbWVcbiAgICAgICAgICAvLyBDb250ZXh0IGluc3RhbmNlLCBhbmQgcHV0dGluZyBhIGRpZmZlcmVudCB2YWx1ZSBpbnRvIHRoZSBjb250ZXh0LlxuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0VG9Vc2UuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgIHZhbHVlOiBvdmVycmlkZGVuQ29udGV4dFZhbHVlXG4gICAgICAgICAgfSwgcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQ7XG4gICAgICB9LCBbQ29udGV4dFRvVXNlLCByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQsIG92ZXJyaWRkZW5Db250ZXh0VmFsdWVdKTtcbiAgICAgIHJldHVybiByZW5kZXJlZENoaWxkO1xuICAgIH1cblxuICAgIGNvbnN0IF9Db25uZWN0ID0gUmVhY3QubWVtbyhDb25uZWN0RnVuY3Rpb24pO1xuXG4gICAgLy8gQWRkIGEgaGFja3kgY2FzdCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCB0eXBlXG4gICAgY29uc3QgQ29ubmVjdCA9IF9Db25uZWN0O1xuICAgIENvbm5lY3QuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XG4gICAgQ29ubmVjdC5kaXNwbGF5TmFtZSA9IENvbm5lY3RGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuXG4gICAgaWYgKGZvcndhcmRSZWYpIHtcbiAgICAgIGNvbnN0IF9mb3J3YXJkZWQgPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIGZvcndhcmRDb25uZWN0UmVmKHByb3BzLCByZWYpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29ubmVjdCwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgcmVhY3RSZWR1eEZvcndhcmRlZFJlZjogcmVmXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmb3J3YXJkZWQgPSBfZm9yd2FyZGVkO1xuICAgICAgZm9yd2FyZGVkLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICBmb3J3YXJkZWQuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XG4gICAgICByZXR1cm4gaG9pc3RTdGF0aWNzKGZvcndhcmRlZCwgV3JhcHBlZENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvaXN0U3RhdGljcyhDb25uZWN0LCBXcmFwcGVkQ29tcG9uZW50KTtcbiAgfTtcblxuICByZXR1cm4gd3JhcFdpdGhDb25uZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB2ZXJpZnlQbGFpbk9iamVjdCBmcm9tICcuLi91dGlscy92ZXJpZnlQbGFpbk9iamVjdCc7XG5pbXBvcnQgeyBjcmVhdGVJbnZhbGlkQXJnRmFjdG9yeSB9IGZyb20gJy4vaW52YWxpZEFyZ0ZhY3RvcnknO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvd25Qcm9wcywgc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRNZXJnZVByb3BzUHJveHkoZGlzcGF0Y2gsIHtcbiAgICBkaXNwbGF5TmFtZSxcbiAgICBhcmVNZXJnZWRQcm9wc0VxdWFsXG4gIH0pIHtcbiAgICBsZXQgaGFzUnVuT25jZSA9IGZhbHNlO1xuICAgIGxldCBtZXJnZWRQcm9wcztcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gICAgICBjb25zdCBuZXh0TWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcblxuICAgICAgaWYgKGhhc1J1bk9uY2UpIHtcbiAgICAgICAgaWYgKCFhcmVNZXJnZWRQcm9wc0VxdWFsKG5leHRNZXJnZWRQcm9wcywgbWVyZ2VkUHJvcHMpKSBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhc1J1bk9uY2UgPSB0cnVlO1xuICAgICAgICBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHZlcmlmeVBsYWluT2JqZWN0KG1lcmdlZFByb3BzLCBkaXNwbGF5TmFtZSwgJ21lcmdlUHJvcHMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lcmdlZFByb3BzO1xuICAgIH07XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VQcm9wc0ZhY3RvcnkobWVyZ2VQcm9wcykge1xuICByZXR1cm4gIW1lcmdlUHJvcHMgPyAoKSA9PiBkZWZhdWx0TWVyZ2VQcm9wcyA6IHR5cGVvZiBtZXJnZVByb3BzID09PSAnZnVuY3Rpb24nID8gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIDogY3JlYXRlSW52YWxpZEFyZ0ZhY3RvcnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnKTtcbn0iLCAiaW1wb3J0IHsgZ2V0QmF0Y2ggfSBmcm9tICcuL2JhdGNoJzsgLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xuLy8gd2VsbCBhcyBuZXN0aW5nIHN1YnNjcmlwdGlvbnMgb2YgZGVzY2VuZGFudCBjb21wb25lbnRzLCBzbyB0aGF0IHdlIGNhbiBlbnN1cmUgdGhlXG4vLyBhbmNlc3RvciBjb21wb25lbnRzIHJlLXJlbmRlciBiZWZvcmUgZGVzY2VuZGFudHNcblxuZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCkge1xuICBjb25zdCBiYXRjaCA9IGdldEJhdGNoKCk7XG4gIGxldCBmaXJzdCA9IG51bGw7XG4gIGxldCBsYXN0ID0gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBjbGVhcigpIHtcbiAgICAgIGZpcnN0ID0gbnVsbDtcbiAgICAgIGxhc3QgPSBudWxsO1xuICAgIH0sXG5cbiAgICBub3RpZnkoKSB7XG4gICAgICBiYXRjaCgoKSA9PiB7XG4gICAgICAgIGxldCBsaXN0ZW5lciA9IGZpcnN0O1xuXG4gICAgICAgIHdoaWxlIChsaXN0ZW5lcikge1xuICAgICAgICAgIGxpc3RlbmVyLmNhbGxiYWNrKCk7XG4gICAgICAgICAgbGlzdGVuZXIgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgZ2V0KCkge1xuICAgICAgbGV0IGxpc3RlbmVycyA9IFtdO1xuICAgICAgbGV0IGxpc3RlbmVyID0gZmlyc3Q7XG5cbiAgICAgIHdoaWxlIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIGxpc3RlbmVyID0gbGlzdGVuZXIubmV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpc3RlbmVycztcbiAgICB9LFxuXG4gICAgc3Vic2NyaWJlKGNhbGxiYWNrKSB7XG4gICAgICBsZXQgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgICAgIGxldCBsaXN0ZW5lciA9IGxhc3QgPSB7XG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICBwcmV2OiBsYXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAobGlzdGVuZXIucHJldikge1xuICAgICAgICBsaXN0ZW5lci5wcmV2Lm5leHQgPSBsaXN0ZW5lcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpcnN0ID0gbGlzdGVuZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQgfHwgZmlyc3QgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyLm5leHQpIHtcbiAgICAgICAgICBsaXN0ZW5lci5uZXh0LnByZXYgPSBsaXN0ZW5lci5wcmV2O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3QgPSBsaXN0ZW5lci5wcmV2O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyLnByZXYpIHtcbiAgICAgICAgICBsaXN0ZW5lci5wcmV2Lm5leHQgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpcnN0ID0gbGlzdGVuZXIubmV4dDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgfTtcbn1cblxuY29uc3QgbnVsbExpc3RlbmVycyA9IHtcbiAgbm90aWZ5KCkge30sXG5cbiAgZ2V0OiAoKSA9PiBbXVxufTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yikge1xuICBsZXQgdW5zdWJzY3JpYmU7XG4gIGxldCBsaXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzOyAvLyBSZWFzb25zIHRvIGtlZXAgdGhlIHN1YnNjcmlwdGlvbiBhY3RpdmVcblxuICBsZXQgc3Vic2NyaXB0aW9uc0Ftb3VudCA9IDA7IC8vIElzIHRoaXMgc3BlY2lmaWMgc3Vic2NyaXB0aW9uIHN1YnNjcmliZWQgKG9yIG9ubHkgbmVzdGVkIG9uZXM/KVxuXG4gIGxldCBzZWxmU3Vic2NyaWJlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGFkZE5lc3RlZFN1YihsaXN0ZW5lcikge1xuICAgIHRyeVN1YnNjcmliZSgpO1xuICAgIGNvbnN0IGNsZWFudXBMaXN0ZW5lciA9IGxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpOyAvLyBjbGVhbnVwIG5lc3RlZCBzdWJcblxuICAgIGxldCByZW1vdmVkID0gZmFsc2U7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICghcmVtb3ZlZCkge1xuICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cExpc3RlbmVyKCk7XG4gICAgICAgIHRyeVVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XG4gICAgbGlzdGVuZXJzLm5vdGlmeSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlV3JhcHBlcigpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xuICAgIHJldHVybiBzZWxmU3Vic2NyaWJlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcbiAgICBzdWJzY3JpcHRpb25zQW1vdW50Kys7XG5cbiAgICBpZiAoIXVuc3Vic2NyaWJlKSB7XG4gICAgICB1bnN1YnNjcmliZSA9IHBhcmVudFN1YiA/IHBhcmVudFN1Yi5hZGROZXN0ZWRTdWIoaGFuZGxlQ2hhbmdlV3JhcHBlcikgOiBzdG9yZS5zdWJzY3JpYmUoaGFuZGxlQ2hhbmdlV3JhcHBlcik7XG4gICAgICBsaXN0ZW5lcnMgPSBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cnlVbnN1YnNjcmliZSgpIHtcbiAgICBzdWJzY3JpcHRpb25zQW1vdW50LS07XG5cbiAgICBpZiAodW5zdWJzY3JpYmUgJiYgc3Vic2NyaXB0aW9uc0Ftb3VudCA9PT0gMCkge1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIHVuc3Vic2NyaWJlID0gdW5kZWZpbmVkO1xuICAgICAgbGlzdGVuZXJzLmNsZWFyKCk7XG4gICAgICBsaXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVN1YnNjcmliZVNlbGYoKSB7XG4gICAgaWYgKCFzZWxmU3Vic2NyaWJlZCkge1xuICAgICAgc2VsZlN1YnNjcmliZWQgPSB0cnVlO1xuICAgICAgdHJ5U3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmVTZWxmKCkge1xuICAgIGlmIChzZWxmU3Vic2NyaWJlZCkge1xuICAgICAgc2VsZlN1YnNjcmliZWQgPSBmYWxzZTtcbiAgICAgIHRyeVVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0ge1xuICAgIGFkZE5lc3RlZFN1YixcbiAgICBub3RpZnlOZXN0ZWRTdWJzLFxuICAgIGhhbmRsZUNoYW5nZVdyYXBwZXIsXG4gICAgaXNTdWJzY3JpYmVkLFxuICAgIHRyeVN1YnNjcmliZTogdHJ5U3Vic2NyaWJlU2VsZixcbiAgICB0cnlVbnN1YnNjcmliZTogdHJ5VW5zdWJzY3JpYmVTZWxmLFxuICAgIGdldExpc3RlbmVyczogKCkgPT4gbGlzdGVuZXJzXG4gIH07XG4gIHJldHVybiBzdWJzY3JpcHRpb247XG59IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8gUmVhY3QgY3VycmVudGx5IHRocm93cyBhIHdhcm5pbmcgd2hlbiB1c2luZyB1c2VMYXlvdXRFZmZlY3Qgb24gdGhlIHNlcnZlci5cbi8vIFRvIGdldCBhcm91bmQgaXQsIHdlIGNhbiBjb25kaXRpb25hbGx5IHVzZUVmZmVjdCBvbiB0aGUgc2VydmVyIChuby1vcCkgYW5kXG4vLyB1c2VMYXlvdXRFZmZlY3QgaW4gdGhlIGJyb3dzZXIuIFdlIG5lZWQgdXNlTGF5b3V0RWZmZWN0IHRvIGVuc3VyZSB0aGUgc3RvcmVcbi8vIHN1YnNjcmlwdGlvbiBjYWxsYmFjayBhbHdheXMgaGFzIHRoZSBzZWxlY3RvciBmcm9tIHRoZSBsYXRlc3QgcmVuZGVyIGNvbW1pdFxuLy8gYXZhaWxhYmxlLCBvdGhlcndpc2UgYSBzdG9yZSB1cGRhdGUgbWF5IGhhcHBlbiBiZXR3ZWVuIHJlbmRlciBhbmQgdGhlIGVmZmVjdCxcbi8vIHdoaWNoIG1heSBjYXVzZSBtaXNzZWQgdXBkYXRlczsgd2UgYWxzbyBtdXN0IGVuc3VyZSB0aGUgc3RvcmUgc3Vic2NyaXB0aW9uXG4vLyBpcyBjcmVhdGVkIHN5bmNocm9ub3VzbHksIG90aGVyd2lzZSBhIHN0b3JlIHVwZGF0ZSBtYXkgb2NjdXIgYmVmb3JlIHRoZVxuLy8gc3Vic2NyaXB0aW9uIGlzIGNyZWF0ZWQgYW5kIGFuIGluY29uc2lzdGVudCBzdGF0ZSBtYXkgYmUgb2JzZXJ2ZWRcbi8vIE1hdGNoZXMgbG9naWMgaW4gUmVhY3QncyBgc2hhcmVkL0V4ZWN1dGlvbkVudmlyb25tZW50YCBmaWxlXG5cbmV4cG9ydCBjb25zdCBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKTtcbmV4cG9ydCBjb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gY2FuVXNlRE9NID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0OyIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vQ29udGV4dCc7XG5pbXBvcnQgeyBjcmVhdGVTdWJzY3JpcHRpb24gfSBmcm9tICcuLi91dGlscy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4uL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QnO1xuXG5mdW5jdGlvbiBQcm92aWRlcih7XG4gIHN0b3JlLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgc2VydmVyU3RhdGUsXG4gIHN0YWJpbGl0eUNoZWNrID0gJ29uY2UnLFxuICBub29wQ2hlY2sgPSAnb25jZSdcbn0pIHtcbiAgY29uc3QgY29udGV4dFZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY3JlYXRlU3Vic2NyaXB0aW9uKHN0b3JlKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcmUsXG4gICAgICBzdWJzY3JpcHRpb24sXG4gICAgICBnZXRTZXJ2ZXJTdGF0ZTogc2VydmVyU3RhdGUgPyAoKSA9PiBzZXJ2ZXJTdGF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0YWJpbGl0eUNoZWNrLFxuICAgICAgbm9vcENoZWNrXG4gICAgfTtcbiAgfSwgW3N0b3JlLCBzZXJ2ZXJTdGF0ZSwgc3RhYmlsaXR5Q2hlY2ssIG5vb3BDaGVja10pO1xuICBjb25zdCBwcmV2aW91c1N0YXRlID0gUmVhY3QudXNlTWVtbygoKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLCBbc3RvcmVdKTtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc3Vic2NyaXB0aW9uXG4gICAgfSA9IGNvbnRleHRWYWx1ZTtcbiAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IHN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzO1xuICAgIHN1YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKTtcblxuICAgIGlmIChwcmV2aW91c1N0YXRlICE9PSBzdG9yZS5nZXRTdGF0ZSgpKSB7XG4gICAgICBzdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3VicygpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcbiAgICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gdW5kZWZpbmVkO1xuICAgIH07XG4gIH0sIFtjb250ZXh0VmFsdWUsIHByZXZpb3VzU3RhdGVdKTtcbiAgY29uc3QgQ29udGV4dCA9IGNvbnRleHQgfHwgUmVhY3RSZWR1eENvbnRleHQ7IC8vIEB0cy1pZ25vcmUgJ0FueUFjdGlvbicgaXMgYXNzaWduYWJsZSB0byB0aGUgY29uc3RyYWludCBvZiB0eXBlICdBJywgYnV0ICdBJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlXG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gIH0sIGNoaWxkcmVuKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJvdmlkZXI7IiwgImltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcbmltcG9ydCB7IHVzZVJlZHV4Q29udGV4dCBhcyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0LCBjcmVhdGVSZWR1eENvbnRleHRIb29rIH0gZnJvbSAnLi91c2VSZWR1eENvbnRleHQnO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VTdG9yZWAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZVN0b3JlYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdG9yZUhvb2soY29udGV4dCA9IFJlYWN0UmVkdXhDb250ZXh0KSB7XG4gIGNvbnN0IHVzZVJlZHV4Q29udGV4dCA9IC8vIEB0cy1pZ25vcmVcbiAgY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IDogLy8gQHRzLWlnbm9yZVxuICBjcmVhdGVSZWR1eENvbnRleHRIb29rKGNvbnRleHQpO1xuICByZXR1cm4gZnVuY3Rpb24gdXNlU3RvcmUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RvcmVcbiAgICB9ID0gdXNlUmVkdXhDb250ZXh0KCk7IC8vIEB0cy1pZ25vcmVcblxuICAgIHJldHVybiBzdG9yZTtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBzdG9yZS5cclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHJlZHV4IHN0b3JlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlU3RvcmUgfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IEV4YW1wbGVDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgY29uc3Qgc3RvcmUgPSB1c2VTdG9yZSgpXHJcbiAqICAgcmV0dXJuIDxkaXY+e3N0b3JlLmdldFN0YXRlKCl9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VTdG9yZSA9IC8qI19fUFVSRV9fKi9jcmVhdGVTdG9yZUhvb2soKTsiLCAiaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IHsgdXNlU3RvcmUgYXMgdXNlRGVmYXVsdFN0b3JlLCBjcmVhdGVTdG9yZUhvb2sgfSBmcm9tICcuL3VzZVN0b3JlJztcbi8qKlxyXG4gKiBIb29rIGZhY3RvcnksIHdoaWNoIGNyZWF0ZXMgYSBgdXNlRGlzcGF0Y2hgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0LkNvbnRleHR9IFtjb250ZXh0PVJlYWN0UmVkdXhDb250ZXh0XSBDb250ZXh0IHBhc3NlZCB0byB5b3VyIGA8UHJvdmlkZXI+YC5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGB1c2VEaXNwYXRjaGAgaG9vayBib3VuZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hIb29rKGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dCkge1xuICBjb25zdCB1c2VTdG9yZSA9IC8vIEB0cy1pZ25vcmVcbiAgY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0U3RvcmUgOiBjcmVhdGVTdG9yZUhvb2soY29udGV4dCk7XG4gIHJldHVybiBmdW5jdGlvbiB1c2VEaXNwYXRjaCgpIHtcbiAgICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKCk7IC8vIEB0cy1pZ25vcmVcblxuICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaDtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBgZGlzcGF0Y2hgIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7YW55fGZ1bmN0aW9ufSByZWR1eCBzdG9yZSdzIGBkaXNwYXRjaGAgZnVuY3Rpb25cclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXHJcbiAqIGltcG9ydCB7IHVzZURpc3BhdGNoIH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyQ29tcG9uZW50ID0gKHsgdmFsdWUgfSkgPT4ge1xyXG4gKiAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKVxyXG4gKiAgIGNvbnN0IGluY3JlYXNlQ291bnRlciA9IHVzZUNhbGxiYWNrKCgpID0+IGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlYXNlLWNvdW50ZXInIH0pLCBbXSlcclxuICogICByZXR1cm4gKFxyXG4gKiAgICAgPGRpdj5cclxuICogICAgICAgPHNwYW4+e3ZhbHVlfTwvc3Bhbj5cclxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtpbmNyZWFzZUNvdW50ZXJ9PkluY3JlYXNlIGNvdW50ZXI8L2J1dHRvbj5cclxuICogICAgIDwvZGl2PlxyXG4gKiAgIClcclxuICogfVxyXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZURpc3BhdGNoID0gLyojX19QVVJFX18qL2NyZWF0ZURpc3BhdGNoSG9vaygpOyIsICJpbXBvcnQgeyBUeXBlZFVzZVNlbGVjdG9ySG9vaywgdXNlU2VsZWN0b3IsIHVzZURpc3BhdGNoIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5pbXBvcnQgdHlwZSB7IFJvb3RTdGF0ZSwgQXBwRGlzcGF0Y2ggfSBmcm9tIFwiLi9zdG9yZVwiO1xuXG5leHBvcnQgY29uc3QgdXNlQXBwRGlzcGF0Y2ggPSAoKSA9PiB1c2VEaXNwYXRjaDxBcHBEaXNwYXRjaD4oKTtcbmV4cG9ydCBjb25zdCB1c2VBcHBTZWxlY3RvcjogVHlwZWRVc2VTZWxlY3Rvckhvb2s8Um9vdFN0YXRlPiA9IHVzZVNlbGVjdG9yO1xuIiwgImNvbnN0IGVycm9ycyA9IHtcblx0MDogXCJJbGxlZ2FsIHN0YXRlXCIsXG5cdDE6IFwiSW1tZXIgZHJhZnRzIGNhbm5vdCBoYXZlIGNvbXB1dGVkIHByb3BlcnRpZXNcIixcblx0MjogXCJUaGlzIG9iamVjdCBoYXMgYmVlbiBmcm96ZW4gYW5kIHNob3VsZCBub3QgYmUgbXV0YXRlZFwiLFxuXHQzKGRhdGE6IGFueSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRcIkNhbm5vdCB1c2UgYSBwcm94eSB0aGF0IGhhcyBiZWVuIHJldm9rZWQuIERpZCB5b3UgcGFzcyBhbiBvYmplY3QgZnJvbSBpbnNpZGUgYW4gaW1tZXIgZnVuY3Rpb24gdG8gYW4gYXN5bmMgcHJvY2Vzcz8gXCIgK1xuXHRcdFx0ZGF0YVxuXHRcdClcblx0fSxcblx0NDogXCJBbiBpbW1lciBwcm9kdWNlciByZXR1cm5lZCBhIG5ldyB2YWx1ZSAqYW5kKiBtb2RpZmllZCBpdHMgZHJhZnQuIEVpdGhlciByZXR1cm4gYSBuZXcgdmFsdWUgKm9yKiBtb2RpZnkgdGhlIGRyYWZ0LlwiLFxuXHQ1OiBcIkltbWVyIGZvcmJpZHMgY2lyY3VsYXIgcmVmZXJlbmNlc1wiLFxuXHQ2OiBcIlRoZSBmaXJzdCBvciBzZWNvbmQgYXJndW1lbnQgdG8gYHByb2R1Y2VgIG11c3QgYmUgYSBmdW5jdGlvblwiLFxuXHQ3OiBcIlRoZSB0aGlyZCBhcmd1bWVudCB0byBgcHJvZHVjZWAgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIHVuZGVmaW5lZFwiLFxuXHQ4OiBcIkZpcnN0IGFyZ3VtZW50IHRvIGBjcmVhdGVEcmFmdGAgbXVzdCBiZSBhIHBsYWluIG9iamVjdCwgYW4gYXJyYXksIG9yIGFuIGltbWVyYWJsZSBvYmplY3RcIixcblx0OTogXCJGaXJzdCBhcmd1bWVudCB0byBgZmluaXNoRHJhZnRgIG11c3QgYmUgYSBkcmFmdCByZXR1cm5lZCBieSBgY3JlYXRlRHJhZnRgXCIsXG5cdDEwOiBcIlRoZSBnaXZlbiBkcmFmdCBpcyBhbHJlYWR5IGZpbmFsaXplZFwiLFxuXHQxMTogXCJPYmplY3QuZGVmaW5lUHJvcGVydHkoKSBjYW5ub3QgYmUgdXNlZCBvbiBhbiBJbW1lciBkcmFmdFwiLFxuXHQxMjogXCJPYmplY3Quc2V0UHJvdG90eXBlT2YoKSBjYW5ub3QgYmUgdXNlZCBvbiBhbiBJbW1lciBkcmFmdFwiLFxuXHQxMzogXCJJbW1lciBvbmx5IHN1cHBvcnRzIGRlbGV0aW5nIGFycmF5IGluZGljZXNcIixcblx0MTQ6IFwiSW1tZXIgb25seSBzdXBwb3J0cyBzZXR0aW5nIGFycmF5IGluZGljZXMgYW5kIHRoZSAnbGVuZ3RoJyBwcm9wZXJ0eVwiLFxuXHQxNShwYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gXCJDYW5ub3QgYXBwbHkgcGF0Y2gsIHBhdGggZG9lc24ndCByZXNvbHZlOiBcIiArIHBhdGhcblx0fSxcblx0MTY6ICdTZXRzIGNhbm5vdCBoYXZlIFwicmVwbGFjZVwiIHBhdGNoZXMuJyxcblx0MTcob3A6IHN0cmluZykge1xuXHRcdHJldHVybiBcIlVuc3VwcG9ydGVkIHBhdGNoIG9wZXJhdGlvbjogXCIgKyBvcFxuXHR9LFxuXHQxOChwbHVnaW46IHN0cmluZykge1xuXHRcdHJldHVybiBgVGhlIHBsdWdpbiBmb3IgJyR7cGx1Z2lufScgaGFzIG5vdCBiZWVuIGxvYWRlZCBpbnRvIEltbWVyLiBUbyBlbmFibGUgdGhlIHBsdWdpbiwgaW1wb3J0IGFuZCBjYWxsIFxcYGVuYWJsZSR7cGx1Z2lufSgpXFxgIHdoZW4gaW5pdGlhbGl6aW5nIHlvdXIgYXBwbGljYXRpb24uYFxuXHR9LFxuXHQyMDogXCJDYW5ub3QgdXNlIHByb3hpZXMgaWYgUHJveHksIFByb3h5LnJldm9jYWJsZSBvciBSZWZsZWN0IGFyZSBub3QgYXZhaWxhYmxlXCIsXG5cdDIxKHRoaW5nOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYHByb2R1Y2UgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIHRoaW5ncyB0aGF0IGFyZSBkcmFmdGFibGU6IHBsYWluIG9iamVjdHMsIGFycmF5cywgTWFwLCBTZXQgb3IgY2xhc3NlcyB0aGF0IGFyZSBtYXJrZWQgd2l0aCAnW2ltbWVyYWJsZV06IHRydWUnLiBHb3QgJyR7dGhpbmd9J2Bcblx0fSxcblx0MjIodGhpbmc6IHN0cmluZykge1xuXHRcdHJldHVybiBgJ2N1cnJlbnQnIGV4cGVjdHMgYSBkcmFmdCwgZ290OiAke3RoaW5nfWBcblx0fSxcblx0MjModGhpbmc6IHN0cmluZykge1xuXHRcdHJldHVybiBgJ29yaWdpbmFsJyBleHBlY3RzIGEgZHJhZnQsIGdvdDogJHt0aGluZ31gXG5cdH0sXG5cdDI0OiBcIlBhdGNoaW5nIHJlc2VydmVkIGF0dHJpYnV0ZXMgbGlrZSBfX3Byb3RvX18sIHByb3RvdHlwZSBhbmQgY29uc3RydWN0b3IgaXMgbm90IGFsbG93ZWRcIlxufSBhcyBjb25zdFxuXG5leHBvcnQgZnVuY3Rpb24gZGllKGVycm9yOiBrZXlvZiB0eXBlb2YgZXJyb3JzLCAuLi5hcmdzOiBhbnlbXSk6IG5ldmVyIHtcblx0aWYgKF9fREVWX18pIHtcblx0XHRjb25zdCBlID0gZXJyb3JzW2Vycm9yXVxuXHRcdGNvbnN0IG1zZyA9ICFlXG5cdFx0XHQ/IFwidW5rbm93biBlcnJvciBucjogXCIgKyBlcnJvclxuXHRcdFx0OiB0eXBlb2YgZSA9PT0gXCJmdW5jdGlvblwiXG5cdFx0XHQ/IGUuYXBwbHkobnVsbCwgYXJncyBhcyBhbnkpXG5cdFx0XHQ6IGVcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFtJbW1lcl0gJHttc2d9YClcblx0fVxuXHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0YFtJbW1lcl0gbWluaWZpZWQgZXJyb3IgbnI6ICR7ZXJyb3J9JHtcblx0XHRcdGFyZ3MubGVuZ3RoID8gXCIgXCIgKyBhcmdzLm1hcChzID0+IGAnJHtzfSdgKS5qb2luKFwiLFwiKSA6IFwiXCJcblx0XHR9LiBGaW5kIHRoZSBmdWxsIGVycm9yIGF0OiBodHRwczovL2JpdC5seS8zY1hFS1dmYFxuXHQpXG59XG4iLCAiaW1wb3J0IHtcblx0RFJBRlRfU1RBVEUsXG5cdERSQUZUQUJMRSxcblx0aGFzU2V0LFxuXHRPYmplY3Rpc2gsXG5cdERyYWZ0ZWQsXG5cdEFueU9iamVjdCxcblx0QW55TWFwLFxuXHRBbnlTZXQsXG5cdEltbWVyU3RhdGUsXG5cdGhhc01hcCxcblx0QXJjaHR5cGUsXG5cdGRpZVxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBJbW1lciBkcmFmdCAqL1xuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISF2YWx1ZSAmJiAhIXZhbHVlW0RSQUZUX1NUQVRFXVxufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBjYW4gYmUgZHJhZnRlZCBieSBJbW1lciAqL1xuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnRhYmxlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0aWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlXG5cdHJldHVybiAoXG5cdFx0aXNQbGFpbk9iamVjdCh2YWx1ZSkgfHxcblx0XHRBcnJheS5pc0FycmF5KHZhbHVlKSB8fFxuXHRcdCEhdmFsdWVbRFJBRlRBQkxFXSB8fFxuXHRcdCEhdmFsdWUuY29uc3RydWN0b3I/LltEUkFGVEFCTEVdIHx8XG5cdFx0aXNNYXAodmFsdWUpIHx8XG5cdFx0aXNTZXQodmFsdWUpXG5cdClcbn1cblxuY29uc3Qgb2JqZWN0Q3RvclN0cmluZyA9IE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IudG9TdHJpbmcoKVxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG5cdGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cdGNvbnN0IEN0b3IgPVxuXHRcdE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yXG5cblx0aWYgKEN0b3IgPT09IE9iamVjdCkgcmV0dXJuIHRydWVcblxuXHRyZXR1cm4gKFxuXHRcdHR5cGVvZiBDdG9yID09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoQ3RvcikgPT09IG9iamVjdEN0b3JTdHJpbmdcblx0KVxufVxuXG4vKiogR2V0IHRoZSB1bmRlcmx5aW5nIG9iamVjdCB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBkcmFmdCAqL1xuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIG9yaWdpbmFsPFQ+KHZhbHVlOiBUKTogVCB8IHVuZGVmaW5lZFxuZXhwb3J0IGZ1bmN0aW9uIG9yaWdpbmFsKHZhbHVlOiBEcmFmdGVkPGFueT4pOiBhbnkge1xuXHRpZiAoIWlzRHJhZnQodmFsdWUpKSBkaWUoMjMsIHZhbHVlKVxuXHRyZXR1cm4gdmFsdWVbRFJBRlRfU1RBVEVdLmJhc2VfXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBjb25zdCBvd25LZXlzOiAodGFyZ2V0OiBBbnlPYmplY3QpID0+IFByb3BlcnR5S2V5W10gPVxuXHR0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0Lm93bktleXNcblx0XHQ/IFJlZmxlY3Qub3duS2V5c1xuXHRcdDogdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09IFwidW5kZWZpbmVkXCJcblx0XHQ/IG9iaiA9PlxuXHRcdFx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmNvbmNhdChcblx0XHRcdFx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikgYXMgYW55XG5cdFx0XHRcdClcblx0XHQ6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG5cbmV4cG9ydCBjb25zdCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID1cblx0T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgfHxcblx0ZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0YXJnZXQ6IGFueSkge1xuXHRcdC8vIFBvbHlmaWxsIG5lZWRlZCBmb3IgSGVybWVzIGFuZCBJRSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9oZXJtZXMvaXNzdWVzLzI3NFxuXHRcdGNvbnN0IHJlczogYW55ID0ge31cblx0XHRvd25LZXlzKHRhcmdldCkuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0cmVzW2tleV0gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KVxuXHRcdH0pXG5cdFx0cmV0dXJuIHJlc1xuXHR9XG5cbmV4cG9ydCBmdW5jdGlvbiBlYWNoPFQgZXh0ZW5kcyBPYmplY3Rpc2g+KFxuXHRvYmo6IFQsXG5cdGl0ZXI6IChrZXk6IHN0cmluZyB8IG51bWJlciwgdmFsdWU6IGFueSwgc291cmNlOiBUKSA9PiB2b2lkLFxuXHRlbnVtZXJhYmxlT25seT86IGJvb2xlYW5cbik6IHZvaWRcbmV4cG9ydCBmdW5jdGlvbiBlYWNoKG9iajogYW55LCBpdGVyOiBhbnksIGVudW1lcmFibGVPbmx5ID0gZmFsc2UpIHtcblx0aWYgKGdldEFyY2h0eXBlKG9iaikgPT09IEFyY2h0eXBlLk9iamVjdCkge1xuXHRcdDsoZW51bWVyYWJsZU9ubHkgPyBPYmplY3Qua2V5cyA6IG93bktleXMpKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0aWYgKCFlbnVtZXJhYmxlT25seSB8fCB0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSBpdGVyKGtleSwgb2JqW2tleV0sIG9iailcblx0XHR9KVxuXHR9IGVsc2Uge1xuXHRcdG9iai5mb3JFYWNoKChlbnRyeTogYW55LCBpbmRleDogYW55KSA9PiBpdGVyKGluZGV4LCBlbnRyeSwgb2JqKSlcblx0fVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXJjaHR5cGUodGhpbmc6IGFueSk6IEFyY2h0eXBlIHtcblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0Y29uc3Qgc3RhdGU6IHVuZGVmaW5lZCB8IEltbWVyU3RhdGUgPSB0aGluZ1tEUkFGVF9TVEFURV1cblx0cmV0dXJuIHN0YXRlXG5cdFx0PyBzdGF0ZS50eXBlXyA+IDNcblx0XHRcdD8gc3RhdGUudHlwZV8gLSA0IC8vIGNhdXNlIE9iamVjdCBhbmQgQXJyYXkgbWFwIGJhY2sgZnJvbSA0IGFuZCA1XG5cdFx0XHQ6IChzdGF0ZS50eXBlXyBhcyBhbnkpIC8vIG90aGVycyBhcmUgdGhlIHNhbWVcblx0XHQ6IEFycmF5LmlzQXJyYXkodGhpbmcpXG5cdFx0PyBBcmNodHlwZS5BcnJheVxuXHRcdDogaXNNYXAodGhpbmcpXG5cdFx0PyBBcmNodHlwZS5NYXBcblx0XHQ6IGlzU2V0KHRoaW5nKVxuXHRcdD8gQXJjaHR5cGUuU2V0XG5cdFx0OiBBcmNodHlwZS5PYmplY3Rcbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGhhcyh0aGluZzogYW55LCBwcm9wOiBQcm9wZXJ0eUtleSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZ2V0QXJjaHR5cGUodGhpbmcpID09PSBBcmNodHlwZS5NYXBcblx0XHQ/IHRoaW5nLmhhcyhwcm9wKVxuXHRcdDogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaW5nLCBwcm9wKVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gZ2V0KHRoaW5nOiBBbnlNYXAgfCBBbnlPYmplY3QsIHByb3A6IFByb3BlcnR5S2V5KTogYW55IHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRyZXR1cm4gZ2V0QXJjaHR5cGUodGhpbmcpID09PSBBcmNodHlwZS5NYXAgPyB0aGluZy5nZXQocHJvcCkgOiB0aGluZ1twcm9wXVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gc2V0KHRoaW5nOiBhbnksIHByb3BPck9sZFZhbHVlOiBQcm9wZXJ0eUtleSwgdmFsdWU6IGFueSkge1xuXHRjb25zdCB0ID0gZ2V0QXJjaHR5cGUodGhpbmcpXG5cdGlmICh0ID09PSBBcmNodHlwZS5NYXApIHRoaW5nLnNldChwcm9wT3JPbGRWYWx1ZSwgdmFsdWUpXG5cdGVsc2UgaWYgKHQgPT09IEFyY2h0eXBlLlNldCkge1xuXHRcdHRoaW5nLmFkZCh2YWx1ZSlcblx0fSBlbHNlIHRoaW5nW3Byb3BPck9sZFZhbHVlXSA9IHZhbHVlXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpcyh4OiBhbnksIHk6IGFueSk6IGJvb2xlYW4ge1xuXHQvLyBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmJqcy9ibG9iL2M2OTkwNGE1MTFiOTAwMjY2OTM1MTY4MjIzMDYzZGQ4NzcyZGZjNDAvcGFja2FnZXMvZmJqcy9zcmMvY29yZS9zaGFsbG93RXF1YWwuanNcblx0aWYgKHggPT09IHkpIHtcblx0XHRyZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHlcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5XG5cdH1cbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWFwKHRhcmdldDogYW55KTogdGFyZ2V0IGlzIEFueU1hcCB7XG5cdHJldHVybiBoYXNNYXAgJiYgdGFyZ2V0IGluc3RhbmNlb2YgTWFwXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NldCh0YXJnZXQ6IGFueSk6IHRhcmdldCBpcyBBbnlTZXQge1xuXHRyZXR1cm4gaGFzU2V0ICYmIHRhcmdldCBpbnN0YW5jZW9mIFNldFxufVxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdChzdGF0ZTogSW1tZXJTdGF0ZSk6IGFueSB7XG5cdHJldHVybiBzdGF0ZS5jb3B5XyB8fCBzdGF0ZS5iYXNlX1xufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gc2hhbGxvd0NvcHkoYmFzZTogYW55KSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGJhc2UpKSByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYmFzZSlcblx0Y29uc3QgZGVzY3JpcHRvcnMgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGJhc2UpXG5cdGRlbGV0ZSBkZXNjcmlwdG9yc1tEUkFGVF9TVEFURSBhcyBhbnldXG5cdGxldCBrZXlzID0gb3duS2V5cyhkZXNjcmlwdG9ycylcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qga2V5OiBhbnkgPSBrZXlzW2ldXG5cdFx0Y29uc3QgZGVzYyA9IGRlc2NyaXB0b3JzW2tleV1cblx0XHRpZiAoZGVzYy53cml0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdGRlc2Mud3JpdGFibGUgPSB0cnVlXG5cdFx0XHRkZXNjLmNvbmZpZ3VyYWJsZSA9IHRydWVcblx0XHR9XG5cdFx0Ly8gbGlrZSBvYmplY3QuYXNzaWduLCB3ZSB3aWxsIHJlYWQgYW55IF9vd25fLCBnZXQvc2V0IGFjY2Vzc29ycy4gVGhpcyBoZWxwcyBpbiBkZWFsaW5nXG5cdFx0Ly8gd2l0aCBsaWJyYXJpZXMgdGhhdCB0cmFwIHZhbHVlcywgbGlrZSBtb2J4IG9yIHZ1ZVxuXHRcdC8vIHVubGlrZSBvYmplY3QuYXNzaWduLCBub24tZW51bWVyYWJsZXMgd2lsbCBiZSBjb3BpZWQgYXMgd2VsbFxuXHRcdGlmIChkZXNjLmdldCB8fCBkZXNjLnNldClcblx0XHRcdGRlc2NyaXB0b3JzW2tleV0gPSB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsIC8vIGNvdWxkIGxpdmUgd2l0aCAhIWRlc2Muc2V0IGFzIHdlbGwgaGVyZS4uLlxuXHRcdFx0XHRlbnVtZXJhYmxlOiBkZXNjLmVudW1lcmFibGUsXG5cdFx0XHRcdHZhbHVlOiBiYXNlW2tleV1cblx0XHRcdH1cblx0fVxuXHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZSksIGRlc2NyaXB0b3JzKVxufVxuXG4vKipcbiAqIEZyZWV6ZXMgZHJhZnRhYmxlIG9iamVjdHMuIFJldHVybnMgdGhlIG9yaWdpbmFsIG9iamVjdC5cbiAqIEJ5IGRlZmF1bHQgZnJlZXplcyBzaGFsbG93bHksIGJ1dCBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGB0cnVlYCBpdCB3aWxsIGZyZWV6ZSByZWN1cnNpdmVseS5cbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcGFyYW0gZGVlcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJlZXplPFQ+KG9iajogVCwgZGVlcD86IGJvb2xlYW4pOiBUXG5leHBvcnQgZnVuY3Rpb24gZnJlZXplPFQ+KG9iajogYW55LCBkZWVwOiBib29sZWFuID0gZmFsc2UpOiBUIHtcblx0aWYgKGlzRnJvemVuKG9iaikgfHwgaXNEcmFmdChvYmopIHx8ICFpc0RyYWZ0YWJsZShvYmopKSByZXR1cm4gb2JqXG5cdGlmIChnZXRBcmNodHlwZShvYmopID4gMSAvKiBNYXAgb3IgU2V0ICovKSB7XG5cdFx0b2JqLnNldCA9IG9iai5hZGQgPSBvYmouY2xlYXIgPSBvYmouZGVsZXRlID0gZG9udE11dGF0ZUZyb3plbkNvbGxlY3Rpb25zIGFzIGFueVxuXHR9XG5cdE9iamVjdC5mcmVlemUob2JqKVxuXHRpZiAoZGVlcCkgZWFjaChvYmosIChrZXksIHZhbHVlKSA9PiBmcmVlemUodmFsdWUsIHRydWUpLCB0cnVlKVxuXHRyZXR1cm4gb2JqXG59XG5cbmZ1bmN0aW9uIGRvbnRNdXRhdGVGcm96ZW5Db2xsZWN0aW9ucygpIHtcblx0ZGllKDIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb3plbihvYmo6IGFueSk6IGJvb2xlYW4ge1xuXHRpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHRydWVcblx0Ly8gU2VlICM2MDAsIElFIGRpZXMgb24gbm9uLW9iamVjdHMgaW4gT2JqZWN0LmlzRnJvemVuXG5cdHJldHVybiBPYmplY3QuaXNGcm96ZW4ob2JqKVxufVxuIiwgImltcG9ydCB7XG5cdEltbWVyU3RhdGUsXG5cdFBhdGNoLFxuXHRJbW1lclNjb3BlLFxuXHREcmFmdGVkLFxuXHRBbnlPYmplY3QsXG5cdEltbWVyQmFzZVN0YXRlLFxuXHRBbnlNYXAsXG5cdEFueVNldCxcblx0UHJveHlUeXBlLFxuXHRkaWVcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuLyoqIFBsdWdpbiB1dGlsaXRpZXMgKi9cbmNvbnN0IHBsdWdpbnM6IHtcblx0UGF0Y2hlcz86IHtcblx0XHRnZW5lcmF0ZVBhdGNoZXNfKFxuXHRcdFx0c3RhdGU6IEltbWVyU3RhdGUsXG5cdFx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdFx0KTogdm9pZFxuXHRcdGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhcblx0XHRcdGJhc2U6IGFueSxcblx0XHRcdHJlcGxhY2VtZW50OiBhbnksXG5cdFx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0XHQpOiB2b2lkXG5cdFx0YXBwbHlQYXRjaGVzXzxUPihkcmFmdDogVCwgcGF0Y2hlczogUGF0Y2hbXSk6IFRcblx0fVxuXHRFUzU/OiB7XG5cdFx0d2lsbEZpbmFsaXplRVM1XyhzY29wZTogSW1tZXJTY29wZSwgcmVzdWx0OiBhbnksIGlzUmVwbGFjZWQ6IGJvb2xlYW4pOiB2b2lkXG5cdFx0Y3JlYXRlRVM1UHJveHlfPFQ+KFxuXHRcdFx0YmFzZTogVCxcblx0XHRcdHBhcmVudD86IEltbWVyU3RhdGVcblx0XHQpOiBEcmFmdGVkPFQsIEVTNU9iamVjdFN0YXRlIHwgRVM1QXJyYXlTdGF0ZT5cblx0XHRoYXNDaGFuZ2VzXyhzdGF0ZTogRVM1QXJyYXlTdGF0ZSB8IEVTNU9iamVjdFN0YXRlKTogYm9vbGVhblxuXHR9XG5cdE1hcFNldD86IHtcblx0XHRwcm94eU1hcF88VCBleHRlbmRzIEFueU1hcD4odGFyZ2V0OiBULCBwYXJlbnQ/OiBJbW1lclN0YXRlKTogVFxuXHRcdHByb3h5U2V0XzxUIGV4dGVuZHMgQW55U2V0Pih0YXJnZXQ6IFQsIHBhcmVudD86IEltbWVyU3RhdGUpOiBUXG5cdH1cbn0gPSB7fVxuXG50eXBlIFBsdWdpbnMgPSB0eXBlb2YgcGx1Z2luc1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luPEsgZXh0ZW5kcyBrZXlvZiBQbHVnaW5zPihcblx0cGx1Z2luS2V5OiBLXG4pOiBFeGNsdWRlPFBsdWdpbnNbS10sIHVuZGVmaW5lZD4ge1xuXHRjb25zdCBwbHVnaW4gPSBwbHVnaW5zW3BsdWdpbktleV1cblx0aWYgKCFwbHVnaW4pIHtcblx0XHRkaWUoMTgsIHBsdWdpbktleSlcblx0fVxuXHQvLyBAdHMtaWdub3JlXG5cdHJldHVybiBwbHVnaW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQbHVnaW48SyBleHRlbmRzIGtleW9mIFBsdWdpbnM+KFxuXHRwbHVnaW5LZXk6IEssXG5cdGltcGxlbWVudGF0aW9uOiBQbHVnaW5zW0tdXG4pOiB2b2lkIHtcblx0aWYgKCFwbHVnaW5zW3BsdWdpbktleV0pIHBsdWdpbnNbcGx1Z2luS2V5XSA9IGltcGxlbWVudGF0aW9uXG59XG5cbi8qKiBFUzUgUGx1Z2luICovXG5cbmludGVyZmFjZSBFUzVCYXNlU3RhdGUgZXh0ZW5kcyBJbW1lckJhc2VTdGF0ZSB7XG5cdGFzc2lnbmVkXzoge1trZXk6IHN0cmluZ106IGFueX1cblx0cGFyZW50Xz86IEltbWVyU3RhdGVcblx0cmV2b2tlZF86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFUzVPYmplY3RTdGF0ZSBleHRlbmRzIEVTNUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuRVM1T2JqZWN0XG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlPYmplY3QsIEVTNU9iamVjdFN0YXRlPlxuXHRiYXNlXzogQW55T2JqZWN0XG5cdGNvcHlfOiBBbnlPYmplY3QgfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRVM1QXJyYXlTdGF0ZSBleHRlbmRzIEVTNUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuRVM1QXJyYXlcblx0ZHJhZnRfOiBEcmFmdGVkPEFueU9iamVjdCwgRVM1QXJyYXlTdGF0ZT5cblx0YmFzZV86IGFueVxuXHRjb3B5XzogYW55XG59XG5cbi8qKiBNYXAgLyBTZXQgcGx1Z2luICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwU3RhdGUgZXh0ZW5kcyBJbW1lckJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuTWFwXG5cdGNvcHlfOiBBbnlNYXAgfCB1bmRlZmluZWRcblx0YXNzaWduZWRfOiBNYXA8YW55LCBib29sZWFuPiB8IHVuZGVmaW5lZFxuXHRiYXNlXzogQW55TWFwXG5cdHJldm9rZWRfOiBib29sZWFuXG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlNYXAsIE1hcFN0YXRlPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldFN0YXRlIGV4dGVuZHMgSW1tZXJCYXNlU3RhdGUge1xuXHR0eXBlXzogUHJveHlUeXBlLlNldFxuXHRjb3B5XzogQW55U2V0IHwgdW5kZWZpbmVkXG5cdGJhc2VfOiBBbnlTZXRcblx0ZHJhZnRzXzogTWFwPGFueSwgRHJhZnRlZD4gLy8gbWFwcyB0aGUgb3JpZ2luYWwgdmFsdWUgdG8gdGhlIGRyYWZ0IHZhbHVlIGluIHRoZSBuZXcgc2V0XG5cdHJldm9rZWRfOiBib29sZWFuXG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlTZXQsIFNldFN0YXRlPlxufVxuXG4vKiogUGF0Y2hlcyBwbHVnaW4gKi9cblxuZXhwb3J0IHR5cGUgUGF0Y2hQYXRoID0gKHN0cmluZyB8IG51bWJlcilbXVxuIiwgImltcG9ydCB7XG5cdFBhdGNoLFxuXHRQYXRjaExpc3RlbmVyLFxuXHREcmFmdGVkLFxuXHRJbW1lcixcblx0RFJBRlRfU1RBVEUsXG5cdEltbWVyU3RhdGUsXG5cdFByb3h5VHlwZSxcblx0Z2V0UGx1Z2luXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5pbXBvcnQge2RpZX0gZnJvbSBcIi4uL3V0aWxzL2Vycm9yc1wiXG5cbi8qKiBFYWNoIHNjb3BlIHJlcHJlc2VudHMgYSBgcHJvZHVjZWAgY2FsbC4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBJbW1lclNjb3BlIHtcblx0cGF0Y2hlc18/OiBQYXRjaFtdXG5cdGludmVyc2VQYXRjaGVzXz86IFBhdGNoW11cblx0Y2FuQXV0b0ZyZWV6ZV86IGJvb2xlYW5cblx0ZHJhZnRzXzogYW55W11cblx0cGFyZW50Xz86IEltbWVyU2NvcGVcblx0cGF0Y2hMaXN0ZW5lcl8/OiBQYXRjaExpc3RlbmVyXG5cdGltbWVyXzogSW1tZXJcblx0dW5maW5hbGl6ZWREcmFmdHNfOiBudW1iZXJcbn1cblxubGV0IGN1cnJlbnRTY29wZTogSW1tZXJTY29wZSB8IHVuZGVmaW5lZFxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkge1xuXHRpZiAoX19ERVZfXyAmJiAhY3VycmVudFNjb3BlKSBkaWUoMClcblx0cmV0dXJuIGN1cnJlbnRTY29wZSFcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2NvcGUoXG5cdHBhcmVudF86IEltbWVyU2NvcGUgfCB1bmRlZmluZWQsXG5cdGltbWVyXzogSW1tZXJcbik6IEltbWVyU2NvcGUge1xuXHRyZXR1cm4ge1xuXHRcdGRyYWZ0c186IFtdLFxuXHRcdHBhcmVudF8sXG5cdFx0aW1tZXJfLFxuXHRcdC8vIFdoZW5ldmVyIHRoZSBtb2RpZmllZCBkcmFmdCBjb250YWlucyBhIGRyYWZ0IGZyb20gYW5vdGhlciBzY29wZSwgd2Vcblx0XHQvLyBuZWVkIHRvIHByZXZlbnQgYXV0by1mcmVlemluZyBzbyB0aGUgdW5vd25lZCBkcmFmdCBjYW4gYmUgZmluYWxpemVkLlxuXHRcdGNhbkF1dG9GcmVlemVfOiB0cnVlLFxuXHRcdHVuZmluYWxpemVkRHJhZnRzXzogMFxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQYXRjaGVzSW5TY29wZShcblx0c2NvcGU6IEltbWVyU2NvcGUsXG5cdHBhdGNoTGlzdGVuZXI/OiBQYXRjaExpc3RlbmVyXG4pIHtcblx0aWYgKHBhdGNoTGlzdGVuZXIpIHtcblx0XHRnZXRQbHVnaW4oXCJQYXRjaGVzXCIpIC8vIGFzc2VydCB3ZSBoYXZlIHRoZSBwbHVnaW5cblx0XHRzY29wZS5wYXRjaGVzXyA9IFtdXG5cdFx0c2NvcGUuaW52ZXJzZVBhdGNoZXNfID0gW11cblx0XHRzY29wZS5wYXRjaExpc3RlbmVyXyA9IHBhdGNoTGlzdGVuZXJcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2b2tlU2NvcGUoc2NvcGU6IEltbWVyU2NvcGUpIHtcblx0bGVhdmVTY29wZShzY29wZSlcblx0c2NvcGUuZHJhZnRzXy5mb3JFYWNoKHJldm9rZURyYWZ0KVxuXHQvLyBAdHMtaWdub3JlXG5cdHNjb3BlLmRyYWZ0c18gPSBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWF2ZVNjb3BlKHNjb3BlOiBJbW1lclNjb3BlKSB7XG5cdGlmIChzY29wZSA9PT0gY3VycmVudFNjb3BlKSB7XG5cdFx0Y3VycmVudFNjb3BlID0gc2NvcGUucGFyZW50X1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnRlclNjb3BlKGltbWVyOiBJbW1lcikge1xuXHRyZXR1cm4gKGN1cnJlbnRTY29wZSA9IGNyZWF0ZVNjb3BlKGN1cnJlbnRTY29wZSwgaW1tZXIpKVxufVxuXG5mdW5jdGlvbiByZXZva2VEcmFmdChkcmFmdDogRHJhZnRlZCkge1xuXHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IGRyYWZ0W0RSQUZUX1NUQVRFXVxuXHRpZiAoXG5cdFx0c3RhdGUudHlwZV8gPT09IFByb3h5VHlwZS5Qcm94eU9iamVjdCB8fFxuXHRcdHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuUHJveHlBcnJheVxuXHQpXG5cdFx0c3RhdGUucmV2b2tlXygpXG5cdGVsc2Ugc3RhdGUucmV2b2tlZF8gPSB0cnVlXG59XG4iLCAiaW1wb3J0IHtcblx0SW1tZXJTY29wZSxcblx0RFJBRlRfU1RBVEUsXG5cdGlzRHJhZnRhYmxlLFxuXHROT1RISU5HLFxuXHRQYXRjaFBhdGgsXG5cdGVhY2gsXG5cdGhhcyxcblx0ZnJlZXplLFxuXHRJbW1lclN0YXRlLFxuXHRpc0RyYWZ0LFxuXHRTZXRTdGF0ZSxcblx0c2V0LFxuXHRQcm94eVR5cGUsXG5cdGdldFBsdWdpbixcblx0ZGllLFxuXHRyZXZva2VTY29wZSxcblx0aXNGcm96ZW4sXG5cdHNoYWxsb3dDb3B5XG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzUmVzdWx0KHJlc3VsdDogYW55LCBzY29wZTogSW1tZXJTY29wZSkge1xuXHRzY29wZS51bmZpbmFsaXplZERyYWZ0c18gPSBzY29wZS5kcmFmdHNfLmxlbmd0aFxuXHRjb25zdCBiYXNlRHJhZnQgPSBzY29wZS5kcmFmdHNfIVswXVxuXHRjb25zdCBpc1JlcGxhY2VkID0gcmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0ICE9PSBiYXNlRHJhZnRcblx0aWYgKCFzY29wZS5pbW1lcl8udXNlUHJveGllc18pXG5cdFx0Z2V0UGx1Z2luKFwiRVM1XCIpLndpbGxGaW5hbGl6ZUVTNV8oc2NvcGUsIHJlc3VsdCwgaXNSZXBsYWNlZClcblx0aWYgKGlzUmVwbGFjZWQpIHtcblx0XHRpZiAoYmFzZURyYWZ0W0RSQUZUX1NUQVRFXS5tb2RpZmllZF8pIHtcblx0XHRcdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0ZGllKDQpXG5cdFx0fVxuXHRcdGlmIChpc0RyYWZ0YWJsZShyZXN1bHQpKSB7XG5cdFx0XHQvLyBGaW5hbGl6ZSB0aGUgcmVzdWx0IGluIGNhc2UgaXQgY29udGFpbnMgKG9yIGlzKSBhIHN1YnNldCBvZiB0aGUgZHJhZnQuXG5cdFx0XHRyZXN1bHQgPSBmaW5hbGl6ZShzY29wZSwgcmVzdWx0KVxuXHRcdFx0aWYgKCFzY29wZS5wYXJlbnRfKSBtYXliZUZyZWV6ZShzY29wZSwgcmVzdWx0KVxuXHRcdH1cblx0XHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRcdGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKFxuXHRcdFx0XHRiYXNlRHJhZnRbRFJBRlRfU1RBVEVdLmJhc2VfLFxuXHRcdFx0XHRyZXN1bHQsXG5cdFx0XHRcdHNjb3BlLnBhdGNoZXNfLFxuXHRcdFx0XHRzY29wZS5pbnZlcnNlUGF0Y2hlc18hXG5cdFx0XHQpXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIEZpbmFsaXplIHRoZSBiYXNlIGRyYWZ0LlxuXHRcdHJlc3VsdCA9IGZpbmFsaXplKHNjb3BlLCBiYXNlRHJhZnQsIFtdKVxuXHR9XG5cdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRzY29wZS5wYXRjaExpc3RlbmVyXyEoc2NvcGUucGF0Y2hlc18sIHNjb3BlLmludmVyc2VQYXRjaGVzXyEpXG5cdH1cblx0cmV0dXJuIHJlc3VsdCAhPT0gTk9USElORyA/IHJlc3VsdCA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBmaW5hbGl6ZShyb290U2NvcGU6IEltbWVyU2NvcGUsIHZhbHVlOiBhbnksIHBhdGg/OiBQYXRjaFBhdGgpIHtcblx0Ly8gRG9uJ3QgcmVjdXJzZSBpbiB0aG8gcmVjdXJzaXZlIGRhdGEgc3RydWN0dXJlc1xuXHRpZiAoaXNGcm96ZW4odmFsdWUpKSByZXR1cm4gdmFsdWVcblxuXHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IHZhbHVlW0RSQUZUX1NUQVRFXVxuXHQvLyBBIHBsYWluIG9iamVjdCwgbWlnaHQgbmVlZCBmcmVlemluZywgbWlnaHQgY29udGFpbiBkcmFmdHNcblx0aWYgKCFzdGF0ZSkge1xuXHRcdGVhY2goXG5cdFx0XHR2YWx1ZSxcblx0XHRcdChrZXksIGNoaWxkVmFsdWUpID0+XG5cdFx0XHRcdGZpbmFsaXplUHJvcGVydHkocm9vdFNjb3BlLCBzdGF0ZSwgdmFsdWUsIGtleSwgY2hpbGRWYWx1ZSwgcGF0aCksXG5cdFx0XHR0cnVlIC8vIFNlZSAjNTkwLCBkb24ndCByZWN1cnNlIGludG8gbm9uLWVudW1lcmFibGUgb2Ygbm9uIGRyYWZ0ZWQgb2JqZWN0c1xuXHRcdClcblx0XHRyZXR1cm4gdmFsdWVcblx0fVxuXHQvLyBOZXZlciBmaW5hbGl6ZSBkcmFmdHMgb3duZWQgYnkgYW5vdGhlciBzY29wZS5cblx0aWYgKHN0YXRlLnNjb3BlXyAhPT0gcm9vdFNjb3BlKSByZXR1cm4gdmFsdWVcblx0Ly8gVW5tb2RpZmllZCBkcmFmdCwgcmV0dXJuIHRoZSAoZnJvemVuKSBvcmlnaW5hbFxuXHRpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuXHRcdG1heWJlRnJlZXplKHJvb3RTY29wZSwgc3RhdGUuYmFzZV8sIHRydWUpXG5cdFx0cmV0dXJuIHN0YXRlLmJhc2VfXG5cdH1cblx0Ly8gTm90IGZpbmFsaXplZCB5ZXQsIGxldCdzIGRvIHRoYXQgbm93XG5cdGlmICghc3RhdGUuZmluYWxpemVkXykge1xuXHRcdHN0YXRlLmZpbmFsaXplZF8gPSB0cnVlXG5cdFx0c3RhdGUuc2NvcGVfLnVuZmluYWxpemVkRHJhZnRzXy0tXG5cdFx0Y29uc3QgcmVzdWx0ID1cblx0XHRcdC8vIEZvciBFUzUsIGNyZWF0ZSBhIGdvb2QgY29weSBmcm9tIHRoZSBkcmFmdCBmaXJzdCwgd2l0aCBhZGRlZCBrZXlzIGFuZCB3aXRob3V0IGRlbGV0ZWQga2V5cy5cblx0XHRcdHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1T2JqZWN0IHx8IHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1QXJyYXlcblx0XHRcdFx0PyAoc3RhdGUuY29weV8gPSBzaGFsbG93Q29weShzdGF0ZS5kcmFmdF8pKVxuXHRcdFx0XHQ6IHN0YXRlLmNvcHlfXG5cdFx0Ly8gRmluYWxpemUgYWxsIGNoaWxkcmVuIG9mIHRoZSBjb3B5XG5cdFx0Ly8gRm9yIHNldHMgd2UgY2xvbmUgYmVmb3JlIGl0ZXJhdGluZywgb3RoZXJ3aXNlIHdlIGNhbiBnZXQgaW4gZW5kbGVzcyBsb29wIGR1ZSB0byBtb2RpZnlpbmcgZHVyaW5nIGl0ZXJhdGlvbiwgc2VlICM2Mjhcblx0XHQvLyBUbyBwcmVzZXJ2ZSBpbnNlcnRpb24gb3JkZXIgaW4gYWxsIGNhc2VzIHdlIHRoZW4gY2xlYXIgdGhlIHNldFxuXHRcdC8vIEFuZCB3ZSBsZXQgZmluYWxpemVQcm9wZXJ0eSBrbm93IGl0IG5lZWRzIHRvIHJlLWFkZCBub24tZHJhZnQgY2hpbGRyZW4gYmFjayB0byB0aGUgdGFyZ2V0XG5cdFx0bGV0IHJlc3VsdEVhY2ggPSByZXN1bHRcblx0XHRsZXQgaXNTZXQgPSBmYWxzZVxuXHRcdGlmIChzdGF0ZS50eXBlXyA9PT0gUHJveHlUeXBlLlNldCkge1xuXHRcdFx0cmVzdWx0RWFjaCA9IG5ldyBTZXQocmVzdWx0KVxuXHRcdFx0cmVzdWx0LmNsZWFyKClcblx0XHRcdGlzU2V0ID0gdHJ1ZVxuXHRcdH1cblx0XHRlYWNoKHJlc3VsdEVhY2gsIChrZXksIGNoaWxkVmFsdWUpID0+XG5cdFx0XHRmaW5hbGl6ZVByb3BlcnR5KHJvb3RTY29wZSwgc3RhdGUsIHJlc3VsdCwga2V5LCBjaGlsZFZhbHVlLCBwYXRoLCBpc1NldClcblx0XHQpXG5cdFx0Ly8gZXZlcnl0aGluZyBpbnNpZGUgaXMgZnJvemVuLCB3ZSBjYW4gZnJlZXplIGhlcmVcblx0XHRtYXliZUZyZWV6ZShyb290U2NvcGUsIHJlc3VsdCwgZmFsc2UpXG5cdFx0Ly8gZmlyc3QgdGltZSBmaW5hbGl6aW5nLCBsZXQncyBjcmVhdGUgdGhvc2UgcGF0Y2hlc1xuXHRcdGlmIChwYXRoICYmIHJvb3RTY29wZS5wYXRjaGVzXykge1xuXHRcdFx0Z2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5nZW5lcmF0ZVBhdGNoZXNfKFxuXHRcdFx0XHRzdGF0ZSxcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0cm9vdFNjb3BlLnBhdGNoZXNfLFxuXHRcdFx0XHRyb290U2NvcGUuaW52ZXJzZVBhdGNoZXNfIVxuXHRcdFx0KVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gc3RhdGUuY29weV9cbn1cblxuZnVuY3Rpb24gZmluYWxpemVQcm9wZXJ0eShcblx0cm9vdFNjb3BlOiBJbW1lclNjb3BlLFxuXHRwYXJlbnRTdGF0ZTogdW5kZWZpbmVkIHwgSW1tZXJTdGF0ZSxcblx0dGFyZ2V0T2JqZWN0OiBhbnksXG5cdHByb3A6IHN0cmluZyB8IG51bWJlcixcblx0Y2hpbGRWYWx1ZTogYW55LFxuXHRyb290UGF0aD86IFBhdGNoUGF0aCxcblx0dGFyZ2V0SXNTZXQ/OiBib29sZWFuXG4pIHtcblx0aWYgKF9fREVWX18gJiYgY2hpbGRWYWx1ZSA9PT0gdGFyZ2V0T2JqZWN0KSBkaWUoNSlcblx0aWYgKGlzRHJhZnQoY2hpbGRWYWx1ZSkpIHtcblx0XHRjb25zdCBwYXRoID1cblx0XHRcdHJvb3RQYXRoICYmXG5cdFx0XHRwYXJlbnRTdGF0ZSAmJlxuXHRcdFx0cGFyZW50U3RhdGUhLnR5cGVfICE9PSBQcm94eVR5cGUuU2V0ICYmIC8vIFNldCBvYmplY3RzIGFyZSBhdG9taWMgc2luY2UgdGhleSBoYXZlIG5vIGtleXMuXG5cdFx0XHQhaGFzKChwYXJlbnRTdGF0ZSBhcyBFeGNsdWRlPEltbWVyU3RhdGUsIFNldFN0YXRlPikuYXNzaWduZWRfISwgcHJvcCkgLy8gU2tpcCBkZWVwIHBhdGNoZXMgZm9yIGFzc2lnbmVkIGtleXMuXG5cdFx0XHRcdD8gcm9vdFBhdGghLmNvbmNhdChwcm9wKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdC8vIERyYWZ0cyBvd25lZCBieSBgc2NvcGVgIGFyZSBmaW5hbGl6ZWQgaGVyZS5cblx0XHRjb25zdCByZXMgPSBmaW5hbGl6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUsIHBhdGgpXG5cdFx0c2V0KHRhcmdldE9iamVjdCwgcHJvcCwgcmVzKVxuXHRcdC8vIERyYWZ0cyBmcm9tIGFub3RoZXIgc2NvcGUgbXVzdCBwcmV2ZW50ZWQgdG8gYmUgZnJvemVuXG5cdFx0Ly8gaWYgd2UgZ290IGEgZHJhZnQgYmFjayBmcm9tIGZpbmFsaXplLCB3ZSdyZSBpbiBhIG5lc3RlZCBwcm9kdWNlIGFuZCBzaG91bGRuJ3QgZnJlZXplXG5cdFx0aWYgKGlzRHJhZnQocmVzKSkge1xuXHRcdFx0cm9vdFNjb3BlLmNhbkF1dG9GcmVlemVfID0gZmFsc2Vcblx0XHR9IGVsc2UgcmV0dXJuXG5cdH0gZWxzZSBpZiAodGFyZ2V0SXNTZXQpIHtcblx0XHR0YXJnZXRPYmplY3QuYWRkKGNoaWxkVmFsdWUpXG5cdH1cblx0Ly8gU2VhcmNoIG5ldyBvYmplY3RzIGZvciB1bmZpbmFsaXplZCBkcmFmdHMuIEZyb3plbiBvYmplY3RzIHNob3VsZCBuZXZlciBjb250YWluIGRyYWZ0cy5cblx0aWYgKGlzRHJhZnRhYmxlKGNoaWxkVmFsdWUpICYmICFpc0Zyb3plbihjaGlsZFZhbHVlKSkge1xuXHRcdGlmICghcm9vdFNjb3BlLmltbWVyXy5hdXRvRnJlZXplXyAmJiByb290U2NvcGUudW5maW5hbGl6ZWREcmFmdHNfIDwgMSkge1xuXHRcdFx0Ly8gb3B0aW1pemF0aW9uOiBpZiBhbiBvYmplY3QgaXMgbm90IGEgZHJhZnQsIGFuZCB3ZSBkb24ndCBoYXZlIHRvXG5cdFx0XHQvLyBkZWVwZnJlZXplIGV2ZXJ5dGhpbmcsIGFuZCB3ZSBhcmUgc3VyZSB0aGF0IG5vIGRyYWZ0cyBhcmUgbGVmdCBpbiB0aGUgcmVtYWluaW5nIG9iamVjdFxuXHRcdFx0Ly8gY2F1c2Ugd2Ugc2F3IGFuZCBmaW5hbGl6ZWQgYWxsIGRyYWZ0cyBhbHJlYWR5OyB3ZSBjYW4gc3RvcCB2aXNpdGluZyB0aGUgcmVzdCBvZiB0aGUgdHJlZS5cblx0XHRcdC8vIFRoaXMgYmVuZWZpdHMgZXNwZWNpYWxseSBhZGRpbmcgbGFyZ2UgZGF0YSB0cmVlJ3Mgd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuXG5cdFx0XHQvLyBTZWUgYWRkLWRhdGEuanMgcGVyZiB0ZXN0XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0ZmluYWxpemUocm9vdFNjb3BlLCBjaGlsZFZhbHVlKVxuXHRcdC8vIGltbWVyIGRlZXAgZnJlZXplcyBwbGFpbiBvYmplY3RzLCBzbyBpZiB0aGVyZSBpcyBubyBwYXJlbnQgc3RhdGUsIHdlIGZyZWV6ZSBhcyB3ZWxsXG5cdFx0aWYgKCFwYXJlbnRTdGF0ZSB8fCAhcGFyZW50U3RhdGUuc2NvcGVfLnBhcmVudF8pXG5cdFx0XHRtYXliZUZyZWV6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUpXG5cdH1cbn1cblxuZnVuY3Rpb24gbWF5YmVGcmVlemUoc2NvcGU6IEltbWVyU2NvcGUsIHZhbHVlOiBhbnksIGRlZXAgPSBmYWxzZSkge1xuXHQvLyB3ZSBuZXZlciBmcmVlemUgZm9yIGEgbm9uLXJvb3Qgc2NvcGU7IGFzIGl0IHdvdWxkIHByZXZlbnQgcHJ1bmluZyBmb3IgZHJhZnRzIGluc2lkZSB3cmFwcGluZyBvYmplY3RzXG5cdGlmICghc2NvcGUucGFyZW50XyAmJiBzY29wZS5pbW1lcl8uYXV0b0ZyZWV6ZV8gJiYgc2NvcGUuY2FuQXV0b0ZyZWV6ZV8pIHtcblx0XHRmcmVlemUodmFsdWUsIGRlZXApXG5cdH1cbn1cbiIsICJpbXBvcnQge1xuXHRlYWNoLFxuXHRoYXMsXG5cdGlzLFxuXHRpc0RyYWZ0YWJsZSxcblx0c2hhbGxvd0NvcHksXG5cdGxhdGVzdCxcblx0SW1tZXJCYXNlU3RhdGUsXG5cdEltbWVyU3RhdGUsXG5cdERyYWZ0ZWQsXG5cdEFueU9iamVjdCxcblx0QW55QXJyYXksXG5cdE9iamVjdGlzaCxcblx0Z2V0Q3VycmVudFNjb3BlLFxuXHREUkFGVF9TVEFURSxcblx0ZGllLFxuXHRjcmVhdGVQcm94eSxcblx0UHJveHlUeXBlXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmludGVyZmFjZSBQcm94eUJhc2VTdGF0ZSBleHRlbmRzIEltbWVyQmFzZVN0YXRlIHtcblx0YXNzaWduZWRfOiB7XG5cdFx0W3Byb3BlcnR5OiBzdHJpbmddOiBib29sZWFuXG5cdH1cblx0cGFyZW50Xz86IEltbWVyU3RhdGVcblx0cmV2b2tlXygpOiB2b2lkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJveHlPYmplY3RTdGF0ZSBleHRlbmRzIFByb3h5QmFzZVN0YXRlIHtcblx0dHlwZV86IFByb3h5VHlwZS5Qcm94eU9iamVjdFxuXHRiYXNlXzogYW55XG5cdGNvcHlfOiBhbnlcblx0ZHJhZnRfOiBEcmFmdGVkPEFueU9iamVjdCwgUHJveHlPYmplY3RTdGF0ZT5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm94eUFycmF5U3RhdGUgZXh0ZW5kcyBQcm94eUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuUHJveHlBcnJheVxuXHRiYXNlXzogQW55QXJyYXlcblx0Y29weV86IEFueUFycmF5IHwgbnVsbFxuXHRkcmFmdF86IERyYWZ0ZWQ8QW55QXJyYXksIFByb3h5QXJyYXlTdGF0ZT5cbn1cblxudHlwZSBQcm94eVN0YXRlID0gUHJveHlPYmplY3RTdGF0ZSB8IFByb3h5QXJyYXlTdGF0ZVxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgZHJhZnQgb2YgdGhlIGBiYXNlYCBvYmplY3QuXG4gKlxuICogVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgcGFyZW50IGRyYWZ0LXN0YXRlICh1c2VkIGludGVybmFsbHkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJveHlQcm94eTxUIGV4dGVuZHMgT2JqZWN0aXNoPihcblx0YmFzZTogVCxcblx0cGFyZW50PzogSW1tZXJTdGF0ZVxuKTogRHJhZnRlZDxULCBQcm94eVN0YXRlPiB7XG5cdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGJhc2UpXG5cdGNvbnN0IHN0YXRlOiBQcm94eVN0YXRlID0ge1xuXHRcdHR5cGVfOiBpc0FycmF5ID8gUHJveHlUeXBlLlByb3h5QXJyYXkgOiAoUHJveHlUeXBlLlByb3h5T2JqZWN0IGFzIGFueSksXG5cdFx0Ly8gVHJhY2sgd2hpY2ggcHJvZHVjZSBjYWxsIHRoaXMgaXMgYXNzb2NpYXRlZCB3aXRoLlxuXHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpISxcblx0XHQvLyBUcnVlIGZvciBib3RoIHNoYWxsb3cgYW5kIGRlZXAgY2hhbmdlcy5cblx0XHRtb2RpZmllZF86IGZhbHNlLFxuXHRcdC8vIFVzZWQgZHVyaW5nIGZpbmFsaXphdGlvbi5cblx0XHRmaW5hbGl6ZWRfOiBmYWxzZSxcblx0XHQvLyBUcmFjayB3aGljaCBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBhc3NpZ25lZCAodHJ1ZSkgb3IgZGVsZXRlZCAoZmFsc2UpLlxuXHRcdGFzc2lnbmVkXzoge30sXG5cdFx0Ly8gVGhlIHBhcmVudCBkcmFmdCBzdGF0ZS5cblx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0Ly8gVGhlIGJhc2Ugc3RhdGUuXG5cdFx0YmFzZV86IGJhc2UsXG5cdFx0Ly8gVGhlIGJhc2UgcHJveHkuXG5cdFx0ZHJhZnRfOiBudWxsIGFzIGFueSwgLy8gc2V0IGJlbG93XG5cdFx0Ly8gVGhlIGJhc2UgY29weSB3aXRoIGFueSB1cGRhdGVkIHZhbHVlcy5cblx0XHRjb3B5XzogbnVsbCxcblx0XHQvLyBDYWxsZWQgYnkgdGhlIGBwcm9kdWNlYCBmdW5jdGlvbi5cblx0XHRyZXZva2VfOiBudWxsIGFzIGFueSxcblx0XHRpc01hbnVhbF86IGZhbHNlXG5cdH1cblxuXHQvLyB0aGUgdHJhcHMgbXVzdCB0YXJnZXQgc29tZXRoaW5nLCBhIGJpdCBsaWtlIHRoZSAncmVhbCcgYmFzZS5cblx0Ly8gYnV0IGFsc28sIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkZXRlcm1pbmUgZnJvbSB0aGUgdGFyZ2V0IHdoYXQgdGhlIHJlbGV2YW50IHN0YXRlIGlzXG5cdC8vICh0byBhdm9pZCBjcmVhdGluZyB0cmFwcyBwZXIgaW5zdGFuY2UgdG8gY2FwdHVyZSB0aGUgc3RhdGUgaW4gY2xvc3VyZSxcblx0Ly8gYW5kIHRvIGF2b2lkIGNyZWF0aW5nIHdlaXJkIGhpZGRlbiBwcm9wZXJ0aWVzIGFzIHdlbGwpXG5cdC8vIFNvIHRoZSB0cmljayBpcyB0byB1c2UgJ3N0YXRlJyBhcyB0aGUgYWN0dWFsICd0YXJnZXQnISAoYW5kIG1ha2Ugc3VyZSB3ZSBpbnRlcmNlcHQgZXZlcnl0aGluZylcblx0Ly8gTm90ZSB0aGF0IGluIHRoZSBjYXNlIG9mIGFuIGFycmF5LCB3ZSBwdXQgdGhlIHN0YXRlIGluIGFuIGFycmF5IHRvIGhhdmUgYmV0dGVyIFJlZmxlY3QgZGVmYXVsdHMgb290YlxuXHRsZXQgdGFyZ2V0OiBUID0gc3RhdGUgYXMgYW55XG5cdGxldCB0cmFwczogUHJveHlIYW5kbGVyPG9iamVjdCB8IEFycmF5PGFueT4+ID0gb2JqZWN0VHJhcHNcblx0aWYgKGlzQXJyYXkpIHtcblx0XHR0YXJnZXQgPSBbc3RhdGVdIGFzIGFueVxuXHRcdHRyYXBzID0gYXJyYXlUcmFwc1xuXHR9XG5cblx0Y29uc3Qge3Jldm9rZSwgcHJveHl9ID0gUHJveHkucmV2b2NhYmxlKHRhcmdldCwgdHJhcHMpXG5cdHN0YXRlLmRyYWZ0XyA9IHByb3h5IGFzIGFueVxuXHRzdGF0ZS5yZXZva2VfID0gcmV2b2tlXG5cdHJldHVybiBwcm94eSBhcyBhbnlcbn1cblxuLyoqXG4gKiBPYmplY3QgZHJhZnRzXG4gKi9cbmV4cG9ydCBjb25zdCBvYmplY3RUcmFwczogUHJveHlIYW5kbGVyPFByb3h5U3RhdGU+ID0ge1xuXHRnZXQoc3RhdGUsIHByb3ApIHtcblx0XHRpZiAocHJvcCA9PT0gRFJBRlRfU1RBVEUpIHJldHVybiBzdGF0ZVxuXG5cdFx0Y29uc3Qgc291cmNlID0gbGF0ZXN0KHN0YXRlKVxuXHRcdGlmICghaGFzKHNvdXJjZSwgcHJvcCkpIHtcblx0XHRcdC8vIG5vbi1leGlzdGluZyBvciBub24tb3duIHByb3BlcnR5Li4uXG5cdFx0XHRyZXR1cm4gcmVhZFByb3BGcm9tUHJvdG8oc3RhdGUsIHNvdXJjZSwgcHJvcClcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWUgPSBzb3VyY2VbcHJvcF1cblx0XHRpZiAoc3RhdGUuZmluYWxpemVkXyB8fCAhaXNEcmFmdGFibGUodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWVcblx0XHR9XG5cdFx0Ly8gQ2hlY2sgZm9yIGV4aXN0aW5nIGRyYWZ0IGluIG1vZGlmaWVkIHN0YXRlLlxuXHRcdC8vIEFzc2lnbmVkIHZhbHVlcyBhcmUgbmV2ZXIgZHJhZnRlZC4gVGhpcyBjYXRjaGVzIGFueSBkcmFmdHMgd2UgY3JlYXRlZCwgdG9vLlxuXHRcdGlmICh2YWx1ZSA9PT0gcGVlayhzdGF0ZS5iYXNlXywgcHJvcCkpIHtcblx0XHRcdHByZXBhcmVDb3B5KHN0YXRlKVxuXHRcdFx0cmV0dXJuIChzdGF0ZS5jb3B5XyFbcHJvcCBhcyBhbnldID0gY3JlYXRlUHJveHkoXG5cdFx0XHRcdHN0YXRlLnNjb3BlXy5pbW1lcl8sXG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRzdGF0ZVxuXHRcdFx0KSlcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlXG5cdH0sXG5cdGhhcyhzdGF0ZSwgcHJvcCkge1xuXHRcdHJldHVybiBwcm9wIGluIGxhdGVzdChzdGF0ZSlcblx0fSxcblx0b3duS2V5cyhzdGF0ZSkge1xuXHRcdHJldHVybiBSZWZsZWN0Lm93bktleXMobGF0ZXN0KHN0YXRlKSlcblx0fSxcblx0c2V0KFxuXHRcdHN0YXRlOiBQcm94eU9iamVjdFN0YXRlLFxuXHRcdHByb3A6IHN0cmluZyAvKiBzdHJpY3RseSBub3QsIGJ1dCBoZWxwcyBUUyAqLyxcblx0XHR2YWx1ZVxuXHQpIHtcblx0XHRjb25zdCBkZXNjID0gZ2V0RGVzY3JpcHRvckZyb21Qcm90byhsYXRlc3Qoc3RhdGUpLCBwcm9wKVxuXHRcdGlmIChkZXNjPy5zZXQpIHtcblx0XHRcdC8vIHNwZWNpYWwgY2FzZTogaWYgdGhpcyB3cml0ZSBpcyBjYXB0dXJlZCBieSBhIHNldHRlciwgd2UgaGF2ZVxuXHRcdFx0Ly8gdG8gdHJpZ2dlciBpdCB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcblx0XHRcdGRlc2Muc2V0LmNhbGwoc3RhdGUuZHJhZnRfLCB2YWx1ZSlcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXHRcdGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG5cdFx0XHQvLyB0aGUgbGFzdCBjaGVjayBpcyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBzZXR0aW5nIGEgbm9uLWV4aXN0aW5nIHRvIHVuZGVmaW5lZCAod2hpY2ggaXMgYSBjaGFuZ2UpXG5cdFx0XHQvLyBmcm9tIHNldHRpbmcgYW4gZXhpc3RpbmcgcHJvcGVydHkgd2l0aCB2YWx1ZSB1bmRlZmluZWQgdG8gdW5kZWZpbmVkICh3aGljaCBpcyBub3QgYSBjaGFuZ2UpXG5cdFx0XHRjb25zdCBjdXJyZW50ID0gcGVlayhsYXRlc3Qoc3RhdGUpLCBwcm9wKVxuXHRcdFx0Ly8gc3BlY2lhbCBjYXNlLCBpZiB3ZSBhc3NpZ25pbmcgdGhlIG9yaWdpbmFsIHZhbHVlIHRvIGEgZHJhZnQsIHdlIGNhbiBpZ25vcmUgdGhlIGFzc2lnbm1lbnRcblx0XHRcdGNvbnN0IGN1cnJlbnRTdGF0ZTogUHJveHlPYmplY3RTdGF0ZSA9IGN1cnJlbnQ/LltEUkFGVF9TVEFURV1cblx0XHRcdGlmIChjdXJyZW50U3RhdGUgJiYgY3VycmVudFN0YXRlLmJhc2VfID09PSB2YWx1ZSkge1xuXHRcdFx0XHRzdGF0ZS5jb3B5XyFbcHJvcF0gPSB2YWx1ZVxuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF9bcHJvcF0gPSBmYWxzZVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0fVxuXHRcdFx0aWYgKGlzKHZhbHVlLCBjdXJyZW50KSAmJiAodmFsdWUgIT09IHVuZGVmaW5lZCB8fCBoYXMoc3RhdGUuYmFzZV8sIHByb3ApKSlcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdHByZXBhcmVDb3B5KHN0YXRlKVxuXHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0KHN0YXRlLmNvcHlfIVtwcm9wXSA9PT0gdmFsdWUgJiZcblx0XHRcdFx0Ly8gc3BlY2lhbCBjYXNlOiBoYW5kbGUgbmV3IHByb3BzIHdpdGggdmFsdWUgJ3VuZGVmaW5lZCdcblx0XHRcdFx0KHZhbHVlICE9PSB1bmRlZmluZWQgfHwgcHJvcCBpbiBzdGF0ZS5jb3B5XykpIHx8XG5cdFx0XHQvLyBzcGVjaWFsIGNhc2U6IE5hTlxuXHRcdFx0KE51bWJlci5pc05hTih2YWx1ZSkgJiYgTnVtYmVyLmlzTmFOKHN0YXRlLmNvcHlfIVtwcm9wXSkpXG5cdFx0KVxuXHRcdFx0cmV0dXJuIHRydWVcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGF0ZS5jb3B5XyFbcHJvcF0gPSB2YWx1ZVxuXHRcdHN0YXRlLmFzc2lnbmVkX1twcm9wXSA9IHRydWVcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9LFxuXHRkZWxldGVQcm9wZXJ0eShzdGF0ZSwgcHJvcDogc3RyaW5nKSB7XG5cdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRpZiAocGVlayhzdGF0ZS5iYXNlXywgcHJvcCkgIT09IHVuZGVmaW5lZCB8fCBwcm9wIGluIHN0YXRlLmJhc2VfKSB7XG5cdFx0XHRzdGF0ZS5hc3NpZ25lZF9bcHJvcF0gPSBmYWxzZVxuXHRcdFx0cHJlcGFyZUNvcHkoc3RhdGUpXG5cdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgYW4gb3JpZ2luYWxseSBub3QgYXNzaWduZWQgcHJvcGVydHkgd2FzIGRlbGV0ZWRcblx0XHRcdGRlbGV0ZSBzdGF0ZS5hc3NpZ25lZF9bcHJvcF1cblx0XHR9XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGlmIChzdGF0ZS5jb3B5XykgZGVsZXRlIHN0YXRlLmNvcHlfW3Byb3BdXG5cdFx0cmV0dXJuIHRydWVcblx0fSxcblx0Ly8gTm90ZTogV2UgbmV2ZXIgY29lcmNlIGBkZXNjLnZhbHVlYCBpbnRvIGFuIEltbWVyIGRyYWZ0LCBiZWNhdXNlIHdlIGNhbid0IG1ha2Vcblx0Ly8gdGhlIHNhbWUgZ3VhcmFudGVlIGluIEVTNSBtb2RlLlxuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc3RhdGUsIHByb3ApIHtcblx0XHRjb25zdCBvd25lciA9IGxhdGVzdChzdGF0ZSlcblx0XHRjb25zdCBkZXNjID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob3duZXIsIHByb3ApXG5cdFx0aWYgKCFkZXNjKSByZXR1cm4gZGVzY1xuXHRcdHJldHVybiB7XG5cdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogc3RhdGUudHlwZV8gIT09IFByb3h5VHlwZS5Qcm94eUFycmF5IHx8IHByb3AgIT09IFwibGVuZ3RoXCIsXG5cdFx0XHRlbnVtZXJhYmxlOiBkZXNjLmVudW1lcmFibGUsXG5cdFx0XHR2YWx1ZTogb3duZXJbcHJvcF1cblx0XHR9XG5cdH0sXG5cdGRlZmluZVByb3BlcnR5KCkge1xuXHRcdGRpZSgxMSlcblx0fSxcblx0Z2V0UHJvdG90eXBlT2Yoc3RhdGUpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHN0YXRlLmJhc2VfKVxuXHR9LFxuXHRzZXRQcm90b3R5cGVPZigpIHtcblx0XHRkaWUoMTIpXG5cdH1cbn1cblxuLyoqXG4gKiBBcnJheSBkcmFmdHNcbiAqL1xuXG5jb25zdCBhcnJheVRyYXBzOiBQcm94eUhhbmRsZXI8W1Byb3h5QXJyYXlTdGF0ZV0+ID0ge31cbmVhY2gob2JqZWN0VHJhcHMsIChrZXksIGZuKSA9PiB7XG5cdC8vIEB0cy1pZ25vcmVcblx0YXJyYXlUcmFwc1trZXldID0gZnVuY3Rpb24oKSB7XG5cdFx0YXJndW1lbnRzWzBdID0gYXJndW1lbnRzWzBdWzBdXG5cdFx0cmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fVxufSlcbmFycmF5VHJhcHMuZGVsZXRlUHJvcGVydHkgPSBmdW5jdGlvbihzdGF0ZSwgcHJvcCkge1xuXHRpZiAoX19ERVZfXyAmJiBpc05hTihwYXJzZUludChwcm9wIGFzIGFueSkpKSBkaWUoMTMpXG5cdC8vIEB0cy1pZ25vcmVcblx0cmV0dXJuIGFycmF5VHJhcHMuc2V0IS5jYWxsKHRoaXMsIHN0YXRlLCBwcm9wLCB1bmRlZmluZWQpXG59XG5hcnJheVRyYXBzLnNldCA9IGZ1bmN0aW9uKHN0YXRlLCBwcm9wLCB2YWx1ZSkge1xuXHRpZiAoX19ERVZfXyAmJiBwcm9wICE9PSBcImxlbmd0aFwiICYmIGlzTmFOKHBhcnNlSW50KHByb3AgYXMgYW55KSkpIGRpZSgxNClcblx0cmV0dXJuIG9iamVjdFRyYXBzLnNldCEuY2FsbCh0aGlzLCBzdGF0ZVswXSwgcHJvcCwgdmFsdWUsIHN0YXRlWzBdKVxufVxuXG4vLyBBY2Nlc3MgYSBwcm9wZXJ0eSB3aXRob3V0IGNyZWF0aW5nIGFuIEltbWVyIGRyYWZ0LlxuZnVuY3Rpb24gcGVlayhkcmFmdDogRHJhZnRlZCwgcHJvcDogUHJvcGVydHlLZXkpIHtcblx0Y29uc3Qgc3RhdGUgPSBkcmFmdFtEUkFGVF9TVEFURV1cblx0Y29uc3Qgc291cmNlID0gc3RhdGUgPyBsYXRlc3Qoc3RhdGUpIDogZHJhZnRcblx0cmV0dXJuIHNvdXJjZVtwcm9wXVxufVxuXG5mdW5jdGlvbiByZWFkUHJvcEZyb21Qcm90byhzdGF0ZTogSW1tZXJTdGF0ZSwgc291cmNlOiBhbnksIHByb3A6IFByb3BlcnR5S2V5KSB7XG5cdGNvbnN0IGRlc2MgPSBnZXREZXNjcmlwdG9yRnJvbVByb3RvKHNvdXJjZSwgcHJvcClcblx0cmV0dXJuIGRlc2Ncblx0XHQ/IGB2YWx1ZWAgaW4gZGVzY1xuXHRcdFx0PyBkZXNjLnZhbHVlXG5cdFx0XHQ6IC8vIFRoaXMgaXMgYSB2ZXJ5IHNwZWNpYWwgY2FzZSwgaWYgdGhlIHByb3AgaXMgYSBnZXR0ZXIgZGVmaW5lZCBieSB0aGVcblx0XHRcdCAgLy8gcHJvdG90eXBlLCB3ZSBzaG91bGQgaW52b2tlIGl0IHdpdGggdGhlIGRyYWZ0IGFzIGNvbnRleHQhXG5cdFx0XHQgIGRlc2MuZ2V0Py5jYWxsKHN0YXRlLmRyYWZ0Xylcblx0XHQ6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBnZXREZXNjcmlwdG9yRnJvbVByb3RvKFxuXHRzb3VyY2U6IGFueSxcblx0cHJvcDogUHJvcGVydHlLZXlcbik6IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XG5cdC8vICdpbicgY2hlY2tzIHByb3RvIVxuXHRpZiAoIShwcm9wIGluIHNvdXJjZSkpIHJldHVybiB1bmRlZmluZWRcblx0bGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSlcblx0d2hpbGUgKHByb3RvKSB7XG5cdFx0Y29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIHByb3ApXG5cdFx0aWYgKGRlc2MpIHJldHVybiBkZXNjXG5cdFx0cHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pXG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFya0NoYW5nZWQoc3RhdGU6IEltbWVyU3RhdGUpIHtcblx0aWYgKCFzdGF0ZS5tb2RpZmllZF8pIHtcblx0XHRzdGF0ZS5tb2RpZmllZF8gPSB0cnVlXG5cdFx0aWYgKHN0YXRlLnBhcmVudF8pIHtcblx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlLnBhcmVudF8pXG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlQ29weShzdGF0ZToge2Jhc2VfOiBhbnk7IGNvcHlfOiBhbnl9KSB7XG5cdGlmICghc3RhdGUuY29weV8pIHtcblx0XHRzdGF0ZS5jb3B5XyA9IHNoYWxsb3dDb3B5KHN0YXRlLmJhc2VfKVxuXHR9XG59XG4iLCAiaW1wb3J0IHtcblx0SVByb2R1Y2VXaXRoUGF0Y2hlcyxcblx0SVByb2R1Y2UsXG5cdEltbWVyU3RhdGUsXG5cdERyYWZ0ZWQsXG5cdGlzRHJhZnRhYmxlLFxuXHRwcm9jZXNzUmVzdWx0LFxuXHRQYXRjaCxcblx0T2JqZWN0aXNoLFxuXHREUkFGVF9TVEFURSxcblx0RHJhZnQsXG5cdFBhdGNoTGlzdGVuZXIsXG5cdGlzRHJhZnQsXG5cdGlzTWFwLFxuXHRpc1NldCxcblx0Y3JlYXRlUHJveHlQcm94eSxcblx0Z2V0UGx1Z2luLFxuXHRkaWUsXG5cdGhhc1Byb3hpZXMsXG5cdGVudGVyU2NvcGUsXG5cdHJldm9rZVNjb3BlLFxuXHRsZWF2ZVNjb3BlLFxuXHR1c2VQYXRjaGVzSW5TY29wZSxcblx0Z2V0Q3VycmVudFNjb3BlLFxuXHROT1RISU5HLFxuXHRmcmVlemUsXG5cdGN1cnJlbnRcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuaW50ZXJmYWNlIFByb2R1Y2Vyc0ZucyB7XG5cdHByb2R1Y2U6IElQcm9kdWNlXG5cdHByb2R1Y2VXaXRoUGF0Y2hlczogSVByb2R1Y2VXaXRoUGF0Y2hlc1xufVxuXG5leHBvcnQgY2xhc3MgSW1tZXIgaW1wbGVtZW50cyBQcm9kdWNlcnNGbnMge1xuXHR1c2VQcm94aWVzXzogYm9vbGVhbiA9IGhhc1Byb3hpZXNcblxuXHRhdXRvRnJlZXplXzogYm9vbGVhbiA9IHRydWVcblxuXHRjb25zdHJ1Y3Rvcihjb25maWc/OiB7dXNlUHJveGllcz86IGJvb2xlYW47IGF1dG9GcmVlemU/OiBib29sZWFufSkge1xuXHRcdGlmICh0eXBlb2YgY29uZmlnPy51c2VQcm94aWVzID09PSBcImJvb2xlYW5cIilcblx0XHRcdHRoaXMuc2V0VXNlUHJveGllcyhjb25maWchLnVzZVByb3hpZXMpXG5cdFx0aWYgKHR5cGVvZiBjb25maWc/LmF1dG9GcmVlemUgPT09IFwiYm9vbGVhblwiKVxuXHRcdFx0dGhpcy5zZXRBdXRvRnJlZXplKGNvbmZpZyEuYXV0b0ZyZWV6ZSlcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHByb2R1Y2VgIGZ1bmN0aW9uIHRha2VzIGEgdmFsdWUgYW5kIGEgXCJyZWNpcGUgZnVuY3Rpb25cIiAod2hvc2Vcblx0ICogcmV0dXJuIHZhbHVlIG9mdGVuIGRlcGVuZHMgb24gdGhlIGJhc2Ugc3RhdGUpLiBUaGUgcmVjaXBlIGZ1bmN0aW9uIGlzXG5cdCAqIGZyZWUgdG8gbXV0YXRlIGl0cyBmaXJzdCBhcmd1bWVudCBob3dldmVyIGl0IHdhbnRzLiBBbGwgbXV0YXRpb25zIGFyZVxuXHQgKiBvbmx5IGV2ZXIgYXBwbGllZCB0byBhIF9fY29weV9fIG9mIHRoZSBiYXNlIHN0YXRlLlxuXHQgKlxuXHQgKiBQYXNzIG9ubHkgYSBmdW5jdGlvbiB0byBjcmVhdGUgYSBcImN1cnJpZWQgcHJvZHVjZXJcIiB3aGljaCByZWxpZXZlcyB5b3Vcblx0ICogZnJvbSBwYXNzaW5nIHRoZSByZWNpcGUgZnVuY3Rpb24gZXZlcnkgdGltZS5cblx0ICpcblx0ICogT25seSBwbGFpbiBvYmplY3RzIGFuZCBhcnJheXMgYXJlIG1hZGUgbXV0YWJsZS4gQWxsIG90aGVyIG9iamVjdHMgYXJlXG5cdCAqIGNvbnNpZGVyZWQgdW5jb3B5YWJsZS5cblx0ICpcblx0ICogTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBfX2JvdW5kX18gdG8gaXRzIGBJbW1lcmAgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7YW55fSBiYXNlIC0gdGhlIGluaXRpYWwgc3RhdGVcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gcmVjaXBlIC0gZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIHByb3h5IG9mIHRoZSBiYXNlIHN0YXRlIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCB3aGljaCBjYW4gYmUgZnJlZWx5IG1vZGlmaWVkXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHBhdGNoTGlzdGVuZXIgLSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggYWxsIHRoZSBwYXRjaGVzIHByb2R1Y2VkIGhlcmVcblx0ICogQHJldHVybnMge2FueX0gYSBuZXcgc3RhdGUsIG9yIHRoZSBpbml0aWFsIHN0YXRlIGlmIG5vdGhpbmcgd2FzIG1vZGlmaWVkXG5cdCAqL1xuXHRwcm9kdWNlOiBJUHJvZHVjZSA9IChiYXNlOiBhbnksIHJlY2lwZT86IGFueSwgcGF0Y2hMaXN0ZW5lcj86IGFueSkgPT4ge1xuXHRcdC8vIGN1cnJpZWQgaW52b2NhdGlvblxuXHRcdGlmICh0eXBlb2YgYmFzZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEJhc2UgPSByZWNpcGVcblx0XHRcdHJlY2lwZSA9IGJhc2VcblxuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXNcblx0XHRcdHJldHVybiBmdW5jdGlvbiBjdXJyaWVkUHJvZHVjZShcblx0XHRcdFx0dGhpczogYW55LFxuXHRcdFx0XHRiYXNlID0gZGVmYXVsdEJhc2UsXG5cdFx0XHRcdC4uLmFyZ3M6IGFueVtdXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGYucHJvZHVjZShiYXNlLCAoZHJhZnQ6IERyYWZ0ZWQpID0+IHJlY2lwZS5jYWxsKHRoaXMsIGRyYWZ0LCAuLi5hcmdzKSkgLy8gcHJldHRpZXItaWdub3JlXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIikgZGllKDYpXG5cdFx0aWYgKHBhdGNoTGlzdGVuZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcGF0Y2hMaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiKVxuXHRcdFx0ZGllKDcpXG5cblx0XHRsZXQgcmVzdWx0XG5cblx0XHQvLyBPbmx5IHBsYWluIG9iamVjdHMsIGFycmF5cywgYW5kIFwiaW1tZXJhYmxlIGNsYXNzZXNcIiBhcmUgZHJhZnRlZC5cblx0XHRpZiAoaXNEcmFmdGFibGUoYmFzZSkpIHtcblx0XHRcdGNvbnN0IHNjb3BlID0gZW50ZXJTY29wZSh0aGlzKVxuXHRcdFx0Y29uc3QgcHJveHkgPSBjcmVhdGVQcm94eSh0aGlzLCBiYXNlLCB1bmRlZmluZWQpXG5cdFx0XHRsZXQgaGFzRXJyb3IgPSB0cnVlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXN1bHQgPSByZWNpcGUocHJveHkpXG5cdFx0XHRcdGhhc0Vycm9yID0gZmFsc2Vcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdC8vIGZpbmFsbHkgaW5zdGVhZCBvZiBjYXRjaCArIHJldGhyb3cgYmV0dGVyIHByZXNlcnZlcyBvcmlnaW5hbCBzdGFja1xuXHRcdFx0XHRpZiAoaGFzRXJyb3IpIHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0XHRlbHNlIGxlYXZlU2NvcGUoc2NvcGUpXG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0LnRoZW4oXG5cdFx0XHRcdFx0cmVzdWx0ID0+IHtcblx0XHRcdFx0XHRcdHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKVxuXHRcdFx0XHRcdFx0cmV0dXJuIHByb2Nlc3NSZXN1bHQocmVzdWx0LCBzY29wZSlcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHRcdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3Jcblx0XHRcdFx0XHR9XG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHRcdHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKVxuXHRcdFx0cmV0dXJuIHByb2Nlc3NSZXN1bHQocmVzdWx0LCBzY29wZSlcblx0XHR9IGVsc2UgaWYgKCFiYXNlIHx8IHR5cGVvZiBiYXNlICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRyZXN1bHQgPSByZWNpcGUoYmFzZSlcblx0XHRcdGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkgcmVzdWx0ID0gYmFzZVxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gTk9USElORykgcmVzdWx0ID0gdW5kZWZpbmVkXG5cdFx0XHRpZiAodGhpcy5hdXRvRnJlZXplXykgZnJlZXplKHJlc3VsdCwgdHJ1ZSlcblx0XHRcdGlmIChwYXRjaExpc3RlbmVyKSB7XG5cdFx0XHRcdGNvbnN0IHA6IFBhdGNoW10gPSBbXVxuXHRcdFx0XHRjb25zdCBpcDogUGF0Y2hbXSA9IFtdXG5cdFx0XHRcdGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKGJhc2UsIHJlc3VsdCwgcCwgaXApXG5cdFx0XHRcdHBhdGNoTGlzdGVuZXIocCwgaXApXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0XG5cdFx0fSBlbHNlIGRpZSgyMSwgYmFzZSlcblx0fVxuXG5cdHByb2R1Y2VXaXRoUGF0Y2hlczogSVByb2R1Y2VXaXRoUGF0Y2hlcyA9IChiYXNlOiBhbnksIHJlY2lwZT86IGFueSk6IGFueSA9PiB7XG5cdFx0Ly8gY3VycmllZCBpbnZvY2F0aW9uXG5cdFx0aWYgKHR5cGVvZiBiYXNlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybiAoc3RhdGU6IGFueSwgLi4uYXJnczogYW55W10pID0+XG5cdFx0XHRcdHRoaXMucHJvZHVjZVdpdGhQYXRjaGVzKHN0YXRlLCAoZHJhZnQ6IGFueSkgPT4gYmFzZShkcmFmdCwgLi4uYXJncykpXG5cdFx0fVxuXG5cdFx0bGV0IHBhdGNoZXM6IFBhdGNoW10sIGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5wcm9kdWNlKGJhc2UsIHJlY2lwZSwgKHA6IFBhdGNoW10sIGlwOiBQYXRjaFtdKSA9PiB7XG5cdFx0XHRwYXRjaGVzID0gcFxuXHRcdFx0aW52ZXJzZVBhdGNoZXMgPSBpcFxuXHRcdH0pXG5cblx0XHRpZiAodHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0cmV0dXJuIHJlc3VsdC50aGVuKG5leHRTdGF0ZSA9PiBbbmV4dFN0YXRlLCBwYXRjaGVzISwgaW52ZXJzZVBhdGNoZXMhXSlcblx0XHR9XG5cdFx0cmV0dXJuIFtyZXN1bHQsIHBhdGNoZXMhLCBpbnZlcnNlUGF0Y2hlcyFdXG5cdH1cblxuXHRjcmVhdGVEcmFmdDxUIGV4dGVuZHMgT2JqZWN0aXNoPihiYXNlOiBUKTogRHJhZnQ8VD4ge1xuXHRcdGlmICghaXNEcmFmdGFibGUoYmFzZSkpIGRpZSg4KVxuXHRcdGlmIChpc0RyYWZ0KGJhc2UpKSBiYXNlID0gY3VycmVudChiYXNlKVxuXHRcdGNvbnN0IHNjb3BlID0gZW50ZXJTY29wZSh0aGlzKVxuXHRcdGNvbnN0IHByb3h5ID0gY3JlYXRlUHJveHkodGhpcywgYmFzZSwgdW5kZWZpbmVkKVxuXHRcdHByb3h5W0RSQUZUX1NUQVRFXS5pc01hbnVhbF8gPSB0cnVlXG5cdFx0bGVhdmVTY29wZShzY29wZSlcblx0XHRyZXR1cm4gcHJveHkgYXMgYW55XG5cdH1cblxuXHRmaW5pc2hEcmFmdDxEIGV4dGVuZHMgRHJhZnQ8YW55Pj4oXG5cdFx0ZHJhZnQ6IEQsXG5cdFx0cGF0Y2hMaXN0ZW5lcj86IFBhdGNoTGlzdGVuZXJcblx0KTogRCBleHRlbmRzIERyYWZ0PGluZmVyIFQ+ID8gVCA6IG5ldmVyIHtcblx0XHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IGRyYWZ0ICYmIChkcmFmdCBhcyBhbnkpW0RSQUZUX1NUQVRFXVxuXHRcdGlmIChfX0RFVl9fKSB7XG5cdFx0XHRpZiAoIXN0YXRlIHx8ICFzdGF0ZS5pc01hbnVhbF8pIGRpZSg5KVxuXHRcdFx0aWYgKHN0YXRlLmZpbmFsaXplZF8pIGRpZSgxMClcblx0XHR9XG5cdFx0Y29uc3Qge3Njb3BlXzogc2NvcGV9ID0gc3RhdGVcblx0XHR1c2VQYXRjaGVzSW5TY29wZShzY29wZSwgcGF0Y2hMaXN0ZW5lcilcblx0XHRyZXR1cm4gcHJvY2Vzc1Jlc3VsdCh1bmRlZmluZWQsIHNjb3BlKVxuXHR9XG5cblx0LyoqXG5cdCAqIFBhc3MgdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IGZyZWV6ZSBhbGwgY29waWVzIGNyZWF0ZWQgYnkgSW1tZXIuXG5cdCAqXG5cdCAqIEJ5IGRlZmF1bHQsIGF1dG8tZnJlZXppbmcgaXMgZW5hYmxlZC5cblx0ICovXG5cdHNldEF1dG9GcmVlemUodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmF1dG9GcmVlemVfID0gdmFsdWVcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXNzIHRydWUgdG8gdXNlIHRoZSBFUzIwMTUgYFByb3h5YCBjbGFzcyB3aGVuIGNyZWF0aW5nIGRyYWZ0cywgd2hpY2ggaXNcblx0ICogYWx3YXlzIGZhc3RlciB0aGFuIHVzaW5nIEVTNSBwcm94aWVzLlxuXHQgKlxuXHQgKiBCeSBkZWZhdWx0LCBmZWF0dXJlIGRldGVjdGlvbiBpcyB1c2VkLCBzbyBjYWxsaW5nIHRoaXMgaXMgcmFyZWx5IG5lY2Vzc2FyeS5cblx0ICovXG5cdHNldFVzZVByb3hpZXModmFsdWU6IGJvb2xlYW4pIHtcblx0XHRpZiAodmFsdWUgJiYgIWhhc1Byb3hpZXMpIHtcblx0XHRcdGRpZSgyMClcblx0XHR9XG5cdFx0dGhpcy51c2VQcm94aWVzXyA9IHZhbHVlXG5cdH1cblxuXHRhcHBseVBhdGNoZXM8VCBleHRlbmRzIE9iamVjdGlzaD4oYmFzZTogVCwgcGF0Y2hlczogUGF0Y2hbXSk6IFQge1xuXHRcdC8vIElmIGEgcGF0Y2ggcmVwbGFjZXMgdGhlIGVudGlyZSBzdGF0ZSwgdGFrZSB0aGF0IHJlcGxhY2VtZW50IGFzIGJhc2Vcblx0XHQvLyBiZWZvcmUgYXBwbHlpbmcgcGF0Y2hlc1xuXHRcdGxldCBpOiBudW1iZXJcblx0XHRmb3IgKGkgPSBwYXRjaGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBwYXRjaCA9IHBhdGNoZXNbaV1cblx0XHRcdGlmIChwYXRjaC5wYXRoLmxlbmd0aCA9PT0gMCAmJiBwYXRjaC5vcCA9PT0gXCJyZXBsYWNlXCIpIHtcblx0XHRcdFx0YmFzZSA9IHBhdGNoLnZhbHVlXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIElmIHRoZXJlIHdhcyBhIHBhdGNoIHRoYXQgcmVwbGFjZWQgdGhlIGVudGlyZSBzdGF0ZSwgc3RhcnQgZnJvbSB0aGVcblx0XHQvLyBwYXRjaCBhZnRlciB0aGF0LlxuXHRcdGlmIChpID4gLTEpIHtcblx0XHRcdHBhdGNoZXMgPSBwYXRjaGVzLnNsaWNlKGkgKyAxKVxuXHRcdH1cblxuXHRcdGNvbnN0IGFwcGx5UGF0Y2hlc0ltcGwgPSBnZXRQbHVnaW4oXCJQYXRjaGVzXCIpLmFwcGx5UGF0Y2hlc19cblx0XHRpZiAoaXNEcmFmdChiYXNlKSkge1xuXHRcdFx0Ly8gTi5COiBuZXZlciBoaXRzIGlmIHNvbWUgcGF0Y2ggYSByZXBsYWNlbWVudCwgcGF0Y2hlcyBhcmUgbmV2ZXIgZHJhZnRzXG5cdFx0XHRyZXR1cm4gYXBwbHlQYXRjaGVzSW1wbChiYXNlLCBwYXRjaGVzKVxuXHRcdH1cblx0XHQvLyBPdGhlcndpc2UsIHByb2R1Y2UgYSBjb3B5IG9mIHRoZSBiYXNlIHN0YXRlLlxuXHRcdHJldHVybiB0aGlzLnByb2R1Y2UoYmFzZSwgKGRyYWZ0OiBEcmFmdGVkKSA9PlxuXHRcdFx0YXBwbHlQYXRjaGVzSW1wbChkcmFmdCwgcGF0Y2hlcylcblx0XHQpXG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3h5PFQgZXh0ZW5kcyBPYmplY3Rpc2g+KFxuXHRpbW1lcjogSW1tZXIsXG5cdHZhbHVlOiBULFxuXHRwYXJlbnQ/OiBJbW1lclN0YXRlXG4pOiBEcmFmdGVkPFQsIEltbWVyU3RhdGU+IHtcblx0Ly8gcHJlY29uZGl0aW9uOiBjcmVhdGVQcm94eSBzaG91bGQgYmUgZ3VhcmRlZCBieSBpc0RyYWZ0YWJsZSwgc28gd2Uga25vdyB3ZSBjYW4gc2FmZWx5IGRyYWZ0XG5cdGNvbnN0IGRyYWZ0OiBEcmFmdGVkID0gaXNNYXAodmFsdWUpXG5cdFx0PyBnZXRQbHVnaW4oXCJNYXBTZXRcIikucHJveHlNYXBfKHZhbHVlLCBwYXJlbnQpXG5cdFx0OiBpc1NldCh2YWx1ZSlcblx0XHQ/IGdldFBsdWdpbihcIk1hcFNldFwiKS5wcm94eVNldF8odmFsdWUsIHBhcmVudClcblx0XHQ6IGltbWVyLnVzZVByb3hpZXNfXG5cdFx0PyBjcmVhdGVQcm94eVByb3h5KHZhbHVlLCBwYXJlbnQpXG5cdFx0OiBnZXRQbHVnaW4oXCJFUzVcIikuY3JlYXRlRVM1UHJveHlfKHZhbHVlLCBwYXJlbnQpXG5cblx0Y29uc3Qgc2NvcGUgPSBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKClcblx0c2NvcGUuZHJhZnRzXy5wdXNoKGRyYWZ0KVxuXHRyZXR1cm4gZHJhZnRcbn1cbiIsICJpbXBvcnQge1xuXHRkaWUsXG5cdGlzRHJhZnQsXG5cdHNoYWxsb3dDb3B5LFxuXHRlYWNoLFxuXHREUkFGVF9TVEFURSxcblx0Z2V0LFxuXHRzZXQsXG5cdEltbWVyU3RhdGUsXG5cdGlzRHJhZnRhYmxlLFxuXHRBcmNodHlwZSxcblx0Z2V0QXJjaHR5cGUsXG5cdGdldFBsdWdpblxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG4vKiogVGFrZXMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGRyYWZ0IGFuZCBmaW5hbGl6ZXMgaXQgKGJ1dCB3aXRob3V0IGZyZWV6aW5nKS4gVGhpcyBpcyBhIGdyZWF0IHV0aWxpdHkgdG8gcHJpbnQgdGhlIGN1cnJlbnQgc3RhdGUgZHVyaW5nIGRlYnVnZ2luZyAobm8gUHJveGllcyBpbiB0aGUgd2F5KS4gVGhlIG91dHB1dCBvZiBjdXJyZW50IGNhbiBhbHNvIGJlIHNhZmVseSBsZWFrZWQgb3V0c2lkZSB0aGUgcHJvZHVjZXIuICovXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudDxUPih2YWx1ZTogVCk6IFRcbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50KHZhbHVlOiBhbnkpOiBhbnkge1xuXHRpZiAoIWlzRHJhZnQodmFsdWUpKSBkaWUoMjIsIHZhbHVlKVxuXHRyZXR1cm4gY3VycmVudEltcGwodmFsdWUpXG59XG5cbmZ1bmN0aW9uIGN1cnJlbnRJbXBsKHZhbHVlOiBhbnkpOiBhbnkge1xuXHRpZiAoIWlzRHJhZnRhYmxlKHZhbHVlKSkgcmV0dXJuIHZhbHVlXG5cdGNvbnN0IHN0YXRlOiBJbW1lclN0YXRlIHwgdW5kZWZpbmVkID0gdmFsdWVbRFJBRlRfU1RBVEVdXG5cdGxldCBjb3B5OiBhbnlcblx0Y29uc3QgYXJjaFR5cGUgPSBnZXRBcmNodHlwZSh2YWx1ZSlcblx0aWYgKHN0YXRlKSB7XG5cdFx0aWYgKFxuXHRcdFx0IXN0YXRlLm1vZGlmaWVkXyAmJlxuXHRcdFx0KHN0YXRlLnR5cGVfIDwgNCB8fCAhZ2V0UGx1Z2luKFwiRVM1XCIpLmhhc0NoYW5nZXNfKHN0YXRlIGFzIGFueSkpXG5cdFx0KVxuXHRcdFx0cmV0dXJuIHN0YXRlLmJhc2VfXG5cdFx0Ly8gT3B0aW1pemF0aW9uOiBhdm9pZCBnZW5lcmF0aW5nIG5ldyBkcmFmdHMgZHVyaW5nIGNvcHlpbmdcblx0XHRzdGF0ZS5maW5hbGl6ZWRfID0gdHJ1ZVxuXHRcdGNvcHkgPSBjb3B5SGVscGVyKHZhbHVlLCBhcmNoVHlwZSlcblx0XHRzdGF0ZS5maW5hbGl6ZWRfID0gZmFsc2Vcblx0fSBlbHNlIHtcblx0XHRjb3B5ID0gY29weUhlbHBlcih2YWx1ZSwgYXJjaFR5cGUpXG5cdH1cblxuXHRlYWNoKGNvcHksIChrZXksIGNoaWxkVmFsdWUpID0+IHtcblx0XHRpZiAoc3RhdGUgJiYgZ2V0KHN0YXRlLmJhc2VfLCBrZXkpID09PSBjaGlsZFZhbHVlKSByZXR1cm4gLy8gbm8gbmVlZCB0byBjb3B5IG9yIHNlYXJjaCBpbiBzb21ldGhpbmcgdGhhdCBkaWRuJ3QgY2hhbmdlXG5cdFx0c2V0KGNvcHksIGtleSwgY3VycmVudEltcGwoY2hpbGRWYWx1ZSkpXG5cdH0pXG5cdC8vIEluIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IGNvbnNpZGVyIGZyZWV6aW5nIGhlcmUsIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNldHRpbmdzXG5cdHJldHVybiBhcmNoVHlwZSA9PT0gQXJjaHR5cGUuU2V0ID8gbmV3IFNldChjb3B5KSA6IGNvcHlcbn1cblxuZnVuY3Rpb24gY29weUhlbHBlcih2YWx1ZTogYW55LCBhcmNoVHlwZTogbnVtYmVyKTogYW55IHtcblx0Ly8gY3JlYXRlcyBhIHNoYWxsb3cgY29weSwgZXZlbiBpZiBpdCBpcyBhIG1hcCBvciBzZXRcblx0c3dpdGNoIChhcmNoVHlwZSkge1xuXHRcdGNhc2UgQXJjaHR5cGUuTWFwOlxuXHRcdFx0cmV0dXJuIG5ldyBNYXAodmFsdWUpXG5cdFx0Y2FzZSBBcmNodHlwZS5TZXQ6XG5cdFx0XHQvLyBTZXQgd2lsbCBiZSBjbG9uZWQgYXMgYXJyYXkgdGVtcG9yYXJpbHksIHNvIHRoYXQgd2UgY2FuIHJlcGxhY2UgaW5kaXZpZHVhbCBpdGVtc1xuXHRcdFx0cmV0dXJuIEFycmF5LmZyb20odmFsdWUpXG5cdH1cblx0cmV0dXJuIHNoYWxsb3dDb3B5KHZhbHVlKVxufVxuIiwgImltcG9ydCB7XG5cdEltbWVyU3RhdGUsXG5cdERyYWZ0ZWQsXG5cdEVTNUFycmF5U3RhdGUsXG5cdEVTNU9iamVjdFN0YXRlLFxuXHRlYWNoLFxuXHRoYXMsXG5cdGlzRHJhZnQsXG5cdGxhdGVzdCxcblx0RFJBRlRfU1RBVEUsXG5cdGlzLFxuXHRsb2FkUGx1Z2luLFxuXHRJbW1lclNjb3BlLFxuXHRQcm94eVR5cGUsXG5cdGdldEN1cnJlbnRTY29wZSxcblx0ZGllLFxuXHRtYXJrQ2hhbmdlZCxcblx0b2JqZWN0VHJhcHMsXG5cdG93bktleXMsXG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvcnNcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxudHlwZSBFUzVTdGF0ZSA9IEVTNUFycmF5U3RhdGUgfCBFUzVPYmplY3RTdGF0ZVxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlRVM1KCkge1xuXHRmdW5jdGlvbiB3aWxsRmluYWxpemVFUzVfKFxuXHRcdHNjb3BlOiBJbW1lclNjb3BlLFxuXHRcdHJlc3VsdDogYW55LFxuXHRcdGlzUmVwbGFjZWQ6IGJvb2xlYW5cblx0KSB7XG5cdFx0aWYgKCFpc1JlcGxhY2VkKSB7XG5cdFx0XHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRcdFx0bWFya0NoYW5nZXNSZWN1cnNpdmVseShzY29wZS5kcmFmdHNfIVswXSlcblx0XHRcdH1cblx0XHRcdC8vIFRoaXMgaXMgZmFzdGVyIHdoZW4gd2UgZG9uJ3QgY2FyZSBhYm91dCB3aGljaCBhdHRyaWJ1dGVzIGNoYW5nZWQuXG5cdFx0XHRtYXJrQ2hhbmdlc1N3ZWVwKHNjb3BlLmRyYWZ0c18pXG5cdFx0fVxuXHRcdC8vIFdoZW4gYSBjaGlsZCBkcmFmdCBpcyByZXR1cm5lZCwgbG9vayBmb3IgY2hhbmdlcy5cblx0XHRlbHNlIGlmIChcblx0XHRcdGlzRHJhZnQocmVzdWx0KSAmJlxuXHRcdFx0KHJlc3VsdFtEUkFGVF9TVEFURV0gYXMgRVM1U3RhdGUpLnNjb3BlXyA9PT0gc2NvcGVcblx0XHQpIHtcblx0XHRcdG1hcmtDaGFuZ2VzU3dlZXAoc2NvcGUuZHJhZnRzXylcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBjcmVhdGVFUzVEcmFmdChpc0FycmF5OiBib29sZWFuLCBiYXNlOiBhbnkpIHtcblx0XHRpZiAoaXNBcnJheSkge1xuXHRcdFx0Y29uc3QgZHJhZnQgPSBuZXcgQXJyYXkoYmFzZS5sZW5ndGgpXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGJhc2UubGVuZ3RoOyBpKyspXG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkcmFmdCwgXCJcIiArIGksIHByb3h5UHJvcGVydHkoaSwgdHJ1ZSkpXG5cdFx0XHRyZXR1cm4gZHJhZnRcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvcnMgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGJhc2UpXG5cdFx0XHRkZWxldGUgZGVzY3JpcHRvcnNbRFJBRlRfU1RBVEUgYXMgYW55XVxuXHRcdFx0Y29uc3Qga2V5cyA9IG93bktleXMoZGVzY3JpcHRvcnMpXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qga2V5OiBhbnkgPSBrZXlzW2ldXG5cdFx0XHRcdGRlc2NyaXB0b3JzW2tleV0gPSBwcm94eVByb3BlcnR5KFxuXHRcdFx0XHRcdGtleSxcblx0XHRcdFx0XHRpc0FycmF5IHx8ICEhZGVzY3JpcHRvcnNba2V5XS5lbnVtZXJhYmxlXG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHRcdHJldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlKSwgZGVzY3JpcHRvcnMpXG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlRVM1UHJveHlfPFQ+KFxuXHRcdGJhc2U6IFQsXG5cdFx0cGFyZW50PzogSW1tZXJTdGF0ZVxuXHQpOiBEcmFmdGVkPFQsIEVTNU9iamVjdFN0YXRlIHwgRVM1QXJyYXlTdGF0ZT4ge1xuXHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGJhc2UpXG5cdFx0Y29uc3QgZHJhZnQgPSBjcmVhdGVFUzVEcmFmdChpc0FycmF5LCBiYXNlKVxuXG5cdFx0Y29uc3Qgc3RhdGU6IEVTNU9iamVjdFN0YXRlIHwgRVM1QXJyYXlTdGF0ZSA9IHtcblx0XHRcdHR5cGVfOiBpc0FycmF5ID8gUHJveHlUeXBlLkVTNUFycmF5IDogKFByb3h5VHlwZS5FUzVPYmplY3QgYXMgYW55KSxcblx0XHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpLFxuXHRcdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHRcdGZpbmFsaXplZF86IGZhbHNlLFxuXHRcdFx0YXNzaWduZWRfOiB7fSxcblx0XHRcdHBhcmVudF86IHBhcmVudCxcblx0XHRcdC8vIGJhc2UgaXMgdGhlIG9iamVjdCB3ZSBhcmUgZHJhZnRpbmdcblx0XHRcdGJhc2VfOiBiYXNlLFxuXHRcdFx0Ly8gZHJhZnQgaXMgdGhlIGRyYWZ0IG9iamVjdCBpdHNlbGYsIHRoYXQgdHJhcHMgYWxsIHJlYWRzIGFuZCByZWFkcyBmcm9tIGVpdGhlciB0aGUgYmFzZSAoaWYgdW5tb2RpZmllZCkgb3IgY29weSAoaWYgbW9kaWZpZWQpXG5cdFx0XHRkcmFmdF86IGRyYWZ0LFxuXHRcdFx0Y29weV86IG51bGwsXG5cdFx0XHRyZXZva2VkXzogZmFsc2UsXG5cdFx0XHRpc01hbnVhbF86IGZhbHNlXG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRyYWZ0LCBEUkFGVF9TVEFURSwge1xuXHRcdFx0dmFsdWU6IHN0YXRlLFxuXHRcdFx0Ly8gZW51bWVyYWJsZTogZmFsc2UgPC0gdGhlIGRlZmF1bHRcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSlcblx0XHRyZXR1cm4gZHJhZnRcblx0fVxuXG5cdC8vIHByb3BlcnR5IGRlc2NyaXB0b3JzIGFyZSByZWN5Y2xlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgY3JlYXRlIGEgZ2V0IGFuZCBzZXQgY2xvc3VyZSBwZXIgcHJvcGVydHksXG5cdC8vIGJ1dCBzaGFyZSB0aGVtIGFsbCBpbnN0ZWFkXG5cdGNvbnN0IGRlc2NyaXB0b3JzOiB7W3Byb3A6IHN0cmluZ106IFByb3BlcnR5RGVzY3JpcHRvcn0gPSB7fVxuXG5cdGZ1bmN0aW9uIHByb3h5UHJvcGVydHkoXG5cdFx0cHJvcDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdGVudW1lcmFibGU6IGJvb2xlYW5cblx0KTogUHJvcGVydHlEZXNjcmlwdG9yIHtcblx0XHRsZXQgZGVzYyA9IGRlc2NyaXB0b3JzW3Byb3BdXG5cdFx0aWYgKGRlc2MpIHtcblx0XHRcdGRlc2MuZW51bWVyYWJsZSA9IGVudW1lcmFibGVcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVzY3JpcHRvcnNbcHJvcF0gPSBkZXNjID0ge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGVudW1lcmFibGUsXG5cdFx0XHRcdGdldCh0aGlzOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRcdFx0aWYgKF9fREVWX18pIGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0cmV0dXJuIG9iamVjdFRyYXBzLmdldChzdGF0ZSwgcHJvcClcblx0XHRcdFx0fSxcblx0XHRcdFx0c2V0KHRoaXM6IGFueSwgdmFsdWUpIHtcblx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRcdFx0aWYgKF9fREVWX18pIGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0b2JqZWN0VHJhcHMuc2V0KHN0YXRlLCBwcm9wLCB2YWx1ZSlcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZGVzY1xuXHR9XG5cblx0Ly8gVGhpcyBsb29rcyBleHBlbnNpdmUsIGJ1dCBvbmx5IHByb3hpZXMgYXJlIHZpc2l0ZWQsIGFuZCBvbmx5IG9iamVjdHMgd2l0aG91dCBrbm93biBjaGFuZ2VzIGFyZSBzY2FubmVkLlxuXHRmdW5jdGlvbiBtYXJrQ2hhbmdlc1N3ZWVwKGRyYWZ0czogRHJhZnRlZDxhbnksIEltbWVyU3RhdGU+W10pIHtcblx0XHQvLyBUaGUgbmF0dXJhbCBvcmRlciBvZiBkcmFmdHMgaW4gdGhlIGBzY29wZWAgYXJyYXkgaXMgYmFzZWQgb24gd2hlbiB0aGV5XG5cdFx0Ly8gd2VyZSBhY2Nlc3NlZC4gQnkgcHJvY2Vzc2luZyBkcmFmdHMgaW4gcmV2ZXJzZSBuYXR1cmFsIG9yZGVyLCB3ZSBoYXZlIGFcblx0XHQvLyBiZXR0ZXIgY2hhbmNlIG9mIHByb2Nlc3NpbmcgbGVhZiBub2RlcyBmaXJzdC4gV2hlbiBhIGxlYWYgbm9kZSBpcyBrbm93biB0b1xuXHRcdC8vIGhhdmUgY2hhbmdlZCwgd2UgY2FuIGF2b2lkIGFueSB0cmF2ZXJzYWwgb2YgaXRzIGFuY2VzdG9yIG5vZGVzLlxuXHRcdGZvciAobGV0IGkgPSBkcmFmdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBFUzVTdGF0ZSA9IGRyYWZ0c1tpXVtEUkFGVF9TVEFURV1cblx0XHRcdGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG5cdFx0XHRcdHN3aXRjaCAoc3RhdGUudHlwZV8pIHtcblx0XHRcdFx0XHRjYXNlIFByb3h5VHlwZS5FUzVBcnJheTpcblx0XHRcdFx0XHRcdGlmIChoYXNBcnJheUNoYW5nZXMoc3RhdGUpKSBtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Y2FzZSBQcm94eVR5cGUuRVM1T2JqZWN0OlxuXHRcdFx0XHRcdFx0aWYgKGhhc09iamVjdENoYW5nZXMoc3RhdGUpKSBtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBtYXJrQ2hhbmdlc1JlY3Vyc2l2ZWx5KG9iamVjdDogYW55KSB7XG5cdFx0aWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gXCJvYmplY3RcIikgcmV0dXJuXG5cdFx0Y29uc3Qgc3RhdGU6IEVTNVN0YXRlIHwgdW5kZWZpbmVkID0gb2JqZWN0W0RSQUZUX1NUQVRFXVxuXHRcdGlmICghc3RhdGUpIHJldHVyblxuXHRcdGNvbnN0IHtiYXNlXywgZHJhZnRfLCBhc3NpZ25lZF8sIHR5cGVffSA9IHN0YXRlXG5cdFx0aWYgKHR5cGVfID09PSBQcm94eVR5cGUuRVM1T2JqZWN0KSB7XG5cdFx0XHQvLyBMb29rIGZvciBhZGRlZCBrZXlzLlxuXHRcdFx0Ly8gcHJvYmFibHkgdGhlcmUgaXMgYSBmYXN0ZXIgd2F5IHRvIGRldGVjdCBjaGFuZ2VzLCBhcyBzd2VlcCArIHJlY3Vyc2Ugc2VlbXMgdG8gZG8gc29tZVxuXHRcdFx0Ly8gdW5uZWNlc3Nhcnkgd29yay5cblx0XHRcdC8vIGFsc286IHByb2JhYmx5IHdlIGNhbiBzdG9yZSB0aGUgaW5mb3JtYXRpb24gd2UgZGV0ZWN0IGhlcmUsIHRvIHNwZWVkIHVwIHRyZWUgZmluYWxpemF0aW9uIVxuXHRcdFx0ZWFjaChkcmFmdF8sIGtleSA9PiB7XG5cdFx0XHRcdGlmICgoa2V5IGFzIGFueSkgPT09IERSQUZUX1NUQVRFKSByZXR1cm5cblx0XHRcdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRcdFx0aWYgKChiYXNlXyBhcyBhbnkpW2tleV0gPT09IHVuZGVmaW5lZCAmJiAhaGFzKGJhc2VfLCBrZXkpKSB7XG5cdFx0XHRcdFx0YXNzaWduZWRfW2tleV0gPSB0cnVlXG5cdFx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdH0gZWxzZSBpZiAoIWFzc2lnbmVkX1trZXldKSB7XG5cdFx0XHRcdFx0Ly8gT25seSB1bnRvdWNoZWQgcHJvcGVydGllcyB0cmlnZ2VyIHJlY3Vyc2lvbi5cblx0XHRcdFx0XHRtYXJrQ2hhbmdlc1JlY3Vyc2l2ZWx5KGRyYWZ0X1trZXldKVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Ly8gTG9vayBmb3IgcmVtb3ZlZCBrZXlzLlxuXHRcdFx0ZWFjaChiYXNlXywga2V5ID0+IHtcblx0XHRcdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRcdFx0aWYgKGRyYWZ0X1trZXldID09PSB1bmRlZmluZWQgJiYgIWhhcyhkcmFmdF8sIGtleSkpIHtcblx0XHRcdFx0XHRhc3NpZ25lZF9ba2V5XSA9IGZhbHNlXG5cdFx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fSBlbHNlIGlmICh0eXBlXyA9PT0gUHJveHlUeXBlLkVTNUFycmF5KSB7XG5cdFx0XHRpZiAoaGFzQXJyYXlDaGFuZ2VzKHN0YXRlIGFzIEVTNUFycmF5U3RhdGUpKSB7XG5cdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHRhc3NpZ25lZF8ubGVuZ3RoID0gdHJ1ZVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZHJhZnRfLmxlbmd0aCA8IGJhc2VfLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gZHJhZnRfLmxlbmd0aDsgaSA8IGJhc2VfLmxlbmd0aDsgaSsrKSBhc3NpZ25lZF9baV0gPSBmYWxzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IGJhc2VfLmxlbmd0aDsgaSA8IGRyYWZ0Xy5sZW5ndGg7IGkrKykgYXNzaWduZWRfW2ldID0gdHJ1ZVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBNaW5pbXVtIGNvdW50IGlzIGVub3VnaCwgdGhlIG90aGVyIHBhcnRzIGhhcyBiZWVuIHByb2Nlc3NlZC5cblx0XHRcdGNvbnN0IG1pbiA9IE1hdGgubWluKGRyYWZ0Xy5sZW5ndGgsIGJhc2VfLmxlbmd0aClcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuXHRcdFx0XHQvLyBPbmx5IHVudG91Y2hlZCBpbmRpY2VzIHRyaWdnZXIgcmVjdXJzaW9uLlxuXHRcdFx0XHRpZiAoIWRyYWZ0Xy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHRcdGFzc2lnbmVkX1tpXSA9IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoYXNzaWduZWRfW2ldID09PSB1bmRlZmluZWQpIG1hcmtDaGFuZ2VzUmVjdXJzaXZlbHkoZHJhZnRfW2ldKVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGhhc09iamVjdENoYW5nZXMoc3RhdGU6IEVTNU9iamVjdFN0YXRlKSB7XG5cdFx0Y29uc3Qge2Jhc2VfLCBkcmFmdF99ID0gc3RhdGVcblxuXHRcdC8vIFNlYXJjaCBmb3IgYWRkZWQga2V5cyBhbmQgY2hhbmdlZCBrZXlzLiBTdGFydCBhdCB0aGUgYmFjaywgYmVjYXVzZVxuXHRcdC8vIG5vbi1udW1lcmljIGtleXMgYXJlIG9yZGVyZWQgYnkgdGltZSBvZiBkZWZpbml0aW9uIG9uIHRoZSBvYmplY3QuXG5cdFx0Y29uc3Qga2V5cyA9IG93bktleXMoZHJhZnRfKVxuXHRcdGZvciAobGV0IGkgPSBrZXlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBrZXk6IGFueSA9IGtleXNbaV1cblx0XHRcdGlmIChrZXkgPT09IERSQUZUX1NUQVRFKSBjb250aW51ZVxuXHRcdFx0Y29uc3QgYmFzZVZhbHVlID0gYmFzZV9ba2V5XVxuXHRcdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRcdGlmIChiYXNlVmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhaGFzKGJhc2VfLCBrZXkpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHR9XG5cdFx0XHQvLyBPbmNlIGEgYmFzZSBrZXkgaXMgZGVsZXRlZCwgZnV0dXJlIGNoYW5nZXMgZ28gdW5kZXRlY3RlZCwgYmVjYXVzZSBpdHNcblx0XHRcdC8vIGRlc2NyaXB0b3IgaXMgZXJhc2VkLiBUaGlzIGJyYW5jaCBkZXRlY3RzIGFueSBtaXNzZWQgY2hhbmdlcy5cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGRyYWZ0X1trZXldXG5cdFx0XHRcdGNvbnN0IHN0YXRlOiBJbW1lclN0YXRlID0gdmFsdWUgJiYgdmFsdWVbRFJBRlRfU1RBVEVdXG5cdFx0XHRcdGlmIChzdGF0ZSA/IHN0YXRlLmJhc2VfICE9PSBiYXNlVmFsdWUgOiAhaXModmFsdWUsIGJhc2VWYWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQXQgdGhpcyBwb2ludCwgbm8ga2V5cyB3ZXJlIGFkZGVkIG9yIGNoYW5nZWQuXG5cdFx0Ly8gQ29tcGFyZSBrZXkgY291bnQgdG8gZGV0ZXJtaW5lIGlmIGtleXMgd2VyZSBkZWxldGVkLlxuXHRcdGNvbnN0IGJhc2VJc0RyYWZ0ID0gISFiYXNlX1tEUkFGVF9TVEFURSBhcyBhbnldXG5cdFx0cmV0dXJuIGtleXMubGVuZ3RoICE9PSBvd25LZXlzKGJhc2VfKS5sZW5ndGggKyAoYmFzZUlzRHJhZnQgPyAwIDogMSkgLy8gKyAxIHRvIGNvcnJlY3QgZm9yIERSQUZUX1NUQVRFXG5cdH1cblxuXHRmdW5jdGlvbiBoYXNBcnJheUNoYW5nZXMoc3RhdGU6IEVTNUFycmF5U3RhdGUpIHtcblx0XHRjb25zdCB7ZHJhZnRffSA9IHN0YXRlXG5cdFx0aWYgKGRyYWZ0Xy5sZW5ndGggIT09IHN0YXRlLmJhc2VfLmxlbmd0aCkgcmV0dXJuIHRydWVcblx0XHQvLyBTZWUgIzExNlxuXHRcdC8vIElmIHdlIGZpcnN0IHNob3J0ZW4gdGhlIGxlbmd0aCwgb3VyIGFycmF5IGludGVyY2VwdG9ycyB3aWxsIGJlIHJlbW92ZWQuXG5cdFx0Ly8gSWYgYWZ0ZXIgdGhhdCBuZXcgaXRlbXMgYXJlIGFkZGVkLCByZXN1bHQgaW4gdGhlIHNhbWUgb3JpZ2luYWwgbGVuZ3RoLFxuXHRcdC8vIHRob3NlIGxhc3QgaXRlbXMgd2lsbCBoYXZlIG5vIGludGVyY2VwdGluZyBwcm9wZXJ0eS5cblx0XHQvLyBTbyBpZiB0aGVyZSBpcyBubyBvd24gZGVzY3JpcHRvciBvbiB0aGUgbGFzdCBwb3NpdGlvbiwgd2Uga25vdyB0aGF0IGl0ZW1zIHdlcmUgcmVtb3ZlZCBhbmQgYWRkZWRcblx0XHQvLyBOLkIuOiBzcGxpY2UsIHVuc2hpZnQsIGV0YyBvbmx5IHNoaWZ0IHZhbHVlcyBhcm91bmQsIGJ1dCBub3QgcHJvcCBkZXNjcmlwdG9ycywgc28gd2Ugb25seSBoYXZlIHRvIGNoZWNrXG5cdFx0Ly8gdGhlIGxhc3Qgb25lXG5cdFx0Ly8gbGFzdCBkZXNjcmlwdG9yIGNhbiBiZSBub3QgYSB0cmFwLCBpZiB0aGUgYXJyYXkgd2FzIGV4dGVuZGVkXG5cdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG5cdFx0XHRkcmFmdF8sXG5cdFx0XHRkcmFmdF8ubGVuZ3RoIC0gMVxuXHRcdClcblx0XHQvLyBkZXNjcmlwdG9yIGNhbiBiZSBudWxsLCBidXQgb25seSBmb3IgbmV3bHkgY3JlYXRlZCBzcGFyc2UgYXJyYXlzLCBlZy4gbmV3IEFycmF5KDEwKVxuXHRcdGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmdldCkgcmV0dXJuIHRydWVcblx0XHQvLyBpZiB3ZSBtaXNzIGEgcHJvcGVydHksIGl0IGhhcyBiZWVuIGRlbGV0ZWQsIHNvIGFycmF5IHByb2JvYmFseSBjaGFuZ2VkXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkcmFmdF8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICghZHJhZnRfLmhhc093blByb3BlcnR5KGkpKSByZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHQvLyBGb3IgYWxsIG90aGVyIGNhc2VzLCB3ZSBkb24ndCBoYXZlIHRvIGNvbXBhcmUsIGFzIHRoZXkgd291bGQgaGF2ZSBiZWVuIHBpY2tlZCB1cCBieSB0aGUgaW5kZXggc2V0dGVyc1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG5cblx0ZnVuY3Rpb24gaGFzQ2hhbmdlc18oc3RhdGU6IEVTNVN0YXRlKSB7XG5cdFx0cmV0dXJuIHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1T2JqZWN0XG5cdFx0XHQ/IGhhc09iamVjdENoYW5nZXMoc3RhdGUpXG5cdFx0XHQ6IGhhc0FycmF5Q2hhbmdlcyhzdGF0ZSlcblx0fVxuXG5cdGZ1bmN0aW9uIGFzc2VydFVucmV2b2tlZChzdGF0ZTogYW55IC8qRVM1U3RhdGUgfCBNYXBTdGF0ZSB8IFNldFN0YXRlKi8pIHtcblx0XHRpZiAoc3RhdGUucmV2b2tlZF8pIGRpZSgzLCBKU09OLnN0cmluZ2lmeShsYXRlc3Qoc3RhdGUpKSlcblx0fVxuXG5cdGxvYWRQbHVnaW4oXCJFUzVcIiwge1xuXHRcdGNyZWF0ZUVTNVByb3h5Xyxcblx0XHR3aWxsRmluYWxpemVFUzVfLFxuXHRcdGhhc0NoYW5nZXNfXG5cdH0pXG59XG4iLCAiaW1wb3J0IHtpbW1lcmFibGV9IGZyb20gXCIuLi9pbW1lclwiXG5pbXBvcnQge1xuXHRJbW1lclN0YXRlLFxuXHRQYXRjaCxcblx0U2V0U3RhdGUsXG5cdEVTNUFycmF5U3RhdGUsXG5cdFByb3h5QXJyYXlTdGF0ZSxcblx0TWFwU3RhdGUsXG5cdEVTNU9iamVjdFN0YXRlLFxuXHRQcm94eU9iamVjdFN0YXRlLFxuXHRQYXRjaFBhdGgsXG5cdGdldCxcblx0ZWFjaCxcblx0aGFzLFxuXHRnZXRBcmNodHlwZSxcblx0aXNTZXQsXG5cdGlzTWFwLFxuXHRsb2FkUGx1Z2luLFxuXHRQcm94eVR5cGUsXG5cdEFyY2h0eXBlLFxuXHRkaWUsXG5cdGlzRHJhZnQsXG5cdGlzRHJhZnRhYmxlLFxuXHROT1RISU5HXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVQYXRjaGVzKCkge1xuXHRjb25zdCBSRVBMQUNFID0gXCJyZXBsYWNlXCJcblx0Y29uc3QgQUREID0gXCJhZGRcIlxuXHRjb25zdCBSRU1PVkUgPSBcInJlbW92ZVwiXG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVQYXRjaGVzXyhcblx0XHRzdGF0ZTogSW1tZXJTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KTogdm9pZCB7XG5cdFx0c3dpdGNoIChzdGF0ZS50eXBlXykge1xuXHRcdFx0Y2FzZSBQcm94eVR5cGUuUHJveHlPYmplY3Q6XG5cdFx0XHRjYXNlIFByb3h5VHlwZS5FUzVPYmplY3Q6XG5cdFx0XHRjYXNlIFByb3h5VHlwZS5NYXA6XG5cdFx0XHRcdHJldHVybiBnZW5lcmF0ZVBhdGNoZXNGcm9tQXNzaWduZWQoXG5cdFx0XHRcdFx0c3RhdGUsXG5cdFx0XHRcdFx0YmFzZVBhdGgsXG5cdFx0XHRcdFx0cGF0Y2hlcyxcblx0XHRcdFx0XHRpbnZlcnNlUGF0Y2hlc1xuXHRcdFx0XHQpXG5cdFx0XHRjYXNlIFByb3h5VHlwZS5FUzVBcnJheTpcblx0XHRcdGNhc2UgUHJveHlUeXBlLlByb3h5QXJyYXk6XG5cdFx0XHRcdHJldHVybiBnZW5lcmF0ZUFycmF5UGF0Y2hlcyhzdGF0ZSwgYmFzZVBhdGgsIHBhdGNoZXMsIGludmVyc2VQYXRjaGVzKVxuXHRcdFx0Y2FzZSBQcm94eVR5cGUuU2V0OlxuXHRcdFx0XHRyZXR1cm4gZ2VuZXJhdGVTZXRQYXRjaGVzKFxuXHRcdFx0XHRcdChzdGF0ZSBhcyBhbnkpIGFzIFNldFN0YXRlLFxuXHRcdFx0XHRcdGJhc2VQYXRoLFxuXHRcdFx0XHRcdHBhdGNoZXMsXG5cdFx0XHRcdFx0aW52ZXJzZVBhdGNoZXNcblx0XHRcdFx0KVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlQXJyYXlQYXRjaGVzKFxuXHRcdHN0YXRlOiBFUzVBcnJheVN0YXRlIHwgUHJveHlBcnJheVN0YXRlLFxuXHRcdGJhc2VQYXRoOiBQYXRjaFBhdGgsXG5cdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRpbnZlcnNlUGF0Y2hlczogUGF0Y2hbXVxuXHQpIHtcblx0XHRsZXQge2Jhc2VfLCBhc3NpZ25lZF99ID0gc3RhdGVcblx0XHRsZXQgY29weV8gPSBzdGF0ZS5jb3B5XyFcblxuXHRcdC8vIFJlZHVjZSBjb21wbGV4aXR5IGJ5IGVuc3VyaW5nIGBiYXNlYCBpcyBuZXZlciBsb25nZXIuXG5cdFx0aWYgKGNvcHlfLmxlbmd0aCA8IGJhc2VfLmxlbmd0aCkge1xuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0O1tiYXNlXywgY29weV9dID0gW2NvcHlfLCBiYXNlX11cblx0XHRcdDtbcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXNdID0gW2ludmVyc2VQYXRjaGVzLCBwYXRjaGVzXVxuXHRcdH1cblxuXHRcdC8vIFByb2Nlc3MgcmVwbGFjZWQgaW5kaWNlcy5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGJhc2VfLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoYXNzaWduZWRfW2ldICYmIGNvcHlfW2ldICE9PSBiYXNlX1tpXSkge1xuXHRcdFx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KFtpXSlcblx0XHRcdFx0cGF0Y2hlcy5wdXNoKHtcblx0XHRcdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdC8vIE5lZWQgdG8gbWF5YmUgY2xvbmUgaXQsIGFzIGl0IGNhbiBpbiBmYWN0IGJlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuXHRcdFx0XHRcdC8vIGR1ZSB0byB0aGUgYmFzZS9jb3B5IGludmVyc2lvbiBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmdW5jdGlvblxuXHRcdFx0XHRcdHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChjb3B5X1tpXSlcblx0XHRcdFx0fSlcblx0XHRcdFx0aW52ZXJzZVBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IFJFUExBQ0UsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQoYmFzZV9baV0pXG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJvY2VzcyBhZGRlZCBpbmRpY2VzLlxuXHRcdGZvciAobGV0IGkgPSBiYXNlXy5sZW5ndGg7IGkgPCBjb3B5Xy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRwYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRvcDogQURELFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHQvLyBOZWVkIHRvIG1heWJlIGNsb25lIGl0LCBhcyBpdCBjYW4gaW4gZmFjdCBiZSB0aGUgb3JpZ2luYWwgdmFsdWVcblx0XHRcdFx0Ly8gZHVlIHRvIHRoZSBiYXNlL2NvcHkgaW52ZXJzaW9uIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZ1bmN0aW9uXG5cdFx0XHRcdHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChjb3B5X1tpXSlcblx0XHRcdH0pXG5cdFx0fVxuXHRcdGlmIChiYXNlXy5sZW5ndGggPCBjb3B5Xy5sZW5ndGgpIHtcblx0XHRcdGludmVyc2VQYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdFx0cGF0aDogYmFzZVBhdGguY29uY2F0KFtcImxlbmd0aFwiXSksXG5cdFx0XHRcdHZhbHVlOiBiYXNlXy5sZW5ndGhcblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBpcyB1c2VkIGZvciBib3RoIE1hcCBvYmplY3RzIGFuZCBub3JtYWwgb2JqZWN0cy5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVQYXRjaGVzRnJvbUFzc2lnbmVkKFxuXHRcdHN0YXRlOiBNYXBTdGF0ZSB8IEVTNU9iamVjdFN0YXRlIHwgUHJveHlPYmplY3RTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KSB7XG5cdFx0Y29uc3Qge2Jhc2VfLCBjb3B5X30gPSBzdGF0ZVxuXHRcdGVhY2goc3RhdGUuYXNzaWduZWRfISwgKGtleSwgYXNzaWduZWRWYWx1ZSkgPT4ge1xuXHRcdFx0Y29uc3Qgb3JpZ1ZhbHVlID0gZ2V0KGJhc2VfLCBrZXkpXG5cdFx0XHRjb25zdCB2YWx1ZSA9IGdldChjb3B5XyEsIGtleSlcblx0XHRcdGNvbnN0IG9wID0gIWFzc2lnbmVkVmFsdWUgPyBSRU1PVkUgOiBoYXMoYmFzZV8sIGtleSkgPyBSRVBMQUNFIDogQUREXG5cdFx0XHRpZiAob3JpZ1ZhbHVlID09PSB2YWx1ZSAmJiBvcCA9PT0gUkVQTEFDRSkgcmV0dXJuXG5cdFx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KGtleSBhcyBhbnkpXG5cdFx0XHRwYXRjaGVzLnB1c2gob3AgPT09IFJFTU9WRSA/IHtvcCwgcGF0aH0gOiB7b3AsIHBhdGgsIHZhbHVlfSlcblx0XHRcdGludmVyc2VQYXRjaGVzLnB1c2goXG5cdFx0XHRcdG9wID09PSBBRERcblx0XHRcdFx0XHQ/IHtvcDogUkVNT1ZFLCBwYXRofVxuXHRcdFx0XHRcdDogb3AgPT09IFJFTU9WRVxuXHRcdFx0XHRcdD8ge29wOiBBREQsIHBhdGgsIHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChvcmlnVmFsdWUpfVxuXHRcdFx0XHRcdDoge29wOiBSRVBMQUNFLCBwYXRoLCB2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQob3JpZ1ZhbHVlKX1cblx0XHRcdClcblx0XHR9KVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVTZXRQYXRjaGVzKFxuXHRcdHN0YXRlOiBTZXRTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KSB7XG5cdFx0bGV0IHtiYXNlXywgY29weV99ID0gc3RhdGVcblxuXHRcdGxldCBpID0gMFxuXHRcdGJhc2VfLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcblx0XHRcdGlmICghY29weV8hLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRcdHBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IFJFTU9WRSxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdHZhbHVlXG5cdFx0XHRcdH0pXG5cdFx0XHRcdGludmVyc2VQYXRjaGVzLnVuc2hpZnQoe1xuXHRcdFx0XHRcdG9wOiBBREQsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0fVxuXHRcdFx0aSsrXG5cdFx0fSlcblx0XHRpID0gMFxuXHRcdGNvcHlfIS5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XG5cdFx0XHRpZiAoIWJhc2VfLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRcdHBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IEFERCxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdHZhbHVlXG5cdFx0XHRcdH0pXG5cdFx0XHRcdGludmVyc2VQYXRjaGVzLnVuc2hpZnQoe1xuXHRcdFx0XHRcdG9wOiBSRU1PVkUsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0fVxuXHRcdFx0aSsrXG5cdFx0fSlcblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhcblx0XHRiYXNlVmFsdWU6IGFueSxcblx0XHRyZXBsYWNlbWVudDogYW55LFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KTogdm9pZCB7XG5cdFx0cGF0Y2hlcy5wdXNoKHtcblx0XHRcdG9wOiBSRVBMQUNFLFxuXHRcdFx0cGF0aDogW10sXG5cdFx0XHR2YWx1ZTogcmVwbGFjZW1lbnQgPT09IE5PVEhJTkcgPyB1bmRlZmluZWQgOiByZXBsYWNlbWVudFxuXHRcdH0pXG5cdFx0aW52ZXJzZVBhdGNoZXMucHVzaCh7XG5cdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdHBhdGg6IFtdLFxuXHRcdFx0dmFsdWU6IGJhc2VWYWx1ZVxuXHRcdH0pXG5cdH1cblxuXHRmdW5jdGlvbiBhcHBseVBhdGNoZXNfPFQ+KGRyYWZ0OiBULCBwYXRjaGVzOiBQYXRjaFtdKTogVCB7XG5cdFx0cGF0Y2hlcy5mb3JFYWNoKHBhdGNoID0+IHtcblx0XHRcdGNvbnN0IHtwYXRoLCBvcH0gPSBwYXRjaFxuXG5cdFx0XHRsZXQgYmFzZTogYW55ID0gZHJhZnRcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgcGFyZW50VHlwZSA9IGdldEFyY2h0eXBlKGJhc2UpXG5cdFx0XHRcdGxldCBwID0gcGF0aFtpXVxuXHRcdFx0XHRpZiAodHlwZW9mIHAgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHAgIT09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRwID0gXCJcIiArIHBcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNlZSAjNzM4LCBhdm9pZCBwcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocGFyZW50VHlwZSA9PT0gQXJjaHR5cGUuT2JqZWN0IHx8IHBhcmVudFR5cGUgPT09IEFyY2h0eXBlLkFycmF5KSAmJlxuXHRcdFx0XHRcdChwID09PSBcIl9fcHJvdG9fX1wiIHx8IHAgPT09IFwiY29uc3RydWN0b3JcIilcblx0XHRcdFx0KVxuXHRcdFx0XHRcdGRpZSgyNClcblx0XHRcdFx0aWYgKHR5cGVvZiBiYXNlID09PSBcImZ1bmN0aW9uXCIgJiYgcCA9PT0gXCJwcm90b3R5cGVcIikgZGllKDI0KVxuXHRcdFx0XHRiYXNlID0gZ2V0KGJhc2UsIHApXG5cdFx0XHRcdGlmICh0eXBlb2YgYmFzZSAhPT0gXCJvYmplY3RcIikgZGllKDE1LCBwYXRoLmpvaW4oXCIvXCIpKVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB0eXBlID0gZ2V0QXJjaHR5cGUoYmFzZSlcblx0XHRcdGNvbnN0IHZhbHVlID0gZGVlcENsb25lUGF0Y2hWYWx1ZShwYXRjaC52YWx1ZSkgLy8gdXNlZCB0byBjbG9uZSBwYXRjaCB0byBlbnN1cmUgb3JpZ2luYWwgcGF0Y2ggaXMgbm90IG1vZGlmaWVkLCBzZWUgIzQxMVxuXHRcdFx0Y29uc3Qga2V5ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdXG5cdFx0XHRzd2l0Y2ggKG9wKSB7XG5cdFx0XHRcdGNhc2UgUkVQTEFDRTpcblx0XHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuTWFwOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYmFzZS5zZXQoa2V5LCB2YWx1ZSlcblx0XHRcdFx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLlNldDpcblx0XHRcdFx0XHRcdFx0ZGllKDE2KVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0Ly8gaWYgdmFsdWUgaXMgYW4gb2JqZWN0LCB0aGVuIGl0J3MgYXNzaWduZWQgYnkgcmVmZXJlbmNlXG5cdFx0XHRcdFx0XHRcdC8vIGluIHRoZSBmb2xsb3dpbmcgYWRkIG9yIHJlbW92ZSBvcHMsIHRoZSB2YWx1ZSBmaWVsZCBpbnNpZGUgdGhlIHBhdGNoIHdpbGwgYWxzbyBiZSBtb2RpZnllZFxuXHRcdFx0XHRcdFx0XHQvLyBzbyB3ZSB1c2UgdmFsdWUgZnJvbSB0aGUgY2xvbmVkIHBhdGNoXG5cdFx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChiYXNlW2tleV0gPSB2YWx1ZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgQUREOlxuXHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5BcnJheTpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleSA9PT0gXCItXCJcblx0XHRcdFx0XHRcdFx0XHQ/IGJhc2UucHVzaCh2YWx1ZSlcblx0XHRcdFx0XHRcdFx0XHQ6IGJhc2Uuc3BsaWNlKGtleSBhcyBhbnksIDAsIHZhbHVlKVxuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5NYXA6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLnNldChrZXksIHZhbHVlKVxuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5TZXQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLmFkZCh2YWx1ZSlcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoYmFzZVtrZXldID0gdmFsdWUpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIFJFTU9WRTpcblx0XHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuQXJyYXk6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLnNwbGljZShrZXkgYXMgYW55LCAxKVxuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5NYXA6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLmRlbGV0ZShrZXkpXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLlNldDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2UuZGVsZXRlKHBhdGNoLnZhbHVlKVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGRlbGV0ZSBiYXNlW2tleV1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0ZGllKDE3LCBvcClcblx0XHRcdH1cblx0XHR9KVxuXG5cdFx0cmV0dXJuIGRyYWZ0XG5cdH1cblxuXHQvLyBvcHRpbWl6ZTogdGhpcyBpcyBxdWl0ZSBhIHBlcmZvcm1hbmNlIGhpdCwgY2FuIHdlIGRldGVjdCBpbnRlbGxpZ2VudGx5IHdoZW4gaXQgaXMgbmVlZGVkP1xuXHQvLyBFLmcuIGF1dG8tZHJhZnQgd2hlbiBuZXcgb2JqZWN0cyBmcm9tIG91dHNpZGUgYXJlIGFzc2lnbmVkIGFuZCBtb2RpZmllZD9cblx0Ly8gKFNlZSBmYWlsaW5nIHRlc3Qgd2hlbiBkZWVwQ2xvbmUganVzdCByZXR1cm5zIG9iailcblx0ZnVuY3Rpb24gZGVlcENsb25lUGF0Y2hWYWx1ZTxUPihvYmo6IFQpOiBUXG5cdGZ1bmN0aW9uIGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqOiBhbnkpIHtcblx0XHRpZiAoIWlzRHJhZnRhYmxlKG9iaikpIHJldHVybiBvYmpcblx0XHRpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLm1hcChkZWVwQ2xvbmVQYXRjaFZhbHVlKVxuXHRcdGlmIChpc01hcChvYmopKVxuXHRcdFx0cmV0dXJuIG5ldyBNYXAoXG5cdFx0XHRcdEFycmF5LmZyb20ob2JqLmVudHJpZXMoKSkubWFwKChbaywgdl0pID0+IFtrLCBkZWVwQ2xvbmVQYXRjaFZhbHVlKHYpXSlcblx0XHRcdClcblx0XHRpZiAoaXNTZXQob2JqKSkgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbShvYmopLm1hcChkZWVwQ2xvbmVQYXRjaFZhbHVlKSlcblx0XHRjb25zdCBjbG9uZWQgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopKVxuXHRcdGZvciAoY29uc3Qga2V5IGluIG9iaikgY2xvbmVkW2tleV0gPSBkZWVwQ2xvbmVQYXRjaFZhbHVlKG9ialtrZXldKVxuXHRcdGlmIChoYXMob2JqLCBpbW1lcmFibGUpKSBjbG9uZWRbaW1tZXJhYmxlXSA9IG9ialtpbW1lcmFibGVdXG5cdFx0cmV0dXJuIGNsb25lZFxuXHR9XG5cblx0ZnVuY3Rpb24gY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQ8VD4ob2JqOiBUKTogVCB7XG5cdFx0aWYgKGlzRHJhZnQob2JqKSkge1xuXHRcdFx0cmV0dXJuIGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqKVxuXHRcdH0gZWxzZSByZXR1cm4gb2JqXG5cdH1cblxuXHRsb2FkUGx1Z2luKFwiUGF0Y2hlc1wiLCB7XG5cdFx0YXBwbHlQYXRjaGVzXyxcblx0XHRnZW5lcmF0ZVBhdGNoZXNfLFxuXHRcdGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzX1xuXHR9KVxufVxuIiwgIi8vIHR5cGVzIG9ubHkhXG5pbXBvcnQge1xuXHRJbW1lclN0YXRlLFxuXHRBbnlNYXAsXG5cdEFueVNldCxcblx0TWFwU3RhdGUsXG5cdFNldFN0YXRlLFxuXHREUkFGVF9TVEFURSxcblx0Z2V0Q3VycmVudFNjb3BlLFxuXHRsYXRlc3QsXG5cdGl0ZXJhdG9yU3ltYm9sLFxuXHRpc0RyYWZ0YWJsZSxcblx0Y3JlYXRlUHJveHksXG5cdGxvYWRQbHVnaW4sXG5cdG1hcmtDaGFuZ2VkLFxuXHRQcm94eVR5cGUsXG5cdGRpZSxcblx0ZWFjaFxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlTWFwU2V0KCkge1xuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHR2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQ6IGFueSwgYjogYW55KTogYW55IHtcblx0XHRleHRlbmRTdGF0aWNzID1cblx0XHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuXHRcdFx0KHtfX3Byb3RvX186IFtdfSBpbnN0YW5jZW9mIEFycmF5ICYmXG5cdFx0XHRcdGZ1bmN0aW9uKGQsIGIpIHtcblx0XHRcdFx0XHRkLl9fcHJvdG9fXyA9IGJcblx0XHRcdFx0fSkgfHxcblx0XHRcdGZ1bmN0aW9uKGQsIGIpIHtcblx0XHRcdFx0Zm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF1cblx0XHRcdH1cblx0XHRyZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKVxuXHR9XG5cblx0Ly8gVWdseSBoYWNrIHRvIHJlc29sdmUgIzUwMiBhbmQgaW5oZXJpdCBidWlsdCBpbiBNYXAgLyBTZXRcblx0ZnVuY3Rpb24gX19leHRlbmRzKGQ6IGFueSwgYjogYW55KTogYW55IHtcblx0XHRleHRlbmRTdGF0aWNzKGQsIGIpXG5cdFx0ZnVuY3Rpb24gX18odGhpczogYW55KTogYW55IHtcblx0XHRcdHRoaXMuY29uc3RydWN0b3IgPSBkXG5cdFx0fVxuXHRcdGQucHJvdG90eXBlID1cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdCgoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUpLCBuZXcgX18oKSlcblx0fVxuXG5cdGNvbnN0IERyYWZ0TWFwID0gKGZ1bmN0aW9uKF9zdXBlcikge1xuXHRcdF9fZXh0ZW5kcyhEcmFmdE1hcCwgX3N1cGVyKVxuXHRcdC8vIENyZWF0ZSBjbGFzcyBtYW51YWxseSwgY2F1c2UgIzUwMlxuXHRcdGZ1bmN0aW9uIERyYWZ0TWFwKHRoaXM6IGFueSwgdGFyZ2V0OiBBbnlNYXAsIHBhcmVudD86IEltbWVyU3RhdGUpOiBhbnkge1xuXHRcdFx0dGhpc1tEUkFGVF9TVEFURV0gPSB7XG5cdFx0XHRcdHR5cGVfOiBQcm94eVR5cGUuTWFwLFxuXHRcdFx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0XHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpISxcblx0XHRcdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHRcdFx0ZmluYWxpemVkXzogZmFsc2UsXG5cdFx0XHRcdGNvcHlfOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFzc2lnbmVkXzogdW5kZWZpbmVkLFxuXHRcdFx0XHRiYXNlXzogdGFyZ2V0LFxuXHRcdFx0XHRkcmFmdF86IHRoaXMgYXMgYW55LFxuXHRcdFx0XHRpc01hbnVhbF86IGZhbHNlLFxuXHRcdFx0XHRyZXZva2VkXzogZmFsc2Vcblx0XHRcdH0gYXMgTWFwU3RhdGVcblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXHRcdGNvbnN0IHAgPSBEcmFmdE1hcC5wcm90b3R5cGVcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCBcInNpemVcIiwge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuc2l6ZVxuXHRcdFx0fVxuXHRcdFx0Ly8gZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHQvLyBjb25maWd1cmFibGU6IHRydWVcblx0XHR9KVxuXG5cdFx0cC5oYXMgPSBmdW5jdGlvbihrZXk6IGFueSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuaGFzKGtleSlcblx0XHR9XG5cblx0XHRwLnNldCA9IGZ1bmN0aW9uKGtleTogYW55LCB2YWx1ZTogYW55KSB7XG5cdFx0XHRjb25zdCBzdGF0ZTogTWFwU3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0aWYgKCFsYXRlc3Qoc3RhdGUpLmhhcyhrZXkpIHx8IGxhdGVzdChzdGF0ZSkuZ2V0KGtleSkgIT09IHZhbHVlKSB7XG5cdFx0XHRcdHByZXBhcmVNYXBDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5zZXQoa2V5LCB0cnVlKVxuXHRcdFx0XHRzdGF0ZS5jb3B5XyEuc2V0KGtleSwgdmFsdWUpXG5cdFx0XHRcdHN0YXRlLmFzc2lnbmVkXyEuc2V0KGtleSwgdHJ1ZSlcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXG5cdFx0cC5kZWxldGUgPSBmdW5jdGlvbihrZXk6IGFueSk6IGJvb2xlYW4ge1xuXHRcdFx0aWYgKCF0aGlzLmhhcyhrZXkpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzdGF0ZTogTWFwU3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0cHJlcGFyZU1hcENvcHkoc3RhdGUpXG5cdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdGlmIChzdGF0ZS5iYXNlXy5oYXMoa2V5KSkge1xuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF8hLnNldChrZXksIGZhbHNlKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5kZWxldGUoa2V5KVxuXHRcdFx0fVxuXHRcdFx0c3RhdGUuY29weV8hLmRlbGV0ZShrZXkpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblxuXHRcdHAuY2xlYXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAobGF0ZXN0KHN0YXRlKS5zaXplKSB7XG5cdFx0XHRcdHByZXBhcmVNYXBDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfID0gbmV3IE1hcCgpXG5cdFx0XHRcdGVhY2goc3RhdGUuYmFzZV8sIGtleSA9PiB7XG5cdFx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5zZXQoa2V5LCBmYWxzZSlcblx0XHRcdFx0fSlcblx0XHRcdFx0c3RhdGUuY29weV8hLmNsZWFyKClcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwLmZvckVhY2ggPSBmdW5jdGlvbihcblx0XHRcdGNiOiAodmFsdWU6IGFueSwga2V5OiBhbnksIHNlbGY6IGFueSkgPT4gdm9pZCxcblx0XHRcdHRoaXNBcmc/OiBhbnlcblx0XHQpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRsYXRlc3Qoc3RhdGUpLmZvckVhY2goKF92YWx1ZTogYW55LCBrZXk6IGFueSwgX21hcDogYW55KSA9PiB7XG5cdFx0XHRcdGNiLmNhbGwodGhpc0FyZywgdGhpcy5nZXQoa2V5KSwga2V5LCB0aGlzKVxuXHRcdFx0fSlcblx0XHR9XG5cblx0XHRwLmdldCA9IGZ1bmN0aW9uKGtleTogYW55KTogYW55IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRjb25zdCB2YWx1ZSA9IGxhdGVzdChzdGF0ZSkuZ2V0KGtleSlcblx0XHRcdGlmIChzdGF0ZS5maW5hbGl6ZWRfIHx8ICFpc0RyYWZ0YWJsZSh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWUgIT09IHN0YXRlLmJhc2VfLmdldChrZXkpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSAvLyBlaXRoZXIgYWxyZWFkeSBkcmFmdGVkIG9yIHJlYXNzaWduZWRcblx0XHRcdH1cblx0XHRcdC8vIGRlc3BpdGUgd2hhdCBpdCBsb29rcywgdGhpcyBjcmVhdGVzIGEgZHJhZnQgb25seSBvbmNlLCBzZWUgYWJvdmUgY29uZGl0aW9uXG5cdFx0XHRjb25zdCBkcmFmdCA9IGNyZWF0ZVByb3h5KHN0YXRlLnNjb3BlXy5pbW1lcl8sIHZhbHVlLCBzdGF0ZSlcblx0XHRcdHByZXBhcmVNYXBDb3B5KHN0YXRlKVxuXHRcdFx0c3RhdGUuY29weV8hLnNldChrZXksIGRyYWZ0KVxuXHRcdFx0cmV0dXJuIGRyYWZ0XG5cdFx0fVxuXG5cdFx0cC5rZXlzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdHJldHVybiBsYXRlc3QodGhpc1tEUkFGVF9TVEFURV0pLmtleXMoKVxuXHRcdH1cblxuXHRcdHAudmFsdWVzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5rZXlzKClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFtpdGVyYXRvclN5bWJvbF06ICgpID0+IHRoaXMudmFsdWVzKCksXG5cdFx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCByID0gaXRlcmF0b3IubmV4dCgpXG5cdFx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0XHRcdFx0XHRpZiAoci5kb25lKSByZXR1cm4gclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoci52YWx1ZSlcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0ZG9uZTogZmFsc2UsXG5cdFx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBhcyBhbnlcblx0XHR9XG5cblx0XHRwLmVudHJpZXMgPSBmdW5jdGlvbigpOiBJdGVyYWJsZUl0ZXJhdG9yPFthbnksIGFueV0+IHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5rZXlzKClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFtpdGVyYXRvclN5bWJvbF06ICgpID0+IHRoaXMuZW50cmllcygpLFxuXHRcdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgciA9IGl0ZXJhdG9yLm5leHQoKVxuXHRcdFx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdFx0XHRcdFx0aWYgKHIuZG9uZSkgcmV0dXJuIHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KHIudmFsdWUpXG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGRvbmU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0dmFsdWU6IFtyLnZhbHVlLCB2YWx1ZV1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gYXMgYW55XG5cdFx0fVxuXG5cdFx0cFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmVudHJpZXMoKVxuXHRcdH1cblxuXHRcdHJldHVybiBEcmFmdE1hcFxuXHR9KShNYXApXG5cblx0ZnVuY3Rpb24gcHJveHlNYXBfPFQgZXh0ZW5kcyBBbnlNYXA+KHRhcmdldDogVCwgcGFyZW50PzogSW1tZXJTdGF0ZSk6IFQge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRyZXR1cm4gbmV3IERyYWZ0TWFwKHRhcmdldCwgcGFyZW50KVxuXHR9XG5cblx0ZnVuY3Rpb24gcHJlcGFyZU1hcENvcHkoc3RhdGU6IE1hcFN0YXRlKSB7XG5cdFx0aWYgKCFzdGF0ZS5jb3B5Xykge1xuXHRcdFx0c3RhdGUuYXNzaWduZWRfID0gbmV3IE1hcCgpXG5cdFx0XHRzdGF0ZS5jb3B5XyA9IG5ldyBNYXAoc3RhdGUuYmFzZV8pXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgRHJhZnRTZXQgPSAoZnVuY3Rpb24oX3N1cGVyKSB7XG5cdFx0X19leHRlbmRzKERyYWZ0U2V0LCBfc3VwZXIpXG5cdFx0Ly8gQ3JlYXRlIGNsYXNzIG1hbnVhbGx5LCBjYXVzZSAjNTAyXG5cdFx0ZnVuY3Rpb24gRHJhZnRTZXQodGhpczogYW55LCB0YXJnZXQ6IEFueVNldCwgcGFyZW50PzogSW1tZXJTdGF0ZSkge1xuXHRcdFx0dGhpc1tEUkFGVF9TVEFURV0gPSB7XG5cdFx0XHRcdHR5cGVfOiBQcm94eVR5cGUuU2V0LFxuXHRcdFx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0XHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpISxcblx0XHRcdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHRcdFx0ZmluYWxpemVkXzogZmFsc2UsXG5cdFx0XHRcdGNvcHlfOiB1bmRlZmluZWQsXG5cdFx0XHRcdGJhc2VfOiB0YXJnZXQsXG5cdFx0XHRcdGRyYWZ0XzogdGhpcyxcblx0XHRcdFx0ZHJhZnRzXzogbmV3IE1hcCgpLFxuXHRcdFx0XHRyZXZva2VkXzogZmFsc2UsXG5cdFx0XHRcdGlzTWFudWFsXzogZmFsc2Vcblx0XHRcdH0gYXMgU2V0U3RhdGVcblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXHRcdGNvbnN0IHAgPSBEcmFmdFNldC5wcm90b3R5cGVcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCBcInNpemVcIiwge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuc2l6ZVxuXHRcdFx0fVxuXHRcdFx0Ly8gZW51bWVyYWJsZTogdHJ1ZSxcblx0XHR9KVxuXG5cdFx0cC5oYXMgPSBmdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdFx0XHRjb25zdCBzdGF0ZTogU2V0U3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0Ly8gYml0IG9mIHRyaWNrZXJ5IGhlcmUsIHRvIGJlIGFibGUgdG8gcmVjb2duaXplIGJvdGggdGhlIHZhbHVlLCBhbmQgdGhlIGRyYWZ0IG9mIGl0cyB2YWx1ZVxuXHRcdFx0aWYgKCFzdGF0ZS5jb3B5Xykge1xuXHRcdFx0XHRyZXR1cm4gc3RhdGUuYmFzZV8uaGFzKHZhbHVlKVxuXHRcdFx0fVxuXHRcdFx0aWYgKHN0YXRlLmNvcHlfLmhhcyh2YWx1ZSkpIHJldHVybiB0cnVlXG5cdFx0XHRpZiAoc3RhdGUuZHJhZnRzXy5oYXModmFsdWUpICYmIHN0YXRlLmNvcHlfLmhhcyhzdGF0ZS5kcmFmdHNfLmdldCh2YWx1ZSkpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0fVxuXG5cdFx0cC5hZGQgPSBmdW5jdGlvbih2YWx1ZTogYW55KTogYW55IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRwcmVwYXJlU2V0Q29weShzdGF0ZSlcblx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdHN0YXRlLmNvcHlfIS5hZGQodmFsdWUpXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpc1xuXHRcdH1cblxuXHRcdHAuZGVsZXRlID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7XG5cdFx0XHRpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc3RhdGU6IFNldFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdHByZXBhcmVTZXRDb3B5KHN0YXRlKVxuXHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRzdGF0ZS5jb3B5XyEuZGVsZXRlKHZhbHVlKSB8fFxuXHRcdFx0XHQoc3RhdGUuZHJhZnRzXy5oYXModmFsdWUpXG5cdFx0XHRcdFx0PyBzdGF0ZS5jb3B5XyEuZGVsZXRlKHN0YXRlLmRyYWZ0c18uZ2V0KHZhbHVlKSlcblx0XHRcdFx0XHQ6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZhbHNlKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdHAuY2xlYXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAobGF0ZXN0KHN0YXRlKS5zaXplKSB7XG5cdFx0XHRcdHByZXBhcmVTZXRDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuY29weV8hLmNsZWFyKClcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwLnZhbHVlcyA9IGZ1bmN0aW9uKCk6IEl0ZXJhYmxlSXRlcmF0b3I8YW55PiB7XG5cdFx0XHRjb25zdCBzdGF0ZTogU2V0U3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0cHJlcGFyZVNldENvcHkoc3RhdGUpXG5cdFx0XHRyZXR1cm4gc3RhdGUuY29weV8hLnZhbHVlcygpXG5cdFx0fVxuXG5cdFx0cC5lbnRyaWVzID0gZnVuY3Rpb24gZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFthbnksIGFueV0+IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRwcmVwYXJlU2V0Q29weShzdGF0ZSlcblx0XHRcdHJldHVybiBzdGF0ZS5jb3B5XyEuZW50cmllcygpXG5cdFx0fVxuXG5cdFx0cC5rZXlzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdHJldHVybiB0aGlzLnZhbHVlcygpXG5cdFx0fVxuXG5cdFx0cFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLnZhbHVlcygpXG5cdFx0fVxuXG5cdFx0cC5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChjYjogYW55LCB0aGlzQXJnPzogYW55KSB7XG5cdFx0XHRjb25zdCBpdGVyYXRvciA9IHRoaXMudmFsdWVzKClcblx0XHRcdGxldCByZXN1bHQgPSBpdGVyYXRvci5uZXh0KClcblx0XHRcdHdoaWxlICghcmVzdWx0LmRvbmUpIHtcblx0XHRcdFx0Y2IuY2FsbCh0aGlzQXJnLCByZXN1bHQudmFsdWUsIHJlc3VsdC52YWx1ZSwgdGhpcylcblx0XHRcdFx0cmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIERyYWZ0U2V0XG5cdH0pKFNldClcblxuXHRmdW5jdGlvbiBwcm94eVNldF88VCBleHRlbmRzIEFueVNldD4odGFyZ2V0OiBULCBwYXJlbnQ/OiBJbW1lclN0YXRlKTogVCB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHJldHVybiBuZXcgRHJhZnRTZXQodGFyZ2V0LCBwYXJlbnQpXG5cdH1cblxuXHRmdW5jdGlvbiBwcmVwYXJlU2V0Q29weShzdGF0ZTogU2V0U3RhdGUpIHtcblx0XHRpZiAoIXN0YXRlLmNvcHlfKSB7XG5cdFx0XHQvLyBjcmVhdGUgZHJhZnRzIGZvciBhbGwgZW50cmllcyB0byBwcmVzZXJ2ZSBpbnNlcnRpb24gb3JkZXJcblx0XHRcdHN0YXRlLmNvcHlfID0gbmV3IFNldCgpXG5cdFx0XHRzdGF0ZS5iYXNlXy5mb3JFYWNoKHZhbHVlID0+IHtcblx0XHRcdFx0aWYgKGlzRHJhZnRhYmxlKHZhbHVlKSkge1xuXHRcdFx0XHRcdGNvbnN0IGRyYWZ0ID0gY3JlYXRlUHJveHkoc3RhdGUuc2NvcGVfLmltbWVyXywgdmFsdWUsIHN0YXRlKVxuXHRcdFx0XHRcdHN0YXRlLmRyYWZ0c18uc2V0KHZhbHVlLCBkcmFmdClcblx0XHRcdFx0XHRzdGF0ZS5jb3B5XyEuYWRkKGRyYWZ0KVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXRlLmNvcHlfIS5hZGQodmFsdWUpXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYXNzZXJ0VW5yZXZva2VkKHN0YXRlOiBhbnkgLypFUzVTdGF0ZSB8IE1hcFN0YXRlIHwgU2V0U3RhdGUqLykge1xuXHRcdGlmIChzdGF0ZS5yZXZva2VkXykgZGllKDMsIEpTT04uc3RyaW5naWZ5KGxhdGVzdChzdGF0ZSkpKVxuXHR9XG5cblx0bG9hZFBsdWdpbihcIk1hcFNldFwiLCB7cHJveHlNYXBfLCBwcm94eVNldF99KVxufVxuIiwgImltcG9ydCB7ZW5hYmxlRVM1fSBmcm9tIFwiLi9lczVcIlxuaW1wb3J0IHtlbmFibGVNYXBTZXR9IGZyb20gXCIuL21hcHNldFwiXG5pbXBvcnQge2VuYWJsZVBhdGNoZXN9IGZyb20gXCIuL3BhdGNoZXNcIlxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlQWxsUGx1Z2lucygpIHtcblx0ZW5hYmxlRVM1KClcblx0ZW5hYmxlTWFwU2V0KClcblx0ZW5hYmxlUGF0Y2hlcygpXG59XG4iLCAiaW1wb3J0IHtcblx0SVByb2R1Y2UsXG5cdElQcm9kdWNlV2l0aFBhdGNoZXMsXG5cdEltbWVyLFxuXHREcmFmdCxcblx0SW1tdXRhYmxlXG59IGZyb20gXCIuL2ludGVybmFsXCJcblxuZXhwb3J0IHtcblx0RHJhZnQsXG5cdEltbXV0YWJsZSxcblx0UGF0Y2gsXG5cdFBhdGNoTGlzdGVuZXIsXG5cdG9yaWdpbmFsLFxuXHRjdXJyZW50LFxuXHRpc0RyYWZ0LFxuXHRpc0RyYWZ0YWJsZSxcblx0Tk9USElORyBhcyBub3RoaW5nLFxuXHREUkFGVEFCTEUgYXMgaW1tZXJhYmxlLFxuXHRmcmVlemVcbn0gZnJvbSBcIi4vaW50ZXJuYWxcIlxuXG5jb25zdCBpbW1lciA9IG5ldyBJbW1lcigpXG5cbi8qKlxuICogVGhlIGBwcm9kdWNlYCBmdW5jdGlvbiB0YWtlcyBhIHZhbHVlIGFuZCBhIFwicmVjaXBlIGZ1bmN0aW9uXCIgKHdob3NlXG4gKiByZXR1cm4gdmFsdWUgb2Z0ZW4gZGVwZW5kcyBvbiB0aGUgYmFzZSBzdGF0ZSkuIFRoZSByZWNpcGUgZnVuY3Rpb24gaXNcbiAqIGZyZWUgdG8gbXV0YXRlIGl0cyBmaXJzdCBhcmd1bWVudCBob3dldmVyIGl0IHdhbnRzLiBBbGwgbXV0YXRpb25zIGFyZVxuICogb25seSBldmVyIGFwcGxpZWQgdG8gYSBfX2NvcHlfXyBvZiB0aGUgYmFzZSBzdGF0ZS5cbiAqXG4gKiBQYXNzIG9ubHkgYSBmdW5jdGlvbiB0byBjcmVhdGUgYSBcImN1cnJpZWQgcHJvZHVjZXJcIiB3aGljaCByZWxpZXZlcyB5b3VcbiAqIGZyb20gcGFzc2luZyB0aGUgcmVjaXBlIGZ1bmN0aW9uIGV2ZXJ5IHRpbWUuXG4gKlxuICogT25seSBwbGFpbiBvYmplY3RzIGFuZCBhcnJheXMgYXJlIG1hZGUgbXV0YWJsZS4gQWxsIG90aGVyIG9iamVjdHMgYXJlXG4gKiBjb25zaWRlcmVkIHVuY29weWFibGUuXG4gKlxuICogTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBfX2JvdW5kX18gdG8gaXRzIGBJbW1lcmAgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHthbnl9IGJhc2UgLSB0aGUgaW5pdGlhbCBzdGF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvZHVjZXIgLSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgcHJveHkgb2YgdGhlIGJhc2Ugc3RhdGUgYXMgZmlyc3QgYXJndW1lbnQgYW5kIHdoaWNoIGNhbiBiZSBmcmVlbHkgbW9kaWZpZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhdGNoTGlzdGVuZXIgLSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggYWxsIHRoZSBwYXRjaGVzIHByb2R1Y2VkIGhlcmVcbiAqIEByZXR1cm5zIHthbnl9IGEgbmV3IHN0YXRlLCBvciB0aGUgaW5pdGlhbCBzdGF0ZSBpZiBub3RoaW5nIHdhcyBtb2RpZmllZFxuICovXG5leHBvcnQgY29uc3QgcHJvZHVjZTogSVByb2R1Y2UgPSBpbW1lci5wcm9kdWNlXG5leHBvcnQgZGVmYXVsdCBwcm9kdWNlXG5cbi8qKlxuICogTGlrZSBgcHJvZHVjZWAsIGJ1dCBgcHJvZHVjZVdpdGhQYXRjaGVzYCBhbHdheXMgcmV0dXJucyBhIHR1cGxlXG4gKiBbbmV4dFN0YXRlLCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlc10gKGluc3RlYWQgb2YganVzdCB0aGUgbmV4dCBzdGF0ZSlcbiAqL1xuZXhwb3J0IGNvbnN0IHByb2R1Y2VXaXRoUGF0Y2hlczogSVByb2R1Y2VXaXRoUGF0Y2hlcyA9IGltbWVyLnByb2R1Y2VXaXRoUGF0Y2hlcy5iaW5kKFxuXHRpbW1lclxuKVxuXG4vKipcbiAqIFBhc3MgdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IGZyZWV6ZSBhbGwgY29waWVzIGNyZWF0ZWQgYnkgSW1tZXIuXG4gKlxuICogQWx3YXlzIGZyZWV6ZSBieSBkZWZhdWx0LCBldmVuIGluIHByb2R1Y3Rpb24gbW9kZVxuICovXG5leHBvcnQgY29uc3Qgc2V0QXV0b0ZyZWV6ZSA9IGltbWVyLnNldEF1dG9GcmVlemUuYmluZChpbW1lcilcblxuLyoqXG4gKiBQYXNzIHRydWUgdG8gdXNlIHRoZSBFUzIwMTUgYFByb3h5YCBjbGFzcyB3aGVuIGNyZWF0aW5nIGRyYWZ0cywgd2hpY2ggaXNcbiAqIGFsd2F5cyBmYXN0ZXIgdGhhbiB1c2luZyBFUzUgcHJveGllcy5cbiAqXG4gKiBCeSBkZWZhdWx0LCBmZWF0dXJlIGRldGVjdGlvbiBpcyB1c2VkLCBzbyBjYWxsaW5nIHRoaXMgaXMgcmFyZWx5IG5lY2Vzc2FyeS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldFVzZVByb3hpZXMgPSBpbW1lci5zZXRVc2VQcm94aWVzLmJpbmQoaW1tZXIpXG5cbi8qKlxuICogQXBwbHkgYW4gYXJyYXkgb2YgSW1tZXIgcGF0Y2hlcyB0byB0aGUgZmlyc3QgYXJndW1lbnQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhIHByb2R1Y2VyLCB3aGljaCBtZWFucyBjb3B5LW9uLXdyaXRlIGlzIGluIGVmZmVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5UGF0Y2hlcyA9IGltbWVyLmFwcGx5UGF0Y2hlcy5iaW5kKGltbWVyKVxuXG4vKipcbiAqIENyZWF0ZSBhbiBJbW1lciBkcmFmdCBmcm9tIHRoZSBnaXZlbiBiYXNlIHN0YXRlLCB3aGljaCBtYXkgYmUgYSBkcmFmdCBpdHNlbGYuXG4gKiBUaGUgZHJhZnQgY2FuIGJlIG1vZGlmaWVkIHVudGlsIHlvdSBmaW5hbGl6ZSBpdCB3aXRoIHRoZSBgZmluaXNoRHJhZnRgIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRHJhZnQgPSBpbW1lci5jcmVhdGVEcmFmdC5iaW5kKGltbWVyKVxuXG4vKipcbiAqIEZpbmFsaXplIGFuIEltbWVyIGRyYWZ0IGZyb20gYSBgY3JlYXRlRHJhZnRgIGNhbGwsIHJldHVybmluZyB0aGUgYmFzZSBzdGF0ZVxuICogKGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlKSBvciBhIG1vZGlmaWVkIGNvcHkuIFRoZSBkcmFmdCBtdXN0ICpub3QqIGJlXG4gKiBtdXRhdGVkIGFmdGVyd2FyZHMuXG4gKlxuICogUGFzcyBhIGZ1bmN0aW9uIGFzIHRoZSAybmQgYXJndW1lbnQgdG8gZ2VuZXJhdGUgSW1tZXIgcGF0Y2hlcyBiYXNlZCBvbiB0aGVcbiAqIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBmaW5pc2hEcmFmdCA9IGltbWVyLmZpbmlzaERyYWZ0LmJpbmQoaW1tZXIpXG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBhIG5vLW9wLCBidXQgY2FuIGJlIHVzZWQgdG8gY2FzdCBhbiBpbW11dGFibGUgdHlwZVxuICogdG8gYW4gZHJhZnQgdHlwZSBhbmQgbWFrZSBUeXBlU2NyaXB0IGhhcHB5XG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXN0RHJhZnQ8VD4odmFsdWU6IFQpOiBEcmFmdDxUPiB7XG5cdHJldHVybiB2YWx1ZSBhcyBhbnlcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGEgbm8tb3AsIGJ1dCBjYW4gYmUgdXNlZCB0byBjYXN0IGEgbXV0YWJsZSB0eXBlXG4gKiB0byBhbiBpbW11dGFibGUgdHlwZSBhbmQgbWFrZSBUeXBlU2NyaXB0IGhhcHB5XG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhc3RJbW11dGFibGU8VD4odmFsdWU6IFQpOiBJbW11dGFibGU8VD4ge1xuXHRyZXR1cm4gdmFsdWUgYXMgYW55XG59XG5cbmV4cG9ydCB7SW1tZXJ9XG5cbmV4cG9ydCB7ZW5hYmxlRVM1fSBmcm9tIFwiLi9wbHVnaW5zL2VzNVwiXG5leHBvcnQge2VuYWJsZVBhdGNoZXN9IGZyb20gXCIuL3BsdWdpbnMvcGF0Y2hlc1wiXG5leHBvcnQge2VuYWJsZU1hcFNldH0gZnJvbSBcIi4vcGx1Z2lucy9tYXBzZXRcIlxuZXhwb3J0IHtlbmFibGVBbGxQbHVnaW5zfSBmcm9tIFwiLi9wbHVnaW5zL2FsbFwiXG4iLCAiLy8gU2hvdWxkIGJlIG5vIGltcG9ydHMgaGVyZSFcblxuLy8gU29tZSB0aGluZ3MgdGhhdCBzaG91bGQgYmUgZXZhbHVhdGVkIGJlZm9yZSBhbGwgZWxzZS4uLlxuXG4vLyBXZSBvbmx5IHdhbnQgdG8ga25vdyBpZiBub24tcG9seWZpbGxlZCBzeW1ib2xzIGFyZSBhdmFpbGFibGVcbmNvbnN0IGhhc1N5bWJvbCA9XG5cdHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIFN5bWJvbChcInhcIikgPT09IFwic3ltYm9sXCJcbmV4cG9ydCBjb25zdCBoYXNNYXAgPSB0eXBlb2YgTWFwICE9PSBcInVuZGVmaW5lZFwiXG5leHBvcnQgY29uc3QgaGFzU2V0ID0gdHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIlxuZXhwb3J0IGNvbnN0IGhhc1Byb3hpZXMgPVxuXHR0eXBlb2YgUHJveHkgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0dHlwZW9mIFByb3h5LnJldm9jYWJsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIlxuXG4vKipcbiAqIFRoZSBzZW50aW5lbCB2YWx1ZSByZXR1cm5lZCBieSBwcm9kdWNlcnMgdG8gcmVwbGFjZSB0aGUgZHJhZnQgd2l0aCB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBOT1RISU5HOiBOb3RoaW5nID0gaGFzU3ltYm9sXG5cdD8gU3ltYm9sLmZvcihcImltbWVyLW5vdGhpbmdcIilcblx0OiAoe1tcImltbWVyLW5vdGhpbmdcIl06IHRydWV9IGFzIGFueSlcblxuLyoqXG4gKiBUbyBsZXQgSW1tZXIgdHJlYXQgeW91ciBjbGFzcyBpbnN0YW5jZXMgYXMgcGxhaW4gaW1tdXRhYmxlIG9iamVjdHNcbiAqIChhbGJlaXQgd2l0aCBhIGN1c3RvbSBwcm90b3R5cGUpLCB5b3UgbXVzdCBkZWZpbmUgZWl0aGVyIGFuIGluc3RhbmNlIHByb3BlcnR5XG4gKiBvciBhIHN0YXRpYyBwcm9wZXJ0eSBvbiBlYWNoIG9mIHlvdXIgY3VzdG9tIGNsYXNzZXMuXG4gKlxuICogT3RoZXJ3aXNlLCB5b3VyIGNsYXNzIGluc3RhbmNlIHdpbGwgbmV2ZXIgYmUgZHJhZnRlZCwgd2hpY2ggbWVhbnMgaXQgd29uJ3QgYmVcbiAqIHNhZmUgdG8gbXV0YXRlIGluIGEgcHJvZHVjZSBjYWxsYmFjay5cbiAqL1xuZXhwb3J0IGNvbnN0IERSQUZUQUJMRTogdW5pcXVlIHN5bWJvbCA9IGhhc1N5bWJvbFxuXHQ/IFN5bWJvbC5mb3IoXCJpbW1lci1kcmFmdGFibGVcIilcblx0OiAoXCJfXyRpbW1lcl9kcmFmdGFibGVcIiBhcyBhbnkpXG5cbmV4cG9ydCBjb25zdCBEUkFGVF9TVEFURTogdW5pcXVlIHN5bWJvbCA9IGhhc1N5bWJvbFxuXHQ/IFN5bWJvbC5mb3IoXCJpbW1lci1zdGF0ZVwiKVxuXHQ6IChcIl9fJGltbWVyX3N0YXRlXCIgYXMgYW55KVxuXG4vLyBFdmVuIGEgcG9seWZpbGxlZCBTeW1ib2wgbWlnaHQgcHJvdmlkZSBTeW1ib2wuaXRlcmF0b3JcbmV4cG9ydCBjb25zdCBpdGVyYXRvclN5bWJvbDogdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9XG5cdCh0eXBlb2YgU3ltYm9sICE9IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yKSB8fCAoXCJAQGl0ZXJhdG9yXCIgYXMgYW55KVxuXG4vKiogVXNlIGEgY2xhc3MgdHlwZSBmb3IgYG5vdGhpbmdgIHNvIGl0cyB0eXBlIGlzIHVuaXF1ZSAqL1xuZXhwb3J0IGNsYXNzIE5vdGhpbmcge1xuXHQvLyBUaGlzIGxldHMgdXMgZG8gYEV4Y2x1ZGU8VCwgTm90aGluZz5gXG5cdC8vIEB0cy1pZ25vcmVcblx0cHJpdmF0ZSBfITogdW5pcXVlIHN5bWJvbFxufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IFN0cmluZyhpKTtcbn0iLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi9kZWZpbmVQcm9wZXJ0eS5qc1wiO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7XG4gIHZhciB0ID0gT2JqZWN0LmtleXMoZSk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTtcbiAgICB9KSksIHQucHVzaC5hcHBseSh0LCBvKTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKGUpIHtcbiAgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHtcbiAgICB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307XG4gICAgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBlO1xufSIsICJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyJztcblxuLyoqXG4gKiBBZGFwdGVkIGZyb20gUmVhY3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL21hc3Rlci9wYWNrYWdlcy9zaGFyZWQvZm9ybWF0UHJvZEVycm9yTWVzc2FnZS5qc1xuICpcbiAqIERvIG5vdCByZXF1aXJlIHRoaXMgbW9kdWxlIGRpcmVjdGx5ISBVc2Ugbm9ybWFsIHRocm93IGVycm9yIGNhbGxzLiBUaGVzZSBtZXNzYWdlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggZXJyb3IgY29kZXNcbiAqIGR1cmluZyBidWlsZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoY29kZSkge1xuICByZXR1cm4gXCJNaW5pZmllZCBSZWR1eCBlcnJvciAjXCIgKyBjb2RlICsgXCI7IHZpc2l0IGh0dHBzOi8vcmVkdXguanMub3JnL0Vycm9ycz9jb2RlPVwiICsgY29kZSArIFwiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIFwiICsgJ3VzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMuICc7XG59XG5cbi8vIElubGluZWQgdmVyc2lvbiBvZiB0aGUgYHN5bWJvbC1vYnNlcnZhYmxlYCBwb2x5ZmlsbFxudmFyICQkb2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8ICdAQG9ic2VydmFibGUnO1xufSkoKTtcblxuLyoqXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQgYnkgUmVkdXguXG4gKiBGb3IgYW55IHVua25vd24gYWN0aW9ucywgeW91IG11c3QgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlLlxuICogSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXG4gKi9cbnZhciByYW5kb21TdHJpbmcgPSBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykuc3BsaXQoJycpLmpvaW4oJy4nKTtcbn07XG5cbnZhciBBY3Rpb25UeXBlcyA9IHtcbiAgSU5JVDogXCJAQHJlZHV4L0lOSVRcIiArIHJhbmRvbVN0cmluZygpLFxuICBSRVBMQUNFOiBcIkBAcmVkdXgvUkVQTEFDRVwiICsgcmFuZG9tU3RyaW5nKCksXG4gIFBST0JFX1VOS05PV05fQUNUSU9OOiBmdW5jdGlvbiBQUk9CRV9VTktOT1dOX0FDVElPTigpIHtcbiAgICByZXR1cm4gXCJAQHJlZHV4L1BST0JFX1VOS05PV05fQUNUSU9OXCIgKyByYW5kb21TdHJpbmcoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gb2JqIFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcmd1bWVudCBhcHBlYXJzIHRvIGJlIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIHZhciBwcm90byA9IG9iajtcblxuICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKSAhPT0gbnVsbCkge1xuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gcHJvdG87XG59XG5cbi8vIElubGluZWQgLyBzaG9ydGVuZWQgdmVyc2lvbiBvZiBga2luZE9mYCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2tpbmQtb2ZcbmZ1bmN0aW9uIG1pbmlLaW5kT2YodmFsKSB7XG4gIGlmICh2YWwgPT09IHZvaWQgMCkgcmV0dXJuICd1bmRlZmluZWQnO1xuICBpZiAodmFsID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiAnYXJyYXknO1xuICBpZiAoaXNEYXRlKHZhbCkpIHJldHVybiAnZGF0ZSc7XG4gIGlmIChpc0Vycm9yKHZhbCkpIHJldHVybiAnZXJyb3InO1xuICB2YXIgY29uc3RydWN0b3JOYW1lID0gY3Rvck5hbWUodmFsKTtcblxuICBzd2l0Y2ggKGNvbnN0cnVjdG9yTmFtZSkge1xuICAgIGNhc2UgJ1N5bWJvbCc6XG4gICAgY2FzZSAnUHJvbWlzZSc6XG4gICAgY2FzZSAnV2Vha01hcCc6XG4gICAgY2FzZSAnV2Vha1NldCc6XG4gICAgY2FzZSAnTWFwJzpcbiAgICBjYXNlICdTZXQnOlxuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yTmFtZTtcbiAgfSAvLyBvdGhlclxuXG5cbiAgcmV0dXJuIHR5cGUuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csICcnKTtcbn1cblxuZnVuY3Rpb24gY3Rvck5hbWUodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nID8gdmFsLmNvbnN0cnVjdG9yLm5hbWUgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yKHZhbCkge1xuICByZXR1cm4gdmFsIGluc3RhbmNlb2YgRXJyb3IgfHwgdHlwZW9mIHZhbC5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiB2YWwuY29uc3RydWN0b3IgJiYgdHlwZW9mIHZhbC5jb25zdHJ1Y3Rvci5zdGFja1RyYWNlTGltaXQgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHR5cGVvZiB2YWwudG9EYXRlU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWwuZ2V0RGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsLnNldERhdGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGtpbmRPZih2YWwpIHtcbiAgdmFyIHR5cGVPZlZhbCA9IHR5cGVvZiB2YWw7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB0eXBlT2ZWYWwgPSBtaW5pS2luZE9mKHZhbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZU9mVmFsO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKlxuICogKipXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGBjb25maWd1cmVTdG9yZWAgbWV0aG9kXG4gKiBvZiB0aGUgYEByZWR1eGpzL3Rvb2xraXRgIHBhY2thZ2UqKiwgd2hpY2ggcmVwbGFjZXMgYGNyZWF0ZVN0b3JlYC5cbiAqXG4gKiBSZWR1eCBUb29sa2l0IGlzIG91ciByZWNvbW1lbmRlZCBhcHByb2FjaCBmb3Igd3JpdGluZyBSZWR1eCBsb2dpYyB0b2RheSxcbiAqIGluY2x1ZGluZyBzdG9yZSBzZXR1cCwgcmVkdWNlcnMsIGRhdGEgZmV0Y2hpbmcsIGFuZCBtb3JlLlxuICpcbiAqICoqRm9yIG1vcmUgZGV0YWlscywgcGxlYXNlIHJlYWQgdGhpcyBSZWR1eCBkb2NzIHBhZ2U6KipcbiAqICoqaHR0cHM6Ly9yZWR1eC5qcy5vcmcvaW50cm9kdWN0aW9uL3doeS1ydGstaXMtcmVkdXgtdG9kYXkqKlxuICpcbiAqIGBjb25maWd1cmVTdG9yZWAgZnJvbSBSZWR1eCBUb29sa2l0IGlzIGFuIGltcHJvdmVkIHZlcnNpb24gb2YgYGNyZWF0ZVN0b3JlYCB0aGF0XG4gKiBzaW1wbGlmaWVzIHNldHVwIGFuZCBoZWxwcyBhdm9pZCBjb21tb24gYnVncy5cbiAqXG4gKiBZb3Ugc2hvdWxkIG5vdCBiZSB1c2luZyB0aGUgYHJlZHV4YCBjb3JlIHBhY2thZ2UgYnkgaXRzZWxmIHRvZGF5LCBleGNlcHQgZm9yIGxlYXJuaW5nIHB1cnBvc2VzLlxuICogVGhlIGBjcmVhdGVTdG9yZWAgbWV0aG9kIGZyb20gdGhlIGNvcmUgYHJlZHV4YCBwYWNrYWdlIHdpbGwgbm90IGJlIHJlbW92ZWQsIGJ1dCB3ZSBlbmNvdXJhZ2VcbiAqIGFsbCB1c2VycyB0byBtaWdyYXRlIHRvIHVzaW5nIFJlZHV4IFRvb2xraXQgZm9yIGFsbCBSZWR1eCBjb2RlLlxuICpcbiAqIElmIHlvdSB3YW50IHRvIHVzZSBgY3JlYXRlU3RvcmVgIHdpdGhvdXQgdGhpcyB2aXN1YWwgZGVwcmVjYXRpb24gd2FybmluZywgdXNlXG4gKiB0aGUgYGxlZ2FjeV9jcmVhdGVTdG9yZWAgaW1wb3J0IGluc3RlYWQ6XG4gKlxuICogYGltcG9ydCB7IGxlZ2FjeV9jcmVhdGVTdG9yZSBhcyBjcmVhdGVTdG9yZX0gZnJvbSAncmVkdXgnYFxuICpcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcbiAgdmFyIF9yZWYyO1xuXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBlbmhhbmNlciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgYXJndW1lbnRzWzNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMCkgOiAnSXQgbG9va3MgbGlrZSB5b3UgYXJlIHBhc3Npbmcgc2V2ZXJhbCBzdG9yZSBlbmhhbmNlcnMgdG8gJyArICdjcmVhdGVTdG9yZSgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIEluc3RlYWQsIGNvbXBvc2UgdGhlbSAnICsgJ3RvZ2V0aGVyIHRvIGEgc2luZ2xlIGZ1bmN0aW9uLiBTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjY3JlYXRpbmctYS1zdG9yZS13aXRoLWVuaGFuY2VycyBmb3IgYW4gZXhhbXBsZS4nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAndW5kZWZpbmVkJykge1xuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XG4gICAgcHJlbG9hZGVkU3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGVuaGFuY2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEpIDogXCJFeHBlY3RlZCB0aGUgZW5oYW5jZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihlbmhhbmNlcikgKyBcIidcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyKSA6IFwiRXhwZWN0ZWQgdGhlIHJvb3QgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKHJlZHVjZXIpICsgXCInXCIpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgdmFyIGN1cnJlbnRTdGF0ZSA9IHByZWxvYWRlZFN0YXRlO1xuICB2YXIgY3VycmVudExpc3RlbmVycyA9IFtdO1xuICB2YXIgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XG4gIHZhciBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGlzIG1ha2VzIGEgc2hhbGxvdyBjb3B5IG9mIGN1cnJlbnRMaXN0ZW5lcnMgc28gd2UgY2FuIHVzZVxuICAgKiBuZXh0TGlzdGVuZXJzIGFzIGEgdGVtcG9yYXJ5IGxpc3Qgd2hpbGUgZGlzcGF0Y2hpbmcuXG4gICAqXG4gICAqIFRoaXMgcHJldmVudHMgYW55IGJ1Z3MgYXJvdW5kIGNvbnN1bWVycyBjYWxsaW5nXG4gICAqIHN1YnNjcmliZS91bnN1YnNjcmliZSBpbiB0aGUgbWlkZGxlIG9mIGEgZGlzcGF0Y2guXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzLnNsaWNlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgc3RhdGUgdHJlZSBtYW5hZ2VkIGJ5IHRoZSBzdG9yZS5cbiAgICpcbiAgICogQHJldHVybnMge2FueX0gVGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFN0YXRlKCkge1xuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzKSA6ICdZb3UgbWF5IG5vdCBjYWxsIHN0b3JlLmdldFN0YXRlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiAnICsgJ1RoZSByZWR1Y2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIHRoZSBzdGF0ZSBhcyBhbiBhcmd1bWVudC4gJyArICdQYXNzIGl0IGRvd24gZnJvbSB0aGUgdG9wIHJlZHVjZXIgaW5zdGVhZCBvZiByZWFkaW5nIGl0IGZyb20gdGhlIHN0b3JlLicpO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxuICAgKiBhbmQgc29tZSBwYXJ0IG9mIHRoZSBzdGF0ZSB0cmVlIG1heSBwb3RlbnRpYWxseSBoYXZlIGNoYW5nZWQuIFlvdSBtYXkgdGhlblxuICAgKiBjYWxsIGBnZXRTdGF0ZSgpYCB0byByZWFkIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgaW5zaWRlIHRoZSBjYWxsYmFjay5cbiAgICpcbiAgICogWW91IG1heSBjYWxsIGBkaXNwYXRjaCgpYCBmcm9tIGEgY2hhbmdlIGxpc3RlbmVyLCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAgICogY2F2ZWF0czpcbiAgICpcbiAgICogMS4gVGhlIHN1YnNjcmlwdGlvbnMgYXJlIHNuYXBzaG90dGVkIGp1c3QgYmVmb3JlIGV2ZXJ5IGBkaXNwYXRjaCgpYCBjYWxsLlxuICAgKiBJZiB5b3Ugc3Vic2NyaWJlIG9yIHVuc3Vic2NyaWJlIHdoaWxlIHRoZSBsaXN0ZW5lcnMgYXJlIGJlaW5nIGludm9rZWQsIHRoaXNcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXG4gICAqIEhvd2V2ZXIsIHRoZSBuZXh0IGBkaXNwYXRjaCgpYCBjYWxsLCB3aGV0aGVyIG5lc3RlZCBvciBub3QsIHdpbGwgdXNlIGEgbW9yZVxuICAgKiByZWNlbnQgc25hcHNob3Qgb2YgdGhlIHN1YnNjcmlwdGlvbiBsaXN0LlxuICAgKlxuICAgKiAyLiBUaGUgbGlzdGVuZXIgc2hvdWxkIG5vdCBleHBlY3QgdG8gc2VlIGFsbCBzdGF0ZSBjaGFuZ2VzLCBhcyB0aGUgc3RhdGVcbiAgICogbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIGEgbmVzdGVkIGBkaXNwYXRjaCgpYCBiZWZvcmVcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcbiAgICogcmVnaXN0ZXJlZCBiZWZvcmUgdGhlIGBkaXNwYXRjaCgpYCBzdGFydGVkIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGxhdGVzdFxuICAgKiBzdGF0ZSBieSB0aGUgdGltZSBpdCBleGl0cy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIG9uIGV2ZXJ5IGRpc3BhdGNoLlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoaXMgY2hhbmdlIGxpc3RlbmVyLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQpIDogXCJFeHBlY3RlZCB0aGUgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihsaXN0ZW5lcikgKyBcIidcIik7XG4gICAgfVxuXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDUpIDogJ1lvdSBtYXkgbm90IGNhbGwgc3RvcmUuc3Vic2NyaWJlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiAnICsgJ0lmIHlvdSB3b3VsZCBsaWtlIHRvIGJlIG5vdGlmaWVkIGFmdGVyIHRoZSBzdG9yZSBoYXMgYmVlbiB1cGRhdGVkLCBzdWJzY3JpYmUgZnJvbSBhICcgKyAnY29tcG9uZW50IGFuZCBpbnZva2Ugc3RvcmUuZ2V0U3RhdGUoKSBpbiB0aGUgY2FsbGJhY2sgdG8gYWNjZXNzIHRoZSBsYXRlc3Qgc3RhdGUuICcgKyAnU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2FwaS9zdG9yZSNzdWJzY3JpYmVsaXN0ZW5lciBmb3IgbW9yZSBkZXRhaWxzLicpO1xuICAgIH1cblxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xuICAgIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKTtcbiAgICBuZXh0TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICAgIGlmICghaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNikgOiAnWW91IG1heSBub3QgdW5zdWJzY3JpYmUgZnJvbSBhIHN0b3JlIGxpc3RlbmVyIHdoaWxlIHRoZSByZWR1Y2VyIGlzIGV4ZWN1dGluZy4gJyArICdTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvYXBpL3N0b3JlI3N1YnNjcmliZWxpc3RlbmVyIGZvciBtb3JlIGRldGFpbHMuJyk7XG4gICAgICB9XG5cbiAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgIG5leHRMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIGN1cnJlbnRMaXN0ZW5lcnMgPSBudWxsO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cbiAgICpcbiAgICogVGhlIGByZWR1Y2VyYCBmdW5jdGlvbiwgdXNlZCB0byBjcmVhdGUgdGhlIHN0b3JlLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZVxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXG4gICAqIGJlIGNvbnNpZGVyZWQgdGhlICoqbmV4dCoqIHN0YXRlIG9mIHRoZSB0cmVlLCBhbmQgdGhlIGNoYW5nZSBsaXN0ZW5lcnNcbiAgICogd2lsbCBiZSBub3RpZmllZC5cbiAgICpcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBwbGFpbiBvYmplY3QgYWN0aW9ucy4gSWYgeW91IHdhbnQgdG9cbiAgICogZGlzcGF0Y2ggYSBQcm9taXNlLCBhbiBPYnNlcnZhYmxlLCBhIHRodW5rLCBvciBzb21ldGhpbmcgZWxzZSwgeW91IG5lZWQgdG9cbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXG4gICAqIGV4YW1wbGUsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGByZWR1eC10aHVua2AgcGFja2FnZS4gRXZlbiB0aGVcbiAgICogbWlkZGxld2FyZSB3aWxsIGV2ZW50dWFsbHkgZGlzcGF0Y2ggcGxhaW4gb2JqZWN0IGFjdGlvbnMgdXNpbmcgdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gQSBwbGFpbiBvYmplY3QgcmVwcmVzZW50aW5nIFx1MjAxQ3doYXQgY2hhbmdlZFx1MjAxRC4gSXQgaXNcbiAgICogYSBnb29kIGlkZWEgdG8ga2VlcCBhY3Rpb25zIHNlcmlhbGl6YWJsZSBzbyB5b3UgY2FuIHJlY29yZCBhbmQgcmVwbGF5IHVzZXJcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcbiAgICogYSBgdHlwZWAgcHJvcGVydHkgd2hpY2ggbWF5IG5vdCBiZSBgdW5kZWZpbmVkYC4gSXQgaXMgYSBnb29kIGlkZWEgdG8gdXNlXG4gICAqIHN0cmluZyBjb25zdGFudHMgZm9yIGFjdGlvbiB0eXBlcy5cbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH0gRm9yIGNvbnZlbmllbmNlLCB0aGUgc2FtZSBhY3Rpb24gb2JqZWN0IHlvdSBkaXNwYXRjaGVkLlxuICAgKlxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXG4gICAqIHJldHVybiBzb21ldGhpbmcgZWxzZSAoZm9yIGV4YW1wbGUsIGEgUHJvbWlzZSB5b3UgY2FuIGF3YWl0KS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNykgOiBcIkFjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiBJbnN0ZWFkLCB0aGUgYWN0dWFsIHR5cGUgd2FzOiAnXCIgKyBraW5kT2YoYWN0aW9uKSArIFwiJy4gWW91IG1heSBuZWVkIHRvIGFkZCBtaWRkbGV3YXJlIHRvIHlvdXIgc3RvcmUgc2V0dXAgdG8gaGFuZGxlIGRpc3BhdGNoaW5nIG90aGVyIHZhbHVlcywgc3VjaCBhcyAncmVkdXgtdGh1bmsnIHRvIGhhbmRsZSBkaXNwYXRjaGluZyBmdW5jdGlvbnMuIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNC1zdG9yZSNtaWRkbGV3YXJlIGFuZCBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNi1hc3luYy1sb2dpYyN1c2luZy10aGUtcmVkdXgtdGh1bmstbWlkZGxld2FyZSBmb3IgZXhhbXBsZXMuXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYWN0aW9uLnR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg4KSA6ICdBY3Rpb25zIG1heSBub3QgaGF2ZSBhbiB1bmRlZmluZWQgXCJ0eXBlXCIgcHJvcGVydHkuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGFuIGFjdGlvbiB0eXBlIHN0cmluZyBjb25zdGFudC4nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoOSkgOiAnUmVkdWNlcnMgbWF5IG5vdCBkaXNwYXRjaCBhY3Rpb25zLicpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzID0gbmV4dExpc3RlbmVycztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb247XG4gIH1cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBZb3UgbWlnaHQgbmVlZCB0aGlzIGlmIHlvdXIgYXBwIGltcGxlbWVudHMgY29kZSBzcGxpdHRpbmcgYW5kIHlvdSB3YW50IHRvXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcbiAgICogaW1wbGVtZW50IGEgaG90IHJlbG9hZGluZyBtZWNoYW5pc20gZm9yIFJlZHV4LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG5cblxuICBmdW5jdGlvbiByZXBsYWNlUmVkdWNlcihuZXh0UmVkdWNlcikge1xuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEwKSA6IFwiRXhwZWN0ZWQgdGhlIG5leHRSZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnXCIgKyBraW5kT2YobmV4dFJlZHVjZXIpKTtcbiAgICB9XG5cbiAgICBjdXJyZW50UmVkdWNlciA9IG5leHRSZWR1Y2VyOyAvLyBUaGlzIGFjdGlvbiBoYXMgYSBzaW1pbGlhciBlZmZlY3QgdG8gQWN0aW9uVHlwZXMuSU5JVC5cbiAgICAvLyBBbnkgcmVkdWNlcnMgdGhhdCBleGlzdGVkIGluIGJvdGggdGhlIG5ldyBhbmQgb2xkIHJvb3RSZWR1Y2VyXG4gICAgLy8gd2lsbCByZWNlaXZlIHRoZSBwcmV2aW91cyBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcbiAgICAvLyB0aGUgbmV3IHN0YXRlIHRyZWUgd2l0aCBhbnkgcmVsZXZhbnQgZGF0YSBmcm9tIHRoZSBvbGQgb25lLlxuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuUkVQTEFDRVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBJbnRlcm9wZXJhYmlsaXR5IHBvaW50IGZvciBvYnNlcnZhYmxlL3JlYWN0aXZlIGxpYnJhcmllcy5cbiAgICogQHJldHVybnMge29ic2VydmFibGV9IEEgbWluaW1hbCBvYnNlcnZhYmxlIG9mIHN0YXRlIGNoYW5nZXMuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9ic2VydmFibGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBvYnNlcnZhYmxlKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIG91dGVyU3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgIHJldHVybiBfcmVmID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbWluaW1hbCBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiBtZXRob2QuXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxuICAgICAgICogVGhlIG9ic2VydmVyIG9iamVjdCBzaG91bGQgaGF2ZSBhIGBuZXh0YCBtZXRob2QuXG4gICAgICAgKiBAcmV0dXJucyB7c3Vic2NyaXB0aW9ufSBBbiBvYmplY3Qgd2l0aCBhbiBgdW5zdWJzY3JpYmVgIG1ldGhvZCB0aGF0IGNhblxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxuICAgICAgICogZW1pc3Npb24gb2YgdmFsdWVzIGZyb20gdGhlIG9ic2VydmFibGUuXG4gICAgICAgKi9cbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZXIgIT09ICdvYmplY3QnIHx8IG9ic2VydmVyID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTEpIDogXCJFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKG9ic2VydmVyKSArIFwiJ1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9ic2VydmVTdGF0ZSgpIHtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChnZXRTdGF0ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlU3RhdGUoKTtcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCBfcmVmWyQkb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBfcmVmO1xuICB9IC8vIFdoZW4gYSBzdG9yZSBpcyBjcmVhdGVkLCBhbiBcIklOSVRcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XG4gIC8vIHJlZHVjZXIgcmV0dXJucyB0aGVpciBpbml0aWFsIHN0YXRlLiBUaGlzIGVmZmVjdGl2ZWx5IHBvcHVsYXRlc1xuICAvLyB0aGUgaW5pdGlhbCBzdGF0ZSB0cmVlLlxuXG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLklOSVRcbiAgfSk7XG4gIHJldHVybiBfcmVmMiA9IHtcbiAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXG4gICAgZ2V0U3RhdGU6IGdldFN0YXRlLFxuICAgIHJlcGxhY2VSZWR1Y2VyOiByZXBsYWNlUmVkdWNlclxuICB9LCBfcmVmMlskJG9ic2VydmFibGVdID0gb2JzZXJ2YWJsZSwgX3JlZjI7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBSZWR1eCBzdG9yZSB0aGF0IGhvbGRzIHRoZSBzdGF0ZSB0cmVlLlxuICpcbiAqICoqV2UgcmVjb21tZW5kIHVzaW5nIGBjb25maWd1cmVTdG9yZWAgZnJvbSB0aGVcbiAqIGBAcmVkdXhqcy90b29sa2l0YCBwYWNrYWdlKiosIHdoaWNoIHJlcGxhY2VzIGBjcmVhdGVTdG9yZWA6XG4gKiAqKmh0dHBzOi8vcmVkdXguanMub3JnL2ludHJvZHVjdGlvbi93aHktcnRrLWlzLXJlZHV4LXRvZGF5KipcbiAqXG4gKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cbiAqXG4gKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XG4gKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXG4gKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxuICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXG4gKlxuICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxuICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cbiAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcbiAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUgc3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gKiB0byBlbmhhbmNlIHRoZSBzdG9yZSB3aXRoIHRoaXJkLXBhcnR5IGNhcGFiaWxpdGllcyBzdWNoIGFzIG1pZGRsZXdhcmUsXG4gKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XG4gKiBpcyBgYXBwbHlNaWRkbGV3YXJlKClgLlxuICpcbiAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXG4gKiBhbmQgc3Vic2NyaWJlIHRvIGNoYW5nZXMuXG4gKi9cblxudmFyIGxlZ2FjeV9jcmVhdGVTdG9yZSA9IGNyZWF0ZVN0b3JlO1xuXG4vKipcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG5cblxuICB0cnkge1xuICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgaWYgeW91IGVuYWJsZVxuICAgIC8vIFwiYnJlYWsgb24gYWxsIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIGNvbnNvbGUsXG4gICAgLy8gaXQgd291bGQgcGF1c2UgdGhlIGV4ZWN1dGlvbiBhdCB0aGlzIGxpbmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cbn1cblxuZnVuY3Rpb24gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShpbnB1dFN0YXRlLCByZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpIHtcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xuICB2YXIgYXJndW1lbnROYW1lID0gYWN0aW9uICYmIGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlcy5JTklUID8gJ3ByZWxvYWRlZFN0YXRlIGFyZ3VtZW50IHBhc3NlZCB0byBjcmVhdGVTdG9yZScgOiAncHJldmlvdXMgc3RhdGUgcmVjZWl2ZWQgYnkgdGhlIHJlZHVjZXInO1xuXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ1N0b3JlIGRvZXMgbm90IGhhdmUgYSB2YWxpZCByZWR1Y2VyLiBNYWtlIHN1cmUgdGhlIGFyZ3VtZW50IHBhc3NlZCAnICsgJ3RvIGNvbWJpbmVSZWR1Y2VycyBpcyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSByZWR1Y2Vycy4nO1xuICB9XG5cbiAgaWYgKCFpc1BsYWluT2JqZWN0KGlucHV0U3RhdGUpKSB7XG4gICAgcmV0dXJuIFwiVGhlIFwiICsgYXJndW1lbnROYW1lICsgXCIgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiXCIgKyBraW5kT2YoaW5wdXRTdGF0ZSkgKyBcIlxcXCIuIEV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgXCIgKyAoXCJrZXlzOiBcXFwiXCIgKyByZWR1Y2VyS2V5cy5qb2luKCdcIiwgXCInKSArIFwiXFxcIlwiKTtcbiAgfVxuXG4gIHZhciB1bmV4cGVjdGVkS2V5cyA9IE9iamVjdC5rZXlzKGlucHV0U3RhdGUpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICFyZWR1Y2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICF1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XTtcbiAgfSk7XG4gIHVuZXhwZWN0ZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldID0gdHJ1ZTtcbiAgfSk7XG4gIGlmIChhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVzLlJFUExBQ0UpIHJldHVybjtcblxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBcIlVuZXhwZWN0ZWQgXCIgKyAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMSA/ICdrZXlzJyA6ICdrZXknKSArIFwiIFwiICsgKFwiXFxcIlwiICsgdW5leHBlY3RlZEtleXMuam9pbignXCIsIFwiJykgKyBcIlxcXCIgZm91bmQgaW4gXCIgKyBhcmd1bWVudE5hbWUgKyBcIi4gXCIpICsgXCJFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6IFwiICsgKFwiXFxcIlwiICsgcmVkdWNlcktleXMuam9pbignXCIsIFwiJykgKyBcIlxcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xuICBPYmplY3Qua2V5cyhyZWR1Y2VycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHJlZHVjZXIgPSByZWR1Y2Vyc1trZXldO1xuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwge1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuSU5JVFxuICAgIH0pO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMikgOiBcIlRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHJldHVybmVkIHVuZGVmaW5lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFwiICsgXCJJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgXCIgKyBcImV4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgXCIgKyBcIm5vdCBiZSB1bmRlZmluZWQuIElmIHlvdSBkb24ndCB3YW50IHRvIHNldCBhIHZhbHVlIGZvciB0aGlzIHJlZHVjZXIsIFwiICsgXCJ5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5QUk9CRV9VTktOT1dOX0FDVElPTigpXG4gICAgfSkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMykgOiBcIlRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHJldHVybmVkIHVuZGVmaW5lZCB3aGVuIHByb2JlZCB3aXRoIGEgcmFuZG9tIHR5cGUuIFwiICsgKFwiRG9uJ3QgdHJ5IHRvIGhhbmRsZSAnXCIgKyBBY3Rpb25UeXBlcy5JTklUICsgXCInIG9yIG90aGVyIGFjdGlvbnMgaW4gXFxcInJlZHV4LypcXFwiIFwiKSArIFwibmFtZXNwYWNlLiBUaGV5IGFyZSBjb25zaWRlcmVkIHByaXZhdGUuIEluc3RlYWQsIHlvdSBtdXN0IHJldHVybiB0aGUgXCIgKyBcImN1cnJlbnQgc3RhdGUgZm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHVubGVzcyBpdCBpcyB1bmRlZmluZWQsIFwiICsgXCJpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgXCIgKyBcImFjdGlvbiB0eXBlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgbm90IGJlIHVuZGVmaW5lZCwgYnV0IGNhbiBiZSBudWxsLlwiKTtcbiAgICB9XG4gIH0pO1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBkaWZmZXJlbnQgcmVkdWNlciBmdW5jdGlvbnMsIGludG8gYSBzaW5nbGVcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcbiAqIGludG8gYSBzaW5nbGUgc3RhdGUgb2JqZWN0LCB3aG9zZSBrZXlzIGNvcnJlc3BvbmQgdG8gdGhlIGtleXMgb2YgdGhlIHBhc3NlZFxuICogcmVkdWNlciBmdW5jdGlvbnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlZHVjZXJzIEFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgY29ycmVzcG9uZCB0byBkaWZmZXJlbnRcbiAqIHJlZHVjZXIgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBjb21iaW5lZCBpbnRvIG9uZS4gT25lIGhhbmR5IHdheSB0byBvYnRhaW5cbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXG4gKiB1bmRlZmluZWQgZm9yIGFueSBhY3Rpb24uIEluc3RlYWQsIHRoZXkgc2hvdWxkIHJldHVybiB0aGVpciBpbml0aWFsIHN0YXRlXG4gKiBpZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZW0gd2FzIHVuZGVmaW5lZCwgYW5kIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhbnlcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHJlZHVjZXIgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGV2ZXJ5IHJlZHVjZXIgaW5zaWRlIHRoZVxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxuICovXG5cblxuZnVuY3Rpb24gY29tYmluZVJlZHVjZXJzKHJlZHVjZXJzKSB7XG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZHVjZXJLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2FybmluZyhcIk5vIHJlZHVjZXIgcHJvdmlkZWQgZm9yIGtleSBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaW5hbFJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMoZmluYWxSZWR1Y2Vycyk7IC8vIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgd2FybiBhYm91dCB0aGUgc2FtZVxuICAvLyBrZXlzIG11bHRpcGxlIHRpbWVzLlxuXG4gIHZhciB1bmV4cGVjdGVkS2V5Q2FjaGU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB1bmV4cGVjdGVkS2V5Q2FjaGUgPSB7fTtcbiAgfVxuXG4gIHZhciBzaGFwZUFzc2VydGlvbkVycm9yO1xuXG4gIHRyeSB7XG4gICAgYXNzZXJ0UmVkdWNlclNoYXBlKGZpbmFsUmVkdWNlcnMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2hhcGVBc3NlcnRpb25FcnJvciA9IGU7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gY29tYmluYXRpb24oc3RhdGUsIGFjdGlvbikge1xuICAgIGlmIChzdGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICBzdGF0ZSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChzaGFwZUFzc2VydGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBzaGFwZUFzc2VydGlvbkVycm9yO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XG5cbiAgICAgIGlmICh3YXJuaW5nTWVzc2FnZSkge1xuICAgICAgICB3YXJuaW5nKHdhcm5pbmdNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcbiAgICAgIHZhciByZWR1Y2VyID0gZmluYWxSZWR1Y2Vyc1tfa2V5XTtcbiAgICAgIHZhciBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVbX2tleV07XG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xuXG4gICAgICBpZiAodHlwZW9mIG5leHRTdGF0ZUZvcktleSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE0KSA6IFwiV2hlbiBjYWxsZWQgd2l0aCBhbiBhY3Rpb24gb2YgdHlwZSBcIiArIChhY3Rpb25UeXBlID8gXCJcXFwiXCIgKyBTdHJpbmcoYWN0aW9uVHlwZSkgKyBcIlxcXCJcIiA6ICcodW5rbm93biB0eXBlKScpICsgXCIsIHRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsgX2tleSArIFwiXFxcIiByZXR1cm5lZCB1bmRlZmluZWQuIFwiICsgXCJUbyBpZ25vcmUgYW4gYWN0aW9uLCB5b3UgbXVzdCBleHBsaWNpdGx5IHJldHVybiB0aGUgcHJldmlvdXMgc3RhdGUuIFwiICsgXCJJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC5cIik7XG4gICAgICB9XG5cbiAgICAgIG5leHRTdGF0ZVtfa2V5XSA9IG5leHRTdGF0ZUZvcktleTtcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcbiAgICB9XG5cbiAgICBoYXNDaGFuZ2VkID0gaGFzQ2hhbmdlZCB8fCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aDtcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkaXNwYXRjaChhY3Rpb25DcmVhdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb24gY3JlYXRvcnMsIGludG8gYW4gb2JqZWN0IHdpdGggdGhlXG4gKiBzYW1lIGtleXMsIGJ1dCB3aXRoIGV2ZXJ5IGZ1bmN0aW9uIHdyYXBwZWQgaW50byBhIGBkaXNwYXRjaGAgY2FsbCBzbyB0aGV5XG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcbiAqIGBzdG9yZS5kaXNwYXRjaChNeUFjdGlvbkNyZWF0b3JzLmRvU29tZXRoaW5nKCkpYCB5b3Vyc2VsZiBqdXN0IGZpbmUuXG4gKlxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhbiBhY3Rpb24gY3JlYXRvciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXG4gKiBhbmQgZ2V0IGEgZGlzcGF0Y2ggd3JhcHBlZCBmdW5jdGlvbiBpbiByZXR1cm4uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IGFjdGlvbkNyZWF0b3JzIEFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGFjdGlvblxuICogY3JlYXRvciBmdW5jdGlvbnMuIE9uZSBoYW5keSB3YXkgdG8gb2J0YWluIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzYFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaXNwYXRjaCBUaGUgYGRpc3BhdGNoYCBmdW5jdGlvbiBhdmFpbGFibGUgb24geW91ciBSZWR1eFxuICogc3RvcmUuXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufE9iamVjdH0gVGhlIG9iamVjdCBtaW1pY2tpbmcgdGhlIG9yaWdpbmFsIG9iamVjdCwgYnV0IHdpdGhcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcbiAqIGZ1bmN0aW9uIGFzIGBhY3Rpb25DcmVhdG9yc2AsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHNvIGJlIGEgc2luZ2xlXG4gKiBmdW5jdGlvbi5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyAhPT0gJ29iamVjdCcgfHwgYWN0aW9uQ3JlYXRvcnMgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNikgOiBcImJpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgYnV0IGluc3RlYWQgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihhY3Rpb25DcmVhdG9ycykgKyBcIicuIFwiICsgXCJEaWQgeW91IHdyaXRlIFxcXCJpbXBvcnQgQWN0aW9uQ3JlYXRvcnMgZnJvbVxcXCIgaW5zdGVhZCBvZiBcXFwiaW1wb3J0ICogYXMgQWN0aW9uQ3JlYXRvcnMgZnJvbVxcXCI/XCIpO1xuICB9XG5cbiAgdmFyIGJvdW5kQWN0aW9uQ3JlYXRvcnMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gYWN0aW9uQ3JlYXRvcnMpIHtcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYm91bmRBY3Rpb25DcmVhdG9ycztcbn1cblxuLyoqXG4gKiBDb21wb3NlcyBzaW5nbGUtYXJndW1lbnQgZnVuY3Rpb25zIGZyb20gcmlnaHQgdG8gbGVmdC4gVGhlIHJpZ2h0bW9zdFxuICogZnVuY3Rpb24gY2FuIHRha2UgbXVsdGlwbGUgYXJndW1lbnRzIGFzIGl0IHByb3ZpZGVzIHRoZSBzaWduYXR1cmUgZm9yXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBmdW5jcyBUaGUgZnVuY3Rpb25zIHRvIGNvbXBvc2UuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcbiAqIGZyb20gcmlnaHQgdG8gbGVmdC4gRm9yIGV4YW1wbGUsIGNvbXBvc2UoZiwgZywgaCkgaXMgaWRlbnRpY2FsIHRvIGRvaW5nXG4gKiAoLi4uYXJncykgPT4gZihnKGgoLi4uYXJncykpKS5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZ1bmNzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gIH1cblxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYShiLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0b3JlIGVuaGFuY2VyIHRoYXQgYXBwbGllcyBtaWRkbGV3YXJlIHRvIHRoZSBkaXNwYXRjaCBtZXRob2RcbiAqIG9mIHRoZSBSZWR1eCBzdG9yZS4gVGhpcyBpcyBoYW5keSBmb3IgYSB2YXJpZXR5IG9mIHRhc2tzLCBzdWNoIGFzIGV4cHJlc3NpbmdcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXG4gKlxuICogU2VlIGByZWR1eC10aHVua2AgcGFja2FnZSBhcyBhbiBleGFtcGxlIG9mIHRoZSBSZWR1eCBtaWRkbGV3YXJlLlxuICpcbiAqIEJlY2F1c2UgbWlkZGxld2FyZSBpcyBwb3RlbnRpYWxseSBhc3luY2hyb25vdXMsIHRoaXMgc2hvdWxkIGJlIHRoZSBmaXJzdFxuICogc3RvcmUgZW5oYW5jZXIgaW4gdGhlIGNvbXBvc2l0aW9uIGNoYWluLlxuICpcbiAqIE5vdGUgdGhhdCBlYWNoIG1pZGRsZXdhcmUgd2lsbCBiZSBnaXZlbiB0aGUgYGRpc3BhdGNoYCBhbmQgYGdldFN0YXRlYCBmdW5jdGlvbnNcbiAqIGFzIG5hbWVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBtaWRkbGV3YXJlcyBUaGUgbWlkZGxld2FyZSBjaGFpbiB0byBiZSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHN0b3JlIGVuaGFuY2VyIGFwcGx5aW5nIHRoZSBtaWRkbGV3YXJlLlxuICovXG5cbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RvcmUgPSBjcmVhdGVTdG9yZS5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG5cbiAgICAgIHZhciBfZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTUpIDogJ0Rpc3BhdGNoaW5nIHdoaWxlIGNvbnN0cnVjdGluZyB5b3VyIG1pZGRsZXdhcmUgaXMgbm90IGFsbG93ZWQuICcgKyAnT3RoZXIgbWlkZGxld2FyZSB3b3VsZCBub3QgYmUgYXBwbGllZCB0byB0aGlzIGRpc3BhdGNoLicpO1xuICAgICAgfTtcblxuICAgICAgdmFyIG1pZGRsZXdhcmVBUEkgPSB7XG4gICAgICAgIGdldFN0YXRlOiBzdG9yZS5nZXRTdGF0ZSxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICAgICAgICAgIHJldHVybiBfZGlzcGF0Y2guYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIGNoYWluID0gbWlkZGxld2FyZXMubWFwKGZ1bmN0aW9uIChtaWRkbGV3YXJlKSB7XG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlKG1pZGRsZXdhcmVBUEkpO1xuICAgICAgfSk7XG4gICAgICBfZGlzcGF0Y2ggPSBjb21wb3NlLmFwcGx5KHZvaWQgMCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0b3JlKSwge30sIHtcbiAgICAgICAgZGlzcGF0Y2g6IF9kaXNwYXRjaFxuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgQWN0aW9uVHlwZXMgYXMgX19ET19OT1RfVVNFX19BY3Rpb25UeXBlcywgYXBwbHlNaWRkbGV3YXJlLCBiaW5kQWN0aW9uQ3JlYXRvcnMsIGNvbWJpbmVSZWR1Y2VycywgY29tcG9zZSwgY3JlYXRlU3RvcmUsIGxlZ2FjeV9jcmVhdGVTdG9yZSB9O1xuIiwgIi8qKiBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIHBvdGVudGlhbCBcImV4dHJhIGFyZ3VtZW50XCIgdmFsdWUgdG8gYmUgaW5qZWN0ZWQgbGF0ZXIsXHJcbiAqIGFuZCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSB0aHVuayBtaWRkbGV3YXJlIHRoYXQgdXNlcyB0aGF0IHZhbHVlXHJcbiAqL1xuZnVuY3Rpb24gY3JlYXRlVGh1bmtNaWRkbGV3YXJlKGV4dHJhQXJndW1lbnQpIHtcbiAgLy8gU3RhbmRhcmQgUmVkdXggbWlkZGxld2FyZSBkZWZpbml0aW9uIHBhdHRlcm46XG4gIC8vIFNlZTogaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjd3JpdGluZy1jdXN0b20tbWlkZGxld2FyZVxuICB2YXIgbWlkZGxld2FyZSA9IGZ1bmN0aW9uIG1pZGRsZXdhcmUoX3JlZikge1xuICAgIHZhciBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXG4gICAgICAgIGdldFN0YXRlID0gX3JlZi5nZXRTdGF0ZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIC8vIFRoZSB0aHVuayBtaWRkbGV3YXJlIGxvb2tzIGZvciBhbnkgZnVuY3Rpb25zIHRoYXQgd2VyZSBwYXNzZWQgdG8gYHN0b3JlLmRpc3BhdGNoYC5cbiAgICAgICAgLy8gSWYgdGhpcyBcImFjdGlvblwiIGlzIHJlYWxseSBhIGZ1bmN0aW9uLCBjYWxsIGl0IGFuZCByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBJbmplY3QgdGhlIHN0b3JlJ3MgYGRpc3BhdGNoYCBhbmQgYGdldFN0YXRlYCBtZXRob2RzLCBhcyB3ZWxsIGFzIGFueSBcImV4dHJhIGFyZ1wiXG4gICAgICAgICAgcmV0dXJuIGFjdGlvbihkaXNwYXRjaCwgZ2V0U3RhdGUsIGV4dHJhQXJndW1lbnQpO1xuICAgICAgICB9IC8vIE90aGVyd2lzZSwgcGFzcyB0aGUgYWN0aW9uIGRvd24gdGhlIG1pZGRsZXdhcmUgY2hhaW4gYXMgdXN1YWxcblxuXG4gICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIG1pZGRsZXdhcmU7XG59XG5cbnZhciB0aHVuayA9IGNyZWF0ZVRodW5rTWlkZGxld2FyZSgpOyAvLyBBdHRhY2ggdGhlIGZhY3RvcnkgZnVuY3Rpb24gc28gdXNlcnMgY2FuIGNyZWF0ZSBhIGN1c3RvbWl6ZWQgdmVyc2lvblxuLy8gd2l0aCB3aGF0ZXZlciBcImV4dHJhIGFyZ1wiIHRoZXkgd2FudCB0byBpbmplY3QgaW50byB0aGVpciB0aHVua3NcblxudGh1bmsud2l0aEV4dHJhQXJndW1lbnQgPSBjcmVhdGVUaHVua01pZGRsZXdhcmU7XG5leHBvcnQgZGVmYXVsdCB0aHVuazsiLCAiaW1wb3J0IHsgZW5hYmxlRVM1IH0gZnJvbSAnaW1tZXInXHJcbmV4cG9ydCAqIGZyb20gJ3JlZHV4J1xyXG5leHBvcnQge1xyXG4gIGRlZmF1bHQgYXMgY3JlYXRlTmV4dFN0YXRlLFxyXG4gIGN1cnJlbnQsXHJcbiAgZnJlZXplLFxyXG4gIG9yaWdpbmFsLFxyXG4gIGlzRHJhZnQsXHJcbn0gZnJvbSAnaW1tZXInXHJcbmV4cG9ydCB0eXBlIHsgRHJhZnQgfSBmcm9tICdpbW1lcidcclxuZXhwb3J0IHsgY3JlYXRlU2VsZWN0b3IgfSBmcm9tICdyZXNlbGVjdCdcclxuZXhwb3J0IHR5cGUge1xyXG4gIFNlbGVjdG9yLFxyXG4gIE91dHB1dFBhcmFtZXRyaWNTZWxlY3RvcixcclxuICBPdXRwdXRTZWxlY3RvcixcclxuICBQYXJhbWV0cmljU2VsZWN0b3IsXHJcbn0gZnJvbSAncmVzZWxlY3QnXHJcbmV4cG9ydCB7IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yIH0gZnJvbSAnLi9jcmVhdGVEcmFmdFNhZmVTZWxlY3RvcidcclxuZXhwb3J0IHR5cGUgeyBUaHVua0FjdGlvbiwgVGh1bmtEaXNwYXRjaCwgVGh1bmtNaWRkbGV3YXJlIH0gZnJvbSAncmVkdXgtdGh1bmsnXHJcblxyXG4vLyBXZSBkZWxpYmVyYXRlbHkgZW5hYmxlIEltbWVyJ3MgRVM1IHN1cHBvcnQsIG9uIHRoZSBncm91bmRzIHRoYXRcclxuLy8gd2UgYXNzdW1lIFJUSyB3aWxsIGJlIHVzZWQgd2l0aCBSZWFjdCBOYXRpdmUgYW5kIG90aGVyIFByb3h5LWxlc3NcclxuLy8gZW52aXJvbm1lbnRzLiAgSW4gYWRkaXRpb24sIHRoYXQncyBob3cgSW1tZXIgNCBiZWhhdmVkLCBhbmQgc2luY2VcclxuLy8gd2Ugd2FudCB0byBzaGlwIHRoaXMgaW4gYW4gUlRLIG1pbm9yLCB3ZSBzaG91bGQga2VlcCB0aGUgc2FtZSBiZWhhdmlvci5cclxuZW5hYmxlRVM1KClcclxuXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBjb25maWd1cmVTdG9yZSxcclxufSBmcm9tICcuL2NvbmZpZ3VyZVN0b3JlJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBDb25maWd1cmVFbmhhbmNlcnNDYWxsYmFjayxcclxuICBDb25maWd1cmVTdG9yZU9wdGlvbnMsXHJcbiAgRW5oYW5jZWRTdG9yZSxcclxufSBmcm9tICcuL2NvbmZpZ3VyZVN0b3JlJ1xyXG5leHBvcnQgdHlwZSB7IERldlRvb2xzRW5oYW5jZXJPcHRpb25zIH0gZnJvbSAnLi9kZXZ0b29sc0V4dGVuc2lvbidcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZUFjdGlvbixcclxuICBnZXRUeXBlLFxyXG4gIGlzQWN0aW9uLFxyXG4gIGlzQWN0aW9uQ3JlYXRvcixcclxuICBpc0ZTQSBhcyBpc0ZsdXhTdGFuZGFyZEFjdGlvbixcclxufSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgUGF5bG9hZEFjdGlvbixcclxuICBQYXlsb2FkQWN0aW9uQ3JlYXRvcixcclxuICBBY3Rpb25DcmVhdG9yV2l0aE5vbkluZmVycmFibGVQYXlsb2FkLFxyXG4gIEFjdGlvbkNyZWF0b3JXaXRoT3B0aW9uYWxQYXlsb2FkLFxyXG4gIEFjdGlvbkNyZWF0b3JXaXRoUGF5bG9hZCxcclxuICBBY3Rpb25DcmVhdG9yV2l0aG91dFBheWxvYWQsXHJcbiAgQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQsXHJcbiAgUHJlcGFyZUFjdGlvbixcclxufSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZVJlZHVjZXIsXHJcbn0gZnJvbSAnLi9jcmVhdGVSZWR1Y2VyJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBBY3Rpb25zLFxyXG4gIENhc2VSZWR1Y2VyLFxyXG4gIENhc2VSZWR1Y2VycyxcclxufSBmcm9tICcuL2NyZWF0ZVJlZHVjZXInXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBjcmVhdGVTbGljZSxcclxufSBmcm9tICcuL2NyZWF0ZVNsaWNlJ1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgQ3JlYXRlU2xpY2VPcHRpb25zLFxyXG4gIFNsaWNlLFxyXG4gIENhc2VSZWR1Y2VyQWN0aW9ucyxcclxuICBTbGljZUNhc2VSZWR1Y2VycyxcclxuICBWYWxpZGF0ZVNsaWNlQ2FzZVJlZHVjZXJzLFxyXG4gIENhc2VSZWR1Y2VyV2l0aFByZXBhcmUsXHJcbiAgU2xpY2VBY3Rpb25DcmVhdG9yLFxyXG59IGZyb20gJy4vY3JlYXRlU2xpY2UnXHJcbmV4cG9ydCB0eXBlIHsgQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zIH0gZnJvbSAnLi9hY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHsgY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUgfSBmcm9tICcuL2FjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5leHBvcnQge1xyXG4gIC8vIGpzXHJcbiAgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLFxyXG4gIGlzSW1tdXRhYmxlRGVmYXVsdCxcclxufSBmcm9tICcuL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyxcclxufSBmcm9tICcuL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSxcclxuICBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUsXHJcbiAgaXNQbGFpbixcclxufSBmcm9tICcuL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyxcclxufSBmcm9tICcuL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGdldERlZmF1bHRNaWRkbGV3YXJlLFxyXG59IGZyb20gJy4vZ2V0RGVmYXVsdE1pZGRsZXdhcmUnXHJcbmV4cG9ydCB0eXBlIHtcclxuICAvLyB0eXBlc1xyXG4gIEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyLFxyXG59IGZyb20gJy4vbWFwQnVpbGRlcnMnXHJcbmV4cG9ydCB7IE1pZGRsZXdhcmVBcnJheSwgRW5oYW5jZXJBcnJheSB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5leHBvcnQgeyBjcmVhdGVFbnRpdHlBZGFwdGVyIH0gZnJvbSAnLi9lbnRpdGllcy9jcmVhdGVfYWRhcHRlcidcclxuZXhwb3J0IHR5cGUge1xyXG4gIERpY3Rpb25hcnksXHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5QWRhcHRlcixcclxuICBFbnRpdHlTZWxlY3RvcnMsXHJcbiAgRW50aXR5U3RhdGVBZGFwdGVyLFxyXG4gIEVudGl0eUlkLFxyXG4gIFVwZGF0ZSxcclxuICBJZFNlbGVjdG9yLFxyXG4gIENvbXBhcmVyLFxyXG59IGZyb20gJy4vZW50aXRpZXMvbW9kZWxzJ1xyXG5cclxuZXhwb3J0IHtcclxuICBjcmVhdGVBc3luY1RodW5rLFxyXG4gIHVud3JhcFJlc3VsdCxcclxuICBtaW5pU2VyaWFsaXplRXJyb3IsXHJcbn0gZnJvbSAnLi9jcmVhdGVBc3luY1RodW5rJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgQXN5bmNUaHVuayxcclxuICBBc3luY1RodW5rT3B0aW9ucyxcclxuICBBc3luY1RodW5rQWN0aW9uLFxyXG4gIEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvclJldHVyblZhbHVlLFxyXG4gIEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvcixcclxuICBTZXJpYWxpemVkRXJyb3IsXHJcbn0gZnJvbSAnLi9jcmVhdGVBc3luY1RodW5rJ1xyXG5cclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGlzQWxsT2YsXHJcbiAgaXNBbnlPZixcclxuICBpc1BlbmRpbmcsXHJcbiAgaXNSZWplY3RlZCxcclxuICBpc0Z1bGZpbGxlZCxcclxuICBpc0FzeW5jVGh1bmtBY3Rpb24sXHJcbiAgaXNSZWplY3RlZFdpdGhWYWx1ZSxcclxufSBmcm9tICcuL21hdGNoZXJzJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBBY3Rpb25NYXRjaGluZ0FsbE9mLFxyXG4gIEFjdGlvbk1hdGNoaW5nQW55T2YsXHJcbn0gZnJvbSAnLi9tYXRjaGVycydcclxuXHJcbmV4cG9ydCB7IG5hbm9pZCB9IGZyb20gJy4vbmFub2lkJ1xyXG5cclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnLi9pc1BsYWluT2JqZWN0J1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIExpc3RlbmVyRWZmZWN0LFxyXG4gIExpc3RlbmVyTWlkZGxld2FyZSxcclxuICBMaXN0ZW5lckVmZmVjdEFQSSxcclxuICBMaXN0ZW5lck1pZGRsZXdhcmVJbnN0YW5jZSxcclxuICBDcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmVPcHRpb25zLFxyXG4gIExpc3RlbmVyRXJyb3JIYW5kbGVyLFxyXG4gIFR5cGVkU3RhcnRMaXN0ZW5pbmcsXHJcbiAgVHlwZWRBZGRMaXN0ZW5lcixcclxuICBUeXBlZFN0b3BMaXN0ZW5pbmcsXHJcbiAgVHlwZWRSZW1vdmVMaXN0ZW5lcixcclxuICBVbnN1YnNjcmliZUxpc3RlbmVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXJPcHRpb25zLFxyXG4gIEZvcmtlZFRhc2tFeGVjdXRvcixcclxuICBGb3JrZWRUYXNrLFxyXG4gIEZvcmtlZFRhc2tBUEksXHJcbiAgQXN5bmNUYXNrRXhlY3V0b3IsXHJcbiAgU3luY1Rhc2tFeGVjdXRvcixcclxuICBUYXNrQ2FuY2VsbGVkLFxyXG4gIFRhc2tSZWplY3RlZCxcclxuICBUYXNrUmVzb2x2ZWQsXHJcbiAgVGFza1Jlc3VsdCxcclxufSBmcm9tICcuL2xpc3RlbmVyTWlkZGxld2FyZS9pbmRleCdcclxuZXhwb3J0IHR5cGUgeyBBbnlMaXN0ZW5lclByZWRpY2F0ZSB9IGZyb20gJy4vbGlzdGVuZXJNaWRkbGV3YXJlL3R5cGVzJ1xyXG5cclxuZXhwb3J0IHtcclxuICBjcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgYWRkTGlzdGVuZXIsXHJcbiAgcmVtb3ZlTGlzdGVuZXIsXHJcbiAgY2xlYXJBbGxMaXN0ZW5lcnMsXHJcbiAgVGFza0Fib3J0RXJyb3IsXHJcbn0gZnJvbSAnLi9saXN0ZW5lck1pZGRsZXdhcmUvaW5kZXgnXHJcblxyXG5leHBvcnQge1xyXG4gIFNIT1VMRF9BVVRPQkFUQ0gsXHJcbiAgcHJlcGFyZUF1dG9CYXRjaGVkLFxyXG4gIGF1dG9CYXRjaEVuaGFuY2VyLFxyXG59IGZyb20gJy4vYXV0b0JhdGNoRW5oYW5jZXInXHJcbmV4cG9ydCB0eXBlIHsgQXV0b0JhdGNoT3B0aW9ucyB9IGZyb20gJy4vYXV0b0JhdGNoRW5oYW5jZXInXHJcblxyXG5leHBvcnQgdHlwZSB7IEV4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnMgYXMgVFNIZWxwZXJzRXh0cmFjdERpc3BhdGNoRXh0ZW5zaW9ucyB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG4iLCAiaW1wb3J0IHsgY3VycmVudCwgaXNEcmFmdCB9IGZyb20gJ2ltbWVyJ1xyXG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gJ3Jlc2VsZWN0J1xyXG5cclxuLyoqXHJcbiAqIFwiRHJhZnQtU2FmZVwiIHZlcnNpb24gb2YgYHJlc2VsZWN0YCdzIGBjcmVhdGVTZWxlY3RvcmA6XHJcbiAqIElmIGFuIGBpbW1lcmAtZHJhZnRlZCBvYmplY3QgaXMgcGFzc2VkIGludG8gdGhlIHJlc3VsdGluZyBzZWxlY3RvcidzIGZpcnN0IGFyZ3VtZW50LFxyXG4gKiB0aGUgc2VsZWN0b3Igd2lsbCBhY3Qgb24gdGhlIGN1cnJlbnQgZHJhZnQgdmFsdWUsIGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgY2FjaGVkIHZhbHVlXHJcbiAqIHRoYXQgbWlnaHQgYmUgcG9zc2libHkgb3V0ZGF0ZWQgaWYgdGhlIGRyYWZ0IGhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3I6IHR5cGVvZiBjcmVhdGVTZWxlY3RvciA9IChcclxuICAuLi5hcmdzOiB1bmtub3duW11cclxuKSA9PiB7XHJcbiAgY29uc3Qgc2VsZWN0b3IgPSAoY3JlYXRlU2VsZWN0b3IgYXMgYW55KSguLi5hcmdzKVxyXG4gIGNvbnN0IHdyYXBwZWRTZWxlY3RvciA9ICh2YWx1ZTogdW5rbm93biwgLi4ucmVzdDogdW5rbm93bltdKSA9PlxyXG4gICAgc2VsZWN0b3IoaXNEcmFmdCh2YWx1ZSkgPyBjdXJyZW50KHZhbHVlKSA6IHZhbHVlLCAuLi5yZXN0KVxyXG4gIHJldHVybiB3cmFwcGVkU2VsZWN0b3IgYXMgYW55XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHtcclxuICBSZWR1Y2VyLFxyXG4gIFJlZHVjZXJzTWFwT2JqZWN0LFxyXG4gIE1pZGRsZXdhcmUsXHJcbiAgQWN0aW9uLFxyXG4gIEFueUFjdGlvbixcclxuICBTdG9yZUVuaGFuY2VyLFxyXG4gIFN0b3JlLFxyXG4gIERpc3BhdGNoLFxyXG4gIFByZWxvYWRlZFN0YXRlLFxyXG4gIENvbWJpbmVkU3RhdGUsXHJcbn0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB7IGNyZWF0ZVN0b3JlLCBjb21wb3NlLCBhcHBseU1pZGRsZXdhcmUsIGNvbWJpbmVSZWR1Y2VycyB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7IERldlRvb2xzRW5oYW5jZXJPcHRpb25zIGFzIERldlRvb2xzT3B0aW9ucyB9IGZyb20gJy4vZGV2dG9vbHNFeHRlbnNpb24nXHJcbmltcG9ydCB7IGNvbXBvc2VXaXRoRGV2VG9vbHMgfSBmcm9tICcuL2RldnRvb2xzRXh0ZW5zaW9uJ1xyXG5cclxuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0J1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgVGh1bmtNaWRkbGV3YXJlRm9yLFxyXG4gIEN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSxcclxufSBmcm9tICcuL2dldERlZmF1bHRNaWRkbGV3YXJlJ1xyXG5pbXBvcnQgeyBjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlIH0gZnJvbSAnLi9nZXREZWZhdWx0TWlkZGxld2FyZSdcclxuaW1wb3J0IHR5cGUge1xyXG4gIE5vSW5mZXIsXHJcbiAgRXh0cmFjdERpc3BhdGNoRXh0ZW5zaW9ucyxcclxuICBFeHRyYWN0U3RvcmVFeHRlbnNpb25zLFxyXG4gIEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnMsXHJcbn0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB7IEVuaGFuY2VyQXJyYXkgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuY29uc3QgSVNfUFJPRFVDVElPTiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbidcclxuXHJcbi8qKlxyXG4gKiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlLCB0byBiZSB1c2VkIGluIGBDb25maWd1cmVTdG9yZU9wdGlvbnMuZW5oYW5jZXJzYFxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDb25maWd1cmVFbmhhbmNlcnNDYWxsYmFjazxFIGV4dGVuZHMgRW5oYW5jZXJzID0gRW5oYW5jZXJzPiA9IChcclxuICBkZWZhdWx0RW5oYW5jZXJzOiBFbmhhbmNlckFycmF5PFtTdG9yZUVuaGFuY2VyPHt9LCB7fT5dPlxyXG4pID0+IEVcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBgY29uZmlndXJlU3RvcmUoKWAuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJlU3RvcmVPcHRpb25zPFxyXG4gIFMgPSBhbnksXHJcbiAgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbixcclxuICBNIGV4dGVuZHMgTWlkZGxld2FyZXM8Uz4gPSBNaWRkbGV3YXJlczxTPixcclxuICBFIGV4dGVuZHMgRW5oYW5jZXJzID0gRW5oYW5jZXJzXHJcbj4ge1xyXG4gIC8qKlxyXG4gICAqIEEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJvb3QgcmVkdWNlciwgb3IgYW5cclxuICAgKiBvYmplY3Qgb2Ygc2xpY2UgcmVkdWNlcnMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBgY29tYmluZVJlZHVjZXJzKClgLlxyXG4gICAqL1xyXG4gIHJlZHVjZXI6IFJlZHVjZXI8UywgQT4gfCBSZWR1Y2Vyc01hcE9iamVjdDxTLCBBPlxyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBSZWR1eCBtaWRkbGV3YXJlIHRvIGluc3RhbGwuIElmIG5vdCBzdXBwbGllZCwgZGVmYXVsdHMgdG9cclxuICAgKiB0aGUgc2V0IG9mIG1pZGRsZXdhcmUgcmV0dXJuZWQgYnkgYGdldERlZmF1bHRNaWRkbGV3YXJlKClgLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgYG1pZGRsZXdhcmU6IChnRE0pID0+IGdETSgpLmNvbmNhdChsb2dnZXIsIGFwaU1pZGRsZXdhcmUsIHlvdXJDdXN0b21NaWRkbGV3YXJlKWBcclxuICAgKiBAc2VlIGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2dldERlZmF1bHRNaWRkbGV3YXJlI2ludGVuZGVkLXVzYWdlXHJcbiAgICovXHJcbiAgbWlkZGxld2FyZT86ICgoZ2V0RGVmYXVsdE1pZGRsZXdhcmU6IEN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZTxTPikgPT4gTSkgfCBNXHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIFJlZHV4IERldlRvb2xzIGludGVncmF0aW9uLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXHJcbiAgICpcclxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGRvbmUgYnkgcGFzc2luZyBSZWR1eCBEZXZUb29scyBvcHRpb25zXHJcbiAgICovXHJcbiAgZGV2VG9vbHM/OiBib29sZWFuIHwgRGV2VG9vbHNPcHRpb25zXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpbml0aWFsIHN0YXRlLCBzYW1lIGFzIFJlZHV4J3MgY3JlYXRlU3RvcmUuXHJcbiAgICogWW91IG1heSBvcHRpb25hbGx5IHNwZWNpZnkgaXQgdG8gaHlkcmF0ZSB0aGUgc3RhdGVcclxuICAgKiBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYSBwcmV2aW91c2x5IHNlcmlhbGl6ZWRcclxuICAgKiB1c2VyIHNlc3Npb24uIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2VycygpYCB0byBwcm9kdWNlIHRoZSByb290IHJlZHVjZXJcclxuICAgKiBmdW5jdGlvbiAoZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgcGFzc2luZyBhbiBvYmplY3QgYXMgYHJlZHVjZXJgKSxcclxuICAgKiB0aGlzIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgc2hhcGUgYXMgdGhlIHJlZHVjZXIgbWFwIGtleXMuXHJcbiAgICovXHJcbiAgLypcclxuICBOb3QgMTAwJSBjb3JyZWN0IGJ1dCB0aGUgYmVzdCBhcHByb3hpbWF0aW9uIHdlIGNhbiBnZXQ6XHJcbiAgLSBpZiBTIGlzIGEgYENvbWJpbmVkU3RhdGVgIGFwcGx5aW5nIGEgc2Vjb25kIGBDb21iaW5lZFN0YXRlYCBvbiBpdCBkb2VzIG5vdCBjaGFuZ2UgYW55dGhpbmcuXHJcbiAgLSBpZiBpdCBpcyBub3QsIHRoZXJlIGNvdWxkIGJlIHR3byBjYXNlczpcclxuICAgIC0gYFJlZHVjZXJzTWFwT2JqZWN0PFMsIEE+YCBpcyBiZWluZyBwYXNzZWQgaW4uIEluIHRoaXMgY2FzZSwgd2Ugd2lsbCBjYWxsIGBjb21iaW5lUmVkdWNlcnNgIG9uIGl0IGFuZCBgQ29tYmluZWRTdGF0ZTxTPmAgaXMgY29ycmVjdFxyXG4gICAgLSBgUmVkdWNlcjxTLCBBPmAgaXMgYmVpbmcgcGFzc2VkIGluLiBJbiB0aGlzIGNhc2UsIGFjdHVhbGx5IGBDb21iaW5lZFN0YXRlPFM+YCBpcyB3cm9uZyBhbmQgYFNgIHdvdWxkIGJlIGNvcnJlY3QuXHJcbiAgICBBcyB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMgd2l0aG91dCBhZGRpbmcgYW5vdGhlciBnZW5lcmljIHBhcmFtZXRlcixcclxuICAgIHdlIGp1c3QgbWFrZSB0aGUgcHJhZ21hdGljIGFzc3VtcHRpb24gdGhhdCB0aGUgbGF0dGVyIGFsbW9zdCBuZXZlciBoYXBwZW5zLlxyXG4gICovXHJcbiAgcHJlbG9hZGVkU3RhdGU/OiBQcmVsb2FkZWRTdGF0ZTxDb21iaW5lZFN0YXRlPE5vSW5mZXI8Uz4+PlxyXG5cclxuICAvKipcclxuICAgKiBUaGUgc3RvcmUgZW5oYW5jZXJzIHRvIGFwcGx5LiBTZWUgUmVkdXgncyBgY3JlYXRlU3RvcmUoKWAuXHJcbiAgICogQWxsIGVuaGFuY2VycyB3aWxsIGJlIGluY2x1ZGVkIGJlZm9yZSB0aGUgRGV2VG9vbHMgRXh0ZW5zaW9uIGVuaGFuY2VyLlxyXG4gICAqIElmIHlvdSBuZWVkIHRvIGN1c3RvbWl6ZSB0aGUgb3JkZXIgb2YgZW5oYW5jZXJzLCBzdXBwbHkgYSBjYWxsYmFja1xyXG4gICAqIGZ1bmN0aW9uIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBvcmlnaW5hbCBhcnJheSAoaWUsIGBbYXBwbHlNaWRkbGV3YXJlXWApLFxyXG4gICAqIGFuZCBzaG91bGQgcmV0dXJuIGEgbmV3IGFycmF5IChzdWNoIGFzIGBbYXBwbHlNaWRkbGV3YXJlLCBvZmZsaW5lXWApLlxyXG4gICAqIElmIHlvdSBvbmx5IG5lZWQgdG8gYWRkIG1pZGRsZXdhcmUsIHlvdSBjYW4gdXNlIHRoZSBgbWlkZGxld2FyZWAgcGFyYW1ldGVyIGluc3RlYWQuXHJcbiAgICovXHJcbiAgZW5oYW5jZXJzPzogRSB8IENvbmZpZ3VyZUVuaGFuY2Vyc0NhbGxiYWNrPEU+XHJcbn1cclxuXHJcbnR5cGUgTWlkZGxld2FyZXM8Uz4gPSBSZWFkb25seUFycmF5PE1pZGRsZXdhcmU8e30sIFM+PlxyXG5cclxudHlwZSBFbmhhbmNlcnMgPSBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI+XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xraXRTdG9yZTxcclxuICBTID0gYW55LFxyXG4gIEEgZXh0ZW5kcyBBY3Rpb24gPSBBbnlBY3Rpb24sXHJcbiAgTSBleHRlbmRzIE1pZGRsZXdhcmVzPFM+ID0gTWlkZGxld2FyZXM8Uz5cclxuPiBleHRlbmRzIFN0b3JlPFMsIEE+IHtcclxuICAvKipcclxuICAgKiBUaGUgYGRpc3BhdGNoYCBtZXRob2Qgb2YgeW91ciBzdG9yZSwgZW5oYW5jZWQgYnkgYWxsIGl0cyBtaWRkbGV3YXJlcy5cclxuICAgKlxyXG4gICAqIEBpbmhlcml0ZG9jXHJcbiAgICovXHJcbiAgZGlzcGF0Y2g6IEV4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnM8TT4gJiBEaXNwYXRjaDxBPlxyXG59XHJcblxyXG4vKipcclxuICogQSBSZWR1eCBzdG9yZSByZXR1cm5lZCBieSBgY29uZmlndXJlU3RvcmUoKWAuIFN1cHBvcnRzIGRpc3BhdGNoaW5nXHJcbiAqIHNpZGUtZWZmZWN0ZnVsIF90aHVua3NfIGluIGFkZGl0aW9uIHRvIHBsYWluIGFjdGlvbnMuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIEVuaGFuY2VkU3RvcmU8XHJcbiAgUyA9IGFueSxcclxuICBBIGV4dGVuZHMgQWN0aW9uID0gQW55QWN0aW9uLFxyXG4gIE0gZXh0ZW5kcyBNaWRkbGV3YXJlczxTPiA9IE1pZGRsZXdhcmVzPFM+LFxyXG4gIEUgZXh0ZW5kcyBFbmhhbmNlcnMgPSBFbmhhbmNlcnNcclxuPiA9IFRvb2xraXRTdG9yZTxTICYgRXh0cmFjdFN0YXRlRXh0ZW5zaW9uczxFPiwgQSwgTT4gJlxyXG4gIEV4dHJhY3RTdG9yZUV4dGVuc2lvbnM8RT5cclxuXHJcbi8qKlxyXG4gKiBBIGZyaWVuZGx5IGFic3RyYWN0aW9uIG92ZXIgdGhlIHN0YW5kYXJkIFJlZHV4IGBjcmVhdGVTdG9yZSgpYCBmdW5jdGlvbi5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgVGhlIHN0b3JlIGNvbmZpZ3VyYXRpb24uXHJcbiAqIEByZXR1cm5zIEEgY29uZmlndXJlZCBSZWR1eCBzdG9yZS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZVN0b3JlPFxyXG4gIFMgPSBhbnksXHJcbiAgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbixcclxuICBNIGV4dGVuZHMgTWlkZGxld2FyZXM8Uz4gPSBbVGh1bmtNaWRkbGV3YXJlRm9yPFM+XSxcclxuICBFIGV4dGVuZHMgRW5oYW5jZXJzID0gW1N0b3JlRW5oYW5jZXJdXHJcbj4ob3B0aW9uczogQ29uZmlndXJlU3RvcmVPcHRpb25zPFMsIEEsIE0sIEU+KTogRW5oYW5jZWRTdG9yZTxTLCBBLCBNLCBFPiB7XHJcbiAgY29uc3QgY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlID0gY3VycnlHZXREZWZhdWx0TWlkZGxld2FyZTxTPigpXHJcblxyXG4gIGNvbnN0IHtcclxuICAgIHJlZHVjZXIgPSB1bmRlZmluZWQsXHJcbiAgICBtaWRkbGV3YXJlID0gY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlKCksXHJcbiAgICBkZXZUb29scyA9IHRydWUsXHJcbiAgICBwcmVsb2FkZWRTdGF0ZSA9IHVuZGVmaW5lZCxcclxuICAgIGVuaGFuY2VycyA9IHVuZGVmaW5lZCxcclxuICB9ID0gb3B0aW9ucyB8fCB7fVxyXG5cclxuICBsZXQgcm9vdFJlZHVjZXI6IFJlZHVjZXI8UywgQT5cclxuXHJcbiAgaWYgKHR5cGVvZiByZWR1Y2VyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICByb290UmVkdWNlciA9IHJlZHVjZXJcclxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocmVkdWNlcikpIHtcclxuICAgIHJvb3RSZWR1Y2VyID0gY29tYmluZVJlZHVjZXJzKHJlZHVjZXIpIGFzIHVua25vd24gYXMgUmVkdWNlcjxTLCBBPlxyXG4gIH0gZWxzZSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICdcInJlZHVjZXJcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LCBhbmQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGNvbWJpbmVSZWR1Y2VycydcclxuICAgIClcclxuICB9XHJcblxyXG4gIGxldCBmaW5hbE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlXHJcbiAgaWYgKHR5cGVvZiBmaW5hbE1pZGRsZXdhcmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIGZpbmFsTWlkZGxld2FyZSA9IGZpbmFsTWlkZGxld2FyZShjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUpXHJcblxyXG4gICAgaWYgKCFJU19QUk9EVUNUSU9OICYmICFBcnJheS5pc0FycmF5KGZpbmFsTWlkZGxld2FyZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICd3aGVuIHVzaW5nIGEgbWlkZGxld2FyZSBidWlsZGVyIGZ1bmN0aW9uLCBhbiBhcnJheSBvZiBtaWRkbGV3YXJlIG11c3QgYmUgcmV0dXJuZWQnXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKFxyXG4gICAgIUlTX1BST0RVQ1RJT04gJiZcclxuICAgIGZpbmFsTWlkZGxld2FyZS5zb21lKChpdGVtOiBhbnkpID0+IHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKVxyXG4gICkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAnZWFjaCBtaWRkbGV3YXJlIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZVN0b3JlIG11c3QgYmUgYSBmdW5jdGlvbidcclxuICAgIClcclxuICB9XHJcblxyXG4gIGNvbnN0IG1pZGRsZXdhcmVFbmhhbmNlcjogU3RvcmVFbmhhbmNlciA9IGFwcGx5TWlkZGxld2FyZSguLi5maW5hbE1pZGRsZXdhcmUpXHJcblxyXG4gIGxldCBmaW5hbENvbXBvc2UgPSBjb21wb3NlXHJcblxyXG4gIGlmIChkZXZUb29scykge1xyXG4gICAgZmluYWxDb21wb3NlID0gY29tcG9zZVdpdGhEZXZUb29scyh7XHJcbiAgICAgIC8vIEVuYWJsZSBjYXB0dXJlIG9mIHN0YWNrIHRyYWNlcyBmb3IgZGlzcGF0Y2hlZCBSZWR1eCBhY3Rpb25zXHJcbiAgICAgIHRyYWNlOiAhSVNfUFJPRFVDVElPTixcclxuICAgICAgLi4uKHR5cGVvZiBkZXZUb29scyA9PT0gJ29iamVjdCcgJiYgZGV2VG9vbHMpLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNvbnN0IGRlZmF1bHRFbmhhbmNlcnMgPSBuZXcgRW5oYW5jZXJBcnJheShtaWRkbGV3YXJlRW5oYW5jZXIpXHJcbiAgbGV0IHN0b3JlRW5oYW5jZXJzOiBFbmhhbmNlcnMgPSBkZWZhdWx0RW5oYW5jZXJzXHJcblxyXG4gIGlmIChBcnJheS5pc0FycmF5KGVuaGFuY2VycykpIHtcclxuICAgIHN0b3JlRW5oYW5jZXJzID0gW21pZGRsZXdhcmVFbmhhbmNlciwgLi4uZW5oYW5jZXJzXVxyXG4gIH0gZWxzZSBpZiAodHlwZW9mIGVuaGFuY2VycyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgc3RvcmVFbmhhbmNlcnMgPSBlbmhhbmNlcnMoZGVmYXVsdEVuaGFuY2VycylcclxuICB9XHJcblxyXG4gIGNvbnN0IGNvbXBvc2VkRW5oYW5jZXIgPSBmaW5hbENvbXBvc2UoLi4uc3RvcmVFbmhhbmNlcnMpIGFzIFN0b3JlRW5oYW5jZXI8YW55PlxyXG5cclxuICByZXR1cm4gY3JlYXRlU3RvcmUocm9vdFJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBjb21wb3NlZEVuaGFuY2VyKVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgQWN0aW9uQ3JlYXRvciwgU3RvcmVFbmhhbmNlciB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSAncmVkdXgnXHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBEZXZUb29sc0VuaGFuY2VyT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogdGhlIGluc3RhbmNlIG5hbWUgdG8gYmUgc2hvd2VkIG9uIHRoZSBtb25pdG9yIHBhZ2UuIERlZmF1bHQgdmFsdWUgaXMgYGRvY3VtZW50LnRpdGxlYC5cclxuICAgKiBJZiBub3Qgc3BlY2lmaWVkIGFuZCB0aGVyZSdzIG5vIGRvY3VtZW50IHRpdGxlLCBpdCB3aWxsIGNvbnNpc3Qgb2YgYHRhYklkYCBhbmQgYGluc3RhbmNlSWRgLlxyXG4gICAqL1xyXG4gIG5hbWU/OiBzdHJpbmdcclxuICAvKipcclxuICAgKiBhY3Rpb24gY3JlYXRvcnMgZnVuY3Rpb25zIHRvIGJlIGF2YWlsYWJsZSBpbiB0aGUgRGlzcGF0Y2hlci5cclxuICAgKi9cclxuICBhY3Rpb25DcmVhdG9ycz86IEFjdGlvbkNyZWF0b3I8YW55PltdIHwgeyBba2V5OiBzdHJpbmddOiBBY3Rpb25DcmVhdG9yPGFueT4gfVxyXG4gIC8qKlxyXG4gICAqIGlmIG1vcmUgdGhhbiBvbmUgYWN0aW9uIGlzIGRpc3BhdGNoZWQgaW4gdGhlIGluZGljYXRlZCBpbnRlcnZhbCwgYWxsIG5ldyBhY3Rpb25zIHdpbGwgYmUgY29sbGVjdGVkIGFuZCBzZW50IGF0IG9uY2UuXHJcbiAgICogSXQgaXMgdGhlIGpvaW50IGJldHdlZW4gcGVyZm9ybWFuY2UgYW5kIHNwZWVkLiBXaGVuIHNldCB0byBgMGAsIGFsbCBhY3Rpb25zIHdpbGwgYmUgc2VudCBpbnN0YW50bHkuXHJcbiAgICogU2V0IGl0IHRvIGEgaGlnaGVyIHZhbHVlIHdoZW4gZXhwZXJpZW5jaW5nIHBlcmYgaXNzdWVzIChhbHNvIGBtYXhBZ2VgIHRvIGEgbG93ZXIgdmFsdWUpLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgNTAwIG1zLlxyXG4gICAqL1xyXG4gIGxhdGVuY3k/OiBudW1iZXJcclxuICAvKipcclxuICAgKiAoPiAxKSAtIG1heGltdW0gYWxsb3dlZCBhY3Rpb25zIHRvIGJlIHN0b3JlZCBpbiB0aGUgaGlzdG9yeSB0cmVlLiBUaGUgb2xkZXN0IGFjdGlvbnMgYXJlIHJlbW92ZWQgb25jZSBtYXhBZ2UgaXMgcmVhY2hlZC4gSXQncyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCA1MFxyXG4gICAqL1xyXG4gIG1heEFnZT86IG51bWJlclxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbWl6ZXMgaG93IGFjdGlvbnMgYW5kIHN0YXRlIGFyZSBzZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQuIENhbiBiZSBhIGJvb2xlYW4gb3Igb2JqZWN0LiBJZiBnaXZlbiBhIGJvb2xlYW4sIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBpZiB5b3VcclxuICAgKiB3ZXJlIHRvIHBhc3MgYW4gb2JqZWN0IGFuZCBzcGVjaWZ5IGBvcHRpb25zYCBhcyBhIGJvb2xlYW4uIEdpdmluZyBhbiBvYmplY3QgYWxsb3dzIGZpbmUtZ3JhaW5lZCBjdXN0b21pemF0aW9uIHVzaW5nIHRoZSBgcmVwbGFjZXJgIGFuZCBgcmV2aXZlcmBcclxuICAgKiBmdW5jdGlvbnMuXHJcbiAgICovXHJcbiAgc2VyaWFsaXplPzpcclxuICAgIHwgYm9vbGVhblxyXG4gICAgfCB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogLSBgdW5kZWZpbmVkYCAtIHdpbGwgdXNlIHJlZ3VsYXIgYEpTT04uc3RyaW5naWZ5YCB0byBzZW5kIGRhdGEgKGl0J3MgdGhlIGZhc3QgbW9kZSkuXHJcbiAgICAgICAgICogLSBgZmFsc2VgIC0gd2lsbCBoYW5kbGUgYWxzbyBjaXJjdWxhciByZWZlcmVuY2VzLlxyXG4gICAgICAgICAqIC0gYHRydWVgIC0gd2lsbCBoYW5kbGUgYWxzbyBkYXRlLCByZWdleCwgdW5kZWZpbmVkLCBlcnJvciBvYmplY3RzLCBzeW1ib2xzLCBtYXBzLCBzZXRzIGFuZCBmdW5jdGlvbnMuXHJcbiAgICAgICAgICogLSBvYmplY3QsIHdoaWNoIGNvbnRhaW5zIGBkYXRlYCwgYHJlZ2V4YCwgYHVuZGVmaW5lZGAsIGBlcnJvcmAsIGBzeW1ib2xgLCBgbWFwYCwgYHNldGAgYW5kIGBmdW5jdGlvbmAga2V5cy5cclxuICAgICAgICAgKiAgIEZvciBlYWNoIG9mIHRoZW0geW91IGNhbiBpbmRpY2F0ZSBpZiB0byBpbmNsdWRlIChieSBzZXR0aW5nIGFzIGB0cnVlYCkuXHJcbiAgICAgICAgICogICBGb3IgYGZ1bmN0aW9uYCBrZXkgeW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gZnVuY3Rpb24gd2hpY2ggaGFuZGxlcyBzZXJpYWxpemF0aW9uLlxyXG4gICAgICAgICAqICAgU2VlIFtganNhbmBdKGh0dHBzOi8vZ2l0aHViLmNvbS9rb2xvZG55L2pzYW4pIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3B0aW9ucz86XHJcbiAgICAgICAgICB8IHVuZGVmaW5lZFxyXG4gICAgICAgICAgfCBib29sZWFuXHJcbiAgICAgICAgICB8IHtcclxuICAgICAgICAgICAgICBkYXRlPzogdHJ1ZVxyXG4gICAgICAgICAgICAgIHJlZ2V4PzogdHJ1ZVxyXG4gICAgICAgICAgICAgIHVuZGVmaW5lZD86IHRydWVcclxuICAgICAgICAgICAgICBlcnJvcj86IHRydWVcclxuICAgICAgICAgICAgICBzeW1ib2w/OiB0cnVlXHJcbiAgICAgICAgICAgICAgbWFwPzogdHJ1ZVxyXG4gICAgICAgICAgICAgIHNldD86IHRydWVcclxuICAgICAgICAgICAgICBmdW5jdGlvbj86IHRydWUgfCAoKGZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSkgPT4gc3RyaW5nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW0pTT04gcmVwbGFjZXIgZnVuY3Rpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0pTT04vc3RyaW5naWZ5I1RoZV9yZXBsYWNlcl9wYXJhbWV0ZXIpIHVzZWQgZm9yIGJvdGggYWN0aW9ucyBhbmQgc3RhdGVzIHN0cmluZ2lmeS5cclxuICAgICAgICAgKiBJbiBhZGRpdGlvbiwgeW91IGNhbiBzcGVjaWZ5IGEgZGF0YSB0eXBlIGJ5IGFkZGluZyBhIFtgX19zZXJpYWxpemVkVHlwZV9fYF0oaHR0cHM6Ly9naXRodWIuY29tL3phbG1veGlzdXMvcmVtb3RlZGV2LXNlcmlhbGl6ZS9ibG9iL21hc3Rlci9oZWxwZXJzL2luZGV4LmpzI0w0KVxyXG4gICAgICAgICAqIGtleS4gU28geW91IGNhbiBkZXNlcmlhbGl6ZSBpdCBiYWNrIHdoaWxlIGltcG9ydGluZyBvciBwZXJzaXN0aW5nIGRhdGEuXHJcbiAgICAgICAgICogTW9yZW92ZXIsIGl0IHdpbGwgYWxzbyBbc2hvdyBhIG5pY2UgcHJldmlldyBzaG93aW5nIHRoZSBwcm92aWRlZCBjdXN0b20gdHlwZV0oaHR0cHM6Ly9jbG91ZC5naXRodWJ1c2VyY29udGVudC5jb20vYXNzZXRzLzc5NTc4NTkvMjE4MTQzMzAvYTE3ZDU1NmEtZDc2MS0xMWU2LTg1ZWYtMTU5ZGQxMmYzNmM1LnBuZyk6XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVwbGFjZXI/OiAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiBhbnlcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbSlNPTiBgcmV2aXZlcmAgZnVuY3Rpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0pTT04vcGFyc2UjVXNpbmdfdGhlX3Jldml2ZXJfcGFyYW1ldGVyKVxyXG4gICAgICAgICAqIHVzZWQgZm9yIHBhcnNpbmcgdGhlIGltcG9ydGVkIGFjdGlvbnMgYW5kIHN0YXRlcy4gU2VlIFtgcmVtb3RlZGV2LXNlcmlhbGl6ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS96YWxtb3hpc3VzL3JlbW90ZWRldi1zZXJpYWxpemUvYmxvYi9tYXN0ZXIvaW1tdXRhYmxlL3NlcmlhbGl6ZS5qcyNMOC1MNDEpXHJcbiAgICAgICAgICogYXMgYW4gZXhhbXBsZSBvbiBob3cgdG8gc2VyaWFsaXplIHNwZWNpYWwgZGF0YSB0eXBlcyBhbmQgZ2V0IHRoZW0gYmFjay5cclxuICAgICAgICAgKi9cclxuICAgICAgICByZXZpdmVyPzogKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gYW55XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXV0b21hdGljYWxseSBzZXJpYWxpemUvZGVzZXJpYWxpemUgaW1tdXRhYmxlanMgdmlhIFtyZW1vdGVkZXYtc2VyaWFsaXplXShodHRwczovL2dpdGh1Yi5jb20vemFsbW94aXN1cy9yZW1vdGVkZXYtc2VyaWFsaXplKS5cclxuICAgICAgICAgKiBKdXN0IHBhc3MgdGhlIEltbXV0YWJsZSBsaWJyYXJ5LiBJdCB3aWxsIHN1cHBvcnQgYWxsIEltbXV0YWJsZUpTIHN0cnVjdHVyZXMuIFlvdSBjYW4gZXZlbiBleHBvcnQgdGhlbSBpbnRvIGEgZmlsZSBhbmQgZ2V0IHRoZW0gYmFjay5cclxuICAgICAgICAgKiBUaGUgb25seSBleGNlcHRpb24gaXMgYFJlY29yZGAgY2xhc3MsIGZvciB3aGljaCB5b3Ugc2hvdWxkIHBhc3MgdGhpcyBpbiBhZGRpdGlvbiB0aGUgcmVmZXJlbmNlcyB0byB5b3VyIGNsYXNzZXMgaW4gYHJlZnNgLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGltbXV0YWJsZT86IGFueVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEltbXV0YWJsZUpTIGBSZWNvcmRgIGNsYXNzZXMgdXNlZCB0byBtYWtlIHBvc3NpYmxlIHJlc3RvcmUgaXRzIGluc3RhbmNlcyBiYWNrIHdoZW4gaW1wb3J0aW5nLCBwZXJzaXN0aW5nLi4uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVmcz86IGFueVxyXG4gICAgICB9XHJcbiAgLyoqXHJcbiAgICogZnVuY3Rpb24gd2hpY2ggdGFrZXMgYGFjdGlvbmAgb2JqZWN0IGFuZCBpZCBudW1iZXIgYXMgYXJndW1lbnRzLCBhbmQgc2hvdWxkIHJldHVybiBgYWN0aW9uYCBvYmplY3QgYmFjay5cclxuICAgKi9cclxuICBhY3Rpb25TYW5pdGl6ZXI/OiA8QSBleHRlbmRzIEFjdGlvbj4oYWN0aW9uOiBBLCBpZDogbnVtYmVyKSA9PiBBXHJcbiAgLyoqXHJcbiAgICogZnVuY3Rpb24gd2hpY2ggdGFrZXMgYHN0YXRlYCBvYmplY3QgYW5kIGluZGV4IGFzIGFyZ3VtZW50cywgYW5kIHNob3VsZCByZXR1cm4gYHN0YXRlYCBvYmplY3QgYmFjay5cclxuICAgKi9cclxuICBzdGF0ZVNhbml0aXplcj86IDxTPihzdGF0ZTogUywgaW5kZXg6IG51bWJlcikgPT4gU1xyXG4gIC8qKlxyXG4gICAqICpzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhcyByZWdleCogLSBhY3Rpb25zIHR5cGVzIHRvIGJlIGhpZGRlbiAvIHNob3duIGluIHRoZSBtb25pdG9ycyAod2hpbGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VycykuXHJcbiAgICogSWYgYGFjdGlvbnNXaGl0ZWxpc3RgIHNwZWNpZmllZCwgYGFjdGlvbnNCbGFja2xpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFjdGlvbnNEZW55bGlzdCBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIGFjdGlvbnNCbGFja2xpc3Q/OiBzdHJpbmcgfCBzdHJpbmdbXVxyXG4gIC8qKlxyXG4gICAqICpzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhcyByZWdleCogLSBhY3Rpb25zIHR5cGVzIHRvIGJlIGhpZGRlbiAvIHNob3duIGluIHRoZSBtb25pdG9ycyAod2hpbGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VycykuXHJcbiAgICogSWYgYGFjdGlvbnNXaGl0ZWxpc3RgIHNwZWNpZmllZCwgYGFjdGlvbnNCbGFja2xpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFjdGlvbnNBbGxvd2xpc3QgaW5zdGVhZC5cclxuICAgKi9cclxuICBhY3Rpb25zV2hpdGVsaXN0Pzogc3RyaW5nIHwgc3RyaW5nW11cclxuICAvKipcclxuICAgKiAqc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgYXMgcmVnZXgqIC0gYWN0aW9ucyB0eXBlcyB0byBiZSBoaWRkZW4gLyBzaG93biBpbiB0aGUgbW9uaXRvcnMgKHdoaWxlIHBhc3NlZCB0byB0aGUgcmVkdWNlcnMpLlxyXG4gICAqIElmIGBhY3Rpb25zQWxsb3dsaXN0YCBzcGVjaWZpZWQsIGBhY3Rpb25zRGVueWxpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICovXHJcbiAgYWN0aW9uc0RlbnlsaXN0Pzogc3RyaW5nIHwgc3RyaW5nW11cclxuICAvKipcclxuICAgKiAqc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgYXMgcmVnZXgqIC0gYWN0aW9ucyB0eXBlcyB0byBiZSBoaWRkZW4gLyBzaG93biBpbiB0aGUgbW9uaXRvcnMgKHdoaWxlIHBhc3NlZCB0byB0aGUgcmVkdWNlcnMpLlxyXG4gICAqIElmIGBhY3Rpb25zQWxsb3dsaXN0YCBzcGVjaWZpZWQsIGBhY3Rpb25zRGVueWxpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICovXHJcbiAgYWN0aW9uc0FsbG93bGlzdD86IHN0cmluZyB8IHN0cmluZ1tdXHJcbiAgLyoqXHJcbiAgICogY2FsbGVkIGZvciBldmVyeSBhY3Rpb24gYmVmb3JlIHNlbmRpbmcsIHRha2VzIGBzdGF0ZWAgYW5kIGBhY3Rpb25gIG9iamVjdCwgYW5kIHJldHVybnMgYHRydWVgIGluIGNhc2UgaXQgYWxsb3dzIHNlbmRpbmcgdGhlIGN1cnJlbnQgZGF0YSB0byB0aGUgbW9uaXRvci5cclxuICAgKiBVc2UgaXQgYXMgYSBtb3JlIGFkdmFuY2VkIHZlcnNpb24gb2YgYGFjdGlvbnNEZW55bGlzdGAvYGFjdGlvbnNBbGxvd2xpc3RgIHBhcmFtZXRlcnMuXHJcbiAgICovXHJcbiAgcHJlZGljYXRlPzogPFMsIEEgZXh0ZW5kcyBBY3Rpb24+KHN0YXRlOiBTLCBhY3Rpb246IEEpID0+IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzcGVjaWZpZWQgYXMgYGZhbHNlYCwgaXQgd2lsbCBub3QgcmVjb3JkIHRoZSBjaGFuZ2VzIHRpbGwgY2xpY2tpbmcgb24gYFN0YXJ0IHJlY29yZGluZ2AgYnV0dG9uLlxyXG4gICAqIEF2YWlsYWJsZSBvbmx5IGZvciBSZWR1eCBlbmhhbmNlciwgZm9yIG90aGVycyB1c2UgYGF1dG9QYXVzZWAuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICovXHJcbiAgc2hvdWxkUmVjb3JkQ2hhbmdlcz86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzcGVjaWZpZWQsIHdoZW5ldmVyIGNsaWNraW5nIG9uIGBQYXVzZSByZWNvcmRpbmdgIGJ1dHRvbiBhbmQgdGhlcmUgYXJlIGFjdGlvbnMgaW4gdGhlIGhpc3RvcnkgbG9nLCB3aWxsIGFkZCB0aGlzIGFjdGlvbiB0eXBlLlxyXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHdpbGwgY29tbWl0IHdoZW4gcGF1c2VkLiBBdmFpbGFibGUgb25seSBmb3IgUmVkdXggZW5oYW5jZXIuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBcIkBAUEFVU0VEXCJcIlxyXG4gICAqL1xyXG4gIHBhdXNlQWN0aW9uVHlwZT86IHN0cmluZ1xyXG4gIC8qKlxyXG4gICAqIGF1dG8gcGF1c2VzIHdoZW4gdGhlIGV4dGVuc2lvbuKAmXMgd2luZG93IGlzIG5vdCBvcGVuZWQsIGFuZCBzbyBoYXMgemVybyBpbXBhY3Qgb24geW91ciBhcHAgd2hlbiBub3QgaW4gdXNlLlxyXG4gICAqIE5vdCBhdmFpbGFibGUgZm9yIFJlZHV4IGVuaGFuY2VyIChhcyBpdCBhbHJlYWR5IGRvZXMgaXQgYnV0IHN0b3JpbmcgdGhlIGRhdGEgdG8gYmUgc2VudCkuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIGF1dG9QYXVzZT86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzcGVjaWZpZWQgYXMgYHRydWVgLCBpdCB3aWxsIG5vdCBhbGxvdyBhbnkgbm9uLW1vbml0b3IgYWN0aW9ucyB0byBiZSBkaXNwYXRjaGVkIHRpbGwgY2xpY2tpbmcgb24gYFVubG9jayBjaGFuZ2VzYCBidXR0b24uXHJcbiAgICogQXZhaWxhYmxlIG9ubHkgZm9yIFJlZHV4IGVuaGFuY2VyLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBzaG91bGRTdGFydExvY2tlZD86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzZXQgdG8gYGZhbHNlYCwgd2lsbCBub3QgcmVjb21wdXRlIHRoZSBzdGF0ZXMgb24gaG90IHJlbG9hZGluZyAob3Igb24gcmVwbGFjaW5nIHRoZSByZWR1Y2VycykuIEF2YWlsYWJsZSBvbmx5IGZvciBSZWR1eCBlbmhhbmNlci5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IHRydWVcclxuICAgKi9cclxuICBzaG91bGRIb3RSZWxvYWQ/OiBib29sZWFuXHJcbiAgLyoqXHJcbiAgICogaWYgc3BlY2lmaWVkIGFzIGB0cnVlYCwgd2hlbmV2ZXIgdGhlcmUncyBhbiBleGNlcHRpb24gaW4gcmVkdWNlcnMsIHRoZSBtb25pdG9ycyB3aWxsIHNob3cgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCBuZXh0IGFjdGlvbnMgd2lsbCBub3QgYmUgZGlzcGF0Y2hlZC5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgc2hvdWxkQ2F0Y2hFcnJvcnM/OiBib29sZWFuXHJcbiAgLyoqXHJcbiAgICogSWYgeW91IHdhbnQgdG8gcmVzdHJpY3QgdGhlIGV4dGVuc2lvbiwgc3BlY2lmeSB0aGUgZmVhdHVyZXMgeW91IGFsbG93LlxyXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIGFsbCBvZiB0aGUgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIFdoZW4gc2V0IGFzIGFuIG9iamVjdCwgb25seSB0aG9zZSBpbmNsdWRlZCBhcyBgdHJ1ZWAgd2lsbCBiZSBhbGxvd2VkLlxyXG4gICAqIE5vdGUgdGhhdCBleGNlcHQgYHRydWVgL2BmYWxzZWAsIGBpbXBvcnRgIGFuZCBgZXhwb3J0YCBjYW4gYmUgc2V0IGFzIGBjdXN0b21gICh3aGljaCBpcyBieSBkZWZhdWx0IGZvciBSZWR1eCBlbmhhbmNlciksIG1lYW5pbmcgdGhhdCB0aGUgaW1wb3J0aW5nL2V4cG9ydGluZyBvY2N1cnMgb24gdGhlIGNsaWVudCBzaWRlLlxyXG4gICAqIE90aGVyd2lzZSwgeW91J2xsIGdldC9zZXQgdGhlIGRhdGEgcmlnaHQgZnJvbSB0aGUgbW9uaXRvciBwYXJ0LlxyXG4gICAqL1xyXG4gIGZlYXR1cmVzPzoge1xyXG4gICAgLyoqXHJcbiAgICAgKiBzdGFydC9wYXVzZSByZWNvcmRpbmcgb2YgZGlzcGF0Y2hlZCBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHBhdXNlPzogYm9vbGVhblxyXG4gICAgLyoqXHJcbiAgICAgKiBsb2NrL3VubG9jayBkaXNwYXRjaGluZyBhY3Rpb25zIGFuZCBzaWRlIGVmZmVjdHNcclxuICAgICAqL1xyXG4gICAgbG9jaz86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogcGVyc2lzdCBzdGF0ZXMgb24gcGFnZSByZWxvYWRpbmdcclxuICAgICAqL1xyXG4gICAgcGVyc2lzdD86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogZXhwb3J0IGhpc3Rvcnkgb2YgYWN0aW9ucyBpbiBhIGZpbGVcclxuICAgICAqL1xyXG4gICAgZXhwb3J0PzogYm9vbGVhbiB8ICdjdXN0b20nXHJcbiAgICAvKipcclxuICAgICAqIGltcG9ydCBoaXN0b3J5IG9mIGFjdGlvbnMgZnJvbSBhIGZpbGVcclxuICAgICAqL1xyXG4gICAgaW1wb3J0PzogYm9vbGVhbiB8ICdjdXN0b20nXHJcbiAgICAvKipcclxuICAgICAqIGp1bXAgYmFjayBhbmQgZm9ydGggKHRpbWUgdHJhdmVsbGluZylcclxuICAgICAqL1xyXG4gICAganVtcD86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogc2tpcCAoY2FuY2VsKSBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHNraXA/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIGRyYWcgYW5kIGRyb3AgYWN0aW9ucyBpbiB0aGUgaGlzdG9yeSBsaXN0XHJcbiAgICAgKi9cclxuICAgIHJlb3JkZXI/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIGRpc3BhdGNoIGN1c3RvbSBhY3Rpb25zIG9yIGFjdGlvbiBjcmVhdG9yc1xyXG4gICAgICovXHJcbiAgICBkaXNwYXRjaD86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogZ2VuZXJhdGUgdGVzdHMgZm9yIHRoZSBzZWxlY3RlZCBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHRlc3Q/OiBib29sZWFuXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldCB0byB0cnVlIG9yIGEgc3RhY2t0cmFjZS1yZXR1cm5pbmcgZnVuY3Rpb24gdG8gcmVjb3JkIGNhbGwgc3RhY2sgdHJhY2VzIGZvciBkaXNwYXRjaGVkIGFjdGlvbnMuXHJcbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuXHJcbiAgICovXHJcbiAgdHJhY2U/OiBib29sZWFuIHwgKDxBIGV4dGVuZHMgQWN0aW9uPihhY3Rpb246IEEpID0+IHN0cmluZylcclxuICAvKipcclxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3RhY2sgdHJhY2UgZW50cmllcyB0byByZWNvcmQgcGVyIGFjdGlvbi4gRGVmYXVsdHMgdG8gMTAuXHJcbiAgICovXHJcbiAgdHJhY2VMaW1pdD86IG51bWJlclxyXG59XHJcblxyXG50eXBlIENvbXBvc2UgPSB0eXBlb2YgY29tcG9zZVxyXG5cclxuaW50ZXJmYWNlIENvbXBvc2VXaXRoRGV2VG9vbHMge1xyXG4gIChvcHRpb25zOiBEZXZUb29sc0VuaGFuY2VyT3B0aW9ucyk6IENvbXBvc2VcclxuICA8U3RvcmVFeHQ+KC4uLmZ1bmNzOiBTdG9yZUVuaGFuY2VyPFN0b3JlRXh0PltdKTogU3RvcmVFbmhhbmNlcjxTdG9yZUV4dD5cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjb21wb3NlV2l0aERldlRvb2xzOiBDb21wb3NlV2l0aERldlRvb2xzID1cclxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICh3aW5kb3cgYXMgYW55KS5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX19cclxuICAgID8gKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfX1xyXG4gICAgOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHJldHVybiBjb21wb3NlXHJcbiAgICAgICAgcmV0dXJuIGNvbXBvc2UuYXBwbHkobnVsbCwgYXJndW1lbnRzIGFzIGFueSBhcyBGdW5jdGlvbltdKVxyXG4gICAgICB9XHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGRldlRvb2xzRW5oYW5jZXI6IHtcclxuICAob3B0aW9uczogRGV2VG9vbHNFbmhhbmNlck9wdGlvbnMpOiBTdG9yZUVuaGFuY2VyPGFueT5cclxufSA9XHJcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX19cclxuICAgID8gKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX19cclxuICAgIDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobm9vcCkge1xyXG4gICAgICAgICAgcmV0dXJuIG5vb3BcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuIiwgIi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhc3NlZCB2YWx1ZSBpcyBcInBsYWluXCIgb2JqZWN0LCBpLmUuIGFuIG9iamVjdCB3aG9zZVxyXG4gKiBwcm90b3R5cGUgaXMgdGhlIHJvb3QgYE9iamVjdC5wcm90b3R5cGVgLiBUaGlzIGluY2x1ZGVzIG9iamVjdHMgY3JlYXRlZFxyXG4gKiB1c2luZyBvYmplY3QgbGl0ZXJhbHMsIGJ1dCBub3QgZm9yIGluc3RhbmNlIGZvciBjbGFzcyBpbnN0YW5jZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cclxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGFyZ3VtZW50IGFwcGVhcnMgdG8gYmUgYSBwbGFpbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBvYmplY3Qge1xyXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxyXG4gIGlmIChwcm90byA9PT0gbnVsbCkgcmV0dXJuIHRydWVcclxuXHJcbiAgbGV0IGJhc2VQcm90byA9IHByb3RvXHJcbiAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlUHJvdG8pICE9PSBudWxsKSB7XHJcbiAgICBiYXNlUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZVByb3RvKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHByb3RvID09PSBiYXNlUHJvdG9cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlLCBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUgeyBUaHVua01pZGRsZXdhcmUgfSBmcm9tICdyZWR1eC10aHVuaydcclxuaW1wb3J0IHRodW5rTWlkZGxld2FyZSBmcm9tICdyZWR1eC10aHVuaydcclxuaW1wb3J0IHR5cGUgeyBBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgfSBmcm9tICcuL2FjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5pbXBvcnQgeyBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSB9IGZyb20gJy4vYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUnXHJcbmltcG9ydCB0eXBlIHsgSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyB9IGZyb20gJy4vaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG4vKiBQUk9EX1NUQVJUX1JFTU9WRV9VTUQgKi9cclxuaW1wb3J0IHsgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlIH0gZnJvbSAnLi9pbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbi8qIFBST0RfU1RPUF9SRU1PVkVfVU1EICovXHJcblxyXG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgfSBmcm9tICcuL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuaW1wb3J0IHsgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlIH0gZnJvbSAnLi9zZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbmltcG9ydCB0eXBlIHsgRXhjbHVkZUZyb21UdXBsZSB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBNaWRkbGV3YXJlQXJyYXkgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuZnVuY3Rpb24gaXNCb29sZWFuKHg6IGFueSk6IHggaXMgYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnYm9vbGVhbidcclxufVxyXG5cclxuaW50ZXJmYWNlIFRodW5rT3B0aW9uczxFID0gYW55PiB7XHJcbiAgZXh0cmFBcmd1bWVudDogRVxyXG59XHJcblxyXG5pbnRlcmZhY2UgR2V0RGVmYXVsdE1pZGRsZXdhcmVPcHRpb25zIHtcclxuICB0aHVuaz86IGJvb2xlYW4gfCBUaHVua09wdGlvbnNcclxuICBpbW11dGFibGVDaGVjaz86IGJvb2xlYW4gfCBJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zXHJcbiAgc2VyaWFsaXphYmxlQ2hlY2s/OiBib29sZWFuIHwgU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9uc1xyXG4gIGFjdGlvbkNyZWF0b3JDaGVjaz86IGJvb2xlYW4gfCBBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnNcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVGh1bmtNaWRkbGV3YXJlRm9yPFxyXG4gIFMsXHJcbiAgTyBleHRlbmRzIEdldERlZmF1bHRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcbj4gPSBPIGV4dGVuZHMge1xyXG4gIHRodW5rOiBmYWxzZVxyXG59XHJcbiAgPyBuZXZlclxyXG4gIDogTyBleHRlbmRzIHsgdGh1bms6IHsgZXh0cmFBcmd1bWVudDogaW5mZXIgRSB9IH1cclxuICA/IFRodW5rTWlkZGxld2FyZTxTLCBBbnlBY3Rpb24sIEU+XHJcbiAgOiBUaHVua01pZGRsZXdhcmU8UywgQW55QWN0aW9uPlxyXG5cclxuZXhwb3J0IHR5cGUgQ3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlPFMgPSBhbnk+ID0gPFxyXG4gIE8gZXh0ZW5kcyBQYXJ0aWFsPEdldERlZmF1bHRNaWRkbGV3YXJlT3B0aW9ucz4gPSB7XHJcbiAgICB0aHVuazogdHJ1ZVxyXG4gICAgaW1tdXRhYmxlQ2hlY2s6IHRydWVcclxuICAgIHNlcmlhbGl6YWJsZUNoZWNrOiB0cnVlXHJcbiAgICBhY3Rpb25DcmVhdG9yQ2hlY2s6IHRydWVcclxuICB9XHJcbj4oXHJcbiAgb3B0aW9ucz86IE9cclxuKSA9PiBNaWRkbGV3YXJlQXJyYXk8RXhjbHVkZUZyb21UdXBsZTxbVGh1bmtNaWRkbGV3YXJlRm9yPFMsIE8+XSwgbmV2ZXI+PlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmU8XHJcbiAgUyA9IGFueVxyXG4+KCk6IEN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZTxTPiB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gZ2V0RGVmYXVsdE1pZGRsZXdhcmUob3B0aW9ucylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGFueSBhcnJheSBjb250YWluaW5nIHRoZSBkZWZhdWx0IG1pZGRsZXdhcmUgaW5zdGFsbGVkIGJ5XHJcbiAqIGBjb25maWd1cmVTdG9yZSgpYC4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGNvbmZpZ3VyZSB5b3VyIHN0b3JlIHdpdGggYSBjdXN0b21cclxuICogYG1pZGRsZXdhcmVgIGFycmF5IGJ1dCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IHNldC5cclxuICpcclxuICogQHJldHVybiBUaGUgZGVmYXVsdCBtaWRkbGV3YXJlIHVzZWQgYnkgYGNvbmZpZ3VyZVN0b3JlKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqXHJcbiAqIEBkZXByZWNhdGVkIFByZWZlciB0byB1c2UgdGhlIGNhbGxiYWNrIG5vdGF0aW9uIGZvciB0aGUgYG1pZGRsZXdhcmVgIG9wdGlvbiBpbiBgY29uZmlndXJlU3RvcmVgXHJcbiAqIHRvIGFjY2VzcyBhIHByZS10eXBlZCBgZ2V0RGVmYXVsdE1pZGRsZXdhcmVgIGluc3RlYWQuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE1pZGRsZXdhcmU8XHJcbiAgUyA9IGFueSxcclxuICBPIGV4dGVuZHMgUGFydGlhbDxHZXREZWZhdWx0TWlkZGxld2FyZU9wdGlvbnM+ID0ge1xyXG4gICAgdGh1bms6IHRydWVcclxuICAgIGltbXV0YWJsZUNoZWNrOiB0cnVlXHJcbiAgICBzZXJpYWxpemFibGVDaGVjazogdHJ1ZVxyXG4gICAgYWN0aW9uQ3JlYXRvckNoZWNrOiB0cnVlXHJcbiAgfVxyXG4+KFxyXG4gIG9wdGlvbnM6IE8gPSB7fSBhcyBPXHJcbik6IE1pZGRsZXdhcmVBcnJheTxFeGNsdWRlRnJvbVR1cGxlPFtUaHVua01pZGRsZXdhcmVGb3I8UywgTz5dLCBuZXZlcj4+IHtcclxuICBjb25zdCB7XHJcbiAgICB0aHVuayA9IHRydWUsXHJcbiAgICBpbW11dGFibGVDaGVjayA9IHRydWUsXHJcbiAgICBzZXJpYWxpemFibGVDaGVjayA9IHRydWUsXHJcbiAgICBhY3Rpb25DcmVhdG9yQ2hlY2sgPSB0cnVlLFxyXG4gIH0gPSBvcHRpb25zXHJcblxyXG4gIGxldCBtaWRkbGV3YXJlQXJyYXkgPSBuZXcgTWlkZGxld2FyZUFycmF5PE1pZGRsZXdhcmVbXT4oKVxyXG5cclxuICBpZiAodGh1bmspIHtcclxuICAgIGlmIChpc0Jvb2xlYW4odGh1bmspKSB7XHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHRodW5rTWlkZGxld2FyZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKFxyXG4gICAgICAgIHRodW5rTWlkZGxld2FyZS53aXRoRXh0cmFBcmd1bWVudCh0aHVuay5leHRyYUFyZ3VtZW50KVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgaWYgKGltbXV0YWJsZUNoZWNrKSB7XHJcbiAgICAgIC8qIFBST0RfU1RBUlRfUkVNT1ZFX1VNRCAqL1xyXG4gICAgICBsZXQgaW1tdXRhYmxlT3B0aW9uczogSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcblxyXG4gICAgICBpZiAoIWlzQm9vbGVhbihpbW11dGFibGVDaGVjaykpIHtcclxuICAgICAgICBpbW11dGFibGVPcHRpb25zID0gaW1tdXRhYmxlQ2hlY2tcclxuICAgICAgfVxyXG5cclxuICAgICAgbWlkZGxld2FyZUFycmF5LnVuc2hpZnQoXHJcbiAgICAgICAgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKGltbXV0YWJsZU9wdGlvbnMpXHJcbiAgICAgIClcclxuICAgICAgLyogUFJPRF9TVE9QX1JFTU9WRV9VTUQgKi9cclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VyaWFsaXphYmxlQ2hlY2spIHtcclxuICAgICAgbGV0IHNlcmlhbGl6YWJsZU9wdGlvbnM6IFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgPSB7fVxyXG5cclxuICAgICAgaWYgKCFpc0Jvb2xlYW4oc2VyaWFsaXphYmxlQ2hlY2spKSB7XHJcbiAgICAgICAgc2VyaWFsaXphYmxlT3B0aW9ucyA9IHNlcmlhbGl6YWJsZUNoZWNrXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKFxyXG4gICAgICAgIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShzZXJpYWxpemFibGVPcHRpb25zKVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBpZiAoYWN0aW9uQ3JlYXRvckNoZWNrKSB7XHJcbiAgICAgIGxldCBhY3Rpb25DcmVhdG9yT3B0aW9uczogQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zID0ge31cclxuXHJcbiAgICAgIGlmICghaXNCb29sZWFuKGFjdGlvbkNyZWF0b3JDaGVjaykpIHtcclxuICAgICAgICBhY3Rpb25DcmVhdG9yT3B0aW9ucyA9IGFjdGlvbkNyZWF0b3JDaGVja1xyXG4gICAgICB9XHJcblxyXG4gICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChcclxuICAgICAgICBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZShhY3Rpb25DcmVhdG9yT3B0aW9ucylcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1pZGRsZXdhcmVBcnJheSBhcyBhbnlcclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlLCBTdG9yZUVuaGFuY2VyIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB0eXBlIHsgRW5oYW5jZXJBcnJheSwgTWlkZGxld2FyZUFycmF5IH0gZnJvbSAnLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiByZXR1cm4gVHJ1ZSBpZiBUIGlzIGBhbnlgLCBvdGhlcndpc2UgcmV0dXJuIEZhbHNlXHJcbiAqIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pvb25ob2Noby90c2RlZlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElzQW55PFQsIFRydWUsIEZhbHNlID0gbmV2ZXI+ID1cclxuICAvLyB0ZXN0IGlmIHdlIGFyZSBnb2luZyB0aGUgbGVmdCBBTkQgcmlnaHQgcGF0aCBpbiB0aGUgY29uZGl0aW9uXHJcbiAgdHJ1ZSB8IGZhbHNlIGV4dGVuZHMgKFQgZXh0ZW5kcyBuZXZlciA/IHRydWUgOiBmYWxzZSkgPyBUcnVlIDogRmFsc2VcclxuXHJcbi8qKlxyXG4gKiByZXR1cm4gVHJ1ZSBpZiBUIGlzIGB1bmtub3duYCwgb3RoZXJ3aXNlIHJldHVybiBGYWxzZVxyXG4gKiB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qb29uaG9jaG8vdHNkZWZcclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJc1Vua25vd248VCwgVHJ1ZSwgRmFsc2UgPSBuZXZlcj4gPSB1bmtub3duIGV4dGVuZHMgVFxyXG4gID8gSXNBbnk8VCwgRmFsc2UsIFRydWU+XHJcbiAgOiBGYWxzZVxyXG5cclxuZXhwb3J0IHR5cGUgRmFsbGJhY2tJZlVua25vd248VCwgRmFsbGJhY2s+ID0gSXNVbmtub3duPFQsIEZhbGxiYWNrLCBUPlxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgSWZNYXliZVVuZGVmaW5lZDxQLCBUcnVlLCBGYWxzZT4gPSBbdW5kZWZpbmVkXSBleHRlbmRzIFtQXVxyXG4gID8gVHJ1ZVxyXG4gIDogRmFsc2VcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElmVm9pZDxQLCBUcnVlLCBGYWxzZT4gPSBbdm9pZF0gZXh0ZW5kcyBbUF0gPyBUcnVlIDogRmFsc2VcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElzRW1wdHlPYmo8VCwgVHJ1ZSwgRmFsc2UgPSBuZXZlcj4gPSBUIGV4dGVuZHMgYW55XHJcbiAgPyBrZXlvZiBUIGV4dGVuZHMgbmV2ZXJcclxuICAgID8gSXNVbmtub3duPFQsIEZhbHNlLCBJZk1heWJlVW5kZWZpbmVkPFQsIEZhbHNlLCBJZlZvaWQ8VCwgRmFsc2UsIFRydWU+Pj5cclxuICAgIDogRmFsc2VcclxuICA6IG5ldmVyXHJcblxyXG4vKipcclxuICogcmV0dXJucyBUcnVlIGlmIFRTIHZlcnNpb24gaXMgYWJvdmUgMy41LCBGYWxzZSBpZiBiZWxvdy5cclxuICogdXNlcyBmZWF0dXJlIGRldGVjdGlvbiB0byBkZXRlY3QgVFMgdmVyc2lvbiA+PSAzLjVcclxuICogKiB2ZXJzaW9ucyBiZWxvdyAzLjUgd2lsbCByZXR1cm4gYHt9YCBmb3IgdW5yZXNvbHZhYmxlIGludGVyZmVyZW5jZVxyXG4gKiAqIHZlcnNpb25zIGFib3ZlIHdpbGwgcmV0dXJuIGB1bmtub3duYFxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIEF0TGVhc3RUUzM1PFRydWUsIEZhbHNlPiA9IFtUcnVlLCBGYWxzZV1bSXNVbmtub3duPFxyXG4gIFJldHVyblR5cGU8PFQ+KCkgPT4gVD4sXHJcbiAgMCxcclxuICAxXHJcbj5dXHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJc1Vua25vd25Pck5vbkluZmVycmFibGU8VCwgVHJ1ZSwgRmFsc2U+ID0gQXRMZWFzdFRTMzU8XHJcbiAgSXNVbmtub3duPFQsIFRydWUsIEZhbHNlPixcclxuICBJc0VtcHR5T2JqPFQsIFRydWUsIElzVW5rbm93bjxULCBUcnVlLCBGYWxzZT4+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IGEgVW5pb24gdHlwZSBgKEF8QilgIHRvIGFuIGludGVyc2VjdGlvbiB0eXBlIGAoQSZCKWBcclxuICovXHJcbmV4cG9ydCB0eXBlIFVuaW9uVG9JbnRlcnNlY3Rpb248VT4gPSAoXHJcbiAgVSBleHRlbmRzIGFueSA/IChrOiBVKSA9PiB2b2lkIDogbmV2ZXJcclxuKSBleHRlbmRzIChrOiBpbmZlciBJKSA9PiB2b2lkXHJcbiAgPyBJXHJcbiAgOiBuZXZlclxyXG5cclxuLy8gQXBwZWFycyB0byBoYXZlIGEgY29udmVuaWVudCBzaWRlIGVmZmVjdCBvZiBpZ25vcmluZyBgbmV2ZXJgIGV2ZW4gaWYgdGhhdCdzIG5vdCB3aGF0IHlvdSBzcGVjaWZpZWRcclxuZXhwb3J0IHR5cGUgRXhjbHVkZUZyb21UdXBsZTxULCBFLCBBY2MgZXh0ZW5kcyB1bmtub3duW10gPSBbXT4gPSBUIGV4dGVuZHMgW1xyXG4gIGluZmVyIEhlYWQsXHJcbiAgLi4uaW5mZXIgVGFpbFxyXG5dXHJcbiAgPyBFeGNsdWRlRnJvbVR1cGxlPFRhaWwsIEUsIFsuLi5BY2MsIC4uLihbSGVhZF0gZXh0ZW5kcyBbRV0gPyBbXSA6IFtIZWFkXSldPlxyXG4gIDogQWNjXHJcblxyXG50eXBlIEV4dHJhY3REaXNwYXRjaEZyb21NaWRkbGV3YXJlVHVwbGU8XHJcbiAgTWlkZGxld2FyZVR1cGxlIGV4dGVuZHMgYW55W10sXHJcbiAgQWNjIGV4dGVuZHMge31cclxuPiA9IE1pZGRsZXdhcmVUdXBsZSBleHRlbmRzIFtpbmZlciBIZWFkLCAuLi5pbmZlciBUYWlsXVxyXG4gID8gRXh0cmFjdERpc3BhdGNoRnJvbU1pZGRsZXdhcmVUdXBsZTxcclxuICAgICAgVGFpbCxcclxuICAgICAgQWNjICYgKEhlYWQgZXh0ZW5kcyBNaWRkbGV3YXJlPGluZmVyIEQ+ID8gSXNBbnk8RCwge30sIEQ+IDoge30pXHJcbiAgICA+XHJcbiAgOiBBY2NcclxuXHJcbmV4cG9ydCB0eXBlIEV4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnM8TT4gPSBNIGV4dGVuZHMgTWlkZGxld2FyZUFycmF5PFxyXG4gIGluZmVyIE1pZGRsZXdhcmVUdXBsZVxyXG4+XHJcbiAgPyBFeHRyYWN0RGlzcGF0Y2hGcm9tTWlkZGxld2FyZVR1cGxlPE1pZGRsZXdhcmVUdXBsZSwge30+XHJcbiAgOiBNIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPlxyXG4gID8gRXh0cmFjdERpc3BhdGNoRnJvbU1pZGRsZXdhcmVUdXBsZTxbLi4uTV0sIHt9PlxyXG4gIDogbmV2ZXJcclxuXHJcbnR5cGUgRXh0cmFjdFN0b3JlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPFxyXG4gIEVuaGFuY2VyVHVwbGUgZXh0ZW5kcyBhbnlbXSxcclxuICBBY2MgZXh0ZW5kcyB7fVxyXG4+ID0gRW5oYW5jZXJUdXBsZSBleHRlbmRzIFtpbmZlciBIZWFkLCAuLi5pbmZlciBUYWlsXVxyXG4gID8gRXh0cmFjdFN0b3JlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPFxyXG4gICAgICBUYWlsLFxyXG4gICAgICBBY2MgJiAoSGVhZCBleHRlbmRzIFN0b3JlRW5oYW5jZXI8aW5mZXIgRXh0PiA/IElzQW55PEV4dCwge30sIEV4dD4gOiB7fSlcclxuICAgID5cclxuICA6IEFjY1xyXG5cclxuZXhwb3J0IHR5cGUgRXh0cmFjdFN0b3JlRXh0ZW5zaW9uczxFPiA9IEUgZXh0ZW5kcyBFbmhhbmNlckFycmF5PFxyXG4gIGluZmVyIEVuaGFuY2VyVHVwbGVcclxuPlxyXG4gID8gRXh0cmFjdFN0b3JlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPEVuaGFuY2VyVHVwbGUsIHt9PlxyXG4gIDogRSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8U3RvcmVFbmhhbmNlcj5cclxuICA/IFVuaW9uVG9JbnRlcnNlY3Rpb248XHJcbiAgICAgIEVbbnVtYmVyXSBleHRlbmRzIFN0b3JlRW5oYW5jZXI8aW5mZXIgRXh0PlxyXG4gICAgICAgID8gRXh0IGV4dGVuZHMge31cclxuICAgICAgICAgID8gSXNBbnk8RXh0LCB7fSwgRXh0PlxyXG4gICAgICAgICAgOiB7fVxyXG4gICAgICAgIDoge31cclxuICAgID5cclxuICA6IG5ldmVyXHJcblxyXG50eXBlIEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxcclxuICBFbmhhbmNlclR1cGxlIGV4dGVuZHMgYW55W10sXHJcbiAgQWNjIGV4dGVuZHMge31cclxuPiA9IEVuaGFuY2VyVHVwbGUgZXh0ZW5kcyBbaW5mZXIgSGVhZCwgLi4uaW5mZXIgVGFpbF1cclxuICA/IEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxcclxuICAgICAgVGFpbCxcclxuICAgICAgQWNjICZcclxuICAgICAgICAoSGVhZCBleHRlbmRzIFN0b3JlRW5oYW5jZXI8YW55LCBpbmZlciBTdGF0ZUV4dD5cclxuICAgICAgICAgID8gSXNBbnk8U3RhdGVFeHQsIHt9LCBTdGF0ZUV4dD5cclxuICAgICAgICAgIDoge30pXHJcbiAgICA+XHJcbiAgOiBBY2NcclxuXHJcbmV4cG9ydCB0eXBlIEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnM8RT4gPSBFIGV4dGVuZHMgRW5oYW5jZXJBcnJheTxcclxuICBpbmZlciBFbmhhbmNlclR1cGxlXHJcbj5cclxuICA/IEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxFbmhhbmNlclR1cGxlLCB7fT5cclxuICA6IEUgZXh0ZW5kcyBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI+XHJcbiAgPyBVbmlvblRvSW50ZXJzZWN0aW9uPFxyXG4gICAgICBFW251bWJlcl0gZXh0ZW5kcyBTdG9yZUVuaGFuY2VyPGFueSwgaW5mZXIgU3RhdGVFeHQ+XHJcbiAgICAgICAgPyBTdGF0ZUV4dCBleHRlbmRzIHt9XHJcbiAgICAgICAgICA/IElzQW55PFN0YXRlRXh0LCB7fSwgU3RhdGVFeHQ+XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgICAgOiB7fVxyXG4gICAgPlxyXG4gIDogbmV2ZXJcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgdHlwZS4gUGFzc2VzIFQgb3V0IGFnYWluLCBidXQgYm94ZXMgaXQgaW4gYSB3YXkgdGhhdCBpdCBjYW5ub3RcclxuICogXCJ3aWRlblwiIHRoZSB0eXBlIGJ5IGFjY2lkZW50IGlmIGl0IGlzIGEgZ2VuZXJpYyB0aGF0IHNob3VsZCBiZSBpbmZlcnJlZFxyXG4gKiBmcm9tIGVsc2V3aGVyZS5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBOb0luZmVyPFQ+ID0gW1RdW1QgZXh0ZW5kcyBhbnkgPyAwIDogbmV2ZXJdXHJcblxyXG5leHBvcnQgdHlwZSBPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBhbnk+ID0gUGljazxULCBFeGNsdWRlPGtleW9mIFQsIEs+PlxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUeXBlR3VhcmQ8VD4ge1xyXG4gICh2YWx1ZTogYW55KTogdmFsdWUgaXMgVFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhhc01hdGNoRnVuY3Rpb248VD4ge1xyXG4gIG1hdGNoOiBUeXBlR3VhcmQ8VD5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGhhc01hdGNoRnVuY3Rpb24gPSA8VD4oXHJcbiAgdjogTWF0Y2hlcjxUPlxyXG4pOiB2IGlzIEhhc01hdGNoRnVuY3Rpb248VD4gPT4ge1xyXG4gIHJldHVybiB2ICYmIHR5cGVvZiAodiBhcyBIYXNNYXRjaEZ1bmN0aW9uPFQ+KS5tYXRjaCA9PT0gJ2Z1bmN0aW9uJ1xyXG59XHJcblxyXG4vKiogQHB1YmxpYyAqL1xyXG5leHBvcnQgdHlwZSBNYXRjaGVyPFQ+ID0gSGFzTWF0Y2hGdW5jdGlvbjxUPiB8IFR5cGVHdWFyZDxUPlxyXG5cclxuLyoqIEBwdWJsaWMgKi9cclxuZXhwb3J0IHR5cGUgQWN0aW9uRnJvbU1hdGNoZXI8TSBleHRlbmRzIE1hdGNoZXI8YW55Pj4gPSBNIGV4dGVuZHMgTWF0Y2hlcjxcclxuICBpbmZlciBUXHJcbj5cclxuICA/IFRcclxuICA6IG5ldmVyXHJcblxyXG5leHBvcnQgdHlwZSBJZDxUPiA9IHsgW0sgaW4ga2V5b2YgVF06IFRbS10gfSAmIHt9XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgSXNVbmtub3duT3JOb25JbmZlcnJhYmxlLFxyXG4gIElmTWF5YmVVbmRlZmluZWQsXHJcbiAgSWZWb2lkLFxyXG4gIElzQW55LFxyXG59IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBoYXNNYXRjaEZ1bmN0aW9uIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJy4vaXNQbGFpbk9iamVjdCdcclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gd2l0aCBhIHN0cmluZyB0eXBlIGFuZCBhbiBhc3NvY2lhdGVkIHBheWxvYWQuIFRoaXMgaXMgdGhlXHJcbiAqIHR5cGUgb2YgYWN0aW9uIHJldHVybmVkIGJ5IGBjcmVhdGVBY3Rpb24oKWAgYWN0aW9uIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgUCBUaGUgdHlwZSBvZiB0aGUgYWN0aW9uJ3MgcGF5bG9hZC5cclxuICogQHRlbXBsYXRlIFQgdGhlIHR5cGUgdXNlZCBmb3IgdGhlIGFjdGlvbiB0eXBlLlxyXG4gKiBAdGVtcGxhdGUgTSBUaGUgdHlwZSBvZiB0aGUgYWN0aW9uJ3MgbWV0YSAob3B0aW9uYWwpXHJcbiAqIEB0ZW1wbGF0ZSBFIFRoZSB0eXBlIG9mIHRoZSBhY3Rpb24ncyBlcnJvciAob3B0aW9uYWwpXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIFBheWxvYWRBY3Rpb248XHJcbiAgUCA9IHZvaWQsXHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcclxuICBNID0gbmV2ZXIsXHJcbiAgRSA9IG5ldmVyXHJcbj4gPSB7XHJcbiAgcGF5bG9hZDogUFxyXG4gIHR5cGU6IFRcclxufSAmIChbTV0gZXh0ZW5kcyBbbmV2ZXJdXHJcbiAgPyB7fVxyXG4gIDoge1xyXG4gICAgICBtZXRhOiBNXHJcbiAgICB9KSAmXHJcbiAgKFtFXSBleHRlbmRzIFtuZXZlcl1cclxuICAgID8ge31cclxuICAgIDoge1xyXG4gICAgICAgIGVycm9yOiBFXHJcbiAgICAgIH0pXHJcblxyXG4vKipcclxuICogQSBcInByZXBhcmVcIiBtZXRob2QgdG8gYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlciBvZiBgY3JlYXRlQWN0aW9uYC5cclxuICogVGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgYSBGbHV4IFN0YW5kYXJkIEFjdGlvbiB3aXRob3V0XHJcbiAqIHR5cGUgKHdpbGwgYmUgYWRkZWQgbGF0ZXIpIHRoYXQgKm11c3QqIGNvbnRhaW4gYSBwYXlsb2FkIChtaWdodCBiZSB1bmRlZmluZWQpLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBQcmVwYXJlQWN0aW9uPFA+ID1cclxuICB8ICgoLi4uYXJnczogYW55W10pID0+IHsgcGF5bG9hZDogUCB9KVxyXG4gIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4geyBwYXlsb2FkOiBQOyBtZXRhOiBhbnkgfSlcclxuICB8ICgoLi4uYXJnczogYW55W10pID0+IHsgcGF5bG9hZDogUDsgZXJyb3I6IGFueSB9KVxyXG4gIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4geyBwYXlsb2FkOiBQOyBtZXRhOiBhbnk7IGVycm9yOiBhbnkgfSlcclxuXHJcbi8qKlxyXG4gKiBJbnRlcm5hbCB2ZXJzaW9uIG9mIGBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZGAuIE5vdCB0byBiZSB1c2VkIGV4dGVybmFsbHkuXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgX0FjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxhbnk+IHwgdm9pZCxcclxuICBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nXHJcbj4gPSBQQSBleHRlbmRzIFByZXBhcmVBY3Rpb248aW5mZXIgUD5cclxuICA/IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gICAgICBQYXJhbWV0ZXJzPFBBPixcclxuICAgICAgUCxcclxuICAgICAgVCxcclxuICAgICAgUmV0dXJuVHlwZTxQQT4gZXh0ZW5kcyB7XHJcbiAgICAgICAgZXJyb3I6IGluZmVyIEVcclxuICAgICAgfVxyXG4gICAgICAgID8gRVxyXG4gICAgICAgIDogbmV2ZXIsXHJcbiAgICAgIFJldHVyblR5cGU8UEE+IGV4dGVuZHMge1xyXG4gICAgICAgIG1ldGE6IGluZmVyIE1cclxuICAgICAgfVxyXG4gICAgICAgID8gTVxyXG4gICAgICAgIDogbmV2ZXJcclxuICAgID5cclxuICA6IHZvaWRcclxuXHJcbi8qKlxyXG4gKiBCYXNpYyB0eXBlIGZvciBhbGwgYWN0aW9uIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAaW5oZXJpdGRvYyB7cmVkdXgjQWN0aW9uQ3JlYXRvcn1cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUFjdGlvbkNyZWF0b3I8UCwgVCBleHRlbmRzIHN0cmluZywgTSA9IG5ldmVyLCBFID0gbmV2ZXI+IHtcclxuICB0eXBlOiBUXHJcbiAgbWF0Y2g6IChhY3Rpb246IEFjdGlvbjx1bmtub3duPikgPT4gYWN0aW9uIGlzIFBheWxvYWRBY3Rpb248UCwgVCwgTSwgRT5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIHRoYXQgdGFrZXMgbXVsdGlwbGUgYXJndW1lbnRzIHRoYXQgYXJlIHBhc3NlZFxyXG4gKiB0byBhIGBQcmVwYXJlQWN0aW9uYCBtZXRob2QgdG8gY3JlYXRlIHRoZSBmaW5hbCBBY3Rpb24uXHJcbiAqIEB0eXBlUGFyYW0gQXJncyBhcmd1bWVudHMgZm9yIHRoZSBhY3Rpb24gY3JlYXRvciBmdW5jdGlvblxyXG4gKiBAdHlwZVBhcmFtIFAgYHBheWxvYWRgIHR5cGVcclxuICogQHR5cGVQYXJhbSBUIGB0eXBlYCBuYW1lXHJcbiAqIEB0eXBlUGFyYW0gRSBvcHRpb25hbCBgZXJyb3JgIHR5cGVcclxuICogQHR5cGVQYXJhbSBNIG9wdGlvbmFsIGBtZXRhYCB0eXBlXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sXHJcbiAgUCxcclxuICBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxyXG4gIEUgPSBuZXZlcixcclxuICBNID0gbmV2ZXJcclxuPiBleHRlbmRzIEJhc2VBY3Rpb25DcmVhdG9yPFAsIFQsIE0sIEU+IHtcclxuICAvKipcclxuICAgKiBDYWxsaW5nIHRoaXMge0BsaW5rIHJlZHV4I0FjdGlvbkNyZWF0b3J9IHdpdGggYEFyZ3NgIHdpbGwgcmV0dXJuXHJcbiAgICogYW4gQWN0aW9uIHdpdGggYSBwYXlsb2FkIG9mIHR5cGUgYFBgIGFuZCAoZGVwZW5kaW5nIG9uIHRoZSBgUHJlcGFyZUFjdGlvbmBcclxuICAgKiBtZXRob2QgdXNlZCkgYSBgbWV0YWAtIGFuZCBgZXJyb3JgIHByb3BlcnR5IG9mIHR5cGVzIGBNYCBhbmQgYEVgIHJlc3BlY3RpdmVseS5cclxuICAgKi9cclxuICAoLi4uYXJnczogQXJncyk6IFBheWxvYWRBY3Rpb248UCwgVCwgTSwgRT5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIG9mIHR5cGUgYFRgIHRoYXQgdGFrZXMgYW4gb3B0aW9uYWwgcGF5bG9hZCBvZiB0eXBlIGBQYC5cclxuICpcclxuICogQGluaGVyaXRkb2Mge3JlZHV4I0FjdGlvbkNyZWF0b3J9XHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ3JlYXRvcldpdGhPcHRpb25hbFBheWxvYWQ8UCwgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz5cclxuICBleHRlbmRzIEJhc2VBY3Rpb25DcmVhdG9yPFAsIFQ+IHtcclxuICAvKipcclxuICAgKiBDYWxsaW5nIHRoaXMge0BsaW5rIHJlZHV4I0FjdGlvbkNyZWF0b3J9IHdpdGggYW4gYXJndW1lbnQgd2lsbFxyXG4gICAqIHJldHVybiBhIHtAbGluayBQYXlsb2FkQWN0aW9ufSBvZiB0eXBlIGBUYCB3aXRoIGEgcGF5bG9hZCBvZiBgUGAuXHJcbiAgICogQ2FsbGluZyBpdCB3aXRob3V0IGFuIGFyZ3VtZW50IHdpbGwgcmV0dXJuIGEgUGF5bG9hZEFjdGlvbiB3aXRoIGEgcGF5bG9hZCBvZiBgdW5kZWZpbmVkYC5cclxuICAgKi9cclxuICAocGF5bG9hZD86IFApOiBQYXlsb2FkQWN0aW9uPFAsIFQ+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gY3JlYXRvciBvZiB0eXBlIGBUYCB0aGF0IHRha2VzIG5vIHBheWxvYWQuXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRob3V0UGF5bG9hZDxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPlxyXG4gIGV4dGVuZHMgQmFzZUFjdGlvbkNyZWF0b3I8dW5kZWZpbmVkLCBUPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGluZyB0aGlzIHtAbGluayByZWR1eCNBY3Rpb25DcmVhdG9yfSB3aWxsXHJcbiAgICogcmV0dXJuIGEge0BsaW5rIFBheWxvYWRBY3Rpb259IG9mIHR5cGUgYFRgIHdpdGggYSBwYXlsb2FkIG9mIGB1bmRlZmluZWRgXHJcbiAgICovXHJcbiAgKG5vQXJndW1lbnQ6IHZvaWQpOiBQYXlsb2FkQWN0aW9uPHVuZGVmaW5lZCwgVD5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIG9mIHR5cGUgYFRgIHRoYXQgcmVxdWlyZXMgYSBwYXlsb2FkIG9mIHR5cGUgUC5cclxuICpcclxuICogQGluaGVyaXRkb2Mge3JlZHV4I0FjdGlvbkNyZWF0b3J9XHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ3JlYXRvcldpdGhQYXlsb2FkPFAsIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBCYXNlQWN0aW9uQ3JlYXRvcjxQLCBUPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGluZyB0aGlzIHtAbGluayByZWR1eCNBY3Rpb25DcmVhdG9yfSB3aXRoIGFuIGFyZ3VtZW50IHdpbGxcclxuICAgKiByZXR1cm4gYSB7QGxpbmsgUGF5bG9hZEFjdGlvbn0gb2YgdHlwZSBgVGAgd2l0aCBhIHBheWxvYWQgb2YgYFBgXHJcbiAgICovXHJcbiAgKHBheWxvYWQ6IFApOiBQYXlsb2FkQWN0aW9uPFAsIFQ+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gY3JlYXRvciBvZiB0eXBlIGBUYCB3aG9zZSBgcGF5bG9hZGAgdHlwZSBjb3VsZCBub3QgYmUgaW5mZXJyZWQuIEFjY2VwdHMgZXZlcnl0aGluZyBhcyBgcGF5bG9hZGAuXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRoTm9uSW5mZXJyYWJsZVBheWxvYWQ8XHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xyXG4+IGV4dGVuZHMgQmFzZUFjdGlvbkNyZWF0b3I8dW5rbm93biwgVD4ge1xyXG4gIC8qKlxyXG4gICAqIENhbGxpbmcgdGhpcyB7QGxpbmsgcmVkdXgjQWN0aW9uQ3JlYXRvcn0gd2l0aCBhbiBhcmd1bWVudCB3aWxsXHJcbiAgICogcmV0dXJuIGEge0BsaW5rIFBheWxvYWRBY3Rpb259IG9mIHR5cGUgYFRgIHdpdGggYSBwYXlsb2FkXHJcbiAgICogb2YgZXhhY3RseSB0aGUgdHlwZSBvZiB0aGUgYXJndW1lbnQuXHJcbiAgICovXHJcbiAgPFBUIGV4dGVuZHMgdW5rbm93bj4ocGF5bG9hZDogUFQpOiBQYXlsb2FkQWN0aW9uPFBULCBUPlxyXG59XHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIGNyZWF0b3IgdGhhdCBwcm9kdWNlcyBhY3Rpb25zIHdpdGggYSBgcGF5bG9hZGAgYXR0cmlidXRlLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFAgdGhlIGBwYXlsb2FkYCB0eXBlXHJcbiAqIEB0eXBlUGFyYW0gVCB0aGUgYHR5cGVgIG9mIHRoZSByZXN1bHRpbmcgYWN0aW9uXHJcbiAqIEB0eXBlUGFyYW0gUEEgaWYgdGhlIHJlc3VsdGluZyBhY3Rpb24gaXMgcHJlcHJvY2Vzc2VkIGJ5IGEgYHByZXBhcmVgIG1ldGhvZCwgdGhlIHNpZ25hdHVyZSBvZiBzYWlkIG1ldGhvZC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgUGF5bG9hZEFjdGlvbkNyZWF0b3I8XHJcbiAgUCA9IHZvaWQsXHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcclxuICBQQSBleHRlbmRzIFByZXBhcmVBY3Rpb248UD4gfCB2b2lkID0gdm9pZFxyXG4+ID0gSWZQcmVwYXJlQWN0aW9uTWV0aG9kUHJvdmlkZWQ8XHJcbiAgUEEsXHJcbiAgX0FjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFBBLCBUPixcclxuICAvLyBlbHNlXHJcbiAgSXNBbnk8XHJcbiAgICBQLFxyXG4gICAgQWN0aW9uQ3JlYXRvcldpdGhQYXlsb2FkPGFueSwgVD4sXHJcbiAgICBJc1Vua25vd25Pck5vbkluZmVycmFibGU8XHJcbiAgICAgIFAsXHJcbiAgICAgIEFjdGlvbkNyZWF0b3JXaXRoTm9uSW5mZXJyYWJsZVBheWxvYWQ8VD4sXHJcbiAgICAgIC8vIGVsc2VcclxuICAgICAgSWZWb2lkPFxyXG4gICAgICAgIFAsXHJcbiAgICAgICAgQWN0aW9uQ3JlYXRvcldpdGhvdXRQYXlsb2FkPFQ+LFxyXG4gICAgICAgIC8vIGVsc2VcclxuICAgICAgICBJZk1heWJlVW5kZWZpbmVkPFxyXG4gICAgICAgICAgUCxcclxuICAgICAgICAgIEFjdGlvbkNyZWF0b3JXaXRoT3B0aW9uYWxQYXlsb2FkPFAsIFQ+LFxyXG4gICAgICAgICAgLy8gZWxzZVxyXG4gICAgICAgICAgQWN0aW9uQ3JlYXRvcldpdGhQYXlsb2FkPFAsIFQ+XHJcbiAgICAgICAgPlxyXG4gICAgICA+XHJcbiAgICA+XHJcbiAgPlxyXG4+XHJcblxyXG4vKipcclxuICogQSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBhY3Rpb24gY3JlYXRvciBmb3IgdGhlIGdpdmVuIGFjdGlvbiB0eXBlXHJcbiAqIHN0cmluZy4gVGhlIGFjdGlvbiBjcmVhdG9yIGFjY2VwdHMgYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgaW5jbHVkZWRcclxuICogaW4gdGhlIGFjdGlvbiBvYmplY3QgYXMgYSBmaWVsZCBjYWxsZWQgcGF5bG9hZC4gVGhlIGFjdGlvbiBjcmVhdG9yIGZ1bmN0aW9uXHJcbiAqIHdpbGwgYWxzbyBoYXZlIGl0cyB0b1N0cmluZygpIG92ZXJyaWRkZW4gc28gdGhhdCBpdCByZXR1cm5zIHRoZSBhY3Rpb24gdHlwZSxcclxuICogYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBpbiByZWR1Y2VyIGxvZ2ljIHRoYXQgaXMgbG9va2luZyBmb3IgdGhhdCBhY3Rpb24gdHlwZS5cclxuICpcclxuICogQHBhcmFtIHR5cGUgVGhlIGFjdGlvbiB0eXBlIHRvIHVzZSBmb3IgY3JlYXRlZCBhY3Rpb25zLlxyXG4gKiBAcGFyYW0gcHJlcGFyZSAob3B0aW9uYWwpIGEgbWV0aG9kIHRoYXQgdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgeyBwYXlsb2FkIH0gb3IgeyBwYXlsb2FkLCBtZXRhIH0uXHJcbiAqICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgZ2l2ZW4sIHRoZSByZXN1bHRpbmcgYWN0aW9uIGNyZWF0b3Igd2lsbCBwYXNzIGl0cyBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QgdG8gY2FsY3VsYXRlIHBheWxvYWQgJiBtZXRhLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uPFAgPSB2b2lkLCBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihcclxuICB0eXBlOiBUXHJcbik6IFBheWxvYWRBY3Rpb25DcmVhdG9yPFAsIFQ+XHJcblxyXG4vKipcclxuICogQSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBhY3Rpb24gY3JlYXRvciBmb3IgdGhlIGdpdmVuIGFjdGlvbiB0eXBlXHJcbiAqIHN0cmluZy4gVGhlIGFjdGlvbiBjcmVhdG9yIGFjY2VwdHMgYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgaW5jbHVkZWRcclxuICogaW4gdGhlIGFjdGlvbiBvYmplY3QgYXMgYSBmaWVsZCBjYWxsZWQgcGF5bG9hZC4gVGhlIGFjdGlvbiBjcmVhdG9yIGZ1bmN0aW9uXHJcbiAqIHdpbGwgYWxzbyBoYXZlIGl0cyB0b1N0cmluZygpIG92ZXJyaWRkZW4gc28gdGhhdCBpdCByZXR1cm5zIHRoZSBhY3Rpb24gdHlwZSxcclxuICogYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBpbiByZWR1Y2VyIGxvZ2ljIHRoYXQgaXMgbG9va2luZyBmb3IgdGhhdCBhY3Rpb24gdHlwZS5cclxuICpcclxuICogQHBhcmFtIHR5cGUgVGhlIGFjdGlvbiB0eXBlIHRvIHVzZSBmb3IgY3JlYXRlZCBhY3Rpb25zLlxyXG4gKiBAcGFyYW0gcHJlcGFyZSAob3B0aW9uYWwpIGEgbWV0aG9kIHRoYXQgdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgeyBwYXlsb2FkIH0gb3IgeyBwYXlsb2FkLCBtZXRhIH0uXHJcbiAqICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgZ2l2ZW4sIHRoZSByZXN1bHRpbmcgYWN0aW9uIGNyZWF0b3Igd2lsbCBwYXNzIGl0cyBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QgdG8gY2FsY3VsYXRlIHBheWxvYWQgJiBtZXRhLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uPFxyXG4gIFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxhbnk+LFxyXG4gIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmdcclxuPihcclxuICB0eXBlOiBULFxyXG4gIHByZXBhcmVBY3Rpb246IFBBXHJcbik6IFBheWxvYWRBY3Rpb25DcmVhdG9yPFJldHVyblR5cGU8UEE+WydwYXlsb2FkJ10sIFQsIFBBPlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbih0eXBlOiBzdHJpbmcsIHByZXBhcmVBY3Rpb24/OiBGdW5jdGlvbik6IGFueSB7XHJcbiAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvciguLi5hcmdzOiBhbnlbXSkge1xyXG4gICAgaWYgKHByZXBhcmVBY3Rpb24pIHtcclxuICAgICAgbGV0IHByZXBhcmVkID0gcHJlcGFyZUFjdGlvbiguLi5hcmdzKVxyXG4gICAgICBpZiAoIXByZXBhcmVkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcmVwYXJlQWN0aW9uIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdCcpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICBwYXlsb2FkOiBwcmVwYXJlZC5wYXlsb2FkLFxyXG4gICAgICAgIC4uLignbWV0YScgaW4gcHJlcGFyZWQgJiYgeyBtZXRhOiBwcmVwYXJlZC5tZXRhIH0pLFxyXG4gICAgICAgIC4uLignZXJyb3InIGluIHByZXBhcmVkICYmIHsgZXJyb3I6IHByZXBhcmVkLmVycm9yIH0pLFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyB0eXBlLCBwYXlsb2FkOiBhcmdzWzBdIH1cclxuICB9XHJcblxyXG4gIGFjdGlvbkNyZWF0b3IudG9TdHJpbmcgPSAoKSA9PiBgJHt0eXBlfWBcclxuXHJcbiAgYWN0aW9uQ3JlYXRvci50eXBlID0gdHlwZVxyXG5cclxuICBhY3Rpb25DcmVhdG9yLm1hdGNoID0gKGFjdGlvbjogQWN0aW9uPHVua25vd24+KTogYWN0aW9uIGlzIFBheWxvYWRBY3Rpb24gPT5cclxuICAgIGFjdGlvbi50eXBlID09PSB0eXBlXHJcblxyXG4gIHJldHVybiBhY3Rpb25DcmVhdG9yXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3Qgd2l0aCBhIGB0eXBlYCBwcm9wZXJ0eS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbihhY3Rpb246IHVua25vd24pOiBhY3Rpb24gaXMgQWN0aW9uPHVua25vd24+IHtcclxuICByZXR1cm4gaXNQbGFpbk9iamVjdChhY3Rpb24pICYmICd0eXBlJyBpbiBhY3Rpb25cclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBSVEstbGlrZSBhY3Rpb24gY3JlYXRvciwgd2l0aCBhIHN0YXRpYyB0eXBlIHByb3BlcnR5IGFuZCBtYXRjaCBtZXRob2QuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25DcmVhdG9yKFxyXG4gIGFjdGlvbjogdW5rbm93blxyXG4pOiBhY3Rpb24gaXMgQmFzZUFjdGlvbkNyZWF0b3I8dW5rbm93biwgc3RyaW5nPiAmIEZ1bmN0aW9uIHtcclxuICByZXR1cm4gKFxyXG4gICAgdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgJ3R5cGUnIGluIGFjdGlvbiAmJlxyXG4gICAgLy8gaGFzTWF0Y2hGdW5jdGlvbiBvbmx5IHdhbnRzIE1hdGNoZXJzIGJ1dCBJIGRvbid0IHNlZSB0aGUgcG9pbnQgaW4gcmV3cml0aW5nIGl0XHJcbiAgICBoYXNNYXRjaEZ1bmN0aW9uKGFjdGlvbiBhcyBhbnkpXHJcbiAgKVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIGFjdGlvbiB3aXRoIGEgc3RyaW5nIHR5cGUgYW5kIHZhbGlkIEZsdXggU3RhbmRhcmQgQWN0aW9uIGtleXMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNGU0EoYWN0aW9uOiB1bmtub3duKTogYWN0aW9uIGlzIHtcclxuICB0eXBlOiBzdHJpbmdcclxuICBwYXlsb2FkPzogdW5rbm93blxyXG4gIGVycm9yPzogdW5rbm93blxyXG4gIG1ldGE/OiB1bmtub3duXHJcbn0ge1xyXG4gIHJldHVybiAoXHJcbiAgICBpc0FjdGlvbihhY3Rpb24pICYmXHJcbiAgICB0eXBlb2YgYWN0aW9uLnR5cGUgPT09ICdzdHJpbmcnICYmXHJcbiAgICBPYmplY3Qua2V5cyhhY3Rpb24pLmV2ZXJ5KGlzVmFsaWRLZXkpXHJcbiAgKVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1ZhbGlkS2V5KGtleTogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIFsndHlwZScsICdwYXlsb2FkJywgJ2Vycm9yJywgJ21ldGEnXS5pbmRleE9mKGtleSkgPiAtMVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgYWN0aW9uIHR5cGUgb2YgdGhlIGFjdGlvbnMgY3JlYXRlZCBieSB0aGUgcGFzc2VkXHJcbiAqIGBjcmVhdGVBY3Rpb24oKWAtZ2VuZXJhdGVkIGFjdGlvbiBjcmVhdG9yIChhcmJpdHJhcnkgYWN0aW9uIGNyZWF0b3JzXHJcbiAqIGFyZSBub3Qgc3VwcG9ydGVkKS5cclxuICpcclxuICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIGNyZWF0b3Igd2hvc2UgYWN0aW9uIHR5cGUgdG8gZ2V0LlxyXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uIHR5cGUgdXNlZCBieSB0aGUgYWN0aW9uIGNyZWF0b3IuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlPFQgZXh0ZW5kcyBzdHJpbmc+KFxyXG4gIGFjdGlvbkNyZWF0b3I6IFBheWxvYWRBY3Rpb25DcmVhdG9yPGFueSwgVD5cclxuKTogVCB7XHJcbiAgcmV0dXJuIGAke2FjdGlvbkNyZWF0b3J9YCBhcyBUXHJcbn1cclxuXHJcbi8vIGhlbHBlciB0eXBlcyBmb3IgbW9yZSByZWFkYWJsZSB0eXBpbmdzXHJcblxyXG50eXBlIElmUHJlcGFyZUFjdGlvbk1ldGhvZFByb3ZpZGVkPFxyXG4gIFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxhbnk+IHwgdm9pZCxcclxuICBUcnVlLFxyXG4gIEZhbHNlXHJcbj4gPSBQQSBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID8gVHJ1ZSA6IEZhbHNlXHJcbiIsICJpbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgaXNBY3Rpb25DcmVhdG9yIGFzIGlzUlRLQWN0aW9uIH0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IHdoZXRoZXIgYSB2YWx1ZSBpcyBhbiBhY3Rpb24gY3JlYXRvci5cclxuICAgKiBUaGUgZGVmYXVsdCBjaGVja3MgZm9yIGEgZnVuY3Rpb24gd2l0aCBhIHN0YXRpYyB0eXBlIHByb3BlcnR5IGFuZCBtYXRjaCBtZXRob2QuXHJcbiAgICovXHJcbiAgaXNBY3Rpb25DcmVhdG9yPzogKGFjdGlvbjogdW5rbm93bikgPT4gYWN0aW9uIGlzIEZ1bmN0aW9uICYgeyB0eXBlPzogdW5rbm93biB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlKHR5cGU/OiB1bmtub3duKSB7XHJcbiAgY29uc3Qgc3BsaXRUeXBlID0gdHlwZSA/IGAke3R5cGV9YC5zcGxpdCgnLycpIDogW11cclxuICBjb25zdCBhY3Rpb25OYW1lID0gc3BsaXRUeXBlW3NwbGl0VHlwZS5sZW5ndGggLSAxXSB8fCAnYWN0aW9uQ3JlYXRvcidcclxuICByZXR1cm4gYERldGVjdGVkIGFuIGFjdGlvbiBjcmVhdG9yIHdpdGggdHlwZSBcIiR7XHJcbiAgICB0eXBlIHx8ICd1bmtub3duJ1xyXG4gIH1cIiBiZWluZyBkaXNwYXRjaGVkLiBcclxuTWFrZSBzdXJlIHlvdSdyZSBjYWxsaW5nIHRoZSBhY3Rpb24gY3JlYXRvciBiZWZvcmUgZGlzcGF0Y2hpbmcsIGkuZS4gXFxgZGlzcGF0Y2goJHthY3Rpb25OYW1lfSgpKVxcYCBpbnN0ZWFkIG9mIFxcYGRpc3BhdGNoKCR7YWN0aW9uTmFtZX0pXFxgLiBUaGlzIGlzIG5lY2Vzc2FyeSBldmVuIGlmIHRoZSBhY3Rpb24gaGFzIG5vIHBheWxvYWQuYFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUoXHJcbiAgb3B0aW9uczogQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zID0ge31cclxuKTogTWlkZGxld2FyZSB7XHJcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcclxuICAgIHJldHVybiAoKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4gbmV4dChhY3Rpb24pXHJcbiAgfVxyXG4gIGNvbnN0IHsgaXNBY3Rpb25DcmVhdG9yID0gaXNSVEtBY3Rpb24gfSA9IG9wdGlvbnNcclxuICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcclxuICAgIGlmIChpc0FjdGlvbkNyZWF0b3IoYWN0aW9uKSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oZ2V0TWVzc2FnZShhY3Rpb24udHlwZSkpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV4dChhY3Rpb24pXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgY3JlYXRlTmV4dFN0YXRlLCB7IGlzRHJhZnRhYmxlIH0gZnJvbSAnaW1tZXInXHJcbmltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSwgU3RvcmVFbmhhbmNlciB9IGZyb20gJ3JlZHV4J1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVNZWFzdXJlVXRpbHMobWF4RGVsYXk6IG51bWJlciwgZm5OYW1lOiBzdHJpbmcpIHtcclxuICBsZXQgZWxhcHNlZCA9IDBcclxuICByZXR1cm4ge1xyXG4gICAgbWVhc3VyZVRpbWU8VD4oZm46ICgpID0+IFQpOiBUIHtcclxuICAgICAgY29uc3Qgc3RhcnRlZCA9IERhdGUubm93KClcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gZm4oKVxyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgIGVsYXBzZWQgKz0gZmluaXNoZWQgLSBzdGFydGVkXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXJuSWZFeGNlZWRlZCgpIHtcclxuICAgICAgaWYgKGVsYXBzZWQgPiBtYXhEZWxheSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgJHtmbk5hbWV9IHRvb2sgJHtlbGFwc2VkfW1zLCB3aGljaCBpcyBtb3JlIHRoYW4gdGhlIHdhcm5pbmcgdGhyZXNob2xkIG9mICR7bWF4RGVsYXl9bXMuIFxyXG5JZiB5b3VyIHN0YXRlIG9yIGFjdGlvbnMgYXJlIHZlcnkgbGFyZ2UsIHlvdSBtYXkgd2FudCB0byBkaXNhYmxlIHRoZSBtaWRkbGV3YXJlIGFzIGl0IG1pZ2h0IGNhdXNlIHRvbyBtdWNoIG9mIGEgc2xvd2Rvd24gaW4gZGV2ZWxvcG1lbnQgbW9kZS4gU2VlIGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2dldERlZmF1bHRNaWRkbGV3YXJlIGZvciBpbnN0cnVjdGlvbnMuXHJcbkl0IGlzIGRpc2FibGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzLCBzbyB5b3UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0LmApXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcikge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTWlkZGxld2FyZUFycmF5PFxyXG4gIE1pZGRsZXdhcmVzIGV4dGVuZHMgTWlkZGxld2FyZTxhbnksIGFueT5bXVxyXG4+IGV4dGVuZHMgQXJyYXk8TWlkZGxld2FyZXNbbnVtYmVyXT4ge1xyXG4gIGNvbnN0cnVjdG9yKC4uLml0ZW1zOiBNaWRkbGV3YXJlcylcclxuICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xyXG4gICAgc3VwZXIoLi4uYXJncylcclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNaWRkbGV3YXJlQXJyYXkucHJvdG90eXBlKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldCBbU3ltYm9sLnNwZWNpZXNdKCkge1xyXG4gICAgcmV0dXJuIE1pZGRsZXdhcmVBcnJheSBhcyBhbnlcclxuICB9XHJcblxyXG4gIGNvbmNhdDxBZGRpdGlvbmFsTWlkZGxld2FyZXMgZXh0ZW5kcyBSZWFkb25seUFycmF5PE1pZGRsZXdhcmU8YW55LCBhbnk+Pj4oXHJcbiAgICBpdGVtczogQWRkaXRpb25hbE1pZGRsZXdhcmVzXHJcbiAgKTogTWlkZGxld2FyZUFycmF5PFsuLi5NaWRkbGV3YXJlcywgLi4uQWRkaXRpb25hbE1pZGRsZXdhcmVzXT5cclxuXHJcbiAgY29uY2F0PEFkZGl0aW9uYWxNaWRkbGV3YXJlcyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8TWlkZGxld2FyZTxhbnksIGFueT4+PihcclxuICAgIC4uLml0ZW1zOiBBZGRpdGlvbmFsTWlkZGxld2FyZXNcclxuICApOiBNaWRkbGV3YXJlQXJyYXk8Wy4uLk1pZGRsZXdhcmVzLCAuLi5BZGRpdGlvbmFsTWlkZGxld2FyZXNdPlxyXG4gIGNvbmNhdCguLi5hcnI6IGFueVtdKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuY29uY2F0LmFwcGx5KHRoaXMsIGFycilcclxuICB9XHJcblxyXG4gIHByZXBlbmQ8QWRkaXRpb25hbE1pZGRsZXdhcmVzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPGFueSwgYW55Pj4+KFxyXG4gICAgaXRlbXM6IEFkZGl0aW9uYWxNaWRkbGV3YXJlc1xyXG4gICk6IE1pZGRsZXdhcmVBcnJheTxbLi4uQWRkaXRpb25hbE1pZGRsZXdhcmVzLCAuLi5NaWRkbGV3YXJlc10+XHJcblxyXG4gIHByZXBlbmQ8QWRkaXRpb25hbE1pZGRsZXdhcmVzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPGFueSwgYW55Pj4+KFxyXG4gICAgLi4uaXRlbXM6IEFkZGl0aW9uYWxNaWRkbGV3YXJlc1xyXG4gICk6IE1pZGRsZXdhcmVBcnJheTxbLi4uQWRkaXRpb25hbE1pZGRsZXdhcmVzLCAuLi5NaWRkbGV3YXJlc10+XHJcblxyXG4gIHByZXBlbmQoLi4uYXJyOiBhbnlbXSkge1xyXG4gICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XHJcbiAgICAgIHJldHVybiBuZXcgTWlkZGxld2FyZUFycmF5KC4uLmFyclswXS5jb25jYXQodGhpcykpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IE1pZGRsZXdhcmVBcnJheSguLi5hcnIuY29uY2F0KHRoaXMpKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFbmhhbmNlckFycmF5PFxyXG4gIEVuaGFuY2VycyBleHRlbmRzIFN0b3JlRW5oYW5jZXI8YW55LCBhbnk+W11cclxuPiBleHRlbmRzIEFycmF5PEVuaGFuY2Vyc1tudW1iZXJdPiB7XHJcbiAgY29uc3RydWN0b3IoLi4uaXRlbXM6IEVuaGFuY2VycylcclxuICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xyXG4gICAgc3VwZXIoLi4uYXJncylcclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBFbmhhbmNlckFycmF5LnByb3RvdHlwZSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXQgW1N5bWJvbC5zcGVjaWVzXSgpIHtcclxuICAgIHJldHVybiBFbmhhbmNlckFycmF5IGFzIGFueVxyXG4gIH1cclxuXHJcbiAgY29uY2F0PEFkZGl0aW9uYWxFbmhhbmNlcnMgZXh0ZW5kcyBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI8YW55LCBhbnk+Pj4oXHJcbiAgICBpdGVtczogQWRkaXRpb25hbEVuaGFuY2Vyc1xyXG4gICk6IEVuaGFuY2VyQXJyYXk8Wy4uLkVuaGFuY2VycywgLi4uQWRkaXRpb25hbEVuaGFuY2Vyc10+XHJcblxyXG4gIGNvbmNhdDxBZGRpdGlvbmFsRW5oYW5jZXJzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxTdG9yZUVuaGFuY2VyPGFueSwgYW55Pj4+KFxyXG4gICAgLi4uaXRlbXM6IEFkZGl0aW9uYWxFbmhhbmNlcnNcclxuICApOiBFbmhhbmNlckFycmF5PFsuLi5FbmhhbmNlcnMsIC4uLkFkZGl0aW9uYWxFbmhhbmNlcnNdPlxyXG4gIGNvbmNhdCguLi5hcnI6IGFueVtdKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuY29uY2F0LmFwcGx5KHRoaXMsIGFycilcclxuICB9XHJcblxyXG4gIHByZXBlbmQ8QWRkaXRpb25hbEVuaGFuY2VycyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8U3RvcmVFbmhhbmNlcjxhbnksIGFueT4+PihcclxuICAgIGl0ZW1zOiBBZGRpdGlvbmFsRW5oYW5jZXJzXHJcbiAgKTogRW5oYW5jZXJBcnJheTxbLi4uQWRkaXRpb25hbEVuaGFuY2VycywgLi4uRW5oYW5jZXJzXT5cclxuXHJcbiAgcHJlcGVuZDxBZGRpdGlvbmFsRW5oYW5jZXJzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxTdG9yZUVuaGFuY2VyPGFueSwgYW55Pj4+KFxyXG4gICAgLi4uaXRlbXM6IEFkZGl0aW9uYWxFbmhhbmNlcnNcclxuICApOiBFbmhhbmNlckFycmF5PFsuLi5BZGRpdGlvbmFsRW5oYW5jZXJzLCAuLi5FbmhhbmNlcnNdPlxyXG5cclxuICBwcmVwZW5kKC4uLmFycjogYW55W10pIHtcclxuICAgIGlmIChhcnIubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJyWzBdKSkge1xyXG4gICAgICByZXR1cm4gbmV3IEVuaGFuY2VyQXJyYXkoLi4uYXJyWzBdLmNvbmNhdCh0aGlzKSlcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRW5oYW5jZXJBcnJheSguLi5hcnIuY29uY2F0KHRoaXMpKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZyZWV6ZURyYWZ0YWJsZTxUPih2YWw6IFQpIHtcclxuICByZXR1cm4gaXNEcmFmdGFibGUodmFsKSA/IGNyZWF0ZU5leHRTdGF0ZSh2YWwsICgpID0+IHt9KSA6IHZhbFxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgZ2V0VGltZU1lYXN1cmVVdGlscyB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG50eXBlIEVudHJ5UHJvY2Vzc29yID0gKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnlcclxuXHJcbmNvbnN0IGlzUHJvZHVjdGlvbjogYm9vbGVhbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbidcclxuY29uc3QgcHJlZml4OiBzdHJpbmcgPSAnSW52YXJpYW50IGZhaWxlZCdcclxuXHJcbi8vIFRocm93IGFuIGVycm9yIGlmIHRoZSBjb25kaXRpb24gZmFpbHNcclxuLy8gU3RyaXAgb3V0IGVycm9yIG1lc3NhZ2VzIGZvciBwcm9kdWN0aW9uXHJcbi8vID4gTm90IHByb3ZpZGluZyBhbiBpbmxpbmUgZGVmYXVsdCBhcmd1bWVudCBmb3IgbWVzc2FnZSBhcyB0aGUgcmVzdWx0IGlzIHNtYWxsZXJcclxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbjogYW55LCBtZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIC8vIENvbmRpdGlvbiBub3QgcGFzc2VkXHJcblxyXG4gIC8vIEluIHByb2R1Y3Rpb24gd2Ugc3RyaXAgdGhlIG1lc3NhZ2UgYnV0IHN0aWxsIHRocm93XHJcbiAgaWYgKGlzUHJvZHVjdGlvbikge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKHByZWZpeClcclxuICB9XHJcblxyXG4gIC8vIFdoZW4gbm90IGluIHByb2R1Y3Rpb24gd2UgYWxsb3cgdGhlIG1lc3NhZ2UgdG8gcGFzcyB0aHJvdWdoXHJcbiAgLy8gKlRoaXMgYmxvY2sgd2lsbCBiZSByZW1vdmVkIGluIHByb2R1Y3Rpb24gYnVpbGRzKlxyXG4gIHRocm93IG5ldyBFcnJvcihgJHtwcmVmaXh9OiAke21lc3NhZ2UgfHwgJyd9YClcclxufVxyXG5cclxuZnVuY3Rpb24gc3RyaW5naWZ5KFxyXG4gIG9iajogYW55LFxyXG4gIHNlcmlhbGl6ZXI/OiBFbnRyeVByb2Nlc3NvcixcclxuICBpbmRlbnQ/OiBzdHJpbmcgfCBudW1iZXIsXHJcbiAgZGVjeWNsZXI/OiBFbnRyeVByb2Nlc3NvclxyXG4pOiBzdHJpbmcge1xyXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIGdldFNlcmlhbGl6ZShzZXJpYWxpemVyLCBkZWN5Y2xlciksIGluZGVudClcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U2VyaWFsaXplKFxyXG4gIHNlcmlhbGl6ZXI/OiBFbnRyeVByb2Nlc3NvcixcclxuICBkZWN5Y2xlcj86IEVudHJ5UHJvY2Vzc29yXHJcbik6IEVudHJ5UHJvY2Vzc29yIHtcclxuICBsZXQgc3RhY2s6IGFueVtdID0gW10sXHJcbiAgICBrZXlzOiBhbnlbXSA9IFtdXHJcblxyXG4gIGlmICghZGVjeWNsZXIpXHJcbiAgICBkZWN5Y2xlciA9IGZ1bmN0aW9uIChfOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgaWYgKHN0YWNrWzBdID09PSB2YWx1ZSkgcmV0dXJuICdbQ2lyY3VsYXIgfl0nXHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgJ1tDaXJjdWxhciB+LicgKyBrZXlzLnNsaWNlKDAsIHN0YWNrLmluZGV4T2YodmFsdWUpKS5qb2luKCcuJykgKyAnXSdcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHZhciB0aGlzUG9zID0gc3RhY2suaW5kZXhPZih0aGlzKVxyXG4gICAgICB+dGhpc1BvcyA/IHN0YWNrLnNwbGljZSh0aGlzUG9zICsgMSkgOiBzdGFjay5wdXNoKHRoaXMpXHJcbiAgICAgIH50aGlzUG9zID8ga2V5cy5zcGxpY2UodGhpc1BvcywgSW5maW5pdHksIGtleSkgOiBrZXlzLnB1c2goa2V5KVxyXG4gICAgICBpZiAofnN0YWNrLmluZGV4T2YodmFsdWUpKSB2YWx1ZSA9IGRlY3ljbGVyIS5jYWxsKHRoaXMsIGtleSwgdmFsdWUpXHJcbiAgICB9IGVsc2Ugc3RhY2sucHVzaCh2YWx1ZSlcclxuXHJcbiAgICByZXR1cm4gc2VyaWFsaXplciA9PSBudWxsID8gdmFsdWUgOiBzZXJpYWxpemVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgZGVmYXVsdCBgaXNJbW11dGFibGVgIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNJbW11dGFibGVEZWZhdWx0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCB8fCBPYmplY3QuaXNGcm96ZW4odmFsdWUpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmFja0Zvck11dGF0aW9ucyhcclxuICBpc0ltbXV0YWJsZTogSXNJbW11dGFibGVGdW5jLFxyXG4gIGlnbm9yZVBhdGhzOiBJZ25vcmVQYXRocyB8IHVuZGVmaW5lZCxcclxuICBvYmo6IGFueVxyXG4pIHtcclxuICBjb25zdCB0cmFja2VkUHJvcGVydGllcyA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iailcclxuICByZXR1cm4ge1xyXG4gICAgZGV0ZWN0TXV0YXRpb25zKCkge1xyXG4gICAgICByZXR1cm4gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgdHJhY2tlZFByb3BlcnRpZXMsIG9iailcclxuICAgIH0sXHJcbiAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgVHJhY2tlZFByb3BlcnR5IHtcclxuICB2YWx1ZTogYW55XHJcbiAgY2hpbGRyZW46IFJlY29yZDxzdHJpbmcsIGFueT5cclxufVxyXG5cclxuZnVuY3Rpb24gdHJhY2tQcm9wZXJ0aWVzKFxyXG4gIGlzSW1tdXRhYmxlOiBJc0ltbXV0YWJsZUZ1bmMsXHJcbiAgaWdub3JlUGF0aHM6IElnbm9yZVBhdGhzID0gW10sXHJcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gIHBhdGg6IHN0cmluZyA9ICcnLFxyXG4gIGNoZWNrZWRPYmplY3RzOiBTZXQ8UmVjb3JkPHN0cmluZywgYW55Pj4gPSBuZXcgU2V0KClcclxuKSB7XHJcbiAgY29uc3QgdHJhY2tlZDogUGFydGlhbDxUcmFja2VkUHJvcGVydHk+ID0geyB2YWx1ZTogb2JqIH1cclxuXHJcbiAgaWYgKCFpc0ltbXV0YWJsZShvYmopICYmICFjaGVja2VkT2JqZWN0cy5oYXMob2JqKSkge1xyXG4gICAgY2hlY2tlZE9iamVjdHMuYWRkKG9iaik7XHJcbiAgICB0cmFja2VkLmNoaWxkcmVuID0ge31cclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aCA/IHBhdGggKyAnLicgKyBrZXkgOiBrZXlcclxuICAgICAgaWYgKGlnbm9yZVBhdGhzLmxlbmd0aCAmJiBpZ25vcmVQYXRocy5pbmRleE9mKGNoaWxkUGF0aCkgIT09IC0xKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJhY2tlZC5jaGlsZHJlbltrZXldID0gdHJhY2tQcm9wZXJ0aWVzKFxyXG4gICAgICAgIGlzSW1tdXRhYmxlLFxyXG4gICAgICAgIGlnbm9yZVBhdGhzLFxyXG4gICAgICAgIG9ialtrZXldLFxyXG4gICAgICAgIGNoaWxkUGF0aFxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB0cmFja2VkIGFzIFRyYWNrZWRQcm9wZXJ0eVxyXG59XHJcblxyXG50eXBlIElnbm9yZVBhdGhzID0gcmVhZG9ubHkgKHN0cmluZyB8IFJlZ0V4cClbXVxyXG5cclxuZnVuY3Rpb24gZGV0ZWN0TXV0YXRpb25zKFxyXG4gIGlzSW1tdXRhYmxlOiBJc0ltbXV0YWJsZUZ1bmMsXHJcbiAgaWdub3JlZFBhdGhzOiBJZ25vcmVQYXRocyA9IFtdLFxyXG4gIHRyYWNrZWRQcm9wZXJ0eTogVHJhY2tlZFByb3BlcnR5LFxyXG4gIG9iajogYW55LFxyXG4gIHNhbWVQYXJlbnRSZWY6IGJvb2xlYW4gPSBmYWxzZSxcclxuICBwYXRoOiBzdHJpbmcgPSAnJ1xyXG4pOiB7IHdhc011dGF0ZWQ6IGJvb2xlYW47IHBhdGg/OiBzdHJpbmcgfSB7XHJcbiAgY29uc3QgcHJldk9iaiA9IHRyYWNrZWRQcm9wZXJ0eSA/IHRyYWNrZWRQcm9wZXJ0eS52YWx1ZSA6IHVuZGVmaW5lZFxyXG5cclxuICBjb25zdCBzYW1lUmVmID0gcHJldk9iaiA9PT0gb2JqXHJcblxyXG4gIGlmIChzYW1lUGFyZW50UmVmICYmICFzYW1lUmVmICYmICFOdW1iZXIuaXNOYU4ob2JqKSkge1xyXG4gICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogdHJ1ZSwgcGF0aCB9XHJcbiAgfVxyXG5cclxuICBpZiAoaXNJbW11dGFibGUocHJldk9iaikgfHwgaXNJbW11dGFibGUob2JqKSkge1xyXG4gICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfVxyXG4gIH1cclxuXHJcbiAgLy8gR2F0aGVyIGFsbCBrZXlzIGZyb20gcHJldiAodHJhY2tlZCkgYW5kIGFmdGVyIG9ianNcclxuICBjb25zdCBrZXlzVG9EZXRlY3Q6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge31cclxuICBmb3IgKGxldCBrZXkgaW4gdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuKSB7XHJcbiAgICBrZXlzVG9EZXRlY3Rba2V5XSA9IHRydWVcclxuICB9XHJcbiAgZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlXHJcbiAgfVxyXG5cclxuICBjb25zdCBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMFxyXG5cclxuICBmb3IgKGxldCBrZXkgaW4ga2V5c1RvRGV0ZWN0KSB7XHJcbiAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyAnLicgKyBrZXkgOiBrZXlcclxuXHJcbiAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgIGNvbnN0IGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZSgoaWdub3JlZCkgPT4ge1xyXG4gICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChoYXNNYXRjaGVzKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdE11dGF0aW9ucyhcclxuICAgICAgaXNJbW11dGFibGUsXHJcbiAgICAgIGlnbm9yZWRQYXRocyxcclxuICAgICAgdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuW2tleV0sXHJcbiAgICAgIG9ialtrZXldLFxyXG4gICAgICBzYW1lUmVmLFxyXG4gICAgICBuZXN0ZWRQYXRoXHJcbiAgICApXHJcblxyXG4gICAgaWYgKHJlc3VsdC53YXNNdXRhdGVkKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfVxyXG59XHJcblxyXG50eXBlIElzSW1tdXRhYmxlRnVuYyA9ICh2YWx1ZTogYW55KSA9PiBib29sZWFuXHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgYGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSgpYC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zIHtcclxuICAvKipcclxuICAgIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgY29uc2lkZXJlZCB0byBiZSBpbW11dGFibGUuXHJcbiAgICBUaGlzIGZ1bmN0aW9uIGlzIGFwcGxpZWQgcmVjdXJzaXZlbHkgdG8gZXZlcnkgdmFsdWUgY29udGFpbmVkIGluIHRoZSBzdGF0ZS5cclxuICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgcmV0dXJuIHRydWUgZm9yIHByaW1pdGl2ZSB0eXBlcyBcclxuICAgIChsaWtlIG51bWJlcnMsIHN0cmluZ3MsIGJvb2xlYW5zLCBudWxsIGFuZCB1bmRlZmluZWQpLlxyXG4gICAqL1xyXG4gIGlzSW1tdXRhYmxlPzogSXNJbW11dGFibGVGdW5jXHJcbiAgLyoqIFxyXG4gICAgQW4gYXJyYXkgb2YgZG90LXNlcGFyYXRlZCBwYXRoIHN0cmluZ3MgdGhhdCBtYXRjaCBuYW1lZCBub2RlcyBmcm9tIFxyXG4gICAgdGhlIHJvb3Qgc3RhdGUgdG8gaWdub3JlIHdoZW4gY2hlY2tpbmcgZm9yIGltbXV0YWJpbGl0eS5cclxuICAgIERlZmF1bHRzIHRvIHVuZGVmaW5lZFxyXG4gICAqL1xyXG4gIGlnbm9yZWRQYXRocz86IElnbm9yZVBhdGhzXHJcbiAgLyoqIFByaW50IGEgd2FybmluZyBpZiBjaGVja3MgdGFrZSBsb25nZXIgdGhhbiBOIG1zLiBEZWZhdWx0OiAzMm1zICovXHJcbiAgd2FybkFmdGVyPzogbnVtYmVyXHJcbiAgLy8gQGRlcHJlY2F0ZWQuIFVzZSBpZ25vcmVkUGF0aHNcclxuICBpZ25vcmU/OiBzdHJpbmdbXVxyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG1pZGRsZXdhcmUgdGhhdCBjaGVja3Mgd2hldGhlciBhbnkgc3RhdGUgd2FzIG11dGF0ZWQgaW4gYmV0d2VlblxyXG4gKiBkaXNwYXRjaGVzIG9yIGR1cmluZyBhIGRpc3BhdGNoLiBJZiBhbnkgbXV0YXRpb25zIGFyZSBkZXRlY3RlZCwgYW4gZXJyb3IgaXNcclxuICogdGhyb3duLlxyXG4gKlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBNaWRkbGV3YXJlIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoXHJcbiAgb3B0aW9uczogSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcbik6IE1pZGRsZXdhcmUge1xyXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IG5leHQoYWN0aW9uKVxyXG4gIH1cclxuXHJcbiAgbGV0IHtcclxuICAgIGlzSW1tdXRhYmxlID0gaXNJbW11dGFibGVEZWZhdWx0LFxyXG4gICAgaWdub3JlZFBhdGhzLFxyXG4gICAgd2FybkFmdGVyID0gMzIsXHJcbiAgICBpZ25vcmUsXHJcbiAgfSA9IG9wdGlvbnNcclxuXHJcbiAgLy8gQWxpYXMgaWdub3JlLT5pZ25vcmVkUGF0aHMsIGJ1dCBwcmVmZXIgaWdub3JlZFBhdGhzIGlmIHByZXNlbnRcclxuICBpZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMgfHwgaWdub3JlXHJcblxyXG4gIGNvbnN0IHRyYWNrID0gdHJhY2tGb3JNdXRhdGlvbnMuYmluZChudWxsLCBpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzKVxyXG5cclxuICByZXR1cm4gKHsgZ2V0U3RhdGUgfSkgPT4ge1xyXG4gICAgbGV0IHN0YXRlID0gZ2V0U3RhdGUoKVxyXG4gICAgbGV0IHRyYWNrZXIgPSB0cmFjayhzdGF0ZSlcclxuXHJcbiAgICBsZXQgcmVzdWx0XHJcbiAgICByZXR1cm4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcclxuICAgICAgY29uc3QgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyhcclxuICAgICAgICB3YXJuQWZ0ZXIsXHJcbiAgICAgICAgJ0ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuICAgICAgKVxyXG5cclxuICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcclxuICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKClcclxuXHJcbiAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKVxyXG4gICAgICAgIC8vIFRyYWNrIGJlZm9yZSBwb3RlbnRpYWxseSBub3QgbWVldGluZyB0aGUgaW52YXJpYW50XHJcbiAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKVxyXG5cclxuICAgICAgICBpbnZhcmlhbnQoXHJcbiAgICAgICAgICAhcmVzdWx0Lndhc011dGF0ZWQsXHJcbiAgICAgICAgICBgQSBzdGF0ZSBtdXRhdGlvbiB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiBkaXNwYXRjaGVzLCBpbiB0aGUgcGF0aCAnJHtcclxuICAgICAgICAgICAgcmVzdWx0LnBhdGggfHwgJydcclxuICAgICAgICAgIH0nLiAgVGhpcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlgXHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgY29uc3QgZGlzcGF0Y2hlZEFjdGlvbiA9IG5leHQoYWN0aW9uKVxyXG5cclxuICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcclxuICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKClcclxuXHJcbiAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKVxyXG4gICAgICAgIC8vIFRyYWNrIGJlZm9yZSBwb3RlbnRpYWxseSBub3QgbWVldGluZyB0aGUgaW52YXJpYW50XHJcbiAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKVxyXG5cclxuICAgICAgICByZXN1bHQud2FzTXV0YXRlZCAmJlxyXG4gICAgICAgICAgaW52YXJpYW50KFxyXG4gICAgICAgICAgICAhcmVzdWx0Lndhc011dGF0ZWQsXHJcbiAgICAgICAgICAgIGBBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBpbnNpZGUgYSBkaXNwYXRjaCwgaW4gdGhlIHBhdGg6ICR7XHJcbiAgICAgICAgICAgICAgcmVzdWx0LnBhdGggfHwgJydcclxuICAgICAgICAgICAgfS4gVGFrZSBhIGxvb2sgYXQgdGhlIHJlZHVjZXIocykgaGFuZGxpbmcgdGhlIGFjdGlvbiAke3N0cmluZ2lmeShcclxuICAgICAgICAgICAgICBhY3Rpb25cclxuICAgICAgICAgICAgKX0uIChodHRwczovL3JlZHV4LmpzLm9yZy9zdHlsZS1ndWlkZS9zdHlsZS1ndWlkZSNkby1ub3QtbXV0YXRlLXN0YXRlKWBcclxuICAgICAgICAgIClcclxuICAgICAgfSlcclxuXHJcbiAgICAgIG1lYXN1cmVVdGlscy53YXJuSWZFeGNlZWRlZCgpXHJcblxyXG4gICAgICByZXR1cm4gZGlzcGF0Y2hlZEFjdGlvblxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0J1xyXG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgZ2V0VGltZU1lYXN1cmVVdGlscyB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXNzZWQgdmFsdWUgaXMgXCJwbGFpblwiLCBpLmUuIGEgdmFsdWUgdGhhdCBpcyBlaXRoZXJcclxuICogZGlyZWN0bHkgSlNPTi1zZXJpYWxpemFibGUgKGJvb2xlYW4sIG51bWJlciwgc3RyaW5nLCBhcnJheSwgcGxhaW4gb2JqZWN0KVxyXG4gKiBvciBgdW5kZWZpbmVkYC5cclxuICpcclxuICogQHBhcmFtIHZhbCBUaGUgdmFsdWUgdG8gY2hlY2suXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluKHZhbDogYW55KSB7XHJcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWxcclxuICByZXR1cm4gKFxyXG4gICAgdmFsID09IG51bGwgfHxcclxuICAgIHR5cGUgPT09ICdzdHJpbmcnIHx8XHJcbiAgICB0eXBlID09PSAnYm9vbGVhbicgfHxcclxuICAgIHR5cGUgPT09ICdudW1iZXInIHx8XHJcbiAgICBBcnJheS5pc0FycmF5KHZhbCkgfHxcclxuICAgIGlzUGxhaW5PYmplY3QodmFsKVxyXG4gIClcclxufVxyXG5cclxuaW50ZXJmYWNlIE5vblNlcmlhbGl6YWJsZVZhbHVlIHtcclxuICBrZXlQYXRoOiBzdHJpbmdcclxuICB2YWx1ZTogdW5rbm93blxyXG59XHJcblxyXG50eXBlIElnbm9yZVBhdGhzID0gcmVhZG9ubHkgKHN0cmluZyB8IFJlZ0V4cClbXVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoXHJcbiAgdmFsdWU6IHVua25vd24sXHJcbiAgcGF0aDogc3RyaW5nID0gJycsXHJcbiAgaXNTZXJpYWxpemFibGU6ICh2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhbiA9IGlzUGxhaW4sXHJcbiAgZ2V0RW50cmllcz86ICh2YWx1ZTogdW5rbm93bikgPT4gW3N0cmluZywgYW55XVtdLFxyXG4gIGlnbm9yZWRQYXRoczogSWdub3JlUGF0aHMgPSBbXSxcclxuICBjYWNoZT86IFdlYWtTZXQ8b2JqZWN0PlxyXG4pOiBOb25TZXJpYWxpemFibGVWYWx1ZSB8IGZhbHNlIHtcclxuICBsZXQgZm91bmROZXN0ZWRTZXJpYWxpemFibGU6IE5vblNlcmlhbGl6YWJsZVZhbHVlIHwgZmFsc2VcclxuXHJcbiAgaWYgKCFpc1NlcmlhbGl6YWJsZSh2YWx1ZSkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGtleVBhdGg6IHBhdGggfHwgJzxyb290PicsXHJcbiAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGlmIChjYWNoZT8uaGFzKHZhbHVlKSkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGNvbnN0IGVudHJpZXMgPSBnZXRFbnRyaWVzICE9IG51bGwgPyBnZXRFbnRyaWVzKHZhbHVlKSA6IE9iamVjdC5lbnRyaWVzKHZhbHVlKVxyXG5cclxuICBjb25zdCBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMFxyXG5cclxuICBmb3IgKGNvbnN0IFtrZXksIG5lc3RlZFZhbHVlXSBvZiBlbnRyaWVzKSB7XHJcbiAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyAnLicgKyBrZXkgOiBrZXlcclxuXHJcbiAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgIGNvbnN0IGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZSgoaWdub3JlZCkgPT4ge1xyXG4gICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChoYXNNYXRjaGVzKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNTZXJpYWxpemFibGUobmVzdGVkVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAga2V5UGF0aDogbmVzdGVkUGF0aCxcclxuICAgICAgICB2YWx1ZTogbmVzdGVkVmFsdWUsXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShcclxuICAgICAgICBuZXN0ZWRWYWx1ZSxcclxuICAgICAgICBuZXN0ZWRQYXRoLFxyXG4gICAgICAgIGlzU2VyaWFsaXphYmxlLFxyXG4gICAgICAgIGdldEVudHJpZXMsXHJcbiAgICAgICAgaWdub3JlZFBhdGhzLFxyXG4gICAgICAgIGNhY2hlXHJcbiAgICAgIClcclxuXHJcbiAgICAgIGlmIChmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSkge1xyXG4gICAgICAgIHJldHVybiBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoY2FjaGUgJiYgaXNOZXN0ZWRGcm96ZW4odmFsdWUpKSBjYWNoZS5hZGQodmFsdWUpXHJcblxyXG4gIHJldHVybiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWRGcm96ZW4odmFsdWU6IG9iamVjdCkge1xyXG4gIGlmICghT2JqZWN0LmlzRnJvemVuKHZhbHVlKSkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGZvciAoY29uc3QgbmVzdGVkVmFsdWUgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIHtcclxuICAgIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgIT09ICdvYmplY3QnIHx8IG5lc3RlZFZhbHVlID09PSBudWxsKSBjb250aW51ZVxyXG5cclxuICAgIGlmICghaXNOZXN0ZWRGcm96ZW4obmVzdGVkVmFsdWUpKSByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBmdW5jdGlvbiB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGNvbnNpZGVyZWQgc2VyaWFsaXphYmxlLiBUaGlzXHJcbiAgICogZnVuY3Rpb24gaXMgYXBwbGllZCByZWN1cnNpdmVseSB0byBldmVyeSB2YWx1ZSBjb250YWluZWQgaW4gdGhlXHJcbiAgICogc3RhdGUuIERlZmF1bHRzIHRvIGBpc1BsYWluKClgLlxyXG4gICAqL1xyXG4gIGlzU2VyaWFsaXphYmxlPzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBUaGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmV0cmlldmUgZW50cmllcyBmcm9tIGVhY2hcclxuICAgKiB2YWx1ZS4gIElmIHVuc3BlY2lmaWVkLCBgT2JqZWN0LmVudHJpZXNgIHdpbGwgYmUgdXNlZC4gRGVmYXVsdHNcclxuICAgKiB0byBgdW5kZWZpbmVkYC5cclxuICAgKi9cclxuICBnZXRFbnRyaWVzPzogKHZhbHVlOiBhbnkpID0+IFtzdHJpbmcsIGFueV1bXVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBhY3Rpb24gdHlwZXMgdG8gaWdub3JlIHdoZW4gY2hlY2tpbmcgZm9yIHNlcmlhbGl6YWJpbGl0eS5cclxuICAgKiBEZWZhdWx0cyB0byBbXVxyXG4gICAqL1xyXG4gIGlnbm9yZWRBY3Rpb25zPzogc3RyaW5nW11cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgZG90LXNlcGFyYXRlZCBwYXRoIHN0cmluZ3Mgb3IgcmVndWxhciBleHByZXNzaW9ucyB0byBpZ25vcmVcclxuICAgKiB3aGVuIGNoZWNraW5nIGZvciBzZXJpYWxpemFiaWxpdHksIERlZmF1bHRzIHRvXHJcbiAgICogWydtZXRhLmFyZycsICdtZXRhLmJhc2VRdWVyeU1ldGEnXVxyXG4gICAqL1xyXG4gIGlnbm9yZWRBY3Rpb25QYXRocz86IChzdHJpbmcgfCBSZWdFeHApW11cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgZG90LXNlcGFyYXRlZCBwYXRoIHN0cmluZ3Mgb3IgcmVndWxhciBleHByZXNzaW9ucyB0byBpZ25vcmVcclxuICAgKiB3aGVuIGNoZWNraW5nIGZvciBzZXJpYWxpemFiaWxpdHksIERlZmF1bHRzIHRvIFtdXHJcbiAgICovXHJcbiAgaWdub3JlZFBhdGhzPzogKHN0cmluZyB8IFJlZ0V4cClbXVxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGlvbiB0aW1lIHdhcm5pbmcgdGhyZXNob2xkLiBJZiB0aGUgbWlkZGxld2FyZSB0YWtlcyBsb25nZXJcclxuICAgKiB0aGFuIGB3YXJuQWZ0ZXJgIG1zLCBhIHdhcm5pbmcgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnNvbGUuXHJcbiAgICogRGVmYXVsdHMgdG8gMzJtcy5cclxuICAgKi9cclxuICB3YXJuQWZ0ZXI/OiBudW1iZXJcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0IG91dCBvZiBjaGVja2luZyBzdGF0ZS4gV2hlbiBzZXQgdG8gYHRydWVgLCBvdGhlciBzdGF0ZS1yZWxhdGVkIHBhcmFtcyB3aWxsIGJlIGlnbm9yZWQuXHJcbiAgICovXHJcbiAgaWdub3JlU3RhdGU/OiBib29sZWFuXHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdCBvdXQgb2YgY2hlY2tpbmcgYWN0aW9ucy4gV2hlbiBzZXQgdG8gYHRydWVgLCBvdGhlciBhY3Rpb24tcmVsYXRlZCBwYXJhbXMgd2lsbCBiZSBpZ25vcmVkLlxyXG4gICAqL1xyXG4gIGlnbm9yZUFjdGlvbnM/OiBib29sZWFuXHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdCBvdXQgb2YgY2FjaGluZyB0aGUgcmVzdWx0cy4gVGhlIGNhY2hlIHVzZXMgYSBXZWFrU2V0IGFuZCBzcGVlZHMgdXAgcmVwZWF0ZWQgY2hlY2tpbmcgcHJvY2Vzc2VzLlxyXG4gICAqIFRoZSBjYWNoZSBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGlmIG5vIGJyb3dzZXIgc3VwcG9ydCBmb3IgV2Vha1NldCBpcyBwcmVzZW50LlxyXG4gICAqL1xyXG4gIGRpc2FibGVDYWNoZT86IGJvb2xlYW5cclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtaWRkbGV3YXJlIHRoYXQsIGFmdGVyIGV2ZXJ5IHN0YXRlIGNoYW5nZSwgY2hlY2tzIGlmIHRoZSBuZXdcclxuICogc3RhdGUgaXMgc2VyaWFsaXphYmxlLiBJZiBhIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgaXMgZm91bmQgd2l0aGluIHRoZVxyXG4gKiBzdGF0ZSwgYW4gZXJyb3IgaXMgcHJpbnRlZCB0byB0aGUgY29uc29sZS5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgTWlkZGxld2FyZSBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKFxyXG4gIG9wdGlvbnM6IFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgPSB7fVxyXG4pOiBNaWRkbGV3YXJlIHtcclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgcmV0dXJuICgpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiBuZXh0KGFjdGlvbilcclxuICB9XHJcbiAgY29uc3Qge1xyXG4gICAgaXNTZXJpYWxpemFibGUgPSBpc1BsYWluLFxyXG4gICAgZ2V0RW50cmllcyxcclxuICAgIGlnbm9yZWRBY3Rpb25zID0gW10sXHJcbiAgICBpZ25vcmVkQWN0aW9uUGF0aHMgPSBbJ21ldGEuYXJnJywgJ21ldGEuYmFzZVF1ZXJ5TWV0YSddLFxyXG4gICAgaWdub3JlZFBhdGhzID0gW10sXHJcbiAgICB3YXJuQWZ0ZXIgPSAzMixcclxuICAgIGlnbm9yZVN0YXRlID0gZmFsc2UsXHJcbiAgICBpZ25vcmVBY3Rpb25zID0gZmFsc2UsXHJcbiAgICBkaXNhYmxlQ2FjaGUgPSBmYWxzZSxcclxuICB9ID0gb3B0aW9uc1xyXG5cclxuICBjb25zdCBjYWNoZTogV2Vha1NldDxvYmplY3Q+IHwgdW5kZWZpbmVkID1cclxuICAgICFkaXNhYmxlQ2FjaGUgJiYgV2Vha1NldCA/IG5ldyBXZWFrU2V0KCkgOiB1bmRlZmluZWRcclxuXHJcbiAgcmV0dXJuIChzdG9yZUFQSSkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IG5leHQoYWN0aW9uKVxyXG5cclxuICAgIGNvbnN0IG1lYXN1cmVVdGlscyA9IGdldFRpbWVNZWFzdXJlVXRpbHMoXHJcbiAgICAgIHdhcm5BZnRlcixcclxuICAgICAgJ1NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuICAgIClcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFpZ25vcmVBY3Rpb25zICYmXHJcbiAgICAgICEoaWdub3JlZEFjdGlvbnMubGVuZ3RoICYmIGlnbm9yZWRBY3Rpb25zLmluZGV4T2YoYWN0aW9uLnR5cGUpICE9PSAtMSlcclxuICAgICkge1xyXG4gICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoXHJcbiAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgIGlzU2VyaWFsaXphYmxlLFxyXG4gICAgICAgICAgZ2V0RW50cmllcyxcclxuICAgICAgICAgIGlnbm9yZWRBY3Rpb25QYXRocyxcclxuICAgICAgICAgIGNhY2hlXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBpZiAoZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZSkge1xyXG4gICAgICAgICAgY29uc3QgeyBrZXlQYXRoLCB2YWx1ZSB9ID0gZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZVxyXG5cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgIGBBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIGFuIGFjdGlvbiwgaW4gdGhlIHBhdGg6IFxcYCR7a2V5UGF0aH1cXGAuIFZhbHVlOmAsXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICAnXFxuVGFrZSBhIGxvb2sgYXQgdGhlIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGFjdGlvbjogJyxcclxuICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAnXFxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvYWN0aW9ucyN3aHktc2hvdWxkLXR5cGUtYmUtYS1zdHJpbmctb3ItYXQtbGVhc3Qtc2VyaWFsaXphYmxlLXdoeS1zaG91bGQtbXktYWN0aW9uLXR5cGVzLWJlLWNvbnN0YW50cyknLFxyXG4gICAgICAgICAgICAnXFxuKFRvIGFsbG93IG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIHNlZTogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy91c2FnZS91c2FnZS1ndWlkZSN3b3JraW5nLXdpdGgtbm9uLXNlcmlhbGl6YWJsZS1kYXRhKSdcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpZ25vcmVTdGF0ZSkge1xyXG4gICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmVBUEkuZ2V0U3RhdGUoKVxyXG5cclxuICAgICAgICBjb25zdCBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoXHJcbiAgICAgICAgICBzdGF0ZSxcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgaXNTZXJpYWxpemFibGUsXHJcbiAgICAgICAgICBnZXRFbnRyaWVzLFxyXG4gICAgICAgICAgaWdub3JlZFBhdGhzLFxyXG4gICAgICAgICAgY2FjaGVcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIGlmIChmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IHsga2V5UGF0aCwgdmFsdWUgfSA9IGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZVxyXG5cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgIGBBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIHRoZSBzdGF0ZSwgaW4gdGhlIHBhdGg6IFxcYCR7a2V5UGF0aH1cXGAuIFZhbHVlOmAsXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICBgXHJcblRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoaXMgYWN0aW9uIHR5cGU6ICR7YWN0aW9uLnR5cGV9LlxyXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9vcmdhbml6aW5nLXN0YXRlI2Nhbi1pLXB1dC1mdW5jdGlvbnMtcHJvbWlzZXMtb3Itb3RoZXItbm9uLXNlcmlhbGl6YWJsZS1pdGVtcy1pbi1teS1zdG9yZS1zdGF0ZSlgXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IERyYWZ0IH0gZnJvbSAnaW1tZXInXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUsIHsgaXNEcmFmdCwgaXNEcmFmdGFibGUgfSBmcm9tICdpbW1lcidcclxuaW1wb3J0IHR5cGUgeyBBbnlBY3Rpb24sIEFjdGlvbiwgUmVkdWNlciB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyIH0gZnJvbSAnLi9tYXBCdWlsZGVycydcclxuaW1wb3J0IHsgZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sgfSBmcm9tICcuL21hcEJ1aWxkZXJzJ1xyXG5pbXBvcnQgdHlwZSB7IE5vSW5mZXIgfSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHsgZnJlZXplRHJhZnRhYmxlIH0gZnJvbSAnLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiBEZWZpbmVzIGEgbWFwcGluZyBmcm9tIGFjdGlvbiB0eXBlcyB0byBjb3JyZXNwb25kaW5nIGFjdGlvbiBvYmplY3Qgc2hhcGVzLlxyXG4gKlxyXG4gKiBAZGVwcmVjYXRlZCBUaGlzIHNob3VsZCBub3QgYmUgdXNlZCBtYW51YWxseSAtIGl0IGlzIG9ubHkgdXNlZCBmb3IgaW50ZXJuYWxcclxuICogICAgICAgICAgICAgaW5mZXJlbmNlIHB1cnBvc2VzIGFuZCBzaG91bGQgbm90IGhhdmUgYW55IGZ1cnRoZXIgdmFsdWUuXHJcbiAqICAgICAgICAgICAgIEl0IG1pZ2h0IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQWN0aW9uczxUIGV4dGVuZHMga2V5b2YgYW55ID0gc3RyaW5nPiA9IFJlY29yZDxULCBBY3Rpb24+XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWQgdXNlIGBUeXBlR3VhcmRgIGluc3RlYWRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uTWF0Y2hlcjxBIGV4dGVuZHMgQW55QWN0aW9uPiB7XHJcbiAgKGFjdGlvbjogQW55QWN0aW9uKTogYWN0aW9uIGlzIEFcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uTWF0Y2hlckRlc2NyaXB0aW9uPFMsIEEgZXh0ZW5kcyBBbnlBY3Rpb24+ID0ge1xyXG4gIG1hdGNoZXI6IEFjdGlvbk1hdGNoZXI8QT5cclxuICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTLCBOb0luZmVyPEE+PlxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSZWFkb25seUFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4gPSBSZWFkb25seUFycmF5PFxyXG4gIEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbjxTLCBhbnk+XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4gPSBBcnJheTxcclxuICBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb248UywgYW55PlxyXG4+XHJcblxyXG4vKipcclxuICogQSAqY2FzZSByZWR1Y2VyKiBpcyBhIHJlZHVjZXIgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgYWN0aW9uIHR5cGUuIENhc2VcclxuICogcmVkdWNlcnMgY2FuIGJlIGNvbXBvc2VkIHRvIGZ1bGwgcmVkdWNlcnMgdXNpbmcgYGNyZWF0ZVJlZHVjZXIoKWAuXHJcbiAqXHJcbiAqIFVubGlrZSBhIG5vcm1hbCBSZWR1eCByZWR1Y2VyLCBhIGNhc2UgcmVkdWNlciBpcyBuZXZlciBjYWxsZWQgd2l0aCBhblxyXG4gKiBgdW5kZWZpbmVkYCBzdGF0ZSB0byBkZXRlcm1pbmUgdGhlIGluaXRpYWwgc3RhdGUuIEluc3RlYWQsIHRoZSBpbml0aWFsXHJcbiAqIHN0YXRlIGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGBjcmVhdGVSZWR1Y2VyKClgLlxyXG4gKlxyXG4gKiBJbiBhZGRpdGlvbiwgYSBjYXNlIHJlZHVjZXIgY2FuIGNob29zZSB0byBtdXRhdGUgdGhlIHBhc3NlZC1pbiBgc3RhdGVgXHJcbiAqIHZhbHVlIGRpcmVjdGx5IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgbmV3IHN0YXRlLiBUaGlzIGRvZXMgbm90IGFjdHVhbGx5XHJcbiAqIGNhdXNlIHRoZSBzdG9yZSBzdGF0ZSB0byBiZSBtdXRhdGVkIGRpcmVjdGx5OyBpbnN0ZWFkLCB0aGFua3MgdG9cclxuICogW2ltbWVyXShodHRwczovL2dpdGh1Yi5jb20vbXdlc3RzdHJhdGUvaW1tZXIpLCB0aGUgbXV0YXRpb25zIGFyZVxyXG4gKiB0cmFuc2xhdGVkIHRvIGNvcHkgb3BlcmF0aW9ucyB0aGF0IHJlc3VsdCBpbiBhIG5ldyBzdGF0ZS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ2FzZVJlZHVjZXI8UyA9IGFueSwgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbj4gPSAoXHJcbiAgc3RhdGU6IERyYWZ0PFM+LFxyXG4gIGFjdGlvbjogQVxyXG4pID0+IE5vSW5mZXI8Uz4gfCB2b2lkIHwgRHJhZnQ8Tm9JbmZlcjxTPj5cclxuXHJcbi8qKlxyXG4gKiBBIG1hcHBpbmcgZnJvbSBhY3Rpb24gdHlwZXMgdG8gY2FzZSByZWR1Y2VycyBmb3IgYGNyZWF0ZVJlZHVjZXIoKWAuXHJcbiAqXHJcbiAqIEBkZXByZWNhdGVkIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIG1hbnVhbGx5IC0gaXQgaXMgb25seSB1c2VkXHJcbiAqICAgICAgICAgICAgIGZvciBpbnRlcm5hbCBpbmZlcmVuY2UgcHVycG9zZXMgYW5kIHVzaW5nIGl0IG1hbnVhbGx5XHJcbiAqICAgICAgICAgICAgIHdvdWxkIGxlYWQgdG8gdHlwZSBlcmFzdXJlLlxyXG4gKiAgICAgICAgICAgICBJdCBtaWdodCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENhc2VSZWR1Y2VyczxTLCBBUyBleHRlbmRzIEFjdGlvbnM+ID0ge1xyXG4gIFtUIGluIGtleW9mIEFTXTogQVNbVF0gZXh0ZW5kcyBBY3Rpb24gPyBDYXNlUmVkdWNlcjxTLCBBU1tUXT4gOiB2b2lkXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE5vdEZ1bmN0aW9uPFQ+ID0gVCBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBUXHJcblxyXG5mdW5jdGlvbiBpc1N0YXRlRnVuY3Rpb248Uz4oeDogdW5rbm93bik6IHggaXMgKCkgPT4gUyB7XHJcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFMgZXh0ZW5kcyBOb3RGdW5jdGlvbjxhbnk+PiA9IFJlZHVjZXI8Uz4gJiB7XHJcbiAgZ2V0SW5pdGlhbFN0YXRlOiAoKSA9PiBTXHJcbn1cclxuXHJcbmxldCBoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uID0gZmFsc2VcclxuXHJcbi8qKlxyXG4gKiBBIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSByZWR1Y2VyIGFzIGEgbWFwcGluZyBmcm9tIGFjdGlvblxyXG4gKiB0eXBlIHRvICpjYXNlIHJlZHVjZXIqIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGVzZSBhY3Rpb24gdHlwZXMuIFRoZVxyXG4gKiByZWR1Y2VyJ3MgaW5pdGlhbCBzdGF0ZSBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGUgYm9keSBvZiBldmVyeSBjYXNlIHJlZHVjZXIgaXMgaW1wbGljaXRseSB3cmFwcGVkIHdpdGggYSBjYWxsIHRvXHJcbiAqIGBwcm9kdWNlKClgIGZyb20gdGhlIFtpbW1lcl0oaHR0cHM6Ly9naXRodWIuY29tL213ZXN0c3RyYXRlL2ltbWVyKSBsaWJyYXJ5LlxyXG4gKiBUaGlzIG1lYW5zIHRoYXQgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIGEgbmV3IHN0YXRlIG9iamVjdCwgeW91IGNhbiBhbHNvXHJcbiAqIG11dGF0ZSB0aGUgcGFzc2VkLWluIHN0YXRlIG9iamVjdCBkaXJlY3RseTsgdGhlc2UgbXV0YXRpb25zIHdpbGwgdGhlbiBiZVxyXG4gKiBhdXRvbWF0aWNhbGx5IGFuZCBlZmZpY2llbnRseSB0cmFuc2xhdGVkIGludG8gY29waWVzLCBnaXZpbmcgeW91IGJvdGhcclxuICogY29udmVuaWVuY2UgYW5kIGltbXV0YWJpbGl0eS5cclxuICpcclxuICogQG92ZXJsb2FkU3VtbWFyeVxyXG4gKiBUaGlzIG92ZXJsb2FkIGFjY2VwdHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgYGJ1aWxkZXJgIG9iamVjdCBhcyBpdHMgYXJndW1lbnQuXHJcbiAqIFRoYXQgYnVpbGRlciBwcm92aWRlcyBgYWRkQ2FzZWAsIGBhZGRNYXRjaGVyYCBhbmQgYGFkZERlZmF1bHRDYXNlYCBmdW5jdGlvbnMgdGhhdCBtYXkgYmVcclxuICogY2FsbGVkIHRvIGRlZmluZSB3aGF0IGFjdGlvbnMgdGhpcyByZWR1Y2VyIHdpbGwgaGFuZGxlLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5pdGlhbFN0YXRlIC0gYFN0YXRlIHwgKCgpID0+IFN0YXRlKWA6IFRoZSBpbml0aWFsIHN0YXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmVkdWNlciBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUuIFRoaXMgbWF5IGFsc28gYmUgYSBcImxhenkgaW5pdGlhbGl6ZXJcIiBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIHJldHVybiBhbiBpbml0aWFsIHN0YXRlIHZhbHVlIHdoZW4gY2FsbGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB3aGVuZXZlciB0aGUgcmVkdWNlciBpcyBjYWxsZWQgd2l0aCBgdW5kZWZpbmVkYCBhcyBpdHMgc3RhdGUgdmFsdWUsIGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBjYXNlcyBsaWtlIHJlYWRpbmcgaW5pdGlhbCBzdGF0ZSBmcm9tIGBsb2NhbFN0b3JhZ2VgLlxyXG4gKiBAcGFyYW0gYnVpbGRlckNhbGxiYWNrIC0gYChidWlsZGVyOiBCdWlsZGVyKSA9PiB2b2lkYCBBIGNhbGxiYWNrIHRoYXQgcmVjZWl2ZXMgYSAqYnVpbGRlciogb2JqZWN0IHRvIGRlZmluZVxyXG4gKiAgIGNhc2UgcmVkdWNlcnMgdmlhIGNhbGxzIHRvIGBidWlsZGVyLmFkZENhc2UoYWN0aW9uQ3JlYXRvck9yVHlwZSwgcmVkdWNlcilgLlxyXG4gKiBAZXhhbXBsZVxyXG5gYGB0c1xyXG5pbXBvcnQge1xyXG4gIGNyZWF0ZUFjdGlvbixcclxuICBjcmVhdGVSZWR1Y2VyLFxyXG4gIEFueUFjdGlvbixcclxuICBQYXlsb2FkQWN0aW9uLFxyXG59IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XHJcblxyXG5jb25zdCBpbmNyZW1lbnQgPSBjcmVhdGVBY3Rpb248bnVtYmVyPihcImluY3JlbWVudFwiKTtcclxuY29uc3QgZGVjcmVtZW50ID0gY3JlYXRlQWN0aW9uPG51bWJlcj4oXCJkZWNyZW1lbnRcIik7XHJcblxyXG5mdW5jdGlvbiBpc0FjdGlvbldpdGhOdW1iZXJQYXlsb2FkKFxyXG4gIGFjdGlvbjogQW55QWN0aW9uXHJcbik6IGFjdGlvbiBpcyBQYXlsb2FkQWN0aW9uPG51bWJlcj4ge1xyXG4gIHJldHVybiB0eXBlb2YgYWN0aW9uLnBheWxvYWQgPT09IFwibnVtYmVyXCI7XHJcbn1cclxuXHJcbmNvbnN0IHJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKFxyXG4gIHtcclxuICAgIGNvdW50ZXI6IDAsXHJcbiAgICBzdW1PZk51bWJlclBheWxvYWRzOiAwLFxyXG4gICAgdW5oYW5kbGVkQWN0aW9uczogMCxcclxuICB9LFxyXG4gIChidWlsZGVyKSA9PiB7XHJcbiAgICBidWlsZGVyXHJcbiAgICAgIC5hZGRDYXNlKGluY3JlbWVudCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICAvLyBhY3Rpb24gaXMgaW5mZXJyZWQgY29ycmVjdGx5IGhlcmVcclxuICAgICAgICBzdGF0ZS5jb3VudGVyICs9IGFjdGlvbi5wYXlsb2FkO1xyXG4gICAgICB9KVxyXG4gICAgICAvLyBZb3UgY2FuIGNoYWluIGNhbGxzLCBvciBoYXZlIHNlcGFyYXRlIGBidWlsZGVyLmFkZENhc2UoKWAgbGluZXMgZWFjaCB0aW1lXHJcbiAgICAgIC5hZGRDYXNlKGRlY3JlbWVudCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICBzdGF0ZS5jb3VudGVyIC09IGFjdGlvbi5wYXlsb2FkO1xyXG4gICAgICB9KVxyXG4gICAgICAvLyBZb3UgY2FuIGFwcGx5IGEgXCJtYXRjaGVyIGZ1bmN0aW9uXCIgdG8gaW5jb21pbmcgYWN0aW9uc1xyXG4gICAgICAuYWRkTWF0Y2hlcihpc0FjdGlvbldpdGhOdW1iZXJQYXlsb2FkLCAoc3RhdGUsIGFjdGlvbikgPT4ge30pXHJcbiAgICAgIC8vIGFuZCBwcm92aWRlIGEgZGVmYXVsdCBjYXNlIGlmIG5vIG90aGVyIGhhbmRsZXJzIG1hdGNoZWRcclxuICAgICAgLmFkZERlZmF1bHRDYXNlKChzdGF0ZSwgYWN0aW9uKSA9PiB7fSk7XHJcbiAgfVxyXG4pO1xyXG5gYGBcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZXI8UyBleHRlbmRzIE5vdEZ1bmN0aW9uPGFueT4+KFxyXG4gIGluaXRpYWxTdGF0ZTogUyB8ICgoKSA9PiBTKSxcclxuICBidWlsZGVyQ2FsbGJhY2s6IChidWlsZGVyOiBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxTPikgPT4gdm9pZFxyXG4pOiBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZTxTPlxyXG5cclxuLyoqXHJcbiAqIEEgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHJlZHVjZXIgYXMgYSBtYXBwaW5nIGZyb20gYWN0aW9uXHJcbiAqIHR5cGUgdG8gKmNhc2UgcmVkdWNlciogZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZXNlIGFjdGlvbiB0eXBlcy4gVGhlXHJcbiAqIHJlZHVjZXIncyBpbml0aWFsIHN0YXRlIGlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXHJcbiAqXHJcbiAqIFRoZSBib2R5IG9mIGV2ZXJ5IGNhc2UgcmVkdWNlciBpcyBpbXBsaWNpdGx5IHdyYXBwZWQgd2l0aCBhIGNhbGwgdG9cclxuICogYHByb2R1Y2UoKWAgZnJvbSB0aGUgW2ltbWVyXShodHRwczovL2dpdGh1Yi5jb20vbXdlc3RzdHJhdGUvaW1tZXIpIGxpYnJhcnkuXHJcbiAqIFRoaXMgbWVhbnMgdGhhdCByYXRoZXIgdGhhbiByZXR1cm5pbmcgYSBuZXcgc3RhdGUgb2JqZWN0LCB5b3UgY2FuIGFsc29cclxuICogbXV0YXRlIHRoZSBwYXNzZWQtaW4gc3RhdGUgb2JqZWN0IGRpcmVjdGx5OyB0aGVzZSBtdXRhdGlvbnMgd2lsbCB0aGVuIGJlXHJcbiAqIGF1dG9tYXRpY2FsbHkgYW5kIGVmZmljaWVudGx5IHRyYW5zbGF0ZWQgaW50byBjb3BpZXMsIGdpdmluZyB5b3UgYm90aFxyXG4gKiBjb252ZW5pZW5jZSBhbmQgaW1tdXRhYmlsaXR5LlxyXG4gKiBcclxuICogQG92ZXJsb2FkU3VtbWFyeVxyXG4gKiBUaGlzIG92ZXJsb2FkIGFjY2VwdHMgYW4gb2JqZWN0IHdoZXJlIHRoZSBrZXlzIGFyZSBzdHJpbmcgYWN0aW9uIHR5cGVzLCBhbmQgdGhlIHZhbHVlc1xyXG4gKiBhcmUgY2FzZSByZWR1Y2VyIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhvc2UgYWN0aW9uIHR5cGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5pdGlhbFN0YXRlIC0gYFN0YXRlIHwgKCgpID0+IFN0YXRlKWA6IFRoZSBpbml0aWFsIHN0YXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmVkdWNlciBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUuIFRoaXMgbWF5IGFsc28gYmUgYSBcImxhenkgaW5pdGlhbGl6ZXJcIiBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIHJldHVybiBhbiBpbml0aWFsIHN0YXRlIHZhbHVlIHdoZW4gY2FsbGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB3aGVuZXZlciB0aGUgcmVkdWNlciBpcyBjYWxsZWQgd2l0aCBgdW5kZWZpbmVkYCBhcyBpdHMgc3RhdGUgdmFsdWUsIGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBjYXNlcyBsaWtlIHJlYWRpbmcgaW5pdGlhbCBzdGF0ZSBmcm9tIGBsb2NhbFN0b3JhZ2VgLlxyXG4gKiBAcGFyYW0gYWN0aW9uc01hcCAtIEFuIG9iamVjdCBtYXBwaW5nIGZyb20gYWN0aW9uIHR5cGVzIHRvIF9jYXNlIHJlZHVjZXJzXywgZWFjaCBvZiB3aGljaCBoYW5kbGVzIG9uZSBzcGVjaWZpYyBhY3Rpb24gdHlwZS5cclxuICogQHBhcmFtIGFjdGlvbk1hdGNoZXJzIC0gQW4gYXJyYXkgb2YgbWF0Y2hlciBkZWZpbml0aW9ucyBpbiB0aGUgZm9ybSBge21hdGNoZXIsIHJlZHVjZXJ9YC5cclxuICogICBBbGwgbWF0Y2hpbmcgcmVkdWNlcnMgd2lsbCBiZSBleGVjdXRlZCBpbiBvcmRlciwgaW5kZXBlbmRlbnRseSBpZiBhIGNhc2UgcmVkdWNlciBtYXRjaGVkIG9yIG5vdC5cclxuICogQHBhcmFtIGRlZmF1bHRDYXNlUmVkdWNlciAtIEEgXCJkZWZhdWx0IGNhc2VcIiByZWR1Y2VyIHRoYXQgaXMgZXhlY3V0ZWQgaWYgbm8gY2FzZSByZWR1Y2VyIGFuZCBubyBtYXRjaGVyXHJcbiAqICAgcmVkdWNlciB3YXMgZXhlY3V0ZWQgZm9yIHRoaXMgYWN0aW9uLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG5gYGBqc1xyXG5jb25zdCBjb3VudGVyUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoMCwge1xyXG4gIGluY3JlbWVudDogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlICsgYWN0aW9uLnBheWxvYWQsXHJcbiAgZGVjcmVtZW50OiAoc3RhdGUsIGFjdGlvbikgPT4gc3RhdGUgLSBhY3Rpb24ucGF5bG9hZFxyXG59KVxyXG5cclxuLy8gQWx0ZXJuYXRlbHksIHVzZSBhIFwibGF6eSBpbml0aWFsaXplclwiIHRvIHByb3ZpZGUgdGhlIGluaXRpYWwgc3RhdGVcclxuLy8gKHdvcmtzIHdpdGggZWl0aGVyIGZvcm0gb2YgY3JlYXRlUmVkdWNlcilcclxuY29uc3QgaW5pdGlhbFN0YXRlID0gKCkgPT4gMFxyXG5jb25zdCBjb3VudGVyUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCB7XHJcbiAgaW5jcmVtZW50OiAoc3RhdGUsIGFjdGlvbikgPT4gc3RhdGUgKyBhY3Rpb24ucGF5bG9hZCxcclxuICBkZWNyZW1lbnQ6IChzdGF0ZSwgYWN0aW9uKSA9PiBzdGF0ZSAtIGFjdGlvbi5wYXlsb2FkXHJcbn0pXHJcbmBgYFxyXG4gXHJcbiAqIEFjdGlvbiBjcmVhdG9ycyB0aGF0IHdlcmUgZ2VuZXJhdGVkIHVzaW5nIFtgY3JlYXRlQWN0aW9uYF0oLi9jcmVhdGVBY3Rpb24pIG1heSBiZSB1c2VkIGRpcmVjdGx5IGFzIHRoZSBrZXlzIGhlcmUsIHVzaW5nIGNvbXB1dGVkIHByb3BlcnR5IHN5bnRheDpcclxuXHJcbmBgYGpzXHJcbmNvbnN0IGluY3JlbWVudCA9IGNyZWF0ZUFjdGlvbignaW5jcmVtZW50JylcclxuY29uc3QgZGVjcmVtZW50ID0gY3JlYXRlQWN0aW9uKCdkZWNyZW1lbnQnKVxyXG5cclxuY29uc3QgY291bnRlclJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKDAsIHtcclxuICBbaW5jcmVtZW50XTogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlICsgYWN0aW9uLnBheWxvYWQsXHJcbiAgW2RlY3JlbWVudC50eXBlXTogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlIC0gYWN0aW9uLnBheWxvYWRcclxufSlcclxuYGBgXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyPFxyXG4gIFMgZXh0ZW5kcyBOb3RGdW5jdGlvbjxhbnk+LFxyXG4gIENSIGV4dGVuZHMgQ2FzZVJlZHVjZXJzPFMsIGFueT4gPSBDYXNlUmVkdWNlcnM8UywgYW55PlxyXG4+KFxyXG4gIGluaXRpYWxTdGF0ZTogUyB8ICgoKSA9PiBTKSxcclxuICBhY3Rpb25zTWFwOiBDUixcclxuICBhY3Rpb25NYXRjaGVycz86IEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4sXHJcbiAgZGVmYXVsdENhc2VSZWR1Y2VyPzogQ2FzZVJlZHVjZXI8Uz5cclxuKTogUmVkdWNlcldpdGhJbml0aWFsU3RhdGU8Uz5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyPFMgZXh0ZW5kcyBOb3RGdW5jdGlvbjxhbnk+PihcclxuICBpbml0aWFsU3RhdGU6IFMgfCAoKCkgPT4gUyksXHJcbiAgbWFwT3JCdWlsZGVyQ2FsbGJhY2s6XHJcbiAgICB8IENhc2VSZWR1Y2VyczxTLCBhbnk+XHJcbiAgICB8ICgoYnVpbGRlcjogQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8Uz4pID0+IHZvaWQpLFxyXG4gIGFjdGlvbk1hdGNoZXJzOiBSZWFkb25seUFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4gPSBbXSxcclxuICBkZWZhdWx0Q2FzZVJlZHVjZXI/OiBDYXNlUmVkdWNlcjxTPlxyXG4pOiBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZTxTPiB7XHJcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgIGlmICh0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGlmICghaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbikge1xyXG4gICAgICAgIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSB0cnVlXHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgXCJUaGUgb2JqZWN0IG5vdGF0aW9uIGZvciBgY3JlYXRlUmVkdWNlcmAgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSVEsgMi4wLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlUmVkdWNlclwiXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgW2FjdGlvbnNNYXAsIGZpbmFsQWN0aW9uTWF0Y2hlcnMsIGZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXSA9XHJcbiAgICB0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09ICdmdW5jdGlvbidcclxuICAgICAgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhtYXBPckJ1aWxkZXJDYWxsYmFjaylcclxuICAgICAgOiBbbWFwT3JCdWlsZGVyQ2FsbGJhY2ssIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXJdXHJcblxyXG4gIC8vIEVuc3VyZSB0aGUgaW5pdGlhbCBzdGF0ZSBnZXRzIGZyb3plbiBlaXRoZXIgd2F5IChpZiBkcmFmdGFibGUpXHJcbiAgbGV0IGdldEluaXRpYWxTdGF0ZTogKCkgPT4gU1xyXG4gIGlmIChpc1N0YXRlRnVuY3Rpb24oaW5pdGlhbFN0YXRlKSkge1xyXG4gICAgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4gZnJlZXplRHJhZnRhYmxlKGluaXRpYWxTdGF0ZSgpKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBmcm96ZW5Jbml0aWFsU3RhdGUgPSBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKVxyXG4gICAgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4gZnJvemVuSW5pdGlhbFN0YXRlXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlKCksIGFjdGlvbjogYW55KTogUyB7XHJcbiAgICBsZXQgY2FzZVJlZHVjZXJzID0gW1xyXG4gICAgICBhY3Rpb25zTWFwW2FjdGlvbi50eXBlXSxcclxuICAgICAgLi4uZmluYWxBY3Rpb25NYXRjaGVyc1xyXG4gICAgICAgIC5maWx0ZXIoKHsgbWF0Y2hlciB9KSA9PiBtYXRjaGVyKGFjdGlvbikpXHJcbiAgICAgICAgLm1hcCgoeyByZWR1Y2VyIH0pID0+IHJlZHVjZXIpLFxyXG4gICAgXVxyXG4gICAgaWYgKGNhc2VSZWR1Y2Vycy5maWx0ZXIoKGNyKSA9PiAhIWNyKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgY2FzZVJlZHVjZXJzID0gW2ZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYXNlUmVkdWNlcnMucmVkdWNlKChwcmV2aW91c1N0YXRlLCBjYXNlUmVkdWNlcik6IFMgPT4ge1xyXG4gICAgICBpZiAoY2FzZVJlZHVjZXIpIHtcclxuICAgICAgICBpZiAoaXNEcmFmdChwcmV2aW91c1N0YXRlKSkge1xyXG4gICAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGEgZHJhZnQsIHdlIG11c3QgYWxyZWFkeSBiZSBpbnNpZGUgYSBgY3JlYXRlTmV4dFN0YXRlYCBjYWxsLFxyXG4gICAgICAgICAgLy8gbGlrZWx5IGJlY2F1c2UgdGhpcyBpcyBiZWluZyB3cmFwcGVkIGluIGBjcmVhdGVSZWR1Y2VyYCwgYGNyZWF0ZVNsaWNlYCwgb3IgbmVzdGVkXHJcbiAgICAgICAgICAvLyBpbnNpZGUgYW4gZXhpc3RpbmcgZHJhZnQuIEl0J3Mgc2FmZSB0byBqdXN0IHBhc3MgdGhlIGRyYWZ0IHRvIHRoZSBtdXRhdG9yLlxyXG4gICAgICAgICAgY29uc3QgZHJhZnQgPSBwcmV2aW91c1N0YXRlIGFzIERyYWZ0PFM+IC8vIFdlIGNhbiBhc3N1bWUgdGhpcyBpcyBhbHJlYWR5IGEgZHJhZnRcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhc2VSZWR1Y2VyKGRyYWZ0LCBhY3Rpb24pXHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBTXHJcbiAgICAgICAgfSBlbHNlIGlmICghaXNEcmFmdGFibGUocHJldmlvdXNTdGF0ZSkpIHtcclxuICAgICAgICAgIC8vIElmIHN0YXRlIGlzIG5vdCBkcmFmdGFibGUgKGV4OiBhIHByaW1pdGl2ZSwgc3VjaCBhcyAwKSwgd2Ugd2FudCB0byBkaXJlY3RseVxyXG4gICAgICAgICAgLy8gcmV0dXJuIHRoZSBjYXNlUmVkdWNlciBmdW5jIGFuZCBub3Qgd3JhcCBpdCB3aXRoIHByb2R1Y2UuXHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYXNlUmVkdWNlcihwcmV2aW91c1N0YXRlIGFzIGFueSwgYWN0aW9uKVxyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgJ0EgY2FzZSByZWR1Y2VyIG9uIGEgbm9uLWRyYWZ0YWJsZSB2YWx1ZSBtdXN0IG5vdCByZXR1cm4gdW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBTXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEB0cy1pZ25vcmUgY3JlYXRlTmV4dFN0YXRlKCkgcHJvZHVjZXMgYW4gSW1tdXRhYmxlPERyYWZ0PFM+PiByYXRoZXJcclxuICAgICAgICAgIC8vIHRoYW4gYW4gSW1tdXRhYmxlPFM+LCBhbmQgVHlwZVNjcmlwdCBjYW5ub3QgZmluZCBvdXQgaG93IHRvIHJlY29uY2lsZVxyXG4gICAgICAgICAgLy8gdGhlc2UgdHdvIHR5cGVzLlxyXG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZShwcmV2aW91c1N0YXRlLCAoZHJhZnQ6IERyYWZ0PFM+KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlXHJcbiAgICB9LCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIHJlZHVjZXIuZ2V0SW5pdGlhbFN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlXHJcblxyXG4gIHJldHVybiByZWR1Y2VyIGFzIFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFM+XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgQWN0aW9uLCBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUge1xyXG4gIENhc2VSZWR1Y2VyLFxyXG4gIENhc2VSZWR1Y2VycyxcclxuICBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uLFxyXG59IGZyb20gJy4vY3JlYXRlUmVkdWNlcidcclxuaW1wb3J0IHR5cGUgeyBUeXBlR3VhcmQgfSBmcm9tICcuL3RzSGVscGVycydcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHlwZWRBY3Rpb25DcmVhdG9yPFR5cGUgZXh0ZW5kcyBzdHJpbmc+IHtcclxuICAoLi4uYXJnczogYW55W10pOiBBY3Rpb248VHlwZT5cclxuICB0eXBlOiBUeXBlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGJ1aWxkZXIgZm9yIGFuIGFjdGlvbiA8LT4gcmVkdWNlciBtYXAuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8U3RhdGU+IHtcclxuICAvKipcclxuICAgKiBBZGRzIGEgY2FzZSByZWR1Y2VyIHRvIGhhbmRsZSBhIHNpbmdsZSBleGFjdCBhY3Rpb24gdHlwZS5cclxuICAgKiBAcmVtYXJrc1xyXG4gICAqIEFsbCBjYWxscyB0byBgYnVpbGRlci5hZGRDYXNlYCBtdXN0IGNvbWUgYmVmb3JlIGFueSBjYWxscyB0byBgYnVpbGRlci5hZGRNYXRjaGVyYCBvciBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAuXHJcbiAgICogQHBhcmFtIGFjdGlvbkNyZWF0b3IgLSBFaXRoZXIgYSBwbGFpbiBhY3Rpb24gdHlwZSBzdHJpbmcsIG9yIGFuIGFjdGlvbiBjcmVhdG9yIGdlbmVyYXRlZCBieSBbYGNyZWF0ZUFjdGlvbmBdKC4vY3JlYXRlQWN0aW9uKSB0aGF0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgYWN0aW9uIHR5cGUuXHJcbiAgICogQHBhcmFtIHJlZHVjZXIgLSBUaGUgYWN0dWFsIGNhc2UgcmVkdWNlciBmdW5jdGlvbi5cclxuICAgKi9cclxuICBhZGRDYXNlPEFjdGlvbkNyZWF0b3IgZXh0ZW5kcyBUeXBlZEFjdGlvbkNyZWF0b3I8c3RyaW5nPj4oXHJcbiAgICBhY3Rpb25DcmVhdG9yOiBBY3Rpb25DcmVhdG9yLFxyXG4gICAgcmVkdWNlcjogQ2FzZVJlZHVjZXI8U3RhdGUsIFJldHVyblR5cGU8QWN0aW9uQ3JlYXRvcj4+XHJcbiAgKTogQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8U3RhdGU+XHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIGNhc2UgcmVkdWNlciB0byBoYW5kbGUgYSBzaW5nbGUgZXhhY3QgYWN0aW9uIHR5cGUuXHJcbiAgICogQHJlbWFya3NcclxuICAgKiBBbGwgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkQ2FzZWAgbXVzdCBjb21lIGJlZm9yZSBhbnkgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgb3IgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgLlxyXG4gICAqIEBwYXJhbSBhY3Rpb25DcmVhdG9yIC0gRWl0aGVyIGEgcGxhaW4gYWN0aW9uIHR5cGUgc3RyaW5nLCBvciBhbiBhY3Rpb24gY3JlYXRvciBnZW5lcmF0ZWQgYnkgW2BjcmVhdGVBY3Rpb25gXSguL2NyZWF0ZUFjdGlvbikgdGhhdCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGFjdGlvbiB0eXBlLlxyXG4gICAqIEBwYXJhbSByZWR1Y2VyIC0gVGhlIGFjdHVhbCBjYXNlIHJlZHVjZXIgZnVuY3Rpb24uXHJcbiAgICovXHJcbiAgYWRkQ2FzZTxUeXBlIGV4dGVuZHMgc3RyaW5nLCBBIGV4dGVuZHMgQWN0aW9uPFR5cGU+PihcclxuICAgIHR5cGU6IFR5cGUsXHJcbiAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgQT5cclxuICApOiBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxTdGF0ZT5cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3dzIHlvdSB0byBtYXRjaCB5b3VyIGluY29taW5nIGFjdGlvbnMgYWdhaW5zdCB5b3VyIG93biBmaWx0ZXIgZnVuY3Rpb24gaW5zdGVhZCBvZiBvbmx5IHRoZSBgYWN0aW9uLnR5cGVgIHByb3BlcnR5LlxyXG4gICAqIEByZW1hcmtzXHJcbiAgICogSWYgbXVsdGlwbGUgbWF0Y2hlciByZWR1Y2VycyBtYXRjaCwgYWxsIG9mIHRoZW0gd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgb3JkZXJcclxuICAgKiB0aGV5IHdlcmUgZGVmaW5lZCBpbiAtIGV2ZW4gaWYgYSBjYXNlIHJlZHVjZXIgYWxyZWFkeSBtYXRjaGVkLlxyXG4gICAqIEFsbCBjYWxscyB0byBgYnVpbGRlci5hZGRNYXRjaGVyYCBtdXN0IGNvbWUgYWZ0ZXIgYW55IGNhbGxzIHRvIGBidWlsZGVyLmFkZENhc2VgIGFuZCBiZWZvcmUgYW55IGNhbGxzIHRvIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYC5cclxuICAgKiBAcGFyYW0gbWF0Y2hlciAtIEEgbWF0Y2hlciBmdW5jdGlvbi4gSW4gVHlwZVNjcmlwdCwgdGhpcyBzaG91bGQgYmUgYSBbdHlwZSBwcmVkaWNhdGVdKGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvbmFycm93aW5nLmh0bWwjdXNpbmctdHlwZS1wcmVkaWNhdGVzKVxyXG4gICAqICAgZnVuY3Rpb25cclxuICAgKiBAcGFyYW0gcmVkdWNlciAtIFRoZSBhY3R1YWwgY2FzZSByZWR1Y2VyIGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuYGBgdHNcclxuaW1wb3J0IHtcclxuICBjcmVhdGVBY3Rpb24sXHJcbiAgY3JlYXRlUmVkdWNlcixcclxuICBBc3luY1RodW5rLFxyXG4gIEFueUFjdGlvbixcclxufSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xyXG5cclxudHlwZSBHZW5lcmljQXN5bmNUaHVuayA9IEFzeW5jVGh1bms8dW5rbm93biwgdW5rbm93biwgYW55PjtcclxuXHJcbnR5cGUgUGVuZGluZ0FjdGlvbiA9IFJldHVyblR5cGU8R2VuZXJpY0FzeW5jVGh1bmtbXCJwZW5kaW5nXCJdPjtcclxudHlwZSBSZWplY3RlZEFjdGlvbiA9IFJldHVyblR5cGU8R2VuZXJpY0FzeW5jVGh1bmtbXCJyZWplY3RlZFwiXT47XHJcbnR5cGUgRnVsZmlsbGVkQWN0aW9uID0gUmV0dXJuVHlwZTxHZW5lcmljQXN5bmNUaHVua1tcImZ1bGZpbGxlZFwiXT47XHJcblxyXG5jb25zdCBpbml0aWFsU3RhdGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuY29uc3QgcmVzZXRBY3Rpb24gPSBjcmVhdGVBY3Rpb24oXCJyZXNldC10cmFja2VkLWxvYWRpbmctc3RhdGVcIik7XHJcblxyXG5mdW5jdGlvbiBpc1BlbmRpbmdBY3Rpb24oYWN0aW9uOiBBbnlBY3Rpb24pOiBhY3Rpb24gaXMgUGVuZGluZ0FjdGlvbiB7XHJcbiAgcmV0dXJuIGFjdGlvbi50eXBlLmVuZHNXaXRoKFwiL3BlbmRpbmdcIik7XHJcbn1cclxuXHJcbmNvbnN0IHJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgKGJ1aWxkZXIpID0+IHtcclxuICBidWlsZGVyXHJcbiAgICAuYWRkQ2FzZShyZXNldEFjdGlvbiwgKCkgPT4gaW5pdGlhbFN0YXRlKVxyXG4gICAgLy8gbWF0Y2hlciBjYW4gYmUgZGVmaW5lZCBvdXRzaWRlIGFzIGEgdHlwZSBwcmVkaWNhdGUgZnVuY3Rpb25cclxuICAgIC5hZGRNYXRjaGVyKGlzUGVuZGluZ0FjdGlvbiwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGVbYWN0aW9uLm1ldGEucmVxdWVzdElkXSA9IFwicGVuZGluZ1wiO1xyXG4gICAgfSlcclxuICAgIC5hZGRNYXRjaGVyKFxyXG4gICAgICAvLyBtYXRjaGVyIGNhbiBiZSBkZWZpbmVkIGlubGluZSBhcyBhIHR5cGUgcHJlZGljYXRlIGZ1bmN0aW9uXHJcbiAgICAgIChhY3Rpb24pOiBhY3Rpb24gaXMgUmVqZWN0ZWRBY3Rpb24gPT4gYWN0aW9uLnR5cGUuZW5kc1dpdGgoXCIvcmVqZWN0ZWRcIiksXHJcbiAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc3RhdGVbYWN0aW9uLm1ldGEucmVxdWVzdElkXSA9IFwicmVqZWN0ZWRcIjtcclxuICAgICAgfVxyXG4gICAgKVxyXG4gICAgLy8gbWF0Y2hlciBjYW4ganVzdCByZXR1cm4gYm9vbGVhbiBhbmQgdGhlIG1hdGNoZXIgY2FuIHJlY2VpdmUgYSBnZW5lcmljIGFyZ3VtZW50XHJcbiAgICAuYWRkTWF0Y2hlcjxGdWxmaWxsZWRBY3Rpb24+KFxyXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZS5lbmRzV2l0aChcIi9mdWxmaWxsZWRcIiksXHJcbiAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc3RhdGVbYWN0aW9uLm1ldGEucmVxdWVzdElkXSA9IFwiZnVsZmlsbGVkXCI7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbn0pO1xyXG5gYGBcclxuICAgKi9cclxuICBhZGRNYXRjaGVyPEE+KFxyXG4gICAgbWF0Y2hlcjogVHlwZUd1YXJkPEE+IHwgKChhY3Rpb246IGFueSkgPT4gYm9vbGVhbiksXHJcbiAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgQSBleHRlbmRzIEFueUFjdGlvbiA/IEEgOiBBICYgQW55QWN0aW9uPlxyXG4gICk6IE9taXQ8QWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8U3RhdGU+LCAnYWRkQ2FzZSc+XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBcImRlZmF1bHQgY2FzZVwiIHJlZHVjZXIgdGhhdCBpcyBleGVjdXRlZCBpZiBubyBjYXNlIHJlZHVjZXIgYW5kIG5vIG1hdGNoZXJcclxuICAgKiByZWR1Y2VyIHdhcyBleGVjdXRlZCBmb3IgdGhpcyBhY3Rpb24uXHJcbiAgICogQHBhcmFtIHJlZHVjZXIgLSBUaGUgZmFsbGJhY2sgXCJkZWZhdWx0IGNhc2VcIiByZWR1Y2VyIGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuYGBgdHNcclxuaW1wb3J0IHsgY3JlYXRlUmVkdWNlciB9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnXHJcbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHsgb3RoZXJBY3Rpb25zOiAwIH1cclxuY29uc3QgcmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCBidWlsZGVyID0+IHtcclxuICBidWlsZGVyXHJcbiAgICAvLyAuYWRkQ2FzZSguLi4pXHJcbiAgICAvLyAuYWRkTWF0Y2hlciguLi4pXHJcbiAgICAuYWRkRGVmYXVsdENhc2UoKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGUub3RoZXJBY3Rpb25zKytcclxuICAgIH0pXHJcbn0pXHJcbmBgYFxyXG4gICAqL1xyXG4gIGFkZERlZmF1bHRDYXNlKHJlZHVjZXI6IENhc2VSZWR1Y2VyPFN0YXRlLCBBbnlBY3Rpb24+KToge31cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrPFM+KFxyXG4gIGJ1aWxkZXJDYWxsYmFjazogKGJ1aWxkZXI6IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPFM+KSA9PiB2b2lkXHJcbik6IFtcclxuICBDYXNlUmVkdWNlcnM8UywgYW55PixcclxuICBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uPFM+LFxyXG4gIENhc2VSZWR1Y2VyPFMsIEFueUFjdGlvbj4gfCB1bmRlZmluZWRcclxuXSB7XHJcbiAgY29uc3QgYWN0aW9uc01hcDogQ2FzZVJlZHVjZXJzPFMsIGFueT4gPSB7fVxyXG4gIGNvbnN0IGFjdGlvbk1hdGNoZXJzOiBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uPFM+ID0gW11cclxuICBsZXQgZGVmYXVsdENhc2VSZWR1Y2VyOiBDYXNlUmVkdWNlcjxTLCBBbnlBY3Rpb24+IHwgdW5kZWZpbmVkXHJcbiAgY29uc3QgYnVpbGRlciA9IHtcclxuICAgIGFkZENhc2UoXHJcbiAgICAgIHR5cGVPckFjdGlvbkNyZWF0b3I6IHN0cmluZyB8IFR5cGVkQWN0aW9uQ3JlYXRvcjxhbnk+LFxyXG4gICAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTPlxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgdG8ga2VlcCB0aGUgZGVmaW5pdGlvbiBieSB0aGUgdXNlciBpbiBsaW5lIHdpdGggYWN0dWFsIGJlaGF2aW9yLFxyXG4gICAgICAgICB3ZSBlbmZvcmNlIGBhZGRDYXNlYCB0byBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBhZGRNYXRjaGVyYFxyXG4gICAgICAgICBhcyBtYXRjaGluZyBjYXNlcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBtYXRjaGVyc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmIChhY3Rpb25NYXRjaGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICdgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkTWF0Y2hlcmAnXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgJ2BidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAnXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHR5cGUgPVxyXG4gICAgICAgIHR5cGVvZiB0eXBlT3JBY3Rpb25DcmVhdG9yID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgPyB0eXBlT3JBY3Rpb25DcmVhdG9yXHJcbiAgICAgICAgICA6IHR5cGVPckFjdGlvbkNyZWF0b3IudHlwZVxyXG4gICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAnYGJ1aWxkZXIuYWRkQ2FzZWAgY2Fubm90IGJlIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGFjdGlvbiB0eXBlJ1xyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZSBpbiBhY3Rpb25zTWFwKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgJ2BidWlsZGVyLmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCB0d28gcmVkdWNlcnMgZm9yIHRoZSBzYW1lIGFjdGlvbiB0eXBlJ1xyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBhY3Rpb25zTWFwW3R5cGVdID0gcmVkdWNlclxyXG4gICAgICByZXR1cm4gYnVpbGRlclxyXG4gICAgfSxcclxuICAgIGFkZE1hdGNoZXI8QT4oXHJcbiAgICAgIG1hdGNoZXI6IFR5cGVHdWFyZDxBPixcclxuICAgICAgcmVkdWNlcjogQ2FzZVJlZHVjZXI8UywgQSBleHRlbmRzIEFueUFjdGlvbiA/IEEgOiBBICYgQW55QWN0aW9uPlxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAnYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYCdcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgYWN0aW9uTWF0Y2hlcnMucHVzaCh7IG1hdGNoZXIsIHJlZHVjZXIgfSlcclxuICAgICAgcmV0dXJuIGJ1aWxkZXJcclxuICAgIH0sXHJcbiAgICBhZGREZWZhdWx0Q2FzZShyZWR1Y2VyOiBDYXNlUmVkdWNlcjxTLCBBbnlBY3Rpb24+KSB7XHJcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0Q2FzZVJlZHVjZXIgPSByZWR1Y2VyXHJcbiAgICAgIHJldHVybiBidWlsZGVyXHJcbiAgICB9LFxyXG4gIH1cclxuICBidWlsZGVyQ2FsbGJhY2soYnVpbGRlcilcclxuICByZXR1cm4gW2FjdGlvbnNNYXAsIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXJdXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgQW55QWN0aW9uLCBSZWR1Y2VyIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB7IGNyZWF0ZU5leHRTdGF0ZSB9IGZyb20gJy4nXHJcbmltcG9ydCB0eXBlIHtcclxuICBBY3Rpb25DcmVhdG9yV2l0aG91dFBheWxvYWQsXHJcbiAgUGF5bG9hZEFjdGlvbixcclxuICBQYXlsb2FkQWN0aW9uQ3JlYXRvcixcclxuICBQcmVwYXJlQWN0aW9uLFxyXG4gIF9BY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZCxcclxufSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuaW1wb3J0IHsgY3JlYXRlQWN0aW9uIH0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB0eXBlIHtcclxuICBDYXNlUmVkdWNlcixcclxuICBDYXNlUmVkdWNlcnMsXHJcbiAgUmVkdWNlcldpdGhJbml0aWFsU3RhdGUsXHJcbn0gZnJvbSAnLi9jcmVhdGVSZWR1Y2VyJ1xyXG5pbXBvcnQgeyBjcmVhdGVSZWR1Y2VyLCBOb3RGdW5jdGlvbiB9IGZyb20gJy4vY3JlYXRlUmVkdWNlcidcclxuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlciB9IGZyb20gJy4vbWFwQnVpbGRlcnMnXHJcbmltcG9ydCB7IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrIH0gZnJvbSAnLi9tYXBCdWlsZGVycydcclxuaW1wb3J0IHR5cGUgeyBOb0luZmVyIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB7IGZyZWV6ZURyYWZ0YWJsZSB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5sZXQgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IGZhbHNlXHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIGNyZWF0b3IgYXR0YWNoZWQgdG8gYSBzbGljZS5cclxuICpcclxuICogQGRlcHJlY2F0ZWQgcGxlYXNlIHVzZSBQYXlsb2FkQWN0aW9uQ3JlYXRvciBkaXJlY3RseVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBTbGljZUFjdGlvbkNyZWF0b3I8UD4gPSBQYXlsb2FkQWN0aW9uQ3JlYXRvcjxQPlxyXG5cclxuLyoqXHJcbiAqIFRoZSByZXR1cm4gdmFsdWUgb2YgYGNyZWF0ZVNsaWNlYFxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlPFxyXG4gIFN0YXRlID0gYW55LFxyXG4gIENhc2VSZWR1Y2VycyBleHRlbmRzIFNsaWNlQ2FzZVJlZHVjZXJzPFN0YXRlPiA9IFNsaWNlQ2FzZVJlZHVjZXJzPFN0YXRlPixcclxuICBOYW1lIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nXHJcbj4ge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBzbGljZSBuYW1lLlxyXG4gICAqL1xyXG4gIG5hbWU6IE5hbWVcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHNsaWNlJ3MgcmVkdWNlci5cclxuICAgKi9cclxuICByZWR1Y2VyOiBSZWR1Y2VyPFN0YXRlPlxyXG5cclxuICAvKipcclxuICAgKiBBY3Rpb24gY3JlYXRvcnMgZm9yIHRoZSB0eXBlcyBvZiBhY3Rpb25zIHRoYXQgYXJlIGhhbmRsZWQgYnkgdGhlIHNsaWNlXHJcbiAgICogcmVkdWNlci5cclxuICAgKi9cclxuICBhY3Rpb25zOiBDYXNlUmVkdWNlckFjdGlvbnM8Q2FzZVJlZHVjZXJzLCBOYW1lPlxyXG5cclxuICAvKipcclxuICAgKiBUaGUgaW5kaXZpZHVhbCBjYXNlIHJlZHVjZXIgZnVuY3Rpb25zIHRoYXQgd2VyZSBwYXNzZWQgaW4gdGhlIGByZWR1Y2Vyc2AgcGFyYW1ldGVyLlxyXG4gICAqIFRoaXMgZW5hYmxlcyByZXVzZSBhbmQgdGVzdGluZyBpZiB0aGV5IHdlcmUgZGVmaW5lZCBpbmxpbmUgd2hlbiBjYWxsaW5nIGBjcmVhdGVTbGljZWAuXHJcbiAgICovXHJcbiAgY2FzZVJlZHVjZXJzOiBTbGljZURlZmluZWRDYXNlUmVkdWNlcnM8Q2FzZVJlZHVjZXJzPlxyXG5cclxuICAvKipcclxuICAgKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGluaXRpYWwgc3RhdGUgdmFsdWUgZ2l2ZW4gdG8gdGhlIHNsaWNlLlxyXG4gICAqIElmIGEgbGF6eSBzdGF0ZSBpbml0aWFsaXplciB3YXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgY2FsbGVkIGFuZCBhIGZyZXNoIHZhbHVlIHJldHVybmVkLlxyXG4gICAqL1xyXG4gIGdldEluaXRpYWxTdGF0ZTogKCkgPT4gU3RhdGVcclxufVxyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGBjcmVhdGVTbGljZSgpYC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVTbGljZU9wdGlvbnM8XHJcbiAgU3RhdGUgPSBhbnksXHJcbiAgQ1IgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4gPSBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4sXHJcbiAgTmFtZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xyXG4+IHtcclxuICAvKipcclxuICAgKiBUaGUgc2xpY2UncyBuYW1lLiBVc2VkIHRvIG5hbWVzcGFjZSB0aGUgZ2VuZXJhdGVkIGFjdGlvbiB0eXBlcy5cclxuICAgKi9cclxuICBuYW1lOiBOYW1lXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpbml0aWFsIHN0YXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmVkdWNlciBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUuIFRoaXMgbWF5IGFsc28gYmUgYSBcImxhenkgaW5pdGlhbGl6ZXJcIiBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIHJldHVybiBhbiBpbml0aWFsIHN0YXRlIHZhbHVlIHdoZW4gY2FsbGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB3aGVuZXZlciB0aGUgcmVkdWNlciBpcyBjYWxsZWQgd2l0aCBgdW5kZWZpbmVkYCBhcyBpdHMgc3RhdGUgdmFsdWUsIGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBjYXNlcyBsaWtlIHJlYWRpbmcgaW5pdGlhbCBzdGF0ZSBmcm9tIGBsb2NhbFN0b3JhZ2VgLlxyXG4gICAqL1xyXG4gIGluaXRpYWxTdGF0ZTogU3RhdGUgfCAoKCkgPT4gU3RhdGUpXHJcblxyXG4gIC8qKlxyXG4gICAqIEEgbWFwcGluZyBmcm9tIGFjdGlvbiB0eXBlcyB0byBhY3Rpb24tdHlwZS1zcGVjaWZpYyAqY2FzZSByZWR1Y2VyKlxyXG4gICAqIGZ1bmN0aW9ucy4gRm9yIGV2ZXJ5IGFjdGlvbiB0eXBlLCBhIG1hdGNoaW5nIGFjdGlvbiBjcmVhdG9yIHdpbGwgYmVcclxuICAgKiBnZW5lcmF0ZWQgdXNpbmcgYGNyZWF0ZUFjdGlvbigpYC5cclxuICAgKi9cclxuICByZWR1Y2VyczogVmFsaWRhdGVTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZSwgQ1I+XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgY2FsbGJhY2sgdGhhdCByZWNlaXZlcyBhICpidWlsZGVyKiBvYmplY3QgdG8gZGVmaW5lXHJcbiAgICogY2FzZSByZWR1Y2VycyB2aWEgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkQ2FzZShhY3Rpb25DcmVhdG9yT3JUeXBlLCByZWR1Y2VyKWAuXHJcbiAgICogXHJcbiAgICogQWx0ZXJuYXRpdmVseSwgYSBtYXBwaW5nIGZyb20gYWN0aW9uIHR5cGVzIHRvIGFjdGlvbi10eXBlLXNwZWNpZmljICpjYXNlIHJlZHVjZXIqXHJcbiAgICogZnVuY3Rpb25zLiBUaGVzZSByZWR1Y2VycyBzaG91bGQgaGF2ZSBleGlzdGluZyBhY3Rpb24gdHlwZXMgdXNlZFxyXG4gICAqIGFzIHRoZSBrZXlzLCBhbmQgYWN0aW9uIGNyZWF0b3JzIHdpbGwgX25vdF8gYmUgZ2VuZXJhdGVkLlxyXG4gICAqIFxyXG4gICAqIEBleGFtcGxlXHJcbmBgYHRzXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgY3JlYXRlU2xpY2UsIEFjdGlvbiwgQW55QWN0aW9uIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCdcclxuY29uc3QgaW5jcmVtZW50QnkgPSBjcmVhdGVBY3Rpb248bnVtYmVyPignaW5jcmVtZW50QnknKVxyXG5jb25zdCBkZWNyZW1lbnQgPSBjcmVhdGVBY3Rpb24oJ2RlY3JlbWVudCcpXHJcblxyXG5pbnRlcmZhY2UgUmVqZWN0ZWRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xyXG4gIGVycm9yOiBFcnJvclxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1JlamVjdGVkQWN0aW9uKGFjdGlvbjogQW55QWN0aW9uKTogYWN0aW9uIGlzIFJlamVjdGVkQWN0aW9uIHtcclxuICByZXR1cm4gYWN0aW9uLnR5cGUuZW5kc1dpdGgoJ3JlamVjdGVkJylcclxufVxyXG5cclxuY3JlYXRlU2xpY2Uoe1xyXG4gIG5hbWU6ICdjb3VudGVyJyxcclxuICBpbml0aWFsU3RhdGU6IDAsXHJcbiAgcmVkdWNlcnM6IHt9LFxyXG4gIGV4dHJhUmVkdWNlcnM6IGJ1aWxkZXIgPT4ge1xyXG4gICAgYnVpbGRlclxyXG4gICAgICAuYWRkQ2FzZShpbmNyZW1lbnRCeSwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICAvLyBhY3Rpb24gaXMgaW5mZXJyZWQgY29ycmVjdGx5IGhlcmUgaWYgdXNpbmcgVFNcclxuICAgICAgfSlcclxuICAgICAgLy8gWW91IGNhbiBjaGFpbiBjYWxscywgb3IgaGF2ZSBzZXBhcmF0ZSBgYnVpbGRlci5hZGRDYXNlKClgIGxpbmVzIGVhY2ggdGltZVxyXG4gICAgICAuYWRkQ2FzZShkZWNyZW1lbnQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7fSlcclxuICAgICAgLy8gWW91IGNhbiBtYXRjaCBhIHJhbmdlIG9mIGFjdGlvbiB0eXBlc1xyXG4gICAgICAuYWRkTWF0Y2hlcihcclxuICAgICAgICBpc1JlamVjdGVkQWN0aW9uLFxyXG4gICAgICAgIC8vIGBhY3Rpb25gIHdpbGwgYmUgaW5mZXJyZWQgYXMgYSBSZWplY3RlZEFjdGlvbiBkdWUgdG8gaXNSZWplY3RlZEFjdGlvbiBiZWluZyBkZWZpbmVkIGFzIGEgdHlwZSBndWFyZFxyXG4gICAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PiB7fVxyXG4gICAgICApXHJcbiAgICAgIC8vIGFuZCBwcm92aWRlIGEgZGVmYXVsdCBjYXNlIGlmIG5vIG90aGVyIGhhbmRsZXJzIG1hdGNoZWRcclxuICAgICAgLmFkZERlZmF1bHRDYXNlKChzdGF0ZSwgYWN0aW9uKSA9PiB7fSlcclxuICAgIH1cclxufSlcclxuYGBgXHJcbiAgICovXHJcbiAgZXh0cmFSZWR1Y2Vycz86XHJcbiAgICB8IENhc2VSZWR1Y2VyczxOb0luZmVyPFN0YXRlPiwgYW55PlxyXG4gICAgfCAoKGJ1aWxkZXI6IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPE5vSW5mZXI8U3RhdGU+PikgPT4gdm9pZClcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgQ2FzZVJlZHVjZXIgd2l0aCBhIGBwcmVwYXJlYCBtZXRob2QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENhc2VSZWR1Y2VyV2l0aFByZXBhcmU8U3RhdGUsIEFjdGlvbiBleHRlbmRzIFBheWxvYWRBY3Rpb24+ID0ge1xyXG4gIHJlZHVjZXI6IENhc2VSZWR1Y2VyPFN0YXRlLCBBY3Rpb24+XHJcbiAgcHJlcGFyZTogUHJlcGFyZUFjdGlvbjxBY3Rpb25bJ3BheWxvYWQnXT5cclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSB0eXBlIGRlc2NyaWJpbmcgYSBzbGljZSdzIGByZWR1Y2Vyc2Agb3B0aW9uLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4gPSB7XHJcbiAgW0s6IHN0cmluZ106XHJcbiAgICB8IENhc2VSZWR1Y2VyPFN0YXRlLCBQYXlsb2FkQWN0aW9uPGFueT4+XHJcbiAgICB8IENhc2VSZWR1Y2VyV2l0aFByZXBhcmU8U3RhdGUsIFBheWxvYWRBY3Rpb248YW55LCBzdHJpbmcsIGFueSwgYW55Pj5cclxufVxyXG5cclxudHlwZSBTbGljZUFjdGlvblR5cGU8XHJcbiAgU2xpY2VOYW1lIGV4dGVuZHMgc3RyaW5nLFxyXG4gIEFjdGlvbk5hbWUgZXh0ZW5kcyBrZXlvZiBhbnlcclxuPiA9IEFjdGlvbk5hbWUgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgPyBgJHtTbGljZU5hbWV9LyR7QWN0aW9uTmFtZX1gIDogc3RyaW5nXHJcblxyXG4vKipcclxuICogRGVyaXZlcyB0aGUgc2xpY2UncyBgYWN0aW9uc2AgcHJvcGVydHkgZnJvbSB0aGUgYHJlZHVjZXJzYCBvcHRpb25zXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENhc2VSZWR1Y2VyQWN0aW9uczxcclxuICBDYXNlUmVkdWNlcnMgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2Vyczxhbnk+LFxyXG4gIFNsaWNlTmFtZSBleHRlbmRzIHN0cmluZ1xyXG4+ID0ge1xyXG4gIFtUeXBlIGluIGtleW9mIENhc2VSZWR1Y2Vyc106IENhc2VSZWR1Y2Vyc1tUeXBlXSBleHRlbmRzIHsgcHJlcGFyZTogYW55IH1cclxuICAgID8gQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyV2l0aFByZXBhcmU8XHJcbiAgICAgICAgQ2FzZVJlZHVjZXJzW1R5cGVdLFxyXG4gICAgICAgIFNsaWNlQWN0aW9uVHlwZTxTbGljZU5hbWUsIFR5cGU+XHJcbiAgICAgID5cclxuICAgIDogQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyPFxyXG4gICAgICAgIENhc2VSZWR1Y2Vyc1tUeXBlXSxcclxuICAgICAgICBTbGljZUFjdGlvblR5cGU8U2xpY2VOYW1lLCBUeXBlPlxyXG4gICAgICA+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBgUGF5bG9hZEFjdGlvbkNyZWF0b3JgIHR5cGUgZm9yIGEgcGFzc2VkIGBDYXNlUmVkdWNlcldpdGhQcmVwYXJlYFxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnR5cGUgQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyV2l0aFByZXBhcmU8XHJcbiAgQ1IgZXh0ZW5kcyB7IHByZXBhcmU6IGFueSB9LFxyXG4gIFR5cGUgZXh0ZW5kcyBzdHJpbmdcclxuPiA9IF9BY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxDUlsncHJlcGFyZSddLCBUeXBlPlxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGBQYXlsb2FkQWN0aW9uQ3JlYXRvcmAgdHlwZSBmb3IgYSBwYXNzZWQgYENhc2VSZWR1Y2VyYFxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnR5cGUgQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyPENSLCBUeXBlIGV4dGVuZHMgc3RyaW5nPiA9IENSIGV4dGVuZHMgKFxyXG4gIHN0YXRlOiBhbnksXHJcbiAgYWN0aW9uOiBpbmZlciBBY3Rpb25cclxuKSA9PiBhbnlcclxuICA/IEFjdGlvbiBleHRlbmRzIHsgcGF5bG9hZDogaW5mZXIgUCB9XHJcbiAgICA/IFBheWxvYWRBY3Rpb25DcmVhdG9yPFAsIFR5cGU+XHJcbiAgICA6IEFjdGlvbkNyZWF0b3JXaXRob3V0UGF5bG9hZDxUeXBlPlxyXG4gIDogQWN0aW9uQ3JlYXRvcldpdGhvdXRQYXlsb2FkPFR5cGU+XHJcblxyXG4vKipcclxuICogRXh0cmFjdHMgdGhlIENhc2VSZWR1Y2VycyBvdXQgb2YgYSBgcmVkdWNlcnNgIG9iamVjdCwgZXZlbiBpZiB0aGV5IGFyZVxyXG4gKiB0ZXN0ZWQgaW50byBhIGBDYXNlUmVkdWNlcldpdGhQcmVwYXJlYC5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG50eXBlIFNsaWNlRGVmaW5lZENhc2VSZWR1Y2VyczxDYXNlUmVkdWNlcnMgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2Vyczxhbnk+PiA9IHtcclxuICBbVHlwZSBpbiBrZXlvZiBDYXNlUmVkdWNlcnNdOiBDYXNlUmVkdWNlcnNbVHlwZV0gZXh0ZW5kcyB7XHJcbiAgICByZWR1Y2VyOiBpbmZlciBSZWR1Y2VyXHJcbiAgfVxyXG4gICAgPyBSZWR1Y2VyXHJcbiAgICA6IENhc2VSZWR1Y2Vyc1tUeXBlXVxyXG59XHJcblxyXG4vKipcclxuICogVXNlZCBvbiBhIFNsaWNlQ2FzZVJlZHVjZXJzIG9iamVjdC5cclxuICogRW5zdXJlcyB0aGF0IGlmIGEgQ2FzZVJlZHVjZXIgaXMgYSBgQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZWAsIHRoYXRcclxuICogdGhlIGByZWR1Y2VyYCBhbmQgdGhlIGBwcmVwYXJlYCBmdW5jdGlvbiB1c2UgdGhlIHNhbWUgdHlwZSBvZiBgcGF5bG9hZGAuXHJcbiAqXHJcbiAqIE1pZ2h0IGRvIGFkZGl0aW9uYWwgc3VjaCBjaGVja3MgaW4gdGhlIGZ1dHVyZS5cclxuICpcclxuICogVGhpcyB0eXBlIGlzIG9ubHkgZXZlciB1c2VmdWwgaWYgeW91IHdhbnQgdG8gd3JpdGUgeW91ciBvd24gd3JhcHBlciBhcm91bmRcclxuICogYGNyZWF0ZVNsaWNlYC4gUGxlYXNlIGRvbid0IHVzZSBpdCBvdGhlcndpc2UhXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIFZhbGlkYXRlU2xpY2VDYXNlUmVkdWNlcnM8XHJcbiAgUyxcclxuICBBQ1IgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2VyczxTPlxyXG4+ID0gQUNSICZcclxuICB7XHJcbiAgICBbVCBpbiBrZXlvZiBBQ1JdOiBBQ1JbVF0gZXh0ZW5kcyB7XHJcbiAgICAgIHJlZHVjZXIoczogUywgYWN0aW9uPzogaW5mZXIgQSk6IGFueVxyXG4gICAgfVxyXG4gICAgICA/IHtcclxuICAgICAgICAgIHByZXBhcmUoLi4uYTogbmV2ZXJbXSk6IE9taXQ8QSwgJ3R5cGUnPlxyXG4gICAgICAgIH1cclxuICAgICAgOiB7fVxyXG4gIH1cclxuXHJcbmZ1bmN0aW9uIGdldFR5cGUoc2xpY2U6IHN0cmluZywgYWN0aW9uS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgJHtzbGljZX0vJHthY3Rpb25LZXl9YFxyXG59XHJcblxyXG4vKipcclxuICogQSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYW4gaW5pdGlhbCBzdGF0ZSwgYW4gb2JqZWN0IGZ1bGwgb2YgcmVkdWNlclxyXG4gKiBmdW5jdGlvbnMsIGFuZCBhIFwic2xpY2UgbmFtZVwiLCBhbmQgYXV0b21hdGljYWxseSBnZW5lcmF0ZXNcclxuICogYWN0aW9uIGNyZWF0b3JzIGFuZCBhY3Rpb24gdHlwZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZVxyXG4gKiByZWR1Y2VycyBhbmQgc3RhdGUuXHJcbiAqXHJcbiAqIFRoZSBgcmVkdWNlcmAgYXJndW1lbnQgaXMgcGFzc2VkIHRvIGBjcmVhdGVSZWR1Y2VyKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2xpY2U8XHJcbiAgU3RhdGUsXHJcbiAgQ2FzZVJlZHVjZXJzIGV4dGVuZHMgU2xpY2VDYXNlUmVkdWNlcnM8U3RhdGU+LFxyXG4gIE5hbWUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmdcclxuPihcclxuICBvcHRpb25zOiBDcmVhdGVTbGljZU9wdGlvbnM8U3RhdGUsIENhc2VSZWR1Y2VycywgTmFtZT5cclxuKTogU2xpY2U8U3RhdGUsIENhc2VSZWR1Y2VycywgTmFtZT4ge1xyXG4gIGNvbnN0IHsgbmFtZSB9ID0gb3B0aW9uc1xyXG4gIGlmICghbmFtZSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdgbmFtZWAgaXMgYSByZXF1aXJlZCBvcHRpb24gZm9yIGNyZWF0ZVNsaWNlJylcclxuICB9XHJcblxyXG4gIGlmIChcclxuICAgIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcclxuICApIHtcclxuICAgIGlmIChvcHRpb25zLmluaXRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgJ1lvdSBtdXN0IHByb3ZpZGUgYW4gYGluaXRpYWxTdGF0ZWAgdmFsdWUgdGhhdCBpcyBub3QgYHVuZGVmaW5lZGAuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGBpbml0aWFsU3RhdGVgJ1xyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBpbml0aWFsU3RhdGUgPVxyXG4gICAgdHlwZW9mIG9wdGlvbnMuaW5pdGlhbFN0YXRlID09ICdmdW5jdGlvbidcclxuICAgICAgPyBvcHRpb25zLmluaXRpYWxTdGF0ZVxyXG4gICAgICA6IGZyZWV6ZURyYWZ0YWJsZShvcHRpb25zLmluaXRpYWxTdGF0ZSlcclxuXHJcbiAgY29uc3QgcmVkdWNlcnMgPSBvcHRpb25zLnJlZHVjZXJzIHx8IHt9XHJcblxyXG4gIGNvbnN0IHJlZHVjZXJOYW1lcyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKVxyXG5cclxuICBjb25zdCBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZTogUmVjb3JkPHN0cmluZywgQ2FzZVJlZHVjZXI+ID0ge31cclxuICBjb25zdCBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZTogUmVjb3JkPHN0cmluZywgQ2FzZVJlZHVjZXI+ID0ge31cclxuICBjb25zdCBhY3Rpb25DcmVhdG9yczogUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+ID0ge31cclxuXHJcbiAgcmVkdWNlck5hbWVzLmZvckVhY2goKHJlZHVjZXJOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSA9IHJlZHVjZXJzW3JlZHVjZXJOYW1lXVxyXG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGUobmFtZSwgcmVkdWNlck5hbWUpXHJcblxyXG4gICAgbGV0IGNhc2VSZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgYW55PlxyXG4gICAgbGV0IHByZXBhcmVDYWxsYmFjazogUHJlcGFyZUFjdGlvbjxhbnk+IHwgdW5kZWZpbmVkXHJcblxyXG4gICAgaWYgKCdyZWR1Y2VyJyBpbiBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSkge1xyXG4gICAgICBjYXNlUmVkdWNlciA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlLnJlZHVjZXJcclxuICAgICAgcHJlcGFyZUNhbGxiYWNrID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucHJlcGFyZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZVxyXG4gICAgfVxyXG5cclxuICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lW3JlZHVjZXJOYW1lXSA9IGNhc2VSZWR1Y2VyXHJcbiAgICBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZVt0eXBlXSA9IGNhc2VSZWR1Y2VyXHJcbiAgICBhY3Rpb25DcmVhdG9yc1tyZWR1Y2VyTmFtZV0gPSBwcmVwYXJlQ2FsbGJhY2tcclxuICAgICAgPyBjcmVhdGVBY3Rpb24odHlwZSwgcHJlcGFyZUNhbGxiYWNrKVxyXG4gICAgICA6IGNyZWF0ZUFjdGlvbih0eXBlKVxyXG4gIH0pXHJcblxyXG4gIGZ1bmN0aW9uIGJ1aWxkUmVkdWNlcigpIHtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbikge1xyXG4gICAgICAgICAgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IHRydWVcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgXCJUaGUgb2JqZWN0IG5vdGF0aW9uIGZvciBgY3JlYXRlU2xpY2UuZXh0cmFSZWR1Y2Vyc2AgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSVEsgMi4wLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlU2xpY2VcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgW1xyXG4gICAgICBleHRyYVJlZHVjZXJzID0ge30sXHJcbiAgICAgIGFjdGlvbk1hdGNoZXJzID0gW10sXHJcbiAgICAgIGRlZmF1bHRDYXNlUmVkdWNlciA9IHVuZGVmaW5lZCxcclxuICAgIF0gPVxyXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhvcHRpb25zLmV4dHJhUmVkdWNlcnMpXHJcbiAgICAgICAgOiBbb3B0aW9ucy5leHRyYVJlZHVjZXJzXVxyXG5cclxuICAgIGNvbnN0IGZpbmFsQ2FzZVJlZHVjZXJzID0geyAuLi5leHRyYVJlZHVjZXJzLCAuLi5zbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZSB9XHJcblxyXG4gICAgcmV0dXJuIGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCAoYnVpbGRlcikgPT4ge1xyXG4gICAgICBmb3IgKGxldCBrZXkgaW4gZmluYWxDYXNlUmVkdWNlcnMpIHtcclxuICAgICAgICBidWlsZGVyLmFkZENhc2Uoa2V5LCBmaW5hbENhc2VSZWR1Y2Vyc1trZXldIGFzIENhc2VSZWR1Y2VyPGFueT4pXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbSBvZiBhY3Rpb25NYXRjaGVycykge1xyXG4gICAgICAgIGJ1aWxkZXIuYWRkTWF0Y2hlcihtLm1hdGNoZXIsIG0ucmVkdWNlcilcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgYnVpbGRlci5hZGREZWZhdWx0Q2FzZShkZWZhdWx0Q2FzZVJlZHVjZXIpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsZXQgX3JlZHVjZXI6IFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFN0YXRlPlxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgbmFtZSxcclxuICAgIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xyXG4gICAgICBpZiAoIV9yZWR1Y2VyKSBfcmVkdWNlciA9IGJ1aWxkUmVkdWNlcigpXHJcblxyXG4gICAgICByZXR1cm4gX3JlZHVjZXIoc3RhdGUsIGFjdGlvbilcclxuICAgIH0sXHJcbiAgICBhY3Rpb25zOiBhY3Rpb25DcmVhdG9ycyBhcyBhbnksXHJcbiAgICBjYXNlUmVkdWNlcnM6IHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lIGFzIGFueSxcclxuICAgIGdldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgaWYgKCFfcmVkdWNlcikgX3JlZHVjZXIgPSBidWlsZFJlZHVjZXIoKVxyXG5cclxuICAgICAgcmV0dXJuIF9yZWR1Y2VyLmdldEluaXRpYWxTdGF0ZSgpXHJcbiAgICB9LFxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJy4vbW9kZWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxFbnRpdHlTdGF0ZTxWPigpOiBFbnRpdHlTdGF0ZTxWPiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGlkczogW10sXHJcbiAgICBlbnRpdGllczoge30sXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeTxWPigpIHtcclxuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoKTogRW50aXR5U3RhdGU8Vj5cclxuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGU8UyBleHRlbmRzIG9iamVjdD4oXHJcbiAgICBhZGRpdGlvbmFsU3RhdGU6IFNcclxuICApOiBFbnRpdHlTdGF0ZTxWPiAmIFNcclxuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoYWRkaXRpb25hbFN0YXRlOiBhbnkgPSB7fSk6IGFueSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihnZXRJbml0aWFsRW50aXR5U3RhdGUoKSwgYWRkaXRpb25hbFN0YXRlKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHsgZ2V0SW5pdGlhbFN0YXRlIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBTZWxlY3RvciB9IGZyb20gJ3Jlc2VsZWN0J1xyXG5pbXBvcnQgeyBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvciB9IGZyb20gJy4uL2NyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5U2VsZWN0b3JzLFxyXG4gIERpY3Rpb25hcnksXHJcbiAgRW50aXR5SWQsXHJcbn0gZnJvbSAnLi9tb2RlbHMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeTxUPigpIHtcclxuICBmdW5jdGlvbiBnZXRTZWxlY3RvcnMoKTogRW50aXR5U2VsZWN0b3JzPFQsIEVudGl0eVN0YXRlPFQ+PlxyXG4gIGZ1bmN0aW9uIGdldFNlbGVjdG9yczxWPihcclxuICAgIHNlbGVjdFN0YXRlOiAoc3RhdGU6IFYpID0+IEVudGl0eVN0YXRlPFQ+XHJcbiAgKTogRW50aXR5U2VsZWN0b3JzPFQsIFY+XHJcbiAgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzPFY+KFxyXG4gICAgc2VsZWN0U3RhdGU/OiAoc3RhdGU6IFYpID0+IEVudGl0eVN0YXRlPFQ+XHJcbiAgKTogRW50aXR5U2VsZWN0b3JzPFQsIGFueT4ge1xyXG4gICAgY29uc3Qgc2VsZWN0SWRzID0gKHN0YXRlOiBFbnRpdHlTdGF0ZTxUPikgPT4gc3RhdGUuaWRzXHJcblxyXG4gICAgY29uc3Qgc2VsZWN0RW50aXRpZXMgPSAoc3RhdGU6IEVudGl0eVN0YXRlPFQ+KSA9PiBzdGF0ZS5lbnRpdGllc1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdEFsbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKFxyXG4gICAgICBzZWxlY3RJZHMsXHJcbiAgICAgIHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAoaWRzLCBlbnRpdGllcyk6IFRbXSA9PiBpZHMubWFwKChpZCkgPT4gZW50aXRpZXNbaWRdISlcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBzZWxlY3RJZCA9IChfOiB1bmtub3duLCBpZDogRW50aXR5SWQpID0+IGlkXHJcblxyXG4gICAgY29uc3Qgc2VsZWN0QnlJZCA9IChlbnRpdGllczogRGljdGlvbmFyeTxUPiwgaWQ6IEVudGl0eUlkKSA9PiBlbnRpdGllc1tpZF1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RUb3RhbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdElkcywgKGlkcykgPT4gaWRzLmxlbmd0aClcclxuXHJcbiAgICBpZiAoIXNlbGVjdFN0YXRlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc2VsZWN0SWRzLFxyXG4gICAgICAgIHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAgIHNlbGVjdEFsbCxcclxuICAgICAgICBzZWxlY3RUb3RhbCxcclxuICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihcclxuICAgICAgICAgIHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAgICAgc2VsZWN0SWQsXHJcbiAgICAgICAgICBzZWxlY3RCeUlkXHJcbiAgICAgICAgKSxcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKFxyXG4gICAgICBzZWxlY3RTdGF0ZSBhcyBTZWxlY3RvcjxWLCBFbnRpdHlTdGF0ZTxUPj4sXHJcbiAgICAgIHNlbGVjdEVudGl0aWVzXHJcbiAgICApXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VsZWN0SWRzOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0SWRzKSxcclxuICAgICAgc2VsZWN0RW50aXRpZXM6IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyxcclxuICAgICAgc2VsZWN0QWxsOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0QWxsKSxcclxuICAgICAgc2VsZWN0VG90YWw6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RUb3RhbCksXHJcbiAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKFxyXG4gICAgICAgIHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyxcclxuICAgICAgICBzZWxlY3RJZCxcclxuICAgICAgICBzZWxlY3RCeUlkXHJcbiAgICAgICksXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyBnZXRTZWxlY3RvcnMgfVxyXG59XHJcbiIsICJpbXBvcnQgY3JlYXRlTmV4dFN0YXRlLCB7IGlzRHJhZnQgfSBmcm9tICdpbW1lcidcclxuaW1wb3J0IHR5cGUgeyBFbnRpdHlTdGF0ZSwgUHJldmVudEFueSB9IGZyb20gJy4vbW9kZWxzJ1xyXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRBY3Rpb24gfSBmcm9tICcuLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IGlzRlNBIH0gZnJvbSAnLi4vY3JlYXRlQWN0aW9uJ1xyXG5pbXBvcnQgeyBJc0FueSB9IGZyb20gJy4uL3RzSGVscGVycydcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3I8Vj4oXHJcbiAgbXV0YXRvcjogKHN0YXRlOiBFbnRpdHlTdGF0ZTxWPikgPT4gdm9pZFxyXG4pIHtcclxuICBjb25zdCBvcGVyYXRvciA9IGNyZWF0ZVN0YXRlT3BlcmF0b3IoKF86IHVuZGVmaW5lZCwgc3RhdGU6IEVudGl0eVN0YXRlPFY+KSA9PlxyXG4gICAgbXV0YXRvcihzdGF0ZSlcclxuICApXHJcblxyXG4gIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb248UyBleHRlbmRzIEVudGl0eVN0YXRlPFY+PihcclxuICAgIHN0YXRlOiBQcmV2ZW50QW55PFMsIFY+XHJcbiAgKTogUyB7XHJcbiAgICByZXR1cm4gb3BlcmF0b3Ioc3RhdGUgYXMgUywgdW5kZWZpbmVkKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0YXRlT3BlcmF0b3I8ViwgUj4oXHJcbiAgbXV0YXRvcjogKGFyZzogUiwgc3RhdGU6IEVudGl0eVN0YXRlPFY+KSA9PiB2b2lkXHJcbikge1xyXG4gIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb248UyBleHRlbmRzIEVudGl0eVN0YXRlPFY+PihcclxuICAgIHN0YXRlOiBTLFxyXG4gICAgYXJnOiBSIHwgUGF5bG9hZEFjdGlvbjxSPlxyXG4gICk6IFMge1xyXG4gICAgZnVuY3Rpb24gaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoXHJcbiAgICAgIGFyZzogUiB8IFBheWxvYWRBY3Rpb248Uj5cclxuICAgICk6IGFyZyBpcyBQYXlsb2FkQWN0aW9uPFI+IHtcclxuICAgICAgcmV0dXJuIGlzRlNBKGFyZylcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBydW5NdXRhdG9yID0gKGRyYWZ0OiBFbnRpdHlTdGF0ZTxWPikgPT4ge1xyXG4gICAgICBpZiAoaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnKSkge1xyXG4gICAgICAgIG11dGF0b3IoYXJnLnBheWxvYWQsIGRyYWZ0KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG11dGF0b3IoYXJnLCBkcmFmdClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0RyYWZ0KHN0YXRlKSkge1xyXG4gICAgICAvLyB3ZSBtdXN0IGFscmVhZHkgYmUgaW5zaWRlIGEgYGNyZWF0ZU5leHRTdGF0ZWAgY2FsbCwgbGlrZWx5IGJlY2F1c2VcclxuICAgICAgLy8gdGhpcyBpcyBiZWluZyB3cmFwcGVkIGluIGBjcmVhdGVSZWR1Y2VyYCBvciBgY3JlYXRlU2xpY2VgLlxyXG4gICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBwYXNzIHRoZSBkcmFmdCB0byB0aGUgbXV0YXRvci5cclxuICAgICAgcnVuTXV0YXRvcihzdGF0ZSlcclxuXHJcbiAgICAgIC8vIHNpbmNlIGl0J3MgYSBkcmFmdCwgd2UnbGwganVzdCByZXR1cm4gaXRcclxuICAgICAgcmV0dXJuIHN0YXRlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBAdHMtaWdub3JlIGNyZWF0ZU5leHRTdGF0ZSgpIHByb2R1Y2VzIGFuIEltbXV0YWJsZTxEcmFmdDxTPj4gcmF0aGVyXHJcbiAgICAgIC8vIHRoYW4gYW4gSW1tdXRhYmxlPFM+LCBhbmQgVHlwZVNjcmlwdCBjYW5ub3QgZmluZCBvdXQgaG93IHRvIHJlY29uY2lsZVxyXG4gICAgICAvLyB0aGVzZSB0d28gdHlwZXMuXHJcbiAgICAgIHJldHVybiBjcmVhdGVOZXh0U3RhdGUoc3RhdGUsIHJ1bk11dGF0b3IpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEVudGl0eVN0YXRlLCBJZFNlbGVjdG9yLCBVcGRhdGUsIEVudGl0eUlkIH0gZnJvbSAnLi9tb2RlbHMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0SWRWYWx1ZTxUPihlbnRpdHk6IFQsIHNlbGVjdElkOiBJZFNlbGVjdG9yPFQ+KSB7XHJcbiAgY29uc3Qga2V5ID0gc2VsZWN0SWQoZW50aXR5KVxyXG5cclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgY29uc29sZS53YXJuKFxyXG4gICAgICAnVGhlIGVudGl0eSBwYXNzZWQgdG8gdGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgdW5kZWZpbmVkLicsXHJcbiAgICAgICdZb3Ugc2hvdWxkIHByb2JhYmx5IHByb3ZpZGUgeW91ciBvd24gYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbi4nLFxyXG4gICAgICAnVGhlIGVudGl0eSB0aGF0IHdhcyBwYXNzZWQ6JyxcclxuICAgICAgZW50aXR5LFxyXG4gICAgICAnVGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb246JyxcclxuICAgICAgc2VsZWN0SWQudG9TdHJpbmcoKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGtleVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRW50aXRpZXNBcnJheTxUPihcclxuICBlbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPlxyXG4pOiByZWFkb25seSBUW10ge1xyXG4gIGlmICghQXJyYXkuaXNBcnJheShlbnRpdGllcykpIHtcclxuICAgIGVudGl0aWVzID0gT2JqZWN0LnZhbHVlcyhlbnRpdGllcylcclxuICB9XHJcblxyXG4gIHJldHVybiBlbnRpdGllc1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllczxUPihcclxuICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICBzZWxlY3RJZDogSWRTZWxlY3RvcjxUPixcclxuICBzdGF0ZTogRW50aXR5U3RhdGU8VD5cclxuKTogW1RbXSwgVXBkYXRlPFQ+W11dIHtcclxuICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcblxyXG4gIGNvbnN0IGFkZGVkOiBUW10gPSBbXVxyXG4gIGNvbnN0IHVwZGF0ZWQ6IFVwZGF0ZTxUPltdID0gW11cclxuXHJcbiAgZm9yIChjb25zdCBlbnRpdHkgb2YgbmV3RW50aXRpZXMpIHtcclxuICAgIGNvbnN0IGlkID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKVxyXG4gICAgaWYgKGlkIGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgIHVwZGF0ZWQucHVzaCh7IGlkLCBjaGFuZ2VzOiBlbnRpdHkgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFkZGVkLnB1c2goZW50aXR5KVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gW2FkZGVkLCB1cGRhdGVkXVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5U3RhdGVBZGFwdGVyLFxyXG4gIElkU2VsZWN0b3IsXHJcbiAgVXBkYXRlLFxyXG4gIEVudGl0eUlkLFxyXG59IGZyb20gJy4vbW9kZWxzJ1xyXG5pbXBvcnQge1xyXG4gIGNyZWF0ZVN0YXRlT3BlcmF0b3IsXHJcbiAgY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yLFxyXG59IGZyb20gJy4vc3RhdGVfYWRhcHRlcidcclxuaW1wb3J0IHtcclxuICBzZWxlY3RJZFZhbHVlLFxyXG4gIGVuc3VyZUVudGl0aWVzQXJyYXksXHJcbiAgc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyxcclxufSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyPFQ+KFxyXG4gIHNlbGVjdElkOiBJZFNlbGVjdG9yPFQ+XHJcbik6IEVudGl0eVN0YXRlQWRhcHRlcjxUPiB7XHJcbiAgdHlwZSBSID0gRW50aXR5U3RhdGU8VD5cclxuXHJcbiAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHk6IFQsIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICBjb25zdCBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpXHJcblxyXG4gICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBzdGF0ZS5pZHMucHVzaChrZXkpXHJcbiAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhZGRNYW55TXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuXHJcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xyXG4gICAgICBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eTogVCwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZClcclxuICAgIGlmICghKGtleSBpbiBzdGF0ZS5lbnRpdGllcykpIHtcclxuICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KVxyXG4gICAgfVxyXG4gICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0TWFueU11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xyXG4gICAgICBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKVxyXG5cclxuICAgIHN0YXRlLmlkcyA9IFtdXHJcbiAgICBzdGF0ZS5lbnRpdGllcyA9IHt9XHJcblxyXG4gICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVtb3ZlT25lTXV0YWJseShrZXk6IEVudGl0eUlkLCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHJlbW92ZU1hbnlNdXRhYmx5KFtrZXldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlbW92ZU1hbnlNdXRhYmx5KGtleXM6IHJlYWRvbmx5IEVudGl0eUlkW10sIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICBsZXQgZGlkTXV0YXRlID0gZmFsc2VcclxuXHJcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICBpZiAoa2V5IGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW2tleV1cclxuICAgICAgICBkaWRNdXRhdGUgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgaWYgKGRpZE11dGF0ZSkge1xyXG4gICAgICBzdGF0ZS5pZHMgPSBzdGF0ZS5pZHMuZmlsdGVyKChpZCkgPT4gaWQgaW4gc3RhdGUuZW50aXRpZXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW1vdmVBbGxNdXRhYmx5KHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLCB7XHJcbiAgICAgIGlkczogW10sXHJcbiAgICAgIGVudGl0aWVzOiB7fSxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB0YWtlTmV3S2V5KFxyXG4gICAga2V5czogeyBbaWQ6IHN0cmluZ106IEVudGl0eUlkIH0sXHJcbiAgICB1cGRhdGU6IFVwZGF0ZTxUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5hbCA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF1cclxuICAgIGNvbnN0IHVwZGF0ZWQ6IFQgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbCwgdXBkYXRlLmNoYW5nZXMpXHJcbiAgICBjb25zdCBuZXdLZXkgPSBzZWxlY3RJZFZhbHVlKHVwZGF0ZWQsIHNlbGVjdElkKVxyXG4gICAgY29uc3QgaGFzTmV3S2V5ID0gbmV3S2V5ICE9PSB1cGRhdGUuaWRcclxuXHJcbiAgICBpZiAoaGFzTmV3S2V5KSB7XHJcbiAgICAgIGtleXNbdXBkYXRlLmlkXSA9IG5ld0tleVxyXG4gICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRlLmVudGl0aWVzW25ld0tleV0gPSB1cGRhdGVkXHJcblxyXG4gICAgcmV0dXJuIGhhc05ld0tleVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGU6IFVwZGF0ZTxUPiwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiB1cGRhdGVNYW55TXV0YWJseShbdXBkYXRlXSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseShcclxuICAgIHVwZGF0ZXM6IFJlYWRvbmx5QXJyYXk8VXBkYXRlPFQ+PixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZXdLZXlzOiB7IFtpZDogc3RyaW5nXTogRW50aXR5SWQgfSA9IHt9XHJcblxyXG4gICAgY29uc3QgdXBkYXRlc1BlckVudGl0eTogeyBbaWQ6IHN0cmluZ106IFVwZGF0ZTxUPiB9ID0ge31cclxuXHJcbiAgICB1cGRhdGVzLmZvckVhY2goKHVwZGF0ZSkgPT4ge1xyXG4gICAgICAvLyBPbmx5IGFwcGx5IHVwZGF0ZXMgdG8gZW50aXRpZXMgdGhhdCBjdXJyZW50bHkgZXhpc3RcclxuICAgICAgaWYgKHVwZGF0ZS5pZCBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB1cGRhdGVzIHRvIG9uZSBlbnRpdHksIG1lcmdlIHRoZW0gdG9nZXRoZXJcclxuICAgICAgICB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0gPSB7XHJcbiAgICAgICAgICBpZDogdXBkYXRlLmlkLFxyXG4gICAgICAgICAgLy8gU3ByZWFkcyBpZ25vcmUgZmFsc3kgdmFsdWVzLCBzbyB0aGlzIHdvcmtzIGV2ZW4gaWYgdGhlcmUgaXNuJ3RcclxuICAgICAgICAgIC8vIGFuIGV4aXN0aW5nIHVwZGF0ZSBhbHJlYWR5IGF0IHRoaXMga2V5XHJcbiAgICAgICAgICBjaGFuZ2VzOiB7XHJcbiAgICAgICAgICAgIC4uLih1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF1cclxuICAgICAgICAgICAgICA/IHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXS5jaGFuZ2VzXHJcbiAgICAgICAgICAgICAgOiBudWxsKSxcclxuICAgICAgICAgICAgLi4udXBkYXRlLmNoYW5nZXMsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICB1cGRhdGVzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzUGVyRW50aXR5KVxyXG5cclxuICAgIGNvbnN0IGRpZE11dGF0ZUVudGl0aWVzID0gdXBkYXRlcy5sZW5ndGggPiAwXHJcblxyXG4gICAgaWYgKGRpZE11dGF0ZUVudGl0aWVzKSB7XHJcbiAgICAgIGNvbnN0IGRpZE11dGF0ZUlkcyA9XHJcbiAgICAgICAgdXBkYXRlcy5maWx0ZXIoKHVwZGF0ZSkgPT4gdGFrZU5ld0tleShuZXdLZXlzLCB1cGRhdGUsIHN0YXRlKSkubGVuZ3RoID5cclxuICAgICAgICAwXHJcblxyXG4gICAgICBpZiAoZGlkTXV0YXRlSWRzKSB7XHJcbiAgICAgICAgc3RhdGUuaWRzID0gT2JqZWN0LmtleXMoc3RhdGUuZW50aXRpZXMpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE9uZU11dGFibHkoZW50aXR5OiBULCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgW2FkZGVkLCB1cGRhdGVkXSA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXM8VD4oXHJcbiAgICAgIG5ld0VudGl0aWVzLFxyXG4gICAgICBzZWxlY3RJZCxcclxuICAgICAgc3RhdGVcclxuICAgIClcclxuXHJcbiAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSlcclxuICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICByZW1vdmVBbGw6IGNyZWF0ZVNpbmdsZUFyZ3VtZW50U3RhdGVPcGVyYXRvcihyZW1vdmVBbGxNdXRhYmx5KSxcclxuICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcclxuICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxyXG4gICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXHJcbiAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXHJcbiAgICB1cGRhdGVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU1hbnlNdXRhYmx5KSxcclxuICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcclxuICAgIHVwc2VydE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0TWFueU11dGFibHkpLFxyXG4gICAgcmVtb3ZlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHJlbW92ZU9uZU11dGFibHkpLFxyXG4gICAgcmVtb3ZlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVNYW55TXV0YWJseSksXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgSWRTZWxlY3RvcixcclxuICBDb21wYXJlcixcclxuICBFbnRpdHlTdGF0ZUFkYXB0ZXIsXHJcbiAgVXBkYXRlLFxyXG4gIEVudGl0eUlkLFxyXG59IGZyb20gJy4vbW9kZWxzJ1xyXG5pbXBvcnQgeyBjcmVhdGVTdGF0ZU9wZXJhdG9yIH0gZnJvbSAnLi9zdGF0ZV9hZGFwdGVyJ1xyXG5pbXBvcnQgeyBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlciB9IGZyb20gJy4vdW5zb3J0ZWRfc3RhdGVfYWRhcHRlcidcclxuaW1wb3J0IHtcclxuICBzZWxlY3RJZFZhbHVlLFxyXG4gIGVuc3VyZUVudGl0aWVzQXJyYXksXHJcbiAgc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyxcclxufSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcjxUPihcclxuICBzZWxlY3RJZDogSWRTZWxlY3RvcjxUPixcclxuICBzb3J0OiBDb21wYXJlcjxUPlxyXG4pOiBFbnRpdHlTdGF0ZUFkYXB0ZXI8VD4ge1xyXG4gIHR5cGUgUiA9IEVudGl0eVN0YXRlPFQ+XHJcblxyXG4gIGNvbnN0IHsgcmVtb3ZlT25lLCByZW1vdmVNYW55LCByZW1vdmVBbGwgfSA9XHJcbiAgICBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZClcclxuXHJcbiAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHk6IFQsIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICByZXR1cm4gYWRkTWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcblxyXG4gICAgY29uc3QgbW9kZWxzID0gbmV3RW50aXRpZXMuZmlsdGVyKFxyXG4gICAgICAobW9kZWwpID0+ICEoc2VsZWN0SWRWYWx1ZShtb2RlbCwgc2VsZWN0SWQpIGluIHN0YXRlLmVudGl0aWVzKVxyXG4gICAgKVxyXG5cclxuICAgIGlmIChtb2RlbHMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIG1lcmdlKG1vZGVscywgc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eTogVCwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiBzZXRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuICAgIGlmIChuZXdFbnRpdGllcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgbWVyZ2UobmV3RW50aXRpZXMsIHN0YXRlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0QWxsTXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuICAgIHN0YXRlLmVudGl0aWVzID0ge31cclxuICAgIHN0YXRlLmlkcyA9IFtdXHJcblxyXG4gICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGU6IFVwZGF0ZTxUPiwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiB1cGRhdGVNYW55TXV0YWJseShbdXBkYXRlXSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseShcclxuICAgIHVwZGF0ZXM6IFJlYWRvbmx5QXJyYXk8VXBkYXRlPFQ+PixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBsZXQgYXBwbGllZFVwZGF0ZXMgPSBmYWxzZVxyXG5cclxuICAgIGZvciAobGV0IHVwZGF0ZSBvZiB1cGRhdGVzKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0eSA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF1cclxuICAgICAgaWYgKCFlbnRpdHkpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBhcHBsaWVkVXBkYXRlcyA9IHRydWVcclxuXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oZW50aXR5LCB1cGRhdGUuY2hhbmdlcylcclxuICAgICAgY29uc3QgbmV3SWQgPSBzZWxlY3RJZChlbnRpdHkpXHJcbiAgICAgIGlmICh1cGRhdGUuaWQgIT09IG5ld0lkKSB7XHJcbiAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF1cclxuICAgICAgICBzdGF0ZS5lbnRpdGllc1tuZXdJZF0gPSBlbnRpdHlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChhcHBsaWVkVXBkYXRlcykge1xyXG4gICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE9uZU11dGFibHkoZW50aXR5OiBULCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgW2FkZGVkLCB1cGRhdGVkXSA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXM8VD4oXHJcbiAgICAgIG5ld0VudGl0aWVzLFxyXG4gICAgICBzZWxlY3RJZCxcclxuICAgICAgc3RhdGVcclxuICAgIClcclxuXHJcbiAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSlcclxuICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKGE6IHJlYWRvbmx5IHVua25vd25bXSwgYjogcmVhZG9ubHkgdW5rbm93bltdKSB7XHJcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGggJiYgaSA8IGIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGFbaV0gPT09IGJbaV0pIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG1lcmdlKG1vZGVsczogcmVhZG9ubHkgVFtdLCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgLy8gSW5zZXJ0L292ZXJ3cml0ZSBhbGwgbmV3L3VwZGF0ZWRcclxuICAgIG1vZGVscy5mb3JFYWNoKChtb2RlbCkgPT4ge1xyXG4gICAgICBzdGF0ZS5lbnRpdGllc1tzZWxlY3RJZChtb2RlbCldID0gbW9kZWxcclxuICAgIH0pXHJcblxyXG4gICAgcmVzb3J0RW50aXRpZXMoc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZXNvcnRFbnRpdGllcyhzdGF0ZTogUikge1xyXG4gICAgY29uc3QgYWxsRW50aXRpZXMgPSBPYmplY3QudmFsdWVzKHN0YXRlLmVudGl0aWVzKSBhcyBUW11cclxuICAgIGFsbEVudGl0aWVzLnNvcnQoc29ydClcclxuXHJcbiAgICBjb25zdCBuZXdTb3J0ZWRJZHMgPSBhbGxFbnRpdGllcy5tYXAoc2VsZWN0SWQpXHJcbiAgICBjb25zdCB7IGlkcyB9ID0gc3RhdGVcclxuXHJcbiAgICBpZiAoIWFyZUFycmF5c0VxdWFsKGlkcywgbmV3U29ydGVkSWRzKSkge1xyXG4gICAgICBzdGF0ZS5pZHMgPSBuZXdTb3J0ZWRJZHNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICByZW1vdmVPbmUsXHJcbiAgICByZW1vdmVNYW55LFxyXG4gICAgcmVtb3ZlQWxsLFxyXG4gICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxyXG4gICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxyXG4gICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxyXG4gICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXHJcbiAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICBhZGRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE1hbnlNdXRhYmx5KSxcclxuICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxyXG4gICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSksXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5RGVmaW5pdGlvbixcclxuICBDb21wYXJlcixcclxuICBJZFNlbGVjdG9yLFxyXG4gIEVudGl0eUFkYXB0ZXIsXHJcbn0gZnJvbSAnLi9tb2RlbHMnXHJcbmltcG9ydCB7IGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3RvcnkgfSBmcm9tICcuL2VudGl0eV9zdGF0ZSdcclxuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3JzRmFjdG9yeSB9IGZyb20gJy4vc3RhdGVfc2VsZWN0b3JzJ1xyXG5pbXBvcnQgeyBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXIgfSBmcm9tICcuL3NvcnRlZF9zdGF0ZV9hZGFwdGVyJ1xyXG5pbXBvcnQgeyBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlciB9IGZyb20gJy4vdW5zb3J0ZWRfc3RhdGVfYWRhcHRlcidcclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0gb3B0aW9uc1xyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW50aXR5QWRhcHRlcjxUPihcclxuICBvcHRpb25zOiB7XHJcbiAgICBzZWxlY3RJZD86IElkU2VsZWN0b3I8VD5cclxuICAgIHNvcnRDb21wYXJlcj86IGZhbHNlIHwgQ29tcGFyZXI8VD5cclxuICB9ID0ge31cclxuKTogRW50aXR5QWRhcHRlcjxUPiB7XHJcbiAgY29uc3QgeyBzZWxlY3RJZCwgc29ydENvbXBhcmVyIH06IEVudGl0eURlZmluaXRpb248VD4gPSB7XHJcbiAgICBzb3J0Q29tcGFyZXI6IGZhbHNlLFxyXG4gICAgc2VsZWN0SWQ6IChpbnN0YW5jZTogYW55KSA9PiBpbnN0YW5jZS5pZCxcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgfVxyXG5cclxuICBjb25zdCBzdGF0ZUZhY3RvcnkgPSBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5PFQ+KClcclxuICBjb25zdCBzZWxlY3RvcnNGYWN0b3J5ID0gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeTxUPigpXHJcbiAgY29uc3Qgc3RhdGVBZGFwdGVyID0gc29ydENvbXBhcmVyXHJcbiAgICA/IGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydENvbXBhcmVyKVxyXG4gICAgOiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZClcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHNlbGVjdElkLFxyXG4gICAgc29ydENvbXBhcmVyLFxyXG4gICAgLi4uc3RhdGVGYWN0b3J5LFxyXG4gICAgLi4uc2VsZWN0b3JzRmFjdG9yeSxcclxuICAgIC4uLnN0YXRlQWRhcHRlcixcclxuICB9XHJcbn1cclxuIiwgIi8vIEJvcnJvd2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FpL25hbm9pZC9ibG9iLzMuMC4yL25vbi1zZWN1cmUvaW5kZXguanNcclxuLy8gVGhpcyBhbHBoYWJldCB1c2VzIGBBLVphLXowLTlfLWAgc3ltYm9scy4gQSBnZW5ldGljIGFsZ29yaXRobSBoZWxwZWRcclxuLy8gb3B0aW1pemUgdGhlIGd6aXAgY29tcHJlc3Npb24gZm9yIHRoaXMgYWxwaGFiZXQuXHJcbmxldCB1cmxBbHBoYWJldCA9XHJcbiAgJ01vZHVsZVN5bWJoYXNPd25Qci0wMTIzNDU2Nzg5QUJDREVGR0hOUlZmZ2N0aVV2el9LcVlUSmtMeHBaWElqUVcnXHJcblxyXG4vKipcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGxldCBuYW5vaWQgPSAoc2l6ZSA9IDIxKSA9PiB7XHJcbiAgbGV0IGlkID0gJydcclxuICAvLyBBIGNvbXBhY3QgYWx0ZXJuYXRpdmUgZm9yIGBmb3IgKHZhciBpID0gMDsgaSA8IHN0ZXA7IGkrKylgLlxyXG4gIGxldCBpID0gc2l6ZVxyXG4gIHdoaWxlIChpLS0pIHtcclxuICAgIC8vIGB8IDBgIGlzIG1vcmUgY29tcGFjdCBhbmQgZmFzdGVyIHRoYW4gYE1hdGguZmxvb3IoKWAuXHJcbiAgICBpZCArPSB1cmxBbHBoYWJldFsoTWF0aC5yYW5kb20oKSAqIDY0KSB8IDBdXHJcbiAgfVxyXG4gIHJldHVybiBpZFxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IERpc3BhdGNoLCBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUge1xyXG4gIFBheWxvYWRBY3Rpb24sXHJcbiAgQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQsXHJcbn0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiB9IGZyb20gJy4vY3JlYXRlQWN0aW9uJ1xyXG5pbXBvcnQgdHlwZSB7IFRodW5rRGlzcGF0Y2ggfSBmcm9tICdyZWR1eC10aHVuaydcclxuaW1wb3J0IHR5cGUgeyBGYWxsYmFja0lmVW5rbm93biwgSWQsIElzQW55LCBJc1Vua25vd24gfSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnLi9uYW5vaWQnXHJcblxyXG4vLyBAdHMtaWdub3JlIHdlIG5lZWQgdGhlIGltcG9ydCBvZiB0aGVzZSB0eXBlcyBkdWUgdG8gYSBidW5kbGluZyBpc3N1ZS5cclxudHlwZSBfS2VlcCA9IFBheWxvYWRBY3Rpb24gfCBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxhbnksIHVua25vd24+XHJcblxyXG5leHBvcnQgdHlwZSBCYXNlVGh1bmtBUEk8XHJcbiAgUyxcclxuICBFLFxyXG4gIEQgZXh0ZW5kcyBEaXNwYXRjaCA9IERpc3BhdGNoLFxyXG4gIFJlamVjdGVkVmFsdWUgPSB1bmtub3duLFxyXG4gIFJlamVjdGVkTWV0YSA9IHVua25vd24sXHJcbiAgRnVsZmlsbGVkTWV0YSA9IHVua25vd25cclxuPiA9IHtcclxuICBkaXNwYXRjaDogRFxyXG4gIGdldFN0YXRlOiAoKSA9PiBTXHJcbiAgZXh0cmE6IEVcclxuICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gIHNpZ25hbDogQWJvcnRTaWduYWxcclxuICBhYm9ydDogKHJlYXNvbj86IHN0cmluZykgPT4gdm9pZFxyXG4gIHJlamVjdFdpdGhWYWx1ZTogSXNVbmtub3duPFxyXG4gICAgUmVqZWN0ZWRNZXRhLFxyXG4gICAgKHZhbHVlOiBSZWplY3RlZFZhbHVlKSA9PiBSZWplY3RXaXRoVmFsdWU8UmVqZWN0ZWRWYWx1ZSwgUmVqZWN0ZWRNZXRhPixcclxuICAgIChcclxuICAgICAgdmFsdWU6IFJlamVjdGVkVmFsdWUsXHJcbiAgICAgIG1ldGE6IFJlamVjdGVkTWV0YVxyXG4gICAgKSA9PiBSZWplY3RXaXRoVmFsdWU8UmVqZWN0ZWRWYWx1ZSwgUmVqZWN0ZWRNZXRhPlxyXG4gID5cclxuICBmdWxmaWxsV2l0aFZhbHVlOiBJc1Vua25vd248XHJcbiAgICBGdWxmaWxsZWRNZXRhLFxyXG4gICAgPEZ1bGZpbGxlZFZhbHVlPih2YWx1ZTogRnVsZmlsbGVkVmFsdWUpID0+IEZ1bGZpbGxlZFZhbHVlLFxyXG4gICAgPEZ1bGZpbGxlZFZhbHVlPihcclxuICAgICAgdmFsdWU6IEZ1bGZpbGxlZFZhbHVlLFxyXG4gICAgICBtZXRhOiBGdWxmaWxsZWRNZXRhXHJcbiAgICApID0+IEZ1bGZpbGxXaXRoTWV0YTxGdWxmaWxsZWRWYWx1ZSwgRnVsZmlsbGVkTWV0YT5cclxuICA+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRFcnJvciB7XHJcbiAgbmFtZT86IHN0cmluZ1xyXG4gIG1lc3NhZ2U/OiBzdHJpbmdcclxuICBzdGFjaz86IHN0cmluZ1xyXG4gIGNvZGU/OiBzdHJpbmdcclxufVxyXG5cclxuY29uc3QgY29tbW9uUHJvcGVydGllczogQXJyYXk8a2V5b2YgU2VyaWFsaXplZEVycm9yPiA9IFtcclxuICAnbmFtZScsXHJcbiAgJ21lc3NhZ2UnLFxyXG4gICdzdGFjaycsXHJcbiAgJ2NvZGUnLFxyXG5dXHJcblxyXG5jbGFzcyBSZWplY3RXaXRoVmFsdWU8UGF5bG9hZCwgUmVqZWN0ZWRNZXRhPiB7XHJcbiAgLypcclxuICB0eXBlLW9ubHkgcHJvcGVydHkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBSZWplY3RXaXRoVmFsdWUgYW5kIEZ1bGZpbGxXaXRoTWV0YVxyXG4gIGRvZXMgbm90IGV4aXN0IGF0IHJ1bnRpbWVcclxuICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3R5cGUhOiAnUmVqZWN0V2l0aFZhbHVlJ1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHBheWxvYWQ6IFBheWxvYWQsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbWV0YTogUmVqZWN0ZWRNZXRhXHJcbiAgKSB7fVxyXG59XHJcblxyXG5jbGFzcyBGdWxmaWxsV2l0aE1ldGE8UGF5bG9hZCwgRnVsZmlsbGVkTWV0YT4ge1xyXG4gIC8qXHJcbiAgdHlwZS1vbmx5IHByb3BlcnR5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gUmVqZWN0V2l0aFZhbHVlIGFuZCBGdWxmaWxsV2l0aE1ldGFcclxuICBkb2VzIG5vdCBleGlzdCBhdCBydW50aW1lXHJcbiAgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IF90eXBlITogJ0Z1bGZpbGxXaXRoTWV0YSdcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZWFkb25seSBwYXlsb2FkOiBQYXlsb2FkLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IG1ldGE6IEZ1bGZpbGxlZE1ldGFcclxuICApIHt9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXJpYWxpemVzIGFuIGVycm9yIGludG8gYSBwbGFpbiBvYmplY3QuXHJcbiAqIFJld29ya2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9zZXJpYWxpemUtZXJyb3JcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG1pbmlTZXJpYWxpemVFcnJvciA9ICh2YWx1ZTogYW55KTogU2VyaWFsaXplZEVycm9yID0+IHtcclxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgY29uc3Qgc2ltcGxlRXJyb3I6IFNlcmlhbGl6ZWRFcnJvciA9IHt9XHJcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGNvbW1vblByb3BlcnRpZXMpIHtcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZVtwcm9wZXJ0eV0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgc2ltcGxlRXJyb3JbcHJvcGVydHldID0gdmFsdWVbcHJvcGVydHldXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2ltcGxlRXJyb3JcclxuICB9XHJcblxyXG4gIHJldHVybiB7IG1lc3NhZ2U6IFN0cmluZyh2YWx1ZSkgfVxyXG59XHJcblxyXG50eXBlIEFzeW5jVGh1bmtDb25maWcgPSB7XHJcbiAgc3RhdGU/OiB1bmtub3duXHJcbiAgZGlzcGF0Y2g/OiBEaXNwYXRjaFxyXG4gIGV4dHJhPzogdW5rbm93blxyXG4gIHJlamVjdFZhbHVlPzogdW5rbm93blxyXG4gIHNlcmlhbGl6ZWRFcnJvclR5cGU/OiB1bmtub3duXHJcbiAgcGVuZGluZ01ldGE/OiB1bmtub3duXHJcbiAgZnVsZmlsbGVkTWV0YT86IHVua25vd25cclxuICByZWplY3RlZE1ldGE/OiB1bmtub3duXHJcbn1cclxuXHJcbnR5cGUgR2V0U3RhdGU8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgc3RhdGU6IGluZmVyIFN0YXRlXHJcbn1cclxuICA/IFN0YXRlXHJcbiAgOiB1bmtub3duXHJcbnR5cGUgR2V0RXh0cmE8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7IGV4dHJhOiBpbmZlciBFeHRyYSB9XHJcbiAgPyBFeHRyYVxyXG4gIDogdW5rbm93blxyXG50eXBlIEdldERpc3BhdGNoPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIGRpc3BhdGNoOiBpbmZlciBEaXNwYXRjaFxyXG59XHJcbiAgPyBGYWxsYmFja0lmVW5rbm93bjxcclxuICAgICAgRGlzcGF0Y2gsXHJcbiAgICAgIFRodW5rRGlzcGF0Y2g8XHJcbiAgICAgICAgR2V0U3RhdGU8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICAgIEdldEV4dHJhPFRodW5rQXBpQ29uZmlnPixcclxuICAgICAgICBBbnlBY3Rpb25cclxuICAgICAgPlxyXG4gICAgPlxyXG4gIDogVGh1bmtEaXNwYXRjaDxHZXRTdGF0ZTxUaHVua0FwaUNvbmZpZz4sIEdldEV4dHJhPFRodW5rQXBpQ29uZmlnPiwgQW55QWN0aW9uPlxyXG5cclxuZXhwb3J0IHR5cGUgR2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+ID0gQmFzZVRodW5rQVBJPFxyXG4gIEdldFN0YXRlPFRodW5rQXBpQ29uZmlnPixcclxuICBHZXRFeHRyYTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgR2V0RGlzcGF0Y2g8VGh1bmtBcGlDb25maWc+LFxyXG4gIEdldFJlamVjdFZhbHVlPFRodW5rQXBpQ29uZmlnPixcclxuICBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+LFxyXG4gIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcbj5cclxuXHJcbnR5cGUgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgcmVqZWN0VmFsdWU6IGluZmVyIFJlamVjdFZhbHVlXHJcbn1cclxuICA/IFJlamVjdFZhbHVlXHJcbiAgOiB1bmtub3duXHJcblxyXG50eXBlIEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIHBlbmRpbmdNZXRhOiBpbmZlciBQZW5kaW5nTWV0YVxyXG59XHJcbiAgPyBQZW5kaW5nTWV0YVxyXG4gIDogdW5rbm93blxyXG5cclxudHlwZSBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIGZ1bGZpbGxlZE1ldGE6IGluZmVyIEZ1bGZpbGxlZE1ldGFcclxufVxyXG4gID8gRnVsZmlsbGVkTWV0YVxyXG4gIDogdW5rbm93blxyXG5cclxudHlwZSBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgcmVqZWN0ZWRNZXRhOiBpbmZlciBSZWplY3RlZE1ldGFcclxufVxyXG4gID8gUmVqZWN0ZWRNZXRhXHJcbiAgOiB1bmtub3duXHJcblxyXG50eXBlIEdldFNlcmlhbGl6ZWRFcnJvclR5cGU8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgc2VyaWFsaXplZEVycm9yVHlwZTogaW5mZXIgR2V0U2VyaWFsaXplZEVycm9yVHlwZVxyXG59XHJcbiAgPyBHZXRTZXJpYWxpemVkRXJyb3JUeXBlXHJcbiAgOiBTZXJpYWxpemVkRXJyb3JcclxuXHJcbnR5cGUgTWF5YmVQcm9taXNlPFQ+ID0gVCB8IFByb21pc2U8VD4gfCAoVCBleHRlbmRzIGFueSA/IFByb21pc2U8VD4gOiBuZXZlcilcclxuXHJcbi8qKlxyXG4gKiBBIHR5cGUgZGVzY3JpYmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBgcGF5bG9hZENyZWF0b3JgIGFyZ3VtZW50IHRvIGBjcmVhdGVBc3luY1RodW5rYC5cclxuICogTWlnaHQgYmUgdXNlZnVsIGZvciB3cmFwcGluZyBgY3JlYXRlQXN5bmNUaHVua2AgaW4gY3VzdG9tIGFic3RyYWN0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yUmV0dXJuVmFsdWU8XHJcbiAgUmV0dXJuZWQsXHJcbiAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnXHJcbj4gPSBNYXliZVByb21pc2U8XHJcbiAgfCBJc1Vua25vd248XHJcbiAgICAgIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICBSZXR1cm5lZCxcclxuICAgICAgRnVsZmlsbFdpdGhNZXRhPFJldHVybmVkLCBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPj5cclxuICAgID5cclxuICB8IFJlamVjdFdpdGhWYWx1ZTxcclxuICAgICAgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcbiAgICA+XHJcbj5cclxuLyoqXHJcbiAqIEEgdHlwZSBkZXNjcmliaW5nIHRoZSBgcGF5bG9hZENyZWF0b3JgIGFyZ3VtZW50IHRvIGBjcmVhdGVBc3luY1RodW5rYC5cclxuICogTWlnaHQgYmUgdXNlZnVsIGZvciB3cmFwcGluZyBgY3JlYXRlQXN5bmNUaHVua2AgaW4gY3VzdG9tIGFic3RyYWN0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnID0gdm9pZCxcclxuICBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWcgPSB7fVxyXG4+ID0gKFxyXG4gIGFyZzogVGh1bmtBcmcsXHJcbiAgdGh1bmtBUEk6IEdldFRodW5rQVBJPFRodW5rQXBpQ29uZmlnPlxyXG4pID0+IEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvclJldHVyblZhbHVlPFJldHVybmVkLCBUaHVua0FwaUNvbmZpZz5cclxuXHJcbi8qKlxyXG4gKiBBIFRodW5rQWN0aW9uIGNyZWF0ZWQgYnkgYGNyZWF0ZUFzeW5jVGh1bmtgLlxyXG4gKiBEaXNwYXRjaGluZyBpdCByZXR1cm5zIGEgUHJvbWlzZSBmb3IgZWl0aGVyIGFcclxuICogZnVsZmlsbGVkIG9yIHJlamVjdGVkIGFjdGlvbi5cclxuICogQWxzbywgdGhlIHJldHVybmVkIHZhbHVlIGNvbnRhaW5zIGFuIGBhYm9ydCgpYCBtZXRob2RcclxuICogdGhhdCBhbGxvd3MgdGhlIGFzeW5jQWN0aW9uIHRvIGJlIGNhbmNlbGxlZCBmcm9tIHRoZSBvdXRzaWRlLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rQWN0aW9uPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZ1xyXG4+ID0gKFxyXG4gIGRpc3BhdGNoOiBHZXREaXNwYXRjaDxUaHVua0FwaUNvbmZpZz4sXHJcbiAgZ2V0U3RhdGU6ICgpID0+IEdldFN0YXRlPFRodW5rQXBpQ29uZmlnPixcclxuICBleHRyYTogR2V0RXh0cmE8VGh1bmtBcGlDb25maWc+XHJcbikgPT4gUHJvbWlzZTxcclxuICB8IFJldHVyblR5cGU8QXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8UmV0dXJuZWQsIFRodW5rQXJnPj5cclxuICB8IFJldHVyblR5cGU8QXN5bmNUaHVua1JlamVjdGVkQWN0aW9uQ3JlYXRvcjxUaHVua0FyZywgVGh1bmtBcGlDb25maWc+PlxyXG4+ICYge1xyXG4gIGFib3J0OiAocmVhc29uPzogc3RyaW5nKSA9PiB2b2lkXHJcbiAgcmVxdWVzdElkOiBzdHJpbmdcclxuICBhcmc6IFRodW5rQXJnXHJcbiAgdW53cmFwOiAoKSA9PiBQcm9taXNlPFJldHVybmVkPlxyXG59XHJcblxyXG50eXBlIEFzeW5jVGh1bmtBY3Rpb25DcmVhdG9yPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZ1xyXG4+ID0gSXNBbnk8XHJcbiAgVGh1bmtBcmcsXHJcbiAgLy8gYW55IGhhbmRsaW5nXHJcbiAgKGFyZzogVGh1bmtBcmcpID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4sXHJcbiAgLy8gdW5rbm93biBoYW5kbGluZ1xyXG4gIHVua25vd24gZXh0ZW5kcyBUaHVua0FyZ1xyXG4gICAgPyAoYXJnOiBUaHVua0FyZykgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiAvLyBhcmd1bWVudCBub3Qgc3BlY2lmaWVkIG9yIHNwZWNpZmllZCBhcyB2b2lkIG9yIHVuZGVmaW5lZFxyXG4gICAgOiBbVGh1bmtBcmddIGV4dGVuZHMgW3ZvaWRdIHwgW3VuZGVmaW5lZF1cclxuICAgID8gKCkgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiAvLyBhcmd1bWVudCBjb250YWlucyB2b2lkXHJcbiAgICA6IFt2b2lkXSBleHRlbmRzIFtUaHVua0FyZ10gLy8gbWFrZSBvcHRpb25hbFxyXG4gICAgPyAoYXJnPzogVGh1bmtBcmcpID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4gLy8gYXJndW1lbnQgY29udGFpbnMgdW5kZWZpbmVkXHJcbiAgICA6IFt1bmRlZmluZWRdIGV4dGVuZHMgW1RodW5rQXJnXVxyXG4gICAgPyBXaXRoU3RyaWN0TnVsbENoZWNrczxcclxuICAgICAgICAvLyB3aXRoIHN0cmljdCBudWxsQ2hlY2tzOiBtYWtlIG9wdGlvbmFsXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgYXJnPzogVGh1bmtBcmdcclxuICAgICAgICApID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4sXHJcbiAgICAgICAgLy8gd2l0aG91dCBzdHJpY3QgbnVsbCBjaGVja3MgdGhpcyB3aWxsIG1hdGNoIGV2ZXJ5dGhpbmcsIHNvIGRvbid0IG1ha2UgaXQgb3B0aW9uYWxcclxuICAgICAgICAoYXJnOiBUaHVua0FyZykgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4gICAgICA+IC8vIGRlZmF1bHQgY2FzZTogbm9ybWFsIGFyZ3VtZW50XHJcbiAgICA6IChhcmc6IFRodW5rQXJnKSA9PiBBc3luY1RodW5rQWN0aW9uPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIG9iamVjdCBmb3IgYGNyZWF0ZUFzeW5jVGh1bmtgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rT3B0aW9uczxcclxuICBUaHVua0FyZyA9IHZvaWQsXHJcbiAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnID0ge31cclxuPiA9IHtcclxuICAvKipcclxuICAgKiBBIG1ldGhvZCB0byBjb250cm9sIHdoZXRoZXIgdGhlIGFzeW5jVGh1bmsgc2hvdWxkIGJlIGV4ZWN1dGVkLiBIYXMgYWNjZXNzIHRvIHRoZVxyXG4gICAqIGBhcmdgLCBgYXBpLmdldFN0YXRlKClgIGFuZCBgYXBpLmV4dHJhYCBhcmd1bWVudHMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBgZmFsc2VgIGlmIGl0IHNob3VsZCBiZSBza2lwcGVkXHJcbiAgICovXHJcbiAgY29uZGl0aW9uPyhcclxuICAgIGFyZzogVGh1bmtBcmcsXHJcbiAgICBhcGk6IFBpY2s8R2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+LCAnZ2V0U3RhdGUnIHwgJ2V4dHJhJz5cclxuICApOiBNYXliZVByb21pc2U8Ym9vbGVhbiB8IHVuZGVmaW5lZD5cclxuICAvKipcclxuICAgKiBJZiBgY29uZGl0aW9uYCByZXR1cm5zIGBmYWxzZWAsIHRoZSBhc3luY1RodW5rIHdpbGwgYmUgc2tpcHBlZC5cclxuICAgKiBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNvbnRyb2wgd2hldGhlciBhIGByZWplY3RlZGAgYWN0aW9uIHdpdGggYG1ldGEuY29uZGl0aW9uID09IGZhbHNlYFxyXG4gICAqIHdpbGwgYmUgZGlzcGF0Y2hlZCBvciBub3QuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXHJcbiAgICovXHJcbiAgZGlzcGF0Y2hDb25kaXRpb25SZWplY3Rpb24/OiBib29sZWFuXHJcblxyXG4gIHNlcmlhbGl6ZUVycm9yPzogKHg6IHVua25vd24pID0+IEdldFNlcmlhbGl6ZWRFcnJvclR5cGU8VGh1bmtBcGlDb25maWc+XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyB0aGUgYHJlcXVlc3RJZGAgZm9yIHRoZSByZXF1ZXN0IHNlcXVlbmNlLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgYG5hbm9pZGBcclxuICAgKi9cclxuICBpZEdlbmVyYXRvcj86IChhcmc6IFRodW5rQXJnKSA9PiBzdHJpbmdcclxufSAmIElzVW5rbm93bjxcclxuICBHZXRQZW5kaW5nTWV0YTxUaHVua0FwaUNvbmZpZz4sXHJcbiAge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBIG1ldGhvZCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gYG1ldGFgIG9mIHRoZSBwZW5kaW5nIGFjdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBVc2luZyB0aGlzIG9wdGlvbmFsIG92ZXJsb2FkIHdpbGwgbm90IG1vZGlmeSB0aGUgdHlwZXMgY29ycmVjdGx5LCB0aGlzIG92ZXJsb2FkIGlzIG9ubHkgaW4gcGxhY2UgdG8gc3VwcG9ydCBKYXZhU2NyaXB0IHVzZXJzLlxyXG4gICAgICogUGxlYXNlIHVzZSB0aGUgYFRodW5rQXBpQ29uZmlnYCBwYXJhbWV0ZXIgYHBlbmRpbmdNZXRhYCB0byBnZXQgYWNjZXNzIHRvIGEgY29ycmVjdGx5IHR5cGVkIG92ZXJsb2FkXHJcbiAgICAgKi9cclxuICAgIGdldFBlbmRpbmdNZXRhPyhcclxuICAgICAgYmFzZToge1xyXG4gICAgICAgIGFyZzogVGh1bmtBcmdcclxuICAgICAgICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gICAgICB9LFxyXG4gICAgICBhcGk6IFBpY2s8R2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+LCAnZ2V0U3RhdGUnIHwgJ2V4dHJhJz5cclxuICAgICk6IEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4gIH0sXHJcbiAge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBIG1ldGhvZCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gYG1ldGFgIG9mIHRoZSBwZW5kaW5nIGFjdGlvbi5cclxuICAgICAqL1xyXG4gICAgZ2V0UGVuZGluZ01ldGEoXHJcbiAgICAgIGJhc2U6IHtcclxuICAgICAgICBhcmc6IFRodW5rQXJnXHJcbiAgICAgICAgcmVxdWVzdElkOiBzdHJpbmdcclxuICAgICAgfSxcclxuICAgICAgYXBpOiBQaWNrPEdldFRodW5rQVBJPFRodW5rQXBpQ29uZmlnPiwgJ2dldFN0YXRlJyB8ICdleHRyYSc+XHJcbiAgICApOiBHZXRQZW5kaW5nTWV0YTxUaHVua0FwaUNvbmZpZz5cclxuICB9XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcjxcclxuICBUaHVua0FyZyxcclxuICBUaHVua0FwaUNvbmZpZyA9IHt9XHJcbj4gPSBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxcclxuICBbc3RyaW5nLCBUaHVua0FyZywgR2V0UGVuZGluZ01ldGE8VGh1bmtBcGlDb25maWc+P10sXHJcbiAgdW5kZWZpbmVkLFxyXG4gIHN0cmluZyxcclxuICBuZXZlcixcclxuICB7XHJcbiAgICBhcmc6IFRodW5rQXJnXHJcbiAgICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gICAgcmVxdWVzdFN0YXR1czogJ3BlbmRpbmcnXHJcbiAgfSAmIEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yPFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnID0ge31cclxuPiA9IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIFtcclxuICAgIEVycm9yIHwgbnVsbCxcclxuICAgIHN0cmluZyxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+PyxcclxuICAgIEdldFJlamVjdGVkTWV0YTxUaHVua0FwaUNvbmZpZz4/XHJcbiAgXSxcclxuICBHZXRSZWplY3RWYWx1ZTxUaHVua0FwaUNvbmZpZz4gfCB1bmRlZmluZWQsXHJcbiAgc3RyaW5nLFxyXG4gIEdldFNlcmlhbGl6ZWRFcnJvclR5cGU8VGh1bmtBcGlDb25maWc+LFxyXG4gIHtcclxuICAgIGFyZzogVGh1bmtBcmdcclxuICAgIHJlcXVlc3RJZDogc3RyaW5nXHJcbiAgICByZXF1ZXN0U3RhdHVzOiAncmVqZWN0ZWQnXHJcbiAgICBhYm9ydGVkOiBib29sZWFuXHJcbiAgICBjb25kaXRpb246IGJvb2xlYW5cclxuICB9ICYgKFxyXG4gICAgfCAoeyByZWplY3RlZFdpdGhWYWx1ZTogZmFsc2UgfSAmIHtcclxuICAgICAgICBbSyBpbiBrZXlvZiBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+XT86IHVuZGVmaW5lZFxyXG4gICAgICB9KVxyXG4gICAgfCAoeyByZWplY3RlZFdpdGhWYWx1ZTogdHJ1ZSB9ICYgR2V0UmVqZWN0ZWRNZXRhPFRodW5rQXBpQ29uZmlnPilcclxuICApXHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25DcmVhdG9yPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnID0ge31cclxuPiA9IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIFtSZXR1cm5lZCwgc3RyaW5nLCBUaHVua0FyZywgR2V0RnVsZmlsbGVkTWV0YTxUaHVua0FwaUNvbmZpZz4/XSxcclxuICBSZXR1cm5lZCxcclxuICBzdHJpbmcsXHJcbiAgbmV2ZXIsXHJcbiAge1xyXG4gICAgYXJnOiBUaHVua0FyZ1xyXG4gICAgcmVxdWVzdElkOiBzdHJpbmdcclxuICAgIHJlcXVlc3RTdGF0dXM6ICdmdWxmaWxsZWQnXHJcbiAgfSAmIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBBIHR5cGUgZGVzY3JpYmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBjcmVhdGVBc3luY1RodW5rYC5cclxuICogTWlnaHQgYmUgdXNlZnVsIGZvciB3cmFwcGluZyBgY3JlYXRlQXN5bmNUaHVua2AgaW4gY3VzdG9tIGFic3RyYWN0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVuazxcclxuICBSZXR1cm5lZCxcclxuICBUaHVua0FyZyxcclxuICBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWdcclxuPiA9IEFzeW5jVGh1bmtBY3Rpb25DcmVhdG9yPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+ICYge1xyXG4gIHBlbmRpbmc6IEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcjxUaHVua0FyZywgVGh1bmtBcGlDb25maWc+XHJcbiAgcmVqZWN0ZWQ6IEFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4gIGZ1bGZpbGxlZDogQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8XHJcbiAgICBSZXR1cm5lZCxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgVGh1bmtBcGlDb25maWdcclxuICA+XHJcbiAgdHlwZVByZWZpeDogc3RyaW5nXHJcbn1cclxuXHJcbnR5cGUgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8T2xkQ29uZmlnLCBOZXdDb25maWc+ID0gSWQ8XHJcbiAgTmV3Q29uZmlnICYgT21pdDxPbGRDb25maWcsIGtleW9mIE5ld0NvbmZpZz5cclxuPlxyXG5cclxudHlwZSBDcmVhdGVBc3luY1RodW5rPEN1cnJpZWRUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWc+ID0ge1xyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHR5cGVQcmVmaXhcclxuICAgKiBAcGFyYW0gcGF5bG9hZENyZWF0b3JcclxuICAgKiBAcGFyYW0gb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHB1YmxpY1xyXG4gICAqL1xyXG4gIC8vIHNlcGFyYXRlIHNpZ25hdHVyZSB3aXRob3V0IGBBc3luY1RodW5rQ29uZmlnYCBmb3IgYmV0dGVyIGluZmVyZW5jZVxyXG4gIDxSZXR1cm5lZCwgVGh1bmtBcmcgPSB2b2lkPihcclxuICAgIHR5cGVQcmVmaXg6IHN0cmluZyxcclxuICAgIHBheWxvYWRDcmVhdG9yOiBBc3luY1RodW5rUGF5bG9hZENyZWF0b3I8XHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgQ3VycmllZFRodW5rQXBpQ29uZmlnXHJcbiAgICA+LFxyXG4gICAgb3B0aW9ucz86IEFzeW5jVGh1bmtPcHRpb25zPFRodW5rQXJnLCBDdXJyaWVkVGh1bmtBcGlDb25maWc+XHJcbiAgKTogQXN5bmNUaHVuazxSZXR1cm5lZCwgVGh1bmtBcmcsIEN1cnJpZWRUaHVua0FwaUNvbmZpZz5cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHlwZVByZWZpeFxyXG4gICAqIEBwYXJhbSBwYXlsb2FkQ3JlYXRvclxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcHVibGljXHJcbiAgICovXHJcbiAgPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnPihcclxuICAgIHR5cGVQcmVmaXg6IHN0cmluZyxcclxuICAgIHBheWxvYWRDcmVhdG9yOiBBc3luY1RodW5rUGF5bG9hZENyZWF0b3I8XHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8Q3VycmllZFRodW5rQXBpQ29uZmlnLCBUaHVua0FwaUNvbmZpZz5cclxuICAgID4sXHJcbiAgICBvcHRpb25zPzogQXN5bmNUaHVua09wdGlvbnM8XHJcbiAgICAgIFRodW5rQXJnLFxyXG4gICAgICBPdmVycmlkZVRodW5rQXBpQ29uZmlnczxDdXJyaWVkVGh1bmtBcGlDb25maWcsIFRodW5rQXBpQ29uZmlnPlxyXG4gICAgPlxyXG4gICk6IEFzeW5jVGh1bms8XHJcbiAgICBSZXR1cm5lZCxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8Q3VycmllZFRodW5rQXBpQ29uZmlnLCBUaHVua0FwaUNvbmZpZz5cclxuICA+XHJcblxyXG4gIHdpdGhUeXBlczxUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWc+KCk6IENyZWF0ZUFzeW5jVGh1bms8XHJcbiAgICBPdmVycmlkZVRodW5rQXBpQ29uZmlnczxDdXJyaWVkVGh1bmtBcGlDb25maWcsIFRodW5rQXBpQ29uZmlnPlxyXG4gID5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFzeW5jVGh1bmsgPSAoKCkgPT4ge1xyXG4gIGZ1bmN0aW9uIGNyZWF0ZUFzeW5jVGh1bms8XHJcbiAgICBSZXR1cm5lZCxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnXHJcbiAgPihcclxuICAgIHR5cGVQcmVmaXg6IHN0cmluZyxcclxuICAgIHBheWxvYWRDcmVhdG9yOiBBc3luY1RodW5rUGF5bG9hZENyZWF0b3I8XHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgVGh1bmtBcGlDb25maWdcclxuICAgID4sXHJcbiAgICBvcHRpb25zPzogQXN5bmNUaHVua09wdGlvbnM8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4gICk6IEFzeW5jVGh1bms8UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4ge1xyXG4gICAgdHlwZSBSZWplY3RlZFZhbHVlID0gR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+XHJcbiAgICB0eXBlIFBlbmRpbmdNZXRhID0gR2V0UGVuZGluZ01ldGE8VGh1bmtBcGlDb25maWc+XHJcbiAgICB0eXBlIEZ1bGZpbGxlZE1ldGEgPSBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4gICAgdHlwZSBSZWplY3RlZE1ldGEgPSBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcblxyXG4gICAgY29uc3QgZnVsZmlsbGVkOiBBc3luY1RodW5rRnVsZmlsbGVkQWN0aW9uQ3JlYXRvcjxcclxuICAgICAgUmV0dXJuZWQsXHJcbiAgICAgIFRodW5rQXJnLFxyXG4gICAgICBUaHVua0FwaUNvbmZpZ1xyXG4gICAgPiA9IGNyZWF0ZUFjdGlvbihcclxuICAgICAgdHlwZVByZWZpeCArICcvZnVsZmlsbGVkJyxcclxuICAgICAgKFxyXG4gICAgICAgIHBheWxvYWQ6IFJldHVybmVkLFxyXG4gICAgICAgIHJlcXVlc3RJZDogc3RyaW5nLFxyXG4gICAgICAgIGFyZzogVGh1bmtBcmcsXHJcbiAgICAgICAgbWV0YT86IEZ1bGZpbGxlZE1ldGFcclxuICAgICAgKSA9PiAoe1xyXG4gICAgICAgIHBheWxvYWQsXHJcbiAgICAgICAgbWV0YToge1xyXG4gICAgICAgICAgLi4uKChtZXRhIGFzIGFueSkgfHwge30pLFxyXG4gICAgICAgICAgYXJnLFxyXG4gICAgICAgICAgcmVxdWVzdElkLFxyXG4gICAgICAgICAgcmVxdWVzdFN0YXR1czogJ2Z1bGZpbGxlZCcgYXMgY29uc3QsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBwZW5kaW5nOiBBc3luY1RodW5rUGVuZGluZ0FjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiA9XHJcbiAgICAgIGNyZWF0ZUFjdGlvbihcclxuICAgICAgICB0eXBlUHJlZml4ICsgJy9wZW5kaW5nJyxcclxuICAgICAgICAocmVxdWVzdElkOiBzdHJpbmcsIGFyZzogVGh1bmtBcmcsIG1ldGE/OiBQZW5kaW5nTWV0YSkgPT4gKHtcclxuICAgICAgICAgIHBheWxvYWQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIG1ldGE6IHtcclxuICAgICAgICAgICAgLi4uKChtZXRhIGFzIGFueSkgfHwge30pLFxyXG4gICAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgcmVxdWVzdFN0YXR1czogJ3BlbmRpbmcnIGFzIGNvbnN0LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgY29uc3QgcmVqZWN0ZWQ6IEFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiA9XHJcbiAgICAgIGNyZWF0ZUFjdGlvbihcclxuICAgICAgICB0eXBlUHJlZml4ICsgJy9yZWplY3RlZCcsXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgZXJyb3I6IEVycm9yIHwgbnVsbCxcclxuICAgICAgICAgIHJlcXVlc3RJZDogc3RyaW5nLFxyXG4gICAgICAgICAgYXJnOiBUaHVua0FyZyxcclxuICAgICAgICAgIHBheWxvYWQ/OiBSZWplY3RlZFZhbHVlLFxyXG4gICAgICAgICAgbWV0YT86IFJlamVjdGVkTWV0YVxyXG4gICAgICAgICkgPT4gKHtcclxuICAgICAgICAgIHBheWxvYWQsXHJcbiAgICAgICAgICBlcnJvcjogKChvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplRXJyb3IpIHx8IG1pbmlTZXJpYWxpemVFcnJvcikoXHJcbiAgICAgICAgICAgIGVycm9yIHx8ICdSZWplY3RlZCdcclxuICAgICAgICAgICkgYXMgR2V0U2VyaWFsaXplZEVycm9yVHlwZTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgICAgICAgICBtZXRhOiB7XHJcbiAgICAgICAgICAgIC4uLigobWV0YSBhcyBhbnkpIHx8IHt9KSxcclxuICAgICAgICAgICAgYXJnLFxyXG4gICAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgIHJlamVjdGVkV2l0aFZhbHVlOiAhIXBheWxvYWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6ICdyZWplY3RlZCcgYXMgY29uc3QsXHJcbiAgICAgICAgICAgIGFib3J0ZWQ6IGVycm9yPy5uYW1lID09PSAnQWJvcnRFcnJvcicsXHJcbiAgICAgICAgICAgIGNvbmRpdGlvbjogZXJyb3I/Lm5hbWUgPT09ICdDb25kaXRpb25FcnJvcicsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICBsZXQgZGlzcGxheWVkV2FybmluZyA9IGZhbHNlXHJcblxyXG4gICAgY29uc3QgQUMgPVxyXG4gICAgICB0eXBlb2YgQWJvcnRDb250cm9sbGVyICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgID8gQWJvcnRDb250cm9sbGVyXHJcbiAgICAgICAgOiBjbGFzcyBpbXBsZW1lbnRzIEFib3J0Q29udHJvbGxlciB7XHJcbiAgICAgICAgICAgIHNpZ25hbCA9IHtcclxuICAgICAgICAgICAgICBhYm9ydGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKCkge30sXHJcbiAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudCgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgb25hYm9ydCgpIHt9LFxyXG4gICAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7fSxcclxuICAgICAgICAgICAgICByZWFzb246IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB0aHJvd0lmQWJvcnRlZCgpIHt9LFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFib3J0KCkge1xyXG4gICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRpc3BsYXllZFdhcm5pbmcpIHtcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheWVkV2FybmluZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFxyXG4gICAgICAgICAgICAgICAgICAgIGBUaGlzIHBsYXRmb3JtIGRvZXMgbm90IGltcGxlbWVudCBBYm9ydENvbnRyb2xsZXIuIFxyXG5JZiB5b3Ugd2FudCB0byB1c2UgdGhlIEFib3J0Q29udHJvbGxlciB0byByZWFjdCB0byBcXGBhYm9ydFxcYCBldmVudHMsIHBsZWFzZSBjb25zaWRlciBpbXBvcnRpbmcgYSBwb2x5ZmlsbCBsaWtlICdhYm9ydGNvbnRyb2xsZXItcG9seWZpbGwvZGlzdC9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGwtb25seScuYFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvcihcclxuICAgICAgYXJnOiBUaHVua0FyZ1xyXG4gICAgKTogQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiB7XHJcbiAgICAgIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IG9wdGlvbnM/LmlkR2VuZXJhdG9yXHJcbiAgICAgICAgICA/IG9wdGlvbnMuaWRHZW5lcmF0b3IoYXJnKVxyXG4gICAgICAgICAgOiBuYW5vaWQoKVxyXG5cclxuICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQUMoKVxyXG4gICAgICAgIGxldCBhYm9ydFJlYXNvbjogc3RyaW5nIHwgdW5kZWZpbmVkXHJcblxyXG4gICAgICAgIGxldCBzdGFydGVkID0gZmFsc2VcclxuICAgICAgICBmdW5jdGlvbiBhYm9ydChyZWFzb24/OiBzdHJpbmcpIHtcclxuICAgICAgICAgIGFib3J0UmVhc29uID0gcmVhc29uXHJcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IChhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBsZXQgZmluYWxBY3Rpb246IFJldHVyblR5cGU8dHlwZW9mIGZ1bGZpbGxlZCB8IHR5cGVvZiByZWplY3RlZD5cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBjb25kaXRpb25SZXN1bHQgPSBvcHRpb25zPy5jb25kaXRpb24/LihhcmcsIHsgZ2V0U3RhdGUsIGV4dHJhIH0pXHJcbiAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlKGNvbmRpdGlvblJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSBhd2FpdCBjb25kaXRpb25SZXN1bHRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvblJlc3VsdCA9PT0gZmFsc2UgfHwgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcclxuICAgICAgICAgICAgICB0aHJvdyB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ29uZGl0aW9uRXJyb3InLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Fib3J0ZWQgZHVlIHRvIGNvbmRpdGlvbiBjYWxsYmFjayByZXR1cm5pbmcgZmFsc2UuJyxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RhcnRlZCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFib3J0ZWRQcm9taXNlID0gbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+XHJcbiAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+XHJcbiAgICAgICAgICAgICAgICByZWplY3Qoe1xyXG4gICAgICAgICAgICAgICAgICBuYW1lOiAnQWJvcnRFcnJvcicsXHJcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFib3J0UmVhc29uIHx8ICdBYm9ydGVkJyxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGRpc3BhdGNoKFxyXG4gICAgICAgICAgICAgIHBlbmRpbmcoXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zPy5nZXRQZW5kaW5nTWV0YT8uKFxyXG4gICAgICAgICAgICAgICAgICB7IHJlcXVlc3RJZCwgYXJnIH0sXHJcbiAgICAgICAgICAgICAgICAgIHsgZ2V0U3RhdGUsIGV4dHJhIH1cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xyXG4gICAgICAgICAgICAgIGFib3J0ZWRQcm9taXNlLFxyXG4gICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShcclxuICAgICAgICAgICAgICAgIHBheWxvYWRDcmVhdG9yKGFyZywge1xyXG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCxcclxuICAgICAgICAgICAgICAgICAgZ2V0U3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIGV4dHJhLFxyXG4gICAgICAgICAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICAgICAgICAgICAgYWJvcnQsXHJcbiAgICAgICAgICAgICAgICAgIHJlamVjdFdpdGhWYWx1ZTogKChcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogUmVqZWN0ZWRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICBtZXRhPzogUmVqZWN0ZWRNZXRhXHJcbiAgICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVqZWN0V2l0aFZhbHVlKHZhbHVlLCBtZXRhKVxyXG4gICAgICAgICAgICAgICAgICB9KSBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICAgIGZ1bGZpbGxXaXRoVmFsdWU6ICgodmFsdWU6IHVua25vd24sIG1ldGE/OiBGdWxmaWxsZWRNZXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdWxmaWxsV2l0aE1ldGEodmFsdWUsIG1ldGEpXHJcbiAgICAgICAgICAgICAgICAgIH0pIGFzIGFueSxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZWplY3RXaXRoVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRnVsZmlsbFdpdGhNZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0LnBheWxvYWQsIHJlcXVlc3RJZCwgYXJnLCByZXN1bHQubWV0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0IGFzIGFueSwgcmVxdWVzdElkLCBhcmcpXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgZmluYWxBY3Rpb24gPVxyXG4gICAgICAgICAgICAgIGVyciBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZVxyXG4gICAgICAgICAgICAgICAgPyByZWplY3RlZChudWxsLCByZXF1ZXN0SWQsIGFyZywgZXJyLnBheWxvYWQsIGVyci5tZXRhKVxyXG4gICAgICAgICAgICAgICAgOiByZWplY3RlZChlcnIgYXMgYW55LCByZXF1ZXN0SWQsIGFyZylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIFdlIGRpc3BhdGNoIHRoZSByZXN1bHQgYWN0aW9uIF9hZnRlcl8gdGhlIGNhdGNoLCB0byBhdm9pZCBoYXZpbmcgYW55IGVycm9yc1xyXG4gICAgICAgICAgLy8gaGVyZSBnZXQgc3dhbGxvd2VkIGJ5IHRoZSB0cnkvY2F0Y2ggYmxvY2ssXHJcbiAgICAgICAgICAvLyBwZXIgaHR0cHM6Ly90d2l0dGVyLmNvbS9kYW5fYWJyYW1vdi9zdGF0dXMvNzcwOTE0MjIxNjM4OTQyNzIwXHJcbiAgICAgICAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3JlZHV4anMvcmVkdXgtdG9vbGtpdC9ibG9iL2U4NWViMTdiMzlhMjExOGQ4NTlmN2I3NzQ2ZTBmM2ZlZTUyM2UwODkvZG9jcy90dXRvcmlhbHMvYWR2YW5jZWQtdHV0b3JpYWwubWQjYXN5bmMtZXJyb3ItaGFuZGxpbmctbG9naWMtaW4tdGh1bmtzXHJcblxyXG4gICAgICAgICAgY29uc3Qgc2tpcERpc3BhdGNoID1cclxuICAgICAgICAgICAgb3B0aW9ucyAmJlxyXG4gICAgICAgICAgICAhb3B0aW9ucy5kaXNwYXRjaENvbmRpdGlvblJlamVjdGlvbiAmJlxyXG4gICAgICAgICAgICByZWplY3RlZC5tYXRjaChmaW5hbEFjdGlvbikgJiZcclxuICAgICAgICAgICAgKGZpbmFsQWN0aW9uIGFzIGFueSkubWV0YS5jb25kaXRpb25cclxuXHJcbiAgICAgICAgICBpZiAoIXNraXBEaXNwYXRjaCkge1xyXG4gICAgICAgICAgICBkaXNwYXRjaChmaW5hbEFjdGlvbilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmaW5hbEFjdGlvblxyXG4gICAgICAgIH0pKClcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9taXNlIGFzIFByb21pc2U8YW55Piwge1xyXG4gICAgICAgICAgYWJvcnQsXHJcbiAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICB1bndyYXAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW48YW55Pih1bndyYXBSZXN1bHQpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcclxuICAgICAgYWN0aW9uQ3JlYXRvciBhcyBBc3luY1RodW5rQWN0aW9uQ3JlYXRvcjxcclxuICAgICAgICBSZXR1cm5lZCxcclxuICAgICAgICBUaHVua0FyZyxcclxuICAgICAgICBUaHVua0FwaUNvbmZpZ1xyXG4gICAgICA+LFxyXG4gICAgICB7XHJcbiAgICAgICAgcGVuZGluZyxcclxuICAgICAgICByZWplY3RlZCxcclxuICAgICAgICBmdWxmaWxsZWQsXHJcbiAgICAgICAgdHlwZVByZWZpeCxcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuICBjcmVhdGVBc3luY1RodW5rLndpdGhUeXBlcyA9ICgpID0+IGNyZWF0ZUFzeW5jVGh1bmtcclxuXHJcbiAgcmV0dXJuIGNyZWF0ZUFzeW5jVGh1bmsgYXMgQ3JlYXRlQXN5bmNUaHVuazxBc3luY1RodW5rQ29uZmlnPlxyXG59KSgpXHJcblxyXG5pbnRlcmZhY2UgVW53cmFwcGFibGVBY3Rpb24ge1xyXG4gIHBheWxvYWQ6IGFueVxyXG4gIG1ldGE/OiBhbnlcclxuICBlcnJvcj86IGFueVxyXG59XHJcblxyXG50eXBlIFVud3JhcHBlZEFjdGlvblBheWxvYWQ8VCBleHRlbmRzIFVud3JhcHBhYmxlQWN0aW9uPiA9IEV4Y2x1ZGU8XHJcbiAgVCxcclxuICB7IGVycm9yOiBhbnkgfVxyXG4+WydwYXlsb2FkJ11cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwUmVzdWx0PFIgZXh0ZW5kcyBVbndyYXBwYWJsZUFjdGlvbj4oXHJcbiAgYWN0aW9uOiBSXHJcbik6IFVud3JhcHBlZEFjdGlvblBheWxvYWQ8Uj4ge1xyXG4gIGlmIChhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZSkge1xyXG4gICAgdGhyb3cgYWN0aW9uLnBheWxvYWRcclxuICB9XHJcbiAgaWYgKGFjdGlvbi5lcnJvcikge1xyXG4gICAgdGhyb3cgYWN0aW9uLmVycm9yXHJcbiAgfVxyXG4gIHJldHVybiBhY3Rpb24ucGF5bG9hZFxyXG59XHJcblxyXG50eXBlIFdpdGhTdHJpY3ROdWxsQ2hlY2tzPFRydWUsIEZhbHNlPiA9IHVuZGVmaW5lZCBleHRlbmRzIGJvb2xlYW5cclxuICA/IEZhbHNlXHJcbiAgOiBUcnVlXHJcblxyXG5mdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBQcm9taXNlTGlrZTxhbnk+IHtcclxuICByZXR1cm4gKFxyXG4gICAgdmFsdWUgIT09IG51bGwgJiZcclxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcclxuICAgIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nXHJcbiAgKVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXIsXHJcbiAgTWF0Y2hlcixcclxuICBVbmlvblRvSW50ZXJzZWN0aW9uLFxyXG59IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBoYXNNYXRjaEZ1bmN0aW9uIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB0eXBlIHtcclxuICBBc3luY1RodW5rLFxyXG4gIEFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25DcmVhdG9yLFxyXG4gIEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcixcclxuICBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yLFxyXG59IGZyb20gJy4vY3JlYXRlQXN5bmNUaHVuaydcclxuXHJcbi8qKiBAcHVibGljICovXHJcbmV4cG9ydCB0eXBlIEFjdGlvbk1hdGNoaW5nQW55T2Y8TWF0Y2hlcnMgZXh0ZW5kcyBbLi4uTWF0Y2hlcjxhbnk+W11dPiA9XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXI8TWF0Y2hlcnNbbnVtYmVyXT5cclxuXHJcbi8qKiBAcHVibGljICovXHJcbmV4cG9ydCB0eXBlIEFjdGlvbk1hdGNoaW5nQWxsT2Y8TWF0Y2hlcnMgZXh0ZW5kcyBbLi4uTWF0Y2hlcjxhbnk+W11dPiA9XHJcbiAgVW5pb25Ub0ludGVyc2VjdGlvbjxBY3Rpb25NYXRjaGluZ0FueU9mPE1hdGNoZXJzPj5cclxuXHJcbmNvbnN0IG1hdGNoZXMgPSAobWF0Y2hlcjogTWF0Y2hlcjxhbnk+LCBhY3Rpb246IGFueSkgPT4ge1xyXG4gIGlmIChoYXNNYXRjaEZ1bmN0aW9uKG1hdGNoZXIpKSB7XHJcbiAgICByZXR1cm4gbWF0Y2hlci5tYXRjaChhY3Rpb24pXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBtYXRjaGVyKGFjdGlvbilcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIG1hdGNoZXMgYW55IG9uZSBvZiB0aGUgc3VwcGxpZWQgdHlwZSBndWFyZHMgb3IgYWN0aW9uXHJcbiAqIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWF0Y2hlcnMgVGhlIHR5cGUgZ3VhcmRzIG9yIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBbnlPZjxNYXRjaGVycyBleHRlbmRzIFsuLi5NYXRjaGVyPGFueT5bXV0+KFxyXG4gIC4uLm1hdGNoZXJzOiBNYXRjaGVyc1xyXG4pIHtcclxuICByZXR1cm4gKGFjdGlvbjogYW55KTogYWN0aW9uIGlzIEFjdGlvbk1hdGNoaW5nQW55T2Y8TWF0Y2hlcnM+ID0+IHtcclxuICAgIHJldHVybiBtYXRjaGVycy5zb21lKChtYXRjaGVyKSA9PiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbikpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiBtYXRjaGVzIGFsbCBvZiB0aGUgc3VwcGxpZWQgdHlwZSBndWFyZHMgb3IgYWN0aW9uXHJcbiAqIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWF0Y2hlcnMgVGhlIHR5cGUgZ3VhcmRzIG9yIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBbGxPZjxNYXRjaGVycyBleHRlbmRzIFsuLi5NYXRjaGVyPGFueT5bXV0+KFxyXG4gIC4uLm1hdGNoZXJzOiBNYXRjaGVyc1xyXG4pIHtcclxuICByZXR1cm4gKGFjdGlvbjogYW55KTogYWN0aW9uIGlzIEFjdGlvbk1hdGNoaW5nQWxsT2Y8TWF0Y2hlcnM+ID0+IHtcclxuICAgIHJldHVybiBtYXRjaGVycy5ldmVyeSgobWF0Y2hlcikgPT4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSBhY3Rpb24gQSByZWR1eCBhY3Rpb25cclxuICogQHBhcmFtIHZhbGlkU3RhdHVzIEFuIGFycmF5IG9mIHZhbGlkIG1ldGEucmVxdWVzdFN0YXR1cyB2YWx1ZXNcclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoXHJcbiAgYWN0aW9uOiBhbnksXHJcbiAgdmFsaWRTdGF0dXM6IHJlYWRvbmx5IHN0cmluZ1tdXHJcbikge1xyXG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24ubWV0YSkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGNvbnN0IGhhc1ZhbGlkUmVxdWVzdElkID0gdHlwZW9mIGFjdGlvbi5tZXRhLnJlcXVlc3RJZCA9PT0gJ3N0cmluZydcclxuICBjb25zdCBoYXNWYWxpZFJlcXVlc3RTdGF0dXMgPVxyXG4gICAgdmFsaWRTdGF0dXMuaW5kZXhPZihhY3Rpb24ubWV0YS5yZXF1ZXN0U3RhdHVzKSA+IC0xXHJcblxyXG4gIHJldHVybiBoYXNWYWxpZFJlcXVlc3RJZCAmJiBoYXNWYWxpZFJlcXVlc3RTdGF0dXNcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc3luY1RodW5rQXJyYXkoYTogW2FueV0gfCBBbnlBc3luY1RodW5rW10pOiBhIGlzIEFueUFzeW5jVGh1bmtbXSB7XHJcbiAgcmV0dXJuIChcclxuICAgIHR5cGVvZiBhWzBdID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAncGVuZGluZycgaW4gYVswXSAmJlxyXG4gICAgJ2Z1bGZpbGxlZCcgaW4gYVswXSAmJlxyXG4gICAgJ3JlamVjdGVkJyBpbiBhWzBdXHJcbiAgKVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua1BlbmRpbmdBY3Rpb24gPSBSZXR1cm5UeXBlPFxyXG4gIEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcjx1bmtub3duPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBQZW5kaW5nQWN0aW9uRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydwZW5kaW5nJ10+XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiB3YXMgY3JlYXRlZCBieSBhbiBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvciwgYW5kIHRoYXRcclxuICogdGhlIGFjdGlvbiBpcyBwZW5kaW5nLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNQZW5kaW5nKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyxcclxuICogYW5kIHRoYXQgdGhlIGFjdGlvbiBpcyBwZW5kaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gYXN5bmNUaHVua3MgKG9wdGlvbmFsKSBUaGUgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzIHRvIG1hdGNoIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1BlbmRpbmc8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBQZW5kaW5nQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIGBhY3Rpb25gIGlzIGEgcGVuZGluZyB0aHVuayBhY3Rpb25cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUGVuZGluZyhhY3Rpb246IGFueSk6IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUGVuZGluZzxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzIHwgW2FueV0pIHtcclxuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gKGFjdGlvbjogYW55KSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFsncGVuZGluZyddKVxyXG4gIH1cclxuXHJcbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgIHJldHVybiBpc1BlbmRpbmcoKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBQZW5kaW5nQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgLy8gbm90ZTogdGhpcyB0eXBlIHdpbGwgYmUgY29ycmVjdCBiZWNhdXNlIHdlIGhhdmUgYXQgbGVhc3QgMSBhc3luY1RodW5rXHJcbiAgICBjb25zdCBtYXRjaGVyczogW01hdGNoZXI8YW55PiwgLi4uTWF0Y2hlcjxhbnk+W11dID0gYXN5bmNUaHVua3MubWFwKFxyXG4gICAgICAoYXN5bmNUaHVuaykgPT4gYXN5bmNUaHVuay5wZW5kaW5nXHJcbiAgICApIGFzIGFueVxyXG5cclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YoLi4ubWF0Y2hlcnMpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uID0gUmV0dXJuVHlwZTxcclxuICBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yPHVua25vd24sIHVua25vd24+XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIFJlamVjdGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydyZWplY3RlZCddPlxyXG5cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gd2FzIGNyZWF0ZWQgYnkgYW4gYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3IsIGFuZCB0aGF0XHJcbiAqIHRoZSBhY3Rpb24gaXMgcmVqZWN0ZWQuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIGJlbG9uZ3MgdG8gb25lIG9mIHRoZSBwcm92aWRlZCBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMsXHJcbiAqIGFuZCB0aGF0IHRoZSBhY3Rpb24gaXMgcmVqZWN0ZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSBhc3luY1RodW5rcyAob3B0aW9uYWwpIFRoZSBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMgdG8gbWF0Y2ggYWdhaW5zdC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWQ8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBSZWplY3RlZEFjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+XHJcbi8qKlxyXG4gKiBUZXN0cyBpZiBgYWN0aW9uYCBpcyBhIHJlamVjdGVkIHRodW5rIGFjdGlvblxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZChcclxuICBhY3Rpb246IGFueVxyXG4pOiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtSZWplY3RlZEFjdGlvblxyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZDxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzIHwgW2FueV0pIHtcclxuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gKGFjdGlvbjogYW55KSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFsncmVqZWN0ZWQnXSlcclxuICB9XHJcblxyXG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICByZXR1cm4gaXNSZWplY3RlZCgpKGFzeW5jVGh1bmtzWzBdKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIGFjdGlvbjogYW55XHJcbiAgKTogYWN0aW9uIGlzIFJlamVjdGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgLy8gbm90ZTogdGhpcyB0eXBlIHdpbGwgYmUgY29ycmVjdCBiZWNhdXNlIHdlIGhhdmUgYXQgbGVhc3QgMSBhc3luY1RodW5rXHJcbiAgICBjb25zdCBtYXRjaGVyczogW01hdGNoZXI8YW55PiwgLi4uTWF0Y2hlcjxhbnk+W11dID0gYXN5bmNUaHVua3MubWFwKFxyXG4gICAgICAoYXN5bmNUaHVuaykgPT4gYXN5bmNUaHVuay5yZWplY3RlZFxyXG4gICAgKSBhcyBhbnlcclxuXHJcbiAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mKC4uLm1hdGNoZXJzKVxyXG5cclxuICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVW5rbm93bkFzeW5jVGh1bmtSZWplY3RlZFdpdGhWYWx1ZUFjdGlvbiA9IFJldHVyblR5cGU8XHJcbiAgQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uQ3JlYXRvcjx1bmtub3duLCB1bmtub3duPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBSZWplY3RlZFdpdGhWYWx1ZUFjdGlvbkZyb21Bc3luY1RodW5rPFQgZXh0ZW5kcyBBbnlBc3luY1RodW5rPiA9XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXI8VFsncmVqZWN0ZWQnXT4gJlxyXG4gICAgKFQgZXh0ZW5kcyBBc3luY1RodW5rPGFueSwgYW55LCB7IHJlamVjdFZhbHVlOiBpbmZlciBSZWplY3RlZFZhbHVlIH0+XHJcbiAgICAgID8geyBwYXlsb2FkOiBSZWplY3RlZFZhbHVlIH1cclxuICAgICAgOiB1bmtub3duKVxyXG5cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gd2FzIGNyZWF0ZWQgYnkgYW4gYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3IsIGFuZCB0aGF0XHJcbiAqIHRoZSBhY3Rpb24gaXMgcmVqZWN0ZWQgd2l0aCB2YWx1ZS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWUoKTogKFxyXG4gIGFjdGlvbjogYW55XHJcbikgPT4gYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyxcclxuICogYW5kIHRoYXQgdGhlIGFjdGlvbiBpcyByZWplY3RlZCB3aXRoIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0gYXN5bmNUaHVua3MgKG9wdGlvbmFsKSBUaGUgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzIHRvIG1hdGNoIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPihcclxuICAuLi5hc3luY1RodW5rczogQXN5bmNUaHVua3NcclxuKTogKFxyXG4gIGFjdGlvbjogYW55XHJcbikgPT4gYWN0aW9uIGlzIFJlamVjdGVkV2l0aFZhbHVlQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIGBhY3Rpb25gIGlzIGEgcmVqZWN0ZWQgdGh1bmsgYWN0aW9uIHdpdGggdmFsdWVcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWUoXHJcbiAgYWN0aW9uOiBhbnlcclxuKTogYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWU8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rcyB8IFthbnldKSB7XHJcbiAgY29uc3QgaGFzRmxhZyA9IChhY3Rpb246IGFueSk6IGFjdGlvbiBpcyBhbnkgPT4ge1xyXG4gICAgcmV0dXJuIGFjdGlvbiAmJiBhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZVxyXG4gIH1cclxuXHJcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIChhY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FsbE9mKGlzUmVqZWN0ZWQoLi4uYXN5bmNUaHVua3MpLCBoYXNGbGFnKVxyXG5cclxuICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgcmV0dXJuIGlzUmVqZWN0ZWRXaXRoVmFsdWUoKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBSZWplY3RlZEFjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+ID0+IHtcclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQWxsT2YoaXNSZWplY3RlZCguLi5hc3luY1RodW5rcyksIGhhc0ZsYWcpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbiA9IFJldHVyblR5cGU8XHJcbiAgQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8dW5rbm93biwgdW5rbm93bj5cclxuPlxyXG5cclxuZXhwb3J0IHR5cGUgRnVsZmlsbGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydmdWxmaWxsZWQnXT5cclxuXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIHdhcyBjcmVhdGVkIGJ5IGFuIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9yLCBhbmQgdGhhdFxyXG4gKiB0aGUgYWN0aW9uIGlzIGZ1bGZpbGxlZC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVsZmlsbGVkKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiBiZWxvbmdzIHRvIG9uZSBvZiB0aGUgcHJvdmlkZWQgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzLFxyXG4gKiBhbmQgdGhhdCB0aGUgYWN0aW9uIGlzIGZ1bGZpbGxlZC5cclxuICpcclxuICogQHBhcmFtIGFzeW5jVGh1bmtzIChvcHRpb25hbCkgVGhlIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNGdWxmaWxsZWQ8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBGdWxmaWxsZWRBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPlxyXG4vKipcclxuICogVGVzdHMgaWYgYGFjdGlvbmAgaXMgYSBmdWxmaWxsZWQgdGh1bmsgYWN0aW9uXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGZpbGxlZChcclxuICBhY3Rpb246IGFueVxyXG4pOiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVsZmlsbGVkPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPiguLi5hc3luY1RodW5rczogQXN5bmNUaHVua3MgfCBbYW55XSkge1xyXG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiAoYWN0aW9uOiBhbnkpID0+IGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgWydmdWxmaWxsZWQnXSlcclxuICB9XHJcblxyXG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICByZXR1cm4gaXNGdWxmaWxsZWQoKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBGdWxmaWxsZWRBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPiA9PiB7XHJcbiAgICAvLyBub3RlOiB0aGlzIHR5cGUgd2lsbCBiZSBjb3JyZWN0IGJlY2F1c2Ugd2UgaGF2ZSBhdCBsZWFzdCAxIGFzeW5jVGh1bmtcclxuICAgIGNvbnN0IG1hdGNoZXJzOiBbTWF0Y2hlcjxhbnk+LCAuLi5NYXRjaGVyPGFueT5bXV0gPSBhc3luY1RodW5rcy5tYXAoXHJcbiAgICAgIChhc3luY1RodW5rKSA9PiBhc3luY1RodW5rLmZ1bGZpbGxlZFxyXG4gICAgKSBhcyBhbnlcclxuXHJcbiAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mKC4uLm1hdGNoZXJzKVxyXG5cclxuICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVW5rbm93bkFzeW5jVGh1bmtBY3Rpb24gPVxyXG4gIHwgVW5rbm93bkFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uXHJcbiAgfCBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uXHJcbiAgfCBVbmtub3duQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvblxyXG5cclxuZXhwb3J0IHR5cGUgQW55QXN5bmNUaHVuayA9IHtcclxuICBwZW5kaW5nOiB7IG1hdGNoOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBhbnkgfVxyXG4gIGZ1bGZpbGxlZDogeyBtYXRjaDogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgYW55IH1cclxuICByZWplY3RlZDogeyBtYXRjaDogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgYW55IH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uc0Zyb21Bc3luY1RodW5rPFQgZXh0ZW5kcyBBbnlBc3luY1RodW5rPiA9XHJcbiAgfCBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydwZW5kaW5nJ10+XHJcbiAgfCBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydmdWxmaWxsZWQnXT5cclxuICB8IEFjdGlvbkZyb21NYXRjaGVyPFRbJ3JlamVjdGVkJ10+XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiB3YXMgY3JlYXRlZCBieSBhbiBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvci5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbigpOiAoXHJcbiAgYWN0aW9uOiBhbnlcclxuKSA9PiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycy5cclxuICpcclxuICogQHBhcmFtIGFzeW5jVGh1bmtzIChvcHRpb25hbCkgVGhlIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPihcclxuICAuLi5hc3luY1RodW5rczogQXN5bmNUaHVua3NcclxuKTogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgQWN0aW9uc0Zyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+XHJcbi8qKlxyXG4gKiBUZXN0cyBpZiBgYWN0aW9uYCBpcyBhIHRodW5rIGFjdGlvblxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uKFxyXG4gIGFjdGlvbjogYW55XHJcbik6IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua0FjdGlvblxyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPiguLi5hc3luY1RodW5rczogQXN5bmNUaHVua3MgfCBbYW55XSkge1xyXG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiAoYWN0aW9uOiBhbnkpID0+XHJcbiAgICAgIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgWydwZW5kaW5nJywgJ2Z1bGZpbGxlZCcsICdyZWplY3RlZCddKVxyXG4gIH1cclxuXHJcbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgIHJldHVybiBpc0FzeW5jVGh1bmtBY3Rpb24oKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBBY3Rpb25zRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgLy8gbm90ZTogdGhpcyB0eXBlIHdpbGwgYmUgY29ycmVjdCBiZWNhdXNlIHdlIGhhdmUgYXQgbGVhc3QgMSBhc3luY1RodW5rXHJcbiAgICBjb25zdCBtYXRjaGVyczogW01hdGNoZXI8YW55PiwgLi4uTWF0Y2hlcjxhbnk+W11dID0gW10gYXMgYW55XHJcblxyXG4gICAgZm9yIChjb25zdCBhc3luY1RodW5rIG9mIGFzeW5jVGh1bmtzKSB7XHJcbiAgICAgIG1hdGNoZXJzLnB1c2goXHJcbiAgICAgICAgYXN5bmNUaHVuay5wZW5kaW5nLFxyXG4gICAgICAgIGFzeW5jVGh1bmsucmVqZWN0ZWQsXHJcbiAgICAgICAgYXN5bmNUaHVuay5mdWxmaWxsZWRcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YoLi4ubWF0Y2hlcnMpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFib3J0U2lnbmFsV2l0aFJlYXNvbiB9IGZyb20gJy4vdHlwZXMnXHJcblxyXG5leHBvcnQgY29uc3QgYXNzZXJ0RnVuY3Rpb246IChcclxuICBmdW5jOiB1bmtub3duLFxyXG4gIGV4cGVjdGVkOiBzdHJpbmdcclxuKSA9PiBhc3NlcnRzIGZ1bmMgaXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biA9IChcclxuICBmdW5jOiB1bmtub3duLFxyXG4gIGV4cGVjdGVkOiBzdHJpbmdcclxuKSA9PiB7XHJcbiAgaWYgKHR5cGVvZiBmdW5jICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke2V4cGVjdGVkfSBpcyBub3QgYSBmdW5jdGlvbmApXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgbm9vcCA9ICgpID0+IHt9XHJcblxyXG5leHBvcnQgY29uc3QgY2F0Y2hSZWplY3Rpb24gPSA8VD4oXHJcbiAgcHJvbWlzZTogUHJvbWlzZTxUPixcclxuICBvbkVycm9yID0gbm9vcFxyXG4pOiBQcm9taXNlPFQ+ID0+IHtcclxuICBwcm9taXNlLmNhdGNoKG9uRXJyb3IpXHJcblxyXG4gIHJldHVybiBwcm9taXNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhZGRBYm9ydFNpZ25hbExpc3RlbmVyID0gKFxyXG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcclxuICBjYWxsYmFjazogKGV2dDogRXZlbnQpID0+IHZvaWRcclxuKSA9PiB7XHJcbiAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBjYWxsYmFjaywgeyBvbmNlOiB0cnVlIH0pXHJcbiAgcmV0dXJuICgpID0+IGFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgY2FsbGJhY2spXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDYWxscyBgYWJvcnRDb250cm9sbGVyLmFib3J0KHJlYXNvbilgIGFuZCBwYXRjaGVzIGBzaWduYWwucmVhc29uYC5cclxuICogaWYgaXQgaXMgbm90IHN1cHBvcnRlZC5cclxuICpcclxuICogQXQgdGhlIHRpbWUgb2Ygd3JpdGluZyBgc2lnbmFsLnJlYXNvbmAgaXMgYXZhaWxhYmxlIGluIEZGIGNocm9tZSwgZWRnZSBub2RlIDE3IGFuZCBkZW5vLlxyXG4gKiBAcGFyYW0gYWJvcnRDb250cm9sbGVyXHJcbiAqIEBwYXJhbSByZWFzb25cclxuICogQHJldHVybnNcclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQWJvcnRTaWduYWwvcmVhc29uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbiA9IDxUPihcclxuICBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcixcclxuICByZWFzb246IFRcclxuKTogdm9pZCA9PiB7XHJcbiAgdHlwZSBDb25zdW1lcjxUPiA9ICh2YWw6IFQpID0+IHZvaWRcclxuXHJcbiAgY29uc3Qgc2lnbmFsID0gYWJvcnRDb250cm9sbGVyLnNpZ25hbCBhcyBBYm9ydFNpZ25hbFdpdGhSZWFzb248VD5cclxuXHJcbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIC8vIFBhdGNoIGByZWFzb25gIGlmIG5lY2Vzc2FyeS5cclxuICAvLyAtIFdlIHVzZSBkZWZpbmVQcm9wZXJ0eSBoZXJlIGJlY2F1c2UgcmVhc29uIGlzIGEgZ2V0dGVyIG9mIGBBYm9ydFNpZ25hbC5fX3Byb3RvX19gLlxyXG4gIC8vIC0gV2UgbmVlZCB0byBwYXRjaCAncmVhc29uJyBiZWZvcmUgY2FsbGluZyBgLmFib3J0KClgIGJlY2F1c2UgbGlzdGVuZXJzIHRvIHRoZSAnYWJvcnQnXHJcbiAgLy8gZXZlbnQgYXJlIGFyZSBub3RpZmllZCBpbW1lZGlhdGVseS5cclxuICBpZiAoISgncmVhc29uJyBpbiBzaWduYWwpKSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2lnbmFsLCAncmVhc29uJywge1xyXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICB2YWx1ZTogcmVhc29uLFxyXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIDsoYWJvcnRDb250cm9sbGVyLmFib3J0IGFzIENvbnN1bWVyPHR5cGVvZiByZWFzb24+KShyZWFzb24pXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgU2VyaWFsaXplZEVycm9yIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCdcclxuXHJcbmNvbnN0IHRhc2sgPSAndGFzaydcclxuY29uc3QgbGlzdGVuZXIgPSAnbGlzdGVuZXInXHJcbmNvbnN0IGNvbXBsZXRlZCA9ICdjb21wbGV0ZWQnXHJcbmNvbnN0IGNhbmNlbGxlZCA9ICdjYW5jZWxsZWQnXHJcblxyXG4vKiBUYXNrQWJvcnRFcnJvciBlcnJvciBjb2RlcyAgKi9cclxuZXhwb3J0IGNvbnN0IHRhc2tDYW5jZWxsZWQgPSBgdGFzay0ke2NhbmNlbGxlZH1gIGFzIGNvbnN0XHJcbmV4cG9ydCBjb25zdCB0YXNrQ29tcGxldGVkID0gYHRhc2stJHtjb21wbGV0ZWR9YCBhcyBjb25zdFxyXG5leHBvcnQgY29uc3QgbGlzdGVuZXJDYW5jZWxsZWQgPSBgJHtsaXN0ZW5lcn0tJHtjYW5jZWxsZWR9YCBhcyBjb25zdFxyXG5leHBvcnQgY29uc3QgbGlzdGVuZXJDb21wbGV0ZWQgPSBgJHtsaXN0ZW5lcn0tJHtjb21wbGV0ZWR9YCBhcyBjb25zdFxyXG5cclxuZXhwb3J0IGNsYXNzIFRhc2tBYm9ydEVycm9yIGltcGxlbWVudHMgU2VyaWFsaXplZEVycm9yIHtcclxuICBuYW1lID0gJ1Rhc2tBYm9ydEVycm9yJ1xyXG4gIG1lc3NhZ2U6IHN0cmluZ1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMubWVzc2FnZSA9IGAke3Rhc2t9ICR7Y2FuY2VsbGVkfSAocmVhc29uOiAke2NvZGV9KWBcclxuICB9XHJcbn1cclxuIiwgImltcG9ydCB7IFRhc2tBYm9ydEVycm9yIH0gZnJvbSAnLi9leGNlcHRpb25zJ1xyXG5pbXBvcnQgdHlwZSB7IEFib3J0U2lnbmFsV2l0aFJlYXNvbiwgVGFza1Jlc3VsdCB9IGZyb20gJy4vdHlwZXMnXHJcbmltcG9ydCB7IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIsIGNhdGNoUmVqZWN0aW9uLCBub29wIH0gZnJvbSAnLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiBTeW5jaHJvbm91c2x5IHJhaXNlcyB7QGxpbmsgVGFza0Fib3J0RXJyb3J9IGlmIHRoZSB0YXNrIHRpZWQgdG8gdGhlIGlucHV0IGBzaWduYWxgIGhhcyBiZWVuIGNhbmNlbGxlZC5cclxuICogQHBhcmFtIHNpZ25hbFxyXG4gKiBAcGFyYW0gcmVhc29uXHJcbiAqIEBzZWUge1Rhc2tBYm9ydEVycm9yfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWN0aXZlID0gKHNpZ25hbDogQWJvcnRTaWduYWwpOiB2b2lkID0+IHtcclxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgIHRocm93IG5ldyBUYXNrQWJvcnRFcnJvcigoc2lnbmFsIGFzIEFib3J0U2lnbmFsV2l0aFJlYXNvbjxzdHJpbmc+KS5yZWFzb24pXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFjZSBiZXR3ZWVuIHRoZSBwcm9taXNlKHMpIGFuZCB0aGUgQWJvcnRTaWduYWxcclxuICogVGhpcyBhdm9pZHMgYFByb21pc2UucmFjZSgpYC1yZWxhdGVkIG1lbW9yeSBsZWFrczpcclxuICogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8xNzQ2OSNpc3N1ZWNvbW1lbnQtMzQ5Nzk0OTA5XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmFjZVdpdGhTaWduYWw8VD4oXHJcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbFdpdGhSZWFzb248c3RyaW5nPixcclxuICBwcm9taXNlOiBQcm9taXNlPFQ+XHJcbik6IFByb21pc2U8VD4ge1xyXG4gIGxldCBjbGVhbnVwID0gbm9vcFxyXG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICBjb25zdCBub3RpZnlSZWplY3Rpb24gPSAoKSA9PiByZWplY3QobmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pKVxyXG5cclxuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICBub3RpZnlSZWplY3Rpb24oKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhbnVwID0gYWRkQWJvcnRTaWduYWxMaXN0ZW5lcihzaWduYWwsIG5vdGlmeVJlamVjdGlvbilcclxuICAgIHByb21pc2UuZmluYWxseSgoKSA9PiBjbGVhbnVwKCkpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KVxyXG4gIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgLy8gYWZ0ZXIgdGhpcyBwb2ludCwgcmVwbGFjZSBgY2xlYW51cGAgd2l0aCBhIG5vb3AsIHNvIHRoZXJlIGlzIG5vIHJlZmVyZW5jZSB0byBgc2lnbmFsYCBhbnkgbW9yZVxyXG4gICAgY2xlYW51cCA9IG5vb3BcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICogUnVucyBhIHRhc2sgYW5kIHJldHVybnMgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHtAbGluayBUYXNrUmVzdWx0fS5cclxuICogU2Vjb25kIGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIGBjbGVhblVwYCBmdW5jdGlvbiB0aGF0IGFsd2F5cyBydW5zIGFmdGVyIHRhc2suXHJcbiAqXHJcbiAqICoqTm90ZToqKiBgcnVuVGFza2AgcnVucyB0aGUgZXhlY3V0b3IgaW4gdGhlIG5leHQgbWljcm90YXNrLlxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJ1blRhc2sgPSBhc3luYyA8VD4oXHJcbiAgdGFzazogKCkgPT4gUHJvbWlzZTxUPixcclxuICBjbGVhblVwPzogKCkgPT4gdm9pZFxyXG4pOiBQcm9taXNlPFRhc2tSZXN1bHQ8VD4+ID0+IHtcclxuICB0cnkge1xyXG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClcclxuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGFzaygpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzdGF0dXM6ICdvaycsXHJcbiAgICAgIHZhbHVlLFxyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHN0YXR1czogZXJyb3IgaW5zdGFuY2VvZiBUYXNrQWJvcnRFcnJvciA/ICdjYW5jZWxsZWQnIDogJ3JlamVjdGVkJyxcclxuICAgICAgZXJyb3IsXHJcbiAgICB9XHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGNsZWFuVXA/LigpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogR2l2ZW4gYW4gaW5wdXQgYEFib3J0U2lnbmFsYCBhbmQgYSBwcm9taXNlIHJldHVybnMgYW5vdGhlciBwcm9taXNlIHRoYXQgcmVzb2x2ZXNcclxuICogYXMgc29vbiB0aGUgaW5wdXQgcHJvbWlzZSBpcyBwcm92aWRlZCBvciByZWplY3RzIGFzIHNvb24gYXNcclxuICogYEFib3J0U2lnbmFsLmFib3J0YCBpcyBgdHJ1ZWAuXHJcbiAqIEBwYXJhbSBzaWduYWxcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVQYXVzZSA9IDxUPihzaWduYWw6IEFib3J0U2lnbmFsKSA9PiB7XHJcbiAgcmV0dXJuIChwcm9taXNlOiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICByZXR1cm4gY2F0Y2hSZWplY3Rpb24oXHJcbiAgICAgIHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgcHJvbWlzZSkudGhlbigob3V0cHV0KSA9PiB7XHJcbiAgICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKVxyXG4gICAgICAgIHJldHVybiBvdXRwdXRcclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHaXZlbiBhbiBpbnB1dCBgQWJvcnRTaWduYWxgIGFuZCBgdGltZW91dE1zYCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzXHJcbiAqIGFmdGVyIGB0aW1lb3V0TXNgIG9yIHJlamVjdHMgYXMgc29vbiBhcyBgQWJvcnRTaWduYWwuYWJvcnRgIGlzIGB0cnVlYC5cclxuICogQHBhcmFtIHNpZ25hbFxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZURlbGF5ID0gKHNpZ25hbDogQWJvcnRTaWduYWwpID0+IHtcclxuICBjb25zdCBwYXVzZSA9IGNyZWF0ZVBhdXNlPHZvaWQ+KHNpZ25hbClcclxuICByZXR1cm4gKHRpbWVvdXRNczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICByZXR1cm4gcGF1c2UobmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKSkpXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IERpc3BhdGNoLCBBbnlBY3Rpb24sIE1pZGRsZXdhcmVBUEkgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUgeyBUaHVua0Rpc3BhdGNoIH0gZnJvbSAncmVkdXgtdGh1bmsnXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgaXNBY3Rpb24gfSBmcm9tICcuLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJy4uL25hbm9pZCdcclxuXHJcbmltcG9ydCB0eXBlIHtcclxuICBMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgTGlzdGVuZXJNaWRkbGV3YXJlSW5zdGFuY2UsXHJcbiAgQWRkTGlzdGVuZXJPdmVybG9hZHMsXHJcbiAgQW55TGlzdGVuZXJQcmVkaWNhdGUsXHJcbiAgQ3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlT3B0aW9ucyxcclxuICBUeXBlZEFkZExpc3RlbmVyLFxyXG4gIFR5cGVkQ3JlYXRlTGlzdGVuZXJFbnRyeSxcclxuICBGYWxsYmFja0FkZExpc3RlbmVyT3B0aW9ucyxcclxuICBMaXN0ZW5lckVudHJ5LFxyXG4gIExpc3RlbmVyRXJyb3JIYW5kbGVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXIsXHJcbiAgVGFrZVBhdHRlcm4sXHJcbiAgTGlzdGVuZXJFcnJvckluZm8sXHJcbiAgRm9ya2VkVGFza0V4ZWN1dG9yLFxyXG4gIEZvcmtlZFRhc2ssXHJcbiAgVHlwZWRSZW1vdmVMaXN0ZW5lcixcclxuICBUYXNrUmVzdWx0LFxyXG4gIEFib3J0U2lnbmFsV2l0aFJlYXNvbixcclxuICBVbnN1YnNjcmliZUxpc3RlbmVyT3B0aW9ucyxcclxuICBGb3JrT3B0aW9ucyxcclxufSBmcm9tICcuL3R5cGVzJ1xyXG5pbXBvcnQge1xyXG4gIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24sXHJcbiAgYWRkQWJvcnRTaWduYWxMaXN0ZW5lcixcclxuICBhc3NlcnRGdW5jdGlvbixcclxuICBjYXRjaFJlamVjdGlvbixcclxufSBmcm9tICcuL3V0aWxzJ1xyXG5pbXBvcnQge1xyXG4gIGxpc3RlbmVyQ2FuY2VsbGVkLFxyXG4gIGxpc3RlbmVyQ29tcGxldGVkLFxyXG4gIFRhc2tBYm9ydEVycm9yLFxyXG4gIHRhc2tDYW5jZWxsZWQsXHJcbiAgdGFza0NvbXBsZXRlZCxcclxufSBmcm9tICcuL2V4Y2VwdGlvbnMnXHJcbmltcG9ydCB7XHJcbiAgcnVuVGFzayxcclxuICB2YWxpZGF0ZUFjdGl2ZSxcclxuICBjcmVhdGVQYXVzZSxcclxuICBjcmVhdGVEZWxheSxcclxuICByYWNlV2l0aFNpZ25hbCxcclxufSBmcm9tICcuL3Rhc2snXHJcbmV4cG9ydCB7IFRhc2tBYm9ydEVycm9yIH0gZnJvbSAnLi9leGNlcHRpb25zJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgTGlzdGVuZXJFZmZlY3QsXHJcbiAgTGlzdGVuZXJNaWRkbGV3YXJlLFxyXG4gIExpc3RlbmVyRWZmZWN0QVBJLFxyXG4gIExpc3RlbmVyTWlkZGxld2FyZUluc3RhbmNlLFxyXG4gIENyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZU9wdGlvbnMsXHJcbiAgTGlzdGVuZXJFcnJvckhhbmRsZXIsXHJcbiAgVHlwZWRTdGFydExpc3RlbmluZyxcclxuICBUeXBlZEFkZExpc3RlbmVyLFxyXG4gIFR5cGVkU3RvcExpc3RlbmluZyxcclxuICBUeXBlZFJlbW92ZUxpc3RlbmVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXIsXHJcbiAgVW5zdWJzY3JpYmVMaXN0ZW5lck9wdGlvbnMsXHJcbiAgRm9ya2VkVGFza0V4ZWN1dG9yLFxyXG4gIEZvcmtlZFRhc2ssXHJcbiAgRm9ya2VkVGFza0FQSSxcclxuICBBc3luY1Rhc2tFeGVjdXRvcixcclxuICBTeW5jVGFza0V4ZWN1dG9yLFxyXG4gIFRhc2tDYW5jZWxsZWQsXHJcbiAgVGFza1JlamVjdGVkLFxyXG4gIFRhc2tSZXNvbHZlZCxcclxuICBUYXNrUmVzdWx0LFxyXG59IGZyb20gJy4vdHlwZXMnXHJcblxyXG4vL092ZXJseS1hZ2dyZXNzaXZlIGJ5dGUtc2hhdmluZ1xyXG5jb25zdCB7IGFzc2lnbiB9ID0gT2JqZWN0XHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmNvbnN0IElOVEVSTkFMX05JTF9UT0tFTiA9IHt9IGFzIGNvbnN0XHJcblxyXG5jb25zdCBhbG0gPSAnbGlzdGVuZXJNaWRkbGV3YXJlJyBhcyBjb25zdFxyXG5cclxuY29uc3QgY3JlYXRlRm9yayA9IChcclxuICBwYXJlbnRBYm9ydFNpZ25hbDogQWJvcnRTaWduYWxXaXRoUmVhc29uPHVua25vd24+LFxyXG4gIHBhcmVudEJsb2NraW5nUHJvbWlzZXM6IFByb21pc2U8YW55PltdXHJcbikgPT4ge1xyXG4gIGNvbnN0IGxpbmtDb250cm9sbGVycyA9IChjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIpID0+XHJcbiAgICBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHBhcmVudEFib3J0U2lnbmFsLCAoKSA9PlxyXG4gICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIHBhcmVudEFib3J0U2lnbmFsLnJlYXNvbilcclxuICAgIClcclxuXHJcbiAgcmV0dXJuIDxUPihcclxuICAgIHRhc2tFeGVjdXRvcjogRm9ya2VkVGFza0V4ZWN1dG9yPFQ+LFxyXG4gICAgb3B0cz86IEZvcmtPcHRpb25zXHJcbiAgKTogRm9ya2VkVGFzazxUPiA9PiB7XHJcbiAgICBhc3NlcnRGdW5jdGlvbih0YXNrRXhlY3V0b3IsICd0YXNrRXhlY3V0b3InKVxyXG4gICAgY29uc3QgY2hpbGRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcclxuXHJcbiAgICBsaW5rQ29udHJvbGxlcnMoY2hpbGRBYm9ydENvbnRyb2xsZXIpXHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gcnVuVGFzazxUPihcclxuICAgICAgYXN5bmMgKCk6IFByb21pc2U8VD4gPT4ge1xyXG4gICAgICAgIHZhbGlkYXRlQWN0aXZlKHBhcmVudEFib3J0U2lnbmFsKVxyXG4gICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbClcclxuICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgdGFza0V4ZWN1dG9yKHtcclxuICAgICAgICAgIHBhdXNlOiBjcmVhdGVQYXVzZShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICBzaWduYWw6IGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICB9KSkgYXMgVFxyXG4gICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbClcclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgIH0sXHJcbiAgICAgICgpID0+IGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDb21wbGV0ZWQpXHJcbiAgICApXHJcblxyXG4gICAgaWYgKG9wdHM/LmF1dG9Kb2luKSB7XHJcbiAgICAgIHBhcmVudEJsb2NraW5nUHJvbWlzZXMucHVzaChyZXN1bHQpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0OiBjcmVhdGVQYXVzZTxUYXNrUmVzdWx0PFQ+PihwYXJlbnRBYm9ydFNpZ25hbCkocmVzdWx0KSxcclxuICAgICAgY2FuY2VsKCkge1xyXG4gICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDYW5jZWxsZWQpXHJcbiAgICAgIH0sXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjcmVhdGVUYWtlUGF0dGVybiA9IDxTPihcclxuICBzdGFydExpc3RlbmluZzogQWRkTGlzdGVuZXJPdmVybG9hZHM8XHJcbiAgICBVbnN1YnNjcmliZUxpc3RlbmVyLFxyXG4gICAgUyxcclxuICAgIERpc3BhdGNoPEFueUFjdGlvbj5cclxuICA+LFxyXG4gIHNpZ25hbDogQWJvcnRTaWduYWxcclxuKTogVGFrZVBhdHRlcm48Uz4gPT4ge1xyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIExpc3RlbmVyUHJlZGljYXRlIGFuZCBhbiBvcHRpb25hbCB0aW1lb3V0LFxyXG4gICAqIGFuZCByZXNvbHZlcyB3aGVuIGVpdGhlciB0aGUgcHJlZGljYXRlIHJldHVybnMgYHRydWVgIGJhc2VkIG9uIGFuIGFjdGlvblxyXG4gICAqIHN0YXRlIGNvbWJpbmF0aW9uIG9yIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcy5cclxuICAgKiBJZiB0aGUgcGFyZW50IGxpc3RlbmVyIGlzIGNhbmNlbGVkIHdoaWxlIHdhaXRpbmcsIHRoaXMgd2lsbCB0aHJvdyBhXHJcbiAgICogVGFza0Fib3J0RXJyb3IuXHJcbiAgICovXHJcbiAgY29uc3QgdGFrZSA9IGFzeW5jIDxQIGV4dGVuZHMgQW55TGlzdGVuZXJQcmVkaWNhdGU8Uz4+KFxyXG4gICAgcHJlZGljYXRlOiBQLFxyXG4gICAgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkXHJcbiAgKSA9PiB7XHJcbiAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpXHJcblxyXG4gICAgLy8gUGxhY2Vob2xkZXIgdW5zdWJzY3JpYmUgZnVuY3Rpb24gdW50aWwgdGhlIGxpc3RlbmVyIGlzIGFkZGVkXHJcbiAgICBsZXQgdW5zdWJzY3JpYmU6IFVuc3Vic2NyaWJlTGlzdGVuZXIgPSAoKSA9PiB7fVxyXG5cclxuICAgIGNvbnN0IHR1cGxlUHJvbWlzZSA9IG5ldyBQcm9taXNlPFtBbnlBY3Rpb24sIFMsIFNdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIEluc2lkZSB0aGUgUHJvbWlzZSwgd2Ugc3luY2hyb25vdXNseSBhZGQgdGhlIGxpc3RlbmVyLlxyXG4gICAgICBsZXQgc3RvcExpc3RlbmluZyA9IHN0YXJ0TGlzdGVuaW5nKHtcclxuICAgICAgICBwcmVkaWNhdGU6IHByZWRpY2F0ZSBhcyBhbnksXHJcbiAgICAgICAgZWZmZWN0OiAoYWN0aW9uLCBsaXN0ZW5lckFwaSk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgLy8gT25lLXNob3QgbGlzdGVuZXIgdGhhdCBjbGVhbnMgdXAgYXMgc29vbiBhcyB0aGUgcHJlZGljYXRlIHBhc3Nlc1xyXG4gICAgICAgICAgbGlzdGVuZXJBcGkudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyB0aGUgcHJlZGljYXRlIHNhd1xyXG4gICAgICAgICAgcmVzb2x2ZShbXHJcbiAgICAgICAgICAgIGFjdGlvbixcclxuICAgICAgICAgICAgbGlzdGVuZXJBcGkuZ2V0U3RhdGUoKSxcclxuICAgICAgICAgICAgbGlzdGVuZXJBcGkuZ2V0T3JpZ2luYWxTdGF0ZSgpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICB1bnN1YnNjcmliZSA9ICgpID0+IHtcclxuICAgICAgICBzdG9wTGlzdGVuaW5nKClcclxuICAgICAgICByZWplY3QoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IHByb21pc2VzOiAoUHJvbWlzZTxudWxsPiB8IFByb21pc2U8W0FueUFjdGlvbiwgUywgU10+KVtdID0gW1xyXG4gICAgICB0dXBsZVByb21pc2UsXHJcbiAgICBdXHJcblxyXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xyXG4gICAgICBwcm9taXNlcy5wdXNoKFxyXG4gICAgICAgIG5ldyBQcm9taXNlPG51bGw+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQsIG51bGwpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmFjZVdpdGhTaWduYWwoc2lnbmFsLCBQcm9taXNlLnJhY2UocHJvbWlzZXMpKVxyXG5cclxuICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKVxyXG4gICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAvLyBBbHdheXMgY2xlYW4gdXAgdGhlIGxpc3RlbmVyXHJcbiAgICAgIHVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiAoKHByZWRpY2F0ZTogQW55TGlzdGVuZXJQcmVkaWNhdGU8Uz4sIHRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZCkgPT5cclxuICAgIGNhdGNoUmVqZWN0aW9uKHRha2UocHJlZGljYXRlLCB0aW1lb3V0KSkpIGFzIFRha2VQYXR0ZXJuPFM+XHJcbn1cclxuXHJcbmNvbnN0IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20gPSAob3B0aW9uczogRmFsbGJhY2tBZGRMaXN0ZW5lck9wdGlvbnMpID0+IHtcclxuICBsZXQgeyB0eXBlLCBhY3Rpb25DcmVhdG9yLCBtYXRjaGVyLCBwcmVkaWNhdGUsIGVmZmVjdCB9ID0gb3B0aW9uc1xyXG5cclxuICBpZiAodHlwZSkge1xyXG4gICAgcHJlZGljYXRlID0gY3JlYXRlQWN0aW9uKHR5cGUpLm1hdGNoXHJcbiAgfSBlbHNlIGlmIChhY3Rpb25DcmVhdG9yKSB7XHJcbiAgICB0eXBlID0gYWN0aW9uQ3JlYXRvciEudHlwZVxyXG4gICAgcHJlZGljYXRlID0gYWN0aW9uQ3JlYXRvci5tYXRjaFxyXG4gIH0gZWxzZSBpZiAobWF0Y2hlcikge1xyXG4gICAgcHJlZGljYXRlID0gbWF0Y2hlclxyXG4gIH0gZWxzZSBpZiAocHJlZGljYXRlKSB7XHJcbiAgICAvLyBwYXNzXHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgJ0NyZWF0aW5nIG9yIHJlbW92aW5nIGEgbGlzdGVuZXIgcmVxdWlyZXMgb25lIG9mIHRoZSBrbm93biBmaWVsZHMgZm9yIG1hdGNoaW5nIGFuIGFjdGlvbidcclxuICAgIClcclxuICB9XHJcblxyXG4gIGFzc2VydEZ1bmN0aW9uKGVmZmVjdCwgJ29wdGlvbnMubGlzdGVuZXInKVxyXG5cclxuICByZXR1cm4geyBwcmVkaWNhdGUsIHR5cGUsIGVmZmVjdCB9XHJcbn1cclxuXHJcbi8qKiBBY2NlcHRzIHRoZSBwb3NzaWJsZSBvcHRpb25zIGZvciBjcmVhdGluZyBhIGxpc3RlbmVyLCBhbmQgcmV0dXJucyBhIGZvcm1hdHRlZCBsaXN0ZW5lciBlbnRyeSAqL1xyXG5leHBvcnQgY29uc3QgY3JlYXRlTGlzdGVuZXJFbnRyeTogVHlwZWRDcmVhdGVMaXN0ZW5lckVudHJ5PHVua25vd24+ID0gKFxyXG4gIG9wdGlvbnM6IEZhbGxiYWNrQWRkTGlzdGVuZXJPcHRpb25zXHJcbikgPT4ge1xyXG4gIGNvbnN0IHsgdHlwZSwgcHJlZGljYXRlLCBlZmZlY3QgfSA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucylcclxuXHJcbiAgY29uc3QgaWQgPSBuYW5vaWQoKVxyXG4gIGNvbnN0IGVudHJ5OiBMaXN0ZW5lckVudHJ5PHVua25vd24+ID0ge1xyXG4gICAgaWQsXHJcbiAgICBlZmZlY3QsXHJcbiAgICB0eXBlLFxyXG4gICAgcHJlZGljYXRlLFxyXG4gICAgcGVuZGluZzogbmV3IFNldDxBYm9ydENvbnRyb2xsZXI+KCksXHJcbiAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3Vic2NyaWJlIG5vdCBpbml0aWFsaXplZCcpXHJcbiAgICB9LFxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGVudHJ5XHJcbn1cclxuXHJcbmNvbnN0IGNhbmNlbEFjdGl2ZUxpc3RlbmVycyA9IChcclxuICBlbnRyeTogTGlzdGVuZXJFbnRyeTx1bmtub3duLCBEaXNwYXRjaDxBbnlBY3Rpb24+PlxyXG4pID0+IHtcclxuICBlbnRyeS5wZW5kaW5nLmZvckVhY2goKGNvbnRyb2xsZXIpID0+IHtcclxuICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUgPSAoXHJcbiAgbGlzdGVuZXJNYXA6IE1hcDxzdHJpbmcsIExpc3RlbmVyRW50cnk+XHJcbikgPT4ge1xyXG4gIHJldHVybiAoKSA9PiB7XHJcbiAgICBsaXN0ZW5lck1hcC5mb3JFYWNoKGNhbmNlbEFjdGl2ZUxpc3RlbmVycylcclxuXHJcbiAgICBsaXN0ZW5lck1hcC5jbGVhcigpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogU2FmZWx5IHJlcG9ydHMgZXJyb3JzIHRvIHRoZSBgZXJyb3JIYW5kbGVyYCBwcm92aWRlZC5cclxuICogRXJyb3JzIHRoYXQgb2NjdXIgaW5zaWRlIGBlcnJvckhhbmRsZXJgIGFyZSBub3RpZmllZCBpbiBhIG5ldyB0YXNrLlxyXG4gKiBJbnNwaXJlZCBieSBbcnhqcyByZXBvcnRVbmhhbmRsZWRFcnJvcl0oaHR0cHM6Ly9naXRodWIuY29tL1JlYWN0aXZlWC9yeGpzL2Jsb2IvNmZhZmNmNTNkYzllNTU3NDM5YjI1ZGViYWVhZGZkMjI0YjI0NWE2Ni9zcmMvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci50cylcclxuICogQHBhcmFtIGVycm9ySGFuZGxlclxyXG4gKiBAcGFyYW0gZXJyb3JUb05vdGlmeVxyXG4gKi9cclxuY29uc3Qgc2FmZWx5Tm90aWZ5RXJyb3IgPSAoXHJcbiAgZXJyb3JIYW5kbGVyOiBMaXN0ZW5lckVycm9ySGFuZGxlcixcclxuICBlcnJvclRvTm90aWZ5OiB1bmtub3duLFxyXG4gIGVycm9ySW5mbzogTGlzdGVuZXJFcnJvckluZm9cclxuKTogdm9pZCA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGVycm9ySGFuZGxlcihlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pXHJcbiAgfSBjYXRjaCAoZXJyb3JIYW5kbGVyRXJyb3IpIHtcclxuICAgIC8vIFdlIGNhbm5vdCBsZXQgYW4gZXJyb3IgcmFpc2VkIGhlcmUgYmxvY2sgdGhlIGxpc3RlbmVyIHF1ZXVlLlxyXG4gICAgLy8gVGhlIGVycm9yIHJhaXNlZCBoZXJlIHdpbGwgYmUgcGlja2VkIHVwIGJ5IGB3aW5kb3cub25lcnJvcmAsIGBwcm9jZXNzLm9uKCdlcnJvcicpYCBldGMuLi5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aHJvdyBlcnJvckhhbmRsZXJFcnJvclxyXG4gICAgfSwgMClcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYWRkTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oXHJcbiAgYCR7YWxtfS9hZGRgXHJcbikgYXMgVHlwZWRBZGRMaXN0ZW5lcjx1bmtub3duPlxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjbGVhckFsbExpc3RlbmVycyA9IGNyZWF0ZUFjdGlvbihgJHthbG19L3JlbW92ZUFsbGApXHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJlbW92ZUxpc3RlbmVyID0gY3JlYXRlQWN0aW9uKFxyXG4gIGAke2FsbX0vcmVtb3ZlYFxyXG4pIGFzIFR5cGVkUmVtb3ZlTGlzdGVuZXI8dW5rbm93bj5cclxuXHJcbmNvbnN0IGRlZmF1bHRFcnJvckhhbmRsZXI6IExpc3RlbmVyRXJyb3JIYW5kbGVyID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xyXG4gIGNvbnNvbGUuZXJyb3IoYCR7YWxtfS9lcnJvcmAsIC4uLmFyZ3MpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlPFxyXG4gIFMgPSB1bmtub3duLFxyXG4gIEQgZXh0ZW5kcyBEaXNwYXRjaDxBbnlBY3Rpb24+ID0gVGh1bmtEaXNwYXRjaDxTLCB1bmtub3duLCBBbnlBY3Rpb24+LFxyXG4gIEV4dHJhQXJndW1lbnQgPSB1bmtub3duXHJcbj4obWlkZGxld2FyZU9wdGlvbnM6IENyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZU9wdGlvbnM8RXh0cmFBcmd1bWVudD4gPSB7fSkge1xyXG4gIGNvbnN0IGxpc3RlbmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIExpc3RlbmVyRW50cnk+KClcclxuICBjb25zdCB7IGV4dHJhLCBvbkVycm9yID0gZGVmYXVsdEVycm9ySGFuZGxlciB9ID0gbWlkZGxld2FyZU9wdGlvbnNcclxuXHJcbiAgYXNzZXJ0RnVuY3Rpb24ob25FcnJvciwgJ29uRXJyb3InKVxyXG5cclxuICBjb25zdCBpbnNlcnRFbnRyeSA9IChlbnRyeTogTGlzdGVuZXJFbnRyeSkgPT4ge1xyXG4gICAgZW50cnkudW5zdWJzY3JpYmUgPSAoKSA9PiBsaXN0ZW5lck1hcC5kZWxldGUoZW50cnkhLmlkKVxyXG5cclxuICAgIGxpc3RlbmVyTWFwLnNldChlbnRyeS5pZCwgZW50cnkpXHJcbiAgICByZXR1cm4gKGNhbmNlbE9wdGlvbnM/OiBVbnN1YnNjcmliZUxpc3RlbmVyT3B0aW9ucykgPT4ge1xyXG4gICAgICBlbnRyeS51bnN1YnNjcmliZSgpXHJcbiAgICAgIGlmIChjYW5jZWxPcHRpb25zPy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMoZW50cnkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IGZpbmRMaXN0ZW5lckVudHJ5ID0gKFxyXG4gICAgY29tcGFyYXRvcjogKGVudHJ5OiBMaXN0ZW5lckVudHJ5KSA9PiBib29sZWFuXHJcbiAgKTogTGlzdGVuZXJFbnRyeSB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpKSB7XHJcbiAgICAgIGlmIChjb21wYXJhdG9yKGVudHJ5KSkge1xyXG4gICAgICAgIHJldHVybiBlbnRyeVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcbiAgY29uc3Qgc3RhcnRMaXN0ZW5pbmcgPSAob3B0aW9uczogRmFsbGJhY2tBZGRMaXN0ZW5lck9wdGlvbnMpID0+IHtcclxuICAgIGxldCBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KFxyXG4gICAgICAoZXhpc3RpbmdFbnRyeSkgPT4gZXhpc3RpbmdFbnRyeS5lZmZlY3QgPT09IG9wdGlvbnMuZWZmZWN0XHJcbiAgICApXHJcblxyXG4gICAgaWYgKCFlbnRyeSkge1xyXG4gICAgICBlbnRyeSA9IGNyZWF0ZUxpc3RlbmVyRW50cnkob3B0aW9ucyBhcyBhbnkpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGluc2VydEVudHJ5KGVudHJ5KVxyXG4gIH1cclxuXHJcbiAgY29uc3Qgc3RvcExpc3RlbmluZyA9IChcclxuICAgIG9wdGlvbnM6IEZhbGxiYWNrQWRkTGlzdGVuZXJPcHRpb25zICYgVW5zdWJzY3JpYmVMaXN0ZW5lck9wdGlvbnNcclxuICApOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IHsgdHlwZSwgZWZmZWN0LCBwcmVkaWNhdGUgfSA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucylcclxuXHJcbiAgICBjb25zdCBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KChlbnRyeSkgPT4ge1xyXG4gICAgICBjb25zdCBtYXRjaFByZWRpY2F0ZU9yVHlwZSA9XHJcbiAgICAgICAgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICA/IGVudHJ5LnR5cGUgPT09IHR5cGVcclxuICAgICAgICAgIDogZW50cnkucHJlZGljYXRlID09PSBwcmVkaWNhdGVcclxuXHJcbiAgICAgIHJldHVybiBtYXRjaFByZWRpY2F0ZU9yVHlwZSAmJiBlbnRyeS5lZmZlY3QgPT09IGVmZmVjdFxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAoZW50cnkpIHtcclxuICAgICAgZW50cnkudW5zdWJzY3JpYmUoKVxyXG4gICAgICBpZiAob3B0aW9ucy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMoZW50cnkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gISFlbnRyeVxyXG4gIH1cclxuXHJcbiAgY29uc3Qgbm90aWZ5TGlzdGVuZXIgPSBhc3luYyAoXHJcbiAgICBlbnRyeTogTGlzdGVuZXJFbnRyeTx1bmtub3duLCBEaXNwYXRjaDxBbnlBY3Rpb24+PixcclxuICAgIGFjdGlvbjogQW55QWN0aW9uLFxyXG4gICAgYXBpOiBNaWRkbGV3YXJlQVBJLFxyXG4gICAgZ2V0T3JpZ2luYWxTdGF0ZTogKCkgPT4gU1xyXG4gICkgPT4ge1xyXG4gICAgY29uc3QgaW50ZXJuYWxUYXNrQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxyXG4gICAgY29uc3QgdGFrZSA9IGNyZWF0ZVRha2VQYXR0ZXJuKFxyXG4gICAgICBzdGFydExpc3RlbmluZyxcclxuICAgICAgaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWxcclxuICAgIClcclxuICAgIGNvbnN0IGF1dG9Kb2luUHJvbWlzZXM6IFByb21pc2U8YW55PltdID0gW11cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBlbnRyeS5wZW5kaW5nLmFkZChpbnRlcm5hbFRhc2tDb250cm9sbGVyKVxyXG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoXHJcbiAgICAgICAgZW50cnkuZWZmZWN0KFxyXG4gICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgLy8gVXNlIGFzc2lnbigpIHJhdGhlciB0aGFuIC4uLiB0byBhdm9pZCBleHRyYSBoZWxwZXIgZnVuY3Rpb25zIGFkZGVkIHRvIGJ1bmRsZVxyXG4gICAgICAgICAgYXNzaWduKHt9LCBhcGksIHtcclxuICAgICAgICAgICAgZ2V0T3JpZ2luYWxTdGF0ZSxcclxuICAgICAgICAgICAgY29uZGl0aW9uOiAoXHJcbiAgICAgICAgICAgICAgcHJlZGljYXRlOiBBbnlMaXN0ZW5lclByZWRpY2F0ZTxhbnk+LFxyXG4gICAgICAgICAgICAgIHRpbWVvdXQ/OiBudW1iZXJcclxuICAgICAgICAgICAgKSA9PiB0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkudGhlbihCb29sZWFuKSxcclxuICAgICAgICAgICAgdGFrZSxcclxuICAgICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlPGFueT4oaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICBleHRyYSxcclxuICAgICAgICAgICAgc2lnbmFsOiBpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICAgICAgZm9yazogY3JlYXRlRm9yayhpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCwgYXV0b0pvaW5Qcm9taXNlcyksXHJcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlOiBlbnRyeS51bnN1YnNjcmliZSxcclxuICAgICAgICAgICAgc3Vic2NyaWJlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgZW50cnkucGVuZGluZy5mb3JFYWNoKChjb250cm9sbGVyLCBfLCBzZXQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyICE9PSBpbnRlcm5hbFRhc2tDb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpXHJcbiAgICAgICAgICAgICAgICAgIHNldC5kZWxldGUoY29udHJvbGxlcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgIH0gY2F0Y2ggKGxpc3RlbmVyRXJyb3IpIHtcclxuICAgICAgaWYgKCEobGlzdGVuZXJFcnJvciBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yKSkge1xyXG4gICAgICAgIHNhZmVseU5vdGlmeUVycm9yKG9uRXJyb3IsIGxpc3RlbmVyRXJyb3IsIHtcclxuICAgICAgICAgIHJhaXNlZEJ5OiAnZWZmZWN0JyxcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoYXV0b0pvaW5Qcm9taXNlcylcclxuXHJcbiAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oaW50ZXJuYWxUYXNrQ29udHJvbGxlciwgbGlzdGVuZXJDb21wbGV0ZWQpIC8vIE5vdGlmeSB0aGF0IHRoZSB0YXNrIGhhcyBjb21wbGV0ZWRcclxuICAgICAgZW50cnkucGVuZGluZy5kZWxldGUoaW50ZXJuYWxUYXNrQ29udHJvbGxlcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUobGlzdGVuZXJNYXApXHJcblxyXG4gIGNvbnN0IG1pZGRsZXdhcmU6IExpc3RlbmVyTWlkZGxld2FyZTxTLCBELCBFeHRyYUFyZ3VtZW50PiA9XHJcbiAgICAoYXBpKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xyXG4gICAgICBpZiAoIWlzQWN0aW9uKGFjdGlvbikpIHtcclxuICAgICAgICAvLyB3ZSBvbmx5IHdhbnQgdG8gbm90aWZ5IGxpc3RlbmVycyBmb3IgYWN0aW9uIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhZGRMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0YXJ0TGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2xlYXJBbGxMaXN0ZW5lcnMubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgIGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlKClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlbW92ZUxpc3RlbmVyLm1hdGNoKGFjdGlvbikpIHtcclxuICAgICAgICByZXR1cm4gc3RvcExpc3RlbmluZyhhY3Rpb24ucGF5bG9hZClcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTmVlZCB0byBnZXQgdGhpcyBzdGF0ZSBfYmVmb3JlXyB0aGUgcmVkdWNlciBwcm9jZXNzZXMgdGhlIGFjdGlvblxyXG4gICAgICBsZXQgb3JpZ2luYWxTdGF0ZTogUyB8IHR5cGVvZiBJTlRFUk5BTF9OSUxfVE9LRU4gPSBhcGkuZ2V0U3RhdGUoKVxyXG5cclxuICAgICAgLy8gYGdldE9yaWdpbmFsU3RhdGVgIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5LlxyXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWR1eGpzL3JlZHV4LXRvb2xraXQvZGlzY3Vzc2lvbnMvMTY0OCNkaXNjdXNzaW9uY29tbWVudC0xOTMyODIwXHJcbiAgICAgIGNvbnN0IGdldE9yaWdpbmFsU3RhdGUgPSAoKTogUyA9PiB7XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsU3RhdGUgPT09IElOVEVSTkFMX05JTF9UT0tFTikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgJHthbG19OiBnZXRPcmlnaW5hbFN0YXRlIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5YFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGUgYXMgU1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgcmVzdWx0OiB1bmtub3duXHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIEFjdHVhbGx5IGZvcndhcmQgdGhlIGFjdGlvbiB0byB0aGUgcmVkdWNlciBiZWZvcmUgd2UgaGFuZGxlIGxpc3RlbmVyc1xyXG4gICAgICAgIHJlc3VsdCA9IG5leHQoYWN0aW9uKVxyXG5cclxuICAgICAgICBpZiAobGlzdGVuZXJNYXAuc2l6ZSA+IDApIHtcclxuICAgICAgICAgIGxldCBjdXJyZW50U3RhdGUgPSBhcGkuZ2V0U3RhdGUoKVxyXG4gICAgICAgICAgLy8gV29yayBhcm91bmQgRVNCdWlsZCtUUyB0cmFuc3BpbGF0aW9uIGlzc3VlXHJcbiAgICAgICAgICBjb25zdCBsaXN0ZW5lckVudHJpZXMgPSBBcnJheS5mcm9tKGxpc3RlbmVyTWFwLnZhbHVlcygpKVxyXG4gICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgbGlzdGVuZXJFbnRyaWVzKSB7XHJcbiAgICAgICAgICAgIGxldCBydW5MaXN0ZW5lciA9IGZhbHNlXHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIHJ1bkxpc3RlbmVyID0gZW50cnkucHJlZGljYXRlKGFjdGlvbiwgY3VycmVudFN0YXRlLCBvcmlnaW5hbFN0YXRlKVxyXG4gICAgICAgICAgICB9IGNhdGNoIChwcmVkaWNhdGVFcnJvcikge1xyXG4gICAgICAgICAgICAgIHJ1bkxpc3RlbmVyID0gZmFsc2VcclxuXHJcbiAgICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgcHJlZGljYXRlRXJyb3IsIHtcclxuICAgICAgICAgICAgICAgIHJhaXNlZEJ5OiAncHJlZGljYXRlJyxcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXJ1bkxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIoZW50cnksIGFjdGlvbiwgYXBpLCBnZXRPcmlnaW5hbFN0YXRlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAvLyBSZW1vdmUgYG9yaWdpbmFsU3RhdGVgIHN0b3JlIGZyb20gdGhpcyBzY29wZS5cclxuICAgICAgICBvcmlnaW5hbFN0YXRlID0gSU5URVJOQUxfTklMX1RPS0VOXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIG1pZGRsZXdhcmUsXHJcbiAgICBzdGFydExpc3RlbmluZyxcclxuICAgIHN0b3BMaXN0ZW5pbmcsXHJcbiAgICBjbGVhckxpc3RlbmVyczogY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgfSBhcyBMaXN0ZW5lck1pZGRsZXdhcmVJbnN0YW5jZTxTLCBELCBFeHRyYUFyZ3VtZW50PlxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IFN0b3JlRW5oYW5jZXIgfSBmcm9tICdyZWR1eCdcclxuXHJcbmV4cG9ydCBjb25zdCBTSE9VTERfQVVUT0JBVENIID0gJ1JUS19hdXRvQmF0Y2gnXHJcblxyXG5leHBvcnQgY29uc3QgcHJlcGFyZUF1dG9CYXRjaGVkID1cclxuICA8VD4oKSA9PlxyXG4gIChwYXlsb2FkOiBUKTogeyBwYXlsb2FkOiBUOyBtZXRhOiB1bmtub3duIH0gPT4gKHtcclxuICAgIHBheWxvYWQsXHJcbiAgICBtZXRhOiB7IFtTSE9VTERfQVVUT0JBVENIXTogdHJ1ZSB9LFxyXG4gIH0pXHJcblxyXG4vLyBUT0RPIFJlbW92ZSB0aGlzIGluIDIuMFxyXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL3F1ZXVlLW1pY3JvdGFza1xyXG5sZXQgcHJvbWlzZTogUHJvbWlzZTxhbnk+XHJcbmNvbnN0IHF1ZXVlTWljcm90YXNrU2hpbSA9XHJcbiAgdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nXHJcbiAgICA/IHF1ZXVlTWljcm90YXNrLmJpbmQoXHJcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcclxuICAgICAgICAgID8gd2luZG93XHJcbiAgICAgICAgICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgICA/IGdsb2JhbFxyXG4gICAgICAgICAgOiBnbG9iYWxUaGlzXHJcbiAgICAgIClcclxuICAgIDogLy8gcmV1c2UgcmVzb2x2ZWQgcHJvbWlzZSwgYW5kIGFsbG9jYXRlIGl0IGxhemlseVxyXG4gICAgICAoY2I6ICgpID0+IHZvaWQpID0+XHJcbiAgICAgICAgKHByb21pc2UgfHwgKHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKSkpLnRoZW4oY2IpLmNhdGNoKChlcnI6IGFueSkgPT5cclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICAgIH0sIDApXHJcbiAgICAgICAgKVxyXG5cclxuY29uc3QgY3JlYXRlUXVldWVXaXRoVGltZXIgPSAodGltZW91dDogbnVtYmVyKSA9PiB7XHJcbiAgcmV0dXJuIChub3RpZnk6ICgpID0+IHZvaWQpID0+IHtcclxuICAgIHNldFRpbWVvdXQobm90aWZ5LCB0aW1lb3V0KVxyXG4gIH1cclxufVxyXG5cclxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHdvbid0IGV4aXN0IGluIFNTUiBlbnZpcm9ubWVudHMuXHJcbi8vIEZhbGwgYmFjayB0byBhIHZhZ3VlIGFwcHJveGltYXRpb24ganVzdCB0byBrZWVwIGZyb20gZXJyb3JpbmcuXHJcbmNvbnN0IHJBRiA9XHJcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICA6IGNyZWF0ZVF1ZXVlV2l0aFRpbWVyKDEwKVxyXG5cclxuZXhwb3J0IHR5cGUgQXV0b0JhdGNoT3B0aW9ucyA9XHJcbiAgfCB7IHR5cGU6ICd0aWNrJyB9XHJcbiAgfCB7IHR5cGU6ICd0aW1lcic7IHRpbWVvdXQ6IG51bWJlciB9XHJcbiAgfCB7IHR5cGU6ICdyYWYnIH1cclxuICB8IHsgdHlwZTogJ2NhbGxiYWNrJzsgcXVldWVOb3RpZmljYXRpb246IChub3RpZnk6ICgpID0+IHZvaWQpID0+IHZvaWQgfVxyXG5cclxuLyoqXHJcbiAqIEEgUmVkdXggc3RvcmUgZW5oYW5jZXIgdGhhdCB3YXRjaGVzIGZvciBcImxvdy1wcmlvcml0eVwiIGFjdGlvbnMsIGFuZCBkZWxheXNcclxuICogbm90aWZ5aW5nIHN1YnNjcmliZXJzIHVudGlsIGVpdGhlciB0aGUgcXVldWVkIGNhbGxiYWNrIGV4ZWN1dGVzIG9yIHRoZVxyXG4gKiBuZXh0IFwic3RhbmRhcmQtcHJpb3JpdHlcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZC5cclxuICpcclxuICogVGhpcyBhbGxvd3MgZGlzcGF0Y2hpbmcgbXVsdGlwbGUgXCJsb3ctcHJpb3JpdHlcIiBhY3Rpb25zIGluIGEgcm93IHdpdGggb25seVxyXG4gKiBhIHNpbmdsZSBzdWJzY3JpYmVyIG5vdGlmaWNhdGlvbiB0byB0aGUgVUkgYWZ0ZXIgdGhlIHNlcXVlbmNlIG9mIGFjdGlvbnNcclxuICogaXMgZmluaXNoZWQsIHRodXMgaW1wcm92aW5nIFVJIHJlLXJlbmRlciBwZXJmb3JtYW5jZS5cclxuICpcclxuICogV2F0Y2hlcyBmb3IgYWN0aW9ucyB3aXRoIHRoZSBgYWN0aW9uLm1ldGFbU0hPVUxEX0FVVE9CQVRDSF1gIGF0dHJpYnV0ZS5cclxuICogVGhpcyBjYW4gYmUgYWRkZWQgdG8gYGFjdGlvbi5tZXRhYCBtYW51YWxseSwgb3IgYnkgdXNpbmcgdGhlXHJcbiAqIGBwcmVwYXJlQXV0b0JhdGNoZWRgIGhlbHBlci5cclxuICpcclxuICogQnkgZGVmYXVsdCwgaXQgd2lsbCBxdWV1ZSBhIG5vdGlmaWNhdGlvbiBmb3IgdGhlIGVuZCBvZiB0aGUgZXZlbnQgbG9vcCB0aWNrLlxyXG4gKiBIb3dldmVyLCB5b3UgY2FuIHBhc3Mgc2V2ZXJhbCBvdGhlciBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgYmVoYXZpb3I6XHJcbiAqIC0gYHt0eXBlOiAndGljayd9OiBxdWV1ZXMgdXNpbmcgYHF1ZXVlTWljcm90YXNrYCAoZGVmYXVsdClcclxuICogLSBge3R5cGU6ICd0aW1lciwgdGltZW91dDogbnVtYmVyfWA6IHF1ZXVlcyB1c2luZyBgc2V0VGltZW91dGBcclxuICogLSBge3R5cGU6ICdyYWYnfWA6IHF1ZXVlcyB1c2luZyBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYFxyXG4gKiAtIGB7dHlwZTogJ2NhbGxiYWNrJywgcXVldWVOb3RpZmljYXRpb246IChub3RpZnk6ICgpID0+IHZvaWQpID0+IHZvaWR9OiBsZXRzIHlvdSBwcm92aWRlIHlvdXIgb3duIGNhbGxiYWNrXHJcbiAqXHJcbiAqXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYXV0b0JhdGNoRW5oYW5jZXIgPVxyXG4gIChvcHRpb25zOiBBdXRvQmF0Y2hPcHRpb25zID0geyB0eXBlOiAncmFmJyB9KTogU3RvcmVFbmhhbmNlciA9PlxyXG4gIChuZXh0KSA9PlxyXG4gICguLi5hcmdzKSA9PiB7XHJcbiAgICBjb25zdCBzdG9yZSA9IG5leHQoLi4uYXJncylcclxuXHJcbiAgICBsZXQgbm90aWZ5aW5nID0gdHJ1ZVxyXG4gICAgbGV0IHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2VcclxuICAgIGxldCBub3RpZmljYXRpb25RdWV1ZWQgPSBmYWxzZVxyXG5cclxuICAgIGNvbnN0IGxpc3RlbmVycyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKVxyXG5cclxuICAgIGNvbnN0IHF1ZXVlQ2FsbGJhY2sgPVxyXG4gICAgICBvcHRpb25zLnR5cGUgPT09ICd0aWNrJ1xyXG4gICAgICAgID8gcXVldWVNaWNyb3Rhc2tTaGltXHJcbiAgICAgICAgOiBvcHRpb25zLnR5cGUgPT09ICdyYWYnXHJcbiAgICAgICAgPyByQUZcclxuICAgICAgICA6IG9wdGlvbnMudHlwZSA9PT0gJ2NhbGxiYWNrJ1xyXG4gICAgICAgID8gb3B0aW9ucy5xdWV1ZU5vdGlmaWNhdGlvblxyXG4gICAgICAgIDogY3JlYXRlUXVldWVXaXRoVGltZXIob3B0aW9ucy50aW1lb3V0KVxyXG5cclxuICAgIGNvbnN0IG5vdGlmeUxpc3RlbmVycyA9ICgpID0+IHtcclxuICAgICAgLy8gV2UncmUgcnVubmluZyBhdCB0aGUgZW5kIG9mIHRoZSBldmVudCBsb29wIHRpY2suXHJcbiAgICAgIC8vIFJ1biB0aGUgcmVhbCBsaXN0ZW5lciBjYWxsYmFja3MgdG8gYWN0dWFsbHkgdXBkYXRlIHRoZSBVSS5cclxuICAgICAgbm90aWZpY2F0aW9uUXVldWVkID0gZmFsc2VcclxuICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSBmYWxzZVxyXG4gICAgICAgIGxpc3RlbmVycy5mb3JFYWNoKChsKSA9PiBsKCkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUsIHtcclxuICAgICAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgYHN0b3JlLnN1YnNjcmliZWAgbWV0aG9kIHRvIGtlZXAgb3JpZ2luYWwgbGlzdGVuZXJzXHJcbiAgICAgIC8vIGZyb20gcnVubmluZyBpZiB3ZSdyZSBkZWxheWluZyBub3RpZmljYXRpb25zXHJcbiAgICAgIHN1YnNjcmliZShsaXN0ZW5lcjogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIC8vIEVhY2ggd3JhcHBlZCBsaXN0ZW5lciB3aWxsIG9ubHkgY2FsbCB0aGUgcmVhbCBsaXN0ZW5lciBpZlxyXG4gICAgICAgIC8vIHRoZSBgbm90aWZ5aW5nYCBmbGFnIGlzIGN1cnJlbnRseSBhY3RpdmUgd2hlbiBpdCdzIGNhbGxlZC5cclxuICAgICAgICAvLyBUaGlzIGxldHMgdGhlIGJhc2Ugc3RvcmUgd29yayBhcyBub3JtYWwsIHdoaWxlIHRoZSBhY3R1YWwgVUlcclxuICAgICAgICAvLyB1cGRhdGUgYmVjb21lcyBjb250cm9sbGVkIGJ5IHRoaXMgZW5oYW5jZXIuXHJcbiAgICAgICAgY29uc3Qgd3JhcHBlZExpc3RlbmVyOiB0eXBlb2YgbGlzdGVuZXIgPSAoKSA9PiBub3RpZnlpbmcgJiYgbGlzdGVuZXIoKVxyXG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKHdyYXBwZWRMaXN0ZW5lcilcclxuICAgICAgICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKVxyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICB1bnN1YnNjcmliZSgpXHJcbiAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgYHN0b3JlLmRpc3BhdGNoYCBtZXRob2Qgc28gdGhhdCB3ZSBjYW4gY2hlY2sgYWN0aW9uc1xyXG4gICAgICAvLyBmb3IgdGhlIGBzaG91bGRBdXRvQmF0Y2hgIGZsYWcgYW5kIGRldGVybWluZSBpZiBiYXRjaGluZyBpcyBhY3RpdmVcclxuICAgICAgZGlzcGF0Y2goYWN0aW9uOiBhbnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgLy8gSWYgdGhlIGFjdGlvbiBkb2VzIF9ub3RfIGhhdmUgdGhlIGBzaG91bGRBdXRvQmF0Y2hgIGZsYWcsXHJcbiAgICAgICAgICAvLyB3ZSByZXN1bWUvY29udGludWUgbm9ybWFsIG5vdGlmeS1hZnRlci1lYWNoLWRpc3BhdGNoIGJlaGF2aW9yXHJcbiAgICAgICAgICBub3RpZnlpbmcgPSAhYWN0aW9uPy5tZXRhPy5bU0hPVUxEX0FVVE9CQVRDSF1cclxuICAgICAgICAgIC8vIElmIGEgYG5vdGlmeUxpc3RlbmVyc2AgbWljcm90YXNrIHdhcyBxdWV1ZWQsIHlvdSBjYW4ndCBjYW5jZWwgaXQuXHJcbiAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBzZXQgYSBmbGFnIHNvIHRoYXQgaXQncyBhIG5vLW9wIHdoZW4gaXQgZG9lcyBydW5cclxuICAgICAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gIW5vdGlmeWluZ1xyXG4gICAgICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgICAgIC8vIFdlJ3ZlIHNlZW4gYXQgbGVhc3QgMSBhY3Rpb24gd2l0aCBgU0hPVUxEX0FVVE9CQVRDSGAuIFRyeSB0byBxdWV1ZVxyXG4gICAgICAgICAgICAvLyBhIG1pY3JvdGFzayB0byBub3RpZnkgbGlzdGVuZXJzIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3AgdGljay5cclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgZW5xdWV1ZSB0aGlzIF9vbmNlXyBwZXIgdGljay5cclxuICAgICAgICAgICAgaWYgKCFub3RpZmljYXRpb25RdWV1ZWQpIHtcclxuICAgICAgICAgICAgICBub3RpZmljYXRpb25RdWV1ZWQgPSB0cnVlXHJcbiAgICAgICAgICAgICAgcXVldWVDYWxsYmFjayhub3RpZnlMaXN0ZW5lcnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCBwcm9jZXNzIHRoZSBhY3Rpb24gYXMgdXN1YWwsIGluY2x1ZGluZyByZWR1Y2Vycy5cclxuICAgICAgICAgIC8vIElmIG5vcm1hbCBub3RpZmljYXRpb24gYmVoYXZpb3IgaXMgZW5hYmxlZCwgdGhlIHN0b3JlIHdpbGwgbm90aWZ5XHJcbiAgICAgICAgICAvLyBhbGwgb2YgaXRzIG93biBsaXN0ZW5lcnMsIGFuZCB0aGUgd3JhcHBlciBjYWxsYmFja3MgYWJvdmUgd2lsbFxyXG4gICAgICAgICAgLy8gc2VlIGBub3RpZnlpbmdgIGlzIHRydWUgYW5kIHBhc3Mgb24gdG8gdGhlIHJlYWwgbGlzdGVuZXIgY2FsbGJhY2tzLlxyXG4gICAgICAgICAgLy8gSWYgd2UncmUgXCJiYXRjaGluZ1wiIGJlaGF2aW9yLCB0aGVuIHRoZSB3cmFwcGVkIGNhbGxiYWNrcyB3aWxsXHJcbiAgICAgICAgICAvLyBiYWlsIG91dCwgY2F1c2luZyB0aGUgYmFzZSBzdG9yZSBub3RpZmljYXRpb24gYmVoYXZpb3IgdG8gYmUgbm8tb3BzLlxyXG4gICAgICAgICAgcmV0dXJuIHN0b3JlLmRpc3BhdGNoKGFjdGlvbilcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgLy8gQXNzdW1lIHdlJ3JlIGJhY2sgdG8gbm9ybWFsIGJlaGF2aW9yIGFmdGVyIGVhY2ggYWN0aW9uXHJcbiAgICAgICAgICBub3RpZnlpbmcgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSlcclxuICB9XHJcbiIsICJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59O1xyXG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcclxuICAgICAgICB0b1tqXSA9IGZyb21baV07XHJcbiAgICByZXR1cm4gdG87XHJcbn07XHJcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XHJcbnZhciBfX2RlZlByb3BzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XHJcbnZhciBfX2dldE93blByb3BEZXNjcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xyXG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XHJcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcclxudmFyIF9fZGVmTm9ybWFsUHJvcCA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHsgcmV0dXJuIGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTsgfTtcclxudmFyIF9fc3ByZWFkVmFsdWVzID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcclxuICAgICAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXHJcbiAgICAgICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcclxuICAgIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2MgPSBfX2dldE93blByb3BTeW1ib2xzKGIpOyBfaSA8IF9jLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgcHJvcCA9IF9jW19pXTtcclxuICAgICAgICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxyXG4gICAgICAgICAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59O1xyXG52YXIgX19zcHJlYWRQcm9wcyA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBfX2RlZlByb3BzKGEsIF9fZ2V0T3duUHJvcERlc2NzKGIpKTsgfTtcclxudmFyIF9fYXN5bmMgPSBmdW5jdGlvbiAoX190aGlzLCBfX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHZhciBmdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLnRocm93KHZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHN0ZXAgPSBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5kb25lID8gcmVzb2x2ZSh4LnZhbHVlKSA6IFByb21pc2UucmVzb2x2ZSh4LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9O1xyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseShfX3RoaXMsIF9fYXJndW1lbnRzKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG4vLyBzcmMvaW5kZXgudHNcclxuaW1wb3J0IHsgZW5hYmxlRVM1IH0gZnJvbSBcImltbWVyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCJyZWR1eFwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIGRlZmF1bHQyLCBjdXJyZW50IGFzIGN1cnJlbnQyLCBmcmVlemUsIG9yaWdpbmFsLCBpc0RyYWZ0IGFzIGlzRHJhZnQ0IH0gZnJvbSBcImltbWVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yIGFzIGNyZWF0ZVNlbGVjdG9yMiB9IGZyb20gXCJyZXNlbGVjdFwiO1xyXG4vLyBzcmMvY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IudHNcclxuaW1wb3J0IHsgY3VycmVudCwgaXNEcmFmdCB9IGZyb20gXCJpbW1lclwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gXCJyZXNlbGVjdFwiO1xyXG52YXIgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICB2YXIgc2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvci5hcHBseSh2b2lkIDAsIGFyZ3MpO1xyXG4gICAgdmFyIHdyYXBwZWRTZWxlY3RvciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciByZXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgcmVzdFtfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaXNEcmFmdCh2YWx1ZSkgPyBjdXJyZW50KHZhbHVlKSA6IHZhbHVlXSwgcmVzdCkpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiB3cmFwcGVkU2VsZWN0b3I7XHJcbn07XHJcbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xyXG5pbXBvcnQgeyBjcmVhdGVTdG9yZSwgY29tcG9zZSBhcyBjb21wb3NlMiwgYXBwbHlNaWRkbGV3YXJlLCBjb21iaW5lUmVkdWNlcnMgfSBmcm9tIFwicmVkdXhcIjtcclxuLy8gc3JjL2RldnRvb2xzRXh0ZW5zaW9uLnRzXHJcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tIFwicmVkdXhcIjtcclxudmFyIGNvbXBvc2VXaXRoRGV2VG9vbHMgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fIDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSBcIm9iamVjdFwiKVxyXG4gICAgICAgIHJldHVybiBjb21wb3NlO1xyXG4gICAgcmV0dXJuIGNvbXBvc2UuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxudmFyIGRldlRvb2xzRW5oYW5jZXIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fID8gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18gOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vb3AyKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vb3AyO1xyXG4gICAgfTtcclxufTtcclxuLy8gc3JjL2lzUGxhaW5PYmplY3QudHNcclxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xyXG4gICAgaWYgKHByb3RvID09PSBudWxsKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgdmFyIGJhc2VQcm90byA9IHByb3RvO1xyXG4gICAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlUHJvdG8pICE9PSBudWxsKSB7XHJcbiAgICAgICAgYmFzZVByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGJhc2VQcm90byk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvdG8gPT09IGJhc2VQcm90bztcclxufVxyXG4vLyBzcmMvZ2V0RGVmYXVsdE1pZGRsZXdhcmUudHNcclxuaW1wb3J0IHRodW5rTWlkZGxld2FyZSBmcm9tIFwicmVkdXgtdGh1bmtcIjtcclxuLy8gc3JjL3RzSGVscGVycy50c1xyXG52YXIgaGFzTWF0Y2hGdW5jdGlvbiA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICByZXR1cm4gdiAmJiB0eXBlb2Ygdi5tYXRjaCA9PT0gXCJmdW5jdGlvblwiO1xyXG59O1xyXG4vLyBzcmMvY3JlYXRlQWN0aW9uLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZUFjdGlvbih0eXBlLCBwcmVwYXJlQWN0aW9uKSB7XHJcbiAgICBmdW5jdGlvbiBhY3Rpb25DcmVhdG9yKCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJlcGFyZUFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgcHJlcGFyZWQgPSBwcmVwYXJlQWN0aW9uLmFwcGx5KHZvaWQgMCwgYXJncyk7XHJcbiAgICAgICAgICAgIGlmICghcHJlcGFyZWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInByZXBhcmVBY3Rpb24gZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogcHJlcGFyZWQucGF5bG9hZFxyXG4gICAgICAgICAgICB9LCBcIm1ldGFcIiBpbiBwcmVwYXJlZCAmJiB7IG1ldGE6IHByZXBhcmVkLm1ldGEgfSksIFwiZXJyb3JcIiBpbiBwcmVwYXJlZCAmJiB7IGVycm9yOiBwcmVwYXJlZC5lcnJvciB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgcGF5bG9hZDogYXJnc1swXSB9O1xyXG4gICAgfVxyXG4gICAgYWN0aW9uQ3JlYXRvci50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwiXCIgKyB0eXBlOyB9O1xyXG4gICAgYWN0aW9uQ3JlYXRvci50eXBlID0gdHlwZTtcclxuICAgIGFjdGlvbkNyZWF0b3IubWF0Y2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBhY3Rpb24udHlwZSA9PT0gdHlwZTsgfTtcclxuICAgIHJldHVybiBhY3Rpb25DcmVhdG9yO1xyXG59XHJcbmZ1bmN0aW9uIGlzQWN0aW9uKGFjdGlvbikge1xyXG4gICAgcmV0dXJuIGlzUGxhaW5PYmplY3QoYWN0aW9uKSAmJiBcInR5cGVcIiBpbiBhY3Rpb247XHJcbn1cclxuZnVuY3Rpb24gaXNBY3Rpb25DcmVhdG9yKGFjdGlvbikge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBhY3Rpb24gPT09IFwiZnVuY3Rpb25cIiAmJiBcInR5cGVcIiBpbiBhY3Rpb24gJiYgaGFzTWF0Y2hGdW5jdGlvbihhY3Rpb24pO1xyXG59XHJcbmZ1bmN0aW9uIGlzRlNBKGFjdGlvbikge1xyXG4gICAgcmV0dXJuIGlzQWN0aW9uKGFjdGlvbikgJiYgdHlwZW9mIGFjdGlvbi50eXBlID09PSBcInN0cmluZ1wiICYmIE9iamVjdC5rZXlzKGFjdGlvbikuZXZlcnkoaXNWYWxpZEtleSk7XHJcbn1cclxuZnVuY3Rpb24gaXNWYWxpZEtleShrZXkpIHtcclxuICAgIHJldHVybiBbXCJ0eXBlXCIsIFwicGF5bG9hZFwiLCBcImVycm9yXCIsIFwibWV0YVwiXS5pbmRleE9mKGtleSkgPiAtMTtcclxufVxyXG5mdW5jdGlvbiBnZXRUeXBlKGFjdGlvbkNyZWF0b3IpIHtcclxuICAgIHJldHVybiBcIlwiICsgYWN0aW9uQ3JlYXRvcjtcclxufVxyXG4vLyBzcmMvYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUudHNcclxuZnVuY3Rpb24gZ2V0TWVzc2FnZSh0eXBlKSB7XHJcbiAgICB2YXIgc3BsaXRUeXBlID0gdHlwZSA/IChcIlwiICsgdHlwZSkuc3BsaXQoXCIvXCIpIDogW107XHJcbiAgICB2YXIgYWN0aW9uTmFtZSA9IHNwbGl0VHlwZVtzcGxpdFR5cGUubGVuZ3RoIC0gMV0gfHwgXCJhY3Rpb25DcmVhdG9yXCI7XHJcbiAgICByZXR1cm4gXCJEZXRlY3RlZCBhbiBhY3Rpb24gY3JlYXRvciB3aXRoIHR5cGUgXFxcIlwiICsgKHR5cGUgfHwgXCJ1bmtub3duXCIpICsgXCJcXFwiIGJlaW5nIGRpc3BhdGNoZWQuIFxcbk1ha2Ugc3VyZSB5b3UncmUgY2FsbGluZyB0aGUgYWN0aW9uIGNyZWF0b3IgYmVmb3JlIGRpc3BhdGNoaW5nLCBpLmUuIGBkaXNwYXRjaChcIiArIGFjdGlvbk5hbWUgKyBcIigpKWAgaW5zdGVhZCBvZiBgZGlzcGF0Y2goXCIgKyBhY3Rpb25OYW1lICsgXCIpYC4gVGhpcyBpcyBuZWNlc3NhcnkgZXZlbiBpZiB0aGUgYWN0aW9uIGhhcyBubyBwYXlsb2FkLlwiO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBuZXh0KGFjdGlvbik7IH07IH07IH07XHJcbiAgICB9XHJcbiAgICB2YXIgX2MgPSBvcHRpb25zLmlzQWN0aW9uQ3JlYXRvciwgaXNBY3Rpb25DcmVhdG9yMiA9IF9jID09PSB2b2lkIDAgPyBpc0FjdGlvbkNyZWF0b3IgOiBfYztcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIGlmIChpc0FjdGlvbkNyZWF0b3IyKGFjdGlvbikpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGdldE1lc3NhZ2UoYWN0aW9uLnR5cGUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcclxuICAgIH07IH07IH07XHJcbn1cclxuLy8gc3JjL3V0aWxzLnRzXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUsIHsgaXNEcmFmdGFibGUgfSBmcm9tIFwiaW1tZXJcIjtcclxuZnVuY3Rpb24gZ2V0VGltZU1lYXN1cmVVdGlscyhtYXhEZWxheSwgZm5OYW1lKSB7XHJcbiAgICB2YXIgZWxhcHNlZCA9IDA7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG1lYXN1cmVUaW1lOiBmdW5jdGlvbiAoZm4pIHtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgZWxhcHNlZCArPSBmaW5pc2hlZCAtIHN0YXJ0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdhcm5JZkV4Y2VlZGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGFwc2VkID4gbWF4RGVsYXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybihmbk5hbWUgKyBcIiB0b29rIFwiICsgZWxhcHNlZCArIFwibXMsIHdoaWNoIGlzIG1vcmUgdGhhbiB0aGUgd2FybmluZyB0aHJlc2hvbGQgb2YgXCIgKyBtYXhEZWxheSArIFwibXMuIFxcbklmIHlvdXIgc3RhdGUgb3IgYWN0aW9ucyBhcmUgdmVyeSBsYXJnZSwgeW91IG1heSB3YW50IHRvIGRpc2FibGUgdGhlIG1pZGRsZXdhcmUgYXMgaXQgbWlnaHQgY2F1c2UgdG9vIG11Y2ggb2YgYSBzbG93ZG93biBpbiBkZXZlbG9wbWVudCBtb2RlLiBTZWUgaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvZ2V0RGVmYXVsdE1pZGRsZXdhcmUgZm9yIGluc3RydWN0aW9ucy5cXG5JdCBpcyBkaXNhYmxlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcywgc28geW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdC5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbnZhciBNaWRkbGV3YXJlQXJyYXkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoTWlkZGxld2FyZUFycmF5LCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gTWlkZGxld2FyZUFycmF5KCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuYXBwbHkodGhpcywgYXJncykgfHwgdGhpcztcclxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIE1pZGRsZXdhcmVBcnJheS5wcm90b3R5cGUpO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNaWRkbGV3YXJlQXJyYXksIFN5bWJvbC5zcGVjaWVzLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBNaWRkbGV3YXJlQXJyYXk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgTWlkZGxld2FyZUFycmF5LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5jb25jYXQuYXBwbHkodGhpcywgYXJyKTtcclxuICAgIH07XHJcbiAgICBNaWRkbGV3YXJlQXJyYXkucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyclswXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyAoTWlkZGxld2FyZUFycmF5LmJpbmQuYXBwbHkoTWlkZGxld2FyZUFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnJbMF0uY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKE1pZGRsZXdhcmVBcnJheS5iaW5kLmFwcGx5KE1pZGRsZXdhcmVBcnJheSwgX19zcHJlYWRBcnJheShbdm9pZCAwXSwgYXJyLmNvbmNhdCh0aGlzKSkpKSgpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBNaWRkbGV3YXJlQXJyYXk7XHJcbn0oQXJyYXkpKTtcclxudmFyIEVuaGFuY2VyQXJyYXkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoRW5oYW5jZXJBcnJheSwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIEVuaGFuY2VyQXJyYXkoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5hcHBseSh0aGlzLCBhcmdzKSB8fCB0aGlzO1xyXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgRW5oYW5jZXJBcnJheS5wcm90b3R5cGUpO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmhhbmNlckFycmF5LCBTeW1ib2wuc3BlY2llcywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gRW5oYW5jZXJBcnJheTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBFbmhhbmNlckFycmF5LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5jb25jYXQuYXBwbHkodGhpcywgYXJyKTtcclxuICAgIH07XHJcbiAgICBFbmhhbmNlckFycmF5LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcnIgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcnJbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgKEVuaGFuY2VyQXJyYXkuYmluZC5hcHBseShFbmhhbmNlckFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnJbMF0uY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKEVuaGFuY2VyQXJyYXkuYmluZC5hcHBseShFbmhhbmNlckFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnIuY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEVuaGFuY2VyQXJyYXk7XHJcbn0oQXJyYXkpKTtcclxuZnVuY3Rpb24gZnJlZXplRHJhZnRhYmxlKHZhbCkge1xyXG4gICAgcmV0dXJuIGlzRHJhZnRhYmxlKHZhbCkgPyBjcmVhdGVOZXh0U3RhdGUodmFsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICB9KSA6IHZhbDtcclxufVxyXG4vLyBzcmMvaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzXHJcbnZhciBpc1Byb2R1Y3Rpb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XHJcbnZhciBwcmVmaXggPSBcIkludmFyaWFudCBmYWlsZWRcIjtcclxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xyXG4gICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpc1Byb2R1Y3Rpb24pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJlZml4KTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihwcmVmaXggKyBcIjogXCIgKyAobWVzc2FnZSB8fCBcIlwiKSk7XHJcbn1cclxuZnVuY3Rpb24gc3RyaW5naWZ5KG9iaiwgc2VyaWFsaXplciwgaW5kZW50LCBkZWN5Y2xlcikge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgZ2V0U2VyaWFsaXplKHNlcmlhbGl6ZXIsIGRlY3ljbGVyKSwgaW5kZW50KTtcclxufVxyXG5mdW5jdGlvbiBnZXRTZXJpYWxpemUoc2VyaWFsaXplciwgZGVjeWNsZXIpIHtcclxuICAgIHZhciBzdGFjayA9IFtdLCBrZXlzID0gW107XHJcbiAgICBpZiAoIWRlY3ljbGVyKVxyXG4gICAgICAgIGRlY3ljbGVyID0gZnVuY3Rpb24gKF8sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFja1swXSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJbQ2lyY3VsYXIgfl1cIjtcclxuICAgICAgICAgICAgcmV0dXJuIFwiW0NpcmN1bGFyIH4uXCIgKyBrZXlzLnNsaWNlKDAsIHN0YWNrLmluZGV4T2YodmFsdWUpKS5qb2luKFwiLlwiKSArIFwiXVwiO1xyXG4gICAgICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgdGhpc1BvcyA9IHN0YWNrLmluZGV4T2YodGhpcyk7XHJcbiAgICAgICAgICAgIH50aGlzUG9zID8gc3RhY2suc3BsaWNlKHRoaXNQb3MgKyAxKSA6IHN0YWNrLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIH50aGlzUG9zID8ga2V5cy5zcGxpY2UodGhpc1BvcywgSW5maW5pdHksIGtleSkgOiBrZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgaWYgKH5zdGFjay5pbmRleE9mKHZhbHVlKSlcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZGVjeWNsZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBzdGFjay5wdXNoKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gc2VyaWFsaXplciA9PSBudWxsID8gdmFsdWUgOiBzZXJpYWxpemVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzSW1tdXRhYmxlRGVmYXVsdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PSBudWxsIHx8IE9iamVjdC5pc0Zyb3plbih2YWx1ZSk7XHJcbn1cclxuZnVuY3Rpb24gdHJhY2tGb3JNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmopIHtcclxuICAgIHZhciB0cmFja2VkUHJvcGVydGllcyA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iaik7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRldGVjdE11dGF0aW9uczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgdHJhY2tlZFByb3BlcnRpZXMsIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmosIHBhdGgsIGNoZWNrZWRPYmplY3RzKSB7XHJcbiAgICBpZiAoaWdub3JlUGF0aHMgPT09IHZvaWQgMCkgeyBpZ25vcmVQYXRocyA9IFtdOyB9XHJcbiAgICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7IHBhdGggPSBcIlwiOyB9XHJcbiAgICBpZiAoY2hlY2tlZE9iamVjdHMgPT09IHZvaWQgMCkgeyBjaGVja2VkT2JqZWN0cyA9IG5ldyBTZXQoKTsgfVxyXG4gICAgdmFyIHRyYWNrZWQgPSB7IHZhbHVlOiBvYmogfTtcclxuICAgIGlmICghaXNJbW11dGFibGUob2JqKSAmJiAhY2hlY2tlZE9iamVjdHMuaGFzKG9iaikpIHtcclxuICAgICAgICBjaGVja2VkT2JqZWN0cy5hZGQob2JqKTtcclxuICAgICAgICB0cmFja2VkLmNoaWxkcmVuID0ge307XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcclxuICAgICAgICAgICAgaWYgKGlnbm9yZVBhdGhzLmxlbmd0aCAmJiBpZ25vcmVQYXRocy5pbmRleE9mKGNoaWxkUGF0aCkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cmFja2VkLmNoaWxkcmVuW2tleV0gPSB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmpba2V5XSwgY2hpbGRQYXRoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJhY2tlZDtcclxufVxyXG5mdW5jdGlvbiBkZXRlY3RNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocywgdHJhY2tlZFByb3BlcnR5LCBvYmosIHNhbWVQYXJlbnRSZWYsIHBhdGgpIHtcclxuICAgIGlmIChpZ25vcmVkUGF0aHMgPT09IHZvaWQgMCkgeyBpZ25vcmVkUGF0aHMgPSBbXTsgfVxyXG4gICAgaWYgKHNhbWVQYXJlbnRSZWYgPT09IHZvaWQgMCkgeyBzYW1lUGFyZW50UmVmID0gZmFsc2U7IH1cclxuICAgIGlmIChwYXRoID09PSB2b2lkIDApIHsgcGF0aCA9IFwiXCI7IH1cclxuICAgIHZhciBwcmV2T2JqID0gdHJhY2tlZFByb3BlcnR5ID8gdHJhY2tlZFByb3BlcnR5LnZhbHVlIDogdm9pZCAwO1xyXG4gICAgdmFyIHNhbWVSZWYgPSBwcmV2T2JqID09PSBvYmo7XHJcbiAgICBpZiAoc2FtZVBhcmVudFJlZiAmJiAhc2FtZVJlZiAmJiAhTnVtYmVyLmlzTmFOKG9iaikpIHtcclxuICAgICAgICByZXR1cm4geyB3YXNNdXRhdGVkOiB0cnVlLCBwYXRoOiBwYXRoIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaXNJbW11dGFibGUocHJldk9iaikgfHwgaXNJbW11dGFibGUob2JqKSkge1xyXG4gICAgICAgIHJldHVybiB7IHdhc011dGF0ZWQ6IGZhbHNlIH07XHJcbiAgICB9XHJcbiAgICB2YXIga2V5c1RvRGV0ZWN0ID0ge307XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuKSB7XHJcbiAgICAgICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgIGtleXNUb0RldGVjdFtrZXldID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMDtcclxuICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhciBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcclxuICAgICAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYXNNYXRjaGVzID0gaWdub3JlZFBhdGhzLnNvbWUoZnVuY3Rpb24gKGlnbm9yZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlnbm9yZWQudGVzdChuZXN0ZWRQYXRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGhhc01hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzLCB0cmFja2VkUHJvcGVydHkuY2hpbGRyZW5ba2V5XSwgb2JqW2tleV0sIHNhbWVSZWYsIG5lc3RlZFBhdGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHQud2FzTXV0YXRlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogcmVzdWx0IH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZvciAodmFyIGtleSBpbiBrZXlzVG9EZXRlY3QpIHtcclxuICAgICAgICB2YXIgc3RhdGVfMSA9IF9sb29wXzEoa2V5KTtcclxuICAgICAgICBpZiAodHlwZW9mIHN0YXRlXzEgPT09IFwib2JqZWN0XCIpXHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZV8xLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIG5leHQoYWN0aW9uKTsgfTsgfTsgfTtcclxuICAgIH1cclxuICAgIHZhciBfYyA9IG9wdGlvbnMuaXNJbW11dGFibGUsIGlzSW1tdXRhYmxlID0gX2MgPT09IHZvaWQgMCA/IGlzSW1tdXRhYmxlRGVmYXVsdCA6IF9jLCBpZ25vcmVkUGF0aHMgPSBvcHRpb25zLmlnbm9yZWRQYXRocywgX2QgPSBvcHRpb25zLndhcm5BZnRlciwgd2FybkFmdGVyID0gX2QgPT09IHZvaWQgMCA/IDMyIDogX2QsIGlnbm9yZSA9IG9wdGlvbnMuaWdub3JlO1xyXG4gICAgaWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzIHx8IGlnbm9yZTtcclxuICAgIHZhciB0cmFjayA9IHRyYWNrRm9yTXV0YXRpb25zLmJpbmQobnVsbCwgaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocyk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgdmFyIGdldFN0YXRlID0gX2MuZ2V0U3RhdGU7XHJcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0U3RhdGUoKTtcclxuICAgICAgICB2YXIgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcclxuICAgICAgICB2YXIgcmVzdWx0O1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyh3YXJuQWZ0ZXIsIFwiSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlXCIpO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdGUgPSBnZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpbnZhcmlhbnQoIXJlc3VsdC53YXNNdXRhdGVkLCBcIkEgc3RhdGUgbXV0YXRpb24gd2FzIGRldGVjdGVkIGJldHdlZW4gZGlzcGF0Y2hlcywgaW4gdGhlIHBhdGggJ1wiICsgKHJlc3VsdC5wYXRoIHx8IFwiXCIpICsgXCInLiAgVGhpcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgZGlzcGF0Y2hlZEFjdGlvbiA9IG5leHQoYWN0aW9uKTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlID0gZ2V0U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyYWNrZXIuZGV0ZWN0TXV0YXRpb25zKCk7XHJcbiAgICAgICAgICAgICAgICB0cmFja2VyID0gdHJhY2soc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lndhc011dGF0ZWQgJiYgaW52YXJpYW50KCFyZXN1bHQud2FzTXV0YXRlZCwgXCJBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBpbnNpZGUgYSBkaXNwYXRjaCwgaW4gdGhlIHBhdGg6IFwiICsgKHJlc3VsdC5wYXRoIHx8IFwiXCIpICsgXCIuIFRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoZSBhY3Rpb24gXCIgKyBzdHJpbmdpZnkoYWN0aW9uKSArIFwiLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRpc3BhdGNoZWRBY3Rpb247XHJcbiAgICAgICAgfTsgfTtcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50c1xyXG5mdW5jdGlvbiBpc1BsYWluKHZhbCkge1xyXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xyXG4gICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgfHwgdHlwZSA9PT0gXCJudW1iZXJcIiB8fCBBcnJheS5pc0FycmF5KHZhbCkgfHwgaXNQbGFpbk9iamVjdCh2YWwpO1xyXG59XHJcbmZ1bmN0aW9uIGZpbmROb25TZXJpYWxpemFibGVWYWx1ZSh2YWx1ZSwgcGF0aCwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpIHtcclxuICAgIGlmIChwYXRoID09PSB2b2lkIDApIHsgcGF0aCA9IFwiXCI7IH1cclxuICAgIGlmIChpc1NlcmlhbGl6YWJsZSA9PT0gdm9pZCAwKSB7IGlzU2VyaWFsaXphYmxlID0gaXNQbGFpbjsgfVxyXG4gICAgaWYgKGlnbm9yZWRQYXRocyA9PT0gdm9pZCAwKSB7IGlnbm9yZWRQYXRocyA9IFtdOyB9XHJcbiAgICB2YXIgZm91bmROZXN0ZWRTZXJpYWxpemFibGU7XHJcbiAgICBpZiAoIWlzU2VyaWFsaXphYmxlKHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGtleVBhdGg6IHBhdGggfHwgXCI8cm9vdD5cIixcclxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FjaGUgPT0gbnVsbCA/IHZvaWQgMCA6IGNhY2hlLmhhcyh2YWx1ZSkpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgdmFyIGVudHJpZXMgPSBnZXRFbnRyaWVzICE9IG51bGwgPyBnZXRFbnRyaWVzKHZhbHVlKSA6IE9iamVjdC5lbnRyaWVzKHZhbHVlKTtcclxuICAgIHZhciBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMDtcclxuICAgIHZhciBfbG9vcF8yID0gZnVuY3Rpb24gKGtleSwgbmVzdGVkVmFsdWUpIHtcclxuICAgICAgICB2YXIgbmVzdGVkUGF0aCA9IHBhdGggPyBwYXRoICsgXCIuXCIgKyBrZXkgOiBrZXk7XHJcbiAgICAgICAgaWYgKGhhc0lnbm9yZWRQYXRocykge1xyXG4gICAgICAgICAgICB2YXIgaGFzTWF0Y2hlcyA9IGlnbm9yZWRQYXRocy5zb21lKGZ1bmN0aW9uIChpZ25vcmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWdub3JlZCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZ25vcmVkLnRlc3QobmVzdGVkUGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmVzdGVkUGF0aCA9PT0gaWdub3JlZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChoYXNNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNTZXJpYWxpemFibGUobmVzdGVkVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5UGF0aDogbmVzdGVkUGF0aCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmVzdGVkVmFsdWVcclxuICAgICAgICAgICAgICAgIH0gfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuZXN0ZWRWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShuZXN0ZWRWYWx1ZSwgbmVzdGVkUGF0aCwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpO1xyXG4gICAgICAgICAgICBpZiAoZm91bmROZXN0ZWRTZXJpYWxpemFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZvciAodmFyIF9pID0gMCwgZW50cmllc18xID0gZW50cmllczsgX2kgPCBlbnRyaWVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIF9jID0gZW50cmllc18xW19pXSwga2V5ID0gX2NbMF0sIG5lc3RlZFZhbHVlID0gX2NbMV07XHJcbiAgICAgICAgdmFyIHN0YXRlXzIgPSBfbG9vcF8yKGtleSwgbmVzdGVkVmFsdWUpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVfMiA9PT0gXCJvYmplY3RcIilcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXzIudmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FjaGUgJiYgaXNOZXN0ZWRGcm96ZW4odmFsdWUpKVxyXG4gICAgICAgIGNhY2hlLmFkZCh2YWx1ZSk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gaXNOZXN0ZWRGcm96ZW4odmFsdWUpIHtcclxuICAgIGlmICghT2JqZWN0LmlzRnJvemVuKHZhbHVlKSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIF9jID0gT2JqZWN0LnZhbHVlcyh2YWx1ZSk7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIG5lc3RlZFZhbHVlID0gX2NbX2ldO1xyXG4gICAgICAgIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgIT09IFwib2JqZWN0XCIgfHwgbmVzdGVkVmFsdWUgPT09IG51bGwpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmICghaXNOZXN0ZWRGcm96ZW4obmVzdGVkVmFsdWUpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIG5leHQoYWN0aW9uKTsgfTsgfTsgfTtcclxuICAgIH1cclxuICAgIHZhciBfYyA9IG9wdGlvbnMuaXNTZXJpYWxpemFibGUsIGlzU2VyaWFsaXphYmxlID0gX2MgPT09IHZvaWQgMCA/IGlzUGxhaW4gOiBfYywgZ2V0RW50cmllcyA9IG9wdGlvbnMuZ2V0RW50cmllcywgX2QgPSBvcHRpb25zLmlnbm9yZWRBY3Rpb25zLCBpZ25vcmVkQWN0aW9ucyA9IF9kID09PSB2b2lkIDAgPyBbXSA6IF9kLCBfZSA9IG9wdGlvbnMuaWdub3JlZEFjdGlvblBhdGhzLCBpZ25vcmVkQWN0aW9uUGF0aHMgPSBfZSA9PT0gdm9pZCAwID8gW1wibWV0YS5hcmdcIiwgXCJtZXRhLmJhc2VRdWVyeU1ldGFcIl0gOiBfZSwgX2YgPSBvcHRpb25zLmlnbm9yZWRQYXRocywgaWdub3JlZFBhdGhzID0gX2YgPT09IHZvaWQgMCA/IFtdIDogX2YsIF9nID0gb3B0aW9ucy53YXJuQWZ0ZXIsIHdhcm5BZnRlciA9IF9nID09PSB2b2lkIDAgPyAzMiA6IF9nLCBfaCA9IG9wdGlvbnMuaWdub3JlU3RhdGUsIGlnbm9yZVN0YXRlID0gX2ggPT09IHZvaWQgMCA/IGZhbHNlIDogX2gsIF9qID0gb3B0aW9ucy5pZ25vcmVBY3Rpb25zLCBpZ25vcmVBY3Rpb25zID0gX2ogPT09IHZvaWQgMCA/IGZhbHNlIDogX2osIF9rID0gb3B0aW9ucy5kaXNhYmxlQ2FjaGUsIGRpc2FibGVDYWNoZSA9IF9rID09PSB2b2lkIDAgPyBmYWxzZSA6IF9rO1xyXG4gICAgdmFyIGNhY2hlID0gIWRpc2FibGVDYWNoZSAmJiBXZWFrU2V0ID8gbmV3IFdlYWtTZXQoKSA6IHZvaWQgMDtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RvcmVBUEkpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5leHQoYWN0aW9uKTtcclxuICAgICAgICB2YXIgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyh3YXJuQWZ0ZXIsIFwiU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlXCIpO1xyXG4gICAgICAgIGlmICghaWdub3JlQWN0aW9ucyAmJiAhKGlnbm9yZWRBY3Rpb25zLmxlbmd0aCAmJiBpZ25vcmVkQWN0aW9ucy5pbmRleE9mKGFjdGlvbi50eXBlKSAhPT0gLTEpKSB7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShhY3Rpb24sIFwiXCIsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkQWN0aW9uUGF0aHMsIGNhY2hlKTtcclxuICAgICAgICAgICAgICAgIGlmIChmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleVBhdGggPSBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlLmtleVBhdGgsIHZhbHVlID0gZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQSBub24tc2VyaWFsaXphYmxlIHZhbHVlIHdhcyBkZXRlY3RlZCBpbiBhbiBhY3Rpb24sIGluIHRoZSBwYXRoOiBgXCIgKyBrZXlQYXRoICsgXCJgLiBWYWx1ZTpcIiwgdmFsdWUsIFwiXFxuVGFrZSBhIGxvb2sgYXQgdGhlIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGFjdGlvbjogXCIsIGFjdGlvbiwgXCJcXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9hY3Rpb25zI3doeS1zaG91bGQtdHlwZS1iZS1hLXN0cmluZy1vci1hdC1sZWFzdC1zZXJpYWxpemFibGUtd2h5LXNob3VsZC1teS1hY3Rpb24tdHlwZXMtYmUtY29uc3RhbnRzKVwiLCBcIlxcbihUbyBhbGxvdyBub24tc2VyaWFsaXphYmxlIHZhbHVlcyBzZWU6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvdXNhZ2UvdXNhZ2UtZ3VpZGUjd29ya2luZy13aXRoLW5vbi1zZXJpYWxpemFibGUtZGF0YSlcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlnbm9yZVN0YXRlKSB7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdG9yZUFQSS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShzdGF0ZSwgXCJcIiwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlQYXRoID0gZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlLmtleVBhdGgsIHZhbHVlID0gZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIHRoZSBzdGF0ZSwgaW4gdGhlIHBhdGg6IGBcIiArIGtleVBhdGggKyBcImAuIFZhbHVlOlwiLCB2YWx1ZSwgXCJcXG5UYWtlIGEgbG9vayBhdCB0aGUgcmVkdWNlcihzKSBoYW5kbGluZyB0aGlzIGFjdGlvbiB0eXBlOiBcIiArIGFjdGlvbi50eXBlICsgXCIuXFxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvb3JnYW5pemluZy1zdGF0ZSNjYW4taS1wdXQtZnVuY3Rpb25zLXByb21pc2VzLW9yLW90aGVyLW5vbi1zZXJpYWxpemFibGUtaXRlbXMtaW4tbXktc3RvcmUtc3RhdGUpXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9OyB9OyB9O1xyXG59XHJcbi8vIHNyYy9nZXREZWZhdWx0TWlkZGxld2FyZS50c1xyXG5mdW5jdGlvbiBpc0Jvb2xlYW4oeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcImJvb2xlYW5cIjtcclxufVxyXG5mdW5jdGlvbiBjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBnZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIF9jID0gb3B0aW9ucy50aHVuaywgdGh1bmsgPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jLCBfZCA9IG9wdGlvbnMuaW1tdXRhYmxlQ2hlY2ssIGltbXV0YWJsZUNoZWNrID0gX2QgPT09IHZvaWQgMCA/IHRydWUgOiBfZCwgX2UgPSBvcHRpb25zLnNlcmlhbGl6YWJsZUNoZWNrLCBzZXJpYWxpemFibGVDaGVjayA9IF9lID09PSB2b2lkIDAgPyB0cnVlIDogX2UsIF9mID0gb3B0aW9ucy5hY3Rpb25DcmVhdG9yQ2hlY2ssIGFjdGlvbkNyZWF0b3JDaGVjayA9IF9mID09PSB2b2lkIDAgPyB0cnVlIDogX2Y7XHJcbiAgICB2YXIgbWlkZGxld2FyZUFycmF5ID0gbmV3IE1pZGRsZXdhcmVBcnJheSgpO1xyXG4gICAgaWYgKHRodW5rKSB7XHJcbiAgICAgICAgaWYgKGlzQm9vbGVhbih0aHVuaykpIHtcclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2godGh1bmtNaWRkbGV3YXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHRodW5rTWlkZGxld2FyZS53aXRoRXh0cmFBcmd1bWVudCh0aHVuay5leHRyYUFyZ3VtZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgIGlmIChpbW11dGFibGVDaGVjaykge1xyXG4gICAgICAgICAgICB2YXIgaW1tdXRhYmxlT3B0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoIWlzQm9vbGVhbihpbW11dGFibGVDaGVjaykpIHtcclxuICAgICAgICAgICAgICAgIGltbXV0YWJsZU9wdGlvbnMgPSBpbW11dGFibGVDaGVjaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoaW1tdXRhYmxlT3B0aW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VyaWFsaXphYmxlQ2hlY2spIHtcclxuICAgICAgICAgICAgdmFyIHNlcmlhbGl6YWJsZU9wdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFpc0Jvb2xlYW4oc2VyaWFsaXphYmxlQ2hlY2spKSB7XHJcbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGVPcHRpb25zID0gc2VyaWFsaXphYmxlQ2hlY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2goY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKHNlcmlhbGl6YWJsZU9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFjdGlvbkNyZWF0b3JDaGVjaykge1xyXG4gICAgICAgICAgICB2YXIgYWN0aW9uQ3JlYXRvck9wdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFpc0Jvb2xlYW4oYWN0aW9uQ3JlYXRvckNoZWNrKSkge1xyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ3JlYXRvck9wdGlvbnMgPSBhY3Rpb25DcmVhdG9yQ2hlY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnVuc2hpZnQoY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUoYWN0aW9uQ3JlYXRvck9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWlkZGxld2FyZUFycmF5O1xyXG59XHJcbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xyXG52YXIgSVNfUFJPRFVDVElPTiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIjtcclxuZnVuY3Rpb24gY29uZmlndXJlU3RvcmUob3B0aW9ucykge1xyXG4gICAgdmFyIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSA9IGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmUoKTtcclxuICAgIHZhciBfYyA9IG9wdGlvbnMgfHwge30sIF9kID0gX2MucmVkdWNlciwgcmVkdWNlciA9IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZCwgX2UgPSBfYy5taWRkbGV3YXJlLCBtaWRkbGV3YXJlID0gX2UgPT09IHZvaWQgMCA/IGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSgpIDogX2UsIF9mID0gX2MuZGV2VG9vbHMsIGRldlRvb2xzID0gX2YgPT09IHZvaWQgMCA/IHRydWUgOiBfZiwgX2cgPSBfYy5wcmVsb2FkZWRTdGF0ZSwgcHJlbG9hZGVkU3RhdGUgPSBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2csIF9oID0gX2MuZW5oYW5jZXJzLCBlbmhhbmNlcnMgPSBfaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2g7XHJcbiAgICB2YXIgcm9vdFJlZHVjZXI7XHJcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHJvb3RSZWR1Y2VyID0gcmVkdWNlcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocmVkdWNlcikpIHtcclxuICAgICAgICByb290UmVkdWNlciA9IGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2VyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCJyZWR1Y2VyXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudCwgYW5kIG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3Qgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBjb21iaW5lUmVkdWNlcnMnKTtcclxuICAgIH1cclxuICAgIHZhciBmaW5hbE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlO1xyXG4gICAgaWYgKHR5cGVvZiBmaW5hbE1pZGRsZXdhcmUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGZpbmFsTWlkZGxld2FyZSA9IGZpbmFsTWlkZGxld2FyZShjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUpO1xyXG4gICAgICAgIGlmICghSVNfUFJPRFVDVElPTiAmJiAhQXJyYXkuaXNBcnJheShmaW5hbE1pZGRsZXdhcmUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIndoZW4gdXNpbmcgYSBtaWRkbGV3YXJlIGJ1aWxkZXIgZnVuY3Rpb24sIGFuIGFycmF5IG9mIG1pZGRsZXdhcmUgbXVzdCBiZSByZXR1cm5lZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIUlTX1BST0RVQ1RJT04gJiYgZmluYWxNaWRkbGV3YXJlLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIHR5cGVvZiBpdGVtICE9PSBcImZ1bmN0aW9uXCI7IH0pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZWFjaCBtaWRkbGV3YXJlIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZVN0b3JlIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcclxuICAgIH1cclxuICAgIHZhciBtaWRkbGV3YXJlRW5oYW5jZXIgPSBhcHBseU1pZGRsZXdhcmUuYXBwbHkodm9pZCAwLCBmaW5hbE1pZGRsZXdhcmUpO1xyXG4gICAgdmFyIGZpbmFsQ29tcG9zZSA9IGNvbXBvc2UyO1xyXG4gICAgaWYgKGRldlRvb2xzKSB7XHJcbiAgICAgICAgZmluYWxDb21wb3NlID0gY29tcG9zZVdpdGhEZXZUb29scyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgICAgIHRyYWNlOiAhSVNfUFJPRFVDVElPTlxyXG4gICAgICAgIH0sIHR5cGVvZiBkZXZUb29scyA9PT0gXCJvYmplY3RcIiAmJiBkZXZUb29scykpO1xyXG4gICAgfVxyXG4gICAgdmFyIGRlZmF1bHRFbmhhbmNlcnMgPSBuZXcgRW5oYW5jZXJBcnJheShtaWRkbGV3YXJlRW5oYW5jZXIpO1xyXG4gICAgdmFyIHN0b3JlRW5oYW5jZXJzID0gZGVmYXVsdEVuaGFuY2VycztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVuaGFuY2VycykpIHtcclxuICAgICAgICBzdG9yZUVuaGFuY2VycyA9IF9fc3ByZWFkQXJyYXkoW21pZGRsZXdhcmVFbmhhbmNlcl0sIGVuaGFuY2Vycyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZW5oYW5jZXJzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBzdG9yZUVuaGFuY2VycyA9IGVuaGFuY2VycyhkZWZhdWx0RW5oYW5jZXJzKTtcclxuICAgIH1cclxuICAgIHZhciBjb21wb3NlZEVuaGFuY2VyID0gZmluYWxDb21wb3NlLmFwcGx5KHZvaWQgMCwgc3RvcmVFbmhhbmNlcnMpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZVN0b3JlKHJvb3RSZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgY29tcG9zZWRFbmhhbmNlcik7XHJcbn1cclxuLy8gc3JjL2NyZWF0ZVJlZHVjZXIudHNcclxuaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZTIsIHsgaXNEcmFmdCBhcyBpc0RyYWZ0MiwgaXNEcmFmdGFibGUgYXMgaXNEcmFmdGFibGUyIH0gZnJvbSBcImltbWVyXCI7XHJcbi8vIHNyYy9tYXBCdWlsZGVycy50c1xyXG5mdW5jdGlvbiBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhidWlsZGVyQ2FsbGJhY2spIHtcclxuICAgIHZhciBhY3Rpb25zTWFwID0ge307XHJcbiAgICB2YXIgYWN0aW9uTWF0Y2hlcnMgPSBbXTtcclxuICAgIHZhciBkZWZhdWx0Q2FzZVJlZHVjZXI7XHJcbiAgICB2YXIgYnVpbGRlciA9IHtcclxuICAgICAgICBhZGRDYXNlOiBmdW5jdGlvbiAodHlwZU9yQWN0aW9uQ3JlYXRvciwgcmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uTWF0Y2hlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGRNYXRjaGVyYFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHR5cGVPckFjdGlvbkNyZWF0b3IgPT09IFwic3RyaW5nXCIgPyB0eXBlT3JBY3Rpb25DcmVhdG9yIDogdHlwZU9yQWN0aW9uQ3JlYXRvci50eXBlO1xyXG4gICAgICAgICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBhY3Rpb24gdHlwZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZSBpbiBhY3Rpb25zTWFwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRDYXNlYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggdHdvIHJlZHVjZXJzIGZvciB0aGUgc2FtZSBhY3Rpb24gdHlwZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3Rpb25zTWFwW3R5cGVdID0gcmVkdWNlcjtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZGRNYXRjaGVyOiBmdW5jdGlvbiAobWF0Y2hlciwgcmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3Rpb25NYXRjaGVycy5wdXNoKHsgbWF0Y2hlcjogbWF0Y2hlciwgcmVkdWNlcjogcmVkdWNlciB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZGREZWZhdWx0Q2FzZTogZnVuY3Rpb24gKHJlZHVjZXIpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZERlZmF1bHRDYXNlYCBjYW4gb25seSBiZSBjYWxsZWQgb25jZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0Q2FzZVJlZHVjZXIgPSByZWR1Y2VyO1xyXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgYnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpO1xyXG4gICAgcmV0dXJuIFthY3Rpb25zTWFwLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyXTtcclxufVxyXG4vLyBzcmMvY3JlYXRlUmVkdWNlci50c1xyXG5mdW5jdGlvbiBpc1N0YXRlRnVuY3Rpb24oeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI7XHJcbn1cclxudmFyIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSBmYWxzZTtcclxuZnVuY3Rpb24gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUsIG1hcE9yQnVpbGRlckNhbGxiYWNrLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICBpZiAoYWN0aW9uTWF0Y2hlcnMgPT09IHZvaWQgMCkgeyBhY3Rpb25NYXRjaGVycyA9IFtdOyB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtYXBPckJ1aWxkZXJDYWxsYmFjayA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVGhlIG9iamVjdCBub3RhdGlvbiBmb3IgYGNyZWF0ZVJlZHVjZXJgIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUlRLIDIuMC4gUGxlYXNlIHVzZSB0aGUgJ2J1aWxkZXIgY2FsbGJhY2snIG5vdGF0aW9uIGluc3RlYWQ6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2NyZWF0ZVJlZHVjZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgX2MgPSB0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIiA/IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKG1hcE9yQnVpbGRlckNhbGxiYWNrKSA6IFttYXBPckJ1aWxkZXJDYWxsYmFjaywgYWN0aW9uTWF0Y2hlcnMsIGRlZmF1bHRDYXNlUmVkdWNlcl0sIGFjdGlvbnNNYXAgPSBfY1swXSwgZmluYWxBY3Rpb25NYXRjaGVycyA9IF9jWzFdLCBmaW5hbERlZmF1bHRDYXNlUmVkdWNlciA9IF9jWzJdO1xyXG4gICAgdmFyIGdldEluaXRpYWxTdGF0ZTtcclxuICAgIGlmIChpc1N0YXRlRnVuY3Rpb24oaW5pdGlhbFN0YXRlKSkge1xyXG4gICAgICAgIGdldEluaXRpYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZyZWV6ZURyYWZ0YWJsZShpbml0aWFsU3RhdGUoKSk7IH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgZnJvemVuSW5pdGlhbFN0YXRlXzEgPSBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKTtcclxuICAgICAgICBnZXRJbml0aWFsU3RhdGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmcm96ZW5Jbml0aWFsU3RhdGVfMTsgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xyXG4gICAgICAgIGlmIChzdGF0ZSA9PT0gdm9pZCAwKSB7IHN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlKCk7IH1cclxuICAgICAgICB2YXIgY2FzZVJlZHVjZXJzID0gX19zcHJlYWRBcnJheShbXHJcbiAgICAgICAgICAgIGFjdGlvbnNNYXBbYWN0aW9uLnR5cGVdXHJcbiAgICAgICAgXSwgZmluYWxBY3Rpb25NYXRjaGVycy5maWx0ZXIoZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHZhciBtYXRjaGVyID0gX2MubWF0Y2hlcjtcclxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoYWN0aW9uKTtcclxuICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHZhciByZWR1Y2VyMiA9IF9jLnJlZHVjZXI7XHJcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VyMjtcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgaWYgKGNhc2VSZWR1Y2Vycy5maWx0ZXIoZnVuY3Rpb24gKGNyKSB7IHJldHVybiAhIWNyOyB9KS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgY2FzZVJlZHVjZXJzID0gW2ZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhc2VSZWR1Y2Vycy5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzU3RhdGUsIGNhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRHJhZnQyKHByZXZpb3VzU3RhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRyYWZ0ID0gcHJldmlvdXNTdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzRHJhZnRhYmxlMihwcmV2aW91c1N0YXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYXNlUmVkdWNlcihwcmV2aW91c1N0YXRlLCBhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBIGNhc2UgcmVkdWNlciBvbiBhIG5vbi1kcmFmdGFibGUgdmFsdWUgbXVzdCBub3QgcmV0dXJuIHVuZGVmaW5lZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVOZXh0U3RhdGUyKHByZXZpb3VzU3RhdGUsIGZ1bmN0aW9uIChkcmFmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgfSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgcmVkdWNlci5nZXRJbml0aWFsU3RhdGUgPSBnZXRJbml0aWFsU3RhdGU7XHJcbiAgICByZXR1cm4gcmVkdWNlcjtcclxufVxyXG4vLyBzcmMvY3JlYXRlU2xpY2UudHNcclxudmFyIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24yID0gZmFsc2U7XHJcbmZ1bmN0aW9uIGdldFR5cGUyKHNsaWNlLCBhY3Rpb25LZXkpIHtcclxuICAgIHJldHVybiBzbGljZSArIFwiL1wiICsgYWN0aW9uS2V5O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVNsaWNlKG9wdGlvbnMpIHtcclxuICAgIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lO1xyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYG5hbWVgIGlzIGEgcmVxdWlyZWQgb3B0aW9uIGZvciBjcmVhdGVTbGljZVwiKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5pdGlhbFN0YXRlID09PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIllvdSBtdXN0IHByb3ZpZGUgYW4gYGluaXRpYWxTdGF0ZWAgdmFsdWUgdGhhdCBpcyBub3QgYHVuZGVmaW5lZGAuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGBpbml0aWFsU3RhdGVgXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBpbml0aWFsU3RhdGUgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsU3RhdGUgPT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5pbml0aWFsU3RhdGUgOiBmcmVlemVEcmFmdGFibGUob3B0aW9ucy5pbml0aWFsU3RhdGUpO1xyXG4gICAgdmFyIHJlZHVjZXJzID0gb3B0aW9ucy5yZWR1Y2VycyB8fCB7fTtcclxuICAgIHZhciByZWR1Y2VyTmFtZXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XHJcbiAgICB2YXIgc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWUgPSB7fTtcclxuICAgIHZhciBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZSA9IHt9O1xyXG4gICAgdmFyIGFjdGlvbkNyZWF0b3JzID0ge307XHJcbiAgICByZWR1Y2VyTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAocmVkdWNlck5hbWUpIHtcclxuICAgICAgICB2YXIgbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUgPSByZWR1Y2Vyc1tyZWR1Y2VyTmFtZV07XHJcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlMihuYW1lLCByZWR1Y2VyTmFtZSk7XHJcbiAgICAgICAgdmFyIGNhc2VSZWR1Y2VyO1xyXG4gICAgICAgIHZhciBwcmVwYXJlQ2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKFwicmVkdWNlclwiIGluIG1heWJlUmVkdWNlcldpdGhQcmVwYXJlKSB7XHJcbiAgICAgICAgICAgIGNhc2VSZWR1Y2VyID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucmVkdWNlcjtcclxuICAgICAgICAgICAgcHJlcGFyZUNhbGxiYWNrID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucHJlcGFyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNhc2VSZWR1Y2VyID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lW3JlZHVjZXJOYW1lXSA9IGNhc2VSZWR1Y2VyO1xyXG4gICAgICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlW3R5cGVdID0gY2FzZVJlZHVjZXI7XHJcbiAgICAgICAgYWN0aW9uQ3JlYXRvcnNbcmVkdWNlck5hbWVdID0gcHJlcGFyZUNhbGxiYWNrID8gY3JlYXRlQWN0aW9uKHR5cGUsIHByZXBhcmVDYWxsYmFjaykgOiBjcmVhdGVBY3Rpb24odHlwZSk7XHJcbiAgICB9KTtcclxuICAgIGZ1bmN0aW9uIGJ1aWxkUmVkdWNlcigpIHtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbjIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZSBvYmplY3Qgbm90YXRpb24gZm9yIGBjcmVhdGVTbGljZS5leHRyYVJlZHVjZXJzYCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJUSyAyLjAuIFBsZWFzZSB1c2UgdGhlICdidWlsZGVyIGNhbGxiYWNrJyBub3RhdGlvbiBpbnN0ZWFkOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9jcmVhdGVTbGljZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX2MgPSB0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSBcImZ1bmN0aW9uXCIgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhvcHRpb25zLmV4dHJhUmVkdWNlcnMpIDogW29wdGlvbnMuZXh0cmFSZWR1Y2Vyc10sIF9kID0gX2NbMF0sIGV4dHJhUmVkdWNlcnMgPSBfZCA9PT0gdm9pZCAwID8ge30gOiBfZCwgX2UgPSBfY1sxXSwgYWN0aW9uTWF0Y2hlcnMgPSBfZSA9PT0gdm9pZCAwID8gW10gOiBfZSwgX2YgPSBfY1syXSwgZGVmYXVsdENhc2VSZWR1Y2VyID0gX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mO1xyXG4gICAgICAgIHZhciBmaW5hbENhc2VSZWR1Y2VycyA9IF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHt9LCBleHRyYVJlZHVjZXJzKSwgc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGUpO1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgZnVuY3Rpb24gKGJ1aWxkZXIpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGZpbmFsQ2FzZVJlZHVjZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBidWlsZGVyLmFkZENhc2Uoa2V5LCBmaW5hbENhc2VSZWR1Y2Vyc1trZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGFjdGlvbk1hdGNoZXJzXzEgPSBhY3Rpb25NYXRjaGVyczsgX2kgPCBhY3Rpb25NYXRjaGVyc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG0gPSBhY3Rpb25NYXRjaGVyc18xW19pXTtcclxuICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkTWF0Y2hlcihtLm1hdGNoZXIsIG0ucmVkdWNlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgYnVpbGRlci5hZGREZWZhdWx0Q2FzZShkZWZhdWx0Q2FzZVJlZHVjZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB2YXIgX3JlZHVjZXI7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgcmVkdWNlcjogZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKCFfcmVkdWNlcilcclxuICAgICAgICAgICAgICAgIF9yZWR1Y2VyID0gYnVpbGRSZWR1Y2VyKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFjdGlvbnM6IGFjdGlvbkNyZWF0b3JzLFxyXG4gICAgICAgIGNhc2VSZWR1Y2Vyczogc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWUsXHJcbiAgICAgICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghX3JlZHVjZXIpXHJcbiAgICAgICAgICAgICAgICBfcmVkdWNlciA9IGJ1aWxkUmVkdWNlcigpO1xyXG4gICAgICAgICAgICByZXR1cm4gX3JlZHVjZXIuZ2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvZW50aXR5X3N0YXRlLnRzXHJcbmZ1bmN0aW9uIGdldEluaXRpYWxFbnRpdHlTdGF0ZSgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgaWRzOiBbXSxcclxuICAgICAgICBlbnRpdGllczoge31cclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeSgpIHtcclxuICAgIGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZShhZGRpdGlvbmFsU3RhdGUpIHtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0YXRlID09PSB2b2lkIDApIHsgYWRkaXRpb25hbFN0YXRlID0ge307IH1cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihnZXRJbml0aWFsRW50aXR5U3RhdGUoKSwgYWRkaXRpb25hbFN0YXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGdldEluaXRpYWxTdGF0ZTogZ2V0SW5pdGlhbFN0YXRlIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3N0YXRlX3NlbGVjdG9ycy50c1xyXG5mdW5jdGlvbiBjcmVhdGVTZWxlY3RvcnNGYWN0b3J5KCkge1xyXG4gICAgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKHNlbGVjdFN0YXRlKSB7XHJcbiAgICAgICAgdmFyIHNlbGVjdElkcyA9IGZ1bmN0aW9uIChzdGF0ZSkgeyByZXR1cm4gc3RhdGUuaWRzOyB9O1xyXG4gICAgICAgIHZhciBzZWxlY3RFbnRpdGllcyA9IGZ1bmN0aW9uIChzdGF0ZSkgeyByZXR1cm4gc3RhdGUuZW50aXRpZXM7IH07XHJcbiAgICAgICAgdmFyIHNlbGVjdEFsbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdElkcywgc2VsZWN0RW50aXRpZXMsIGZ1bmN0aW9uIChpZHMsIGVudGl0aWVzKSB7IHJldHVybiBpZHMubWFwKGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gZW50aXRpZXNbaWRdOyB9KTsgfSk7XHJcbiAgICAgICAgdmFyIHNlbGVjdElkID0gZnVuY3Rpb24gKF8sIGlkKSB7IHJldHVybiBpZDsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0QnlJZCA9IGZ1bmN0aW9uIChlbnRpdGllcywgaWQpIHsgcmV0dXJuIGVudGl0aWVzW2lkXTsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0VG90YWwgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RJZHMsIGZ1bmN0aW9uIChpZHMpIHsgcmV0dXJuIGlkcy5sZW5ndGg7IH0pO1xyXG4gICAgICAgIGlmICghc2VsZWN0U3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdElkczogc2VsZWN0SWRzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0RW50aXRpZXM6IHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsOiBzZWxlY3RBbGwsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RUb3RhbDogc2VsZWN0VG90YWwsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RFbnRpdGllcywgc2VsZWN0SWQsIHNlbGVjdEJ5SWQpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0RW50aXRpZXMpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNlbGVjdElkczogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdElkcyksXHJcbiAgICAgICAgICAgIHNlbGVjdEVudGl0aWVzOiBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsXHJcbiAgICAgICAgICAgIHNlbGVjdEFsbDogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdEFsbCksXHJcbiAgICAgICAgICAgIHNlbGVjdFRvdGFsOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0VG90YWwpLFxyXG4gICAgICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsIHNlbGVjdElkLCBzZWxlY3RCeUlkKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBnZXRTZWxlY3RvcnM6IGdldFNlbGVjdG9ycyB9O1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy9zdGF0ZV9hZGFwdGVyLnRzXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUzLCB7IGlzRHJhZnQgYXMgaXNEcmFmdDMgfSBmcm9tIFwiaW1tZXJcIjtcclxuZnVuY3Rpb24gY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcclxuICAgIHZhciBvcGVyYXRvciA9IGNyZWF0ZVN0YXRlT3BlcmF0b3IoZnVuY3Rpb24gKF8sIHN0YXRlKSB7IHJldHVybiBtdXRhdG9yKHN0YXRlKTsgfSk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gb3BlcmF0aW9uKHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wZXJhdG9yKHN0YXRlLCB2b2lkIDApO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb24oc3RhdGUsIGFyZykge1xyXG4gICAgICAgIGZ1bmN0aW9uIGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KGFyZzIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzRlNBKGFyZzIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcnVuTXV0YXRvciA9IGZ1bmN0aW9uIChkcmFmdCkge1xyXG4gICAgICAgICAgICBpZiAoaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnKSkge1xyXG4gICAgICAgICAgICAgICAgbXV0YXRvcihhcmcucGF5bG9hZCwgZHJhZnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbXV0YXRvcihhcmcsIGRyYWZ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGlzRHJhZnQzKHN0YXRlKSkge1xyXG4gICAgICAgICAgICBydW5NdXRhdG9yKHN0YXRlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZTMoc3RhdGUsIHJ1bk11dGF0b3IpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3V0aWxzLnRzXHJcbmZ1bmN0aW9uIHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCkge1xyXG4gICAgdmFyIGtleSA9IHNlbGVjdElkKGVudGl0eSk7XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGtleSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFwiVGhlIGVudGl0eSBwYXNzZWQgdG8gdGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgdW5kZWZpbmVkLlwiLCBcIllvdSBzaG91bGQgcHJvYmFibHkgcHJvdmlkZSB5b3VyIG93biBgc2VsZWN0SWRgIGltcGxlbWVudGF0aW9uLlwiLCBcIlRoZSBlbnRpdHkgdGhhdCB3YXMgcGFzc2VkOlwiLCBlbnRpdHksIFwiVGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb246XCIsIHNlbGVjdElkLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxufVxyXG5mdW5jdGlvbiBlbnN1cmVFbnRpdGllc0FycmF5KGVudGl0aWVzKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZW50aXRpZXMpKSB7XHJcbiAgICAgICAgZW50aXRpZXMgPSBPYmplY3QudmFsdWVzKGVudGl0aWVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbnRpdGllcztcclxufVxyXG5mdW5jdGlvbiBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzKG5ld0VudGl0aWVzLCBzZWxlY3RJZCwgc3RhdGUpIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICB2YXIgYWRkZWQgPSBbXTtcclxuICAgIHZhciB1cGRhdGVkID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIG5ld0VudGl0aWVzXzEgPSBuZXdFbnRpdGllczsgX2kgPCBuZXdFbnRpdGllc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHZhciBlbnRpdHkgPSBuZXdFbnRpdGllc18xW19pXTtcclxuICAgICAgICB2YXIgaWQgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xyXG4gICAgICAgIGlmIChpZCBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICB1cGRhdGVkLnB1c2goeyBpZDogaWQsIGNoYW5nZXM6IGVudGl0eSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFkZGVkLnB1c2goZW50aXR5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW2FkZGVkLCB1cGRhdGVkXTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvdW5zb3J0ZWRfc3RhdGVfYWRhcHRlci50c1xyXG5mdW5jdGlvbiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCkge1xyXG4gICAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XHJcbiAgICAgICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlLmlkcy5wdXNoKGtleSk7XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBuZXdFbnRpdGllc18yID0gbmV3RW50aXRpZXM7IF9pIDwgbmV3RW50aXRpZXNfMi5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IG5ld0VudGl0aWVzXzJbX2ldO1xyXG4gICAgICAgICAgICBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xyXG4gICAgICAgIGlmICghKGtleSBpbiBzdGF0ZS5lbnRpdGllcykpIHtcclxuICAgICAgICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBuZXdFbnRpdGllc18zID0gbmV3RW50aXRpZXM7IF9pIDwgbmV3RW50aXRpZXNfMy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IG5ld0VudGl0aWVzXzNbX2ldO1xyXG4gICAgICAgICAgICBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldEFsbE11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBzdGF0ZS5pZHMgPSBbXTtcclxuICAgICAgICBzdGF0ZS5lbnRpdGllcyA9IHt9O1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZW1vdmVPbmVNdXRhYmx5KGtleSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gcmVtb3ZlTWFueU11dGFibHkoW2tleV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZU1hbnlNdXRhYmx5KGtleXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGRpZE11dGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1trZXldO1xyXG4gICAgICAgICAgICAgICAgZGlkTXV0YXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChkaWRNdXRhdGUpIHtcclxuICAgICAgICAgICAgc3RhdGUuaWRzID0gc3RhdGUuaWRzLmZpbHRlcihmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIGlkIGluIHN0YXRlLmVudGl0aWVzOyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZW1vdmVBbGxNdXRhYmx5KHN0YXRlKSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwge1xyXG4gICAgICAgICAgICBpZHM6IFtdLFxyXG4gICAgICAgICAgICBlbnRpdGllczoge31cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHRha2VOZXdLZXkoa2V5cywgdXBkYXRlLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBvcmlnaW5hbDIgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgIHZhciB1cGRhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luYWwyLCB1cGRhdGUuY2hhbmdlcyk7XHJcbiAgICAgICAgdmFyIG5ld0tleSA9IHNlbGVjdElkVmFsdWUodXBkYXRlZCwgc2VsZWN0SWQpO1xyXG4gICAgICAgIHZhciBoYXNOZXdLZXkgPSBuZXdLZXkgIT09IHVwZGF0ZS5pZDtcclxuICAgICAgICBpZiAoaGFzTmV3S2V5KSB7XHJcbiAgICAgICAgICAgIGtleXNbdXBkYXRlLmlkXSA9IG5ld0tleTtcclxuICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlLmVudGl0aWVzW25ld0tleV0gPSB1cGRhdGVkO1xyXG4gICAgICAgIHJldHVybiBoYXNOZXdLZXk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVPbmVNdXRhYmx5KHVwZGF0ZSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBkYXRlTWFueU11dGFibHkoW3VwZGF0ZV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIG5ld0tleXMgPSB7fTtcclxuICAgICAgICB2YXIgdXBkYXRlc1BlckVudGl0eSA9IHt9O1xyXG4gICAgICAgIHVwZGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAodXBkYXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGUuaWQgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogdXBkYXRlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXM6IF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHt9LCB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0gPyB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0uY2hhbmdlcyA6IG51bGwpLCB1cGRhdGUuY2hhbmdlcylcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB1cGRhdGVzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzUGVyRW50aXR5KTtcclxuICAgICAgICB2YXIgZGlkTXV0YXRlRW50aXRpZXMgPSB1cGRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgaWYgKGRpZE11dGF0ZUVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHZhciBkaWRNdXRhdGVJZHMgPSB1cGRhdGVzLmZpbHRlcihmdW5jdGlvbiAodXBkYXRlKSB7IHJldHVybiB0YWtlTmV3S2V5KG5ld0tleXMsIHVwZGF0ZSwgc3RhdGUpOyB9KS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICBpZiAoZGlkTXV0YXRlSWRzKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS5pZHMgPSBPYmplY3Qua2V5cyhzdGF0ZS5lbnRpdGllcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBzZXJ0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBfYyA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSksIGFkZGVkID0gX2NbMF0sIHVwZGF0ZWQgPSBfY1sxXTtcclxuICAgICAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XHJcbiAgICAgICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVtb3ZlQWxsOiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3IocmVtb3ZlQWxsTXV0YWJseSksXHJcbiAgICAgICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxyXG4gICAgICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxyXG4gICAgICAgIHNldE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRPbmVNdXRhYmx5KSxcclxuICAgICAgICBzZXRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE1hbnlNdXRhYmx5KSxcclxuICAgICAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxyXG4gICAgICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxyXG4gICAgICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cHNlcnRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE1hbnlNdXRhYmx5KSxcclxuICAgICAgICByZW1vdmVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IocmVtb3ZlT25lTXV0YWJseSksXHJcbiAgICAgICAgcmVtb3ZlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVNYW55TXV0YWJseSlcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3NvcnRlZF9zdGF0ZV9hZGFwdGVyLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydCkge1xyXG4gICAgdmFyIF9jID0gY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQpLCByZW1vdmVPbmUgPSBfYy5yZW1vdmVPbmUsIHJlbW92ZU1hbnkgPSBfYy5yZW1vdmVNYW55LCByZW1vdmVBbGwgPSBfYy5yZW1vdmVBbGw7XHJcbiAgICBmdW5jdGlvbiBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gYWRkTWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgdmFyIG1vZGVscyA9IG5ld0VudGl0aWVzLmZpbHRlcihmdW5jdGlvbiAobW9kZWwpIHsgcmV0dXJuICEoc2VsZWN0SWRWYWx1ZShtb2RlbCwgc2VsZWN0SWQpIGluIHN0YXRlLmVudGl0aWVzKTsgfSk7XHJcbiAgICAgICAgaWYgKG1vZGVscy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgbWVyZ2UobW9kZWxzLCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHNldE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xyXG4gICAgICAgIGlmIChuZXdFbnRpdGllcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgbWVyZ2UobmV3RW50aXRpZXMsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXMgPSB7fTtcclxuICAgICAgICBzdGF0ZS5pZHMgPSBbXTtcclxuICAgICAgICBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGUsIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1hbnlNdXRhYmx5KFt1cGRhdGVdLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBhcHBsaWVkVXBkYXRlcyA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgdXBkYXRlc18xID0gdXBkYXRlczsgX2kgPCB1cGRhdGVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSB1cGRhdGVzXzFbX2ldO1xyXG4gICAgICAgICAgICB2YXIgZW50aXR5ID0gc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcclxuICAgICAgICAgICAgaWYgKCFlbnRpdHkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFwcGxpZWRVcGRhdGVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlbnRpdHksIHVwZGF0ZS5jaGFuZ2VzKTtcclxuICAgICAgICAgICAgdmFyIG5ld0lkID0gc2VsZWN0SWQoZW50aXR5KTtcclxuICAgICAgICAgICAgaWYgKHVwZGF0ZS5pZCAhPT0gbmV3SWQpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgICAgICAgICAgc3RhdGUuZW50aXRpZXNbbmV3SWRdID0gZW50aXR5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcHBsaWVkVXBkYXRlcykge1xyXG4gICAgICAgICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBzZXJ0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICB2YXIgX2MgPSBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzKG5ld0VudGl0aWVzLCBzZWxlY3RJZCwgc3RhdGUpLCBhZGRlZCA9IF9jWzBdLCB1cGRhdGVkID0gX2NbMV07XHJcbiAgICAgICAgdXBkYXRlTWFueU11dGFibHkodXBkYXRlZCwgc3RhdGUpO1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhcmVBcnJheXNFcXVhbChhLCBiKSB7XHJcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGggJiYgaSA8IGIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFbaV0gPT09IGJbaV0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBtZXJnZShtb2RlbHMsIHN0YXRlKSB7XHJcbiAgICAgICAgbW9kZWxzLmZvckVhY2goZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmVudGl0aWVzW3NlbGVjdElkKG1vZGVsKV0gPSBtb2RlbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZXNvcnRFbnRpdGllcyhzdGF0ZSkge1xyXG4gICAgICAgIHZhciBhbGxFbnRpdGllcyA9IE9iamVjdC52YWx1ZXMoc3RhdGUuZW50aXRpZXMpO1xyXG4gICAgICAgIGFsbEVudGl0aWVzLnNvcnQoc29ydCk7XHJcbiAgICAgICAgdmFyIG5ld1NvcnRlZElkcyA9IGFsbEVudGl0aWVzLm1hcChzZWxlY3RJZCk7XHJcbiAgICAgICAgdmFyIGlkcyA9IHN0YXRlLmlkcztcclxuICAgICAgICBpZiAoIWFyZUFycmF5c0VxdWFsKGlkcywgbmV3U29ydGVkSWRzKSkge1xyXG4gICAgICAgICAgICBzdGF0ZS5pZHMgPSBuZXdTb3J0ZWRJZHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZW1vdmVPbmU6IHJlbW92ZU9uZSxcclxuICAgICAgICByZW1vdmVNYW55OiByZW1vdmVNYW55LFxyXG4gICAgICAgIHJlbW92ZUFsbDogcmVtb3ZlQWxsLFxyXG4gICAgICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxyXG4gICAgICAgIHNldE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRPbmVNdXRhYmx5KSxcclxuICAgICAgICBzZXRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE1hbnlNdXRhYmx5KSxcclxuICAgICAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICAgICAgYWRkTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRNYW55TXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVNYW55TXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSlcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL2NyZWF0ZV9hZGFwdGVyLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eUFkYXB0ZXIob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIHZhciBfYyA9IF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICBzb3J0Q29tcGFyZXI6IGZhbHNlLFxyXG4gICAgICAgIHNlbGVjdElkOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHsgcmV0dXJuIGluc3RhbmNlLmlkOyB9XHJcbiAgICB9LCBvcHRpb25zKSwgc2VsZWN0SWQgPSBfYy5zZWxlY3RJZCwgc29ydENvbXBhcmVyID0gX2Muc29ydENvbXBhcmVyO1xyXG4gICAgdmFyIHN0YXRlRmFjdG9yeSA9IGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3RvcnkoKTtcclxuICAgIHZhciBzZWxlY3RvcnNGYWN0b3J5ID0gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeSgpO1xyXG4gICAgdmFyIHN0YXRlQWRhcHRlciA9IHNvcnRDb21wYXJlciA/IGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydENvbXBhcmVyKSA6IGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKTtcclxuICAgIHJldHVybiBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgc2VsZWN0SWQ6IHNlbGVjdElkLFxyXG4gICAgICAgIHNvcnRDb21wYXJlcjogc29ydENvbXBhcmVyXHJcbiAgICB9LCBzdGF0ZUZhY3RvcnkpLCBzZWxlY3RvcnNGYWN0b3J5KSwgc3RhdGVBZGFwdGVyKTtcclxufVxyXG4vLyBzcmMvbmFub2lkLnRzXHJcbnZhciB1cmxBbHBoYWJldCA9IFwiTW9kdWxlU3ltYmhhc093blByLTAxMjM0NTY3ODlBQkNERUZHSE5SVmZnY3RpVXZ6X0txWVRKa0x4cFpYSWpRV1wiO1xyXG52YXIgbmFub2lkID0gZnVuY3Rpb24gKHNpemUpIHtcclxuICAgIGlmIChzaXplID09PSB2b2lkIDApIHsgc2l6ZSA9IDIxOyB9XHJcbiAgICB2YXIgaWQgPSBcIlwiO1xyXG4gICAgdmFyIGkgPSBzaXplO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgIGlkICs9IHVybEFscGhhYmV0W01hdGgucmFuZG9tKCkgKiA2NCB8IDBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkO1xyXG59O1xyXG4vLyBzcmMvY3JlYXRlQXN5bmNUaHVuay50c1xyXG52YXIgY29tbW9uUHJvcGVydGllcyA9IFtcclxuICAgIFwibmFtZVwiLFxyXG4gICAgXCJtZXNzYWdlXCIsXHJcbiAgICBcInN0YWNrXCIsXHJcbiAgICBcImNvZGVcIlxyXG5dO1xyXG52YXIgUmVqZWN0V2l0aFZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUmVqZWN0V2l0aFZhbHVlKHBheWxvYWQsIG1ldGEpIHtcclxuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVqZWN0V2l0aFZhbHVlO1xyXG59KCkpO1xyXG52YXIgRnVsZmlsbFdpdGhNZXRhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gRnVsZmlsbFdpdGhNZXRhKHBheWxvYWQsIG1ldGEpIHtcclxuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRnVsZmlsbFdpdGhNZXRhO1xyXG59KCkpO1xyXG52YXIgbWluaVNlcmlhbGl6ZUVycm9yID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgdmFyIHNpbXBsZUVycm9yID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBjb21tb25Qcm9wZXJ0aWVzXzEgPSBjb21tb25Qcm9wZXJ0aWVzOyBfaSA8IGNvbW1vblByb3BlcnRpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gY29tbW9uUHJvcGVydGllc18xW19pXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZVtwcm9wZXJ0eV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIHNpbXBsZUVycm9yW3Byb3BlcnR5XSA9IHZhbHVlW3Byb3BlcnR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2ltcGxlRXJyb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBtZXNzYWdlOiBTdHJpbmcodmFsdWUpIH07XHJcbn07XHJcbnZhciBjcmVhdGVBc3luY1RodW5rID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFzeW5jVGh1bmsyKHR5cGVQcmVmaXgsIHBheWxvYWRDcmVhdG9yLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIGZ1bGZpbGxlZCA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvZnVsZmlsbGVkXCIsIGZ1bmN0aW9uIChwYXlsb2FkLCByZXF1ZXN0SWQsIGFyZywgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICAgICAgbWV0YTogX19zcHJlYWRQcm9wcyhfX3NwcmVhZFZhbHVlcyh7fSwgbWV0YSB8fCB7fSksIHtcclxuICAgICAgICAgICAgICAgIGFyZzogYXJnLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3RhdHVzOiBcImZ1bGZpbGxlZFwiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgICAgIHZhciBwZW5kaW5nID0gY3JlYXRlQWN0aW9uKHR5cGVQcmVmaXggKyBcIi9wZW5kaW5nXCIsIGZ1bmN0aW9uIChyZXF1ZXN0SWQsIGFyZywgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICAgICAgcGF5bG9hZDogdm9pZCAwLFxyXG4gICAgICAgICAgICBtZXRhOiBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBtZXRhIHx8IHt9KSwge1xyXG4gICAgICAgICAgICAgICAgYXJnOiBhcmcsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6IFwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgICAgIHZhciByZWplY3RlZCA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvcmVqZWN0ZWRcIiwgZnVuY3Rpb24gKGVycm9yLCByZXF1ZXN0SWQsIGFyZywgcGF5bG9hZCwgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICAgICAgZXJyb3I6IChvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplRXJyb3IgfHwgbWluaVNlcmlhbGl6ZUVycm9yKShlcnJvciB8fCBcIlJlamVjdGVkXCIpLFxyXG4gICAgICAgICAgICBtZXRhOiBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBtZXRhIHx8IHt9KSwge1xyXG4gICAgICAgICAgICAgICAgYXJnOiBhcmcsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIHJlamVjdGVkV2l0aFZhbHVlOiAhIXBheWxvYWQsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3RhdHVzOiBcInJlamVjdGVkXCIsXHJcbiAgICAgICAgICAgICAgICBhYm9ydGVkOiAoZXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGVycm9yLm5hbWUpID09PSBcIkFib3J0RXJyb3JcIixcclxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogKGVycm9yID09IG51bGwgPyB2b2lkIDAgOiBlcnJvci5uYW1lKSA9PT0gXCJDb25kaXRpb25FcnJvclwiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgICAgIHZhciBkaXNwbGF5ZWRXYXJuaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIEFDID0gdHlwZW9mIEFib3J0Q29udHJvbGxlciAhPT0gXCJ1bmRlZmluZWRcIiA/IEFib3J0Q29udHJvbGxlciA6IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gY2xhc3NfMSgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmFsID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25hYm9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uOiB2b2lkIDAsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dJZkFib3J0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsYXNzXzEucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGlzcGxheWVkV2FybmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWRXYXJuaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiVGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBpbXBsZW1lbnQgQWJvcnRDb250cm9sbGVyLiBcXG5JZiB5b3Ugd2FudCB0byB1c2UgdGhlIEFib3J0Q29udHJvbGxlciB0byByZWFjdCB0byBgYWJvcnRgIGV2ZW50cywgcGxlYXNlIGNvbnNpZGVyIGltcG9ydGluZyBhIHBvbHlmaWxsIGxpa2UgJ2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC9kaXN0L2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC1vbmx5Jy5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY2xhc3NfMTtcclxuICAgICAgICB9KCkpO1xyXG4gICAgICAgIGZ1bmN0aW9uIGFjdGlvbkNyZWF0b3IoYXJnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlcXVlc3RJZCA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmlkR2VuZXJhdG9yKSA/IG9wdGlvbnMuaWRHZW5lcmF0b3IoYXJnKSA6IG5hbm9pZCgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFib3J0Q29udHJvbGxlciA9IG5ldyBBQygpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFib3J0UmVhc29uO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFib3J0KHJlYXNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0UmVhc29uID0gcmVhc29uO1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHByb21pc2UyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2FzeW5jKHRoaXMsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgZmluYWxBY3Rpb24sIGNvbmRpdGlvblJlc3VsdCwgYWJvcnRlZFByb21pc2UsIGVycl8xLCBza2lwRGlzcGF0Y2g7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMCwgNCwgLCA1XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IChfYSA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuY29uZGl0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCBhcmcsIHsgZ2V0U3RhdGU6IGdldFN0YXRlLCBleHRyYTogZXh0cmEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNUaGVuYWJsZShjb25kaXRpb25SZXN1bHQpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgY29uZGl0aW9uUmVzdWx0XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblJlc3VsdCA9PT0gZmFsc2UgfHwgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb25kaXRpb25FcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiQWJvcnRlZCBkdWUgdG8gY29uZGl0aW9uIGNhbGxiYWNrIHJldHVybmluZyBmYWxzZS5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRlZFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoXywgcmVqZWN0KSB7IHJldHVybiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJBYm9ydEVycm9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhYm9ydFJlYXNvbiB8fCBcIkFib3J0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsgfSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChwZW5kaW5nKHJlcXVlc3RJZCwgYXJnLCAoX2IgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldFBlbmRpbmdNZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChvcHRpb25zLCB7IHJlcXVlc3RJZDogcmVxdWVzdElkLCBhcmc6IGFyZyB9LCB7IGdldFN0YXRlOiBnZXRTdGF0ZSwgZXh0cmE6IGV4dHJhIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UucmFjZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRlZFByb21pc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHBheWxvYWRDcmVhdG9yKGFyZywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IGV4dHJhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydDogYWJvcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdFdpdGhWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBtZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlamVjdFdpdGhWYWx1ZSh2YWx1ZSwgbWV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGZpbGxXaXRoVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgbWV0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdWxmaWxsV2l0aE1ldGEodmFsdWUsIG1ldGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVqZWN0V2l0aFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEZ1bGZpbGxXaXRoTWV0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGZpbGxlZChyZXN1bHQucGF5bG9hZCwgcmVxdWVzdElkLCBhcmcsIHJlc3VsdC5tZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkKHJlc3VsdCwgcmVxdWVzdElkLCBhcmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEFjdGlvbiA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJfMSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBlcnJfMSBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZSA/IHJlamVjdGVkKG51bGwsIHJlcXVlc3RJZCwgYXJnLCBlcnJfMS5wYXlsb2FkLCBlcnJfMS5tZXRhKSA6IHJlamVjdGVkKGVycl8xLCByZXF1ZXN0SWQsIGFyZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcERpc3BhdGNoID0gb3B0aW9ucyAmJiAhb3B0aW9ucy5kaXNwYXRjaENvbmRpdGlvblJlamVjdGlvbiAmJiByZWplY3RlZC5tYXRjaChmaW5hbEFjdGlvbikgJiYgZmluYWxBY3Rpb24ubWV0YS5jb25kaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcERpc3BhdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChmaW5hbEFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGZpbmFsQWN0aW9uXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9taXNlMiwge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0OiBhYm9ydCxcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgICAgICBhcmc6IGFyZyxcclxuICAgICAgICAgICAgICAgICAgICB1bndyYXA6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UyLnRoZW4odW53cmFwUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWN0aW9uQ3JlYXRvciwge1xyXG4gICAgICAgICAgICBwZW5kaW5nOiBwZW5kaW5nLFxyXG4gICAgICAgICAgICByZWplY3RlZDogcmVqZWN0ZWQsXHJcbiAgICAgICAgICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLFxyXG4gICAgICAgICAgICB0eXBlUHJlZml4OiB0eXBlUHJlZml4XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVBc3luY1RodW5rMi53aXRoVHlwZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVBc3luY1RodW5rMjsgfTtcclxuICAgIHJldHVybiBjcmVhdGVBc3luY1RodW5rMjtcclxufSkoKTtcclxuZnVuY3Rpb24gdW53cmFwUmVzdWx0KGFjdGlvbikge1xyXG4gICAgaWYgKGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlKSB7XHJcbiAgICAgICAgdGhyb3cgYWN0aW9uLnBheWxvYWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoYWN0aW9uLmVycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgYWN0aW9uLmVycm9yO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjdGlvbi5wYXlsb2FkO1xyXG59XHJcbmZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG4vLyBzcmMvbWF0Y2hlcnMudHNcclxudmFyIG1hdGNoZXMgPSBmdW5jdGlvbiAobWF0Y2hlciwgYWN0aW9uKSB7XHJcbiAgICBpZiAoaGFzTWF0Y2hGdW5jdGlvbihtYXRjaGVyKSkge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVyLm1hdGNoKGFjdGlvbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiBpc0FueU9mKCkge1xyXG4gICAgdmFyIG1hdGNoZXJzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIG1hdGNoZXJzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVycy5zb21lKGZ1bmN0aW9uIChtYXRjaGVyKSB7IHJldHVybiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbik7IH0pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc0FsbE9mKCkge1xyXG4gICAgdmFyIG1hdGNoZXJzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIG1hdGNoZXJzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVycy5ldmVyeShmdW5jdGlvbiAobWF0Y2hlcikgeyByZXR1cm4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pOyB9KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCB2YWxpZFN0YXR1cykge1xyXG4gICAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi5tZXRhKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIHZhciBoYXNWYWxpZFJlcXVlc3RJZCA9IHR5cGVvZiBhY3Rpb24ubWV0YS5yZXF1ZXN0SWQgPT09IFwic3RyaW5nXCI7XHJcbiAgICB2YXIgaGFzVmFsaWRSZXF1ZXN0U3RhdHVzID0gdmFsaWRTdGF0dXMuaW5kZXhPZihhY3Rpb24ubWV0YS5yZXF1ZXN0U3RhdHVzKSA+IC0xO1xyXG4gICAgcmV0dXJuIGhhc1ZhbGlkUmVxdWVzdElkICYmIGhhc1ZhbGlkUmVxdWVzdFN0YXR1cztcclxufVxyXG5mdW5jdGlvbiBpc0FzeW5jVGh1bmtBcnJheShhKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGFbMF0gPT09IFwiZnVuY3Rpb25cIiAmJiBcInBlbmRpbmdcIiBpbiBhWzBdICYmIFwiZnVsZmlsbGVkXCIgaW4gYVswXSAmJiBcInJlamVjdGVkXCIgaW4gYVswXTtcclxufVxyXG5mdW5jdGlvbiBpc1BlbmRpbmcoKSB7XHJcbiAgICB2YXIgYXN5bmNUaHVua3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXN5bmNUaHVua3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJwZW5kaW5nXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUGVuZGluZygpKGFzeW5jVGh1bmtzWzBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXJzID0gYXN5bmNUaHVua3MubWFwKGZ1bmN0aW9uIChhc3luY1RodW5rKSB7IHJldHVybiBhc3luY1RodW5rLnBlbmRpbmc7IH0pO1xyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNSZWplY3RlZCgpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInJlamVjdGVkXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUmVqZWN0ZWQoKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IGFzeW5jVGh1bmtzLm1hcChmdW5jdGlvbiAoYXN5bmNUaHVuaykgeyByZXR1cm4gYXN5bmNUaHVuay5yZWplY3RlZDsgfSk7XHJcbiAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YuYXBwbHkodm9pZCAwLCBtYXRjaGVycyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICB2YXIgaGFzRmxhZyA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYWN0aW9uICYmIGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlO1xyXG4gICAgfTtcclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbGxPZihpc1JlamVjdGVkLmFwcGx5KHZvaWQgMCwgYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc1JlamVjdGVkV2l0aFZhbHVlKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbGxPZihpc1JlamVjdGVkLmFwcGx5KHZvaWQgMCwgYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzRnVsZmlsbGVkKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wiZnVsZmlsbGVkXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzRnVsZmlsbGVkKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgbWF0Y2hlcnMgPSBhc3luY1RodW5rcy5tYXAoZnVuY3Rpb24gKGFzeW5jVGh1bmspIHsgcmV0dXJuIGFzeW5jVGh1bmsuZnVsZmlsbGVkOyB9KTtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZi5hcHBseSh2b2lkIDAsIG1hdGNoZXJzKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbigpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInBlbmRpbmdcIiwgXCJmdWxmaWxsZWRcIiwgXCJyZWplY3RlZFwiXSk7IH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc0FzeW5jVGh1bmtBY3Rpb24oKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgYXN5bmNUaHVua3NfMSA9IGFzeW5jVGh1bmtzOyBfaSA8IGFzeW5jVGh1bmtzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBhc3luY1RodW5rID0gYXN5bmNUaHVua3NfMVtfaV07XHJcbiAgICAgICAgICAgIG1hdGNoZXJzLnB1c2goYXN5bmNUaHVuay5wZW5kaW5nLCBhc3luY1RodW5rLnJlamVjdGVkLCBhc3luY1RodW5rLmZ1bGZpbGxlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS91dGlscy50c1xyXG52YXIgYXNzZXJ0RnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYywgZXhwZWN0ZWQpIHtcclxuICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihleHBlY3RlZCArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xyXG4gICAgfVxyXG59O1xyXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHtcclxufTtcclxudmFyIGNhdGNoUmVqZWN0aW9uID0gZnVuY3Rpb24gKHByb21pc2UyLCBvbkVycm9yKSB7XHJcbiAgICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBub29wOyB9XHJcbiAgICBwcm9taXNlMi5jYXRjaChvbkVycm9yKTtcclxuICAgIHJldHVybiBwcm9taXNlMjtcclxufTtcclxudmFyIGFkZEFib3J0U2lnbmFsTGlzdGVuZXIgPSBmdW5jdGlvbiAoYWJvcnRTaWduYWwsIGNhbGxiYWNrKSB7XHJcbiAgICBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgY2FsbGJhY2ssIHsgb25jZTogdHJ1ZSB9KTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgY2FsbGJhY2spOyB9O1xyXG59O1xyXG52YXIgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbiA9IGZ1bmN0aW9uIChhYm9ydENvbnRyb2xsZXIsIHJlYXNvbikge1xyXG4gICAgdmFyIHNpZ25hbCA9IGFib3J0Q29udHJvbGxlci5zaWduYWw7XHJcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIShcInJlYXNvblwiIGluIHNpZ25hbCkpIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2lnbmFsLCBcInJlYXNvblwiLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiByZWFzb24sXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIDtcclxuICAgIGFib3J0Q29udHJvbGxlci5hYm9ydChyZWFzb24pO1xyXG59O1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2V4Y2VwdGlvbnMudHNcclxudmFyIHRhc2sgPSBcInRhc2tcIjtcclxudmFyIGxpc3RlbmVyID0gXCJsaXN0ZW5lclwiO1xyXG52YXIgY29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcclxudmFyIGNhbmNlbGxlZCA9IFwiY2FuY2VsbGVkXCI7XHJcbnZhciB0YXNrQ2FuY2VsbGVkID0gXCJ0YXNrLVwiICsgY2FuY2VsbGVkO1xyXG52YXIgdGFza0NvbXBsZXRlZCA9IFwidGFzay1cIiArIGNvbXBsZXRlZDtcclxudmFyIGxpc3RlbmVyQ2FuY2VsbGVkID0gbGlzdGVuZXIgKyBcIi1cIiArIGNhbmNlbGxlZDtcclxudmFyIGxpc3RlbmVyQ29tcGxldGVkID0gbGlzdGVuZXIgKyBcIi1cIiArIGNvbXBsZXRlZDtcclxudmFyIFRhc2tBYm9ydEVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVGFza0Fib3J0RXJyb3IoY29kZSkge1xyXG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJUYXNrQWJvcnRFcnJvclwiO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IHRhc2sgKyBcIiBcIiArIGNhbmNlbGxlZCArIFwiIChyZWFzb246IFwiICsgY29kZSArIFwiKVwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFRhc2tBYm9ydEVycm9yO1xyXG59KCkpO1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL3Rhc2sudHNcclxudmFyIHZhbGlkYXRlQWN0aXZlID0gZnVuY3Rpb24gKHNpZ25hbCkge1xyXG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiByYWNlV2l0aFNpZ25hbChzaWduYWwsIHByb21pc2UyKSB7XHJcbiAgICB2YXIgY2xlYW51cCA9IG5vb3A7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHZhciBub3RpZnlSZWplY3Rpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3QobmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pKTsgfTtcclxuICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgbm90aWZ5UmVqZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xlYW51cCA9IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIoc2lnbmFsLCBub3RpZnlSZWplY3Rpb24pO1xyXG4gICAgICAgIHByb21pc2UyLmZpbmFsbHkoZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xlYW51cCgpOyB9KS50aGVuKHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICB9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjbGVhbnVwID0gbm9vcDtcclxuICAgIH0pO1xyXG59XHJcbnZhciBydW5UYXNrID0gZnVuY3Rpb24gKHRhc2syLCBjbGVhblVwKSB7IHJldHVybiBfX2FzeW5jKHZvaWQgMCwgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHZhbHVlLCBlcnJvcl8xO1xyXG4gICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFswLCAzLCA0LCA1XSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLnJlc29sdmUoKV07XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRhc2syKCldO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogXCJva1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgZXJyb3JfMSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3JfMSBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yID8gXCJjYW5jZWxsZWRcIiA6IFwicmVqZWN0ZWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzFcclxuICAgICAgICAgICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgY2xlYW5VcCA9PSBudWxsID8gdm9pZCAwIDogY2xlYW5VcCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pOyB9O1xyXG52YXIgY3JlYXRlUGF1c2UgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHByb21pc2UyKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhdGNoUmVqZWN0aW9uKHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgcHJvbWlzZTIpLnRoZW4oZnVuY3Rpb24gKG91dHB1dCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgIH0pKTtcclxuICAgIH07XHJcbn07XHJcbnZhciBjcmVhdGVEZWxheSA9IGZ1bmN0aW9uIChzaWduYWwpIHtcclxuICAgIHZhciBwYXVzZSA9IGNyZWF0ZVBhdXNlKHNpZ25hbCk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRpbWVvdXRNcykge1xyXG4gICAgICAgIHJldHVybiBwYXVzZShuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXR1cm4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpOyB9KSk7XHJcbiAgICB9O1xyXG59O1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2luZGV4LnRzXHJcbnZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xyXG52YXIgSU5URVJOQUxfTklMX1RPS0VOID0ge307XHJcbnZhciBhbG0gPSBcImxpc3RlbmVyTWlkZGxld2FyZVwiO1xyXG52YXIgY3JlYXRlRm9yayA9IGZ1bmN0aW9uIChwYXJlbnRBYm9ydFNpZ25hbCwgcGFyZW50QmxvY2tpbmdQcm9taXNlcykge1xyXG4gICAgdmFyIGxpbmtDb250cm9sbGVycyA9IGZ1bmN0aW9uIChjb250cm9sbGVyKSB7IHJldHVybiBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHBhcmVudEFib3J0U2lnbmFsLCBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIHBhcmVudEFib3J0U2lnbmFsLnJlYXNvbik7IH0pOyB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXNrRXhlY3V0b3IsIG9wdHMpIHtcclxuICAgICAgICBhc3NlcnRGdW5jdGlvbih0YXNrRXhlY3V0b3IsIFwidGFza0V4ZWN1dG9yXCIpO1xyXG4gICAgICAgIHZhciBjaGlsZEFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICBsaW5rQ29udHJvbGxlcnMoY2hpbGRBYm9ydENvbnRyb2xsZXIpO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBydW5UYXNrKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXN5bmModm9pZCAwLCBudWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQyO1xyXG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShwYXJlbnRBYm9ydFNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRhc2tFeGVjdXRvcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDIgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCByZXN1bHQyXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDb21wbGV0ZWQpOyB9KTtcclxuICAgICAgICBpZiAob3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5hdXRvSm9pbikge1xyXG4gICAgICAgICAgICBwYXJlbnRCbG9ja2luZ1Byb21pc2VzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcmVzdWx0OiBjcmVhdGVQYXVzZShwYXJlbnRBYm9ydFNpZ25hbCkocmVzdWx0KSxcclxuICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ2FuY2VsbGVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG59O1xyXG52YXIgY3JlYXRlVGFrZVBhdHRlcm4gPSBmdW5jdGlvbiAoc3RhcnRMaXN0ZW5pbmcsIHNpZ25hbCkge1xyXG4gICAgdmFyIHRha2UgPSBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiBfX2FzeW5jKHZvaWQgMCwgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB1bnN1YnNjcmliZSwgdHVwbGVQcm9taXNlLCBwcm9taXNlcywgb3V0cHV0O1xyXG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKHNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB0dXBsZVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdG9wTGlzdGVuaW5nID0gc3RhcnRMaXN0ZW5pbmcoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiBwcmVkaWNhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3Q6IGZ1bmN0aW9uIChhY3Rpb24sIGxpc3RlbmVyQXBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJBcGkudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRTdGF0ZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRPcmlnaW5hbFN0YXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcExpc3RlbmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlUHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQsIG51bGwpOyB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzEsICwgMywgNF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgUHJvbWlzZS5yYWNlKHByb21pc2VzKSldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBvdXRwdXRdO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiBjYXRjaFJlamVjdGlvbih0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkpOyB9O1xyXG59O1xyXG52YXIgZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICB2YXIgdHlwZSA9IG9wdGlvbnMudHlwZSwgYWN0aW9uQ3JlYXRvciA9IG9wdGlvbnMuYWN0aW9uQ3JlYXRvciwgbWF0Y2hlciA9IG9wdGlvbnMubWF0Y2hlciwgcHJlZGljYXRlID0gb3B0aW9ucy5wcmVkaWNhdGUsIGVmZmVjdCA9IG9wdGlvbnMuZWZmZWN0O1xyXG4gICAgaWYgKHR5cGUpIHtcclxuICAgICAgICBwcmVkaWNhdGUgPSBjcmVhdGVBY3Rpb24odHlwZSkubWF0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChhY3Rpb25DcmVhdG9yKSB7XHJcbiAgICAgICAgdHlwZSA9IGFjdGlvbkNyZWF0b3IudHlwZTtcclxuICAgICAgICBwcmVkaWNhdGUgPSBhY3Rpb25DcmVhdG9yLm1hdGNoO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobWF0Y2hlcikge1xyXG4gICAgICAgIHByZWRpY2F0ZSA9IG1hdGNoZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcmVkaWNhdGUpIHtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNyZWF0aW5nIG9yIHJlbW92aW5nIGEgbGlzdGVuZXIgcmVxdWlyZXMgb25lIG9mIHRoZSBrbm93biBmaWVsZHMgZm9yIG1hdGNoaW5nIGFuIGFjdGlvblwiKTtcclxuICAgIH1cclxuICAgIGFzc2VydEZ1bmN0aW9uKGVmZmVjdCwgXCJvcHRpb25zLmxpc3RlbmVyXCIpO1xyXG4gICAgcmV0dXJuIHsgcHJlZGljYXRlOiBwcmVkaWNhdGUsIHR5cGU6IHR5cGUsIGVmZmVjdDogZWZmZWN0IH07XHJcbn07XHJcbnZhciBjcmVhdGVMaXN0ZW5lckVudHJ5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgIHZhciBfYyA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucyksIHR5cGUgPSBfYy50eXBlLCBwcmVkaWNhdGUgPSBfYy5wcmVkaWNhdGUsIGVmZmVjdCA9IF9jLmVmZmVjdDtcclxuICAgIHZhciBpZCA9IG5hbm9pZCgpO1xyXG4gICAgdmFyIGVudHJ5ID0ge1xyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgICBlZmZlY3Q6IGVmZmVjdCxcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIHByZWRpY2F0ZTogcHJlZGljYXRlLFxyXG4gICAgICAgIHBlbmRpbmc6IG5ldyBTZXQoKSxcclxuICAgICAgICB1bnN1YnNjcmliZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1YnNjcmliZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBlbnRyeTtcclxufTtcclxudmFyIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgZW50cnkucGVuZGluZy5mb3JFYWNoKGZ1bmN0aW9uIChjb250cm9sbGVyKSB7XHJcbiAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZCk7XHJcbiAgICB9KTtcclxufTtcclxudmFyIGNyZWF0ZUNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGxpc3RlbmVyTWFwKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxpc3RlbmVyTWFwLmZvckVhY2goY2FuY2VsQWN0aXZlTGlzdGVuZXJzKTtcclxuICAgICAgICBsaXN0ZW5lck1hcC5jbGVhcigpO1xyXG4gICAgfTtcclxufTtcclxudmFyIHNhZmVseU5vdGlmeUVycm9yID0gZnVuY3Rpb24gKGVycm9ySGFuZGxlciwgZXJyb3JUb05vdGlmeSwgZXJyb3JJbmZvKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGVycm9ySGFuZGxlcihlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9ySGFuZGxlckVycm9yKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9ySGFuZGxlckVycm9yO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgfVxyXG59O1xyXG52YXIgYWRkTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvYWRkXCIpO1xyXG52YXIgY2xlYXJBbGxMaXN0ZW5lcnMgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvcmVtb3ZlQWxsXCIpO1xyXG52YXIgcmVtb3ZlTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvcmVtb3ZlXCIpO1xyXG52YXIgZGVmYXVsdEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBhcmdzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgX19zcHJlYWRBcnJheShbYWxtICsgXCIvZXJyb3JcIl0sIGFyZ3MpKTtcclxufTtcclxuZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlKG1pZGRsZXdhcmVPcHRpb25zKSB7XHJcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgaWYgKG1pZGRsZXdhcmVPcHRpb25zID09PSB2b2lkIDApIHsgbWlkZGxld2FyZU9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIGxpc3RlbmVyTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdmFyIGV4dHJhID0gbWlkZGxld2FyZU9wdGlvbnMuZXh0cmEsIF9jID0gbWlkZGxld2FyZU9wdGlvbnMub25FcnJvciwgb25FcnJvciA9IF9jID09PSB2b2lkIDAgPyBkZWZhdWx0RXJyb3JIYW5kbGVyIDogX2M7XHJcbiAgICBhc3NlcnRGdW5jdGlvbihvbkVycm9yLCBcIm9uRXJyb3JcIik7XHJcbiAgICB2YXIgaW5zZXJ0RW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgICAgICBlbnRyeS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxpc3RlbmVyTWFwLmRlbGV0ZShlbnRyeS5pZCk7IH07XHJcbiAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYW5jZWxPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIGlmIChjYW5jZWxPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBjYW5jZWxPcHRpb25zLmNhbmNlbEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzKGVudHJ5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgdmFyIGZpbmRMaXN0ZW5lckVudHJ5ID0gZnVuY3Rpb24gKGNvbXBhcmF0b3IpIHtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9jID0gQXJyYXkuZnJvbShsaXN0ZW5lck1hcC52YWx1ZXMoKSk7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IF9jW19pXTtcclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IoZW50cnkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIH07XHJcbiAgICB2YXIgc3RhcnRMaXN0ZW5pbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KGZ1bmN0aW9uIChleGlzdGluZ0VudHJ5KSB7IHJldHVybiBleGlzdGluZ0VudHJ5LmVmZmVjdCA9PT0gb3B0aW9ucy5lZmZlY3Q7IH0pO1xyXG4gICAgICAgIGlmICghZW50cnkpIHtcclxuICAgICAgICAgICAgZW50cnkgPSBjcmVhdGVMaXN0ZW5lckVudHJ5KG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgfTtcclxuICAgIHZhciBzdG9wTGlzdGVuaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgX2MgPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpLCB0eXBlID0gX2MudHlwZSwgZWZmZWN0ID0gX2MuZWZmZWN0LCBwcmVkaWNhdGUgPSBfYy5wcmVkaWNhdGU7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gZmluZExpc3RlbmVyRW50cnkoZnVuY3Rpb24gKGVudHJ5Mikge1xyXG4gICAgICAgICAgICB2YXIgbWF0Y2hQcmVkaWNhdGVPclR5cGUgPSB0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiA/IGVudHJ5Mi50eXBlID09PSB0eXBlIDogZW50cnkyLnByZWRpY2F0ZSA9PT0gcHJlZGljYXRlO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hQcmVkaWNhdGVPclR5cGUgJiYgZW50cnkyLmVmZmVjdCA9PT0gZWZmZWN0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChlbnRyeSkge1xyXG4gICAgICAgICAgICBlbnRyeS51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICEhZW50cnk7XHJcbiAgICB9O1xyXG4gICAgdmFyIG5vdGlmeUxpc3RlbmVyID0gZnVuY3Rpb24gKGVudHJ5LCBhY3Rpb24sIGFwaSwgZ2V0T3JpZ2luYWxTdGF0ZSkgeyByZXR1cm4gX19hc3luYyhfdGhpcywgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpbnRlcm5hbFRhc2tDb250cm9sbGVyLCB0YWtlLCBhdXRvSm9pblByb21pc2VzLCBsaXN0ZW5lckVycm9yXzE7XHJcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxUYXNrQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB0YWtlID0gY3JlYXRlVGFrZVBhdHRlcm4oc3RhcnRMaXN0ZW5pbmcsIGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICBhdXRvSm9pblByb21pc2VzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAxO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMSwgMywgNCwgNl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LnBlbmRpbmcuYWRkKGludGVybmFsVGFza0NvbnRyb2xsZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UucmVzb2x2ZShlbnRyeS5lZmZlY3QoYWN0aW9uLCBhc3NpZ24oe30sIGFwaSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3JpZ2luYWxTdGF0ZTogZ2V0T3JpZ2luYWxTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogZnVuY3Rpb24gKHByZWRpY2F0ZSwgdGltZW91dCkgeyByZXR1cm4gdGFrZShwcmVkaWNhdGUsIHRpbWVvdXQpLnRoZW4oQm9vbGVhbik7IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlOiB0YWtlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOiBjcmVhdGVQYXVzZShpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogZXh0cmEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yazogY3JlYXRlRm9yayhpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCwgYXV0b0pvaW5Qcm9taXNlcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZTogZW50cnkudW5zdWJzY3JpYmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lck1hcC5zZXQoZW50cnkuaWQsIGVudHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmZvckVhY2goZnVuY3Rpb24gKGNvbnRyb2xsZXIsIF8sIHNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPT0gaW50ZXJuYWxUYXNrQ29udHJvbGxlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGNvbnRyb2xsZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA2XTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckVycm9yXzEgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEobGlzdGVuZXJFcnJvcl8xIGluc3RhbmNlb2YgVGFza0Fib3J0RXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVseU5vdGlmeUVycm9yKG9uRXJyb3IsIGxpc3RlbmVyRXJyb3JfMSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VkQnk6IFwiZWZmZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDZdO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLmFsbFNldHRsZWQoYXV0b0pvaW5Qcm9taXNlcyldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGludGVybmFsVGFza0NvbnRyb2xsZXIsIGxpc3RlbmVyQ29tcGxldGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmRlbGV0ZShpbnRlcm5hbFRhc2tDb250cm9sbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzcgLyplbmRmaW5hbGx5Ki9dO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzIgLypyZXR1cm4qL107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pOyB9O1xyXG4gICAgdmFyIGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUobGlzdGVuZXJNYXApO1xyXG4gICAgdmFyIG1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoYXBpKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIGlmICghaXNBY3Rpb24oYWN0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWRkTGlzdGVuZXIubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRMaXN0ZW5pbmcoYWN0aW9uLnBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2xlYXJBbGxMaXN0ZW5lcnMubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgICAgICBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZW1vdmVMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdG9wTGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsU3RhdGUgPSBhcGkuZ2V0U3RhdGUoKTtcclxuICAgICAgICB2YXIgZ2V0T3JpZ2luYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3RhdGUgPT09IElOVEVSTkFMX05JTF9UT0tFTikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFsbSArIFwiOiBnZXRPcmlnaW5hbFN0YXRlIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFN0YXRlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBuZXh0KGFjdGlvbik7XHJcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lck1hcC5zaXplID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGFwaS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyRW50cmllcyA9IEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBsaXN0ZW5lckVudHJpZXNfMSA9IGxpc3RlbmVyRW50cmllczsgX2kgPCBsaXN0ZW5lckVudHJpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBsaXN0ZW5lckVudHJpZXNfMVtfaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bkxpc3RlbmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBlbnRyeS5wcmVkaWNhdGUoYWN0aW9uLCBjdXJyZW50U3RhdGUsIG9yaWdpbmFsU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAocHJlZGljYXRlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgcHJlZGljYXRlRXJyb3IsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZEJ5OiBcInByZWRpY2F0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihlbnRyeSwgYWN0aW9uLCBhcGksIGdldE9yaWdpbmFsU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICBvcmlnaW5hbFN0YXRlID0gSU5URVJOQUxfTklMX1RPS0VOO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTsgfTsgfTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWlkZGxld2FyZTogbWlkZGxld2FyZSxcclxuICAgICAgICBzdGFydExpc3RlbmluZzogc3RhcnRMaXN0ZW5pbmcsXHJcbiAgICAgICAgc3RvcExpc3RlbmluZzogc3RvcExpc3RlbmluZyxcclxuICAgICAgICBjbGVhckxpc3RlbmVyczogY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmVcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2F1dG9CYXRjaEVuaGFuY2VyLnRzXHJcbnZhciBTSE9VTERfQVVUT0JBVENIID0gXCJSVEtfYXV0b0JhdGNoXCI7XHJcbnZhciBwcmVwYXJlQXV0b0JhdGNoZWQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAocGF5bG9hZCkge1xyXG4gICAgdmFyIF9jO1xyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICBtZXRhOiAoX2MgPSB7fSwgX2NbU0hPVUxEX0FVVE9CQVRDSF0gPSB0cnVlLCBfYylcclxuICAgIH0pO1xyXG59OyB9O1xyXG52YXIgcHJvbWlzZTtcclxudmFyIHF1ZXVlTWljcm90YXNrU2hpbSA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PT0gXCJmdW5jdGlvblwiID8gcXVldWVNaWNyb3Rhc2suYmluZCh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IGdsb2JhbFRoaXMpIDogZnVuY3Rpb24gKGNiKSB7IHJldHVybiAocHJvbWlzZSB8fCAocHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpKSkudGhlbihjYikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICB0aHJvdyBlcnI7XHJcbn0sIDApOyB9KTsgfTtcclxudmFyIGNyZWF0ZVF1ZXVlV2l0aFRpbWVyID0gZnVuY3Rpb24gKHRpbWVvdXQpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobm90aWZ5KSB7XHJcbiAgICAgICAgc2V0VGltZW91dChub3RpZnksIHRpbWVvdXQpO1xyXG4gICAgfTtcclxufTtcclxudmFyIHJBRiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcigxMCk7XHJcbnZhciBhdXRvQmF0Y2hFbmhhbmNlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7IHR5cGU6IFwicmFmXCIgfTsgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzdG9yZSA9IG5leHQuYXBwbHkodm9pZCAwLCBhcmdzKTtcclxuICAgICAgICB2YXIgbm90aWZ5aW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSBmYWxzZTtcclxuICAgICAgICB2YXIgbm90aWZpY2F0aW9uUXVldWVkID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IG5ldyBTZXQoKTtcclxuICAgICAgICB2YXIgcXVldWVDYWxsYmFjayA9IG9wdGlvbnMudHlwZSA9PT0gXCJ0aWNrXCIgPyBxdWV1ZU1pY3JvdGFza1NoaW0gOiBvcHRpb25zLnR5cGUgPT09IFwicmFmXCIgPyByQUYgOiBvcHRpb25zLnR5cGUgPT09IFwiY2FsbGJhY2tcIiA/IG9wdGlvbnMucXVldWVOb3RpZmljYXRpb24gOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcihvcHRpb25zLnRpbWVvdXQpO1xyXG4gICAgICAgIHZhciBub3RpZnlMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvblF1ZXVlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2spIHtcclxuICAgICAgICAgICAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobCkgeyByZXR1cm4gbCgpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLCB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gKGxpc3RlbmVyMikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHdyYXBwZWRMaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vdGlmeWluZyAmJiBsaXN0ZW5lcjIoKTsgfTtcclxuICAgICAgICAgICAgICAgIHZhciB1bnN1YnNjcmliZSA9IHN0b3JlLnN1YnNjcmliZSh3cmFwcGVkTGlzdGVuZXIpO1xyXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLmFkZChsaXN0ZW5lcjIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIyKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmeWluZyA9ICEoKF9hID0gYWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBhY3Rpb24ubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hW1NIT1VMRF9BVVRPQkFUQ0hdKTtcclxuICAgICAgICAgICAgICAgICAgICBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9ICFub3RpZnlpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm90aWZpY2F0aW9uUXVldWVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25RdWV1ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVDYWxsYmFjayhub3RpZnlMaXN0ZW5lcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaChhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZ5aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTsgfTtcclxufTtcclxuLy8gc3JjL2luZGV4LnRzXHJcbmVuYWJsZUVTNSgpO1xyXG5leHBvcnQgeyBFbmhhbmNlckFycmF5LCBNaWRkbGV3YXJlQXJyYXksIFNIT1VMRF9BVVRPQkFUQ0gsIFRhc2tBYm9ydEVycm9yLCBhZGRMaXN0ZW5lciwgYXV0b0JhdGNoRW5oYW5jZXIsIGNsZWFyQWxsTGlzdGVuZXJzLCBjb25maWd1cmVTdG9yZSwgY3JlYXRlQWN0aW9uLCBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSwgY3JlYXRlQXN5bmNUaHVuaywgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IsIGNyZWF0ZUVudGl0eUFkYXB0ZXIsIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSwgY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlLCBkZWZhdWx0MiBhcyBjcmVhdGVOZXh0U3RhdGUsIGNyZWF0ZVJlZHVjZXIsIGNyZWF0ZVNlbGVjdG9yMiBhcyBjcmVhdGVTZWxlY3RvciwgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLCBjcmVhdGVTbGljZSwgY3VycmVudDIgYXMgY3VycmVudCwgZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlLCBmcmVlemUsIGdldERlZmF1bHRNaWRkbGV3YXJlLCBnZXRUeXBlLCBpc0FjdGlvbiwgaXNBY3Rpb25DcmVhdG9yLCBpc0FsbE9mLCBpc0FueU9mLCBpc0FzeW5jVGh1bmtBY3Rpb24sIGlzRHJhZnQ0IGFzIGlzRHJhZnQsIGlzRlNBIGFzIGlzRmx1eFN0YW5kYXJkQWN0aW9uLCBpc0Z1bGZpbGxlZCwgaXNJbW11dGFibGVEZWZhdWx0LCBpc1BlbmRpbmcsIGlzUGxhaW4sIGlzUGxhaW5PYmplY3QsIGlzUmVqZWN0ZWQsIGlzUmVqZWN0ZWRXaXRoVmFsdWUsIG1pbmlTZXJpYWxpemVFcnJvciwgbmFub2lkLCBvcmlnaW5hbCwgcHJlcGFyZUF1dG9CYXRjaGVkLCByZW1vdmVMaXN0ZW5lciwgdW53cmFwUmVzdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZHV4LXRvb2xraXQuZXNtLmpzLm1hcCIsICJcbnR5cGUgUmVxUGFyYW1zID0ge1trOnN0cmluZ106c3RyaW5nfXx1bmRlZmluZWQgXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1ZXN0KFxuICBwYXRoOiBzdHJpbmcsXG4gIHJlcVBhcmFtczpSZXFQYXJhbXMsXG4gIGluaXQ/OiBSZXF1ZXN0SW5pdCB8IHVuZGVmaW5lZCxcbiAgYXBpVXJsPzogc3RyaW5nXG4pOiBQcm9taXNlPGFueT4ge1xuICBjb25zdCB1cmwgPSAoYXBpVXJsIHx8IHByb2Nlc3MuZW52LlJFQUNUX0FQUF9BUElVUkwpICsgcGF0aDtcbiAgLy9jb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwucmVwbGFjZSgvKFteOl1cXC8pXFwvKy9nLCBcIiQxXCIpLCB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCArIChyZXFQYXJhbXMgPyAoJz8nICsgbmV3IFVSTFNlYXJjaFBhcmFtcyhPYmplY3QuZW50cmllcyhyZXFQYXJhbXMpKS50b1N0cmluZygpKSA6ICcnKSwge1xuICAgIC4uLihpbml0ID8gaW5pdCA6IHt9KSxcbiAgICAvL2hlYWRlcnM6IHsgLi4uKGluaXQ/LmhlYWRlcnMgfHwge30pLCAuLi5nZXRBdXRoSGVhZGVycygpIH1cbiAgfSk7XG4gIGlmICghcmVzLm9rKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBGYWlsdXJlIGxvYWRpbmcgJHtyZXMudXJsfSB3aXRoIHN0YXR1cyAke3Jlcy5zdGF0dXN9ICgke3Jlcy5zdGF0dXNUZXh0fSlgO1xuICAgIGNvbnNvbGUuZGlyKG1lc3NhZ2UpO1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpXG4gIH1cbiAgcmV0dXJuIGF3YWl0IHJlcy5qc29uKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBQYWdlPFQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBhZ2U6IG51bWJlcixcbiAgICBwdWJsaWMgbnVtRWxlbWVudHM6IG51bWJlcixcbiAgICBwdWJsaWMgdG90YWxQYWdlczogbnVtYmVyLFxuICAgIHB1YmxpYyB0b3RhbEVsZW1lbnRzOiBudW1iZXIsXG4gICAgcHVibGljIGVsZW1lbnRzOiBUW10sXG4gICAgcHVibGljIGZhY2V0RmllbGRzVG9Db3VudHM6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIG51bWJlcj4+XG4gICkge31cblxuICBtYXA8TmV3VHlwZT4oZm46IChUKSA9PiBOZXdUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBQYWdlPE5ld1R5cGU+KFxuICAgICAgdGhpcy5wYWdlLFxuICAgICAgdGhpcy5udW1FbGVtZW50cyxcbiAgICAgIHRoaXMudG90YWxQYWdlcyxcbiAgICAgIHRoaXMudG90YWxFbGVtZW50cyxcbiAgICAgIHRoaXMuZWxlbWVudHMubWFwKGZuKSxcbiAgICAgIHRoaXMuZmFjZXRGaWVsZHNUb0NvdW50c1xuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2luYXRlZDxSZXNUeXBlPihcbiAgcGF0aDogc3RyaW5nLFxuICByZXFQYXJhbXM/OiBSZXFQYXJhbXMsXG4gIGFwaVVybD86IHN0cmluZ1xuKTogUHJvbWlzZTxQYWdlPFJlc1R5cGU+PiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldDxhbnk+KHBhdGgsIHJlcVBhcmFtcywgYXBpVXJsKTtcblxuICByZXR1cm4gbmV3IFBhZ2U8UmVzVHlwZT4oXG5cdHJlcy5wYWdlIHx8IDAsXG5cdHJlcy5udW1FbGVtZW50cyB8fCAwLFxuXHRyZXMudG90YWxQYWdlcyB8fCAwLFxuXHRyZXMudG90YWxFbGVtZW50cyB8fCAwLFxuXHRyZXMuZWxlbWVudHMgfHwgW10sXG5cdHJlcy5mYWNldEZpZWxkc1RvQ291bnRzIHx8IG5ldyBNYXAoKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0PFJlc1R5cGU+KHBhdGg6IHN0cmluZywgcmVxUGFyYW1zPzpSZXFQYXJhbXMsIGFwaVVybD86IHN0cmluZyk6IFByb21pc2U8UmVzVHlwZT4ge1xuICByZXR1cm4gcmVxdWVzdChwYXRoLCByZXFQYXJhbXMsIHVuZGVmaW5lZCwgYXBpVXJsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBvc3Q8UmVxVHlwZSwgUmVzVHlwZSA9IGFueT4oXG4gIHBhdGg6IHN0cmluZyxcbiAgcmVxUGFyYW1zOiBSZXFQYXJhbXMsXG4gIGJvZHk6IFJlcVR5cGVcbik6IFByb21pc2U8UmVzVHlwZT4ge1xuICByZXR1cm4gcmVxdWVzdChwYXRoLCByZXFQYXJhbXMsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHV0PFJlcVR5cGUsIFJlc1R5cGUgPSBhbnk+KFxuICBwYXRoOiBzdHJpbmcsXG4gIHJlcVBhcmFtczogUmVxUGFyYW1zLFxuICBib2R5OiBSZXFUeXBlXG4pOiBQcm9taXNlPFJlc1R5cGU+IHtcbiAgcmV0dXJuIHJlcXVlc3QocGF0aCwgcmVxUGFyYW1zLCB7XG4gICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIH0sXG4gIH0pO1xufVxuIiwgImZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyQXJyYXkpIHtcbiAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgaWYgKHR5cGVvZiBzdHJBcnJheVswXSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgfVxuXG4gIC8vIElmIHRoZSBmaXJzdCBwYXJ0IGlzIGEgcGxhaW4gcHJvdG9jb2wsIHdlIGNvbWJpbmUgaXQgd2l0aCB0aGUgbmV4dCBwYXJ0LlxuICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICBzdHJBcnJheVswXSA9IGZpcnN0ICsgc3RyQXJyYXlbMF07XG4gIH1cblxuICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15maWxlOlxcL1xcL1xcLy8pKSB7XG4gICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vJyk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbXBvbmVudCA9IHN0ckFycmF5W2ldO1xuXG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgIGlmIChpID4gMCkge1xuICAgICAgLy8gUmVtb3ZpbmcgdGhlIHN0YXJ0aW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgZmlyc3QuXG4gICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICB9XG4gICAgaWYgKGkgPCBzdHJBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICB9XG5cbiAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgfVxuXG4gIHZhciBzdHIgPSByZXN1bHRBcnJheS5qb2luKCcvJyk7XG4gIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9cXC8oXFw/fCZ8I1teIV0pL2csICckMScpO1xuXG4gIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgc3RyID0gcGFydHMuc2hpZnQoKSArIChwYXJ0cy5sZW5ndGggPiAwID8gJz8nOiAnJykgKyBwYXJ0cy5qb2luKCcmJyk7XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXJsSm9pbigpIHtcbiAgdmFyIGlucHV0O1xuXG4gIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgIGlucHV0ID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlQXN5bmNUaHVuaywgY3JlYXRlU2xpY2UsIFBheWxvYWRBY3Rpb24gfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSBcIi4uLy4uL2FwcC9hcGlcIjtcbmltcG9ydCB1cmxKb2luIGZyb20gXCJ1cmwtam9pblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvbWVTdGF0ZSB7XG4gIGJhbm5lclRleHQ6IHN0cmluZztcbiAgc3RhdHM6IFN0YXRzIHwgdW5kZWZpbmVkO1xufVxuZXhwb3J0IGludGVyZmFjZSBTdGF0cyB7XG4gIG51bWJlck9mT250b2xvZ2llczogbnVtYmVyO1xuICBudW1iZXJPZkNsYXNzZXM6IG51bWJlcjtcbiAgbnVtYmVyT2ZQcm9wZXJ0aWVzOiBudW1iZXI7XG4gIG51bWJlck9mSW5kaXZpZHVhbHM6IG51bWJlcjtcbiAgbGFzdE1vZGlmaWVkOiBzdHJpbmc7XG59XG5jb25zdCBpbml0aWFsU3RhdGU6IEhvbWVTdGF0ZSA9IHtcbiAgc3RhdHM6IHVuZGVmaW5lZCxcbiAgYmFubmVyVGV4dDogXCJcIixcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdGF0cyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwiaG9tZV9zdGF0c1wiLFxuICBhc3luYyAoYXJnLCB7IHJlamVjdFdpdGhWYWx1ZSB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBnZXQ8U3RhdHM+KGBhcGkvdjIvc3RhdHNgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRCYW5uZXJUZXh0ID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJob21lX2Jhbm5lclwiLFxuICBhc3luYyAoYXJnLCB7IHJlamVjdFdpdGhWYWx1ZSB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybEpvaW4ocHJvY2Vzcy5lbnYuUFVCTElDX1VSTCEsIFwiYmFubmVyLnR4dFwiKSk7XG4gICAgICByZXR1cm4gcmVzLnRleHQoKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgaG9tZVNsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICBuYW1lOiBcImhvbWVcIixcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge30sXG4gIGV4dHJhUmVkdWNlcnM6IChidWlsZGVyKSA9PiB7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0U3RhdHMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBIb21lU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxTdGF0cz4pID0+IHtcbiAgICAgICAgc3RhdGUuc3RhdHMgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRTdGF0cy5yZWplY3RlZCwgKHN0YXRlOiBIb21lU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLnN0YXRzID0gaW5pdGlhbFN0YXRlLnN0YXRzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEJhbm5lclRleHQuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBIb21lU3RhdGUsIGFjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmJhbm5lclRleHQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRCYW5uZXJUZXh0LnJlamVjdGVkLCAoc3RhdGU6IEhvbWVTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuYmFubmVyVGV4dCA9IGluaXRpYWxTdGF0ZS5iYW5uZXJUZXh0O1xuICAgIH0pO1xuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGhvbWVTbGljZS5yZWR1Y2VyO1xuIiwgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgQ2xhc3MgZnJvbSBcIi4uL21vZGVsL0NsYXNzXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi9tb2RlbC9FbnRpdHlcIjtcbmltcG9ydCBJbmRpdmlkdWFsIGZyb20gXCIuLi9tb2RlbC9JbmRpdmlkdWFsXCI7XG5pbXBvcnQgUHJvcGVydHkgZnJvbSBcIi4uL21vZGVsL1Byb3BlcnR5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5PFQ+KG9iajogVCB8IFRbXSk6IFRbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9IGVsc2UgaWYgKG9iaikge1xuICAgIHJldHVybiBbb2JqXTtcbiAgfVxuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gIHJldHVybiAoTWF0aC5yYW5kb20oKSAqIE1hdGgucG93KDIsIDU0KSkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydEJ5S2V5cyhhOiBhbnksIGI6IGFueSkge1xuICBjb25zdCBrZXlBID0gYS5rZXkudG9VcHBlckNhc2UoKTtcbiAgY29uc3Qga2V5QiA9IGIua2V5LnRvVXBwZXJDYXNlKCk7XG4gIHJldHVybiBrZXlBID09PSBrZXlCID8gMCA6IGtleUEgPiBrZXlCID8gMSA6IC0xO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weVRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZykge1xuICBpZiAoXCJjbGlwYm9hcmRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiLCB0cnVlLCB0ZXh0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJldmlvdXModmFsdWU6IGFueSkge1xuICBjb25zdCByZWYgPSB1c2VSZWYoKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHJlZi5jdXJyZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKHByb3BlcnRpZXM6IGFueSk6IEVudGl0eSB7XG4gIGNvbnN0IHR5cGVzID0gcHJvcGVydGllc1tcInR5cGVcIl0gfHwgW107XG4gIGlmICh0eXBlcy5pbmRleE9mKFwiY2xhc3NcIikgIT09IC0xKSByZXR1cm4gbmV3IENsYXNzKHByb3BlcnRpZXMpO1xuICBpZiAodHlwZXMuaW5kZXhPZihcInByb3BlcnR5XCIpICE9PSAtMSkgcmV0dXJuIG5ldyBQcm9wZXJ0eShwcm9wZXJ0aWVzKTtcbiAgaWYgKHR5cGVzLmluZGV4T2YoXCJpbmRpdmlkdWFsXCIpICE9PSAtMSkgcmV0dXJuIG5ldyBJbmRpdmlkdWFsKHByb3BlcnRpZXMpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVudGl0eSB0eXBlOiBcIiArIEpTT04uc3RyaW5naWZ5KHByb3BlcnRpZXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvQXBpUGFyYW1zKHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zKSB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtc0NvcHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIHNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4ge1xuICAgIGxldCBuZXdLZXkgPSBrZXkuaW5jbHVkZXMoXCJfXCIpID8gdG9DYW1lbChrZXkpIDoga2V5O1xuICAgIC8vIHNwZWNpYWwgY2FzZXNcbiAgICBpZiAobmV3S2V5ID09PSBcIm9ib0lkXCIpIG5ld0tleSA9IFwiY3VyaWVcIjtcbiAgICBzZWFyY2hQYXJhbXNDb3B5LmFwcGVuZChuZXdLZXksIHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBzZWFyY2hQYXJhbXNDb3B5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9DYW1lbChzdHI6IHN0cmluZykge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLV9dW2Etel0pL2dpLCAoJDEpID0+IHtcbiAgICByZXR1cm4gJDEudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiLVwiLCBcIlwiKS5yZXBsYWNlKFwiX1wiLCBcIlwiKTtcbiAgfSk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVpZmllZDxUPiB7XG4gIHZhbHVlOiBUO1xuICBheGlvbXM6IGFueVtdIHwgbnVsbDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBULCBheGlvbXM6IGFueVtdIHwgbnVsbCkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb248VD4oanNvbk5vZGU6IGFueSk6IFJlaWZpZWQ8VD5bXSB7XG4gICAgaWYgKCFqc29uTm9kZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShqc29uTm9kZSkpIHtcbiAgICAgIGpzb25Ob2RlID0gW2pzb25Ob2RlXTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbk5vZGUubWFwKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlLnR5cGUpICYmXG4gICAgICAgIHZhbHVlLnR5cGUuaW5kZXhPZihcInJlaWZpY2F0aW9uXCIpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVpZmllZDxUPih2YWx1ZS52YWx1ZSwgdmFsdWUuYXhpb21zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVpZmllZDxUPih2YWx1ZSwgbnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBoYXNNZXRhZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5heGlvbXMgIT0gbnVsbDtcbiAgfVxuXG4gIC8vIENvbWJpbmUgYWxsIG9mIHRoZSBheGlvbXMgaW50byBvbmUgbWV0YWRhdGEgb2JqZWN0IGZvciB0aGUgcHJvcGVydHkuXG4gIC8vXG4gIC8vIG5vdGU6IFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgc2FtZSBwcm9wZXJ0eSBpcyByZWlmaWVkIG11bHRpcGxlIHRpbWVzIHdpdGhcbiAgLy8gZGlmZmVyZW50IG1ldGFkYXRhLCBpdCB3aWxsIGFsbCBiZSBjb21iaW5lZCBpbiB0aGUgVUkuIFdoZXRoZXIgdGhpcyBpc1xuICAvLyB0aGUgZGVzaXJlZCBiZWhhdmlvdXIgaXMgVEJELlxuICAvL1xuICBnZXRNZXRhZGF0YSgpOiBhbnkgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuYXhpb21zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgcHJvcGVydGllczogYW55ID0ge307XG5cbiAgICBmb3IgKGxldCBheGlvbSBvZiB0aGlzLmF4aW9tcykge1xuICAgICAgZm9yIChsZXQgayBvZiBPYmplY3Qua2V5cyhheGlvbSkpIHtcbiAgICAgICAgbGV0IHYgPSBheGlvbVtrXTtcbiAgICAgICAgbGV0IGV4aXN0aW5nOiBhbnlbXSB8IHVuZGVmaW5lZCA9IHByb3BlcnRpZXNba107XG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhpc3RpbmcucHVzaCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzW2tdID0gW3ZdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cbn1cbiIsICJpbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCJcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRFbnRpdHkge1xuXHRkZWZpbmVkQnk/OnN0cmluZ1tdXG5cdGlyaT86c3RyaW5nXG5cdHVybD86c3RyaW5nXG5cdG51bUFwcGVhcnNJbjpzdHJpbmdcblx0aGFzTG9jYWxEZWZpbml0aW9uOmJvb2xlYW5cblx0bGFiZWw6c3RyaW5nfHN0cmluZ1tdXG5cdHR5cGU6c3RyaW5nW11cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlua2VkRW50aXRpZXMge1xuXG5cdGxpbmtlZEVudGl0aWVzOnsgW2tleTpzdHJpbmddOkxpbmtlZEVudGl0eSB9XG5cblx0Y29uc3RydWN0b3IobGlua2VkRW50aXRpZXM6YW55KSB7XG5cdFx0aWYobGlua2VkRW50aXRpZXMpXG5cdFx0XHR0aGlzLmxpbmtlZEVudGl0aWVzID0gey4uLmxpbmtlZEVudGl0aWVzfVxuXHRcdGVsc2Vcblx0XHRcdHRoaXMubGlua2VkRW50aXRpZXMgPSB7fVxuXHR9XG5cblx0bWVyZ2VXaXRoKGxpbmtlZEVudGl0aWVzOmFueSk6TGlua2VkRW50aXRpZXMge1xuXHRcdGlmKGxpbmtlZEVudGl0aWVzKVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMsIGxpbmtlZEVudGl0aWVzIH0pXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMgfSlcblx0fVxuXG5cdGdldExhYmVsRm9ySXJpKGlyaTpzdHJpbmcpOnN0cmluZ3x1bmRlZmluZWQge1xuXG5cdFx0bGV0IGxpbmtlZEVudGl0eSA9IHRoaXMubGlua2VkRW50aXRpZXNbaXJpXVxuXG5cdFx0aWYobGlua2VkRW50aXR5KSB7XG5cdFx0XHRsZXQgbGFiZWwgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oIGxpbmtlZEVudGl0eS5sYWJlbCApXG5cdFx0XHRpZihsYWJlbCAmJiBsYWJlbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiBsYWJlbFswXS52YWx1ZVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGdldChpcmk6c3RyaW5nKTpMaW5rZWRFbnRpdHl8dW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5saW5rZWRFbnRpdGllc1tpcmldXG5cdH1cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgVGhpbmcge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlkXCJdO1xuICB9XG5cbiAgZ2V0SXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlyaVwiXTtcbiAgfVxuXG4gIGdldFR5cGUoKTogXCJvbnRvbG9neVwiIHwgXCJjbGFzc1wiIHwgXCJwcm9wZXJ0eVwiIHwgXCJpbmRpdmlkdWFsXCIge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5wcm9wZXJ0aWVzW1widHlwZVwiXSBhcyBzdHJpbmdbXTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKFxuICAgICAgICBbXCJvbnRvbG9neVwiLCBcImNsYXNzXCIsIFwicHJvcGVydHlcIiwgXCJpbmRpdmlkdWFsXCJdLmluZGV4T2YodHlwZSkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgYXMgYW55O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJvbnRvbG9naWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlKCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJvbnRvbG9neVwiOlxuICAgICAgICByZXR1cm4gXCJvbnRvbG9naWVzXCI7XG4gICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgcmV0dXJuIFwiY2xhc3Nlc1wiO1xuICAgICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICAgIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgIHJldHVybiBcImluZGl2aWR1YWxzXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGVcIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmRmVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIlxuICAgIF0pXG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG5cdHJldHVybiB0aGlzLmdldE5hbWVzKClbMF07XG4gIH1cblxuICBnZXROYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbGFiZWxzID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl1cbiAgICApO1xuICAgIGlmIChsYWJlbHMgJiYgbGFiZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBsYWJlbHMubWFwKGxhYmVsID0+IGxhYmVsLnZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gW3RoaXMuZ2V0SXJpKCldO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25cIl0pO1xuICAgIGlmIChkZWZpbml0aW9uICYmIGRlZmluaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRlZmluaXRpb24ubWFwKChkZWYpID0+IGRlZi52YWx1ZSB8fCBcIlwiKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cblxuICBnZXRMYWJlbEZvcklyaShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbGlua2VkRW50aXRpZXMgPSB0aGlzLnByb3BlcnRpZXNbXCJsaW5rZWRFbnRpdGllc1wiXTtcbiAgICBpZiAobGlua2VkRW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IGxhYmVsOlJlaWZpZWQ8c3RyaW5nPltdID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KCBsaW5rZWRFbnRpdGllc1tpZF0/LmxhYmVsICk7XG4gICAgICByZXR1cm4gbGFiZWxbMF0/LnZhbHVlIHx8IGlkXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTpSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbaWRdKSlcbiAgfVxuXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcbmltcG9ydCBUaGluZyBmcm9tIFwiLi9UaGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBFbnRpdHkgZXh0ZW5kcyBUaGluZyB7XG4gIGFic3RyYWN0IGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIGlzQ2Fub25pY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpc0RlZmluaW5nT250b2xvZ3lcIl0gPT09IHRydWU7XG4gIH1cblxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl0gPT09IFwidHJ1ZVwiXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIC8vIG9ubHkgc3VwcG9ydHMgRUZPIGZvciBub3dcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL29ic29sZXRlZF9pbl92ZXJzaW9uXCJdO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZWFzb24oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDAyMzFcIl1cbiAgICApLmNvbmNhdChcbiAgICAgIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL3JlYXNvbl9mb3Jfb2Jzb2xlc2NlbmNlXCJdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVwbGFjZW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMTAwMDAxXCJdO1xuICB9XG5cbiAgZ2V0UmVsYXRlZEZyb20oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wicmVsYXRlZEZyb21cIl0pO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb25Bc0FycmF5KCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25cIl0pO1xuICB9XG5cbiAgaGFzRGlyZWN0Q2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc0RpcmVjdENoaWxkcmVuXCJdID09PSBcInRydWVcIjtcbiAgfVxuXG4gIGhhc0hpZXJhcmNoaWNhbENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNIaWVyYXJjaGljYWxDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RDaGlsZHJlbigpIHx8IHRoaXMuaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1cIl0pO1xuICB9XG5cbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXREZWZpbmVkQnkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5lZEJ5XCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjdXJpZVwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydEZvcm1cIl07XG4gIH1cblxuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGRlZmluaXRpb25Qcm9wZXJ0aWVzID0gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uUHJvcGVydHlcIl0pO1xuICAgIGxldCBzeW5vbnltUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVByb3BlcnR5XCJdKTtcbiAgICBsZXQgaGllcmFyY2hpY2FsUHJvcGVydGllcyA9IGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQcm9wZXJ0eVwiXVxuICAgICk7XG4gICAgbGV0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChsZXQgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAvLyB0aGlzIGlzIGhhbmRsZWQgZXhwbGljaXRseSBpbiBFbnRpdHlQYWdlXG4gICAgICBpZiAocHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiKSBjb250aW51ZTtcblxuICAgICAgbGV0IGxpbmtlZEVudGl0eSA9IHRoaXMuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQocHJlZGljYXRlKVxuICAgICAgaWYgKGxpbmtlZEVudGl0eSAhPSB1bmRlZmluZWQgJiYgbGlua2VkRW50aXR5LnR5cGUuaW5kZXhPZihcIm9iamVjdFByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG4gICAgICBpZiAobGlua2VkRW50aXR5ICE9IHVuZGVmaW5lZCAmJiBsaW5rZWRFbnRpdHkudHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBpbnRlcnByZXRlZCBhcyBkZWZpbml0aW9uL3N5bm9ueW0vaGllcmFyY2hpY2FsLCBkb1xuICAgICAgLy8gbm90IGluY2x1ZGUgaXQgYXMgYW4gYW5ub3RhdGlvblxuICAgICAgaWYgKFxuICAgICAgICBkZWZpbml0aW9uUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xIHx8XG4gICAgICAgIHN5bm9ueW1Qcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTEgfHxcbiAgICAgICAgaGllcmFyY2hpY2FsUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFueXRoaW5nIGluIHRoZSByZGYsIHJkZnMsIG93bCBuYW1lc3BhY2VzIGFyZW4ndCBkaXNwbGF5ZWQgaW4gdGhlIGFubm90YXRpb25zIHNlY3Rpb24uLi5cbiAgICAgIGlmIChcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIC4uLmFwYXJ0IGZyb20gdGhlc2Ugb25lc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNjb21tZW50XCIgJiZcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3NlZUFsc29cIiAmJlxuICAgICAgICAgIC8vIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXlcIiAmJlxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFVuaW9uT2ZcIlxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB3aGlsZSBpbiBnZW5lcmFsIG9ib0luT3dsIG5hbWVzcGFjZSBwcm9wZXJ0aWVzIGFyZSBhbm5vdGF0aW9ucywgc29tZVxuICAgICAgLy8gb2YgdGhlbSB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXlcbiAgICAgIC8vXG4gICAgICBpZiAoXG4gICAgICAgIC8vcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2luU3Vic2V0XCJcbiAgICAgICAgcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2lkXCJcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYW5ub3RhdGlvblByZWRpY2F0ZXMuYWRkKHByZWRpY2F0ZSk7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coXCJBUHNcIik7XG4gICAgLy8gY29uc29sZS5kaXIoQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykpO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIGdldEhpZXJhcmNoaWNhbFBhcmVudFJlaWZpY2F0aW9uQXhpb21zKHBhcmVudElyaTogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGxldCBwIG9mIGhpZXJhcmNoaWNhbFBhcmVudHMpIHtcbiAgICAgIGlmIChwLnZhbHVlID09PSBwYXJlbnRJcmkpIHtcbiAgICAgICAgcmV0dXJuIHAuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuL0VudGl0eVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGFzcyBleHRlbmRzIEVudGl0eSB7XG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQYXJlbnRcIl1cbiAgICApO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViQ2xhc3NPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNlcXVpdmFsZW50Q2xhc3NcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2Rpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SGFzS2V5KCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzS2V5J10pXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuL0VudGl0eVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmRpdmlkdWFsIGV4dGVuZHMgRW50aXR5IHtcbiAgZ2V0UGFyZW50cygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGlyZWN0UGFyZW50XCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihbXSlcbiAgfVxuXG4gIGdldERpZmZlcmVudEZyb20oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaWZmZXJlbnRGcm9tXCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldFNhbWVBcygpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNzYW1lQXNcIl0pO1xuICB9XG5cbiAgZ2V0SW5kaXZpZHVhbFR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZGZUeXBlczogYW55ID0gdGhpcy5nZXRSZGZUeXBlcygpO1xuXG4gICAgaWYgKCFyZGZUeXBlcyB8fCAhQXJyYXkuaXNBcnJheShyZGZUeXBlcykpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmRmVHlwZXMuZmlsdGVyKFxuICAgICAgKHQ6IGFueSkgPT5cbiAgICAgICAgdCAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNOYW1lZEluZGl2aWR1YWxcIiAmJlxuXHRcdCggKCEgKHR5cGVvZiB0ID09PSAnc3RyaW5nJykgfHwgIXQuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikpKVxuICAgICk7XG4gIH1cblxufVxuIiwgImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4vRW50aXR5XCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb3BlcnR5IGV4dGVuZHMgRW50aXR5IHtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5RGlzam9pbnRXaXRoJ10pXG4gIH1cblxuICBnZXRJbnZlcnNlT2YoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdKTtcbiAgfVxuXG4gIGdldERvbWFpbigpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNkb21haW4nXSlcbiAgfVxuXG4gIGdldFJhbmdlKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3JhbmdlJ10pXG4gIH1cblxuICBnZXRQcm9wZXJ0eUNoYWlucygpOlJlaWZpZWQ8YW55PltdIHtcblx0cmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pihcblx0XHR0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eUNoYWluQXhpb21cIl1cblx0KVxuICB9XG5cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5pbXBvcnQgVGhpbmcgZnJvbSBcIi4vVGhpbmdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT250b2xvZ3kgZXh0ZW5kcyBUaGluZyB7XG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lJZFwiXTtcbiAgfVxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgbGV0IG5hbWVzID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1widGl0bGVcIl0gfHwgXCJcIlxuICAgICk7XG4gICAgcmV0dXJuIChuYW1lc1swXSAmJiBuYW1lc1swXS52YWx1ZSkgfHwgdGhpcy5nZXRPbnRvbG9neUlkKCk7XG4gIH1cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBsZXQgZGVzY3JpcHRpb25zID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKGRlc2NyaXB0aW9uc1swXSAmJiBkZXNjcmlwdGlvbnNbMF0udmFsdWUpIHx8IFwiXCI7XG4gIH1cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzb3VyY2VGaWxlVGltZXN0YW1wXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZDbGFzc2VzXCJdKTtcbiAgfVxuICBnZXROdW1Qcm9wZXJ0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mUHJvcGVydGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtSW5kaXZpZHVhbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZJbmRpdmlkdWFsc1wiXSk7XG4gIH1cbiAgZ2V0TG9nb1VSTCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJkZXBpY3RlZF9ieVwiXSB8fCB1bmRlZmluZWQ7XG4gIH1cbiAgZ2V0T250b2xvZ3lQdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X3B1cmxcIl07XG4gIH1cbiAgZ2V0SG9tZXBhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaG9tZXBhZ2VcIl07XG4gIH1cbiAgZ2V0TWFpbGluZ0xpc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibWFpbGluZ19saXN0XCJdO1xuICB9XG4gIGdldFRyYWNrZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1widHJhY2tlclwiXTtcbiAgfVxuICBnZXRWZXJzaW9uSXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3ZlcnNpb25JUklcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSW5mb1wiXTtcbiAgfVxuICBnZXRWZXJzaW9uRnJvbUlyaSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25JcmkgPVxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbklSSVwiXTtcbiAgICBpZiAoIXZlcnNpb25JcmkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZlcnNpb25Gcm9tRGF0ZSA9IHZlcnNpb25JcmkubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Lyk7XG5cbiAgICBpZiAodmVyc2lvbkZyb21EYXRlICYmIHZlcnNpb25Gcm9tRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21EYXRlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2ZXJzaW9uRnJvbU51bWJlciA9IHZlcnNpb25JcmkubWF0Y2goL1xcL3ZbZC5dLipcXC8vKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbU51bWJlclxuICAgICAgICA/IHZlcnNpb25Gcm9tTnVtYmVyWzBdLnJlcGxhY2VBbGwoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCJ2XCIsIFwiXCIpXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0TG9hZGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxvYWRlZFwiXTtcbiAgfVxuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChsZXQgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAocHJlZGljYXRlID09PSBcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDcwMFwiKSB7XG4gICAgICAgIC8vIFwiaGFzIHByZWZlcnJlZCByb290IHRlcm1cIlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYW55dGhpbmcgaW4gdGhlIHJkZiwgcmRmcywgb3dsIG5hbWVzcGFjZXMgYXJlbid0IGNvbnNpZGVyZWQgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChcbiAgICAgICAgIShcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikgfHxcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIikgfHxcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgYW5ub3RhdGlvblByZWRpY2F0ZXMuYWRkKHByZWRpY2F0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpIGFzIHN0cmluZ1tdO1xuICB9XG4gIGdldFByZWZlcnJlZFJvb3RzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoYXNQcmVmZXJyZWRSb290XCJdKTtcbiAgfVxuICBnZXRMYW5ndWFnZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImxhbmd1YWdlXCJdKTtcbiAgfVxuICBnZXRJbXBvcnRzRnJvbSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaW1wb3J0c0Zyb21cIl0pO1xuICB9XG4gIGdldEV4cG9ydHNUbygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZXhwb3J0c1RvXCJdKTtcbiAgfVxufVxuIiwgImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IE11bHRpbWFwIGZyb20gXCJtdWx0aW1hcFwiO1xuaW1wb3J0IEVudGl0eSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvRW50aXR5XCI7XG5cbi8qIFVuZmxhdHRlbnMgYSBsaXN0IG9mIGVudGl0aWVzIGludG86XG4gKlx0LSBBIGxpc3Qgb2Ygcm9vdCBlbnRpdGllc1xuICogXHQtIEEgbWFwcGluZyBvZiBVUkkgdG8gbGlzdCBvZiBjaGlsZCBlbnRpdGllc1xuICpcbiAqIFVzZWQgYnkgRW50aXR5VHJlZSBhbmQgRW50aXR5R3JhcGhcbiAqL1xuXG4gaW50ZXJmYWNlIFBhcmVudENoaWxkUmVsYXRpb24ge1xuXHRwYXJlbnQ6RW50aXR5LFxuXHRjaGlsZDpFbnRpdHlcblx0cGFyZW50UmVsYXRpb25Ub0NoaWxkOnN0cmluZ3xudWxsXG5cdGNoaWxkUmVsYXRpb25Ub1BhcmVudDpzdHJpbmd8bnVsbFxuIH1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXh0cmFjdEVudGl0eUhpZXJhcmNoeShlbnRpdGllczogRW50aXR5W10pOiB7XG4gIHJvb3RFbnRpdGllczogRW50aXR5W107XG4gIHBhcmVudFRvQ2hpbGRSZWxhdGlvbnM6IE11bHRpbWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbj47XG59IHtcbiAgbGV0IGNoaWxkVG9QYXJlbnRSZWxhdGlvbnM6IE11bHRpbWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbj4gPSBuZXcgTXVsdGltYXAoKTtcblxuICBsZXQgdXJpVG9Ob2RlOiBNYXA8c3RyaW5nLCBFbnRpdHk+ID0gbmV3IE1hcCgpO1xuICBmb3IgKGxldCBlbnRpdHkgb2YgZW50aXRpZXMpIHtcbiAgICB1cmlUb05vZGUuc2V0KGVudGl0eS5nZXRJcmkoKSwgZW50aXR5KTtcbiAgfVxuXG4gIGZvciAobGV0IGVudGl0eSBvZiBlbnRpdGllcykge1xuICAgIGlmIChpc1RvcChlbnRpdHkuZ2V0SXJpKCkpKSBjb250aW51ZTtcblxuICAgIGZvciAobGV0IHBhcmVudFJlbGF0aW9uIG9mIGVudGl0eS5nZXRQYXJlbnRzKCkpIHtcblxuICAgICAgbGV0IHBhcmVudElyaSA9IHBhcmVudFJlbGF0aW9uLnZhbHVlO1xuICAgICAgbGV0IHBhcmVudEVudGl0eSA9IHVyaVRvTm9kZS5nZXQocGFyZW50SXJpKTtcblxuICAgICAgaWYgKGlzVG9wKHBhcmVudElyaSkpIGNvbnRpbnVlO1xuXG4gICAgICBpZighIChwYXJlbnRFbnRpdHkgaW5zdGFuY2VvZiBFbnRpdHkpKSB7XG5cdGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGFyZW50UmVsYXRpb25Ub0NoaWxkLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnRcblxuICAgICAgaWYoZW50aXR5LmdldFR5cGUoKSA9PT0gJ2luZGl2aWR1YWwnKSB7XG5cblx0Ly8gSW4gdGhlIGNhc2Ugb2YgaW5kaXZpZHVhbHMsIHRoZSBjaGlsZC0+cGFyZW50IHJlbGF0aW9uc2hpcCBpcyBhbHdheXNcblx0Ly8gcmRmOnR5cGUgYW5kIHRoZXJlIGlzIG5vIGV4cGxpY2l0IHBhcmVudC0+Y2hpbGQgcmVsYXRpb25zaGlwLlxuXG5cdGNoaWxkUmVsYXRpb25Ub1BhcmVudCA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZSdcblx0cGFyZW50UmVsYXRpb25Ub0NoaWxkID0gbnVsbFxuXG4gICAgICB9IGVsc2UgaWYoZW50aXR5LmdldFR5cGUoKSA9PSAnY2xhc3MnKSB7XG5cblx0Ly8gSW4gdGhlIGNhc2Ugb2YgY2xhc3NlcywgdGhlIHJlbGF0aW9ucyBhcmUgcHJvdmlkZWQgaW4gdGhlIG1ldGFkYXRhLlxuXG5cdHBhcmVudFJlbGF0aW9uVG9DaGlsZCA9IFxuXHRcdHBhcmVudFJlbGF0aW9uLmdldE1ldGFkYXRhKClcblx0XHRcdCYmIHBhcmVudFJlbGF0aW9uLmdldE1ldGFkYXRhKClbJ3BhcmVudFJlbGF0aW9uVG9DaGlsZCddIFxuXHRcdFx0JiYgcGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVsncGFyZW50UmVsYXRpb25Ub0NoaWxkJ11bMF07XG5cblx0Y2hpbGRSZWxhdGlvblRvUGFyZW50ID0gXG5cdFx0cGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVxuXHRcdFx0JiYgcGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVsnY2hpbGRSZWxhdGlvblRvUGFyZW50J10gXG5cdFx0XHQmJiBwYXJlbnRSZWxhdGlvbi5nZXRNZXRhZGF0YSgpWydjaGlsZFJlbGF0aW9uVG9QYXJlbnQnXVswXTtcblxuICAgICAgfSBlbHNlIHtcblxuXHQvLyBJbiB0aGUgY2FzZSBvZiBwcm9wZXJ0aWVzLCB0aGVyZSBhcmUgbm8gcmVsYXRpb25zIHRvIHNob3cuXG5cdC8vIChpdCB3b3VsZCBhbHdheXMgYmUganVzdCBzdWJQcm9wZXJ0eU9mKVxuXHQvL1xuXG4gICAgICB9XG5cbiAgICAgIGxldCByZWxhdGlvbiA9IHtcblx0cGFyZW50OiBwYXJlbnRFbnRpdHksXG5cdGNoaWxkOiBlbnRpdHksXG5cdHBhcmVudFJlbGF0aW9uVG9DaGlsZCxcblx0Y2hpbGRSZWxhdGlvblRvUGFyZW50XG4gICAgICB9XG5cbiAgICAgIGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuc2V0KGVudGl0eS5nZXRJcmkoKSwgcmVsYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBicmVha0N5Y2xlcyA9IGZ1bmN0aW9uIChjdXJyZW50SXJpOnN0cmluZywgdmlzaXRlZElyaXM6IFNldDxzdHJpbmc+KSB7XG4gICAgdmlzaXRlZElyaXMuYWRkKGN1cnJlbnRJcmkpO1xuXG4gICAgbGV0IHBhcmVudFJlbGF0aW9ucyA9IGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuZ2V0KGN1cnJlbnRJcmkpO1xuICAgIGlmIChwYXJlbnRSZWxhdGlvbnMpIHtcbiAgICAgIGZvciAobGV0IHBhcmVudFJlbGF0aW9uIG9mIHBhcmVudFJlbGF0aW9ucykge1xuICAgICAgICBpZiAodmlzaXRlZElyaXMuaGFzKHBhcmVudFJlbGF0aW9uLnBhcmVudC5nZXRJcmkoKSkpIHtcbiAgICAgICAgICAvLyB3ZSBhbHJlYWR5IHNhdyB0aGlzIHBhcmVudCwgcmVtb3ZlIGl0XG5cdCAgY2hpbGRUb1BhcmVudFJlbGF0aW9ucy5kZWxldGUoY3VycmVudElyaSwgcGFyZW50UmVsYXRpb24pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWtDeWNsZXMocGFyZW50UmVsYXRpb24ucGFyZW50LmdldElyaSgpLCBuZXcgU2V0KHZpc2l0ZWRJcmlzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gYnJlYWsgY3ljbGVzIHN0YXJ0aW5nIGZyb20gbGVhZiBlbnRpdGllc1xuICBmb3IgKGxldCBlbnRpdHkgb2YgZW50aXRpZXMpIHtcbiAgICBicmVha0N5Y2xlcyhlbnRpdHkuZ2V0SXJpKCksIG5ldyBTZXQoKSk7XG4gIH1cblxuICBsZXQgcGFyZW50VG9DaGlsZFJlbGF0aW9uczogTXVsdGltYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uPiA9IG5ldyBNdWx0aW1hcCgpO1xuXG4gIGZvcihsZXQgY2hpbGRJcmkgb2YgQXJyYXkuZnJvbShjaGlsZFRvUGFyZW50UmVsYXRpb25zLmtleXMoKSkpIHtcbiAgXHRsZXQgcmVsYXRpb25zID0gY2hpbGRUb1BhcmVudFJlbGF0aW9ucy5nZXQoY2hpbGRJcmkpO1xuXHRmb3IobGV0IHIgb2YgcmVsYXRpb25zKSB7XG5cdFx0cGFyZW50VG9DaGlsZFJlbGF0aW9ucy5zZXQoci5wYXJlbnQuZ2V0SXJpKCksIHIpXG5cdH1cbiAgfVxuXG4gIGxldCByb290RW50aXRpZXMgPSBlbnRpdGllcy5maWx0ZXIoKG5vZGUpID0+IHtcbiAgICBpZiAoaXNUb3Aobm9kZS5nZXRJcmkoKSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuZ2V0KG5vZGUuZ2V0SXJpKCkpIHx8IFtdKS5sZW5ndGggPT09IDA7XG4gIH0pO1xuXG4gIHJldHVybiB7IHJvb3RFbnRpdGllcywgcGFyZW50VG9DaGlsZFJlbGF0aW9ucyB9O1xufVxuXG5mdW5jdGlvbiBpc1RvcChpcmkpIHtcbiAgcmV0dXJuIChcbiAgICBpcmkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVGhpbmdcIiB8fFxuICAgIGlyaSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNUb3BPYmplY3RQcm9wZXJ0eVwiXG4gICk7XG59XG4iLCAiaW1wb3J0IEVudGl0eSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvRW50aXR5XCI7XG5pbXBvcnQgT250b2xvZ3kgZnJvbSBcIi4uLy4uLy4uL21vZGVsL09udG9sb2d5XCI7XG5pbXBvcnQgZXh0cmFjdEVudGl0eUhpZXJhcmNoeSBmcm9tIFwiLi9leHRyYWN0RW50aXR5SGllcmFyY2h5XCI7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gXCIuLi9vbnRvbG9naWVzU2xpY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVHJlZUZyb21FbnRpdGllcyhcbiAgZW50aXRpZXM6IEVudGl0eVtdLFxuICBwcmVmZXJyZWRSb290czogYm9vbGVhbixcbiAgb250b2xvZ3k6IE9udG9sb2d5XG4pOiB7IGFsbE5vZGVzOlRyZWVOb2RlW10sIHJvb3ROb2RlczogVHJlZU5vZGVbXTsgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXM6U2V0PHN0cmluZz4sIG5vZGVDaGlsZHJlbjogYW55IH0ge1xuICBsZXQgeyByb290RW50aXRpZXMsIHBhcmVudFRvQ2hpbGRSZWxhdGlvbnMgfSA9IGV4dHJhY3RFbnRpdHlIaWVyYXJjaHkoZW50aXRpZXMpO1xuXG4gIGNvbnNvbGUubG9nKCdyb290RW50aXRpZXMnKVxuICBjb25zb2xlLmRpcihyb290RW50aXRpZXMpXG4gIGNvbnNvbGUubG9nKCdwYXJlbnRUb0NoaWxkUmVsYXRpb25zJylcbiAgY29uc29sZS5kaXIocGFyZW50VG9DaGlsZFJlbGF0aW9ucylcblxuICBpZiAocHJlZmVycmVkUm9vdHMpIHtcbiAgICBsZXQgcHJlZmVycmVkID0gb250b2xvZ3kuZ2V0UHJlZmVycmVkUm9vdHMoKTtcbiAgICBpZiAocHJlZmVycmVkLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBwcmVmZXJyZWRSb290RW50aXRpZXMgPSBwcmVmZXJyZWQubWFwKFxuICAgICAgICAoaXJpKSA9PiBlbnRpdGllcy5maWx0ZXIoKGVudGl0eSkgPT4gZW50aXR5LmdldElyaSgpID09PSBpcmkpWzBdXG4gICAgICApO1xuICAgICAgcm9vdEVudGl0aWVzID0gcHJlZmVycmVkUm9vdEVudGl0aWVzLmZpbHRlcigoZW50aXR5KSA9PiAhIWVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IGFsbE5vZGVzOlRyZWVOb2RlW10gPSBbXVxuICBsZXQgbm9kZUNoaWxkcmVuOiBhbnkgPSB7fTtcbiAgbGV0IGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzOlNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG5cbiAgcmV0dXJuIHtcbiAgICBhbGxOb2RlczogYWxsTm9kZXMsXG4gICAgcm9vdE5vZGVzOiByb290RW50aXRpZXMubWFwKChyb290RW50aXR5KSA9PlxuICAgICAgY3JlYXRlVHJlZU5vZGUocm9vdEVudGl0eSwgdW5kZWZpbmVkLCAwLCBudWxsLCBudWxsKVxuICAgICksXG4gICAgbm9kZUNoaWxkcmVuLFxuICAgIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzXG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlVHJlZU5vZGUoXG4gICAgbm9kZTogRW50aXR5LFxuICAgIHBhcmVudDogVHJlZU5vZGUgfCB1bmRlZmluZWQsXG4gICAgZGVidWdOdW1JdGVyYXRpb25zOiBudW1iZXIsXG4gICAgcGFyZW50UmVsYXRpb25Ub0NoaWxkOnN0cmluZ3xudWxsLFxuICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudDpzdHJpbmd8bnVsbCxcbiAgKTogVHJlZU5vZGUge1xuICAgIGlmIChkZWJ1Z051bUl0ZXJhdGlvbnMgPiAxMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInByb2JhYmxlIGN5Y2xpYyB0cmVlIChjcmVhdGVUcmVlTm9kZSlcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBwYXJlbnRUb0NoaWxkUmVsYXRpb25zLmdldChub2RlLmdldElyaSgpKSB8fCBbXTtcblxuICAgIGNvbnN0IHRyZWVOb2RlOiBUcmVlTm9kZSA9IHtcbiAgICAgIGFic29sdXRlSWRlbnRpdHk6IHBhcmVudFxuICAgICAgICA/IHBhcmVudC5hYnNvbHV0ZUlkZW50aXR5ICsgXCI7XCIgKyBub2RlLmdldElyaSgpXG4gICAgICAgIDogbm9kZS5nZXRJcmkoKSxcbiAgICAgIGlyaTogbm9kZS5nZXRJcmkoKSxcbiAgICAgIHRpdGxlOiBub2RlLmdldE5hbWUoKSxcbiAgICAgIGV4cGFuZGFibGU6IG5vZGUuaGFzQ2hpbGRyZW4oKSxcbiAgICAgIGVudGl0eTogbm9kZSxcbiAgICAgIG51bURlc2NlbmRhbnRzOlxuICAgICAgICBub2RlLmdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCkgfHwgbm9kZS5nZXROdW1EZXNjZW5kYW50cygpLFxuICAgICAgcGFyZW50UmVsYXRpb25Ub0NoaWxkLFxuICAgICAgY2hpbGRSZWxhdGlvblRvUGFyZW50XG4gICAgfTtcblxuICAgIGFsbE5vZGVzLnB1c2godHJlZU5vZGUpXG5cbiAgICBub2RlQ2hpbGRyZW5bdHJlZU5vZGUuYWJzb2x1dGVJZGVudGl0eV0gPSBjaGlsZE5vZGVzLm1hcCgoY2hpbGROb2RlKSA9PlxuICAgICAgY3JlYXRlVHJlZU5vZGUoY2hpbGROb2RlLmNoaWxkLCB0cmVlTm9kZSwgZGVidWdOdW1JdGVyYXRpb25zICsgMSwgY2hpbGROb2RlLnBhcmVudFJlbGF0aW9uVG9DaGlsZCwgY2hpbGROb2RlLmNoaWxkUmVsYXRpb25Ub1BhcmVudClcbiAgICApO1xuXG4gICAgaWYobm9kZS5oYXNDaGlsZHJlbigpICYmIGNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuXHRhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlcy5hZGQodHJlZU5vZGUuYWJzb2x1dGVJZGVudGl0eSlcbiAgICB9XG5cbiAgICByZXR1cm4gdHJlZU5vZGU7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBjcmVhdGVBY3Rpb24sXG4gIGNyZWF0ZUFzeW5jVGh1bmssXG4gIGNyZWF0ZVNsaWNlLFxuICBQYXlsb2FkQWN0aW9uLFxufSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2V0LCBnZXRQYWdpbmF0ZWQsIFBhZ2UgfSBmcm9tIFwiLi4vLi4vYXBwL2FwaVwiO1xuaW1wb3J0IHsgbWFwVG9BcGlQYXJhbXMsIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzIH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi8uLi9tb2RlbC9FbnRpdHlcIjtcbmltcG9ydCBPbnRvbG9neSBmcm9tIFwiLi4vLi4vbW9kZWwvT250b2xvZ3lcIjtcbmltcG9ydCBjcmVhdGVUcmVlRnJvbUVudGl0aWVzIGZyb20gXCIuL2VudGl0aWVzL2NyZWF0ZVRyZWVGcm9tRW50aXRpZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPbnRvbG9naWVzU3RhdGUge1xuICBvbnRvbG9neTogT250b2xvZ3kgfCB1bmRlZmluZWQ7XG4gIGVudGl0eTogRW50aXR5IHwgdW5kZWZpbmVkO1xuICBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZDogc3RyaW5nW107XG4gIG5vZGVDaGlsZHJlbjogYW55O1xuICByb290Tm9kZXM6IFRyZWVOb2RlW107XG4gIG9udG9sb2dpZXM6IE9udG9sb2d5W107XG4gIHRvdGFsT250b2xvZ2llczogbnVtYmVyO1xuICBlbnRpdGllczogRW50aXR5W107XG4gIHRvdGFsRW50aXRpZXM6IG51bWJlcjtcbiAgbG9hZGluZ09udG9sb2dpZXM6IGJvb2xlYW47XG4gIGxvYWRpbmdFbnRpdGllczogYm9vbGVhbjtcbiAgbnVtUGVuZGluZ1RyZWVSZXF1ZXN0czogbnVtYmVyO1xuICBsb2FkaW5nT250b2xvZ3k6IGJvb2xlYW47XG4gIGxvYWRpbmdFbnRpdHk6IGJvb2xlYW47XG4gIGNsYXNzSW5zdGFuY2VzOiBQYWdlPEVudGl0eT4gfCBudWxsO1xuICBsb2FkaW5nQ2xhc3NJbnN0YW5jZXM6IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzOiBzdHJpbmdbXTtcbiAgbWFudWFsbHlFeHBhbmRlZE5vZGVzOiBzdHJpbmdbXTtcbiAgcHJlZmVycmVkUm9vdHM6IGJvb2xlYW47XG4gIGRpc3BsYXlPYnNvbGV0ZTogYm9vbGVhbjtcbiAgZGlzcGxheVNpYmxpbmdzOiBib29sZWFuO1xuICBkaXNwbGF5Q291bnRzOiBib29sZWFuO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZU5vZGUge1xuICBhYnNvbHV0ZUlkZW50aXR5OiBzdHJpbmc7IC8vIHRoZSBJUklzIG9mIHRoaXMgbm9kZSBhbmQgaXRzIGFuY2VzdG9ycyBkZWxpbWl0ZWQgYnkgYSA7XG4gIGlyaTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xuICBlbnRpdHk6IEVudGl0eTtcbiAgbnVtRGVzY2VuZGFudHM6IG51bWJlcjtcbiAgcGFyZW50UmVsYXRpb25Ub0NoaWxkOiBzdHJpbmcgfCBudWxsOyAvLyBpZiBhcHBsaWNhYmxlLCByZWxhdGlvbiBmcm9tIHRoZSBwYXJlbnQgbm9kZSB0byB0aGlzIG5vZGUgKGUuZy4gaGFzX3BhcnQpXG4gIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogc3RyaW5nIHwgbnVsbDsgLy8gaWYgYXBwbGljYWJsZSwgcmVsYXRpb24gZnJvbSB0aGlzIG5vZGUgdG8gdGhlIHBhcmVudCBub2RlIChlLmcuIHBhcnRfb2YpXG59XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogT250b2xvZ2llc1N0YXRlID0ge1xuICBvbnRvbG9neTogdW5kZWZpbmVkLFxuICBlbnRpdHk6IHVuZGVmaW5lZCxcbiAgbm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQ6IFtdLFxuICBub2RlQ2hpbGRyZW46IHt9LFxuICByb290Tm9kZXM6IFtdLFxuICBvbnRvbG9naWVzOiBbXSxcbiAgdG90YWxPbnRvbG9naWVzOiAwLFxuICBlbnRpdGllczogW10sXG4gIHRvdGFsRW50aXRpZXM6IDAsXG4gIGxvYWRpbmdPbnRvbG9naWVzOiBmYWxzZSxcbiAgbG9hZGluZ0VudGl0aWVzOiBmYWxzZSxcbiAgbnVtUGVuZGluZ1RyZWVSZXF1ZXN0czogMCxcbiAgbG9hZGluZ09udG9sb2d5OiBmYWxzZSxcbiAgbG9hZGluZ0VudGl0eTogZmFsc2UsXG4gIGNsYXNzSW5zdGFuY2VzOiBudWxsLFxuICBsb2FkaW5nQ2xhc3NJbnN0YW5jZXM6IGZhbHNlLFxuICBhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlczogW10sXG4gIG1hbnVhbGx5RXhwYW5kZWROb2RlczogW10sXG4gIHByZWZlcnJlZFJvb3RzOiBmYWxzZSxcbiAgZGlzcGxheU9ic29sZXRlOiBmYWxzZSxcbiAgZGlzcGxheVNpYmxpbmdzOiBmYWxzZSxcbiAgZGlzcGxheUNvdW50czogdHJ1ZSxcbiAgZXJyb3JNZXNzYWdlOiBcIlwiLFxufTtcblxuZXhwb3J0IGNvbnN0IHJlc2V0VHJlZUNvbnRlbnQgPSBjcmVhdGVBY3Rpb24oXCJvbnRvbG9naWVzX3RyZWVfcmVzZXRfY29udGVudFwiKTtcbmV4cG9ydCBjb25zdCByZXNldFRyZWVTZXR0aW5ncyA9IGNyZWF0ZUFjdGlvbjx7XG4gIGVudGl0eVR5cGU6IHN0cmluZztcbiAgc2VsZWN0ZWRFbnRpdHk/OiBFbnRpdHk7XG59PihcIm9udG9sb2dpZXNfdHJlZV9yZXNldF9zZXR0aW5nc1wiKTtcblxuZXhwb3J0IGNvbnN0IGVuYWJsZVByZWZlcnJlZFJvb3RzID0gY3JlYXRlQWN0aW9uKFxuICBcIm9udG9sb2dpZXNfcHJlZmVycmVkX2VuYWJsZWRcIlxuKTtcbmV4cG9ydCBjb25zdCBkaXNhYmxlUHJlZmVycmVkUm9vdHMgPSBjcmVhdGVBY3Rpb24oXG4gIFwib250b2xvZ2llc19wcmVmZXJyZWRfZGlzYWJsZWRcIlxuKTtcbmV4cG9ydCBjb25zdCBvcGVuTm9kZSA9IGNyZWF0ZUFjdGlvbjxUcmVlTm9kZT4oXCJvbnRvbG9naWVzX25vZGVfb3BlblwiKTtcbmV4cG9ydCBjb25zdCBjbG9zZU5vZGUgPSBjcmVhdGVBY3Rpb248VHJlZU5vZGU+KFwib250b2xvZ2llc19ub2RlX2Nsb3NlXCIpO1xuXG5leHBvcnQgY29uc3Qgc2hvd09ic29sZXRlID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19zaG93X29ic29sZXRlXCIpO1xuZXhwb3J0IGNvbnN0IGhpZGVPYnNvbGV0ZSA9IGNyZWF0ZUFjdGlvbihcIm9udG9sb2dpZXNfaGlkZV9vYnNvbGV0ZVwiKTtcblxuZXhwb3J0IGNvbnN0IHNob3dTaWJsaW5ncyA9IGNyZWF0ZUFjdGlvbihcIm9udG9sb2dpZXNfc2hvd19zaWJsaW5nc1wiKTtcbmV4cG9ydCBjb25zdCBoaWRlU2libGluZ3MgPSBjcmVhdGVBY3Rpb24oXCJvbnRvbG9naWVzX2hpZGVfc2libGluZ3NcIik7XG5cbmV4cG9ydCBjb25zdCBzaG93Q291bnRzID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19zaG93X2NvdW50c1wiKTtcbmV4cG9ydCBjb25zdCBoaWRlQ291bnRzID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19oaWRlX2NvdW50c1wiKTtcblxuZXhwb3J0IGNvbnN0IGdldE9udG9sb2d5ID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX29udG9sb2d5XCIsXG4gIGFzeW5jIChcbiAgICB7XG4gICAgICBvbnRvbG9neUlkLFxuICAgICAgbGFuZyxcbiAgICAgIGFwaVVybCxcbiAgICB9OiB7IG9udG9sb2d5SWQ6IHN0cmluZzsgbGFuZzogc3RyaW5nOyBhcGlVcmw/OiBzdHJpbmcgfSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfWA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9udG9sb2d5UHJvcGVydGllcyA9IGF3YWl0IGdldDxhbnk+KHBhdGgsIHsgbGFuZyB9LCBhcGlVcmwpO1xuICAgICAgcmV0dXJuIG5ldyBPbnRvbG9neShvbnRvbG9neVByb3BlcnRpZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoYEVycm9yIGFjY2Vzc2luZzogJHtwYXRofTsgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRFbnRpdHlXaXRoVHlwZSA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19lbnRpdHlfdHlwZVwiLFxuICBhc3luYyAoXG4gICAge1xuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIGVudGl0eVR5cGUsXG4gICAgICBlbnRpdHlJcmksXG4gICAgICBzZWFyY2hQYXJhbXMsXG4gICAgfToge1xuICAgICAgb250b2xvZ3lJZDogc3RyaW5nO1xuICAgICAgZW50aXR5VHlwZTogc3RyaW5nO1xuICAgICAgZW50aXR5SXJpOiBzdHJpbmc7XG4gICAgICBzZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcztcbiAgICB9LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgYXBpU2VhcmNoUGFyYW1zID0gbWFwVG9BcGlQYXJhbXMoc2VhcmNoUGFyYW1zKTtcbiAgICBjb25zdCBkb3VibGVFbmNvZGVkVGVybVVyaSA9IGVuY29kZVVSSUNvbXBvbmVudChcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbnRpdHlJcmkpXG4gICAgKTtcbiAgICBsZXQgcGF0aCA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBlbnRpdHlKc29uUHJvcGVydGllcyA9IG51bGw7XG4gICAgICBpZiAoZW50aXR5SXJpKSB7XG4gICAgICAgIHBhdGggPSBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke2VudGl0eVR5cGV9LyR7ZG91YmxlRW5jb2RlZFRlcm1Vcml9PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICBhcGlTZWFyY2hQYXJhbXNcbiAgICAgICAgKX1gO1xuICAgICAgICBlbnRpdHlKc29uUHJvcGVydGllcyA9IGF3YWl0IGdldDxhbnk+KHBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZX0/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIGFwaVNlYXJjaFBhcmFtc1xuICAgICAgICApfWA7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihwYXRoKTtcbiAgICAgICAgaWYgKHJlc3VsdHMuZWxlbWVudHMubGVuZ3RoID09PSAxICYmIHJlc3VsdHMudG90YWxFbGVtZW50cyA9PT0gMSkge1xuICAgICAgICAgIGVudGl0eUpzb25Qcm9wZXJ0aWVzID0gcmVzdWx0cy5lbGVtZW50c1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKFxuICAgICAgICAgICAgYEVycm9yIGFjY2Vzc2luZzogJHtwYXRofTsgUmV0cmlldmVkIG5vbmRpc3RpbmN0IGVudGl0eTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgKX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKGVudGl0eUpzb25Qcm9wZXJ0aWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGBFcnJvciBhY2Nlc3Npbmc6ICR7cGF0aH07ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0RW50aXR5ID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2VudGl0eVwiLFxuICBhc3luYyAoXG4gICAge1xuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIGVudGl0eUlyaSxcbiAgICB9OiB7XG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gICAgICBlbnRpdHlJcmk6IHN0cmluZztcbiAgICB9LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgZG91YmxlRW5jb2RlZFRlcm1VcmkgPSBlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQoZW50aXR5SXJpKVxuICAgICk7XG4gICAgbGV0IHBhdGggPSBcIlwiO1xuICAgIHRyeSB7XG4gICAgICBwYXRoID0gYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vZW50aXRpZXMvJHtkb3VibGVFbmNvZGVkVGVybVVyaX1gO1xuICAgICAgY29uc3QgZW50aXR5SnNvblByb3BlcnRpZXMgPSBhd2FpdCBnZXQ8YW55PihwYXRoKTtcbiAgICAgIHJldHVybiB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhlbnRpdHlKc29uUHJvcGVydGllcyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldENsYXNzSW5zdGFuY2VzID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2VudGl0eV9jbGFzc19pbnN0YW5jZXNcIixcbiAgYXN5bmMgKFxuICAgIHtcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBjbGFzc0lyaSxcbiAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICB9OiB7XG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gICAgICBjbGFzc0lyaTogc3RyaW5nO1xuICAgICAgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXM7XG4gICAgfSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIGxldCBwYXRoID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgaWYgKGNsYXNzSXJpKSB7XG4gICAgICAgIGNvbnN0IGFwaVNlYXJjaFBhcmFtcyA9IG1hcFRvQXBpUGFyYW1zKHNlYXJjaFBhcmFtcyk7XG4gICAgICAgIGNvbnN0IGRvdWJsZUVuY29kZWRUZXJtVXJpID0gZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChjbGFzc0lyaSlcbiAgICAgICAgKTtcbiAgICAgICAgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXMvJHtkb3VibGVFbmNvZGVkVGVybVVyaX0vaW5zdGFuY2VzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICBhcGlTZWFyY2hQYXJhbXNcbiAgICAgICAgKX1gO1xuICAgICAgICBjb25zdCBpbnN0YW5jZXMgPSAoYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4ocGF0aCkpLm1hcCgoaSkgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhpKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2VzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShcbiAgICAgICAgICBgV2FybmluZyBhY2Nlc3Npbmc6ICR7cGF0aH07IENsYXNzIElSSSBub3QgcHJvdmlkZWRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldE9udG9sb2dpZXMgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfb250b2xvZ2llc1wiLFxuICBhc3luYyAoeyBwYWdlLCByb3dzUGVyUGFnZSwgc2VhcmNoIH06IGFueSwgeyByZWplY3RXaXRoVmFsdWUgfSkgPT4ge1xuICAgIGlmIChzZWFyY2gubGVuZ3RoID4gMSAmJiAhc2VhcmNoLmluY2x1ZGVzKFwiIFwiKSkgc2VhcmNoID0gXCIqXCIgKyBzZWFyY2ggKyBcIipcIjtcbiAgICBjb25zdCBwYXRoID0gYGFwaS92Mi9vbnRvbG9naWVzP3BhZ2U9JHtwYWdlfSZzaXplPSR7cm93c1BlclBhZ2V9JHtcbiAgICAgIHNlYXJjaCA/IFwiJnNlYXJjaD1cIiArIHNlYXJjaCA6IFwiXCJcbiAgICB9YDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihwYXRoKSkubWFwKChvKSA9PiBuZXcgT250b2xvZ3kobykpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldEVudGl0aWVzID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2VudGl0aWVzXCIsXG4gIGFzeW5jIChcbiAgICB7IG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHBhZ2UsIHJvd3NQZXJQYWdlLCBzZWFyY2ggfTogYW55LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZX0/cGFnZT0ke3BhZ2V9JnNpemU9JHtyb3dzUGVyUGFnZX0ke1xuICAgICAgc2VhcmNoID8gXCImc2VhcmNoPVwiICsgc2VhcmNoIDogXCJcIlxuICAgIH1gO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gKGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KHBhdGgpKS5tYXAoKGUpID0+XG4gICAgICAgIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKGUpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldEFuY2VzdG9ycyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19hbmNlc3RvcnNcIixcbiAgYXN5bmMgKHtcbiAgICBvbnRvbG9neUlkLFxuICAgIGVudGl0eVR5cGUsXG4gICAgZW50aXR5SXJpLFxuICAgIGxhbmcsXG4gICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICBhcGlVcmwsXG4gIH06IGFueSkgPT4ge1xuICAgIGNvbnN0IGRvdWJsZUVuY29kZWRVcmkgPSBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eUlyaSkpO1xuICAgIHZhciBhbmNlc3RvcnNQYWdlOiBhbnk7XG4gICAgaWYgKGVudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiKSB7XG4gICAgICBhbmNlc3RvcnNQYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXMvJHtkb3VibGVFbmNvZGVkVXJpfS9oaWVyYXJjaGljYWxBbmNlc3RvcnM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHsgc2l6ZTogXCIxMDAwXCIsIGxhbmcsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5jZXN0b3JzUGFnZSA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke2VudGl0eVR5cGV9LyR7ZG91YmxlRW5jb2RlZFVyaX0vYW5jZXN0b3JzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICB7IHNpemU6IFwiMTAwMFwiLCBsYW5nLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCB9XG4gICAgICAgICl9YCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcGlVcmxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBhbmNlc3RvcnNQYWdlLmVsZW1lbnRzLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgKTtcbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRSb290RW50aXRpZXMgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfcm9vdHNcIixcbiAgYXN5bmMgKHtcbiAgICBvbnRvbG9neUlkLFxuICAgIGVudGl0eVR5cGUsXG4gICAgcHJlZmVycmVkUm9vdHMsXG4gICAgbGFuZyxcbiAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgIGFwaVVybCxcbiAgfTogYW55KSA9PiB7XG4gICAgaWYgKGVudGl0eVR5cGUgPT09IFwiaW5kaXZpZHVhbHNcIikge1xuICAgICAgY29uc3QgW2NsYXNzZXNXaXRoSW5kaXZpZHVhbHMsIG9ycGhhbmVkSW5kaXZpZHVhbHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS9jbGFzc2VzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgICBoYXNJbmRpdmlkdWFsczogXCJ0cnVlXCIsXG4gICAgICAgICAgICBzaXplOiBcIjEwMDBcIixcbiAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgICB9KX1gLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBhcGlVcmxcbiAgICAgICAgKSxcbiAgICAgICAgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vaW5kaXZpZHVhbHM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICAgIGhhc0RpcmVjdFBhcmVudDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgfSl9YCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgYXBpVXJsXG4gICAgICAgICksXG4gICAgICBdKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIHJvb3RUZXJtczogbnVsbCxcbiAgICAgICAgY2xhc3Nlc1dpdGhJbmRpdmlkdWFsczogY2xhc3Nlc1dpdGhJbmRpdmlkdWFscy5lbGVtZW50cy5tYXAoKG9iaikgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgICAgICksXG4gICAgICAgIG9ycGhhbmVkSW5kaXZpZHVhbHM6IG9ycGhhbmVkSW5kaXZpZHVhbHMuZWxlbWVudHMubWFwKChvYmopID0+XG4gICAgICAgICAgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMob2JqKVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGVudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiICYmIHByZWZlcnJlZFJvb3RzKSB7XG4gICAgICBjb25zdCByb290c1BhZ2UgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtlbnRpdHlUeXBlfT8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgIGlzUHJlZmVycmVkUm9vdDogXCJ0cnVlXCIsXG4gICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgbGFuZyxcbiAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgfSl9YCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcGlVcmxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICByb290VGVybXM6IHJvb3RzUGFnZS5lbGVtZW50cy5tYXAoKG9iaikgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgICAgICksXG4gICAgICAgIGNsYXNzZXNXaXRoSW5kaXZpZHVhbHM6IG51bGwsXG4gICAgICAgIG9ycGhhbmVkSW5kaXZpZHVhbHM6IG51bGwsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb290c1BhZ2UgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtlbnRpdHlUeXBlfT8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgIGhhc0RpcmVjdFBhcmVudDogXCJmYWxzZVwiLFxuICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgIH0pfWAsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpVXJsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgcm9vdFRlcm1zOiByb290c1BhZ2UuZWxlbWVudHMubWFwKChvYmopID0+XG4gICAgICAgICAgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMob2JqKVxuICAgICAgICApLFxuICAgICAgICBjbGFzc2VzV2l0aEluZGl2aWR1YWxzOiBudWxsLFxuICAgICAgICBvcnBoYW5lZEluZGl2aWR1YWxzOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0Tm9kZUNoaWxkcmVuID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX25vZGVfY2hpbGRyZW5cIixcbiAgYXN5bmMgKHtcbiAgICBvbnRvbG9neUlkLFxuICAgIGVudGl0eVR5cGVQbHVyYWwsXG4gICAgZW50aXR5SXJpLFxuICAgIGFic29sdXRlSWRlbnRpdHksXG4gICAgbGFuZyxcbiAgICBhcGlVcmwsXG4gICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gIH06IGFueSkgPT4ge1xuICAgIGNvbnN0IGRvdWJsZUVuY29kZWRVcmkgPSBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eUlyaSkpO1xuICAgIHZhciBjaGlsZHJlblBhZ2U6IGFueTtcbiAgICBpZiAoZW50aXR5VHlwZVBsdXJhbCA9PT0gXCJjbGFzc2VzXCIpIHtcbiAgICAgIGNoaWxkcmVuUGFnZSA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS9jbGFzc2VzLyR7ZG91YmxlRW5jb2RlZFVyaX0vaGllcmFyY2hpY2FsQ2hpbGRyZW4/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVudGl0eVR5cGVQbHVyYWwgPT09IFwiaW5kaXZpZHVhbHNcIikge1xuICAgICAgY2hpbGRyZW5QYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXMvJHtkb3VibGVFbmNvZGVkVXJpfS9pbnN0YW5jZXM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5QYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZVBsdXJhbH0vJHtkb3VibGVFbmNvZGVkVXJpfS9jaGlsZHJlbj8ke25ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgfVxuICAgICAgICApfWAsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpVXJsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWJzb2x1dGVJZGVudGl0eSxcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblBhZ2UuZWxlbWVudHNcbiAgICAgICAgLm1hcCgob2JqOiBhbnkpID0+IHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKG9iaikpXG4gICAgICAgIC5tYXAoKHRlcm06IEVudGl0eSkgPT4ge1xuICAgICAgICAgIGxldCBwYXJlbnRob29kTWV0YWRhdGEgPVxuICAgICAgICAgICAgdGVybS5nZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhlbnRpdHlJcmkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IHRlcm0uZ2V0SXJpKCksXG4gICAgICAgICAgICBhYnNvbHV0ZUlkZW50aXR5OiBhYnNvbHV0ZUlkZW50aXR5ICsgXCI7XCIgKyB0ZXJtLmdldElyaSgpLFxuICAgICAgICAgICAgdGl0bGU6IHRlcm0uZ2V0TmFtZSgpLFxuICAgICAgICAgICAgZXhwYW5kYWJsZTogdGVybS5oYXNDaGlsZHJlbigpLFxuICAgICAgICAgICAgZW50aXR5OiB0ZXJtLFxuICAgICAgICAgICAgbnVtRGVzY2VuZGFudHM6XG4gICAgICAgICAgICAgIHRlcm0uZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKSB8fCB0ZXJtLmdldE51bURlc2NlbmRhbnRzKCksXG4gICAgICAgICAgICBwYXJlbnRSZWxhdGlvblRvQ2hpbGQ6XG4gICAgICAgICAgICAgIChwYXJlbnRob29kTWV0YWRhdGEgJiZcbiAgICAgICAgICAgICAgICBwYXJlbnRob29kTWV0YWRhdGFbXCJwYXJlbnRSZWxhdGlvblRvQ2hpbGRcIl0/LlswXSkgfHxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudDpcbiAgICAgICAgICAgICAgKHBhcmVudGhvb2RNZXRhZGF0YSAmJlxuICAgICAgICAgICAgICAgIHBhcmVudGhvb2RNZXRhZGF0YVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXT8uWzBdKSB8fFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH1cbik7XG5cbmNvbnN0IG9udG9sb2dpZXNTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogXCJvbnRvbG9naWVzXCIsXG4gIGluaXRpYWxTdGF0ZSxcbiAgcmVkdWNlcnM6IHt9LFxuICBleHRyYVJlZHVjZXJzOiAoYnVpbGRlcikgPT4ge1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldE9udG9sb2d5LmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248T250b2xvZ3k+KSA9PiB7XG4gICAgICAgIHN0YXRlLm9udG9sb2d5ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdPbnRvbG9neSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldE9udG9sb2d5LnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ3kgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRPbnRvbG9neS5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLm9udG9sb2d5ID0gaW5pdGlhbFN0YXRlLm9udG9sb2d5O1xuICAgICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ3kgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEVudGl0eVdpdGhUeXBlLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248RW50aXR5PikgPT4ge1xuICAgICAgICBzdGF0ZS5lbnRpdHkgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgc3RhdGUubG9hZGluZ0VudGl0eSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldEVudGl0eVdpdGhUeXBlLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGluaXRpYWxTdGF0ZS5lcnJvck1lc3NhZ2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0RW50aXR5V2l0aFR5cGUucmVqZWN0ZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmVudGl0eSA9IGluaXRpYWxTdGF0ZS5lbnRpdHk7XG4gICAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGVycm9yLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdHkuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxFbnRpdHk+KSA9PiB7XG4gICAgICAgIHN0YXRlLmVudGl0eSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0RW50aXR5LnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGluaXRpYWxTdGF0ZS5lcnJvck1lc3NhZ2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0RW50aXR5LnJlamVjdGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgc3RhdGUubG9hZGluZ0VudGl0eSA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5lbnRpdHkgPSBpbml0aWFsU3RhdGUuZW50aXR5O1xuICAgICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBlcnJvci5wYXlsb2FkO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0Q2xhc3NJbnN0YW5jZXMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxQYWdlPEVudGl0eT4+KSA9PiB7XG4gICAgICAgIHN0YXRlLmNsYXNzSW5zdGFuY2VzID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdDbGFzc0luc3RhbmNlcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldENsYXNzSW5zdGFuY2VzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nQ2xhc3NJbnN0YW5jZXMgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRDbGFzc0luc3RhbmNlcy5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdDbGFzc0luc3RhbmNlcyA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5jbGFzc0luc3RhbmNlcyA9IGluaXRpYWxTdGF0ZS5jbGFzc0luc3RhbmNlcztcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRBbmNlc3RvcnMucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgICsrc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRBbmNlc3RvcnMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxFbnRpdHlbXT4pID0+IHtcbiAgICAgICAgbGV0IHsgcm9vdE5vZGVzLCBub2RlQ2hpbGRyZW4sIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzIH0gPVxuICAgICAgICAgIGNyZWF0ZVRyZWVGcm9tRW50aXRpZXMoXG4gICAgICAgICAgICBbc3RhdGUuZW50aXR5ISwgLi4uYWN0aW9uLnBheWxvYWRdLFxuICAgICAgICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMsXG4gICAgICAgICAgICBzdGF0ZS5vbnRvbG9neSFcbiAgICAgICAgICApO1xuICAgICAgICBzdGF0ZS5yb290Tm9kZXMgPSByb290Tm9kZXM7XG4gICAgICAgIHN0YXRlLm5vZGVDaGlsZHJlbiA9IG5vZGVDaGlsZHJlbjtcbiAgICAgICAgc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIG5ldyBTZXQoW1xuICAgICAgICAgICAgLi4uc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMsXG4gICAgICAgICAgICAuLi5BcnJheS5mcm9tKGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICAgICAgICBdKVxuICAgICAgICApO1xuICAgICAgICAtLXN0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0QW5jZXN0b3JzLnJlamVjdGVkLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgLS1zdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXROb2RlQ2hpbGRyZW4ucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgICsrc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXROb2RlQ2hpbGRyZW4uZnVsZmlsbGVkLFxuICAgICAgKFxuICAgICAgICBzdGF0ZTogT250b2xvZ2llc1N0YXRlLFxuICAgICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248e1xuICAgICAgICAgIGFic29sdXRlSWRlbnRpdHk6IHN0cmluZztcbiAgICAgICAgICBjaGlsZHJlbjogVHJlZU5vZGVbXTtcbiAgICAgICAgfT5cbiAgICAgICkgPT4ge1xuICAgICAgICBzdGF0ZS5ub2RlQ2hpbGRyZW4gPSB7XG4gICAgICAgICAgLi4uc3RhdGUubm9kZUNoaWxkcmVuLFxuICAgICAgICAgIFthY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XTogYWN0aW9uLnBheWxvYWQuY2hpbGRyZW4sXG4gICAgICAgIH07XG4gICAgICAgIHN0YXRlLm5vZGVzV2l0aENoaWxkcmVuTG9hZGVkLnB1c2goYWN0aW9uLnBheWxvYWQuYWJzb2x1dGVJZGVudGl0eSk7XG4gICAgICAgIC0tc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXROb2RlQ2hpbGRyZW4ucmVqZWN0ZWQsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICAtLXN0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFJvb3RFbnRpdGllcy5wZW5kaW5nLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgKytzdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldFJvb3RFbnRpdGllcy5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPGFueT4pID0+IHtcbiAgICAgICAgbGV0IHsgcm9vdFRlcm1zLCBjbGFzc2VzV2l0aEluZGl2aWR1YWxzLCBvcnBoYW5lZEluZGl2aWR1YWxzIH0gPVxuICAgICAgICAgIGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJvb3RUZXJtc1wiKTtcbiAgICAgICAgLy8gY29uc29sZS5kaXIocm9vdFRlcm1zKTtcbiAgICAgICAgbGV0IHsgcm9vdE5vZGVzLCBub2RlQ2hpbGRyZW4sIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzIH0gPVxuICAgICAgICAgIGNyZWF0ZVRyZWVGcm9tRW50aXRpZXMoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIC4uLihyb290VGVybXMgfHwgW10pLFxuICAgICAgICAgICAgICAuLi4oY2xhc3Nlc1dpdGhJbmRpdmlkdWFscyB8fCBbXSksXG4gICAgICAgICAgICAgIC4uLihvcnBoYW5lZEluZGl2aWR1YWxzIHx8IFtdKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0ZS5wcmVmZXJyZWRSb290cyxcbiAgICAgICAgICAgIHN0YXRlLm9udG9sb2d5IVxuICAgICAgICAgICk7XG5cbiAgICAgICAgc3RhdGUucm9vdE5vZGVzID0gcm9vdE5vZGVzO1xuICAgICAgICBzdGF0ZS5ub2RlQ2hpbGRyZW4gPSBub2RlQ2hpbGRyZW47XG4gICAgICAgIHN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBuZXcgU2V0KFtcbiAgICAgICAgICAgIC4uLnN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLFxuICAgICAgICAgICAgLi4uQXJyYXkuZnJvbShhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyksXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgICAgLS1zdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFJvb3RFbnRpdGllcy5yZWplY3RlZCwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIC0tc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRPbnRvbG9naWVzLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248UGFnZTxPbnRvbG9neT4+KSA9PiB7XG4gICAgICAgIHN0YXRlLm9udG9sb2dpZXMgPSBhY3Rpb24ucGF5bG9hZC5lbGVtZW50cztcbiAgICAgICAgc3RhdGUudG90YWxPbnRvbG9naWVzID0gYWN0aW9uLnBheWxvYWQudG90YWxFbGVtZW50cztcbiAgICAgICAgc3RhdGUubG9hZGluZ09udG9sb2dpZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRPbnRvbG9naWVzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ2llcyA9IHRydWU7XG4gICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBpbml0aWFsU3RhdGUuZXJyb3JNZXNzYWdlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldE9udG9sb2dpZXMucmVqZWN0ZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBzdGF0ZS5vbnRvbG9naWVzID0gaW5pdGlhbFN0YXRlLm9udG9sb2dpZXM7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdPbnRvbG9naWVzID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGVycm9yLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdGllcy5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPFBhZ2U8RW50aXR5Pj4pID0+IHtcbiAgICAgICAgc3RhdGUuZW50aXRpZXMgPSBhY3Rpb24ucGF5bG9hZC5lbGVtZW50cztcbiAgICAgICAgc3RhdGUudG90YWxFbnRpdGllcyA9IGFjdGlvbi5wYXlsb2FkLnRvdGFsRWxlbWVudHM7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdFbnRpdGllcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldEVudGl0aWVzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nRW50aXRpZXMgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdGllcy5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmVudGl0aWVzID0gaW5pdGlhbFN0YXRlLmVudGl0aWVzO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXRpZXMgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShyZXNldFRyZWVDb250ZW50LCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQgPSBbXTtcbiAgICAgIHN0YXRlLm5vZGVDaGlsZHJlbiA9IHt9O1xuICAgICAgc3RhdGUucm9vdE5vZGVzID0gW107XG4gICAgICBzdGF0ZS5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyA9IFtdO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIHJlc2V0VHJlZVNldHRpbmdzLFxuICAgICAgKFxuICAgICAgICBzdGF0ZTogT250b2xvZ2llc1N0YXRlLFxuICAgICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248eyBlbnRpdHlUeXBlOiBzdHJpbmc7IHNlbGVjdGVkRW50aXR5PzogRW50aXR5IH0+XG4gICAgICApID0+IHtcbiAgICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMgPVxuICAgICAgICAgIGFjdGlvbi5wYXlsb2FkLmVudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiICYmXG4gICAgICAgICAgc3RhdGUub250b2xvZ3khLmdldFByZWZlcnJlZFJvb3RzKCkubGVuZ3RoID4gMDtcblxuICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQuc2VsZWN0ZWRFbnRpdHkpIHtcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRJc0Rlc2NlbmRhbnRPZlByZWZlcnJlZFJvb3RzID0gZmFsc2U7XG4gICAgICAgICAgZm9yIChsZXQgcm9vdCBvZiBzdGF0ZS5vbnRvbG9neSEuZ2V0UHJlZmVycmVkUm9vdHMoKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBhY3Rpb24ucGF5bG9hZC5zZWxlY3RlZEVudGl0eVxuICAgICAgICAgICAgICAgIC5nZXRIaWVyYXJjaGljYWxBbmNlc3RvcklyaXMoKVxuICAgICAgICAgICAgICAgIC5pbmRleE9mKHJvb3QpICE9PSAtMVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkSXNEZXNjZW5kYW50T2ZQcmVmZXJyZWRSb290cyA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXNlbGVjdGVkSXNEZXNjZW5kYW50T2ZQcmVmZXJyZWRSb290cykge1xuICAgICAgICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZGlzcGxheU9ic29sZXRlID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmRpc3BsYXlTaWJsaW5ncyA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5kaXNwbGF5Q291bnRzID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUubWFudWFsbHlFeHBhbmRlZE5vZGVzID0gW107XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZW5hYmxlUHJlZmVycmVkUm9vdHMsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5wcmVmZXJyZWRSb290cyA9IHRydWU7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGRpc2FibGVQcmVmZXJyZWRSb290cywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLnByZWZlcnJlZFJvb3RzID0gZmFsc2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKHNob3dPYnNvbGV0ZSwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlPYnNvbGV0ZSA9IHRydWU7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGhpZGVPYnNvbGV0ZSwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlPYnNvbGV0ZSA9IGZhbHNlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShzaG93U2libGluZ3MsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5kaXNwbGF5U2libGluZ3MgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShoaWRlU2libGluZ3MsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5kaXNwbGF5U2libGluZ3MgPSBmYWxzZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2Uoc2hvd0NvdW50cywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlDb3VudHMgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShoaWRlQ291bnRzLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuZGlzcGxheUNvdW50cyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIG9wZW5Ob2RlLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxUcmVlTm9kZT4pID0+IHtcbiAgICAgICAgc3RhdGUubWFudWFsbHlFeHBhbmRlZE5vZGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBuZXcgU2V0KFtcbiAgICAgICAgICAgIC4uLnN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2RlcyxcbiAgICAgICAgICAgIGFjdGlvbi5wYXlsb2FkLmFic29sdXRlSWRlbnRpdHksXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGNsb3NlTm9kZSxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248VHJlZU5vZGU+KSA9PiB7XG4gICAgICAgIHN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2RlcyA9IHN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2Rlcy5maWx0ZXIoXG4gICAgICAgICAgKG5vZGUpID0+IG5vZGUgIT09IGFjdGlvbi5wYXlsb2FkLmFic29sdXRlSWRlbnRpdHlcbiAgICAgICAgKTtcbiAgICAgICAgc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMgPVxuICAgICAgICAgIHN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLmZpbHRlcihcbiAgICAgICAgICAgIChub2RlKSA9PiBub2RlICE9PSBhY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgZGVsZXRlIHN0YXRlLm5vZGVDaGlsZHJlblthY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XTtcbiAgICAgICAgc3RhdGUubm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQgPSBzdGF0ZS5ub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZC5maWx0ZXIoXG4gICAgICAgICAgKGFic0lkKSA9PiBhYnNJZCAhPT0gYWN0aW9uLnBheWxvYWQuYWJzb2x1dGVJZGVudGl0eVxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgb250b2xvZ2llc1NsaWNlLnJlZHVjZXI7XG4iLCAiaW1wb3J0IHsgY3JlYXRlQXN5bmNUaHVuaywgY3JlYXRlU2xpY2UsIFBheWxvYWRBY3Rpb24gfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2V0UGFnaW5hdGVkLCBQYWdlIH0gZnJvbSBcIi4uLy4uL2FwcC9hcGlcIjtcbmltcG9ydCB7IHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzIH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi8uLi9tb2RlbC9FbnRpdHlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hTdGF0ZSB7XG4gIHNlYXJjaFJlc3VsdHM6IEVudGl0eVtdO1xuICBsb2FkaW5nU2VhcmNoUmVzdWx0czogYm9vbGVhbjtcbiAgdG90YWxTZWFyY2hSZXN1bHRzOiBudW1iZXI7XG4gIGZhY2V0czogT2JqZWN0O1xufVxuY29uc3QgaW5pdGlhbFN0YXRlOiBTZWFyY2hTdGF0ZSA9IHtcbiAgc2VhcmNoUmVzdWx0czogW10sXG4gIGxvYWRpbmdTZWFyY2hSZXN1bHRzOiBmYWxzZSxcbiAgdG90YWxTZWFyY2hSZXN1bHRzOiAwLFxuICBmYWNldHM6IE9iamVjdC5jcmVhdGUobnVsbCksXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VhcmNoUmVzdWx0cyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwic2VhcmNoX3Jlc3VsdHNcIixcbiAgYXN5bmMgKFxuICAgIHsgcGFnZSwgcm93c1BlclBhZ2UsIHNlYXJjaCwgb250b2xvZ3lJZCwgdHlwZSwgc2VhcmNoUGFyYW1zIH06IGFueSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcXVlcnkgPSB7XG4gICAgICAgIHNlYXJjaDogc2VhcmNoLFxuICAgICAgICBzaXplOiByb3dzUGVyUGFnZSxcbiAgICAgICAgcGFnZSxcbiAgICAgICAgZmFjZXRGaWVsZHM6IFwib250b2xvZ3lJZCB0eXBlXCIsXG4gICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQubGVuZ3RoID4gMCA/IG9udG9sb2d5SWRbMF0gOiBudWxsLFxuICAgICAgICB0eXBlOiB0eXBlLmxlbmd0aCA+IDAgPyB0eXBlWzBdIDogbnVsbCxcbiAgICAgICAgLy8gbGFuZzogXCJhbGxcIixcblxuICAgICAgICAuLi5PYmplY3QuZnJvbUVudHJpZXMoc2VhcmNoUGFyYW1zIGFzIFVSTFNlYXJjaFBhcmFtcyksXG4gICAgICB9O1xuICAgICAgZm9yIChjb25zdCBwYXJhbSBpbiBxdWVyeSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcXVlcnlbcGFyYW1dID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBxdWVyeVtwYXJhbV0gPT09IG51bGwgfHxcbiAgICAgICAgICBxdWVyeVtwYXJhbV0gPT09IFwiXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXJ5W3BhcmFtXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcGFyc2VkUXVlcnkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5KTtcbiAgICAgIC8vIHJlbW92ZSByZWR1bmRhbnQgcGFyYW1ldGVyc1xuICAgICAgaWYgKHNlYXJjaFBhcmFtcy5nZXQoXCJvbnRvbG9neVwiKSkge1xuICAgICAgICBwYXJzZWRRdWVyeS5zZXQoXCJvbnRvbG9neUlkXCIsIHNlYXJjaFBhcmFtcy5nZXQoXCJvbnRvbG9neVwiKSk7XG4gICAgICAgIHBhcnNlZFF1ZXJ5LmRlbGV0ZShcIm9udG9sb2d5XCIpO1xuICAgICAgfVxuICAgICAgaWYgKHNlYXJjaFBhcmFtcy5nZXQoXCJxXCIpKSBwYXJzZWRRdWVyeS5kZWxldGUoXCJxXCIpO1xuXG4gICAgICBjb25zdCBkYXRhID0gKFxuICAgICAgICBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihgYXBpL3YyL2VudGl0aWVzPyR7cGFyc2VkUXVlcnl9YClcbiAgICAgICkubWFwKChlKSA9PiB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhlKSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3Qgc2VhcmNoU2xpY2UgPSBjcmVhdGVTbGljZSh7XG4gIG5hbWU6IFwic2VhcmNoXCIsXG4gIGluaXRpYWxTdGF0ZSxcbiAgcmVkdWNlcnM6IHt9LFxuICBleHRyYVJlZHVjZXJzOiAoYnVpbGRlcikgPT4ge1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldFNlYXJjaFJlc3VsdHMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBTZWFyY2hTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPFBhZ2U8RW50aXR5Pj4pID0+IHtcbiAgICAgICAgc3RhdGUuc2VhcmNoUmVzdWx0cyA9IGFjdGlvbi5wYXlsb2FkLmVsZW1lbnRzO1xuICAgICAgICBzdGF0ZS50b3RhbFNlYXJjaFJlc3VsdHMgPSBhY3Rpb24ucGF5bG9hZC50b3RhbEVsZW1lbnRzO1xuICAgICAgICBzdGF0ZS5mYWNldHMgPSBhY3Rpb24ucGF5bG9hZC5mYWNldEZpZWxkc1RvQ291bnRzO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nU2VhcmNoUmVzdWx0cyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFNlYXJjaFJlc3VsdHMucGVuZGluZywgKHN0YXRlOiBTZWFyY2hTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubG9hZGluZ1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRTZWFyY2hSZXN1bHRzLnJlamVjdGVkLCAoc3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nU2VhcmNoUmVzdWx0cyA9IGZhbHNlO1xuICAgICAgc3RhdGUuc2VhcmNoUmVzdWx0cyA9IGluaXRpYWxTdGF0ZS5zZWFyY2hSZXN1bHRzO1xuICAgICAgc3RhdGUuZmFjZXRzID0gaW5pdGlhbFN0YXRlLmZhY2V0cztcbiAgICB9KTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzZWFyY2hTbGljZS5yZWR1Y2VyO1xuIiwgImltcG9ydCB7IGNvbmZpZ3VyZVN0b3JlIH0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcbmltcG9ydCBob21lUmVkdWNlciBmcm9tIFwiLi4vcGFnZXMvaG9tZS9ob21lU2xpY2VcIjtcbmltcG9ydCBvbnRvbG9naWVzUmVkdWNlciBmcm9tIFwiLi4vcGFnZXMvb250b2xvZ2llcy9vbnRvbG9naWVzU2xpY2VcIjtcbmltcG9ydCBzZWFyY2hSZWR1Y2VyIGZyb20gJy4uL3BhZ2VzL3NlYXJjaC9zZWFyY2hTbGljZSc7XG5cbmV4cG9ydCBjb25zdCBzdG9yZSA9IGNvbmZpZ3VyZVN0b3JlKHtcbiAgcmVkdWNlcjoge1xuICAgIGhvbWU6IGhvbWVSZWR1Y2VyLFxuICAgIHNlYXJjaDogc2VhcmNoUmVkdWNlcixcbiAgICBvbnRvbG9naWVzOiBvbnRvbG9naWVzUmVkdWNlcixcbiAgfSxcbiAgbWlkZGxld2FyZTogKGdldERlZmF1bHRNaWRkbGV3YXJlKSA9PlxuICAgIGdldERlZmF1bHRNaWRkbGV3YXJlKHtcbiAgICAgIHNlcmlhbGl6YWJsZUNoZWNrOiBmYWxzZSxcbiAgICB9KSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSb290U3RhdGUgPSBSZXR1cm5UeXBlPHR5cGVvZiBzdG9yZS5nZXRTdGF0ZT47XG5leHBvcnQgdHlwZSBBcHBEaXNwYXRjaCA9IHR5cGVvZiBzdG9yZS5kaXNwYXRjaDtcbiIsICJpbXBvcnQgeyBUaGVtZVByb3ZpZGVyIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5pbXBvcnQge1xuICBDaGVja2JveCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIFJhZGlvLFxuICBSYWRpb0dyb3VwLFxufSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHVybEpvaW4gZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB1c2VBcHBEaXNwYXRjaCwgdXNlQXBwU2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL2hvb2tzXCI7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvbXVpXCI7XG5pbXBvcnQgeyByYW5kb21TdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL05vZGVcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4uLy4uLy4uL21vZGVsL0VudGl0eVwiO1xuaW1wb3J0IE9udG9sb2d5IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9PbnRvbG9neVwiO1xuaW1wb3J0IHtcbiAgVHJlZU5vZGUsXG4gIGNsb3NlTm9kZSxcbiAgZGlzYWJsZVByZWZlcnJlZFJvb3RzLFxuICBlbmFibGVQcmVmZXJyZWRSb290cyxcbiAgZ2V0QW5jZXN0b3JzLFxuICBnZXROb2RlQ2hpbGRyZW4sXG4gIGdldFJvb3RFbnRpdGllcyxcbiAgaGlkZUNvdW50cyxcbiAgaGlkZU9ic29sZXRlLFxuICBoaWRlU2libGluZ3MsXG4gIG9wZW5Ob2RlLFxuICByZXNldFRyZWVDb250ZW50LFxuICByZXNldFRyZWVTZXR0aW5ncyxcbiAgc2hvd0NvdW50cyxcbiAgc2hvd09ic29sZXRlLFxuICBzaG93U2libGluZ3MsXG59IGZyb20gXCIuLi9vbnRvbG9naWVzU2xpY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRW50aXR5VHJlZSh7XG4gIG9udG9sb2d5LFxuICBlbnRpdHlUeXBlLFxuICBzZWxlY3RlZEVudGl0eSxcbiAgbGFuZyxcbiAgb25OYXZpZ2F0ZVRvRW50aXR5LFxuICBvbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgYXBpVXJsLFxufToge1xuICBvbnRvbG9neTogT250b2xvZ3k7XG4gIHNlbGVjdGVkRW50aXR5PzogRW50aXR5O1xuICBlbnRpdHlUeXBlOiBcImVudGl0aWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiO1xuICBsYW5nOiBzdHJpbmc7XG4gIG9uTmF2aWdhdGVUb0VudGl0eTogKG9udG9sb2d5OiBPbnRvbG9neSwgZW50aXR5OiBFbnRpdHkpID0+IHZvaWQ7XG4gIG9uTmF2aWdhdGVUb09udG9sb2d5OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHk6IEVudGl0eSkgPT4gdm9pZDtcbiAgYXBpVXJsPzogc3RyaW5nO1xufSkge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IG5vZGVzV2l0aENoaWxkcmVuTG9hZGVkID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLm5vZGVzV2l0aENoaWxkcmVuTG9hZGVkXG4gICk7XG4gIGNvbnN0IG5vZGVDaGlsZHJlbiA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5ub2RlQ2hpbGRyZW4pO1xuICBjb25zdCByb290Tm9kZXMgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMucm9vdE5vZGVzKTtcbiAgY29uc3QgbnVtUGVuZGluZ1RyZWVSZXF1ZXN0cyA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5udW1QZW5kaW5nVHJlZVJlcXVlc3RzXG4gICk7XG4gIGNvbnN0IHByZWZlcnJlZFJvb3RzID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLnByZWZlcnJlZFJvb3RzXG4gICk7XG4gIGNvbnN0IGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzXG4gICk7XG4gIGNvbnN0IG1hbnVhbGx5RXhwYW5kZWROb2RlcyA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5tYW51YWxseUV4cGFuZGVkTm9kZXNcbiAgKTtcblxuICBjb25zdCBzaG93T2Jzb2xldGVFbmFibGVkID0gc2VsZWN0ZWRFbnRpdHlcbiAgICA/IHNlbGVjdGVkRW50aXR5LmlzRGVwcmVjYXRlZCgpXG4gICAgOiB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuZGlzcGxheU9ic29sZXRlKTtcbiAgY29uc3Qgc2hvd1NpYmxpbmdzRW5hYmxlZCA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5kaXNwbGF5U2libGluZ3NcbiAgKTtcbiAgY29uc3Qgc2hvd0NvdW50c0VuYWJsZWQgPSB1c2VBcHBTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuZGlzcGxheUNvdW50c1xuICApO1xuXG4gIGNvbnN0IHRvZ2dsZU5vZGUgPSB1c2VDYWxsYmFjayhcbiAgICAobm9kZTogYW55KSA9PiB7XG4gICAgICBsZXQgaXNFeHBhbmRlZCA9XG4gICAgICAgIG1hbnVhbGx5RXhwYW5kZWROb2Rlcy5pbmRleE9mKG5vZGUuYWJzb2x1dGVJZGVudGl0eSkgIT09IC0xIHx8XG4gICAgICAgIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLmluZGV4T2Yobm9kZS5hYnNvbHV0ZUlkZW50aXR5KSAhPT0gLTE7XG5cbiAgICAgIGlmIChpc0V4cGFuZGVkKSB7XG4gICAgICAgIGRpc3BhdGNoKGNsb3NlTm9kZShub2RlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwYXRjaChvcGVuTm9kZShub2RlKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBkaXNwYXRjaCxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KG1hbnVhbGx5RXhwYW5kZWROb2RlcyksXG4gICAgXVxuICApO1xuXG4gIC8vIElmIHRoZSBvbnRvbG9neSwgZW50aXR5IHR5cGUsIHNlbGVjdGVkIGVudGl0eSBJUkksIG9yIGxhbmcgY2hhbmdlLCByZXNldCB0aGUgdHJlZSBzZXR0aW5ncyAoaW5jbHVkaW5nIHNob3dvYnNvbGV0ZS9wcmVmZXJyZWQgcm9vdHMpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZGlzcGF0Y2gocmVzZXRUcmVlU2V0dGluZ3MoeyBlbnRpdHlUeXBlLCBzZWxlY3RlZEVudGl0eSB9KSk7XG4gIH0sIFtcbiAgICBkaXNwYXRjaCxcbiAgICBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgZW50aXR5VHlwZSxcbiAgICBzZWxlY3RlZEVudGl0eT8uZ2V0SXJpKCksXG4gIF0pO1xuXG4gIC8vIElmIHRoZSBvbnRvbG9neSwgZW50aXR5IHR5cGUsIHNlbGVjdGVkIGVudGl0eSwgbGFuZyBPUiB0aGUgc2hvd09ic29sZXRlRW5hYmxlZC9wcmVmZXJyZWRSb290cyBjaGFuZ2UsIHJlc2V0IHRoZSB0cmVlIGNvbnRlbnQgYnV0IG5vdCB0aGUgc2V0dGluZ3NcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChyZXNldFRyZWVDb250ZW50KCkpO1xuICB9LCBbXG4gICAgZGlzcGF0Y2gsXG4gICAgb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgIGVudGl0eVR5cGUsXG4gICAgSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWRFbnRpdHkpLFxuICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgcHJlZmVycmVkUm9vdHMsXG4gICAgbGFuZyxcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRFbnRpdHkpIHtcbiAgICAgIGNvbnN0IGVudGl0eUlyaSA9IHNlbGVjdGVkRW50aXR5LmdldElyaSgpO1xuICAgICAgbGV0IHByb21pc2UgPSBkaXNwYXRjaChcbiAgICAgICAgZ2V0QW5jZXN0b3JzKHtcbiAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgZW50aXR5VHlwZTogc2VsZWN0ZWRFbnRpdHkuZ2V0VHlwZVBsdXJhbCgpLFxuICAgICAgICAgIGVudGl0eUlyaSxcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgc2hvd1NpYmxpbmdzRW5hYmxlZCxcbiAgICAgICAgICBhcGlVcmwsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuICgpID0+IHByb21pc2UuYWJvcnQoKTsgLy8gY29tcG9uZW50IHdhcyB1bm1vdW50ZWRcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHByb21pc2UgPSBkaXNwYXRjaChcbiAgICAgICAgZ2V0Um9vdEVudGl0aWVzKHtcbiAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBwcmVmZXJyZWRSb290cyxcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgYXBpVXJsLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiAoKSA9PiBwcm9taXNlLmFib3J0KCk7IC8vIGNvbXBvbmVudCB3YXMgdW5tb3VudGVkXG4gICAgfVxuICB9LCBbXG4gICAgZGlzcGF0Y2gsXG4gICAgZW50aXR5VHlwZSxcbiAgICBKU09OLnN0cmluZ2lmeShzZWxlY3RlZEVudGl0eSksXG4gICAgb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgIHByZWZlcnJlZFJvb3RzLFxuICAgIGxhbmcsXG4gICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgbm9kZXNNaXNzaW5nQ2hpbGRyZW46IHN0cmluZ1tdID0gbWFudWFsbHlFeHBhbmRlZE5vZGVzLmZpbHRlcihcbiAgICAgIChhYnNvbHV0ZUlkZW50aXR5KSA9PlxuICAgICAgICBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZC5pbmRleE9mKGFic29sdXRlSWRlbnRpdHkpID09PSAtMVxuICAgICk7XG5cbiAgICBpZiAoc2hvd1NpYmxpbmdzRW5hYmxlZCkge1xuICAgICAgbm9kZXNNaXNzaW5nQ2hpbGRyZW4gPSBbXG4gICAgICAgIC4uLm5vZGVzTWlzc2luZ0NoaWxkcmVuLFxuICAgICAgICAuLi5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlcy5maWx0ZXIoXG4gICAgICAgICAgKGFic29sdXRlSWRlbnRpdHkpID0+XG4gICAgICAgICAgICBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZC5pbmRleE9mKGFic29sdXRlSWRlbnRpdHkpID09PSAtMVxuICAgICAgICApLFxuICAgICAgXTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coXG4gICAgLy8gICBcIiEhISEgR2V0dGluZyBtaXNzaW5nIG5vZGUgY2hpbGRyZW46IFwiICtcbiAgICAvLyAgICAgSlNPTi5zdHJpbmdpZnkobm9kZXNNaXNzaW5nQ2hpbGRyZW4pXG4gICAgLy8gKTtcblxuICAgIGxldCBwcm9taXNlczogYW55ID0gW107XG4gICAgZm9yIChsZXQgYWJzSWQgb2Ygbm9kZXNNaXNzaW5nQ2hpbGRyZW4pIHtcbiAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgIGdldE5vZGVDaGlsZHJlbih7XG4gICAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgICBlbnRpdHlUeXBlUGx1cmFsOiBzZWxlY3RlZEVudGl0eT8uZ2V0VHlwZVBsdXJhbCgpIHx8IGVudGl0eVR5cGUsIC8vIFRPRE86IHNob3VsZCBhY3R1YWxseSBiZSB0eXBlIG9mIGN1cnJlbnQgZW50aXR5IHdpdGggaXJpIGFic0lkLCBub3QgdHlwZSBvZiBzZWxlY3RlZEVudGl0eVxuICAgICAgICAgICAgZW50aXR5SXJpOiBhYnNJZC5zcGxpdChcIjtcIikucG9wKCksXG4gICAgICAgICAgICBhYnNvbHV0ZUlkZW50aXR5OiBhYnNJZCxcbiAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgICAgYXBpVXJsLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvciAobGV0IHByb21pc2Ugb2YgcHJvbWlzZXMpIHByb21pc2UuYWJvcnQoKTsgLy8gY29tcG9uZW50IHdhcyB1bm1vdW50ZWRcbiAgICB9O1xuICB9LCBbXG4gICAgZGlzcGF0Y2gsXG4gICAgbGFuZyxcbiAgICBKU09OLnN0cmluZ2lmeShtYW51YWxseUV4cGFuZGVkTm9kZXMpLFxuICAgIEpTT04uc3RyaW5naWZ5KGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICBKU09OLnN0cmluZ2lmeShub2RlQ2hpbGRyZW4pLFxuICAgIG9udG9sb2d5LmdldE9udG9sb2d5SWQoKSxcbiAgICBlbnRpdHlUeXBlLFxuICAgIHByZWZlcnJlZFJvb3RzLFxuICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgc2hvd1NpYmxpbmdzRW5hYmxlZCxcbiAgXSk7XG5cbiAgbGV0IHRvZ2dsZVNob3dPYnNvbGV0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2hvd09ic29sZXRlRW5hYmxlZCkgZGlzcGF0Y2goaGlkZU9ic29sZXRlKCkpO1xuICAgIGVsc2UgZGlzcGF0Y2goc2hvd09ic29sZXRlKCkpO1xuICB9LCBbZGlzcGF0Y2gsIHNob3dPYnNvbGV0ZUVuYWJsZWRdKTtcblxuICBsZXQgdG9nZ2xlU2hvd1NpYmxpbmdzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzaG93U2libGluZ3NFbmFibGVkKSBkaXNwYXRjaChoaWRlU2libGluZ3MoKSk7XG4gICAgZWxzZSBkaXNwYXRjaChzaG93U2libGluZ3MoKSk7XG4gIH0sIFtkaXNwYXRjaCwgc2hvd1NpYmxpbmdzRW5hYmxlZF0pO1xuXG4gIGxldCB0b2dnbGVTaG93Q291bnRzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzaG93Q291bnRzRW5hYmxlZCkgZGlzcGF0Y2goaGlkZUNvdW50cygpKTtcbiAgICBlbHNlIGRpc3BhdGNoKHNob3dDb3VudHMoKSk7XG4gIH0sIFtkaXNwYXRjaCwgc2hvd0NvdW50c0VuYWJsZWRdKTtcblxuICBmdW5jdGlvbiByZW5kZXJOb2RlQ2hpbGRyZW4oXG4gICAgY2hpbGRyZW46IFRyZWVOb2RlW10sXG4gICAgZGVidWdOdW1JdGVyYXRpb25zOiBudW1iZXJcbiAgKSB7XG4gICAgaWYgKGRlYnVnTnVtSXRlcmF0aW9ucyA+IDEwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJvYmFibGUgY3ljbGljIHRyZWUgKHJlbmRlck5vZGVDaGlsZHJlbilcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkcmVuQ29weSA9IFsuLi5jaGlsZHJlbl07XG4gICAgY2hpbGRyZW5Db3B5LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHRpdGxlQSA9IGE/LnRpdGxlID8gYS50aXRsZS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkgOiBcIlwiO1xuICAgICAgY29uc3QgdGl0bGVCID0gYj8udGl0bGUgPyBiLnRpdGxlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSA6IFwiXCI7XG4gICAgICByZXR1cm4gdGl0bGVBID09PSB0aXRsZUIgPyAwIDogdGl0bGVBID4gdGl0bGVCID8gMSA6IC0xO1xuICAgIH0pO1xuICAgIGNvbnN0IGNoaWxkcmVuU29ydGVkID0gY2hpbGRyZW5Db3B5LmZpbHRlcihcbiAgICAgIChjaGlsZCwgaSwgYXJyKSA9PlxuICAgICAgICAhaSB8fCBjaGlsZC5hYnNvbHV0ZUlkZW50aXR5ICE9PSBhcnJbaSAtIDFdLmFic29sdXRlSWRlbnRpdHlcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8dWxcbiAgICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgICAgY2xhc3NOYW1lPVwianN0cmVlLWNvbnRhaW5lci11bCBqc3RyZWUtY2hpbGRyZW4ganN0cmVlLW5vLWljb25zXCJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVuU29ydGVkLm1hcCgoY2hpbGROb2RlOiBUcmVlTm9kZSwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPVxuICAgICAgICAgICAgbWFudWFsbHlFeHBhbmRlZE5vZGVzLmluZGV4T2YoY2hpbGROb2RlLmFic29sdXRlSWRlbnRpdHkpICE9PSAtMSB8fFxuICAgICAgICAgICAgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMuaW5kZXhPZihjaGlsZE5vZGUuYWJzb2x1dGVJZGVudGl0eSkgIT09XG4gICAgICAgICAgICAgIC0xO1xuICAgICAgICAgIGNvbnN0IGlzTGFzdCA9IGkgPT09IGNoaWxkcmVuU29ydGVkIS5sZW5ndGggLSAxO1xuICAgICAgICAgIGNvbnN0IGhpZ2hsaWdodCA9XG4gICAgICAgICAgICAoc2VsZWN0ZWRFbnRpdHkgJiYgY2hpbGROb2RlLmlyaSA9PT0gc2VsZWN0ZWRFbnRpdHkuZ2V0SXJpKCkpIHx8XG4gICAgICAgICAgICBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE5vZGVcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZT17Y2hpbGROb2RlLmV4cGFuZGFibGV9XG4gICAgICAgICAgICAgIGV4cGFuZGVkPXtpc0V4cGFuZGVkfVxuICAgICAgICAgICAgICBoaWdobGlnaHQ9e2hpZ2hsaWdodH1cbiAgICAgICAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICB0b2dnbGVOb2RlKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtjaGlsZE5vZGUuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09PVxuICAgICAgICAgICAgICAgIFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0JGT18wMDAwMDUwXCIgJiYgKFxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1yLTFcIlxuICAgICAgICAgICAgICAgICAgc3JjPXt1cmxKb2luKHByb2Nlc3MuZW52LlBVQkxJQ19VUkwhLCBcIi9wYXJ0LnN2Z1wiKX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogXCIxZW1cIiwgZGlzcGxheTogXCJpbmxpbmVcIiB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtjaGlsZE5vZGUuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09PVxuICAgICAgICAgICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIiAmJiAoXG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXItMVwiXG4gICAgICAgICAgICAgICAgICBzcmM9e3VybEpvaW4ocHJvY2Vzcy5lbnYuUFVCTElDX1VSTCEsIFwiL2luc3RhbmNlLnN2Z1wiKX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogXCIxZW1cIiwgZGlzcGxheTogXCJpbmxpbmVcIiB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxUcmVlTGlua1xuICAgICAgICAgICAgICAgIG9udG9sb2d5PXtvbnRvbG9neX1cbiAgICAgICAgICAgICAgICBlbnRpdHk9e2NoaWxkTm9kZS5lbnRpdHl9XG4gICAgICAgICAgICAgICAgdGl0bGU9e2NoaWxkTm9kZS50aXRsZX1cbiAgICAgICAgICAgICAgICBsYW5nPXtsYW5nfVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17b25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgeyFzaG93T2Jzb2xldGVFbmFibGVkICYmXG4gICAgICAgICAgICAgICAgc2hvd0NvdW50c0VuYWJsZWQgJiZcbiAgICAgICAgICAgICAgICBjaGlsZE5vZGUubnVtRGVzY2VuZGFudHMgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiBcImdyYXlcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAge1wiIChcIiArIGNoaWxkTm9kZS5udW1EZXNjZW5kYW50cy50b0xvY2FsZVN0cmluZygpICsgXCIpXCJ9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2lzRXhwYW5kZWQgJiZcbiAgICAgICAgICAgICAgICByZW5kZXJOb2RlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICBub2RlQ2hpbGRyZW5bY2hpbGROb2RlLmFic29sdXRlSWRlbnRpdHldIHx8IFtdLFxuICAgICAgICAgICAgICAgICAgZGVidWdOdW1JdGVyYXRpb25zICsgMVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L05vZGU+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L3VsPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sLXJldmVyc2UgbGc6Z3JpZCBsZzpncmlkLWNvbHMtMyBsZzpnYXAtNFwiPlxuICAgICAgICB7cm9vdE5vZGVzID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGc6Y29sLXNwYW4tMiByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC0zIHBiLTMganN0cmVlIGpzdHJlZS0xIGpzdHJlZS1wcm90b24gb3ZlcmZsb3cteC1hdXRvXCJcbiAgICAgICAgICAgICAgcm9sZT1cInRyZWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7cmVuZGVyTm9kZUNoaWxkcmVuKHJvb3ROb2RlcywgMCl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtudW1QZW5kaW5nVHJlZVJlcXVlc3RzID4gMCA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBzcGlubmVyLWRlZmF1bHQgdy03IGgtNyAtdG9wLTEgLWxlZnQtNCB6LWF1dG9cIiAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxnOmNvbC1zcGFuLTEgZmxleCBmbGV4LWNvbCBiZy13aGl0ZSBweC0yIG1iLTIgcm91bmRlZC1sZ1wiPlxuICAgICAgICAgIHtlbnRpdHlUeXBlID09PSBcImNsYXNzZXNcIiAmJlxuICAgICAgICAgICAgb250b2xvZ3kuZ2V0UHJlZmVycmVkUm9vdHMoKS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgPEZvcm1Db250cm9sPlxuICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJhZGlvLWJ1dHRvbnMtZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJlZmVycmVkUm9vdHMgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGRpc3BhdGNoKGVuYWJsZVByZWZlcnJlZFJvb3RzKCkpfVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9ezxSYWRpbyAvPn1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlByZWZlcnJlZCByb290c1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtQ29udHJvbExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZGlzcGF0Y2goZGlzYWJsZVByZWZlcnJlZFJvb3RzKCkpfVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9ezxSYWRpbyAvPn1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkFsbCBjbGFzc2VzXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvUmFkaW9Hcm91cD5cbiAgICAgICAgICAgICAgICA8L0Zvcm1Db250cm9sPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2hvd09ic29sZXRlRW5hYmxlZH1cbiAgICAgICAgICAgICAgICBjaGVja2VkPXshc2hvd09ic29sZXRlRW5hYmxlZCAmJiBzaG93Q291bnRzRW5hYmxlZH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVTaG93Q291bnRzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFiZWw9XCJTaG93IGNvdW50c1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dPYnNvbGV0ZUVuYWJsZWR9XG4gICAgICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlU2hvd09ic29sZXRlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFiZWw9XCJTaG93IG9ic29sZXRlIHRlcm1zXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzZWxlY3RlZEVudGl0eSAmJiAoXG4gICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dTaWJsaW5nc0VuYWJsZWR9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVTaG93U2libGluZ3N9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYWJlbD1cIlNob3cgYWxsIHNpYmxpbmdzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFRyZWVMaW5rKHtcbiAgb250b2xvZ3ksXG4gIGVudGl0eSxcbiAgdGl0bGUsXG4gIGxhbmcsXG4gIG9uTmF2aWdhdGVUb0VudGl0eSxcbiAgb25OYXZpZ2F0ZVRvT250b2xvZ3ksXG59OiB7XG4gIG9udG9sb2d5OiBPbnRvbG9neTtcbiAgZW50aXR5OiBFbnRpdHk7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGxhbmc6IHN0cmluZztcbiAgb25OYXZpZ2F0ZVRvRW50aXR5OiAob250b2xvZ3k6IE9udG9sb2d5LCBlbnRpdHk6IEVudGl0eSkgPT4gdm9pZDtcbiAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eTogRW50aXR5KSA9PiB2b2lkO1xufSkge1xuICBsZXQgZGVmaW5lZEJ5OiBzdHJpbmdbXSA9IGVudGl0eS5nZXREZWZpbmVkQnkoKTtcblxuICBpZiAoZGVmaW5lZEJ5LmluZGV4T2Yob250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpKSAhPT0gLTEpIGRlZmluZWRCeSA9IFtdOyAvLyBkb24ndCBzaG93IGRlZmluZWRCeSBsaW5rcyBmb3IgdGVybXMgaW4gY3VycmVudCBvbnRvbG9neVxuXG4gIHJldHVybiAoXG4gICAgPHNwYW4+XG4gICAgICA8YVxuICAgICAgICB0aXRsZT17ZW50aXR5LmdldElyaSgpfVxuICAgICAgICBjbGFzc05hbWU9e1wibGluay1kZWZhdWx0XCJ9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uTmF2aWdhdGVUb0VudGl0eShvbnRvbG9neSwgZW50aXR5KX1cbiAgICAgID5cbiAgICAgICAge3RpdGxlfVxuICAgICAgPC9hPlxuICAgICAge2RlZmluZWRCeS5sZW5ndGggPiAwICYmXG4gICAgICAgIGRlZmluZWRCeS5tYXAoKGRlZmluaW5nT250b2xvZ3kpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25OYXZpZ2F0ZVRvT250b2xvZ3koZGVmaW5pbmdPbnRvbG9neSwgZW50aXR5KX1cbiAgICAgICAgICAgICAgdGl0bGU9e2RlZmluaW5nT250b2xvZ3kudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXgtMSBsaW5rLW9udG9sb2d5IHB4LTIgcHktMC41IHJvdW5kZWQtbWQgdGV4dC1zbSB0ZXh0LXdoaXRlIHVwcGVyY2FzZSBtbC0xXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2RlZmluaW5nT250b2xvZ3l9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgPC9zcGFuPlxuICApO1xufVxuIiwgImNvbnN0IGNvbW1vbiA9IHtcbiAgYmxhY2s6ICcjMDAwJyxcbiAgd2hpdGU6ICcjZmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1vbjsiLCAiY29uc3QgcmVkID0ge1xuICA1MDogJyNmZmViZWUnLFxuICAxMDA6ICcjZmZjZGQyJyxcbiAgMjAwOiAnI2VmOWE5YScsXG4gIDMwMDogJyNlNTczNzMnLFxuICA0MDA6ICcjZWY1MzUwJyxcbiAgNTAwOiAnI2Y0NDMzNicsXG4gIDYwMDogJyNlNTM5MzUnLFxuICA3MDA6ICcjZDMyZjJmJyxcbiAgODAwOiAnI2M2MjgyOCcsXG4gIDkwMDogJyNiNzFjMWMnLFxuICBBMTAwOiAnI2ZmOGE4MCcsXG4gIEEyMDA6ICcjZmY1MjUyJyxcbiAgQTQwMDogJyNmZjE3NDQnLFxuICBBNzAwOiAnI2Q1MDAwMCdcbn07XG5leHBvcnQgZGVmYXVsdCByZWQ7IiwgImNvbnN0IHB1cnBsZSA9IHtcbiAgNTA6ICcjZjNlNWY1JyxcbiAgMTAwOiAnI2UxYmVlNycsXG4gIDIwMDogJyNjZTkzZDgnLFxuICAzMDA6ICcjYmE2OGM4JyxcbiAgNDAwOiAnI2FiNDdiYycsXG4gIDUwMDogJyM5YzI3YjAnLFxuICA2MDA6ICcjOGUyNGFhJyxcbiAgNzAwOiAnIzdiMWZhMicsXG4gIDgwMDogJyM2YTFiOWEnLFxuICA5MDA6ICcjNGExNDhjJyxcbiAgQTEwMDogJyNlYTgwZmMnLFxuICBBMjAwOiAnI2UwNDBmYicsXG4gIEE0MDA6ICcjZDUwMGY5JyxcbiAgQTcwMDogJyNhYTAwZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgcHVycGxlOyIsICJjb25zdCBibHVlID0ge1xuICA1MDogJyNlM2YyZmQnLFxuICAxMDA6ICcjYmJkZWZiJyxcbiAgMjAwOiAnIzkwY2FmOScsXG4gIDMwMDogJyM2NGI1ZjYnLFxuICA0MDA6ICcjNDJhNWY1JyxcbiAgNTAwOiAnIzIxOTZmMycsXG4gIDYwMDogJyMxZTg4ZTUnLFxuICA3MDA6ICcjMTk3NmQyJyxcbiAgODAwOiAnIzE1NjVjMCcsXG4gIDkwMDogJyMwZDQ3YTEnLFxuICBBMTAwOiAnIzgyYjFmZicsXG4gIEEyMDA6ICcjNDQ4YWZmJyxcbiAgQTQwMDogJyMyOTc5ZmYnLFxuICBBNzAwOiAnIzI5NjJmZidcbn07XG5leHBvcnQgZGVmYXVsdCBibHVlOyIsICJjb25zdCBsaWdodEJsdWUgPSB7XG4gIDUwOiAnI2UxZjVmZScsXG4gIDEwMDogJyNiM2U1ZmMnLFxuICAyMDA6ICcjODFkNGZhJyxcbiAgMzAwOiAnIzRmYzNmNycsXG4gIDQwMDogJyMyOWI2ZjYnLFxuICA1MDA6ICcjMDNhOWY0JyxcbiAgNjAwOiAnIzAzOWJlNScsXG4gIDcwMDogJyMwMjg4ZDEnLFxuICA4MDA6ICcjMDI3N2JkJyxcbiAgOTAwOiAnIzAxNTc5YicsXG4gIEExMDA6ICcjODBkOGZmJyxcbiAgQTIwMDogJyM0MGM0ZmYnLFxuICBBNDAwOiAnIzAwYjBmZicsXG4gIEE3MDA6ICcjMDA5MWVhJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGxpZ2h0Qmx1ZTsiLCAiY29uc3QgZ3JlZW4gPSB7XG4gIDUwOiAnI2U4ZjVlOScsXG4gIDEwMDogJyNjOGU2YzknLFxuICAyMDA6ICcjYTVkNmE3JyxcbiAgMzAwOiAnIzgxYzc4NCcsXG4gIDQwMDogJyM2NmJiNmEnLFxuICA1MDA6ICcjNGNhZjUwJyxcbiAgNjAwOiAnIzQzYTA0NycsXG4gIDcwMDogJyMzODhlM2MnLFxuICA4MDA6ICcjMmU3ZDMyJyxcbiAgOTAwOiAnIzFiNWUyMCcsXG4gIEExMDA6ICcjYjlmNmNhJyxcbiAgQTIwMDogJyM2OWYwYWUnLFxuICBBNDAwOiAnIzAwZTY3NicsXG4gIEE3MDA6ICcjMDBjODUzJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZWVuOyIsICJjb25zdCBvcmFuZ2UgPSB7XG4gIDUwOiAnI2ZmZjNlMCcsXG4gIDEwMDogJyNmZmUwYjInLFxuICAyMDA6ICcjZmZjYzgwJyxcbiAgMzAwOiAnI2ZmYjc0ZCcsXG4gIDQwMDogJyNmZmE3MjYnLFxuICA1MDA6ICcjZmY5ODAwJyxcbiAgNjAwOiAnI2ZiOGMwMCcsXG4gIDcwMDogJyNmNTdjMDAnLFxuICA4MDA6ICcjZWY2YzAwJyxcbiAgOTAwOiAnI2U2NTEwMCcsXG4gIEExMDA6ICcjZmZkMTgwJyxcbiAgQTIwMDogJyNmZmFiNDAnLFxuICBBNDAwOiAnI2ZmOTEwMCcsXG4gIEE3MDA6ICcjZmY2ZDAwJ1xufTtcbmV4cG9ydCBkZWZhdWx0IG9yYW5nZTsiLCAiY29uc3QgZ3JleSA9IHtcbiAgNTA6ICcjZmFmYWZhJyxcbiAgMTAwOiAnI2Y1ZjVmNScsXG4gIDIwMDogJyNlZWVlZWUnLFxuICAzMDA6ICcjZTBlMGUwJyxcbiAgNDAwOiAnI2JkYmRiZCcsXG4gIDUwMDogJyM5ZTllOWUnLFxuICA2MDA6ICcjNzU3NTc1JyxcbiAgNzAwOiAnIzYxNjE2MScsXG4gIDgwMDogJyM0MjQyNDInLFxuICA5MDA6ICcjMjEyMTIxJyxcbiAgQTEwMDogJyNmNWY1ZjUnLFxuICBBMjAwOiAnI2VlZWVlZScsXG4gIEE0MDA6ICcjYmRiZGJkJyxcbiAgQTcwMDogJyM2MTYxNjEnXG59O1xuZXhwb3J0IGRlZmF1bHQgZ3JleTsiLCAiZXhwb3J0IGRlZmF1bHQgJyQkbWF0ZXJpYWwnOyIsICJpbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbmV4cG9ydCB7IGNzcywga2V5ZnJhbWVzLCBTdHlsZWRFbmdpbmVQcm92aWRlciB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdsb2JhbFN0eWxlcyB9IGZyb20gJy4vR2xvYmFsU3R5bGVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYm9yZGVycyB9IGZyb20gJy4vYm9yZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2JvcmRlcnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBicmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMsIG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyLCByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyBhcyB1bnN0YWJsZV9yZXNvbHZlQnJlYWtwb2ludFZhbHVlcyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21wb3NlIH0gZnJvbSAnLi9jb21wb3NlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGlzcGxheSB9IGZyb20gJy4vZGlzcGxheSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZsZXhib3ggfSBmcm9tICcuL2ZsZXhib3gnO1xuZXhwb3J0ICogZnJvbSAnLi9mbGV4Ym94JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ3JpZCB9IGZyb20gJy4vY3NzR3JpZCc7XG5leHBvcnQgKiBmcm9tICcuL2Nzc0dyaWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYWxldHRlIH0gZnJvbSAnLi9wYWxldHRlJztcbmV4cG9ydCAqIGZyb20gJy4vcGFsZXR0ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBvc2l0aW9ucyB9IGZyb20gJy4vcG9zaXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vcG9zaXRpb25zJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2hhZG93cyB9IGZyb20gJy4vc2hhZG93cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNpemluZyB9IGZyb20gJy4vc2l6aW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc2l6aW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BhY2luZyB9IGZyb20gJy4vc3BhY2luZyc7XG5leHBvcnQgKiBmcm9tICcuL3NwYWNpbmcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZSwgZ2V0UGF0aCwgZ2V0U3R5bGVWYWx1ZSB9IGZyb20gJy4vc3R5bGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBvZ3JhcGh5IH0gZnJvbSAnLi90eXBvZ3JhcGh5JztcbmV4cG9ydCAqIGZyb20gJy4vdHlwb2dyYXBoeSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX3N0eWxlRnVuY3Rpb25TeCwgdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4LCBleHRlbmRTeFByb3AgYXMgdW5zdGFibGVfZXh0ZW5kU3hQcm9wLCB1bnN0YWJsZV9kZWZhdWx0U3hDb25maWcgfSBmcm9tICcuL3N0eWxlRnVuY3Rpb25TeCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBmdW5jdGlvbiBpbiB2NlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVyaW1lbnRhbF9zeCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBcXGBleHBlcmltZW50YWxfc3hcXGAgaGFzIGJlZW4gbW92ZWQgdG8gXFxgdGhlbWUudW5zdGFibGVfc3hcXGAuRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNTE1MC5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgyMCkpO1xufVxuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9nZXRUaGVtZVZhbHVlIH0gZnJvbSAnLi9nZXRUaGVtZVZhbHVlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm94IH0gZnJvbSAnLi9Cb3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVCb3ggfSBmcm9tICcuL2NyZWF0ZUJveCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVN0eWxlZCB9IGZyb20gJy4vY3JlYXRlU3R5bGVkJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlU3R5bGVkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3R5bGVkIH0gZnJvbSAnLi9zdHlsZWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVUaGVtZSB9IGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVCcmVha3BvaW50cyB9IGZyb20gJy4vY3JlYXRlVGhlbWUvY3JlYXRlQnJlYWtwb2ludHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVTcGFjaW5nIH0gZnJvbSAnLi9jcmVhdGVUaGVtZS9jcmVhdGVTcGFjaW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2hhcGUgfSBmcm9tICcuL2NyZWF0ZVRoZW1lL3NoYXBlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlVGhlbWVQcm9wcywgZ2V0VGhlbWVQcm9wcyB9IGZyb20gJy4vdXNlVGhlbWVQcm9wcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVRoZW1lIH0gZnJvbSAnLi91c2VUaGVtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVRoZW1lV2l0aG91dERlZmF1bHQgfSBmcm9tICcuL3VzZVRoZW1lV2l0aG91dERlZmF1bHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VNZWRpYVF1ZXJ5IH0gZnJvbSAnLi91c2VNZWRpYVF1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vY29sb3JNYW5pcHVsYXRvcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRoZW1lUHJvdmlkZXIgfSBmcm9tICcuL1RoZW1lUHJvdmlkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9jcmVhdGVDc3NWYXJzUHJvdmlkZXIgfSBmcm9tICcuL2Nzc1ZhcnMvY3JlYXRlQ3NzVmFyc1Byb3ZpZGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfY3JlYXRlR2V0Q3NzVmFyIH0gZnJvbSAnLi9jc3NWYXJzL2NyZWF0ZUdldENzc1Zhcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX2Nzc1ZhcnNQYXJzZXIgfSBmcm9tICcuL2Nzc1ZhcnMvY3NzVmFyc1BhcnNlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX3ByZXBhcmVDc3NWYXJzIH0gZnJvbSAnLi9jc3NWYXJzL3ByZXBhcmVDc3NWYXJzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfY3JlYXRlQ3NzVmFyc1RoZW1lIH0gZnJvbSAnLi9jc3NWYXJzL2NyZWF0ZUNzc1ZhcnNUaGVtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlc3BvbnNpdmVQcm9wVHlwZSB9IGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnRsUHJvdmlkZXIgfSBmcm9tICcuL1J0bFByb3ZpZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vUnRsUHJvdmlkZXInO1xuXG4vKiogLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qKiBMYXlvdXQgY29tcG9uZW50cyAqL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVDb250YWluZXIgfSBmcm9tICcuL0NvbnRhaW5lci9jcmVhdGVDb250YWluZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb250YWluZXIgfSBmcm9tICcuL0NvbnRhaW5lcic7XG5leHBvcnQgKiBmcm9tICcuL0NvbnRhaW5lcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVuc3RhYmxlX0dyaWQgfSBmcm9tICcuL1Vuc3RhYmxlX0dyaWQvR3JpZCc7XG5leHBvcnQgKiBmcm9tICcuL1Vuc3RhYmxlX0dyaWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdGFjayB9IGZyb20gJy4vU3RhY2svU3RhY2snO1xuZXhwb3J0ICogZnJvbSAnLi9TdGFjayc7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcInBhbGV0dGVcIiwgXCJzcGFjaW5nXCIsIFwic2hhcGVcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBjcmVhdGVCcmVha3BvaW50cyBmcm9tICcuL2NyZWF0ZUJyZWFrcG9pbnRzJztcbmltcG9ydCBzaGFwZSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCBjcmVhdGVTcGFjaW5nIGZyb20gJy4vY3JlYXRlU3BhY2luZyc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4IGZyb20gJy4uL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGRlZmF1bHRTeENvbmZpZyBmcm9tICcuLi9zdHlsZUZ1bmN0aW9uU3gvZGVmYXVsdFN4Q29uZmlnJztcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tICcuL2FwcGx5U3R5bGVzJztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBicmVha3BvaW50czogYnJlYWtwb2ludHNJbnB1dCA9IHt9LFxuICAgICAgcGFsZXR0ZTogcGFsZXR0ZUlucHV0ID0ge30sXG4gICAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXQsXG4gICAgICBzaGFwZTogc2hhcGVJbnB1dCA9IHt9XG4gICAgfSA9IG9wdGlvbnMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICBjb25zdCBicmVha3BvaW50cyA9IGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzSW5wdXQpO1xuICBjb25zdCBzcGFjaW5nID0gY3JlYXRlU3BhY2luZyhzcGFjaW5nSW5wdXQpO1xuICBsZXQgbXVpVGhlbWUgPSBkZWVwbWVyZ2Uoe1xuICAgIGJyZWFrcG9pbnRzLFxuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgLy8gSW5qZWN0IGNvbXBvbmVudCBkZWZpbml0aW9ucy5cbiAgICBwYWxldHRlOiBfZXh0ZW5kcyh7XG4gICAgICBtb2RlOiAnbGlnaHQnXG4gICAgfSwgcGFsZXR0ZUlucHV0KSxcbiAgICBzcGFjaW5nLFxuICAgIHNoYXBlOiBfZXh0ZW5kcyh7fSwgc2hhcGUsIHNoYXBlSW5wdXQpXG4gIH0sIG90aGVyKTtcbiAgbXVpVGhlbWUuYXBwbHlTdHlsZXMgPSBhcHBseVN0eWxlcztcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnID0gX2V4dGVuZHMoe30sIGRlZmF1bHRTeENvbmZpZywgb3RoZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG90aGVyLnVuc3RhYmxlX3N4Q29uZmlnKTtcbiAgbXVpVGhlbWUudW5zdGFibGVfc3ggPSBmdW5jdGlvbiBzeChwcm9wcykge1xuICAgIHJldHVybiBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgc3g6IHByb3BzLFxuICAgICAgdGhlbWU6IHRoaXNcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIG11aVRoZW1lO1xufVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVGhlbWU7IiwgImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJ2YWx1ZXNcIiwgXCJ1bml0XCIsIFwic3RlcFwiXTtcbi8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbi8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbmV4cG9ydCBjb25zdCBicmVha3BvaW50S2V5cyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnXTtcbmNvbnN0IHNvcnRCcmVha3BvaW50c1ZhbHVlcyA9IHZhbHVlcyA9PiB7XG4gIGNvbnN0IGJyZWFrcG9pbnRzQXNBcnJheSA9IE9iamVjdC5rZXlzKHZhbHVlcykubWFwKGtleSA9PiAoe1xuICAgIGtleSxcbiAgICB2YWw6IHZhbHVlc1trZXldXG4gIH0pKSB8fCBbXTtcbiAgLy8gU29ydCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgYnJlYWtwb2ludHNBc0FycmF5LnNvcnQoKGJyZWFrcG9pbnQxLCBicmVha3BvaW50MikgPT4gYnJlYWtwb2ludDEudmFsIC0gYnJlYWtwb2ludDIudmFsKTtcbiAgcmV0dXJuIGJyZWFrcG9pbnRzQXNBcnJheS5yZWR1Y2UoKGFjYywgb2JqKSA9PiB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhY2MsIHtcbiAgICAgIFtvYmoua2V5XTogb2JqLnZhbFxuICAgIH0pO1xuICB9LCB7fSk7XG59O1xuXG4vLyBLZWVwIGluIG1pbmQgdGhhdCBAbWVkaWEgaXMgaW5jbHVzaXZlIGJ5IHRoZSBDU1Mgc3BlY2lmaWNhdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzKSB7XG4gIGNvbnN0IHtcbiAgICAgIC8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuICAgICAgLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc20pLlxuICAgICAgdmFsdWVzID0ge1xuICAgICAgICB4czogMCxcbiAgICAgICAgLy8gcGhvbmVcbiAgICAgICAgc206IDYwMCxcbiAgICAgICAgLy8gdGFibGV0XG4gICAgICAgIG1kOiA5MDAsXG4gICAgICAgIC8vIHNtYWxsIGxhcHRvcFxuICAgICAgICBsZzogMTIwMCxcbiAgICAgICAgLy8gZGVza3RvcFxuICAgICAgICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbiAgICAgIH0sXG4gICAgICB1bml0ID0gJ3B4JyxcbiAgICAgIHN0ZXAgPSA1XG4gICAgfSA9IGJyZWFrcG9pbnRzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoYnJlYWtwb2ludHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHNvcnRlZFZhbHVlcyA9IHNvcnRCcmVha3BvaW50c1ZhbHVlcyh2YWx1ZXMpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc29ydGVkVmFsdWVzKTtcbiAgZnVuY3Rpb24gdXAoa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlfSR7dW5pdH0pYDtcbiAgfVxuICBmdW5jdGlvbiBkb3duKGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbHVlc1trZXldID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXldIDoga2V5O1xuICAgIHJldHVybiBgQG1lZGlhIChtYXgtd2lkdGg6JHt2YWx1ZSAtIHN0ZXAgLyAxMDB9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIGJldHdlZW4oc3RhcnQsIGVuZCkge1xuICAgIGNvbnN0IGVuZEluZGV4ID0ga2V5cy5pbmRleE9mKGVuZCk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1pbi13aWR0aDoke3R5cGVvZiB2YWx1ZXNbc3RhcnRdID09PSAnbnVtYmVyJyA/IHZhbHVlc1tzdGFydF0gOiBzdGFydH0ke3VuaXR9KSBhbmQgYCArIGAobWF4LXdpZHRoOiR7KGVuZEluZGV4ICE9PSAtMSAmJiB0eXBlb2YgdmFsdWVzW2tleXNbZW5kSW5kZXhdXSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5c1tlbmRJbmRleF1dIDogZW5kKSAtIHN0ZXAgLyAxMDB9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIG9ubHkoa2V5KSB7XG4gICAgaWYgKGtleXMuaW5kZXhPZihrZXkpICsgMSA8IGtleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmV0d2VlbihrZXksIGtleXNba2V5cy5pbmRleE9mKGtleSkgKyAxXSk7XG4gICAgfVxuICAgIHJldHVybiB1cChrZXkpO1xuICB9XG4gIGZ1bmN0aW9uIG5vdChrZXkpIHtcbiAgICAvLyBoYW5kbGUgZmlyc3QgYW5kIGxhc3Qga2V5IHNlcGFyYXRlbHksIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHlcbiAgICBjb25zdCBrZXlJbmRleCA9IGtleXMuaW5kZXhPZihrZXkpO1xuICAgIGlmIChrZXlJbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVwKGtleXNbMV0pO1xuICAgIH1cbiAgICBpZiAoa2V5SW5kZXggPT09IGtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIGRvd24oa2V5c1trZXlJbmRleF0pO1xuICAgIH1cbiAgICByZXR1cm4gYmV0d2VlbihrZXksIGtleXNba2V5cy5pbmRleE9mKGtleSkgKyAxXSkucmVwbGFjZSgnQG1lZGlhJywgJ0BtZWRpYSBub3QgYWxsIGFuZCcpO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAga2V5cyxcbiAgICB2YWx1ZXM6IHNvcnRlZFZhbHVlcyxcbiAgICB1cCxcbiAgICBkb3duLFxuICAgIGJldHdlZW4sXG4gICAgb25seSxcbiAgICBub3QsXG4gICAgdW5pdFxuICB9LCBvdGhlcik7XG59IiwgImNvbnN0IHNoYXBlID0ge1xuICBib3JkZXJSYWRpdXM6IDRcbn07XG5leHBvcnQgZGVmYXVsdCBzaGFwZTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5cbi8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc21bLlxuZXhwb3J0IGNvbnN0IHZhbHVlcyA9IHtcbiAgeHM6IDAsXG4gIC8vIHBob25lXG4gIHNtOiA2MDAsXG4gIC8vIHRhYmxldFxuICBtZDogOTAwLFxuICAvLyBzbWFsbCBsYXB0b3BcbiAgbGc6IDEyMDAsXG4gIC8vIGRlc2t0b3BcbiAgeGw6IDE1MzYgLy8gbGFyZ2Ugc2NyZWVuXG59O1xuY29uc3QgZGVmYXVsdEJyZWFrcG9pbnRzID0ge1xuICAvLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4gIC8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbiAga2V5czogWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddLFxuICB1cDoga2V5ID0+IGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlc1trZXldfXB4KWBcbn07XG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKSB7XG4gIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBwcm9wVmFsdWUucmVkdWNlKChhY2MsIGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cCh0aGVtZUJyZWFrcG9pbnRzLmtleXNbaW5kZXhdKV0gPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlW2luZGV4XSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wVmFsdWUpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50KSA9PiB7XG4gICAgICAvLyBrZXkgaXMgYnJlYWtwb2ludFxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMudmFsdWVzIHx8IHZhbHVlcykuaW5kZXhPZihicmVha3BvaW50KSAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbWVkaWFLZXkgPSB0aGVtZUJyZWFrcG9pbnRzLnVwKGJyZWFrcG9pbnQpO1xuICAgICAgICBhY2NbbWVkaWFLZXldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVticmVha3BvaW50XSwgYnJlYWtwb2ludCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjc3NLZXkgPSBicmVha3BvaW50O1xuICAgICAgICBhY2NbY3NzS2V5XSA9IHByb3BWYWx1ZVtjc3NLZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5mdW5jdGlvbiBicmVha3BvaW50cyhzdHlsZUZ1bmN0aW9uKSB7XG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBuZXdTdHlsZUZ1bmN0aW9uID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gICAgY29uc3QgYmFzZSA9IHN0eWxlRnVuY3Rpb24ocHJvcHMpO1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgY29uc3QgZXh0ZW5kZWQgPSB0aGVtZUJyZWFrcG9pbnRzLmtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKHByb3BzW2tleV0pIHtcbiAgICAgICAgYWNjID0gYWNjIHx8IHt9O1xuICAgICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cChrZXkpXSA9IHN0eWxlRnVuY3Rpb24oX2V4dGVuZHMoe1xuICAgICAgICAgIHRoZW1lXG4gICAgICAgIH0sIHByb3BzW2tleV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbnVsbCk7XG4gICAgcmV0dXJuIG1lcmdlKGJhc2UsIGV4dGVuZGVkKTtcbiAgfTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX2V4dGVuZHMoe30sIHN0eWxlRnVuY3Rpb24ucHJvcFR5cGVzLCB7XG4gICAgeHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc206IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbGc6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgeGw6IFByb3BUeXBlcy5vYmplY3RcbiAgfSkgOiB7fTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wcyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnLCAuLi5zdHlsZUZ1bmN0aW9uLmZpbHRlclByb3BzXTtcbiAgcmV0dXJuIG5ld1N0eWxlRnVuY3Rpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQgPSB7fSkge1xuICB2YXIgX2JyZWFrcG9pbnRzSW5wdXQka2V5O1xuICBjb25zdCBicmVha3BvaW50c0luT3JkZXIgPSAoX2JyZWFrcG9pbnRzSW5wdXQka2V5ID0gYnJlYWtwb2ludHNJbnB1dC5rZXlzKSA9PSBudWxsID8gdm9pZCAwIDogX2JyZWFrcG9pbnRzSW5wdXQka2V5LnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50U3R5bGVLZXkgPSBicmVha3BvaW50c0lucHV0LnVwKGtleSk7XG4gICAgYWNjW2JyZWFrcG9pbnRTdHlsZUtleV0gPSB7fTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBicmVha3BvaW50c0luT3JkZXIgfHwge307XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoYnJlYWtwb2ludEtleXMsIHN0eWxlKSB7XG4gIHJldHVybiBicmVha3BvaW50S2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludE91dHB1dCA9IGFjY1trZXldO1xuICAgIGNvbnN0IGlzQnJlYWtwb2ludFVudXNlZCA9ICFicmVha3BvaW50T3V0cHV0IHx8IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRPdXRwdXQpLmxlbmd0aCA9PT0gMDtcbiAgICBpZiAoaXNCcmVha3BvaW50VW51c2VkKSB7XG4gICAgICBkZWxldGUgYWNjW2tleV07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHN0eWxlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcihicmVha3BvaW50c0lucHV0LCAuLi5zdHlsZXMpIHtcbiAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdChicmVha3BvaW50c0lucHV0KTtcbiAgY29uc3QgbWVyZ2VkT3V0cHV0ID0gW2VtcHR5QnJlYWtwb2ludHMsIC4uLnN0eWxlc10ucmVkdWNlKChwcmV2LCBuZXh0KSA9PiBkZWVwbWVyZ2UocHJldiwgbmV4dCksIHt9KTtcbiAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpLCBtZXJnZWRPdXRwdXQpO1xufVxuXG4vLyBjb21wdXRlIGJhc2UgZm9yIHJlc3BvbnNpdmUgdmFsdWVzOyBlLmcuLFxuLy8gWzEsMiwzXSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbi8vIHt4czogMSwgc206IDIsIG1kOiAzfSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQnJlYWtwb2ludHNCYXNlKGJyZWFrcG9pbnRWYWx1ZXMsIHRoZW1lQnJlYWtwb2ludHMpIHtcbiAgLy8gZml4ZWQgdmFsdWVcbiAgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBiYXNlID0ge307XG4gIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMpO1xuICBpZiAoQXJyYXkuaXNBcnJheShicmVha3BvaW50VmFsdWVzKSkge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKChicmVha3BvaW50LCBpKSA9PiB7XG4gICAgICBpZiAoaSA8IGJyZWFrcG9pbnRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgICAgaWYgKGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCkge1xuICAgICAgICBiYXNlW2JyZWFrcG9pbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYmFzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gIHZhbHVlczogYnJlYWtwb2ludFZhbHVlcyxcbiAgYnJlYWtwb2ludHM6IHRoZW1lQnJlYWtwb2ludHMsXG4gIGJhc2U6IGN1c3RvbUJhc2Vcbn0pIHtcbiAgY29uc3QgYmFzZSA9IGN1c3RvbUJhc2UgfHwgY29tcHV0ZUJyZWFrcG9pbnRzQmFzZShicmVha3BvaW50VmFsdWVzLCB0aGVtZUJyZWFrcG9pbnRzKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGJhc2UpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYnJlYWtwb2ludFZhbHVlcztcbiAgfVxuICBsZXQgcHJldmlvdXM7XG4gIHJldHVybiBrZXlzLnJlZHVjZSgoYWNjLCBicmVha3BvaW50LCBpKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludFZhbHVlcykpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbaV0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbaV0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gaTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsID8gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSA6IGJyZWFrcG9pbnRWYWx1ZXNbcHJldmlvdXNdO1xuICAgICAgcHJldmlvdXMgPSBicmVha3BvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5leHBvcnQgZGVmYXVsdCBicmVha3BvaW50czsiLCAiaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5mdW5jdGlvbiBtZXJnZShhY2MsIGl0ZW0pIHtcbiAgaWYgKCFpdGVtKSB7XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuICByZXR1cm4gZGVlcG1lcmdlKGFjYywgaXRlbSwge1xuICAgIGNsb25lOiBmYWxzZSAvLyBObyBuZWVkIHRvIGNsb25lIGRlZXAsIGl0J3Mgd2F5IGZhc3Rlci5cbiAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBtZXJnZTsiLCAiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoKG9iaiwgcGF0aCwgY2hlY2tWYXJzID0gdHJ1ZSkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaGVjayBpZiBDU1MgdmFyaWFibGVzIGFyZSB1c2VkXG4gIGlmIChvYmogJiYgb2JqLnZhcnMgJiYgY2hlY2tWYXJzKSB7XG4gICAgY29uc3QgdmFsID0gYHZhcnMuJHtwYXRofWAuc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICYmIGFjY1tpdGVtXSA/IGFjY1tpdGVtXSA6IG51bGwsIG9iaik7XG4gICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgaWYgKGFjYyAmJiBhY2NbaXRlbV0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFjY1tpdGVtXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIG9iaik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwsIHVzZXJWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsKSB7XG4gIGxldCB2YWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZU1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWx1ZSA9IHRoZW1lTWFwcGluZyhwcm9wVmFsdWVGaW5hbCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZU1hcHBpbmcpKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmdbcHJvcFZhbHVlRmluYWxdIHx8IHVzZXJWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGdldFBhdGgodGhlbWVNYXBwaW5nLCBwcm9wVmFsdWVGaW5hbCkgfHwgdXNlclZhbHVlO1xuICB9XG4gIGlmICh0cmFuc2Zvcm0pIHtcbiAgICB2YWx1ZSA9IHRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlLCB0aGVtZU1hcHBpbmcpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHN0eWxlKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHByb3AsXG4gICAgY3NzUHJvcGVydHkgPSBvcHRpb25zLnByb3AsXG4gICAgdGhlbWVLZXksXG4gICAgdHJhbnNmb3JtXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICBpZiAocHJvcHNbcHJvcF0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BdO1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWU7XG4gICAgY29uc3QgdGhlbWVNYXBwaW5nID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXkpIHx8IHt9O1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfTtcbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgICBbcHJvcF06IHJlc3BvbnNpdmVQcm9wVHlwZVxuICB9IDoge307XG4gIGZuLmZpbHRlclByb3BzID0gW3Byb3BdO1xuICByZXR1cm4gZm47XG59XG5leHBvcnQgZGVmYXVsdCBzdHlsZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICBjb25zdCBjYWNoZSA9IHt9O1xuICByZXR1cm4gYXJnID0+IHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59IiwgImltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcbmltcG9ydCBtZW1vaXplIGZyb20gJy4vbWVtb2l6ZSc7XG5jb25zdCBwcm9wZXJ0aWVzID0ge1xuICBtOiAnbWFyZ2luJyxcbiAgcDogJ3BhZGRpbmcnXG59O1xuY29uc3QgZGlyZWN0aW9ucyA9IHtcbiAgdDogJ1RvcCcsXG4gIHI6ICdSaWdodCcsXG4gIGI6ICdCb3R0b20nLFxuICBsOiAnTGVmdCcsXG4gIHg6IFsnTGVmdCcsICdSaWdodCddLFxuICB5OiBbJ1RvcCcsICdCb3R0b20nXVxufTtcbmNvbnN0IGFsaWFzZXMgPSB7XG4gIG1hcmdpblg6ICdteCcsXG4gIG1hcmdpblk6ICdteScsXG4gIHBhZGRpbmdYOiAncHgnLFxuICBwYWRkaW5nWTogJ3B5J1xufTtcblxuLy8gbWVtb2l6ZSgpIGltcGFjdDpcbi8vIEZyb20gMzAwLDAwMCBvcHMvc2VjXG4vLyBUbyAzNTAsMDAwIG9wcy9zZWNcbmNvbnN0IGdldENzc1Byb3BlcnRpZXMgPSBtZW1vaXplKHByb3AgPT4ge1xuICAvLyBJdCdzIG5vdCBhIHNob3J0aGFuZCBub3RhdGlvbi5cbiAgaWYgKHByb3AubGVuZ3RoID4gMikge1xuICAgIGlmIChhbGlhc2VzW3Byb3BdKSB7XG4gICAgICBwcm9wID0gYWxpYXNlc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtwcm9wXTtcbiAgICB9XG4gIH1cbiAgY29uc3QgW2EsIGJdID0gcHJvcC5zcGxpdCgnJyk7XG4gIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1thXTtcbiAgY29uc3QgZGlyZWN0aW9uID0gZGlyZWN0aW9uc1tiXSB8fCAnJztcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGlyZWN0aW9uKSA/IGRpcmVjdGlvbi5tYXAoZGlyID0+IHByb3BlcnR5ICsgZGlyKSA6IFtwcm9wZXJ0eSArIGRpcmVjdGlvbl07XG59KTtcbmV4cG9ydCBjb25zdCBtYXJnaW5LZXlzID0gWydtJywgJ210JywgJ21yJywgJ21iJywgJ21sJywgJ214JywgJ215JywgJ21hcmdpbicsICdtYXJnaW5Ub3AnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luWCcsICdtYXJnaW5ZJywgJ21hcmdpbklubGluZScsICdtYXJnaW5JbmxpbmVTdGFydCcsICdtYXJnaW5JbmxpbmVFbmQnLCAnbWFyZ2luQmxvY2snLCAnbWFyZ2luQmxvY2tTdGFydCcsICdtYXJnaW5CbG9ja0VuZCddO1xuZXhwb3J0IGNvbnN0IHBhZGRpbmdLZXlzID0gWydwJywgJ3B0JywgJ3ByJywgJ3BiJywgJ3BsJywgJ3B4JywgJ3B5JywgJ3BhZGRpbmcnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5nUmlnaHQnLCAncGFkZGluZ0JvdHRvbScsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nWCcsICdwYWRkaW5nWScsICdwYWRkaW5nSW5saW5lJywgJ3BhZGRpbmdJbmxpbmVTdGFydCcsICdwYWRkaW5nSW5saW5lRW5kJywgJ3BhZGRpbmdCbG9jaycsICdwYWRkaW5nQmxvY2tTdGFydCcsICdwYWRkaW5nQmxvY2tFbmQnXTtcbmNvbnN0IHNwYWNpbmdLZXlzID0gWy4uLm1hcmdpbktleXMsIC4uLnBhZGRpbmdLZXlzXTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVbmFyeVVuaXQodGhlbWUsIHRoZW1lS2V5LCBkZWZhdWx0VmFsdWUsIHByb3BOYW1lKSB7XG4gIHZhciBfZ2V0UGF0aDtcbiAgY29uc3QgdGhlbWVTcGFjaW5nID0gKF9nZXRQYXRoID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXksIGZhbHNlKSkgIT0gbnVsbCA/IF9nZXRQYXRoIDogZGVmYXVsdFZhbHVlO1xuICBpZiAodHlwZW9mIHRoZW1lU3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gYWJzID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWJzID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWJzO1xuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhYnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBFeHBlY3RlZCAke3Byb3BOYW1lfSBhcmd1bWVudCB0byBiZSBhIG51bWJlciBvciBhIHN0cmluZywgZ290ICR7YWJzfS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZyAqIGFicztcbiAgICB9O1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRoZW1lU3BhY2luZykpIHtcbiAgICByZXR1cm4gYWJzID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWJzID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWJzO1xuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFicykpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgYXJyYXkgdHlwZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBub24gaW50ZWdlciB2YWx1ZXMuYCArIGBZb3Ugc2hvdWxkIGVpdGhlciB1c2UgYW4gaW50ZWdlciB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGluZGV4LCBvciBkZWZpbmUgdGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFzIGEgbnVtYmVyLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfSBlbHNlIGlmIChhYnMgPiB0aGVtZVNwYWNpbmcubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSB2YWx1ZSBwcm92aWRlZCAoJHthYnN9KSBvdmVyZmxvd3MuYCwgYFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZTogJHtKU09OLnN0cmluZ2lmeSh0aGVtZVNwYWNpbmcpfS5gLCBgJHthYnN9ID4gJHt0aGVtZVNwYWNpbmcubGVuZ3RoIC0gMX0sIHlvdSBuZWVkIHRvIGFkZCB0aGUgbWlzc2luZyB2YWx1ZXMuYF0uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhlbWVTcGFjaW5nW2Fic107XG4gICAgfTtcbiAgfVxuICBpZiAodHlwZW9mIHRoZW1lU3BhY2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0aGVtZVNwYWNpbmc7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgdmFsdWUgKCR7dGhlbWVTcGFjaW5nfSkgaXMgaW52YWxpZC5gLCAnSXQgc2hvdWxkIGJlIGEgbnVtYmVyLCBhbiBhcnJheSBvciBhIGZ1bmN0aW9uLiddLmpvaW4oJ1xcbicpKTtcbiAgfVxuICByZXR1cm4gKCkgPT4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuYXJ5U3BhY2luZyh0aGVtZSkge1xuICByZXR1cm4gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCAnc3BhY2luZycsIDgsICdzcGFjaW5nJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSkge1xuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3N0cmluZycgfHwgcHJvcFZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gcHJvcFZhbHVlO1xuICB9XG4gIGNvbnN0IGFicyA9IE1hdGguYWJzKHByb3BWYWx1ZSk7XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0gdHJhbnNmb3JtZXIoYWJzKTtcbiAgaWYgKHByb3BWYWx1ZSA+PSAwKSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICB9XG4gIGlmICh0eXBlb2YgdHJhbnNmb3JtZWQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIC10cmFuc2Zvcm1lZDtcbiAgfVxuICByZXR1cm4gYC0ke3RyYW5zZm9ybWVkfWA7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKSB7XG4gIHJldHVybiBwcm9wVmFsdWUgPT4gY3NzUHJvcGVydGllcy5yZWR1Y2UoKGFjYywgY3NzUHJvcGVydHkpID0+IHtcbiAgICBhY2NbY3NzUHJvcGVydHldID0gZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUNzc1Byb3BlcnR5KHByb3BzLCBrZXlzLCBwcm9wLCB0cmFuc2Zvcm1lcikge1xuICAvLyBVc2luZyBhIGhhc2ggY29tcHV0YXRpb24gb3ZlciBhbiBhcnJheSBpdGVyYXRpb24gY291bGQgYmUgZmFzdGVyLCBidXQgd2l0aCBvbmx5IDI4IGl0ZW1zLFxuICAvLyBpdCdzIGRvZXNuJ3Qgd29ydGggdGhlIGJ1bmRsZSBzaXplLlxuICBpZiAoa2V5cy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGNzc1Byb3BlcnRpZXMgPSBnZXRDc3NQcm9wZXJ0aWVzKHByb3ApO1xuICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBnZXRTdHlsZUZyb21Qcm9wVmFsdWUoY3NzUHJvcGVydGllcywgdHJhbnNmb3JtZXIpO1xuICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1twcm9wXTtcbiAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG59XG5mdW5jdGlvbiBzdHlsZShwcm9wcywga2V5cykge1xuICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5U3BhY2luZyhwcm9wcy50aGVtZSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykubWFwKHByb3AgPT4gcmVzb2x2ZUNzc1Byb3BlcnR5KHByb3BzLCBrZXlzLCBwcm9wLCB0cmFuc2Zvcm1lcikpLnJlZHVjZShtZXJnZSwge30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hcmdpbihwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIG1hcmdpbktleXMpO1xufVxubWFyZ2luLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBtYXJnaW5LZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSByZXNwb25zaXZlUHJvcFR5cGU7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbm1hcmdpbi5maWx0ZXJQcm9wcyA9IG1hcmdpbktleXM7XG5leHBvcnQgZnVuY3Rpb24gcGFkZGluZyhwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIHBhZGRpbmdLZXlzKTtcbn1cbnBhZGRpbmcucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHBhZGRpbmdLZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSByZXNwb25zaXZlUHJvcFR5cGU7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbnBhZGRpbmcuZmlsdGVyUHJvcHMgPSBwYWRkaW5nS2V5cztcbmZ1bmN0aW9uIHNwYWNpbmcocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBzcGFjaW5nS2V5cyk7XG59XG5zcGFjaW5nLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzcGFjaW5nS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5zcGFjaW5nLmZpbHRlclByb3BzID0gc3BhY2luZ0tleXM7XG5leHBvcnQgZGVmYXVsdCBzcGFjaW5nOyIsICJpbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcgfSBmcm9tICcuLi9zcGFjaW5nJztcblxuLy8gVGhlIGRpZmZlcmVudCBzaWduYXR1cmVzIGltcGx5IGRpZmZlcmVudCBtZWFuaW5nIGZvciB0aGVpciBhcmd1bWVudHMgdGhhdCBjYW4ndCBiZSBleHByZXNzZWQgc3RydWN0dXJhbGx5LlxuLy8gV2UgZXhwcmVzcyB0aGUgZGlmZmVyZW5jZSB3aXRoIHZhcmlhYmxlIG5hbWVzLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTcGFjaW5nKHNwYWNpbmdJbnB1dCA9IDgpIHtcbiAgLy8gQWxyZWFkeSB0cmFuc2Zvcm1lZC5cbiAgaWYgKHNwYWNpbmdJbnB1dC5tdWkpIHtcbiAgICByZXR1cm4gc3BhY2luZ0lucHV0O1xuICB9XG5cbiAgLy8gTWF0ZXJpYWwgRGVzaWduIGxheW91dHMgYXJlIHZpc3VhbGx5IGJhbGFuY2VkLiBNb3N0IG1lYXN1cmVtZW50cyBhbGlnbiB0byBhbiA4ZHAgZ3JpZCwgd2hpY2ggYWxpZ25zIGJvdGggc3BhY2luZyBhbmQgdGhlIG92ZXJhbGwgbGF5b3V0LlxuICAvLyBTbWFsbGVyIGNvbXBvbmVudHMsIHN1Y2ggYXMgaWNvbnMsIGNhbiBhbGlnbiB0byBhIDRkcCBncmlkLlxuICAvLyBodHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi9sYXlvdXQvdW5kZXJzdGFuZGluZy1sYXlvdXQuaHRtbFxuICBjb25zdCB0cmFuc2Zvcm0gPSBjcmVhdGVVbmFyeVNwYWNpbmcoe1xuICAgIHNwYWNpbmc6IHNwYWNpbmdJbnB1dFxuICB9KTtcbiAgY29uc3Qgc3BhY2luZyA9ICguLi5hcmdzSW5wdXQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCEoYXJnc0lucHV0Lmxlbmd0aCA8PSA0KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZCwgZXhwZWN0ZWQgYmV0d2VlbiAwIGFuZCA0LCBnb3QgJHthcmdzSW5wdXQubGVuZ3RofWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhcmdzID0gYXJnc0lucHV0Lmxlbmd0aCA9PT0gMCA/IFsxXSA6IGFyZ3NJbnB1dDtcbiAgICByZXR1cm4gYXJncy5tYXAoYXJndW1lbnQgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdHJhbnNmb3JtKGFyZ3VtZW50KTtcbiAgICAgIHJldHVybiB0eXBlb2Ygb3V0cHV0ID09PSAnbnVtYmVyJyA/IGAke291dHB1dH1weGAgOiBvdXRwdXQ7XG4gICAgfSkuam9pbignICcpO1xuICB9O1xuICBzcGFjaW5nLm11aSA9IHRydWU7XG4gIHJldHVybiBzcGFjaW5nO1xufSIsICJpbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IG1lcmdlIGZyb20gJy4uL21lcmdlJztcbmltcG9ydCB7IGdldFBhdGgsIGdldFN0eWxlVmFsdWUgYXMgZ2V0VmFsdWUgfSBmcm9tICcuLi9zdHlsZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0LCByZW1vdmVVbnVzZWRCcmVha3BvaW50cyB9IGZyb20gJy4uL2JyZWFrcG9pbnRzJztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi9kZWZhdWx0U3hDb25maWcnO1xuZnVuY3Rpb24gb2JqZWN0c0hhdmVTYW1lS2V5cyguLi5vYmplY3RzKSB7XG4gIGNvbnN0IGFsbEtleXMgPSBvYmplY3RzLnJlZHVjZSgoa2V5cywgb2JqZWN0KSA9PiBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpKSwgW10pO1xuICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoYWxsS2V5cyk7XG4gIHJldHVybiBvYmplY3RzLmV2ZXJ5KG9iamVjdCA9PiB1bmlvbi5zaXplID09PSBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBjYWxsSWZGbihtYXliZUZuLCBhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nID8gbWF5YmVGbihhcmcpIDogbWF5YmVGbjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCgpIHtcbiAgZnVuY3Rpb24gZ2V0VGhlbWVWYWx1ZShwcm9wLCB2YWwsIHRoZW1lLCBjb25maWcpIHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIFtwcm9wXTogdmFsLFxuICAgICAgdGhlbWVcbiAgICB9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb25maWdbcHJvcF07XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbcHJvcF06IHZhbFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgY3NzUHJvcGVydHkgPSBwcm9wLFxuICAgICAgdGhlbWVLZXksXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBzdHlsZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM4MTIzXG4gICAgaWYgKHRoZW1lS2V5ID09PSAndHlwb2dyYXBoeScgJiYgdmFsID09PSAnaW5oZXJpdCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB0aGVtZU1hcHBpbmcgPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSkgfHwge307XG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICByZXR1cm4gc3R5bGUocHJvcHMpO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgaWYgKHByb3BWYWx1ZUZpbmFsID09PSB2YWx1ZSAmJiB0eXBlb2YgcHJvcFZhbHVlRmluYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEhhdmVuJ3QgZm91bmQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHZhbCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICBmdW5jdGlvbiBzdHlsZUZ1bmN0aW9uU3gocHJvcHMpIHtcbiAgICB2YXIgX3RoZW1lJHVuc3RhYmxlX3N4Q29uO1xuICAgIGNvbnN0IHtcbiAgICAgIHN4LFxuICAgICAgdGhlbWUgPSB7fVxuICAgIH0gPSBwcm9wcyB8fCB7fTtcbiAgICBpZiAoIXN4KSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzIHdpbGwgbmVnbGVjdCBudWxsXG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IChfdGhlbWUkdW5zdGFibGVfc3hDb24gPSB0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF90aGVtZSR1bnN0YWJsZV9zeENvbiA6IGRlZmF1bHRTeENvbmZpZztcblxuICAgIC8qXG4gICAgICogUmVjZWl2ZSBgc3hJbnB1dGAgYXMgb2JqZWN0IG9yIGNhbGxiYWNrXG4gICAgICogYW5kIHRoZW4gcmVjdXJzaXZlbHkgY2hlY2sga2V5cyAmIHZhbHVlcyB0byBjcmVhdGUgbWVkaWEgcXVlcnkgb2JqZWN0IHN0eWxlcy5cbiAgICAgKiAodGhlIHJlc3VsdCB3aWxsIGJlIHVzZWQgaW4gYHN0eWxlZGApXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJhdmVyc2Uoc3hJbnB1dCkge1xuICAgICAgbGV0IHN4T2JqZWN0ID0gc3hJbnB1dDtcbiAgICAgIGlmICh0eXBlb2Ygc3hJbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzeE9iamVjdCA9IHN4SW5wdXQodGhlbWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3hJbnB1dCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgcmV0dXJuIHN4SW5wdXQ7XG4gICAgICB9XG4gICAgICBpZiAoIXN4T2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCh0aGVtZS5icmVha3BvaW50cyk7XG4gICAgICBjb25zdCBicmVha3BvaW50c0tleXMgPSBPYmplY3Qua2V5cyhlbXB0eUJyZWFrcG9pbnRzKTtcbiAgICAgIGxldCBjc3MgPSBlbXB0eUJyZWFrcG9pbnRzO1xuICAgICAgT2JqZWN0LmtleXMoc3hPYmplY3QpLmZvckVhY2goc3R5bGVLZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNhbGxJZkZuKHN4T2JqZWN0W3N0eWxlS2V5XSwgdGhlbWUpO1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnW3N0eWxlS2V5XSkge1xuICAgICAgICAgICAgICBjc3MgPSBtZXJnZShjc3MsIGdldFRoZW1lVmFsdWUoc3R5bGVLZXksIHZhbHVlLCB0aGVtZSwgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c1ZhbHVlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICB9LCB2YWx1ZSwgeCA9PiAoe1xuICAgICAgICAgICAgICAgIFtzdHlsZUtleV06IHhcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBpZiAob2JqZWN0c0hhdmVTYW1lS2V5cyhicmVha3BvaW50c1ZhbHVlcywgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY3NzW3N0eWxlS2V5XSA9IHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICAgICAgICAgICAgICBzeDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgYnJlYWtwb2ludHNWYWx1ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgZ2V0VGhlbWVWYWx1ZShzdHlsZUtleSwgdmFsdWUsIHRoZW1lLCBjb25maWcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzS2V5cywgY3NzKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3gpID8gc3gubWFwKHRyYXZlcnNlKSA6IHRyYXZlcnNlKHN4KTtcbiAgfVxuICByZXR1cm4gc3R5bGVGdW5jdGlvblN4O1xufVxuY29uc3Qgc3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCk7XG5zdHlsZUZ1bmN0aW9uU3guZmlsdGVyUHJvcHMgPSBbJ3N4J107XG5leHBvcnQgZGVmYXVsdCBzdHlsZUZ1bmN0aW9uU3g7IiwgImltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcbmZ1bmN0aW9uIGNvbXBvc2UoLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGhhbmRsZXJzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4ge1xuICAgIHN0eWxlLmZpbHRlclByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBhY2NbcHJvcF0gPSBzdHlsZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IGZuID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgIGlmIChoYW5kbGVyc1twcm9wXSkge1xuICAgICAgICByZXR1cm4gbWVyZ2UoYWNjLCBoYW5kbGVyc1twcm9wXShwcm9wcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH07XG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc3R5bGUucHJvcFR5cGVzKSwge30pIDoge307XG4gIGZuLmZpbHRlclByb3BzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gYWNjLmNvbmNhdChzdHlsZS5maWx0ZXJQcm9wcyksIFtdKTtcbiAgcmV0dXJuIGZuO1xufVxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZTsiLCAiaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHsgY3JlYXRlVW5hcnlVbml0LCBnZXRWYWx1ZSB9IGZyb20gJy4vc3BhY2luZyc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGJvcmRlclRyYW5zZm9ybSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gYCR7dmFsdWV9cHggc29saWRgO1xufVxuZnVuY3Rpb24gY3JlYXRlQm9yZGVyU3R5bGUocHJvcCwgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBzdHlsZSh7XG4gICAgcHJvcCxcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybVxuICB9KTtcbn1cbmV4cG9ydCBjb25zdCBib3JkZXIgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJUb3AgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJSaWdodCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJSaWdodCcsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbScsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3QgYm9yZGVyTGVmdCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJDb2xvcicpO1xuZXhwb3J0IGNvbnN0IGJvcmRlclRvcENvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclRvcENvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyUmlnaHRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJSaWdodENvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyQm90dG9tQ29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJMZWZ0Q29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyTGVmdENvbG9yJyk7XG5leHBvcnQgY29uc3Qgb3V0bGluZSA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBvdXRsaW5lQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnb3V0bGluZUNvbG9yJyk7XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCBib3JkZXJSYWRpdXMgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5ib3JkZXJSYWRpdXMgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5ib3JkZXJSYWRpdXMgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NoYXBlLmJvcmRlclJhZGl1cycsIDQsICdib3JkZXJSYWRpdXMnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGJvcmRlclJhZGl1czogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmJvcmRlclJhZGl1cywgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5ib3JkZXJSYWRpdXMucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgYm9yZGVyUmFkaXVzOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmJvcmRlclJhZGl1cy5maWx0ZXJQcm9wcyA9IFsnYm9yZGVyUmFkaXVzJ107XG5jb25zdCBib3JkZXJzID0gY29tcG9zZShib3JkZXIsIGJvcmRlclRvcCwgYm9yZGVyUmlnaHQsIGJvcmRlckJvdHRvbSwgYm9yZGVyTGVmdCwgYm9yZGVyQ29sb3IsIGJvcmRlclRvcENvbG9yLCBib3JkZXJSaWdodENvbG9yLCBib3JkZXJCb3R0b21Db2xvciwgYm9yZGVyTGVmdENvbG9yLCBib3JkZXJSYWRpdXMsIG91dGxpbmUsIG91dGxpbmVDb2xvcik7XG5leHBvcnQgZGVmYXVsdCBib3JkZXJzOyIsICJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHsgY3JlYXRlVW5hcnlVbml0LCBnZXRWYWx1ZSB9IGZyb20gJy4vc3BhY2luZyc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCBnYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5nYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5nYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnZ2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBnYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5nYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZ2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGdhcDogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5nYXAuZmlsdGVyUHJvcHMgPSBbJ2dhcCddO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5leHBvcnQgY29uc3QgY29sdW1uR2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuY29sdW1uR2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuY29sdW1uR2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ2NvbHVtbkdhcCcpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgY29sdW1uR2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuY29sdW1uR2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmNvbHVtbkdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBjb2x1bW5HYXA6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuY29sdW1uR2FwLmZpbHRlclByb3BzID0gWydjb2x1bW5HYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IHJvd0dhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLnJvd0dhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLnJvd0dhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdyb3dHYXAnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIHJvd0dhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLnJvd0dhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5yb3dHYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgcm93R2FwOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbnJvd0dhcC5maWx0ZXJQcm9wcyA9IFsncm93R2FwJ107XG5leHBvcnQgY29uc3QgZ3JpZENvbHVtbiA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRDb2x1bW4nXG59KTtcbmV4cG9ydCBjb25zdCBncmlkUm93ID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFJvdydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvRmxvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvRmxvdydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvQ29sdW1ucyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvQ29sdW1ucydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvUm93cyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvUm93cydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVDb2x1bW5zJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFRlbXBsYXRlUm93cyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZVJvd3MnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkVGVtcGxhdGVBcmVhcyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZUFyZWFzJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEFyZWEgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXJlYSdcbn0pO1xuY29uc3QgZ3JpZCA9IGNvbXBvc2UoZ2FwLCBjb2x1bW5HYXAsIHJvd0dhcCwgZ3JpZENvbHVtbiwgZ3JpZFJvdywgZ3JpZEF1dG9GbG93LCBncmlkQXV0b0NvbHVtbnMsIGdyaWRBdXRvUm93cywgZ3JpZFRlbXBsYXRlQ29sdW1ucywgZ3JpZFRlbXBsYXRlUm93cywgZ3JpZFRlbXBsYXRlQXJlYXMsIGdyaWRBcmVhKTtcbmV4cG9ydCBkZWZhdWx0IGdyaWQ7IiwgImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZVRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlKSB7XG4gIGlmICh1c2VyVmFsdWUgPT09ICdncmV5Jykge1xuICAgIHJldHVybiB1c2VyVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0IGNvbnN0IGNvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnY29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJnY29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdiZ2NvbG9yJyxcbiAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JhY2tncm91bmRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxufSk7XG5jb25zdCBwYWxldHRlID0gY29tcG9zZShjb2xvciwgYmdjb2xvciwgYmFja2dyb3VuZENvbG9yKTtcbmV4cG9ydCBkZWZhdWx0IHBhbGV0dGU7IiwgImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgdmFsdWVzIGFzIGJyZWFrcG9pbnRzVmFsdWVzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5leHBvcnQgZnVuY3Rpb24gc2l6aW5nVHJhbnNmb3JtKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA8PSAxICYmIHZhbHVlICE9PSAwID8gYCR7dmFsdWUgKiAxMDB9JWAgOiB2YWx1ZTtcbn1cbmV4cG9ydCBjb25zdCB3aWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1heFdpZHRoID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMubWF4V2lkdGggIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5tYXhXaWR0aCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiB7XG4gICAgICB2YXIgX3Byb3BzJHRoZW1lLCBfcHJvcHMkdGhlbWUyO1xuICAgICAgY29uc3QgYnJlYWtwb2ludCA9ICgoX3Byb3BzJHRoZW1lID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IF9wcm9wcyR0aGVtZS5icmVha3BvaW50cykgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lID0gX3Byb3BzJHRoZW1lLnZhbHVlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZVtwcm9wVmFsdWVdKSB8fCBicmVha3BvaW50c1ZhbHVlc1twcm9wVmFsdWVdO1xuICAgICAgaWYgKCFicmVha3BvaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IHNpemluZ1RyYW5zZm9ybShwcm9wVmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKChfcHJvcHMkdGhlbWUyID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZTIgPSBfcHJvcHMkdGhlbWUyLmJyZWFrcG9pbnRzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lMi51bml0KSAhPT0gJ3B4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1heFdpZHRoOiBgJHticmVha3BvaW50fSR7cHJvcHMudGhlbWUuYnJlYWtwb2ludHMudW5pdH1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXhXaWR0aDogYnJlYWtwb2ludFxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMubWF4V2lkdGgsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xubWF4V2lkdGguZmlsdGVyUHJvcHMgPSBbJ21heFdpZHRoJ107XG5leHBvcnQgY29uc3QgbWluV2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICdtaW5XaWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBoZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdoZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWF4SGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnbWF4SGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1pbkhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ21pbkhlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBzaXplV2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICdzaXplJyxcbiAgY3NzUHJvcGVydHk6ICd3aWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBzaXplSGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnc2l6ZScsXG4gIGNzc1Byb3BlcnR5OiAnaGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJveFNpemluZyA9IHN0eWxlKHtcbiAgcHJvcDogJ2JveFNpemluZydcbn0pO1xuY29uc3Qgc2l6aW5nID0gY29tcG9zZSh3aWR0aCwgbWF4V2lkdGgsIG1pbldpZHRoLCBoZWlnaHQsIG1heEhlaWdodCwgbWluSGVpZ2h0LCBib3hTaXppbmcpO1xuZXhwb3J0IGRlZmF1bHQgc2l6aW5nOyIsICJpbXBvcnQgeyBwYWRkaW5nLCBtYXJnaW4gfSBmcm9tICcuLi9zcGFjaW5nJztcbmltcG9ydCB7IGJvcmRlclJhZGl1cywgYm9yZGVyVHJhbnNmb3JtIH0gZnJvbSAnLi4vYm9yZGVycyc7XG5pbXBvcnQgeyBnYXAsIHJvd0dhcCwgY29sdW1uR2FwIH0gZnJvbSAnLi4vY3NzR3JpZCc7XG5pbXBvcnQgeyBwYWxldHRlVHJhbnNmb3JtIH0gZnJvbSAnLi4vcGFsZXR0ZSc7XG5pbXBvcnQgeyBtYXhXaWR0aCwgc2l6aW5nVHJhbnNmb3JtIH0gZnJvbSAnLi4vc2l6aW5nJztcbmNvbnN0IGRlZmF1bHRTeENvbmZpZyA9IHtcbiAgLy8gYm9yZGVyc1xuICBib3JkZXI6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlclRvcDoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyUmlnaHQ6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckJvdHRvbToge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyTGVmdDoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlclRvcENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJSaWdodENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJCb3R0b21Db2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyTGVmdENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBvdXRsaW5lOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBvdXRsaW5lQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlclJhZGl1czoge1xuICAgIHRoZW1lS2V5OiAnc2hhcGUuYm9yZGVyUmFkaXVzJyxcbiAgICBzdHlsZTogYm9yZGVyUmFkaXVzXG4gIH0sXG4gIC8vIHBhbGV0dGVcbiAgY29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICBiZ2NvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICBjc3NQcm9wZXJ0eTogJ2JhY2tncm91bmRDb2xvcicsXG4gICAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG4gIH0sXG4gIGJhY2tncm91bmRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG4gIH0sXG4gIC8vIHNwYWNpbmdcbiAgcDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHB0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHI6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYjoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBsOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHg6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBweToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmc6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nVG9wOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1JpZ2h0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0JvdHRvbToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdMZWZ0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1g6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nWToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdJbmxpbmU6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lU3RhcnQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lRW5kOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrU3RhcnQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQmxvY2tFbmQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBtOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtdDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXI6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1iOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtbDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXg6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG15OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW46IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblRvcDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luUmlnaHQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJvdHRvbToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luTGVmdDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luWDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luWToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5JbmxpbmVTdGFydDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lRW5kOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5CbG9jazoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2tTdGFydDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2tFbmQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIC8vIGRpc3BsYXlcbiAgZGlzcGxheVByaW50OiB7XG4gICAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICAgIHRyYW5zZm9ybTogdmFsdWUgPT4gKHtcbiAgICAgICdAbWVkaWEgcHJpbnQnOiB7XG4gICAgICAgIGRpc3BsYXk6IHZhbHVlXG4gICAgICB9XG4gICAgfSlcbiAgfSxcbiAgZGlzcGxheToge30sXG4gIG92ZXJmbG93OiB7fSxcbiAgdGV4dE92ZXJmbG93OiB7fSxcbiAgdmlzaWJpbGl0eToge30sXG4gIHdoaXRlU3BhY2U6IHt9LFxuICAvLyBmbGV4Ym94XG4gIGZsZXhCYXNpczoge30sXG4gIGZsZXhEaXJlY3Rpb246IHt9LFxuICBmbGV4V3JhcDoge30sXG4gIGp1c3RpZnlDb250ZW50OiB7fSxcbiAgYWxpZ25JdGVtczoge30sXG4gIGFsaWduQ29udGVudDoge30sXG4gIG9yZGVyOiB7fSxcbiAgZmxleDoge30sXG4gIGZsZXhHcm93OiB7fSxcbiAgZmxleFNocmluazoge30sXG4gIGFsaWduU2VsZjoge30sXG4gIGp1c3RpZnlJdGVtczoge30sXG4gIGp1c3RpZnlTZWxmOiB7fSxcbiAgLy8gZ3JpZFxuICBnYXA6IHtcbiAgICBzdHlsZTogZ2FwXG4gIH0sXG4gIHJvd0dhcDoge1xuICAgIHN0eWxlOiByb3dHYXBcbiAgfSxcbiAgY29sdW1uR2FwOiB7XG4gICAgc3R5bGU6IGNvbHVtbkdhcFxuICB9LFxuICBncmlkQ29sdW1uOiB7fSxcbiAgZ3JpZFJvdzoge30sXG4gIGdyaWRBdXRvRmxvdzoge30sXG4gIGdyaWRBdXRvQ29sdW1uczoge30sXG4gIGdyaWRBdXRvUm93czoge30sXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHt9LFxuICBncmlkVGVtcGxhdGVSb3dzOiB7fSxcbiAgZ3JpZFRlbXBsYXRlQXJlYXM6IHt9LFxuICBncmlkQXJlYToge30sXG4gIC8vIHBvc2l0aW9uc1xuICBwb3NpdGlvbjoge30sXG4gIHpJbmRleDoge1xuICAgIHRoZW1lS2V5OiAnekluZGV4J1xuICB9LFxuICB0b3A6IHt9LFxuICByaWdodDoge30sXG4gIGJvdHRvbToge30sXG4gIGxlZnQ6IHt9LFxuICAvLyBzaGFkb3dzXG4gIGJveFNoYWRvdzoge1xuICAgIHRoZW1lS2V5OiAnc2hhZG93cydcbiAgfSxcbiAgLy8gc2l6aW5nXG4gIHdpZHRoOiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWF4V2lkdGg6IHtcbiAgICBzdHlsZTogbWF4V2lkdGhcbiAgfSxcbiAgbWluV2lkdGg6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBoZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtYXhIZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtaW5IZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBib3hTaXppbmc6IHt9LFxuICAvLyB0eXBvZ3JhcGh5XG4gIGZvbnRGYW1pbHk6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGZvbnRTaXplOiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250U3R5bGU6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGZvbnRXZWlnaHQ6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGxldHRlclNwYWNpbmc6IHt9LFxuICB0ZXh0VHJhbnNmb3JtOiB7fSxcbiAgbGluZUhlaWdodDoge30sXG4gIHRleHRBbGlnbjoge30sXG4gIHR5cG9ncmFwaHk6IHtcbiAgICBjc3NQcm9wZXJ0eTogZmFsc2UsXG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdFN4Q29uZmlnOyIsICIvKipcbiAqIEEgdW5pdmVyc2FsIHV0aWxpdHkgdG8gc3R5bGUgY29tcG9uZW50cyB3aXRoIG11bHRpcGxlIGNvbG9yIG1vZGVzLiBBbHdheXMgdXNlIGl0IGZyb20gdGhlIHRoZW1lIG9iamVjdC5cbiAqIEl0IHdvcmtzIHdpdGg6XG4gKiAgLSBbQmFzaWMgdGhlbWVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL2RhcmstbW9kZS8pXG4gKiAgLSBbQ1NTIHRoZW1lIHZhcmlhYmxlc10oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2V4cGVyaW1lbnRhbC1hcGkvY3NzLXRoZW1lLXZhcmlhYmxlcy9vdmVydmlldy8pXG4gKiAgLSBaZXJvLXJ1bnRpbWUgZW5naW5lXG4gKlxuICogVGlwczogVXNlIGFuIGFycmF5IG92ZXIgb2JqZWN0IHNwcmVhZCBhbmQgcGxhY2UgYHRoZW1lLmFwcGx5U3R5bGVzKClgIGxhc3QuXG4gKlxuICogXHUyNzA1IFt7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LCB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pXVxuICpcbiAqIFx1RDgzRFx1REVBQiB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JywgLi4udGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7IGJhY2tncm91bmQ6ICcjMWMxYzFjJyB9KX1cbiAqXG4gKiBAZXhhbXBsZVxuICogMS4gdXNpbmcgd2l0aCBgc3R5bGVkYDpcbiAqIGBgYGpzeFxuICogICBjb25zdCBDb21wb25lbnQgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+IFtcbiAqICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywge1xuICogICAgICAgYmFja2dyb3VuZDogJyMxYzFjMWMnLFxuICogICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICB9KSxcbiAqICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogMi4gdXNpbmcgd2l0aCBgc3hgIHByb3A6XG4gKiBgYGBqc3hcbiAqICAgPEJveCBzeD17dGhlbWUgPT4gW1xuICogICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICAgYmFja2dyb3VuZDogJyMxYzFjMWMnLFxuICogICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gKiAgICAgIH0pLFxuICogICAgIF19XG4gKiAgIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogMy4gdGhlbWluZyBhIGNvbXBvbmVudDpcbiAqIGBgYGpzeFxuICogICBleHRlbmRUaGVtZSh7XG4gKiAgICAgY29tcG9uZW50czoge1xuICogICAgICAgTXVpQnV0dG9uOiB7XG4gKiAgICAgICAgIHN0eWxlT3ZlcnJpZGVzOiB7XG4gKiAgICAgICAgICAgcm9vdDogKHsgdGhlbWUgfSkgPT4gW1xuICogICAgICAgICAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICAgICAgICAgIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywge1xuICogICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gKiAgICAgICAgICAgICB9KSxcbiAqICAgICAgICAgICBdLFxuICogICAgICAgICB9LFxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfSlcbiAqYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFwcGx5U3R5bGVzKGtleSwgc3R5bGVzKSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyAnYW55JyB0eXBlXG4gIGNvbnN0IHRoZW1lID0gdGhpcztcbiAgaWYgKHRoZW1lLnZhcnMgJiYgdHlwZW9mIHRoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBDc3NWYXJzUHJvdmlkZXIgaXMgdXNlZCBhcyBhIHByb3ZpZGVyLFxuICAgIC8vIHJldHVybnMgJyogOndoZXJlKFtkYXRhLW11aS1jb2xvci1zY2hlbWU9XCJsaWdodHxkYXJrXCJdKSAmJ1xuICAgIGNvbnN0IHNlbGVjdG9yID0gdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvcihrZXkpLnJlcGxhY2UoLyhcXFtbXlxcXV0rXFxdKS8sICcqOndoZXJlKCQxKScpO1xuICAgIHJldHVybiB7XG4gICAgICBbc2VsZWN0b3JdOiBzdHlsZXNcbiAgICB9O1xuICB9XG4gIGlmICh0aGVtZS5wYWxldHRlLm1vZGUgPT09IGtleSkge1xuICAgIHJldHVybiBzdHlsZXM7XG4gIH1cbiAgcmV0dXJuIHt9O1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5mdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5mdW5jdGlvbiB1c2VUaGVtZShkZWZhdWx0VGhlbWUgPSBudWxsKSB7XG4gIGNvbnN0IGNvbnRleHRUaGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuICFjb250ZXh0VGhlbWUgfHwgaXNPYmplY3RFbXB0eShjb250ZXh0VGhlbWUpID8gZGVmYXVsdFRoZW1lIDogY29udGV4dFRoZW1lO1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlVGhlbWU7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IHVzZVRoZW1lV2l0aG91dERlZmF1bHQgZnJvbSAnLi91c2VUaGVtZVdpdGhvdXREZWZhdWx0JztcbmV4cG9ydCBjb25zdCBzeXN0ZW1EZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuZnVuY3Rpb24gdXNlVGhlbWUoZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lKSB7XG4gIHJldHVybiB1c2VUaGVtZVdpdGhvdXREZWZhdWx0KGRlZmF1bHRUaGVtZSk7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VUaGVtZTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInN4XCJdO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi9kZWZhdWx0U3hDb25maWcnO1xuY29uc3Qgc3BsaXRQcm9wcyA9IHByb3BzID0+IHtcbiAgdmFyIF9wcm9wcyR0aGVtZSR1bnN0YWJsZSwgX3Byb3BzJHRoZW1lO1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgc3lzdGVtUHJvcHM6IHt9LFxuICAgIG90aGVyUHJvcHM6IHt9XG4gIH07XG4gIGNvbnN0IGNvbmZpZyA9IChfcHJvcHMkdGhlbWUkdW5zdGFibGUgPSBwcm9wcyA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA6IGRlZmF1bHRTeENvbmZpZztcbiAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgaWYgKGNvbmZpZ1twcm9wXSkge1xuICAgICAgcmVzdWx0LnN5c3RlbVByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5vdGhlclByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHRlbmRTeFByb3AocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgICAgc3g6IGluU3hcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qge1xuICAgIHN5c3RlbVByb3BzLFxuICAgIG90aGVyUHJvcHNcbiAgfSA9IHNwbGl0UHJvcHMob3RoZXIpO1xuICBsZXQgZmluYWxTeDtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5TeCkpIHtcbiAgICBmaW5hbFN4ID0gW3N5c3RlbVByb3BzLCAuLi5pblN4XTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5TeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZpbmFsU3ggPSAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaW5TeCguLi5hcmdzKTtcbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiBzeXN0ZW1Qcm9wcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3lzdGVtUHJvcHMsIHJlc3VsdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBmaW5hbFN4ID0gX2V4dGVuZHMoe30sIHN5c3RlbVByb3BzLCBpblN4KTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIG90aGVyUHJvcHMsIHtcbiAgICBzeDogZmluYWxTeFxuICB9KTtcbn0iLCAiY29uc3QgZGVmYXVsdEdlbmVyYXRvciA9IGNvbXBvbmVudE5hbWUgPT4gY29tcG9uZW50TmFtZTtcbmNvbnN0IGNyZWF0ZUNsYXNzTmFtZUdlbmVyYXRvciA9ICgpID0+IHtcbiAgbGV0IGdlbmVyYXRlID0gZGVmYXVsdEdlbmVyYXRvcjtcbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmUoZ2VuZXJhdG9yKSB7XG4gICAgICBnZW5lcmF0ZSA9IGdlbmVyYXRvcjtcbiAgICB9LFxuICAgIGdlbmVyYXRlKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZShjb21wb25lbnROYW1lKTtcbiAgICB9LFxuICAgIHJlc2V0KCkge1xuICAgICAgZ2VuZXJhdGUgPSBkZWZhdWx0R2VuZXJhdG9yO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBDbGFzc05hbWVHZW5lcmF0b3IgPSBjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IoKTtcbmV4cG9ydCBkZWZhdWx0IENsYXNzTmFtZUdlbmVyYXRvcjsiLCAiZnVuY3Rpb24gcihlKXt2YXIgdCxmLG49XCJcIjtpZihcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGUpbis9ZTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBlKWlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBvPWUubGVuZ3RoO2Zvcih0PTA7dDxvO3QrKyllW3RdJiYoZj1yKGVbdF0pKSYmKG4mJihuKz1cIiBcIiksbis9Zil9ZWxzZSBmb3IoZiBpbiBlKWVbZl0mJihuJiYobis9XCIgXCIpLG4rPWYpO3JldHVybiBufWV4cG9ydCBmdW5jdGlvbiBjbHN4KCl7Zm9yKHZhciBlLHQsZj0wLG49XCJcIixvPWFyZ3VtZW50cy5sZW5ndGg7ZjxvO2YrKykoZT1hcmd1bWVudHNbZl0pJiYodD1yKGUpKSYmKG4mJihuKz1cIiBcIiksbis9dCk7cmV0dXJuIG59ZXhwb3J0IGRlZmF1bHQgY2xzeDsiLCAiaW1wb3J0IENsYXNzTmFtZUdlbmVyYXRvciBmcm9tICcuLi9DbGFzc05hbWVHZW5lcmF0b3InO1xuZXhwb3J0IGNvbnN0IGdsb2JhbFN0YXRlQ2xhc3NlcyA9IHtcbiAgYWN0aXZlOiAnYWN0aXZlJyxcbiAgY2hlY2tlZDogJ2NoZWNrZWQnLFxuICBjb21wbGV0ZWQ6ICdjb21wbGV0ZWQnLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgZXJyb3I6ICdlcnJvcicsXG4gIGV4cGFuZGVkOiAnZXhwYW5kZWQnLFxuICBmb2N1c2VkOiAnZm9jdXNlZCcsXG4gIGZvY3VzVmlzaWJsZTogJ2ZvY3VzVmlzaWJsZScsXG4gIG9wZW46ICdvcGVuJyxcbiAgcmVhZE9ubHk6ICdyZWFkT25seScsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QsIGdsb2JhbFN0YXRlUHJlZml4ID0gJ011aScpIHtcbiAgY29uc3QgZ2xvYmFsU3RhdGVDbGFzcyA9IGdsb2JhbFN0YXRlQ2xhc3Nlc1tzbG90XTtcbiAgcmV0dXJuIGdsb2JhbFN0YXRlQ2xhc3MgPyBgJHtnbG9iYWxTdGF0ZVByZWZpeH0tJHtnbG9iYWxTdGF0ZUNsYXNzfWAgOiBgJHtDbGFzc05hbWVHZW5lcmF0b3IuZ2VuZXJhdGUoY29tcG9uZW50TmFtZSl9LSR7c2xvdH1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzR2xvYmFsU3RhdGUoc2xvdCkge1xuICByZXR1cm4gZ2xvYmFsU3RhdGVDbGFzc2VzW3Nsb3RdICE9PSB1bmRlZmluZWQ7XG59IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKGNvbXBvbmVudE5hbWUsIHNsb3RzLCBnbG9iYWxTdGF0ZVByZWZpeCA9ICdNdWknKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBzbG90cy5mb3JFYWNoKHNsb3QgPT4ge1xuICAgIHJlc3VsdFtzbG90XSA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QsIGdsb2JhbFN0YXRlUHJlZml4KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvd25lclN0YXRlXCJdLFxuICBfZXhjbHVkZWQyID0gW1widmFyaWFudHNcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJuYW1lXCIsIFwic2xvdFwiLCBcInNraXBWYXJpYW50c1Jlc29sdmVyXCIsIFwic2tpcFN4XCIsIFwib3ZlcnJpZGVzUmVzb2x2ZXJcIl07XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IHN0eWxlZEVuZ2luZVN0eWxlZCwgeyBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIGFzIHByb2Nlc3NTdHlsZXMgfSBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJ0BtdWkvdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgZ2V0RGlzcGxheU5hbWUgZnJvbSAnQG11aS91dGlscy9nZXREaXNwbGF5TmFtZSc7XG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4IGZyb20gJy4vc3R5bGVGdW5jdGlvblN4JztcbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzI2ZGVkNjEwOWZjZDhjYTk4NzVjYzJjZTQ1NjRmZWU2NzhhM2YzYzUvcGFja2FnZXMvc3R5bGVkL3NyYy91dGlscy5qcyNMNDBcbmZ1bmN0aW9uIGlzU3RyaW5nVGFnKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiZcbiAgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5Njtcbn1cblxuLy8gVXBkYXRlIC9zeXN0ZW0vc3R5bGVkLyNhcGkgaW4gY2FzZSBpZiB0aGlzIGNoYW5nZXNcbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSB7XG4gIHJldHVybiBwcm9wICE9PSAnb3duZXJTdGF0ZScgJiYgcHJvcCAhPT0gJ3RoZW1lJyAmJiBwcm9wICE9PSAnc3gnICYmIHByb3AgIT09ICdhcyc7XG59XG5leHBvcnQgY29uc3Qgc3lzdGVtRGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmNvbnN0IGxvd2VyY2FzZUZpcnN0TGV0dGVyID0gc3RyaW5nID0+IHtcbiAgaWYgKCFzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59O1xuZnVuY3Rpb24gcmVzb2x2ZVRoZW1lKHtcbiAgZGVmYXVsdFRoZW1lLFxuICB0aGVtZSxcbiAgdGhlbWVJZFxufSkge1xuICByZXR1cm4gaXNFbXB0eSh0aGVtZSkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihzbG90KSB7XG4gIGlmICghc2xvdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzW3Nsb3RdO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1N0eWxlQXJnKGNhbGxhYmxlU3R5bGUsIF9yZWYpIHtcbiAgbGV0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gX3JlZixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJlc29sdmVkU3R5bGVzQXJnID0gdHlwZW9mIGNhbGxhYmxlU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjYWxsYWJsZVN0eWxlKF9leHRlbmRzKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHByb3BzKSkgOiBjYWxsYWJsZVN0eWxlO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZykpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmcuZmxhdE1hcChyZXNvbHZlZFN0eWxlID0+IHByb2Nlc3NTdHlsZUFyZyhyZXNvbHZlZFN0eWxlLCBfZXh0ZW5kcyh7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSwgcHJvcHMpKSk7XG4gIH1cbiAgaWYgKCEhcmVzb2x2ZWRTdHlsZXNBcmcgJiYgdHlwZW9mIHJlc29sdmVkU3R5bGVzQXJnID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHJlc29sdmVkU3R5bGVzQXJnLnZhcmlhbnRzKSkge1xuICAgIGNvbnN0IHtcbiAgICAgICAgdmFyaWFudHMgPSBbXVxuICAgICAgfSA9IHJlc29sdmVkU3R5bGVzQXJnLFxuICAgICAgb3RoZXJTdHlsZXMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyZXNvbHZlZFN0eWxlc0FyZywgX2V4Y2x1ZGVkMik7XG4gICAgbGV0IHJlc3VsdCA9IG90aGVyU3R5bGVzO1xuICAgIHZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XG4gICAgICBsZXQgaXNNYXRjaCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIHZhcmlhbnQucHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXNNYXRjaCA9IHZhcmlhbnQucHJvcHMoX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhbnQucHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoKG93bmVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG93bmVyU3RhdGVba2V5XSkgIT09IHZhcmlhbnQucHJvcHNba2V5XSAmJiBwcm9wc1trZXldICE9PSB2YXJpYW50LnByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh0eXBlb2YgdmFyaWFudC5zdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhcmlhbnQuc3R5bGUoX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKSA6IHZhcmlhbnQuc3R5bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkU3R5bGVzQXJnO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3R5bGVkKGlucHV0ID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRoZW1lSWQsXG4gICAgZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lLFxuICAgIHJvb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wLFxuICAgIHNsb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wXG4gIH0gPSBpbnB1dDtcbiAgY29uc3Qgc3lzdGVtU3ggPSBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeChfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgdGhlbWVJZFxuICAgICAgfSkpXG4gICAgfSkpO1xuICB9O1xuICBzeXN0ZW1TeC5fX211aV9zeXN0ZW1TeCA9IHRydWU7XG4gIHJldHVybiAodGFnLCBpbnB1dE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8vIEZpbHRlciBvdXQgdGhlIGBzeGAgc3R5bGUgZnVuY3Rpb24gZnJvbSB0aGUgcHJldmlvdXMgc3R5bGVkIGNvbXBvbmVudCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHN0eWxlcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBvc2l0ZSBjb21wb25lbnRzLlxuICAgIHByb2Nlc3NTdHlsZXModGFnLCBzdHlsZXMgPT4gc3R5bGVzLmZpbHRlcihzdHlsZSA9PiAhKHN0eWxlICE9IG51bGwgJiYgc3R5bGUuX19tdWlfc3lzdGVtU3gpKSk7XG4gICAgY29uc3Qge1xuICAgICAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICBzbG90OiBjb21wb25lbnRTbG90LFxuICAgICAgICBza2lwVmFyaWFudHNSZXNvbHZlcjogaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlcixcbiAgICAgICAgc2tpcFN4OiBpbnB1dFNraXBTeCxcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBvdmVycmlkZXNSZXNvbHZlciA9IGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90KSlcbiAgICAgIH0gPSBpbnB1dE9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoaW5wdXRPcHRpb25zLCBfZXhjbHVkZWQzKTtcblxuICAgIC8vIGlmIHNraXBWYXJpYW50c1Jlc29sdmVyIG9wdGlvbiBpcyBkZWZpbmVkLCB0YWtlIHRoZSB2YWx1ZSwgb3RoZXJ3aXNlLCB0cnVlIGZvciByb290IGFuZCBmYWxzZSBmb3Igb3RoZXIgc2xvdHMuXG4gICAgY29uc3Qgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgPSBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyICE9PSB1bmRlZmluZWQgPyBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyIDpcbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBjb21wb25lbnRTbG90ICYmIGNvbXBvbmVudFNsb3QgIT09ICdSb290JyAmJiBjb21wb25lbnRTbG90ICE9PSAncm9vdCcgfHwgZmFsc2U7XG4gICAgY29uc3Qgc2tpcFN4ID0gaW5wdXRTa2lwU3ggfHwgZmFsc2U7XG4gICAgbGV0IGxhYmVsO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAvLyBUT0RPIHY2OiByZW1vdmUgYGxvd2VyY2FzZUZpcnN0TGV0dGVyKClgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgICAgIGxhYmVsID0gYCR7Y29tcG9uZW50TmFtZX0tJHtsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90IHx8ICdSb290Jyl9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2hvdWxkRm9yd2FyZFByb3A7XG5cbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBpZiAoY29tcG9uZW50U2xvdCA9PT0gJ1Jvb3QnIHx8IGNvbXBvbmVudFNsb3QgPT09ICdyb290Jykge1xuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSByb290U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChjb21wb25lbnRTbG90KSB7XG4gICAgICAvLyBhbnkgb3RoZXIgc2xvdCBzcGVjaWZpZWRcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2xvdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdUYWcodGFnKSkge1xuICAgICAgLy8gZm9yIHN0cmluZyAoaHRtbCkgdGFnLCBwcmVzZXJ2ZSB0aGUgYmVoYXZpb3IgaW4gZW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzLlxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZWRSZXNvbHZlciA9IHN0eWxlZEVuZ2luZVN0eWxlZCh0YWcsIF9leHRlbmRzKHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbixcbiAgICAgIGxhYmVsXG4gICAgfSwgb3B0aW9ucykpO1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0eWxlQXJnID0gc3R5bGVzQXJnID0+IHtcbiAgICAgIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgIGlmICh0eXBlb2Ygc3R5bGVzQXJnID09PSAnZnVuY3Rpb24nICYmIHN0eWxlc0FyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVzQXJnIHx8IGlzUGxhaW5PYmplY3Qoc3R5bGVzQXJnKSkge1xuICAgICAgICByZXR1cm4gcHJvcHMgPT4gcHJvY2Vzc1N0eWxlQXJnKHN0eWxlc0FyZywgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSh7XG4gICAgICAgICAgICB0aGVtZTogcHJvcHMudGhlbWUsXG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0FyZztcbiAgICB9O1xuICAgIGNvbnN0IG11aVN0eWxlZFJlc29sdmVyID0gKHN0eWxlQXJnLCAuLi5leHByZXNzaW9ucykgPT4ge1xuICAgICAgbGV0IHRyYW5zZm9ybWVkU3R5bGVBcmcgPSB0cmFuc2Zvcm1TdHlsZUFyZyhzdHlsZUFyZyk7XG4gICAgICBjb25zdCBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUgPSBleHByZXNzaW9ucyA/IGV4cHJlc3Npb25zLm1hcCh0cmFuc2Zvcm1TdHlsZUFyZykgOiBbXTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmIG92ZXJyaWRlc1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgaWYgKCF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3R5bGVPdmVycmlkZXMgPSB0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzO1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkU3R5bGVPdmVycmlkZXMgPSB7fTtcbiAgICAgICAgICAvLyBUT0RPOiB2NyByZW1vdmUgaXRlcmF0aW9uIGFuZCB1c2UgYHJlc29sdmVTdHlsZUFyZyhzdHlsZU92ZXJyaWRlc1tzbG90XSlgIGRpcmVjdGx5XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVPdmVycmlkZXMpLmZvckVhY2goKFtzbG90S2V5LCBzbG90U3R5bGVdKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzW3Nsb3RLZXldID0gcHJvY2Vzc1N0eWxlQXJnKHNsb3RTdHlsZSwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiAhc2tpcFZhcmlhbnRzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIHZhciBfdGhlbWUkY29tcG9uZW50cztcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgY29uc3QgdGhlbWVWYXJpYW50cyA9IHRoZW1lID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50c1tjb21wb25lbnROYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnZhcmlhbnRzO1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzU3R5bGVBcmcoe1xuICAgICAgICAgICAgdmFyaWFudHM6IHRoZW1lVmFyaWFudHNcbiAgICAgICAgICB9LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghc2tpcFN4KSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHN5c3RlbVN4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bU9mQ3VzdG9tRm5zQXBwbGllZCA9IGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5sZW5ndGggLSBleHByZXNzaW9ucy5sZW5ndGg7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzdHlsZUFyZykgJiYgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID4gMCkge1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnMgPSBuZXcgQXJyYXkobnVtT2ZDdXN0b21GbnNBcHBsaWVkKS5maWxsKCcnKTtcbiAgICAgICAgLy8gSWYgdGhlIHR5cGUgaXMgYXJyYXksIHRoYW4gd2UgbmVlZCB0byBhZGQgcGxhY2Vob2xkZXJzIGluIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG92ZXJyaWRlcywgdmFyaWFudHMgYW5kIHRoZSBzeCBzdHlsZXMuXG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcgPSBbLi4uc3R5bGVBcmcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcucmF3ID0gWy4uLnN0eWxlQXJnLnJhdywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IENvbXBvbmVudCA9IGRlZmF1bHRTdHlsZWRSZXNvbHZlcih0cmFuc2Zvcm1lZFN0eWxlQXJnLCAuLi5leHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgbGV0IGRpc3BsYXlOYW1lO1xuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYCR7Y29tcG9uZW50TmFtZX0ke2NhcGl0YWxpemUoY29tcG9uZW50U2xvdCB8fCAnJyl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYFN0eWxlZCgke2dldERpc3BsYXlOYW1lKHRhZyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodGFnLm11aU5hbWUpIHtcbiAgICAgICAgQ29tcG9uZW50Lm11aU5hbWUgPSB0YWcubXVpTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgfTtcbiAgICBpZiAoZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWcpIHtcbiAgICAgIG11aVN0eWxlZFJlc29sdmVyLndpdGhDb25maWcgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIG11aVN0eWxlZFJlc29sdmVyO1xuICB9O1xufSIsICJpbXBvcnQgY3JlYXRlU3R5bGVkIGZyb20gJy4vY3JlYXRlU3R5bGVkJztcbmNvbnN0IHN0eWxlZCA9IGNyZWF0ZVN0eWxlZCgpO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbi8qKlxuICogQWRkIGtleXMsIHZhbHVlcyBvZiBgZGVmYXVsdFByb3BzYCB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGBwcm9wc2BcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0UHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybnMge29iamVjdH0gcmVzb2x2ZWQgcHJvcHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZVByb3BzKGRlZmF1bHRQcm9wcywgcHJvcHMpIHtcbiAgY29uc3Qgb3V0cHV0ID0gX2V4dGVuZHMoe30sIHByb3BzKTtcbiAgT2JqZWN0LmtleXMoZGVmYXVsdFByb3BzKS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICBpZiAocHJvcE5hbWUudG9TdHJpbmcoKS5tYXRjaCgvXihjb21wb25lbnRzfHNsb3RzKSQvKSkge1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IF9leHRlbmRzKHt9LCBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdLCBvdXRwdXRbcHJvcE5hbWVdKTtcbiAgICB9IGVsc2UgaWYgKHByb3BOYW1lLnRvU3RyaW5nKCkubWF0Y2goL14oY29tcG9uZW50c1Byb3BzfHNsb3RQcm9wcykkLykpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTbG90UHJvcHMgPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdIHx8IHt9O1xuICAgICAgY29uc3Qgc2xvdFByb3BzID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IHt9O1xuICAgICAgaWYgKCFzbG90UHJvcHMgfHwgIU9iamVjdC5rZXlzKHNsb3RQcm9wcykpIHtcbiAgICAgICAgLy8gUmVkdWNlIHRoZSBpdGVyYXRpb24gaWYgdGhlIHNsb3QgcHJvcHMgaXMgZW1wdHlcbiAgICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IGRlZmF1bHRTbG90UHJvcHM7XG4gICAgICB9IGVsc2UgaWYgKCFkZWZhdWx0U2xvdFByb3BzIHx8ICFPYmplY3Qua2V5cyhkZWZhdWx0U2xvdFByb3BzKSkge1xuICAgICAgICAvLyBSZWR1Y2UgdGhlIGl0ZXJhdGlvbiBpZiB0aGUgZGVmYXVsdCBzbG90IHByb3BzIGlzIGVtcHR5XG4gICAgICAgIG91dHB1dFtwcm9wTmFtZV0gPSBzbG90UHJvcHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRbcHJvcE5hbWVdID0gX2V4dGVuZHMoe30sIHNsb3RQcm9wcyk7XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRTbG90UHJvcHMpLmZvckVhY2goc2xvdFByb3BOYW1lID0+IHtcbiAgICAgICAgICBvdXRwdXRbcHJvcE5hbWVdW3Nsb3RQcm9wTmFtZV0gPSByZXNvbHZlUHJvcHMoZGVmYXVsdFNsb3RQcm9wc1tzbG90UHJvcE5hbWVdLCBzbG90UHJvcHNbc2xvdFByb3BOYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3V0cHV0W3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXRwdXRbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufSIsICJpbXBvcnQgcmVzb2x2ZVByb3BzIGZyb20gJ0BtdWkvdXRpbHMvcmVzb2x2ZVByb3BzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRoZW1lUHJvcHMocGFyYW1zKSB7XG4gIGNvbnN0IHtcbiAgICB0aGVtZSxcbiAgICBuYW1lLFxuICAgIHByb3BzXG4gIH0gPSBwYXJhbXM7XG4gIGlmICghdGhlbWUgfHwgIXRoZW1lLmNvbXBvbmVudHMgfHwgIXRoZW1lLmNvbXBvbmVudHNbbmFtZV0gfHwgIXRoZW1lLmNvbXBvbmVudHNbbmFtZV0uZGVmYXVsdFByb3BzKSB7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG4gIHJldHVybiByZXNvbHZlUHJvcHModGhlbWUuY29tcG9uZW50c1tuYW1lXS5kZWZhdWx0UHJvcHMsIHByb3BzKTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgZ2V0VGhlbWVQcm9wcyBmcm9tICcuL2dldFRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3VzZVRoZW1lJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lUHJvcHMoe1xuICBwcm9wcyxcbiAgbmFtZSxcbiAgZGVmYXVsdFRoZW1lLFxuICB0aGVtZUlkXG59KSB7XG4gIGxldCB0aGVtZSA9IHVzZVRoZW1lKGRlZmF1bHRUaGVtZSk7XG4gIGlmICh0aGVtZUlkKSB7XG4gICAgdGhlbWUgPSB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZTtcbiAgfVxuICBjb25zdCBtZXJnZWRQcm9wcyA9IGdldFRoZW1lUHJvcHMoe1xuICAgIHRoZW1lLFxuICAgIG5hbWUsXG4gICAgcHJvcHNcbiAgfSk7XG4gIHJldHVybiBtZXJnZWRQcm9wcztcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQSB2ZXJzaW9uIG9mIGBSZWFjdC51c2VMYXlvdXRFZmZlY3RgIHRoYXQgZG9lcyBub3Qgc2hvdyBhIHdhcm5pbmcgd2hlbiBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZWZmZWN0cyB0aGF0IGFyZSBvbmx5IG5lZWRlZCBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIGJ1dCBub3QgZm9yIFNTUi5cbiAqXG4gKiBCZWZvcmUgeW91IHVzZSB0aGlzIGhvb2ssIG1ha2Ugc3VyZSB0byByZWFkIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2dhZWFyb24vZTdkOTdjZGYzOGEyOTA3OTI0ZWExMmU0ZWJkZjNjODVcbiAqIGFuZCBjb25maXJtIGl0IGRvZXNuJ3QgYXBwbHkgdG8geW91ciB1c2UtY2FzZS5cbiAqL1xuY29uc3QgdXNlRW5oYW5jZWRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IFJlYWN0LnVzZUxheW91dEVmZmVjdCA6IFJlYWN0LnVzZUVmZmVjdDtcbmV4cG9ydCBkZWZhdWx0IHVzZUVuaGFuY2VkRWZmZWN0OyIsICIvKipcbiAqIFNhZmUgY2hhaW5lZCBmdW5jdGlvbi5cbiAqXG4gKiBXaWxsIG9ubHkgY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIGlmIG5lZWRlZCxcbiAqIG90aGVyd2lzZSB3aWxsIHBhc3MgYmFjayBleGlzdGluZyBmdW5jdGlvbnMgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKC4uLmZ1bmNzKSB7XG4gIHJldHVybiBmdW5jcy5yZWR1Y2UoKGFjYywgZnVuYykgPT4ge1xuICAgIGlmIChmdW5jID09IG51bGwpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBjaGFpbmVkRnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgYWNjLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9LCAoKSA9PiB7fSk7XG59IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTXVpRWxlbWVudChlbGVtZW50LCBtdWlOYW1lcykge1xuICB2YXIgX211aU5hbWUsIF9lbGVtZW50JHR5cGU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkgJiYgbXVpTmFtZXMuaW5kZXhPZiggLy8gRm9yIHNlcnZlciBjb21wb25lbnRzIGBtdWlOYW1lYCBpcyBhdmFpYWxibGUgaW4gZWxlbWVudC50eXBlLl9wYXlsb2FkLnZhbHVlLm11aU5hbWVcbiAgLy8gcmVsZXZhbnQgaW5mbyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzI4MDdkNzgxYTA4ZGI4ZTk4NzM2ODdmY2NjMjVjMGYxMmI0ZmIzZDQvcGFja2FnZXMvcmVhY3Qvc3JjL1JlYWN0TGF6eS5qcyNMNDVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gIChfbXVpTmFtZSA9IGVsZW1lbnQudHlwZS5tdWlOYW1lKSAhPSBudWxsID8gX211aU5hbWUgOiAoX2VsZW1lbnQkdHlwZSA9IGVsZW1lbnQudHlwZSkgPT0gbnVsbCB8fCAoX2VsZW1lbnQkdHlwZSA9IF9lbGVtZW50JHR5cGUuX3BheWxvYWQpID09IG51bGwgfHwgKF9lbGVtZW50JHR5cGUgPSBfZWxlbWVudCR0eXBlLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkdHlwZS5tdWlOYW1lKSAhPT0gLTE7XG59IiwgIi8qKlxuICogVE9ETyB2NTogY29uc2lkZXIgbWFraW5nIGl0IHByaXZhdGVcbiAqXG4gKiBwYXNzZXMge3ZhbHVlfSB0byB7cmVmfVxuICpcbiAqIFdBUk5JTkc6IEJlIHN1cmUgdG8gb25seSBjYWxsIHRoaXMgaW5zaWRlIGEgY2FsbGJhY2sgdGhhdCBpcyBwYXNzZWQgYXMgYSByZWYuXG4gKiBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0byBjbGVhbnVwIHRoZSBwcmV2aW91cyB7cmVmfSBpZiBpdCBjaGFuZ2VzLiBTZWVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzEzNTM5XG4gKlxuICogVXNlZnVsIGlmIHlvdSB3YW50IHRvIGV4cG9zZSB0aGUgcmVmIG9mIGFuIGlubmVyIGNvbXBvbmVudCB0byB0aGUgcHVibGljIEFQSVxuICogd2hpbGUgc3RpbGwgdXNpbmcgaXQgaW5zaWRlIHRoZSBjb21wb25lbnQuXG4gKiBAcGFyYW0gcmVmIEEgcmVmIGNhbGxiYWNrIG9yIHJlZiBvYmplY3QuIElmIGFueXRoaW5nIGZhbHN5LCB0aGlzIGlzIGEgbm8tb3AuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldFJlZihyZWYsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKHZhbHVlKTtcbiAgfSBlbHNlIGlmIChyZWYpIHtcbiAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICB9XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xubGV0IGdsb2JhbElkID0gMDtcbmZ1bmN0aW9uIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpIHtcbiAgY29uc3QgW2RlZmF1bHRJZCwgc2V0RGVmYXVsdElkXSA9IFJlYWN0LnVzZVN0YXRlKGlkT3ZlcnJpZGUpO1xuICBjb25zdCBpZCA9IGlkT3ZlcnJpZGUgfHwgZGVmYXVsdElkO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0SWQgPT0gbnVsbCkge1xuICAgICAgLy8gRmFsbGJhY2sgdG8gdGhpcyBkZWZhdWx0IGlkIHdoZW4gcG9zc2libGUuXG4gICAgICAvLyBVc2UgdGhlIGluY3JlbWVudGluZyB2YWx1ZSBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIG9ubHkuXG4gICAgICAvLyBXZSBjYW4ndCB1c2UgaXQgc2VydmVyLXNpZGUuXG4gICAgICAvLyBJZiB5b3Ugd2FudCB0byB1c2UgcmFuZG9tIHZhbHVlcyBwbGVhc2UgY29uc2lkZXIgdGhlIEJpcnRoZGF5IFByb2JsZW06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpcnRoZGF5X3Byb2JsZW1cbiAgICAgIGdsb2JhbElkICs9IDE7XG4gICAgICBzZXREZWZhdWx0SWQoYG11aS0ke2dsb2JhbElkfWApO1xuICAgIH1cbiAgfSwgW2RlZmF1bHRJZF0pO1xuICByZXR1cm4gaWQ7XG59XG5cbi8vIGRvd25zdHJlYW0gYnVuZGxlcnMgbWF5IHJlbW92ZSB1bm5lY2Vzc2FyeSBjb25jYXRlbmF0aW9uLCBidXQgd29uJ3QgcmVtb3ZlIHRvU3RyaW5nIGNhbGwgLS0gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay9pc3N1ZXMvMTQ4MTRcbmNvbnN0IG1heWJlUmVhY3RVc2VJZCA9IFJlYWN0Wyd1c2VJZCcudG9TdHJpbmcoKV07XG4vKipcbiAqXG4gKiBAZXhhbXBsZSA8ZGl2IGlkPXt1c2VJZCgpfSAvPlxuICogQHBhcmFtIGlkT3ZlcnJpZGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlkKGlkT3ZlcnJpZGUpIHtcbiAgaWYgKG1heWJlUmVhY3RVc2VJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmVhY3RJZCA9IG1heWJlUmVhY3RVc2VJZCgpO1xuICAgIHJldHVybiBpZE92ZXJyaWRlICE9IG51bGwgPyBpZE92ZXJyaWRlIDogcmVhY3RJZDtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3MgLS0gYFJlYWN0LnVzZUlkYCBpcyBpbnZhcmlhbnQgYXQgcnVudGltZS5cbiAgcmV0dXJuIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpO1xufSIsICIndXNlIGNsaWVudCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzLCByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUNvbnRyb2xsZWQoe1xuICBjb250cm9sbGVkLFxuICBkZWZhdWx0OiBkZWZhdWx0UHJvcCxcbiAgbmFtZSxcbiAgc3RhdGUgPSAndmFsdWUnXG59KSB7XG4gIC8vIGlzQ29udHJvbGxlZCBpcyBpZ25vcmVkIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdHMgYXMgaXQgc2hvdWxkIG5ldmVyIGNoYW5nZS5cbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKGNvbnRyb2xsZWQgIT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IFt2YWx1ZVN0YXRlLCBzZXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZShkZWZhdWx0UHJvcCk7XG4gIGNvbnN0IHZhbHVlID0gaXNDb250cm9sbGVkID8gY29udHJvbGxlZCA6IHZhbHVlU3RhdGU7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChpc0NvbnRyb2xsZWQgIT09IChjb250cm9sbGVkICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IEEgY29tcG9uZW50IGlzIGNoYW5naW5nIHRoZSAke2lzQ29udHJvbGxlZCA/ICcnIDogJ3VuJ31jb250cm9sbGVkICR7c3RhdGV9IHN0YXRlIG9mICR7bmFtZX0gdG8gYmUgJHtpc0NvbnRyb2xsZWQgPyAndW4nIDogJyd9Y29udHJvbGxlZC5gLCAnRWxlbWVudHMgc2hvdWxkIG5vdCBzd2l0Y2ggZnJvbSB1bmNvbnRyb2xsZWQgdG8gY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuJywgYERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJHtuYW1lfSBgICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LicsIFwiVGhlIG5hdHVyZSBvZiB0aGUgc3RhdGUgaXMgZGV0ZXJtaW5lZCBkdXJpbmcgdGhlIGZpcnN0IHJlbmRlci4gSXQncyBjb25zaWRlcmVkIGNvbnRyb2xsZWQgaWYgdGhlIHZhbHVlIGlzIG5vdCBgdW5kZWZpbmVkYC5cIiwgJ01vcmUgaW5mbzogaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVudHMnXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW3N0YXRlLCBuYW1lLCBjb250cm9sbGVkXSk7XG4gICAgY29uc3Qge1xuICAgICAgY3VycmVudDogZGVmYXVsdFZhbHVlXG4gICAgfSA9IFJlYWN0LnVzZVJlZihkZWZhdWx0UHJvcCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghaXNDb250cm9sbGVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gZGVmYXVsdFByb3ApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgdGhlIGRlZmF1bHQgJHtzdGF0ZX0gc3RhdGUgb2YgYW4gdW5jb250cm9sbGVkICR7bmFtZX0gYWZ0ZXIgYmVpbmcgaW5pdGlhbGl6ZWQuIGAgKyBgVG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIG9wdCB0byB1c2UgYSBjb250cm9sbGVkICR7bmFtZX0uYF0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtKU09OLnN0cmluZ2lmeShkZWZhdWx0UHJvcCldKTtcbiAgfVxuICBjb25zdCBzZXRWYWx1ZUlmVW5jb250cm9sbGVkID0gUmVhY3QudXNlQ2FsbGJhY2sobmV3VmFsdWUgPT4ge1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBbXSk7XG4gIHJldHVybiBbdmFsdWUsIHNldFZhbHVlSWZVbmNvbnRyb2xsZWRdO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91c2VFbmhhbmNlZEVmZmVjdCc7XG5cbi8qKlxuICogSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDA5OSNpc3N1ZWNvbW1lbnQtNDQwMDEzODkyXG4gKiBTZWUgUkZDIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JmY3MvcHVsbC8yMjBcbiAqL1xuXG5mdW5jdGlvbiB1c2VFdmVudENhbGxiYWNrKGZuKSB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihmbik7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICByZWYuY3VycmVudCA9IGZuO1xuICB9KTtcbiAgcmV0dXJuIFJlYWN0LnVzZVJlZigoLi4uYXJncykgPT5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBoaWRlIGB0aGlzYFxuICAoMCwgcmVmLmN1cnJlbnQpKC4uLmFyZ3MpKS5jdXJyZW50O1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlRXZlbnRDYWxsYmFjazsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc2V0UmVmIGZyb20gJy4uL3NldFJlZic7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JrUmVmKC4uLnJlZnMpIHtcbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gaWYgdGhlIHJlZnMgcGFzc2VkIHRvIHRoaXMgaG9vayBjaGFuZ2UgYW5kIGFyZSBhbGwgZGVmaW5lZC5cbiAgICogVGhpcyBtZWFucyByZWFjdCB3aWxsIGNhbGwgdGhlIG9sZCBmb3JrUmVmIHdpdGggYG51bGxgIGFuZCB0aGUgbmV3IGZvcmtSZWZcbiAgICogd2l0aCB0aGUgcmVmLiBDbGVhbnVwIG5hdHVyYWxseSBlbWVyZ2VzIGZyb20gdGhpcyBiZWhhdmlvci5cbiAgICovXG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAocmVmcy5ldmVyeShyZWYgPT4gcmVmID09IG51bGwpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlID0+IHtcbiAgICAgIHJlZnMuZm9yRWFjaChyZWYgPT4ge1xuICAgICAgICBzZXRSZWYocmVmLCBpbnN0YW5jZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgcmVmcyk7XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgVU5JTklUSUFMSVpFRCA9IHt9O1xuXG4vKipcbiAqIEEgUmVhY3QudXNlUmVmKCkgdGhhdCBpcyBpbml0aWFsaXplZCBsYXppbHkgd2l0aCBhIGZ1bmN0aW9uLiBOb3RlIHRoYXQgaXQgYWNjZXB0cyBhbiBvcHRpb25hbFxuICogaW5pdGlhbGl6YXRpb24gYXJndW1lbnQsIHNvIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gYmUgYW4gaW5saW5lIGNsb3N1cmUuXG4gKlxuICogQHVzYWdlXG4gKiAgIGNvbnN0IHJlZiA9IHVzZUxhenlSZWYoc29ydENvbHVtbnMsIGNvbHVtbnMpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUxhenlSZWYoaW5pdCwgaW5pdEFyZykge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYoVU5JTklUSUFMSVpFRCk7XG4gIGlmIChyZWYuY3VycmVudCA9PT0gVU5JTklUSUFMSVpFRCkge1xuICAgIHJlZi5jdXJyZW50ID0gaW5pdChpbml0QXJnKTtcbiAgfVxuICByZXR1cm4gcmVmO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IEVNUFRZID0gW107XG5cbi8qKlxuICogQSBSZWFjdC51c2VFZmZlY3QgZXF1aXZhbGVudCB0aGF0IHJ1bnMgb25jZSwgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU9uTW91bnQoZm4pIHtcbiAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG4gIFJlYWN0LnVzZUVmZmVjdChmbiwgRU1QVFkpO1xuICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VMYXp5UmVmIGZyb20gJy4uL3VzZUxhenlSZWYvdXNlTGF6eVJlZic7XG5pbXBvcnQgdXNlT25Nb3VudCBmcm9tICcuLi91c2VPbk1vdW50L3VzZU9uTW91bnQnO1xuZXhwb3J0IGNsYXNzIFRpbWVvdXQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmN1cnJlbnRJZCA9IG51bGw7XG4gICAgdGhpcy5jbGVhciA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jdXJyZW50SWQpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmRpc3Bvc2VFZmZlY3QgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcjtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBUaW1lb3V0KCk7XG4gIH1cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGBmbmAgYWZ0ZXIgYGRlbGF5YCwgY2xlYXJpbmcgYW55IHByZXZpb3VzbHkgc2NoZWR1bGVkIGNhbGwuXG4gICAqL1xuICBzdGFydChkZWxheSwgZm4pIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5jdXJyZW50SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudElkID0gbnVsbDtcbiAgICAgIGZuKCk7XG4gICAgfSwgZGVsYXkpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaW1lb3V0KCkge1xuICBjb25zdCB0aW1lb3V0ID0gdXNlTGF6eVJlZihUaW1lb3V0LmNyZWF0ZSkuY3VycmVudDtcbiAgdXNlT25Nb3VudCh0aW1lb3V0LmRpc3Bvc2VFZmZlY3QpO1xuICByZXR1cm4gdGltZW91dDtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvdjQuMS41L3NyYy9mb2N1cy12aXNpYmxlLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUaW1lb3V0IH0gZnJvbSAnLi4vdXNlVGltZW91dC91c2VUaW1lb3V0JztcbmxldCBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbmxldCBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xuY29uc3QgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0ID0gbmV3IFRpbWVvdXQoKTtcbmNvbnN0IGlucHV0VHlwZXNXaGl0ZWxpc3QgPSB7XG4gIHRleHQ6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgd2VlazogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWVcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBzaG91bGQgYXV0b21hdGljYWxseSB0cmlnZ2VyIHRoZVxuICogYGZvY3VzLXZpc2libGVgIGNsYXNzIGJlaW5nIGFkZGVkLCBpLmUuIHdoZXRoZXIgaXQgc2hvdWxkIGFsd2F5cyBtYXRjaFxuICogYDpmb2N1cy12aXNpYmxlYCB3aGVuIGZvY3VzZWQuXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eShub2RlKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIHRhZ05hbWVcbiAgfSA9IG5vZGU7XG4gIGlmICh0YWdOYW1lID09PSAnSU5QVVQnICYmIGlucHV0VHlwZXNXaGl0ZWxpc3RbdHlwZV0gJiYgIW5vZGUucmVhZE9ubHkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJiAhbm9kZS5yZWFkT25seSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEtlZXAgdHJhY2sgb2Ygb3VyIGtleWJvYXJkIG1vZGFsaXR5IHN0YXRlIHdpdGggYGhhZEtleWJvYXJkRXZlbnRgLlxuICogSWYgdGhlIG1vc3QgcmVjZW50IHVzZXIgaW50ZXJhY3Rpb24gd2FzIHZpYSB0aGUga2V5Ym9hcmQ7XG4gKiBhbmQgdGhlIGtleSBwcmVzcyBkaWQgbm90IGluY2x1ZGUgYSBtZXRhLCBhbHQvb3B0aW9uLCBvciBjb250cm9sIGtleTtcbiAqIHRoZW4gdGhlIG1vZGFsaXR5IGlzIGtleWJvYXJkLiBPdGhlcndpc2UsIHRoZSBtb2RhbGl0eSBpcyBub3Qga2V5Ym9hcmQuXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgaWYgKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG59XG5cbi8qKlxuICogSWYgYXQgYW55IHBvaW50IGEgdXNlciBjbGlja3Mgd2l0aCBhIHBvaW50aW5nIGRldmljZSwgZW5zdXJlIHRoYXQgd2UgY2hhbmdlXG4gKiB0aGUgbW9kYWxpdHkgYXdheSBmcm9tIGtleWJvYXJkLlxuICogVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHVzZXIgcHJlc3NlcyBhIGtleSBvbiBhbiBhbHJlYWR5IGZvY3VzZWRcbiAqIGVsZW1lbnQsIGFuZCB0aGVuIGNsaWNrcyBvbiBhIGRpZmZlcmVudCBlbGVtZW50LCBmb2N1c2luZyBpdCB3aXRoIGFcbiAqIHBvaW50aW5nIGRldmljZSwgd2hpbGUgd2Ugc3RpbGwgdGhpbmsgd2UncmUgaW4ga2V5Ym9hcmQgbW9kYWxpdHkuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVBvaW50ZXJEb3duKCkge1xuICBoYWRLZXlib2FyZEV2ZW50ID0gZmFsc2U7XG59XG5mdW5jdGlvbiBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCkge1xuICBpZiAodGhpcy52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgLy8gSWYgdGhlIHRhYiBiZWNvbWVzIGFjdGl2ZSBhZ2FpbiwgdGhlIGJyb3dzZXIgd2lsbCBoYW5kbGUgY2FsbGluZyBmb2N1c1xuICAgIC8vIG9uIHRoZSBlbGVtZW50IChTYWZhcmkgYWN0dWFsbHkgY2FsbHMgaXQgdHdpY2UpLlxuICAgIC8vIElmIHRoaXMgdGFiIGNoYW5nZSBjYXVzZWQgYSBibHVyIG9uIGFuIGVsZW1lbnQgd2l0aCBmb2N1cy12aXNpYmxlLFxuICAgIC8vIHJlLWFwcGx5IHRoZSBjbGFzcyB3aGVuIHRoZSB1c2VyIHN3aXRjaGVzIGJhY2sgdG8gdGhlIHRhYi5cbiAgICBpZiAoaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkpIHtcbiAgICAgIGhhZEtleWJvYXJkRXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZShkb2MpIHtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZWFyZG93bihkb2MpIHtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIGlzRm9jdXNWaXNpYmxlKGV2ZW50KSB7XG4gIGNvbnN0IHtcbiAgICB0YXJnZXRcbiAgfSA9IGV2ZW50O1xuICB0cnkge1xuICAgIHJldHVybiB0YXJnZXQubWF0Y2hlcygnOmZvY3VzLXZpc2libGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBCcm93c2VycyBub3QgaW1wbGVtZW50aW5nIDpmb2N1cy12aXNpYmxlIHdpbGwgdGhyb3cgYSBTeW50YXhFcnJvci5cbiAgICAvLyBXZSB1c2Ugb3VyIG93biBoZXVyaXN0aWMgZm9yIHRob3NlIGJyb3dzZXJzLlxuICAgIC8vIFJldGhyb3cgbWlnaHQgYmUgYmV0dGVyIGlmIGl0J3Mgbm90IHRoZSBleHBlY3RlZCBlcnJvciBidXQgZG8gd2UgcmVhbGx5XG4gICAgLy8gd2FudCB0byBjcmFzaCBpZiBmb2N1cy12aXNpYmxlIG1hbGZ1bmN0aW9uZWQ/XG4gIH1cblxuICAvLyBObyBuZWVkIGZvciB2YWxpZEZvY3VzVGFyZ2V0IGNoZWNrLiBUaGUgdXNlciBkb2VzIHRoYXQgYnkgYXR0YWNoaW5nIGl0IHRvXG4gIC8vIGZvY3VzYWJsZSBldmVudHMgb25seS5cbiAgcmV0dXJuIGhhZEtleWJvYXJkRXZlbnQgfHwgZm9jdXNUcmlnZ2Vyc0tleWJvYXJkTW9kYWxpdHkodGFyZ2V0KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlzRm9jdXNWaXNpYmxlKCkge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VDYWxsYmFjayhub2RlID0+IHtcbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBwcmVwYXJlKG5vZGUub3duZXJEb2N1bWVudCk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IGlzRm9jdXNWaXNpYmxlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcblxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUJsdXJWaXNpYmxlKCkge1xuICAgIC8vIGNoZWNraW5nIGFnYWluc3QgcG90ZW50aWFsIHN0YXRlIHZhcmlhYmxlIGRvZXMgbm90IHN1ZmZpY2UgaWYgd2UgZm9jdXMgYW5kIGJsdXIgc3luY2hyb25vdXNseS5cbiAgICAvLyBSZWFjdCB3b3VsZG4ndCBoYXZlIHRpbWUgdG8gdHJpZ2dlciBhIHJlLXJlbmRlciBzbyBgZm9jdXNWaXNpYmxlYCB3b3VsZCBiZSBzdGFsZS5cbiAgICAvLyBJZGVhbGx5IHdlIHdvdWxkIGFkanVzdCBgaXNGb2N1c1Zpc2libGUoZXZlbnQpYCB0byBsb29rIGF0IGByZWxhdGVkVGFyZ2V0YCBmb3IgYmx1ciBldmVudHMuXG4gICAgLy8gVGhpcyBkb2Vzbid0IHdvcmsgaW4gSUUxMSBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zNzUxXG4gICAgLy8gVE9ETzogY2hlY2sgYWdhaW4gaWYgUmVhY3QgcmVsZWFzZXMgdGhlaXIgaW50ZXJuYWwgY2hhbmdlcyB0byBmb2N1cyBldmVudCBoYW5kbGluZyAoaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkxODYpLlxuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBUbyBkZXRlY3QgYSB0YWIvd2luZG93IHN3aXRjaCwgd2UgbG9vayBmb3IgYSBibHVyIGV2ZW50IGZvbGxvd2VkXG4gICAgICAvLyByYXBpZGx5IGJ5IGEgdmlzaWJpbGl0eSBjaGFuZ2UuXG4gICAgICAvLyBJZiB3ZSBkb24ndCBzZWUgYSB2aXNpYmlsaXR5IGNoYW5nZSB3aXRoaW4gMTAwbXMsIGl0J3MgcHJvYmFibHkgYVxuICAgICAgLy8gcmVndWxhciBmb2N1cyBjaGFuZ2UuXG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IHRydWU7XG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQuc3RhcnQoMTAwLCAoKSA9PiB7XG4gICAgICAgIGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCkge1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZShldmVudCkpIHtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIHJlZlxuICB9O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VXRpbGl0eUNsYXNzLCBjbGFzc2VzID0gdW5kZWZpbmVkKSB7XG4gIGNvbnN0IG91dHB1dCA9IHt9O1xuICBPYmplY3Qua2V5cyhzbG90cykuZm9yRWFjaChcbiAgLy8gYE9iamVjdC5rZXlzKHNsb3RzKWAgY2FuJ3QgYmUgd2lkZXIgdGhhbiBgVGAgYmVjYXVzZSB3ZSBpbmZlciBgVGAgZnJvbSBgc2xvdHNgLlxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9wdWxsLzEyMjUzI2lzc3VlY29tbWVudC0yNjMxMzIyMDhcbiAgc2xvdCA9PiB7XG4gICAgb3V0cHV0W3Nsb3RdID0gc2xvdHNbc2xvdF0ucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB1dGlsaXR5Q2xhc3MgPSBnZXRVdGlsaXR5Q2xhc3Moa2V5KTtcbiAgICAgICAgaWYgKHV0aWxpdHlDbGFzcyAhPT0gJycpIHtcbiAgICAgICAgICBhY2MucHVzaCh1dGlsaXR5Q2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGFzc2VzICYmIGNsYXNzZXNba2V5XSkge1xuICAgICAgICAgIGFjYy5wdXNoKGNsYXNzZXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pLmpvaW4oJyAnKTtcbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59IiwgImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjb21wb25lbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJzcGFjaW5nXCIsIFwiZGl2aWRlclwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwidXNlRmxleEdhcFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN5c3RlbVN0eWxlZCBmcm9tICcuLi9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHNTeXN0ZW0gZnJvbSAnLi4vdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBleHRlbmRTeFByb3AgfSBmcm9tICcuLi9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4uL2NyZWF0ZVRoZW1lJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlciwgcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgfSBmcm9tICcuLi9icmVha3BvaW50cyc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcsIGdldFZhbHVlIH0gZnJvbSAnLi4vc3BhY2luZyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgZGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbi8vIHdpZGVuaW5nIFRoZW1lIHRvIGFueSBzbyB0aGF0IHRoZSBjb25zdW1lciBjYW4gb3duIHRoZSB0aGVtZSBzdHJ1Y3R1cmUuXG5jb25zdCBkZWZhdWx0Q3JlYXRlU3R5bGVkQ29tcG9uZW50ID0gc3lzdGVtU3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlTdGFjaycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSk7XG5mdW5jdGlvbiB1c2VUaGVtZVByb3BzRGVmYXVsdChwcm9wcykge1xuICByZXR1cm4gdXNlVGhlbWVQcm9wc1N5c3RlbSh7XG4gICAgcHJvcHMsXG4gICAgbmFtZTogJ011aVN0YWNrJyxcbiAgICBkZWZhdWx0VGhlbWVcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IHdpdGggdGhlIHNlcGFyYXRvciBSZWFjdCBlbGVtZW50IGludGVyc3BlcnNlZCBiZXR3ZWVuXG4gKiBlYWNoIFJlYWN0IG5vZGUgb2YgdGhlIGlucHV0IGNoaWxkcmVuLlxuICpcbiAqID4gam9pbkNoaWxkcmVuKFsxLDIsM10sIDApXG4gKiBbMSwwLDIsMCwzXVxuICovXG5mdW5jdGlvbiBqb2luQ2hpbGRyZW4oY2hpbGRyZW4sIHNlcGFyYXRvcikge1xuICBjb25zdCBjaGlsZHJlbkFycmF5ID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gY2hpbGRyZW5BcnJheS5yZWR1Y2UoKG91dHB1dCwgY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgb3V0cHV0LnB1c2goY2hpbGQpO1xuICAgIGlmIChpbmRleCA8IGNoaWxkcmVuQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgb3V0cHV0LnB1c2goIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoc2VwYXJhdG9yLCB7XG4gICAgICAgIGtleTogYHNlcGFyYXRvci0ke2luZGV4fWBcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSwgW10pO1xufVxuY29uc3QgZ2V0U2lkZUZyb21EaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT4ge1xuICByZXR1cm4ge1xuICAgIHJvdzogJ0xlZnQnLFxuICAgICdyb3ctcmV2ZXJzZSc6ICdSaWdodCcsXG4gICAgY29sdW1uOiAnVG9wJyxcbiAgICAnY29sdW1uLXJldmVyc2UnOiAnQm90dG9tJ1xuICB9W2RpcmVjdGlvbl07XG59O1xuZXhwb3J0IGNvbnN0IHN0eWxlID0gKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IHtcbiAgbGV0IHN0eWxlcyA9IF9leHRlbmRzKHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbidcbiAgfSwgaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgIHRoZW1lXG4gIH0sIHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgfSksIHByb3BWYWx1ZSA9PiAoe1xuICAgIGZsZXhEaXJlY3Rpb246IHByb3BWYWx1ZVxuICB9KSkpO1xuICBpZiAob3duZXJTdGF0ZS5zcGFjaW5nKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcodGhlbWUpO1xuICAgIGNvbnN0IGJhc2UgPSBPYmplY3Qua2V5cyh0aGVtZS5icmVha3BvaW50cy52YWx1ZXMpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG93bmVyU3RhdGUuc3BhY2luZyA9PT0gJ29iamVjdCcgJiYgb3duZXJTdGF0ZS5zcGFjaW5nW2JyZWFrcG9pbnRdICE9IG51bGwgfHwgdHlwZW9mIG93bmVyU3RhdGUuZGlyZWN0aW9uID09PSAnb2JqZWN0JyAmJiBvd25lclN0YXRlLmRpcmVjdGlvblticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICAgIGFjY1ticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICBjb25zdCBkaXJlY3Rpb25WYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgICAgYmFzZVxuICAgIH0pO1xuICAgIGNvbnN0IHNwYWNpbmdWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuc3BhY2luZyxcbiAgICAgIGJhc2VcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGRpcmVjdGlvblZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIE9iamVjdC5rZXlzKGRpcmVjdGlvblZhbHVlcykuZm9yRWFjaCgoYnJlYWtwb2ludCwgaW5kZXgsIGJyZWFrcG9pbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvblZhbHVlID0gZGlyZWN0aW9uVmFsdWVzW2JyZWFrcG9pbnRdO1xuICAgICAgICBpZiAoIWRpcmVjdGlvblZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNEaXJlY3Rpb25WYWx1ZSA9IGluZGV4ID4gMCA/IGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50c1tpbmRleCAtIDFdXSA6ICdjb2x1bW4nO1xuICAgICAgICAgIGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50XSA9IHByZXZpb3VzRGlyZWN0aW9uVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSAocHJvcFZhbHVlLCBicmVha3BvaW50KSA9PiB7XG4gICAgICBpZiAob3duZXJTdGF0ZS51c2VGbGV4R2FwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gVGhlIHVzZUZsZXhHYXA9e2ZhbHNlfSBpbXBsZW1lbnQgcmVsaWVzIG9uIGVhY2ggY2hpbGQgdG8gZ2l2ZSB1cCBjb250cm9sIG9mIHRoZSBtYXJnaW4uXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzZXQgdGhlIG1hcmdpbiB0byBhdm9pZCBkb3VibGUgc3BhY2luZy5cbiAgICAgICAgJyYgPiA6bm90KHN0eWxlKTpub3Qoc3R5bGUpJzoge1xuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICB9LFxuICAgICAgICAnJiA+IDpub3Qoc3R5bGUpIH4gOm5vdChzdHlsZSknOiB7XG4gICAgICAgICAgW2BtYXJnaW4ke2dldFNpZGVGcm9tRGlyZWN0aW9uKGJyZWFrcG9pbnQgPyBkaXJlY3Rpb25WYWx1ZXNbYnJlYWtwb2ludF0gOiBvd25lclN0YXRlLmRpcmVjdGlvbil9YF06IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBzdHlsZXMgPSBkZWVwbWVyZ2Uoc3R5bGVzLCBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgICB0aGVtZVxuICAgIH0sIHNwYWNpbmdWYWx1ZXMsIHN0eWxlRnJvbVByb3BWYWx1ZSkpO1xuICB9XG4gIHN0eWxlcyA9IG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyKHRoZW1lLmJyZWFrcG9pbnRzLCBzdHlsZXMpO1xuICByZXR1cm4gc3R5bGVzO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN0YWNrKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IGFkZGluZyBjdXN0b20gc3R5bGVkIGZuIChmb3IgZXhhbXBsZSBmb3IgY3VzdG9tIHN4IHN0eWxlIGZ1bmN0aW9uKVxuICAgIGNyZWF0ZVN0eWxlZENvbXBvbmVudCA9IGRlZmF1bHRDcmVhdGVTdHlsZWRDb21wb25lbnQsXG4gICAgdXNlVGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHNEZWZhdWx0LFxuICAgIGNvbXBvbmVudE5hbWUgPSAnTXVpU3RhY2snXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9ICgpID0+IHtcbiAgICBjb25zdCBzbG90cyA9IHtcbiAgICAgIHJvb3Q6IFsncm9vdCddXG4gICAgfTtcbiAgICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIHNsb3QgPT4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoY29tcG9uZW50TmFtZSwgc2xvdCksIHt9KTtcbiAgfTtcbiAgY29uc3QgU3RhY2tSb290ID0gY3JlYXRlU3R5bGVkQ29tcG9uZW50KHN0eWxlKTtcbiAgY29uc3QgU3RhY2sgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBHcmlkKGluUHJvcHMsIHJlZikge1xuICAgIGNvbnN0IHRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzKGluUHJvcHMpO1xuICAgIGNvbnN0IHByb3BzID0gZXh0ZW5kU3hQcm9wKHRoZW1lUHJvcHMpOyAvLyBgY29sb3JgIHR5cGUgY29uZmxpY3RzIHdpdGggaHRtbCBjb2xvciBhdHRyaWJ1dGUuXG4gICAgY29uc3Qge1xuICAgICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgICAgZGlyZWN0aW9uID0gJ2NvbHVtbicsXG4gICAgICAgIHNwYWNpbmcgPSAwLFxuICAgICAgICBkaXZpZGVyLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB1c2VGbGV4R2FwID0gZmFsc2VcbiAgICAgIH0gPSBwcm9wcyxcbiAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gICAgY29uc3Qgb3duZXJTdGF0ZSA9IHtcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIHNwYWNpbmcsXG4gICAgICB1c2VGbGV4R2FwXG4gICAgfTtcbiAgICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMoKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3RhY2tSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogZGl2aWRlciA/IGpvaW5DaGlsZHJlbihjaGlsZHJlbiwgZGl2aWRlcikgOiBjaGlsZHJlblxuICAgIH0pKTtcbiAgfSk7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN0YWNrLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgZGl2aWRlcjogUHJvcFR5cGVzLm5vZGUsXG4gICAgc3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSA6IHZvaWQgMDtcbiAgcmV0dXJuIFN0YWNrO1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcIm1peGluc1wiLCBcInNwYWNpbmdcIiwgXCJwYWxldHRlXCIsIFwidHJhbnNpdGlvbnNcIiwgXCJ0eXBvZ3JhcGh5XCIsIFwic2hhcGVcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBzdHlsZUZ1bmN0aW9uU3gsIHsgdW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnIGFzIGRlZmF1bHRTeENvbmZpZyB9IGZyb20gJ0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgc3lzdGVtQ3JlYXRlVGhlbWUgZnJvbSAnQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNyZWF0ZU1peGlucyBmcm9tICcuL2NyZWF0ZU1peGlucyc7XG5pbXBvcnQgY3JlYXRlUGFsZXR0ZSBmcm9tICcuL2NyZWF0ZVBhbGV0dGUnO1xuaW1wb3J0IGNyZWF0ZVR5cG9ncmFwaHkgZnJvbSAnLi9jcmVhdGVUeXBvZ3JhcGh5JztcbmltcG9ydCBzaGFkb3dzIGZyb20gJy4vc2hhZG93cyc7XG5pbXBvcnQgY3JlYXRlVHJhbnNpdGlvbnMgZnJvbSAnLi9jcmVhdGVUcmFuc2l0aW9ucyc7XG5pbXBvcnQgekluZGV4IGZyb20gJy4vekluZGV4JztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBtaXhpbnM6IG1peGluc0lucHV0ID0ge30sXG4gICAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICAgIHRyYW5zaXRpb25zOiB0cmFuc2l0aW9uc0lucHV0ID0ge30sXG4gICAgICB0eXBvZ3JhcGh5OiB0eXBvZ3JhcGh5SW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgaWYgKG9wdGlvbnMudmFycykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBcXGB2YXJzXFxgIGlzIGEgcHJpdmF0ZSBmaWVsZCB1c2VkIGZvciBDU1MgdmFyaWFibGVzIHN1cHBvcnQuXG5QbGVhc2UgdXNlIGFub3RoZXIgbmFtZS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxOCkpO1xuICB9XG4gIGNvbnN0IHBhbGV0dGUgPSBjcmVhdGVQYWxldHRlKHBhbGV0dGVJbnB1dCk7XG4gIGNvbnN0IHN5c3RlbVRoZW1lID0gc3lzdGVtQ3JlYXRlVGhlbWUob3B0aW9ucyk7XG4gIGxldCBtdWlUaGVtZSA9IGRlZXBtZXJnZShzeXN0ZW1UaGVtZSwge1xuICAgIG1peGluczogY3JlYXRlTWl4aW5zKHN5c3RlbVRoZW1lLmJyZWFrcG9pbnRzLCBtaXhpbnNJbnB1dCksXG4gICAgcGFsZXR0ZSxcbiAgICAvLyBEb24ndCB1c2UgWy4uLnNoYWRvd3NdIHVudGlsIHlvdSd2ZSB2ZXJpZmllZCBpdHMgdHJhbnNwaWxlZCBjb2RlIGlzIG5vdCBpbnZva2luZyB0aGUgaXRlcmF0b3IgcHJvdG9jb2wuXG4gICAgc2hhZG93czogc2hhZG93cy5zbGljZSgpLFxuICAgIHR5cG9ncmFwaHk6IGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeUlucHV0KSxcbiAgICB0cmFuc2l0aW9uczogY3JlYXRlVHJhbnNpdGlvbnModHJhbnNpdGlvbnNJbnB1dCksXG4gICAgekluZGV4OiBfZXh0ZW5kcyh7fSwgekluZGV4KVxuICB9KTtcbiAgbXVpVGhlbWUgPSBkZWVwbWVyZ2UobXVpVGhlbWUsIG90aGVyKTtcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVE9ETyB2NjogUmVmYWN0b3IgdG8gdXNlIGdsb2JhbFN0YXRlQ2xhc3Nlc01hcHBpbmcgZnJvbSBAbXVpL3V0aWxzIG9uY2UgYHJlYWRPbmx5YCBzdGF0ZSBjbGFzcyBpcyB1c2VkIGluIFJhdGluZyBjb21wb25lbnQuXG4gICAgY29uc3Qgc3RhdGVDbGFzc2VzID0gWydhY3RpdmUnLCAnY2hlY2tlZCcsICdjb21wbGV0ZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZXhwYW5kZWQnLCAnZm9jdXNlZCcsICdmb2N1c1Zpc2libGUnLCAncmVxdWlyZWQnLCAnc2VsZWN0ZWQnXTtcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlLCBjb21wb25lbnQpID0+IHtcbiAgICAgIGxldCBrZXk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW4sIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICBmb3IgKGtleSBpbiBub2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZVtrZXldO1xuICAgICAgICBpZiAoc3RhdGVDbGFzc2VzLmluZGV4T2Yoa2V5KSAhPT0gLTEgJiYgT2JqZWN0LmtleXMoY2hpbGQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVDbGFzcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzKCcnLCBrZXkpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYCR7Y29tcG9uZW50fVxcYCBjb21wb25lbnQgaW5jcmVhc2VzIGAgKyBgdGhlIENTUyBzcGVjaWZpY2l0eSBvZiB0aGUgXFxgJHtrZXl9XFxgIGludGVybmFsIHN0YXRlLmAsICdZb3UgY2FuIG5vdCBvdmVycmlkZSBpdCBsaWtlIHRoaXM6ICcsIEpTT04uc3RyaW5naWZ5KG5vZGUsIG51bGwsIDIpLCAnJywgYEluc3RlYWQsIHlvdSBuZWVkIHRvIHVzZSB0aGUgJyYuJHtzdGF0ZUNsYXNzfScgc3ludGF4OmAsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgcm9vdDoge1xuICAgICAgICAgICAgICAgIFtgJi4ke3N0YXRlQ2xhc3N9YF06IGNoaWxkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG51bGwsIDIpLCAnJywgJ2h0dHBzOi8vbXVpLmNvbS9yL3N0YXRlLWNsYXNzZXMtZ3VpZGUnXS5qb2luKCdcXG4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc3R5bGUgdG8gcHJldmVudCBnbG9iYWwgY29uZmxpY3RzLlxuICAgICAgICAgIG5vZGVba2V5XSA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyhtdWlUaGVtZS5jb21wb25lbnRzKS5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IG11aVRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50XS5zdHlsZU92ZXJyaWRlcztcbiAgICAgIGlmIChzdHlsZU92ZXJyaWRlcyAmJiBjb21wb25lbnQuaW5kZXhPZignTXVpJykgPT09IDApIHtcbiAgICAgICAgdHJhdmVyc2Uoc3R5bGVPdmVycmlkZXMsIGNvbXBvbmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgbXVpVGhlbWUudW5zdGFibGVfc3hDb25maWcgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdFN4Q29uZmlnLCBvdGhlciA9PSBudWxsID8gdm9pZCAwIDogb3RoZXIudW5zdGFibGVfc3hDb25maWcpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeCA9IGZ1bmN0aW9uIHN4KHByb3BzKSB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICBzeDogcHJvcHMsXG4gICAgICB0aGVtZTogdGhpc1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gbXVpVGhlbWU7XG59XG5sZXQgd2FybmVkT25jZSA9IGZhbHNlO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU11aVRoZW1lKC4uLmFyZ3MpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIXdhcm5lZE9uY2UpIHtcbiAgICAgIHdhcm5lZE9uY2UgPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogdGhlIGNyZWF0ZU11aVRoZW1lIGZ1bmN0aW9uIHdhcyByZW5hbWVkIHRvIGNyZWF0ZVRoZW1lLicsICcnLCBcIllvdSBzaG91bGQgdXNlIGBpbXBvcnQgeyBjcmVhdGVUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJ2BcIl0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlVGhlbWUoLi4uYXJncyk7XG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVUaGVtZTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVNaXhpbnMoYnJlYWtwb2ludHMsIG1peGlucykge1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHRvb2xiYXI6IHtcbiAgICAgIG1pbkhlaWdodDogNTYsXG4gICAgICBbYnJlYWtwb2ludHMudXAoJ3hzJyldOiB7XG4gICAgICAgICdAbWVkaWEgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpJzoge1xuICAgICAgICAgIG1pbkhlaWdodDogNDhcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFticmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICAgICAgbWluSGVpZ2h0OiA2NFxuICAgICAgfVxuICAgIH1cbiAgfSwgbWl4aW5zKTtcbn0iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wibW9kZVwiLCBcImNvbnRyYXN0VGhyZXNob2xkXCIsIFwidG9uYWxPZmZzZXRcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCB7IGRhcmtlbiwgZ2V0Q29udHJhc3RSYXRpbywgbGlnaHRlbiB9IGZyb20gJ0BtdWkvc3lzdGVtL2NvbG9yTWFuaXB1bGF0b3InO1xuaW1wb3J0IGNvbW1vbiBmcm9tICcuLi9jb2xvcnMvY29tbW9uJztcbmltcG9ydCBncmV5IGZyb20gJy4uL2NvbG9ycy9ncmV5JztcbmltcG9ydCBwdXJwbGUgZnJvbSAnLi4vY29sb3JzL3B1cnBsZSc7XG5pbXBvcnQgcmVkIGZyb20gJy4uL2NvbG9ycy9yZWQnO1xuaW1wb3J0IG9yYW5nZSBmcm9tICcuLi9jb2xvcnMvb3JhbmdlJztcbmltcG9ydCBibHVlIGZyb20gJy4uL2NvbG9ycy9ibHVlJztcbmltcG9ydCBsaWdodEJsdWUgZnJvbSAnLi4vY29sb3JzL2xpZ2h0Qmx1ZSc7XG5pbXBvcnQgZ3JlZW4gZnJvbSAnLi4vY29sb3JzL2dyZWVuJztcbmV4cG9ydCBjb25zdCBsaWdodCA9IHtcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSB0ZXh0LlxuICB0ZXh0OiB7XG4gICAgLy8gVGhlIG1vc3QgaW1wb3J0YW50IHRleHQuXG4gICAgcHJpbWFyeTogJ3JnYmEoMCwgMCwgMCwgMC44NyknLFxuICAgIC8vIFNlY29uZGFyeSB0ZXh0LlxuICAgIHNlY29uZGFyeTogJ3JnYmEoMCwgMCwgMCwgMC42KScsXG4gICAgLy8gRGlzYWJsZWQgdGV4dCBoYXZlIGV2ZW4gbG93ZXIgdmlzdWFsIHByb21pbmVuY2UuXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMzgpJ1xuICB9LFxuICAvLyBUaGUgY29sb3IgdXNlZCB0byBkaXZpZGUgZGlmZmVyZW50IGVsZW1lbnRzLlxuICBkaXZpZGVyOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gIC8vIFRoZSBiYWNrZ3JvdW5kIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBzdXJmYWNlcy5cbiAgLy8gQ29uc2lzdGVuY3kgYmV0d2VlbiB0aGVzZSB2YWx1ZXMgaXMgaW1wb3J0YW50LlxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6IGNvbW1vbi53aGl0ZSxcbiAgICBkZWZhdWx0OiBjb21tb24ud2hpdGVcbiAgfSxcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBhY3Rpb24gZWxlbWVudHMuXG4gIGFjdGlvbjoge1xuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBhY3RpdmUgYWN0aW9uIGxpa2UgYW4gaWNvbiBidXR0b24uXG4gICAgYWN0aXZlOiAncmdiYSgwLCAwLCAwLCAwLjU0KScsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGFuIGhvdmVyZWQgYWN0aW9uLlxuICAgIGhvdmVyOiAncmdiYSgwLCAwLCAwLCAwLjA0KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA0LFxuICAgIC8vIFRoZSBjb2xvciBvZiBhIHNlbGVjdGVkIGFjdGlvbi5cbiAgICBzZWxlY3RlZDogJ3JnYmEoMCwgMCwgMCwgMC4wOCknLFxuICAgIHNlbGVjdGVkT3BhY2l0eTogMC4wOCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMjYpJyxcbiAgICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiBhIGRpc2FibGVkIGFjdGlvbi5cbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4xMlxuICB9XG59O1xuZXhwb3J0IGNvbnN0IGRhcmsgPSB7XG4gIHRleHQ6IHtcbiAgICBwcmltYXJ5OiBjb21tb24ud2hpdGUsXG4gICAgc2Vjb25kYXJ5OiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJyxcbiAgICBkaXNhYmxlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gICAgaWNvbjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSdcbiAgfSxcbiAgZGl2aWRlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6ICcjMTIxMjEyJyxcbiAgICBkZWZhdWx0OiAnIzEyMTIxMidcbiAgfSxcbiAgYWN0aW9uOiB7XG4gICAgYWN0aXZlOiBjb21tb24ud2hpdGUsXG4gICAgaG92ZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpJyxcbiAgICBob3Zlck9wYWNpdHk6IDAuMDgsXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMTYsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyknLFxuICAgIGRpc2FibGVkQmFja2dyb3VuZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGRpc2FibGVkT3BhY2l0eTogMC4zOCxcbiAgICBmb2N1czogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGZvY3VzT3BhY2l0eTogMC4xMixcbiAgICBhY3RpdmF0ZWRPcGFjaXR5OiAwLjI0XG4gIH1cbn07XG5mdW5jdGlvbiBhZGRMaWdodE9yRGFyayhpbnRlbnQsIGRpcmVjdGlvbiwgc2hhZGUsIHRvbmFsT2Zmc2V0KSB7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0TGlnaHQgPSB0b25hbE9mZnNldC5saWdodCB8fCB0b25hbE9mZnNldDtcbiAgY29uc3QgdG9uYWxPZmZzZXREYXJrID0gdG9uYWxPZmZzZXQuZGFyayB8fCB0b25hbE9mZnNldCAqIDEuNTtcbiAgaWYgKCFpbnRlbnRbZGlyZWN0aW9uXSkge1xuICAgIGlmIChpbnRlbnQuaGFzT3duUHJvcGVydHkoc2hhZGUpKSB7XG4gICAgICBpbnRlbnRbZGlyZWN0aW9uXSA9IGludGVudFtzaGFkZV07XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsaWdodCcpIHtcbiAgICAgIGludGVudC5saWdodCA9IGxpZ2h0ZW4oaW50ZW50Lm1haW4sIHRvbmFsT2Zmc2V0TGlnaHQpO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZGFyaycpIHtcbiAgICAgIGludGVudC5kYXJrID0gZGFya2VuKGludGVudC5tYWluLCB0b25hbE9mZnNldERhcmspO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFByaW1hcnkobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBibHVlWzIwMF0sXG4gICAgICBsaWdodDogYmx1ZVs1MF0sXG4gICAgICBkYXJrOiBibHVlWzQwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogYmx1ZVs3MDBdLFxuICAgIGxpZ2h0OiBibHVlWzQwMF0sXG4gICAgZGFyazogYmx1ZVs4MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U2Vjb25kYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcHVycGxlWzIwMF0sXG4gICAgICBsaWdodDogcHVycGxlWzUwXSxcbiAgICAgIGRhcms6IHB1cnBsZVs0MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IHB1cnBsZVs1MDBdLFxuICAgIGxpZ2h0OiBwdXJwbGVbMzAwXSxcbiAgICBkYXJrOiBwdXJwbGVbNzAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEVycm9yKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcmVkWzUwMF0sXG4gICAgICBsaWdodDogcmVkWzMwMF0sXG4gICAgICBkYXJrOiByZWRbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiByZWRbNzAwXSxcbiAgICBsaWdodDogcmVkWzQwMF0sXG4gICAgZGFyazogcmVkWzgwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRJbmZvKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogbGlnaHRCbHVlWzQwMF0sXG4gICAgICBsaWdodDogbGlnaHRCbHVlWzMwMF0sXG4gICAgICBkYXJrOiBsaWdodEJsdWVbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBsaWdodEJsdWVbNzAwXSxcbiAgICBsaWdodDogbGlnaHRCbHVlWzUwMF0sXG4gICAgZGFyazogbGlnaHRCbHVlWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRTdWNjZXNzKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogZ3JlZW5bNDAwXSxcbiAgICAgIGxpZ2h0OiBncmVlblszMDBdLFxuICAgICAgZGFyazogZ3JlZW5bNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBncmVlbls4MDBdLFxuICAgIGxpZ2h0OiBncmVlbls1MDBdLFxuICAgIGRhcms6IGdyZWVuWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRXYXJuaW5nKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogb3JhbmdlWzQwMF0sXG4gICAgICBsaWdodDogb3JhbmdlWzMwMF0sXG4gICAgICBkYXJrOiBvcmFuZ2VbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiAnI2VkNmMwMicsXG4gICAgLy8gY2xvc2VzdCB0byBvcmFuZ2VbODAwXSB0aGF0IHBhc3MgMzoxLlxuICAgIGxpZ2h0OiBvcmFuZ2VbNTAwXSxcbiAgICBkYXJrOiBvcmFuZ2VbOTAwXVxuICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUGFsZXR0ZShwYWxldHRlKSB7XG4gIGNvbnN0IHtcbiAgICAgIG1vZGUgPSAnbGlnaHQnLFxuICAgICAgY29udHJhc3RUaHJlc2hvbGQgPSAzLFxuICAgICAgdG9uYWxPZmZzZXQgPSAwLjJcbiAgICB9ID0gcGFsZXR0ZSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhbGV0dGUsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHByaW1hcnkgPSBwYWxldHRlLnByaW1hcnkgfHwgZ2V0RGVmYXVsdFByaW1hcnkobW9kZSk7XG4gIGNvbnN0IHNlY29uZGFyeSA9IHBhbGV0dGUuc2Vjb25kYXJ5IHx8IGdldERlZmF1bHRTZWNvbmRhcnkobW9kZSk7XG4gIGNvbnN0IGVycm9yID0gcGFsZXR0ZS5lcnJvciB8fCBnZXREZWZhdWx0RXJyb3IobW9kZSk7XG4gIGNvbnN0IGluZm8gPSBwYWxldHRlLmluZm8gfHwgZ2V0RGVmYXVsdEluZm8obW9kZSk7XG4gIGNvbnN0IHN1Y2Nlc3MgPSBwYWxldHRlLnN1Y2Nlc3MgfHwgZ2V0RGVmYXVsdFN1Y2Nlc3MobW9kZSk7XG4gIGNvbnN0IHdhcm5pbmcgPSBwYWxldHRlLndhcm5pbmcgfHwgZ2V0RGVmYXVsdFdhcm5pbmcobW9kZSk7XG5cbiAgLy8gVXNlIHRoZSBzYW1lIGxvZ2ljIGFzXG4gIC8vIEJvb3RzdHJhcDogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvMWQ2ZTM3MTBkZDQ0N2RlMWEyMDBmMjllOGZhNTIxZjhhMDkwOGY3MC9zY3NzL19mdW5jdGlvbnMuc2NzcyNMNTlcbiAgLy8gYW5kIG1hdGVyaWFsLWNvbXBvbmVudHMtd2ViIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYWM0NmI4ODYzYzRkYWI5ZmMyMmM0YzY2MmRjNmJkMWI2NWRkNjUyZi9wYWNrYWdlcy9tZGMtdGhlbWUvX2Z1bmN0aW9ucy5zY3NzI0w1NFxuICBmdW5jdGlvbiBnZXRDb250cmFzdFRleHQoYmFja2dyb3VuZCkge1xuICAgIGNvbnN0IGNvbnRyYXN0VGV4dCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgZGFyay50ZXh0LnByaW1hcnkpID49IGNvbnRyYXN0VGhyZXNob2xkID8gZGFyay50ZXh0LnByaW1hcnkgOiBsaWdodC50ZXh0LnByaW1hcnk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGNvbnRyYXN0ID0gZ2V0Q29udHJhc3RSYXRpbyhiYWNrZ3JvdW5kLCBjb250cmFzdFRleHQpO1xuICAgICAgaWYgKGNvbnRyYXN0IDwgMykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgY29udHJhc3QgcmF0aW8gb2YgJHtjb250cmFzdH06MSBmb3IgJHtjb250cmFzdFRleHR9IG9uICR7YmFja2dyb3VuZH1gLCAnZmFsbHMgYmVsb3cgdGhlIFdDQUcgcmVjb21tZW5kZWQgYWJzb2x1dGUgbWluaW11bSBjb250cmFzdCByYXRpbyBvZiAzOjEuJywgJ2h0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250cmFzdCddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyYXN0VGV4dDtcbiAgfVxuICBjb25zdCBhdWdtZW50Q29sb3IgPSAoe1xuICAgIGNvbG9yLFxuICAgIG5hbWUsXG4gICAgbWFpblNoYWRlID0gNTAwLFxuICAgIGxpZ2h0U2hhZGUgPSAzMDAsXG4gICAgZGFya1NoYWRlID0gNzAwXG4gIH0pID0+IHtcbiAgICBjb2xvciA9IF9leHRlbmRzKHt9LCBjb2xvcik7XG4gICAgaWYgKCFjb2xvci5tYWluICYmIGNvbG9yW21haW5TaGFkZV0pIHtcbiAgICAgIGNvbG9yLm1haW4gPSBjb2xvclttYWluU2hhZGVdO1xuICAgIH1cbiAgICBpZiAoIWNvbG9yLmhhc093blByb3BlcnR5KCdtYWluJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuVGhlIGNvbG9yIG9iamVjdCBuZWVkcyB0byBoYXZlIGEgXFxgbWFpblxcYCBwcm9wZXJ0eSBvciBhIFxcYCR7bWFpblNoYWRlfVxcYCBwcm9wZXJ0eS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMSwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBtYWluU2hhZGUpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb2xvci5tYWluICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBjb2xvciR7bmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnfSBwcm92aWRlZCB0byBhdWdtZW50Q29sb3IoY29sb3IpIGlzIGludmFsaWQuXG5cXGBjb2xvci5tYWluXFxgIHNob3VsZCBiZSBhIHN0cmluZywgYnV0IFxcYCR7SlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbil9XFxgIHdhcyBwcm92aWRlZCBpbnN0ZWFkLlxuXG5EaWQgeW91IGludGVuZCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2hlcz9cblxuaW1wb3J0IHsgZ3JlZW4gfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9jb2xvcnNcIjtcblxuY29uc3QgdGhlbWUxID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IGdyZWVuLFxufSB9KTtcblxuY29uc3QgdGhlbWUyID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IHsgbWFpbjogZ3JlZW5bNTAwXSB9LFxufSB9KTtgIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMiwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBKU09OLnN0cmluZ2lmeShjb2xvci5tYWluKSkpO1xuICAgIH1cbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2xpZ2h0JywgbGlnaHRTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGFkZExpZ2h0T3JEYXJrKGNvbG9yLCAnZGFyaycsIGRhcmtTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGlmICghY29sb3IuY29udHJhc3RUZXh0KSB7XG4gICAgICBjb2xvci5jb250cmFzdFRleHQgPSBnZXRDb250cmFzdFRleHQoY29sb3IubWFpbik7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfTtcbiAgY29uc3QgbW9kZXMgPSB7XG4gICAgZGFyayxcbiAgICBsaWdodFxuICB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghbW9kZXNbbW9kZV0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVGhlIHBhbGV0dGUgbW9kZSBcXGAke21vZGV9XFxgIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhbGV0dGVPdXRwdXQgPSBkZWVwbWVyZ2UoX2V4dGVuZHMoe1xuICAgIC8vIEEgY29sbGVjdGlvbiBvZiBjb21tb24gY29sb3JzLlxuICAgIGNvbW1vbjogX2V4dGVuZHMoe30sIGNvbW1vbiksXG4gICAgLy8gcHJldmVudCBtdXRhYmxlIG9iamVjdC5cbiAgICAvLyBUaGUgcGFsZXR0ZSBtb2RlLCBjYW4gYmUgbGlnaHQgb3IgZGFyay5cbiAgICBtb2RlLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgcHJpbWFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBwcmltYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHByaW1hcnksXG4gICAgICBuYW1lOiAncHJpbWFyeSdcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHNlY29uZGFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBzZWNvbmRhcnk6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc2Vjb25kYXJ5LFxuICAgICAgbmFtZTogJ3NlY29uZGFyeScsXG4gICAgICBtYWluU2hhZGU6ICdBNDAwJyxcbiAgICAgIGxpZ2h0U2hhZGU6ICdBMjAwJyxcbiAgICAgIGRhcmtTaGFkZTogJ0E3MDAnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBpbnRlcmZhY2UgZWxlbWVudHMgdGhhdCB0aGUgdXNlciBzaG91bGQgYmUgbWFkZSBhd2FyZSBvZi5cbiAgICBlcnJvcjogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBlcnJvcixcbiAgICAgIG5hbWU6ICdlcnJvcidcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHBvdGVudGlhbGx5IGRhbmdlcm91cyBhY3Rpb25zIG9yIGltcG9ydGFudCBtZXNzYWdlcy5cbiAgICB3YXJuaW5nOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHdhcm5pbmcsXG4gICAgICBuYW1lOiAnd2FybmluZydcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcHJlc2VudCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciB0aGF0IGlzIG5ldXRyYWwgYW5kIG5vdCBuZWNlc3NhcmlseSBpbXBvcnRhbnQuXG4gICAgaW5mbzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBpbmZvLFxuICAgICAgbmFtZTogJ2luZm8nXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gYWN0aW9uIHRoYXQgdXNlciB0cmlnZ2VyZWQuXG4gICAgc3VjY2VzczogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBzdWNjZXNzLFxuICAgICAgbmFtZTogJ3N1Y2Nlc3MnXG4gICAgfSksXG4gICAgLy8gVGhlIGdyZXkgY29sb3JzLlxuICAgIGdyZXksXG4gICAgLy8gVXNlZCBieSBgZ2V0Q29udHJhc3RUZXh0KClgIHRvIG1heGltaXplIHRoZSBjb250cmFzdCBiZXR3ZWVuXG4gICAgLy8gdGhlIGJhY2tncm91bmQgYW5kIHRoZSB0ZXh0LlxuICAgIGNvbnRyYXN0VGhyZXNob2xkLFxuICAgIC8vIFRha2VzIGEgYmFja2dyb3VuZCBjb2xvciBhbmQgcmV0dXJucyB0aGUgdGV4dCBjb2xvciB0aGF0IG1heGltaXplcyB0aGUgY29udHJhc3QuXG4gICAgZ2V0Q29udHJhc3RUZXh0LFxuICAgIC8vIEdlbmVyYXRlIGEgcmljaCBjb2xvciBvYmplY3QuXG4gICAgYXVnbWVudENvbG9yLFxuICAgIC8vIFVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBiZWxvdyB0byBzaGlmdCBhIGNvbG9yJ3MgbHVtaW5hbmNlIGJ5IGFwcHJveGltYXRlbHlcbiAgICAvLyB0d28gaW5kZXhlcyB3aXRoaW4gaXRzIHRvbmFsIHBhbGV0dGUuXG4gICAgLy8gRS5nLiwgc2hpZnQgZnJvbSBSZWQgNTAwIHRvIFJlZCAzMDAgb3IgUmVkIDcwMC5cbiAgICB0b25hbE9mZnNldFxuICB9LCBtb2Rlc1ttb2RlXSksIG90aGVyKTtcbiAgcmV0dXJuIHBhbGV0dGVPdXRwdXQ7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJmb250RmFtaWx5XCIsIFwiZm9udFNpemVcIiwgXCJmb250V2VpZ2h0TGlnaHRcIiwgXCJmb250V2VpZ2h0UmVndWxhclwiLCBcImZvbnRXZWlnaHRNZWRpdW1cIiwgXCJmb250V2VpZ2h0Qm9sZFwiLCBcImh0bWxGb250U2l6ZVwiLCBcImFsbFZhcmlhbnRzXCIsIFwicHhUb1JlbVwiXTtcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuZnVuY3Rpb24gcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxZTUpIC8gMWU1O1xufVxuY29uc3QgY2FzZUFsbENhcHMgPSB7XG4gIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG59O1xuY29uc3QgZGVmYXVsdEZvbnRGYW1pbHkgPSAnXCJSb2JvdG9cIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBzYW5zLXNlcmlmJztcblxuLyoqXG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdGhlLXR5cGUtc3lzdGVtLmh0bWx9XG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdW5kZXJzdGFuZGluZy10eXBvZ3JhcGh5Lmh0bWx9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeSkge1xuICBjb25zdCBfcmVmID0gdHlwZW9mIHR5cG9ncmFwaHkgPT09ICdmdW5jdGlvbicgPyB0eXBvZ3JhcGh5KHBhbGV0dGUpIDogdHlwb2dyYXBoeSxcbiAgICB7XG4gICAgICBmb250RmFtaWx5ID0gZGVmYXVsdEZvbnRGYW1pbHksXG4gICAgICAvLyBUaGUgZGVmYXVsdCBmb250IHNpemUgb2YgdGhlIE1hdGVyaWFsIFNwZWNpZmljYXRpb24uXG4gICAgICBmb250U2l6ZSA9IDE0LFxuICAgICAgLy8gcHhcbiAgICAgIGZvbnRXZWlnaHRMaWdodCA9IDMwMCxcbiAgICAgIGZvbnRXZWlnaHRSZWd1bGFyID0gNDAwLFxuICAgICAgZm9udFdlaWdodE1lZGl1bSA9IDUwMCxcbiAgICAgIGZvbnRXZWlnaHRCb2xkID0gNzAwLFxuICAgICAgLy8gVGVsbCBNVUkgd2hhdCdzIHRoZSBmb250LXNpemUgb24gdGhlIGh0bWwgZWxlbWVudC5cbiAgICAgIC8vIDE2cHggaXMgdGhlIGRlZmF1bHQgZm9udC1zaXplIHVzZWQgYnkgYnJvd3NlcnMuXG4gICAgICBodG1sRm9udFNpemUgPSAxNixcbiAgICAgIC8vIEFwcGx5IHRoZSBDU1MgcHJvcGVydGllcyB0byBhbGwgdGhlIHZhcmlhbnRzLlxuICAgICAgYWxsVmFyaWFudHMsXG4gICAgICBweFRvUmVtOiBweFRvUmVtMlxuICAgIH0gPSBfcmVmLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGZvbnRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgZm9udFNpemVgIGlzIHJlcXVpcmVkIHRvIGJlIGEgbnVtYmVyLicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGh0bWxGb250U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGh0bWxGb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNvZWYgPSBmb250U2l6ZSAvIDE0O1xuICBjb25zdCBweFRvUmVtID0gcHhUb1JlbTIgfHwgKHNpemUgPT4gYCR7c2l6ZSAvIGh0bWxGb250U2l6ZSAqIGNvZWZ9cmVtYCk7XG4gIGNvbnN0IGJ1aWxkVmFyaWFudCA9IChmb250V2VpZ2h0LCBzaXplLCBsaW5lSGVpZ2h0LCBsZXR0ZXJTcGFjaW5nLCBjYXNpbmcpID0+IF9leHRlbmRzKHtcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRXZWlnaHQsXG4gICAgZm9udFNpemU6IHB4VG9SZW0oc2l6ZSksXG4gICAgLy8gVW5pdGxlc3MgZm9sbG93aW5nIGh0dHBzOi8vbWV5ZXJ3ZWIuY29tL2VyaWMvdGhvdWdodHMvMjAwNi8wMi8wOC91bml0bGVzcy1saW5lLWhlaWdodHMvXG4gICAgbGluZUhlaWdodFxuICB9LCBmb250RmFtaWx5ID09PSBkZWZhdWx0Rm9udEZhbWlseSA/IHtcbiAgICBsZXR0ZXJTcGFjaW5nOiBgJHtyb3VuZChsZXR0ZXJTcGFjaW5nIC8gc2l6ZSl9ZW1gXG4gIH0gOiB7fSwgY2FzaW5nLCBhbGxWYXJpYW50cyk7XG4gIGNvbnN0IHZhcmlhbnRzID0ge1xuICAgIGgxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA5NiwgMS4xNjcsIC0xLjUpLFxuICAgIGgyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA2MCwgMS4yLCAtMC41KSxcbiAgICBoMzogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCA0OCwgMS4xNjcsIDApLFxuICAgIGg0OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDM0LCAxLjIzNSwgMC4yNSksXG4gICAgaDU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMjQsIDEuMzM0LCAwKSxcbiAgICBoNjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDIwLCAxLjYsIDAuMTUpLFxuICAgIHN1YnRpdGxlMTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS43NSwgMC4xNSksXG4gICAgc3VidGl0bGUyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNTcsIDAuMSksXG4gICAgYm9keTE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTYsIDEuNSwgMC4xNSksXG4gICAgYm9keTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTQsIDEuNDMsIDAuMTUpLFxuICAgIGJ1dHRvbjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDE0LCAxLjc1LCAwLjQsIGNhc2VBbGxDYXBzKSxcbiAgICBjYXB0aW9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAxLjY2LCAwLjQpLFxuICAgIG92ZXJsaW5lOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAyLjY2LCAxLCBjYXNlQWxsQ2FwcyksXG4gICAgLy8gVE9ETyB2NjogUmVtb3ZlIGhhbmRsaW5nIG9mICdpbmhlcml0JyB2YXJpYW50IGZyb20gdGhlIHRoZW1lIGFzIGl0IGlzIGFscmVhZHkgaGFuZGxlZCBpbiBNYXRlcmlhbCBVSSdzIFR5cG9ncmFwaHkgY29tcG9uZW50LiBBbHNvLCByZW1lbWJlciB0byByZW1vdmUgdGhlIGFzc29jaWF0ZWQgdHlwZXMuXG4gICAgaW5oZXJpdDoge1xuICAgICAgZm9udEZhbWlseTogJ2luaGVyaXQnLFxuICAgICAgZm9udFdlaWdodDogJ2luaGVyaXQnLFxuICAgICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICAgIGxpbmVIZWlnaHQ6ICdpbmhlcml0JyxcbiAgICAgIGxldHRlclNwYWNpbmc6ICdpbmhlcml0J1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGRlZXBtZXJnZShfZXh0ZW5kcyh7XG4gICAgaHRtbEZvbnRTaXplLFxuICAgIHB4VG9SZW0sXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgICBmb250V2VpZ2h0TGlnaHQsXG4gICAgZm9udFdlaWdodFJlZ3VsYXIsXG4gICAgZm9udFdlaWdodE1lZGl1bSxcbiAgICBmb250V2VpZ2h0Qm9sZFxuICB9LCB2YXJpYW50cyksIG90aGVyLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcFxuICB9KTtcbn0iLCAiY29uc3Qgc2hhZG93S2V5VW1icmFPcGFjaXR5ID0gMC4yO1xuY29uc3Qgc2hhZG93S2V5UGVudW1icmFPcGFjaXR5ID0gMC4xNDtcbmNvbnN0IHNoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5ID0gMC4xMjtcbmZ1bmN0aW9uIGNyZWF0ZVNoYWRvdyguLi5weCkge1xuICByZXR1cm4gW2Ake3B4WzBdfXB4ICR7cHhbMV19cHggJHtweFsyXX1weCAke3B4WzNdfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlVbWJyYU9wYWNpdHl9KWAsIGAke3B4WzRdfXB4ICR7cHhbNV19cHggJHtweFs2XX1weCAke3B4WzddfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlQZW51bWJyYU9wYWNpdHl9KWAsIGAke3B4WzhdfXB4ICR7cHhbOV19cHggJHtweFsxMF19cHggJHtweFsxMV19cHggcmdiYSgwLDAsMCwke3NoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5fSlgXS5qb2luKCcsJyk7XG59XG5cbi8vIFZhbHVlcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYmU4NzQ3Zjk0NTc0NjY5Y2I1ZTdhZGQxYTdjNTRmYTQxYTg5Y2VjNy9wYWNrYWdlcy9tZGMtZWxldmF0aW9uL192YXJpYWJsZXMuc2Nzc1xuY29uc3Qgc2hhZG93cyA9IFsnbm9uZScsIGNyZWF0ZVNoYWRvdygwLCAyLCAxLCAtMSwgMCwgMSwgMSwgMCwgMCwgMSwgMywgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAxLCAtMiwgMCwgMiwgMiwgMCwgMCwgMSwgNSwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAzLCAtMiwgMCwgMywgNCwgMCwgMCwgMSwgOCwgMCksIGNyZWF0ZVNoYWRvdygwLCAyLCA0LCAtMSwgMCwgNCwgNSwgMCwgMCwgMSwgMTAsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgNSwgLTEsIDAsIDUsIDgsIDAsIDAsIDEsIDE0LCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDUsIC0xLCAwLCA2LCAxMCwgMCwgMCwgMSwgMTgsIDApLCBjcmVhdGVTaGFkb3coMCwgNCwgNSwgLTIsIDAsIDcsIDEwLCAxLCAwLCAyLCAxNiwgMSksIGNyZWF0ZVNoYWRvdygwLCA1LCA1LCAtMywgMCwgOCwgMTAsIDEsIDAsIDMsIDE0LCAyKSwgY3JlYXRlU2hhZG93KDAsIDUsIDYsIC0zLCAwLCA5LCAxMiwgMSwgMCwgMywgMTYsIDIpLCBjcmVhdGVTaGFkb3coMCwgNiwgNiwgLTMsIDAsIDEwLCAxNCwgMSwgMCwgNCwgMTgsIDMpLCBjcmVhdGVTaGFkb3coMCwgNiwgNywgLTQsIDAsIDExLCAxNSwgMSwgMCwgNCwgMjAsIDMpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEyLCAxNywgMiwgMCwgNSwgMjIsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEzLCAxOSwgMiwgMCwgNSwgMjQsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOSwgLTQsIDAsIDE0LCAyMSwgMiwgMCwgNSwgMjYsIDQpLCBjcmVhdGVTaGFkb3coMCwgOCwgOSwgLTUsIDAsIDE1LCAyMiwgMiwgMCwgNiwgMjgsIDUpLCBjcmVhdGVTaGFkb3coMCwgOCwgMTAsIC01LCAwLCAxNiwgMjQsIDIsIDAsIDYsIDMwLCA1KSwgY3JlYXRlU2hhZG93KDAsIDgsIDExLCAtNSwgMCwgMTcsIDI2LCAyLCAwLCA2LCAzMiwgNSksIGNyZWF0ZVNoYWRvdygwLCA5LCAxMSwgLTUsIDAsIDE4LCAyOCwgMiwgMCwgNywgMzQsIDYpLCBjcmVhdGVTaGFkb3coMCwgOSwgMTIsIC02LCAwLCAxOSwgMjksIDIsIDAsIDcsIDM2LCA2KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxMywgLTYsIDAsIDIwLCAzMSwgMywgMCwgOCwgMzgsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDEzLCAtNiwgMCwgMjEsIDMzLCAzLCAwLCA4LCA0MCwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTQsIC02LCAwLCAyMiwgMzUsIDMsIDAsIDgsIDQyLCA3KSwgY3JlYXRlU2hhZG93KDAsIDExLCAxNCwgLTcsIDAsIDIzLCAzNiwgMywgMCwgOSwgNDQsIDgpLCBjcmVhdGVTaGFkb3coMCwgMTEsIDE1LCAtNywgMCwgMjQsIDM4LCAzLCAwLCA5LCA0NiwgOCldO1xuZXhwb3J0IGRlZmF1bHQgc2hhZG93czsiLCAiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImR1cmF0aW9uXCIsIFwiZWFzaW5nXCIsIFwiZGVsYXlcIl07XG4vLyBGb2xsb3cgaHR0cHM6Ly9tYXRlcmlhbC5nb29nbGUuY29tL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctbmF0dXJhbC1lYXNpbmctY3VydmVzXG4vLyB0byBsZWFybiB0aGUgY29udGV4dCBpbiB3aGljaCBlYWNoIGVhc2luZyBzaG91bGQgYmUgdXNlZC5cbmV4cG9ydCBjb25zdCBlYXNpbmcgPSB7XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGVhc2luZyBjdXJ2ZS5cbiAgZWFzZUluT3V0OiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgZW50ZXIgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5IGZyb20gb2ZmLXNjcmVlbiBhbmRcbiAgLy8gc2xvd2x5IGRlY2VsZXJhdGUgdG8gYSByZXN0aW5nIHBvaW50LlxuICBlYXNlT3V0OiAnY3ViaWMtYmV6aWVyKDAuMCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgbGVhdmUgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5LiBUaGV5IGRvIG5vdCBkZWNlbGVyYXRlIHdoZW4gb2ZmLXNjcmVlbi5cbiAgZWFzZUluOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSknLFxuICAvLyBUaGUgc2hhcnAgY3VydmUgaXMgdXNlZCBieSBvYmplY3RzIHRoYXQgbWF5IHJldHVybiB0byB0aGUgc2NyZWVuIGF0IGFueSB0aW1lLlxuICBzaGFycDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSknXG59O1xuXG4vLyBGb2xsb3cgaHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9ndWlkZWxpbmVzL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctY29tbW9uLWR1cmF0aW9uc1xuLy8gdG8gbGVhcm4gd2hlbiB1c2Ugd2hhdCB0aW1pbmdcbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IHtcbiAgc2hvcnRlc3Q6IDE1MCxcbiAgc2hvcnRlcjogMjAwLFxuICBzaG9ydDogMjUwLFxuICAvLyBtb3N0IGJhc2ljIHJlY29tbWVuZGVkIHRpbWluZ1xuICBzdGFuZGFyZDogMzAwLFxuICAvLyB0aGlzIGlzIHRvIGJlIHVzZWQgaW4gY29tcGxleCBhbmltYXRpb25zXG4gIGNvbXBsZXg6IDM3NSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgZW50ZXJpbmcgc2NyZWVuXG4gIGVudGVyaW5nU2NyZWVuOiAyMjUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGxlYXZpbmcgc2NyZWVuXG4gIGxlYXZpbmdTY3JlZW46IDE5NVxufTtcbmZ1bmN0aW9uIGZvcm1hdE1zKG1pbGxpc2Vjb25kcykge1xuICByZXR1cm4gYCR7TWF0aC5yb3VuZChtaWxsaXNlY29uZHMpfW1zYDtcbn1cbmZ1bmN0aW9uIGdldEF1dG9IZWlnaHREdXJhdGlvbihoZWlnaHQpIHtcbiAgaWYgKCFoZWlnaHQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBjb25zdGFudCA9IGhlaWdodCAvIDM2O1xuXG4gIC8vIGh0dHBzOi8vd3d3LndvbGZyYW1hbHBoYS5jb20vaW5wdXQvP2k9KDQrJTJCKzE1KyorKHgrJTJGKzM2KykrKiorMC4yNSslMkIrKHgrJTJGKzM2KSslMkYrNSkrKisxMFxuICByZXR1cm4gTWF0aC5yb3VuZCgoNCArIDE1ICogY29uc3RhbnQgKiogMC4yNSArIGNvbnN0YW50IC8gNSkgKiAxMCk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmFuc2l0aW9ucyhpbnB1dFRyYW5zaXRpb25zKSB7XG4gIGNvbnN0IG1lcmdlZEVhc2luZyA9IF9leHRlbmRzKHt9LCBlYXNpbmcsIGlucHV0VHJhbnNpdGlvbnMuZWFzaW5nKTtcbiAgY29uc3QgbWVyZ2VkRHVyYXRpb24gPSBfZXh0ZW5kcyh7fSwgZHVyYXRpb24sIGlucHV0VHJhbnNpdGlvbnMuZHVyYXRpb24pO1xuICBjb25zdCBjcmVhdGUgPSAocHJvcHMgPSBbJ2FsbCddLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbk9wdGlvbiA9IG1lcmdlZER1cmF0aW9uLnN0YW5kYXJkLFxuICAgICAgICBlYXNpbmc6IGVhc2luZ09wdGlvbiA9IG1lcmdlZEVhc2luZy5lYXNlSW5PdXQsXG4gICAgICAgIGRlbGF5ID0gMFxuICAgICAgfSA9IG9wdGlvbnMsXG4gICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGlzU3RyaW5nID0gdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgIC8vIElFMTEgc3VwcG9ydCwgcmVwbGFjZSB3aXRoIE51bWJlci5pc05hTlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgICAgY29uc3QgaXNOdW1iZXIgPSB2YWx1ZSA9PiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgICAgaWYgKCFpc1N0cmluZyhwcm9wcykgJiYgIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJwcm9wc1wiIG11c3QgYmUgYSBzdHJpbmcgb3IgQXJyYXkuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVtYmVyKGR1cmF0aW9uT3B0aW9uKSAmJiAhaXNTdHJpbmcoZHVyYXRpb25PcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogQXJndW1lbnQgXCJkdXJhdGlvblwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgYnV0IGZvdW5kICR7ZHVyYXRpb25PcHRpb259LmApO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1N0cmluZyhlYXNpbmdPcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJlYXNpbmdcIiBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bWJlcihkZWxheSkgJiYgIWlzU3RyaW5nKGRlbGF5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZGVsYXlcIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBTZWNvbmcgYXJndW1lbnQgb2YgdHJhbnNpdGlvbi5jcmVhdGUgbXVzdCBiZSBhbiBvYmplY3QuJywgXCJBcmd1bWVudHMgc2hvdWxkIGJlIGVpdGhlciBgY3JlYXRlKCdwcm9wMScsIG9wdGlvbnMpYCBvciBgY3JlYXRlKFsncHJvcDEnLCAncHJvcDInXSwgb3B0aW9ucylgXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Qua2V5cyhvdGhlcikubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVW5yZWNvZ25pemVkIGFyZ3VtZW50KHMpIFske09iamVjdC5rZXlzKG90aGVyKS5qb2luKCcsJyl9XS5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHByb3BzKSA/IHByb3BzIDogW3Byb3BzXSkubWFwKGFuaW1hdGVkUHJvcCA9PiBgJHthbmltYXRlZFByb3B9ICR7dHlwZW9mIGR1cmF0aW9uT3B0aW9uID09PSAnc3RyaW5nJyA/IGR1cmF0aW9uT3B0aW9uIDogZm9ybWF0TXMoZHVyYXRpb25PcHRpb24pfSAke2Vhc2luZ09wdGlvbn0gJHt0eXBlb2YgZGVsYXkgPT09ICdzdHJpbmcnID8gZGVsYXkgOiBmb3JtYXRNcyhkZWxheSl9YCkuam9pbignLCcpO1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGdldEF1dG9IZWlnaHREdXJhdGlvbixcbiAgICBjcmVhdGVcbiAgfSwgaW5wdXRUcmFuc2l0aW9ucywge1xuICAgIGVhc2luZzogbWVyZ2VkRWFzaW5nLFxuICAgIGR1cmF0aW9uOiBtZXJnZWREdXJhdGlvblxuICB9KTtcbn0iLCAiLy8gV2UgbmVlZCB0byBjZW50cmFsaXplIHRoZSB6SW5kZXggZGVmaW5pdGlvbnMgYXMgdGhleSB3b3JrXG4vLyBsaWtlIGdsb2JhbCB2YWx1ZXMgaW4gdGhlIGJyb3dzZXIuXG5jb25zdCB6SW5kZXggPSB7XG4gIG1vYmlsZVN0ZXBwZXI6IDEwMDAsXG4gIGZhYjogMTA1MCxcbiAgc3BlZWREaWFsOiAxMDUwLFxuICBhcHBCYXI6IDExMDAsXG4gIGRyYXdlcjogMTIwMCxcbiAgbW9kYWw6IDEzMDAsXG4gIHNuYWNrYmFyOiAxNDAwLFxuICB0b29sdGlwOiAxNTAwXG59O1xuZXhwb3J0IGRlZmF1bHQgekluZGV4OyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBjcmVhdGVUaGVtZSBmcm9tICcuL2NyZWF0ZVRoZW1lJztcbmNvbnN0IGRlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0VGhlbWU7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHN5c3RlbVVzZVRoZW1lUHJvcHMgZnJvbSAnQG11aS9zeXN0ZW0vdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuL2lkZW50aWZpZXInO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWVQcm9wcyh7XG4gIHByb3BzLFxuICBuYW1lXG59KSB7XG4gIHJldHVybiBzeXN0ZW1Vc2VUaGVtZVByb3BzKHtcbiAgICBwcm9wcyxcbiAgICBuYW1lLFxuICAgIGRlZmF1bHRUaGVtZSxcbiAgICB0aGVtZUlkOiBUSEVNRV9JRFxuICB9KTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlU3R5bGVkLCB7IHNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnQG11aS9zeXN0ZW0vY3JlYXRlU3R5bGVkJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5leHBvcnQgY29uc3Qgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gcHJvcCA9PiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAnY2xhc3Nlcyc7XG5leHBvcnQgY29uc3Qgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3A7XG5jb25zdCBzdHlsZWQgPSBjcmVhdGVTdHlsZWQoe1xuICB0aGVtZUlkOiBUSEVNRV9JRCxcbiAgZGVmYXVsdFRoZW1lLFxuICByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyIsICJpbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuZXhwb3J0IGRlZmF1bHQgY2FwaXRhbGl6ZTsiLCAiaW1wb3J0IGNyZWF0ZUNoYWluZWRGdW5jdGlvbiBmcm9tICdAbXVpL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbic7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDaGFpbmVkRnVuY3Rpb247IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU3ZnSWNvbiBmcm9tICcuLi9TdmdJY29uJztcblxuLyoqXG4gKiBQcml2YXRlIG1vZHVsZSByZXNlcnZlZCBmb3IgQG11aSBwYWNrYWdlcy5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN2Z0ljb24ocGF0aCwgZGlzcGxheU5hbWUpIHtcbiAgZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCByZWYpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3ZnSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBgJHtkaXNwbGF5TmFtZX1JY29uYCxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBwYXRoXG4gICAgfSkpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gTmVlZCB0byBzZXQgYGRpc3BsYXlOYW1lYCBvbiB0aGUgaW5uZXIgY29tcG9uZW50IGZvciBSZWFjdC5tZW1vLlxuICAgIC8vIFJlYWN0IHByaW9yIHRvIDE2LjE0IGlnbm9yZXMgYGRpc3BsYXlOYW1lYCBvbiB0aGUgd3JhcHBlci5cbiAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgJHtkaXNwbGF5TmFtZX1JY29uYDtcbiAgfVxuICBDb21wb25lbnQubXVpTmFtZSA9IFN2Z0ljb24ubXVpTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKCAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihDb21wb25lbnQpKTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImZvbnRTaXplXCIsIFwiaHRtbENvbG9yXCIsIFwiaW5oZXJpdFZpZXdCb3hcIiwgXCJ0aXRsZUFjY2Vzc1wiLCBcInZpZXdCb3hcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRTdmdJY29uVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9zdmdJY29uQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbG9yLFxuICAgIGZvbnRTaXplLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNvbG9yICE9PSAnaW5oZXJpdCcgJiYgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgZm9udFNpemUke2NhcGl0YWxpemUoZm9udFNpemUpfWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgU3ZnSWNvblJvb3QgPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aVN2Z0ljb24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIHN0eWxlc1tgZm9udFNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5mb250U2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHRyYW5zaXRpb25zLCBfdGhlbWUkdHJhbnNpdGlvbnMkY3IsIF90aGVtZSR0cmFuc2l0aW9uczIsIF90aGVtZSR0eXBvZ3JhcGh5LCBfdGhlbWUkdHlwb2dyYXBoeSRweFQsIF90aGVtZSR0eXBvZ3JhcGh5MiwgX3RoZW1lJHR5cG9ncmFwaHkyJHB4LCBfdGhlbWUkdHlwb2dyYXBoeTMsIF90aGVtZSR0eXBvZ3JhcGh5MyRweCwgX3BhbGV0dGUkb3duZXJTdGF0ZSRjLCBfcGFsZXR0ZSwgX3BhbGV0dGUyLCBfcGFsZXR0ZTM7XG4gIHJldHVybiB7XG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIHdpZHRoOiAnMWVtJyxcbiAgICBoZWlnaHQ6ICcxZW0nLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIC8vIHRoZSA8c3ZnPiB3aWxsIGRlZmluZSB0aGUgcHJvcGVydHkgdGhhdCBoYXMgYGN1cnJlbnRDb2xvcmBcbiAgICAvLyBlLmcuIGhlcm9pY29ucyB1c2VzIGZpbGw9XCJub25lXCIgYW5kIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgZmlsbDogb3duZXJTdGF0ZS5oYXNTdmdBc0NoaWxkID8gdW5kZWZpbmVkIDogJ2N1cnJlbnRDb2xvcicsXG4gICAgZmxleFNocmluazogMCxcbiAgICB0cmFuc2l0aW9uOiAoX3RoZW1lJHRyYW5zaXRpb25zID0gdGhlbWUudHJhbnNpdGlvbnMpID09IG51bGwgfHwgKF90aGVtZSR0cmFuc2l0aW9ucyRjciA9IF90aGVtZSR0cmFuc2l0aW9ucy5jcmVhdGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMkY3IuY2FsbChfdGhlbWUkdHJhbnNpdGlvbnMsICdmaWxsJywge1xuICAgICAgZHVyYXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMyID0gdGhlbWUudHJhbnNpdGlvbnMpID09IG51bGwgfHwgKF90aGVtZSR0cmFuc2l0aW9uczIgPSBfdGhlbWUkdHJhbnNpdGlvbnMyLmR1cmF0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHRyYW5zaXRpb25zMi5zaG9ydGVyXG4gICAgfSksXG4gICAgZm9udFNpemU6IHtcbiAgICAgIGluaGVyaXQ6ICdpbmhlcml0JyxcbiAgICAgIHNtYWxsOiAoKF90aGVtZSR0eXBvZ3JhcGh5ID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkkcHhUID0gX3RoZW1lJHR5cG9ncmFwaHkucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5JHB4VC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5LCAyMCkpIHx8ICcxLjI1cmVtJyxcbiAgICAgIG1lZGl1bTogKChfdGhlbWUkdHlwb2dyYXBoeTIgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeTIkcHggPSBfdGhlbWUkdHlwb2dyYXBoeTIucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5MiRweC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5MiwgMjQpKSB8fCAnMS41cmVtJyxcbiAgICAgIGxhcmdlOiAoKF90aGVtZSR0eXBvZ3JhcGh5MyA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5MyRweCA9IF90aGVtZSR0eXBvZ3JhcGh5My5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkzJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkzLCAzNSkpIHx8ICcyLjE4NzVyZW0nXG4gICAgfVtvd25lclN0YXRlLmZvbnRTaXplXSxcbiAgICAvLyBUT0RPIHY1IGRlcHJlY2F0ZSwgdjYgcmVtb3ZlIGZvciBzeFxuICAgIGNvbG9yOiAoX3BhbGV0dGUkb3duZXJTdGF0ZSRjID0gKF9wYWxldHRlID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlID0gX3BhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZS5tYWluKSAhPSBudWxsID8gX3BhbGV0dGUkb3duZXJTdGF0ZSRjIDoge1xuICAgICAgYWN0aW9uOiAoX3BhbGV0dGUyID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlMiA9IF9wYWxldHRlMi5hY3Rpb24pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZTIuYWN0aXZlLFxuICAgICAgZGlzYWJsZWQ6IChfcGFsZXR0ZTMgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUzID0gX3BhbGV0dGUzLmFjdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlMy5kaXNhYmxlZCxcbiAgICAgIGluaGVyaXQ6IHVuZGVmaW5lZFxuICAgIH1bb3duZXJTdGF0ZS5jb2xvcl1cbiAgfTtcbn0pO1xuY29uc3QgU3ZnSWNvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFN2Z0ljb24oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVN2Z0ljb24nXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ2luaGVyaXQnLFxuICAgICAgY29tcG9uZW50ID0gJ3N2ZycsXG4gICAgICBmb250U2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgaHRtbENvbG9yLFxuICAgICAgaW5oZXJpdFZpZXdCb3ggPSBmYWxzZSxcbiAgICAgIHRpdGxlQWNjZXNzLFxuICAgICAgdmlld0JveCA9ICcwIDAgMjQgMjQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGhhc1N2Z0FzQ2hpbGQgPSAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNoaWxkcmVuLnR5cGUgPT09ICdzdmcnO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgY29tcG9uZW50LFxuICAgIGZvbnRTaXplLFxuICAgIGluc3RhbmNlRm9udFNpemU6IGluUHJvcHMuZm9udFNpemUsXG4gICAgaW5oZXJpdFZpZXdCb3gsXG4gICAgdmlld0JveCxcbiAgICBoYXNTdmdBc0NoaWxkXG4gIH0pO1xuICBjb25zdCBtb3JlID0ge307XG4gIGlmICghaW5oZXJpdFZpZXdCb3gpIHtcbiAgICBtb3JlLnZpZXdCb3ggPSB2aWV3Qm94O1xuICB9XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhTdmdJY29uUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBmb2N1c2FibGU6IFwiZmFsc2VcIixcbiAgICBjb2xvcjogaHRtbENvbG9yLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogdGl0bGVBY2Nlc3MgPyB1bmRlZmluZWQgOiB0cnVlLFxuICAgIHJvbGU6IHRpdGxlQWNjZXNzID8gJ2ltZycgOiB1bmRlZmluZWQsXG4gICAgcmVmOiByZWZcbiAgfSwgbW9yZSwgb3RoZXIsIGhhc1N2Z0FzQ2hpbGQgJiYgY2hpbGRyZW4ucHJvcHMsIHtcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBbaGFzU3ZnQXNDaGlsZCA/IGNoaWxkcmVuLnByb3BzLmNoaWxkcmVuIDogY2hpbGRyZW4sIHRpdGxlQWNjZXNzID8gLyojX19QVVJFX18qL19qc3goXCJ0aXRsZVwiLCB7XG4gICAgICBjaGlsZHJlbjogdGl0bGVBY2Nlc3NcbiAgICB9KSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3ZnSWNvbi5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBOb2RlIHBhc3NlZCBpbnRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgYGh0bWxDb2xvcmAgcHJvcCB0byBhcHBseSBhIGNvbG9yIGF0dHJpYnV0ZSB0byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdhY3Rpb24nLCAnZGlzYWJsZWQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGZvbnRTaXplIGFwcGxpZWQgdG8gdGhlIGljb24uIERlZmF1bHRzIHRvIDI0cHgsIGJ1dCBjYW4gYmUgY29uZmlndXJlIHRvIGluaGVyaXQgZm9udCBzaXplLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgZm9udFNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdsYXJnZScsICdtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKi9cbiAgaHRtbENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcm9vdCBub2RlIHdpbGwgaW5oZXJpdCB0aGUgY3VzdG9tIGBjb21wb25lbnRgJ3Mgdmlld0JveCBhbmQgdGhlIGB2aWV3Qm94YFxuICAgKiBwcm9wIHdpbGwgYmUgaWdub3JlZC5cbiAgICogVXNlZnVsIHdoZW4geW91IHdhbnQgdG8gcmVmZXJlbmNlIGEgY3VzdG9tIGBjb21wb25lbnRgIGFuZCBoYXZlIGBTdmdJY29uYCBwYXNzIHRoYXRcbiAgICogYGNvbXBvbmVudGAncyB2aWV3Qm94IHRvIHRoZSByb290IG5vZGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbmhlcml0Vmlld0JveDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2hhcGUtcmVuZGVyaW5nIGF0dHJpYnV0ZS4gVGhlIGJlaGF2aW9yIG9mIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyBpcyBkZXNjcmliZWQgb24gdGhlXG4gICAqIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvc2hhcGUtcmVuZGVyaW5nKS5cbiAgICogSWYgeW91IGFyZSBoYXZpbmcgaXNzdWVzIHdpdGggYmx1cnJ5IGljb25zIHlvdSBzaG91bGQgaW52ZXN0aWdhdGUgdGhpcyBwcm9wLlxuICAgKi9cbiAgc2hhcGVSZW5kZXJpbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhIGh1bWFuLXJlYWRhYmxlIHRpdGxlIGZvciB0aGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIGl0LlxuICAgKiBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHLWFjY2Vzcy8jRXF1aXZhbGVudFxuICAgKi9cbiAgdGl0bGVBY2Nlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBBbGxvd3MgeW91IHRvIHJlZGVmaW5lIHdoYXQgdGhlIGNvb3JkaW5hdGVzIHdpdGhvdXQgdW5pdHMgbWVhbiBpbnNpZGUgYW4gU1ZHIGVsZW1lbnQuXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGUgU1ZHIGVsZW1lbnQgaXMgNTAwICh3aWR0aCkgYnkgMjAwIChoZWlnaHQpLFxuICAgKiBhbmQgeW91IHBhc3Mgdmlld0JveD1cIjAgMCA1MCAyMFwiLFxuICAgKiB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvb3JkaW5hdGVzIGluc2lkZSB0aGUgU1ZHIHdpbGwgZ28gZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyICgwLDApXG4gICAqIHRvIGJvdHRvbSByaWdodCAoNTAsMjApIGFuZCBlYWNoIHVuaXQgd2lsbCBiZSB3b3J0aCAxMHB4LlxuICAgKiBAZGVmYXVsdCAnMCAwIDI0IDI0J1xuICAgKi9cbiAgdmlld0JveDogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcblN2Z0ljb24ubXVpTmFtZSA9ICdTdmdJY29uJztcbmV4cG9ydCBkZWZhdWx0IFN2Z0ljb247IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU3ZnSWNvbicsIHNsb3QpO1xufVxuY29uc3Qgc3ZnSWNvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTdmdJY29uJywgWydyb290JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvckFjdGlvbicsICdjb2xvckVycm9yJywgJ2NvbG9yRGlzYWJsZWQnLCAnZm9udFNpemVJbmhlcml0JywgJ2ZvbnRTaXplU21hbGwnLCAnZm9udFNpemVNZWRpdW0nLCAnZm9udFNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IHN2Z0ljb25DbGFzc2VzOyIsICJpbXBvcnQgaXNNdWlFbGVtZW50IGZyb20gJ0BtdWkvdXRpbHMvaXNNdWlFbGVtZW50JztcbmV4cG9ydCBkZWZhdWx0IGlzTXVpRWxlbWVudDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlSWQgZnJvbSAnQG11aS91dGlscy91c2VJZCc7XG5leHBvcnQgZGVmYXVsdCB1c2VJZDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICdAbXVpL3V0aWxzL3VzZUNvbnRyb2xsZWQnO1xuZXhwb3J0IGRlZmF1bHQgdXNlQ29udHJvbGxlZDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAbXVpL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2snO1xuZXhwb3J0IGRlZmF1bHQgdXNlRXZlbnRDYWxsYmFjazsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICdAbXVpL3V0aWxzL3VzZUZvcmtSZWYnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ya1JlZjsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnQG11aS91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5leHBvcnQgZGVmYXVsdCB1c2VJc0ZvY3VzVmlzaWJsZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsICJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTsiLCAiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRNYXBwaW5nLCBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nLCBnZXROZXh0Q2hpbGRNYXBwaW5nIH0gZnJvbSAnLi91dGlscy9DaGlsZE1hcHBpbmcnO1xuXG52YXIgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBvYmpba107XG4gIH0pO1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29tcG9uZW50OiAnZGl2JyxcbiAgY2hpbGRGYWN0b3J5OiBmdW5jdGlvbiBjaGlsZEZhY3RvcnkoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn07XG4vKipcbiAqIFRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIGNvbXBvbmVudCBtYW5hZ2VzIGEgc2V0IG9mIHRyYW5zaXRpb24gY29tcG9uZW50c1xuICogKGA8VHJhbnNpdGlvbj5gIGFuZCBgPENTU1RyYW5zaXRpb24+YCkgaW4gYSBsaXN0LiBMaWtlIHdpdGggdGhlIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudHMsIGA8VHJhbnNpdGlvbkdyb3VwPmAgaXMgYSBzdGF0ZSBtYWNoaW5lIGZvciBtYW5hZ2luZyB0aGUgbW91bnRpbmdcbiAqIGFuZCB1bm1vdW50aW5nIG9mIGNvbXBvbmVudHMgb3ZlciB0aW1lLlxuICpcbiAqIENvbnNpZGVyIHRoZSBleGFtcGxlIGJlbG93LiBBcyBpdGVtcyBhcmUgcmVtb3ZlZCBvciBhZGRlZCB0byB0aGUgVG9kb0xpc3QgdGhlXG4gKiBgaW5gIHByb3AgaXMgdG9nZ2xlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gLlxuICpcbiAqIE5vdGUgdGhhdCBgPFRyYW5zaXRpb25Hcm91cD5gICBkb2VzIG5vdCBkZWZpbmUgYW55IGFuaW1hdGlvbiBiZWhhdmlvciFcbiAqIEV4YWN0bHkgX2hvd18gYSBsaXN0IGl0ZW0gYW5pbWF0ZXMgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWwgdHJhbnNpdGlvblxuICogY29tcG9uZW50LiBUaGlzIG1lYW5zIHlvdSBjYW4gbWl4IGFuZCBtYXRjaCBhbmltYXRpb25zIGFjcm9zcyBkaWZmZXJlbnQgbGlzdFxuICogaXRlbXMuXG4gKi9cblxudmFyIFRyYW5zaXRpb25Hcm91cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uR3JvdXAsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25Hcm91cChwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuXG4gICAgdmFyIGhhbmRsZUV4aXRlZCA9IF90aGlzLmhhbmRsZUV4aXRlZC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTsgLy8gSW5pdGlhbCBjaGlsZHJlbiBzaG91bGQgYWxsIGJlIGVudGVyaW5nLCBkZXBlbmRlbnQgb24gYXBwZWFyXG5cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IHRydWVcbiAgICAgIH0sXG4gICAgICBoYW5kbGVFeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICAgIGZpcnN0UmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gIH07XG5cbiAgVHJhbnNpdGlvbkdyb3VwLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIF9yZWYpIHtcbiAgICB2YXIgcHJldkNoaWxkTWFwcGluZyA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgIGhhbmRsZUV4aXRlZCA9IF9yZWYuaGFuZGxlRXhpdGVkLFxuICAgICAgICBmaXJzdFJlbmRlciA9IF9yZWYuZmlyc3RSZW5kZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuOiBmaXJzdFJlbmRlciA/IGdldEluaXRpYWxDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBoYW5kbGVFeGl0ZWQpIDogZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIGhhbmRsZUV4aXRlZCksXG4gICAgICBmaXJzdFJlbmRlcjogZmFsc2VcbiAgICB9O1xuICB9IC8vIG5vZGUgaXMgYHVuZGVmaW5lZGAgd2hlbiB1c2VyIHByb3ZpZGVkIGBub2RlUmVmYCBwcm9wXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gaGFuZGxlRXhpdGVkKGNoaWxkLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkLmtleSBpbiBjdXJyZW50Q2hpbGRNYXBwaW5nKSByZXR1cm47XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uRXhpdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IF9leHRlbmRzKHt9LCBzdGF0ZS5jaGlsZHJlbik7XG5cbiAgICAgICAgZGVsZXRlIGNoaWxkcmVuW2NoaWxkLmtleV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBDb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkRmFjdG9yeSA9IF90aGlzJHByb3BzLmNoaWxkRmFjdG9yeSxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY29tcG9uZW50XCIsIFwiY2hpbGRGYWN0b3J5XCJdKTtcblxuICAgIHZhciBjb250ZXh0VmFsdWUgPSB0aGlzLnN0YXRlLmNvbnRleHRWYWx1ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2YWx1ZXModGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKGNoaWxkRmFjdG9yeSk7XG4gICAgZGVsZXRlIHByb3BzLmFwcGVhcjtcbiAgICBkZWxldGUgcHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLmV4aXQ7XG5cbiAgICBpZiAoQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBgPFRyYW5zaXRpb25Hcm91cD5gIHJlbmRlcnMgYSBgPGRpdj5gIGJ5IGRlZmF1bHQuIFlvdSBjYW4gY2hhbmdlIHRoaXNcbiAgICogYmVoYXZpb3IgYnkgcHJvdmlkaW5nIGEgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogSWYgeW91IHVzZSBSZWFjdCB2MTYrIGFuZCB3b3VsZCBsaWtlIHRvIGF2b2lkIGEgd3JhcHBpbmcgYDxkaXY+YCBlbGVtZW50XG4gICAqIHlvdSBjYW4gcGFzcyBpbiBgY29tcG9uZW50PXtudWxsfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB3cmFwcGluZyBkaXZcbiAgICogYm9ya3MgeW91ciBjc3Mgc3R5bGVzLlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBgPFRyYW5zaXRpb24+YCBjb21wb25lbnRzLCB0aGF0IGFyZSB0b2dnbGVkIGBpbmAgYW5kIG91dCBhcyB0aGV5XG4gICAqIGxlYXZlLiB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YCB3aWxsIGluamVjdCBzcGVjaWZpYyB0cmFuc2l0aW9uIHByb3BzLCBzb1xuICAgKiByZW1lbWJlciB0byBzcHJlYWQgdGhlbSB0aHJvdWdoIGlmIHlvdSBhcmUgd3JhcHBpbmcgdGhlIGA8VHJhbnNpdGlvbj5gIGFzXG4gICAqIHdpdGggb3VyIGA8RmFkZT5gIGV4YW1wbGUuXG4gICAqXG4gICAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGlzIG1lYW50IGZvciBtdWx0aXBsZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gXG4gICAqIGNoaWxkcmVuLCBzb21ldGltZXMgeW91IG1heSB3YW50IHRvIGhhdmUgYSBzaW5nbGUgdHJhbnNpdGlvbiBjaGlsZCB3aXRoXG4gICAqIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmFuc2l0aW9uZWQgb3V0IGFuZCBpbiB3aGVuIHlvdSBjaGFuZ2UgaXRcbiAgICogKGUuZy4gcm91dGVzLCBpbWFnZXMgZXRjLikgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2hhbmdlIHRoZSBga2V5YCBwcm9wIG9mXG4gICAqIHRoZSB0cmFuc2l0aW9uIGNoaWxkIGFzIHlvdSBjaGFuZ2UgaXRzIGNvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZVxuICAgKiBgVHJhbnNpdGlvbkdyb3VwYCB0byB0cmFuc2l0aW9uIHRoZSBjaGlsZCBvdXQgYW5kIGJhY2sgaW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYXBwZWFyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50ZXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGV4aXQgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFlvdSBtYXkgbmVlZCB0byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgZXhpdGluZy5cbiAgICogVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSBieSB1c2luZyBgY2xvbmVFbGVtZW50YCBob3dldmVyIGluIHRoZSBjYXNlIG9mIGFuIGV4aXRpbmdcbiAgICogY2hpbGQgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCBub3QgYWNjZXNzaWJsZSB0byB0aGUgY29uc3VtZXIuXG4gICAqXG4gICAqIElmIHlvdSBkbyBuZWVkIHRvIHVwZGF0ZSBhIGNoaWxkIGFzIGl0IGxlYXZlcyB5b3UgY2FuIHByb3ZpZGUgYSBgY2hpbGRGYWN0b3J5YFxuICAgKiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIGxlYXZpbmcuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKGNoaWxkOiBSZWFjdEVsZW1lbnQpIC0+IFJlYWN0RWxlbWVudFxuICAgKi9cbiAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9O1xuVHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25Hcm91cDsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59IiwgImltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuXG4gKlxuICogQHBhcmFtIHsqfSBjaGlsZHJlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmBcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwcGluZyBvZiBrZXkgdG8gY2hpbGRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRNYXBwaW5nKGNoaWxkcmVuLCBtYXBGbikge1xuICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gbWFwcGVyKGNoaWxkKSB7XG4gICAgcmV0dXJuIG1hcEZuICYmIGlzVmFsaWRFbGVtZW50KGNoaWxkKSA/IG1hcEZuKGNoaWxkKSA6IGNoaWxkO1xuICB9O1xuXG4gIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoY2hpbGRyZW4pIENoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAvLyBydW4gdGhlIG1hcCBmdW5jdGlvbiBoZXJlIGluc3RlYWQgc28gdGhhdCB0aGUga2V5IGlzIHRoZSBjb21wdXRlZCBvbmVcbiAgICByZXN1bHRbY2hpbGQua2V5XSA9IG1hcHBlcihjaGlsZCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBXaGVuIHlvdSdyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgY2hpbGRyZW4gc29tZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0aGVcbiAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseVxuICogYW5pbWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMgc2V0IG9mIGtleXNcbiAqIGFuZCBhIG5ldyBzZXQgb2Yga2V5cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBpdHMgYmVzdCBndWVzcyBvZiB0aGUgY29ycmVjdFxuICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW5cbiAqIFJlYWN0TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRvZXMgbm90XG4gKiBkaXJlY3RseSBoYXZlIHRoaXMgY29uY2VwdCBvZiB0aGUgdW5pb24gb2YgcHJldkNoaWxkcmVuIGFuZCBuZXh0Q2hpbGRyZW5cbiAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2IHByZXYgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzXG4gKiBpbiBgbmV4dGAgaW4gYSByZWFzb25hYmxlIG9yZGVyLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoaWxkTWFwcGluZ3MocHJldiwgbmV4dCkge1xuICBwcmV2ID0gcHJldiB8fCB7fTtcbiAgbmV4dCA9IG5leHQgfHwge307XG5cbiAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBuZXh0ID8gbmV4dFtrZXldIDogcHJldltrZXldO1xuICB9IC8vIEZvciBlYWNoIGtleSBvZiBgbmV4dGAsIHRoZSBsaXN0IG9mIGtleXMgdG8gaW5zZXJ0IGJlZm9yZSB0aGF0IGtleSBpblxuICAvLyB0aGUgY29tYmluZWQgbGlzdFxuXG5cbiAgdmFyIG5leHRLZXlzUGVuZGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBwZW5kaW5nS2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikge1xuICAgIGlmIChwcmV2S2V5IGluIG5leHQpIHtcbiAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dEtleXNQZW5kaW5nW3ByZXZLZXldID0gcGVuZGluZ0tleXM7XG4gICAgICAgIHBlbmRpbmdLZXlzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGk7XG4gIHZhciBjaGlsZE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHtcbiAgICBpZiAobmV4dEtleXNQZW5kaW5nW25leHRLZXldKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5kaW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTtcbiAgICAgICAgY2hpbGRNYXBwaW5nW25leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nTmV4dEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGRNYXBwaW5nW25leHRLZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7XG4gIH0gLy8gRmluYWxseSwgYWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3JlIGFueSBrZXkgaW4gYG5leHRgXG5cblxuICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjaGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ0tleXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkTWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcChjaGlsZCwgcHJvcCwgcHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzW3Byb3BdICE9IG51bGwgPyBwcm9wc1twcm9wXSA6IGNoaWxkLnByb3BzW3Byb3BdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhwcm9wcywgb25FeGl0ZWQpIHtcbiAgcmV0dXJuIGdldENoaWxkTWFwcGluZyhwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgaW46IHRydWUsXG4gICAgICBhcHBlYXI6IGdldFByb3AoY2hpbGQsICdhcHBlYXInLCBwcm9wcyksXG4gICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgcHJvcHMpLFxuICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBwcm9wcylcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIG9uRXhpdGVkKSB7XG4gIHZhciBuZXh0Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcy5jaGlsZHJlbik7XG4gIHZhciBjaGlsZHJlbiA9IG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2Q2hpbGRNYXBwaW5nLCBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2tleV07XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHJldHVybjtcbiAgICB2YXIgaGFzUHJldiA9IChrZXkgaW4gcHJldkNoaWxkTWFwcGluZyk7XG4gICAgdmFyIGhhc05leHQgPSAoa2V5IGluIG5leHRDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWN0aW9uXCIsIFwiY2VudGVyUmlwcGxlXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVSaXBwbGVcIiwgXCJkaXNhYmxlVG91Y2hSaXBwbGVcIiwgXCJmb2N1c1JpcHBsZVwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcIkxpbmtDb21wb25lbnRcIiwgXCJvbkJsdXJcIiwgXCJvbkNsaWNrXCIsIFwib25Db250ZXh0TWVudVwiLCBcIm9uRHJhZ0xlYXZlXCIsIFwib25Gb2N1c1wiLCBcIm9uRm9jdXNWaXNpYmxlXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcIm9uTW91c2VEb3duXCIsIFwib25Nb3VzZUxlYXZlXCIsIFwib25Nb3VzZVVwXCIsIFwib25Ub3VjaEVuZFwiLCBcIm9uVG91Y2hNb3ZlXCIsIFwib25Ub3VjaFN0YXJ0XCIsIFwidGFiSW5kZXhcIiwgXCJUb3VjaFJpcHBsZVByb3BzXCIsIFwidG91Y2hSaXBwbGVSZWZcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiBmcm9tICdAbXVpL3V0aWxzL2VsZW1lbnRUeXBlQWNjZXB0aW5nUmVmJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJy4uL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZUlzRm9jdXNWaXNpYmxlIGZyb20gJy4uL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlJztcbmltcG9ydCBUb3VjaFJpcHBsZSBmcm9tICcuL1RvdWNoUmlwcGxlJztcbmltcG9ydCBidXR0b25CYXNlQ2xhc3NlcywgeyBnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9idXR0b25CYXNlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVkLFxuICAgIGZvY3VzVmlzaWJsZSxcbiAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZm9jdXNWaXNpYmxlICYmICdmb2N1c1Zpc2libGUnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIGlmIChmb2N1c1Zpc2libGUgJiYgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lKSB7XG4gICAgY29tcG9zZWRDbGFzc2VzLnJvb3QgKz0gYCAke2ZvY3VzVmlzaWJsZUNsYXNzTmFtZX1gO1xuICB9XG4gIHJldHVybiBjb21wb3NlZENsYXNzZXM7XG59O1xuZXhwb3J0IGNvbnN0IEJ1dHRvbkJhc2VSb290ID0gc3R5bGVkKCdidXR0b24nLCB7XG4gIG5hbWU6ICdNdWlCdXR0b25CYXNlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgLy8gUmVzZXQgZGVmYXVsdCB2YWx1ZVxuICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICBvdXRsaW5lOiAwLFxuICBib3JkZXI6IDAsXG4gIG1hcmdpbjogMCxcbiAgLy8gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gU2FmYXJpXG4gIGJvcmRlclJhZGl1czogMCxcbiAgcGFkZGluZzogMCxcbiAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGluIEZpcmVmb3hcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAvLyBTbyB3ZSB0YWtlIHByZWNlZGVudCBvdmVyIHRoZSBzdHlsZSBvZiBhIG5hdGl2ZSA8YSAvPiBlbGVtZW50LlxuICBjb2xvcjogJ2luaGVyaXQnLFxuICAnJjo6LW1vei1mb2N1cy1pbm5lcic6IHtcbiAgICBib3JkZXJTdHlsZTogJ25vbmUnIC8vIFJlbW92ZSBGaXJlZm94IGRvdHRlZCBvdXRsaW5lLlxuICB9LFxuICBbYCYuJHtidXR0b25CYXNlQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAvLyBEaXNhYmxlIGxpbmsgaW50ZXJhY3Rpb25zXG4gICAgY3Vyc29yOiAnZGVmYXVsdCdcbiAgfSxcbiAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICBjb2xvckFkanVzdDogJ2V4YWN0J1xuICB9XG59KTtcblxuLyoqXG4gKiBgQnV0dG9uQmFzZWAgY29udGFpbnMgYXMgZmV3IHN0eWxlcyBhcyBwb3NzaWJsZS5cbiAqIEl0IGFpbXMgdG8gYmUgYSBzaW1wbGUgYnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgYnV0dG9uLlxuICogSXQgY29udGFpbnMgYSBsb2FkIG9mIHN0eWxlIHJlc2V0IGFuZCBzb21lIGZvY3VzL3JpcHBsZSBsb2dpYy5cbiAqL1xuY29uc3QgQnV0dG9uQmFzZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJ1dHRvbkJhc2UoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUJ1dHRvbkJhc2UnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhY3Rpb24sXG4gICAgICBjZW50ZXJSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2J1dHRvbicsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVJpcHBsZSA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVRvdWNoUmlwcGxlID0gZmFsc2UsXG4gICAgICBmb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgTGlua0NvbXBvbmVudCA9ICdhJyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbkNvbnRleHRNZW51LFxuICAgICAgb25EcmFnTGVhdmUsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25Gb2N1c1Zpc2libGUsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgb25Nb3VzZURvd24sXG4gICAgICBvbk1vdXNlTGVhdmUsXG4gICAgICBvbk1vdXNlVXAsXG4gICAgICBvblRvdWNoRW5kLFxuICAgICAgb25Ub3VjaE1vdmUsXG4gICAgICBvblRvdWNoU3RhcnQsXG4gICAgICB0YWJJbmRleCA9IDAsXG4gICAgICBUb3VjaFJpcHBsZVByb3BzLFxuICAgICAgdG91Y2hSaXBwbGVSZWYsXG4gICAgICB0eXBlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGJ1dHRvblJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmlwcGxlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSaXBwbGVSZWYgPSB1c2VGb3JrUmVmKHJpcHBsZVJlZiwgdG91Y2hSaXBwbGVSZWYpO1xuICBjb25zdCB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgcmVmOiBmb2N1c1Zpc2libGVSZWZcbiAgfSA9IHVzZUlzRm9jdXNWaXNpYmxlKCk7XG4gIGNvbnN0IFtmb2N1c1Zpc2libGUsIHNldEZvY3VzVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c1Zpc2libGUpIHtcbiAgICBzZXRGb2N1c1Zpc2libGUoZmFsc2UpO1xuICB9XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoYWN0aW9uLCAoKSA9PiAoe1xuICAgIGZvY3VzVmlzaWJsZTogKCkgPT4ge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKHRydWUpO1xuICAgICAgYnV0dG9uUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0pLCBbXSk7XG4gIGNvbnN0IFttb3VudGVkU3RhdGUsIHNldE1vdW50ZWRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TW91bnRlZFN0YXRlKHRydWUpO1xuICB9LCBbXSk7XG4gIGNvbnN0IGVuYWJsZVRvdWNoUmlwcGxlID0gbW91bnRlZFN0YXRlICYmICFkaXNhYmxlUmlwcGxlICYmICFkaXNhYmxlZDtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNWaXNpYmxlICYmIGZvY3VzUmlwcGxlICYmICFkaXNhYmxlUmlwcGxlICYmIG1vdW50ZWRTdGF0ZSkge1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZSgpO1xuICAgIH1cbiAgfSwgW2Rpc2FibGVSaXBwbGUsIGZvY3VzUmlwcGxlLCBmb2N1c1Zpc2libGUsIG1vdW50ZWRTdGF0ZV0pO1xuICBmdW5jdGlvbiB1c2VSaXBwbGVIYW5kbGVyKHJpcHBsZUFjdGlvbiwgZXZlbnRDYWxsYmFjaywgc2tpcFJpcHBsZUFjdGlvbiA9IGRpc2FibGVUb3VjaFJpcHBsZSkge1xuICAgIHJldHVybiB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudENhbGxiYWNrKSB7XG4gICAgICAgIGV2ZW50Q2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3QgaWdub3JlID0gc2tpcFJpcHBsZUFjdGlvbjtcbiAgICAgIGlmICghaWdub3JlICYmIHJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50W3JpcHBsZUFjdGlvbl0oZXZlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gdXNlUmlwcGxlSGFuZGxlcignc3RhcnQnLCBvbk1vdXNlRG93bik7XG4gIGNvbnN0IGhhbmRsZUNvbnRleHRNZW51ID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uQ29udGV4dE1lbnUpO1xuICBjb25zdCBoYW5kbGVEcmFnTGVhdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25EcmFnTGVhdmUpO1xuICBjb25zdCBoYW5kbGVNb3VzZVVwID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uTW91c2VVcCk7XG4gIGNvbnN0IGhhbmRsZU1vdXNlTGVhdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgZXZlbnQgPT4ge1xuICAgIGlmIChmb2N1c1Zpc2libGUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChvbk1vdXNlTGVhdmUpIHtcbiAgICAgIG9uTW91c2VMZWF2ZShldmVudCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hTdGFydCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hFbmQgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Ub3VjaEVuZCk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvblRvdWNoTW92ZSk7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgZXZlbnQgPT4ge1xuICAgIGhhbmRsZUJsdXJWaXNpYmxlKGV2ZW50KTtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gICAgfVxuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9LCBmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gRml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzc3NjlcbiAgICBpZiAoIWJ1dHRvblJlZi5jdXJyZW50KSB7XG4gICAgICBidXR0b25SZWYuY3VycmVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgfVxuICAgIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICAgIGlmIChvbkZvY3VzVmlzaWJsZSkge1xuICAgICAgICBvbkZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBpc05vbk5hdGl2ZUJ1dHRvbiA9ICgpID0+IHtcbiAgICBjb25zdCBidXR0b24gPSBidXR0b25SZWYuY3VycmVudDtcbiAgICByZXR1cm4gY29tcG9uZW50ICYmIGNvbXBvbmVudCAhPT0gJ2J1dHRvbicgJiYgIShidXR0b24udGFnTmFtZSA9PT0gJ0EnICYmIGJ1dHRvbi5ocmVmKTtcbiAgfTtcblxuICAvKipcbiAgICogSUUxMSBzaGltIGZvciBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9yZXBlYXRcbiAgICovXG4gIGNvbnN0IGtleWRvd25SZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gQ2hlY2sgaWYga2V5IGlzIGFscmVhZHkgZG93biB0byBhdm9pZCByZXBlYXRzIGJlaW5nIGNvdW50ZWQgYXMgbXVsdGlwbGUgYWN0aXZhdGlvbnNcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgIWtleWRvd25SZWYuY3VycmVudCAmJiBmb2N1c1Zpc2libGUgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGtleWRvd25SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5zdG9wKGV2ZW50LCAoKSA9PiB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0YXJ0KGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfVxuXG4gICAgLy8gS2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSBmb3Igbm9uIGludGVyYWN0aXZlIGVsZW1lbnRzXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAob25DbGljaykge1xuICAgICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIGNhbGxpbmcgcHJldmVudERlZmF1bHQgaW4ga2V5VXAgb24gYSA8YnV0dG9uPiB3aWxsIG5vdCBkaXNwYXRjaCBhIGNsaWNrIGV2ZW50IGlmIFNwYWNlIGlzIHByZXNzZWRcbiAgICAvLyBodHRwczovL2NvZGVzYW5kYm94LmlvL3Avc2FuZGJveC9idXR0b24ta2V5dXAtcHJldmVudGRlZmF1bHQtZG43ZjBcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgZXZlbnQua2V5ID09PSAnICcgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZShldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG9uS2V5VXApIHtcbiAgICAgIG9uS2V5VXAoZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgIGlmIChvbkNsaWNrICYmIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJyAnICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBsZXQgQ29tcG9uZW50UHJvcCA9IGNvbXBvbmVudDtcbiAgaWYgKENvbXBvbmVudFByb3AgPT09ICdidXR0b24nICYmIChvdGhlci5ocmVmIHx8IG90aGVyLnRvKSkge1xuICAgIENvbXBvbmVudFByb3AgPSBMaW5rQ29tcG9uZW50O1xuICB9XG4gIGNvbnN0IGJ1dHRvblByb3BzID0ge307XG4gIGlmIChDb21wb25lbnRQcm9wID09PSAnYnV0dG9uJykge1xuICAgIGJ1dHRvblByb3BzLnR5cGUgPSB0eXBlID09PSB1bmRlZmluZWQgPyAnYnV0dG9uJyA6IHR5cGU7XG4gICAgYnV0dG9uUHJvcHMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIW90aGVyLmhyZWYgJiYgIW90aGVyLnRvKSB7XG4gICAgICBidXR0b25Qcm9wcy5yb2xlID0gJ2J1dHRvbic7XG4gICAgfVxuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgYnV0dG9uUHJvcHNbJ2FyaWEtZGlzYWJsZWQnXSA9IGRpc2FibGVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgZm9jdXNWaXNpYmxlUmVmLCBidXR0b25SZWYpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoZW5hYmxlVG91Y2hSaXBwbGUgJiYgIXJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBgY29tcG9uZW50YCBwcm9wIHByb3ZpZGVkIHRvIEJ1dHRvbkJhc2UgaXMgaW52YWxpZC4nLCAnUGxlYXNlIG1ha2Ugc3VyZSB0aGUgY2hpbGRyZW4gcHJvcCBpcyByZW5kZXJlZCBpbiB0aGlzIGN1c3RvbSBjb21wb25lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtlbmFibGVUb3VjaFJpcHBsZV0pO1xuICB9XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjZW50ZXJSaXBwbGUsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVSaXBwbGUsXG4gICAgZGlzYWJsZVRvdWNoUmlwcGxlLFxuICAgIGZvY3VzUmlwcGxlLFxuICAgIHRhYkluZGV4LFxuICAgIGZvY3VzVmlzaWJsZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEJ1dHRvbkJhc2VSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudFByb3AsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uQ29udGV4dE1lbnU6IGhhbmRsZUNvbnRleHRNZW51LFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICBvbktleVVwOiBoYW5kbGVLZXlVcCxcbiAgICBvbk1vdXNlRG93bjogaGFuZGxlTW91c2VEb3duLFxuICAgIG9uTW91c2VMZWF2ZTogaGFuZGxlTW91c2VMZWF2ZSxcbiAgICBvbk1vdXNlVXA6IGhhbmRsZU1vdXNlVXAsXG4gICAgb25EcmFnTGVhdmU6IGhhbmRsZURyYWdMZWF2ZSxcbiAgICBvblRvdWNoRW5kOiBoYW5kbGVUb3VjaEVuZCxcbiAgICBvblRvdWNoTW92ZTogaGFuZGxlVG91Y2hNb3ZlLFxuICAgIG9uVG91Y2hTdGFydDogaGFuZGxlVG91Y2hTdGFydCxcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IHRhYkluZGV4LFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgYnV0dG9uUHJvcHMsIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgZW5hYmxlVG91Y2hSaXBwbGUgP1xuICAgIC8qI19fUFVSRV9fKi9cbiAgICAvKiBUb3VjaFJpcHBsZSBpcyBvbmx5IG5lZWRlZCBjbGllbnQtc2lkZSwgeDIgYm9vc3Qgb24gdGhlIHNlcnZlci4gKi9cbiAgICBfanN4KFRvdWNoUmlwcGxlLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IGhhbmRsZVJpcHBsZVJlZixcbiAgICAgIGNlbnRlcjogY2VudGVyUmlwcGxlXG4gICAgfSwgVG91Y2hSaXBwbGVQcm9wcykpIDogbnVsbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCdXR0b25CYXNlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIEEgcmVmIGZvciBpbXBlcmF0aXZlIGFjdGlvbnMuXG4gICAqIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGBmb2N1c1Zpc2libGUoKWAgYWN0aW9uLlxuICAgKi9cbiAgYWN0aW9uOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlcyBhcmUgY2VudGVyZWQuXG4gICAqIFRoZXkgd29uJ3Qgc3RhcnQgYXQgdGhlIGN1cnNvciBpbnRlcmFjdGlvbiBwb3NpdGlvbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNlbnRlclJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBcdTI2QTBcdUZFMEYgV2l0aG91dCBhIHJpcHBsZSB0aGVyZSBpcyBubyBzdHlsaW5nIGZvciA6Zm9jdXMtdmlzaWJsZSBieSBkZWZhdWx0LiBCZSBzdXJlXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgZWxlbWVudCBieSBhcHBseWluZyBzZXBhcmF0ZSBzdHlsZXMgd2l0aCB0aGUgYC5NdWktZm9jdXNWaXNpYmxlYCBjbGFzcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdG91Y2ggcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUb3VjaFJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYXNlIGJ1dHRvbiB3aWxsIGhhdmUgYSBrZXlib2FyZCBmb2N1cyByaXBwbGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgY2FuIGhlbHAgaWRlbnRpZnkgd2hpY2ggZWxlbWVudCBoYXMga2V5Ym9hcmQgZm9jdXMuXG4gICAqIFRoZSBjbGFzcyBuYW1lIHdpbGwgYmUgYXBwbGllZCB3aGVuIHRoZSBlbGVtZW50IGdhaW5zIHRoZSBmb2N1cyB0aHJvdWdoIGtleWJvYXJkIGludGVyYWN0aW9uLlxuICAgKiBJdCdzIGEgcG9seWZpbGwgZm9yIHRoZSBbQ1NTIDpmb2N1cy12aXNpYmxlIHNlbGVjdG9yXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvc2VsZWN0b3JzLTQvI3RoZS1mb2N1cy12aXNpYmxlLXBzZXVkbykuXG4gICAqIFRoZSByYXRpb25hbGUgZm9yIHVzaW5nIHRoaXMgZmVhdHVyZSBbaXMgZXhwbGFpbmVkIGhlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUvYmxvYi9IRUFEL2V4cGxhaW5lci5tZCkuXG4gICAqIEEgW3BvbHlmaWxsIGNhbiBiZSB1c2VkXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlKSB0byBhcHBseSBhIGBmb2N1cy12aXNpYmxlYCBjbGFzcyB0byBvdGhlciBjb21wb25lbnRzXG4gICAqIGlmIG5lZWRlZC5cbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGhyZWY6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLmFueSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCB0byByZW5kZXIgYSBsaW5rIHdoZW4gdGhlIGBocmVmYCBwcm9wIGlzIHByb3ZpZGVkLlxuICAgKiBAZGVmYXVsdCAnYSdcbiAgICovXG4gIExpbmtDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ29udGV4dE1lbnU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25EcmFnTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZm9jdXNlZCB3aXRoIGEga2V5Ym9hcmQuXG4gICAqIFdlIHRyaWdnZXIgYSBgb25Gb2N1c2AgY2FsbGJhY2sgdG9vLlxuICAgKi9cbiAgb25Gb2N1c1Zpc2libGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZUxlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoRW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hNb3ZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGBUb3VjaFJpcHBsZWAgZWxlbWVudC5cbiAgICovXG4gIFRvdWNoUmlwcGxlUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBBIHJlZiB0aGF0IHBvaW50cyB0byB0aGUgYFRvdWNoUmlwcGxlYCBlbGVtZW50LlxuICAgKi9cbiAgdG91Y2hSaXBwbGVSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBwdWxzYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc3RhcnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBzdG9wOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSlcbiAgfSldKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2J1dHRvbicsICdyZXNldCcsICdzdWJtaXQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhc2U7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNlbnRlclwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIl07XG5sZXQgXyA9IHQgPT4gdCxcbiAgX3QsXG4gIF90MixcbiAgX3QzLFxuICBfdDQ7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbkdyb3VwIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCB1c2VUaW1lb3V0IGZyb20gJ0BtdWkvdXRpbHMvdXNlVGltZW91dCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IFJpcHBsZSBmcm9tICcuL1JpcHBsZSc7XG5pbXBvcnQgdG91Y2hSaXBwbGVDbGFzc2VzIGZyb20gJy4vdG91Y2hSaXBwbGVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBEVVJBVElPTiA9IDU1MDtcbmV4cG9ydCBjb25zdCBERUxBWV9SSVBQTEUgPSA4MDtcbmNvbnN0IGVudGVyS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QgfHwgKF90ID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG4gICAgb3BhY2l0eTogMC4xO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAwLjM7XG4gIH1cbmApKTtcbmNvbnN0IGV4aXRLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDIgfHwgKF90MiA9IF9gXG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuYCkpO1xuY29uc3QgcHVsc2F0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90MyB8fCAoX3QzID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cblxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Mik7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5gKSk7XG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnLFxuICBzbG90OiAnUm9vdCdcbn0pKHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHRvcDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgbGVmdDogMCxcbiAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbn0pO1xuXG4vLyBUaGlzIGBzdHlsZWQoKWAgZnVuY3Rpb24gaW52b2tlcyBrZXlmcmFtZXMuIGBzdHlsZWQtY29tcG9uZW50c2Agb25seSBzdXBwb3J0cyBrZXlmcmFtZXNcbi8vIGluIHN0cmluZyB0ZW1wbGF0ZXMuIERvIG5vdCBjb252ZXJ0IHRoZXNlIHN0eWxlcyBpbiBKUyBvYmplY3QgYXMgaXQgd2lsbCBicmVhay5cbmV4cG9ydCBjb25zdCBUb3VjaFJpcHBsZVJpcHBsZSA9IHN0eWxlZChSaXBwbGUsIHtcbiAgbmFtZTogJ011aVRvdWNoUmlwcGxlJyxcbiAgc2xvdDogJ1JpcHBsZSdcbn0pKF90NCB8fCAoX3Q0ID0gX2BcbiAgb3BhY2l0eTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuXG4gICYuJHswfSB7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgfVxuXG4gICYuJHswfSB7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8qIEBub2ZsaXAgKi9cbiAgICBsZWZ0OiAwcHg7XG4gICAgdG9wOiAwO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMjUwMG1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAyMDBtcztcbiAgfVxuYCksIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBlbnRlcktleWZyYW1lLCBEVVJBVElPTiwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlciwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRMZWF2aW5nLCBleGl0S2V5ZnJhbWUsIERVUkFUSU9OLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSwgcHVsc2F0ZUtleWZyYW1lLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqXG4gKiBUT0RPIHY1OiBNYWtlIHByaXZhdGVcbiAqL1xuY29uc3QgVG91Y2hSaXBwbGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUb3VjaFJpcHBsZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjZW50ZXI6IGNlbnRlclByb3AgPSBmYWxzZSxcbiAgICAgIGNsYXNzZXMgPSB7fSxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBbcmlwcGxlcywgc2V0UmlwcGxlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gIGNvbnN0IG5leHRLZXkgPSBSZWFjdC51c2VSZWYoMCk7XG4gIGNvbnN0IHJpcHBsZUNhbGxiYWNrID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyaXBwbGVDYWxsYmFjay5jdXJyZW50KSB7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50KCk7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtyaXBwbGVzXSk7XG5cbiAgLy8gVXNlZCB0byBmaWx0ZXIgb3V0IG1vdXNlIGVtdWxhdGVkIGV2ZW50cyBvbiBtb2JpbGUuXG4gIGNvbnN0IGlnbm9yaW5nTW91c2VEb3duID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgLy8gV2UgdXNlIGEgdGltZXIgaW4gb3JkZXIgdG8gb25seSBzaG93IHRoZSByaXBwbGVzIGZvciB0b3VjaCBcImNsaWNrXCIgbGlrZSBldmVudHMuXG4gIC8vIFdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB0aGUgcmlwcGxlIGZvciB0b3VjaCBzY3JvbGwgZXZlbnRzLlxuICBjb25zdCBzdGFydFRpbWVyID0gdXNlVGltZW91dCgpO1xuXG4gIC8vIFRoaXMgaXMgdGhlIGhvb2sgY2FsbGVkIG9uY2UgdGhlIHByZXZpb3VzIHRpbWVvdXQgaXMgcmVhZHkuXG4gIGNvbnN0IHN0YXJ0VGltZXJDb21taXQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNvbnRhaW5lciA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3Qgc3RhcnRDb21taXQgPSBSZWFjdC51c2VDYWxsYmFjayhwYXJhbXMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHB1bHNhdGUsXG4gICAgICByaXBwbGVYLFxuICAgICAgcmlwcGxlWSxcbiAgICAgIHJpcHBsZVNpemUsXG4gICAgICBjYlxuICAgIH0gPSBwYXJhbXM7XG4gICAgc2V0UmlwcGxlcyhvbGRSaXBwbGVzID0+IFsuLi5vbGRSaXBwbGVzLCAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJpcHBsZSwge1xuICAgICAgY2xhc3Nlczoge1xuICAgICAgICByaXBwbGU6IGNsc3goY2xhc3Nlcy5yaXBwbGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGUpLFxuICAgICAgICByaXBwbGVWaXNpYmxlOiBjbHN4KGNsYXNzZXMucmlwcGxlVmlzaWJsZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVZpc2libGUpLFxuICAgICAgICByaXBwbGVQdWxzYXRlOiBjbHN4KGNsYXNzZXMucmlwcGxlUHVsc2F0ZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVB1bHNhdGUpLFxuICAgICAgICBjaGlsZDogY2xzeChjbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGQpLFxuICAgICAgICBjaGlsZExlYXZpbmc6IGNsc3goY2xhc3Nlcy5jaGlsZExlYXZpbmcsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZExlYXZpbmcpLFxuICAgICAgICBjaGlsZFB1bHNhdGU6IGNsc3goY2xhc3Nlcy5jaGlsZFB1bHNhdGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZFB1bHNhdGUpXG4gICAgICB9LFxuICAgICAgdGltZW91dDogRFVSQVRJT04sXG4gICAgICBwdWxzYXRlOiBwdWxzYXRlLFxuICAgICAgcmlwcGxlWDogcmlwcGxlWCxcbiAgICAgIHJpcHBsZVk6IHJpcHBsZVksXG4gICAgICByaXBwbGVTaXplOiByaXBwbGVTaXplXG4gICAgfSwgbmV4dEtleS5jdXJyZW50KV0pO1xuICAgIG5leHRLZXkuY3VycmVudCArPSAxO1xuICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQgPSBjYjtcbiAgfSwgW2NsYXNzZXNdKTtcbiAgY29uc3Qgc3RhcnQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQgPSB7fSwgb3B0aW9ucyA9IHt9LCBjYiA9ICgpID0+IHt9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcHVsc2F0ZSA9IGZhbHNlLFxuICAgICAgY2VudGVyID0gY2VudGVyUHJvcCB8fCBvcHRpb25zLnB1bHNhdGUsXG4gICAgICBmYWtlRWxlbWVudCA9IGZhbHNlIC8vIEZvciB0ZXN0IHB1cnBvc2VzXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICdtb3VzZWRvd24nICYmIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQpIHtcbiAgICAgIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSBmYWtlRWxlbWVudCA/IG51bGwgOiBjb250YWluZXIuY3VycmVudDtcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudCA/IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDBcbiAgICB9O1xuXG4gICAgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSByaXBwbGVcbiAgICBsZXQgcmlwcGxlWDtcbiAgICBsZXQgcmlwcGxlWTtcbiAgICBsZXQgcmlwcGxlU2l6ZTtcbiAgICBpZiAoY2VudGVyIHx8IGV2ZW50ID09PSB1bmRlZmluZWQgfHwgZXZlbnQuY2xpZW50WCA9PT0gMCAmJiBldmVudC5jbGllbnRZID09PSAwIHx8ICFldmVudC5jbGllbnRYICYmICFldmVudC50b3VjaGVzKSB7XG4gICAgICByaXBwbGVYID0gTWF0aC5yb3VuZChyZWN0LndpZHRoIC8gMik7XG4gICAgICByaXBwbGVZID0gTWF0aC5yb3VuZChyZWN0LmhlaWdodCAvIDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNsaWVudFgsXG4gICAgICAgIGNsaWVudFlcbiAgICAgIH0gPSBldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMCA/IGV2ZW50LnRvdWNoZXNbMF0gOiBldmVudDtcbiAgICAgIHJpcHBsZVggPSBNYXRoLnJvdW5kKGNsaWVudFggLSByZWN0LmxlZnQpO1xuICAgICAgcmlwcGxlWSA9IE1hdGgucm91bmQoY2xpZW50WSAtIHJlY3QudG9wKTtcbiAgICB9XG4gICAgaWYgKGNlbnRlcikge1xuICAgICAgcmlwcGxlU2l6ZSA9IE1hdGguc3FydCgoMiAqIHJlY3Qud2lkdGggKiogMiArIHJlY3QuaGVpZ2h0ICoqIDIpIC8gMyk7XG5cbiAgICAgIC8vIEZvciBzb21lIHJlYXNvbiB0aGUgYW5pbWF0aW9uIGlzIGJyb2tlbiBvbiBNb2JpbGUgQ2hyb21lIGlmIHRoZSBzaXplIGlzIGV2ZW4uXG4gICAgICBpZiAocmlwcGxlU2l6ZSAlIDIgPT09IDApIHtcbiAgICAgICAgcmlwcGxlU2l6ZSArPSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaXplWCA9IE1hdGgubWF4KE1hdGguYWJzKChlbGVtZW50ID8gZWxlbWVudC5jbGllbnRXaWR0aCA6IDApIC0gcmlwcGxlWCksIHJpcHBsZVgpICogMiArIDI7XG4gICAgICBjb25zdCBzaXplWSA9IE1hdGgubWF4KE1hdGguYWJzKChlbGVtZW50ID8gZWxlbWVudC5jbGllbnRIZWlnaHQgOiAwKSAtIHJpcHBsZVkpLCByaXBwbGVZKSAqIDIgKyAyO1xuICAgICAgcmlwcGxlU2l6ZSA9IE1hdGguc3FydChzaXplWCAqKiAyICsgc2l6ZVkgKiogMik7XG4gICAgfVxuXG4gICAgLy8gVG91Y2hlIGRldmljZXNcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCAmJiBldmVudC50b3VjaGVzKSB7XG4gICAgICAvLyBjaGVjayB0aGF0IHRoaXMgaXNuJ3QgYW5vdGhlciB0b3VjaHN0YXJ0IGR1ZSB0byBtdWx0aXRvdWNoXG4gICAgICAvLyBvdGhlcndpc2Ugd2Ugd2lsbCBvbmx5IGNsZWFyIGEgc2luZ2xlIHRpbWVyIHdoZW4gdW5tb3VudGluZyB3aGlsZSB0d29cbiAgICAgIC8vIGFyZSBydW5uaW5nXG4gICAgICBpZiAoc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIC8vIFByZXBhcmUgdGhlIHJpcHBsZSBlZmZlY3QuXG4gICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9ICgpID0+IHtcbiAgICAgICAgICBzdGFydENvbW1pdCh7XG4gICAgICAgICAgICBwdWxzYXRlLFxuICAgICAgICAgICAgcmlwcGxlWCxcbiAgICAgICAgICAgIHJpcHBsZVksXG4gICAgICAgICAgICByaXBwbGVTaXplLFxuICAgICAgICAgICAgY2JcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gRGVsYXkgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgcmlwcGxlIGVmZmVjdC5cbiAgICAgICAgLy8gV2UgaGF2ZSB0byBtYWtlIGEgdHJhZGVvZmYgd2l0aCB0aGlzIGRlbGF5IHZhbHVlLlxuICAgICAgICBzdGFydFRpbWVyLnN0YXJ0KERFTEFZX1JJUFBMRSwgKCkgPT4ge1xuICAgICAgICAgIGlmIChzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCgpO1xuICAgICAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydENvbW1pdCh7XG4gICAgICAgIHB1bHNhdGUsXG4gICAgICAgIHJpcHBsZVgsXG4gICAgICAgIHJpcHBsZVksXG4gICAgICAgIHJpcHBsZVNpemUsXG4gICAgICAgIGNiXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtjZW50ZXJQcm9wLCBzdGFydENvbW1pdCwgc3RhcnRUaW1lcl0pO1xuICBjb25zdCBwdWxzYXRlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0YXJ0KHt9LCB7XG4gICAgICBwdWxzYXRlOiB0cnVlXG4gICAgfSk7XG4gIH0sIFtzdGFydF0pO1xuICBjb25zdCBzdG9wID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50LCBjYikgPT4ge1xuICAgIHN0YXJ0VGltZXIuY2xlYXIoKTtcblxuICAgIC8vIFRoZSB0b3VjaCBpbnRlcmFjdGlvbiBvY2N1cnMgdG9vIHF1aWNrbHkuXG4gICAgLy8gV2Ugc3RpbGwgd2FudCB0byBzaG93IHJpcHBsZSBlZmZlY3QuXG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICd0b3VjaGVuZCcgJiYgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KSB7XG4gICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQoKTtcbiAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgICBzdGFydFRpbWVyLnN0YXJ0KDAsICgpID0+IHtcbiAgICAgICAgc3RvcChldmVudCwgY2IpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgc2V0UmlwcGxlcyhvbGRSaXBwbGVzID0+IHtcbiAgICAgIGlmIChvbGRSaXBwbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIG9sZFJpcHBsZXMuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkUmlwcGxlcztcbiAgICB9KTtcbiAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gY2I7XG4gIH0sIFtzdGFydFRpbWVyXSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIHB1bHNhdGUsXG4gICAgc3RhcnQsXG4gICAgc3RvcFxuICB9KSwgW3B1bHNhdGUsIHN0YXJ0LCBzdG9wXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3godG91Y2hSaXBwbGVDbGFzc2VzLnJvb3QsIGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IGNvbnRhaW5lclxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uR3JvdXAsIHtcbiAgICAgIGNvbXBvbmVudDogbnVsbCxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjaGlsZHJlbjogcmlwcGxlc1xuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVG91Y2hSaXBwbGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIHN0YXJ0cyBhdCB0aGUgY2VudGVyIG9mIHRoZSBjb21wb25lbnRcbiAgICogcmF0aGVyIHRoYW4gYXQgdGhlIHBvaW50IG9mIGludGVyYWN0aW9uLlxuICAgKi9cbiAgY2VudGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUb3VjaFJpcHBsZTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIFJpcHBsZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGNsYXNzZXMsXG4gICAgcHVsc2F0ZSA9IGZhbHNlLFxuICAgIHJpcHBsZVgsXG4gICAgcmlwcGxlWSxcbiAgICByaXBwbGVTaXplLFxuICAgIGluOiBpblByb3AsXG4gICAgb25FeGl0ZWQsXG4gICAgdGltZW91dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtsZWF2aW5nLCBzZXRMZWF2aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmlwcGxlQ2xhc3NOYW1lID0gY2xzeChjbGFzc05hbWUsIGNsYXNzZXMucmlwcGxlLCBjbGFzc2VzLnJpcHBsZVZpc2libGUsIHB1bHNhdGUgJiYgY2xhc3Nlcy5yaXBwbGVQdWxzYXRlKTtcbiAgY29uc3QgcmlwcGxlU3R5bGVzID0ge1xuICAgIHdpZHRoOiByaXBwbGVTaXplLFxuICAgIGhlaWdodDogcmlwcGxlU2l6ZSxcbiAgICB0b3A6IC0ocmlwcGxlU2l6ZSAvIDIpICsgcmlwcGxlWSxcbiAgICBsZWZ0OiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVhcbiAgfTtcbiAgY29uc3QgY2hpbGRDbGFzc05hbWUgPSBjbHN4KGNsYXNzZXMuY2hpbGQsIGxlYXZpbmcgJiYgY2xhc3Nlcy5jaGlsZExlYXZpbmcsIHB1bHNhdGUgJiYgY2xhc3Nlcy5jaGlsZFB1bHNhdGUpO1xuICBpZiAoIWluUHJvcCAmJiAhbGVhdmluZykge1xuICAgIHNldExlYXZpbmcodHJ1ZSk7XG4gIH1cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWluUHJvcCAmJiBvbkV4aXRlZCAhPSBudWxsKSB7XG4gICAgICAvLyByZWFjdC10cmFuc2l0aW9uLWdyb3VwI29uRXhpdGVkXG4gICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KG9uRXhpdGVkLCB0aW1lb3V0KTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW29uRXhpdGVkLCBpblByb3AsIHRpbWVvdXRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiByaXBwbGVDbGFzc05hbWUsXG4gICAgc3R5bGU6IHJpcHBsZVN0eWxlcyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2hpbGRDbGFzc05hbWVcbiAgICB9KVxuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmUgLSBpbmplY3RlZCBmcm9tIFRyYW5zaXRpb25Hcm91cFxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZSAtIGluamVjdGVkIGZyb20gVHJhbnNpdGlvbkdyb3VwXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgcHVsc2F0ZXMsIHR5cGljYWxseSBpbmRpY2F0aW5nIHRoZSBrZXlib2FyZCBmb2N1cyBzdGF0ZSBvZiBhbiBlbGVtZW50LlxuICAgKi9cbiAgcHVsc2F0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEaWFtZXRlciBvZiB0aGUgcmlwcGxlLlxuICAgKi9cbiAgcmlwcGxlU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVYOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVZOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogZXhpdCBkZWxheVxuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUmlwcGxlOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvdWNoUmlwcGxlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb3VjaFJpcHBsZScsIHNsb3QpO1xufVxuY29uc3QgdG91Y2hSaXBwbGVDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVG91Y2hSaXBwbGUnLCBbJ3Jvb3QnLCAncmlwcGxlJywgJ3JpcHBsZVZpc2libGUnLCAncmlwcGxlUHVsc2F0ZScsICdjaGlsZCcsICdjaGlsZExlYXZpbmcnLCAnY2hpbGRQdWxzYXRlJ10pO1xuZXhwb3J0IGRlZmF1bHQgdG91Y2hSaXBwbGVDbGFzc2VzOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUJ1dHRvbkJhc2UnLCBzbG90KTtcbn1cbmNvbnN0IGJ1dHRvbkJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQnV0dG9uQmFzZScsIFsncm9vdCcsICdkaXNhYmxlZCcsICdmb2N1c1Zpc2libGUnXSk7XG5leHBvcnQgZGVmYXVsdCBidXR0b25CYXNlQ2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWxpZ25cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJndXR0ZXJCb3R0b21cIiwgXCJub1dyYXBcIiwgXCJwYXJhZ3JhcGhcIiwgXCJ2YXJpYW50XCIsIFwidmFyaWFudE1hcHBpbmdcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBleHRlbmRTeFByb3AgfSBmcm9tICdAbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHsgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vdHlwb2dyYXBoeUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbGlnbixcbiAgICBndXR0ZXJCb3R0b20sXG4gICAgbm9XcmFwLFxuICAgIHBhcmFncmFwaCxcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBgYWxpZ24ke2NhcGl0YWxpemUoYWxpZ24pfWAsIGd1dHRlckJvdHRvbSAmJiAnZ3V0dGVyQm90dG9tJywgbm9XcmFwICYmICdub1dyYXAnLCBwYXJhZ3JhcGggJiYgJ3BhcmFncmFwaCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IFR5cG9ncmFwaHlSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVHlwb2dyYXBoeScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGFsaWduJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuYWxpZ24pfWBdLCBvd25lclN0YXRlLm5vV3JhcCAmJiBzdHlsZXMubm9XcmFwLCBvd25lclN0YXRlLmd1dHRlckJvdHRvbSAmJiBzdHlsZXMuZ3V0dGVyQm90dG9tLCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiBzdHlsZXMucGFyYWdyYXBoXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgbWFyZ2luOiAwXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmhlcml0JyAmJiB7XG4gIC8vIFNvbWUgZWxlbWVudHMsIGxpa2UgPGJ1dHRvbj4gb24gQ2hyb21lIGhhdmUgZGVmYXVsdCBmb250IHRoYXQgZG9lc24ndCBpbmhlcml0LCByZXNldCB0aGlzLlxuICBmb250OiAnaW5oZXJpdCdcbn0sIG93bmVyU3RhdGUudmFyaWFudCAhPT0gJ2luaGVyaXQnICYmIHRoZW1lLnR5cG9ncmFwaHlbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIHtcbiAgdGV4dEFsaWduOiBvd25lclN0YXRlLmFsaWduXG59LCBvd25lclN0YXRlLm5vV3JhcCAmJiB7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xufSwgb3duZXJTdGF0ZS5ndXR0ZXJCb3R0b20gJiYge1xuICBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nXG59LCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiB7XG4gIG1hcmdpbkJvdHRvbTogMTZcbn0pKTtcbmNvbnN0IGRlZmF1bHRWYXJpYW50TWFwcGluZyA9IHtcbiAgaDE6ICdoMScsXG4gIGgyOiAnaDInLFxuICBoMzogJ2gzJyxcbiAgaDQ6ICdoNCcsXG4gIGg1OiAnaDUnLFxuICBoNjogJ2g2JyxcbiAgc3VidGl0bGUxOiAnaDYnLFxuICBzdWJ0aXRsZTI6ICdoNicsXG4gIGJvZHkxOiAncCcsXG4gIGJvZHkyOiAncCcsXG4gIGluaGVyaXQ6ICdwJ1xufTtcblxuLy8gVE9ETyB2NjogZGVwcmVjYXRlIHRoZXNlIGNvbG9yIHZhbHVlcyBpbiB2NS54IGFuZCByZW1vdmUgdGhlIHRyYW5zZm9ybWF0aW9uIGluIHY2XG5jb25zdCBjb2xvclRyYW5zZm9ybWF0aW9ucyA9IHtcbiAgcHJpbWFyeTogJ3ByaW1hcnkubWFpbicsXG4gIHRleHRQcmltYXJ5OiAndGV4dC5wcmltYXJ5JyxcbiAgc2Vjb25kYXJ5OiAnc2Vjb25kYXJ5Lm1haW4nLFxuICB0ZXh0U2Vjb25kYXJ5OiAndGV4dC5zZWNvbmRhcnknLFxuICBlcnJvcjogJ2Vycm9yLm1haW4nXG59O1xuY29uc3QgdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyA9IGNvbG9yID0+IHtcbiAgcmV0dXJuIGNvbG9yVHJhbnNmb3JtYXRpb25zW2NvbG9yXSB8fCBjb2xvcjtcbn07XG5jb25zdCBUeXBvZ3JhcGh5ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVHlwb2dyYXBoeShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUeXBvZ3JhcGh5J1xuICB9KTtcbiAgY29uc3QgY29sb3IgPSB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzKHRoZW1lUHJvcHMuY29sb3IpO1xuICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcChfZXh0ZW5kcyh7fSwgdGhlbWVQcm9wcywge1xuICAgIGNvbG9yXG4gIH0pKTtcbiAgY29uc3Qge1xuICAgICAgYWxpZ24gPSAnaW5oZXJpdCcsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQsXG4gICAgICBndXR0ZXJCb3R0b20gPSBmYWxzZSxcbiAgICAgIG5vV3JhcCA9IGZhbHNlLFxuICAgICAgcGFyYWdyYXBoID0gZmFsc2UsXG4gICAgICB2YXJpYW50ID0gJ2JvZHkxJyxcbiAgICAgIHZhcmlhbnRNYXBwaW5nID0gZGVmYXVsdFZhcmlhbnRNYXBwaW5nXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhbGlnbixcbiAgICBjb2xvcixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50LFxuICAgIGd1dHRlckJvdHRvbSxcbiAgICBub1dyYXAsXG4gICAgcGFyYWdyYXBoLFxuICAgIHZhcmlhbnQsXG4gICAgdmFyaWFudE1hcHBpbmdcbiAgfSk7XG4gIGNvbnN0IENvbXBvbmVudCA9IGNvbXBvbmVudCB8fCAocGFyYWdyYXBoID8gJ3AnIDogdmFyaWFudE1hcHBpbmdbdmFyaWFudF0gfHwgZGVmYXVsdFZhcmlhbnRNYXBwaW5nW3ZhcmlhbnRdKSB8fCAnc3Bhbic7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFR5cG9ncmFwaHlSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudCxcbiAgICByZWY6IHJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVHlwb2dyYXBoeS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBTZXQgdGhlIHRleHQtYWxpZ24gb24gdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2luaGVyaXQnXG4gICAqL1xuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2luaGVyaXQnLCAnanVzdGlmeScsICdsZWZ0JywgJ3JpZ2h0J10pLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRleHQgd2lsbCBoYXZlIGEgYm90dG9tIG1hcmdpbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGd1dHRlckJvdHRvbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IHdpbGwgbm90IHdyYXAsIGJ1dCBpbnN0ZWFkIHdpbGwgdHJ1bmNhdGUgd2l0aCBhIHRleHQgb3ZlcmZsb3cgZWxsaXBzaXMuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0ZXh0IG92ZXJmbG93IGNhbiBvbmx5IGhhcHBlbiB3aXRoIGJsb2NrIG9yIGlubGluZS1ibG9jayBsZXZlbCBlbGVtZW50c1xuICAgKiAodGhlIGVsZW1lbnQgbmVlZHMgdG8gaGF2ZSBhIHdpZHRoIGluIG9yZGVyIHRvIG92ZXJmbG93KS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG5vV3JhcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBlbGVtZW50IHdpbGwgYmUgYSBwYXJhZ3JhcGggZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHBhcmFncmFwaDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSB0aGVtZSB0eXBvZ3JhcGh5IHN0eWxlcy5cbiAgICogQGRlZmF1bHQgJ2JvZHkxJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib2R5MScsICdib2R5MicsICdidXR0b24nLCAnY2FwdGlvbicsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdpbmhlcml0JywgJ292ZXJsaW5lJywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgbWFwcyB0aGUgdmFyaWFudCBwcm9wIHRvIGEgcmFuZ2Ugb2YgZGlmZmVyZW50IEhUTUwgZWxlbWVudCB0eXBlcy5cbiAgICogRm9yIGluc3RhbmNlLCBzdWJ0aXRsZTEgdG8gYDxoNj5gLlxuICAgKiBJZiB5b3Ugd2lzaCB0byBjaGFuZ2UgdGhhdCBtYXBwaW5nLCB5b3UgY2FuIHByb3ZpZGUgeW91ciBvd24uXG4gICAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIHRoZSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgaDE6ICdoMScsXG4gICAqICAgaDI6ICdoMicsXG4gICAqICAgaDM6ICdoMycsXG4gICAqICAgaDQ6ICdoNCcsXG4gICAqICAgaDU6ICdoNScsXG4gICAqICAgaDY6ICdoNicsXG4gICAqICAgc3VidGl0bGUxOiAnaDYnLFxuICAgKiAgIHN1YnRpdGxlMjogJ2g2JyxcbiAgICogICBib2R5MTogJ3AnLFxuICAgKiAgIGJvZHkyOiAncCcsXG4gICAqICAgaW5oZXJpdDogJ3AnLFxuICAgKiB9XG4gICAqL1xuICB2YXJpYW50TWFwcGluZzogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVHlwb2dyYXBoeTsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUeXBvZ3JhcGh5Jywgc2xvdCk7XG59XG5jb25zdCB0eXBvZ3JhcGh5Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVR5cG9ncmFwaHknLCBbJ3Jvb3QnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMicsICdib2R5MScsICdib2R5MicsICdpbmhlcml0JywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ292ZXJsaW5lJywgJ2FsaWduTGVmdCcsICdhbGlnblJpZ2h0JywgJ2FsaWduQ2VudGVyJywgJ2FsaWduSnVzdGlmeScsICdub1dyYXAnLCAnZ3V0dGVyQm90dG9tJywgJ3BhcmFncmFwaCddKTtcbmV4cG9ydCBkZWZhdWx0IHR5cG9ncmFwaHlDbGFzc2VzOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtQ29udHJvbFN0YXRlKHtcbiAgcHJvcHMsXG4gIHN0YXRlcyxcbiAgbXVpRm9ybUNvbnRyb2xcbn0pIHtcbiAgcmV0dXJuIHN0YXRlcy5yZWR1Y2UoKGFjYywgc3RhdGUpID0+IHtcbiAgICBhY2Nbc3RhdGVdID0gcHJvcHNbc3RhdGVdO1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wc1tzdGF0ZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFjY1tzdGF0ZV0gPSBtdWlGb3JtQ29udHJvbFtzdGF0ZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn0iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBGb3JtQ29udHJvbENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRm9ybUNvbnRyb2xDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0Zvcm1Db250cm9sQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udHJvbENvbnRleHQ7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JtQ29udHJvbCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoRm9ybUNvbnRyb2xDb250ZXh0KTtcbn0iLCAiLy8gU3VwcG9ydHMgZGV0ZXJtaW5hdGlvbiBvZiBpc0NvbnRyb2xsZWQoKS5cbi8vIENvbnRyb2xsZWQgaW5wdXQgYWNjZXB0cyBpdHMgY3VycmVudCB2YWx1ZSBhcyBhIHByb3AuXG4vL1xuLy8gQHNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2Zvcm1zLmh0bWwjY29udHJvbGxlZC1jb21wb25lbnRzXG4vLyBAcGFyYW0gdmFsdWVcbi8vIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHN0cmluZyAoaW5jbHVkaW5nICcnKSBvciBudW1iZXIgKGluY2x1ZGluZyB6ZXJvKVxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICEoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKTtcbn1cblxuLy8gRGV0ZXJtaW5lIGlmIGZpZWxkIGlzIGVtcHR5IG9yIGZpbGxlZC5cbi8vIFJlc3BvbnNlIGRldGVybWluZXMgaWYgbGFiZWwgaXMgcHJlc2VudGVkIGFib3ZlIGZpZWxkIG9yIGFzIHBsYWNlaG9sZGVyLlxuLy9cbi8vIEBwYXJhbSBvYmpcbi8vIEBwYXJhbSBTU1Jcbi8vIEByZXR1cm5zIHtib29sZWFufSBGYWxzZSB3aGVuIG5vdCBwcmVzZW50IG9yIGVtcHR5IHN0cmluZy5cbi8vICAgICAgICAgICAgICAgICAgICBUcnVlIHdoZW4gYW55IG51bWJlciBvciBzdHJpbmcgd2l0aCBsZW5ndGguXG5leHBvcnQgZnVuY3Rpb24gaXNGaWxsZWQob2JqLCBTU1IgPSBmYWxzZSkge1xuICByZXR1cm4gb2JqICYmIChoYXNWYWx1ZShvYmoudmFsdWUpICYmIG9iai52YWx1ZSAhPT0gJycgfHwgU1NSICYmIGhhc1ZhbHVlKG9iai5kZWZhdWx0VmFsdWUpICYmIG9iai5kZWZhdWx0VmFsdWUgIT09ICcnKTtcbn1cblxuLy8gRGV0ZXJtaW5lIGlmIGFuIElucHV0IGlzIGFkb3JuZWQgb24gc3RhcnQuXG4vLyBJdCdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxlZnQgd2l0aCBMVFIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm8gYWRvcm5tZW50cy5cbi8vICAgICAgICAgICAgICAgICAgICBUcnVlIHdoZW4gYWRvcm5lZCBhdCB0aGUgc3RhcnQuXG5leHBvcnQgZnVuY3Rpb24gaXNBZG9ybmVkU3RhcnQob2JqKSB7XG4gIHJldHVybiBvYmouc3RhcnRBZG9ybm1lbnQ7XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoZWNrZWRJY29uXCIsIFwiY29sb3JcIiwgXCJpY29uXCIsIFwiaW5kZXRlcm1pbmF0ZVwiLCBcImluZGV0ZXJtaW5hdGVJY29uXCIsIFwiaW5wdXRQcm9wc1wiLCBcInNpemVcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBTd2l0Y2hCYXNlIGZyb20gJy4uL2ludGVybmFsL1N3aXRjaEJhc2UnO1xuaW1wb3J0IENoZWNrQm94T3V0bGluZUJsYW5rSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvQ2hlY2tCb3hPdXRsaW5lQmxhbmsnO1xuaW1wb3J0IENoZWNrQm94SWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvQ2hlY2tCb3gnO1xuaW1wb3J0IEluZGV0ZXJtaW5hdGVDaGVja0JveEljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL0luZGV0ZXJtaW5hdGVDaGVja0JveCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgY2hlY2tib3hDbGFzc2VzLCB7IGdldENoZWNrYm94VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9jaGVja2JveENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGluZGV0ZXJtaW5hdGUsXG4gICAgY29sb3IsXG4gICAgc2l6ZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgaW5kZXRlcm1pbmF0ZSAmJiAnaW5kZXRlcm1pbmF0ZScsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF1cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldENoZWNrYm94VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IENoZWNrYm94Um9vdCA9IHN0eWxlZChTd2l0Y2hCYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlDaGVja2JveCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmluZGV0ZXJtaW5hdGUgJiYgc3R5bGVzLmluZGV0ZXJtaW5hdGUsIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBvd25lclN0YXRlLmNvbG9yICE9PSAnZGVmYXVsdCcgJiYgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnNlY29uZGFyeVxufSwgIW93bmVyU3RhdGUuZGlzYWJsZVJpcHBsZSAmJiB7XG4gICcmOmhvdmVyJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7b3duZXJTdGF0ZS5jb2xvciA9PT0gJ2RlZmF1bHQnID8gdGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5hY3RpdmVDaGFubmVsIDogdGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYShvd25lclN0YXRlLmNvbG9yID09PSAnZGVmYXVsdCcgPyB0aGVtZS5wYWxldHRlLmFjdGlvbi5hY3RpdmUgOiB0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdkZWZhdWx0JyAmJiB7XG4gIFtgJi4ke2NoZWNrYm94Q2xhc3Nlcy5jaGVja2VkfSwgJi4ke2NoZWNrYm94Q2xhc3Nlcy5pbmRldGVybWluYXRlfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSxcbiAgW2AmLiR7Y2hlY2tib3hDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICB9XG59KSk7XG5jb25zdCBkZWZhdWx0Q2hlY2tlZEljb24gPSAvKiNfX1BVUkVfXyovX2pzeChDaGVja0JveEljb24sIHt9KTtcbmNvbnN0IGRlZmF1bHRJY29uID0gLyojX19QVVJFX18qL19qc3goQ2hlY2tCb3hPdXRsaW5lQmxhbmtJY29uLCB7fSk7XG5jb25zdCBkZWZhdWx0SW5kZXRlcm1pbmF0ZUljb24gPSAvKiNfX1BVUkVfXyovX2pzeChJbmRldGVybWluYXRlQ2hlY2tCb3hJY29uLCB7fSk7XG5jb25zdCBDaGVja2JveCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIENoZWNrYm94KGluUHJvcHMsIHJlZikge1xuICB2YXIgX2ljb24kcHJvcHMkZm9udFNpemUsIF9pbmRldGVybWluYXRlSWNvbiRwcjtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2hlY2tib3gnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGVja2VkSWNvbiA9IGRlZmF1bHRDaGVja2VkSWNvbixcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgaWNvbjogaWNvblByb3AgPSBkZWZhdWx0SWNvbixcbiAgICAgIGluZGV0ZXJtaW5hdGUgPSBmYWxzZSxcbiAgICAgIGluZGV0ZXJtaW5hdGVJY29uOiBpbmRldGVybWluYXRlSWNvblByb3AgPSBkZWZhdWx0SW5kZXRlcm1pbmF0ZUljb24sXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGljb24gPSBpbmRldGVybWluYXRlID8gaW5kZXRlcm1pbmF0ZUljb25Qcm9wIDogaWNvblByb3A7XG4gIGNvbnN0IGluZGV0ZXJtaW5hdGVJY29uID0gaW5kZXRlcm1pbmF0ZSA/IGluZGV0ZXJtaW5hdGVJY29uUHJvcCA6IGNoZWNrZWRJY29uO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgaW5kZXRlcm1pbmF0ZSxcbiAgICBzaXplXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChDaGVja2JveFJvb3QsIF9leHRlbmRzKHtcbiAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgaW5wdXRQcm9wczogX2V4dGVuZHMoe1xuICAgICAgJ2RhdGEtaW5kZXRlcm1pbmF0ZSc6IGluZGV0ZXJtaW5hdGVcbiAgICB9LCBpbnB1dFByb3BzKSxcbiAgICBpY29uOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGljb24sIHtcbiAgICAgIGZvbnRTaXplOiAoX2ljb24kcHJvcHMkZm9udFNpemUgPSBpY29uLnByb3BzLmZvbnRTaXplKSAhPSBudWxsID8gX2ljb24kcHJvcHMkZm9udFNpemUgOiBzaXplXG4gICAgfSksXG4gICAgY2hlY2tlZEljb246IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaW5kZXRlcm1pbmF0ZUljb24sIHtcbiAgICAgIGZvbnRTaXplOiAoX2luZGV0ZXJtaW5hdGVJY29uJHByID0gaW5kZXRlcm1pbmF0ZUljb24ucHJvcHMuZm9udFNpemUpICE9IG51bGwgPyBfaW5kZXRlcm1pbmF0ZUljb24kcHIgOiBzaXplXG4gICAgfSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENoZWNrYm94LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKiBAZGVmYXVsdCA8Q2hlY2tCb3hJY29uIC8+XG4gICAqL1xuICBjaGVja2VkSWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBjaGVja2VkIHN0YXRlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdENoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5jaGVja2VkLlxuICAgKiBAZGVmYXVsdCA8Q2hlY2tCb3hPdXRsaW5lQmxhbmtJY29uIC8+XG4gICAqL1xuICBpY29uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgYXBwZWFycyBpbmRldGVybWluYXRlLlxuICAgKiBUaGlzIGRvZXMgbm90IHNldCB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQgdG8gaW5kZXRlcm1pbmF0ZSBkdWVcbiAgICogdG8gaW5jb25zaXN0ZW50IGJlaGF2aW9yIGFjcm9zcyBicm93c2Vycy5cbiAgICogSG93ZXZlciwgd2Ugc2V0IGEgYGRhdGEtaW5kZXRlcm1pbmF0ZWAgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5kZXRlcm1pbmF0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbmRldGVybWluYXRlLlxuICAgKiBAZGVmYXVsdCA8SW5kZXRlcm1pbmF0ZUNoZWNrQm94SWNvbiAvPlxuICAgKi9cbiAgaW5kZXRlcm1pbmF0ZUljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IGNoZWNrZWQgc3RhdGUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQuY2hlY2tlZGAgKGJvb2xlYW4pLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSBjaGVja2JveCBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LiBUaGUgRE9NIEFQSSBjYXN0cyB0aGlzIHRvIGEgc3RyaW5nLlxuICAgKiBUaGUgYnJvd3NlciB1c2VzIFwib25cIiBhcyB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9Gb2N1c1wiLCBcImNoZWNrZWRcIiwgXCJjaGVja2VkSWNvblwiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRDaGVja2VkXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlRm9jdXNSaXBwbGVcIiwgXCJlZGdlXCIsIFwiaWNvblwiLCBcImlkXCIsIFwiaW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25Gb2N1c1wiLCBcInJlYWRPbmx5XCIsIFwicmVxdWlyZWRcIiwgXCJ0YWJJbmRleFwiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICcuLi91dGlscy91c2VDb250cm9sbGVkJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCB7IGdldFN3aXRjaEJhc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3N3aXRjaEJhc2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjaGVja2VkLFxuICAgIGRpc2FibGVkLFxuICAgIGVkZ2VcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNoZWNrZWQgJiYgJ2NoZWNrZWQnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlZGdlICYmIGBlZGdlJHtjYXBpdGFsaXplKGVkZ2UpfWBdLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRTd2l0Y2hCYXNlVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBTd2l0Y2hCYXNlUm9vdCA9IHN0eWxlZChCdXR0b25CYXNlKSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmc6IDksXG4gIGJvcmRlclJhZGl1czogJzUwJSdcbn0sIG93bmVyU3RhdGUuZWRnZSA9PT0gJ3N0YXJ0JyAmJiB7XG4gIG1hcmdpbkxlZnQ6IG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyA/IC0zIDogLTEyXG59LCBvd25lclN0YXRlLmVkZ2UgPT09ICdlbmQnICYmIHtcbiAgbWFyZ2luUmlnaHQ6IG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyA/IC0zIDogLTEyXG59KSk7XG5jb25zdCBTd2l0Y2hCYXNlSW5wdXQgPSBzdHlsZWQoJ2lucHV0Jywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KSh7XG4gIGN1cnNvcjogJ2luaGVyaXQnLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgb3BhY2l0eTogMCxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIHRvcDogMCxcbiAgbGVmdDogMCxcbiAgbWFyZ2luOiAwLFxuICBwYWRkaW5nOiAwLFxuICB6SW5kZXg6IDFcbn0pO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IFN3aXRjaEJhc2UgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTd2l0Y2hCYXNlKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgY2hlY2tlZDogY2hlY2tlZFByb3AsXG4gICAgICBjaGVja2VkSWNvbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRDaGVja2VkLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkUHJvcCxcbiAgICAgIGRpc2FibGVGb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgZWRnZSA9IGZhbHNlLFxuICAgICAgaWNvbixcbiAgICAgIGlkLFxuICAgICAgaW5wdXRQcm9wcyxcbiAgICAgIGlucHV0UmVmLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIHJlYWRPbmx5LFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHRhYkluZGV4LFxuICAgICAgdHlwZSxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IFtjaGVja2VkLCBzZXRDaGVja2VkU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogY2hlY2tlZFByb3AsXG4gICAgZGVmYXVsdDogQm9vbGVhbihkZWZhdWx0Q2hlY2tlZCksXG4gICAgbmFtZTogJ1N3aXRjaEJhc2UnLFxuICAgIHN0YXRlOiAnY2hlY2tlZCdcbiAgfSk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgaGFuZGxlRm9jdXMgPSBldmVudCA9PiB7XG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25Gb2N1cykge1xuICAgICAgbXVpRm9ybUNvbnRyb2wub25Gb2N1cyhldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVCbHVyID0gZXZlbnQgPT4ge1xuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICAgIGlmIChtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkJsdXIpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLm9uQmx1cihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzkwMjNcbiAgICBpZiAoZXZlbnQubmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdDaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgc2V0Q2hlY2tlZFN0YXRlKG5ld0NoZWNrZWQpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIHRoZSBzZWNvbmQgYXJndW1lbnQuXG4gICAgICBvbkNoYW5nZShldmVudCwgbmV3Q2hlY2tlZCk7XG4gICAgfVxuICB9O1xuICBsZXQgZGlzYWJsZWQgPSBkaXNhYmxlZFByb3A7XG4gIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgIGlmICh0eXBlb2YgZGlzYWJsZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkaXNhYmxlZCA9IG11aUZvcm1Db250cm9sLmRpc2FibGVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBoYXNMYWJlbEZvciA9IHR5cGUgPT09ICdjaGVja2JveCcgfHwgdHlwZSA9PT0gJ3JhZGlvJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNoZWNrZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUZvY3VzUmlwcGxlLFxuICAgIGVkZ2VcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhTd2l0Y2hCYXNlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNvbXBvbmVudDogXCJzcGFuXCIsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBjZW50ZXJSaXBwbGU6IHRydWUsXG4gICAgZm9jdXNSaXBwbGU6ICFkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHRhYkluZGV4OiBudWxsLFxuICAgIHJvbGU6IHVuZGVmaW5lZCxcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goU3dpdGNoQmFzZUlucHV0LCBfZXh0ZW5kcyh7XG4gICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICAgIGNoZWNrZWQ6IGNoZWNrZWRQcm9wLFxuICAgICAgZGVmYXVsdENoZWNrZWQ6IGRlZmF1bHRDaGVja2VkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmlucHV0LFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgaWQ6IGhhc0xhYmVsRm9yID8gaWQgOiB1bmRlZmluZWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUlucHV0Q2hhbmdlLFxuICAgICAgcmVhZE9ubHk6IHJlYWRPbmx5LFxuICAgICAgcmVmOiBpbnB1dFJlZixcbiAgICAgIHJlcXVpcmVkOiByZXF1aXJlZCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICB0eXBlOiB0eXBlXG4gICAgfSwgdHlwZSA9PT0gJ2NoZWNrYm94JyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8ge30gOiB7XG4gICAgICB2YWx1ZVxuICAgIH0sIGlucHV0UHJvcHMpKSwgY2hlY2tlZCA/IGNoZWNrZWRJY29uIDogaWNvbl1cbiAgfSkpO1xufSk7XG5cbi8vIE5COiBJZiBjaGFuZ2VkLCBwbGVhc2UgdXBkYXRlIENoZWNrYm94LCBTd2l0Y2ggYW5kIFJhZGlvXG4vLyBzbyB0aGF0IHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBpcyB1cGRhdGVkLlxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3dpdGNoQmFzZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZEljb246IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZGVmYXVsdENoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgIGtleWJvYXJkIGZvY3VzIHJpcHBsZSBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVGb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBnaXZlbiwgdXNlcyBhIG5lZ2F0aXZlIG1hcmdpbiB0byBjb3VudGVyYWN0IHRoZSBwYWRkaW5nIG9uIG9uZVxuICAgKiBzaWRlICh0aGlzIGlzIG9mdGVuIGhlbHBmdWwgZm9yIGFsaWduaW5nIHRoZSBsZWZ0IG9yIHJpZ2h0XG4gICAqIHNpZGUgb2YgdGhlIGljb24gd2l0aCBjb250ZW50IGFib3ZlIG9yIGJlbG93LCB3aXRob3V0IHJ1aW5pbmcgdGhlIGJvcmRlclxuICAgKiBzaXplIGFuZCBzaGFwZSkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlZGdlOiBQcm9wVHlwZXMub25lT2YoWydlbmQnLCAnc3RhcnQnLCBmYWxzZV0pLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5jaGVja2VkLlxuICAgKi9cbiAgaWNvbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLypcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyBjaGVja2VkIHN0YXRlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LmNoZWNrZWRgIChib29sZWFuKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdGFiSW5kZXg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBjb21wb25lbnQgcHJvcCBgdHlwZWAuXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgU3dpdGNoQmFzZTsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRTd2l0Y2hCYXNlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdQcml2YXRlU3dpdGNoQmFzZScsIHNsb3QpO1xufVxuY29uc3Qgc3dpdGNoQmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdQcml2YXRlU3dpdGNoQmFzZScsIFsncm9vdCcsICdjaGVja2VkJywgJ2Rpc2FibGVkJywgJ2lucHV0JywgJ2VkZ2VTdGFydCcsICdlZGdlRW5kJ10pO1xuZXhwb3J0IGRlZmF1bHQgc3dpdGNoQmFzZUNsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE5IDV2MTRINVY1aDE0bTAtMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6XCJcbn0pLCAnQ2hlY2tCb3hPdXRsaW5lQmxhbmsnKTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tOSAxNGwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5elwiXG59KSwgJ0NoZWNrQm94Jyk7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMEg3di0yaDEwdjJ6XCJcbn0pLCAnSW5kZXRlcm1pbmF0ZUNoZWNrQm94Jyk7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlY2tib3hVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNoZWNrYm94Jywgc2xvdCk7XG59XG5jb25zdCBjaGVja2JveENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlDaGVja2JveCcsIFsncm9vdCcsICdjaGVja2VkJywgJ2Rpc2FibGVkJywgJ2luZGV0ZXJtaW5hdGUnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ3NpemVTbWFsbCcsICdzaXplTWVkaXVtJ10pO1xuZXhwb3J0IGRlZmF1bHQgY2hlY2tib3hDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImRpc2FibGVTaHJpbmtcIiwgXCJzaXplXCIsIFwic3R5bGVcIiwgXCJ0aGlja25lc3NcIiwgXCJ2YWx1ZVwiLCBcInZhcmlhbnRcIl07XG5sZXQgXyA9IHQgPT4gdCxcbiAgX3QsXG4gIF90MixcbiAgX3QzLFxuICBfdDQ7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY2hhaW5Qcm9wVHlwZXMgZnJvbSAnQG11aS91dGlscy9jaGFpblByb3BUeXBlcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBrZXlmcmFtZXMsIGNzcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2NpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBTSVpFID0gNDQ7XG5jb25zdCBjaXJjdWxhclJvdGF0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90IHx8IChfdCA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbmApKTtcbmNvbnN0IGNpcmN1bGFyRGFzaEtleWZyYW1lID0ga2V5ZnJhbWVzKF90MiB8fCAoX3QyID0gX2BcbiAgMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDFweCwgMjAwcHg7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XG4gIH1cblxuICA1MCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEwMHB4LCAyMDBweDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTE1cHg7XG4gIH1cblxuICAxMDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxMDBweCwgMjAwcHg7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xMjVweDtcbiAgfVxuYCkpO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgdmFyaWFudCxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlU2hyaW5rXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWBdLFxuICAgIHN2ZzogWydzdmcnXSxcbiAgICBjaXJjbGU6IFsnY2lyY2xlJywgYGNpcmNsZSR7Y2FwaXRhbGl6ZSh2YXJpYW50KX1gLCBkaXNhYmxlU2hyaW5rICYmICdjaXJjbGVEaXNhYmxlU2hyaW5rJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRDaXJjdWxhclByb2dyZXNzVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBDaXJjdWxhclByb2dyZXNzUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZGV0ZXJtaW5hdGUnICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nKVxufSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbn0pLCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmRldGVybWluYXRlJyAmJiBjc3MoX3QzIHx8IChfdDMgPSBfYFxuICAgICAgYW5pbWF0aW9uOiAkezB9IDEuNHMgbGluZWFyIGluZmluaXRlO1xuICAgIGApLCBjaXJjdWxhclJvdGF0ZUtleWZyYW1lKSk7XG5jb25zdCBDaXJjdWxhclByb2dyZXNzU1ZHID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJyxcbiAgc2xvdDogJ1N2ZycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnN2Z1xufSkoe1xuICBkaXNwbGF5OiAnYmxvY2snIC8vIEtlZXBzIHRoZSBwcm9ncmVzcyBjZW50ZXJlZFxufSk7XG5jb25zdCBDaXJjdWxhclByb2dyZXNzQ2lyY2xlID0gc3R5bGVkKCdjaXJjbGUnLCB7XG4gIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJyxcbiAgc2xvdDogJ0NpcmNsZScsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuY2lyY2xlLCBzdHlsZXNbYGNpcmNsZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnZhcmlhbnQpfWBdLCBvd25lclN0YXRlLmRpc2FibGVTaHJpbmsgJiYgc3R5bGVzLmNpcmNsZURpc2FibGVTaHJpbmtdO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBzdHJva2U6ICdjdXJyZW50Q29sb3InXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdkZXRlcm1pbmF0ZScgJiYge1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3N0cm9rZS1kYXNob2Zmc2V0Jylcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luZGV0ZXJtaW5hdGUnICYmIHtcbiAgLy8gU29tZSBkZWZhdWx0IHZhbHVlIHRoYXQgbG9va3MgZmluZSB3YWl0aW5nIGZvciB0aGUgYW5pbWF0aW9uIHRvIGtpY2tzIGluLlxuICBzdHJva2VEYXNoYXJyYXk6ICc4MHB4LCAyMDBweCcsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDAgLy8gQWRkIHRoZSB1bml0IHRvIGZpeCBhIEVkZ2UgMTYgYW5kIGJlbG93IGJ1Zy5cbn0pLCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmRldGVybWluYXRlJyAmJiAhb3duZXJTdGF0ZS5kaXNhYmxlU2hyaW5rICYmIGNzcyhfdDQgfHwgKF90NCA9IF9gXG4gICAgICBhbmltYXRpb246ICR7MH0gMS40cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICBgKSwgY2lyY3VsYXJEYXNoS2V5ZnJhbWUpKTtcblxuLyoqXG4gKiAjIyBBUklBXG4gKlxuICogSWYgdGhlIHByb2dyZXNzIGJhciBpcyBkZXNjcmliaW5nIHRoZSBsb2FkaW5nIHByb2dyZXNzIG9mIGEgcGFydGljdWxhciByZWdpb24gb2YgYSBwYWdlLFxuICogeW91IHNob3VsZCB1c2UgYGFyaWEtZGVzY3JpYmVkYnlgIHRvIHBvaW50IHRvIHRoZSBwcm9ncmVzcyBiYXIsIGFuZCBzZXQgdGhlIGBhcmlhLWJ1c3lgXG4gKiBhdHRyaWJ1dGUgdG8gYHRydWVgIG9uIHRoYXQgcmVnaW9uIHVudGlsIGl0IGhhcyBmaW5pc2hlZCBsb2FkaW5nLlxuICovXG5jb25zdCBDaXJjdWxhclByb2dyZXNzID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQ2lyY3VsYXJQcm9ncmVzcyhpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcydcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgZGlzYWJsZVNocmluayA9IGZhbHNlLFxuICAgICAgc2l6ZSA9IDQwLFxuICAgICAgc3R5bGUsXG4gICAgICB0aGlja25lc3MgPSAzLjYsXG4gICAgICB2YWx1ZSA9IDAsXG4gICAgICB2YXJpYW50ID0gJ2luZGV0ZXJtaW5hdGUnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlU2hyaW5rLFxuICAgIHNpemUsXG4gICAgdGhpY2tuZXNzLFxuICAgIHZhbHVlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgY2lyY2xlU3R5bGUgPSB7fTtcbiAgY29uc3Qgcm9vdFN0eWxlID0ge307XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHt9O1xuICBpZiAodmFyaWFudCA9PT0gJ2RldGVybWluYXRlJykge1xuICAgIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSAyICogTWF0aC5QSSAqICgoU0laRSAtIHRoaWNrbmVzcykgLyAyKTtcbiAgICBjaXJjbGVTdHlsZS5zdHJva2VEYXNoYXJyYXkgPSBjaXJjdW1mZXJlbmNlLnRvRml4ZWQoMyk7XG4gICAgcm9vdFByb3BzWydhcmlhLXZhbHVlbm93J10gPSBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICBjaXJjbGVTdHlsZS5zdHJva2VEYXNob2Zmc2V0ID0gYCR7KCgxMDAgLSB2YWx1ZSkgLyAxMDAgKiBjaXJjdW1mZXJlbmNlKS50b0ZpeGVkKDMpfXB4YDtcbiAgICByb290U3R5bGUudHJhbnNmb3JtID0gJ3JvdGF0ZSgtOTBkZWcpJztcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQ2lyY3VsYXJQcm9ncmVzc1Jvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICB3aWR0aDogc2l6ZSxcbiAgICAgIGhlaWdodDogc2l6ZVxuICAgIH0sIHJvb3RTdHlsZSwgc3R5bGUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgcm9sZTogXCJwcm9ncmVzc2JhclwiXG4gIH0sIHJvb3RQcm9wcywgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goQ2lyY3VsYXJQcm9ncmVzc1NWRywge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLnN2ZyxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICB2aWV3Qm94OiBgJHtTSVpFIC8gMn0gJHtTSVpFIC8gMn0gJHtTSVpFfSAke1NJWkV9YCxcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzQ2lyY2xlLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5jaXJjbGUsXG4gICAgICAgIHN0eWxlOiBjaXJjbGVTdHlsZSxcbiAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgY3g6IFNJWkUsXG4gICAgICAgIGN5OiBTSVpFLFxuICAgICAgICByOiAoU0laRSAtIHRoaWNrbmVzcykgLyAyLFxuICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaWNrbmVzc1xuICAgICAgfSlcbiAgICB9KVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENpcmN1bGFyUHJvZ3Jlc3MucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2hyaW5rIGFuaW1hdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogVGhpcyBvbmx5IHdvcmtzIGlmIHZhcmlhbnQgaXMgYGluZGV0ZXJtaW5hdGVgLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNocmluazogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLmJvb2wsIHByb3BzID0+IHtcbiAgICBpZiAocHJvcHMuZGlzYWJsZVNocmluayAmJiBwcm9wcy52YXJpYW50ICYmIHByb3BzLnZhcmlhbnQgIT09ICdpbmRldGVybWluYXRlJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCB0aGUgYGRpc2FibGVTaHJpbmtgIHByb3AgJyArICd3aXRoIGEgdmFyaWFudCBvdGhlciB0aGFuIGBpbmRldGVybWluYXRlYC4gVGhpcyB3aWxsIGhhdmUgbm8gZWZmZWN0LicpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJZiB1c2luZyBhIG51bWJlciwgdGhlIHBpeGVsIHVuaXQgaXMgYXNzdW1lZC5cbiAgICogSWYgdXNpbmcgYSBzdHJpbmcsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIENTUyB1bml0LCBlLmcuICczcmVtJy5cbiAgICogQGRlZmF1bHQgNDBcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHRoaWNrbmVzcyBvZiB0aGUgY2lyY2xlLlxuICAgKiBAZGVmYXVsdCAzLjZcbiAgICovXG4gIHRoaWNrbmVzczogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGZvciB0aGUgZGV0ZXJtaW5hdGUgdmFyaWFudC5cbiAgICogVmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBVc2UgaW5kZXRlcm1pbmF0ZSB3aGVuIHRoZXJlIGlzIG5vIHByb2dyZXNzIHZhbHVlLlxuICAgKiBAZGVmYXVsdCAnaW5kZXRlcm1pbmF0ZSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2RldGVybWluYXRlJywgJ2luZGV0ZXJtaW5hdGUnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBDaXJjdWxhclByb2dyZXNzOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLCBzbG90KTtcbn1cbmNvbnN0IGNpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQ2lyY3VsYXJQcm9ncmVzcycsIFsncm9vdCcsICdkZXRlcm1pbmF0ZScsICdpbmRldGVybWluYXRlJywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdzdmcnLCAnY2lyY2xlJywgJ2NpcmNsZURldGVybWluYXRlJywgJ2NpcmNsZUluZGV0ZXJtaW5hdGUnLCAnY2lyY2xlRGlzYWJsZVNocmluayddKTtcbmV4cG9ydCBkZWZhdWx0IGNpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZvY3VzZWRcIiwgXCJmdWxsV2lkdGhcIiwgXCJoaWRkZW5MYWJlbFwiLCBcIm1hcmdpblwiLCBcInJlcXVpcmVkXCIsIFwic2l6ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgaXNGaWxsZWQsIGlzQWRvcm5lZFN0YXJ0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL3V0aWxzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGlzTXVpRWxlbWVudCBmcm9tICcuLi91dGlscy9pc011aUVsZW1lbnQnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtQ29udHJvbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIG1hcmdpbixcbiAgICBmdWxsV2lkdGhcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIG1hcmdpbiAhPT0gJ25vbmUnICYmIGBtYXJnaW4ke2NhcGl0YWxpemUobWFyZ2luKX1gLCBmdWxsV2lkdGggJiYgJ2Z1bGxXaWR0aCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRm9ybUNvbnRyb2xSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBzdHlsZXNbYG1hcmdpbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLm1hcmdpbil9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgpO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgLy8gUmVzZXQgZmllbGRzZXQgZGVmYXVsdCBzdHlsZS5cbiAgbWluV2lkdGg6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIG1hcmdpbjogMCxcbiAgYm9yZGVyOiAwLFxuICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xufSwgb3duZXJTdGF0ZS5tYXJnaW4gPT09ICdub3JtYWwnICYmIHtcbiAgbWFyZ2luVG9wOiAxNixcbiAgbWFyZ2luQm90dG9tOiA4XG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ2RlbnNlJyAmJiB7XG4gIG1hcmdpblRvcDogOCxcbiAgbWFyZ2luQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnMTAwJSdcbn0pKTtcblxuLyoqXG4gKiBQcm92aWRlcyBjb250ZXh0IHN1Y2ggYXMgZmlsbGVkL2ZvY3VzZWQvZXJyb3IvcmVxdWlyZWQgZm9yIGZvcm0gaW5wdXRzLlxuICogUmVseWluZyBvbiB0aGUgY29udGV4dCBwcm92aWRlcyBoaWdoIGZsZXhpYmlsaXR5IGFuZCBlbnN1cmVzIHRoYXQgdGhlIHN0YXRlIGFsd2F5cyBzdGF5c1xuICogY29uc2lzdGVudCBhY3Jvc3MgdGhlIGNoaWxkcmVuIG9mIHRoZSBgRm9ybUNvbnRyb2xgLlxuICogVGhpcyBjb250ZXh0IGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqICAtIEZvcm1MYWJlbFxuICogIC0gRm9ybUhlbHBlclRleHRcbiAqICAtIElucHV0XG4gKiAgLSBJbnB1dExhYmVsXG4gKlxuICogWW91IGNhbiBmaW5kIG9uZSBjb21wb3NpdGlvbiBleGFtcGxlIGJlbG93IGFuZCBtb3JlIGdvaW5nIHRvIFt0aGUgZGVtb3NdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0LWZpZWxkLyNjb21wb25lbnRzKS5cbiAqXG4gKiBgYGBqc3hcbiAqIDxGb3JtQ29udHJvbD5cbiAqICAgPElucHV0TGFiZWwgaHRtbEZvcj1cIm15LWlucHV0XCI+RW1haWwgYWRkcmVzczwvSW5wdXRMYWJlbD5cbiAqICAgPElucHV0IGlkPVwibXktaW5wdXRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwibXktaGVscGVyLXRleHRcIiAvPlxuICogICA8Rm9ybUhlbHBlclRleHQgaWQ9XCJteS1oZWxwZXItdGV4dFwiPldlJ2xsIG5ldmVyIHNoYXJlIHlvdXIgZW1haWwuPC9Gb3JtSGVscGVyVGV4dD5cbiAqIDwvRm9ybUNvbnRyb2w+XG4gKiBgYGBcbiAqXG4gKiBcdTI2QTBcdUZFMEYgT25seSBvbmUgYElucHV0QmFzZWAgY2FuIGJlIHVzZWQgd2l0aGluIGEgRm9ybUNvbnRyb2wgYmVjYXVzZSBpdCBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMuXG4gKiBGb3IgaW5zdGFuY2UsIG9ubHkgb25lIGlucHV0IGNhbiBiZSBmb2N1c2VkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBzdGF0ZSBzaG91bGRuJ3QgYmUgc2hhcmVkLlxuICovXG5jb25zdCBGb3JtQ29udHJvbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1Db250cm9sKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtQ29udHJvbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgZm9jdXNlZDogdmlzdWFsbHlGb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBoaWRkZW5MYWJlbCA9IGZhbHNlLFxuICAgICAgbWFyZ2luID0gJ25vbmUnLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIHZhcmlhbnQgPSAnb3V0bGluZWQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIG1hcmdpbixcbiAgICByZXF1aXJlZCxcbiAgICBzaXplLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgW2Fkb3JuZWRTdGFydCwgc2V0QWRvcm5lZFN0YXJ0XSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxBZG9ybmVkU3RhcnQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaXNNdWlFbGVtZW50KGNoaWxkLCBbJ1NlbGVjdCddKSA/IGNoaWxkLnByb3BzLmlucHV0IDogY2hpbGQ7XG4gICAgICAgIGlmIChpbnB1dCAmJiBpc0Fkb3JuZWRTdGFydChpbnB1dC5wcm9wcykpIHtcbiAgICAgICAgICBpbml0aWFsQWRvcm5lZFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsQWRvcm5lZFN0YXJ0O1xuICB9KTtcbiAgY29uc3QgW2ZpbGxlZCwgc2V0RmlsbGVkXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxGaWxsZWQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0ZpbGxlZChjaGlsZC5wcm9wcywgdHJ1ZSkgfHwgaXNGaWxsZWQoY2hpbGQucHJvcHMuaW5wdXRQcm9wcywgdHJ1ZSkpIHtcbiAgICAgICAgICBpbml0aWFsRmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsRmlsbGVkO1xuICB9KTtcbiAgY29uc3QgW2ZvY3VzZWRTdGF0ZSwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c2VkU3RhdGUpIHtcbiAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgfVxuICBjb25zdCBmb2N1c2VkID0gdmlzdWFsbHlGb2N1c2VkICE9PSB1bmRlZmluZWQgJiYgIWRpc2FibGVkID8gdmlzdWFsbHlGb2N1c2VkIDogZm9jdXNlZFN0YXRlO1xuICBsZXQgcmVnaXN0ZXJFZmZlY3Q7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgcmVnaXN0ZXJlZElucHV0ID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICByZWdpc3RlckVmZmVjdCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWdpc3RlcmVkSW5wdXQuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGVyZSBhcmUgbXVsdGlwbGUgYElucHV0QmFzZWAgY29tcG9uZW50cyBpbnNpZGUgYSBGb3JtQ29udHJvbC4nLCAnVGhpcyBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMsIG9ubHkgdXNlIG9uZSBgSW5wdXRCYXNlYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IHRydWU7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfTtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhZG9ybmVkU3RhcnQsXG4gICAgICBzZXRBZG9ybmVkU3RhcnQsXG4gICAgICBjb2xvcixcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBmaWxsZWQsXG4gICAgICBmb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoLFxuICAgICAgaGlkZGVuTGFiZWwsXG4gICAgICBzaXplLFxuICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG9uRW1wdHk6ICgpID0+IHtcbiAgICAgICAgc2V0RmlsbGVkKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBvbkZpbGxlZDogKCkgPT4ge1xuICAgICAgICBzZXRGaWxsZWQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgICAgfSxcbiAgICAgIHJlZ2lzdGVyRWZmZWN0LFxuICAgICAgcmVxdWlyZWQsXG4gICAgICB2YXJpYW50XG4gICAgfTtcbiAgfSwgW2Fkb3JuZWRTdGFydCwgY29sb3IsIGRpc2FibGVkLCBlcnJvciwgZmlsbGVkLCBmb2N1c2VkLCBmdWxsV2lkdGgsIGhpZGRlbkxhYmVsLCByZWdpc3RlckVmZmVjdCwgcmVxdWlyZWQsIHNpemUsIHZhcmlhbnRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtQ29udHJvbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwsIGlucHV0IGFuZCBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzcGxheWVkIGluIGZvY3VzZWQgc3RhdGUuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCBvciBgbm9ybWFsYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZyBvZiB0aGlzIGFuZCBjb250YWluZWQgY29tcG9uZW50cy5cbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnLCAnbm9ybWFsJ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Db250cm9sJywgc2xvdCk7XG59XG5jb25zdCBmb3JtQ29udHJvbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtQ29udHJvbCcsIFsncm9vdCcsICdtYXJnaW5Ob25lJywgJ21hcmdpbk5vcm1hbCcsICdtYXJnaW5EZW5zZScsICdmdWxsV2lkdGgnLCAnZGlzYWJsZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtQ29udHJvbENsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoZWNrZWRcIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJjb250cm9sXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlVHlwb2dyYXBoeVwiLCBcImlucHV0UmVmXCIsIFwibGFiZWxcIiwgXCJsYWJlbFBsYWNlbWVudFwiLCBcIm5hbWVcIiwgXCJvbkNoYW5nZVwiLCBcInJlcXVpcmVkXCIsIFwic2xvdFByb3BzXCIsIFwidmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgdXNlRm9ybUNvbnRyb2wgfSBmcm9tICcuLi9Gb3JtQ29udHJvbCc7XG5pbXBvcnQgU3RhY2sgZnJvbSAnLi4vU3RhY2snO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnLi4vVHlwb2dyYXBoeSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xMYWJlbENsYXNzZXMsIHsgZ2V0Rm9ybUNvbnRyb2xMYWJlbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtQ29udHJvbExhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlZCxcbiAgICBsYWJlbFBsYWNlbWVudCxcbiAgICBlcnJvcixcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgYGxhYmVsUGxhY2VtZW50JHtjYXBpdGFsaXplKGxhYmVsUGxhY2VtZW50KX1gLCBlcnJvciAmJiAnZXJyb3InLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXSxcbiAgICBsYWJlbDogWydsYWJlbCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCddLFxuICAgIGFzdGVyaXNrOiBbJ2FzdGVyaXNrJywgZXJyb3IgJiYgJ2Vycm9yJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtQ29udHJvbExhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBGb3JtQ29udHJvbExhYmVsUm9vdCA9IHN0eWxlZCgnbGFiZWwnLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbExhYmVsJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbe1xuICAgICAgW2AmIC4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmxhYmVsfWBdOiBzdHlsZXMubGFiZWxcbiAgICB9LCBzdHlsZXMucm9vdCwgc3R5bGVzW2BsYWJlbFBsYWNlbWVudCR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmxhYmVsUGxhY2VtZW50KX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgLy8gRm9yIGNvcnJlY3QgYWxpZ25tZW50IHdpdGggdGhlIHRleHQuXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgbWFyZ2luTGVmdDogLTExLFxuICBtYXJnaW5SaWdodDogMTYsXG4gIC8vIHVzZWQgZm9yIHJvdyBwcmVzZW50YXRpb24gb2YgcmFkaW8vY2hlY2tib3hcbiAgW2AmLiR7Zm9ybUNvbnRyb2xMYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9XG59LCBvd25lclN0YXRlLmxhYmVsUGxhY2VtZW50ID09PSAnc3RhcnQnICYmIHtcbiAgZmxleERpcmVjdGlvbjogJ3Jvdy1yZXZlcnNlJyxcbiAgbWFyZ2luTGVmdDogMTYsXG4gIC8vIHVzZWQgZm9yIHJvdyBwcmVzZW50YXRpb24gb2YgcmFkaW8vY2hlY2tib3hcbiAgbWFyZ2luUmlnaHQ6IC0xMVxufSwgb3duZXJTdGF0ZS5sYWJlbFBsYWNlbWVudCA9PT0gJ3RvcCcgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uLXJldmVyc2UnLFxuICBtYXJnaW5MZWZ0OiAxNlxufSwgb3duZXJTdGF0ZS5sYWJlbFBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgbWFyZ2luTGVmdDogMTZcbn0sIHtcbiAgW2AmIC4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmxhYmVsfWBdOiB7XG4gICAgW2AmLiR7Zm9ybUNvbnRyb2xMYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkXG4gICAgfVxuICB9XG59KSk7XG5jb25zdCBBc3Rlcmlza0NvbXBvbmVudCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUZvcm1Db250cm9sTGFiZWwnLFxuICBzbG90OiAnQXN0ZXJpc2snLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5hc3Rlcmlza1xufSkoKHtcbiAgdGhlbWVcbn0pID0+ICh7XG4gIFtgJi4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSkpO1xuXG4vKipcbiAqIERyb3AtaW4gcmVwbGFjZW1lbnQgb2YgdGhlIGBSYWRpb2AsIGBTd2l0Y2hgIGFuZCBgQ2hlY2tib3hgIGNvbXBvbmVudC5cbiAqIFVzZSB0aGlzIGNvbXBvbmVudCBpZiB5b3Ugd2FudCB0byBkaXNwbGF5IGFuIGV4dHJhIGxhYmVsLlxuICovXG5jb25zdCBGb3JtQ29udHJvbExhYmVsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUNvbnRyb2xMYWJlbChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90UHJvcHMkdHlwb2dyYXBoeTtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUNvbnRyb2xMYWJlbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgY29udHJvbCxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFByb3AsXG4gICAgICBkaXNhYmxlVHlwb2dyYXBoeSxcbiAgICAgIGxhYmVsOiBsYWJlbFByb3AsXG4gICAgICBsYWJlbFBsYWNlbWVudCA9ICdlbmQnLFxuICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkUHJvcCxcbiAgICAgIHNsb3RQcm9wcyA9IHt9XG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZGlzYWJsZWQgPSAoX3JlZiA9IGRpc2FibGVkUHJvcCAhPSBudWxsID8gZGlzYWJsZWRQcm9wIDogY29udHJvbC5wcm9wcy5kaXNhYmxlZCkgIT0gbnVsbCA/IF9yZWYgOiBtdWlGb3JtQ29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogbXVpRm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gIGNvbnN0IHJlcXVpcmVkID0gcmVxdWlyZWRQcm9wICE9IG51bGwgPyByZXF1aXJlZFByb3AgOiBjb250cm9sLnByb3BzLnJlcXVpcmVkO1xuICBjb25zdCBjb250cm9sUHJvcHMgPSB7XG4gICAgZGlzYWJsZWQsXG4gICAgcmVxdWlyZWRcbiAgfTtcbiAgWydjaGVja2VkJywgJ25hbWUnLCAnb25DaGFuZ2UnLCAndmFsdWUnLCAnaW5wdXRSZWYnXS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKHR5cGVvZiBjb250cm9sLnByb3BzW2tleV0gPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9wc1trZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29udHJvbFByb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydlcnJvciddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZWQsXG4gICAgbGFiZWxQbGFjZW1lbnQsXG4gICAgcmVxdWlyZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvclxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCB0eXBvZ3JhcGh5U2xvdFByb3BzID0gKF9zbG90UHJvcHMkdHlwb2dyYXBoeSA9IHNsb3RQcm9wcy50eXBvZ3JhcGh5KSAhPSBudWxsID8gX3Nsb3RQcm9wcyR0eXBvZ3JhcGh5IDogY29tcG9uZW50c1Byb3BzLnR5cG9ncmFwaHk7XG4gIGxldCBsYWJlbCA9IGxhYmVsUHJvcDtcbiAgaWYgKGxhYmVsICE9IG51bGwgJiYgbGFiZWwudHlwZSAhPT0gVHlwb2dyYXBoeSAmJiAhZGlzYWJsZVR5cG9ncmFwaHkpIHtcbiAgICBsYWJlbCA9IC8qI19fUFVSRV9fKi9fanN4KFR5cG9ncmFwaHksIF9leHRlbmRzKHtcbiAgICAgIGNvbXBvbmVudDogXCJzcGFuXCJcbiAgICB9LCB0eXBvZ3JhcGh5U2xvdFByb3BzLCB7XG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5sYWJlbCwgdHlwb2dyYXBoeVNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogdHlwb2dyYXBoeVNsb3RQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgfSkpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoRm9ybUNvbnRyb2xMYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY29udHJvbCwgY29udHJvbFByb3BzKSwgcmVxdWlyZWQgPyAvKiNfX1BVUkVfXyovX2pzeHMoU3RhY2ssIHtcbiAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIixcbiAgICAgIGNoaWxkcmVuOiBbbGFiZWwsIC8qI19fUFVSRV9fKi9fanN4cyhBc3Rlcmlza0NvbXBvbmVudCwge1xuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5hc3RlcmlzayxcbiAgICAgICAgY2hpbGRyZW46IFtcIlxcdTIwMDlcIiwgJyonXVxuICAgICAgfSldXG4gICAgfSkgOiBsYWJlbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtQ29udHJvbExhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBhcHBlYXJzIHNlbGVjdGVkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwb2dyYXBoeTogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIEEgY29udHJvbCBlbGVtZW50LiBGb3IgaW5zdGFuY2UsIGl0IGNhbiBiZSBhIGBSYWRpb2AsIGEgYFN3aXRjaGAgb3IgYSBgQ2hlY2tib3hgLlxuICAgKi9cbiAgY29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyByZW5kZXJlZCBhcyBpdCBpcyBwYXNzZWQgd2l0aG91dCBhbiBhZGRpdGlvbmFsIHR5cG9ncmFwaHkgbm9kZS5cbiAgICovXG4gIGRpc2FibGVUeXBvZ3JhcGh5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogQSB0ZXh0IG9yIGFuIGVsZW1lbnQgdG8gYmUgdXNlZCBpbiBhbiBlbmNsb3NpbmcgbGFiZWwgZWxlbWVudC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgbGFiZWwuXG4gICAqIEBkZWZhdWx0ICdlbmQnXG4gICAqL1xuICBsYWJlbFBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2VuZCcsICdzdGFydCcsICd0b3AnXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgc3RhdGUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5TeW50aGV0aWNFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyBjaGVja2VkIHN0YXRlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LmNoZWNrZWRgIChib29sZWFuKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgYGlucHV0YCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cG9ncmFwaHk6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2xMYWJlbDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU3RhY2sgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuY29uc3QgU3RhY2sgPSBjcmVhdGVTdGFjayh7XG4gIGNyZWF0ZVN0eWxlZENvbXBvbmVudDogc3R5bGVkKCdkaXYnLCB7XG4gICAgbmFtZTogJ011aVN0YWNrJyxcbiAgICBzbG90OiAnUm9vdCcsXG4gICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxuICB9KSxcbiAgdXNlVGhlbWVQcm9wczogaW5Qcm9wcyA9PiB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpU3RhY2snXG4gIH0pXG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN0YWNrLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGBmbGV4LWRpcmVjdGlvbmAgc3R5bGUgcHJvcGVydHkuXG4gICAqIEl0IGlzIGFwcGxpZWQgZm9yIGFsbCBzY3JlZW4gc2l6ZXMuXG4gICAqIEBkZWZhdWx0ICdjb2x1bW4nXG4gICAqL1xuICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBBZGQgYW4gZWxlbWVudCBiZXR3ZWVuIGVhY2ggY2hpbGQuXG4gICAqL1xuICBkaXZpZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHNwYWNlIGJldHdlZW4gaW1tZWRpYXRlIGNoaWxkcmVuLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBzcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AsIHdoaWNoIGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIENTUyBmbGV4Ym94IGBnYXBgIGlzIHVzZWQgaW5zdGVhZCBvZiBhcHBseWluZyBgbWFyZ2luYCB0byBjaGlsZHJlbi5cbiAgICpcbiAgICogV2hpbGUgQ1NTIGBnYXBgIHJlbW92ZXMgdGhlIFtrbm93biBsaW1pdGF0aW9uc10oaHR0cHM6Ly9tdWkuY29tL2pveS11aS9yZWFjdC1zdGFjay8jbGltaXRhdGlvbnMpLFxuICAgKiBpdCBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIGluIHNvbWUgYnJvd3NlcnMuIFdlIHJlY29tbWVuZCBjaGVja2luZyBodHRwczovL2Nhbml1c2UuY29tLz9zZWFyY2g9ZmxleCUyMGdhcCBiZWZvcmUgdXNpbmcgdGhpcyBmbGFnLlxuICAgKlxuICAgKiBUbyBlbmFibGUgdGhpcyBmbGFnIGdsb2JhbGx5LCBmb2xsb3cgdGhlIFt0aGVtZSdzIGRlZmF1bHQgcHJvcHNdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3RoZW1lLWNvbXBvbmVudHMvI2RlZmF1bHQtcHJvcHMpIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1c2VGbGV4R2FwOiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFN0YWNrOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250cm9sTGFiZWxVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUNvbnRyb2xMYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUNvbnRyb2xMYWJlbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtQ29udHJvbExhYmVsJywgWydyb290JywgJ2xhYmVsUGxhY2VtZW50U3RhcnQnLCAnbGFiZWxQbGFjZW1lbnRUb3AnLCAnbGFiZWxQbGFjZW1lbnRCb3R0b20nLCAnZGlzYWJsZWQnLCAnbGFiZWwnLCAnZXJyb3InLCAncmVxdWlyZWQnLCAnYXN0ZXJpc2snXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtQ29udHJvbExhYmVsQ2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwicm93XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGdldEZvcm1Hcm91cFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vZm9ybUdyb3VwQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgcm93LFxuICAgIGVycm9yXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCByb3cgJiYgJ3JvdycsIGVycm9yICYmICdlcnJvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUdyb3VwVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBGb3JtR3JvdXBSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtR3JvdXAnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5yb3cgJiYgc3R5bGVzLnJvd107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgZmxleFdyYXA6ICd3cmFwJ1xufSwgb3duZXJTdGF0ZS5yb3cgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAncm93J1xufSkpO1xuXG4vKipcbiAqIGBGb3JtR3JvdXBgIHdyYXBzIGNvbnRyb2xzIHN1Y2ggYXMgYENoZWNrYm94YCBhbmQgYFN3aXRjaGAuXG4gKiBJdCBwcm92aWRlcyBjb21wYWN0IHJvdyBsYXlvdXQuXG4gKiBGb3IgdGhlIGBSYWRpb2AsIHlvdSBzaG91bGQgYmUgdXNpbmcgdGhlIGBSYWRpb0dyb3VwYCBjb21wb25lbnQgaW5zdGVhZCBvZiB0aGlzIG9uZS5cbiAqL1xuY29uc3QgRm9ybUdyb3VwID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUdyb3VwKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtR3JvdXAnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICByb3cgPSBmYWxzZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydlcnJvciddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgcm93LFxuICAgIGVycm9yOiBmY3MuZXJyb3JcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Hcm91cFJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUdyb3VwLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogRGlzcGxheSBncm91cCBvZiBlbGVtZW50cyBpbiBhIGNvbXBhY3Qgcm93LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Hcm91cDsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtR3JvdXBVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Hcm91cCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUdyb3VwQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1Hcm91cCcsIFsncm9vdCcsICdyb3cnLCAnZXJyb3InXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtR3JvdXBDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGVja2VkXCIsIFwiY2hlY2tlZEljb25cIiwgXCJjb2xvclwiLCBcImljb25cIiwgXCJuYW1lXCIsIFwib25DaGFuZ2VcIiwgXCJzaXplXCIsIFwiY2xhc3NOYW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgU3dpdGNoQmFzZSBmcm9tICcuLi9pbnRlcm5hbC9Td2l0Y2hCYXNlJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBSYWRpb0J1dHRvbkljb24gZnJvbSAnLi9SYWRpb0J1dHRvbkljb24nO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGZyb20gJy4uL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbic7XG5pbXBvcnQgdXNlUmFkaW9Hcm91cCBmcm9tICcuLi9SYWRpb0dyb3VwL3VzZVJhZGlvR3JvdXAnO1xuaW1wb3J0IHJhZGlvQ2xhc3NlcywgeyBnZXRSYWRpb1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vcmFkaW9DbGFzc2VzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29sb3IsXG4gICAgc2l6ZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBzaXplICE9PSAnbWVkaXVtJyAmJiBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXVxuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRSYWRpb1V0aWxpdHlDbGFzcywgY2xhc3NlcykpO1xufTtcbmNvbnN0IFJhZGlvUm9vdCA9IHN0eWxlZChTd2l0Y2hCYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlSYWRpbycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnNpemUgIT09ICdtZWRpdW0nICYmIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuc2Vjb25kYXJ5XG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlUmlwcGxlICYmIHtcbiAgJyY6aG92ZXInOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHtvd25lclN0YXRlLmNvbG9yID09PSAnZGVmYXVsdCcgPyB0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZUNoYW5uZWwgOiB0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKG93bmVyU3RhdGUuY29sb3IgPT09ICdkZWZhdWx0JyA/IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZSA6IHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgIH1cbiAgfVxufSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2RlZmF1bHQnICYmIHtcbiAgW2AmLiR7cmFkaW9DbGFzc2VzLmNoZWNrZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxuICB9XG59LCB7XG4gIFtgJi4ke3JhZGlvQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgfVxufSkpO1xuZnVuY3Rpb24gYXJlRXF1YWxWYWx1ZXMoYSwgYikge1xuICBpZiAodHlwZW9mIGIgPT09ICdvYmplY3QnICYmIGIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxuXG4gIC8vIFRoZSB2YWx1ZSBjb3VsZCBiZSBhIG51bWJlciwgdGhlIERPTSB3aWxsIHN0cmluZ2lmeSBpdCBhbnl3YXkuXG4gIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcbn1cbmNvbnN0IGRlZmF1bHRDaGVja2VkSWNvbiA9IC8qI19fUFVSRV9fKi9fanN4KFJhZGlvQnV0dG9uSWNvbiwge1xuICBjaGVja2VkOiB0cnVlXG59KTtcbmNvbnN0IGRlZmF1bHRJY29uID0gLyojX19QVVJFX18qL19qc3goUmFkaW9CdXR0b25JY29uLCB7fSk7XG5jb25zdCBSYWRpbyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFJhZGlvKGluUHJvcHMsIHJlZikge1xuICB2YXIgX2RlZmF1bHRJY29uJHByb3BzJGZvLCBfZGVmYXVsdENoZWNrZWRJY29uJHA7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVJhZGlvJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hlY2tlZDogY2hlY2tlZFByb3AsXG4gICAgICBjaGVja2VkSWNvbiA9IGRlZmF1bHRDaGVja2VkSWNvbixcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgaWNvbiA9IGRlZmF1bHRJY29uLFxuICAgICAgbmFtZTogbmFtZVByb3AsXG4gICAgICBvbkNoYW5nZTogb25DaGFuZ2VQcm9wLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBzaXplXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHJhZGlvR3JvdXAgPSB1c2VSYWRpb0dyb3VwKCk7XG4gIGxldCBjaGVja2VkID0gY2hlY2tlZFByb3A7XG4gIGNvbnN0IG9uQ2hhbmdlID0gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKG9uQ2hhbmdlUHJvcCwgcmFkaW9Hcm91cCAmJiByYWRpb0dyb3VwLm9uQ2hhbmdlKTtcbiAgbGV0IG5hbWUgPSBuYW1lUHJvcDtcbiAgaWYgKHJhZGlvR3JvdXApIHtcbiAgICBpZiAodHlwZW9mIGNoZWNrZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjaGVja2VkID0gYXJlRXF1YWxWYWx1ZXMocmFkaW9Hcm91cC52YWx1ZSwgcHJvcHMudmFsdWUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBuYW1lID0gcmFkaW9Hcm91cC5uYW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmFkaW9Sb290LCBfZXh0ZW5kcyh7XG4gICAgdHlwZTogXCJyYWRpb1wiLFxuICAgIGljb246IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaWNvbiwge1xuICAgICAgZm9udFNpemU6IChfZGVmYXVsdEljb24kcHJvcHMkZm8gPSBkZWZhdWx0SWNvbi5wcm9wcy5mb250U2l6ZSkgIT0gbnVsbCA/IF9kZWZhdWx0SWNvbiRwcm9wcyRmbyA6IHNpemVcbiAgICB9KSxcbiAgICBjaGVja2VkSWNvbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGVja2VkSWNvbiwge1xuICAgICAgZm9udFNpemU6IChfZGVmYXVsdENoZWNrZWRJY29uJHAgPSBkZWZhdWx0Q2hlY2tlZEljb24ucHJvcHMuZm9udFNpemUpICE9IG51bGwgPyBfZGVmYXVsdENoZWNrZWRJY29uJHAgOiBzaXplXG4gICAgfSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgcmVmOiByZWYsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSYWRpby5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgY2hlY2tlZC5cbiAgICovXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgY2hlY2tlZC5cbiAgICogQGRlZmF1bHQgPFJhZGlvQnV0dG9uSWNvbiBjaGVja2VkIC8+XG4gICAqL1xuICBjaGVja2VkSWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyB1bmNoZWNrZWQuXG4gICAqIEBkZWZhdWx0IDxSYWRpb0J1dHRvbkljb24gLz5cbiAgICovXG4gIGljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IGNoZWNrZWQgc3RhdGUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQuY2hlY2tlZGAgKGJvb2xlYW4pLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSByYWRpbyBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LiBUaGUgRE9NIEFQSSBjYXN0cyB0aGlzIHRvIGEgc3RyaW5nLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBSYWRpbzsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmFkaW9CdXR0b25VbmNoZWNrZWRJY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9SYWRpb0J1dHRvblVuY2hlY2tlZCc7XG5pbXBvcnQgUmFkaW9CdXR0b25DaGVja2VkSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvUmFkaW9CdXR0b25DaGVja2VkJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUmFkaW9CdXR0b25JY29uUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSkoe1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgZGlzcGxheTogJ2ZsZXgnXG59KTtcbmNvbnN0IFJhZGlvQnV0dG9uSWNvbkJhY2tncm91bmQgPSBzdHlsZWQoUmFkaW9CdXR0b25VbmNoZWNrZWRJY29uKSh7XG4gIC8vIFNjYWxlIGFwcGxpZWQgdG8gcHJldmVudCBkb3QgbWlzYWxpZ25tZW50IGluIFNhZmFyaVxuICB0cmFuc2Zvcm06ICdzY2FsZSgxKSdcbn0pO1xuY29uc3QgUmFkaW9CdXR0b25JY29uRG90ID0gc3R5bGVkKFJhZGlvQnV0dG9uQ2hlY2tlZEljb24pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGxlZnQ6IDAsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB0cmFuc2Zvcm06ICdzY2FsZSgwKScsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbixcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlc3RcbiAgfSlcbn0sIG93bmVyU3RhdGUuY2hlY2tlZCAmJiB7XG4gIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dCxcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlc3RcbiAgfSlcbn0pKTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiBSYWRpb0J1dHRvbkljb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoZWNrZWQgPSBmYWxzZSxcbiAgICBjbGFzc2VzID0ge30sXG4gICAgZm9udFNpemVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2hlY2tlZFxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSYWRpb0J1dHRvbkljb25Sb290LCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLnJvb3QsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFJhZGlvQnV0dG9uSWNvbkJhY2tncm91bmQsIHtcbiAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5iYWNrZ3JvdW5kLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pLCAvKiNfX1BVUkVfXyovX2pzeChSYWRpb0J1dHRvbkljb25Eb3QsIHtcbiAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5kb3QsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSldXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUmFkaW9CdXR0b25JY29uLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSByYWRpbyBzdHlsaW5nLlxuICAgKi9cbiAgZm9udFNpemU6IFByb3BUeXBlcy5vbmVPZihbJ3NtYWxsJywgJ21lZGl1bSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJhZGlvQnV0dG9uSWNvbjsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6XCJcbn0pLCAnUmFkaW9CdXR0b25VbmNoZWNrZWQnKTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNOC40NjUgOC40NjVDOS4zNyA3LjU2IDEwLjYyIDcgMTIgN0MxNC43NiA3IDE3IDkuMjQgMTcgMTJDMTcgMTMuMzggMTYuNDQgMTQuNjMgMTUuNTM1IDE1LjUzNUMxNC42MyAxNi40NCAxMy4zOCAxNyAxMiAxN0M5LjI0IDE3IDcgMTQuNzYgNyAxMkM3IDEwLjYyIDcuNTYgOS4zNyA4LjQ2NSA4LjQ2NVpcIlxufSksICdSYWRpb0J1dHRvbkNoZWNrZWQnKTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmFkaW9Hcm91cENvbnRleHQgZnJvbSAnLi9SYWRpb0dyb3VwQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VSYWRpb0dyb3VwKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChSYWRpb0dyb3VwQ29udGV4dCk7XG59IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgUmFkaW9Hcm91cENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmFkaW9Hcm91cENvbnRleHQuZGlzcGxheU5hbWUgPSAnUmFkaW9Hcm91cENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgUmFkaW9Hcm91cENvbnRleHQ7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFkaW9VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVJhZGlvJywgc2xvdCk7XG59XG5jb25zdCByYWRpb0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlSYWRpbycsIFsncm9vdCcsICdjaGVja2VkJywgJ2Rpc2FibGVkJywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdzaXplU21hbGwnXSk7XG5leHBvcnQgZGVmYXVsdCByYWRpb0NsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFjdGlvbnNcIiwgXCJjaGlsZHJlblwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcIm5hbWVcIiwgXCJvbkNoYW5nZVwiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBGb3JtR3JvdXAgZnJvbSAnLi4vRm9ybUdyb3VwJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUNvbnRyb2xsZWQgZnJvbSAnLi4vdXRpbHMvdXNlQ29udHJvbGxlZCc7XG5pbXBvcnQgUmFkaW9Hcm91cENvbnRleHQgZnJvbSAnLi9SYWRpb0dyb3VwQ29udGV4dCc7XG5pbXBvcnQgdXNlSWQgZnJvbSAnLi4vdXRpbHMvdXNlSWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFJhZGlvR3JvdXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBSYWRpb0dyb3VwKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgLy8gcHJpdmF0ZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICAgIGFjdGlvbnMsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIG5hbWU6IG5hbWVQcm9wLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICB2YWx1ZTogdmFsdWVQcm9wXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJvb3RSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVTdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiB2YWx1ZVByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdFZhbHVlLFxuICAgIG5hbWU6ICdSYWRpb0dyb3VwJ1xuICB9KTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb25zLCAoKSA9PiAoe1xuICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICBsZXQgaW5wdXQgPSByb290UmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcignaW5wdXQ6bm90KDpkaXNhYmxlZCk6Y2hlY2tlZCcpO1xuICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICBpbnB1dCA9IHJvb3RSZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dDpub3QoOmRpc2FibGVkKScpO1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgcm9vdFJlZik7XG4gIGNvbnN0IG5hbWUgPSB1c2VJZChuYW1lUHJvcCk7XG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBuYW1lLFxuICAgIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICBzZXRWYWx1ZVN0YXRlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoZXZlbnQsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZVxuICB9KSwgW25hbWUsIG9uQ2hhbmdlLCBzZXRWYWx1ZVN0YXRlLCB2YWx1ZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmFkaW9Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFZhbHVlLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChGb3JtR3JvdXAsIF9leHRlbmRzKHtcbiAgICAgIHJvbGU6IFwicmFkaW9ncm91cFwiLFxuICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSYWRpb0dyb3VwLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSBuYW1lIHVzZWQgdG8gcmVmZXJlbmNlIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbC5cbiAgICogSWYgeW91IGRvbid0IHByb3ZpZGUgdGhpcyBwcm9wLCBpdCBmYWxscyBiYWNrIHRvIGEgcmFuZG9tbHkgZ2VuZXJhdGVkIG5hbWUuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIHJhZGlvIGJ1dHRvbiBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIHJhZGlvIGJ1dHRvbi5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBzZWxlY3RlZCByYWRpbyBidXR0b24uIFRoZSBET00gQVBJIGNhc3RzIHRoaXMgdG8gYSBzdHJpbmcuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJhZGlvR3JvdXA7IiwgImltcG9ydCB7IGNyZWF0ZVRoZW1lIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcblxuZXhwb3J0IGNvbnN0IHRoZW1lID0gY3JlYXRlVGhlbWUoe1xuICBwYWxldHRlOiB7XG4gICAgcHJpbWFyeToge1xuICAgICAgbWFpbjogXCIjMDA4MjdjXCIsXG4gICAgfSxcbiAgfSxcbn0pO1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE5vZGUoe1xuICBleHBhbmRhYmxlLFxuICBleHBhbmRlZCxcbiAgaGlnaGxpZ2h0LFxuICBpc0xhc3QsXG4gIGNoaWxkcmVuLFxuICBvbkNsaWNrLFxufToge1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xuICBleHBhbmRlZDogYm9vbGVhbjtcbiAgaGlnaGxpZ2h0OiBib29sZWFuO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBhbnk7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59KSB7XG4gIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW1wianN0cmVlLW5vZGVcIl07XG5cbiAgaWYgKGV4cGFuZGVkKSB7XG4gICAgY2xhc3Nlcy5wdXNoKFwianN0cmVlLW9wZW5cIik7XG4gIH0gZWxzZSB7XG4gICAgY2xhc3Nlcy5wdXNoKFwianN0cmVlLWNsb3NlZFwiKTtcbiAgfVxuXG4gIGlmICghZXhwYW5kYWJsZSkge1xuICAgIGNsYXNzZXMucHVzaChcImpzdHJlZS1sZWFmXCIpO1xuICB9XG5cbiAgaWYgKGlzTGFzdCkge1xuICAgIGNsYXNzZXMucHVzaChcImpzdHJlZS1sYXN0XCIpO1xuICB9XG5cbiAgaWYgKGhpZ2hsaWdodCkge1xuICAgIGNoaWxkcmVuID0gPHNwYW4gY2xhc3NOYW1lPVwianN0cmVlLWNsaWNrZWRcIj57Y2hpbGRyZW59PC9zcGFuPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGxpIHJvbGU9XCJ0cmVlaXRlbVwiIGNsYXNzTmFtZT17Y2xhc3Nlcy5qb2luKFwiIFwiKX0+XG4gICAgICA8aVxuICAgICAgICBjbGFzc05hbWU9XCJqc3RyZWUtaWNvbiBqc3RyZWUtb2NsXCJcbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGk+XG4gICk7XG59XG4iLCAiZXhwb3J0IHZhciBTdWJzY3JpYmFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdWJzY3JpYmFibGUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdWJzY3JpYmFibGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNhbGxiYWNrID0gbGlzdGVuZXIgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChjYWxsYmFjayk7XG4gICAgdGhpcy5vblN1YnNjcmliZSgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5saXN0ZW5lcnMgPSBfdGhpcy5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBjYWxsYmFjaztcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5vblVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gaGFzTGlzdGVuZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5sZW5ndGggPiAwO1xuICB9O1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkgey8vIERvIG5vdGhpbmdcbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7Ly8gRG8gbm90aGluZ1xuICB9O1xuXG4gIHJldHVybiBTdWJzY3JpYmFibGU7XG59KCk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuLy8gVFlQRVNcbi8vIFVUSUxTXG5leHBvcnQgdmFyIGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpIHtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgdXBkYXRlciA9PT0gJ2Z1bmN0aW9uJyA/IHVwZGF0ZXIoaW5wdXQpIDogdXBkYXRlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGltZW91dCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwICYmIHZhbHVlICE9PSBJbmZpbml0eTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVRdWVyeUtleUFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlKGFycmF5MSwgYXJyYXkyKSB7XG4gIHJldHVybiBhcnJheTEuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIGFycmF5Mi5pbmRleE9mKHgpID09PSAtMTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUF0KGFycmF5LCBpbmRleCwgdmFsdWUpIHtcbiAgdmFyIGNvcHkgPSBhcnJheS5zbGljZSgwKTtcbiAgY29weVtpbmRleF0gPSB2YWx1ZTtcbiAgcmV0dXJuIGNvcHk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGltZVVudGlsU3RhbGUodXBkYXRlZEF0LCBzdGFsZVRpbWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHVwZGF0ZWRBdCArIChzdGFsZVRpbWUgfHwgMCkgLSBEYXRlLm5vdygpLCAwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmICghaXNRdWVyeUtleShhcmcxKSkge1xuICAgIHJldHVybiBhcmcxO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmczLCB7XG4gICAgICBxdWVyeUtleTogYXJnMSxcbiAgICAgIHF1ZXJ5Rm46IGFyZzJcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIHF1ZXJ5S2V5OiBhcmcxXG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25BcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKGlzUXVlcnlLZXkoYXJnMSkpIHtcbiAgICBpZiAodHlwZW9mIGFyZzIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMywge1xuICAgICAgICBtdXRhdGlvbktleTogYXJnMSxcbiAgICAgICAgbXV0YXRpb25GbjogYXJnMlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbktleTogYXJnMVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbkZuOiBhcmcxXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzEpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIHJldHVybiBpc1F1ZXJ5S2V5KGFyZzEpID8gW19leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgcXVlcnlLZXk6IGFyZzFcbiAgfSksIGFyZzNdIDogW2FyZzEgfHwge30sIGFyZzJdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25GaWx0ZXJBcmdzKGFyZzEsIGFyZzIpIHtcbiAgcmV0dXJuIGlzUXVlcnlLZXkoYXJnMSkgPyBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIG11dGF0aW9uS2V5OiBhcmcxXG4gIH0pIDogYXJnMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXBRdWVyeVN0YXR1c0ZpbHRlcihhY3RpdmUsIGluYWN0aXZlKSB7XG4gIGlmIChhY3RpdmUgPT09IHRydWUgJiYgaW5hY3RpdmUgPT09IHRydWUgfHwgYWN0aXZlID09IG51bGwgJiYgaW5hY3RpdmUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnYWxsJztcbiAgfSBlbHNlIGlmIChhY3RpdmUgPT09IGZhbHNlICYmIGluYWN0aXZlID09PSBmYWxzZSkge1xuICAgIHJldHVybiAnbm9uZSc7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYWN0aXZlfGluYWN0aXZlIGNhbiBvbmx5IGJlIHRydWV8ZmFsc2Ugb3IgZmFsc2V8dHJ1ZVxuICAgIC8vIHNvLCB3aGVuIG9ubHkgb25lIHZhbHVlIGlzIHByb3ZpZGVkLCB0aGUgbWlzc2luZyBvbmUgaGFzIHRvIGJlIHRoZSBuZWdhdGVkIHZhbHVlXG4gICAgdmFyIGlzQWN0aXZlID0gYWN0aXZlICE9IG51bGwgPyBhY3RpdmUgOiAhaW5hY3RpdmU7XG4gICAgcmV0dXJuIGlzQWN0aXZlID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSkge1xuICB2YXIgYWN0aXZlID0gZmlsdGVycy5hY3RpdmUsXG4gICAgICBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBpbmFjdGl2ZSA9IGZpbHRlcnMuaW5hY3RpdmUsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIHF1ZXJ5S2V5ID0gZmlsdGVycy5xdWVyeUtleSxcbiAgICAgIHN0YWxlID0gZmlsdGVycy5zdGFsZTtcblxuICBpZiAoaXNRdWVyeUtleShxdWVyeUtleSkpIHtcbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChxdWVyeS5xdWVyeUhhc2ggIT09IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgcXVlcnkub3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShxdWVyeS5xdWVyeUtleSwgcXVlcnlLZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFyIHF1ZXJ5U3RhdHVzRmlsdGVyID0gbWFwUXVlcnlTdGF0dXNGaWx0ZXIoYWN0aXZlLCBpbmFjdGl2ZSk7XG5cbiAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnbm9uZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgIT09ICdhbGwnKSB7XG4gICAgdmFyIGlzQWN0aXZlID0gcXVlcnkuaXNBY3RpdmUoKTtcblxuICAgIGlmIChxdWVyeVN0YXR1c0ZpbHRlciA9PT0gJ2FjdGl2ZScgJiYgIWlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnaW5hY3RpdmUnICYmIGlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdGFsZSA9PT0gJ2Jvb2xlYW4nICYmIHF1ZXJ5LmlzU3RhbGUoKSAhPT0gc3RhbGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgcXVlcnkuaXNGZXRjaGluZygpICE9PSBmZXRjaGluZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcmVkaWNhdGUgJiYgIXByZWRpY2F0ZShxdWVyeSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKSB7XG4gIHZhciBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIG11dGF0aW9uS2V5ID0gZmlsdGVycy5tdXRhdGlvbktleTtcblxuICBpZiAoaXNRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICBpZiAoIW11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChoYXNoUXVlcnlLZXkobXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkgIT09IGhhc2hRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5LCBtdXRhdGlvbktleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgbXV0YXRpb24uc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZycgIT09IGZldGNoaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKG11dGF0aW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucykge1xuICB2YXIgaGFzaEZuID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucXVlcnlLZXlIYXNoRm4pIHx8IGhhc2hRdWVyeUtleTtcbiAgcmV0dXJuIGhhc2hGbihxdWVyeUtleSk7XG59XG4vKipcbiAqIERlZmF1bHQgcXVlcnkga2V5cyBoYXNoIGZ1bmN0aW9uLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoUXVlcnlLZXkocXVlcnlLZXkpIHtcbiAgdmFyIGFzQXJyYXkgPSBlbnN1cmVRdWVyeUtleUFycmF5KHF1ZXJ5S2V5KTtcbiAgcmV0dXJuIHN0YWJsZVZhbHVlSGFzaChhc0FycmF5KTtcbn1cbi8qKlxuICogSGFzaGVzIHRoZSB2YWx1ZSBpbnRvIGEgc3RhYmxlIGhhc2guXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YWJsZVZhbHVlSGFzaCh2YWx1ZSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIGZ1bmN0aW9uIChfLCB2YWwpIHtcbiAgICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWwpID8gT2JqZWN0LmtleXModmFsKS5zb3J0KCkucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWxba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pIDogdmFsO1xuICB9KTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGtleSBgYmAgcGFydGlhbGx5IG1hdGNoZXMgd2l0aCBrZXkgYGFgLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2hLZXkoYSwgYikge1xuICByZXR1cm4gcGFydGlhbERlZXBFcXVhbChlbnN1cmVRdWVyeUtleUFycmF5KGEpLCBlbnN1cmVRdWVyeUtleUFycmF5KGIpKTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGBiYCBwYXJ0aWFsbHkgbWF0Y2hlcyB3aXRoIGBhYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbERlZXBFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGEgJiYgYiAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuICFPYmplY3Qua2V5cyhiKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiAhcGFydGlhbERlZXBFcXVhbChhW2tleV0sIGJba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBgYWAgaWYgYGJgIGlzIGRlZXBseSBlcXVhbC5cbiAqIElmIG5vdCwgaXQgd2lsbCByZXBsYWNlIGFueSBkZWVwbHkgZXF1YWwgY2hpbGRyZW4gb2YgYGJgIHdpdGggdGhvc2Ugb2YgYGFgLlxuICogVGhpcyBjYW4gYmUgdXNlZCBmb3Igc3RydWN0dXJhbCBzaGFyaW5nIGJldHdlZW4gSlNPTiB2YWx1ZXMgZm9yIGV4YW1wbGUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VFcXVhbERlZXAoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiBhO1xuICB9XG5cbiAgdmFyIGFycmF5ID0gQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpO1xuXG4gIGlmIChhcnJheSB8fCBpc1BsYWluT2JqZWN0KGEpICYmIGlzUGxhaW5PYmplY3QoYikpIHtcbiAgICB2YXIgYVNpemUgPSBhcnJheSA/IGEubGVuZ3RoIDogT2JqZWN0LmtleXMoYSkubGVuZ3RoO1xuICAgIHZhciBiSXRlbXMgPSBhcnJheSA/IGIgOiBPYmplY3Qua2V5cyhiKTtcbiAgICB2YXIgYlNpemUgPSBiSXRlbXMubGVuZ3RoO1xuICAgIHZhciBjb3B5ID0gYXJyYXkgPyBbXSA6IHt9O1xuICAgIHZhciBlcXVhbEl0ZW1zID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYlNpemU7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGFycmF5ID8gaSA6IGJJdGVtc1tpXTtcbiAgICAgIGNvcHlba2V5XSA9IHJlcGxhY2VFcXVhbERlZXAoYVtrZXldLCBiW2tleV0pO1xuXG4gICAgICBpZiAoY29weVtrZXldID09PSBhW2tleV0pIHtcbiAgICAgICAgZXF1YWxJdGVtcysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhU2l6ZSA9PT0gYlNpemUgJiYgZXF1YWxJdGVtcyA9PT0gYVNpemUgPyBhIDogY29weTtcbiAgfVxuXG4gIHJldHVybiBiO1xufVxuLyoqXG4gKiBTaGFsbG93IGNvbXBhcmUgb2JqZWN0cy4gT25seSB3b3JrcyB3aXRoIG9iamVjdHMgdGhhdCBhbHdheXMgaGF2ZSB0aGUgc2FtZSBwcm9wZXJ0aWVzLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWxPYmplY3RzKGEsIGIpIHtcbiAgaWYgKGEgJiYgIWIgfHwgYiAmJiAhYSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGtleSBpbiBhKSB7XG4gICAgaWYgKGFba2V5XSAhPT0gYltrZXldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59IC8vIENvcGllZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1wbGFpbi1vYmplY3RcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBoYXMgbW9kaWZpZWQgY29uc3RydWN0b3JcblxuXG4gIHZhciBjdG9yID0gby5jb25zdHJ1Y3RvcjtcblxuICBpZiAodHlwZW9mIGN0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgaGFzIG1vZGlmaWVkIHByb3RvdHlwZVxuXG5cbiAgdmFyIHByb3QgPSBjdG9yLnByb3RvdHlwZTtcblxuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShwcm90KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGFuIE9iamVjdC1zcGVjaWZpYyBtZXRob2RcblxuXG4gIGlmICghcHJvdC5oYXNPd25Qcm9wZXJ0eSgnaXNQcm90b3R5cGVPZicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIE1vc3QgbGlrZWx5IGEgcGxhaW4gT2JqZWN0XG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGFzT2JqZWN0UHJvdG90eXBlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1F1ZXJ5S2V5KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRXJyb3I7XG59XG5leHBvcnQgZnVuY3Rpb24gc2xlZXAodGltZW91dCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpO1xuICB9KTtcbn1cbi8qKlxuICogU2NoZWR1bGVzIGEgbWljcm90YXNrLlxuICogVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHNjaGVkdWxlIHN0YXRlIHVwZGF0ZXMgYWZ0ZXIgcmVuZGVyaW5nLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZU1pY3JvdGFzayhjYWxsYmFjaykge1xuICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGNhbGxiYWNrKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJvcnRDb250cm9sbGVyKCkge1xuICBpZiAodHlwZW9mIEFib3J0Q29udHJvbGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIH1cbn0iLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHZhciBGb2N1c01hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoRm9jdXNNYW5hZ2VyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBGb2N1c01hbmFnZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcblxuICAgIF90aGlzLnNldHVwID0gZnVuY3Rpb24gKG9uRm9jdXMpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uRm9jdXMoKTtcbiAgICAgICAgfTsgLy8gTGlzdGVuIHRvIHZpc2liaWxsaXR5Y2hhbmdlIGFuZCBmb2N1c1xuXG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIEJlIHN1cmUgdG8gdW5zdWJzY3JpYmUgaWYgYSBuZXcgaGFuZGxlciBpcyBzZXRcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBGb2N1c01hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy5zZXR1cCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHZhciBfdGhpcyRjbGVhbnVwO1xuXG4gICAgICAoX3RoaXMkY2xlYW51cCA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdmFyIF90aGlzJGNsZWFudXAyLFxuICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXR1cCA9IHNldHVwO1xuICAgIChfdGhpcyRjbGVhbnVwMiA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5jbGVhbnVwID0gc2V0dXAoZnVuY3Rpb24gKGZvY3VzZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIF90aGlzMi5zZXRGb2N1c2VkKGZvY3VzZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0Rm9jdXNlZCA9IGZ1bmN0aW9uIHNldEZvY3VzZWQoZm9jdXNlZCkge1xuICAgIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XG5cbiAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgdGhpcy5vbkZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNGb2N1c2VkID0gZnVuY3Rpb24gaXNGb2N1c2VkKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5mb2N1c2VkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvY3VzZWQ7XG4gICAgfSAvLyBkb2N1bWVudCBnbG9iYWwgY2FuIGJlIHVuYXZhaWxhYmxlIGluIHJlYWN0IG5hdGl2ZVxuXG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFt1bmRlZmluZWQsICd2aXNpYmxlJywgJ3ByZXJlbmRlciddLmluY2x1ZGVzKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSk7XG4gIH07XG5cbiAgcmV0dXJuIEZvY3VzTWFuYWdlcjtcbn0oU3Vic2NyaWJhYmxlKTtcbmV4cG9ydCB2YXIgZm9jdXNNYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpOyIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIE9ubGluZU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoT25saW5lTWFuYWdlciwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gT25saW5lTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc2V0dXAgPSBmdW5jdGlvbiAob25PbmxpbmUpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uT25saW5lKCk7XG4gICAgICAgIH07IC8vIExpc3RlbiB0byBvbmxpbmVcblxuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byB1bnN1YnNjcmliZSBpZiBhIG5ldyBoYW5kbGVyIGlzIHNldFxuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBPbmxpbmVNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuc2V0dXApO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB2YXIgX3RoaXMkY2xlYW51cDtcblxuICAgICAgKF90aGlzJGNsZWFudXAgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwLmNhbGwodGhpcyk7XG4gICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gc2V0RXZlbnRMaXN0ZW5lcihzZXR1cCkge1xuICAgIHZhciBfdGhpcyRjbGVhbnVwMixcbiAgICAgICAgX3RoaXMyID0gdGhpcztcblxuICAgIHRoaXMuc2V0dXAgPSBzZXR1cDtcbiAgICAoX3RoaXMkY2xlYW51cDIgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwMi5jYWxsKHRoaXMpO1xuICAgIHRoaXMuY2xlYW51cCA9IHNldHVwKGZ1bmN0aW9uIChvbmxpbmUpIHtcbiAgICAgIGlmICh0eXBlb2Ygb25saW5lID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX3RoaXMyLnNldE9ubGluZShvbmxpbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE9ubGluZSA9IGZ1bmN0aW9uIHNldE9ubGluZShvbmxpbmUpIHtcbiAgICB0aGlzLm9ubGluZSA9IG9ubGluZTtcblxuICAgIGlmIChvbmxpbmUpIHtcbiAgICAgIHRoaXMub25PbmxpbmUoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzT25saW5lID0gZnVuY3Rpb24gaXNPbmxpbmUoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm9ubGluZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5vbmxpbmU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBuYXZpZ2F0b3Iub25MaW5lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvci5vbkxpbmU7XG4gIH07XG5cbiAgcmV0dXJuIE9ubGluZU1hbmFnZXI7XG59KFN1YnNjcmliYWJsZSk7XG5leHBvcnQgdmFyIG9ubGluZU1hbmFnZXIgPSBuZXcgT25saW5lTWFuYWdlcigpOyIsICJpbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi91dGlscyc7XG5cbmZ1bmN0aW9uIGRlZmF1bHRSZXRyeURlbGF5KGZhaWx1cmVDb3VudCkge1xuICByZXR1cm4gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIGZhaWx1cmVDb3VudCksIDMwMDAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mICh2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuY2FuY2VsKSA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydCB2YXIgQ2FuY2VsbGVkRXJyb3IgPSBmdW5jdGlvbiBDYW5jZWxsZWRFcnJvcihvcHRpb25zKSB7XG4gIHRoaXMucmV2ZXJ0ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZXZlcnQ7XG4gIHRoaXMuc2lsZW50ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5zaWxlbnQ7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsbGVkRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQ2FuY2VsbGVkRXJyb3I7XG59IC8vIENMQVNTXG5cbmV4cG9ydCB2YXIgUmV0cnllciA9IGZ1bmN0aW9uIFJldHJ5ZXIoY29uZmlnKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIHZhciBjYW5jZWxGbjtcbiAgdmFyIGNvbnRpbnVlRm47XG4gIHZhciBwcm9taXNlUmVzb2x2ZTtcbiAgdmFyIHByb21pc2VSZWplY3Q7XG4gIHRoaXMuYWJvcnQgPSBjb25maWcuYWJvcnQ7XG5cbiAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbiAoY2FuY2VsT3B0aW9ucykge1xuICAgIHJldHVybiBjYW5jZWxGbiA9PSBudWxsID8gdm9pZCAwIDogY2FuY2VsRm4oY2FuY2VsT3B0aW9ucyk7XG4gIH07XG5cbiAgdGhpcy5jYW5jZWxSZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjYW5jZWxSZXRyeSA9IHRydWU7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZVJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICB9O1xuXG4gIHRoaXMuZmFpbHVyZUNvdW50ID0gMDtcbiAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICB0aGlzLmlzUmVzb2x2ZWQgPSBmYWxzZTtcbiAgdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBmYWxzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKG91dGVyUmVzb2x2ZSwgb3V0ZXJSZWplY3QpIHtcbiAgICBwcm9taXNlUmVzb2x2ZSA9IG91dGVyUmVzb2x2ZTtcbiAgICBwcm9taXNlUmVqZWN0ID0gb3V0ZXJSZWplY3Q7XG4gIH0pO1xuXG4gIHZhciByZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25TdWNjZXNzKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRpbnVlRm4oKTtcbiAgICAgIHByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHJlamVjdCA9IGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uRXJyb3IodmFsdWUpO1xuICAgICAgY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICAgICAgcHJvbWlzZVJlamVjdCh2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwYXVzZSA9IGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoY29udGludWVSZXNvbHZlKSB7XG4gICAgICBjb250aW51ZUZuID0gY29udGludWVSZXNvbHZlO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgICAgY29uZmlnLm9uUGF1c2UgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vblBhdXNlKCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBjb250aW51ZUZuID0gdW5kZWZpbmVkO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIGNvbmZpZy5vbkNvbnRpbnVlID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25Db250aW51ZSgpO1xuICAgIH0pO1xuICB9OyAvLyBDcmVhdGUgbG9vcCBmdW5jdGlvblxuXG5cbiAgdmFyIHJ1biA9IGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAvLyBEbyBub3RoaW5nIGlmIGFscmVhZHkgcmVzb2x2ZWRcbiAgICBpZiAoX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9taXNlT3JWYWx1ZTsgLy8gRXhlY3V0ZSBxdWVyeVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gY29uZmlnLmZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH0gLy8gQ3JlYXRlIGNhbGxiYWNrIHRvIGNhbmNlbCB0aGlzIGZldGNoXG5cblxuICAgIGNhbmNlbEZuID0gZnVuY3Rpb24gY2FuY2VsRm4oY2FuY2VsT3B0aW9ucykge1xuICAgICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJlamVjdChuZXcgQ2FuY2VsbGVkRXJyb3IoY2FuY2VsT3B0aW9ucykpO1xuICAgICAgICBfdGhpcy5hYm9ydCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMuYWJvcnQoKTsgLy8gQ2FuY2VsIHRyYW5zcG9ydCBpZiBzdXBwb3J0ZWRcblxuICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2VPclZhbHVlKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9taXNlT3JWYWx1ZS5jYW5jZWwoKTtcbiAgICAgICAgICB9IGNhdGNoIChfdW51c2VkKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTsgLy8gQ2hlY2sgaWYgdGhlIHRyYW5zcG9ydCBsYXllciBzdXBwb3J0IGNhbmNlbGxhdGlvblxuXG5cbiAgICBfdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBpc0NhbmNlbGFibGUocHJvbWlzZU9yVmFsdWUpO1xuICAgIFByb21pc2UucmVzb2x2ZShwcm9taXNlT3JWYWx1ZSkudGhlbihyZXNvbHZlKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIHZhciBfY29uZmlnJHJldHJ5LCBfY29uZmlnJHJldHJ5RGVsYXk7XG5cbiAgICAgIC8vIFN0b3AgaWYgdGhlIGZldGNoIGlzIGFscmVhZHkgcmVzb2x2ZWRcbiAgICAgIGlmIChfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG8gd2UgbmVlZCB0byByZXRyeSB0aGUgcmVxdWVzdD9cblxuXG4gICAgICB2YXIgcmV0cnkgPSAoX2NvbmZpZyRyZXRyeSA9IGNvbmZpZy5yZXRyeSkgIT0gbnVsbCA/IF9jb25maWckcmV0cnkgOiAzO1xuICAgICAgdmFyIHJldHJ5RGVsYXkgPSAoX2NvbmZpZyRyZXRyeURlbGF5ID0gY29uZmlnLnJldHJ5RGVsYXkpICE9IG51bGwgPyBfY29uZmlnJHJldHJ5RGVsYXkgOiBkZWZhdWx0UmV0cnlEZWxheTtcbiAgICAgIHZhciBkZWxheSA9IHR5cGVvZiByZXRyeURlbGF5ID09PSAnZnVuY3Rpb24nID8gcmV0cnlEZWxheShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKSA6IHJldHJ5RGVsYXk7XG4gICAgICB2YXIgc2hvdWxkUmV0cnkgPSByZXRyeSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcmV0cnkgPT09ICdudW1iZXInICYmIF90aGlzLmZhaWx1cmVDb3VudCA8IHJldHJ5IHx8IHR5cGVvZiByZXRyeSA9PT0gJ2Z1bmN0aW9uJyAmJiByZXRyeShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKTtcblxuICAgICAgaWYgKGNhbmNlbFJldHJ5IHx8ICFzaG91bGRSZXRyeSkge1xuICAgICAgICAvLyBXZSBhcmUgZG9uZSBpZiB0aGUgcXVlcnkgZG9lcyBub3QgbmVlZCB0byBiZSByZXRyaWVkXG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuZmFpbHVyZUNvdW50Kys7IC8vIE5vdGlmeSBvbiBmYWlsXG5cbiAgICAgIGNvbmZpZy5vbkZhaWwgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkZhaWwoX3RoaXMuZmFpbHVyZUNvdW50LCBlcnJvcik7IC8vIERlbGF5XG5cbiAgICAgIHNsZWVwKGRlbGF5KSAvLyBQYXVzZSBpZiB0aGUgZG9jdW1lbnQgaXMgbm90IHZpc2libGUgb3Igd2hlbiB0aGUgZGV2aWNlIGlzIG9mZmxpbmVcbiAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgfHwgIW9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICAgIHJldHVybiBwYXVzZSgpO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNhbmNlbFJldHJ5KSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBydW4oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07IC8vIFN0YXJ0IGxvb3BcblxuXG4gIHJ1bigpO1xufTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBnZXRBYm9ydENvbnRyb2xsZXIsIGZ1bmN0aW9uYWxVcGRhdGUsIGlzVmFsaWRUaW1lb3V0LCBub29wLCByZXBsYWNlRXF1YWxEZWVwLCB0aW1lVW50aWxTdGFsZSwgZW5zdXJlUXVlcnlLZXlBcnJheSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBSZXRyeWVyLCBpc0NhbmNlbGxlZEVycm9yIH0gZnJvbSAnLi9yZXRyeWVyJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeShjb25maWcpIHtcbiAgICB0aGlzLmFib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhhZE9ic2VydmVycyA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBjb25maWcuZGVmYXVsdE9wdGlvbnM7XG4gICAgdGhpcy5zZXRPcHRpb25zKGNvbmZpZy5vcHRpb25zKTtcbiAgICB0aGlzLm9ic2VydmVycyA9IFtdO1xuICAgIHRoaXMuY2FjaGUgPSBjb25maWcuY2FjaGU7XG4gICAgdGhpcy5xdWVyeUtleSA9IGNvbmZpZy5xdWVyeUtleTtcbiAgICB0aGlzLnF1ZXJ5SGFzaCA9IGNvbmZpZy5xdWVyeUhhc2g7XG4gICAgdGhpcy5pbml0aWFsU3RhdGUgPSBjb25maWcuc3RhdGUgfHwgdGhpcy5nZXREZWZhdWx0U3RhdGUodGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5pbml0aWFsU3RhdGU7XG4gICAgdGhpcy5tZXRhID0gY29uZmlnLm1ldGE7XG4gICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnkucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRPcHRpb25zID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkY2FjaGVUaTtcblxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICB0aGlzLm1ldGEgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLm1ldGE7IC8vIERlZmF1bHQgdG8gNSBtaW51dGVzIGlmIG5vdCBjYWNoZSB0aW1lIGlzIHNldFxuXG4gICAgdGhpcy5jYWNoZVRpbWUgPSBNYXRoLm1heCh0aGlzLmNhY2hlVGltZSB8fCAwLCAoX3RoaXMkb3B0aW9ucyRjYWNoZVRpID0gdGhpcy5vcHRpb25zLmNhY2hlVGltZSkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkY2FjaGVUaSA6IDUgKiA2MCAqIDEwMDApO1xuICB9O1xuXG4gIF9wcm90by5zZXREZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2NoZWR1bGVHYyA9IGZ1bmN0aW9uIHNjaGVkdWxlR2MoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcblxuICAgIGlmIChpc1ZhbGlkVGltZW91dCh0aGlzLmNhY2hlVGltZSkpIHtcbiAgICAgIHRoaXMuZ2NUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICB9LCB0aGlzLmNhY2hlVGltZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhckdjVGltZW91dCA9IGZ1bmN0aW9uIGNsZWFyR2NUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLmdjVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZ2NUaW1lb3V0KTtcbiAgICAgIHRoaXMuZ2NUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub3B0aW9uYWxSZW1vdmUgPSBmdW5jdGlvbiBvcHRpb25hbFJlbW92ZSgpIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuaXNGZXRjaGluZykge1xuICAgICAgICBpZiAodGhpcy5oYWRPYnNlcnZlcnMpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYWNoZS5yZW1vdmUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXREYXRhID0gZnVuY3Rpb24gc2V0RGF0YSh1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkaXNEYXRhRSwgX3RoaXMkb3B0aW9ucztcblxuICAgIHZhciBwcmV2RGF0YSA9IHRoaXMuc3RhdGUuZGF0YTsgLy8gR2V0IHRoZSBuZXcgZGF0YVxuXG4gICAgdmFyIGRhdGEgPSBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIHByZXZEYXRhKTsgLy8gVXNlIHByZXYgZGF0YSBpZiBhbiBpc0RhdGFFcXVhbCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCByZXR1cm5zIGB0cnVlYFxuXG4gICAgaWYgKChfdGhpcyRvcHRpb25zJGlzRGF0YUUgPSAoX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucykuaXNEYXRhRXF1YWwpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGlzRGF0YUUuY2FsbChfdGhpcyRvcHRpb25zLCBwcmV2RGF0YSwgZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBwcmV2RGF0YTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFN0cnVjdHVyYWxseSBzaGFyZSBkYXRhIGJldHdlZW4gcHJldiBhbmQgbmV3IGRhdGEgaWYgbmVlZGVkXG4gICAgICBkYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2RGF0YSwgZGF0YSk7XG4gICAgfSAvLyBTZXQgZGF0YSBhbmQgbWFyayBpdCBhcyBjYWNoZWRcblxuXG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy51cGRhdGVkQXRcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICBfcHJvdG8uc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSwgc2V0U3RhdGVPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnc2V0U3RhdGUnLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0U3RhdGVPcHRpb25zOiBzZXRTdGF0ZU9wdGlvbnNcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjtcblxuICAgIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuICAgIChfdGhpcyRyZXRyeWVyID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllci5jYW5jZWwob3B0aW9ucyk7XG4gICAgcmV0dXJuIHByb21pc2UgPyBwcm9taXNlLnRoZW4obm9vcCkuY2F0Y2gobm9vcCkgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgIHRoaXMuY2FuY2VsKHtcbiAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5pbml0aWFsU3RhdGUpO1xuICB9O1xuXG4gIF9wcm90by5pc0FjdGl2ZSA9IGZ1bmN0aW9uIGlzQWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLm9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzRmV0Y2hpbmc7XG4gIH07XG5cbiAgX3Byb3RvLmlzU3RhbGUgPSBmdW5jdGlvbiBpc1N0YWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgIXRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCB8fCB0aGlzLm9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKS5pc1N0YWxlO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc1N0YWxlQnlUaW1lID0gZnVuY3Rpb24gaXNTdGFsZUJ5VGltZShzdGFsZVRpbWUpIHtcbiAgICBpZiAoc3RhbGVUaW1lID09PSB2b2lkIDApIHtcbiAgICAgIHN0YWxlVGltZSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCB8fCAhdGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0IHx8ICF0aW1lVW50aWxTdGFsZSh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQsIHN0YWxlVGltZSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyMjtcblxuICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnNob3VsZEZldGNoT25XaW5kb3dGb2N1cygpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5yZWZldGNoKCk7XG4gICAgfSAvLyBDb250aW51ZSBmZXRjaCBpZiBjdXJyZW50bHkgcGF1c2VkXG5cblxuICAgIChfdGhpcyRyZXRyeWVyMiA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIyLmNvbnRpbnVlKCk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXIzO1xuXG4gICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc2hvdWxkRmV0Y2hPblJlY29ubmVjdCgpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5yZWZldGNoKCk7XG4gICAgfSAvLyBDb250aW51ZSBmZXRjaCBpZiBjdXJyZW50bHkgcGF1c2VkXG5cblxuICAgIChfdGhpcyRyZXRyeWVyMyA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIzLmNvbnRpbnVlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmFkZE9ic2VydmVyID0gZnVuY3Rpb24gYWRkT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcikgPT09IC0xKSB7XG4gICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICAgIHRoaXMuaGFkT2JzZXJ2ZXJzID0gdHJ1ZTsgLy8gU3RvcCB0aGUgcXVlcnkgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZFxuXG4gICAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgICB0aGlzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdvYnNlcnZlckFkZGVkJyxcbiAgICAgICAgcXVlcnk6IHRoaXMsXG4gICAgICAgIG9ic2VydmVyOiBvYnNlcnZlclxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpICE9PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IG9ic2VydmVyO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIElmIHRoZSB0cmFuc3BvcnQgbGF5ZXIgZG9lcyBub3Qgc3VwcG9ydCBjYW5jZWxsYXRpb25cbiAgICAgICAgLy8gd2UnbGwgbGV0IHRoZSBxdWVyeSBjb250aW51ZSBzbyB0aGUgcmVzdWx0IGNhbiBiZSBjYWNoZWRcbiAgICAgICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgICAgIGlmICh0aGlzLnJldHJ5ZXIuaXNUcmFuc3BvcnRDYW5jZWxhYmxlIHx8IHRoaXMuYWJvcnRTaWduYWxDb25zdW1lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXRyeWVyLmNhbmNlbCh7XG4gICAgICAgICAgICAgIHJldmVydDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmV0cnllci5jYW5jZWxSZXRyeSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhY2hlVGltZSkge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ29ic2VydmVyUmVtb3ZlZCcsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLFxuICAgICAgICBvYnNlcnZlcjogb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0T2JzZXJ2ZXJzQ291bnQgPSBmdW5jdGlvbiBnZXRPYnNlcnZlcnNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pbnZhbGlkYXRlID0gZnVuY3Rpb24gaW52YWxpZGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdpbnZhbGlkYXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5mZXRjaCA9IGZ1bmN0aW9uIGZldGNoKG9wdGlvbnMsIGZldGNoT3B0aW9ucykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzLFxuICAgICAgICBfdGhpcyRvcHRpb25zJGJlaGF2aW8sXG4gICAgICAgIF9jb250ZXh0JGZldGNoT3B0aW9ucyxcbiAgICAgICAgX2Fib3J0Q29udHJvbGxlciRhYm9yO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuaXNGZXRjaGluZykge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiAoZmV0Y2hPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE9wdGlvbnMuY2FuY2VsUmVmZXRjaCkpIHtcbiAgICAgICAgLy8gU2lsZW50bHkgY2FuY2VsIGN1cnJlbnQgZmV0Y2ggaWYgdGhlIHVzZXIgd2FudHMgdG8gY2FuY2VsIHJlZmV0Y2hlc1xuICAgICAgICB0aGlzLmNhbmNlbCh7XG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb21pc2UpIHtcbiAgICAgICAgdmFyIF90aGlzJHJldHJ5ZXI0O1xuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHJldHJpZXMgdGhhdCB3ZXJlIHBvdGVudGlhbGx5IGNhbmNlbGxlZCBkdWUgdG8gdW5tb3VudHMgY2FuIGNvbnRpbnVlXG4gICAgICAgIChfdGhpcyRyZXRyeWVyNCA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXI0LmNvbnRpbnVlUmV0cnkoKTsgLy8gUmV0dXJuIGN1cnJlbnQgcHJvbWlzZSBpZiB3ZSBhcmUgYWxyZWFkeSBmZXRjaGluZ1xuXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gICAgICB9XG4gICAgfSAvLyBVcGRhdGUgY29uZmlnIGlmIHBhc3NlZCwgb3RoZXJ3aXNlIHRoZSBjb25maWcgZnJvbSB0aGUgbGFzdCBleGVjdXRpb24gaXMgdXNlZFxuXG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIH0gLy8gVXNlIHRoZSBvcHRpb25zIGZyb20gdGhlIGZpcnN0IG9ic2VydmVyIHdpdGggYSBxdWVyeSBmdW5jdGlvbiBpZiBubyBmdW5jdGlvbiBpcyBmb3VuZC5cbiAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgcXVlcnkgaXMgaHlkcmF0ZWQgb3IgY3JlYXRlZCB3aXRoIHNldFF1ZXJ5RGF0YS5cblxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geC5vcHRpb25zLnF1ZXJ5Rm47XG4gICAgICB9KTtcblxuICAgICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyhvYnNlcnZlci5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcXVlcnlLZXkgPSBlbnN1cmVRdWVyeUtleUFycmF5KHRoaXMucXVlcnlLZXkpO1xuICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBnZXRBYm9ydENvbnRyb2xsZXIoKTsgLy8gQ3JlYXRlIHF1ZXJ5IGZ1bmN0aW9uIGNvbnRleHRcblxuICAgIHZhciBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgIHBhZ2VQYXJhbTogdW5kZWZpbmVkLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlGbkNvbnRleHQsICdzaWduYWwnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgICAgICBfdGhpczIuYWJvcnRTaWduYWxDb25zdW1lZCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pOyAvLyBDcmVhdGUgZmV0Y2ggZnVuY3Rpb25cblxuICAgIHZhciBmZXRjaEZuID0gZnVuY3Rpb24gZmV0Y2hGbigpIHtcbiAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcXVlcnlGbicpO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuYWJvcnRTaWduYWxDb25zdW1lZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLnF1ZXJ5Rm4ocXVlcnlGbkNvbnRleHQpO1xuICAgIH07IC8vIFRyaWdnZXIgYmVoYXZpb3IgaG9va1xuXG5cbiAgICB2YXIgY29udGV4dCA9IHtcbiAgICAgIGZldGNoT3B0aW9uczogZmV0Y2hPcHRpb25zLFxuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICBmZXRjaEZuOiBmZXRjaEZuLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcblxuICAgIGlmICgoX3RoaXMkb3B0aW9ucyRiZWhhdmlvID0gdGhpcy5vcHRpb25zLmJlaGF2aW9yKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRiZWhhdmlvLm9uRmV0Y2gpIHtcbiAgICAgIHZhciBfdGhpcyRvcHRpb25zJGJlaGF2aW8yO1xuXG4gICAgICAoX3RoaXMkb3B0aW9ucyRiZWhhdmlvMiA9IHRoaXMub3B0aW9ucy5iZWhhdmlvcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkYmVoYXZpbzIub25GZXRjaChjb250ZXh0KTtcbiAgICB9IC8vIFN0b3JlIHN0YXRlIGluIGNhc2UgdGhlIGN1cnJlbnQgZmV0Y2ggbmVlZHMgdG8gYmUgcmV2ZXJ0ZWRcblxuXG4gICAgdGhpcy5yZXZlcnRTdGF0ZSA9IHRoaXMuc3RhdGU7IC8vIFNldCB0byBmZXRjaGluZyBzdGF0ZSBpZiBub3QgYWxyZWFkeSBpbiBpdFxuXG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzRmV0Y2hpbmcgfHwgdGhpcy5zdGF0ZS5mZXRjaE1ldGEgIT09ICgoX2NvbnRleHQkZmV0Y2hPcHRpb25zID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMubWV0YSkpIHtcbiAgICAgIHZhciBfY29udGV4dCRmZXRjaE9wdGlvbnMyO1xuXG4gICAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ2ZldGNoJyxcbiAgICAgICAgbWV0YTogKF9jb250ZXh0JGZldGNoT3B0aW9uczIgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczIubWV0YVxuICAgICAgfSk7XG4gICAgfSAvLyBUcnkgdG8gZmV0Y2ggdGhlIGRhdGFcblxuXG4gICAgdGhpcy5yZXRyeWVyID0gbmV3IFJldHJ5ZXIoe1xuICAgICAgZm46IGNvbnRleHQuZmV0Y2hGbixcbiAgICAgIGFib3J0OiBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IChfYWJvcnRDb250cm9sbGVyJGFib3IgPSBhYm9ydENvbnRyb2xsZXIuYWJvcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYWJvcnRDb250cm9sbGVyJGFib3IuYmluZChhYm9ydENvbnRyb2xsZXIpLFxuICAgICAgb25TdWNjZXNzOiBmdW5jdGlvbiBvblN1Y2Nlc3MoZGF0YSkge1xuICAgICAgICBfdGhpczIuc2V0RGF0YShkYXRhKTsgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG5cblxuICAgICAgICBfdGhpczIuY2FjaGUuY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMyLmNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMyKTsgLy8gUmVtb3ZlIHF1ZXJ5IGFmdGVyIGZldGNoaW5nIGlmIGNhY2hlIHRpbWUgaXMgMFxuXG4gICAgICAgIGlmIChfdGhpczIuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkVycm9yOiBmdW5jdGlvbiBvbkVycm9yKGVycm9yKSB7XG4gICAgICAgIC8vIE9wdGltaXN0aWNhbGx5IHVwZGF0ZSBzdGF0ZSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKCEoaXNDYW5jZWxsZWRFcnJvcihlcnJvcikgJiYgZXJyb3Iuc2lsZW50KSkge1xuICAgICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgICAgX3RoaXMyLmNhY2hlLmNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczIuY2FjaGUuY29uZmlnLm9uRXJyb3IoZXJyb3IsIF90aGlzMik7IC8vIExvZyBlcnJvclxuXG4gICAgICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9IC8vIFJlbW92ZSBxdWVyeSBhZnRlciBmZXRjaGluZyBpZiBjYWNoZSB0aW1lIGlzIDBcblxuXG4gICAgICAgIGlmIChfdGhpczIuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkZhaWw6IGZ1bmN0aW9uIG9uRmFpbCgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiBmdW5jdGlvbiBvblBhdXNlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdwYXVzZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogZnVuY3Rpb24gb25Db250aW51ZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnY29udGludWUnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJldHJ5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnksXG4gICAgICByZXRyeURlbGF5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnlEZWxheVxuICAgIH0pO1xuICAgIHRoaXMucHJvbWlzZSA9IHRoaXMucmV0cnllci5wcm9taXNlO1xuICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5yZWR1Y2VyKHRoaXMuc3RhdGUsIGFjdGlvbik7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMub2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLm9uUXVlcnlVcGRhdGUoYWN0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpczMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgcXVlcnk6IF90aGlzMyxcbiAgICAgICAgdHlwZTogJ3F1ZXJ5VXBkYXRlZCcsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdFN0YXRlID0gZnVuY3Rpb24gZ2V0RGVmYXVsdFN0YXRlKG9wdGlvbnMpIHtcbiAgICB2YXIgZGF0YSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5pbml0aWFsRGF0YSgpIDogb3B0aW9ucy5pbml0aWFsRGF0YTtcbiAgICB2YXIgaGFzSW5pdGlhbERhdGEgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgdmFyIGluaXRpYWxEYXRhVXBkYXRlZEF0ID0gaGFzSW5pdGlhbERhdGEgPyB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQoKSA6IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgOiAwO1xuICAgIHZhciBoYXNEYXRhID0gdHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgZGF0YVVwZGF0ZUNvdW50OiAwLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogaGFzRGF0YSA/IGluaXRpYWxEYXRhVXBkYXRlZEF0ICE9IG51bGwgPyBpbml0aWFsRGF0YVVwZGF0ZWRBdCA6IERhdGUubm93KCkgOiAwLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBlcnJvclVwZGF0ZUNvdW50OiAwLFxuICAgICAgZXJyb3JVcGRhdGVkQXQ6IDAsXG4gICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgIGZldGNoTWV0YTogbnVsbCxcbiAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICBzdGF0dXM6IGhhc0RhdGEgPyAnc3VjY2VzcycgOiAnaWRsZSdcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5yZWR1Y2VyID0gZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgdmFyIF9hY3Rpb24kbWV0YSwgX2FjdGlvbiRkYXRhVXBkYXRlZEF0O1xuXG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCArIDFcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzUGF1c2VkOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdjb250aW51ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ZldGNoJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgIGZldGNoTWV0YTogKF9hY3Rpb24kbWV0YSA9IGFjdGlvbi5tZXRhKSAhPSBudWxsID8gX2FjdGlvbiRtZXRhIDogbnVsbCxcbiAgICAgICAgICBpc0ZldGNoaW5nOiB0cnVlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgICB9LCAhc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiB7XG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgc3RhdHVzOiAnbG9hZGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgICAgZGF0YVVwZGF0ZUNvdW50OiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgKyAxLFxuICAgICAgICAgIGRhdGFVcGRhdGVkQXQ6IChfYWN0aW9uJGRhdGFVcGRhdGVkQXQgPSBhY3Rpb24uZGF0YVVwZGF0ZWRBdCkgIT0gbnVsbCA/IF9hY3Rpb24kZGF0YVVwZGF0ZWRBdCA6IERhdGUubm93KCksXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICAgICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHZhciBlcnJvciA9IGFjdGlvbi5lcnJvcjtcblxuICAgICAgICBpZiAoaXNDYW5jZWxsZWRFcnJvcihlcnJvcikgJiYgZXJyb3IucmV2ZXJ0ICYmIHRoaXMucmV2ZXJ0U3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHRoaXMucmV2ZXJ0U3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICBlcnJvclVwZGF0ZUNvdW50OiBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICBlcnJvclVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6ICdlcnJvcidcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ludmFsaWRhdGUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNJbnZhbGlkYXRlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnc2V0U3RhdGUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBhY3Rpb24uc3RhdGUpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBRdWVyeTtcbn0oKTsiLCAiaW1wb3J0IHsgc2NoZWR1bGVNaWNyb3Rhc2sgfSBmcm9tICcuL3V0aWxzJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTm90aWZ5TWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5vdGlmeU1hbmFnZXIoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb25zID0gMDtcblxuICAgIHRoaXMubm90aWZ5Rm4gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcblxuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE5vdGlmeU1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5iYXRjaCA9IGZ1bmN0aW9uIGJhdGNoKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICB0aGlzLnRyYW5zYWN0aW9ucysrO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25zLS07XG5cbiAgICAgIGlmICghdGhpcy50cmFuc2FjdGlvbnMpIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLnNjaGVkdWxlID0gZnVuY3Rpb24gc2NoZWR1bGUoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb25zKSB7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZU1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm5vdGlmeUZuKGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQWxsIGNhbGxzIHRvIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHdpbGwgYmUgYmF0Y2hlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmF0Y2hDYWxscyA9IGZ1bmN0aW9uIGJhdGNoQ2FsbHMoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGJhY2suYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgcXVldWUgPSB0aGlzLnF1ZXVlO1xuICAgIHRoaXMucXVldWUgPSBbXTtcblxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLmJhdGNoTm90aWZ5Rm4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfdGhpczMubm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBub3RpZnkgZnVuY3Rpb24uXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgd3JhcCBub3RpZmljYXRpb25zIHdpdGggYFJlYWN0LmFjdGAgd2hpbGUgcnVubmluZyB0ZXN0cy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0Tm90aWZ5RnVuY3Rpb24gPSBmdW5jdGlvbiBzZXROb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMubm90aWZ5Rm4gPSBmbjtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBmdW5jdGlvbiB0byBiYXRjaCBub3RpZmljYXRpb25zIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgdGljay5cbiAgICogQnkgZGVmYXVsdCBSZWFjdCBRdWVyeSB3aWxsIHVzZSB0aGUgYmF0Y2ggZnVuY3Rpb24gcHJvdmlkZWQgYnkgUmVhY3RET00gb3IgUmVhY3QgTmF0aXZlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXRCYXRjaE5vdGlmeUZ1bmN0aW9uID0gZnVuY3Rpb24gc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZuO1xuICB9O1xuXG4gIHJldHVybiBOb3RpZnlNYW5hZ2VyO1xufSgpOyAvLyBTSU5HTEVUT05cblxuZXhwb3J0IHZhciBub3RpZnlNYW5hZ2VyID0gbmV3IE5vdGlmeU1hbmFnZXIoKTsiLCAiLy8gVFlQRVNcbi8vIEZVTkNUSU9OU1xudmFyIGxvZ2dlciA9IGNvbnNvbGU7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKCkge1xuICByZXR1cm4gbG9nZ2VyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldExvZ2dlcihuZXdMb2dnZXIpIHtcbiAgbG9nZ2VyID0gbmV3TG9nZ2VyO1xufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleUJ5T3B0aW9ucywgbWF0Y2hRdWVyeSwgcGFyc2VGaWx0ZXJBcmdzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeUNhY2hlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKFF1ZXJ5Q2FjaGUsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIFF1ZXJ5Q2FjaGUoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG4gICAgX3RoaXMucXVlcmllcyA9IFtdO1xuICAgIF90aGlzLnF1ZXJpZXNNYXAgPSB7fTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnlDYWNoZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoY2xpZW50LCBvcHRpb25zLCBzdGF0ZSkge1xuICAgIHZhciBfb3B0aW9ucyRxdWVyeUhhc2g7XG5cbiAgICB2YXIgcXVlcnlLZXkgPSBvcHRpb25zLnF1ZXJ5S2V5O1xuICAgIHZhciBxdWVyeUhhc2ggPSAoX29wdGlvbnMkcXVlcnlIYXNoID0gb3B0aW9ucy5xdWVyeUhhc2gpICE9IG51bGwgPyBfb3B0aW9ucyRxdWVyeUhhc2ggOiBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuZ2V0KHF1ZXJ5SGFzaCk7XG5cbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IG5ldyBRdWVyeSh7XG4gICAgICAgIGNhY2hlOiB0aGlzLFxuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIHF1ZXJ5SGFzaDogcXVlcnlIYXNoLFxuICAgICAgICBvcHRpb25zOiBjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKSxcbiAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogY2xpZW50LmdldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXkpLFxuICAgICAgICBtZXRhOiBvcHRpb25zLm1ldGFcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGQocXVlcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKHF1ZXJ5KSB7XG4gICAgaWYgKCF0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXSkge1xuICAgICAgdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF0gPSBxdWVyeTtcbiAgICAgIHRoaXMucXVlcmllcy5wdXNoKHF1ZXJ5KTtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5QWRkZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKHF1ZXJ5KSB7XG4gICAgdmFyIHF1ZXJ5SW5NYXAgPSB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXTtcblxuICAgIGlmIChxdWVyeUluTWFwKSB7XG4gICAgICBxdWVyeS5kZXN0cm95KCk7XG4gICAgICB0aGlzLnF1ZXJpZXMgPSB0aGlzLnF1ZXJpZXMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBxdWVyeTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocXVlcnlJbk1hcCA9PT0gcXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdxdWVyeVJlbW92ZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHF1ZXJ5SGFzaCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNNYXBbcXVlcnlIYXNoXTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXM7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmQgPSBmdW5jdGlvbiBmaW5kKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlcnMuZXhhY3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmaWx0ZXJzLmV4YWN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzLmZpbmQoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmRBbGwgPSBmdW5jdGlvbiBmaW5kQWxsKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhmaWx0ZXJzKS5sZW5ndGggPiAwID8gdGhpcy5xdWVyaWVzLmZpbHRlcihmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHJldHVybiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KTtcbiAgICB9KSA6IHRoaXMucXVlcmllcztcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KGV2ZW50KSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczQucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5vbkZvY3VzKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkub25PbmxpbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeUNhY2hlO1xufShTdWJzY3JpYmFibGUpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleSwgbm9vcCwgcGFyc2VGaWx0ZXJBcmdzLCBwYXJzZVF1ZXJ5QXJncywgcGFydGlhbE1hdGNoS2V5LCBoYXNoUXVlcnlLZXlCeU9wdGlvbnMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5Q2FjaGUgfSBmcm9tICcuL3F1ZXJ5Q2FjaGUnO1xuaW1wb3J0IHsgTXV0YXRpb25DYWNoZSB9IGZyb20gJy4vbXV0YXRpb25DYWNoZSc7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgaW5maW5pdGVRdWVyeUJlaGF2aW9yIH0gZnJvbSAnLi9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3InO1xuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeUNsaWVudChjb25maWcpIHtcbiAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHtcbiAgICAgIGNvbmZpZyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMucXVlcnlDYWNoZSA9IGNvbmZpZy5xdWVyeUNhY2hlIHx8IG5ldyBRdWVyeUNhY2hlKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGUgfHwgbmV3IE11dGF0aW9uQ2FjaGUoKTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zIHx8IHt9O1xuICAgIHRoaXMucXVlcnlEZWZhdWx0cyA9IFtdO1xuICAgIHRoaXMubXV0YXRpb25EZWZhdWx0cyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5Q2xpZW50LnByb3RvdHlwZTtcblxuICBfcHJvdG8ubW91bnQgPSBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZUZvY3VzID0gZm9jdXNNYW5hZ2VyLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpICYmIG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLm9uRm9jdXMoKTtcblxuICAgICAgICBfdGhpcy5xdWVyeUNhY2hlLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlT25saW5lID0gb25saW5lTWFuYWdlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5vbk9ubGluZSgpO1xuXG4gICAgICAgIF90aGlzLnF1ZXJ5Q2FjaGUub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udW5tb3VudCA9IGZ1bmN0aW9uIHVubW91bnQoKSB7XG4gICAgdmFyIF90aGlzJHVuc3Vic2NyaWJlRm9jdSwgX3RoaXMkdW5zdWJzY3JpYmVPbmxpO1xuXG4gICAgKF90aGlzJHVuc3Vic2NyaWJlRm9jdSA9IHRoaXMudW5zdWJzY3JpYmVGb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuc3Vic2NyaWJlRm9jdS5jYWxsKHRoaXMpO1xuICAgIChfdGhpcyR1bnN1YnNjcmliZU9ubGkgPSB0aGlzLnVuc3Vic2NyaWJlT25saW5lKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkdW5zdWJzY3JpYmVPbmxpLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBmaWx0ZXJzLmZldGNoaW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pc011dGF0aW5nID0gZnVuY3Rpb24gaXNNdXRhdGluZyhmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZS5maW5kQWxsKF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICBmZXRjaGluZzogdHJ1ZVxuICAgIH0pKS5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJ5RGF0YShxdWVyeUtleSwgZmlsdGVycykge1xuICAgIHZhciBfdGhpcyRxdWVyeUNhY2hlJGZpbmQ7XG5cbiAgICByZXR1cm4gKF90aGlzJHF1ZXJ5Q2FjaGUkZmluZCA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZC5zdGF0ZS5kYXRhO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlDYWNoZSgpLmZpbmRBbGwocXVlcnlLZXlPckZpbHRlcnMpLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHF1ZXJ5S2V5ID0gX3JlZi5xdWVyeUtleSxcbiAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gICAgICB2YXIgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBkYXRhXTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcnlEYXRhID0gZnVuY3Rpb24gc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhxdWVyeUtleSk7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMocGFyc2VkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKS5zZXREYXRhKHVwZGF0ZXIsIG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIHNldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzLCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLmdldFF1ZXJ5Q2FjaGUoKS5maW5kQWxsKHF1ZXJ5S2V5T3JGaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBxdWVyeUtleSA9IF9yZWYyLnF1ZXJ5S2V5O1xuICAgICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBfdGhpczIuc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKV07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlTdGF0ZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5U3RhdGUocXVlcnlLZXksIGZpbHRlcnMpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlDYWNoZSRmaW5kMjtcblxuICAgIHJldHVybiAoX3RoaXMkcXVlcnlDYWNoZSRmaW5kMiA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIuc3RhdGU7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZVF1ZXJpZXMgPSBmdW5jdGlvbiByZW1vdmVRdWVyaWVzKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Q2FjaGUucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldFF1ZXJpZXMgPSBmdW5jdGlvbiByZXNldFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczNbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzM1sxXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuXG4gICAgdmFyIHJlZmV0Y2hGaWx0ZXJzID0gX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIGFjdGl2ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LnJlc2V0KCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfdGhpczMucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxRdWVyaWVzID0gZnVuY3Rpb24gY2FuY2VsUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczQgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNFswXSxcbiAgICAgICAgX3BhcnNlRmlsdGVyQXJnczQkID0gX3BhcnNlRmlsdGVyQXJnczRbMV0sXG4gICAgICAgIGNhbmNlbE9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNCQgPT09IHZvaWQgMCA/IHt9IDogX3BhcnNlRmlsdGVyQXJnczQkO1xuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxPcHRpb25zLnJldmVydCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNhbmNlbE9wdGlvbnMucmV2ZXJ0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmNhbmNlbChjYW5jZWxPcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZVF1ZXJpZXMgPSBmdW5jdGlvbiBpbnZhbGlkYXRlUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF9yZWYzLFxuICAgICAgICBfZmlsdGVycyRyZWZldGNoQWN0aXYsXG4gICAgICAgIF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCxcbiAgICAgICAgX3RoaXM1ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNSA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M1WzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczVbMV07XG5cbiAgICB2YXIgcmVmZXRjaEZpbHRlcnMgPSBfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgLy8gaWYgZmlsdGVycy5yZWZldGNoQWN0aXZlIGlzIG5vdCBwcm92aWRlZCBhbmQgZmlsdGVycy5hY3RpdmUgaXMgZXhwbGljaXRseSBmYWxzZSxcbiAgICAgIC8vIGUuZy4gaW52YWxpZGF0ZVF1ZXJpZXMoeyBhY3RpdmU6IGZhbHNlIH0pLCB3ZSBkb24ndCB3YW50IHRvIHJlZmV0Y2ggYWN0aXZlIHF1ZXJpZXNcbiAgICAgIGFjdGl2ZTogKF9yZWYzID0gKF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA9IGZpbHRlcnMucmVmZXRjaEFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA6IGZpbHRlcnMuYWN0aXZlKSAhPSBudWxsID8gX3JlZjMgOiB0cnVlLFxuICAgICAgaW5hY3RpdmU6IChfZmlsdGVycyRyZWZldGNoSW5hY3QgPSBmaWx0ZXJzLnJlZmV0Y2hJbmFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCA6IGZhbHNlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LmludmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaFF1ZXJpZXMgPSBmdW5jdGlvbiByZWZldGNoUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczYgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNlswXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M2WzFdO1xuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM2LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5mZXRjaCh1bmRlZmluZWQsIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgcmVmZXRjaFBhZ2U6IGZpbHRlcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZpbHRlcnMucmVmZXRjaFBhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCk7XG5cbiAgICBpZiAoIShvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnRocm93T25FcnJvcikpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaFF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhwYXJzZWRPcHRpb25zKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rhbm5lcmxpbnNsZXkvcmVhY3QtcXVlcnkvaXNzdWVzLzY1MlxuXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSkgPyBxdWVyeS5mZXRjaChkZWZhdWx0ZWRPcHRpb25zKSA6IFByb21pc2UucmVzb2x2ZShxdWVyeS5zdGF0ZS5kYXRhKTtcbiAgfTtcblxuICBfcHJvdG8ucHJlZmV0Y2hRdWVyeSA9IGZ1bmN0aW9uIHByZWZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hJbmZpbml0ZVF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIHBhcnNlZE9wdGlvbnMuYmVoYXZpb3IgPSBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KHBhcnNlZE9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5wcmVmZXRjaEluZmluaXRlUXVlcnkgPSBmdW5jdGlvbiBwcmVmZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxNdXRhdGlvbnMgPSBmdW5jdGlvbiBjYW5jZWxNdXRhdGlvbnMoKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczcubXV0YXRpb25DYWNoZS5nZXRBbGwoKS5tYXAoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldE11dGF0aW9uQ2FjaGUoKS5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZU11dGF0aW9uID0gZnVuY3Rpb24gZXhlY3V0ZU11dGF0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlLmJ1aWxkKHRoaXMsIG9wdGlvbnMpLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlDYWNoZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5Q2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TXV0YXRpb25DYWNoZSA9IGZ1bmN0aW9uIGdldE11dGF0aW9uQ2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0T3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucXVlcnlEZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KHF1ZXJ5S2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgucXVlcnlLZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeURlZmF1bHRzLnB1c2goe1xuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5RGVmYXVsdHMkZjtcblxuICAgIHJldHVybiBxdWVyeUtleSA/IChfdGhpcyRxdWVyeURlZmF1bHRzJGYgPSB0aGlzLnF1ZXJ5RGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShxdWVyeUtleSwgeC5xdWVyeUtleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeURlZmF1bHRzJGYuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLnNldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMubXV0YXRpb25EZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgubXV0YXRpb25LZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXRhdGlvbkRlZmF1bHRzLnB1c2goe1xuICAgICAgICBtdXRhdGlvbktleTogbXV0YXRpb25LZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5KSB7XG4gICAgdmFyIF90aGlzJG11dGF0aW9uRGVmYXVsdDtcblxuICAgIHJldHVybiBtdXRhdGlvbktleSA/IChfdGhpcyRtdXRhdGlvbkRlZmF1bHQgPSB0aGlzLm11dGF0aW9uRGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShtdXRhdGlvbktleSwgeC5tdXRhdGlvbktleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRtdXRhdGlvbkRlZmF1bHQuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRRdWVyeU9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5fZGVmYXVsdGVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLnF1ZXJpZXMsIHRoaXMuZ2V0UXVlcnlEZWZhdWx0cyhvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5S2V5KSwgb3B0aW9ucywge1xuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCAmJiBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5KSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCA9IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdGVkT3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0TXV0YXRpb25PcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLm11dGF0aW9ucywgdGhpcy5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubXV0YXRpb25LZXkpLCBvcHRpb25zLCB7XG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGhpcy5xdWVyeUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlLmNsZWFyKCk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2xpZW50O1xufSgpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgUmV0cnllciB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi91dGlscyc7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIE11dGF0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTXV0YXRpb24oY29uZmlnKSB7XG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIGNvbmZpZy5kZWZhdWx0T3B0aW9ucywgY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMubXV0YXRpb25JZCA9IGNvbmZpZy5tdXRhdGlvbklkO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZSA9IGNvbmZpZy5tdXRhdGlvbkNhY2hlO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5zdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCBnZXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLm1ldGEgPSBjb25maWcubWV0YTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUpIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdzZXRTdGF0ZScsXG4gICAgICBzdGF0ZTogc3RhdGVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAhPT0gb2JzZXJ2ZXI7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2UudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbnRpbnVlID0gZnVuY3Rpb24gX2NvbnRpbnVlKCkge1xuICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgIHRoaXMucmV0cnllci5jb250aW51ZSgpO1xuICAgICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZSA9IGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBkYXRhO1xuICAgIHZhciByZXN0b3JlZCA9IHRoaXMuc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZyc7XG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIGlmICghcmVzdG9yZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgIHZhcmlhYmxlczogdGhpcy5vcHRpb25zLnZhcmlhYmxlc1xuICAgICAgfSk7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbk11dGF0ZSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dCAhPT0gX3RoaXMuc3RhdGUuY29udGV4dCkge1xuICAgICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgICB2YXJpYWJsZXM6IF90aGlzLnN0YXRlLnZhcmlhYmxlc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5leGVjdXRlTXV0YXRpb24oKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgIGRhdGEgPSByZXN1bHQ7IC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuXG4gICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2VzcyhkYXRhLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQsIF90aGlzKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblNldHRsZWQoZGF0YSwgbnVsbCwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCwgX3RoaXMpOyAvLyBMb2cgZXJyb3JcblxuICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIGVycm9yLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlTXV0YXRpb24gPSBmdW5jdGlvbiBleGVjdXRlTXV0YXRpb24oKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXMsXG4gICAgICAgIF90aGlzJG9wdGlvbnMkcmV0cnk7XG5cbiAgICB0aGlzLnJldHJ5ZXIgPSBuZXcgUmV0cnllcih7XG4gICAgICBmbjogZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMubXV0YXRpb25Gbikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTm8gbXV0YXRpb25GbiBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLm11dGF0aW9uRm4oX3RoaXMyLnN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICB9LFxuICAgICAgb25GYWlsOiBmdW5jdGlvbiBvbkZhaWwoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25QYXVzZTogZnVuY3Rpb24gb25QYXVzZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAncGF1c2UnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6IGZ1bmN0aW9uIG9uQ29udGludWUoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2NvbnRpbnVlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogKF90aGlzJG9wdGlvbnMkcmV0cnkgPSB0aGlzLm9wdGlvbnMucmV0cnkpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJHJldHJ5IDogMCxcbiAgICAgIHJldHJ5RGVsYXk6IHRoaXMub3B0aW9ucy5yZXRyeURlbGF5XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHJlZHVjZXIodGhpcy5zdGF0ZSwgYWN0aW9uKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIub25NdXRhdGlvblVwZGF0ZShhY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzMy5tdXRhdGlvbkNhY2hlLm5vdGlmeShfdGhpczMpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNdXRhdGlvbjtcbn0oKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUoKSB7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogdW5kZWZpbmVkLFxuICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgIHN0YXR1czogJ2lkbGUnLFxuICAgIHZhcmlhYmxlczogdW5kZWZpbmVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnY29udGludWUnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGNvbnRleHQ6IGFjdGlvbi5jb250ZXh0LFxuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2xvYWRpbmcnLFxuICAgICAgICB2YXJpYWJsZXM6IGFjdGlvbi52YXJpYWJsZXNcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdlcnJvcic6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IGFjdGlvbi5lcnJvcixcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2Vycm9yJ1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdzZXRTdGF0ZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBhY3Rpb24uc3RhdGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgTXV0YXRpb24gfSBmcm9tICcuL211dGF0aW9uJztcbmltcG9ydCB7IG1hdGNoTXV0YXRpb24sIG5vb3AgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTXV0YXRpb25DYWNoZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShNdXRhdGlvbkNhY2hlLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBNdXRhdGlvbkNhY2hlKGNvbmZpZykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIF90aGlzLm11dGF0aW9ucyA9IFtdO1xuICAgIF90aGlzLm11dGF0aW9uSWQgPSAwO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbkNhY2hlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGQgPSBmdW5jdGlvbiBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgdmFyIG11dGF0aW9uID0gbmV3IE11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uQ2FjaGU6IHRoaXMsXG4gICAgICBtdXRhdGlvbklkOiArK3RoaXMubXV0YXRpb25JZCxcbiAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnMubXV0YXRpb25LZXkgPyBjbGllbnQuZ2V0TXV0YXRpb25EZWZhdWx0cyhvcHRpb25zLm11dGF0aW9uS2V5KSA6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGE6IG9wdGlvbnMubWV0YVxuICAgIH0pO1xuICAgIHRoaXMuYWRkKG11dGF0aW9uKTtcbiAgICByZXR1cm4gbXV0YXRpb247XG4gIH07XG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChtdXRhdGlvbikge1xuICAgIHRoaXMubXV0YXRpb25zLnB1c2gobXV0YXRpb24pO1xuICAgIHRoaXMubm90aWZ5KG11dGF0aW9uKTtcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG11dGF0aW9uKSB7XG4gICAgdGhpcy5tdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICE9PSBtdXRhdGlvbjtcbiAgICB9KTtcbiAgICBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICB0aGlzLm5vdGlmeShtdXRhdGlvbik7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5tdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZmluZCA9IGZ1bmN0aW9uIGZpbmQoZmlsdGVycykge1xuICAgIGlmICh0eXBlb2YgZmlsdGVycy5leGFjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbHRlcnMuZXhhY3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucy5maW5kKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5maW5kQWxsID0gZnVuY3Rpb24gZmluZEFsbChmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KG11dGF0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIobXV0YXRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHZhciBwYXVzZWRNdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnN0YXRlLmlzUGF1c2VkO1xuICAgIH0pO1xuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBwYXVzZWRNdXRhdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChwcm9taXNlLCBtdXRhdGlvbikge1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gbXV0YXRpb24uY29udGludWUoKS5jYXRjaChub29wKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE11dGF0aW9uQ2FjaGU7XG59KFN1YnNjcmliYWJsZSk7IiwgImltcG9ydCB7IGlzQ2FuY2VsYWJsZSB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBnZXRBYm9ydENvbnRyb2xsZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKSB7XG4gIHJldHVybiB7XG4gICAgb25GZXRjaDogZnVuY3Rpb24gb25GZXRjaChjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmZldGNoRm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfY29udGV4dCRmZXRjaE9wdGlvbnMsIF9jb250ZXh0JGZldGNoT3B0aW9uczIsIF9jb250ZXh0JGZldGNoT3B0aW9uczMsIF9jb250ZXh0JGZldGNoT3B0aW9uczQsIF9jb250ZXh0JHN0YXRlJGRhdGEsIF9jb250ZXh0JHN0YXRlJGRhdGEyO1xuXG4gICAgICAgIHZhciByZWZldGNoUGFnZSA9IChfY29udGV4dCRmZXRjaE9wdGlvbnMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnMyID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMyLnJlZmV0Y2hQYWdlO1xuICAgICAgICB2YXIgZmV0Y2hNb3JlID0gKF9jb250ZXh0JGZldGNoT3B0aW9uczMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnM0ID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zMy5tZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zNC5mZXRjaE1vcmU7XG4gICAgICAgIHZhciBwYWdlUGFyYW0gPSBmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5wYWdlUGFyYW07XG4gICAgICAgIHZhciBpc0ZldGNoaW5nTmV4dFBhZ2UgPSAoZmV0Y2hNb3JlID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE1vcmUuZGlyZWN0aW9uKSA9PT0gJ2ZvcndhcmQnO1xuICAgICAgICB2YXIgaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSA9IChmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5kaXJlY3Rpb24pID09PSAnYmFja3dhcmQnO1xuICAgICAgICB2YXIgb2xkUGFnZXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEgPSBjb250ZXh0LnN0YXRlLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRzdGF0ZSRkYXRhLnBhZ2VzKSB8fCBbXTtcbiAgICAgICAgdmFyIG9sZFBhZ2VQYXJhbXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEyID0gY29udGV4dC5zdGF0ZS5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkc3RhdGUkZGF0YTIucGFnZVBhcmFtcykgfHwgW107XG4gICAgICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBnZXRBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgdmFyIGFib3J0U2lnbmFsID0gYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB2YXIgbmV3UGFnZVBhcmFtcyA9IG9sZFBhZ2VQYXJhbXM7XG4gICAgICAgIHZhciBjYW5jZWxsZWQgPSBmYWxzZTsgLy8gR2V0IHF1ZXJ5IGZ1bmN0aW9uXG5cbiAgICAgICAgdmFyIHF1ZXJ5Rm4gPSBjb250ZXh0Lm9wdGlvbnMucXVlcnlGbiB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHF1ZXJ5Rm4nKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgYnVpbGROZXdQYWdlcyA9IGZ1bmN0aW9uIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cykge1xuICAgICAgICAgIG5ld1BhZ2VQYXJhbXMgPSBwcmV2aW91cyA/IFtwYXJhbV0uY29uY2F0KG5ld1BhZ2VQYXJhbXMpIDogW10uY29uY2F0KG5ld1BhZ2VQYXJhbXMsIFtwYXJhbV0pO1xuICAgICAgICAgIHJldHVybiBwcmV2aW91cyA/IFtwYWdlXS5jb25jYXQocGFnZXMpIDogW10uY29uY2F0KHBhZ2VzLCBbcGFnZV0pO1xuICAgICAgICB9OyAvLyBDcmVhdGUgZnVuY3Rpb24gdG8gZmV0Y2ggYSBwYWdlXG5cblxuICAgICAgICB2YXIgZmV0Y2hQYWdlID0gZnVuY3Rpb24gZmV0Y2hQYWdlKHBhZ2VzLCBtYW51YWwsIHBhcmFtLCBwcmV2aW91cykge1xuICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnQ2FuY2VsbGVkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3VuZGVmaW5lZCcgJiYgIW1hbnVhbCAmJiBwYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGFnZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBjb250ZXh0LnF1ZXJ5S2V5LFxuICAgICAgICAgICAgc2lnbmFsOiBhYm9ydFNpZ25hbCxcbiAgICAgICAgICAgIHBhZ2VQYXJhbTogcGFyYW0sXG4gICAgICAgICAgICBtZXRhOiBjb250ZXh0Lm1ldGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciBxdWVyeUZuUmVzdWx0ID0gcXVlcnlGbihxdWVyeUZuQ29udGV4dCk7XG4gICAgICAgICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUocXVlcnlGblJlc3VsdCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHF1ZXJ5Rm5SZXN1bHQpKSB7XG4gICAgICAgICAgICB2YXIgcHJvbWlzZUFzQW55ID0gcHJvbWlzZTtcbiAgICAgICAgICAgIHByb21pc2VBc0FueS5jYW5jZWwgPSBxdWVyeUZuUmVzdWx0LmNhbmNlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcHJvbWlzZTsgLy8gRmV0Y2ggZmlyc3QgcGFnZT9cblxuICAgICAgICBpZiAoIW9sZFBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2UoW10pO1xuICAgICAgICB9IC8vIEZldGNoIG5leHQgcGFnZT9cbiAgICAgICAgZWxzZSBpZiAoaXNGZXRjaGluZ05leHRQYWdlKSB7XG4gICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIHBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgICB2YXIgcGFyYW0gPSBtYW51YWwgPyBwYWdlUGFyYW0gOiBnZXROZXh0UGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuICAgICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShvbGRQYWdlcywgbWFudWFsLCBwYXJhbSk7XG4gICAgICAgICAgfSAvLyBGZXRjaCBwcmV2aW91cyBwYWdlP1xuICAgICAgICAgIGVsc2UgaWYgKGlzRmV0Y2hpbmdQcmV2aW91c1BhZ2UpIHtcbiAgICAgICAgICAgICAgdmFyIF9tYW51YWwgPSB0eXBlb2YgcGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJztcblxuICAgICAgICAgICAgICB2YXIgX3BhcmFtID0gX21hbnVhbCA/IHBhZ2VQYXJhbSA6IGdldFByZXZpb3VzUGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuXG4gICAgICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2Uob2xkUGFnZXMsIF9tYW51YWwsIF9wYXJhbSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IC8vIFJlZmV0Y2ggcGFnZXNcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICBuZXdQYWdlUGFyYW1zID0gW107XG4gICAgICAgICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIGNvbnRleHQub3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRGZXRjaEZpcnN0UGFnZSA9IHJlZmV0Y2hQYWdlICYmIG9sZFBhZ2VzWzBdID8gcmVmZXRjaFBhZ2Uob2xkUGFnZXNbMF0sIDAsIG9sZFBhZ2VzKSA6IHRydWU7IC8vIEZldGNoIGZpcnN0IHBhZ2VcblxuICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNob3VsZEZldGNoRmlyc3RQYWdlID8gZmV0Y2hQYWdlKFtdLCBtYW51YWwsIG9sZFBhZ2VQYXJhbXNbMF0pIDogUHJvbWlzZS5yZXNvbHZlKGJ1aWxkTmV3UGFnZXMoW10sIG9sZFBhZ2VQYXJhbXNbMF0sIG9sZFBhZ2VzWzBdKSk7IC8vIEZldGNoIHJlbWFpbmluZyBwYWdlc1xuXG4gICAgICAgICAgICAgICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZEZldGNoTmV4dFBhZ2UgPSByZWZldGNoUGFnZSAmJiBvbGRQYWdlc1tpXSA/IHJlZmV0Y2hQYWdlKG9sZFBhZ2VzW2ldLCBpLCBvbGRQYWdlcykgOiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEZldGNoTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcGFyYW0yID0gbWFudWFsID8gb2xkUGFnZVBhcmFtc1tpXSA6IGdldE5leHRQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBwYWdlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaFBhZ2UocGFnZXMsIG1hbnVhbCwgX3BhcmFtMik7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShidWlsZE5ld1BhZ2VzKHBhZ2VzLCBvbGRQYWdlUGFyYW1zW2ldLCBvbGRQYWdlc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgb2xkUGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvb3AoaSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgIHZhciBmaW5hbFByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2VzOiBwYWdlcyxcbiAgICAgICAgICAgIHBhZ2VQYXJhbXM6IG5ld1BhZ2VQYXJhbXNcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGZpbmFsUHJvbWlzZUFzQW55ID0gZmluYWxQcm9taXNlO1xuXG4gICAgICAgIGZpbmFsUHJvbWlzZUFzQW55LmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgIGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2UpKSB7XG4gICAgICAgICAgICBwcm9taXNlLmNhbmNlbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZmluYWxQcm9taXNlO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0ocGFnZXNbcGFnZXMubGVuZ3RoIC0gMV0sIHBhZ2VzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2aW91c1BhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbShwYWdlc1swXSwgcGFnZXMpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBuZXh0IHBhZ2UuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXh0UGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtICYmIEFycmF5LmlzQXJyYXkocGFnZXMpKSB7XG4gICAgdmFyIG5leHRQYWdlUGFyYW0gPSBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIG5leHRQYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnICYmIG5leHRQYWdlUGFyYW0gIT09IG51bGwgJiYgbmV4dFBhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgcHJldmlvdXMgcGFnZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByZXZpb3VzUGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSAmJiBBcnJheS5pc0FycmF5KHBhZ2VzKSkge1xuICAgIHZhciBwcmV2aW91c1BhZ2VQYXJhbSA9IGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIHByZXZpb3VzUGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJyAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gbnVsbCAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn0iLCAiaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5leHBvcnQgdmFyIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gUmVhY3RET00udW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM7IiwgImltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIH0gZnJvbSAnLi9yZWFjdEJhdGNoZWRVcGRhdGVzJztcbm5vdGlmeU1hbmFnZXIuc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbih1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyk7IiwgImV4cG9ydCB2YXIgbG9nZ2VyID0gY29uc29sZTsiLCAiaW1wb3J0IHsgc2V0TG9nZ2VyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5zZXRMb2dnZXIobG9nZ2VyKTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBkZWZhdWx0Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG52YXIgUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KGZhbHNlKTsgLy8gaWYgY29udGV4dFNoYXJpbmcgaXMgb24sIHdlIHNoYXJlIHRoZSBmaXJzdCBhbmQgYXQgbGVhc3Qgb25lXG4vLyBpbnN0YW5jZSBvZiB0aGUgY29udGV4dCBhY3Jvc3MgdGhlIHdpbmRvd1xuLy8gdG8gZW5zdXJlIHRoYXQgaWYgUmVhY3QgUXVlcnkgaXMgdXNlZCBhY3Jvc3Ncbi8vIGRpZmZlcmVudCBidW5kbGVzIG9yIG1pY3JvZnJvbnRlbmRzIHRoZXkgd2lsbFxuLy8gYWxsIHVzZSB0aGUgc2FtZSAqKmluc3RhbmNlKiogb2YgY29udGV4dCwgcmVnYXJkbGVzc1xuLy8gb2YgbW9kdWxlIHNjb3BpbmcuXG5cbmZ1bmN0aW9uIGdldFF1ZXJ5Q2xpZW50Q29udGV4dChjb250ZXh0U2hhcmluZykge1xuICBpZiAoY29udGV4dFNoYXJpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoIXdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dCkge1xuICAgICAgd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0ID0gZGVmYXVsdENvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dDtcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0Q29udGV4dDtcbn1cblxuZXhwb3J0IHZhciB1c2VRdWVyeUNsaWVudCA9IGZ1bmN0aW9uIHVzZVF1ZXJ5Q2xpZW50KCkge1xuICB2YXIgcXVlcnlDbGllbnQgPSBSZWFjdC51c2VDb250ZXh0KGdldFF1ZXJ5Q2xpZW50Q29udGV4dChSZWFjdC51c2VDb250ZXh0KFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQpKSk7XG5cbiAgaWYgKCFxdWVyeUNsaWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gUXVlcnlDbGllbnQgc2V0LCB1c2UgUXVlcnlDbGllbnRQcm92aWRlciB0byBzZXQgb25lJyk7XG4gIH1cblxuICByZXR1cm4gcXVlcnlDbGllbnQ7XG59O1xuZXhwb3J0IHZhciBRdWVyeUNsaWVudFByb3ZpZGVyID0gZnVuY3Rpb24gUXVlcnlDbGllbnRQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjbGllbnQgPSBfcmVmLmNsaWVudCxcbiAgICAgIF9yZWYkY29udGV4dFNoYXJpbmcgPSBfcmVmLmNvbnRleHRTaGFyaW5nLFxuICAgICAgY29udGV4dFNoYXJpbmcgPSBfcmVmJGNvbnRleHRTaGFyaW5nID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY29udGV4dFNoYXJpbmcsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgY2xpZW50Lm1vdW50KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsaWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgfSwgW2NsaWVudF0pO1xuICB2YXIgQ29udGV4dCA9IGdldFF1ZXJ5Q2xpZW50Q29udGV4dChjb250ZXh0U2hhcmluZyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHRTaGFyaW5nXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2xpZW50XG4gIH0sIGNoaWxkcmVuKSk7XG59OyIsICJcbmltcG9ydCB7IGNyZWF0ZUVudGl0eVRyZWUgfSBmcm9tIFwiLi9FbnRpdHlUcmVlV2lkZ2V0XCJcblxud2luZG93WydPTFNXaWRnZXRzJ10gPSB7XG4gICAgY3JlYXRlRW50aXR5VHJlZVxufVxuXG5leHBvcnQgeyBjcmVhdGVFbnRpdHlUcmVlIH1cbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtLCBFdWlQYW5lbCwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7QWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uKHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gIGZ1bmN0aW9uIHJlbmRlckFsdExhYmVsKCkge1xuICAgIGlmIChwcm9wcy5zeW5vbnltcyAmJiBwcm9wcy5zeW5vbnltcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcHJvcHMuc3lub255bXMubWFwKCh2YWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgIDxFdWlGbGV4SXRlbSBrZXk9e3ZhbHVlICsgaW5kZXh9Pnt2YWx1ZX08L0V1aUZsZXhJdGVtPlxuICAgICAgKSk7XG4gICAgfVxuICAgIHJldHVybiA8RXVpVGV4dD5ObyBhbHRlcm5hdGl2ZSBuYW1lcyBleGlzdC48L0V1aVRleHQ+O1xuICB9XG5cbiAgLy8gVXNpbmcgcmVpZmljYXRpb24vcGFzc2luZyB0aGUgRW50aXR5IGNsYXNzIGNvdWxkIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvblxuICAvLyBmdW5jdGlvbiByZW5kZXJBbHRMYWJlbChlbnRpdHk6IEVudGl0eSkge1xuICAvLyAgIGlmIChlbnRpdHkuZ2V0U3lub255bXMoKS5sZW5ndGggPiAwKSB7XG4gIC8vICAgICByZXR1cm4gZW50aXR5LmdldFN5bm9ueW1zKCkubWFwKChyZjogUmVpZmllZDxhbnk+LCBpbmRleDogbnVtYmVyKSA9PiAoXG4gIC8vICAgICAgIDxwIGtleT17cmYudmFsdWUgKyBpbmRleH0+e2dldFJlaWZpZWRKU1goZW50aXR5LCByZiwgYXBpKX08L3A+XG4gIC8vICAgICApKTtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIDxFdWlUZXh0Pk5vIGFsdGVybmF0aXZlIG5hbWVzIGV4aXN0LjwvRXVpVGV4dD47XG4gIC8vIH1cblxuICByZXR1cm4gKFxuICAgIDxFdWlQYW5lbD5cbiAgICAgIDxFdWlGbGV4R3JvdXAgc3R5bGU9e3sgcGFkZGluZzogMTAgfX0gZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgIHtyZW5kZXJBbHRMYWJlbCgpfVxuICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgPC9FdWlQYW5lbD5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSwgRXVpUGFuZWwsIEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0Nyb3NzUmVmUHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24ocHJvcHM6IENyb3NzUmVmUHJlc2VudGF0aW9uUHJvcHMpIHtcblxuICBmdW5jdGlvbiByZW5kZXJDcm9zc1JlZnMoY3Jvc3NyZWZzOiBhbnkpIHtcbiAgICBpZiAoY3Jvc3NyZWZzICYmIGNyb3NzcmVmcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3Jvc3NyZWZzPy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4gKFxuICAgICAgICA8RXVpRmxleEl0ZW0ga2V5PXtpbmRleH0+XG4gICAgICAgICAge2l0ZW19XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICApKTtcbiAgICB9XG4gICAgcmV0dXJuIDxFdWlUZXh0Pk5vIGNyb3NzIHJlZmVyZW5jZXMgZXhpc3QuPC9FdWlUZXh0PjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEV1aVBhbmVsPlxuICAgICAgPD5cbiAgICAgICAgPEV1aUZsZXhHcm91cCBzdHlsZT17eyBwYWRkaW5nOiA3IH19IGRpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIHtyZW5kZXJDcm9zc1JlZnMocHJvcHMuY3Jvc3NyZWZzKX1cbiAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICA8Lz5cbiAgICA8L0V1aVBhbmVsPlxuICApO1xufVxuXG5leHBvcnQgeyBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCB7RXVpUGFuZWwsIEV1aVByb3ZpZGVyLCBFdWlUcmVlVmlld30gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvdHJlZV92aWV3L3RyZWVfdmlld1wiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBmZXRjaF9kYXRhLCBnZXRfdXJsX3ByZWZpeCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvaGllcmFyY2h5X3dpZGdldF9kZXByZWNhdGVkXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbi8qKlxuICogUmVzcG9uc2UgZnJvbSBPTFNcbiAqL1xuaW50ZXJmYWNlIFNlbWFudGljUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBwYXJlbnQ6IHN0cmluZztcbiAgaXJpOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgLyogc3RhdGU6IHtcbiAgICBvcGVuZWQ6IGJvb2xlYW47XG4gIH07ICovXG4gIGNoaWxkcmVuOiBib29sZWFuO1xuICAvKiBhX2F0dHI6IHtcbiAgICBpcmk6IHN0cmluZztcbiAgICBvbnRvbG9neV9uYW1lOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBjbGFzczogc3RyaW5nO1xuICB9OyAqL1xuICAvLyBvbnRvbG9neV9uYW1lOiBzdHJpbmc7XG59XG5jbGFzcyBIaWVyYXJjaHlUcmVlIGltcGxlbWVudHMgTm9kZSB7XG4gIHVybDogc3RyaW5nO1xuICBpcmk6IHN0cmluZztcbiAgbGFiZWw6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaWQ6IHN0cmluZztcbiAgaXNFeHBhbmRlZD86IGJvb2xlYW4gPSB0cnVlO1xuICBjaGlsZHJlbjogQXJyYXk8SGllcmFyY2h5VHJlZT4gPSBbXTtcbiAgaWNvbjogUmVhY3QuUmVhY3RFbGVtZW50ID0gKDw+KzwvPik7XG4gIGljb25XaGVuRXhwYW5kZWQ6IFJlYWN0LlJlYWN0RWxlbWVudCA9ICg8Pi08Lz4pO1xuICBjb25zdHJ1Y3RvcihsYWJlbDogUmVhY3QuUmVhY3ROb2RlLCBpZDogc3RyaW5nLCB1cmw6IHN0cmluZywgaXJpOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuaXJpID0gaXJpO1xuICAgIHRoaXMudXJsID0gdXJsO1xuICB9XG4gIHNldGNoaWxkKGNoaWxkOiBIaWVyYXJjaHlUcmVlKSB7XG4gICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmljb24gPSA8Pis8Lz47XG4gICAgfVxuICB9XG4gIGlzX3Jvb3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWQgPT09IFwiI1wiO1xuICB9XG4gIHRvX3N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxhYmVsICsgXCJbIFwiICsgdGhpcy5jaGlsZHJlbi5tYXAoKHZhbHVlKSA9PiB2YWx1ZS50b19zdHJpbmcoKSkgKyBcIiBdXCJcbiAgICApO1xuICB9XG4gIGNhbGxiYWNrKCkgeyAvL1RPRE8gaGFuZGxlIHZpYSBPbHNBcGkuZ2V0VGVybVRyZWUgd2l0aCBjaGlsZCBwYXJhbVxuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IGFwaV9kYXRhX29uY2xpY2sgPVxuICAgICAgdGhpcy51cmwgK1xuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmlyaSkpICtcbiAgICAgIFwiL2pzdHJlZS9jaGlsZHJlbi9cIiArXG4gICAgICB0aGlzLmlkO1xuICAgIGZldGNoX2RhdGEoYXBpX2RhdGFfb25jbGljaykudGhlbigocmVzKSA9PiB7XG4gICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICBjcmVhdGVfdHJlZSh0aGlzLCByZXMsIHRoaXMudXJsKTtcbiAgICB9KTtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuY29uc3QgY3JlYXRlX3RyZWUgPSAoXG4gIHRyZWU6IEhpZXJhcmNoeVRyZWUsXG4gIGFycjogQXJyYXk8U2VtYW50aWNSZXNwb25zZT4sXG4gIHVybDogc3RyaW5nXG4pID0+IHtcbiAgYXJyXG4gICAgLmZpbHRlcigodmFsdWUpID0+IHZhbHVlLnBhcmVudCA9PT0gdHJlZS5pZClcbiAgICAuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgIHRyZWUuc2V0Y2hpbGQoXG4gICAgICAgIG5ldyBIaWVyYXJjaHlUcmVlKHZhbHVlLnRleHQsIHZhbHVlLmlkLCB1cmwsIHZhbHVlLmlyaSlcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdHJlZS5jaGlsZHJlbi5tYXAoKHZhbHVlKSA9PiBjcmVhdGVfdHJlZSh2YWx1ZSwgYXJyLCB1cmwpKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZFByb3BzIHtcbiAgaXJpPzogc3RyaW5nO1xuICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gIGFwaTogc3RyaW5nO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRUcmVlKG9sc0FwaTogT2xzQXBpLCBvbnRvbG9neUlEOiBzdHJpbmcsIGlyaT86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb2xzQXBpLmdldFRlcm1UcmVlKHtvbnRvbG9neUlkOiBvbnRvbG9neUlELCB0ZXJtSXJpOiBpcml9LCB7dmlld01vZGU6IFwiQWxsXCIsIHNpYmxpbmdzOiBmYWxzZX0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUubG9nKGVycm9yKSk7XG4gIGlmIChpcmkpIHJldHVybiByZXNwb25zZVxuICBlbHNlIHsgLy9yb290cyBoYXZlIGJlZW4gcXVlcmllZCwgYW5kIHRoZSByZXNwb25zZSBuZWVkcyByZXN0cnVjdHVyaW5nIHRvIGJlY29tZSBTZW1hbnRpY1Jlc3BvbnNlXG4gICAgcmV0dXJuIHJlc3BvbnNlLl9lbWJlZGRlZC50ZXJtcy5tYXAoXG4gICAgICAoeDogeyBpcmk6IHN0cmluZywgbGFiZWw6IHN0cmluZywgaGFzX2NoaWxkcmVuOiBib29sZWFuIH0sIGk6IG51bWJlcikgPT5cbiAgICAgICAgKHtpZDogKCsraSkudG9TdHJpbmcoKSwgcGFyZW50OiAnIycsIGlyaTogeC5pcmksIHRleHQ6IHgubGFiZWwsIGNoaWxkcmVuOiB4Lmhhc19jaGlsZHJlbn0pXG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkID0gKHByb3BzOiBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkUHJvcHMpID0+IHtcbiAgY29uc3QgeyBpcmksIG9udG9sb2d5SWQsIGFwaSB9ID0gcHJvcHM7XG4gIGNvbnN0IFt0cmVlSXRlbXMsIHNldFRyZWVJdGVtc10gPSB1c2VTdGF0ZTxIaWVyYXJjaHlUcmVlW10+KCk7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcbiAgY29uc3QgbGlua1RvU2VsZiA9IGFwaStcIm9udG9sb2dpZXMvXCIrb250b2xvZ3lJZCtcIi90ZXJtcy9cIlxuXG4gIGNvbnN0IGZldGNoQ2hpbGRyZW4gPSBhc3luYyAoY2hpbGQ6IEhpZXJhcmNoeVRyZWUpID0+IHsgLy9jb3VsZCBiZSBnaXZlbiB0byBIaWVyYXJjaHlUcmVlIG5vZGVzIGZvciBvbkNsaWNrIGNhbGxiYWNrc1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb2xzQXBpLmdldFRlcm1UcmVlKHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcml9LCB7Y2hpbGQ6IGNoaWxkLmlkfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmxvZyhlcnJvcikpO1xuICAgIGNoaWxkLmNoaWxkcmVuID0gW107XG4gICAgY3JlYXRlX3RyZWUoY2hpbGQsIHJlc3BvbnNlLCBnZXRfdXJsX3ByZWZpeChsaW5rVG9TZWxmKSk7XG4gIH1cblxuICAvL2luaXRpYWwgdHJlZSBxdWVyeVxuICB1c2VRdWVyeTxBcnJheTxTZW1hbnRpY1Jlc3BvbnNlPj4oW2FwaSwgXCJnZXRUZXJtVHJlZVwiLCBvbnRvbG9neUlkLCBpcmldLCAoKSA9PiB7XG4gICAgcmV0dXJuIGdldFRyZWUob2xzQXBpLCBvbnRvbG9neUlkLCBpcmkpXG4gICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgSGllcmFyY2h5VHJlZShcIiNcIiwgXCIjXCIsIFwiXCIsIFwiXCIpO1xuICAgICAgICBpZiAocmVzKSBjcmVhdGVfdHJlZShyb290LCByZXMsIGdldF91cmxfcHJlZml4KGxpbmtUb1NlbGYpKTtcbiAgICAgICAgc2V0VHJlZUl0ZW1zKHJvb3QuY2hpbGRyZW4pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSk7XG4gIH0pO1xuICByZXR1cm4gKFxuICAgIDxFdWlQYW5lbD5cbiAgICAgIHt0cmVlSXRlbXMgJiYgKFxuICAgICAgICA8RXVpVHJlZVZpZXdcbiAgICAgICAgICBleHBhbmRCeURlZmF1bHQ9e3RydWV9XG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkhpZXJhcmNoeVRhYlwiXG4gICAgICAgICAgaXRlbXM9e3RyZWVJdGVtc31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9FdWlQYW5lbD5cbiAgKTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQocHJvcHM6IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkKHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkKHByb3BzOiBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkUHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8SGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZFxuICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBjcmVhdGVIaWVyYXJjaHlEZXByZWNhdGVkLCBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkIH07IiwgImV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc05hbWUoY2xhc3NpZDogc3RyaW5nKSB7XG4gIHJldHVybiBmZXRjaChcbiAgICBcImh0dHBzOi8vc2VtYW50aWNsb29rdXAuemJtZWQuZGUvb2xzL2FwaS9vbnRvbG9naWVzL1wiICtcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChjbGFzc2lkKSxcbiAgICB7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9XG4gIClcbiAgICAudGhlbigocykgPT4gcy5qc29uKCkpXG4gICAgLnRoZW4oKHMpID0+IHtcbiAgICAgIHJldHVybiB7IGNsYXNzSUQ6IGNsYXNzaWQsIHByZWZMYWJlbDogcy5jb25maWc/LnRpdGxlIH07XG4gICAgfSlcbiAgICAuY2F0Y2goKHMpID0+IHtcbiAgICAgIHJldHVybiB7IGNsYXNzSUQ6IGNsYXNzaWQsIHByZWZMYWJlbDogdW5kZWZpbmVkIH07XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaENvbmNlcHRCeUlkKGlkOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZldGNoKFxuICAgIFwiaHR0cHM6Ly9zZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9vbHMvYXBpL3Rlcm1zL1wiICtcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoaWQpKSxcbiAgICB7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9XG4gIClcbiAgICAudGhlbigocykgPT4gcy5qc29uKCkpXG4gICAgLnRoZW4oKHMpID0+IHtcbiAgICAgIHJldHVybiB7IGNvbmNlcHRJZDogaWQsIGNvbmNlcHQ6IHM/Ll9lbWJlZGRlZD8udGVybXNbMF0gfTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1dG9jb21wbGV0ZUNvbmNlcHQoXG4gIHRleHQ6IHN0cmluZyxcbiAgb250b2xvZ3k6IHN0cmluZyB8IHVuZGVmaW5lZFxuKSB7XG4gIGxldCBxdWVydCA9IFwiXCI7XG4gIGlmIChvbnRvbG9neSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcXVlcnQgPSBcIiZvbnRvbG9neT1cIiArIG9udG9sb2d5O1xuICB9XG4gIHJldHVybiBmZXRjaChcbiAgICBcImh0dHBzOi8vc2VtYW50aWNsb29rdXAuemJtZWQuZGUvb2xzL2FwaS9zZWxlY3Q/cXVlcnlGaWVsZHM9bGFiZWwsc3lub255bSxzaG9ydF9mb3JtLG9ib19pZCZncm91cEZpZWxkPXRydWUmdHlwZT1jbGFzcyZxPVwiICtcbiAgICAgIHRleHQgK1xuICAgICAgcXVlcnQsXG4gICAge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgfVxuICApXG4gICAgLnRoZW4oKHMpID0+IHMuanNvbigpKVxuICAgIC50aGVuKChzKSA9PiB7XG4gICAgICByZXR1cm4gcz8ucmVzcG9uc2U/LmRvY3MubWFwKChwOiBhbnkpID0+IG1hcE9sc1RvSXJpQW5kTmFtZVR1cGxlKHApKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbWFwT2xzVG9JcmlBbmROYW1lVHVwbGUoaXRlbTogYW55KSB7XG4gIHJldHVybiB7IGlyaTogaXRlbT8uaXJpLCBsYWJlbDogaXRlbT8ubGFiZWwgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGZldGNoX2RhdGEgPSAodXJsOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIChcbiAgICBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH0pXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuanNvbigpKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vZGUvaGFuZGxlLWNhbGxiYWNrLWVyclxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSlcbiAgKTtcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB1cmwgR2V0IHVybCB3aXRoIGh0dHAgb3IgaHR0cHMgcHJvdG9jb2xcbiAqIEByZXR1cm5zIGNvbmNhdGluYXRlIHMgdG8gaHR0cFxuICovXG5leHBvcnQgY29uc3QgZml4X3VybCA9ICh1cmw6IHN0cmluZykgPT4ge1xuICBpZiAodXJsLnN1YnN0cigwLCA1KSA9PT0gXCJodHRwOlwiKSB7XG4gICAgcmV0dXJuIHVybC5yZXBsYWNlKFwiaHR0cFwiLCBcImh0dHBzXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB1cmxcbiAqIEByZXR1cm5zIHJldHVybiB1cmwgZnJvbSBodHRwcyB0byAvdGVybXNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldF91cmxfcHJlZml4ID0gKHVybDogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG4gIGlmICh1cmwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwiXCI7XG4gIHJldHVybiBmaXhfdXJsKHVybC5zdWJzdHJpbmcoMCwgdXJsLnNlYXJjaChcIi90ZXJtc1wiKSArIDcpKTtcbn07IiwgImltcG9ydCBSZWFjdCwge1JlYWN0RWxlbWVudH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUNhcmQsIEV1aUZsZXhJdGVtLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVNwYWNlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7T250b2xvZ3ksIFRoaW5nfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtjYXBpdGFsaXplLCBkZUNhbWVsQ2FzZSwgZGVVbmRlcnNjb3JlLCByYW5kb21TdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtnZXRFbnRpdHlMaW5rSlNYLCBnZXRSZWlmaWVkSlNYfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQge2dldEVycm9yTWVzc2FnZVRvRGlzcGxheX0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge09udG9sb2d5SW5mb1dpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0hBU19USVRMRSA9IHRydWU7XG5cbmZ1bmN0aW9uIE9udG9sb2d5SW5mb1dpZGdldChwcm9wczogT250b2xvZ3lJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBvbnRvbG9neUlkLCBhcGksIHBhcmFtZXRlciwgaGFzVGl0bGUgPSBERUZBVUxUX0hBU19USVRMRSwgdXNlTGVnYWN5LCBzaG93QmFkZ2VzLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBvbnRvbG9neSxcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ09udG9sb2d5LFxuICAgIGlzU3VjY2VzczogaXNTdWNjZXNzT250b2xvZ3ksXG4gICAgaXNFcnJvcjogaXNFcnJvck9udG9sb2d5LFxuICAgIGVycm9yOiBlcnJvck9udG9sb2d5LFxuICB9ID0gdXNlUXVlcnkoXG4gICAgICBbXG4gICAgICAgIFwib250b2xvZ3lJbmZvXCIsXG4gICAgICAgIHByb3BzXG4gICAgICBdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICByZXR1cm4gb2xzQXBpLmdldE9udG9sb2d5T2JqZWN0KG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgIH1cbiAgKTtcblxuICBmdW5jdGlvbiBnZXRPbnRvbG9neUlyaVNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHsob250b2xvZ3kuZ2V0SXJpKCkgfHwgb250b2xvZ3kuZ2V0T250b2xvZ3lQdXJsKCkpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5PbnRvbG9neSBJUkk6PC9iPlxuICAgICAgICAgICAgICAgIDxwPjxhIGlkPXtcIm9udG9sb2d5SXJpXCJ9IGhyZWY9e29udG9sb2d5LmdldElyaSgpIHx8IG9udG9sb2d5LmdldE9udG9sb2d5UHVybCgpfT5cbiAgICAgICAgICAgICAgICAgIHtvbnRvbG9neS5nZXRJcmkoKSB8fCBvbnRvbG9neS5nZXRPbnRvbG9neVB1cmwoKX1cbiAgICAgICAgICAgICAgICA8L2E+PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFZlcnNpb25JcmlTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldFZlcnNpb25JcmkoKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+VmVyc2lvbiBJUkk6PC9iPlxuICAgICAgICAgICAgICAgIDxwPjxhIGlkPXtcInZlcnNpb25JcmlcIn0gaHJlZj17b250b2xvZ3kuZ2V0VmVyc2lvbklyaSgpfT5cbiAgICAgICAgICAgICAgICAgIHtvbnRvbG9neS5nZXRWZXJzaW9uSXJpKCl9XG4gICAgICAgICAgICAgICAgPC9hPjwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRMYXN0TG9hZFNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5MYXN0IGxvYWRlZDo8L2I+XG4gICAgICAgICAgICAgICAgPHA+e25ldyBEYXRlKG9udG9sb2d5LmdldFNvdXJjZUZpbGVUaW1lc3RhbXAoKSkudG9TdHJpbmcoKX08L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0T250b2xvZ3lJZFNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5PbnRvbG9neSBJRDo8L2I+XG4gICAgICAgICAgICAgICAgPHA+e29udG9sb2d5LmdldE9udG9sb2d5SWQoKX08L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VmVyc2lvblNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0VmVyc2lvbigpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5WZXJzaW9uOjwvYj5cbiAgICAgICAgICAgICAgICA8cD57b250b2xvZ3kuZ2V0VmVyc2lvbigpfTwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXROdW1DbGFzc2VzU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXROdW1DbGFzc2VzKCkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPk51bWJlciBvZiBjbGFzc2VzOjwvYj5cbiAgICAgICAgICAgICAgICA8cD57b250b2xvZ3kuZ2V0TnVtQ2xhc3NlcygpLnRvTG9jYWxlU3RyaW5nKCl9PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENyZWF0b3JzU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXRDcmVhdG9ycygpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+Q3JlYXRvcnM6PC9iPlxuICAgICAgICAgICAgICAgIHtvbnRvbG9neS5nZXRDcmVhdG9ycygpLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICA8dWw+e29udG9sb2d5LmdldENyZWF0b3JzKCkubWFwKChjcmVhdG9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e2NyZWF0b3IgKyByYW5kb21TdHJpbmcoKX0+e2dldEVudGl0eUxpbmtKU1gob250b2xvZ3ksIG9udG9sb2d5LmdldExpbmtlZEVudGl0aWVzKCksIGNyZWF0b3IsIGFwaSwgc2hvd0JhZGdlcyl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICA8cD57Z2V0RW50aXR5TGlua0pTWChvbnRvbG9neSwgb250b2xvZ3kuZ2V0TGlua2VkRW50aXRpZXMoKSwgb250b2xvZ3kuZ2V0Q3JlYXRvcnMoKVswXSwgYXBpLCBzaG93QmFkZ2VzKX08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjxFdWlTcGFjZXIvPjwvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFubm90YXRpb25TZWN0aW9uKHRoaW5nOiBUaGluZykgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge3RoaW5nLmdldEFubm90YXRpb25QcmVkaWNhdGVzKCkubWFwKChhbm5vS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5ub3MgPSB0aGluZy5nZXRBbm5vdGF0aW9uQnlJZChhbm5vS2V5KTtcbiAgICAgICAgICAgICAgICBpZihhbm5vcy5sZW5ndGggPT0gMCkgcmV0dXJuIDw+PC8+O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0ga2V5PXthbm5vS2V5fT5cbiAgICAgICAgICAgICAgICAgIDxiPntjYXBpdGFsaXplKGRlVW5kZXJzY29yZShkZUNhbWVsQ2FzZSh0aGluZy5nZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGFubm9LZXkpKSkpfTo8L2I+XG4gICAgICAgICAgICAgICAgICB7YW5ub3MubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgPHVsPnthbm5vcy5tYXAoKGFubm90YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gaWQ9e2Fubm90YXRpb24udmFsdWV9PntnZXRSZWlmaWVkSlNYKHRoaW5nLCBhbm5vdGF0aW9uLCBhcGksIHNob3dCYWRnZXMpfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICA8cCBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UmVpZmllZEpTWCh0aGluZywgYW5ub3NbMF0sIGFwaSwgc2hvd0JhZGdlcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxFdWlDYXJkXG4gICAgICAgICAgICB0aXRsZT17aGFzVGl0bGUgPyBcIk9udG9sb2d5IEluZm9ybWF0aW9uXCIgOiBcIlwifVxuICAgICAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICBzdHlsZT17cHJvcHMud2lkdGggJiYge3dpZHRoOiBwcm9wcy53aWR0aH19XG4gICAgICAgID5cblxuICAgICAgICAgIHtpc0xvYWRpbmdPbnRvbG9neSAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17J3MnfS8+fVxuICAgICAgICAgIHtpc1N1Y2Nlc3NPbnRvbG9neSAmJiBvbnRvbG9neSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT5cblxuICAgICAgICAgICAgICAgIHtnZXRPbnRvbG9neUlyaVNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgIHtnZXRWZXJzaW9uSXJpU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAge2dldExhc3RMb2FkU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgey8qIFRPRE86IERvIHdlIHdhbnQgdGhlIGZvbGxvd2luZyBvbiB0aGUgaW5mb3JtYXRpb24gd2lkZ2V0P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWJpIGRvZXMgbm90IGhhdmUgdGhlbSB0aGVyZSwgYnV0IG9uIG90aGVyIHBhcnRzIG9mIHRoZSBlbnRpdHkgcGFnZSAqL1xuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldE9udG9sb2d5SWRTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAge2dldFZlcnNpb25TZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAge2dldE51bUNsYXNzZXNTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAgey8qe2dldENyZWF0b3JzU2VjdGlvbihlbnRpdHlJbmZvKX0qLyAvKiByZWR1bmRhbnQgYXMgaXQncyBsaXN0ZWQgaW4gYW5ub3RhdGlvbnMgYW55d2F5ICovfVxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAge2dldEFubm90YXRpb25TZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgIH1cbiAgICAgICAgICB7aXNFcnJvck9udG9sb2d5ICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3JPbnRvbG9neSwgXCJpbmZvcm1hdGlvblwiKX08L0V1aVRleHQ+fVxuICAgICAgICA8L0V1aUNhcmQ+XG4gICAgICA8Lz5cbiAgKTtcblxufVxuXG5mdW5jdGlvbiBjcmVhdGVPbnRvbG9neUluZm8ocHJvcHM6IE9udG9sb2d5SW5mb1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRPbnRvbG9neUluZm9XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZE9udG9sb2d5SW5mb1dpZGdldChwcm9wczogT250b2xvZ3lJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8T250b2xvZ3lJbmZvV2lkZ2V0XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgIHNob3dCYWRnZXM9e3Byb3BzLnNob3dCYWRnZXN9XG4gICAgICAgICAgICAgIGhhc1RpdGxlPXtwcm9wcy5oYXNUaXRsZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IE9udG9sb2d5SW5mb1dpZGdldCwgY3JlYXRlT250b2xvZ3lJbmZvIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2FwaS9PbHNBcGknXG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSAncmVhY3QtcXVlcnknXG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7QWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IGlzRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9BbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIEFsdGVybmF0aXZlTmFtZVRhYldpZGdldChwcm9wczogQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCB1c2VMZWdhY3kgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxUaGluZz4oXG4gICAgW1wiYWx0ZXJuYXRpdmVOYW1lVGFiXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBpc0VudGl0eShkYXRhKSAmJlxuICAgICAgICA8QWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIHN5bm9ueW1zPXtkYXRhLmdldFN5bm9ueW1zKCkubWFwKHN5bm9ueW0gPT4gc3lub255bS52YWx1ZSl9IC8+fVxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImFsdGVybmF0aXZlIG5hbWVzXCIpfTwvRXVpVGV4dD59XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYihwcm9wczogQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0LCBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgQ3Jvc3NSZWZXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IGlzRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0Nyb3NzUmVmVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuZnVuY3Rpb24gQ3Jvc3NSZWZUYWJXaWRnZXQocHJvcHM6IENyb3NzUmVmV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCB1c2VMZWdhY3kgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxUaGluZz4oXG4gICAgW1wiY3Jvc3NSZWZUYWJcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmIGlzRW50aXR5KGRhdGEpICYmXG4gICAgICAgIDxDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiBjcm9zc3JlZnM9e1JlaWZpZWQuZnJvbUpzb24oZGF0YS5nZXRDcm9zc1JlZmVyZW5jZXMoKSkubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfSl9IC8+fVxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImNyb3NzIHJlZmVyZW5jZXNcIil9PC9FdWlUZXh0Pn1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ3Jvc3NSZWZUYWIocHJvcHM6IENyb3NzUmVmV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkQ3Jvc3NSZWZUYWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZENyb3NzUmVmVGFiV2lkZ2V0KHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxDcm9zc1JlZlRhYldpZGdldFxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgQ3Jvc3NSZWZUYWJXaWRnZXQsIGNyZWF0ZUNyb3NzUmVmVGFiIH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZHVjZXJ9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpVGV4dCwgRXVpSWNvbiwgRXVpUHJvdmlkZXIsIEV1aUNhcmR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtIaWVyYXJjaHksIFRyZWVOb2RlfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQge1Nrb3NBcGl9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvU2tvc0FwaVwiO1xuaW1wb3J0IHtIaWVyYXJjaHlCdWlsZGVyfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL0hpZXJhcmNoeUJ1aWxkZXJcIjtcbmltcG9ydCB7T250b1BvcnRhbEFwaX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwaS9PbnRvUG9ydGFsQXBpXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi8uLi9zdHlsZS9zZW1sb29rcC1zdHlsZXMuY3NzXCI7XG5pbXBvcnQge3JhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0hpZXJhcmNoeVdpZGdldFByb3BzLCBFbnRpdHlEYXRhfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge2lzSW5kaXZpZHVhbFR5cGVOYW1lfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNvbnN0IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMgPSB7XG4gICAgSU5DTFVERV9PQlNPTEVURV9FTlRJVElFUzogZmFsc2UsXG4gICAgUFJFRkVSUkVEX1JPT1RTOiBmYWxzZSxcbiAgICBLRUVQX0VYUEFOU0lPTl9TVEFURVM6IGZhbHNlLFxuICAgIFNIT1dfU0lCTElOR1NfT05fSU5JVDogZmFsc2UsXG4gICAgVVNFX0xFR0FDWTogZmFsc2Vcbn0gYXMgY29uc3Q7XG5cbi8vIFRPRE86IHVzZSBvZiBlbnRpdHlUeXBlIGhhcyB0byBiZSByZXZpZXdlZC4gQ3VycmVudGx5IGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZW50aXR5VHlwZSBvZiB0aGUgaGllcmFyY2h5IGFuZCB0aGUgc3BlY2lmaWMgZW50aXR5IGluc2lkZSBpdCBhbHdheXMgbWF0Y2ggKG5vdCBuZWNlc3NhcmlseSB0cnVlIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzLCBidXQgdGhlc2UgaGF2ZSB0byBiZSByZXZpZXdlZCBhbnl3YXlzKVxuZnVuY3Rpb24gVHJlZUxpbmsocHJvcHM6IHtlbnRpdHlEYXRhOiBFbnRpdHlEYXRhLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ/OiBzdHJpbmcsIG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgb25OYXZpZ2F0ZVRvRW50aXR5PzogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogRW50aXR5RGF0YSkgPT4gdm9pZCwgb25OYXZpZ2F0ZVRvT250b2xvZ3k/OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlPzogc3RyaW5nLCBlbnRpdHk/OiBFbnRpdHlEYXRhKSA9PiB2b2lkLCBoaWdobGlnaHQ6IGJvb2xlYW59KSB7XG4gICAgbGV0IGRlZmluZWRCeTogc3RyaW5nW10gPSBwcm9wcy5lbnRpdHlEYXRhLmRlZmluZWRCeSB8fCBbXTtcbiAgICBpZihkZWZpbmVkQnkuaW5jbHVkZXMocHJvcHMub250b2xvZ3lJZCkpIGRlZmluZWRCeSA9IFtdO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17cHJvcHMuaGlnaGxpZ2h0ID8gXCJoaWdobGlnaHRcIiA6IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkUmVsYXRpb25Ub1BhcmVudCA9PSBcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9CRk9fMDAwMDA1MFwiICYmXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e21hcmdpbklubGluZVN0YXJ0OiBcIjEuNXB4XCIsIG1hcmdpblRvcDogXCIyLjVweFwifX0gY2xhc3NOYW1lPVwic3Vycm91bmRDaXJjbGVcIj4mbmJzcDtQJm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIiAmJlxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5JbmxpbmVTdGFydDogXCIxLjVweFwiLCBtYXJnaW5Ub3A6IFwiMi41cHhcIn19IGNsYXNzTmFtZT1cInN1cnJvdW5kQ2lyY2xlXCI+STwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5KSBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHkocHJvcHMub250b2xvZ3lJZCwgcHJvcHMuZW50aXR5VHlwZSB8fCBcIlwiLCBwcm9wcy5lbnRpdHlEYXRhKX19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3Byb3BzLmVudGl0eURhdGEubGFiZWwgfHwgcHJvcHMuZW50aXR5RGF0YS5pcml9IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIHtkZWZpbmVkQnkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICB7ZGVmaW5lZEJ5Lm1hcCgoZGVmaW5pbmdPbnRvbG9neSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YCR7cHJvcHMuZW50aXR5RGF0YS5pcml9OiR7ZGVmaW5pbmdPbnRvbG9neX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KGRlZmluaW5nT250b2xvZ3ksIHByb3BzLmVudGl0eVR5cGUgfHwgXCJcIiwgcHJvcHMuZW50aXR5RGF0YSl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57ZGVmaW5pbmdPbnRvbG9neS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIEhpZXJhcmNoeVdpZGdldChwcm9wczogSGllcmFyY2h5V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIGFwaVVybCxcbiAgICAgICAgYmFja2VuZFR5cGUsXG4gICAgICAgIGFwaUtleSxcbiAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neSxcblxuICAgICAgICBpcmksXG4gICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gSElFUkFSQ0hZX1dJREdFVF9ERUZBVUxUX1ZBTFVFUy5JTkNMVURFX09CU09MRVRFX0VOVElUSUVTLFxuICAgICAgICBwcmVmZXJyZWRSb290cyA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuUFJFRkVSUkVEX1JPT1RTLFxuICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzID0gSElFUkFSQ0hZX1dJREdFVF9ERUZBVUxUX1ZBTFVFUy5LRUVQX0VYUEFOU0lPTl9TVEFURVMsXG4gICAgICAgIHNob3dTaWJsaW5nc09uSW5pdCA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuU0hPV19TSUJMSU5HU19PTl9JTklULFxuICAgICAgICB1c2VMZWdhY3kgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLlVTRV9MRUdBQ1ksXG4gICAgfSA9IHByb3BzO1xuXG4gICAgLy8gdXNlZCB0byBtYW51YWxseSByZXJlbmRlciB0aGUgY29tcG9uZW50IG9uIHVwZGF0ZSBvZiBoaWVyYXJjaHkgKGFzIGhpZXJhcmNoeSBvYmplY3QgaXMgbmVzdGVkIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBzdGF0ZSB2YXJpYWJsZSBpdHNlbGYpXG4gICAgY29uc3QgWywgZm9yY2VVcGRhdGVdID0gdXNlUmVkdWNlcih4ID0+IHggKyAxICUgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIDApO1xuXG4gICAgY29uc3QgYXBpIDogSGllcmFyY2h5QnVpbGRlciA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoYmFja2VuZFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwib2xzXCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2xzQXBpKGFwaVVybCk7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNrb3Ntb3NcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTa29zQXBpKGFwaVVybCk7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9udG9wb3J0YWxcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPbnRvUG9ydGFsQXBpKGFwaVVybCwgYXBpS2V5IHx8IFwiXCIpO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2xzQXBpKGFwaVVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFthcGlVcmwsIGJhY2tlbmRUeXBlLCBhcGlLZXldXG4gICAgKTtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogaGllcmFyY2h5LFxuICAgICAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc0hpZXJhcmNoeSxcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICBbXCJoaWVyYXJjaHlTZW1Mb29rUFwiLCBpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHByZWZlcnJlZFJvb3RzLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcywga2VlcEV4cGFuc2lvblN0YXRlcywgc2hvd1NpYmxpbmdzT25Jbml0LCB1c2VMZWdhY3ldLFxuICAgICAgYXN5bmMgZnVuY3Rpb24gZ2V0TmV3SGllcmFyY2h5KCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBhcGkuYnVpbGRIaWVyYXJjaHlXaXRoSXJpKHtcbiAgICAgICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgaXJpOiBpcmksXG4gICAgICAgICAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG4gICAgICAgICAgICAgIHByZWZlcnJlZFJvb3RzOiBwcmVmZXJyZWRSb290cyxcbiAgICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBrZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgICAgICAgICBzaG93U2libGluZ3NPbkluaXQ6IHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgICAgICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHRvZ2dsZU5vZGUgPSB1c2VDYWxsYmFjaygobm9kZTogVHJlZU5vZGUpID0+IHtcbiAgICAgICAgaWYoIShoaWVyYXJjaHkgaW5zdGFuY2VvZiBIaWVyYXJjaHkpKSB0aHJvdyBFcnJvcihcIkhpZXJhcmNoeSBvYmplY3Qgd2FzIHVuZGVmaW5lZCB3aGlsZSB0cnlpbmcgdG8gZXhwYW5kIGEgdHJlZSBub2RlLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXCIpO1xuXG4gICAgICAgIC8vIFRPRE86IGluZGl2aWR1YWwgaGllcmFyY2hpZXMgYXJlIGZyb3plbiBmb3Igbm93IChiZWZvcmUgdW5kb2luZywgY29ycmVjdCBjaGlsZCBsb2FkaW5nIGhhcyB0byBiZSBpbXBsZW1lbnRlZCBmb3IgaW5kaXZpZHVhbCBoaWVyYXJjaGllcylcbiAgICAgICAgaWYoaGllcmFyY2h5LmVudGl0eVR5cGUgJiYgaXNJbmRpdmlkdWFsVHlwZU5hbWUoaGllcmFyY2h5LmVudGl0eVR5cGUpKSByZXR1cm47XG5cbiAgICAgICAgLy8gdG9nZ2xlIGV4cGFuc2lvbiBzdGF0ZSBhbmQgZm9yY2UgY29tcG9uZW50IHRvIHJlcmVuZGVyIGFmdGVyd2FyZFxuICAgICAgICBub2RlLmV4cGFuZGVkID0gIW5vZGUuZXhwYW5kZWQ7XG5cbiAgICAgICAgLy8gZmV0Y2ggbmVlZGVkIGluZm9ybWF0aW9uIGFuZCByZXJlbmRlciBhZ2FpbiBpZiBuZWVkZWRcbiAgICAgICAgaWYobm9kZS5leHBhbmRlZCl7XG4gICAgICAgICAgICBub2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgZm9yY2VVcGRhdGUoKTtcblxuICAgICAgICAgICAgaGllcmFyY2h5LmZldGNoSW5mb3JtYXRpb25Gb3JFeHBhbnNpb24obm9kZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgbm9kZS5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgaGllcmFyY2h5LmNsb3NlTm9kZShub2RlKTtcbiAgICAgICAgfVxuICAgIH0sW2hpZXJhcmNoeV0pXG5cbiAgICBmdW5jdGlvbiByZW5kZXJUcmVlTm9kZShoaWVyYXJjaHk6IEhpZXJhcmNoeSwgbm9kZTogVHJlZU5vZGUsIGRyYXdMaW5lPzogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICA8RXVpVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e2hlaWdodDogXCIyNHB4XCJ9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7cG9zaXRpb246IFwicmVsYXRpdmVcIiwgYm9yZGVyTGVmdDogXCIxcHggZG90dGVkIGJsYWNrXCIsIGJvcmRlckJvdHRvbTogXCIxcHggZG90dGVkIGJsYWNrXCIsIHdpZHRoOiBcIjEycHhcIiwgaGVpZ2h0OiBcIjE2cHhcIiwgbGVmdDogXCI1LjVweFwiLCB0b3A6IFwiLTFweFwifX0+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e3Bvc2l0aW9uOiBcInJlbGF0aXZlXCIsIGJvcmRlckxlZnQ6IGRyYXdMaW5lID8gXCIxcHggZG90dGVkIGJsYWNrXCI6XCJcIiwgd2lkdGg6IFwiMTJweFwiLCBoZWlnaHQ6IFwiOXB4XCIsIGxlZnQ6IFwiNS41cHhcIiwgdG9wOiBcIjBweFwifX0+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e3Bvc2l0aW9uOiBcInJlbGF0aXZlXCIsIHRvcDogXCItMjJweFwifX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFub2RlLmVudGl0eURhdGEuaGFzQ2hpbGRyZW4gP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlJY29uIHR5cGU9e1wiZW1wdHlcIn0vPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17e319IG9uQ2xpY2s9eygpID0+IHt0b2dnbGVOb2RlKG5vZGUpfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlJY29uIHR5cGU9e25vZGUuZXhwYW5kZWQgPyBcImFycm93RG93blwiIDogXCJhcnJvd1JpZ2h0XCJ9IHNpemU9e1wic1wifS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxUcmVlTGluayBlbnRpdHlEYXRhPXtub2RlLmVudGl0eURhdGF9IGNoaWxkUmVsYXRpb25Ub1BhcmVudD17bm9kZS5jaGlsZFJlbGF0aW9uVG9QYXJlbnR9IG9udG9sb2d5SWQ9e2hpZXJhcmNoeS5vbnRvbG9neUlkfSBlbnRpdHlUeXBlPXtoaWVyYXJjaHkuZW50aXR5VHlwZX0gb25OYXZpZ2F0ZVRvRW50aXR5PXtvbk5hdmlnYXRlVG9FbnRpdHl9IG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX0gaGlnaGxpZ2h0PXtub2RlLmVudGl0eURhdGEuaXJpID09IGhpZXJhcmNoeT8ubWFpbkVudGl0eUlyaX0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge25vZGUuZW50aXR5RGF0YS5udW1EZXNjZW5kYW50cyAhPSB1bmRlZmluZWQgJiYgbm9kZS5lbnRpdHlEYXRhLm51bURlc2NlbmRhbnRzID4gMCAmJiA8c3BhbiBzdHlsZT17e2NvbG9yOiBcImdyYXlcIn19Pih7bm9kZS5lbnRpdHlEYXRhLm51bURlc2NlbmRhbnRzLnRvTG9jYWxlU3RyaW5nKCl9KTwvc3Bhbj59XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgICAgICAge25vZGUuZXhwYW5kZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgPHVsIHN0eWxlPXt7bWFyZ2luQmxvY2tFbmQ6IFwiMFwiLCBtYXJnaW5JbmxpbmVTdGFydDogXCI1LjVweFwifX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bm9kZS5sb2FkaW5nID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXIgc3R5bGU9e3twb3NpdGlvbjogXCJyZWxhdGl2ZVwiLCBsZWZ0OiBcIjEzcHhcIiwgdG9wOiBcIjVweFwifX0vPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sb2FkZWRDaGlsZHJlbi5tYXAoKGNoaWxkLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtyYW5kb21TdHJpbmcoKX0gc3R5bGU9e3tib3JkZXJMZWZ0OiBkcmF3TGluZSA/IFwiMXB4IGRvdHRlZCBibGFja1wiOlwiXCIsIHBhZGRpbmdMZWZ0OiBcIjFyZW1cIn19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclRyZWVOb2RlKGhpZXJhcmNoeSwgY2hpbGQsIGlkeCA8IG5vZGUubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aUNhcmQgdGl0bGU9e1wiXCJ9IGxheW91dD17XCJob3Jpem9udGFsXCJ9IHN0eWxlPXt7IG92ZXJmbG93OiBcImF1dG9cIiB9fT5cbiAgICAgICAgICAgIHsoaXNTdWNjZXNzSGllcmFyY2h5ICYmIGhpZXJhcmNoeSAhPSB1bmRlZmluZWQpID9cbiAgICAgICAgICAgICAgICA8RXVpVGV4dCBzdHlsZT17e3doaXRlU3BhY2U6IFwibm93cmFwXCJ9fT4gey8qIC8vIFRPRE86IERvZXMgbm90IGdldCBkaXNwbGF5ZWQgY29ycmVjdGx5IG9uIHN0b3J5Ym9vayBtYWluIHBhZ2UgKi99XG4gICAgICAgICAgICAgICAgICAgIHtoaWVyYXJjaHkucm9vdHMubWFwKChyb290Tm9kZSwgaWR4KSA9PiByZW5kZXJUcmVlTm9kZShoaWVyYXJjaHksIHJvb3ROb2RlLCBpZHggPCBoaWVyYXJjaHkucm9vdHMubGVuZ3RoIC0gMSkpfVxuICAgICAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICAgICAgICA6IDxFdWlMb2FkaW5nU3Bpbm5lci8+fVxuICAgICAgICA8L0V1aUNhcmQ+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGllcmFyY2h5KHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRIaWVyYXJjaHlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEhpZXJhcmNoeVdpZGdldChwcm9wczogSGllcmFyY2h5V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEhpZXJhcmNoeVdpZGdldFxuICAgICAgICAgICAgICAgICAgICBhcGlVcmw9e3Byb3BzLmFwaVVybH1cbiAgICAgICAgICAgICAgICAgICAgYXBpS2V5PXtwcm9wcy5hcGlLZXl9XG4gICAgICAgICAgICAgICAgICAgIGJhY2tlbmRUeXBlPXtwcm9wcy5iYWNrZW5kVHlwZX1cbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzPXtwcm9wcy5pbmNsdWRlT2Jzb2xldGVFbnRpdGllc31cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZFJvb3RzPXtwcm9wcy5wcmVmZXJyZWRSb290c31cbiAgICAgICAgICAgICAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMua2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgICAgICAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0PXtwcm9wcy5zaG93U2libGluZ3NPbkluaXR9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7SGllcmFyY2h5V2lkZ2V0LCBjcmVhdGVIaWVyYXJjaHl9OyIsICJpbXBvcnQgYXhpb3MsIHtBeGlvc0luc3RhbmNlLCBBeGlvc1JlcXVlc3RDb25maWd9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHtCdWlsZEhpZXJhcmNoeVByb3BzLCBIaWVyYXJjaHlCdWlsZGVyLCBIaWVyYXJjaHlJcmlQcm9wLCBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wc30gZnJvbSBcIi4vSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHtFbnRpdHlEYXRhRm9ySGllcmFyY2h5LCBIaWVyYXJjaHksIFBhcmVudENoaWxkUmVsYXRpb24sIFRyZWVOb2RlfSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHlcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9tb2RlbC9SZWlmaWVkXCI7XG5cbnR5cGUgVG9wQ29uY2VwdCA9IHtcbiAgICB1cmk6IHN0cmluZyxcbiAgICBsYWJlbD86IHN0cmluZyxcbiAgICB0b3BDb25jZXB0T2Y/OiBzdHJpbmcsXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW4sXG4gICAgbm90YXRpb24/OiBzdHJpbmdcbn1cblxudHlwZSBMYWJlbEFuZFVyaUFuZENoaWxkcmVuID0ge1xuICAgIHVyaTogc3RyaW5nLFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW4sXG4gICAgbm90YXRpb24/OiBzdHJpbmdcbn1cblxudHlwZSBIaWVyYXJjaHlSZXN1bHQgPSB7XG4gICAgdXJpOiBzdHJpbmcsXG4gICAgcHJlZkxhYmVsOiBzdHJpbmc7XG4gICAgdG9wPzogc3RyaW5nLFxuICAgIGJyb2FkZXI/OiBzdHJpbmdbXSxcbiAgICBuYXJyb3dlcj86IExhYmVsQW5kVXJpQW5kQ2hpbGRyZW5bXVxufTtcblxudHlwZSBQcmVmQW5kVXJpQW5kQ2hpbGRyZW4gPSB7XG4gICAgdXJpOiBzdHJpbmcsXG4gICAgcHJlZkxhYmVsOiBzdHJpbmcsXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW5cbiAgICBub3RhdGlvbj86IHN0cmluZ1xufVxuXG5hYnN0cmFjdCBjbGFzcyBTa29zRW50aXR5RGF0YUZvckhpZXJhcmNoeUJ1aWxkZXIge1xuICAgIHN0YXRpYyBmcm9tVG9wQ29uY2VwdChvYmo6IFRvcENvbmNlcHQpIDogRW50aXR5RGF0YUZvckhpZXJhcmNoeSB7XG4gICAgICAgIHJldHVybiAge1xuICAgICAgICAgICAgaXJpOiBvYmoudXJpLFxuICAgICAgICAgICAgbGFiZWw6IG9iai5sYWJlbCxcbiAgICAgICAgICAgIGhhc0NoaWxkcmVuOiBvYmouaGFzQ2hpbGRyZW4sXG4gICAgICAgICAgICBwYXJlbnRzOiBbXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSGllcmFyY2h5UmVzdWx0KG9iajogSGllcmFyY2h5UmVzdWx0KSA6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiBvYmoudXJpLFxuICAgICAgICAgICAgbGFiZWw6IG9iai5wcmVmTGFiZWwsXG4gICAgICAgICAgICBoYXNDaGlsZHJlbjogb2JqLm5hcnJvd2VyICE9IHVuZGVmaW5lZCAmJiBvYmoubmFycm93ZXIubGVuZ3RoID4gMCxcbiAgICAgICAgICAgIHBhcmVudHM6IFJlaWZpZWQuZnJvbUpzb24ob2JqLmJyb2FkZXIpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbVByZWZBbmRVcmlBbmRDaGlsZHJlbihvYmo6IFByZWZBbmRVcmlBbmRDaGlsZHJlbiwgcGFyZW50cz86IHN0cmluZ1tdKSA6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiBvYmoudXJpLFxuICAgICAgICAgICAgbGFiZWw6IG9iai5wcmVmTGFiZWwsXG4gICAgICAgICAgICBoYXNDaGlsZHJlbjogb2JqLmhhc0NoaWxkcmVuLFxuICAgICAgICAgICAgcGFyZW50czogUmVpZmllZC5mcm9tSnNvbihwYXJlbnRzKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tTGFiZWxBbmRVcmlBbmRDaGlsZHJlbihvYmo6IExhYmVsQW5kVXJpQW5kQ2hpbGRyZW4sIHBhcmVudHM/OiBzdHJpbmdbXSkgOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogb2JqLnVyaSxcbiAgICAgICAgICAgIGxhYmVsOiBvYmoubGFiZWwsXG4gICAgICAgICAgICBoYXNDaGlsZHJlbjogb2JqLmhhc0NoaWxkcmVuLFxuICAgICAgICAgICAgcGFyZW50czogUmVpZmllZC5mcm9tSnNvbihwYXJlbnRzKVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2tvc0FwaSBpbXBsZW1lbnRzIEhpZXJhcmNoeUJ1aWxkZXJ7XG4gICAgcHJpdmF0ZSBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuXG4gICAgY29uc3RydWN0b3IoYXBpOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5heGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgICAgICAgIGJhc2VVUkw6IGFwaSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIC8vIENvbnRlbnRfVHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsIC8vIGxlYWRzIHRvIHByZWZsaWdodCBlcnJvclxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBtYWtlQ2FsbCh1cmw6IHN0cmluZywgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWc8bmV2ZXI+IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldCh1cmwsIGNvbmZpZykpLmRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJ1aWxkSGllcmFyY2h5V2l0aElyaShwcm9wczogQnVpbGRIaWVyYXJjaHlQcm9wcyAmIEhpZXJhcmNoeUlyaVByb3ApIDogUHJvbWlzZTxIaWVyYXJjaHk+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgICAgfSA9IHByb3BzO1xuXG4gICAgICAgIGlmKCFvbnRvbG9neUlkKSB0aHJvdyBFcnJvcihcIm9udG9sb2d5SWQgaGFzIHRvIGJlIHNwZWNpZmllZCBmb3IgU0tPUyBBUEkuXCIpO1xuXG4gICAgICAgIGNvbnN0IHJvb3RFbnRpdGllczogc3RyaW5nW10gPSBbXVxuICAgICAgICBjb25zdCBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPiA9IG5ldyBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+KCk7XG4gICAgICAgIGNvbnN0IGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4gPSBuZXcgTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4oKTtcbiAgICAgICAgY29uc3QgYWxsQ2hpbGRyZW5QcmVzZW50OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBjb25zdCBvbkluaXRpYWxQYXRoOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBvbmx5IHVzZWQgaWYgc2hvd1NpYmxpbmdzT25Jbml0ID09IGZhbHNlXG5cbiAgICAgICAgaWYoaXJpKSB7XG4gICAgICAgICAgICBjb25zdCBicm9hZGVyVHJhbnNpdGl2ZTogSGllcmFyY2h5UmVzdWx0W10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAvJHtvbnRvbG9neUlkfS9oaWVyYXJjaHlgLCB7cGFyYW1zOiB7dXJpOiBpcmksIGxhbmc6IFwiZW5cIiwgZm9ybWF0OiBcImFwcGxpY2F0aW9uL2pzb25cIn19KVxuICAgICAgICAgICAgICAgIC50aGVuKChvYmopID0+IE9iamVjdC5rZXlzKG9ialtcImJyb2FkZXJUcmFuc2l0aXZlXCJdKS5tYXAoKGtleSkgPT4gb2JqW1wiYnJvYWRlclRyYW5zaXRpdmVcIl1ba2V5XSkpXG5cbiAgICAgICAgICAgIC8vIHN0b3JlcyBhbGwgZW50aXRpZXMgYXBwZWFyaW5nIGluIGJyb2FkZXJUcmFuc2l0aXZlXG4gICAgICAgICAgICAvL2NvbnN0IGVudGl0aWVzOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PiA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PigpXG5cbiAgICAgICAgICAgIGZvcihjb25zdCBub2RlIG9mIGJyb2FkZXJUcmFuc2l0aXZlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZURhdGE6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkgPSBTa29zRW50aXR5RGF0YUZvckhpZXJhcmNoeUJ1aWxkZXIuZnJvbUhpZXJhcmNoeVJlc3VsdChub2RlKTtcblxuICAgICAgICAgICAgICAgIGVudGl0aWVzRGF0YS5zZXQobm9kZURhdGEuaXJpLCBub2RlRGF0YSk7XG4gICAgICAgICAgICAgICAgaWYobm9kZS50b3ApIHJvb3RFbnRpdGllcy5wdXNoKG5vZGVEYXRhLmlyaSk7XG5cbiAgICAgICAgICAgICAgICBpZighc2hvd1NpYmxpbmdzT25Jbml0KSBvbkluaXRpYWxQYXRoLmFkZChub2RlRGF0YS5pcmkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yKGNvbnN0IG5vZGUgb2YgYnJvYWRlclRyYW5zaXRpdmUpIHtcbiAgICAgICAgICAgICAgICBpZihub2RlLm5hcnJvd2VyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbjogRW50aXR5RGF0YUZvckhpZXJhcmNoeVtdID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkTm9kZSBvZiBub2RlLm5hcnJvd2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGROb2RlRGF0YSA9IGVudGl0aWVzRGF0YS5nZXQoY2hpbGROb2RlLnVyaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjaGlsZE5vZGVEYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZURhdGEgPSBTa29zRW50aXR5RGF0YUZvckhpZXJhcmNoeUJ1aWxkZXIuZnJvbUxhYmVsQW5kVXJpQW5kQ2hpbGRyZW4oY2hpbGROb2RlLCBbbm9kZS51cmldKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0aWVzRGF0YS5zZXQoY2hpbGROb2RlRGF0YS5pcmksIGNoaWxkTm9kZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWNoaWxkTm9kZURhdGEucGFyZW50cy5tYXAoKHIpID0+IHIudmFsdWUpLmluY2x1ZGVzKG5vZGUudXJpKSkgY2hpbGROb2RlRGF0YS5wYXJlbnRzLnB1c2goLi4uUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KG5vZGUudXJpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkTm9kZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uc29ydCgoYSwgYikgPT4gKGEubGFiZWwgfHwgYS5pcmkpLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCB8fCBiLmlyaSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChub2RlLnVyaSwgY2hpbGRyZW4ubWFwKChjKSA9PiB7cmV0dXJuIHtjaGlsZElyaTogYy5pcml9fSkpO1xuICAgICAgICAgICAgICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQuYWRkKG5vZGUudXJpKTsgLy8gaW4gc2tvcywgYWxsIGNoaWxkcmVuIGFyZSBsb2FkZWQgaWYgYW55IGFyZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcGNvbmNlcHRzOiBUb3BDb25jZXB0W10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAvJHtvbnRvbG9neUlkfS90b3BDb25jZXB0c2AsIHtwYXJhbXM6IHtsYW5nOiBcImVuXCIsIGZvcm1hdDogXCJhcHBsaWNhdGlvbi9qc29uXCJ9fSlcbiAgICAgICAgICAgICAgICAudGhlbigob2JqKSA9PiBvYmpbXCJ0b3Bjb25jZXB0c1wiXSlcblxuICAgICAgICAgICAgZm9yKGNvbnN0IGNvbmNlcHQgb2YgdG9wY29uY2VwdHMpIHtcbiAgICAgICAgICAgICAgICByb290RW50aXRpZXMucHVzaChjb25jZXB0LnVyaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVUcmVlTm9kZShlbnRpdHlEYXRhOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5LCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPik6IFRyZWVOb2RlIHtcbiAgICAgICAgICAgIGN5Y2xlQ2hlY2suYWRkKGVudGl0eURhdGEuaXJpKTsgLy8gYWRkIGN1cnJlbnQgZW50aXR5IHRvIGN5Y2xlIGNoZWNrIHNldFxuXG4gICAgICAgICAgICBjb25zdCBub2RlID0gbmV3IFRyZWVOb2RlKGVudGl0eURhdGEpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQoZW50aXR5RGF0YS5pcmkpIHx8IFtdO1xuXG4gICAgICAgICAgICBpZighc2hvd1NpYmxpbmdzT25Jbml0KSB7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEN5Y2xpYyB0cmVlIGF0IGVudGl0eSBcIiR7Y2hpbGQuY2hpbGRJcml9XCIuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkRGF0YSA9IGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpO1xuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZERhdGEgIT0gdW5kZWZpbmVkICYmIG9uSW5pdGlhbFBhdGguaGFzKGNoaWxkLmNoaWxkSXJpKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGNoaWxkRGF0YSwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEN5Y2xpYyB0cmVlIGF0IGVudGl0eSBcIiR7Y2hpbGQuY2hpbGRJcml9XCIuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkRGF0YSA9IGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpO1xuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZERhdGEgIT0gdW5kZWZpbmVkKSBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGNoaWxkRGF0YSwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYobm9kZS5sb2FkZWRDaGlsZHJlbi5sZW5ndGggPiAwKSBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgY3ljbGVDaGVjay5kZWxldGUoZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBDb250YWlucyBpcmlzIG9mIGFsbCBlbnRpdGllcyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBicmFuY2guIElzIHVzZWQgdG8gY2hlY2sgZm9yIGN5Y2xlcy5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzOiBUcmVlTm9kZVtdID0gcm9vdEVudGl0aWVzLm1hcCgocm9vdEVudGl0eSkgPT4gY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChyb290RW50aXR5KSEsIGN5Y2xlQ2hlY2spKS5zb3J0KChhLGIpID0+IChhLmVudGl0eURhdGEubGFiZWwgfHwgYS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShiLmVudGl0eURhdGEubGFiZWwgfHwgYi5lbnRpdHlEYXRhLmlyaSkpO1xuXG4gICAgICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgICAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICAgICAgICByb290czogcm9vdE5vZGVzLFxuICAgICAgICAgICAgYXBpOiBuZXcgU2tvc0FwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCkpLFxuICAgICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgICAgICAgIG1haW5FbnRpdHlJcmk6IGlyaSxcbiAgICAgICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IHByb3BzLmtlZXBFeHBhbnNpb25TdGF0ZXNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGxvYWRIaWVyYXJjaHlDaGlsZHJlbihwcm9wczogTG9hZEhpZXJhcmNoeUNoaWxkcmVuUHJvcHMpOiBQcm9taXNlPEVudGl0eURhdGFGb3JIaWVyYXJjaHlbXT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBub2RlVG9FeHBhbmQsXG4gICAgICAgICAgICBvbnRvbG9neUlkXG4gICAgICAgIH0gPSBwcm9wcztcblxuICAgICAgICBjb25zdCBuYXJyb3dlcjogUHJlZkFuZFVyaUFuZENoaWxkcmVuW10gPSAoYXdhaXQgdGhpcy5tYWtlQ2FsbChgLyR7b250b2xvZ3lJZH0vY2hpbGRyZW5gLCB7cGFyYW1zOiB7dXJpOiBub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmksIGxhbmc6IFwiZW5cIiwgZm9ybWF0OiBcImFwcGxpY2F0aW9uL2pzb25cIn19KSlbXCJuYXJyb3dlclwiXTtcblxuICAgICAgICByZXR1cm4gbmFycm93ZXIubWFwKChvYmopID0+IFNrb3NFbnRpdHlEYXRhRm9ySGllcmFyY2h5QnVpbGRlci5mcm9tUHJlZkFuZFVyaUFuZENoaWxkcmVuKG9iaiwgW25vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaV0pKTtcbiAgICB9XG5cbn0iLCAiaW1wb3J0IHtCdWlsZEhpZXJhcmNoeVByb3BzLCBIaWVyYXJjaHlCdWlsZGVyLCBIaWVyYXJjaHlJcmlQcm9wLCBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wc30gZnJvbSBcIi4vSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IGF4aW9zLCB7QXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7RW50aXR5RGF0YUZvckhpZXJhcmNoeSwgSGllcmFyY2h5LCBQYXJlbnRDaGlsZFJlbGF0aW9uLCBUcmVlTm9kZX0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXMvSGllcmFyY2h5XCI7XG5pbXBvcnQge3BsdXJhbGl6ZVR5cGV9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHt1c2VMZWdhY3lBcmdUeXBlfSBmcm9tIFwiLi4vc3Rvcmllcy9zdG9yeUFyZ3NcIjtcblxudHlwZSBIaWVyYXJjaHlOb2RlID0ge1xuICAgIHByZWZMYWJlbDogc3RyaW5nXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW5cbiAgICBjaGlsZHJlbjogSGllcmFyY2h5Tm9kZVtdXG4gICAgb2Jzb2xldGU6IGJvb2xlYW4gLy8gVE9ETzogdXNlIHRoaXMgdG8gZW5hYmxlIHNob3dpbmcgb2Jzb2xldGVUZXJtcz9cbiAgICBbXCJAaWRcIl06IHN0cmluZ1xuICAgIFtcIkB0eXBlXCJdOiBzdHJpbmdcbiAgICAvLyBsaW5rczogb2JqZWN0IC0gbm90IG5lZWRlZCBoZXJlXG4gICAgW1wiQGNvbnRleHRcIl06IHtcbiAgICAgICAgW1wiQHZvY2FiXCJdOiBzdHJpbmdcbiAgICAgICAgcHJlZkxhYmVsOiBzdHJpbmdcbiAgICAgICAgb2Jzb2xldGU6IHN0cmluZ1xuICAgICAgICBbXCJAbGFuZ3VhZ2VcIl06IHN0cmluZ1xuICAgIH1cbn1cblxuZnVuY3Rpb24gSGllcmFyY2h5Tm9kZVRvRW50aXR5RGF0YUZvckhpZXJhcmNoeShoaWVyYXJjaHlOb2RlOiBIaWVyYXJjaHlOb2RlKSA6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlyaTogaGllcmFyY2h5Tm9kZVtcIkBpZFwiXSxcbiAgICAgICAgbGFiZWw6IGhpZXJhcmNoeU5vZGVbXCJwcmVmTGFiZWxcIl0sXG4gICAgICAgIGhhc0NoaWxkcmVuOiBoaWVyYXJjaHlOb2RlW1wiaGFzQ2hpbGRyZW5cIl0sXG4gICAgICAgIHBhcmVudHM6IFtdXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT250b1BvcnRhbEFwaSBpbXBsZW1lbnRzIEhpZXJhcmNoeUJ1aWxkZXJ7XG4gICAgcHJpdmF0ZSBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuICAgIHByaXZhdGUgYXBpS2V5OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihhcGk6IHN0cmluZywgYXBpS2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5heGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgICAgICAgIGJhc2VVUkw6IGFwaSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIC8vIENvbnRlbnRfVHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsIC8vIGxlYWRzIHRvIHByZWZsaWdodCBlcnJvclxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgICAgICB0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKChjb25maWcpID0+IHtcbiAgICAgICAgICAgIGNvbmZpZy5wYXJhbXMgPSBjb25maWcucGFyYW1zIHx8IHt9O1xuXG4gICAgICAgICAgICAvLyBkZWZhdWx0IHBhcmFtc1xuICAgICAgICAgICAgY29uZmlnLnBhcmFtc1tcImFwaWtleVwiXSA9IHRoaXMuYXBpS2V5O1xuICAgICAgICAgICAgY29uZmlnLnBhcmFtc1tcImZvcm1hdFwiXSA9IFwianNvblwiO1xuXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbWFrZUNhbGwodXJsOiBzdHJpbmcsIGNvbmZpZz86IEF4aW9zUmVxdWVzdENvbmZpZzxuZXZlcj4pIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KHVybCwgY29uZmlnKSkuZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYnVpbGRIaWVyYXJjaHlXaXRoSXJpKHByb3BzOiBCdWlsZEhpZXJhcmNoeVByb3BzICYgSGllcmFyY2h5SXJpUHJvcCkgOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpcmksXG4gICAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICAgIHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgICAgfSA9IHByb3BzO1xuXG4gICAgICAgIGlmKCFvbnRvbG9neUlkKSB0aHJvdyBFcnJvcihcIm9udG9sb2d5SWQgaGFzIHRvIGJlIHNwZWNpZmllZCBmb3IgT250b1BvcnRhbCBBUEkuXCIpO1xuICAgICAgICBpZighZW50aXR5VHlwZSkgdGhyb3cgRXJyb3IoXCJlbnRpdHlUeXBlIGhhcyB0byBiZSBzcGVjaWZpZWQgZm9yIE9udG9Qb3J0YWwgQVBJLlwiKTtcblxuICAgICAgICBjb25zdCByb290RW50aXRpZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4gPSBuZXcgTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4oKTtcbiAgICAgICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPigpO1xuICAgICAgICBjb25zdCBhbGxDaGlsZHJlblByZXNlbnQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IG9uSW5pdGlhbFBhdGg6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIG9ubHkgdXNlZCBpZiBzaG93U2libGluZ3NPbkluaXQgPT0gZmFsc2VcblxuICAgICAgICBmdW5jdGlvbiBidWlsZFJlbGF0aW9ucyhjdXJyTm9kZTogSGllcmFyY2h5Tm9kZSkge1xuICAgICAgICAgICAgZW50aXRpZXNEYXRhLnNldChjdXJyTm9kZVtcIkBpZFwiXSwgSGllcmFyY2h5Tm9kZVRvRW50aXR5RGF0YUZvckhpZXJhcmNoeShjdXJyTm9kZSkpXG4gICAgICAgICAgICBpZihjdXJyTm9kZS5oYXNDaGlsZHJlbiAmJiBjdXJyTm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGN1cnJOb2RlW1wiQGlkXCJdLCBjdXJyTm9kZS5jaGlsZHJlbi5tYXAoKGMpID0+IHtyZXR1cm4ge2NoaWxkSXJpOiBjW1wiQGlkXCJdfX0pKTtcblxuICAgICAgICAgICAgICAgIGFsbENoaWxkcmVuUHJlc2VudC5hZGQoY3Vyck5vZGVbXCJAaWRcIl0pO1xuICAgICAgICAgICAgICAgIG9uSW5pdGlhbFBhdGguYWRkKGN1cnJOb2RlW1wiQGlkXCJdKTtcblxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjdXJyTm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBidWlsZFJlbGF0aW9ucyhjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoaXJpKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9wZXJ0eSB3aGljaCBpcyBjaGlsZCBvZiBtdWx0aXBsZSBwcm9wZXJ0aWVzIG9ubHkgaXMgcmV0dXJuZWQgaW4gb25lIHBhcmVudCBpbiAvdHJlZSBxdWVyeSAoLT4gZG8gaXQgcmlnaHQgbWFudWFsbHk/KSAoZS5nLjogaHR0cDovL3N3ZWV0b250b2xvZ3kubmV0L3JlbGFUaW1lL2hhc05IVGltZSAtPiBoYXMgbW9yZSB0aGFuIG9uZSBwYXJlbnQsIGJ1dCBpcyBvbmx5IHNob3duIGluIG9uZSBwYXJlbnQgaW4gL3RyZWUpXG4gICAgICAgICAgICBjb25zdCBhcGlfdHJlZTogSGllcmFyY2h5Tm9kZVtdID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgL29udG9sb2dpZXMvJHtvbnRvbG9neUlkLnRvVXBwZXJDYXNlKCl9LyR7cGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCBmYWxzZSl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlyaSl9L3RyZWVgLCB7cGFyYW1zOiB7aW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuLGNoaWxkcmVuXCJ9fSk7XG5cbiAgICAgICAgICAgIGZvcihjb25zdCByb290Tm9kZSBvZiBhcGlfdHJlZSkge1xuICAgICAgICAgICAgICAgIHJvb3RFbnRpdGllcy5wdXNoKHJvb3ROb2RlW1wiQGlkXCJdKTtcbiAgICAgICAgICAgICAgICBvbkluaXRpYWxQYXRoLmFkZChyb290Tm9kZVtcIkBpZFwiXSk7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWxhdGlvbnMocm9vdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25Jbml0aWFsUGF0aC5hZGQoaXJpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RzIDogSGllcmFyY2h5Tm9kZVtdID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgICAgICAgICBgL29udG9sb2dpZXMvJHtvbnRvbG9neUlkLnRvVXBwZXJDYXNlKCl9LyR7cGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCBmYWxzZSl9L3Jvb3RzYCxcbiAgICAgICAgICAgICAgICB7cGFyYW1zOiB7aW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuXCJ9fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZm9yKGNvbnN0IHJvb3ROb2RlIG9mIHJvb3RzKSB7XG4gICAgICAgICAgICAgICAgcm9vdEVudGl0aWVzLnB1c2gocm9vdE5vZGVbXCJAaWRcIl0pO1xuICAgICAgICAgICAgICAgIG9uSW5pdGlhbFBhdGguYWRkKHJvb3ROb2RlW1wiQGlkXCJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVRyZWVOb2RlKGVudGl0eURhdGE6IEVudGl0eURhdGFGb3JIaWVyYXJjaHksIGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+KTogVHJlZU5vZGUge1xuICAgICAgICAgICAgY3ljbGVDaGVjay5hZGQoZW50aXR5RGF0YS5pcmkpOyAvLyBhZGQgY3VycmVudCBlbnRpdHkgdG8gY3ljbGUgY2hlY2sgc2V0XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJlZU5vZGUoZW50aXR5RGF0YSk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkUmVsYXRpb25zLmdldChlbnRpdHlEYXRhLmlyaSkgfHwgW107XG5cbiAgICAgICAgICAgIGlmKCFzaG93U2libGluZ3NPbkluaXQpIHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYob25Jbml0aWFsUGF0aC5oYXMoY2hpbGQuY2hpbGRJcmkpKSBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpISwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBpZihjeWNsZUNoZWNrLmhhcyhjaGlsZC5jaGlsZElyaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN5Y2xpYyB0cmVlLCBza2lwIGN5Y2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDeWNsaWMgdHJlZSBhdCBlbnRpdHkgXCIke2NoaWxkLmNoaWxkSXJpfVwiLmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICAgICBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpISwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYobm9kZS5sb2FkZWRDaGlsZHJlbi5sZW5ndGggPiAwKSBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgY3ljbGVDaGVjay5kZWxldGUoZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBDb250YWlucyBpcmlzIG9mIGFsbCBlbnRpdGllcyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBicmFuY2guIElzIHVzZWQgdG8gY2hlY2sgZm9yIGN5Y2xlcy5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzOiBUcmVlTm9kZVtdID0gcm9vdEVudGl0aWVzLm1hcCgocm9vdEVudGl0eSkgPT4gY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChyb290RW50aXR5KSEsIGN5Y2xlQ2hlY2spKS5zb3J0KChhLGIpID0+IChhLmVudGl0eURhdGEubGFiZWwgfHwgYS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShiLmVudGl0eURhdGEubGFiZWwgfHwgYi5lbnRpdHlEYXRhLmlyaSkpO1xuXG4gICAgICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgICAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICAgICAgICByb290czogcm9vdE5vZGVzLFxuICAgICAgICAgICAgYXBpOiBuZXcgT250b1BvcnRhbEFwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCksIHRoaXMuYXBpS2V5KSxcbiAgICAgICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsXG4gICAgICAgICAgICBtYWluRW50aXR5SXJpOiBpcmksXG4gICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wcyk6IFByb21pc2U8RW50aXR5RGF0YUZvckhpZXJhcmNoeVtdPiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG5vZGVUb0V4cGFuZCxcbiAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICBlbnRpdHlUeXBlXG4gICAgICAgIH0gPSBwcm9wcztcblxuICAgICAgICBpZihlbnRpdHlUeXBlID09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoXCJlbnRpdHlUeXBlIGhhcyB0byBiZSBwcm92aWRlZCB0byBsb2FkIGNoaWxkcmVuIGluIGFuIE9udG9Qb3J0YWwgaGllcmFyY2h5LlwiKTtcblxuICAgICAgICBjb25zdCBjaGlsZHJlbiA6IEhpZXJhcmNoeU5vZGVbXSA9IChhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICAgICAgYC9vbnRvbG9naWVzLyR7b250b2xvZ3lJZC50b1VwcGVyQ2FzZSgpfS8ke3BsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgZmFsc2UpfS8ke2VuY29kZVVSSUNvbXBvbmVudChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpfS9jaGlsZHJlbmAsXG4gICAgICAgICAgICB7cGFyYW1zOiB7aW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuXCJ9fVxuICAgICAgICApKVtcImNvbGxlY3Rpb25cIl07XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IEhpZXJhcmNoeU5vZGVUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoY2hpbGQpKTtcbiAgICB9XG59IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgVGl0bGVXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGlzT250b2xvZ3kgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IFRpdGxlUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGl0bGVQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IE5PX1RJVExFID0gXCJObyB0aXRsZSBhdmFpbGFibGUuXCI7XG5cbmZ1bmN0aW9uIFRpdGxlV2lkZ2V0KHByb3BzOiBUaXRsZVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpcmksXG4gICAgb250b2xvZ3lJZCxcbiAgICBhcGksXG4gICAgdGl0bGVUZXh0LFxuICAgIHRoaW5nVHlwZSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5LFxuICAgIGRlZmF1bHRWYWx1ZSxcbiAgICBjbGFzc05hbWVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG4gIGNvbnN0IGZpbmFsQ2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwiZGVmYXVsdC1jbGFzc1wiO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcInRpdGxlRGF0YVwiLCBhcGksIHBhcmFtZXRlciwgdGhpbmdUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHt0aXRsZVRleHQgJiZcbiAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICAgICAgdGl0bGVUZXh0PXt0aXRsZVRleHR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0gLz5cbiAgICAgIH1cblxuICAgICAgeyF0aXRsZVRleHQgJiYgaXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICAgICAgdGl0bGU9e2lzT250b2xvZ3koZGF0YSkgPyBkYXRhLmdldE5hbWUoKSA6IGRhdGEuZ2V0TGFiZWwoKX0gY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0gLz5cbiAgICAgIH1cblxuICAgICAgeyF0aXRsZVRleHQgJiYgaXNMb2FkaW5nICYmIChkZWZhdWx0VmFsdWUgPyAoXG4gICAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uIHRpdGxlVGV4dD17ZGVmYXVsdFZhbHVlfSBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfSAvPilcbiAgICAgICAgOiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPilcbiAgICAgIH1cblxuICAgICAgeyF0aXRsZVRleHQgJiYgaXNFcnJvciAmJiAoZGVmYXVsdFZhbHVlID9cbiAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uIHRpdGxlVGV4dD17ZGVmYXVsdFZhbHVlfSBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfSAvPiA6XG4gICAgICAgIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwidGl0bGVcIil9PC9FdWlUZXh0Pil9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRpdGxlKHByb3BzOiBUaXRsZVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFRpdGxlV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRUaXRsZVdpZGdldChwcm9wczogVGl0bGVXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxUaXRsZVdpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHRoaW5nVHlwZT17cHJvcHMudGhpbmdUeXBlfVxuICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgdGl0bGVUZXh0PXtwcm9wcy50aXRsZVRleHR9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgZGVmYXVsdFZhbHVlPXtwcm9wcy5kZWZhdWx0VmFsdWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgVGl0bGVXaWRnZXQsIGNyZWF0ZVRpdGxlIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7VGl0bGVQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBUaXRsZVByZXNlbnRhdGlvbihwcm9wczogVGl0bGVQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gIHJldHVybiAoXG4gICAgPEV1aVRleHQgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9Pntwcm9wcy50aXRsZVRleHQgfHwgcHJvcHMudGl0bGV9PC9FdWlUZXh0PlxuICApO1xufVxuXG5leHBvcnQgeyBUaXRsZVByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0LCBFdWlMaW5rfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBJcmlXaWRnZXQgfSBmcm9tIFwiLi9JcmlXaWRnZXRcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtNZXRhZGF0YVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgQnJlYWRjcnVtYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGFiV2lkZ2V0L1RhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgRGVzY3JpcHRpb25QcmVzZW50YXRpb24gfSBmcm9tIFwiLi9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvblByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgVGl0bGVQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9UaXRsZVdpZGdldC9UaXRsZVByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eVR5cGVOYW1lLCBpc0VudGl0eX0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHtjcmVhdGVNb2RlbE9iamVjdCwgZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxPYmplY3RDcmVhdG9yXCI7XG5pbXBvcnQge0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9ufSBmcm9tIFwiLi9FbnRpdHlPbnRvTGlzdFdpZGdldC9FbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHtFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb259IGZyb20gXCIuL0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb25cIjtcbmltcG9ydCBcIi4uLy4uLy4uL3N0eWxlL3NlbWxvb2twLXN0eWxlcy5jc3NcIlxuXG50eXBlIE1ldGFkYXRhSW5mbyA9IHtcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBvbnRvTGlzdDogc3RyaW5nW10sXG4gICAgZGVmaW5lZEJ5OiBzdHJpbmdbXVxufVxuXG5mdW5jdGlvbiBNZXRhZGF0YVdpZGdldChwcm9wczogTWV0YWRhdGFXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSwgb25OYXZpZ2F0ZVRvT250b2xvZ3ksIGhpZXJhcmNoeVRhYiwgY3Jvc3NSZWZUYWIsIHRlcm1pbm9sb2d5SW5mb1RhYiwgYWx0TmFtZXNUYWIsIHRlcm1MaW5rIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuICBjb25zdCBtZXRhZGF0YVdpZGdldENTUyA9IGBcbiAgICAuYm9sZFRleHR7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG4gIGA7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxNZXRhZGF0YUluZm8+KFxuICAgIFtcIm1ldGFkYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgZW50aXR5OiBFbnRpdHksIG9udG9MaXN0OiBzdHJpbmdbXSwgZGVmaW5lZEJ5OiBzdHJpbmdbXTtcbiAgICAgICAgaWYodXNlTGVnYWN5KSB7XG4gICAgICAgICAgICBjb25zdCBlbWJlZGRlZCA9IChhd2FpdCBvbHNBcGkuZ2V0RW50aXR5UmVzcG9uc2UoaXJpLCBlbnRpdHlUeXBlLCB1bmRlZmluZWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KSlbXCJfZW1iZWRkZWRcIl07XG4gICAgICAgICAgICBlbnRpdHkgPSBjcmVhdGVNb2RlbE9iamVjdCh7IFwiX2VtYmVkZGVkXCI6IHsgW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV06IGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dLCB1c2VMZWdhY3ksIG9udG9sb2d5SWQpIH19KSBhcyBFbnRpdHk7XG4gICAgICAgICAgICBvbnRvTGlzdCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAgICAgICAubWFwKChlbnRpdHlJbk9udG9sb2d5IDogYW55KSA9PiBlbnRpdHlJbk9udG9sb2d5W1wib250b2xvZ3lfbmFtZVwiXSk7XG4gICAgICAgICAgICBkZWZpbmVkQnkgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdKVxuICAgICAgICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3kgOiBhbnkpID0+IGVudGl0eUluT250b2xvZ3lbXCJvbnRvbG9neV9uYW1lXCJdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVudGl0eSA9IGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICAgICAgICBvbnRvTGlzdCA9IGVudGl0eS5nZXRBcHBlYXJzSW4oKTtcbiAgICAgICAgICAgIGRlZmluZWRCeSA9IGVudGl0eS5nZXREZWZpbmVkQnkoKTtcbiAgICAgICAgfVxuICAgICAgICBvbnRvTGlzdCA9IG9udG9MaXN0LmZpbHRlcigob250byA6IHN0cmluZykgPT4gb250byAhPSBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpKS5zb3J0KCk7XG4gICAgICAgIGRlZmluZWRCeSA9IGRlZmluZWRCeS5maWx0ZXIoKG9udG86IHN0cmluZykgPT4gb250byAhPSBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpKS5zb3J0KCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVudGl0eTogZW50aXR5LFxuICAgICAgICAgICAgb250b0xpc3Q6IG9udG9MaXN0LFxuICAgICAgICAgICAgZGVmaW5lZEJ5OiBkZWZpbmVkQnlcbiAgICAgICAgfSBhcyBNZXRhZGF0YUluZm87XG4gICAgfVxuICApO1xuXG4gIGZ1bmN0aW9uIHJlbmRlcihkYXRhOiBNZXRhZGF0YUluZm8pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPHN0eWxlPnttZXRhZGF0YVdpZGdldENTU308L3N0eWxlPlxuICAgICAgICA8RXVpRmxleEdyb3VwIGRpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0gc3R5bGU9e3sgbWF4V2lkdGg6IDYwMCB9fT5cbiAgICAgICAgICAgICAgICB7dGVybUxpbmsgP1xuICAgICAgICAgICAgICAgICAgPEV1aUxpbmsgaHJlZj17dGVybUxpbmt9IHRhcmdldD1cIl9ibGFua1wiIGV4dGVybmFsPXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgICAgIDxUaXRsZVByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17ZGF0YS5lbnRpdHkuZ2V0TGFiZWwoKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9sZFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9FdWlMaW5rPlxuICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib2xkVGV4dFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e29udG9sb2d5SWQgfHwgZGF0YS5lbnRpdHkuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neU5hbWU9e2RhdGEuZW50aXR5LmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgICAgICAgICAgICAgc2hvcnRGb3JtPXtkYXRhLmVudGl0eS5nZXRTaG9ydEZvcm0oKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPEV1aUZsZXhHcm91cCBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxFdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IHN0eWxlPXt7IG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxJcmlXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgICBpcmk9e2lyaX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBzdHlsZT17eyBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgICAgPERlc2NyaXB0aW9uUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtkYXRhLmVudGl0eS5nZXREZXNjcmlwdGlvbigpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuXG4gICAgICAgICAgPGRpdiBzdHlsZT17e21hcmdpbjogXCIwIDEycHggMFwiLCBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgICAgICA8RW50aXR5T250b0xpc3RQcmVzZW50YXRpb24gaXJpPXtwcm9wcy5pcml9IGxhYmVsPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCJ9IG9udG9saXN0PXtkYXRhLm9udG9MaXN0fSBlbnRpdHlUeXBlPXtlbnRpdHlUeXBlIHx8IGRhdGEuZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZX0gb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fSAvPlxuICAgICAgICAgICAgICA8RW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uIGlyaT17cHJvcHMuaXJpfSBvbnRvbGlzdD17ZGF0YS5kZWZpbmVkQnl9IGxhYmVsPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCJ9IGVudGl0eVR5cGU9e2VudGl0eVR5cGUgfHwgZGF0YS5lbnRpdHkuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lfSBvbk5hdmlnYXRlVG9PbnRvbG9neT17b25OYXZpZ2F0ZVRvT250b2xvZ3l9IC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxUYWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICBkYXRhPXtkYXRhLmVudGl0eX1cbiAgICAgICAgICAgICAgICBpcmk9e2lyaX1cbiAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgIGFwaT17YXBpfVxuICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWQgPyBwcm9wcy5vbnRvbG9neUlkIDogZGF0YS5lbnRpdHkuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17dXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgIGhpZXJhcmNoeVRhYj17aGllcmFyY2h5VGFifVxuICAgICAgICAgICAgICAgIGNyb3NzUmVmVGFiPXtjcm9zc1JlZlRhYn1cbiAgICAgICAgICAgICAgICB0ZXJtaW5vbG9neUluZm9UYWI9e3Rlcm1pbm9sb2d5SW5mb1RhYn1cbiAgICAgICAgICAgICAgICBhbHROYW1lc1RhYj17YWx0TmFtZXNUYWJ9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcIm1ldGFkYXRhXCIpfTwvRXVpVGV4dD59XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPD5cbiAgICAgICAgICB7aXNFbnRpdHkoZGF0YS5lbnRpdHkpID8gcmVuZGVyKGRhdGEpIDogbnVsbH1cbiAgICAgICAgPC8+XG4gICAgICB9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1ldGFkYXRhKHByb3BzOiBNZXRhZGF0YVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZE1ldGFkYXRhV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRNZXRhZGF0YVdpZGdldChwcm9wczogTWV0YWRhdGFXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8TWV0YWRhdGFXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgdGVybUxpbms9e3Byb3BzLnRlcm1MaW5rfVxuICAgICAgICAgICAgICAgICAgICBhbHROYW1lc1RhYj17cHJvcHMuYWx0TmFtZXNUYWJ9XG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeVRhYj17cHJvcHMuaGllcmFyY2h5VGFifVxuICAgICAgICAgICAgICAgICAgICBjcm9zc1JlZlRhYj17cHJvcHMuY3Jvc3NSZWZUYWJ9XG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbm9sb2d5SW5mb1RhYj17cHJvcHMudGVybWlub2xvZ3lJbmZvVGFifVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBNZXRhZGF0YVdpZGdldCwgY3JlYXRlTWV0YWRhdGEgfTtcbiIsICJpbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge3JhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5cbmNvbnN0IE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkgPSA1IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbihwcm9wczogRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gICAgY29uc3QgW2FwcGVhcnNJbkV4cGFuZGVkLCBzZXRBcHBlYXJzSW5FeHBhbmRlZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlKG9udG9sb2d5OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e3JhbmRvbVN0cmluZygpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KG9udG9sb2d5LCBwcm9wcy5lbnRpdHlUeXBlIHx8IFwiXCIsIHsgaXJpOiBwcm9wcy5pcmksIGxhYmVsOiBwcm9wcy5sYWJlbCB9KX19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntvbnRvbG9neS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gIH1cblxuICAgIGZ1bmN0aW9uIHJlbmRlck9udG9CYWRnZXMoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwcm9wcy5vbnRvbGlzdC5sZW5ndGggPiBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZICYmICFhcHBlYXJzSW5FeHBhbmRlZD9cbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMub250b2xpc3Quc2xpY2UoMCwgTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSkubWFwKChvbnRvbG9neTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlck9udG9CYWRnZShvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJleHBhbmQtb250by1saXN0XCIgb25DbGljaz17KCkgPT4gc2V0QXBwZWFyc0luRXhwYW5kZWQodHJ1ZSl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgKyB7cHJvcHMub250b2xpc3QubGVuZ3RoIC0gTUFYX09OVE9MT0dJRVNfT05fRElTUExBWX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC8+IDpcblxuICAgICAgICAgICAgICAgIHByb3BzLm9udG9saXN0Lm1hcCgob250b2xvZ3k6IHN0cmluZykgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgICAge3Byb3BzLm9udG9saXN0ICYmIHByb3BzLm9udG9saXN0Lmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPEV1aVRleHQgc3R5bGU9e3tmb250V2VpZ2h0OiBcIm5vcm1hbFwifX0+XG4gICAgICAgICAgICAgICAgQWxzbyBhcHBlYXJzIGluJm5ic3A7XG4gICAgICAgICAgICAgICAge3JlbmRlck9udG9CYWRnZXMoKX1cbiAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRW50aXR5T250b0xpc3RQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge3JhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5cbmNvbnN0IE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkgPSA1IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24ocHJvcHM6IEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uUHJvcHMpIHtcblxuICAgIGNvbnN0IFthcHBlYXJzSW5FeHBhbmRlZCwgc2V0QXBwZWFyc0luRXhwYW5kZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGZ1bmN0aW9uIHJlbmRlck9udG9CYWRnZShvbnRvbG9neTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXtyYW5kb21TdHJpbmcoKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge2lmKHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neShvbnRvbG9neSwgcHJvcHMuZW50aXR5VHlwZSB8fCBcIlwiLCB7IGlyaTogcHJvcHMuaXJpLCBsYWJlbDogcHJvcHMubGFiZWwgfSl9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57b250b2xvZ3kudG9VcHBlckNhc2UoKX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgcHJvcHMub250b2xpc3QubGVuZ3RoID4gTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSAmJiAhYXBwZWFyc0luRXhwYW5kZWQ/XG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICB7cHJvcHMub250b2xpc3Quc2xpY2UoMCwgTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSkubWFwKChvbnRvbG9neTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiZXhwYW5kLW9udG8tbGlzdFwiIG9uQ2xpY2s9eygpID0+IHNldEFwcGVhcnNJbkV4cGFuZGVkKHRydWUpfT5cbiAgICAgICAgICAgICAgICAgICAgICArIHtwcm9wcy5vbnRvbGlzdC5sZW5ndGggLSBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZfVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvPiA6XG5cbiAgICAgICAgICAgICAgcHJvcHMub250b2xpc3QubWFwKChvbnRvbG9neTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKSlcbiAgICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICAgIHtwcm9wcy5vbnRvbGlzdCAmJiBwcm9wcy5vbnRvbGlzdC5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxFdWlUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogXCJub3JtYWxcIn19PlxuICAgICAgICAgICAgICAgIERlZmluZWQgYnkmbmJzcDtcbiAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlcygpfVxuICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICApfVxuICAgIDwvPlxuXG4gICk7XG59XG5cbmV4cG9ydCB7IEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ29tcGFyYXRvcnMsXG4gIENyaXRlcmlhV2l0aFBhZ2luYXRpb24sXG4gIEV1aUJhc2ljVGFibGUsXG4gIEV1aUJ1dHRvbkljb24sXG4gIEV1aUhvcml6b250YWxSdWxlLFxuICBFdWlQcm92aWRlcixcbiAgRXVpTGluayxcbiAgRXVpU3BhY2VyLFxuICBFdWlUZXh0XG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBjc3MsIFNlcmlhbGl6ZWRTdHlsZXMgfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmltcG9ydCB7IEV1aUJhc2ljVGFibGVDb2x1bW4gfSBmcm9tIFwiQGVsYXN0aWMvZXVpL3NyYy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2Jhc2ljX3RhYmxlXCI7XG5pbXBvcnQgeyBPbHNSZXNvdXJjZSwgUmVzb3VyY2VzV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBPbnRvbG9naWVzIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IERFRkFVTFRfSU5JVElBTF9FTlRSSUVTX1BFUl9QQUdFID0gMTA7XG5jb25zdCBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TID0gWzEwLCAyNSwgNTAsIDEwMF07XG5jb25zdCBERUZBVUxUX0lOSVRJQUxfU09SVF9GSUVMRCA9IFwiY29uZmlnLnByZWZlcnJlZFByZWZpeFwiO1xuY29uc3QgREVGQVVMVF9JTklUSUFMX1NPUlRfRElSID0gXCJhc2NcIiBhcyBjb25zdDtcblxuZnVuY3Rpb24gUmVzb3VyY2VzV2lkZ2V0KHByb3BzOiBSZXNvdXJjZXNXaWRnZXRQcm9wcykge1xuICBjb25zdCB7XG4gICAgYXBpLFxuICAgIGluaXRpYWxFbnRyaWVzUGVyUGFnZSA9IERFRkFVTFRfSU5JVElBTF9FTlRSSUVTX1BFUl9QQUdFLFxuICAgIHBhZ2VTaXplT3B0aW9ucyA9IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMsXG4gICAgaW5pdGlhbFNvcnRGaWVsZCA9IERFRkFVTFRfSU5JVElBTF9TT1JUX0ZJRUxELFxuICAgIGluaXRpYWxTb3J0RGlyID0gREVGQVVMVF9JTklUSUFMX1NPUlRfRElSLFxuICAgIHRhcmdldExpbmssXG4gICAgcGFyYW1ldGVyLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCBbcGFnZUluZGV4LCBzZXRQYWdlSW5kZXhdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtwYWdlU2l6ZSwgc2V0UGFnZVNpemVdID0gdXNlU3RhdGUoaW5pdGlhbEVudHJpZXNQZXJQYWdlKTtcbiAgY29uc3QgW3NvcnRGaWVsZCwgc2V0U29ydEZpZWxkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bWJlcj4oaW5pdGlhbFNvcnRGaWVsZCk7XG4gIGNvbnN0IFtzb3J0RGlyZWN0aW9uLCBzZXRTb3J0RGlyZWN0aW9uXSA9IHVzZVN0YXRlKGluaXRpYWxTb3J0RGlyKTtcblxuXG4gIGNvbnN0IGNvbHVtbnM6IEFycmF5PEV1aUJhc2ljVGFibGVDb2x1bW48T2xzUmVzb3VyY2U+ICYgeyBjc3M/OiBTZXJpYWxpemVkU3R5bGVzIH0+ID0gW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiUmVzb3VyY2UgTmFtZVwiLFxuICAgICAgZmllbGQ6IFwiY29uZmlnLnRpdGxlXCIsXG4gICAgICB3aWR0aDogXCIxNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlNob3J0IE5hbWVcIixcbiAgICAgIGZpZWxkOiBcIm9udG9sb2d5SWRcIixcbiAgICAgIHJlbmRlcjogKHZhbHVlOiBzdHJpbmcpID0+IChcbiAgICAgICAgdGFyZ2V0TGluayA/IDxFdWlMaW5rIGhyZWY9e3RhcmdldExpbmsgKyBcIm9udG9sb2dpZXMvXCIgKyB2YWx1ZSArIFwiL1wifT57dmFsdWV9PC9FdWlMaW5rPiA6IHZhbHVlXG4gICAgICApLFxuICAgICAgd2lkdGg6IFwiMTAlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJEZXNjcmlwdGlvblwiLFxuICAgICAgZmllbGQ6IFwiY29uZmlnLmRlc2NyaXB0aW9uXCIsXG4gICAgICB3aWR0aDogXCIzMCVcIixcbiAgICAgIGNzczogY3NzYFxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgYFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICBmaWVsZDogXCJjb25maWcudmVyc2lvblwiLFxuICAgICAgd2lkdGg6IFwiNy41JVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIkxvYWRlZCBvblwiLFxuICAgICAgZmllbGQ6IFwibG9hZGVkXCIsXG4gICAgICB3aWR0aDogXCIxMCVcIixcbiAgICAgIGRhdGFUeXBlOiBcImRhdGVcIiBhcyBjb25zdCxcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlRlcm1zXCIsXG4gICAgICBmaWVsZDogXCJudW1iZXJPZlRlcm1zXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiA8Pnt2YWx1ZS50b0xvY2FsZVN0cmluZygpfTwvPixcbiAgICAgIHdpZHRoOiBcIjcuNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgIGZpZWxkOiBcIm51bWJlck9mUHJvcGVydGllc1wiLFxuICAgICAgcmVuZGVyOiAodmFsdWU6IG51bWJlcikgPT4gPD57dmFsdWUudG9Mb2NhbGVTdHJpbmcoKX08Lz4sXG4gICAgICB3aWR0aDogXCI3LjUlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJJbmRpdmlkdWFsc1wiLFxuICAgICAgZmllbGQ6IFwibnVtYmVyT2ZJbmRpdmlkdWFsc1wiLFxuICAgICAgcmVuZGVyOiAodmFsdWU6IG51bWJlcikgPT4gPD57dmFsdWUudG9Mb2NhbGVTdHJpbmcoKX08Lz4sXG4gICAgICB3aWR0aDogXCI3LjUlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgd2lkdGg6IFwiNSVcIixcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgLi4uKHByb3BzLmFjdGlvbnMgfHwgW10pLFxuICAgICAgICB7XG4gICAgICAgICAgcmVuZGVyOiAoaXRlbTogT2xzUmVzb3VyY2UpID0+IChcbiAgICAgICAgICAgIDxFdWlCdXR0b25JY29uXG4gICAgICAgICAgICAgIGhyZWY9e2l0ZW0uY29uZmlnLmZpbGVMb2NhdGlvbn1cbiAgICAgICAgICAgICAgaWNvblR5cGU9XCJkb3dubG9hZFwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEb3dubG9hZFwiXG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e1xuICAgICAgICAgICAgICAgICFpdGVtLmNvbmZpZy5hbGxvd0Rvd25sb2FkIHx8XG4gICAgICAgICAgICAgICAgaXRlbS5jb25maWcuZmlsZUxvY2F0aW9uLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICBdO1xuXG4gIGNvbnN0IG9uVGFibGVDaGFuZ2UgPSAoe1xuICAgIHBhZ2UsXG4gICAgc29ydCxcbiAgfTogQ3JpdGVyaWFXaXRoUGFnaW5hdGlvbjxPbHNSZXNvdXJjZT4pID0+IHtcbiAgICBjb25zdCB7IGluZGV4OiBwYWdlSW5kZXgsIHNpemU6IHBhZ2VTaXplIH0gPSBwYWdlO1xuICAgIHNldFBhZ2VJbmRleChwYWdlSW5kZXgpO1xuICAgIHNldFBhZ2VTaXplKHBhZ2VTaXplKTtcblxuICAgIGlmIChzb3J0KSB7XG4gICAgICBjb25zdCB7IGZpZWxkOiBzb3J0RmllbGQsIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbiB9ID0gc29ydDtcbiAgICAgIHNldFNvcnRGaWVsZChzb3J0RmllbGQpO1xuICAgICAgc2V0U29ydERpcmVjdGlvbihzb3J0RGlyZWN0aW9uKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qge1xuICAgIGRhdGE6IG9udG9sb2dpZXNEYXRhLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGlzTG9hZGluZ1xuICB9ID0gdXNlUXVlcnk8T250b2xvZ2llcz4oXG4gICAgW1wib250b2xvZ2llc0RhdGFcIiwgYXBpLCBwYXJhbWV0ZXJdLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0T250b2xvZ2llc0RhdGEoXG4gICAgICAgIHByb3BzLnBhcmFtZXRlcixcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG5cbiAgY29uc3Qgb250b3MgPSBvbnRvbG9naWVzRGF0YT8ucHJvcGVydGllcy5tYXAob250b2xvZ3kgPT4gKHtcbiAgICAuLi5vbnRvbG9neS5wcm9wZXJ0aWVzXG4gIH0pKSB8fCBbXTtcbmNvbnNvbGUubG9nKG9udG9zKVxuICBjb25zdCBmaW5kT250b2xvZ2llcyA9IChcbiAgICBvbnRvbG9naWVzOiBhbnlbXSxcbiAgICBwYWdlSW5kZXg6IG51bWJlcixcbiAgICBwYWdlU2l6ZTogbnVtYmVyLFxuICAgIHNvcnRGaWVsZDogYW55LFxuICAgIHNvcnREaXJlY3Rpb246IFwiYXNjXCIgfCBcImRlc2NcIlxuICApID0+IHtcbiAgICBsZXQgaXRlbXM7XG5cbiAgICBpZiAoc29ydEZpZWxkKSB7XG4gICAgICBpdGVtcyA9IG9udG9sb2dpZXNcbiAgICAgICAgLnNsaWNlKDApXG4gICAgICAgIC5zb3J0KFxuICAgICAgICAgIENvbXBhcmF0b3JzLnByb3BlcnR5KHNvcnRGaWVsZCwgQ29tcGFyYXRvcnMuZGVmYXVsdChzb3J0RGlyZWN0aW9uKSlcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXMgPSBvbnRvbG9naWVzO1xuICAgIH1cblxuICAgIGxldCBwYWdlT2ZJdGVtcztcblxuICAgIGlmICghcGFnZUluZGV4ICYmICFwYWdlU2l6ZSkge1xuICAgICAgcGFnZU9mSXRlbXMgPSBpdGVtcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2VJbmRleCAqIHBhZ2VTaXplO1xuICAgICAgcGFnZU9mSXRlbXMgPSBpdGVtcy5zbGljZShcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgTWF0aC5taW4oc3RhcnRJbmRleCArIHBhZ2VTaXplLCBvbnRvbG9naWVzLmxlbmd0aClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VPZkl0ZW1zLFxuICAgICAgdG90YWxJdGVtQ291bnQ6IG9udG9sb2dpZXMubGVuZ3RoXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCB7IHBhZ2VPZkl0ZW1zLCB0b3RhbEl0ZW1Db3VudCB9ID0gZmluZE9udG9sb2dpZXMoXG4gICAgb250b3MsXG4gICAgcGFnZUluZGV4LFxuICAgIHBhZ2VTaXplLFxuICAgIHNvcnRGaWVsZCxcbiAgICBzb3J0RGlyZWN0aW9uXG4gICk7XG5cbiAgY29uc3QgcGFnaW5hdGlvbiA9IHtcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgdG90YWxJdGVtQ291bnQsXG4gICAgcGFnZVNpemVPcHRpb25zXG4gIH07XG5cbiAgY29uc3QgcmVzdWx0c0NvdW50ID1cbiAgICBwYWdlU2l6ZSA9PT0gMCA/IChcbiAgICAgIDxzdHJvbmc+QWxsPC9zdHJvbmc+XG4gICAgKSA6IChcbiAgICAgIDw+XG4gICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAge3BhZ2VTaXplICogcGFnZUluZGV4ICsgMX0te3BhZ2VTaXplICogcGFnZUluZGV4ICsgcGFnZVNpemV9XG4gICAgICAgIDwvc3Ryb25nPntcIiBcIn1cbiAgICAgICAgb2Yge3RvdGFsSXRlbUNvdW50fVxuICAgICAgPC8+XG4gICAgKTtcblxuXG4gIGNvbnN0IHNvcnRpbmcgPSB7XG4gICAgc29ydDoge1xuICAgICAgZmllbGQ6IHNvcnRGaWVsZCxcbiAgICAgIGRpcmVjdGlvbjogc29ydERpcmVjdGlvblxuICAgIH1cbiAgfTtcblxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiZcbiAgICAgICAgPD5cbiAgICAgICAgICA8RXVpVGV4dCBzaXplPVwieHNcIj5cbiAgICAgICAgICAgIFNob3dpbmcge3Jlc3VsdHNDb3VudH0gPHN0cm9uZz5PbnRvbG9naWVzPC9zdHJvbmc+XG4gICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgIDxFdWlIb3Jpem9udGFsUnVsZSBtYXJnaW49XCJub25lXCIgc3R5bGU9e3sgaGVpZ2h0OiAyIH19IC8+XG5cbiAgICAgICAgICA8RXVpQmFzaWNUYWJsZVxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIGl0ZW1zPXtwYWdlT2ZJdGVtc31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvblRhYmxlQ2hhbmdlfVxuICAgICAgICAgICAgcGFnaW5hdGlvbj17cGFnaW5hdGlvbn1cbiAgICAgICAgICAgIHNvcnRpbmc9e3NvcnRpbmd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC8+XG4gICAgICB9XG4gICAgICB7aXNMb2FkaW5nICYmXG4gICAgICAgIDxFdWlCYXNpY1RhYmxlXG4gICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICBpdGVtcz17cGFnZU9mSXRlbXN9XG4gICAgICAgICAgb25DaGFuZ2U9e29uVGFibGVDaGFuZ2V9XG4gICAgICAgICAgcGFnaW5hdGlvbj17cGFnaW5hdGlvbn1cbiAgICAgICAgICBzb3J0aW5nPXtzb3J0aW5nfVxuICAgICAgICAgIGxvYWRpbmdcbiAgICAgICAgLz5cblxuICAgICAgfVxuICAgICAge2lzRXJyb3IgJiZcbiAgICAgICAgPEV1aUJhc2ljVGFibGVcbiAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgIGl0ZW1zPXtwYWdlT2ZJdGVtc31cbiAgICAgICAgICBvbkNoYW5nZT17b25UYWJsZUNoYW5nZX1cbiAgICAgICAgICBwYWdpbmF0aW9uPXtwYWdpbmF0aW9ufVxuICAgICAgICAgIHNvcnRpbmc9e3NvcnRpbmd9XG4gICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJyZXNvdXJjZXNcIil9XG4gICAgICAgICAgKi9cbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVzb3VyY2VzKHByb3BzOiBSZXNvdXJjZXNXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkUmVzb3VyY2VzV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRSZXNvdXJjZXNXaWRnZXQocHJvcHM6IFJlc291cmNlc1dpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPFJlc291cmNlc1dpZGdldFxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgaW5pdGlhbEVudHJpZXNQZXJQYWdlPXtwcm9wcy5pbml0aWFsRW50cmllc1BlclBhZ2V9XG4gICAgICAgICAgICAgIHBhZ2VTaXplT3B0aW9ucz17cHJvcHMucGFnZVNpemVPcHRpb25zfVxuICAgICAgICAgICAgICBpbml0aWFsU29ydEZpZWxkPXtwcm9wcy5pbml0aWFsU29ydEZpZWxkfVxuICAgICAgICAgICAgICBpbml0aWFsU29ydERpcj17cHJvcHMuaW5pdGlhbFNvcnREaXJ9XG4gICAgICAgICAgICAgIHRhcmdldExpbms9e3Byb3BzLnRhcmdldExpbmt9XG4gICAgICAgICAgICAgIGFjdGlvbnM9e3Byb3BzLmFjdGlvbnN9XG4gICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgUmVzb3VyY2VzV2lkZ2V0LCBjcmVhdGVSZXNvdXJjZXMgfTtcbiIsICJpbXBvcnQgeyBFdWlDb21ib0JveCwgRXVpUHJvdmlkZXIsIEV1aVN1Z2dlc3QsIEV1aVN1Z2dlc3Rpb25Qcm9wcyB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBTZWFyY2hCYXJXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbk9wdGlvbiB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvY29tYm9fYm94L3R5cGVzXCI7XG5cbmZ1bmN0aW9uIFNlYXJjaEJhcldpZGdldChwcm9wczogU2VhcmNoQmFyV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBxdWVyeSxcbiAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAvKipcbiAgICogc3VnZ2VzdGlvbnNcbiAgICovXG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlPEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+PigpO1xuXG4gIC8qKlxuICAgKiBzZWxlY3RlZCBzdWdnZXN0aW9uIChvbiBjbGljaylcbiAgICovXG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkXSA9IHVzZVN0YXRlPEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+PihbXSk7XG5cbiAgLyoqXG4gICAqIGN1cnJlbnQgc2VhcmNoIHZhbHVlXG4gICAqL1xuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlPHN0cmluZz4ocXVlcnkpO1xuXG4gIGNvbnN0IG9uQ2hhbmdlID0gKHNlbGVjdGVkT3B0aW9uOiBBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+PikgPT4ge1xuICAgIHNldFNlbGVjdGVkKHNlbGVjdGVkT3B0aW9uKTtcbiAgfTtcblxuICBjb25zdCBvbkNyZWF0ZU9wdGlvbiA9IChzZWFyY2hWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld09wdGlvbjogQXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4gPSBbe1xuICAgICAgbGFiZWw6IHNlYXJjaFZhbHVlXG4gICAgfV07XG5cbiAgICBzZXRTZWxlY3RlZChuZXdPcHRpb24pO1xuICB9O1xuXG5cbiAgLyoqXG4gICAqIGZldGNoZXMgc3VnZ2VzdGlvbnMgd2hlbiBzZWFyY2hWYWx1ZSBjaGFuZ2VzXG4gICAqL1xuICBjb25zdCB7XG4gICAgaXNMb2FkaW5nXG4gIH0gPSB1c2VRdWVyeShcbiAgICBbXG4gICAgICBcInN1Z2dlc3Rpb25zXCIsXG4gICAgICBzZWFyY2hWYWx1ZVxuICAgIF0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZWFyY2hWYWx1ZS50cmltKCkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBFeGl0IGVhcmx5IGlmIHNlYXJjaFZhbHVlIGlzIGVtcHR5XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xzQXBpLnN1Z2dlc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeTogc2VhcmNoVmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHByb3BzLnBhcmFtZXRlclxuICAgICAgKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UucmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzcG9uc2UuZG9jcykge1xuICAgICAgICAgIHNldE9wdGlvbnMocmVzcG9uc2UucmVzcG9uc2UuZG9jcy5tYXAoKHN1Z2dlc3Rpb246IGFueSkgPT4gKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogc3VnZ2VzdGlvbi5hdXRvc3VnZ2VzdCxcbiAgICAgICAgICAgICAgdHlwZTogeyBjb2xvcjogXCJ0aW50MVwiLCBpY29uVHlwZTogXCJcIiB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICk7XG5cbiAgLyoqXG4gICAqIE9uY2UgdGhlIHNlbGVjdGVkIG9wdGlvbiBjaGFuZ2VzLCBwYXNzIHRoZSBldmVudCBieSBpbnZva2luZyB0aGUgcGFzc2VkIGZ1bmN0aW9uLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQoXG4gICAgICBzZWxlY3RlZE9wdGlvbnMubWFwKChzZWxlY3RlZE9wdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhYmVsOiBzZWxlY3RlZE9wdGlvbi5sYWJlbFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbc2VsZWN0ZWRPcHRpb25zXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEV1aUNvbWJvQm94XG4gICAgICAgIGlkPXtcInN1Z2dlc3RcIn1cbiAgICAgICAgaXNDbGVhcmFibGVcbiAgICAgICAgYXJpYS1sYWJlbD1cInNlYXJjaEJhclwiXG4gICAgICAgIGZ1bGxXaWR0aD17dHJ1ZX1cbiAgICAgICAgYXN5bmM9e3RydWV9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtcIlNlYXJjaFwifVxuICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uPXt0cnVlfVxuICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zPXtzZWxlY3RlZE9wdGlvbnN9XG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgb25DcmVhdGVPcHRpb249e29uQ3JlYXRlT3B0aW9ufVxuICAgICAgICBvblNlYXJjaENoYW5nZT17KGl0ZW0pID0+IHtcbiAgICAgICAgICBzZXRTZWFyY2hWYWx1ZShpdGVtKTtcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaEJhcihwcm9wczogU2VhcmNoQmFyV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogYW55LCBjYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRTZWFyY2hCYXJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFNlYXJjaEJhcldpZGdldChwcm9wczogU2VhcmNoQmFyV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8U2VhcmNoQmFyV2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgcXVlcnk9e3Byb3BzLnF1ZXJ5fVxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudD17cHJvcHMuc2VsZWN0aW9uQ2hhbmdlZEV2ZW50fVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IFNlYXJjaEJhcldpZGdldCwgY3JlYXRlU2VhcmNoQmFyIH07XG4iLCAiaW1wb3J0IHtcbiAgRXVpQnV0dG9uRW1wdHksXG4gIEV1aUZsZXhHcm91cCxcbiAgRXVpRmxleEl0ZW0sXG4gIEV1aUZvcm1Sb3csXG4gIEV1aUhvcml6b250YWxSdWxlLFxuICBFdWlMb2FkaW5nU3Bpbm5lcixcbiAgRXVpUGFuZWwsIEV1aVByb3ZpZGVyLFxuICBFdWlTZWxlY3RhYmxlLFxuICBFdWlTZWxlY3RhYmxlT3B0aW9uLFxuICBFdWlTcGFjZXIsXG4gIEV1aVN3aXRjaCxcbiAgRXVpVGFibGVQYWdpbmF0aW9uLFxuICBFdWlUZXh0XG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBNZXRhZGF0YUNvbXBhY3QgfSBmcm9tIFwiLi9NZXRhZGF0YUNvbXBhY3RcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVXaWRnZXQgfSBmcm9tIFwiLi4vQXV0b2NvbXBsZXRlV2lkZ2V0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgU2VhcmNoQmFyV2lkZ2V0IH0gZnJvbSBcIi4uL1NlYXJjaEJhcldpZGdldFwiO1xuXG5jb25zdCBERUZBVUxUX0lOSVRJQUxfSVRFTVNfUEVSX1BBR0UgPSAxMDtcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMgPSBbMTAsIDI1LCA1MCwgMTAwXTtcblxuZnVuY3Rpb24gU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQocHJvcHM6IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBxdWVyeSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgaW5pdGlhbEl0ZW1zUGVyUGFnZSA9IERFRkFVTFRfSU5JVElBTF9JVEVNU19QRVJfUEFHRSxcbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyxcbiAgICB0YXJnZXRMaW5rLFxuICAgIHByZXNlbGVjdGVkLFxuICAgIHVzZUxlZ2FjeSA9IHRydWUsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlKHF1ZXJ5KTtcbiAgY29uc3QgW2FjdGl2ZVBhZ2UsIHNldEFjdGl2ZVBhZ2VdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtwYWdlQ291bnQsIHNldFBhZ2VDb3VudF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2l0ZW1zUGVyUGFnZSwgc2V0SXRlbXNQZXJQYWdlXSA9IHVzZVN0YXRlKGluaXRpYWxJdGVtc1BlclBhZ2UpO1xuICBjb25zdCBbdG90YWxJdGVtcywgc2V0VG90YWxJdGVtc10gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2V4YWN0TWF0Y2gsIHNldEV4YWN0TWF0Y2hdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd09ic29sZXRlVGVybXMsIHNldFNob3dPYnNvbGV0ZVRlcm1zXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2ZpbHRlckJ5VHlwZU9wdGlvbnMsIHNldEZpbHRlckJ5VHlwZU9wdGlvbnNdID0gdXNlU3RhdGU8RXVpU2VsZWN0YWJsZU9wdGlvbltdPihbXSk7XG4gIGNvbnN0IFtmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucywgc2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnNdID0gdXNlU3RhdGU8RXVpU2VsZWN0YWJsZU9wdGlvbltdPihbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTZWFyY2hWYWx1ZShxdWVyeSk7XG4gIH0sIFtxdWVyeV0pO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZpbHRlck9wdGlvbnMoY3VycmVudE9wdGlvbnM6IEV1aVNlbGVjdGFibGVPcHRpb25bXSwgb3B0aW9uQ291bnRzOiBhbnlbXSwgc2V0T3B0aW9uczogRnVuY3Rpb24sIHJlbmRlcj86ICh2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmcpIHtcbiAgICBpZiAoY3VycmVudE9wdGlvbnMubGVuZ3RoID09IDApIHtcbiAgICAgIHNldE9wdGlvbnMob3B0aW9uQ291bnRzLnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueVtdLCBjdXJyZW50VmFsdWU6IHN0cmluZywgY3VycmVudEluZGV4OiBudW1iZXIsIGFycmF5OiBhbnlbXSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudEluZGV4ICUgMiA9PT0gMCkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IHJlbmRlciA/IHJlbmRlcihjdXJyZW50VmFsdWUpIDogY3VycmVudFZhbHVlLFxuICAgICAgICAgICAga2V5OiBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgICBhcHBlbmQ6IFwiKFwiICsgYXJyYXlbY3VycmVudEluZGV4ICsgMV0gKyBcIilcIixcbiAgICAgICAgICAgIGRpc2FibGVkOiBhcnJheVtjdXJyZW50SW5kZXggKyAxXSA9PSAwLFxuICAgICAgICAgICAgZGF0YTogeyB0b3RhbENvdW50OiBhcnJheVtjdXJyZW50SW5kZXggKyAxXSB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfSwgW10pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3T3B0aW9uczogRXVpU2VsZWN0YWJsZU9wdGlvbltdID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5ld09wdGlvbnMucHVzaChPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50T3B0aW9uc1tpXSkpOyAvLyB1c2luZyBPYmplY3QuYXNzaWduIHRvIHBhc3MgYnkgdmFsdWUsIG5vdCBieSByZWZlcmVuY2VcbiAgICAgIH1cblxuICAgICAgb3B0aW9uQ291bnRzLmZvckVhY2goKGN1cnJlbnRWYWx1ZTogc3RyaW5nLCBjdXJyZW50SW5kZXg6IG51bWJlciwgYXJyYXk6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggJSAyID09PSAwKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uID0gbmV3T3B0aW9ucy5maW5kKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkgPT0gY3VycmVudFZhbHVlKTtcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICBvcHRpb24uYXBwZW5kID0gXCIoXCIgKyBhcnJheVtjdXJyZW50SW5kZXggKyAxXTtcbiAgICAgICAgICAgIGlmIChvcHRpb24uZGF0YSAmJiBhcnJheVtjdXJyZW50SW5kZXggKyAxXSA8IG9wdGlvbi5kYXRhLnRvdGFsQ291bnQpIHtcbiAgICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCArPSBcIi9cIiArIG9wdGlvbi5kYXRhLnRvdGFsQ291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb24uYXBwZW5kICs9IFwiKVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbHRlclNlbGVjdGVkT3B0aW9ucyA9IChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5jaGVja2VkID09PSBcIm9uXCI7XG5cbiAgY29uc3Qge1xuICAgIGRhdGE6IHNlYXJjaFJlc3VsdHMsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeShcbiAgICBbXG4gICAgICBcInNlYXJjaFJlc3VsdHNcIixcbiAgICAgIGFwaSxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgZXhhY3RNYXRjaCxcbiAgICAgIHNob3dPYnNvbGV0ZVRlcm1zLFxuICAgICAgYWN0aXZlUGFnZSxcbiAgICAgIGl0ZW1zUGVyUGFnZSxcbiAgICAgIGZpbHRlckJ5VHlwZU9wdGlvbnMuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucykubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkpLFxuICAgICAgZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucykubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkpLFxuICAgICAgcGFyYW1ldGVyXG4gICAgXSxcbiAgICBhc3luYyAoeyBzaWduYWwgfSkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5zZWFyY2goXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgZXhhY3RNYXRjaDogZXhhY3RNYXRjaCxcbiAgICAgICAgICBzaG93T2Jzb2xldGVUZXJtczogc2hvd09ic29sZXRlVGVybXMsXG4gICAgICAgICAgdHlwZXM6IGZpbHRlckJ5VHlwZU9wdGlvbnMuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucykubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkpLmpvaW4oXCIsXCIpLFxuICAgICAgICAgIG9udG9sb2d5OiBmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucy5maWx0ZXIoZmlsdGVyU2VsZWN0ZWRPcHRpb25zKS5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSkuam9pbihcIixcIiksXG4gICAgICAgICAgZ3JvdXBCeUlyaTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFnZTogYWN0aXZlUGFnZS50b1N0cmluZygpLFxuICAgICAgICAgIHNpemU6IGl0ZW1zUGVyUGFnZS50b1N0cmluZygpXG4gICAgICAgIH0sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcHJvcHMucGFyYW1ldGVyLFxuICAgICAgICBzaWduYWxcbiAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlW1wicmVzcG9uc2VcIl0gJiYgcmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcImRvY3NcIl0gIT0gbnVsbCAmJiByZXNwb25zZVtcInJlc3BvbnNlXCJdW1wibnVtRm91bmRcIl0gIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChyZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXSAmJiByZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXSkge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1widHlwZVwiXSkge1xuICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXJPcHRpb25zKFxuICAgICAgICAgICAgICAgIGZpbHRlckJ5VHlwZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJ0eXBlXCJdLFxuICAgICAgICAgICAgICAgIHNldEZpbHRlckJ5VHlwZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRWYWx1ZTogc3RyaW5nKSA9PiBgJHtjdXJyZW50VmFsdWVbMF0udG9VcHBlckNhc2UoKX0ke2N1cnJlbnRWYWx1ZS5zbGljZSgxKX1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXNlTGVnYWN5KSB7XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcIm9udG9sb2d5X25hbWVcIl0pIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXJPcHRpb25zKFxuICAgICAgICAgICAgICAgICAgZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICByZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcIm9udG9sb2d5X25hbWVcIl0sXG4gICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gY3VycmVudFZhbHVlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neUlkXCJdKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlRmlsdGVyT3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgIGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neUlkXCJdLFxuICAgICAgICAgICAgICAgICAgc2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAoY3VycmVudFZhbHVlOiBzdHJpbmcpID0+IGN1cnJlbnRWYWx1ZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldFRvdGFsSXRlbXMocmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcIm51bUZvdW5kXCJdKTtcbiAgICAgICAgICBjb25zdCBuZXdQYWdlQ291bnQgPSBNYXRoLmNlaWwocmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcIm51bUZvdW5kXCJdIC8gaXRlbXNQZXJQYWdlKTtcbiAgICAgICAgICBzZXRQYWdlQ291bnQobmV3UGFnZUNvdW50KTtcbiAgICAgICAgICBpZiAoYWN0aXZlUGFnZSA+PSBuZXdQYWdlQ291bnQpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZVBhZ2UoMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3BvbnNlLmRvY3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBBUEkgcmVzcG9uc2VcIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAge1xuICAgICAga2VlcFByZXZpb3VzRGF0YTogdHJ1ZVxuICAgIH0gLy8gU2VlOiBodHRwczovL3JlYWN0LXF1ZXJ5LXYzLnRhbnN0YWNrLmNvbS9ndWlkZXMvcGFnaW5hdGVkLXF1ZXJpZXNcbiAgKTtcblxuICBmdW5jdGlvbiBvbkNoYW5nZUl0ZW1zUGVyUGFnZShuZXdJdGVtc1BlclBhZ2U6IG51bWJlcikge1xuICAgIHNldEFjdGl2ZVBhZ2UoTWF0aC5mbG9vcigoYWN0aXZlUGFnZSAqIGl0ZW1zUGVyUGFnZSArIDEpIC8gbmV3SXRlbXNQZXJQYWdlKSk7XG4gICAgc2V0SXRlbXNQZXJQYWdlKG5ld0l0ZW1zUGVyUGFnZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVFeGFjdE1hdGNoKCkge1xuICAgIHNldEV4YWN0TWF0Y2goIWV4YWN0TWF0Y2gpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlU2hvd09ic29sZXRlVGVybXMoKSB7XG4gICAgc2V0U2hvd09ic29sZXRlVGVybXMoIXNob3dPYnNvbGV0ZVRlcm1zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyRmlsdGVyKGN1cnJlbnRPcHRpb25zOiBFdWlTZWxlY3RhYmxlT3B0aW9uW10sIHNldE9wdGlvbnM6IEZ1bmN0aW9uKSB7XG4gICAgY29uc3QgbmV3T3B0aW9ucyA9IFsuLi5jdXJyZW50T3B0aW9uc107XG4gICAgc2V0T3B0aW9ucyhuZXdPcHRpb25zLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiAoeyAuLi5vcHRpb24sIGNoZWNrZWQ6IHVuZGVmaW5lZCB9KSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJBbGxGaWx0ZXJzKCkge1xuICAgIGNsZWFyRmlsdGVyKGZpbHRlckJ5VHlwZU9wdGlvbnMsIHNldEZpbHRlckJ5VHlwZU9wdGlvbnMpO1xuICAgIGNsZWFyRmlsdGVyKGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLCBzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1fdG9fc2VhcmNoVmFsdWUoc2VsZWN0ZWRPcHRpb246IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGlyaT86IHN0cmluZztcbiAgICBvbnRvbG9neV9uYW1lPzogc3RyaW5nO1xuICAgIHR5cGU/OiBzdHJpbmdcbiAgfVtdKSB7XG4gICAgc2V0U2VhcmNoVmFsdWUoc2VsZWN0ZWRPcHRpb25bMF0gPyBzZWxlY3RlZE9wdGlvblswXS5sYWJlbCA6IFwiXCIpO1xuICB9XG5cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U2VhcmNoQmFyV2lkZ2V0XG4gICAgICAgIGFwaT17YXBpfVxuICAgICAgICBxdWVyeT17XCJcIn1cbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50PXsoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgICAgICB0cmFuc2Zvcm1fdG9fc2VhcmNoVmFsdWUoc2VsZWN0ZWRPcHRpb24pO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInhsXCIgLz5cbiAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIiAvPlxuXG4gICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17M30gc3R5bGU9e3sgbWluV2lkdGg6IDI1MCB9fT5cbiAgICAgICAgICA8RXVpUGFuZWw+XG4gICAgICAgICAgICB7aXNTdWNjZXNzICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IHR5cGVcIj5cbiAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17ZmlsdGVyQnlUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeVR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgeyhsaXN0KSA9PiBsaXN0fVxuICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2lzTG9hZGluZyAmJlxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSB0eXBlXCI+XG4gICAgICAgICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2lzRXJyb3IgJiZcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgdHlwZVwiPlxuICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtbXX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeVR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgeyhsaXN0KSA9PiBsaXN0fVxuICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7aXNTdWNjZXNzICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IG9udG9sb2d5XCI+XG4gICAgICAgICAgICAgICAgPEV1aVNlbGVjdGFibGVcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e2ZpbHRlckJ5T250b2xvZ3lPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgICBzZWFyY2hhYmxlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgeyhsaXN0LCBzZWFyY2gpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICB7c2VhcmNofVxuICAgICAgICAgICAgICAgICAgICAgIHtsaXN0fVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7aXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IG9udG9sb2d5XCI+XG4gICAgICAgICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2lzRXJyb3IgJiZcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgb250b2xvZ3lcIj5cbiAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17W119XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsaXN0UHJvcHM9e3sgYm9yZGVyZWQ6IHRydWUgfX1cbiAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7KGxpc3QsIHNlYXJjaCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgIHtzZWFyY2h9XG4gICAgICAgICAgICAgICAgICAgICAge2xpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0V1aVNlbGVjdGFibGU+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPEV1aUJ1dHRvbkVtcHR5XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NsZWFyQWxsRmlsdGVyc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQ2xlYXIgYWxsIGZpbHRlcnNcbiAgICAgICAgICAgIDwvRXVpQnV0dG9uRW1wdHk+XG4gICAgICAgICAgPC9FdWlQYW5lbD5cbiAgICAgICAgPC9FdWlGbGV4SXRlbT5cblxuICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17N30+XG4gICAgICAgICAgPEV1aVBhbmVsIGNvbG9yPVwidHJhbnNwYXJlbnRcIiBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgIDxFdWlTd2l0Y2ggbGFiZWw9XCJFeGFjdCBtYXRjaFwiIGNoZWNrZWQ9e2V4YWN0TWF0Y2h9IG9uQ2hhbmdlPXt0b2dnbGVFeGFjdE1hdGNofSAvPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPEV1aVN3aXRjaCBsYWJlbD1cIlNob3cgb25seSBvYnNvbGV0ZSB0ZXJtc1wiIGNoZWNrZWQ9e3Nob3dPYnNvbGV0ZVRlcm1zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RvZ2dsZVNob3dPYnNvbGV0ZVRlcm1zfSAvPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG5cbiAgICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cIm1cIiAvPlxuXG4gICAgICAgICAgICA8RXVpVGV4dCBzaXplPVwieHNcIiBzdHlsZT17eyBwYWRkaW5nOiBcIjAgOHB4XCIgfX0+XG4gICAgICAgICAgICAgIFNob3dpbmcge01hdGgubWluKGFjdGl2ZVBhZ2UgKiBpdGVtc1BlclBhZ2UgKyAxLCB0b3RhbEl0ZW1zKX0gdG8ge01hdGgubWluKChhY3RpdmVQYWdlICsgMSkgKiBpdGVtc1BlclBhZ2UsIHRvdGFsSXRlbXMpfSBvZiB7dG90YWxJdGVtc30gcmVzdWx0c1xuICAgICAgICAgICAgPC9FdWlUZXh0PlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cblxuICAgICAgICAgICAgPEV1aUhvcml6b250YWxSdWxlIG1hcmdpbj1cIm5vbmVcIiBzdHlsZT17eyBoZWlnaHQ6IDIgfX0gLz5cblxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG5cbiAgICAgICAgICAgIDxFdWlUYWJsZVBhZ2luYXRpb25cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCByZXN1bHQgcGFnaW5hdGlvblwiXG4gICAgICAgICAgICAgIHBhZ2VDb3VudD17cGFnZUNvdW50fVxuICAgICAgICAgICAgICBhY3RpdmVQYWdlPXthY3RpdmVQYWdlfVxuICAgICAgICAgICAgICBvbkNoYW5nZVBhZ2U9e3NldEFjdGl2ZVBhZ2V9XG4gICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZT17aXRlbXNQZXJQYWdlfVxuICAgICAgICAgICAgICBvbkNoYW5nZUl0ZW1zUGVyUGFnZT17b25DaGFuZ2VJdGVtc1BlclBhZ2V9XG4gICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM9e2l0ZW1zUGVyUGFnZU9wdGlvbnN9XG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cblxuICAgICAgICAgICAge3NlYXJjaFJlc3VsdHMgJiYgc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdDogYW55KSA9PiAoXG4gICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudCBrZXk9e3Jlc3VsdC5pZH0+XG4gICAgICAgICAgICAgICAgPE1ldGFkYXRhQ29tcGFjdCBhcGk9e2FwaX0gcmVzdWx0PXtyZXN1bHR9IHRhcmdldExpbms9e3RhcmdldExpbmt9IC8+XG4gICAgICAgICAgICAgICAgPEV1aVNwYWNlciAvPlxuICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9FdWlQYW5lbD5cbiAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdChwcm9wczogU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRTZWFyY2hSZXN1bHRzTGlzdFdpZGdldChwcm9wczogU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxTZWFyY2hSZXN1bHRzTGlzdFdpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHF1ZXJ5PXtwcm9wcy5xdWVyeX1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICBpbml0aWFsSXRlbXNQZXJQYWdlPXtwcm9wcy5pbml0aWFsSXRlbXNQZXJQYWdlfVxuICAgICAgICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM9e3Byb3BzLml0ZW1zUGVyUGFnZU9wdGlvbnN9XG4gICAgICAgICAgdGFyZ2V0TGluaz17cHJvcHMudGFyZ2V0TGlua31cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBTZWFyY2hSZXN1bHRzTGlzdFdpZGdldCwgY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QgfTtcbiIsICJpbXBvcnQgeyBFdWlDYXJkLCBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtLCBFdWlTcGFjZXIsIEV1aVRpdGxlIH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQnJlYWRjcnVtYldpZGdldCwgRGVzY3JpcHRpb25XaWRnZXQsIElyaVdpZGdldCB9IGZyb20gXCIuLi9NZXRhZGF0YVdpZGdldFwiO1xuaW1wb3J0IHtNZXRhZGF0YUNvbXBhY3RQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcblxuZnVuY3Rpb24gTWV0YWRhdGFDb21wYWN0KHByb3BzOiBNZXRhZGF0YUNvbXBhY3RQcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgICAgYXBpLFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIHRhcmdldExpbmssXG4gICAgICAgIC4uLnJlc3RcbiAgICB9ID0gcHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpQ2FyZFxuICAgICAgICAgICAgdGV4dEFsaWduPVwibGVmdFwiXG4gICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIGhyZWY9e3RhcmdldExpbmsgP1xuICAgICAgICAgICAgICAgIChyZXN1bHQudHlwZSAhPSBcIm9udG9sb2d5XCIgP1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaW5rICsgXCJvbnRvbG9naWVzL1wiICsgcmVzdWx0Lm9udG9sb2d5X25hbWUgKyBcIi9cIiArIHBsdXJhbGl6ZVR5cGUocmVzdWx0LnR5cGUsIHRydWUpICsgXCI/aXJpPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc3VsdC5pcmkpXG4gICAgICAgICAgICAgICAgICAgIDogdGFyZ2V0TGluayArIFwib250b2xvZ2llcy9cIiArIHJlc3VsdC5vbnRvbG9neV9uYW1lKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgIDxFdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RXVpVGl0bGU+PGgyPntyZXN1bHQubGFiZWx9PC9oMj48L0V1aVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cmVzdWx0LnR5cGUgIT0gXCJvbnRvbG9neVwiICYmIDxCcmVhZGNydW1iV2lkZ2V0IGFwaT17YXBpfSBpcmk9e3Jlc3VsdC5pcml9IGVudGl0eVR5cGU9e3Jlc3VsdC50eXBlfSBvbnRvbG9neUlkPXtyZXN1bHQub250b2xvZ3lfbmFtZX0vPn1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgICAge3Jlc3VsdC50eXBlICE9IFwib250b2xvZ3lcIiA/IDxJcmlXaWRnZXQgaXJpPXtyZXN1bHQuaXJpfS8+IDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiLz5cbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbldpZGdldCBhcGk9e2FwaX0gb250b2xvZ3lJZD17cmVzdWx0Lm9udG9sb2d5X25hbWV9IGlyaT17cmVzdWx0LmlyaX0gdGhpbmdUeXBlPXtyZXN1bHQudHlwZX0vPlxuICAgICAgICA8L0V1aUNhcmQ+XG5cbiAgICApO1xufVxuXG5leHBvcnQgeyBNZXRhZGF0YUNvbXBhY3QgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpL09sc0FwaSdcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tICdyZWFjdC1xdWVyeSdcbmltcG9ydCB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5LCBzaW5ndWxhcml6ZVR5cGV9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlPbnRvTGlzdFdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vLi4vc3R5bGUvc2VtbG9va3Atc3R5bGVzLmNzc1wiO1xuaW1wb3J0IHtFbnRpdHlUeXBlTmFtZX0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5cbmZ1bmN0aW9uIEVudGl0eU9udG9MaXN0V2lkZ2V0KHByb3BzOiBFbnRpdHlPbnRvTGlzdFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8e29udG9MaXN0OiBzdHJpbmdbXSwgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIGxhYmVsOiBzdHJpbmd9PihcbiAgICBbXCJlbnRpdHlPbnRvTGlzdFwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IG9udG9saXN0IDogc3RyaW5nW107XG4gICAgICAgIGxldCByZWFsRW50aXR5VHlwZSA6IEVudGl0eVR5cGVOYW1lO1xuICAgICAgICBsZXQgbGFiZWwgOiBzdHJpbmc7XG4gICAgICAgIGlmKHVzZUxlZ2FjeSkge1xuICAgICAgICAgICAgY29uc3QgZW1iZWRkZWQgPSAoYXdhaXQgb2xzQXBpLmdldEVudGl0eVJlc3BvbnNlKGlyaSwgZW50aXR5VHlwZSwgdW5kZWZpbmVkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSkpW1wiX2VtYmVkZGVkXCJdO1xuICAgICAgICAgICAgb250b2xpc3QgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dLm1hcCgoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuICAgICAgICAgICAgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IHNpbmd1bGFyaXplVHlwZShPYmplY3Qua2V5cyhlbWJlZGRlZClbMF0pIGFzIEVudGl0eVR5cGVOYW1lO1xuICAgICAgICAgICAgbGFiZWwgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dWzBdW1wibGFiZWxcIl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgICAgICAgb250b2xpc3QgPSBlbnRpdHkuZ2V0QXBwZWFyc0luKCk7XG4gICAgICAgICAgICByZWFsRW50aXR5VHlwZSA9IGVudGl0eVR5cGUgfHwgZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZTtcbiAgICAgICAgICAgIGxhYmVsID0gZW50aXR5LmdldExhYmVsKCkgfHwgXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBvbnRvbGlzdCA9IG9udG9saXN0LmZpbHRlcigob250byA6IHN0cmluZykgPT4gb250byAhPSBvbnRvbG9neUlkKS5zb3J0KCk7XG4gICAgICAgIHJldHVybiB7b250b0xpc3Q6IG9udG9saXN0LCBlbnRpdHlUeXBlOiByZWFsRW50aXR5VHlwZSwgbGFiZWw6IGxhYmVsfTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmXG4gICAgICAgIDxFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbiBvbnRvbGlzdD17ZGF0YS5vbnRvTGlzdH0gZW50aXR5VHlwZT17ZGF0YS5lbnRpdHlUeXBlfSBsYWJlbD17ZGF0YS5sYWJlbH0gaXJpPXtpcml9IG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX0gLz59XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwib250b2xvZ3kgbGlzdFwiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlPbnRvTGlzdChwcm9wczogRW50aXR5T250b0xpc3RXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRFbnRpdHlPbnRvTGlzdFdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRW50aXR5T250b0xpc3RXaWRnZXQocHJvcHM6IEVudGl0eU9udG9MaXN0V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEVudGl0eU9udG9MaXN0V2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IEVudGl0eU9udG9MaXN0V2lkZ2V0LCBjcmVhdGVFbnRpdHlPbnRvTGlzdCB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tICcuLi8uLi8uLi8uLi9hcGkvT2xzQXBpJ1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gJ3JlYWN0LXF1ZXJ5J1xuaW1wb3J0IHtnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXksIHNpbmd1bGFyaXplVHlwZX0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eURlZmluZWRCeVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS9zZW1sb29rcC1zdHlsZXMuY3NzXCI7XG5pbXBvcnQge0VudGl0eVR5cGVOYW1lfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcblxuZnVuY3Rpb24gRW50aXR5RGVmaW5lZEJ5V2lkZ2V0KHByb3BzOiBFbnRpdHlEZWZpbmVkQnlXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHVzZUxlZ2FjeSB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PHtvbnRvTGlzdDogc3RyaW5nW10sIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBsYWJlbDogc3RyaW5nfT4oXG4gICAgW1wiZW50aXR5RGVmaW5lZEJ5XCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgb250b2xpc3QgOiBzdHJpbmdbXTtcbiAgICAgICAgbGV0IHJlYWxFbnRpdHlUeXBlIDogRW50aXR5VHlwZU5hbWU7XG4gICAgICAgIGxldCBsYWJlbCA6IHN0cmluZztcbiAgICAgICAgaWYodXNlTGVnYWN5KSB7XG4gICAgICAgICAgICBjb25zdCBlbWJlZGRlZCA9IChhd2FpdCBvbHNBcGkuZ2V0RW50aXR5UmVzcG9uc2UoaXJpLCBlbnRpdHlUeXBlLCB1bmRlZmluZWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KSlbXCJfZW1iZWRkZWRcIl07XG4gICAgICAgICAgICBvbnRvbGlzdCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKChlbnRpdHlJbk9udG9sb2d5IDogYW55KSA9PiBlbnRpdHlJbk9udG9sb2d5W1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0pXG4gICAgICAgICAgICAgICAgLm1hcCgoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuICAgICAgICAgICAgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IHNpbmd1bGFyaXplVHlwZShPYmplY3Qua2V5cyhlbWJlZGRlZClbMF0pIGFzIEVudGl0eVR5cGVOYW1lO1xuICAgICAgICAgICAgbGFiZWwgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dWzBdW1wibGFiZWxcIl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgICAgICAgb250b2xpc3QgPSBlbnRpdHkuZ2V0RGVmaW5lZEJ5KCkuZmlsdGVyKChvbnRvbG9neSkgPT4gb250b2xvZ3kgIT0gZW50aXR5LmdldE9udG9sb2d5SWQoKSk7XG4gICAgICAgICAgICByZWFsRW50aXR5VHlwZSA9IGVudGl0eVR5cGUgfHwgZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZTtcbiAgICAgICAgICAgIGxhYmVsID0gZW50aXR5LmdldExhYmVsKCkgfHwgXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBvbnRvbGlzdCA9IG9udG9saXN0LnNvcnQoKTtcbiAgICAgICAgcmV0dXJuIHtvbnRvTGlzdDogb250b2xpc3QsIGVudGl0eVR5cGU6IHJlYWxFbnRpdHlUeXBlLCBsYWJlbDogbGFiZWx9O1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbiBvbnRvbGlzdD17ZGF0YS5vbnRvTGlzdH0gZW50aXR5VHlwZT17ZGF0YS5lbnRpdHlUeXBlfSBsYWJlbD17ZGF0YS5sYWJlbH0gaXJpPXtpcml9IG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX0gLz59XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwib250b2xvZ3kgbGlzdFwiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlEZWZpbmVkQnkocHJvcHM6IEVudGl0eURlZmluZWRCeVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0eURlZmluZWRCeVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRW50aXR5RGVmaW5lZEJ5V2lkZ2V0KHByb3BzOiBFbnRpdHlEZWZpbmVkQnlXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8RW50aXR5RGVmaW5lZEJ5V2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IEVudGl0eURlZmluZWRCeVdpZGdldCwgY3JlYXRlRW50aXR5RGVmaW5lZEJ5IH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7UmVhY3RFbGVtZW50fSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge0V1aUNhcmQsIEV1aUZsZXhJdGVtLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7Q2xhc3MsIEVudGl0eSwgSW5kaXZpZHVhbCwgUHJvcGVydHksIFRoaW5nfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtnZXRDbGFzc0V4cHJlc3Npb25KU1gsIGdldEVudGl0eUxpbmtKU1gsIGdldFJlaWZpZWRKU1gsIGdldFNlY3Rpb25MaXN0SlNYfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQge2lzQ2xhc3MsIGlzSW5kaXZpZHVhbCwgaXNQcm9wZXJ0eX0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IHthc0FycmF5LCBjYXBpdGFsaXplLCBnZXRFbnRpdHlUeXBlTmFtZSwgcmFuZG9tU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IERFRkFVTFRfSEFTX1RJVExFID0gdHJ1ZTtcblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHR5cGUgc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBpbmRpdmlkdWFsXG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldEluZGl2aWR1YWxUeXBlc1NlY3Rpb25KU1goaW5kaXZpZHVhbDogSW5kaXZpZHVhbCwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0eXBlcyA9IGluZGl2aWR1YWwuZ2V0UmRmVHlwZXMoKS5maWx0ZXIoKGVsZW06IHN0cmluZykgPT4gZWxlbSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNOYW1lZEluZGl2aWR1YWxcIiAmJiAhZWxlbS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSk7XG5cbiAgICBpZihpbmRpdmlkdWFsLmdldFJkZlR5cGVzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxiPlR5cGU8L2I+XG4gICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB0eXBlcywgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+KTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBzYW1lIGFzIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gaW5kaXZpZHVhbFxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRJbmRpdmlkdWFsU2FtZUFzU2VjdGlvbkpTWChpbmRpdmlkdWFsOiBJbmRpdmlkdWFsLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNhbWVBcyA9IGluZGl2aWR1YWwuZ2V0U2FtZUFzKCk7XG5cbiAgICBpZihzYW1lQXMubGVuZ3RoID4gMCl7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+U2FtZSBBczwvYj5cbiAgICAgICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBzYW1lQXMsIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBkaWZmZXJlbnQgZnJvbSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGluZGl2aWR1YWxcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbERpZmZlcmVudEZyb21TZWN0aW9uSlNYKGluZGl2aWR1YWw6IEluZGl2aWR1YWwsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZGlmZmVyZW50RnJvbSA9IGluZGl2aWR1YWwuZ2V0RGlmZmVyZW50RnJvbSgpO1xuXG4gICAgaWYoZGlmZmVyZW50RnJvbS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+RGlmZmVyZW50IGZyb208L2I+XG4gICAgICAgICAgICAgICAge2dldFNlY3Rpb25MaXN0SlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgZGlmZmVyZW50RnJvbSwgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGRpc2pvaW50IHdpdGggc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0RGlzam9pbnRXaXRoU2VjdGlvbkpTWChlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZGlzam9pbnRXaXRoID0gZW50aXR5LmdldERpc2pvaW50V2l0aCgpO1xuXG4gICAgaWYoZGlzam9pbnRXaXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5EaXNqb2ludCB3aXRoPC9iPlxuICAgICAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChlbnRpdHksIGVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBkaXNqb2ludFdpdGgsIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBpbnZlcnNlIG9mIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlJbnZlcnNlT2ZTZWN0aW9uSlNYKHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpbnZlcnNlT2ZzID0gcHJvcGVydHkuZ2V0SW52ZXJzZU9mKCk7XG5cbiAgICBpZihpbnZlcnNlT2ZzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5JbnZlcnNlIG9mPC9iPlxuICAgICAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgaW52ZXJzZU9mcywgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgb25lIHByb3BlcnR5IGNoYWluIEpTWCBlbGVtZW50LiBJcyB1c2VkIGZvciB7QGxpbmsgZ2V0UHJvcGVydHlDaGFpblNlY3Rpb25KU1h9LlxuICogQHBhcmFtIHByb3BlcnR5Q2hhaW4gdGhlIHByb3BlcnR5IGNoYWluXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wcyAgICAgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50W119IHRoZSBjaGFpbnMgSlNYIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlDaGFpbkpTWChwcm9wZXJ0eUNoYWluOiBhbnlbXSwgcHJvcGVydHk6IFByb3BlcnR5LCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkocHJvcGVydHlDaGFpbikuc2xpY2UoKS5yZXZlcnNlKCkubWFwKChwcm9wZXJ0eUV4cHIsIGkpID0+IHsgLy8gdXNpbmcgLnNsaWNlKCkgaGVyZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSBhIG11dGF0aW9uIG9mIHByb3BlcnR5Q2hhaW4gd291bGQgdHJpZ2dlciBhIHVzZVF1ZXJ5KClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxzcGFuIGtleT17cHJvcGVydHlFeHByfT5cbiAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBwcm9wZXJ0eUV4cHIsIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtpIDwgYXNBcnJheShwcm9wZXJ0eUNoYWluKS5sZW5ndGggLSAxICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiZuYnNwOyYjOTY2NjsmbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBwcm9wZXJ0eSBjaGFpbnMgc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUNoYWluU2VjdGlvbkpTWChwcm9wZXJ0eTogUHJvcGVydHksIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcHJvcGVydHlDaGFpbnMgPSBwcm9wZXJ0eS5nZXRQcm9wZXJ0eUNoYWlucygpLm1hcCgocmVpZmllZCA6IFJlaWZpZWQ8YW55PikgPT4gcmVpZmllZC52YWx1ZSk7XG5cbiAgICBjb25zdCBoYXNNdWx0aXBsZUNoYWlucyA9IHByb3BlcnR5Q2hhaW5zLmZpbHRlcigoZWxlbTogYW55KSA9PiBBcnJheS5pc0FycmF5KGVsZW0pKS5sZW5ndGggPiAwO1xuXG4gICAgaWYocHJvcGVydHlDaGFpbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPnshaGFzTXVsdGlwbGVDaGFpbnMgPyBcIlByb3BlcnR5IGNoYWluXCIgOiBcIlByb3BlcnR5IGNoYWluc1wifTwvYj5cbiAgICAgICAgICAgICAgICB7IWhhc011bHRpcGxlQ2hhaW5zID9cbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFByb3BlcnR5Q2hhaW5KU1gocHJvcGVydHlDaGFpbnMsIHByb3BlcnR5LCBwcm9wcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5Q2hhaW5zLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRQcm9wZXJ0eUNoYWluSlNYKGl0ZW0sIHByb3BlcnR5LCBwcm9wcyl9PC9saT4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBlcXVpdmFsZW50IHRvIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldEVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb25KU1goZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVxdWl2YWxlbnRzID0gZW50aXR5LmdldEVxdWl2YWxlbnRzKCk7XG5cbiAgICBpZihlcXVpdmFsZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+RXF1aXZhbGVudCB0bzwvYj5cbiAgICAgICAgICAgICAgICB7ZXF1aXZhbGVudHMubGVuZ3RoID09PSAxID9cbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBlcXVpdmFsZW50c1swXSwgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWl2YWxlbnRzLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9ID57Z2V0UmVpZmllZEpTWChlbnRpdHksIGl0ZW0sIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgc3ViZW50aXR5IG9mIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldFN1YkVudGl0eU9mU2VjdGlvbkpTWChlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3VwZXJFbnRpdGllcyA9IGVudGl0eS5nZXRTdXBlckVudGl0aWVzKCk7XG5cbiAgICBpZihzdXBlckVudGl0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5TdWJ7ZW50aXR5LmdldFR5cGUoKX0gb2Y8L2I+XG4gICAgICAgICAgICAgICAge3N1cGVyRW50aXRpZXMubGVuZ3RoID09PSAxID9cbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBzdXBlckVudGl0aWVzWzBdLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L3A+XG4gICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJFbnRpdGllcy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UmVpZmllZEpTWChlbnRpdHksIGl0ZW0sIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgcmVsYXRlZCBmcm9tIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldEVudGl0eVJlbGF0ZWRGcm9tU2VjdGlvbkpTWChlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVsYXRlZEZyb21zID0gZW50aXR5LmdldFJlbGF0ZWRGcm9tKCk7XG4gICAgY29uc3QgcHJlZGljYXRlczogc3RyaW5nW10gPSBBcnJheS5mcm9tKG5ldyBTZXQocmVsYXRlZEZyb21zLm1hcCgoZWxlbTogYW55KSA9PiB7cmV0dXJuIGVsZW0udmFsdWVbXCJwcm9wZXJ0eVwiXX0pKSk7XG5cbiAgICBpZihyZWxhdGVkRnJvbXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPlJlbGF0ZWQgZnJvbTwvYj5cbiAgICAgICAgICAgICAgICB7cHJlZGljYXRlcy5tYXAoKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXRMYWJlbEZvcklyaShwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtwLnRvU3RyaW5nKCkgKyByYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgc3R5bGU9e3tjb2xvcjogXCJibGFja1wifX0gaHJlZj17cH0+PGk+e2xhYmVsIHx8IHB9PC9pPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgc3R5bGU9e3ttYXJnaW5Cb3R0b206IDB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbGF0ZWRGcm9tcy5maWx0ZXIoKGVsZW06IGFueSkgPT4ge3JldHVybiBlbGVtLnZhbHVlW1wicHJvcGVydHlcIl0gPT09IHB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoZWxlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRDbGFzc0V4cHJlc3Npb25KU1goZW50aXR5LCBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZWxlbS52YWx1ZVtcInZhbHVlXCJdLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PC9wPiB7LyogV29ya3MgYXMgZW1wdHkgc3BhY2UgbGVmdCB0byBuZXh0IHNlY3Rpb24gKi99XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKTt9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgY2xhc3MgaW5zdGFuY2VzIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gdGVybVxuICogQHBhcmFtIGluc3RhbmNlcyBhbiBhcnJheSBvZiB0aGUgY2xhc3NlcycgaW5zdGFuY2VzXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0Q2xhc3NJbnN0YW5jZXNTZWN0aW9uSlNYKHRlcm06IENsYXNzLCBpbnN0YW5jZXM6IFRoaW5nW10sIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYoaW5zdGFuY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIDxiPkluc3RhbmNlczwvYj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMubWFwKChpbnN0YW5jZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9ID5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWCh0ZXJtLCB0ZXJtLmdldExpbmtlZEVudGl0aWVzKCksIGluc3RhbmNlLmdldElyaSgpLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBFbnRpdHlSZWxhdGlvbnNXaWRnZXQocHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHsgYXBpLCBpcmksIG9udG9sb2d5SWQsIGhhc1RpdGxlID0gREVGQVVMVF9IQVNfVElUTEUsIHNob3dCYWRnZXMsIGVudGl0eVR5cGUsIHBhcmFtZXRlciwgb25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsIG9uTmF2aWdhdGVUb09udG9sb2d5LCAuLi5yZXN0IH0gPSBwcm9wcztcblxuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZmV0Y2ggYW4gZW50aXRpZXMnIGRhdGEgdG8gYmUgc2hvd24gaW4gZGlmZmVyZW50IHNlY3Rpb25zXG4gICAgICovXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBlbnRpdHksXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nRW50aXR5UmVsYXRpb24sXG4gICAgICAgIGlzU3VjY2VzczogaXNTdWNjZXNzRW50aXR5UmVsYXRpb24sXG4gICAgICAgIGlzRXJyb3I6IGlzRXJyb3JFbnRpdHlSZWxhdGlvbixcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICAgIFtcbiAgICAgICAgICAgIFwiZW50aXR5SnNvblwiLFxuICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgICBzaG93QmFkZ2VzXG4gICAgICAgIF0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCAgZmFsc2UpOyAvLyBhbHdheXMgdXNlIHYyLyBBUElcbiAgICAgICAgfSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBmZXRjaCBhIGNsYXNzZXMgaW5zdGFuY2VzIHRvIGJlIHNob3duIGluIGNsYXNzIGluc3RhbmNlcyBzZWN0aW9uXG4gICAgICovXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBpbnN0YW5jZXMsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nSW5zdGFuY2VzLFxuICAgICAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc0luc3RhbmNlcyxcbiAgICB9ID0gdXNlUXVlcnkoe1xuICAgICAgICBxdWVyeUtleTogW1xuICAgICAgICAgICAgXCJpbnN0YW5jZXNcIixcbiAgICAgICAgICAgIGVudGl0eVxuICAgICAgICBdLFxuICAgICAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKGVudGl0eSAmJiBpc0NsYXNzKGVudGl0eSkgJiYgZW50aXR5Lmhhc0RpcmVjdENoaWxkcmVuKCkpID8gb2xzQXBpLmdldENsYXNzSW5zdGFuY2VzKGVudGl0eS5nZXRJcmkoKSwgZW50aXR5LmdldE9udG9sb2d5SWQoKSkgOiBbXTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5hYmxlZDogISFlbnRpdHlcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHJlbmRlclNlY3Rpb25zKGVudGl0eTogRW50aXR5LCBpbnN0YW5jZXM6IEluZGl2aWR1YWxbXSkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBzZWN0aW9uTGlzdCA6IFJlYWN0RWxlbWVudFtdID0gW107XG5cbiAgICAgICAgaWYoaXNJbmRpdmlkdWFsKGVudGl0eSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGl2aWR1YWxUeXBlc1NlY3Rpb24gPSBnZXRJbmRpdmlkdWFsVHlwZXNTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYoaW5kaXZpZHVhbFR5cGVzU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goaW5kaXZpZHVhbFR5cGVzU2VjdGlvbik7XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGl2aWR1YWxTYW1lQXNTZWN0aW9uID0gZ2V0SW5kaXZpZHVhbFNhbWVBc1NlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihpbmRpdmlkdWFsU2FtZUFzU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goaW5kaXZpZHVhbFNhbWVBc1NlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBpbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb24gPSBnZXRJbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihpbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKGluZGl2aWR1YWxEaWZmZXJlbnRGcm9tU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNQcm9wZXJ0eShlbnRpdHkpIHx8IGlzQ2xhc3MoZW50aXR5KSkge1xuICAgICAgICAgICAgY29uc3QgZGlzam9pbnRXaXRoU2VjdGlvbiA9IGdldERpc2pvaW50V2l0aFNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihkaXNqb2ludFdpdGhTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChkaXNqb2ludFdpdGhTZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZihpc1Byb3BlcnR5KGVudGl0eSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbiA9IGdldFByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKHByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2gocHJvcGVydHlJbnZlcnNlT2ZTZWN0aW9uKTtcblxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlDaGFpblNlY3Rpb24gPSBnZXRQcm9wZXJ0eUNoYWluU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKHByb3BlcnR5Q2hhaW5TZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChwcm9wZXJ0eUNoYWluU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNQcm9wZXJ0eShlbnRpdHkpIHx8IGlzQ2xhc3MoZW50aXR5KSkge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5RXF1aXZhbGVudFRvU2VjdGlvbiA9IGdldEVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihlbnRpdHlFcXVpdmFsZW50VG9TZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChlbnRpdHlFcXVpdmFsZW50VG9TZWN0aW9uKTtcblxuICAgICAgICAgICAgY29uc3Qgc3ViRW50aXR5T2ZTZWN0aW9uID0gZ2V0U3ViRW50aXR5T2ZTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYoc3ViRW50aXR5T2ZTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChzdWJFbnRpdHlPZlNlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBlbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb24gPSBnZXRFbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihlbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKGVudGl0eVJlbGF0ZWRGcm9tU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNDbGFzcyhlbnRpdHkpKSB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc0luc3RhbmNlc1NlY3Rpb24gPSBnZXRDbGFzc0luc3RhbmNlc1NlY3Rpb25KU1goZW50aXR5LCBpbnN0YW5jZXMsIHByb3BzKTtcbiAgICAgICAgICAgIGlmKGNsYXNzSW5zdGFuY2VzU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goY2xhc3NJbnN0YW5jZXNTZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHNlY3Rpb25MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgICAgICAgICAgICB7c2VjdGlvbkxpc3R9XG4gICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG4gICAgICAgICAgICAgICAgICAgIE5vIHJlbGF0aW9ucyBhdmFpbGFibGUuXG4gICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpQ2FyZFxuICAgICAgICAgICAgICAgIHRpdGxlPXtoYXNUaXRsZSA/IChlbnRpdHlUeXBlID8gY2FwaXRhbGl6ZShnZXRFbnRpdHlUeXBlTmFtZShlbnRpdHlUeXBlKSkgOiAoaXNTdWNjZXNzRW50aXR5UmVsYXRpb24gJiYgZW50aXR5KSA/IGNhcGl0YWxpemUoZW50aXR5LmdldFR5cGUoKSkgOiBcIlwiKSArIFwiIFJlbGF0aW9uc1wiIDogXCJcIn1cbiAgICAgICAgICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7KGlzTG9hZGluZ0VudGl0eVJlbGF0aW9uIHx8IGlzTG9hZGluZ0luc3RhbmNlcykgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9eydzJ30vPn1cbiAgICAgICAgICAgICAgICB7aXNFcnJvckVudGl0eVJlbGF0aW9uICYmIDxFdWlUZXh0PlJlcXVlc3RlZCByZXNvdXJjZSBub3QgYXZhaWxhYmxlPC9FdWlUZXh0Pn1cbiAgICAgICAgICAgICAgICB7KGlzU3VjY2Vzc0VudGl0eVJlbGF0aW9uICYmIGlzU3VjY2Vzc0luc3RhbmNlcykgJiYgZW50aXR5ICE9PSB1bmRlZmluZWQgJiYgaW5zdGFuY2VzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyU2VjdGlvbnMoZW50aXR5LCBpbnN0YW5jZXMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9FdWlDYXJkPlxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlSZWxhdGlvbnMocHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0eVJlbGF0aW9uc1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRW50aXR5UmVsYXRpb25zV2lkZ2V0KHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8RW50aXR5UmVsYXRpb25zV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaGFzVGl0bGU9e3Byb3BzLmhhc1RpdGxlfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcz17cHJvcHMuc2hvd0JhZGdlc31cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IGNyZWF0ZUVudGl0eVJlbGF0aW9ucywgRW50aXR5UmVsYXRpb25zV2lkZ2V0IH07IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgdXNlUXVlcnksIFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0LCBFdWlJbWFnZX0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5cblxuZnVuY3Rpb24gVGVybURlcGljdGlvbldpZGdldChwcm9wczpUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMpe1xuICAgIGNvbnN0IHthcGksIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5fSA9IHByb3BzO1xuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YSxcbiAgICAgICAgaXNMb2FkaW5nLFxuICAgICAgICBpc1N1Y2Nlc3MsXG4gICAgICAgIGlzRXJyb3IsXG4gICAgICAgIGVycm9yXG4gICAgICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgICAgICBbXCJ0ZXJtRGVwaWN0aW9uXCIsIGFwaSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIFwiY2xhc3NcIiwgb250b2xvZ3lJZCwgXCJcIiwgdXNlTGVnYWN5KTsgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBcbiAgICBcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+fVxuICAgICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiYgZGF0YS5nZXREZXBpY3Rpb25VcmwoKSAmJlxuICAgICAgICAgICAgICA8PiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxFdWlJbWFnZVxuICAgICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgICBoYXNTaGFkb3dcbiAgICAgICAgICAgICAgICBhbGxvd0Z1bGxTY3JlZW4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYWx0PXtkYXRhLmdldERlcGljdGlvblVybCgpfVxuICAgICAgICAgICAgICAgIHNyYz17ZGF0YS5nZXREZXBpY3Rpb25VcmwoKX0gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxwPjxzbWFsbD5DbGljayB0byBleHBhbmQuPC9zbWFsbD48L3A+XG4gICAgICAgICAgICAgIDwvPiAgICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZGVwaWN0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cblxuZnVuY3Rpb24gY3JlYXRlRGVwaWN0aW9uKHByb3BzOiBUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFRlcm1EZXBpY3Rpb25XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFRlcm1EZXBpY3Rpb25XaWRnZXQocHJvcHM6IFRlcm1EZXBpY3Rpb25XaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgIDxUZXJtRGVwaWN0aW9uV2lkZ2V0XG4gICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX0gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH0gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fSAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHtjcmVhdGVEZXBpY3Rpb24sIFRlcm1EZXBpY3Rpb25XaWRnZXR9OyIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBHcmFwaFZpZXdXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyB1c2VRdWVyeSwgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IEV1aVByb3ZpZGVyLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpVGV4dCwgRXVpQnV0dG9uLCBFdWlJY29uLCBFdWlQYW5lbCxFdWlTd2l0Y2gsIEV1aVBvcG92ZXIsIEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJ3Zpcy1uZXR3b3JrJztcbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tICd2aXMtZGF0YSc7XG5pbXBvcnQgeyBPbHNHcmFwaE5vZGUsIE9sc0dyYXBoRWRnZSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgSlNUcmVlTm9kZSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5cblxuXG5cbmZ1bmN0aW9uIEdyYXBoVmlld1dpZGdldChwcm9wczogR3JhcGhWaWV3V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5LCByb290V2FsayB9ID0gcHJvcHM7XG5cbiAgY29uc3QgW3NlbGVjdGVkSXJpLCBzZXRTZWxlY3RlZElyaV0gPSB1c2VTdGF0ZShpcmkpO1xuICBjb25zdCBbZmlyc3RMb2FkLCBzZXRGaXJzdExvYWRdID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtkYmNsaWNrZWQsIHNldERiY2xpY2tlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtyb290V2Fsa0lzU2VsZWN0ZWQsIHNldFJvb3RXYWxrSXNTZWxlY3RlZF0gPSB1c2VTdGF0ZShyb290V2FsayA/IHJvb3RXYWxrIDogZmFsc2UpO1xuICBjb25zdCBbaXNQb3BvdmVyT3Blbiwgc2V0SXNQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIFxuICAvLyBuZWVkZWQgZm9yIHVzZVF1ZXJ5LiB3aXRob3V0IGl0IHRoZSBncmFwaCB3b24ndCBnZXQgdXBkYXRlZCBvbiBzd2l0Y2hpbmcgYmVyd2VlbiByb290V2Fsaz10cnVlIGFuZCBmYWxzZS5cbiAgY29uc3QgW2NvdW50ZXIsIHNldENvdW50ZXJdID0gdXNlU3RhdGUoMCk7IFxuXG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvcixcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcInRlcm1HcmFwaFwiLCBhcGksIHNlbGVjdGVkSXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ksIHJvb3RXYWxrSXNTZWxlY3RlZCwgZGJjbGlja2VkLGNvdW50ZXJdLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChyb290V2Fsa0lzU2VsZWN0ZWQgJiYgZmlyc3RMb2FkKSB7XG4gICAgICAgIC8vIG9ubHkgdXNlIHRoaXMgY2FsbCBvbiBsb2FkLiBEb3VibGUgY2tpY2tpbmcgb24gYSBub2RlIHNob3VsZCBjYWxsIHRoZSBub3JtYWwgZ2V0VGVybVJlbGF0aW9ucyBmdW5jdGlvbi5cbiAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUZXJtVHJlZSh7b250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogaXJpfSwge3ZpZXdNb2RlOiBcIkFsbFwiLCBzaWJsaW5nczogZmFsc2V9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgICB9ZWxzZSBpZihmaXJzdExvYWQgfHwgZGJjbGlja2VkKXtcbiAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUZXJtUmVsYXRpb25zKHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogc2VsZWN0ZWRJcmkgfSk7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG5cbiAgY29uc3Qgbm9kZXMgPSB1c2VSZWYobmV3IERhdGFTZXQoW10pKTtcbiAgY29uc3QgZWRnZXMgPSB1c2VSZWYobmV3IERhdGFTZXQoW10pKTtcbiAgY29uc3QgZ3JhcGhOZXR3b3JrID0gdXNlUmVmKHt9KTtcbiAgY29uc3QgY29udGFpbmVyID0gdXNlUmVmKG51bGwpO1xuXG4gIGNvbnN0IGdyYXBoTmV0d29ya0NvbmZpZyA9IHtcbiAgICAvKipcbiAgICAgKiBmb3IgbW9yZSBvcHRpb25zIGhhdmUgYSBsb29rIGF0OiBodHRwczovL3Zpc2pzLmdpdGh1Yi5pby92aXMtbmV0d29yay9kb2NzL25ldHdvcmsvI29wdGlvbnNcbiAgICAgKi9cbiAgICBhdXRvUmVzaXplOiB0cnVlLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgbG9jYWxlOiAnZW4nLFxuICAgIGxheW91dDoge1xuICAgICAgcmFuZG9tU2VlZDogMSxcbiAgICAgIGltcHJvdmVkTGF5b3V0OiB0cnVlLFxuICAgICAgY2x1c3RlclRocmVzaG9sZDogMTUwLFxuICAgIH0sXG4gICAgcGh5c2ljczoge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGJhcm5lc0h1dDoge1xuICAgICAgICBncmF2aXRhdGlvbmFsQ29uc3RhbnQ6IC0yMDAwMCxcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMyxcbiAgICAgICAgc3ByaW5nTGVuZ3RoOiAxMCxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDQsXG4gICAgICAgIGRhbXBpbmc6IDAuMDksXG4gICAgICAgIGF2b2lkT3ZlcmxhcDogMCxcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cblxuICBjbGFzcyBHcmFwaE5vZGUge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGxhYmVsPzogc3RyaW5nO1xuICAgIGNvbG9yOiB7XG4gICAgICBiYWNrZ3JvdW5kOiBzdHJpbmc7XG4gICAgICBoaWdobGlnaHQ6IHtcbiAgICAgICAgYm9yZGVyOiBzdHJpbmc7XG4gICAgICAgIGJhY2tncm91bmQ6IHN0cmluZztcbiAgICAgIH07XG4gICAgfTtcbiAgICBzaGFwZTogc3RyaW5nO1xuICAgIGZvbnQ6IHtcbiAgICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHsgbm9kZSB9OiBPbHNHcmFwaE5vZGUpIHtcbiAgICAgIC8qKlxuICAgICAgICogZm9yIG1vcmUgb3B0aW9ucyBoYXZlIGEgbG9vayBhdDogaHR0cHM6Ly92aXNqcy5naXRodWIuaW8vdmlzLW5ldHdvcmsvZG9jcy9uZXR3b3JrL25vZGVzLmh0bWxcbiAgICAgICAqL1xuICAgICAgdGhpcy5pZCA9IG5vZGVbJ2lyaSddO1xuICAgICAgdGhpcy5sYWJlbCA9IG5vZGVbJ2xhYmVsJ107XG4gICAgICB0aGlzLmNvbG9yID0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAnIzQ1NTQ2OScsXG4gICAgICAgIGhpZ2hsaWdodDoge1xuICAgICAgICAgIGJvcmRlcjogJyM0MDQwNDAnLFxuICAgICAgICAgIGJhY2tncm91bmQ6ICcjNDA0MDQwJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5zaGFwZSA9ICdib3gnO1xuICAgICAgdGhpcy5mb250ID0ge1xuICAgICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgIH07XG5cbiAgICB9XG4gIH1cblxuICBjbGFzcyBHcmFwaEVkZ2Uge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGZyb20/OiBzdHJpbmc7XG4gICAgdG8/OiBzdHJpbmc7XG4gICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgYXJyb3dzPzoge1xuICAgICAgdG8/OiBib29sZWFuO1xuICAgIH07XG4gICAgd2lkdGg/OiBudW1iZXI7XG4gICAgY29sb3I/OiB7XG4gICAgICBjb2xvcj86IHN0cmluZztcbiAgICAgIGhpZ2hsaWdodD86IHN0cmluZztcbiAgICB9O1xuICAgIGZvbnQ/OiB7XG4gICAgICBzaXplPzogbnVtYmVyO1xuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcih7IGVkZ2UgfTogT2xzR3JhcGhFZGdlKSB7XG4gICAgICBpZiAoZWRnZVsnc291cmNlJ10gJiYgZWRnZVsndGFyZ2V0J10gJiYgZWRnZVsndXJpJ10pIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGZvciBtb3JlIG9wdGlvbnMgaGF2ZSBhIGxvb2sgYXQ6IGh0dHBzOi8vdmlzanMuZ2l0aHViLmlvL3Zpcy1uZXR3b3JrL2RvY3MvbmV0d29yay9lZGdlcy5odG1sXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlkID0gZWRnZVsnc291cmNlJ10gKyBlZGdlWyd0YXJnZXQnXSArIFwiJnVyaT1cIiArIGVkZ2VbJ3VyaSddO1xuICAgICAgICB0aGlzLmZyb20gPSBlZGdlWydzb3VyY2UnXTtcbiAgICAgICAgdGhpcy50byA9IGVkZ2VbJ3RhcmdldCddO1xuICAgICAgICB0aGlzLmxhYmVsID0gZWRnZVsnbGFiZWwnXTtcbiAgICAgICAgdGhpcy5hcnJvd3MgPSB7IHRvOiB0cnVlIH07XG4gICAgICAgIHRoaXMud2lkdGggPSAyO1xuICAgICAgICB0aGlzLmNvbG9yID0ge1xuICAgICAgICAgIGNvbG9yOiAnZ3JheScsXG4gICAgICAgICAgaGlnaGxpZ2h0OiAnIzAwNjE3QydcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5mb250ID0ge1xuICAgICAgICAgIHNpemU6IDE2XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRUb09sc0dyYXBoRm9ybWF0KGxpc3RPZkpzVHJlZU5vZGVzOiBBcnJheTxKU1RyZWVOb2RlPikge1xuICAgIC8vIHVzZWQgZm9yIGNvbnZlcnRpbmcgdGhlIGxpc3Qgb2YgYW5jZXN0b3JzIHRvIHRoZSBvbHMgYXBpIGdyYXBoIGVuZHBvaW50cyBmb3JtYXQuIHRvIGJlIGNvbnN1bWVkIGJ5IEdyYXBoTm9kZSBhbmQgR3JhcGhFZGdlIGNsYXNzZXMgY29uc3RydWN0b3IuXG4gICAgLy8gY3VycmVudGx5IHVzZWQgaW4gc2hvd2luZyBhbmNlc3RvcnMuIEVxdWl2YWxlbnQgdG8gaXMtYSByZWxhdGlvbi5cbiAgICBsZXQgZGF0YTogeyBub2RlczogYW55W107IGVkZ2VzOiBhbnlbXSB9ID0geyBcIm5vZGVzXCI6IFtdLCBcImVkZ2VzXCI6IFtdIH07XG4gICAgbGlzdE9mSnNUcmVlTm9kZXMubWFwKCh0cmVlTm9kZTogSlNUcmVlTm9kZSkgPT4ge1xuICAgICAgaWYoIWRhdGEubm9kZXMuZmluZCgob2JqKSA9PiBvYmouaXJpID09PSB0cmVlTm9kZS5pcmkpKXtcbiAgICAgICAgbGV0IG5vZGUgPSB7IFwiaXJpXCI6IHRyZWVOb2RlLmlyaSwgXCJsYWJlbFwiOiB0cmVlTm9kZS50ZXh0IH07XG4gICAgICAgIGRhdGEubm9kZXMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICAgIGxldCBwYXJlbnROb2RlID0gbGlzdE9mSnNUcmVlTm9kZXMuZmluZCgob2JqOkpTVHJlZU5vZGUpID0+IG9iai5pZCA9PT0gdHJlZU5vZGUucGFyZW50KTtcbiAgICAgIGlmIChwYXJlbnROb2RlKXsgICAgICAgIFxuICAgICAgICAvLyBwYXJlbnQgZG9lcyBub3QgZXhpc3RzIC0tPiAnIycgaWQgdGhhdCBpbmRpY2F0ZXMgYSBub2RlIGlzIGEgcm9vdC5cbiAgICAgICAgbGV0IGVkZ2UgPSB7IFwic291cmNlXCI6IHRyZWVOb2RlLmlyaSwgXCJ0YXJnZXRcIjogcGFyZW50Tm9kZS5pcmksIFwibGFiZWxcIjogXCJpcyBhXCIsIFwidXJpXCI6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YkNsYXNzT2ZcIiB9O1xuICAgICAgICBpZighZGF0YS5lZGdlcy5maW5kKChvYmopID0+IG9iai5zb3VyY2UgPT09IGVkZ2Uuc291cmNlICYmIG9iai50YXJnZXQgPT09IGVkZ2UudGFyZ2V0KSl7XG4gICAgICAgICAgZGF0YS5lZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBpZiAoZGF0YSAmJiAoZmlyc3RMb2FkIHx8IGRiY2xpY2tlZCkpIHtcbiAgICBsZXQgZ0RhdGEgPSBkYXRhO1xuICAgIGlmIChyb290V2Fsa0lzU2VsZWN0ZWQgJiYgZmlyc3RMb2FkKSB7XG4gICAgICBnRGF0YSA9IGNvbnZlcnRUb09sc0dyYXBoRm9ybWF0KGRhdGEpO1xuICAgIH1cbiAgICBmb3IgKGxldCBub2RlIG9mIGdEYXRhWydub2RlcyddKSB7XG4gICAgICBsZXQgZ05vZGUgPSBuZXcgR3JhcGhOb2RlKHsgbm9kZTogbm9kZSB9KTtcbiAgICAgIC8vQHRzLWlnbm9yZSAgICAgICAgICAgICAgICBcbiAgICAgIGlmICghbm9kZXMuY3VycmVudC5nZXQoZ05vZGUuaWQpKSB7XG4gICAgICAgIGlmKGdOb2RlLmlkID09PSBpcmkgJiYgcm9vdFdhbGtJc1NlbGVjdGVkKXtcbiAgICAgICAgICBnTm9kZS5jb2xvci5iYWNrZ3JvdW5kID0gJyMwQkJCRUYnO1xuICAgICAgICAgIGdOb2RlLmZvbnQuY29sb3IgPSAnYmxhY2snO1xuICAgICAgICB9XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBub2Rlcy5jdXJyZW50LmFkZChnTm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGVkZ2Ugb2YgZ0RhdGFbJ2VkZ2VzJ10pIHtcbiAgICAgIGxldCBnRWRnZSA9IG5ldyBHcmFwaEVkZ2UoeyBlZGdlOiBlZGdlIH0pO1xuICAgICAgLy9AdHMtaWdub3JlICAgICAgICAgICAgICAgXG4gICAgICBpZiAoIWVkZ2VzLmN1cnJlbnQuZ2V0KGdFZGdlLmlkKSkge1xuICAgICAgICBpZihnRWRnZS5pZD8uaW5jbHVkZXMoaXJpKSAmJiByb290V2Fsa0lzU2VsZWN0ZWQpe1xuICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgIGdFZGdlLmNvbG9yLmNvbG9yID0gJ2JsYWNrJztcbiAgICAgICAgfVxuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgZWRnZXMuY3VycmVudC5hZGQoZ0VkZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmlyc3RMb2FkKSB7XG4gICAgICBzZXRGaXJzdExvYWQoZmFsc2UpO1xuICAgIH1cbiAgICBpZihkYmNsaWNrZWQpe1xuICAgICAgc2V0RGJjbGlja2VkKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIG5vZGVzLmN1cnJlbnQuY2xlYXIoKTtcbiAgICBlZGdlcy5jdXJyZW50LmNsZWFyKCk7XG4gICAgc2V0U2VsZWN0ZWRJcmkoaXJpKTtcbiAgICBzZXRGaXJzdExvYWQodHJ1ZSk7XG4gICAgc2V0RGJjbGlja2VkKGZhbHNlKTtcbiAgICBzZXRDb3VudGVyKGNvdW50ZXIrMSk7XG4gIH1cblxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGdyYXBoRGF0YSA9IHsgbm9kZXM6IG5vZGVzLmN1cnJlbnQsIGVkZ2VzOiBlZGdlcy5jdXJyZW50IH07XG4gICAgLy9AdHMtaWdub3JlXG4gICAgZ3JhcGhOZXR3b3JrLmN1cnJlbnQgPSBuZXcgTmV0d29yayhjb250YWluZXIuY3VycmVudCwgZ3JhcGhEYXRhLCBncmFwaE5ldHdvcmtDb25maWcpO1xuICB9LCBbXSk7XG5cblxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGdyYXBoTmV0d29yay5jdXJyZW50KSB7XG4gICAgICAvL0B0cy1pZ25vcmUgICAgICAgICAgICAgICAgICAgXG4gICAgICBncmFwaE5ldHdvcmsuY3VycmVudC5vbihcImRvdWJsZUNsaWNrXCIsIGZ1bmN0aW9uKHBhcmFtcykge1xuICAgICAgICBpZiAocGFyYW1zLm5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsZXQgbm9kZUlyaSA9IHBhcmFtcy5ub2Rlc1swXTtcbiAgICAgICAgICBzZXRTZWxlY3RlZElyaShub2RlSXJpKTtcbiAgICAgICAgICBzZXREYmNsaWNrZWQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICB9LCBbZ3JhcGhOZXR3b3JrXSk7XG5cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIGxvYWQgdGhlIGdyYXBoIGRhdGEgYWdhaW4gd2hlbiB0aGUgdXNlciBjaGFuZ2UgdGhlIG1vZGUgdG8gcm9vdFdhbGsgYW5kIHZpY2UgdmVyc2EgT1IgaW5wdXQgcHJvcHMgY2hhbmdlcy5cbiAgICByZXNldCgpO1xuICB9LCBbcm9vdFdhbGtJc1NlbGVjdGVkLCBhcGksIG9udG9sb2d5SWQsIGlyaV0pO1xuICBcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyB3aGVuIHVzZXIgY2hhbmdlIHRoZSBzdG9yeWJvb2sgcm9vdFdhbGsgdmFsdWVcbiAgICBzZXRSb290V2Fsa0lzU2VsZWN0ZWQocm9vdFdhbGsgPyByb290V2FsayA6IGZhbHNlKTtcbiAgfSwgW3Jvb3RXYWxrXSk7XG5cblxuXG4gIGNvbnN0IG9uQnV0dG9uQ2xpY2sgPSAoKSA9PlxuICAgIHNldElzUG9wb3Zlck9wZW4oKGlzUG9wb3Zlck9wZW4pID0+ICFpc1BvcG92ZXJPcGVuKTtcbiAgY29uc3QgY2xvc2VQb3BvdmVyID0gKCkgPT4gc2V0SXNQb3BvdmVyT3BlbihmYWxzZSk7XG5cbiAgY29uc3QgYnV0dG9uID0gKFxuICAgICAgICA8RXVpQnV0dG9uRW1wdHlcbiAgICAgICAgICAgIGljb25UeXBlPVwiaUluQ2lyY2xlXCJcbiAgICAgICAgICAgIGljb25TaWRlPVwicmlnaHRcIlxuICAgICAgICAgICAgb25DbGljaz17b25CdXR0b25DbGlja31cbiAgICAgICAgICA+XG4gICAgICAgICBHdWlkZSBtZSBcbiAgICAgICAgPC9FdWlCdXR0b25FbXB0eT5cbiAgICAgICk7XG5cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImdyYXBoXCIpfTwvRXVpVGV4dD59XG4gICAgICA8RXVpUGFuZWwgc3R5bGU9e3sgZm9udFNpemU6IDEyIH19IHBhZGRpbmdTaXplPSdzJyBib3JkZXJSYWRpdXM9XCJub25lXCI+XG4gICAgICAgIDxFdWlCdXR0b24gc2l6ZT1cInNcIiBvbkNsaWNrPXtyZXNldH0+UmVzZXQ8L0V1aUJ1dHRvbj5cbiAgICAgICAgPEV1aVBvcG92ZXJcbiAgICAgICAgICBidXR0b249e2J1dHRvbn1cbiAgICAgICAgICBpc09wZW49e2lzUG9wb3Zlck9wZW59XG4gICAgICAgICAgY2xvc2VQb3BvdmVyPXtjbG9zZVBvcG92ZXJ9XG4gICAgICAgICAgPlxuICAgICAgICAgIDxFdWlUZXh0IHN0eWxlPXt7IHdpZHRoOiAzMDAsIHBhZGRpbmc6IDEwIH19PlxuICAgICAgICAgICAgPGxpPllvdSBjYW4gZXhwYW5kIHRoZSBub2RlcyBieSBkb3VibGUgY2xpY2tpbmcgb24gdGhlbTwvbGk+XG4gICAgICAgICAgICA8bGk+WW91IGNhbiB6b29tIG91dC9pbiBieSBzY3JvbGxpbmcgb24gdGhlIGdyYXBoLjwvbGk+XG4gICAgICAgICAgICA8bGk+WW91IGNhbiBnbyBiYWNrIHRvIHRoZSBpbml0aWFsIGdyYXBoIGJ5IGNsaWNraW5nIG9uIHRoZSBSZXNldCBidXR0b24uPC9saT5cbiAgICAgICAgICAgIDxsaT5Zb3UgY2FuIG1vdmUgdGhlIG5vZGVzIGFuZCBlZGdlcyBhcm91bmQgYnkgZHJhZ2dpbmcuPC9saT5cbiAgICAgICAgICAgIDxsaT5Sb290d2FsayB0b2dnbGUgZW5hYmxlIHRoZSByb290IHdhbGsgbW9kZSBpbiB0aGUgZ3JhcGgsIHdoZXJlIHlvdSBjYW4gc2VlIHRoZSBwYXRoIGZyb20gcm9vdHMgdG8gdGhlIHRhcmdldCBub2RlLjwvbGk+ICAgICAgICAgIFxuICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgPC9FdWlQb3BvdmVyPlxuICAgICAgICA8ZGl2IHN0eWxlPXt7ZGlzcGxheTogJ2lubGluZS1ibG9jaycsIGZsb2F0OiAncmlnaHQnLCBwYWRkaW5nVG9wOiAxMH19PlxuICAgICAgICAgIDxFdWlTd2l0Y2ggXG4gICAgICAgICAgICBsYWJlbD1cInJvb3Qgd2Fsa1wiIFxuICAgICAgICAgICAgY2hlY2tlZD17cm9vdFdhbGtJc1NlbGVjdGVkfSBcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB7c2V0Um9vdFdhbGtJc1NlbGVjdGVkKCFyb290V2Fsa0lzU2VsZWN0ZWQpfX1cbiAgICAgICAgICAgIHRpdGxlPVwiRW5hYmxlIHRoZSByb290IHdhbGsgbW9kZSBpbiB0aGUgZ3JhcGg6IFlvdSBjYW4gc2VlIHRoZSBwYXRoIGZyb20gcm9vdHMgdG8gdGhlIHRhcmdldCBub2RlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRXVpUGFuZWw+XG4gICAgICBcbiAgICAgIDxFdWlQYW5lbCBzdHlsZT17eyB3aWR0aDogOTAwLCBoZWlnaHQ6IDkwMCB9fSBoYXNTaGFkb3c9e2ZhbHNlfSBoYXNCb3JkZXI9e3RydWV9IGJvcmRlclJhZGl1cz1cIm5vbmVcIiA+XG4gICAgICAgIHtpc0xvYWRpbmcgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJtXCIgLz59XG4gICAgICAgIDxkaXYgcmVmPXtjb250YWluZXJ9IGNsYXNzTmFtZT0nZ3JhcGgtY29udGFpbmVyJyBzdHlsZT17eyB3aWR0aDogXCI4NTBweFwiLCBoZWlnaHQ6IFwiODUwcHhcIiwgbWFyZ2luOidhdXRvJyB9fSAvPlxuICAgICAgPC9FdWlQYW5lbD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuXG5mdW5jdGlvbiBjcmVhdGVHcmFwaFZpZXcocHJvcHM6IEdyYXBoVmlld1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEdyYXBoVmlld1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkR3JhcGhWaWV3V2lkZ2V0KHByb3BzOiBHcmFwaFZpZXdXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxHcmFwaFZpZXdXaWRnZXRcbiAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIHJvb3RXYWxrPXtwcm9wcy5yb290V2Fsa31cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cblxuZXhwb3J0IHsgY3JlYXRlR3JhcGhWaWV3LCBHcmFwaFZpZXdXaWRnZXQgfVxuIiwgImltcG9ydCB7IGNyZWF0ZUF1dG9jb21wbGV0ZSB9IGZyb20gXCIuL0F1dG9jb21wbGV0ZVdpZGdldC9BdXRvY29tcGxldGVXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZURhdGFDb250ZW50IH0gZnJvbSBcIi4vRGF0YUNvbnRlbnRXaWRnZXQvRGF0YUNvbnRlbnRXaWRnZXRcIlxuaW1wb3J0IHsgY3JlYXRlRW50aXR5SW5mbyB9IGZyb20gXCIuL0VudGl0eUluZm9XaWRnZXQvRW50aXR5SW5mb1dpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlSnNvbkFwaX0gZnJvbSBcIi4vSnNvbkFwaVdpZGdldC9Kc29uQXBpV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVCcmVhZGNydW1iIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVEZXNjcmlwdGlvbiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0XCJcbmltcG9ydCB7IGNyZWF0ZUlyaSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0lyaVdpZGdldC9JcmlXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9UYWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVDcm9zc1JlZlRhYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9Dcm9zc1JlZldpZGdldC9Dcm9zc1JlZlRhYldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlSGllcmFyY2h5T0xTIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldC9IaWVyYXJjaHlXaWRnZXRPTFNcIjtcbmltcG9ydCB7IGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZC9IaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkXCI7XG5pbXBvcnQgeyBjcmVhdGVIaWVyYXJjaHkgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0U2VtTG9va1AvSGllcmFyY2h5V2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVUaXRsZX0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGl0bGVXaWRnZXQvVGl0bGVXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZU1ldGFkYXRhIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvTWV0YWRhdGFXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZU9udG9sb2d5SW5mbyB9IGZyb20gXCIuL09udG9sb2d5SW5mb1dpZGdldC9PbnRvbG9neUluZm9XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVJlc291cmNlcyB9IGZyb20gXCIuL1Jlc291cmNlc1dpZGdldC9SZXNvdXJjZXNXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVNlYXJjaEJhciB9IGZyb20gXCIuL1NlYXJjaEJhcldpZGdldC9TZWFyY2hCYXJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0IH0gZnJvbSBcIi4vU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQvU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRcIjtcbmltcG9ydCB7Y3JlYXRlRW50aXR5UmVsYXRpb25zfSBmcm9tIFwiLi9FbnRpdHlSZWxhdGlvbnNXaWRnZXQvRW50aXR5UmVsYXRpb25zV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVEZXBpY3Rpb24gfSBmcm9tIFwiLi9UZXJtRGVwaWN0aW9uV2lkZ2V0L1Rlcm1EZXBpY3Rpb25XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUVudGl0eU9udG9MaXN0IH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvRW50aXR5T250b0xpc3RXaWRnZXQvRW50aXR5T250b0xpc3RXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUVudGl0eURlZmluZWRCeSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlXaWRnZXRcIlxuaW1wb3J0IHsgY3JlYXRlR3JhcGhWaWV3IH0gZnJvbSBcIi4vR3JhcGhWaWV3V2lkZ2V0L0dyYXBoVmlld1dpZGdldFwiO1xuXG4od2luZG93IGFzIGFueSlbJ1NlbUxvb2tQV2lkZ2V0cyddID0ge1xuICAgIGNyZWF0ZUF1dG9jb21wbGV0ZSxcbiAgICBjcmVhdGVEYXRhQ29udGVudCxcbiAgICBjcmVhdGVFbnRpdHlJbmZvLFxuICAgIGNyZWF0ZUVudGl0eVJlbGF0aW9ucyxcbiAgICBjcmVhdGVKc29uQXBpLFxuICAgIGNyZWF0ZUJyZWFkY3J1bWIsXG4gICAgY3JlYXRlRGVzY3JpcHRpb24sXG4gICAgY3JlYXRlSXJpLFxuICAgIGNyZWF0ZVRhYixcbiAgICBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIsXG4gICAgY3JlYXRlQ3Jvc3NSZWZUYWIsXG4gICAgY3JlYXRlSGllcmFyY2h5LFxuICAgIGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQsXG4gICAgY3JlYXRlVGl0bGUsXG4gICAgY3JlYXRlT250b2xvZ3lJbmZvLFxuICAgIGNyZWF0ZVJlc291cmNlcyxcbiAgICBjcmVhdGVTZWFyY2hCYXIsXG4gICAgY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QsXG4gICAgY3JlYXRlTWV0YWRhdGEsXG4gICAgY3JlYXRlRGVwaWN0aW9uLFxuICAgIGNyZWF0ZUhpZXJhcmNoeU9MUyxcbiAgICBjcmVhdGVFbnRpdHlPbnRvTGlzdCxcbiAgICBjcmVhdGVFbnRpdHlEZWZpbmVkQnksXG4gICAgY3JlYXRlR3JhcGhWaWV3LFxufVxuXG5leHBvcnQge1xuICAgIGNyZWF0ZUF1dG9jb21wbGV0ZSxcbiAgICBjcmVhdGVEYXRhQ29udGVudCxcbiAgICBjcmVhdGVFbnRpdHlJbmZvLFxuICAgIGNyZWF0ZUVudGl0eVJlbGF0aW9ucyxcbiAgICBjcmVhdGVKc29uQXBpLFxuICAgIGNyZWF0ZUJyZWFkY3J1bWIsXG4gICAgY3JlYXRlRGVzY3JpcHRpb24sXG4gICAgY3JlYXRlSXJpLFxuICAgIGNyZWF0ZVRhYixcbiAgICBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIsXG4gICAgY3JlYXRlQ3Jvc3NSZWZUYWIsXG4gICAgY3JlYXRlSGllcmFyY2h5T0xTLFxuICAgIGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQsXG4gICAgY3JlYXRlVGl0bGUsXG4gICAgY3JlYXRlT250b2xvZ3lJbmZvLFxuICAgIGNyZWF0ZVJlc291cmNlcyxcbiAgICBjcmVhdGVTZWFyY2hCYXIsXG4gICAgY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QsXG4gICAgY3JlYXRlTWV0YWRhdGEsXG4gICAgY3JlYXRlRGVwaWN0aW9uLFxuICAgIGNyZWF0ZUhpZXJhcmNoeSxcbiAgICBjcmVhdGVFbnRpdHlPbnRvTGlzdCxcbiAgICBjcmVhdGVFbnRpdHlEZWZpbmVkQnksXG4gICAgY3JlYXRlR3JhcGhWaWV3LFxufVxuXG5leHBvcnQgKiBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vQXV0b2NvbXBsZXRlV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Kc29uQXBpV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9EYXRhQ29udGVudFdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vUmVzb3VyY2VzV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9PbnRvbG9neUluZm9XaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1NlYXJjaEJhcldpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0VudGl0eUluZm9XaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0VudGl0eVJlbGF0aW9uc1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vVGVybURlcGljdGlvbldpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhWaWV3V2lkZ2V0XCI7Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQVFBLFVBQUksd0JBQXdCLE9BQU87QUFDbkMsVUFBSUEsa0JBQWlCLE9BQU8sVUFBVTtBQUN0QyxVQUFJLG1CQUFtQixPQUFPLFVBQVU7QUFFeEMsZUFBUyxTQUFTLEtBQUs7QUFDdEIsWUFBSSxRQUFRLFFBQVEsUUFBUSxRQUFXO0FBQ3RDLGdCQUFNLElBQUksVUFBVSx1REFBdUQ7QUFBQSxRQUM1RTtBQUVBLGVBQU8sT0FBTyxHQUFHO0FBQUEsTUFDbEI7QUFFQSxlQUFTLGtCQUFrQjtBQUMxQixZQUFJO0FBQ0gsY0FBSSxDQUFDLE9BQU8sUUFBUTtBQUNuQixtQkFBTztBQUFBLFVBQ1I7QUFLQSxjQUFJLFFBQVEsSUFBSSxPQUFPLEtBQUs7QUFDNUIsZ0JBQU0sQ0FBQyxJQUFJO0FBQ1gsY0FBSSxPQUFPLG9CQUFvQixLQUFLLEVBQUUsQ0FBQyxNQUFNLEtBQUs7QUFDakQsbUJBQU87QUFBQSxV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ZCxPQUFPO0FBQUEsWUFDUCxLQUFLO0FBQUEsWUFDTCxVQUFVO0FBQUEsWUFDVix5QkFBeUI7QUFBQSxZQUN6Qix1QkFBdUI7QUFBQSxZQUN2QixVQUFVO0FBQUEsWUFDVixXQUFXO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxjQUFjO0FBQUEsWUFDZCxLQUFLO0FBQUEsWUFDTCxNQUFNO0FBQUEsWUFDTixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsWUFDWixhQUFhO0FBQUEsWUFDYixnQkFBZ0I7QUFBQSxZQUNoQixZQUFZO0FBQUEsWUFDWixhQUFhO0FBQUEsWUFDYixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsWUFDUixRQUFRO0FBQUEsWUFDUixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixVQUFVO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxXQUFXO0FBQUEsWUFDWCxjQUFjO0FBQUEsWUFDZCxNQUFNO0FBQUEsWUFDTixJQUFJO0FBQUEsWUFDSixXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxXQUFXO0FBQUEsWUFDWCxJQUFJO0FBQUEsWUFDSixRQUFRO0FBQUEsWUFDUixVQUFVO0FBQUEsWUFDVixTQUFTO0FBQUEsWUFDVCxXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixXQUFXO0FBQUEsWUFDWCxTQUFTO0FBQUEsWUFDVCxNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixLQUFLO0FBQUEsWUFDTCxVQUFVO0FBQUEsWUFDVixhQUFhO0FBQUEsWUFDYixjQUFjO0FBQUEsWUFDZCxLQUFLO0FBQUEsWUFDTCxXQUFXO0FBQUEsWUFDWCxPQUFPO0FBQUEsWUFDUCxZQUFZO0FBQUEsWUFDWixRQUFRO0FBQUEsWUFDUixLQUFLO0FBQUEsWUFDTCxXQUFXO0FBQUEsWUFDWCxVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUEsWUFDTixVQUFVO0FBQUEsWUFDVixPQUFP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LElBQUFBO0FBQUFBLHNCQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtZQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUEsVUFBQUEsdUlBQUFBO1VBQUFBO0FBQUFBLGNBQUFBLElBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO0FBQUFBLGlCQUFBQSxFQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxFQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLE1BQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQTtBQUFBQSxjQUFBQSxNQUFBQSxRQUFBQSxHQUFBQSxVQUFBQSxHQUFBQSxPQUFBQTtZQUFBQSxVQUFBQTtBQUFBQSxrQkFBQUE7QUFBQUEsc0JBQUFBO1lBQUFBO1VBQUFBLEVBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxXQUFBQSxRQUFBQSxNQUFBQSxLQUFBQSxHQUFBQSxZQUFBQSxLQUFBQSxHQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsSUFBQUEsTUFBQUEsRUFBQUEsR0FBQUEsS0FBQUEsSUFBQUE7QUFBQUEsWUFBQUEsR0FBQUEsRUFBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsaUJBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxLQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsVUFBQUEsUUFBQUEsS0FBQUEsSUFBQUEsTUFBQUEsRUFBQUEsR0FBQUEsS0FBQUEsR0FBQUEsS0FBQUEsSUFBQUE7QUFBQUEsWUFBQUEsR0FBQUEsRUFBQUEsSUFBQUEsVUFBQUEsRUFBQUE7QUFBQUEsaUJBQUFBLFNBQUFBLElBQUFBO0FBQUFBLGdCQUFBQSxLQUFBQSxXQUFBQTtBQUFBQSx1QkFBQUEsS0FBQUEsV0FBQUE7QUFBQUEsb0JBQUFBLEtBQUFBO0FBQUFBLHVCQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSwyQkFBQUEsS0FBQUEsR0FBQUEsU0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsUUFBQUEsTUFBQUE7QUFBQUEsd0JBQUFBLEtBQUFBLHVCQUFBQSxNQUFBQSxHQUFBQSxXQUFBQSxFQUFBQTtBQUFBQSxvQkFBQUEsTUFBQUEsS0FBQUEsT0FBQUEsR0FBQUEsTUFBQUEsTUFBQUEsUUFBQUEsR0FBQUEsTUFBQUEsY0FBQUEsTUFBQUE7a0JBQUFBO0FBQUFBLHlCQUFBQSx5QkFBQUEsT0FBQUE7Z0JBQUFBO2NBQUFBLEVBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLEdBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLFVBQUFBLFFBQUFBO0FBQUFBLGlCQUFBQSxNQUFBQSxHQUFBQSxLQUFBQSxLQUFBQSxVQUFBQSxVQUFBQSxLQUFBQSxTQUFBQSxVQUFBQSxFQUFBQSxDQUFBQSxLQUFBQSxNQUFBQSxNQUFBQSxLQUFBQSxNQUFBQSxHQUFBQSxLQUFBQSxLQUFBQSxVQUFBQSxVQUFBQSxLQUFBQSxTQUFBQSxVQUFBQSxFQUFBQSxDQUFBQSxLQUFBQSxNQUFBQSxNQUFBQSxLQUFBQSxNQUFBQSxHQUFBQSxLQUFBQSxLQUFBQSxVQUFBQSxVQUFBQSxLQUFBQSxTQUFBQSxVQUFBQSxFQUFBQSxDQUFBQSxLQUFBQSxNQUFBQSxNQUFBQTtBQUFBQSxxQkFBQUEsQ0FBQUEsSUFBQUEsSUFBQUEsRUFBQUE7WUFBQUEsRUFBQUEsRUFBQUEsR0FBQUEsS0FBQUEsR0FBQUEsSUFBQUEsQ0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsS0FBQUEsR0FBQUEsS0FBQUEsV0FBQUE7QUFBQUEsa0JBQUFB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YUFBQSxXQUFBLFFBQUEsV0FBQSxPQUFBLFdBQUEsVUFBQSxXQUFBLFdBQUEsV0FBQSxhQUFBLFdBQUEsZUFBQSxXQUFBLGdCQUFBLFdBQUEsWUFBQSxXQUFBLFdBQUEsV0FBQSxlQUFBLFdBQUEsY0FBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsUUFBQSxXQUFBLGlCQUFBLFdBQUEsV0FBQSxXQUFBLE1BQUEsV0FBQSxXQUFBLFdBQUEsS0FBQSxXQUFBLFdBQUEsV0FBQSxlQUFBLFdBQUEsU0FBQSxXQUFBLFFBQUEsV0FBQSxXQUFBLFdBQUEsU0FBQSxXQUFBLFdBQUEsV0FBQSxNQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxVQUFBLFdBQUEsWUFBQSxXQUFBLFFBQUEsV0FBQSxlQUFBLFdBQUEsWUFBQSxXQUFBLE9BQUEsV0FBQSxXQUFBLFdBQUEsVUFBQSxXQUFBLE9BQUEsV0FBQSxZQUFBLFdBQUEsT0FBQSxXQUFBLE9BQUEsV0FBQSxZQUFBLFdBQUEsV0FBQSxXQUFBLFlBQUEsV0FBQSxRQUFBLFdBQUEsY0FBQSxXQUFBLE9BQUEsV0FBQSxzQkFBQSxXQUFBLFNBQUEsV0FBQSxLQUFBLFdBQUEsU0FBQSxXQUFBLFNBQUEsV0FBQSxVQUFBLFdBQUEsV0FBQSxXQUFBLFFBQUEsV0FBQSxTQUFBLFdBQUEsT0FBQSxXQUFBLFlBQUEsV0FBQSxhQUFBLFdBQUEsUUFBQSxXQUFBLFdBQUEsV0FBQSxNQUFBLFdBQUEsTUFBQSxXQUFBLFdBQUEsV0FBQSxhQUFBLFdBQUEsVUFBQSxXQUFBLFFBQUEsV0FBQSxXQUFBLFdBQUEsZ0JBQUEsV0FBQSxZQUFBLFdBQUEsZUFBQSxXQUFBLFVBQUEsV0FBQSxVQUFBLFdBQUEsY0FBQSxXQUFBLGFBQUEsV0FBQSxNQUFBLFdBQUEsUUFBQSxXQUFBLGFBQUEsV0FBQSxPQUFBLFdBQUEsT0FBQSxVQUFBLEdBQUEsS0FBQSxXQUFBO0FBQUEsbUJBQUFtRyxLQUFBO0FBQUEsZ0JBQUFxYSxLQUFBLFVBQUEsU0FBQSxLQUFBLFdBQUEsVUFBQSxDQUFBLElBQUEs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QUEsS0FBQSxHQUFBLEtBQUEsZ0JBQUEsWUFBQSw0QkFBQSxLQUFBLGdCQUFBLFlBQUEsZUFBQSxLQUFBLGVBQUEsU0FBQSxjQUFBLEtBQUEsR0FBQSxLQUFBLGFBQUEsWUFBQSx5QkFBQSxLQUFBLGFBQUEsWUFBQSxZQUFBLEtBQUEsY0FBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsWUFBQSxZQUFBLGlCQUFBLEtBQUEsWUFBQSxZQUFBLE9BQUEsS0FBQSxrQkFBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsZ0JBQUEsWUFBQSxxQkFBQSxLQUFBLGdCQUFBLFlBQUEsV0FBQSxLQUFBLGVBQUEsU0FBQSxjQUFBLEtBQUEsR0FBQSxLQUFBLGFBQUEsWUFBQSx5QkFBQSxLQUFBLGFBQUEsWUFBQSxVQUFBLEtBQUEsYUFBQSxVQUFBLEdBQUFJLEtBQUEsS0FBQSxLQUFBLEVBQUEsS0FBQUEsSUFBQSxNQUFBLEtBQUEsR0FBQSxLQUFBLGNBQUEsU0FBQSxjQUFBLEtBQUEsR0FBQSxLQUFBLFlBQUEsWUFBQSx3QkFBQSxLQUFBLFlBQUEsWUFBQSxTQUFBLEtBQUEsWUFBQSxVQUFBLEdBQUFxYSxLQUFBLEtBQUEsTUFBQSxFQUFBLEtBQUFBLElBQUEsSUFBQSxHQUFBLEtBQUEsYUFBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsV0FBQSxZQUFBLHVCQUFBLEtBQUEsV0FBQSxZQUFBLFFBQUEsS0FBQSxXQUFBLFVBQUEsR0FBQXhnQixLQUFBLEtBQUEsS0FBQSxFQUFBLEtBQUFBLElBQUEsSUFBQSxHQUFBLEtBQUEsYUFBQSxTQUFBLGNBQUEsS0FBQSxHQUFBLEtBQUEsV0FBQSxZQUFBLHVCQUFBLEtBQUEsV0FBQSxZQUFBLGFBQUEsS0FBQSxXQUFBLFVBQUEsR0FBQXVlLEtBQUEsS0FBQSxTQUFBLEVBQUEsS0FBQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsS0FBQSxjQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsS0FBQSxRQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsS0FBQSxlQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsS0FBQSxhQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsS0FBQSxZQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsS0FBQSxVQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsS0FBQSxXQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsS0FBQSxlQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsS0FBQSxZQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsS0FBQSxXQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsS0FBQSxVQUFBLEdBQUEsS0FBQSxNQUFBLFlBQUEsS0FBQSxVQUFBO1VBQUEsRUFBQSxHQUFBLEVBQUEsS0FBQSxlQUFBLE9BQUEsV0FBQTtBQUFBLGdCQUFBcFksS0FBQTtBQUFBLGlCQUFBLE9BQUEsQ0FBQSxHQUFBLEtBQUEsUUFBQSxDQUFBLEdBQUEsS0FBQSxTQUFBLElBQUEsR0FBQSxLQUFBLGlCQUFBLEdBQUEsS0FBQSxPQUFBLElBQUEsT0FBQSxFQUFBLElBQUEsRUFBQSxRQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsT0FBQSxHQUFBLGdCQUFBLFNBQUFxYSxJQUFBO0FBQUEsY0FBQUEsR0FBQSxXQUFBcmEsR0FBQSxjQUFBcWEsRUFBQTtZQUFBLENBQUEsR0FBQSxLQUFBLE9BQUEsR0FBQSxPQUFBLFNBQUFBLElBQUE7QUFBQSxjQUFBcmEsR0FBQSxjQUFBcWEsRUFBQTtZQUFBLENBQUEsR0FBQSxLQUFBLE9BQUEsR0FBQSxZQUFBLFNBQUFBLElBQUE7QUFBQSxjQUFBcmEsR0FBQSxjQUFBcWEsRUFBQTtZQUFBLENBQUEsR0FBQSxLQUFBLE9BQUEsR0FBQSxXQUFBLFNBQUFBLElBQUE7QUFBQSxjQUFBcmEsR0FBQSxjQUFBcWEsRUFBQTtZQUFBLENBQUEsR0FBQSxLQUFBLE9BQUEsR0FBQSxVQUFBLFNBQUFBLElBQUE7QUFBQSxjQUFBcmEsR0FBQSxjQUFBcWEsRUFBQTtZQUFBLENBQUE7VUFBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLHNCQUFBLE9BQUEsV0FBQTtBQUFBLGdCQUFBLFVB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QUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUcxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRzFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUcxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FB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QUFBLE1BQUFBLENBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSwrQ0FBQUE7QUFBQUEsY0FBQUEsY0FBQUEsT0FBQUEsS0FBQUEsT0FBQUEsTUFBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLDBFQUFBQTtBQUFBQSxpQkFBQUEsUUFBQUEsS0FBQUEsS0FBQUEsUUFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsRUFBQUEsSUFBQUEsS0FBQUEsR0FBQUEsUUFBQUEsR0FBQUEsSUFBQUEsRUFBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBLElBQUFBLElBQUFBLElBQUFBLElBQUFBO0FBQUFBLGNBQUFBLFFBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSxnQ0FBQUE7QUFBQUEsY0FBQUEsUUFBQUEsTUFBQUEsQ0FBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLCtDQUFBQTtBQUFBQSxjQUFBQSxjQUFBQSxPQUFBQSxLQUFBQSxPQUFBQSxNQUFBQSxDQUFBQSxLQUFBQSxDQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUEsVUFBQUEseUVBQUFBO0FBQUFBLGlCQUFBQSxRQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxJQUFBQSxLQUFBQSxHQUFBQSxRQUFBQSxLQUFBQSxHQUFBQSxJQUFBQSxJQUFBQSxFQUFBQSxHQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsV0FBQUEsTUFBQUEsR0FBQUEsRUFBQUEsS0FBQUEsR0FBQUEsWUFBQUE7QUFBQUEsY0FBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLFNBQUFBLElBQUFBLElBQUFBO0FBQUFBLGtCQUFBQTtBQUFBQSxrQkFBQUEsQ0FBQUE7QUFBQUE7QUFBQUEsa0JBQUFBLFlBQUFBLE9BQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsT0FBQUEsVUFBQUEsU0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsMkJBQUFBLE1BQUFBLEdBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxrQkFBQUEsVUFBQUEsTUFBQUEsVUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxnQkFBQUEsTUFBQUEsMkNBQUFBLEtBQUFBLEVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxFQUFBQSxNQUFBQSxNQUFBQSxNQUFBQSxZQUFBQSxPQUFBQSxHQUFBQSxRQUFBQTtBQUFBQSxjQUFBQSxPQUFBQSxLQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsV0FBQUE7Y0FBQUE7QUFBQUEscUJBQUFBLEVBQUFBLEdBQUFBLElBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxNQUFBQSxHQUFBQSxTQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7WUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLHVJQUFBQTtVQUFBQTtBQUFBQSxjQUFBQSxJQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtBQUFBQSxpQkFBQUEsRUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsWUFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsRUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxNQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxZ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QUFBQSxrQkFBQUE7QUFBQUEsa0JBQUFBLENBQUFBO0FBQUFBO0FBQUFBLGtCQUFBQSxZQUFBQSxPQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsSUFBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLE9BQUFBLFVBQUFBLFNBQUFBLEtBQUFBLEVBQUFBLENBQUFBLEVBQUFBLEtBQUFBLElBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLDJCQUFBQSxNQUFBQSxHQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsWUFBQUE7QUFBQUEsa0JBQUFBLFVBQUFBLE1BQUFBLFVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsZ0JBQUFBLE1BQUFBLDJDQUFBQSxLQUFBQSxFQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsSUFBQUEsRUFBQUE7WUFBQUEsRUFBQUEsRUFBQUEsTUFBQUEsTUFBQUEsTUFBQUEsWUFBQUEsT0FBQUEsR0FBQUEsUUFBQUE7QUFBQUEsY0FBQUEsT0FBQUEsS0FBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLFdBQUFBO2NBQUFBO0FBQUFBLHFCQUFBQSxFQUFBQSxHQUFBQSxJQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSx1QkFBQUEsTUFBQUEsR0FBQUEsU0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEsSUFBQUEsRUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsc0JBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLEdBQUFBO1lBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSx1SUFBQUE7VUFBQUE7QUFBQUEsY0FBQUEsSUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7QUFBQUEsaUJBQUFBLEVBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLEVBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxLQUFBQSxHQUFB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RUFBQUEsS0FBQUEsR0FBQUEsWUFBQUE7QUFBQUEsY0FBQUEsQ0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLFNBQUFBLElBQUFBLElBQUFBO0FBQUFBLGtCQUFBQTtBQUFBQSxrQkFBQUEsQ0FBQUE7QUFBQUE7QUFBQUEsa0JBQUFBLFlBQUFBLE9BQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsT0FBQUEsVUFBQUEsU0FBQUEsS0FBQUEsRUFBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsMkJBQUFBLE1BQUFBLEdBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxrQkFBQUEsVUFBQUEsTUFBQUEsVUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxnQkFBQUEsTUFBQUEsMkNBQUFBLEtBQUFBLEVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtZQUFBQSxFQUFBQSxFQUFBQSxNQUFBQSxNQUFBQSxNQUFBQSxZQUFBQSxPQUFBQSxHQUFBQSxRQUFBQTtBQUFBQSxjQUFBQSxPQUFBQSxLQUFBQTtBQUFBQSxrQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsV0FBQUE7Y0FBQUE7QUFBQUEscUJBQUFBLEVBQUFBLEdBQUFBLElBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxNQUFBQSxHQUFBQSxTQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7WUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLHVJQUFBQTtVQUFBQTtBQUFBQSxjQUFBQSxJQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtBQUFBQSxpQkFB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QUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsRUFBQUE7QUFBQUEsY0FBQUEsSUFBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLFlBQUFBLE9BQUFBLEtBQUFBLEdBQUFBLEVBQUFBLEVBQUFBLEtBQUFBLElBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHFCQUFBQSxHQUFBQSxJQUFBQSxFQUFBQSxFQUFBQTtZQUFBQSxDQUFBQSxJQUFBQSxHQUFBQSxLQUFBQSxNQUFBQSxJQUFBQSxFQUFBQTtVQUFBQTtBQUFBQSxpQkFBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxVQUFBQSxRQUFBQSxNQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUEsSUFBQUEsS0FBQUEsUUFBQUEsVUFBQUEsRUFBQUEsSUFBQUEsVUFBQUEsRUFBQUEsSUFBQUEsQ0FBQUE7QUFBQUEsWUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsS0FBQUEsR0FBQUEsT0FBQUEsRUFBQUEsR0FBQUEsSUFBQUEsQ0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsU0FBQUEsSUFBQUE7QUFBQUEsaUJBQUFBLElBQUFBLElBQUFBLEdBQUFBLEVBQUFBLENBQUFBO1lBQUFBLENBQUFBLElBQUFBLEtBQUFBLEdBQUFBLElBQUFBLEdBQUFBLEVBQUFBLENBQUFBLElBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLE9BQUFBLEVBQUFBLENBQUFBLENBQUFBLEVBQUFBLEtBQUFBLElBQUFBLFNBQUFBLElBQUFBO0FBQUFBLGlCQUFBQSxJQUFBQSxJQUFBQSxHQUFBQSxJQUFBQSxFQUFBQSxDQUFBQTtZQUFBQSxDQUFBQTtVQUFBQTtBQUFBQSxpQkFBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBLElBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLFdBQUFBLE1BQUFBLEdBQUFBLEVBQUFBLEtBQUFBLEdBQUFBLFlBQUFBO0FBQUFBLGNBQUFBLENBQUFBLElBQUFBO0FBQUFBLGdCQUFBQSxHQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxTQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxrQkFBQUE7QUFBQUEsa0JBQUFBLENBQUFBO0FBQUFBO0FBQUFBLGtCQUFBQSxZQUFBQSxPQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsSUFBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLE9BQUFBLFVBQUFBLFNBQUFBLEtBQUFBLEVBQUFBLENBQUFBLEVBQUFBLEtBQUFBLElBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLDJCQUFBQSxNQUFBQSxHQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsWUFBQUE7QUFBQUEsa0JBQUFBLFVBQUFBLE1BQUFBLFVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsZ0JBQUFBLE1BQUFBLDJDQUFBQSxLQUFBQSxFQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsSUFBQUEsRUFBQUE7WUFBQUEsRUFBQUEsRUFBQUEsTUFBQUEsTUFBQUEsTUFBQUEsWUFBQUEsT0FBQUEsR0FBQUEsUUFBQUE7QUFBQUEsY0FBQUEsT0FBQUEsS0FBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLFdBQUFBO2NBQUFBO0FBQUFBLHFCQUFBQSxFQUFBQSxHQUFBQSxJQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSx1QkFBQUEsTUFBQUEsR0FBQUEsU0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEsSUFBQUEsRUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsc0JBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLEdBQUFBO1lBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSx1SUFBQUE7VUFBQUE7QUFBQUEsY0FBQUEsSUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7QUFBQUEsaUJBQUFBLEVBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLEVBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsR0FBQUEsTUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsWUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBO0FBQUFBLGNBQUFBLE1BQUFBLFFBQUFBLEdBQUFBLFVBQUFBLEdBQUFBLE9BQUFBO1lBQUFBLFVBQUFBO0FBQUFBLGtCQUFBQTtBQUFBQSxzQkFBQUE7WUFBQUE7VUFBQUEsRUFBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBLElBQUFBO0FBQUFBLFdBQUFBLFFBQUFBLE1BQUFBLEtBQUFBLEdBQUFBLFlBQUFBLEtBQUFBLEdBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxJQUFBQSxNQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxHQUFBQSxFQUFBQSxJQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxpQkFBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxlQUFBQSxPQUFBQSxXQUFBQSxDQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLEdBQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUEsY0FBQUEsT0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQTtBQUFBQSxxQkFBQUEsUUFBQUEsVUFBQUEsUUFBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsR0FBQUEsV0FBQUE7Y0FBQUEsQ0FBQUEsQ0FBQUEsR0FBQUE7WUFBQUEsU0FBQUEsSUFBQUE7QUFBQUEscUJBQUFBO1lBQUFBO1VBQUFBLEVBQUFBO0FBQUFBLGlCQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUEsS0FBQUEsR0FB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RUFBQUEsRUFBQUEsTUFBQUEsTUFBQUEsTUFBQUEsWUFBQUEsT0FBQUEsR0FBQUEsUUFBQUE7QUFBQUEsY0FBQUEsT0FBQUEsS0FBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLFdBQUFBO2NBQUFBO0FBQUFBLHFCQUFBQSxFQUFBQSxHQUFBQSxJQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSx1QkFBQUEsTUFBQUEsR0FBQUEsU0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEsSUFBQUEsRUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsc0JBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLEdBQUFBO1lBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSx1SUFBQUE7VUFBQUE7QUFBQUEsY0FBQUEsSUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7QUFBQUEsaUJBQUFBLEVBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLEVBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsR0FBQUEsTUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsWUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBO0FBQUFBLGNBQUFBLE1BQUFBLFFBQUFBLEdBQUFBLFVBQUFBLEdBQUFBLE9BQUFBO1lBQUFBLFVBQUFBO0FBQUFBLGtCQUFBQTtBQUFBQSxzQkFBQUE7WUFBQUE7VUFBQUEsRUFBQUE7UUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBLElBQUFBO0FBQUFBLFdBQUFBLFFBQUFBLE1BQUFBLEtBQUFBLEdBQUFBLFlBQUFBLEtBQUFBLEdBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxJQUFBQSxNQUFBQSxFQUFB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UCxnQkFBZ0I7QUFBQSxJQUNoQixNQUFNO0FBQUEsSUFDTixZQUFZO0FBQUEsSUFDWixPQUFPO0FBQUEsSUFDUCxXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxZQUFZO0FBQUEsSUFDWixXQUFXO0FBQUEsSUFDWCxPQUFPO0FBQUEsSUFDUCxnQkFBZ0I7QUFBQSxJQUNoQixVQUFVO0FBQUEsSUFDVixTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsSUFDTixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixlQUFlO0FBQUEsSUFDZixVQUFVO0FBQUEsSUFDVixXQUFXO0FBQUEsSUFDWCxVQUFVO0FBQUEsSUFDVixXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixnQkFBZ0I7QUFBQSxJQUNoQixZQUFZO0FBQUEsSUFDWixZQUFZO0FBQUEsSUFDWixTQUFTO0FBQUEsSUFDVCxZQUFZO0FBQUEsSUFDWixjQUFjO0FBQUEsSUFDZCxlQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZixZQUFZO0FBQUEsSUFDWixVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsSUFDYixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxZQUFZO0FBQUEsSUFDWixXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixhQUFhO0FBQUEsSUFDYixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxZQUFZO0FBQUEsSUFDWixNQUFNO0FBQUEsSUFDTixXQUFXO0FBQUEsSUFDWCxNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsSUFDUCxhQUFhO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixVQUFVO0FBQUEsSUFDVixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsSUFDUCxZQUFZO0FBQUEsSUFDWixVQUFVO0FBQUEsSUFDVixlQUFlO0FBQUEsSUFDZixXQUFXO0FBQUEsSUFDWCxjQUFjO0FBQUEsSUFDZCxXQUFXO0FBQUEsSUFDWCxZQUFZO0FBQUEsSUFDWixXQUFXO0FBQUEsSUFDWCxnQkFBZ0I7QUFBQSxJQUNoQixzQkFBc0I7QUFBQSxJQUN0QixXQUFXO0FBQUEsSUFDWCxZQUFZO0FBQUEsSUFDWixXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixlQUFlO0FBQUEsSUFDZixjQUFjO0FBQUEsSUFDZCxnQkFBZ0I7QUFBQSxJQUNoQixnQkFBZ0I7QUFBQSxJQUNoQixnQkFBZ0I7QUFBQSxJQUNoQixhQUFhO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixXQUFXO0FBQUEsSUFDWCxPQUFPO0FBQUEsSUFDUCxTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxrQkFBa0I7QUFBQSxJQUNsQixZQUFZO0FBQUEsSUFDWixjQUFjO0FBQUEsSUFDZCxjQUFjO0FBQUEsSUFDZCxnQkFBZ0I7QUFBQSxJQUNoQixpQkFBaUI7QUFBQSxJQUNqQixtQkFBbUI7QUFBQSxJQUNuQixpQkFBaUI7QUFBQSxJQUNqQixpQkFBaUI7QUFBQSxJQUNqQixjQUFjO0FBQUEsSUFDZCxXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsSUFDUCxXQUFXO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixXQUFXO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixlQUFlO0FBQUEsSUFDZixXQUFXO0FBQUEsSUFDWCxlQUFlO0FBQUEsSUFDZixlQUFlO0FBQUEsSUFDZixZQUFZO0FBQUEsSUFDWixXQUFXO0FBQUEsSUFDWCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixZQUFZO0FBQUEsSUFDWixRQUFRO0FBQUEsSUFDUixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxlQUFlO0FBQUEsSUFDZixLQUFLO0FBQUEsSUFDTCxXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixRQUFRO0FBQUEsSUFDUixZQUFZO0FBQUEsSUFDWixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxNQUFNO0FBQUEsSUFDTixhQUFhO0FBQUEsSUFDYixXQUFXO0FBQUEsSUFDWCxLQUFLO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixXQUFXO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsSUFDUCxZQUFZO0FBQUEsSUFDWixRQUFRO0FBQUEsSUFDUixhQUFhO0FBQUEsRUFDakI7QUFFQSxNQUFPLGlCQUFROzs7QUMzSmYsZ0JBQU0sVUFBVSxPQUFPLFdBQVk7QUFDL0IsVUFBTSxNQUFNLGdCQUFRLEtBQUssTUFBTSxLQUFLO0FBQ3BDLGFBQVMsS0FBSyxPQUFPLEtBQUssY0FBTSxHQUFHO0FBQy9CLFVBQUksZUFBTyxDQUFDLE1BQU07QUFBSyxlQUFPLEVBQUUsWUFBWTtBQUFBLElBQ2hEO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFFQSxnQkFBTSxPQUFPLFFBQVEsQ0FBQyxTQUFTO0FBQzNCLFdBQU8sS0FBSyxZQUFZO0FBQ3hCLFFBQUksZUFBTyxJQUFJO0FBQUcsYUFBTyxnQkFBUSxlQUFPLElBQUksQ0FBQztBQUM3QyxVQUFNLElBQUksTUFBTSx5QkFBeUIsSUFBSTtBQUFBLEVBQ2pEO0FBRUEsZ0JBQU0sV0FBVyxLQUFLO0FBQUEsSUFDbEIsR0FBRztBQUFBLElBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUztBQUNsQixVQUFJLENBQUMsS0FBSyxVQUFVLGFBQUssQ0FBQyxNQUFNLFlBQVksZUFBTyxFQUFFLFlBQVksQ0FBQyxHQUFHO0FBQ2pFLGVBQU87QUFBQSxNQUNYO0FBQUEsSUFDSjtBQUFBLEVBQ0osQ0FBQzs7O0FDM0JELE1BQU0sVUFBVSxDQUFDQyxTQUFRO0FBQ3JCLFFBQUksYUFBS0EsSUFBRyxLQUFLLFlBQVlBLFFBQU8sS0FBS0EsUUFBTyxVQUFVO0FBQ3RELFlBQU0sSUFBSUEsUUFBTztBQUNqQixZQUFNLElBQUtBLFFBQU8sSUFBSztBQUN2QixZQUFNQyxLQUFJRCxPQUFNO0FBQ2hCLGFBQU8sQ0FBQyxHQUFHLEdBQUdDLElBQUcsQ0FBQztBQUFBLElBQ3RCO0FBQ0EsVUFBTSxJQUFJLE1BQU0sd0JBQXdCRCxJQUFHO0FBQUEsRUFDL0M7QUFFQSxNQUFPLGtCQUFROzs7QUNWZixNQUFNLFVBQVUsSUFBSSxTQUFTO0FBQ3pCLFVBQU0sQ0FBQyxHQUFHLEdBQUdFLEVBQUMsSUFBSSxlQUFPLE1BQU0sS0FBSztBQUNwQyxZQUFRLEtBQUssT0FBTyxLQUFLLEtBQUtBO0FBQUEsRUFDbEM7QUFFQSxNQUFPLGtCQUFROzs7QUNBZixnQkFBTSxVQUFVLE1BQU0sV0FBWTtBQUM5QixXQUFPLGdCQUFRLEtBQUssSUFBSTtBQUFBLEVBQzVCO0FBRUEsaUJBQU8sTUFBTSxJQUFJLFNBQVMsSUFBSSxjQUFNLEdBQUcsTUFBTSxLQUFLO0FBRWxELGdCQUFNLE9BQU8sTUFBTTtBQUVuQixnQkFBTSxXQUFXLEtBQUs7QUFBQSxJQUNsQixHQUFHO0FBQUEsSUFDSCxNQUFNLElBQUksU0FBUztBQUNmLFVBQ0ksS0FBSyxXQUFXLEtBQ2hCLGFBQUssS0FBSyxDQUFDLENBQUMsTUFBTSxZQUNsQixLQUFLLENBQUMsS0FBSyxLQUNYLEtBQUssQ0FBQyxLQUFLLFVBQ2I7QUFDRSxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFBQSxFQUNKLENBQUM7OztBQ3ZCRCxNQUFNLEVBQUUsT0FBQUMsT0FBTSxJQUFJO0FBRWxCLGdCQUFNLFVBQVUsTUFBTSxTQUFVQyxPQUFNLE1BQU07QUFDeEMsUUFBSUEsU0FBUTtBQUFPLGFBQU8sS0FBSyxLQUFLLE1BQU0sR0FBRyxDQUFDO0FBQzlDLFdBQU8sS0FBSyxLQUFLLE1BQU0sR0FBRyxDQUFDLEVBQUUsSUFBSUQsTUFBSztBQUFBLEVBQzFDO0FBRUEsZ0JBQU0sVUFBVSxPQUFPLFNBQVVDLE9BQU0sTUFBTTtBQUN6QyxXQUFPLEtBQUssS0FBSyxNQUFNLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQ0MsSUFBRyxNQUFNO0FBQ3ZDLGFBQU8sSUFBSSxJQUFLRCxTQUFRLFFBQVFDLEtBQUlGLE9BQU1FLEVBQUMsSUFBS0E7QUFBQSxJQUNwRCxDQUFDO0FBQUEsRUFDTDtBQUVBLGlCQUFPLE1BQU0sSUFBSSxTQUFTLElBQUksY0FBTSxHQUFHLE1BQU0sS0FBSztBQUVsRCxnQkFBTSxPQUFPLE1BQU0sSUFBSSxTQUFTO0FBQzVCLFVBQU0sT0FBTyxlQUFPLE1BQU0sTUFBTTtBQUNoQyxRQUFJLEtBQUssQ0FBQyxNQUFNO0FBQVcsV0FBSyxDQUFDLElBQUk7QUFDckMsV0FBTztBQUFBLEVBQ1g7QUFFQSxnQkFBTSxXQUFXLEtBQUs7QUFBQSxJQUNsQixHQUFHO0FBQUEsSUFDSCxNQUFNLElBQUksU0FBUztBQUNmLGFBQU8sZUFBTyxNQUFNLE1BQU07QUFDMUIsVUFDSSxhQUFLLElBQUksTUFBTSxZQUNkLEtBQUssV0FBVyxLQUNaLEtBQUssV0FBVyxLQUNiLGFBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxZQUNqQixLQUFLLENBQUMsS0FBSyxLQUNYLEtBQUssQ0FBQyxLQUFLLElBQ3JCO0FBQ0UsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQUEsRUFDSixDQUFDOzs7QUNuQ0QsTUFBTSxFQUFFLElBQUksSUFBSTtBQUVoQixNQUFNLGtCQUFrQixDQUFDLFdBQVc7QUFDaEMsVUFBTSxPQUFPLFNBQVM7QUFDdEIsUUFBSSxHQUFHLEdBQUdDO0FBQ1YsUUFBSSxPQUFPLElBQUk7QUFDWCxVQUFJO0FBQ0osVUFDSSxPQUFPLElBQ0QsSUFDQSxzQkFDQSx1QkFBdUIsSUFBSSxPQUFPLEtBQ2xDLHFCQUFxQixJQUFJLENBQUM7QUFDcEMsTUFBQUEsS0FDSSxPQUFPLEtBQ0QsSUFDQSxzQkFDQSxzQkFBc0JBLEtBQUksT0FBTyxNQUNqQyxxQkFBcUIsSUFBSUEsRUFBQztBQUFBLElBQ3hDLE9BQU87QUFDSCxVQUNJLHFCQUNBLHFCQUFxQixJQUFJLE9BQU8sTUFDaEMsb0JBQW9CLElBQUksQ0FBQztBQUM3QixVQUNJLG9CQUNBLHVCQUF1QixJQUFJLE9BQU8sTUFDbEMsbUJBQW1CLElBQUksQ0FBQztBQUM1QixNQUFBQSxLQUFJO0FBQUEsSUFDUjtBQUNBLFdBQU8sQ0FBQyxHQUFHLEdBQUdBLElBQUcsQ0FBQztBQUFBLEVBQ3RCO0FBRUEsTUFBTywwQkFBUTs7O0FDL0JmLE1BQU0sRUFBRSxPQUFBQyxPQUFNLElBQUk7QUFFbEIsTUFBTSxrQkFBa0IsSUFBSSxTQUFTO0FBQ2pDLFVBQU1DLE9BQU0sZUFBTyxNQUFNLEtBQUs7QUFDOUIsVUFBTSxJQUFJQSxLQUFJLENBQUMsR0FDWEMsS0FBSUQsS0FBSSxDQUFDO0FBQ2IsUUFBSSxVQUFVO0FBQ2QsUUFBSSxVQUFVO0FBQ2QsVUFBTSxNQUFNO0FBQ1osUUFBSTtBQUNKLFdBQU8sVUFBVSxVQUFVLEtBQUs7QUFDNUIsY0FBUSxVQUFVLFdBQVc7QUFDN0IsWUFBTUEsT0FBTSx3QkFBZ0IsSUFBSTtBQUNoQyxVQUFJQSxLQUFJLENBQUMsSUFBSUEsS0FBSSxDQUFDLEtBQUtDLEtBQUksR0FBRztBQUMxQixrQkFBVTtBQUFBLE1BQ2QsT0FBTztBQUNILGtCQUFVO0FBQUEsTUFDZDtBQUFBLElBQ0o7QUFDQSxXQUFPRixPQUFNLElBQUk7QUFBQSxFQUNyQjtBQUVBLE1BQU8sMEJBQVE7OztBQ3ZCZixnQkFBTSxVQUFVLE9BQ1osY0FBTSxVQUFVLFNBQ2hCLGNBQU0sVUFBVSxjQUNaLFdBQVk7QUFDUixXQUFPLHdCQUFnQixLQUFLLElBQUk7QUFBQSxFQUNwQztBQUVSLGlCQUFPLE9BQ0gsZUFBTyxTQUNQLGVBQU8sY0FDSCxJQUFJLFNBQVMsSUFBSSxjQUFNLEdBQUcsTUFBTSxNQUFNO0FBRTlDLGdCQUFNLE9BQU8sT0FDVCxjQUFNLE9BQU8sU0FDYixjQUFNLE9BQU8sY0FDVDs7O0FDcEJSLE1BQU0sRUFBRSxLQUFBRyxNQUFLLEtBQUssSUFBSTtBQU90QixNQUFNLFlBQVksSUFBSSxTQUFTO0FBQzNCLFdBQU8sZUFBTyxNQUFNLEtBQUs7QUFDekIsVUFBTSxDQUFDLEdBQUcsR0FBR0MsRUFBQyxJQUFJO0FBRWxCLFVBQU0sSUFBSUQsS0FBSSxJQUFJLGVBQWUsSUFBSSxlQUFlQyxJQUFHLENBQUM7QUFDeEQsVUFBTSxJQUFJRCxLQUFJLElBQUksZUFBZSxJQUFJLGVBQWVDLElBQUcsQ0FBQztBQUN4RCxVQUFNLElBQUlELEtBQUksSUFBSSxlQUFlLElBQUksY0FBY0MsSUFBRyxDQUFDO0FBRXZELFdBQU87QUFBQSxNQUNILE1BQU0sU0FBUyxlQUFnQixJQUFJLGVBQWUsSUFBSSxlQUFlLENBQUM7QUFBQSxNQUN0RSxNQUFNLFNBQVMsZ0JBQWdCLElBQUksZUFBZSxJQUFJLGVBQWUsQ0FBQztBQUFBLE1BQ3RFLE1BQU0sU0FBUyxnQkFBZ0IsSUFBSSxlQUFlLElBQUksY0FBYyxDQUFDO0FBQUEsTUFDckUsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUk7QUFBQSxJQUNoQztBQUFBLEVBQ0o7QUFFQSxNQUFPLG9CQUFRO0FBRWYsV0FBUyxTQUFTLEdBQUc7QUFDakIsVUFBTUMsT0FBTSxLQUFLLElBQUksQ0FBQztBQUN0QixRQUFJQSxPQUFNLFVBQVc7QUFDakIsY0FBUSxLQUFLLENBQUMsS0FBSyxNQUFNLFFBQVFGLEtBQUlFLE1BQUssSUFBSSxHQUFHLElBQUk7QUFBQSxJQUN6RDtBQUNBLFdBQU8sSUFBSTtBQUFBLEVBQ2Y7OztBQy9CQSxNQUFNLEVBQUUsTUFBTSxLQUFBQyxNQUFLLE1BQUFDLE1BQUssSUFBSTtBQUU1QixNQUFNLFlBQVksSUFBSSxTQUFTO0FBRzNCLFVBQU0sQ0FBQyxHQUFHLEdBQUdDLEVBQUMsSUFBSSxlQUFPLE1BQU0sS0FBSztBQUNwQyxVQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsSUFBSTtBQUFBLE1BQ2pCLFNBQVMsSUFBSSxHQUFHO0FBQUEsTUFDaEIsU0FBUyxJQUFJLEdBQUc7QUFBQSxNQUNoQixTQUFTQSxLQUFJLEdBQUc7QUFBQSxJQUNwQjtBQUNBLFVBQU0sSUFBSSxLQUFLLGVBQWUsS0FBSyxlQUFlLEtBQUssZUFBZSxFQUFFO0FBQ3hFLFVBQU0sSUFBSSxLQUFLLGVBQWUsS0FBSyxlQUFlLEtBQUssZUFBZSxFQUFFO0FBQ3hFLFVBQU0sSUFBSSxLQUFLLGVBQWUsS0FBSyxlQUFlLEtBQUssZUFBZSxFQUFFO0FBRXhFLFdBQU87QUFBQSxNQUNILGVBQWUsSUFBSSxjQUFjLElBQUksZUFBZTtBQUFBLE1BQ3BELGVBQWUsSUFBSSxjQUFjLElBQUksZUFBZTtBQUFBLE1BQ3BELGVBQWUsSUFBSSxlQUFlLElBQUksY0FBYztBQUFBLElBQ3hEO0FBQUEsRUFDSjtBQUVBLE1BQU8sb0JBQVE7QUFFZixXQUFTLFNBQVMsR0FBRztBQUNqQixVQUFNQyxPQUFNLEtBQUssSUFBSSxDQUFDO0FBQ3RCLFFBQUlBLE9BQU0sU0FBUztBQUNmLGFBQU8sSUFBSTtBQUFBLElBQ2Y7QUFDQSxZQUFRRixNQUFLLENBQUMsS0FBSyxLQUFLRCxNQUFLRyxPQUFNLFNBQVMsT0FBTyxHQUFHO0FBQUEsRUFDMUQ7OztBQ3hCQSxnQkFBTSxVQUFVLFFBQVEsV0FBWTtBQUNoQyxXQUFPLGtCQUFVLEtBQUssSUFBSTtBQUFBLEVBQzlCO0FBRUEsaUJBQU8sUUFBUSxJQUFJLFNBQVMsSUFBSSxjQUFNLEdBQUcsTUFBTSxPQUFPO0FBRXRELGdCQUFNLE9BQU8sUUFBUTtBQUVyQixnQkFBTSxXQUFXLEtBQUs7QUFBQSxJQUNsQixHQUFHO0FBQUEsSUFDSCxNQUFNLElBQUksU0FBUztBQUNmLGFBQU8sZUFBTyxNQUFNLE9BQU87QUFDM0IsVUFBSSxhQUFLLElBQUksTUFBTSxXQUFXLEtBQUssV0FBVyxHQUFHO0FBQzdDLGVBQU87QUFBQSxNQUNYO0FBQUEsSUFDSjtBQUFBLEVBQ0osQ0FBQzs7O0FDbkJELE1BQU0sWUFBWSxJQUFJLFNBQVM7QUFDM0IsV0FBTyxlQUFPLE1BQU0sS0FBSztBQUN6QixVQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSTtBQUNsQixVQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxnQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNsQyxVQUFNLENBQUMsR0FBRyxHQUFHQyxFQUFDLElBQUksa0JBQVUsR0FBRyxHQUFHLEVBQUU7QUFDcEMsV0FBTyxDQUFDLEdBQUcsR0FBR0EsSUFBRyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQUEsRUFDbEQ7QUFFQSxNQUFPLG9CQUFROzs7QUNSZixNQUFNLFlBQVksSUFBSSxTQUFTO0FBQzNCLFVBQU0sQ0FBQyxHQUFHLEdBQUdDLEVBQUMsSUFBSSxlQUFPLE1BQU0sS0FBSztBQUNwQyxVQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxrQkFBVSxHQUFHLEdBQUdBLEVBQUM7QUFDcEMsV0FBTyxnQkFBUSxHQUFHLEdBQUcsRUFBRTtBQUFBLEVBQzNCO0FBRUEsTUFBTyxvQkFBUTs7O0FDSGYsZ0JBQU0sVUFBVSxRQUFRLFdBQVk7QUFDaEMsV0FBTyxrQkFBVSxLQUFLLElBQUk7QUFBQSxFQUM5QjtBQUVBLGlCQUFPLFFBQVEsSUFBSSxTQUFTLElBQUksY0FBTSxHQUFHLE1BQU0sT0FBTztBQUV0RCxnQkFBTSxPQUFPLFFBQVE7QUFFckIsZ0JBQU0sV0FBVyxLQUFLO0FBQUEsSUFDbEIsR0FBRztBQUFBLElBQ0gsTUFBTSxJQUFJLFNBQVM7QUFDZixhQUFPLGVBQU8sTUFBTSxPQUFPO0FBQzNCLFVBQUksYUFBSyxJQUFJLE1BQU0sV0FBVyxLQUFLLFdBQVcsR0FBRztBQUM3QyxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFBQSxFQUNKLENBQUM7OztBQ3BCRCxnQkFBTSxVQUFVLFFBQVEsU0FBVSxHQUFHLFNBQVMsT0FBTztBQUNqRCxRQUFJLE1BQU0sVUFBYSxhQUFLLENBQUMsTUFBTSxVQUFVO0FBQ3pDLFVBQUksUUFBUTtBQUNSLGFBQUssS0FBSyxDQUFDLElBQUk7QUFDZixlQUFPO0FBQUEsTUFDWDtBQUNBLGFBQU8sSUFBSSxjQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUs7QUFBQSxJQUN6RTtBQUNBLFdBQU8sS0FBSyxLQUFLLENBQUM7QUFBQSxFQUN0Qjs7O0FDVkEsZ0JBQU0sVUFBVSxVQUFVLFdBQVk7QUFDbEMsV0FBTyxLQUFLLEtBQUssWUFBWTtBQUFBLEVBQ2pDOzs7QUNBQSxnQkFBTSxVQUFVLFNBQVMsU0FBVSxTQUFTLEdBQUc7QUFDM0MsVUFBTSxLQUFLO0FBQ1gsVUFBTUMsT0FBTSxHQUFHLElBQUk7QUFDbkIsSUFBQUEsS0FBSSxDQUFDLEtBQUssc0JBQWMsS0FBSztBQUM3QixXQUFPLElBQUksY0FBTUEsTUFBSyxLQUFLLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJO0FBQUEsRUFDdkQ7QUFFQSxnQkFBTSxVQUFVLFdBQVcsU0FBVSxTQUFTLEdBQUc7QUFDN0MsV0FBTyxLQUFLLE9BQU8sQ0FBQyxNQUFNO0FBQUEsRUFDOUI7QUFFQSxnQkFBTSxVQUFVLFNBQVMsY0FBTSxVQUFVO0FBQ3pDLGdCQUFNLFVBQVUsV0FBVyxjQUFNLFVBQVU7OztBQ2QzQyxnQkFBTSxVQUFVLE1BQU0sU0FBVSxJQUFJO0FBQ2hDLFVBQU0sQ0FBQyxNQUFNLE9BQU8sSUFBSSxHQUFHLE1BQU0sR0FBRztBQUNwQyxVQUFNLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDdkIsUUFBSSxTQUFTO0FBQ1QsWUFBTSxJQUFJLEtBQUssUUFBUSxPQUFPLEtBQUssS0FBSyxPQUFPLEdBQUcsQ0FBQyxNQUFNLE9BQU8sSUFBSTtBQUNwRSxVQUFJLElBQUk7QUFBSSxlQUFPLElBQUksQ0FBQztBQUN4QixZQUFNLElBQUksTUFBTSxtQkFBbUIsT0FBTyxZQUFZLElBQUksRUFBRTtBQUFBLElBQ2hFLE9BQU87QUFDSCxhQUFPO0FBQUEsSUFDWDtBQUFBLEVBQ0o7OztBQ1ZBLE1BQU0sRUFBRSxLQUFBQyxLQUFJLElBQUk7QUFFaEIsTUFBTSxNQUFNO0FBQ1osTUFBTSxXQUFXO0FBRWpCLGdCQUFNLFVBQVUsWUFBWSxTQUFVLEtBQUssT0FBTyxPQUFPO0FBQ3JELFFBQUksUUFBUSxVQUFhLGFBQUssR0FBRyxNQUFNLFVBQVU7QUFDN0MsVUFBSSxRQUFRLEdBQUc7QUFFWCxlQUFPLElBQUksY0FBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQUEsTUFDbkQ7QUFDQSxVQUFJLFFBQVEsR0FBRztBQUVYLGVBQU8sSUFBSSxjQUFNLENBQUMsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUs7QUFBQSxNQUN6RDtBQUVBLFVBQUksVUFBVSxLQUFLLFVBQVU7QUFDN0IsVUFBSSxXQUFXO0FBRWYsWUFBTUMsUUFBTyxDQUFDLEtBQUssU0FBUztBQUN4QixjQUFNLE1BQU0sSUFBSSxZQUFZLE1BQU0sS0FBSyxJQUFJO0FBQzNDLGNBQU0sS0FBSyxJQUFJLFVBQVU7QUFDekIsWUFBSSxLQUFLLElBQUksTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLFlBQVk7QUFFekMsaUJBQU87QUFBQSxRQUNYO0FBQ0EsZUFBTyxLQUFLLE1BQU1BLE1BQUssS0FBSyxHQUFHLElBQUlBLE1BQUssS0FBSyxJQUFJO0FBQUEsTUFDckQ7QUFFQSxZQUFNQyxRQUNGLFVBQVUsTUFDSkQsTUFBSyxJQUFJLGNBQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUMvQkEsTUFBSyxNQUFNLElBQUksY0FBTSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUM3QyxJQUFJO0FBQ04sYUFBTyxJQUFJLGNBQU0sQ0FBQyxHQUFHQyxNQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztBQUFBLElBQzNDO0FBQ0EsV0FBTyxjQUFjLEdBQUcsS0FBSyxLQUFLLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFBQSxFQUNqRDtBQUVBLE1BQU0sZ0JBQWdCLENBQUMsR0FBRyxHQUFHQyxPQUFNO0FBRy9CLFFBQUksWUFBWSxDQUFDO0FBQ2pCLFFBQUksWUFBWSxDQUFDO0FBQ2pCLElBQUFBLEtBQUksWUFBWUEsRUFBQztBQUNqQixXQUFPLFNBQVMsSUFBSSxTQUFTLElBQUksU0FBU0E7QUFBQSxFQUM5QztBQUVBLE1BQU0sY0FBYyxDQUFDQyxPQUFNO0FBQ3ZCLElBQUFBLE1BQUs7QUFDTCxXQUFPQSxNQUFLLFVBQVVBLEtBQUksUUFBUUosTUFBS0ksS0FBSSxTQUFTLE9BQU8sR0FBRztBQUFBLEVBQ2xFOzs7QUNyREEsTUFBTyx1QkFBUSxDQUFDOzs7QUNJaEIsTUFBTyxjQUFRLENBQUMsTUFBTSxNQUFNLElBQUksUUFBUSxTQUFTO0FBQzdDLFFBQUksT0FBTyxLQUFLLENBQUMsS0FBSztBQUN0QixRQUFJLENBQUMscUJBQWEsSUFBSSxLQUFLLENBQUMsS0FBSyxRQUFRO0FBRXJDLGFBQU8sT0FBTyxLQUFLLG9CQUFZLEVBQUUsQ0FBQztBQUFBLElBQ3RDO0FBQ0EsUUFBSSxDQUFDLHFCQUFhLElBQUksR0FBRztBQUNyQixZQUFNLElBQUksTUFBTSxzQkFBc0IsSUFBSSxpQkFBaUI7QUFBQSxJQUMvRDtBQUNBLFFBQUksYUFBSyxJQUFJLE1BQU07QUFBVSxhQUFPLElBQUksY0FBTSxJQUFJO0FBQ2xELFFBQUksYUFBSyxJQUFJLE1BQU07QUFBVSxhQUFPLElBQUksY0FBTSxJQUFJO0FBQ2xELFdBQU8scUJBQWEsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDLEVBQUU7QUFBQSxNQUNyQyxLQUFLLE1BQU0sSUFBSSxLQUFLLEtBQUssTUFBTSxJQUFJLEtBQUssTUFBTTtBQUFBLElBQ2xEO0FBQUEsRUFDSjs7O0FDZkEsZ0JBQU0sVUFBVSxNQUFNLGNBQU0sVUFBVSxjQUFjLFNBQ2hELE1BQ0EsSUFBSSxRQUNELE1BQ0w7QUFDRSxXQUFPLFlBQUksTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJO0FBQUEsRUFDckM7OztBQ1BBLGdCQUFNLFVBQVUsY0FBYyxTQUFVLFNBQVMsT0FBTztBQUNwRCxVQUFNQyxPQUFNLEtBQUs7QUFDakIsVUFBTSxJQUFJQSxLQUFJLENBQUM7QUFDZixRQUFJLFFBQVE7QUFDUixXQUFLLE9BQU8sQ0FBQ0EsS0FBSSxDQUFDLElBQUksR0FBR0EsS0FBSSxDQUFDLElBQUksR0FBR0EsS0FBSSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ2xELGFBQU87QUFBQSxJQUNYLE9BQU87QUFDSCxhQUFPLElBQUksY0FBTSxDQUFDQSxLQUFJLENBQUMsSUFBSSxHQUFHQSxLQUFJLENBQUMsSUFBSSxHQUFHQSxLQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLO0FBQUEsSUFDbkU7QUFBQSxFQUNKOzs7QUNQQSxnQkFBTSxVQUFVLFdBQVcsU0FBVSxTQUFTLEdBQUc7QUFDN0MsVUFBTSxLQUFLO0FBQ1gsVUFBTUMsT0FBTSxHQUFHLElBQUk7QUFDbkIsSUFBQUEsS0FBSSxDQUFDLEtBQUssc0JBQWMsS0FBSztBQUM3QixRQUFJQSxLQUFJLENBQUMsSUFBSTtBQUFHLE1BQUFBLEtBQUksQ0FBQyxJQUFJO0FBQ3pCLFdBQU8sSUFBSSxjQUFNQSxNQUFLLEtBQUssRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLElBQUk7QUFBQSxFQUN2RDtBQUVBLGdCQUFNLFVBQVUsYUFBYSxTQUFVLFNBQVMsR0FBRztBQUMvQyxXQUFPLEtBQUssU0FBUyxDQUFDLE1BQU07QUFBQSxFQUNoQzs7O0FDWEEsZ0JBQU0sVUFBVSxNQUFNLFNBQVUsSUFBSSxPQUFPLFNBQVMsT0FBTztBQUN2RCxVQUFNLENBQUMsTUFBTSxPQUFPLElBQUksR0FBRyxNQUFNLEdBQUc7QUFDcEMsVUFBTSxNQUFNLEtBQUssSUFBSSxFQUFFO0FBQ3ZCLFFBQUksU0FBUztBQUNULFlBQU0sSUFBSSxLQUFLLFFBQVEsT0FBTyxLQUFLLEtBQUssT0FBTyxHQUFHLENBQUMsTUFBTSxPQUFPLElBQUk7QUFDcEUsVUFBSSxJQUFJLElBQUk7QUFDUixZQUFJLGFBQUssS0FBSyxLQUFLLFVBQVU7QUFDekIsa0JBQVEsTUFBTSxPQUFPLENBQUMsR0FBRztBQUFBLFlBQ3JCLEtBQUs7QUFDRCxrQkFBSSxDQUFDLEtBQUssQ0FBQztBQUNYO0FBQUEsWUFDSixLQUFLO0FBQ0Qsa0JBQUksQ0FBQyxLQUFLLENBQUM7QUFDWDtBQUFBLFlBQ0osS0FBSztBQUNELGtCQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sT0FBTyxDQUFDO0FBQ3pCO0FBQUEsWUFDSixLQUFLO0FBQ0Qsa0JBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxPQUFPLENBQUM7QUFDekI7QUFBQSxZQUNKO0FBQ0ksa0JBQUksQ0FBQyxJQUFJLENBQUM7QUFBQSxVQUNsQjtBQUFBLFFBQ0osV0FBVyxhQUFLLEtBQUssTUFBTSxVQUFVO0FBQ2pDLGNBQUksQ0FBQyxJQUFJO0FBQUEsUUFDYixPQUFPO0FBQ0gsZ0JBQU0sSUFBSSxNQUFNLGlDQUFpQztBQUFBLFFBQ3JEO0FBQ0EsY0FBTSxNQUFNLElBQUksY0FBTSxLQUFLLElBQUk7QUFDL0IsWUFBSSxRQUFRO0FBQ1IsZUFBSyxPQUFPLElBQUk7QUFDaEIsaUJBQU87QUFBQSxRQUNYO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFDQSxZQUFNLElBQUksTUFBTSxtQkFBbUIsT0FBTyxZQUFZLElBQUksRUFBRTtBQUFBLElBQ2hFLE9BQU87QUFDSCxhQUFPO0FBQUEsSUFDWDtBQUFBLEVBQ0o7OztBQ3RDQSxnQkFBTSxVQUFVLE9BQU8sU0FBVSxJQUFJLFFBQVEsTUFBTTtBQUMvQyxXQUFPLFlBQUksTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJO0FBQUEsRUFDeEM7QUFFQSxnQkFBTSxVQUFVLFFBQVEsU0FBVSxJQUFJLFFBQVEsTUFBTTtBQUNoRCxXQUFPLFlBQUksTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJO0FBQUEsRUFDeEM7OztBQ1BBLE1BQU0sTUFBTSxDQUFDLE1BQU0sTUFBTSxNQUFNO0FBQzNCLFVBQU0sT0FBTyxLQUFLO0FBQ2xCLFVBQU0sT0FBTyxLQUFLO0FBQ2xCLFdBQU8sSUFBSTtBQUFBLE1BQ1AsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7QUFBQSxNQUMvQixLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUFBLE1BQy9CLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQUEsTUFDL0I7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUdBLHVCQUFNLE1BQU07OztBQ2RaLE1BQU0sRUFBRSxNQUFBQyxPQUFNLEtBQUFDLEtBQUksSUFBSTtBQUd0QixNQUFNLE9BQU8sQ0FBQyxNQUFNLE1BQU0sTUFBTTtBQUM1QixVQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxLQUFLO0FBQzFCLFVBQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLEtBQUs7QUFDMUIsV0FBTyxJQUFJO0FBQUEsTUFDUEQsTUFBS0MsS0FBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUtBLEtBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUFBLE1BQzFDRCxNQUFLQyxLQUFJLElBQUksQ0FBQyxLQUFLLElBQUksS0FBS0EsS0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQUEsTUFDMUNELE1BQUtDLEtBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLQSxLQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7QUFBQSxNQUMxQztBQUFBLElBQ0o7QUFBQSxFQUNKO0FBR0EsdUJBQU0sT0FBTzs7O0FDWmIsTUFBTSxNQUFNLENBQUMsTUFBTSxNQUFNLE1BQU07QUFDM0IsVUFBTSxPQUFPLEtBQUssSUFBSTtBQUN0QixVQUFNLE9BQU8sS0FBSyxJQUFJO0FBQ3RCLFdBQU8sSUFBSTtBQUFBLE1BQ1AsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7QUFBQSxNQUMvQixLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUFBLE1BQy9CLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQUEsTUFDL0I7QUFBQSxJQUNKO0FBQUEsRUFDSjtBQUdBLHVCQUFNLE1BQU07OztBQ2RaLE1BQU8sY0FBUSxDQUFDLE1BQU0sTUFBTSxHQUFHLE1BQU07QUFDakMsUUFBSSxNQUFNO0FBQ1YsUUFBSSxNQUFNLE9BQU87QUFDYixhQUFPLEtBQUssSUFBSTtBQUNoQixhQUFPLEtBQUssSUFBSTtBQUFBLElBQ3BCLFdBQVcsTUFBTSxPQUFPO0FBQ3BCLGFBQU8sS0FBSyxJQUFJO0FBQ2hCLGFBQU8sS0FBSyxJQUFJO0FBQUEsSUFDcEIsV0FBVyxNQUFNLE9BQU87QUFDcEIsYUFBTyxLQUFLLElBQUk7QUFDaEIsYUFBTyxLQUFLLElBQUk7QUFBQSxJQUNwQixXQUFXLE1BQU0sT0FBTztBQUNwQixhQUFPLEtBQUssSUFBSTtBQUNoQixhQUFPLEtBQUssSUFBSTtBQUFBLElBQ3BCLFdBQVcsTUFBTSxTQUFTLE1BQU0sT0FBTztBQUNuQyxVQUFJO0FBQ0osYUFBTyxLQUFLLElBQUk7QUFDaEIsYUFBTyxLQUFLLElBQUk7QUFBQSxJQUNwQixXQUFXLE1BQU0sU0FBUztBQUN0QixhQUFPLEtBQUssTUFBTSxFQUFFLFFBQVE7QUFDNUIsYUFBTyxLQUFLLE1BQU0sRUFBRSxRQUFRO0FBQUEsSUFDaEM7QUFFQSxRQUFJLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTTtBQUNsQyxRQUFJLEVBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxPQUFPLE1BQU0sU0FBUztBQUN6QyxPQUFDLE1BQU0sTUFBTSxJQUFJLElBQUk7QUFDckIsT0FBQyxNQUFNLE1BQU0sSUFBSSxJQUFJO0FBQUEsSUFDekI7QUFFQSxRQUFJLEtBQUssS0FBSyxLQUFLO0FBRW5CLFFBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHO0FBRTlCLFVBQUksT0FBTyxRQUFRLE9BQU8sT0FBTyxLQUFLO0FBQ2xDLGFBQUssUUFBUSxPQUFPO0FBQUEsTUFDeEIsV0FBVyxPQUFPLFFBQVEsT0FBTyxPQUFPLEtBQUs7QUFDekMsYUFBSyxPQUFPLE1BQU07QUFBQSxNQUN0QixPQUFPO0FBQ0gsYUFBSyxPQUFPO0FBQUEsTUFDaEI7QUFDQSxZQUFNLE9BQU8sSUFBSTtBQUFBLElBQ3JCLFdBQVcsQ0FBQyxNQUFNLElBQUksR0FBRztBQUNyQixZQUFNO0FBQ04sV0FBSyxRQUFRLEtBQUssUUFBUSxNQUFNLEtBQUs7QUFBTyxjQUFNO0FBQUEsSUFDdEQsV0FBVyxDQUFDLE1BQU0sSUFBSSxHQUFHO0FBQ3JCLFlBQU07QUFDTixXQUFLLFFBQVEsS0FBSyxRQUFRLE1BQU0sS0FBSztBQUFPLGNBQU07QUFBQSxJQUN0RCxPQUFPO0FBQ0gsWUFBTSxPQUFPO0FBQUEsSUFDakI7QUFFQSxRQUFJLFFBQVE7QUFBVyxZQUFNLE9BQU8sS0FBSyxPQUFPO0FBQ2hELFVBQU0sT0FBTyxLQUFLLE9BQU87QUFDekIsV0FBTyxNQUFNLFVBQ1AsSUFBSSxjQUFNLENBQUMsS0FBSyxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQzVCLElBQUksY0FBTSxDQUFDLEtBQUssS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUFBLEVBQ3RDOzs7QUN0REEsTUFBTSxNQUFNLENBQUMsTUFBTSxNQUFNLE1BQU07QUFDM0IsV0FBTyxZQUFnQixNQUFNLE1BQU0sR0FBRyxLQUFLO0FBQUEsRUFDL0M7QUFHQSx1QkFBTSxNQUFNO0FBQ1osdUJBQU0sTUFBTTs7O0FDTFosTUFBTSxNQUFNLENBQUMsTUFBTSxNQUFNLE1BQU07QUFDM0IsVUFBTSxLQUFLLEtBQUssSUFBSTtBQUNwQixVQUFNLEtBQUssS0FBSyxJQUFJO0FBQ3BCLFdBQU8sSUFBSSxjQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSztBQUFBLEVBQzlDO0FBR0EsdUJBQU0sTUFBTTs7O0FDUlosTUFBTSxNQUFNLENBQUMsTUFBTSxNQUFNLE1BQU07QUFDM0IsV0FBTyxZQUFnQixNQUFNLE1BQU0sR0FBRyxLQUFLO0FBQUEsRUFDL0M7QUFHQSx1QkFBTSxNQUFNOzs7QUNMWixNQUFNLE1BQU0sQ0FBQyxNQUFNLE1BQU0sTUFBTTtBQUMzQixXQUFPLFlBQWdCLE1BQU0sTUFBTSxHQUFHLEtBQUs7QUFBQSxFQUMvQztBQUdBLHVCQUFNLE1BQU07OztBQ0xaLE1BQU0sTUFBTSxDQUFDLE1BQU0sTUFBTSxNQUFNO0FBQzNCLFdBQU8sWUFBZ0IsTUFBTSxNQUFNLEdBQUcsS0FBSztBQUFBLEVBQy9DO0FBR0EsdUJBQU0sTUFBTTs7O0FDTFosTUFBTSxNQUFNLENBQUMsTUFBTSxNQUFNLE1BQU07QUFDM0IsV0FBTyxZQUFnQixNQUFNLE1BQU0sR0FBRyxLQUFLO0FBQUEsRUFDL0M7QUFHQSx1QkFBTSxNQUFNOzs7QUNMWixNQUFNLFFBQVEsQ0FBQyxNQUFNLE1BQU0sTUFBTTtBQUM3QixVQUFNLE9BQU8sS0FBSyxNQUFNO0FBQ3hCLFVBQU0sT0FBTyxLQUFLLE1BQU07QUFDeEIsV0FBTyxJQUFJO0FBQUEsTUFDUCxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUFBLE1BQy9CLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDO0FBQUEsTUFDL0IsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7QUFBQSxNQUMvQjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBR0EsdUJBQU0sUUFBUTs7O0FDWmQsTUFBTSxRQUFRLENBQUMsTUFBTSxNQUFNLE1BQU07QUFDN0IsV0FBTyxZQUFnQixNQUFNLE1BQU0sR0FBRyxPQUFPO0FBQUEsRUFDakQ7QUFHQSx1QkFBTSxRQUFROzs7QUNOZCxNQUFNLEVBQUUsS0FBQUMsTUFBSyxNQUFBQyxPQUFNLElBQUFDLEtBQUksS0FBQUMsTUFBSyxLQUFBQyxNQUFLLE9BQUFDLE9BQU0sSUFBSTtBQUUzQyxNQUFPLGtCQUFRLENBQUNDLFNBQVEsT0FBTyxRQUFRLFVBQVUsU0FBUztBQUN0RCxVQUFNLElBQUlBLFFBQU87QUFDakIsUUFBSSxDQUFDO0FBQVMsZ0JBQVUsTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQztBQUU1RCxVQUFNLElBQ0YsSUFDQSxRQUFRLE9BQU8sU0FBVSxHQUFHQyxJQUFHO0FBQzNCLGFBQU8sSUFBSUE7QUFBQSxJQUNmLENBQUM7QUFDTCxZQUFRLFFBQVEsQ0FBQyxHQUFHLE1BQU07QUFDdEIsY0FBUSxDQUFDLEtBQUs7QUFBQSxJQUNsQixDQUFDO0FBRUQsSUFBQUQsVUFBU0EsUUFBTyxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQU0sQ0FBQyxDQUFDO0FBQ3ZDLFFBQUksU0FBUyxRQUFRO0FBQ2pCLGFBQU8sY0FBY0EsU0FBUSxPQUFPO0FBQUEsSUFDeEM7QUFDQSxVQUFNLFFBQVFBLFFBQU8sTUFBTTtBQUMzQixVQUFNLE1BQU0sTUFBTSxJQUFJLElBQUk7QUFDMUIsVUFBTSxNQUFNLENBQUM7QUFDYixRQUFJLEtBQUs7QUFDVCxRQUFJLEtBQUs7QUFFVCxhQUFTLElBQUksR0FBRyxJQUFJLElBQUksUUFBUSxLQUFLO0FBQ2pDLFVBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ2xDLFVBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQztBQUN2QyxVQUFJLEtBQUssT0FBTyxDQUFDLE1BQU0sT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRztBQUMxQyxjQUFNLElBQUssSUFBSSxDQUFDLElBQUksTUFBT0o7QUFDM0IsY0FBTUMsS0FBSSxDQUFDLElBQUksUUFBUSxDQUFDO0FBQ3hCLGNBQU1DLEtBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQztBQUFBLE1BQzVCO0FBQUEsSUFDSjtBQUVBLFFBQUksUUFBUSxNQUFNLE1BQU0sSUFBSSxRQUFRLENBQUM7QUFDckMsSUFBQUUsUUFBTyxRQUFRLENBQUMsR0FBRyxPQUFPO0FBQ3RCLFlBQU0sT0FBTyxFQUFFLElBQUksSUFBSTtBQUN2QixlQUFTLEVBQUUsTUFBTSxJQUFJLFFBQVEsS0FBSyxDQUFDO0FBQ25DLGVBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxRQUFRLEtBQUs7QUFDakMsWUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsR0FBRztBQUNqQixjQUFJLENBQUMsS0FBSyxRQUFRLEtBQUssQ0FBQztBQUN4QixjQUFJLEtBQUssT0FBTyxDQUFDLE1BQU0sS0FBSztBQUN4QixrQkFBTSxJQUFLLEtBQUssQ0FBQyxJQUFJLE1BQU9KO0FBQzVCLGtCQUFNQyxLQUFJLENBQUMsSUFBSSxRQUFRLEtBQUssQ0FBQztBQUM3QixrQkFBTUMsS0FBSSxDQUFDLElBQUksUUFBUSxLQUFLLENBQUM7QUFBQSxVQUNqQyxPQUFPO0FBQ0gsZ0JBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLFFBQVEsS0FBSyxDQUFDO0FBQUEsVUFDdEM7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0osQ0FBQztBQUVELGFBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxRQUFRLEtBQUs7QUFDakMsVUFBSSxLQUFLLE9BQU8sQ0FBQyxNQUFNLEtBQUs7QUFDeEIsWUFBSSxJQUFLQyxPQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJSCxNQUFNO0FBQ2pELGVBQU8sSUFBSTtBQUFHLGVBQUs7QUFDbkIsZUFBTyxLQUFLO0FBQUssZUFBSztBQUN0QixZQUFJLENBQUMsSUFBSTtBQUFBLE1BQ2IsT0FBTztBQUNILFlBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztBQUFBLE1BQzNCO0FBQUEsSUFDSjtBQUNBLGFBQVM7QUFDVCxXQUFPLElBQUksY0FBTSxLQUFLLElBQUksRUFBRSxNQUFNLFFBQVEsVUFBVSxJQUFJLE9BQU8sSUFBSTtBQUFBLEVBQ3ZFO0FBRUEsTUFBTSxnQkFBZ0IsQ0FBQ0ksU0FBUSxZQUFZO0FBQ3ZDLFVBQU0sSUFBSUEsUUFBTztBQUNqQixVQUFNLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLGFBQVMsSUFBSSxHQUFHLElBQUlBLFFBQU8sUUFBUSxLQUFLO0FBQ3BDLFlBQU0sTUFBTUEsUUFBTyxDQUFDO0FBQ3BCLFlBQU0sSUFBSSxRQUFRLENBQUMsSUFBSTtBQUN2QixZQUFNRSxPQUFNLElBQUk7QUFDaEIsVUFBSSxDQUFDLEtBQUtSLEtBQUlRLEtBQUksQ0FBQyxHQUFHLENBQUMsSUFBSTtBQUMzQixVQUFJLENBQUMsS0FBS1IsS0FBSVEsS0FBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJO0FBQzNCLFVBQUksQ0FBQyxLQUFLUixLQUFJUSxLQUFJLENBQUMsR0FBRyxDQUFDLElBQUk7QUFDM0IsVUFBSSxDQUFDLEtBQUtBLEtBQUksQ0FBQyxJQUFJO0FBQUEsSUFDdkI7QUFDQSxRQUFJLENBQUMsSUFBSVAsTUFBSyxJQUFJLENBQUMsQ0FBQztBQUNwQixRQUFJLENBQUMsSUFBSUEsTUFBSyxJQUFJLENBQUMsQ0FBQztBQUNwQixRQUFJLENBQUMsSUFBSUEsTUFBSyxJQUFJLENBQUMsQ0FBQztBQUNwQixRQUFJLElBQUksQ0FBQyxJQUFJO0FBQVcsVUFBSSxDQUFDLElBQUk7QUFDakMsV0FBTyxJQUFJLGNBQU0saUJBQVMsR0FBRyxDQUFDO0FBQUEsRUFDbEM7OztBQ2pGQSxNQUFNLEVBQUUsS0FBQVEsS0FBSSxJQUFJO0FBRUQsV0FBUixjQUFrQkMsU0FBUTtBQUU3QixRQUFJLFFBQVE7QUFDWixRQUFJLFNBQVMsZUFBTyxNQUFNO0FBQzFCLFFBQUksVUFBVTtBQUVkLFFBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQztBQUNuQixRQUFJLE9BQU8sQ0FBQztBQUNaLFFBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQztBQUNwQixRQUFJLFdBQVc7QUFDZixRQUFJLFVBQVUsQ0FBQztBQUNmLFFBQUksT0FBTztBQUNYLFFBQUksT0FBTztBQUNYLFFBQUksT0FBTztBQUNYLFFBQUksb0JBQW9CO0FBQ3hCLFFBQUksY0FBYyxDQUFDO0FBQ25CLFFBQUksWUFBWTtBQUNoQixRQUFJLFNBQVM7QUFJYixVQUFNLFlBQVksU0FBVUEsU0FBUTtBQUNoQyxNQUFBQSxVQUFTQSxXQUFVLENBQUMsUUFBUSxNQUFNO0FBQ2xDLFVBQ0lBLFdBQ0EsYUFBS0EsT0FBTSxNQUFNLFlBQ2pCLGVBQU8sVUFDUCxlQUFPLE9BQU9BLFFBQU8sWUFBWSxDQUFDLEdBQ3BDO0FBQ0UsUUFBQUEsVUFBUyxlQUFPLE9BQU9BLFFBQU8sWUFBWSxDQUFDO0FBQUEsTUFDL0M7QUFDQSxVQUFJLGFBQUtBLE9BQU0sTUFBTSxTQUFTO0FBRTFCLFlBQUlBLFFBQU8sV0FBVyxHQUFHO0FBQ3JCLFVBQUFBLFVBQVMsQ0FBQ0EsUUFBTyxDQUFDLEdBQUdBLFFBQU8sQ0FBQyxDQUFDO0FBQUEsUUFDbEM7QUFFQSxRQUFBQSxVQUFTQSxRQUFPLE1BQU0sQ0FBQztBQUV2QixpQkFBUyxJQUFJLEdBQUcsSUFBSUEsUUFBTyxRQUFRLEtBQUs7QUFDcEMsVUFBQUEsUUFBTyxDQUFDLElBQUksZUFBT0EsUUFBTyxDQUFDLENBQUM7QUFBQSxRQUNoQztBQUVBLGFBQUssU0FBUztBQUNkLGlCQUFTLElBQUksR0FBRyxJQUFJQSxRQUFPLFFBQVEsS0FBSztBQUNwQyxlQUFLLEtBQUssS0FBS0EsUUFBTyxTQUFTLEVBQUU7QUFBQSxRQUNyQztBQUFBLE1BQ0o7QUFDQSxpQkFBVztBQUNYLGFBQVEsVUFBVUE7QUFBQSxJQUN0QjtBQUVBLFVBQU0sV0FBVyxTQUFVLE9BQU87QUFDOUIsVUFBSSxZQUFZLE1BQU07QUFDbEIsY0FBTSxJQUFJLFNBQVMsU0FBUztBQUM1QixZQUFJLElBQUk7QUFDUixlQUFPLElBQUksS0FBSyxTQUFTLFNBQVMsQ0FBQyxHQUFHO0FBQ2xDO0FBQUEsUUFDSjtBQUNBLGVBQU8sSUFBSTtBQUFBLE1BQ2Y7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUVBLFFBQUksZ0JBQWdCLENBQUMsTUFBTTtBQUMzQixRQUFJLGFBQWEsQ0FBQyxNQUFNO0FBY3hCLFVBQU0sV0FBVyxTQUFVLEtBQUssV0FBVztBQUN2QyxVQUFJLEtBQUs7QUFDVCxVQUFJLGFBQWEsTUFBTTtBQUNuQixvQkFBWTtBQUFBLE1BQ2hCO0FBQ0EsVUFBSSxNQUFNLEdBQUcsS0FBSyxRQUFRLE1BQU07QUFDNUIsZUFBTztBQUFBLE1BQ1g7QUFDQSxVQUFJLENBQUMsV0FBVztBQUNaLFlBQUksWUFBWSxTQUFTLFNBQVMsR0FBRztBQUVqQyxnQkFBTSxJQUFJLFNBQVMsR0FBRztBQUN0QixjQUFJLEtBQUssU0FBUyxTQUFTO0FBQUEsUUFDL0IsV0FBVyxTQUFTLE1BQU07QUFFdEIsZUFBSyxNQUFNLFNBQVMsT0FBTztBQUFBLFFBQy9CLE9BQU87QUFDSCxjQUFJO0FBQUEsUUFDUjtBQUFBLE1BQ0osT0FBTztBQUNILFlBQUk7QUFBQSxNQUNSO0FBR0EsVUFBSSxXQUFXLENBQUM7QUFFaEIsVUFBSSxDQUFDLFdBQVc7QUFDWixZQUFJLGNBQWMsQ0FBQztBQUFBLE1BQ3ZCO0FBRUEsVUFBSSxXQUFXLEdBQUc7QUFDZCxZQUFJRCxLQUFJLEdBQUcsTUFBTTtBQUFBLE1BQ3JCO0FBRUEsVUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDO0FBRW5ELFVBQUksY0FBTSxHQUFHLEdBQUcsQ0FBQztBQUVqQixZQUFNLElBQUksS0FBSyxNQUFNLElBQUksR0FBSztBQUU5QixVQUFJLGFBQWEsWUFBWSxDQUFDLEdBQUc7QUFDN0IsY0FBTSxZQUFZLENBQUM7QUFBQSxNQUN2QixPQUFPO0FBQ0gsWUFBSSxhQUFLLE9BQU8sTUFBTSxTQUFTO0FBRTNCLG1CQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ2xDLGtCQUFNLElBQUksS0FBSyxDQUFDO0FBQ2hCLGdCQUFJLEtBQUssR0FBRztBQUNSLG9CQUFNLFFBQVEsQ0FBQztBQUNmO0FBQUEsWUFDSjtBQUNBLGdCQUFJLEtBQUssS0FBSyxNQUFNLEtBQUssU0FBUyxHQUFHO0FBQ2pDLG9CQUFNLFFBQVEsQ0FBQztBQUNmO0FBQUEsWUFDSjtBQUNBLGdCQUFJLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDMUIsbUJBQUssSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLElBQUk7QUFDN0Isb0JBQU0sZUFBTztBQUFBLGdCQUNULFFBQVEsQ0FBQztBQUFBLGdCQUNULFFBQVEsSUFBSSxDQUFDO0FBQUEsZ0JBQ2I7QUFBQSxnQkFDQTtBQUFBLGNBQ0o7QUFDQTtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSixXQUFXLGFBQUssT0FBTyxNQUFNLFlBQVk7QUFDckMsZ0JBQU0sUUFBUSxDQUFDO0FBQUEsUUFDbkI7QUFDQSxZQUFJLFdBQVc7QUFDWCxzQkFBWSxDQUFDLElBQUk7QUFBQSxRQUNyQjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUVBLFFBQUksYUFBYSxNQUFPLGNBQWMsQ0FBQztBQUV2QyxjQUFVQyxPQUFNO0FBSWhCLFVBQU0sSUFBSSxTQUFVQyxJQUFHO0FBQ25CLFlBQU0sSUFBSSxlQUFPLFNBQVNBLEVBQUMsQ0FBQztBQUM1QixVQUFJLFFBQVEsRUFBRSxJQUFJLEdBQUc7QUFDakIsZUFBTyxFQUFFLElBQUksRUFBRTtBQUFBLE1BQ25CLE9BQU87QUFDSCxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFFQSxNQUFFLFVBQVUsU0FBVSxTQUFTO0FBQzNCLFVBQUksV0FBVyxNQUFNO0FBQ2pCLFlBQUksYUFBSyxPQUFPLE1BQU0sU0FBUztBQUMzQixxQkFBVztBQUNYLG9CQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxRQUFRLFNBQVMsQ0FBQyxDQUFDO0FBQUEsUUFDdEQsT0FBTztBQUNILGdCQUFNLElBQUksZUFBTyxRQUFRLE9BQU87QUFDaEMsY0FBSSxZQUFZLEdBQUc7QUFDZix1QkFBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUc7QUFBQSxVQUM1QixPQUFPO0FBQ0gsdUJBQVcsZUFBTyxPQUFPLEdBQUcsS0FBSyxPQUFPO0FBQUEsVUFDNUM7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUVBLE1BQUUsU0FBUyxTQUFVLFFBQVE7QUFDekIsVUFBSSxDQUFDLFVBQVUsUUFBUTtBQUNuQixlQUFPO0FBQUEsTUFDWDtBQUNBLGFBQU8sT0FBTyxDQUFDO0FBQ2YsYUFBTyxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQy9CLGFBQU8sQ0FBQztBQUNSLFlBQU0sSUFBSSxRQUFRO0FBQ2xCLFVBQUksT0FBTyxXQUFXLEtBQUssU0FBUyxNQUFNO0FBRXRDLGlCQUFTLEtBQUssTUFBTSxLQUFLLE1BQU0sR0FBRztBQUM5QixlQUFLLE1BQU0sSUFBSSxTQUFTLE9BQU8sS0FBSztBQUFBLFFBQ3hDO0FBQUEsTUFDSixPQUFPO0FBQ0gsaUJBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLO0FBQ3hCLGVBQUssS0FBSyxLQUFLLElBQUksRUFBRTtBQUFBLFFBQ3pCO0FBQ0EsWUFBSSxPQUFPLFNBQVMsR0FBRztBQUVuQixnQkFBTSxPQUFPLE9BQU8sSUFBSSxDQUFDLEdBQUcsTUFBTSxLQUFLLE9BQU8sU0FBUyxFQUFFO0FBQ3pELGdCQUFNLFVBQVUsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLFNBQVMsT0FBTyxLQUFLO0FBQzVELGNBQUksQ0FBQyxRQUFRLE1BQU0sQ0FBQyxLQUFLLE1BQU0sS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHO0FBQzdDLHlCQUFhLENBQUMsTUFBTTtBQUNoQixrQkFBSSxLQUFLLEtBQUssS0FBSztBQUFHLHVCQUFPO0FBQzdCLGtCQUFJLElBQUk7QUFDUixxQkFBTyxLQUFLLFFBQVEsSUFBSSxDQUFDO0FBQUc7QUFDNUIsb0JBQU1DLE1BQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxRQUFRLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQztBQUNsRCxvQkFBTSxNQUFNLEtBQUssQ0FBQyxJQUFJQSxNQUFLLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO0FBQy9DLHFCQUFPO0FBQUEsWUFDWDtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLGdCQUFVLENBQUMsTUFBTSxJQUFJO0FBQ3JCLGFBQU87QUFBQSxJQUNYO0FBRUEsTUFBRSxPQUFPLFNBQVUsSUFBSTtBQUNuQixVQUFJLENBQUMsVUFBVSxRQUFRO0FBQ25CLGVBQU87QUFBQSxNQUNYO0FBQ0EsY0FBUTtBQUNSLGlCQUFXO0FBQ1gsYUFBTztBQUFBLElBQ1g7QUFFQSxNQUFFLFFBQVEsU0FBVUYsU0FBUUcsT0FBTTtBQUM5QixnQkFBVUgsU0FBUUcsS0FBSTtBQUN0QixhQUFPO0FBQUEsSUFDWDtBQUVBLE1BQUUsTUFBTSxTQUFVLElBQUk7QUFDbEIsYUFBTztBQUNQLGFBQU87QUFBQSxJQUNYO0FBRUEsTUFBRSxTQUFTLFNBQVUsS0FBSztBQUN0QixVQUFJLENBQUMsVUFBVSxRQUFRO0FBQ25CLGVBQU87QUFBQSxNQUNYO0FBQ0EsZ0JBQVU7QUFDVixhQUFPO0FBQUEsSUFDWDtBQUVBLE1BQUUsbUJBQW1CLFNBQVVGLElBQUc7QUFDOUIsVUFBSUEsTUFBSyxNQUFNO0FBQ1gsUUFBQUEsS0FBSTtBQUFBLE1BQ1I7QUFDQSwwQkFBb0JBO0FBQ3BCLGlCQUFXO0FBQ1gsVUFBSSxtQkFBbUI7QUFDbkIsd0JBQWdCLFNBQVUsR0FBRztBQUN6QixnQkFBTSxLQUFLLFNBQVMsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDcEMsZ0JBQU0sS0FBSyxTQUFTLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDLGdCQUFNLE1BQU0sS0FBSztBQUNqQixjQUFJLFdBQVcsU0FBUyxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN4QyxnQkFBTSxVQUFVLE1BQU0sS0FBSyxNQUFNO0FBQ2pDLGNBQUksU0FBUyxXQUFXO0FBQ3hCLGNBQUksS0FBSztBQUNULGNBQUksS0FBSztBQUNULGNBQUksV0FBVztBQUNmLGlCQUFPLEtBQUssSUFBSSxNQUFNLElBQUksUUFBUSxhQUFhLEdBQUc7QUFDOUMsYUFBQyxXQUFZO0FBQ1Qsa0JBQUksS0FBSztBQUNMLDBCQUFVO0FBQUEsY0FDZDtBQUNBLGtCQUFJLFNBQVMsR0FBRztBQUNaLHFCQUFLO0FBQ0wsc0JBQU0sS0FBSyxLQUFLO0FBQUEsY0FDcEIsT0FBTztBQUNILHFCQUFLO0FBQ0wsc0JBQU0sS0FBSyxLQUFLO0FBQUEsY0FDcEI7QUFDQSx5QkFBVyxTQUFTLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3BDLHFCQUFRLFNBQVMsV0FBVztBQUFBLFlBQ2hDLEdBQUc7QUFBQSxVQUNQO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSixPQUFPO0FBQ0gsd0JBQWdCLENBQUMsTUFBTTtBQUFBLE1BQzNCO0FBQ0EsYUFBTztBQUFBLElBQ1g7QUFFQSxNQUFFLFVBQVUsU0FBVSxHQUFHO0FBQ3JCLFVBQUksS0FBSyxNQUFNO0FBQ1gsWUFBSSxhQUFLLENBQUMsTUFBTSxVQUFVO0FBQ3RCLGNBQUksQ0FBQyxHQUFHLENBQUM7QUFBQSxRQUNiO0FBQ0EsbUJBQVc7QUFDWCxlQUFPO0FBQUEsTUFDWCxPQUFPO0FBQ0gsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBRUEsTUFBRSxTQUFTLFNBQVUsV0FBVyxLQUFLO0FBRWpDLFVBQUksVUFBVSxTQUFTLEdBQUc7QUFDdEIsY0FBTTtBQUFBLE1BQ1Y7QUFDQSxVQUFJLFNBQVMsQ0FBQztBQUVkLFVBQUksVUFBVSxXQUFXLEdBQUc7QUFDeEIsaUJBQVMsUUFBUSxNQUFNLENBQUM7QUFBQSxNQUM1QixXQUFXLGNBQWMsR0FBRztBQUN4QixpQkFBUyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQUEsTUFDcEIsV0FBVyxZQUFZLEdBQUc7QUFDdEIsY0FBTSxLQUFLLFFBQVEsQ0FBQztBQUNwQixjQUFNLEtBQUssUUFBUSxDQUFDLElBQUk7QUFDeEIsaUJBQVMsVUFBVSxHQUFHLFdBQVcsS0FBSyxFQUFFO0FBQUEsVUFBSSxDQUFDLE1BQ3pDLEVBQUUsS0FBTSxLQUFLLFlBQVksS0FBTSxFQUFFO0FBQUEsUUFDckM7QUFBQSxNQUNKLE9BQU87QUFFSCxRQUFBRCxVQUFTLENBQUM7QUFDVixZQUFJLFVBQVUsQ0FBQztBQUNmLFlBQUksWUFBWSxTQUFTLFNBQVMsR0FBRztBQUNqQyxtQkFDUSxJQUFJLEdBQUcsTUFBTSxTQUFTLFFBQVEsTUFBTSxLQUFLLEtBQzdDLE1BQU0sSUFBSSxNQUFNLElBQUksS0FDcEIsTUFBTSxNQUFNLEtBQ2Q7QUFDRSxvQkFBUSxNQUFNLFNBQVMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssR0FBRztBQUFBLFVBQ3REO0FBQUEsUUFDSixPQUFPO0FBQ0gsb0JBQVU7QUFBQSxRQUNkO0FBQ0EsaUJBQVMsUUFBUSxJQUFJLENBQUNDLE9BQU0sRUFBRUEsRUFBQyxDQUFDO0FBQUEsTUFDcEM7QUFFQSxVQUFJLGVBQU8sR0FBRyxHQUFHO0FBQ2IsaUJBQVMsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQUEsTUFDdkM7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUVBLE1BQUUsUUFBUSxTQUFVLEdBQUc7QUFDbkIsVUFBSSxLQUFLLE1BQU07QUFDWCxvQkFBWTtBQUNaLGVBQU87QUFBQSxNQUNYLE9BQU87QUFDSCxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFFQSxNQUFFLFFBQVEsU0FBVSxHQUFHO0FBQ25CLFVBQUksS0FBSyxNQUFNO0FBQ1gsaUJBQVM7QUFDVCxlQUFPO0FBQUEsTUFDWCxPQUFPO0FBQ0gsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBRUEsTUFBRSxTQUFTLFNBQVUsR0FBRztBQUNwQixVQUFJLEtBQUssTUFBTTtBQUNYLGlCQUFTLGVBQU8sQ0FBQztBQUNqQixlQUFPO0FBQUEsTUFDWCxPQUFPO0FBQ0gsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBRUEsV0FBTztBQUFBLEVBQ1g7QUFFQSxXQUFTLFVBQVUsTUFBTSxPQUFPLFdBQVc7QUFDdkMsUUFBSSxRQUFRLENBQUM7QUFDYixRQUFJLFlBQVksT0FBTztBQUN2QixRQUFJLE1BQU0sQ0FBQyxZQUFZLFFBQVEsWUFBWSxRQUFRLElBQUksUUFBUTtBQUMvRCxhQUFTLElBQUksTUFBTSxZQUFZLElBQUksTUFBTSxJQUFJLEtBQUssWUFBWSxNQUFNLEtBQUs7QUFDckUsWUFBTSxLQUFLLENBQUM7QUFBQSxJQUNoQjtBQUNBLFdBQU87QUFBQSxFQUNYOzs7QUMvWEEsTUFBTSxZQUFZLFNBQVUsR0FBRztBQUMzQixRQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDZixhQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztBQUN4QixVQUFJLFNBQVMsQ0FBQyxDQUFDO0FBQ2YsZUFBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLFFBQVEsS0FBSztBQUNsQyxlQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQUEsTUFDekM7QUFDQSxZQUFNO0FBQUEsSUFDVjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBRUEsTUFBTSxTQUFTLFNBQVVHLFNBQVE7QUFDN0IsUUFBSSxHQUFHLE1BQU0sTUFBTTtBQUNuQixJQUFBQSxVQUFTQSxRQUFPLElBQUksQ0FBQyxNQUFNLElBQUksY0FBTSxDQUFDLENBQUM7QUFDdkMsUUFBSUEsUUFBTyxXQUFXLEdBQUc7QUFFckIsT0FBQyxNQUFNLElBQUksSUFBSUEsUUFBTyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztBQUN4QyxVQUFJLFNBQVUsR0FBRztBQUNiLGNBQU1DLE9BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDbEUsZUFBTyxJQUFJLGNBQU1BLE1BQUssS0FBSztBQUFBLE1BQy9CO0FBQUEsSUFDSixXQUFXRCxRQUFPLFdBQVcsR0FBRztBQUU1QixPQUFDLE1BQU0sTUFBTSxJQUFJLElBQUlBLFFBQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDOUMsVUFBSSxTQUFVLEdBQUc7QUFDYixjQUFNQyxPQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTtBQUFBLFVBQ2xCLENBQUMsT0FDSSxJQUFJLE1BQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUMxQixLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUN4QixJQUFJLElBQUksS0FBSyxDQUFDO0FBQUEsUUFDdEI7QUFDQSxlQUFPLElBQUksY0FBTUEsTUFBSyxLQUFLO0FBQUEsTUFDL0I7QUFBQSxJQUNKLFdBQVdELFFBQU8sV0FBVyxHQUFHO0FBRTVCLFVBQUk7QUFDSixPQUFDLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSUEsUUFBTyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztBQUNwRCxVQUFJLFNBQVUsR0FBRztBQUNiLGNBQU1DLE9BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFO0FBQUEsVUFDbEIsQ0FBQyxPQUNJLElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUNwQyxLQUFLLElBQUksTUFBTSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsSUFDbEMsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUM1QixJQUFJLElBQUksSUFBSSxLQUFLLENBQUM7QUFBQSxRQUMxQjtBQUNBLGVBQU8sSUFBSSxjQUFNQSxNQUFLLEtBQUs7QUFBQSxNQUMvQjtBQUFBLElBQ0osV0FBV0QsUUFBTyxVQUFVLEdBQUc7QUFFM0IsVUFBSSxNQUFNLEtBQUs7QUFDZixhQUFPQSxRQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0FBQ2hDLFVBQUlBLFFBQU8sU0FBUztBQUNwQixZQUFNLFVBQVUsQ0FBQztBQUNqQixVQUFJLFNBQVUsR0FBRztBQUNiLGNBQU0sSUFBSSxJQUFJO0FBQ2QsY0FBTUMsT0FBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFBQSxVQUFJLENBQUMsTUFDdkIsS0FBSztBQUFBLFlBQ0QsQ0FBQyxLQUFLLElBQUksTUFDTixNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sSUFBSSxLQUFLLEtBQUssSUFBSSxHQUFHLENBQUM7QUFBQSxZQUMvQztBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQ0EsZUFBTyxJQUFJLGNBQU1BLE1BQUssS0FBSztBQUFBLE1BQy9CO0FBQUEsSUFDSixPQUFPO0FBQ0gsWUFBTSxJQUFJLFdBQVcsaURBQWlEO0FBQUEsSUFDMUU7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUVBLE1BQU8saUJBQVEsQ0FBQ0QsWUFBVztBQUN2QixVQUFNLElBQUksT0FBT0EsT0FBTTtBQUN2QixNQUFFLFFBQVEsTUFBTSxjQUFNLENBQUM7QUFDdkIsV0FBTztBQUFBLEVBQ1g7OztBQzdFQSxNQUFNLFFBQVEsQ0FBQyxRQUFRLEtBQUssU0FBUztBQUNqQyxRQUFJLENBQUMsTUFBTSxJQUFJLEdBQUc7QUFDZCxZQUFNLElBQUksTUFBTSx3QkFBd0IsSUFBSTtBQUFBLElBQ2hEO0FBQ0EsV0FBTyxNQUFNLElBQUksRUFBRSxRQUFRLEdBQUc7QUFBQSxFQUNsQztBQUVBLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLFFBQVE7QUFDcEMsVUFBTSxLQUFLLGVBQU8sR0FBRyxFQUFFLElBQUk7QUFDM0IsVUFBTSxLQUFLLGVBQU8sTUFBTSxFQUFFLElBQUk7QUFDOUIsV0FBTyxlQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUFBLEVBQy9CO0FBRUEsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTztBQUM1QixVQUFNLE1BQU0sQ0FBQztBQUNiLFFBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDdkIsUUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN2QixRQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFdBQU87QUFBQSxFQUNYO0FBRUEsTUFBTSxTQUFTLENBQUMsTUFBTTtBQUN0QixNQUFNLFdBQVcsQ0FBQyxHQUFHRSxPQUFPLElBQUlBLEtBQUs7QUFDckMsTUFBTSxTQUFTLENBQUMsR0FBR0EsT0FBTyxJQUFJQSxLQUFJQSxLQUFJO0FBQ3RDLE1BQU0sVUFBVSxDQUFDLEdBQUdBLE9BQU8sSUFBSUEsS0FBSSxJQUFJQTtBQUN2QyxNQUFNLFNBQVMsQ0FBQyxHQUFHQSxPQUFNLE9BQU8sS0FBSyxJQUFJLElBQUksUUFBUSxJQUFJQSxLQUFJO0FBQzdELE1BQU0sVUFBVSxDQUFDLEdBQUdBLE9BQ2hCQSxLQUFJLE1BQU8sSUFBSSxJQUFJQSxLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssSUFBSSxJQUFJLFFBQVEsSUFBSUEsS0FBSTtBQUMxRSxNQUFNLE9BQU8sQ0FBQyxHQUFHQSxPQUFNLE9BQU8sS0FBSyxJQUFJQSxLQUFJLFFBQVEsSUFBSTtBQUN2RCxNQUFNLFFBQVEsQ0FBQyxHQUFHQSxPQUFNO0FBQ3BCLFFBQUksTUFBTTtBQUFLLGFBQU87QUFDdEIsUUFBSyxPQUFPQSxLQUFJLFFBQVMsSUFBSSxJQUFJO0FBQ2pDLFdBQU8sSUFBSSxNQUFNLE1BQU07QUFBQSxFQUMzQjtBQUtBLFFBQU0sU0FBUyxRQUFRLEtBQUssTUFBTSxDQUFDO0FBQ25DLFFBQU0sV0FBVyxRQUFRLEtBQUssUUFBUSxDQUFDO0FBQ3ZDLFFBQU0sU0FBUyxRQUFRLEtBQUssTUFBTSxDQUFDO0FBQ25DLFFBQU0sVUFBVSxRQUFRLEtBQUssT0FBTyxDQUFDO0FBQ3JDLFFBQU0sU0FBUyxRQUFRLEtBQUssTUFBTSxDQUFDO0FBQ25DLFFBQU0sVUFBVSxRQUFRLEtBQUssT0FBTyxDQUFDO0FBQ3JDLFFBQU0sUUFBUSxRQUFRLEtBQUssS0FBSyxDQUFDO0FBQ2pDLFFBQU0sT0FBTyxRQUFRLEtBQUssSUFBSSxDQUFDO0FBRy9CLE1BQU8sZ0JBQVE7OztBQ25EZixNQUFNLEVBQUUsS0FBQUMsTUFBSyxLQUFBQyxNQUFLLEtBQUFDLEtBQUksSUFBSTtBQUVYLFdBQVIsa0JBQ0gsUUFBUSxLQUNSLFlBQVksTUFDWixNQUFNLEdBQ04sUUFBUSxHQUNSQyxhQUFZLENBQUMsR0FBRyxDQUFDLEdBQ25CO0FBQ0UsUUFBSSxLQUFLLEdBQ0w7QUFDSixRQUFJLGFBQUtBLFVBQVMsTUFBTSxTQUFTO0FBQzdCLFdBQUtBLFdBQVUsQ0FBQyxJQUFJQSxXQUFVLENBQUM7QUFBQSxJQUNuQyxPQUFPO0FBQ0gsV0FBSztBQUNMLE1BQUFBLGFBQVksQ0FBQ0EsWUFBV0EsVUFBUztBQUFBLElBQ3JDO0FBQ0EsVUFBTSxJQUFJLFNBQVUsT0FBTztBQUN2QixZQUFNLElBQUksVUFBVSxRQUFRLE9BQU8sTUFBTSxZQUFZO0FBQ3JELFlBQU0sSUFBSUgsS0FBSUcsV0FBVSxDQUFDLElBQUksS0FBSyxPQUFPLEtBQUs7QUFDOUMsWUFBTSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxRQUFRLEtBQUs7QUFDM0MsWUFBTSxNQUFPLElBQUksS0FBSyxJQUFJLEtBQU07QUFDaEMsWUFBTSxRQUFRRCxLQUFJLENBQUM7QUFDbkIsWUFBTSxRQUFRRCxLQUFJLENBQUM7QUFDbkIsWUFBTSxJQUFJLElBQUksT0FBTyxXQUFXLFFBQVEsVUFBVTtBQUNsRCxZQUFNLElBQUksSUFBSSxPQUFPLFdBQVcsUUFBUSxVQUFVO0FBQ2xELFlBQU1HLEtBQUksSUFBSSxPQUFPLFVBQVc7QUFDaEMsYUFBTyxlQUFPLGlCQUFTLENBQUMsSUFBSSxLQUFLLElBQUksS0FBS0EsS0FBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQUEsSUFDMUQ7QUFDQSxNQUFFLFFBQVEsU0FBVSxHQUFHO0FBQ25CLFVBQUksS0FBSyxNQUFNO0FBQ1gsZUFBTztBQUFBLE1BQ1g7QUFDQSxjQUFRO0FBQ1IsYUFBTztBQUFBLElBQ1g7QUFDQSxNQUFFLFlBQVksU0FBVSxHQUFHO0FBQ3ZCLFVBQUksS0FBSyxNQUFNO0FBQ1gsZUFBTztBQUFBLE1BQ1g7QUFDQSxrQkFBWTtBQUNaLGFBQU87QUFBQSxJQUNYO0FBQ0EsTUFBRSxRQUFRLFNBQVUsR0FBRztBQUNuQixVQUFJLEtBQUssTUFBTTtBQUNYLGVBQU87QUFBQSxNQUNYO0FBQ0EsY0FBUTtBQUNSLGFBQU87QUFBQSxJQUNYO0FBQ0EsTUFBRSxNQUFNLFNBQVUsR0FBRztBQUNqQixVQUFJLEtBQUssTUFBTTtBQUNYLGVBQU87QUFBQSxNQUNYO0FBQ0EsWUFBTTtBQUNOLFVBQUksYUFBSyxHQUFHLE1BQU0sU0FBUztBQUN2QixhQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztBQUNuQixZQUFJLE9BQU8sR0FBRztBQUNWLGdCQUFNLElBQUksQ0FBQztBQUFBLFFBQ2Y7QUFBQSxNQUNKLE9BQU87QUFDSCxhQUFLO0FBQUEsTUFDVDtBQUNBLGFBQU87QUFBQSxJQUNYO0FBQ0EsTUFBRSxZQUFZLFNBQVUsR0FBRztBQUN2QixVQUFJLEtBQUssTUFBTTtBQUNYLGVBQU9EO0FBQUEsTUFDWDtBQUNBLFVBQUksYUFBSyxDQUFDLE1BQU0sU0FBUztBQUNyQixRQUFBQSxhQUFZO0FBQ1osYUFBSyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFBQSxNQUNuQixPQUFPO0FBQ0gsUUFBQUEsYUFBWSxDQUFDLEdBQUcsQ0FBQztBQUNqQixhQUFLO0FBQUEsTUFDVDtBQUNBLGFBQU87QUFBQSxJQUNYO0FBQ0EsTUFBRSxRQUFRLE1BQU0sZUFBTyxNQUFNLENBQUM7QUFDOUIsTUFBRSxJQUFJLEdBQUc7QUFDVCxXQUFPO0FBQUEsRUFDWDs7O0FDckZBLE1BQU0sU0FBUztBQUVmLE1BQU0sRUFBRSxPQUFBRSxRQUFPLE9BQU8sSUFBSTtBQUUxQixNQUFPLGlCQUFRLE1BQU07QUFDakIsUUFBSSxPQUFPO0FBQ1gsYUFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDeEIsY0FBUSxPQUFPLE9BQU9BLE9BQU0sT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUFBLElBQzlDO0FBQ0EsV0FBTyxJQUFJLGNBQU0sTUFBTSxLQUFLO0FBQUEsRUFDaEM7OztBQ1RBLE1BQU0sRUFBRSxLQUFBQyxNQUFLLEtBQUFDLE9BQUssT0FBQUMsUUFBTyxLQUFBQyxLQUFJLElBQUk7QUFFMUIsV0FBUyxRQUFRLE1BQU0sTUFBTSxNQUFNO0FBQ3RDLFVBQU0sSUFBSTtBQUFBLE1BQ04sS0FBSyxPQUFPO0FBQUEsTUFDWixLQUFLLE9BQU8sWUFBWTtBQUFBLE1BQ3hCLEtBQUs7QUFBQSxNQUNMLFFBQVEsQ0FBQztBQUFBLE1BQ1QsT0FBTztBQUFBLElBQ1g7QUFDQSxRQUFJLGFBQUssSUFBSSxNQUFNLFVBQVU7QUFDekIsYUFBTyxPQUFPLE9BQU8sSUFBSTtBQUFBLElBQzdCO0FBQ0EsU0FBSyxRQUFRLENBQUMsUUFBUTtBQUNsQixVQUFJLE9BQU8sYUFBSyxHQUFHLE1BQU07QUFBVSxjQUFNLElBQUksR0FBRztBQUNoRCxVQUFJLFFBQVEsVUFBYSxRQUFRLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRztBQUNsRCxVQUFFLE9BQU8sS0FBSyxHQUFHO0FBQ2pCLFVBQUUsT0FBTztBQUNULFlBQUksTUFBTSxFQUFFO0FBQUssWUFBRSxNQUFNO0FBQ3pCLFlBQUksTUFBTSxFQUFFO0FBQUssWUFBRSxNQUFNO0FBQ3pCLFVBQUUsU0FBUztBQUFBLE1BQ2Y7QUFBQSxJQUNKLENBQUM7QUFFRCxNQUFFLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHO0FBRXhCLE1BQUUsU0FBUyxDQUFDLE1BQU1DLFNBQVEsT0FBTyxHQUFHLE1BQU1BLElBQUc7QUFFN0MsV0FBTztBQUFBLEVBQ1g7QUFFTyxXQUFTLE9BQU8sTUFBTSxPQUFPLFNBQVNBLE9BQU0sR0FBRztBQUNsRCxRQUFJLGFBQUssSUFBSSxLQUFLLFNBQVM7QUFDdkIsYUFBTyxRQUFRLElBQUk7QUFBQSxJQUN2QjtBQUNBLFVBQU0sRUFBRSxLQUFBQyxNQUFLLEtBQUFDLEtBQUksSUFBSTtBQUNyQixVQUFNLFNBQVMsS0FBSyxPQUFPLEtBQUssQ0FBQyxHQUFHQyxPQUFNLElBQUlBLEVBQUM7QUFFL0MsUUFBSUgsU0FBUSxHQUFHO0FBQ1gsYUFBTyxDQUFDQyxNQUFLQyxJQUFHO0FBQUEsSUFDcEI7QUFFQSxVQUFNRSxVQUFTLENBQUM7QUFFaEIsUUFBSSxLQUFLLE9BQU8sR0FBRyxDQUFDLE1BQU0sS0FBSztBQUUzQixNQUFBQSxRQUFPLEtBQUtILElBQUc7QUFDZixNQUFBRyxRQUFPLEtBQUtGLElBQUc7QUFBQSxJQUNuQjtBQUVBLFFBQUksS0FBSyxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUs7QUFFM0IsTUFBQUUsUUFBTyxLQUFLSCxJQUFHO0FBQ2YsZUFBUyxJQUFJLEdBQUcsSUFBSUQsTUFBSyxLQUFLO0FBQzFCLFFBQUFJLFFBQU8sS0FBS0gsT0FBTyxJQUFJRCxRQUFRRSxPQUFNRCxLQUFJO0FBQUEsTUFDN0M7QUFDQSxNQUFBRyxRQUFPLEtBQUtGLElBQUc7QUFBQSxJQUNuQixXQUFXLEtBQUssT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLO0FBRWxDLFVBQUlELFFBQU8sR0FBRztBQUNWLGNBQU0sSUFBSTtBQUFBLFVBQ047QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLFlBQU0sVUFBVSxLQUFLLFNBQVNMLEtBQUlLLElBQUc7QUFDckMsWUFBTSxVQUFVLEtBQUssU0FBU0wsS0FBSU0sSUFBRztBQUNyQyxNQUFBRSxRQUFPLEtBQUtILElBQUc7QUFDZixlQUFTLElBQUksR0FBRyxJQUFJRCxNQUFLLEtBQUs7QUFDMUIsUUFBQUksUUFBTyxLQUFLUCxNQUFJLElBQUksVUFBVyxJQUFJRyxRQUFRLFVBQVUsUUFBUSxDQUFDO0FBQUEsTUFDbEU7QUFDQSxNQUFBSSxRQUFPLEtBQUtGLElBQUc7QUFBQSxJQUNuQixXQUFXLEtBQUssT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLO0FBRWxDLE1BQUFFLFFBQU8sS0FBS0gsSUFBRztBQUNmLGVBQVMsSUFBSSxHQUFHLElBQUlELE1BQUssS0FBSztBQUMxQixjQUFNLEtBQU0sT0FBTyxTQUFTLEtBQUssSUFBS0E7QUFDdEMsY0FBTSxLQUFLRixPQUFNLENBQUM7QUFDbEIsWUFBSSxPQUFPLEdBQUc7QUFDVixVQUFBTSxRQUFPLEtBQUssT0FBTyxFQUFFLENBQUM7QUFBQSxRQUMxQixPQUFPO0FBRUgsZ0JBQU0sS0FBSyxJQUFJO0FBQ2YsVUFBQUEsUUFBTyxLQUFLLE9BQU8sRUFBRSxLQUFLLElBQUksTUFBTSxPQUFPLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFBQSxRQUMzRDtBQUFBLE1BQ0o7QUFDQSxNQUFBQSxRQUFPLEtBQUtGLElBQUc7QUFBQSxJQUNuQixXQUFXLEtBQUssT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLO0FBT2xDLFVBQUk7QUFDSixZQUFNLElBQUksT0FBTztBQUNqQixZQUFNLGNBQWMsSUFBSSxNQUFNLENBQUM7QUFDL0IsWUFBTSxlQUFlLElBQUksTUFBTUYsSUFBRztBQUNsQyxVQUFJLFNBQVM7QUFDYixVQUFJLFdBQVc7QUFDZixVQUFJLFlBQVk7QUFHaEIsa0JBQVksQ0FBQztBQUNiLGdCQUFVLEtBQUtDLElBQUc7QUFDbEIsZUFBUyxJQUFJLEdBQUcsSUFBSUQsTUFBSyxLQUFLO0FBQzFCLGtCQUFVLEtBQUtDLE9BQU8sSUFBSUQsUUFBUUUsT0FBTUQsS0FBSTtBQUFBLE1BQ2hEO0FBQ0EsZ0JBQVUsS0FBS0MsSUFBRztBQUVsQixhQUFPLFFBQVE7QUFFWCxpQkFBUyxJQUFJLEdBQUcsSUFBSUYsTUFBSyxLQUFLO0FBQzFCLHVCQUFhLENBQUMsSUFBSTtBQUFBLFFBQ3RCO0FBQ0EsaUJBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLO0FBQ3hCLGdCQUFNLFFBQVEsT0FBTyxDQUFDO0FBQ3RCLGNBQUksVUFBVSxPQUFPO0FBQ3JCLGNBQUk7QUFDSixtQkFBUyxJQUFJLEdBQUcsSUFBSUEsTUFBSyxLQUFLO0FBQzFCLGtCQUFNLE9BQU9ELEtBQUksVUFBVSxDQUFDLElBQUksS0FBSztBQUNyQyxnQkFBSSxPQUFPLFNBQVM7QUFDaEIsd0JBQVU7QUFDVixxQkFBTztBQUFBLFlBQ1g7QUFDQSx5QkFBYSxJQUFJO0FBQ2pCLHdCQUFZLENBQUMsSUFBSTtBQUFBLFVBQ3JCO0FBQUEsUUFDSjtBQUdBLGNBQU0sZUFBZSxJQUFJLE1BQU1DLElBQUc7QUFDbEMsaUJBQVMsSUFBSSxHQUFHLElBQUlBLE1BQUssS0FBSztBQUMxQix1QkFBYSxDQUFDLElBQUk7QUFBQSxRQUN0QjtBQUNBLGlCQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztBQUN4QixvQkFBVSxZQUFZLENBQUM7QUFDdkIsY0FBSSxhQUFhLE9BQU8sTUFBTSxNQUFNO0FBQ2hDLHlCQUFhLE9BQU8sSUFBSSxPQUFPLENBQUM7QUFBQSxVQUNwQyxPQUFPO0FBQ0gseUJBQWEsT0FBTyxLQUFLLE9BQU8sQ0FBQztBQUFBLFVBQ3JDO0FBQUEsUUFDSjtBQUNBLGlCQUFTLElBQUksR0FBRyxJQUFJQSxNQUFLLEtBQUs7QUFDMUIsdUJBQWEsQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDO0FBQUEsUUFDekM7QUFHQSxpQkFBUztBQUNULGlCQUFTLElBQUksR0FBRyxJQUFJQSxNQUFLLEtBQUs7QUFDMUIsY0FBSSxhQUFhLENBQUMsTUFBTSxVQUFVLENBQUMsR0FBRztBQUNsQyxxQkFBUztBQUNUO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFFQSxvQkFBWTtBQUNaO0FBRUEsWUFBSSxXQUFXLEtBQUs7QUFDaEIsbUJBQVM7QUFBQSxRQUNiO0FBQUEsTUFDSjtBQUlBLFlBQU0sWUFBWSxDQUFDO0FBQ25CLGVBQVMsSUFBSSxHQUFHLElBQUlBLE1BQUssS0FBSztBQUMxQixrQkFBVSxDQUFDLElBQUksQ0FBQztBQUFBLE1BQ3BCO0FBQ0EsZUFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDeEIsa0JBQVUsWUFBWSxDQUFDO0FBQ3ZCLGtCQUFVLE9BQU8sRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDO0FBQUEsTUFDckM7QUFDQSxVQUFJLGtCQUFrQixDQUFDO0FBQ3ZCLGVBQVMsSUFBSSxHQUFHLElBQUlBLE1BQUssS0FBSztBQUMxQix3QkFBZ0IsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsd0JBQWdCLEtBQUssVUFBVSxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFBQSxNQUM5RDtBQUNBLHdCQUFrQixnQkFBZ0IsS0FBSyxDQUFDLEdBQUdHLE9BQU0sSUFBSUEsRUFBQztBQUN0RCxNQUFBQyxRQUFPLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztBQUM5QixlQUFTLElBQUksR0FBRyxJQUFJLGdCQUFnQixRQUFRLEtBQUssR0FBRztBQUNoRCxjQUFNQyxLQUFJLGdCQUFnQixDQUFDO0FBQzNCLFlBQUksQ0FBQyxNQUFNQSxFQUFDLEtBQUtELFFBQU8sUUFBUUMsRUFBQyxNQUFNLElBQUk7QUFDdkMsVUFBQUQsUUFBTyxLQUFLQyxFQUFDO0FBQUEsUUFDakI7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUNBLFdBQU9EO0FBQUEsRUFDWDs7O0FDM0xBLE1BQU8sbUJBQVEsQ0FBQyxHQUFHRSxPQUFNO0FBR3JCLFFBQUksSUFBSSxjQUFNLENBQUM7QUFDZixJQUFBQSxLQUFJLElBQUksY0FBTUEsRUFBQztBQUNmLFVBQU0sS0FBSyxFQUFFLFVBQVU7QUFDdkIsVUFBTSxLQUFLQSxHQUFFLFVBQVU7QUFDdkIsV0FBTyxLQUFLLE1BQU0sS0FBSyxTQUFTLEtBQUssU0FBUyxLQUFLLFNBQVMsS0FBSztBQUFBLEVBQ3JFOzs7QUNWQSxNQUFNLEVBQUUsTUFBQUMsT0FBTSxLQUFBQyxPQUFLLEtBQUFDLE1BQUssS0FBQUMsTUFBSyxPQUFBQyxRQUFPLEtBQUFDLE1BQUssS0FBQUMsTUFBSyxLQUFBQyxNQUFLLEtBQUssSUFBQUMsSUFBRyxJQUFJO0FBRWhELFdBQVIsZ0JBQWtCLEdBQUdDLElBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUc7QUFHbkQsUUFBSSxVQUFVLFNBQVUsS0FBSztBQUN6QixhQUFRLE1BQU0sT0FBUSxJQUFJRDtBQUFBLElBQzlCO0FBQ0EsUUFBSSxVQUFVLFNBQVUsS0FBSztBQUN6QixhQUFRLElBQUlBLE1BQUssTUFBTztBQUFBLElBQzVCO0FBQ0EsUUFBSSxJQUFJLGNBQU0sQ0FBQztBQUNmLElBQUFDLEtBQUksSUFBSSxjQUFNQSxFQUFDO0FBQ2YsVUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDO0FBQ3ZDLFVBQU0sQ0FBQyxJQUFJLElBQUlDLEdBQUUsSUFBSSxNQUFNLEtBQUtELEdBQUUsSUFBSSxDQUFDO0FBQ3ZDLFVBQU0sUUFBUSxLQUFLLE1BQU07QUFDekIsVUFBTSxLQUFLVCxNQUFLQyxNQUFJLElBQUksQ0FBQyxJQUFJQSxNQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLFVBQU0sS0FBS0QsTUFBS0MsTUFBSSxJQUFJLENBQUMsSUFBSUEsTUFBSVMsS0FBSSxDQUFDLENBQUM7QUFDdkMsVUFBTSxRQUFRLEtBQUssTUFBTTtBQUN6QixVQUFNLElBQUksT0FBTyxJQUFJVixNQUFLQyxNQUFJLE1BQU0sQ0FBQyxLQUFLQSxNQUFJLE1BQU0sQ0FBQyxJQUFJQSxNQUFJLElBQUksQ0FBQyxFQUFFO0FBQ3BFLFVBQU0sTUFBTSxNQUFNLElBQUk7QUFDdEIsVUFBTSxNQUFNLE1BQU0sSUFBSTtBQUN0QixVQUFNLE1BQU1ELE1BQUtDLE1BQUksS0FBSyxDQUFDLElBQUlBLE1BQUksSUFBSSxDQUFDLENBQUM7QUFDekMsVUFBTSxNQUFNRCxNQUFLQyxNQUFJLEtBQUssQ0FBQyxJQUFJQSxNQUFJUyxLQUFJLENBQUMsQ0FBQztBQUN6QyxVQUFNLFNBQVMsTUFBTSxPQUFPO0FBQzVCLFVBQU0sVUFBVSxRQUFRTixPQUFNLElBQUksR0FBRyxDQUFDO0FBQ3RDLFVBQU0sVUFBVSxRQUFRQSxPQUFNTSxLQUFJLEdBQUcsQ0FBQztBQUN0QyxVQUFNLE1BQU0sV0FBVyxJQUFJLFVBQVUsVUFBVTtBQUMvQyxVQUFNLE1BQU0sV0FBVyxJQUFJLFVBQVUsVUFBVTtBQUMvQyxVQUFNLFFBQ0ZMLEtBQUksTUFBTSxHQUFHLElBQUksT0FBTyxNQUFNLE1BQU0sT0FBTyxLQUFLLE1BQU0sT0FBTztBQUNqRSxVQUFNLElBQ0YsSUFDQSxPQUFPQyxLQUFJLFFBQVEsUUFBUSxFQUFFLENBQUMsSUFDOUIsT0FBT0EsS0FBSSxRQUFRLElBQUksS0FBSyxDQUFDLElBQzdCLE9BQU9BLEtBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFDLElBQ2pDLE1BQU1BLEtBQUksUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ3JDLFFBQUksVUFBVSxNQUFNO0FBQ3BCLGNBQ0lELEtBQUksT0FBTyxLQUFLLE1BQ1YsVUFDQSxPQUFPLE1BQ0wsVUFBVSxNQUNWLFVBQVU7QUFDdEIsY0FBVSxJQUFJTCxNQUFLLE1BQU0sR0FBRyxJQUFJTyxLQUFJLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDeEQsVUFBTSxTQUFTLEtBQUs7QUFDcEIsVUFBTSxVQUFVLE1BQU07QUFDdEIsVUFBTSxLQUFLLElBQUssUUFBUU4sTUFBSSxPQUFPLElBQUksQ0FBQyxJQUFLRCxNQUFLLEtBQUtDLE1BQUksT0FBTyxJQUFJLENBQUMsQ0FBQztBQUN4RSxVQUFNLEtBQUssSUFBSSxRQUFRO0FBQ3ZCLFVBQU0sS0FBSyxJQUFJLFFBQVEsUUFBUTtBQUMvQixVQUFNLGFBQWEsS0FBSyxJQUFJLENBQUNBLE9BQUssUUFBUSxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3ZELFVBQU0sS0FBSyxJQUFJRCxNQUFLQyxNQUFJLE9BQU8sQ0FBQyxLQUFLQSxNQUFJLE9BQU8sQ0FBQyxJQUFJQSxNQUFJLElBQUksQ0FBQyxFQUFFO0FBQ2hFLFVBQU0sS0FBSyxDQUFDLEtBQUtNLEtBQUksSUFBSSxRQUFRLFVBQVUsQ0FBQztBQUM1QyxVQUFNLFNBQVNQO0FBQUEsTUFDWEMsTUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLElBQ3JCQSxNQUFJLFdBQVcsS0FBSyxLQUFLLENBQUMsSUFDMUJBLE1BQUksV0FBVyxLQUFLLEtBQUssQ0FBQyxJQUMxQixNQUFNLFdBQVcsS0FBSyxRQUFRLFdBQVcsS0FBSztBQUFBLElBQ3REO0FBQ0EsV0FBT0UsS0FBSSxHQUFHRCxLQUFJLEtBQUssTUFBTSxDQUFDO0FBQUEsRUFDbEM7OztBQzFEZSxXQUFSLGlCQUFrQixHQUFHUyxJQUFHLE9BQU8sT0FBTztBQUd6QyxRQUFJLElBQUksY0FBTSxDQUFDO0FBQ2YsSUFBQUEsS0FBSSxJQUFJLGNBQU1BLEVBQUM7QUFDZixVQUFNLEtBQUssRUFBRSxJQUFJLElBQUk7QUFDckIsVUFBTSxLQUFLQSxHQUFFLElBQUksSUFBSTtBQUNyQixRQUFJLFNBQVM7QUFDYixhQUFTLEtBQUssSUFBSTtBQUNkLFlBQU0sS0FBSyxHQUFHLENBQUMsS0FBSyxNQUFNLEdBQUcsQ0FBQyxLQUFLO0FBQ25DLGdCQUFVLElBQUk7QUFBQSxJQUNsQjtBQUNBLFdBQU8sS0FBSyxLQUFLLE1BQU07QUFBQSxFQUMzQjs7O0FDZEEsTUFBTyxnQkFBUSxJQUFJLFNBQVM7QUFDeEIsUUFBSTtBQUNBLFVBQUksY0FBTSxHQUFHLElBQUk7QUFDakIsYUFBTztBQUFBLElBRVgsU0FBUyxHQUFHO0FBQ1IsYUFBTztBQUFBLElBQ1g7QUFBQSxFQUNKOzs7QUNMQSxNQUFPLGlCQUFRO0FBQUEsSUFDWCxPQUFPO0FBQ0gsYUFBTyxjQUFNLENBQUMsZUFBTyxJQUFJLEtBQUssR0FBRyxHQUFHLEdBQUcsZUFBTyxJQUFJLEtBQUssS0FBSyxHQUFHLENBQUMsQ0FBQztBQUFBLElBQ3JFO0FBQUEsSUFDQSxNQUFNO0FBQ0YsYUFBTyxjQUFNLENBQUMsUUFBUSxRQUFRLFFBQVEsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLEVBQUU7QUFBQSxRQUMvRDtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsRUFDSjs7O0FDR0EsTUFBTSxjQUFjO0FBQUE7QUFBQSxJQUVoQixNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMzRyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMxRyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMxRyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMxRyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMzRyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxPQUFPLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN6RyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMxRyxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN4RyxPQUFPLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUN6RyxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUMxRyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQTtBQUFBLElBRzNHLFVBQVUsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUNsSSxRQUFRLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDaEksTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQzlILE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUM5SCxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDOUgsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQ2hJLE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUM5SCxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDOUgsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBO0FBQUEsSUFHOUgsTUFBTSxDQUFD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LEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFN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akIsWUFBWTtBQUFBLElBQ1oscUJBQXFCO0FBQUEsSUFDckIsT0FBTztBQUFBLElBQ1AsT0FBTztBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsWUFBWTtBQUFBLElBQ1osY0FBYztBQUFBLElBQ2QsS0FBSztBQUFBLElBQ0wsV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1QsYUFBYTtBQUFBLElBQ2IsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sYUFBYTtBQUFBLElBQ2IsY0FBYztBQUFBLElBQ2QsbUJBQW1CO0FBQUEsSUFDbkIsWUFBWTtBQUFBLElBQ1osV0FBVztBQUFBLElBQ1gsZUFBZTtBQUFBLElBQ2YsWUFBWTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLElBQ1AsTUFBTTtBQUFBLElBQ04sZ0JBQWdCO0FBQUEsSUFDaEIsVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLElBQ1AsY0FBYztBQUFBLElBQ2QsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sV0FBVztBQUFBLElBQ1gsT0FBTztBQUFBLElBQ1AsY0FBYztBQUFBLElBQ2QsWUFBWTtBQUFBLElBQ1osV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osb0JBQW9CO0FBQUEsSUFDcEIsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsaUJBQWlCO0FBQUEsSUFDakIsZ0JBQWdCO0FBQUEsSUFDaEIsY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2YsYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsSUFBSTtBQUFBLElBQ0osVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLElBQ2IsWUFBWTtBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsVUFBVTtBQUFBLElBQ1YsZ0JBQWdCO0FBQUEsSUFDaEIsZUFBZTtBQUFBLElBQ2YsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osWUFBWTtBQUFBLElBQ1osV0FBVztBQUFBLElBQ1gsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsYUFBYTtBQUFBLElBQ2IsZUFBZTtBQUFBLElBQ2YsWUFBWTtBQUFBLElBQ1osZUFBZTtBQUFBLElBQ2YsV0FBVztBQUFBLElBQ1gsZUFBZTtBQUFBLElBQ2YsV0FBVztBQUFBLElBQ1gsdUJBQXVCO0FBQUEsSUFDdkIsVUFBVTtBQUFBLElBQ1YsV0FBVztBQUFBLElBQ1gscUJBQXFCO0FBQUEsSUFDckIsVUFBVTtBQUFBLElBQ1YsaUJBQWlCO0FBQUEsSUFDakIsZUFBZTtBQUFBLElBQ2YsWUFBWTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsYUFBYTtBQUFBLElBQ2Isa0JBQWtCO0FBQUEsSUFDbEIsbUJBQW1CO0FBQUEsSUFDbkIsc0JBQXNCO0FBQUEsSUFDdEIsVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsYUFBYTtBQUFBLElBQ2IsWUFBWTtBQUFBLElBQ1osV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1QsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsYUFBYTtBQUFBLElBQ2IsY0FBYztBQUFBLElBQ2QsVUFBVTtBQUFBLElBQ1YsZUFBZTtBQUFBLElBQ2YsYUFBYTtBQUFBLElBQ2IsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsbUJBQW1CO0FBQUEsSUFDbkIsYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1QsY0FBYztBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFDaEIsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsY0FBYztBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFDaEIsWUFBWTtBQUFBLElBQ1osV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsYUFBYTtBQUFBLElBQ2IscUJBQXFCO0FBQUEsSUFDckIsU0FBUztBQUFBLElBQ1QsZ0JBQWdCO0FBQUEsSUFDaEIsWUFBWTtBQUFBLElBQ1osZUFBZTtBQUFBLElBQ2YsZ0JBQWdCO0FBQUEsSUFDaEIsZUFBZTtBQUFBLElBQ2Ysb0JBQW9CO0FBQUEsSUFDcEIsUUFBUTtBQUFBLElBQ1Isd0JBQXdCO0FBQUEsSUFDeEIsa0JBQWtCO0FBQUEsSUFDbEIsaUJBQWlCO0FBQUEsSUFDakIsZUFBZTtBQUFBLElBQ2YsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsT0FBTztBQUFBLElBQ1AsZUFBZTtBQUFBLElBQ2YsWUFBWTtBQUFBLElBQ1osVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLElBQ1AsZUFBZTtBQUFBLElBQ2YscUJBQXFCO0FBQUEsSUFDckIsUUFBUTtBQUFBLElBQ1IsZUFBZTtBQUFBLElBQ2YsTUFBTTtBQUFBLElBQ04sV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sYUFBYTtBQUFBLElBQ2IsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IscUJBQXFCO0FBQUEsSUFDckIsU0FBUztBQUFBLElBQ1QsZUFBZTtBQUFBLElBQ2YsWUFBWTtBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLElBQ1AsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsS0FBSztBQUFBLElBQ0wsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sWUFBWTtBQUFBLElBQ1osTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLElBQ2Qsb0JBQW9CO0FBQUEsSUFDcEIsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sa0JBQWtCO0FBQUEsSUFDbEIsT0FBTztBQUFBLElBQ1AsbUJBQW1CO0FBQUEsSUFDbkIsU0FBUztBQUFBLElBQ1QsZUFBZTtBQUFBLElBQ2YsVUFBVTtBQUFBLElBQ1YsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsTUFBTTtBQUFBLElBQ04saUJBQWlCO0FBQUEsSUFDakIsT0FBTztBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsbUJBQW1CO0FBQUEsSUFDbkIsc0JBQXNCO0FBQUEsSUFDdEIsYUFBYTtBQUFBLElBQ2IsZ0JBQWdCO0FBQUEsSUFDaEIsd0JBQXdCO0FBQUEsSUFDeEIsd0JBQXdCO0FBQUEsSUFDeEIsZUFBZTtBQUFBLElBQ2YsT0FBTztBQUFBLElBQ1AsT0FBTztBQUFBLElBQ1AsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsVUFBVTtBQUFBLElBQ1YsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsV0FBVztBQUFBLElBQ1gsZ0JBQWdCO0FBQUEsSUFDaEIsWUFBWTtBQUFBLElBQ1osaUJBQWlCO0FBQUEsSUFDakIsZ0JBQWdCO0FBQUEsSUFDaEIsaUJBQWlCO0FBQUEsSUFDakIsZUFBZTtBQUFBLElBQ2YsZ0JBQWdCO0FBQUEsSUFDaEIsT0FBTztB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QUEsR0FBQUEsR0FBQUE7QUFBQUEsZUFBQUEsSUFBQUEsT0FBQUEsa0JBQUFBLEVBQUFBLFdBQUFBLENBQUFBLEVBQUFBLGFBQUFBLFNBQUFBLFNBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLFlBQUFBLFlBQUFBO1FBQUFBLEtBQUFBLFNBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQTtBQUFBQSxtQkFBQUEsVUFBQUEsZUFBQUEsS0FBQUEsR0FBQUEsQ0FBQUEsTUFBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUE7UUFBQUEsR0FBQUEsRUFBQUEsR0FBQUEsQ0FBQUE7TUFBQUE7QUFBQUEsYUFBQUEsU0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsWUFBQUEsT0FBQUEsS0FBQUEsY0FBQUEsTUFBQUE7QUFBQUEsZ0JBQUFBLElBQUFBLFVBQUFBLHlCQUFBQSxPQUFBQSxDQUFBQSxJQUFBQSwrQkFBQUE7QUFBQUEsVUFBQUEsR0FBQUEsQ0FBQUE7QUFBQUEsaUJBQUFBLElBQUFBO0FBQUFBLGVBQUFBLGNBQUFBO1FBQUFBO0FBQUFBLFVBQUFBLFlBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLE9BQUFBLENBQUFBLEtBQUFBLEVBQUFBLFlBQUFBLEVBQUFBLFdBQUFBLElBQUFBO01BQUFBO0lBQUFBLEVBQUFBLEdBQUFBLEtBQUFBLFNBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLFVBQUFBLElBQUFBLEVBQUFBLE9BQUFBLEdBQUFBLE1BQUFBLFdBQUFBO0FBQUFBLFlBQUFBLEVBQUFBLENBQUFBLElBQUFBO0FBQUFBLGdCQUFBQSxFQUFBQSxDQUFBQTtBQUFBQSxlQUFBQSxFQUFBQSxDQUFBQTtNQUFBQSxHQUFBQSxNQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxDQUFBQSxFQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxhQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxPQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxRQUFBQSxFQUFBQSxDQUFBQSxFQUFBQSxHQUFBQSxPQUFBQSxVQUFBQSxlQUFBQSxFQUFBQSxPQUFBQSxRQUFBQSxJQUFBQSxXQUFBQTtBQUFBQSxlQUFBQTtNQUFBQSxJQUFBQTtBQUFBQSxlQUFBQSxFQUFBQSxHQUFBQTtBQUFBQSxlQUFBQSxTQUFBQSxHQUFBQTtBQUFBQSxpQkFBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsQ0FBQUEsQ0FBQUE7UUFBQUE7TUFBQUE7QUFBQUEsZUFBQUEsRUFBQUEsR0FBQUE7QUFBQUEsWUFBQUE7QUFBQUEsZ0JBQUFBLElBQUFBLFVBQUFBLGlDQUFBQTtBQUFBQSxlQUFBQTtBQUFBQSxjQUFBQTtBQUFBQSxnQkFBQUEsSUFBQUEsR0FBQUEsTUFBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsSUFBQUEsRUFBQUEsU0FBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsV0FBQUEsSUFBQUEsRUFBQUEsV0FBQUEsRUFBQUEsS0FBQUEsQ0FBQUEsR0FBQUEsS0FBQUEsRUFBQUEsU0FBQUEsRUFBQUEsSUFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsRUFBQUEsQ0FBQUEsQ0FBQUEsR0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLG9CQUFBQSxJQUFBQSxHQUFBQSxNQUFBQSxJQUFBQSxDQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxHQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxHQUFBQTtjQUFBQSxLQUFBQTtjQUFBQSxLQUFBQTtBQUFBQSxvQkFBQUE7QUFBQUE7Y0FBQUEsS0FBQUE7QUFBQUEsdUJBQUFBLEVBQUFBLFNBQUFBLEVBQUFBLE9BQUFBLEVBQUFBLENBQUFBLEdBQUFBLE1BQUFBLE1BQUFBO2NBQUFBLEtBQUFBO0FBQUFBLGtCQUFBQSxTQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxJQUFBQSxDQUFBQSxDQUFBQTtBQUFBQTtjQUFBQSxLQUFBQTtBQUFBQSxvQkFBQUEsRUFBQUEsSUFBQUEsSUFBQUEsR0FBQUEsRUFBQUEsS0FBQUEsSUFBQUE7QUFBQUE7Y0FBQUE7QUFBQUEsb0JBQUFBLElBQUFBLEVBQUFBLE1BQUFBLEVBQUFBLElBQUFBLEVBQUFBLFNBQUFBLEtBQUFBLEVBQUFBLEVBQUFBLFNBQUFBLENBQUFBLE9BQUFBLEVBQUFBLENBQUFBLE1BQUFBLEtBQUFBLEVBQUFBLENBQUFBLE1BQUFBLElBQUFBO0FBQUFBLHNCQUFBQTtBQUFBQTtnQkFBQUE7QUFBQUEsb0JBQUFBLEVBQUFBLENBQUFBLE1BQUFBLE1BQUFBLENBQUFBLEtBQUFBLEVBQUFBLENBQUFBLElBQUFBLEVBQUFBLENBQUFBLEtBQUFBLEVBQUFBLENBQUFBLElBQUFBLEVBQUFBLENBQUFBLElBQUFBO0FBQUFBLG9CQUFBQSxRQUFBQSxFQUFBQSxDQUFBQTtBQUFBQTtnQkFBQUE7QUFBQUEsb0JBQUFBLEVBQUFBLENBQUFBLE1BQUFBLEtBQUFBLEVBQUFBLFFBQUFBLEVBQUFBLENBQUFBLEdBQUFBO0FBQUFBLG9CQUFBQSxRQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxJQUFBQTtBQUFBQTtnQkFBQUE7QUFBQUEsb0JBQUFBLEtBQUFBLEVBQUFBLFFBQUFBLEVBQUFBLENBQUFBLEdBQUFBO0FBQUFBLG9CQUFBQSxRQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxFQUFBQSxJQUFBQSxLQUFBQSxDQUFBQTtBQUFBQTtnQkFBQUE7QUFBQUEsa0JBQUFBLENBQUFBLEtBQUFBLEVBQUFBLElBQUFBLElBQUFBLEdBQUFBLEVBQUFBLEtBQUFBLElBQUFBO0FBQUFBO1lBQUFBO0FBQUFBLGdCQUFBQSxFQUFBQSxLQUFBQSxHQUFBQSxDQUFBQTtVQUFBQSxTQUFBQSxHQUFBQTtBQUFBQSxnQkFBQUEsQ0FBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsSUFBQUE7VUFBQUEsVUFBQUE7QUFBQUEsZ0JBQUFBLElBQUFBO1VBQUFBO0FBQUFBLFlBQUFBLEVBQUFBLENBQUFBLElBQUFBO0FBQUFBLGdCQUFBQSxFQUFBQSxDQUFBQTtBQUFBQSxlQUFBQSxFQUFBQSxPQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxRQUFBQSxNQUFBQSxLQUFBQTtNQUFBQTtJQUFBQSxHQUFBQSxLQUFBQSxTQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxlQUFBQSxJQUFBQSxHQUFBQSxJQUFBQSxFQUFBQSxRQUFBQSxJQUFBQSxFQUFBQSxRQUFBQSxJQUFBQSxHQUFBQSxLQUFBQTtBQUFBQSxVQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxDQUFBQTtBQUFBQSxhQUFBQTtJQUFBQSxHQUFBQSxLQUFBQSxPQUFBQSxnQkFBQUEsS0FBQUEsT0FBQUEsa0JBQUFBLEtBQUFBLE9BQUFBLDJCQUFBQSxLQUFBQSxPQUFBQSx1QkFBQUEsS0FBQUEsT0FBQUEsVUFBQUEsZ0JBQUFBLEtBQUFBLE9BQUFBLFVBQUFBLHNCQUFBQSxLQUFBQSxTQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxhQUFBQSxLQUFBQSxJQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxFQUFBQSxZQUFBQSxNQUFBQSxjQUFBQSxNQUFBQSxVQUFBQSxNQUFBQSxPQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxJQUFBQTtJQUFBQSxHQUFBQSxLQUFBQSxTQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxlQUFBQSxLQUFBQSxNQUFBQSxJQUFBQSxDQUFBQTtBQUFBQSxXQUFBQSxLQUFBQSxHQUFBQSxDQUFBQSxLQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxFQUFBQSxDQUFBQSxDQUFBQTtBQUFBQSxVQUFBQTtBQUFBQSxpQkFBQUEsSUFBQUEsR0FBQUEsSUFBQUEsR0FBQUEsQ0FBQUEsR0FBQUEsSUFBQUEsRUFBQUEsUUFBQUEsS0FBQUE7QUFBQUEsY0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUE7QUFBQUEsYUFBQUEsS0FBQUEsR0FBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsR0FBQUEsR0FBQUEsRUFBQUEsQ0FBQUEsQ0FBQUE7UUFBQUE7QUFBQUEsYUFBQUE7SUFBQUEsR0FBQUEsS0FBQUEsU0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsYUFBQUEsR0FBQUEsR0FBQUEsR0FBQUEsQ0FBQUEsQ0FBQUE7SUFB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Q0FBQyxDQUFDLGlCQUFpQixHQUFxQixLQUFLLEdBQUdBLEVBQUcsQ0FBQyxDQUFDLE1BQU1BLEVBQUcsQ0FBQyxDQUFDLE1BQU1BLEVBQUcsQ0FBQyxDQUFDLE1BQU1BLEVBQUcsQ0FBQyxDQUFDLGlCQUFpQixJQUF3QixLQUFLLEdBQUdBLEVBQUcsQ0FBQyxDQUFDLE1BQU1BLEVBQUcsQ0FBQyxDQUFDLE1BQU1BLEVBQUcsRUFBRSxDQUFDLE1BQU1BLEVBQUcsRUFBRSxDQUFDLGlCQUFpQixJQUEwQixHQUFHLEVBQUUsS0FBSyxHQUFHO0lBQ3hSO0FBR0EsUUFBTUMsS0FBVSxDQUFDLFFBQVFGLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxJQUFJLElBQUksSUFBSSxHQUFH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Uyx1QkFBdUIsT0FBNkI7QUFDM0QsVUFBTSxjQUFjLElBQUksWUFBWTtBQUNwQyxXQUNFLGdDQUFBRCxRQUFBLGNBQUMsZUFBWSxXQUFVLFdBQ3JCLGdDQUFBQSxRQUFBLGNBQUMsdUJBQW9CLFFBQVEsZUFDM0IsZ0NBQUFBLFFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLEtBQUssTUFBTTtBQUFBLFFBQ1gsS0FBSyxNQUFNO0FBQUEsUUFDWCxZQUFZLE1BQU07QUFBQSxRQUNsQixXQUFXLE1BQU07QUFBQSxRQUNqQixVQUFVLE1BQU07QUFBQTtBQUFBLElBQ2xCLENBQ0YsQ0FDRjtBQUFBLEVBRUo7OztBQ25UQSxFQUFDLE9BQWUsaUJBQWlCLElBQUk7QUFBQSxJQUNqQztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSjsiLAogICJuYW1lcyI6IFsiaGFzT3duUHJvcGVydHkiLCAiZnJvbSIsICJSZWFjdERlYnVnQ3VycmVudEZyYW1lIiwgIkNvbXBvbmVudCIsICJQdXJlQ29tcG9uZW50IiwgImNyZWF0ZVJlZiIsICJ4IiwgImhhc093blByb3BlcnR5IiwgIlJlYWN0RWxlbWVudCIsICJzZWxmIiwgImNyZWF0ZUVsZW1lbnQiLCAiY2xvbmVFbGVtZW50IiwgImlzVmFsaWRFbGVtZW50IiwgIm9iamVjdCIsICJtYXRjaCIsICJmdW5jIiwgInRvQXJyYXkiLCAiY3JlYXRlQ29udGV4dCIsICJlcnJvciIsICJmb3J3YXJkUmVmIiwgInJlbmRlciIsICJtZW1vIiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlUmVkdWNlciIsICJyZWR1Y2VyIiwgInVzZVJlZiIsICJ1c2VFZmZlY3QiLCAidXNlTGF5b3V0RWZmZWN0IiwgInVzZUNhbGxiYWNrIiwgInVzZU1lbW8iLCAicHJlZml4IiwgInByb3RvdHlwZSIsICJub2RlIiwgImtleXMiLCAiQ2hpbGRyZW4iLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgIm5vZGUiLCAicGVlayIsICJsZW5ndGgiLCAiYiIsICJpbml0aWFsVGltZSIsICJSZWFjdCIsICJSZWFjdERlYnVnQ3VycmVudEZyYW1lIiwgIkZyYWdtZW50IiwgImhhc093blByb3BlcnR5IiwgInByZWZpeCIsICJzYW5pdGl6ZVVSTCIsICJfcmVmIiwgImNhcGl0YWxpemUiLCAidG9rZW4iLCAibm9kZSIsICJ4IiwgIm1hdGNoIiwgIkNvbXBvbmVudCIsICJwcm90b3R5cGUiLCAid29ya0luUHJvZ3Jlc3MiLCAidG9TdHJpbmciLCAiZ2V0IiwgInNldCIsICJnZXRBY3RpdmVFbGVtZW50IiwgImlzSHlkcmF0aW5nIiwgInZhbGlkYXRlUHJvcHMiLCAiaXNBcnJheSIsICJvcHRpb25zIiwgImZ1bmMiLCAiaXNDdXN0b21Qcm9wZXJ0eSIsICJzdHJpbmciLCAiY2hhcmFjdGVyIiwgInN0eWxlcyIsICJkZWxpbWl0ZXIiLCAic3R5bGUiLCAicmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyIsICJwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzIiwgImIiLCAiZXJyb3IiLCAiY2FsbENhbGxiYWNrIiwgImN1cnJlbnQiLCAicm9vdCIsICJxdWV1ZWRFdmVudCIsICJwcmVmaXhlcyIsICJpbmRleCIsICJsb2ciLCAiaXNFdmVudFN1cHBvcnRlZCIsICJmcm9tIiwgImxlbmd0aCIsICJuZXh0IiwgIm5vb3AiLCAiY3JlYXRlRWxlbWVudCIsICJjcmVhdGVJbnN0YW5jZSIsICJjYW5jZWxUaW1lb3V0IiwgImhhcyIsICJjdXJzb3IiLCAibm93IiwgIl9xdWV1ZSIsICJyZW5kZXJMYW5lcyIsICJ1cGRhdGVGcmFnbWVudCIsICJjaGlsZCIsICJyZWNvbmNpbGVDaGlsZEZpYmVycyIsICJpc09iamVjdCIsICJ2ZXJzaW9uIiwgInJlZHVjZXIiLCAicmVuZGVyIiwgInN1YnRyZWVSZW5kZXJMYW5lcyIsICJpc0hpZGRlbiIsICJlcnJvciQxIiwgImNvbW1pdFRpbWUiLCAiaHlkcmF0ZSIsICJjcmVhdGVQb3J0YWwiLCAiY3VycmVudEhvb2siLCAiUmVhY3RDdXJyZW50RGlzcGF0Y2hlciIsICJvYmplY3QiLCAiRWxlbWVudCIsICJGcmFnbWVudCIsICJpc0VsZW1lbnQiLCAieCIsICJhc3NpZ24iLCAieCIsICJpc1ZhbGlkRWxlbWVudCIsICJ2YWxpZGF0ZSIsICJpIiwgImNoZWNrZXIiLCAiaGFzT3duIiwgImNsYXNzTmFtZXMiLCAicmVxdWlyZV9yZWFjdF9pc19kZXZlbG9wbWVudCIsICJvYmplY3QiLCAiRWxlbWVudCIsICJGcmFnbWVudCIsICJpc0VsZW1lbnQiLCAicmVxdWlyZV9yZWFjdF9pcyIsICJnZXRQcm90b3R5cGVPZiIsICJrZXlzIiwgImxlbmd0aCIsICJsZW5ndGgiLCAiU3ltYm9sIiwgIlN5bWJvbCIsICJoYXNPd25Qcm9wZXJ0eSIsICJTeW1ib2wiLCAiaXNPYmplY3QiLCAiaXNPYmplY3QiLCAiaXNGdW5jdGlvbiIsICJmdW5jIiwgImZ1bmMiLCAiaXNGdW5jdGlvbiIsICJpc09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAib2JqZWN0IiwgIk1hcCIsICJoYXNPd25Qcm9wZXJ0eSIsICJoYXNPd25Qcm9wZXJ0eSIsICJsZW5ndGgiLCAiTWFwIiwgInNpemUiLCAibGVuZ3RoIiwgIk1hcCIsICJsZW5ndGgiLCAibGVuZ3RoIiwgIm90aFZhbHVlIiwgIlVpbnQ4QXJyYXkiLCAiU3ltYm9sIiwgIlVpbnQ4QXJyYXkiLCAib2JqZWN0IiwgImxlbmd0aCIsICJpc0FycmF5IiwgImlzQXJyYXkiLCAib2JqZWN0IiwgImxlbmd0aCIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAiQnVmZmVyIiwgImlzQnVmZmVyIiwgImxlbmd0aCIsICJmdW5jIiwgImlzVHlwZWRBcnJheSIsICJpc0FycmF5IiwgImlzQnVmZmVyIiwgImlzVHlwZWRBcnJheSIsICJoYXNPd25Qcm9wZXJ0eSIsICJsZW5ndGgiLCAiZnVuYyIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAiaXNGdW5jdGlvbiIsICJrZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAiUHJvbWlzZSIsICJTZXQiLCAiV2Vha01hcCIsICJNYXAiLCAiUHJvbWlzZSIsICJTZXQiLCAiV2Vha01hcCIsICJpc0FycmF5IiwgImlzQnVmZmVyIiwgImlzVHlwZWRBcnJheSIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAiaXNFcXVhbCIsICJnbG9iYWwiLCAiaXNBcnJheSIsICJpc09iamVjdCIsICJiIiwgImlzVW5kZWZpbmVkIiwgImlzTnVtYmVyIiwgImlzRGF0ZSIsICJleHRlbmQiLCAiZm9ybWF0IiwgImxvY2FsZSIsICJ0byIsICJmcm9tIiwgImlzRnVuY3Rpb24iLCAia2V5cyIsICJjYWxlbmRhciIsICJub3ciLCAic2lnbiIsICJ0b2tlbiIsICJvcmRpbmFsIiwgImZ1bmMiLCAibGVuZ3RoIiwgImkiLCAic3RyaW5nIiwgImRpZmYiLCAibG9jYWxlRGF0YSIsICJnZXQiLCAieCIsICJob3VycyIsICJtaW51dGVzIiwgIm5leHQiLCAibWF0Y2giLCAiZGVmYXVsdHMiLCAidG9rZW5zIiwgIm1lcmlkaWVtIiwgIm1pbiIsICJtYXgiLCAieWVhcnMiLCAibW9udGhzIiwgIndlZWtzIiwgImRheXMiLCAic2Vjb25kcyIsICJtaWxsaXNlY29uZHMiLCAib2Zmc2V0IiwgIm1hdGNoZXMiLCAiYmFzZSIsICJpc1N0cmluZyIsICJwcm9wZXJ0eSIsICJ0b1N0cmluZyIsICJwcmVmaXgiLCAidG9BcnJheSIsICJ0b0pTT04iLCAiYWJzIiwgInJvdW5kIiwgInRocmVzaG9sZHMiLCAiaXNBcnJheSIsICJpc1N0cmluZyIsICJpc0Jvb2xlYW4iLCAiaXNOdW1iZXIiLCAiaXNOdW1iZXIiLCAiaXNOYU4iLCAiZ2xvYmFsIiwgIm51bWVyYWwiLCAiVkVSU0lPTiIsICJkZWZhdWx0cyIsICJhYnMiLCAibWluIiwgIm1heCIsICJzdHJpbmciLCAieCIsICJuZXh0IiwgInByb3BlcnR5IiwgImIiLCAibnVtIiwgIm1lbW9pemUiLCAiZnVuYyIsICJpc0FycmF5IiwgIm9iamVjdCIsICJtZW1vaXplIiwgImZ1bmMiLCAic3RyaW5nIiwgIm1hdGNoIiwgImxlbmd0aCIsICJTeW1ib2wiLCAiaXNBcnJheSIsICJ0b1N0cmluZyIsICJpc0FycmF5IiwgInRvU3RyaW5nIiwgIm9iamVjdCIsICJvYmplY3QiLCAibGVuZ3RoIiwgImdldCIsICJvYmplY3QiLCAibGVuZ3RoIiwgImZ1bmMiLCAib2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJvYmplY3QiLCAibGVuZ3RoIiwgImtleXMiLCAib2JqZWN0IiwgIm9iamVjdCIsICJpc09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJvYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJCdWZmZXIiLCAibGVuZ3RoIiwgImxlbmd0aCIsICJvYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAibGVuZ3RoIiwgIlVpbnQ4QXJyYXkiLCAiU3ltYm9sIiwgIm9iamVjdCIsICJpc09iamVjdCIsICJvYmplY3QiLCAib2JqZWN0IiwgImlzQXJyYXkiLCAiaXNCdWZmZXIiLCAiaXNPYmplY3QiLCAia2V5cyIsICJvYmplY3QiLCAia2V5IiwgImxlbmd0aCIsICJsZW5ndGgiLCAib2JqZWN0IiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJpc1BsYWluT2JqZWN0IiwgImlzUGxhaW5PYmplY3QiLCAiU3ltYm9sIiwgImlzQXJyYXkiLCAibGVuZ3RoIiwgImZsYXR0ZW4iLCAibGVuZ3RoIiwgImZ1bmMiLCAiZnVuYyIsICJsZW5ndGgiLCAiZnVuYyIsICJzdHJpbmciLCAiZnVuYyIsICJmbGF0dGVuIiwgImZ1bmMiLCAib2JqZWN0IiwgImxlbmd0aCIsICJyZXF1aXJlX3JlYWN0X2lzX2RldmVsb3BtZW50IiwgIm9iamVjdCIsICJFbGVtZW50IiwgIkZyYWdtZW50IiwgImlzRWxlbWVudCIsICJyZXF1aXJlX3JlYWN0X2lzIiwgImVuY29kZSIsICJwcmVmaXgiLCAibWF0Y2giLCAiYmFzZSIsICJwYXJzZSIsICJjaGFyIiwgInRvU3RyaW5nIiwgInN0cmluZ2lmeSIsICJfZXh0ZW5kcyIsICJfY3JlYXRlQ2xhc3MiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgImtleXMiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2luaGVyaXRzIiwgImNsZWFuSW5wdXRQcm9wcyIsICJjb3B5U3R5bGVzIiwgInN0eWxlcyIsICJub2RlIiwgImdlbmVyYXRlSWQiLCAiQXV0b3NpemVJbnB1dCIsICJmb2N1cyIsICJpbmplY3RTdHlsZXMiLCAicmVuZGVyIiwgIl9jbGFzc0NhbGxDaGVjayIsICJnbG9iYWwiLCAidGhpcyIsICJmYWlscyIsICJleGVjIiwgInJlcXVpcmUkJDAiLCAidGVzdCIsICJOQVRJVkVfQklORCIsICJGdW5jdGlvblByb3RvdHlwZSIsICJhcHBseSIsICJjYWxsIiwgInVuY3VycnlUaGlzIiwgInRvU3RyaW5nIiwgInN0cmluZ1NsaWNlIiwgImNsYXNzb2ZSYXciLCAicmVxdWlyZSQkMSIsICJkb2N1bWVudEFsbCIsICIkZG9jdW1lbnRBbGwiLCAiaXNDYWxsYWJsZSIsICJkZXNjcmlwdG9ycyIsICIkcHJvcGVydHlJc0VudW1lcmFibGUiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgImNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciIsICJjbGFzc29mIiwgInJlcXVpcmUkJDIiLCAiJE9iamVjdCIsICJpc051bGxPclVuZGVmaW5lZCIsICIkVHlwZUVycm9yIiwgInJlcXVpcmVPYmplY3RDb2VyY2libGUiLCAiSW5kZXhlZE9iamVjdCIsICJ0b0luZGV4ZWRPYmplY3QiLCAiaXNPYmplY3QiLCAicGF0aCIsICJnZXRCdWlsdEluIiwgIm1ldGhvZCIsICJ1c2VyQWdlbnQiLCAicHJvY2VzcyIsICJEZW5vIiwgIm1hdGNoIiwgInZlcnNpb24iLCAiVjhfVkVSU0lPTiIsICIkU3RyaW5nIiwgInN5bWJvbCIsICJOQVRJVkVfU1lNQk9MIiwgImlzUHJvdG90eXBlT2YiLCAiVVNFX1NZTUJPTF9BU19VSUQiLCAicmVxdWlyZSQkMyIsICJpc1N5bWJvbCIsICIkU3ltYm9sIiwgInRyeVRvU3RyaW5nIiwgImFDYWxsYWJsZSIsICJnZXRNZXRob2QiLCAiZnVuYyIsICJvcmRpbmFyeVRvUHJpbWl0aXZlIiwgImRlZmluZVByb3BlcnR5IiwgImRlZmluZUdsb2JhbFByb3BlcnR5IiwgInN0b3JlIiwgInNoYXJlZE1vZHVsZSIsICJ0b09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJoYXNPd24iLCAiaWQiLCAidWlkIiwgInNoYXJlZCIsICJyZXF1aXJlJCQ0IiwgInJlcXVpcmUkJDUiLCAiU3ltYm9sIiwgIldlbGxLbm93blN5bWJvbHNTdG9yZSIsICJ3ZWxsS25vd25TeW1ib2wiLCAidG9QcmltaXRpdmUiLCAidG9Qcm9wZXJ0eUtleSIsICJkb2N1bWVudCIsICJFWElTVFMiLCAiZG9jdW1lbnRDcmVhdGVFbGVtZW50IiwgIkRFU0NSSVBUT1JTIiwgImNyZWF0ZUVsZW1lbnQiLCAicHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUiLCAicmVxdWlyZSQkNiIsICJJRThfRE9NX0RFRklORSIsICJyZXF1aXJlJCQ3IiwgIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiaXNGb3JjZWQiLCAic3RyaW5nIiwgImJpbmQiLCAiYW5PYmplY3QiLCAiVjhfUFJPVE9UWVBFX0RFRklORV9CVUciLCAiJGRlZmluZVByb3BlcnR5IiwgIkNPTkZJR1VSQUJMRSIsICJkZWZpbmVQcm9wZXJ0eU1vZHVsZSIsICJjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkiLCAib2JqZWN0IiwgInJlcXVpcmUkJDgiLCAicmVxdWlyZSQkOSIsICJiIiwgIkZPUkNFRCIsICIkIiwgIk9iamVjdCIsICJwYXJlbnQiLCAiaXNBcnJheSIsICJmbG9vciIsICJ0cnVuYyIsICJ4IiwgInRvSW50ZWdlck9ySW5maW5pdHkiLCAibWluIiwgInRvTGVuZ3RoIiwgImxlbmd0aE9mQXJyYXlMaWtlIiwgImRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciIsICJjcmVhdGVQcm9wZXJ0eSIsICJUT19TVFJJTkdfVEFHIiwgIlRPX1NUUklOR19UQUdfU1VQUE9SVCIsICJpbnNwZWN0U291cmNlIiwgIm5vb3AiLCAiY29uc3RydWN0IiwgImlzQ29uc3RydWN0b3IiLCAiY2FsbGVkIiwgIlNQRUNJRVMiLCAiJEFycmF5IiwgImFycmF5U3BlY2llc0NvbnN0cnVjdG9yIiwgImFycmF5U3BlY2llc0NyZWF0ZSIsICJsZW5ndGgiLCAiYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCIsICJyZXF1aXJlJCQxMCIsICJyZXF1aXJlJCQxMSIsICJjb25jYXQiLCAiaSIsICJtYXgiLCAidG9BYnNvbHV0ZUluZGV4IiwgImNyZWF0ZU1ldGhvZCIsICJoaWRkZW5LZXlzIiwgInB1c2giLCAiZW51bUJ1Z0tleXMiLCAiaW50ZXJuYWxPYmplY3RLZXlzIiwgIm9iamVjdEtleXMiLCAia2V5cyIsICJkZWZpbmVQcm9wZXJ0aWVzIiwgImh0bWwiLCAic2hhcmVkS2V5IiwgImRlZmluZVByb3BlcnRpZXNNb2R1bGUiLCAiUFJPVE9UWVBFIiwgIklFX1BST1RPIiwgImFjdGl2ZVhEb2N1bWVudCIsICJjcmVhdGUiLCAiZ2V0T3duUHJvcGVydHlOYW1lcyIsICIkZ2V0T3duUHJvcGVydHlOYW1lcyIsICJhcnJheVNsaWNlIiwgImRlZmluZUJ1aWx0SW4iLCAiZGVmaW5lQnVpbHRJbkFjY2Vzc29yIiwgIndyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUiLCAiU3ltYm9sUHJvdG90eXBlIiwgIlRPX1BSSU1JVElWRSIsICJzZXRUb1N0cmluZ1RhZyIsICJXZWFrTWFwIiwgIlR5cGVFcnJvciIsICJzZXQiLCAiZ2V0IiwgInNlbGYiLCAicmVxdWlyZSQkMTIiLCAicmVxdWlyZSQkMTMiLCAicmVxdWlyZSQkMTQiLCAicmVxdWlyZSQkMTUiLCAicmVxdWlyZSQkMTYiLCAiZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSIsICJyZXF1aXJlJCQxNyIsICJyZXF1aXJlJCQxOCIsICJnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUiLCAicmVxdWlyZSQkMTkiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlIiwgInJlcXVpcmUkJDIwIiwgInJlcXVpcmUkJDIxIiwgInJlcXVpcmUkJDIyIiwgInJlcXVpcmUkJDIzIiwgInJlcXVpcmUkJDI0IiwgInJlcXVpcmUkJDI1IiwgInJlcXVpcmUkJDI2IiwgInJlcXVpcmUkJDI3IiwgInJlcXVpcmUkJDI4IiwgInJlcXVpcmUkJDI5IiwgInJlcXVpcmUkJDMwIiwgInJlcXVpcmUkJDMxIiwgImRlZmluZVdlbGxLbm93blN5bWJvbCIsICJyZXF1aXJlJCQzMiIsICJkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSIsICJyZXF1aXJlJCQzMyIsICJyZXF1aXJlJCQzNCIsICJJbnRlcm5hbFN0YXRlTW9kdWxlIiwgInJlcXVpcmUkJDM1IiwgIiRmb3JFYWNoIiwgInJlcXVpcmUkJDM2IiwgInNldEludGVybmFsU3RhdGUiLCAiZ2V0SW50ZXJuYWxTdGF0ZSIsICJPYmplY3RQcm90b3R5cGUiLCAiUmFuZ2VFcnJvciIsICJuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSIsICJTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5IiwgImtleUZvciIsICJjaGFyQXQiLCAiY2hhckNvZGVBdCIsICJyZXBsYWNlIiwgInByZXYiLCAibmV4dCIsICJzdHJpbmdpZnkiLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgIiRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIiwgImdldFByb3RvdHlwZU9mIiwgIklURVJBVE9SIiwgIkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMiLCAiSXRlcmF0b3JQcm90b3R5cGUiLCAiSXRlcmF0b3JzIiwgInJldHVyblRoaXMiLCAiYVBvc3NpYmxlUHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgInZhbHVlcyIsICJlbnRyaWVzIiwgImNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QiLCAiZGVmaW5lSXRlcmF0b3IiLCAiRE9NSXRlcmFibGVzIiwgIk1FVEFEQVRBIiwgInRoaXNTeW1ib2xWYWx1ZSIsICJpc1JlZ2lzdGVyZWRTeW1ib2wiLCAiaXNXZWxsS25vd25TeW1ib2wiLCAicG9zaXRpb24iLCAic2l6ZSIsICJXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlIiwgIml0ZXJhdG9yIiwgIl90eXBlb2YiLCAiX1N5bWJvbCIsICJfU3ltYm9sJGl0ZXJhdG9yIiwgIm8iLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX09iamVjdCRkZWZpbmVQcm9wZXJ0eSIsICJfY3JlYXRlQ2xhc3MiLCAiX2RlZmluZVByb3BlcnR5IiwgImdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QiLCAibWVtbyIsICJhcnJheU1ldGhvZElzU3RyaWN0IiwgIklTX05PREUiLCAicmVkdWNlIiwgIkFycmF5UHJvdG90eXBlIiwgIkhBU19TUEVDSUVTX1NVUFBPUlQiLCAiZmlsdGVyIiwgIm1hcCIsICJmbGF0dGVuSW50b0FycmF5IiwgImZsYXRNYXAiLCAiY3JlYXRlTmV3RGF0YVBpcGVGcm9tIiwgImZyb20iLCAiRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbiIsICJTaW1wbGVEYXRhUGlwZSIsICJfc291cmNlIiwgIl90cmFuc2Zvcm1lcnMiLCAiX3RhcmdldCIsICJfY29udGV4dCIsICJfY29udGV4dDIiLCAiX2NvbnRleHQzIiwgImFkZCIsICJfYmluZEluc3RhbmNlUHJvcGVydHkiLCAiX2FkZCIsICJyZW1vdmUiLCAiX3JlbW92ZSIsICJ1cGRhdGUiLCAiX3VwZGF0ZSIsICJrZXkiLCAidmFsdWUiLCAiYWxsIiwgIl90cmFuc2Zvcm1JdGVtcyIsICJzdGFydCIsICJvbiIsICJfbGlzdGVuZXJzIiwgInN0b3AiLCAib2ZmIiwgIml0ZW1zIiwgIl9jb250ZXh0NCIsICJfcmVkdWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJ0cmFuc2Zvcm0iLCAiX25hbWUiLCAicGF5bG9hZCIsICJvbGREYXRhIiwgImNhbGxiYWNrIiwgImlucHV0IiwgIl9maWx0ZXJJbnN0YW5jZVByb3BlcnR5IiwgIl9tYXBJbnN0YW5jZVByb3BlcnR5IiwgIl9mbGF0TWFwSW5zdGFuY2VQcm9wZXJ0eSIsICJ0byIsICJ0YXJnZXQiLCAiaXRlcmF0b3JDbG9zZSIsICJjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nIiwgIkVOVFJJRVMiLCAiaXNBcnJheUl0ZXJhdG9yTWV0aG9kIiwgImdldEl0ZXJhdG9yTWV0aG9kIiwgImdldEl0ZXJhdG9yIiwgImNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX0FycmF5JGlzQXJyYXkiLCAic2V0QXJyYXlMZW5ndGgiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl9nZXRJdGVyYXRvck1ldGhvZCIsICJyIiwgInNsaWNlIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJhcnJheUxpa2VUb0FycmF5IiwgIl9zbGljZUluc3RhbmNlUHJvcGVydHkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfc2xpY2VkVG9BcnJheSIsICJhcnJheVdpdGhIb2xlcyIsICJpdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJ1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJhcnJheVdpdGhvdXRIb2xlcyIsICJpdGVyYWJsZVRvQXJyYXkiLCAibm9uSXRlcmFibGVTcHJlYWQiLCAib3duS2V5cyIsICJGQUlMU19PTl9QUklNSVRJVkVTIiwgIlNUUklDVF9NRVRIT0QiLCAiZm9yRWFjaCIsICJyZXZlcnNlIiwgImRlbGV0ZVByb3BlcnR5T3JUaHJvdyIsICJzcGxpY2UiLCAiYXNzaWduIiwgInZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoIiwgIkZ1bmN0aW9uIiwgInNjaGVkdWxlcnNGaXgiLCAic2V0SW50ZXJ2YWwiLCAic2V0VGltZW91dCIsICJFbWl0dGVyIiwgIm1vZHVsZSIsICJfZXh0ZW5kcyIsICJfaW5oZXJpdHNMb29zZSIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInJvdW5kIiwgImFicyIsICJub3ciLCAicHJvcGVydHkiLCAicHJlZml4IiwgImVhY2giLCAiVG91Y2hBY3Rpb24iLCAibm9kZSIsICJ2IiwgIklucHV0IiwgIlBvaW50ZXJFdmVudElucHV0IiwgInRvQXJyYXkiLCAic29ydCIsICJUb3VjaElucHV0IiwgIk1vdXNlSW5wdXQiLCAicmVtb3ZlTGFzdFRvdWNoIiwgIlRvdWNoTW91c2VJbnB1dCIsICJSZWNvZ25pemVyIiwgImVtaXQiLCAiVGFwUmVjb2duaXplciIsICJBdHRyUmVjb2duaXplciIsICJQYW5SZWNvZ25pemVyIiwgIlN3aXBlUmVjb2duaXplciIsICJQaW5jaFJlY29nbml6ZXIiLCAiUm90YXRlUmVjb2duaXplciIsICJQcmVzc1JlY29nbml6ZXIiLCAiZGVmYXVsdHMiLCAiZGF0YSIsICJNYW5hZ2VyIiwgIlNpbmdsZVRvdWNoSW5wdXQiLCAibG9nIiwgImV4dGVuZCIsICJtZXJnZSIsICJiYXNlIiwgIkhhbW1lciIsICJERUxFVEUiLCAicHVyZURlZXBPYmplY3RBc3NpZ24iLCAiX2xlbiIsICJhcmd1bWVudHMiLCAidXBkYXRlcyIsICJBcnJheSIsICJfa2V5IiwgImRlZXBPYmplY3RBc3NpZ24iLCAiX2NvbmNhdEluc3RhbmNlUHJvcGVydHkiLCAibWVyZ2VkIiwgImRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSIsICJzdHJpcERlbGV0ZSIsICJfbGVuMiIsICJfa2V5MiIsICJhIiwgIkRhdGUiLCAic2V0VGltZSIsICJnZXRUaW1lIiwgIl9pdGVyYXRvciIsICJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsICJfUmVmbGVjdCRvd25LZXlzIiwgIl9zdGVwIiwgInMiLCAibiIsICJkb25lIiwgInByb3AiLCAicHJvdG90eXBlIiwgInByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImNsb25lIiwgImVyciIsICJlIiwgImYiLCAiX2kiLCAiX09iamVjdCRrZXlzIiwgIl9PYmplY3Qka2V5czIiLCAiYUNvbnN0cnVjdG9yIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCAiX3NldFByb3RvdHlwZU9mIiwgInAiLCAiX2luaGVyaXRzIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgImFzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyIsICJpbnN0YWxsRXJyb3JDYXVzZSIsICIkRXJyb3IiLCAiaXRlcmF0ZSIsICJub3JtYWxpemVTdHJpbmdBcmd1bWVudCIsICJzZXRTcGVjaWVzIiwgImFuSW5zdGFuY2UiLCAic3BlY2llc0NvbnN0cnVjdG9yIiwgIklTX0lPUyIsICJNZXNzYWdlQ2hhbm5lbCIsICJTdHJpbmciLCAicXVldWUiLCAic2V0SW1tZWRpYXRlIiwgInRhc2siLCAiUXVldWUiLCAiTXV0YXRpb25PYnNlcnZlciIsICJQcm9taXNlIiwgIm1pY3JvdGFzayIsICJub3RpZnkiLCAicHJvbWlzZSIsICJob3N0UmVwb3J0RXJyb3JzIiwgInBlcmZvcm0iLCAiSVNfREVOTyIsICJOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IiLCAiTmF0aXZlUHJvbWlzZVByb3RvdHlwZSIsICJOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQiLCAiRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IiLCAibmV3UHJvbWlzZUNhcGFiaWxpdHkiLCAibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCAiaXNUaGVuYWJsZSIsICJ0aGVuIiwgIlBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIiwgImNvdW50ZXIiLCAicHJvbWlzZVJlc29sdmUiLCAiYW55IiwgImlzRnVuY3Rpb24iLCAiX09iamVjdCRjcmVhdGUiLCAiX09iamVjdCRnZXRQcm90b3R5cGVPZiIsICJfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkiLCAiX3B1c2hJbnN0YW5jZVByb3BlcnR5IiwgIl9PYmplY3Qkc2V0UHJvdG90eXBlT2YiLCAiX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5IiwgIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCAidCIsICJkZWZpbmUiLCAid3JhcCIsICJjIiwgIkFzeW5jSXRlcmF0b3IiLCAidSIsICJoIiwgImlzRXh0ZW5zaWJsZSIsICJmYXN0S2V5IiwgImludGVybmFsTWV0YWRhdGFNb2R1bGUiLCAiaW50ZXJuYWxTdGF0ZUdldHRlckZvciIsICJjb2xsZWN0aW9uIiwgImRlZmluZUJ1aWx0SW5zIiwgImNvbGxlY3Rpb25TdHJvbmciLCAiY2xlYXIiLCAiaGFzIiwgIk1hcCIsICJzb21lIiwgIldFQktJVCIsICJnZXRSYW5kb21WYWx1ZXMiLCAicm5kczgiLCAicm5nIiwgImJ5dGVUb0hleCIsICJpc0lkIiwgIm9wdGlvbnMiLCAiZGVsYXkiLCAiSW5maW5pdHkiLCAic2V0T3B0aW9ucyIsICJfZmx1c2hJZk5lZWRlZCIsICJkZXN0cm95IiwgImZsdXNoIiwgIl9leHRlbmRlZCIsICJtZXRob2RzIiwgIm9yaWdpbmFsIiwgIm5hbWUiLCAibWUiLCAiRXJyb3IiLCAiYXJncyIsICJmbiIsICJjb250ZXh0IiwgImVudHJ5IiwgIl9xdWV1ZSIsICJfdGhpcyIsICJfdGltZW91dCIsICJjbGVhclRpbWVvdXQiLCAiX3NldFRpbWVvdXQiLCAiX3NwbGljZUluc3RhbmNlUHJvcGVydHkiLCAidW5kZWZpbmVkIiwgIkRhdGFTZXRQYXJ0IiwgIl90cmlnZ2VyIiwgImV2ZW50IiwgInNlbmRlcklkIiwgIl9zdWJzY3JpYmVycyIsICJzdWJzY3JpYmVyIiwgIlNldCIsICJEYXRhU3RyZWFtIiwgInBhaXJzIiwgIl9wYWlycyIsICJtYXJrIiwgIl9zdGVwJHZhbHVlIiwgIml0ZW0iLCAidmFsdWUkIiwgInQwIiwgImZpbmlzaCIsICJfaXRlcmF0b3IyIiwgIl9zdGVwMiIsICJfc3RlcDIkdmFsdWUiLCAiZW50cmllcyQiLCAiX2l0ZXJhdG9yMyIsICJfc3RlcDMiLCAiX3N0ZXAzJHZhbHVlIiwgImtleXMkIiwgIl9pdGVyYXRvcjQiLCAiX3N0ZXA0IiwgIl9zdGVwNCR2YWx1ZSIsICJ2YWx1ZXMkIiwgInRvSWRBcnJheSIsICJfY29udGV4dDUiLCAicGFpciIsICJ0b0l0ZW1BcnJheSIsICJfY29udGV4dDYiLCAidG9FbnRyeUFycmF5IiwgInRvT2JqZWN0TWFwIiwgIl9pdGVyYXRvcjUiLCAiX3N0ZXA1IiwgIl9zdGVwNSR2YWx1ZSIsICJ0b01hcCIsICJfTWFwIiwgInRvSWRTZXQiLCAiX1NldCIsICJ0b0l0ZW1TZXQiLCAiY2FjaGUiLCAiZGlzdGluY3QiLCAiX2l0ZXJhdG9yNiIsICJfc3RlcDYiLCAiX3N0ZXA2JHZhbHVlIiwgIl9TeW1ib2wkaXRlcmF0b3IyIiwgIl9jYWxsZWUiLCAiX2l0ZXJhdG9yNyIsICJfc3RlcDciLCAiX3N0ZXA3JHZhbHVlIiwgIl9jYWxsZWUkIiwgIl9jb250ZXh0NyIsICJfaXRlcmF0b3I4IiwgIl9zdGVwOCIsICJfc3RlcDgkdmFsdWUiLCAiX2NhbGxlZTIiLCAiX2l0ZXJhdG9yOSIsICJfc3RlcDkiLCAiX3N0ZXA5JHZhbHVlIiwgIl9jYWxsZWUyJCIsICJfY29udGV4dDgiLCAiaXRlciIsICJfZ2V0SXRlcmF0b3IiLCAiY3VyciIsICJtYXhJdGVtIiwgIm1heFZhbHVlIiwgIl9jdXJyJHZhbHVlIiwgIm1pbkl0ZW0iLCAibWluVmFsdWUiLCAiX2N1cnIkdmFsdWUyIiwgImFjY3VtdWxhdG9yIiwgIl9pdGVyYXRvcjEwIiwgIl9zdGVwMTAiLCAiX3N0ZXAxMCR2YWx1ZSIsICJfY29udGV4dDkiLCAiX3NvcnRJbnN0YW5jZVByb3BlcnR5IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiaWRBIiwgIml0ZW1BIiwgIl9yZWY0IiwgImlkQiIsICJpdGVtQiIsICJlbnN1cmVGdWxsSXRlbSIsICJpZFByb3AiLCAidXVpZDQiLCAiRGF0YVNldCIsICJfRGF0YVNldFBhcnQiLCAiX3N1cGVyIiwgIl9jcmVhdGVTdXBlciIsICJfb3B0aW9ucyIsICJfZGF0YSIsICJfaWRQcm9wIiwgImZpZWxkSWQiLCAiX3RoaXMyIiwgImFkZGVkSWRzIiwgImlkc1RvQWRkIiwgImQiLCAiX3NvbWVJbnN0YW5jZVByb3BlcnR5IiwgImxlbiIsICJfYWRkSXRlbSIsICJfdGhpczMiLCAidXBkYXRlZElkcyIsICJ1cGRhdGVkRGF0YSIsICJhZGRPclVwZGF0ZSIsICJvcmlnSWQiLCAiZnVsbEl0ZW0iLCAib2xkSXRlbSIsICJfT2JqZWN0JGFzc2lnbiIsICJfdXBkYXRlSXRlbSIsICJjb25zb2xlIiwgIndhcm4iLCAicHJvcHMiLCAidXBkYXRlT25seSIsICJfdGhpczQiLCAidXBkYXRlRXZlbnREYXRhIiwgImZpcnN0IiwgInNlY29uZCIsICJpZHMiLCAicmV0dXJuVHlwZSIsICJpdGVtSWRzIiwgIml0ZW1JZCIsICJfa2V5c0luc3RhbmNlUHJvcGVydHkiLCAib3JkZXIiLCAiX3NvcnQiLCAiZmllbGRzIiwgIl9maWx0ZXJGaWVsZHMiLCAicmVzdWx0IiwgInJlc3VsdGFudCIsICJfaXRlbSIsICJnZXRJZHMiLCAiZ2V0RGF0YVNldCIsICJtYXBwZWRJdGVtcyIsICJmaWx0ZXJlZEl0ZW0iLCAiZmllbGQiLCAiYXYiLCAiYnYiLCAicmVtb3ZlZElkcyIsICJyZW1vdmVkSXRlbXMiLCAiaWRlbnQiLCAiZGVsZXRlIiwgIm1heEZpZWxkIiwgIl92YWx1ZXNJbnN0YW5jZVByb3BlcnR5IiwgIml0ZW1GaWVsZCIsICJtaW5GaWVsZCIsICJjb3VudCIsICJleGlzdHMiLCAiaiIsICJfSlNPTiRzdHJpbmdpZnkiLCAiX29iamVjdFNwcmVhZCIsICJzdHJlYW0iLCAiX2VudHJpZXNJbnN0YW5jZVByb3BlcnR5IiwgIkRhdGFWaWV3IiwgIl9saXN0ZW5lciIsICJfb25FdmVudCIsICJzZXREYXRhIiwgIl9pZHMiLCAicmVmcmVzaCIsICJvbGRJZHMiLCAibmV3SWRzIiwgImVycm9yIiwgInZpZXdPcHRpb25zIiwgInRoaXNGaWx0ZXIiLCAib3B0aW9uc0ZpbHRlciIsICJkZWZhdWx0RmlsdGVyIiwgImRpc3Bvc2UiLCAiX3RoaXMkX2RhdGEiLCAibWVzc2FnZSIsICJyZXBsYWNlbWVudCIsICJjb25maWd1cmFibGUiLCAicGFyYW1zIiwgIm9sZEl0ZW1zIiwgInVwZGF0ZWRJdGVtcyIsICJpc0RhdGFTZXRMaWtlIiwgImlzRGF0YVZpZXdMaWtlIiwgImNoZWNrIiwgIml0IiwgIk1hdGgiLCAiZ2xvYmFsIiwgImdsb2JhbFRoaXMiLCAid2luZG93IiwgInNlbGYiLCAidGhpcyIsICJGdW5jdGlvbiIsICJmYWlscyIsICJleGVjIiwgImVycm9yIiwgImZ1bmN0aW9uQmluZE5hdGl2ZSIsICJyZXF1aXJlJCQwIiwgInRlc3QiLCAiYmluZCIsICJoYXNPd25Qcm9wZXJ0eSIsICJOQVRJVkVfQklORCIsICJGdW5jdGlvblByb3RvdHlwZSIsICJwcm90b3R5cGUiLCAiYXBwbHkiLCAiY2FsbCIsICJmdW5jdGlvbkFwcGx5IiwgIlJlZmxlY3QiLCAiYXJndW1lbnRzIiwgInVuY3VycnlUaGlzV2l0aEJpbmQiLCAiZnVuY3Rpb25VbmN1cnJ5VGhpcyIsICJmbiIsICJ1bmN1cnJ5VGhpcyIsICJ0b1N0cmluZyIsICJzdHJpbmdTbGljZSIsICJzbGljZSIsICJjbGFzc29mUmF3IiwgInJlcXVpcmUkJDEiLCAiZnVuY3Rpb25VbmN1cnJ5VGhpc0NsYXVzZSIsICJkb2N1bWVudEFsbCIsICJkb2N1bWVudCIsICJhbGwiLCAiZG9jdW1lbnRBbGxfMSIsICJJU19IVE1MRERBIiwgImlzQ2FsbGFibGUiLCAiYXJndW1lbnQiLCAiZGVzY3JpcHRvcnMiLCAiT2JqZWN0IiwgImRlZmluZVByb3BlcnR5IiwgImdldCIsICJmdW5jdGlvbkNhbGwiLCAiJHByb3BlcnR5SXNFbnVtZXJhYmxlIiwgInByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJOQVNIT1JOX0JVRyIsICJvYmplY3RQcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJmIiwgIlYiLCAiZGVzY3JpcHRvciIsICJlbnVtZXJhYmxlIiwgIm1hdGNoIiwgInZlcnNpb24iLCAiY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yIiwgImJpdG1hcCIsICJ2YWx1ZSIsICJjb25maWd1cmFibGUiLCAid3JpdGFibGUiLCAiY2xhc3NvZiIsICJyZXF1aXJlJCQyIiwgIiRPYmplY3QiLCAic3BsaXQiLCAiaW5kZXhlZE9iamVjdCIsICJpc051bGxPclVuZGVmaW5lZCIsICIkVHlwZUVycm9yIiwgIlR5cGVFcnJvciIsICJyZXF1aXJlT2JqZWN0Q29lcmNpYmxlIiwgIkluZGV4ZWRPYmplY3QiLCAidG9JbmRleGVkT2JqZWN0IiwgImlzT2JqZWN0IiwgInBhdGgiLCAiYUZ1bmN0aW9uIiwgInZhcmlhYmxlIiwgImdldEJ1aWx0SW4iLCAibmFtZXNwYWNlIiwgIm1ldGhvZCIsICJsZW5ndGgiLCAib2JqZWN0SXNQcm90b3R5cGVPZiIsICJpc1Byb3RvdHlwZU9mIiwgImVuZ2luZVVzZXJBZ2VudCIsICJuYXZpZ2F0b3IiLCAiU3RyaW5nIiwgInVzZXJBZ2VudCIsICJwcm9jZXNzIiwgIkRlbm8iLCAidmVyc2lvbnMiLCAidjgiLCAiZW5naW5lVjhWZXJzaW9uIiwgIlY4X1ZFUlNJT04iLCAiJFN0cmluZyIsICJzeW1ib2xDb25zdHJ1Y3RvckRldGVjdGlvbiIsICJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAic3ltYm9sIiwgIlN5bWJvbCIsICJzaGFtIiwgInVzZVN5bWJvbEFzVWlkIiwgIml0ZXJhdG9yIiwgImlzU3ltYm9sIiwgInJlcXVpcmUkJDMiLCAiJFN5bWJvbCIsICJ0cnlUb1N0cmluZyIsICJhQ2FsbGFibGUiLCAiZ2V0TWV0aG9kIiwgIlAiLCAiZnVuYyIsICJkZWZpbmVHbG9iYWxQcm9wZXJ0eSIsICJrZXkiLCAiU0hBUkVEIiwgInNoYXJlZFN0b3JlIiwgInN0b3JlIiwgInNoYXJlZE1vZHVsZSIsICJwdXNoIiwgIm1vZGUiLCAiY29weXJpZ2h0IiwgImxpY2Vuc2UiLCAic291cmNlIiwgInRvT2JqZWN0IiwgImhhc093blByb3BlcnR5XzEiLCAiaGFzT3duIiwgImlkIiwgInBvc3RmaXgiLCAicmFuZG9tIiwgInVpZCIsICJzaGFyZWQiLCAiTkFUSVZFX1NZTUJPTCIsICJyZXF1aXJlJCQ0IiwgIlVTRV9TWU1CT0xfQVNfVUlEIiwgInJlcXVpcmUkJDUiLCAiV2VsbEtub3duU3ltYm9sc1N0b3JlIiwgImNyZWF0ZVdlbGxLbm93blN5bWJvbCIsICJ3aXRob3V0U2V0dGVyIiwgIndlbGxLbm93blN5bWJvbCIsICJuYW1lIiwgIm9yZGluYXJ5VG9QcmltaXRpdmUiLCAiaW5wdXQiLCAicHJlZiIsICJ2YWwiLCAidmFsdWVPZiIsICJUT19QUklNSVRJVkUiLCAidG9QcmltaXRpdmUiLCAicmVzdWx0IiwgImV4b3RpY1RvUHJpbSIsICJ0b1Byb3BlcnR5S2V5IiwgIkVYSVNUUyIsICJjcmVhdGVFbGVtZW50IiwgImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsICJpZThEb21EZWZpbmUiLCAiYSIsICJERVNDUklQVE9SUyIsICJwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSIsICJyZXF1aXJlJCQ2IiwgIklFOF9ET01fREVGSU5FIiwgInJlcXVpcmUkJDciLCAiJGdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiTyIsICJyZXBsYWNlbWVudCIsICJpc0ZvcmNlZCIsICJmZWF0dXJlIiwgImRldGVjdGlvbiIsICJkYXRhIiwgIm5vcm1hbGl6ZSIsICJQT0xZRklMTCIsICJOQVRJVkUiLCAic3RyaW5nIiwgInJlcGxhY2UiLCAidG9Mb3dlckNhc2UiLCAiaXNGb3JjZWRfMSIsICJmdW5jdGlvbkJpbmRDb250ZXh0IiwgInRoYXQiLCAidjhQcm90b3R5cGVEZWZpbmVCdWciLCAiYW5PYmplY3QiLCAiVjhfUFJPVE9UWVBFX0RFRklORV9CVUciLCAiJGRlZmluZVByb3BlcnR5IiwgIkVOVU1FUkFCTEUiLCAiQ09ORklHVVJBQkxFIiwgIldSSVRBQkxFIiwgIm9iamVjdERlZmluZVByb3BlcnR5IiwgIkF0dHJpYnV0ZXMiLCAiY3VycmVudCIsICJkZWZpbmVQcm9wZXJ0eU1vZHVsZSIsICJjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkiLCAib2JqZWN0IiwgInJlcXVpcmUkJDgiLCAicmVxdWlyZSQkOSIsICJ3cmFwQ29uc3RydWN0b3IiLCAiTmF0aXZlQ29uc3RydWN0b3IiLCAiV3JhcHBlciIsICJiIiwgImMiLCAiX2V4cG9ydCIsICJvcHRpb25zIiwgIkZPUkNFRCIsICJVU0VfTkFUSVZFIiwgIlZJUlRVQUxfUFJPVE9UWVBFIiwgInNvdXJjZVByb3BlcnR5IiwgInRhcmdldFByb3BlcnR5IiwgIm5hdGl2ZVByb3BlcnR5IiwgInJlc3VsdFByb3BlcnR5IiwgIlRBUkdFVCIsICJ0YXJnZXQiLCAiR0xPQkFMIiwgIlNUQVRJQyIsICJzdGF0IiwgIlBST1RPIiwgInByb3RvIiwgIm5hdGl2ZVNvdXJjZSIsICJ0YXJnZXRQcm90b3R5cGUiLCAiZm9yY2VkIiwgImRvbnRDYWxsR2V0U2V0IiwgIndyYXAiLCAicmVhbCIsICJjZWlsIiwgImZsb29yIiwgInRydW5jIiwgIngiLCAibiIsICJ0b0ludGVnZXJPckluZmluaXR5IiwgIm51bWJlciIsICJtYXgiLCAibWluIiwgInRvQWJzb2x1dGVJbmRleCIsICJpbmRleCIsICJpbnRlZ2VyIiwgInRvTGVuZ3RoIiwgImxlbmd0aE9mQXJyYXlMaWtlIiwgIm9iaiIsICJjcmVhdGVNZXRob2QiLCAiSVNfSU5DTFVERVMiLCAiJHRoaXMiLCAiZWwiLCAiZnJvbUluZGV4IiwgImFycmF5SW5jbHVkZXMiLCAiaW5jbHVkZXMiLCAiaW5kZXhPZiIsICJoaWRkZW5LZXlzIiwgIm9iamVjdEtleXNJbnRlcm5hbCIsICJuYW1lcyIsICJpIiwgImVudW1CdWdLZXlzIiwgImludGVybmFsT2JqZWN0S2V5cyIsICJvYmplY3RLZXlzIiwgImtleXMiLCAib2JqZWN0R2V0T3duUHJvcGVydHlTeW1ib2xzIiwgImdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSIsICIkYXNzaWduIiwgImFzc2lnbiIsICJjb25jYXQiLCAib2JqZWN0QXNzaWduIiwgIkEiLCAiQiIsICJhbHBoYWJldCIsICJmb3JFYWNoIiwgImNociIsICJqb2luIiwgIlQiLCAiYXJndW1lbnRzTGVuZ3RoIiwgIlMiLCAiaiIsICJhcml0eSIsICJhcnJheVNsaWNlIiwgIiRGdW5jdGlvbiIsICJmYWN0b3JpZXMiLCAiZnVuY3Rpb25CaW5kIiwgIkYiLCAiUHJvdG90eXBlIiwgInBhcnRBcmdzIiwgImJvdW5kRnVuY3Rpb24iLCAiYXJncyIsICJDIiwgImFyZ3NMZW5ndGgiLCAibGlzdCIsICJlbnRyeVZpcnR1YWwiLCAiQ09OU1RSVUNUT1IiLCAicGFyZW50IiwgIm93biIsICJkcmF3Q2lyY2xlIiwgImN0eCIsICJ5IiwgInIiLCAiYmVnaW5QYXRoIiwgImFyYyIsICJQSSIsICJjbG9zZVBhdGgiLCAiZHJhd1JvdW5kUmVjdCIsICJ3IiwgImgiLCAicjJkIiwgIm1vdmVUbyIsICJsaW5lVG8iLCAiZHJhd0VsbGlwc2UiLCAia2FwcGEiLCAib3giLCAib3kiLCAieGUiLCAieWUiLCAieG0iLCAieW0iLCAiYmV6aWVyQ3VydmVUbyIsICJkcmF3RGF0YWJhc2UiLCAiaEVsbGlwc2UiLCAieW1iIiwgInllYiIsICJkcmF3RGFzaGVkTGluZSIsICJ4MiIsICJ5MiIsICJwYXR0ZXJuIiwgInBhdHRlcm5MZW5ndGgiLCAiZHgiLCAiZHkiLCAic2xvcGUiLCAiZGlzdFJlbWFpbmluZyIsICJzcXJ0IiwgInBhdHRlcm5JbmRleCIsICJkcmF3IiwgInhTdGVwIiwgImRhc2hMZW5ndGgiLCAic2hhcGVNYXAiLCAiY2lyY2xlIiwgImRhc2hlZExpbmUiLCAiZGF0YWJhc2UiLCAiZGlhbW9uZCIsICJlbGxpcHNlIiwgImVsbGlwc2VfdmlzIiwgImhleGFnb24iLCAiY29zIiwgInNpbiIsICJyb3VuZFJlY3QiLCAic3F1YXJlIiwgInJlY3QiLCAic3RhciIsICJyYWRpdXMiLCAidHJpYW5nbGUiLCAicyIsICJzMiIsICJpciIsICJ0cmlhbmdsZURvd24iLCAidCIsICJFbWl0dGVyIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm9uIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAiZXZlbnQiLCAiX2NhbGxiYWNrcyIsICJvbmNlIiwgIm9mZiIsICJyZW1vdmVMaXN0ZW5lciIsICJyZW1vdmVBbGxMaXN0ZW5lcnMiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJjYiIsICJjYWxsYmFja3MiLCAic3BsaWNlIiwgImVtaXQiLCAiQXJyYXkiLCAibGVuIiwgImxpc3RlbmVycyIsICJoYXNMaXN0ZW5lcnMiLCAic2V0IiwgImhhcyIsICJ0b1N0cmluZ1RhZ1N1cHBvcnQiLCAiVE9fU1RSSU5HX1RBR19TVVBQT1JUIiwgIlRPX1NUUklOR19UQUciLCAiQ09SUkVDVF9BUkdVTUVOVFMiLCAidGFnIiwgImNhbGxlZSIsICJjaGFyQXQiLCAiY2hhckNvZGVBdCIsICJDT05WRVJUX1RPX1NUUklORyIsICJwb3MiLCAiZmlyc3QiLCAic2Vjb25kIiwgInBvc2l0aW9uIiwgInNpemUiLCAic3RyaW5nTXVsdGlieXRlIiwgImNvZGVBdCIsICJXZWFrTWFwIiwgIndlYWtNYXBCYXNpY0RldGVjdGlvbiIsICJzaGFyZWRLZXkiLCAiTkFUSVZFX1dFQUtfTUFQIiwgIk9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEIiwgInN0YXRlIiwgIm1ldGFkYXRhIiwgImZhY2FkZSIsICJTVEFURSIsICJpbnRlcm5hbFN0YXRlIiwgImVuZm9yY2UiLCAiZ2V0dGVyRm9yIiwgIlRZUEUiLCAidHlwZSIsICJnZXREZXNjcmlwdG9yIiwgImZ1bmN0aW9uTmFtZSIsICJQUk9QRVIiLCAib2JqZWN0RGVmaW5lUHJvcGVydGllcyIsICJkZWZpbmVQcm9wZXJ0aWVzIiwgIlByb3BlcnRpZXMiLCAicHJvcHMiLCAiYWN0aXZlWERvY3VtZW50IiwgImh0bWwiLCAiZGVmaW5lUHJvcGVydGllc01vZHVsZSIsICJQUk9UT1RZUEUiLCAiU0NSSVBUIiwgIklFX1BST1RPIiwgIkVtcHR5Q29uc3RydWN0b3IiLCAic2NyaXB0VGFnIiwgImNvbnRlbnQiLCAiTFQiLCAiTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCIsICJ3cml0ZSIsICJjbG9zZSIsICJ0ZW1wIiwgInBhcmVudFdpbmRvdyIsICJOdWxsUHJvdG9PYmplY3QiLCAiQWN0aXZlWE9iamVjdCIsICJpZnJhbWVEb2N1bWVudCIsICJpZnJhbWUiLCAiSlMiLCAiZG9tYWluIiwgInN0eWxlIiwgImRpc3BsYXkiLCAiYXBwZW5kQ2hpbGQiLCAic3JjIiwgImNvbnRlbnRXaW5kb3ciLCAib3BlbiIsICJJdGVyYXRvclByb3RvdHlwZSIsICJQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUiLCAiYXJyYXlJdGVyYXRvciIsICJvYmplY3RDcmVhdGUiLCAiY3JlYXRlIiwgImNvcnJlY3RQcm90b3R5cGVHZXR0ZXIiLCAiY29uc3RydWN0b3IiLCAiZ2V0UHJvdG90eXBlT2YiLCAiQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIiwgIk9iamVjdFByb3RvdHlwZSIsICJvYmplY3RHZXRQcm90b3R5cGVPZiIsICJkZWZpbmVCdWlsdEluIiwgIklURVJBVE9SIiwgIkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMiLCAiTkVXX0lURVJBVE9SX1BST1RPVFlQRSIsICJpdGVyYXRvcnNDb3JlIiwgIm9iamVjdFRvU3RyaW5nIiwgInNldFRvU3RyaW5nVGFnIiwgIlRBRyIsICJTRVRfTUVUSE9EIiwgIml0ZXJhdG9ycyIsICJJdGVyYXRvcnMiLCAicmV0dXJuVGhpcyIsICJ1bmN1cnJ5VGhpc0FjY2Vzc29yIiwgImFQb3NzaWJsZVByb3RvdHlwZSIsICJvYmplY3RTZXRQcm90b3R5cGVPZiIsICJzZXRQcm90b3R5cGVPZiIsICJzZXR0ZXIiLCAiQ09SUkVDVF9TRVRURVIiLCAiX19wcm90b19fIiwgIiQiLCAiRnVuY3Rpb25OYW1lIiwgImNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IiLCAiSXRlcmF0b3JDb25zdHJ1Y3RvciIsICJOQU1FIiwgIm5leHQiLCAiRU5VTUVSQUJMRV9ORVhUIiwgInJlcXVpcmUkJDEwIiwgInJlcXVpcmUkJDEyIiwgIkl0ZXJhdG9yc0NvcmUiLCAicmVxdWlyZSQkMTMiLCAiUFJPUEVSX0ZVTkNUSU9OX05BTUUiLCAicmVxdWlyZSQkMTEiLCAiS0VZUyIsICJWQUxVRVMiLCAiRU5UUklFUyIsICJpdGVyYXRvckRlZmluZSIsICJJdGVyYWJsZSIsICJERUZBVUxUIiwgIklTX1NFVCIsICJDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUiLCAibWV0aG9kcyIsICJLRVkiLCAiZ2V0SXRlcmF0aW9uTWV0aG9kIiwgIktJTkQiLCAiZGVmYXVsdEl0ZXJhdG9yIiwgIkl0ZXJhYmxlUHJvdG90eXBlIiwgIklOQ09SUkVDVF9WQUxVRVNfTkFNRSIsICJuYXRpdmVJdGVyYXRvciIsICJhbnlOYXRpdmVJdGVyYXRvciIsICJlbnRyaWVzIiwgInZhbHVlcyIsICJjcmVhdGVJdGVyUmVzdWx0T2JqZWN0IiwgImRvbmUiLCAiSW50ZXJuYWxTdGF0ZU1vZHVsZSIsICJkZWZpbmVJdGVyYXRvciIsICJTVFJJTkdfSVRFUkFUT1IiLCAic2V0SW50ZXJuYWxTdGF0ZSIsICJnZXRJbnRlcm5hbFN0YXRlIiwgIml0ZXJhdGVkIiwgInBvaW50IiwgInVuZGVmaW5lZCIsICJpdGVyYXRvckNsb3NlIiwgImtpbmQiLCAiaW5uZXJSZXN1bHQiLCAiaW5uZXJFcnJvciIsICJBcnJheVByb3RvdHlwZSIsICJpc0FycmF5SXRlcmF0b3JNZXRob2QiLCAiZnVuY3Rpb25Ub1N0cmluZyIsICJpbnNwZWN0U291cmNlIiwgIm5vb3AiLCAiZW1wdHkiLCAiY29uc3RydWN0IiwgImNvbnN0cnVjdG9yUmVnRXhwIiwgIklOQ09SUkVDVF9UT19TVFJJTkciLCAiaXNDb25zdHJ1Y3Rvck1vZGVybiIsICJpc0NvbnN0cnVjdG9yTGVnYWN5IiwgImlzQ29uc3RydWN0b3IiLCAiY2FsbGVkIiwgImNyZWF0ZVByb3BlcnR5IiwgInByb3BlcnR5S2V5IiwgImdldEl0ZXJhdG9yTWV0aG9kIiwgImdldEl0ZXJhdG9yIiwgInVzaW5nSXRlcmF0b3IiLCAiaXRlcmF0b3JNZXRob2QiLCAiY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyIsICIkQXJyYXkiLCAiU0FGRV9DTE9TSU5HIiwgIml0ZXJhdG9yV2l0aFJldHVybiIsICJyZXR1cm4iLCAiZnJvbSIsICJhcnJheUxpa2UiLCAiSVNfQ09OU1RSVUNUT1IiLCAibWFwZm4iLCAibWFwcGluZyIsICJzdGVwIiwgImNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiIsICJTS0lQX0NMT1NJTkciLCAiSVRFUkFUSU9OX1NVUFBPUlQiLCAiaXRlcmFibGUiLCAiQVJSQVlfSVRFUkFUT1IiLCAiZGVmaW5lSXRlcmF0b3IkMSIsICJBcmd1bWVudHMiLCAiZ2V0SXRlcmF0b3JNZXRob2RfMSIsICJET01JdGVyYWJsZXMiLCAiQ1NTUnVsZUxpc3QiLCAiQ1NTU3R5bGVEZWNsYXJhdGlvbiIsICJDU1NWYWx1ZUxpc3QiLCAiQ2xpZW50UmVjdExpc3QiLCAiRE9NUmVjdExpc3QiLCAiRE9NU3RyaW5nTGlzdCIsICJET01Ub2tlbkxpc3QiLCAiRGF0YVRyYW5zZmVySXRlbUxpc3QiLCAiRmlsZUxpc3QiLCAiSFRNTEFsbENvbGxlY3Rpb24iLCAiSFRNTENvbGxlY3Rpb24iLCAiSFRNTEZvcm1FbGVtZW50IiwgIkhUTUxTZWxlY3RFbGVtZW50IiwgIk1lZGlhTGlzdCIsICJNaW1lVHlwZUFycmF5IiwgIk5hbWVkTm9kZU1hcCIsICJOb2RlTGlzdCIsICJQYWludFJlcXVlc3RMaXN0IiwgIlBsdWdpbiIsICJQbHVnaW5BcnJheSIsICJTVkdMZW5ndGhMaXN0IiwgIlNWR051bWJlckxpc3QiLCAiU1ZHUGF0aFNlZ0xpc3QiLCAiU1ZHUG9pbnRMaXN0IiwgIlNWR1N0cmluZ0xpc3QiLCAiU1ZHVHJhbnNmb3JtTGlzdCIsICJTb3VyY2VCdWZmZXJMaXN0IiwgIlN0eWxlU2hlZXRMaXN0IiwgIlRleHRUcmFja0N1ZUxpc3QiLCAiVGV4dFRyYWNrTGlzdCIsICJUb3VjaExpc3QiLCAiQ09MTEVDVElPTl9OQU1FIiwgIkNvbGxlY3Rpb24iLCAiQ29sbGVjdGlvblByb3RvdHlwZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiaW5zdGFuY2UiLCAiQ29uc3RydWN0b3IiLCAiJCRLIiwgImRlc2MiLCAiaXNBcnJheSIsICJkb2VzTm90RXhjZWVkU2FmZUludGVnZXIiLCAiU1BFQ0lFUyIsICJhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciIsICJvcmlnaW5hbEFycmF5IiwgImFycmF5U3BlY2llc0NyZWF0ZSIsICJhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0IiwgIk1FVEhPRF9OQU1FIiwgImFycmF5IiwgImZvbyIsICJCb29sZWFuIiwgIklTX0NPTkNBVF9TUFJFQURBQkxFIiwgIklTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQiLCAiaXNDb25jYXRTcHJlYWRhYmxlIiwgInNwcmVhZGFibGUiLCAiYXJnIiwgImsiLCAiRSIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImdldE93blByb3BlcnR5TmFtZXMiLCAiYXJyYXlTbGljZVNpbXBsZSIsICJzdGFydCIsICJlbmQiLCAiZmluIiwgIiRnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgIndpbmRvd05hbWVzIiwgIm9iamVjdEdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCIsICJkZWZpbmVCdWlsdEluQWNjZXNzb3IiLCAid2VsbEtub3duU3ltYm9sV3JhcHBlZCIsICJ3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlIiwgIndlbGxLbm93blN5bWJvbERlZmluZSIsICJzeW1ib2xEZWZpbmVUb1ByaW1pdGl2ZSIsICJTeW1ib2xQcm90b3R5cGUiLCAiaGludCIsICJJU19NQVAiLCAiSVNfRklMVEVSIiwgIklTX1NPTUUiLCAiSVNfRVZFUlkiLCAiSVNfRklORF9JTkRFWCIsICJJU19GSUxURVJfUkVKRUNUIiwgIk5PX0hPTEVTIiwgImNhbGxiYWNrZm4iLCAic3BlY2lmaWNDcmVhdGUiLCAiYXJyYXlJdGVyYXRpb24iLCAibWFwIiwgImZpbHRlciIsICJzb21lIiwgImV2ZXJ5IiwgImZpbmQiLCAiZmluZEluZGV4IiwgImZpbHRlclJlamVjdCIsICIkdG9TdHJpbmciLCAicmVxdWlyZSQkMTQiLCAibmF0aXZlT2JqZWN0Q3JlYXRlIiwgInJlcXVpcmUkJDE1IiwgInJlcXVpcmUkJDE2IiwgImdldE93blByb3BlcnR5TmFtZXNNb2R1bGUiLCAicmVxdWlyZSQkMTciLCAiZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsIiwgInJlcXVpcmUkJDE4IiwgInJlcXVpcmUkJDE5IiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSIsICJyZXF1aXJlJCQyMCIsICJyZXF1aXJlJCQyMSIsICJyZXF1aXJlJCQyMiIsICJyZXF1aXJlJCQyMyIsICJyZXF1aXJlJCQyNCIsICJyZXF1aXJlJCQyNSIsICJyZXF1aXJlJCQyNiIsICJyZXF1aXJlJCQyOCIsICJyZXF1aXJlJCQyOSIsICJyZXF1aXJlJCQzMCIsICJyZXF1aXJlJCQzMSIsICJkZWZpbmVXZWxsS25vd25TeW1ib2wiLCAicmVxdWlyZSQkMzIiLCAiZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUiLCAicmVxdWlyZSQkMzMiLCAicmVxdWlyZSQkMzQiLCAicmVxdWlyZSQkMzUiLCAiJGZvckVhY2giLCAicmVxdWlyZSQkMzYiLCAiSElEREVOIiwgInJlcXVpcmUkJDI3IiwgIlNZTUJPTCIsICJSYW5nZUVycm9yIiwgIlFPYmplY3QiLCAibmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIm5hdGl2ZURlZmluZVByb3BlcnR5IiwgIm5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMiLCAibmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUiLCAiQWxsU3ltYm9scyIsICJPYmplY3RQcm90b3R5cGVTeW1ib2xzIiwgIlVTRV9TRVRURVIiLCAiZmluZENoaWxkIiwgImZhbGxiYWNrRGVmaW5lUHJvcGVydHkiLCAiT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciIsICJzZXRTeW1ib2xEZXNjcmlwdG9yIiwgImRlc2NyaXB0aW9uIiwgIiRkZWZpbmVQcm9wZXJ0aWVzIiwgInByb3BlcnRpZXMiLCAiJGdldE93blByb3BlcnR5U3ltYm9scyIsICJJU19PQkpFQ1RfUFJPVE9UWVBFIiwgIiQkSSIsICIkZm9yRWFjaCQxIiwgInVzZVNldHRlciIsICJ1c2VTaW1wbGUiLCAic3ltYm9sUmVnaXN0cnlEZXRlY3Rpb24iLCAia2V5Rm9yIiwgIk5BVElWRV9TWU1CT0xfUkVHSVNUUlkiLCAiU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSIsICJTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5IiwgImZvciIsICJzeW0iLCAiZ2V0UmVwbGFjZXJGdW5jdGlvbiIsICJyZXBsYWNlciIsICJyYXdMZW5ndGgiLCAiZWxlbWVudCIsICJrZXlzTGVuZ3RoIiwgInJvb3QiLCAiJHN0cmluZ2lmeSIsICJudW1iZXJUb1N0cmluZyIsICJ0ZXN0ZXIiLCAibG93IiwgImhpIiwgIldST05HX1NZTUJPTFNfQ09OVkVSU0lPTiIsICJJTExfRk9STUVEX1VOSUNPREUiLCAic3RyaW5naWZ5V2l0aFN5bWJvbHNGaXgiLCAiJHJlcGxhY2VyIiwgImZpeElsbEZvcm1lZCIsICJvZmZzZXQiLCAicHJldiIsICJzdHJpbmdpZnkiLCAic3BhY2UiLCAiSlNPTiIsICJNRVRBREFUQSIsICJ0aGlzU3ltYm9sVmFsdWUiLCAic3ltYm9sSXNSZWdpc3RlcmVkIiwgImlzUmVnaXN0ZXJlZFN5bWJvbCIsICIkaXNXZWxsS25vd25TeW1ib2wiLCAiaXNXZWxsS25vd25TeW1ib2wiLCAic3ltYm9sS2V5cyIsICJzeW1ib2xLZXlzTGVuZ3RoIiwgInN5bWJvbEtleSIsICJzeW1ib2xJc1dlbGxLbm93biIsICJpc1JlZ2lzdGVyZWQiLCAiaXNXZWxsS25vd24iLCAiX3R5cGVvZiIsICJvIiwgIl9TeW1ib2wiLCAiX1N5bWJvbCRpdGVyYXRvciIsICJfdG9Qcm9wZXJ0eUtleSIsICJwcmltIiwgIl9TeW1ib2wkdG9QcmltaXRpdmUiLCAicmVzIiwgIk51bWJlciIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfT2JqZWN0JGRlZmluZVByb3BlcnR5IiwgIl9jcmVhdGVDbGFzcyIsICJwcm90b1Byb3BzIiwgInN0YXRpY1Byb3BzIiwgImFycmF5U2V0TGVuZ3RoIiwgInNldEFycmF5TGVuZ3RoIiwgInByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCIsICJpdGVtIiwgImFyZ0NvdW50IiwgIm5hdGl2ZVNsaWNlIiwgIkhBU19TUEVDSUVTX1NVUFBPUlQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiYXJyIiwgImFycjIiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIm1pbkxlbiIsICJfY29udGV4dCIsICJhcnJheUxpa2VUb0FycmF5IiwgIl9zbGljZUluc3RhbmNlUHJvcGVydHkiLCAiX0FycmF5JGZyb20iLCAiX3NsaWNlZFRvQXJyYXkiLCAiX0FycmF5JGlzQXJyYXkiLCAibCIsICJfZ2V0SXRlcmF0b3JNZXRob2QiLCAiZSIsICJ1IiwgIl9wdXNoSW5zdGFuY2VQcm9wZXJ0eSIsICJ1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJub25JdGVyYWJsZVJlc3QiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIml0ZXIiLCAibm9uSXRlcmFibGVTcHJlYWQiLCAib3duS2V5cyIsICIkbWFwIiwgIm5hdGl2ZUtleXMiLCAiJERhdGUiLCAiRGF0ZSIsICJ0aGlzVGltZVZhbHVlIiwgImdldFRpbWUiLCAiJCR1IiwgIm5vdyIsICJhcnJheU1ldGhvZElzU3RyaWN0IiwgImFycmF5Rm9yRWFjaCIsICJuYXRpdmVSZXZlcnNlIiwgInJldmVyc2UiLCAiJCRzIiwgImRlbGV0ZVByb3BlcnR5T3JUaHJvdyIsICJkZWxldGVDb3VudCIsICJpbnNlcnRDb3VudCIsICJhY3R1YWxEZWxldGVDb3VudCIsICJ0byIsICJhY3R1YWxTdGFydCIsICIkaW5jbHVkZXMiLCAiTUFUQ0giLCAiaXNSZWdFeHAiLCAibm90QVJlZ0V4cCIsICJjb3JyZWN0SXNSZWdFeHBMb2dpYyIsICJyZWdleHAiLCAiZXJyb3IxIiwgImVycm9yMiIsICJzdHJpbmdJbmRleE9mIiwgInNlYXJjaFN0cmluZyIsICJhcnJheU1ldGhvZCIsICJzdHJpbmdNZXRob2QiLCAiU3RyaW5nUHJvdG90eXBlIiwgIm5hdGl2ZUdldFByb3RvdHlwZU9mIiwgIiRmaWx0ZXIiLCAid2hpdGVzcGFjZXMiLCAibHRyaW0iLCAiUmVnRXhwIiwgInJ0cmltIiwgInN0cmluZ1RyaW0iLCAidHJpbSIsICIkcGFyc2VJbnQiLCAicGFyc2VJbnQiLCAiaGV4IiwgIm51bWJlclBhcnNlSW50IiwgInJhZGl4IiwgIiRpbmRleE9mIiwgIm5hdGl2ZUluZGV4T2YiLCAiTkVHQVRJVkVfWkVSTyIsICJzZWFyY2hFbGVtZW50IiwgIkQiLCAiZW5naW5lSXNCdW4iLCAiQnVuIiwgIkVOR0lORV9JU19CVU4iLCAiVVNFUl9BR0VOVCIsICJ2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCIsICJwYXNzZWQiLCAicmVxdWlyZWQiLCAiV1JBUCIsICJzY2hlZHVsZXJzRml4IiwgInNjaGVkdWxlciIsICJoYXNUaW1lQXJnIiwgImZpcnN0UGFyYW1JbmRleCIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYm91bmRBcmdzIiwgInBhcmFtcyIsICJjYWxsYmFjayIsICJzZXRJbnRlcnZhbCIsICJzZXRUaW1lb3V0IiwgImZpbGwiLCAiZW5kUG9zIiwgIl9leHRlbmRzIiwgIl9pbmhlcml0c0xvb3NlIiwgInN1YkNsYXNzIiwgInN1cGVyQ2xhc3MiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJSZWZlcmVuY2VFcnJvciIsICJvdXRwdXQiLCAibmV4dEtleSIsICJ3aW4iLCAiYXNzaWduJDEiLCAiVkVORE9SX1BSRUZJWEVTIiwgIlRFU1RfRUxFTUVOVCIsICJyb3VuZCIsICJhYnMiLCAicHJlZml4ZWQiLCAicHJvcGVydHkiLCAicHJlZml4IiwgInByb3AiLCAiY2FtZWxQcm9wIiwgInRvVXBwZXJDYXNlIiwgIlBSRUZJWEVEX1RPVUNIX0FDVElPTiIsICJOQVRJVkVfVE9VQ0hfQUNUSU9OIiwgIlRPVUNIX0FDVElPTl9DT01QVVRFIiwgIlRPVUNIX0FDVElPTl9BVVRPIiwgIlRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04iLCAiVE9VQ0hfQUNUSU9OX05PTkUiLCAiVE9VQ0hfQUNUSU9OX1BBTl9YIiwgIlRPVUNIX0FDVElPTl9QQU5fWSIsICJUT1VDSF9BQ1RJT05fTUFQIiwgInRvdWNoTWFwIiwgImNzc1N1cHBvcnRzIiwgIkNTUyIsICJzdXBwb3J0cyIsICJnZXRUb3VjaEFjdGlvblByb3BzIiwgIlNVUFBPUlRfVE9VQ0giLCAiU1VQUE9SVF9QT0lOVEVSX0VWRU5UUyIsICJTVVBQT1JUX09OTFlfVE9VQ0giLCAiSU5QVVRfVFlQRV9UT1VDSCIsICJJTlBVVF9UWVBFX01PVVNFIiwgIkNPTVBVVEVfSU5URVJWQUwiLCAiSU5QVVRfU1RBUlQiLCAiSU5QVVRfRU5EIiwgIklOUFVUX0NBTkNFTCIsICJESVJFQ1RJT05fTk9ORSIsICJESVJFQ1RJT05fTEVGVCIsICJESVJFQ1RJT05fUklHSFQiLCAiRElSRUNUSU9OX1VQIiwgIkRJUkVDVElPTl9ET1dOIiwgIkRJUkVDVElPTl9IT1JJWk9OVEFMIiwgIkRJUkVDVElPTl9WRVJUSUNBTCIsICJESVJFQ1RJT05fQUxMIiwgIlBST1BTX1hZIiwgIlBST1BTX0NMSUVOVF9YWSIsICJlYWNoIiwgImNvbnRleHQiLCAiYm9vbE9yRm4iLCAiaW5TdHIiLCAic3RyIiwgIlRvdWNoQWN0aW9uIiwgIm1hbmFnZXIiLCAiX3Byb3RvIiwgImNvbXB1dGUiLCAiYWN0aW9ucyIsICJ1cGRhdGUiLCAidG91Y2hBY3Rpb24iLCAicmVjb2duaXplcnMiLCAicmVjb2duaXplciIsICJlbmFibGUiLCAiZ2V0VG91Y2hBY3Rpb24iLCAiaGFzUGFuWCIsICJoYXNQYW5ZIiwgInByZXZlbnREZWZhdWx0cyIsICJzcmNFdmVudCIsICJkaXJlY3Rpb24iLCAib2Zmc2V0RGlyZWN0aW9uIiwgInNlc3Npb24iLCAicHJldmVudGVkIiwgInByZXZlbnREZWZhdWx0IiwgImhhc05vbmUiLCAiaXNUYXBQb2ludGVyIiwgInBvaW50ZXJzIiwgImlzVGFwTW92ZW1lbnQiLCAiZGlzdGFuY2UiLCAiaXNUYXBUb3VjaFRpbWUiLCAiZGVsdGFUaW1lIiwgInByZXZlbnRTcmMiLCAiaGFzUGFyZW50IiwgIm5vZGUiLCAicGFyZW50Tm9kZSIsICJnZXRDZW50ZXIiLCAicG9pbnRlcnNMZW5ndGgiLCAiY2xpZW50WCIsICJjbGllbnRZIiwgInNpbXBsZUNsb25lSW5wdXREYXRhIiwgInRpbWVTdGFtcCIsICJjZW50ZXIiLCAiZGVsdGFYIiwgImRlbHRhWSIsICJnZXREaXN0YW5jZSIsICJwMSIsICJwMiIsICJnZXRBbmdsZSIsICJhdGFuMiIsICJnZXREaXJlY3Rpb24iLCAiZ2V0VmVsb2NpdHkiLCAiY29tcHV0ZUlucHV0RGF0YSIsICJmaXJzdElucHV0IiwgImZpcnN0TXVsdGlwbGUiLCAib2Zmc2V0Q2VudGVyIiwgImFuZ2xlIiwgIm9mZnNldERlbHRhIiwgInByZXZEZWx0YSIsICJwcmV2SW5wdXQiLCAiZXZlbnRUeXBlIiwgIm92ZXJhbGxWZWxvY2l0eSIsICJvdmVyYWxsVmVsb2NpdHlYIiwgIm92ZXJhbGxWZWxvY2l0eVkiLCAic2NhbGUiLCAicm90YXRpb24iLCAibWF4UG9pbnRlcnMiLCAidmVsb2NpdHkiLCAidmVsb2NpdHlYIiwgInZlbG9jaXR5WSIsICJsYXN0IiwgImxhc3RJbnRlcnZhbCIsICJ2IiwgInNyY0V2ZW50VGFyZ2V0IiwgImNvbXBvc2VkUGF0aCIsICJpbnB1dEhhbmRsZXIiLCAicG9pbnRlcnNMZW4iLCAiY2hhbmdlZFBvaW50ZXJzTGVuIiwgImNoYW5nZWRQb2ludGVycyIsICJpc0ZpcnN0IiwgImlzRmluYWwiLCAicmVjb2duaXplIiwgInNwbGl0U3RyIiwgImFkZEV2ZW50TGlzdGVuZXJzIiwgInR5cGVzIiwgInJlbW92ZUV2ZW50TGlzdGVuZXJzIiwgImdldFdpbmRvd0ZvckVsZW1lbnQiLCAiZG9jIiwgIm93bmVyRG9jdW1lbnQiLCAiZGVmYXVsdFZpZXciLCAiSW5wdXQiLCAiaW5wdXRUYXJnZXQiLCAiZG9tSGFuZGxlciIsICJldiIsICJpbml0IiwgImV2RWwiLCAiZXZUYXJnZXQiLCAiZXZXaW4iLCAiZGVzdHJveSIsICJpbkFycmF5IiwgImZpbmRCeUtleSIsICJQT0lOVEVSX0lOUFVUX01BUCIsICJwb2ludGVyZG93biIsICJwb2ludGVybW92ZSIsICJwb2ludGVydXAiLCAicG9pbnRlcmNhbmNlbCIsICJwb2ludGVyb3V0IiwgIklFMTBfUE9JTlRFUl9UWVBFX0VOVU0iLCAiUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyIsICJQT0lOVEVSX1dJTkRPV19FVkVOVFMiLCAiTVNQb2ludGVyRXZlbnQiLCAiUG9pbnRlckV2ZW50IiwgIlBvaW50ZXJFdmVudElucHV0IiwgIl9JbnB1dCIsICJfdGhpcyIsICJwb2ludGVyRXZlbnRzIiwgInJlbW92ZVBvaW50ZXIiLCAiZXZlbnRUeXBlTm9ybWFsaXplZCIsICJwb2ludGVyVHlwZSIsICJpc1RvdWNoIiwgInN0b3JlSW5kZXgiLCAicG9pbnRlcklkIiwgImJ1dHRvbiIsICJ0b0FycmF5IiwgInVuaXF1ZUFycmF5IiwgInNvcnQiLCAicmVzdWx0cyIsICJUT1VDSF9JTlBVVF9NQVAiLCAidG91Y2hzdGFydCIsICJ0b3VjaG1vdmUiLCAidG91Y2hlbmQiLCAidG91Y2hjYW5jZWwiLCAiVG91Y2hJbnB1dCIsICJ0YXJnZXRJZHMiLCAidG91Y2hlcyIsICJnZXRUb3VjaGVzIiwgInRhcmdldFRvdWNoZXMiLCAiYWxsVG91Y2hlcyIsICJpZGVudGlmaWVyIiwgImNoYW5nZWRUb3VjaGVzIiwgImNoYW5nZWRUYXJnZXRUb3VjaGVzIiwgInRvdWNoIiwgIk1PVVNFX0lOUFVUX01BUCIsICJtb3VzZWRvd24iLCAibW91c2Vtb3ZlIiwgIm1vdXNldXAiLCAiTW91c2VJbnB1dCIsICJwcmVzc2VkIiwgIndoaWNoIiwgIkRFRFVQX1RJTUVPVVQiLCAic2V0TGFzdFRvdWNoIiwgImV2ZW50RGF0YSIsICJwcmltYXJ5VG91Y2giLCAibGFzdFRvdWNoIiwgImx0cyIsICJsYXN0VG91Y2hlcyIsICJyZWNvcmRUb3VjaGVzIiwgImlzU3ludGhldGljRXZlbnQiLCAiVG91Y2hNb3VzZUlucHV0IiwgIl9tYW5hZ2VyIiwgImlucHV0RXZlbnQiLCAiaW5wdXREYXRhIiwgImlzTW91c2UiLCAic291cmNlQ2FwYWJpbGl0aWVzIiwgImZpcmVzVG91Y2hFdmVudHMiLCAibW91c2UiLCAiaW52b2tlQXJyYXlBcmciLCAiU1RBVEVfRkFJTEVEIiwgIl91bmlxdWVJZCIsICJnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyIiwgIm90aGVyUmVjb2duaXplciIsICJzdGF0ZVN0ciIsICJSZWNvZ25pemVyIiwgInNpbXVsdGFuZW91cyIsICJyZXF1aXJlRmFpbCIsICJyZWNvZ25pemVXaXRoIiwgImRyb3BSZWNvZ25pemVXaXRoIiwgInJlcXVpcmVGYWlsdXJlIiwgImRyb3BSZXF1aXJlRmFpbHVyZSIsICJoYXNSZXF1aXJlRmFpbHVyZXMiLCAiY2FuUmVjb2duaXplV2l0aCIsICJhZGRpdGlvbmFsRXZlbnQiLCAidHJ5RW1pdCIsICJjYW5FbWl0IiwgImlucHV0RGF0YUNsb25lIiwgInJlc2V0IiwgIlRhcFJlY29nbml6ZXIiLCAiX1JlY29nbml6ZXIiLCAidGFwcyIsICJpbnRlcnZhbCIsICJ0aW1lIiwgInRocmVzaG9sZCIsICJwb3NUaHJlc2hvbGQiLCAicFRpbWUiLCAicENlbnRlciIsICJfdGltZXIiLCAiX2lucHV0IiwgImNvdW50IiwgIl90aGlzMiIsICJ2YWxpZFBvaW50ZXJzIiwgInZhbGlkTW92ZW1lbnQiLCAidmFsaWRUb3VjaFRpbWUiLCAiZmFpbFRpbWVvdXQiLCAidmFsaWRJbnRlcnZhbCIsICJ2YWxpZE11bHRpVGFwIiwgIl90aGlzMyIsICJjbGVhclRpbWVvdXQiLCAidGFwQ291bnQiLCAiQXR0clJlY29nbml6ZXIiLCAiYXR0clRlc3QiLCAib3B0aW9uUG9pbnRlcnMiLCAiaXNSZWNvZ25pemVkIiwgImlzVmFsaWQiLCAiZGlyZWN0aW9uU3RyIiwgIlBhblJlY29nbml6ZXIiLCAiX0F0dHJSZWNvZ25pemVyIiwgInBYIiwgInBZIiwgImRpcmVjdGlvblRlc3QiLCAiaGFzTW92ZWQiLCAiU3dpcGVSZWNvZ25pemVyIiwgIlBpbmNoUmVjb2duaXplciIsICJpbk91dCIsICJSb3RhdGVSZWNvZ25pemVyIiwgIlByZXNzUmVjb2duaXplciIsICJ2YWxpZFRpbWUiLCAiZGVmYXVsdHMiLCAiZG9tRXZlbnRzIiwgImlucHV0Q2xhc3MiLCAiY3NzUHJvcHMiLCAidXNlclNlbGVjdCIsICJ0b3VjaFNlbGVjdCIsICJ0b3VjaENhbGxvdXQiLCAiY29udGVudFpvb21pbmciLCAidXNlckRyYWciLCAidGFwSGlnaGxpZ2h0Q29sb3IiLCAicHJlc2V0IiwgInRvZ2dsZUNzc1Byb3BzIiwgImFkZCIsICJvbGRDc3NQcm9wcyIsICJNYW5hZ2VyIiwgImhhbmRsZXJzIiwgInN0b3AiLCAiZm9yY2UiLCAic3RvcHBlZCIsICJjdXJSZWNvZ25pemVyIiwgImV4aXN0aW5nIiwgInJlbW92ZSIsICJ0YXJnZXRSZWNvZ25pemVyIiwgImV2ZW50cyIsICJnZXN0dXJlRXZlbnQiLCAiY3JlYXRlRXZlbnQiLCAiaW5pdEV2ZW50IiwgImdlc3R1cmUiLCAiZGlzcGF0Y2hFdmVudCIsICJTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQIiwgIlNpbmdsZVRvdWNoSW5wdXQiLCAic3RhcnRlZCIsICJub3JtYWxpemVTaW5nbGVUb3VjaGVzIiwgImNoYW5nZWQiLCAiZGVwcmVjYXRlIiwgIm1lc3NhZ2UiLCAiZGVwcmVjYXRpb25NZXNzYWdlIiwgIkVycm9yIiwgInN0YWNrIiwgImxvZyIsICJjb25zb2xlIiwgIndhcm4iLCAiZXh0ZW5kIiwgImRlc3QiLCAibWVyZ2UiLCAiaW5oZXJpdCIsICJjaGlsZCIsICJiYXNlIiwgImNoaWxkUCIsICJiYXNlUCIsICJfc3VwZXIiLCAiYmluZEZuIiwgIkhhbW1lciIsICJWRVJTSU9OIiwgIklOUFVUX01PVkUiLCAiU1RBVEVfUE9TU0lCTEUiLCAiU1RBVEVfQkVHQU4iLCAiU1RBVEVfQ0hBTkdFRCIsICJTVEFURV9FTkRFRCIsICJTVEFURV9SRUNPR05JWkVEIiwgIlNUQVRFX0NBTkNFTExFRCIsICJUYXAiLCAiUGFuIiwgIlN3aXBlIiwgIlBpbmNoIiwgIlJvdGF0ZSIsICJQcmVzcyIsICJSZWFsSGFtbWVyIiwgImQiLCAicCIsICJwYXJzZURPVCIsICJkb3QiLCAiZ3JhcGgiLCAiZ2V0VG9rZW4iLCAidG9rZW4iLCAic3RyaWN0IiwgInRva2VuVHlwZSIsICJUT0tFTlRZUEUiLCAiSURFTlRJRklFUiIsICJuZXdTeW50YXhFcnJvciIsICJwYXJzZVN0YXRlbWVudHMiLCAiZWRnZSIsICJwYXJzZUdyYXBoIiwgIk5PREVfQVRUUl9NQVBQSU5HIiwgImZvbnRzaXplIiwgImZvbnRjb2xvciIsICJsYWJlbGZvbnRjb2xvciIsICJmb250bmFtZSIsICJjb2xvciIsICJmaWxsY29sb3IiLCAidG9vbHRpcCIsICJsYWJlbHRvb2x0aXAiLCAiRURHRV9BVFRSX01BUFBJTkciLCAiX09iamVjdCRjcmVhdGUiLCAiTlVMTCIsICJERUxJTUlURVIiLCAiVU5LTk9XTiIsICJERUxJTUlURVJTIiwgIm5leHRQcmV2aWV3IiwgImlzQWxwaGFOdW1lcmljIiwgImNoYXJDb2RlIiwgInNldFZhbHVlIiwgInNoaWZ0IiwgImFkZE5vZGUiLCAiZ3JhcGhzIiwgIm5vZGVzIiwgImF0dHIiLCAiZyIsICJfaW5kZXhPZkluc3RhbmNlUHJvcGVydHkiLCAiYWRkRWRnZSIsICJlZGdlcyIsICJjcmVhdGVFZGdlIiwgImVuYWJsZWQiLCAiYXJyb3dzIiwgImlzQ29tbWVudCIsICJjMiIsICJpc05hTiIsICJTeW50YXhFcnJvciIsICJjaG9wIiwgInBhcnNlU3RhdGVtZW50IiwgInN1YmdyYXBoIiwgInBhcnNlU3ViZ3JhcGgiLCAicGFyc2VFZGdlIiwgInBhcnNlQXR0cmlidXRlTGlzdCIsICJzdWJncmFwaHMiLCAibm9mX2F0dHJfbGlzdCIsICJlZGdlU3R5bGVzIiwgImRhc2hlZCIsICJzb2xpZCIsICJkb3R0ZWQiLCAiYXJyb3dUeXBlcyIsICJib3giLCAiY3JvdyIsICJjdXJ2ZSIsICJpY3VydmUiLCAibm9ybWFsIiwgImludiIsICJ0ZWUiLCAidmVlIiwgImF0dHJfbGlzdCIsICJhdHRyX25hbWVzIiwgIl9pbmNsdWRlc0luc3RhbmNlUHJvcGVydHkiLCAiaWR4IiwgImRpciIsICJmcm9tX3R5cGUiLCAidG9fdHlwZSIsICJkaXJfdHlwZSIsICJfc3BsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJpZHhfYXJyb3ciLCAidG1wX2F0dHJfbGlzdCIsICJ0ZXh0IiwgIm1heExlbmd0aCIsICJzdWJzdHIiLCAic2V0UHJvcCIsICJwb3AiLCAiY29udmVydEF0dHIiLCAiY29udmVydGVkIiwgInZpc1Byb3AiLCAiX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5IiwgInZpc1Byb3BJIiwgIkRPVFRvR3JhcGgiLCAiX2NvbnRleHQyIiwgImRvdERhdGEiLCAiZ3JhcGhEYXRhIiwgImRvdE5vZGUiLCAiZ3JhcGhOb2RlIiwgImxhYmVsIiwgImltYWdlIiwgInNoYXBlIiwgIl9jb250ZXh0MyIsICJjb252ZXJ0RWRnZSIsICJkb3RFZGdlIiwgImdyYXBoRWRnZSIsICJfY29udGV4dDQiLCAiYXJyYXkxIiwgImFycmF5MiIsICJfY29udGV4dDUiLCAic3ViRWRnZSIsICJlbGVtMSIsICJlbGVtMiIsICJwYXJzZUdlcGhpIiwgImdlcGhpSlNPTiIsICJvcHRpb25zT2JqIiwgImluaGVyaXRDb2xvciIsICJmaXhlZCIsICJwYXJzZUNvbG9yIiwgImdFZGdlcyIsICJ2RWRnZXMiLCAiX21hcEluc3RhbmNlUHJvcGVydHkiLCAiZ0VkZ2UiLCAidkVkZ2UiLCAiYXR0cmlidXRlcyIsICJ0aXRsZSIsICJnTm9kZSIsICJ2Tm9kZSIsICJiYWNrZ3JvdW5kIiwgImJvcmRlciIsICJoaWdobGlnaHQiLCAiaG92ZXIiLCAiYWRkRGVzY3JpcHRpb24iLCAiYmFjayIsICJjcmVhdGVFZGdlRXJyb3IiLCAiZGVsIiwgImRlbGV0ZUNsdXN0ZXJFcnJvciIsICJlZGdlRGVzY3JpcHRpb24iLCAiZWRpdCIsICJlZGl0Q2x1c3RlckVycm9yIiwgImVkaXRFZGdlIiwgImVkaXRFZGdlRGVzY3JpcHRpb24iLCAiZWRpdE5vZGUiLCAiQ2FjaGVkSW1hZ2UiLCAiTlVNX0lURVJBVElPTlMiLCAiSW1hZ2UiLCAiY2FudmFzIiwgImluaXRpYWxpemVkIiwgIndpZHRoIiwgImhlaWdodCIsICJoMiIsICJoNCIsICJoOCIsICJoMTYiLCAidzIiLCAidzQiLCAidzgiLCAidzE2IiwgImNvb3JkaW5hdGVzIiwgIl9maWxsTWlwTWFwIiwgImdldENvbnRleHQiLCAiZHJhd0ltYWdlIiwgIml0ZXJhdGlvbnMiLCAiZmFjdG9yIiwgImxlZnQiLCAidG9wIiwgIkltYWdlcyIsICJpbWFnZXMiLCAiaW1hZ2VCcm9rZW4iLCAidXJsIiwgImJyb2tlblVybCIsICJpbWFnZVRvTG9hZEJyb2tlblVybE9uIiwgIm9uZXJyb3IiLCAiaW1hZ2VUb1JlZHJhd1dpdGgiLCAiY2FjaGVkSW1hZ2UiLCAiaW1nIiwgIm9ubG9hZCIsICJfZml4SW1hZ2VDb29yZGluYXRlcyIsICJfcmVkcmF3V2l0aEltYWdlIiwgIl90cnlsb2FkQnJva2VuVXJsIiwgImltYWdlVG9DYWNoZSIsICJib2R5IiwgIm9mZnNldFdpZHRoIiwgIm9mZnNldEhlaWdodCIsICJyZW1vdmVDaGlsZCIsICJhcnJheUJ1ZmZlck5vbkV4dGVuc2libGUiLCAiQXJyYXlCdWZmZXIiLCAiYnVmZmVyIiwgImlzRXh0ZW5zaWJsZSIsICJBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUiLCAiJGlzRXh0ZW5zaWJsZSIsICJvYmplY3RJc0V4dGVuc2libGUiLCAiZnJlZXppbmciLCAicHJldmVudEV4dGVuc2lvbnMiLCAiZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlIiwgIkZSRUVaSU5HIiwgIlJFUVVJUkVEIiwgInNldE1ldGFkYXRhIiwgIm9iamVjdElEIiwgIndlYWtEYXRhIiwgIm1ldGEiLCAiaW50ZXJuYWxNZXRhZGF0YU1vZHVsZSIsICJmYXN0S2V5IiwgImdldFdlYWtEYXRhIiwgIm9uRnJlZXplIiwgIlJlc3VsdCIsICJSZXN1bHRQcm90b3R5cGUiLCAiaXRlcmF0ZSIsICJ1bmJvdW5kRnVuY3Rpb24iLCAiaXRlckZuIiwgIkFTX0VOVFJJRVMiLCAiSVNfUkVDT1JEIiwgIklTX0lURVJBVE9SIiwgIklOVEVSUlVQVEVEIiwgImNvbmRpdGlvbiIsICJjYWxsRm4iLCAiYW5JbnN0YW5jZSIsICJJbnRlcm5hbE1ldGFkYXRhTW9kdWxlIiwgImludGVybmFsU3RhdGVHZXR0ZXJGb3IiLCAiY29sbGVjdGlvbiIsICJDT05TVFJVQ1RPUl9OQU1FIiwgIndyYXBwZXIiLCAiY29tbW9uIiwgIklTX1dFQUsiLCAiQURERVIiLCAiTmF0aXZlUHJvdG90eXBlIiwgImV4cG9ydGVkIiwgIklTX0FEREVSIiwgImdldENvbnN0cnVjdG9yIiwgInNldFN0cm9uZyIsICJkZWZpbmVCdWlsdElucyIsICJ1bnNhZmUiLCAic2V0U3BlY2llcyIsICJjb2xsZWN0aW9uU3Ryb25nIiwgImRlZmluZSIsICJwcmV2aW91cyIsICJlbnRyeSIsICJnZXRFbnRyeSIsICJyZW1vdmVkIiwgImNsZWFyIiwgImRlbGV0ZSIsICJJVEVSQVRPUl9OQU1FIiwgImdldEludGVybmFsQ29sbGVjdGlvblN0YXRlIiwgImdldEludGVybmFsSXRlcmF0b3JTdGF0ZSIsICJNYXAiLCAiR3JvdXBzIiwgIl9kZWZhdWx0SW5kZXgiLCAiX2dyb3VwSW5kZXgiLCAiX2RlZmF1bHRHcm91cHMiLCAiZGVmYXVsdE9wdGlvbnMiLCAidXNlRGVmYXVsdEdyb3VwcyIsICJfT2JqZWN0JGFzc2lnbiIsICJvcHRpb25GaWVsZHMiLCAiZ3JvdXBOYW1lIiwgImdyb3VwIiwgIl9ncm91cHMiLCAiX01hcCIsICJfZ3JvdXBOYW1lcyIsICJncm91cG5hbWUiLCAic2hvdWxkQ3JlYXRlIiwgImdsb2JhbElzRmluaXRlIiwgImlzRmluaXRlIiwgIm51bWJlcklzRmluaXRlIiwgIiRzb21lIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCAiJCQ5IiwgIl9kZWZpbmVQcm9wZXJ0eSIsICIkcGFyc2VGbG9hdCIsICJwYXJzZUZsb2F0IiwgIm51bWJlclBhcnNlRmxvYXQiLCAiSW5maW5pdHkiLCAidHJpbW1lZFN0cmluZyIsICJjaG9vc2lmeSIsICJzdWJPcHRpb24iLCAicGlsZSIsICJhbGxvd2VkIiwgImNob3NlbiIsICJ0b3BNb3N0IiwgImNob3NlbkVkZ2UiLCAicG9pbnRJblJlY3QiLCAicm90YXRpb25Qb2ludCIsICJ0bXAiLCAicmlnaHQiLCAiYm90dG9tIiwgImlzVmFsaWRMYWJlbCIsICJnZXRTZWxmUmVmQ29vcmRpbmF0ZXMiLCAiZGlzdGFuY2VUb0JvcmRlciIsICJ0b0JvcmRlckRpc3QiLCAieUZyb21Ob2RlQ2VudGVyIiwgInhGcm9tTm9kZUNlbnRlciIsICJMYWJlbEFjY3VtdWxhdG9yIiwgIm1lYXN1cmVUZXh0IiwgImxpbmVzIiwgIm1vZCIsICJibG9ja3MiLCAidG1wVGV4dCIsICJibG9jayIsICJfdmFsdWVzSW5zdGFuY2VQcm9wZXJ0eSIsICJsaW5lIiwgIl9hZGQiLCAidG1wTGluZXMiLCAidG1wTGluZSIsICJmaXJzdEVtcHR5QmxvY2siLCAidG1wQmxvY2tzIiwgImRldGVybWluZUxpbmVIZWlnaHRzIiwgImRldGVybWluZUxhYmVsU2l6ZSIsICJyZW1vdmVFbXB0eUJsb2NrcyIsICJ0YWdQYXR0ZXJuIiwgIl8iLCAiYWZ0ZXJCb2xkIiwgImFmdGVySXRhbCIsICJhZnRlck1vbm8iLCAiTWFya3VwQWNjdW11bGF0b3IiLCAiYm9sZCIsICJpdGFsIiwgIm1vbm8iLCAic3BhY2luZyIsICJtb2RTdGFjayIsICJtb2ROYW1lIiwgImNoIiwgInRhZ05hbWUiLCAiZW1pdEJsb2NrIiwgInVuc2hpZnQiLCAic2V0VGFnIiwgImFkdmFuY2UiLCAiX3RoaXMkcHJlcGFyZVJlZ0V4cDIiLCAicHJlcGFyZVJlZ0V4cCIsICJyZWdFeHAiLCAibWF0Y2hlZCIsICJuZXh0VGFnIiwgImNoZWNrVGFnIiwgInVuc2V0VGFnIiwgInByZXBhcmVkIiwgIkxhYmVsU3BsaXR0ZXIiLCAic2VsZWN0ZWQiLCAiZ2V0Rm9ybWF0dGluZ1ZhbHVlcyIsICJmaW5hbGl6ZSIsICJmb250IiwgImZvbnRPcHRpb25zIiwgIm5sTGluZXMiLCAibGluZUNvdW50IiwgIm11bHRpIiwgInNwbGl0QmxvY2tzIiwgIm1heFdkdCIsICJzcGxpdFN0cmluZ0ludG9MaW5lcyIsICJhcHBlbmQiLCAibmV3TGluZSIsICJtYXJrdXBTeXN0ZW0iLCAic3lzdGVtIiwgInBhcnNlRW50aXRpZXMiLCAicGFyc2VXUyIsICJwYXJzZVN0YXJ0VGFnIiwgInBhcnNlRW5kVGFnIiwgImJlZ2luYWJsZSIsICJwYXJzZU92ZXJyaWRlIiwgImRlY29kZU1hcmt1cFN5c3RlbSIsICJzcGxpdE1hcmtkb3duQmxvY2tzIiwgInNwbGl0SHRtbEJsb2NrcyIsICJjdXJXaWR0aCIsICJ3b3JkcyIsICJuZXdUZXh0IiwgIm92ZXJNYXhXaWR0aCIsICJhcHBlbmRMYXN0IiwgImdldExvbmdlc3RGaXQiLCAid29yZCIsICJnZXRMb25nZXN0Rml0V29yZCIsICJuZXdXIiwgIm11bHRpRm9udFN0eWxlIiwgIkxhYmVsIiwgImVkZ2VsYWJlbCIsICJwb2ludFRvU2VsZiIsICJiYXNlU2l6ZSIsICJzZXRPcHRpb25zIiwgInlMaW5lIiwgImlzRWRnZUxhYmVsIiwgImVsZW1lbnRPcHRpb25zIiwgImluaXRGb250T3B0aW9ucyIsICJsYWJlbERpcnR5IiwgIm5ld0ZvbnRPcHRpb25zIiwgInBhcnNlRm9udFN0cmluZyIsICJ2YWRqdXN0IiwgImNvbnN0cmFpbldpZHRoIiwgIm1pbldkdCIsICJjb25zdHJhaW5IZWlnaHQiLCAibWluSGd0IiwgInZhbGlnbiIsICJ3aWR0aENvbnN0cmFpbnQiLCAid2lkdGhDb25zdHJhaW50TWF4aW11bSIsICJ3aWR0aENvbnN0cmFpbnRNaW5pbXVtIiwgImhlaWdodENvbnN0cmFpbnQiLCAiaGVpZ2h0Q29uc3RyYWludE1pbmltdW0iLCAiaGVpZ2h0Q29uc3RyYWludFZhbGlnbiIsICJwcm9wYWdhdGVGb250cyIsICJkZWVwRXh0ZW5kIiwgImNvbnN0cmFpbiIsICJjaG9vc2VyIiwgIm1hcmdpbnMiLCAid2lkdGhCaWFzIiwgImhlaWdodEJpYXMiLCAiZHN0UGlsZSIsICJzcmNQaWxlIiwgImFkZEZvbnRUb1BpbGUiLCAicmV0IiwgInRtcFNob3J0aGFuZCIsICJvcHQiLCAibXVsdGlOYW1lIiwgIm9wdGlvbiIsICJtdWx0aUZvbnQiLCAib3B0aW9uTmFtZXMiLCAiZ2V0Rm9udE9wdGlvbiIsICJmb250UGlsZSIsICJhZGRGb250T3B0aW9uc1RvUGlsZSIsICJnZXRCYXNpY09wdGlvbnMiLCAiX2xvb3AiLCAibW9kT3B0aW9ucyIsICJnZXRGb250T3B0aW9ucyIsICJiYXNlbGluZSIsICJ2aWV3Rm9udFNpemUiLCAidmlldyIsICJzY2FsaW5nIiwgImRyYXdUaHJlc2hvbGQiLCAibWF4VmlzaWJsZSIsICJjYWxjdWxhdGVMYWJlbFNpemUiLCAiX2RyYXdCYWNrZ3JvdW5kIiwgIl9kcmF3VGV4dCIsICJmaWxsU3R5bGUiLCAiZ2V0U2l6ZSIsICJmaWxsUmVjdCIsICJfdGhpcyRfc2V0QWxpZ25tZW50MiIsICJfc2V0QWxpZ25tZW50IiwgInRleHRBbGlnbiIsICJsYWJlbEhlaWdodCIsICJhbGlnbiIsICJfdGhpcyRfZ2V0Q29sb3IyIiwgIl9nZXRDb2xvciIsICJzdHJva2VDb2xvciIsICJmb250Q29sb3IiLCAic3Ryb2tlV2lkdGgiLCAibGluZVdpZHRoIiwgInN0cm9rZVN0eWxlIiwgImxpbmVKb2luIiwgInN0cm9rZVRleHQiLCAiZmlsbFRleHQiLCAidGV4dEJhc2VsaW5lIiwgImluaXRpYWxTdHJva2VDb2xvciIsICJvcGFjaXR5IiwgIm92ZXJyaWRlT3BhY2l0eSIsICJfcHJvY2Vzc0xhYmVsIiwgImdldFZhbHVlIiwgImZhY2UiLCAibGFiZWxIaWdobGlnaHRCb2xkIiwgImZvbnRTdHJpbmciLCAic2VsZWN0ZWRTdGF0ZSIsICJob3ZlclN0YXRlIiwgImluVGV4dCIsICJkaWZmZXJlbnRTdGF0ZSIsICJfcHJvY2Vzc0xhYmVsVGV4dCIsICJvdXRPcHRpb25zIiwgImluT3B0aW9ucyIsICJuZXdPcHRpb25zQXJyYXkiLCAiYUNvbnN0cnVjdG9yIiwgIm5hdGl2ZUNvbnN0cnVjdCIsICJORVdfVEFSR0VUX0JVRyIsICJBUkdTX0JVRyIsICJUYXJnZXQiLCAibmV3VGFyZ2V0IiwgIiRhcmdzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJfT2JqZWN0JHNldFByb3RvdHlwZU9mIiwgIl9iaW5kSW5zdGFuY2VQcm9wZXJ0eSIsICJfaW5oZXJpdHMiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiX2dldFByb3RvdHlwZU9mIiwgIl9PYmplY3QkZ2V0UHJvdG90eXBlT2YiLCAiTm9kZUJhc2UiLCAibGFiZWxNb2R1bGUiLCAibWFyZ2luIiwgInJlZnJlc2hOZWVkZWQiLCAiYm91bmRpbmdCb3giLCAiYWRqdXN0U2l6ZXMiLCAiYm9yZGVyV2lkdGgiLCAicmVzaXplIiwgInNoYWRvdyIsICJzaGFkb3dDb2xvciIsICJzaGFkb3dCbHVyIiwgInNoYWRvd1NpemUiLCAic2hhZG93T2Zmc2V0WCIsICJzaGFkb3dYIiwgInNoYWRvd09mZnNldFkiLCAic2hhZG93WSIsICJib3JkZXJEYXNoZXMiLCAic2V0TGluZURhc2giLCAiZGFzaGVzIiwgInNoYXBlUHJvcGVydGllcyIsICJib3JkZXJDb2xvciIsICJzYXZlIiwgImVuYWJsZUJvcmRlckRhc2hlcyIsICJzdHJva2UiLCAiZGlzYWJsZUJvcmRlckRhc2hlcyIsICJyZXN0b3JlIiwgImVuYWJsZVNoYWRvdyIsICJfZmlsbEluc3RhbmNlUHJvcGVydHkiLCAiZGlzYWJsZVNoYWRvdyIsICJwZXJmb3JtU3Ryb2tlIiwgIl91cGRhdGVCb3VuZGluZ0JveCIsICJ0ZXh0U2l6ZSIsICJnZXRUZXh0U2l6ZSIsICJfY3JlYXRlU3VwZXIiLCAiRGVyaXZlZCIsICJoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9SZWZsZWN0JGNvbnN0cnVjdCIsICJQcm94eSIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIlN1cGVyIiwgIk5ld1RhcmdldCIsICJCb3giLCAiX05vZGVCYXNlIiwgIl9zZXRNYXJnaW5zIiwgIm5lZWRzUmVmcmVzaCIsICJkaW1lbnNpb25zIiwgImdldERpbWVuc2lvbnNGcm9tTGFiZWwiLCAiaW5pdENvbnRleHRGb3JEcmF3IiwgImJvcmRlclJhZGl1cyIsICJwZXJmb3JtRmlsbCIsICJ1cGRhdGVCb3VuZGluZ0JveCIsICJfYWRkQm91bmRpbmdCb3hNYXJnaW4iLCAiQ2lyY2xlSW1hZ2VCYXNlIiwgImxhYmVsT2Zmc2V0IiwgImltYWdlT2JqIiwgImltYWdlT2JqQWx0IiwgInNldEltYWdlcyIsICJzZWxlY3Rpb25fY2hhbmdlZCIsICJpbWFnZVRtcCIsICJpbWdQYWRkaW5nIiwgImltYWdlUGFkZGluZyIsICJvcHRJbWdQYWRkaW5nIiwgInVzZUltYWdlU2l6ZSIsICJyYXRpb193aWR0aCIsICJyYXRpb19oZWlnaHQiLCAiX2dldEltYWdlUGFkZGluZyIsICJnbG9iYWxBbHBoYSIsICJpbnRlcnBvbGF0aW9uIiwgImltZ1Bvc0xlZnQiLCAiaW1nUG9zVG9wIiwgImltZ1dpZHRoIiwgImltZ0hlaWdodCIsICJkcmF3SW1hZ2VBdFBvc2l0aW9uIiwgImxhYmVsRGltZW5zaW9ucyIsICJ5TGFiZWwiLCAiQ2lyY2xlIiwgIl9DaXJjbGVJbWFnZUJhc2UiLCAiZGlhbWV0ZXIiLCAiX2RyYXdSYXdDaXJjbGUiLCAiQ2lyY3VsYXJJbWFnZSIsICJfcmVzaXplSW1hZ2UiLCAic3dpdGNoSW1hZ2VzIiwgImxhYmVsWCIsICJsYWJlbFkiLCAiY29vcmRpbmF0ZU9yaWdpbiIsICJjbGlwIiwgIl9kcmF3SW1hZ2VBdFBvc2l0aW9uIiwgIl9kcmF3SW1hZ2VMYWJlbCIsICJTaGFwZUJhc2UiLCAiX3RoaXMkY3VzdG9tU2l6ZVdpZHRoIiwgIl90aGlzJGN1c3RvbVNpemVIZWlnaCIsICJjdXN0b21TaXplV2lkdGgiLCAiY3VzdG9tU2l6ZUhlaWdodCIsICJzaXplTXVsdGlwbGllciIsICJfbGVuIiwgIl9rZXkiLCAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIiwgImljb24iLCAiY29kZSIsICJkcmF3RXh0ZXJuYWxMYWJlbCIsICJfT2JqZWN0JGtleXMiLCAiX09iamVjdCRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiX2ZpbHRlckluc3RhbmNlUHJvcGVydHkiLCAiX09iamVjdCRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiX29iamVjdFNwcmVhZCIsICJfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCAiX09iamVjdCRkZWZpbmVQcm9wZXJ0aWVzIiwgIkN1c3RvbVNoYXBlIiwgIl9TaGFwZUJhc2UiLCAiY3R4UmVuZGVyZXIiLCAiZHJhd0xhdGVyIiwgImRyYXdOb2RlIiwgIm5vZGVEaW1lbnNpb25zIiwgIl9kaXN0YW5jZVRvQm9yZGVyIiwgIkRhdGFiYXNlIiwgIkRpYW1vbmQiLCAiX2RyYXdTaGFwZSIsICJEb3QiLCAiRWxsaXBzZSIsICJJY29uIiwgImljb25TaXplIiwgIl9pY29uIiwgIndlaWdodCIsICJzaWRlIiwgInVzZUJvcmRlcldpdGhJbWFnZSIsICJuZXV0cmFsYm9yZGVyV2lkdGgiLCAic2VsZWN0aW9uTGluZVdpZHRoIiwgImJvcmRlcldpZHRoU2VsZWN0ZWQiLCAiU3F1YXJlIiwgIkhleGFnb24iLCAiU3RhciIsICJUZXh0IiwgIlRyaWFuZ2xlIiwgIlRyaWFuZ2xlRG93biIsICJOb2RlIiwgImltYWdlbGlzdCIsICJncm91cGxpc3QiLCAiZ2xvYmFsT3B0aW9ucyIsICJicmlkZ2VPYmplY3QiLCAiYmFzZUZvbnRTaXplIiwgInByZWRlZmluZWRQb3NpdGlvbiIsICJjdXJyZW50U2hhcGUiLCAiX2xvY2FsQ29sb3IiLCAiY2hlY2tNYXNzIiwgIl9wYXJzZUludCIsICJfcGFyc2VGbG9hdCIsICJwYXJzZU9wdGlvbnMiLCAiX2xvYWRfaW1hZ2VzIiwgInVwZGF0ZUxhYmVsTW9kdWxlIiwgImNoZWNrT3BhY2l0eSIsICJ1cGRhdGVTaGFwZSIsICJoaWRkZW4iLCAicGh5c2ljcyIsICJsb2FkIiwgImJyb2tlbkltYWdlIiwgInVuc2VsZWN0ZWQiLCAidXBkYXRlR3JvdXBPcHRpb25zIiwgImN1cnJlbnRHcm91cCIsICJ0b3RhbCIsICJjdXN0b21TY2FsaW5nRnVuY3Rpb24iLCAic2l6ZURpZmYiLCAiZm9udERpZmYiLCAidmlzaWJsZSIsICJub2RlSWQiLCAibGFiZWxJZCIsICJvcmlnaW4iLCAicGFyZW50T3B0aW9ucyIsICJuZXdPcHRpb25zIiwgImdyb3VwTGlzdCIsICJncm91cE9iaiIsICJza2lwUHJvcGVydGllcyIsICJfT2JqZWN0JGdldE93blByb3BlcnR5TmFtZXMiLCAic2VsZWN0aXZlTm90RGVlcEV4dGVuZCIsICJhbGxvd0RlbGV0aW9uIiwgImNoZWNrQ29vcmRpbmF0ZU9yaWdpbiIsICJtZXJnZU9wdGlvbnMiLCAicGFyc2VkQ29sb3IiLCAiZmlsbElmRGVmaW5lZCIsICJtYXNzIiwgInN0cklkIiwgIlZBTElEQVRPUl9QUklOVF9TVFlMRSIsICJOb2Rlc0hhbmRsZXIiLCAiZ3JvdXBzIiwgImxheW91dEVuZ2luZSIsICJmdW5jdGlvbnMiLCAiY3JlYXRlTm9kZSIsICJub2Rlc0xpc3RlbmVycyIsICJpdGVtcyIsICJvbGREYXRhIiwgImJvbGRpdGFsIiwgImxldmVsIiwgImJpbmRFdmVudExpc3RlbmVycyIsICJlbWl0dGVyIiwgInJlZnJlc2giLCAiX051bWJlciRpc05hTiIsICJfTnVtYmVyJGlzRmluaXRlIiwgIl9pIiwgIl9PYmplY3Qka2V5czIiLCAiZG9Ob3RFbWl0IiwgIm9sZE5vZGVzRGF0YSIsICJpc0RhdGFWaWV3TGlrZSIsICJEYXRhU2V0IiwgIm1lIiwgImlkcyIsICJnZXRJZHMiLCAibmV3Tm9kZXMiLCAicG9zaXRpb25Jbml0aWFsbHkiLCAiY2hhbmdlZERhdGEiLCAiZGF0YUNoYW5nZWQiLCAiX3NvbWVJbnN0YW5jZVByb3BlcnR5IiwgIm5ld1ZhbHVlIiwgIm9sZFZhbHVlIiwgImNsZWFyUG9zaXRpb25zIiwgImRhdGFBcnJheSIsICJub2RlSW5kaWNlcyIsICJfc3RlcCIsICJkYXRhc2V0IiwgImdldERhdGFTZXQiLCAiX2l0ZXJhdG9yIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgImRzTm9kZSIsICJib2R5Tm9kZSIsICJlcnIiLCAibm9kZUxpc3QiLCAibm9kZU9iaiIsICJ0b0lkIiwgImZyb21JZCIsICJlZGdlTGlzdCIsICJfdGhpczQiLCAiX3NldFRpbWVvdXQiLCAiaXNEYXRhRGVzY3JpcHRvciIsICJyZWNlaXZlciIsICJfZ2V0IiwgIl9SZWZsZWN0JGdldCIsICIkaHlwb3QiLCAiaHlwb3QiLCAiTmFOIiwgInZhbHVlMSIsICJ2YWx1ZTIiLCAiZGl2IiwgInN1bSIsICJhTGVuIiwgImxhcmciLCAiRW5kUG9pbnQiLCAicG9pbnRzIiwgImFycm93RGF0YSIsICJ4dCIsICJ5dCIsICJfRW5kUG9pbnQiLCAidHJhbnNsYXRlIiwgInJvdGF0ZSIsICJpbWFnZVdpZHRoIiwgImltYWdlSGVpZ2h0IiwgIkFycm93IiwgIl9FbmRQb2ludDIiLCAiX3N1cGVyMiIsICJ0cmFuc2Zvcm0iLCAiZHJhd1BhdGgiLCAiQ3JvdyIsICJDdXJ2ZSIsICJwaSIsICJzdGFydEFuZ2xlIiwgImVuZEFuZ2xlIiwgIkludmVydGVkQ3VydmUiLCAiSW52ZXJ0ZWRUcmlhbmdsZSIsICJCYXIiLCAiVmVlIiwgIkVuZFBvaW50cyIsICJFZGdlQmFzZSIsICJfYm9keSIsICJfbGFiZWxNb2R1bGUiLCAiY29sb3JEaXJ0eSIsICJob3ZlcldpZHRoIiwgInNlbGVjdGlvbldpZHRoIiwgImZyb21Qb2ludCIsICJ0b1BvaW50IiwgIl9zZWxlY3RlZCIsICJfaG92ZXIiLCAidmlhTm9kZSIsICJnZXRWaWFOb2RlIiwgImdldENvbG9yIiwgIl9kcmF3RGFzaGVkTGluZSIsICJfZHJhd0xpbmUiLCAiX2xpbmUiLCAiX3RoaXMkX2dldENpcmNsZURhdGEyIiwgIl9nZXRDaXJjbGVEYXRhIiwgIl9jaXJjbGUiLCAiX2Zyb21Qb2ludCIsICJfdG9Qb2ludCIsICJsaW5lQ2FwIiwgImxpbmVEYXNoT2Zmc2V0IiwgIl90aGlzJF9nZXRDaXJjbGVEYXRhNCIsICJfdGhpcyRfZ2V0Q2lyY2xlRGF0YTYiLCAiX2ZpbmRCb3JkZXJQb3NpdGlvbiIsICJfZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlIiwgIl90aGlzJF9nZXRDaXJjbGVEYXRhJDIiLCAiaGlnaCIsICJzZWxmUmVmZXJlbmNlIiwgIm5lYXJOb2RlIiwgIm1pZGRsZSIsICJlbmRQb2ludE9mZnNldCIsICJhcnJvd1N0cmlrZXRocm91Z2giLCAiaXRlcmF0aW9uIiwgIl9wb2ludE9uQ2lyY2xlIiwgImRpZmZlcmVuY2UiLCAicG93IiwgImluaGVyaXRzQ29sb3IiLCAiZ3JkIiwgImNyZWF0ZUxpbmVhckdyYWRpZW50IiwgImZyb21Db2xvciIsICJ0b0NvbG9yIiwgImFkZENvbG9yU3RvcCIsICJhbmdsZUZyb20iLCAiYW5nbGVUbyIsICJyZW5kZXJCZWhpbmRUaGVOb2RlIiwgInBvaW50VEZyb20iLCAicG9pbnRUVG8iLCAieDEiLCAieTEiLCAieDMiLCAieTMiLCAiX2dldERpc3RhbmNlVG9FZGdlIiwgIl90aGlzJF9nZXRDaXJjbGVEYXRhOCIsICJweCIsICJweSIsICJhcnJvd1BvaW50IiwgIm5vZGUxIiwgIm5vZGUyIiwgInJldmVyc2VkIiwgInNjYWxlRmFjdG9yIiwgImZyb21BcnJvd1NjYWxlIiwgImZyb21BcnJvd1R5cGUiLCAidG9BcnJvd1NjYWxlIiwgInRvQXJyb3dUeXBlIiwgIm1pZGRsZUFycm93U2NhbGUiLCAibWlkZGxlQXJyb3dUeXBlIiwgInJlbGF0aXZlTGVuZ3RoIiwgIl9NYXRoJGh5cG90IiwgInNtb290aCIsICJwb2ludFQiLCAidmlhIiwgImd1aWRlUG9zIiwgImdldFBvaW50IiwgImhhbGZMZW5ndGgiLCAiZ3VpZGVQb3MxIiwgImd1aWRlUG9zMiIsICJfdGhpcyRfZ2V0Q2lyY2xlRGF0YTEwIiwgImNvcmUiLCAib3JpZ0N0eEF0dHIiLCAiYmFja2dyb3VuZENvbG9yIiwgImJhY2tncm91bmRTaXplIiwgInNldFN0cm9rZURhc2hlZCIsICJiYWNrZ3JvdW5kRGFzaGVzIiwgIkJlemllckVkZ2VCYXNlIiwgIl9FZGdlQmFzZSIsICJfZ2V0VmlhQ29vcmRpbmF0ZXMiLCAibWluRGlzdGFuY2UiLCAibGFzdFgiLCAibGFzdFkiLCAiX2dldERpc3RhbmNlVG9MaW5lIiwgInZpYU5vZGUxIiwgInZpYU5vZGUyIiwgInF1YWRyYXRpY0N1cnZlVG8iLCAiZHJhd0JhY2tncm91bmQiLCAiQmV6aWVyRWRnZUR5bmFtaWMiLCAiX0JlemllckVkZ2VCYXNlIiwgIl9ib3VuZEZ1bmN0aW9uIiwgInBvc2l0aW9uQmV6aWVyTm9kZSIsICJwaHlzaWNzQ2hhbmdlIiwgInNldHVwU3VwcG9ydE5vZGUiLCAiY29ubmVjdCIsICJwYXJlbnRFZGdlSWQiLCAiX2JlemllckN1cnZlIiwgImN4IiwgImN5IiwgImNyIiwgIl9maW5kQm9yZGVyUG9zaXRpb25CZXppZXIiLCAiX2dldERpc3RhbmNlVG9CZXppZXJFZGdlIiwgIkJlemllckVkZ2VTdGF0aWMiLCAic3RlcFgiLCAic3RlcFkiLCAicm91bmRuZXNzIiwgInhWaWEiLCAieVZpYSIsICJteUFuZ2xlIiwgIkN1YmljQmV6aWVyRWRnZUJhc2UiLCAidmlhMSIsICJ2aWEyIiwgInZlYyIsICJDdWJpY0JlemllckVkZ2UiLCAiX0N1YmljQmV6aWVyRWRnZUJhc2UiLCAidmlhTm9kZXMiLCAiZm9yY2VEaXJlY3Rpb24iLCAiX3JlZjIiLCAiX2dldERpc3RhbmNlVG9CZXppZXJFZGdlMiIsICJfcmVmNCIsICJTdHJhaWdodEVkZ2UiLCAiZWRnZVNlZ21lbnRMZW5ndGgiLCAidG9Cb3JkZXJQb2ludCIsICJFZGdlIiwgImJhc2VXaWR0aCIsICJlZGdlVHlwZSIsICJjb25uZWN0ZWQiLCAiYWZmZWN0c0xheW91dCIsICJ1cGRhdGVFZGdlVHlwZSIsICJfc2V0SW50ZXJhY3Rpb25XaWR0aHMiLCAidG9BcnJvdyIsICJmcm9tQXJyb3ciLCAibWlkZGxlQXJyb3ciLCAidG9BcnJvd1NyYyIsICJ0b0Fycm93SW1hZ2VXaWR0aCIsICJ0b0Fycm93SW1hZ2VIZWlnaHQiLCAibWlkZGxlQXJyb3dTcmMiLCAibWlkZGxlQXJyb3dJbWFnZVdpZHRoIiwgIm1pZGRsZUFycm93SW1hZ2VIZWlnaHQiLCAiZnJvbUFycm93U3JjIiwgImZyb21BcnJvd0ltYWdlV2lkdGgiLCAiZnJvbUFycm93SW1hZ2VIZWlnaHQiLCAic2VsZWN0ZWRXaWR0aCIsICJjaGFuZ2VJblR5cGUiLCAiY2xlYW51cCIsICJkaXNjb25uZWN0IiwgImF0dGFjaEVkZ2UiLCAiZGV0YWNoRWRnZSIsICJ3aWR0aERpZmYiLCAiZHJhd0xpbmUiLCAiZHJhd0xhYmVsIiwgImdldEFycm93RGF0YSIsICJkcmF3QXJyb3dIZWFkIiwgIl9nZXRSb3RhdGlvbiIsICJlZGdlSWQiLCAiaXNPdmVybGFwcGluZ1dpdGgiLCAieEZyb20iLCAieUZyb20iLCAieFRvIiwgInlUbyIsICJ4T2JqIiwgInlPYmoiLCAiZ2V0RGlzdGFuY2VUb0VkZ2UiLCAiY29weUZyb21HbG9iYWxzIiwgInNlbGVjdGl2ZURlZXBFeHRlbmQiLCAiX0pTT04kc3RyaW5naWZ5IiwgImlzU3RyaW5nIiwgImNvbG9yc0RlZmluZWQiLCAic2VsZlJlZmVyZW5jZVNpemUiLCAiRWRnZXNIYW5kbGVyIiwgImVkZ2VzTGlzdGVuZXJzIiwgImVkZ2VEYXRhIiwgInNtb290aE9wdGlvbnMiLCAicmVjb25uZWN0RWRnZXMiLCAib2xkRWRnZXNEYXRhIiwgImVkZ2VzRGF0YSIsICJvbGRFZGdlIiwgInNob3dJbnRlcm5hbElkcyIsICJfYWRkTWlzc2luZ0VkZ2VzIiwgIl9yZW1vdmVJbnZhbGlkRWRnZXMiLCAiX3RoaXM1IiwgImVkZ2VzVG9EZWxldGUiLCAidG9Ob2RlIiwgImZyb21Ob2RlIiwgImlzQ2x1c3RlciIsICJhZGRJZHMiLCAiQmFybmVzSHV0U29sdmVyIiwgInBoeXNpY3NCb2R5IiwgImJhcm5lc0h1dFRyZWUiLCAiX3JuZyIsICJBbGVhIiwgInRoZXRhSW52ZXJzZWQiLCAidGhldGEiLCAib3ZlcmxhcEF2b2lkYW5jZUZhY3RvciIsICJhdm9pZE92ZXJsYXAiLCAiZ3Jhdml0YXRpb25hbENvbnN0YW50IiwgInBoeXNpY3NOb2RlSW5kaWNlcyIsICJub2RlQ291bnQiLCAiX2Zvcm1CYXJuZXNIdXRUcmVlIiwgIl9nZXRGb3JjZUNvbnRyaWJ1dGlvbnMiLCAicGFyZW50QnJhbmNoIiwgIl9nZXRGb3JjZUNvbnRyaWJ1dGlvbiIsICJjaGlsZHJlbiIsICJOVyIsICJORSIsICJTVyIsICJTRSIsICJjaGlsZHJlbkNvdW50IiwgImNlbnRlck9mTWFzcyIsICJjYWxjU2l6ZSIsICJfY2FsY3VsYXRlRm9yY2VzIiwgImdyYXZpdHlGb3JjZSIsICJmeCIsICJmeSIsICJmb3JjZXMiLCAibWluWCIsICJtaW5ZIiwgIm1heFgiLCAibWF4WSIsICJyb290U2l6ZSIsICJoYWxmUm9vdFNpemUiLCAiY2VudGVyWCIsICJjZW50ZXJZIiwgInJhbmdlIiwgIm1heFdpZHRoIiwgIl9zcGxpdEJyYW5jaCIsICJfcGxhY2VJblRyZWUiLCAidG90YWxNYXNzIiwgInRvdGFsTWFzc0ludiIsICJiaWdnZXN0U2l6ZSIsICJza2lwTWFzc1VwZGF0ZSIsICJfdXBkYXRlQnJhbmNoTWFzcyIsICJyZWdpb24iLCAiX3BsYWNlSW5SZWdpb24iLCAiY29udGFpbmVkTm9kZSIsICJfaW5zZXJ0UmVnaW9uIiwgImNoaWxkU2l6ZSIsICJfZHJhd0JyYW5jaCIsICJicmFuY2giLCAiUmVwdWxzaW9uU29sdmVyIiwgInJlcHVsc2luZ0ZvcmNlIiwgIm5vZGVEaXN0YW5jZSIsICJIaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXIiLCAidGhlc2VOb2Rlc0Rpc3RhbmNlIiwgIlNwcmluZ1NvbHZlciIsICJlZGdlTGVuZ3RoIiwgIm5vZGUzIiwgImVkZ2VJbmRpY2VzIiwgInBoeXNpY3NFZGdlSW5kaWNlcyIsICJzcHJpbmdMZW5ndGgiLCAiX2NhbGN1bGF0ZVNwcmluZ0ZvcmNlIiwgInNwcmluZ0ZvcmNlIiwgInNwcmluZ0NvbnN0YW50IiwgIkhpZXJhcmNoaWNhbFNwcmluZ1NvbHZlciIsICJzcHJpbmdGeCIsICJzcHJpbmdGeSIsICJ0b3RhbEZ4IiwgInRvdGFsRnkiLCAiY29ycmVjdGlvbkZ4IiwgImNvcnJlY3Rpb25GeSIsICJDZW50cmFsR3Jhdml0eVNvbHZlciIsICJjZW50cmFsR3Jhdml0eSIsICJGb3JjZUF0bGFzMkJhc2VkUmVwdWxzaW9uU29sdmVyIiwgIl9CYXJuZXNIdXRTb2x2ZXIiLCAiZGVncmVlIiwgIkZvcmNlQXRsYXMyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlciIsICJfQ2VudHJhbEdyYXZpdHlTb2x2ZXIiLCAiUGh5c2ljc0VuZ2luZSIsICJ2ZWxvY2l0aWVzIiwgInBoeXNpY3NFbmFibGVkIiwgInNpbXVsYXRpb25JbnRlcnZhbCIsICJyZXF1aXJlc1RpbWVvdXQiLCAicHJldmlvdXNTdGF0ZXMiLCAicmVmZXJlbmNlU3RhdGUiLCAiZnJlZXplQ2FjaGUiLCAicmVuZGVyVGltZXIiLCAiYWRhcHRpdmVUaW1lc3RlcCIsICJhZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCIsICJhZGFwdGl2ZUNvdW50ZXIiLCAiYWRhcHRpdmVJbnRlcnZhbCIsICJzdGFiaWxpemVkIiwgInN0YXJ0ZWRTdGFiaWxpemF0aW9uIiwgInN0YWJpbGl6YXRpb25JdGVyYXRpb25zIiwgInJlYWR5IiwgImJhcm5lc0h1dCIsICJkYW1waW5nIiwgImZvcmNlQXRsYXMyQmFzZWQiLCAicmVwdWxzaW9uIiwgImhpZXJhcmNoaWNhbFJlcHVsc2lvbiIsICJtYXhWZWxvY2l0eSIsICJtaW5WZWxvY2l0eSIsICJzb2x2ZXIiLCAic3RhYmlsaXphdGlvbiIsICJ1cGRhdGVJbnRlcnZhbCIsICJvbmx5RHluYW1pY0VkZ2VzIiwgImZpdCIsICJ0aW1lc3RlcCIsICJ3aW5kIiwgImxheW91dEZhaWxlZCIsICJpbml0UGh5c2ljcyIsICJzdG9wU2ltdWxhdGlvbiIsICJzdGFydFNpbXVsYXRpb24iLCAidXBkYXRlUGh5c2ljc0RhdGEiLCAibm9kZXNTb2x2ZXIiLCAiZWRnZXNTb2x2ZXIiLCAiZ3Jhdml0eVNvbHZlciIsICJSZXB1bHNpb24iLCAiSGllcmFyY2hpY2FsUmVwdWxzaW9uIiwgIm1vZGVsT3B0aW9ucyIsICJzdGFiaWxpemUiLCAidmlld0Z1bmN0aW9uIiwgInNpbXVsYXRpb25TdGVwIiwgIl9lbWl0U3RhYmlsaXplZCIsICJzdGFydFRpbWUiLCAiX0RhdGUkbm93IiwgInBoeXNpY3NUaWNrIiwgInJ1bkRvdWJsZVNwZWVkIiwgImFtb3VudE9mSXRlcmF0aW9ucyIsICJzb2x2ZSIsICJtb3ZlTm9kZXMiLCAiX2V2YWx1YXRlU3RlcFF1YWxpdHkiLCAiX3N0YXJ0U3RhYmlsaXppbmciLCAicGh5c2ljc1N0ZXAiLCAicmV2ZXJ0IiwgImFkanVzdFRpbWVTdGVwIiwgIm5vZGVJZHMiLCAicG9zaXRpb25zIiwgInZ4IiwgInZ5IiwgInJlZmVyZW5jZSIsICJtYXhOb2RlVmVsb2NpdHkiLCAiYXZlcmFnZU5vZGVWZWxvY2l0eSIsICJub2RlVmVsb2NpdHkiLCAiX3BlcmZvcm1TdGVwIiwgIm0iLCAibWF4ViIsICJjYWxjdWxhdGVDb21wb25lbnRWZWxvY2l0eSIsICJ0YXJnZXRJdGVyYXRpb25zIiwgIl9mcmVlemVOb2RlcyIsICJfc3RhYmlsaXphdGlvbkJhdGNoIiwgInJ1bm5pbmciLCAic2VuZFByb2dyZXNzIiwgIl9maW5hbGl6ZVN0YWJpbGl6YXRpb24iLCAiX3Jlc3RvcmVGcm96ZW5Ob2RlcyIsICJmb3JjZVNpemUiLCAiYXJyb3dTaXplIiwgIkhTVlRvSGV4IiwgImdldFJhbmRvbVZhbHVlcyIsICJybmRzOCIsICJVaW50OEFycmF5IiwgInJuZyIsICJjcnlwdG8iLCAiYnl0ZVRvSGV4IiwgIm5hdGl2ZSIsICJyYW5kb21VVUlEIiwgInY0IiwgImJ1ZiIsICJybmRzIiwgIk5ldHdvcmtVdGlsIiwgImFsbE5vZGVzIiwgInNwZWNpZmljTm9kZXMiLCAiY2xvbmVkT3B0aW9ucyIsICJhbW91bnRPZkNvbm5lY3Rpb25zIiwgIkNsdXN0ZXIiLCAiX05vZGUiLCAiY29udGFpbmVkTm9kZXMiLCAiY29udGFpbmVkRWRnZXMiLCAiY2hpbGRDbHVzdGVySWQiLCAiY2hpbGRDbHVzdGVyIiwgImNsdXN0ZXJFZGdlIiwgInBhcmVudENsdXN0ZXJFZGdlIiwgImNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzIiwgInNyY0lkIiwgImVkZ2VSZXBsYWNlZEJ5SWQiLCAiQ2x1c3RlckVuZ2luZSIsICJjbHVzdGVyZWROb2RlcyIsICJjbHVzdGVyZWRFZGdlcyIsICJodWJzaXplIiwgIl9nZXRIdWJTaXplIiwgIl9jaGVja09wdGlvbnMiLCAibm9kZXNUb0NsdXN0ZXIiLCAiY2x1c3RlckJ5Q29ubmVjdGlvbiIsICJyZWZyZXNoRGF0YSIsICJqb2luQ29uZGl0aW9uIiwgImNoaWxkTm9kZXNPYmoiLCAiY2hpbGRFZGdlc09iaiIsICJfY2x1c3RlciIsICJlZGdlQ291bnQiLCAicmVsZXZhbnRFZGdlQ291bnQiLCAiY2x1c3RlcnMiLCAidXNlZE5vZGVzIiwgImNoZWNrSm9pbkNvbmRpdGlvbiIsICJjbG9uZU9wdGlvbnMiLCAiZ2F0aGVyaW5nU3VjY2Vzc2Z1bCIsICJjaGlsZE5vZGVJZCIsICJfZ2V0Q29ubmVjdGVkSWQiLCAiZm91bmRDbHVzdGVyIiwgImZpbmRDbHVzdGVyRGF0YSIsICJjbHVzdGVyQnlFZGdlQ291bnQiLCAiY2x1c3Rlck5vZGVQcm9wZXJ0aWVzIiwgInBhcmVudE5vZGVJZCIsICJwYXJlbnRDbG9uZWRPcHRpb25zIiwgImNoaWxkQ2xvbmVkT3B0aW9ucyIsICJjaGlsZE5vZGVJRHMiLCAiY2hpbGROb2RlIiwgImNoaWxkTm9kZUtleSIsICJjaGlsZEVkZ2UiLCAiY2x1c3RlckVkZ2VQcm9wZXJ0aWVzIiwgIm90aGVyTm9kZUlkIiwgImNoaWxkS2V5cyIsICJjcmVhdGVFZGdlcyIsICJuZXdFZGdlcyIsICJnZXROZXdFZGdlIiwgImNyZWF0ZWRFZGdlIiwgIm5ld0VkZ2UiLCAibWF0Y2hUb0RpcmVjdGlvbiIsICJtYXRjaEZyb21EaXJlY3Rpb24iLCAiX2NyZWF0ZUNsdXN0ZXJlZEVkZ2UiLCAiX2JhY2t1cEVkZ2VPcHRpb25zIiwgInRtcE5vZGVzVG9SZW1vdmUiLCAiYWxsb3dTaW5nbGVOb2RlQ2x1c3RlciIsICJwcm9jZXNzUHJvcGVydGllcyIsICJjaGlsZE5vZGVzT3B0aW9ucyIsICJjaGlsZEVkZ2VzT3B0aW9ucyIsICJjbHVzdGVySWQiLCAiX2dldENsdXN0ZXJQb3NpdGlvbiIsICJjbHVzdGVyTm9kZSIsICJfY2x1c3RlckVkZ2VzIiwgIm9yaWdpbmFsT3B0aW9ucyIsICJjbHVzdGVyTm9kZUlkIiwgImZpbmROb2RlIiwgInBhcmVudEluZGV4IiwgInBhcmVudENsdXN0ZXJOb2RlSWQiLCAiX29wZW5DaGlsZENsdXN0ZXIiLCAicmVsZWFzZUZ1bmN0aW9uIiwgImNsdXN0ZXJQb3NpdGlvbiIsICJuZXdQb3NpdGlvbnMiLCAiZWRnZXNUb0JlRGVsZXRlZCIsICJvdGhlck5vZGUiLCAidHJhbnNmZXJJZCIsICJ0cmFuc2ZlckVkZ2UiLCAib3RoZXJDbHVzdGVyIiwgIl9yZXN0b3JlRWRnZSIsICJub2Rlc0FycmF5IiwgImNvdW50ZXIiLCAiX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5IiwgImNsdXN0ZXJlZE5vZGVJZCIsICJzdGFydEVkZ2VJZCIsICJhbGxFZGdlSWRzIiwgImdldENsdXN0ZXJlZEVkZ2VzIiwgImNsdXN0ZXJlZEVkZ2VJZCIsICJnZXRCYXNlRWRnZXMiLCAiSWRzVG9IYW5kbGUiLCAiZG9uZUlkcyIsICJmb3VuZElkcyIsICJuZXh0SWQiLCAibmV4dEVkZ2UiLCAicmVwbGFjaW5nSWRzIiwgInJlcGxhY2luZ0lkIiwgImF2ZXJhZ2UiLCAiYXZlcmFnZVNxdWFyZWQiLCAiaHViQ291bnRlciIsICJsYXJnZXN0SHViIiwgInZhcmlhbmNlIiwgInN0YW5kYXJkRGV2aWF0aW9uIiwgImh1YlRocmVzaG9sZCIsICJiYXNlRWRnZSIsICJleHRyYU9wdGlvbnMiLCAiY2hpbGROb2RlcyIsICJjaGlsZEVkZ2VzIiwgIl9jcmVhdGVDbHVzdGVyRWRnZXMiLCAiY2x1c3RlcmVkTm9kZSIsICJkZWxldGVkTm9kZUlkcyIsICJkZWxldGVkRWRnZUlkcyIsICJlYWNoQ2x1c3Rlck5vZGUiLCAiZW5kUG9pbnRzVmFsaWQiLCAicmVwbGFjZWRJZHMiLCAibnVtVmFsaWQiLCAiY29udGFpbmVkRWRnZUlkIiwgImNvbnRhaW5lZEVkZ2UiLCAiZGVsZXRlZEVkZ2VJZCIsICJfZmlsdGVyIiwgInNob3VsZEJlQ2x1c3RlcmVkIiwgIl9pc0NsdXN0ZXJlZE5vZGUiLCAiX2lzQ2x1c3RlcmVkRWRnZSIsICJjbHVzdGVyRnJvbSIsICJfZ2V0Q2x1c3Rlck5vZGVGb3JOb2RlIiwgImNsdXN0ZXJUbyIsICJjb250aW51ZUxvb3AiLCAiX2xvb3AyIiwgImNsdXN0ZXJzVG9PcGVuIiwgIm51bU5vZGVzIiwgImFsbG93U2luZ2xlIiwgIm9wZW5DbHVzdGVyIiwgIl91cGRhdGVTdGF0ZSIsICJDYW52YXNSZW5kZXJlciIsICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAibW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgIndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJtc1JlcXVlc3RBbmltYXRpb25GcmFtZSIsICJyZWRyYXdSZXF1ZXN0ZWQiLCAicmVuZGVyaW5nQWN0aXZlIiwgInJlbmRlclJlcXVlc3RzIiwgImFsbG93UmVkcmF3IiwgImRyYWdnaW5nIiwgInpvb21pbmciLCAiaGlkZUVkZ2VzT25EcmFnIiwgImhpZGVFZGdlc09uWm9vbSIsICJoaWRlTm9kZXNPbkRyYWciLCAiX2RldGVybWluZUJyb3dzZXJNZXRob2QiLCAiem9vbVRpbWVvdXRJZCIsICJfcmVxdWVzdFJlZHJhdyIsICJfcmVzaXplTm9kZXMiLCAiX3JlZHJhdyIsICJfc3RhcnRSZW5kZXJpbmciLCAiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCAiZGVsYXkiLCAidGltZXIiLCAibXlXaW5kb3ciLCAiX3JlcXVlc3ROZXh0RnJhbWUiLCAiX3JlbmRlclN0ZXAiLCAiZHJhd0V4dGVybmFsTGFiZWxzIiwgImZyYW1lIiwgInNldFNpemUiLCAic2V0VHJhbnNmb3JtIiwgImNsaWVudFdpZHRoIiwgImNsaWVudEhlaWdodCIsICJjbGVhclJlY3QiLCAidHJhbnNsYXRpb24iLCAiX2RyYXdFZGdlcyIsICJfZHJhd05vZGVzIiwgIl9kcmF3QXJyb3dzIiwgIl9kcmF3U2VsZWN0aW9uQm94IiwgImFsd2F5c1Nob3ciLCAiaG92ZXJlZCIsICJ0b3BMZWZ0IiwgIkRPTXRvQ2FudmFzIiwgImJvdHRvbVJpZ2h0IiwgInZpZXdhYmxlQXJlYSIsICJpc1NlbGVjdGVkIiwgImlzQm91bmRpbmdCb3hPdmVybGFwcGluZ1dpdGgiLCAic2VsZWN0ZWRMZW5ndGgiLCAiaG92ZXJlZExlbmd0aCIsICJfaTIiLCAiX2RyYXdFeHRlcm5hbExhYmVsczIiLCAiZHJhd0Fycm93cyIsICJicm93c2VyVHlwZSIsICJzZWxlY3Rpb25Cb3giLCAic2hvdyIsICJvblRvdWNoIiwgImhhbW1lciIsICJvblJlbGVhc2UiLCAiQ2FudmFzIiwgInBpeGVsUmF0aW8iLCAiY2FtZXJhU3RhdGUiLCAiY2FudmFzVmlld0NlbnRlciIsICJfY2xlYW51cENhbGxiYWNrcyIsICJhdXRvUmVzaXplIiwgImhhbW1lckZyYW1lIiwgIl9jbGVhblVwIiwgIlJlc2l6ZU9ic2VydmVyIiwgIm9ic2VydmVyIiwgIm9ic2VydmUiLCAidW5vYnNlcnZlIiwgInJlc2l6ZVRpbWVyIiwgIl9zZXRJbnRlcnZhbCIsICJjbGVhckludGVydmFsIiwgInJlc2l6ZUZ1bmN0aW9uIiwgIl9vblJlc2l6ZSIsICJwcmV2aW91c1dpZHRoIiwgInByZXZpb3VzSGVpZ2h0IiwgIndpZHRoUmF0aW8iLCAiaGVpZ2h0UmF0aW8iLCAibmV3U2NhbGUiLCAiY3VycmVudFZpZXdDZW50ZXIiLCAiZGlzdGFuY2VGcm9tQ2VudGVyIiwgImNvbnRhaW5lciIsICJoYXNDaGlsZE5vZGVzIiwgImZpcnN0Q2hpbGQiLCAiY2xhc3NOYW1lIiwgIm92ZXJmbG93IiwgInRhYkluZGV4IiwgIl9zZXRQaXhlbFJhdGlvIiwgIm5vQ2FudmFzIiwgImZvbnRXZWlnaHQiLCAicGFkZGluZyIsICJpbm5lclRleHQiLCAiX2JpbmRIYW1tZXIiLCAiZHJhZyIsICJwaW5jaCIsICJldmVudExpc3RlbmVycyIsICJvblRhcCIsICJvbkRvdWJsZVRhcCIsICJvbkhvbGQiLCAib25EcmFnU3RhcnQiLCAib25EcmFnIiwgIm9uRHJhZ0VuZCIsICJvblBpbmNoIiwgIm9uTW91c2VXaGVlbCIsICJvbk1vdXNlTW92ZSIsICJvbkNvbnRleHQiLCAiX3ByZXBhcmVWYWx1ZSIsICJlbWl0RXZlbnQiLCAib2xkV2lkdGgiLCAib2xkSGVpZ2h0IiwgInByZXZpb3VzUmF0aW8iLCAiX2dldENhbWVyYVN0YXRlIiwgIm5ld1dpZHRoIiwgIm5ld0hlaWdodCIsICJfc2V0Q2FtZXJhU3RhdGUiLCAibnVtZXJhdG9yIiwgImRldmljZVBpeGVsUmF0aW8iLCAid2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyIsICJtb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIiwgIm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyIsICJvQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyIsICJiYWNraW5nU3RvcmVQaXhlbFJhdGlvIiwgIl9kZXRlcm1pbmVQaXhlbFJhdGlvIiwgIl9YY29udmVydENhbnZhc1RvRE9NIiwgIl9ZY29udmVydENhbnZhc1RvRE9NIiwgIl9YY29udmVydERPTXRvQ2FudmFzIiwgIl9ZY29udmVydERPTXRvQ2FudmFzIiwgIlZpZXciLCAiYW5pbWF0aW9uU3BlZWQiLCAicmVuZGVyUmVmcmVzaFJhdGUiLCAiYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb24iLCAiZWFzaW5nVGltZSIsICJzb3VyY2VTY2FsZSIsICJ0YXJnZXRTY2FsZSIsICJzb3VyY2VUcmFuc2xhdGlvbiIsICJ0YXJnZXRUcmFuc2xhdGlvbiIsICJsb2NrZWRPbk5vZGVJZCIsICJsb2NrZWRPbk5vZGVPZmZzZXQiLCAidG91Y2hUaW1lIiwgInJlbGVhc2VOb2RlIiwgImluaXRpYWxab29tIiwgInJhd09wdGlvbnMiLCAiYWxsTm9kZUlkcyIsICJtaW5ab29tTGV2ZWwiLCAiTUlOX1ZBTFVFIiwgIm1heFpvb21MZXZlbCIsICJ6b29tTGV2ZWwiLCAiY2FudmFzV2lkdGgiLCAiY2FudmFzSGVpZ2h0IiwgImdldFJhbmdlIiwgInBvc2l0aW9uRGVmaW5lZCIsICJ4Wm9vbUxldmVsIiwgInlab29tTGV2ZWwiLCAiYW5pbWF0aW9uT3B0aW9ucyIsICJmaW5kQ2VudGVyIiwgImFuaW1hdGlvbiIsICJub2RlUG9zaXRpb24iLCAibG9ja2VkT25Ob2RlIiwgImdldFZpZXdQb3NpdGlvbiIsICJkdXJhdGlvbiIsICJlYXNpbmdGdW5jdGlvbiIsICJhbmltYXRlVmlldyIsICJsb2NrZWQiLCAiX3RyYW5zaXRpb25SZWRyYXciLCAidmlld0NlbnRlciIsICJfbG9ja2VkUmVkcmF3IiwgImZpbmlzaGVkIiwgInByb2dyZXNzIiwgImVhc2luZ0Z1bmN0aW9ucyIsICJrZXljaGFybSIsICJfZXhwb3J0RnVuY3Rpb25zIiwgIl9ib3VuZCIsICJrZXlkb3duIiwgImtleXVwIiwgIl9rZXlzIiwgImZyb21DaGFyQ29kZSIsICJkb3duIiwgImhhbmRsZUV2ZW50IiwgInVwIiwgImtleUNvZGUiLCAiYm91bmQiLCAic2hpZnRLZXkiLCAiYmluZEFsbCIsICJnZXRLZXkiLCAidW5iaW5kIiwgIm5ld0JpbmRpbmdzIiwgIk5hdmlnYXRpb25IYW5kbGVyIiwgImljb25zQ3JlYXRlZCIsICJuYXZpZ2F0aW9uSGFtbWVycyIsICJib3VuZEZ1bmN0aW9ucyIsICJhY3RpdmF0ZWQiLCAiY29uZmlndXJlS2V5Ym9hcmRCaW5kaW5ncyIsICJuYXZpZ2F0aW9uQnV0dG9ucyIsICJsb2FkTmF2aWdhdGlvbkVsZW1lbnRzIiwgImNsZWFuTmF2aWdhdGlvbiIsICJuYXZpZ2F0aW9uRE9NIiwgIm5hdmlnYXRpb25EaXZzIiwgIm5hdmlnYXRpb25EaXZBY3Rpb25zIiwgIl9maXQiLCAiYmluZFRvUmVkcmF3IiwgIl9zdG9wTW92ZW1lbnQiLCAiYWN0aW9uIiwgImJvdW5kQWN0aW9uIiwgImtleWJvYXJkIiwgInNwZWVkIiwgInNjYWxlT2xkIiwgInpvb20iLCAic2NhbGVGcmFjIiwgInR4IiwgInR5IiwgInBvaW50ZXIiLCAiX2NvbnRleHQ2IiwgIl9jb250ZXh0NyIsICJfY29udGV4dDgiLCAiX2NvbnRleHQ5IiwgIl9jb250ZXh0MTAiLCAiX2NvbnRleHQxMSIsICJfY29udGV4dDEyIiwgIl9jb250ZXh0MTMiLCAiX2NvbnRleHQxNCIsICJfY29udGV4dDE1IiwgIl9jb250ZXh0MTYiLCAiX2NvbnRleHQxNyIsICJfY29udGV4dDE4IiwgIl9jb250ZXh0MTkiLCAiX2NvbnRleHQyMCIsICJfY29udGV4dDIxIiwgIl9jb250ZXh0MjIiLCAiX2NvbnRleHQyMyIsICJfY29udGV4dDI0IiwgIl9jb250ZXh0MjUiLCAiX2NvbnRleHQyNiIsICJfY29udGV4dDI3IiwgImJpbmRUb1dpbmRvdyIsICJ1bmJpbmRGcm9tUmVkcmF3IiwgIkludGVyYWN0aW9uSGFuZGxlciIsICJzZWxlY3Rpb25IYW5kbGVyIiwgIm5hdmlnYXRpb25IYW5kbGVyIiwgInBvcHVwIiwgInBvcHVwT2JqIiwgInBvcHVwVGltZXIiLCAiZ2V0UG9pbnRlciIsICJkcmFnTm9kZXMiLCAiZHJhZ1ZpZXciLCAiYXV0b0ZvY3VzIiwgInRvb2x0aXBEZWxheSIsICJ6b29tVmlldyIsICJ6b29tU3BlZWQiLCAiZ2V0QWJzb2x1dGVUb3AiLCAicGluY2hlZCIsICJtdWx0aXNlbGVjdCIsICJjdHJsS2V5IiwgIm1ldGFLZXkiLCAiY2hlY2tTZWxlY3Rpb25DaGFuZ2VzIiwgImNvbW1pdEFuZEVtaXQiLCAiZ2VuZXJhdGVDbGlja0V2ZW50IiwgInNlbGVjdEFkZGl0aW9uYWxPblBvaW50IiwgInNlbGVjdE9uUG9pbnQiLCAiZmlyc3RTZXQiLCAic2Vjb25kU2V0IiwgImFycmF5RGlmZiIsICJmaXJzdEFyciIsICJzZWNvbmRBcnIiLCAiZ2V0Tm9kZUF0IiwgInNlbGVjdGlvbiIsICJzZXRTZWxlY3Rpb24iLCAiZ2V0U2VsZWN0ZWROb2RlcyIsICJ4Rml4ZWQiLCAieUZpeGVkIiwgImRpZmZYIiwgImRpZmZZIiwgInNlbGVjdGlvbkJveFBvc2l0aW9uIiwgInNlbGVjdGlvbkJveFBvc2l0aW9uTWluTWF4IiwgInRvQmVTZWxlY3RlZE5vZGVzIiwgInNlbGVjdE9iamVjdCIsICJwcmVTY2FsZURyYWdQb2ludGVyIiwgInBvc3RTY2FsZURyYWdQb2ludGVyIiwgImNhbnZhc1RvRE9NIiwgInBvcHVwVmlzaWJsZSIsICJfY2hlY2tIaWRlUG9wdXAiLCAic2V0UG9zaXRpb24iLCAiZm9jdXMiLCAiX2NoZWNrU2hvd1BvcHVwIiwgImhvdmVyT2JqZWN0IiwgInBvaW50ZXJPYmoiLCAicHJldmlvdXNQb3B1cE9iaklkIiwgIm5vZGVVbmRlckN1cnNvciIsICJwb3B1cFR5cGUiLCAib3ZlcmxhcHBpbmdOb2RlcyIsICJnZXRUaXRsZSIsICJvdmVybGFwcGluZ0VkZ2VzIiwgIlBvcHVwIiwgInBvcHVwVGFyZ2V0VHlwZSIsICJwb3B1cFRhcmdldElkIiwgInNldFRleHQiLCAiaGlkZSIsICJfcG9pbnRlclRvUG9zaXRpb25PYmplY3QiLCAic3RpbGxPbk9iaiIsICJvdmVyTm9kZSIsICJTZXQiLCAidW5jYXVnaHRGcm96ZW5TdG9yZSIsICJmcm96ZW4iLCAiVW5jYXVnaHRGcm96ZW5TdG9yZSIsICJmaW5kVW5jYXVnaHRGcm96ZW4iLCAiSW50ZXJuYWxXZWFrTWFwIiwgImNvbGxlY3Rpb25XZWFrIiwgImVuZm9yY2VJbnRlcm5hbFN0YXRlIiwgImlzRnJvemVuIiwgImlzU2VhbGVkIiwgImZyZWV6ZSIsICJzZWFsIiwgIkZST1pFTiIsICJTRUFMRUQiLCAiSVNfSUUxMSIsICIkV2Vha01hcCIsICJXZWFrTWFwUHJvdG90eXBlIiwgIm5hdGl2ZVNldCIsICJuYXRpdmVEZWxldGUiLCAibmF0aXZlSGFzIiwgIm5hdGl2ZUdldCIsICJmcm96ZW5BcnJheSIsICJhcnJheUludGVncml0eUxldmVsIiwgImRpZmZTZXRzIiwgImRpZmYiLCAiX1NldCIsICJTaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3IiLCAiX1NpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvcl9wcmV2aW91c1NlbGVjdGlvbiIsICJfU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yX3NlbGVjdGlvbiIsICJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwgIl9pdGVtcyIsICJfbGVuMiIsICJfa2V5MiIsICJfaXRlbXMyIiwgImFkZGVkIiwgImRlbGV0ZWQiLCAiY2hhbmdlcyIsICJnZXRDaGFuZ2VzIiwgIl9fY2xhc3NQcml2YXRlRmllbGRTZXQiLCAiX3N0ZXAyIiwgIl9pdGVyYXRvcjIiLCAic2VsZWN0IiwgIl9zdGVwMyIsICJfaXRlcmF0b3IzIiwgInVuc2VsZWN0IiwgIlNlbGVjdGlvbkFjY3VtdWxhdG9yIiwgImNvbW1pdEhhbmRsZXIiLCAiX1NlbGVjdGlvbkFjY3VtdWxhdG9yX25vZGVzIiwgIl9TZWxlY3Rpb25BY2N1bXVsYXRvcl9lZGdlcyIsICJfU2VsZWN0aW9uQWNjdW11bGF0b3JfY29tbWl0SGFuZGxlciIsICJnZXRTZWxlY3Rpb24iLCAiX2NsYXNzUHJpdmF0ZUZpZWxkR2UiLCAiX2NsYXNzUHJpdmF0ZUZpZWxkR2UyIiwgIl9jbGFzc1ByaXZhdGVGaWVsZEdlMyIsICJzdW1tYXJ5IiwgImNvbW1pdCIsICJfbGVuMyIsICJyZXN0IiwgIl9rZXkzIiwgIl9jb25jYXRJbnN0YW5jZVByb3BlcnR5IiwgIlNlbGVjdGlvbkhhbmRsZXIiLCAiX3NlbGVjdGlvbkFjY3VtdWxhdG9yIiwgImhvdmVyT2JqIiwgInNlbGVjdGFibGUiLCAic2VsZWN0Q29ubmVjdGVkRWRnZXMiLCAiaG92ZXJDb25uZWN0ZWRFZGdlcyIsICJ1cGRhdGVTZWxlY3Rpb24iLCAiZ2V0RWRnZUF0IiwgInVuc2VsZWN0QWxsIiwgInNlbGVjdGlvbkNoYW5nZWQiLCAiZGVzZWxlY3RPYmplY3QiLCAiRE9NIiwgIm9sZFNlbGVjdGlvbiIsICJlbXB0eVNlbGVjdGlvbiIsICJfaW5pdEJhc2VFdmVudCIsICJnZXRDbGlja2VkSXRlbXMiLCAiY29udHJvbEVkZ2UiLCAiaGlnaGxpZ2h0RWRnZXMiLCAiX3RoaXMkX3NlbGVjdGlvbkFjY3VtIiwgImFkZEVkZ2VzIiwgImFkZE5vZGVzIiwgIl9yZW1vdmVGcm9tU2VsZWN0aW9uIiwgImNhbnZhc1BvcyIsICJyZXR1cm5Ob2RlIiwgInBvc2l0aW9uT2JqZWN0IiwgIl9nZXRBbGxOb2Rlc092ZXJsYXBwaW5nV2l0aCIsICJfZ2V0RWRnZXNPdmVybGFwcGluZ1dpdGgiLCAicmV0dXJuRWRnZSIsICJtaW5kaXN0IiwgIm92ZXJsYXBwaW5nRWRnZSIsICJkaXN0IiwgIl90aGlzJF9zZWxlY3Rpb25BY2N1bTIiLCAiZGVsZXRlTm9kZXMiLCAiZGVsZXRlRWRnZXMiLCAic2l6ZU5vZGVzIiwgInNpemVFZGdlcyIsICJfYWRkVG9Ib3ZlciIsICJob3ZlckNoYW5nZWQiLCAiZW1pdEJsdXJFdmVudCIsICJob3ZlcmVkRWRnZXNDb3VudCIsICJob3ZlcmVkTm9kZXNDb3VudCIsICJlbWl0SG92ZXJFdmVudCIsICJfaG92ZXJDb25uZWN0ZWRFZGdlcyIsICJzZWxlY3Rpb25DaGFuZ2VzIiwgInByZXZpb3VzU2VsZWN0aW9uIiwgImdldFNlbGVjdGVkTm9kZUlkcyIsICJnZXRTZWxlY3RlZEVkZ2VJZHMiLCAiZ2V0Tm9kZXMiLCAiZ2V0RWRnZXMiLCAiZ2V0SXRlbXNPblBvaW50IiwgIm1lcmdlU29ydCIsICJjb21wYXJlZm4iLCAiaW5zZXJ0aW9uU29ydCIsICJsbGVuZ3RoIiwgInJsZW5ndGgiLCAibGluZGV4IiwgInJpbmRleCIsICJhcnJheVNvcnQiLCAiZmlyZWZveCIsICJlbmdpbmVGZlZlcnNpb24iLCAiZW5naW5lSXNJZU9yRWRnZSIsICJ3ZWJraXQiLCAiZW5naW5lV2Via2l0VmVyc2lvbiIsICJpbnRlcm5hbFNvcnQiLCAiRkYiLCAiSUVfT1JfRURHRSIsICJWOCIsICJXRUJLSVQiLCAibmF0aXZlU29ydCIsICJGQUlMU19PTl9VTkRFRklORUQiLCAiRkFJTFNfT05fTlVMTCIsICJTVFJJQ1RfTUVUSE9EIiwgIlNUQUJMRV9TT1JUIiwgIml0ZW1zTGVuZ3RoIiwgImFycmF5TGVuZ3RoIiwgIklTX1JJR0hUIiwgIm1lbW8iLCAiYXJyYXlSZWR1Y2UiLCAiZW5naW5lSXNOb2RlIiwgIiRyZWR1Y2UiLCAicmVkdWNlIiwgIkRpcmVjdGlvbkludGVyZmFjZSIsICJhYnN0cmFjdCIsICJmYWtlX3VzZSIsICJub2RlQXJyYXkiLCAiVmVydGljYWxTdHJhdGVneSIsICJfRGlyZWN0aW9uSW50ZXJmYWNlIiwgImxheW91dCIsICJoaWVyYXJjaGljYWwiLCAiYWRkVG9PcmRlcmluZyIsICJnZXRUcmVlU2l6ZSIsICJtaW5feCIsICJtYXhfeCIsICJfc29ydEluc3RhbmNlUHJvcGVydHkiLCAibGV2ZWxTZXBhcmF0aW9uIiwgIkhvcml6b250YWxTdHJhdGVneSIsICJfRGlyZWN0aW9uSW50ZXJmYWNlMiIsICJtaW5feSIsICJtYXhfeSIsICIkZXZlcnkiLCAiZmlsbExldmVsc0J5RGlyZWN0aW9uQ3ljbGljIiwgImxldmVscyIsICJmaWxsTGV2ZWxzQnlEaXJlY3Rpb24iLCAiaXNFbnRyeU5vZGUiLCAic2hvdWxkTGV2ZWxCZVJlcGxhY2VkIiwgImxpbWl0IiwgIl9yZWR1Y2VJbnN0YW5jZVByb3BlcnR5IiwgImFjYyIsICJlZGdlSWRQcm9wIiwgIm5ld0xldmVsRGlmZiIsICJfcmV0IiwgIl9zdGVwJHZhbHVlIiwgImVudHJ5Tm9kZUlkIiwgImVudHJ5Tm9kZSIsICJfcmV0MiIsICJuZXdMZXZlbCIsICJ0YXJnZXROb2RlSWQiLCAib2xkTGV2ZWwiLCAiSGllcmFyY2hpY2FsU3RhdHVzIiwgImNoaWxkcmVuUmVmZXJlbmNlIiwgInBhcmVudFJlZmVyZW5jZSIsICJ0cmVlcyIsICJkaXN0cmlidXRpb25PcmRlcmluZyIsICJkaXN0cmlidXRpb25JbmRleCIsICJpc1RyZWUiLCAidHJlZUluZGV4IiwgInRyZWVJZCIsICJhY2N1bXVsYXRvciIsICJfZ2V0TWF4TGV2ZWwiLCAibm9kZUEiLCAibm9kZUIiLCAibWluTGV2ZWwiLCAicGFyZW50czEiLCAicGFyZW50czIiLCAiaXNQcmVzZW50IiwgImN1ckxldmVsIiwgIkxheW91dEVuZ2luZSIsICJfcmVzZXRSTkciLCAic2V0UGh5c2ljcyIsICJvcHRpb25zQmFja3VwIiwgInJhbmRvbVNlZWQiLCAiaW1wcm92ZWRMYXlvdXQiLCAiY2x1c3RlclRocmVzaG9sZCIsICJub2RlU3BhY2luZyIsICJ0cmVlU3BhY2luZyIsICJibG9ja1NoaWZ0aW5nIiwgImVkZ2VNaW5pbWl6YXRpb24iLCAicGFyZW50Q2VudHJhbGl6YXRpb24iLCAic29ydE1ldGhvZCIsICJzZXR1cEhpZXJhcmNoaWNhbExheW91dCIsICJsYXlvdXROZXR3b3JrIiwgImN1cnZlVHlwZSIsICJhbGxPcHRpb25zIiwgInByZXZIaWVyYXJjaGljYWxTdGF0ZSIsICJzZXREaXJlY3Rpb25TdHJhdGVneSIsICJhZGFwdEFsbE9wdGlvbnNGb3JIaWVyYXJjaGljYWxMYXlvdXQiLCAic2VlZCIsICJpbml0aWFsUmFuZG9tU2VlZCIsICJiYWNrdXBQaHlzaWNzIiwgImluZGljZXMiLCAiY2x1c3Rlck9wdGlvbnMiLCAic3RhcnRMZW5ndGgiLCAiYmVmb3JlIiwgIm1vZHVsZXMiLCAiY2x1c3RlcmluZyIsICJjbHVzdGVyQnJpZGdlcyIsICJjbHVzdGVyT3V0bGllcnMiLCAiX2RlY2x1c3RlckFsbCIsICJpbmZvIiwgImthbWFkYUthd2FpIiwgIl9zaGlmdFRvQ2VudGVyIiwgImdldFJhbmdlQ29yZSIsICJjbHVzdGVyc1ByZXNlbnQiLCAiZGVmaW5lZExldmVsIiwgInVuZGVmaW5lZExldmVsIiwgImxhc3ROb2RlT25MZXZlbCIsICJfZGV0ZXJtaW5lTGV2ZWxzQnlIdWJzaXplIiwgIl9kZXRlcm1pbmVMZXZlbHNEaXJlY3RlZCIsICJfZGV0ZXJtaW5lTGV2ZWxzQ3VzdG9tQ2FsbGJhY2siLCAiZW5zdXJlTGV2ZWwiLCAiZGlzdHJpYnV0aW9uIiwgIl9nZXREaXN0cmlidXRpb24iLCAiX2dlbmVyYXRlTWFwIiwgIl9wbGFjZU5vZGVzQnlIaWVyYXJjaHkiLCAiX2NvbmRlbnNlSGllcmFyY2h5IiwgInN0aWxsU2hpZnRpbmciLCAiYnJhbmNoZXMiLCAic2hpZnRUcmVlIiwgImdldFRyZWVTaXplcyIsICJ0cmVlV2lkdGhzIiwgIm51bVRyZWVzIiwgImdldEJyYW5jaE5vZGVzIiwgImdldEJyYW5jaEJvdW5kYXJ5IiwgImJyYW5jaE1hcCIsICJtYXhMZXZlbCIsICJtaW5TcGFjZSIsICJtYXhTcGFjZSIsICJicmFuY2hOb2RlIiwgImdldFBvc2l0aW9uIiwgIl90aGlzMyRfZ2V0U3BhY2VBcm91bjIiLCAiX2dldFNwYWNlQXJvdW5kTm9kZSIsICJtaW5TcGFjZU5vZGUiLCAibWF4U3BhY2VOb2RlIiwgInNoaWZ0RWxlbWVudHNDbG9zZXIiLCAiY2VudGVyUGFyZW50cyIsICJoaWVyIiwgImxldmVsTm9kZXMiLCAiaGFzU2FtZVBhcmVudCIsICJpblNhbWVTdWJOZXR3b3JrIiwgImJyYW5jaFNoaWZ0Q2FsbGJhY2siLCAiY2VudGVyUGFyZW50IiwgInBvczEiLCAicG9zMiIsICJkaWZmQWJzIiwgImJyYW5jaE5vZGVzMSIsICJicmFuY2hOb2RlczIiLCAibWF4TGV2ZWwxIiwgImdldE1heExldmVsIiwgIm1heExldmVsMiIsICJicmFuY2hOb2RlQm91bmRhcnkxIiwgImJyYW5jaE5vZGVCb3VuZGFyeTIiLCAibWF4MSIsICJtaW4yIiwgIm1pblNwYWNlMiIsICJfc2hpZnRCbG9jayIsICJfY2VudGVyUGFyZW50IiwgIm1pbmltaXplRWRnZUxlbmd0aCIsICJhbGxFZGdlcyIsICJub2RlTGV2ZWwiLCAiQzIiLCAicmVmZXJlbmNlTm9kZXMiLCAiYWJvdmVFZGdlcyIsICJnZXRGeCIsICJnZXRERngiLCAiZ2V0R3Vlc3MiLCAiZ3Vlc3MiLCAiZ3Vlc3NNYXAiLCAiZGZ4IiwgImJyYW5jaE5vZGVzIiwgImJyYW5jaEJvdW5kYXJ5IiwgIm1pblNwYWNlQnJhbmNoIiwgIm1heFNwYWNlQnJhbmNoIiwgImJyYW5jaE9mZnNldCIsICJfdGhpczMkX2dldFNwYWNlQXJvdW40IiwgIm5ld1Bvc2l0aW9uIiwgImdldExldmVscyIsICJjZW50ZXJBbGxQYXJlbnRzIiwgImNlbnRlckFsbFBhcmVudHNCb3R0b21VcCIsICJ0cmVlU2l6ZXMiLCAic2hpZnRCeSIsICJzaGlmdFRyZWVzIiwgInVzZU1hcCIsICJvcmRlcmluZyIsICJwcmV2Tm9kZSIsICJuZXh0Tm9kZSIsICJuZXh0UG9zIiwgInBhcmVudHMiLCAicGFyZW50SWQiLCAiX2dldENlbnRlclBvc2l0aW9uIiwgIl90aGlzJF9nZXRTcGFjZUFyb3VuZDIiLCAicG9zaXRpb25lZE5vZGVzIiwgIl9pbmRleEFycmF5VG9Ob2RlcyIsICJoYW5kbGVkTm9kZUNvdW50IiwgIl92YWxpZGF0ZVBvc2l0aW9uQW5kQ29udGludWUiLCAicGFyZW50TGV2ZWwiLCAiY2hpbGRSZWYiLCAiY2hpbGROb2RlTGV2ZWwiLCAicHJldmlvdXNQb3MiLCAic2hhcmVkUGFyZW50IiwgIl9maW5kQ29tbW9uUGFyZW50IiwgIndpdGhDaGlsZCIsICJfcGxhY2VCcmFuY2hOb2RlcyIsICJpZEFycmF5IiwgImZpeCIsICJodWJTaXplcyIsICJodWJTaXplIiwgIl9nZXRBY3RpdmVFZGdlcyIsICJfdGhpczYiLCAibGV2ZWxEb3duc3RyZWFtIiwgIl9nZXRIdWJTaXplcyIsICJfY3Jhd2xOZXR3b3JrIiwgIl90aGlzNyIsICJsZXZlbEEiLCAic2V0TWluTGV2ZWxUb1plcm8iLCAiX3RoaXM4IiwgInNoYWtlVG93YXJkcyIsICJfZXZlcnlJbnN0YW5jZVByb3BlcnR5IiwgIl90aGlzOSIsICJhZGRSZWxhdGlvbiIsICJjaGVja0lmVHJlZSIsICJfdGhpczEwIiwgInN0YXJ0aW5nTm9kZUlkIiwgImNyYXdsZXIiLCAidHJlZSIsICJzZXRUcmVlSW5kZXgiLCAiX3RoaXMxMSIsICJzaGlmdGVyIiwgImNoaWxkQSIsICJjaGlsZEIiLCAiX3RoaXMxMiIsICJpdGVyYXRlUGFyZW50cyIsICJwYXJlbnRSZWYiLCAiZmluZFBhcmVudCIsICJmb3VuZFBhcmVudCIsICJpc1ZlcnRpY2FsIiwgIm1pblBvcyIsICJtYXhQb3MiLCAiTWFuaXB1bGF0aW9uU3lzdGVtIiwgImludGVyYWN0aW9uSGFuZGxlciIsICJlZGl0TW9kZSIsICJtYW5pcHVsYXRpb25EaXYiLCAiZWRpdE1vZGVEaXYiLCAiY2xvc2VEaXYiLCAiX2RvbUV2ZW50TGlzdGVuZXJDbGVhbnVwUXVldWUiLCAidGVtcG9yYXJ5VUlGdW5jdGlvbnMiLCAidGVtcG9yYXJ5RXZlbnRGdW5jdGlvbnMiLCAidGVtcG9yYXJ5SWRzIiwgImd1aUVuYWJsZWQiLCAiaW5Nb2RlIiwgInNlbGVjdGVkQ29udHJvbE5vZGUiLCAiaW5pdGlhbGx5QWN0aXZlIiwgImRlbGV0ZU5vZGUiLCAiZGVsZXRlRWRnZSIsICJjb250cm9sTm9kZVN0eWxlIiwgIl9jbGVhbiIsICJfcmVzdG9yZSIsICJlbmFibGVFZGl0TW9kZSIsICJkaXNhYmxlRWRpdE1vZGUiLCAibG9jYWxlIiwgImxvY2FsZXMiLCAiX3NldHVwIiwgInNob3dNYW5pcHVsYXRvclRvb2xiYXIiLCAiX2NyZWF0ZUVkaXRCdXR0b24iLCAibWFuaXB1bGF0aW9uRE9NIiwgInNlbGVjdGVkTm9kZUNvdW50IiwgImdldFNlbGVjdGVkTm9kZUNvdW50IiwgInNlbGVjdGVkRWRnZUNvdW50IiwgImdldFNlbGVjdGVkRWRnZUNvdW50IiwgInNlbGVjdGVkVG90YWxDb3VudCIsICJuZWVkU2VwZXJhdG9yIiwgIl9jcmVhdGVBZGROb2RlQnV0dG9uIiwgIl9jcmVhdGVTZXBlcmF0b3IiLCAiX2NyZWF0ZUFkZEVkZ2VCdXR0b24iLCAiX2NyZWF0ZUVkaXROb2RlQnV0dG9uIiwgIl9jcmVhdGVFZGl0RWRnZUJ1dHRvbiIsICJfY3JlYXRlRGVsZXRlQnV0dG9uIiwgIl9iaW5kRWxlbWVudEV2ZW50cyIsICJ0b2dnbGVFZGl0TW9kZSIsICJfdGVtcG9yYXJ5QmluZEV2ZW50IiwgIl9jcmVhdGVCYWNrQnV0dG9uIiwgIl9jcmVhdGVEZXNjcmlwdGlvbiIsICJfcGVyZm9ybUFkZE5vZGUiLCAiZmluYWxpemVkRGF0YSIsICJhbGVydCIsICJfdGVtcG9yYXJ5QmluZFVJIiwgIl9oYW5kbGVDb25uZWN0IiwgIl9maW5pc2hDb25uZWN0IiwgIl9kcmFnQ29udHJvbE5vZGUiLCAiX2RyYWdTdGFydEVkZ2UiLCAiZWRpdFdpdGhvdXREcmFnIiwgImVkZ2VCZWluZ0VkaXRlZElkIiwgImNvbnRyb2xOb2RlRnJvbSIsICJfZ2V0TmV3VGFyZ2V0Tm9kZSIsICJjb250cm9sTm9kZVRvIiwgIl9jb250cm9sTm9kZVRvdWNoIiwgIl9jb250cm9sTm9kZURyYWdTdGFydCIsICJfY29udHJvbE5vZGVEcmFnIiwgIl9jb250cm9sTm9kZURyYWdFbmQiLCAiZmluZEJvcmRlclBvc2l0aW9ucyIsICJfcGVyZm9ybUVkaXRFZGdlIiwgInNlbGVjdGVkTm9kZXMiLCAic2VsZWN0ZWRFZGdlcyIsICJkZWxldGVGdW5jdGlvbiIsICJfY3JlYXRlV3JhcHBlcnMiLCAiX3JlbW92ZU1hbmlwdWxhdGlvbkRPTSIsICJfdGhpcyRvcHRpb25zJGxvY2FsZXMiLCAiX3RoaXMkb3B0aW9ucyRsb2NhbGVzMiIsICJzZXRBdHRyaWJ1dGUiLCAicmVjdXJzaXZlRE9NRGVsZXRlIiwgIl9jcmVhdGVCdXR0b24iLCAiX2NsZWFudXBET01FdmVudExpc3RlbmVycyIsICJfY2xlYW51cFRlbXBvcmFyeU5vZGVzQW5kRWRnZXMiLCAiX3VuYmluZFRlbXBvcmFyeVVJcyIsICJfdW5iaW5kVGVtcG9yYXJ5RXZlbnRzIiwgImFkZE5vZGVNb2RlIiwgImFkZEVkZ2VNb2RlIiwgImVkaXRFZGdlTW9kZSIsICJkZWxldGVCdG5DbGFzcyIsICJydGwiLCAiZGVsZXRlU2VsZWN0ZWQiLCAibGFiZWxDbGFzc05hbWUiLCAibmV3RnVuY3Rpb24iLCAiVUlmdW5jdGlvbk5hbWUiLCAiZXZlbnROYW1lIiwgImRvbUVsZW1lbnQiLCAia2V5dXBMaXN0ZW5lciIsICJfcmVmIiwgImluZGV4VGVtcEVkZ2UiLCAiX2NvbnRleHQyOCIsICJfY29udGV4dDI5IiwgImluZGV4VGVtcE5vZGUiLCAiZnJvbVNlbGVjdCIsICJ0b1NlbGVjdCIsICJvdmVybGFwcGluZ05vZGVJZHMiLCAidGFyZ2V0Tm9kZSIsICJjb25uZWN0aW9uRWRnZSIsICJjb25uZWN0RnJvbUlkIiwgIl9jb250ZXh0MzAiLCAiX2NvbnRleHQzMSIsICJfcGVyZm9ybUFkZEVkZ2UiLCAiY2xpY2tEYXRhIiwgImRlZmF1bHREYXRhIiwgInNvdXJjZU5vZGVJZCIsICJlZUZ1bmN0IiwgImJvb2wiLCAiZW5kUG9pbnRzIiwgIm5vZGVPcHRpb25zIiwgImJvb2xlYW4iLCAiZnVuY3Rpb24iLCAiX190eXBlX18iLCAibWluaW11bSIsICJkb20iLCAibWF4aW11bSIsICJjb25maWd1cmUiLCAic2hvd0J1dHRvbiIsICJfX2FueV9fIiwgImludGVyYWN0aW9uIiwgIm1hbmlwdWxhdGlvbiIsICJjbGlja1RvVXNlIiwgImFueSIsICJjb25maWd1cmVPcHRpb25zIiwgImNvbmZpZ3VyYXRvckhpZGVPcHRpb24iLCAicGFyZW50UGF0aCIsICJvcHRpb25OYW1lIiwgIkZsb3lkV2Fyc2hhbGwiLCAiZWRnZXNBcnJheSIsICJEX21hdHJpeCIsICJjZWxsIiwgImtub2RlIiwgImtjb2xtIiwgImlub2RlIiwgImljb2xtIiwgImpub2RlIiwgImpjb2xtIiwgIkthbWFkYUthd2FpIiwgImVkZ2VTdHJlbmd0aCIsICJkaXN0YW5jZVNvbHZlciIsICJpZ25vcmVDbHVzdGVycyIsICJnZXREaXN0YW5jZXMiLCAiX2NyZWF0ZUxfbWF0cml4IiwgIl9jcmVhdGVLX21hdHJpeCIsICJfY3JlYXRlRV9tYXRyaXgiLCAibWF4SXRlcmF0aW9ucyIsICJtYXhFbmVyZ3kiLCAiaGlnaEVfbm9kZUlkIiwgImRFX2R4IiwgImRFX2R5IiwgImRlbHRhX20iLCAic3ViSXRlcmF0aW9ucyIsICJfdGhpcyRfZ2V0SGlnaGVzdEVuZXIyIiwgIl9nZXRIaWdoZXN0RW5lcmd5Tm9kZSIsICJfbW92ZU5vZGUiLCAiX3RoaXMkX2dldEVuZXJneTIiLCAiX2dldEVuZXJneSIsICJtYXhFbmVyZ3lOb2RlSWQiLCAiZEVfZHhfbWF4IiwgImRFX2R5X21heCIsICJub2RlSWR4IiwgIl90aGlzJF9nZXRFbmVyZ3k0IiwgIl90aGlzJEVfc3VtcyRtIiwgIkVfc3VtcyIsICJkMkVfZHgyIiwgImQyRV9keGR5IiwgImQyRV9keTIiLCAieF9tIiwgInlfbSIsICJrbSIsICJLX21hdHJpeCIsICJsbSIsICJMX21hdHJpeCIsICJpSWR4IiwgInhfaSIsICJ5X2kiLCAia21hdCIsICJsbWF0IiwgImRlbm9taW5hdG9yIiwgIl91cGRhdGVFX21hdHJpeCIsICJFX21hdHJpeCIsICJtSWR4IiwgImNvbG0iLCAibGNvbG0iLCAib2xkRHgiLCAib2xkRHkiLCAiTmV0d29yayIsICJyZW5kZXJlciIsICJub2Rlc0hhbmRsZXIiLCAiZWRnZXNIYW5kbGVyIiwgIl9jcmVhdGUiLCAic2V0RGF0YSIsICJWYWxpZGF0b3IiLCAidmFsaWRhdGUiLCAicmF3Q29kZSIsICJfcmF3Q29kZSRzcGxpdDIiLCAicmF3TGFuZ3VhZ2UiLCAicmF3Q291bnRyeSIsICJsYW5ndWFnZSIsICJjb3VudHJ5IiwgImNvbmZpZ3VyYXRvciIsICJDb25maWd1cmF0b3IiLCAibmV0d29ya09wdGlvbnMiLCAic2V0TW9kdWxlT3B0aW9ucyIsICJhY3RpdmF0b3IiLCAiQWN0aXZhdG9yIiwgIl91cGRhdGVWaXNpYmxlSW5kaWNlcyIsICJlZGdlTm9kZXNQcmVzZW50IiwgIl91cGRhdGVWYWx1ZVJhbmdlIiwgImdlcGhpIiwgImdlcGhpRGF0YSIsICJ2YWx1ZU1pbiIsICJ2YWx1ZU1heCIsICJ2YWx1ZVRvdGFsIiwgInNldFZhbHVlUmFuZ2UiLCAiaXNBY3RpdmUiLCAiYWN0aXZlIiwgImNsdXN0ZXIiLCAiZ2V0Tm9kZXNJbkNsdXN0ZXIiLCAiY2x1c3RlckJ5SHVic2l6ZSIsICJ1cGRhdGVDbHVzdGVyZWROb2RlIiwgImdldEJhc2VFZGdlIiwgInVwZGF0ZUVkZ2UiLCAiZ2V0U2VlZCIsICJlZGl0Tm9kZU1vZGUiLCAiZ2V0UG9zaXRpb25zIiwgInN0b3JlUG9zaXRpb25zIiwgIm1vdmVOb2RlIiwgImdldEJvdW5kaW5nQm94IiwgImdldENvbm5lY3RlZE5vZGVzIiwgIm9iamVjdElkIiwgImdldENvbm5lY3RlZEVkZ2VzIiwgImdldFNlbGVjdGVkRWRnZXMiLCAic2VsZWN0Tm9kZXMiLCAic2VsZWN0RWRnZXMiLCAiY29tbWl0V2l0aG91dEVtaXR0aW5nIiwgInJlZHJhdyIsICJnZXRTY2FsZSIsICJnZXRPcHRpb25zRnJvbUNvbmZpZ3VyYXRvciIsICJnZXRPcHRpb25zIiwgInBhcnNlRE9UTmV0d29yayIsICJkb3RwYXJzZXIiLCAiX2NsYXNzQ2FsbENoZWNrIiwgImluc3RhbmNlIiwgIkNvbnN0cnVjdG9yIiwgIlR5cGVFcnJvciIsICJ0IiwgImNoZWNrIiwgIml0IiwgIk1hdGgiLCAiZ2xvYmFsIiwgImdsb2JhbFRoaXMiLCAid2luZG93IiwgInNlbGYiLCAidGhpcyIsICJGdW5jdGlvbiIsICJmYWlscyIsICJleGVjIiwgImVycm9yIiwgImZ1bmN0aW9uQmluZE5hdGl2ZSIsICJyZXF1aXJlJCQwIiwgInRlc3QiLCAiYmluZCIsICJoYXNPd25Qcm9wZXJ0eSIsICJOQVRJVkVfQklORCIsICJGdW5jdGlvblByb3RvdHlwZSIsICJwcm90b3R5cGUiLCAiYXBwbHkiLCAiY2FsbCIsICJmdW5jdGlvbkFwcGx5IiwgIlJlZmxlY3QiLCAiYXJndW1lbnRzIiwgInVuY3VycnlUaGlzV2l0aEJpbmQiLCAiZnVuY3Rpb25VbmN1cnJ5VGhpcyIsICJmbiIsICJ1bmN1cnJ5VGhpcyIsICJ0b1N0cmluZyIsICJzdHJpbmdTbGljZSIsICJzbGljZSIsICJjbGFzc29mUmF3IiwgInJlcXVpcmUkJDEiLCAiZnVuY3Rpb25VbmN1cnJ5VGhpc0NsYXVzZSIsICJkb2N1bWVudEFsbCIsICJkb2N1bWVudCIsICJhbGwiLCAiZG9jdW1lbnRBbGxfMSIsICJJU19IVE1MRERBIiwgImlzQ2FsbGFibGUiLCAiYXJndW1lbnQiLCAiZGVzY3JpcHRvcnMiLCAiT2JqZWN0IiwgImRlZmluZVByb3BlcnR5IiwgImdldCIsICJmdW5jdGlvbkNhbGwiLCAiJHByb3BlcnR5SXNFbnVtZXJhYmxlIiwgInByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJOQVNIT1JOX0JVRyIsICJvYmplY3RQcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJmIiwgIlYiLCAiZGVzY3JpcHRvciIsICJlbnVtZXJhYmxlIiwgIm1hdGNoIiwgInZlcnNpb24iLCAiY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yIiwgImJpdG1hcCIsICJ2YWx1ZSIsICJjb25maWd1cmFibGUiLCAid3JpdGFibGUiLCAiY2xhc3NvZiIsICJyZXF1aXJlJCQyIiwgIiRPYmplY3QiLCAic3BsaXQiLCAiaW5kZXhlZE9iamVjdCIsICJpc051bGxPclVuZGVmaW5lZCIsICIkVHlwZUVycm9yIiwgInJlcXVpcmVPYmplY3RDb2VyY2libGUiLCAiSW5kZXhlZE9iamVjdCIsICJ0b0luZGV4ZWRPYmplY3QiLCAiaXNPYmplY3QiLCAicGF0aCIsICJhRnVuY3Rpb24iLCAidmFyaWFibGUiLCAiZ2V0QnVpbHRJbiIsICJuYW1lc3BhY2UiLCAibWV0aG9kIiwgImxlbmd0aCIsICJvYmplY3RJc1Byb3RvdHlwZU9mIiwgImlzUHJvdG90eXBlT2YiLCAiZW5naW5lVXNlckFnZW50IiwgIm5hdmlnYXRvciIsICJTdHJpbmciLCAidXNlckFnZW50IiwgInByb2Nlc3MiLCAiRGVubyIsICJ2ZXJzaW9ucyIsICJ2OCIsICJlbmdpbmVWOFZlcnNpb24iLCAiVjhfVkVSU0lPTiIsICIkU3RyaW5nIiwgInN5bWJvbENvbnN0cnVjdG9yRGV0ZWN0aW9uIiwgImdldE93blByb3BlcnR5U3ltYm9scyIsICJzeW1ib2wiLCAiU3ltYm9sIiwgInNoYW0iLCAidXNlU3ltYm9sQXNVaWQiLCAiaXRlcmF0b3IiLCAiaXNTeW1ib2wiLCAicmVxdWlyZSQkMyIsICIkU3ltYm9sIiwgInRyeVRvU3RyaW5nIiwgImFDYWxsYWJsZSIsICJnZXRNZXRob2QiLCAiUCIsICJmdW5jIiwgImRlZmluZUdsb2JhbFByb3BlcnR5IiwgImtleSIsICJTSEFSRUQiLCAic2hhcmVkU3RvcmUiLCAic3RvcmUiLCAic2hhcmVkTW9kdWxlIiwgInB1c2giLCAibW9kZSIsICJjb3B5cmlnaHQiLCAibGljZW5zZSIsICJzb3VyY2UiLCAidG9PYmplY3QiLCAiaGFzT3duUHJvcGVydHlfMSIsICJoYXNPd24iLCAiaWQiLCAicG9zdGZpeCIsICJyYW5kb20iLCAidWlkIiwgInNoYXJlZCIsICJOQVRJVkVfU1lNQk9MIiwgInJlcXVpcmUkJDQiLCAiVVNFX1NZTUJPTF9BU19VSUQiLCAicmVxdWlyZSQkNSIsICJXZWxsS25vd25TeW1ib2xzU3RvcmUiLCAiY3JlYXRlV2VsbEtub3duU3ltYm9sIiwgIndpdGhvdXRTZXR0ZXIiLCAid2VsbEtub3duU3ltYm9sIiwgIm5hbWUiLCAib3JkaW5hcnlUb1ByaW1pdGl2ZSIsICJpbnB1dCIsICJwcmVmIiwgInZhbCIsICJ2YWx1ZU9mIiwgIlRPX1BSSU1JVElWRSIsICJ0b1ByaW1pdGl2ZSIsICJyZXN1bHQiLCAiZXhvdGljVG9QcmltIiwgInRvUHJvcGVydHlLZXkiLCAiRVhJU1RTIiwgImNyZWF0ZUVsZW1lbnQiLCAiZG9jdW1lbnRDcmVhdGVFbGVtZW50IiwgImllOERvbURlZmluZSIsICJhIiwgIkRFU0NSSVBUT1JTIiwgInByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlIiwgInJlcXVpcmUkJDYiLCAiSUU4X0RPTV9ERUZJTkUiLCAicmVxdWlyZSQkNyIsICIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIm9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJPIiwgInJlcGxhY2VtZW50IiwgImlzRm9yY2VkIiwgImZlYXR1cmUiLCAiZGV0ZWN0aW9uIiwgImRhdGEiLCAibm9ybWFsaXplIiwgIlBPTFlGSUxMIiwgIk5BVElWRSIsICJzdHJpbmciLCAicmVwbGFjZSIsICJ0b0xvd2VyQ2FzZSIsICJpc0ZvcmNlZF8xIiwgImZ1bmN0aW9uQmluZENvbnRleHQiLCAidGhhdCIsICJ2OFByb3RvdHlwZURlZmluZUJ1ZyIsICJhbk9iamVjdCIsICJWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyIsICIkZGVmaW5lUHJvcGVydHkiLCAiRU5VTUVSQUJMRSIsICJDT05GSUdVUkFCTEUiLCAiV1JJVEFCTEUiLCAib2JqZWN0RGVmaW5lUHJvcGVydHkiLCAiQXR0cmlidXRlcyIsICJjdXJyZW50IiwgImRlZmluZVByb3BlcnR5TW9kdWxlIiwgImNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSIsICJvYmplY3QiLCAicmVxdWlyZSQkOCIsICJyZXF1aXJlJCQ5IiwgIndyYXBDb25zdHJ1Y3RvciIsICJOYXRpdmVDb25zdHJ1Y3RvciIsICJXcmFwcGVyIiwgImIiLCAiYyIsICJfZXhwb3J0IiwgIm9wdGlvbnMiLCAiRk9SQ0VEIiwgIlVTRV9OQVRJVkUiLCAiVklSVFVBTF9QUk9UT1RZUEUiLCAic291cmNlUHJvcGVydHkiLCAidGFyZ2V0UHJvcGVydHkiLCAibmF0aXZlUHJvcGVydHkiLCAicmVzdWx0UHJvcGVydHkiLCAiVEFSR0VUIiwgInRhcmdldCIsICJHTE9CQUwiLCAiU1RBVElDIiwgInN0YXQiLCAiUFJPVE8iLCAicHJvdG8iLCAibmF0aXZlU291cmNlIiwgInRhcmdldFByb3RvdHlwZSIsICJmb3JjZWQiLCAiZG9udENhbGxHZXRTZXQiLCAid3JhcCIsICJyZWFsIiwgIiQiLCAiJCRQIiwgImV4cG9ydHMiLCAiZGVzYyIsICJpc0FycmF5IiwgIkFycmF5IiwgImNlaWwiLCAiZmxvb3IiLCAidHJ1bmMiLCAieCIsICJuIiwgInRvSW50ZWdlck9ySW5maW5pdHkiLCAibnVtYmVyIiwgIm1pbiIsICJ0b0xlbmd0aCIsICJsZW5ndGhPZkFycmF5TGlrZSIsICJvYmoiLCAiZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyIiwgImNyZWF0ZVByb3BlcnR5IiwgInByb3BlcnR5S2V5IiwgInRvU3RyaW5nVGFnU3VwcG9ydCIsICJUT19TVFJJTkdfVEFHX1NVUFBPUlQiLCAiVE9fU1RSSU5HX1RBRyIsICJDT1JSRUNUX0FSR1VNRU5UUyIsICJ0YWciLCAiY2FsbGVlIiwgImZ1bmN0aW9uVG9TdHJpbmciLCAiaW5zcGVjdFNvdXJjZSIsICJub29wIiwgImVtcHR5IiwgImNvbnN0cnVjdCIsICJjb25zdHJ1Y3RvclJlZ0V4cCIsICJJTkNPUlJFQ1RfVE9fU1RSSU5HIiwgImlzQ29uc3RydWN0b3JNb2Rlcm4iLCAiaXNDb25zdHJ1Y3RvckxlZ2FjeSIsICJpc0NvbnN0cnVjdG9yIiwgImNhbGxlZCIsICJTUEVDSUVTIiwgIiRBcnJheSIsICJhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciIsICJvcmlnaW5hbEFycmF5IiwgIkMiLCAiY29uc3RydWN0b3IiLCAidW5kZWZpbmVkIiwgImFycmF5U3BlY2llc0NyZWF0ZSIsICJhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0IiwgIk1FVEhPRF9OQU1FIiwgImFycmF5IiwgImZvbyIsICJCb29sZWFuIiwgInJlcXVpcmUkJDExIiwgIklTX0NPTkNBVF9TUFJFQURBQkxFIiwgInJlcXVpcmUkJDEwIiwgIklTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQiLCAiY29uY2F0IiwgImlzQ29uY2F0U3ByZWFkYWJsZSIsICJzcHJlYWRhYmxlIiwgImFyaXR5IiwgImFyZyIsICJpIiwgImsiLCAibGVuIiwgIkUiLCAiQSIsICJtYXgiLCAidG9BYnNvbHV0ZUluZGV4IiwgImluZGV4IiwgImludGVnZXIiLCAiY3JlYXRlTWV0aG9kIiwgIklTX0lOQ0xVREVTIiwgIiR0aGlzIiwgImVsIiwgImZyb21JbmRleCIsICJhcnJheUluY2x1ZGVzIiwgImluY2x1ZGVzIiwgImluZGV4T2YiLCAiaGlkZGVuS2V5cyIsICJvYmplY3RLZXlzSW50ZXJuYWwiLCAibmFtZXMiLCAiZW51bUJ1Z0tleXMiLCAiaW50ZXJuYWxPYmplY3RLZXlzIiwgIm9iamVjdEtleXMiLCAia2V5cyIsICJvYmplY3REZWZpbmVQcm9wZXJ0aWVzIiwgImRlZmluZVByb3BlcnRpZXMiLCAiUHJvcGVydGllcyIsICJwcm9wcyIsICJhY3RpdmVYRG9jdW1lbnQiLCAiaHRtbCIsICJzaGFyZWRLZXkiLCAiZGVmaW5lUHJvcGVydGllc01vZHVsZSIsICJQUk9UT1RZUEUiLCAiU0NSSVBUIiwgIklFX1BST1RPIiwgIkVtcHR5Q29uc3RydWN0b3IiLCAic2NyaXB0VGFnIiwgImNvbnRlbnQiLCAiTFQiLCAiTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCIsICJ3cml0ZSIsICJjbG9zZSIsICJ0ZW1wIiwgInBhcmVudFdpbmRvdyIsICJOdWxsUHJvdG9PYmplY3QiLCAiQWN0aXZlWE9iamVjdCIsICJpZnJhbWVEb2N1bWVudCIsICJpZnJhbWUiLCAiSlMiLCAiZG9tYWluIiwgInN0eWxlIiwgImRpc3BsYXkiLCAiYXBwZW5kQ2hpbGQiLCAic3JjIiwgImNvbnRlbnRXaW5kb3ciLCAib3BlbiIsICJGIiwgIm9iamVjdENyZWF0ZSIsICJjcmVhdGUiLCAib2JqZWN0R2V0T3duUHJvcGVydHlOYW1lcyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImFycmF5U2xpY2VTaW1wbGUiLCAic3RhcnQiLCAiZW5kIiwgImZpbiIsICIkZ2V0T3duUHJvcGVydHlOYW1lcyIsICJhcnJheVNsaWNlIiwgIndpbmRvd05hbWVzIiwgIm9iamVjdEdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiZGVmaW5lQnVpbHRJbiIsICJkZWZpbmVCdWlsdEluQWNjZXNzb3IiLCAid2VsbEtub3duU3ltYm9sV3JhcHBlZCIsICJzZXQiLCAiaGFzIiwgIndyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUiLCAid2VsbEtub3duU3ltYm9sRGVmaW5lIiwgIk5BTUUiLCAic3ltYm9sRGVmaW5lVG9QcmltaXRpdmUiLCAiU3ltYm9sUHJvdG90eXBlIiwgImhpbnQiLCAib2JqZWN0VG9TdHJpbmciLCAic2V0VG9TdHJpbmdUYWciLCAiVEFHIiwgIlNFVF9NRVRIT0QiLCAiV2Vha01hcCIsICJOQVRJVkVfV0VBS19NQVAiLCAiT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQiLCAic3RhdGUiLCAibWV0YWRhdGEiLCAiZmFjYWRlIiwgIlNUQVRFIiwgImludGVybmFsU3RhdGUiLCAiZW5mb3JjZSIsICJnZXR0ZXJGb3IiLCAiVFlQRSIsICJ0eXBlIiwgIklTX01BUCIsICJJU19GSUxURVIiLCAiSVNfU09NRSIsICJJU19FVkVSWSIsICJJU19GSU5EX0lOREVYIiwgIklTX0ZJTFRFUl9SRUpFQ1QiLCAiTk9fSE9MRVMiLCAiY2FsbGJhY2tmbiIsICJzcGVjaWZpY0NyZWF0ZSIsICJib3VuZEZ1bmN0aW9uIiwgImFycmF5SXRlcmF0aW9uIiwgImZvckVhY2giLCAibWFwIiwgImZpbHRlciIsICJzb21lIiwgImV2ZXJ5IiwgImZpbmQiLCAiZmluZEluZGV4IiwgImZpbHRlclJlamVjdCIsICJyZXF1aXJlJCQxMiIsICIkdG9TdHJpbmciLCAicmVxdWlyZSQkMTMiLCAicmVxdWlyZSQkMTQiLCAibmF0aXZlT2JqZWN0Q3JlYXRlIiwgInJlcXVpcmUkJDE1IiwgInJlcXVpcmUkJDE2IiwgImdldE93blByb3BlcnR5TmFtZXNNb2R1bGUiLCAicmVxdWlyZSQkMTciLCAiZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsIiwgInJlcXVpcmUkJDE4IiwgImdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSIsICJyZXF1aXJlJCQxOSIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUiLCAicmVxdWlyZSQkMjAiLCAicmVxdWlyZSQkMjEiLCAicmVxdWlyZSQkMjIiLCAicmVxdWlyZSQkMjMiLCAicmVxdWlyZSQkMjQiLCAicmVxdWlyZSQkMjUiLCAicmVxdWlyZSQkMjYiLCAicmVxdWlyZSQkMjgiLCAicmVxdWlyZSQkMjkiLCAicmVxdWlyZSQkMzAiLCAicmVxdWlyZSQkMzEiLCAiZGVmaW5lV2VsbEtub3duU3ltYm9sIiwgInJlcXVpcmUkJDMyIiwgImRlZmluZVN5bWJvbFRvUHJpbWl0aXZlIiwgInJlcXVpcmUkJDMzIiwgInJlcXVpcmUkJDM0IiwgIkludGVybmFsU3RhdGVNb2R1bGUiLCAicmVxdWlyZSQkMzUiLCAiJGZvckVhY2giLCAicmVxdWlyZSQkMzYiLCAiSElEREVOIiwgInJlcXVpcmUkJDI3IiwgIlNZTUJPTCIsICJzZXRJbnRlcm5hbFN0YXRlIiwgImdldEludGVybmFsU3RhdGUiLCAiT2JqZWN0UHJvdG90eXBlIiwgIlJhbmdlRXJyb3IiLCAiUU9iamVjdCIsICJuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAibmF0aXZlRGVmaW5lUHJvcGVydHkiLCAibmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyIsICJuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJBbGxTeW1ib2xzIiwgIk9iamVjdFByb3RvdHlwZVN5bWJvbHMiLCAiVVNFX1NFVFRFUiIsICJmaW5kQ2hpbGQiLCAiZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSIsICJPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yIiwgInNldFN5bWJvbERlc2NyaXB0b3IiLCAiZGVzY3JpcHRpb24iLCAiJGRlZmluZVByb3BlcnRpZXMiLCAicHJvcGVydGllcyIsICIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgIklTX09CSkVDVF9QUk9UT1RZUEUiLCAic2V0dGVyIiwgIiQkTiIsICIkZm9yRWFjaCQxIiwgInVzZVNldHRlciIsICJ1c2VTaW1wbGUiLCAic3ltYm9sUmVnaXN0cnlEZXRlY3Rpb24iLCAia2V5Rm9yIiwgIk5BVElWRV9TWU1CT0xfUkVHSVNUUlkiLCAiU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSIsICJTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5IiwgImZvciIsICJzeW0iLCAiZ2V0UmVwbGFjZXJGdW5jdGlvbiIsICJyZXBsYWNlciIsICJyYXdMZW5ndGgiLCAiZWxlbWVudCIsICJrZXlzTGVuZ3RoIiwgInJvb3QiLCAiaiIsICIkc3RyaW5naWZ5IiwgImNoYXJBdCIsICJjaGFyQ29kZUF0IiwgIm51bWJlclRvU3RyaW5nIiwgInRlc3RlciIsICJsb3ciLCAiaGkiLCAiV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIiwgIklMTF9GT1JNRURfVU5JQ09ERSIsICJzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCIsICJhcmdzIiwgIiRyZXBsYWNlciIsICJmaXhJbGxGb3JtZWQiLCAib2Zmc2V0IiwgInByZXYiLCAibmV4dCIsICJzdHJpbmdpZnkiLCAic3BhY2UiLCAiSlNPTiIsICJJdGVyYXRvclByb3RvdHlwZSIsICJQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUiLCAiYXJyYXlJdGVyYXRvciIsICJpdGVyYXRvcnMiLCAiZ2V0RGVzY3JpcHRvciIsICJmdW5jdGlvbk5hbWUiLCAiUFJPUEVSIiwgImNvcnJlY3RQcm90b3R5cGVHZXR0ZXIiLCAiZ2V0UHJvdG90eXBlT2YiLCAiQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIiwgIm9iamVjdEdldFByb3RvdHlwZU9mIiwgIklURVJBVE9SIiwgIkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMiLCAiTkVXX0lURVJBVE9SX1BST1RPVFlQRSIsICJpdGVyYXRvcnNDb3JlIiwgIkl0ZXJhdG9ycyIsICJyZXR1cm5UaGlzIiwgInVuY3VycnlUaGlzQWNjZXNzb3IiLCAiYVBvc3NpYmxlUHJvdG90eXBlIiwgIm9iamVjdFNldFByb3RvdHlwZU9mIiwgInNldFByb3RvdHlwZU9mIiwgIkNPUlJFQ1RfU0VUVEVSIiwgIl9fcHJvdG9fXyIsICJGdW5jdGlvbk5hbWUiLCAiY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciIsICJJdGVyYXRvckNvbnN0cnVjdG9yIiwgIkVOVU1FUkFCTEVfTkVYVCIsICJJdGVyYXRvcnNDb3JlIiwgIlBST1BFUl9GVU5DVElPTl9OQU1FIiwgIktFWVMiLCAiVkFMVUVTIiwgIkVOVFJJRVMiLCAiaXRlcmF0b3JEZWZpbmUiLCAiSXRlcmFibGUiLCAiREVGQVVMVCIsICJJU19TRVQiLCAiQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlIiwgIm1ldGhvZHMiLCAiS0VZIiwgImdldEl0ZXJhdGlvbk1ldGhvZCIsICJLSU5EIiwgImRlZmF1bHRJdGVyYXRvciIsICJJdGVyYWJsZVByb3RvdHlwZSIsICJJTkNPUlJFQ1RfVkFMVUVTX05BTUUiLCAibmF0aXZlSXRlcmF0b3IiLCAiYW55TmF0aXZlSXRlcmF0b3IiLCAiZW50cmllcyIsICJ2YWx1ZXMiLCAiY3JlYXRlSXRlclJlc3VsdE9iamVjdCIsICJkb25lIiwgImRlZmluZUl0ZXJhdG9yIiwgIkFSUkFZX0lURVJBVE9SIiwgImRlZmluZUl0ZXJhdG9yJDIiLCAiaXRlcmF0ZWQiLCAia2luZCIsICJBcmd1bWVudHMiLCAiRE9NSXRlcmFibGVzIiwgIkNTU1J1bGVMaXN0IiwgIkNTU1N0eWxlRGVjbGFyYXRpb24iLCAiQ1NTVmFsdWVMaXN0IiwgIkNsaWVudFJlY3RMaXN0IiwgIkRPTVJlY3RMaXN0IiwgIkRPTVN0cmluZ0xpc3QiLCAiRE9NVG9rZW5MaXN0IiwgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0IiwgIkZpbGVMaXN0IiwgIkhUTUxBbGxDb2xsZWN0aW9uIiwgIkhUTUxDb2xsZWN0aW9uIiwgIkhUTUxGb3JtRWxlbWVudCIsICJIVE1MU2VsZWN0RWxlbWVudCIsICJNZWRpYUxpc3QiLCAiTWltZVR5cGVBcnJheSIsICJOYW1lZE5vZGVNYXAiLCAiTm9kZUxpc3QiLCAiUGFpbnRSZXF1ZXN0TGlzdCIsICJQbHVnaW4iLCAiUGx1Z2luQXJyYXkiLCAiU1ZHTGVuZ3RoTGlzdCIsICJTVkdOdW1iZXJMaXN0IiwgIlNWR1BhdGhTZWdMaXN0IiwgIlNWR1BvaW50TGlzdCIsICJTVkdTdHJpbmdMaXN0IiwgIlNWR1RyYW5zZm9ybUxpc3QiLCAiU291cmNlQnVmZmVyTGlzdCIsICJTdHlsZVNoZWV0TGlzdCIsICJUZXh0VHJhY2tDdWVMaXN0IiwgIlRleHRUcmFja0xpc3QiLCAiVG91Y2hMaXN0IiwgIkNPTExFQ1RJT05fTkFNRSIsICJDb2xsZWN0aW9uIiwgIkNvbGxlY3Rpb25Qcm90b3R5cGUiLCAiTUVUQURBVEEiLCAidGhpc1N5bWJvbFZhbHVlIiwgInN5bWJvbElzUmVnaXN0ZXJlZCIsICJpc1JlZ2lzdGVyZWRTeW1ib2wiLCAiJGlzV2VsbEtub3duU3ltYm9sIiwgImlzV2VsbEtub3duU3ltYm9sIiwgInN5bWJvbEtleXMiLCAic3ltYm9sS2V5c0xlbmd0aCIsICJzeW1ib2xLZXkiLCAic3ltYm9sSXNXZWxsS25vd24iLCAiaXNSZWdpc3RlcmVkIiwgImlzV2VsbEtub3duIiwgIkNPTlZFUlRfVE9fU1RSSU5HIiwgInBvcyIsICJmaXJzdCIsICJzZWNvbmQiLCAiUyIsICJwb3NpdGlvbiIsICJzaXplIiwgImNvZGVBdCIsICJTVFJJTkdfSVRFUkFUT1IiLCAicG9pbnQiLCAiX3R5cGVvZiIsICJvIiwgIl9TeW1ib2wiLCAiX1N5bWJvbCRpdGVyYXRvciIsICJfdG9Qcm9wZXJ0eUtleSIsICJwcmltIiwgIl9TeW1ib2wkdG9QcmltaXRpdmUiLCAicmVzIiwgIk51bWJlciIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfT2JqZWN0JGRlZmluZVByb3BlcnR5IiwgIl9jcmVhdGVDbGFzcyIsICJwcm90b1Byb3BzIiwgInN0YXRpY1Byb3BzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICIkRnVuY3Rpb24iLCAiam9pbiIsICJmYWN0b3JpZXMiLCAiZnVuY3Rpb25CaW5kIiwgIlByb3RvdHlwZSIsICJwYXJ0QXJncyIsICJhcmdzTGVuZ3RoIiwgImxpc3QiLCAiZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCIsICJDT05TVFJVQ1RPUiIsICJNRVRIT0QiLCAiTmFtZXNwYWNlIiwgInB1cmVNZXRob2QiLCAiTmF0aXZlUHJvdG90eXBlIiwgIm93biIsICJJU19SSUdIVCIsICJhcmd1bWVudHNMZW5ndGgiLCAibWVtbyIsICJhcnJheVJlZHVjZSIsICJsZWZ0IiwgInJpZ2h0IiwgImFycmF5TWV0aG9kSXNTdHJpY3QiLCAiZW5naW5lSXNOb2RlIiwgIiRyZWR1Y2UiLCAicmVkdWNlIiwgIkFycmF5UHJvdG90eXBlIiwgIiRmaWx0ZXIiLCAiJG1hcCIsICJmbGF0dGVuSW50b0FycmF5IiwgIm9yaWdpbmFsIiwgInNvdXJjZUxlbiIsICJkZXB0aCIsICJtYXBwZXIiLCAidGhpc0FyZyIsICJlbGVtZW50TGVuIiwgInRhcmdldEluZGV4IiwgInNvdXJjZUluZGV4IiwgIm1hcEZuIiwgImZsYXRNYXAiLCAiU2ltcGxlRGF0YVBpcGUiLCAiX3NvdXJjZSIsICJfdHJhbnNmb3JtZXJzIiwgIl90YXJnZXQiLCAiX2NvbnRleHQiLCAiX2NvbnRleHQyIiwgIl9jb250ZXh0MyIsICJhZGQiLCAiX2JpbmRJbnN0YW5jZVByb3BlcnR5IiwgIl9hZGQiLCAicmVtb3ZlIiwgIl9yZW1vdmUiLCAidXBkYXRlIiwgIl91cGRhdGUiLCAiX3RyYW5zZm9ybUl0ZW1zIiwgIm9uIiwgIl9saXN0ZW5lcnMiLCAib2ZmIiwgIml0ZW1zIiwgIl9jb250ZXh0NCIsICJfcmVkdWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJ0cmFuc2Zvcm0iLCAiX25hbWUiLCAicGF5bG9hZCIsICJvbGREYXRhIiwgIkRhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24iLCAiY2FsbGJhY2siLCAiX2ZpbHRlckluc3RhbmNlUHJvcGVydHkiLCAiX21hcEluc3RhbmNlUHJvcGVydHkiLCAiX2ZsYXRNYXBJbnN0YW5jZVByb3BlcnR5IiwgIml0ZXJhdG9yQ2xvc2UiLCAiaW5uZXJSZXN1bHQiLCAiaW5uZXJFcnJvciIsICJpc0FycmF5SXRlcmF0b3JNZXRob2QiLCAiZ2V0SXRlcmF0b3JNZXRob2QiLCAiZ2V0SXRlcmF0b3IiLCAidXNpbmdJdGVyYXRvciIsICJpdGVyYXRvck1ldGhvZCIsICJjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nIiwgIlNBRkVfQ0xPU0lORyIsICJpdGVyYXRvcldpdGhSZXR1cm4iLCAicmV0dXJuIiwgImZyb20iLCAiY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uIiwgIlNLSVBfQ0xPU0lORyIsICJJVEVSQVRJT05fU1VQUE9SVCIsICJhcnJheUxpa2UiLCAiSVNfQ09OU1RSVUNUT1IiLCAibWFwZm4iLCAibWFwcGluZyIsICJzdGVwIiwgIml0ZXJhYmxlIiwgImFycmF5U2V0TGVuZ3RoIiwgInNldEFycmF5TGVuZ3RoIiwgInByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCIsICJpdGVtIiwgImFyZ0NvdW50IiwgIm5hdGl2ZVNsaWNlIiwgIkhBU19TUEVDSUVTX1NVUFBPUlQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiYXJyIiwgImFycjIiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIm1pbkxlbiIsICJhcnJheUxpa2VUb0FycmF5IiwgIl9zbGljZUluc3RhbmNlUHJvcGVydHkiLCAiX0FycmF5JGZyb20iLCAiX3NsaWNlZFRvQXJyYXkiLCAiX0FycmF5JGlzQXJyYXkiLCAiciIsICJsIiwgIl9nZXRJdGVyYXRvck1ldGhvZCIsICJlIiwgInUiLCAiX3B1c2hJbnN0YW5jZVByb3BlcnR5IiwgInVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIm5vbkl0ZXJhYmxlUmVzdCIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiaXRlciIsICJub25JdGVyYWJsZVNwcmVhZCIsICJvd25LZXlzIiwgIm5hdGl2ZUtleXMiLCAiYXJyYXlGb3JFYWNoIiwgIm5hdGl2ZVJldmVyc2UiLCAicmV2ZXJzZSIsICIkJHIiLCAiZGVsZXRlUHJvcGVydHlPclRocm93IiwgInNwbGljZSIsICJkZWxldGVDb3VudCIsICJpbnNlcnRDb3VudCIsICJhY3R1YWxEZWxldGVDb3VudCIsICJ0byIsICJhY3R1YWxTdGFydCIsICIkYXNzaWduIiwgImFzc2lnbiIsICJvYmplY3RBc3NpZ24iLCAiQiIsICJhbHBoYWJldCIsICJjaHIiLCAiVCIsICJuYXRpdmVHZXRQcm90b3R5cGVPZiIsICJEIiwgInBhcmVudCIsICJlbmdpbmVJc0J1biIsICJCdW4iLCAidmFsaWRhdGVBcmd1bWVudHNMZW5ndGgiLCAicGFzc2VkIiwgInJlcXVpcmVkIiwgIkVOR0lORV9JU19CVU4iLCAiVVNFUl9BR0VOVCIsICJXUkFQIiwgInNjaGVkdWxlcnNGaXgiLCAic2NoZWR1bGVyIiwgImhhc1RpbWVBcmciLCAiZmlyc3RQYXJhbUluZGV4IiwgImhhbmRsZXIiLCAidGltZW91dCIsICJib3VuZEFyZ3MiLCAicGFyYW1zIiwgInNldEludGVydmFsIiwgInNldFRpbWVvdXQiLCAiRW1pdHRlciIsICJfY2FsbGJhY2tzIiwgIk1hcCIsICJldmVudCIsICJsaXN0ZW5lciIsICJjYWxsYmFja3MiLCAib25jZSIsICJhcmd1bWVudHNfIiwgImNsZWFyIiwgImRlbGV0ZSIsICJlbWl0IiwgImNhbGxiYWNrc0NvcHkiLCAibGlzdGVuZXJzIiwgImxpc3RlbmVyQ291bnQiLCAidG90YWxDb3VudCIsICJoYXNMaXN0ZW5lcnMiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJyZW1vdmVMaXN0ZW5lciIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgInJlbW92ZUFsbExpc3RlbmVycyIsICJtb2R1bGUiLCAiX2V4dGVuZHMiLCAiX2luaGVyaXRzTG9vc2UiLCAic3ViQ2xhc3MiLCAic3VwZXJDbGFzcyIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIlJlZmVyZW5jZUVycm9yIiwgIm91dHB1dCIsICJuZXh0S2V5IiwgIndpbiIsICJhc3NpZ24kMSIsICJWRU5ET1JfUFJFRklYRVMiLCAiVEVTVF9FTEVNRU5UIiwgInJvdW5kIiwgImFicyIsICJub3ciLCAiRGF0ZSIsICJwcmVmaXhlZCIsICJwcm9wZXJ0eSIsICJwcmVmaXgiLCAicHJvcCIsICJjYW1lbFByb3AiLCAidG9VcHBlckNhc2UiLCAiUFJFRklYRURfVE9VQ0hfQUNUSU9OIiwgIk5BVElWRV9UT1VDSF9BQ1RJT04iLCAiVE9VQ0hfQUNUSU9OX0NPTVBVVEUiLCAiVE9VQ0hfQUNUSU9OX0FVVE8iLCAiVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTiIsICJUT1VDSF9BQ1RJT05fTk9ORSIsICJUT1VDSF9BQ1RJT05fUEFOX1giLCAiVE9VQ0hfQUNUSU9OX1BBTl9ZIiwgIlRPVUNIX0FDVElPTl9NQVAiLCAidG91Y2hNYXAiLCAiY3NzU3VwcG9ydHMiLCAiQ1NTIiwgInN1cHBvcnRzIiwgImdldFRvdWNoQWN0aW9uUHJvcHMiLCAiU1VQUE9SVF9UT1VDSCIsICJTVVBQT1JUX1BPSU5URVJfRVZFTlRTIiwgIlNVUFBPUlRfT05MWV9UT1VDSCIsICJJTlBVVF9UWVBFX1RPVUNIIiwgIklOUFVUX1RZUEVfTU9VU0UiLCAiQ09NUFVURV9JTlRFUlZBTCIsICJJTlBVVF9TVEFSVCIsICJJTlBVVF9FTkQiLCAiSU5QVVRfQ0FOQ0VMIiwgIkRJUkVDVElPTl9OT05FIiwgIkRJUkVDVElPTl9MRUZUIiwgIkRJUkVDVElPTl9SSUdIVCIsICJESVJFQ1RJT05fVVAiLCAiRElSRUNUSU9OX0RPV04iLCAiRElSRUNUSU9OX0hPUklaT05UQUwiLCAiRElSRUNUSU9OX1ZFUlRJQ0FMIiwgIkRJUkVDVElPTl9BTEwiLCAiUFJPUFNfWFkiLCAiUFJPUFNfQ0xJRU5UX1hZIiwgImVhY2giLCAiY29udGV4dCIsICJib29sT3JGbiIsICJpblN0ciIsICJzdHIiLCAiVG91Y2hBY3Rpb24iLCAibWFuYWdlciIsICJfcHJvdG8iLCAiY29tcHV0ZSIsICJhY3Rpb25zIiwgInRyaW0iLCAidG91Y2hBY3Rpb24iLCAicmVjb2duaXplcnMiLCAicmVjb2duaXplciIsICJlbmFibGUiLCAiZ2V0VG91Y2hBY3Rpb24iLCAiaGFzUGFuWCIsICJoYXNQYW5ZIiwgInByZXZlbnREZWZhdWx0cyIsICJzcmNFdmVudCIsICJkaXJlY3Rpb24iLCAib2Zmc2V0RGlyZWN0aW9uIiwgInNlc3Npb24iLCAicHJldmVudGVkIiwgInByZXZlbnREZWZhdWx0IiwgImhhc05vbmUiLCAiaXNUYXBQb2ludGVyIiwgInBvaW50ZXJzIiwgImlzVGFwTW92ZW1lbnQiLCAiZGlzdGFuY2UiLCAiaXNUYXBUb3VjaFRpbWUiLCAiZGVsdGFUaW1lIiwgInByZXZlbnRTcmMiLCAiaGFzUGFyZW50IiwgIm5vZGUiLCAicGFyZW50Tm9kZSIsICJnZXRDZW50ZXIiLCAicG9pbnRlcnNMZW5ndGgiLCAiY2xpZW50WCIsICJ5IiwgImNsaWVudFkiLCAic2ltcGxlQ2xvbmVJbnB1dERhdGEiLCAidGltZVN0YW1wIiwgImNlbnRlciIsICJkZWx0YVgiLCAiZGVsdGFZIiwgImdldERpc3RhbmNlIiwgInAxIiwgInAyIiwgInNxcnQiLCAiZ2V0QW5nbGUiLCAiYXRhbjIiLCAiUEkiLCAiZ2V0RGlyZWN0aW9uIiwgImdldFZlbG9jaXR5IiwgImNvbXB1dGVJbnB1dERhdGEiLCAiZmlyc3RJbnB1dCIsICJmaXJzdE11bHRpcGxlIiwgIm9mZnNldENlbnRlciIsICJhbmdsZSIsICJvZmZzZXREZWx0YSIsICJwcmV2RGVsdGEiLCAicHJldklucHV0IiwgImV2ZW50VHlwZSIsICJvdmVyYWxsVmVsb2NpdHkiLCAib3ZlcmFsbFZlbG9jaXR5WCIsICJvdmVyYWxsVmVsb2NpdHlZIiwgInNjYWxlIiwgInJvdGF0aW9uIiwgIm1heFBvaW50ZXJzIiwgInZlbG9jaXR5IiwgInZlbG9jaXR5WCIsICJ2ZWxvY2l0eVkiLCAibGFzdCIsICJsYXN0SW50ZXJ2YWwiLCAidiIsICJzcmNFdmVudFRhcmdldCIsICJjb21wb3NlZFBhdGgiLCAiaW5wdXRIYW5kbGVyIiwgInBvaW50ZXJzTGVuIiwgImNoYW5nZWRQb2ludGVyc0xlbiIsICJjaGFuZ2VkUG9pbnRlcnMiLCAiaXNGaXJzdCIsICJpc0ZpbmFsIiwgInJlY29nbml6ZSIsICJzcGxpdFN0ciIsICJhZGRFdmVudExpc3RlbmVycyIsICJ0eXBlcyIsICJyZW1vdmVFdmVudExpc3RlbmVycyIsICJnZXRXaW5kb3dGb3JFbGVtZW50IiwgImRvYyIsICJvd25lckRvY3VtZW50IiwgImRlZmF1bHRWaWV3IiwgIklucHV0IiwgImlucHV0VGFyZ2V0IiwgImRvbUhhbmRsZXIiLCAiZXYiLCAiaW5pdCIsICJldkVsIiwgImV2VGFyZ2V0IiwgImV2V2luIiwgImRlc3Ryb3kiLCAiaW5BcnJheSIsICJmaW5kQnlLZXkiLCAiUE9JTlRFUl9JTlBVVF9NQVAiLCAicG9pbnRlcmRvd24iLCAicG9pbnRlcm1vdmUiLCAicG9pbnRlcnVwIiwgInBvaW50ZXJjYW5jZWwiLCAicG9pbnRlcm91dCIsICJJRTEwX1BPSU5URVJfVFlQRV9FTlVNIiwgIlBPSU5URVJfRUxFTUVOVF9FVkVOVFMiLCAiUE9JTlRFUl9XSU5ET1dfRVZFTlRTIiwgIk1TUG9pbnRlckV2ZW50IiwgIlBvaW50ZXJFdmVudCIsICJQb2ludGVyRXZlbnRJbnB1dCIsICJfSW5wdXQiLCAiX3RoaXMiLCAicG9pbnRlckV2ZW50cyIsICJyZW1vdmVQb2ludGVyIiwgImV2ZW50VHlwZU5vcm1hbGl6ZWQiLCAicG9pbnRlclR5cGUiLCAiaXNUb3VjaCIsICJzdG9yZUluZGV4IiwgInBvaW50ZXJJZCIsICJidXR0b24iLCAidG9BcnJheSIsICJ1bmlxdWVBcnJheSIsICJzb3J0IiwgInJlc3VsdHMiLCAiVE9VQ0hfSU5QVVRfTUFQIiwgInRvdWNoc3RhcnQiLCAidG91Y2htb3ZlIiwgInRvdWNoZW5kIiwgInRvdWNoY2FuY2VsIiwgIlRvdWNoSW5wdXQiLCAidGFyZ2V0SWRzIiwgInRvdWNoZXMiLCAiZ2V0VG91Y2hlcyIsICJ0YXJnZXRUb3VjaGVzIiwgImFsbFRvdWNoZXMiLCAiaWRlbnRpZmllciIsICJjaGFuZ2VkVG91Y2hlcyIsICJjaGFuZ2VkVGFyZ2V0VG91Y2hlcyIsICJ0b3VjaCIsICJNT1VTRV9JTlBVVF9NQVAiLCAibW91c2Vkb3duIiwgIm1vdXNlbW92ZSIsICJtb3VzZXVwIiwgIk1vdXNlSW5wdXQiLCAicHJlc3NlZCIsICJ3aGljaCIsICJERURVUF9USU1FT1VUIiwgInNldExhc3RUb3VjaCIsICJldmVudERhdGEiLCAicHJpbWFyeVRvdWNoIiwgImxhc3RUb3VjaCIsICJsdHMiLCAibGFzdFRvdWNoZXMiLCAicmVjb3JkVG91Y2hlcyIsICJpc1N5bnRoZXRpY0V2ZW50IiwgImR4IiwgImR5IiwgIlRvdWNoTW91c2VJbnB1dCIsICJfbWFuYWdlciIsICJpbnB1dEV2ZW50IiwgImlucHV0RGF0YSIsICJpc01vdXNlIiwgInNvdXJjZUNhcGFiaWxpdGllcyIsICJmaXJlc1RvdWNoRXZlbnRzIiwgIm1vdXNlIiwgImludm9rZUFycmF5QXJnIiwgIlNUQVRFX0ZBSUxFRCIsICJfdW5pcXVlSWQiLCAiZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlciIsICJvdGhlclJlY29nbml6ZXIiLCAic3RhdGVTdHIiLCAiUmVjb2duaXplciIsICJzaW11bHRhbmVvdXMiLCAicmVxdWlyZUZhaWwiLCAicmVjb2duaXplV2l0aCIsICJkcm9wUmVjb2duaXplV2l0aCIsICJyZXF1aXJlRmFpbHVyZSIsICJkcm9wUmVxdWlyZUZhaWx1cmUiLCAiaGFzUmVxdWlyZUZhaWx1cmVzIiwgImNhblJlY29nbml6ZVdpdGgiLCAiYWRkaXRpb25hbEV2ZW50IiwgInRyeUVtaXQiLCAiY2FuRW1pdCIsICJpbnB1dERhdGFDbG9uZSIsICJyZXNldCIsICJUYXBSZWNvZ25pemVyIiwgIl9SZWNvZ25pemVyIiwgInRhcHMiLCAiaW50ZXJ2YWwiLCAidGltZSIsICJ0aHJlc2hvbGQiLCAicG9zVGhyZXNob2xkIiwgInBUaW1lIiwgInBDZW50ZXIiLCAiX3RpbWVyIiwgIl9pbnB1dCIsICJjb3VudCIsICJfdGhpczIiLCAidmFsaWRQb2ludGVycyIsICJ2YWxpZE1vdmVtZW50IiwgInZhbGlkVG91Y2hUaW1lIiwgImZhaWxUaW1lb3V0IiwgInZhbGlkSW50ZXJ2YWwiLCAidmFsaWRNdWx0aVRhcCIsICJfdGhpczMiLCAiY2xlYXJUaW1lb3V0IiwgInRhcENvdW50IiwgIkF0dHJSZWNvZ25pemVyIiwgImF0dHJUZXN0IiwgIm9wdGlvblBvaW50ZXJzIiwgImlzUmVjb2duaXplZCIsICJpc1ZhbGlkIiwgImRpcmVjdGlvblN0ciIsICJQYW5SZWNvZ25pemVyIiwgIl9BdHRyUmVjb2duaXplciIsICJwWCIsICJwWSIsICJkaXJlY3Rpb25UZXN0IiwgImhhc01vdmVkIiwgIlN3aXBlUmVjb2duaXplciIsICJQaW5jaFJlY29nbml6ZXIiLCAiaW5PdXQiLCAiUm90YXRlUmVjb2duaXplciIsICJQcmVzc1JlY29nbml6ZXIiLCAidmFsaWRUaW1lIiwgImRlZmF1bHRzIiwgImRvbUV2ZW50cyIsICJpbnB1dENsYXNzIiwgImNzc1Byb3BzIiwgInVzZXJTZWxlY3QiLCAidG91Y2hTZWxlY3QiLCAidG91Y2hDYWxsb3V0IiwgImNvbnRlbnRab29taW5nIiwgInVzZXJEcmFnIiwgInRhcEhpZ2hsaWdodENvbG9yIiwgInByZXNldCIsICJ0b2dnbGVDc3NQcm9wcyIsICJvbGRDc3NQcm9wcyIsICJNYW5hZ2VyIiwgImhhbmRsZXJzIiwgInN0b3AiLCAiZm9yY2UiLCAic3RvcHBlZCIsICJjdXJSZWNvZ25pemVyIiwgImV4aXN0aW5nIiwgInRhcmdldFJlY29nbml6ZXIiLCAiZXZlbnRzIiwgImdlc3R1cmVFdmVudCIsICJjcmVhdGVFdmVudCIsICJpbml0RXZlbnQiLCAiZ2VzdHVyZSIsICJkaXNwYXRjaEV2ZW50IiwgIlNJTkdMRV9UT1VDSF9JTlBVVF9NQVAiLCAiU2luZ2xlVG91Y2hJbnB1dCIsICJzdGFydGVkIiwgIm5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMiLCAiY2hhbmdlZCIsICJkZXByZWNhdGUiLCAibWVzc2FnZSIsICJkZXByZWNhdGlvbk1lc3NhZ2UiLCAiRXJyb3IiLCAic3RhY2siLCAibG9nIiwgImNvbnNvbGUiLCAid2FybiIsICJleHRlbmQiLCAiZGVzdCIsICJtZXJnZSIsICJpbmhlcml0IiwgImNoaWxkIiwgImJhc2UiLCAiY2hpbGRQIiwgImJhc2VQIiwgIl9zdXBlciIsICJiaW5kRm4iLCAiUmVhbEhhbW1lciIsICJIYW1tZXIiLCAiVkVSU0lPTiIsICJJTlBVVF9NT1ZFIiwgIlNUQVRFX1BPU1NJQkxFIiwgIlNUQVRFX0JFR0FOIiwgIlNUQVRFX0NIQU5HRUQiLCAiU1RBVEVfRU5ERUQiLCAiU1RBVEVfUkVDT0dOSVpFRCIsICJTVEFURV9DQU5DRUxMRUQiLCAiVGFwIiwgIlBhbiIsICJTd2lwZSIsICJQaW5jaCIsICJSb3RhdGUiLCAiUHJlc3MiLCAiREVMRVRFIiwgImRlZXBPYmplY3RBc3NpZ24iLCAibWVyZ2VkIiwgImRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSIsICJzdHJpcERlbGV0ZSIsICJfbGVuMiIsICJfa2V5MiIsICJfY29uY2F0SW5zdGFuY2VQcm9wZXJ0eSIsICJzZXRUaW1lIiwgImdldFRpbWUiLCAiX3N0ZXAiLCAiX2l0ZXJhdG9yIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9SZWZsZWN0JG93bktleXMiLCAicyIsICJjbG9uZSIsICJlcnIiLCAiX2kiLCAiX09iamVjdCRrZXlzIiwgIl9PYmplY3Qka2V5czIiLCAiYUNvbnN0cnVjdG9yIiwgIm5hdGl2ZUNvbnN0cnVjdCIsICJORVdfVEFSR0VUX0JVRyIsICJBUkdTX0JVRyIsICJUYXJnZXQiLCAibmV3VGFyZ2V0IiwgIiRhcmdzIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCAiJCRoIiwgIl9zZXRQcm90b3R5cGVPZiIsICJwIiwgIl9PYmplY3Qkc2V0UHJvdG90eXBlT2YiLCAiX2luaGVyaXRzIiwgIl9PYmplY3QkY3JlYXRlIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgImFzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX09iamVjdCRnZXRQcm90b3R5cGVPZiIsICJfX2VzTW9kdWxlIiwgIiRFcnJvciIsICJURVNUIiwgIlY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSIsICJJU19WOF9PUl9DSEFLUkFfU1RBQ0siLCAiZXJyb3JTdGFja0luc3RhbGxhYmxlIiwgImNsZWFyRXJyb3JTdGFjayIsICJkcm9wRW50cmllcyIsICJwcmVwYXJlU3RhY2tUcmFjZSIsICJFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJSZXN1bHQiLCAiUmVzdWx0UHJvdG90eXBlIiwgIml0ZXJhdGUiLCAidW5ib3VuZEZ1bmN0aW9uIiwgIml0ZXJGbiIsICJBU19FTlRSSUVTIiwgIklTX1JFQ09SRCIsICJJU19JVEVSQVRPUiIsICJJTlRFUlJVUFRFRCIsICJjb25kaXRpb24iLCAiY2FsbEZuIiwgImNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMiLCAiZXhjZXB0aW9ucyIsICJpbnN0YWxsRXJyb3JDYXVzZSIsICJjYXVzZSIsICJpbnN0YWxsRXJyb3JTdGFjayIsICJub3JtYWxpemVTdHJpbmdBcmd1bWVudCIsICIkZGVmYXVsdCIsICIkQWdncmVnYXRlRXJyb3IiLCAiZXJyb3JzIiwgImlzSW5zdGFuY2UiLCAiQWdncmVnYXRlRXJyb3JQcm90b3R5cGUiLCAiZXJyb3JzQXJyYXkiLCAiQWdncmVnYXRlRXJyb3IiLCAiJGxvY2F0aW9uIiwgImRlZmVyIiwgImNoYW5uZWwiLCAicG9ydCIsICJzZXRTcGVjaWVzIiwgIkNPTlNUUlVDVE9SX05BTUUiLCAiYW5JbnN0YW5jZSIsICJzcGVjaWVzQ29uc3RydWN0b3IiLCAiZGVmYXVsdENvbnN0cnVjdG9yIiwgImVuZ2luZUlzSW9zIiwgIklTX0lPUyIsICJJU19OT0RFIiwgInNldEltbWVkaWF0ZSIsICJjbGVhckltbWVkaWF0ZSIsICJEaXNwYXRjaCIsICJNZXNzYWdlQ2hhbm5lbCIsICJjb3VudGVyIiwgInF1ZXVlIiwgIk9OUkVBRFlTVEFURUNIQU5HRSIsICJsb2NhdGlvbiIsICJydW4iLCAicnVubmVyIiwgImV2ZW50TGlzdGVuZXIiLCAiZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlciIsICJwb3N0TWVzc2FnZSIsICJwcm90b2NvbCIsICJob3N0IiwgIm5leHRUaWNrIiwgInBvcnQyIiwgInBvcnQxIiwgIm9ubWVzc2FnZSIsICJpbXBvcnRTY3JpcHRzIiwgInJlbW92ZUNoaWxkIiwgInRhc2siLCAiUXVldWUiLCAiaGVhZCIsICJ0YWlsIiwgIlF1ZXVlJDMiLCAiZW50cnkiLCAibm90aWZ5IiwgInRvZ2dsZSIsICJwcm9taXNlIiwgInRoZW4iLCAiZW5naW5lSXNJb3NQZWJibGUiLCAiUGViYmxlIiwgImVuZ2luZUlzV2Vib3NXZWJraXQiLCAibWFjcm90YXNrIiwgIklTX0lPU19QRUJCTEUiLCAiSVNfV0VCT1NfV0VCS0lUIiwgIk11dGF0aW9uT2JzZXJ2ZXIiLCAiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIsICJQcm9taXNlIiwgInF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciIsICJtaWNyb3Rhc2siLCAiZmx1c2giLCAiZXhpdCIsICJlbnRlciIsICJyZXNvbHZlIiwgImNyZWF0ZVRleHROb2RlIiwgIm9ic2VydmUiLCAiY2hhcmFjdGVyRGF0YSIsICJtaWNyb3Rhc2tfMSIsICJwZXJmb3JtIiwgInByb21pc2VOYXRpdmVDb25zdHJ1Y3RvciIsICJlbmdpbmVJc0Rlbm8iLCAiZW5naW5lSXNCcm93c2VyIiwgIk5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciIsICJJU19CUk9XU0VSIiwgIklTX0RFTk8iLCAiTmF0aXZlUHJvbWlzZVByb3RvdHlwZSIsICJTVUJDTEFTU0lORyIsICJOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQiLCAiUHJvbWlzZVJlamVjdGlvbkV2ZW50IiwgIkZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIiwgIlBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFIiwgIkdMT0JBTF9DT1JFX0pTX1BST01JU0UiLCAiRmFrZVByb21pc2UiLCAicHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uIiwgIlJFSkVDVElPTl9FVkVOVCIsICJQcm9taXNlQ2FwYWJpbGl0eSIsICJyZWplY3QiLCAiJCRyZXNvbHZlIiwgIiQkcmVqZWN0IiwgIm5ld1Byb21pc2VDYXBhYmlsaXR5IiwgIkludGVybmFsIiwgIk93blByb21pc2VDYXBhYmlsaXR5IiwgImhvc3RSZXBvcnRFcnJvcnMiLCAiUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uIiwgIm5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlIiwgIlBST01JU0UiLCAiZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUiLCAiUHJvbWlzZUNvbnN0cnVjdG9yIiwgIlByb21pc2VQcm90b3R5cGUiLCAibmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5IiwgIkRJU1BBVENIX0VWRU5UIiwgIlVOSEFORExFRF9SRUpFQ1RJT04iLCAiaXNUaGVuYWJsZSIsICJjYWxsUmVhY3Rpb24iLCAicmVhY3Rpb24iLCAiZXhpdGVkIiwgIm9rIiwgImZhaWwiLCAicmVqZWN0aW9uIiwgIm9uSGFuZGxlVW5oYW5kbGVkIiwgImlzUmVqZWN0IiwgIm5vdGlmaWVkIiwgInJlYWN0aW9ucyIsICJvblVuaGFuZGxlZCIsICJyZWFzb24iLCAiaXNVbmhhbmRsZWQiLCAidW53cmFwIiwgImludGVybmFsUmVqZWN0IiwgImludGVybmFsUmVzb2x2ZSIsICJ3cmFwcGVyIiwgImV4ZWN1dG9yIiwgIm9uRnVsZmlsbGVkIiwgIm9uUmVqZWN0ZWQiLCAiUHJvbWlzZVdyYXBwZXIiLCAic2V0VG9TdHJpbmdUYWckMSIsICJzZXRTcGVjaWVzJDEiLCAicHJvbWlzZVN0YXRpY3NJbmNvcnJlY3RJdGVyYXRpb24iLCAiY2FwYWJpbGl0eSIsICIkcHJvbWlzZVJlc29sdmUiLCAicmVtYWluaW5nIiwgImFscmVhZHlDYWxsZWQiLCAiY2F0Y2giLCAicmFjZSIsICJwcm9taXNlUmVzb2x2ZSIsICJwcm9taXNlQ2FwYWJpbGl0eSIsICJQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyIiwgIkNIRUNLX1dSQVBQRVIiLCAiYWxsU2V0dGxlZCIsICJzdGF0dXMiLCAiUFJPTUlTRV9BTllfRVJST1IiLCAiYW55IiwgImFscmVhZHlSZXNvbHZlZCIsICJhbHJlYWR5UmVqZWN0ZWQiLCAiZmluYWxseSIsICJvbkZpbmFsbHkiLCAiaXNGdW5jdGlvbiIsICJ3aXRoUmVzb2x2ZXJzIiwgInRyeSIsICJfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkiLCAiX1Byb21pc2UiLCAiX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5IiwgIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCAiYXN5bmNJdGVyYXRvciIsICJ0b1N0cmluZ1RhZyIsICJkZWZpbmUiLCAiR2VuZXJhdG9yIiwgIkNvbnRleHQiLCAibWFrZUludm9rZU1ldGhvZCIsICJ0cnlDYXRjaCIsICJoIiwgIkdlbmVyYXRvckZ1bmN0aW9uIiwgIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwgImciLCAiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwgIl9pbnZva2UiLCAiQXN5bmNJdGVyYXRvciIsICJpbnZva2UiLCAiX19hd2FpdCIsICJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsICJkZWxlZ2F0ZSIsICJtYXliZUludm9rZURlbGVnYXRlIiwgInNlbnQiLCAiX3NlbnQiLCAiZGlzcGF0Y2hFeGNlcHRpb24iLCAiYWJydXB0IiwgInJlc3VsdE5hbWUiLCAibmV4dExvYyIsICJwdXNoVHJ5RW50cnkiLCAidHJ5TG9jIiwgImNhdGNoTG9jIiwgImZpbmFsbHlMb2MiLCAiYWZ0ZXJMb2MiLCAidHJ5RW50cmllcyIsICJyZXNldFRyeUVudHJ5IiwgImNvbXBsZXRpb24iLCAiaXNOYU4iLCAiZGlzcGxheU5hbWUiLCAiaXNHZW5lcmF0b3JGdW5jdGlvbiIsICJtYXJrIiwgImF3cmFwIiwgImFzeW5jIiwgInBvcCIsICJydmFsIiwgImhhbmRsZSIsICJjb21wbGV0ZSIsICJmaW5pc2giLCAiZGVsZWdhdGVZaWVsZCIsICJydW50aW1lIiwgInJlZ2VuZXJhdG9yIiwgInJlZ2VuZXJhdG9yUnVudGltZSIsICJhY2NpZGVudGFsU3RyaWN0TW9kZSIsICJhcnJheUJ1ZmZlck5vbkV4dGVuc2libGUiLCAiQXJyYXlCdWZmZXIiLCAiYnVmZmVyIiwgImlzRXh0ZW5zaWJsZSIsICJBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUiLCAiJGlzRXh0ZW5zaWJsZSIsICJvYmplY3RJc0V4dGVuc2libGUiLCAiZnJlZXppbmciLCAicHJldmVudEV4dGVuc2lvbnMiLCAiZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlIiwgIkZSRUVaSU5HIiwgIlJFUVVJUkVEIiwgInNldE1ldGFkYXRhIiwgIm9iamVjdElEIiwgIndlYWtEYXRhIiwgIm1ldGEiLCAiaW50ZXJuYWxNZXRhZGF0YU1vZHVsZSIsICJmYXN0S2V5IiwgImdldFdlYWtEYXRhIiwgIm9uRnJlZXplIiwgIkludGVybmFsTWV0YWRhdGFNb2R1bGUiLCAiaW50ZXJuYWxTdGF0ZUdldHRlckZvciIsICJjb2xsZWN0aW9uIiwgImNvbW1vbiIsICJJU19XRUFLIiwgIkFEREVSIiwgImV4cG9ydGVkIiwgIklTX0FEREVSIiwgImdldENvbnN0cnVjdG9yIiwgInNldFN0cm9uZyIsICJkZWZpbmVCdWlsdElucyIsICJ1bnNhZmUiLCAiY29sbGVjdGlvblN0cm9uZyIsICJwcmV2aW91cyIsICJnZXRFbnRyeSIsICJyZW1vdmVkIiwgIklURVJBVE9SX05BTUUiLCAiZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUiLCAiZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlIiwgIiRzb21lIiwgIm1lcmdlU29ydCIsICJjb21wYXJlZm4iLCAibWlkZGxlIiwgImluc2VydGlvblNvcnQiLCAibGxlbmd0aCIsICJybGVuZ3RoIiwgImxpbmRleCIsICJyaW5kZXgiLCAiYXJyYXlTb3J0IiwgImZpcmVmb3giLCAiZW5naW5lRmZWZXJzaW9uIiwgImVuZ2luZUlzSWVPckVkZ2UiLCAid2Via2l0IiwgImVuZ2luZVdlYmtpdFZlcnNpb24iLCAiaW50ZXJuYWxTb3J0IiwgIkZGIiwgIklFX09SX0VER0UiLCAiVjgiLCAiV0VCS0lUIiwgIm5hdGl2ZVNvcnQiLCAiRkFJTFNfT05fVU5ERUZJTkVEIiwgIkZBSUxTX09OX05VTEwiLCAiU1RSSUNUX01FVEhPRCIsICJTVEFCTEVfU09SVCIsICJjb2RlIiwgImZyb21DaGFyQ29kZSIsICJpdGVtc0xlbmd0aCIsICJhcnJheUxlbmd0aCIsICJnZXRSYW5kb21WYWx1ZXMiLCAicm5kczgiLCAiVWludDhBcnJheSIsICJybmciLCAiY3J5cHRvIiwgImJ5dGVUb0hleCIsICJuYXRpdmUiLCAicmFuZG9tVVVJRCIsICJ2NCIsICJidWYiLCAicm5kcyIsICJpc0lkIiwgImRlbGF5IiwgIkluZmluaXR5IiwgInNldE9wdGlvbnMiLCAiX2ZsdXNoSWZOZWVkZWQiLCAiX2V4dGVuZGVkIiwgIm1lIiwgIl9sZW4iLCAiX2tleSIsICJfcXVldWUiLCAiX3RpbWVvdXQiLCAiX3NldFRpbWVvdXQiLCAiX3NwbGljZUluc3RhbmNlUHJvcGVydHkiLCAiRGF0YVNldFBhcnQiLCAic2VuZGVySWQiLCAiX3N1YnNjcmliZXJzIiwgInN1YnNjcmliZXIiLCAiU2V0IiwgIkRhdGFTdHJlYW0iLCAicGFpcnMiLCAiX3BhaXJzIiwgIl9zdGVwJHZhbHVlIiwgInQwIiwgIl9pdGVyYXRvcjIiLCAiX3N0ZXAyIiwgIl9zdGVwMiR2YWx1ZSIsICJfaXRlcmF0b3IzIiwgIl9zdGVwMyIsICJfc3RlcDMkdmFsdWUiLCAiX2l0ZXJhdG9yNCIsICJfc3RlcDQiLCAiX3N0ZXA0JHZhbHVlIiwgIl9jb250ZXh0NSIsICJwYWlyIiwgIl9jb250ZXh0NiIsICJfc3RlcDUiLCAiX2l0ZXJhdG9yNSIsICJfc3RlcDUkdmFsdWUiLCAiX01hcCIsICJfU2V0IiwgInRvSWRBcnJheSIsICJ0b0l0ZW1BcnJheSIsICJfc3RlcDYiLCAiX2l0ZXJhdG9yNiIsICJfc3RlcDYkdmFsdWUiLCAiX1N5bWJvbCRpdGVyYXRvcjIiLCAiX2NhbGxlZSIsICJfaXRlcmF0b3I3IiwgIl9zdGVwNyIsICJfc3RlcDckdmFsdWUiLCAiX2NvbnRleHQ3IiwgIl9zdGVwOCIsICJfaXRlcmF0b3I4IiwgIl9zdGVwOCR2YWx1ZSIsICJfY2FsbGVlMiIsICJfaXRlcmF0b3I5IiwgIl9zdGVwOSIsICJfc3RlcDkkdmFsdWUiLCAiX2NvbnRleHQ4IiwgIl9nZXRJdGVyYXRvciIsICJjdXJyIiwgIm1heEl0ZW0iLCAibWF4VmFsdWUiLCAiX2N1cnIkdmFsdWUiLCAibWluSXRlbSIsICJtaW5WYWx1ZSIsICJfY3VyciR2YWx1ZTIiLCAiYWNjdW11bGF0b3IiLCAiX3N0ZXAxMCIsICJfaXRlcmF0b3IxMCIsICJfc3RlcDEwJHZhbHVlIiwgIl9jb250ZXh0OSIsICJfc29ydEluc3RhbmNlUHJvcGVydHkiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJpZEEiLCAiaXRlbUEiLCAiX3JlZjQiLCAiaWRCIiwgIml0ZW1CIiwgIkRhdGFTZXQiLCAiX0RhdGFTZXRQYXJ0IiwgIl9jcmVhdGVTdXBlciIsICJfb3B0aW9ucyIsICJfZGF0YSIsICJfaWRQcm9wIiwgImZpZWxkSWQiLCAiYWRkZWRJZHMiLCAiaWRzVG9BZGQiLCAiZCIsICJfc29tZUluc3RhbmNlUHJvcGVydHkiLCAiX2FkZEl0ZW0iLCAiX3RyaWdnZXIiLCAidXBkYXRlZElkcyIsICJ1cGRhdGVkRGF0YSIsICJpZFByb3AiLCAiYWRkT3JVcGRhdGUiLCAib3JpZ0lkIiwgImZ1bGxJdGVtIiwgIm9sZEl0ZW0iLCAiX09iamVjdCRhc3NpZ24iLCAiX3VwZGF0ZUl0ZW0iLCAiX3RoaXM0IiwgInVwZGF0ZUV2ZW50RGF0YSIsICJ1cGRhdGVzIiwgImlkcyIsICJfaXRlbSIsICJyZXR1cm5UeXBlIiwgIml0ZW1JZHMiLCAiaXRlbUlkIiwgIl9rZXlzSW5zdGFuY2VQcm9wZXJ0eSIsICJvcmRlciIsICJfc29ydCIsICJmaWVsZHMiLCAiX2ZpbHRlckZpZWxkcyIsICJyZXN1bHRhbnQiLCAibWFwcGVkSXRlbXMiLCAiZmlsdGVyZWRJdGVtIiwgImZpZWxkIiwgImF2IiwgImJ2IiwgInJlbW92ZWRJZHMiLCAicmVtb3ZlZEl0ZW1zIiwgImlkZW50IiwgIm1heEZpZWxkIiwgIl92YWx1ZXNJbnN0YW5jZVByb3BlcnR5IiwgIml0ZW1GaWVsZCIsICJtaW5GaWVsZCIsICJleGlzdHMiLCAidXVpZDQiLCAiX0pTT04kc3RyaW5naWZ5IiwgIl9vYmplY3RTcHJlYWQiLCAiX2VudHJpZXNJbnN0YW5jZVByb3BlcnR5IiwgIkRhdGFWaWV3IiwgIl9saXN0ZW5lciIsICJfb25FdmVudCIsICJzZXREYXRhIiwgImdldERhdGFTZXQiLCAiZ2V0SWRzIiwgIl9pZHMiLCAib2xkSWRzIiwgIm5ld0lkcyIsICJ2aWV3T3B0aW9ucyIsICJ0aGlzRmlsdGVyIiwgIm9wdGlvbnNGaWx0ZXIiLCAiZGVmYXVsdEZpbHRlciIsICJzdHJlYW0iLCAiX3RoaXMkX2RhdGEiLCAib2xkSXRlbXMiLCAidXBkYXRlZEl0ZW1zIiwgImlzRGF0YVNldExpa2UiLCAiZGlzdGluY3QiLCAidXBkYXRlT25seSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJwcm90b3R5cGUiLCAia2V5cyIsICJiIiwgImRlc2NyaXB0b3JzIiwgImZpbHRlciIsICJwb3NpdGlvbiIsICJtYXRjaGVzIiwgImhhc093blByb3BlcnR5IiwgInJlZHVjZXIiLCAiZGVsaW1pdGVyIiwgImRlZmluZSIsICJzaXplIiwgImxlbmd0aCIsICJ0b2tlbiIsICJmaWx0ZXIiLCAiZWFjaCIsICJ0b2tlbiIsICJtYXRjaCIsICJwcm90b3R5cGUiLCAidG9TdHJpbmciLCAiZWFjaCIsICJlbmNvZGUiLCAibWF0Y2giLCAia2V5cyIsICJpc0Zvcm1EYXRhIiwgImlzRmlsZUxpc3QiLCAidHJhbnNpdGlvbmFsIiwgImxpbmUiLCAibWF0Y2giLCAiZmlsdGVyIiwgImNoYXIiLCAic2VsZiIsICJrZXlzIiwgImNvbXB1dGVkIiwgInByb3RvdHlwZSIsICJ2YWxpZGF0ZVN0YXR1cyIsICJtYXRjaCIsICJtaW4iLCAibm93IiwgIm5vdyIsICJtYXRjaCIsICJiIiwgIm1lcmdlIiwgInRva2VuIiwgInRyYW5zaXRpb25hbCIsICJsZW5ndGgiLCAic2lnbmFsIiwgImRvbmUiLCAicmVzIiwgImxlbmd0aCIsICJsZW5ndGgiLCAidmVyc2lvbiIsICJrZXlzIiwgInZhbGlkYXRvcnMiLCAidHJhbnNpdGlvbmFsIiwgInRva2VuIiwgIkF4aW9zIiwgIkF4aW9zRXJyb3IiLCAiQ2FuY2VsZWRFcnJvciIsICJpc0NhbmNlbCIsICJDYW5jZWxUb2tlbiIsICJWRVJTSU9OIiwgImFsbCIsICJpc0F4aW9zRXJyb3IiLCAic3ByZWFkIiwgInRvRm9ybURhdGEiLCAiQXhpb3NIZWFkZXJzIiwgIkh0dHBTdGF0dXNDb2RlIiwgIm1lcmdlQ29uZmlnIiwgInYiLCAiaUxvYWRlZENoaWxkcmVuIiwgImIiLCAiYiIsICJjeWNsZUNoZWNrIiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIlJlYWN0IiwgIlN0eWxlU2hlZXQiLCAibGVuZ3RoIiwgInRyaW0iLCAiYXBwZW5kIiwgImxlbmd0aCIsICJ0cmltIiwgImxlbmd0aCIsICJwcm9wZXJ0eSIsICJjaGFyYWN0ZXIiLCAiY2hhcmFjdGVycyIsICJhcHBlbmQiLCAic2l6ZSIsICJ4IiwgInRyaW0iLCAibGVuZ3RoIiwgImxlbmd0aCIsICJpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmciLCAiY2hhcmFjdGVyIiwgInRvUnVsZXMiLCAiZ2V0UnVsZXMiLCAiY29tcGF0IiwgInJlbW92ZUxhYmVsIiwgImxlbmd0aCIsICJwcmVmaXhlciIsICJjcmVhdGVDYWNoZSIsICJub2RlIiwgInN0eWxpcyIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJyZWdpc3RlclN0eWxlcyIsICJpbnNlcnRTdHlsZXMiLCAiaXNEZXZlbG9wbWVudCIsICJpc0N1c3RvbVByb3BlcnR5IiwgInByb3BlcnR5IiwgImlzUHJvY2Vzc2FibGVWYWx1ZSIsICJwcm9jZXNzU3R5bGVWYWx1ZSIsICJtYXRjaCIsICJrZXlmcmFtZXMiLCAibmV4dCIsICJzdHlsZXMiLCAic3RyaW5nIiwgInN5bmNGYWxsYmFjayIsICJ1c2VJbnNlcnRpb25FZmZlY3QiLCAiaXNEZXZlbG9wbWVudCIsICJ3aXRoRW1vdGlvbkNhY2hlIiwgImZ1bmMiLCAiY3JlYXRlRW1vdGlvblByb3BzIiwgIkluc2VydGlvbiIsICJfcmVmIiwgImlzRGV2ZWxvcG1lbnQiLCAiUmVhY3QiLCAianN4IiwgInN0eWxlcyIsICJub2RlIiwgImtleWZyYW1lcyIsICJ0b1N0cmluZyIsICJvYmplY3QiLCAia2V5cyIsICJjbG9uZUVsZW1lbnRXaXRoQ3NzIiwgImV1aVNjcmVlblJlYWRlck9ubHkiLCAiZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyIsICJFdWlTY3JlZW5SZWFkZXJPbmx5IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIkV1aVNjcmVlblJlYWRlckxpdmUiLCAiX3JlZiIsICJ0b2dnbGUiLCAiUHJvcFR5cGVzIiwgImNhbmRpZGF0ZVNlbGVjdG9ycyIsICJjYW5kaWRhdGVTZWxlY3RvciIsICJqb2luIiwgIk5vRWxlbWVudCIsICJFbGVtZW50IiwgIm1hdGNoZXMiLCAicHJvdG90eXBlIiwgIm1zTWF0Y2hlc1NlbGVjdG9yIiwgIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsICJnZXRSb290Tm9kZSIsICJlbGVtZW50IiwgIm93bmVyRG9jdW1lbnQiLCAiZ2V0Q2FuZGlkYXRlcyIsICJlbCIsICJpbmNsdWRlQ29udGFpbmVyIiwgImZpbHRlciIsICJjYW5kaWRhdGVzIiwgIkFycmF5IiwgInNsaWNlIiwgImFwcGx5IiwgInF1ZXJ5U2VsZWN0b3JBbGwiLCAiY2FsbCIsICJ1bnNoaWZ0IiwgImdldENhbmRpZGF0ZXNJdGVyYXRpdmVseSIsICJlbGVtZW50cyIsICJvcHRpb25zIiwgImVsZW1lbnRzVG9DaGVjayIsICJmcm9tIiwgImxlbmd0aCIsICJzaGlmdCIsICJ0YWdOYW1lIiwgImFzc2lnbmVkIiwgImFzc2lnbmVkRWxlbWVudHMiLCAiY29udGVudCIsICJjaGlsZHJlbiIsICJuZXN0ZWRDYW5kaWRhdGVzIiwgImZsYXR0ZW4iLCAicHVzaCIsICJzY29wZSIsICJ2YWxpZENhbmRpZGF0ZSIsICJpbmNsdWRlcyIsICJzaGFkb3dSb290IiwgImdldFNoYWRvd1Jvb3QiLCAidmFsaWRTaGFkb3dSb290IiwgInNoYWRvd1Jvb3RGaWx0ZXIiLCAiZ2V0VGFiaW5kZXgiLCAibm9kZSIsICJpc1Njb3BlIiwgInRhYkluZGV4IiwgInRlc3QiLCAiaXNDb250ZW50RWRpdGFibGUiLCAiaXNOYU4iLCAicGFyc2VJbnQiLCAiZ2V0QXR0cmlidXRlIiwgInNvcnRPcmRlcmVkVGFiYmFibGVzIiwgImEiLCAiYiIsICJkb2N1bWVudE9yZGVyIiwgImlzSW5wdXQiLCAiaXNIaWRkZW5JbnB1dCIsICJ0eXBlIiwgImlzRGV0YWlsc1dpdGhTdW1tYXJ5IiwgInIiLCAic29tZSIsICJjaGlsZCIsICJnZXRDaGVja2VkUmFkaW8iLCAibm9kZXMiLCAiZm9ybSIsICJpIiwgImNoZWNrZWQiLCAiaXNUYWJiYWJsZVJhZGlvIiwgIm5hbWUiLCAicmFkaW9TY29wZSIsICJxdWVyeVJhZGlvcyIsICJyYWRpb1NldCIsICJ3aW5kb3ciLCAiQ1NTIiwgImVzY2FwZSIsICJlcnIiLCAiY29uc29sZSIsICJlcnJvciIsICJtZXNzYWdlIiwgImlzUmFkaW8iLCAiaXNOb25UYWJiYWJsZVJhZGlvIiwgImlzWmVyb0FyZWEiLCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwgIndpZHRoIiwgImhlaWdodCIsICJpc0hpZGRlbiIsICJfcmVmIiwgImRpc3BsYXlDaGVjayIsICJnZXRDb21wdXRlZFN0eWxlIiwgInZpc2liaWxpdHkiLCAiaXNEaXJlY3RTdW1tYXJ5IiwgIm5vZGVVbmRlckRldGFpbHMiLCAicGFyZW50RWxlbWVudCIsICJub2RlUm9vdEhvc3QiLCAiaG9zdCIsICJub2RlSXNBdHRhY2hlZCIsICJjb250YWlucyIsICJvcmlnaW5hbE5vZGUiLCAicm9vdE5vZGUiLCAiYXNzaWduZWRTbG90IiwgImdldENsaWVudFJlY3RzIiwgImlzRGlzYWJsZWRGcm9tRmllbGRzZXQiLCAicGFyZW50Tm9kZSIsICJkaXNhYmxlZCIsICJpdGVtIiwgImlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUiLCAiaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlIiwgImlzVmFsaWRTaGFkb3dSb290VGFiYmFibGUiLCAic2hhZG93SG9zdE5vZGUiLCAic29ydEJ5T3JkZXIiLCAicmVndWxhclRhYmJhYmxlcyIsICJvcmRlcmVkVGFiYmFibGVzIiwgImZvckVhY2giLCAiY2FuZGlkYXRlVGFiaW5kZXgiLCAic29ydCIsICJyZWR1Y2UiLCAiYWNjIiwgInNvcnRhYmxlIiwgImNvbmNhdCIsICJ0YWJiYWJsZSIsICJiaW5kIiwgImZvY3VzYWJsZSIsICJrZXlzIiwgInN0cmluZ2lmeSIsICJiIiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgInByZWZpeCIsICJ1c2VHZW5lcmF0ZWRIdG1sSWQiLCAiX3JlZiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl90eXBlb2YiLCAib2JqIiwgImlzT2JqZWN0IiwgImlzSW52ZXJzZUNvbG9yTW9kZSIsICJnZXRDb2xvck1vZGUiLCAiZ2V0T24iLCAibm9kZSIsICJzZXRPbiIsICJDb21wdXRlZCIsICJiYXNlIiwgIl9yZWYiLCAiX3JlZjIiLCAiZ2V0Q29tcHV0ZWQiLCAib3ZlciIsICJidWlsZFRoZW1lIiwgImdldFByb3RvdHlwZU9mIiwgInByb3RvdHlwZSIsICJrZXkiLCAicHJvcGVydHkiLCAiZ2V0IiwgIm1lcmdlRGVlcCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgImIiLCAieCIsICJyZ2IiLCAiYiIsICJyZ2IiLCAibWF4IiwgImIiLCAiYiIsICJyb3VuZCIsICJiIiwgInJvdW5kIiwgImNzcyIsICJyZ2IiLCAiaHNsIiwgInJnYiIsICJiIiwgInYiLCAiYiIsICJiIiwgInJvdW5kIiwgImIiLCAiYiIsICJtaW4iLCAiYiIsICJmbG9vciIsICJ2IiwgImIiLCAibWluIiwgIm1heCIsICJyZ2IyaHNsIiwgImIiLCAidiIsICJiIiwgIngiLCAicG93IiwgImIiLCAieCIsICJjb3MiLCAiYiIsICJzcXJ0IiwgInJvdW5kIiwgImIiLCAiYiIsICJudW0iLCAiYiIsICJiIiwgInJvdW5kIiwgInJuZCIsICJ2IiwgImIiLCAicm91bmQiLCAicmdiIiwgImIiLCAicG93IiwgImIiLCAiYWJzIiwgInBvdyIsICJzaWduIiwgImIiLCAiYWJzIiwgImIiLCAiYiIsICJsYWIiLCAicG93IiwgInRlc3QiLCAicmdiIiwgImIiLCAieCIsICJyZ2IiLCAibGNoIiwgInNxcnQiLCAicG93IiwgInBvdyIsICJzcXJ0IiwgIlBJIiwgImNvcyIsICJzaW4iLCAiYXRhbjIiLCAiY29sb3JzIiwgImIiLCAicmdiIiwgInBvdyIsICJjb2xvcnMiLCAidiIsICJmIiwgIl9wb3MiLCAiY29sb3JzIiwgImxhYiIsICJiIiwgInBvdyIsICJzaW4iLCAiY29zIiwgImxpZ2h0bmVzcyIsICJiIiwgImZsb29yIiwgImxvZyIsICJwb3ciLCAiZmxvb3IiLCAiYWJzIiwgIm51bSIsICJtaW4iLCAibWF4IiwgImIiLCAibGltaXRzIiwgInYiLCAiYiIsICJzcXJ0IiwgInBvdyIsICJtaW4iLCAibWF4IiwgImF0YW4yIiwgImFicyIsICJjb3MiLCAic2luIiwgIlBJIiwgImIiLCAiYjIiLCAiYiIsICJjb2xvcnMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiZmxhdHRlbiIsICJfcmVmIiwgImV1aVBhbGV0dGVDb2xvckJsaW5kIiwgIl9yZWYyIiwgImNvbG9ycyIsICJiYXNlIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJiIiwgIl9sb29wIiwgImkiLCAiZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0IiwgImluT3JpZ2luYWxGb3JtYXQiLCAidHJhbnNwYXJlbnRpemUiLCAidGludCIsICJzaGFkZSIsICJsaWdodG5lc3MiLCAiX3R5cGVvZiIsICJvYmoiLCAibWFrZUhpZ2hDb250cmFzdENvbG9yIiwgImxpZ2h0bmVzcyIsICJtYWtlRGlzYWJsZWRDb250cmFzdENvbG9yIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9yZWY1IiwgImNvbG9ycyIsICJfcmVmNiIsICJfcmVmNyIsICJfcmVmOCIsICJfcmVmOSIsICJfcmVmMTAiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgImxvZ2ljYWxDU1MiLCAicHJvcGVydHkiLCAibG9naWNhbFNpemVDU1MiLCAibG9naWNhbFRleHRBbGlnbkNTUyIsICJfdHlwZW9mIiwgIm9iaiIsICJzaXplVG9QaXhlbCIsICJiYXNlIiwgIl9yZWYiLCAiYmFzZSIsICJmb250IiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJfcmVmNCIsICJfcmVmNSIsICJfcmVmNiIsICJfcmVmNyIsICJfcmVmOCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3JlZiIsICJfcmVmMiIsICJiYXNlIiwgImltcG9ydF9yZWFjdCIsICJfZXh0ZW5kcyIsICJ1c2VFdWlUaGVtZSIsICJ3aXRoRXVpVGhlbWUiLCAiQ29tcG9uZW50IiwgIlJlbmRlciIsICJpbXBvcnRfcmVhY3QiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJFdWlUaGVtZVByb3ZpZGVyIiwgIl9yZWYiLCAiaXNFcXVhbCIsICJ0aHJvdHRsZSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIkN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIiLCAiX3JlZiIsICJ0aHJvdHRsZSIsICJpbXBvcnRfcmVhY3QiLCAidXNlQ3VycmVudEV1aUJyZWFrcG9pbnQiLCAidXNlSXNXaXRoaW5CcmVha3BvaW50cyIsICJmaW5kRWxlbWVudEJ5U2VsZWN0b3JPclJlZiIsICJub2RlIiwgImlzVW5kZWZpbmVkIiwgImlzTnVsbCIsICJpc05pbCIsICJpc0RhdGUiLCAibW9tZW50IiwgImlzRnVuY3Rpb24iLCAiX2lzRnVuY3Rpb24iLCAiaXNBcnJheSIsICJfaXNBcnJheSIsICJpc1N0cmluZyIsICJfaXNTdHJpbmciLCAiaXNCb29sZWFuIiwgIl9pc0Jvb2xlYW4iLCAiaXNOdW1iZXIiLCAiX2lzTnVtYmVyIiwgImlzTmFOIiwgIl9pc05hTiIsICJmb3JtYXRCb29sZWFuIiwgIl9yZWYiLCAiaW1wb3J0X21vbWVudCIsICJfdHlwZW9mIiwgIm9iaiIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgImNhbGVuZGFyIiwgIm1vbWVudCIsICJ4IiwgImZvcm1hdERhdGUiLCAiaXNTdHJpbmciLCAiaXNGdW5jdGlvbiIsICJmb3JtYXROdW1iZXIiLCAicm91bmQiLCAiaXNTdHJpbmciLCAibnVtZXJhbCIsICJmb3JtYXRUZXh0IiwgImZvcm1hdEF1dG8iLCAiaXNOYU4iLCAiaXNTdHJpbmciLCAiaXNEYXRlIiwgImlzQm9vbGVhbiIsICJpc051bWJlciIsICJpc0FycmF5IiwgImlzRG9tYWluU2VjdXJlIiwgImdldFNlY3VyZVJlbEZvclRhcmdldCIsICJfcmVmIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfZ2V0IiwgImdldCIsICJvYmplY3QiLCAiX2dldCIsICJ2MSIsICJyZXZlcnNlIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgImdldEJ1ZmZlclZhbHVlcyIsICJfc2xpY2VkVG9BcnJheSIsICJfcmVmIiwgInBvc2l0aW9uIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfcmVmNCIsICJfcmVmNSIsICJub2RlIiwgImdldFRyYW5zaXRpb25UaW1pbmdzIiwgImdldFdhaXREdXJhdGlvbiIsICJwZXJmb3JtT25GcmFtZSIsICJvbkZyYW1lIiwgImltcG9ydF9yZWFjdCIsICJ1c2VDb21iaW5lZFJlZnMiLCAibm9kZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIlJlYWN0IiwgIl9leHRlbmRzIiwgIkV1aUljb25BY2Nlc3NpYmlsaXR5IiwgIl9yZWYiLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BZ2dyZWdhdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQWxlcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQW5hbHl6ZUV2ZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFuYWx5emVFdmVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Bbm5vdGF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwbVRyYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFkZERhdGEiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5ncyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBZ2VudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBcG0iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQXBwU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEF1ZGl0YmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDYW52YXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ2FzZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ29kZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDb25zb2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERhc2hib2FyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBEZXZ0b29scyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBEaXNjb3ZlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBFbXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRmlsZWJlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRmxlZXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR2lzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEdyYXBoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEdyb2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwSGVhcnRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEluZGV4TWFuYWdlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBJbmRleFBhdHRlcm4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwSW5kZXhSb2xsdXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTGVucyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBMb2dzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1hbmFnZW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWV0cmljYmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNZXRyaWNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1sIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1vbml0b3JpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTm90ZWJvb2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwUGFja2V0YmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBQaXBlbGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBSZWNlbnRseVZpZXdlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBSZXBvcnRpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2F2ZWRPYmplY3RzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNlY3VyaXR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNlY3VyaXR5QW5hbHl0aWNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNwYWNlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTcWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwVGltZWxpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwVXBncmFkZUFzc2lzdGFudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVcHRpbWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwVXNlcnNSb2xlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBWaXN1YWxpemUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwV2F0Y2hlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBXb3JrcGxhY2VTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd0VuZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd1N0YXJ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93RG93biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd0xlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd1VwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFzdGVyaXNrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJlYWtlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CZWxsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJlbGxTbGFzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Cb2x0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJveGVzSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Cb3hlc1ZlcnRpY2FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJyYW5jaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CcmFuY2hVc2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJyb29tIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJydXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJ1ZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25CdWxsc2V5ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DYWxlbmRhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGVjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DaGVja0luQ2lyY2xlRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNoZWVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb2NrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb3VkRHJpenpsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbG91ZFN0b3JteSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DbG91ZFN1bm55IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsdXN0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29sb3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29tcHV0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db25zb2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRhaW5lciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5QWJvdmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGludWl0eUFib3ZlQmVsb3ciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGludWl0eUJlbG93IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlXaXRoaW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRyb2xzVmVydGljYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29weSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db3B5Q2xpcGJvYXJkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNyb3NzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNyb3NzSW5BQ2lyY2xlRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNyb3NzaGFpcnMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3VycmVuY3kiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3V0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRhdGFiYXNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRlc2t0b3AiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG9jdW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG9jdW1lbnRFZGl0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvY3VtZW50YXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG9jdW1lbnRzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb3VibGVBcnJvd0xlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG91YmxlQXJyb3dSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb3dubG9hZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JEaXN0cmlidXRlVmVydGljYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduQm90dG9tIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25MZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnbk1pZGRsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25Ub3AiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQWxpZ25DZW50ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQWxpZ25MZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckFsaWduUmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQm9sZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JDaGVja2xpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQ29kZUJsb2NrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckNvbW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySGVhZGluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGFsaWMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yTGluayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JPcmRlcmVkTGlzdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JSZWRvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclN0cmlrZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JUYWJsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JVbmRlcmxpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yVW5kbyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVtYWlsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVtcHR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVxbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FcmFzZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXhpdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeHBhbmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXhwYW5kTWluaSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeHBvcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXllIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV5ZUNsb3NlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GYWNlSGFwcHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmFjZU5ldXRyYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmFjZVNhZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GaWx0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRmxhZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Gb2xkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGRlckNoZWNrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGRlckNsb3NlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Gb2xkZXJPcGVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZyYW1lTmV4dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GcmFtZVByZXZpb3VzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZ1bGxTY3JlZW5FeGl0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZ1bGxTY3JlZW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnVuY3Rpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR2VhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HbGFzc2VzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdsb2JlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdyYWIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JhYkhvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JpZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25IZWFydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25IZWF0bWFwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkhlbHAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSG9tZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW1hZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW1wb3J0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4Q2xvc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhFZGl0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4Rmx1c2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhNYXBwaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4T3BlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleFJ1bnRpbWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhTZXR0aW5ncyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbnB1dE91dHB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbnNwZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkludmVydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LZXlib2FyZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxGaWVsZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxGdW5jdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25LcWxPcGVyYW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbFNlbGVjdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbFZhbHVlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkt1YmVybmV0ZXNOb2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkt1YmVybmV0ZXNQb2QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGF5ZXJzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxldHRlcmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5lRGFzaGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpbmVEb3R0ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluZVNvbGlkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpbmsiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGlzdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaXN0QWRkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9ja09wZW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Flcm9zcGlrZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXBhY2hlIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0FwcFNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXdzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Bd3NNb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BenVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXp1cmVNb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29CZWF0cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQnVzaW5lc3NBbmFseXRpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NlcGgiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Nsb3VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29DbG91ZEVjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ29kZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ29kZXNhbmRib3giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0NvdWNoYmFzZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRG9ja2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Ecm9wd2l6YXJkIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VsYXN0aWMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0VsYXN0aWNTdGFjayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRW50ZXJwcmlzZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRXRjZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR2NwIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0djcE1vbm8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dpdGh1YiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR21haWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0dvbGFuZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR29vZ2xlRyIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29IYXByb3h5IiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0libSIsICJfcmVmIiwgImdlbmVyYXRlSWQiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29JYm1Nb25vIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29LYWZrYSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvS2liYW5hIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29LdWJlcm5ldGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Mb2dnaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Mb2dzdGFzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTWFwcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTWVtY2FjaGVkIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01ldHJpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb01vbmdvZGIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb015c3FsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29OZ2lueCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvT3NxdWVyeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUGhwIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1Bvc3RncmVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Qcm9tZXRoZXVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29SYWJiaXRtcSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUmVkaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NlY3VyaXR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29TaXRlU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Ta2V0Y2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NsYWNrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29VcHRpbWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1dlYmhvb2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1dpbmRvd3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1dvcmtwbGFjZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaEZpbHRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaElmIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoSW5wdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hPdXRwdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hRdWV1ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NYWduZXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmlmeVdpdGhFeGNsYW1hdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NYWduaWZ5V2l0aE1pbnVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25pZnlXaXRoUGx1cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NYXBNYXJrZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVtb3J5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVudURvd24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVudUxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVudVJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lbnVVcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZXJnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NaW5pbWl6ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NaW51cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NaW51c0luQ2lyY2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbnVzSW5DaXJjbGVGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlTXVsdGlNZXRyaWNKb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlU2luZ2xlTWV0cmljSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sUmVncmVzc2lvbkpvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Nb2JpbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTW9vbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25OYW1lc3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTmVzdGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk5vZGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTnVtYmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk9mZmxpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uT25saW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhY2thZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFnZVNlbGVjdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYWdlc1NlbGVjdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYWludCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXBlckNsaXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFydGlhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXVzZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXltZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBlbmNpbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QZXJjZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBpbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QaW5GaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGxheSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbGF5RmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsdXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGx1c0luQ2lyY2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Qb3BvdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUHVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25RdWVzdGlvbkluQ2lyY2xlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblF1b3RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblJlZnJlc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUmVwb3J0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUmV0dXJuS2V5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNhdmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2NhbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlY3VyaXR5U2lnbmFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2VjdXJpdHlTaWduYWxSZXNvbHZlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZXNzaW9uVmlld2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNoYXJkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNoYXJlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNub3dmbGFrZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0UmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydERvd24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydFVwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRhYmxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJQbHVzRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhclBsdXNGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckVtcHR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJFbXB0eVNwYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckZpbGxlZFNwYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJNaW51c0VtcHR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXJNaW51c0ZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGF0cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdG9wIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0b3BGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcFNsYXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0b3JhZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RyaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN1Ym1vZHVsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3dhdGNoSW5wdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3ltbGluayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWJsZU9mQ29udGVudHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGFibGVEZW5zaXR5Q29tcGFjdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWJsZURlbnNpdHlOb3JtYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGFnIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRlYXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGVtcGVyYXR1cmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGltZVJlZnJlc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGltZWxpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGltZXNsaWRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkFsaWFzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQW5ub3RhdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkFycmF5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQmluYXJ5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQm9vbGVhbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkNsYXNzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkNvbnN0YW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRGF0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkRlbnNlVmVjdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRWxlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkVudW0iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FbnVtTWVtYmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRXZlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FeGNlcHRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GaWVsZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkZpbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GbGF0dGVuZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5GdW5jdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkdlbyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkhpc3RvZ3JhbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbklQIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSW50ZXJmYWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSm9pbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbktleSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbktleXdvcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5NZXRob2QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5NZXRyaWNDb3VudGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTWV0cmljR2F1Z2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Nb2R1bGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OYW1lc3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OZXN0ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OdWxsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuTnVtYmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuT2JqZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuT3BlcmF0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5QYWNrYWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUGFyYW1ldGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUGVyY29sYXRvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblByb3BlcnR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUmFuZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5SYW5rRmVhdHVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJhbmtGZWF0dXJlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJlcG8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TZWFyY2hUeXBlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuU2hhcGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TdHJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TdHJ1Y3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TeW1ib2wiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5UYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5UZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVG9rZW5Db3VudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblZhcmlhYmxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRyYWluaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRyYXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVuZm9sZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25VbmxpbmsiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVXNlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Vc2VyQXZhdGFyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVzZXJzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZlY3RvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaWRlb1BsYXllciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNBcmVhIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0FyZWFTdGFja2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0Jhckhvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQmFyVmVydGljYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQmFyVmVydGljYWxTdGFja2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0dhdWdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0dvYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNNYXBDb29yZGluYXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc01hcFJlZ2lvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNNZXRyaWMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzUGllIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1RhYmxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1RhZ0Nsb3VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1RleHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVGltZWxpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVmVnYSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNWaXN1YWxCdWlsZGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbldvcmRXcmFwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbldvcmRXcmFwRGlzYWJsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV3JlbmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImV1aUJhY2tncm91bmRDb2xvciIsICJfcmVmIiwgIl9yZWYyIiwgInRpbnRPclNoYWRlIiwgImNvbG9yIiwgInVzZUV1aUJhY2tncm91bmRDb2xvciIsICJfcmVmMyIsICJ1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MiLCAiZXVpU2Nyb2xsQmFyU3R5bGVzIiwgIl9yZWYiLCAiY29sb3JzIiwgInNpemUiLCAiX3JlZjIiLCAiZXVpUGFkZGluZ1NpemUiLCAiX3JlZiIsICJzaXplIiwgInVzZUV1aVBhZGRpbmdTaXplIiwgInVzZUV1aVBhZGRpbmdDU1MiLCAicHJvcGVydHkiLCAiZXVpRm9jdXNSaW5nIiwgImV1aUZvbnRTaXplIiwgIl9yZWYiLCAiZXVpVGV4dEJyZWFrV29yZCIsICJFdWlHbG9iYWxTdHlsZXMiLCAiX3JlZiIsICJiYXNlIiwgImNvbG9ycyIsICJmb250IiwgInN0eWxlcyIsICJpY29uU2l6ZSIsICJzaXplIiwgImV1aUljb25TdHlsZXMiLCAiX3JlZjMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJzZWxmIiwgIl9nZXRQcm90b3R5cGVPZiIsICJnZXRJc0FwcEljb24iLCAieCIsICJpY29uIiwgIkV1aUljb25DbGFzcyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnR5IiwgIl9yZWYiLCAiaWNvbiIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfb2JqZWN0U3ByZWFkIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgImZvY3VzYWJsZSIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJFdWlDb250ZXh0IiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm9iaiIsICJpc0Jvb2xlYW4iLCAiaXNTdHJpbmciLCAiaXNOdW1iZXIiLCAiaXNVbmRlZmluZWQiLCAiY2hhciIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgInRva2VuIiwgInJlbmRlciIsICJDb21wb25lbnQiLCAiUmVhY3QiLCAieCIsICJFdWlJMThuIiwgIl9yZWYiLCAiX3JlZjIiLCAidXNlTG9hZGluZ0FyaWFMYWJlbCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAic3Bpbm5lckNvbG9yc0NTUyIsICJib3JkZXIiLCAiaGlnaGxpZ2h0IiwgImV1aUxvYWRpbmdTcGlubmVyU3R5bGVzIiwgIl9yZWYiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlMb2FkaW5nU3Bpbm5lciIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZCIsICJfcmVmIiwgImljb25TaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIlVSTCIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJDT0xPUlMiLCAiU0laRVMiLCAiRXVpQnV0dG9uIiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgIl9yZWYyIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAib2JqIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpT2JzZXJ2ZXIiLCAicmVuZGVyIiwgIl90eXBlb2YiLCAib2JqIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfdHlwZW9mIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aVJlc2l6ZU9ic2VydmVyIiwgIm1ha2VSZXNpemVPYnNlcnZlciIsICJub2RlIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfY29sb3JDU1MiLCAiZXVpTGlua0hvdmVyQ1NTIiwgImV1aUxpbmtGb2N1c0NTUyIsICJldWlMaW5rQ1NTIiwgIl9yZWYiLCAiZXVpTGlua1N0eWxlcyIsICJfcmVmMiIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgImV1aVRpdGxlIiwgIl9yZWYiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpVGl0bGVTdHlsZXMiLCAiZXVpVGV4dCIsICJldWlTY2FsZVRleHQiLCAiZXVpVGV4dFN0eWxlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlUZXh0Q29sb3JTdHlsZXMiLCAiX3JlZjIiLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJFdWlUZXh0Q29sb3IiLCAiX3JlZiIsICJjbG9uZUVsZW1lbnQiLCAiaXNOYW1lZENvbG9yIiwgInN0eWxlcyIsICJDb21wb25lbnQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJldWlUZXh0QWxpZ25TdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRleHRBbGlnbiIsICJfcmVmIiwgImNsb25lRWxlbWVudCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRleHQiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiY29sb3JUb0NsYXNzTmFtZU1hcCIsICJDT0xPUlMiLCAic2l6ZVRvQ2xhc3NOYW1lTWFwIiwgIlNJWkVTIiwgIkV1aUJ1dHRvbkVtcHR5IiwgIl9yZWYiLCAiaWNvblNpemUiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJjb2xvclRvQ2xhc3NOYW1lTWFwIiwgIkNPTE9SUyIsICJzaXplVG9DbGFzc05hbWVNYXAiLCAiU0laRVMiLCAiRXVpQnV0dG9uSWNvbiIsICJfcmVmIiwgImljb25TaXplIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAibm9kZSIsICJFdWlJbm5lclRleHQiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImNhbmNlbEZyYW1lIiwgImFuaW1hdGlvbiIsICJjc3MiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpQXV0b1NpemVyIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJwYXJzZUNvbG9yIiwgInJnYiIsICJjaHJvbWFWYWxpZCIsICJfdHlwZW9mIiwgIl9leGNsdWRlZCIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJDT0xPUlMiLCAiaWNvblNpZGVUb0NsYXNzTmFtZU1hcCIsICJJQ09OX1NJREVTIiwgIkV1aUJhZGdlIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJFbGVtZW50IiwgIlByb3BUeXBlcyIsICJpc05hbWVkQ29sb3IiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aVBvcnRhbCIsICJwb3NpdGlvbiIsICJyZW5kZXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpVG9vbFRpcFBvcG92ZXIiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiZGlzcGxheVRvQ2xhc3NOYW1lTWFwIiwgIkV1aVRvb2xUaXAiLCAicG9zaXRpb24iLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiYW5jaG9yIiwgIm9uRm9jdXMiLCAib25CbHVyIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGlwIiwgIl9yZWYiLCAic2l6ZSIsICJwb3NpdGlvbiIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJDT0xPUlMiLCAiU0laRVMiLCAiRXVpQmV0YUJhZGdlIiwgIl9yZWYiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgImljb24iLCAiRWxlbWVudCIsICJQcm9wVHlwZXMiLCAiZ2V0U2hhZG93Q29sb3IiLCAiZXVpU2hhZG93WFNtYWxsIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpU2hhZG93U21hbGwiLCAiX3JlZjMiLCAiX3JlZjQiLCAiZXVpU2hhZG93TWVkaXVtIiwgIl9yZWY1IiwgIl9yZWY2IiwgInByb3BlcnR5IiwgInYiLCAiZXVpU2hhZG93TGFyZ2UiLCAiX3JlZjciLCAiX3JlZjgiLCAiZXVpU2hhZG93WExhcmdlIiwgIl9yZWY5IiwgIl9yZWYxMCIsICJyZXZlcnNlIiwgImV1aVNoYWRvd0ZsYXQiLCAiZXVpU2hhZG93IiwgInNpemUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfcmVmIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgIl9vYmplY3RTcHJlYWQiLCAiY2xhc3NOYW1lcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9fYXNzaWduIiwgImZyb20iLCAiUmVhY3QiLCAiUmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgIl9fYXNzaWduIiwgIl9fcmVzdCIsICJkZWZhdWx0cyIsICJtaWRkbGV3YXJlIiwgIngiLCAiY2JzIiwgImZpbHRlciIsICJfX2Fzc2lnbiIsICJSZWFjdCIsICJfX3Jlc3QiLCAiX19hc3NpZ24iLCAiU2lkZUNhciIsICJSZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJSZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJJbkZvY3VzR3VhcmQiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiX3JlZiIsICJpbXBvcnRfcmVhY3QiLCAiX2V4dGVuZHMyIiwgIlNpZGVDYXIiLCAiX3JlZiIsICJjYXB0dXJlRm9jdXNSZXN0b3JlIiwgIm9uRm9jdXMiLCAib25CbHVyIiwgImV4dHJhY3RSZWYiLCAiZWZmZWN0Q2FyIiwgIlNpZGVDYXIiLCAiZWZmZWN0Q2FyIiwgIlJlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJ0IiwgImUiLCAiX3NldFByb3RvdHlwZU9mIiwgIl90eXBlb2YiLCAibyIsICJfdHlwZW9mIiwgIl90eXBlb2YiLCAiX2RlZmluZVByb3BlcnR5IiwgImltcG9ydF9yZWFjdCIsICJyZWR1Y2VQcm9wc1RvU3RhdGUiLCAiaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCIsICJTaWRlRWZmZWN0IiwgInBlZWsiLCAicmVuZGVyIiwgIlJlYWN0IiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJ0b0FycmF5IiwgImFzQXJyYXkiLCAibm9kZSIsICJ4IiwgImIiLCAibm9kZSIsICJ0b0FycmF5IiwgInRvQXJyYXkiLCAibm9kZSIsICJ0b0FycmF5IiwgIm5vZGUiLCAicG9zaXRpb24iLCAibm9kZSIsICJhc0FycmF5IiwgInRvQXJyYXkiLCAidG9BcnJheSIsICJub2RlIiwgInRvQXJyYXkiLCAibm9kZSIsICJub2RlIiwgIm5vZGUiLCAibm9kZSIsICJub2RlIiwgImFzQXJyYXkiLCAibm9kZSIsICJhc0FycmF5IiwgIm5vZGUiLCAiZm9jdXNhYmxlIiwgImxpbmUiLCAiZm9jdXNhYmxlIiwgImFzQXJyYXkiLCAibm9kZSIsICJuZXh0IiwgInByZXYiLCAiZm9jdXNPbkJvZHkiLCAiaXNGcmVlRm9jdXMiLCAidHJ5UmVzdG9yZUZvY3VzIiwgImRlZmF1bHRXaGl0ZWxpc3QiLCAiZm9jdXNXaGl0ZWxpc3RlZCIsICJyZWNvcmRQb3J0YWwiLCAiZm9jdXNJc1BvcnRhbGVkUGFpciIsICJmb2N1c1dhc091dHNpZGUiLCAiY2hlY2tJbkhvc3QiLCAid2l0aGluSG9zdCIsICJnZXROb2RlRm9jdXNhYmxlcyIsICJpc05vdEZvY3VzYWJsZSIsICJub2RlIiwgImFjdGl2YXRlVHJhcCIsICJzaG91bGRGb3JjZVJlc3RvcmVGb2N1cyIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgIm9uVHJhcCIsICJvbkJsdXIiLCAib25Gb2N1cyIsICJGb2N1c1dhdGNoZXIiLCAiRm9jdXNUcmFwIiwgIl9yZWY1IiwgIlByb3BUeXBlcyIsICJvbldpbmRvd0ZvY3VzIiwgIm9uV2luZG93Qmx1ciIsICJhdHRhY2hIYW5kbGVyIiwgImRldGFjaEhhbmRsZXIiLCAiX3JlZjYiLCAiX3JlZjciLCAiUmVhY3QiLCAiUmVhY3QiLCAiUmVhY3QiLCAiY3NzIiwgInN0eWxlcyIsICJzdHlsZXMiLCAicGFyc2UiLCAieCIsICJub2RlIiwgInN0eWxlcyIsICJwb3NpdGlvbiIsICJleHRyYWN0UmVmIiwgIngiLCAiU3R5bGUiLCAibm9kZSIsICJzaWRlY2FyX2RlZmF1bHQiLCAiUmVhY3QiLCAibm9kZSIsICJ4IiwgIlJlYWN0IiwgIlN0eWxlIiwgImltcG9ydF9yZWFjdCIsICJleHRyYWN0UmVmIiwgIm5vZGUiLCAic2lkZWNhcl9kZWZhdWx0IiwgImVmZmVjdENhciIsICJzaWRlY2FyX2RlZmF1bHQiLCAiRm9jdXNPbiIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aUZvY3VzVHJhcCIsICJub2RlIiwgInJlbmRlciIsICJGb2N1c09uIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAib2JqIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpTXV0YXRpb25PYnNlcnZlciIsICJtYWtlTXV0YXRpb25PYnNlcnZlciIsICJub2RlIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciIsICJyZW5kZXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJldWlQb3BvdmVyQXJyb3dTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQb3BvdmVyQXJyb3ciLCAiX3JlZiIsICJwb3NpdGlvbiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiZXVpUG9wb3ZlclN0eWxlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpUGFuZWxTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUGFuZWwiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiZXVpUG9wb3ZlclBhbmVsU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUG9wb3ZlclBhbmVsIiwgIl9yZWYiLCAicG9zaXRpb24iLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX2luaGVyaXRzIiwgIkV1aVBvcG92ZXIiLCAiX2NyZWF0ZVN1cGVyIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX3JlZjUiLCAiZHVyYXRpb25NYXRjaCIsICJkZWxheU1hdGNoIiwgIl9yZWY2IiwgInBvc2l0aW9uIiwgIl9vYmplY3RTcHJlYWQiLCAibm9kZSIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiaW5pdGlhbEZvY3VzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGl0bGUiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX29iamVjdFNwcmVhZCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUNhcmRTZWxlY3QiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUNhcmQiLCAiX3JlZiIsICJpY29uIiwgIm91dGVyT25DbGljayIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgIm5vZGUiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiVFlQRVMiLCAiRXVpQ2hlY2tib3giLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImlzVmFsaWRFbGVtZW50IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZsZXhJdGVtIiwgIl9yZWYiLCAiQ29tcG9uZW50IiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAic2l6ZVRvQ2xhc3NOYW1lTWFwIiwgIlNJWkVTIiwgIkV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24iLCAiX3JlZiIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiIsICJfcmVmIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiaWNvbiIsICJfaW5oZXJpdHMiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyIsICJfY3JlYXRlU3VwZXIiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUxhYmVsIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXQiLCAicmVuZGVyIiwgImljb24iLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAic3RyaW5nIiwgIm5vZGUiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJFdWlWYWxpZGF0YWJsZUNvbnRyb2wiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiX3JlZiIsICJpY29uIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpRmllbGRTZWFyY2giLCAib25TZWFyY2giLCAib25DaGFuZ2UiLCAicmVuZGVyIiwgImFwcGVuZCIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtRXJyb3JUZXh0IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUhlbHBUZXh0IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiZGlzcGxheVRvQ2xhc3NOYW1lTWFwIiwgIkRJU1BMQVlTIiwgIkV1aUZvcm1Sb3ciLCAiX3JlZiIsICJyZW5kZXIiLCAiX3JlZjIiLCAiY2xhc3NOYW1lcyIsICJoZWxwVGV4dCIsICJlcnJvciIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJzaXplVG9DbGFzc05hbWVNYXAiLCAiU0laRVMiLCAiRXVpQ29udGV4dE1lbnVJdGVtIiwgInJlbmRlciIsICJpY29uIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIlNJWkVTIiwgIkV1aUNvbnRleHRNZW51UGFuZWwiLCAibm9kZSIsICJyZW5kZXIiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpSG9yaXpvbnRhbFJ1bGVTdHlsZXMiLCAiX3JlZiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlIb3Jpem9udGFsUnVsZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVN3aXRjaCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiaXNFcXVhbCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyIsICJwZXJmb3JtYW5jZSIsICJub3ciLCAiRGF0ZSIsICJjYW5jZWxUaW1lb3V0IiwgInRpbWVvdXRJRCIsICJjYW5jZWxBbmltYXRpb25GcmFtZSIsICJpZCIsICJyZXF1ZXN0VGltZW91dCIsICJjYWxsYmFjayIsICJkZWxheSIsICJzdGFydCIsICJ0aWNrIiwgImNhbGwiLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgInNpemUiLCAiZ2V0U2Nyb2xsYmFyU2l6ZSIsICJyZWNhbGN1bGF0ZSIsICJkaXYiLCAiZG9jdW1lbnQiLCAiY3JlYXRlRWxlbWVudCIsICJzdHlsZSIsICJ3aWR0aCIsICJoZWlnaHQiLCAib3ZlcmZsb3ciLCAiYm9keSIsICJhcHBlbmRDaGlsZCIsICJvZmZzZXRXaWR0aCIsICJjbGllbnRXaWR0aCIsICJyZW1vdmVDaGlsZCIsICJjYWNoZWRSVExSZXN1bHQiLCAiZ2V0UlRMT2Zmc2V0VHlwZSIsICJvdXRlckRpdiIsICJvdXRlclN0eWxlIiwgImRpcmVjdGlvbiIsICJpbm5lckRpdiIsICJpbm5lclN0eWxlIiwgInNjcm9sbExlZnQiLCAiZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50IiwgImRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50IiwgImRldldhcm5pbmdzVGFnTmFtZSIsICJwcm9jZXNzIiwgIndpbmRvdyIsICJXZWFrU2V0IiwgIklTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCIsICJkZWZhdWx0SXRlbUtleSIsICJpbmRleCIsICJkYXRhIiwgImRldldhcm5pbmdzRGlyZWN0aW9uIiwgImRldldhcm5pbmdzVGFnTmFtZSIsICJwcm9jZXNzIiwgIndpbmRvdyIsICJXZWFrU2V0IiwgImNyZWF0ZUxpc3RDb21wb25lbnQiLCAiX3JlZiIsICJnZXRJdGVtT2Zmc2V0IiwgImdldEVzdGltYXRlZFRvdGFsU2l6ZSIsICJnZXRJdGVtU2l6ZSIsICJnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCIsICJnZXRTdGFydEluZGV4Rm9yT2Zmc2V0IiwgImdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCAiaW5pdEluc3RhbmNlUHJvcHMiLCAic2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSIsICJ2YWxpZGF0ZVByb3BzIiwgInByb3BzIiwgIl9pbnN0YW5jZVByb3BzIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX291dGVyUmVmIiwgIl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkIiwgInN0YXRlIiwgImluc3RhbmNlIiwgImlzU2Nyb2xsaW5nIiwgInNjcm9sbERpcmVjdGlvbiIsICJzY3JvbGxPZmZzZXQiLCAiaW5pdGlhbFNjcm9sbE9mZnNldCIsICJzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQiLCAiX2NhbGxPbkl0ZW1zUmVuZGVyZWQiLCAibWVtb2l6ZU9uZSIsICJvdmVyc2NhblN0YXJ0SW5kZXgiLCAib3ZlcnNjYW5TdG9wSW5kZXgiLCAidmlzaWJsZVN0YXJ0SW5kZXgiLCAidmlzaWJsZVN0b3BJbmRleCIsICJvbkl0ZW1zUmVuZGVyZWQiLCAiX2NhbGxPblNjcm9sbCIsICJvblNjcm9sbCIsICJfZ2V0SXRlbVN0eWxlIiwgImRpcmVjdGlvbiIsICJpdGVtU2l6ZSIsICJsYXlvdXQiLCAiaXRlbVN0eWxlQ2FjaGUiLCAiX2dldEl0ZW1TdHlsZUNhY2hlIiwgInN0eWxlIiwgImhhc093blByb3BlcnR5IiwgIm9mZnNldCIsICJzaXplIiwgImlzSG9yaXpvbnRhbCIsICJpc1J0bCIsICJvZmZzZXRIb3Jpem9udGFsIiwgInBvc2l0aW9uIiwgImxlZnQiLCAidW5kZWZpbmVkIiwgInJpZ2h0IiwgInRvcCIsICJoZWlnaHQiLCAid2lkdGgiLCAiXyIsICJfXyIsICJfX18iLCAiX29uU2Nyb2xsSG9yaXpvbnRhbCIsICJldmVudCIsICJjdXJyZW50VGFyZ2V0IiwgImNsaWVudFdpZHRoIiwgInNjcm9sbExlZnQiLCAic2Nyb2xsV2lkdGgiLCAic2V0U3RhdGUiLCAicHJldlN0YXRlIiwgImdldFJUTE9mZnNldFR5cGUiLCAiTWF0aCIsICJtYXgiLCAibWluIiwgIl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkIiwgIl9vblNjcm9sbFZlcnRpY2FsIiwgImNsaWVudEhlaWdodCIsICJzY3JvbGxIZWlnaHQiLCAic2Nyb2xsVG9wIiwgIl9vdXRlclJlZlNldHRlciIsICJyZWYiLCAib3V0ZXJSZWYiLCAiY3VycmVudCIsICJjYW5jZWxUaW1lb3V0IiwgInJlcXVlc3RUaW1lb3V0IiwgIl9yZXNldElzU2Nyb2xsaW5nIiwgImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsICJuZXh0UHJvcHMiLCAidmFsaWRhdGVTaGFyZWRQcm9wcyIsICJzY3JvbGxUbyIsICJzY3JvbGxUb0l0ZW0iLCAiYWxpZ24iLCAiaXRlbUNvdW50IiwgInNjcm9sbGJhclNpemUiLCAiZ2V0U2Nyb2xsYmFyU2l6ZSIsICJjb21wb25lbnREaWRNb3VudCIsICJfY2FsbFByb3BzQ2FsbGJhY2tzIiwgImNvbXBvbmVudERpZFVwZGF0ZSIsICJjb21wb25lbnRXaWxsVW5tb3VudCIsICJyZW5kZXIiLCAiY2hpbGRyZW4iLCAiY2xhc3NOYW1lIiwgImlubmVyUmVmIiwgImlubmVyRWxlbWVudFR5cGUiLCAiaW5uZXJUYWdOYW1lIiwgIml0ZW1EYXRhIiwgIml0ZW1LZXkiLCAib3V0ZXJFbGVtZW50VHlwZSIsICJvdXRlclRhZ05hbWUiLCAidXNlSXNTY3JvbGxpbmciLCAiX2dldFJhbmdlVG9SZW5kZXIiLCAic3RhcnRJbmRleCIsICJzdG9wSW5kZXgiLCAiaXRlbXMiLCAicHVzaCIsICJjcmVhdGVFbGVtZW50IiwgImtleSIsICJlc3RpbWF0ZWRUb3RhbFNpemUiLCAib3ZlcmZsb3ciLCAiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCAid2lsbENoYW5nZSIsICJwb2ludGVyRXZlbnRzIiwgIm92ZXJzY2FuQ291bnQiLCAib3ZlcnNjYW5CYWNrd2FyZCIsICJvdmVyc2NhbkZvcndhcmQiLCAiUHVyZUNvbXBvbmVudCIsICJkZWZhdWx0UHJvcHMiLCAiX3JlZjIiLCAiX3JlZjMiLCAiaGFzIiwgImFkZCIsICJjb25zb2xlIiwgIndhcm4iLCAiRXJyb3IiLCAiRml4ZWRTaXplTGlzdCIsICJjcmVhdGVMaXN0Q29tcG9uZW50IiwgImdldEl0ZW1PZmZzZXQiLCAiX3JlZiIsICJpbmRleCIsICJpdGVtU2l6ZSIsICJnZXRJdGVtU2l6ZSIsICJfcmVmMiIsICJnZXRFc3RpbWF0ZWRUb3RhbFNpemUiLCAiX3JlZjMiLCAiaXRlbUNvdW50IiwgImdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50IiwgIl9yZWY0IiwgImFsaWduIiwgInNjcm9sbE9mZnNldCIsICJpbnN0YW5jZVByb3BzIiwgInNjcm9sbGJhclNpemUiLCAiZGlyZWN0aW9uIiwgImhlaWdodCIsICJsYXlvdXQiLCAid2lkdGgiLCAiaXNIb3Jpem9udGFsIiwgInNpemUiLCAibGFzdEl0ZW1PZmZzZXQiLCAiTWF0aCIsICJtYXgiLCAibWF4T2Zmc2V0IiwgIm1pbiIsICJtaW5PZmZzZXQiLCAibWlkZGxlT2Zmc2V0IiwgInJvdW5kIiwgImNlaWwiLCAiZmxvb3IiLCAiZ2V0U3RhcnRJbmRleEZvck9mZnNldCIsICJfcmVmNSIsICJvZmZzZXQiLCAiZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsICJfcmVmNiIsICJzdGFydEluZGV4IiwgIm51bVZpc2libGVJdGVtcyIsICJpbml0SW5zdGFuY2VQcm9wcyIsICJwcm9wcyIsICJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwgInZhbGlkYXRlUHJvcHMiLCAiX3JlZjciLCAicHJvY2VzcyIsICJFcnJvciIsICJzaGFsbG93RGlmZmVycyIsICJwcmV2IiwgIm5leHQiLCAiYXR0cmlidXRlIiwgImFyZUVxdWFsIiwgInByZXZQcm9wcyIsICJuZXh0UHJvcHMiLCAicHJldlN0eWxlIiwgInN0eWxlIiwgInByZXZSZXN0IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9leGNsdWRlZCIsICJuZXh0U3R5bGUiLCAibmV4dFJlc3QiLCAiX2V4Y2x1ZGVkMiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpT3ZlcmxheU1hc2siLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgImxpc3RlbmVyIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJldWlTcGFjZXJTdHlsZXMiLCAiX3JlZjIiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU3BhY2VyIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImV1aU1hcmtTdHlsZXMiLCAiX3JlZiIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aU1hcmsiLCAiX3JlZiIsICJ1c2VUaGVtZSIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJoaWdobGlnaHQiLCAibWF0Y2giLCAiZ2V0SGlnaHRsaWdodFdvcmRzIiwgIm1hdGNoZXMiLCAiZmlsbEluQ2h1bmtzIiwgImFwcGVuZCIsICJFdWlIaWdobGlnaHQiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIkV1aUNvbWJvQm94VGl0bGUiLCAiX3JlZiIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgInJlc29sdmVJY29uQW5kQ29sb3IiLCAiRXVpRmlsdGVyU2VsZWN0SXRlbSIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJpY29uIiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlDb21ib0JveE9wdGlvbnNMaXN0IiwgIl9yZWYiLCAicmVuZGVyIiwgImdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUiLCAicG9zaXRpb24iLCAiZGVsaW1pdGVyIiwgImhpZ2hsaWdodFNlYXJjaFZhbHVlIiwgInNlYXJjaFZhbHVlIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgImZsYXR0ZW5PcHRpb25Hcm91cHMiLCAiZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSIsICJjb2xsZWN0TWF0Y2hpbmdPcHRpb24iLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgIm9iamVjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlDb21ib0JveFBpbGwiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlDb21ib0JveElucHV0IiwgInJlbmRlciIsICJhcHBlbmQiLCAib25DbGljayIsICJpY29uIiwgImNsYXNzTmFtZXMiLCAiQXV0b3NpemVJbnB1dCIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlDb21ib0JveCIsICJfcmVmIiwgInBvc2l0aW9uIiwgIl9yZWYyIiwgIl9yZWYzIiwgImRlbGltaXRlciIsICJyZW5kZXIiLCAib25CbHVyIiwgImFwcGVuZCIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUGFnaW5hdGlvbkJ1dHRvbiIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXh0ZW5kcyIsICJUWVBFUyIsICJFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3ciLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpUGFnaW5hdGlvbiIsICJfcmVmIiwgInNhZmVDbGljayIsICJjbGFzc05hbWVzIiwgImFjY2Vzc2libGVQYWdlU3RyaW5nIiwgIlByb3BUeXBlcyIsICJQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVQYWdpbmF0aW9uIiwgIl9yZWYiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYiIsICJfcmVmIiwgImFwcGVuZCIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJzaXplVG9DbGFzc05hbWVNYXAiLCAiU0laRVMiLCAiX3JlZiIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfaW5oZXJpdHMiLCAiRXVpVGFiYmVkQ29udGVudCIsICJfY3JlYXRlU3VwZXIiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9yZWYiLCAiX2V4dGVuZHMiLCAiX2V4Y2x1ZGVkMiIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlEZWxheVJlbmRlciIsICJfcmVmIiwgInJlbmRlciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiX3JlZjIiLCAiZXVpSGVhbHRoU3R5bGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSGVhbHRoIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aUltYWdlV3JhcHBlclN0eWxlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpSW1hZ2VCdXR0b25TdHlsZXMiLCAiX3JlZiIsICJldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMiLCAiX3JlZjIiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJbWFnZUJ1dHRvbiIsICJfcmVmIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiZXVpSW1hZ2VDYXB0aW9uU3R5bGVzIiwgIl9yZWYiLCAic3R5bGVzIiwgIlByb3BUeXBlcyIsICJfZXh0ZW5kcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIkV1aUltYWdlV3JhcHBlciIsICJfcmVmIiwgIm9wZW5GdWxsU2NyZWVuIiwgImNsYXNzTmFtZXMiLCAic3R5bGVzIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJldWlJbWFnZVN0eWxlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3RlbXBsYXRlT2JqZWN0IiwgIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCAiZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlclN0eWxlcyIsICJldWlJbWFnZUZ1bGxTY3JlZW4iLCAic2l6ZSIsICJfZXh0ZW5kcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIkV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIiLCAiX3JlZiIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJvbktleURvd24iLCAiY2xvc2VGdWxsU2NyZWVuIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJTSVpFUyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJbWFnZSIsICJfcmVmIiwgInNpemUiLCAiU0laRVMiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiRXVpVXRpbGl0eUNsYXNzZXMiLCAiaW1wb3J0X3JlYWN0IiwgIkV1aUNhY2hlUHJvdmlkZXIiLCAiX3JlZiIsICJSZWFjdCIsICJpc0Vtb3Rpb25DYWNoZU9iamVjdCIsICJFdWlQcm92aWRlciIsICJfcmVmIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAieCIsICJkaXNwbGF5VG9DbGFzc05hbWVNYXAiLCAiRXVpVHJlZVZpZXciLCAiX3JlZiIsICJfcmVmMiIsICJub2RlIiwgInJlbmRlciIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgInJlZiIsICJfcmVmMyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJnZXRTZWFyY2hhYmxlTGFiZWwiLCAiZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSIsICJjb2xsZWN0TWF0Y2hpbmdPcHRpb24iLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU2VsZWN0YWJsZVNlYXJjaCIsICJfcmVmIiwgImdldE1hdGNoaW5nT3B0aW9ucyIsICJjbGFzc05hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVNlbGVjdGFibGVNZXNzYWdlIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJyZXNvbHZlSWNvbkFuZENvbG9yIiwgInBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXAiLCAiUEFERElOR19TSVpFUyIsICJFdWlTZWxlY3RhYmxlTGlzdEl0ZW0iLCAicmVuZGVyIiwgImFwcGVuZCIsICJjbGFzc05hbWVzIiwgImljb24iLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leGNsdWRlZDMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aVNlbGVjdGFibGVMaXN0IiwgIl9yZWYiLCAiYXBwZW5kIiwgIm9wdGlvbiIsICJfcmVmMiIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJfcmVmMyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlTZWxlY3RhYmxlIiwgIl9yZWYiLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgImluaXRpYWxTZWFyY2hWYWx1ZSIsICJyZW5kZXIiLCAiX3JlZjIiLCAiX3JlZjMiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJnZXRBY2Nlc3NpYmxlTmFtZSIsICJpbnB1dFJlZiIsICJub2RlIiwgIl9kZWZhdWx0IiwgIl9yZWY0IiwgInJlc3VsdHNMZW5ndGgiLCAiX3JlZjUiLCAiX3JlZjYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVCb2R5IiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlRm9vdGVyIiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAicmVzb2x2ZVdpZHRoQXNTdHlsZSIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlRm9vdGVyQ2VsbCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlSGVhZGVyIiwgIl9yZWYiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNlbGxDb250ZW50cyIsICJfcmVmIiwgIkV1aVRhYmxlSGVhZGVyQ2VsbCIsICJfcmVmMiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlSGVhZGVyTW9iaWxlIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlU29ydE1vYmlsZUl0ZW0iLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpVGFibGVTb3J0TW9iaWxlIiwgInJlbmRlciIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVJvdyIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAib25LZXlEb3duIiwgIm9uS2V5VXAiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVSb3dDZWxsIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJjaGlsZHJlbiIsICJSZWFjdCIsICJFbGVtZW50IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVJvd0NlbGxDaGVja2JveCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJDb2xsYXBzZWRJdGVtQWN0aW9ucyIsICJyZW5kZXIiLCAib25Gb2N1cyIsICJjb250cm9scyIsICJpY29uIiwgImlzU3RyaW5nIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgIkRlZmF1bHRJdGVtQWN0aW9uIiwgIl9yZWYiLCAiaXNTdHJpbmciLCAiaWNvbiIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJDdXN0b21JdGVtQWN0aW9uIiwgInJlbmRlciIsICJQcm9wVHlwZXMiLCAiaXNDdXN0b21JdGVtQWN0aW9uIiwgIkV4cGFuZGVkSXRlbUFjdGlvbnMiLCAiX3JlZiIsICJSZWFjdCIsICJjbGFzc05hbWVzIiwgImltcG9ydF9yZWFjdCIsICJkZWZhdWx0cyIsICJQYWdpbmF0aW9uQmFyIiwgIl9yZWYiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInJlbmRlciIsICJpc0Z1bmN0aW9uIiwgImNvbHVtbiIsICJfcmVmIiwgIl9yZWYyIiwgIngiLCAiRXVpQmFzaWNUYWJsZSIsICJsaXN0ZW5lciIsICJvbkNoYW5nZSIsICJfcmVmMyIsICJfcmVmNCIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiX3JlZjUiLCAiX3JlZjYiLCAiX3JlZjciLCAibnVtIiwgInNlbGVjdGlvbiIsICJhY3Rpb25FbmFibGVkIiwgIml0ZW0iLCAiX3JlZjgiLCAiUHJvcFR5cGVzIiwgIlN1YnNjcmliYWJsZSIsICJ4IiwgIm5vb3AiLCAiYXNBcnJheSIsICJpc1BsYWluT2JqZWN0IiwgImIiLCAiY29weSIsICJGb2N1c01hbmFnZXIiLCAib25Gb2N1cyIsICJsaXN0ZW5lciIsICJPbmxpbmVNYW5hZ2VyIiwgImxpc3RlbmVyIiwgIkNhbmNlbGxlZEVycm9yIiwgIlJldHJ5ZXIiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAicGF1c2UiLCAicnVuIiwgImNhbmNlbEZuIiwgIk5vdGlmeU1hbmFnZXIiLCAiUXVlcnkiLCAibm9vcCIsICJpc1N0YWxlIiwgIm9uRm9jdXMiLCAieCIsICJmZXRjaCIsICJnZXQiLCAiZmV0Y2hGbiIsICJnZXREZWZhdWx0U3RhdGUiLCAicmVkdWNlciIsICJRdWVyeUNhY2hlIiwgIngiLCAiZ2V0IiwgIm9uRm9jdXMiLCAiTXV0YXRpb24iLCAieCIsICJub29wIiwgIk11dGF0aW9uQ2FjaGUiLCAieCIsICJvbkZvY3VzIiwgIm5vb3AiLCAiYnVpbGROZXdQYWdlcyIsICJwYXJhbSIsICJmZXRjaFBhZ2UiLCAibWFudWFsIiwgInByb21pc2UiLCAiX2xvb3AiLCAiaSIsICJRdWVyeUNsaWVudCIsICJfcmVmIiwgIl9yZWYyIiwgIm5vb3AiLCAiX3JlZjMiLCAieCIsICJRdWVyeU9ic2VydmVyIiwgInRyYWNrUHJvcCIsICJnZXQiLCAiZmV0Y2giLCAibm9vcCIsICJ4IiwgImltcG9ydF9yZWFjdF9kb20iLCAidW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMiLCAiUmVhY3RET00iLCAidW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMiLCAibG9nZ2VyIiwgImxvZ2dlciIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAidXNlUXVlcnlDbGllbnQiLCAiUXVlcnlDbGllbnRQcm92aWRlciIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJ1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAieCIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJ2aXNDb2xvcnMiLCAic2VhcmNoVmFsdWUiLCAicHJlZml4IiwgIlJlYWN0IiwgIngiLCAib3B0aW9ucyIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgIm4iLCAibWF0Y2giLCAiYiIsICJuMiIsICJpbXBvcnRfcmVhY3RfZG9tIiwgImVudGl0eSIsICJSZWFjdCIsICJrZXlzIiwgInByb3BlcnR5IiwgImRvbWFpbnMiLCAicmFuZ2VzIiwgImlyaSIsICJ2IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJyZXF1aXJlX29iamVjdF9hc3NpZ24iLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiaGFzT3duUHJvcGVydHkiLCAicHJvcElzRW51bWVyYWJsZSIsICJ0b09iamVjdCIsICJ2YWwiLCAic2hvdWxkVXNlTmF0aXZlIiwgInRlc3QxIiwgInRlc3QyIiwgImkiLCAib3JkZXIyIiwgIm4iLCAidGVzdDMiLCAibGV0dGVyIiwgInRhcmdldCIsICJzb3VyY2UiLCAiZnJvbSIsICJ0byIsICJzeW1ib2xzIiwgInMiLCAia2V5IiwgInJlcXVpcmVfcmVhY3RfcHJvZHVjdGlvbl9taW4iLCAibCIsICJwIiwgInEiLCAiciIsICJ0IiwgInUiLCAidiIsICJ3IiwgIngiLCAieSIsICJhIiwgInoiLCAiYiIsICJjIiwgIkEiLCAiQiIsICJDIiwgIkQiLCAiRSIsICJGIiwgIkciLCAiSCIsICJJIiwgIkoiLCAiZSIsICJkIiwgImsiLCAiaCIsICJnIiwgImYiLCAibSIsICJLIiwgIkwiLCAiZXNjYXBlIiwgIk0iLCAiTiIsICJPIiwgIlAiLCAiUSIsICJSIiwgIlMiLCAiVCIsICJyZXF1aXJlX3JlYWN0IiwgInJlcXVpcmVfc2NoZWR1bGVyX3Byb2R1Y3Rpb25fbWluIiwgIlUiLCAiViIsICJXIiwgInJlcXVpcmVfc2NoZWR1bGVyIiwgInJlcXVpcmVfcmVhY3RfZG9tX3Byb2R1Y3Rpb25fbWluIiwgImFhIiwgImJhIiwgImNhIiwgImRhIiwgImVhIiwgImZhIiwgImhhIiwgImlhIiwgImphIiwgImthIiwgImxhIiwgIm1hIiwgIm5hIiwgIm9hIiwgInBhIiwgInFhIiwgInJhIiwgInNhIiwgInRhIiwgInVhIiwgIndhIiwgInhhIiwgInlhIiwgInphIiwgIkFhIiwgIkJhIiwgIkNhIiwgIkRhIiwgIkVhIiwgIkZhIiwgIkdhIiwgIkhhIiwgIklhIiwgIkphIiwgIkthIiwgIkxhIiwgIk1hIiwgIk5hIiwgIk9hIiwgIlBhIiwgIlFhIiwgIlJhIiwgIlNhIiwgIlRhIiwgIlVhIiwgIlZhIiwgIldhIiwgIlhhIiwgIllhIiwgIlphIiwgIiRhIiwgImFiIiwgImJiIiwgImNiIiwgImRiIiwgImViIiwgImZiIiwgImdiIiwgImhiIiwgImliIiwgImpiIiwgImtiIiwgImxiIiwgIm1iIiwgIm5iIiwgIm9iIiwgInBiIiwgInFiIiwgInJiIiwgInNiIiwgInRiIiwgInViIiwgInZiIiwgIndiIiwgInhiIiwgInliIiwgInpiIiwgIkFiIiwgIkJiIiwgIkNiIiwgIkRiIiwgIkViIiwgIkZiIiwgIkdiIiwgIkhiIiwgIkliIiwgIkpiIiwgIktiIiwgIkxiIiwgIk1iIiwgIk5iIiwgIk9iIiwgIlBiIiwgIlFiIiwgIlJiIiwgIlNiIiwgIlRiIiwgIlViIiwgIlZiIiwgIldiIiwgIlhiIiwgIlliIiwgIlpiIiwgIiRiIiwgImFjIiwgImJjIiwgImNjIiwgImRjIiwgImVjIiwgImZjIiwgImdjIiwgImhjIiwgImljIiwgImpjIiwgImtjIiwgImxjIiwgIm1jIiwgIm5jIiwgIm9jIiwgInBjIiwgInFjIiwgInJjIiwgInNjIiwgInRjIiwgInVjIiwgInZjIiwgIndjIiwgInhjIiwgInljIiwgInpjIiwgIkFjIiwgIkJjIiwgIkNjIiwgIkRjIiwgIkVjIiwgIkZjIiwgIkdjIiwgIkhjIiwgIkljIiwgIkpjIiwgIktjIiwgIkxjIiwgIk1jIiwgIk5jIiwgIk9jIiwgIlBjIiwgIlFjIiwgIlJjIiwgIlNjIiwgIlRjIiwgIlVjIiwgIlZjIiwgIldjIiwgIlhjIiwgIlljIiwgIlpjIiwgIiRjIiwgImFkIiwgImJkIiwgImNkIiwgImRkIiwgImVkIiwgImZkIiwgImdkIiwgImhkIiwgImlkIiwgImpkIiwgImtkIiwgImxkIiwgIm1kIiwgIm5kIiwgIm9kIiwgInBkIiwgInFkIiwgInJkIiwgInNkIiwgInRkIiwgInVkIiwgInZkIiwgIndkIiwgInhkIiwgInlkIiwgIkFkIiwgInpkIiwgIkJkIiwgIkNkIiwgIkRkIiwgIkVkIiwgIkZkIiwgIkdkIiwgIkhkIiwgIklkIiwgIkpkIiwgIktkIiwgIkxkIiwgIk1kIiwgIk5kIiwgIk9kIiwgIlBkIiwgIlFkIiwgIlJkIiwgIlNkIiwgIlRkIiwgIlVkIiwgIlZkIiwgIldkIiwgIlhkIiwgIllkIiwgIlpkIiwgIiRkIiwgImFlIiwgImJlIiwgImNlIiwgImRlIiwgImVlIiwgImZlIiwgImdlIiwgImhlIiwgImllIiwgImplIiwgImtlIiwgImxlIiwgIm1lIiwgIm5lIiwgIm9lIiwgInBlIiwgInFlIiwgInJlIiwgInNlIiwgInRlIiwgInVlIiwgInZlIiwgIndlIiwgInllIiwgInplIiwgInhlIiwgIkFlIiwgIkJlIiwgIkNlIiwgIkRlIiwgIkVlIiwgIkZlIiwgIkdlIiwgIkhlIiwgIkllIiwgIkplIiwgIktlIiwgIkxlIiwgIk1lIiwgIk5lIiwgIk9lIiwgIlBlIiwgIlFlIiwgIlJlIiwgIlNlIiwgIlRlIiwgIlVlIiwgIlZlIiwgIldlIiwgIlhlIiwgIlllIiwgIlplIiwgIiRlIiwgImFmIiwgImJmIiwgImNmIiwgImRmIiwgImVmIiwgImZmIiwgImdmIiwgImhmIiwgImpmIiwgImtmIiwgImxmIiwgIm1mIiwgIm5mIiwgIm9mIiwgInBmIiwgInFmIiwgInJmIiwgInNmIiwgInRmIiwgInVmIiwgInZmIiwgIndmIiwgInhmIiwgInlmIiwgInpmIiwgIkFmIiwgIkJmIiwgIkNmIiwgIkRmIiwgIkVmIiwgIkZmIiwgIkdmIiwgIkhmIiwgIklmIiwgIkpmIiwgIktmIiwgIkxmIiwgIk1mIiwgIk5mIiwgIk9mIiwgIlBmIiwgIlFmIiwgIlJmIiwgIlNmIiwgIlRmIiwgIlVmIiwgIlZmIiwgIldmIiwgIlhmIiwgIllmIiwgIlpmIiwgIiRmIiwgImFnIiwgImJnIiwgImNnIiwgImRnIiwgImVnIiwgImZnIiwgImdnIiwgImhnIiwgImlnIiwgImpnIiwgImtnIiwgImxnIiwgIm1nIiwgIm5nIiwgIm9nIiwgInBnIiwgInFnIiwgInJnIiwgInNnIiwgInRnIiwgInVnIiwgInZnIiwgIndnIiwgInhnIiwgInlnIiwgInpnIiwgIkFnIiwgIkJnIiwgIkNnIiwgIkRnIiwgIkVnIiwgIkZnIiwgIkdnIiwgIktnIiwgIkhnIiwgIklnIiwgIkpnIiwgIkxnIiwgIk1nIiwgIk5nIiwgIk9nIiwgIlBnIiwgIlFnIiwgIlJnIiwgIlNnIiwgIlRnIiwgIlVnIiwgIlZnIiwgIldnIiwgIlhnIiwgIllnIiwgIlpnIiwgIiRnIiwgImFoIiwgImJoIiwgImNoIiwgImRoIiwgImVoIiwgImZoIiwgImdoIiwgImhoIiwgImloIiwgImpoIiwgImtoIiwgImxoIiwgIm1oIiwgIm5oIiwgIm9oIiwgInBoIiwgInFoIiwgInJoIiwgInNoIiwgInRoIiwgInVoIiwgInZoIiwgIndoIiwgInhoIiwgInloIiwgInpoIiwgIkFoIiwgIkJoIiwgIkNoIiwgIkRoIiwgIkVoIiwgIkZoIiwgIkdoIiwgIkhoIiwgIkloIiwgIkpoIiwgIktoIiwgIkxoIiwgIk1oIiwgIk5oIiwgIk9oIiwgIlBoIiwgIlFoIiwgIlJoIiwgIlNoIiwgIlRoIiwgIlVoIiwgIlZoIiwgIldoIiwgIlhoIiwgIlloIiwgIlpoIiwgIiRoIiwgImFpIiwgImJpIiwgImNpIiwgImRpIiwgImVpIiwgImZpIiwgImdpIiwgImhpIiwgImlpIiwgImppIiwgImtpIiwgImxpIiwgIm1pIiwgIm5pIiwgIm9pIiwgInBpIiwgInFpIiwgInJpIiwgInNpIiwgInRpIiwgInVpIiwgInZpIiwgIndpIiwgInhpIiwgInlpIiwgInppIiwgIkFpIiwgIkJpIiwgIkNpIiwgIkRpIiwgIkVpIiwgIkZpIiwgIkdpIiwgIkhpIiwgIklpIiwgIkppIiwgIktpIiwgIkxpIiwgIk1pIiwgIk5pIiwgIk9pIiwgIlBpIiwgIlFpIiwgIlJpIiwgIlNpIiwgIlRpIiwgIlVpIiwgIlZpIiwgIldpIiwgIlhpIiwgIllpIiwgIlppIiwgIiRpIiwgImFqIiwgImJqIiwgImNqIiwgImRqIiwgImVqIiwgImZqIiwgImdqIiwgImhqIiwgImlqIiwgImpqIiwgImtqIiwgImxqIiwgIm1qIiwgIm5qIiwgIm9qIiwgInBqIiwgIlgiLCAiWSIsICJxaiIsICJyaiIsICJzaiIsICJ0aiIsICJ1aiIsICJ2aiIsICJ3aiIsICJaIiwgInhqIiwgInlqIiwgInpqIiwgIkFqIiwgIkJqIiwgIkNqIiwgIkRqIiwgIkVqIiwgIkZqIiwgIkdqIiwgIkhqIiwgIklqIiwgIkpqIiwgIktqIiwgIkxqIiwgIk1qIiwgIk5qIiwgIk9qIiwgIlBqIiwgIlFqIiwgIlJqIiwgIlNqIiwgIlRqIiwgIlVqIiwgIlZqIiwgIldqIiwgIlhqIiwgIllqIiwgIlpqIiwgInZhIiwgImFrIiwgImJrIiwgImNrIiwgImRrIiwgImVrIiwgImZrIiwgImdrIiwgImhrIiwgImlrIiwgImprIiwgImtrIiwgImxrIiwgIm1rIiwgIm5rIiwgIm9rIiwgInBrIiwgInFrIiwgInJrIiwgInNrIiwgInRrIiwgInVrIiwgInZrIiwgIndrIiwgInhrIiwgInlrIiwgInJlcXVpcmVfcmVhY3RfZG9tIiwgImNoZWNrRENFIiwgImVyciIsICJyZXF1aXJlX3VzZV9zeW5jX2V4dGVybmFsX3N0b3JlX3NoaW1fcHJvZHVjdGlvbl9taW4iLCAicmVxdWlyZV9zaGltIiwgInJlcXVpcmVfd2l0aF9zZWxlY3Rvcl9wcm9kdWN0aW9uX21pbiIsICJyZXF1aXJlX3dpdGhfc2VsZWN0b3IiLCAiX2V4dGVuZHMiLCAiaW5pdF9leHRlbmRzIiwgIl9fZXNtTWluIiwgInJlcXVpcmVfcmVhY3RfaXNfcHJvZHVjdGlvbl9taW4iLCAicmVxdWlyZV9yZWFjdF9pcyIsICJyZXF1aXJlX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX2NqcyIsICJyZWFjdElzIiwgIlJFQUNUX1NUQVRJQ1MiLCAiS05PV05fU1RBVElDUyIsICJGT1JXQVJEX1JFRl9TVEFUSUNTIiwgIk1FTU9fU1RBVElDUyIsICJUWVBFX1NUQVRJQ1MiLCAiZ2V0U3RhdGljcyIsICJjb21wb25lbnQiLCAiZGVmaW5lUHJvcGVydHkiLCAiZ2V0T3duUHJvcGVydHlOYW1lcyIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiZ2V0UHJvdG90eXBlT2YiLCAib2JqZWN0UHJvdG90eXBlIiwgImhvaXN0Tm9uUmVhY3RTdGF0aWNzIiwgInRhcmdldENvbXBvbmVudCIsICJzb3VyY2VDb21wb25lbnQiLCAiYmxhY2tsaXN0IiwgImluaGVyaXRlZENvbXBvbmVudCIsICJrZXlzIiwgInRhcmdldFN0YXRpY3MiLCAic291cmNlU3RhdGljcyIsICJkZXNjcmlwdG9yIiwgInJlcXVpcmVfbXVsdGltYXAiLCAibWFwRWFjaCIsICJtYXAiLCAib3BlcmF0aW9uIiwgIm5leHQiLCAiTXVsdGltYXAiLCAibWFwQ3RvciIsICJpdGVtIiwgIml0ZXJhYmxlIiwgInNlbGYiLCAiYXJncyIsICJlbnRyeSIsICJpZHgiLCAiaGFzS2V5IiwgIm1ha2VJdGVyYXRvciIsICJ2YWxzIiwgIml0ZXIiLCAidG90YWwiLCAidmFsdWUiLCAic2FmYXJpTmV4dCIsICJpdGVyYXRvciIsICJuZXh0SW5kZXgiLCAic2hlZXRGb3JUYWciLCAidGFnIiwgImNyZWF0ZVN0eWxlRWxlbWVudCIsICJvcHRpb25zIiwgIlN0eWxlU2hlZXQiLCAiaW5pdF9lbW90aW9uX3NoZWV0X2Jyb3dzZXJfZXNtIiwgIl90aGlzIiwgImJlZm9yZSIsICJfcHJvdG8iLCAibm9kZXMiLCAicnVsZSIsICJpc0ltcG9ydFJ1bGUiLCAic2hlZXQiLCAiTVMiLCAiTU9aIiwgIldFQktJVCIsICJDT01NRU5UIiwgIlJVTEVTRVQiLCAiREVDTEFSQVRJT04iLCAiSU1QT1JUIiwgIktFWUZSQU1FUyIsICJMQVlFUiIsICJpbml0X0VudW0iLCAiaGFzaCIsICJsZW5ndGgiLCAiY2hhcmF0IiwgInRyaW0iLCAibWF0Y2giLCAicGF0dGVybiIsICJyZXBsYWNlIiwgInJlcGxhY2VtZW50IiwgImluZGV4b2YiLCAic2VhcmNoIiwgImluZGV4IiwgInN1YnN0ciIsICJiZWdpbiIsICJlbmQiLCAic3RybGVuIiwgInNpemVvZiIsICJhcHBlbmQiLCAiYXJyYXkiLCAiY29tYmluZSIsICJjYWxsYmFjayIsICJhYnMiLCAiYXNzaWduIiwgImluaXRfVXRpbGl0eSIsICJub2RlIiwgInJvb3QiLCAicGFyZW50IiwgInR5cGUiLCAicHJvcHMiLCAiY2hpbGRyZW4iLCAibGluZSIsICJjb2x1bW4iLCAiY29weSIsICJjaGFyIiwgImNoYXJhY3RlciIsICJwcmV2IiwgInBvc2l0aW9uIiwgImNoYXJhY3RlcnMiLCAicGVlayIsICJjYXJldCIsICJzbGljZSIsICJ0b2tlbiIsICJhbGxvYyIsICJkZWFsbG9jIiwgImRlbGltaXQiLCAiZGVsaW1pdGVyIiwgIndoaXRlc3BhY2UiLCAiZXNjYXBpbmciLCAiY291bnQiLCAiY29tbWVudGVyIiwgImlkZW50aWZpZXIiLCAiaW5pdF9Ub2tlbml6ZXIiLCAiY29tcGlsZSIsICJwYXJzZSIsICJydWxlcyIsICJydWxlc2V0cyIsICJwc2V1ZG8iLCAicG9pbnRzIiwgImRlY2xhcmF0aW9ucyIsICJvZmZzZXQiLCAiYXRydWxlIiwgInByb3BlcnR5IiwgInByZXZpb3VzIiwgInZhcmlhYmxlIiwgInNjYW5uaW5nIiwgImFtcGVyc2FuZCIsICJyZWZlcmVuY2UiLCAiY29tbWVudCIsICJkZWNsYXJhdGlvbiIsICJydWxlc2V0IiwgInBvc3QiLCAic2l6ZSIsICJqIiwgImluaXRfUGFyc2VyIiwgImluaXRfUHJlZml4ZXIiLCAic2VyaWFsaXplIiwgIm91dHB1dCIsICJzdHJpbmdpZnkiLCAiZWxlbWVudCIsICJpbml0X1NlcmlhbGl6ZXIiLCAibWlkZGxld2FyZSIsICJjb2xsZWN0aW9uIiwgInJ1bGVzaGVldCIsICJpbml0X01pZGRsZXdhcmUiLCAiaW5pdF9zdHlsaXMiLCAid2Vha01lbW9pemUiLCAiaW5pdF9lbW90aW9uX3dlYWtfbWVtb2l6ZV9lc20iLCAiZnVuYyIsICJjYWNoZSIsICJhcmciLCAicmV0IiwgIm1lbW9pemUiLCAiZm4iLCAiaW5pdF9lbW90aW9uX21lbW9pemVfZXNtIiwgImVtb3Rpb25fY2FjaGVfYnJvd3Nlcl9lc21fZXhwb3J0cyIsICJfX2V4cG9ydCIsICJjcmVhdGVDYWNoZSIsICJwcmVmaXgiLCAiaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nIiwgInRvUnVsZXMiLCAiZ2V0UnVsZXMiLCAiZml4ZWRFbGVtZW50cyIsICJjb21wYXQiLCAicmVtb3ZlTGFiZWwiLCAicHJlZml4ZXIiLCAiZGVmYXVsdFN0eWxpc1BsdWdpbnMiLCAiaW5pdF9lbW90aW9uX2NhY2hlX2Jyb3dzZXJfZXNtIiwgInBhcnNlZCIsICJpc0ltcGxpY2l0UnVsZSIsICJwYXJlbnRSdWxlcyIsICJzc3JTdHlsZXMiLCAiZGF0YUVtb3Rpb25BdHRyaWJ1dGUiLCAic3R5bGlzUGx1Z2lucyIsICJpbnNlcnRlZCIsICJjb250YWluZXIiLCAibm9kZXNUb0h5ZHJhdGUiLCAiYXR0cmliIiwgIl9pbnNlcnQiLCAib21uaXByZXNlbnRQbHVnaW5zIiwgImN1cnJlbnRTaGVldCIsICJmaW5hbGl6aW5nUGx1Z2lucyIsICJzZXJpYWxpemVyIiwgInN0eWxpcyIsICJzdHlsZXMiLCAic2VsZWN0b3IiLCAic2VyaWFsaXplZCIsICJzaG91bGRDYWNoZSIsICJpbXBvcnRfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3MiLCAiaW5pdF9lbW90aW9uX3JlYWN0X2lzb2xhdGVkX2hucnNfYnJvd3Nlcl9lc20iLCAiaG9pc3ROb25SZWFjdFN0YXRpY3MkMSIsICJnZXRSZWdpc3RlcmVkU3R5bGVzIiwgInJlZ2lzdGVyZWQiLCAicmVnaXN0ZXJlZFN0eWxlcyIsICJjbGFzc05hbWVzIiwgInJhd0NsYXNzTmFtZSIsICJjbGFzc05hbWUiLCAiaXNCcm93c2VyIiwgInJlZ2lzdGVyU3R5bGVzIiwgImluc2VydFN0eWxlcyIsICJpbml0X2Vtb3Rpb25fdXRpbHNfYnJvd3Nlcl9lc20iLCAiaXNTdHJpbmdUYWciLCAiY3VycmVudCIsICJtdXJtdXIyIiwgInN0ciIsICJsZW4iLCAiaW5pdF9lbW90aW9uX2hhc2hfZXNtIiwgInVuaXRsZXNzS2V5cyIsICJpbml0X2Vtb3Rpb25fdW5pdGxlc3NfZXNtIiwgImhhbmRsZUludGVycG9sYXRpb24iLCAibWVyZ2VkUHJvcHMiLCAiaW50ZXJwb2xhdGlvbiIsICJjdXJzb3IiLCAiY3JlYXRlU3RyaW5nRnJvbU9iamVjdCIsICJwcmV2aW91c0N1cnNvciIsICJyZXN1bHQiLCAibWF0Y2hlZCIsICJyZXBsYWNlZCIsICJjYWNoZWQiLCAib2JqIiwgInN0cmluZyIsICJfa2V5IiwgImlzUHJvY2Vzc2FibGVWYWx1ZSIsICJwcm9jZXNzU3R5bGVOYW1lIiwgInByb2Nlc3NTdHlsZVZhbHVlIiwgIl9pIiwgImludGVycG9sYXRlZCIsICJoeXBoZW5hdGVSZWdleCIsICJhbmltYXRpb25SZWdleCIsICJpc0N1c3RvbVByb3BlcnR5IiwgImxhYmVsUGF0dGVybiIsICJzZXJpYWxpemVTdHlsZXMiLCAiaW5pdF9lbW90aW9uX3NlcmlhbGl6ZV9icm93c2VyX2VzbSIsICJzdHlsZU5hbWUiLCAicDEiLCAicDIiLCAic3RyaW5nTW9kZSIsICJzdHJpbmdzIiwgInNvdXJjZU1hcCIsICJpZGVudGlmaWVyTmFtZSIsICJuYW1lIiwgIlJlYWN0IiwgInN5bmNGYWxsYmFjayIsICJ1c2VJbnNlcnRpb25FZmZlY3QiLCAidXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayIsICJ1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2siLCAiaW5pdF9lbW90aW9uX3VzZV9pbnNlcnRpb25fZWZmZWN0X3dpdGhfZmFsbGJhY2tzX2Jyb3dzZXJfZXNtIiwgImNyZWF0ZSIsICJ3aXRoVGhlbWUiLCAiQ29tcG9uZW50IiwgImNvbXBvbmVudE5hbWUiLCAicmVuZGVyIiwgInJlZiIsICJ0aGVtZSIsICJUaGVtZUNvbnRleHQiLCAiV2l0aFRoZW1lIiwgImltcG9ydF9yZWFjdCIsICJoYXNPd24iLCAiRW1vdGlvbkNhY2hlQ29udGV4dCIsICJDYWNoZVByb3ZpZGVyIiwgIl9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSIsICJ3aXRoRW1vdGlvbkNhY2hlIiwgInVzZVRoZW1lIiwgImdldFRoZW1lIiwgImNyZWF0ZUNhY2hlV2l0aFRoZW1lIiwgIlRoZW1lUHJvdmlkZXIiLCAidHlwZVByb3BOYW1lIiwgImNyZWF0ZUVtb3Rpb25Qcm9wcyIsICJJbnNlcnRpb24iLCAiRW1vdGlvbiIsICJFbW90aW9uJDEiLCAiaW5pdF9lbW90aW9uX2VsZW1lbnRfNDNjNmZlYTBfYnJvd3Nlcl9lc20iLCAib3V0ZXJUaGVtZSIsICJtZXJnZWRUaGVtZSIsICJuZXdQcm9wcyIsICJsYWJlbCIsICJfcmVmIiwgImNzc1Byb3AiLCAiV3JhcHBlZENvbXBvbmVudCIsICJsYWJlbEZyb21TdGFjayIsICJlbW90aW9uX3JlYWN0X2Jyb3dzZXJfZXNtX2V4cG9ydHMiLCAiQ2xhc3NOYW1lcyIsICJHbG9iYWwiLCAianN4IiwgImNzcyIsICJrZXlmcmFtZXMiLCAiX2xlbiIsICJtZXJnZSIsICJjbGFzc25hbWVzIiwgImluaXRfZW1vdGlvbl9yZWFjdF9icm93c2VyX2VzbSIsICJhcmdzTGVuZ3RoIiwgImNyZWF0ZUVsZW1lbnRBcmdBcnJheSIsICJzZXJpYWxpemVkTmFtZXMiLCAic2VyaWFsaXplZFN0eWxlcyIsICJzaGVldFJlZiIsICJyZWh5ZHJhdGluZyIsICJzaGVldFJlZkN1cnJlbnQiLCAiaW5zZXJ0YWJsZSIsICJjbHMiLCAidG9BZGQiLCAic2VyaWFsaXplZEFyciIsICJoYXNSZW5kZXJlZCIsICJjeCIsICJfbGVuMiIsICJfa2V5MiIsICJjb250ZW50IiwgImVsZSIsICJyZXF1aXJlX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsICJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwgInJlcXVpcmVfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIiwgImZvcm1hdE11aUVycm9yTWVzc2FnZSIsICJjb2RlIiwgInVybCIsICJfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIiwgInJlYWN0UHJvcHNSZWdleCIsICJpc1Byb3BWYWxpZCIsICJpbml0X2Vtb3Rpb25faXNfcHJvcF92YWxpZF9lc20iLCAicHJvcCIsICJ0ZXN0T21pdFByb3BzT25TdHJpbmdUYWciLCAidGVzdE9taXRQcm9wc09uQ29tcG9uZW50IiwgImdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCIsICJjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzIiwgImNyZWF0ZVN0eWxlZCIsICJpbml0X2Vtb3Rpb25fc3R5bGVkX2Jhc2VfYnJvd3Nlcl9lc20iLCAiaXNSZWFsIiwgInNob3VsZEZvcndhcmRQcm9wIiwgIm9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcCIsICJwcm9wTmFtZSIsICJiYXNlVGFnIiwgInRhcmdldENsYXNzTmFtZSIsICJkZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AiLCAic2hvdWxkVXNlQXMiLCAiU3R5bGVkIiwgIkZpbmFsVGFnIiwgImNsYXNzSW50ZXJwb2xhdGlvbnMiLCAiZmluYWxTaG91bGRGb3J3YXJkUHJvcCIsICJuZXh0VGFnIiwgIm5leHRPcHRpb25zIiwgImVtb3Rpb25fc3R5bGVkX2Jyb3dzZXJfZXNtX2V4cG9ydHMiLCAibmV3U3R5bGVkIiwgInRhZ3MiLCAiaW5pdF9lbW90aW9uX3N0eWxlZF9icm93c2VyX2VzbSIsICJ0YWdOYW1lIiwgInJlcXVpcmVfUmVhY3RQcm9wVHlwZXNTZWNyZXQiLCAiUmVhY3RQcm9wVHlwZXNTZWNyZXQiLCAicmVxdWlyZV9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMiLCAiZW1wdHlGdW5jdGlvbiIsICJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwgInNoaW0iLCAibG9jYXRpb24iLCAicHJvcEZ1bGxOYW1lIiwgInNlY3JldCIsICJnZXRTaGltIiwgIlJlYWN0UHJvcFR5cGVzIiwgInJlcXVpcmVfcHJvcF90eXBlcyIsICJSZWFjdElzIiwgInRocm93T25EaXJlY3RBY2Nlc3MiLCAicmVxdWlyZV9yZWFjdF9qc3hfcnVudGltZV9wcm9kdWN0aW9uX21pbiIsICJyZXF1aXJlX2pzeF9ydW50aW1lIiwgInJlcXVpcmVfU3R5bGVkRW5naW5lUHJvdmlkZXIiLCAiU3R5bGVkRW5naW5lUHJvdmlkZXIiLCAiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCAiX3Byb3BUeXBlcyIsICJfcmVhY3QyIiwgIl9jYWNoZSIsICJfanN4UnVudGltZSIsICJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCAiaW5qZWN0Rmlyc3QiLCAiX1N0eWxlZEVuZ2luZVByb3ZpZGVyIiwgInJlcXVpcmVfR2xvYmFsU3R5bGVzIiwgIkdsb2JhbFN0eWxlcyIsICJpc0VtcHR5IiwgImRlZmF1bHRUaGVtZSIsICJnbG9iYWxTdHlsZXMiLCAidGhlbWVJbnB1dCIsICJfR2xvYmFsU3R5bGVzIiwgInJlcXVpcmVfbm9kZSIsICJfcmVhY3QiLCAic3R5bGVkIiwgIl9zdHlsZWQiLCAiaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyIsICJwcm9jZXNzb3IiLCAicmVxdWlyZV9leHRlbmRzIiwgInJlcXVpcmVfZGVlcG1lcmdlIiwgImRlZXBtZXJnZSIsICJpc1BsYWluT2JqZWN0IiwgIl9leHRlbmRzMiIsICJwcm90b3R5cGUiLCAiZGVlcENsb25lIiwgIl9leHBvcnROYW1lcyIsICJfZGVlcG1lcmdlIiwgInYxIiwgInJlcXVpcmVfY2FwaXRhbGl6ZSIsICJjYXBpdGFsaXplIiwgIl9mb3JtYXRNdWlFcnJvck1lc3NhZ2UyIiwgIl9jYXBpdGFsaXplIiwgInJlcXVpcmVfZ2V0RGlzcGxheU5hbWUiLCAiZ2V0RGlzcGxheU5hbWUiLCAiZ2V0RnVuY3Rpb25OYW1lIiwgIl9yZWFjdElzIiwgImZuTmFtZU1hdGNoUmVnZXgiLCAiZ2V0RnVuY3Rpb25Db21wb25lbnROYW1lIiwgImZhbGxiYWNrIiwgImdldFdyYXBwZWROYW1lIiwgIm91dGVyVHlwZSIsICJpbm5lclR5cGUiLCAid3JhcHBlck5hbWUiLCAiZnVuY3Rpb25OYW1lIiwgIl9nZXREaXNwbGF5TmFtZSIsICJyZXF1aXJlX2NsYW1wIiwgImNsYW1wIiwgIm1pbiIsICJtYXgiLCAiX2RlZmF1bHQiLCAiX2NsYW1wIiwgInJlcXVpcmVfbWVyZ2UiLCAiYWNjIiwgInJlcXVpcmVfcmVzcG9uc2l2ZVByb3BUeXBlIiwgInJlc3BvbnNpdmVQcm9wVHlwZSIsICJyZXF1aXJlX2JyZWFrcG9pbnRzIiwgImNvbXB1dGVCcmVha3BvaW50c0Jhc2UiLCAiY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0IiwgImhhbmRsZUJyZWFrcG9pbnRzIiwgIm1lcmdlQnJlYWtwb2ludHNJbk9yZGVyIiwgInJlbW92ZVVudXNlZEJyZWFrcG9pbnRzIiwgInJlc29sdmVCcmVha3BvaW50VmFsdWVzIiwgIl9tZXJnZSIsICJ2YWx1ZXMiLCAiZGVmYXVsdEJyZWFrcG9pbnRzIiwgInByb3BWYWx1ZSIsICJzdHlsZUZyb21Qcm9wVmFsdWUiLCAidGhlbWVCcmVha3BvaW50cyIsICJicmVha3BvaW50IiwgIm1lZGlhS2V5IiwgImNzc0tleSIsICJicmVha3BvaW50cyIsICJzdHlsZUZ1bmN0aW9uIiwgIm5ld1N0eWxlRnVuY3Rpb24iLCAiYmFzZSIsICJleHRlbmRlZCIsICJicmVha3BvaW50c0lucHV0IiwgIl9icmVha3BvaW50c0lucHV0JGtleSIsICJicmVha3BvaW50U3R5bGVLZXkiLCAiYnJlYWtwb2ludEtleXMiLCAic3R5bGUiLCAiYnJlYWtwb2ludE91dHB1dCIsICJlbXB0eUJyZWFrcG9pbnRzIiwgIm1lcmdlZE91dHB1dCIsICJicmVha3BvaW50VmFsdWVzIiwgImJyZWFrcG9pbnRzS2V5cyIsICJjdXN0b21CYXNlIiwgInJlcXVpcmVfc3R5bGUiLCAiZ2V0UGF0aCIsICJnZXRTdHlsZVZhbHVlIiwgIl9yZXNwb25zaXZlUHJvcFR5cGUiLCAiX2JyZWFrcG9pbnRzIiwgInBhdGgiLCAiY2hlY2tWYXJzIiwgInRoZW1lTWFwcGluZyIsICJ0cmFuc2Zvcm0iLCAicHJvcFZhbHVlRmluYWwiLCAidXNlclZhbHVlIiwgImNzc1Byb3BlcnR5IiwgInRoZW1lS2V5IiwgInJlcXVpcmVfbWVtb2l6ZSIsICJyZXF1aXJlX3NwYWNpbmciLCAiY3JlYXRlVW5hcnlTcGFjaW5nIiwgImNyZWF0ZVVuYXJ5VW5pdCIsICJnZXRTdHlsZUZyb21Qcm9wVmFsdWUiLCAiZ2V0VmFsdWUiLCAibWFyZ2luIiwgInBhZGRpbmciLCAiX3N0eWxlIiwgIl9tZW1vaXplIiwgInByb3BlcnRpZXMiLCAiZGlyZWN0aW9ucyIsICJhbGlhc2VzIiwgImdldENzc1Byb3BlcnRpZXMiLCAiZGlyZWN0aW9uIiwgImRpciIsICJtYXJnaW5LZXlzIiwgInBhZGRpbmdLZXlzIiwgInNwYWNpbmdLZXlzIiwgImRlZmF1bHRWYWx1ZSIsICJfZ2V0UGF0aCIsICJ0aGVtZVNwYWNpbmciLCAidHJhbnNmb3JtZXIiLCAidHJhbnNmb3JtZWQiLCAiY3NzUHJvcGVydGllcyIsICJyZXNvbHZlQ3NzUHJvcGVydHkiLCAic3BhY2luZyIsICJyZXF1aXJlX2NvbXBvc2UiLCAiY29tcG9zZSIsICJoYW5kbGVycyIsICJyZXF1aXJlX2JvcmRlcnMiLCAiYm9yZGVyVHJhbnNmb3JtIiwgIl9jb21wb3NlIiwgIl9zcGFjaW5nIiwgImNyZWF0ZUJvcmRlclN0eWxlIiwgImJvcmRlciIsICJib3JkZXJUb3AiLCAiYm9yZGVyUmlnaHQiLCAiYm9yZGVyQm90dG9tIiwgImJvcmRlckxlZnQiLCAiYm9yZGVyQ29sb3IiLCAiYm9yZGVyVG9wQ29sb3IiLCAiYm9yZGVyUmlnaHRDb2xvciIsICJib3JkZXJCb3R0b21Db2xvciIsICJib3JkZXJMZWZ0Q29sb3IiLCAib3V0bGluZSIsICJvdXRsaW5lQ29sb3IiLCAiYm9yZGVyUmFkaXVzIiwgImJvcmRlcnMiLCAicmVxdWlyZV9jc3NHcmlkIiwgImdhcCIsICJjb2x1bW5HYXAiLCAicm93R2FwIiwgImdyaWRDb2x1bW4iLCAiZ3JpZFJvdyIsICJncmlkQXV0b0Zsb3ciLCAiZ3JpZEF1dG9Db2x1bW5zIiwgImdyaWRBdXRvUm93cyIsICJncmlkVGVtcGxhdGVDb2x1bW5zIiwgImdyaWRUZW1wbGF0ZVJvd3MiLCAiZ3JpZFRlbXBsYXRlQXJlYXMiLCAiZ3JpZEFyZWEiLCAiZ3JpZCIsICJyZXF1aXJlX3BhbGV0dGUiLCAicGFsZXR0ZVRyYW5zZm9ybSIsICJjb2xvciIsICJiZ2NvbG9yIiwgImJhY2tncm91bmRDb2xvciIsICJwYWxldHRlIiwgInJlcXVpcmVfc2l6aW5nIiwgInNpemluZ1RyYW5zZm9ybSIsICJ3aWR0aCIsICJtYXhXaWR0aCIsICJfcHJvcHMkdGhlbWUiLCAiX3Byb3BzJHRoZW1lMiIsICJtaW5XaWR0aCIsICJoZWlnaHQiLCAibWF4SGVpZ2h0IiwgIm1pbkhlaWdodCIsICJzaXplV2lkdGgiLCAic2l6ZUhlaWdodCIsICJib3hTaXppbmciLCAic2l6aW5nIiwgInJlcXVpcmVfZGVmYXVsdFN4Q29uZmlnIiwgIl9ib3JkZXJzIiwgIl9jc3NHcmlkIiwgIl9wYWxldHRlIiwgIl9zaXppbmciLCAiZGVmYXVsdFN4Q29uZmlnIiwgInJlcXVpcmVfc3R5bGVGdW5jdGlvblN4IiwgInVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCIsICJfZGVmYXVsdFN4Q29uZmlnIiwgIm9iamVjdHNIYXZlU2FtZUtleXMiLCAib2JqZWN0cyIsICJhbGxLZXlzIiwgIm9iamVjdCIsICJ1bmlvbiIsICJjYWxsSWZGbiIsICJtYXliZUZuIiwgImdldFRoZW1lVmFsdWUiLCAiY29uZmlnIiwgInN0eWxlRnVuY3Rpb25TeCIsICJfdGhlbWUkdW5zdGFibGVfc3hDb24iLCAic3giLCAidHJhdmVyc2UiLCAic3hJbnB1dCIsICJzeE9iamVjdCIsICJzdHlsZUtleSIsICJicmVha3BvaW50c1ZhbHVlcyIsICJyZXF1aXJlX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiZXhjbHVkZWQiLCAic291cmNlS2V5cyIsICJyZXF1aXJlX2V4dGVuZFN4UHJvcCIsICJleHRlbmRTeFByb3AiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyIiwgIl9leGNsdWRlZCIsICJzcGxpdFByb3BzIiwgIl9wcm9wcyR0aGVtZSR1bnN0YWJsZSIsICJpblN4IiwgIm90aGVyIiwgInN5c3RlbVByb3BzIiwgIm90aGVyUHJvcHMiLCAiZmluYWxTeCIsICJfc3R5bGVGdW5jdGlvblN4IiwgIl9leHRlbmRTeFByb3AiLCAicmVxdWlyZV9jcmVhdGVCcmVha3BvaW50cyIsICJjcmVhdGVCcmVha3BvaW50cyIsICJzb3J0QnJlYWtwb2ludHNWYWx1ZXMiLCAiYnJlYWtwb2ludHNBc0FycmF5IiwgImJyZWFrcG9pbnQxIiwgImJyZWFrcG9pbnQyIiwgInVuaXQiLCAic3RlcCIsICJzb3J0ZWRWYWx1ZXMiLCAidXAiLCAiZG93biIsICJiZXR3ZWVuIiwgInN0YXJ0IiwgImVuZEluZGV4IiwgIm9ubHkiLCAibm90IiwgImtleUluZGV4IiwgInJlcXVpcmVfc2hhcGUiLCAic2hhcGUiLCAicmVxdWlyZV9jcmVhdGVTcGFjaW5nIiwgImNyZWF0ZVNwYWNpbmciLCAic3BhY2luZ0lucHV0IiwgImFyZ3NJbnB1dCIsICJhcmd1bWVudCIsICJyZXF1aXJlX2FwcGx5U3R5bGVzIiwgImFwcGx5U3R5bGVzIiwgInJlcXVpcmVfY3JlYXRlVGhlbWUiLCAiX2NyZWF0ZUJyZWFrcG9pbnRzIiwgIl9zaGFwZSIsICJfY3JlYXRlU3BhY2luZyIsICJfYXBwbHlTdHlsZXMiLCAiY3JlYXRlVGhlbWUiLCAicGFsZXR0ZUlucHV0IiwgInNoYXBlSW5wdXQiLCAibXVpVGhlbWUiLCAiX2NyZWF0ZVRoZW1lIiwgInJlcXVpcmVfY29sb3JNYW5pcHVsYXRvciIsICJhbHBoYSIsICJibGVuZCIsICJkYXJrZW4iLCAiZGVjb21wb3NlQ29sb3IiLCAiZW1waGFzaXplIiwgImdldENvbnRyYXN0UmF0aW8iLCAiZ2V0THVtaW5hbmNlIiwgImhleFRvUmdiIiwgImhzbFRvUmdiIiwgImxpZ2h0ZW4iLCAicHJpdmF0ZV9zYWZlQWxwaGEiLCAicHJpdmF0ZV9zYWZlRGFya2VuIiwgInByaXZhdGVfc2FmZUVtcGhhc2l6ZSIsICJwcml2YXRlX3NhZmVMaWdodGVuIiwgInJlY29tcG9zZUNvbG9yIiwgInJnYlRvSGV4IiwgImNsYW1wV3JhcHBlciIsICJjb2xvcnMiLCAiaW50VG9IZXgiLCAiaW50IiwgImhleCIsICJtYXJrZXIiLCAiY29sb3JTcGFjZSIsICJjb2xvckNoYW5uZWwiLCAiZGVjb21wb3NlZENvbG9yIiwgInByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCIsICJ3YXJuaW5nIiwgInJnYiIsICJmb3JlZ3JvdW5kIiwgImJhY2tncm91bmQiLCAibHVtQSIsICJsdW1CIiwgImNvZWZmaWNpZW50IiwgIm92ZXJsYXkiLCAib3BhY2l0eSIsICJnYW1tYSIsICJibGVuZENoYW5uZWwiLCAibyIsICJvdmVybGF5Q29sb3IiLCAicmVxdWlyZV9jcmVhdGVTdHlsZWQiLCAiX3N0eWxlZEVuZ2luZSIsICJfZXhjbHVkZWQyIiwgIl9leGNsdWRlZDMiLCAic3lzdGVtRGVmYXVsdFRoZW1lIiwgImxvd2VyY2FzZUZpcnN0TGV0dGVyIiwgInJlc29sdmVUaGVtZSIsICJ0aGVtZUlkIiwgImRlZmF1bHRPdmVycmlkZXNSZXNvbHZlciIsICJzbG90IiwgInByb2Nlc3NTdHlsZUFyZyIsICJjYWxsYWJsZVN0eWxlIiwgIm93bmVyU3RhdGUiLCAicmVzb2x2ZWRTdHlsZXNBcmciLCAicmVzb2x2ZWRTdHlsZSIsICJ2YXJpYW50cyIsICJ2YXJpYW50IiwgImlzTWF0Y2giLCAiaW5wdXQiLCAicm9vdFNob3VsZEZvcndhcmRQcm9wIiwgInNsb3RTaG91bGRGb3J3YXJkUHJvcCIsICJzeXN0ZW1TeCIsICJpbnB1dE9wdGlvbnMiLCAiY29tcG9uZW50U2xvdCIsICJpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyIiwgImlucHV0U2tpcFN4IiwgIm92ZXJyaWRlc1Jlc29sdmVyIiwgInNraXBWYXJpYW50c1Jlc29sdmVyIiwgInNraXBTeCIsICJzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiIsICJkZWZhdWx0U3R5bGVkUmVzb2x2ZXIiLCAidHJhbnNmb3JtU3R5bGVBcmciLCAic3R5bGVzQXJnIiwgIm11aVN0eWxlZFJlc29sdmVyIiwgInN0eWxlQXJnIiwgImV4cHJlc3Npb25zIiwgInRyYW5zZm9ybWVkU3R5bGVBcmciLCAiZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lIiwgInN0eWxlT3ZlcnJpZGVzIiwgInJlc29sdmVkU3R5bGVPdmVycmlkZXMiLCAic2xvdEtleSIsICJzbG90U3R5bGUiLCAiX3RoZW1lJGNvbXBvbmVudHMiLCAidGhlbWVWYXJpYW50cyIsICJudW1PZkN1c3RvbUZuc0FwcGxpZWQiLCAicGxhY2Vob2xkZXJzIiwgImltcG9ydF9yZWFjdF9kb20iLCAiaW1wb3J0X3NoaW0iLCAiaW1wb3J0X3dpdGhfc2VsZWN0b3IiLCAiZGVmYXVsdE5vb3BCYXRjaCIsICJiYXRjaCIsICJzZXRCYXRjaCIsICJuZXdCYXRjaCIsICJnZXRCYXRjaCIsICJDb250ZXh0S2V5IiwgImdUIiwgImdldENvbnRleHQiLCAiX2dUJENvbnRleHRLZXkiLCAiY29udGV4dE1hcCIsICJyZWFsQ29udGV4dCIsICJSZWFjdFJlZHV4Q29udGV4dCIsICJjcmVhdGVSZWR1eENvbnRleHRIb29rIiwgImNvbnRleHQiLCAidXNlUmVkdXhDb250ZXh0IiwgIm5vdEluaXRpYWxpemVkIiwgInVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yIiwgImluaXRpYWxpemVVc2VTZWxlY3RvciIsICJyZWZFcXVhbGl0eSIsICJjcmVhdGVTZWxlY3Rvckhvb2siLCAiZXF1YWxpdHlGbk9yT3B0aW9ucyIsICJlcXVhbGl0eUZuIiwgInN0YWJpbGl0eUNoZWNrIiwgIm5vb3BDaGVjayIsICJzdG9yZSIsICJzdWJzY3JpcHRpb24iLCAiZ2V0U2VydmVyU3RhdGUiLCAiZ2xvYmFsU3RhYmlsaXR5Q2hlY2siLCAiZ2xvYmFsTm9vcENoZWNrIiwgImZpcnN0UnVuIiwgIndyYXBwZWRTZWxlY3RvciIsICJzdGF0ZSIsICJzZWxlY3RlZCIsICJmaW5hbFN0YWJpbGl0eUNoZWNrIiwgInRvQ29tcGFyZSIsICJmaW5hbE5vb3BDaGVjayIsICJzZWxlY3RlZFN0YXRlIiwgInVzZVNlbGVjdG9yIiwgImltcG9ydF9yZWFjdF9pcyIsICJjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24iLCAiZmlyc3QiLCAibGFzdCIsICJsaXN0ZW5lciIsICJsaXN0ZW5lcnMiLCAiaXNTdWJzY3JpYmVkIiwgIm51bGxMaXN0ZW5lcnMiLCAiY3JlYXRlU3Vic2NyaXB0aW9uIiwgInBhcmVudFN1YiIsICJ1bnN1YnNjcmliZSIsICJzdWJzY3JpcHRpb25zQW1vdW50IiwgInNlbGZTdWJzY3JpYmVkIiwgImFkZE5lc3RlZFN1YiIsICJ0cnlTdWJzY3JpYmUiLCAiY2xlYW51cExpc3RlbmVyIiwgInJlbW92ZWQiLCAidHJ5VW5zdWJzY3JpYmUiLCAibm90aWZ5TmVzdGVkU3VicyIsICJoYW5kbGVDaGFuZ2VXcmFwcGVyIiwgInRyeVN1YnNjcmliZVNlbGYiLCAidHJ5VW5zdWJzY3JpYmVTZWxmIiwgImNhblVzZURPTSIsICJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwgInVzZVN5bmNFeHRlcm5hbFN0b3JlIiwgImluaXRpYWxpemVDb25uZWN0IiwgIlByb3ZpZGVyIiwgInNlcnZlclN0YXRlIiwgImNvbnRleHRWYWx1ZSIsICJwcmV2aW91c1N0YXRlIiwgIlByb3ZpZGVyX2RlZmF1bHQiLCAiY3JlYXRlU3RvcmVIb29rIiwgInVzZVN0b3JlIiwgImNyZWF0ZURpc3BhdGNoSG9vayIsICJ1c2VEaXNwYXRjaCIsICJ1c2VBcHBEaXNwYXRjaCIsICJ1c2VBcHBTZWxlY3RvciIsICJkaWUiLCAiZXJyb3IiLCAibXNnIiwgIkVycm9yIiwgImpvaW4iLCAiaXNEcmFmdCIsICJEUkFGVF9TVEFURSIsICJpc0RyYWZ0YWJsZSIsICJwcm90byIsICJPYmplY3QiLCAiQ3RvciIsICJjYWxsIiwgImNvbnN0cnVjdG9yIiwgIkZ1bmN0aW9uIiwgInRvU3RyaW5nIiwgIm9iamVjdEN0b3JTdHJpbmciLCAiQXJyYXkiLCAiaXNBcnJheSIsICJEUkFGVEFCTEUiLCAiX3ZhbHVlJGNvbnN0cnVjdG9yIiwgImlzTWFwIiwgImlzU2V0IiwgImVhY2giLCAiZW51bWVyYWJsZU9ubHkiLCAiZ2V0QXJjaHR5cGUiLCAib3duS2V5cyIsICJmb3JFYWNoIiwgInRoaW5nIiwgInR5cGVfIiwgImhhcyIsICJnZXQiLCAic2V0IiwgInByb3BPck9sZFZhbHVlIiwgImFkZCIsICJpcyIsICJoYXNNYXAiLCAiTWFwIiwgImhhc1NldCIsICJTZXQiLCAibGF0ZXN0IiwgImNvcHlfIiwgImJhc2VfIiwgInNoYWxsb3dDb3B5IiwgImRlc2NyaXB0b3JzIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCAiZGVzYyIsICJ3cml0YWJsZSIsICJjb25maWd1cmFibGUiLCAiZW51bWVyYWJsZSIsICJmcmVlemUiLCAiZGVlcCIsICJpc0Zyb3plbiIsICJjbGVhciIsICJkZWxldGUiLCAiZG9udE11dGF0ZUZyb3plbkNvbGxlY3Rpb25zIiwgImdldFBsdWdpbiIsICJwbHVnaW5LZXkiLCAicGx1Z2luIiwgInBsdWdpbnMiLCAibG9hZFBsdWdpbiIsICJpbXBsZW1lbnRhdGlvbiIsICJnZXRDdXJyZW50U2NvcGUiLCAiY3VycmVudFNjb3BlIiwgInVzZVBhdGNoZXNJblNjb3BlIiwgInNjb3BlIiwgInBhdGNoTGlzdGVuZXIiLCAicGF0Y2hlc18iLCAiaW52ZXJzZVBhdGNoZXNfIiwgInBhdGNoTGlzdGVuZXJfIiwgInJldm9rZVNjb3BlIiwgImxlYXZlU2NvcGUiLCAiZHJhZnRzXyIsICJyZXZva2VEcmFmdCIsICJwYXJlbnRfIiwgImVudGVyU2NvcGUiLCAiaW1tZXIiLCAiaW1tZXJfIiwgImNhbkF1dG9GcmVlemVfIiwgInVuZmluYWxpemVkRHJhZnRzXyIsICJkcmFmdCIsICJyZXZva2VfIiwgInJldm9rZWRfIiwgInByb2Nlc3NSZXN1bHQiLCAiYmFzZURyYWZ0IiwgImlzUmVwbGFjZWQiLCAidXNlUHJveGllc18iLCAid2lsbEZpbmFsaXplRVM1XyIsICJtb2RpZmllZF8iLCAiZmluYWxpemUiLCAibWF5YmVGcmVlemUiLCAiZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfIiwgIk5PVEhJTkciLCAidW5kZWZpbmVkIiwgInJvb3RTY29wZSIsICJjaGlsZFZhbHVlIiwgImZpbmFsaXplUHJvcGVydHkiLCAic2NvcGVfIiwgImZpbmFsaXplZF8iLCAiZHJhZnRfIiwgInJlc3VsdEVhY2giLCAiZ2VuZXJhdGVQYXRjaGVzXyIsICJwYXJlbnRTdGF0ZSIsICJ0YXJnZXRPYmplY3QiLCAicm9vdFBhdGgiLCAidGFyZ2V0SXNTZXQiLCAicmVzIiwgImFzc2lnbmVkXyIsICJjb25jYXQiLCAiYXV0b0ZyZWV6ZV8iLCAiZ2V0RGVzY3JpcHRvckZyb21Qcm90byIsICJtYXJrQ2hhbmdlZCIsICJwcmVwYXJlQ29weSIsICJjcmVhdGVQcm94eSIsICJwcm94eU1hcF8iLCAicHJveHlTZXRfIiwgImlzTWFudWFsXyIsICJ0cmFwcyIsICJvYmplY3RUcmFwcyIsICJhcnJheVRyYXBzIiwgIlByb3h5IiwgInJldm9jYWJsZSIsICJyZXZva2UiLCAicHJveHkiLCAiY3JlYXRlRVM1UHJveHlfIiwgInB1c2giLCAiY3VycmVudEltcGwiLCAiYXJjaFR5cGUiLCAiaGFzQ2hhbmdlc18iLCAiY29weUhlbHBlciIsICJlbmFibGVFUzUiLCAicHJveHlQcm9wZXJ0eSIsICJ0aGlzIiwgIm1hcmtDaGFuZ2VzU3dlZXAiLCAiZHJhZnRzIiwgImhhc0FycmF5Q2hhbmdlcyIsICJoYXNPYmplY3RDaGFuZ2VzIiwgImJhc2VWYWx1ZSIsICJiYXNlSXNEcmFmdCIsICJhc3NlcnRVbnJldm9rZWQiLCAiSlNPTiIsICJtYXJrQ2hhbmdlc1JlY3Vyc2l2ZWx5IiwgIk1hdGgiLCAiaGFzU3ltYm9sIiwgIlN5bWJvbCIsICJoYXNQcm94aWVzIiwgIlJlZmxlY3QiLCAiZm9yIiwgIl9kZXNjJGdldCIsICJjdXJyZW50U3RhdGUiLCAiTnVtYmVyIiwgImlzTmFOIiwgImRlbGV0ZVByb3BlcnR5IiwgIm93bmVyIiwgInNldFByb3RvdHlwZU9mIiwgImFyZ3VtZW50cyIsICJhcHBseSIsICJJbW1lciIsICJyZWNpcGUiLCAiZGVmYXVsdEJhc2UiLCAicHJvZHVjZSIsICJfdGhpczIiLCAiaGFzRXJyb3IiLCAiUHJvbWlzZSIsICJ0aGVuIiwgImlwIiwgInByb2R1Y2VXaXRoUGF0Y2hlcyIsICJwYXRjaGVzIiwgImludmVyc2VQYXRjaGVzIiwgIm5leHRTdGF0ZSIsICJ1c2VQcm94aWVzIiwgInNldFVzZVByb3hpZXMiLCAiYXV0b0ZyZWV6ZSIsICJzZXRBdXRvRnJlZXplIiwgImNyZWF0ZURyYWZ0IiwgImZpbmlzaERyYWZ0IiwgImFwcGx5UGF0Y2hlcyIsICJwYXRjaCIsICJvcCIsICJhcHBseVBhdGNoZXNJbXBsIiwgImFwcGx5UGF0Y2hlc18iLCAiYmluZCIsICJfdHlwZW9mIiwgInRvUHJpbWl0aXZlIiwgInRvUHJvcGVydHlLZXkiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RTcHJlYWQyIiwgImZvcm1hdFByb2RFcnJvck1lc3NhZ2UiLCAiJCRvYnNlcnZhYmxlIiwgInJhbmRvbVN0cmluZyIsICJBY3Rpb25UeXBlcyIsICJjcmVhdGVTdG9yZSIsICJyZWR1Y2VyIiwgInByZWxvYWRlZFN0YXRlIiwgImVuaGFuY2VyIiwgIl9yZWYyIiwgImN1cnJlbnRSZWR1Y2VyIiwgImN1cnJlbnRMaXN0ZW5lcnMiLCAibmV4dExpc3RlbmVycyIsICJpc0Rpc3BhdGNoaW5nIiwgImVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMiLCAiZ2V0U3RhdGUiLCAic3Vic2NyaWJlIiwgImRpc3BhdGNoIiwgImFjdGlvbiIsICJyZXBsYWNlUmVkdWNlciIsICJuZXh0UmVkdWNlciIsICJvYnNlcnZhYmxlIiwgIm91dGVyU3Vic2NyaWJlIiwgIm9ic2VydmVyIiwgIm9ic2VydmVTdGF0ZSIsICJhc3NlcnRSZWR1Y2VyU2hhcGUiLCAicmVkdWNlcnMiLCAiaW5pdGlhbFN0YXRlIiwgImNvbWJpbmVSZWR1Y2VycyIsICJyZWR1Y2VyS2V5cyIsICJmaW5hbFJlZHVjZXJzIiwgImZpbmFsUmVkdWNlcktleXMiLCAidW5leHBlY3RlZEtleUNhY2hlIiwgInNoYXBlQXNzZXJ0aW9uRXJyb3IiLCAid2FybmluZ01lc3NhZ2UiLCAiaGFzQ2hhbmdlZCIsICJwcmV2aW91c1N0YXRlRm9yS2V5IiwgIm5leHRTdGF0ZUZvcktleSIsICJhY3Rpb25UeXBlIiwgImZ1bmNzIiwgImFwcGx5TWlkZGxld2FyZSIsICJtaWRkbGV3YXJlcyIsICJfZGlzcGF0Y2giLCAibWlkZGxld2FyZUFQSSIsICJjaGFpbiIsICJjcmVhdGVUaHVua01pZGRsZXdhcmUiLCAiZXh0cmFBcmd1bWVudCIsICJ0aHVuayIsICJlc19kZWZhdWx0IiwgImNvbXBvc2VXaXRoRGV2VG9vbHMiLCAiZGV2VG9vbHNFbmhhbmNlciIsICJub29wMiIsICJiYXNlUHJvdG8iLCAiY3JlYXRlQWN0aW9uIiwgInByZXBhcmVBY3Rpb24iLCAiYWN0aW9uQ3JlYXRvciIsICJwcmVwYXJlZCIsICJfX3NwcmVhZFZhbHVlcyIsICJNaWRkbGV3YXJlQXJyYXkiLCAiX3N1cGVyIiwgIl9fZXh0ZW5kcyIsICJhcnIiLCAiX19zcHJlYWRBcnJheSIsICJFbmhhbmNlckFycmF5IiwgImZyZWV6ZURyYWZ0YWJsZSIsICJpbW1lcl9lc21fZGVmYXVsdCIsICJpc0Jvb2xlYW4iLCAiY3VycnlHZXREZWZhdWx0TWlkZGxld2FyZSIsICJnZXREZWZhdWx0TWlkZGxld2FyZSIsICJfYyIsICJfZCIsICJpbW11dGFibGVDaGVjayIsICJfZSIsICJzZXJpYWxpemFibGVDaGVjayIsICJfZiIsICJhY3Rpb25DcmVhdG9yQ2hlY2siLCAibWlkZGxld2FyZUFycmF5IiwgImltbXV0YWJsZU9wdGlvbnMiLCAic2VyaWFsaXphYmxlT3B0aW9ucyIsICJhY3Rpb25DcmVhdG9yT3B0aW9ucyIsICJJU19QUk9EVUNUSU9OIiwgImNvbmZpZ3VyZVN0b3JlIiwgImN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSIsICJkZXZUb29scyIsICJfZyIsICJfaCIsICJlbmhhbmNlcnMiLCAicm9vdFJlZHVjZXIiLCAiZmluYWxNaWRkbGV3YXJlIiwgIm1pZGRsZXdhcmVFbmhhbmNlciIsICJmaW5hbENvbXBvc2UiLCAiZGVmYXVsdEVuaGFuY2VycyIsICJzdG9yZUVuaGFuY2VycyIsICJjb21wb3NlZEVuaGFuY2VyIiwgImV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrIiwgImJ1aWxkZXJDYWxsYmFjayIsICJhY3Rpb25zTWFwIiwgImFjdGlvbk1hdGNoZXJzIiwgImRlZmF1bHRDYXNlUmVkdWNlciIsICJidWlsZGVyIiwgInR5cGVPckFjdGlvbkNyZWF0b3IiLCAibWF0Y2hlciIsICJpc1N0YXRlRnVuY3Rpb24iLCAiY3JlYXRlUmVkdWNlciIsICJtYXBPckJ1aWxkZXJDYWxsYmFjayIsICJmaW5hbEFjdGlvbk1hdGNoZXJzIiwgImZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyIiwgImdldEluaXRpYWxTdGF0ZSIsICJmcm96ZW5Jbml0aWFsU3RhdGVfMSIsICJjYXNlUmVkdWNlcnMiLCAicmVkdWNlcjIiLCAiY3IiLCAiY2FzZVJlZHVjZXIiLCAiZ2V0VHlwZTIiLCAiYWN0aW9uS2V5IiwgImNyZWF0ZVNsaWNlIiwgInJlZHVjZXJOYW1lcyIsICJzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZSIsICJzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZSIsICJhY3Rpb25DcmVhdG9ycyIsICJyZWR1Y2VyTmFtZSIsICJtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSIsICJwcmVwYXJlQ2FsbGJhY2siLCAiYnVpbGRSZWR1Y2VyIiwgImV4dHJhUmVkdWNlcnMiLCAiZmluYWxDYXNlUmVkdWNlcnMiLCAiYWN0aW9uTWF0Y2hlcnNfMSIsICJfcmVkdWNlciIsICJ1cmxBbHBoYWJldCIsICJuYW5vaWQiLCAiY29tbW9uUHJvcGVydGllcyIsICJSZWplY3RXaXRoVmFsdWUiLCAicGF5bG9hZCIsICJtZXRhIiwgIkZ1bGZpbGxXaXRoTWV0YSIsICJtaW5pU2VyaWFsaXplRXJyb3IiLCAic2ltcGxlRXJyb3IiLCAiY29tbW9uUHJvcGVydGllc18xIiwgImNyZWF0ZUFzeW5jVGh1bmsiLCAiY3JlYXRlQXN5bmNUaHVuazIiLCAidHlwZVByZWZpeCIsICJwYXlsb2FkQ3JlYXRvciIsICJmdWxmaWxsZWQiLCAicmVxdWVzdElkIiwgIl9fc3ByZWFkUHJvcHMiLCAicGVuZGluZyIsICJyZWplY3RlZCIsICJkaXNwbGF5ZWRXYXJuaW5nIiwgIkFDIiwgImNsYXNzXzEiLCAiZXh0cmEiLCAiYWJvcnRDb250cm9sbGVyIiwgImFib3J0UmVhc29uIiwgInN0YXJ0ZWQiLCAiYWJvcnQiLCAicmVhc29uIiwgInByb21pc2UyIiwgIl9fYXN5bmMiLCAiY29uZGl0aW9uUmVzdWx0IiwgIl9hIiwgImlzVGhlbmFibGUiLCAiYWJvcnRlZFByb21pc2UiLCAiXyIsICJyZWplY3QiLCAiX2IiLCAiZmluYWxBY3Rpb24iLCAiZXJyXzEiLCAic2tpcERpc3BhdGNoIiwgInVud3JhcFJlc3VsdCIsICJ0YXNrIiwgImNvbXBsZXRlZCIsICJjYW5jZWxsZWQiLCAidGFza0NhbmNlbGxlZCIsICJ0YXNrQ29tcGxldGVkIiwgImxpc3RlbmVyQ2FuY2VsbGVkIiwgImxpc3RlbmVyQ29tcGxldGVkIiwgIlRhc2tBYm9ydEVycm9yIiwgImFsbSIsICJhZGRMaXN0ZW5lciIsICJjbGVhckFsbExpc3RlbmVycyIsICJyZW1vdmVMaXN0ZW5lciIsICJwcm9taXNlIiwgInF1ZXVlTWljcm90YXNrU2hpbSIsICJjcmVhdGVRdWV1ZVdpdGhUaW1lciIsICJ0aW1lb3V0IiwgIm5vdGlmeSIsICJyQUYiLCAicmVxdWVzdCIsICJyZXFQYXJhbXMiLCAiaW5pdCIsICJhcGlVcmwiLCAibWVzc2FnZSIsICJQYWdlIiwgIl9QYWdlIiwgInBhZ2UiLCAibnVtRWxlbWVudHMiLCAidG90YWxQYWdlcyIsICJ0b3RhbEVsZW1lbnRzIiwgImVsZW1lbnRzIiwgImZhY2V0RmllbGRzVG9Db3VudHMiLCAiZ2V0UGFnaW5hdGVkIiwgIm5vcm1hbGl6ZSIsICJzdHJBcnJheSIsICJyZXN1bHRBcnJheSIsICJwYXJ0cyIsICJ1cmxKb2luIiwgImdldFN0YXRzIiwgInJlamVjdFdpdGhWYWx1ZSIsICJnZXRCYW5uZXJUZXh0IiwgImhvbWVTbGljZSIsICJob21lU2xpY2VfZGVmYXVsdCIsICJSZWlmaWVkIiwgIl9SZWlmaWVkIiwgImF4aW9tcyIsICJqc29uTm9kZSIsICJheGlvbSIsICJleGlzdGluZyIsICJMaW5rZWRFbnRpdGllcyIsICJfTGlua2VkRW50aXRpZXMiLCAibGlua2VkRW50aXRpZXMiLCAiaXJpIiwgImxpbmtlZEVudGl0eSIsICJUaGluZyIsICJ0eXBlcyIsICJhc0FycmF5IiwgImxhYmVscyIsICJkZWZpbml0aW9uIiwgImRlZiIsICJFbnRpdHkiLCAiZGVmaW5pdGlvblByb3BlcnRpZXMiLCAic3lub255bVByb3BlcnRpZXMiLCAiaGllcmFyY2hpY2FsUHJvcGVydGllcyIsICJhbm5vdGF0aW9uUHJlZGljYXRlcyIsICJwcmVkaWNhdGUiLCAicGFyZW50SXJpIiwgImhpZXJhcmNoaWNhbFBhcmVudHMiLCAiQ2xhc3MiLCAiSW5kaXZpZHVhbCIsICJyZGZUeXBlcyIsICJQcm9wZXJ0eSIsICJ0aGluZ0Zyb21Kc29uUHJvcGVydGllcyIsICJtYXBUb0FwaVBhcmFtcyIsICJzZWFyY2hQYXJhbXMiLCAic2VhcmNoUGFyYW1zQ29weSIsICJuZXdLZXkiLCAidG9DYW1lbCIsICIkMSIsICJPbnRvbG9neSIsICJuYW1lcyIsICJkZXNjcmlwdGlvbnMiLCAidmVyc2lvbklyaSIsICJ2ZXJzaW9uRnJvbURhdGUiLCAidmVyc2lvbkZyb21OdW1iZXIiLCAiaW1wb3J0X211bHRpbWFwIiwgImV4dHJhY3RFbnRpdHlIaWVyYXJjaHkiLCAiZW50aXRpZXMiLCAiY2hpbGRUb1BhcmVudFJlbGF0aW9ucyIsICJ1cmlUb05vZGUiLCAiZW50aXR5IiwgImlzVG9wIiwgInBhcmVudFJlbGF0aW9uIiwgInBhcmVudEVudGl0eSIsICJwYXJlbnRSZWxhdGlvblRvQ2hpbGQiLCAiY2hpbGRSZWxhdGlvblRvUGFyZW50IiwgInJlbGF0aW9uIiwgImJyZWFrQ3ljbGVzIiwgImN1cnJlbnRJcmkiLCAidmlzaXRlZElyaXMiLCAicGFyZW50UmVsYXRpb25zIiwgInBhcmVudFRvQ2hpbGRSZWxhdGlvbnMiLCAiY2hpbGRJcmkiLCAicmVsYXRpb25zIiwgImNyZWF0ZVRyZWVGcm9tRW50aXRpZXMiLCAicHJlZmVycmVkUm9vdHMiLCAib250b2xvZ3kiLCAicm9vdEVudGl0aWVzIiwgInByZWZlcnJlZCIsICJhbGxOb2RlcyIsICJub2RlQ2hpbGRyZW4iLCAiYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMiLCAicm9vdEVudGl0eSIsICJjcmVhdGVUcmVlTm9kZSIsICJkZWJ1Z051bUl0ZXJhdGlvbnMiLCAiY2hpbGROb2RlcyIsICJ0cmVlTm9kZSIsICJjaGlsZE5vZGUiLCAicmVzZXRUcmVlQ29udGVudCIsICJyZXNldFRyZWVTZXR0aW5ncyIsICJlbmFibGVQcmVmZXJyZWRSb290cyIsICJkaXNhYmxlUHJlZmVycmVkUm9vdHMiLCAib3Blbk5vZGUiLCAiY2xvc2VOb2RlIiwgInNob3dPYnNvbGV0ZSIsICJoaWRlT2Jzb2xldGUiLCAic2hvd1NpYmxpbmdzIiwgImhpZGVTaWJsaW5ncyIsICJzaG93Q291bnRzIiwgImhpZGVDb3VudHMiLCAiZ2V0T250b2xvZ3kiLCAib250b2xvZ3lJZCIsICJsYW5nIiwgIm9udG9sb2d5UHJvcGVydGllcyIsICJnZXRFbnRpdHlXaXRoVHlwZSIsICJlbnRpdHlUeXBlIiwgImVudGl0eUlyaSIsICJhcGlTZWFyY2hQYXJhbXMiLCAiZG91YmxlRW5jb2RlZFRlcm1VcmkiLCAiZW50aXR5SnNvblByb3BlcnRpZXMiLCAicmVzdWx0cyIsICJnZXRFbnRpdHkiLCAiZ2V0Q2xhc3NJbnN0YW5jZXMiLCAiY2xhc3NJcmkiLCAiZ2V0T250b2xvZ2llcyIsICJyb3dzUGVyUGFnZSIsICJnZXRFbnRpdGllcyIsICJnZXRBbmNlc3RvcnMiLCAic2hvd09ic29sZXRlRW5hYmxlZCIsICJkb3VibGVFbmNvZGVkVXJpIiwgImFuY2VzdG9yc1BhZ2UiLCAiZ2V0Um9vdEVudGl0aWVzIiwgImNsYXNzZXNXaXRoSW5kaXZpZHVhbHMiLCAib3JwaGFuZWRJbmRpdmlkdWFscyIsICJyb290c1BhZ2UiLCAiZ2V0Tm9kZUNoaWxkcmVuIiwgImVudGl0eVR5cGVQbHVyYWwiLCAiYWJzb2x1dGVJZGVudGl0eSIsICJjaGlsZHJlblBhZ2UiLCAidGVybSIsICJwYXJlbnRob29kTWV0YWRhdGEiLCAib250b2xvZ2llc1NsaWNlIiwgInJvb3ROb2RlcyIsICJyb290VGVybXMiLCAic2VsZWN0ZWRJc0Rlc2NlbmRhbnRPZlByZWZlcnJlZFJvb3RzIiwgImFic0lkIiwgIm9udG9sb2dpZXNTbGljZV9kZWZhdWx0IiwgImdldFNlYXJjaFJlc3VsdHMiLCAicXVlcnkiLCAicGFyYW0iLCAicGFyc2VkUXVlcnkiLCAic2VhcmNoU2xpY2UiLCAic2VhcmNoU2xpY2VfZGVmYXVsdCIsICJjb21tb24iLCAiY29tbW9uX2RlZmF1bHQiLCAicmVkIiwgInJlZF9kZWZhdWx0IiwgInB1cnBsZSIsICJwdXJwbGVfZGVmYXVsdCIsICJibHVlIiwgImJsdWVfZGVmYXVsdCIsICJsaWdodEJsdWUiLCAibGlnaHRCbHVlX2RlZmF1bHQiLCAiZ3JlZW4iLCAiZ3JlZW5fZGVmYXVsdCIsICJvcmFuZ2UiLCAib3JhbmdlX2RlZmF1bHQiLCAiZ3JleSIsICJncmV5X2RlZmF1bHQiLCAiaWRlbnRpZmllcl9kZWZhdWx0IiwgImltcG9ydF9zdHlsZWRfZW5naW5lIiwgImltcG9ydF9kZWVwbWVyZ2UiLCAic2hhcGVfZGVmYXVsdCIsICJtZXJnZV9kZWZhdWx0IiwgImltcG9ydF9jYXBpdGFsaXplIiwgInN0eWxlX2RlZmF1bHQiLCAiY29tcG9zZV9kZWZhdWx0IiwgImRlZmF1bHRTeENvbmZpZ19kZWZhdWx0IiwgInN0eWxlRnVuY3Rpb25TeF9kZWZhdWx0IiwgImNyZWF0ZVRoZW1lX2RlZmF1bHQiLCAiaXNPYmplY3RFbXB0eSIsICJjb250ZXh0VGhlbWUiLCAidXNlVGhlbWVXaXRob3V0RGVmYXVsdF9kZWZhdWx0IiwgInVzZVRoZW1lX2RlZmF1bHQiLCAiZGVmYXVsdEdlbmVyYXRvciIsICJjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IiLCAiZ2VuZXJhdGUiLCAiZ2VuZXJhdG9yIiwgIkNsYXNzTmFtZUdlbmVyYXRvciIsICJDbGFzc05hbWVHZW5lcmF0b3JfZGVmYXVsdCIsICJjbHN4IiwgImNsc3hfZGVmYXVsdCIsICJnbG9iYWxTdGF0ZUNsYXNzZXMiLCAiZ2VuZXJhdGVVdGlsaXR5Q2xhc3MiLCAiZ2xvYmFsU3RhdGVQcmVmaXgiLCAiZ2xvYmFsU3RhdGVDbGFzcyIsICJnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIiwgInNsb3RzIiwgInByb2Nlc3NTdHlsZXMiLCAic3R5bGVkRW5naW5lU3R5bGVkIiwgInN0eWxlZF9kZWZhdWx0IiwgInJlc29sdmVQcm9wcyIsICJkZWZhdWx0UHJvcHMiLCAiZGVmYXVsdFNsb3RQcm9wcyIsICJzbG90UHJvcHMiLCAic2xvdFByb3BOYW1lIiwgImdldFRoZW1lUHJvcHMiLCAicGFyYW1zIiwgInVzZVRoZW1lUHJvcHMiLCAidXNlRW5oYW5jZWRFZmZlY3QiLCAidXNlRW5oYW5jZWRFZmZlY3RfZGVmYXVsdCIsICJjcmVhdGVDaGFpbmVkRnVuY3Rpb24iLCAiaXNNdWlFbGVtZW50IiwgIm11aU5hbWVzIiwgIl9tdWlOYW1lIiwgIl9lbGVtZW50JHR5cGUiLCAic2V0UmVmIiwgImdsb2JhbElkIiwgInVzZUdsb2JhbElkIiwgImlkT3ZlcnJpZGUiLCAiZGVmYXVsdElkIiwgInNldERlZmF1bHRJZCIsICJtYXliZVJlYWN0VXNlSWQiLCAidXNlSWQiLCAicmVhY3RJZCIsICJ1c2VDb250cm9sbGVkIiwgImNvbnRyb2xsZWQiLCAiZGVmYXVsdFByb3AiLCAiaXNDb250cm9sbGVkIiwgInZhbHVlU3RhdGUiLCAic2V0VmFsdWUiLCAic2V0VmFsdWVJZlVuY29udHJvbGxlZCIsICJuZXdWYWx1ZSIsICJ1c2VFdmVudENhbGxiYWNrIiwgInVzZUV2ZW50Q2FsbGJhY2tfZGVmYXVsdCIsICJ1c2VGb3JrUmVmIiwgInJlZnMiLCAiaW5zdGFuY2UiLCAiVU5JTklUSUFMSVpFRCIsICJ1c2VMYXp5UmVmIiwgImluaXRBcmciLCAiRU1QVFkiLCAidXNlT25Nb3VudCIsICJUaW1lb3V0IiwgIl9UaW1lb3V0IiwgImRlbGF5IiwgInVzZVRpbWVvdXQiLCAiaGFkS2V5Ym9hcmRFdmVudCIsICJoYWRGb2N1c1Zpc2libGVSZWNlbnRseSIsICJoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQiLCAiaW5wdXRUeXBlc1doaXRlbGlzdCIsICJmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eSIsICJoYW5kbGVLZXlEb3duIiwgImV2ZW50IiwgImhhbmRsZVBvaW50ZXJEb3duIiwgImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCAicHJlcGFyZSIsICJkb2MiLCAiaXNGb2N1c1Zpc2libGUiLCAidXNlSXNGb2N1c1Zpc2libGUiLCAiaXNGb2N1c1Zpc2libGVSZWYiLCAiaGFuZGxlQmx1clZpc2libGUiLCAiaGFuZGxlRm9jdXNWaXNpYmxlIiwgImNvbXBvc2VDbGFzc2VzIiwgImdldFV0aWxpdHlDbGFzcyIsICJjbGFzc2VzIiwgInV0aWxpdHlDbGFzcyIsICJpbXBvcnRfanN4X3J1bnRpbWUiLCAiZGVmYXVsdENyZWF0ZVN0eWxlZENvbXBvbmVudCIsICJ1c2VUaGVtZVByb3BzRGVmYXVsdCIsICJqb2luQ2hpbGRyZW4iLCAic2VwYXJhdG9yIiwgImNoaWxkcmVuQXJyYXkiLCAiY2hpbGQiLCAiZ2V0U2lkZUZyb21EaXJlY3Rpb24iLCAiZGlyZWN0aW9uVmFsdWVzIiwgInNwYWNpbmdWYWx1ZXMiLCAicHJldmlvdXNEaXJlY3Rpb25WYWx1ZSIsICJjcmVhdGVTdGFjayIsICJjcmVhdGVTdHlsZWRDb21wb25lbnQiLCAidXNlVXRpbGl0eUNsYXNzZXMiLCAiU3RhY2tSb290IiwgImluUHJvcHMiLCAidGhlbWVQcm9wcyIsICJkaXZpZGVyIiwgInVzZUZsZXhHYXAiLCAiX2pzeCIsICJpbXBvcnRfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIiwgImltcG9ydF9zdHlsZUZ1bmN0aW9uU3giLCAiaW1wb3J0X2NyZWF0ZVRoZW1lIiwgImNyZWF0ZU1peGlucyIsICJtaXhpbnMiLCAiaW1wb3J0X2NvbG9yTWFuaXB1bGF0b3IiLCAibGlnaHQiLCAiZGFyayIsICJhZGRMaWdodE9yRGFyayIsICJpbnRlbnQiLCAic2hhZGUiLCAidG9uYWxPZmZzZXQiLCAidG9uYWxPZmZzZXRMaWdodCIsICJ0b25hbE9mZnNldERhcmsiLCAiZ2V0RGVmYXVsdFByaW1hcnkiLCAibW9kZSIsICJnZXREZWZhdWx0U2Vjb25kYXJ5IiwgImdldERlZmF1bHRFcnJvciIsICJnZXREZWZhdWx0SW5mbyIsICJnZXREZWZhdWx0U3VjY2VzcyIsICJnZXREZWZhdWx0V2FybmluZyIsICJjcmVhdGVQYWxldHRlIiwgImNvbnRyYXN0VGhyZXNob2xkIiwgInByaW1hcnkiLCAic2Vjb25kYXJ5IiwgImluZm8iLCAic3VjY2VzcyIsICJnZXRDb250cmFzdFRleHQiLCAiYXVnbWVudENvbG9yIiwgIm1haW5TaGFkZSIsICJsaWdodFNoYWRlIiwgImRhcmtTaGFkZSIsICJtb2RlcyIsICJyb3VuZCIsICJjYXNlQWxsQ2FwcyIsICJkZWZhdWx0Rm9udEZhbWlseSIsICJjcmVhdGVUeXBvZ3JhcGh5IiwgInR5cG9ncmFwaHkiLCAiZm9udEZhbWlseSIsICJmb250U2l6ZSIsICJmb250V2VpZ2h0TGlnaHQiLCAiZm9udFdlaWdodFJlZ3VsYXIiLCAiZm9udFdlaWdodE1lZGl1bSIsICJmb250V2VpZ2h0Qm9sZCIsICJodG1sRm9udFNpemUiLCAiYWxsVmFyaWFudHMiLCAicHhUb1JlbTIiLCAiY29lZiIsICJweFRvUmVtIiwgImJ1aWxkVmFyaWFudCIsICJmb250V2VpZ2h0IiwgImxpbmVIZWlnaHQiLCAibGV0dGVyU3BhY2luZyIsICJjYXNpbmciLCAiY3JlYXRlU2hhZG93IiwgInB4IiwgInNoYWRvd3MiLCAic2hhZG93c19kZWZhdWx0IiwgImVhc2luZyIsICJkdXJhdGlvbiIsICJmb3JtYXRNcyIsICJtaWxsaXNlY29uZHMiLCAiZ2V0QXV0b0hlaWdodER1cmF0aW9uIiwgImNvbnN0YW50IiwgImNyZWF0ZVRyYW5zaXRpb25zIiwgImlucHV0VHJhbnNpdGlvbnMiLCAibWVyZ2VkRWFzaW5nIiwgIm1lcmdlZER1cmF0aW9uIiwgImR1cmF0aW9uT3B0aW9uIiwgImVhc2luZ09wdGlvbiIsICJhbmltYXRlZFByb3AiLCAiekluZGV4IiwgInpJbmRleF9kZWZhdWx0IiwgIm1peGluc0lucHV0IiwgInRyYW5zaXRpb25zSW5wdXQiLCAidHlwb2dyYXBoeUlucHV0IiwgInN5c3RlbVRoZW1lIiwgInN5c3RlbUNyZWF0ZVRoZW1lIiwgImRlZmF1bHRUaGVtZV9kZWZhdWx0IiwgImltcG9ydF9jcmVhdGVTdHlsZWQiLCAiY2FwaXRhbGl6ZV9kZWZhdWx0IiwgImNyZWF0ZUNoYWluZWRGdW5jdGlvbl9kZWZhdWx0IiwgImdldFN2Z0ljb25VdGlsaXR5Q2xhc3MiLCAic3ZnSWNvbkNsYXNzZXMiLCAiU3ZnSWNvblJvb3QiLCAiX3RoZW1lJHRyYW5zaXRpb25zIiwgIl90aGVtZSR0cmFuc2l0aW9ucyRjciIsICJfdGhlbWUkdHJhbnNpdGlvbnMyIiwgIl90aGVtZSR0eXBvZ3JhcGh5IiwgIl90aGVtZSR0eXBvZ3JhcGh5JHB4VCIsICJfdGhlbWUkdHlwb2dyYXBoeTIiLCAiX3RoZW1lJHR5cG9ncmFwaHkyJHB4IiwgIl90aGVtZSR0eXBvZ3JhcGh5MyIsICJfdGhlbWUkdHlwb2dyYXBoeTMkcHgiLCAiX3BhbGV0dGUkb3duZXJTdGF0ZSRjIiwgIl9wYWxldHRlMiIsICJfcGFsZXR0ZTMiLCAiU3ZnSWNvbiIsICJodG1sQ29sb3IiLCAiaW5oZXJpdFZpZXdCb3giLCAidGl0bGVBY2Nlc3MiLCAidmlld0JveCIsICJoYXNTdmdBc0NoaWxkIiwgIm1vcmUiLCAiX2pzeHMiLCAiU3ZnSWNvbl9kZWZhdWx0IiwgImNyZWF0ZVN2Z0ljb24iLCAiZGlzcGxheU5hbWUiLCAiaXNNdWlFbGVtZW50X2RlZmF1bHQiLCAidXNlSWRfZGVmYXVsdCIsICJ1c2VDb250cm9sbGVkX2RlZmF1bHQiLCAidXNlRm9ya1JlZl9kZWZhdWx0IiwgInVzZUlzRm9jdXNWaXNpYmxlX2RlZmF1bHQiLCAiX3NldFByb3RvdHlwZU9mIiwgIl9pbmhlcml0c0xvb3NlIiwgInN1YkNsYXNzIiwgInN1cGVyQ2xhc3MiLCAiVHJhbnNpdGlvbkdyb3VwQ29udGV4dF9kZWZhdWx0IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiZ2V0Q2hpbGRNYXBwaW5nIiwgIm1hcEZuIiwgIm1hcHBlciIsICJtZXJnZUNoaWxkTWFwcGluZ3MiLCAiZ2V0VmFsdWVGb3JLZXkiLCAibmV4dEtleXNQZW5kaW5nIiwgInBlbmRpbmdLZXlzIiwgInByZXZLZXkiLCAiY2hpbGRNYXBwaW5nIiwgIm5leHRLZXkiLCAicGVuZGluZ05leHRLZXkiLCAiZ2V0UHJvcCIsICJnZXRJbml0aWFsQ2hpbGRNYXBwaW5nIiwgIm9uRXhpdGVkIiwgImdldE5leHRDaGlsZE1hcHBpbmciLCAibmV4dFByb3BzIiwgInByZXZDaGlsZE1hcHBpbmciLCAibmV4dENoaWxkTWFwcGluZyIsICJoYXNQcmV2IiwgImhhc05leHQiLCAicHJldkNoaWxkIiwgImlzTGVhdmluZyIsICJUcmFuc2l0aW9uR3JvdXAiLCAiX1JlYWN0JENvbXBvbmVudCIsICJoYW5kbGVFeGl0ZWQiLCAiZmlyc3RSZW5kZXIiLCAiY3VycmVudENoaWxkTWFwcGluZyIsICJfdGhpcyRwcm9wcyIsICJjaGlsZEZhY3RvcnkiLCAiVHJhbnNpdGlvbkdyb3VwX2RlZmF1bHQiLCAiUmlwcGxlIiwgInB1bHNhdGUiLCAicmlwcGxlWCIsICJyaXBwbGVZIiwgInJpcHBsZVNpemUiLCAiaW5Qcm9wIiwgImxlYXZpbmciLCAic2V0TGVhdmluZyIsICJyaXBwbGVDbGFzc05hbWUiLCAicmlwcGxlU3R5bGVzIiwgImNoaWxkQ2xhc3NOYW1lIiwgInRpbWVvdXRJZCIsICJSaXBwbGVfZGVmYXVsdCIsICJ0b3VjaFJpcHBsZUNsYXNzZXMiLCAidG91Y2hSaXBwbGVDbGFzc2VzX2RlZmF1bHQiLCAiX3QiLCAiX3QyIiwgIl90MyIsICJfdDQiLCAiRFVSQVRJT04iLCAiREVMQVlfUklQUExFIiwgImVudGVyS2V5ZnJhbWUiLCAiZXhpdEtleWZyYW1lIiwgInB1bHNhdGVLZXlmcmFtZSIsICJUb3VjaFJpcHBsZVJvb3QiLCAiVG91Y2hSaXBwbGVSaXBwbGUiLCAiVG91Y2hSaXBwbGUiLCAiY2VudGVyUHJvcCIsICJyaXBwbGVzIiwgInNldFJpcHBsZXMiLCAicmlwcGxlQ2FsbGJhY2siLCAiaWdub3JpbmdNb3VzZURvd24iLCAic3RhcnRUaW1lciIsICJzdGFydFRpbWVyQ29tbWl0IiwgInN0YXJ0Q29tbWl0IiwgIm9sZFJpcHBsZXMiLCAiY2VudGVyIiwgImZha2VFbGVtZW50IiwgInJlY3QiLCAiY2xpZW50WCIsICJjbGllbnRZIiwgInNpemVYIiwgInNpemVZIiwgInN0b3AiLCAiVG91Y2hSaXBwbGVfZGVmYXVsdCIsICJnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzIiwgImJ1dHRvbkJhc2VDbGFzc2VzIiwgImJ1dHRvbkJhc2VDbGFzc2VzX2RlZmF1bHQiLCAiZGlzYWJsZWQiLCAiZm9jdXNWaXNpYmxlIiwgImZvY3VzVmlzaWJsZUNsYXNzTmFtZSIsICJjb21wb3NlZENsYXNzZXMiLCAiQnV0dG9uQmFzZVJvb3QiLCAiQnV0dG9uQmFzZSIsICJjZW50ZXJSaXBwbGUiLCAiZGlzYWJsZVJpcHBsZSIsICJkaXNhYmxlVG91Y2hSaXBwbGUiLCAiZm9jdXNSaXBwbGUiLCAiTGlua0NvbXBvbmVudCIsICJvbkJsdXIiLCAib25DbGljayIsICJvbkNvbnRleHRNZW51IiwgIm9uRHJhZ0xlYXZlIiwgIm9uRm9jdXMiLCAib25Gb2N1c1Zpc2libGUiLCAib25LZXlEb3duIiwgIm9uS2V5VXAiLCAib25Nb3VzZURvd24iLCAib25Nb3VzZUxlYXZlIiwgIm9uTW91c2VVcCIsICJvblRvdWNoRW5kIiwgIm9uVG91Y2hNb3ZlIiwgIm9uVG91Y2hTdGFydCIsICJ0YWJJbmRleCIsICJUb3VjaFJpcHBsZVByb3BzIiwgInRvdWNoUmlwcGxlUmVmIiwgImJ1dHRvblJlZiIsICJyaXBwbGVSZWYiLCAiaGFuZGxlUmlwcGxlUmVmIiwgImZvY3VzVmlzaWJsZVJlZiIsICJzZXRGb2N1c1Zpc2libGUiLCAibW91bnRlZFN0YXRlIiwgInNldE1vdW50ZWRTdGF0ZSIsICJlbmFibGVUb3VjaFJpcHBsZSIsICJ1c2VSaXBwbGVIYW5kbGVyIiwgInJpcHBsZUFjdGlvbiIsICJldmVudENhbGxiYWNrIiwgInNraXBSaXBwbGVBY3Rpb24iLCAiaGFuZGxlTW91c2VEb3duIiwgImhhbmRsZUNvbnRleHRNZW51IiwgImhhbmRsZURyYWdMZWF2ZSIsICJoYW5kbGVNb3VzZVVwIiwgImhhbmRsZU1vdXNlTGVhdmUiLCAiaGFuZGxlVG91Y2hTdGFydCIsICJoYW5kbGVUb3VjaEVuZCIsICJoYW5kbGVUb3VjaE1vdmUiLCAiaGFuZGxlQmx1ciIsICJoYW5kbGVGb2N1cyIsICJpc05vbk5hdGl2ZUJ1dHRvbiIsICJidXR0b24iLCAia2V5ZG93blJlZiIsICJoYW5kbGVLZXlVcCIsICJDb21wb25lbnRQcm9wIiwgImJ1dHRvblByb3BzIiwgImhhbmRsZVJlZiIsICJCdXR0b25CYXNlX2RlZmF1bHQiLCAiZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyIsICJ0eXBvZ3JhcGh5Q2xhc3NlcyIsICJhbGlnbiIsICJndXR0ZXJCb3R0b20iLCAibm9XcmFwIiwgInBhcmFncmFwaCIsICJUeXBvZ3JhcGh5Um9vdCIsICJkZWZhdWx0VmFyaWFudE1hcHBpbmciLCAiY29sb3JUcmFuc2Zvcm1hdGlvbnMiLCAidHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyIsICJUeXBvZ3JhcGh5IiwgInZhcmlhbnRNYXBwaW5nIiwgIlR5cG9ncmFwaHlfZGVmYXVsdCIsICJmb3JtQ29udHJvbFN0YXRlIiwgInN0YXRlcyIsICJtdWlGb3JtQ29udHJvbCIsICJGb3JtQ29udHJvbENvbnRleHQiLCAiRm9ybUNvbnRyb2xDb250ZXh0X2RlZmF1bHQiLCAidXNlRm9ybUNvbnRyb2wiLCAiaGFzVmFsdWUiLCAiaXNGaWxsZWQiLCAiU1NSIiwgImlzQWRvcm5lZFN0YXJ0IiwgImdldFN3aXRjaEJhc2VVdGlsaXR5Q2xhc3MiLCAic3dpdGNoQmFzZUNsYXNzZXMiLCAiY2hlY2tlZCIsICJlZGdlIiwgIlN3aXRjaEJhc2VSb290IiwgIlN3aXRjaEJhc2VJbnB1dCIsICJTd2l0Y2hCYXNlIiwgImF1dG9Gb2N1cyIsICJjaGVja2VkUHJvcCIsICJjaGVja2VkSWNvbiIsICJkZWZhdWx0Q2hlY2tlZCIsICJkaXNhYmxlZFByb3AiLCAiZGlzYWJsZUZvY3VzUmlwcGxlIiwgImljb24iLCAiaW5wdXRQcm9wcyIsICJpbnB1dFJlZiIsICJvbkNoYW5nZSIsICJyZWFkT25seSIsICJyZXF1aXJlZCIsICJzZXRDaGVja2VkU3RhdGUiLCAiaGFuZGxlSW5wdXRDaGFuZ2UiLCAibmV3Q2hlY2tlZCIsICJoYXNMYWJlbEZvciIsICJTd2l0Y2hCYXNlX2RlZmF1bHQiLCAiQ2hlY2tCb3hPdXRsaW5lQmxhbmtfZGVmYXVsdCIsICJDaGVja0JveF9kZWZhdWx0IiwgIkluZGV0ZXJtaW5hdGVDaGVja0JveF9kZWZhdWx0IiwgImdldENoZWNrYm94VXRpbGl0eUNsYXNzIiwgImNoZWNrYm94Q2xhc3NlcyIsICJjaGVja2JveENsYXNzZXNfZGVmYXVsdCIsICJpbmRldGVybWluYXRlIiwgIkNoZWNrYm94Um9vdCIsICJkZWZhdWx0Q2hlY2tlZEljb24iLCAiZGVmYXVsdEljb24iLCAiZGVmYXVsdEluZGV0ZXJtaW5hdGVJY29uIiwgIkNoZWNrYm94IiwgIl9pY29uJHByb3BzJGZvbnRTaXplIiwgIl9pbmRldGVybWluYXRlSWNvbiRwciIsICJpY29uUHJvcCIsICJpbmRldGVybWluYXRlSWNvblByb3AiLCAiaW5kZXRlcm1pbmF0ZUljb24iLCAiQ2hlY2tib3hfZGVmYXVsdCIsICJnZXRDaXJjdWxhclByb2dyZXNzVXRpbGl0eUNsYXNzIiwgImNpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzIiwgIlNJWkUiLCAiY2lyY3VsYXJSb3RhdGVLZXlmcmFtZSIsICJjaXJjdWxhckRhc2hLZXlmcmFtZSIsICJkaXNhYmxlU2hyaW5rIiwgIkNpcmN1bGFyUHJvZ3Jlc3NSb290IiwgIkNpcmN1bGFyUHJvZ3Jlc3NTVkciLCAiQ2lyY3VsYXJQcm9ncmVzc0NpcmNsZSIsICJDaXJjdWxhclByb2dyZXNzIiwgInRoaWNrbmVzcyIsICJjaXJjbGVTdHlsZSIsICJyb290U3R5bGUiLCAicm9vdFByb3BzIiwgImNpcmN1bWZlcmVuY2UiLCAiQ2lyY3VsYXJQcm9ncmVzc19kZWZhdWx0IiwgImdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMiLCAiZm9ybUNvbnRyb2xDbGFzc2VzIiwgImZ1bGxXaWR0aCIsICJGb3JtQ29udHJvbFJvb3QiLCAiRm9ybUNvbnRyb2wiLCAidmlzdWFsbHlGb2N1c2VkIiwgImhpZGRlbkxhYmVsIiwgImFkb3JuZWRTdGFydCIsICJzZXRBZG9ybmVkU3RhcnQiLCAiaW5pdGlhbEFkb3JuZWRTdGFydCIsICJmaWxsZWQiLCAic2V0RmlsbGVkIiwgImluaXRpYWxGaWxsZWQiLCAiZm9jdXNlZFN0YXRlIiwgInNldEZvY3VzZWQiLCAiZm9jdXNlZCIsICJyZWdpc3RlckVmZmVjdCIsICJjaGlsZENvbnRleHQiLCAiRm9ybUNvbnRyb2xfZGVmYXVsdCIsICJTdGFjayIsICJTdGFja19kZWZhdWx0IiwgImdldEZvcm1Db250cm9sTGFiZWxVdGlsaXR5Q2xhc3NlcyIsICJmb3JtQ29udHJvbExhYmVsQ2xhc3NlcyIsICJmb3JtQ29udHJvbExhYmVsQ2xhc3Nlc19kZWZhdWx0IiwgImxhYmVsUGxhY2VtZW50IiwgIkZvcm1Db250cm9sTGFiZWxSb290IiwgIkFzdGVyaXNrQ29tcG9uZW50IiwgIkZvcm1Db250cm9sTGFiZWwiLCAiX3Nsb3RQcm9wcyR0eXBvZ3JhcGh5IiwgImNvbXBvbmVudHNQcm9wcyIsICJjb250cm9sIiwgImRpc2FibGVUeXBvZ3JhcGh5IiwgImxhYmVsUHJvcCIsICJyZXF1aXJlZFByb3AiLCAiY29udHJvbFByb3BzIiwgImZjcyIsICJ0eXBvZ3JhcGh5U2xvdFByb3BzIiwgIkZvcm1Db250cm9sTGFiZWxfZGVmYXVsdCIsICJnZXRGb3JtR3JvdXBVdGlsaXR5Q2xhc3MiLCAiZm9ybUdyb3VwQ2xhc3NlcyIsICJyb3ciLCAiRm9ybUdyb3VwUm9vdCIsICJGb3JtR3JvdXAiLCAiRm9ybUdyb3VwX2RlZmF1bHQiLCAiUmFkaW9CdXR0b25VbmNoZWNrZWRfZGVmYXVsdCIsICJSYWRpb0J1dHRvbkNoZWNrZWRfZGVmYXVsdCIsICJSYWRpb0J1dHRvbkljb25Sb290IiwgIlJhZGlvQnV0dG9uSWNvbkJhY2tncm91bmQiLCAiUmFkaW9CdXR0b25JY29uRG90IiwgIlJhZGlvQnV0dG9uSWNvbiIsICJSYWRpb0J1dHRvbkljb25fZGVmYXVsdCIsICJSYWRpb0dyb3VwQ29udGV4dCIsICJSYWRpb0dyb3VwQ29udGV4dF9kZWZhdWx0IiwgInVzZVJhZGlvR3JvdXAiLCAiZ2V0UmFkaW9VdGlsaXR5Q2xhc3MiLCAicmFkaW9DbGFzc2VzIiwgInJhZGlvQ2xhc3Nlc19kZWZhdWx0IiwgIlJhZGlvUm9vdCIsICJhcmVFcXVhbFZhbHVlcyIsICJSYWRpbyIsICJfZGVmYXVsdEljb24kcHJvcHMkZm8iLCAiX2RlZmF1bHRDaGVja2VkSWNvbiRwIiwgIm5hbWVQcm9wIiwgIm9uQ2hhbmdlUHJvcCIsICJyYWRpb0dyb3VwIiwgIlJhZGlvX2RlZmF1bHQiLCAiUmFkaW9Hcm91cCIsICJhY3Rpb25zIiwgInZhbHVlUHJvcCIsICJyb290UmVmIiwgInNldFZhbHVlU3RhdGUiLCAiUmFkaW9Hcm91cF9kZWZhdWx0IiwgIk5vZGUiLCAiZXhwYW5kYWJsZSIsICJleHBhbmRlZCIsICJoaWdobGlnaHQiLCAiaXNMYXN0IiwgIkVudGl0eVRyZWUiLCAic2VsZWN0ZWRFbnRpdHkiLCAib25OYXZpZ2F0ZVRvRW50aXR5IiwgIm9uTmF2aWdhdGVUb09udG9sb2d5IiwgIm5vZGVzV2l0aENoaWxkcmVuTG9hZGVkIiwgIm51bVBlbmRpbmdUcmVlUmVxdWVzdHMiLCAibWFudWFsbHlFeHBhbmRlZE5vZGVzIiwgInNob3dTaWJsaW5nc0VuYWJsZWQiLCAic2hvd0NvdW50c0VuYWJsZWQiLCAidG9nZ2xlTm9kZSIsICJpc0V4cGFuZGVkIiwgIm5vZGVzTWlzc2luZ0NoaWxkcmVuIiwgInByb21pc2VzIiwgInRvZ2dsZVNob3dPYnNvbGV0ZSIsICJ0b2dnbGVTaG93U2libGluZ3MiLCAidG9nZ2xlU2hvd0NvdW50cyIsICJyZW5kZXJOb2RlQ2hpbGRyZW4iLCAiY2hpbGRyZW5Db3B5IiwgInRpdGxlQSIsICJ0aXRsZUIiLCAiY2hpbGRyZW5Tb3J0ZWQiLCAiVHJlZUxpbmsiLCAidGl0bGUiLCAiZGVmaW5lZEJ5IiwgImRlZmluaW5nT250b2xvZ3kiLCAiU3Vic2NyaWJhYmxlIiwgImlzU2VydmVyIiwgIm5vb3AiLCAiZnVuY3Rpb25hbFVwZGF0ZSIsICJ1cGRhdGVyIiwgImlzVmFsaWRUaW1lb3V0IiwgImVuc3VyZVF1ZXJ5S2V5QXJyYXkiLCAidGltZVVudGlsU3RhbGUiLCAidXBkYXRlZEF0IiwgInN0YWxlVGltZSIsICJwYXJzZVF1ZXJ5QXJncyIsICJhcmcxIiwgImFyZzIiLCAiYXJnMyIsICJpc1F1ZXJ5S2V5IiwgInBhcnNlRmlsdGVyQXJncyIsICJtYXBRdWVyeVN0YXR1c0ZpbHRlciIsICJhY3RpdmUiLCAiaW5hY3RpdmUiLCAiaXNBY3RpdmUiLCAibWF0Y2hRdWVyeSIsICJmaWx0ZXJzIiwgImV4YWN0IiwgImZldGNoaW5nIiwgInF1ZXJ5S2V5IiwgInN0YWxlIiwgImhhc2hRdWVyeUtleUJ5T3B0aW9ucyIsICJwYXJ0aWFsTWF0Y2hLZXkiLCAicXVlcnlTdGF0dXNGaWx0ZXIiLCAibWF0Y2hNdXRhdGlvbiIsICJtdXRhdGlvbiIsICJtdXRhdGlvbktleSIsICJoYXNoUXVlcnlLZXkiLCAiaGFzaEZuIiwgInN0YWJsZVZhbHVlSGFzaCIsICJwYXJ0aWFsRGVlcEVxdWFsIiwgInJlcGxhY2VFcXVhbERlZXAiLCAiYVNpemUiLCAiYkl0ZW1zIiwgImJTaXplIiwgImVxdWFsSXRlbXMiLCAiaGFzT2JqZWN0UHJvdG90eXBlIiwgImN0b3IiLCAicHJvdCIsICJzbGVlcCIsICJyZXNvbHZlIiwgInNjaGVkdWxlTWljcm90YXNrIiwgImdldEFib3J0Q29udHJvbGxlciIsICJGb2N1c01hbmFnZXIiLCAiX1N1YnNjcmliYWJsZSIsICJfd2luZG93IiwgIl90aGlzJGNsZWFudXAiLCAic2V0dXAiLCAiX3RoaXMkY2xlYW51cDIiLCAiZm9jdXNNYW5hZ2VyIiwgIk9ubGluZU1hbmFnZXIiLCAib25PbmxpbmUiLCAib25saW5lIiwgIm9ubGluZU1hbmFnZXIiLCAiZGVmYXVsdFJldHJ5RGVsYXkiLCAiZmFpbHVyZUNvdW50IiwgImlzQ2FuY2VsYWJsZSIsICJDYW5jZWxsZWRFcnJvciIsICJpc0NhbmNlbGxlZEVycm9yIiwgIlJldHJ5ZXIiLCAiY2FuY2VsUmV0cnkiLCAiY2FuY2VsRm4iLCAiY29udGludWVGbiIsICJwcm9taXNlUmVzb2x2ZSIsICJwcm9taXNlUmVqZWN0IiwgImNhbmNlbE9wdGlvbnMiLCAib3V0ZXJSZXNvbHZlIiwgIm91dGVyUmVqZWN0IiwgInBhdXNlIiwgImNvbnRpbnVlUmVzb2x2ZSIsICJydW4iLCAicHJvbWlzZU9yVmFsdWUiLCAiX2NvbmZpZyRyZXRyeSIsICJfY29uZmlnJHJldHJ5RGVsYXkiLCAicmV0cnkiLCAicmV0cnlEZWxheSIsICJzaG91bGRSZXRyeSIsICJOb3RpZnlNYW5hZ2VyIiwgIl90aGlzMyIsICJxdWV1ZSIsICJub3RpZnlNYW5hZ2VyIiwgImxvZ2dlciIsICJnZXRMb2dnZXIiLCAic2V0TG9nZ2VyIiwgIm5ld0xvZ2dlciIsICJRdWVyeSIsICJfdGhpcyRvcHRpb25zJGNhY2hlVGkiLCAiX3RoaXMkb3B0aW9ucyRpc0RhdGFFIiwgIl90aGlzJG9wdGlvbnMiLCAicHJldkRhdGEiLCAiZGF0YSIsICJzZXRTdGF0ZU9wdGlvbnMiLCAiX3RoaXMkcmV0cnllciIsICJfdGhpcyRyZXRyeWVyMiIsICJfdGhpcyRyZXRyeWVyMyIsICJmZXRjaE9wdGlvbnMiLCAiX3RoaXMkb3B0aW9ucyRiZWhhdmlvIiwgIl9jb250ZXh0JGZldGNoT3B0aW9ucyIsICJfYWJvcnRDb250cm9sbGVyJGFib3IiLCAiX3RoaXMkcmV0cnllcjQiLCAicXVlcnlGbkNvbnRleHQiLCAiZmV0Y2hGbiIsICJfdGhpcyRvcHRpb25zJGJlaGF2aW8yIiwgIl9jb250ZXh0JGZldGNoT3B0aW9uczIiLCAiaGFzSW5pdGlhbERhdGEiLCAiaW5pdGlhbERhdGFVcGRhdGVkQXQiLCAiaGFzRGF0YSIsICJfYWN0aW9uJG1ldGEiLCAiX2FjdGlvbiRkYXRhVXBkYXRlZEF0IiwgIlF1ZXJ5Q2FjaGUiLCAiY2xpZW50IiwgIl9vcHRpb25zJHF1ZXJ5SGFzaCIsICJxdWVyeUhhc2giLCAicXVlcnlJbk1hcCIsICJfcGFyc2VGaWx0ZXJBcmdzIiwgIl9wYXJzZUZpbHRlckFyZ3MyIiwgIl90aGlzNCIsICJfdGhpczUiLCAiTXV0YXRpb24iLCAiZ2V0RGVmYXVsdFN0YXRlIiwgInJlc3RvcmVkIiwgIl90aGlzJG9wdGlvbnMkcmV0cnkiLCAiTXV0YXRpb25DYWNoZSIsICJwYXVzZWRNdXRhdGlvbnMiLCAiaW5maW5pdGVRdWVyeUJlaGF2aW9yIiwgIl9jb250ZXh0JGZldGNoT3B0aW9uczMiLCAiX2NvbnRleHQkZmV0Y2hPcHRpb25zNCIsICJfY29udGV4dCRzdGF0ZSRkYXRhIiwgIl9jb250ZXh0JHN0YXRlJGRhdGEyIiwgInJlZmV0Y2hQYWdlIiwgImZldGNoTW9yZSIsICJwYWdlUGFyYW0iLCAiaXNGZXRjaGluZ05leHRQYWdlIiwgImlzRmV0Y2hpbmdQcmV2aW91c1BhZ2UiLCAib2xkUGFnZXMiLCAib2xkUGFnZVBhcmFtcyIsICJhYm9ydFNpZ25hbCIsICJuZXdQYWdlUGFyYW1zIiwgInF1ZXJ5Rm4iLCAiYnVpbGROZXdQYWdlcyIsICJwYWdlcyIsICJmZXRjaFBhZ2UiLCAibWFudWFsIiwgInF1ZXJ5Rm5SZXN1bHQiLCAicHJvbWlzZUFzQW55IiwgImdldE5leHRQYWdlUGFyYW0iLCAiX21hbnVhbCIsICJfcGFyYW0iLCAiZ2V0UHJldmlvdXNQYWdlUGFyYW0iLCAic2hvdWxkRmV0Y2hGaXJzdFBhZ2UiLCAiX2xvb3AiLCAic2hvdWxkRmV0Y2hOZXh0UGFnZSIsICJfcGFyYW0yIiwgImZpbmFsUHJvbWlzZSIsICJmaW5hbFByb21pc2VBc0FueSIsICJRdWVyeUNsaWVudCIsICJfdGhpcyR1bnN1YnNjcmliZUZvY3UiLCAiX3RoaXMkdW5zdWJzY3JpYmVPbmxpIiwgIl90aGlzJHF1ZXJ5Q2FjaGUkZmluZCIsICJxdWVyeUtleU9yRmlsdGVycyIsICJwYXJzZWRPcHRpb25zIiwgImRlZmF1bHRlZE9wdGlvbnMiLCAiX3RoaXMkcXVlcnlDYWNoZSRmaW5kMiIsICJxdWVyeUNhY2hlIiwgIl9wYXJzZUZpbHRlckFyZ3MzIiwgInJlZmV0Y2hGaWx0ZXJzIiwgIl9wYXJzZUZpbHRlckFyZ3M0IiwgIl9wYXJzZUZpbHRlckFyZ3M0JCIsICJfcmVmMyIsICJfZmlsdGVycyRyZWZldGNoQWN0aXYiLCAiX2ZpbHRlcnMkcmVmZXRjaEluYWN0IiwgIl9wYXJzZUZpbHRlckFyZ3M1IiwgIl90aGlzNiIsICJfcGFyc2VGaWx0ZXJBcmdzNiIsICJfdGhpczciLCAiX3RoaXMkcXVlcnlEZWZhdWx0cyRmIiwgIl90aGlzJG11dGF0aW9uRGVmYXVsdCIsICJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsICJSZWFjdERPTSIsICJkZWZhdWx0Q29udGV4dCIsICJRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0IiwgImdldFF1ZXJ5Q2xpZW50Q29udGV4dCIsICJjb250ZXh0U2hhcmluZyIsICJRdWVyeUNsaWVudFByb3ZpZGVyIiwgIl9yZWYkY29udGV4dFNoYXJpbmciLCAiQ29udGV4dCIsICJjcmVhdGVFbnRpdHlUcmVlIiwgIkVudGl0eVRyZWVXaWRnZXQiLCAicXVlcnlDbGllbnQiLCAiRW50aXR5VHJlZVdpZGdldElubmVyIiwgImxvYWRpbmdPbnRvbG9neSIsICJsb2FkaW5nRW50aXR5IiwgImxvYWRpbmdDbGFzc0luc3RhbmNlcyIsICJoYW5kbGVOYXZpZ2F0ZVRvRW50aXR5IiwgImhhbmRsZU5hdmlnYXRlVG9PbnRvbG9neSIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAieCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJERUZBVUxUX0hBU19USVRMRSIsICJvbnRvbG9neSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJyZW5kZXIiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJyZW5kZXIiLCAiZGF0YSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJub2RlIiwgImIiLCAiY3ljbGVDaGVjayIsICJjeWNsZUNoZWNrIiwgIm5vZGUiLCAiYiIsICJSZWFjdCIsICJ4IiwgIm5vZGUiLCAiaGllcmFyY2h5IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgIk1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkiLCAiUmVhY3QiLCAicmVuZGVyIiwgImRhdGEiLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAicGFnZUluZGV4IiwgInBhZ2VTaXplIiwgInNvcnRGaWVsZCIsICJzb3J0RGlyZWN0aW9uIiwgInBhZ2VPZkl0ZW1zIiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgInNlYXJjaFZhbHVlIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TIiwgInJlbmRlciIsICJvcHRpb24iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiREVGQVVMVF9IQVNfVElUTEUiLCAiUmVhY3QiLCAicHJvcGVydHkiLCAicHJlZGljYXRlcyIsICJlbnRpdHkiLCAiaW5zdGFuY2VzIiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIm5vZGUiLCAiZGF0YSIsICJpc1BvcG92ZXJPcGVuIiwgIlJlYWN0IiwgIlJlYWN0RE9NIl0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci90cmFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQm9vbGVhbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNOYU4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL251bWVyYWwvbnVtZXJhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weU9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25Jbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weVN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9sc0luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXNJbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUFycmF5QnVmZmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lRGF0YVZpZXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVSZWdFeHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xhc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5zZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2N1c3RvbU9taXRDbG9uZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0ZsYXR0ZW5hYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZsYXRSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVxdWlyZXMtcG9ydC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmdpZnkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VybC1wYXJzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtaW5wdXQtYXV0b3NpemUvbGliL0F1dG9zaXplSW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wYXRoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wdXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9leHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2h0bWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5mb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC1hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wucmVwbGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc3BlY2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGxpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC51bnNjb3BhYmxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb20taXRlcmFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3N5bWJvbC9pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvc3ltYm9sL3RvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZnVuY3Rpb24vdmlydHVhbC9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3JlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZsYXR0ZW4taW50by1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZsYXQtbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9mbGF0LW1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtcGlwZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvaW5zdGFuY2UvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheVdpdGhvdXRIb2xlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0Lm93bi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3Qvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3JlZmxlY3Qvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3JlZmxlY3Qvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3Qva2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zcGxpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2Fzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2Fzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2Fzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvanNvbi9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2pzb24vc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtYnVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtaW50ZXJ2YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuc2V0LXRpbWVvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3NldC10aW1lb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvbXBvbmVudC1lbWl0dGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGVnanMvaGFtbWVyanMvZGlzdC9oYW1tZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdmlzLXV0aWwvZXNuZXh0L2VzbS92aXMtdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3QvY29uc3RydWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9yZWZsZWN0L2NvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvcmVmbGVjdC9jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3IuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1pbnN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdGFzay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MtcGViYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9taWNyb3Rhc2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3Nlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmVqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLnJlc29sdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC1zZXR0bGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLndpdGgtcmVzb2x2ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnByb21pc2UudHJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvcHJvbWlzZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2Z1bGwvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvcmVnZW5lcmF0b3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZyZWV6aW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvbWFwL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9tYXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9lbnRyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2VudHJpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcm5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9uYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLWludGVyZmFjZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL3F1ZXVlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zZXQtcGFydC50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnNldC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zZXQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3NldC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc3RyZWFtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXZpZXcudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC1jaGVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtdmlldy1jaGVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mYWlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2N1bWVudC1hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdWlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1hc3NpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9hc3NpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW50cnktdmlydHVhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9mdW5jdGlvbi92aXJ0dWFsL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvc2hhcGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29tcG9uZW50LWVtaXR0ZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2h0bWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb20taXRlcmFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5mb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL3N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2NvbmNhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuZGF0ZS5ub3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZGF0ZS9ub3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9pbmNsdWRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ub3QtYS1yZWdleHAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3N0cmluZy92aXJ0dWFsL2luY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2luY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9pbmNsdWRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnBhcnNlLWludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9wYXJzZS1pbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmRleC1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luZGV4LW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2luZGV4LW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9pbmRleC1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvanNvbi9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1idW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC1pbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZpbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BlZ2pzL2hhbW1lcmpzL2Rpc3QvaGFtbWVyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9maWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWxsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvdmlzLXV0aWwvZXNuZXh0L2VzbS92aXMtdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvZG90cGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9nZXBoaVBhcnNlci50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbG9jYWxlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvQ2FjaGVkSW1hZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL0ltYWdlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnJlZXppbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1pbnN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMubWFwLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL21hcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9Hcm91cHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5udW1iZXIuaXMtbmFuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL251bWJlci9pcy1uYW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL251bWJlci1pcy1maW5pdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5udW1iZXIuaXMtZmluaXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL251bWJlci9pcy1maW5pdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc29tZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9udW1iZXItcGFyc2UtZmxvYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wYXJzZS1mbG9hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9wYXJzZS1mbG9hdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3NoYXJlZC9Db21wb25lbnRVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9zaGFyZWQvTGFiZWxBY2N1bXVsYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3NoYXJlZC9MYWJlbFNwbGl0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvc2hhcmVkL0xhYmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvcmVmbGVjdC9jb25zdHJ1Y3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvaW5zdGFuY2UvYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3V0aWwvTm9kZUJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvQm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvdXRpbC9DaXJjbGVJbWFnZUJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvQ2lyY2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0NpcmN1bGFySW1hZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy91dGlsL1NoYXBlQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9DdXN0b21TaGFwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9EYXRhYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9EaWFtb25kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0RvdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9FbGxpcHNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0ljb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvSW1hZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvU3F1YXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL0hleGFnb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9zaGFwZXMvU3Rhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL25vZGVzL3NoYXBlcy9UZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL1RyaWFuZ2xlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvbm9kZXMvc2hhcGVzL1RyaWFuZ2xlRG93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL05vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvTm9kZXNIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1kYXRhLWRlc2NyaXB0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0LmdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9yZWZsZWN0L2dldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zdXBlclByb3BCYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMubWF0aC5oeXBvdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9tYXRoL2h5cG90LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvZWRnZXMvdXRpbC9lbmQtcG9pbnRzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvZWRnZXMvdXRpbC9lZGdlLWJhc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy91dGlsL2Jlemllci1lZGdlLWJhc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy9iZXppZXItZWRnZS1keW5hbWljLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvZWRnZXMvYmV6aWVyLWVkZ2Utc3RhdGljLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvZWRnZXMvdXRpbC9jdWJpYy1iZXppZXItZWRnZS1iYXNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvZWRnZXMvY3ViaWMtYmV6aWVyLWVkZ2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9lZGdlcy9zdHJhaWdodC1lZGdlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvRWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9FZGdlc0hhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL0Jhcm5lc0h1dFNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvUmVwdWxzaW9uU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9IaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL1NwcmluZ1NvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvcGh5c2ljcy9DZW50cmFsR3Jhdml0eVNvbHZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL3BoeXNpY3MvRkEyQmFzZWRSZXB1bHNpb25Tb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9waHlzaWNzL0ZBMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvUGh5c2ljc0VuZ2luZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9ybmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL25hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92NC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvTmV0d29ya1V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9ub2Rlcy9DbHVzdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL0NsdXN0ZXJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvQ2FudmFzUmVuZGVyZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3NldC1pbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL2hhbW1lclV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvQ2FudmFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL1ZpZXcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvdmlldy1oYW5kbGVyL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMva2V5Y2hhcm0vc3JjL2tleWNoYXJtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2NvbXBvbmVudHMvTmF2aWdhdGlvbkhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvSW50ZXJhY3Rpb25IYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc2V0LmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3NldC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY29sbGVjdGlvbi13ZWFrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMud2Vhay1tYXAuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvd2Vhay1tYXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvc2VsZWN0aW9uL3NlbGVjdGlvbi1hY2N1bXVsYXRvci50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9TZWxlY3Rpb25IYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS13ZWJraXQtdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvY29tcG9uZW50cy9EaXJlY3Rpb25TdHJhdGVneS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmV2ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZXZlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZXZlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2V2ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL2xheW91dC1lbmdpbmUvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1uZXR3b3JrL2xpYi9uZXR3b3JrL21vZHVsZXMvTGF5b3V0RW5naW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvbmV0d29yay9tb2R1bGVzL01hbmlwdWxhdGlvblN5c3RlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvb3B0aW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9jb21wb25lbnRzL2FsZ29yaXRobXMvRmxveWRXYXJzaGFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbW9kdWxlcy9LYW1hZGFLYXdhaS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvTmV0d29yay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLW5ldHdvcmsvbGliL25ldHdvcmsvbG9jYWxlLXV0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtbmV0d29yay9saWIvZW50cnktZXNuZXh0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mYWlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2N1bWVudC1hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdWlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hbi1vYmplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2h0bWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5mb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC1hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wucmVwbGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wuc3BlY2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC5zcGxpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN5bWJvbC51bnNjb3BhYmxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb20taXRlcmFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5hc3luYy1kaXNwb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvc3ltYm9sL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mdWxsL3N5bWJvbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9zeW1ib2wvaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZnVuY3Rpb24vdmlydHVhbC9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXJlZHVjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZWR1Y2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmVkdWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZsYXR0ZW4taW50by1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmxhdC1tYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXBpcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvYXJyYXkvZnJvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvYXJyYXkvaXMtYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvaW5zdGFuY2Uvc2xpY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2FycmF5L2Zyb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9zeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9jb25jYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvY29uY2F0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9zbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0Lm93bi1rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3JlZmxlY3Qvb3duLWtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2FycmF5L2lzLWFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JldmVyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc3BsaWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NwbGljZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2Fzc2lnbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9qc29uL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvanNvbi9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1idW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvd2ViLnNldC1pbnRlcnZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5zZXQtdGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb21wb25lbnQtZW1pdHRlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BlZ2pzL2hhbW1lcmpzL2Rpc3QvaGFtbWVyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3Zpcy11dGlsL2VzbmV4dC9lc20vdmlzLXV0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5yZWZsZWN0LmNvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9yZWZsZWN0L2NvbnN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9jcmVhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2FjdHVhbC9pbnN0YW5jZS9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy90eXBlb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5jb25zdHJ1Y3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Rhc2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9xdWV1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbWljcm90YXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3Nlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5hbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmFueS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXNuZXh0LnByb21pc2Uud2l0aC1yZXNvbHZlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvYWN0dWFsL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lc25leHQucHJvbWlzZS50cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZnVsbC9wcm9taXNlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3Byb21pc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9hY3R1YWwvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9mcmVlemluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvbGxlY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMubWFwLmNvbnN0cnVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL21hcC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9zb21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3NvbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc29ydC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc3ltYm9sL2l0ZXJhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZW50cmllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9lbnRyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3JuZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9zdHJpbmdpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvbmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3Y0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1pbnRlcmZhY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9xdWV1ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc2V0LXBhcnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zZXQuY29uc3RydWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvc2V0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2dldC1pdGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtc3RyZWFtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy92aXMtZGF0YS9zcmMvZGF0YS1zZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXZpZXcudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3Zpcy1kYXRhL3NyYy9kYXRhLXNldC1jaGVjay50cyIsICIuLi9ub2RlX21vZHVsZXMvdmlzLWRhdGEvc3JjL2RhdGEtdmlldy1jaGVjay50cyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0F1dG9jb21wbGV0ZVdpZGdldC9BdXRvY29tcGxldGVXaWRnZXQudHN4IiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL251bGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9Gb3JtRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9CbG9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2NvbW1vbi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zSGVhZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90aHJvdHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2J1aWxkRnVsbFBhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21wb3NlU2lnbmFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdHJhY2tTdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9mZXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwgIi4uL3NyYy9tb2RlbC9Nb2RlbFR5cGVDaGVjay50cyIsICIuLi9zcmMvYXBwL3V0aWwudHMiLCAiLi4vc3JjL21vZGVsL1JlaWZpZWQudHMiLCAiLi4vc3JjL21vZGVsL0xpbmtlZEVudGl0aWVzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNUaGluZy50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzRW50aXR5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNDbGFzcy50cyIsICIuLi9zcmMvbW9kZWwvb2xzMy1tb2RlbC9PTFMzUHJvcGVydHkudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM0luZGl2aWR1YWwudHMiLCAiLi4vc3JjL21vZGVsL29sczMtbW9kZWwvT0xTM09udG9sb2d5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMzLW1vZGVsL09MUzNPbnRvbG9naWVzLnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRUaGluZy50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0RW50aXR5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHM0LW1vZGVsL09MUzRDbGFzcy50cyIsICIuLi9zcmMvbW9kZWwvb2xzNC1tb2RlbC9PTFM0UHJvcGVydHkudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNEluZGl2aWR1YWwudHMiLCAiLi4vc3JjL21vZGVsL29sczQtbW9kZWwvT0xTNE9udG9sb2d5LnRzIiwgIi4uL3NyYy9tb2RlbC9Nb2RlbE9iamVjdENyZWF0b3IudHMiLCAiLi4vc3JjL21vZGVsL2ludGVyZmFjZXMvSGllcmFyY2h5LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMtbW9kZWwvT0xTU2VsZWN0LnRzIiwgIi4uL3NyYy9tb2RlbC9vbHMtbW9kZWwvT0xTU2VsZWN0UmVzdWx0LnRzIiwgIi4uL3NyYy9tb2RlbC90czRuZmRpLW1vZGVsL1RzNG5mZGlTZWFyY2hSZXN1bHQudHMiLCAiLi4vc3JjL2FwaS9PbHNBcGkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2FjY2Vzc2liaWxpdHkvc2NyZWVuX3JlYWRlcl9saXZlL3NjcmVlbl9yZWFkZXJfbGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYWNjZXNzaWJpbGl0eS9zY3JlZW5fcmVhZGVyX29ubHkvc2NyZWVuX3JlYWRlcl9vbmx5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tZWxlbWVudC01NDg2YzUxYy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc2hlZXQvZGlzdC9lbW90aW9uLXNoZWV0LmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9FbnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1V0aWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL01pZGRsZXdhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9lbW90aW9uLW1lbW9pemUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2Vtb3Rpb24tY2FjaGUuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvZW1vdGlvbi11dGlscy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MvZGlzdC9lbW90aW9uLXVzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS9jbG9uZV9lbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfb25seS9zY3JlZW5fcmVhZGVyX29ubHkuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy90YWJiYWJsZS9zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9jYXNjYWRpbmdfbWVudV9rZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcm5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcmVnZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92YWxpZGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1icm93c2VyL3YxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9odG1sX2lkX2dlbmVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2FsaWdubWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tbW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JyZWFrcG9pbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L2JyZWFrcG9pbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icmVha3BvaW50L2N1cnJlbnRfYnJlYWtwb2ludC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL2NvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3RoZW1lL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvaXNfY29sb3JfZGFyay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2lzX3ZhbGlkX2hleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9saW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9jbGlwX3JnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy90eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL3VucGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9sYXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2lucHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL0NvbG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3ZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvY2hyb21hLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2NteWsvY215azJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vY215ay9yZ2IyY215ay5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9jbXlrL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2Nzcy9oc2wyY3NzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzbC9yZ2IyaHNsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2Nzcy9yZ2IyY3NzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzbC9oc2wycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2Nzcy9jc3MycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2Nzcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9nbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oY2cvaGNnMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oY2cvcmdiMmhjZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oY2cvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaGV4L2hleDJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaGV4L3JnYjJoZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaGV4L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzaS9oc2kycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzaS9yZ2IyaHNpLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2hzaS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9oc2wvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHN2L2hzdjJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHN2L3JnYjJoc3YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vaHN2L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xhYi9sYWItY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xhYi9sYWIycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xhYi9yZ2IybGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL2xhYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvbGNoMmxhYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvbGNoMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvaGNsMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvbGFiMmxjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvcmdiMmxjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9sY2gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvY29sb3JzL3czY3gxMS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9uYW1lZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9udW0vbnVtMnJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9udW0vcmdiMm51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9udW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vcmdiL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL3RlbXAvdGVtcGVyYXR1cmUycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL3RlbXAvcmdiMnRlbXBlcmF0dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL3RlbXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsYWIvb2tsYWIycmdiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGFiL3JnYjJva2xhYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xhYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pby9va2xjaC9va2xjaDJyZ2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW8vb2tsY2gvcmdiMm9rbGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2lvL29rbGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9hbHBoYS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvY2xpcHBlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvZGFya2VuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9nZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL2x1bWluYW5jZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL21peC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvbWl4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL29wcy9wcmVtdWx0aXBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvc2F0dXJhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvb3BzL3NldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9vcHMvc2hhZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL3JnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvbHJnYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvbGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9faHN4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9sY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL251bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvaGNnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9oc2kuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvaW50ZXJwb2xhdG9yL2hzbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3IvaHN2LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2ludGVycG9sYXRvci9va2xhYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy9pbnRlcnBvbGF0b3Ivb2tsY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL2F2ZXJhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL3NjYWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2dlbmVyYXRvci9iZXppZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL2JsZW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2dlbmVyYXRvci9jdWJlaGVsaXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvZ2VuZXJhdG9yL3JhbmRvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL3NyYy91dGlscy9hbmFseXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2NvbnRyYXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL3V0aWxzL2RlbHRhLWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvZGlzdGFuY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvdmFsaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nocm9tYS1qcy9zcmMvdXRpbHMvc2NhbGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaHJvbWEtanMvc3JjL2NvbG9ycy9jb2xvcmJyZXdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvY29sb3IvY29sb3JfcGFsZXR0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2V1aV9wYWxldHRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL21hbmlwdWxhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2NvbG9yL2NvbnRyYXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2NvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19hbmltYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvbG9naWNhbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMvc2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL2Z1bmN0aW9ucy90eXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3NpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fYm9yZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19sZXZlbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL3ZhcmlhYmxlcy9fdHlwb2dyYXBoeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zdGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL3RoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdGhlbWUvaG9va3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy90aGVtZS9wcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3Rocm90dGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvYnJlYWtwb2ludC9jdXJyZW50X2JyZWFrcG9pbnRfaG9vay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2JyZWFrcG9pbnQvdXNlSXNXaXRoaW5CcmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL2ZpbmRFbGVtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2NvbW1vbl9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcHJlZGljYXRlL2xvZGFzaF9wcmVkaWNhdGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9ib29sZWFuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9kYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvZm9ybWF0L2Zvcm1hdF9udW1iZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9mb3JtYXQvZm9ybWF0X2F1dG8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy91cmwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zZWN1cml0eS9nZXRfc2VjdXJlX3JlbF9mb3JfdGFyZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvc29ydC9zb3J0X2RpcmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL29iamVjdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9zb3J0L2NvbXBhcmF0b3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvcG9wb3Zlci9wb3BvdmVyX3Bvc2l0aW9uaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvdHJhbnNpdGlvbi90cmFuc2l0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvc2VydmljZXMvaG9va3MvdXNlQ29tYmluZWRSZWZzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vX2J1dHRvbl9jb250ZW50X2RlcHJlY2F0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FjY2Vzc2liaWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FnZ3JlZ2F0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYWxlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FuYWx5emVFdmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5hbHl6ZV9ldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYW5ub3RhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBtX3RyYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYWRkX2RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2FnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYXBtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2F1ZGl0YmVhdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2NhbnZhcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Nhc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfY29kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2NvbnNvbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZGFzaGJvYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZGV2dG9vbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9kaXNjb3Zlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2Vtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2ZpbGViZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfZmxlZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9naXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9ncmFwaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2dyb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9oZWFydGJlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2luZGV4X3JvbGx1cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX2xlbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9sb2dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbWFuYWdlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX21ldHJpY2JlYXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tZXRyaWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9tb25pdG9yaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfbm90ZWJvb2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9wYWNrZXRiZWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9yZXBvcnRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfc2VjdXJpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zcGFjZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF9zcWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF90aW1lbGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdXB0aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF92aXN1YWxpemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2FwcF93YXRjaGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcHBfd29ya3BsYWNlX3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXBwcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXJyb3dFbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93U3RhcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93X2Rvd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93X2xlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Fycm93X3JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9hcnJvd191cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYXN0ZXJpc2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2JlYWtlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYmVsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYmVsbFNsYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ib2x0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ib3hlc192ZXJ0aWNhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnJhbmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icmFuY2hVc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9icm9vbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnJ1c2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2J1Zy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvYnVsbHNleWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NhbGVuZGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jaGVjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2hlY2tJbkNpcmNsZUZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY2hlZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nsb2NrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZERyaXp6bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nsb3VkU3Rvcm15LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbG91ZFN1bm55LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jbHVzdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29tcHV0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29uc29sZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY29udGFpbmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QWJvdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZUJlbG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jb3B5X2NsaXBib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3Jvc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Nyb3NzSW5BQ2lyY2xlRmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jcm9zc2hhaXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9jdXJyZW5jeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvY3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kYXRhYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZGVza3RvcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG9jdW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvY3VtZW50RWRpdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG9jdW1lbnRhdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG9jdW1lbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9kb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2RvdWJsZUFycm93TGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZG93bmxvYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkJvdHRvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQ2VudGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25NaWRkbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvckl0ZW1BbGlnblJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tTGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JQb3NpdGlvblRvcFJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYWxpZ25fY2VudGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2FsaWduX3JpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfYm9sZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2NvZGVfYmxvY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9jb21tZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2l0YWxpYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZWRpdG9yX2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl9yZWRvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3Jfc3RyaWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl91bmRlcmxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VkaXRvcl91bmRvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2VtYWlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lbXB0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9lcmFzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V4aXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V4cGFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhwYW5kTWluaS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZXhwb3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9leWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2V5ZV9jbG9zZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZhY2VfaGFwcHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZhY2VfbmV1dHJhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmFjZV9zYWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZmxhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZm9sZGVyX2NoZWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mb2xkZXJfZXhjbGFtYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZvbGRlcl9vcGVuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mcmFtZU5leHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ZyYW1lUHJldmlvdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2Z1bGxTY3JlZW5FeGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dlYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dsb2JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ncmFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ncmFiX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2dyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2hlYXJ0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWF0bWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9oZWxwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9ob21lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pSW5DaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2ltYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbXBvcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2luZGV4X2Nsb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9lZGl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbmRleF9mbHVzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfbWFwcGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfb3Blbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfcnVudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvaW5kZXhfc2V0dGluZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lucHV0T3V0cHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnNwZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9pbnZlcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2lwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rZXlib2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3FsX2ZpZWxkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfZnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF9vcGVyYW5kLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2txbF92YWx1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMva3ViZXJuZXRlc05vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xheWVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbGV0dGVyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saW5lRGFzaGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saW5lRG90dGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9saW5lU29saWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xpc3RfYWRkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2NrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2NrT3Blbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19hZXJvc3Bpa2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYXBhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2FwcF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYXdzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F6dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2F6dXJlX21vbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYmVhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fYnVzaW5lc3NfYW5hbHl0aWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NlcGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY2xvdWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY2xvdWRfZWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2NvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fY291Y2hiYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2RvY2tlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2VsYXN0aWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZWxhc3RpY19zdGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2VudGVycHJpc2Vfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2V0Y2QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ2NwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2djcF9tb25vLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2dpdGh1Yi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nbWFpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19nb2xhbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fZ29vZ2xlX2cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29faGFwcm94eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19pYm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29faWJtX21vbm8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fa2Fma2EuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fa2liYW5hLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX2t1YmVybmV0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19sb2dzdGFzaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tYXBzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19tZXRyaWNzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX21vbmdvZGIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbXlzcWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fbmdpbnguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fb2JzZXJ2YWJpbGl0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3BocC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19wb3N0Z3Jlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3JhYmJpdG1xLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3JlZGlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3NpdGVfc2VhcmNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3NrZXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb19zbGFjay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb191cHRpbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ29fd2ViaG9vay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nb193aW5kb3dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dvX3dvcmtwbGFjZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX2ZpbHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbG9nc3Rhc2hfaWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX2lucHV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9sb2dzdGFzaF9vdXRwdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tYWduZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25pZnlXaXRoRXhjbGFtYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25pZnlXaXRoTWludXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21hZ25pZnlXaXRoUGx1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWFwX21hcmtlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVtb3J5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZW51RG93bi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudUxlZnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21lbnVSaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWVudVVwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWluaW1pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21pbnVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9taW51c19pbl9jaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21pbnVzX2luX2NpcmNsZV9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NsYXNzaWZpY2F0aW9uX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfY3JlYXRlX211bHRpX21ldHJpY19qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX2NyZWF0ZV9wb3B1bGF0aW9uX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9tbF9kYXRhX3Zpc3VhbGl6ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21sX291dGxpZXJfZGV0ZWN0aW9uX2pvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL21vYmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbW9vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvbmFtZXNwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9uZXN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL251bWJlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvb2ZmbGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvb25saW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWNrYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWdlU2VsZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYWdlc1NlbGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGFpbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhcGVyX2NsaXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhcnRpYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BhdXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wYXltZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wZW5jaWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BlcmNlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Bpbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGluX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGxheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGxheUZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGx1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3BsdXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcG9wb3V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9wdXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9xdWVzdGlvbl9pbl9jaXJjbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3F1b3RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZWZyZXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9yZXBvcnRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvcmV0dXJuX2tleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2F2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2NhbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlYXJjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NoYXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zaGFyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc25vd2ZsYWtlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0TGVmdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc29ydFJpZ2h0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zb3J0X2Rvd24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRfdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3NvcnRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyUGx1c0ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9lbXB0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3Rhcl9maWxsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0YXJfZmlsbGVkX3NwYWNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdGFyX21pbnVzX2ZpbGxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3RhdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3AuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N0b3BfZmlsbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdG9wX3NsYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdG9yYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zdHJpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N1Ym1vZHVsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvc3VuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy9zd2F0Y2hfaW5wdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3N5bWxpbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFibGVfZGVuc2l0eV9jb21wYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2V4cGFuZGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90ZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdGltZVJlZnJlc2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RpbWVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90aW1lc2xpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFsaWFzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkFubm90YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQmluYXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkJvb2xlYW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ2xhc3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuQ29tcGxldGlvblN1Z2dlc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Db25zdGFudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5EYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkRlbnNlVmVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuRW51bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5FbnVtTWVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkV2ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GaWVsZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GaWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5GdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5HZW8uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbklQLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbkludGVyZmFjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5Kb2luLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbktleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5LZXl3b3JkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5NZXRyaWNDb3VudGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk1ldHJpY0dhdWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5OYW1lc3BhY2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTmVzdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk51bGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuTnVtYmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlbk9iamVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5QYWNrYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblBhcmFtZXRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblJhbmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5SZXBvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU2hhcGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblN0cnVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5TeW1ib2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuVGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy90b2tlblRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Rva2VuVG9rZW5Db3VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdG9rZW5WYXJpYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdHJhaW5pbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3RyYXNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy91bmZvbGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3VubGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlckF2YXRhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdXNlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3ZlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlkZW9QbGF5ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19hcmVhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYXJlYV9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX2hvcml6b250YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfYmFyX3ZlcnRpY2FsX3N0YWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19nYXVnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9hc3NldHMvdmlzX2dvYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19saW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc19tYXBfcmVnaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfbWV0cmljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfcGllLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190YWdfY2xvdWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc190ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdGltZWxpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3Zpc192ZWdhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vYXNzZXRzL3dvcmRXcmFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93b3JkV3JhcERpc2FibGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2Fzc2V0cy93cmVuY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ljb24vaWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaWNvbi9pY29uX21hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3JlYWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL25hbWVkX2NvbG9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L2dsb2JhbF9zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX2NvbG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL19oZWxwZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL19wYWRkaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvZ2xvYmFsX3N0eWxpbmcvbWl4aW5zL19zdGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX3R5cG9ncmFwaHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvYW5pbWF0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L3Jlc2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pY29uL2ljb24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pMThuL2kxOG4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbnRleHQvY29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaTE4bi9pMThuX3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xvYWRpbmcvX2xvYWRpbmdfc3RyaW5ncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbG9hZGluZy9sb2FkaW5nX3NwaW5uZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZ19zcGlubmVyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9yZXNpemVfb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vYnNlcnZlci9vYnNlcnZlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9saW5rL2xpbmsuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90aXRsZS90aXRsZS5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dC5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RleHQvdGV4dF9jb2xvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0X2NvbG9yLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGV4dC90ZXh0X2FsaWduLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90ZXh0L3RleHRfYWxpZ24uc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9idXR0b24vYnV0dG9uX2VtcHR5L2J1dHRvbl9lbXB0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9pY29uL2J1dHRvbl9pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbm5lcl90ZXh0L2lubmVyX3RleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXZpcnR1YWxpemVkLWF1dG8tc2l6ZXIvZGlzdC9yZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYXV0b19zaXplci9hdXRvX3NpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYWRnZS9iYWRnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29sb3JfcGlja2VyL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYWRnZS9iZXRhX2JhZGdlL2JldGFfYmFkZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Rvb2xfdGlwL3Rvb2xfdGlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3J0YWwvcG9ydGFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC90b29sX3RpcF9wb3BvdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90b29sX3RpcC9pY29uX3RpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NoYWRvd3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucy9zaGFkb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2xpbmsvbGluay5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9jdXNfdHJhcC9mb2N1c190cmFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vZGlzdC9lczIwMTUvQ29tYmluYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L1VJLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9VSS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2UtY2FsbGJhY2stcmVmL2Rpc3QvZXMyMDE1L2Fzc2lnblJlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXNlLWNhbGxiYWNrLXJlZi9kaXN0L2VzMjAxNS91c2VSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1jYWxsYmFjay1yZWYvZGlzdC9lczIwMTUvdXNlTWVyZ2VSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1zaWRlY2FyL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwgIi4uL25vZGVfbW9kdWxlcy91c2Utc2lkZWNhci9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VzZS1zaWRlY2FyL2Rpc3QvZXMyMDE1L2V4cG9ydHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsL2Rpc3QvZXMyMDE1L21lZGl1bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9Mb2NrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9Gb2N1c0d1YXJkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L21lZGl1bS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9zY29wZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L1VJLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9tZWRpdW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvVHJhcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1jbGllbnRzaWRlLWVmZmVjdC9saWIvaW5kZXguZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvYXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvaXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvdGFiT3JkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvdGFiYmFibGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL3RhYlV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL0RPTXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2FsbC1hZmZlY3RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9zYWZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvZm9jdXNJbnNpZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvZm9jdXNJc0hpZGRlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9jb3JyZWN0Rm9jdXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvZmlyc3RGb2N1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9zb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvdXRpbHMvYXV0by1mb2N1cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS91dGlscy9wYXJlbnRpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvZm9jdXNTb2x2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvZm9jdXNhYmxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9jb21tYW5kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZm9jdXMtbG9jay9kaXN0L2VzMjAxNS9tb3ZlRm9jdXNJbnNpZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvY3VzLWxvY2svZGlzdC9lczIwMTUvcmV0dXJuLWZvY3VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mb2N1cy1sb2NrL2Rpc3QvZXMyMDE1L3NpYmxpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLWxvY2svZGlzdC9lczIwMTUvc2lkZWNhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvU2lkZUVmZmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXIvZGlzdC9lczIwMTUvY29tcG9uZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1zdHlsZS1zaW5nbGV0b24vZGlzdC9lczIwMTUvaG9vay5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2V0LW5vbmNlL2Rpc3QvZXMyMDE1L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1zdHlsZS1zaW5nbGV0b24vZGlzdC9lczIwMTUvc2luZ2xldG9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1zdHlsZS1zaW5nbGV0b24vZGlzdC9lczIwMTUvY29tcG9uZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1yZW1vdmUtc2Nyb2xsLWJhci9kaXN0L2VzMjAxNS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvYWdncmVzaXZlQ2FwdHVyZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtZm9jdXMtb24vbm9kZV9tb2R1bGVzL3JlYWN0LXJlbW92ZS1zY3JvbGwvZGlzdC9lczIwMTUvaGFuZGxlU2Nyb2xsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9ub2RlX21vZHVsZXMvcmVhY3QtcmVtb3ZlLXNjcm9sbC9kaXN0L2VzMjAxNS9zaWRlY2FyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9FZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FyaWEtaGlkZGVuL2Rpc3QvZXMyMDE1L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1mb2N1cy1vbi9kaXN0L2VzMjAxNS9JbnRlcmFjdGl2aXR5RGlzYWJsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZvY3VzLW9uL2Rpc3QvZXMyMDE1L3NpZGVjYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BvcG92ZXIvcG9wb3Zlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvb2JzZXJ2ZXIvbXV0YXRpb25fb2JzZXJ2ZXIvbXV0YXRpb25fb2JzZXJ2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL291dHNpZGVfY2xpY2tfZGV0ZWN0b3Ivb3V0c2lkZV9jbGlja19kZXRlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX2Fycm93L19wb3BvdmVyX2Fycm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXJfYXJyb3cvX3BvcG92ZXJfYXJyb3cuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXIuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wb3BvdmVyL3BvcG92ZXJfcGFuZWwvX3BvcG92ZXJfcGFuZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhbmVsL3BhbmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYW5lbC9wYW5lbC5zdHlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcG9wb3Zlci9wb3BvdmVyX3BhbmVsL19wb3BvdmVyX3BhbmVsLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NhcmQvY2FyZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY2FyZC9jYXJkX3NlbGVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9jaGVja2JveC9jaGVja2JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZmxleC9mbGV4X2dyb3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mbGV4L2ZsZXhfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2NvbnRyb2xfbGF5b3V0L2Zvcm1fY29udHJvbF9sYXlvdXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dC9mb3JtX2NvbnRyb2xfbGF5b3V0X2ljb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fY29udHJvbF9sYXlvdXQvZm9ybV9jb250cm9sX2xheW91dF9jbGVhcl9idXR0b24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dC9mb3JtX2NvbnRyb2xfbGF5b3V0X2N1c3RvbV9pY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2Zvcm1fbGFiZWwvZm9ybV9sYWJlbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS92YWxpZGF0YWJsZV9jb250cm9sL3ZhbGlkYXRhYmxlX2NvbnRyb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dC9fbnVtX2ljb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9mb3JtL2ZpZWxkX3NlYXJjaC9maWVsZF9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9zZXJ2aWNlcy9icm93c2VyL2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Zvcm0vZm9ybV9lcnJvcl90ZXh0L2Zvcm1fZXJyb3JfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX2hlbHBfdGV4dC9mb3JtX2hlbHBfdGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9mb3JtX3Jvdy9mb3JtX3Jvdy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9wYW5lbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29udGV4dF9tZW51L2NvbnRleHRfbWVudV9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9ob3Jpem9udGFsX3J1bGUvaG9yaXpvbnRhbF9ydWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9ob3Jpem9udGFsX3J1bGUvaG9yaXpvbnRhbF9ydWxlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvZm9ybS9zd2l0Y2gvc3dpdGNoLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2Rpc3QvbWVtb2l6ZS1vbmUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL3RpbWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2RvbUhlbHBlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvY3JlYXRlR3JpZENvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9WYXJpYWJsZVNpemVHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL2NyZWF0ZUxpc3RDb21wb25lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvVmFyaWFibGVTaXplTGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L3NyYy9GaXhlZFNpemVHcmlkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3cvc3JjL0ZpeGVkU2l6ZUxpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvc2hhbGxvd0RpZmZlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvYXJlRXF1YWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9zcmMvc2hvdWxkQ29tcG9uZW50VXBkYXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9vdmVybGF5X21hc2svb3ZlcmxheV9tYXNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zcGFjZXIvc3BhY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zcGFjZXIvc3BhY2VyLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9vcHRpb25zX2xpc3QvY29tYm9fYm94X29wdGlvbnNfbGlzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaGlnaGxpZ2h0L2hpZ2hsaWdodC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvbWFyay9tYXJrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9tYXJrL21hcmsuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94X29wdGlvbnNfbGlzdC9jb21ib19ib3hfdGl0bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ZpbHRlcl9ncm91cC9maWx0ZXJfc2VsZWN0X2l0ZW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2NvbWJvX2JveC9tYXRjaGluZ19vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9jb21ib19ib3gvY29tYm9fYm94X2lucHV0L2NvbWJvX2JveF9pbnB1dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvY29tYm9fYm94L2NvbWJvX2JveF9pbnB1dC9jb21ib19ib3hfcGlsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcGFnaW5hdGlvbi90YWJsZV9wYWdpbmF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbl9idXR0b24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3BhZ2luYXRpb24vcGFnaW5hdGlvbl9idXR0b25fYXJyb3cuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFiLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJzL3RhYnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYnMvdGFiYmVkX2NvbnRlbnQvdGFiYmVkX2NvbnRlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2RlbGF5X3JlbmRlci9kZWxheV9yZW5kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hlYWx0aC9oZWFsdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2hlYWx0aC9oZWFsdGguc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2Vfd3JhcHBlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2Vfd3JhcHBlci5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlX2J1dHRvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfYnV0dG9uLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfY2FwdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfY2FwdGlvbi5zdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2ltYWdlL2ltYWdlLnN0eWxlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvaW1hZ2UvaW1hZ2VfZnVsbHNjcmVlbl93cmFwcGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV9mdWxsc2NyZWVuX3dyYXBwZXIuc3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9pbWFnZS9pbWFnZV90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvcHJvdmlkZXIvcHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9nbG9iYWxfc3R5bGluZy91dGlsaXR5L3V0aWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3Byb3ZpZGVyL2NhY2hlL2NhY2hlX3Byb3ZpZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90cmVlX3ZpZXcvdHJlZV92aWV3LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9zZWFyY2gvc2VsZWN0YWJsZV9zZWFyY2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvbWF0Y2hpbmdfb3B0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvc2VsZWN0YWJsZS9zZWxlY3RhYmxlX21lc3NhZ2Uvc2VsZWN0YWJsZV9tZXNzYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9zZWxlY3RhYmxlL3NlbGVjdGFibGVfbGlzdC9zZWxlY3RhYmxlX2xpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3NlbGVjdGFibGUvc2VsZWN0YWJsZV9saXN0L3NlbGVjdGFibGVfbGlzdF9pdGVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfYm9keS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfZm9vdGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9mb290ZXJfY2VsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2hlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfaGVhZGVyX2NlbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL3RhYmxlL3RhYmxlX2hlYWRlcl9jZWxsX2NoZWNrYm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9tb2JpbGUvdGFibGVfaGVhZGVyX21vYmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvbW9iaWxlL3RhYmxlX3NvcnRfbW9iaWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS9tb2JpbGUvdGFibGVfc29ydF9tb2JpbGVfaXRlbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy90YWJsZS90YWJsZV9yb3dfY2VsbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvdGFibGUvdGFibGVfcm93X2NlbGxfY2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2Jhc2ljX3RhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9jb2xsYXBzZWRfaXRlbV9hY3Rpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9leHBhbmRlZF9pdGVtX2FjdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2RlZmF1bHRfaXRlbV9hY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BlbGFzdGljL2V1aS9lcy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2N1c3RvbV9pdGVtX2FjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQGVsYXN0aWMvZXVpL2VzL2NvbXBvbmVudHMvYmFzaWNfdGFibGUvYWN0aW9uX3R5cGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AZWxhc3RpYy9ldWkvZXMvY29tcG9uZW50cy9iYXNpY190YWJsZS9wYWdpbmF0aW9uX2Jhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9zdWJzY3JpYmFibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvZm9jdXNNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL29ubGluZU1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcmV0cnllci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9ub3RpZnlNYW5hZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL2xvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9xdWVyeUNhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL211dGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL211dGF0aW9uQ2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvaW5maW5pdGVRdWVyeUJlaGF2aW9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5Q2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5T2JzZXJ2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3JlYWN0QmF0Y2hlZFVwZGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3NldEJhdGNoVXBkYXRlc0ZuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9sb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3NldExvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvUXVlcnlDbGllbnRQcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC91c2VCYXNlUXVlcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3VzZVF1ZXJ5LmpzIiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0RhdGFDb250ZW50V2lkZ2V0L0RhdGFDb250ZW50V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL0VudGl0eUluZm9XaWRnZXQvRW50aXR5SW5mb1dpZGdldC50c3giLCAiLi4vc3JjL21vZGVsL1N0cnVjdHVyZVJlbmRlcmluZy50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9Kc29uQXBpV2lkZ2V0L0pzb25BcGlXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0Rlc2NyaXB0aW9uV2lkZ2V0L0Rlc2NyaXB0aW9uUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L0lyaVdpZGdldC9JcmlXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L1RhYldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvVGFiUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9IaWVyYXJjaHlXaWRnZXQvSGllcmFyY2h5V2lkZ2V0T0xTLnRzeCIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltL3dpdGgtc2VsZWN0b3IucHJvZHVjdGlvbi5taW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vd2l0aC1zZWxlY3Rvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3Mvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3Mvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvbXVsdGltYXAvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NoZWV0L2Rpc3QvZW1vdGlvbi1zaGVldC5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9FbnVtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1V0aWxpdHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1BhcnNlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QcmVmaXhlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9TZXJpYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL01pZGRsZXdhcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3N0eWxpcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vd2Vhay1tZW1vaXplL2Rpc3QvZW1vdGlvbi13ZWFrLW1lbW9pemUuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY2FjaGUvZGlzdC9lbW90aW9uLWNhY2hlLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvZW1vdGlvbi11dGlscy5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2Vtb3Rpb24taGFzaC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvZW1vdGlvbi11bml0bGVzcy5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L2Vtb3Rpb24tc2VyaWFsaXplLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcy9kaXN0L2Vtb3Rpb24tdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3JlYWN0L2Rpc3QvZW1vdGlvbi1lbGVtZW50LTQzYzZmZWEwLmJyb3dzZXIuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AZW1vdGlvbi9yZWFjdC9kaXN0L2Vtb3Rpb24tcmVhY3QuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZm9ybWF0TXVpRXJyb3JNZXNzYWdlL2Zvcm1hdE11aUVycm9yTWVzc2FnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2Zvcm1hdE11aUVycm9yTWVzc2FnZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaXMtcHJvcC12YWxpZC9kaXN0L2Vtb3Rpb24taXMtcHJvcC12YWxpZC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BlbW90aW9uL3N0eWxlZC9iYXNlL2Rpc3QvZW1vdGlvbi1zdHlsZWQtYmFzZS5icm93c2VyLmVzbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc3R5bGVkL2Rpc3QvZW1vdGlvbi1zdHlsZWQuYnJvd3Nlci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC9qc3gtcnVudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zdHlsZWQtZW5naW5lL25vZGUvU3R5bGVkRW5naW5lUHJvdmlkZXIvU3R5bGVkRW5naW5lUHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9ub2RlL1N0eWxlZEVuZ2luZVByb3ZpZGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvbm9kZS9HbG9iYWxTdHlsZXMvR2xvYmFsU3R5bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvbm9kZS9HbG9iYWxTdHlsZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9kZWVwbWVyZ2UvZGVlcG1lcmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZGVlcG1lcmdlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvY2FwaXRhbGl6ZS9jYXBpdGFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvY2FwaXRhbGl6ZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2dldERpc3BsYXlOYW1lL2dldERpc3BsYXlOYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL25vZGUvZ2V0RGlzcGxheU5hbWUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvbm9kZS9jbGFtcC9jbGFtcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9ub2RlL2NsYW1wL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9tZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vcmVzcG9uc2l2ZVByb3BUeXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9icmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL21lbW9pemUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3NwYWNpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NvbXBvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2JvcmRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2Nzc0dyaWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3BhbGV0dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL3NpemluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vc3R5bGVGdW5jdGlvblN4L3N0eWxlRnVuY3Rpb25TeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gvZXh0ZW5kU3hQcm9wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lL2NyZWF0ZUJyZWFrcG9pbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVUaGVtZS9zaGFwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUvY3JlYXRlU3BhY2luZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUvYXBwbHlTdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2NyZWF0ZVRoZW1lL2NyZWF0ZVRoZW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9jcmVhdGVUaGVtZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlU3R5bGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy93aWRnZXRzL0VudGl0eVRyZWVXaWRnZXQudHN4IiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvcmVhY3RCYXRjaGVkVXBkYXRlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvYmF0Y2guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZVNlbGVjdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VSZWR1eENvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvQ29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvdXRpbHMvdXNlU3luY0V4dGVybmFsU3RvcmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9tZXJnZVByb3BzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy91dGlscy9TdWJzY3JpcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvUHJvdmlkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZHV4L2VzL2hvb2tzL3VzZVN0b3JlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1yZWR1eC9lcy9ob29rcy91c2VEaXNwYXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvYXBwL2hvb2tzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvZXJyb3JzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvY29tbW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvcGx1Z2lucy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvc2NvcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9jb3JlL2ZpbmFsaXplLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvY29yZS9wcm94eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvaW1tZXJDbGFzcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2NvcmUvY3VycmVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3BsdWdpbnMvZXM1LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvcGx1Z2lucy9wYXRjaGVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvcGx1Z2lucy9tYXBzZXQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9wbHVnaW5zL2FsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL2ltbWVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvZW52LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVkdXgvZXMvcmVkdXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlZHV4LXRodW5rL2VzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NvbmZpZ3VyZVN0b3JlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9kZXZ0b29sc0V4dGVuc2lvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvaXNQbGFpbk9iamVjdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZ2V0RGVmYXVsdE1pZGRsZXdhcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL3RzSGVscGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlQWN0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9hY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvc2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9jcmVhdGVSZWR1Y2VyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9tYXBCdWlsZGVycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvY3JlYXRlU2xpY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL2VudGl0eV9zdGF0ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvc3RhdGVfc2VsZWN0b3JzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9lbnRpdGllcy9zdGF0ZV9hZGFwdGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9lbnRpdGllcy91dGlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvdW5zb3J0ZWRfc3RhdGVfYWRhcHRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvZW50aXRpZXMvc29ydGVkX3N0YXRlX2FkYXB0ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2VudGl0aWVzL2NyZWF0ZV9hZGFwdGVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9uYW5vaWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2NyZWF0ZUFzeW5jVGh1bmsudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL21hdGNoZXJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9saXN0ZW5lck1pZGRsZXdhcmUvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0ByZWR1eGpzL3Rvb2xraXQvc3JjL2xpc3RlbmVyTWlkZGxld2FyZS9leGNlcHRpb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9saXN0ZW5lck1pZGRsZXdhcmUvdGFzay50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9zcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L3NyYy9hdXRvQmF0Y2hFbmhhbmNlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQHJlZHV4anMvdG9vbGtpdC9kaXN0L3JlZHV4LXRvb2xraXQuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvYXBpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL2hvbWUvaG9tZVNsaWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvdXRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvUmVpZmllZC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvTGlua2VkRW50aXRpZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL1RoaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9FbnRpdHkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL21vZGVsL0NsYXNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9JbmRpdmlkdWFsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9tb2RlbC9Qcm9wZXJ0eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvbW9kZWwvT250b2xvZ3kudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvZXh0cmFjdEVudGl0eUhpZXJhcmNoeS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvcGFnZXMvb250b2xvZ2llcy9lbnRpdGllcy9jcmVhdGVUcmVlRnJvbUVudGl0aWVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9wYWdlcy9vbnRvbG9naWVzL29udG9sb2dpZXNTbGljZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvcGFnZXMvc2VhcmNoL3NlYXJjaFNsaWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvc3RvcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvc3JjL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvRW50aXR5VHJlZS50c3giLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2NvbW1vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvcmVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2NvbG9ycy9wdXJwbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2JsdWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL2xpZ2h0Qmx1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JlZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvY29sb3JzL29yYW5nZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9jb2xvcnMvZ3JleS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvaWRlbnRpZmllci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvY3JlYXRlVGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVCcmVha3BvaW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL3NoYXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYnJlYWtwb2ludHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9tZXJnZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vbWVtb2l6ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3NwYWNpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVTcGFjaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L3N0eWxlRnVuY3Rpb25TeC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NvbXBvc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9ib3JkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3NzR3JpZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3BhbGV0dGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zaXppbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZUZ1bmN0aW9uU3gvZGVmYXVsdFN4Q29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvYXBwbHlTdHlsZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVdpdGhvdXREZWZhdWx0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZUZ1bmN0aW9uU3gvZXh0ZW5kU3hQcm9wLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL0NsYXNzTmFtZUdlbmVyYXRvci9DbGFzc05hbWVHZW5lcmF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL2Nsc3gvZGlzdC9jbHN4Lm1qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcy9nZW5lcmF0ZVV0aWxpdHlDbGFzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVTdHlsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvcmVzb2x2ZVByb3BzL3Jlc29sdmVQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lUHJvcHMvZ2V0VGhlbWVQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lUHJvcHMvdXNlVGhlbWVQcm9wcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VFbmhhbmNlZEVmZmVjdC91c2VFbmhhbmNlZEVmZmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9jcmVhdGVDaGFpbmVkRnVuY3Rpb24vY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL2lzTXVpRWxlbWVudC9pc011aUVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvc2V0UmVmL3NldFJlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VJZC91c2VJZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VDb250cm9sbGVkL3VzZUNvbnRyb2xsZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlRXZlbnRDYWxsYmFjay91c2VFdmVudENhbGxiYWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3VzZUZvcmtSZWYvdXNlRm9ya1JlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VMYXp5UmVmL3VzZUxhenlSZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvdXRpbHMvdXNlT25Nb3VudC91c2VPbk1vdW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL3V0aWxzL3VzZVRpbWVvdXQvdXNlVGltZW91dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy91c2VJc0ZvY3VzVmlzaWJsZS91c2VJc0ZvY3VzVmlzaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcy9jb21wb3NlQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL1N0YWNrL2NyZWF0ZVN0YWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUaGVtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvY3JlYXRlTWl4aW5zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVQYWxldHRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUeXBvZ3JhcGh5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9zaGFkb3dzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9jcmVhdGVUcmFuc2l0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9zdHlsZXMvekluZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3N0eWxlcy9kZWZhdWx0VGhlbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3VzZVRoZW1lUHJvcHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvc3R5bGVzL3N0eWxlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jYXBpdGFsaXplLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy9jcmVhdGVTdmdJY29uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1N2Z0ljb24vU3ZnSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9TdmdJY29uL3N2Z0ljb25DbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL2lzTXVpRWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VDb250cm9sbGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvdXRpbHMvdXNlRm9ya1JlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC91dGlscy91c2VJc0ZvY3VzVmlzaWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cENvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9DaGlsZE1hcHBpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9CdXR0b25CYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvVG91Y2hSaXBwbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9SaXBwbGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS90b3VjaFJpcHBsZUNsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9idXR0b25CYXNlQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9UeXBvZ3JhcGh5L1R5cG9ncmFwaHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvVHlwb2dyYXBoeS90eXBvZ3JhcGh5Q2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sQ29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dEJhc2UvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2hlY2tib3gvQ2hlY2tib3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvU3dpdGNoQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zd2l0Y2hCYXNlQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvQ2hlY2tCb3hPdXRsaW5lQmxhbmsuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL0NoZWNrQm94LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL2ludGVybmFsL3N2Zy1pY29ucy9JbmRldGVybWluYXRlQ2hlY2tCb3guanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQ2hlY2tib3gvY2hlY2tib3hDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NpcmN1bGFyUHJvZ3Jlc3MvQ2lyY3VsYXJQcm9ncmVzcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9DaXJjdWxhclByb2dyZXNzL2NpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL2Zvcm1Db250cm9sQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbExhYmVsL0Zvcm1Db250cm9sTGFiZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvU3RhY2svU3RhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2xMYWJlbC9mb3JtQ29udHJvbExhYmVsQ2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtR3JvdXAvRm9ybUdyb3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Hcm91cC9mb3JtR3JvdXBDbGFzc2VzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1JhZGlvL1JhZGlvLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1JhZGlvL1JhZGlvQnV0dG9uSWNvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9pbnRlcm5hbC9zdmctaWNvbnMvUmFkaW9CdXR0b25VbmNoZWNrZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvaW50ZXJuYWwvc3ZnLWljb25zL1JhZGlvQnV0dG9uQ2hlY2tlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9SYWRpb0dyb3VwL3VzZVJhZGlvR3JvdXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUmFkaW9Hcm91cC9SYWRpb0dyb3VwQ29udGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9SYWRpby9yYWRpb0NsYXNzZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUmFkaW9Hcm91cC9SYWRpb0dyb3VwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9hcHAvbXVpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L3NyYy9jb21wb25lbnRzL05vZGUudHN4IiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3N1YnNjcmliYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9mb2N1c01hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvb25saW5lTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9yZXRyeWVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL25vdGlmeU1hbmFnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbG9nZ2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9jb3JlL3F1ZXJ5Q2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvcXVlcnlDbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbXV0YXRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL2NvcmUvbXV0YXRpb25DYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvY29yZS9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3JlYWN0QmF0Y2hlZFVwZGF0ZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3NldEJhdGNoVXBkYXRlc0ZuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AemJtZWQvb2xzLXRyZWV2aWV3L25vZGVfbW9kdWxlcy9yZWFjdC1xdWVyeS9lcy9yZWFjdC9sb2dnZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0B6Ym1lZC9vbHMtdHJlZXZpZXcvbm9kZV9tb2R1bGVzL3JlYWN0LXF1ZXJ5L2VzL3JlYWN0L3NldExvZ2dlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9ub2RlX21vZHVsZXMvcmVhY3QtcXVlcnkvZXMvcmVhY3QvUXVlcnlDbGllbnRQcm92aWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHpibWVkL29scy10cmVldmlldy9zcmMvd2lkZ2V0cy9pbmRleC50cyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9Dcm9zc1JlZldpZGdldC9Dcm9zc1JlZlRhYlByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZC9IaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkLnRzeCIsICIuLi9zcmMvYXBpL2hpZXJhcmNoeV93aWRnZXRfZGVwcmVjYXRlZC50cyIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL09udG9sb2d5SW5mb1dpZGdldC9PbnRvbG9neUluZm9XaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0Nyb3NzUmVmV2lkZ2V0L0Nyb3NzUmVmVGFiV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9IaWVyYXJjaHlXaWRnZXRTZW1Mb29rUC9IaWVyYXJjaHlXaWRnZXQudHN4IiwgIi4uL3NyYy9hcGkvU2tvc0FwaS50cyIsICIuLi9zcmMvYXBpL09udG9Qb3J0YWxBcGkudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UaXRsZVdpZGdldC9UaXRsZVdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9UaXRsZVdpZGdldC9UaXRsZVByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9NZXRhZGF0YVdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9FbnRpdHlPbnRvTGlzdFdpZGdldC9FbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbi50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9NZXRhZGF0YVdpZGdldC9FbnRpdHlEZWZpbmVkQnlXaWRnZXQvRW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1Jlc291cmNlc1dpZGdldC9SZXNvdXJjZXNXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvU2VhcmNoQmFyV2lkZ2V0L1NlYXJjaEJhcldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9TZWFyY2hSZXN1bHRzTGlzdFdpZGdldC9TZWFyY2hSZXN1bHRzTGlzdFdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9TZWFyY2hSZXN1bHRzTGlzdFdpZGdldC9NZXRhZGF0YUNvbXBhY3QudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvRW50aXR5T250b0xpc3RXaWRnZXQvRW50aXR5T250b0xpc3RXaWRnZXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3dpZGdldHMvTWV0YWRhdGFXaWRnZXQvRW50aXR5RGVmaW5lZEJ5V2lkZ2V0L0VudGl0eURlZmluZWRCeVdpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9FbnRpdHlSZWxhdGlvbnNXaWRnZXQvRW50aXR5UmVsYXRpb25zV2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL1Rlcm1EZXBpY3Rpb25XaWRnZXQvVGVybURlcGljdGlvbldpZGdldC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvd2lkZ2V0cy9HcmFwaFZpZXdXaWRnZXQvR3JhcGhWaWV3V2lkZ2V0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy93aWRnZXRzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBUT0RPOiB0aGlzIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBnZXRzIGltcG9ydGVkIGR1cmluZyBidWlsZC5cbnZhciBSZWFjdFZlcnNpb24gPSAnMTcuMC4yJztcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbmV4cG9ydHMuRnJhZ21lbnQgPSAweGVhY2I7XG5leHBvcnRzLlN0cmljdE1vZGUgPSAweGVhY2M7XG5leHBvcnRzLlByb2ZpbGVyID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG5leHBvcnRzLlN1c3BlbnNlID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgZXhwb3J0cy5GcmFnbWVudCA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgZXhwb3J0cy5TdHJpY3RNb2RlID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBleHBvcnRzLlByb2ZpbGVyID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgZXhwb3J0cy5TdXNwZW5zZSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IGRpc3BhdGNoZXIuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgYmF0Y2gncyBjb25maWd1cmF0aW9uIHN1Y2ggYXMgaG93IGxvbmcgYW4gdXBkYXRlXG4gKiBzaG91bGQgc3VzcGVuZCBmb3IgaWYgaXQgbmVlZHMgdG8uXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IHtcbiAgdHJhbnNpdGlvbjogMFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBvd25lci5cbiAqXG4gKiBUaGUgY3VycmVudCBvd25lciBpcyB0aGUgY29tcG9uZW50IHdobyBzaG91bGQgb3duIGFueSBjb21wb25lbnRzIHRoYXQgYXJlXG4gKiBjdXJyZW50bHkgYmVpbmcgY29uc3RydWN0ZWQuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IHt9O1xudmFyIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBudWxsO1xuZnVuY3Rpb24gc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKSB7XG4gIHtcbiAgICBjdXJyZW50RXh0cmFTdGFja0ZyYW1lID0gc3RhY2s7XG4gIH1cbn1cblxue1xuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZSA9IGZ1bmN0aW9uIChzdGFjaykge1xuICAgIHtcbiAgICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgICB9XG4gIH07IC8vIFN0YWNrIGltcGxlbWVudGF0aW9uIGluamVjdGVkIGJ5IHRoZSBjdXJyZW50IHJlbmRlcmVyLlxuXG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBudWxsO1xuXG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhY2sgPSAnJzsgLy8gQWRkIGFuIGV4dHJhIHRvcCBmcmFtZSB3aGlsZSBhbiBlbGVtZW50IGlzIGJlaW5nIHZhbGlkYXRlZFxuXG4gICAgaWYgKGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUpIHtcbiAgICAgIHN0YWNrICs9IGN1cnJlbnRFeHRyYVN0YWNrRnJhbWU7XG4gICAgfSAvLyBEZWxlZ2F0ZSB0byB0aGUgaW5qZWN0ZWQgcmVuZGVyZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cblxuXG4gICAgdmFyIGltcGwgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjaztcblxuICAgIGlmIChpbXBsKSB7XG4gICAgICBzdGFjayArPSBpbXBsKCkgfHwgJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9O1xufVxuXG4vKipcbiAqIFVzZWQgYnkgYWN0KCkgdG8gdHJhY2sgd2hldGhlciB5b3UncmUgaW5zaWRlIGFuIGFjdCgpIHNjb3BlLlxuICovXG52YXIgSXNTb21lUmVuZGVyZXJBY3RpbmcgPSB7XG4gIGN1cnJlbnQ6IGZhbHNlXG59O1xuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXI6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOiBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxcbiAgUmVhY3RDdXJyZW50T3duZXI6IFJlYWN0Q3VycmVudE93bmVyLFxuICBJc1NvbWVSZW5kZXJlckFjdGluZzogSXNTb21lUmVuZGVyZXJBY3RpbmcsXG4gIC8vIFVzZWQgYnkgcmVuZGVyZXJzIHRvIGF2b2lkIGJ1bmRsaW5nIG9iamVjdC1hc3NpZ24gdHdpY2UgaW4gVU1EIGJ1bmRsZXM6XG4gIGFzc2lnbjogX2Fzc2lnblxufTtcblxue1xuICBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbn1cblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSB7fTtcblxuZnVuY3Rpb24gd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIHZhciBfY29uc3RydWN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IF9jb25zdHJ1Y3RvciAmJiAoX2NvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IF9jb25zdHJ1Y3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcyc7XG4gICAgdmFyIHdhcm5pbmdLZXkgPSBjb21wb25lbnROYW1lICsgXCIuXCIgKyBjYWxsZXJOYW1lO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVycm9yKFwiQ2FuJ3QgY2FsbCAlcyBvbiBhIGNvbXBvbmVudCB0aGF0IGlzIG5vdCB5ZXQgbW91bnRlZC4gXCIgKyAnVGhpcyBpcyBhIG5vLW9wLCBidXQgaXQgbWlnaHQgaW5kaWNhdGUgYSBidWcgaW4geW91ciBhcHBsaWNhdGlvbi4gJyArICdJbnN0ZWFkLCBhc3NpZ24gdG8gYHRoaXMuc3RhdGVgIGRpcmVjdGx5IG9yIGRlZmluZSBhIGBzdGF0ZSA9IHt9O2AgJyArICdjbGFzcyBwcm9wZXJ0eSB3aXRoIHRoZSBkZXNpcmVkIHN0YXRlIGluIHRoZSAlcyBjb21wb25lbnQuJywgY2FsbGVyTmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gPSB0cnVlO1xuICB9XG59XG4vKipcbiAqIFRoaXMgaXMgdGhlIGFic3RyYWN0IEFQSSBmb3IgYW4gdXBkYXRlIHF1ZXVlLlxuICovXG5cblxudmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0ge1xuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB3ZSB3YW50IHRvIHRlc3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBmaW5hbFxuICAgKi9cbiAgaXNNb3VudGVkOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAgICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAgICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAgICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnZm9yY2VVcGRhdGUnKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0ZWAgdG8gbXV0YXRlIHN0YXRlLlxuICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gICAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcGxldGVTdGF0ZSBOZXh0IHN0YXRlLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IGNhbGxlck5hbWUgbmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdyZXBsYWNlU3RhdGUnKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRlIGlzXG4gICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcFxuICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXRcbiAgICogZHVyaW5nIHRoZSBtZXJnZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIHN0YXRlLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IE5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3NldFN0YXRlJyk7XG4gIH1cbn07XG5cbnZhciBlbXB0eU9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpO1xufVxuLyoqXG4gKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0OyAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9uZSBnZXRzIGluamVjdGVkIGJ5IHRoZVxuICAvLyByZW5kZXJlci5cblxuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG5Db21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTtcbi8qKlxuICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyB0byBtdXRhdGVcbiAqIHN0YXRlLiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCB3aWxsIHJ1biBzeW5jaHJvbm91c2x5LFxuICogYXMgdGhleSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsXG4gKiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2FsbCB0byBzZXRTdGF0ZSBpcyBhY3R1YWxseVxuICogY29tcGxldGVkLlxuICpcbiAqIFdoZW4gYSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBzZXRTdGF0ZSwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgc29tZSBwb2ludCBpblxuICogdGhlIGZ1dHVyZSAobm90IHN5bmNocm9ub3VzbHkpLiBJdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSB1cCB0byBkYXRlXG4gKiBjb21wb25lbnQgYXJndW1lbnRzIChzdGF0ZSwgcHJvcHMsIGNvbnRleHQpLiBUaGVzZSB2YWx1ZXMgY2FuIGJlIGRpZmZlcmVudFxuICogZnJvbSB0aGlzLiogYmVjYXVzZSB5b3VyIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYWZ0ZXIgcmVjZWl2ZVByb3BzIGJ1dCBiZWZvcmVcbiAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSwgYW5kIHRoaXMgbmV3IHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgd2lsbCBub3QgeWV0IGJlXG4gKiBhc3NpZ25lZCB0byB0aGlzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIG9yIGZ1bmN0aW9uIHRvXG4gKiAgICAgICAgcHJvZHVjZSBuZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggY3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykge1xuICBpZiAoISh0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnZnVuY3Rpb24nIHx8IHBhcnRpYWxTdGF0ZSA9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbn07XG4vKipcbiAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICpcbiAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICpcbiAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gKlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLCBjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG59O1xuLyoqXG4gKiBEZXByZWNhdGVkIEFQSXMuIFRoZXNlIEFQSXMgdXNlZCB0byBleGlzdCBvbiBjbGFzc2ljIFJlYWN0IGNsYXNzZXMgYnV0IHNpbmNlXG4gKiB3ZSB3b3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0aGVtLCB3ZSdyZSBub3QgZ29pbmcgdG8gbW92ZSB0aGVtIG92ZXIgdG8gdGhpc1xuICogbW9kZXJuIGJhc2UgY2xhc3MuIEluc3RlYWQsIHdlIGRlZmluZSBhIGdldHRlciB0aGF0IHdhcm5zIGlmIGl0J3MgYWNjZXNzZWQuXG4gKi9cblxuXG57XG4gIHZhciBkZXByZWNhdGVkQVBJcyA9IHtcbiAgICBpc01vdW50ZWQ6IFsnaXNNb3VudGVkJywgJ0luc3RlYWQsIG1ha2Ugc3VyZSB0byBjbGVhbiB1cCBzdWJzY3JpcHRpb25zIGFuZCBwZW5kaW5nIHJlcXVlc3RzIGluICcgKyAnY29tcG9uZW50V2lsbFVubW91bnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuJ10sXG4gICAgcmVwbGFjZVN0YXRlOiBbJ3JlcGxhY2VTdGF0ZScsICdSZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIHNldFN0YXRlIGluc3RlYWQgKHNlZSAnICsgJ2h0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzIzNikuJ11cbiAgfTtcblxuICB2YXIgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGluZm8pIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJyVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzJywgaW5mb1swXSwgaW5mb1sxXSk7XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBmb3IgKHZhciBmbk5hbWUgaW4gZGVwcmVjYXRlZEFQSXMpIHtcbiAgICBpZiAoZGVwcmVjYXRlZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSkge1xuICAgICAgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKGZuTmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIENvbXBvbmVudER1bW15KCkge31cblxuQ29tcG9uZW50RHVtbXkucHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbi8qKlxuICogQ29udmVuaWVuY2UgY29tcG9uZW50IHdpdGggZGVmYXVsdCBzaGFsbG93IGVxdWFsaXR5IGNoZWNrIGZvciBzQ1UuXG4gKi9cblxuZnVuY3Rpb24gUHVyZUNvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG52YXIgcHVyZUNvbXBvbmVudFByb3RvdHlwZSA9IFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVudER1bW15KCk7XG5wdXJlQ29tcG9uZW50UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHVyZUNvbXBvbmVudDsgLy8gQXZvaWQgYW4gZXh0cmEgcHJvdG90eXBlIGp1bXAgZm9yIHRoZXNlIG1ldGhvZHMuXG5cbl9hc3NpZ24ocHVyZUNvbXBvbmVudFByb3RvdHlwZSwgQ29tcG9uZW50LnByb3RvdHlwZSk7XG5cbnB1cmVDb21wb25lbnRQcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuXG4vLyBhbiBpbW11dGFibGUgb2JqZWN0IHdpdGggYSBzaW5nbGUgbXV0YWJsZSB2YWx1ZVxuZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuICB2YXIgcmVmT2JqZWN0ID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcblxuICB7XG4gICAgT2JqZWN0LnNlYWwocmVmT2JqZWN0KTtcbiAgfVxuXG4gIHJldHVybiByZWZPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIGV4cG9ydHMuUHJvZmlsZXI6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgZXhwb3J0cy5TdHJpY3RNb2RlOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biwgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24sIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHtcbiAgICB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYHJlZmAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIGNvbmZpZy5fX3NlbGYgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5zdGF0ZU5vZGUgIT09IGNvbmZpZy5fX3NlbGYpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiAnICsgJ1N1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiAnICsgJ1RoaXMgY2FzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb24uICcgKyAnV2UgYXNrIHlvdSB0byBtYW51YWxseSBmaXggdGhpcyBjYXNlIGJ5IHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgY29tcG9uZW50TmFtZSwgY29uZmlnLnJlZik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvXG4gKiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcgdG8gY2FsbCBpdC4gQWxzbywgaW5zdGFuY2VvZiBjaGVja1xuICogd2lsbCBub3Qgd29yay4gSW5zdGVhZCB0ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRvIGNoZWNrXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXG4gKiBAcGFyYW0geyp9IG93bmVyXG4gKiBAcGFyYW0geyp9IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0IHBsYWNlcyB3aGVyZSBgdGhpc2AgaXNcbiAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4gUmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2VcbiAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93XG4gKiBmdW5jdGlvbnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIgYXJlIHRoZSBzYW1lLCB0aGVyZSB3aWxsIGJlIG5vXG4gKiBjaGFuZ2UgaW4gYmVoYXZpb3IuXG4gKiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSlcbiAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQvb3Igb3RoZXIgaW5mb3JtYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiByZWYsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uXG4gICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC5cbiAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluXG4gICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTsgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTsgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgLy8gZXF1YWwgZm9yIHRlc3RpbmcgcHVycG9zZXMgYW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVyYXRpb24uXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuLyoqXG4gKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgb2YgdGhlIGdpdmVuIHR5cGUuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2NyZWF0ZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBrZXkgPSBudWxsO1xuICB2YXIgcmVmID0gbnVsbDtcbiAgdmFyIHNlbGYgPSBudWxsO1xuICB2YXIgc291cmNlID0gbnVsbDtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgcmVmID0gY29uZmlnLnJlZjtcblxuICAgICAge1xuICAgICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cblxuICAgIHNlbGYgPSBjb25maWcuX19zZWxmID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc2VsZjtcbiAgICBzb3VyY2UgPSBjb25maWcuX19zb3VyY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zb3VyY2U7IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkQXJyYXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfSAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcblxuXG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbn1cbmZ1bmN0aW9uIGNsb25lQW5kUmVwbGFjZUtleShvbGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50LnByb3BzKTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG4vKipcbiAqIENsb25lIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IHVzaW5nIGVsZW1lbnQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjbG9uZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICBpZiAoISEoZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB1bmRlZmluZWQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuY2xvbmVFbGVtZW50KC4uLik6IFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgXCIgKyBlbGVtZW50ICsgXCIuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvcE5hbWU7IC8vIE9yaWdpbmFsIHByb3BzIGFyZSBjb3BpZWRcblxuICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG5cbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7IC8vIFNlbGYgaXMgcHJlc2VydmVkIHNpbmNlIHRoZSBvd25lciBpcyBwcmVzZXJ2ZWQuXG5cbiAgdmFyIHNlbGYgPSBlbGVtZW50Ll9zZWxmOyAvLyBTb3VyY2UgaXMgcHJlc2VydmVkIHNpbmNlIGNsb25lRWxlbWVudCBpcyB1bmxpa2VseSB0byBiZSB0YXJnZXRlZCBieSBhXG4gIC8vIHRyYW5zcGlsZXIsIGFuZCB0aGUgb3JpZ2luYWwgc291cmNlIGlzIHByb2JhYmx5IGEgYmV0dGVyIGluZGljYXRvciBvZiB0aGVcbiAgLy8gdHJ1ZSBvd25lci5cblxuICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNlOyAvLyBPd25lciB3aWxsIGJlIHByZXNlcnZlZCwgdW5sZXNzIHJlZiBpcyBvdmVycmlkZGVuXG5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH0gLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgb3ZlcnJpZGUgZXhpc3RpbmcgcHJvcHNcblxuXG4gICAgdmFyIGRlZmF1bHRQcm9wcztcblxuICAgIGlmIChlbGVtZW50LnR5cGUgJiYgZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZGVmYXVsdFByb3BzID0gZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcztcbiAgICB9XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBpZiAoY29uZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KGVsZW1lbnQudHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKTtcbn1cbi8qKlxuICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgUmVhY3RFbGVtZW50LlxuICogQGZpbmFsXG4gKi9cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU1VCU0VQQVJBVE9SID0gJzonO1xuLyoqXG4gKiBFc2NhcGUgYW5kIHdyYXAga2V5IHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgcmVhY3RpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gYmUgZXNjYXBlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQga2V5LlxuICovXG5cbmZ1bmN0aW9uIGVzY2FwZShrZXkpIHtcbiAgdmFyIGVzY2FwZVJlZ2V4ID0gL1s9Ol0vZztcbiAgdmFyIGVzY2FwZXJMb29rdXAgPSB7XG4gICAgJz0nOiAnPTAnLFxuICAgICc6JzogJz0yJ1xuICB9O1xuICB2YXIgZXNjYXBlZFN0cmluZyA9IGtleS5yZXBsYWNlKGVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07XG4gIH0pO1xuICByZXR1cm4gJyQnICsgZXNjYXBlZFN0cmluZztcbn1cbi8qKlxuICogVE9ETzogVGVzdCB0aGF0IGEgc2luZ2xlIGNoaWxkIGFuZCBhbiBhcnJheSB3aXRoIG9uZSBpdGVtIGhhdmUgdGhlIHNhbWUga2V5XG4gKiBwYXR0ZXJuLlxuICovXG5cblxudmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbnZhciB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cXC8rL2c7XG5cbmZ1bmN0aW9uIGVzY2FwZVVzZXJQcm92aWRlZEtleSh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsICckJi8nKTtcbn1cbi8qKlxuICogR2VuZXJhdGUgYSBrZXkgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyBhIGVsZW1lbnQgd2l0aGluIGEgc2V0LlxuICpcbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBBIGVsZW1lbnQgdGhhdCBjb3VsZCBjb250YWluIGEgbWFudWFsIGtleS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCB0aGF0IGlzIHVzZWQgaWYgYSBtYW51YWwga2V5IGlzIG5vdCBwcm92aWRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRLZXkoZWxlbWVudCwgaW5kZXgpIHtcbiAgLy8gRG8gc29tZSB0eXBlY2hlY2tpbmcgaGVyZSBzaW5jZSB3ZSBjYWxsIHRoaXMgYmxpbmRseS4gV2Ugd2FudCB0byBlbnN1cmVcbiAgLy8gdGhhdCB3ZSBkb24ndCBibG9jayBwb3RlbnRpYWwgZnV0dXJlIEVTIEFQSXMuXG4gIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ29iamVjdCcgJiYgZWxlbWVudCAhPT0gbnVsbCAmJiBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgLy8gRXhwbGljaXQga2V5XG4gICAgcmV0dXJuIGVzY2FwZSgnJyArIGVsZW1lbnQua2V5KTtcbiAgfSAvLyBJbXBsaWNpdCBrZXkgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggaW4gdGhlIHNldFxuXG5cbiAgcmV0dXJuIGluZGV4LnRvU3RyaW5nKDM2KTtcbn1cblxuZnVuY3Rpb24gbWFwSW50b0FycmF5KGNoaWxkcmVuLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmFtZVNvRmFyLCBjYWxsYmFjaykge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBjaGlsZHJlbjtcblxuICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgLy8gQWxsIG9mIHRoZSBhYm92ZSBhcmUgcGVyY2VpdmVkIGFzIG51bGwuXG4gICAgY2hpbGRyZW4gPSBudWxsO1xuICB9XG5cbiAgdmFyIGludm9rZUNhbGxiYWNrID0gZmFsc2U7XG5cbiAgaWYgKGNoaWxkcmVuID09PSBudWxsKSB7XG4gICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHN3aXRjaCAoY2hpbGRyZW4uJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBpZiAoaW52b2tlQ2FsbGJhY2spIHtcbiAgICB2YXIgX2NoaWxkID0gY2hpbGRyZW47XG4gICAgdmFyIG1hcHBlZENoaWxkID0gY2FsbGJhY2soX2NoaWxkKTsgLy8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzOlxuXG4gICAgdmFyIGNoaWxkS2V5ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiArIGdldEVsZW1lbnRLZXkoX2NoaWxkLCAwKSA6IG5hbWVTb0ZhcjtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG1hcHBlZENoaWxkKSkge1xuICAgICAgdmFyIGVzY2FwZWRDaGlsZEtleSA9ICcnO1xuXG4gICAgICBpZiAoY2hpbGRLZXkgIT0gbnVsbCkge1xuICAgICAgICBlc2NhcGVkQ2hpbGRLZXkgPSBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoY2hpbGRLZXkpICsgJy8nO1xuICAgICAgfVxuXG4gICAgICBtYXBJbnRvQXJyYXkobWFwcGVkQ2hpbGQsIGFycmF5LCBlc2NhcGVkQ2hpbGRLZXksICcnLCBmdW5jdGlvbiAoYykge1xuICAgICAgICByZXR1cm4gYztcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobWFwcGVkQ2hpbGQgIT0gbnVsbCkge1xuICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KG1hcHBlZENoaWxkKSkge1xuICAgICAgICBtYXBwZWRDaGlsZCA9IGNsb25lQW5kUmVwbGFjZUtleShtYXBwZWRDaGlsZCwgLy8gS2VlcCBib3RoIHRoZSAobWFwcGVkKSBhbmQgb2xkIGtleXMgaWYgdGhleSBkaWZmZXIsIGp1c3QgYXNcbiAgICAgICAgLy8gdHJhdmVyc2VBbGxDaGlsZHJlbiB1c2VkIHRvIGRvIGZvciBvYmplY3RzIGFzIGNoaWxkcmVuXG4gICAgICAgIGVzY2FwZWRQcmVmaXggKyAoIC8vICRGbG93Rml4TWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgUmVhY3QuUG9ydGFsIGRvZXNuJ3QgaGF2ZSBhIGtleVxuICAgICAgICBtYXBwZWRDaGlsZC5rZXkgJiYgKCFfY2hpbGQgfHwgX2NoaWxkLmtleSAhPT0gbWFwcGVkQ2hpbGQua2V5KSA/IC8vICRGbG93Rml4TWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgZXhpc3RpbmcgZWxlbWVudCdzIGtleSBjYW4gYmUgYSBudW1iZXJcbiAgICAgICAgZXNjYXBlVXNlclByb3ZpZGVkS2V5KCcnICsgbWFwcGVkQ2hpbGQua2V5KSArICcvJyA6ICcnKSArIGNoaWxkS2V5KTtcbiAgICAgIH1cblxuICAgICAgYXJyYXkucHVzaChtYXBwZWRDaGlsZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICB2YXIgY2hpbGQ7XG4gIHZhciBuZXh0TmFtZTtcbiAgdmFyIHN1YnRyZWVDb3VudCA9IDA7IC8vIENvdW50IG9mIGNoaWxkcmVuIGZvdW5kIGluIHRoZSBjdXJyZW50IHN1YnRyZWUuXG5cbiAgdmFyIG5leHROYW1lUHJlZml4ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiA6IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUjtcblxuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGkpO1xuICAgICAgc3VidHJlZUNvdW50ICs9IG1hcEludG9BcnJheShjaGlsZCwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5leHROYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBpdGVyYWJsZUNoaWxkcmVuID0gY2hpbGRyZW47XG5cbiAgICAgIHtcbiAgICAgICAgLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG4gICAgICAgIGlmIChpdGVyYXRvckZuID09PSBpdGVyYWJsZUNoaWxkcmVuLmVudHJpZXMpIHtcbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1hcHMpIHtcbiAgICAgICAgICAgIHdhcm4oJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHN1cHBvcnRlZC4gJyArICdVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChpdGVyYWJsZUNoaWxkcmVuKTtcbiAgICAgIHZhciBzdGVwO1xuICAgICAgdmFyIGlpID0gMDtcblxuICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICBjaGlsZCA9IHN0ZXAudmFsdWU7XG4gICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRFbGVtZW50S2V5KGNoaWxkLCBpaSsrKTtcbiAgICAgICAgc3VidHJlZUNvdW50ICs9IG1hcEludG9BcnJheShjaGlsZCwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5leHROYW1lLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGNoaWxkcmVuU3RyaW5nID0gJycgKyBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArIChjaGlsZHJlblN0cmluZyA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKCcsICcpICsgJ30nIDogY2hpbGRyZW5TdHJpbmcpICsgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJ0cmVlQ291bnQ7XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVubWFwXG4gKlxuICogVGhlIHByb3ZpZGVkIG1hcEZ1bmN0aW9uKGNoaWxkLCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZ1bmMgVGhlIG1hcCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgY291bnQgPSAwO1xuICBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIHJlc3VsdCwgJycsICcnLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBjb3VudCsrKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhc1xuICogYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5jb3VudFxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuLlxuICovXG5cblxuZnVuY3Rpb24gY291bnRDaGlsZHJlbihjaGlsZHJlbikge1xuICB2YXIgbiA9IDA7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgbisrOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmdcbiAgfSk7XG4gIHJldHVybiBuO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIHRocm91Z2ggY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmZvcmVhY2hcbiAqXG4gKiBUaGUgcHJvdmlkZWQgZm9yRWFjaEZ1bmMoY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZm9yRWFjaEZ1bmNcbiAqIEBwYXJhbSB7Kn0gZm9yRWFjaENvbnRleHQgQ29udGV4dCBmb3IgZm9yRWFjaENvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KSB7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yRWFjaEZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gRG9uJ3QgcmV0dXJuIGFueXRoaW5nLlxuICB9LCBmb3JFYWNoQ29udGV4dCk7XG59XG4vKipcbiAqIEZsYXR0ZW4gYSBjaGlsZHJlbiBvYmplY3QgKHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCkgYW5kXG4gKiByZXR1cm4gYW4gYXJyYXkgd2l0aCBhcHByb3ByaWF0ZWx5IHJlLWtleWVkIGNoaWxkcmVuLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbnRvYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHRvQXJyYXkoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pIHx8IFtdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRoYXQgdGhlcmVcbiAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm9ubHlcbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzXG4gKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0b1xuICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIG9ubHlDaGlsZChjaGlsZHJlbikge1xuICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0KGRlZmF1bHRWYWx1ZSwgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpIHtcbiAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxjdWxhdGVDaGFuZ2VkQml0cyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSBudWxsICYmIHR5cGVvZiBjYWxjdWxhdGVDaGFuZ2VkQml0cyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignY3JlYXRlQ29udGV4dDogRXhwZWN0ZWQgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzJywgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjYWxjdWxhdGVDaGFuZ2VkQml0cyxcbiAgICAvLyBBcyBhIHdvcmthcm91bmQgdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25jdXJyZW50IHJlbmRlcmVycywgd2UgY2F0ZWdvcml6ZVxuICAgIC8vIHNvbWUgcmVuZGVyZXJzIGFzIHByaW1hcnkgYW5kIG90aGVycyBhcyBzZWNvbmRhcnkuIFdlIG9ubHkgZXhwZWN0XG4gICAgLy8gdGhlcmUgdG8gYmUgdHdvIGNvbmN1cnJlbnQgcmVuZGVyZXJzIGF0IG1vc3Q6IFJlYWN0IE5hdGl2ZSAocHJpbWFyeSkgYW5kXG4gICAgLy8gRmFicmljIChzZWNvbmRhcnkpOyBSZWFjdCBET00gKHByaW1hcnkpIGFuZCBSZWFjdCBBUlQgKHNlY29uZGFyeSkuXG4gICAgLy8gU2Vjb25kYXJ5IHJlbmRlcmVycyBzdG9yZSB0aGVpciBjb250ZXh0IHZhbHVlcyBvbiBzZXBhcmF0ZSBmaWVsZHMuXG4gICAgX2N1cnJlbnRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIF9jdXJyZW50VmFsdWUyOiBkZWZhdWx0VmFsdWUsXG4gICAgLy8gVXNlZCB0byB0cmFjayBob3cgbWFueSBjb25jdXJyZW50IHJlbmRlcmVycyB0aGlzIGNvbnRleHQgY3VycmVudGx5XG4gICAgLy8gc3VwcG9ydHMgd2l0aGluIGluIGEgc2luZ2xlIHJlbmRlcmVyLiBTdWNoIGFzIHBhcmFsbGVsIHNlcnZlciByZW5kZXJpbmcuXG4gICAgX3RocmVhZENvdW50OiAwLFxuICAgIC8vIFRoZXNlIGFyZSBjaXJjdWxhclxuICAgIFByb3ZpZGVyOiBudWxsLFxuICAgIENvbnN1bWVyOiBudWxsXG4gIH07XG4gIGNvbnRleHQuUHJvdmlkZXIgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BST1ZJREVSX1RZUEUsXG4gICAgX2NvbnRleHQ6IGNvbnRleHRcbiAgfTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IGZhbHNlO1xuICB2YXIgaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIgPSBmYWxzZTtcblxuICB7XG4gICAgLy8gQSBzZXBhcmF0ZSBvYmplY3QsIGJ1dCBwcm94aWVzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvbnRleHQgb2JqZWN0IGZvclxuICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBJdCBoYXMgYSBkaWZmZXJlbnQgJCR0eXBlb2YsIHNvIHdlIGNhbiBwcm9wZXJseVxuICAgIC8vIHdhcm4gZm9yIHRoZSBpbmNvcnJlY3QgdXNhZ2Ugb2YgQ29udGV4dCBhcyBhIENvbnN1bWVyLlxuICAgIHZhciBDb25zdW1lciA9IHtcbiAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICBfY29udGV4dDogY29udGV4dCxcbiAgICAgIF9jYWxjdWxhdGVDaGFuZ2VkQml0czogY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHNcbiAgICB9OyAvLyAkRmxvd0ZpeE1lOiBGbG93IGNvbXBsYWlucyBhYm91dCBub3Qgc2V0dGluZyBhIHZhbHVlLCB3aGljaCBpcyBpbnRlbnRpb25hbCBoZXJlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb25zdW1lciwge1xuICAgICAgUHJvdmlkZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlcikge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIgPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLlByb3ZpZGVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LlByb3ZpZGVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250ZXh0LlByb3ZpZGVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfUHJvdmlkZXIpIHtcbiAgICAgICAgICBjb250ZXh0LlByb3ZpZGVyID0gX1Byb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fY3VycmVudFZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gX2N1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9jdXJyZW50VmFsdWUyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfY3VycmVudFZhbHVlMikge1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTIgPSBfY3VycmVudFZhbHVlMjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF90aHJlYWRDb3VudDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fdGhyZWFkQ291bnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF90aHJlYWRDb3VudCkge1xuICAgICAgICAgIGNvbnRleHQuX3RocmVhZENvdW50ID0gX3RocmVhZENvdW50O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgQ29uc3VtZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycykge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLkNvbnN1bWVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LkNvbnN1bWVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250ZXh0LkNvbnN1bWVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGlzcGxheU5hbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuZGlzcGxheU5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lcikge1xuICAgICAgICAgICAgd2FybignU2V0dGluZyBgZGlzcGxheU5hbWVgIG9uIENvbnRleHQuQ29uc3VtZXIgaGFzIG5vIGVmZmVjdC4gJyArIFwiWW91IHNob3VsZCBzZXQgaXQgZGlyZWN0bHkgb24gdGhlIGNvbnRleHQgd2l0aCBDb250ZXh0LmRpc3BsYXlOYW1lID0gJyVzJy5cIiwgZGlzcGxheU5hbWUpO1xuXG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgcHJvcGVydGllcyBiZWNhdXNlIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZCBkZWZpbmVQcm9wZXJ0eVxuXG4gICAgY29udGV4dC5Db25zdW1lciA9IENvbnN1bWVyO1xuICB9XG5cbiAge1xuICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IG51bGw7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gY29udGV4dDtcbn1cblxudmFyIFVuaW5pdGlhbGl6ZWQgPSAtMTtcbnZhciBQZW5kaW5nID0gMDtcbnZhciBSZXNvbHZlZCA9IDE7XG52YXIgUmVqZWN0ZWQgPSAyO1xuXG5mdW5jdGlvbiBsYXp5SW5pdGlhbGl6ZXIocGF5bG9hZCkge1xuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBVbmluaXRpYWxpemVkKSB7XG4gICAgdmFyIGN0b3IgPSBwYXlsb2FkLl9yZXN1bHQ7XG4gICAgdmFyIHRoZW5hYmxlID0gY3RvcigpOyAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuXG4gICAgdmFyIHBlbmRpbmcgPSBwYXlsb2FkO1xuICAgIHBlbmRpbmcuX3N0YXR1cyA9IFBlbmRpbmc7XG4gICAgcGVuZGluZy5fcmVzdWx0ID0gdGhlbmFibGU7XG4gICAgdGhlbmFibGUudGhlbihmdW5jdGlvbiAobW9kdWxlT2JqZWN0KSB7XG4gICAgICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBQZW5kaW5nKSB7XG4gICAgICAgIHZhciBkZWZhdWx0RXhwb3J0ID0gbW9kdWxlT2JqZWN0LmRlZmF1bHQ7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmIChkZWZhdWx0RXhwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVycm9yKCdsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXBvcnQoKSBjYWxsLiAnICsgJ0luc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICAnY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcCcgKyBcIm9ydCgnLi9NeUNvbXBvbmVudCcpKVwiLCBtb2R1bGVPYmplY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuXG5cbiAgICAgICAgdmFyIHJlc29sdmVkID0gcGF5bG9hZDtcbiAgICAgICAgcmVzb2x2ZWQuX3N0YXR1cyA9IFJlc29sdmVkO1xuICAgICAgICByZXNvbHZlZC5fcmVzdWx0ID0gZGVmYXVsdEV4cG9ydDtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgLy8gVHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS5cbiAgICAgICAgdmFyIHJlamVjdGVkID0gcGF5bG9hZDtcbiAgICAgICAgcmVqZWN0ZWQuX3N0YXR1cyA9IFJlamVjdGVkO1xuICAgICAgICByZWplY3RlZC5fcmVzdWx0ID0gZXJyb3I7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBSZXNvbHZlZCkge1xuICAgIHJldHVybiBwYXlsb2FkLl9yZXN1bHQ7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgcGF5bG9hZC5fcmVzdWx0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGxhenkoY3Rvcikge1xuICB2YXIgcGF5bG9hZCA9IHtcbiAgICAvLyBXZSB1c2UgdGhlc2UgZmllbGRzIHRvIHN0b3JlIHRoZSByZXN1bHQuXG4gICAgX3N0YXR1czogLTEsXG4gICAgX3Jlc3VsdDogY3RvclxuICB9O1xuICB2YXIgbGF6eVR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0xBWllfVFlQRSxcbiAgICBfcGF5bG9hZDogcGF5bG9hZCxcbiAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gIH07XG5cbiAge1xuICAgIC8vIEluIHByb2R1Y3Rpb24sIHRoaXMgd291bGQganVzdCBzZXQgaXQgb24gdGhlIG9iamVjdC5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuICAgIHZhciBwcm9wVHlwZXM7IC8vICRGbG93Rml4TWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxhenlUeXBlLCB7XG4gICAgICBkZWZhdWx0UHJvcHM6IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZGVmYXVsdFByb3BzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdEZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgICBlcnJvcignUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgZGVmYXVsdFByb3BzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuXG4gICAgICAgICAgZGVmYXVsdFByb3BzID0gbmV3RGVmYXVsdFByb3BzOyAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdkZWZhdWx0UHJvcHMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwcm9wVHlwZXM6IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFR5cGVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcm9wVHlwZXMpIHtcbiAgICAgICAgICBlcnJvcignUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgcHJvcFR5cGVzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuXG4gICAgICAgICAgcHJvcFR5cGVzID0gbmV3UHJvcFR5cGVzOyAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdwcm9wVHlwZXMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsYXp5VHlwZTtcbn1cblxuZnVuY3Rpb24gZm9yd2FyZFJlZihyZW5kZXIpIHtcbiAge1xuICAgIGlmIChyZW5kZXIgIT0gbnVsbCAmJiByZW5kZXIuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHJlY2VpdmVkIGEgYG1lbW9gICcgKyAnY29tcG9uZW50LiBJbnN0ZWFkIG9mIGZvcndhcmRSZWYobWVtbyguLi4pKSwgdXNlICcgKyAnbWVtbyhmb3J3YXJkUmVmKC4uLikpLicpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHdhcyBnaXZlbiAlcy4nLCByZW5kZXIgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgcmVuZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJlbmRlci5sZW5ndGggIT09IDAgJiYgcmVuZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGFjY2VwdCBleGFjdGx5IHR3byBwYXJhbWV0ZXJzOiBwcm9wcyBhbmQgcmVmLiAlcycsIHJlbmRlci5sZW5ndGggPT09IDEgPyAnRGlkIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSByZWYgcGFyYW1ldGVyPycgOiAnQW55IGFkZGl0aW9uYWwgcGFyYW1ldGVyIHdpbGwgYmUgdW5kZWZpbmVkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZW5kZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHJlbmRlci5kZWZhdWx0UHJvcHMgIT0gbnVsbCB8fCByZW5kZXIucHJvcFR5cGVzICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBkbyBub3Qgc3VwcG9ydCBwcm9wVHlwZXMgb3IgZGVmYXVsdFByb3BzLiAnICsgJ0RpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgYSBSZWFjdCBjb21wb25lbnQ/Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLFxuICAgIHJlbmRlcjogcmVuZGVyXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAocmVuZGVyLmRpc3BsYXlOYW1lID09IG51bGwpIHtcbiAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50IHx8IHR5cGUgPT09IGV4cG9ydHMuUHJvZmlsZXIgfHwgdHlwZSA9PT0gUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdHJpY3RNb2RlIHx8IHR5cGUgPT09IGV4cG9ydHMuU3VzcGVuc2UgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1lbW8odHlwZSwgY29tcGFyZSkge1xuICB7XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkpIHtcbiAgICAgIGVycm9yKCdtZW1vOiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGNvbXBvbmVudC4gSW5zdGVhZCAnICsgJ3JlY2VpdmVkOiAlcycsIHR5cGUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb21wYXJlOiBjb21wYXJlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29tcGFyZVxuICB9O1xuXG4gIHtcbiAgICB2YXIgb3duTmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudFR5cGUsICdkaXNwbGF5TmFtZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgb3duTmFtZSA9IG5hbWU7XG5cbiAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHR5cGUuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEaXNwYXRjaGVyKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDtcblxuICBpZiAoIShkaXNwYXRjaGVyICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcblxuICB7XG4gICAgaWYgKHVuc3RhYmxlX29ic2VydmVkQml0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcigndXNlQ29udGV4dCgpIHNlY29uZCBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlICcgKyAndXNlIGluIFJlYWN0LiBQYXNzaW5nIGl0IGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnWW91IHBhc3NlZDogJXMuJXMnLCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMsIHR5cGVvZiB1bnN0YWJsZV9vYnNlcnZlZEJpdHMgPT09ICdudW1iZXInICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzJdKSA/ICdcXG5cXG5EaWQgeW91IGNhbGwgYXJyYXkubWFwKHVzZUNvbnRleHQpPyAnICsgJ0NhbGxpbmcgSG9va3MgaW5zaWRlIGEgbG9vcCBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0xlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzJyA6ICcnKTtcbiAgICB9IC8vIFRPRE86IGFkZCBhIG1vcmUgZ2VuZXJpYyB3YXJuaW5nIGZvciBpbnZhbGlkIHZhbHVlcy5cblxuXG4gICAgaWYgKENvbnRleHQuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJlYWxDb250ZXh0ID0gQ29udGV4dC5fY29udGV4dDsgLy8gRG9uJ3QgZGVkdXBsaWNhdGUgYmVjYXVzZSB0aGlzIGxlZ2l0aW1hdGVseSBjYXVzZXMgYnVnc1xuICAgICAgLy8gYW5kIG5vYm9keSBzaG91bGQgYmUgdXNpbmcgdGhpcyBpbiBleGlzdGluZyBjb2RlLlxuXG4gICAgICBpZiAocmVhbENvbnRleHQuQ29uc3VtZXIgPT09IENvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LkNvbnN1bWVyKSBpcyBub3Qgc3VwcG9ydGVkLCBtYXkgY2F1c2UgYnVncywgYW5kIHdpbGwgYmUgJyArICdyZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH0gZWxzZSBpZiAocmVhbENvbnRleHQuUHJvdmlkZXIgPT09IENvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LlByb3ZpZGVyKSBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDb250ZXh0KENvbnRleHQsIHVuc3RhYmxlX29ic2VydmVkQml0cyk7XG59XG5mdW5jdGlvbiB1c2VTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VTdGF0ZShpbml0aWFsU3RhdGUpO1xufVxuZnVuY3Rpb24gdXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbn1cbmZ1bmN0aW9uIHVzZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWYoaW5pdGlhbFZhbHVlKTtcbn1cbmZ1bmN0aW9uIHVzZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTWVtbyhjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VNZW1vKGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICB7XG4gICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgIHJldHVybiBkaXNwYXRjaGVyLnVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKTtcbiAgfVxufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuU3VzcGVuc2U6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd247XG5cbntcbiAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgIHZhciBsaW5lTnVtYmVyID0gc291cmNlLmxpbmVOdW1iZXI7XG4gICAgcmV0dXJuICdcXG5cXG5DaGVjayB5b3VyIGNvZGUgYXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhlbGVtZW50UHJvcHMpIHtcbiAgaWYgKGVsZW1lbnRQcm9wcyAhPT0gbnVsbCAmJiBlbGVtZW50UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShlbGVtZW50UHJvcHMuX19zb3VyY2UpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cblxuXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gIGlmICghaW5mbykge1xuICAgIHZhciBwYXJlbnROYW1lID0gdHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lO1xuXG4gICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgIGluZm8gPSBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5mbztcbn1cbi8qKlxuICogV2FybiBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQga2V5IGFzc2lnbmVkIHRvIGl0LlxuICogVGhpcyBlbGVtZW50IGlzIGluIGFuIGFycmF5LiBUaGUgYXJyYXkgY291bGQgZ3JvdyBhbmQgc2hyaW5rIG9yIGJlXG4gKiByZW9yZGVyZWQuIEFsbCBjaGlsZHJlbiB0aGF0IGhhdmVuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBhcmUgcmVxdWlyZWQgdG9cbiAqIGhhdmUgYSBcImtleVwiIHByb3BlcnR5IGFzc2lnbmVkIHRvIGl0LiBFcnJvciBzdGF0dXNlcyBhcmUgY2FjaGVkIHNvIGEgd2FybmluZ1xuICogd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKTtcblxuICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAvLyBhc3NpZ25pbmcgaXQgYSBrZXkuXG5cbiAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxuICAgIGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGdldENvbXBvbmVudE5hbWUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgfVxuXG4gIHtcbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICB9XG59XG4vKipcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxuICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuXG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXG4gICAgaWYgKG5vZGUuX3N0b3JlKSB7XG4gICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAvLyBidXQgbm93IHdlIHByaW50IGEgc2VwYXJhdGUgd2FybmluZyBmb3IgdGhlbSBsYXRlci5cbiAgICAgIGlmIChpdGVyYXRvckZuICE9PSBub2RlLmVudHJpZXMpIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICB2YXIgc3RlcDtcblxuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxuICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwgfHwgdHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9wVHlwZXM7XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIE5vdGU6IE1lbW8gb25seSBjaGVja3Mgb3V0ZXIgcHJvcHMgaGVyZS5cbiAgICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wVHlwZXMpIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLlByb3BUeXBlcyAhPT0gdW5kZWZpbmVkICYmICFwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bikge1xuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuXG4gICAgICB2YXIgX25hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpO1xuXG4gICAgICBlcnJvcignQ29tcG9uZW50ICVzIGRlY2xhcmVkIGBQcm9wVHlwZXNgIGluc3RlYWQgb2YgYHByb3BUeXBlc2AuIERpZCB5b3UgbWlzc3BlbGwgdGhlIHByb3BlcnR5IGFzc2lnbm1lbnQ/JywgX25hbWUgfHwgJ1Vua25vd24nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nICYmICF0eXBlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcmFnbWVudC5wcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2tleScpIHtcbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgYHJlZmAgc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4nKTtcblxuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIHZhbGlkVHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKTsgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG9cbiAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci5cblxuICBpZiAoIXZhbGlkVHlwZSkge1xuICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtRm9yUHJvcHMocHJvcHMpO1xuXG4gICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgIGluZm8gKz0gc291cmNlSW5mbztcbiAgICB9IGVsc2Uge1xuICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcbiAgICB9XG5cbiAgICB2YXIgdHlwZVN0cmluZztcblxuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ251bGwnO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgaW5mbyA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD8nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgfVxuXG4gICAge1xuICAgICAgZXJyb3IoJ1JlYWN0LmNyZWF0ZUVsZW1lbnQ6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmcgZXJyb3JzLlxuICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gIC8vIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcblxuXG4gIGlmICh2YWxpZFR5cGUpIHtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZSA9PT0gZXhwb3J0cy5GcmFnbWVudCkge1xuICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxudmFyIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gZmFsc2U7XG5mdW5jdGlvbiBjcmVhdGVGYWN0b3J5V2l0aFZhbGlkYXRpb24odHlwZSkge1xuICB2YXIgdmFsaWRhdGVkRmFjdG9yeSA9IGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbi5iaW5kKG51bGwsIHR5cGUpO1xuICB2YWxpZGF0ZWRGYWN0b3J5LnR5cGUgPSB0eXBlO1xuXG4gIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5KSB7XG4gICAgICBkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ1JlYWN0LmNyZWF0ZUZhY3RvcnkoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBDb25zaWRlciB1c2luZyBKU1ggJyArICdvciB1c2UgUmVhY3QuY3JlYXRlRWxlbWVudCgpIGRpcmVjdGx5IGluc3RlYWQuJyk7XG4gICAgfSAvLyBMZWdhY3kgaG9vazogcmVtb3ZlIGl0XG5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0ZWRGYWN0b3J5LCAndHlwZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJ0ZhY3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhlIGNsYXNzIGRpcmVjdGx5ICcgKyAnYmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4nKTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3R5cGUnLCB7XG4gICAgICAgICAgdmFsdWU6IHR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlZEZhY3Rvcnk7XG59XG5mdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbihlbGVtZW50LCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBjbG9uZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgbmV3RWxlbWVudC50eXBlKTtcbiAgfVxuXG4gIHZhbGlkYXRlUHJvcFR5cGVzKG5ld0VsZW1lbnQpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cblxue1xuXG4gIHRyeSB7XG4gICAgdmFyIGZyb3plbk9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuXG4gICAgbmV3IE1hcChbW2Zyb3plbk9iamVjdCwgbnVsbF1dKTtcbiAgICBuZXcgU2V0KFtmcm96ZW5PYmplY3RdKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAqL1xuICB9IGNhdGNoIChlKSB7XG4gIH1cbn1cblxudmFyIGNyZWF0ZUVsZW1lbnQkMSA9ICBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNsb25lRWxlbWVudCQxID0gIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uIDtcbnZhciBjcmVhdGVGYWN0b3J5ID0gIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbiA7XG52YXIgQ2hpbGRyZW4gPSB7XG4gIG1hcDogbWFwQ2hpbGRyZW4sXG4gIGZvckVhY2g6IGZvckVhY2hDaGlsZHJlbixcbiAgY291bnQ6IGNvdW50Q2hpbGRyZW4sXG4gIHRvQXJyYXk6IHRvQXJyYXksXG4gIG9ubHk6IG9ubHlDaGlsZFxufTtcblxuZXhwb3J0cy5DaGlsZHJlbiA9IENoaWxkcmVuO1xuZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG5leHBvcnRzLlB1cmVDb21wb25lbnQgPSBQdXJlQ29tcG9uZW50O1xuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzO1xuZXhwb3J0cy5jbG9uZUVsZW1lbnQgPSBjbG9uZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ7XG5leHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50JDE7XG5leHBvcnRzLmNyZWF0ZUZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5O1xuZXhwb3J0cy5jcmVhdGVSZWYgPSBjcmVhdGVSZWY7XG5leHBvcnRzLmZvcndhcmRSZWYgPSBmb3J3YXJkUmVmO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudCA9IGlzVmFsaWRFbGVtZW50O1xuZXhwb3J0cy5sYXp5ID0gbGF6eTtcbmV4cG9ydHMubWVtbyA9IG1lbW87XG5leHBvcnRzLnVzZUNhbGxiYWNrID0gdXNlQ2FsbGJhY2s7XG5leHBvcnRzLnVzZUNvbnRleHQgPSB1c2VDb250ZXh0O1xuZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gdXNlRGVidWdWYWx1ZTtcbmV4cG9ydHMudXNlRWZmZWN0ID0gdXNlRWZmZWN0O1xuZXhwb3J0cy51c2VJbXBlcmF0aXZlSGFuZGxlID0gdXNlSW1wZXJhdGl2ZUhhbmRsZTtcbmV4cG9ydHMudXNlTGF5b3V0RWZmZWN0ID0gdXNlTGF5b3V0RWZmZWN0O1xuZXhwb3J0cy51c2VNZW1vID0gdXNlTWVtbztcbmV4cG9ydHMudXNlUmVkdWNlciA9IHVzZVJlZHVjZXI7XG5leHBvcnRzLnVzZVJlZiA9IHVzZVJlZjtcbmV4cG9ydHMudXNlU3RhdGUgPSB1c2VTdGF0ZTtcbmV4cG9ydHMudmVyc2lvbiA9IFJlYWN0VmVyc2lvbjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKiogQGxpY2Vuc2UgUmVhY3QgdjAuMjAuMlxuICogc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIGVuYWJsZVNjaGVkdWxlckRlYnVnZ2luZyA9IGZhbHNlO1xudmFyIGVuYWJsZVByb2ZpbGluZyA9IGZhbHNlO1xuXG52YXIgcmVxdWVzdEhvc3RDYWxsYmFjaztcbnZhciByZXF1ZXN0SG9zdFRpbWVvdXQ7XG52YXIgY2FuY2VsSG9zdFRpbWVvdXQ7XG52YXIgcmVxdWVzdFBhaW50O1xudmFyIGhhc1BlcmZvcm1hbmNlTm93ID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xuXG5pZiAoaGFzUGVyZm9ybWFuY2VOb3cpIHtcbiAgdmFyIGxvY2FsUGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZTtcblxuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxQZXJmb3JtYW5jZS5ub3coKTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBsb2NhbERhdGUgPSBEYXRlO1xuICB2YXIgaW5pdGlhbFRpbWUgPSBsb2NhbERhdGUubm93KCk7XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGxvY2FsRGF0ZS5ub3coKSAtIGluaXRpYWxUaW1lO1xuICB9O1xufVxuXG5pZiAoIC8vIElmIFNjaGVkdWxlciBydW5zIGluIGEgbm9uLURPTSBlbnZpcm9ubWVudCwgaXQgZmFsbHMgYmFjayB0byBhIG5haXZlXG4vLyBpbXBsZW1lbnRhdGlvbiB1c2luZyBzZXRUaW1lb3V0LlxudHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgLy8gQ2hlY2sgaWYgTWVzc2FnZUNoYW5uZWwgaXMgc3VwcG9ydGVkLCB0b28uXG50eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICdmdW5jdGlvbicpIHtcbiAgLy8gSWYgdGhpcyBhY2NpZGVudGFsbHkgZ2V0cyBpbXBvcnRlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LCBlLmcuIEphdmFTY3JpcHRDb3JlLFxuICAvLyBmYWxsYmFjayB0byBhIG5haXZlIGltcGxlbWVudGF0aW9uLlxuICB2YXIgX2NhbGxiYWNrID0gbnVsbDtcbiAgdmFyIF90aW1lb3V0SUQgPSBudWxsO1xuXG4gIHZhciBfZmx1c2hDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoX2NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICB2YXIgaGFzUmVtYWluaW5nVGltZSA9IHRydWU7XG5cbiAgICAgICAgX2NhbGxiYWNrKGhhc1JlbWFpbmluZ1RpbWUsIGN1cnJlbnRUaW1lKTtcblxuICAgICAgICBfY2FsbGJhY2sgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzZXRUaW1lb3V0KF9mbHVzaENhbGxiYWNrLCAwKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RDYWxsYmFjayA9IGZ1bmN0aW9uIChjYikge1xuICAgIGlmIChfY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCByZS1lbnRyYW5jeS5cbiAgICAgIHNldFRpbWVvdXQocmVxdWVzdEhvc3RDYWxsYmFjaywgMCwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfY2FsbGJhY2sgPSBjYjtcbiAgICAgIHNldFRpbWVvdXQoX2ZsdXNoQ2FsbGJhY2ssIDApO1xuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoY2IsIG1zKSB7XG4gICAgX3RpbWVvdXRJRCA9IHNldFRpbWVvdXQoY2IsIG1zKTtcbiAgfTtcblxuICBjYW5jZWxIb3N0VGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjbGVhclRpbWVvdXQoX3RpbWVvdXRJRCk7XG4gIH07XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgcmVxdWVzdFBhaW50ID0gZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSA9IGZ1bmN0aW9uICgpIHt9O1xufSBlbHNlIHtcbiAgLy8gQ2FwdHVyZSBsb2NhbCByZWZlcmVuY2VzIHRvIG5hdGl2ZSBBUElzLCBpbiBjYXNlIGEgcG9seWZpbGwgb3ZlcnJpZGVzIHRoZW0uXG4gIHZhciBfc2V0VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0O1xuICB2YXIgX2NsZWFyVGltZW91dCA9IHdpbmRvdy5jbGVhclRpbWVvdXQ7XG5cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIFRPRE86IFNjaGVkdWxlciBubyBsb25nZXIgcmVxdWlyZXMgdGhlc2UgbWV0aG9kcyB0byBiZSBwb2x5ZmlsbGVkLiBCdXRcbiAgICAvLyBtYXliZSB3ZSB3YW50IHRvIGNvbnRpbnVlIHdhcm5pbmcgaWYgdGhleSBkb24ndCBleGlzdCwgdG8gcHJlc2VydmUgdGhlXG4gICAgLy8gb3B0aW9uIHRvIHJlbHkgb24gaXQgaW4gdGhlIGZ1dHVyZT9cbiAgICB2YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgICB2YXIgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XG5cbiAgICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuIFwiICsgJ01ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxscycpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ2Vycm9yJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnZXJyb3InXShcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgY2FuY2VsQW5pbWF0aW9uRnJhbWUuIFwiICsgJ01ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxscycpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICB2YXIgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gbnVsbDtcbiAgdmFyIHRhc2tUaW1lb3V0SUQgPSAtMTsgLy8gU2NoZWR1bGVyIHBlcmlvZGljYWxseSB5aWVsZHMgaW4gY2FzZSB0aGVyZSBpcyBvdGhlciB3b3JrIG9uIHRoZSBtYWluXG4gIC8vIHRocmVhZCwgbGlrZSB1c2VyIGV2ZW50cy4gQnkgZGVmYXVsdCwgaXQgeWllbGRzIG11bHRpcGxlIHRpbWVzIHBlciBmcmFtZS5cbiAgLy8gSXQgZG9lcyBub3QgYXR0ZW1wdCB0byBhbGlnbiB3aXRoIGZyYW1lIGJvdW5kYXJpZXMsIHNpbmNlIG1vc3QgdGFza3MgZG9uJ3RcbiAgLy8gbmVlZCB0byBiZSBmcmFtZSBhbGlnbmVkOyBmb3IgdGhvc2UgdGhhdCBkbywgdXNlIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cblxuICB2YXIgeWllbGRJbnRlcnZhbCA9IDU7XG4gIHZhciBkZWFkbGluZSA9IDA7IC8vIFRPRE86IE1ha2UgdGhpcyBjb25maWd1cmFibGVcblxuICB7XG4gICAgLy8gYGlzSW5wdXRQZW5kaW5nYCBpcyBub3QgYXZhaWxhYmxlLiBTaW5jZSB3ZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIGlmXG4gICAgLy8gdGhlcmUncyBwZW5kaW5nIGlucHV0LCBhbHdheXMgeWllbGQgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUuXG4gICAgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLnVuc3RhYmxlX25vdygpID49IGRlYWRsaW5lO1xuICAgIH07IC8vIFNpbmNlIHdlIHlpZWxkIGV2ZXJ5IGZyYW1lIHJlZ2FyZGxlc3MsIGByZXF1ZXN0UGFpbnRgIGhhcyBubyBlZmZlY3QuXG5cblxuICAgIHJlcXVlc3RQYWludCA9IGZ1bmN0aW9uICgpIHt9O1xuICB9XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSA9IGZ1bmN0aW9uIChmcHMpIHtcbiAgICBpZiAoZnBzIDwgMCB8fCBmcHMgPiAxMjUpIHtcbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ2Vycm9yJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnZXJyb3InXSgnZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsICcgKyAnZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZnBzID4gMCkge1xuICAgICAgeWllbGRJbnRlcnZhbCA9IE1hdGguZmxvb3IoMTAwMCAvIGZwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlc2V0IHRoZSBmcmFtZXJhdGVcbiAgICAgIHlpZWxkSW50ZXJ2YWwgPSA1O1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7IC8vIFlpZWxkIGFmdGVyIGB5aWVsZEludGVydmFsYCBtcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB3ZSBhcmUgaW4gdGhlIHZzeW5jXG4gICAgICAvLyBjeWNsZS4gVGhpcyBtZWFucyB0aGVyZSdzIGFsd2F5cyB0aW1lIHJlbWFpbmluZyBhdCB0aGUgYmVnaW5uaW5nIG9mXG4gICAgICAvLyB0aGUgbWVzc2FnZSBldmVudC5cblxuICAgICAgZGVhZGxpbmUgPSBjdXJyZW50VGltZSArIHlpZWxkSW50ZXJ2YWw7XG4gICAgICB2YXIgaGFzVGltZVJlbWFpbmluZyA9IHRydWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBoYXNNb3JlV29yayA9IHNjaGVkdWxlZEhvc3RDYWxsYmFjayhoYXNUaW1lUmVtYWluaW5nLCBjdXJyZW50VGltZSk7XG5cbiAgICAgICAgaWYgKCFoYXNNb3JlV29yaykge1xuICAgICAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSdzIG1vcmUgd29yaywgc2NoZWR1bGUgdGhlIG5leHQgbWVzc2FnZSBldmVudCBhdCB0aGUgZW5kXG4gICAgICAgICAgLy8gb2YgdGhlIHByZWNlZGluZyBvbmUuXG4gICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgYSBzY2hlZHVsZXIgdGFzayB0aHJvd3MsIGV4aXQgdGhlIGN1cnJlbnQgYnJvd3NlciB0YXNrIHNvIHRoZVxuICAgICAgICAvLyBlcnJvciBjYW4gYmUgb2JzZXJ2ZWQuXG4gICAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICAgIH0gLy8gWWllbGRpbmcgdG8gdGhlIGJyb3dzZXIgd2lsbCBnaXZlIGl0IGEgY2hhbmNlIHRvIHBhaW50LCBzbyB3ZSBjYW5cbiAgfTtcblxuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICB2YXIgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lO1xuXG4gIHJlcXVlc3RIb3N0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgIGlmICghaXNNZXNzYWdlTG9vcFJ1bm5pbmcpIHtcbiAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0VGltZW91dCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgbXMpIHtcbiAgICB0YXNrVGltZW91dElEID0gX3NldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2soZXhwb3J0cy51bnN0YWJsZV9ub3coKSk7XG4gICAgfSwgbXMpO1xuICB9O1xuXG4gIGNhbmNlbEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIF9jbGVhclRpbWVvdXQodGFza1RpbWVvdXRJRCk7XG5cbiAgICB0YXNrVGltZW91dElEID0gLTE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHB1c2goaGVhcCwgbm9kZSkge1xuICB2YXIgaW5kZXggPSBoZWFwLmxlbmd0aDtcbiAgaGVhcC5wdXNoKG5vZGUpO1xuICBzaWZ0VXAoaGVhcCwgbm9kZSwgaW5kZXgpO1xufVxuZnVuY3Rpb24gcGVlayhoZWFwKSB7XG4gIHZhciBmaXJzdCA9IGhlYXBbMF07XG4gIHJldHVybiBmaXJzdCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpcnN0O1xufVxuZnVuY3Rpb24gcG9wKGhlYXApIHtcbiAgdmFyIGZpcnN0ID0gaGVhcFswXTtcblxuICBpZiAoZmlyc3QgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBsYXN0ID0gaGVhcC5wb3AoKTtcblxuICAgIGlmIChsYXN0ICE9PSBmaXJzdCkge1xuICAgICAgaGVhcFswXSA9IGxhc3Q7XG4gICAgICBzaWZ0RG93bihoZWFwLCBsYXN0LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3Q7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lmdFVwKGhlYXAsIG5vZGUsIGkpIHtcbiAgdmFyIGluZGV4ID0gaTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBwYXJlbnRJbmRleCA9IGluZGV4IC0gMSA+Pj4gMTtcbiAgICB2YXIgcGFyZW50ID0gaGVhcFtwYXJlbnRJbmRleF07XG5cbiAgICBpZiAocGFyZW50ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShwYXJlbnQsIG5vZGUpID4gMCkge1xuICAgICAgLy8gVGhlIHBhcmVudCBpcyBsYXJnZXIuIFN3YXAgcG9zaXRpb25zLlxuICAgICAgaGVhcFtwYXJlbnRJbmRleF0gPSBub2RlO1xuICAgICAgaGVhcFtpbmRleF0gPSBwYXJlbnQ7XG4gICAgICBpbmRleCA9IHBhcmVudEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcGFyZW50IGlzIHNtYWxsZXIuIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNpZnREb3duKGhlYXAsIG5vZGUsIGkpIHtcbiAgdmFyIGluZGV4ID0gaTtcbiAgdmFyIGxlbmd0aCA9IGhlYXAubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBsZWZ0SW5kZXggPSAoaW5kZXggKyAxKSAqIDIgLSAxO1xuICAgIHZhciBsZWZ0ID0gaGVhcFtsZWZ0SW5kZXhdO1xuICAgIHZhciByaWdodEluZGV4ID0gbGVmdEluZGV4ICsgMTtcbiAgICB2YXIgcmlnaHQgPSBoZWFwW3JpZ2h0SW5kZXhdOyAvLyBJZiB0aGUgbGVmdCBvciByaWdodCBub2RlIGlzIHNtYWxsZXIsIHN3YXAgd2l0aCB0aGUgc21hbGxlciBvZiB0aG9zZS5cblxuICAgIGlmIChsZWZ0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShsZWZ0LCBub2RlKSA8IDApIHtcbiAgICAgIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocmlnaHQsIGxlZnQpIDwgMCkge1xuICAgICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgICBoZWFwW3JpZ2h0SW5kZXhdID0gbm9kZTtcbiAgICAgICAgaW5kZXggPSByaWdodEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhcFtpbmRleF0gPSBsZWZ0O1xuICAgICAgICBoZWFwW2xlZnRJbmRleF0gPSBub2RlO1xuICAgICAgICBpbmRleCA9IGxlZnRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJpZ2h0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShyaWdodCwgbm9kZSkgPCAwKSB7XG4gICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgaGVhcFtyaWdodEluZGV4XSA9IG5vZGU7XG4gICAgICBpbmRleCA9IHJpZ2h0SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5laXRoZXIgY2hpbGQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gIC8vIENvbXBhcmUgc29ydCBpbmRleCBmaXJzdCwgdGhlbiB0YXNrIGlkLlxuICB2YXIgZGlmZiA9IGEuc29ydEluZGV4IC0gYi5zb3J0SW5kZXg7XG4gIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGEuaWQgLSBiLmlkO1xufVxuXG4vLyBUT0RPOiBVc2Ugc3ltYm9scz9cbnZhciBJbW1lZGlhdGVQcmlvcml0eSA9IDE7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSAyO1xudmFyIE5vcm1hbFByaW9yaXR5ID0gMztcbnZhciBMb3dQcmlvcml0eSA9IDQ7XG52YXIgSWRsZVByaW9yaXR5ID0gNTtcblxuZnVuY3Rpb24gbWFya1Rhc2tFcnJvcmVkKHRhc2ssIG1zKSB7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcblxudmFyIG1heFNpZ25lZDMxQml0SW50ID0gMTA3Mzc0MTgyMzsgLy8gVGltZXMgb3V0IGltbWVkaWF0ZWx5XG5cbnZhciBJTU1FRElBVEVfUFJJT1JJVFlfVElNRU9VVCA9IC0xOyAvLyBFdmVudHVhbGx5IHRpbWVzIG91dFxuXG52YXIgVVNFUl9CTE9DS0lOR19QUklPUklUWV9USU1FT1VUID0gMjUwO1xudmFyIE5PUk1BTF9QUklPUklUWV9USU1FT1VUID0gNTAwMDtcbnZhciBMT1dfUFJJT1JJVFlfVElNRU9VVCA9IDEwMDAwOyAvLyBOZXZlciB0aW1lcyBvdXRcblxudmFyIElETEVfUFJJT1JJVFlfVElNRU9VVCA9IG1heFNpZ25lZDMxQml0SW50OyAvLyBUYXNrcyBhcmUgc3RvcmVkIG9uIGEgbWluIGhlYXBcblxudmFyIHRhc2tRdWV1ZSA9IFtdO1xudmFyIHRpbWVyUXVldWUgPSBbXTsgLy8gSW5jcmVtZW50aW5nIGlkIGNvdW50ZXIuIFVzZWQgdG8gbWFpbnRhaW4gaW5zZXJ0aW9uIG9yZGVyLlxuXG52YXIgdGFza0lkQ291bnRlciA9IDE7IC8vIFBhdXNpbmcgdGhlIHNjaGVkdWxlciBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbnZhciBjdXJyZW50VGFzayA9IG51bGw7XG52YXIgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTsgLy8gVGhpcyBpcyBzZXQgd2hpbGUgcGVyZm9ybWluZyB3b3JrLCB0byBwcmV2ZW50IHJlLWVudHJhbmN5LlxuXG52YXIgaXNQZXJmb3JtaW5nV29yayA9IGZhbHNlO1xudmFyIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gZmFsc2U7XG52YXIgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKSB7XG4gIC8vIENoZWNrIGZvciB0YXNrcyB0aGF0IGFyZSBubyBsb25nZXIgZGVsYXllZCBhbmQgYWRkIHRoZW0gdG8gdGhlIHF1ZXVlLlxuICB2YXIgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gIHdoaWxlICh0aW1lciAhPT0gbnVsbCkge1xuICAgIGlmICh0aW1lci5jYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgLy8gVGltZXIgd2FzIGNhbmNlbGxlZC5cbiAgICAgIHBvcCh0aW1lclF1ZXVlKTtcbiAgICB9IGVsc2UgaWYgKHRpbWVyLnN0YXJ0VGltZSA8PSBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGltZXIgZmlyZWQuIFRyYW5zZmVyIHRvIHRoZSB0YXNrIHF1ZXVlLlxuICAgICAgcG9wKHRpbWVyUXVldWUpO1xuICAgICAgdGltZXIuc29ydEluZGV4ID0gdGltZXIuZXhwaXJhdGlvblRpbWU7XG4gICAgICBwdXNoKHRhc2tRdWV1ZSwgdGltZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW1haW5pbmcgdGltZXJzIGFyZSBwZW5kaW5nLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUaW1lb3V0KGN1cnJlbnRUaW1lKSB7XG4gIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG5cbiAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCkge1xuICAgIGlmIChwZWVrKHRhc2tRdWV1ZSkgIT09IG51bGwpIHtcbiAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gICAgICBpZiAoZmlyc3RUaW1lciAhPT0gbnVsbCkge1xuICAgICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoV29yayhoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSkge1xuXG5cbiAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcblxuICBpZiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCkge1xuICAgIC8vIFdlIHNjaGVkdWxlZCBhIHRpbWVvdXQgYnV0IGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZC4gQ2FuY2VsIGl0LlxuICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICBjYW5jZWxIb3N0VGltZW91dCgpO1xuICB9XG5cbiAgaXNQZXJmb3JtaW5nV29yayA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIGlmIChlbmFibGVQcm9maWxpbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoY3VycmVudFRhc2sgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICAgIG1hcmtUYXNrRXJyb3JlZChjdXJyZW50VGFzaywgY3VycmVudFRpbWUpO1xuICAgICAgICAgIGN1cnJlbnRUYXNrLmlzUXVldWVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gY2F0Y2ggaW4gcHJvZCBjb2RlIHBhdGguXG4gICAgICByZXR1cm4gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50VGFzayA9IG51bGw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgaXNQZXJmb3JtaW5nV29yayA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IGluaXRpYWxUaW1lO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG5cbiAgd2hpbGUgKGN1cnJlbnRUYXNrICE9PSBudWxsICYmICEoZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nICkpIHtcbiAgICBpZiAoY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPiBjdXJyZW50VGltZSAmJiAoIWhhc1RpbWVSZW1haW5pbmcgfHwgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCgpKSkge1xuICAgICAgLy8gVGhpcyBjdXJyZW50VGFzayBoYXNuJ3QgZXhwaXJlZCwgYW5kIHdlJ3ZlIHJlYWNoZWQgdGhlIGRlYWRsaW5lLlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGNhbGxiYWNrID0gY3VycmVudFRhc2suY2FsbGJhY2s7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IG51bGw7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRUYXNrLnByaW9yaXR5TGV2ZWw7XG4gICAgICB2YXIgZGlkVXNlckNhbGxiYWNrVGltZW91dCA9IGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lO1xuXG4gICAgICB2YXIgY29udGludWF0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjayhkaWRVc2VyQ2FsbGJhY2tUaW1lb3V0KTtcbiAgICAgIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcblxuICAgICAgaWYgKHR5cGVvZiBjb250aW51YXRpb25DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IGNvbnRpbnVhdGlvbkNhbGxiYWNrO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBpZiAoY3VycmVudFRhc2sgPT09IHBlZWsodGFza1F1ZXVlKSkge1xuICAgICAgICAgIHBvcCh0YXNrUXVldWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3AodGFza1F1ZXVlKTtcbiAgICB9XG5cbiAgICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcbiAgfSAvLyBSZXR1cm4gd2hldGhlciB0aGVyZSdzIGFkZGl0aW9uYWwgd29ya1xuXG5cbiAgaWYgKGN1cnJlbnRUYXNrICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gICAgaWYgKGZpcnN0VGltZXIgIT09IG51bGwpIHtcbiAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5TGV2ZWwsIGV2ZW50SGFuZGxlcikge1xuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICB9XG5cbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfbmV4dChldmVudEhhbmRsZXIpIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWw7XG5cbiAgc3dpdGNoIChjdXJyZW50UHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgICAgLy8gU2hpZnQgZG93biB0byBub3JtYWwgcHJpb3JpdHlcbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEFueXRoaW5nIGxvd2VyIHRoYW4gbm9ybWFsIHByaW9yaXR5IHNob3VsZCByZW1haW4gYXQgdGhlIGN1cnJlbnQgbGV2ZWwuXG4gICAgICBwcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3dyYXBDYWxsYmFjayhjYWxsYmFjaykge1xuICB2YXIgcGFyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoaXMgaXMgYSBmb3JrIG9mIHJ1bldpdGhQcmlvcml0eSwgaW5saW5lZCBmb3IgcGVyZm9ybWFuY2UuXG4gICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcGFyZW50UHJpb3JpdHlMZXZlbDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gIHZhciBzdGFydFRpbWU7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgdmFyIGRlbGF5ID0gb3B0aW9ucy5kZWxheTtcblxuICAgIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWUgKyBkZWxheTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICB9XG5cbiAgdmFyIHRpbWVvdXQ7XG5cbiAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBJTU1FRElBVEVfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBVU0VSX0JMT0NLSU5HX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IElETEVfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBMT1dfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBkZWZhdWx0OlxuICAgICAgdGltZW91dCA9IE5PUk1BTF9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgZXhwaXJhdGlvblRpbWUgPSBzdGFydFRpbWUgKyB0aW1lb3V0O1xuICB2YXIgbmV3VGFzayA9IHtcbiAgICBpZDogdGFza0lkQ291bnRlcisrLFxuICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICBwcmlvcml0eUxldmVsOiBwcmlvcml0eUxldmVsLFxuICAgIHN0YXJ0VGltZTogc3RhcnRUaW1lLFxuICAgIGV4cGlyYXRpb25UaW1lOiBleHBpcmF0aW9uVGltZSxcbiAgICBzb3J0SW5kZXg6IC0xXG4gIH07XG5cbiAgaWYgKHN0YXJ0VGltZSA+IGN1cnJlbnRUaW1lKSB7XG4gICAgLy8gVGhpcyBpcyBhIGRlbGF5ZWQgdGFzay5cbiAgICBuZXdUYXNrLnNvcnRJbmRleCA9IHN0YXJ0VGltZTtcbiAgICBwdXNoKHRpbWVyUXVldWUsIG5ld1Rhc2spO1xuXG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSA9PT0gbnVsbCAmJiBuZXdUYXNrID09PSBwZWVrKHRpbWVyUXVldWUpKSB7XG4gICAgICAvLyBBbGwgdGFza3MgYXJlIGRlbGF5ZWQsIGFuZCB0aGlzIGlzIHRoZSB0YXNrIHdpdGggdGhlIGVhcmxpZXN0IGRlbGF5LlxuICAgICAgaWYgKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQpIHtcbiAgICAgICAgLy8gQ2FuY2VsIGFuIGV4aXN0aW5nIHRpbWVvdXQuXG4gICAgICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIH0gLy8gU2NoZWR1bGUgYSB0aW1lb3V0LlxuXG5cbiAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBzdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gZXhwaXJhdGlvblRpbWU7XG4gICAgcHVzaCh0YXNrUXVldWUsIG5ld1Rhc2spO1xuICAgIC8vIHdhaXQgdW50aWwgdGhlIG5leHQgdGltZSB3ZSB5aWVsZC5cblxuXG4gICAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCAmJiAhaXNQZXJmb3JtaW5nV29yaykge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdUYXNrO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbigpIHtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY29udGludWVFeGVjdXRpb24oKSB7XG5cbiAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCAmJiAhaXNQZXJmb3JtaW5nV29yaykge1xuICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUoKSB7XG4gIHJldHVybiBwZWVrKHRhc2tRdWV1ZSk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NhbmNlbENhbGxiYWNrKHRhc2spIHtcbiAgLy8gcmVtb3ZlIGZyb20gdGhlIHF1ZXVlIGJlY2F1c2UgeW91IGNhbid0IHJlbW92ZSBhcmJpdHJhcnkgbm9kZXMgZnJvbSBhblxuICAvLyBhcnJheSBiYXNlZCBoZWFwLCBvbmx5IHRoZSBmaXJzdCBvbmUuKVxuXG5cbiAgdGFzay5jYWxsYmFjayA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsKCkge1xuICByZXR1cm4gY3VycmVudFByaW9yaXR5TGV2ZWw7XG59XG5cbnZhciB1bnN0YWJsZV9yZXF1ZXN0UGFpbnQgPSByZXF1ZXN0UGFpbnQ7XG52YXIgdW5zdGFibGVfUHJvZmlsaW5nID0gIG51bGw7XG5cbmV4cG9ydHMudW5zdGFibGVfSWRsZVByaW9yaXR5ID0gSWRsZVByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSA9IEltbWVkaWF0ZVByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Mb3dQcmlvcml0eSA9IExvd1ByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSA9IE5vcm1hbFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Qcm9maWxpbmcgPSB1bnN0YWJsZV9Qcm9maWxpbmc7XG5leHBvcnRzLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gVXNlckJsb2NraW5nUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrID0gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s7XG5leHBvcnRzLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uID0gdW5zdGFibGVfY29udGludWVFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw7XG5leHBvcnRzLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlID0gdW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGU7XG5leHBvcnRzLnVuc3RhYmxlX25leHQgPSB1bnN0YWJsZV9uZXh0O1xuZXhwb3J0cy51bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbiA9IHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9yZXF1ZXN0UGFpbnQgPSB1bnN0YWJsZV9yZXF1ZXN0UGFpbnQ7XG5leHBvcnRzLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSA9IHVuc3RhYmxlX3J1bldpdGhQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayA9IHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s7XG5leHBvcnRzLnVuc3RhYmxlX3dyYXBDYWxsYmFjayA9IHVuc3RhYmxlX3dyYXBDYWxsYmFjaztcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXItdHJhY2luZy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBERUZBVUxUX1RIUkVBRF9JRCA9IDA7IC8vIENvdW50ZXJzIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy5cblxudmFyIGludGVyYWN0aW9uSURDb3VudGVyID0gMDtcbnZhciB0aHJlYWRJRENvdW50ZXIgPSAwOyAvLyBTZXQgb2YgY3VycmVudGx5IHRyYWNlZCBpbnRlcmFjdGlvbnMuXG4vLyBJbnRlcmFjdGlvbnMgXCJzdGFja1wiXHUyMDEzXG4vLyBNZWFuaW5nIHRoYXQgbmV3bHkgdHJhY2VkIGludGVyYWN0aW9ucyBhcmUgYXBwZW5kZWQgdG8gdGhlIHByZXZpb3VzbHkgYWN0aXZlIHNldC5cbi8vIFdoZW4gYW4gaW50ZXJhY3Rpb24gZ29lcyBvdXQgb2Ygc2NvcGUsIHRoZSBwcmV2aW91cyBzZXQgKGlmIGFueSkgaXMgcmVzdG9yZWQuXG5cbmV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYgPSBudWxsOyAvLyBMaXN0ZW5lcihzKSB0byBub3RpZnkgd2hlbiBpbnRlcmFjdGlvbnMgYmVnaW4gYW5kIGVuZC5cblxuZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYgPSBudWxsO1xuXG57XG4gIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYgPSB7XG4gICAgY3VycmVudDogbmV3IFNldCgpXG4gIH07XG4gIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2NsZWFyKGNhbGxiYWNrKSB7XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IG5ldyBTZXQoKTtcblxuICB0cnkge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEN1cnJlbnQoKSB7XG4gIHtcbiAgICByZXR1cm4gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRUaHJlYWRJRCgpIHtcbiAgcmV0dXJuICsrdGhyZWFkSURDb3VudGVyO1xufVxuZnVuY3Rpb24gdW5zdGFibGVfdHJhY2UobmFtZSwgdGltZXN0YW1wLCBjYWxsYmFjaykge1xuICB2YXIgdGhyZWFkSUQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IERFRkFVTFRfVEhSRUFEX0lEO1xuXG4gIHZhciBpbnRlcmFjdGlvbiA9IHtcbiAgICBfX2NvdW50OiAxLFxuICAgIGlkOiBpbnRlcmFjdGlvbklEQ291bnRlcisrLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgdGltZXN0YW1wOiB0aW1lc3RhbXBcbiAgfTtcbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7IC8vIFRyYWNlZCBpbnRlcmFjdGlvbnMgc2hvdWxkIHN0YWNrL2FjY3VtdWxhdGUuXG4gIC8vIFRvIGRvIHRoYXQsIGNsb25lIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cbiAgLy8gVGhlIHByZXZpb3VzIHNldCB3aWxsIGJlIHJlc3RvcmVkIHVwb24gY29tcGxldGlvbi5cblxuICB2YXIgaW50ZXJhY3Rpb25zID0gbmV3IFNldChwcmV2SW50ZXJhY3Rpb25zKTtcbiAgaW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IGludGVyYWN0aW9ucztcbiAgdmFyIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuICB2YXIgcmV0dXJuVmFsdWU7XG5cbiAgdHJ5IHtcbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsYmFjaygpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTsgLy8gSWYgbm8gYXN5bmMgd29yayB3YXMgc2NoZWR1bGVkIGZvciB0aGlzIGludGVyYWN0aW9uLFxuICAgICAgICAgIC8vIE5vdGlmeSBzdWJzY3JpYmVycyB0aGF0IGl0J3MgY29tcGxldGVkLlxuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuZnVuY3Rpb24gdW5zdGFibGVfd3JhcChjYWxsYmFjaykge1xuICB2YXIgdGhyZWFkSUQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IERFRkFVTFRfVEhSRUFEX0lEO1xuXG4gIHZhciB3cmFwcGVkSW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICB2YXIgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICBzdWJzY3JpYmVyLm9uV29ya1NjaGVkdWxlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gIH0gLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cbiAgLy8gVXBkYXRlIGFmdGVyIGNhbGxpbmcgc3Vic2NyaWJlcnMgaW4gY2FzZSBvZiBlcnJvci5cblxuXG4gIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gIH0pO1xuICB2YXIgaGFzUnVuID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gd3JhcHBlZCgpIHtcbiAgICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSB3cmFwcGVkSW50ZXJhY3Rpb25zO1xuICAgIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciByZXR1cm5WYWx1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoIWhhc1J1bikge1xuICAgICAgICAvLyBXZSBvbmx5IGV4cGVjdCBhIHdyYXBwZWQgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgb25jZSxcbiAgICAgICAgLy8gQnV0IGluIHRoZSBldmVudCB0aGF0IGl0J3MgZXhlY3V0ZWQgbW9yZSB0aGFuIG9uY2VcdTIwMTNcbiAgICAgICAgLy8gT25seSBkZWNyZW1lbnQgdGhlIG91dHN0YW5kaW5nIGludGVyYWN0aW9uIGNvdW50cyBvbmNlLlxuICAgICAgICBoYXNSdW4gPSB0cnVlOyAvLyBVcGRhdGUgcGVuZGluZyBhc3luYyBjb3VudHMgZm9yIGFsbCB3cmFwcGVkIGludGVyYWN0aW9ucy5cbiAgICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3Qgc2NoZWR1bGVkIGFzeW5jIHdvcmsgZm9yIGFueSBvZiB0aGVtLFxuICAgICAgICAvLyBNYXJrIHRoZW0gYXMgY29tcGxldGVkLlxuXG4gICAgICAgIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHdyYXBwZWQuY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrQ2FuY2VsZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBVcGRhdGUgcGVuZGluZyBhc3luYyBjb3VudHMgZm9yIGFsbCB3cmFwcGVkIGludGVyYWN0aW9ucy5cbiAgICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IHNjaGVkdWxlZCBhc3luYyB3b3JrIGZvciBhbnkgb2YgdGhlbSxcbiAgICAgIC8vIE1hcmsgdGhlbSBhcyBjb21wbGV0ZWQuXG4gICAgICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICBpZiAoc3Vic2NyaWJlciAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gd3JhcHBlZDtcbn1cblxudmFyIHN1YnNjcmliZXJzID0gbnVsbDtcblxue1xuICBzdWJzY3JpYmVycyA9IG5ldyBTZXQoKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAge1xuICAgIHN1YnNjcmliZXJzLmFkZChzdWJzY3JpYmVyKTtcblxuICAgIGlmIChzdWJzY3JpYmVycy5zaXplID09PSAxKSB7XG4gICAgICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50ID0ge1xuICAgICAgICBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZDogb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQsXG4gICAgICAgIG9uSW50ZXJhY3Rpb25UcmFjZWQ6IG9uSW50ZXJhY3Rpb25UcmFjZWQsXG4gICAgICAgIG9uV29ya0NhbmNlbGVkOiBvbldvcmtDYW5jZWxlZCxcbiAgICAgICAgb25Xb3JrU2NoZWR1bGVkOiBvbldvcmtTY2hlZHVsZWQsXG4gICAgICAgIG9uV29ya1N0YXJ0ZWQ6IG9uV29ya1N0YXJ0ZWQsXG4gICAgICAgIG9uV29ya1N0b3BwZWQ6IG9uV29ya1N0b3BwZWRcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB1bnN0YWJsZV91bnN1YnNjcmliZShzdWJzY3JpYmVyKSB7XG4gIHtcbiAgICBzdWJzY3JpYmVycy5kZWxldGUoc3Vic2NyaWJlcik7XG5cbiAgICBpZiAoc3Vic2NyaWJlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya0NhbmNlbGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya0NhbmNlbGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmV4cG9ydHMudW5zdGFibGVfY2xlYXIgPSB1bnN0YWJsZV9jbGVhcjtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudCA9IHVuc3RhYmxlX2dldEN1cnJlbnQ7XG5leHBvcnRzLnVuc3RhYmxlX2dldFRocmVhZElEID0gdW5zdGFibGVfZ2V0VGhyZWFkSUQ7XG5leHBvcnRzLnVuc3RhYmxlX3N1YnNjcmliZSA9IHVuc3RhYmxlX3N1YnNjcmliZTtcbmV4cG9ydHMudW5zdGFibGVfdHJhY2UgPSB1bnN0YWJsZV90cmFjZTtcbmV4cG9ydHMudW5zdGFibGVfdW5zdWJzY3JpYmUgPSB1bnN0YWJsZV91bnN1YnNjcmliZTtcbmV4cG9ydHMudW5zdGFibGVfd3JhcCA9IHVuc3RhYmxlX3dyYXA7XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci10cmFjaW5nLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWRvbS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbnZhciBTY2hlZHVsZXIgPSByZXF1aXJlKCdzY2hlZHVsZXInKTtcbnZhciB0cmFjaW5nID0gcmVxdWlyZSgnc2NoZWR1bGVyL3RyYWNpbmcnKTtcblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbi8vIGJ5IGNhbGxzIHRvIHRoZXNlIG1ldGhvZHMgYnkgYSBCYWJlbCBwbHVnaW4uXG4vL1xuLy8gSW4gUFJPRCAob3IgaW4gcGFja2FnZXMgd2l0aG91dCBhY2Nlc3MgdG8gUmVhY3QgaW50ZXJuYWxzKSxcbi8vIHRoZXkgYXJlIGxlZnQgYXMgdGhleSBhcmUgaW5zdGVhZC5cblxuZnVuY3Rpb24gd2Fybihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnd2FybicsIGZvcm1hdCwgYXJncyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfVxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiAnJyArIGl0ZW07XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG5pZiAoIVJlYWN0KSB7XG4gIHtcbiAgICB0aHJvdyBFcnJvciggXCJSZWFjdERPTSB3YXMgbG9hZGVkIGJlZm9yZSBSZWFjdC4gTWFrZSBzdXJlIHlvdSBsb2FkIHRoZSBSZWFjdCBwYWNrYWdlIGJlZm9yZSBsb2FkaW5nIFJlYWN0RE9NLlwiICk7XG4gIH1cbn1cblxudmFyIEZ1bmN0aW9uQ29tcG9uZW50ID0gMDtcbnZhciBDbGFzc0NvbXBvbmVudCA9IDE7XG52YXIgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCA9IDI7IC8vIEJlZm9yZSB3ZSBrbm93IHdoZXRoZXIgaXQgaXMgZnVuY3Rpb24gb3IgY2xhc3NcblxudmFyIEhvc3RSb290ID0gMzsgLy8gUm9vdCBvZiBhIGhvc3QgdHJlZS4gQ291bGQgYmUgbmVzdGVkIGluc2lkZSBhbm90aGVyIG5vZGUuXG5cbnZhciBIb3N0UG9ydGFsID0gNDsgLy8gQSBzdWJ0cmVlLiBDb3VsZCBiZSBhbiBlbnRyeSBwb2ludCB0byBhIGRpZmZlcmVudCByZW5kZXJlci5cblxudmFyIEhvc3RDb21wb25lbnQgPSA1O1xudmFyIEhvc3RUZXh0ID0gNjtcbnZhciBGcmFnbWVudCA9IDc7XG52YXIgTW9kZSA9IDg7XG52YXIgQ29udGV4dENvbnN1bWVyID0gOTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSAxMDtcbnZhciBGb3J3YXJkUmVmID0gMTE7XG52YXIgUHJvZmlsZXIgPSAxMjtcbnZhciBTdXNwZW5zZUNvbXBvbmVudCA9IDEzO1xudmFyIE1lbW9Db21wb25lbnQgPSAxNDtcbnZhciBTaW1wbGVNZW1vQ29tcG9uZW50ID0gMTU7XG52YXIgTGF6eUNvbXBvbmVudCA9IDE2O1xudmFyIEluY29tcGxldGVDbGFzc0NvbXBvbmVudCA9IDE3O1xudmFyIERlaHlkcmF0ZWRGcmFnbWVudCA9IDE4O1xudmFyIFN1c3BlbnNlTGlzdENvbXBvbmVudCA9IDE5O1xudmFyIEZ1bmRhbWVudGFsQ29tcG9uZW50ID0gMjA7XG52YXIgU2NvcGVDb21wb25lbnQgPSAyMTtcbnZhciBCbG9jayA9IDIyO1xudmFyIE9mZnNjcmVlbkNvbXBvbmVudCA9IDIzO1xudmFyIExlZ2FjeUhpZGRlbkNvbXBvbmVudCA9IDI0O1xuXG4vLyBGaWx0ZXIgY2VydGFpbiBET00gYXR0cmlidXRlcyAoZS5nLiBzcmMsIGhyZWYpIGlmIHRoZWlyIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncy5cblxudmFyIGVuYWJsZVByb2ZpbGVyVGltZXIgPSB0cnVlOyAvLyBSZWNvcmQgZHVyYXRpb25zIGZvciBjb21taXQgYW5kIHBhc3NpdmUgZWZmZWN0cyBwaGFzZXMuXG5cbnZhciBlbmFibGVGdW5kYW1lbnRhbEFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgU2NvcGUgc3VwcG9ydC5cbnZhciBlbmFibGVOZXdSZWNvbmNpbGVyID0gZmFsc2U7IC8vIEVycm9ycyB0aGF0IGFyZSB0aHJvd24gd2hpbGUgdW5tb3VudGluZyAob3IgYWZ0ZXIgaW4gdGhlIGNhc2Ugb2YgcGFzc2l2ZSBlZmZlY3RzKVxudmFyIHdhcm5BYm91dFN0cmluZ1JlZnMgPSBmYWxzZTtcblxudmFyIGFsbE5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoKTtcbi8qKlxuICogTWFwcGluZyBmcm9tIHJlZ2lzdHJhdGlvbiBuYW1lIHRvIGV2ZW50IG5hbWVcbiAqL1xuXG5cbnZhciByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzID0ge307XG4vKipcbiAqIE1hcHBpbmcgZnJvbSBsb3dlcmNhc2UgcmVnaXN0cmF0aW9uIG5hbWVzIHRvIHRoZSBwcm9wZXJseSBjYXNlZCB2ZXJzaW9uLFxuICogdXNlZCB0byB3YXJuIGluIHRoZSBjYXNlIG9mIG1pc3NpbmcgZXZlbnQgaGFuZGxlcnMuIEF2YWlsYWJsZVxuICogb25seSBpbiB0cnVlLlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuXG52YXIgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyA9ICB7fSA7IC8vIFRydXN0IHRoZSBkZXZlbG9wZXIgdG8gb25seSB1c2UgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyBpbiB0cnVlXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUgKyAnQ2FwdHVyZScsIGRlcGVuZGVuY2llcyk7XG59XG5mdW5jdGlvbiByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICB7XG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0pIHtcbiAgICAgIGVycm9yKCdFdmVudFJlZ2lzdHJ5OiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSAnICsgJ3JlZ2lzdHJhdGlvbiBuYW1lLCBgJXNgLicsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBkZXBlbmRlbmNpZXM7XG5cbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHJlZ2lzdHJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXSA9IHJlZ2lzdHJhdGlvbk5hbWU7XG5cbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSA9PT0gJ29uRG91YmxlQ2xpY2snKSB7XG4gICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLm9uZGJsY2xpY2sgPSByZWdpc3RyYXRpb25OYW1lO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgYWxsTmF0aXZlRXZlbnRzLmFkZChkZXBlbmRlbmNpZXNbaV0pO1xuICB9XG59XG5cbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKTtcblxuLy8gQSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4vLyBJdCBpcyBoYW5kbGVkIGJ5IFJlYWN0IHNlcGFyYXRlbHkgYW5kIHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG52YXIgUkVTRVJWRUQgPSAwOyAvLyBBIHNpbXBsZSBzdHJpbmcgYXR0cmlidXRlLlxuLy8gQXR0cmlidXRlcyB0aGF0IGFyZW4ndCBpbiB0aGUgZmlsdGVyIGFyZSBwcmVzdW1lZCB0byBoYXZlIHRoaXMgdHlwZS5cblxudmFyIFNUUklORyA9IDE7IC8vIEEgc3RyaW5nIGF0dHJpYnV0ZSB0aGF0IGFjY2VwdHMgYm9vbGVhbnMgaW4gUmVhY3QuIEluIEhUTUwsIHRoZXNlIGFyZSBjYWxsZWRcbi8vIFwiZW51bWVyYXRlZFwiIGF0dHJpYnV0ZXMgd2l0aCBcInRydWVcIiBhbmQgXCJmYWxzZVwiIGFzIHBvc3NpYmxlIHZhbHVlcy5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHNldCB0byBhIFwidHJ1ZVwiIHN0cmluZy5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBcImZhbHNlXCIgc3RyaW5nLlxuXG52YXIgQk9PTEVBTklTSF9TVFJJTkcgPSAyOyAvLyBBIHJlYWwgYm9vbGVhbiBhdHRyaWJ1dGUuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBwcmVzZW50IChzZXQgZWl0aGVyIHRvIGFuIGVtcHR5IHN0cmluZyBvciBpdHMgbmFtZSkuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgb21pdHRlZC5cblxudmFyIEJPT0xFQU4gPSAzOyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIGZsYWcgYXMgd2VsbCBhcyB3aXRoIGEgdmFsdWUuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBwcmVzZW50IChzZXQgZWl0aGVyIHRvIGFuIGVtcHR5IHN0cmluZyBvciBpdHMgbmFtZSkuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgb21pdHRlZC5cbi8vIEZvciBhbnkgb3RoZXIgdmFsdWUsIHNob3VsZCBiZSBwcmVzZW50IHdpdGggdGhhdCB2YWx1ZS5cblxudmFyIE9WRVJMT0FERURfQk9PTEVBTiA9IDQ7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IG11c3QgYmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIG51bWVyaWMuXG4vLyBXaGVuIGZhbHN5LCBpdCBzaG91bGQgYmUgcmVtb3ZlZC5cblxudmFyIE5VTUVSSUMgPSA1OyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBtdXN0IGJlIHBvc2l0aXZlIG51bWVyaWMgb3IgcGFyc2UgYXMgYSBwb3NpdGl2ZSBudW1lcmljLlxuLy8gV2hlbiBmYWxzeSwgaXQgc2hvdWxkIGJlIHJlbW92ZWQuXG5cbnZhciBQT1NJVElWRV9OVU1FUklDID0gNjtcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xudmFyIEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgPSBcIjpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcIjtcbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG52YXIgQVRUUklCVVRFX05BTUVfQ0hBUiA9IEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgKyBcIlxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXCI7XG52YXIgUk9PVF9BVFRSSUJVVEVfTkFNRSA9ICdkYXRhLXJlYWN0cm9vdCc7XG52YXIgVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVggPSBuZXcgUmVnRXhwKCdeWycgKyBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSICsgJ11bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fTtcbnZhciB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGlzQXR0cmlidXRlTmFtZVNhZmUoYXR0cmlidXRlTmFtZSkge1xuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWC50ZXN0KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuXG4gIHtcbiAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgbmFtZTogYCVzYCcsIGF0dHJpYnV0ZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkSWdub3JlQXR0cmlidXRlKG5hbWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQ7XG4gIH1cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPiAyICYmIChuYW1lWzBdID09PSAnbycgfHwgbmFtZVswXSA9PT0gJ08nKSAmJiAobmFtZVsxXSA9PT0gJ24nIHx8IG5hbWVbMV0gPT09ICdOJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICBjYXNlICdmdW5jdGlvbic6IC8vICRGbG93SXNzdWUgc3ltYm9sIGlzIHBlcmZlY3RseSB2YWxpZCBoZXJlXG5cbiAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAhcHJvcGVydHlJbmZvLmFjY2VwdHNCb29sZWFucztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJlZml4ID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDUpO1xuICAgICAgICAgIHJldHVybiBwcmVmaXggIT09ICdkYXRhLScgJiYgcHJlZml4ICE9PSAnYXJpYS0nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcblxuICAgIHN3aXRjaCAocHJvcGVydHlJbmZvLnR5cGUpIHtcbiAgICAgIGNhc2UgQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuICF2YWx1ZTtcblxuICAgICAgY2FzZSBPVkVSTE9BREVEX0JPT0xFQU46XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gZmFsc2U7XG5cbiAgICAgIGNhc2UgTlVNRVJJQzpcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKTtcblxuICAgICAgY2FzZSBQT1NJVElWRV9OVU1FUklDOlxuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUluZm8obmFtZSkge1xuICByZXR1cm4gcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHByb3BlcnRpZXNbbmFtZV0gOiBudWxsO1xufVxuXG5mdW5jdGlvbiBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgdHlwZSwgbXVzdFVzZVByb3BlcnR5LCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVOYW1lc3BhY2UsIHNhbml0aXplVVJMLCByZW1vdmVFbXB0eVN0cmluZykge1xuICB0aGlzLmFjY2VwdHNCb29sZWFucyA9IHR5cGUgPT09IEJPT0xFQU5JU0hfU1RSSU5HIHx8IHR5cGUgPT09IEJPT0xFQU4gfHwgdHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOO1xuICB0aGlzLmF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lO1xuICB0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZSA9IGF0dHJpYnV0ZU5hbWVzcGFjZTtcbiAgdGhpcy5tdXN0VXNlUHJvcGVydHkgPSBtdXN0VXNlUHJvcGVydHk7XG4gIHRoaXMucHJvcGVydHlOYW1lID0gbmFtZTtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5zYW5pdGl6ZVVSTCA9IHNhbml0aXplVVJMO1xuICB0aGlzLnJlbW92ZUVtcHR5U3RyaW5nID0gcmVtb3ZlRW1wdHlTdHJpbmc7XG59IC8vIFdoZW4gYWRkaW5nIGF0dHJpYnV0ZXMgdG8gdGhpcyBsaXN0LCBiZSBzdXJlIHRvIGFsc28gYWRkIHRoZW0gdG9cbi8vIHRoZSBgcG9zc2libGVTdGFuZGFyZE5hbWVzYCBtb2R1bGUgdG8gZW5zdXJlIGNhc2luZyBhbmQgaW5jb3JyZWN0XG4vLyBuYW1lIHdhcm5pbmdzLlxuXG5cbnZhciBwcm9wZXJ0aWVzID0ge307IC8vIFRoZXNlIHByb3BzIGFyZSByZXNlcnZlZCBieSBSZWFjdC4gVGhleSBzaG91bGRuJ3QgYmUgd3JpdHRlbiB0byB0aGUgRE9NLlxuXG52YXIgcmVzZXJ2ZWRQcm9wcyA9IFsnY2hpbGRyZW4nLCAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLCAvLyBUT0RPOiBUaGlzIHByZXZlbnRzIHRoZSBhc3NpZ25tZW50IG9mIGRlZmF1bHRWYWx1ZSB0byByZWd1bGFyXG4vLyBlbGVtZW50cyAobm90IGp1c3QgaW5wdXRzKS4gTm93IHRoYXQgUmVhY3RET01JbnB1dCBhc3NpZ25zIHRvIHRoZVxuLy8gZGVmYXVsdFZhbHVlIHByb3BlcnR5IC0tIGRvIHdlIG5lZWQgdGhpcz9cbidkZWZhdWx0VmFsdWUnLCAnZGVmYXVsdENoZWNrZWQnLCAnaW5uZXJIVE1MJywgJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZycsICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnLCAnc3R5bGUnXTtcbnJlc2VydmVkUHJvcHMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBSRVNFUlZFRCwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIEEgZmV3IFJlYWN0IHN0cmluZyBhdHRyaWJ1dGVzIGhhdmUgYSBkaWZmZXJlbnQgbmFtZS5cbi8vIFRoaXMgaXMgYSBtYXBwaW5nIGZyb20gUmVhY3QgcHJvcCBuYW1lcyB0byB0aGUgYXR0cmlidXRlIG5hbWVzLlxuXG5bWydhY2NlcHRDaGFyc2V0JywgJ2FjY2VwdC1jaGFyc2V0J10sIFsnY2xhc3NOYW1lJywgJ2NsYXNzJ10sIFsnaHRtbEZvcicsICdmb3InXSwgWydodHRwRXF1aXYnLCAnaHR0cC1lcXVpdiddXS5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBuYW1lID0gX3JlZlswXSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUgPSBfcmVmWzFdO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgXCJlbnVtZXJhdGVkXCIgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgYWNjZXB0IFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIuXG4vLyBJbiBSZWFjdCwgd2UgbGV0IHVzZXJzIHBhc3MgYHRydWVgIGFuZCBgZmFsc2VgIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5XG4vLyB0aGVzZSBhcmVuJ3QgYm9vbGVhbiBhdHRyaWJ1dGVzICh0aGV5IGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MpLlxuXG5bJ2NvbnRlbnRFZGl0YWJsZScsICdkcmFnZ2FibGUnLCAnc3BlbGxDaGVjaycsICd2YWx1ZSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTklTSF9TVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBcImVudW1lcmF0ZWRcIiBTVkcgYXR0cmlidXRlcyB0aGF0IGFjY2VwdCBcInRydWVcIiBhbmQgXCJmYWxzZVwiLlxuLy8gSW4gUmVhY3QsIHdlIGxldCB1c2VycyBwYXNzIGB0cnVlYCBhbmQgYGZhbHNlYCBldmVuIHRob3VnaCB0ZWNobmljYWxseVxuLy8gdGhlc2UgYXJlbid0IGJvb2xlYW4gYXR0cmlidXRlcyAodGhleSBhcmUgY29lcmNlZCB0byBzdHJpbmdzKS5cbi8vIFNpbmNlIHRoZXNlIGFyZSBTVkcgYXR0cmlidXRlcywgdGhlaXIgYXR0cmlidXRlIG5hbWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cblxuWydhdXRvUmV2ZXJzZScsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2ZvY3VzYWJsZScsICdwcmVzZXJ2ZUFscGhhJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOSVNIX1NUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGJvb2xlYW4gYXR0cmlidXRlcy5cblxuWydhbGxvd0Z1bGxTY3JlZW4nLCAnYXN5bmMnLCAvLyBOb3RlOiB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IHByZXZlbnRzIGl0IGZyb20gYmVpbmcgd3JpdHRlbiB0byB0aGUgRE9NXG4vLyBvbiB0aGUgY2xpZW50IHNpZGUgYmVjYXVzZSB0aGUgYnJvd3NlcnMgYXJlIGluY29uc2lzdGVudC4gSW5zdGVhZCB3ZSBjYWxsIGZvY3VzKCkuXG4nYXV0b0ZvY3VzJywgJ2F1dG9QbGF5JywgJ2NvbnRyb2xzJywgJ2RlZmF1bHQnLCAnZGVmZXInLCAnZGlzYWJsZWQnLCAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnLCAnZGlzYWJsZVJlbW90ZVBsYXliYWNrJywgJ2Zvcm1Ob1ZhbGlkYXRlJywgJ2hpZGRlbicsICdsb29wJywgJ25vTW9kdWxlJywgJ25vVmFsaWRhdGUnLCAnb3BlbicsICdwbGF5c0lubGluZScsICdyZWFkT25seScsICdyZXF1aXJlZCcsICdyZXZlcnNlZCcsICdzY29wZWQnLCAnc2VhbWxlc3MnLCAvLyBNaWNyb2RhdGFcbidpdGVtU2NvcGUnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU4sIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSB0aGUgZmV3IFJlYWN0IHByb3BzIHRoYXQgd2Ugc2V0IGFzIERPTSBwcm9wZXJ0aWVzXG4vLyByYXRoZXIgdGhhbiBhdHRyaWJ1dGVzLiBUaGVzZSBhcmUgYWxsIGJvb2xlYW5zLlxuXG5bJ2NoZWNrZWQnLCAvLyBOb3RlOiBgb3B0aW9uLnNlbGVjdGVkYCBpcyBub3QgdXBkYXRlZCBpZiBgc2VsZWN0Lm11bHRpcGxlYCBpc1xuLy8gZGlzYWJsZWQgd2l0aCBgcmVtb3ZlQXR0cmlidXRlYC4gV2UgaGF2ZSBzcGVjaWFsIGxvZ2ljIGZvciBoYW5kbGluZyB0aGlzLlxuJ211bHRpcGxlJywgJ211dGVkJywgJ3NlbGVjdGVkJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOLCB0cnVlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgYXJlIFwib3ZlcmxvYWRlZCBib29sZWFuc1wiOiB0aGV5IGJlaGF2ZSBsaWtlXG4vLyBib29sZWFucywgYnV0IGNhbiBhbHNvIGFjY2VwdCBhIHN0cmluZyB2YWx1ZS5cblxuWydjYXB0dXJlJywgJ2Rvd25sb2FkJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBPVkVSTE9BREVEX0JPT0xFQU4sIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXJzLlxuXG5bJ2NvbHMnLCAncm93cycsICdzaXplJywgJ3NwYW4nIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFBPU0lUSVZFX05VTUVSSUMsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgbXVzdCBiZSBudW1iZXJzLlxuXG5bJ3Jvd1NwYW4nLCAnc3RhcnQnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIE5VTUVSSUMsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7XG52YXIgQ0FNRUxJWkUgPSAvW1xcLVxcOl0oW2Etel0pL2c7XG5cbnZhciBjYXBpdGFsaXplID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gIHJldHVybiB0b2tlblsxXS50b1VwcGVyQ2FzZSgpO1xufTsgLy8gVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIFNWRyBhdHRyaWJ1dGVzIHRoYXQgbmVlZCBzcGVjaWFsIGNhc2luZywgbmFtZXNwYWNpbmcsXG4vLyBvciBib29sZWFuIHZhbHVlIGFzc2lnbm1lbnQuIFJlZ3VsYXIgYXR0cmlidXRlcyB0aGF0IGp1c3QgYWNjZXB0IHN0cmluZ3Ncbi8vIGFuZCBoYXZlIHRoZSBzYW1lIG5hbWVzIGFyZSBvbWl0dGVkLCBqdXN0IGxpa2UgaW4gdGhlIEhUTUwgYXR0cmlidXRlIGZpbHRlci5cbi8vIFNvbWUgb2YgdGhlc2UgYXR0cmlidXRlcyBjYW4gYmUgaGFyZCB0byBmaW5kLiBUaGlzIGxpc3Qgd2FzIGNyZWF0ZWQgYnlcbi8vIHNjcmFwaW5nIHRoZSBNRE4gZG9jdW1lbnRhdGlvbi5cblxuXG5bJ2FjY2VudC1oZWlnaHQnLCAnYWxpZ25tZW50LWJhc2VsaW5lJywgJ2FyYWJpYy1mb3JtJywgJ2Jhc2VsaW5lLXNoaWZ0JywgJ2NhcC1oZWlnaHQnLCAnY2xpcC1wYXRoJywgJ2NsaXAtcnVsZScsICdjb2xvci1pbnRlcnBvbGF0aW9uJywgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycsICdjb2xvci1wcm9maWxlJywgJ2NvbG9yLXJlbmRlcmluZycsICdkb21pbmFudC1iYXNlbGluZScsICdlbmFibGUtYmFja2dyb3VuZCcsICdmaWxsLW9wYWNpdHknLCAnZmlsbC1ydWxlJywgJ2Zsb29kLWNvbG9yJywgJ2Zsb29kLW9wYWNpdHknLCAnZm9udC1mYW1pbHknLCAnZm9udC1zaXplJywgJ2ZvbnQtc2l6ZS1hZGp1c3QnLCAnZm9udC1zdHJldGNoJywgJ2ZvbnQtc3R5bGUnLCAnZm9udC12YXJpYW50JywgJ2ZvbnQtd2VpZ2h0JywgJ2dseXBoLW5hbWUnLCAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCcsICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcsICdob3Jpei1hZHYteCcsICdob3Jpei1vcmlnaW4teCcsICdpbWFnZS1yZW5kZXJpbmcnLCAnbGV0dGVyLXNwYWNpbmcnLCAnbGlnaHRpbmctY29sb3InLCAnbWFya2VyLWVuZCcsICdtYXJrZXItbWlkJywgJ21hcmtlci1zdGFydCcsICdvdmVybGluZS1wb3NpdGlvbicsICdvdmVybGluZS10aGlja25lc3MnLCAncGFpbnQtb3JkZXInLCAncGFub3NlLTEnLCAncG9pbnRlci1ldmVudHMnLCAncmVuZGVyaW5nLWludGVudCcsICdzaGFwZS1yZW5kZXJpbmcnLCAnc3RvcC1jb2xvcicsICdzdG9wLW9wYWNpdHknLCAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbicsICdzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcycsICdzdHJva2UtZGFzaGFycmF5JywgJ3N0cm9rZS1kYXNob2Zmc2V0JywgJ3N0cm9rZS1saW5lY2FwJywgJ3N0cm9rZS1saW5lam9pbicsICdzdHJva2UtbWl0ZXJsaW1pdCcsICdzdHJva2Utb3BhY2l0eScsICdzdHJva2Utd2lkdGgnLCAndGV4dC1hbmNob3InLCAndGV4dC1kZWNvcmF0aW9uJywgJ3RleHQtcmVuZGVyaW5nJywgJ3VuZGVybGluZS1wb3NpdGlvbicsICd1bmRlcmxpbmUtdGhpY2tuZXNzJywgJ3VuaWNvZGUtYmlkaScsICd1bmljb2RlLXJhbmdlJywgJ3VuaXRzLXBlci1lbScsICd2LWFscGhhYmV0aWMnLCAndi1oYW5naW5nJywgJ3YtaWRlb2dyYXBoaWMnLCAndi1tYXRoZW1hdGljYWwnLCAndmVjdG9yLWVmZmVjdCcsICd2ZXJ0LWFkdi15JywgJ3ZlcnQtb3JpZ2luLXgnLCAndmVydC1vcmlnaW4teScsICd3b3JkLXNwYWNpbmcnLCAnd3JpdGluZy1tb2RlJywgJ3htbG5zOnhsaW5rJywgJ3gtaGVpZ2h0JyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBTdHJpbmcgU1ZHIGF0dHJpYnV0ZXMgd2l0aCB0aGUgeGxpbmsgbmFtZXNwYWNlLlxuXG5bJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lLnJlcGxhY2UoQ0FNRUxJWkUsIGNhcGl0YWxpemUpO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bWwgbmFtZXNwYWNlLlxuXG5bJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lLnJlcGxhY2UoQ0FNRUxJWkUsIGNhcGl0YWxpemUpO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScsIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXR0cmlidXRlIGV4aXN0cyBib3RoIGluIEhUTUwgYW5kIFNWRy5cbi8vIFRoZSBhdHRyaWJ1dGUgbmFtZSBpcyBjYXNlLXNlbnNpdGl2ZSBpbiBTVkcgc28gd2UgY2FuJ3QganVzdCB1c2Vcbi8vIHRoZSBSZWFjdCBuYW1lIGxpa2Ugd2UgZG8gZm9yIGF0dHJpYnV0ZXMgdGhhdCBleGlzdCBvbmx5IGluIEhUTUwuXG5cblsndGFiSW5kZXgnLCAnY3Jvc3NPcmlnaW4nXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHByb3BlcnRpZXNbYXR0cmlidXRlTmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKGF0dHJpYnV0ZU5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXR0cmlidXRlcyBhY2NlcHQgVVJMcy4gVGhlc2UgbXVzdCBub3QgYWxsb3cgamF2YXNjcmlwdDogVVJMUy5cbi8vIFRoZXNlIHdpbGwgYWxzbyBuZWVkIHRvIGFjY2VwdCBUcnVzdGVkIFR5cGVzIG9iamVjdCBpbiB0aGUgZnV0dXJlLlxuXG52YXIgeGxpbmtIcmVmID0gJ3hsaW5rSHJlZic7XG5wcm9wZXJ0aWVzW3hsaW5rSHJlZl0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKCd4bGlua0hyZWYnLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbid4bGluazpocmVmJywgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCB0cnVlLCAvLyBzYW5pdGl6ZVVSTFxuZmFsc2UpO1xuWydzcmMnLCAnaHJlZicsICdhY3Rpb24nLCAnZm9ybUFjdGlvbiddLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcHJvcGVydGllc1thdHRyaWJ1dGVOYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoYXR0cmlidXRlTmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgdHJ1ZSwgLy8gc2FuaXRpemVVUkxcbiAgdHJ1ZSk7XG59KTtcblxuLy8gYW5kIGFueSBuZXdsaW5lIG9yIHRhYiBhcmUgZmlsdGVyZWQgb3V0IGFzIGlmIHRoZXkncmUgbm90IHBhcnQgb2YgdGhlIFVSTC5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsLXBhcnNpbmdcbi8vIFRhYiBvciBuZXdsaW5lIGFyZSBkZWZpbmVkIGFzIFxcclxcblxcdDpcbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNhc2NpaS10YWItb3ItbmV3bGluZVxuLy8gQSBDMCBjb250cm9sIGlzIGEgY29kZSBwb2ludCBpbiB0aGUgcmFuZ2UgXFx1MDAwMCBOVUxMIHRvIFxcdTAwMUZcbi8vIElORk9STUFUSU9OIFNFUEFSQVRPUiBPTkUsIGluY2x1c2l2ZTpcbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNjMC1jb250cm9sLW9yLXNwYWNlXG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxudmFyIGlzSmF2YVNjcmlwdFByb3RvY29sID0gL15bXFx1MDAwMC1cXHUwMDFGIF0qaltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSp2W1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnNbXFxyXFxuXFx0XSpjW1xcclxcblxcdF0qcltcXHJcXG5cXHRdKmlbXFxyXFxuXFx0XSpwW1xcclxcblxcdF0qdFtcXHJcXG5cXHRdKlxcOi9pO1xudmFyIGRpZFdhcm4gPSBmYWxzZTtcblxuZnVuY3Rpb24gc2FuaXRpemVVUkwodXJsKSB7XG4gIHtcbiAgICBpZiAoIWRpZFdhcm4gJiYgaXNKYXZhU2NyaXB0UHJvdG9jb2wudGVzdCh1cmwpKSB7XG4gICAgICBkaWRXYXJuID0gdHJ1ZTtcblxuICAgICAgZXJyb3IoJ0EgZnV0dXJlIHZlcnNpb24gb2YgUmVhY3Qgd2lsbCBibG9jayBqYXZhc2NyaXB0OiBVUkxzIGFzIGEgc2VjdXJpdHkgcHJlY2F1dGlvbi4gJyArICdVc2UgZXZlbnQgaGFuZGxlcnMgaW5zdGVhZCBpZiB5b3UgY2FuLiBJZiB5b3UgbmVlZCB0byBnZW5lcmF0ZSB1bnNhZmUgSFRNTCB0cnkgJyArICd1c2luZyBkYW5nZXJvdXNseVNldElubmVySFRNTCBpbnN0ZWFkLiBSZWFjdCB3YXMgcGFzc2VkICVzLicsIEpTT04uc3RyaW5naWZ5KHVybCkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLiBPbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqIFRoZSBcImV4cGVjdGVkXCIgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhpbnQgb2Ygd2hhdCB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMuXG4gKiBTb21lIHByb3BlcnRpZXMgaGF2ZSBtdWx0aXBsZSBlcXVpdmFsZW50IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvKSB7XG4gIHtcbiAgICBpZiAocHJvcGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eSkge1xuICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWU7XG4gICAgICByZXR1cm4gbm9kZVtwcm9wZXJ0eU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIHByb3BlcnR5SW5mby5zYW5pdGl6ZVVSTCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGZ1bGx5IGRpc2FibGVkIGphdmFzY3JpcHQ6IFVSTHMsIGFuZCBpZlxuICAgICAgICAvLyB0aGUgaHlkcmF0aW9uIGlzIHN1Y2Nlc3NmdWwgb2YgYSBqYXZhc2NyaXB0OiBVUkwsIHdlXG4gICAgICAgIC8vIHN0aWxsIHdhbnQgdG8gd2FybiBvbiB0aGUgY2xpZW50LlxuICAgICAgICBzYW5pdGl6ZVVSTCgnJyArIGV4cGVjdGVkKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZTtcbiAgICAgIHZhciBzdHJpbmdWYWx1ZSA9IG51bGw7XG5cbiAgICAgIGlmIChwcm9wZXJ0eUluZm8udHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOKSB7XG4gICAgICAgIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgICAvLyBXZSBoYWQgYW4gYXR0cmlidXRlIGJ1dCBzaG91bGRuJ3QgaGF2ZSBoYWQgb25lLCBzbyByZWFkIGl0XG4gICAgICAgICAgLy8gZm9yIHRoZSBlcnJvciBtZXNzYWdlLlxuICAgICAgICAgIHJldHVybiBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8udHlwZSA9PT0gQk9PTEVBTikge1xuICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGEgYm9vbGVhbiwgaXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgdmFsdWUgaXNcbiAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIGV4cGVjdGVkLlxuICAgICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgICAgfSAvLyBFdmVuIGlmIHRoaXMgcHJvcGVydHkgdXNlcyBhIG5hbWVzcGFjZSB3ZSB1c2UgZ2V0QXR0cmlidXRlXG4gICAgICAgIC8vIGJlY2F1c2Ugd2UgYXNzdW1lIGl0cyBuYW1lc3BhY2VkIG5hbWUgaXMgdGhlIHNhbWUgYXMgb3VyIGNvbmZpZy5cbiAgICAgICAgLy8gVG8gdXNlIGdldEF0dHJpYnV0ZU5TIHdlIG5lZWQgdGhlIGxvY2FsIG5hbWUgd2hpY2ggd2UgZG9uJ3QgaGF2ZVxuICAgICAgICAvLyBpbiBvdXIgY29uZmlnIGF0bS5cblxuXG4gICAgICAgIHN0cmluZ1ZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZSA9PT0gbnVsbCA/IGV4cGVjdGVkIDogc3RyaW5nVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHN0cmluZ1ZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3IgYSBhdHRyaWJ1dGUgb24gYSBub2RlLiBPbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqIFRoZSB0aGlyZCBhcmd1bWVudCBpcyB1c2VkIGFzIGEgaGludCBvZiB3aGF0IHRoZSBleHBlY3RlZCB2YWx1ZSBpcy4gU29tZVxuICogYXR0cmlidXRlcyBoYXZlIG11bHRpcGxlIGVxdWl2YWxlbnQgdmFsdWVzLlxuICovXG5cbmZ1bmN0aW9uIGdldFZhbHVlRm9yQXR0cmlidXRlKG5vZGUsIG5hbWUsIGV4cGVjdGVkKSB7XG4gIHtcbiAgICBpZiAoIWlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHRoZSBvYmplY3QgaXMgYW4gb3BhcXVlIHJlZmVyZW5jZSBJRCwgaXQncyBleHBlY3RlZCB0aGF0XG4gICAgLy8gdGhlIG5leHQgcHJvcCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgc2VydmVyIHZhbHVlLCBzbyBqdXN0IHJldHVyblxuICAgIC8vIGV4cGVjdGVkXG5cblxuICAgIGlmIChpc09wYXF1ZUh5ZHJhdGluZ09iamVjdChleHBlY3RlZCkpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICB9XG5cbiAgICBpZiAoIW5vZGUuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cbiAgICBpZiAodmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuXG5mdW5jdGlvbiBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUsIHZhbHVlLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKG5hbWUpO1xuXG4gIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1dGUobmFtZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHZhbHVlID0gbnVsbDtcbiAgfSAvLyBJZiB0aGUgcHJvcCBpc24ndCBpbiB0aGUgc3BlY2lhbCBsaXN0LCB0cmVhdCBpdCBhcyBhIHNpbXBsZSBhdHRyaWJ1dGUuXG5cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcgfHwgcHJvcGVydHlJbmZvID09PSBudWxsKSB7XG4gICAgaWYgKGlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgIHZhciBfYXR0cmlidXRlTmFtZSA9IG5hbWU7XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShfYXR0cmlidXRlTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShfYXR0cmlidXRlTmFtZSwgICcnICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtdXN0VXNlUHJvcGVydHkgPSBwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5O1xuXG4gIGlmIChtdXN0VXNlUHJvcGVydHkpIHtcbiAgICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJbmZvLnByb3BlcnR5TmFtZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIHR5cGUgPSBwcm9wZXJ0eUluZm8udHlwZTtcbiAgICAgIG5vZGVbcHJvcGVydHlOYW1lXSA9IHR5cGUgPT09IEJPT0xFQU4gPyBmYWxzZSA6ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb250cmFyeSB0byBgc2V0QXR0cmlidXRlYCwgb2JqZWN0IHByb3BlcnRpZXMgYXJlIHByb3Blcmx5XG4gICAgICAvLyBgdG9TdHJpbmdgZWQgYnkgSUU4LzkuXG4gICAgICBub2RlW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH0gLy8gVGhlIHJlc3QgYXJlIHRyZWF0ZWQgYXMgYXR0cmlidXRlcyB3aXRoIHNwZWNpYWwgY2FzZXMuXG5cblxuICB2YXIgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lLFxuICAgICAgYXR0cmlidXRlTmFtZXNwYWNlID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWVzcGFjZTtcblxuICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX3R5cGUgPSBwcm9wZXJ0eUluZm8udHlwZTtcbiAgICB2YXIgYXR0cmlidXRlVmFsdWU7XG5cbiAgICBpZiAoX3R5cGUgPT09IEJPT0xFQU4gfHwgX3R5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTiAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gSWYgYXR0cmlidXRlIHR5cGUgaXMgYm9vbGVhbiwgd2Uga25vdyBmb3Igc3VyZSBpdCB3b24ndCBiZSBhbiBleGVjdXRpb24gc2lua1xuICAgICAgLy8gYW5kIHdlIHdvbid0IHJlcXVpcmUgVHJ1c3RlZCBUeXBlIGhlcmUuXG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBgc2V0QXR0cmlidXRlYCB3aXRoIG9iamVjdHMgYmVjb21lcyBvbmx5IGBbb2JqZWN0XWAgaW4gSUU4LzksXG4gICAgICAvLyAoJycgKyB2YWx1ZSkgbWFrZXMgaXQgb3V0cHV0IHRoZSBjb3JyZWN0IHRvU3RyaW5nKCktdmFsdWUuXG4gICAgICB7XG4gICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnR5SW5mby5zYW5pdGl6ZVVSTCkge1xuICAgICAgICBzYW5pdGl6ZVVSTChhdHRyaWJ1dGVWYWx1ZS50b1N0cmluZygpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXR0cmlidXRlTmFtZXNwYWNlKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZU5TKGF0dHJpYnV0ZU5hbWVzcGFjZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbiAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvZmlsZXInKTtcbiAgUkVBQ1RfUFJPVklERVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvdmlkZXInKTtcbiAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5jb250ZXh0Jyk7XG4gIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG4gIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG4gIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xuICBSRUFDVF9NRU1PX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm1lbW8nKTtcbiAgUkVBQ1RfTEFaWV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sYXp5Jyk7XG4gIFJFQUNUX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmJsb2NrJyk7XG4gIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zZXJ2ZXIuYmxvY2snKTtcbiAgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnVuZGFtZW50YWwnKTtcbiAgUkVBQ1RfU0NPUEVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2NvcGUnKTtcbiAgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9wYXF1ZS5pZCcpO1xuICBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZGVidWdfdHJhY2VfbW9kZScpO1xuICBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG4gIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGVnYWN5X2hpZGRlbicpO1xufVxuXG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgZGlzYWJsZWREZXB0aCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBkaXNhYmxlZERlcHRoLS07XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgICB9KSxcbiAgICAgICAgd2FybjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IG51bGw7XG4gICAgZGlzYWJsZUxvZ3MoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH07IC8vICRGbG93Rml4TWVcblxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH1cbiAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbC5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICBjLS07XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lKGN0b3IsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoY3RvciwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUZpYmVyKGZpYmVyKSB7XG4gIHZhciBvd25lciA9ICBmaWJlci5fZGVidWdPd25lciA/IGZpYmVyLl9kZWJ1Z093bmVyLnR5cGUgOiBudWxsIDtcbiAgdmFyIHNvdXJjZSA9ICBmaWJlci5fZGVidWdTb3VyY2UgO1xuXG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdMYXp5Jyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuXG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5yZW5kZXIpO1xuXG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5fcmVuZGVyKTtcblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qod29ya0luUHJvZ3Jlc3MpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9ICcnO1xuICAgIHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICBkbyB7XG4gICAgICBpbmZvICs9IGRlc2NyaWJlRmliZXIobm9kZSk7XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobm9kZSk7XG5cbiAgICByZXR1cm4gaW5mbztcbiAgfSBjYXRjaCAoeCkge1xuICAgIHJldHVybiAnXFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogJyArIHgubWVzc2FnZSArICdcXG4nICsgeC5zdGFjaztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIG91dGVyVHlwZS5kaXNwbGF5TmFtZSB8fCAoZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBjdXJyZW50ID0gbnVsbDtcbnZhciBpc1JlbmRlcmluZyA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB7XG4gIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG93bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3duZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldigpIHtcbiAge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSAvLyBTYWZlIGJlY2F1c2UgaWYgY3VycmVudCBmaWJlciBleGlzdHMsIHdlIGFyZSByZWNvbmNpbGluZyxcbiAgICAvLyBhbmQgaXQgaXMgZ3VhcmFudGVlZCB0byBiZSB0aGUgd29yay1pbi1wcm9ncmVzcyB2ZXJzaW9uLlxuXG5cbiAgICByZXR1cm4gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKGN1cnJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q3VycmVudEZpYmVyKCkge1xuICB7XG4gICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBudWxsO1xuICAgIGN1cnJlbnQgPSBudWxsO1xuICAgIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEN1cnJlbnRGaWJlcihmaWJlcikge1xuICB7XG4gICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2O1xuICAgIGN1cnJlbnQgPSBmaWJlcjtcbiAgICBpc1JlbmRlcmluZyA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzZXRJc1JlbmRlcmluZyhyZW5kZXJpbmcpIHtcbiAge1xuICAgIGlzUmVuZGVyaW5nID0gcmVuZGVyaW5nO1xuICB9XG59XG5mdW5jdGlvbiBnZXRJc1JlbmRlcmluZygpIHtcbiAge1xuICAgIHJldHVybiBpc1JlbmRlcmluZztcbiAgfVxufVxuXG4vLyBGbG93IGRvZXMgbm90IGFsbG93IHN0cmluZyBjb25jYXRlbmF0aW9uIG9mIG1vc3Qgbm9uLXN0cmluZyB0eXBlcy4gVG8gd29ya1xuLy8gYXJvdW5kIHRoaXMgbGltaXRhdGlvbiwgd2UgdXNlIGFuIG9wYXF1ZSB0eXBlIHRoYXQgY2FuIG9ubHkgYmUgb2J0YWluZWQgYnlcbi8vIHBhc3NpbmcgdGhlIHZhbHVlIHRocm91Z2ggZ2V0VG9TdHJpbmdWYWx1ZSBmaXJzdC5cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiAnJyArIHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkge1xuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm4gdmFsdWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gZnVuY3Rpb24sIHN5bWJvbCBhcmUgYXNzaWduZWQgYXMgZW1wdHkgc3RyaW5nc1xuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5cbnZhciBoYXNSZWFkT25seVZhbHVlID0ge1xuICBidXR0b246IHRydWUsXG4gIGNoZWNrYm94OiB0cnVlLFxuICBpbWFnZTogdHJ1ZSxcbiAgaGlkZGVuOiB0cnVlLFxuICByYWRpbzogdHJ1ZSxcbiAgcmVzZXQ6IHRydWUsXG4gIHN1Ym1pdDogdHJ1ZVxufTtcbmZ1bmN0aW9uIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHModGFnTmFtZSwgcHJvcHMpIHtcbiAge1xuICAgIGlmICghKGhhc1JlYWRPbmx5VmFsdWVbcHJvcHMudHlwZV0gfHwgcHJvcHMub25DaGFuZ2UgfHwgcHJvcHMub25JbnB1dCB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCB8fCBwcm9wcy52YWx1ZSA9PSBudWxsKSkge1xuICAgICAgZXJyb3IoJ1lvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gICAgfVxuXG4gICAgaWYgKCEocHJvcHMub25DaGFuZ2UgfHwgcHJvcHMucmVhZE9ubHkgfHwgcHJvcHMuZGlzYWJsZWQgfHwgcHJvcHMuY2hlY2tlZCA9PSBudWxsKSkge1xuICAgICAgZXJyb3IoJ1lvdSBwcm92aWRlZCBhIGBjaGVja2VkYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRDaGVja2VkYC4gT3RoZXJ3aXNlLCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NoZWNrYWJsZShlbGVtKSB7XG4gIHZhciB0eXBlID0gZWxlbS50eXBlO1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAodHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0eXBlID09PSAncmFkaW8nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhY2tlcihub2RlKSB7XG4gIHJldHVybiBub2RlLl92YWx1ZVRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIGRldGFjaFRyYWNrZXIobm9kZSkge1xuICBub2RlLl92YWx1ZVRyYWNrZXIgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlID0gJyc7XG5cbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKGlzQ2hlY2thYmxlKG5vZGUpKSB7XG4gICAgdmFsdWUgPSBub2RlLmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gbm9kZS52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gdHJhY2tWYWx1ZU9uTm9kZShub2RlKSB7XG4gIHZhciB2YWx1ZUZpZWxkID0gaXNDaGVja2FibGUobm9kZSkgPyAnY2hlY2tlZCcgOiAndmFsdWUnO1xuICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobm9kZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHZhbHVlRmllbGQpO1xuICB2YXIgY3VycmVudFZhbHVlID0gJycgKyBub2RlW3ZhbHVlRmllbGRdOyAvLyBpZiBzb21lb25lIGhhcyBhbHJlYWR5IGRlZmluZWQgYSB2YWx1ZSBvciBTYWZhcmksIHRoZW4gYmFpbFxuICAvLyBhbmQgZG9uJ3QgdHJhY2sgdmFsdWUgd2lsbCBjYXVzZSBvdmVyIHJlcG9ydGluZyBvZiBjaGFuZ2VzLFxuICAvLyBidXQgaXQncyBiZXR0ZXIgdGhlbiBhIGhhcmQgZmFpbHVyZVxuICAvLyAobmVlZGVkIGZvciBjZXJ0YWluIHRlc3RzIHRoYXQgc3B5T24gaW5wdXQgdmFsdWVzIGFuZCBTYWZhcmkpXG5cbiAgaWYgKG5vZGUuaGFzT3duUHJvcGVydHkodmFsdWVGaWVsZCkgfHwgdHlwZW9mIGRlc2NyaXB0b3IgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkZXNjcmlwdG9yLmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZGVzY3JpcHRvci5zZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXQsXG4gICAgICBzZXQgPSBkZXNjcmlwdG9yLnNldDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0LmNhbGwodGhpcyk7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudFZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9XG4gIH0pOyAvLyBXZSBjb3VsZCd2ZSBwYXNzZWQgdGhpcyB0aGUgZmlyc3QgdGltZVxuICAvLyBidXQgaXQgdHJpZ2dlcnMgYSBidWcgaW4gSUUxMSBhbmQgRWRnZSAxNC8xNS5cbiAgLy8gQ2FsbGluZyBkZWZpbmVQcm9wZXJ0eSgpIGFnYWluIHNob3VsZCBiZSBlcXVpdmFsZW50LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExNzY4XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICBlbnVtZXJhYmxlOiBkZXNjcmlwdG9yLmVudW1lcmFibGVcbiAgfSk7XG4gIHZhciB0cmFja2VyID0ge1xuICAgIGdldFZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgIH0sXG4gICAgc2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudFZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICB9LFxuICAgIHN0b3BUcmFja2luZzogZnVuY3Rpb24gKCkge1xuICAgICAgZGV0YWNoVHJhY2tlcihub2RlKTtcbiAgICAgIGRlbGV0ZSBub2RlW3ZhbHVlRmllbGRdO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIHRyYWNrKG5vZGUpIHtcbiAgaWYgKGdldFRyYWNrZXIobm9kZSkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gVE9ETzogT25jZSBpdCdzIGp1c3QgRmliZXIgd2UgY2FuIG1vdmUgdGhpcyB0byBub2RlLl93cmFwcGVyU3RhdGVcblxuXG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IHRyYWNrVmFsdWVPbk5vZGUobm9kZSk7XG59XG5mdW5jdGlvbiB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChub2RlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0cmFja2VyID0gZ2V0VHJhY2tlcihub2RlKTsgLy8gaWYgdGhlcmUgaXMgbm8gdHJhY2tlciBhdCB0aGlzIHBvaW50IGl0J3MgdW5saWtlbHlcbiAgLy8gdGhhdCB0cnlpbmcgYWdhaW4gd2lsbCBzdWNjZWVkXG5cbiAgaWYgKCF0cmFja2VyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgbGFzdFZhbHVlID0gdHJhY2tlci5nZXRWYWx1ZSgpO1xuICB2YXIgbmV4dFZhbHVlID0gZ2V0VmFsdWVGcm9tTm9kZShub2RlKTtcblxuICBpZiAobmV4dFZhbHVlICE9PSBsYXN0VmFsdWUpIHtcbiAgICB0cmFja2VyLnNldFZhbHVlKG5leHRWYWx1ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnQoZG9jKSB7XG4gIGRvYyA9IGRvYyB8fCAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogdW5kZWZpbmVkKTtcblxuICBpZiAodHlwZW9mIGRvYyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRvYy5hY3RpdmVFbGVtZW50IHx8IGRvYy5ib2R5O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGRvYy5ib2R5O1xuICB9XG59XG5cbnZhciBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gZmFsc2U7XG52YXIgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9IGZhbHNlO1xudmFyIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gaXNDb250cm9sbGVkKHByb3BzKSB7XG4gIHZhciB1c2VzQ2hlY2tlZCA9IHByb3BzLnR5cGUgPT09ICdjaGVja2JveCcgfHwgcHJvcHMudHlwZSA9PT0gJ3JhZGlvJztcbiAgcmV0dXJuIHVzZXNDaGVja2VkID8gcHJvcHMuY2hlY2tlZCAhPSBudWxsIDogcHJvcHMudmFsdWUgIT0gbnVsbDtcbn1cbi8qKlxuICogSW1wbGVtZW50cyBhbiA8aW5wdXQ+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgdGhlc2Ugb3B0aW9uYWxcbiAqIHByb3BzOiBgY2hlY2tlZGAsIGB2YWx1ZWAsIGBkZWZhdWx0Q2hlY2tlZGAsIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqXG4gKiBJZiBgY2hlY2tlZGAgb3IgYHZhbHVlYCBhcmUgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9uc1xuICogdGhhdCBhZmZlY3QgdGhlIGNoZWNrZWQgc3RhdGUgb3IgdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgdGhleSBhcmUgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIG5vdFxuICogdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgcHJvcHMgbXVzdCBjaGFuZ2UgaW4gb3JkZXIgZm9yXG4gKiB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgYXMgdW5jaGVja2VkIChvciBgZGVmYXVsdENoZWNrZWRgKVxuICogd2l0aCBhbiBlbXB0eSB2YWx1ZSAob3IgYGRlZmF1bHRWYWx1ZWApLlxuICpcbiAqIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIxMDI1L3RoZS1pbnB1dC1lbGVtZW50Lmh0bWxcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBjaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblxuICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICBkZWZhdWx0Q2hlY2tlZDogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkLFxuICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgY2hlY2tlZDogY2hlY2tlZCAhPSBudWxsID8gY2hlY2tlZCA6IG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZFxuICB9KTtcblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuZnVuY3Rpb24gaW5pdFdyYXBwZXJTdGF0ZShlbGVtZW50LCBwcm9wcykge1xuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygnaW5wdXQnLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMuY2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRDaGVja2VkICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCBjaGVja2VkIGFuZCBkZWZhdWx0Q2hlY2tlZCBwcm9wcy4gJyArICdJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgY2hlY2tlZCBwcm9wLCBvciB0aGUgZGVmYXVsdENoZWNrZWQgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpO1xuXG4gICAgICBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlKSB7XG4gICAgICBlcnJvcignJXMgY29udGFpbnMgYW4gaW5wdXQgb2YgdHlwZSAlcyB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gJyArICdJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSk7XG5cbiAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlID09IG51bGwgPyAnJyA6IHByb3BzLmRlZmF1bHRWYWx1ZTtcbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIGluaXRpYWxDaGVja2VkOiBwcm9wcy5jaGVja2VkICE9IG51bGwgPyBwcm9wcy5jaGVja2VkIDogcHJvcHMuZGVmYXVsdENoZWNrZWQsXG4gICAgaW5pdGlhbFZhbHVlOiBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlICE9IG51bGwgPyBwcm9wcy52YWx1ZSA6IGRlZmF1bHRWYWx1ZSksXG4gICAgY29udHJvbGxlZDogaXNDb250cm9sbGVkKHByb3BzKVxuICB9O1xufVxuZnVuY3Rpb24gdXBkYXRlQ2hlY2tlZChlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBjaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblxuICBpZiAoY2hlY2tlZCAhPSBudWxsKSB7XG4gICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCAnY2hlY2tlZCcsIGNoZWNrZWQsIGZhbHNlKTtcbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlV3JhcHBlcihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIHZhciBjb250cm9sbGVkID0gaXNDb250cm9sbGVkKHByb3BzKTtcblxuICAgIGlmICghbm9kZS5fd3JhcHBlclN0YXRlLmNvbnRyb2xsZWQgJiYgY29udHJvbGxlZCAmJiAhZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCkge1xuICAgICAgZXJyb3IoJ0EgY29tcG9uZW50IGlzIGNoYW5naW5nIGFuIHVuY29udHJvbGxlZCBpbnB1dCB0byBiZSBjb250cm9sbGVkLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSB0aGUgdmFsdWUgY2hhbmdpbmcgZnJvbSB1bmRlZmluZWQgdG8gJyArICdhIGRlZmluZWQgdmFsdWUsIHdoaWNoIHNob3VsZCBub3QgaGFwcGVuLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlLl93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiAhY29udHJvbGxlZCAmJiAhZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCkge1xuICAgICAgZXJyb3IoJ0EgY29tcG9uZW50IGlzIGNoYW5naW5nIGEgY29udHJvbGxlZCBpbnB1dCB0byBiZSB1bmNvbnRyb2xsZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIGEgZGVmaW5lZCB0byAnICsgJ3VuZGVmaW5lZCwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ2hlY2tlZChlbGVtZW50LCBwcm9wcyk7XG4gIHZhciB2YWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpO1xuICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBub2RlLnZhbHVlID09PSAnJyB8fCAvLyBXZSBleHBsaWNpdGx5IHdhbnQgdG8gY29lcmNlIHRvIG51bWJlciBoZXJlIGlmIHBvc3NpYmxlLlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBub2RlLnZhbHVlICE9IHZhbHVlKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnZhbHVlICE9PSB0b1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIG5vZGUudmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdWJtaXQnIHx8IHR5cGUgPT09ICdyZXNldCcpIHtcbiAgICAvLyBTdWJtaXQvcmVzZXQgaW5wdXRzIG5lZWQgdGhlIGF0dHJpYnV0ZSByZW1vdmVkIGNvbXBsZXRlbHkgdG8gYXZvaWRcbiAgICAvLyBibGFuay10ZXh0IGJ1dHRvbnMuXG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgdmFsdWUgYXR0cmlidXRlLCB0aGUgdmFsdWUgY29tZXMgZnJvbSBhIGNhc2NhZGUgb2ZcbiAgICAvLyBwcm9wZXJ0aWVzOlxuICAgIC8vICAxLiBUaGUgdmFsdWUgUmVhY3QgcHJvcGVydHlcbiAgICAvLyAgMi4gVGhlIGRlZmF1bHRWYWx1ZSBSZWFjdCBwcm9wZXJ0eVxuICAgIC8vICAzLiBPdGhlcndpc2UgdGhlcmUgc2hvdWxkIGJlIG5vIGNoYW5nZVxuICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSkge1xuICAgICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHByb3BzLnR5cGUsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCdkZWZhdWx0VmFsdWUnKSkge1xuICAgICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHByb3BzLnR5cGUsIGdldFRvU3RyaW5nVmFsdWUocHJvcHMuZGVmYXVsdFZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGl0IG9ubHkgY2hhbmdlcyB3aGVuIGl0IG5lZWRzXG4gICAgLy8gdG8gYmUgcmVtb3ZlZCwgc3VjaCBhcyB0cmFuc2l0aW9uaW5nIGZyb20gYSBjaGVja2JveCBpbnRvIGEgdGV4dCBpbnB1dFxuICAgIGlmIChwcm9wcy5jaGVja2VkID09IG51bGwgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT0gbnVsbCkge1xuICAgICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICEhcHJvcHMuZGVmYXVsdENoZWNrZWQ7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyKGVsZW1lbnQsIHByb3BzLCBpc0h5ZHJhdGluZykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7IC8vIERvIG5vdCBhc3NpZ24gdmFsdWUgaWYgaXQgaXMgYWxyZWFkeSBzZXQuIFRoaXMgcHJldmVudHMgdXNlciB0ZXh0IGlucHV0XG4gIC8vIGZyb20gYmVpbmcgbG9zdCBkdXJpbmcgU1NSIGh5ZHJhdGlvbi5cblxuICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgfHwgcHJvcHMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWYWx1ZScpKSB7XG4gICAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuICAgIHZhciBpc0J1dHRvbiA9IHR5cGUgPT09ICdzdWJtaXQnIHx8IHR5cGUgPT09ICdyZXNldCc7IC8vIEF2b2lkIHNldHRpbmcgdmFsdWUgYXR0cmlidXRlIG9uIHN1Ym1pdC9yZXNldCBpbnB1dHMgYXMgaXQgb3ZlcnJpZGVzIHRoZVxuICAgIC8vIGRlZmF1bHQgdmFsdWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIuIFNlZTogIzEyODcyXG5cbiAgICBpZiAoaXNCdXR0b24gJiYgKHByb3BzLnZhbHVlID09PSB1bmRlZmluZWQgfHwgcHJvcHMudmFsdWUgPT09IG51bGwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluaXRpYWxWYWx1ZSA9IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpOyAvLyBEbyBub3QgYXNzaWduIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIHByZXZlbnRzIHVzZXIgdGV4dCBpbnB1dFxuICAgIC8vIGZyb20gYmVpbmcgbG9zdCBkdXJpbmcgU1NSIGh5ZHJhdGlvbi5cblxuICAgIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gV2hlbiBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzaG91bGQgdXNlXG4gICAgICAgIC8vIHRoZSB3cmFwcGVyU3RhdGUuX2luaXRpYWxWYWx1ZSBwcm9wZXJ0eS4gVGhpcyB1c2VzOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgIDEuIFRoZSB2YWx1ZSBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAgICAgLy8gICAyLiBUaGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDMuIEFuIGVtcHR5IHN0cmluZ1xuICAgICAgICBpZiAoaW5pdGlhbFZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICAgICAgbm9kZS52YWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vIE90aGVyd2lzZSwgdGhlIHZhbHVlIGF0dHJpYnV0ZSBpcyBzeW5jaHJvbml6ZWQgdG8gdGhlIHByb3BlcnR5LFxuICAgICAgLy8gc28gd2UgYXNzaWduIGRlZmF1bHRWYWx1ZSB0byB0aGUgc2FtZSB0aGluZyBhcyB0aGUgdmFsdWUgcHJvcGVydHlcbiAgICAgIC8vIGFzc2lnbm1lbnQgc3RlcCBhYm92ZS5cbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIH1cbiAgfSAvLyBOb3JtYWxseSwgd2UnZCBqdXN0IGRvIGBub2RlLmNoZWNrZWQgPSBub2RlLmNoZWNrZWRgIHVwb24gaW5pdGlhbCBtb3VudCwgbGVzcyB0aGlzIGJ1Z1xuICAvLyB0aGlzIGlzIG5lZWRlZCB0byB3b3JrIGFyb3VuZCBhIGNocm9tZSBidWcgd2hlcmUgc2V0dGluZyBkZWZhdWx0Q2hlY2tlZFxuICAvLyB3aWxsIHNvbWV0aW1lcyBpbmZsdWVuY2UgdGhlIHZhbHVlIG9mIGNoZWNrZWQgKGV2ZW4gYWZ0ZXIgZGV0YWNobWVudCkuXG4gIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjA4NDE2XG4gIC8vIFdlIG5lZWQgdG8gdGVtcG9yYXJpbHkgdW5zZXQgbmFtZSB0byBhdm9pZCBkaXNydXB0aW5nIHJhZGlvIGJ1dHRvbiBncm91cHMuXG5cblxuICB2YXIgbmFtZSA9IG5vZGUubmFtZTtcblxuICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICBub2RlLm5hbWUgPSAnJztcbiAgfVxuXG4gIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIGNoZWNrZWQgYXR0cmlidXRlLCBib3RoIHRoZSBjaGVja2VkIHByb3BlcnR5IGFuZFxuICAgIC8vIGF0dHJpYnV0ZSBhcmUgYXNzaWduZWQgYXQgdGhlIHNhbWUgdGltZSB1c2luZyBkZWZhdWx0Q2hlY2tlZC4gVGhpcyB1c2VzOlxuICAgIC8vXG4gICAgLy8gICAxLiBUaGUgY2hlY2tlZCBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAvLyAgIDIuIFRoZSBkZWZhdWx0Q2hlY2tlZCBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAvLyAgIDMuIE90aGVyd2lzZSwgZmFsc2VcbiAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gIW5vZGUuZGVmYXVsdENoZWNrZWQ7XG4gICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICEhbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkO1xuICB9XG5cbiAgaWYgKG5hbWUgIT09ICcnKSB7XG4gICAgbm9kZS5uYW1lID0gbmFtZTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHVwZGF0ZVdyYXBwZXIobm9kZSwgcHJvcHMpO1xuICB1cGRhdGVOYW1lZENvdXNpbnMobm9kZSwgcHJvcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVOYW1lZENvdXNpbnMocm9vdE5vZGUsIHByb3BzKSB7XG4gIHZhciBuYW1lID0gcHJvcHMubmFtZTtcblxuICBpZiAocHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuYW1lICE9IG51bGwpIHtcbiAgICB2YXIgcXVlcnlSb290ID0gcm9vdE5vZGU7XG5cbiAgICB3aGlsZSAocXVlcnlSb290LnBhcmVudE5vZGUpIHtcbiAgICAgIHF1ZXJ5Um9vdCA9IHF1ZXJ5Um9vdC5wYXJlbnROb2RlO1xuICAgIH0gLy8gSWYgYHJvb3ROb2RlLmZvcm1gIHdhcyBub24tbnVsbCwgdGhlbiB3ZSBjb3VsZCB0cnkgYGZvcm0uZWxlbWVudHNgLFxuICAgIC8vIGJ1dCB0aGF0IHNvbWV0aW1lcyBiZWhhdmVzIHN0cmFuZ2VseSBpbiBJRTguIFdlIGNvdWxkIGFsc28gdHJ5IHVzaW5nXG4gICAgLy8gYGZvcm0uZ2V0RWxlbWVudHNCeU5hbWVgLCBidXQgdGhhdCB3aWxsIG9ubHkgcmV0dXJuIGRpcmVjdCBjaGlsZHJlblxuICAgIC8vIGFuZCB3b24ndCBpbmNsdWRlIGlucHV0cyB0aGF0IHVzZSB0aGUgSFRNTDUgYGZvcm09YCBhdHRyaWJ1dGUuIFNpbmNlXG4gICAgLy8gdGhlIGlucHV0IG1pZ2h0IG5vdCBldmVuIGJlIGluIGEgZm9ybS4gSXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gdGhlXG4gICAgLy8gZG9jdW1lbnQuIExldCdzIGp1c3QgdXNlIHRoZSBsb2NhbCBgcXVlcnlTZWxlY3RvckFsbGAgdG8gZW5zdXJlIHdlIGRvbid0XG4gICAgLy8gbWlzcyBhbnl0aGluZy5cblxuXG4gICAgdmFyIGdyb3VwID0gcXVlcnlSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W25hbWU9JyArIEpTT04uc3RyaW5naWZ5KCcnICsgbmFtZSkgKyAnXVt0eXBlPVwicmFkaW9cIl0nKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBvdGhlck5vZGUgPSBncm91cFtpXTtcblxuICAgICAgaWYgKG90aGVyTm9kZSA9PT0gcm9vdE5vZGUgfHwgb3RoZXJOb2RlLmZvcm0gIT09IHJvb3ROb2RlLmZvcm0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIFRoaXMgd2lsbCB0aHJvdyBpZiByYWRpbyBidXR0b25zIHJlbmRlcmVkIGJ5IGRpZmZlcmVudCBjb3BpZXMgb2YgUmVhY3RcbiAgICAgIC8vIGFuZCB0aGUgc2FtZSBuYW1lIGFyZSByZW5kZXJlZCBpbnRvIHRoZSBzYW1lIGZvcm0gKHNhbWUgYXMgIzE5MzkpLlxuICAgICAgLy8gVGhhdCdzIHByb2JhYmx5IG9rYXk7IHdlIGRvbid0IHN1cHBvcnQgaXQganVzdCBhcyB3ZSBkb24ndCBzdXBwb3J0XG4gICAgICAvLyBtaXhpbmcgUmVhY3QgcmFkaW8gYnV0dG9ucyB3aXRoIG5vbi1SZWFjdCBvbmVzLlxuXG5cbiAgICAgIHZhciBvdGhlclByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShvdGhlck5vZGUpO1xuXG4gICAgICBpZiAoIW90aGVyUHJvcHMpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0RE9NSW5wdXQ6IE1peGluZyBSZWFjdCBhbmQgbm9uLVJlYWN0IHJhZGlvIGlucHV0cyB3aXRoIHRoZSBzYW1lIGBuYW1lYCBpcyBub3Qgc3VwcG9ydGVkLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gV2UgbmVlZCB1cGRhdGUgdGhlIHRyYWNrZWQgdmFsdWUgb24gdGhlIG5hbWVkIGNvdXNpbiBzaW5jZSB0aGUgdmFsdWVcbiAgICAgIC8vIHdhcyBjaGFuZ2VkIGJ1dCB0aGUgaW5wdXQgc2F3IG5vIGV2ZW50IG9yIHZhbHVlIHNldFxuXG5cbiAgICAgIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKG90aGVyTm9kZSk7IC8vIElmIHRoaXMgaXMgYSBjb250cm9sbGVkIHJhZGlvIGJ1dHRvbiBncm91cCwgZm9yY2luZyB0aGUgaW5wdXQgdGhhdFxuICAgICAgLy8gd2FzIHByZXZpb3VzbHkgY2hlY2tlZCB0byB1cGRhdGUgd2lsbCBjYXVzZSBpdCB0byBiZSBjb21lIHJlLWNoZWNrZWRcbiAgICAgIC8vIGFzIGFwcHJvcHJpYXRlLlxuXG4gICAgICB1cGRhdGVXcmFwcGVyKG90aGVyTm9kZSwgb3RoZXJQcm9wcyk7XG4gICAgfVxuICB9XG59IC8vIEluIENocm9tZSwgYXNzaWduaW5nIGRlZmF1bHRWYWx1ZSB0byBjZXJ0YWluIGlucHV0IHR5cGVzIHRyaWdnZXJzIGlucHV0IHZhbGlkYXRpb24uXG4vLyBGb3IgbnVtYmVyIGlucHV0cywgdGhlIGRpc3BsYXkgdmFsdWUgbG9zZXMgdHJhaWxpbmcgZGVjaW1hbCBwb2ludHMuIEZvciBlbWFpbCBpbnB1dHMsXG4vLyBDaHJvbWUgcmFpc2VzIFwiVGhlIHNwZWNpZmllZCB2YWx1ZSA8eD4gaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiLlxuLy9cbi8vIEhlcmUgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSBkZWZhdWx0VmFsdWUgaGFzIGFjdHVhbGx5IGNoYW5nZWQsIGF2b2lkaW5nIHRoZXNlIHByb2JsZW1zXG4vLyB3aGVuIHRoZSB1c2VyIGlzIGlucHV0dGluZyB0ZXh0XG4vL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjUzXG5cblxuZnVuY3Rpb24gc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHR5cGUsIHZhbHVlKSB7XG4gIGlmICggLy8gRm9jdXNlZCBudW1iZXIgaW5wdXRzIHN5bmNocm9uaXplIG9uIGJsdXIuIFNlZSBDaGFuZ2VFdmVudFBsdWdpbi5qc1xuICB0eXBlICE9PSAnbnVtYmVyJyB8fCBnZXRBY3RpdmVFbGVtZW50KG5vZGUub3duZXJEb2N1bWVudCkgIT09IG5vZGUpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuZGVmYXVsdFZhbHVlICE9PSB0b1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSBmYWxzZTtcbnZhciBkaWRXYXJuSW52YWxpZENoaWxkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5DaGlsZHJlbihjaGlsZHJlbikge1xuICB2YXIgY29udGVudCA9ICcnOyAvLyBGbGF0dGVuIGNoaWxkcmVuLiBXZSdsbCB3YXJuIGlmIHRoZXkgYXJlIGludmFsaWRcbiAgLy8gZHVyaW5nIHZhbGlkYXRlUHJvcHMoKSB3aGljaCBydW5zIGZvciBoeWRyYXRpb24gdG9vLlxuICAvLyBOb3RlIHRoYXQgdGhpcyB3b3VsZCB0aHJvdyBvbiBub24tZWxlbWVudCBvYmplY3RzLlxuICAvLyBFbGVtZW50cyBhcmUgc3RyaW5naWZpZWQgKHdoaWNoIGlzIG5vcm1hbGx5IGlycmVsZXZhbnRcbiAgLy8gYnV0IG1hdHRlcnMgZm9yIDxmYnQ+KS5cblxuICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRlbnQgKz0gY2hpbGQ7IC8vIE5vdGU6IHdlIGRvbid0IHdhcm4gYWJvdXQgaW52YWxpZCBjaGlsZHJlbiBoZXJlLlxuICAgIC8vIEluc3RlYWQsIHRoaXMgaXMgZG9uZSBzZXBhcmF0ZWx5IGJlbG93IHNvIHRoYXRcbiAgICAvLyBpdCBoYXBwZW5zIGR1cmluZyB0aGUgaHlkcmF0aW9uIGNvZGUgcGF0aCB0b28uXG4gIH0pO1xuICByZXR1cm4gY29udGVudDtcbn1cbi8qKlxuICogSW1wbGVtZW50cyBhbiA8b3B0aW9uPiBob3N0IGNvbXBvbmVudCB0aGF0IHdhcm5zIHdoZW4gYHNlbGVjdGVkYCBpcyBzZXQuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICAvLyBUaGlzIG1pcnJvcnMgdGhlIGNvZGUgcGF0aCBhYm92ZSwgYnV0IHJ1bnMgZm9yIGh5ZHJhdGlvbiB0b28uXG4gICAgLy8gV2FybiBhYm91dCBpbnZhbGlkIGNoaWxkcmVuIGhlcmUgc28gdGhhdCBjbGllbnQgYW5kIGh5ZHJhdGlvbiBhcmUgY29uc2lzdGVudC5cbiAgICAvLyBUT0RPOiB0aGlzIHNlZW1zIGxpa2UgaXQgY291bGQgY2F1c2UgYSBERVYtb25seSB0aHJvdyBmb3IgaHlkcmF0aW9uXG4gICAgLy8gaWYgY2hpbGRyZW4gY29udGFpbnMgYSBub24tZWxlbWVudCBvYmplY3QuIFdlIHNob3VsZCB0cnkgdG8gYXZvaWQgdGhhdC5cbiAgICBpZiAodHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnb2JqZWN0JyAmJiBwcm9wcy5jaGlsZHJlbiAhPT0gbnVsbCkge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGlmIChjaGlsZCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGNoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRpZFdhcm5JbnZhbGlkQ2hpbGQpIHtcbiAgICAgICAgICBkaWRXYXJuSW52YWxpZENoaWxkID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdPbmx5IHN0cmluZ3MgYW5kIG51bWJlcnMgYXJlIHN1cHBvcnRlZCBhcyA8b3B0aW9uPiBjaGlsZHJlbi4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSAvLyBUT0RPOiBSZW1vdmUgc3VwcG9ydCBmb3IgYHNlbGVjdGVkYCBpbiA8b3B0aW9uPi5cblxuXG4gICAgaWYgKHByb3BzLnNlbGVjdGVkICE9IG51bGwgJiYgIWRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uKSB7XG4gICAgICBlcnJvcignVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIG9uIDxzZWxlY3Q+IGluc3RlYWQgb2YgJyArICdzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uJyk7XG5cbiAgICAgIGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMShlbGVtZW50LCBwcm9wcykge1xuICAvLyB2YWx1ZT1cIlwiIHNob3VsZCBtYWtlIGEgdmFsdWUgYXR0cmlidXRlICgjNjIxOSlcbiAgaWYgKHByb3BzLnZhbHVlICE9IG51bGwpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndmFsdWUnLCB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKSkpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7XG4gICAgY2hpbGRyZW46IHVuZGVmaW5lZFxuICB9LCBwcm9wcyk7XG5cbiAgdmFyIGNvbnRlbnQgPSBmbGF0dGVuQ2hpbGRyZW4ocHJvcHMuY2hpbGRyZW4pO1xuXG4gIGlmIChjb250ZW50KSB7XG4gICAgaG9zdFByb3BzLmNoaWxkcmVuID0gY29udGVudDtcbiAgfVxuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5cbnZhciBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMTtcblxue1xuICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHZhciBvd25lck5hbWUgPSBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpO1xuXG4gIGlmIChvd25lck5hbWUpIHtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIHZhbHVlUHJvcE5hbWVzID0gWyd2YWx1ZScsICdkZWZhdWx0VmFsdWUnXTtcbi8qKlxuICogVmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKi9cblxuZnVuY3Rpb24gY2hlY2tTZWxlY3RQcm9wVHlwZXMocHJvcHMpIHtcbiAge1xuICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ3NlbGVjdCcsIHByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVQcm9wTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wTmFtZSA9IHZhbHVlUHJvcE5hbWVzW2ldO1xuXG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShwcm9wc1twcm9wTmFtZV0pO1xuXG4gICAgICBpZiAocHJvcHMubXVsdGlwbGUgJiYgIWlzQXJyYXkpIHtcbiAgICAgICAgZXJyb3IoJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhbiBhcnJheSBpZiAnICsgJ2BtdWx0aXBsZWAgaXMgdHJ1ZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9wcy5tdWx0aXBsZSAmJiBpc0FycmF5KSB7XG4gICAgICAgIGVycm9yKCdUaGUgYCVzYCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYSBzY2FsYXIgJyArICd2YWx1ZSBpZiBgbXVsdGlwbGVgIGlzIGZhbHNlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9ucyhub2RlLCBtdWx0aXBsZSwgcHJvcFZhbHVlLCBzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgdmFyIG9wdGlvbnMgPSBub2RlLm9wdGlvbnM7XG5cbiAgaWYgKG11bHRpcGxlKSB7XG4gICAgdmFyIHNlbGVjdGVkVmFsdWVzID0gcHJvcFZhbHVlO1xuICAgIHZhciBzZWxlY3RlZFZhbHVlID0ge307XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcmVmaXggdG8gYXZvaWQgY2hhb3Mgd2l0aCBzcGVjaWFsIGtleXMuXG4gICAgICBzZWxlY3RlZFZhbHVlWyckJyArIHNlbGVjdGVkVmFsdWVzW2ldXSA9IHRydWU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG9wdGlvbnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlLmhhc093blByb3BlcnR5KCckJyArIG9wdGlvbnNbX2ldLnZhbHVlKTtcblxuICAgICAgaWYgKG9wdGlvbnNbX2ldLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW19pXS5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZWN0ZWQgJiYgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbX2ldLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCBzZXQgYHNlbGVjdC52YWx1ZWAgYXMgZXhhY3QgYmVoYXZpb3IgaXNuJ3QgY29uc2lzdGVudCBhY3Jvc3MgYWxsXG4gICAgLy8gYnJvd3NlcnMgZm9yIGFsbCBjYXNlcy5cbiAgICB2YXIgX3NlbGVjdGVkVmFsdWUgPSB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHByb3BWYWx1ZSkpO1xuXG4gICAgdmFyIGRlZmF1bHRTZWxlY3RlZCA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBvcHRpb25zLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIGlmIChvcHRpb25zW19pMl0udmFsdWUgPT09IF9zZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbnNbX2kyXS5zZWxlY3RlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgICAgIG9wdGlvbnNbX2kyXS5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFNlbGVjdGVkID09PSBudWxsICYmICFvcHRpb25zW19pMl0uZGlzYWJsZWQpIHtcbiAgICAgICAgZGVmYXVsdFNlbGVjdGVkID0gb3B0aW9uc1tfaTJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQgIT09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRTZWxlY3RlZC5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEltcGxlbWVudHMgYSA8c2VsZWN0PiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBvcHRpb25hbGx5IHNldHRpbmcgdGhlXG4gKiBwcm9wcyBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVlYC4gSWYgYG11bHRpcGxlYCBpcyBmYWxzZSwgdGhlIHByb3AgbXVzdCBiZSBhXG4gKiBzdHJpbmdhYmxlLiBJZiBgbXVsdGlwbGVgIGlzIHRydWUsIHRoZSBwcm9wIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nYWJsZXMuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgY2hhbmdlIHRoZVxuICogc2VsZWN0ZWQgb3B0aW9uIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSByZW5kZXJlZCBvcHRpb25zLlxuICpcbiAqIElmIGl0IGlzIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIG9wdGlvbnMgd2lsbCBub3RcbiAqIHVwZGF0ZSBpbiByZXNwb25zZSB0byB1c2VyIGFjdGlvbnMuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgb3B0aW9ucyB0byB1cGRhdGUuXG4gKlxuICogSWYgYGRlZmF1bHRWYWx1ZWAgaXMgcHJvdmlkZWQsIGFueSBvcHRpb25zIHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlcyB3aWxsIGJlXG4gKiBzZWxlY3RlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHJldHVybiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgfSk7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcyk7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgd2FzTXVsdGlwbGU6ICEhcHJvcHMubXVsdGlwbGVcbiAgfTtcblxuICB7XG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxKSB7XG4gICAgICBlcnJvcignU2VsZWN0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBzZWxlY3QgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICBub2RlLm11bHRpcGxlID0gISFwcm9wcy5tdWx0aXBsZTtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLmRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RVcGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHdhc011bHRpcGxlID0gbm9kZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlO1xuICBub2RlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUgPSAhIXByb3BzLm11bHRpcGxlO1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfSBlbHNlIGlmICh3YXNNdWx0aXBsZSAhPT0gISFwcm9wcy5tdWx0aXBsZSkge1xuICAgIC8vIEZvciBzaW1wbGljaXR5LCByZWFwcGx5IGBkZWZhdWx0VmFsdWVgIGlmIGBtdWx0aXBsZWAgaXMgdG9nZ2xlZC5cbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmV2ZXJ0IHRoZSBzZWxlY3QgYmFjayB0byBpdHMgZGVmYXVsdCB1bnNlbGVjdGVkIHN0YXRlLlxuICAgICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5tdWx0aXBsZSA/IFtdIDogJycsIGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9XG59XG5cbnZhciBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IGZhbHNlO1xuXG4vKipcbiAqIEltcGxlbWVudHMgYSA8dGV4dGFyZWE+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgYHZhbHVlYCwgYW5kXG4gKiBgZGVmYXVsdFZhbHVlYC4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIHRyYWRpdGlvbmFsIERPTSBBUEkgYmVjYXVzZSB2YWx1ZSBpc1xuICogdXN1YWxseSBzZXQgYXMgUENEQVRBIGNoaWxkcmVuLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGFmZmVjdCB0aGVcbiAqIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsXG4gKiBub3QgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggYW4gZW1wdHkgdmFsdWUsIHRoZSBwcm9wXG4gKiBgZGVmYXVsdFZhbHVlYCBpZiBzcGVjaWZpZWQsIG9yIHRoZSBjaGlsZHJlbiBjb250ZW50IChkZXByZWNhdGVkKS5cbiAqL1xuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIGlmICghKHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBkb2VzIG5vdCBtYWtlIHNlbnNlIG9uIDx0ZXh0YXJlYT4uXCIgKTtcbiAgICB9XG4gIH0gLy8gQWx3YXlzIHNldCBjaGlsZHJlbiB0byB0aGUgc2FtZSB0aGluZy4gSW4gSUU5LCB0aGUgc2VsZWN0aW9uIHJhbmdlIHdpbGxcbiAgLy8gZ2V0IHJlc2V0IGlmIGB0ZXh0Q29udGVudGAgaXMgbXV0YXRlZC4gIFdlIGNvdWxkIGFkZCBhIGNoZWNrIGluIHNldFRleHRDb250ZW50XG4gIC8vIHRvIG9ubHkgc2V0IHRoZSB2YWx1ZSBpZi93aGVuIHRoZSB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIG5vZGUgdmFsdWUgKHdoaWNoIHdvdWxkXG4gIC8vIGNvbXBsZXRlbHkgc29sdmUgdGhpcyBJRTkgYnVnKSwgYnV0IFNlYmFzdGlhbitTb3BoaWUgc2VlbWVkIHRvIGxpa2UgdGhpc1xuICAvLyBzb2x1dGlvbi4gVGhlIHZhbHVlIGNhbiBiZSBhIGJvb2xlYW4gb3Igb2JqZWN0IHNvIHRoYXQncyB3aHkgaXQncyBmb3JjZWRcbiAgLy8gdG8gYmUgYSBzdHJpbmcuXG5cblxuICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkLFxuICAgIGNoaWxkcmVuOiB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKVxuICB9KTtcblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuZnVuY3Rpb24gaW5pdFdyYXBwZXJTdGF0ZSQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygndGV4dGFyZWEnLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbERlZmF1bHRWYWwpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhIHRleHRhcmVhIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ1RleHRhcmVhIGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCB0ZXh0YXJlYSAnICsgJ2FuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50Jyk7XG5cbiAgICAgIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgaW5pdGlhbFZhbHVlID0gcHJvcHMudmFsdWU7IC8vIE9ubHkgYm90aGVyIGZldGNoaW5nIGRlZmF1bHQgdmFsdWUgaWYgd2UncmUgZ29pbmcgdG8gdXNlIGl0XG5cbiAgaWYgKGluaXRpYWxWYWx1ZSA9PSBudWxsKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIGVycm9yKCdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgaW5zdGVhZCBvZiBzZXR0aW5nICcgKyAnY2hpbGRyZW4gb24gPHRleHRhcmVhPi4nKTtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBpZiAoIShkZWZhdWx0VmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJJZiB5b3Ugc3VwcGx5IGBkZWZhdWx0VmFsdWVgIG9uIGEgPHRleHRhcmVhPiwgZG8gbm90IHBhc3MgY2hpbGRyZW4uXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICBpZiAoIShjaGlsZHJlbi5sZW5ndGggPD0gMSkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiPHRleHRhcmVhPiBjYW4gb25seSBoYXZlIGF0IG1vc3Qgb25lIGNoaWxkLlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlblswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGNoaWxkcmVuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgaW5pdGlhbFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIGluaXRpYWxWYWx1ZTogZ2V0VG9TdHJpbmdWYWx1ZShpbml0aWFsVmFsdWUpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgdmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKTtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMuZGVmYXVsdFZhbHVlKTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5IGRvIHRoaXMgYXMgbmVjZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgIHZhciBuZXdWYWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTsgLy8gVG8gYXZvaWQgc2lkZSBlZmZlY3RzIChzdWNoIGFzIGxvc2luZyB0ZXh0IHNlbGVjdGlvbiksIG9ubHkgc2V0IHZhbHVlIGlmIGNoYW5nZWRcblxuICAgIGlmIChuZXdWYWx1ZSAhPT0gbm9kZS52YWx1ZSkge1xuICAgICAgbm9kZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCAmJiBub2RlLmRlZmF1bHRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyhkZWZhdWx0VmFsdWUpO1xuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50OyAvLyBUaGlzIGlzIGluIHBvc3RNb3VudCBiZWNhdXNlIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBET00gbm9kZSwgd2hpY2ggaXMgbm90XG4gIC8vIGF2YWlsYWJsZSB1bnRpbCBhZnRlciB0aGUgY29tcG9uZW50IGhhcyBtb3VudGVkLlxuXG4gIHZhciB0ZXh0Q29udGVudCA9IG5vZGUudGV4dENvbnRlbnQ7IC8vIE9ubHkgc2V0IG5vZGUudmFsdWUgaWYgdGV4dENvbnRlbnQgaXMgZXF1YWwgdG8gdGhlIGV4cGVjdGVkXG4gIC8vIGluaXRpYWwgdmFsdWUuIEluIElFMTAvSUUxMSB0aGVyZSBpcyBhIGJ1ZyB3aGVyZSB0aGUgcGxhY2Vob2xkZXIgYXR0cmlidXRlXG4gIC8vIHdpbGwgcG9wdWxhdGUgdGV4dENvbnRlbnQgYXMgd2VsbC5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvMTAxNTI1L1xuXG4gIGlmICh0ZXh0Q29udGVudCA9PT0gbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSkge1xuICAgIGlmICh0ZXh0Q29udGVudCAhPT0gJycgJiYgdGV4dENvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUudmFsdWUgPSB0ZXh0Q29udGVudDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMihlbGVtZW50LCBwcm9wcykge1xuICAvLyBET00gY29tcG9uZW50IGlzIHN0aWxsIG1vdW50ZWQ7IHVwZGF0ZVxuICB1cGRhdGVXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpO1xufVxuXG52YXIgSFRNTF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG52YXIgTUFUSF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCc7XG52YXIgU1ZHX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG52YXIgTmFtZXNwYWNlcyA9IHtcbiAgaHRtbDogSFRNTF9OQU1FU1BBQ0UsXG4gIG1hdGhtbDogTUFUSF9OQU1FU1BBQ0UsXG4gIHN2ZzogU1ZHX05BTUVTUEFDRVxufTsgLy8gQXNzdW1lcyB0aGVyZSBpcyBubyBwYXJlbnQgbmFtZXNwYWNlLlxuXG5mdW5jdGlvbiBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdzdmcnOlxuICAgICAgcmV0dXJuIFNWR19OQU1FU1BBQ0U7XG5cbiAgICBjYXNlICdtYXRoJzpcbiAgICAgIHJldHVybiBNQVRIX05BTUVTUEFDRTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gSFRNTF9OQU1FU1BBQ0U7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldENoaWxkTmFtZXNwYWNlKHBhcmVudE5hbWVzcGFjZSwgdHlwZSkge1xuICBpZiAocGFyZW50TmFtZXNwYWNlID09IG51bGwgfHwgcGFyZW50TmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgIC8vIE5vIChvciBkZWZhdWx0KSBwYXJlbnQgbmFtZXNwYWNlOiBwb3RlbnRpYWwgZW50cnkgcG9pbnQuXG4gICAgcmV0dXJuIGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKTtcbiAgfVxuXG4gIGlmIChwYXJlbnROYW1lc3BhY2UgPT09IFNWR19OQU1FU1BBQ0UgJiYgdHlwZSA9PT0gJ2ZvcmVpZ25PYmplY3QnKSB7XG4gICAgLy8gV2UncmUgbGVhdmluZyBTVkcuXG4gICAgcmV0dXJuIEhUTUxfTkFNRVNQQUNFO1xuICB9IC8vIEJ5IGRlZmF1bHQsIHBhc3MgbmFtZXNwYWNlIGJlbG93LlxuXG5cbiAgcmV0dXJuIHBhcmVudE5hbWVzcGFjZTtcbn1cblxuLyogZ2xvYmFscyBNU0FwcCAqL1xuXG4vKipcbiAqIENyZWF0ZSBhIGZ1bmN0aW9uIHdoaWNoIGhhcyAndW5zYWZlJyBwcml2aWxlZ2VzIChyZXF1aXJlZCBieSB3aW5kb3dzOCBhcHBzKVxuICovXG52YXIgY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbiA9IGZ1bmN0aW9uIChmdW5jKSB7XG4gIGlmICh0eXBlb2YgTVNBcHAgIT09ICd1bmRlZmluZWQnICYmIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmdW5jKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuYztcbiAgfVxufTtcblxudmFyIHJldXNhYmxlU1ZHQ29udGFpbmVyO1xuLyoqXG4gKiBTZXQgdGhlIGlubmVySFRNTCBwcm9wZXJ0eSBvZiBhIG5vZGVcbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG52YXIgc2V0SW5uZXJIVE1MID0gY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbiAobm9kZSwgaHRtbCkge1xuICBpZiAobm9kZS5uYW1lc3BhY2VVUkkgPT09IE5hbWVzcGFjZXMuc3ZnKSB7XG5cbiAgICBpZiAoISgnaW5uZXJIVE1MJyBpbiBub2RlKSkge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBpbm5lckhUTUwgZm9yIFNWRyBub2Rlcywgc28gaW5zdGVhZCB3ZSBpbmplY3QgdGhlXG4gICAgICAvLyBuZXcgbWFya3VwIGluIGEgdGVtcCBub2RlIGFuZCB0aGVuIG1vdmUgdGhlIGNoaWxkIG5vZGVzIGFjcm9zcyBpbnRvXG4gICAgICAvLyB0aGUgdGFyZ2V0IG5vZGVcbiAgICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyID0gcmV1c2FibGVTVkdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICByZXVzYWJsZVNWR0NvbnRhaW5lci5pbm5lckhUTUwgPSAnPHN2Zz4nICsgaHRtbC52YWx1ZU9mKCkudG9TdHJpbmcoKSArICc8L3N2Zz4nO1xuICAgICAgdmFyIHN2Z05vZGUgPSByZXVzYWJsZVNWR0NvbnRhaW5lci5maXJzdENoaWxkO1xuXG4gICAgICB3aGlsZSAobm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHN2Z05vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlLmFwcGVuZENoaWxkKHN2Z05vZGUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG59KTtcblxuLyoqXG4gKiBIVE1MIG5vZGVUeXBlIHZhbHVlcyB0aGF0IHJlcHJlc2VudCB0aGUgdHlwZSBvZiB0aGUgbm9kZVxuICovXG52YXIgRUxFTUVOVF9OT0RFID0gMTtcbnZhciBURVhUX05PREUgPSAzO1xudmFyIENPTU1FTlRfTk9ERSA9IDg7XG52YXIgRE9DVU1FTlRfTk9ERSA9IDk7XG52YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERSA9IDExO1xuXG4vKipcbiAqIFNldCB0aGUgdGV4dENvbnRlbnQgcHJvcGVydHkgb2YgYSBub2RlLiBGb3IgdGV4dCB1cGRhdGVzLCBpdCdzIGZhc3RlclxuICogdG8gc2V0IHRoZSBgbm9kZVZhbHVlYCBvZiB0aGUgVGV4dCBub2RlIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmdcbiAqIGAudGV4dENvbnRlbnRgIHdoaWNoIHdpbGwgcmVtb3ZlIHRoZSBleGlzdGluZyBub2RlIGFuZCBjcmVhdGUgYSBuZXcgb25lLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBzZXRUZXh0Q29udGVudCA9IGZ1bmN0aW9uIChub2RlLCB0ZXh0KSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgdmFyIGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cbiAgICBpZiAoZmlyc3RDaGlsZCAmJiBmaXJzdENoaWxkID09PSBub2RlLmxhc3RDaGlsZCAmJiBmaXJzdENoaWxkLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIGZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn07XG5cbi8vIExpc3QgZGVyaXZlZCBmcm9tIEdlY2tvIHNvdXJjZSBjb2RlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvZ2Vja28tZGV2L2Jsb2IvNGU2MzhlZmM3MS9sYXlvdXQvc3R5bGUvdGVzdC9wcm9wZXJ0eV9kYXRhYmFzZS5qc1xudmFyIHNob3J0aGFuZFRvTG9uZ2hhbmQgPSB7XG4gIGFuaW1hdGlvbjogWydhbmltYXRpb25EZWxheScsICdhbmltYXRpb25EaXJlY3Rpb24nLCAnYW5pbWF0aW9uRHVyYXRpb24nLCAnYW5pbWF0aW9uRmlsbE1vZGUnLCAnYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQnLCAnYW5pbWF0aW9uTmFtZScsICdhbmltYXRpb25QbGF5U3RhdGUnLCAnYW5pbWF0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgYmFja2dyb3VuZDogWydiYWNrZ3JvdW5kQXR0YWNobWVudCcsICdiYWNrZ3JvdW5kQ2xpcCcsICdiYWNrZ3JvdW5kQ29sb3InLCAnYmFja2dyb3VuZEltYWdlJywgJ2JhY2tncm91bmRPcmlnaW4nLCAnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJywgJ2JhY2tncm91bmRSZXBlYXQnLCAnYmFja2dyb3VuZFNpemUnXSxcbiAgYmFja2dyb3VuZFBvc2l0aW9uOiBbJ2JhY2tncm91bmRQb3NpdGlvblgnLCAnYmFja2dyb3VuZFBvc2l0aW9uWSddLFxuICBib3JkZXI6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnLCAnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrRW5kOiBbJ2JvcmRlckJsb2NrRW5kQ29sb3InLCAnYm9yZGVyQmxvY2tFbmRTdHlsZScsICdib3JkZXJCbG9ja0VuZFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrU3RhcnQ6IFsnYm9yZGVyQmxvY2tTdGFydENvbG9yJywgJ2JvcmRlckJsb2NrU3RhcnRTdHlsZScsICdib3JkZXJCbG9ja1N0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyQm90dG9tOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG4gIGJvcmRlckNvbG9yOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclRvcENvbG9yJ10sXG4gIGJvcmRlckltYWdlOiBbJ2JvcmRlckltYWdlT3V0c2V0JywgJ2JvcmRlckltYWdlUmVwZWF0JywgJ2JvcmRlckltYWdlU2xpY2UnLCAnYm9yZGVySW1hZ2VTb3VyY2UnLCAnYm9yZGVySW1hZ2VXaWR0aCddLFxuICBib3JkZXJJbmxpbmVFbmQ6IFsnYm9yZGVySW5saW5lRW5kQ29sb3InLCAnYm9yZGVySW5saW5lRW5kU3R5bGUnLCAnYm9yZGVySW5saW5lRW5kV2lkdGgnXSxcbiAgYm9yZGVySW5saW5lU3RhcnQ6IFsnYm9yZGVySW5saW5lU3RhcnRDb2xvcicsICdib3JkZXJJbmxpbmVTdGFydFN0eWxlJywgJ2JvcmRlcklubGluZVN0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyTGVmdDogWydib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlckxlZnRXaWR0aCddLFxuICBib3JkZXJSYWRpdXM6IFsnYm9yZGVyQm90dG9tTGVmdFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVzJ10sXG4gIGJvcmRlclJpZ2h0OiBbJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJ10sXG4gIGJvcmRlclN0eWxlOiBbJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclRvcFN0eWxlJ10sXG4gIGJvcmRlclRvcDogWydib3JkZXJUb3BDb2xvcicsICdib3JkZXJUb3BTdHlsZScsICdib3JkZXJUb3BXaWR0aCddLFxuICBib3JkZXJXaWR0aDogWydib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCcsICdib3JkZXJUb3BXaWR0aCddLFxuICBjb2x1bW5SdWxlOiBbJ2NvbHVtblJ1bGVDb2xvcicsICdjb2x1bW5SdWxlU3R5bGUnLCAnY29sdW1uUnVsZVdpZHRoJ10sXG4gIGNvbHVtbnM6IFsnY29sdW1uQ291bnQnLCAnY29sdW1uV2lkdGgnXSxcbiAgZmxleDogWydmbGV4QmFzaXMnLCAnZmxleEdyb3cnLCAnZmxleFNocmluayddLFxuICBmbGV4RmxvdzogWydmbGV4RGlyZWN0aW9uJywgJ2ZsZXhXcmFwJ10sXG4gIGZvbnQ6IFsnZm9udEZhbWlseScsICdmb250RmVhdHVyZVNldHRpbmdzJywgJ2ZvbnRLZXJuaW5nJywgJ2ZvbnRMYW5ndWFnZU92ZXJyaWRlJywgJ2ZvbnRTaXplJywgJ2ZvbnRTaXplQWRqdXN0JywgJ2ZvbnRTdHJldGNoJywgJ2ZvbnRTdHlsZScsICdmb250VmFyaWFudCcsICdmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJywgJ2ZvbnRXZWlnaHQnLCAnbGluZUhlaWdodCddLFxuICBmb250VmFyaWFudDogWydmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJ10sXG4gIGdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWQ6IFsnZ3JpZEF1dG9Db2x1bW5zJywgJ2dyaWRBdXRvRmxvdycsICdncmlkQXV0b1Jvd3MnLCAnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGdyaWRBcmVhOiBbJ2dyaWRDb2x1bW5FbmQnLCAnZ3JpZENvbHVtblN0YXJ0JywgJ2dyaWRSb3dFbmQnLCAnZ3JpZFJvd1N0YXJ0J10sXG4gIGdyaWRDb2x1bW46IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnXSxcbiAgZ3JpZENvbHVtbkdhcDogWydjb2x1bW5HYXAnXSxcbiAgZ3JpZEdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWRSb3c6IFsnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZFJvd0dhcDogWydyb3dHYXAnXSxcbiAgZ3JpZFRlbXBsYXRlOiBbJ2dyaWRUZW1wbGF0ZUFyZWFzJywgJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnLCAnZ3JpZFRlbXBsYXRlUm93cyddLFxuICBsaXN0U3R5bGU6IFsnbGlzdFN0eWxlSW1hZ2UnLCAnbGlzdFN0eWxlUG9zaXRpb24nLCAnbGlzdFN0eWxlVHlwZSddLFxuICBtYXJnaW46IFsnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luVG9wJ10sXG4gIG1hcmtlcjogWydtYXJrZXJFbmQnLCAnbWFya2VyTWlkJywgJ21hcmtlclN0YXJ0J10sXG4gIG1hc2s6IFsnbWFza0NsaXAnLCAnbWFza0NvbXBvc2l0ZScsICdtYXNrSW1hZ2UnLCAnbWFza01vZGUnLCAnbWFza09yaWdpbicsICdtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknLCAnbWFza1JlcGVhdCcsICdtYXNrU2l6ZSddLFxuICBtYXNrUG9zaXRpb246IFsnbWFza1Bvc2l0aW9uWCcsICdtYXNrUG9zaXRpb25ZJ10sXG4gIG91dGxpbmU6IFsnb3V0bGluZUNvbG9yJywgJ291dGxpbmVTdHlsZScsICdvdXRsaW5lV2lkdGgnXSxcbiAgb3ZlcmZsb3c6IFsnb3ZlcmZsb3dYJywgJ292ZXJmbG93WSddLFxuICBwYWRkaW5nOiBbJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdUb3AnXSxcbiAgcGxhY2VDb250ZW50OiBbJ2FsaWduQ29udGVudCcsICdqdXN0aWZ5Q29udGVudCddLFxuICBwbGFjZUl0ZW1zOiBbJ2FsaWduSXRlbXMnLCAnanVzdGlmeUl0ZW1zJ10sXG4gIHBsYWNlU2VsZjogWydhbGlnblNlbGYnLCAnanVzdGlmeVNlbGYnXSxcbiAgdGV4dERlY29yYXRpb246IFsndGV4dERlY29yYXRpb25Db2xvcicsICd0ZXh0RGVjb3JhdGlvbkxpbmUnLCAndGV4dERlY29yYXRpb25TdHlsZSddLFxuICB0ZXh0RW1waGFzaXM6IFsndGV4dEVtcGhhc2lzQ29sb3InLCAndGV4dEVtcGhhc2lzU3R5bGUnXSxcbiAgdHJhbnNpdGlvbjogWyd0cmFuc2l0aW9uRGVsYXknLCAndHJhbnNpdGlvbkR1cmF0aW9uJywgJ3RyYW5zaXRpb25Qcm9wZXJ0eScsICd0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgd29yZFdyYXA6IFsnb3ZlcmZsb3dXcmFwJ11cbn07XG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG52YXIgaXNVbml0bGVzc051bWJlciA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IHRydWUsXG4gIGJvcmRlckltYWdlT3V0c2V0OiB0cnVlLFxuICBib3JkZXJJbWFnZVNsaWNlOiB0cnVlLFxuICBib3JkZXJJbWFnZVdpZHRoOiB0cnVlLFxuICBib3hGbGV4OiB0cnVlLFxuICBib3hGbGV4R3JvdXA6IHRydWUsXG4gIGJveE9yZGluYWxHcm91cDogdHJ1ZSxcbiAgY29sdW1uQ291bnQ6IHRydWUsXG4gIGNvbHVtbnM6IHRydWUsXG4gIGZsZXg6IHRydWUsXG4gIGZsZXhHcm93OiB0cnVlLFxuICBmbGV4UG9zaXRpdmU6IHRydWUsXG4gIGZsZXhTaHJpbms6IHRydWUsXG4gIGZsZXhOZWdhdGl2ZTogdHJ1ZSxcbiAgZmxleE9yZGVyOiB0cnVlLFxuICBncmlkQXJlYTogdHJ1ZSxcbiAgZ3JpZFJvdzogdHJ1ZSxcbiAgZ3JpZFJvd0VuZDogdHJ1ZSxcbiAgZ3JpZFJvd1NwYW46IHRydWUsXG4gIGdyaWRSb3dTdGFydDogdHJ1ZSxcbiAgZ3JpZENvbHVtbjogdHJ1ZSxcbiAgZ3JpZENvbHVtbkVuZDogdHJ1ZSxcbiAgZ3JpZENvbHVtblNwYW46IHRydWUsXG4gIGdyaWRDb2x1bW5TdGFydDogdHJ1ZSxcbiAgZm9udFdlaWdodDogdHJ1ZSxcbiAgbGluZUNsYW1wOiB0cnVlLFxuICBsaW5lSGVpZ2h0OiB0cnVlLFxuICBvcGFjaXR5OiB0cnVlLFxuICBvcmRlcjogdHJ1ZSxcbiAgb3JwaGFuczogdHJ1ZSxcbiAgdGFiU2l6ZTogdHJ1ZSxcbiAgd2lkb3dzOiB0cnVlLFxuICB6SW5kZXg6IHRydWUsXG4gIHpvb206IHRydWUsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IHRydWUsXG4gIGZsb29kT3BhY2l0eTogdHJ1ZSxcbiAgc3RvcE9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZURhc2hhcnJheTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogdHJ1ZSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogdHJ1ZSxcbiAgc3Ryb2tlT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlV2lkdGg6IHRydWVcbn07XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggdmVuZG9yLXNwZWNpZmljIHByZWZpeCwgZWc6IFdlYmtpdFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBzdHlsZSBuYW1lLCBlZzogdHJhbnNpdGlvbkR1cmF0aW9uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHN0eWxlIG5hbWUgcHJlZml4ZWQgd2l0aCBgcHJlZml4YCwgcHJvcGVybHkgY2FtZWxDYXNlZCwgZWc6XG4gKiBXZWJraXRUcmFuc2l0aW9uRHVyYXRpb25cbiAqL1xuXG5mdW5jdGlvbiBwcmVmaXhLZXkocHJlZml4LCBrZXkpIHtcbiAgcmV0dXJuIHByZWZpeCArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7XG59XG4vKipcbiAqIFN1cHBvcnQgc3R5bGUgbmFtZXMgdGhhdCBtYXkgY29tZSBwYXNzZWQgaW4gcHJlZml4ZWQgYnkgYWRkaW5nIHBlcm11dGF0aW9uc1xuICogb2YgdmVuZG9yIHByZWZpeGVzLlxuICovXG5cblxudmFyIHByZWZpeGVzID0gWydXZWJraXQnLCAnbXMnLCAnTW96JywgJ08nXTsgLy8gVXNpbmcgT2JqZWN0LmtleXMgaGVyZSwgb3IgZWxzZSB0aGUgdmFuaWxsYSBmb3ItaW4gbG9vcCBtYWtlcyBJRTggZ28gaW50byBhblxuLy8gaW5maW5pdGUgbG9vcCwgYmVjYXVzZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBuZXdseSBhZGRlZCBwcm9wcyB0b28uXG5cbk9iamVjdC5rZXlzKGlzVW5pdGxlc3NOdW1iZXIpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgcHJlZml4ZXMuZm9yRWFjaChmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgaXNVbml0bGVzc051bWJlcltwcmVmaXhLZXkocHJlZml4LCBwcm9wKV0gPSBpc1VuaXRsZXNzTnVtYmVyW3Byb3BdO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIHRoZSBwcm9wZXIgY3NzIHdyaXRhYmxlIHZhbHVlLiBUaGUgc3R5bGUgbmFtZSBgbmFtZWBcbiAqIHNob3VsZCBiZSBsb2dpY2FsIChubyBoeXBoZW5zKSwgYXMgc3BlY2lmaWVkXG4gKiBpbiBgQ1NTUHJvcGVydHkuaXNVbml0bGVzc051bWJlcmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQ1NTIHByb3BlcnR5IG5hbWUgc3VjaCBhcyBgdG9wTWFyZ2luYC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQ1NTIHByb3BlcnR5IHZhbHVlIHN1Y2ggYXMgYDEwcHhgLlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIHN0eWxlIHZhbHVlIHdpdGggZGltZW5zaW9ucyBhcHBsaWVkLlxuICovXG5cbmZ1bmN0aW9uIGRhbmdlcm91c1N0eWxlVmFsdWUobmFtZSwgdmFsdWUsIGlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgLy8gTm90ZSB0aGF0IHdlJ3ZlIHJlbW92ZWQgZXNjYXBlVGV4dEZvckJyb3dzZXIoKSBjYWxscyBoZXJlIHNpbmNlIHRoZVxuICAvLyB3aG9sZSBzdHJpbmcgd2lsbCBiZSBlc2NhcGVkIHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBpbmplY3RlZCBpbnRvXG4gIC8vIHRoZSBtYXJrdXAuIElmIHlvdSBwcm92aWRlIHVuc2FmZSB1c2VyIGRhdGEgaGVyZSB0aGV5IGNhbiBpbmplY3RcbiAgLy8gYXJiaXRyYXJ5IENTUyB3aGljaCBtYXkgYmUgcHJvYmxlbWF0aWMgKEkgY291bGRuJ3QgcmVwcm8gdGhpcyk6XG4gIC8vIGh0dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvWFNTX0ZpbHRlcl9FdmFzaW9uX0NoZWF0X1NoZWV0XG4gIC8vIGh0dHA6Ly93d3cudGhlc3Bhbm5lci5jby51ay8yMDA3LzExLzI2L3VsdGltYXRlLXhzcy1jc3MtaW5qZWN0aW9uL1xuICAvLyBUaGlzIGlzIG5vdCBhbiBYU1MgaG9sZSBidXQgaW5zdGVhZCBhIHBvdGVudGlhbCBDU1MgaW5qZWN0aW9uIGlzc3VlXG4gIC8vIHdoaWNoIGhhcyBsZWFkIHRvIGEgZ3JlYXRlciBkaXNjdXNzaW9uIGFib3V0IGhvdyB3ZSdyZSBnb2luZyB0b1xuICAvLyB0cnVzdCBVUkxzIG1vdmluZyBmb3J3YXJkLiBTZWUgIzIxMTU5MDFcbiAgdmFyIGlzRW1wdHkgPSB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJztcblxuICBpZiAoaXNFbXB0eSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICghaXNDdXN0b21Qcm9wZXJ0eSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwICYmICEoaXNVbml0bGVzc051bWJlci5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBpc1VuaXRsZXNzTnVtYmVyW25hbWVdKSkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7IC8vIFByZXN1bWVzIGltcGxpY2l0ICdweCcgc3VmZml4IGZvciB1bml0bGVzcyBudW1iZXJzXG4gIH1cblxuICByZXR1cm4gKCcnICsgdmFsdWUpLnRyaW0oKTtcbn1cblxudmFyIHVwcGVyY2FzZVBhdHRlcm4gPSAvKFtBLVpdKS9nO1xudmFyIG1zUGF0dGVybiA9IC9ebXMtLztcbi8qKlxuICogSHlwaGVuYXRlcyBhIGNhbWVsY2FzZWQgQ1NTIHByb3BlcnR5IG5hbWUsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ01velRyYW5zaXRpb24nKVxuICogICA8IFwiLW1vei10cmFuc2l0aW9uXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ21zVHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbXMtdHJhbnNpdGlvblwiXG4gKlxuICogQXMgTW9kZXJuaXpyIHN1Z2dlc3RzIChodHRwOi8vbW9kZXJuaXpyLmNvbS9kb2NzLyNwcmVmaXhlZCksIGFuIGBtc2AgcHJlZml4XG4gKiBpcyBjb252ZXJ0ZWQgdG8gYC1tcy1gLlxuICovXG5cbmZ1bmN0aW9uIGh5cGhlbmF0ZVN0eWxlTmFtZShuYW1lKSB7XG4gIHJldHVybiBuYW1lLnJlcGxhY2UodXBwZXJjYXNlUGF0dGVybiwgJy0kMScpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShtc1BhdHRlcm4sICctbXMtJyk7XG59XG5cbnZhciB3YXJuVmFsaWRTdHlsZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIC8vICdtc1RyYW5zZm9ybScgaXMgY29ycmVjdCwgYnV0IHRoZSBvdGhlciBwcmVmaXhlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWRcbiAgdmFyIGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybiA9IC9eKD86d2Via2l0fG1venxvKVtBLVpdLztcbiAgdmFyIG1zUGF0dGVybiQxID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nOyAvLyBzdHlsZSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb25cblxuICB2YXIgYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuID0gLztcXHMqJC87XG4gIHZhciB3YXJuZWRTdHlsZU5hbWVzID0ge307XG4gIHZhciB3YXJuZWRTdHlsZVZhbHVlcyA9IHt9O1xuICB2YXIgd2FybmVkRm9yTmFOVmFsdWUgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSBmYWxzZTtcblxuICB2YXIgY2FtZWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChfLCBjaGFyYWN0ZXIpIHtcbiAgICAgIHJldHVybiBjaGFyYWN0ZXIudG9VcHBlckNhc2UoKTtcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdVbnN1cHBvcnRlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIC8vIEFzIEFuZGkgU21pdGggc3VnZ2VzdHNcbiAgICAvLyAoaHR0cDovL3d3dy5hbmRpc21pdGguY29tL2Jsb2cvMjAxMi8wMi9tb2Rlcm5penItcHJlZml4ZWQvKSwgYW4gYC1tc2AgcHJlZml4XG4gICAgLy8gaXMgY29udmVydGVkIHRvIGxvd2VyY2FzZSBgbXNgLlxuICAgIGNhbWVsaXplKG5hbWUucmVwbGFjZShtc1BhdHRlcm4kMSwgJ21zLScpKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Vuc3VwcG9ydGVkIHZlbmRvci1wcmVmaXhlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoXCJTdHlsZSBwcm9wZXJ0eSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb24uIFwiICsgJ1RyeSBcIiVzOiAlc1wiIGluc3RlYWQuJywgbmFtZSwgdmFsdWUucmVwbGFjZShiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4sICcnKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNOYU4gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9yTmFOVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRGb3JOYU5WYWx1ZSA9IHRydWU7XG5cbiAgICBlcnJvcignYE5hTmAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9ySW5maW5pdHlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSB0cnVlO1xuXG4gICAgZXJyb3IoJ2BJbmZpbml0eWAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKG5hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuLnRlc3QobmFtZSkpIHtcbiAgICAgIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uKG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzTmFOKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkobmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlJDEgPSB3YXJuVmFsaWRTdHlsZTtcblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciBkZWFsaW5nIHdpdGggQ1NTIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNyZWF0ZXMgYSBzdHJpbmcgdGhhdCBpcyBleHBlY3RlZCB0byBiZSBlcXVpdmFsZW50IHRvIHRoZSBzdHlsZVxuICogYXR0cmlidXRlIGdlbmVyYXRlZCBieSBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIEl0IGJ5LXBhc3NlcyB3YXJuaW5ncyBhbmRcbiAqIHNlY3VyaXR5IGNoZWNrcyBzbyBpdCdzIG5vdCBzYWZlIHRvIHVzZSB0aGlzIHZhbHVlIGZvciBhbnl0aGluZyBvdGhlciB0aGFuXG4gKiBjb21wYXJpc29uLiBJdCBpcyBvbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEYW5nZXJvdXNTdHJpbmdGb3JTdHlsZXMoc3R5bGVzKSB7XG4gIHtcbiAgICB2YXIgc2VyaWFsaXplZCA9ICcnO1xuICAgIHZhciBkZWxpbWl0ZXIgPSAnJztcblxuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHlsZVZhbHVlID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cbiAgICAgIGlmIChzdHlsZVZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtcbiAgICAgICAgc2VyaWFsaXplZCArPSBkZWxpbWl0ZXIgKyAoaXNDdXN0b21Qcm9wZXJ0eSA/IHN0eWxlTmFtZSA6IGh5cGhlbmF0ZVN0eWxlTmFtZShzdHlsZU5hbWUpKSArICc6JztcbiAgICAgICAgc2VyaWFsaXplZCArPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSwgaXNDdXN0b21Qcm9wZXJ0eSk7XG4gICAgICAgIGRlbGltaXRlciA9ICc7JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VyaWFsaXplZCB8fCBudWxsO1xuICB9XG59XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGZvciBtdWx0aXBsZSBzdHlsZXMgb24gYSBub2RlLiAgSWYgYSB2YWx1ZSBpcyBzcGVjaWZpZWQgYXNcbiAqICcnIChlbXB0eSBzdHJpbmcpLCB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVuc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IHN0eWxlc1xuICovXG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yU3R5bGVzKG5vZGUsIHN0eWxlcykge1xuICB2YXIgc3R5bGUgPSBub2RlLnN0eWxlO1xuXG4gIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuXG4gICAge1xuICAgICAgaWYgKCFpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICAgIHdhcm5WYWxpZFN0eWxlJDEoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlVmFsdWUgPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0sIGlzQ3VzdG9tUHJvcGVydHkpO1xuXG4gICAgaWYgKHN0eWxlTmFtZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgc3R5bGVOYW1lID0gJ2Nzc0Zsb2F0JztcbiAgICB9XG5cbiAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCBzdHlsZVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVbc3R5bGVOYW1lXSA9IHN0eWxlVmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVFbXB0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG59XG4vKipcbiAqIEdpdmVuIHtjb2xvcjogJ3JlZCcsIG92ZXJmbG93OiAnaGlkZGVuJ30gcmV0dXJucyB7XG4gKiAgIGNvbG9yOiAnY29sb3InLFxuICogICBvdmVyZmxvd1g6ICdvdmVyZmxvdycsXG4gKiAgIG92ZXJmbG93WTogJ292ZXJmbG93JyxcbiAqIH0uIFRoaXMgY2FuIGJlIHJlYWQgYXMgXCJ0aGUgb3ZlcmZsb3dZIHByb3BlcnR5IHdhcyBzZXQgYnkgdGhlIG92ZXJmbG93XG4gKiBzaG9ydGhhbmRcIi4gVGhhdCBpcywgdGhlIHZhbHVlcyBhcmUgdGhlIHByb3BlcnR5IHRoYXQgZWFjaCB3YXMgZGVyaXZlZCBmcm9tLlxuICovXG5cblxuZnVuY3Rpb24gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlcykge1xuICB2YXIgZXhwYW5kZWQgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gc3R5bGVzKSB7XG4gICAgdmFyIGxvbmdoYW5kcyA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5XSB8fCBba2V5XTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2hhbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBleHBhbmRlZFtsb25naGFuZHNbaV1dID0ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBhbmRlZDtcbn1cbi8qKlxuICogV2hlbiBtaXhpbmcgc2hvcnRoYW5kIGFuZCBsb25naGFuZCBwcm9wZXJ0eSBuYW1lcywgd2Ugd2FybiBkdXJpbmcgdXBkYXRlcyBpZlxuICogd2UgZXhwZWN0IGFuIGluY29ycmVjdCByZXN1bHQgdG8gb2NjdXIuIEluIHBhcnRpY3VsYXIsIHdlIHdhcm4gZm9yOlxuICpcbiAqIFVwZGF0aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIG92ZXJ3cml0dGVuKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250OiAnYmF6JywgZm9udFZhcmlhbnQ6ICdiYXInfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250ID0gJ2JheidcbiAqIFJlbW92aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIGxvc3QgdG9vKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250VmFyaWFudDogJ2Jhcid9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnQgPSAnJ1xuICogUmVtb3ZpbmcgYSBsb25naGFuZCBwcm9wZXJ0eSAoc2hvdWxkIHJldmVydCB0byBzaG9ydGhhbmQ7IGRvZXNuJ3QpOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnQ6ICdmb28nfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250VmFyaWFudCA9ICcnXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYoc3R5bGVVcGRhdGVzLCBuZXh0U3R5bGVzKSB7XG4gIHtcbiAgICBpZiAoIW5leHRTdHlsZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXhwYW5kZWRVcGRhdGVzID0gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlVXBkYXRlcyk7XG4gICAgdmFyIGV4cGFuZGVkU3R5bGVzID0gZXhwYW5kU2hvcnRoYW5kTWFwKG5leHRTdHlsZXMpO1xuICAgIHZhciB3YXJuZWRBYm91dCA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIGV4cGFuZGVkVXBkYXRlcykge1xuICAgICAgdmFyIG9yaWdpbmFsS2V5ID0gZXhwYW5kZWRVcGRhdGVzW2tleV07XG4gICAgICB2YXIgY29ycmVjdE9yaWdpbmFsS2V5ID0gZXhwYW5kZWRTdHlsZXNba2V5XTtcblxuICAgICAgaWYgKGNvcnJlY3RPcmlnaW5hbEtleSAmJiBvcmlnaW5hbEtleSAhPT0gY29ycmVjdE9yaWdpbmFsS2V5KSB7XG4gICAgICAgIHZhciB3YXJuaW5nS2V5ID0gb3JpZ2luYWxLZXkgKyAnLCcgKyBjb3JyZWN0T3JpZ2luYWxLZXk7XG5cbiAgICAgICAgaWYgKHdhcm5lZEFib3V0W3dhcm5pbmdLZXldKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB3YXJuZWRBYm91dFt3YXJuaW5nS2V5XSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzIGEgc3R5bGUgcHJvcGVydHkgZHVyaW5nIHJlcmVuZGVyICglcykgd2hlbiBhICcgKyAnY29uZmxpY3RpbmcgcHJvcGVydHkgaXMgc2V0ICglcykgY2FuIGxlYWQgdG8gc3R5bGluZyBidWdzLiBUbyAnICsgXCJhdm9pZCB0aGlzLCBkb24ndCBtaXggc2hvcnRoYW5kIGFuZCBub24tc2hvcnRoYW5kIHByb3BlcnRpZXMgXCIgKyAnZm9yIHRoZSBzYW1lIHZhbHVlOyBpbnN0ZWFkLCByZXBsYWNlIHRoZSBzaG9ydGhhbmQgd2l0aCAnICsgJ3NlcGFyYXRlIHZhbHVlcy4nLCBpc1ZhbHVlRW1wdHkoc3R5bGVVcGRhdGVzW29yaWdpbmFsS2V5XSkgPyAnUmVtb3ZpbmcnIDogJ1VwZGF0aW5nJywgb3JpZ2luYWxLZXksIGNvcnJlY3RPcmlnaW5hbEtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEZvciBIVE1MLCBjZXJ0YWluIHRhZ3Mgc2hvdWxkIG9taXQgdGhlaXIgY2xvc2UgdGFnLiBXZSBrZWVwIGEgbGlzdCBmb3Jcbi8vIHRob3NlIHNwZWNpYWwtY2FzZSB0YWdzLlxudmFyIG9taXR0ZWRDbG9zZVRhZ3MgPSB7XG4gIGFyZWE6IHRydWUsXG4gIGJhc2U6IHRydWUsXG4gIGJyOiB0cnVlLFxuICBjb2w6IHRydWUsXG4gIGVtYmVkOiB0cnVlLFxuICBocjogdHJ1ZSxcbiAgaW1nOiB0cnVlLFxuICBpbnB1dDogdHJ1ZSxcbiAga2V5Z2VuOiB0cnVlLFxuICBsaW5rOiB0cnVlLFxuICBtZXRhOiB0cnVlLFxuICBwYXJhbTogdHJ1ZSxcbiAgc291cmNlOiB0cnVlLFxuICB0cmFjazogdHJ1ZSxcbiAgd2JyOiB0cnVlIC8vIE5PVEU6IG1lbnVpdGVtJ3MgY2xvc2UgdGFnIHNob3VsZCBiZSBvbWl0dGVkLCBidXQgdGhhdCBjYXVzZXMgcHJvYmxlbXMuXG5cbn07XG5cbi8vIGBvbWl0dGVkQ2xvc2VUYWdzYCBleGNlcHQgdGhhdCBgbWVudWl0ZW1gIHNob3VsZCBzdGlsbCBoYXZlIGl0cyBjbG9zaW5nIHRhZy5cblxudmFyIHZvaWRFbGVtZW50VGFncyA9IF9hc3NpZ24oe1xuICBtZW51aXRlbTogdHJ1ZVxufSwgb21pdHRlZENsb3NlVGFncyk7XG5cbnZhciBIVE1MID0gJ19faHRtbCc7XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUHJvcHModGFnLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIE5vdGUgdGhlIHVzZSBvZiBgPT1gIHdoaWNoIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWQuXG5cblxuICBpZiAodm9pZEVsZW1lbnRUYWdzW3RhZ10pIHtcbiAgICBpZiAoIShwcm9wcy5jaGlsZHJlbiA9PSBudWxsICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCB0YWcgKyBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICE9IG51bGwpIHtcbiAgICBpZiAoIShwcm9wcy5jaGlsZHJlbiA9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJDYW4gb25seSBzZXQgb25lIG9mIGBjaGlsZHJlbmAgb3IgYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiYgSFRNTCBpbiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIGluIHRoZSBmb3JtIGB7X19odG1sOiAuLi59YC4gUGxlYXNlIHZpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kYW5nZXJvdXNseS1zZXQtaW5uZXItaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoIXByb3BzLnN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyAmJiBwcm9wcy5jb250ZW50RWRpdGFibGUgJiYgcHJvcHMuY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0EgY29tcG9uZW50IGlzIGBjb250ZW50RWRpdGFibGVgIGFuZCBjb250YWlucyBgY2hpbGRyZW5gIG1hbmFnZWQgYnkgJyArICdSZWFjdC4gSXQgaXMgbm93IHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gZ3VhcmFudGVlIHRoYXQgbm9uZSBvZiAnICsgJ3Rob3NlIG5vZGVzIGFyZSB1bmV4cGVjdGVkbHkgbW9kaWZpZWQgb3IgZHVwbGljYXRlZC4gVGhpcyBpcyAnICsgJ3Byb2JhYmx5IG5vdCBpbnRlbnRpb25hbC4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIShwcm9wcy5zdHlsZSA9PSBudWxsIHx8IHR5cGVvZiBwcm9wcy5zdHlsZSA9PT0gJ29iamVjdCcpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIGBzdHlsZWAgcHJvcCBleHBlY3RzIGEgbWFwcGluZyBmcm9tIHN0eWxlIHByb3BlcnRpZXMgdG8gdmFsdWVzLCBub3QgYSBzdHJpbmcuIEZvciBleGFtcGxlLCBzdHlsZT17e21hcmdpblJpZ2h0OiBzcGFjaW5nICsgJ2VtJ319IHdoZW4gdXNpbmcgSlNYLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ3VzdG9tQ29tcG9uZW50KHRhZ05hbWUsIHByb3BzKSB7XG4gIGlmICh0YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gdHlwZW9mIHByb3BzLmlzID09PSAnc3RyaW5nJztcbiAgfVxuXG4gIHN3aXRjaCAodGFnTmFtZSkge1xuICAgIC8vIFRoZXNlIGFyZSByZXNlcnZlZCBTVkcgYW5kIE1hdGhNTCBlbGVtZW50cy5cbiAgICAvLyBXZSBkb24ndCBtaW5kIHRoaXMgbGlzdCB0b28gbXVjaCBiZWNhdXNlIHdlIGV4cGVjdCBpdCB0byBuZXZlciBncm93LlxuICAgIC8vIFRoZSBhbHRlcm5hdGl2ZSBpcyB0byB0cmFjayB0aGUgbmFtZXNwYWNlIGluIGEgZmV3IHBsYWNlcyB3aGljaCBpcyBjb252b2x1dGVkLlxuICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJjb21wb25lbnRzL3NwZWMvY3VzdG9tLyNjdXN0b20tZWxlbWVudHMtY29yZS1jb25jZXB0c1xuICAgIGNhc2UgJ2Fubm90YXRpb24teG1sJzpcbiAgICBjYXNlICdjb2xvci1wcm9maWxlJzpcbiAgICBjYXNlICdmb250LWZhY2UnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1zcmMnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS11cmknOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1mb3JtYXQnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1uYW1lJzpcbiAgICBjYXNlICdtaXNzaW5nLWdseXBoJzpcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vLyBXaGVuIGFkZGluZyBhdHRyaWJ1dGVzIHRvIHRoZSBIVE1MIG9yIFNWRyBhbGxvd2VkIGF0dHJpYnV0ZSBsaXN0LCBiZSBzdXJlIHRvXG4vLyBhbHNvIGFkZCB0aGVtIHRvIHRoaXMgbW9kdWxlIHRvIGVuc3VyZSBjYXNpbmcgYW5kIGluY29ycmVjdCBuYW1lXG4vLyB3YXJuaW5ncy5cbnZhciBwb3NzaWJsZVN0YW5kYXJkTmFtZXMgPSB7XG4gIC8vIEhUTUxcbiAgYWNjZXB0OiAnYWNjZXB0JyxcbiAgYWNjZXB0Y2hhcnNldDogJ2FjY2VwdENoYXJzZXQnLFxuICAnYWNjZXB0LWNoYXJzZXQnOiAnYWNjZXB0Q2hhcnNldCcsXG4gIGFjY2Vzc2tleTogJ2FjY2Vzc0tleScsXG4gIGFjdGlvbjogJ2FjdGlvbicsXG4gIGFsbG93ZnVsbHNjcmVlbjogJ2FsbG93RnVsbFNjcmVlbicsXG4gIGFsdDogJ2FsdCcsXG4gIGFzOiAnYXMnLFxuICBhc3luYzogJ2FzeW5jJyxcbiAgYXV0b2NhcGl0YWxpemU6ICdhdXRvQ2FwaXRhbGl6ZScsXG4gIGF1dG9jb21wbGV0ZTogJ2F1dG9Db21wbGV0ZScsXG4gIGF1dG9jb3JyZWN0OiAnYXV0b0NvcnJlY3QnLFxuICBhdXRvZm9jdXM6ICdhdXRvRm9jdXMnLFxuICBhdXRvcGxheTogJ2F1dG9QbGF5JyxcbiAgYXV0b3NhdmU6ICdhdXRvU2F2ZScsXG4gIGNhcHR1cmU6ICdjYXB0dXJlJyxcbiAgY2VsbHBhZGRpbmc6ICdjZWxsUGFkZGluZycsXG4gIGNlbGxzcGFjaW5nOiAnY2VsbFNwYWNpbmcnLFxuICBjaGFsbGVuZ2U6ICdjaGFsbGVuZ2UnLFxuICBjaGFyc2V0OiAnY2hhclNldCcsXG4gIGNoZWNrZWQ6ICdjaGVja2VkJyxcbiAgY2hpbGRyZW46ICdjaGlsZHJlbicsXG4gIGNpdGU6ICdjaXRlJyxcbiAgY2xhc3M6ICdjbGFzc05hbWUnLFxuICBjbGFzc2lkOiAnY2xhc3NJRCcsXG4gIGNsYXNzbmFtZTogJ2NsYXNzTmFtZScsXG4gIGNvbHM6ICdjb2xzJyxcbiAgY29sc3BhbjogJ2NvbFNwYW4nLFxuICBjb250ZW50OiAnY29udGVudCcsXG4gIGNvbnRlbnRlZGl0YWJsZTogJ2NvbnRlbnRFZGl0YWJsZScsXG4gIGNvbnRleHRtZW51OiAnY29udGV4dE1lbnUnLFxuICBjb250cm9sczogJ2NvbnRyb2xzJyxcbiAgY29udHJvbHNsaXN0OiAnY29udHJvbHNMaXN0JyxcbiAgY29vcmRzOiAnY29vcmRzJyxcbiAgY3Jvc3NvcmlnaW46ICdjcm9zc09yaWdpbicsXG4gIGRhbmdlcm91c2x5c2V0aW5uZXJodG1sOiAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLFxuICBkYXRhOiAnZGF0YScsXG4gIGRhdGV0aW1lOiAnZGF0ZVRpbWUnLFxuICBkZWZhdWx0OiAnZGVmYXVsdCcsXG4gIGRlZmF1bHRjaGVja2VkOiAnZGVmYXVsdENoZWNrZWQnLFxuICBkZWZhdWx0dmFsdWU6ICdkZWZhdWx0VmFsdWUnLFxuICBkZWZlcjogJ2RlZmVyJyxcbiAgZGlyOiAnZGlyJyxcbiAgZGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gIGRpc2FibGVwaWN0dXJlaW5waWN0dXJlOiAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnLFxuICBkaXNhYmxlcmVtb3RlcGxheWJhY2s6ICdkaXNhYmxlUmVtb3RlUGxheWJhY2snLFxuICBkb3dubG9hZDogJ2Rvd25sb2FkJyxcbiAgZHJhZ2dhYmxlOiAnZHJhZ2dhYmxlJyxcbiAgZW5jdHlwZTogJ2VuY1R5cGUnLFxuICBlbnRlcmtleWhpbnQ6ICdlbnRlcktleUhpbnQnLFxuICBmb3I6ICdodG1sRm9yJyxcbiAgZm9ybTogJ2Zvcm0nLFxuICBmb3JtbWV0aG9kOiAnZm9ybU1ldGhvZCcsXG4gIGZvcm1hY3Rpb246ICdmb3JtQWN0aW9uJyxcbiAgZm9ybWVuY3R5cGU6ICdmb3JtRW5jVHlwZScsXG4gIGZvcm1ub3ZhbGlkYXRlOiAnZm9ybU5vVmFsaWRhdGUnLFxuICBmb3JtdGFyZ2V0OiAnZm9ybVRhcmdldCcsXG4gIGZyYW1lYm9yZGVyOiAnZnJhbWVCb3JkZXInLFxuICBoZWFkZXJzOiAnaGVhZGVycycsXG4gIGhlaWdodDogJ2hlaWdodCcsXG4gIGhpZGRlbjogJ2hpZGRlbicsXG4gIGhpZ2g6ICdoaWdoJyxcbiAgaHJlZjogJ2hyZWYnLFxuICBocmVmbGFuZzogJ2hyZWZMYW5nJyxcbiAgaHRtbGZvcjogJ2h0bWxGb3InLFxuICBodHRwZXF1aXY6ICdodHRwRXF1aXYnLFxuICAnaHR0cC1lcXVpdic6ICdodHRwRXF1aXYnLFxuICBpY29uOiAnaWNvbicsXG4gIGlkOiAnaWQnLFxuICBpbm5lcmh0bWw6ICdpbm5lckhUTUwnLFxuICBpbnB1dG1vZGU6ICdpbnB1dE1vZGUnLFxuICBpbnRlZ3JpdHk6ICdpbnRlZ3JpdHknLFxuICBpczogJ2lzJyxcbiAgaXRlbWlkOiAnaXRlbUlEJyxcbiAgaXRlbXByb3A6ICdpdGVtUHJvcCcsXG4gIGl0ZW1yZWY6ICdpdGVtUmVmJyxcbiAgaXRlbXNjb3BlOiAnaXRlbVNjb3BlJyxcbiAgaXRlbXR5cGU6ICdpdGVtVHlwZScsXG4gIGtleXBhcmFtczogJ2tleVBhcmFtcycsXG4gIGtleXR5cGU6ICdrZXlUeXBlJyxcbiAga2luZDogJ2tpbmQnLFxuICBsYWJlbDogJ2xhYmVsJyxcbiAgbGFuZzogJ2xhbmcnLFxuICBsaXN0OiAnbGlzdCcsXG4gIGxvb3A6ICdsb29wJyxcbiAgbG93OiAnbG93JyxcbiAgbWFuaWZlc3Q6ICdtYW5pZmVzdCcsXG4gIG1hcmdpbndpZHRoOiAnbWFyZ2luV2lkdGgnLFxuICBtYXJnaW5oZWlnaHQ6ICdtYXJnaW5IZWlnaHQnLFxuICBtYXg6ICdtYXgnLFxuICBtYXhsZW5ndGg6ICdtYXhMZW5ndGgnLFxuICBtZWRpYTogJ21lZGlhJyxcbiAgbWVkaWFncm91cDogJ21lZGlhR3JvdXAnLFxuICBtZXRob2Q6ICdtZXRob2QnLFxuICBtaW46ICdtaW4nLFxuICBtaW5sZW5ndGg6ICdtaW5MZW5ndGgnLFxuICBtdWx0aXBsZTogJ211bHRpcGxlJyxcbiAgbXV0ZWQ6ICdtdXRlZCcsXG4gIG5hbWU6ICduYW1lJyxcbiAgbm9tb2R1bGU6ICdub01vZHVsZScsXG4gIG5vbmNlOiAnbm9uY2UnLFxuICBub3ZhbGlkYXRlOiAnbm9WYWxpZGF0ZScsXG4gIG9wZW46ICdvcGVuJyxcbiAgb3B0aW11bTogJ29wdGltdW0nLFxuICBwYXR0ZXJuOiAncGF0dGVybicsXG4gIHBsYWNlaG9sZGVyOiAncGxhY2Vob2xkZXInLFxuICBwbGF5c2lubGluZTogJ3BsYXlzSW5saW5lJyxcbiAgcG9zdGVyOiAncG9zdGVyJyxcbiAgcHJlbG9hZDogJ3ByZWxvYWQnLFxuICBwcm9maWxlOiAncHJvZmlsZScsXG4gIHJhZGlvZ3JvdXA6ICdyYWRpb0dyb3VwJyxcbiAgcmVhZG9ubHk6ICdyZWFkT25seScsXG4gIHJlZmVycmVycG9saWN5OiAncmVmZXJyZXJQb2xpY3knLFxuICByZWw6ICdyZWwnLFxuICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgcmV2ZXJzZWQ6ICdyZXZlcnNlZCcsXG4gIHJvbGU6ICdyb2xlJyxcbiAgcm93czogJ3Jvd3MnLFxuICByb3dzcGFuOiAncm93U3BhbicsXG4gIHNhbmRib3g6ICdzYW5kYm94JyxcbiAgc2NvcGU6ICdzY29wZScsXG4gIHNjb3BlZDogJ3Njb3BlZCcsXG4gIHNjcm9sbGluZzogJ3Njcm9sbGluZycsXG4gIHNlYW1sZXNzOiAnc2VhbWxlc3MnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJyxcbiAgc2hhcGU6ICdzaGFwZScsXG4gIHNpemU6ICdzaXplJyxcbiAgc2l6ZXM6ICdzaXplcycsXG4gIHNwYW46ICdzcGFuJyxcbiAgc3BlbGxjaGVjazogJ3NwZWxsQ2hlY2snLFxuICBzcmM6ICdzcmMnLFxuICBzcmNkb2M6ICdzcmNEb2MnLFxuICBzcmNsYW5nOiAnc3JjTGFuZycsXG4gIHNyY3NldDogJ3NyY1NldCcsXG4gIHN0YXJ0OiAnc3RhcnQnLFxuICBzdGVwOiAnc3RlcCcsXG4gIHN0eWxlOiAnc3R5bGUnLFxuICBzdW1tYXJ5OiAnc3VtbWFyeScsXG4gIHRhYmluZGV4OiAndGFiSW5kZXgnLFxuICB0YXJnZXQ6ICd0YXJnZXQnLFxuICB0aXRsZTogJ3RpdGxlJyxcbiAgdHlwZTogJ3R5cGUnLFxuICB1c2VtYXA6ICd1c2VNYXAnLFxuICB2YWx1ZTogJ3ZhbHVlJyxcbiAgd2lkdGg6ICd3aWR0aCcsXG4gIHdtb2RlOiAnd21vZGUnLFxuICB3cmFwOiAnd3JhcCcsXG4gIC8vIFNWR1xuICBhYm91dDogJ2Fib3V0JyxcbiAgYWNjZW50aGVpZ2h0OiAnYWNjZW50SGVpZ2h0JyxcbiAgJ2FjY2VudC1oZWlnaHQnOiAnYWNjZW50SGVpZ2h0JyxcbiAgYWNjdW11bGF0ZTogJ2FjY3VtdWxhdGUnLFxuICBhZGRpdGl2ZTogJ2FkZGl0aXZlJyxcbiAgYWxpZ25tZW50YmFzZWxpbmU6ICdhbGlnbm1lbnRCYXNlbGluZScsXG4gICdhbGlnbm1lbnQtYmFzZWxpbmUnOiAnYWxpZ25tZW50QmFzZWxpbmUnLFxuICBhbGxvd3Jlb3JkZXI6ICdhbGxvd1Jlb3JkZXInLFxuICBhbHBoYWJldGljOiAnYWxwaGFiZXRpYycsXG4gIGFtcGxpdHVkZTogJ2FtcGxpdHVkZScsXG4gIGFyYWJpY2Zvcm06ICdhcmFiaWNGb3JtJyxcbiAgJ2FyYWJpYy1mb3JtJzogJ2FyYWJpY0Zvcm0nLFxuICBhc2NlbnQ6ICdhc2NlbnQnLFxuICBhdHRyaWJ1dGVuYW1lOiAnYXR0cmlidXRlTmFtZScsXG4gIGF0dHJpYnV0ZXR5cGU6ICdhdHRyaWJ1dGVUeXBlJyxcbiAgYXV0b3JldmVyc2U6ICdhdXRvUmV2ZXJzZScsXG4gIGF6aW11dGg6ICdhemltdXRoJyxcbiAgYmFzZWZyZXF1ZW5jeTogJ2Jhc2VGcmVxdWVuY3knLFxuICBiYXNlbGluZXNoaWZ0OiAnYmFzZWxpbmVTaGlmdCcsXG4gICdiYXNlbGluZS1zaGlmdCc6ICdiYXNlbGluZVNoaWZ0JyxcbiAgYmFzZXByb2ZpbGU6ICdiYXNlUHJvZmlsZScsXG4gIGJib3g6ICdiYm94JyxcbiAgYmVnaW46ICdiZWdpbicsXG4gIGJpYXM6ICdiaWFzJyxcbiAgYnk6ICdieScsXG4gIGNhbGNtb2RlOiAnY2FsY01vZGUnLFxuICBjYXBoZWlnaHQ6ICdjYXBIZWlnaHQnLFxuICAnY2FwLWhlaWdodCc6ICdjYXBIZWlnaHQnLFxuICBjbGlwOiAnY2xpcCcsXG4gIGNsaXBwYXRoOiAnY2xpcFBhdGgnLFxuICAnY2xpcC1wYXRoJzogJ2NsaXBQYXRoJyxcbiAgY2xpcHBhdGh1bml0czogJ2NsaXBQYXRoVW5pdHMnLFxuICBjbGlwcnVsZTogJ2NsaXBSdWxlJyxcbiAgJ2NsaXAtcnVsZSc6ICdjbGlwUnVsZScsXG4gIGNvbG9yOiAnY29sb3InLFxuICBjb2xvcmludGVycG9sYXRpb246ICdjb2xvckludGVycG9sYXRpb24nLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbic6ICdjb2xvckludGVycG9sYXRpb24nLFxuICBjb2xvcmludGVycG9sYXRpb25maWx0ZXJzOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gIGNvbG9ycHJvZmlsZTogJ2NvbG9yUHJvZmlsZScsXG4gICdjb2xvci1wcm9maWxlJzogJ2NvbG9yUHJvZmlsZScsXG4gIGNvbG9ycmVuZGVyaW5nOiAnY29sb3JSZW5kZXJpbmcnLFxuICAnY29sb3ItcmVuZGVyaW5nJzogJ2NvbG9yUmVuZGVyaW5nJyxcbiAgY29udGVudHNjcmlwdHR5cGU6ICdjb250ZW50U2NyaXB0VHlwZScsXG4gIGNvbnRlbnRzdHlsZXR5cGU6ICdjb250ZW50U3R5bGVUeXBlJyxcbiAgY3Vyc29yOiAnY3Vyc29yJyxcbiAgY3g6ICdjeCcsXG4gIGN5OiAnY3knLFxuICBkOiAnZCcsXG4gIGRhdGF0eXBlOiAnZGF0YXR5cGUnLFxuICBkZWNlbGVyYXRlOiAnZGVjZWxlcmF0ZScsXG4gIGRlc2NlbnQ6ICdkZXNjZW50JyxcbiAgZGlmZnVzZWNvbnN0YW50OiAnZGlmZnVzZUNvbnN0YW50JyxcbiAgZGlyZWN0aW9uOiAnZGlyZWN0aW9uJyxcbiAgZGlzcGxheTogJ2Rpc3BsYXknLFxuICBkaXZpc29yOiAnZGl2aXNvcicsXG4gIGRvbWluYW50YmFzZWxpbmU6ICdkb21pbmFudEJhc2VsaW5lJyxcbiAgJ2RvbWluYW50LWJhc2VsaW5lJzogJ2RvbWluYW50QmFzZWxpbmUnLFxuICBkdXI6ICdkdXInLFxuICBkeDogJ2R4JyxcbiAgZHk6ICdkeScsXG4gIGVkZ2Vtb2RlOiAnZWRnZU1vZGUnLFxuICBlbGV2YXRpb246ICdlbGV2YXRpb24nLFxuICBlbmFibGViYWNrZ3JvdW5kOiAnZW5hYmxlQmFja2dyb3VuZCcsXG4gICdlbmFibGUtYmFja2dyb3VuZCc6ICdlbmFibGVCYWNrZ3JvdW5kJyxcbiAgZW5kOiAnZW5kJyxcbiAgZXhwb25lbnQ6ICdleHBvbmVudCcsXG4gIGV4dGVybmFscmVzb3VyY2VzcmVxdWlyZWQ6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcbiAgZmlsbDogJ2ZpbGwnLFxuICBmaWxsb3BhY2l0eTogJ2ZpbGxPcGFjaXR5JyxcbiAgJ2ZpbGwtb3BhY2l0eSc6ICdmaWxsT3BhY2l0eScsXG4gIGZpbGxydWxlOiAnZmlsbFJ1bGUnLFxuICAnZmlsbC1ydWxlJzogJ2ZpbGxSdWxlJyxcbiAgZmlsdGVyOiAnZmlsdGVyJyxcbiAgZmlsdGVycmVzOiAnZmlsdGVyUmVzJyxcbiAgZmlsdGVydW5pdHM6ICdmaWx0ZXJVbml0cycsXG4gIGZsb29kb3BhY2l0eTogJ2Zsb29kT3BhY2l0eScsXG4gICdmbG9vZC1vcGFjaXR5JzogJ2Zsb29kT3BhY2l0eScsXG4gIGZsb29kY29sb3I6ICdmbG9vZENvbG9yJyxcbiAgJ2Zsb29kLWNvbG9yJzogJ2Zsb29kQ29sb3InLFxuICBmb2N1c2FibGU6ICdmb2N1c2FibGUnLFxuICBmb250ZmFtaWx5OiAnZm9udEZhbWlseScsXG4gICdmb250LWZhbWlseSc6ICdmb250RmFtaWx5JyxcbiAgZm9udHNpemU6ICdmb250U2l6ZScsXG4gICdmb250LXNpemUnOiAnZm9udFNpemUnLFxuICBmb250c2l6ZWFkanVzdDogJ2ZvbnRTaXplQWRqdXN0JyxcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnOiAnZm9udFNpemVBZGp1c3QnLFxuICBmb250c3RyZXRjaDogJ2ZvbnRTdHJldGNoJyxcbiAgJ2ZvbnQtc3RyZXRjaCc6ICdmb250U3RyZXRjaCcsXG4gIGZvbnRzdHlsZTogJ2ZvbnRTdHlsZScsXG4gICdmb250LXN0eWxlJzogJ2ZvbnRTdHlsZScsXG4gIGZvbnR2YXJpYW50OiAnZm9udFZhcmlhbnQnLFxuICAnZm9udC12YXJpYW50JzogJ2ZvbnRWYXJpYW50JyxcbiAgZm9udHdlaWdodDogJ2ZvbnRXZWlnaHQnLFxuICAnZm9udC13ZWlnaHQnOiAnZm9udFdlaWdodCcsXG4gIGZvcm1hdDogJ2Zvcm1hdCcsXG4gIGZyb206ICdmcm9tJyxcbiAgZng6ICdmeCcsXG4gIGZ5OiAnZnknLFxuICBnMTogJ2cxJyxcbiAgZzI6ICdnMicsXG4gIGdseXBobmFtZTogJ2dseXBoTmFtZScsXG4gICdnbHlwaC1uYW1lJzogJ2dseXBoTmFtZScsXG4gIGdseXBob3JpZW50YXRpb25ob3Jpem9udGFsOiAnZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCc6ICdnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCcsXG4gIGdseXBob3JpZW50YXRpb252ZXJ0aWNhbDogJ2dseXBoT3JpZW50YXRpb25WZXJ0aWNhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCc6ICdnbHlwaE9yaWVudGF0aW9uVmVydGljYWwnLFxuICBnbHlwaHJlZjogJ2dseXBoUmVmJyxcbiAgZ3JhZGllbnR0cmFuc2Zvcm06ICdncmFkaWVudFRyYW5zZm9ybScsXG4gIGdyYWRpZW50dW5pdHM6ICdncmFkaWVudFVuaXRzJyxcbiAgaGFuZ2luZzogJ2hhbmdpbmcnLFxuICBob3JpemFkdng6ICdob3JpekFkdlgnLFxuICAnaG9yaXotYWR2LXgnOiAnaG9yaXpBZHZYJyxcbiAgaG9yaXpvcmlnaW54OiAnaG9yaXpPcmlnaW5YJyxcbiAgJ2hvcml6LW9yaWdpbi14JzogJ2hvcml6T3JpZ2luWCcsXG4gIGlkZW9ncmFwaGljOiAnaWRlb2dyYXBoaWMnLFxuICBpbWFnZXJlbmRlcmluZzogJ2ltYWdlUmVuZGVyaW5nJyxcbiAgJ2ltYWdlLXJlbmRlcmluZyc6ICdpbWFnZVJlbmRlcmluZycsXG4gIGluMjogJ2luMicsXG4gIGluOiAnaW4nLFxuICBpbmxpc3Q6ICdpbmxpc3QnLFxuICBpbnRlcmNlcHQ6ICdpbnRlcmNlcHQnLFxuICBrMTogJ2sxJyxcbiAgazI6ICdrMicsXG4gIGszOiAnazMnLFxuICBrNDogJ2s0JyxcbiAgazogJ2snLFxuICBrZXJuZWxtYXRyaXg6ICdrZXJuZWxNYXRyaXgnLFxuICBrZXJuZWx1bml0bGVuZ3RoOiAna2VybmVsVW5pdExlbmd0aCcsXG4gIGtlcm5pbmc6ICdrZXJuaW5nJyxcbiAga2V5cG9pbnRzOiAna2V5UG9pbnRzJyxcbiAga2V5c3BsaW5lczogJ2tleVNwbGluZXMnLFxuICBrZXl0aW1lczogJ2tleVRpbWVzJyxcbiAgbGVuZ3RoYWRqdXN0OiAnbGVuZ3RoQWRqdXN0JyxcbiAgbGV0dGVyc3BhY2luZzogJ2xldHRlclNwYWNpbmcnLFxuICAnbGV0dGVyLXNwYWNpbmcnOiAnbGV0dGVyU3BhY2luZycsXG4gIGxpZ2h0aW5nY29sb3I6ICdsaWdodGluZ0NvbG9yJyxcbiAgJ2xpZ2h0aW5nLWNvbG9yJzogJ2xpZ2h0aW5nQ29sb3InLFxuICBsaW1pdGluZ2NvbmVhbmdsZTogJ2xpbWl0aW5nQ29uZUFuZ2xlJyxcbiAgbG9jYWw6ICdsb2NhbCcsXG4gIG1hcmtlcmVuZDogJ21hcmtlckVuZCcsXG4gICdtYXJrZXItZW5kJzogJ21hcmtlckVuZCcsXG4gIG1hcmtlcmhlaWdodDogJ21hcmtlckhlaWdodCcsXG4gIG1hcmtlcm1pZDogJ21hcmtlck1pZCcsXG4gICdtYXJrZXItbWlkJzogJ21hcmtlck1pZCcsXG4gIG1hcmtlcnN0YXJ0OiAnbWFya2VyU3RhcnQnLFxuICAnbWFya2VyLXN0YXJ0JzogJ21hcmtlclN0YXJ0JyxcbiAgbWFya2VydW5pdHM6ICdtYXJrZXJVbml0cycsXG4gIG1hcmtlcndpZHRoOiAnbWFya2VyV2lkdGgnLFxuICBtYXNrOiAnbWFzaycsXG4gIG1hc2tjb250ZW50dW5pdHM6ICdtYXNrQ29udGVudFVuaXRzJyxcbiAgbWFza3VuaXRzOiAnbWFza1VuaXRzJyxcbiAgbWF0aGVtYXRpY2FsOiAnbWF0aGVtYXRpY2FsJyxcbiAgbW9kZTogJ21vZGUnLFxuICBudW1vY3RhdmVzOiAnbnVtT2N0YXZlcycsXG4gIG9mZnNldDogJ29mZnNldCcsXG4gIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgb3BlcmF0b3I6ICdvcGVyYXRvcicsXG4gIG9yZGVyOiAnb3JkZXInLFxuICBvcmllbnQ6ICdvcmllbnQnLFxuICBvcmllbnRhdGlvbjogJ29yaWVudGF0aW9uJyxcbiAgb3JpZ2luOiAnb3JpZ2luJyxcbiAgb3ZlcmZsb3c6ICdvdmVyZmxvdycsXG4gIG92ZXJsaW5lcG9zaXRpb246ICdvdmVybGluZVBvc2l0aW9uJyxcbiAgJ292ZXJsaW5lLXBvc2l0aW9uJzogJ292ZXJsaW5lUG9zaXRpb24nLFxuICBvdmVybGluZXRoaWNrbmVzczogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ292ZXJsaW5lLXRoaWNrbmVzcyc6ICdvdmVybGluZVRoaWNrbmVzcycsXG4gIHBhaW50b3JkZXI6ICdwYWludE9yZGVyJyxcbiAgJ3BhaW50LW9yZGVyJzogJ3BhaW50T3JkZXInLFxuICBwYW5vc2UxOiAncGFub3NlMScsXG4gICdwYW5vc2UtMSc6ICdwYW5vc2UxJyxcbiAgcGF0aGxlbmd0aDogJ3BhdGhMZW5ndGgnLFxuICBwYXR0ZXJuY29udGVudHVuaXRzOiAncGF0dGVybkNvbnRlbnRVbml0cycsXG4gIHBhdHRlcm50cmFuc2Zvcm06ICdwYXR0ZXJuVHJhbnNmb3JtJyxcbiAgcGF0dGVybnVuaXRzOiAncGF0dGVyblVuaXRzJyxcbiAgcG9pbnRlcmV2ZW50czogJ3BvaW50ZXJFdmVudHMnLFxuICAncG9pbnRlci1ldmVudHMnOiAncG9pbnRlckV2ZW50cycsXG4gIHBvaW50czogJ3BvaW50cycsXG4gIHBvaW50c2F0eDogJ3BvaW50c0F0WCcsXG4gIHBvaW50c2F0eTogJ3BvaW50c0F0WScsXG4gIHBvaW50c2F0ejogJ3BvaW50c0F0WicsXG4gIHByZWZpeDogJ3ByZWZpeCcsXG4gIHByZXNlcnZlYWxwaGE6ICdwcmVzZXJ2ZUFscGhhJyxcbiAgcHJlc2VydmVhc3BlY3RyYXRpbzogJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLFxuICBwcmltaXRpdmV1bml0czogJ3ByaW1pdGl2ZVVuaXRzJyxcbiAgcHJvcGVydHk6ICdwcm9wZXJ0eScsXG4gIHI6ICdyJyxcbiAgcmFkaXVzOiAncmFkaXVzJyxcbiAgcmVmeDogJ3JlZlgnLFxuICByZWZ5OiAncmVmWScsXG4gIHJlbmRlcmluZ2ludGVudDogJ3JlbmRlcmluZ0ludGVudCcsXG4gICdyZW5kZXJpbmctaW50ZW50JzogJ3JlbmRlcmluZ0ludGVudCcsXG4gIHJlcGVhdGNvdW50OiAncmVwZWF0Q291bnQnLFxuICByZXBlYXRkdXI6ICdyZXBlYXREdXInLFxuICByZXF1aXJlZGV4dGVuc2lvbnM6ICdyZXF1aXJlZEV4dGVuc2lvbnMnLFxuICByZXF1aXJlZGZlYXR1cmVzOiAncmVxdWlyZWRGZWF0dXJlcycsXG4gIHJlc291cmNlOiAncmVzb3VyY2UnLFxuICByZXN0YXJ0OiAncmVzdGFydCcsXG4gIHJlc3VsdDogJ3Jlc3VsdCcsXG4gIHJlc3VsdHM6ICdyZXN1bHRzJyxcbiAgcm90YXRlOiAncm90YXRlJyxcbiAgcng6ICdyeCcsXG4gIHJ5OiAncnknLFxuICBzY2FsZTogJ3NjYWxlJyxcbiAgc2VjdXJpdHk6ICdzZWN1cml0eScsXG4gIHNlZWQ6ICdzZWVkJyxcbiAgc2hhcGVyZW5kZXJpbmc6ICdzaGFwZVJlbmRlcmluZycsXG4gICdzaGFwZS1yZW5kZXJpbmcnOiAnc2hhcGVSZW5kZXJpbmcnLFxuICBzbG9wZTogJ3Nsb3BlJyxcbiAgc3BhY2luZzogJ3NwYWNpbmcnLFxuICBzcGVjdWxhcmNvbnN0YW50OiAnc3BlY3VsYXJDb25zdGFudCcsXG4gIHNwZWN1bGFyZXhwb25lbnQ6ICdzcGVjdWxhckV4cG9uZW50JyxcbiAgc3BlZWQ6ICdzcGVlZCcsXG4gIHNwcmVhZG1ldGhvZDogJ3NwcmVhZE1ldGhvZCcsXG4gIHN0YXJ0b2Zmc2V0OiAnc3RhcnRPZmZzZXQnLFxuICBzdGRkZXZpYXRpb246ICdzdGREZXZpYXRpb24nLFxuICBzdGVtaDogJ3N0ZW1oJyxcbiAgc3RlbXY6ICdzdGVtdicsXG4gIHN0aXRjaHRpbGVzOiAnc3RpdGNoVGlsZXMnLFxuICBzdG9wY29sb3I6ICdzdG9wQ29sb3InLFxuICAnc3RvcC1jb2xvcic6ICdzdG9wQ29sb3InLFxuICBzdG9wb3BhY2l0eTogJ3N0b3BPcGFjaXR5JyxcbiAgJ3N0b3Atb3BhY2l0eSc6ICdzdG9wT3BhY2l0eScsXG4gIHN0cmlrZXRocm91Z2hwb3NpdGlvbjogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJzogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gIHN0cmlrZXRocm91Z2h0aGlja25lc3M6ICdzdHJpa2V0aHJvdWdoVGhpY2tuZXNzJyxcbiAgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJzogJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLFxuICBzdHJpbmc6ICdzdHJpbmcnLFxuICBzdHJva2U6ICdzdHJva2UnLFxuICBzdHJva2VkYXNoYXJyYXk6ICdzdHJva2VEYXNoYXJyYXknLFxuICAnc3Ryb2tlLWRhc2hhcnJheSc6ICdzdHJva2VEYXNoYXJyYXknLFxuICBzdHJva2VkYXNob2Zmc2V0OiAnc3Ryb2tlRGFzaG9mZnNldCcsXG4gICdzdHJva2UtZGFzaG9mZnNldCc6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgc3Ryb2tlbGluZWNhcDogJ3N0cm9rZUxpbmVjYXAnLFxuICAnc3Ryb2tlLWxpbmVjYXAnOiAnc3Ryb2tlTGluZWNhcCcsXG4gIHN0cm9rZWxpbmVqb2luOiAnc3Ryb2tlTGluZWpvaW4nLFxuICAnc3Ryb2tlLWxpbmVqb2luJzogJ3N0cm9rZUxpbmVqb2luJyxcbiAgc3Ryb2tlbWl0ZXJsaW1pdDogJ3N0cm9rZU1pdGVybGltaXQnLFxuICAnc3Ryb2tlLW1pdGVybGltaXQnOiAnc3Ryb2tlTWl0ZXJsaW1pdCcsXG4gIHN0cm9rZXdpZHRoOiAnc3Ryb2tlV2lkdGgnLFxuICAnc3Ryb2tlLXdpZHRoJzogJ3N0cm9rZVdpZHRoJyxcbiAgc3Ryb2tlb3BhY2l0eTogJ3N0cm9rZU9wYWNpdHknLFxuICAnc3Ryb2tlLW9wYWNpdHknOiAnc3Ryb2tlT3BhY2l0eScsXG4gIHN1cHByZXNzY29udGVudGVkaXRhYmxld2FybmluZzogJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZycsXG4gIHN1cHByZXNzaHlkcmF0aW9ud2FybmluZzogJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsXG4gIHN1cmZhY2VzY2FsZTogJ3N1cmZhY2VTY2FsZScsXG4gIHN5c3RlbWxhbmd1YWdlOiAnc3lzdGVtTGFuZ3VhZ2UnLFxuICB0YWJsZXZhbHVlczogJ3RhYmxlVmFsdWVzJyxcbiAgdGFyZ2V0eDogJ3RhcmdldFgnLFxuICB0YXJnZXR5OiAndGFyZ2V0WScsXG4gIHRleHRhbmNob3I6ICd0ZXh0QW5jaG9yJyxcbiAgJ3RleHQtYW5jaG9yJzogJ3RleHRBbmNob3InLFxuICB0ZXh0ZGVjb3JhdGlvbjogJ3RleHREZWNvcmF0aW9uJyxcbiAgJ3RleHQtZGVjb3JhdGlvbic6ICd0ZXh0RGVjb3JhdGlvbicsXG4gIHRleHRsZW5ndGg6ICd0ZXh0TGVuZ3RoJyxcbiAgdGV4dHJlbmRlcmluZzogJ3RleHRSZW5kZXJpbmcnLFxuICAndGV4dC1yZW5kZXJpbmcnOiAndGV4dFJlbmRlcmluZycsXG4gIHRvOiAndG8nLFxuICB0cmFuc2Zvcm06ICd0cmFuc2Zvcm0nLFxuICB0eXBlb2Y6ICd0eXBlb2YnLFxuICB1MTogJ3UxJyxcbiAgdTI6ICd1MicsXG4gIHVuZGVybGluZXBvc2l0aW9uOiAndW5kZXJsaW5lUG9zaXRpb24nLFxuICAndW5kZXJsaW5lLXBvc2l0aW9uJzogJ3VuZGVybGluZVBvc2l0aW9uJyxcbiAgdW5kZXJsaW5ldGhpY2tuZXNzOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ3VuZGVybGluZS10aGlja25lc3MnOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgdW5pY29kZTogJ3VuaWNvZGUnLFxuICB1bmljb2RlYmlkaTogJ3VuaWNvZGVCaWRpJyxcbiAgJ3VuaWNvZGUtYmlkaSc6ICd1bmljb2RlQmlkaScsXG4gIHVuaWNvZGVyYW5nZTogJ3VuaWNvZGVSYW5nZScsXG4gICd1bmljb2RlLXJhbmdlJzogJ3VuaWNvZGVSYW5nZScsXG4gIHVuaXRzcGVyZW06ICd1bml0c1BlckVtJyxcbiAgJ3VuaXRzLXBlci1lbSc6ICd1bml0c1BlckVtJyxcbiAgdW5zZWxlY3RhYmxlOiAndW5zZWxlY3RhYmxlJyxcbiAgdmFscGhhYmV0aWM6ICd2QWxwaGFiZXRpYycsXG4gICd2LWFscGhhYmV0aWMnOiAndkFscGhhYmV0aWMnLFxuICB2YWx1ZXM6ICd2YWx1ZXMnLFxuICB2ZWN0b3JlZmZlY3Q6ICd2ZWN0b3JFZmZlY3QnLFxuICAndmVjdG9yLWVmZmVjdCc6ICd2ZWN0b3JFZmZlY3QnLFxuICB2ZXJzaW9uOiAndmVyc2lvbicsXG4gIHZlcnRhZHZ5OiAndmVydEFkdlknLFxuICAndmVydC1hZHYteSc6ICd2ZXJ0QWR2WScsXG4gIHZlcnRvcmlnaW54OiAndmVydE9yaWdpblgnLFxuICAndmVydC1vcmlnaW4teCc6ICd2ZXJ0T3JpZ2luWCcsXG4gIHZlcnRvcmlnaW55OiAndmVydE9yaWdpblknLFxuICAndmVydC1vcmlnaW4teSc6ICd2ZXJ0T3JpZ2luWScsXG4gIHZoYW5naW5nOiAndkhhbmdpbmcnLFxuICAndi1oYW5naW5nJzogJ3ZIYW5naW5nJyxcbiAgdmlkZW9ncmFwaGljOiAndklkZW9ncmFwaGljJyxcbiAgJ3YtaWRlb2dyYXBoaWMnOiAndklkZW9ncmFwaGljJyxcbiAgdmlld2JveDogJ3ZpZXdCb3gnLFxuICB2aWV3dGFyZ2V0OiAndmlld1RhcmdldCcsXG4gIHZpc2liaWxpdHk6ICd2aXNpYmlsaXR5JyxcbiAgdm1hdGhlbWF0aWNhbDogJ3ZNYXRoZW1hdGljYWwnLFxuICAndi1tYXRoZW1hdGljYWwnOiAndk1hdGhlbWF0aWNhbCcsXG4gIHZvY2FiOiAndm9jYWInLFxuICB3aWR0aHM6ICd3aWR0aHMnLFxuICB3b3Jkc3BhY2luZzogJ3dvcmRTcGFjaW5nJyxcbiAgJ3dvcmQtc3BhY2luZyc6ICd3b3JkU3BhY2luZycsXG4gIHdyaXRpbmdtb2RlOiAnd3JpdGluZ01vZGUnLFxuICAnd3JpdGluZy1tb2RlJzogJ3dyaXRpbmdNb2RlJyxcbiAgeDE6ICd4MScsXG4gIHgyOiAneDInLFxuICB4OiAneCcsXG4gIHhjaGFubmVsc2VsZWN0b3I6ICd4Q2hhbm5lbFNlbGVjdG9yJyxcbiAgeGhlaWdodDogJ3hIZWlnaHQnLFxuICAneC1oZWlnaHQnOiAneEhlaWdodCcsXG4gIHhsaW5rYWN0dWF0ZTogJ3hsaW5rQWN0dWF0ZScsXG4gICd4bGluazphY3R1YXRlJzogJ3hsaW5rQWN0dWF0ZScsXG4gIHhsaW5rYXJjcm9sZTogJ3hsaW5rQXJjcm9sZScsXG4gICd4bGluazphcmNyb2xlJzogJ3hsaW5rQXJjcm9sZScsXG4gIHhsaW5raHJlZjogJ3hsaW5rSHJlZicsXG4gICd4bGluazpocmVmJzogJ3hsaW5rSHJlZicsXG4gIHhsaW5rcm9sZTogJ3hsaW5rUm9sZScsXG4gICd4bGluazpyb2xlJzogJ3hsaW5rUm9sZScsXG4gIHhsaW5rc2hvdzogJ3hsaW5rU2hvdycsXG4gICd4bGluazpzaG93JzogJ3hsaW5rU2hvdycsXG4gIHhsaW5rdGl0bGU6ICd4bGlua1RpdGxlJyxcbiAgJ3hsaW5rOnRpdGxlJzogJ3hsaW5rVGl0bGUnLFxuICB4bGlua3R5cGU6ICd4bGlua1R5cGUnLFxuICAneGxpbms6dHlwZSc6ICd4bGlua1R5cGUnLFxuICB4bWxiYXNlOiAneG1sQmFzZScsXG4gICd4bWw6YmFzZSc6ICd4bWxCYXNlJyxcbiAgeG1sbGFuZzogJ3htbExhbmcnLFxuICAneG1sOmxhbmcnOiAneG1sTGFuZycsXG4gIHhtbG5zOiAneG1sbnMnLFxuICAneG1sOnNwYWNlJzogJ3htbFNwYWNlJyxcbiAgeG1sbnN4bGluazogJ3htbG5zWGxpbmsnLFxuICAneG1sbnM6eGxpbmsnOiAneG1sbnNYbGluaycsXG4gIHhtbHNwYWNlOiAneG1sU3BhY2UnLFxuICB5MTogJ3kxJyxcbiAgeTI6ICd5MicsXG4gIHk6ICd5JyxcbiAgeWNoYW5uZWxzZWxlY3RvcjogJ3lDaGFubmVsU2VsZWN0b3InLFxuICB6OiAneicsXG4gIHpvb21hbmRwYW46ICd6b29tQW5kUGFuJ1xufTtcblxudmFyIGFyaWFQcm9wZXJ0aWVzID0ge1xuICAnYXJpYS1jdXJyZW50JzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtZGV0YWlscyc6IDAsXG4gICdhcmlhLWRpc2FibGVkJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtaGlkZGVuJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtaW52YWxpZCc6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWtleXNob3J0Y3V0cyc6IDAsXG4gICdhcmlhLWxhYmVsJzogMCxcbiAgJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJzogMCxcbiAgLy8gV2lkZ2V0IEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogMCxcbiAgJ2FyaWEtY2hlY2tlZCc6IDAsXG4gICdhcmlhLWV4cGFuZGVkJzogMCxcbiAgJ2FyaWEtaGFzcG9wdXAnOiAwLFxuICAnYXJpYS1sZXZlbCc6IDAsXG4gICdhcmlhLW1vZGFsJzogMCxcbiAgJ2FyaWEtbXVsdGlsaW5lJzogMCxcbiAgJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJzogMCxcbiAgJ2FyaWEtb3JpZW50YXRpb24nOiAwLFxuICAnYXJpYS1wbGFjZWhvbGRlcic6IDAsXG4gICdhcmlhLXByZXNzZWQnOiAwLFxuICAnYXJpYS1yZWFkb25seSc6IDAsXG4gICdhcmlhLXJlcXVpcmVkJzogMCxcbiAgJ2FyaWEtc2VsZWN0ZWQnOiAwLFxuICAnYXJpYS1zb3J0JzogMCxcbiAgJ2FyaWEtdmFsdWVtYXgnOiAwLFxuICAnYXJpYS12YWx1ZW1pbic6IDAsXG4gICdhcmlhLXZhbHVlbm93JzogMCxcbiAgJ2FyaWEtdmFsdWV0ZXh0JzogMCxcbiAgLy8gTGl2ZSBSZWdpb24gQXR0cmlidXRlc1xuICAnYXJpYS1hdG9taWMnOiAwLFxuICAnYXJpYS1idXN5JzogMCxcbiAgJ2FyaWEtbGl2ZSc6IDAsXG4gICdhcmlhLXJlbGV2YW50JzogMCxcbiAgLy8gRHJhZy1hbmQtRHJvcCBBdHRyaWJ1dGVzXG4gICdhcmlhLWRyb3BlZmZlY3QnOiAwLFxuICAnYXJpYS1ncmFiYmVkJzogMCxcbiAgLy8gUmVsYXRpb25zaGlwIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCc6IDAsXG4gICdhcmlhLWNvbGNvdW50JzogMCxcbiAgJ2FyaWEtY29saW5kZXgnOiAwLFxuICAnYXJpYS1jb2xzcGFuJzogMCxcbiAgJ2FyaWEtY29udHJvbHMnOiAwLFxuICAnYXJpYS1kZXNjcmliZWRieSc6IDAsXG4gICdhcmlhLWVycm9ybWVzc2FnZSc6IDAsXG4gICdhcmlhLWZsb3d0byc6IDAsXG4gICdhcmlhLWxhYmVsbGVkYnknOiAwLFxuICAnYXJpYS1vd25zJzogMCxcbiAgJ2FyaWEtcG9zaW5zZXQnOiAwLFxuICAnYXJpYS1yb3djb3VudCc6IDAsXG4gICdhcmlhLXJvd2luZGV4JzogMCxcbiAgJ2FyaWEtcm93c3Bhbic6IDAsXG4gICdhcmlhLXNldHNpemUnOiAwXG59O1xuXG52YXIgd2FybmVkUHJvcGVydGllcyA9IHt9O1xudmFyIHJBUklBID0gbmV3IFJlZ0V4cCgnXihhcmlhKS1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgckFSSUFDYW1lbCA9IG5ldyBSZWdFeHAoJ14oYXJpYSlbQS1aXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciBoYXNPd25Qcm9wZXJ0eSQxID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eSh0YWdOYW1lLCBuYW1lKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkkMS5jYWxsKHdhcm5lZFByb3BlcnRpZXMsIG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyQVJJQUNhbWVsLnRlc3QobmFtZSkpIHtcbiAgICAgIHZhciBhcmlhTmFtZSA9ICdhcmlhLScgKyBuYW1lLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgY29ycmVjdE5hbWUgPSBhcmlhUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShhcmlhTmFtZSkgPyBhcmlhTmFtZSA6IG51bGw7IC8vIElmIHRoaXMgaXMgYW4gYXJpYS0qIGF0dHJpYnV0ZSwgYnV0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGtub3duIERPTVxuICAgICAgLy8gRE9NIHByb3BlcnRpZXMsIHRoZW4gaXQgaXMgYW4gaW52YWxpZCBhcmlhLSogYXR0cmlidXRlLlxuXG4gICAgICBpZiAoY29ycmVjdE5hbWUgPT0gbnVsbCkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBBUklBIGF0dHJpYnV0ZXMgZm9sbG93IHRoZSBwYXR0ZXJuIGFyaWEtKiBhbmQgbXVzdCBiZSBsb3dlcmNhc2UuJywgbmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSAvLyBhcmlhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvbi5cblxuXG4gICAgICBpZiAobmFtZSAhPT0gY29ycmVjdE5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgY29ycmVjdE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAockFSSUEudGVzdChuYW1lKSkge1xuICAgICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IGxvd2VyQ2FzZWROYW1lIDogbnVsbDsgLy8gSWYgdGhpcyBpcyBhbiBhcmlhLSogYXR0cmlidXRlLCBidXQgaXMgbm90IGxpc3RlZCBpbiB0aGUga25vd24gRE9NXG4gICAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG5cbiAgICAgIGlmIChzdGFuZGFyZE5hbWUgPT0gbnVsbCkge1xuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAvLyBhcmlhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvbi5cblxuXG4gICAgICBpZiAobmFtZSAhPT0gc3RhbmRhcmROYW1lKSB7XG4gICAgICAgIGVycm9yKCdVbmtub3duIEFSSUEgYXR0cmlidXRlIGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHN0YW5kYXJkTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB3YXJuSW52YWxpZEFSSUFQcm9wcyh0eXBlLCBwcm9wcykge1xuICB7XG4gICAgdmFyIGludmFsaWRQcm9wcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkodHlwZSwga2V5KTtcblxuICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIGludmFsaWRQcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVua25vd25Qcm9wU3RyaW5nID0gaW52YWxpZFByb3BzLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuICdgJyArIHByb3AgKyAnYCc7XG4gICAgfSkuam9pbignLCAnKTtcblxuICAgIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBhcmlhIHByb3AgJXMgb24gPCVzPiB0YWcuICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1hcmlhLXByb3BzJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH0gZWxzZSBpZiAoaW52YWxpZFByb3BzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGFyaWEgcHJvcHMgJXMgb24gPCVzPiB0YWcuICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1hcmlhLXByb3BzJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXModHlwZSwgcHJvcHMpIHtcbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdhcm5JbnZhbGlkQVJJQVByb3BzKHR5cGUsIHByb3BzKTtcbn1cblxudmFyIGRpZFdhcm5WYWx1ZU51bGwgPSBmYWxzZTtcbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQxKHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAodHlwZSAhPT0gJ2lucHV0JyAmJiB0eXBlICE9PSAndGV4dGFyZWEnICYmIHR5cGUgIT09ICdzZWxlY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BzICE9IG51bGwgJiYgcHJvcHMudmFsdWUgPT09IG51bGwgJiYgIWRpZFdhcm5WYWx1ZU51bGwpIHtcbiAgICAgIGRpZFdhcm5WYWx1ZU51bGwgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdCcgJiYgcHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgZXJyb3IoJ2B2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gJyArICdDb25zaWRlciB1c2luZyBhbiBlbXB0eSBhcnJheSB3aGVuIGBtdWx0aXBsZWAgaXMgc2V0IHRvIGB0cnVlYCAnICsgJ3RvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLicsIHR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJ2B2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gJyArICdDb25zaWRlciB1c2luZyBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCAnICsgJ2ZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbGlkYXRlUHJvcGVydHkkMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIHZhciB3YXJuZWRQcm9wZXJ0aWVzJDEgPSB7fTtcbiAgdmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gIHZhciBFVkVOVF9OQU1FX1JFR0VYID0gL15vbi4vO1xuICB2YXIgSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYID0gL15vblteQS1aXS87XG4gIHZhciByQVJJQSQxID0gbmV3IFJlZ0V4cCgnXihhcmlhKS1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG4gIHZhciByQVJJQUNhbWVsJDEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpW0EtWl1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG5cbiAgdmFsaWRhdGVQcm9wZXJ0eSQxID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWUsIHZhbHVlLCBldmVudFJlZ2lzdHJ5KSB7XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHdhcm5lZFByb3BlcnRpZXMkMSwgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllcyQxW25hbWVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdvbmZvY3VzaW4nIHx8IGxvd2VyQ2FzZWROYW1lID09PSAnb25mb2N1c291dCcpIHtcbiAgICAgIGVycm9yKCdSZWFjdCB1c2VzIG9uRm9jdXMgYW5kIG9uQmx1ciBpbnN0ZWFkIG9mIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dC4gJyArICdBbGwgUmVhY3QgZXZlbnRzIGFyZSBub3JtYWxpemVkIHRvIGJ1YmJsZSwgc28gb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0ICcgKyAnYXJlIG5vdCBuZWVkZWQvc3VwcG9ydGVkIGJ5IFJlYWN0LicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBXZSBjYW4ndCByZWx5IG9uIHRoZSBldmVudCBzeXN0ZW0gYmVpbmcgaW5qZWN0ZWQgb24gdGhlIHNlcnZlci5cblxuXG4gICAgaWYgKGV2ZW50UmVnaXN0cnkgIT0gbnVsbCkge1xuICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSBldmVudFJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMsXG4gICAgICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyA9IGV2ZW50UmVnaXN0cnkucG9zc2libGVSZWdpc3RyYXRpb25OYW1lcztcblxuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lID0gcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgPyBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXSA6IG51bGw7XG5cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKEVWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICBlcnJvcignVW5rbm93biBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIEl0IHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEVWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgLy8gSWYgbm8gZXZlbnQgcGx1Z2lucyBoYXZlIGJlZW4gaW5qZWN0ZWQsIHdlIGFyZSBpbiBhIHNlcnZlciBlbnZpcm9ubWVudC5cbiAgICAgIC8vIFNvIHdlIGNhbid0IHRlbGwgaWYgdGhlIGV2ZW50IG5hbWUgaXMgY29ycmVjdCBmb3Igc3VyZSwgYnV0IHdlIGNhbiBmaWx0ZXJcbiAgICAgIC8vIG91dCBrbm93biBiYWQgb25lcyBsaWtlIGBvbmNsaWNrYC4gV2UgY2FuJ3Qgc3VnZ2VzdCBhIHNwZWNpZmljIHJlcGxhY2VtZW50IHRob3VnaC5cbiAgICAgIGlmIChJTlZBTElEX0VWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuICcgKyAnUmVhY3QgZXZlbnRzIHVzZSB0aGUgY2FtZWxDYXNlIG5hbWluZyBjb252ZW50aW9uLCBmb3IgZXhhbXBsZSBgb25DbGlja2AuJywgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIExldCB0aGUgQVJJQSBhdHRyaWJ1dGUgaG9vayB2YWxpZGF0ZSBBUklBIGF0dHJpYnV0ZXNcblxuXG4gICAgaWYgKHJBUklBJDEudGVzdChuYW1lKSB8fCByQVJJQUNhbWVsJDEudGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnaW5uZXJodG1sJykge1xuICAgICAgZXJyb3IoJ0RpcmVjdGx5IHNldHRpbmcgcHJvcGVydHkgYGlubmVySFRNTGAgaXMgbm90IHBlcm1pdHRlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgbG9va3VwIGRvY3VtZW50YXRpb24gb24gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2FyaWEnKSB7XG4gICAgICBlcnJvcignVGhlIGBhcmlhYCBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgaW4gUmVhY3QuICcgKyAnUGFzcyBpbmRpdmlkdWFsIGBhcmlhLWAgYXR0cmlidXRlcyBpbnN0ZWFkLicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnaXMnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGEgYCVzYCBmb3IgYSBzdHJpbmcgYXR0cmlidXRlIGBpc2AuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgJyArICd0aGUgdmFsdWUgdG8gYSBzdHJpbmcuJywgdHlwZW9mIHZhbHVlKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIE5hTiBmb3IgdGhlIGAlc2AgYXR0cmlidXRlLiBJZiB0aGlzIGlzIGV4cGVjdGVkLCBjYXN0ICcgKyAndGhlIHZhbHVlIHRvIGEgc3RyaW5nLicsIG5hbWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhuYW1lKTtcbiAgICB2YXIgaXNSZXNlcnZlZCA9IHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQ7IC8vIEtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIG1hdGNoIHRoZSBjYXNpbmcgc3BlY2lmaWVkIGluIHRoZSBwcm9wZXJ0eSBjb25maWcuXG5cbiAgICBpZiAocG9zc2libGVTdGFuZGFyZE5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IHBvc3NpYmxlU3RhbmRhcmROYW1lc1tsb3dlckNhc2VkTmFtZV07XG5cbiAgICAgIGlmIChzdGFuZGFyZE5hbWUgIT09IG5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgRE9NIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHN0YW5kYXJkTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNSZXNlcnZlZCAmJiBuYW1lICE9PSBsb3dlckNhc2VkTmFtZSkge1xuICAgICAgLy8gVW5rbm93biBhdHRyaWJ1dGVzIHNob3VsZCBoYXZlIGxvd2VyY2FzZSBjYXNpbmcgc2luY2UgdGhhdCdzIGhvdyB0aGV5XG4gICAgICAvLyB3aWxsIGJlIGNhc2VkIGFueXdheSB3aXRoIHNlcnZlciByZW5kZXJpbmcuXG4gICAgICBlcnJvcignUmVhY3QgZG9lcyBub3QgcmVjb2duaXplIHRoZSBgJXNgIHByb3Agb24gYSBET00gZWxlbWVudC4gSWYgeW91ICcgKyAnaW50ZW50aW9uYWxseSB3YW50IGl0IHRvIGFwcGVhciBpbiB0aGUgRE9NIGFzIGEgY3VzdG9tICcgKyAnYXR0cmlidXRlLCBzcGVsbCBpdCBhcyBsb3dlcmNhc2UgYCVzYCBpbnN0ZWFkLiAnICsgJ0lmIHlvdSBhY2NpZGVudGFsbHkgcGFzc2VkIGl0IGZyb20gYSBwYXJlbnQgY29tcG9uZW50LCByZW1vdmUgJyArICdpdCBmcm9tIHRoZSBET00gZWxlbWVudC4nLCBuYW1lLCBsb3dlckNhc2VkTmFtZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgJiYgc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZXJyb3IoJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuJyArICdJZiB5b3Ugd2FudCB0byB3cml0ZSBpdCB0byB0aGUgRE9NLCBwYXNzIGEgc3RyaW5nIGluc3RlYWQ6ICcgKyAnJXM9XCIlc1wiIG9yICVzPXt2YWx1ZS50b1N0cmluZygpfS4nLCB2YWx1ZSwgbmFtZSwgbmFtZSwgdmFsdWUsIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuJyArICdJZiB5b3Ugd2FudCB0byB3cml0ZSBpdCB0byB0aGUgRE9NLCBwYXNzIGEgc3RyaW5nIGluc3RlYWQ6ICcgKyAnJXM9XCIlc1wiIG9yICVzPXt2YWx1ZS50b1N0cmluZygpfS5cXG5cXG4nICsgJ0lmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCAnICsgJ3Bhc3MgJXM9e2NvbmRpdGlvbiA/IHZhbHVlIDogdW5kZWZpbmVkfSBpbnN0ZWFkLicsIHZhbHVlLCBuYW1lLCBuYW1lLCB2YWx1ZSwgbmFtZSwgbmFtZSwgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIE5vdyB0aGF0IHdlJ3ZlIHZhbGlkYXRlZCBjYXNpbmcsIGRvIG5vdCB2YWxpZGF0ZVxuICAgIC8vIGRhdGEgdHlwZXMgZm9yIHJlc2VydmVkIHByb3BzXG5cblxuICAgIGlmIChpc1Jlc2VydmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIFdhcm4gd2hlbiBhIGtub3duIGF0dHJpYnV0ZSBpcyBhIGJhZCB0eXBlXG5cblxuICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBXYXJuIHdoZW4gcGFzc2luZyB0aGUgc3RyaW5ncyAnZmFsc2UnIG9yICd0cnVlJyBpbnRvIGEgYm9vbGVhbiBwcm9wXG5cblxuICAgIGlmICgodmFsdWUgPT09ICdmYWxzZScgfHwgdmFsdWUgPT09ICd0cnVlJykgJiYgcHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBCT09MRUFOKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgdGhlIHN0cmluZyBgJXNgIGZvciB0aGUgYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC4gJyArICclcyAnICsgJ0RpZCB5b3UgbWVhbiAlcz17JXN9PycsIHZhbHVlLCBuYW1lLCB2YWx1ZSA9PT0gJ2ZhbHNlJyA/ICdUaGUgYnJvd3NlciB3aWxsIGludGVycHJldCBpdCBhcyBhIHRydXRoeSB2YWx1ZS4nIDogJ0FsdGhvdWdoIHRoaXMgd29ya3MsIGl0IHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgaWYgeW91IHBhc3MgdGhlIHN0cmluZyBcImZhbHNlXCIuJywgbmFtZSwgdmFsdWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG5cbnZhciB3YXJuVW5rbm93blByb3BlcnRpZXMgPSBmdW5jdGlvbiAodHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpIHtcbiAge1xuICAgIHZhciB1bmtub3duUHJvcHMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFyIGlzVmFsaWQgPSB2YWxpZGF0ZVByb3BlcnR5JDEodHlwZSwga2V5LCBwcm9wc1trZXldLCBldmVudFJlZ2lzdHJ5KTtcblxuICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIHVua25vd25Qcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVua25vd25Qcm9wU3RyaW5nID0gdW5rbm93blByb3BzLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuICdgJyArIHByb3AgKyAnYCc7XG4gICAgfSkuam9pbignLCAnKTtcblxuICAgIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgcHJvcCAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSBpdCBmcm9tIHRoZSBlbGVtZW50LCAnICsgJ29yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgaXQgaW4gdGhlIERPTS4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9hdHRyaWJ1dGUtYmVoYXZpb3IgJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH0gZWxzZSBpZiAodW5rbm93blByb3BzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIHZhbHVlcyBmb3IgcHJvcHMgJXMgb24gPCVzPiB0YWcuIEVpdGhlciByZW1vdmUgdGhlbSBmcm9tIHRoZSBlbGVtZW50LCAnICsgJ29yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgdGhlbSBpbiB0aGUgRE9NLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciAnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSkge1xuICBpZiAoaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2FyblVua25vd25Qcm9wZXJ0aWVzKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KTtcbn1cblxudmFyIElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFID0gMTtcbnZhciBJU19OT05fREVMRUdBVEVEID0gMSA8PCAxO1xudmFyIElTX0NBUFRVUkVfUEhBU0UgPSAxIDw8IDI7XG52YXIgSVNfUkVQTEFZRUQgPSAxIDw8IDQ7XG4vLyBzZXQgdG8gTEVHQUNZX0ZCX1NVUFBPUlQuIExFR0FDWV9GQl9TVVBQT1JUIG9ubHkgZ2V0cyBzZXQgd2hlblxuLy8gd2UgY2FsbCB3aWxsRGVmZXJMYXRlckZvckxlZ2FjeUZCU3VwcG9ydCwgdGh1cyBub3QgYmFpbGluZyBvdXRcbi8vIHdpbGwgcmVzdWx0IGluIGVuZGxlc3MgY3ljbGVzIGxpa2UgYW4gaW5maW5pdGUgbG9vcC5cbi8vIFdlIGFsc28gZG9uJ3Qgd2FudCB0byBkZWZlciBkdXJpbmcgZXZlbnQgcmVwbGF5aW5nLlxuXG52YXIgU0hPVUxEX05PVF9QUk9DRVNTX1BPTFlGSUxMX0VWRU5UX1BMVUdJTlMgPSBJU19FVkVOVF9IQU5ETEVfTk9OX01BTkFHRURfTk9ERSB8IElTX05PTl9ERUxFR0FURUQgfCBJU19DQVBUVVJFX1BIQVNFO1xuXG4vKipcbiAqIEdldHMgdGhlIHRhcmdldCBub2RlIGZyb20gYSBuYXRpdmUgYnJvd3NlciBldmVudCBieSBhY2NvdW50aW5nIGZvclxuICogaW5jb25zaXN0ZW5jaWVzIGluIGJyb3dzZXIgRE9NIEFQSXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7RE9NRXZlbnRUYXJnZXR9IFRhcmdldCBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSB7XG4gIC8vIEZhbGxiYWNrIHRvIG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgZm9yIElFOVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTA2XG4gIHZhciB0YXJnZXQgPSBuYXRpdmVFdmVudC50YXJnZXQgfHwgbmF0aXZlRXZlbnQuc3JjRWxlbWVudCB8fCB3aW5kb3c7IC8vIE5vcm1hbGl6ZSBTVkcgPHVzZT4gZWxlbWVudCBldmVudHMgIzQ5NjNcblxuICBpZiAodGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSB7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50O1xuICB9IC8vIFNhZmFyaSBtYXkgZmlyZSBldmVudHMgb24gdGV4dCBub2RlcyAoTm9kZS5URVhUX05PREUgaXMgMykuXG4gIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9qcy9ldmVudHNfcHJvcGVydGllcy5odG1sXG5cblxuICByZXR1cm4gdGFyZ2V0Lm5vZGVUeXBlID09PSBURVhUX05PREUgPyB0YXJnZXQucGFyZW50Tm9kZSA6IHRhcmdldDtcbn1cblxudmFyIHJlc3RvcmVJbXBsID0gbnVsbDtcbnZhciByZXN0b3JlVGFyZ2V0ID0gbnVsbDtcbnZhciByZXN0b3JlUXVldWUgPSBudWxsO1xuXG5mdW5jdGlvbiByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpIHtcbiAgLy8gV2UgcGVyZm9ybSB0aGlzIHRyYW5zbGF0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3Agc28gdGhhdCB3ZVxuICAvLyBhbHdheXMgcmVjZWl2ZSB0aGUgY29ycmVjdCBmaWJlciBoZXJlXG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXQpO1xuXG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIC8vIFVubW91bnRlZFxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghKHR5cGVvZiByZXN0b3JlSW1wbCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJzZXRSZXN0b3JlSW1wbGVtZW50YXRpb24oKSBuZWVkcyB0byBiZSBjYWxsZWQgdG8gaGFuZGxlIGEgdGFyZ2V0IGZvciBjb250cm9sbGVkIGV2ZW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGF0ZU5vZGUgPSBpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZTsgLy8gR3VhcmQgYWdhaW5zdCBGaWJlciBiZWluZyB1bm1vdW50ZWQuXG5cbiAgaWYgKHN0YXRlTm9kZSkge1xuICAgIHZhciBfcHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKHN0YXRlTm9kZSk7XG5cbiAgICByZXN0b3JlSW1wbChpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZSwgaW50ZXJuYWxJbnN0YW5jZS50eXBlLCBfcHJvcHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbihpbXBsKSB7XG4gIHJlc3RvcmVJbXBsID0gaW1wbDtcbn1cbmZ1bmN0aW9uIGVucXVldWVTdGF0ZVJlc3RvcmUodGFyZ2V0KSB7XG4gIGlmIChyZXN0b3JlVGFyZ2V0KSB7XG4gICAgaWYgKHJlc3RvcmVRdWV1ZSkge1xuICAgICAgcmVzdG9yZVF1ZXVlLnB1c2godGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdG9yZVF1ZXVlID0gW3RhcmdldF07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlc3RvcmVUYXJnZXQgPSB0YXJnZXQ7XG4gIH1cbn1cbmZ1bmN0aW9uIG5lZWRzU3RhdGVSZXN0b3JlKCkge1xuICByZXR1cm4gcmVzdG9yZVRhcmdldCAhPT0gbnVsbCB8fCByZXN0b3JlUXVldWUgIT09IG51bGw7XG59XG5mdW5jdGlvbiByZXN0b3JlU3RhdGVJZk5lZWRlZCgpIHtcbiAgaWYgKCFyZXN0b3JlVGFyZ2V0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHRhcmdldCA9IHJlc3RvcmVUYXJnZXQ7XG4gIHZhciBxdWV1ZWRUYXJnZXRzID0gcmVzdG9yZVF1ZXVlO1xuICByZXN0b3JlVGFyZ2V0ID0gbnVsbDtcbiAgcmVzdG9yZVF1ZXVlID0gbnVsbDtcbiAgcmVzdG9yZVN0YXRlT2ZUYXJnZXQodGFyZ2V0KTtcblxuICBpZiAocXVldWVkVGFyZ2V0cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWVkVGFyZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdG9yZVN0YXRlT2ZUYXJnZXQocXVldWVkVGFyZ2V0c1tpXSk7XG4gICAgfVxuICB9XG59XG5cbi8vIHRoZSByZW5kZXJlci4gU3VjaCBhcyB3aGVuIHdlJ3JlIGRpc3BhdGNoaW5nIGV2ZW50cyBvciBpZiB0aGlyZCBwYXJ0eVxuLy8gbGlicmFyaWVzIG5lZWQgdG8gY2FsbCBiYXRjaGVkVXBkYXRlcy4gRXZlbnR1YWxseSwgdGhpcyBBUEkgd2lsbCBnbyBhd2F5IHdoZW5cbi8vIGV2ZXJ5dGhpbmcgaXMgYmF0Y2hlZCBieSBkZWZhdWx0LiBXZSdsbCB0aGVuIGhhdmUgYSBzaW1pbGFyIEFQSSB0byBvcHQtb3V0IG9mXG4vLyBzY2hlZHVsZWQgd29yayBhbmQgaW5zdGVhZCBkbyBzeW5jaHJvbm91cyB3b3JrLlxuLy8gRGVmYXVsdHNcblxudmFyIGJhdGNoZWRVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uIChmbiwgYm9va2tlZXBpbmcpIHtcbiAgcmV0dXJuIGZuKGJvb2trZWVwaW5nKTtcbn07XG5cbnZhciBkaXNjcmV0ZVVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHJldHVybiBmbihhLCBiLCBjLCBkKTtcbn07XG5cbnZhciBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIGJhdGNoZWRFdmVudFVwZGF0ZXNJbXBsID0gYmF0Y2hlZFVwZGF0ZXNJbXBsO1xudmFyIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gZmFsc2U7XG52YXIgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmaW5pc2hFdmVudEhhbmRsZXIoKSB7XG4gIC8vIEhlcmUgd2Ugd2FpdCB1bnRpbCBhbGwgdXBkYXRlcyBoYXZlIHByb3BhZ2F0ZWQsIHdoaWNoIGlzIGltcG9ydGFudFxuICAvLyB3aGVuIHVzaW5nIGNvbnRyb2xsZWQgY29tcG9uZW50cyB3aXRoaW4gbGF5ZXJzOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2OThcbiAgLy8gVGhlbiB3ZSByZXN0b3JlIHN0YXRlIG9mIGFueSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgdmFyIGNvbnRyb2xsZWRDb21wb25lbnRzSGF2ZVBlbmRpbmdVcGRhdGVzID0gbmVlZHNTdGF0ZVJlc3RvcmUoKTtcblxuICBpZiAoY29udHJvbGxlZENvbXBvbmVudHNIYXZlUGVuZGluZ1VwZGF0ZXMpIHtcbiAgICAvLyBJZiBhIGNvbnRyb2xsZWQgZXZlbnQgd2FzIGZpcmVkLCB3ZSBtYXkgbmVlZCB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZlxuICAgIC8vIHRoZSBET00gbm9kZSBiYWNrIHRvIHRoZSBjb250cm9sbGVkIHZhbHVlLiBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIFJlYWN0XG4gICAgLy8gYmFpbHMgb3V0IG9mIHRoZSB1cGRhdGUgd2l0aG91dCB0b3VjaGluZyB0aGUgRE9NLlxuICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCgpO1xuICAgIHJlc3RvcmVTdGF0ZUlmTmVlZGVkKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMoZm4sIGJvb2trZWVwaW5nKSB7XG4gIGlmIChpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlIGFub3RoZXIgYmF0Y2gsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdFxuICAgIC8vIGZ1bGx5IGNvbXBsZXRlcyBiZWZvcmUgcmVzdG9yaW5nIHN0YXRlLlxuICAgIHJldHVybiBmbihib29ra2VlcGluZyk7XG4gIH1cblxuICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYmF0Y2hlZFVwZGF0ZXNJbXBsKGZuLCBib29ra2VlcGluZyk7XG4gIH0gZmluYWxseSB7XG4gICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBmYWxzZTtcbiAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gYmF0Y2hlZEV2ZW50VXBkYXRlcyhmbiwgYSwgYikge1xuICBpZiAoaXNCYXRjaGluZ0V2ZW50VXBkYXRlcykge1xuICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlIGFub3RoZXIgYmF0Y2gsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdFxuICAgIC8vIGZ1bGx5IGNvbXBsZXRlcyBiZWZvcmUgcmVzdG9yaW5nIHN0YXRlLlxuICAgIHJldHVybiBmbihhLCBiKTtcbiAgfVxuXG4gIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGJhdGNoZWRFdmVudFVwZGF0ZXNJbXBsKGZuLCBhLCBiKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gZmFsc2U7XG4gICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpc2NyZXRlVXBkYXRlcyhmbiwgYSwgYiwgYywgZCkge1xuICB2YXIgcHJldklzSW5zaWRlRXZlbnRIYW5kbGVyID0gaXNJbnNpZGVFdmVudEhhbmRsZXI7XG4gIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBkaXNjcmV0ZVVwZGF0ZXNJbXBsKGZuLCBhLCBiLCBjLCBkKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IHByZXZJc0luc2lkZUV2ZW50SGFuZGxlcjtcblxuICAgIGlmICghaXNJbnNpZGVFdmVudEhhbmRsZXIpIHtcbiAgICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJZk5lZWRlZCh0aW1lU3RhbXApIHtcbiAge1xuICAgIGlmICghaXNJbnNpZGVFdmVudEhhbmRsZXIpIHtcbiAgICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihfYmF0Y2hlZFVwZGF0ZXNJbXBsLCBfZGlzY3JldGVVcGRhdGVzSW1wbCwgX2ZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCwgX2JhdGNoZWRFdmVudFVwZGF0ZXNJbXBsKSB7XG4gIGJhdGNoZWRVcGRhdGVzSW1wbCA9IF9iYXRjaGVkVXBkYXRlc0ltcGw7XG4gIGRpc2NyZXRlVXBkYXRlc0ltcGwgPSBfZGlzY3JldGVVcGRhdGVzSW1wbDtcbiAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsID0gX2ZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbDtcbiAgYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwgPSBfYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGw7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJhY3RpdmUodGFnKSB7XG4gIHJldHVybiB0YWcgPT09ICdidXR0b24nIHx8IHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICdzZWxlY3QnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJztcbn1cblxuZnVuY3Rpb24gc2hvdWxkUHJldmVudE1vdXNlRXZlbnQobmFtZSwgdHlwZSwgcHJvcHMpIHtcbiAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSAnb25DbGljayc6XG4gICAgY2FzZSAnb25DbGlja0NhcHR1cmUnOlxuICAgIGNhc2UgJ29uRG91YmxlQ2xpY2snOlxuICAgIGNhc2UgJ29uRG91YmxlQ2xpY2tDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlRG93bic6XG4gICAgY2FzZSAnb25Nb3VzZURvd25DYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlTW92ZSc6XG4gICAgY2FzZSAnb25Nb3VzZU1vdmVDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlVXAnOlxuICAgIGNhc2UgJ29uTW91c2VVcENhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VFbnRlcic6XG4gICAgICByZXR1cm4gISEocHJvcHMuZGlzYWJsZWQgJiYgaXNJbnRlcmFjdGl2ZSh0eXBlKSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiBldmVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNrYCkuXG4gKiBAcmV0dXJuIHs/ZnVuY3Rpb259IFRoZSBzdG9yZWQgY2FsbGJhY2suXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKSB7XG4gIHZhciBzdGF0ZU5vZGUgPSBpbnN0LnN0YXRlTm9kZTtcblxuICBpZiAoc3RhdGVOb2RlID09PSBudWxsKSB7XG4gICAgLy8gV29yayBpbiBwcm9ncmVzcyAoZXg6IG9ubG9hZCBldmVudHMgaW4gaW5jcmVtZW50YWwgbW9kZSkuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgcHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKHN0YXRlTm9kZSk7XG5cbiAgaWYgKHByb3BzID09PSBudWxsKSB7XG4gICAgLy8gV29yayBpbiBwcm9ncmVzcy5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IHByb3BzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50TW91c2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBpbnN0LnR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCEoIWxpc3RlbmVyIHx8IHR5cGVvZiBsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBgXCIgKyByZWdpc3RyYXRpb25OYW1lICsgXCJgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYFwiICsgdHlwZW9mIGxpc3RlbmVyICsgXCJgIHR5cGUuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXI7XG59XG5cbnZhciBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IGZhbHNlOyAvLyBDaGVjayBpZiBicm93c2VyIHN1cHBvcnQgZXZlbnRzIHdpdGggcGFzc2l2ZSBsaXN0ZW5lcnNcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudFRhcmdldC9hZGRFdmVudExpc3RlbmVyI1NhZmVseV9kZXRlY3Rpbmdfb3B0aW9uX3N1cHBvcnRcblxuaWYgKGNhblVzZURPTSkge1xuICB0cnkge1xuICAgIHZhciBvcHRpb25zID0ge307IC8vICRGbG93Rml4TWU6IElnbm9yZSBGbG93IGNvbXBsYWluaW5nIGFib3V0IG5lZWRpbmcgYSB2YWx1ZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdGlvbnMsICdwYXNzaXZlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja1Byb2QobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICB2YXIgZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuXG4gIHRyeSB7XG4gICAgZnVuYy5hcHBseShjb250ZXh0LCBmdW5jQXJncyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhpcy5vbkVycm9yKGVycm9yKTtcbiAgfVxufVxuXG52YXIgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCA9IGludm9rZUd1YXJkZWRDYWxsYmFja1Byb2Q7XG5cbntcbiAgLy8gSW4gREVWIG1vZGUsIHdlIHN3YXAgb3V0IGludm9rZUd1YXJkZWRDYWxsYmFjayBmb3IgYSBzcGVjaWFsIHZlcnNpb25cbiAgLy8gdGhhdCBwbGF5cyBtb3JlIG5pY2VseSB3aXRoIHRoZSBicm93c2VyJ3MgRGV2VG9vbHMuIFRoZSBpZGVhIGlzIHRvIHByZXNlcnZlXG4gIC8vIFwiUGF1c2Ugb24gZXhjZXB0aW9uc1wiIGJlaGF2aW9yLiBCZWNhdXNlIFJlYWN0IHdyYXBzIGFsbCB1c2VyLXByb3ZpZGVkXG4gIC8vIGZ1bmN0aW9ucyBpbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssIGFuZCB0aGUgcHJvZHVjdGlvbiB2ZXJzaW9uIG9mXG4gIC8vIGludm9rZUd1YXJkZWRDYWxsYmFjayB1c2VzIGEgdHJ5LWNhdGNoLCBhbGwgdXNlciBleGNlcHRpb25zIGFyZSB0cmVhdGVkXG4gIC8vIGxpa2UgY2F1Z2h0IGV4Y2VwdGlvbnMsIGFuZCB0aGUgRGV2VG9vbHMgd29uJ3QgcGF1c2UgdW5sZXNzIHRoZSBkZXZlbG9wZXJcbiAgLy8gdGFrZXMgdGhlIGV4dHJhIHN0ZXAgb2YgZW5hYmxpbmcgcGF1c2Ugb24gY2F1Z2h0IGV4Y2VwdGlvbnMuIFRoaXMgaXNcbiAgLy8gdW5pbnR1aXRpdmUsIHRob3VnaCwgYmVjYXVzZSBldmVuIHRob3VnaCBSZWFjdCBoYXMgY2F1Z2h0IHRoZSBlcnJvciwgZnJvbVxuICAvLyB0aGUgZGV2ZWxvcGVyJ3MgcGVyc3BlY3RpdmUsIHRoZSBlcnJvciBpcyB1bmNhdWdodC5cbiAgLy9cbiAgLy8gVG8gcHJlc2VydmUgdGhlIGV4cGVjdGVkIFwiUGF1c2Ugb24gZXhjZXB0aW9uc1wiIGJlaGF2aW9yLCB3ZSBkb24ndCB1c2UgYVxuICAvLyB0cnktY2F0Y2ggaW4gREVWLiBJbnN0ZWFkLCB3ZSBzeW5jaHJvbm91c2x5IGRpc3BhdGNoIGEgZmFrZSBldmVudCB0byBhIGZha2VcbiAgLy8gRE9NIG5vZGUsIGFuZCBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrIGZyb20gaW5zaWRlIGFuIGV2ZW50IGhhbmRsZXJcbiAgLy8gZm9yIHRoYXQgZmFrZSBldmVudC4gSWYgdGhlIGNhbGxiYWNrIHRocm93cywgdGhlIGVycm9yIGlzIFwiY2FwdHVyZWRcIiB1c2luZ1xuICAvLyBhIGdsb2JhbCBldmVudCBoYW5kbGVyLiBCdXQgYmVjYXVzZSB0aGUgZXJyb3IgaGFwcGVucyBpbiBhIGRpZmZlcmVudFxuICAvLyBldmVudCBsb29wIGNvbnRleHQsIGl0IGRvZXMgbm90IGludGVycnVwdCB0aGUgbm9ybWFsIHByb2dyYW0gZmxvdy5cbiAgLy8gRWZmZWN0aXZlbHksIHRoaXMgZ2l2ZXMgdXMgdHJ5LWNhdGNoIGJlaGF2aW9yIHdpdGhvdXQgYWN0dWFsbHkgdXNpbmdcbiAgLy8gdHJ5LWNhdGNoLiBOZWF0IVxuICAvLyBDaGVjayB0aGF0IHRoZSBicm93c2VyIHN1cHBvcnRzIHRoZSBBUElzIHdlIG5lZWQgdG8gaW1wbGVtZW50IG91ciBzcGVjaWFsXG4gIC8vIERFViB2ZXJzaW9uIG9mIGludm9rZUd1YXJkZWRDYWxsYmFja1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kaXNwYXRjaEV2ZW50ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGZha2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncmVhY3QnKTtcblxuICAgIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwgPSBmdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tEZXYobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgLy8gSWYgZG9jdW1lbnQgZG9lc24ndCBleGlzdCB3ZSBrbm93IGZvciBzdXJlIHdlIHdpbGwgY3Jhc2ggaW4gdGhpcyBtZXRob2RcbiAgICAgIC8vIHdoZW4gd2UgY2FsbCBkb2N1bWVudC5jcmVhdGVFdmVudCgpLiBIb3dldmVyIHRoaXMgY2FuIGNhdXNlIGNvbmZ1c2luZ1xuICAgICAgLy8gZXJyb3JzOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2tpbmN1YmF0b3IvY3JlYXRlLXJlYWN0LWFwcC9pc3N1ZXMvMzQ4MlxuICAgICAgLy8gU28gd2UgcHJlZW1wdGl2ZWx5IHRocm93IHdpdGggYSBiZXR0ZXIgbWVzc2FnZSBpbnN0ZWFkLlxuICAgICAgaWYgKCEodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSBgZG9jdW1lbnRgIGdsb2JhbCB3YXMgZGVmaW5lZCB3aGVuIFJlYWN0IHdhcyBpbml0aWFsaXplZCwgYnV0IGlzIG5vdCBkZWZpbmVkIGFueW1vcmUuIFRoaXMgY2FuIGhhcHBlbiBpbiBhIHRlc3QgZW52aXJvbm1lbnQgaWYgYSBjb21wb25lbnQgc2NoZWR1bGVzIGFuIHVwZGF0ZSBmcm9tIGFuIGFzeW5jaHJvbm91cyBjYWxsYmFjaywgYnV0IHRoZSB0ZXN0IGhhcyBhbHJlYWR5IGZpbmlzaGVkIHJ1bm5pbmcuIFRvIHNvbHZlIHRoaXMsIHlvdSBjYW4gZWl0aGVyIHVubW91bnQgdGhlIGNvbXBvbmVudCBhdCB0aGUgZW5kIG9mIHlvdXIgdGVzdCAoYW5kIGVuc3VyZSB0aGF0IGFueSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBnZXQgY2FuY2VsZWQgaW4gYGNvbXBvbmVudFdpbGxVbm1vdW50YCksIG9yIHlvdSBjYW4gY2hhbmdlIHRoZSB0ZXN0IGl0c2VsZiB0byBiZSBhc3luY2hyb25vdXMuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICB2YXIgZGlkQ2FsbCA9IGZhbHNlOyAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrIHRocmV3IGFuIGVycm9yLiBXZVxuICAgICAgLy8gc2V0IHRoaXMgdG8gdHJ1ZSBhdCB0aGUgYmVnaW5uaW5nLCB0aGVuIHNldCBpdCB0byBmYWxzZSByaWdodCBhZnRlclxuICAgICAgLy8gY2FsbGluZyB0aGUgZnVuY3Rpb24uIElmIHRoZSBmdW5jdGlvbiBlcnJvcnMsIGBkaWRFcnJvcmAgd2lsbCBuZXZlciBiZVxuICAgICAgLy8gc2V0IHRvIGZhbHNlLiBUaGlzIHN0cmF0ZWd5IHdvcmtzIGV2ZW4gaWYgdGhlIGJyb3dzZXIgaXMgZmxha3kgYW5kXG4gICAgICAvLyBmYWlscyB0byBjYWxsIG91ciBnbG9iYWwgZXJyb3IgaGFuZGxlciwgYmVjYXVzZSBpdCBkb2Vzbid0IHJlbHkgb25cbiAgICAgIC8vIHRoZSBlcnJvciBldmVudCBhdCBhbGwuXG5cbiAgICAgIHZhciBkaWRFcnJvciA9IHRydWU7IC8vIEtlZXBzIHRyYWNrIG9mIHRoZSB2YWx1ZSBvZiB3aW5kb3cuZXZlbnQgc28gdGhhdCB3ZSBjYW4gcmVzZXQgaXRcbiAgICAgIC8vIGR1cmluZyB0aGUgY2FsbGJhY2sgdG8gbGV0IHVzZXIgY29kZSBhY2Nlc3Mgd2luZG93LmV2ZW50IGluIHRoZVxuICAgICAgLy8gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGl0LlxuXG4gICAgICB2YXIgd2luZG93RXZlbnQgPSB3aW5kb3cuZXZlbnQ7IC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHdpbmRvdy5ldmVudCB0byByZXN0b3JlIGl0IGFmdGVyIGV2ZW50XG4gICAgICAvLyBkaXNwYXRjaGluZzogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzY4OFxuXG4gICAgICB2YXIgd2luZG93RXZlbnREZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdldmVudCcpO1xuXG4gICAgICBmdW5jdGlvbiByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpIHtcbiAgICAgICAgLy8gV2UgaW1tZWRpYXRlbHkgcmVtb3ZlIHRoZSBjYWxsYmFjayBmcm9tIGV2ZW50IGxpc3RlbmVycyBzbyB0aGF0XG4gICAgICAgIC8vIG5lc3RlZCBgaW52b2tlR3VhcmRlZENhbGxiYWNrYCBjYWxscyBkbyBub3QgY2xhc2guIE90aGVyd2lzZSwgYVxuICAgICAgICAvLyBuZXN0ZWQgY2FsbCB3b3VsZCB0cmlnZ2VyIHRoZSBmYWtlIGV2ZW50IGhhbmRsZXJzIG9mIGFueSBjYWxsIGhpZ2hlclxuICAgICAgICAvLyBpbiB0aGUgc3RhY2suXG4gICAgICAgIGZha2VOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgY2FsbENhbGxiYWNrLCBmYWxzZSk7IC8vIFdlIGNoZWNrIGZvciB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykgdG8gcHJldmVudCB0aGVcbiAgICAgICAgLy8gd2luZG93LmV2ZW50IGFzc2lnbm1lbnQgaW4gYm90aCBJRSA8PSAxMCBhcyB0aGV5IHRocm93IGFuIGVycm9yXG4gICAgICAgIC8vIFwiTWVtYmVyIG5vdCBmb3VuZFwiIGluIHN0cmljdCBtb2RlLCBhbmQgaW4gRmlyZWZveCB3aGljaCBkb2VzIG5vdFxuICAgICAgICAvLyBzdXBwb3J0IHdpbmRvdy5ldmVudC5cblxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5ldmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lmhhc093blByb3BlcnR5KCdldmVudCcpKSB7XG4gICAgICAgICAgd2luZG93LmV2ZW50ID0gd2luZG93RXZlbnQ7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ3JlYXRlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIG91ciBmYWtlIGV2ZW50LiBXZSB3aWxsIHN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGRpc3BhdGNoIG91ciBmYWtlIGV2ZW50IHVzaW5nIGBkaXNwYXRjaEV2ZW50YC4gSW5zaWRlIHRoZSBoYW5kbGVyLCB3ZVxuICAgICAgLy8gY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjay5cblxuXG4gICAgICB2YXIgZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuXG4gICAgICBmdW5jdGlvbiBjYWxsQ2FsbGJhY2soKSB7XG4gICAgICAgIGRpZENhbGwgPSB0cnVlO1xuICAgICAgICByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpO1xuICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGZ1bmNBcmdzKTtcbiAgICAgICAgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICAgIH0gLy8gQ3JlYXRlIGEgZ2xvYmFsIGVycm9yIGV2ZW50IGhhbmRsZXIuIFdlIHVzZSB0aGlzIHRvIGNhcHR1cmUgdGhlIHZhbHVlXG4gICAgICAvLyB0aGF0IHdhcyB0aHJvd24uIEl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGVycm9yIGhhbmRsZXIgd2lsbCBmaXJlIG1vcmVcbiAgICAgIC8vIHRoYW4gb25jZTsgZm9yIGV4YW1wbGUsIGlmIG5vbi1SZWFjdCBjb2RlIGFsc28gY2FsbHMgYGRpc3BhdGNoRXZlbnRgXG4gICAgICAvLyBhbmQgYSBoYW5kbGVyIGZvciB0aGF0IGV2ZW50IHRocm93cy4gV2Ugc2hvdWxkIGJlIHJlc2lsaWVudCB0byBtb3N0IG9mXG4gICAgICAvLyB0aG9zZSBjYXNlcy4gRXZlbiBpZiBvdXIgZXJyb3IgZXZlbnQgaGFuZGxlciBmaXJlcyBtb3JlIHRoYW4gb25jZSwgdGhlXG4gICAgICAvLyBsYXN0IGVycm9yIGV2ZW50IGlzIGFsd2F5cyB1c2VkLiBJZiB0aGUgY2FsbGJhY2sgYWN0dWFsbHkgZG9lcyBlcnJvcixcbiAgICAgIC8vIHdlIGtub3cgdGhhdCB0aGUgbGFzdCBlcnJvciBldmVudCBpcyB0aGUgY29ycmVjdCBvbmUsIGJlY2F1c2UgaXQncyBub3RcbiAgICAgIC8vIHBvc3NpYmxlIGZvciBhbnl0aGluZyBlbHNlIHRvIGhhdmUgaGFwcGVuZWQgaW4gYmV0d2VlbiBvdXIgY2FsbGJhY2tcbiAgICAgIC8vIGVycm9yaW5nIGFuZCB0aGUgY29kZSB0aGF0IGZvbGxvd3MgdGhlIGBkaXNwYXRjaEV2ZW50YCBjYWxsIGJlbG93LiBJZlxuICAgICAgLy8gdGhlIGNhbGxiYWNrIGRvZXNuJ3QgZXJyb3IsIGJ1dCB0aGUgZXJyb3IgZXZlbnQgd2FzIGZpcmVkLCB3ZSBrbm93IHRvXG4gICAgICAvLyBpZ25vcmUgaXQgYmVjYXVzZSBgZGlkRXJyb3JgIHdpbGwgYmUgZmFsc2UsIGFzIGRlc2NyaWJlZCBhYm92ZS5cblxuXG4gICAgICB2YXIgZXJyb3I7IC8vIFVzZSB0aGlzIHRvIHRyYWNrIHdoZXRoZXIgdGhlIGVycm9yIGV2ZW50IGlzIGV2ZXIgY2FsbGVkLlxuXG4gICAgICB2YXIgZGlkU2V0RXJyb3IgPSBmYWxzZTtcbiAgICAgIHZhciBpc0Nyb3NzT3JpZ2luRXJyb3IgPSBmYWxzZTtcblxuICAgICAgZnVuY3Rpb24gaGFuZGxlV2luZG93RXJyb3IoZXZlbnQpIHtcbiAgICAgICAgZXJyb3IgPSBldmVudC5lcnJvcjtcbiAgICAgICAgZGlkU2V0RXJyb3IgPSB0cnVlO1xuXG4gICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCAmJiBldmVudC5jb2xubyA9PT0gMCAmJiBldmVudC5saW5lbm8gPT09IDApIHtcbiAgICAgICAgICBpc0Nyb3NzT3JpZ2luRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAvLyBTb21lIG90aGVyIGVycm9yIGhhbmRsZXIgaGFzIHByZXZlbnRlZCBkZWZhdWx0LlxuICAgICAgICAgIC8vIEJyb3dzZXJzIHNpbGVuY2UgdGhlIGVycm9yIHJlcG9ydCBpZiB0aGlzIGhhcHBlbnMuXG4gICAgICAgICAgLy8gV2UnbGwgcmVtZW1iZXIgdGhpcyB0byBsYXRlciBkZWNpZGUgd2hldGhlciB0byBsb2cgaXQgb3Igbm90LlxuICAgICAgICAgIGlmIChlcnJvciAhPSBudWxsICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGVycm9yLl9zdXBwcmVzc0xvZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoaW5uZXIpIHsvLyBJZ25vcmUuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIENyZWF0ZSBhIGZha2UgZXZlbnQgdHlwZS5cblxuXG4gICAgICB2YXIgZXZ0VHlwZSA9IFwicmVhY3QtXCIgKyAobmFtZSA/IG5hbWUgOiAnaW52b2tlZ3VhcmRlZGNhbGxiYWNrJyk7IC8vIEF0dGFjaCBvdXIgZXZlbnQgaGFuZGxlcnNcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFuZGxlV2luZG93RXJyb3IpO1xuICAgICAgZmFrZU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTsgLy8gU3luY2hyb25vdXNseSBkaXNwYXRjaCBvdXIgZmFrZSBldmVudC4gSWYgdGhlIHVzZXItcHJvdmlkZWQgZnVuY3Rpb25cbiAgICAgIC8vIGVycm9ycywgaXQgd2lsbCB0cmlnZ2VyIG91ciBnbG9iYWwgZXJyb3IgaGFuZGxlci5cblxuICAgICAgZXZ0LmluaXRFdmVudChldnRUeXBlLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgZmFrZU5vZGUuZGlzcGF0Y2hFdmVudChldnQpO1xuXG4gICAgICBpZiAod2luZG93RXZlbnREZXNjcmlwdG9yKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdldmVudCcsIHdpbmRvd0V2ZW50RGVzY3JpcHRvcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaWRDYWxsICYmIGRpZEVycm9yKSB7XG4gICAgICAgIGlmICghZGlkU2V0RXJyb3IpIHtcbiAgICAgICAgICAvLyBUaGUgY2FsbGJhY2sgZXJyb3JlZCwgYnV0IHRoZSBlcnJvciBldmVudCBuZXZlciBmaXJlZC5cbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignQW4gZXJyb3Igd2FzIHRocm93biBpbnNpZGUgb25lIG9mIHlvdXIgY29tcG9uZW50cywgYnV0IFJlYWN0ICcgKyBcImRvZXNuJ3Qga25vdyB3aGF0IGl0IHdhcy4gVGhpcyBpcyBsaWtlbHkgZHVlIHRvIGJyb3dzZXIgXCIgKyAnZmxha2luZXNzLiBSZWFjdCBkb2VzIGl0cyBiZXN0IHRvIHByZXNlcnZlIHRoZSBcIlBhdXNlIG9uICcgKyAnZXhjZXB0aW9uc1wiIGJlaGF2aW9yIG9mIHRoZSBEZXZUb29scywgd2hpY2ggcmVxdWlyZXMgc29tZSAnICsgXCJERVYtbW9kZSBvbmx5IHRyaWNrcy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXNlIGRvbid0IHdvcmsgaW4gXCIgKyAneW91ciBicm93c2VyLiBUcnkgdHJpZ2dlcmluZyB0aGUgZXJyb3IgaW4gcHJvZHVjdGlvbiBtb2RlLCAnICsgJ29yIHN3aXRjaGluZyB0byBhIG1vZGVybiBicm93c2VyLiBJZiB5b3Ugc3VzcGVjdCB0aGF0IHRoaXMgaXMgJyArICdhY3R1YWxseSBhbiBpc3N1ZSB3aXRoIFJlYWN0LCBwbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Nyb3NzT3JpZ2luRXJyb3IpIHtcbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIkEgY3Jvc3Mtb3JpZ2luIGVycm9yIHdhcyB0aHJvd24uIFJlYWN0IGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gXCIgKyAndGhlIGFjdHVhbCBlcnJvciBvYmplY3QgaW4gZGV2ZWxvcG1lbnQuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jcm9zc29yaWdpbi1lcnJvciBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gICAgICB9IC8vIFJlbW92ZSBvdXIgZXZlbnQgbGlzdGVuZXJzXG5cblxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFuZGxlV2luZG93RXJyb3IpO1xuXG4gICAgICBpZiAoIWRpZENhbGwpIHtcbiAgICAgICAgLy8gU29tZXRoaW5nIHdlbnQgcmVhbGx5IHdyb25nLCBhbmQgb3VyIGV2ZW50IHdhcyBub3QgZGlzcGF0Y2hlZC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjczNFxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2NTg1XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgcHJvZHVjdGlvbiBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTtcbiAgICAgICAgcmV0dXJuIGludm9rZUd1YXJkZWRDYWxsYmFja1Byb2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbnZhciBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsJDEgPSBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsO1xuXG52YXIgaGFzRXJyb3IgPSBmYWxzZTtcbnZhciBjYXVnaHRFcnJvciA9IG51bGw7IC8vIFVzZWQgYnkgZXZlbnQgc3lzdGVtIHRvIGNhcHR1cmUvcmV0aHJvdyB0aGUgZmlyc3QgZXJyb3IuXG5cbnZhciBoYXNSZXRocm93RXJyb3IgPSBmYWxzZTtcbnZhciByZXRocm93RXJyb3IgPSBudWxsO1xudmFyIHJlcG9ydGVyID0ge1xuICBvbkVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgfVxufTtcbi8qKlxuICogQ2FsbCBhIGZ1bmN0aW9uIHdoaWxlIGd1YXJkaW5nIGFnYWluc3QgZXJyb3JzIHRoYXQgaGFwcGVucyB3aXRoaW4gaXQuXG4gKiBSZXR1cm5zIGFuIGVycm9yIGlmIGl0IHRocm93cywgb3RoZXJ3aXNlIG51bGwuXG4gKlxuICogSW4gcHJvZHVjdGlvbiwgdGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIHRyeS1jYXRjaC4gVGhlIHJlYXNvbiB3ZSBkb24ndFxuICogdXNlIGEgdHJ5LWNhdGNoIGRpcmVjdGx5IGlzIHNvIHRoYXQgd2UgY2FuIHN3YXAgb3V0IGEgZGlmZmVyZW50XG4gKiBpbXBsZW1lbnRhdGlvbiBpbiBERVYgbW9kZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsJDEuYXBwbHkocmVwb3J0ZXIsIGFyZ3VtZW50cyk7XG59XG4vKipcbiAqIFNhbWUgYXMgaW52b2tlR3VhcmRlZENhbGxiYWNrLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gZXJyb3IsIGl0IHN0b3Jlc1xuICogaXQgaW4gYSBnbG9iYWwgc28gaXQgY2FuIGJlIHJldGhyb3duIGJ5IGByZXRocm93Q2F1Z2h0RXJyb3JgIGxhdGVyLlxuICogVE9ETzogU2VlIGlmIGNhdWdodEVycm9yIGFuZCByZXRocm93RXJyb3IgY2FuIGJlIHVuaWZpZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhlIGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzIGZvciBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcihuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGlmIChoYXNFcnJvcikge1xuICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgIGlmICghaGFzUmV0aHJvd0Vycm9yKSB7XG4gICAgICBoYXNSZXRocm93RXJyb3IgPSB0cnVlO1xuICAgICAgcmV0aHJvd0Vycm9yID0gZXJyb3I7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIER1cmluZyBleGVjdXRpb24gb2YgZ3VhcmRlZCBmdW5jdGlvbnMgd2Ugd2lsbCBjYXB0dXJlIHRoZSBmaXJzdCBlcnJvciB3aGljaFxuICogd2Ugd2lsbCByZXRocm93IHRvIGJlIGhhbmRsZWQgYnkgdGhlIHRvcCBsZXZlbCBlcnJvciBoYW5kbGVyLlxuICovXG5cbmZ1bmN0aW9uIHJldGhyb3dDYXVnaHRFcnJvcigpIHtcbiAgaWYgKGhhc1JldGhyb3dFcnJvcikge1xuICAgIHZhciBlcnJvciA9IHJldGhyb3dFcnJvcjtcbiAgICBoYXNSZXRocm93RXJyb3IgPSBmYWxzZTtcbiAgICByZXRocm93RXJyb3IgPSBudWxsO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5mdW5jdGlvbiBoYXNDYXVnaHRFcnJvcigpIHtcbiAgcmV0dXJuIGhhc0Vycm9yO1xufVxuZnVuY3Rpb24gY2xlYXJDYXVnaHRFcnJvcigpIHtcbiAgaWYgKGhhc0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gY2F1Z2h0RXJyb3I7XG4gICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICBjYXVnaHRFcnJvciA9IG51bGw7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiY2xlYXJDYXVnaHRFcnJvciB3YXMgY2FsbGVkIGJ1dCBubyBlcnJvciB3YXMgY2FwdHVyZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBgUmVhY3RJbnN0YW5jZU1hcGAgbWFpbnRhaW5zIGEgbWFwcGluZyBmcm9tIGEgcHVibGljIGZhY2luZyBzdGF0ZWZ1bFxuICogaW5zdGFuY2UgKGtleSkgYW5kIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiAodmFsdWUpLiBUaGlzIGFsbG93cyBwdWJsaWNcbiAqIG1ldGhvZHMgdG8gYWNjZXB0IHRoZSB1c2VyIGZhY2luZyBpbnN0YW5jZSBhcyBhbiBhcmd1bWVudCBhbmQgbWFwIHRoZW0gYmFja1xuICogdG8gaW50ZXJuYWwgbWV0aG9kcy5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBtb2R1bGUgaXMgY3VycmVudGx5IHNoYXJlZCBhbmQgYXNzdW1lZCB0byBiZSBzdGF0ZWxlc3MuXG4gKiBJZiB0aGlzIGJlY29tZXMgYW4gYWN0dWFsIE1hcCwgdGhhdCB3aWxsIGJyZWFrLlxuICovXG5mdW5jdGlvbiBnZXQoa2V5KSB7XG4gIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxzO1xufVxuZnVuY3Rpb24gaGFzKGtleSkge1xuICByZXR1cm4ga2V5Ll9yZWFjdEludGVybmFscyAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAga2V5Ll9yZWFjdEludGVybmFscyA9IHZhbHVlO1xufVxuXG4vLyBEb24ndCBjaGFuZ2UgdGhlc2UgdHdvIHZhbHVlcy4gVGhleSdyZSB1c2VkIGJ5IFJlYWN0IERldiBUb29scy5cbnZhciBOb0ZsYWdzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIFBlcmZvcm1lZFdvcmsgPVxuLyogICAgICAgICAgICAgICAgKi9cbjE7IC8vIFlvdSBjYW4gY2hhbmdlIHRoZSByZXN0IChhbmQgYWRkIG1vcmUpLlxuXG52YXIgUGxhY2VtZW50ID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBVcGRhdGUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG40O1xudmFyIFBsYWNlbWVudEFuZFVwZGF0ZSA9XG4vKiAgICAgICAgICAgKi9cbjY7XG52YXIgRGVsZXRpb24gPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuODtcbnZhciBDb250ZW50UmVzZXQgPVxuLyogICAgICAgICAgICAgICAgICovXG4xNjtcbnZhciBDYWxsYmFjayA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4zMjtcbnZhciBEaWRDYXB0dXJlID1cbi8qICAgICAgICAgICAgICAgICAgICovXG42NDtcbnZhciBSZWYgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4xMjg7XG52YXIgU25hcHNob3QgPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuMjU2O1xudmFyIFBhc3NpdmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbjUxMjsgLy8gVE9ETyAoZWZmZWN0cykgUmVtb3ZlIHRoaXMgYml0IG9uY2UgdGhlIG5ldyByZWNvbmNpbGVyIGlzIHN5bmNlZCB0byB0aGUgb2xkLlxuXG52YXIgUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2ID1cbi8qICAgICAqL1xuODE5MjtcbnZhciBIeWRyYXRpbmcgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4xMDI0O1xudmFyIEh5ZHJhdGluZ0FuZFVwZGF0ZSA9XG4vKiAgICAgICAgICAgKi9cbjEwMjg7IC8vIFBhc3NpdmUgJiBVcGRhdGUgJiBDYWxsYmFjayAmIFJlZiAmIFNuYXBzaG90XG5cbnZhciBMaWZlY3ljbGVFZmZlY3RNYXNrID1cbi8qICAgICAgICAgICovXG45MzI7IC8vIFVuaW9uIG9mIGFsbCBob3N0IGVmZmVjdHNcblxudmFyIEhvc3RFZmZlY3RNYXNrID1cbi8qICAgICAgICAgICAgICAgKi9cbjIwNDc7IC8vIFRoZXNlIGFyZSBub3QgcmVhbGx5IHNpZGUgZWZmZWN0cywgYnV0IHdlIHN0aWxsIHJldXNlIHRoaXMgZmllbGQuXG5cbnZhciBJbmNvbXBsZXRlID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4yMDQ4O1xudmFyIFNob3VsZENhcHR1cmUgPVxuLyogICAgICAgICAgICAgICAgKi9cbjQwOTY7XG52YXIgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSA9XG4vKiAqL1xuMTYzODQ7IC8vIFN0YXRpYyB0YWdzIGRlc2NyaWJlIGFzcGVjdHMgb2YgYSBmaWJlciB0aGF0IGFyZSBub3Qgc3BlY2lmaWMgdG8gYSByZW5kZXIsXG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xuZnVuY3Rpb24gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikge1xuICB2YXIgbm9kZSA9IGZpYmVyO1xuICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBmaWJlcjtcblxuICBpZiAoIWZpYmVyLmFsdGVybmF0ZSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSwgdGhpcyBtaWdodCBiZSBhIG5ldyB0cmVlIHRoYXQgaXNuJ3QgaW5zZXJ0ZWRcbiAgICAvLyB5ZXQuIElmIGl0IGlzLCB0aGVuIGl0IHdpbGwgaGF2ZSBhIHBlbmRpbmcgaW5zZXJ0aW9uIGVmZmVjdCBvbiBpdC5cbiAgICB2YXIgbmV4dE5vZGUgPSBub2RlO1xuXG4gICAgZG8ge1xuICAgICAgbm9kZSA9IG5leHROb2RlO1xuXG4gICAgICBpZiAoKG5vZGUuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24gb3IgaW4tcHJvZ3Jlc3MgaHlkcmF0aW9uLiBUaGUgbmVhcmVzdCBwb3NzaWJsZVxuICAgICAgICAvLyBtb3VudGVkIGZpYmVyIGlzIHRoZSBwYXJlbnQgYnV0IHdlIG5lZWQgdG8gY29udGludWUgdG8gZmlndXJlIG91dFxuICAgICAgICAvLyBpZiB0aGF0IG9uZSBpcyBzdGlsbCBtb3VudGVkLlxuICAgICAgICBuZWFyZXN0TW91bnRlZCA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0Tm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5leHROb2RlKTtcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAobm9kZS5yZXR1cm4pIHtcbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAobm9kZS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyB3YXMgYSBuZXN0ZWQgSG9zdFJvb3Qgd2hlbiB1c2VkIHdpdGhcbiAgICAvLyByZW5kZXJDb250YWluZXJJbnRvU3VidHJlZS5cbiAgICByZXR1cm4gbmVhcmVzdE1vdW50ZWQ7XG4gIH0gLy8gSWYgd2UgZGlkbid0IGhpdCB0aGUgcm9vdCwgdGhhdCBtZWFucyB0aGF0IHdlJ3JlIGluIGFuIGRpc2Nvbm5lY3RlZCB0cmVlXG4gIC8vIHRoYXQgaGFzIGJlZW4gdW5tb3VudGVkLlxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBzdXNwZW5zZVN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKGZpYmVyKSB7XG4gIHJldHVybiBmaWJlci50YWcgPT09IEhvc3RSb290ID8gZmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gOiBudWxsO1xufVxuZnVuY3Rpb24gaXNGaWJlck1vdW50ZWQoZmliZXIpIHtcbiAgcmV0dXJuIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcjtcbn1cbmZ1bmN0aW9uIGlzTW91bnRlZChjb21wb25lbnQpIHtcbiAge1xuICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgb3duZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgdmFyIG93bmVyRmliZXIgPSBvd25lcjtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoIWluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcikge1xuICAgICAgICBlcnJvcignJXMgaXMgYWNjZXNzaW5nIGlzTW91bnRlZCBpbnNpZGUgaXRzIHJlbmRlcigpIGZ1bmN0aW9uLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZShvd25lckZpYmVyLnR5cGUpIHx8ICdBIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gIGlmICghZmliZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRJc01vdW50ZWQoZmliZXIpIHtcbiAgaWYgKCEoZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChmaWJlcikge1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmICghYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGVuIHdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiBpdCBpcyBtb3VudGVkLlxuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpO1xuXG4gICAgaWYgKCEobmVhcmVzdE1vdW50ZWQgIT09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gZmliZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBmaWJlcjtcbiAgfSAvLyBJZiB3ZSBoYXZlIHR3byBwb3NzaWJsZSBicmFuY2hlcywgd2UnbGwgd2FsayBiYWNrd2FyZHMgdXAgdG8gdGhlIHJvb3RcbiAgLy8gdG8gc2VlIHdoYXQgcGF0aCB0aGUgcm9vdCBwb2ludHMgdG8uIE9uIHRoZSB3YXkgd2UgbWF5IGhpdCBvbmUgb2YgdGhlXG4gIC8vIHNwZWNpYWwgY2FzZXMgYW5kIHdlJ2xsIGRlYWwgd2l0aCB0aGVtLlxuXG5cbiAgdmFyIGEgPSBmaWJlcjtcbiAgdmFyIGIgPSBhbHRlcm5hdGU7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgcGFyZW50QSA9IGEucmV0dXJuO1xuXG4gICAgaWYgKHBhcmVudEEgPT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIGF0IHRoZSByb290LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIHBhcmVudEIgPSBwYXJlbnRBLmFsdGVybmF0ZTtcblxuICAgIGlmIChwYXJlbnRCID09PSBudWxsKSB7XG4gICAgICAvLyBUaGVyZSBpcyBubyBhbHRlcm5hdGUuIFRoaXMgaXMgYW4gdW51c3VhbCBjYXNlLiBDdXJyZW50bHksIGl0IG9ubHlcbiAgICAgIC8vIGhhcHBlbnMgd2hlbiBhIFN1c3BlbnNlIGNvbXBvbmVudCBpcyBoaWRkZW4uIEFuIGV4dHJhIGZyYWdtZW50IGZpYmVyXG4gICAgICAvLyBpcyBpbnNlcnRlZCBpbiBiZXR3ZWVuIHRoZSBTdXNwZW5zZSBmaWJlciBhbmQgaXRzIGNoaWxkcmVuLiBTa2lwXG4gICAgICAvLyBvdmVyIHRoaXMgZXh0cmEgZnJhZ21lbnQgZmliZXIgYW5kIHByb2NlZWQgdG8gdGhlIG5leHQgcGFyZW50LlxuICAgICAgdmFyIG5leHRQYXJlbnQgPSBwYXJlbnRBLnJldHVybjtcblxuICAgICAgaWYgKG5leHRQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgYSA9IGIgPSBuZXh0UGFyZW50O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gSWYgdGhlcmUncyBubyBwYXJlbnQsIHdlJ3JlIGF0IHRoZSByb290LlxuXG5cbiAgICAgIGJyZWFrO1xuICAgIH0gLy8gSWYgYm90aCBjb3BpZXMgb2YgdGhlIHBhcmVudCBmaWJlciBwb2ludCB0byB0aGUgc2FtZSBjaGlsZCwgd2UgY2FuXG4gICAgLy8gYXNzdW1lIHRoYXQgdGhlIGNoaWxkIGlzIGN1cnJlbnQuIFRoaXMgaGFwcGVucyB3aGVuIHdlIGJhaWxvdXQgb24gbG93XG4gICAgLy8gcHJpb3JpdHk6IHRoZSBiYWlsZWQgb3V0IGZpYmVyJ3MgY2hpbGQgcmV1c2VzIHRoZSBjdXJyZW50IGNoaWxkLlxuXG5cbiAgICBpZiAocGFyZW50QS5jaGlsZCA9PT0gcGFyZW50Qi5jaGlsZCkge1xuICAgICAgdmFyIGNoaWxkID0gcGFyZW50QS5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICAgIGlmIChjaGlsZCA9PT0gYSkge1xuICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBBIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgICBhc3NlcnRJc01vdW50ZWQocGFyZW50QSk7XG4gICAgICAgICAgcmV0dXJuIGZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkID09PSBiKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEIgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gYWx0ZXJuYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgfSAvLyBXZSBzaG91bGQgbmV2ZXIgaGF2ZSBhbiBhbHRlcm5hdGUgZm9yIGFueSBtb3VudGluZyBub2RlLiBTbyB0aGUgb25seVxuICAgICAgLy8gd2F5IHRoaXMgY291bGQgcG9zc2libHkgaGFwcGVuIGlzIGlmIHRoaXMgd2FzIHVubW91bnRlZCwgaWYgYXQgYWxsLlxuXG5cbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGEucmV0dXJuICE9PSBiLnJldHVybikge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVyIG9mIEEgYW5kIHRoZSByZXR1cm4gcG9pbnRlciBvZiBCIHBvaW50IHRvIGRpZmZlcmVudFxuICAgICAgLy8gZmliZXJzLiBXZSBhc3N1bWUgdGhhdCByZXR1cm4gcG9pbnRlcnMgbmV2ZXIgY3Jpc3MtY3Jvc3MsIHNvIEEgbXVzdFxuICAgICAgLy8gYmVsb25nIHRvIHRoZSBjaGlsZCBzZXQgb2YgQS5yZXR1cm4sIGFuZCBCIG11c3QgYmVsb25nIHRvIHRoZSBjaGlsZFxuICAgICAgLy8gc2V0IG9mIEIucmV0dXJuLlxuICAgICAgYSA9IHBhcmVudEE7XG4gICAgICBiID0gcGFyZW50QjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVycyBwb2ludCB0byB0aGUgc2FtZSBmaWJlci4gV2UnbGwgaGF2ZSB0byB1c2UgdGhlXG4gICAgICAvLyBkZWZhdWx0LCBzbG93IHBhdGg6IHNjYW4gdGhlIGNoaWxkIHNldHMgb2YgZWFjaCBwYXJlbnQgYWx0ZXJuYXRlIHRvIHNlZVxuICAgICAgLy8gd2hpY2ggY2hpbGQgYmVsb25ncyB0byB3aGljaCBzZXQuXG4gICAgICAvL1xuICAgICAgLy8gU2VhcmNoIHBhcmVudCBBJ3MgY2hpbGQgc2V0XG4gICAgICB2YXIgZGlkRmluZENoaWxkID0gZmFsc2U7XG4gICAgICB2YXIgX2NoaWxkID0gcGFyZW50QS5jaGlsZDtcblxuICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgIC8vIFNlYXJjaCBwYXJlbnQgQidzIGNoaWxkIHNldFxuICAgICAgICBfY2hpbGQgPSBwYXJlbnRCLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChfY2hpbGQpIHtcbiAgICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkNoaWxkIHdhcyBub3QgZm91bmQgaW4gZWl0aGVyIHBhcmVudCBzZXQuIFRoaXMgaW5kaWNhdGVzIGEgYnVnIGluIFJlYWN0IHJlbGF0ZWQgdG8gdGhlIHJldHVybiBwb2ludGVyLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKGEuYWx0ZXJuYXRlID09PSBiKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJSZXR1cm4gZmliZXJzIHNob3VsZCBhbHdheXMgYmUgZWFjaCBvdGhlcnMnIGFsdGVybmF0ZXMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gSWYgdGhlIHJvb3QgaXMgbm90IGEgaG9zdCBjb250YWluZXIsIHdlJ3JlIGluIGEgZGlzY29ubmVjdGVkIHRyZWUuIEkuZS5cbiAgLy8gdW5tb3VudGVkLlxuXG5cbiAgaWYgKCEoYS50YWcgPT09IEhvc3RSb290KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhLnN0YXRlTm9kZS5jdXJyZW50ID09PSBhKSB7XG4gICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgIHJldHVybiBmaWJlcjtcbiAgfSAvLyBPdGhlcndpc2UgQiBoYXMgdG8gYmUgY3VycmVudCBicmFuY2guXG5cblxuICByZXR1cm4gYWx0ZXJuYXRlO1xufVxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXIocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcblxuICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuXG5cbiAgdmFyIG5vZGUgPSBjdXJyZW50UGFyZW50O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAoIW5vZGUuc2libGluZykge1xuICAgICAgaWYgKCFub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9IC8vIEZsb3cgbmVlZHMgdGhlIHJldHVybiBudWxsIGhlcmUsIGJ1dCBFU0xpbnQgY29tcGxhaW5zIGFib3V0IGl0LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5yZWFjaGFibGVcblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzKHBhcmVudCkge1xuICB2YXIgY3VycmVudFBhcmVudCA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKHBhcmVudCk7XG5cbiAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTmV4dCB3ZSdsbCBkcmlsbCBkb3duIHRoaXMgY29tcG9uZW50IHRvIGZpbmQgdGhlIGZpcnN0IEhvc3RDb21wb25lbnQvVGV4dC5cblxuXG4gIHZhciBub2RlID0gY3VycmVudFBhcmVudDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgJiYgbm9kZS50YWcgIT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICBpZiAoIW5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH0gLy8gRmxvdyBuZWVkcyB0aGUgcmV0dXJuIG51bGwgaGVyZSwgYnV0IEVTTGludCBjb21wbGFpbnMgYWJvdXQgaXQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBkb2VzRmliZXJDb250YWluKHBhcmVudEZpYmVyLCBjaGlsZEZpYmVyKSB7XG4gIHZhciBub2RlID0gY2hpbGRGaWJlcjtcbiAgdmFyIHBhcmVudEZpYmVyQWx0ZXJuYXRlID0gcGFyZW50RmliZXIuYWx0ZXJuYXRlO1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudEZpYmVyIHx8IG5vZGUgPT09IHBhcmVudEZpYmVyQWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uO1xuZnVuY3Rpb24gc2V0QXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihmbikge1xuICBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uID0gZm47XG59XG52YXIgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb247XG5mdW5jdGlvbiBzZXRBdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihmbikge1xuICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiA9IGZuO1xufVxudmFyIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eTtcbmZ1bmN0aW9uIHNldEF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShmbikge1xuICBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkgPSBmbjtcbn1cbnZhciBhdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eTtcbmZ1bmN0aW9uIHNldEF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KGZuKSB7XG4gIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5ID0gZm47XG59IC8vIFRPRE86IFVwZ3JhZGUgdGhpcyBkZWZpbml0aW9uIG9uY2Ugd2UncmUgb24gYSBuZXdlciB2ZXJzaW9uIG9mIEZsb3cgdGhhdFxudmFyIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSBmYWxzZTsgLy8gVGhlIHF1ZXVlIG9mIGRpc2NyZXRlIGV2ZW50cyB0byBiZSByZXBsYXllZC5cblxudmFyIHF1ZXVlZERpc2NyZXRlRXZlbnRzID0gW107IC8vIEluZGljYXRlcyBpZiBhbnkgY29udGludW91cyBldmVudCB0YXJnZXRzIGFyZSBub24tbnVsbCBmb3IgZWFybHkgYmFpbG91dC5cbi8vIGlmIHRoZSBsYXN0IHRhcmdldCB3YXMgZGVoeWRyYXRlZC5cblxudmFyIHF1ZXVlZEZvY3VzID0gbnVsbDtcbnZhciBxdWV1ZWREcmFnID0gbnVsbDtcbnZhciBxdWV1ZWRNb3VzZSA9IG51bGw7IC8vIEZvciBwb2ludGVyIGV2ZW50cyB0aGVyZSBjYW4gYmUgb25lIGxhdGVzdCBldmVudCBwZXIgcG9pbnRlcklkLlxuXG52YXIgcXVldWVkUG9pbnRlcnMgPSBuZXcgTWFwKCk7XG52YXIgcXVldWVkUG9pbnRlckNhcHR1cmVzID0gbmV3IE1hcCgpOyAvLyBXZSBjb3VsZCBjb25zaWRlciByZXBsYXlpbmcgc2VsZWN0aW9uY2hhbmdlIGFuZCB0b3VjaG1vdmVzIHRvby5cblxudmFyIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cyA9IFtdO1xuZnVuY3Rpb24gaGFzUXVldWVkRGlzY3JldGVFdmVudHMoKSB7XG4gIHJldHVybiBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGggPiAwO1xufVxudmFyIGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cyA9IFsnbW91c2Vkb3duJywgJ21vdXNldXAnLCAndG91Y2hjYW5jZWwnLCAndG91Y2hlbmQnLCAndG91Y2hzdGFydCcsICdhdXhjbGljaycsICdkYmxjbGljaycsICdwb2ludGVyY2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJ1cCcsICdkcmFnZW5kJywgJ2RyYWdzdGFydCcsICdkcm9wJywgJ2NvbXBvc2l0aW9uZW5kJywgJ2NvbXBvc2l0aW9uc3RhcnQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdpbnB1dCcsICd0ZXh0SW5wdXQnLCAvLyBJbnRlbnRpb25hbGx5IGNhbWVsQ2FzZVxuJ2NvcHknLCAnY3V0JywgJ3Bhc3RlJywgJ2NsaWNrJywgJ2NoYW5nZScsICdjb250ZXh0bWVudScsICdyZXNldCcsICdzdWJtaXQnXTtcbmZ1bmN0aW9uIGlzUmVwbGF5YWJsZURpc2NyZXRlRXZlbnQoZXZlbnRUeXBlKSB7XG4gIHJldHVybiBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMuaW5kZXhPZihldmVudFR5cGUpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICByZXR1cm4ge1xuICAgIGJsb2NrZWRPbjogYmxvY2tlZE9uLFxuICAgIGRvbUV2ZW50TmFtZTogZG9tRXZlbnROYW1lLFxuICAgIGV2ZW50U3lzdGVtRmxhZ3M6IGV2ZW50U3lzdGVtRmxhZ3MgfCBJU19SRVBMQVlFRCxcbiAgICBuYXRpdmVFdmVudDogbmF0aXZlRXZlbnQsXG4gICAgdGFyZ2V0Q29udGFpbmVyczogW3RhcmdldENvbnRhaW5lcl1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcXVldWVEaXNjcmV0ZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBxdWV1ZWRFdmVudCA9IGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gIHF1ZXVlZERpc2NyZXRlRXZlbnRzLnB1c2gocXVldWVkRXZlbnQpO1xufSAvLyBSZXNldHMgdGhlIHJlcGxheWluZyBmb3IgdGhpcyB0eXBlIG9mIGNvbnRpbnVvdXMgZXZlbnQgdG8gbm8gZXZlbnQuXG5cbmZ1bmN0aW9uIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIHF1ZXVlZEZvY3VzID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZHJhZ2VudGVyJzpcbiAgICBjYXNlICdkcmFnbGVhdmUnOlxuICAgICAgcXVldWVkRHJhZyA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgY2FzZSAnbW91c2VvdXQnOlxuICAgICAgcXVldWVkTW91c2UgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgY2FzZSAncG9pbnRlcm91dCc6XG4gICAgICB7XG4gICAgICAgIHZhciBwb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJzLmRlbGV0ZShwb2ludGVySWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuICAgICAge1xuICAgICAgICB2YXIgX3BvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmRlbGV0ZShfcG9pbnRlcklkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChleGlzdGluZ1F1ZXVlZEV2ZW50LCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICBpZiAoZXhpc3RpbmdRdWV1ZWRFdmVudCA9PT0gbnVsbCB8fCBleGlzdGluZ1F1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50ICE9PSBuYXRpdmVFdmVudCkge1xuICAgIHZhciBxdWV1ZWRFdmVudCA9IGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG5cbiAgICBpZiAoYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICB2YXIgX2ZpYmVyMiA9IGdldEluc3RhbmNlRnJvbU5vZGUoYmxvY2tlZE9uKTtcblxuICAgICAgaWYgKF9maWJlcjIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQXR0ZW1wdCB0byBpbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhpcyB0YXJnZXQuXG4gICAgICAgIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKF9maWJlcjIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWV1ZWRFdmVudDtcbiAgfSAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgcXVldWVkIHRoaXMgZXhhY3QgZXZlbnQsIHRoZW4gaXQncyBiZWNhdXNlXG4gIC8vIHRoZSBkaWZmZXJlbnQgZXZlbnQgc3lzdGVtcyBoYXZlIGRpZmZlcmVudCBET00gZXZlbnQgbGlzdGVuZXJzLlxuICAvLyBXZSBjYW4gYWNjdW11bGF0ZSB0aGUgZmxhZ3MsIGFuZCB0aGUgdGFyZ2V0Q29udGFpbmVycywgYW5kXG4gIC8vIHN0b3JlIGEgc2luZ2xlIGV2ZW50IHRvIGJlIHJlcGxheWVkLlxuXG5cbiAgZXhpc3RpbmdRdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzIHw9IGV2ZW50U3lzdGVtRmxhZ3M7XG4gIHZhciB0YXJnZXRDb250YWluZXJzID0gZXhpc3RpbmdRdWV1ZWRFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gIGlmICh0YXJnZXRDb250YWluZXIgIT09IG51bGwgJiYgdGFyZ2V0Q29udGFpbmVycy5pbmRleE9mKHRhcmdldENvbnRhaW5lcikgPT09IC0xKSB7XG4gICAgdGFyZ2V0Q29udGFpbmVycy5wdXNoKHRhcmdldENvbnRhaW5lcik7XG4gIH1cblxuICByZXR1cm4gZXhpc3RpbmdRdWV1ZWRFdmVudDtcbn1cblxuZnVuY3Rpb24gcXVldWVJZkNvbnRpbnVvdXNFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICAvLyBUaGVzZSBzZXQgcmVsYXRlZFRhcmdldCB0byBudWxsIGJlY2F1c2UgdGhlIHJlcGxheWVkIGV2ZW50IHdpbGwgYmUgdHJlYXRlZCBhcyBpZiB3ZVxuICAvLyBtb3ZlZCBmcm9tIG91dHNpZGUgdGhlIHdpbmRvdyAobm8gdGFyZ2V0KSBvbnRvIHRoZSB0YXJnZXQgb25jZSBpdCBoeWRyYXRlcy5cbiAgLy8gSW5zdGVhZCBvZiBtdXRhdGluZyB3ZSBjb3VsZCBjbG9uZSB0aGUgZXZlbnQuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICB7XG4gICAgICAgIHZhciBmb2N1c0V2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZEZvY3VzID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRGb2N1cywgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgZm9jdXNFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZHJhZ2VudGVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGRyYWdFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWREcmFnID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWREcmFnLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBkcmFnRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBtb3VzZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZE1vdXNlID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRNb3VzZSwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbW91c2VFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgcG9pbnRlckV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHZhciBwb2ludGVySWQgPSBwb2ludGVyRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVycy5zZXQocG9pbnRlcklkLCBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZFBvaW50ZXJzLmdldChwb2ludGVySWQpIHx8IG51bGwsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIHBvaW50ZXJFdmVudCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wb2ludGVyRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgdmFyIF9wb2ludGVySWQyID0gX3BvaW50ZXJFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5zZXQoX3BvaW50ZXJJZDIsIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkUG9pbnRlckNhcHR1cmVzLmdldChfcG9pbnRlcklkMikgfHwgbnVsbCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgX3BvaW50ZXJFdmVudCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn0gLy8gQ2hlY2sgaWYgdGhpcyB0YXJnZXQgaXMgdW5ibG9ja2VkLiBSZXR1cm5zIHRydWUgaWYgaXQncyB1bmJsb2NrZWQuXG5cbmZ1bmN0aW9uIGF0dGVtcHRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldChxdWV1ZWRUYXJnZXQpIHtcbiAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBzaGFyZXMgYSBsb3Qgb2YgbG9naWMgd2l0aCBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50LlxuICAvLyBUcnkgdG8gdW5pZnkgdGhlbS4gSXQncyBhIGJpdCB0cmlja3kgc2luY2UgaXQgd291bGQgcmVxdWlyZSB0d28gcmV0dXJuXG4gIC8vIHZhbHVlcy5cbiAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShxdWV1ZWRUYXJnZXQudGFyZ2V0KTtcblxuICBpZiAodGFyZ2V0SW5zdCAhPT0gbnVsbCkge1xuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0SW5zdCk7XG5cbiAgICBpZiAobmVhcmVzdE1vdW50ZWQgIT09IG51bGwpIHtcbiAgICAgIHZhciB0YWcgPSBuZWFyZXN0TW91bnRlZC50YWc7XG5cbiAgICAgIGlmICh0YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIGJsb2NrZWQgb24gaHlkcmF0aW5nIHRoaXMgYm91bmRhcnkuXG4gICAgICAgICAgLy8gSW5jcmVhc2UgaXRzIHByaW9yaXR5LlxuICAgICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBpbnN0YW5jZTtcbiAgICAgICAgICBhdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eShxdWV1ZWRUYXJnZXQubGFuZVByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KHF1ZXVlZFRhcmdldC5wcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBnZXRDb250YWluZXJGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpOyAvLyBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBpbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2ZcbiAgICAgICAgICAvLyBhIHJvb3Qgb3RoZXIgdGhhbiBzeW5jLlxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRXZlbnQpIHtcbiAgaWYgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0YXJnZXRDb250YWluZXJzID0gcXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICB3aGlsZSAodGFyZ2V0Q29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHRhcmdldENvbnRhaW5lciA9IHRhcmdldENvbnRhaW5lcnNbMF07XG4gICAgdmFyIG5leHRCbG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KHF1ZXVlZEV2ZW50LmRvbUV2ZW50TmFtZSwgcXVldWVkRXZlbnQuZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBxdWV1ZWRFdmVudC5uYXRpdmVFdmVudCk7XG5cbiAgICBpZiAobmV4dEJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC4gVHJ5IGFnYWluIGxhdGVyLlxuICAgICAgdmFyIF9maWJlcjMgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKG5leHRCbG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyMyAhPT0gbnVsbCkge1xuICAgICAgICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihfZmliZXIzKTtcbiAgICAgIH1cblxuICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbmV4dEJsb2NrZWRPbjtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIFRoaXMgdGFyZ2V0IGNvbnRhaW5lciB3YXMgc3VjY2Vzc2Z1bGx5IGRpc3BhdGNoZWQuIFRyeSB0aGUgbmV4dC5cblxuXG4gICAgdGFyZ2V0Q29udGFpbmVycy5zaGlmdCgpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcChxdWV1ZWRFdmVudCwga2V5LCBtYXApIHtcbiAgaWYgKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRXZlbnQpKSB7XG4gICAgbWFwLmRlbGV0ZShrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxheVVuYmxvY2tlZEV2ZW50cygpIHtcbiAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IGZhbHNlOyAvLyBGaXJzdCByZXBsYXkgZGlzY3JldGUgZXZlbnRzLlxuXG4gIHdoaWxlIChxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIG5leHREaXNjcmV0ZUV2ZW50ID0gcXVldWVkRGlzY3JldGVFdmVudHNbMF07XG5cbiAgICBpZiAobmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLlxuICAgICAgLy8gSW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mIHRoaXMgYm91bmRhcnkgdG8gdW5ibG9ja1xuICAgICAgLy8gdGhlIG5leHQgZGlzY3JldGUgZXZlbnQuXG4gICAgICB2YXIgX2ZpYmVyNCA9IGdldEluc3RhbmNlRnJvbU5vZGUobmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uKTtcblxuICAgICAgaWYgKF9maWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihfZmliZXI0KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBuZXh0RGlzY3JldGVFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gICAgd2hpbGUgKHRhcmdldENvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHRhcmdldENvbnRhaW5lciA9IHRhcmdldENvbnRhaW5lcnNbMF07XG4gICAgICB2YXIgbmV4dEJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQobmV4dERpc2NyZXRlRXZlbnQuZG9tRXZlbnROYW1lLCBuZXh0RGlzY3JldGVFdmVudC5ldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5leHREaXNjcmV0ZUV2ZW50Lm5hdGl2ZUV2ZW50KTtcblxuICAgICAgaWYgKG5leHRCbG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC4gVHJ5IGFnYWluIGxhdGVyLlxuICAgICAgICBuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gVGhpcyB0YXJnZXQgY29udGFpbmVyIHdhcyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4gVHJ5IHRoZSBuZXh0LlxuXG5cbiAgICAgIHRhcmdldENvbnRhaW5lcnMuc2hpZnQoKTtcbiAgICB9XG5cbiAgICBpZiAobmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAvLyBXZSd2ZSBzdWNjZXNzZnVsbHkgcmVwbGF5ZWQgdGhlIGZpcnN0IGV2ZW50LiBMZXQncyB0cnkgdGhlIG5leHQgb25lLlxuICAgICAgcXVldWVkRGlzY3JldGVFdmVudHMuc2hpZnQoKTtcbiAgICB9XG4gIH0gLy8gTmV4dCByZXBsYXkgYW55IGNvbnRpbnVvdXMgZXZlbnRzLlxuXG5cbiAgaWYgKHF1ZXVlZEZvY3VzICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRm9jdXMpKSB7XG4gICAgcXVldWVkRm9jdXMgPSBudWxsO1xuICB9XG5cbiAgaWYgKHF1ZXVlZERyYWcgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWREcmFnKSkge1xuICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICB9XG5cbiAgaWYgKHF1ZXVlZE1vdXNlICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkTW91c2UpKSB7XG4gICAgcXVldWVkTW91c2UgPSBudWxsO1xuICB9XG5cbiAgcXVldWVkUG9pbnRlcnMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xuICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRXZlbnQsIHVuYmxvY2tlZCkge1xuICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBudWxsO1xuXG4gICAgaWYgKCFoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0KSB7XG4gICAgICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gdHJ1ZTsgLy8gU2NoZWR1bGUgYSBjYWxsYmFjayB0byBhdHRlbXB0IHJlcGxheWluZyBhcyBtYW55IGV2ZW50cyBhcyBhcmVcbiAgICAgIC8vIG5vdyB1bmJsb2NrZWQuIFRoaXMgZmlyc3QgbWlnaHQgbm90IGFjdHVhbGx5IGJlIHVuYmxvY2tlZCB5ZXQuXG4gICAgICAvLyBXZSBjb3VsZCBjaGVjayBpdCBlYXJseSB0byBhdm9pZCBzY2hlZHVsaW5nIGFuIHVubmVjZXNzYXJ5IGNhbGxiYWNrLlxuXG4gICAgICBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksIHJlcGxheVVuYmxvY2tlZEV2ZW50cyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJldHJ5SWZCbG9ja2VkT24odW5ibG9ja2VkKSB7XG4gIC8vIE1hcmsgYW55dGhpbmcgdGhhdCB3YXMgYmxvY2tlZCBvbiB0aGlzIGFzIG5vIGxvbmdlciBibG9ja2VkXG4gIC8vIGFuZCBlbGlnaWJsZSBmb3IgYSByZXBsYXkuXG4gIGlmIChxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZERpc2NyZXRlRXZlbnRzWzBdLCB1bmJsb2NrZWQpOyAvLyBUaGlzIGlzIGEgZXhwb25lbnRpYWwgc2VhcmNoIGZvciBlYWNoIGJvdW5kYXJ5IHRoYXQgY29tbWl0cy4gSSB0aGluayBpdCdzXG4gICAgLy8gd29ydGggaXQgYmVjYXVzZSB3ZSBleHBlY3QgdmVyeSBmZXcgZGlzY3JldGUgZXZlbnRzIHRvIHF1ZXVlIHVwIGFuZCBvbmNlXG4gICAgLy8gd2UgYXJlIGFjdHVhbGx5IGZ1bGx5IHVuYmxvY2tlZCBpdCB3aWxsIGJlIGZhc3QgdG8gcmVwbGF5IHRoZW0uXG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVldWVkRXZlbnQgPSBxdWV1ZWREaXNjcmV0ZUV2ZW50c1tpXTtcblxuICAgICAgaWYgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHF1ZXVlZEZvY3VzICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEZvY3VzLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgaWYgKHF1ZXVlZERyYWcgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRHJhZywgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIGlmIChxdWV1ZWRNb3VzZSAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRNb3VzZSwgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIHZhciB1bmJsb2NrID0gZnVuY3Rpb24gKHF1ZXVlZEV2ZW50KSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKTtcbiAgfTtcblxuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKHVuYmxvY2spO1xuICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaCh1bmJsb2NrKTtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aDsgX2krKykge1xuICAgIHZhciBxdWV1ZWRUYXJnZXQgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbX2ldO1xuXG4gICAgaWYgKHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIG5leHRFeHBsaWNpdFRhcmdldCA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1swXTtcblxuICAgIGlmIChuZXh0RXhwbGljaXRUYXJnZXQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLlxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dGVtcHRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldChuZXh0RXhwbGljaXRUYXJnZXQpO1xuXG4gICAgICBpZiAobmV4dEV4cGxpY2l0VGFyZ2V0LmJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXZSdyZSB1bmJsb2NrZWQuXG4gICAgICAgIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgRGlzY3JldGVFdmVudCA9IDA7XG52YXIgVXNlckJsb2NraW5nRXZlbnQgPSAxO1xudmFyIENvbnRpbnVvdXNFdmVudCA9IDI7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBtYXBwaW5nIG9mIHN0YW5kYXJkIHZlbmRvciBwcmVmaXhlcyB1c2luZyB0aGUgZGVmaW5lZCBzdHlsZSBwcm9wZXJ0eSBhbmQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVQcm9wXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIG1ha2VQcmVmaXhNYXAoc3R5bGVQcm9wLCBldmVudE5hbWUpIHtcbiAgdmFyIHByZWZpeGVzID0ge307XG4gIHByZWZpeGVzW3N0eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICBwcmVmaXhlc1snV2Via2l0JyArIHN0eWxlUHJvcF0gPSAnd2Via2l0JyArIGV2ZW50TmFtZTtcbiAgcHJlZml4ZXNbJ01veicgKyBzdHlsZVByb3BdID0gJ21veicgKyBldmVudE5hbWU7XG4gIHJldHVybiBwcmVmaXhlcztcbn1cbi8qKlxuICogQSBsaXN0IG9mIGV2ZW50IG5hbWVzIHRvIGEgY29uZmlndXJhYmxlIGxpc3Qgb2YgdmVuZG9yIHByZWZpeGVzLlxuICovXG5cblxudmFyIHZlbmRvclByZWZpeGVzID0ge1xuICBhbmltYXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25FbmQnKSxcbiAgYW5pbWF0aW9uaXRlcmF0aW9uOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uSXRlcmF0aW9uJyksXG4gIGFuaW1hdGlvbnN0YXJ0OiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uU3RhcnQnKSxcbiAgdHJhbnNpdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnVHJhbnNpdGlvbicsICdUcmFuc2l0aW9uRW5kJylcbn07XG4vKipcbiAqIEV2ZW50IG5hbWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0ZWN0ZWQgYW5kIHByZWZpeGVkIChpZiBhcHBsaWNhYmxlKS5cbiAqL1xuXG52YXIgcHJlZml4ZWRFdmVudE5hbWVzID0ge307XG4vKipcbiAqIEVsZW1lbnQgdG8gY2hlY2sgZm9yIHByZWZpeGVzIG9uLlxuICovXG5cbnZhciBzdHlsZSA9IHt9O1xuLyoqXG4gKiBCb290c3RyYXAgaWYgYSBET00gZXhpc3RzLlxuICovXG5cbmlmIChjYW5Vc2VET00pIHtcbiAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTsgLy8gT24gc29tZSBwbGF0Zm9ybXMsIGluIHBhcnRpY3VsYXIgc29tZSByZWxlYXNlcyBvZiBBbmRyb2lkIDQueCxcbiAgLy8gdGhlIHVuLXByZWZpeGVkIFwiYW5pbWF0aW9uXCIgYW5kIFwidHJhbnNpdGlvblwiIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlXG4gIC8vIHN0eWxlIG9iamVjdCBidXQgdGhlIGV2ZW50cyB0aGF0IGZpcmUgd2lsbCBzdGlsbCBiZSBwcmVmaXhlZCwgc28gd2UgbmVlZFxuICAvLyB0byBjaGVjayBpZiB0aGUgdW4tcHJlZml4ZWQgZXZlbnRzIGFyZSB1c2FibGUsIGFuZCBpZiBub3QgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgbWFwLlxuXG4gIGlmICghKCdBbmltYXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25lbmQuYW5pbWF0aW9uO1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uO1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25zdGFydC5hbmltYXRpb247XG4gIH0gLy8gU2FtZSBhcyBhYm92ZVxuXG5cbiAgaWYgKCEoJ1RyYW5zaXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb247XG4gIH1cbn1cbi8qKlxuICogQXR0ZW1wdHMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHZlbmRvciBwcmVmaXhlZCBldmVudCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgaWYgKHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdO1xuICB9IGVsc2UgaWYgKCF2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIGV2ZW50TmFtZTtcbiAgfVxuXG4gIHZhciBwcmVmaXhNYXAgPSB2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdO1xuXG4gIGZvciAodmFyIHN0eWxlUHJvcCBpbiBwcmVmaXhNYXApIHtcbiAgICBpZiAocHJlZml4TWFwLmhhc093blByb3BlcnR5KHN0eWxlUHJvcCkgJiYgc3R5bGVQcm9wIGluIHN0eWxlKSB7XG4gICAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0gPSBwcmVmaXhNYXBbc3R5bGVQcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXZlbnROYW1lO1xufVxuXG52YXIgQU5JTUFUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25lbmQnKTtcbnZhciBBTklNQVRJT05fSVRFUkFUSU9OID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbml0ZXJhdGlvbicpO1xudmFyIEFOSU1BVElPTl9TVEFSVCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25zdGFydCcpO1xudmFyIFRSQU5TSVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ3RyYW5zaXRpb25lbmQnKTtcblxudmFyIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzID0gbmV3IE1hcCgpO1xudmFyIGV2ZW50UHJpb3JpdGllcyA9IG5ldyBNYXAoKTsgLy8gV2Ugc3RvcmUgbW9zdCBvZiB0aGUgZXZlbnRzIGluIHRoaXMgbW9kdWxlIGluIHBhaXJzIG9mIHR3byBzdHJpbmdzIHNvIHdlIGNhbiByZS11c2Vcbi8vIHRoZSBjb2RlIHJlcXVpcmVkIHRvIGFwcGx5IHRoZSBzYW1lIGxvZ2ljIGZvciBldmVudCBwcmlvcml0aXphdGlvbiBhbmQgdGhhdCBvZiB0aGVcbi8vIFNpbXBsZUV2ZW50UGx1Z2luLiBUaGlzIGNvbXBsaWNhdGVzIHRoaW5ncyBzbGlnaHRseSwgYnV0IHRoZSBhaW0gaXMgdG8gcmVkdWNlIGNvZGVcbi8vIGR1cGxpY2F0aW9uIChmb3Igd2hpY2ggdGhlcmUgd291bGQgYmUgcXVpdGUgYSBiaXQpLiBGb3IgdGhlIGV2ZW50cyB0aGF0IGFyZSBub3QgbmVlZGVkXG4vLyBmb3IgdGhlIFNpbXBsZUV2ZW50UGx1Z2luIChvdGhlckRpc2NyZXRlRXZlbnRzKSB3ZSBwcm9jZXNzIHRoZW0gc2VwYXJhdGVseSBhcyBhblxuLy8gYXJyYXkgb2YgdG9wIGxldmVsIGV2ZW50cy5cbi8vIExhc3RseSwgd2UgaWdub3JlIHByZXR0aWVyIHNvIHdlIGNhbiBrZWVwIHRoZSBmb3JtYXR0aW5nIHNhbmUuXG4vLyBwcmV0dGllci1pZ25vcmVcblxudmFyIGRpc2NyZXRlRXZlbnRQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydjYW5jZWwnLCAnY2FuY2VsJywgJ2NsaWNrJywgJ2NsaWNrJywgJ2Nsb3NlJywgJ2Nsb3NlJywgJ2NvbnRleHRtZW51JywgJ2NvbnRleHRNZW51JywgJ2NvcHknLCAnY29weScsICdjdXQnLCAnY3V0JywgJ2F1eGNsaWNrJywgJ2F1eENsaWNrJywgJ2RibGNsaWNrJywgJ2RvdWJsZUNsaWNrJywgLy8gQ2FyZWZ1bCFcbidkcmFnZW5kJywgJ2RyYWdFbmQnLCAnZHJhZ3N0YXJ0JywgJ2RyYWdTdGFydCcsICdkcm9wJywgJ2Ryb3AnLCAnZm9jdXNpbicsICdmb2N1cycsIC8vIENhcmVmdWwhXG4nZm9jdXNvdXQnLCAnYmx1cicsIC8vIENhcmVmdWwhXG4naW5wdXQnLCAnaW5wdXQnLCAnaW52YWxpZCcsICdpbnZhbGlkJywgJ2tleWRvd24nLCAna2V5RG93bicsICdrZXlwcmVzcycsICdrZXlQcmVzcycsICdrZXl1cCcsICdrZXlVcCcsICdtb3VzZWRvd24nLCAnbW91c2VEb3duJywgJ21vdXNldXAnLCAnbW91c2VVcCcsICdwYXN0ZScsICdwYXN0ZScsICdwYXVzZScsICdwYXVzZScsICdwbGF5JywgJ3BsYXknLCAncG9pbnRlcmNhbmNlbCcsICdwb2ludGVyQ2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJEb3duJywgJ3BvaW50ZXJ1cCcsICdwb2ludGVyVXAnLCAncmF0ZWNoYW5nZScsICdyYXRlQ2hhbmdlJywgJ3Jlc2V0JywgJ3Jlc2V0JywgJ3NlZWtlZCcsICdzZWVrZWQnLCAnc3VibWl0JywgJ3N1Ym1pdCcsICd0b3VjaGNhbmNlbCcsICd0b3VjaENhbmNlbCcsICd0b3VjaGVuZCcsICd0b3VjaEVuZCcsICd0b3VjaHN0YXJ0JywgJ3RvdWNoU3RhcnQnLCAndm9sdW1lY2hhbmdlJywgJ3ZvbHVtZUNoYW5nZSddO1xudmFyIG90aGVyRGlzY3JldGVFdmVudHMgPSBbJ2NoYW5nZScsICdzZWxlY3Rpb25jaGFuZ2UnLCAndGV4dElucHV0JywgJ2NvbXBvc2l0aW9uc3RhcnQnLCAnY29tcG9zaXRpb25lbmQnLCAnY29tcG9zaXRpb251cGRhdGUnXTtcblxuXG52YXIgdXNlckJsb2NraW5nUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnZHJhZycsICdkcmFnJywgJ2RyYWdlbnRlcicsICdkcmFnRW50ZXInLCAnZHJhZ2V4aXQnLCAnZHJhZ0V4aXQnLCAnZHJhZ2xlYXZlJywgJ2RyYWdMZWF2ZScsICdkcmFnb3ZlcicsICdkcmFnT3ZlcicsICdtb3VzZW1vdmUnLCAnbW91c2VNb3ZlJywgJ21vdXNlb3V0JywgJ21vdXNlT3V0JywgJ21vdXNlb3ZlcicsICdtb3VzZU92ZXInLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlck1vdmUnLCAncG9pbnRlcm91dCcsICdwb2ludGVyT3V0JywgJ3BvaW50ZXJvdmVyJywgJ3BvaW50ZXJPdmVyJywgJ3Njcm9sbCcsICdzY3JvbGwnLCAndG9nZ2xlJywgJ3RvZ2dsZScsICd0b3VjaG1vdmUnLCAndG91Y2hNb3ZlJywgJ3doZWVsJywgJ3doZWVsJ107IC8vIHByZXR0aWVyLWlnbm9yZVxuXG52YXIgY29udGludW91c1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2Fib3J0JywgJ2Fib3J0JywgQU5JTUFUSU9OX0VORCwgJ2FuaW1hdGlvbkVuZCcsIEFOSU1BVElPTl9JVEVSQVRJT04sICdhbmltYXRpb25JdGVyYXRpb24nLCBBTklNQVRJT05fU1RBUlQsICdhbmltYXRpb25TdGFydCcsICdjYW5wbGF5JywgJ2NhblBsYXknLCAnY2FucGxheXRocm91Z2gnLCAnY2FuUGxheVRocm91Z2gnLCAnZHVyYXRpb25jaGFuZ2UnLCAnZHVyYXRpb25DaGFuZ2UnLCAnZW1wdGllZCcsICdlbXB0aWVkJywgJ2VuY3J5cHRlZCcsICdlbmNyeXB0ZWQnLCAnZW5kZWQnLCAnZW5kZWQnLCAnZXJyb3InLCAnZXJyb3InLCAnZ290cG9pbnRlcmNhcHR1cmUnLCAnZ290UG9pbnRlckNhcHR1cmUnLCAnbG9hZCcsICdsb2FkJywgJ2xvYWRlZGRhdGEnLCAnbG9hZGVkRGF0YScsICdsb2FkZWRtZXRhZGF0YScsICdsb2FkZWRNZXRhZGF0YScsICdsb2Fkc3RhcnQnLCAnbG9hZFN0YXJ0JywgJ2xvc3Rwb2ludGVyY2FwdHVyZScsICdsb3N0UG9pbnRlckNhcHR1cmUnLCAncGxheWluZycsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3Byb2dyZXNzJywgJ3NlZWtpbmcnLCAnc2Vla2luZycsICdzdGFsbGVkJywgJ3N0YWxsZWQnLCAnc3VzcGVuZCcsICdzdXNwZW5kJywgJ3RpbWV1cGRhdGUnLCAndGltZVVwZGF0ZScsIFRSQU5TSVRJT05fRU5ELCAndHJhbnNpdGlvbkVuZCcsICd3YWl0aW5nJywgJ3dhaXRpbmcnXTtcbi8qKlxuICogVHVybnNcbiAqIFsnYWJvcnQnLCAuLi5dXG4gKlxuICogaW50b1xuICpcbiAqIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzID0gbmV3IE1hcChbXG4gKiAgIFsnYWJvcnQnLCAnb25BYm9ydCddLFxuICogXSk7XG4gKlxuICogYW5kIHJlZ2lzdGVycyB0aGVtLlxuICovXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKGV2ZW50VHlwZXMsIHByaW9yaXR5KSB7XG4gIC8vIEFzIHRoZSBldmVudCB0eXBlcyBhcmUgaW4gcGFpcnMgb2YgdHdvLCB3ZSBuZWVkIHRvIGl0ZXJhdGVcbiAgLy8gdGhyb3VnaCBpbiB0d29zLiBUaGUgZXZlbnRzIGFyZSBpbiBwYWlycyBvZiB0d28gdG8gc2F2ZSBjb2RlXG4gIC8vIGFuZCBpbXByb3ZlIGluaXQgcGVyZiBvZiBwcm9jZXNzaW5nIHRoaXMgYXJyYXksIGFzIGl0IHdpbGxcbiAgLy8gcmVzdWx0IGluIGZhciBmZXdlciBvYmplY3QgYWxsb2NhdGlvbnMgYW5kIHByb3BlcnR5IGFjY2Vzc2VzXG4gIC8vIGlmIHdlIG9ubHkgdXNlIHRocmVlIGFycmF5cyB0byBwcm9jZXNzIGFsbCB0aGUgY2F0ZWdvcmllcyBvZlxuICAvLyBpbnN0ZWFkIG9mIHR1cGxlcy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudFR5cGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHRvcEV2ZW50ID0gZXZlbnRUeXBlc1tpXTtcbiAgICB2YXIgZXZlbnQgPSBldmVudFR5cGVzW2kgKyAxXTtcbiAgICB2YXIgY2FwaXRhbGl6ZWRFdmVudCA9IGV2ZW50WzBdLnRvVXBwZXJDYXNlKCkgKyBldmVudC5zbGljZSgxKTtcbiAgICB2YXIgcmVhY3ROYW1lID0gJ29uJyArIGNhcGl0YWxpemVkRXZlbnQ7XG4gICAgZXZlbnRQcmlvcml0aWVzLnNldCh0b3BFdmVudCwgcHJpb3JpdHkpO1xuICAgIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLnNldCh0b3BFdmVudCwgcmVhY3ROYW1lKTtcbiAgICByZWdpc3RlclR3b1BoYXNlRXZlbnQocmVhY3ROYW1lLCBbdG9wRXZlbnRdKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRFdmVudFByaW9yaXRpZXMoZXZlbnRUeXBlcywgcHJpb3JpdHkpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZXZlbnRQcmlvcml0aWVzLnNldChldmVudFR5cGVzW2ldLCBwcmlvcml0eSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRQcmlvcml0eUZvclBsdWdpblN5c3RlbShkb21FdmVudE5hbWUpIHtcbiAgdmFyIHByaW9yaXR5ID0gZXZlbnRQcmlvcml0aWVzLmdldChkb21FdmVudE5hbWUpOyAvLyBEZWZhdWx0IHRvIGEgQ29udGludW91c0V2ZW50LiBOb3RlOiB3ZSBtaWdodFxuICAvLyB3YW50IHRvIHdhcm4gaWYgd2UgY2FuJ3QgZGV0ZWN0IHRoZSBwcmlvcml0eVxuICAvLyBmb3IgdGhlIGV2ZW50LlxuXG4gIHJldHVybiBwcmlvcml0eSA9PT0gdW5kZWZpbmVkID8gQ29udGludW91c0V2ZW50IDogcHJpb3JpdHk7XG59XG5mdW5jdGlvbiByZWdpc3RlclNpbXBsZUV2ZW50cygpIHtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoZGlzY3JldGVFdmVudFBhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIERpc2NyZXRlRXZlbnQpO1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyh1c2VyQmxvY2tpbmdQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luLCBVc2VyQmxvY2tpbmdFdmVudCk7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKGNvbnRpbnVvdXNQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luLCBDb250aW51b3VzRXZlbnQpO1xuICBzZXRFdmVudFByaW9yaXRpZXMob3RoZXJEaXNjcmV0ZUV2ZW50cywgRGlzY3JldGVFdmVudCk7XG59XG5cbnZhciBTY2hlZHVsZXJfbm93ID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdztcblxue1xuICAvLyBQcm92aWRlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2Ugd2hlbiBwcm9kdWN0aW9uK3Byb2ZpbGluZyBidW5kbGUgb2YgZS5nLlxuICAvLyByZWFjdC1kb20gaXMgdXNlZCB3aXRoIHByb2R1Y3Rpb24gKG5vbi1wcm9maWxpbmcpIGJ1bmRsZSBvZlxuICAvLyBzY2hlZHVsZXIvdHJhY2luZ1xuICBpZiAoISh0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmICE9IG51bGwgJiYgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ICE9IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSXQgaXMgbm90IHN1cHBvcnRlZCB0byBydW4gdGhlIHByb2ZpbGluZyB2ZXJzaW9uIG9mIGEgcmVuZGVyZXIgKGZvciBleGFtcGxlLCBgcmVhY3QtZG9tL3Byb2ZpbGluZ2ApIHdpdGhvdXQgYWxzbyByZXBsYWNpbmcgdGhlIGBzY2hlZHVsZXIvdHJhY2luZ2AgbW9kdWxlIHdpdGggYHNjaGVkdWxlci90cmFjaW5nLXByb2ZpbGluZ2AuIFlvdXIgYnVuZGxlciBtaWdodCBoYXZlIGEgc2V0dGluZyBmb3IgYWxpYXNpbmcgYm90aCBtb2R1bGVzLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9wcm9maWxpbmdcIiApO1xuICAgIH1cbiAgfVxufVxuLy8gYXNjZW5kaW5nIG51bWJlcnMgc28gd2UgY2FuIGNvbXBhcmUgdGhlbSBsaWtlIG51bWJlcnMuIFRoZXkgc3RhcnQgYXQgOTAgdG9cbi8vIGF2b2lkIGNsYXNoaW5nIHdpdGggU2NoZWR1bGVyJ3MgcHJpb3JpdGllcy5cblxudmFyIEltbWVkaWF0ZVByaW9yaXR5ID0gOTk7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSA5ODtcbnZhciBOb3JtYWxQcmlvcml0eSA9IDk3O1xudmFyIExvd1ByaW9yaXR5ID0gOTY7XG52YXIgSWRsZVByaW9yaXR5ID0gOTU7IC8vIE5vUHJpb3JpdHkgaXMgdGhlIGFic2VuY2Ugb2YgcHJpb3JpdHkuIEFsc28gUmVhY3Qtb25seS5cblxudmFyIE5vUHJpb3JpdHkgPSA5MDtcbnZhciBpbml0aWFsVGltZU1zID0gU2NoZWR1bGVyX25vdygpOyAvLyBJZiB0aGUgaW5pdGlhbCB0aW1lc3RhbXAgaXMgcmVhc29uYWJseSBzbWFsbCwgdXNlIFNjaGVkdWxlcidzIGBub3dgIGRpcmVjdGx5LlxuXG52YXIgU3luY0xhbmVQcmlvcml0eSA9IDE1O1xudmFyIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5ID0gMTQ7XG52YXIgSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDEzO1xudmFyIElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHkgPSAxMjtcbnZhciBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSAxMTtcbnZhciBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHkgPSAxMDtcbnZhciBEZWZhdWx0SHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gOTtcbnZhciBEZWZhdWx0TGFuZVByaW9yaXR5ID0gODtcbnZhciBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHkgPSA3O1xudmFyIFRyYW5zaXRpb25Qcmlvcml0eSA9IDY7XG52YXIgUmV0cnlMYW5lUHJpb3JpdHkgPSA1O1xudmFyIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDQ7XG52YXIgSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDM7XG52YXIgSWRsZUxhbmVQcmlvcml0eSA9IDI7XG52YXIgT2Zmc2NyZWVuTGFuZVByaW9yaXR5ID0gMTtcbnZhciBOb0xhbmVQcmlvcml0eSA9IDA7XG52YXIgVG90YWxMYW5lcyA9IDMxO1xudmFyIE5vTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBOb0xhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIFN5bmNMYW5lID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgU3luY0JhdGNoZWRMYW5lID1cbi8qICAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICovXG40O1xudmFyIElucHV0RGlzY3JldGVMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjI0O1xudmFyIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICovXG4zMjtcbnZhciBJbnB1dENvbnRpbnVvdXNMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICovXG4xOTI7XG52YXIgRGVmYXVsdEh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAqL1xuMjU2O1xudmFyIERlZmF1bHRMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMzU4NDtcbnZhciBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAqL1xuNDA5NjtcbnZhciBUcmFuc2l0aW9uTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG40MTg2MTEyO1xudmFyIFJldHJ5TGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjYyOTE0NTYwO1xudmFyIFNvbWVSZXRyeUxhbmUgPVxuLyogICAgICAgICAgICAgICAgICAqL1xuMzM1NTQ0MzI7XG52YXIgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAqL1xuNjcxMDg4NjQ7XG52YXIgTm9uSWRsZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjEzNDIxNzcyNztcbnZhciBJZGxlSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICAgICovXG4xMzQyMTc3Mjg7XG52YXIgSWRsZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuODA1MzA2MzY4O1xudmFyIE9mZnNjcmVlbkxhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjEwNzM3NDE4MjQ7XG52YXIgTm9UaW1lc3RhbXAgPSAtMTtcbmZ1bmN0aW9uIHNldEN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkobmV3TGFuZVByaW9yaXR5KSB7XG59IC8vIFwiUmVnaXN0ZXJzXCIgdXNlZCB0byBcInJldHVyblwiIG11bHRpcGxlIHZhbHVlc1xuLy8gVXNlZCBieSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyBhbmQgZ2V0TmV4dExhbmVzOlxuXG52YXIgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuXG5mdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhsYW5lcykge1xuICBpZiAoKFN5bmNMYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTeW5jTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfVxuXG4gIGlmICgoU3luY0JhdGNoZWRMYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU3luY0JhdGNoZWRMYW5lO1xuICB9XG5cbiAgaWYgKChJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgaW5wdXREaXNjcmV0ZUxhbmVzID0gSW5wdXREaXNjcmV0ZUxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlucHV0RGlzY3JldGVMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gaW5wdXREaXNjcmV0ZUxhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgaW5wdXRDb250aW51b3VzTGFuZXMgPSBJbnB1dENvbnRpbnVvdXNMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpbnB1dENvbnRpbnVvdXNMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpbnB1dENvbnRpbnVvdXNMYW5lcztcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBEZWZhdWx0SHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIERlZmF1bHRIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGRlZmF1bHRMYW5lcyA9IERlZmF1bHRMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChkZWZhdWx0TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGRlZmF1bHRMYW5lcztcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eTtcbiAgICByZXR1cm4gVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgdHJhbnNpdGlvbkxhbmVzID0gVHJhbnNpdGlvbkxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKHRyYW5zaXRpb25MYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gVHJhbnNpdGlvblByaW9yaXR5O1xuICAgIHJldHVybiB0cmFuc2l0aW9uTGFuZXM7XG4gIH1cblxuICB2YXIgcmV0cnlMYW5lcyA9IFJldHJ5TGFuZXMgJiBsYW5lcztcblxuICBpZiAocmV0cnlMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gUmV0cnlMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIHJldHJ5TGFuZXM7XG4gIH1cblxuICBpZiAobGFuZXMgJiBTZWxlY3RpdmVIeWRyYXRpb25MYW5lKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgSWRsZUh5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJZGxlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpZGxlTGFuZXMgPSBJZGxlTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaWRsZUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJZGxlTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpZGxlTGFuZXM7XG4gIH1cblxuICBpZiAoKE9mZnNjcmVlbkxhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IE9mZnNjcmVlbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gT2Zmc2NyZWVuTGFuZTtcbiAgfVxuXG4gIHtcbiAgICBlcnJvcignU2hvdWxkIGhhdmUgZm91bmQgbWF0Y2hpbmcgbGFuZXMuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gIH0gLy8gVGhpcyBzaG91bGRuJ3QgYmUgcmVhY2hhYmxlLCBidXQgYXMgYSBmYWxsYmFjaywgcmV0dXJuIHRoZSBlbnRpcmUgYml0bWFzay5cblxuXG4gIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcbiAgcmV0dXJuIGxhbmVzO1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZXJQcmlvcml0eVRvTGFuZVByaW9yaXR5KHNjaGVkdWxlclByaW9yaXR5TGV2ZWwpIHtcbiAgc3dpdGNoIChzY2hlZHVsZXJQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBTeW5jTGFuZVByaW9yaXR5O1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgIHJldHVybiBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICAvLyBUT0RPOiBIYW5kbGUgTG93U2NoZWR1bGVyUHJpb3JpdHksIHNvbWVob3cuIE1heWJlIHRoZSBzYW1lIGxhbmUgYXMgaHlkcmF0aW9uLlxuICAgICAgcmV0dXJuIERlZmF1bHRMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlTGFuZVByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBOb0xhbmVQcmlvcml0eTtcbiAgfVxufVxuZnVuY3Rpb24gbGFuZVByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShsYW5lUHJpb3JpdHkpIHtcbiAgc3dpdGNoIChsYW5lUHJpb3JpdHkpIHtcbiAgICBjYXNlIFN5bmNMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJbW1lZGlhdGVQcmlvcml0eTtcblxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gVXNlckJsb2NraW5nUHJpb3JpdHk7XG5cbiAgICBjYXNlIERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBEZWZhdWx0TGFuZVByaW9yaXR5OlxuICAgIGNhc2UgVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5OlxuICAgIGNhc2UgVHJhbnNpdGlvblByaW9yaXR5OlxuICAgIGNhc2UgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgUmV0cnlMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gTm9ybWFsUHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJZGxlTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgT2Zmc2NyZWVuTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVQcmlvcml0eTtcblxuICAgIGNhc2UgTm9MYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gTm9Qcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIHVwZGF0ZSBwcmlvcml0eTogXCIgKyBsYW5lUHJpb3JpdHkgKyBcIi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuZnVuY3Rpb24gZ2V0TmV4dExhbmVzKHJvb3QsIHdpcExhbmVzKSB7XG4gIC8vIEVhcmx5IGJhaWxvdXQgaWYgdGhlcmUncyBubyBwZW5kaW5nIHdvcmsgbGVmdC5cbiAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuXG4gIGlmIChwZW5kaW5nTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBOb0xhbmVzO1xuICB9XG5cbiAgdmFyIG5leHRMYW5lcyA9IE5vTGFuZXM7XG4gIHZhciBuZXh0TGFuZVByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gIHZhciBleHBpcmVkTGFuZXMgPSByb290LmV4cGlyZWRMYW5lcztcbiAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcbiAgdmFyIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lczsgLy8gQ2hlY2sgaWYgYW55IHdvcmsgaGFzIGV4cGlyZWQuXG5cbiAgaWYgKGV4cGlyZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIG5leHRMYW5lcyA9IGV4cGlyZWRMYW5lcztcbiAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTeW5jTGFuZVByaW9yaXR5O1xuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCB3b3JrIG9uIGFueSBpZGxlIHdvcmsgdW50aWwgYWxsIHRoZSBub24taWRsZSB3b3JrIGhhcyBmaW5pc2hlZCxcbiAgICAvLyBldmVuIGlmIHRoZSB3b3JrIGlzIHN1c3BlbmRlZC5cbiAgICB2YXIgbm9uSWRsZVBlbmRpbmdMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIE5vbklkbGVMYW5lcztcblxuICAgIGlmIChub25JZGxlUGVuZGluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICB2YXIgbm9uSWRsZVVuYmxvY2tlZExhbmVzID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgaWYgKG5vbklkbGVVbmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhub25JZGxlVW5ibG9ja2VkTGFuZXMpO1xuICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbm9uSWRsZVBpbmdlZExhbmVzID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIHBpbmdlZExhbmVzO1xuXG4gICAgICAgIGlmIChub25JZGxlUGluZ2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhub25JZGxlUGluZ2VkTGFuZXMpO1xuICAgICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgb25seSByZW1haW5pbmcgd29yayBpcyBJZGxlLlxuICAgICAgdmFyIHVuYmxvY2tlZExhbmVzID0gcGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICBpZiAodW5ibG9ja2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXModW5ibG9ja2VkTGFuZXMpO1xuICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGluZ2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhwaW5nZWRMYW5lcyk7XG4gICAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG5leHRMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgcmVhY2hhYmxlIGlmIHdlJ3JlIHN1c3BlbmRlZFxuICAgIC8vIFRPRE86IENvbnNpZGVyIHdhcm5pbmcgaW4gdGhpcyBwYXRoIGlmIGEgZmFsbGJhY2sgdGltZXIgaXMgbm90IHNjaGVkdWxlZC5cbiAgICByZXR1cm4gTm9MYW5lcztcbiAgfSAvLyBJZiB0aGVyZSBhcmUgaGlnaGVyIHByaW9yaXR5IGxhbmVzLCB3ZSdsbCBpbmNsdWRlIHRoZW0gZXZlbiBpZiB0aGV5XG4gIC8vIGFyZSBzdXNwZW5kZWQuXG5cblxuICBuZXh0TGFuZXMgPSBwZW5kaW5nTGFuZXMgJiBnZXRFcXVhbE9ySGlnaGVyUHJpb3JpdHlMYW5lcyhuZXh0TGFuZXMpOyAvLyBJZiB3ZSdyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgYSByZW5kZXIsIHN3aXRjaGluZyBsYW5lcyB3aWxsIGludGVycnVwdFxuICAvLyBpdCBhbmQgd2UnbGwgbG9zZSBvdXIgcHJvZ3Jlc3MuIFdlIHNob3VsZCBvbmx5IGRvIHRoaXMgaWYgdGhlIG5ldyBsYW5lcyBhcmVcbiAgLy8gaGlnaGVyIHByaW9yaXR5LlxuXG4gIGlmICh3aXBMYW5lcyAhPT0gTm9MYW5lcyAmJiB3aXBMYW5lcyAhPT0gbmV4dExhbmVzICYmIC8vIElmIHdlIGFscmVhZHkgc3VzcGVuZGVkIHdpdGggYSBkZWxheSwgdGhlbiBpbnRlcnJ1cHRpbmcgaXMgZmluZS4gRG9uJ3RcbiAgLy8gYm90aGVyIHdhaXRpbmcgdW50aWwgdGhlIHJvb3QgaXMgY29tcGxldGUuXG4gICh3aXBMYW5lcyAmIHN1c3BlbmRlZExhbmVzKSA9PT0gTm9MYW5lcykge1xuICAgIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHdpcExhbmVzKTtcbiAgICB2YXIgd2lwTGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG5cbiAgICBpZiAobmV4dExhbmVQcmlvcml0eSA8PSB3aXBMYW5lUHJpb3JpdHkpIHtcbiAgICAgIHJldHVybiB3aXBMYW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBuZXh0TGFuZVByaW9yaXR5O1xuICAgIH1cbiAgfSAvLyBDaGVjayBmb3IgZW50YW5nbGVkIGxhbmVzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmF0Y2guXG4gIC8vXG4gIC8vIEEgbGFuZSBpcyBzYWlkIHRvIGJlIGVudGFuZ2xlZCB3aXRoIGFub3RoZXIgd2hlbiBpdCdzIG5vdCBhbGxvd2VkIHRvIHJlbmRlclxuICAvLyBpbiBhIGJhdGNoIHRoYXQgZG9lcyBub3QgYWxzbyBpbmNsdWRlIHRoZSBvdGhlciBsYW5lLiBUeXBpY2FsbHkgd2UgZG8gdGhpc1xuICAvLyB3aGVuIG11bHRpcGxlIHVwZGF0ZXMgaGF2ZSB0aGUgc2FtZSBzb3VyY2UsIGFuZCB3ZSBvbmx5IHdhbnQgdG8gcmVzcG9uZCB0b1xuICAvLyB0aGUgbW9zdCByZWNlbnQgZXZlbnQgZnJvbSB0aGF0IHNvdXJjZS5cbiAgLy9cbiAgLy8gTm90ZSB0aGF0IHdlIGFwcGx5IGVudGFuZ2xlbWVudHMgKmFmdGVyKiBjaGVja2luZyBmb3IgcGFydGlhbCB3b3JrIGFib3ZlLlxuICAvLyBUaGlzIG1lYW5zIHRoYXQgaWYgYSBsYW5lIGlzIGVudGFuZ2xlZCBkdXJpbmcgYW4gaW50ZXJsZWF2ZWQgZXZlbnQgd2hpbGVcbiAgLy8gaXQncyBhbHJlYWR5IHJlbmRlcmluZywgd2Ugd29uJ3QgaW50ZXJydXB0IGl0LiBUaGlzIGlzIGludGVudGlvbmFsLCBzaW5jZVxuICAvLyBlbnRhbmdsZW1lbnQgaXMgdXN1YWxseSBcImJlc3QgZWZmb3J0XCI6IHdlJ2xsIHRyeSBvdXIgYmVzdCB0byByZW5kZXIgdGhlXG4gIC8vIGxhbmVzIGluIHRoZSBzYW1lIGJhdGNoLCBidXQgaXQncyBub3Qgd29ydGggdGhyb3dpbmcgb3V0IHBhcnRpYWxseVxuICAvLyBjb21wbGV0ZWQgd29yayBpbiBvcmRlciB0byBkbyBpdC5cbiAgLy9cbiAgLy8gRm9yIHRob3NlIGV4Y2VwdGlvbnMgd2hlcmUgZW50YW5nbGVtZW50IGlzIHNlbWFudGljYWxseSBpbXBvcnRhbnQsIGxpa2VcbiAgLy8gdXNlTXV0YWJsZVNvdXJjZSwgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHBhcnRpYWwgd29yayBhdCB0aGVcbiAgLy8gdGltZSB3ZSBhcHBseSB0aGUgZW50YW5nbGVtZW50LlxuXG5cbiAgdmFyIGVudGFuZ2xlZExhbmVzID0gcm9vdC5lbnRhbmdsZWRMYW5lcztcblxuICBpZiAoZW50YW5nbGVkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgICB2YXIgbGFuZXMgPSBuZXh0TGFuZXMgJiBlbnRhbmdsZWRMYW5lcztcblxuICAgIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgbmV4dExhbmVzIHw9IGVudGFuZ2xlbWVudHNbaW5kZXhdO1xuICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRMYW5lcztcbn1cbmZ1bmN0aW9uIGdldE1vc3RSZWNlbnRFdmVudFRpbWUocm9vdCwgbGFuZXMpIHtcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBtb3N0UmVjZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICB2YXIgZXZlbnRUaW1lID0gZXZlbnRUaW1lc1tpbmRleF07XG5cbiAgICBpZiAoZXZlbnRUaW1lID4gbW9zdFJlY2VudEV2ZW50VGltZSkge1xuICAgICAgbW9zdFJlY2VudEV2ZW50VGltZSA9IGV2ZW50VGltZTtcbiAgICB9XG5cbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxuXG4gIHJldHVybiBtb3N0UmVjZW50RXZlbnRUaW1lO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpIHtcbiAgLy8gVE9ETzogRXhwaXJhdGlvbiBoZXVyaXN0aWMgaXMgY29uc3RhbnQgcGVyIGxhbmUsIHNvIGNvdWxkIHVzZSBhIG1hcC5cbiAgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobGFuZSk7XG4gIHZhciBwcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuXG4gIGlmIChwcmlvcml0eSA+PSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHkpIHtcbiAgICAvLyBVc2VyIGludGVyYWN0aW9ucyBzaG91bGQgZXhwaXJlIHNsaWdodGx5IG1vcmUgcXVpY2tseS5cbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgaXMgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbnN0YW50IGFzIGluIFNjaGVkdWxlci5qcy4gV2hlblxuICAgIC8vIHdlIG1hZGUgaXQgbGFyZ2VyLCBhIHByb2R1Y3QgbWV0cmljIGluIHd3dyByZWdyZXNzZWQsIHN1Z2dlc3RpbmcgdGhlcmUnc1xuICAgIC8vIGEgdXNlciBpbnRlcmFjdGlvbiB0aGF0J3MgYmVpbmcgc3RhcnZlZCBieSBhIHNlcmllcyBvZiBzeW5jaHJvbm91c1xuICAgIC8vIHVwZGF0ZXMuIElmIHRoYXQgdGhlb3J5IGlzIGNvcnJlY3QsIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZVxuICAgIC8vIHN0YXJ2YXRpb24uIEhvd2V2ZXIsIHRoaXMgc2NlbmFyaW8gc3VwcG9ydHMgdGhlIGlkZWEgdGhhdCBleHBpcmF0aW9uXG4gICAgLy8gdGltZXMgYXJlIGFuIGltcG9ydGFudCBzYWZlZ3VhcmQgd2hlbiBzdGFydmF0aW9uIGRvZXMgaGFwcGVuLlxuICAgIC8vXG4gICAgLy8gQWxzbyBub3RlIHRoYXQsIGluIHRoZSBjYXNlIG9mIHVzZXIgaW5wdXQgc3BlY2lmaWNhbGx5LCB0aGlzIHdpbGwgc29vbiBub1xuICAgIC8vIGxvbmdlciBiZSBhbiBpc3N1ZSBiZWNhdXNlIHdlIHBsYW4gdG8gbWFrZSB1c2VyIGlucHV0IHN5bmNocm9ub3VzIGJ5XG4gICAgLy8gZGVmYXVsdCAodW50aWwgeW91IGVudGVyIGBzdGFydFRyYW5zaXRpb25gLCBvZiBjb3Vyc2UuKVxuICAgIC8vXG4gICAgLy8gSWYgd2VyZW4ndCBwbGFubmluZyB0byBtYWtlIHRoZXNlIHVwZGF0ZXMgc3luY2hyb25vdXMgc29vbiBhbnl3YXksIElcbiAgICAvLyB3b3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgbnVtYmVyIGEgY29uZmlndXJhYmxlIHBhcmFtZXRlci5cbiAgICByZXR1cm4gY3VycmVudFRpbWUgKyAyNTA7XG4gIH0gZWxzZSBpZiAocHJpb3JpdHkgPj0gVHJhbnNpdGlvblByaW9yaXR5KSB7XG4gICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgNTAwMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBBbnl0aGluZyBpZGxlIHByaW9yaXR5IG9yIGxvd2VyIHNob3VsZCBuZXZlciBleHBpcmUuXG4gICAgcmV0dXJuIE5vVGltZXN0YW1wO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGFydmVkTGFuZXNBc0V4cGlyZWQocm9vdCwgY3VycmVudFRpbWUpIHtcbiAgLy8gVE9ETzogVGhpcyBnZXRzIGNhbGxlZCBldmVyeSB0aW1lIHdlIHlpZWxkLiBXZSBjYW4gb3B0aW1pemUgYnkgc3RvcmluZ1xuICAvLyB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lIG9uIHRoZSByb290LiBUaGVuIHVzZSB0aGF0IHRvIHF1aWNrbHkgYmFpbCBvdXRcbiAgLy8gb2YgdGhpcyBmdW5jdGlvbi5cbiAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzO1xuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7IC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgcGVuZGluZyBsYW5lcyBhbmQgY2hlY2sgaWYgd2UndmUgcmVhY2hlZCB0aGVpclxuICAvLyBleHBpcmF0aW9uIHRpbWUuIElmIHNvLCB3ZSdsbCBhc3N1bWUgdGhlIHVwZGF0ZSBpcyBiZWluZyBzdGFydmVkIGFuZCBtYXJrXG4gIC8vIGl0IGFzIGV4cGlyZWQgdG8gZm9yY2UgaXQgdG8gZmluaXNoLlxuXG4gIHZhciBsYW5lcyA9IHBlbmRpbmdMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIHZhciBleHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lc1tpbmRleF07XG5cbiAgICBpZiAoZXhwaXJhdGlvblRpbWUgPT09IE5vVGltZXN0YW1wKSB7XG4gICAgICAvLyBGb3VuZCBhIHBlbmRpbmcgbGFuZSB3aXRoIG5vIGV4cGlyYXRpb24gdGltZS4gSWYgaXQncyBub3Qgc3VzcGVuZGVkLCBvclxuICAgICAgLy8gaWYgaXQncyBwaW5nZWQsIGFzc3VtZSBpdCdzIENQVS1ib3VuZC4gQ29tcHV0ZSBhIG5ldyBleHBpcmF0aW9uIHRpbWVcbiAgICAgIC8vIHVzaW5nIHRoZSBjdXJyZW50IHRpbWUuXG4gICAgICBpZiAoKGxhbmUgJiBzdXNwZW5kZWRMYW5lcykgPT09IE5vTGFuZXMgfHwgKGxhbmUgJiBwaW5nZWRMYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgLy8gQXNzdW1lcyB0aW1lc3RhbXBzIGFyZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuXG4gICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWUpIHtcbiAgICAgIC8vIFRoaXMgbGFuZSBleHBpcmVkXG4gICAgICByb290LmV4cGlyZWRMYW5lcyB8PSBsYW5lO1xuICAgIH1cblxuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59IC8vIFRoaXMgcmV0dXJucyB0aGUgaGlnaGVzdCBwcmlvcml0eSBwZW5kaW5nIGxhbmVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5XG5mdW5jdGlvbiBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290KSB7XG4gIHZhciBldmVyeXRoaW5nQnV0T2Zmc2NyZWVuID0gcm9vdC5wZW5kaW5nTGFuZXMgJiB+T2Zmc2NyZWVuTGFuZTtcblxuICBpZiAoZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybiBldmVyeXRoaW5nQnV0T2Zmc2NyZWVuO1xuICB9XG5cbiAgaWYgKGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gJiBPZmZzY3JlZW5MYW5lKSB7XG4gICAgcmV0dXJuIE9mZnNjcmVlbkxhbmU7XG4gIH1cblxuICByZXR1cm4gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIHJldHVybk5leHRMYW5lc1ByaW9yaXR5KCkge1xuICByZXR1cm4gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG59XG5mdW5jdGlvbiBpbmNsdWRlc05vbklkbGVXb3JrKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBOb25JZGxlTGFuZXMpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNPbmx5UmV0cmllcyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgUmV0cnlMYW5lcykgPT09IGxhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIFRyYW5zaXRpb25MYW5lcykgPT09IGxhbmVzO1xufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBhIHB1cmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgbGFuZSBmb3IgZ2l2ZW4gaW5wdXRzLlxuXG5mdW5jdGlvbiBmaW5kVXBkYXRlTGFuZShsYW5lUHJpb3JpdHksIHdpcExhbmVzKSB7XG4gIHN3aXRjaCAobGFuZVByaW9yaXR5KSB7XG4gICAgY2FzZSBOb0xhbmVQcmlvcml0eTpcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTeW5jTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNMYW5lO1xuXG4gICAgY2FzZSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBTeW5jQmF0Y2hlZExhbmU7XG5cbiAgICBjYXNlIElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKElucHV0RGlzY3JldGVMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAvLyBTaGlmdCB0byB0aGUgbmV4dCBwcmlvcml0eSBsZXZlbFxuICAgICAgICAgIHJldHVybiBmaW5kVXBkYXRlTGFuZShJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHksIHdpcExhbmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfbGFuZTtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5OlxuICAgICAge1xuICAgICAgICB2YXIgX2xhbmUyID0gcGlja0FyYml0cmFyeUxhbmUoSW5wdXRDb250aW51b3VzTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgIGlmIChfbGFuZTIgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIFNoaWZ0IHRvIHRoZSBuZXh0IHByaW9yaXR5IGxldmVsXG4gICAgICAgICAgcmV0dXJuIGZpbmRVcGRhdGVMYW5lKERlZmF1bHRMYW5lUHJpb3JpdHksIHdpcExhbmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfbGFuZTI7XG4gICAgICB9XG5cbiAgICBjYXNlIERlZmF1bHRMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZTMgPSBwaWNrQXJiaXRyYXJ5TGFuZShEZWZhdWx0TGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgIGlmIChfbGFuZTMgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIElmIGFsbCB0aGUgZGVmYXVsdCBsYW5lcyBhcmUgYWxyZWFkeSBiZWluZyB3b3JrZWQgb24sIGxvb2sgZm9yIGFcbiAgICAgICAgICAvLyBsYW5lIGluIHRoZSB0cmFuc2l0aW9uIHJhbmdlLlxuICAgICAgICAgIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgICBpZiAoX2xhbmUzID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAgIC8vIEFsbCB0aGUgdHJhbnNpdGlvbiBsYW5lcyBhcmUgdGFrZW4sIHRvby4gVGhpcyBzaG91bGQgYmUgdmVyeVxuICAgICAgICAgICAgLy8gcmFyZSwgYnV0IGFzIGEgbGFzdCByZXNvcnQsIHBpY2sgYSBkZWZhdWx0IGxhbmUuIFRoaXMgd2lsbCBoYXZlXG4gICAgICAgICAgICAvLyB0aGUgZWZmZWN0IG9mIGludGVycnVwdGluZyB0aGUgY3VycmVudCB3b3JrLWluLXByb2dyZXNzIHJlbmRlci5cbiAgICAgICAgICAgIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKERlZmF1bHRMYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lMztcbiAgICAgIH1cblxuICAgIGNhc2UgVHJhbnNpdGlvblByaW9yaXR5OiAvLyBTaG91bGQgYmUgaGFuZGxlZCBieSBmaW5kVHJhbnNpdGlvbkxhbmUgaW5zdGVhZFxuXG4gICAgY2FzZSBSZXRyeUxhbmVQcmlvcml0eTpcbiAgICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IGZpbmRSZXRyeUxhbmUgaW5zdGVhZFxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIElkbGVMYW5lUHJpb3JpdHk6XG4gICAgICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKElkbGVMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAgICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKElkbGVMYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYW5lO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgdXBkYXRlIHByaW9yaXR5OiBcIiArIGxhbmVQcmlvcml0eSArIFwiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgfVxuICB9XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIHB1cmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgbGFuZSBmb3IgZ2l2ZW4gaW5wdXRzLlxuXG5mdW5jdGlvbiBmaW5kVHJhbnNpdGlvbkxhbmUod2lwTGFuZXMsIHBlbmRpbmdMYW5lcykge1xuICAvLyBGaXJzdCBsb29rIGZvciBsYW5lcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHVuY2xhaW1lZCwgaS5lLiBoYXZlIG5vXG4gIC8vIHBlbmRpbmcgd29yay5cbiAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMgJiB+cGVuZGluZ0xhbmVzKTtcblxuICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgLy8gSWYgYWxsIGxhbmVzIGhhdmUgcGVuZGluZyB3b3JrLCBsb29rIGZvciBhIGxhbmUgdGhhdCBpc24ndCBjdXJyZW50bHlcbiAgICAvLyBiZWluZyB3b3JrZWQgb24uXG4gICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAvLyBJZiBldmVyeXRoaW5nIGlzIGJlaW5nIHdvcmtlZCBvbiwgcGljayBhbnkgbGFuZS4gVGhpcyBoYXMgdGhlXG4gICAgICAvLyBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHdvcmstaW4tcHJvZ3Jlc3MuXG4gICAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRSZXRyeUxhbmUod2lwTGFuZXMpIHtcbiAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgYGZpbmRVcGRhdGVMYW5lYCBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIFN1c3BlbnNlXG4gIC8vIFwicmV0cmllc1wiIFx1MjAxNCBhIHNwZWNpYWwgdXBkYXRlIHRoYXQgYXR0ZW1wdHMgdG8gZmxpcCBhIFN1c3BlbnNlIGJvdW5kYXJ5XG4gIC8vIGZyb20gaXRzIHBsYWNlaG9sZGVyIHN0YXRlIHRvIGl0cyBwcmltYXJ5L3Jlc29sdmVkIHN0YXRlLlxuICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFJldHJ5TGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoUmV0cnlMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn1cblxuZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShsYW5lcykge1xuICByZXR1cm4gbGFuZXMgJiAtbGFuZXM7XG59XG5cbmZ1bmN0aW9uIGdldExvd2VzdFByaW9yaXR5TGFuZShsYW5lcykge1xuICAvLyBUaGlzIGZpbmRzIHRoZSBtb3N0IHNpZ25pZmljYW50IG5vbi16ZXJvIGJpdC5cbiAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihsYW5lcyk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBOb0xhbmVzIDogMSA8PCBpbmRleDtcbn1cblxuZnVuY3Rpb24gZ2V0RXF1YWxPckhpZ2hlclByaW9yaXR5TGFuZXMobGFuZXMpIHtcbiAgcmV0dXJuIChnZXRMb3dlc3RQcmlvcml0eUxhbmUobGFuZXMpIDw8IDEpIC0gMTtcbn1cblxuZnVuY3Rpb24gcGlja0FyYml0cmFyeUxhbmUobGFuZXMpIHtcbiAgLy8gVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGdldHMgaW5saW5lZC4gT25seSBleGlzdHMgc28gdG8gY29tbXVuaWNhdGUgdGhhdCBpdFxuICAvLyBkb2Vzbid0IG1hdHRlciB3aGljaCBiaXQgaXMgc2VsZWN0ZWQ7IHlvdSBjYW4gcGljayBhbnkgYml0IHdpdGhvdXRcbiAgLy8gYWZmZWN0aW5nIHRoZSBhbGdvcml0aG1zIHdoZXJlIGl0cyB1c2VkLiBIZXJlIEknbSB1c2luZ1xuICAvLyBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lIGJlY2F1c2UgaXQgcmVxdWlyZXMgdGhlIGZld2VzdCBvcGVyYXRpb25zLlxuICByZXR1cm4gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShsYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpIHtcbiAgcmV0dXJuIDMxIC0gY2x6MzIobGFuZXMpO1xufVxuXG5mdW5jdGlvbiBsYW5lVG9JbmRleChsYW5lKSB7XG4gIHJldHVybiBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmUpO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlc1NvbWVMYW5lKGEsIGIpIHtcbiAgcmV0dXJuIChhICYgYikgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpc1N1YnNldE9mTGFuZXMoc2V0LCBzdWJzZXQpIHtcbiAgcmV0dXJuIChzZXQgJiBzdWJzZXQpID09PSBzdWJzZXQ7XG59XG5mdW5jdGlvbiBtZXJnZUxhbmVzKGEsIGIpIHtcbiAgcmV0dXJuIGEgfCBiO1xufVxuZnVuY3Rpb24gcmVtb3ZlTGFuZXMoc2V0LCBzdWJzZXQpIHtcbiAgcmV0dXJuIHNldCAmIH5zdWJzZXQ7XG59IC8vIFNlZW1zIHJlZHVuZGFudCwgYnV0IGl0IGNoYW5nZXMgdGhlIHR5cGUgZnJvbSBhIHNpbmdsZSBsYW5lICh1c2VkIGZvclxuLy8gdXBkYXRlcykgdG8gYSBncm91cCBvZiBsYW5lcyAodXNlZCBmb3IgZmx1c2hpbmcgd29yaykuXG5cbmZ1bmN0aW9uIGxhbmVUb0xhbmVzKGxhbmUpIHtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBoaWdoZXJQcmlvcml0eUxhbmUoYSwgYikge1xuICAvLyBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGJpdCByYW5nZXMgZGVjcmVhc2UgaW4gcHJpb3JpdHkgYXMgeW91IGdvIGxlZnQuXG4gIHJldHVybiBhICE9PSBOb0xhbmUgJiYgYSA8IGIgPyBhIDogYjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxhbmVNYXAoaW5pdGlhbCkge1xuICAvLyBJbnRlbnRpb25hbGx5IHB1c2hpbmcgb25lIGJ5IG9uZS5cbiAgLy8gaHR0cHM6Ly92OC5kZXYvYmxvZy9lbGVtZW50cy1raW5kcyNhdm9pZC1jcmVhdGluZy1ob2xlc1xuICB2YXIgbGFuZU1hcCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgVG90YWxMYW5lczsgaSsrKSB7XG4gICAgbGFuZU1hcC5wdXNoKGluaXRpYWwpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmVNYXA7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgdXBkYXRlTGFuZSwgZXZlbnRUaW1lKSB7XG4gIHJvb3QucGVuZGluZ0xhbmVzIHw9IHVwZGF0ZUxhbmU7IC8vIFRPRE86IFRoZW9yZXRpY2FsbHksIGFueSB1cGRhdGUgdG8gYW55IGxhbmUgY2FuIHVuYmxvY2sgYW55IG90aGVyIGxhbmUuIEJ1dFxuICAvLyBpdCdzIG5vdCBwcmFjdGljYWwgdG8gdHJ5IGV2ZXJ5IHNpbmdsZSBwb3NzaWJsZSBjb21iaW5hdGlvbi4gV2UgbmVlZCBhXG4gIC8vIGhldXJpc3RpYyB0byBkZWNpZGUgd2hpY2ggbGFuZXMgdG8gYXR0ZW1wdCB0byByZW5kZXIsIGFuZCBpbiB3aGljaCBiYXRjaGVzLlxuICAvLyBGb3Igbm93LCB3ZSB1c2UgdGhlIHNhbWUgaGV1cmlzdGljIGFzIGluIHRoZSBvbGQgRXhwaXJhdGlvblRpbWVzIG1vZGVsOlxuICAvLyByZXRyeSBhbnkgbGFuZSBhdCBlcXVhbCBvciBsb3dlciBwcmlvcml0eSwgYnV0IGRvbid0IHRyeSB1cGRhdGVzIGF0IGhpZ2hlclxuICAvLyBwcmlvcml0eSB3aXRob3V0IGFsc28gaW5jbHVkaW5nIHRoZSBsb3dlciBwcmlvcml0eSB1cGRhdGVzLiBUaGlzIHdvcmtzIHdlbGxcbiAgLy8gd2hlbiBjb25zaWRlcmluZyB1cGRhdGVzIGFjcm9zcyBkaWZmZXJlbnQgcHJpb3JpdHkgbGV2ZWxzLCBidXQgaXNuJ3RcbiAgLy8gc3VmZmljaWVudCBmb3IgdXBkYXRlcyB3aXRoaW4gdGhlIHNhbWUgcHJpb3JpdHksIHNpbmNlIHdlIHdhbnQgdG8gdHJlYXRcbiAgLy8gdGhvc2UgdXBkYXRlcyBhcyBwYXJhbGxlbC5cbiAgLy8gVW5zdXNwZW5kIGFueSB1cGRhdGUgYXQgZXF1YWwgb3IgbG93ZXIgcHJpb3JpdHkuXG5cbiAgdmFyIGhpZ2hlclByaW9yaXR5TGFuZXMgPSB1cGRhdGVMYW5lIC0gMTsgLy8gVHVybnMgMGIxMDAwIGludG8gMGIwMTExXG5cbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyAmPSBoaWdoZXJQcmlvcml0eUxhbmVzO1xuICByb290LnBpbmdlZExhbmVzICY9IGhpZ2hlclByaW9yaXR5TGFuZXM7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgaW5kZXggPSBsYW5lVG9JbmRleCh1cGRhdGVMYW5lKTsgLy8gV2UgY2FuIGFsd2F5cyBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdGltZXN0YW1wIGJlY2F1c2Ugd2UgcHJlZmVyIHRoZSBtb3N0XG4gIC8vIHJlY2VudCBldmVudCwgYW5kIHdlIGFzc3VtZSB0aW1lIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy5cblxuICBldmVudFRpbWVzW2luZGV4XSA9IGV2ZW50VGltZTtcbn1cbmZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIHN1c3BlbmRlZExhbmVzKSB7XG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgfD0gc3VzcGVuZGVkTGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gfnN1c3BlbmRlZExhbmVzOyAvLyBUaGUgc3VzcGVuZGVkIGxhbmVzIGFyZSBubyBsb25nZXIgQ1BVLWJvdW5kLiBDbGVhciB0aGVpciBleHBpcmF0aW9uIHRpbWVzLlxuXG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lcztcbiAgdmFyIGxhbmVzID0gc3VzcGVuZGVkTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSb290UGluZ2VkKHJvb3QsIHBpbmdlZExhbmVzLCBldmVudFRpbWUpIHtcbiAgcm9vdC5waW5nZWRMYW5lcyB8PSByb290LnN1c3BlbmRlZExhbmVzICYgcGluZ2VkTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrRGlzY3JldGVVcGRhdGVzRXhwaXJlZChyb290KSB7XG4gIHJvb3QuZXhwaXJlZExhbmVzIHw9IElucHV0RGlzY3JldGVMYW5lcyAmIHJvb3QucGVuZGluZ0xhbmVzO1xufVxuZnVuY3Rpb24gaGFzRGlzY3JldGVMYW5lcyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgSW5wdXREaXNjcmV0ZUxhbmVzKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgdXBkYXRlTGFuZSkge1xuICByb290Lm11dGFibGVSZWFkTGFuZXMgfD0gdXBkYXRlTGFuZSAmIHJvb3QucGVuZGluZ0xhbmVzO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RGaW5pc2hlZChyb290LCByZW1haW5pbmdMYW5lcykge1xuICB2YXIgbm9Mb25nZXJQZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcyAmIH5yZW1haW5pbmdMYW5lcztcbiAgcm9vdC5wZW5kaW5nTGFuZXMgPSByZW1haW5pbmdMYW5lczsgLy8gTGV0J3MgdHJ5IGV2ZXJ5dGhpbmcgYWdhaW5cblxuICByb290LnN1c3BlbmRlZExhbmVzID0gMDtcbiAgcm9vdC5waW5nZWRMYW5lcyA9IDA7XG4gIHJvb3QuZXhwaXJlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICByb290Lm11dGFibGVSZWFkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3QuZW50YW5nbGVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzOyAvLyBDbGVhciB0aGUgbGFuZXMgdGhhdCBubyBsb25nZXIgaGF2ZSBwZW5kaW5nIHdvcmtcblxuICB2YXIgbGFuZXMgPSBub0xvbmdlclBlbmRpbmdMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdID0gTm9MYW5lcztcbiAgICBldmVudFRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgZW50YW5nbGVkTGFuZXMpIHtcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBlbnRhbmdsZWRMYW5lcztcbiAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIHZhciBsYW5lcyA9IGVudGFuZ2xlZExhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZW50YW5nbGVtZW50c1tpbmRleF0gfD0gZW50YW5nbGVkTGFuZXM7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbnZhciBjbHozMiA9IE1hdGguY2x6MzIgPyBNYXRoLmNsejMyIDogY2x6MzJGYWxsYmFjazsgLy8gQ291bnQgbGVhZGluZyB6ZXJvcy4gT25seSB1c2VkIG9uIGxhbmVzLCBzbyBhc3N1bWUgaW5wdXQgaXMgYW4gaW50ZWdlci5cbi8vIEJhc2VkIG9uOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9jbHozMlxuXG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG5cbmZ1bmN0aW9uIGNsejMyRmFsbGJhY2sobGFuZXMpIHtcbiAgaWYgKGxhbmVzID09PSAwKSB7XG4gICAgcmV0dXJuIDMyO1xuICB9XG5cbiAgcmV0dXJuIDMxIC0gKGxvZyhsYW5lcykgLyBMTjIgfCAwKSB8IDA7XG59XG5cbi8vIEludGVudGlvbmFsbHkgbm90IG5hbWVkIGltcG9ydHMgYmVjYXVzZSBSb2xsdXAgd291bGQgdXNlIGR5bmFtaWMgZGlzcGF0Y2ggZm9yXG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkkMSA9IFNjaGVkdWxlci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxcbiAgICBydW5XaXRoUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5OyAvLyBUT0RPOiBjYW4gd2Ugc3RvcCBleHBvcnRpbmcgdGhlc2U/XG5cbnZhciBfZW5hYmxlZCA9IHRydWU7IC8vIFRoaXMgaXMgZXhwb3J0ZWQgaW4gRkIgYnVpbGRzIGZvciB1c2UgYnkgbGVnYWN5IEZCIGxheWVyIGluZnJhLlxuLy8gV2UnZCBsaWtlIHRvIHJlbW92ZSB0aGlzIGJ1dCBpdCdzIG5vdCBjbGVhciBpZiB0aGlzIGlzIHNhZmUuXG5cbmZ1bmN0aW9uIHNldEVuYWJsZWQoZW5hYmxlZCkge1xuICBfZW5hYmxlZCA9ICEhZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGlzRW5hYmxlZCgpIHtcbiAgcmV0dXJuIF9lbmFibGVkO1xufVxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXJXaXRoUHJpb3JpdHkodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgdmFyIGV2ZW50UHJpb3JpdHkgPSBnZXRFdmVudFByaW9yaXR5Rm9yUGx1Z2luU3lzdGVtKGRvbUV2ZW50TmFtZSk7XG4gIHZhciBsaXN0ZW5lcldyYXBwZXI7XG5cbiAgc3dpdGNoIChldmVudFByaW9yaXR5KSB7XG4gICAgY2FzZSBEaXNjcmV0ZUV2ZW50OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ0V2ZW50OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hVc2VyQmxvY2tpbmdVcGRhdGU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGludW91c0V2ZW50OlxuICAgIGRlZmF1bHQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaEV2ZW50O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJXcmFwcGVyLmJpbmQobnVsbCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaERpc2NyZXRlRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHtcbiAgICBmbHVzaERpc2NyZXRlVXBkYXRlc0lmTmVlZGVkKG5hdGl2ZUV2ZW50LnRpbWVTdGFtcCk7XG4gIH1cblxuICBkaXNjcmV0ZVVwZGF0ZXMoZGlzcGF0Y2hFdmVudCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hVc2VyQmxvY2tpbmdVcGRhdGUoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHtcbiAgICBydW5XaXRoUHJpb3JpdHkoVXNlckJsb2NraW5nUHJpb3JpdHkkMSwgZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmICghX2VuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgYWxsb3dSZXBsYXkgPSB0cnVlO1xuXG4gIHtcbiAgICAvLyBUT0RPOiByZXBsYXlpbmcgY2FwdHVyZSBwaGFzZSBldmVudHMgaXMgY3VycmVudGx5IGJyb2tlblxuICAgIC8vIGJlY2F1c2Ugd2UgdXNlZCB0byBkbyBpdCBkdXJpbmcgdG9wLWxldmVsIG5hdGl2ZSBidWJibGUgaGFuZGxlcnNcbiAgICAvLyBidXQgbm93IHdlIHVzZSBkaWZmZXJlbnQgYnViYmxlIGFuZCBjYXB0dXJlIGhhbmRsZXJzLlxuICAgIC8vIEluIGVhZ2VyIG1vZGUsIHdlIGF0dGFjaCBjYXB0dXJlIGxpc3RlbmVycyBlYXJseSwgc28gd2UgbmVlZFxuICAgIC8vIHRvIGZpbHRlciB0aGVtIG91dCB1bnRpbCB3ZSBmaXggdGhlIGxvZ2ljIHRvIGhhbmRsZSB0aGVtIGNvcnJlY3RseS5cbiAgICAvLyBUaGlzIGNvdWxkJ3ZlIGJlZW4gb3V0c2lkZSB0aGUgZmxhZyBidXQgSSBwdXQgaXQgaW5zaWRlIHRvIHJlZHVjZSByaXNrLlxuICAgIGFsbG93UmVwbGF5ID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19DQVBUVVJFX1BIQVNFKSA9PT0gMDtcbiAgfVxuXG4gIGlmIChhbGxvd1JlcGxheSAmJiBoYXNRdWV1ZWREaXNjcmV0ZUV2ZW50cygpICYmIGlzUmVwbGF5YWJsZURpc2NyZXRlRXZlbnQoZG9tRXZlbnROYW1lKSkge1xuICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIHF1ZXVlIG9mIGRpc2NyZXRlIGV2ZW50cywgYW5kIHRoaXMgaXMgYW5vdGhlciBkaXNjcmV0ZVxuICAgIC8vIGV2ZW50LCB0aGVuIHdlIGNhbid0IGRpc3BhdGNoIGl0IHJlZ2FyZGxlc3Mgb2YgaXRzIHRhcmdldCwgc2luY2UgdGhleVxuICAgIC8vIG5lZWQgdG8gZGlzcGF0Y2ggaW4gb3JkZXIuXG4gICAgcXVldWVEaXNjcmV0ZUV2ZW50KG51bGwsIC8vIEZsYWdzIHRoYXQgd2UncmUgbm90IGFjdHVhbGx5IGJsb2NrZWQgb24gYW55dGhpbmcgYXMgZmFyIGFzIHdlIGtub3cuXG4gICAgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgYmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuXG4gIGlmIChibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAvLyBXZSBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZCB0aGlzIGV2ZW50LlxuICAgIGlmIChhbGxvd1JlcGxheSkge1xuICAgICAgY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYWxsb3dSZXBsYXkpIHtcbiAgICBpZiAoaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUpKSB7XG4gICAgICAvLyBUaGlzIHRoaXMgdG8gYmUgcmVwbGF5ZWQgbGF0ZXIgb25jZSB0aGUgdGFyZ2V0IGlzIGF2YWlsYWJsZS5cbiAgICAgIHF1ZXVlRGlzY3JldGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBuZWVkIHRvIGNsZWFyIG9ubHkgaWYgd2UgZGlkbid0IHF1ZXVlIGJlY2F1c2VcbiAgICAvLyBxdWV1ZWluZyBpcyBhY2N1bW11bGF0aXZlLlxuXG5cbiAgICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IC8vIFRoaXMgaXMgbm90IHJlcGxheWFibGUgc28gd2UnbGwgaW52b2tlIGl0IGJ1dCB3aXRob3V0IGEgdGFyZ2V0LFxuICAvLyBpbiBjYXNlIHRoZSBldmVudCBzeXN0ZW0gbmVlZHMgdG8gdHJhY2UgaXQuXG5cblxuICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgbnVsbCwgdGFyZ2V0Q29udGFpbmVyKTtcbn0gLy8gQXR0ZW1wdCBkaXNwYXRjaGluZyBhbiBldmVudC4gUmV0dXJucyBhIFN1c3BlbnNlSW5zdGFuY2Ugb3IgQ29udGFpbmVyIGlmIGl0J3MgYmxvY2tlZC5cblxuZnVuY3Rpb24gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gVE9ETzogV2FybiBpZiBfZW5hYmxlZCBpcyBmYWxzZS5cbiAgdmFyIG5hdGl2ZUV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpO1xuICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAodGFyZ2V0SW5zdCAhPT0gbnVsbCkge1xuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0SW5zdCk7XG5cbiAgICBpZiAobmVhcmVzdE1vdW50ZWQgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgdHJlZSBoYXMgYmVlbiB1bm1vdW50ZWQgYWxyZWFkeS4gRGlzcGF0Y2ggd2l0aG91dCBhIHRhcmdldC5cbiAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdGFnID0gbmVhcmVzdE1vdW50ZWQudGFnO1xuXG4gICAgICBpZiAodGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBRdWV1ZSB0aGUgZXZlbnQgdG8gYmUgcmVwbGF5ZWQgbGF0ZXIuIEFib3J0IGRpc3BhdGNoaW5nIHNpbmNlIHdlXG4gICAgICAgICAgLy8gZG9uJ3Qgd2FudCB0aGlzIGV2ZW50IGRpc3BhdGNoZWQgdHdpY2UgdGhyb3VnaCB0aGUgZXZlbnQgc3lzdGVtLlxuICAgICAgICAgIC8vIFRPRE86IElmIHRoaXMgaXMgdGhlIGZpcnN0IGRpc2NyZXRlIGV2ZW50IGluIHRoZSBxdWV1ZS4gU2NoZWR1bGUgYW4gaW5jcmVhc2VkXG4gICAgICAgICAgLy8gcHJpb3JpdHkgZm9yIHRoaXMgYm91bmRhcnkuXG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9IC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgc29tZXRoaW5nIHdlbnQgd3JvbmcgYnV0IHRvIGF2b2lkIGJsb2NraW5nXG4gICAgICAgIC8vIHRoZSB3aG9sZSBzeXN0ZW0sIGRpc3BhdGNoIHRoZSBldmVudCB3aXRob3V0IGEgdGFyZ2V0LlxuICAgICAgICAvLyBUT0RPOiBXYXJuLlxuXG5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaGFwcGVucyBkdXJpbmcgYSByZXBsYXkgc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIGl0IG1pZ2h0IGJsb2NrXG4gICAgICAgICAgLy8gdGhlIHdob2xlIHN5c3RlbS5cbiAgICAgICAgICByZXR1cm4gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gdGFyZ2V0SW5zdCkge1xuICAgICAgICAvLyBJZiB3ZSBnZXQgYW4gZXZlbnQgKGV4OiBpbWcgb25sb2FkKSBiZWZvcmUgY29tbWl0dGluZyB0aGF0XG4gICAgICAgIC8vIGNvbXBvbmVudCdzIG1vdW50LCBpZ25vcmUgaXQgZm9yIG5vdyAodGhhdCBpcywgdHJlYXQgaXQgYXMgaWYgaXQgd2FzIGFuXG4gICAgICAgIC8vIGV2ZW50IG9uIGEgbm9uLVJlYWN0IHRyZWUpLiBXZSBtaWdodCBhbHNvIGNvbnNpZGVyIHF1ZXVlaW5nIGV2ZW50cyBhbmRcbiAgICAgICAgLy8gZGlzcGF0Y2hpbmcgdGhlbSBhZnRlciB0aGUgbW91bnQuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpOyAvLyBXZSdyZSBub3QgYmxvY2tlZCBvbiBhbnl0aGluZy5cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcih0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcih0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgcGFzc2l2ZSkge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH0pO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgcGFzc2l2ZSkge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB7XG4gICAgcGFzc2l2ZTogcGFzc2l2ZVxuICB9KTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG4vKipcbiAqIFRoZXNlIHZhcmlhYmxlcyBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0ZXh0IGNvbnRlbnQgb2YgYSB0YXJnZXQgbm9kZSxcbiAqIGFsbG93aW5nIGNvbXBhcmlzb24gb2YgY29udGVudCBiZWZvcmUgYW5kIGFmdGVyIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogSWRlbnRpZnkgdGhlIG5vZGUgd2hlcmUgc2VsZWN0aW9uIGN1cnJlbnRseSBiZWdpbnMsIHRoZW4gb2JzZXJ2ZVxuICogYm90aCBpdHMgdGV4dCBjb250ZW50IGFuZCBpdHMgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgRE9NLiBTaW5jZSB0aGVcbiAqIGJyb3dzZXIgbWF5IG5hdGl2ZWx5IHJlcGxhY2UgdGhlIHRhcmdldCBub2RlIGR1cmluZyBjb21wb3NpdGlvbiwgd2UgY2FuXG4gKiB1c2UgaXRzIHBvc2l0aW9uIHRvIGZpbmQgaXRzIHJlcGxhY2VtZW50LlxuICpcbiAqXG4gKi9cbnZhciByb290ID0gbnVsbDtcbnZhciBzdGFydFRleHQgPSBudWxsO1xudmFyIGZhbGxiYWNrVGV4dCA9IG51bGw7XG5mdW5jdGlvbiBpbml0aWFsaXplKG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJvb3QgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgc3RhcnRUZXh0ID0gZ2V0VGV4dCgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlc2V0KCkge1xuICByb290ID0gbnVsbDtcbiAgc3RhcnRUZXh0ID0gbnVsbDtcbiAgZmFsbGJhY2tUZXh0ID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldERhdGEoKSB7XG4gIGlmIChmYWxsYmFja1RleHQpIHtcbiAgICByZXR1cm4gZmFsbGJhY2tUZXh0O1xuICB9XG5cbiAgdmFyIHN0YXJ0O1xuICB2YXIgc3RhcnRWYWx1ZSA9IHN0YXJ0VGV4dDtcbiAgdmFyIHN0YXJ0TGVuZ3RoID0gc3RhcnRWYWx1ZS5sZW5ndGg7XG4gIHZhciBlbmQ7XG4gIHZhciBlbmRWYWx1ZSA9IGdldFRleHQoKTtcbiAgdmFyIGVuZExlbmd0aCA9IGVuZFZhbHVlLmxlbmd0aDtcblxuICBmb3IgKHN0YXJ0ID0gMDsgc3RhcnQgPCBzdGFydExlbmd0aDsgc3RhcnQrKykge1xuICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0XSAhPT0gZW5kVmFsdWVbc3RhcnRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcblxuICBmb3IgKGVuZCA9IDE7IGVuZCA8PSBtaW5FbmQ7IGVuZCsrKSB7XG4gICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRMZW5ndGggLSBlbmRdICE9PSBlbmRWYWx1ZVtlbmRMZW5ndGggLSBlbmRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgc2xpY2VUYWlsID0gZW5kID4gMSA/IDEgLSBlbmQgOiB1bmRlZmluZWQ7XG4gIGZhbGxiYWNrVGV4dCA9IGVuZFZhbHVlLnNsaWNlKHN0YXJ0LCBzbGljZVRhaWwpO1xuICByZXR1cm4gZmFsbGJhY2tUZXh0O1xufVxuZnVuY3Rpb24gZ2V0VGV4dCgpIHtcbiAgaWYgKCd2YWx1ZScgaW4gcm9vdCkge1xuICAgIHJldHVybiByb290LnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QudGV4dENvbnRlbnQ7XG59XG5cbi8qKlxuICogYGNoYXJDb2RlYCByZXByZXNlbnRzIHRoZSBhY3R1YWwgXCJjaGFyYWN0ZXIgY29kZVwiIGFuZCBpcyBzYWZlIHRvIHVzZSB3aXRoXG4gKiBgU3RyaW5nLmZyb21DaGFyQ29kZWAuIEFzIHN1Y2gsIG9ubHkga2V5cyB0aGF0IGNvcnJlc3BvbmQgdG8gcHJpbnRhYmxlXG4gKiBjaGFyYWN0ZXJzIHByb2R1Y2UgYSB2YWxpZCBgY2hhckNvZGVgLCB0aGUgb25seSBleGNlcHRpb24gdG8gdGhpcyBpcyBFbnRlci5cbiAqIFRoZSBUYWIta2V5IGlzIGNvbnNpZGVyZWQgbm9uLXByaW50YWJsZSBhbmQgZG9lcyBub3QgaGF2ZSBhIGBjaGFyQ29kZWAsXG4gKiBwcmVzdW1hYmx5IGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvZHVjZSBhIHRhYi1jaGFyYWN0ZXIgaW4gYnJvd3NlcnMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBOb3JtYWxpemVkIGBjaGFyQ29kZWAgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGNoYXJDb2RlO1xuICB2YXIga2V5Q29kZSA9IG5hdGl2ZUV2ZW50LmtleUNvZGU7XG5cbiAgaWYgKCdjaGFyQ29kZScgaW4gbmF0aXZlRXZlbnQpIHtcbiAgICBjaGFyQ29kZSA9IG5hdGl2ZUV2ZW50LmNoYXJDb2RlOyAvLyBGRiBkb2VzIG5vdCBzZXQgYGNoYXJDb2RlYCBmb3IgdGhlIEVudGVyLWtleSwgY2hlY2sgYWdhaW5zdCBga2V5Q29kZWAuXG5cbiAgICBpZiAoY2hhckNvZGUgPT09IDAgJiYga2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIGNoYXJDb2RlID0gMTM7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElFOCBkb2VzIG5vdCBpbXBsZW1lbnQgYGNoYXJDb2RlYCwgYnV0IGBrZXlDb2RlYCBoYXMgdGhlIGNvcnJlY3QgdmFsdWUuXG4gICAgY2hhckNvZGUgPSBrZXlDb2RlO1xuICB9IC8vIElFIGFuZCBFZGdlIChvbiBXaW5kb3dzKSBhbmQgQ2hyb21lIC8gU2FmYXJpIChvbiBXaW5kb3dzIGFuZCBMaW51eClcbiAgLy8gcmVwb3J0IEVudGVyIGFzIGNoYXJDb2RlIDEwIHdoZW4gY3RybCBpcyBwcmVzc2VkLlxuXG5cbiAgaWYgKGNoYXJDb2RlID09PSAxMCkge1xuICAgIGNoYXJDb2RlID0gMTM7XG4gIH0gLy8gU29tZSBub24tcHJpbnRhYmxlIGtleXMgYXJlIHJlcG9ydGVkIGluIGBjaGFyQ29kZWAvYGtleUNvZGVgLCBkaXNjYXJkIHRoZW0uXG4gIC8vIE11c3Qgbm90IGRpc2NhcmQgdGhlIChub24tKXByaW50YWJsZSBFbnRlci1rZXkuXG5cblxuICBpZiAoY2hhckNvZGUgPj0gMzIgfHwgY2hhckNvZGUgPT09IDEzKSB7XG4gICAgcmV0dXJuIGNoYXJDb2RlO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlKCkge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhIGZhY3Rvcnkgc28gdGhhdCB3ZSBoYXZlIGRpZmZlcmVudCByZXR1cm5lZCBjb25zdHJ1Y3RvcnMuXG4vLyBJZiB3ZSBoYWQgYSBzaW5nbGUgY29uc3RydWN0b3IsIGl0IHdvdWxkIGJlIG1lZ2Ftb3JwaGljIGFuZCBlbmdpbmVzIHdvdWxkIGRlb3B0LlxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEludGVyZmFjZSkge1xuICAvKipcbiAgICogU3ludGhldGljIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBieSBldmVudCBwbHVnaW5zLCB0eXBpY2FsbHkgaW4gcmVzcG9uc2UgdG8gYVxuICAgKiB0b3AtbGV2ZWwgZXZlbnQgZGVsZWdhdGlvbiBoYW5kbGVyLlxuICAgKlxuICAgKiBUaGVzZSBzeXN0ZW1zIHNob3VsZCBnZW5lcmFsbHkgdXNlIHBvb2xpbmcgdG8gcmVkdWNlIHRoZSBmcmVxdWVuY3kgb2YgZ2FyYmFnZVxuICAgKiBjb2xsZWN0aW9uLiBUaGUgc3lzdGVtIHNob3VsZCBjaGVjayBgaXNQZXJzaXN0ZW50YCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbiAgICogZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGludG8gdGhlIHBvb2wgYWZ0ZXIgYmVpbmcgZGlzcGF0Y2hlZC4gVXNlcnMgdGhhdFxuICAgKiBuZWVkIGEgcGVyc2lzdGVkIGV2ZW50IHNob3VsZCBpbnZva2UgYHBlcnNpc3RgLlxuICAgKlxuICAgKiBTeW50aGV0aWMgZXZlbnRzIChhbmQgc3ViY2xhc3NlcykgaW1wbGVtZW50IHRoZSBET00gTGV2ZWwgMyBFdmVudHMgQVBJIGJ5XG4gICAqIG5vcm1hbGl6aW5nIGJyb3dzZXIgcXVpcmtzLiBTdWJjbGFzc2VzIGRvIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGltcGxlbWVudCBhXG4gICAqIERPTSBpbnRlcmZhY2U7IGN1c3RvbSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBldmVudHMgY2FuIGFsc28gc3ViY2xhc3MgdGhpcy5cbiAgICovXG4gIGZ1bmN0aW9uIFN5bnRoZXRpY0Jhc2VFdmVudChyZWFjdE5hbWUsIHJlYWN0RXZlbnRUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICB0aGlzLl9yZWFjdE5hbWUgPSByZWFjdE5hbWU7XG4gICAgdGhpcy5fdGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gICAgdGhpcy50eXBlID0gcmVhY3RFdmVudFR5cGU7XG4gICAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcblxuICAgIGZvciAodmFyIF9wcm9wTmFtZSBpbiBJbnRlcmZhY2UpIHtcbiAgICAgIGlmICghSW50ZXJmYWNlLmhhc093blByb3BlcnR5KF9wcm9wTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBub3JtYWxpemUgPSBJbnRlcmZhY2VbX3Byb3BOYW1lXTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZSkge1xuICAgICAgICB0aGlzW19wcm9wTmFtZV0gPSBub3JtYWxpemUobmF0aXZlRXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tfcHJvcE5hbWVdID0gbmF0aXZlRXZlbnRbX3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgOiBuYXRpdmVFdmVudC5yZXR1cm5WYWx1ZSA9PT0gZmFsc2U7XG5cbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9hc3NpZ24oU3ludGhldGljQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyAkRmxvd0ZpeE1lIC0gZmxvdyBpcyBub3QgYXdhcmUgb2YgYHVua25vd25gIGluIElFXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5yZXR1cm5WYWx1ZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gICAgfSxcbiAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG5cbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyAkRmxvd0ZpeE1lIC0gZmxvdyBpcyBub3QgYXdhcmUgb2YgYHVua25vd25gIGluIElFXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5jYW5jZWxCdWJibGUgIT09ICd1bmtub3duJykge1xuICAgICAgICAvLyBUaGUgQ2hhbmdlRXZlbnRQbHVnaW4gcmVnaXN0ZXJzIGEgXCJwcm9wZXJ0eWNoYW5nZVwiIGV2ZW50IGZvclxuICAgICAgICAvLyBJRS4gVGhpcyBldmVudCBkb2VzIG5vdCBzdXBwb3J0IGJ1YmJsaW5nIG9yIGNhbmNlbGxpbmcsIGFuZFxuICAgICAgICAvLyBhbnkgcmVmZXJlbmNlcyB0byBjYW5jZWxCdWJibGUgdGhyb3cgXCJNZW1iZXIgbm90IGZvdW5kXCIuICBBXG4gICAgICAgIC8vIHR5cGVvZiBjaGVjayBvZiBcInVua25vd25cIiBjaXJjdW12ZW50cyB0aGlzIGlzc3VlIChhbmQgaXMgYWxzb1xuICAgICAgICAvLyBJRSBzcGVjaWZpYykuXG4gICAgICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2UgcmVsZWFzZSBhbGwgZGlzcGF0Y2hlZCBgU3ludGhldGljRXZlbnRgcyBhZnRlciBlYWNoIGV2ZW50IGxvb3AsIGFkZGluZ1xuICAgICAqIHRoZW0gYmFjayBpbnRvIHRoZSBwb29sLiBUaGlzIGFsbG93cyBhIHdheSB0byBob2xkIG9udG8gYSByZWZlcmVuY2UgdGhhdFxuICAgICAqIHdvbid0IGJlIGFkZGVkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICAgKi9cbiAgICBwZXJzaXN0OiBmdW5jdGlvbiAoKSB7Ly8gTW9kZXJuIGV2ZW50IHN5c3RlbSBkb2Vzbid0IHVzZSBwb29saW5nLlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhpcyBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlzIHNob3VsZCBub3QgYmUgcmVsZWFzZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBpc1BlcnNpc3RlbnQ6IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlXG4gIH0pO1xuXG4gIHJldHVybiBTeW50aGV0aWNCYXNlRXZlbnQ7XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIEV2ZW50SW50ZXJmYWNlID0ge1xuICBldmVudFBoYXNlOiAwLFxuICBidWJibGVzOiAwLFxuICBjYW5jZWxhYmxlOiAwLFxuICB0aW1lU3RhbXA6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVmYXVsdFByZXZlbnRlZDogMCxcbiAgaXNUcnVzdGVkOiAwXG59O1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRXZlbnRJbnRlcmZhY2UpO1xuXG52YXIgVUlFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIHZpZXc6IDAsXG4gIGRldGFpbDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVUlFdmVudEludGVyZmFjZSk7XG52YXIgbGFzdE1vdmVtZW50WDtcbnZhciBsYXN0TW92ZW1lbnRZO1xudmFyIGxhc3RNb3VzZUV2ZW50O1xuXG5mdW5jdGlvbiB1cGRhdGVNb3VzZU1vdmVtZW50UG9seWZpbGxTdGF0ZShldmVudCkge1xuICBpZiAoZXZlbnQgIT09IGxhc3RNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGxhc3RNb3VzZUV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdtb3VzZW1vdmUnKSB7XG4gICAgICBsYXN0TW92ZW1lbnRYID0gZXZlbnQuc2NyZWVuWCAtIGxhc3RNb3VzZUV2ZW50LnNjcmVlblg7XG4gICAgICBsYXN0TW92ZW1lbnRZID0gZXZlbnQuc2NyZWVuWSAtIGxhc3RNb3VzZUV2ZW50LnNjcmVlblk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RNb3ZlbWVudFggPSAwO1xuICAgICAgbGFzdE1vdmVtZW50WSA9IDA7XG4gICAgfVxuXG4gICAgbGFzdE1vdXNlRXZlbnQgPSBldmVudDtcbiAgfVxufVxuLyoqXG4gKiBAaW50ZXJmYWNlIE1vdXNlRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIE1vdXNlRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHNjcmVlblg6IDAsXG4gIHNjcmVlblk6IDAsXG4gIGNsaWVudFg6IDAsXG4gIGNsaWVudFk6IDAsXG4gIHBhZ2VYOiAwLFxuICBwYWdlWTogMCxcbiAgY3RybEtleTogMCxcbiAgc2hpZnRLZXk6IDAsXG4gIGFsdEtleTogMCxcbiAgbWV0YUtleTogMCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICBidXR0b246IDAsXG4gIGJ1dHRvbnM6IDAsXG4gIHJlbGF0ZWRUYXJnZXQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0ID09PSB1bmRlZmluZWQpIHJldHVybiBldmVudC5mcm9tRWxlbWVudCA9PT0gZXZlbnQuc3JjRWxlbWVudCA/IGV2ZW50LnRvRWxlbWVudCA6IGV2ZW50LmZyb21FbGVtZW50O1xuICAgIHJldHVybiBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICB9LFxuICBtb3ZlbWVudFg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmICgnbW92ZW1lbnRYJyBpbiBldmVudCkge1xuICAgICAgcmV0dXJuIGV2ZW50Lm1vdmVtZW50WDtcbiAgICB9XG5cbiAgICB1cGRhdGVNb3VzZU1vdmVtZW50UG9seWZpbGxTdGF0ZShldmVudCk7XG4gICAgcmV0dXJuIGxhc3RNb3ZlbWVudFg7XG4gIH0sXG4gIG1vdmVtZW50WTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCdtb3ZlbWVudFknIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQubW92ZW1lbnRZO1xuICAgIH0gLy8gRG9uJ3QgbmVlZCB0byBjYWxsIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKCkgaGVyZVxuICAgIC8vIGJlY2F1c2UgaXQncyBndWFyYW50ZWVkIHRvIGhhdmUgYWxyZWFkeSBydW4gd2hlbiBtb3ZlbWVudFhcbiAgICAvLyB3YXMgY29waWVkLlxuXG5cbiAgICByZXR1cm4gbGFzdE1vdmVtZW50WTtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoTW91c2VFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRHJhZ0V2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgRHJhZ0V2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBkYXRhVHJhbnNmZXI6IDBcbn0pO1xuXG52YXIgU3ludGhldGljRHJhZ0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRHJhZ0V2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBGb2N1c0V2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgRm9jdXNFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgcmVsYXRlZFRhcmdldDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNGb2N1c0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRm9jdXNFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1hbmltYXRpb25zLyNBbmltYXRpb25FdmVudC1pbnRlcmZhY2VcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0FuaW1hdGlvbkV2ZW50XG4gKi9cblxudmFyIEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgYW5pbWF0aW9uTmFtZTogMCxcbiAgZWxhcHNlZFRpbWU6IDAsXG4gIHBzZXVkb0VsZW1lbnQ6IDBcbn0pO1xuXG52YXIgU3ludGhldGljQW5pbWF0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChBbmltYXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY2xpcGJvYXJkLWFwaXMvXG4gKi9cblxudmFyIENsaXBib2FyZEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgY2xpcGJvYXJkRGF0YTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdjbGlwYm9hcmREYXRhJyBpbiBldmVudCA/IGV2ZW50LmNsaXBib2FyZERhdGEgOiB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNDbGlwYm9hcmRFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KENsaXBib2FyZEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1jb21wb3NpdGlvbmV2ZW50c1xuICovXG5cbnZhciBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGF0YTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDVcbiAqICAgICAgLyNldmVudHMtaW5wdXRldmVudHNcbiAqL1xuLy8gSGFwcGVucyB0byBzaGFyZSB0aGUgc2FtZSBsaXN0IGZvciBub3cuXG5cbnZhciBTeW50aGV0aWNJbnB1dEV2ZW50ID0gU3ludGhldGljQ29tcG9zaXRpb25FdmVudDtcbi8qKlxuICogTm9ybWFsaXphdGlvbiBvZiBkZXByZWNhdGVkIEhUTUw1IGBrZXlgIHZhbHVlc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xuXG52YXIgbm9ybWFsaXplS2V5ID0ge1xuICBFc2M6ICdFc2NhcGUnLFxuICBTcGFjZWJhcjogJyAnLFxuICBMZWZ0OiAnQXJyb3dMZWZ0JyxcbiAgVXA6ICdBcnJvd1VwJyxcbiAgUmlnaHQ6ICdBcnJvd1JpZ2h0JyxcbiAgRG93bjogJ0Fycm93RG93bicsXG4gIERlbDogJ0RlbGV0ZScsXG4gIFdpbjogJ09TJyxcbiAgTWVudTogJ0NvbnRleHRNZW51JyxcbiAgQXBwczogJ0NvbnRleHRNZW51JyxcbiAgU2Nyb2xsOiAnU2Nyb2xsTG9jaycsXG4gIE1velByaW50YWJsZUtleTogJ1VuaWRlbnRpZmllZCdcbn07XG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbGVnYWN5IGBrZXlDb2RlYCB0byBIVE1MNSBga2V5YFxuICogT25seSBzcGVjaWFsIGtleXMgc3VwcG9ydGVkLCBhbGwgb3RoZXJzIGRlcGVuZCBvbiBrZXlib2FyZCBsYXlvdXQgb3IgYnJvd3NlclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xuXG52YXIgdHJhbnNsYXRlVG9LZXkgPSB7XG4gICc4JzogJ0JhY2tzcGFjZScsXG4gICc5JzogJ1RhYicsXG4gICcxMic6ICdDbGVhcicsXG4gICcxMyc6ICdFbnRlcicsXG4gICcxNic6ICdTaGlmdCcsXG4gICcxNyc6ICdDb250cm9sJyxcbiAgJzE4JzogJ0FsdCcsXG4gICcxOSc6ICdQYXVzZScsXG4gICcyMCc6ICdDYXBzTG9jaycsXG4gICcyNyc6ICdFc2NhcGUnLFxuICAnMzInOiAnICcsXG4gICczMyc6ICdQYWdlVXAnLFxuICAnMzQnOiAnUGFnZURvd24nLFxuICAnMzUnOiAnRW5kJyxcbiAgJzM2JzogJ0hvbWUnLFxuICAnMzcnOiAnQXJyb3dMZWZ0JyxcbiAgJzM4JzogJ0Fycm93VXAnLFxuICAnMzknOiAnQXJyb3dSaWdodCcsXG4gICc0MCc6ICdBcnJvd0Rvd24nLFxuICAnNDUnOiAnSW5zZXJ0JyxcbiAgJzQ2JzogJ0RlbGV0ZScsXG4gICcxMTInOiAnRjEnLFxuICAnMTEzJzogJ0YyJyxcbiAgJzExNCc6ICdGMycsXG4gICcxMTUnOiAnRjQnLFxuICAnMTE2JzogJ0Y1JyxcbiAgJzExNyc6ICdGNicsXG4gICcxMTgnOiAnRjcnLFxuICAnMTE5JzogJ0Y4JyxcbiAgJzEyMCc6ICdGOScsXG4gICcxMjEnOiAnRjEwJyxcbiAgJzEyMic6ICdGMTEnLFxuICAnMTIzJzogJ0YxMicsXG4gICcxNDQnOiAnTnVtTG9jaycsXG4gICcxNDUnOiAnU2Nyb2xsTG9jaycsXG4gICcyMjQnOiAnTWV0YSdcbn07XG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBga2V5YCBwcm9wZXJ0eS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRFdmVudEtleShuYXRpdmVFdmVudCkge1xuICBpZiAobmF0aXZlRXZlbnQua2V5KSB7XG4gICAgLy8gTm9ybWFsaXplIGluY29uc2lzdGVudCB2YWx1ZXMgcmVwb3J0ZWQgYnkgYnJvd3NlcnMgZHVlIHRvXG4gICAgLy8gaW1wbGVtZW50YXRpb25zIG9mIGEgd29ya2luZyBkcmFmdCBzcGVjaWZpY2F0aW9uLlxuICAgIC8vIEZpcmVGb3ggaW1wbGVtZW50cyBga2V5YCBidXQgcmV0dXJucyBgTW96UHJpbnRhYmxlS2V5YCBmb3IgYWxsXG4gICAgLy8gcHJpbnRhYmxlIGNoYXJhY3RlcnMgKG5vcm1hbGl6ZWQgdG8gYFVuaWRlbnRpZmllZGApLCBpZ25vcmUgaXQuXG4gICAgdmFyIGtleSA9IG5vcm1hbGl6ZUtleVtuYXRpdmVFdmVudC5rZXldIHx8IG5hdGl2ZUV2ZW50LmtleTtcblxuICAgIGlmIChrZXkgIT09ICdVbmlkZW50aWZpZWQnKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfSAvLyBCcm93c2VyIGRvZXMgbm90IGltcGxlbWVudCBga2V5YCwgcG9seWZpbGwgYXMgbXVjaCBvZiBpdCBhcyB3ZSBjYW4uXG5cblxuICBpZiAobmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgIHZhciBjaGFyQ29kZSA9IGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpOyAvLyBUaGUgZW50ZXIta2V5IGlzIHRlY2huaWNhbGx5IGJvdGggcHJpbnRhYmxlIGFuZCBub24tcHJpbnRhYmxlIGFuZCBjYW5cbiAgICAvLyB0aHVzIGJlIGNhcHR1cmVkIGJ5IGBrZXlwcmVzc2AsIG5vIG90aGVyIG5vbi1wcmludGFibGUga2V5IHNob3VsZC5cblxuICAgIHJldHVybiBjaGFyQ29kZSA9PT0gMTMgPyAnRW50ZXInIDogU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSk7XG4gIH1cblxuICBpZiAobmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAvLyBXaGlsZSB1c2VyIGtleWJvYXJkIGxheW91dCBkZXRlcm1pbmVzIHRoZSBhY3R1YWwgbWVhbmluZyBvZiBlYWNoXG4gICAgLy8gYGtleUNvZGVgIHZhbHVlLCBhbG1vc3QgYWxsIGZ1bmN0aW9uIGtleXMgaGF2ZSBhIHVuaXZlcnNhbCB2YWx1ZS5cbiAgICByZXR1cm4gdHJhbnNsYXRlVG9LZXlbbmF0aXZlRXZlbnQua2V5Q29kZV0gfHwgJ1VuaWRlbnRpZmllZCc7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbW9kaWZpZXIga2V5IHRvIHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IGluIHRoZSBldmVudC5cbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNrZXlzLU1vZGlmaWVyc1xuICovXG5cblxudmFyIG1vZGlmaWVyS2V5VG9Qcm9wID0ge1xuICBBbHQ6ICdhbHRLZXknLFxuICBDb250cm9sOiAnY3RybEtleScsXG4gIE1ldGE6ICdtZXRhS2V5JyxcbiAgU2hpZnQ6ICdzaGlmdEtleSdcbn07IC8vIE9sZGVyIGJyb3dzZXJzIChTYWZhcmkgPD0gMTAsIGlPUyBTYWZhcmkgPD0gMTAuMikgZG8gbm90IHN1cHBvcnRcbi8vIGdldE1vZGlmaWVyU3RhdGUuIElmIGdldE1vZGlmaWVyU3RhdGUgaXMgbm90IHN1cHBvcnRlZCwgd2UgbWFwIGl0IHRvIGEgc2V0IG9mXG4vLyBtb2RpZmllciBrZXlzIGV4cG9zZWQgYnkgdGhlIGV2ZW50LiBJbiB0aGlzIGNhc2UsIExvY2sta2V5cyBhcmUgbm90IHN1cHBvcnRlZC5cblxuZnVuY3Rpb24gbW9kaWZpZXJTdGF0ZUdldHRlcihrZXlBcmcpIHtcbiAgdmFyIHN5bnRoZXRpY0V2ZW50ID0gdGhpcztcbiAgdmFyIG5hdGl2ZUV2ZW50ID0gc3ludGhldGljRXZlbnQubmF0aXZlRXZlbnQ7XG5cbiAgaWYgKG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUpIHtcbiAgICByZXR1cm4gbmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZShrZXlBcmcpO1xuICB9XG5cbiAgdmFyIGtleVByb3AgPSBtb2RpZmllcktleVRvUHJvcFtrZXlBcmddO1xuICByZXR1cm4ga2V5UHJvcCA/ICEhbmF0aXZlRXZlbnRba2V5UHJvcF0gOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRNb2RpZmllclN0YXRlKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBtb2RpZmllclN0YXRlR2V0dGVyO1xufVxuLyoqXG4gKiBAaW50ZXJmYWNlIEtleWJvYXJkRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIEtleWJvYXJkRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIGtleTogZ2V0RXZlbnRLZXksXG4gIGNvZGU6IDAsXG4gIGxvY2F0aW9uOiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICByZXBlYXQ6IDAsXG4gIGxvY2FsZTogMCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAvLyBMZWdhY3kgSW50ZXJmYWNlXG4gIGNoYXJDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgY2hhckNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlQcmVzcyBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyB0aGUgYWN0dWFsIHByaW50YWJsZSBjaGFyYWN0ZXIuXG4gICAgLy8gS2V5UHJlc3MgaXMgZGVwcmVjYXRlZCwgYnV0IGl0cyByZXBsYWNlbWVudCBpcyBub3QgeWV0IGZpbmFsIGFuZCBub3RcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBhbnkgbWFqb3IgYnJvd3Nlci4gT25seSBLZXlQcmVzcyBoYXMgY2hhckNvZGUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgIHJldHVybiBnZXRFdmVudENoYXJDb2RlKGV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAga2V5Q29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYGtleUNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlEb3duL1VwIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHBoeXNpY2FsIGtleWJvYXJkIGtleS5cbiAgICAvLyBUaGUgYWN0dWFsIG1lYW5pbmcgb2YgdGhlIHZhbHVlIGRlcGVuZHMgb24gdGhlIHVzZXJzJyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyB3aGljaCBjYW5ub3QgYmUgZGV0ZWN0ZWQuIEFzc3VtaW5nIHRoYXQgaXQgaXMgYSBVUyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyBwcm92aWRlcyBhIHN1cnByaXNpbmdseSBhY2N1cmF0ZSBtYXBwaW5nIGZvciBVUyBhbmQgRXVyb3BlYW4gdXNlcnMuXG4gICAgLy8gRHVlIHRvIHRoaXMsIGl0IGlzIGxlZnQgdG8gdGhlIHVzZXIgdG8gaW1wbGVtZW50IGF0IHRoaXMgdGltZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9LFxuICB3aGljaDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYHdoaWNoYCBpcyBhbiBhbGlhcyBmb3IgZWl0aGVyIGBrZXlDb2RlYCBvciBgY2hhckNvZGVgIGRlcGVuZGluZyBvbiB0aGVcbiAgICAvLyB0eXBlIG9mIHRoZSBldmVudC5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljS2V5Ym9hcmRFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEtleWJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFBvaW50ZXJFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9wb2ludGVyZXZlbnRzL1xuICovXG5cbnZhciBQb2ludGVyRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIHBvaW50ZXJJZDogMCxcbiAgd2lkdGg6IDAsXG4gIGhlaWdodDogMCxcbiAgcHJlc3N1cmU6IDAsXG4gIHRhbmdlbnRpYWxQcmVzc3VyZTogMCxcbiAgdGlsdFg6IDAsXG4gIHRpbHRZOiAwLFxuICB0d2lzdDogMCxcbiAgcG9pbnRlclR5cGU6IDAsXG4gIGlzUHJpbWFyeTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNQb2ludGVyRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChQb2ludGVyRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFRvdWNoRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvdG91Y2gtZXZlbnRzL1xuICovXG5cbnZhciBUb3VjaEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICB0b3VjaGVzOiAwLFxuICB0YXJnZXRUb3VjaGVzOiAwLFxuICBjaGFuZ2VkVG91Y2hlczogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlXG59KTtcblxudmFyIFN5bnRoZXRpY1RvdWNoRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUb3VjaEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA5L1dELWNzczMtdHJhbnNpdGlvbnMtMjAwOTAzMjAvI3RyYW5zaXRpb24tZXZlbnRzLVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVHJhbnNpdGlvbkV2ZW50XG4gKi9cblxudmFyIFRyYW5zaXRpb25FdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIHByb3BlcnR5TmFtZTogMCxcbiAgZWxhcHNlZFRpbWU6IDAsXG4gIHBzZXVkb0VsZW1lbnQ6IDBcbn0pO1xuXG52YXIgU3ludGhldGljVHJhbnNpdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBXaGVlbEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgV2hlZWxFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGVsdGFYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWCcgaW4gZXZlbnQgPyBldmVudC5kZWx0YVggOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVhgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAocmlnaHQgaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWCcgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVggOiAwO1xuICB9LFxuICBkZWx0YVk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFZJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWSA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWWAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YVknIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFgIGZvciBJRTw5IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhIDogMDtcbiAgfSxcbiAgZGVsdGFaOiAwLFxuICAvLyBCcm93c2VycyB3aXRob3V0IFwiZGVsdGFNb2RlXCIgaXMgcmVwb3J0aW5nIGluIHJhdyB3aGVlbCBkZWx0YSB3aGVyZSBvbmVcbiAgLy8gbm90Y2ggb24gdGhlIHNjcm9sbCBpcyBhbHdheXMgKy8tIDEyMCwgcm91Z2hseSBlcXVpdmFsZW50IHRvIHBpeGVscy5cbiAgLy8gQSBnb29kIGFwcHJveGltYXRpb24gb2YgRE9NX0RFTFRBX0xJTkUgKDEpIGlzIDUlIG9mIHZpZXdwb3J0IHNpemUgb3JcbiAgLy8gfjQwIHBpeGVscywgZm9yIERPTV9ERUxUQV9TQ1JFRU4gKDIpIGl0IGlzIDg3LjUlIG9mIHZpZXdwb3J0IHNpemUuXG4gIGRlbHRhTW9kZTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNXaGVlbEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoV2hlZWxFdmVudEludGVyZmFjZSk7XG5cbnZhciBFTkRfS0VZQ09ERVMgPSBbOSwgMTMsIDI3LCAzMl07IC8vIFRhYiwgUmV0dXJuLCBFc2MsIFNwYWNlXG5cbnZhciBTVEFSVF9LRVlDT0RFID0gMjI5O1xudmFyIGNhblVzZUNvbXBvc2l0aW9uRXZlbnQgPSBjYW5Vc2VET00gJiYgJ0NvbXBvc2l0aW9uRXZlbnQnIGluIHdpbmRvdztcbnZhciBkb2N1bWVudE1vZGUgPSBudWxsO1xuXG5pZiAoY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB7XG4gIGRvY3VtZW50TW9kZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn0gLy8gV2Via2l0IG9mZmVycyBhIHZlcnkgdXNlZnVsIGB0ZXh0SW5wdXRgIGV2ZW50IHRoYXQgY2FuIGJlIHVzZWQgdG9cbi8vIGRpcmVjdGx5IHJlcHJlc2VudCBgYmVmb3JlSW5wdXRgLiBUaGUgSUUgYHRleHRpbnB1dGAgZXZlbnQgaXMgbm90IGFzXG4vLyB1c2VmdWwsIHNvIHdlIGRvbid0IHVzZSBpdC5cblxuXG52YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPSBjYW5Vc2VET00gJiYgJ1RleHRFdmVudCcgaW4gd2luZG93ICYmICFkb2N1bWVudE1vZGU7IC8vIEluIElFOSssIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0aW9uIGV2ZW50cywgYnV0IHRoZSBkYXRhIHN1cHBsaWVkXG4vLyBieSB0aGUgbmF0aXZlIGNvbXBvc2l0aW9uZW5kIGV2ZW50IG1heSBiZSBpbmNvcnJlY3QuIEphcGFuZXNlIGlkZW9ncmFwaGljXG4vLyBzcGFjZXMsIGZvciBpbnN0YW5jZSAoXFx1MzAwMCkgYXJlIG5vdCByZWNvcmRlZCBjb3JyZWN0bHkuXG5cbnZhciB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA9IGNhblVzZURPTSAmJiAoIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgfHwgZG9jdW1lbnRNb2RlICYmIGRvY3VtZW50TW9kZSA+IDggJiYgZG9jdW1lbnRNb2RlIDw9IDExKTtcbnZhciBTUEFDRUJBUl9DT0RFID0gMzI7XG52YXIgU1BBQ0VCQVJfQ0hBUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoU1BBQ0VCQVJfQ09ERSk7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQmVmb3JlSW5wdXQnLCBbJ2NvbXBvc2l0aW9uZW5kJywgJ2tleXByZXNzJywgJ3RleHRJbnB1dCcsICdwYXN0ZSddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uRW5kJywgWydjb21wb3NpdGlvbmVuZCcsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uU3RhcnQnLCBbJ2NvbXBvc2l0aW9uc3RhcnQnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25Db21wb3NpdGlvblVwZGF0ZScsIFsnY29tcG9zaXRpb251cGRhdGUnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG59IC8vIFRyYWNrIHdoZXRoZXIgd2UndmUgZXZlciBoYW5kbGVkIGEga2V5cHJlc3Mgb24gdGhlIHNwYWNlIGtleS5cblxuXG52YXIgaGFzU3BhY2VLZXlwcmVzcyA9IGZhbHNlO1xuLyoqXG4gKiBSZXR1cm4gd2hldGhlciBhIG5hdGl2ZSBrZXlwcmVzcyBldmVudCBpcyBhc3N1bWVkIHRvIGJlIGEgY29tbWFuZC5cbiAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBGaXJlZm94IGZpcmVzIGBrZXlwcmVzc2AgZXZlbnRzIGZvciBrZXkgY29tbWFuZHNcbiAqIChjdXQsIGNvcHksIHNlbGVjdC1hbGwsIGV0Yy4pIGV2ZW4gdGhvdWdoIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZC5cbiAqL1xuXG5mdW5jdGlvbiBpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkge1xuICByZXR1cm4gKG5hdGl2ZUV2ZW50LmN0cmxLZXkgfHwgbmF0aXZlRXZlbnQuYWx0S2V5IHx8IG5hdGl2ZUV2ZW50Lm1ldGFLZXkpICYmIC8vIGN0cmxLZXkgJiYgYWx0S2V5IGlzIGVxdWl2YWxlbnQgdG8gQWx0R3IsIGFuZCBpcyBub3QgYSBjb21tYW5kLlxuICAhKG5hdGl2ZUV2ZW50LmN0cmxLZXkgJiYgbmF0aXZlRXZlbnQuYWx0S2V5KTtcbn1cbi8qKlxuICogVHJhbnNsYXRlIG5hdGl2ZSB0b3AgbGV2ZWwgZXZlbnRzIGludG8gZXZlbnQgdHlwZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZShkb21FdmVudE5hbWUpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdjb21wb3NpdGlvbnN0YXJ0JzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvblN0YXJ0JztcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvbkVuZCc7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbnVwZGF0ZSc6XG4gICAgICByZXR1cm4gJ29uQ29tcG9zaXRpb25VcGRhdGUnO1xuICB9XG59XG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIGJlc3QtZ3Vlc3MgbW9kZWwgdGhpbmsgdGhpcyBldmVudCBzaWduaWZpZXMgdGhhdFxuICogY29tcG9zaXRpb24gaGFzIGJlZ3VuP1xuICovXG5cblxuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICByZXR1cm4gZG9tRXZlbnROYW1lID09PSAna2V5ZG93bicgJiYgbmF0aXZlRXZlbnQua2V5Q29kZSA9PT0gU1RBUlRfS0VZQ09ERTtcbn1cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgbW9kZSB0aGluayB0aGF0IHRoaXMgZXZlbnQgaXMgdGhlIGVuZCBvZiBjb21wb3NpdGlvbj9cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgLy8gQ29tbWFuZCBrZXlzIGluc2VydCBvciBjbGVhciBJTUUgaW5wdXQuXG4gICAgICByZXR1cm4gRU5EX0tFWUNPREVTLmluZGV4T2YobmF0aXZlRXZlbnQua2V5Q29kZSkgIT09IC0xO1xuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgICAvLyBFeHBlY3QgSU1FIGtleUNvZGUgb24gZWFjaCBrZXlkb3duLiBJZiB3ZSBnZXQgYW55IG90aGVyXG4gICAgICAvLyBjb2RlIHdlIG11c3QgaGF2ZSBleGl0ZWQgZWFybGllci5cbiAgICAgIHJldHVybiBuYXRpdmVFdmVudC5rZXlDb2RlICE9PSBTVEFSVF9LRVlDT0RFO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgLy8gRXZlbnRzIGFyZSBub3QgcG9zc2libGUgd2l0aG91dCBjYW5jZWxsaW5nIElNRS5cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBHb29nbGUgSW5wdXQgVG9vbHMgcHJvdmlkZXMgY29tcG9zaXRpb24gZGF0YSB2aWEgYSBDdXN0b21FdmVudCxcbiAqIHdpdGggdGhlIGBkYXRhYCBwcm9wZXJ0eSBwb3B1bGF0ZWQgaW4gdGhlIGBkZXRhaWxgIG9iamVjdC4gSWYgdGhpc1xuICogaXMgYXZhaWxhYmxlIG9uIHRoZSBldmVudCBvYmplY3QsIHVzZSBpdC4gSWYgbm90LCB0aGlzIGlzIGEgcGxhaW5cbiAqIGNvbXBvc2l0aW9uIGV2ZW50IGFuZCB3ZSBoYXZlIG5vdGhpbmcgc3BlY2lhbCB0byBleHRyYWN0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRldGFpbCA9IG5hdGl2ZUV2ZW50LmRldGFpbDtcblxuICBpZiAodHlwZW9mIGRldGFpbCA9PT0gJ29iamVjdCcgJiYgJ2RhdGEnIGluIGRldGFpbCkge1xuICAgIHJldHVybiBkZXRhaWwuZGF0YTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBDaGVjayBpZiBhIGNvbXBvc2l0aW9uIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgS29yZWFuIElNRS5cbiAqIE91ciBmYWxsYmFjayBtb2RlIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIElFJ3MgS29yZWFuIElNRSxcbiAqIHNvIGp1c3QgdXNlIG5hdGl2ZSBjb21wb3NpdGlvbiBldmVudHMgd2hlbiBLb3JlYW4gSU1FIGlzIHVzZWQuXG4gKiBBbHRob3VnaCBDb21wb3NpdGlvbkV2ZW50LmxvY2FsZSBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLFxuICogaXQgaXMgYXZhaWxhYmxlIGluIElFLCB3aGVyZSBvdXIgZmFsbGJhY2sgbW9kZSBpcyBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG5hdGl2ZUV2ZW50LmxvY2FsZSA9PT0gJ2tvJztcbn0gLy8gVHJhY2sgdGhlIGN1cnJlbnQgSU1FIGNvbXBvc2l0aW9uIHN0YXR1cywgaWYgYW55LlxuXG5cbnZhciBpc0NvbXBvc2luZyA9IGZhbHNlO1xuLyoqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuXG4gKi9cblxuZnVuY3Rpb24gZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgdmFyIGV2ZW50VHlwZTtcbiAgdmFyIGZhbGxiYWNrRGF0YTtcblxuICBpZiAoY2FuVXNlQ29tcG9zaXRpb25FdmVudCkge1xuICAgIGV2ZW50VHlwZSA9IGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKGRvbUV2ZW50TmFtZSk7XG4gIH0gZWxzZSBpZiAoIWlzQ29tcG9zaW5nKSB7XG4gICAgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICBldmVudFR5cGUgPSAnb25Db21wb3NpdGlvblN0YXJ0JztcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgZXZlbnRUeXBlID0gJ29uQ29tcG9zaXRpb25FbmQnO1xuICB9XG5cbiAgaWYgKCFldmVudFR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJiAhaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkpIHtcbiAgICAvLyBUaGUgY3VycmVudCBjb21wb3NpdGlvbiBpcyBzdG9yZWQgc3RhdGljYWxseSBhbmQgbXVzdCBub3QgYmVcbiAgICAvLyBvdmVyd3JpdHRlbiB3aGlsZSBjb21wb3NpdGlvbiBjb250aW51ZXMuXG4gICAgaWYgKCFpc0NvbXBvc2luZyAmJiBldmVudFR5cGUgPT09ICdvbkNvbXBvc2l0aW9uU3RhcnQnKSB7XG4gICAgICBpc0NvbXBvc2luZyA9IGluaXRpYWxpemUobmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnb25Db21wb3NpdGlvbkVuZCcpIHtcbiAgICAgIGlmIChpc0NvbXBvc2luZykge1xuICAgICAgICBmYWxsYmFja0RhdGEgPSBnZXREYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCBldmVudFR5cGUpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50KGV2ZW50VHlwZSwgZG9tRXZlbnROYW1lLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuXG4gICAgaWYgKGZhbGxiYWNrRGF0YSkge1xuICAgICAgLy8gSW5qZWN0IGRhdGEgZ2VuZXJhdGVkIGZyb20gZmFsbGJhY2sgcGF0aCBpbnRvIHRoZSBzeW50aGV0aWMgZXZlbnQuXG4gICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIHByb3BlcnR5IG9mIG5hdGl2ZSBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlLlxuICAgICAgZXZlbnQuZGF0YSA9IGZhbGxiYWNrRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGN1c3RvbURhdGEgPSBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcblxuICAgICAgaWYgKGN1c3RvbURhdGEgIT09IG51bGwpIHtcbiAgICAgICAgZXZlbnQuZGF0YSA9IGN1c3RvbURhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogSWYgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50cyBhcmUgYXZhaWxhYmxlLCBvdXIgZ29hbCBpcyB0byBtYWtlXG4gICAgICAgKiB1c2Ugb2YgdGhlbS4gSG93ZXZlciwgdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2U6IHRoZSBzcGFjZWJhciBrZXkuXG4gICAgICAgKiBJbiBXZWJraXQsIHByZXZlbnRpbmcgZGVmYXVsdCBvbiBhIHNwYWNlYmFyIGB0ZXh0SW5wdXRgIGV2ZW50XG4gICAgICAgKiBjYW5jZWxzIGNoYXJhY3RlciBpbnNlcnRpb24sIGJ1dCBpdCAqYWxzbyogY2F1c2VzIHRoZSBicm93c2VyXG4gICAgICAgKiB0byBmYWxsIGJhY2sgdG8gaXRzIGRlZmF1bHQgc3BhY2ViYXIgYmVoYXZpb3Igb2Ygc2Nyb2xsaW5nIHRoZVxuICAgICAgICogcGFnZS5cbiAgICAgICAqXG4gICAgICAgKiBUcmFja2luZyBhdDpcbiAgICAgICAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNTUxMDNcbiAgICAgICAqXG4gICAgICAgKiBUbyBhdm9pZCB0aGlzIGlzc3VlLCB1c2UgdGhlIGtleXByZXNzIGV2ZW50IGFzIGlmIG5vIGB0ZXh0SW5wdXRgXG4gICAgICAgKiBldmVudCBpcyBhdmFpbGFibGUuXG4gICAgICAgKi9cbiAgICAgIHZhciB3aGljaCA9IG5hdGl2ZUV2ZW50LndoaWNoO1xuXG4gICAgICBpZiAod2hpY2ggIT09IFNQQUNFQkFSX0NPREUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGhhc1NwYWNlS2V5cHJlc3MgPSB0cnVlO1xuICAgICAgcmV0dXJuIFNQQUNFQkFSX0NIQVI7XG5cbiAgICBjYXNlICd0ZXh0SW5wdXQnOlxuICAgICAgLy8gUmVjb3JkIHRoZSBjaGFyYWN0ZXJzIHRvIGJlIGFkZGVkIHRvIHRoZSBET00uXG4gICAgICB2YXIgY2hhcnMgPSBuYXRpdmVFdmVudC5kYXRhOyAvLyBJZiBpdCdzIGEgc3BhY2ViYXIgY2hhcmFjdGVyLCBhc3N1bWUgdGhhdCB3ZSBoYXZlIGFscmVhZHkgaGFuZGxlZFxuICAgICAgLy8gaXQgYXQgdGhlIGtleXByZXNzIGxldmVsIGFuZCBiYWlsIGltbWVkaWF0ZWx5LiBBbmRyb2lkIENocm9tZVxuICAgICAgLy8gZG9lc24ndCBnaXZlIHVzIGtleWNvZGVzLCBzbyB3ZSBuZWVkIHRvIGlnbm9yZSBpdC5cblxuICAgICAgaWYgKGNoYXJzID09PSBTUEFDRUJBUl9DSEFSICYmIGhhc1NwYWNlS2V5cHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBGb3Igb3RoZXIgbmF0aXZlIGV2ZW50IHR5cGVzLCBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbi8qKlxuICogRm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlIGB0ZXh0SW5wdXRgIGV2ZW50LCBleHRyYWN0IHRoZVxuICogYXBwcm9wcmlhdGUgc3RyaW5nIHRvIHVzZSBmb3IgU3ludGhldGljSW5wdXRFdmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgY29tcG9zaW5nIChJTUUpIGFuZCB1c2luZyBhIGZhbGxiYWNrIHRvIGRvIHNvLFxuICAvLyB0cnkgdG8gZXh0cmFjdCB0aGUgY29tcG9zZWQgY2hhcmFjdGVycyBmcm9tIHRoZSBmYWxsYmFjayBvYmplY3QuXG4gIC8vIElmIGNvbXBvc2l0aW9uIGV2ZW50IGlzIGF2YWlsYWJsZSwgd2UgZXh0cmFjdCBhIHN0cmluZyBvbmx5IGF0XG4gIC8vIGNvbXBvc2l0aW9uZXZlbnQsIG90aGVyd2lzZSBleHRyYWN0IGl0IGF0IGZhbGxiYWNrIGV2ZW50cy5cbiAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NvbXBvc2l0aW9uZW5kJyB8fCAhY2FuVXNlQ29tcG9zaXRpb25FdmVudCAmJiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHZhciBjaGFycyA9IGdldERhdGEoKTtcbiAgICAgIHJlc2V0KCk7XG4gICAgICBpc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGNoYXJzO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdwYXN0ZSc6XG4gICAgICAvLyBJZiBhIHBhc3RlIGV2ZW50IG9jY3VycyBhZnRlciBhIGtleXByZXNzLCB0aHJvdyBvdXQgdGhlIGlucHV0XG4gICAgICAvLyBjaGFycy4gUGFzdGUgZXZlbnRzIHNob3VsZCBub3QgbGVhZCB0byBCZWZvcmVJbnB1dCBldmVudHMuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogQXMgb2YgdjI3LCBGaXJlZm94IG1heSBmaXJlIGtleXByZXNzIGV2ZW50cyBldmVuIHdoZW4gbm8gY2hhcmFjdGVyXG4gICAgICAgKiB3aWxsIGJlIGluc2VydGVkLiBBIGZldyBwb3NzaWJpbGl0aWVzOlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyBgMGAuIEFycm93IGtleXMsIEVzYyBrZXksIGV0Yy5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBubyBjaGFyIGlzIGF2YWlsYWJsZS5cbiAgICAgICAqICAgRXg6ICdBbHRHciArIGRgIGluIFBvbGlzaC4gVGhlcmUgaXMgbm8gbW9kaWZpZWQgY2hhcmFjdGVyIGZvclxuICAgICAgICogICB0aGlzIGtleSBjb21iaW5hdGlvbiBhbmQgbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkIGludG8gdGhlXG4gICAgICAgKiAgIGRvY3VtZW50LCBidXQgRkYgZmlyZXMgdGhlIGtleXByZXNzIGZvciBjaGFyIGNvZGUgYDEwMGAgYW55d2F5LlxuICAgICAgICogICBObyBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgYSBjb21tYW5kIGNvbWJpbmF0aW9uIGlzXG4gICAgICAgKiAgIGJlaW5nIHVzZWQuIEV4OiBgQ21kK0NgLiBObyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGFuZCBub1xuICAgICAgICogICBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKi9cbiAgICAgIGlmICghaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgIC8vIElFIGZpcmVzIHRoZSBga2V5cHJlc3NgIGV2ZW50IHdoZW4gYSB1c2VyIHR5cGVzIGFuIGVtb2ppIHZpYVxuICAgICAgICAvLyBUb3VjaCBrZXlib2FyZCBvZiBXaW5kb3dzLiAgSW4gc3VjaCBhIGNhc2UsIHRoZSBgY2hhcmAgcHJvcGVydHlcbiAgICAgICAgLy8gaG9sZHMgYW4gZW1vamkgY2hhcmFjdGVyIGxpa2UgYFxcdUQ4M0RcXHVERTBBYC4gIEJlY2F1c2UgaXRzIGxlbmd0aFxuICAgICAgICAvLyBpcyAyLCB0aGUgcHJvcGVydHkgYHdoaWNoYCBkb2VzIG5vdCByZXByZXNlbnQgYW4gZW1vamkgY29ycmVjdGx5LlxuICAgICAgICAvLyBJbiBzdWNoIGEgY2FzZSwgd2UgZGlyZWN0bHkgcmV0dXJuIHRoZSBgY2hhcmAgcHJvcGVydHkgaW5zdGVhZCBvZlxuICAgICAgICAvLyB1c2luZyBgd2hpY2hgLlxuICAgICAgICBpZiAobmF0aXZlRXZlbnQuY2hhciAmJiBuYXRpdmVFdmVudC5jaGFyLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICByZXR1cm4gbmF0aXZlRXZlbnQuY2hhcjtcbiAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVFdmVudC53aGljaCkge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50LndoaWNoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJiAhaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkgPyBudWxsIDogbmF0aXZlRXZlbnQuZGF0YTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBFeHRyYWN0IGEgU3ludGhldGljSW5wdXRFdmVudCBmb3IgYGJlZm9yZUlucHV0YCwgYmFzZWQgb24gZWl0aGVyIG5hdGl2ZVxuICogYHRleHRJbnB1dGAgb3IgZmFsbGJhY2sgYmVoYXZpb3IuXG4gKlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgdmFyIGNoYXJzO1xuXG4gIGlmIChjYW5Vc2VUZXh0SW5wdXRFdmVudCkge1xuICAgIGNoYXJzID0gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBjaGFycyA9IGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSAvLyBJZiBubyBjaGFyYWN0ZXJzIGFyZSBiZWluZyBpbnNlcnRlZCwgbm8gQmVmb3JlSW5wdXQgZXZlbnQgc2hvdWxkXG4gIC8vIGJlIGZpcmVkLlxuXG5cbiAgaWYgKCFjaGFycykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCAnb25CZWZvcmVJbnB1dCcpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNJbnB1dEV2ZW50KCdvbkJlZm9yZUlucHV0JywgJ2JlZm9yZWlucHV0JywgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgICBldmVudC5kYXRhID0gY2hhcnM7XG4gIH1cbn1cbi8qKlxuICogQ3JlYXRlIGFuIGBvbkJlZm9yZUlucHV0YCBldmVudCB0byBtYXRjaFxuICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDUvI2V2ZW50cy1pbnB1dGV2ZW50cy5cbiAqXG4gKiBUaGlzIGV2ZW50IHBsdWdpbiBpcyBiYXNlZCBvbiB0aGUgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50XG4gKiBhdmFpbGFibGUgaW4gQ2hyb21lLCBTYWZhcmksIE9wZXJhLCBhbmQgSUUuIFRoaXMgZXZlbnQgZmlyZXMgYWZ0ZXJcbiAqIGBvbktleVByZXNzYCBhbmQgYG9uQ29tcG9zaXRpb25FbmRgLCBidXQgYmVmb3JlIGBvbklucHV0YC5cbiAqXG4gKiBgYmVmb3JlSW5wdXRgIGlzIHNwZWMnZCBidXQgbm90IGltcGxlbWVudGVkIGluIGFueSBicm93c2VycywgYW5kXG4gKiB0aGUgYGlucHV0YCBldmVudCBkb2VzIG5vdCBwcm92aWRlIGFueSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBoYXNcbiAqIGFjdHVhbGx5IGJlZW4gYWRkZWQsIGNvbnRyYXJ5IHRvIHRoZSBzcGVjLiBUaHVzLCBgdGV4dElucHV0YCBpcyB0aGUgYmVzdFxuICogYXZhaWxhYmxlIGV2ZW50IHRvIGlkZW50aWZ5IHRoZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGluc2VydGVkXG4gKiBpbnRvIHRoZSB0YXJnZXQgbm9kZS5cbiAqXG4gKiBUaGlzIHBsdWdpbiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBgY29tcG9zaXRpb25gIGV2ZW50cywgdGh1c1xuICogYWxsb3dpbmcgdXMgdG8gc2hhcmUgY29tcG9zaXRpb24gZmFsbGJhY2sgY29kZSBmb3IgYm90aCBgYmVmb3JlSW5wdXRgIGFuZFxuICogYGNvbXBvc2l0aW9uYCBldmVudCB0eXBlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICBleHRyYWN0Q29tcG9zaXRpb25FdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1pbnB1dC1lbGVtZW50Lmh0bWwjaW5wdXQtdHlwZS1hdHRyLXN1bW1hcnlcbiAqL1xudmFyIHN1cHBvcnRlZElucHV0VHlwZXMgPSB7XG4gIGNvbG9yOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBkYXRldGltZTogdHJ1ZSxcbiAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZSxcbiAgZW1haWw6IHRydWUsXG4gIG1vbnRoOiB0cnVlLFxuICBudW1iZXI6IHRydWUsXG4gIHBhc3N3b3JkOiB0cnVlLFxuICByYW5nZTogdHJ1ZSxcbiAgc2VhcmNoOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIHRleHQ6IHRydWUsXG4gIHRpbWU6IHRydWUsXG4gIHVybDogdHJ1ZSxcbiAgd2VlazogdHJ1ZVxufTtcblxuZnVuY3Rpb24gaXNUZXh0SW5wdXRFbGVtZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBpZiAobm9kZU5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICByZXR1cm4gISFzdXBwb3J0ZWRJbnB1dFR5cGVzW2VsZW0udHlwZV07XG4gIH1cblxuICBpZiAobm9kZU5hbWUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC5cbiAqXG4gKiBOT1RFOiBUaGlzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGZvciBub24tZ2VuZXJpYyBldmVudHMgc3VjaCBhcyBgY2hhbmdlYCxcbiAqIGByZXNldGAsIGBsb2FkYCwgYGVycm9yYCwgYW5kIGBzZWxlY3RgLlxuICpcbiAqIEJvcnJvd3MgZnJvbSBNb2Rlcm5penIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVN1ZmZpeCBFdmVudCBuYW1lLCBlLmcuIFwiY2xpY2tcIi5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IGlzIHN1cHBvcnRlZC5cbiAqIEBpbnRlcm5hbFxuICogQGxpY2Vuc2UgTW9kZXJuaXpyIDMuMC4wcHJlIChDdXN0b20gQnVpbGQpIHwgTUlUXG4gKi9cblxuZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChldmVudE5hbWVTdWZmaXgpIHtcbiAgaWYgKCFjYW5Vc2VET00pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZXZlbnROYW1lID0gJ29uJyArIGV2ZW50TmFtZVN1ZmZpeDtcbiAgdmFyIGlzU3VwcG9ydGVkID0gKGV2ZW50TmFtZSBpbiBkb2N1bWVudCk7XG5cbiAgaWYgKCFpc1N1cHBvcnRlZCkge1xuICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lLCAncmV0dXJuOycpO1xuICAgIGlzU3VwcG9ydGVkID0gdHlwZW9mIGVsZW1lbnRbZXZlbnROYW1lXSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHJldHVybiBpc1N1cHBvcnRlZDtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMSgpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNoYW5nZScsIFsnY2hhbmdlJywgJ2NsaWNrJywgJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnLCAnaW5wdXQnLCAna2V5ZG93bicsICdrZXl1cCcsICdzZWxlY3Rpb25jaGFuZ2UnXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBpbnN0LCBuYXRpdmVFdmVudCwgdGFyZ2V0KSB7XG4gIC8vIEZsYWcgdGhpcyBldmVudCBsb29wIGFzIG5lZWRpbmcgc3RhdGUgcmVzdG9yZS5cbiAgZW5xdWV1ZVN0YXRlUmVzdG9yZSh0YXJnZXQpO1xuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKGluc3QsICdvbkNoYW5nZScpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudCgnb25DaGFuZ2UnLCAnY2hhbmdlJywgbnVsbCwgbmF0aXZlRXZlbnQsIHRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gIH1cbn1cbi8qKlxuICogRm9yIElFIHNoaW1zXG4gKi9cblxuXG52YXIgYWN0aXZlRWxlbWVudCA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNoYW5nZWAgZXZlbnRcbiAqL1xuXG5mdW5jdGlvbiBzaG91bGRVc2VDaGFuZ2VFdmVudChlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbm9kZU5hbWUgPT09ICdzZWxlY3QnIHx8IG5vZGVOYW1lID09PSAnaW5wdXQnICYmIGVsZW0udHlwZSA9PT0gJ2ZpbGUnO1xufVxuXG5mdW5jdGlvbiBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkaXNwYXRjaFF1ZXVlID0gW107XG4gIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBhY3RpdmVFbGVtZW50SW5zdCwgbmF0aXZlRXZlbnQsIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSk7IC8vIElmIGNoYW5nZSBhbmQgcHJvcGVydHljaGFuZ2UgYnViYmxlZCwgd2UnZCBqdXN0IGJpbmQgdG8gaXQgbGlrZSBhbGwgdGhlXG4gIC8vIG90aGVyIGV2ZW50cyBhbmQgaGF2ZSBpdCBnbyB0aHJvdWdoIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci4gU2luY2UgaXRcbiAgLy8gZG9lc24ndCwgd2UgbWFudWFsbHkgbGlzdGVuIGZvciB0aGUgZXZlbnRzIGFuZCBzbyB3ZSBoYXZlIHRvIGVucXVldWUgYW5kXG4gIC8vIHByb2Nlc3MgdGhlIGFic3RyYWN0IGV2ZW50IG1hbnVhbGx5LlxuICAvL1xuICAvLyBCYXRjaGluZyBpcyBuZWNlc3NhcnkgaGVyZSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBhbGwgZXZlbnQgaGFuZGxlcnMgcnVuXG4gIC8vIGJlZm9yZSB0aGUgbmV4dCByZXJlbmRlciAoaW5jbHVkaW5nIGV2ZW50IGhhbmRsZXJzIGF0dGFjaGVkIHRvIGFuY2VzdG9yXG4gIC8vIGVsZW1lbnRzIGluc3RlYWQgb2YgZGlyZWN0bHkgb24gdGhlIGlucHV0KS4gV2l0aG91dCB0aGlzLCBjb250cm9sbGVkXG4gIC8vIGNvbXBvbmVudHMgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBjb25qdW5jdGlvbiB3aXRoIGV2ZW50IGJ1YmJsaW5nIGJlY2F1c2VcbiAgLy8gdGhlIGNvbXBvbmVudCBpcyByZXJlbmRlcmVkIGFuZCB0aGUgdmFsdWUgcmV2ZXJ0ZWQgYmVmb3JlIGFsbCB0aGUgZXZlbnRcbiAgLy8gaGFuZGxlcnMgY2FuIHJ1bi4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzA4LlxuXG4gIGJhdGNoZWRVcGRhdGVzKHJ1bkV2ZW50SW5CYXRjaCwgZGlzcGF0Y2hRdWV1ZSk7XG59XG5cbmZ1bmN0aW9uIHJ1bkV2ZW50SW5CYXRjaChkaXNwYXRjaFF1ZXVlKSB7XG4gIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIDApO1xufVxuXG5mdW5jdGlvbiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCkge1xuICB2YXIgdGFyZ2V0Tm9kZSA9IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCk7XG5cbiAgaWYgKHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKHRhcmdldE5vZGUpKSB7XG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgaW5wdXRgIGV2ZW50XG4gKi9cblxuXG52YXIgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gZmFsc2U7XG5cbmlmIChjYW5Vc2VET00pIHtcbiAgLy8gSUU5IGNsYWltcyB0byBzdXBwb3J0IHRoZSBpbnB1dCBldmVudCBidXQgZmFpbHMgdG8gdHJpZ2dlciBpdCB3aGVuXG4gIC8vIGRlbGV0aW5nIHRleHQsIHNvIHdlIGlnbm9yZSBpdHMgaW5wdXQgZXZlbnRzLlxuICBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBpc0V2ZW50U3VwcG9ydGVkKCdpbnB1dCcpICYmICghZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDkpO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgU3RhcnRzIHRyYWNraW5nIHByb3BlcnR5Y2hhbmdlIGV2ZW50cyBvbiB0aGUgcGFzc2VkLWluIGVsZW1lbnRcbiAqIGFuZCBvdmVycmlkZSB0aGUgdmFsdWUgcHJvcGVydHkgc28gdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggdXNlciBldmVudHMgZnJvbVxuICogdmFsdWUgY2hhbmdlcyBpbiBKUy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgYWN0aXZlRWxlbWVudCA9IHRhcmdldDtcbiAgYWN0aXZlRWxlbWVudEluc3QgPSB0YXJnZXRJbnN0O1xuICBhY3RpdmVFbGVtZW50LmF0dGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgUmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIGZyb20gdGhlIGN1cnJlbnRseS10cmFja2VkIGVsZW1lbnQsXG4gKiBpZiBhbnkgZXhpc3RzLlxuICovXG5cblxuZnVuY3Rpb24gc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKSB7XG4gIGlmICghYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFjdGl2ZUVsZW1lbnQuZGV0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG4gIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBIYW5kbGVzIGEgcHJvcGVydHljaGFuZ2UgZXZlbnQsIHNlbmRpbmcgYSBgY2hhbmdlYCBldmVudCBpZlxuICogdGhlIHZhbHVlIG9mIHRoZSBhY3RpdmUgZWxlbWVudCBoYXMgY2hhbmdlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5Q2hhbmdlKG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5wcm9wZXJ0eU5hbWUgIT09ICd2YWx1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0KSkge1xuICAgIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbChkb21FdmVudE5hbWUsIHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNpbicpIHtcbiAgICAvLyBJbiBJRTksIHByb3BlcnR5Y2hhbmdlIGZpcmVzIGZvciBtb3N0IGlucHV0IGV2ZW50cyBidXQgaXMgYnVnZ3kgYW5kXG4gICAgLy8gZG9lc24ndCBmaXJlIHdoZW4gdGV4dCBpcyBkZWxldGVkLCBidXQgY29udmVuaWVudGx5LCBzZWxlY3Rpb25jaGFuZ2VcbiAgICAvLyBhcHBlYXJzIHRvIGZpcmUgaW4gYWxsIG9mIHRoZSByZW1haW5pbmcgY2FzZXMgc28gd2UgY2F0Y2ggdGhvc2UgYW5kXG4gICAgLy8gZm9yd2FyZCB0aGUgZXZlbnQgaWYgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkXG4gICAgLy8gSW4gZWl0aGVyIGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gY2FsbCB0aGUgZXZlbnQgaGFuZGxlciBpZiB0aGUgdmFsdWVcbiAgICAvLyBpcyBjaGFuZ2VkIGZyb20gSlMgc28gd2UgcmVkZWZpbmUgYSBzZXR0ZXIgZm9yIGAudmFsdWVgIHRoYXQgdXBkYXRlc1xuICAgIC8vIG91ciBhY3RpdmVFbGVtZW50VmFsdWUgdmFyaWFibGUsIGFsbG93aW5nIHVzIHRvIGlnbm9yZSB0aG9zZSBjaGFuZ2VzXG4gICAgLy9cbiAgICAvLyBzdG9wV2F0Y2hpbmcoKSBzaG91bGQgYmUgYSBub29wIGhlcmUgYnV0IHdlIGNhbGwgaXQganVzdCBpbiBjYXNlIHdlXG4gICAgLy8gbWlzc2VkIGEgYmx1ciBldmVudCBzb21laG93LlxuICAgIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gICAgc3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SW5zdCk7XG4gIH0gZWxzZSBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNvdXQnKSB7XG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgfVxufSAvLyBGb3IgSUU4IGFuZCBJRTkuXG5cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3NlbGVjdGlvbmNoYW5nZScgfHwgZG9tRXZlbnROYW1lID09PSAna2V5dXAnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2tleWRvd24nKSB7XG4gICAgLy8gT24gdGhlIHNlbGVjdGlvbmNoYW5nZSBldmVudCwgdGhlIHRhcmdldCBpcyBqdXN0IGRvY3VtZW50IHdoaWNoIGlzbid0XG4gICAgLy8gaGVscGZ1bCBmb3IgdXMgc28ganVzdCBjaGVjayBhY3RpdmVFbGVtZW50IGluc3RlYWQuXG4gICAgLy9cbiAgICAvLyA5OSUgb2YgdGhlIHRpbWUsIGtleWRvd24gYW5kIGtleXVwIGFyZW4ndCBuZWNlc3NhcnkuIElFOCBmYWlscyB0byBmaXJlXG4gICAgLy8gcHJvcGVydHljaGFuZ2Ugb24gdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFmdGVyIHNldHRpbmcgYHZhbHVlYCBmcm9tIGFcbiAgICAvLyBzY3JpcHQgYW5kIGZpcmVzIG9ubHkga2V5ZG93biwga2V5cHJlc3MsIGtleXVwLiBDYXRjaGluZyBrZXl1cCB1c3VhbGx5XG4gICAgLy8gZ2V0cyBpdCBhbmQgY2F0Y2hpbmcga2V5ZG93biBsZXRzIHVzIGZpcmUgYW4gZXZlbnQgZm9yIHRoZSBmaXJzdFxuICAgIC8vIGtleXN0cm9rZSBpZiB1c2VyIGRvZXMgYSBrZXkgcmVwZWF0IChpdCdsbCBiZSBhIGxpdHRsZSBkZWxheWVkOiByaWdodFxuICAgIC8vIGJlZm9yZSB0aGUgc2Vjb25kIGtleXN0cm9rZSkuIE90aGVyIGlucHV0IG1ldGhvZHMgKGUuZy4sIHBhc3RlKSBzZWVtIHRvXG4gICAgLy8gZmlyZSBzZWxlY3Rpb25jaGFuZ2Ugbm9ybWFsbHkuXG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCk7XG4gIH1cbn1cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjbGlja2AgZXZlbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHNob3VsZFVzZUNsaWNrRXZlbnQoZWxlbSkge1xuICAvLyBVc2UgdGhlIGBjbGlja2AgZXZlbnQgdG8gZGV0ZWN0IGNoYW5nZXMgdG8gY2hlY2tib3ggYW5kIHJhZGlvIGlucHV0cy5cbiAgLy8gVGhpcyBhcHByb2FjaCB3b3JrcyBhY3Jvc3MgYWxsIGJyb3dzZXJzLCB3aGVyZWFzIGBjaGFuZ2VgIGRvZXMgbm90IGZpcmVcbiAgLy8gdW50aWwgYGJsdXJgIGluIElFOC5cbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIG5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgJiYgKGVsZW0udHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBlbGVtLnR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NsaWNrJykge1xuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2lucHV0JyB8fCBkb21FdmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fd3JhcHBlclN0YXRlO1xuXG4gIGlmICghc3RhdGUgfHwgIXN0YXRlLmNvbnRyb2xsZWQgfHwgbm9kZS50eXBlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICAvLyBJZiBjb250cm9sbGVkLCBhc3NpZ24gdGhlIHZhbHVlIGF0dHJpYnV0ZSB0byB0aGUgY3VycmVudCB2YWx1ZSBvbiBibHVyXG4gICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsICdudW1iZXInLCBub2RlLnZhbHVlKTtcbiAgfVxufVxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvbkNoYW5nZWAgZXZlbnQgdGhhdCBub3JtYWxpemVzIGNoYW5nZSBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLiBUaGlzIGV2ZW50IGZpcmVzIGF0IGEgdGltZSB3aGVuIGl0J3MgcG9zc2libGUgdG9cbiAqIGNoYW5nZSB0aGUgZWxlbWVudCdzIHZhbHVlIHdpdGhvdXQgc2VlaW5nIGEgZmxpY2tlci5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBzZWxlY3RcbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciB0YXJnZXROb2RlID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG4gIHZhciBnZXRUYXJnZXRJbnN0RnVuYywgaGFuZGxlRXZlbnRGdW5jO1xuXG4gIGlmIChzaG91bGRVc2VDaGFuZ2VFdmVudCh0YXJnZXROb2RlKSkge1xuICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50O1xuICB9IGVsc2UgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0YXJnZXROb2RlKSkge1xuICAgIGlmIChpc0lucHV0RXZlbnRTdXBwb3J0ZWQpIHtcbiAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgICAgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzaG91bGRVc2VDbGlja0V2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudDtcbiAgfVxuXG4gIGlmIChnZXRUYXJnZXRJbnN0RnVuYykge1xuICAgIHZhciBpbnN0ID0gZ2V0VGFyZ2V0SW5zdEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KTtcblxuICAgIGlmIChpbnN0KSB7XG4gICAgICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgaW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoaGFuZGxlRXZlbnRGdW5jKSB7XG4gICAgaGFuZGxlRXZlbnRGdW5jKGRvbUV2ZW50TmFtZSwgdGFyZ2V0Tm9kZSwgdGFyZ2V0SW5zdCk7XG4gIH0gLy8gV2hlbiBibHVycmluZywgc2V0IHRoZSB2YWx1ZSBhdHRyaWJ1dGUgZm9yIG51bWJlciBpbnB1dHNcblxuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c291dCcpIHtcbiAgICBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKHRhcmdldE5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDIoKSB7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uTW91c2VFbnRlcicsIFsnbW91c2VvdXQnLCAnbW91c2VvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvbk1vdXNlTGVhdmUnLCBbJ21vdXNlb3V0JywgJ21vdXNlb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Qb2ludGVyRW50ZXInLCBbJ3BvaW50ZXJvdXQnLCAncG9pbnRlcm92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uUG9pbnRlckxlYXZlJywgWydwb2ludGVyb3V0JywgJ3BvaW50ZXJvdmVyJ10pO1xufVxuLyoqXG4gKiBGb3IgYWxtb3N0IGV2ZXJ5IGludGVyYWN0aW9uIHdlIGNhcmUgYWJvdXQsIHRoZXJlIHdpbGwgYmUgYm90aCBhIHRvcC1sZXZlbFxuICogYG1vdXNlb3ZlcmAgYW5kIGBtb3VzZW91dGAgZXZlbnQgdGhhdCBvY2N1cnMuIE9ubHkgdXNlIGBtb3VzZW91dGAgc28gdGhhdFxuICogd2UgZG8gbm90IGV4dHJhY3QgZHVwbGljYXRlIGV2ZW50cy4gSG93ZXZlciwgbW92aW5nIHRoZSBtb3VzZSBpbnRvIHRoZVxuICogYnJvd3NlciBmcm9tIG91dHNpZGUgd2lsbCBub3QgZmlyZSBhIGBtb3VzZW91dGAgZXZlbnQuIEluIHRoaXMgY2FzZSwgd2UgdXNlXG4gKiB0aGUgYG1vdXNlb3ZlcmAgdG9wLWxldmVsIGV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQyKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGlzT3ZlckV2ZW50ID0gZG9tRXZlbnROYW1lID09PSAnbW91c2VvdmVyJyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3Zlcic7XG4gIHZhciBpc091dEV2ZW50ID0gZG9tRXZlbnROYW1lID09PSAnbW91c2VvdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdXQnO1xuXG4gIGlmIChpc092ZXJFdmVudCAmJiAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX1JFUExBWUVEKSA9PT0gMCkge1xuICAgIC8vIElmIHRoaXMgaXMgYW4gb3ZlciBldmVudCB3aXRoIGEgdGFyZ2V0LCB3ZSBtaWdodCBoYXZlIGFscmVhZHkgZGlzcGF0Y2hlZFxuICAgIC8vIHRoZSBldmVudCBpbiB0aGUgb3V0IGV2ZW50IG9mIHRoZSBvdGhlciB0YXJnZXQuIElmIHRoaXMgaXMgcmVwbGF5ZWQsXG4gICAgLy8gdGhlbiBpdCdzIGJlY2F1c2Ugd2UgY291bGRuJ3QgZGlzcGF0Y2ggYWdhaW5zdCB0aGlzIHRhcmdldCBwcmV2aW91c2x5XG4gICAgLy8gc28gd2UgaGF2ZSB0byBkbyBpdCBub3cgaW5zdGVhZC5cbiAgICB2YXIgcmVsYXRlZCA9IG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQuZnJvbUVsZW1lbnQ7XG5cbiAgICBpZiAocmVsYXRlZCkge1xuICAgICAgLy8gSWYgdGhlIHJlbGF0ZWQgbm9kZSBpcyBtYW5hZ2VkIGJ5IFJlYWN0LCB3ZSBjYW4gYXNzdW1lIHRoYXQgd2UgaGF2ZVxuICAgICAgLy8gYWxyZWFkeSBkaXNwYXRjaGVkIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50cyBkdXJpbmcgaXRzIG1vdXNlb3V0LlxuICAgICAgaWYgKGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHJlbGF0ZWQpIHx8IGlzQ29udGFpbmVyTWFya2VkQXNSb290KHJlbGF0ZWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWlzT3V0RXZlbnQgJiYgIWlzT3ZlckV2ZW50KSB7XG4gICAgLy8gTXVzdCBub3QgYmUgYSBtb3VzZSBvciBwb2ludGVyIGluIG9yIG91dCAtIGlnbm9yaW5nLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB3aW47IC8vIFRPRE86IHdoeSBpcyB0aGlzIG51bGxhYmxlIGluIHRoZSB0eXBlcyBidXQgd2UgcmVhZCBmcm9tIGl0P1xuXG4gIGlmIChuYXRpdmVFdmVudFRhcmdldC53aW5kb3cgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgLy8gYG5hdGl2ZUV2ZW50VGFyZ2V0YCBpcyBwcm9iYWJseSBhIHdpbmRvdyBvYmplY3QuXG4gICAgd2luID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgYG93bmVyRG9jdW1lbnRgIGlzIHNvbWV0aW1lcyB1bmRlZmluZWQgaW4gSUU4LlxuICAgIHZhciBkb2MgPSBuYXRpdmVFdmVudFRhcmdldC5vd25lckRvY3VtZW50O1xuXG4gICAgaWYgKGRvYykge1xuICAgICAgd2luID0gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbiA9IHdpbmRvdztcbiAgICB9XG4gIH1cblxuICB2YXIgZnJvbTtcbiAgdmFyIHRvO1xuXG4gIGlmIChpc091dEV2ZW50KSB7XG4gICAgdmFyIF9yZWxhdGVkID0gbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC50b0VsZW1lbnQ7XG5cbiAgICBmcm9tID0gdGFyZ2V0SW5zdDtcbiAgICB0byA9IF9yZWxhdGVkID8gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoX3JlbGF0ZWQpIDogbnVsbDtcblxuICAgIGlmICh0byAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0byk7XG5cbiAgICAgIGlmICh0byAhPT0gbmVhcmVzdE1vdW50ZWQgfHwgdG8udGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIHRvLnRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgICAgdG8gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBNb3ZpbmcgdG8gYSBub2RlIGZyb20gb3V0c2lkZSB0aGUgd2luZG93LlxuICAgIGZyb20gPSBudWxsO1xuICAgIHRvID0gdGFyZ2V0SW5zdDtcbiAgfVxuXG4gIGlmIChmcm9tID09PSB0bykge1xuICAgIC8vIE5vdGhpbmcgcGVydGFpbnMgdG8gb3VyIG1hbmFnZWQgY29tcG9uZW50cy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgdmFyIGxlYXZlRXZlbnRUeXBlID0gJ29uTW91c2VMZWF2ZSc7XG4gIHZhciBlbnRlckV2ZW50VHlwZSA9ICdvbk1vdXNlRW50ZXInO1xuICB2YXIgZXZlbnRUeXBlUHJlZml4ID0gJ21vdXNlJztcblxuICBpZiAoZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm91dCcgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm92ZXInKSB7XG4gICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgIGxlYXZlRXZlbnRUeXBlID0gJ29uUG9pbnRlckxlYXZlJztcbiAgICBlbnRlckV2ZW50VHlwZSA9ICdvblBvaW50ZXJFbnRlcic7XG4gICAgZXZlbnRUeXBlUHJlZml4ID0gJ3BvaW50ZXInO1xuICB9XG5cbiAgdmFyIGZyb21Ob2RlID0gZnJvbSA9PSBudWxsID8gd2luIDogZ2V0Tm9kZUZyb21JbnN0YW5jZShmcm9tKTtcbiAgdmFyIHRvTm9kZSA9IHRvID09IG51bGwgPyB3aW4gOiBnZXROb2RlRnJvbUluc3RhbmNlKHRvKTtcbiAgdmFyIGxlYXZlID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihsZWF2ZUV2ZW50VHlwZSwgZXZlbnRUeXBlUHJlZml4ICsgJ2xlYXZlJywgZnJvbSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgbGVhdmUudGFyZ2V0ID0gZnJvbU5vZGU7XG4gIGxlYXZlLnJlbGF0ZWRUYXJnZXQgPSB0b05vZGU7XG4gIHZhciBlbnRlciA9IG51bGw7IC8vIFdlIHNob3VsZCBvbmx5IHByb2Nlc3MgdGhpcyBuYXRpdmVFdmVudCBpZiB3ZSBhcmUgcHJvY2Vzc2luZ1xuICAvLyB0aGUgZmlyc3QgYW5jZXN0b3IuIE5leHQgdGltZSwgd2Ugd2lsbCBpZ25vcmUgdGhlIGV2ZW50LlxuXG4gIHZhciBuYXRpdmVUYXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChuYXRpdmVUYXJnZXRJbnN0ID09PSB0YXJnZXRJbnN0KSB7XG4gICAgdmFyIGVudGVyRXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKGVudGVyRXZlbnRUeXBlLCBldmVudFR5cGVQcmVmaXggKyAnZW50ZXInLCB0bywgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBlbnRlckV2ZW50LnRhcmdldCA9IHRvTm9kZTtcbiAgICBlbnRlckV2ZW50LnJlbGF0ZWRUYXJnZXQgPSBmcm9tTm9kZTtcbiAgICBlbnRlciA9IGVudGVyRXZlbnQ7XG4gIH1cblxuICBhY2N1bXVsYXRlRW50ZXJMZWF2ZVR3b1BoYXNlTGlzdGVuZXJzKGRpc3BhdGNoUXVldWUsIGxlYXZlLCBlbnRlciwgZnJvbSwgdG8pO1xufVxuXG4vKipcbiAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICovXG5mdW5jdGlvbiBpcyh4LCB5KSB7XG4gIHJldHVybiB4ID09PSB5ICYmICh4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSkgfHwgeCAhPT0geCAmJiB5ICE9PSB5IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIDtcbn1cblxudmFyIG9iamVjdElzID0gdHlwZW9mIE9iamVjdC5pcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC5pcyA6IGlzO1xuXG52YXIgaGFzT3duUHJvcGVydHkkMiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4vKipcbiAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4gb2JqZWN0IGFuZCByZXR1cm5pbmcgZmFsc2VcbiAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwuXG4gKi9cblxuZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKG9iamVjdElzKG9iakEsIG9iakIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8IG9iakEgPT09IG51bGwgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8IG9iakIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNBLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eSQyLmNhbGwob2JqQiwga2V5c0FbaV0pIHx8ICFvYmplY3RJcyhvYmpBW2tleXNBW2ldXSwgb2JqQltrZXlzQVtpXV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogR2l2ZW4gYW55IG5vZGUgcmV0dXJuIHRoZSBmaXJzdCBsZWFmIG5vZGUgd2l0aG91dCBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cblxuZnVuY3Rpb24gZ2V0TGVhZk5vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSAmJiBub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICBub2RlID0gbm9kZS5maXJzdENoaWxkO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG4vKipcbiAqIEdldCB0aGUgbmV4dCBzaWJsaW5nIHdpdGhpbiBhIGNvbnRhaW5lci4gVGhpcyB3aWxsIHdhbGsgdXAgdGhlXG4gKiBET00gaWYgYSBub2RlJ3Mgc2libGluZ3MgaGF2ZSBiZWVuIGV4aGF1c3RlZC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4gez9ET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0U2libGluZ05vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9XG59XG4vKipcbiAqIEdldCBvYmplY3QgZGVzY3JpYmluZyB0aGUgbm9kZXMgd2hpY2ggY29udGFpbiBjaGFyYWN0ZXJzIGF0IG9mZnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IHJvb3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KHJvb3QsIG9mZnNldCkge1xuICB2YXIgbm9kZSA9IGdldExlYWZOb2RlKHJvb3QpO1xuICB2YXIgbm9kZVN0YXJ0ID0gMDtcbiAgdmFyIG5vZGVFbmQgPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgbm9kZUVuZCA9IG5vZGVTdGFydCArIG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZVN0YXJ0IDw9IG9mZnNldCAmJiBub2RlRW5kID49IG9mZnNldCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQgLSBub2RlU3RhcnRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbm9kZVN0YXJ0ID0gbm9kZUVuZDtcbiAgICB9XG5cbiAgICBub2RlID0gZ2V0TGVhZk5vZGUoZ2V0U2libGluZ05vZGUobm9kZSkpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBvdXRlck5vZGVcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gZ2V0T2Zmc2V0cyhvdXRlck5vZGUpIHtcbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBvdXRlck5vZGUub3duZXJEb2N1bWVudDtcbiAgdmFyIHdpbiA9IG93bmVyRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uICYmIHdpbi5nZXRTZWxlY3Rpb24oKTtcblxuICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGFuY2hvck5vZGUgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQgPSBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7IC8vIEluIEZpcmVmb3gsIGFuY2hvck5vZGUgYW5kIGZvY3VzTm9kZSBjYW4gYmUgXCJhbm9ueW1vdXMgZGl2c1wiLCBlLmcuIHRoZVxuICAvLyB1cC9kb3duIGJ1dHRvbnMgb24gYW4gPGlucHV0IHR5cGU9XCJudW1iZXJcIj4uIEFub255bW91cyBkaXZzIGRvIG5vdCBzZWVtIHRvXG4gIC8vIGV4cG9zZSBwcm9wZXJ0aWVzLCB0cmlnZ2VyaW5nIGEgXCJQZXJtaXNzaW9uIGRlbmllZCBlcnJvclwiIGlmIGFueSBvZiBpdHNcbiAgLy8gcHJvcGVydGllcyBhcmUgYWNjZXNzZWQuIFRoZSBvbmx5IHNlZW1pbmdseSBwb3NzaWJsZSB3YXkgdG8gYXZvaWQgZXJyb3JpbmdcbiAgLy8gaXMgdG8gYWNjZXNzIGEgcHJvcGVydHkgdGhhdCB0eXBpY2FsbHkgd29ya3MgZm9yIG5vbi1hbm9ueW1vdXMgZGl2cyBhbmRcbiAgLy8gY2F0Y2ggYW55IGVycm9yIHRoYXQgbWF5IG90aGVyd2lzZSBhcmlzZS4gU2VlXG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQyN1xuXG4gIHRyeSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gICAgYW5jaG9yTm9kZS5ub2RlVHlwZTtcbiAgICBmb2N1c05vZGUubm9kZVR5cGU7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGdldE1vZGVybk9mZnNldHNGcm9tUG9pbnRzKG91dGVyTm9kZSwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbn1cbi8qKlxuICogUmV0dXJucyB7c3RhcnQsIGVuZH0gd2hlcmUgYHN0YXJ0YCBpcyB0aGUgY2hhcmFjdGVyL2NvZGVwb2ludCBpbmRleCBvZlxuICogKGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCkgd2l0aGluIHRoZSB0ZXh0Q29udGVudCBvZiBgb3V0ZXJOb2RlYCwgYW5kXG4gKiBgZW5kYCBpcyB0aGUgaW5kZXggb2YgKGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpLlxuICpcbiAqIFJldHVybnMgbnVsbCBpZiB5b3UgcGFzcyBpbiBnYXJiYWdlIGlucHV0IGJ1dCB3ZSBzaG91bGQgcHJvYmFibHkganVzdCBjcmFzaC5cbiAqXG4gKiBFeHBvcnRlZCBvbmx5IGZvciB0ZXN0aW5nLlxuICovXG5cbmZ1bmN0aW9uIGdldE1vZGVybk9mZnNldHNGcm9tUG9pbnRzKG91dGVyTm9kZSwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KSB7XG4gIHZhciBsZW5ndGggPSAwO1xuICB2YXIgc3RhcnQgPSAtMTtcbiAgdmFyIGVuZCA9IC0xO1xuICB2YXIgaW5kZXhXaXRoaW5BbmNob3IgPSAwO1xuICB2YXIgaW5kZXhXaXRoaW5Gb2N1cyA9IDA7XG4gIHZhciBub2RlID0gb3V0ZXJOb2RlO1xuICB2YXIgcGFyZW50Tm9kZSA9IG51bGw7XG5cbiAgb3V0ZXI6IHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIG5leHQgPSBudWxsO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlID09PSBhbmNob3JOb2RlICYmIChhbmNob3JPZmZzZXQgPT09IDAgfHwgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSkge1xuICAgICAgICBzdGFydCA9IGxlbmd0aCArIGFuY2hvck9mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZvY3VzTm9kZSAmJiAoZm9jdXNPZmZzZXQgPT09IDAgfHwgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSkge1xuICAgICAgICBlbmQgPSBsZW5ndGggKyBmb2N1c09mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgICBsZW5ndGggKz0gbm9kZS5ub2RlVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAoKG5leHQgPSBub2RlLmZpcnN0Q2hpbGQpID09PSBudWxsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBNb3ZpbmcgZnJvbSBgbm9kZWAgdG8gaXRzIGZpcnN0IGNoaWxkIGBuZXh0YC5cblxuXG4gICAgICBwYXJlbnROb2RlID0gbm9kZTtcbiAgICAgIG5vZGUgPSBuZXh0O1xuICAgIH1cblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZSA9PT0gb3V0ZXJOb2RlKSB7XG4gICAgICAgIC8vIElmIGBvdXRlck5vZGVgIGhhcyBjaGlsZHJlbiwgdGhpcyBpcyBhbHdheXMgdGhlIHNlY29uZCB0aW1lIHZpc2l0aW5nXG4gICAgICAgIC8vIGl0LiBJZiBpdCBoYXMgbm8gY2hpbGRyZW4sIHRoaXMgaXMgc3RpbGwgdGhlIGZpcnN0IGxvb3AsIGFuZCB0aGUgb25seVxuICAgICAgICAvLyB2YWxpZCBzZWxlY3Rpb24gaXMgYW5jaG9yTm9kZSBhbmQgZm9jdXNOb2RlIGJvdGggZXF1YWwgdG8gdGhpcyBub2RlXG4gICAgICAgIC8vIGFuZCBib3RoIG9mZnNldHMgMCwgaW4gd2hpY2ggY2FzZSB3ZSB3aWxsIGhhdmUgaGFuZGxlZCBhYm92ZS5cbiAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnROb2RlID09PSBhbmNob3JOb2RlICYmICsraW5kZXhXaXRoaW5BbmNob3IgPT09IGFuY2hvck9mZnNldCkge1xuICAgICAgICBzdGFydCA9IGxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGZvY3VzTm9kZSAmJiArK2luZGV4V2l0aGluRm9jdXMgPT09IGZvY3VzT2Zmc2V0KSB7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKChuZXh0ID0gbm9kZS5uZXh0U2libGluZykgIT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBwYXJlbnROb2RlO1xuICAgICAgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9IC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgbmV4dCBzaWJsaW5nIGBuZXh0YC5cblxuXG4gICAgbm9kZSA9IG5leHQ7XG4gIH1cblxuICBpZiAoc3RhcnQgPT09IC0xIHx8IGVuZCA9PT0gLTEpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uIChXb3VsZCBoYXBwZW4gaWYgdGhlIGFuY2hvci9mb2N1cyBub2RlcyBhcmVuJ3RcbiAgICAvLyBhY3R1YWxseSBpbnNpZGUgdGhlIHBhc3NlZC1pbiBub2RlLilcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kXG4gIH07XG59XG4vKipcbiAqIEluIG1vZGVybiBub24tSUUgYnJvd3NlcnMsIHdlIGNhbiBzdXBwb3J0IGJvdGggZm9yd2FyZCBhbmQgYmFja3dhcmRcbiAqIHNlbGVjdGlvbnMuXG4gKlxuICogTm90ZTogSUUxMCsgc3VwcG9ydHMgdGhlIFNlbGVjdGlvbiBvYmplY3QsIGJ1dCBpdCBkb2VzIG5vdCBzdXBwb3J0XG4gKiB0aGUgYGV4dGVuZGAgbWV0aG9kLCB3aGljaCBtZWFucyB0aGF0IGV2ZW4gaW4gbW9kZXJuIElFLCBpdCdzIG5vdCBwb3NzaWJsZVxuICogdG8gcHJvZ3JhbW1hdGljYWxseSBjcmVhdGUgYSBiYWNrd2FyZCBzZWxlY3Rpb24uIFRodXMsIGZvciBhbGwgSUVcbiAqIHZlcnNpb25zLCB3ZSB1c2UgdGhlIG9sZCBJRSBBUEkgdG8gY3JlYXRlIG91ciBzZWxlY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IG9mZnNldHNcbiAqL1xuXG5mdW5jdGlvbiBzZXRPZmZzZXRzKG5vZGUsIG9mZnNldHMpIHtcbiAgdmFyIGRvYyA9IG5vZGUub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcbiAgdmFyIHdpbiA9IGRvYyAmJiBkb2MuZGVmYXVsdFZpZXcgfHwgd2luZG93OyAvLyBFZGdlIGZhaWxzIHdpdGggXCJPYmplY3QgZXhwZWN0ZWRcIiBpbiBzb21lIHNjZW5hcmlvcy5cbiAgLy8gKEZvciBpbnN0YW5jZTogVGlueU1DRSBlZGl0b3IgdXNlZCBpbiBhIGxpc3QgY29tcG9uZW50IHRoYXQgc3VwcG9ydHMgcGFzdGluZyB0byBhZGQgbW9yZSxcbiAgLy8gZmFpbHMgd2hlbiBwYXN0aW5nIDEwMCsgaXRlbXMpXG5cbiAgaWYgKCF3aW4uZ2V0U2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24oKTtcbiAgdmFyIGxlbmd0aCA9IG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICB2YXIgc3RhcnQgPSBNYXRoLm1pbihvZmZzZXRzLnN0YXJ0LCBsZW5ndGgpO1xuICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQgPT09IHVuZGVmaW5lZCA/IHN0YXJ0IDogTWF0aC5taW4ob2Zmc2V0cy5lbmQsIGxlbmd0aCk7IC8vIElFIDExIHVzZXMgbW9kZXJuIHNlbGVjdGlvbiwgYnV0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZXh0ZW5kIG1ldGhvZC5cbiAgLy8gRmxpcCBiYWNrd2FyZCBzZWxlY3Rpb25zLCBzbyB3ZSBjYW4gc2V0IHdpdGggYSBzaW5nbGUgcmFuZ2UuXG5cbiAgaWYgKCFzZWxlY3Rpb24uZXh0ZW5kICYmIHN0YXJ0ID4gZW5kKSB7XG4gICAgdmFyIHRlbXAgPSBlbmQ7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSB0ZW1wO1xuICB9XG5cbiAgdmFyIHN0YXJ0TWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBzdGFydCk7XG4gIHZhciBlbmRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIGVuZCk7XG5cbiAgaWYgKHN0YXJ0TWFya2VyICYmIGVuZE1hcmtlcikge1xuICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMSAmJiBzZWxlY3Rpb24uYW5jaG9yTm9kZSA9PT0gc3RhcnRNYXJrZXIubm9kZSAmJiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0ID09PSBzdGFydE1hcmtlci5vZmZzZXQgJiYgc2VsZWN0aW9uLmZvY3VzTm9kZSA9PT0gZW5kTWFya2VyLm5vZGUgJiYgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0ID09PSBlbmRNYXJrZXIub2Zmc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJhbmdlID0gZG9jLmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnRNYXJrZXIubm9kZSwgc3RhcnRNYXJrZXIub2Zmc2V0KTtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgICBzZWxlY3Rpb24uZXh0ZW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2Uuc2V0RW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREU7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICBpZiAoIW91dGVyTm9kZSB8fCAhaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZSA9PT0gaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShvdXRlck5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUoaW5uZXJOb2RlKSkge1xuICAgIHJldHVybiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUucGFyZW50Tm9kZSk7XG4gIH0gZWxzZSBpZiAoJ2NvbnRhaW5zJyBpbiBvdXRlck5vZGUpIHtcbiAgICByZXR1cm4gb3V0ZXJOb2RlLmNvbnRhaW5zKGlubmVyTm9kZSk7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuICEhKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihpbm5lck5vZGUpICYgMTYpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luRG9jdW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm93bmVyRG9jdW1lbnQgJiYgY29udGFpbnNOb2RlKG5vZGUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVPcmlnaW5GcmFtZShpZnJhbWUpIHtcbiAgdHJ5IHtcbiAgICAvLyBBY2Nlc3NpbmcgdGhlIGNvbnRlbnREb2N1bWVudCBvZiBhIEhUTUxJZnJhbWVFbGVtZW50IGNhbiBjYXVzZSB0aGUgYnJvd3NlclxuICAgIC8vIHRvIHRocm93LCBlLmcuIGlmIGl0IGhhcyBhIGNyb3NzLW9yaWdpbiBzcmMgYXR0cmlidXRlLlxuICAgIC8vIFNhZmFyaSB3aWxsIHNob3cgYW4gZXJyb3IgaW4gdGhlIGNvbnNvbGUgd2hlbiB0aGUgYWNjZXNzIHJlc3VsdHMgaW4gXCJCbG9ja2VkIGEgZnJhbWUgd2l0aCBvcmlnaW5cIi4gZS5nOlxuICAgIC8vIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgLy8gQSBzYWZldHkgd2F5IGlzIHRvIGFjY2VzcyBvbmUgb2YgdGhlIGNyb3NzIG9yaWdpbiBwcm9wZXJ0aWVzOiBXaW5kb3cgb3IgTG9jYXRpb25cbiAgICAvLyBXaGljaCBtaWdodCByZXN1bHQgaW4gXCJTZWN1cml0eUVycm9yXCIgRE9NIEV4Y2VwdGlvbiBhbmQgaXQgaXMgY29tcGF0aWJsZSB0byBTYWZhcmkuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvYnJvd3NlcnMuaHRtbCNpbnRlZ3JhdGlvbi13aXRoLWlkbFxuICAgIHJldHVybiB0eXBlb2YgaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9PT0gJ3N0cmluZyc7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50RGVlcCgpIHtcbiAgdmFyIHdpbiA9IHdpbmRvdztcbiAgdmFyIGVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KCk7XG5cbiAgd2hpbGUgKGVsZW1lbnQgaW5zdGFuY2VvZiB3aW4uSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICBpZiAoaXNTYW1lT3JpZ2luRnJhbWUoZWxlbWVudCkpIHtcbiAgICAgIHdpbiA9IGVsZW1lbnQuY29udGVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQod2luLmRvY3VtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuLyoqXG4gKiBAUmVhY3RJbnB1dFNlbGVjdGlvbjogUmVhY3QgaW5wdXQgc2VsZWN0aW9uIG1vZHVsZS4gQmFzZWQgb24gU2VsZWN0aW9uLmpzLFxuICogYnV0IG1vZGlmaWVkIHRvIGJlIHN1aXRhYmxlIGZvciByZWFjdCBhbmQgaGFzIGEgY291cGxlIG9mIGJ1ZyBmaXhlcyAoZG9lc24ndFxuICogYXNzdW1lIGJ1dHRvbnMgaGF2ZSByYW5nZSBzZWxlY3Rpb25zIGFsbG93ZWQpLlxuICogSW5wdXQgc2VsZWN0aW9uIG1vZHVsZSBmb3IgUmVhY3QuXG4gKi9cblxuLyoqXG4gKiBAaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzOiB3ZSBnZXQgdGhlIGVsZW1lbnQgdHlwZXMgdGhhdCBzdXBwb3J0IHNlbGVjdGlvblxuICogZnJvbSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkby1ub3QtYXBwbHksIGxvb2tpbmcgYXQgYHNlbGVjdGlvblN0YXJ0YFxuICogYW5kIGBzZWxlY3Rpb25FbmRgIHJvd3MuXG4gKi9cblxuXG5mdW5jdGlvbiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgKG5vZGVOYW1lID09PSAnaW5wdXQnICYmIChlbGVtLnR5cGUgPT09ICd0ZXh0JyB8fCBlbGVtLnR5cGUgPT09ICdzZWFyY2gnIHx8IGVsZW0udHlwZSA9PT0gJ3RlbCcgfHwgZWxlbS50eXBlID09PSAndXJsJyB8fCBlbGVtLnR5cGUgPT09ICdwYXNzd29yZCcpIHx8IG5vZGVOYW1lID09PSAndGV4dGFyZWEnIHx8IGVsZW0uY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpO1xufVxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24oKSB7XG4gIHZhciBmb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKCk7XG4gIHJldHVybiB7XG4gICAgZm9jdXNlZEVsZW06IGZvY3VzZWRFbGVtLFxuICAgIHNlbGVjdGlvblJhbmdlOiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZm9jdXNlZEVsZW0pID8gZ2V0U2VsZWN0aW9uKGZvY3VzZWRFbGVtKSA6IG51bGxcbiAgfTtcbn1cbi8qKlxuICogQHJlc3RvcmVTZWxlY3Rpb246IElmIGFueSBzZWxlY3Rpb24gaW5mb3JtYXRpb24gd2FzIHBvdGVudGlhbGx5IGxvc3QsXG4gKiByZXN0b3JlIGl0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIHJlbW92ZSBkb21cbiAqIG5vZGVzIGFuZCBwbGFjZSB0aGVtIGJhY2sgaW4sIHJlc3VsdGluZyBpbiBmb2N1cyBiZWluZyBsb3N0LlxuICovXG5cbmZ1bmN0aW9uIHJlc3RvcmVTZWxlY3Rpb24ocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbikge1xuICB2YXIgY3VyRm9jdXNlZEVsZW0gPSBnZXRBY3RpdmVFbGVtZW50RGVlcCgpO1xuICB2YXIgcHJpb3JGb2N1c2VkRWxlbSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uZm9jdXNlZEVsZW07XG4gIHZhciBwcmlvclNlbGVjdGlvblJhbmdlID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5zZWxlY3Rpb25SYW5nZTtcblxuICBpZiAoY3VyRm9jdXNlZEVsZW0gIT09IHByaW9yRm9jdXNlZEVsZW0gJiYgaXNJbkRvY3VtZW50KHByaW9yRm9jdXNlZEVsZW0pKSB7XG4gICAgaWYgKHByaW9yU2VsZWN0aW9uUmFuZ2UgIT09IG51bGwgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKHByaW9yRm9jdXNlZEVsZW0pKSB7XG4gICAgICBzZXRTZWxlY3Rpb24ocHJpb3JGb2N1c2VkRWxlbSwgcHJpb3JTZWxlY3Rpb25SYW5nZSk7XG4gICAgfSAvLyBGb2N1c2luZyBhIG5vZGUgY2FuIGNoYW5nZSB0aGUgc2Nyb2xsIHBvc2l0aW9uLCB3aGljaCBpcyB1bmRlc2lyYWJsZVxuXG5cbiAgICB2YXIgYW5jZXN0b3JzID0gW107XG4gICAgdmFyIGFuY2VzdG9yID0gcHJpb3JGb2N1c2VkRWxlbTtcblxuICAgIHdoaWxlIChhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUpIHtcbiAgICAgIGlmIChhbmNlc3Rvci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIGFuY2VzdG9ycy5wdXNoKHtcbiAgICAgICAgICBlbGVtZW50OiBhbmNlc3RvcixcbiAgICAgICAgICBsZWZ0OiBhbmNlc3Rvci5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHRvcDogYW5jZXN0b3Iuc2Nyb2xsVG9wXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cygpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW5jZXN0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IGFuY2VzdG9yc1tpXTtcbiAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxMZWZ0ID0gaW5mby5sZWZ0O1xuICAgICAgaW5mby5lbGVtZW50LnNjcm9sbFRvcCA9IGluZm8udG9wO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBAZ2V0U2VsZWN0aW9uOiBHZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgZm9jdXNlZCB0ZXh0YXJlYSwgaW5wdXQgb3JcbiAqIGNvbnRlbnRFZGl0YWJsZSBub2RlLlxuICogLUBpbnB1dDogTG9vayB1cCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXRcbiAqIC1AcmV0dXJuIHtzdGFydDogc2VsZWN0aW9uU3RhcnQsIGVuZDogc2VsZWN0aW9uRW5kfVxuICovXG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbihpbnB1dCkge1xuICB2YXIgc2VsZWN0aW9uO1xuXG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgLy8gTW9kZXJuIGJyb3dzZXIgd2l0aCBpbnB1dCBvciB0ZXh0YXJlYS5cbiAgICBzZWxlY3Rpb24gPSB7XG4gICAgICBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gQ29udGVudCBlZGl0YWJsZSBvciBvbGQgSUUgdGV4dGFyZWEuXG4gICAgc2VsZWN0aW9uID0gZ2V0T2Zmc2V0cyhpbnB1dCk7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0aW9uIHx8IHtcbiAgICBzdGFydDogMCxcbiAgICBlbmQ6IDBcbiAgfTtcbn1cbi8qKlxuICogQHNldFNlbGVjdGlvbjogU2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIHRleHRhcmVhIG9yIGlucHV0IGFuZCBmb2N1c2VzXG4gKiB0aGUgaW5wdXQuXG4gKiAtQGlucHV0ICAgICBTZXQgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0IG9yIHRleHRhcmVhXG4gKiAtQG9mZnNldHMgICBPYmplY3Qgb2Ygc2FtZSBmb3JtIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBnZXQqXG4gKi9cblxuZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGlucHV0LCBvZmZzZXRzKSB7XG4gIHZhciBzdGFydCA9IG9mZnNldHMuc3RhcnQ7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZDtcblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSBzdGFydDtcbiAgfVxuXG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcbiAgICBpbnB1dC5zZWxlY3Rpb25FbmQgPSBNYXRoLm1pbihlbmQsIGlucHV0LnZhbHVlLmxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgc2V0T2Zmc2V0cyhpbnB1dCwgb2Zmc2V0cyk7XG4gIH1cbn1cblxudmFyIHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCA9IGNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUgPD0gMTE7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDMoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25TZWxlY3QnLCBbJ2ZvY3Vzb3V0JywgJ2NvbnRleHRtZW51JywgJ2RyYWdlbmQnLCAnZm9jdXNpbicsICdrZXlkb3duJywgJ2tleXVwJywgJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ3NlbGVjdGlvbmNoYW5nZSddKTtcbn1cblxudmFyIGFjdGl2ZUVsZW1lbnQkMSA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGw7XG52YXIgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG52YXIgbW91c2VEb3duID0gZmFsc2U7XG4vKipcbiAqIEdldCBhbiBvYmplY3Qgd2hpY2ggaXMgYSB1bmlxdWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLlxuICpcbiAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBub3QgYmUgY29uc2lzdGVudCBhY3Jvc3Mgbm9kZXMgb3IgYnJvd3NlcnMsIGJ1dFxuICogdHdvIGlkZW50aWNhbCBzZWxlY3Rpb25zIG9uIHRoZSBzYW1lIG5vZGUgd2lsbCByZXR1cm4gaWRlbnRpY2FsIG9iamVjdHMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uJDEobm9kZSkge1xuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBub2RlICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhub2RlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogbm9kZS5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogbm9kZS5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHZhciB3aW4gPSBub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICAgIHJldHVybiB7XG4gICAgICBhbmNob3JOb2RlOiBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgIGFuY2hvck9mZnNldDogc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZTogc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0OiBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICB9O1xuICB9XG59XG4vKipcbiAqIEdldCBkb2N1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50IHRhcmdldC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQoZXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIGV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gZXZlbnRUYXJnZXQgPyBldmVudFRhcmdldC5kb2N1bWVudCA6IGV2ZW50VGFyZ2V0Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gZXZlbnRUYXJnZXQgOiBldmVudFRhcmdldC5vd25lckRvY3VtZW50O1xufVxuLyoqXG4gKiBQb2xsIHNlbGVjdGlvbiB0byBzZWUgd2hldGhlciBpdCdzIGNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRUYXJnZXRcbiAqIEByZXR1cm4gez9TeW50aGV0aWNFdmVudH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZWxlbWVudCwgYW5kIHRoYXQgdGhlIHVzZXIgaXMgbm90IGRyYWdnaW5nIGFcbiAgLy8gc2VsZWN0aW9uICh0aGlzIG1hdGNoZXMgbmF0aXZlIGBzZWxlY3RgIGV2ZW50IGJlaGF2aW9yKS4gSW4gSFRNTDUsIHNlbGVjdFxuICAvLyBmaXJlcyBvbmx5IG9uIGlucHV0IGFuZCB0ZXh0YXJlYSB0aHVzIGlmIHRoZXJlJ3Mgbm8gZm9jdXNlZCBlbGVtZW50IHdlXG4gIC8vIHdvbid0IGRpc3BhdGNoLlxuICB2YXIgZG9jID0gZ2V0RXZlbnRUYXJnZXREb2N1bWVudChuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKG1vdXNlRG93biB8fCBhY3RpdmVFbGVtZW50JDEgPT0gbnVsbCB8fCBhY3RpdmVFbGVtZW50JDEgIT09IGdldEFjdGl2ZUVsZW1lbnQoZG9jKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBPbmx5IGZpcmUgd2hlbiBzZWxlY3Rpb24gaGFzIGFjdHVhbGx5IGNoYW5nZWQuXG5cblxuICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbiQxKGFjdGl2ZUVsZW1lbnQkMSk7XG5cbiAgaWYgKCFsYXN0U2VsZWN0aW9uIHx8ICFzaGFsbG93RXF1YWwobGFzdFNlbGVjdGlvbiwgY3VycmVudFNlbGVjdGlvbikpIHtcbiAgICBsYXN0U2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbjtcbiAgICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKGFjdGl2ZUVsZW1lbnRJbnN0JDEsICdvblNlbGVjdCcpO1xuXG4gICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoJ29uU2VsZWN0JywgJ3NlbGVjdCcsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgICB9KTtcbiAgICAgIGV2ZW50LnRhcmdldCA9IGFjdGl2ZUVsZW1lbnQkMTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyBhbiBgb25TZWxlY3RgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBzZWxlY3QgZXZlbnRzXG4gKiBhY3Jvc3MgZm9ybSBlbGVtZW50cy5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBjb250ZW50RWRpdGFibGVcbiAqXG4gKiBUaGlzIGRpZmZlcnMgZnJvbSBuYXRpdmUgYnJvd3NlciBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB3YXlzOlxuICogLSBGaXJlcyBvbiBjb250ZW50RWRpdGFibGUgZmllbGRzIGFzIHdlbGwgYXMgaW5wdXRzLlxuICogLSBGaXJlcyBmb3IgY29sbGFwc2VkIHNlbGVjdGlvbi5cbiAqIC0gRmlyZXMgYWZ0ZXIgdXNlciBpbnB1dC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG5cbiAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIC8vIFRyYWNrIHRoZSBpbnB1dCBub2RlIHRoYXQgaGFzIGZvY3VzLlxuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0YXJnZXROb2RlKSB8fCB0YXJnZXROb2RlLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQkMSA9IHRhcmdldE5vZGU7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSB0YXJnZXRJbnN0O1xuICAgICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICBhY3RpdmVFbGVtZW50JDEgPSBudWxsO1xuICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGw7XG4gICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuICAgIC8vIERvbid0IGZpcmUgdGhlIGV2ZW50IHdoaWxlIHRoZSB1c2VyIGlzIGRyYWdnaW5nLiBUaGlzIG1hdGNoZXMgdGhlXG4gICAgLy8gc2VtYW50aWNzIG9mIHRoZSBuYXRpdmUgc2VsZWN0IGV2ZW50LlxuXG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICAgIG1vdXNlRG93biA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NvbnRleHRtZW51JzpcbiAgICBjYXNlICdtb3VzZXVwJzpcbiAgICBjYXNlICdkcmFnZW5kJzpcbiAgICAgIG1vdXNlRG93biA9IGZhbHNlO1xuICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIGJyZWFrO1xuICAgIC8vIENocm9tZSBhbmQgSUUgZmlyZSBub24tc3RhbmRhcmQgZXZlbnQgd2hlbiBzZWxlY3Rpb24gaXMgY2hhbmdlZCAoYW5kXG4gICAgLy8gc29tZXRpbWVzIHdoZW4gaXQgaGFzbid0KS4gSUUncyBldmVudCBmaXJlcyBvdXQgb2Ygb3JkZXIgd2l0aCByZXNwZWN0XG4gICAgLy8gdG8ga2V5IGFuZCBpbnB1dCBldmVudHMgb24gZGVsZXRpb24sIHNvIHdlIGRpc2NhcmQgaXQuXG4gICAgLy9cbiAgICAvLyBGaXJlZm94IGRvZXNuJ3Qgc3VwcG9ydCBzZWxlY3Rpb25jaGFuZ2UsIHNvIGNoZWNrIHNlbGVjdGlvbiBzdGF0dXNcbiAgICAvLyBhZnRlciBlYWNoIGtleSBlbnRyeS4gVGhlIHNlbGVjdGlvbiBjaGFuZ2VzIGFmdGVyIGtleWRvd24gYW5kIGJlZm9yZVxuICAgIC8vIGtleXVwLCBidXQgd2UgY2hlY2sgb24ga2V5ZG93biBhcyB3ZWxsIGluIHRoZSBjYXNlIG9mIGhvbGRpbmcgZG93biBhXG4gICAgLy8ga2V5LCB3aGVuIG11bHRpcGxlIGtleWRvd24gZXZlbnRzIGFyZSBmaXJlZCBidXQgb25seSBvbmUga2V5dXAgaXMuXG4gICAgLy8gVGhpcyBpcyBhbHNvIG91ciBhcHByb2FjaCBmb3IgSUUgaGFuZGxpbmcsIGZvciB0aGUgcmVhc29uIGFib3ZlLlxuXG4gICAgY2FzZSAnc2VsZWN0aW9uY2hhbmdlJzpcbiAgICAgIGlmIChza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAvLyBmYWxscyB0aHJvdWdoXG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkNChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciByZWFjdE5hbWUgPSB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcy5nZXQoZG9tRXZlbnROYW1lKTtcblxuICBpZiAocmVhY3ROYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRXZlbnQ7XG4gIHZhciByZWFjdEV2ZW50VHlwZSA9IGRvbUV2ZW50TmFtZTtcblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGtleXByZXNzIGV2ZW50IGZvciBmdW5jdGlvbiBrZXlzIHRvby4gVGhpcyByZW1vdmVzXG4gICAgICAvLyB0aGUgdW53YW50ZWQga2V5cHJlc3MgZXZlbnRzLiBFbnRlciBpcyBob3dldmVyIGJvdGggcHJpbnRhYmxlIGFuZFxuICAgICAgLy8gbm9uLXByaW50YWJsZS4gT25lIHdvdWxkIGV4cGVjdCBUYWIgdG8gYmUgYXMgd2VsbCAoYnV0IGl0IGlzbid0KS5cbiAgICAgIGlmIChnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIHJlYWN0RXZlbnRUeXBlID0gJ2ZvY3VzJztcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIHJlYWN0RXZlbnRUeXBlID0gJ2JsdXInO1xuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYmVmb3JlYmx1cic6XG4gICAgY2FzZSAnYWZ0ZXJibHVyJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGNsaWNrIGV2ZW50IG9uIHJpZ2h0IG1vdXNlIGNsaWNrcy4gVGhpcyByZW1vdmVzIHRoZVxuICAgICAgLy8gdW53YW50ZWQgY2xpY2sgZXZlbnRzLlxuICAgICAgaWYgKG5hdGl2ZUV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdhdXhjbGljayc6XG4gICAgY2FzZSAnZGJsY2xpY2snOlxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgY2FzZSAnbW91c2Vtb3ZlJzpcbiAgICBjYXNlICdtb3VzZXVwJzogLy8gVE9ETzogRGlzYWJsZWQgZWxlbWVudHMgc2hvdWxkIG5vdCByZXNwb25kIHRvIG1vdXNlIGV2ZW50c1xuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAnbW91c2VvdXQnOlxuICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgY2FzZSAnY29udGV4dG1lbnUnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZHJhZyc6XG4gICAgY2FzZSAnZHJhZ2VuZCc6XG4gICAgY2FzZSAnZHJhZ2VudGVyJzpcbiAgICBjYXNlICdkcmFnZXhpdCc6XG4gICAgY2FzZSAnZHJhZ2xlYXZlJzpcbiAgICBjYXNlICdkcmFnb3Zlcic6XG4gICAgY2FzZSAnZHJhZ3N0YXJ0JzpcbiAgICBjYXNlICdkcm9wJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0RyYWdFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndG91Y2hjYW5jZWwnOlxuICAgIGNhc2UgJ3RvdWNoZW5kJzpcbiAgICBjYXNlICd0b3VjaG1vdmUnOlxuICAgIGNhc2UgJ3RvdWNoc3RhcnQnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVG91Y2hFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBBTklNQVRJT05fRU5EOlxuICAgIGNhc2UgQU5JTUFUSU9OX0lURVJBVElPTjpcbiAgICBjYXNlIEFOSU1BVElPTl9TVEFSVDpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFRSQU5TSVRJT05fRU5EOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVHJhbnNpdGlvbkV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzY3JvbGwnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVUlFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnd2hlZWwnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljV2hlZWxFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY29weSc6XG4gICAgY2FzZSAnY3V0JzpcbiAgICBjYXNlICdwYXN0ZSc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNDbGlwYm9hcmRFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ2xvc3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAncG9pbnRlcmNhbmNlbCc6XG4gICAgY2FzZSAncG9pbnRlcmRvd24nOlxuICAgIGNhc2UgJ3BvaW50ZXJtb3ZlJzpcbiAgICBjYXNlICdwb2ludGVyb3V0JzpcbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgY2FzZSAncG9pbnRlcnVwJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIGluQ2FwdHVyZVBoYXNlID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19DQVBUVVJFX1BIQVNFKSAhPT0gMDtcblxuICB7XG4gICAgLy8gU29tZSBldmVudHMgZG9uJ3QgYnViYmxlIGluIHRoZSBicm93c2VyLlxuICAgIC8vIEluIHRoZSBwYXN0LCBSZWFjdCBoYXMgYWx3YXlzIGJ1YmJsZWQgdGhlbSwgYnV0IHRoaXMgY2FuIGJlIHN1cnByaXNpbmcuXG4gICAgLy8gV2UncmUgZ29pbmcgdG8gdHJ5IGFsaWduaW5nIGNsb3NlciB0byB0aGUgYnJvd3NlciBiZWhhdmlvciBieSBub3QgYnViYmxpbmdcbiAgICAvLyB0aGVtIGluIFJlYWN0IGVpdGhlci4gV2UnbGwgc3RhcnQgYnkgbm90IGJ1YmJsaW5nIG9uU2Nyb2xsLCBhbmQgdGhlbiBleHBhbmQuXG4gICAgdmFyIGFjY3VtdWxhdGVUYXJnZXRPbmx5ID0gIWluQ2FwdHVyZVBoYXNlICYmIC8vIFRPRE86IGlkZWFsbHksIHdlJ2QgZXZlbnR1YWxseSBhZGQgYWxsIGV2ZW50cyBmcm9tXG4gICAgLy8gbm9uRGVsZWdhdGVkRXZlbnRzIGxpc3QgaW4gRE9NUGx1Z2luRXZlbnRTeXN0ZW0uXG4gICAgLy8gVGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgc3BlY2lhbCBsaXN0LlxuICAgIC8vIFRoaXMgaXMgYSBicmVha2luZyBjaGFuZ2UgdGhhdCBjYW4gd2FpdCB1bnRpbCBSZWFjdCAxOC5cbiAgICBkb21FdmVudE5hbWUgPT09ICdzY3JvbGwnO1xuXG4gICAgdmFyIF9saXN0ZW5lcnMgPSBhY2N1bXVsYXRlU2luZ2xlUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgcmVhY3ROYW1lLCBuYXRpdmVFdmVudC50eXBlLCBpbkNhcHR1cmVQaGFzZSwgYWNjdW11bGF0ZVRhcmdldE9ubHkpO1xuXG4gICAgaWYgKF9saXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBjcmVhdGUgZXZlbnQgbGF6aWx5LlxuICAgICAgdmFyIF9ldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IocmVhY3ROYW1lLCByZWFjdEV2ZW50VHlwZSwgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgZXZlbnQ6IF9ldmVudCxcbiAgICAgICAgbGlzdGVuZXJzOiBfbGlzdGVuZXJzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETzogcmVtb3ZlIHRvcC1sZXZlbCBzaWRlIGVmZmVjdC5cbnJlZ2lzdGVyU2ltcGxlRXZlbnRzKCk7XG5yZWdpc3RlckV2ZW50cyQyKCk7XG5yZWdpc3RlckV2ZW50cyQxKCk7XG5yZWdpc3RlckV2ZW50cyQzKCk7XG5yZWdpc3RlckV2ZW50cygpO1xuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDUoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICAvLyBUT0RPOiB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBjb25jZXB0IG9mIGEgXCJTaW1wbGVFdmVudFBsdWdpblwiLlxuICAvLyBUaGlzIGlzIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIHRoZSBldmVudCBzeXN0ZW0uIEFsbFxuICAvLyB0aGUgb3RoZXIgcGx1Z2lucyBhcmUgZXNzZW50aWFsbHkgcG9seWZpbGxzLiBTbyB0aGUgcGx1Z2luXG4gIC8vIHNob3VsZCBwcm9iYWJseSBiZSBpbmxpbmVkIHNvbWV3aGVyZSBhbmQgaGF2ZSBpdHMgbG9naWNcbiAgLy8gYmUgY29yZSB0aGUgdG8gZXZlbnQgc3lzdGVtLiBUaGlzIHdvdWxkIHBvdGVudGlhbGx5IGFsbG93XG4gIC8vIHVzIHRvIHNoaXAgYnVpbGRzIG9mIFJlYWN0IHdpdGhvdXQgdGhlIHBvbHlmaWxsZWQgcGx1Z2lucyBiZWxvdy5cbiAgZXh0cmFjdEV2ZW50cyQ0KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgdmFyIHNob3VsZFByb2Nlc3NQb2x5ZmlsbFBsdWdpbnMgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIFNIT1VMRF9OT1RfUFJPQ0VTU19QT0xZRklMTF9FVkVOVF9QTFVHSU5TKSA9PT0gMDsgLy8gV2UgZG9uJ3QgcHJvY2VzcyB0aGVzZSBldmVudHMgdW5sZXNzIHdlIGFyZSBpbiB0aGVcbiAgLy8gZXZlbnQncyBuYXRpdmUgXCJidWJibGVcIiBwaGFzZSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSdyZVxuICAvLyBub3QgaW4gdGhlIGNhcHR1cmUgcGhhc2UuIFRoYXQncyBiZWNhdXNlIHdlIGVtdWxhdGVcbiAgLy8gdGhlIGNhcHR1cmUgcGhhc2UgaGVyZSBzdGlsbC4gVGhpcyBpcyBhIHRyYWRlLW9mZixcbiAgLy8gYmVjYXVzZSBpbiBhbiBpZGVhbCB3b3JsZCB3ZSB3b3VsZCBub3QgZW11bGF0ZSBhbmQgdXNlXG4gIC8vIHRoZSBwaGFzZXMgcHJvcGVybHksIGxpa2Ugd2UgZG8gd2l0aCB0aGUgU2ltcGxlRXZlbnRcbiAgLy8gcGx1Z2luLiBIb3dldmVyLCB0aGUgcGx1Z2lucyBiZWxvdyBlaXRoZXIgZXhwZWN0XG4gIC8vIGVtdWxhdGlvbiAoRW50ZXJMZWF2ZSkgb3IgdXNlIHN0YXRlIGxvY2FsaXplZCB0byB0aGF0XG4gIC8vIHBsdWdpbiAoQmVmb3JlSW5wdXQsIENoYW5nZSwgU2VsZWN0KS4gVGhlIHN0YXRlIGluXG4gIC8vIHRoZXNlIG1vZHVsZXMgY29tcGxpY2F0ZXMgdGhpbmdzLCBhcyB5b3UnbGwgZXNzZW50aWFsbHlcbiAgLy8gZ2V0IHRoZSBjYXNlIHdoZXJlIHRoZSBjYXB0dXJlIHBoYXNlIGV2ZW50IG1pZ2h0IGNoYW5nZVxuICAvLyBzdGF0ZSwgb25seSBmb3IgdGhlIGZvbGxvd2luZyBidWJibGUgZXZlbnQgdG8gY29tZSBpblxuICAvLyBsYXRlciBhbmQgbm90IHRyaWdnZXIgYW55dGhpbmcgYXMgdGhlIHN0YXRlIG5vd1xuICAvLyBpbnZhbGlkYXRlcyB0aGUgaGV1cmlzdGljcyBvZiB0aGUgZXZlbnQgcGx1Z2luLiBXZVxuICAvLyBjb3VsZCBhbHRlciBhbGwgdGhlc2UgcGx1Z2lucyB0byB3b3JrIGluIHN1Y2ggd2F5cywgYnV0XG4gIC8vIHRoYXQgbWlnaHQgY2F1c2Ugb3RoZXIgdW5rbm93biBzaWRlLWVmZmVjdHMgdGhhdCB3ZVxuICAvLyBjYW4ndCBmb3JzZWUgcmlnaHQgbm93LlxuXG4gIGlmIChzaG91bGRQcm9jZXNzUG9seWZpbGxQbHVnaW5zKSB7XG4gICAgZXh0cmFjdEV2ZW50cyQyKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgICBleHRyYWN0RXZlbnRzJDEoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGV4dHJhY3RFdmVudHMkMyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZXh0cmFjdEV2ZW50cyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIH1cbn0gLy8gTGlzdCBvZiBldmVudHMgdGhhdCBuZWVkIHRvIGJlIGluZGl2aWR1YWxseSBhdHRhY2hlZCB0byBtZWRpYSBlbGVtZW50cy5cblxuXG52YXIgbWVkaWFFdmVudFR5cGVzID0gWydhYm9ydCcsICdjYW5wbGF5JywgJ2NhbnBsYXl0aHJvdWdoJywgJ2R1cmF0aW9uY2hhbmdlJywgJ2VtcHRpZWQnLCAnZW5jcnlwdGVkJywgJ2VuZGVkJywgJ2Vycm9yJywgJ2xvYWRlZGRhdGEnLCAnbG9hZGVkbWV0YWRhdGEnLCAnbG9hZHN0YXJ0JywgJ3BhdXNlJywgJ3BsYXknLCAncGxheWluZycsICdwcm9ncmVzcycsICdyYXRlY2hhbmdlJywgJ3NlZWtlZCcsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3VzcGVuZCcsICd0aW1ldXBkYXRlJywgJ3ZvbHVtZWNoYW5nZScsICd3YWl0aW5nJ107IC8vIFdlIHNob3VsZCBub3QgZGVsZWdhdGUgdGhlc2UgZXZlbnRzIHRvIHRoZSBjb250YWluZXIsIGJ1dCByYXRoZXJcbi8vIHNldCB0aGVtIG9uIHRoZSBhY3R1YWwgdGFyZ2V0IGVsZW1lbnQgaXRzZWxmLiBUaGlzIGlzIHByaW1hcmlseVxuLy8gYmVjYXVzZSB0aGVzZSBldmVudHMgZG8gbm90IGNvbnNpc3RlbnRseSBidWJibGUgaW4gdGhlIERPTS5cblxudmFyIG5vbkRlbGVnYXRlZEV2ZW50cyA9IG5ldyBTZXQoWydjYW5jZWwnLCAnY2xvc2UnLCAnaW52YWxpZCcsICdsb2FkJywgJ3Njcm9sbCcsICd0b2dnbGUnXS5jb25jYXQobWVkaWFFdmVudFR5cGVzKSk7XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgdmFyIHR5cGUgPSBldmVudC50eXBlIHx8ICd1bmtub3duLWV2ZW50JztcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcih0eXBlLCBsaXN0ZW5lciwgdW5kZWZpbmVkLCBldmVudCk7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzRGlzcGF0Y2hRdWV1ZUl0ZW1zSW5PcmRlcihldmVudCwgZGlzcGF0Y2hMaXN0ZW5lcnMsIGluQ2FwdHVyZVBoYXNlKSB7XG4gIHZhciBwcmV2aW91c0luc3RhbmNlO1xuXG4gIGlmIChpbkNhcHR1cmVQaGFzZSkge1xuICAgIGZvciAodmFyIGkgPSBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIF9kaXNwYXRjaExpc3RlbmVycyRpID0gZGlzcGF0Y2hMaXN0ZW5lcnNbaV0sXG4gICAgICAgICAgaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5pbnN0YW5jZSxcbiAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuY3VycmVudFRhcmdldCxcbiAgICAgICAgICBsaXN0ZW5lciA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmxpc3RlbmVyO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgIT09IHByZXZpb3VzSW5zdGFuY2UgJiYgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpO1xuICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJF9pID0gZGlzcGF0Y2hMaXN0ZW5lcnNbX2ldLFxuICAgICAgICAgIF9pbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5pbnN0YW5jZSxcbiAgICAgICAgICBfY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgIF9saXN0ZW5lciA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5saXN0ZW5lcjtcblxuICAgICAgaWYgKF9pbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBfbGlzdGVuZXIsIF9jdXJyZW50VGFyZ2V0KTtcbiAgICAgIHByZXZpb3VzSW5zdGFuY2UgPSBfaW5zdGFuY2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgdmFyIGluQ2FwdHVyZVBoYXNlID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19DQVBUVVJFX1BIQVNFKSAhPT0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoUXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX2Rpc3BhdGNoUXVldWUkaSA9IGRpc3BhdGNoUXVldWVbaV0sXG4gICAgICAgIGV2ZW50ID0gX2Rpc3BhdGNoUXVldWUkaS5ldmVudCxcbiAgICAgICAgbGlzdGVuZXJzID0gX2Rpc3BhdGNoUXVldWUkaS5saXN0ZW5lcnM7XG4gICAgcHJvY2Vzc0Rpc3BhdGNoUXVldWVJdGVtc0luT3JkZXIoZXZlbnQsIGxpc3RlbmVycywgaW5DYXB0dXJlUGhhc2UpOyAvLyAgZXZlbnQgc3lzdGVtIGRvZXNuJ3QgdXNlIHBvb2xpbmcuXG4gIH0gLy8gVGhpcyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byByZXRocm93IGlmIGFueSBvZiB0aGUgZXZlbnQgaGFuZGxlcnMgdGhyZXcuXG5cblxuICByZXRocm93Q2F1Z2h0RXJyb3IoKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudHNGb3JQbHVnaW5zKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCk7XG4gIHZhciBkaXNwYXRjaFF1ZXVlID0gW107XG4gIGV4dHJhY3RFdmVudHMkNShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpO1xufVxuXG5mdW5jdGlvbiBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0RWxlbWVudCkge1xuICB2YXIgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciA9IGZhbHNlO1xuICB2YXIgbGlzdGVuZXJTZXQgPSBnZXRFdmVudExpc3RlbmVyU2V0KHRhcmdldEVsZW1lbnQpO1xuICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xuXG4gIGlmICghbGlzdGVuZXJTZXQuaGFzKGxpc3RlbmVyU2V0S2V5KSkge1xuICAgIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldEVsZW1lbnQsIGRvbUV2ZW50TmFtZSwgSVNfTk9OX0RFTEVHQVRFRCwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG4gICAgbGlzdGVuZXJTZXQuYWRkKGxpc3RlbmVyU2V0S2V5KTtcbiAgfVxufVxudmFyIGxpc3RlbmluZ01hcmtlciA9ICdfcmVhY3RMaXN0ZW5pbmcnICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG5mdW5jdGlvbiBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhyb290Q29udGFpbmVyRWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0pIHtcbiAgICAgIC8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogZG9uJ3QgaXRlcmF0ZSB0aHJvdWdoIGV2ZW50c1xuICAgICAgLy8gZm9yIHRoZSBzYW1lIHBvcnRhbCBjb250YWluZXIgb3Igcm9vdCBub2RlIG1vcmUgdGhhbiBvbmNlLlxuICAgICAgLy8gVE9ETzogb25jZSB3ZSByZW1vdmUgdGhlIGZsYWcsIHdlIG1heSBiZSBhYmxlIHRvIGFsc29cbiAgICAgIC8vIHJlbW92ZSBzb21lIG9mIHRoZSBib29ra2VlcGluZyBtYXBzIHVzZWQgZm9yIGxhemluZXNzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0gPSB0cnVlO1xuICAgIGFsbE5hdGl2ZUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChkb21FdmVudE5hbWUpIHtcbiAgICAgIGlmICghbm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpKSB7XG4gICAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCBmYWxzZSwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgdHJ1ZSwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG51bGwpO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciwgcm9vdENvbnRhaW5lckVsZW1lbnQsIHRhcmdldEVsZW1lbnQpIHtcbiAgdmFyIGV2ZW50U3lzdGVtRmxhZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IDA7XG4gIHZhciB0YXJnZXQgPSByb290Q29udGFpbmVyRWxlbWVudDsgLy8gc2VsZWN0aW9uY2hhbmdlIG5lZWRzIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBkb2N1bWVudFxuICAvLyBvdGhlcndpc2UgaXQgd29uJ3QgY2FwdHVyZSBpbmNvbWluZyBldmVudHMgdGhhdCBhcmUgb25seVxuICAvLyB0cmlnZ2VyZWQgb24gdGhlIGRvY3VtZW50IGRpcmVjdGx5LlxuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdzZWxlY3Rpb25jaGFuZ2UnICYmIHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlICE9PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgdGFyZ2V0ID0gcm9vdENvbnRhaW5lckVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgfSAvLyBJZiB0aGUgZXZlbnQgY2FuIGJlIGRlbGVnYXRlZCAob3IgaXMgY2FwdHVyZSBwaGFzZSksIHdlIGNhblxuICAvLyByZWdpc3RlciBpdCB0byB0aGUgcm9vdCBjb250YWluZXIuIE90aGVyd2lzZSwgd2Ugc2hvdWxkXG4gIC8vIHJlZ2lzdGVyIHRoZSBldmVudCB0byB0aGUgdGFyZ2V0IGVsZW1lbnQgYW5kIG1hcmsgaXQgYXNcbiAgLy8gYSBub24tZGVsZWdhdGVkIGV2ZW50LlxuXG5cbiAgaWYgKHRhcmdldEVsZW1lbnQgIT09IG51bGwgJiYgIWlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgJiYgbm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpKSB7XG4gICAgLy8gRm9yIGFsbCBub24tZGVsZWdhdGVkIGV2ZW50cywgYXBhcnQgZnJvbSBzY3JvbGwsIHdlIGF0dGFjaFxuICAgIC8vIHRoZWlyIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgcmVzcGVjdGl2ZSBlbGVtZW50cyB0aGF0IHRoZWlyXG4gICAgLy8gZXZlbnRzIGZpcmUgb24uIFRoYXQgbWVhbnMgd2UgY2FuIHNraXAgdGhpcyBzdGVwLCBhcyBldmVudFxuICAgIC8vIGxpc3RlbmVyIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgcHJldmlvdXNseS4gSG93ZXZlciwgd2VcbiAgICAvLyBzcGVjaWFsIGNhc2UgdGhlIHNjcm9sbCBldmVudCBiZWNhdXNlIHRoZSByZWFsaXR5IGlzIHRoYXQgYW55XG4gICAgLy8gZWxlbWVudCBjYW4gc2Nyb2xsLlxuICAgIC8vIFRPRE86IGlkZWFsbHksIHdlJ2QgZXZlbnR1YWxseSBhcHBseSB0aGUgc2FtZSBsb2dpYyB0byBhbGxcbiAgICAvLyBldmVudHMgZnJvbSB0aGUgbm9uRGVsZWdhdGVkRXZlbnRzIGxpc3QuIFRoZW4gd2UgY2FuIHJlbW92ZVxuICAgIC8vIHRoaXMgc3BlY2lhbCBjYXNlIGFuZCB1c2UgdGhlIHNhbWUgbG9naWMgZm9yIGFsbCBldmVudHMuXG4gICAgaWYgKGRvbUV2ZW50TmFtZSAhPT0gJ3Njcm9sbCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudFN5c3RlbUZsYWdzIHw9IElTX05PTl9ERUxFR0FURUQ7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0RWxlbWVudDtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lclNldCA9IGdldEV2ZW50TGlzdGVuZXJTZXQodGFyZ2V0KTtcbiAgdmFyIGxpc3RlbmVyU2V0S2V5ID0gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTsgLy8gSWYgdGhlIGxpc3RlbmVyIGVudHJ5IGlzIGVtcHR5IG9yIHdlIHNob3VsZCB1cGdyYWRlLCB0aGVuXG4gIC8vIHdlIG5lZWQgdG8gdHJhcCBhbiBldmVudCBsaXN0ZW5lciBvbnRvIHRoZSB0YXJnZXQuXG5cbiAgaWYgKCFsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpKSB7XG4gICAgaWYgKGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpIHtcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MgfD0gSVNfQ0FQVFVSRV9QSEFTRTtcbiAgICB9XG5cbiAgICBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXQsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG4gICAgbGlzdGVuZXJTZXQuYWRkKGxpc3RlbmVyU2V0S2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciwgaXNEZWZlcnJlZExpc3RlbmVyRm9yTGVnYWN5RkJTdXBwb3J0KSB7XG4gIHZhciBsaXN0ZW5lciA9IGNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyV2l0aFByaW9yaXR5KHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzKTsgLy8gSWYgcGFzc2l2ZSBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCwgdGhlbiB0aGUgZXZlbnQgd2lsbCBiZVxuICAvLyBhY3RpdmUgYW5kIG5vdCBwYXNzaXZlLlxuXG4gIHZhciBpc1Bhc3NpdmVMaXN0ZW5lciA9IHVuZGVmaW5lZDtcblxuICBpZiAocGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQpIHtcbiAgICAvLyBCcm93c2VycyBpbnRyb2R1Y2VkIGFuIGludGVydmVudGlvbiwgbWFraW5nIHRoZXNlIGV2ZW50c1xuICAgIC8vIHBhc3NpdmUgYnkgZGVmYXVsdCBvbiBkb2N1bWVudC4gUmVhY3QgZG9lc24ndCBiaW5kIHRoZW1cbiAgICAvLyB0byBkb2N1bWVudCBhbnltb3JlLCBidXQgY2hhbmdpbmcgdGhpcyBub3cgd291bGQgdW5kb1xuICAgIC8vIHRoZSBwZXJmb3JtYW5jZSB3aW5zIGZyb20gdGhlIGNoYW5nZS4gU28gd2UgZW11bGF0ZVxuICAgIC8vIHRoZSBleGlzdGluZyBiZWhhdmlvciBtYW51YWxseSBvbiB0aGUgcm9vdHMgbm93LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTk2NTFcbiAgICBpZiAoZG9tRXZlbnROYW1lID09PSAndG91Y2hzdGFydCcgfHwgZG9tRXZlbnROYW1lID09PSAndG91Y2htb3ZlJyB8fCBkb21FdmVudE5hbWUgPT09ICd3aGVlbCcpIHtcbiAgICAgIGlzUGFzc2l2ZUxpc3RlbmVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0YXJnZXRDb250YWluZXIgPSAgdGFyZ2V0Q29udGFpbmVyO1xuICB2YXIgdW5zdWJzY3JpYmVMaXN0ZW5lcjsgLy8gV2hlbiBsZWdhY3lGQlN1cHBvcnQgaXMgZW5hYmxlZCwgaXQncyBmb3Igd2hlbiB3ZVxuXG5cbiAgaWYgKGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpIHtcbiAgICBpZiAoaXNQYXNzaXZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lciwgaXNQYXNzaXZlTGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXIodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzUGFzc2l2ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lciwgaXNQYXNzaXZlTGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc01hdGNoaW5nUm9vdENvbnRhaW5lcihncmFuZENvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHJldHVybiBncmFuZENvbnRhaW5lciA9PT0gdGFyZ2V0Q29udGFpbmVyIHx8IGdyYW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgJiYgZ3JhbmRDb250YWluZXIucGFyZW50Tm9kZSA9PT0gdGFyZ2V0Q29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBhbmNlc3Rvckluc3QgPSB0YXJnZXRJbnN0O1xuXG4gIGlmICgoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFKSA9PT0gMCAmJiAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX05PTl9ERUxFR0FURUQpID09PSAwKSB7XG4gICAgdmFyIHRhcmdldENvbnRhaW5lck5vZGUgPSB0YXJnZXRDb250YWluZXI7IC8vIElmIHdlIGFyZSB1c2luZyB0aGUgbGVnYWN5IEZCIHN1cHBvcnQgZmxhZywgd2VcblxuICAgIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGUgYmVsb3cgbG9naWMgYXR0ZW1wdHMgdG8gd29yayBvdXQgaWYgd2UgbmVlZCB0byBjaGFuZ2VcbiAgICAgIC8vIHRoZSB0YXJnZXQgZmliZXIgdG8gYSBkaWZmZXJlbnQgYW5jZXN0b3IuIFdlIGhhZCBzaW1pbGFyIGxvZ2ljXG4gICAgICAvLyBpbiB0aGUgbGVnYWN5IGV2ZW50IHN5c3RlbSwgZXhjZXB0IHRoZSBiaWcgZGlmZmVyZW5jZSBiZXR3ZWVuXG4gICAgICAvLyBzeXN0ZW1zIGlzIHRoYXQgdGhlIG1vZGVybiBldmVudCBzeXN0ZW0gbm93IGhhcyBhbiBldmVudCBsaXN0ZW5lclxuICAgICAgLy8gYXR0YWNoZWQgdG8gZWFjaCBSZWFjdCBSb290IGFuZCBSZWFjdCBQb3J0YWwgUm9vdC4gVG9nZXRoZXIsXG4gICAgICAvLyB0aGUgRE9NIG5vZGVzIHJlcHJlc2VudGluZyB0aGVzZSByb290cyBhcmUgdGhlIFwicm9vdENvbnRhaW5lclwiLlxuICAgICAgLy8gVG8gZmlndXJlIG91dCB3aGljaCBhbmNlc3RvciBpbnN0YW5jZSB3ZSBzaG91bGQgdXNlLCB3ZSB0cmF2ZXJzZVxuICAgICAgLy8gdXAgdGhlIGZpYmVyIHRyZWUgZnJvbSB0aGUgdGFyZ2V0IGluc3RhbmNlIGFuZCBhdHRlbXB0IHRvIGZpbmRcbiAgICAgIC8vIHJvb3QgYm91bmRhcmllcyB0aGF0IG1hdGNoIHRoYXQgb2Ygb3VyIGN1cnJlbnQgXCJyb290Q29udGFpbmVyXCIuXG4gICAgICAvLyBJZiB3ZSBmaW5kIHRoYXQgXCJyb290Q29udGFpbmVyXCIsIHdlIGZpbmQgdGhlIHBhcmVudCBmaWJlclxuICAgICAgLy8gc3ViLXRyZWUgZm9yIHRoYXQgcm9vdCBhbmQgbWFrZSB0aGF0IG91ciBhbmNlc3RvciBpbnN0YW5jZS5cbiAgICAgIHZhciBub2RlID0gdGFyZ2V0SW5zdDtcblxuICAgICAgbWFpbkxvb3A6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5vZGVUYWcgPSBub2RlLnRhZztcblxuICAgICAgICBpZiAobm9kZVRhZyA9PT0gSG9zdFJvb3QgfHwgbm9kZVRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgIHZhciBjb250YWluZXIgPSBub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgaWYgKGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGNvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChub2RlVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgICAvLyBUaGUgdGFyZ2V0IGlzIGEgcG9ydGFsLCBidXQgaXQncyBub3QgdGhlIHJvb3RDb250YWluZXIgd2UncmUgbG9va2luZyBmb3IuXG4gICAgICAgICAgICAvLyBOb3JtYWxseSBwb3J0YWxzIGhhbmRsZSB0aGVpciBvd24gZXZlbnRzIGFsbCB0aGUgd2F5IGRvd24gdG8gdGhlIHJvb3QuXG4gICAgICAgICAgICAvLyBTbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBzdG9wIG5vdy4gSG93ZXZlciwgd2UgZG9uJ3Qga25vdyBpZiB0aGlzIHBvcnRhbFxuICAgICAgICAgICAgLy8gd2FzIHBhcnQgb2YgKm91ciogcm9vdC5cbiAgICAgICAgICAgIHZhciBncmFuZE5vZGUgPSBub2RlLnJldHVybjtcblxuICAgICAgICAgICAgd2hpbGUgKGdyYW5kTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgZ3JhbmRUYWcgPSBncmFuZE5vZGUudGFnO1xuXG4gICAgICAgICAgICAgIGlmIChncmFuZFRhZyA9PT0gSG9zdFJvb3QgfHwgZ3JhbmRUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgZ3JhbmRDb250YWluZXIgPSBncmFuZE5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoZ3JhbmRDb250YWluZXIsIHRhcmdldENvbnRhaW5lck5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSByb290Q29udGFpbmVyIHdlJ3JlIGxvb2tpbmcgZm9yIGFuZCB3ZSBmb3VuZCBpdCBhc1xuICAgICAgICAgICAgICAgICAgLy8gYSBwYXJlbnQgb2YgdGhlIFBvcnRhbC4gVGhhdCBtZWFucyB3ZSBjYW4gaWdub3JlIGl0IGJlY2F1c2UgdGhlXG4gICAgICAgICAgICAgICAgICAvLyBQb3J0YWwgd2lsbCBidWJibGUgdGhyb3VnaCB0byB1cy5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBncmFuZE5vZGUgPSBncmFuZE5vZGUucmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gTm93IHdlIG5lZWQgdG8gZmluZCBpdCdzIGNvcnJlc3BvbmRpbmcgaG9zdCBmaWJlciBpbiB0aGUgb3RoZXJcbiAgICAgICAgICAvLyB0cmVlLiBUbyBkbyB0aGlzIHdlIGNhbiB1c2UgZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUsIGJ1dCB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGUgZmliZXIgaXMgYSBob3N0IGluc3RhbmNlLCBvdGhlcndpc2VcbiAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHRyYXZlcnNlIHVwIHRocm91Z2ggdGhlIERPTSB0aWxsIHdlIGZpbmQgdGhlIGNvcnJlY3RcbiAgICAgICAgICAvLyBub2RlIHRoYXQgaXMgZnJvbSB0aGUgb3RoZXIgdHJlZS5cblxuXG4gICAgICAgICAgd2hpbGUgKGNvbnRhaW5lciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHBhcmVudE5vZGUgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShjb250YWluZXIpO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwYXJlbnRUYWcgPSBwYXJlbnROb2RlLnRhZztcblxuICAgICAgICAgICAgaWYgKHBhcmVudFRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBwYXJlbnRUYWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgICAgICAgIG5vZGUgPSBhbmNlc3Rvckluc3QgPSBwYXJlbnROb2RlO1xuICAgICAgICAgICAgICBjb250aW51ZSBtYWluTG9vcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJhdGNoZWRFdmVudFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50c0ZvclBsdWdpbnMoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgYW5jZXN0b3JJbnN0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSB7XG4gIHJldHVybiB7XG4gICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgIGxpc3RlbmVyOiBsaXN0ZW5lcixcbiAgICBjdXJyZW50VGFyZ2V0OiBjdXJyZW50VGFyZ2V0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVTaW5nbGVQaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lLCBuYXRpdmVFdmVudFR5cGUsIGluQ2FwdHVyZVBoYXNlLCBhY2N1bXVsYXRlVGFyZ2V0T25seSkge1xuICB2YXIgY2FwdHVyZU5hbWUgPSByZWFjdE5hbWUgIT09IG51bGwgPyByZWFjdE5hbWUgKyAnQ2FwdHVyZScgOiBudWxsO1xuICB2YXIgcmVhY3RFdmVudE5hbWUgPSBpbkNhcHR1cmVQaGFzZSA/IGNhcHR1cmVOYW1lIDogcmVhY3ROYW1lO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldEZpYmVyO1xuICB2YXIgbGFzdEhvc3RDb21wb25lbnQgPSBudWxsOyAvLyBBY2N1bXVsYXRlIGFsbCBpbnN0YW5jZXMgYW5kIGxpc3RlbmVycyB2aWEgdGhlIHRhcmdldCAtPiByb290IHBhdGguXG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgdmFyIF9pbnN0YW5jZTIgPSBpbnN0YW5jZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlMi5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTIudGFnOyAvLyBIYW5kbGUgbGlzdGVuZXJzIHRoYXQgYXJlIG9uIEhvc3RDb21wb25lbnRzIChpLmUuIDxkaXY+KVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGxhc3RIb3N0Q29tcG9uZW50ID0gc3RhdGVOb2RlOyAvLyBjcmVhdGVFdmVudEhhbmRsZSBsaXN0ZW5lcnNcblxuXG4gICAgICBpZiAocmVhY3RFdmVudE5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlYWN0RXZlbnROYW1lKTtcblxuICAgICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGxpc3RlbmVyLCBsYXN0SG9zdENvbXBvbmVudCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBJZiB3ZSBhcmUgb25seSBhY2N1bXVsYXRpbmcgZXZlbnRzIGZvciB0aGUgdGFyZ2V0LCB0aGVuIHdlIGRvbid0XG4gICAgLy8gY29udGludWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggdGhlIFJlYWN0IGZpYmVyIHRyZWUgdG8gZmluZCBvdGhlclxuICAgIC8vIGxpc3RlbmVycy5cblxuXG4gICAgaWYgKGFjY3VtdWxhdGVUYXJnZXRPbmx5KSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcnM7XG59IC8vIFdlIHNob3VsZCBvbmx5IHVzZSB0aGlzIGZ1bmN0aW9uIGZvcjpcbi8vIC0gQmVmb3JlSW5wdXRFdmVudFBsdWdpblxuLy8gLSBDaGFuZ2VFdmVudFBsdWdpblxuLy8gLSBTZWxlY3RFdmVudFBsdWdpblxuLy8gVGhpcyBpcyBiZWNhdXNlIHdlIG9ubHkgcHJvY2VzcyB0aGVzZSBwbHVnaW5zXG4vLyBpbiB0aGUgYnViYmxlIHBoYXNlLCBzbyB3ZSBuZWVkIHRvIGFjY3VtdWxhdGUgdHdvXG4vLyBwaGFzZSBldmVudCBsaXN0ZW5lcnMgKHZpYSBlbXVsYXRpb24pLlxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0RmliZXIsIHJlYWN0TmFtZSkge1xuICB2YXIgY2FwdHVyZU5hbWUgPSByZWFjdE5hbWUgKyAnQ2FwdHVyZSc7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0RmliZXI7IC8vIEFjY3VtdWxhdGUgYWxsIGluc3RhbmNlcyBhbmQgbGlzdGVuZXJzIHZpYSB0aGUgdGFyZ2V0IC0+IHJvb3QgcGF0aC5cblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICB2YXIgX2luc3RhbmNlMyA9IGluc3RhbmNlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2UzLnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlMy50YWc7IC8vIEhhbmRsZSBsaXN0ZW5lcnMgdGhhdCBhcmUgb24gSG9zdENvbXBvbmVudHMgKGkuZS4gPGRpdj4pXG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUYXJnZXQgPSBzdGF0ZU5vZGU7XG4gICAgICB2YXIgY2FwdHVyZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIGNhcHR1cmVOYW1lKTtcblxuICAgICAgaWYgKGNhcHR1cmVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGNhcHR1cmVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYnViYmxlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVhY3ROYW1lKTtcblxuICAgICAgaWYgKGJ1YmJsZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgYnViYmxlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcnM7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmVudChpbnN0KSB7XG4gIGlmIChpbnN0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkbyB7XG4gICAgaW5zdCA9IGluc3QucmV0dXJuOyAvLyBUT0RPOiBJZiB0aGlzIGlzIGEgSG9zdFJvb3Qgd2UgbWlnaHQgd2FudCB0byBiYWlsIG91dC5cbiAgICAvLyBUaGF0IGlzIGRlcGVuZGluZyBvbiBpZiB3ZSB3YW50IG5lc3RlZCBzdWJ0cmVlcyAobGF5ZXJzKSB0byBidWJibGVcbiAgICAvLyBldmVudHMgdG8gdGhlaXIgcGFyZW50LiBXZSBjb3VsZCBhbHNvIGdvIHRocm91Z2ggcGFyZW50Tm9kZSBvbiB0aGVcbiAgICAvLyBob3N0IG5vZGUgYnV0IHRoYXQgd291bGRuJ3Qgd29yayBmb3IgUmVhY3QgTmF0aXZlIGFuZCBkb2Vzbid0IGxldCB1c1xuICAgIC8vIGRvIHRoZSBwb3J0YWwgZmVhdHVyZS5cbiAgfSB3aGlsZSAoaW5zdCAmJiBpbnN0LnRhZyAhPT0gSG9zdENvbXBvbmVudCk7XG5cbiAgaWYgKGluc3QpIHtcbiAgICByZXR1cm4gaW5zdDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBSZXR1cm4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgQSBhbmQgQiwgb3IgbnVsbCBpZiB0aGV5IGFyZSBpblxuICogZGlmZmVyZW50IHRyZWVzLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoaW5zdEEsIGluc3RCKSB7XG4gIHZhciBub2RlQSA9IGluc3RBO1xuICB2YXIgbm9kZUIgPSBpbnN0QjtcbiAgdmFyIGRlcHRoQSA9IDA7XG5cbiAgZm9yICh2YXIgdGVtcEEgPSBub2RlQTsgdGVtcEE7IHRlbXBBID0gZ2V0UGFyZW50KHRlbXBBKSkge1xuICAgIGRlcHRoQSsrO1xuICB9XG5cbiAgdmFyIGRlcHRoQiA9IDA7XG5cbiAgZm9yICh2YXIgdGVtcEIgPSBub2RlQjsgdGVtcEI7IHRlbXBCID0gZ2V0UGFyZW50KHRlbXBCKSkge1xuICAgIGRlcHRoQisrO1xuICB9IC8vIElmIEEgaXMgZGVlcGVyLCBjcmF3bCB1cC5cblxuXG4gIHdoaWxlIChkZXB0aEEgLSBkZXB0aEIgPiAwKSB7XG4gICAgbm9kZUEgPSBnZXRQYXJlbnQobm9kZUEpO1xuICAgIGRlcHRoQS0tO1xuICB9IC8vIElmIEIgaXMgZGVlcGVyLCBjcmF3bCB1cC5cblxuXG4gIHdoaWxlIChkZXB0aEIgLSBkZXB0aEEgPiAwKSB7XG4gICAgbm9kZUIgPSBnZXRQYXJlbnQobm9kZUIpO1xuICAgIGRlcHRoQi0tO1xuICB9IC8vIFdhbGsgaW4gbG9ja3N0ZXAgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuXG5cbiAgdmFyIGRlcHRoID0gZGVwdGhBO1xuXG4gIHdoaWxlIChkZXB0aC0tKSB7XG4gICAgaWYgKG5vZGVBID09PSBub2RlQiB8fCBub2RlQiAhPT0gbnVsbCAmJiBub2RlQSA9PT0gbm9kZUIuYWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gbm9kZUE7XG4gICAgfVxuXG4gICAgbm9kZUEgPSBnZXRQYXJlbnQobm9kZUEpO1xuICAgIG5vZGVCID0gZ2V0UGFyZW50KG5vZGVCKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGV2ZW50LCB0YXJnZXQsIGNvbW1vbiwgaW5DYXB0dXJlUGhhc2UpIHtcbiAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5fcmVhY3ROYW1lO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldDtcblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICBpZiAoaW5zdGFuY2UgPT09IGNvbW1vbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIF9pbnN0YW5jZTQgPSBpbnN0YW5jZSxcbiAgICAgICAgYWx0ZXJuYXRlID0gX2luc3RhbmNlNC5hbHRlcm5hdGUsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTQuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2U0LnRhZztcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlID09PSBjb21tb24pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IHN0YXRlTm9kZTtcblxuICAgICAgaWYgKGluQ2FwdHVyZVBoYXNlKSB7XG4gICAgICAgIHZhciBjYXB0dXJlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKGNhcHR1cmVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWluQ2FwdHVyZVBoYXNlKSB7XG4gICAgICAgIHZhciBidWJibGVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICBpZiAoYnViYmxlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGJ1YmJsZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgfVxuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gIH1cbn0gLy8gV2Ugc2hvdWxkIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gZm9yOlxuLy8gLSBFbnRlckxlYXZlRXZlbnRQbHVnaW5cbi8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBvbmx5IHByb2Nlc3MgdGhpcyBwbHVnaW5cbi8vIGluIHRoZSBidWJibGUgcGhhc2UsIHNvIHdlIG5lZWQgdG8gYWNjdW11bGF0ZSB0d29cbi8vIHBoYXNlIGV2ZW50IGxpc3RlbmVycy5cblxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZVR3b1BoYXNlTGlzdGVuZXJzKGRpc3BhdGNoUXVldWUsIGxlYXZlRXZlbnQsIGVudGVyRXZlbnQsIGZyb20sIHRvKSB7XG4gIHZhciBjb21tb24gPSBmcm9tICYmIHRvID8gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoZnJvbSwgdG8pIDogbnVsbDtcblxuICBpZiAoZnJvbSAhPT0gbnVsbCkge1xuICAgIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbGVhdmVFdmVudCwgZnJvbSwgY29tbW9uLCBmYWxzZSk7XG4gIH1cblxuICBpZiAodG8gIT09IG51bGwgJiYgZW50ZXJFdmVudCAhPT0gbnVsbCkge1xuICAgIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZW50ZXJFdmVudCwgdG8sIGNvbW1vbiwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgY2FwdHVyZSkge1xuICByZXR1cm4gZG9tRXZlbnROYW1lICsgXCJfX1wiICsgKGNhcHR1cmUgPyAnY2FwdHVyZScgOiAnYnViYmxlJyk7XG59XG5cbnZhciBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IGZhbHNlO1xudmFyIERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MID0gJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJztcbnZhciBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgPSAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJztcbnZhciBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyA9ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnO1xudmFyIEFVVE9GT0NVUyA9ICdhdXRvRm9jdXMnO1xudmFyIENISUxEUkVOID0gJ2NoaWxkcmVuJztcbnZhciBTVFlMRSA9ICdzdHlsZSc7XG52YXIgSFRNTCQxID0gJ19faHRtbCc7XG52YXIgSFRNTF9OQU1FU1BBQ0UkMSA9IE5hbWVzcGFjZXMuaHRtbDtcbnZhciB3YXJuZWRVbmtub3duVGFncztcbnZhciBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmc7XG52YXIgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudDtcbnZhciB3YXJuRm9yVGV4dERpZmZlcmVuY2U7XG52YXIgd2FybkZvclByb3BEaWZmZXJlbmNlO1xudmFyIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXM7XG52YXIgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyO1xudmFyIGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmc7XG52YXIgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlO1xudmFyIG5vcm1hbGl6ZUhUTUw7XG5cbntcbiAgd2FybmVkVW5rbm93blRhZ3MgPSB7XG4gICAgLy8gVGhlcmUgYXJlIHdvcmtpbmcgcG9seWZpbGxzIGZvciA8ZGlhbG9nPi4gTGV0IHBlb3BsZSB1c2UgaXQuXG4gICAgZGlhbG9nOiB0cnVlLFxuICAgIC8vIEVsZWN0cm9uIHNoaXBzIGEgY3VzdG9tIDx3ZWJ2aWV3PiB0YWcgdG8gZGlzcGxheSBleHRlcm5hbCB3ZWIgY29udGVudCBpblxuICAgIC8vIGFuIGlzb2xhdGVkIGZyYW1lIGFuZCBwcm9jZXNzLlxuICAgIC8vIFRoaXMgdGFnIGlzIG5vdCBwcmVzZW50IGluIG5vbiBFbGVjdHJvbiBlbnZpcm9ubWVudHMgc3VjaCBhcyBKU0RvbSB3aGljaFxuICAgIC8vIGlzIG9mdGVuIHVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gICAgLy8gQHNlZSBodHRwczovL2VsZWN0cm9uanMub3JnL2RvY3MvYXBpL3dlYnZpZXctdGFnXG4gICAgd2VidmlldzogdHJ1ZVxuICB9O1xuXG4gIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQgPSBmdW5jdGlvbiAodHlwZSwgcHJvcHMpIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXModHlwZSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyQxKHR5cGUsIHByb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcywge1xuICAgICAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llczogcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyxcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM6IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNcbiAgICB9KTtcbiAgfTsgLy8gSUUgMTEgcGFyc2VzICYgbm9ybWFsaXplcyB0aGUgc3R5bGUgYXR0cmlidXRlIGFzIG9wcG9zZWQgdG8gb3RoZXJcbiAgLy8gYnJvd3NlcnMuIEl0IGFkZHMgc3BhY2VzIGFuZCBzb3J0cyB0aGUgcHJvcGVydGllcyBpbiBzb21lXG4gIC8vIG5vbi1hbHBoYWJldGljYWwgb3JkZXIuIEhhbmRsaW5nIHRoYXQgd291bGQgcmVxdWlyZSBzb3J0aW5nIENTU1xuICAvLyBwcm9wZXJ0aWVzIGluIHRoZSBjbGllbnQgJiBzZXJ2ZXIgdmVyc2lvbnMgb3IgYXBwbHlpbmdcbiAgLy8gYGV4cGVjdGVkU3R5bGVgIHRvIGEgdGVtcG9yYXJ5IERPTSBub2RlIHRvIHJlYWQgaXRzIGBzdHlsZWAgYXR0cmlidXRlXG4gIC8vIG5vcm1hbGl6ZWQuIFNpbmNlIGl0IG9ubHkgYWZmZWN0cyBJRSwgd2UncmUgc2tpcHBpbmcgc3R5bGUgd2FybmluZ3NcbiAgLy8gaW4gdGhhdCBicm93c2VyIGNvbXBsZXRlbHkgaW4gZmF2b3Igb2YgZG9pbmcgYWxsIHRoYXQgd29yay5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE4MDdcblxuXG4gIGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmcgPSBjYW5Vc2VET00gJiYgIWRvY3VtZW50LmRvY3VtZW50TW9kZTsgLy8gSFRNTCBwYXJzaW5nIG5vcm1hbGl6ZXMgQ1IgYW5kIENSTEYgdG8gTEYuXG4gIC8vIEl0IGFsc28gY2FuIHR1cm4gXFx1MDAwMCBpbnRvIFxcdUZGRkQgaW5zaWRlIGF0dHJpYnV0ZXMuXG4gIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9zaW5nbGUtcGFnZS5odG1sI3ByZXByb2Nlc3NpbmctdGhlLWlucHV0LXN0cmVhbVxuICAvLyBJZiB3ZSBoYXZlIGEgbWlzbWF0Y2gsIGl0IG1pZ2h0IGJlIGNhdXNlZCBieSB0aGF0LlxuICAvLyBXZSB3aWxsIHN0aWxsIHBhdGNoIHVwIGluIHRoaXMgY2FzZSBidXQgbm90IGZpcmUgdGhlIHdhcm5pbmcuXG5cbiAgdmFyIE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCA9IC9cXHJcXG4/L2c7XG4gIHZhciBOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVggPSAvXFx1MDAwMHxcXHVGRkZEL2c7XG5cbiAgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlID0gZnVuY3Rpb24gKG1hcmt1cCkge1xuICAgIHZhciBtYXJrdXBTdHJpbmcgPSB0eXBlb2YgbWFya3VwID09PSAnc3RyaW5nJyA/IG1hcmt1cCA6ICcnICsgbWFya3VwO1xuICAgIHJldHVybiBtYXJrdXBTdHJpbmcucmVwbGFjZShOT1JNQUxJWkVfTkVXTElORVNfUkVHRVgsICdcXG4nKS5yZXBsYWNlKE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCwgJycpO1xuICB9O1xuXG4gIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChzZXJ2ZXJUZXh0LCBjbGllbnRUZXh0KSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWRDbGllbnRUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFRleHQpO1xuICAgIHZhciBub3JtYWxpemVkU2VydmVyVGV4dCA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJUZXh0KTtcblxuICAgIGlmIChub3JtYWxpemVkU2VydmVyVGV4dCA9PT0gbm9ybWFsaXplZENsaWVudFRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignVGV4dCBjb250ZW50IGRpZCBub3QgbWF0Y2guIFNlcnZlcjogXCIlc1wiIENsaWVudDogXCIlc1wiJywgbm9ybWFsaXplZFNlcnZlclRleHQsIG5vcm1hbGl6ZWRDbGllbnRUZXh0KTtcbiAgfTtcblxuICB3YXJuRm9yUHJvcERpZmZlcmVuY2UgPSBmdW5jdGlvbiAocHJvcE5hbWUsIHNlcnZlclZhbHVlLCBjbGllbnRWYWx1ZSkge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBub3JtYWxpemVkQ2xpZW50VmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VmFsdWUpO1xuICAgIHZhciBub3JtYWxpemVkU2VydmVyVmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVmFsdWUpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSA9PT0gbm9ybWFsaXplZENsaWVudFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Byb3AgYCVzYCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6ICVzIENsaWVudDogJXMnLCBwcm9wTmFtZSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZFNlcnZlclZhbHVlKSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZENsaWVudFZhbHVlKSk7XG4gIH07XG5cbiAgd2FybkZvckV4dHJhQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lcykge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBhdHRyaWJ1dGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgIH0pO1xuXG4gICAgZXJyb3IoJ0V4dHJhIGF0dHJpYnV0ZXMgZnJvbSB0aGUgc2VydmVyOiAlcycsIG5hbWVzKTtcbiAgfTtcblxuICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAocmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHtcbiAgICBpZiAobGlzdGVuZXIgPT09IGZhbHNlKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBgZmFsc2VgLlxcblxcbicgKyAnSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sICcgKyAncGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuJywgcmVnaXN0cmF0aW9uTmFtZSwgcmVnaXN0cmF0aW9uTmFtZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYCVzYCB0eXBlLicsIHJlZ2lzdHJhdGlvbk5hbWUsIHR5cGVvZiBsaXN0ZW5lcik7XG4gICAgfVxuICB9OyAvLyBQYXJzZSB0aGUgSFRNTCBhbmQgcmVhZCBpdCBiYWNrIHRvIG5vcm1hbGl6ZSB0aGUgSFRNTCBzdHJpbmcgc28gdGhhdCBpdFxuICAvLyBjYW4gYmUgdXNlZCBmb3IgY29tcGFyaXNvbi5cblxuXG4gIG5vcm1hbGl6ZUhUTUwgPSBmdW5jdGlvbiAocGFyZW50LCBodG1sKSB7XG4gICAgLy8gV2UgY291bGQgaGF2ZSBjcmVhdGVkIGEgc2VwYXJhdGUgZG9jdW1lbnQgaGVyZSB0byBhdm9pZFxuICAgIC8vIHJlLWluaXRpYWxpemluZyBjdXN0b20gZWxlbWVudHMgaWYgdGhleSBleGlzdC4gQnV0IHRoaXMgYnJlYWtzXG4gICAgLy8gaG93IDxub3NjcmlwdD4gaXMgYmVpbmcgaGFuZGxlZC4gU28gd2UgdXNlIHRoZSBzYW1lIGRvY3VtZW50LlxuICAgIC8vIFNlZSB0aGUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMTE1Ny5cbiAgICB2YXIgdGVzdEVsZW1lbnQgPSBwYXJlbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxID8gcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChwYXJlbnQudGFnTmFtZSkgOiBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocGFyZW50Lm5hbWVzcGFjZVVSSSwgcGFyZW50LnRhZ05hbWUpO1xuICAgIHRlc3RFbGVtZW50LmlubmVySFRNTCA9IGh0bWw7XG4gICAgcmV0dXJuIHRlc3RFbGVtZW50LmlubmVySFRNTDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHJldHVybiByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/IHJvb3RDb250YWluZXJFbGVtZW50IDogcm9vdENvbnRhaW5lckVsZW1lbnQub3duZXJEb2N1bWVudDtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmZ1bmN0aW9uIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KG5vZGUpIHtcbiAgLy8gTW9iaWxlIFNhZmFyaSBkb2VzIG5vdCBmaXJlIHByb3Blcmx5IGJ1YmJsZSBjbGljayBldmVudHMgb25cbiAgLy8gbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzLCB3aGljaCBtZWFucyBkZWxlZ2F0ZWQgY2xpY2sgbGlzdGVuZXJzIGRvIG5vdFxuICAvLyBmaXJlLiBUaGUgd29ya2Fyb3VuZCBmb3IgdGhpcyBidWcgaW52b2x2ZXMgYXR0YWNoaW5nIGFuIGVtcHR5IGNsaWNrXG4gIC8vIGxpc3RlbmVyIG9uIHRoZSB0YXJnZXQgbm9kZS5cbiAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDEwLzA5L2NsaWNrX2V2ZW50X2RlbC5odG1sXG4gIC8vIEp1c3Qgc2V0IGl0IHVzaW5nIHRoZSBvbmNsaWNrIHByb3BlcnR5IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBtYW5hZ2UgYW55XG4gIC8vIGJvb2trZWVwaW5nIGZvciBpdC4gTm90IHN1cmUgaWYgd2UgbmVlZCB0byBjbGVhciBpdCB3aGVuIHRoZSBsaXN0ZW5lciBpc1xuICAvLyByZW1vdmVkLlxuICAvLyBUT0RPOiBPbmx5IGRvIHRoaXMgZm9yIHRoZSByZWxldmFudCBTYWZhcmlzIG1heWJlP1xuICBub2RlLm9uY2xpY2sgPSBub29wO1xufVxuXG5mdW5jdGlvbiBzZXRJbml0aWFsRE9NUHJvcGVydGllcyh0YWcsIGRvbUVsZW1lbnQsIHJvb3RDb250YWluZXJFbGVtZW50LCBuZXh0UHJvcHMsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGZvciAodmFyIHByb3BLZXkgaW4gbmV4dFByb3BzKSB7XG4gICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICAvLyBGcmVlemUgdGhlIG5leHQgc3R5bGUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBiZVxuICAgICAgICAgIC8vIG11dGF0ZWQuIFdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgZm9yIHRoaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgICAgT2JqZWN0LmZyZWV6ZShuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVsaWVzIG9uIGB1cGRhdGVTdHlsZXNCeUlEYCBub3QgbXV0YXRpbmcgYHN0eWxlVXBkYXRlc2AuXG5cblxuICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgbmV4dFByb3ApO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgc2V0SW5uZXJIVE1MKGRvbUVsZW1lbnQsIG5leHRIdG1sKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIGluaXRpYWwgdGV4dENvbnRlbnQgd2hlbiB0aGUgdGV4dCBpcyBlbXB0eS4gSW4gSUUxMSBzZXR0aW5nXG4gICAgICAgIC8vIHRleHRDb250ZW50IG9uIGEgPHRleHRhcmVhPiB3aWxsIGNhdXNlIHRoZSBwbGFjZWhvbGRlciB0byBub3RcbiAgICAgICAgLy8gc2hvdyB3aXRoaW4gdGhlIDx0ZXh0YXJlYT4gdW50aWwgaXQgaGFzIGJlZW4gZm9jdXNlZCBhbmQgYmx1cnJlZCBhZ2Fpbi5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82NzMxI2lzc3VlY29tbWVudC0yNTQ4NzQ1NTNcbiAgICAgICAgdmFyIGNhblNldFRleHRDb250ZW50ID0gdGFnICE9PSAndGV4dGFyZWEnIHx8IG5leHRQcm9wICE9PSAnJztcblxuICAgICAgICBpZiAoY2FuU2V0VGV4dENvbnRlbnQpIHtcbiAgICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCAnJyArIG5leHRQcm9wKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBBVVRPRk9DVVMpIDsgZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCwgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVET01Qcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHdhc0N1c3RvbUNvbXBvbmVudFRhZywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgLy8gVE9ETzogSGFuZGxlIHdhc0N1c3RvbUNvbXBvbmVudFRhZ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHVwZGF0ZVBheWxvYWQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgcHJvcEtleSA9IHVwZGF0ZVBheWxvYWRbaV07XG4gICAgdmFyIHByb3BWYWx1ZSA9IHVwZGF0ZVBheWxvYWRbaSArIDFdO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHNldElubmVySFRNTChkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgcHJvcFZhbHVlLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50LCBwYXJlbnROYW1lc3BhY2UpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnOyAvLyBXZSBjcmVhdGUgdGFncyBpbiB0aGUgbmFtZXNwYWNlIG9mIHRoZWlyIHBhcmVudCBjb250YWluZXIsIGV4Y2VwdCBIVE1MXG4gIC8vIHRhZ3MgZ2V0IG5vIG5hbWVzcGFjZS5cblxuICB2YXIgb3duZXJEb2N1bWVudCA9IGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCk7XG4gIHZhciBkb21FbGVtZW50O1xuICB2YXIgbmFtZXNwYWNlVVJJID0gcGFyZW50TmFtZXNwYWNlO1xuXG4gIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICBuYW1lc3BhY2VVUkkgPSBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSk7XG4gIH1cblxuICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAge1xuICAgICAgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcyk7IC8vIFNob3VsZCB0aGlzIGNoZWNrIGJlIGdhdGVkIGJ5IHBhcmVudCBuYW1lc3BhY2U/IE5vdCBzdXJlIHdlIHdhbnQgdG9cbiAgICAgIC8vIGFsbG93IDxTVkc+IG9yIDxtQVRIPi5cblxuICAgICAgaWYgKCFpc0N1c3RvbUNvbXBvbmVudFRhZyAmJiB0eXBlICE9PSB0eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgZXJyb3IoJzwlcyAvPiBpcyB1c2luZyBpbmNvcnJlY3QgY2FzaW5nLiAnICsgJ1VzZSBQYXNjYWxDYXNlIGZvciBSZWFjdCBjb21wb25lbnRzLCAnICsgJ29yIGxvd2VyY2FzZSBmb3IgSFRNTCBlbGVtZW50cy4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgc2NyaXB0IHZpYSAuaW5uZXJIVE1MIHNvIGl0cyBcInBhcnNlci1pbnNlcnRlZFwiIGZsYWcgaXNcbiAgICAgIC8vIHNldCB0byB0cnVlIGFuZCBpdCBkb2VzIG5vdCBleGVjdXRlXG4gICAgICB2YXIgZGl2ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgZGl2LmlubmVySFRNTCA9ICc8c2NyaXB0PjwnICsgJy9zY3JpcHQ+JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIHlpZWxkIGEgc2NyaXB0IGVsZW1lbnQuXG5cbiAgICAgIHZhciBmaXJzdENoaWxkID0gZGl2LmZpcnN0Q2hpbGQ7XG4gICAgICBkb21FbGVtZW50ID0gZGl2LnJlbW92ZUNoaWxkKGZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHByb3BzLmlzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gJEZsb3dJc3N1ZSBgY3JlYXRlRWxlbWVudGAgc2hvdWxkIGJlIHVwZGF0ZWQgZm9yIFdlYiBDb21wb25lbnRzXG4gICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUsIHtcbiAgICAgICAgaXM6IHByb3BzLmlzXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VwYXJhdGUgZWxzZSBicmFuY2ggaW5zdGVhZCBvZiB1c2luZyBgcHJvcHMuaXMgfHwgdW5kZWZpbmVkYCBhYm92ZSBiZWNhdXNlIG9mIGEgRmlyZWZveCBidWcuXG4gICAgICAvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC82ODk2XG4gICAgICAvLyBhbmQgZGlzY3Vzc2lvbiBpbiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjQwXG4gICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpOyAvLyBOb3JtYWxseSBhdHRyaWJ1dGVzIGFyZSBhc3NpZ25lZCBpbiBgc2V0SW5pdGlhbERPTVByb3BlcnRpZXNgLCBob3dldmVyIHRoZSBgbXVsdGlwbGVgIGFuZCBgc2l6ZWBcbiAgICAgIC8vIGF0dHJpYnV0ZXMgb24gYHNlbGVjdGBzIG5lZWRzIHRvIGJlIGFkZGVkIGJlZm9yZSBgb3B0aW9uYHMgYXJlIGluc2VydGVkLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50czpcbiAgICAgIC8vIC0gYSBidWcgd2hlcmUgdGhlIGBzZWxlY3RgIGRvZXMgbm90IHNjcm9sbCB0byB0aGUgY29ycmVjdCBvcHRpb24gYmVjYXVzZSBzaW5ndWxhclxuICAgICAgLy8gIGBzZWxlY3RgIGVsZW1lbnRzIGF1dG9tYXRpY2FsbHkgcGljayB0aGUgZmlyc3QgaXRlbSAjMTMyMjJcbiAgICAgIC8vIC0gYSBidWcgd2hlcmUgdGhlIGBzZWxlY3RgIHNldCB0aGUgZmlyc3QgaXRlbSBhcyBzZWxlY3RlZCBkZXNwaXRlIHRoZSBgc2l6ZWAgYXR0cmlidXRlICMxNDIzOVxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTMyMjJcbiAgICAgIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MjM5XG5cbiAgICAgIGlmICh0eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgICB2YXIgbm9kZSA9IGRvbUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgICAgbm9kZS5tdWx0aXBsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMuc2l6ZSkge1xuICAgICAgICAgIC8vIFNldHRpbmcgYSBzaXplIGdyZWF0ZXIgdGhhbiAxIGNhdXNlcyBhIHNlbGVjdCB0byBiZWhhdmUgbGlrZSBgbXVsdGlwbGU9dHJ1ZWAsIHdoZXJlXG4gICAgICAgICAgLy8gaXQgaXMgcG9zc2libGUgdGhhdCBubyBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHdoZW4gYSBzZWxlY3QgaW4gXCJzaW5nbGUgc2VsZWN0aW9uIG1vZGVcIi5cbiAgICAgICAgICBub2RlLnNpemUgPSBwcm9wcy5zaXplO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHR5cGUpO1xuICB9XG5cbiAge1xuICAgIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgIGlmICghaXNDdXN0b21Db21wb25lbnRUYWcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvbUVsZW1lbnQpID09PSAnW29iamVjdCBIVE1MVW5rbm93bkVsZW1lbnRdJyAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHdhcm5lZFVua25vd25UYWdzLCB0eXBlKSkge1xuICAgICAgICB3YXJuZWRVbmtub3duVGFnc1t0eXBlXSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1RoZSB0YWcgPCVzPiBpcyB1bnJlY29nbml6ZWQgaW4gdGhpcyBicm93c2VyLiAnICsgJ0lmIHlvdSBtZWFudCB0byByZW5kZXIgYSBSZWFjdCBjb21wb25lbnQsIHN0YXJ0IGl0cyBuYW1lIHdpdGggJyArICdhbiB1cHBlcmNhc2UgbGV0dGVyLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb21FbGVtZW50O1xufVxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUodGV4dCwgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG59XG5mdW5jdGlvbiBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHJhd1Byb3BzLCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIHJhd1Byb3BzKTtcblxuICB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIHJhd1Byb3BzKTtcbiAgfSAvLyBUT0RPOiBNYWtlIHN1cmUgdGhhdCB3ZSBjaGVjayBpc01vdW50ZWQgYmVmb3JlIGZpcmluZyBhbnkgb2YgdGhlc2UgZXZlbnRzLlxuXG5cbiAgdmFyIHByb3BzO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2NhbmNlbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2xvc2UnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lmcmFtZSc6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdlbWJlZCc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgbG9hZCBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICBjYXNlICdhdWRpbyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGFsbCB0aGUgbWVkaWEgZXZlbnRzLlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWRpYUV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChtZWRpYUV2ZW50VHlwZXNbaV0sIGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzb3VyY2UnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGVycm9yIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ltZyc6XG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBlcnJvciBhbmQgbG9hZCBldmVudHMuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgdG9nZ2xlIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgndG9nZ2xlJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgcHJvcHMpO1xuICBzZXRJbml0aWFsRE9NUHJvcGVydGllcyh0YWcsIGRvbUVsZW1lbnQsIHJvb3RDb250YWluZXJFbGVtZW50LCBwcm9wcywgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlcihkb21FbGVtZW50LCByYXdQcm9wcywgZmFsc2UpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDMoZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgcG9zdE1vdW50V3JhcHBlciQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cbn0gLy8gQ2FsY3VsYXRlIHRoZSBkaWZmIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuXG5mdW5jdGlvbiBkaWZmUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIGxhc3RSYXdQcm9wcywgbmV4dFJhd1Byb3BzLCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIG5leHRSYXdQcm9wcyk7XG4gIH1cblxuICB2YXIgdXBkYXRlUGF5bG9hZCA9IG51bGw7XG4gIHZhciBsYXN0UHJvcHM7XG4gIHZhciBuZXh0UHJvcHM7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBsYXN0UHJvcHMgPSBsYXN0UmF3UHJvcHM7XG4gICAgICBuZXh0UHJvcHMgPSBuZXh0UmF3UHJvcHM7XG5cbiAgICAgIGlmICh0eXBlb2YgbGFzdFByb3BzLm9uQ2xpY2sgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG5leHRQcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCBuZXh0UHJvcHMpO1xuICB2YXIgcHJvcEtleTtcbiAgdmFyIHN0eWxlTmFtZTtcbiAgdmFyIHN0eWxlVXBkYXRlcyA9IG51bGw7XG5cbiAgZm9yIChwcm9wS2V5IGluIGxhc3RQcm9wcykge1xuICAgIGlmIChuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgIWxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCBsYXN0UHJvcHNbcHJvcEtleV0gPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB2YXIgbGFzdFN0eWxlID0gbGFzdFByb3BzW3Byb3BLZXldO1xuXG4gICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0U3R5bGUpIHtcbiAgICAgICAgaWYgKGxhc3RTdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MIHx8IHByb3BLZXkgPT09IENISUxEUkVOKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBBVVRPRk9DVVMpIDsgZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZS4gSWYgYW55IGxpc3RlbmVyIHVwZGF0ZXMgd2UgbmVlZCB0byBlbnN1cmVcbiAgICAgIC8vIHRoYXQgdGhlIFwiY3VycmVudFwiIGZpYmVyIHBvaW50ZXIgZ2V0cyB1cGRhdGVkIHNvIHdlIG5lZWQgYSBjb21taXRcbiAgICAgIC8vIHRvIHVwZGF0ZSB0aGlzIGVsZW1lbnQuXG4gICAgICBpZiAoIXVwZGF0ZVBheWxvYWQpIHtcbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgYWxsIG90aGVyIGRlbGV0ZWQgcHJvcGVydGllcyB3ZSBhZGQgaXQgdG8gdGhlIHF1ZXVlLiBXZSB1c2VcbiAgICAgIC8vIHRoZSBhbGxvd2VkIHByb3BlcnR5IGxpc3QgaW4gdGhlIGNvbW1pdCBwaGFzZSBpbnN0ZWFkLlxuICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAocHJvcEtleSBpbiBuZXh0UHJvcHMpIHtcbiAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG4gICAgdmFyIGxhc3RQcm9wID0gbGFzdFByb3BzICE9IG51bGwgPyBsYXN0UHJvcHNbcHJvcEtleV0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCBuZXh0UHJvcCA9PT0gbGFzdFByb3AgfHwgbmV4dFByb3AgPT0gbnVsbCAmJiBsYXN0UHJvcCA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKG5leHRQcm9wKSB7XG4gICAgICAgICAgLy8gRnJlZXplIHRoZSBuZXh0IHN0eWxlIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBhc3N1bWUgaXQgd29uJ3QgYmVcbiAgICAgICAgICAvLyBtdXRhdGVkLiBXZSBoYXZlIGFscmVhZHkgd2FybmVkIGZvciB0aGlzIGluIHRoZSBwYXN0LlxuICAgICAgICAgIE9iamVjdC5mcmVlemUobmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChsYXN0UHJvcCkge1xuICAgICAgICAvLyBVbnNldCBzdHlsZXMgb24gYGxhc3RQcm9wYCBidXQgbm90IG9uIGBuZXh0UHJvcGAuXG4gICAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RQcm9wKSB7XG4gICAgICAgICAgaWYgKGxhc3RQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiYgKCFuZXh0UHJvcCB8fCAhbmV4dFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkpIHtcbiAgICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBVcGRhdGUgc3R5bGVzIHRoYXQgY2hhbmdlZCBzaW5jZSBgbGFzdFByb3BgLlxuXG5cbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAobmV4dFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiBsYXN0UHJvcFtzdHlsZU5hbWVdICE9PSBuZXh0UHJvcFtzdHlsZU5hbWVdKSB7XG4gICAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSBuZXh0UHJvcFtzdHlsZU5hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVsaWVzIG9uIGB1cGRhdGVTdHlsZXNCeUlEYCBub3QgbXV0YXRpbmcgYHN0eWxlVXBkYXRlc2AuXG4gICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkKSB7XG4gICAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZC5wdXNoKHByb3BLZXksIHN0eWxlVXBkYXRlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZVVwZGF0ZXMgPSBuZXh0UHJvcDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgbGFzdEh0bWwgPSBsYXN0UHJvcCA/IGxhc3RQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChsYXN0SHRtbCAhPT0gbmV4dEh0bWwpIHtcbiAgICAgICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbmV4dEh0bWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgJycgKyBuZXh0UHJvcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcpIDsgZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgLy8gV2UgZWFnZXJseSBsaXN0ZW4gdG8gdGhpcyBldmVuIHRob3VnaCB3ZSBoYXZlbid0IGNvbW1pdHRlZCB5ZXQuXG4gICAgICAgIGlmICggdHlwZW9mIG5leHRQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wS2V5ID09PSAnb25TY3JvbGwnKSB7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnc2Nyb2xsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkICYmIGxhc3RQcm9wICE9PSBuZXh0UHJvcCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBJZiBhbnkgbGlzdGVuZXIgdXBkYXRlcyB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IHRoZSBcImN1cnJlbnRcIiBwcm9wcyBwb2ludGVyIGdldHMgdXBkYXRlZCBzbyB3ZSBuZWVkIGEgY29tbWl0XG4gICAgICAgIC8vIHRvIHVwZGF0ZSB0aGlzIGVsZW1lbnQuXG4gICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ29iamVjdCcgJiYgbmV4dFByb3AgIT09IG51bGwgJiYgbmV4dFByb3AuJCR0eXBlb2YgPT09IFJFQUNUX09QQVFVRV9JRF9UWVBFKSB7XG4gICAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgdXNlT3BhcXVlUmVmZXJlbmNlJ3Mgb3BhcXVlIG9iamVjdCwgdGhpcyBtZWFucyB3ZSBhcmUgaHlkcmF0aW5nLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCBjYWxsIHRoZSBvcGFxdWUgb2JqZWN0J3MgdG9TdHJpbmcgZnVuY3Rpb24gd2hpY2ggZ2VuZXJhdGVzIGEgbmV3IGNsaWVudFxuICAgICAgLy8gSUQgc28gY2xpZW50IGFuZCBzZXJ2ZXIgSURzIG1hdGNoIGFuZCB0aHJvd3MgdG8gcmVyZW5kZXIuXG4gICAgICBuZXh0UHJvcC50b1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgYW55IG90aGVyIHByb3BlcnR5IHdlIGFsd2F5cyBhZGQgaXQgdG8gdGhlIHF1ZXVlIGFuZCB0aGVuIHdlXG4gICAgICAvLyBmaWx0ZXIgaXQgb3V0IHVzaW5nIHRoZSBhbGxvd2VkIHByb3BlcnR5IGxpc3QgZHVyaW5nIHRoZSBjb21taXQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbmV4dFByb3ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZVVwZGF0ZXMpIHtcbiAgICB7XG4gICAgICB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYoc3R5bGVVcGRhdGVzLCBuZXh0UHJvcHNbU1RZTEVdKTtcbiAgICB9XG5cbiAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2goU1RZTEUsIHN0eWxlVXBkYXRlcyk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn0gLy8gQXBwbHkgdGhlIGRpZmYuXG5cbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdGFnLCBsYXN0UmF3UHJvcHMsIG5leHRSYXdQcm9wcykge1xuICAvLyBVcGRhdGUgY2hlY2tlZCAqYmVmb3JlKiBuYW1lLlxuICAvLyBJbiB0aGUgbWlkZGxlIG9mIGFuIHVwZGF0ZSwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBjaGVja2VkLlxuICAvLyBXaGVuIGEgY2hlY2tlZCByYWRpbyB0cmllcyB0byBjaGFuZ2UgbmFtZSwgYnJvd3NlciBtYWtlcyBhbm90aGVyIHJhZGlvJ3MgY2hlY2tlZCBmYWxzZS5cbiAgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiBuZXh0UmF3UHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuZXh0UmF3UHJvcHMubmFtZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlQ2hlY2tlZChkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICB9XG5cbiAgdmFyIHdhc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgbGFzdFJhd1Byb3BzKTtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCBuZXh0UmF3UHJvcHMpOyAvLyBBcHBseSB0aGUgZGlmZi5cblxuICB1cGRhdGVET01Qcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHdhc0N1c3RvbUNvbXBvbmVudFRhZywgaXNDdXN0b21Db21wb25lbnRUYWcpOyAvLyBUT0RPOiBFbnN1cmUgdGhhdCBhbiB1cGRhdGUgZ2V0cyBzY2hlZHVsZWQgaWYgYW55IG9mIHRoZSBzcGVjaWFsIHByb3BzXG4gIC8vIGNoYW5nZWQuXG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBVcGRhdGUgdGhlIHdyYXBwZXIgYXJvdW5kIGlucHV0cyAqYWZ0ZXIqIHVwZGF0aW5nIHByb3BzLiBUaGlzIGhhcyB0b1xuICAgICAgLy8gaGFwcGVuIGFmdGVyIGB1cGRhdGVET01Qcm9wZXJ0aWVzYC4gT3RoZXJ3aXNlIEhUTUw1IGlucHV0IHZhbGlkYXRpb25zXG4gICAgICAvLyByYWlzZSB3YXJuaW5ncyBhbmQgcHJldmVudCB0aGUgbmV3IHZhbHVlIGZyb20gYmVpbmcgYXNzaWduZWQuXG4gICAgICB1cGRhdGVXcmFwcGVyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHVwZGF0ZVdyYXBwZXIkMShkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgLy8gPHNlbGVjdD4gdmFsdWUgdXBkYXRlIG5lZWRzIHRvIG9jY3VyIGFmdGVyIDxvcHRpb24+IGNoaWxkcmVuXG4gICAgICAvLyByZWNvbmNpbGlhdGlvblxuICAgICAgcG9zdFVwZGF0ZVdyYXBwZXIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBvc3NpYmxlU3RhbmRhcmROYW1lKHByb3BOYW1lKSB7XG4gIHtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKCFwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXSB8fCBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCByYXdQcm9wcywgcGFyZW50TmFtZXNwYWNlLCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWc7XG4gIHZhciBleHRyYUF0dHJpYnV0ZU5hbWVzO1xuXG4gIHtcbiAgICBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgPSByYXdQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklOR10gPT09IHRydWU7XG4gICAgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIHJhd1Byb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcmF3UHJvcHMpO1xuICB9IC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG5cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjYW5jZWwnLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Nsb3NlJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lmcmFtZSc6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdlbWJlZCc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgbG9hZCBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgYWxsIHRoZSBtZWRpYSBldmVudHMuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1tpXSwgZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc291cmNlJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBlcnJvciBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ltZyc6XG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBlcnJvciBhbmQgbG9hZCBldmVudHMuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSB0b2dnbGUgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCd0b2dnbGUnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZShkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHZhbGlkYXRlUHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCByYXdQcm9wcyk7XG5cbiAge1xuICAgIGV4dHJhQXR0cmlidXRlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmF0dHJpYnV0ZXM7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXR0cmlidXRlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlc1tfaV0ubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgLy8gQnVpbHQtaW4gU1NSIGF0dHJpYnV0ZSBpcyBhbGxvd2VkXG4gICAgICAgIGNhc2UgJ2RhdGEtcmVhY3Ryb290JzpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gQ29udHJvbGxlZCBhdHRyaWJ1dGVzIGFyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgIC8vIFRPRE86IE9ubHkgaWdub3JlIHRoZW0gb24gY29udHJvbGxlZCB0YWdzLlxuXG4gICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjaGVja2VkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzZWxlY3RlZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IHVzZSB0aGUgb3JpZ2luYWwgbmFtZS5cbiAgICAgICAgICAvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMDY3Ni5cbiAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmFkZChhdHRyaWJ1dGVzW19pXS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlUGF5bG9hZCA9IG51bGw7XG5cbiAgZm9yICh2YXIgcHJvcEtleSBpbiByYXdQcm9wcykge1xuICAgIGlmICghcmF3UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBuZXh0UHJvcCA9IHJhd1Byb3BzW3Byb3BLZXldO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICAvLyBGb3IgdGV4dCBjb250ZW50IGNoaWxkcmVuIHdlIGNvbXBhcmUgYWdhaW5zdCB0ZXh0Q29udGVudC4gVGhpc1xuICAgICAgLy8gbWlnaHQgbWF0Y2ggYWRkaXRpb25hbCBIVE1MIHRoYXQgaXMgaGlkZGVuIHdoZW4gd2UgcmVhZCBpdCB1c2luZ1xuICAgICAgLy8gdGV4dENvbnRlbnQuIEUuZy4gXCJmb29cIiB3aWxsIG1hdGNoIFwiZjxzcGFuPm9vPC9zcGFuPlwiIGJ1dCB0aGF0IHN0aWxsXG4gICAgICAvLyBzYXRpc2ZpZXMgb3VyIHJlcXVpcmVtZW50LiBPdXIgcmVxdWlyZW1lbnQgaXMgbm90IHRvIHByb2R1Y2UgcGVyZmVjdFxuICAgICAgLy8gSFRNTCBhbmQgYXR0cmlidXRlcy4gSWRlYWxseSB3ZSBzaG91bGQgcHJlc2VydmUgc3RydWN0dXJlIGJ1dCBpdCdzXG4gICAgICAvLyBvayBub3QgdG8gaWYgdGhlIHZpc2libGUgY29udGVudCBpcyBzdGlsbCBlbm91Z2ggdG8gaW5kaWNhdGUgd2hhdFxuICAgICAgLy8gZXZlbiBsaXN0ZW5lcnMgdGhlc2Ugbm9kZXMgbWlnaHQgYmUgd2lyZWQgdXAgdG8uXG4gICAgICAvLyBUT0RPOiBXYXJuIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBhIHNpbmdsZSB0ZXh0Tm9kZSBhcyBhIGNoaWxkLlxuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIHVzZSBkb21FbGVtZW50LmZpcnN0Q2hpbGQubm9kZVZhbHVlIHRvIGNvbXBhcmU/XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudC50ZXh0Q29udGVudCAhPT0gbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAoICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZShkb21FbGVtZW50LnRleHRDb250ZW50LCBuZXh0UHJvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtDSElMRFJFTiwgbmV4dFByb3BdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnQudGV4dENvbnRlbnQgIT09ICcnICsgbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAoICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZShkb21FbGVtZW50LnRleHRDb250ZW50LCBuZXh0UHJvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtDSElMRFJFTiwgJycgKyBuZXh0UHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIGlmICggdHlwZW9mIG5leHRQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wS2V5ID09PSAnb25TY3JvbGwnKSB7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnc2Nyb2xsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCAvLyBDb252aW5jZSBGbG93IHdlJ3ZlIGNhbGN1bGF0ZWQgaXQgKGl0J3MgREVWLW9ubHkgaW4gdGhpcyBtZXRob2QuKVxuICAgIHR5cGVvZiBpc0N1c3RvbUNvbXBvbmVudFRhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBwcm9wZXJ0aWVzIGNvcnJlc3BvbmQgdG8gdGhlaXIgZXhwZWN0ZWQgdmFsdWVzLlxuICAgICAgdmFyIHNlcnZlclZhbHVlID0gdm9pZCAwO1xuICAgICAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhwcm9wS2V5KTtcblxuICAgICAgaWYgKHN1cHByZXNzSHlkcmF0aW9uV2FybmluZykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcgfHwgLy8gQ29udHJvbGxlZCBhdHRyaWJ1dGVzIGFyZSBub3QgdmFsaWRhdGVkXG4gICAgICAvLyBUT0RPOiBPbmx5IGlnbm9yZSB0aGVtIG9uIGNvbnRyb2xsZWQgdGFncy5cbiAgICAgIHByb3BLZXkgPT09ICd2YWx1ZScgfHwgcHJvcEtleSA9PT0gJ2NoZWNrZWQnIHx8IHByb3BLZXkgPT09ICdzZWxlY3RlZCcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgICAgdmFyIHNlcnZlckhUTUwgPSBkb21FbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIGV4cGVjdGVkSFRNTCA9IG5vcm1hbGl6ZUhUTUwoZG9tRWxlbWVudCwgbmV4dEh0bWwpO1xuXG4gICAgICAgICAgaWYgKGV4cGVjdGVkSFRNTCAhPT0gc2VydmVySFRNTCkge1xuICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlckhUTUwsIGV4cGVjdGVkSFRNTCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleSk7XG5cbiAgICAgICAgaWYgKGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRTdHlsZSA9IGNyZWF0ZURhbmdlcm91c1N0cmluZ0ZvclN0eWxlcyhuZXh0UHJvcCk7XG4gICAgICAgICAgc2VydmVyVmFsdWUgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcblxuICAgICAgICAgIGlmIChleHBlY3RlZFN0eWxlICE9PSBzZXJ2ZXJWYWx1ZSkge1xuICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBleHBlY3RlZFN0eWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wKTtcblxuICAgICAgICBpZiAobmV4dFByb3AgIT09IHNlcnZlclZhbHVlKSB7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXNob3VsZElnbm9yZUF0dHJpYnV0ZShwcm9wS2V5LCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSAmJiAhc2hvdWxkUmVtb3ZlQXR0cmlidXRlKHByb3BLZXksIG5leHRQcm9wLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgICAgICB2YXIgaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wLCBwcm9wZXJ0eUluZm8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBvd25OYW1lc3BhY2UgPSBwYXJlbnROYW1lc3BhY2U7XG5cbiAgICAgICAgICBpZiAob3duTmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgICAgICAgICBvd25OYW1lc3BhY2UgPSBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodGFnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3duTmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc3RhbmRhcmROYW1lID0gZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUocHJvcEtleSk7XG5cbiAgICAgICAgICAgIGlmIChzdGFuZGFyZE5hbWUgIT09IG51bGwgJiYgc3RhbmRhcmROYW1lICE9PSBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgIC8vIElmIGFuIFNWRyBwcm9wIGlzIHN1cHBsaWVkIHdpdGggYmFkIGNhc2luZywgaXQgd2lsbFxuICAgICAgICAgICAgICAvLyBiZSBzdWNjZXNzZnVsbHkgcGFyc2VkIGZyb20gSFRNTCwgYnV0IHdpbGwgcHJvZHVjZSBhIG1pc21hdGNoXG4gICAgICAgICAgICAgIC8vIChhbmQgd291bGQgYmUgaW5jb3JyZWN0bHkgcmVuZGVyZWQgb24gdGhlIGNsaWVudCkuXG4gICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFscmVhZHkgd2FybiBhYm91dCBiYWQgY2FzaW5nIGVsc2V3aGVyZS5cbiAgICAgICAgICAgICAgLy8gU28gd2UnbGwgc2tpcCB0aGUgbWlzbGVhZGluZyBleHRyYSBtaXNtYXRjaCB3YXJuaW5nIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgICAgaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nID0gdHJ1ZTsgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuXG4gICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHN0YW5kYXJkTmFtZSk7XG4gICAgICAgICAgICB9IC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cblxuXG4gICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0UHJvcCAhPT0gc2VydmVyVmFsdWUgJiYgIWlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZykge1xuICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICBpZiAoZXh0cmFBdHRyaWJ1dGVOYW1lcy5zaXplID4gMCAmJiAhc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzKGV4dHJhQXR0cmlidXRlTmFtZXMpO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlcihkb21FbGVtZW50LCByYXdQcm9wcywgdHJ1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMyhkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgLy8gRm9yIGlucHV0IGFuZCB0ZXh0YXJlYSB3ZSBjdXJyZW50IGFsd2F5cyBzZXQgdGhlIHZhbHVlIHByb3BlcnR5IGF0XG4gICAgICAvLyBwb3N0IG1vdW50IHRvIGZvcmNlIGl0IHRvIGRpdmVyZ2UgZnJvbSBhdHRyaWJ1dGVzLiBIb3dldmVyLCBmb3JcbiAgICAgIC8vIG9wdGlvbiBhbmQgc2VsZWN0IHdlIGRvbid0IHF1aXRlIGRvIHRoZSBzYW1lIHRoaW5nIGFuZCBzZWxlY3RcbiAgICAgIC8vIGlzIG5vdCByZXNpbGllbnQgdG8gdGhlIERPTSBzdGF0ZSBjaGFuZ2luZyBzbyB3ZSBkb24ndCBkbyB0aGF0IGhlcmUuXG4gICAgICAvLyBUT0RPOiBDb25zaWRlciBub3QgZG9pbmcgdGhpcyBmb3IgaW5wdXQgYW5kIHRleHRhcmVhLlxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHR5cGVvZiByYXdQcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufVxuZnVuY3Rpb24gZGlmZkh5ZHJhdGVkVGV4dCh0ZXh0Tm9kZSwgdGV4dCkge1xuICB2YXIgaXNEaWZmZXJlbnQgPSB0ZXh0Tm9kZS5ub2RlVmFsdWUgIT09IHRleHQ7XG4gIHJldHVybiBpc0RpZmZlcmVudDtcbn1cbmZ1bmN0aW9uIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHROb2RlLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9yVGV4dERpZmZlcmVuY2UodGV4dE5vZGUubm9kZVZhbHVlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnROb2RlLCBjaGlsZCkge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSA8JXM+IGluIDwlcz4uJywgY2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnROb2RlLCBjaGlsZCkge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gdGhlIHRleHQgbm9kZSBcIiVzXCIgaW4gPCVzPi4nLCBjaGlsZC5ub2RlVmFsdWUsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnROb2RlLCB0YWcsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIDwlcz4gaW4gPCVzPi4nLCB0YWcsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnROb2RlLCB0ZXh0KSB7XG4gIHtcbiAgICBpZiAodGV4dCA9PT0gJycpIHtcbiAgICAgIC8vIFdlIGV4cGVjdCB0byBpbnNlcnQgZW1wdHkgdGV4dCBub2RlcyBzaW5jZSB0aGV5J3JlIG5vdCByZXByZXNlbnRlZCBpblxuICAgICAgLy8gdGhlIEhUTUwuXG4gICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBzcGVjaWFsIGNhc2UgaWYgd2UgY2FuIGp1c3QgYXZvaWQgaW5zZXJ0aW5nIGVtcHR5XG4gICAgICAvLyB0ZXh0IG5vZGVzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgdGV4dCBub2RlIGZvciBcIiVzXCIgaW4gPCVzPi4nLCB0ZXh0LCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDMoZG9tRWxlbWVudCwgdGFnLCBwcm9wcykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQyKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDEoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuICB9XG59XG5cbnZhciB2YWxpZGF0ZURPTU5lc3RpbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIHVwZGF0ZWRBbmNlc3RvckluZm8gPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICAvLyBUaGlzIHZhbGlkYXRpb24gY29kZSB3YXMgd3JpdHRlbiBiYXNlZCBvbiB0aGUgSFRNTDUgcGFyc2luZyBzcGVjOlxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29wZVxuICAvL1xuICAvLyBOb3RlOiB0aGlzIGRvZXMgbm90IGNhdGNoIGFsbCBpbnZhbGlkIG5lc3RpbmcsIG5vciBkb2VzIGl0IHRyeSB0byAoYXMgaXQnc1xuICAvLyBub3QgY2xlYXIgd2hhdCBwcmFjdGljYWwgYmVuZWZpdCBkb2luZyBzbyBwcm92aWRlcyk7IGluc3RlYWQsIHdlIHdhcm4gb25seVxuICAvLyBmb3IgY2FzZXMgd2hlcmUgdGhlIHBhcnNlciB3aWxsIGdpdmUgYSBwYXJzZSB0cmVlIGRpZmZlcmluZyBmcm9tIHdoYXQgUmVhY3RcbiAgLy8gaW50ZW5kZWQuIEZvciBleGFtcGxlLCA8Yj48ZGl2PjwvZGl2PjwvYj4gaXMgaW52YWxpZCBidXQgd2UgZG9uJ3Qgd2FyblxuICAvLyBiZWNhdXNlIGl0IHN0aWxsIHBhcnNlcyBjb3JyZWN0bHk7IHdlIGRvIHdhcm4gZm9yIG90aGVyIGNhc2VzIGxpa2UgbmVzdGVkXG4gIC8vIDxwPiB0YWdzIHdoZXJlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY29uZCBlbGVtZW50IGltcGxpY2l0bHkgY2xvc2VzIHRoZVxuICAvLyBmaXJzdCwgY2F1c2luZyBhIGNvbmZ1c2luZyBtZXNzLlxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNzcGVjaWFsXG4gIHZhciBzcGVjaWFsVGFncyA9IFsnYWRkcmVzcycsICdhcHBsZXQnLCAnYXJlYScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2Jhc2UnLCAnYmFzZWZvbnQnLCAnYmdzb3VuZCcsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnY2VudGVyJywgJ2NvbCcsICdjb2xncm91cCcsICdkZCcsICdkZXRhaWxzJywgJ2RpcicsICdkaXYnLCAnZGwnLCAnZHQnLCAnZW1iZWQnLCAnZmllbGRzZXQnLCAnZmlnY2FwdGlvbicsICdmaWd1cmUnLCAnZm9vdGVyJywgJ2Zvcm0nLCAnZnJhbWUnLCAnZnJhbWVzZXQnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLCAnaWZyYW1lJywgJ2ltZycsICdpbnB1dCcsICdpc2luZGV4JywgJ2xpJywgJ2xpbmsnLCAnbGlzdGluZycsICdtYWluJywgJ21hcnF1ZWUnLCAnbWVudScsICdtZW51aXRlbScsICdtZXRhJywgJ25hdicsICdub2VtYmVkJywgJ25vZnJhbWVzJywgJ25vc2NyaXB0JywgJ29iamVjdCcsICdvbCcsICdwJywgJ3BhcmFtJywgJ3BsYWludGV4dCcsICdwcmUnLCAnc2NyaXB0JywgJ3NlY3Rpb24nLCAnc2VsZWN0JywgJ3NvdXJjZScsICdzdHlsZScsICdzdW1tYXJ5JywgJ3RhYmxlJywgJ3Rib2R5JywgJ3RkJywgJ3RlbXBsYXRlJywgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpdGxlJywgJ3RyJywgJ3RyYWNrJywgJ3VsJywgJ3dicicsICd4bXAnXTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcblxuICB2YXIgaW5TY29wZVRhZ3MgPSBbJ2FwcGxldCcsICdjYXB0aW9uJywgJ2h0bWwnLCAndGFibGUnLCAndGQnLCAndGgnLCAnbWFycXVlZScsICdvYmplY3QnLCAndGVtcGxhdGUnLCAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNodG1sLWludGVncmF0aW9uLXBvaW50XG4gIC8vIFRPRE86IERpc3Rpbmd1aXNoIGJ5IG5hbWVzcGFjZSBoZXJlIC0tIGZvciA8dGl0bGU+LCBpbmNsdWRpbmcgaXQgaGVyZVxuICAvLyBlcnJzIG9uIHRoZSBzaWRlIG9mIGZld2VyIHdhcm5pbmdzXG4gICdmb3JlaWduT2JqZWN0JywgJ2Rlc2MnLCAndGl0bGUnXTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tYnV0dG9uLXNjb3BlXG5cbiAgdmFyIGJ1dHRvblNjb3BlVGFncyA9IGluU2NvcGVUYWdzLmNvbmNhdChbJ2J1dHRvbiddKTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjZ2VuZXJhdGUtaW1wbGllZC1lbmQtdGFnc1xuXG4gIHZhciBpbXBsaWVkRW5kVGFncyA9IFsnZGQnLCAnZHQnLCAnbGknLCAnb3B0aW9uJywgJ29wdGdyb3VwJywgJ3AnLCAncnAnLCAncnQnXTtcbiAgdmFyIGVtcHR5QW5jZXN0b3JJbmZvID0ge1xuICAgIGN1cnJlbnQ6IG51bGwsXG4gICAgZm9ybVRhZzogbnVsbCxcbiAgICBhVGFnSW5TY29wZTogbnVsbCxcbiAgICBidXR0b25UYWdJblNjb3BlOiBudWxsLFxuICAgIG5vYnJUYWdJblNjb3BlOiBudWxsLFxuICAgIHBUYWdJbkJ1dHRvblNjb3BlOiBudWxsLFxuICAgIGxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gICAgZGxJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGxcbiAgfTtcblxuICB1cGRhdGVkQW5jZXN0b3JJbmZvID0gZnVuY3Rpb24gKG9sZEluZm8sIHRhZykge1xuICAgIHZhciBhbmNlc3RvckluZm8gPSBfYXNzaWduKHt9LCBvbGRJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvKTtcblxuICAgIHZhciBpbmZvID0ge1xuICAgICAgdGFnOiB0YWdcbiAgICB9O1xuXG4gICAgaWYgKGluU2NvcGVUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChidXR0b25TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gbnVsbDtcbiAgICB9IC8vIFNlZSBydWxlcyBmb3IgJ2xpJywgJ2RkJywgJ2R0JyBzdGFydCB0YWdzIGluXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuXG5cbiAgICBpZiAoc3BlY2lhbFRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSAmJiB0YWcgIT09ICdhZGRyZXNzJyAmJiB0YWcgIT09ICdkaXYnICYmIHRhZyAhPT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsO1xuICAgIH1cblxuICAgIGFuY2VzdG9ySW5mby5jdXJyZW50ID0gaW5mbztcblxuICAgIGlmICh0YWcgPT09ICdmb3JtJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmZvcm1UYWcgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdhJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnYnV0dG9uJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdub2JyJykge1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2xpJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdkZCcgfHwgdGFnID09PSAnZHQnKSB7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIHJldHVybiBhbmNlc3RvckluZm87XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXJcbiAgICovXG5cblxuICB2YXIgaXNUYWdWYWxpZFdpdGhQYXJlbnQgPSBmdW5jdGlvbiAodGFnLCBwYXJlbnRUYWcpIHtcbiAgICAvLyBGaXJzdCwgbGV0J3MgY2hlY2sgaWYgd2UncmUgaW4gYW4gdW51c3VhbCBwYXJzaW5nIG1vZGUuLi5cbiAgICBzd2l0Y2ggKHBhcmVudFRhZykge1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluc2VsZWN0XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnb3B0aW9uJyB8fCB0YWcgPT09ICdvcHRncm91cCcgfHwgdGFnID09PSAnI3RleHQnO1xuXG4gICAgICBjYXNlICdvcHRncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdvcHRpb24nIHx8IHRhZyA9PT0gJyN0ZXh0JztcbiAgICAgIC8vIFN0cmljdGx5IHNwZWFraW5nLCBzZWVpbmcgYW4gPG9wdGlvbj4gZG9lc24ndCBtZWFuIHdlJ3JlIGluIGEgPHNlbGVjdD5cbiAgICAgIC8vIGJ1dFxuXG4gICAgICBjYXNlICdvcHRpb24nOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGRcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNhcHRpb25cbiAgICAgIC8vIE5vIHNwZWNpYWwgYmVoYXZpb3Igc2luY2UgdGhlc2UgcnVsZXMgZmFsbCBiYWNrIHRvIFwiaW4gYm9keVwiIG1vZGUgZm9yXG4gICAgICAvLyBhbGwgZXhjZXB0IHNwZWNpYWwgdGFibGUgbm9kZXMgd2hpY2ggY2F1c2UgYmFkIHBhcnNpbmcgYmVoYXZpb3IgYW55d2F5LlxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludHJcblxuICAgICAgY2FzZSAndHInOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndGgnIHx8IHRhZyA9PT0gJ3RkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50Ym9keVxuXG4gICAgICBjYXNlICd0Ym9keSc6XG4gICAgICBjYXNlICd0aGVhZCc6XG4gICAgICBjYXNlICd0Zm9vdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0cicgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY29sZ3JvdXBcblxuICAgICAgY2FzZSAnY29sZ3JvdXAnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnY29sJyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50YWJsZVxuXG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjYXB0aW9uJyB8fCB0YWcgPT09ICdjb2xncm91cCcgfHwgdGFnID09PSAndGJvZHknIHx8IHRhZyA9PT0gJ3Rmb290JyB8fCB0YWcgPT09ICd0aGVhZCcgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluaGVhZFxuXG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2Jhc2UnIHx8IHRhZyA9PT0gJ2Jhc2Vmb250JyB8fCB0YWcgPT09ICdiZ3NvdW5kJyB8fCB0YWcgPT09ICdsaW5rJyB8fCB0YWcgPT09ICdtZXRhJyB8fCB0YWcgPT09ICd0aXRsZScgfHwgdGFnID09PSAnbm9zY3JpcHQnIHx8IHRhZyA9PT0gJ25vZnJhbWVzJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZW1hbnRpY3MuaHRtbCN0aGUtaHRtbC1lbGVtZW50XG5cbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnaGVhZCcgfHwgdGFnID09PSAnYm9keScgfHwgdGFnID09PSAnZnJhbWVzZXQnO1xuXG4gICAgICBjYXNlICdmcmFtZXNldCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdmcmFtZSc7XG5cbiAgICAgIGNhc2UgJyNkb2N1bWVudCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdodG1sJztcbiAgICB9IC8vIFByb2JhYmx5IGluIHRoZSBcImluIGJvZHlcIiBwYXJzaW5nIG1vZGUsIHNvIHdlIG91dGxhdyBvbmx5IHRhZyBjb21ib3NcbiAgICAvLyB3aGVyZSB0aGUgcGFyc2luZyBydWxlcyBjYXVzZSBpbXBsaWNpdCBvcGVucyBvciBjbG9zZXMgdG8gYmUgYWRkZWQuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuXG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gcGFyZW50VGFnICE9PSAnaDEnICYmIHBhcmVudFRhZyAhPT0gJ2gyJyAmJiBwYXJlbnRUYWcgIT09ICdoMycgJiYgcGFyZW50VGFnICE9PSAnaDQnICYmIHBhcmVudFRhZyAhPT0gJ2g1JyAmJiBwYXJlbnRUYWcgIT09ICdoNic7XG5cbiAgICAgIGNhc2UgJ3JwJzpcbiAgICAgIGNhc2UgJ3J0JzpcbiAgICAgICAgcmV0dXJuIGltcGxpZWRFbmRUYWdzLmluZGV4T2YocGFyZW50VGFnKSA9PT0gLTE7XG5cbiAgICAgIGNhc2UgJ2JvZHknOlxuICAgICAgY2FzZSAnY2FwdGlvbic6XG4gICAgICBjYXNlICdjb2wnOlxuICAgICAgY2FzZSAnY29sZ3JvdXAnOlxuICAgICAgY2FzZSAnZnJhbWVzZXQnOlxuICAgICAgY2FzZSAnZnJhbWUnOlxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICBjYXNlICdodG1sJzpcbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgIGNhc2UgJ3RoJzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgLy8gVGhlc2UgdGFncyBhcmUgb25seSB2YWxpZCB3aXRoIGEgZmV3IHBhcmVudHMgdGhhdCBoYXZlIHNwZWNpYWwgY2hpbGRcbiAgICAgICAgLy8gcGFyc2luZyBydWxlcyAtLSBpZiB3ZSdyZSBkb3duIGhlcmUsIHRoZW4gbm9uZSBvZiB0aG9zZSBtYXRjaGVkIGFuZFxuICAgICAgICAvLyBzbyB3ZSBhbGxvdyBpdCBvbmx5IGlmIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcGFyZW50IGlzLCBhcyBhbGwgb3RoZXJcbiAgICAgICAgLy8gY2FzZXMgYXJlIGludmFsaWQuXG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgPT0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cblxuXG4gIHZhciBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnID0gZnVuY3Rpb24gKHRhZywgYW5jZXN0b3JJbmZvKSB7XG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnYXJ0aWNsZSc6XG4gICAgICBjYXNlICdhc2lkZSc6XG4gICAgICBjYXNlICdibG9ja3F1b3RlJzpcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBjYXNlICdkaXInOlxuICAgICAgY2FzZSAnZGl2JzpcbiAgICAgIGNhc2UgJ2RsJzpcbiAgICAgIGNhc2UgJ2ZpZWxkc2V0JzpcbiAgICAgIGNhc2UgJ2ZpZ2NhcHRpb24nOlxuICAgICAgY2FzZSAnZmlndXJlJzpcbiAgICAgIGNhc2UgJ2Zvb3Rlcic6XG4gICAgICBjYXNlICdoZWFkZXInOlxuICAgICAgY2FzZSAnaGdyb3VwJzpcbiAgICAgIGNhc2UgJ21haW4nOlxuICAgICAgY2FzZSAnbWVudSc6XG4gICAgICBjYXNlICduYXYnOlxuICAgICAgY2FzZSAnb2wnOlxuICAgICAgY2FzZSAncCc6XG4gICAgICBjYXNlICdzZWN0aW9uJzpcbiAgICAgIGNhc2UgJ3N1bW1hcnknOlxuICAgICAgY2FzZSAndWwnOlxuICAgICAgY2FzZSAncHJlJzpcbiAgICAgIGNhc2UgJ2xpc3RpbmcnOlxuICAgICAgY2FzZSAndGFibGUnOlxuICAgICAgY2FzZSAnaHInOlxuICAgICAgY2FzZSAneG1wJzpcbiAgICAgIGNhc2UgJ2gxJzpcbiAgICAgIGNhc2UgJ2gyJzpcbiAgICAgIGNhc2UgJ2gzJzpcbiAgICAgIGNhc2UgJ2g0JzpcbiAgICAgIGNhc2UgJ2g1JzpcbiAgICAgIGNhc2UgJ2g2JzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnZm9ybSc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZm9ybVRhZyB8fCBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2xpJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdkZCc6XG4gICAgICBjYXNlICdkdCc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnYSc6XG4gICAgICAgIC8vIFNwZWMgc2F5cyBzb21ldGhpbmcgYWJvdXQgc3RvcmluZyBhIGxpc3Qgb2YgbWFya2VycywgYnV0IGl0IHNvdW5kc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIHRoaXMgY2hlY2suXG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ25vYnInOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHZhciBkaWRXYXJuJDEgPSB7fTtcblxuICB2YWxpZGF0ZURPTU5lc3RpbmcgPSBmdW5jdGlvbiAoY2hpbGRUYWcsIGNoaWxkVGV4dCwgYW5jZXN0b3JJbmZvKSB7XG4gICAgYW5jZXN0b3JJbmZvID0gYW5jZXN0b3JJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvO1xuICAgIHZhciBwYXJlbnRJbmZvID0gYW5jZXN0b3JJbmZvLmN1cnJlbnQ7XG4gICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudEluZm8gJiYgcGFyZW50SW5mby50YWc7XG5cbiAgICBpZiAoY2hpbGRUZXh0ICE9IG51bGwpIHtcbiAgICAgIGlmIChjaGlsZFRhZyAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3Rpbmc6IHdoZW4gY2hpbGRUZXh0IGlzIHBhc3NlZCwgY2hpbGRUYWcgc2hvdWxkIGJlIG51bGwnKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGRUYWcgPSAnI3RleHQnO1xuICAgIH1cblxuICAgIHZhciBpbnZhbGlkUGFyZW50ID0gaXNUYWdWYWxpZFdpdGhQYXJlbnQoY2hpbGRUYWcsIHBhcmVudFRhZykgPyBudWxsIDogcGFyZW50SW5mbztcbiAgICB2YXIgaW52YWxpZEFuY2VzdG9yID0gaW52YWxpZFBhcmVudCA/IG51bGwgOiBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnKGNoaWxkVGFnLCBhbmNlc3RvckluZm8pO1xuICAgIHZhciBpbnZhbGlkUGFyZW50T3JBbmNlc3RvciA9IGludmFsaWRQYXJlbnQgfHwgaW52YWxpZEFuY2VzdG9yO1xuXG4gICAgaWYgKCFpbnZhbGlkUGFyZW50T3JBbmNlc3Rvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhbmNlc3RvclRhZyA9IGludmFsaWRQYXJlbnRPckFuY2VzdG9yLnRhZztcbiAgICB2YXIgd2FybktleSA9ICEhaW52YWxpZFBhcmVudCArICd8JyArIGNoaWxkVGFnICsgJ3wnICsgYW5jZXN0b3JUYWc7XG5cbiAgICBpZiAoZGlkV2FybiQxW3dhcm5LZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybiQxW3dhcm5LZXldID0gdHJ1ZTtcbiAgICB2YXIgdGFnRGlzcGxheU5hbWUgPSBjaGlsZFRhZztcbiAgICB2YXIgd2hpdGVzcGFjZUluZm8gPSAnJztcblxuICAgIGlmIChjaGlsZFRhZyA9PT0gJyN0ZXh0Jykge1xuICAgICAgaWYgKC9cXFMvLnRlc3QoY2hpbGRUZXh0KSkge1xuICAgICAgICB0YWdEaXNwbGF5TmFtZSA9ICdUZXh0IG5vZGVzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJ1doaXRlc3BhY2UgdGV4dCBub2Rlcyc7XG4gICAgICAgIHdoaXRlc3BhY2VJbmZvID0gXCIgTWFrZSBzdXJlIHlvdSBkb24ndCBoYXZlIGFueSBleHRyYSB3aGl0ZXNwYWNlIGJldHdlZW4gdGFncyBvbiBcIiArICdlYWNoIGxpbmUgb2YgeW91ciBzb3VyY2UgY29kZS4nO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWdEaXNwbGF5TmFtZSA9ICc8JyArIGNoaWxkVGFnICsgJz4nO1xuICAgIH1cblxuICAgIGlmIChpbnZhbGlkUGFyZW50KSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgICBpZiAoYW5jZXN0b3JUYWcgPT09ICd0YWJsZScgJiYgY2hpbGRUYWcgPT09ICd0cicpIHtcbiAgICAgICAgaW5mbyArPSAnIEFkZCBhIDx0Ym9keT4sIDx0aGVhZD4gb3IgPHRmb290PiB0byB5b3VyIGNvZGUgdG8gbWF0Y2ggdGhlIERPTSB0cmVlIGdlbmVyYXRlZCBieSAnICsgJ3RoZSBicm93c2VyLic7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGNoaWxkIG9mIDwlcz4uJXMlcycsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZywgd2hpdGVzcGFjZUluZm8sIGluZm8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBkZXNjZW5kYW50IG9mICcgKyAnPCVzPi4nLCB0YWdEaXNwbGF5TmFtZSwgYW5jZXN0b3JUYWcpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDE7XG5cbntcbiAgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMSA9ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnO1xufVxuXG52YXIgU1VTUEVOU0VfU1RBUlRfREFUQSA9ICckJztcbnZhciBTVVNQRU5TRV9FTkRfREFUQSA9ICcvJCc7XG52YXIgU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBID0gJyQ/JztcbnZhciBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBID0gJyQhJztcbnZhciBTVFlMRSQxID0gJ3N0eWxlJztcbnZhciBldmVudHNFbmFibGVkID0gbnVsbDtcbnZhciBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IG51bGw7XG5cbmZ1bmN0aW9uIHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgcHJvcHMpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnYnV0dG9uJzpcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICByZXR1cm4gISFwcm9wcy5hdXRvRm9jdXM7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRSb290SG9zdENvbnRleHQocm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gIHZhciB0eXBlO1xuICB2YXIgbmFtZXNwYWNlO1xuICB2YXIgbm9kZVR5cGUgPSByb290Q29udGFpbmVySW5zdGFuY2Uubm9kZVR5cGU7XG5cbiAgc3dpdGNoIChub2RlVHlwZSkge1xuICAgIGNhc2UgRE9DVU1FTlRfTk9ERTpcbiAgICBjYXNlIERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6XG4gICAgICB7XG4gICAgICAgIHR5cGUgPSBub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/ICcjZG9jdW1lbnQnIDogJyNmcmFnbWVudCc7XG4gICAgICAgIHZhciByb290ID0gcm9vdENvbnRhaW5lckluc3RhbmNlLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgbmFtZXNwYWNlID0gcm9vdCA/IHJvb3QubmFtZXNwYWNlVVJJIDogZ2V0Q2hpbGROYW1lc3BhY2UobnVsbCwgJycpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHZhciBjb250YWluZXIgPSBub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gcm9vdENvbnRhaW5lckluc3RhbmNlLnBhcmVudE5vZGUgOiByb290Q29udGFpbmVySW5zdGFuY2U7XG4gICAgICAgIHZhciBvd25OYW1lc3BhY2UgPSBjb250YWluZXIubmFtZXNwYWNlVVJJIHx8IG51bGw7XG4gICAgICAgIHR5cGUgPSBjb250YWluZXIudGFnTmFtZTtcbiAgICAgICAgbmFtZXNwYWNlID0gZ2V0Q2hpbGROYW1lc3BhY2Uob3duTmFtZXNwYWNlLCB0eXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIHZhbGlkYXRlZFRhZyA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhudWxsLCB2YWxpZGF0ZWRUYWcpO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgIGFuY2VzdG9ySW5mbzogYW5jZXN0b3JJbmZvXG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0Q2hpbGRIb3N0Q29udGV4dChwYXJlbnRIb3N0Q29udGV4dCwgdHlwZSwgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gIHtcbiAgICB2YXIgcGFyZW50SG9zdENvbnRleHREZXYgPSBwYXJlbnRIb3N0Q29udGV4dDtcbiAgICB2YXIgbmFtZXNwYWNlID0gZ2V0Q2hpbGROYW1lc3BhY2UocGFyZW50SG9zdENvbnRleHREZXYubmFtZXNwYWNlLCB0eXBlKTtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhwYXJlbnRIb3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgIGFuY2VzdG9ySW5mbzogYW5jZXN0b3JJbmZvXG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gcHJlcGFyZUZvckNvbW1pdChjb250YWluZXJJbmZvKSB7XG4gIGV2ZW50c0VuYWJsZWQgPSBpc0VuYWJsZWQoKTtcbiAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbigpO1xuICB2YXIgYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xuXG4gIHNldEVuYWJsZWQoZmFsc2UpO1xuICByZXR1cm4gYWN0aXZlSW5zdGFuY2U7XG59XG5mdW5jdGlvbiByZXNldEFmdGVyQ29tbWl0KGNvbnRhaW5lckluZm8pIHtcbiAgcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb25JbmZvcm1hdGlvbik7XG4gIHNldEVuYWJsZWQoZXZlbnRzRW5hYmxlZCk7XG4gIGV2ZW50c0VuYWJsZWQgPSBudWxsO1xuICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IG51bGw7XG59XG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZSh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICB2YXIgcGFyZW50TmFtZXNwYWNlO1xuXG4gIHtcbiAgICAvLyBUT0RPOiB0YWtlIG5hbWVzcGFjZSBpbnRvIGFjY291bnQgd2hlbiB2YWxpZGF0aW5nLlxuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIHZhbGlkYXRlRE9NTmVzdGluZyh0eXBlLCBudWxsLCBob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8pO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJykge1xuICAgICAgdmFyIHN0cmluZyA9ICcnICsgcHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgb3duQW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHN0cmluZywgb3duQW5jZXN0b3JJbmZvKTtcbiAgICB9XG5cbiAgICBwYXJlbnROYW1lc3BhY2UgPSBob3N0Q29udGV4dERldi5uYW1lc3BhY2U7XG4gIH1cblxuICB2YXIgZG9tRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgcGFyZW50TmFtZXNwYWNlKTtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgZG9tRWxlbWVudCk7XG4gIHVwZGF0ZUZpYmVyUHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICByZXR1cm4gZG9tRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGFwcGVuZEluaXRpYWxDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gZmluYWxpemVJbml0aWFsQ2hpbGRyZW4oZG9tRWxlbWVudCwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAgc2V0SW5pdGlhbFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gIHJldHVybiBzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIHByb3BzKTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVVcGRhdGUoZG9tRWxlbWVudCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcblxuICAgIGlmICh0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gIT09IHR5cGVvZiBvbGRQcm9wcy5jaGlsZHJlbiAmJiAodHlwZW9mIG5ld1Byb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInKSkge1xuICAgICAgdmFyIHN0cmluZyA9ICcnICsgbmV3UHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgb3duQW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHN0cmluZywgb3duQW5jZXN0b3JJbmZvKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlmZlByb3BlcnRpZXMoZG9tRWxlbWVudCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbn1cbmZ1bmN0aW9uIHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIHByb3BzKSB7XG4gIHJldHVybiB0eXBlID09PSAndGV4dGFyZWEnIHx8IHR5cGUgPT09ICdvcHRpb24nIHx8IHR5cGUgPT09ICdub3NjcmlwdCcgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInIHx8IHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sICE9IG51bGw7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0SW5zdGFuY2UodGV4dCwgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHRleHQsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG4gIH1cblxuICB2YXIgdGV4dE5vZGUgPSBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCB0ZXh0Tm9kZSk7XG4gIHJldHVybiB0ZXh0Tm9kZTtcbn1cbi8vIGlmIGEgY29tcG9uZW50IGp1c3QgaW1wb3J0cyBSZWFjdERPTSAoZS5nLiBmb3IgZmluZERPTU5vZGUpLlxuLy8gU29tZSBlbnZpcm9ubWVudHMgbWlnaHQgbm90IGhhdmUgc2V0VGltZW91dCBvciBjbGVhclRpbWVvdXQuXG5cbnZhciBzY2hlZHVsZVRpbWVvdXQgPSB0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IHNldFRpbWVvdXQgOiB1bmRlZmluZWQ7XG52YXIgY2FuY2VsVGltZW91dCA9IHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicgPyBjbGVhclRpbWVvdXQgOiB1bmRlZmluZWQ7XG52YXIgbm9UaW1lb3V0ID0gLTE7IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGNvbW1pdE1vdW50KGRvbUVsZW1lbnQsIHR5cGUsIG5ld1Byb3BzLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIC8vIERlc3BpdGUgdGhlIG5hbWluZyB0aGF0IG1pZ2h0IGltcGx5IG90aGVyd2lzZSwgdGhpcyBtZXRob2Qgb25seVxuICAvLyBmaXJlcyBpZiB0aGVyZSBpcyBhbiBgVXBkYXRlYCBlZmZlY3Qgc2NoZWR1bGVkIGR1cmluZyBtb3VudGluZy5cbiAgLy8gVGhpcyBoYXBwZW5zIGlmIGBmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbmAgcmV0dXJucyBgdHJ1ZWAgKHdoaWNoIGl0XG4gIC8vIGRvZXMgdG8gaW1wbGVtZW50IHRoZSBgYXV0b0ZvY3VzYCBhdHRyaWJ1dGUgb24gdGhlIGNsaWVudCkuIEJ1dFxuICAvLyB0aGVyZSBhcmUgYWxzbyBvdGhlciBjYXNlcyB3aGVuIHRoaXMgbWlnaHQgaGFwcGVuIChzdWNoIGFzIHBhdGNoaW5nXG4gIC8vIHVwIHRleHQgY29udGVudCBkdXJpbmcgaHlkcmF0aW9uIG1pc21hdGNoKS4gU28gd2UnbGwgY2hlY2sgdGhpcyBhZ2Fpbi5cbiAgaWYgKHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgbmV3UHJvcHMpKSB7XG4gICAgZG9tRWxlbWVudC5mb2N1cygpO1xuICB9XG59XG5mdW5jdGlvbiBjb21taXRVcGRhdGUoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIC8vIFVwZGF0ZSB0aGUgcHJvcHMgaGFuZGxlIHNvIHRoYXQgd2Uga25vdyB3aGljaCBwcm9wcyBhcmUgdGhlIG9uZXMgd2l0aFxuICAvLyB3aXRoIGN1cnJlbnQgZXZlbnQgaGFuZGxlcnMuXG4gIHVwZGF0ZUZpYmVyUHJvcHMoZG9tRWxlbWVudCwgbmV3UHJvcHMpOyAvLyBBcHBseSB0aGUgZGlmZiB0byB0aGUgRE9NIG5vZGUuXG5cbiAgdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xufVxuZnVuY3Rpb24gcmVzZXRUZXh0Q29udGVudChkb21FbGVtZW50KSB7XG4gIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsICcnKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFRleHRVcGRhdGUodGV4dEluc3RhbmNlLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSBuZXdUZXh0O1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkVG9Db250YWluZXIoY29udGFpbmVyLCBjaGlsZCkge1xuICB2YXIgcGFyZW50Tm9kZTtcblxuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBwYXJlbnROb2RlID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGNvbnRhaW5lcik7XG4gIH0gZWxzZSB7XG4gICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lcjtcbiAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgfSAvLyBUaGlzIGNvbnRhaW5lciBtaWdodCBiZSB1c2VkIGZvciBhIHBvcnRhbC5cbiAgLy8gSWYgc29tZXRoaW5nIGluc2lkZSBhIHBvcnRhbCBpcyBjbGlja2VkLCB0aGF0IGNsaWNrIHNob3VsZCBidWJibGVcbiAgLy8gdGhyb3VnaCB0aGUgUmVhY3QgdHJlZS4gSG93ZXZlciwgb24gTW9iaWxlIFNhZmFyaSB0aGUgY2xpY2sgd291bGRcbiAgLy8gbmV2ZXIgYnViYmxlIHRocm91Z2ggdGhlICpET00qIHRyZWUgdW5sZXNzIGFuIGFuY2VzdG9yIHdpdGggb25jbGlja1xuICAvLyBldmVudCBleGlzdHMuIFNvIHdlIHdvdWxkbid0IHNlZSBpdCBhbmQgZGlzcGF0Y2ggaXQuXG4gIC8vIFRoaXMgaXMgd2h5IHdlIGVuc3VyZSB0aGF0IG5vbiBSZWFjdCByb290IGNvbnRhaW5lcnMgaGF2ZSBpbmxpbmUgb25jbGlja1xuICAvLyBkZWZpbmVkLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExOTE4XG5cblxuICB2YXIgcmVhY3RSb290Q29udGFpbmVyID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG5cbiAgaWYgKChyZWFjdFJvb3RDb250YWluZXIgPT09IG51bGwgfHwgcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQpICYmIHBhcmVudE5vZGUub25jbGljayA9PT0gbnVsbCkge1xuICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQocGFyZW50Tm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc2VydEJlZm9yZShwYXJlbnRJbnN0YW5jZSwgY2hpbGQsIGJlZm9yZUNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xufVxuZnVuY3Rpb24gaW5zZXJ0SW5Db250YWluZXJCZWZvcmUoY29udGFpbmVyLCBjaGlsZCwgYmVmb3JlQ2hpbGQpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiByZW1vdmVDaGlsZEZyb21Db250YWluZXIoY29udGFpbmVyLCBjaGlsZCkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfVxufVxuZnVuY3Rpb24gaGlkZUluc3RhbmNlKGluc3RhbmNlKSB7XG4gIC8vIFRPRE86IERvZXMgdGhpcyB3b3JrIGZvciBhbGwgZWxlbWVudCB0eXBlcz8gV2hhdCBhYm91dCBNYXRoTUw/IFNob3VsZCB3ZVxuICAvLyBwYXNzIGhvc3QgY29udGV4dCB0byB0aGlzIG1ldGhvZD9cbiAgaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgdmFyIHN0eWxlID0gaW5zdGFuY2Uuc3R5bGU7XG5cbiAgaWYgKHR5cGVvZiBzdHlsZS5zZXRQcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0eWxlLnNldFByb3BlcnR5KCdkaXNwbGF5JywgJ25vbmUnLCAnaW1wb3J0YW50Jyk7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxufVxuZnVuY3Rpb24gaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9ICcnO1xufVxuZnVuY3Rpb24gdW5oaWRlSW5zdGFuY2UoaW5zdGFuY2UsIHByb3BzKSB7XG4gIGluc3RhbmNlID0gaW5zdGFuY2U7XG4gIHZhciBzdHlsZVByb3AgPSBwcm9wc1tTVFlMRSQxXTtcbiAgdmFyIGRpc3BsYXkgPSBzdHlsZVByb3AgIT09IHVuZGVmaW5lZCAmJiBzdHlsZVByb3AgIT09IG51bGwgJiYgc3R5bGVQcm9wLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykgPyBzdHlsZVByb3AuZGlzcGxheSA6IG51bGw7XG4gIGluc3RhbmNlLnN0eWxlLmRpc3BsYXkgPSBkYW5nZXJvdXNTdHlsZVZhbHVlKCdkaXNwbGF5JywgZGlzcGxheSk7XG59XG5mdW5jdGlvbiB1bmhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSB0ZXh0O1xufVxuZnVuY3Rpb24gY2xlYXJDb250YWluZXIoY29udGFpbmVyKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci50ZXh0Q29udGVudCA9ICcnO1xuICB9IGVsc2UgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHZhciBib2R5ID0gY29udGFpbmVyLmJvZHk7XG5cbiAgICBpZiAoYm9keSAhPSBudWxsKSB7XG4gICAgICBib2R5LnRleHRDb250ZW50ID0gJyc7XG4gICAgfVxuICB9XG59IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGNhbkh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMpIHtcbiAgaWYgKGluc3RhbmNlLm5vZGVUeXBlICE9PSBFTEVNRU5UX05PREUgfHwgdHlwZS50b0xvd2VyQ2FzZSgpICE9PSBpbnN0YW5jZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBoYXMgbm93IGJlZW4gcmVmaW5lZCB0byBhbiBlbGVtZW50IG5vZGUuXG5cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKGluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICh0ZXh0ID09PSAnJyB8fCBpbnN0YW5jZS5ub2RlVHlwZSAhPT0gVEVYVF9OT0RFKSB7XG4gICAgLy8gRW1wdHkgc3RyaW5ncyBhcmUgbm90IHBhcnNlZCBieSBIVE1MIHNvIHRoZXJlIHdvbid0IGJlIGEgY29ycmVjdCBtYXRjaCBoZXJlLlxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFRoaXMgaGFzIG5vdyBiZWVuIHJlZmluZWQgdG8gYSB0ZXh0IG5vZGUuXG5cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEE7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQTtcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGUobm9kZSkge1xuICAvLyBTa2lwIG5vbi1oeWRyYXRhYmxlIG5vZGVzLlxuICBmb3IgKDsgbm9kZSAhPSBudWxsOyBub2RlID0gbm9kZS5uZXh0U2libGluZykge1xuICAgIHZhciBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGU7XG5cbiAgICBpZiAobm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSB8fCBub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGluc3RhbmNlKSB7XG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShpbnN0YW5jZS5uZXh0U2libGluZyk7XG59XG5mdW5jdGlvbiBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChwYXJlbnRJbnN0YW5jZSkge1xuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGUocGFyZW50SW5zdGFuY2UuZmlyc3RDaGlsZCk7XG59XG5mdW5jdGlvbiBoeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIGluc3RhbmNlKTsgLy8gVE9ETzogUG9zc2libHkgZGVmZXIgdGhpcyB1bnRpbCB0aGUgY29tbWl0IHBoYXNlIHdoZXJlIGFsbCB0aGUgZXZlbnRzXG4gIC8vIGdldCBhdHRhY2hlZC5cblxuICB1cGRhdGVGaWJlclByb3BzKGluc3RhbmNlLCBwcm9wcyk7XG4gIHZhciBwYXJlbnROYW1lc3BhY2U7XG5cbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIHBhcmVudE5hbWVzcGFjZSA9IGhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZTtcbiAgfVxuXG4gIHJldHVybiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgcGFyZW50TmFtZXNwYWNlKTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHRleHRJbnN0YW5jZSk7XG4gIHJldHVybiBkaWZmSHlkcmF0ZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG59XG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSBzdXNwZW5zZUluc3RhbmNlLm5leHRTaWJsaW5nOyAvLyBTa2lwIHBhc3QgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cblxuICB2YXIgZGVwdGggPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGRhdGEgPSBub2RlLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICB9IC8vIFRPRE86IFdhcm4sIHdlIGRpZG4ndCBmaW5kIHRoZSBlbmQgY29tbWVudCBib3VuZGFyeS5cblxuXG4gIHJldHVybiBudWxsO1xufSAvLyBSZXR1cm5zIHRoZSBTdXNwZW5zZUluc3RhbmNlIGlmIHRoaXMgbm9kZSBpcyBhIGRpcmVjdCBjaGlsZCBvZiBhXG4vLyBTdXNwZW5zZUluc3RhbmNlLiBJLmUuIGlmIGl0cyBwcmV2aW91cyBzaWJsaW5nIGlzIGEgQ29tbWVudCB3aXRoXG4vLyBTVVNQRU5TRV94X1NUQVJUX0RBVEEuIE90aGVyd2lzZSwgbnVsbC5cblxuZnVuY3Rpb24gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXRJbnN0YW5jZSkge1xuICB2YXIgbm9kZSA9IHRhcmdldEluc3RhbmNlLnByZXZpb3VzU2libGluZzsgLy8gU2tpcCBwYXN0IGFsbCBub2RlcyB3aXRoaW4gdGhpcyBzdXNwZW5zZSBib3VuZGFyeS5cbiAgLy8gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIG5vZGVzIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3dcbiAgLy8gZGVlcCB3ZSBhcmUgYW5kIG9ubHkgYnJlYWsgb3V0IHdoZW4gd2UncmUgYmFjayBvbiB0b3AuXG5cbiAgdmFyIGRlcHRoID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBkYXRhID0gbm9kZS5kYXRhO1xuXG4gICAgICBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSkge1xuICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBjb21taXRIeWRyYXRlZENvbnRhaW5lcihjb250YWluZXIpIHtcbiAgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuICByZXRyeUlmQmxvY2tlZE9uKGNvbnRhaW5lcik7XG59XG5mdW5jdGlvbiBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSkge1xuICAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG4gIHJldHJ5SWZCbG9ja2VkT24oc3VzcGVuc2VJbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBkaWROb3RNYXRjaEh5ZHJhdGVkQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RNYXRjaEh5ZHJhdGVkVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RIeWRyYXRlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSkge1xuICB7XG4gICAgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSA7IGVsc2Uge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEh5ZHJhdGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkgOyBlbHNlIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0eXBlLCBwcm9wcykge1xuICB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudENvbnRhaW5lciwgdHlwZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudENvbnRhaW5lciwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0eXBlLCBwcm9wcykge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudEluc3RhbmNlLCB0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZVN1c3BlbnNlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIDtcbn1cbnZhciBjbGllbnRJZCA9IDA7XG5mdW5jdGlvbiBtYWtlQ2xpZW50SWRJbkRFVih3YXJuT25BY2Nlc3NJbkRFVikge1xuICB2YXIgaWQgPSAncjonICsgKGNsaWVudElkKyspLnRvU3RyaW5nKDM2KTtcbiAgcmV0dXJuIHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgd2Fybk9uQWNjZXNzSW5ERVYoKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9LFxuICAgIHZhbHVlT2Y6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm5PbkFjY2Vzc0luREVWKCk7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gaXNPcGFxdWVIeWRyYXRpbmdPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX09QQVFVRV9JRF9UWVBFO1xufVxuZnVuY3Rpb24gbWFrZU9wYXF1ZUh5ZHJhdGluZ09iamVjdChhdHRlbXB0VG9SZWFkVmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfT1BBUVVFX0lEX1RZUEUsXG4gICAgdG9TdHJpbmc6IGF0dGVtcHRUb1JlYWRWYWx1ZSxcbiAgICB2YWx1ZU9mOiBhdHRlbXB0VG9SZWFkVmFsdWVcbiAgfTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVQb3J0YWxNb3VudChwb3J0YWxJbnN0YW5jZSkge1xuICB7XG4gICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocG9ydGFsSW5zdGFuY2UpO1xuICB9XG59XG5cbnZhciByYW5kb21LZXkgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcbnZhciBpbnRlcm5hbEluc3RhbmNlS2V5ID0gJ19fcmVhY3RGaWJlciQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsUHJvcHNLZXkgPSAnX19yZWFjdFByb3BzJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleSA9ICdfX3JlYWN0Q29udGFpbmVyJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5ID0gJ19fcmVhY3RFdmVudHMkJyArIHJhbmRvbUtleTtcbmZ1bmN0aW9uIHByZWNhY2hlRmliZXJOb2RlKGhvc3RJbnN0LCBub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBob3N0SW5zdDtcbn1cbmZ1bmN0aW9uIG1hcmtDb250YWluZXJBc1Jvb3QoaG9zdFJvb3QsIG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IGhvc3RSb290O1xufVxuZnVuY3Rpb24gdW5tYXJrQ29udGFpbmVyQXNSb290KG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IG51bGw7XG59XG5mdW5jdGlvbiBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChub2RlKSB7XG4gIHJldHVybiAhIW5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV07XG59IC8vIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVybiB0aGUgY2xvc2VzdCBIb3N0Q29tcG9uZW50IG9yIEhvc3RUZXh0IGZpYmVyIGFuY2VzdG9yLlxuLy8gSWYgdGhlIHRhcmdldCBub2RlIGlzIHBhcnQgb2YgYSBoeWRyYXRlZCBvciBub3QgeWV0IHJlbmRlcmVkIHN1YnRyZWUsIHRoZW5cbi8vIHRoaXMgbWF5IGFsc28gcmV0dXJuIGEgU3VzcGVuc2VDb21wb25lbnQgb3IgSG9zdFJvb3QgdG8gaW5kaWNhdGUgdGhhdC5cbi8vIENvbmNlcHR1YWxseSB0aGUgSG9zdFJvb3QgZmliZXIgaXMgYSBjaGlsZCBvZiB0aGUgQ29udGFpbmVyIG5vZGUuIFNvIGlmIHlvdVxuLy8gcGFzcyB0aGUgQ29udGFpbmVyIG5vZGUgYXMgdGhlIHRhcmdldE5vZGUsIHlvdSB3aWxsIG5vdCBhY3R1YWxseSBnZXQgdGhlXG4vLyBIb3N0Um9vdCBiYWNrLiBUbyBnZXQgdG8gdGhlIEhvc3RSb290LCB5b3UgbmVlZCB0byBwYXNzIGEgY2hpbGQgb2YgaXQuXG4vLyBUaGUgc2FtZSB0aGluZyBhcHBsaWVzIHRvIFN1c3BlbnNlIGJvdW5kYXJpZXMuXG5cbmZ1bmN0aW9uIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpIHtcbiAgdmFyIHRhcmdldEluc3QgPSB0YXJnZXROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gIGlmICh0YXJnZXRJbnN0KSB7XG4gICAgLy8gRG9uJ3QgcmV0dXJuIEhvc3RSb290IG9yIFN1c3BlbnNlQ29tcG9uZW50IGhlcmUuXG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH0gLy8gSWYgdGhlIGRpcmVjdCBldmVudCB0YXJnZXQgaXNuJ3QgYSBSZWFjdCBvd25lZCBET00gbm9kZSwgd2UgbmVlZCB0byBsb29rXG4gIC8vIHRvIHNlZSBpZiBvbmUgb2YgaXRzIHBhcmVudHMgaXMgYSBSZWFjdCBvd25lZCBET00gbm9kZS5cblxuXG4gIHZhciBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuXG4gIHdoaWxlIChwYXJlbnROb2RlKSB7XG4gICAgLy8gV2UnbGwgY2hlY2sgaWYgdGhpcyBpcyBhIGNvbnRhaW5lciByb290IHRoYXQgY291bGQgaW5jbHVkZVxuICAgIC8vIFJlYWN0IG5vZGVzIGluIHRoZSBmdXR1cmUuIFdlIG5lZWQgdG8gY2hlY2sgdGhpcyBmaXJzdCBiZWNhdXNlXG4gICAgLy8gaWYgd2UncmUgYSBjaGlsZCBvZiBhIGRlaHlkcmF0ZWQgY29udGFpbmVyLCB3ZSBuZWVkIHRvIGZpcnN0XG4gICAgLy8gZmluZCB0aGF0IGlubmVyIGNvbnRhaW5lciBiZWZvcmUgbW92aW5nIG9uIHRvIGZpbmRpbmcgdGhlIHBhcmVudFxuICAgIC8vIGluc3RhbmNlLiBOb3RlIHRoYXQgd2UgZG9uJ3QgY2hlY2sgdGhpcyBmaWVsZCBvbiAgdGhlIHRhcmdldE5vZGVcbiAgICAvLyBpdHNlbGYgYmVjYXVzZSB0aGUgZmliZXJzIGFyZSBjb25jZXB0dWFsbHkgYmV0d2VlbiB0aGUgY29udGFpbmVyXG4gICAgLy8gbm9kZSBhbmQgdGhlIGZpcnN0IGNoaWxkLiBJdCBpc24ndCBzdXJyb3VuZGluZyB0aGUgY29udGFpbmVyIG5vZGUuXG4gICAgLy8gSWYgaXQncyBub3QgYSBjb250YWluZXIsIHdlIGNoZWNrIGlmIGl0J3MgYW4gaW5zdGFuY2UuXG4gICAgdGFyZ2V0SW5zdCA9IHBhcmVudE5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gfHwgcGFyZW50Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICAgIGlmICh0YXJnZXRJbnN0KSB7XG4gICAgICAvLyBTaW5jZSB0aGlzIHdhc24ndCB0aGUgZGlyZWN0IHRhcmdldCBvZiB0aGUgZXZlbnQsIHdlIG1pZ2h0IGhhdmVcbiAgICAgIC8vIHN0ZXBwZWQgcGFzdCBkZWh5ZHJhdGVkIERPTSBub2RlcyB0byBnZXQgaGVyZS4gSG93ZXZlciB0aGV5IGNvdWxkXG4gICAgICAvLyBhbHNvIGhhdmUgYmVlbiBub24tUmVhY3Qgbm9kZXMuIFdlIG5lZWQgdG8gYW5zd2VyIHdoaWNoIG9uZS5cbiAgICAgIC8vIElmIHdlIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGhhdmUgYW55IGNoaWxkcmVuLCB0aGVuIHRoZXJlIGNhbid0IGJlXG4gICAgICAvLyBhIG5lc3RlZCBzdXNwZW5zZSBib3VuZGFyeSB3aXRoaW4gaXQuIFNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIGZhc3RcbiAgICAgIC8vIGJhaWxvdXQuIE1vc3Qgb2YgdGhlIHRpbWUsIHdoZW4gcGVvcGxlIGFkZCBub24tUmVhY3QgY2hpbGRyZW4gdG9cbiAgICAgIC8vIHRoZSB0cmVlLCBpdCBpcyB1c2luZyBhIHJlZiB0byBhIGNoaWxkLWxlc3MgRE9NIG5vZGUuXG4gICAgICAvLyBOb3JtYWxseSB3ZSdkIG9ubHkgbmVlZCB0byBjaGVjayBvbmUgb2YgdGhlIGZpYmVycyBiZWNhdXNlIGlmIGl0XG4gICAgICAvLyBoYXMgZXZlciBnb25lIGZyb20gaGF2aW5nIGNoaWxkcmVuIHRvIGRlbGV0aW5nIHRoZW0gb3IgdmljZSB2ZXJzYVxuICAgICAgLy8gaXQgd291bGQgaGF2ZSBkZWxldGVkIHRoZSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IG5lc3RlZCBpbnNpZGUgYWxyZWFkeS5cbiAgICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSBIb3N0Um9vdCBzdGFydHMgb3V0IHdpdGggYW4gYWx0ZXJuYXRlIGl0IG1pZ2h0XG4gICAgICAvLyBoYXZlIG9uZSBvbiB0aGUgYWx0ZXJuYXRlIHNvIHdlIG5lZWQgdG8gY2hlY2sgaW4gY2FzZSB0aGlzIHdhcyBhXG4gICAgICAvLyByb290LlxuICAgICAgdmFyIGFsdGVybmF0ZSA9IHRhcmdldEluc3QuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAodGFyZ2V0SW5zdC5jaGlsZCAhPT0gbnVsbCB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIE5leHQgd2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBub2RlIHRoYXQgc2tpcHBlZCBwYXN0IGlzXG4gICAgICAgIC8vIG5lc3RlZCB3aXRoaW4gYSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IGFuZCBpZiBzbywgd2hpY2ggb25lLlxuICAgICAgICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0Tm9kZSk7XG5cbiAgICAgICAgd2hpbGUgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBmb3VuZCBhIHN1c3BlbnNlIGluc3RhbmNlLiBUaGF0IG1lYW5zIHRoYXQgd2UgaGF2ZW4ndFxuICAgICAgICAgIC8vIGh5ZHJhdGVkIGl0IHlldC4gRXZlbiB0aG91Z2ggd2UgbGVhdmUgdGhlIGNvbW1lbnRzIGluIHRoZVxuICAgICAgICAgIC8vIERPTSBhZnRlciBoeWRyYXRpbmcsIGFuZCB0aGVyZSBhcmUgYm91bmRhcmllcyBpbiB0aGUgRE9NXG4gICAgICAgICAgLy8gdGhhdCBjb3VsZCBhbHJlYWR5IGJlIGh5ZHJhdGVkLCB3ZSB3b3VsZG4ndCBoYXZlIGZvdW5kIHRoZW1cbiAgICAgICAgICAvLyB0aHJvdWdoIHRoaXMgcGFzcyBzaW5jZSBpZiB0aGUgdGFyZ2V0IGlzIGh5ZHJhdGVkIGl0IHdvdWxkXG4gICAgICAgICAgLy8gaGF2ZSBoYWQgYW4gaW50ZXJuYWxJbnN0YW5jZUtleSBvbiBpdC5cbiAgICAgICAgICAvLyBMZXQncyBnZXQgdGhlIGZpYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgU3VzcGVuc2VDb21wb25lbnRcbiAgICAgICAgICAvLyBhcyB0aGUgZGVlcGVzdCBpbnN0YW5jZS5cbiAgICAgICAgICB2YXIgdGFyZ2V0U3VzcGVuc2VJbnN0ID0gc3VzcGVuc2VJbnN0YW5jZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICAgICAgICAgIGlmICh0YXJnZXRTdXNwZW5zZUluc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRTdXNwZW5zZUluc3Q7XG4gICAgICAgICAgfSAvLyBJZiB3ZSBkb24ndCBmaW5kIGEgRmliZXIgb24gdGhlIGNvbW1lbnQsIGl0IG1pZ2h0IGJlIGJlY2F1c2VcbiAgICAgICAgICAvLyB3ZSBoYXZlbid0IGdvdHRlbiB0byBoeWRyYXRlIGl0IHlldC4gVGhlcmUgbWlnaHQgc3RpbGwgYmUgYVxuICAgICAgICAgIC8vIHBhcmVudCBib3VuZGFyeSB0aGF0IGhhc24ndCBhYm92ZSB0aGlzIG9uZSBzbyB3ZSBuZWVkIHRvIGZpbmRcbiAgICAgICAgICAvLyB0aGUgb3V0ZXIgbW9zdCB0aGF0IGlzIGtub3duLlxuXG5cbiAgICAgICAgICBzdXNwZW5zZUluc3RhbmNlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTsgLy8gSWYgd2UgZG9uJ3QgZmluZCBvbmUsIHRoZW4gdGhhdCBzaG91bGQgbWVhbiB0aGF0IHRoZSBwYXJlbnRcbiAgICAgICAgICAvLyBob3N0IGNvbXBvbmVudCBhbHNvIGhhc24ndCBoeWRyYXRlZCB5ZXQuIFdlIGNhbiByZXR1cm4gaXRcbiAgICAgICAgICAvLyBiZWxvdyBzaW5jZSBpdCB3aWxsIGJhaWwgb3V0IG9uIHRoZSBpc01vdW50ZWQgY2hlY2sgbGF0ZXIuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gICAgfVxuXG4gICAgdGFyZ2V0Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIFJlYWN0RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICogaW5zdGFuY2UsIG9yIG51bGwgaWYgdGhlIG5vZGUgd2FzIG5vdCByZW5kZXJlZCBieSB0aGlzIFJlYWN0LlxuICovXG5cbmZ1bmN0aW9uIGdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkge1xuICB2YXIgaW5zdCA9IG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gfHwgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XTtcblxuICBpZiAoaW5zdCkge1xuICAgIGlmIChpbnN0LnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFRleHQgfHwgaW5zdC50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgcmV0dXJuIGluc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHaXZlbiBhIFJlYWN0RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudCwgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nXG4gKiBET00gbm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXROb2RlRnJvbUluc3RhbmNlKGluc3QpIHtcbiAgaWYgKGluc3QudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0VGV4dCkge1xuICAgIC8vIEluIEZpYmVyIHRoaXMsIGlzIGp1c3QgdGhlIHN0YXRlIG5vZGUgcmlnaHQgbm93LiBXZSBhc3N1bWUgaXQgd2lsbCBiZVxuICAgIC8vIGEgaG9zdCBjb21wb25lbnQgb3IgaG9zdCB0ZXh0LlxuICAgIHJldHVybiBpbnN0LnN0YXRlTm9kZTtcbiAgfSAvLyBXaXRob3V0IHRoaXMgZmlyc3QgaW52YXJpYW50LCBwYXNzaW5nIGEgbm9uLURPTS1jb21wb25lbnQgdHJpZ2dlcnMgdGhlIG5leHRcbiAgLy8gaW52YXJpYW50IGZvciBhIG1pc3NpbmcgcGFyZW50LCB3aGljaCBpcyBzdXBlciBjb25mdXNpbmcuXG5cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiZ2V0Tm9kZUZyb21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC5cIiApO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG59XG5mdW5jdGlvbiB1cGRhdGVGaWJlclByb3BzKG5vZGUsIHByb3BzKSB7XG4gIG5vZGVbaW50ZXJuYWxQcm9wc0tleV0gPSBwcm9wcztcbn1cbmZ1bmN0aW9uIGdldEV2ZW50TGlzdGVuZXJTZXQobm9kZSkge1xuICB2YXIgZWxlbWVudExpc3RlbmVyU2V0ID0gbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldO1xuXG4gIGlmIChlbGVtZW50TGlzdGVuZXJTZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVsZW1lbnRMaXN0ZW5lclNldCA9IG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XSA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50TGlzdGVuZXJTZXQ7XG59XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCkge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgKyAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJyk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvciQxID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciQxID0gZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSAmJiAhKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IkMS5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvciQxLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCdGYWlsZWQgJXMgdHlwZTogJXMnLCBsb2NhdGlvbiwgZXJyb3IkMS5tZXNzYWdlKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWx1ZVN0YWNrID0gW107XG52YXIgZmliZXJTdGFjaztcblxue1xuICBmaWJlclN0YWNrID0gW107XG59XG5cbnZhciBpbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjcmVhdGVDdXJzb3IoZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgY3VycmVudDogZGVmYXVsdFZhbHVlXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBvcChjdXJzb3IsIGZpYmVyKSB7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICB7XG4gICAgICBlcnJvcignVW5leHBlY3RlZCBwb3AuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIGlmIChmaWJlciAhPT0gZmliZXJTdGFja1tpbmRleF0pIHtcbiAgICAgIGVycm9yKCdVbmV4cGVjdGVkIEZpYmVyIHBvcHBlZC4nKTtcbiAgICB9XG4gIH1cblxuICBjdXJzb3IuY3VycmVudCA9IHZhbHVlU3RhY2tbaW5kZXhdO1xuICB2YWx1ZVN0YWNrW2luZGV4XSA9IG51bGw7XG5cbiAge1xuICAgIGZpYmVyU3RhY2tbaW5kZXhdID0gbnVsbDtcbiAgfVxuXG4gIGluZGV4LS07XG59XG5cbmZ1bmN0aW9uIHB1c2goY3Vyc29yLCB2YWx1ZSwgZmliZXIpIHtcbiAgaW5kZXgrKztcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBjdXJzb3IuY3VycmVudDtcblxuICB7XG4gICAgZmliZXJTdGFja1tpbmRleF0gPSBmaWJlcjtcbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWU7XG59XG5cbnZhciB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQ7XG5cbntcbiAgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0ID0ge307XG59XG5cbnZhciBlbXB0eUNvbnRleHRPYmplY3QgPSB7fTtcblxue1xuICBPYmplY3QuZnJlZXplKGVtcHR5Q29udGV4dE9iamVjdCk7XG59IC8vIEEgY3Vyc29yIHRvIHRoZSBjdXJyZW50IG1lcmdlZCBjb250ZXh0IG9iamVjdCBvbiB0aGUgc3RhY2suXG5cblxudmFyIGNvbnRleHRTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihlbXB0eUNvbnRleHRPYmplY3QpOyAvLyBBIGN1cnNvciB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuXG52YXIgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihmYWxzZSk7IC8vIEtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIGNvbnRleHQgb2JqZWN0IHRoYXQgd2FzIG9uIHRoZSBzdGFjay5cbi8vIFdlIHVzZSB0aGlzIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHBhcmVudCBjb250ZXh0IGFmdGVyIHdlIGhhdmUgYWxyZWFkeVxuLy8gcHVzaGVkIHRoZSBuZXh0IGNvbnRleHQgcHJvdmlkZXIsIGFuZCBub3cgbmVlZCB0byBtZXJnZSB0aGVpciBjb250ZXh0cy5cblxudmFyIHByZXZpb3VzQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuZnVuY3Rpb24gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGRpZFB1c2hPd25Db250ZXh0SWZQcm92aWRlcikge1xuICB7XG4gICAgaWYgKGRpZFB1c2hPd25Db250ZXh0SWZQcm92aWRlciAmJiBpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAvLyBJZiB0aGUgZmliZXIgaXMgYSBjb250ZXh0IHByb3ZpZGVyIGl0c2VsZiwgd2hlbiB3ZSByZWFkIGl0cyBjb250ZXh0XG4gICAgICAvLyB3ZSBtYXkgaGF2ZSBhbHJlYWR5IHB1c2hlZCBpdHMgb3duIGNoaWxkIGNvbnRleHQgb24gdGhlIHN0YWNrLiBBIGNvbnRleHRcbiAgICAgIC8vIHByb3ZpZGVyIHNob3VsZCBub3QgXCJzZWVcIiBpdHMgb3duIGNoaWxkIGNvbnRleHQuIFRoZXJlZm9yZSB3ZSByZWFkIHRoZVxuICAgICAgLy8gcHJldmlvdXMgKHBhcmVudCkgY29udGV4dCBpbnN0ZWFkIGZvciBhIGNvbnRleHQgcHJvdmlkZXIuXG4gICAgICByZXR1cm4gcHJldmlvdXNDb250ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgbWFza2VkQ29udGV4dCkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPSB1bm1hc2tlZENvbnRleHQ7XG4gICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQgPSBtYXNrZWRDb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgIHZhciBjb250ZXh0VHlwZXMgPSB0eXBlLmNvbnRleHRUeXBlcztcblxuICAgIGlmICghY29udGV4dFR5cGVzKSB7XG4gICAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICAgIH0gLy8gQXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgdW5tYXNrZWQgY29udGV4dCBoYXMgY2hhbmdlZC5cbiAgICAvLyBGYWlsaW5nIHRvIGRvIHRoaXMgd2lsbCByZXN1bHQgaW4gdW5uZWNlc3NhcnkgY2FsbHMgdG8gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5cbiAgICAvLyBUaGlzIG1heSB0cmlnZ2VyIGluZmluaXRlIGxvb3BzIGlmIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgY2FsbHMgc2V0U3RhdGUuXG5cblxuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID09PSB1bm1hc2tlZENvbnRleHQpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIGNvbnRleHRUeXBlcykge1xuICAgICAgY29udGV4dFtrZXldID0gdW5tYXNrZWRDb250ZXh0W2tleV07XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcbiAgICAgIGNoZWNrUHJvcFR5cGVzKGNvbnRleHRUeXBlcywgY29udGV4dCwgJ2NvbnRleHQnLCBuYW1lKTtcbiAgICB9IC8vIENhY2hlIHVubWFza2VkIGNvbnRleHQgc28gd2UgY2FuIGF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIG5lY2Vzc2FyeS5cbiAgICAvLyBDb250ZXh0IGlzIGNyZWF0ZWQgYmVmb3JlIHRoZSBjbGFzcyBjb21wb25lbnQgaXMgaW5zdGFudGlhdGVkIHNvIGNoZWNrIGZvciBpbnN0YW5jZS5cblxuXG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzQ29udGV4dENoYW5nZWQoKSB7XG4gIHtcbiAgICByZXR1cm4gZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKHR5cGUpIHtcbiAge1xuICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IHR5cGUuY2hpbGRDb250ZXh0VHlwZXM7XG4gICAgcmV0dXJuIGNoaWxkQ29udGV4dFR5cGVzICE9PSBudWxsICYmIGNoaWxkQ29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wQ29udGV4dChmaWJlcikge1xuICB7XG4gICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyKSB7XG4gIHtcbiAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZmliZXIpO1xuICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyLCBjb250ZXh0LCBkaWRDaGFuZ2UpIHtcbiAge1xuICAgIGlmICghKGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50ID09PSBlbXB0eUNvbnRleHRPYmplY3QpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlVuZXhwZWN0ZWQgY29udGV4dCBmb3VuZCBvbiBzdGFjay4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBjb250ZXh0LCBmaWJlcik7XG4gICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCB0eXBlLCBwYXJlbnRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlczsgLy8gVE9ETyAoYnZhdWdobikgUmVwbGFjZSB0aGlzIGJlaGF2aW9yIHdpdGggYW4gaW52YXJpYW50KCkgaW4gdGhlIGZ1dHVyZS5cbiAgICAvLyBJdCBoYXMgb25seSBiZWVuIGFkZGVkIGluIEZpYmVyIHRvIG1hdGNoIHRoZSAodW5pbnRlbnRpb25hbCkgYmVoYXZpb3IgaW4gU3RhY2suXG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgICAgIGlmICghd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0W2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgICAgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0W2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCclcy5jaGlsZENvbnRleHRUeXBlcyBpcyBzcGVjaWZpZWQgYnV0IHRoZXJlIGlzIG5vIGdldENoaWxkQ29udGV4dCgpIG1ldGhvZCAnICsgJ29uIHRoZSBpbnN0YW5jZS4gWW91IGNhbiBlaXRoZXIgZGVmaW5lIGdldENoaWxkQ29udGV4dCgpIG9uICVzIG9yIHJlbW92ZSAnICsgJ2NoaWxkQ29udGV4dFR5cGVzIGZyb20gaXQuJywgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkQ29udGV4dCA9IGluc3RhbmNlLmdldENoaWxkQ29udGV4dCgpO1xuXG4gICAgZm9yICh2YXIgY29udGV4dEtleSBpbiBjaGlsZENvbnRleHQpIHtcbiAgICAgIGlmICghKGNvbnRleHRLZXkgaW4gY2hpbGRDb250ZXh0VHlwZXMpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggKGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nKSArIFwiLmdldENoaWxkQ29udGV4dCgpOiBrZXkgXFxcIlwiICsgY29udGV4dEtleSArIFwiXFxcIiBpcyBub3QgZGVmaW5lZCBpbiBjaGlsZENvbnRleHRUeXBlcy5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcbiAgICAgIGNoZWNrUHJvcFR5cGVzKGNoaWxkQ29udGV4dFR5cGVzLCBjaGlsZENvbnRleHQsICdjaGlsZCBjb250ZXh0JywgbmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9hc3NpZ24oe30sIHBhcmVudENvbnRleHQsIGNoaWxkQ29udGV4dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcykge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBXZSBwdXNoIHRoZSBjb250ZXh0IGFzIGVhcmx5IGFzIHBvc3NpYmxlIHRvIGVuc3VyZSBzdGFjayBpbnRlZ3JpdHkuXG4gICAgLy8gSWYgdGhlIGluc3RhbmNlIGRvZXMgbm90IGV4aXN0IHlldCwgd2Ugd2lsbCBwdXNoIG51bGwgYXQgZmlyc3QsXG4gICAgLy8gYW5kIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIGxhdGVyIHdoZW4gaW52YWxpZGF0aW5nIHRoZSBjb250ZXh0LlxuXG4gICAgdmFyIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgfHwgZW1wdHlDb250ZXh0T2JqZWN0OyAvLyBSZW1lbWJlciB0aGUgcGFyZW50IGNvbnRleHQgc28gd2UgY2FuIG1lcmdlIHdpdGggaXQgbGF0ZXIuXG4gICAgLy8gSW5oZXJpdCB0aGUgcGFyZW50J3MgZGlkLXBlcmZvcm0td29yayB2YWx1ZSB0byBhdm9pZCBpbmFkdmVydGVudGx5IGJsb2NraW5nIHVwZGF0ZXMuXG5cbiAgICBwcmV2aW91c0NvbnRleHQgPSBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIHR5cGUsIGRpZENoYW5nZSkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBoYXZlIGFuIGluc3RhbmNlIGJ5IHRoaXMgcG9pbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlkQ2hhbmdlKSB7XG4gICAgICAvLyBNZXJnZSBwYXJlbnQgYW5kIG93biBjb250ZXh0LlxuICAgICAgLy8gU2tpcCB0aGlzIGlmIHdlJ3JlIG5vdCB1cGRhdGluZyBkdWUgdG8gc0NVLlxuICAgICAgLy8gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcmlseSByZWNvbXB1dGluZyBtZW1vaXplZCB2YWx1ZXMuXG4gICAgICB2YXIgbWVyZ2VkQ29udGV4dCA9IHByb2Nlc3NDaGlsZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHR5cGUsIHByZXZpb3VzQ29udGV4dCk7XG4gICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCA9IG1lcmdlZENvbnRleHQ7IC8vIFJlcGxhY2UgdGhlIG9sZCAob3IgZW1wdHkpIGNvbnRleHQgd2l0aCB0aGUgbmV3IG9uZS5cbiAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byB1bndpbmQgdGhlIGNvbnRleHQgaW4gdGhlIHJldmVyc2Ugb3JkZXIuXG5cbiAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7IC8vIE5vdyBwdXNoIHRoZSBuZXcgY29udGV4dCBhbmQgbWFyayB0aGF0IGl0IGhhcyBjaGFuZ2VkLlxuXG4gICAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbWVyZ2VkQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXJyZW50VW5tYXNrZWRDb250ZXh0KGZpYmVyKSB7XG4gIHtcbiAgICAvLyBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IHVzZWQgd2l0aCByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjsgbm90IHN1cmUgaWYgaXRcbiAgICAvLyBtYWtlcyBzZW5zZSBlbHNld2hlcmVcbiAgICBpZiAoIShpc0ZpYmVyTW91bnRlZChmaWJlcikgJiYgZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgc3VidHJlZSBwYXJlbnQgdG8gYmUgYSBtb3VudGVkIGNsYXNzIGNvbXBvbmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICBkbyB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLmNvbnRleHQ7XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gbm9kZS50eXBlO1xuXG4gICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5vZGUgIT09IG51bGwpO1xuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJGb3VuZCB1bmV4cGVjdGVkIGRldGFjaGVkIHN1YnRyZWUgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBMZWdhY3lSb290ID0gMDtcbnZhciBCbG9ja2luZ1Jvb3QgPSAxO1xudmFyIENvbmN1cnJlbnRSb290ID0gMjtcblxudmFyIHJlbmRlcmVySUQgPSBudWxsO1xudmFyIGluamVjdGVkSG9vayA9IG51bGw7XG52YXIgaGFzTG9nZ2VkRXJyb3IgPSBmYWxzZTtcbnZhciBpc0RldlRvb2xzUHJlc2VudCA9IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnO1xuZnVuY3Rpb24gaW5qZWN0SW50ZXJuYWxzKGludGVybmFscykge1xuICBpZiAodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBObyBEZXZUb29sc1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBob29rID0gX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG4gIGlmIChob29rLmlzRGlzYWJsZWQpIHtcbiAgICAvLyBUaGlzIGlzbid0IGEgcmVhbCBwcm9wZXJ0eSBvbiB0aGUgaG9vaywgYnV0IGl0IGNhbiBiZSBzZXQgdG8gb3B0IG91dFxuICAgIC8vIG9mIERldlRvb2xzIGludGVncmF0aW9uIGFuZCBhc3NvY2lhdGVkIHdhcm5pbmdzIGFuZCBsb2dzLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzg3N1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFob29rLnN1cHBvcnRzRmliZXIpIHtcbiAgICB7XG4gICAgICBlcnJvcignVGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIFJlYWN0IERldlRvb2xzIGlzIHRvbyBvbGQgYW5kIHdpbGwgbm90IHdvcmsgJyArICd3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUmVhY3QuIFBsZWFzZSB1cGRhdGUgUmVhY3QgRGV2VG9vbHMuICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzJyk7XG4gICAgfSAvLyBEZXZUb29scyBleGlzdHMsIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3Qgc3VwcG9ydCBGaWJlci5cblxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0cnkge1xuICAgIHJlbmRlcmVySUQgPSBob29rLmluamVjdChpbnRlcm5hbHMpOyAvLyBXZSBoYXZlIHN1Y2Nlc3NmdWxseSBpbmplY3RlZCwgc28gbm93IGl0IGlzIHNhZmUgdG8gc2V0IHVwIGhvb2tzLlxuXG4gICAgaW5qZWN0ZWRIb29rID0gaG9vaztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gQ2F0Y2ggYWxsIGVycm9ycyBiZWNhdXNlIGl0IGlzIHVuc2FmZSB0byB0aHJvdyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uXG4gICAge1xuICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMuJywgZXJyKTtcbiAgICB9XG4gIH0gLy8gRGV2VG9vbHMgZXhpc3RzXG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIG9uU2NoZWR1bGVSb290KHJvb3QsIGNoaWxkcmVuKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgY2hpbGRyZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICggIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvbkNvbW1pdFJvb3Qocm9vdCwgcHJpb3JpdHlMZXZlbCkge1xuICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGRpZEVycm9yID0gKHJvb3QuY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBEaWRDYXB0dXJlO1xuXG4gICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgcHJpb3JpdHlMZXZlbCwgZGlkRXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QsIHVuZGVmaW5lZCwgZGlkRXJyb3IpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAge1xuICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvbkNvbW1pdFVubW91bnQoZmliZXIpIHtcbiAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudChyZW5kZXJlcklELCBmaWJlcik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIFNjaGVkdWxlcl9ydW5XaXRoUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrID0gU2NoZWR1bGVyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssXG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrID0gU2NoZWR1bGVyLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLFxuICAgIFNjaGVkdWxlcl9zaG91bGRZaWVsZCA9IFNjaGVkdWxlci51bnN0YWJsZV9zaG91bGRZaWVsZCxcbiAgICBTY2hlZHVsZXJfcmVxdWVzdFBhaW50ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3JlcXVlc3RQYWludCxcbiAgICBTY2hlZHVsZXJfbm93JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93LFxuICAgIFNjaGVkdWxlcl9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IFNjaGVkdWxlci51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxcbiAgICBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfTG93UHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTG93UHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX0lkbGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JZGxlUHJpb3JpdHk7XG5cbntcbiAgLy8gUHJvdmlkZSBleHBsaWNpdCBlcnJvciBtZXNzYWdlIHdoZW4gcHJvZHVjdGlvbitwcm9maWxpbmcgYnVuZGxlIG9mIGUuZy5cbiAgLy8gcmVhY3QtZG9tIGlzIHVzZWQgd2l0aCBwcm9kdWN0aW9uIChub24tcHJvZmlsaW5nKSBidW5kbGUgb2ZcbiAgLy8gc2NoZWR1bGVyL3RyYWNpbmdcbiAgaWYgKCEodHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZiAhPSBudWxsICYmIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCAhPSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gcnVuIHRoZSBwcm9maWxpbmcgdmVyc2lvbiBvZiBhIHJlbmRlcmVyIChmb3IgZXhhbXBsZSwgYHJlYWN0LWRvbS9wcm9maWxpbmdgKSB3aXRob3V0IGFsc28gcmVwbGFjaW5nIHRoZSBgc2NoZWR1bGVyL3RyYWNpbmdgIG1vZHVsZSB3aXRoIGBzY2hlZHVsZXIvdHJhY2luZy1wcm9maWxpbmdgLiBZb3VyIGJ1bmRsZXIgbWlnaHQgaGF2ZSBhIHNldHRpbmcgZm9yIGFsaWFzaW5nIGJvdGggbW9kdWxlcy4gTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcHJvZmlsaW5nXCIgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGZha2VDYWxsYmFja05vZGUgPSB7fTsgLy8gRXhjZXB0IGZvciBOb1ByaW9yaXR5LCB0aGVzZSBjb3JyZXNwb25kIHRvIFNjaGVkdWxlciBwcmlvcml0aWVzLiBXZSB1c2Vcbi8vIGFzY2VuZGluZyBudW1iZXJzIHNvIHdlIGNhbiBjb21wYXJlIHRoZW0gbGlrZSBudW1iZXJzLiBUaGV5IHN0YXJ0IGF0IDkwIHRvXG4vLyBhdm9pZCBjbGFzaGluZyB3aXRoIFNjaGVkdWxlcidzIHByaW9yaXRpZXMuXG5cbnZhciBJbW1lZGlhdGVQcmlvcml0eSQxID0gOTk7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkkMiA9IDk4O1xudmFyIE5vcm1hbFByaW9yaXR5JDEgPSA5NztcbnZhciBMb3dQcmlvcml0eSQxID0gOTY7XG52YXIgSWRsZVByaW9yaXR5JDEgPSA5NTsgLy8gTm9Qcmlvcml0eSBpcyB0aGUgYWJzZW5jZSBvZiBwcmlvcml0eS4gQWxzbyBSZWFjdC1vbmx5LlxuXG52YXIgTm9Qcmlvcml0eSQxID0gOTA7XG52YXIgc2hvdWxkWWllbGQgPSBTY2hlZHVsZXJfc2hvdWxkWWllbGQ7XG52YXIgcmVxdWVzdFBhaW50ID0gLy8gRmFsbCBiYWNrIGdyYWNlZnVsbHkgaWYgd2UncmUgcnVubmluZyBhbiBvbGRlciB2ZXJzaW9uIG9mIFNjaGVkdWxlci5cblNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgIT09IHVuZGVmaW5lZCA/IFNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgOiBmdW5jdGlvbiAoKSB7fTtcbnZhciBzeW5jUXVldWUgPSBudWxsO1xudmFyIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gbnVsbDtcbnZhciBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gZmFsc2U7XG52YXIgaW5pdGlhbFRpbWVNcyQxID0gU2NoZWR1bGVyX25vdyQxKCk7IC8vIElmIHRoZSBpbml0aWFsIHRpbWVzdGFtcCBpcyByZWFzb25hYmx5IHNtYWxsLCB1c2UgU2NoZWR1bGVyJ3MgYG5vd2AgZGlyZWN0bHkuXG4vLyBUaGlzIHdpbGwgYmUgdGhlIGNhc2UgZm9yIG1vZGVybiBicm93c2VycyB0aGF0IHN1cHBvcnQgYHBlcmZvcm1hbmNlLm5vd2AuIEluXG4vLyBvbGRlciBicm93c2VycywgU2NoZWR1bGVyIGZhbGxzIGJhY2sgdG8gYERhdGUubm93YCwgd2hpY2ggcmV0dXJucyBhIFVuaXhcbi8vIHRpbWVzdGFtcC4gSW4gdGhhdCBjYXNlLCBzdWJ0cmFjdCB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIHRpbWUgdG8gc2ltdWxhdGVcbi8vIHRoZSBiZWhhdmlvciBvZiBwZXJmb3JtYW5jZS5ub3cgYW5kIGtlZXAgb3VyIHRpbWVzIHNtYWxsIGVub3VnaCB0byBmaXRcbi8vIHdpdGhpbiAzMiBiaXRzLlxuLy8gVE9ETzogQ29uc2lkZXIgbGlmdGluZyB0aGlzIGludG8gU2NoZWR1bGVyLlxuXG52YXIgbm93ID0gaW5pdGlhbFRpbWVNcyQxIDwgMTAwMDAgPyBTY2hlZHVsZXJfbm93JDEgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBTY2hlZHVsZXJfbm93JDEoKSAtIGluaXRpYWxUaW1lTXMkMTtcbn07XG5mdW5jdGlvbiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpIHtcbiAgc3dpdGNoIChTY2hlZHVsZXJfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSkge1xuICAgIGNhc2UgU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIEltbWVkaWF0ZVByaW9yaXR5JDE7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Vc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgIHJldHVybiBVc2VyQmxvY2tpbmdQcmlvcml0eSQyO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfTm9ybWFsUHJpb3JpdHk6XG4gICAgICByZXR1cm4gTm9ybWFsUHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX0xvd1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIExvd1ByaW9yaXR5JDE7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZVByaW9yaXR5JDE7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biBwcmlvcml0eSBsZXZlbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuXG5mdW5jdGlvbiByZWFjdFByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShyZWFjdFByaW9yaXR5TGV2ZWwpIHtcbiAgc3dpdGNoIChyZWFjdFByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5O1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eSQyOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Vc2VyQmxvY2tpbmdQcmlvcml0eTtcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfTm9ybWFsUHJpb3JpdHk7XG5cbiAgICBjYXNlIExvd1ByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0xvd1ByaW9yaXR5O1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfSWRsZVByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gcHJpb3JpdHkgbGV2ZWwuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cbn1cblxuZnVuY3Rpb24gcnVuV2l0aFByaW9yaXR5JDEocmVhY3RQcmlvcml0eUxldmVsLCBmbikge1xuICB2YXIgcHJpb3JpdHlMZXZlbCA9IHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCk7XG4gIHJldHVybiBTY2hlZHVsZXJfcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5TGV2ZWwsIGZuKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2socmVhY3RQcmlvcml0eUxldmVsLCBjYWxsYmFjaywgb3B0aW9ucykge1xuICB2YXIgcHJpb3JpdHlMZXZlbCA9IHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCk7XG4gIHJldHVybiBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhwcmlvcml0eUxldmVsLCBjYWxsYmFjaywgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBzY2hlZHVsZVN5bmNDYWxsYmFjayhjYWxsYmFjaykge1xuICAvLyBQdXNoIHRoaXMgY2FsbGJhY2sgaW50byBhbiBpbnRlcm5hbCBxdWV1ZS4gV2UnbGwgZmx1c2ggdGhlc2UgZWl0aGVyIGluXG4gIC8vIHRoZSBuZXh0IHRpY2ssIG9yIGVhcmxpZXIgaWYgc29tZXRoaW5nIGNhbGxzIGBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlYC5cbiAgaWYgKHN5bmNRdWV1ZSA9PT0gbnVsbCkge1xuICAgIHN5bmNRdWV1ZSA9IFtjYWxsYmFja107IC8vIEZsdXNoIHRoZSBxdWV1ZSBpbiB0aGUgbmV4dCB0aWNrLCBhdCB0aGUgZWFybGllc3QuXG5cbiAgICBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSwgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwpO1xuICB9IGVsc2Uge1xuICAgIC8vIFB1c2ggb250byBleGlzdGluZyBxdWV1ZS4gRG9uJ3QgbmVlZCB0byBzY2hlZHVsZSBhIGNhbGxiYWNrIGJlY2F1c2VcbiAgICAvLyB3ZSBhbHJlYWR5IHNjaGVkdWxlZCBvbmUgd2hlbiB3ZSBjcmVhdGVkIHRoZSBxdWV1ZS5cbiAgICBzeW5jUXVldWUucHVzaChjYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gZmFrZUNhbGxiYWNrTm9kZTtcbn1cbmZ1bmN0aW9uIGNhbmNlbENhbGxiYWNrKGNhbGxiYWNrTm9kZSkge1xuICBpZiAoY2FsbGJhY2tOb2RlICE9PSBmYWtlQ2FsbGJhY2tOb2RlKSB7XG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrKGNhbGxiYWNrTm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKSB7XG4gIGlmIChpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBub2RlID0gaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGU7XG4gICAgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBudWxsO1xuICAgIFNjaGVkdWxlcl9jYW5jZWxDYWxsYmFjayhub2RlKTtcbiAgfVxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWVJbXBsKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoU3luY0NhbGxiYWNrUXVldWVJbXBsKCkge1xuICBpZiAoIWlzRmx1c2hpbmdTeW5jUXVldWUgJiYgc3luY1F1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gUHJldmVudCByZS1lbnRyYW5jeS5cbiAgICBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gdHJ1ZTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgX2lzU3luYzIgPSB0cnVlO1xuICAgICAgICB2YXIgX3F1ZXVlID0gc3luY1F1ZXVlO1xuICAgICAgICBydW5XaXRoUHJpb3JpdHkkMShJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZm9yICg7IGkgPCBfcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IF9xdWV1ZVtpXTtcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrKF9pc1N5bmMyKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKGNhbGxiYWNrICE9PSBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzeW5jUXVldWUgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgc29tZXRoaW5nIHRocm93cywgbGVhdmUgdGhlIHJlbWFpbmluZyBjYWxsYmFja3Mgb24gdGhlIHF1ZXVlLlxuICAgICAgICBpZiAoc3luY1F1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgc3luY1F1ZXVlID0gc3luY1F1ZXVlLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgfSAvLyBSZXN1bWUgZmx1c2hpbmcgaW4gdGhlIG5leHQgdGlja1xuXG5cbiAgICAgICAgU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5LCBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNy4wLjInO1xuXG52YXIgTm9Nb2RlID0gMDtcbnZhciBTdHJpY3RNb2RlID0gMTsgLy8gVE9ETzogUmVtb3ZlIEJsb2NraW5nTW9kZSBhbmQgQ29uY3VycmVudE1vZGUgYnkgcmVhZGluZyBmcm9tIHRoZSByb290XG4vLyB0YWcgaW5zdGVhZFxuXG52YXIgQmxvY2tpbmdNb2RlID0gMjtcbnZhciBDb25jdXJyZW50TW9kZSA9IDQ7XG52YXIgUHJvZmlsZU1vZGUgPSA4O1xudmFyIERlYnVnVHJhY2luZ01vZGUgPSAxNjtcblxudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG52YXIgTm9UcmFuc2l0aW9uID0gMDtcbmZ1bmN0aW9uIHJlcXVlc3RDdXJyZW50VHJhbnNpdGlvbigpIHtcbiAgcmV0dXJuIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb247XG59XG5cbnZhciBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncyA9IHtcbiAgcmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3M6IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHt9LFxuICBmbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKCkge30sXG4gIHJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKCkge30sXG4gIGRpc2NhcmRQZW5kaW5nV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9XG59O1xuXG57XG4gIHZhciBmaW5kU3RyaWN0Um9vdCA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgIHZhciBtYXliZVN0cmljdFJvb3QgPSBudWxsO1xuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgbWF5YmVTdHJpY3RSb290ID0gbm9kZTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBtYXliZVN0cmljdFJvb3Q7XG4gIH07XG5cbiAgdmFyIHNldFRvU29ydGVkU3RyaW5nID0gZnVuY3Rpb24gKHNldCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgYXJyYXkucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFycmF5LnNvcnQoKS5qb2luKCcsICcpO1xuICB9O1xuXG4gIHZhciBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdOyAvLyBUcmFja3MgY29tcG9uZW50cyB3ZSBoYXZlIGFscmVhZHkgd2FybmVkIGFib3V0LlxuXG4gIHZhciBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzID0gbmV3IFNldCgpO1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge1xuICAgIC8vIERlZHVwIHN0cmF0ZWd5OiBXYXJuIG9uY2UgcGVyIGNvbXBvbmVudC5cbiAgICBpZiAoZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5oYXMoZmliZXIudHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cy5cbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFdlIGRvIGFuIGluaXRpYWwgcGFzcyB0byBnYXRoZXIgY29tcG9uZW50IG5hbWVzXG4gICAgdmFyIGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICB9IC8vIEZpbmFsbHksIHdlIGZsdXNoIGFsbCB0aGUgd2FybmluZ3NcbiAgICAvLyBVTlNBRkVfIG9uZXMgYmVmb3JlIHRoZSBkZXByZWNhdGVkIG9uZXMsIHNpbmNlIHRoZXknbGwgYmUgJ2xvdWRlcidcblxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIHNvcnRlZE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkICcgKyAnYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIFwiICsgJ3JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvICcgKyAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lcyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMyID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzMik7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzMyA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbE1vdW50IGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbE1vdW50IHRvIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczMpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXM0ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArIFwiKiBJZiB5b3UncmUgdXBkYXRpbmcgc3RhdGUgd2hlbmV2ZXIgcHJvcHMgY2hhbmdlLCByZWZhY3RvciB5b3VyIFwiICsgJ2NvZGUgdG8gdXNlIG1lbW9pemF0aW9uIHRlY2huaXF1ZXMgb3IgbW92ZSBpdCB0byAnICsgJ3N0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kZXJpdmVkLXN0YXRlXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXM0KTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzNSA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyk7XG5cbiAgICAgIHdhcm4oJ2NvbXBvbmVudFdpbGxVcGRhdGUgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbFVwZGF0ZSB0byBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzNSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCk7IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgdmFyIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQgPSBuZXcgU2V0KCk7XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgdmFyIHN0cmljdFJvb3QgPSBmaW5kU3RyaWN0Um9vdChmaWJlcik7XG5cbiAgICBpZiAoc3RyaWN0Um9vdCA9PT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgYSBTdHJpY3RNb2RlIGNvbXBvbmVudCBpbiBhIHN0cmljdCBtb2RlIHRyZWUuICcgKyAnVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuXG5cbiAgICBpZiAoZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5oYXMoZmliZXIudHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgd2FybmluZ3NGb3JSb290ID0gcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmdldChzdHJpY3RSb290KTtcblxuICAgIGlmIChmaWJlci50eXBlLmNvbnRleHRUeXBlcyAhPSBudWxsIHx8IGZpYmVyLnR5cGUuY2hpbGRDb250ZXh0VHlwZXMgIT0gbnVsbCB8fCBpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAod2FybmluZ3NGb3JSb290ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgd2FybmluZ3NGb3JSb290ID0gW107XG4gICAgICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5zZXQoc3RyaWN0Um9vdCwgd2FybmluZ3NGb3JSb290KTtcbiAgICAgIH1cblxuICAgICAgd2FybmluZ3NGb3JSb290LnB1c2goZmliZXIpO1xuICAgIH1cbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlckFycmF5LCBzdHJpY3RSb290KSB7XG4gICAgICBpZiAoZmliZXJBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RGaWJlciA9IGZpYmVyQXJyYXlbMF07XG4gICAgICB2YXIgdW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICBmaWJlckFycmF5LmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIHVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKHVuaXF1ZU5hbWVzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpcnN0RmliZXIpO1xuXG4gICAgICAgIGVycm9yKCdMZWdhY3kgY29udGV4dCBBUEkgaGFzIGJlZW4gZGV0ZWN0ZWQgd2l0aGluIGEgc3RyaWN0LW1vZGUgdHJlZS4nICsgJ1xcblxcblRoZSBvbGQgQVBJIHdpbGwgYmUgc3VwcG9ydGVkIGluIGFsbCAxNi54IHJlbGVhc2VzLCBidXQgYXBwbGljYXRpb25zICcgKyAndXNpbmcgaXQgc2hvdWxkIG1pZ3JhdGUgdG8gdGhlIG5ldyB2ZXJzaW9uLicgKyAnXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJyArICdcXG5cXG5MZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvbGVnYWN5LWNvbnRleHQnLCBzb3J0ZWROYW1lcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGJhc2VQcm9wcykge1xuICBpZiAoQ29tcG9uZW50ICYmIENvbXBvbmVudC5kZWZhdWx0UHJvcHMpIHtcbiAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHMuIFRha2VuIGZyb20gUmVhY3RFbGVtZW50XG4gICAgdmFyIHByb3BzID0gX2Fzc2lnbih7fSwgYmFzZVByb3BzKTtcblxuICAgIHZhciBkZWZhdWx0UHJvcHMgPSBDb21wb25lbnQuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxuICByZXR1cm4gYmFzZVByb3BzO1xufVxuXG4vLyBNYXggMzEgYml0IGludGVnZXIuIFRoZSBtYXggaW50ZWdlciBzaXplIGluIFY4IGZvciAzMi1iaXQgc3lzdGVtcy5cbi8vIE1hdGgucG93KDIsIDMwKSAtIDFcbi8vIDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXG52YXIgTUFYX1NJR05FRF8zMV9CSVRfSU5UID0gMTA3Mzc0MTgyMztcblxudmFyIHZhbHVlQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xudmFyIHJlbmRlcmVyU2lnaWw7XG5cbntcbiAgLy8gVXNlIHRoaXMgdG8gZGV0ZWN0IG11bHRpcGxlIHJlbmRlcmVycyB1c2luZyB0aGUgc2FtZSBjb250ZXh0XG4gIHJlbmRlcmVyU2lnaWwgPSB7fTtcbn1cblxudmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gbnVsbDtcbnZhciBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xudmFyIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IG51bGw7XG52YXIgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuZnVuY3Rpb24gcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCkge1xuICAvLyBUaGlzIGlzIGNhbGxlZCByaWdodCBiZWZvcmUgUmVhY3QgeWllbGRzIGV4ZWN1dGlvbiwgdG8gZW5zdXJlIGByZWFkQ29udGV4dGBcbiAgLy8gY2Fubm90IGJlIGNhbGxlZCBvdXRzaWRlIHRoZSByZW5kZXIgcGhhc2UuXG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gbnVsbDtcbiAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcblxuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCkge1xuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IHRydWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpIHtcbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gcHVzaFByb3ZpZGVyKHByb3ZpZGVyRmliZXIsIG5leHRWYWx1ZSkge1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyRmliZXIudHlwZS5fY29udGV4dDtcblxuICB7XG4gICAgcHVzaCh2YWx1ZUN1cnNvciwgY29udGV4dC5fY3VycmVudFZhbHVlLCBwcm92aWRlckZpYmVyKTtcbiAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBuZXh0VmFsdWU7XG5cbiAgICB7XG4gICAgICBpZiAoY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSB1bmRlZmluZWQgJiYgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSBudWxsICYmIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gcmVuZGVyZXJTaWdpbCkge1xuICAgICAgICBlcnJvcignRGV0ZWN0ZWQgbXVsdGlwbGUgcmVuZGVyZXJzIGNvbmN1cnJlbnRseSByZW5kZXJpbmcgdGhlICcgKyAnc2FtZSBjb250ZXh0IHByb3ZpZGVyLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4nKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gcmVuZGVyZXJTaWdpbDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvcFByb3ZpZGVyKHByb3ZpZGVyRmliZXIpIHtcbiAgdmFyIGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ3Vyc29yLmN1cnJlbnQ7XG4gIHBvcCh2YWx1ZUN1cnNvciwgcHJvdmlkZXJGaWJlcik7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJGaWJlci50eXBlLl9jb250ZXh0O1xuXG4gIHtcbiAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZUNoYW5nZWRCaXRzKGNvbnRleHQsIG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICBpZiAob2JqZWN0SXMob2xkVmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgIC8vIE5vIGNoYW5nZVxuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIHZhciBjaGFuZ2VkQml0cyA9IHR5cGVvZiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0cyA9PT0gJ2Z1bmN0aW9uJyA/IGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzKG9sZFZhbHVlLCBuZXdWYWx1ZSkgOiBNQVhfU0lHTkVEXzMxX0JJVF9JTlQ7XG5cbiAgICB7XG4gICAgICBpZiAoKGNoYW5nZWRCaXRzICYgTUFYX1NJR05FRF8zMV9CSVRfSU5UKSAhPT0gY2hhbmdlZEJpdHMpIHtcbiAgICAgICAgZXJyb3IoJ2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBFeHBlY3RlZCB0aGUgcmV0dXJuIHZhbHVlIHRvIGJlIGEgJyArICczMS1iaXQgaW50ZWdlci4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjaGFuZ2VkQml0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZWRCaXRzIHwgMDtcbiAgfVxufVxuZnVuY3Rpb24gc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKHBhcmVudCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVXBkYXRlIHRoZSBjaGlsZCBsYW5lcyBvZiBhbGwgdGhlIGFuY2VzdG9ycywgaW5jbHVkaW5nIHRoZSBhbHRlcm5hdGVzLlxuICB2YXIgbm9kZSA9IHBhcmVudDtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBhbHRlcm5hdGUgPSBub2RlLmFsdGVybmF0ZTtcblxuICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKG5vZGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICBub2RlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5vZGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmICFpc1N1YnNldE9mTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5laXRoZXIgYWx0ZXJuYXRlIHdhcyB1cGRhdGVkLCB3aGljaCBtZWFucyB0aGUgcmVzdCBvZiB0aGVcbiAgICAgIC8vIGFuY2VzdG9yIHBhdGggYWxyZWFkeSBoYXMgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgfVxufVxuZnVuY3Rpb24gcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgY2hhbmdlZEJpdHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBmaWJlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gIGlmIChmaWJlciAhPT0gbnVsbCkge1xuICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgIGZpYmVyLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB9XG5cbiAgd2hpbGUgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgdmFyIG5leHRGaWJlciA9IHZvaWQgMDsgLy8gVmlzaXQgdGhpcyBmaWJlci5cblxuICAgIHZhciBsaXN0ID0gZmliZXIuZGVwZW5kZW5jaWVzO1xuXG4gICAgaWYgKGxpc3QgIT09IG51bGwpIHtcbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgdmFyIGRlcGVuZGVuY3kgPSBsaXN0LmZpcnN0Q29udGV4dDtcblxuICAgICAgd2hpbGUgKGRlcGVuZGVuY3kgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRleHQgbWF0Y2hlcy5cbiAgICAgICAgaWYgKGRlcGVuZGVuY3kuY29udGV4dCA9PT0gY29udGV4dCAmJiAoZGVwZW5kZW5jeS5vYnNlcnZlZEJpdHMgJiBjaGFuZ2VkQml0cykgIT09IDApIHtcbiAgICAgICAgICAvLyBNYXRjaCEgU2NoZWR1bGUgYW4gdXBkYXRlIG9uIHRoaXMgZmliZXIuXG4gICAgICAgICAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGEgZm9yY2UgdXBkYXRlIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzLlxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgcGlja0FyYml0cmFyeUxhbmUocmVuZGVyTGFuZXMpKTtcbiAgICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTsgLy8gVE9ETzogQmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgd29yay1pbi1wcm9ncmVzcywgdGhpcyB3aWxsIGFkZCB0aGVcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0byB0aGUgY3VycmVudCBmaWJlciwgdG9vLCB3aGljaCBtZWFucyBpdCB3aWxsIHBlcnNpc3QgZXZlbiBpZlxuICAgICAgICAgICAgLy8gdGhpcyByZW5kZXIgaXMgdGhyb3duIGF3YXkuIFNpbmNlIGl0J3MgYSByYWNlIGNvbmRpdGlvbiwgbm90IHN1cmUgaXQnc1xuICAgICAgICAgICAgLy8gd29ydGggZml4aW5nLlxuXG4gICAgICAgICAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChmaWJlci5yZXR1cm4sIHJlbmRlckxhbmVzKTsgLy8gTWFyayB0aGUgdXBkYXRlZCBsYW5lcyBvbiB0aGUgbGlzdCwgdG9vLlxuXG4gICAgICAgICAgbGlzdC5sYW5lcyA9IG1lcmdlTGFuZXMobGlzdC5sYW5lcywgcmVuZGVyTGFuZXMpOyAvLyBTaW5jZSB3ZSBhbHJlYWR5IGZvdW5kIGEgbWF0Y2gsIHdlIGNhbiBzdG9wIHRyYXZlcnNpbmcgdGhlXG4gICAgICAgICAgLy8gZGVwZW5kZW5jeSBsaXN0LlxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZXBlbmRlbmN5ID0gZGVwZW5kZW5jeS5uZXh0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmliZXIudGFnID09PSBDb250ZXh0UHJvdmlkZXIpIHtcbiAgICAgIC8vIERvbid0IHNjYW4gZGVlcGVyIGlmIHRoaXMgaXMgYSBtYXRjaGluZyBwcm92aWRlclxuICAgICAgbmV4dEZpYmVyID0gZmliZXIudHlwZSA9PT0gd29ya0luUHJvZ3Jlc3MudHlwZSA/IG51bGwgOiBmaWJlci5jaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJhdmVyc2UgZG93bi5cbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgIH1cblxuICAgIGlmIChuZXh0RmliZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgbmV4dEZpYmVyLnJldHVybiA9IGZpYmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBjaGlsZC4gVHJhdmVyc2UgdG8gbmV4dCBzaWJsaW5nLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXI7XG5cbiAgICAgIHdoaWxlIChuZXh0RmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHRGaWJlciA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAvLyBXZSdyZSBiYWNrIHRvIHRoZSByb290IG9mIHRoaXMgc3VidHJlZS4gRXhpdC5cbiAgICAgICAgICBuZXh0RmliZXIgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpYmxpbmcgPSBuZXh0RmliZXIuc2libGluZztcblxuICAgICAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIHNpYmxpbmcgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICAgICAgc2libGluZy5yZXR1cm4gPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgICAgIG5leHRGaWJlciA9IHNpYmxpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gTm8gbW9yZSBzaWJsaW5ncy4gVHJhdmVyc2UgdXAuXG5cblxuICAgICAgICBuZXh0RmliZXIgPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpYmVyID0gbmV4dEZpYmVyO1xuICB9XG59XG5mdW5jdGlvbiBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcbiAgdmFyIGRlcGVuZGVuY2llcyA9IHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcztcblxuICBpZiAoZGVwZW5kZW5jaWVzICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0Q29udGV4dCA9IGRlcGVuZGVuY2llcy5maXJzdENvbnRleHQ7XG5cbiAgICBpZiAoZmlyc3RDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShkZXBlbmRlbmNpZXMubGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgICAvLyBDb250ZXh0IGxpc3QgaGFzIGEgcGVuZGluZyB1cGRhdGUuIE1hcmsgdGhhdCB0aGlzIGZpYmVyIHBlcmZvcm1lZCB3b3JrLlxuICAgICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgICAgfSAvLyBSZXNldCB0aGUgd29yay1pbi1wcm9ncmVzcyBsaXN0XG5cblxuICAgICAgZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAge1xuICAgIC8vIFRoaXMgd2FybmluZyB3b3VsZCBmaXJlIGlmIHlvdSByZWFkIGNvbnRleHQgaW5zaWRlIGEgSG9vayBsaWtlIHVzZU1lbW8uXG4gICAgLy8gVW5saWtlIHRoZSBjbGFzcyBjaGVjayBiZWxvdywgaXQncyBub3QgZW5mb3JjZWQgaW4gcHJvZHVjdGlvbiBmb3IgcGVyZi5cbiAgICBpZiAoaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVikge1xuICAgICAgZXJyb3IoJ0NvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuICcgKyAnSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gJyArICdJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgJyArICdpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPT09IGNvbnRleHQpIDsgZWxzZSBpZiAob2JzZXJ2ZWRCaXRzID09PSBmYWxzZSB8fCBvYnNlcnZlZEJpdHMgPT09IDApIDsgZWxzZSB7XG4gICAgdmFyIHJlc29sdmVkT2JzZXJ2ZWRCaXRzOyAvLyBBdm9pZCBkZW9wdGluZyBvbiBvYnNlcnZhYmxlIGFyZ3VtZW50cyBvciBoZXRlcm9nZW5lb3VzIHR5cGVzLlxuXG4gICAgaWYgKHR5cGVvZiBvYnNlcnZlZEJpdHMgIT09ICdudW1iZXInIHx8IG9ic2VydmVkQml0cyA9PT0gTUFYX1NJR05FRF8zMV9CSVRfSU5UKSB7XG4gICAgICAvLyBPYnNlcnZlIGFsbCB1cGRhdGVzLlxuICAgICAgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gY29udGV4dDtcbiAgICAgIHJlc29sdmVkT2JzZXJ2ZWRCaXRzID0gTUFYX1NJR05FRF8zMV9CSVRfSU5UO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlZE9ic2VydmVkQml0cyA9IG9ic2VydmVkQml0cztcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dEl0ZW0gPSB7XG4gICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgb2JzZXJ2ZWRCaXRzOiByZXNvbHZlZE9ic2VydmVkQml0cyxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9PT0gbnVsbCkge1xuICAgICAgaWYgKCEoY3VycmVudGx5UmVuZGVyaW5nRmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiBJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS5cIiApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFRoaXMgaXMgdGhlIGZpcnN0IGRlcGVuZGVuY3kgZm9yIHRoaXMgY29tcG9uZW50LiBDcmVhdGUgYSBuZXcgbGlzdC5cblxuXG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBjb250ZXh0SXRlbTtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmRlcGVuZGVuY2llcyA9IHtcbiAgICAgICAgbGFuZXM6IE5vTGFuZXMsXG4gICAgICAgIGZpcnN0Q29udGV4dDogY29udGV4dEl0ZW0sXG4gICAgICAgIHJlc3BvbmRlcnM6IG51bGxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFwcGVuZCBhIG5ldyBjb250ZXh0IGl0ZW0uXG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBsYXN0Q29udGV4dERlcGVuZGVuY3kubmV4dCA9IGNvbnRleHRJdGVtO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAgY29udGV4dC5fY3VycmVudFZhbHVlIDtcbn1cblxudmFyIFVwZGF0ZVN0YXRlID0gMDtcbnZhciBSZXBsYWNlU3RhdGUgPSAxO1xudmFyIEZvcmNlVXBkYXRlID0gMjtcbnZhciBDYXB0dXJlVXBkYXRlID0gMzsgLy8gR2xvYmFsIHN0YXRlIHRoYXQgaXMgcmVzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBjYWxsaW5nIGBwcm9jZXNzVXBkYXRlUXVldWVgLlxuLy8gSXQgc2hvdWxkIG9ubHkgYmUgcmVhZCByaWdodCBhZnRlciBjYWxsaW5nIGBwcm9jZXNzVXBkYXRlUXVldWVgLCB2aWFcbi8vIGBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nYC5cblxudmFyIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG52YXIgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZTtcbnZhciBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWU7XG5cbntcbiAgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSA9IGZhbHNlO1xuICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplVXBkYXRlUXVldWUoZmliZXIpIHtcbiAgdmFyIHF1ZXVlID0ge1xuICAgIGJhc2VTdGF0ZTogZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICBmaXJzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgbGFzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgc2hhcmVkOiB7XG4gICAgICBwZW5kaW5nOiBudWxsXG4gICAgfSxcbiAgICBlZmZlY3RzOiBudWxsXG4gIH07XG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gcXVldWU7XG59XG5mdW5jdGlvbiBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIC8vIENsb25lIHRoZSB1cGRhdGUgcXVldWUgZnJvbSBjdXJyZW50LiBVbmxlc3MgaXQncyBhbHJlYWR5IGEgY2xvbmUuXG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcblxuICBpZiAocXVldWUgPT09IGN1cnJlbnRRdWV1ZSkge1xuICAgIHZhciBjbG9uZSA9IHtcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudFF1ZXVlLmJhc2VTdGF0ZSxcbiAgICAgIGZpcnN0QmFzZVVwZGF0ZTogY3VycmVudFF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSxcbiAgICAgIGxhc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGUsXG4gICAgICBzaGFyZWQ6IGN1cnJlbnRRdWV1ZS5zaGFyZWQsXG4gICAgICBlZmZlY3RzOiBjdXJyZW50UXVldWUuZWZmZWN0c1xuICAgIH07XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjbG9uZTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSkge1xuICB2YXIgdXBkYXRlID0ge1xuICAgIGV2ZW50VGltZTogZXZlbnRUaW1lLFxuICAgIGxhbmU6IGxhbmUsXG4gICAgdGFnOiBVcGRhdGVTdGF0ZSxcbiAgICBwYXlsb2FkOiBudWxsLFxuICAgIGNhbGxiYWNrOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSkge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaWJlci51cGRhdGVRdWV1ZTtcblxuICBpZiAodXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICAvLyBPbmx5IG9jY3VycyBpZiB0aGUgZmliZXIgaGFzIGJlZW4gdW5tb3VudGVkLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzaGFyZWRRdWV1ZSA9IHVwZGF0ZVF1ZXVlLnNoYXJlZDtcbiAgdmFyIHBlbmRpbmcgPSBzaGFyZWRRdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgIHBlbmRpbmcubmV4dCA9IHVwZGF0ZTtcbiAgfVxuXG4gIHNoYXJlZFF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG5cbiAge1xuICAgIGlmIChjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPT09IHNoYXJlZFF1ZXVlICYmICFkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlKSB7XG4gICAgICBlcnJvcignQW4gdXBkYXRlIChzZXRTdGF0ZSwgcmVwbGFjZVN0YXRlLCBvciBmb3JjZVVwZGF0ZSkgd2FzIHNjaGVkdWxlZCAnICsgJ2Zyb20gaW5zaWRlIGFuIHVwZGF0ZSBmdW5jdGlvbi4gVXBkYXRlIGZ1bmN0aW9ucyBzaG91bGQgYmUgcHVyZSwgJyArICd3aXRoIHplcm8gc2lkZS1lZmZlY3RzLiBDb25zaWRlciB1c2luZyBjb21wb25lbnREaWRVcGRhdGUgb3IgYSAnICsgJ2NhbGxiYWNrLicpO1xuXG4gICAgICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY2FwdHVyZWRVcGRhdGUpIHtcbiAgLy8gQ2FwdHVyZWQgdXBkYXRlcyBhcmUgdXBkYXRlcyB0aGF0IGFyZSB0aHJvd24gYnkgYSBjaGlsZCBkdXJpbmcgdGhlIHJlbmRlclxuICAvLyBwaGFzZS4gVGhleSBzaG91bGQgYmUgZGlzY2FyZGVkIGlmIHRoZSByZW5kZXIgaXMgYWJvcnRlZC4gVGhlcmVmb3JlLFxuICAvLyB3ZSBzaG91bGQgb25seSBwdXQgdGhlbSBvbiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSwgbm90IHRoZSBjdXJyZW50IG9uZS5cbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7IC8vIENoZWNrIGlmIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGlzIGEgY2xvbmUuXG5cbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcblxuICAgIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgICAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyB0aGUgc2FtZSBhcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlblxuICAgICAgLy8gd2UgYmFpbCBvdXQgb24gYSBwYXJlbnQgZmliZXIgdGhhdCB0aGVuIGNhcHR1cmVzIGFuIGVycm9yIHRocm93biBieVxuICAgICAgLy8gYSBjaGlsZC4gU2luY2Ugd2Ugd2FudCB0byBhcHBlbmQgdGhlIHVwZGF0ZSBvbmx5IHRvIHRoZSB3b3JrLWluXG4gICAgICAvLyAtcHJvZ3Jlc3MgcXVldWUsIHdlIG5lZWQgdG8gY2xvbmUgdGhlIHVwZGF0ZXMuIFdlIHVzdWFsbHkgY2xvbmUgZHVyaW5nXG4gICAgICAvLyBwcm9jZXNzVXBkYXRlUXVldWUsIGJ1dCB0aGF0IGRpZG4ndCBoYXBwZW4gaW4gdGhpcyBjYXNlIGJlY2F1c2Ugd2VcbiAgICAgIC8vIHNraXBwZWQgb3ZlciB0aGUgcGFyZW50IHdoZW4gd2UgYmFpbGVkIG91dC5cbiAgICAgIHZhciBuZXdGaXJzdCA9IG51bGw7XG4gICAgICB2YXIgbmV3TGFzdCA9IG51bGw7XG4gICAgICB2YXIgZmlyc3RCYXNlVXBkYXRlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgICBpZiAoZmlyc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgdXBkYXRlcyBhbmQgY2xvbmUgdGhlbS5cbiAgICAgICAgdmFyIHVwZGF0ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgICAgZXZlbnRUaW1lOiB1cGRhdGUuZXZlbnRUaW1lLFxuICAgICAgICAgICAgbGFuZTogdXBkYXRlLmxhbmUsXG4gICAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChuZXdMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjbG9uZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TGFzdC5uZXh0ID0gY2xvbmU7XG4gICAgICAgICAgICBuZXdMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gbnVsbCk7IC8vIEFwcGVuZCB0aGUgY2FwdHVyZWQgdXBkYXRlIHRoZSBlbmQgb2YgdGhlIGNsb25lZCBsaXN0LlxuXG5cbiAgICAgICAgaWYgKG5ld0xhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdMYXN0Lm5leHQgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgICBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSBubyBiYXNlIHVwZGF0ZXMuXG4gICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZSA9IHtcbiAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgICAgICBmaXJzdEJhc2VVcGRhdGU6IG5ld0ZpcnN0LFxuICAgICAgICBsYXN0QmFzZVVwZGF0ZTogbmV3TGFzdCxcbiAgICAgICAgc2hhcmVkOiBjdXJyZW50UXVldWUuc2hhcmVkLFxuICAgICAgICBlZmZlY3RzOiBjdXJyZW50UXVldWUuZWZmZWN0c1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gcXVldWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IC8vIEFwcGVuZCB0aGUgdXBkYXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG5cblxuICB2YXIgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZTtcblxuICBpZiAobGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICBxdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gY2FwdHVyZWRVcGRhdGU7XG4gIH1cblxuICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBnZXRTdGF0ZUZyb21VcGRhdGUod29ya0luUHJvZ3Jlc3MsIHF1ZXVlLCB1cGRhdGUsIHByZXZTdGF0ZSwgbmV4dFByb3BzLCBpbnN0YW5jZSkge1xuICBzd2l0Y2ggKHVwZGF0ZS50YWcpIHtcbiAgICBjYXNlIFJlcGxhY2VTdGF0ZTpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcblxuICAgICAgICBpZiAodHlwZW9mIHBheWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSBwYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICAgIH0gLy8gU3RhdGUgb2JqZWN0XG5cblxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2FwdHVyZVVwZGF0ZTpcbiAgICAgIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgIH1cbiAgICAvLyBJbnRlbnRpb25hbCBmYWxsdGhyb3VnaFxuXG4gICAgY2FzZSBVcGRhdGVTdGF0ZTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wYXlsb2FkID0gdXBkYXRlLnBheWxvYWQ7XG4gICAgICAgIHZhciBwYXJ0aWFsU3RhdGU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfcGF5bG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIFVwZGF0ZXIgZnVuY3Rpb25cbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgX3BheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQYXJ0aWFsIHN0YXRlIG9iamVjdFxuICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IF9wYXlsb2FkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gbnVsbCB8fCBwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIE51bGwgYW5kIHVuZGVmaW5lZCBhcmUgdHJlYXRlZCBhcyBuby1vcHMuXG4gICAgICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICAgICAgfSAvLyBNZXJnZSB0aGUgcGFydGlhbCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzIHN0YXRlLlxuXG5cbiAgICAgICAgcmV0dXJuIF9hc3NpZ24oe30sIHByZXZTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRm9yY2VVcGRhdGU6XG4gICAgICB7XG4gICAgICAgIGhhc0ZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcmV2U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgcHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIGlzIGFsd2F5cyBub24tbnVsbCBvbiBhIENsYXNzQ29tcG9uZW50IG9yIEhvc3RSb290XG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuXG4gIHtcbiAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQ7XG4gIH1cblxuICB2YXIgZmlyc3RCYXNlVXBkYXRlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlO1xuICB2YXIgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZTsgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIHBlbmRpbmcgdXBkYXRlcy4gSWYgc28sIHRyYW5zZmVyIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG5cbiAgdmFyIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nUXVldWUgIT09IG51bGwpIHtcbiAgICBxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGw7IC8vIFRoZSBwZW5kaW5nIHF1ZXVlIGlzIGNpcmN1bGFyLiBEaXNjb25uZWN0IHRoZSBwb2ludGVyIGJldHdlZW4gZmlyc3RcbiAgICAvLyBhbmQgbGFzdCBzbyB0aGF0IGl0J3Mgbm9uLWNpcmN1bGFyLlxuXG4gICAgdmFyIGxhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgIHZhciBmaXJzdFBlbmRpbmdVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZS5uZXh0O1xuICAgIGxhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsOyAvLyBBcHBlbmQgcGVuZGluZyB1cGRhdGVzIHRvIGJhc2UgcXVldWVcblxuICAgIGlmIChsYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgIH1cblxuICAgIGxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7IC8vIElmIHRoZXJlJ3MgYSBjdXJyZW50IHF1ZXVlLCBhbmQgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgYmFzZSBxdWV1ZSwgdGhlblxuICAgIC8vIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHVwZGF0ZXMgdG8gdGhhdCBxdWV1ZSwgdG9vLiBCZWNhdXNlIHRoZSBiYXNlXG4gICAgLy8gcXVldWUgaXMgYSBzaW5nbHktbGlua2VkIGxpc3Qgd2l0aCBubyBjeWNsZXMsIHdlIGNhbiBhcHBlbmQgdG8gYm90aFxuICAgIC8vIGxpc3RzIGFuZCB0YWtlIGFkdmFudGFnZSBvZiBzdHJ1Y3R1cmFsIHNoYXJpbmcuXG4gICAgLy8gVE9ETzogUGFzcyBgY3VycmVudGAgYXMgYXJndW1lbnRcblxuICAgIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgYWx3YXlzIG5vbi1udWxsIG9uIGEgQ2xhc3NDb21wb25lbnQgb3IgSG9zdFJvb3RcbiAgICAgIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICAgICAgdmFyIGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSA9IGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSAhPT0gbGFzdEJhc2VVcGRhdGUpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGN1cnJlbnRRdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudExhc3RCYXNlVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gVGhlc2UgdmFsdWVzIG1heSBjaGFuZ2UgYXMgd2UgcHJvY2VzcyB0aGUgcXVldWUuXG5cblxuICBpZiAoZmlyc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIHVwZGF0ZXMgdG8gY29tcHV0ZSB0aGUgcmVzdWx0LlxuICAgIHZhciBuZXdTdGF0ZSA9IHF1ZXVlLmJhc2VTdGF0ZTsgLy8gVE9ETzogRG9uJ3QgbmVlZCB0byBhY2N1bXVsYXRlIHRoaXMuIEluc3RlYWQsIHdlIGNhbiByZW1vdmUgcmVuZGVyTGFuZXNcbiAgICAvLyBmcm9tIHRoZSBvcmlnaW5hbCBsYW5lcy5cblxuICAgIHZhciBuZXdMYW5lcyA9IE5vTGFuZXM7XG4gICAgdmFyIG5ld0Jhc2VTdGF0ZSA9IG51bGw7XG4gICAgdmFyIG5ld0ZpcnN0QmFzZVVwZGF0ZSA9IG51bGw7XG4gICAgdmFyIG5ld0xhc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgZG8ge1xuICAgICAgdmFyIHVwZGF0ZUxhbmUgPSB1cGRhdGUubGFuZTtcbiAgICAgIHZhciB1cGRhdGVFdmVudFRpbWUgPSB1cGRhdGUuZXZlbnRUaW1lO1xuXG4gICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSkpIHtcbiAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAvLyBza2lwcGVkIHVwZGF0ZSwgdGhlIHByZXZpb3VzIHVwZGF0ZS9zdGF0ZSBpcyB0aGUgbmV3IGJhc2VcbiAgICAgICAgLy8gdXBkYXRlL3N0YXRlLlxuICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgZXZlbnRUaW1lOiB1cGRhdGVFdmVudFRpbWUsXG4gICAgICAgICAgbGFuZTogdXBkYXRlTGFuZSxcbiAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3Rmlyc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUgPSBjbG9uZTtcbiAgICAgICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdMYXN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlLm5leHQgPSBjbG9uZTtcbiAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG5cblxuICAgICAgICBuZXdMYW5lcyA9IG1lcmdlTGFuZXMobmV3TGFuZXMsIHVwZGF0ZUxhbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyB1cGRhdGUgZG9lcyBoYXZlIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfY2xvbmUgPSB7XG4gICAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZUV2ZW50VGltZSxcbiAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGlzIGdvaW5nIHRvIGJlIGNvbW1pdHRlZCBzbyB3ZSBuZXZlciB3YW50IHVuY29tbWl0XG4gICAgICAgICAgICAvLyBpdC4gVXNpbmcgTm9MYW5lIHdvcmtzIGJlY2F1c2UgMCBpcyBhIHN1YnNldCBvZiBhbGwgYml0bWFza3MsIHNvXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgbmV2ZXIgYmUgc2tpcHBlZCBieSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICBsYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBuZXdMYXN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlLm5leHQgPSBfY2xvbmU7XG4gICAgICAgIH0gLy8gUHJvY2VzcyB0aGlzIHVwZGF0ZS5cblxuXG4gICAgICAgIG5ld1N0YXRlID0gZ2V0U3RhdGVGcm9tVXBkYXRlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgdXBkYXRlLCBuZXdTdGF0ZSwgcHJvcHMsIGluc3RhbmNlKTtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdXBkYXRlLmNhbGxiYWNrO1xuXG4gICAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IENhbGxiYWNrO1xuICAgICAgICAgIHZhciBlZmZlY3RzID0gcXVldWUuZWZmZWN0cztcblxuICAgICAgICAgIGlmIChlZmZlY3RzID09PSBudWxsKSB7XG4gICAgICAgICAgICBxdWV1ZS5lZmZlY3RzID0gW3VwZGF0ZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVmZmVjdHMucHVzaCh1cGRhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcblxuICAgICAgaWYgKHVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICBwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZztcblxuICAgICAgICBpZiAocGVuZGluZ1F1ZXVlID09PSBudWxsKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgZnJvbSBpbnNpZGUgYSByZWR1Y2VyLiBBZGQgdGhlIG5ld1xuICAgICAgICAgIC8vIHBlbmRpbmcgdXBkYXRlcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGFuZCBrZWVwIHByb2Nlc3NpbmcuXG4gICAgICAgICAgdmFyIF9sYXN0UGVuZGluZ1VwZGF0ZSA9IHBlbmRpbmdRdWV1ZTsgLy8gSW50ZW50aW9uYWxseSB1bnNvdW5kLiBQZW5kaW5nIHVwZGF0ZXMgZm9ybSBhIGNpcmN1bGFyIGxpc3QsIGJ1dCB3ZVxuICAgICAgICAgIC8vIHVucmF2ZWwgdGhlbSB3aGVuIHRyYW5zZmVycmluZyB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuXG4gICAgICAgICAgdmFyIF9maXJzdFBlbmRpbmdVcGRhdGUgPSBfbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICAgICAgICBfbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7XG4gICAgICAgICAgdXBkYXRlID0gX2ZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IF9sYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICBxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlICh0cnVlKTtcblxuICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgcXVldWUuYmFzZVN0YXRlID0gbmV3QmFzZVN0YXRlO1xuICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IG5ld0ZpcnN0QmFzZVVwZGF0ZTtcbiAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlOyAvLyBTZXQgdGhlIHJlbWFpbmluZyBleHBpcmF0aW9uIHRpbWUgdG8gYmUgd2hhdGV2ZXIgaXMgcmVtYWluaW5nIGluIHRoZSBxdWV1ZS5cbiAgICAvLyBUaGlzIHNob3VsZCBiZSBmaW5lIGJlY2F1c2UgdGhlIG9ubHkgdHdvIG90aGVyIHRoaW5ncyB0aGF0IGNvbnRyaWJ1dGUgdG9cbiAgICAvLyBleHBpcmF0aW9uIHRpbWUgYXJlIHByb3BzIGFuZCBjb250ZXh0LiBXZSdyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgdGhlXG4gICAgLy8gYmVnaW4gcGhhc2UgYnkgdGhlIHRpbWUgd2Ugc3RhcnQgcHJvY2Vzc2luZyB0aGUgcXVldWUsIHNvIHdlJ3ZlIGFscmVhZHlcbiAgICAvLyBkZWFsdCB3aXRoIHRoZSBwcm9wcy4gQ29udGV4dCBpbiBjb21wb25lbnRzIHRoYXQgc3BlY2lmeVxuICAgIC8vIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB0cmlja3k7IGJ1dCB3ZSdsbCBoYXZlIHRvIGFjY291bnQgZm9yXG4gICAgLy8gdGhhdCByZWdhcmRsZXNzLlxuXG4gICAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyhuZXdMYW5lcyk7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBuZXdMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICB7XG4gICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ2FsbGJhY2soY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgaWYgKCEodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIGFzIGNhbGxiYWNrLiBFeHBlY3RlZCBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiBcIiArIGNhbGxiYWNrICk7XG4gICAgfVxuICB9XG5cbiAgY2FsbGJhY2suY2FsbChjb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKSB7XG4gIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG59XG5mdW5jdGlvbiBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkge1xuICByZXR1cm4gaGFzRm9yY2VVcGRhdGU7XG59XG5mdW5jdGlvbiBjb21taXRVcGRhdGVRdWV1ZShmaW5pc2hlZFdvcmssIGZpbmlzaGVkUXVldWUsIGluc3RhbmNlKSB7XG4gIC8vIENvbW1pdCB0aGUgZWZmZWN0c1xuICB2YXIgZWZmZWN0cyA9IGZpbmlzaGVkUXVldWUuZWZmZWN0cztcbiAgZmluaXNoZWRRdWV1ZS5lZmZlY3RzID0gbnVsbDtcblxuICBpZiAoZWZmZWN0cyAhPT0gbnVsbCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWZmZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVmZmVjdCA9IGVmZmVjdHNbaV07XG4gICAgICB2YXIgY2FsbGJhY2sgPSBlZmZlY3QuY2FsbGJhY2s7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBlZmZlY3QuY2FsbGJhY2sgPSBudWxsO1xuICAgICAgICBjYWxsQ2FsbGJhY2soY2FsbGJhY2ssIGluc3RhbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGZha2VJbnRlcm5hbEluc3RhbmNlID0ge307XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7IC8vIFJlYWN0LkNvbXBvbmVudCB1c2VzIGEgc2hhcmVkIGZyb3plbiBvYmplY3QgYnkgZGVmYXVsdC5cbi8vIFdlJ2xsIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIGluaXRpYWxpemUgbGVnYWN5IHJlZnMuXG5cbnZhciBlbXB0eVJlZnNPYmplY3QgPSBuZXcgUmVhY3QuQ29tcG9uZW50KCkucmVmcztcbnZhciBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlO1xudmFyIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlO1xudmFyIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZTtcbnZhciB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGU7XG52YXIgd2Fybk9uSW52YWxpZENhbGxiYWNrO1xudmFyIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlO1xudmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzO1xudmFyIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZTtcblxue1xuICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcyA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlID0gbmV3IFNldCgpO1xuICB2YXIgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrID0gbmV3IFNldCgpO1xuXG4gIHdhcm5PbkludmFsaWRDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCB8fCB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIga2V5ID0gY2FsbGVyTmFtZSArICdfJyArIGNhbGxiYWNrO1xuXG4gICAgaWYgKCFkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suaGFzKGtleSkpIHtcbiAgICAgIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5hZGQoa2V5KTtcblxuICAgICAgZXJyb3IoJyVzKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsZXJOYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9O1xuXG4gIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZSA9IGZ1bmN0aW9uICh0eXBlLCBwYXJ0aWFsU3RhdGUpIHtcbiAgICBpZiAocGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpOiBBIHZhbGlkIHN0YXRlIG9iamVjdCAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZC4gJyArICdZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9OyAvLyBUaGlzIGlzIHNvIGdyb3NzIGJ1dCBpdCdzIGF0IGxlYXN0IG5vbi1jcml0aWNhbCBhbmQgY2FuIGJlIHJlbW92ZWQgaWZcbiAgLy8gaXQgY2F1c2VzIHByb2JsZW1zLiBUaGlzIGlzIG1lYW50IHRvIGdpdmUgYSBuaWNlciBlcnJvciBtZXNzYWdlIGZvclxuICAvLyBSZWFjdERPTTE1LnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHJlYWN0RE9NMTZDb21wb25lbnQsXG4gIC8vIC4uLikpIHdoaWNoIG90aGVyd2lzZSB0aHJvd3MgYSBcIl9wcm9jZXNzQ2hpbGRDb250ZXh0IGlzIG5vdCBhIGZ1bmN0aW9uXCJcbiAgLy8gZXhjZXB0aW9uLlxuXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZha2VJbnRlcm5hbEluc3RhbmNlLCAnX3Byb2Nlc3NDaGlsZENvbnRleHQnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIl9wcm9jZXNzQ2hpbGRDb250ZXh0IGlzIG5vdCBhdmFpbGFibGUgaW4gUmVhY3QgMTYrLiBUaGlzIGxpa2VseSBtZWFucyB5b3UgaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2YgUmVhY3QgYW5kIGFyZSBhdHRlbXB0aW5nIHRvIG5lc3QgYSBSZWFjdCAxNSB0cmVlIGluc2lkZSBhIFJlYWN0IDE2IHRyZWUgdXNpbmcgdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIsIHdoaWNoIGlzbid0IHN1cHBvcnRlZC4gVHJ5IHRvIG1ha2Ugc3VyZSB5b3UgaGF2ZSBvbmx5IG9uZSBjb3B5IG9mIFJlYWN0IChhbmQgaWRlYWxseSwgc3dpdGNoIHRvIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbCkuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5mcmVlemUoZmFrZUludGVybmFsSW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXh0UHJvcHMpIHtcbiAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAge1xuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEludm9rZSB0aGUgZnVuY3Rpb24gYW4gZXh0cmEgdGltZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG4gICAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcGFydGlhbFN0YXRlID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcblxuICB7XG4gICAgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlKGN0b3IsIHBhcnRpYWxTdGF0ZSk7XG4gIH0gLy8gTWVyZ2UgdGhlIHBhcnRpYWwgc3RhdGUgYW5kIHRoZSBwcmV2aW91cyBzdGF0ZS5cblxuXG4gIHZhciBtZW1vaXplZFN0YXRlID0gcGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkID8gcHJldlN0YXRlIDogX2Fzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbWVtb2l6ZWRTdGF0ZTsgLy8gT25jZSB0aGUgdXBkYXRlIHF1ZXVlIGlzIGVtcHR5LCBwZXJzaXN0IHRoZSBkZXJpdmVkIHN0YXRlIG9udG8gdGhlXG4gIC8vIGJhc2Ugc3RhdGUuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzLmxhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gUXVldWUgaXMgYWx3YXlzIG5vbi1udWxsIGZvciBjbGFzc2VzXG4gICAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gICAgdXBkYXRlUXVldWUuYmFzZVN0YXRlID0gbWVtb2l6ZWRTdGF0ZTtcbiAgfVxufVxudmFyIGNsYXNzQ29tcG9uZW50VXBkYXRlciA9IHtcbiAgaXNNb3VudGVkOiBpc01vdW50ZWQsXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpO1xuICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ3NldFN0YXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9LFxuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IFJlcGxhY2VTdGF0ZTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdyZXBsYWNlU3RhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH0sXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKGluc3QsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpO1xuICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEludm9rZSB0aGUgZnVuY3Rpb24gYW4gZXh0cmEgdGltZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG4gICAgICAgICAgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNob3VsZFVwZGF0ZSA9IGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICAgIHtcbiAgICAgIGlmIChzaG91bGRVcGRhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvcignJXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk6IFJldHVybmVkIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIGEgJyArICdib29sZWFuIHZhbHVlLiBNYWtlIHN1cmUgdG8gcmV0dXJuIHRydWUgb3IgZmFsc2UuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCkge1xuICAgIHJldHVybiAhc2hhbGxvd0VxdWFsKG9sZFByb3BzLCBuZXdQcm9wcykgfHwgIXNoYWxsb3dFcXVhbChvbGRTdGF0ZSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQ2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIHtcbiAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG4gICAgdmFyIHJlbmRlclByZXNlbnQgPSBpbnN0YW5jZS5yZW5kZXI7XG5cbiAgICBpZiAoIXJlbmRlclByZXNlbnQpIHtcbiAgICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiB0eXBlb2YgY3Rvci5wcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICsgJ2luc3RhbmNlOiBkaWQgeW91IGFjY2lkZW50YWxseSByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yPycsIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IHlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gZGVmaW5lIGByZW5kZXJgLicsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUgJiYgIWluc3RhbmNlLmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCAmJiAhaW5zdGFuY2Uuc3RhdGUpIHtcbiAgICAgIGVycm9yKCdnZXRJbml0aWFsU3RhdGUgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGRlZmluZSBhIHN0YXRlIHByb3BlcnR5IGluc3RlYWQ/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmdldERlZmF1bHRQcm9wcyAmJiAhaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ1VzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLnByb3BUeXBlcykge1xuICAgICAgZXJyb3IoJ3Byb3BUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIHByb3BUeXBlcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5jb250ZXh0VHlwZSkge1xuICAgICAgZXJyb3IoJ2NvbnRleHRUeXBlIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgY29udGV4dFR5cGUgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoaW5zdGFuY2UuY29udGV4dFR5cGVzKSB7XG4gICAgICAgIGVycm9yKCdjb250ZXh0VHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZXMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN0b3IuY29udGV4dFR5cGUgJiYgY3Rvci5jb250ZXh0VHlwZXMgJiYgIWRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzLmhhcyhjdG9yKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcy5hZGQoY3Rvcik7XG5cbiAgICAgICAgZXJyb3IoJyVzIGRlY2xhcmVzIGJvdGggY29udGV4dFR5cGVzIGFuZCBjb250ZXh0VHlwZSBzdGF0aWMgcHJvcGVydGllcy4gJyArICdUaGUgbGVnYWN5IGNvbnRleHRUeXBlcyBwcm9wZXJ0eSB3aWxsIGJlIGlnbm9yZWQuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRTaG91bGRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gJyArICdUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArICdleHBlY3RlZCB0byByZXR1cm4gYSB2YWx1ZS4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgJiYgdHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpLiAnICsgJ3Nob3VsZENvbXBvbmVudFVwZGF0ZSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBleHRlbmRpbmcgUmVhY3QuUHVyZUNvbXBvbmVudC4gJyArICdQbGVhc2UgZXh0ZW5kIFJlYWN0LkNvbXBvbmVudCBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgaXMgdXNlZC4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdBIHB1cmUgY29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFVubW91bnQoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gJyArICdEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFVubW91bnQoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnREaWRSZWNlaXZlUHJvcHMoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gJyArICdJZiB5b3UgbWVhbnQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBpbiByZXNwb25zZSB0byBjaGFuZ2luZyBwcm9wcywgJyArICd1c2UgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpLiBJZiB5b3UgbWVhbnQgdG8gZmV0Y2ggZGF0YSBvciAnICsgJ3J1biBzaWRlLWVmZmVjdHMgb3IgbXV0YXRpb25zIGFmdGVyIFJlYWN0IGhhcyB1cGRhdGVkIHRoZSBVSSwgdXNlIGNvbXBvbmVudERpZFVwZGF0ZSgpLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgaGFzTXV0YXRlZFByb3BzID0gaW5zdGFuY2UucHJvcHMgIT09IG5ld1Byb3BzO1xuXG4gICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSB1bmRlZmluZWQgJiYgaGFzTXV0YXRlZFByb3BzKSB7XG4gICAgICBlcnJvcignJXMoLi4uKTogV2hlbiBjYWxsaW5nIHN1cGVyKCkgaW4gYCVzYCwgbWFrZSBzdXJlIHRvIHBhc3MgJyArIFwidXAgdGhlIHNhbWUgcHJvcHMgdGhhdCB5b3VyIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIHdhcyBwYXNzZWQuXCIsIG5hbWUsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5kZWZhdWx0UHJvcHMpIHtcbiAgICAgIGVycm9yKCdTZXR0aW5nIGRlZmF1bHRQcm9wcyBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIGlnbm9yZWQuJyArICcgSW5zdGVhZCwgZGVmaW5lIGRlZmF1bHRQcm9wcyBhcyBhIHN0YXRpYyBwcm9wZXJ0eSBvbiAlcy4nLCBuYW1lLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgIT09ICdmdW5jdGlvbicgJiYgIWRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZS5oYXMoY3RvcikpIHtcbiAgICAgIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZS5hZGQoY3Rvcik7XG5cbiAgICAgIGVycm9yKCclczogZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBzaG91bGQgYmUgdXNlZCB3aXRoIGNvbXBvbmVudERpZFVwZGF0ZSgpLiAnICsgJ1RoaXMgY29tcG9uZW50IGRlZmluZXMgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBvbmx5LicsIGdldENvbXBvbmVudE5hbWUoY3RvcikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBfc3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICAgIGlmIChfc3RhdGUgJiYgKHR5cGVvZiBfc3RhdGUgIT09ICdvYmplY3QnIHx8IGlzQXJyYXkoX3N0YXRlKSkpIHtcbiAgICAgIGVycm9yKCclcy5zdGF0ZTogbXVzdCBiZSBzZXQgdG8gYW4gb2JqZWN0IG9yIG51bGwnLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY3Rvci5jaGlsZENvbnRleHRUeXBlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVycm9yKCclcy5nZXRDaGlsZENvbnRleHQoKTogY2hpbGRDb250ZXh0VHlwZXMgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvICcgKyAndXNlIGdldENoaWxkQ29udGV4dCgpLicsIG5hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnVwZGF0ZXIgPSBjbGFzc0NvbXBvbmVudFVwZGF0ZXI7XG4gIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGluc3RhbmNlOyAvLyBUaGUgaW5zdGFuY2UgbmVlZHMgYWNjZXNzIHRvIHRoZSBmaWJlciBzbyB0aGF0IGl0IGNhbiBzY2hlZHVsZSB1cGRhdGVzXG5cbiAgc2V0KGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAge1xuICAgIGluc3RhbmNlLl9yZWFjdEludGVybmFsSW5zdGFuY2UgPSBmYWtlSW50ZXJuYWxJbnN0YW5jZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBwcm9wcykge1xuICB2YXIgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBmYWxzZTtcbiAgdmFyIHVubWFza2VkQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG5cbiAge1xuICAgIGlmICgnY29udGV4dFR5cGUnIGluIGN0b3IpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gLy8gQWxsb3cgbnVsbCBmb3IgY29uZGl0aW9uYWwgZGVjbGFyYXRpb25cbiAgICAgIGNvbnRleHRUeXBlID09PSBudWxsIHx8IGNvbnRleHRUeXBlICE9PSB1bmRlZmluZWQgJiYgY29udGV4dFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSAmJiBjb250ZXh0VHlwZS5fY29udGV4dCA9PT0gdW5kZWZpbmVkOyAvLyBOb3QgYSA8Q29udGV4dC5Db25zdW1lcj5cblxuICAgICAgaWYgKCFpc1ZhbGlkICYmICFkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuaGFzKGN0b3IpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5hZGQoY3Rvcik7XG4gICAgICAgIHZhciBhZGRlbmR1bSA9ICcnO1xuXG4gICAgICAgIGlmIChjb250ZXh0VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byB1bmRlZmluZWQuICcgKyAnVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGEgdHlwbyBvciBieSBtaXhpbmcgdXAgbmFtZWQgYW5kIGRlZmF1bHQgaW1wb3J0cy4gJyArICdUaGlzIGNhbiBhbHNvIGhhcHBlbiBkdWUgdG8gYSBjaXJjdWxhciBkZXBlbmRlbmN5LCBzbyAnICsgJ3RyeSBtb3ZpbmcgdGhlIGNyZWF0ZUNvbnRleHQoKSBjYWxsIHRvIGEgc2VwYXJhdGUgZmlsZS4nO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGEgJyArIHR5cGVvZiBjb250ZXh0VHlwZSArICcuJztcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSkge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIHRoZSBDb250ZXh0LlByb3ZpZGVyIGluc3RlYWQ/JztcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZS5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gPENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuQ29uc3VtZXIgaW5zdGVhZD8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYW4gb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNvbnRleHRUeXBlKS5qb2luKCcsICcpICsgJ30uJztcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yKCclcyBkZWZpbmVzIGFuIGludmFsaWQgY29udGV4dFR5cGUuICcgKyAnY29udGV4dFR5cGUgc2hvdWxkIHBvaW50IHRvIHRoZSBDb250ZXh0IG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVDb250ZXh0KCkuJXMnLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnLCBhZGRlbmR1bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBjb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IGN0b3IuY29udGV4dFR5cGVzO1xuICAgIGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID0gY29udGV4dFR5cGVzICE9PSBudWxsICYmIGNvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnRleHQgPSBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA/IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCkgOiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIH0gLy8gSW5zdGFudGlhdGUgdHdpY2UgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuXG5cbiAge1xuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTtcbiAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlICE9PSBudWxsICYmIGluc3RhbmNlLnN0YXRlICE9PSB1bmRlZmluZWQgPyBpbnN0YW5jZS5zdGF0ZSA6IG51bGw7XG4gIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nICYmIHN0YXRlID09PSBudWxsKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCdgJXNgIHVzZXMgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYnV0IGl0cyBpbml0aWFsIHN0YXRlIGlzICcgKyAnJXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkLiBJbnN0ZWFkLCBkZWZpbmUgdGhlIGluaXRpYWwgc3RhdGUgYnkgJyArICdhc3NpZ25pbmcgYW4gb2JqZWN0IHRvIGB0aGlzLnN0YXRlYCBpbiB0aGUgY29uc3RydWN0b3Igb2YgYCVzYC4gJyArICdUaGlzIGVuc3VyZXMgdGhhdCBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBhcmd1bWVudHMgaGF2ZSBhIGNvbnNpc3RlbnQgc2hhcGUuJywgY29tcG9uZW50TmFtZSwgaW5zdGFuY2Uuc3RhdGUgPT09IG51bGwgPyAnbnVsbCcgOiAndW5kZWZpbmVkJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfSAvLyBJZiBuZXcgY29tcG9uZW50IEFQSXMgYXJlIGRlZmluZWQsIFwidW5zYWZlXCIgbGlmZWN5Y2xlcyB3b24ndCBiZSBjYWxsZWQuXG4gICAgLy8gV2FybiBhYm91dCB0aGVzZSBsaWZlY3ljbGVzIGlmIHRoZXkgYXJlIHByZXNlbnQuXG4gICAgLy8gRG9uJ3Qgd2FybiBhYm91dCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIG1ldGhvZHMgdGhvdWdoLlxuXG5cbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGZvdW5kV2lsbE1vdW50TmFtZSA9IG51bGw7XG4gICAgICB2YXIgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9IG51bGw7XG4gICAgICB2YXIgZm91bmRXaWxsVXBkYXRlTmFtZSA9IG51bGw7XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kV2lsbE1vdW50TmFtZSA9ICdjb21wb25lbnRXaWxsTW91bnQnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSAnY29tcG9uZW50V2lsbFVwZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJztcbiAgICAgIH1cblxuICAgICAgaWYgKGZvdW5kV2lsbE1vdW50TmFtZSAhPT0gbnVsbCB8fCBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lICE9PSBudWxsIHx8IGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIF9jb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgICB2YXIgbmV3QXBpTmFtZSA9IHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/ICdnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKScgOiAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSc7XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmhhcyhfY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmFkZChfY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgICBlcnJvcignVW5zYWZlIGxlZ2FjeSBsaWZlY3ljbGVzIHdpbGwgbm90IGJlIGNhbGxlZCBmb3IgY29tcG9uZW50cyB1c2luZyBuZXcgY29tcG9uZW50IEFQSXMuXFxuXFxuJyArICclcyB1c2VzICVzIGJ1dCBhbHNvIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbGVnYWN5IGxpZmVjeWNsZXM6JXMlcyVzXFxuXFxuJyArICdUaGUgYWJvdmUgbGlmZWN5Y2xlcyBzaG91bGQgYmUgcmVtb3ZlZC4gTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTpcXG4nICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMnLCBfY29tcG9uZW50TmFtZSwgbmV3QXBpTmFtZSwgZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsTW91bnROYW1lIDogJycsIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lIDogJycsIGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxVcGRhdGVOYW1lIDogJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENhY2hlIHVubWFza2VkIGNvbnRleHQgc28gd2UgY2FuIGF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIG5lY2Vzc2FyeS5cbiAgLy8gUmVhY3RGaWJlckNvbnRleHQgdXN1YWxseSB1cGRhdGVzIHRoaXMgY2FjaGUgYnV0IGNhbid0IGZvciBuZXdseS1jcmVhdGVkIGluc3RhbmNlcy5cblxuXG4gIGlmIChpc0xlZ2FjeUNvbnRleHRDb25zdW1lcikge1xuICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuZnVuY3Rpb24gY2FsbENvbXBvbmVudFdpbGxNb3VudCh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpIHtcbiAgdmFyIG9sZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgfVxuXG4gIGlmIChvbGRTdGF0ZSAhPT0gaW5zdGFuY2Uuc3RhdGUpIHtcbiAgICB7XG4gICAgICBlcnJvcignJXMuY29tcG9uZW50V2lsbE1vdW50KCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byB0aGlzLnN0YXRlIGlzICcgKyBcImRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBcIiArICdjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgIH1cblxuICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpIHtcbiAgdmFyIG9sZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIH1cblxuICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IG9sZFN0YXRlKSB7XG4gICAge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gJyArIFwidGhpcy5zdGF0ZSBpcyBkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgKyAnY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShpbnN0YW5jZSwgaW5zdGFuY2Uuc3RhdGUsIG51bGwpO1xuICB9XG59IC8vIEludm9rZXMgdGhlIG1vdW50IGxpZmUtY3ljbGVzIG9uIGEgcHJldmlvdXNseSBuZXZlciByZW5kZXJlZCBpbnN0YW5jZS5cblxuXG5mdW5jdGlvbiBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcyk7XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgaW5zdGFuY2UucmVmcyA9IGVtcHR5UmVmc09iamVjdDtcbiAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGluc3RhbmNlLmNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgaW5zdGFuY2UuY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB7XG4gICAgaWYgKGluc3RhbmNlLnN0YXRlID09PSBuZXdQcm9wcykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gYXNzaWduIHByb3BzIGRpcmVjdGx5IHRvIHN0YXRlICcgKyBcImJlY2F1c2UgdXBkYXRlcyB0byBwcm9wcyB3b24ndCBiZSByZWZsZWN0ZWQgaW4gc3RhdGUuIFwiICsgJ0luIG1vc3QgY2FzZXMsIGl0IGlzIGJldHRlciB0byB1c2UgcHJvcHMgZGlyZWN0bHkuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9IC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG5cbiAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgIT09ICdmdW5jdGlvbicgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgY2FsbENvbXBvbmVudFdpbGxNb3VudCh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpOyAvLyBJZiB3ZSBoYWQgYWRkaXRpb25hbCBzdGF0ZSB1cGRhdGVzIGR1cmluZyB0aGlzIGxpZmUtY3ljbGUsIGxldCdzXG4gICAgLy8gcHJvY2VzcyB0aGVtIG5vdy5cblxuICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gICAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHRMZWdhY3lVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7IC8vIE5vdGU6IER1cmluZyB0aGVzZSBsaWZlLWN5Y2xlcywgaW5zdGFuY2UucHJvcHMvaW5zdGFuY2Uuc3RhdGUgYXJlIHdoYXRcbiAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgLy8gZHVyaW5nIGNvbXBvbmVudERpZFVwZGF0ZSB3ZSBwYXNzIHRoZSBcImN1cnJlbnRcIiBwcm9wcy5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dCkge1xuICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCk7XG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAob2xkUHJvcHMgPT09IG5ld1Byb3BzICYmIG9sZFN0YXRlID09PSBuZXdTdGF0ZSAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSAmJiAhY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpKSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB8fCBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cbiAgICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn0gLy8gSW52b2tlcyB0aGUgdXBkYXRlIGxpZmUtY3ljbGVzIGFuZCByZXR1cm5zIGZhbHNlIGlmIGl0IHNob3VsZG4ndCByZXJlbmRlci5cblxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0luc3RhbmNlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHVucmVzb2x2ZWRPbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID8gdW5yZXNvbHZlZE9sZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh3b3JrSW5Qcm9ncmVzcy50eXBlLCB1bnJlc29sdmVkT2xkUHJvcHMpO1xuICBpbnN0YW5jZS5wcm9wcyA9IG9sZFByb3BzO1xuICB2YXIgdW5yZXNvbHZlZE5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgb2xkQ29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQ7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG4gIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIG5leHRDb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXh0VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIG5leHRVbm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nOyAvLyBOb3RlOiBEdXJpbmcgdGhlc2UgbGlmZS1jeWNsZXMsIGluc3RhbmNlLnByb3BzL2luc3RhbmNlLnN0YXRlIGFyZSB3aGF0XG4gIC8vIGV2ZXIgdGhlIHByZXZpb3VzbHkgYXR0ZW1wdGVkIHRvIHJlbmRlciAtIG5vdCB0aGUgXCJjdXJyZW50XCIuIEhvd2V2ZXIsXG4gIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG4gIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IHVucmVzb2x2ZWROZXdQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dCkge1xuICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCk7XG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAodW5yZXNvbHZlZE9sZFByb3BzID09PSB1bnJlc29sdmVkTmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkpIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB8fCBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cbiAgICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9IC8vIElmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5lZCBmYWxzZSwgd2Ugc2hvdWxkIHN0aWxsIHVwZGF0ZSB0aGVcbiAgICAvLyBtZW1vaXplZCBwcm9wcy9zdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgd29yayBjYW4gYmUgcmV1c2VkLlxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV3UHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9IC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UncyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHBvaW50ZXJzIGV2ZW5cbiAgLy8gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2UuXG5cblxuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IG5ld1N0YXRlO1xuICBpbnN0YW5jZS5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59XG5cbnZhciBkaWRXYXJuQWJvdXRNYXBzO1xudmFyIGRpZFdhcm5BYm91dEdlbmVyYXRvcnM7XG52YXIgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmc7XG52YXIgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nO1xuXG52YXIgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQsIHJldHVybkZpYmVyKSB7fTtcblxue1xuICBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xuICAvKipcbiAgICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICAgKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAgICogdXBkYXRlcy5cbiAgICovXG5cbiAgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG4gIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZyA9IHt9O1xuXG4gIHdhcm5Gb3JNaXNzaW5nS2V5ID0gZnVuY3Rpb24gKGNoaWxkLCByZXR1cm5GaWJlcikge1xuICAgIGlmIChjaGlsZCA9PT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjaGlsZC5fc3RvcmUgfHwgY2hpbGQuX3N0b3JlLnZhbGlkYXRlZCB8fCBjaGlsZC5rZXkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKHR5cGVvZiBjaGlsZC5fc3RvcmUgPT09ICdvYmplY3QnKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJSZWFjdCBDb21wb25lbnQgaW4gd2FybkZvck1pc3NpbmdLZXkgc2hvdWxkIGhhdmUgYSBfc3RvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGlsZC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSAnICsgJ1wia2V5XCIgcHJvcC4gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yICcgKyAnbW9yZSBpbmZvcm1hdGlvbi4nKTtcbiAgfTtcbn1cblxudmFyIGlzQXJyYXkkMSA9IEFycmF5LmlzQXJyYXk7XG5cbmZ1bmN0aW9uIGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCkge1xuICB2YXIgbWl4ZWRSZWYgPSBlbGVtZW50LnJlZjtcblxuICBpZiAobWl4ZWRSZWYgIT09IG51bGwgJiYgdHlwZW9mIG1peGVkUmVmICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBtaXhlZFJlZiAhPT0gJ29iamVjdCcpIHtcbiAgICB7XG4gICAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIG9uY2Ugd2UgdHVybiBvbiB0aGUgc3RyaW5nIHJlZiB3YXJuaW5nIGZvclxuICAgICAgLy8gZXZlcnlvbmUsIGJlY2F1c2UgdGhlIHN0cmljdCBtb2RlIGNhc2Ugd2lsbCBubyBsb25nZXIgYmUgcmVsZXZhbnRcbiAgICAgIGlmICgocmV0dXJuRmliZXIubW9kZSAmIFN0cmljdE1vZGUgfHwgd2FybkFib3V0U3RyaW5nUmVmcykgJiYgLy8gV2Ugd2FybiBpbiBSZWFjdEVsZW1lbnQuanMgaWYgb3duZXIgYW5kIHNlbGYgYXJlIGVxdWFsIGZvciBzdHJpbmcgcmVmc1xuICAgICAgLy8gYmVjYXVzZSB0aGVzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb25cbiAgICAgIC8vIHVzaW5nIGEgY29kZW1vZC4gVGhlcmVmb3JlLCB3ZSBkb24ndCBoYXZlIHRvIHdhcm4gYWJvdXQgc3RyaW5nIHJlZnMgYWdhaW4uXG4gICAgICAhKGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX3NlbGYgJiYgZWxlbWVudC5fb3duZXIuc3RhdGVOb2RlICE9PSBlbGVtZW50Ll9zZWxmKSkge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgZXJyb3IoJ0Egc3RyaW5nIHJlZiwgXCIlc1wiLCBoYXMgYmVlbiBmb3VuZCB3aXRoaW4gYSBzdHJpY3QgbW9kZSB0cmVlLiAnICsgJ1N0cmluZyByZWZzIGFyZSBhIHNvdXJjZSBvZiBwb3RlbnRpYWwgYnVncyBhbmQgc2hvdWxkIGJlIGF2b2lkZWQuICcgKyAnV2UgcmVjb21tZW5kIHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgbWl4ZWRSZWYpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQuX293bmVyKSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBpbnN0O1xuXG4gICAgICBpZiAob3duZXIpIHtcbiAgICAgICAgdmFyIG93bmVyRmliZXIgPSBvd25lcjtcblxuICAgICAgICBpZiAoIShvd25lckZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgaGF2ZSBzdHJpbmcgcmVmcy4gV2UgcmVjb21tZW5kIHVzaW5nIHVzZVJlZigpIGluc3RlYWQuIExlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWZcIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluc3QgPSBvd25lckZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpbnN0KSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJNaXNzaW5nIG93bmVyIGZvciBzdHJpbmcgcmVmIFwiICsgbWl4ZWRSZWYgKyBcIi4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHJpbmdSZWYgPSAnJyArIG1peGVkUmVmOyAvLyBDaGVjayBpZiBwcmV2aW91cyBzdHJpbmcgcmVmIG1hdGNoZXMgbmV3IHN0cmluZyByZWZcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5yZWYgIT09IG51bGwgJiYgdHlwZW9mIGN1cnJlbnQucmVmID09PSAnZnVuY3Rpb24nICYmIGN1cnJlbnQucmVmLl9zdHJpbmdSZWYgPT09IHN0cmluZ1JlZikge1xuICAgICAgICByZXR1cm4gY3VycmVudC5yZWY7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWYgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHJlZnMgPSBpbnN0LnJlZnM7XG5cbiAgICAgICAgaWYgKHJlZnMgPT09IGVtcHR5UmVmc09iamVjdCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSBsYXp5IHBvb2xlZCBmcm96ZW4gb2JqZWN0LCBzbyB3ZSBuZWVkIHRvIGluaXRpYWxpemUuXG4gICAgICAgICAgcmVmcyA9IGluc3QucmVmcyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgZGVsZXRlIHJlZnNbc3RyaW5nUmVmXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZzW3N0cmluZ1JlZl0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmVmLl9zdHJpbmdSZWYgPSBzdHJpbmdSZWY7XG4gICAgICByZXR1cm4gcmVmO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoISh0eXBlb2YgbWl4ZWRSZWYgPT09ICdzdHJpbmcnKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgcmVmIHRvIGJlIGEgZnVuY3Rpb24sIGEgc3RyaW5nLCBhbiBvYmplY3QgcmV0dXJuZWQgYnkgUmVhY3QuY3JlYXRlUmVmKCksIG9yIG51bGwuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWVsZW1lbnQuX293bmVyKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJFbGVtZW50IHJlZiB3YXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIChcIiArIG1peGVkUmVmICsgXCIpIGJ1dCBubyBvd25lciB3YXMgc2V0LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWF5IGJlIGFkZGluZyBhIHJlZiB0byBhIGZ1bmN0aW9uIGNvbXBvbmVudFxcbjIuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgY29tcG9uZW50IHRoYXQgd2FzIG5vdCBjcmVhdGVkIGluc2lkZSBhIGNvbXBvbmVudCdzIHJlbmRlciBtZXRob2RcXG4zLiBZb3UgaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2YgUmVhY3QgbG9hZGVkXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWZzLW11c3QtaGF2ZS1vd25lciBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1peGVkUmVmO1xufVxuXG5mdW5jdGlvbiB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKSB7XG4gIGlmIChyZXR1cm5GaWJlci50eXBlICE9PSAndGV4dGFyZWEnKSB7XG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXdDaGlsZCkgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhuZXdDaGlsZCkuam9pbignLCAnKSArICd9JyA6IG5ld0NoaWxkKSArIFwiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcikge1xuICB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgaWYgKG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1tjb21wb25lbnROYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1tjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignRnVuY3Rpb25zIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC4gVGhpcyBtYXkgaGFwcGVuIGlmICcgKyAneW91IHJldHVybiBhIENvbXBvbmVudCBpbnN0ZWFkIG9mIDxDb21wb25lbnQgLz4gZnJvbSByZW5kZXIuICcgKyAnT3IgbWF5YmUgeW91IG1lYW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiByZXR1cm4gaXQuJyk7XG4gIH1cbn0gLy8gV2UgYXZvaWQgaW5saW5pbmcgdGhpcyB0byBhdm9pZCBwb3RlbnRpYWwgZGVvcHRzIGZyb20gdXNpbmcgdHJ5L2NhdGNoLlxuLy8gdG8gYmUgYWJsZSB0byBvcHRpbWl6ZSBlYWNoIHBhdGggaW5kaXZpZHVhbGx5IGJ5IGJyYW5jaGluZyBlYXJseS4gVGhpcyBuZWVkc1xuLy8gYSBjb21waWxlciBvciB3ZSBjYW4gZG8gaXQgbWFudWFsbHkuIEhlbHBlcnMgdGhhdCBkb24ndCBuZWVkIHRoaXMgYnJhbmNoaW5nXG4vLyBsaXZlIG91dHNpZGUgb2YgdGhpcyBmdW5jdGlvbi5cblxuXG5mdW5jdGlvbiBDaGlsZFJlY29uY2lsZXIoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICBmdW5jdGlvbiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSkge1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIERlbGV0aW9ucyBhcmUgYWRkZWQgaW4gcmV2ZXJzZWQgb3JkZXIgc28gd2UgYWRkIGl0IHRvIHRoZSBmcm9udC5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgcmV0dXJuIGZpYmVyJ3MgZWZmZWN0IGxpc3QgaXMgZW1wdHkgZXhjZXB0IGZvclxuICAgIC8vIGRlbGV0aW9ucywgc28gd2UgY2FuIGp1c3QgYXBwZW5kIHRoZSBkZWxldGlvbiB0byB0aGUgbGlzdC4gVGhlIHJlbWFpbmluZ1xuICAgIC8vIGVmZmVjdHMgYXJlbid0IGFkZGVkIHVudGlsIHRoZSBjb21wbGV0ZSBwaGFzZS4gT25jZSB3ZSBpbXBsZW1lbnRcbiAgICAvLyByZXN1bWluZywgdGhpcyBtYXkgbm90IGJlIHRydWUuXG5cblxuICAgIHZhciBsYXN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0ICE9PSBudWxsKSB7XG4gICAgICBsYXN0Lm5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgfVxuXG4gICAgY2hpbGRUb0RlbGV0ZS5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBjaGlsZFRvRGVsZXRlLmZsYWdzID0gRGVsZXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIFRPRE86IEZvciB0aGUgc2hvdWxkQ2xvbmUgY2FzZSwgdGhpcyBjb3VsZCBiZSBtaWNyby1vcHRpbWl6ZWQgYSBiaXQgYnlcbiAgICAvLyBhc3N1bWluZyB0aGF0IGFmdGVyIHRoZSBmaXJzdCBjaGlsZCB3ZSd2ZSBhbHJlYWR5IGFkZGVkIGV2ZXJ5dGhpbmcuXG5cblxuICAgIHZhciBjaGlsZFRvRGVsZXRlID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGRUb0RlbGV0ZSAhPT0gbnVsbCkge1xuICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpO1xuICAgICAgY2hpbGRUb0RlbGV0ZSA9IGNoaWxkVG9EZWxldGUuc2libGluZztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIC8vIEFkZCB0aGUgcmVtYWluaW5nIGNoaWxkcmVuIHRvIGEgdGVtcG9yYXJ5IG1hcCBzbyB0aGF0IHdlIGNhbiBmaW5kIHRoZW0gYnlcbiAgICAvLyBrZXlzIHF1aWNrbHkuIEltcGxpY2l0IChudWxsKSBrZXlzIGdldCBhZGRlZCB0byB0aGlzIHNldCB3aXRoIHRoZWlyIGluZGV4XG4gICAgLy8gaW5zdGVhZC5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG5ldyBNYXAoKTtcbiAgICB2YXIgZXhpc3RpbmdDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGV4aXN0aW5nQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGlmIChleGlzdGluZ0NoaWxkLmtleSAhPT0gbnVsbCkge1xuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLnNldChleGlzdGluZ0NoaWxkLmtleSwgZXhpc3RpbmdDaGlsZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLnNldChleGlzdGluZ0NoaWxkLmluZGV4LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH1cblxuICAgICAgZXhpc3RpbmdDaGlsZCA9IGV4aXN0aW5nQ2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICByZXR1cm4gZXhpc3RpbmdDaGlsZHJlbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZUZpYmVyKGZpYmVyLCBwZW5kaW5nUHJvcHMpIHtcbiAgICAvLyBXZSBjdXJyZW50bHkgc2V0IHNpYmxpbmcgdG8gbnVsbCBhbmQgaW5kZXggdG8gMCBoZXJlIGJlY2F1c2UgaXQgaXMgZWFzeVxuICAgIC8vIHRvIGZvcmdldCB0byBkbyBiZWZvcmUgcmV0dXJuaW5nIGl0LiBFLmcuIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuXG4gICAgdmFyIGNsb25lID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoZmliZXIsIHBlbmRpbmdQcm9wcyk7XG4gICAgY2xvbmUuaW5kZXggPSAwO1xuICAgIGNsb25lLnNpYmxpbmcgPSBudWxsO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SW5kZXgpIHtcbiAgICBuZXdGaWJlci5pbmRleCA9IG5ld0luZGV4O1xuXG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudCA9IG5ld0ZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICB2YXIgb2xkSW5kZXggPSBjdXJyZW50LmluZGV4O1xuXG4gICAgICBpZiAob2xkSW5kZXggPCBsYXN0UGxhY2VkSW5kZXgpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG1vdmUuXG4gICAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpdGVtIGNhbiBzdGF5IGluIHBsYWNlLlxuICAgICAgICByZXR1cm4gb2xkSW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gaW5zZXJ0aW9uLlxuICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYWNlU2luZ2xlQ2hpbGQobmV3RmliZXIpIHtcbiAgICAvLyBUaGlzIGlzIHNpbXBsZXIgZm9yIHRoZSBzaW5nbGUgY2hpbGQgY2FzZS4gV2Ugb25seSBuZWVkIHRvIGRvIGFcbiAgICAvLyBwbGFjZW1lbnQgZm9yIGluc2VydGluZyBuZXcgY2hpbGRyZW4uXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RmliZXI7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudCwgdGV4dENvbnRlbnQsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEhvc3RUZXh0KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIHRleHRDb250ZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChjdXJyZW50LmVsZW1lbnRUeXBlID09PSBlbGVtZW50LnR5cGUgfHwgKCAvLyBLZWVwIHRoaXMgY2hlY2sgaW5saW5lIHNvIGl0IG9ubHkgcnVucyBvbiB0aGUgZmFsc2UgcGF0aDpcbiAgICAgICBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoY3VycmVudCwgZWxlbWVudCkgKSkge1xuICAgICAgICAvLyBNb3ZlIGJhc2VkIG9uIGluZGV4XG4gICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIGVsZW1lbnQucHJvcHMpO1xuICAgICAgICBleGlzdGluZy5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpO1xuICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICB9XG4gICAgfSAvLyBJbnNlcnRcblxuXG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudCwgcG9ydGFsLCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBIb3N0UG9ydGFsIHx8IGN1cnJlbnQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gIT09IHBvcnRhbC5jb250YWluZXJJbmZvIHx8IGN1cnJlbnQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uICE9PSBwb3J0YWwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBmcmFnbWVudCwgbGFuZXMsIGtleSkge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBGcmFnbWVudCkge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZyYWdtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywga2V5KTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBmcmFnbWVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMuIElmIHRoZSBwcmV2aW91cyBub2RlIGlzIGltcGxpY2l0bHkga2V5ZWRcbiAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAvLyBub2RlLlxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KCcnICsgbmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgbnVsbCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgX2NyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICByZXR1cm4gX2NyZWF0ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9jcmVhdGVkMiA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICAgICAgICBfY3JlYXRlZDIucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICByZXR1cm4gX2NyZWF0ZWQyO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgdmFyIF9jcmVhdGVkMyA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywgbnVsbCk7XG5cbiAgICAgICAgX2NyZWF0ZWQzLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICByZXR1cm4gX2NyZWF0ZWQzO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgLy8gVXBkYXRlIHRoZSBmaWJlciBpZiB0aGUga2V5cyBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiBudWxsLlxuICAgIHZhciBrZXkgPSBvbGRGaWJlciAhPT0gbnVsbCA/IG9sZEZpYmVyLmtleSA6IG51bGw7XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cy4gSWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgaW1wbGljaXRseSBrZXllZFxuICAgICAgLy8gd2UgY2FuIGNvbnRpbnVlIHRvIHJlcGxhY2UgaXQgd2l0aG91dCBhYm9ydGluZyBldmVuIGlmIGl0IGlzIG5vdCBhIHRleHRcbiAgICAgIC8vIG5vZGUuXG4gICAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG9sZEZpYmVyLCAnJyArIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgIGlmIChuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sIGxhbmVzLCBrZXkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLCBzbyB3ZSBuZWl0aGVyIGhhdmUgdG8gY2hlY2sgdGhlIG9sZCBub3JcbiAgICAgIC8vIG5ldyBub2RlIGZvciB0aGUga2V5LiBJZiBib3RoIGFyZSB0ZXh0IG5vZGVzLCB0aGV5IG1hdGNoLlxuICAgICAgdmFyIG1hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcbiAgICAgIHJldHVybiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgbWF0Y2hlZEZpYmVyLCAnJyArIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdDaGlsZC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXkpIHx8IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlciwgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sIGxhbmVzLCBuZXdDaGlsZC5rZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlcjIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdDaGlsZC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXkpIHx8IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICB2YXIgX21hdGNoZWRGaWJlcjMgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyMywgbmV3Q2hpbGQsIGxhbmVzLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBXYXJucyBpZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSBvciBtaXNzaW5nIGtleVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JyB8fCBjaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ga25vd25LZXlzO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGNoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHdhcm5Gb3JNaXNzaW5nS2V5KGNoaWxkLCByZXR1cm5GaWJlcik7XG4gICAgICAgICAgdmFyIGtleSA9IGNoaWxkLmtleTtcblxuICAgICAgICAgIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGtub3duS2V5cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAga25vd25LZXlzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFrbm93bktleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yKCdFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksIGAlc2AuICcgKyAnS2V5cyBzaG91bGQgYmUgdW5pcXVlIHNvIHRoYXQgY29tcG9uZW50cyBtYWludGFpbiB0aGVpciBpZGVudGl0eSAnICsgJ2Fjcm9zcyB1cGRhdGVzLiBOb24tdW5pcXVlIGtleXMgbWF5IGNhdXNlIGNoaWxkcmVuIHRvIGJlICcgKyAnZHVwbGljYXRlZCBhbmQvb3Igb21pdHRlZCBcdTIwMTQgdGhlIGJlaGF2aW9yIGlzIHVuc3VwcG9ydGVkIGFuZCAnICsgJ2NvdWxkIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLicsIGtleSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ga25vd25LZXlzO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkcmVuLCBsYW5lcykge1xuICAgIC8vIFRoaXMgYWxnb3JpdGhtIGNhbid0IG9wdGltaXplIGJ5IHNlYXJjaGluZyBmcm9tIGJvdGggZW5kcyBzaW5jZSB3ZVxuICAgIC8vIGRvbid0IGhhdmUgYmFja3BvaW50ZXJzIG9uIGZpYmVycy4gSSdtIHRyeWluZyB0byBzZWUgaG93IGZhciB3ZSBjYW4gZ2V0XG4gICAgLy8gd2l0aCB0aGF0IG1vZGVsLiBJZiBpdCBlbmRzIHVwIG5vdCBiZWluZyB3b3J0aCB0aGUgdHJhZGVvZmZzLCB3ZSBjYW5cbiAgICAvLyBhZGQgaXQgbGF0ZXIuXG4gICAgLy8gRXZlbiB3aXRoIGEgdHdvIGVuZGVkIG9wdGltaXphdGlvbiwgd2UnZCB3YW50IHRvIG9wdGltaXplIGZvciB0aGUgY2FzZVxuICAgIC8vIHdoZXJlIHRoZXJlIGFyZSBmZXcgY2hhbmdlcyBhbmQgYnJ1dGUgZm9yY2UgdGhlIGNvbXBhcmlzb24gaW5zdGVhZCBvZlxuICAgIC8vIGdvaW5nIGZvciB0aGUgTWFwLiBJdCdkIGxpa2UgdG8gZXhwbG9yZSBoaXR0aW5nIHRoYXQgcGF0aCBmaXJzdCBpblxuICAgIC8vIGZvcndhcmQtb25seSBtb2RlIGFuZCBvbmx5IGdvIGZvciB0aGUgTWFwIG9uY2Ugd2Ugbm90aWNlIHRoYXQgd2UgbmVlZFxuICAgIC8vIGxvdHMgb2YgbG9vayBhaGVhZC4gVGhpcyBkb2Vzbid0IGhhbmRsZSByZXZlcnNhbCBhcyB3ZWxsIGFzIHR3byBlbmRlZFxuICAgIC8vIHNlYXJjaCBidXQgdGhhdCdzIHVudXN1YWwuIEJlc2lkZXMsIGZvciB0aGUgdHdvIGVuZGVkIG9wdGltaXphdGlvbiB0b1xuICAgIC8vIHdvcmsgb24gSXRlcmFibGVzLCB3ZSdkIG5lZWQgdG8gY29weSB0aGUgd2hvbGUgc2V0LlxuICAgIC8vIEluIHRoaXMgZmlyc3QgaXRlcmF0aW9uLCB3ZSdsbCBqdXN0IGxpdmUgd2l0aCBoaXR0aW5nIHRoZSBiYWQgY2FzZVxuICAgIC8vIChhZGRpbmcgZXZlcnl0aGluZyB0byBhIE1hcCkgaW4gZm9yIGV2ZXJ5IGluc2VydC9tb3ZlLlxuICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhpcyBjb2RlLCBhbHNvIHVwZGF0ZSByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKCkgd2hpY2hcbiAgICAvLyB1c2VzIHRoZSBzYW1lIGFsZ29yaXRobS5cbiAgICB7XG4gICAgICAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5ld0NoaWxkcmVuW2ldO1xuICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzTmV3RmliZXIgPSBudWxsO1xuICAgIHZhciBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgIHZhciBuZXdJZHggPSAwO1xuICAgIHZhciBuZXh0T2xkRmliZXIgPSBudWxsO1xuXG4gICAgZm9yICg7IG9sZEZpYmVyICE9PSBudWxsICYmIG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgIGlmIChvbGRGaWJlci5pbmRleCA+IG5ld0lkeCkge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKTtcblxuICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgYnJlYWtzIG9uIGVtcHR5IHNsb3RzIGxpa2UgbnVsbCBjaGlsZHJlbi4gVGhhdCdzXG4gICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgIC8vIGJvb2xlYW4sIHVuZGVmaW5lZCwgZXRjLlxuICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGNoaWxkLlxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERlZmVyIHNpYmxpbmdzIGlmIHdlJ3JlIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXggZm9yIHRoaXMgc2xvdC5cbiAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgIC8vIHdpdGggdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cblxuICAgIGlmIChuZXdJZHggPT09IG5ld0NoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBuZXcgY2hpbGRyZW4uIFdlIGNhbiBkZWxldGUgdGhlIHJlc3QuXG4gICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBtb3JlIGV4aXN0aW5nIGNoaWxkcmVuIHdlIGNhbiBjaG9vc2UgYSBmYXN0IHBhdGhcbiAgICAgIC8vIHNpbmNlIHRoZSByZXN0IHdpbGwgYWxsIGJlIGluc2VydGlvbnMuXG4gICAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgICB2YXIgX25ld0ZpYmVyID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKTtcblxuICAgICAgICBpZiAoX25ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfSAvLyBBZGQgYWxsIGNoaWxkcmVuIHRvIGEga2V5IG1hcCBmb3IgcXVpY2sgbG9va3Vwcy5cblxuXG4gICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpOyAvLyBLZWVwIHNjYW5uaW5nIGFuZCB1c2UgdGhlIG1hcCB0byByZXN0b3JlIGRlbGV0ZWQgaXRlbXMgYXMgbW92ZXMuXG5cbiAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgdmFyIF9uZXdGaWJlcjIgPSB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKTtcblxuICAgICAgaWYgKF9uZXdGaWJlcjIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoX25ld0ZpYmVyMi5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuZXcgZmliZXIgaXMgYSB3b3JrIGluIHByb2dyZXNzLCBidXQgaWYgdGhlcmUgZXhpc3RzIGFcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgIC8vIGxpc3QuXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShfbmV3RmliZXIyLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IF9uZXdGaWJlcjIua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXIyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgZXhpc3RpbmdDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkcmVuSXRlcmFibGUsIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyByZWNvbmNpbGVDaGlsZHJlbkFycmF5KCksXG4gICAgLy8gYnV0IHVzaW5nIHRoZSBpdGVyYXRvciBpbnN0ZWFkLlxuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgIGlmICghKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJBbiBvYmplY3QgaXMgbm90IGFuIGl0ZXJhYmxlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCByZW5kZXJpbmcgR2VuZXJhdG9ycyBiZWNhdXNlIGl0J3MgYSBtdXRhdGlvbi5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyOTk1XG4gICAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyAkRmxvd0ZpeE1lIEZsb3cgZG9lc24ndCBrbm93IGFib3V0IHRvU3RyaW5nVGFnXG4gICAgICBuZXdDaGlsZHJlbkl0ZXJhYmxlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdHZW5lcmF0b3InKSB7XG4gICAgICAgIGlmICghZGlkV2FybkFib3V0R2VuZXJhdG9ycykge1xuICAgICAgICAgIGVycm9yKCdVc2luZyBHZW5lcmF0b3JzIGFzIGNoaWxkcmVuIGlzIHVuc3VwcG9ydGVkIGFuZCB3aWxsIGxpa2VseSB5aWVsZCAnICsgJ3VuZXhwZWN0ZWQgcmVzdWx0cyBiZWNhdXNlIGVudW1lcmF0aW5nIGEgZ2VuZXJhdG9yIG11dGF0ZXMgaXQuICcgKyAnWW91IG1heSBjb252ZXJ0IGl0IHRvIGFuIGFycmF5IHdpdGggYEFycmF5LmZyb20oKWAgb3IgdGhlICcgKyAnYFsuLi5zcHJlYWRdYCBvcGVyYXRvciBiZWZvcmUgcmVuZGVyaW5nLiBLZWVwIGluIG1pbmQgJyArICd5b3UgbWlnaHQgbmVlZCB0byBwb2x5ZmlsbCB0aGVzZSBmZWF0dXJlcyBmb3Igb2xkZXIgYnJvd3NlcnMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gdHJ1ZTtcbiAgICAgIH0gLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG5cblxuICAgICAgaWYgKG5ld0NoaWxkcmVuSXRlcmFibGUuZW50cmllcyA9PT0gaXRlcmF0b3JGbikge1xuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1hcHMpIHtcbiAgICAgICAgICBlcnJvcignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgIH0gLy8gRmlyc3QsIHZhbGlkYXRlIGtleXMuXG4gICAgICAvLyBXZSdsbCBnZXQgYSBkaWZmZXJlbnQgaXRlcmF0b3IgbGF0ZXIgZm9yIHRoZSBtYWluIHBhc3MuXG5cblxuICAgICAgdmFyIF9uZXdDaGlsZHJlbiA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgICAgaWYgKF9uZXdDaGlsZHJlbikge1xuICAgICAgICB2YXIga25vd25LZXlzID0gbnVsbDtcblxuICAgICAgICB2YXIgX3N0ZXAgPSBfbmV3Q2hpbGRyZW4ubmV4dCgpO1xuXG4gICAgICAgIGZvciAoOyAhX3N0ZXAuZG9uZTsgX3N0ZXAgPSBfbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAga25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmV3Q2hpbGRyZW4gPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICBpZiAoIShuZXdDaGlsZHJlbiAhPSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJBbiBpdGVyYWJsZSBvYmplY3QgcHJvdmlkZWQgbm8gaXRlcmF0b3IuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzTmV3RmliZXIgPSBudWxsO1xuICAgIHZhciBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgIHZhciBuZXdJZHggPSAwO1xuICAgIHZhciBuZXh0T2xkRmliZXIgPSBudWxsO1xuICAgIHZhciBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpO1xuXG4gICAgZm9yICg7IG9sZEZpYmVyICE9PSBudWxsICYmICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICBpZiAob2xkRmliZXIuaW5kZXggPiBuZXdJZHgpIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXI7XG4gICAgICAgIG9sZEZpYmVyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgIGlmIChuZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGJyZWFrcyBvbiBlbXB0eSBzbG90cyBsaWtlIG51bGwgY2hpbGRyZW4uIFRoYXQnc1xuICAgICAgICAvLyB1bmZvcnR1bmF0ZSBiZWNhdXNlIGl0IHRyaWdnZXJzIHRoZSBzbG93IHBhdGggYWxsIHRoZSB0aW1lLiBXZSBuZWVkXG4gICAgICAgIC8vIGEgYmV0dGVyIHdheSB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIHRoaXMgd2FzIGEgbWlzcyBvciBudWxsLFxuICAgICAgICAvLyBib29sZWFuLCB1bmRlZmluZWQsIGV0Yy5cbiAgICAgICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgaWYgKG9sZEZpYmVyICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIHNsb3QsIGJ1dCB3ZSBkaWRuJ3QgcmV1c2UgdGhlIGV4aXN0aW5nIGZpYmVyLCBzbyB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBjaGlsZC5cbiAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBEZWZlciBzaWJsaW5ncyBpZiB3ZSdyZSBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IGZvciB0aGlzIHNsb3QuXG4gICAgICAgIC8vIEkuZS4gaWYgd2UgaGFkIG51bGwgdmFsdWVzIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIGRlZmVyIHRoaXNcbiAgICAgICAgLy8gZm9yIGVhY2ggbnVsbCB2YWx1ZS4gSG93ZXZlciwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgdXBkYXRlU2xvdFxuICAgICAgICAvLyB3aXRoIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICB9XG5cbiAgICBpZiAoc3RlcC5kb25lKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgICB2YXIgX25ld0ZpYmVyMyA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKF9uZXdGaWJlcjMgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMywgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXIzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyMztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfSAvLyBBZGQgYWxsIGNoaWxkcmVuIHRvIGEga2V5IG1hcCBmb3IgcXVpY2sgbG9va3Vwcy5cblxuXG4gICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpOyAvLyBLZWVwIHNjYW5uaW5nIGFuZCB1c2UgdGhlIG1hcCB0byByZXN0b3JlIGRlbGV0ZWQgaXRlbXMgYXMgbW92ZXMuXG5cbiAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgIHZhciBfbmV3RmliZXI0ID0gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgIGlmIChfbmV3RmliZXI0ICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgaWYgKF9uZXdGaWJlcjQuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmV3IGZpYmVyIGlzIGEgd29yayBpbiBwcm9ncmVzcywgYnV0IGlmIHRoZXJlIGV4aXN0cyBhXG4gICAgICAgICAgICAvLyBjdXJyZW50LCB0aGF0IG1lYW5zIHRoYXQgd2UgcmV1c2VkIHRoZSBmaWJlci4gV2UgbmVlZCB0byBkZWxldGVcbiAgICAgICAgICAgIC8vIGl0IGZyb20gdGhlIGNoaWxkIGxpc3Qgc28gdGhhdCB3ZSBkb24ndCBhZGQgaXQgdG8gdGhlIGRlbGV0aW9uXG4gICAgICAgICAgICAvLyBsaXN0LlxuICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5kZWxldGUoX25ld0ZpYmVyNC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBfbmV3RmliZXI0LmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXI0LCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXI0O1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIEFueSBleGlzdGluZyBjaGlsZHJlbiB0aGF0IHdlcmVuJ3QgY29uc3VtZWQgYWJvdmUgd2VyZSBkZWxldGVkLiBXZSBuZWVkXG4gICAgICAvLyB0byBhZGQgdGhlbSB0byB0aGUgZGVsZXRpb24gbGlzdC5cbiAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgdGV4dENvbnRlbnQsIGxhbmVzKSB7XG4gICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIGNoZWNrIGZvciBrZXlzIG9uIHRleHQgbm9kZXMgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhXG4gICAgLy8gd2F5IHRvIGRlZmluZSB0aGVtLlxuICAgIGlmIChjdXJyZW50Rmlyc3RDaGlsZCAhPT0gbnVsbCAmJiBjdXJyZW50Rmlyc3RDaGlsZC50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZXhpc3Rpbmcgbm9kZSBzbyBsZXQncyBqdXN0IHVwZGF0ZSBpdCBhbmQgZGVsZXRlXG4gICAgICAvLyB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nKTtcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnRGaXJzdENoaWxkLCB0ZXh0Q29udGVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9IC8vIFRoZSBleGlzdGluZyBmaXJzdCBjaGlsZCBpcyBub3QgYSB0ZXh0IG5vZGUgc28gd2UgbmVlZCB0byBjcmVhdGUgb25lXG4gICAgLy8gYW5kIGRlbGV0ZSB0aGUgZXhpc3Rpbmcgb25lcy5cblxuXG4gICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQodGV4dENvbnRlbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIGVsZW1lbnQsIGxhbmVzKSB7XG4gICAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICAgIHZhciBjaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAvLyBUT0RPOiBJZiBrZXkgPT09IG51bGwgYW5kIGNoaWxkLmtleSA9PT0gbnVsbCwgdGhlbiB0aGlzIG9ubHkgYXBwbGllcyB0b1xuICAgICAgLy8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICBpZiAoY2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChjaGlsZC50YWcpIHtcbiAgICAgICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBlbGVtZW50LnByb3BzLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIEJsb2NrOlxuXG4gICAgICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSBmYWxsdGhyb3VnaCBoZXJlIGlmIGVuYWJsZUJsb2Nrc0FQSSBpcyBub3Qgb24uXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lZCBuby1mYWxsdGhyb3VnaFxuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGNoaWxkLmVsZW1lbnRUeXBlID09PSBlbGVtZW50LnR5cGUgfHwgKCAvLyBLZWVwIHRoaXMgY2hlY2sgaW5saW5lIHNvIGl0IG9ubHkgcnVucyBvbiB0aGUgZmFsc2UgcGF0aDpcbiAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjaGlsZCwgZWxlbWVudCkgKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcblxuICAgICAgICAgICAgICAgIHZhciBfZXhpc3RpbmczID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQucHJvcHMpO1xuXG4gICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGNoaWxkLCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBfZXhpc3RpbmczLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgICAgICAgICBfZXhpc3RpbmczLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9leGlzdGluZzM7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBEaWRuJ3QgbWF0Y2guXG5cblxuICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnQucHJvcHMuY2hpbGRyZW4sIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBlbGVtZW50LmtleSk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfY3JlYXRlZDQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgX2NyZWF0ZWQ0LnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIGVsZW1lbnQpO1xuICAgICAgX2NyZWF0ZWQ0LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIF9jcmVhdGVkNDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgdmFyIGtleSA9IHBvcnRhbC5rZXk7XG4gICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoY2hpbGQudGFnID09PSBIb3N0UG9ydGFsICYmIGNoaWxkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvID09PSBwb3J0YWwuY29udGFpbmVySW5mbyAmJiBjaGlsZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gPT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH0gLy8gVGhpcyBBUEkgd2lsbCB0YWcgdGhlIGNoaWxkcmVuIHdpdGggdGhlIHNpZGUtZWZmZWN0IG9mIHRoZSByZWNvbmNpbGlhdGlvblxuICAvLyBpdHNlbGYuIFRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGUgc2lkZS1lZmZlY3QgbGlzdCBhcyB3ZSBwYXNzIHRocm91Z2ggdGhlXG4gIC8vIGNoaWxkcmVuIGFuZCB0aGUgcGFyZW50LlxuXG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRGaWJlcnMocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZWN1cnNpdmUuXG4gICAgLy8gSWYgdGhlIHRvcCBsZXZlbCBpdGVtIGlzIGFuIGFycmF5LCB3ZSB0cmVhdCBpdCBhcyBhIHNldCBvZiBjaGlsZHJlbixcbiAgICAvLyBub3QgYXMgYSBmcmFnbWVudC4gTmVzdGVkIGFycmF5cyBvbiB0aGUgb3RoZXIgaGFuZCB3aWxsIGJlIHRyZWF0ZWQgYXNcbiAgICAvLyBmcmFnbWVudCBub2Rlcy4gUmVjdXJzaW9uIGhhcHBlbnMgYXQgdGhlIG5vcm1hbCBmbG93LlxuICAgIC8vIEhhbmRsZSB0b3AgbGV2ZWwgdW5rZXllZCBmcmFnbWVudHMgYXMgaWYgdGhleSB3ZXJlIGFycmF5cy5cbiAgICAvLyBUaGlzIGxlYWRzIHRvIGFuIGFtYmlndWl0eSBiZXR3ZWVuIDw+e1suLi5dfTwvPiBhbmQgPD4uLi48Lz4uXG4gICAgLy8gV2UgdHJlYXQgdGhlIGFtYmlndW91cyBjYXNlcyBhYm92ZSB0aGUgc2FtZS5cbiAgICB2YXIgaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCA9IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwgJiYgbmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSAmJiBuZXdDaGlsZC5rZXkgPT09IG51bGw7XG5cbiAgICBpZiAoaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCkge1xuICAgICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbjtcbiAgICB9IC8vIEhhbmRsZSBvYmplY3QgdHlwZXNcblxuXG4gICAgdmFyIGlzT2JqZWN0ID0gdHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbDtcblxuICAgIGlmIChpc09iamVjdCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSk7XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpKTtcblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgJycgKyBuZXdDaGlsZCwgbGFuZXMpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmIChnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCkge1xuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICd1bmRlZmluZWQnICYmICFpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50KSB7XG4gICAgICAvLyBJZiB0aGUgbmV3IGNoaWxkIGlzIHVuZGVmaW5lZCwgYW5kIHRoZSByZXR1cm4gZmliZXIgaXMgYSBjb21wb3NpdGVcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhyb3cgYW4gZXJyb3IuIElmIEZpYmVyIHJldHVybiB0eXBlcyBhcmUgZGlzYWJsZWQsXG4gICAgICAvLyB3ZSBhbHJlYWR5IHRocmV3IGFib3ZlLlxuICAgICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucmVuZGVyLl9pc01vY2tGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIC8vIFdlIGFsbG93IGF1dG8tbW9ja3MgdG8gcHJvY2VlZCBhcyBpZiB0aGV5J3JlIHJldHVybmluZyBudWxsLlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBjYXNlLCB3aGljaCBoYW5kbGVzIGJvdGhcbiAgICAgICAgLy8gZnVuY3Rpb25zIGFuZCBjbGFzc2VzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZWQgbm8tZmFsbHRocm91Z2hcblxuICAgICAgICBjYXNlIEJsb2NrOlxuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciggKGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpICsgXCIoLi4uKTogTm90aGluZyB3YXMgcmV0dXJuZWQgZnJvbSByZW5kZXIuIFRoaXMgdXN1YWxseSBtZWFucyBhIHJldHVybiBzdGF0ZW1lbnQgaXMgbWlzc2luZy4gT3IsIHRvIHJlbmRlciBub3RoaW5nLCByZXR1cm4gbnVsbC5cIiApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gUmVtYWluaW5nIGNhc2VzIGFyZSBhbGwgdHJlYXRlZCBhcyBlbXB0eS5cblxuXG4gICAgcmV0dXJuIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gIH1cblxuICByZXR1cm4gcmVjb25jaWxlQ2hpbGRGaWJlcnM7XG59XG5cbnZhciByZWNvbmNpbGVDaGlsZEZpYmVycyA9IENoaWxkUmVjb25jaWxlcih0cnVlKTtcbnZhciBtb3VudENoaWxkRmliZXJzID0gQ2hpbGRSZWNvbmNpbGVyKGZhbHNlKTtcbmZ1bmN0aW9uIGNsb25lQ2hpbGRGaWJlcnMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgaWYgKCEoY3VycmVudCA9PT0gbnVsbCB8fCB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gY3VycmVudC5jaGlsZCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZXN1bWluZyB3b3JrIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXCIgKTtcbiAgICB9XG4gIH1cblxuICBpZiAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY3VycmVudENoaWxkID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgY3VycmVudENoaWxkLnBlbmRpbmdQcm9wcyk7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG4gIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuXG4gIHdoaWxlIChjdXJyZW50Q2hpbGQuc2libGluZyAhPT0gbnVsbCkge1xuICAgIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnRDaGlsZC5zaWJsaW5nO1xuICAgIG5ld0NoaWxkID0gbmV3Q2hpbGQuc2libGluZyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgY3VycmVudENoaWxkLnBlbmRpbmdQcm9wcyk7XG4gICAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIH1cblxuICBuZXdDaGlsZC5zaWJsaW5nID0gbnVsbDtcbn0gLy8gUmVzZXQgYSB3b3JrSW5Qcm9ncmVzcyBjaGlsZCBzZXQgdG8gcHJlcGFyZSBpdCBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbGFuZXMpIHtcbiAgdmFyIGNoaWxkID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgcmVzZXRXb3JrSW5Qcm9ncmVzcyhjaGlsZCwgbGFuZXMpO1xuICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgfVxufVxuXG52YXIgTk9fQ09OVEVYVCA9IHt9O1xudmFyIGNvbnRleHRTdGFja0N1cnNvciQxID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xudmFyIGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xudmFyIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xuXG5mdW5jdGlvbiByZXF1aXJlZENvbnRleHQoYykge1xuICBpZiAoIShjICE9PSBOT19DT05URVhUKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGhvc3QgY29udGV4dCB0byBleGlzdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBnZXRSb290SG9zdENvbnRhaW5lcigpIHtcbiAgdmFyIHJvb3RJbnN0YW5jZSA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgcmV0dXJuIHJvb3RJbnN0YW5jZTtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RDb250YWluZXIoZmliZXIsIG5leHRSb290SW5zdGFuY2UpIHtcbiAgLy8gUHVzaCBjdXJyZW50IHJvb3QgaW5zdGFuY2Ugb250byB0aGUgc3RhY2s7XG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHJlc2V0IHJvb3Qgd2hlbiBwb3J0YWxzIGFyZSBwb3BwZWQuXG4gIHB1c2gocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIG5leHRSb290SW5zdGFuY2UsIGZpYmVyKTsgLy8gVHJhY2sgdGhlIGNvbnRleHQgYW5kIHRoZSBGaWJlciB0aGF0IHByb3ZpZGVkIGl0LlxuICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG5cbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTsgLy8gRmluYWxseSwgd2UgbmVlZCB0byBwdXNoIHRoZSBob3N0IGNvbnRleHQgdG8gdGhlIHN0YWNrLlxuICAvLyBIb3dldmVyLCB3ZSBjYW4ndCBqdXN0IGNhbGwgZ2V0Um9vdEhvc3RDb250ZXh0KCkgYW5kIHB1c2ggaXQgYmVjYXVzZVxuICAvLyB3ZSdkIGhhdmUgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGVudHJpZXMgb24gdGhlIHN0YWNrIGRlcGVuZGluZyBvblxuICAvLyB3aGV0aGVyIGdldFJvb3RIb3N0Q29udGV4dCgpIHRocm93cyBzb21ld2hlcmUgaW4gcmVuZGVyZXIgY29kZSBvciBub3QuXG4gIC8vIFNvIHdlIHB1c2ggYW4gZW1wdHkgdmFsdWUgZmlyc3QuIFRoaXMgbGV0cyB1cyBzYWZlbHkgdW53aW5kIG9uIGVycm9ycy5cblxuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBOT19DT05URVhULCBmaWJlcik7XG4gIHZhciBuZXh0Um9vdENvbnRleHQgPSBnZXRSb290SG9zdENvbnRleHQobmV4dFJvb3RJbnN0YW5jZSk7IC8vIE5vdyB0aGF0IHdlIGtub3cgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IHRocm93LCByZXBsYWNlIGl0LlxuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBuZXh0Um9vdENvbnRleHQsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcG9wSG9zdENvbnRhaW5lcihmaWJlcikge1xuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIHBvcChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBnZXRIb3N0Q29udGV4dCgpIHtcbiAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCk7XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdENvbnRleHQoZmliZXIpIHtcbiAgdmFyIHJvb3RJbnN0YW5jZSA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCk7XG4gIHZhciBuZXh0Q29udGV4dCA9IGdldENoaWxkSG9zdENvbnRleHQoY29udGV4dCwgZmliZXIudHlwZSk7IC8vIERvbid0IHB1c2ggdGhpcyBGaWJlcidzIGNvbnRleHQgdW5sZXNzIGl0J3MgdW5pcXVlLlxuXG4gIGlmIChjb250ZXh0ID09PSBuZXh0Q29udGV4dCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBwb3Agb25seSBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cblxuXG4gIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG5leHRDb250ZXh0LCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIC8vIERvIG5vdCBwb3AgdW5sZXNzIHRoaXMgRmliZXIgcHJvdmlkZWQgdGhlIGN1cnJlbnQgY29udGV4dC5cbiAgLy8gcHVzaEhvc3RDb250ZXh0KCkgb25seSBwdXNoZXMgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG4gIGlmIChjb250ZXh0RmliZXJTdGFja0N1cnNvci5jdXJyZW50ICE9PSBmaWJlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxudmFyIERlZmF1bHRTdXNwZW5zZUNvbnRleHQgPSAwOyAvLyBUaGUgU3VzcGVuc2UgQ29udGV4dCBpcyBzcGxpdCBpbnRvIHR3byBwYXJ0cy4gVGhlIGxvd2VyIGJpdHMgaXNcbi8vIGluaGVyaXRlZCBkZWVwbHkgZG93biB0aGUgc3VidHJlZS4gVGhlIHVwcGVyIGJpdHMgb25seSBhZmZlY3Rcbi8vIHRoaXMgaW1tZWRpYXRlIHN1c3BlbnNlIGJvdW5kYXJ5IGFuZCBnZXRzIHJlc2V0IGVhY2ggbmV3XG4vLyBib3VuZGFyeSBvciBzdXNwZW5zZSBsaXN0LlxuXG52YXIgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgPSAxOyAvLyBTdWJ0cmVlIEZsYWdzOlxuLy8gSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0IGluZGljYXRlcyB0aGF0IG9uZSBvZiBvdXIgcGFyZW50IFN1c3BlbnNlXG4vLyBib3VuZGFyaWVzIGlzIG5vdCBjdXJyZW50bHkgc2hvd2luZyB2aXNpYmxlIG1haW4gY29udGVudC5cbi8vIEVpdGhlciBiZWNhdXNlIGl0IGlzIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIG9yIGlzIG5vdCBtb3VudGVkIGF0IGFsbC5cbi8vIFdlIGNhbiB1c2UgdGhpcyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgZGVzaXJhYmxlIHRvIHRyaWdnZXIgYSBmYWxsYmFjayBhdFxuLy8gdGhlIHBhcmVudC4gSWYgbm90LCB0aGVuIHdlIG1pZ2h0IG5lZWQgdG8gdHJpZ2dlciB1bmRlc2lyYWJsZSBib3VuZGFyaWVzXG4vLyBhbmQvb3Igc3VzcGVuZCB0aGUgY29tbWl0IHRvIGF2b2lkIGhpZGluZyB0aGUgcGFyZW50IGNvbnRlbnQuXG5cbnZhciBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQgPSAxOyAvLyBTaGFsbG93IEZsYWdzOlxuLy8gRm9yY2VTdXNwZW5zZUZhbGxiYWNrIGNhbiBiZSB1c2VkIGJ5IFN1c3BlbnNlTGlzdCB0byBmb3JjZSBuZXdseSBhZGRlZFxuLy8gaXRlbXMgaW50byB0aGVpciBmYWxsYmFjayBzdGF0ZSBkdXJpbmcgb25lIG9mIHRoZSByZW5kZXIgcGFzc2VzLlxuXG52YXIgRm9yY2VTdXNwZW5zZUZhbGxiYWNrID0gMjtcbnZhciBzdXNwZW5zZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKERlZmF1bHRTdXNwZW5zZUNvbnRleHQpO1xuZnVuY3Rpb24gaGFzU3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIGZsYWcpIHtcbiAgcmV0dXJuIChwYXJlbnRDb250ZXh0ICYgZmxhZykgIT09IDA7XG59XG5mdW5jdGlvbiBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2s7XG59XG5mdW5jdGlvbiBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIHNoYWxsb3dDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgfCBzaGFsbG93Q29udGV4dDtcbn1cbmZ1bmN0aW9uIGFkZFN1YnRyZWVTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgc3VidHJlZUNvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgfCBzdWJ0cmVlQ29udGV4dDtcbn1cbmZ1bmN0aW9uIHB1c2hTdXNwZW5zZUNvbnRleHQoZmliZXIsIG5ld0NvbnRleHQpIHtcbiAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBuZXdDb250ZXh0LCBmaWJlcik7XG59XG5mdW5jdGlvbiBwb3BTdXNwZW5zZUNvbnRleHQoZmliZXIpIHtcbiAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQ2FwdHVyZVN1c3BlbnNlKHdvcmtJblByb2dyZXNzLCBoYXNJbnZpc2libGVQYXJlbnQpIHtcbiAgLy8gSWYgaXQgd2FzIHRoZSBwcmltYXJ5IGNoaWxkcmVuIHRoYXQganVzdCBzdXNwZW5kZWQsIGNhcHR1cmUgYW5kIHJlbmRlciB0aGVcbiAgLy8gZmFsbGJhY2suIE90aGVyd2lzZSwgZG9uJ3QgY2FwdHVyZSBhbmQgYnViYmxlIHRvIHRoZSBuZXh0IGJvdW5kYXJ5LlxuICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV4dFN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5leHRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGRlaHlkcmF0ZWQgYm91bmRhcnkgYWx3YXlzIGNhcHR1cmVzLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wczsgLy8gSW4gb3JkZXIgdG8gY2FwdHVyZSwgdGhlIFN1c3BlbnNlIGNvbXBvbmVudCBtdXN0IGhhdmUgYSBmYWxsYmFjayBwcm9wLlxuXG4gIGlmIChwcm9wcy5mYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFJlZ3VsYXIgYm91bmRhcmllcyBhbHdheXMgY2FwdHVyZS5cblxuXG4gIGlmIChwcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIElmIGl0J3MgYSBib3VuZGFyeSB3ZSBzaG91bGQgYXZvaWQsIHRoZW4gd2UgcHJlZmVyIHRvIGJ1YmJsZSB1cCB0byB0aGVcbiAgLy8gcGFyZW50IGJvdW5kYXJ5IGlmIGl0IGlzIGN1cnJlbnRseSBpbnZpc2libGUuXG5cblxuICBpZiAoaGFzSW52aXNpYmxlUGFyZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIHRoZSBwYXJlbnQgaXMgbm90IGFibGUgdG8gaGFuZGxlIGl0LCB3ZSBtdXN0IGhhbmRsZSBpdC5cblxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZmluZEZpcnN0U3VzcGVuZGVkKHJvdykge1xuICB2YXIgbm9kZSA9IHJvdztcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IG5vZGUubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBkZWh5ZHJhdGVkID0gc3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICBpZiAoZGVoeWRyYXRlZCA9PT0gbnVsbCB8fCBpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nKGRlaHlkcmF0ZWQpIHx8IGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKGRlaHlkcmF0ZWQpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQgJiYgLy8gcmV2ZWFsT3JkZXIgdW5kZWZpbmVkIGNhbid0IGJlIHRydXN0ZWQgYmVjYXVzZSBpdCBkb24ndFxuICAgIC8vIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBpdCBzdXNwZW5kZWQgb3Igbm90LlxuICAgIG5vZGUubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZGlkU3VzcGVuZCA9IChub2RlLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICAgIGlmIChkaWRTdXNwZW5kKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gcm93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHJvdykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBOb0ZsYWdzJDEgPVxuLyogICovXG4wOyAvLyBSZXByZXNlbnRzIHdoZXRoZXIgZWZmZWN0IHNob3VsZCBmaXJlLlxuXG52YXIgSGFzRWZmZWN0ID1cbi8qICovXG4xOyAvLyBSZXByZXNlbnRzIHRoZSBwaGFzZSBpbiB3aGljaCB0aGUgZWZmZWN0IChub3QgdGhlIGNsZWFuLXVwKSBmaXJlcy5cblxudmFyIExheW91dCA9XG4vKiAgICAqL1xuMjtcbnZhciBQYXNzaXZlJDEgPVxuLyogICAqL1xuNDtcblxuLy8gVGhpcyBtYXkgaGF2ZSBiZWVuIGFuIGluc2VydGlvbiBvciBhIGh5ZHJhdGlvbi5cblxudmFyIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbDtcbnZhciBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbDtcbnZhciBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBlbnRlckh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG5cbiAgdmFyIHBhcmVudEluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChwYXJlbnRJbnN0YW5jZSk7XG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShyZXR1cm5GaWJlciwgaW5zdGFuY2UpIHtcbiAge1xuICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICBkaWROb3RIeWRyYXRlQ29udGFpbmVySW5zdGFuY2UocmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sIGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgZGlkTm90SHlkcmF0ZUluc3RhbmNlKHJldHVybkZpYmVyLnR5cGUsIHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHMsIHJldHVybkZpYmVyLnN0YXRlTm9kZSwgaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGNyZWF0ZUZpYmVyRnJvbUhvc3RJbnN0YW5jZUZvckRlbGV0aW9uKCk7XG4gIGNoaWxkVG9EZWxldGUuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gIGNoaWxkVG9EZWxldGUucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gIGNoaWxkVG9EZWxldGUuZmxhZ3MgPSBEZWxldGlvbjsgLy8gVGhpcyBtaWdodCBzZWVtIGxpa2UgaXQgYmVsb25ncyBvbiBwcm9ncmVzc2VkRmlyc3REZWxldGlvbi4gSG93ZXZlcixcbiAgLy8gdGhlc2UgY2hpbGRyZW4gYXJlIG5vdCBwYXJ0IG9mIHRoZSByZWNvbmNpbGlhdGlvbiBsaXN0IG9mIGNoaWxkcmVuLlxuICAvLyBFdmVuIGlmIHdlIGFib3J0IGFuZCByZXJlY29uY2lsZSB0aGUgY2hpbGRyZW4sIHRoYXQgd2lsbCB0cnkgdG8gaHlkcmF0ZVxuICAvLyBhZ2FpbiBhbmQgdGhlIG5vZGVzIGFyZSBzdGlsbCBpbiB0aGUgaG9zdCB0cmVlIHNvIHRoZXNlIHdpbGwgYmVcbiAgLy8gcmVjcmVhdGVkLlxuXG4gIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UocmV0dXJuRmliZXIsIGZpYmVyKSB7XG4gIGZpYmVyLmZsYWdzID0gZmliZXIuZmxhZ3MgJiB+SHlkcmF0aW5nIHwgUGxhY2VtZW50O1xuXG4gIHtcbiAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBwYXJlbnRDb250YWluZXIgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgIHZhciB0eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgICAgICAgdmFyIHByb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lckluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdHlwZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB2YXIgdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHBhcmVudFR5cGUgPSByZXR1cm5GaWJlci50eXBlO1xuICAgICAgICAgIHZhciBwYXJlbnRQcm9wcyA9IHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgdmFyIHBhcmVudEluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgdmFyIF90eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgICAgICAgdmFyIF9wcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIF90eXBlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgICAgIHZhciBfdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBfdGV4dCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZVN1c3BlbnNlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkge1xuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICB2YXIgcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGNhbkh5ZHJhdGVJbnN0YW5jZShuZXh0SW5zdGFuY2UsIHR5cGUpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IGluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHRleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciB0ZXh0SW5zdGFuY2UgPSBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKG5leHRJbnN0YW5jZSwgdGV4dCk7XG5cbiAgICAgICAgaWYgKHRleHRJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IHRleHRJbnN0YW5jZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZShmaWJlcikge1xuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5leHRJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG5cbiAgaWYgKCFuZXh0SW5zdGFuY2UpIHtcbiAgICAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuICAgIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpYmVyKTtcbiAgICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UgPSBuZXh0SW5zdGFuY2U7XG5cbiAgaWYgKCF0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpKSB7XG4gICAgLy8gSWYgd2UgY2FuJ3QgaHlkcmF0ZSB0aGlzIGluc3RhbmNlIGxldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgLy8gV2UgdXNlIHRoaXMgYXMgYSBoZXVyaXN0aWMuIEl0J3MgYmFzZWQgb24gaW50dWl0aW9uIGFuZCBub3QgZGF0YSBzbyBpdFxuICAgIC8vIG1pZ2h0IGJlIGZsYXdlZCBvciB1bm5lY2Vzc2FyeS5cbiAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSk7XG5cbiAgICBpZiAoIW5leHRJbnN0YW5jZSB8fCAhdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSkge1xuICAgICAgLy8gTm90aGluZyB0byBoeWRyYXRlLiBNYWtlIGl0IGFuIGluc2VydGlvbi5cbiAgICAgIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpYmVyKTtcbiAgICAgIGlzSHlkcmF0aW5nID0gZmFsc2U7XG4gICAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2UgbWF0Y2hlZCB0aGUgbmV4dCBvbmUsIHdlJ2xsIG5vdyBhc3N1bWUgdGhhdCB0aGUgZmlyc3Qgb25lIHdhc1xuICAgIC8vIHN1cGVyZmx1b3VzIGFuZCB3ZSdsbCBkZWxldGUgaXQuIFNpbmNlIHdlIGNhbid0IGVhZ2VybHkgZGVsZXRlIGl0XG4gICAgLy8gd2UnbGwgaGF2ZSB0byBzY2hlZHVsZSBhIGRlbGV0aW9uLiBUbyBkbyB0aGF0LCB0aGlzIG5vZGUgbmVlZHMgYSBkdW1teVxuICAgIC8vIGZpYmVyIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuXG4gICAgZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcbiAgfVxuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChuZXh0SW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKGZpYmVyLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG5cbiAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB2YXIgdXBkYXRlUGF5bG9hZCA9IGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgZmliZXIudHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgZmliZXIpOyAvLyBUT0RPOiBUeXBlIHRoaXMgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGNvbXBvbmVudC5cblxuICBmaWJlci51cGRhdGVRdWV1ZSA9IHVwZGF0ZVBheWxvYWQ7IC8vIElmIHRoZSB1cGRhdGUgcGF5bG9hZCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIGNoYW5nZSBvciBpZiB0aGVyZVxuICAvLyBpcyBhIG5ldyByZWYgd2UgbWFyayB0aGlzIGFzIGFuIHVwZGF0ZS5cblxuICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZShmaWJlcikge1xuXG4gIHZhciB0ZXh0SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIHZhciB0ZXh0Q29udGVudCA9IGZpYmVyLm1lbW9pemVkUHJvcHM7XG4gIHZhciBzaG91bGRVcGRhdGUgPSBoeWRyYXRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQsIGZpYmVyKTtcblxuICB7XG4gICAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgcHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2UgaXMgY2FsbGVkIGluIGEgY29udGV4dCB3aGVyZSB0aGVcbiAgICAgIC8vIGh5ZHJhdGlvbiBwYXJlbnQgaXMgdGhlIHBhcmVudCBob3N0IGNvbXBvbmVudCBvZiB0aGlzIGhvc3QgdGV4dC5cbiAgICAgIHZhciByZXR1cm5GaWJlciA9IGh5ZHJhdGlvblBhcmVudEZpYmVyO1xuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50Q29udGFpbmVyID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICAgIGRpZE5vdE1hdGNoSHlkcmF0ZWRDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRUeXBlID0gcmV0dXJuRmliZXIudHlwZTtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgICAgdmFyIHBhcmVudEluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBkaWROb3RNYXRjaEh5ZHJhdGVkVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gc2tpcFBhc3REZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShmaWJlcikge1xuXG4gIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBzdXNwZW5zZVN0YXRlICE9PSBudWxsID8gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkIDogbnVsbDtcblxuICBpZiAoIXN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBoYXZlIGEgaHlkcmF0ZWQgc3VzcGVuc2UgaW5zdGFuY2UuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVyU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcikge1xuICB2YXIgcGFyZW50ID0gZmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwgJiYgcGFyZW50LnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiBwYXJlbnQudGFnICE9PSBIb3N0Um9vdCAmJiBwYXJlbnQudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cblxuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IHBhcmVudDtcbn1cblxuZnVuY3Rpb24gcG9wSHlkcmF0aW9uU3RhdGUoZmliZXIpIHtcblxuICBpZiAoZmliZXIgIT09IGh5ZHJhdGlvblBhcmVudEZpYmVyKSB7XG4gICAgLy8gV2UncmUgZGVlcGVyIHRoYW4gdGhlIGN1cnJlbnQgaHlkcmF0aW9uIGNvbnRleHQsIGluc2lkZSBhbiBpbnNlcnRlZFxuICAgIC8vIHRyZWUuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgIC8vIElmIHdlJ3JlIG5vdCBjdXJyZW50bHkgaHlkcmF0aW5nIGJ1dCB3ZSdyZSBpbiBhIGh5ZHJhdGlvbiBjb250ZXh0LCB0aGVuXG4gICAgLy8gd2Ugd2VyZSBhbiBpbnNlcnRpb24gYW5kIG5vdyBuZWVkIHRvIHBvcCB1cCByZWVudGVyIGh5ZHJhdGlvbiBvZiBvdXJcbiAgICAvLyBzaWJsaW5ncy5cbiAgICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcbiAgICBpc0h5ZHJhdGluZyA9IHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBmaWJlci50eXBlOyAvLyBJZiB3ZSBoYXZlIGFueSByZW1haW5pbmcgaHlkcmF0YWJsZSBub2Rlcywgd2UgbmVlZCB0byBkZWxldGUgdGhlbSBub3cuXG4gIC8vIFdlIG9ubHkgZG8gdGhpcyBkZWVwZXIgdGhhbiBoZWFkIGFuZCBib2R5IHNpbmNlIHRoZXkgdGVuZCB0byBoYXZlIHJhbmRvbVxuICAvLyBvdGhlciBub2RlcyBpbiB0aGVtLiBXZSBhbHNvIGlnbm9yZSBjb21wb25lbnRzIHdpdGggcHVyZSB0ZXh0IGNvbnRlbnQgaW5cbiAgLy8gc2lkZSBvZiB0aGVtLlxuICAvLyBUT0RPOiBCZXR0ZXIgaGV1cmlzdGljLlxuXG4gIGlmIChmaWJlci50YWcgIT09IEhvc3RDb21wb25lbnQgfHwgdHlwZSAhPT0gJ2hlYWQnICYmIHR5cGUgIT09ICdib2R5JyAmJiAhc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcykpIHtcbiAgICB2YXIgbmV4dEluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcblxuICAgIHdoaWxlIChuZXh0SW5zdGFuY2UpIHtcbiAgICAgIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShmaWJlciwgbmV4dEluc3RhbmNlKTtcbiAgICAgIG5leHRJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhuZXh0SW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuXG4gIGlmIChmaWJlci50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IHNraXBQYXN0RGVoeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpO1xuICB9IGVsc2Uge1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBoeWRyYXRpb25QYXJlbnRGaWJlciA/IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhmaWJlci5zdGF0ZU5vZGUpIDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXNldEh5ZHJhdGlvblN0YXRlKCkge1xuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbDtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG4gIGlzSHlkcmF0aW5nID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldElzSHlkcmF0aW5nKCkge1xuICByZXR1cm4gaXNIeWRyYXRpbmc7XG59XG5cbi8vIGFuZCBzaG91bGQgYmUgcmVzZXQgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IHJlbmRlci5cbi8vIFRoaXMgdHJhY2tzIHdoaWNoIG11dGFibGUgc291cmNlcyBuZWVkIHRvIGJlIHJlc2V0IGFmdGVyIGEgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NTb3VyY2VzID0gW107XG52YXIgcmVuZGVyZXJTaWdpbCQxO1xuXG57XG4gIC8vIFVzZWQgdG8gZGV0ZWN0IG11bHRpcGxlIHJlbmRlcmVycyB1c2luZyB0aGUgc2FtZSBtdXRhYmxlIHNvdXJjZS5cbiAgcmVuZGVyZXJTaWdpbCQxID0ge307XG59XG5cbmZ1bmN0aW9uIG1hcmtTb3VyY2VBc0RpcnR5KG11dGFibGVTb3VyY2UpIHtcbiAgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLnB1c2gobXV0YWJsZVNvdXJjZSk7XG59XG5mdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG11dGFibGVTb3VyY2UgPSB3b3JrSW5Qcm9ncmVzc1NvdXJjZXNbaV07XG5cbiAgICB7XG4gICAgICBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMubGVuZ3RoID0gMDtcbn1cbmZ1bmN0aW9uIGdldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlKSB7XG4gIHtcbiAgICByZXR1cm4gbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UsIHZlcnNpb24pIHtcbiAge1xuICAgIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnkgPSB2ZXJzaW9uO1xuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLnB1c2gobXV0YWJsZVNvdXJjZSk7XG59XG5mdW5jdGlvbiB3YXJuQWJvdXRNdWx0aXBsZVJlbmRlcmVyc0RFVihtdXRhYmxlU291cmNlKSB7XG4gIHtcbiAgICB7XG4gICAgICBpZiAobXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIG11dGFibGVTb3VyY2UuX2N1cnJlbnRQcmltYXJ5UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsJDE7XG4gICAgICB9IGVsc2UgaWYgKG11dGFibGVTb3VyY2UuX2N1cnJlbnRQcmltYXJ5UmVuZGVyZXIgIT09IHJlbmRlcmVyU2lnaWwkMSkge1xuICAgICAgICBlcnJvcignRGV0ZWN0ZWQgbXVsdGlwbGUgcmVuZGVyZXJzIGNvbmN1cnJlbnRseSByZW5kZXJpbmcgdGhlICcgKyAnc2FtZSBtdXRhYmxlIHNvdXJjZS4gVGhpcyBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIEVhZ2VyIHJlYWRzIHRoZSB2ZXJzaW9uIG9mIGEgbXV0YWJsZSBzb3VyY2UgYW5kIHN0b3JlcyBpdCBvbiB0aGUgcm9vdC5cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO1xudmFyIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyO1xuXG57XG4gIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXIgPSB7fTtcbiAgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xufVxuXG4vLyBUaGVzZSBhcmUgc2V0IHJpZ2h0IGJlZm9yZSBjYWxsaW5nIHRoZSBjb21wb25lbnQuXG52YXIgcmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci4gSSd2ZSBuYW1lZCBpdCBkaWZmZXJlbnRseSB0byBkaXN0aW5ndWlzaCBpdCBmcm9tXG4vLyB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7IC8vIEhvb2tzIGFyZSBzdG9yZWQgYXMgYSBsaW5rZWQgbGlzdCBvbiB0aGUgZmliZXIncyBtZW1vaXplZFN0YXRlIGZpZWxkLiBUaGVcbi8vIGN1cnJlbnQgaG9vayBsaXN0IGlzIHRoZSBsaXN0IHRoYXQgYmVsb25ncyB0byB0aGUgY3VycmVudCBmaWJlci4gVGhlXG4vLyB3b3JrLWluLXByb2dyZXNzIGhvb2sgbGlzdCBpcyBhIG5ldyBsaXN0IHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG5cbnZhciBjdXJyZW50SG9vayA9IG51bGw7XG52YXIgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDsgLy8gV2hldGhlciBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuIFRoaXNcbi8vIGRvZXMgbm90IGdldCByZXNldCBpZiB3ZSBkbyBhbm90aGVyIHJlbmRlciBwYXNzOyBvbmx5IHdoZW4gd2UncmUgY29tcGxldGVseVxuLy8gZmluaXNoZWQgZXZhbHVhdGluZyB0aGlzIGNvbXBvbmVudC4gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gd2Uga25vd1xuLy8gd2hldGhlciB3ZSBuZWVkIHRvIGNsZWFyIHJlbmRlciBwaGFzZSB1cGRhdGVzIGFmdGVyIGEgdGhyb3cuXG5cbnZhciBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7IC8vIFdoZXJlIGFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIG9ubHkgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciBwYXNzLiBUaGlzXG4vLyBnZXRzIHJlc2V0IGFmdGVyIGVhY2ggYXR0ZW1wdC5cbi8vIFRPRE86IE1heWJlIHRoZXJlJ3Mgc29tZSB3YXkgdG8gY29uc29saWRhdGUgdGhpcyB3aXRoXG4vLyBgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZWAuIE9yIHdpdGggYG51bWJlck9mUmVSZW5kZXJzYC5cblxudmFyIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xudmFyIFJFX1JFTkRFUl9MSU1JVCA9IDI1OyAvLyBJbiBERVYsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcHJpbWl0aXZlIGhvb2tcblxudmFyIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDsgLy8gSW4gREVWLCB0aGlzIGxpc3QgZW5zdXJlcyB0aGF0IGhvb2tzIGFyZSBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgYmV0d2VlbiByZW5kZXJzLlxuLy8gVGhlIGxpc3Qgc3RvcmVzIHRoZSBvcmRlciBvZiBob29rcyB1c2VkIGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXIgKG1vdW50KS5cbi8vIFN1YnNlcXVlbnQgcmVuZGVycyAodXBkYXRlcykgcmVmZXJlbmNlIHRoaXMgbGlzdC5cblxudmFyIGhvb2tUeXBlc0RldiA9IG51bGw7XG52YXIgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTsgLy8gSW4gREVWLCB0aGlzIHRyYWNrcyB3aGV0aGVyIGN1cnJlbnRseSByZW5kZXJpbmcgY29tcG9uZW50IG5lZWRzIHRvIGlnbm9yZVxuLy8gdGhlIGRlcGVuZGVuY2llcyBmb3IgSG9va3MgdGhhdCBuZWVkIHRoZW0gKGUuZy4gdXNlRWZmZWN0IG9yIHVzZU1lbW8pLlxuLy8gV2hlbiB0cnVlLCBzdWNoIEhvb2tzIHdpbGwgYWx3YXlzIGJlIFwicmVtb3VudGVkXCIuIE9ubHkgdXNlZCBkdXJpbmcgaG90IHJlbG9hZC5cblxudmFyIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIG1vdW50SG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ID09PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNEZXYgPSBbaG9va05hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBob29rVHlwZXNEZXYucHVzaChob29rTmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvb2tUeXBlc0RldigpIHtcbiAge1xuICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYrKztcblxuICAgICAgaWYgKGhvb2tUeXBlc0Rldltob29rVHlwZXNVcGRhdGVJbmRleERldl0gIT09IGhvb2tOYW1lKSB7XG4gICAgICAgIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGhvb2tOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcykge1xuICB7XG4gICAgaWYgKGRlcHMgIT09IHVuZGVmaW5lZCAmJiBkZXBzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGRlcHMpKSB7XG4gICAgICAvLyBWZXJpZnkgZGVwcywgYnV0IG9ubHkgb24gbW91bnQgdG8gYXZvaWQgZXh0cmEgY2hlY2tzLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGVpciB0eXBlIHdvdWxkIGNoYW5nZSBhcyB1c3VhbGx5IHlvdSBkZWZpbmUgdGhlbSBpbmxpbmUuXG4gICAgICBlcnJvcignJXMgcmVjZWl2ZWQgYSBmaW5hbCBhcmd1bWVudCB0aGF0IGlzIG5vdCBhbiBhcnJheSAoaW5zdGVhZCwgcmVjZWl2ZWQgYCVzYCkuIFdoZW4gJyArICdzcGVjaWZpZWQsIHRoZSBmaW5hbCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5LicsIGN1cnJlbnRIb29rTmFtZUluRGV2LCB0eXBlb2YgZGVwcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGN1cnJlbnRIb29rTmFtZSkge1xuICB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudHlwZSk7XG5cbiAgICBpZiAoIWRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgIGlmIChob29rVHlwZXNEZXYgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHRhYmxlID0gJyc7XG4gICAgICAgIHZhciBzZWNvbmRDb2x1bW5TdGFydCA9IDMwO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2OyBpKyspIHtcbiAgICAgICAgICB2YXIgb2xkSG9va05hbWUgPSBob29rVHlwZXNEZXZbaV07XG4gICAgICAgICAgdmFyIG5ld0hvb2tOYW1lID0gaSA9PT0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPyBjdXJyZW50SG9va05hbWUgOiBvbGRIb29rTmFtZTtcbiAgICAgICAgICB2YXIgcm93ID0gaSArIDEgKyBcIi4gXCIgKyBvbGRIb29rTmFtZTsgLy8gRXh0cmEgc3BhY2Ugc28gc2Vjb25kIGNvbHVtbiBsaW5lcyB1cFxuICAgICAgICAgIC8vIGxvbCBAIElFIG5vdCBzdXBwb3J0aW5nIFN0cmluZyNyZXBlYXRcblxuICAgICAgICAgIHdoaWxlIChyb3cubGVuZ3RoIDwgc2Vjb25kQ29sdW1uU3RhcnQpIHtcbiAgICAgICAgICAgIHJvdyArPSAnICc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcm93ICs9IG5ld0hvb2tOYW1lICsgJ1xcbic7XG4gICAgICAgICAgdGFibGUgKz0gcm93O1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3IoJ1JlYWN0IGhhcyBkZXRlY3RlZCBhIGNoYW5nZSBpbiB0aGUgb3JkZXIgb2YgSG9va3MgY2FsbGVkIGJ5ICVzLiAnICsgJ1RoaXMgd2lsbCBsZWFkIHRvIGJ1Z3MgYW5kIGVycm9ycyBpZiBub3QgZml4ZWQuICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgdGhlIFJ1bGVzIG9mIEhvb2tzOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3NcXG5cXG4nICsgJyAgIFByZXZpb3VzIHJlbmRlciAgICAgICAgICAgIE5leHQgcmVuZGVyXFxuJyArICcgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4nICsgJyVzJyArICcgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5cXG4nLCBjb21wb25lbnROYW1lLCB0YWJsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SW52YWxpZEhvb2tFcnJvcigpIHtcbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpIHtcbiAge1xuICAgIGlmIChpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcykge1xuICAgICAgLy8gT25seSB0cnVlIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgYmVpbmcgaG90IHJlbG9hZGVkLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcmV2RGVwcyA9PT0gbnVsbCkge1xuICAgIHtcbiAgICAgIGVycm9yKCclcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IGR1cmluZyB0aGlzIHJlbmRlciwgYnV0IG5vdCBkdXJpbmcgJyArICd0aGUgcHJldmlvdXMgcmVuZGVyLiBFdmVuIHRob3VnaCB0aGUgZmluYWwgYXJndW1lbnQgaXMgb3B0aW9uYWwsICcgKyAnaXRzIHR5cGUgY2Fubm90IGNoYW5nZSBiZXR3ZWVuIHJlbmRlcnMuJywgY3VycmVudEhvb2tOYW1lSW5EZXYpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHtcbiAgICAvLyBEb24ndCBib3RoZXIgY29tcGFyaW5nIGxlbmd0aHMgaW4gcHJvZCBiZWNhdXNlIHRoZXNlIGFycmF5cyBzaG91bGQgYmVcbiAgICAvLyBwYXNzZWQgaW5saW5lLlxuICAgIGlmIChuZXh0RGVwcy5sZW5ndGggIT09IHByZXZEZXBzLmxlbmd0aCkge1xuICAgICAgZXJyb3IoJ1RoZSBmaW5hbCBhcmd1bWVudCBwYXNzZWQgdG8gJXMgY2hhbmdlZCBzaXplIGJldHdlZW4gcmVuZGVycy4gVGhlICcgKyAnb3JkZXIgYW5kIHNpemUgb2YgdGhpcyBhcnJheSBtdXN0IHJlbWFpbiBjb25zdGFudC5cXG5cXG4nICsgJ1ByZXZpb3VzOiAlc1xcbicgKyAnSW5jb21pbmc6ICVzJywgY3VycmVudEhvb2tOYW1lSW5EZXYsIFwiW1wiICsgcHJldkRlcHMuam9pbignLCAnKSArIFwiXVwiLCBcIltcIiArIG5leHREZXBzLmpvaW4oJywgJykgKyBcIl1cIik7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2RGVwcy5sZW5ndGggJiYgaSA8IG5leHREZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG9iamVjdElzKG5leHREZXBzW2ldLCBwcmV2RGVwc1tpXSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIHNlY29uZEFyZywgbmV4dFJlbmRlckxhbmVzKSB7XG4gIHJlbmRlckxhbmVzID0gbmV4dFJlbmRlckxhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAge1xuICAgIGhvb2tUeXBlc0RldiA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcyA6IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTsgLy8gVXNlZCBmb3IgaG90IHJlbG9hZGluZzpcblxuICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnR5cGUgIT09IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlc2V0XG4gIC8vIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgLy8gd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgLy8gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICAvLyBUT0RPIFdhcm4gaWYgbm8gaG9va3MgYXJlIHVzZWQgYXQgYWxsIGR1cmluZyBtb3VudCwgdGhlbiBzb21lIGFyZSB1c2VkIGR1cmluZyB1cGRhdGUuXG4gIC8vIEN1cnJlbnRseSB3ZSB3aWxsIGlkZW50aWZ5IHRoZSB1cGRhdGUgcmVuZGVyIGFzIGEgbW91bnQgYmVjYXVzZSBtZW1vaXplZFN0YXRlID09PSBudWxsLlxuICAvLyBUaGlzIGlzIHRyaWNreSBiZWNhdXNlIGl0J3MgdmFsaWQgZm9yIGNlcnRhaW4gdHlwZXMgb2YgY29tcG9uZW50cyAoZS5nLiBSZWFjdC5sYXp5KVxuICAvLyBVc2luZyBtZW1vaXplZFN0YXRlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBtb3VudC91cGRhdGUgb25seSB3b3JrcyBpZiBhdCBsZWFzdCBvbmUgc3RhdGVmdWwgaG9vayBpcyB1c2VkLlxuICAvLyBOb24tc3RhdGVmdWwgaG9va3MgKGUuZy4gY29udGV4dCkgZG9uJ3QgZ2V0IGFkZGVkIHRvIG1lbW9pemVkU3RhdGUsXG4gIC8vIHNvIG1lbW9pemVkU3RhdGUgd291bGQgYmUgbnVsbCBkdXJpbmcgdXBkYXRlcyBhbmQgbW91bnRzLlxuXG4gIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICB9IGVsc2UgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBkaXNwYXRjaGVyIGhhbmRsZXMgYW4gZWRnZSBjYXNlIHdoZXJlIGEgY29tcG9uZW50IGlzIHVwZGF0aW5nLFxuICAgICAgLy8gYnV0IG5vIHN0YXRlZnVsIGhvb2tzIGhhdmUgYmVlbiB1c2VkLlxuICAgICAgLy8gV2Ugd2FudCB0byBtYXRjaCB0aGUgcHJvZHVjdGlvbiBjb2RlIGJlaGF2aW9yICh3aGljaCB3aWxsIHVzZSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50KSxcbiAgICAgIC8vIGJ1dCB3aXRoIHRoZSBleHRyYSBERVYgdmFsaWRhdGlvbiB0byBlbnN1cmUgaG9va3Mgb3JkZXJpbmcgaGFzbid0IGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIGRpc3BhdGNoZXIgZG9lcyB0aGF0LlxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICB9XG4gIH1cblxuICB2YXIgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7IC8vIENoZWNrIGlmIHRoZXJlIHdhcyBhIHJlbmRlciBwaGFzZSB1cGRhdGVcblxuICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzKSB7XG4gICAgLy8gS2VlcCByZW5kZXJpbmcgaW4gYSBsb29wIGZvciBhcyBsb25nIGFzIHJlbmRlciBwaGFzZSB1cGRhdGVzIGNvbnRpbnVlIHRvXG4gICAgLy8gYmUgc2NoZWR1bGVkLiBVc2UgYSBjb3VudGVyIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXG4gICAgdmFyIG51bWJlck9mUmVSZW5kZXJzID0gMDtcblxuICAgIGRvIHtcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xuXG4gICAgICBpZiAoIShudW1iZXJPZlJlUmVuZGVycyA8IFJFX1JFTkRFUl9MSU1JVCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRvbyBtYW55IHJlLXJlbmRlcnMuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHJlbmRlcnMgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbnVtYmVyT2ZSZVJlbmRlcnMgKz0gMTtcblxuICAgICAge1xuICAgICAgICAvLyBFdmVuIHdoZW4gaG90IHJlbG9hZGluZywgYWxsb3cgZGVwZW5kZW5jaWVzIHRvIHN0YWJpbGl6ZVxuICAgICAgICAvLyBhZnRlciBmaXJzdCByZW5kZXIgdG8gcHJldmVudCBpbmZpbml0ZSByZW5kZXIgcGhhc2UgdXBkYXRlcy5cbiAgICAgICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBmYWxzZTtcbiAgICAgIH0gLy8gU3RhcnQgb3ZlciBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3RcblxuXG4gICAgICBjdXJyZW50SG9vayA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gICAgICB7XG4gICAgICAgIC8vIEFsc28gdmFsaWRhdGUgaG9vayBvcmRlciBmb3IgY2FzY2FkaW5nIHVwZGF0ZXMuXG4gICAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgICB9XG5cbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA7XG4gICAgICBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTtcbiAgICB9IHdoaWxlIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpO1xuICB9IC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmN5LlxuXG5cbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGhvb2tUeXBlc0RldjtcbiAgfSAvLyBUaGlzIGNoZWNrIHVzZXMgY3VycmVudEhvb2sgc28gdGhhdCBpdCB3b3JrcyB0aGUgc2FtZSBpbiBERVYgYW5kIHByb2QgYnVuZGxlcy5cbiAgLy8gaG9va1R5cGVzRGV2IGNvdWxkIGNhdGNoIG1vcmUgY2FzZXMgKGUuZy4gY29udGV4dCkgYnV0IG9ubHkgaW4gREVWIGJ1bmRsZXMuXG5cblxuICB2YXIgZGlkUmVuZGVyVG9vRmV3SG9va3MgPSBjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBjdXJyZW50SG9vay5uZXh0ICE9PSBudWxsO1xuICByZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBjdXJyZW50SG9vayA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG5cbiAge1xuICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gIH1cblxuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG5cbiAgaWYgKCEhZGlkUmVuZGVyVG9vRmV3SG9va3MpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZW5kZXJlZCBmZXdlciBob29rcyB0aGFuIGV4cGVjdGVkLiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgYW4gYWNjaWRlbnRhbCBlYXJseSByZXR1cm4gc3RhdGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuZnVuY3Rpb24gYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH4oUGFzc2l2ZSB8IFVwZGF0ZSk7XG4gIGN1cnJlbnQubGFuZXMgPSByZW1vdmVMYW5lcyhjdXJyZW50LmxhbmVzLCBsYW5lcyk7XG59XG5mdW5jdGlvbiByZXNldEhvb2tzQWZ0ZXJUaHJvdygpIHtcbiAgLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY3kuXG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlKSB7XG4gICAgLy8gVGhlcmUgd2VyZSByZW5kZXIgcGhhc2UgdXBkYXRlcy4gVGhlc2UgYXJlIG9ubHkgdmFsaWQgZm9yIHRoaXMgcmVuZGVyXG4gICAgLy8gcGhhc2UsIHdoaWNoIHdlIGFyZSBub3cgYWJvcnRpbmcuIFJlbW92ZSB0aGUgdXBkYXRlcyBmcm9tIHRoZSBxdWV1ZXMgc29cbiAgICAvLyB0aGV5IGRvIG5vdCBwZXJzaXN0IHRvIHRoZSBuZXh0IHJlbmRlci4gRG8gbm90IHJlbW92ZSB1cGRhdGVzIGZyb20gaG9va3NcbiAgICAvLyB0aGF0IHdlcmVuJ3QgcHJvY2Vzc2VkLlxuICAgIC8vXG4gICAgLy8gT25seSByZXNldCB0aGUgdXBkYXRlcyBmcm9tIHRoZSBxdWV1ZSBpZiBpdCBoYXMgYSBjbG9uZS4gSWYgaXQgZG9lc1xuICAgIC8vIG5vdCBoYXZlIGEgY2xvbmUsIHRoYXQgbWVhbnMgaXQgd2Fzbid0IHByb2Nlc3NlZCwgYW5kIHRoZSB1cGRhdGVzIHdlcmVcbiAgICAvLyBzY2hlZHVsZWQgYmVmb3JlIHdlIGVudGVyZWQgdGhlIHJlbmRlciBwaGFzZS5cbiAgICB2YXIgaG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZTtcblxuICAgIHdoaWxlIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gICAgICBpZiAocXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGhvb2sgPSBob29rLm5leHQ7XG4gICAgfVxuXG4gICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgcmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcbiAgY3VycmVudEhvb2sgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuXG4gIHtcbiAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbiAgfVxuXG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgdmFyIGhvb2sgPSB7XG4gICAgbWVtb2l6ZWRTdGF0ZTogbnVsbCxcbiAgICBiYXNlU3RhdGU6IG51bGwsXG4gICAgYmFzZVF1ZXVlOiBudWxsLFxuICAgIHF1ZXVlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBpbiB0aGUgbGlzdFxuICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IGhvb2s7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IGhvb2s7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBib3RoIGZvciB1cGRhdGVzIGFuZCBmb3IgcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgYVxuICAvLyByZW5kZXIgcGhhc2UgdXBkYXRlLiBJdCBhc3N1bWVzIHRoZXJlIGlzIGVpdGhlciBhIGN1cnJlbnQgaG9vayB3ZSBjYW5cbiAgLy8gY2xvbmUsIG9yIGEgd29yay1pbi1wcm9ncmVzcyBob29rIGZyb20gYSBwcmV2aW91cyByZW5kZXIgcGFzcyB0aGF0IHdlIGNhblxuICAvLyB1c2UgYXMgYSBiYXNlLiBXaGVuIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGJhc2UgbGlzdCwgd2UgbXVzdCBzd2l0Y2ggdG9cbiAgLy8gdGhlIGRpc3BhdGNoZXIgdXNlZCBmb3IgbW91bnRzLlxuICB2YXIgbmV4dEN1cnJlbnRIb29rO1xuXG4gIGlmIChjdXJyZW50SG9vayA9PT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q3VycmVudEhvb2sgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50SG9vay5uZXh0O1xuICB9XG5cbiAgdmFyIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2s7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGU7XG4gIH0gZWxzZSB7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0O1xuICB9XG5cbiAgaWYgKG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgIT09IG51bGwpIHtcbiAgICAvLyBUaGVyZSdzIGFscmVhZHkgYSB3b3JrLWluLXByb2dyZXNzLiBSZXVzZSBpdC5cbiAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgICBjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vaztcbiAgfSBlbHNlIHtcbiAgICAvLyBDbG9uZSBmcm9tIHRoZSBjdXJyZW50IGhvb2suXG4gICAgaWYgKCEobmV4dEN1cnJlbnRIb29rICE9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJSZW5kZXJlZCBtb3JlIGhvb2tzIHRoYW4gZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vaztcbiAgICB2YXIgbmV3SG9vayA9IHtcbiAgICAgIG1lbW9pemVkU3RhdGU6IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICBiYXNlU3RhdGU6IGN1cnJlbnRIb29rLmJhc2VTdGF0ZSxcbiAgICAgIGJhc2VRdWV1ZTogY3VycmVudEhvb2suYmFzZVF1ZXVlLFxuICAgICAgcXVldWU6IGN1cnJlbnRIb29rLnF1ZXVlLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBob29rIGluIHRoZSBsaXN0LlxuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gbmV3SG9vaztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IG5ld0hvb2s7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBsYXN0RWZmZWN0OiBudWxsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJhc2ljU3RhdGVSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgLy8gJEZsb3dGaXhNZTogRmxvdyBkb2Vzbid0IGxpa2UgbWl4ZWQgdHlwZXNcbiAgcmV0dXJuIHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicgPyBhY3Rpb24oc3RhdGUpIDogYWN0aW9uO1xufVxuXG5mdW5jdGlvbiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBpbml0aWFsU3RhdGU7XG5cbiAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXQoaW5pdGlhbEFyZyk7XG4gIH0gZWxzZSB7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbEFyZztcbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlID0ge1xuICAgIHBlbmRpbmc6IG51bGwsXG4gICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogcmVkdWNlcixcbiAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gIH07XG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoID0gZGlzcGF0Y2hBY3Rpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBxdWV1ZSk7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gIGlmICghKHF1ZXVlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBoYXZlIGEgcXVldWUuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyO1xuICB2YXIgY3VycmVudCA9IGN1cnJlbnRIb29rOyAvLyBUaGUgbGFzdCByZWJhc2UgdXBkYXRlIHRoYXQgaXMgTk9UIHBhcnQgb2YgdGhlIGJhc2Ugc3RhdGUuXG5cbiAgdmFyIGJhc2VRdWV1ZSA9IGN1cnJlbnQuYmFzZVF1ZXVlOyAvLyBUaGUgbGFzdCBwZW5kaW5nIHVwZGF0ZSB0aGF0IGhhc24ndCBiZWVuIHByb2Nlc3NlZCB5ZXQuXG5cbiAgdmFyIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmdRdWV1ZSAhPT0gbnVsbCkge1xuICAgIC8vIFdlIGhhdmUgbmV3IHVwZGF0ZXMgdGhhdCBoYXZlbid0IGJlZW4gcHJvY2Vzc2VkIHlldC5cbiAgICAvLyBXZSdsbCBhZGQgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cbiAgICBpZiAoYmFzZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAvLyBNZXJnZSB0aGUgcGVuZGluZyBxdWV1ZSBhbmQgdGhlIGJhc2UgcXVldWUuXG4gICAgICB2YXIgYmFzZUZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgICB2YXIgcGVuZGluZ0ZpcnN0ID0gcGVuZGluZ1F1ZXVlLm5leHQ7XG4gICAgICBiYXNlUXVldWUubmV4dCA9IHBlbmRpbmdGaXJzdDtcbiAgICAgIHBlbmRpbmdRdWV1ZS5uZXh0ID0gYmFzZUZpcnN0O1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChjdXJyZW50LmJhc2VRdWV1ZSAhPT0gYmFzZVF1ZXVlKSB7XG4gICAgICAgIC8vIEludGVybmFsIGludmFyaWFudCB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBmZWFzaWJseSBjb3VsZCBpblxuICAgICAgICAvLyB0aGUgZnV0dXJlIGlmIHdlIGltcGxlbWVudCByZXN1bWluZywgb3Igc29tZSBmb3JtIG9mIHRoYXQuXG4gICAgICAgIGVycm9yKCdJbnRlcm5hbCBlcnJvcjogRXhwZWN0ZWQgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSB0byBiZSBhIGNsb25lLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudC5iYXNlUXVldWUgPSBiYXNlUXVldWUgPSBwZW5kaW5nUXVldWU7XG4gICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoYmFzZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gV2UgaGF2ZSBhIHF1ZXVlIHRvIHByb2Nlc3MuXG4gICAgdmFyIGZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgdmFyIG5ld1N0YXRlID0gY3VycmVudC5iYXNlU3RhdGU7XG4gICAgdmFyIG5ld0Jhc2VTdGF0ZSA9IG51bGw7XG4gICAgdmFyIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbnVsbDtcbiAgICB2YXIgbmV3QmFzZVF1ZXVlTGFzdCA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0O1xuXG4gICAgZG8ge1xuICAgICAgdmFyIHVwZGF0ZUxhbmUgPSB1cGRhdGUubGFuZTtcblxuICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmUpKSB7XG4gICAgICAgIC8vIFByaW9yaXR5IGlzIGluc3VmZmljaWVudC4gU2tpcCB0aGlzIHVwZGF0ZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3RcbiAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgIC8vIHVwZGF0ZS9zdGF0ZS5cbiAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgIGVhZ2VyUmVkdWNlcjogdXBkYXRlLmVhZ2VyUmVkdWNlcixcbiAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdCYXNlUXVldWVGaXJzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QgPSBjbG9uZTtcbiAgICAgICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gY2xvbmU7XG4gICAgICAgIH0gLy8gVXBkYXRlIHRoZSByZW1haW5pbmcgcHJpb3JpdHkgaW4gdGhlIHF1ZXVlLlxuICAgICAgICAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZVxuICAgICAgICAvLyByZW5kZXJMYW5lcyBmcm9tIHRoZSBvcmlnaW5hbCBsYW5lcy5cblxuXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgPSBtZXJnZUxhbmVzKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMsIHVwZGF0ZUxhbmUpO1xuICAgICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHVwZGF0ZUxhbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyB1cGRhdGUgZG9lcyBoYXZlIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGlzIGdvaW5nIHRvIGJlIGNvbW1pdHRlZCBzbyB3ZSBuZXZlciB3YW50IHVuY29tbWl0XG4gICAgICAgICAgICAvLyBpdC4gVXNpbmcgTm9MYW5lIHdvcmtzIGJlY2F1c2UgMCBpcyBhIHN1YnNldCBvZiBhbGwgYml0bWFza3MsIHNvXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgbmV2ZXIgYmUgc2tpcHBlZCBieSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICBsYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICBlYWdlclJlZHVjZXI6IHVwZGF0ZS5lYWdlclJlZHVjZXIsXG4gICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBfY2xvbmU7XG4gICAgICAgIH0gLy8gUHJvY2VzcyB0aGlzIHVwZGF0ZS5cblxuXG4gICAgICAgIGlmICh1cGRhdGUuZWFnZXJSZWR1Y2VyID09PSByZWR1Y2VyKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyB1cGRhdGUgd2FzIHByb2Nlc3NlZCBlYWdlcmx5LCBhbmQgaXRzIHJlZHVjZXIgbWF0Y2hlcyB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IHJlZHVjZXIsIHdlIGNhbiB1c2UgdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUuXG4gICAgICAgICAgbmV3U3RhdGUgPSB1cGRhdGUuZWFnZXJTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYWN0aW9uID0gdXBkYXRlLmFjdGlvbjtcbiAgICAgICAgICBuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsICYmIHVwZGF0ZSAhPT0gZmlyc3QpO1xuXG4gICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgPT09IG51bGwpIHtcbiAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBuZXdCYXNlUXVldWVGaXJzdDtcbiAgICB9IC8vIE1hcmsgdGhhdCB0aGUgZmliZXIgcGVyZm9ybWVkIHdvcmssIGJ1dCBvbmx5IGlmIHRoZSBuZXcgc3RhdGUgaXNcbiAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuXG4gICAgaWYgKCFvYmplY3RJcyhuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSkge1xuICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICB9XG5cbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICBob29rLmJhc2VTdGF0ZSA9IG5ld0Jhc2VTdGF0ZTtcbiAgICBob29rLmJhc2VRdWV1ZSA9IG5ld0Jhc2VRdWV1ZUxhc3Q7XG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gIGlmICghKHF1ZXVlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBoYXZlIGEgcXVldWUuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyOyAvLyBUaGlzIGlzIGEgcmUtcmVuZGVyLiBBcHBseSB0aGUgbmV3IHJlbmRlciBwaGFzZSB1cGRhdGVzIHRvIHRoZSBwcmV2aW91c1xuICAvLyB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2g7XG4gIHZhciBsYXN0UmVuZGVyUGhhc2VVcGRhdGUgPSBxdWV1ZS5wZW5kaW5nO1xuICB2YXIgbmV3U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSBxdWV1ZSBkb2Vzbid0IHBlcnNpc3QgcGFzdCB0aGlzIHJlbmRlciBwYXNzLlxuICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgIHZhciBmaXJzdFJlbmRlclBoYXNlVXBkYXRlID0gbGFzdFJlbmRlclBoYXNlVXBkYXRlLm5leHQ7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0UmVuZGVyUGhhc2VVcGRhdGU7XG5cbiAgICBkbyB7XG4gICAgICAvLyBQcm9jZXNzIHRoaXMgcmVuZGVyIHBoYXNlIHVwZGF0ZS4gV2UgZG9uJ3QgaGF2ZSB0byBjaGVjayB0aGVcbiAgICAgIC8vIHByaW9yaXR5IGJlY2F1c2UgaXQgd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnRcbiAgICAgIC8vIHJlbmRlcidzLlxuICAgICAgdmFyIGFjdGlvbiA9IHVwZGF0ZS5hY3Rpb247XG4gICAgICBuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIGFjdGlvbik7XG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlICh1cGRhdGUgIT09IGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUpOyAvLyBNYXJrIHRoYXQgdGhlIGZpYmVyIHBlcmZvcm1lZCB3b3JrLCBidXQgb25seSBpZiB0aGUgbmV3IHN0YXRlIGlzXG4gICAgLy8gZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUuXG5cblxuICAgIGlmICghb2JqZWN0SXMobmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkpIHtcbiAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7IC8vIERvbid0IHBlcnNpc3QgdGhlIHN0YXRlIGFjY3VtdWxhdGVkIGZyb20gdGhlIHJlbmRlciBwaGFzZSB1cGRhdGVzIHRvXG4gICAgLy8gdGhlIGJhc2Ugc3RhdGUgdW5sZXNzIHRoZSBxdWV1ZSBpcyBlbXB0eS5cbiAgICAvLyBUT0RPOiBOb3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSBkZXNpcmVkIHNlbWFudGljcywgYnV0IGl0J3Mgd2hhdCB3ZVxuICAgIC8vIGRvIGZvciBnRFNGUC4gSSBjYW4ndCByZW1lbWJlciB3aHkuXG5cbiAgICBpZiAoaG9vay5iYXNlUXVldWUgPT09IG51bGwpIHtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBbbmV3U3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCkge1xuICB7XG4gICAgd2FybkFib3V0TXVsdGlwbGVSZW5kZXJlcnNERVYoc291cmNlKTtcbiAgfVxuXG4gIHZhciBnZXRWZXJzaW9uID0gc291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24oc291cmNlLl9zb3VyY2UpOyAvLyBJcyBpdCBzYWZlIGZvciB0aGlzIGNvbXBvbmVudCB0byByZWFkIGZyb20gdGhpcyBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlcj9cblxuICB2YXIgaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSA9IGZhbHNlOyAvLyBDaGVjayB0aGUgdmVyc2lvbiBmaXJzdC5cbiAgLy8gSWYgdGhpcyByZW5kZXIgaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkIHdpdGggYSBzcGVjaWZpYyB2ZXJzaW9uLFxuICAvLyB3ZSBjYW4gdXNlIGl0IGFsb25lIHRvIGRldGVybWluZSBpZiB3ZSBjYW4gc2FmZWx5IHJlYWQgZnJvbSB0aGUgc291cmNlLlxuXG4gIHZhciBjdXJyZW50UmVuZGVyVmVyc2lvbiA9IGdldFdvcmtJblByb2dyZXNzVmVyc2lvbihzb3VyY2UpO1xuXG4gIGlmIChjdXJyZW50UmVuZGVyVmVyc2lvbiAhPT0gbnVsbCkge1xuICAgIC8vIEl0J3Mgc2FmZSB0byByZWFkIGlmIHRoZSBzdG9yZSBoYXNuJ3QgYmVlbiBtdXRhdGVkIHNpbmNlIHRoZSBsYXN0IHRpbWVcbiAgICAvLyB3ZSByZWFkIHNvbWV0aGluZy5cbiAgICBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gY3VycmVudFJlbmRlclZlcnNpb24gPT09IHZlcnNpb247XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlcmUncyBubyB2ZXJzaW9uLCB0aGVuIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgcmVhZCBmcm9tIHRoZVxuICAgIC8vIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MsIHNvIHdlIG5lZWQgdG8gZG8gYSBiaXQgbW9yZSB3b3JrLlxuICAgIC8vIFdoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaXMgaWYgdGhlcmUgYXJlIGFueSBob29rcyB0aGF0IGFscmVhZHlcbiAgICAvLyBzdWJzY3JpYmVkIHRvIHRoZSBzb3VyY2UsIGFuZCBpZiBzbywgd2hldGhlciB0aGVyZSBhcmUgYW55IHBlbmRpbmdcbiAgICAvLyBtdXRhdGlvbnMgdGhhdCBoYXZlbid0IGJlZW4gc3luY2hyb25pemVkIHlldC5cbiAgICAvL1xuICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIG11dGF0aW9ucywgdGhlbiBgcm9vdC5tdXRhYmxlUmVhZExhbmVzYCB3aWxsIGJlXG4gICAgLy8gZW1wdHksIGFuZCB3ZSBrbm93IHdlIGNhbiBzYWZlbHkgcmVhZC5cbiAgICAvL1xuICAgIC8vIElmIHRoZXJlICphcmUqIHBlbmRpbmcgbXV0YXRpb25zLCB3ZSBtYXkgc3RpbGwgYmUgYWJsZSB0byBzYWZlbHkgcmVhZFxuICAgIC8vIGlmIHRoZSBjdXJyZW50bHkgcmVuZGVyaW5nIGxhbmVzIGFyZSBpbmNsdXNpdmUgb2YgdGhlIHBlbmRpbmcgbXV0YXRpb25cbiAgICAvLyBsYW5lcywgc2luY2UgdGhhdCBndWFyYW50ZWVzIHRoYXQgdGhlIHZhbHVlIHdlJ3JlIGFib3V0IHRvIHJlYWQgZnJvbVxuICAgIC8vIHRoZSBzb3VyY2UgaXMgY29uc2lzdGVudCB3aXRoIHRoZSB2YWx1ZXMgdGhhdCB3ZSByZWFkIGR1cmluZyB0aGUgbW9zdFxuICAgIC8vIHJlY2VudCBtdXRhdGlvbi5cbiAgICBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCByb290Lm11dGFibGVSZWFkTGFuZXMpO1xuXG4gICAgaWYgKGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UpIHtcbiAgICAgIC8vIElmIGl0J3Mgc2FmZSB0byByZWFkIGZyb20gdGhpcyBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlcixcbiAgICAgIC8vIHN0b3JlIHRoZSB2ZXJzaW9uIGluIGNhc2Ugb3RoZXIgY29tcG9uZW50cyByZWFkIGZyb20gaXQuXG4gICAgICAvLyBBIGNoYW5nZWQgdmVyc2lvbiBudW1iZXIgd2lsbCBsZXQgdGhvc2UgY29tcG9uZW50cyBrbm93IHRvIHRocm93IGFuZCByZXN0YXJ0IHRoZSByZW5kZXIuXG4gICAgICBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24oc291cmNlLCB2ZXJzaW9uKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSkge1xuICAgIHZhciBzbmFwc2hvdCA9IGdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKTtcblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2Ygc25hcHNob3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHNob3VsZCBub3QgcmV0dXJuIGEgZnVuY3Rpb24gYXMgdGhlIHNuYXBzaG90IHZhbHVlLiAnICsgJ0Z1bmN0aW9ucyBtYXkgY2xvc2Ugb3ZlciBtdXRhYmxlIHZhbHVlcyBhbmQgY2F1c2UgdGVhcmluZy4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc25hcHNob3Q7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSBtdXRhYmxlIHNvdXJjZSBiZWluZyBzaGFyZWQgYmV0d2VlbiByZW5kZXJlcnMuXG4gICAgLy8gSW4gdGhhdCBjYXNlLCBpZiB0aGUgc291cmNlIGlzIG11dGF0ZWQgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHNlY29uZCByZW5kZXJlcixcbiAgICAvLyBUaGUgc2Vjb25kIHJlbmRlcmVyIGRvbid0IGtub3cgdGhhdCBpdCBuZWVkcyB0byByZXNldCB0aGUgV0lQIHZlcnNpb24gZHVyaW5nIHVud2luZCxcbiAgICAvLyAoYmVjYXVzZSB0aGUgaG9vayBvbmx5IG1hcmtzIHNvdXJjZXMgYXMgZGlydHkgaWYgaXQncyB3cml0dGVuIHRvIHRoZWlyIFdJUCB2ZXJzaW9uKS5cbiAgICAvLyBUaGF0IHdvdWxkIGNhdXNlIHRoaXMgdGVhciBjaGVjayB0byB0aHJvdyBhZ2FpbiBhbmQgZXZlbnR1YWxseSBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyLlxuICAgIC8vIFdlIGNhbiBhdm9pZCB0aGlzIGluZmluaXRlIGxvb3AgYnkgZXhwbGljaXRseSBtYXJraW5nIHRoZSBzb3VyY2UgYXMgZGlydHkuXG4gICAgLy9cbiAgICAvLyBUaGlzIGNhbiBsZWFkIHRvIHRlYXJpbmcgaW4gdGhlIGZpcnN0IHJlbmRlcmVyIHdoZW4gaXQgcmVzdW1lcyxcbiAgICAvLyBidXQgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCB0aGF0IChzaG9ydCBvZiB0aHJvd2luZyBoZXJlIGFuZCByZWZ1c2luZyB0byBjb250aW51ZSB0aGUgcmVuZGVyKS5cbiAgICBtYXJrU291cmNlQXNEaXJ0eShzb3VyY2UpO1xuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgcmVhZCBmcm9tIG11dGFibGUgc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgd2l0aG91dCB0ZWFyaW5nLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICB2YXIgcm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuXG4gIGlmICghKHJvb3QgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgYSB3b3JrLWluLXByb2dyZXNzIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGdldFZlcnNpb24gPSBzb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcblxuICB2YXIgX2Rpc3BhdGNoZXIkdXNlU3RhdGUgPSBkaXNwYXRjaGVyLnVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCk7XG4gIH0pLFxuICAgICAgY3VycmVudFNuYXBzaG90ID0gX2Rpc3BhdGNoZXIkdXNlU3RhdGVbMF0sXG4gICAgICBzZXRTbmFwc2hvdCA9IF9kaXNwYXRjaGVyJHVzZVN0YXRlWzFdO1xuXG4gIHZhciBzbmFwc2hvdCA9IGN1cnJlbnRTbmFwc2hvdDsgLy8gR3JhYiBhIGhhbmRsZSB0byB0aGUgc3RhdGUgaG9vayBhcyB3ZWxsLlxuICAvLyBXZSB1c2UgaXQgdG8gY2xlYXIgdGhlIHBlbmRpbmcgdXBkYXRlIHF1ZXVlIGlmIHdlIGhhdmUgYSBuZXcgc291cmNlLlxuXG4gIHZhciBzdGF0ZUhvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2s7XG4gIHZhciBtZW1vaXplZFN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICB2YXIgcmVmcyA9IG1lbW9pemVkU3RhdGUucmVmcztcbiAgdmFyIHByZXZHZXRTbmFwc2hvdCA9IHJlZnMuZ2V0U25hcHNob3Q7XG4gIHZhciBwcmV2U291cmNlID0gbWVtb2l6ZWRTdGF0ZS5zb3VyY2U7XG4gIHZhciBwcmV2U3Vic2NyaWJlID0gbWVtb2l6ZWRTdGF0ZS5zdWJzY3JpYmU7XG4gIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICByZWZzOiByZWZzLFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlXG4gIH07IC8vIFN5bmMgdGhlIHZhbHVlcyBuZWVkZWQgYnkgb3VyIHN1YnNjcmlwdGlvbiBoYW5kbGVyIGFmdGVyIGVhY2ggY29tbWl0LlxuXG4gIGRpc3BhdGNoZXIudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZWZzLmdldFNuYXBzaG90ID0gZ2V0U25hcHNob3Q7IC8vIE5vcm1hbGx5IHRoZSBkaXNwYXRjaCBmdW5jdGlvbiBmb3IgYSBzdGF0ZSBob29rIG5ldmVyIGNoYW5nZXMsXG4gICAgLy8gYnV0IHRoaXMgaG9vayByZWNyZWF0ZXMgdGhlIHF1ZXVlIGluIGNlcnRhaW4gY2FzZXMgIHRvIGF2b2lkIHVwZGF0ZXMgZnJvbSBzdGFsZSBzb3VyY2VzLlxuICAgIC8vIGhhbmRsZUNoYW5nZSgpIGJlbG93IG5lZWRzIHRvIHJlZmVyZW5jZSB0aGUgZGlzcGF0Y2ggZnVuY3Rpb24gd2l0aG91dCByZS1zdWJzY3JpYmluZyxcbiAgICAvLyBzbyB3ZSB1c2UgYSByZWYgdG8gZW5zdXJlIHRoYXQgaXQgYWx3YXlzIGhhcyB0aGUgbGF0ZXN0IHZlcnNpb24uXG5cbiAgICByZWZzLnNldFNuYXBzaG90ID0gc2V0U25hcHNob3Q7IC8vIENoZWNrIGZvciBhIHBvc3NpYmxlIGNoYW5nZSBiZXR3ZWVuIHdoZW4gd2UgbGFzdCByZW5kZXJlZCBub3cuXG5cbiAgICB2YXIgbWF5YmVOZXdWZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICBpZiAoIW9iamVjdElzKHZlcnNpb24sIG1heWJlTmV3VmVyc2lvbikpIHtcbiAgICAgIHZhciBtYXliZU5ld1NuYXBzaG90ID0gZ2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpO1xuXG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgbWF5YmVOZXdTbmFwc2hvdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzaG91bGQgbm90IHJldHVybiBhIGZ1bmN0aW9uIGFzIHRoZSBzbmFwc2hvdCB2YWx1ZS4gJyArICdGdW5jdGlvbnMgbWF5IGNsb3NlIG92ZXIgbXV0YWJsZSB2YWx1ZXMgYW5kIGNhdXNlIHRlYXJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFvYmplY3RJcyhzbmFwc2hvdCwgbWF5YmVOZXdTbmFwc2hvdCkpIHtcbiAgICAgICAgc2V0U25hcHNob3QobWF5YmVOZXdTbmFwc2hvdCk7XG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgICBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIGxhbmUpO1xuICAgICAgfSAvLyBJZiB0aGUgc291cmNlIG11dGF0ZWQgYmV0d2VlbiByZW5kZXIgYW5kIG5vdyxcbiAgICAgIC8vIHRoZXJlIG1heSBiZSBzdGF0ZSB1cGRhdGVzIGFscmVhZHkgc2NoZWR1bGVkIGZyb20gdGhlIG9sZCBzb3VyY2UuXG4gICAgICAvLyBFbnRhbmdsZSB0aGUgdXBkYXRlcyBzbyB0aGF0IHRoZXkgcmVuZGVyIGluIHRoZSBzYW1lIGJhdGNoLlxuXG5cbiAgICAgIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIHJvb3QubXV0YWJsZVJlYWRMYW5lcyk7XG4gICAgfVxuICB9LCBbZ2V0U25hcHNob3QsIHNvdXJjZSwgc3Vic2NyaWJlXSk7IC8vIElmIHdlIGdvdCBhIG5ldyBzb3VyY2Ugb3Igc3Vic2NyaWJlIGZ1bmN0aW9uLCByZS1zdWJzY3JpYmUgaW4gYSBwYXNzaXZlIGVmZmVjdC5cblxuICBkaXNwYXRjaGVyLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBsYXRlc3RHZXRTbmFwc2hvdCA9IHJlZnMuZ2V0U25hcHNob3Q7XG4gICAgICB2YXIgbGF0ZXN0U2V0U25hcHNob3QgPSByZWZzLnNldFNuYXBzaG90O1xuXG4gICAgICB0cnkge1xuICAgICAgICBsYXRlc3RTZXRTbmFwc2hvdChsYXRlc3RHZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSkpOyAvLyBSZWNvcmQgYSBwZW5kaW5nIG11dGFibGUgc291cmNlIHVwZGF0ZSB3aXRoIHRoZSBzYW1lIGV4cGlyYXRpb24gdGltZS5cblxuICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgICAgbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCBsYW5lKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEEgc2VsZWN0b3IgbWlnaHQgdGhyb3cgYWZ0ZXIgYSBzb3VyY2UgbXV0YXRpb24uXG4gICAgICAgIC8vIGUuZy4gaXQgbWlnaHQgdHJ5IHRvIHJlYWQgZnJvbSBhIHBhcnQgb2YgdGhlIHN0b3JlIHRoYXQgbm8gbG9uZ2VyIGV4aXN0cy5cbiAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBzdGlsbCBzY2hlZHVsZSBhbiB1cGRhdGUgd2l0aCBSZWFjdC5cbiAgICAgICAgLy8gV29yc3QgY2FzZSB0aGUgc2VsZWN0b3Igd2lsbCB0aHJvdyBhZ2FpbiBhbmQgdGhlbiBhbiBlcnJvciBib3VuZGFyeSB3aWxsIGhhbmRsZSBpdC5cbiAgICAgICAgbGF0ZXN0U2V0U25hcHNob3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIHVuc3Vic2NyaWJlID0gc3Vic2NyaWJlKHNvdXJjZS5fc291cmNlLCBoYW5kbGVDaGFuZ2UpO1xuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiB1bnN1YnNjcmliZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc3Vic2NyaWJlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGFuIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgfSwgW3NvdXJjZSwgc3Vic2NyaWJlXSk7IC8vIElmIGFueSBvZiB0aGUgaW5wdXRzIHRvIHVzZU11dGFibGVTb3VyY2UgY2hhbmdlLCByZWFkaW5nIGlzIHBvdGVudGlhbGx5IHVuc2FmZS5cbiAgLy9cbiAgLy8gSWYgZWl0aGVyIHRoZSBzb3VyY2Ugb3IgdGhlIHN1YnNjcmlwdGlvbiBoYXZlIGNoYW5nZWQgd2UgY2FuJ3QgY2FuJ3QgdHJ1c3QgdGhlIHVwZGF0ZSBxdWV1ZS5cbiAgLy8gTWF5YmUgdGhlIHNvdXJjZSBjaGFuZ2VkIGluIGEgd2F5IHRoYXQgdGhlIG9sZCBzdWJzY3JpcHRpb24gaWdub3JlZCBidXQgdGhlIG5ldyBvbmUgZGVwZW5kcyBvbi5cbiAgLy9cbiAgLy8gSWYgdGhlIGdldFNuYXBzaG90IGZ1bmN0aW9uIGNoYW5nZWQsIHdlIGFsc28gc2hvdWxkbid0IHJlbHkgb24gdGhlIHVwZGF0ZSBxdWV1ZS5cbiAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSB1bmRlcmx5aW5nIHNvdXJjZSB3YXMgbXV0YXRlZCBiZXR3ZWVuIHRoZSB3aGVuIHRoZSBsYXN0IFwiY2hhbmdlXCIgZXZlbnQgZmlyZWQsXG4gIC8vIGFuZCB3aGVuIHRoZSBjdXJyZW50IHJlbmRlciAod2l0aCB0aGUgbmV3IGdldFNuYXBzaG90IGZ1bmN0aW9uKSBpcyBwcm9jZXNzZWQuXG4gIC8vXG4gIC8vIEluIGJvdGggY2FzZXMsIHdlIG5lZWQgdG8gdGhyb3cgYXdheSBwZW5kaW5nIHVwZGF0ZXMgKHNpbmNlIHRoZXkgYXJlIG5vIGxvbmdlciByZWxldmFudClcbiAgLy8gYW5kIHRyZWF0IHJlYWRpbmcgZnJvbSB0aGUgc291cmNlIGFzIHdlIGRvIGluIHRoZSBtb3VudCBjYXNlLlxuXG4gIGlmICghb2JqZWN0SXMocHJldkdldFNuYXBzaG90LCBnZXRTbmFwc2hvdCkgfHwgIW9iamVjdElzKHByZXZTb3VyY2UsIHNvdXJjZSkgfHwgIW9iamVjdElzKHByZXZTdWJzY3JpYmUsIHN1YnNjcmliZSkpIHtcbiAgICAvLyBDcmVhdGUgYSBuZXcgcXVldWUgYW5kIHNldFN0YXRlIG1ldGhvZCxcbiAgICAvLyBTbyBpZiB0aGVyZSBhcmUgaW50ZXJsZWF2ZWQgdXBkYXRlcywgdGhleSBnZXQgcHVzaGVkIHRvIHRoZSBvbGRlciBxdWV1ZS5cbiAgICAvLyBXaGVuIHRoaXMgYmVjb21lcyBjdXJyZW50LCB0aGUgcHJldmlvdXMgcXVldWUgYW5kIGRpc3BhdGNoIG1ldGhvZCB3aWxsIGJlIGRpc2NhcmRlZCxcbiAgICAvLyBpbmNsdWRpbmcgYW55IGludGVybGVhdmluZyB1cGRhdGVzIHRoYXQgb2NjdXIuXG4gICAgdmFyIG5ld1F1ZXVlID0ge1xuICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogc25hcHNob3RcbiAgICB9O1xuICAgIG5ld1F1ZXVlLmRpc3BhdGNoID0gc2V0U25hcHNob3QgPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIG5ld1F1ZXVlKTtcbiAgICBzdGF0ZUhvb2sucXVldWUgPSBuZXdRdWV1ZTtcbiAgICBzdGF0ZUhvb2suYmFzZVF1ZXVlID0gbnVsbDtcbiAgICBzbmFwc2hvdCA9IHJlYWRGcm9tVW5zdWJjcmliZWRNdXRhYmxlU291cmNlKHJvb3QsIHNvdXJjZSwgZ2V0U25hcHNob3QpO1xuICAgIHN0YXRlSG9vay5tZW1vaXplZFN0YXRlID0gc3RhdGVIb29rLmJhc2VTdGF0ZSA9IHNuYXBzaG90O1xuICB9XG5cbiAgcmV0dXJuIHNuYXBzaG90O1xufVxuXG5mdW5jdGlvbiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0ge1xuICAgIHJlZnM6IHtcbiAgICAgIGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCxcbiAgICAgIHNldFNuYXBzaG90OiBudWxsXG4gICAgfSxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdWJzY3JpYmU6IHN1YnNjcmliZVxuICB9O1xuICByZXR1cm4gdXNlTXV0YWJsZVNvdXJjZShob29rLCBzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICByZXR1cm4gdXNlTXV0YWJsZVNvdXJjZShob29rLCBzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xufVxuXG5mdW5jdGlvbiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG5cbiAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWUgPSB7XG4gICAgcGVuZGluZzogbnVsbCxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gIH07XG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoID0gZGlzcGF0Y2hBY3Rpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBxdWV1ZSk7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICByZXR1cm4gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHJldHVybiByZXJlbmRlclJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xufVxuXG5mdW5jdGlvbiBwdXNoRWZmZWN0KHRhZywgY3JlYXRlLCBkZXN0cm95LCBkZXBzKSB7XG4gIHZhciBlZmZlY3QgPSB7XG4gICAgdGFnOiB0YWcsXG4gICAgY3JlYXRlOiBjcmVhdGUsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICBkZXBzOiBkZXBzLFxuICAgIC8vIENpcmN1bGFyXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICB2YXIgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmIChjb21wb25lbnRVcGRhdGVRdWV1ZSA9PT0gbnVsbCkge1xuICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpO1xuICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWUgPSBjb21wb25lbnRVcGRhdGVRdWV1ZTtcbiAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxhc3RFZmZlY3QgPSBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgbGFzdEVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgICAgZWZmZWN0Lm5leHQgPSBmaXJzdEVmZmVjdDtcbiAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3Q7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVmZmVjdDtcbn1cblxuZnVuY3Rpb24gbW91bnRSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHJlZiA9IHtcbiAgICBjdXJyZW50OiBpbml0aWFsVmFsdWVcbiAgfTtcblxuICB7XG4gICAgT2JqZWN0LnNlYWwocmVmKTtcbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHJlZjtcbiAgcmV0dXJuIHJlZjtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICByZXR1cm4gaG9vay5tZW1vaXplZFN0YXRlO1xufVxuXG5mdW5jdGlvbiBtb3VudEVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IGhvb2tGbGFncywgY3JlYXRlLCB1bmRlZmluZWQsIG5leHREZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIGRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGN1cnJlbnRIb29rICE9PSBudWxsKSB7XG4gICAgdmFyIHByZXZFZmZlY3QgPSBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlO1xuICAgIGRlc3Ryb3kgPSBwcmV2RWZmZWN0LmRlc3Ryb3k7XG5cbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZFZmZlY3QuZGVwcztcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHB1c2hFZmZlY3QoaG9va0ZsYWdzLCBjcmVhdGUsIGRlc3Ryb3ksIG5leHREZXBzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gZmliZXJGbGFncztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVzdHJveSwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdFZmZlY3RzSW5ERVYoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUgfCBQYXNzaXZlLCBQYXNzaXZlJDEsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdFZmZlY3RzSW5ERVYoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlIHwgUGFzc2l2ZSwgUGFzc2l2ZSQxLCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdChjcmVhdGUsIHJlZikge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZWZDYWxsYmFjayA9IHJlZjtcblxuICAgIHZhciBfaW5zdCA9IGNyZWF0ZSgpO1xuXG4gICAgcmVmQ2FsbGJhY2soX2luc3QpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZWZDYWxsYmFjayhudWxsKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKHJlZiAhPT0gbnVsbCAmJiByZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZWZPYmplY3QgPSByZWY7XG5cbiAgICB7XG4gICAgICBpZiAoIXJlZk9iamVjdC5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgZmlyc3QgYXJndW1lbnQgdG8gZWl0aGVyIGJlIGEgJyArICdyZWYgY2FsbGJhY2sgb3IgUmVhY3QuY3JlYXRlUmVmKCkgb2JqZWN0LiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCAnYW4gb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKHJlZk9iamVjdCkuam9pbignLCAnKSArICd9Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIF9pbnN0MiA9IGNyZWF0ZSgpO1xuXG4gICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBfaW5zdDI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZk9iamVjdC5jdXJyZW50ID0gbnVsbDtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gJyArICd0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNyZWF0ZSAhPT0gbnVsbCA/IHR5cGVvZiBjcmVhdGUgOiAnbnVsbCcpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG5cbiAgdmFyIGVmZmVjdERlcHMgPSBkZXBzICE9PSBudWxsICYmIGRlcHMgIT09IHVuZGVmaW5lZCA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksIGVmZmVjdERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiAnICsgJ3RoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6ICdudWxsJyk7XG4gICAgfVxuICB9IC8vIFRPRE86IElmIGRlcHMgYXJlIHByb3ZpZGVkLCBzaG91bGQgd2Ugc2tpcCBjb21wYXJpbmcgdGhlIHJlZiBpdHNlbGY/XG5cblxuICB2YXIgZWZmZWN0RGVwcyA9IGRlcHMgIT09IG51bGwgJiYgZGVwcyAhPT0gdW5kZWZpbmVkID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksIGVmZmVjdERlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudERlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7Ly8gVGhpcyBob29rIGlzIG5vcm1hbGx5IGEgbm8tb3AuXG4gIC8vIFRoZSByZWFjdC1kZWJ1Zy1ob29rcyBwYWNrYWdlIGluamVjdHMgaXRzIG93biBpbXBsZW1lbnRhdGlvblxuICAvLyBzbyB0aGF0IGUuZy4gRGV2VG9vbHMgY2FuIGRpc3BsYXkgY3VzdG9tIGhvb2sgdmFsdWVzLlxufVxuXG52YXIgdXBkYXRlRGVidWdWYWx1ZSA9IG1vdW50RGVidWdWYWx1ZTtcblxuZnVuY3Rpb24gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIG5leHREZXBzXTtcbiAgcmV0dXJuIGNhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIG1vdW50TWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIG5leHREZXBzXTtcbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAvLyBBc3N1bWUgdGhlc2UgYXJlIGRlZmluZWQuIElmIHRoZXkncmUgbm90LCBhcmVIb29rSW5wdXRzRXF1YWwgd2lsbCB3YXJuLlxuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBuZXh0RGVwc107XG4gIHJldHVybiBuZXh0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSkge1xuICB2YXIgX21vdW50U3RhdGUgPSBtb3VudFN0YXRlKHZhbHVlKSxcbiAgICAgIHByZXZWYWx1ZSA9IF9tb3VudFN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfbW91bnRTdGF0ZVsxXTtcblxuICBtb3VudEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICB0cnkge1xuICAgICAgc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICB9XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfdXBkYXRlU3RhdGUgPSB1cGRhdGVTdGF0ZSgpLFxuICAgICAgcHJldlZhbHVlID0gX3VwZGF0ZVN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfdXBkYXRlU3RhdGVbMV07XG5cbiAgdXBkYXRlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSkge1xuICB2YXIgX3JlcmVuZGVyU3RhdGUgPSByZXJlbmRlclN0YXRlKCksXG4gICAgICBwcmV2VmFsdWUgPSBfcmVyZW5kZXJTdGF0ZVswXSxcbiAgICAgIHNldFZhbHVlID0gX3JlcmVuZGVyU3RhdGVbMV07XG5cbiAgdXBkYXRlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihzZXRQZW5kaW5nLCBjYWxsYmFjaykge1xuICB2YXIgcHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG5cbiAge1xuICAgIHJ1bldpdGhQcmlvcml0eSQxKHByaW9yaXR5TGV2ZWwgPCBVc2VyQmxvY2tpbmdQcmlvcml0eSQyID8gVXNlckJsb2NraW5nUHJpb3JpdHkkMiA6IHByaW9yaXR5TGV2ZWwsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldFBlbmRpbmcodHJ1ZSk7XG4gICAgfSk7XG4gICAgcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCA+IE5vcm1hbFByaW9yaXR5JDEgPyBOb3JtYWxQcmlvcml0eSQxIDogcHJpb3JpdHlMZXZlbCwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0UGVuZGluZyhmYWxzZSk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudFRyYW5zaXRpb24oKSB7XG4gIHZhciBfbW91bnRTdGF0ZTIgPSBtb3VudFN0YXRlKGZhbHNlKSxcbiAgICAgIGlzUGVuZGluZyA9IF9tb3VudFN0YXRlMlswXSxcbiAgICAgIHNldFBlbmRpbmcgPSBfbW91bnRTdGF0ZTJbMV07IC8vIFRoZSBgc3RhcnRgIG1ldGhvZCBjYW4gYmUgc3RvcmVkIG9uIGEgcmVmLCBzaW5jZSBgc2V0UGVuZGluZ2BcbiAgLy8gbmV2ZXIgY2hhbmdlcy5cblxuXG4gIHZhciBzdGFydCA9IHN0YXJ0VHJhbnNpdGlvbi5iaW5kKG51bGwsIHNldFBlbmRpbmcpO1xuICBtb3VudFJlZihzdGFydCk7XG4gIHJldHVybiBbc3RhcnQsIGlzUGVuZGluZ107XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRyYW5zaXRpb24oKSB7XG4gIHZhciBfdXBkYXRlU3RhdGUyID0gdXBkYXRlU3RhdGUoKSxcbiAgICAgIGlzUGVuZGluZyA9IF91cGRhdGVTdGF0ZTJbMF07XG5cbiAgdmFyIHN0YXJ0UmVmID0gdXBkYXRlUmVmKCk7XG4gIHZhciBzdGFydCA9IHN0YXJ0UmVmLmN1cnJlbnQ7XG4gIHJldHVybiBbc3RhcnQsIGlzUGVuZGluZ107XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyVHJhbnNpdGlvbigpIHtcbiAgdmFyIF9yZXJlbmRlclN0YXRlMiA9IHJlcmVuZGVyU3RhdGUoKSxcbiAgICAgIGlzUGVuZGluZyA9IF9yZXJlbmRlclN0YXRlMlswXTtcblxuICB2YXIgc3RhcnRSZWYgPSB1cGRhdGVSZWYoKTtcbiAgdmFyIHN0YXJ0ID0gc3RhcnRSZWYuY3VycmVudDtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxudmFyIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldElzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2VJbkRFVigpIHtcbiAge1xuICAgIHJldHVybiBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVihmaWJlcikge1xuICB7XG4gICAgLy8gVE9ETzogU2hvdWxkIHdhcm4gaW4gZWZmZWN0cyBhbmQgY2FsbGJhY2tzLCB0b29cbiAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgaWYgKGdldElzUmVuZGVyaW5nKCkgJiYgIWRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXJbbmFtZV0pIHtcbiAgICAgIGVycm9yKCdUaGUgb2JqZWN0IHBhc3NlZCBiYWNrIGZyb20gdXNlT3BhcXVlSWRlbnRpZmllciBpcyBtZWFudCB0byBiZSAnICsgJ3Bhc3NlZCB0aHJvdWdoIHRvIGF0dHJpYnV0ZXMgb25seS4gRG8gbm90IHJlYWQgdGhlICcgKyAndmFsdWUgZGlyZWN0bHkuJyk7XG5cbiAgICAgIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXJbbmFtZV0gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBtYWtlSWQgPSAgbWFrZUNsaWVudElkSW5ERVYuYmluZChudWxsLCB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYuYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKSkgO1xuXG4gIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgdmFyIGRpZFVwZ3JhZGUgPSBmYWxzZTtcbiAgICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuXG4gICAgdmFyIHJlYWRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghZGlkVXBncmFkZSkge1xuICAgICAgICAvLyBPbmx5IHVwZ3JhZGUgb25jZS4gVGhpcyB3b3JrcyBldmVuIGluc2lkZSB0aGUgcmVuZGVyIHBoYXNlIGJlY2F1c2VcbiAgICAgICAgLy8gdGhlIHVwZGF0ZSBpcyBhZGRlZCB0byBhIHNoYXJlZCBxdWV1ZSwgd2hpY2ggb3V0bGFzdHMgdGhlXG4gICAgICAgIC8vIGluLXByb2dyZXNzIHJlbmRlci5cbiAgICAgICAgZGlkVXBncmFkZSA9IHRydWU7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSB0cnVlO1xuICAgICAgICAgIHNldElkKG1ha2VJZCgpKTtcbiAgICAgICAgICBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gZmFsc2U7XG4gICAgICAgICAgd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWKGZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgb2JqZWN0IHBhc3NlZCBiYWNrIGZyb20gdXNlT3BhcXVlSWRlbnRpZmllciBpcyBtZWFudCB0byBiZSBwYXNzZWQgdGhyb3VnaCB0byBhdHRyaWJ1dGVzIG9ubHkuIERvIG5vdCByZWFkIHRoZSB2YWx1ZSBkaXJlY3RseS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBpZCA9IG1ha2VPcGFxdWVIeWRyYXRpbmdPYmplY3QocmVhZFZhbHVlKTtcbiAgICB2YXIgc2V0SWQgPSBtb3VudFN0YXRlKGlkKVsxXTtcblxuICAgIGlmICgoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IFVwZGF0ZSB8IFBhc3NpdmU7XG4gICAgICBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IFBhc3NpdmUkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRJZChtYWtlSWQoKSk7XG4gICAgICB9LCB1bmRlZmluZWQsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiBpZDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX2lkID0gbWFrZUlkKCk7XG5cbiAgICBtb3VudFN0YXRlKF9pZCk7XG4gICAgcmV0dXJuIF9pZDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgaWQgPSB1cGRhdGVTdGF0ZSgpWzBdO1xuICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIGlkID0gcmVyZW5kZXJTdGF0ZSgpWzBdO1xuICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQWN0aW9uKGZpYmVyLCBxdWV1ZSwgYWN0aW9uKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1szXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoXCJTdGF0ZSB1cGRhdGVzIGZyb20gdGhlIHVzZVN0YXRlKCkgYW5kIHVzZVJlZHVjZXIoKSBIb29rcyBkb24ndCBzdXBwb3J0IHRoZSBcIiArICdzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciAnICsgJ3JlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICBsYW5lOiBsYW5lLFxuICAgIGFjdGlvbjogYWN0aW9uLFxuICAgIGVhZ2VyUmVkdWNlcjogbnVsbCxcbiAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTsgLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cblxuICB2YXIgcGVuZGluZyA9IHF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgdXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgcGVuZGluZy5uZXh0ID0gdXBkYXRlO1xuICB9XG5cbiAgcXVldWUucGVuZGluZyA9IHVwZGF0ZTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoZmliZXIgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZSA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSkge1xuICAgIC8vIFRoaXMgaXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlLiBTdGFzaCBpdCBpbiBhIGxhemlseS1jcmVhdGVkIG1hcCBvZlxuICAgIC8vIHF1ZXVlIC0+IGxpbmtlZCBsaXN0IG9mIHVwZGF0ZXMuIEFmdGVyIHRoaXMgcmVuZGVyIHBhc3MsIHdlJ2xsIHJlc3RhcnRcbiAgICAvLyBhbmQgYXBwbHkgdGhlIHN0YXNoZWQgdXBkYXRlcyBvbiB0b3Agb2YgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZmliZXIubGFuZXMgPT09IE5vTGFuZXMgJiYgKGFsdGVybmF0ZSA9PT0gbnVsbCB8fCBhbHRlcm5hdGUubGFuZXMgPT09IE5vTGFuZXMpKSB7XG4gICAgICAvLyBUaGUgcXVldWUgaXMgY3VycmVudGx5IGVtcHR5LCB3aGljaCBtZWFucyB3ZSBjYW4gZWFnZXJseSBjb21wdXRlIHRoZVxuICAgICAgLy8gbmV4dCBzdGF0ZSBiZWZvcmUgZW50ZXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gSWYgdGhlIG5ldyBzdGF0ZSBpcyB0aGVcbiAgICAgIC8vIHNhbWUgYXMgdGhlIGN1cnJlbnQgc3RhdGUsIHdlIG1heSBiZSBhYmxlIHRvIGJhaWwgb3V0IGVudGlyZWx5LlxuICAgICAgdmFyIGxhc3RSZW5kZXJlZFJlZHVjZXIgPSBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyO1xuXG4gICAgICBpZiAobGFzdFJlbmRlcmVkUmVkdWNlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXI7XG5cbiAgICAgICAge1xuICAgICAgICAgIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlO1xuICAgICAgICAgIHZhciBlYWdlclN0YXRlID0gbGFzdFJlbmRlcmVkUmVkdWNlcihjdXJyZW50U3RhdGUsIGFjdGlvbik7IC8vIFN0YXNoIHRoZSBlYWdlcmx5IGNvbXB1dGVkIHN0YXRlLCBhbmQgdGhlIHJlZHVjZXIgdXNlZCB0byBjb21wdXRlXG4gICAgICAgICAgLy8gaXQsIG9uIHRoZSB1cGRhdGUgb2JqZWN0LiBJZiB0aGUgcmVkdWNlciBoYXNuJ3QgY2hhbmdlZCBieSB0aGVcbiAgICAgICAgICAvLyB0aW1lIHdlIGVudGVyIHRoZSByZW5kZXIgcGhhc2UsIHRoZW4gdGhlIGVhZ2VyIHN0YXRlIGNhbiBiZSB1c2VkXG4gICAgICAgICAgLy8gd2l0aG91dCBjYWxsaW5nIHRoZSByZWR1Y2VyIGFnYWluLlxuXG4gICAgICAgICAgdXBkYXRlLmVhZ2VyUmVkdWNlciA9IGxhc3RSZW5kZXJlZFJlZHVjZXI7XG4gICAgICAgICAgdXBkYXRlLmVhZ2VyU3RhdGUgPSBlYWdlclN0YXRlO1xuXG4gICAgICAgICAgaWYgKG9iamVjdElzKGVhZ2VyU3RhdGUsIGN1cnJlbnRTdGF0ZSkpIHtcbiAgICAgICAgICAgIC8vIEZhc3QgcGF0aC4gV2UgY2FuIGJhaWwgb3V0IHdpdGhvdXQgc2NoZWR1bGluZyBSZWFjdCB0byByZS1yZW5kZXIuXG4gICAgICAgICAgICAvLyBJdCdzIHN0aWxsIHBvc3NpYmxlIHRoYXQgd2UnbGwgbmVlZCB0byByZWJhc2UgdGhpcyB1cGRhdGUgbGF0ZXIsXG4gICAgICAgICAgICAvLyBpZiB0aGUgY29tcG9uZW50IHJlLXJlbmRlcnMgZm9yIGEgZGlmZmVyZW50IHJlYXNvbiBhbmQgYnkgdGhhdFxuICAgICAgICAgICAgLy8gdGltZSB0aGUgcmVkdWNlciBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7Ly8gU3VwcHJlc3MgdGhlIGVycm9yLiBJdCB3aWxsIHRocm93IGFnYWluIGluIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICAgIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChmaWJlcik7XG4gICAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRldihmaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9XG59XG5cbnZhciBDb250ZXh0T25seURpc3BhdGNoZXIgPSB7XG4gIHJlYWRDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2s6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlQ29udGV4dDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VMYXlvdXRFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTWVtbzogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VSZWR1Y2VyOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVJlZjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VTdGF0ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VEZWJ1Z1ZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZURlZmVycmVkVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlVHJhbnNpdGlvbjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VNdXRhYmxlU291cmNlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU9wYXF1ZUlkZW50aWZpZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG59O1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGw7XG5cbntcbiAgdmFyIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBlcnJvcignQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gIH07XG5cbiAgdmFyIHdhcm5JbnZhbGlkSG9va0FjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBlcnJvcignRG8gbm90IGNhbGwgSG9va3MgaW5zaWRlIHVzZUVmZmVjdCguLi4pLCB1c2VNZW1vKC4uLiksIG9yIG90aGVyIGJ1aWx0LWluIEhvb2tzLiAnICsgJ1lvdSBjYW4gb25seSBjYWxsIEhvb2tzIGF0IHRoZSB0b3AgbGV2ZWwgb2YgeW91ciBSZWFjdCBmdW5jdGlvbi4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzJyk7XG4gIH07XG5cbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xufVxuXG52YXIgbm93JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xudmFyIGNvbW1pdFRpbWUgPSAwO1xudmFyIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG5cbmZ1bmN0aW9uIGdldENvbW1pdFRpbWUoKSB7XG4gIHJldHVybiBjb21taXRUaW1lO1xufVxuXG5mdW5jdGlvbiByZWNvcmRDb21taXRUaW1lKCkge1xuXG4gIGNvbW1pdFRpbWUgPSBub3ckMSgpO1xufVxuXG5mdW5jdGlvbiBzdGFydFByb2ZpbGVyVGltZXIoZmliZXIpIHtcblxuICBwcm9maWxlclN0YXJ0VGltZSA9IG5vdyQxKCk7XG5cbiAgaWYgKGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA8IDApIHtcbiAgICBmaWJlci5hY3R1YWxTdGFydFRpbWUgPSBub3ckMSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKGZpYmVyKSB7XG5cbiAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShmaWJlciwgb3ZlcnJpZGVCYXNlVGltZSkge1xuXG4gIGlmIChwcm9maWxlclN0YXJ0VGltZSA+PSAwKSB7XG4gICAgdmFyIGVsYXBzZWRUaW1lID0gbm93JDEoKSAtIHByb2ZpbGVyU3RhcnRUaW1lO1xuICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuXG4gICAgaWYgKG92ZXJyaWRlQmFzZVRpbWUpIHtcbiAgICAgIGZpYmVyLnNlbGZCYXNlRHVyYXRpb24gPSBlbGFwc2VkVGltZTtcbiAgICB9XG5cbiAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24oZmliZXIpIHtcbiAgLy8gVHJhbnNmZXIgdGltZSBzcGVudCByZW5kZXJpbmcgdGhlc2UgY2hpbGRyZW4gc28gd2UgZG9uJ3QgbG9zZSBpdFxuICAvLyBhZnRlciB3ZSByZXJlbmRlci4gVGhpcyBpcyB1c2VkIGFzIGEgaGVscGVyIGluIHNwZWNpYWwgY2FzZXNcbiAgLy8gd2hlcmUgd2Ugc2hvdWxkIGNvdW50IHRoZSB3b3JrIG9mIG11bHRpcGxlIHBhc3Nlcy5cbiAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkKSB7XG4gICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5BYm91dEJhZENsYXNzO1xudmFyIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzO1xudmFyIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHM7XG52YXIgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXI7XG52YXIgZGlkV2FybkFib3V0VGFpbE9wdGlvbnM7XG5cbntcbiAgZGlkV2FybkFib3V0QmFkQ2xhc3MgPSB7fTtcbiAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnMgPSB7fTtcbiAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlciA9IHt9O1xuICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucyA9IHt9O1xufVxuXG5mdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgaXMgYSBmcmVzaCBuZXcgY29tcG9uZW50IHRoYXQgaGFzbid0IGJlZW4gcmVuZGVyZWQgeWV0LCB3ZVxuICAgIC8vIHdvbid0IHVwZGF0ZSBpdHMgY2hpbGQgc2V0IGJ5IGFwcGx5aW5nIG1pbmltYWwgc2lkZS1lZmZlY3RzLiBJbnN0ZWFkLFxuICAgIC8vIHdlIHdpbGwgYWRkIHRoZW0gYWxsIHRvIHRoZSBjaGlsZCBiZWZvcmUgaXQgZ2V0cyByZW5kZXJlZC4gVGhhdCBtZWFuc1xuICAgIC8vIHdlIGNhbiBvcHRpbWl6ZSB0aGlzIHJlY29uY2lsaWF0aW9uIHBhc3MgYnkgbm90IHRyYWNraW5nIHNpZGUtZWZmZWN0cy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZSBjdXJyZW50IGNoaWxkIGlzIHRoZSBzYW1lIGFzIHRoZSB3b3JrIGluIHByb2dyZXNzLCBpdCBtZWFucyB0aGF0XG4gICAgLy8gd2UgaGF2ZW4ndCB5ZXQgc3RhcnRlZCBhbnkgd29yayBvbiB0aGVzZSBjaGlsZHJlbi4gVGhlcmVmb3JlLCB3ZSB1c2VcbiAgICAvLyB0aGUgY2xvbmUgYWxnb3JpdGhtIHRvIGNyZWF0ZSBhIGNvcHkgb2YgYWxsIHRoZSBjdXJyZW50IGNoaWxkcmVuLlxuICAgIC8vIElmIHdlIGhhZCBhbnkgcHJvZ3Jlc3NlZCB3b3JrIGFscmVhZHksIHRoYXQgaXMgaW52YWxpZCBhdCB0aGlzIHBvaW50IHNvXG4gICAgLy8gbGV0J3MgdGhyb3cgaXQgb3V0LlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3JrIG9mIHJlY29uY2lsZUNoaWxkcmVuLiBJdCdzIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2VcbiAgLy8gd2FudCB0byByZWNvbmNpbGUgd2l0aG91dCBtYXRjaGluZyBhZ2FpbnN0IHRoZSBleGlzdGluZyBzZXQuIFRoaXMgaGFzIHRoZVxuICAvLyBlZmZlY3Qgb2YgYWxsIGN1cnJlbnQgY2hpbGRyZW4gYmVpbmcgdW5tb3VudGVkOyBldmVuIGlmIHRoZSB0eXBlIGFuZCBrZXlcbiAgLy8gYXJlIHRoZSBzYW1lLCB0aGUgb2xkIGNoaWxkIGlzIHVubW91bnRlZCBhbmQgYSBuZXcgY2hpbGQgaXMgY3JlYXRlZC5cbiAgLy9cbiAgLy8gVG8gZG8gdGhpcywgd2UncmUgZ29pbmcgdG8gZ28gdGhyb3VnaCB0aGUgcmVjb25jaWxlIGFsZ29yaXRobSB0d2ljZS4gSW5cbiAgLy8gdGhlIGZpcnN0IHBhc3MsIHdlIHNjaGVkdWxlIGEgZGVsZXRpb24gZm9yIGFsbCB0aGUgY3VycmVudCBjaGlsZHJlbiBieVxuICAvLyBwYXNzaW5nIG51bGwuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTsgLy8gSW4gdGhlIHNlY29uZCBwYXNzLCB3ZSBtb3VudCB0aGUgbmV3IGNoaWxkcmVuLiBUaGUgdHJpY2sgaGVyZSBpcyB0aGF0IHdlXG4gIC8vIHBhc3MgbnVsbCBpbiBwbGFjZSBvZiB3aGVyZSB3ZSB1c3VhbGx5IHBhc3MgdGhlIGN1cnJlbnQgY2hpbGQgc2V0LiBUaGlzIGhhc1xuICAvLyB0aGUgZWZmZWN0IG9mIHJlbW91bnRpbmcgYWxsIGNoaWxkcmVuIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVpclxuICAvLyBpZGVudGl0aWVzIG1hdGNoLlxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVGb3J3YXJkUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogY3VycmVudCBjYW4gYmUgbm9uLW51bGwgaGVyZSBldmVuIGlmIHRoZSBjb21wb25lbnRcbiAgLy8gaGFzbid0IHlldCBtb3VudGVkLiBUaGlzIGhhcHBlbnMgYWZ0ZXIgdGhlIGZpcnN0IHJlbmRlciBzdXNwZW5kcy5cbiAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcmVuZGVyID0gQ29tcG9uZW50LnJlbmRlcjtcbiAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjsgLy8gVGhlIHJlc3QgaXMgYSBmb3JrIG9mIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50XG5cbiAgdmFyIG5leHRDaGlsZHJlbjtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXIsIG5leHRQcm9wcywgcmVmLCByZW5kZXJMYW5lcyk7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlciwgbmV4dFByb3BzLCByZWYsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFkaWRSZWNlaXZlVXBkYXRlKSB7XG4gICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHZhciB0eXBlID0gQ29tcG9uZW50LnR5cGU7XG5cbiAgICBpZiAoaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSAmJiBDb21wb25lbnQuY29tcGFyZSA9PT0gbnVsbCAmJiAvLyBTaW1wbGVNZW1vQ29tcG9uZW50IGNvZGVwYXRoIGRvZXNuJ3QgcmVzb2x2ZSBvdXRlciBwcm9wcyBlaXRoZXIuXG4gICAgQ29tcG9uZW50LmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVzb2x2ZWRUeXBlID0gdHlwZTtcblxuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSk7XG4gICAgICB9IC8vIElmIHRoaXMgaXMgYSBwbGFpbiBmdW5jdGlvbiBjb21wb25lbnQgd2l0aG91dCBkZWZhdWx0IHByb3BzLFxuICAgICAgLy8gYW5kIHdpdGggb25seSB0aGUgZGVmYXVsdCBzaGFsbG93IGNvbXBhcmlzb24sIHdlIHVwZ3JhZGUgaXRcbiAgICAgIC8vIHRvIGEgU2ltcGxlTWVtb0NvbXBvbmVudCB0byBhbGxvdyBmYXN0IHBhdGggdXBkYXRlcy5cblxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBTaW1wbGVNZW1vQ29tcG9uZW50O1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVkVHlwZTtcblxuICAgICAge1xuICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIHR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVzb2x2ZWRUeXBlLCBuZXh0UHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUodHlwZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhDb21wb25lbnQudHlwZSwgbnVsbCwgbmV4dFByb3BzLCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MubW9kZSwgcmVuZGVyTGFuZXMpO1xuICAgIGNoaWxkLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICBjaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGNoaWxkO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHtcbiAgICB2YXIgX3R5cGUgPSBDb21wb25lbnQudHlwZTtcbiAgICB2YXIgX2lubmVyUHJvcFR5cGVzID0gX3R5cGUucHJvcFR5cGVzO1xuXG4gICAgaWYgKF9pbm5lclByb3BUeXBlcykge1xuICAgICAgLy8gSW5uZXIgbWVtbyBjb21wb25lbnQgcHJvcHMgYXJlbid0IGN1cnJlbnRseSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudC5cbiAgICAgIC8vIFdlIGNvdWxkIG1vdmUgaXQgdGhlcmUsIGJ1dCB3ZSdkIHN0aWxsIG5lZWQgdGhpcyBmb3IgbGF6eSBjb2RlIHBhdGguXG4gICAgICBjaGVja1Byb3BUeXBlcyhfaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShfdHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjdXJyZW50Q2hpbGQgPSBjdXJyZW50LmNoaWxkOyAvLyBUaGlzIGlzIGFsd2F5cyBleGFjdGx5IG9uZSBjaGlsZFxuXG4gIGlmICghaW5jbHVkZXNTb21lTGFuZSh1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgLy8gVGhpcyB3aWxsIGJlIHRoZSBwcm9wcyB3aXRoIHJlc29sdmVkIGRlZmF1bHRQcm9wcyxcbiAgICAvLyB1bmxpa2UgY3VycmVudC5tZW1vaXplZFByb3BzIHdoaWNoIHdpbGwgYmUgdGhlIHVucmVzb2x2ZWQgb25lcy5cbiAgICB2YXIgcHJldlByb3BzID0gY3VycmVudENoaWxkLm1lbW9pemVkUHJvcHM7IC8vIERlZmF1bHQgdG8gc2hhbGxvdyBjb21wYXJpc29uXG5cbiAgICB2YXIgY29tcGFyZSA9IENvbXBvbmVudC5jb21wYXJlO1xuICAgIGNvbXBhcmUgPSBjb21wYXJlICE9PSBudWxsID8gY29tcGFyZSA6IHNoYWxsb3dFcXVhbDtcblxuICAgIGlmIChjb21wYXJlKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJiBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmKSB7XG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIG5leHRQcm9wcyk7XG4gIG5ld0NoaWxkLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG4gIHJldHVybiBuZXdDaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAvLyBoYXNuJ3QgeWV0IG1vdW50ZWQuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBpbm5lciByZW5kZXIgc3VzcGVuZHMuXG4gIC8vIFdlJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZpbmUgb3IgY2FuIGNhdXNlIGlzc3Vlcy5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBvdXRlck1lbW9UeXBlID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGU7XG5cbiAgICAgIGlmIChvdXRlck1lbW9UeXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgLy8gV2Ugd2FybiB3aGVuIHlvdSBkZWZpbmUgcHJvcFR5cGVzIG9uIGxhenkoKVxuICAgICAgICAvLyBzbyBsZXQncyBqdXN0IHNraXAgb3ZlciBpdCB0byBmaW5kIG1lbW8oKSBvdXRlciB3cmFwcGVyLlxuICAgICAgICAvLyBJbm5lciBwcm9wcyBmb3IgbWVtbyBhcmUgdmFsaWRhdGVkIGxhdGVyLlxuICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IG91dGVyTWVtb1R5cGU7XG4gICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgb3V0ZXJNZW1vVHlwZSA9IGluaXQocGF5bG9hZCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBvdXRlck1lbW9UeXBlID0gbnVsbDtcbiAgICAgICAgfSAvLyBJbm5lciBwcm9wVHlwZXMgd2lsbCBiZSB2YWxpZGF0ZWQgaW4gdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCBwYXRoLlxuXG5cbiAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gb3V0ZXJNZW1vVHlwZSAmJiBvdXRlck1lbW9UeXBlLnByb3BUeXBlcztcblxuICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCAoU2ltcGxlTWVtb0NvbXBvbmVudCBoYXMgbm8gZGVmYXVsdFByb3BzKVxuICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShvdXRlck1lbW9UeXBlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICBpZiAoc2hhbGxvd0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJiBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmICYmICggLy8gUHJldmVudCBiYWlsb3V0IGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkLlxuICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID09PSBjdXJyZW50LnR5cGUgKSkge1xuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmVzKSkge1xuICAgICAgICAvLyBUaGUgcGVuZGluZyBsYW5lcyB3ZXJlIGNsZWFyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBiZWdpbldvcmsuIFdlJ3JlXG4gICAgICAgIC8vIGFib3V0IHRvIGJhaWwgb3V0LCBidXQgdGhlcmUgbWlnaHQgYmUgb3RoZXIgbGFuZXMgdGhhdCB3ZXJlbid0XG4gICAgICAgIC8vIGluY2x1ZGVkIGluIHRoZSBjdXJyZW50IHJlbmRlci4gVXN1YWxseSwgdGhlIHByaW9yaXR5IGxldmVsIG9mIHRoZVxuICAgICAgICAvLyByZW1haW5pbmcgdXBkYXRlcyBpcyBhY2N1bWxhdGVkIGR1cmluZyB0aGUgZXZhbHVhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gY29tcG9uZW50IChpLmUuIHdoZW4gcHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlKS4gQnV0IHNpbmNlIHNpbmNlXG4gICAgICAgIC8vIHdlJ3JlIGJhaWxpbmcgb3V0IGVhcmx5ICp3aXRob3V0KiBldmFsdWF0aW5nIHRoZSBjb21wb25lbnQsIHdlIG5lZWRcbiAgICAgICAgLy8gdG8gYWNjb3VudCBmb3IgaXQgaGVyZSwgdG9vLiBSZXNldCB0byB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgZmliZXIuXG4gICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBhcHBsaWVzIHRvIFNpbXBsZU1lbW9Db21wb25lbnQsIG5vdCBNZW1vQ29tcG9uZW50LFxuICAgICAgICAvLyBiZWNhdXNlIGEgTWVtb0NvbXBvbmVudCBmaWJlciBkb2VzIG5vdCBoYXZlIGhvb2tzIG9yIGFuIHVwZGF0ZSBxdWV1ZTtcbiAgICAgICAgLy8gcmF0aGVyLCBpdCB3cmFwcyBhcm91bmQgYW4gaW5uZXIgY29tcG9uZW50LCB3aGljaCBtYXkgb3IgbWF5IG5vdFxuICAgICAgICAvLyBjb250YWlucyBob29rcy5cbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGUgcmVzZXQgYXQgaW4gYmVnaW5Xb3JrIG91dCBvZiB0aGUgY29tbW9uIHBhdGggc28gdGhhdFxuICAgICAgICAvLyB0aGlzIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSBpZiAoKGN1cnJlbnQuZmxhZ3MgJiBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgb25seSBleGlzdHMgZm9yIGxlZ2FjeSBtb2RlLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkyMTYuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YXIgcHJldlN0YXRlID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG5cbiAgaWYgKG5leHRQcm9wcy5tb2RlID09PSAnaGlkZGVuJyB8fCBuZXh0UHJvcHMubW9kZSA9PT0gJ3Vuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nJykge1xuICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAvLyBJbiBsZWdhY3kgc3luYyBtb2RlLCBkb24ndCBkZWZlciB0aGUgc3VidHJlZS4gUmVuZGVyIGl0IG5vdy5cbiAgICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2hhdCB3ZSBzaG91bGQgZG8gaW4gQmxvY2tpbmcgbW9kZS5cbiAgICAgIHZhciBuZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogTm9MYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2UgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKSkge1xuICAgICAgdmFyIG5leHRCYXNlTGFuZXM7XG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHByZXZCYXNlTGFuZXMgPSBwcmV2U3RhdGUuYmFzZUxhbmVzO1xuICAgICAgICBuZXh0QmFzZUxhbmVzID0gbWVyZ2VMYW5lcyhwcmV2QmFzZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0QmFzZUxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgICB9IC8vIFNjaGVkdWxlIHRoaXMgZmliZXIgdG8gcmUtcmVuZGVyIGF0IG9mZnNjcmVlbiBwcmlvcml0eS4gVGhlbiBiYWlsb3V0LlxuXG5cbiAgICAgIHtcbiAgICAgICAgbWFya1NwYXduZWRXb3JrKE9mZnNjcmVlbkxhbmUpO1xuICAgICAgfVxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBsYW5lVG9MYW5lcyhPZmZzY3JlZW5MYW5lKTtcbiAgICAgIHZhciBfbmV4dFN0YXRlID0ge1xuICAgICAgICBiYXNlTGFuZXM6IG5leHRCYXNlTGFuZXNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gX25leHRTdGF0ZTsgLy8gV2UncmUgYWJvdXQgdG8gYmFpbCBvdXQsIGJ1dCB3ZSBuZWVkIHRvIHB1c2ggdGhpcyB0byB0aGUgc3RhY2sgYW55d2F5XG4gICAgICAvLyB0byBhdm9pZCBhIHB1c2gvcG9wIG1pc2FsaWdubWVudC5cblxuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBuZXh0QmFzZUxhbmVzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW5kZXJpbmcgYXQgb2Zmc2NyZWVuLCBzbyB3ZSBjYW4gY2xlYXIgdGhlIGJhc2UgbGFuZXMuXG4gICAgICB2YXIgX25leHRTdGF0ZTIgPSB7XG4gICAgICAgIGJhc2VMYW5lczogTm9MYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBfbmV4dFN0YXRlMjsgLy8gUHVzaCB0aGUgbGFuZXMgdGhhdCB3ZXJlIHNraXBwZWQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuXG4gICAgICB2YXIgc3VidHJlZVJlbmRlckxhbmVzID0gcHJldlN0YXRlICE9PSBudWxsID8gcHJldlN0YXRlLmJhc2VMYW5lcyA6IHJlbmRlckxhbmVzO1xuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgX3N1YnRyZWVSZW5kZXJMYW5lcztcblxuICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgIF9zdWJ0cmVlUmVuZGVyTGFuZXMgPSBtZXJnZUxhbmVzKHByZXZTdGF0ZS5iYXNlTGFuZXMsIHJlbmRlckxhbmVzKTsgLy8gU2luY2Ugd2UncmUgbm90IGhpZGRlbiBhbnltb3JlLCByZXNldCB0aGUgc3RhdGVcblxuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIHdlcmVuJ3QgcHJldmlvdXNseSBoaWRkZW4sIGFuZCB3ZSBzdGlsbCBhcmVuJ3QsIHNvIHRoZXJlJ3Mgbm90aGluZ1xuICAgICAgLy8gc3BlY2lhbCB0byBkby4gTmVlZCB0byBwdXNoIHRvIHRoZSBzdGFjayByZWdhcmRsZXNzLCB0aG91Z2gsIHRvIGF2b2lkXG4gICAgICAvLyBhIHB1c2gvcG9wIG1pc2FsaWdubWVudC5cbiAgICAgIF9zdWJ0cmVlUmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICB9XG5cbiAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIF9zdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59IC8vIE5vdGU6IFRoZXNlIGhhcHBlbiB0byBoYXZlIGlkZW50aWNhbCBiZWdpbiBwaGFzZXMsIGZvciBub3cuIFdlIHNob3VsZG4ndCBob2xkXG4vLyBvdXJzZWx2ZXMgdG8gdGhpcyBjb25zdHJhaW50LCB0aG91Z2guIElmIHRoZSBiZWhhdmlvciBkaXZlcmdlcywgd2Ugc2hvdWxkXG4vLyBmb3JrIHRoZSBmdW5jdGlvbi5cblxuXG52YXIgdXBkYXRlTGVnYWN5SGlkZGVuQ29tcG9uZW50ID0gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50O1xuXG5mdW5jdGlvbiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVQcm9maWxlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTsgLy8gUmVzZXQgZWZmZWN0IGR1cmF0aW9ucyBmb3IgdGhlIG5leHQgZXZlbnR1YWwgZWZmZWN0IHBoYXNlLlxuICAgIC8vIFRoZXNlIGFyZSByZXNldCBkdXJpbmcgcmVuZGVyIHRvIGFsbG93IHRoZSBEZXZUb29scyBjb21taXQgaG9vayBhIGNoYW5jZSB0byByZWFkIHRoZW0sXG5cbiAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gIH1cblxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsICYmIHJlZiAhPT0gbnVsbCB8fCBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQucmVmICE9PSByZWYpIHtcbiAgICAvLyBTY2hlZHVsZSBhIFJlZiBlZmZlY3RcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWY7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgY29udGV4dDtcblxuICB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlKTtcbiAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBuZXh0Q2hpbGRyZW47XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFkaWRSZWNlaXZlVXBkYXRlKSB7XG4gICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cblxuICB2YXIgaGFzQ29udGV4dDtcblxuICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2Uge1xuICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgdmFyIHNob3VsZFVwZGF0ZTtcblxuICBpZiAoaW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gQSBjbGFzcyBjb21wb25lbnQgd2l0aG91dCBhbiBpbnN0YW5jZSBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWRcbiAgICAgIC8vIGluc2lkZSBhIG5vbi1jb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0b1xuICAgICAgLy8gdHJlYXQgaXQgbGlrZSBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5XG4gICAgICAvLyBjb21taXR0ZWQuIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICAgIH0gLy8gSW4gdGhlIGluaXRpYWwgcGFzcyB3ZSBtaWdodCBuZWVkIHRvIGNvbnN0cnVjdCB0aGUgaW5zdGFuY2UuXG5cblxuICAgIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKTtcbiAgICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgc2hvdWxkVXBkYXRlID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSW4gYSByZXN1bWUsIHdlJ2xsIGFscmVhZHkgaGF2ZSBhbiBpbnN0YW5jZSB3ZSBjYW4gcmV1c2UuXG4gICAgc2hvdWxkVXBkYXRlID0gcmVzdW1lTW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFVwZGF0ZSA9IHVwZGF0ZUNsYXNzSW5zdGFuY2UoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgbmV4dFVuaXRPZldvcmsgPSBmaW5pc2hDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBzaG91bGRVcGRhdGUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgdmFyIGluc3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoc2hvdWxkVXBkYXRlICYmIGluc3QucHJvcHMgIT09IG5leHRQcm9wcykge1xuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgIGVycm9yKCdJdCBsb29rcyBsaWtlICVzIGlzIHJlYXNzaWduaW5nIGl0cyBvd24gYHRoaXMucHJvcHNgIHdoaWxlIHJlbmRlcmluZy4gJyArICdUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGNhbiBsZWFkIHRvIGNvbmZ1c2luZyBidWdzLicsIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ2EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0VW5pdE9mV29yaztcbn1cblxuZnVuY3Rpb24gZmluaXNoQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgc2hvdWxkVXBkYXRlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcykge1xuICAvLyBSZWZzIHNob3VsZCB1cGRhdGUgZXZlbiBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZVxuICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIGRpZENhcHR1cmVFcnJvciA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gIGlmICghc2hvdWxkVXBkYXRlICYmICFkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBDb250ZXh0IHByb3ZpZGVycyBzaG91bGQgZGVmZXIgdG8gc0NVIGZvciByZW5kZXJpbmdcbiAgICBpZiAoaGFzQ29udGV4dCkge1xuICAgICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTsgLy8gUmVyZW5kZXJcblxuICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgdmFyIG5leHRDaGlsZHJlbjtcblxuICBpZiAoZGlkQ2FwdHVyZUVycm9yICYmIHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYgd2UgY2FwdHVyZWQgYW4gZXJyb3IsIGJ1dCBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgaXMgbm90IGRlZmluZWQsXG4gICAgLy8gdW5tb3VudCBhbGwgdGhlIGNoaWxkcmVuLiBjb21wb25lbnREaWRDYXRjaCB3aWxsIHNjaGVkdWxlIGFuIHVwZGF0ZSB0b1xuICAgIC8vIHJlLXJlbmRlciBhIGZhbGxiYWNrLiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCB3ZSBtaWdyYXRlIGV2ZXJ5b25lIHRvXG4gICAgLy8gdGhlIG5ldyBBUEkuXG4gICAgLy8gVE9ETzogV2FybiBpbiBhIGZ1dHVyZSByZWxlYXNlLlxuICAgIG5leHRDaGlsZHJlbiA9IG51bGw7XG5cbiAgICB7XG4gICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZygpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICAgIG5leHRDaGlsZHJlbiA9IGluc3RhbmNlLnJlbmRlcigpO1xuXG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbnN0YW5jZS5yZW5kZXIoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgZGlkQ2FwdHVyZUVycm9yKSB7XG4gICAgLy8gSWYgd2UncmUgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZWNvbmNpbGUgd2l0aG91dCByZXVzaW5nIGFueSBvZlxuICAgIC8vIHRoZSBleGlzdGluZyBjaGlsZHJlbi4gQ29uY2VwdHVhbGx5LCB0aGUgbm9ybWFsIGNoaWxkcmVuIGFuZCB0aGUgY2hpbGRyZW5cbiAgICAvLyB0aGF0IGFyZSBzaG93biBvbiBlcnJvciBhcmUgdHdvIGRpZmZlcmVudCBzZXRzLCBzbyB3ZSBzaG91bGRuJ3QgcmV1c2VcbiAgICAvLyBub3JtYWwgY2hpbGRyZW4gZXZlbiBpZiB0aGVpciBpZGVudGl0aWVzIG1hdGNoLlxuICAgIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSAvLyBNZW1vaXplIHN0YXRlIHVzaW5nIHRoZSB2YWx1ZXMgd2UganVzdCB1c2VkIHRvIHJlbmRlci5cbiAgLy8gVE9ETzogUmVzdHJ1Y3R1cmUgc28gd2UgbmV2ZXIgcmVhZCB2YWx1ZXMgZnJvbSB0aGUgaW5zdGFuY2UuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7IC8vIFRoZSBjb250ZXh0IG1pZ2h0IGhhdmUgY2hhbmdlZCBzbyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGl0LlxuXG4gIGlmIChoYXNDb250ZXh0KSB7XG4gICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAocm9vdC5wZW5kaW5nQ29udGV4dCkge1xuICAgIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MsIHJvb3QucGVuZGluZ0NvbnRleHQsIHJvb3QucGVuZGluZ0NvbnRleHQgIT09IHJvb3QuY29udGV4dCk7XG4gIH0gZWxzZSBpZiAocm9vdC5jb250ZXh0KSB7XG4gICAgLy8gU2hvdWxkIGFsd2F5cyBiZSBzZXRcbiAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LmNvbnRleHQsIGZhbHNlKTtcbiAgfVxuXG4gIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCByb290LmNvbnRhaW5lckluZm8pO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0Um9vdChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICghKGN1cnJlbnQgIT09IG51bGwgJiYgdXBkYXRlUXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSWYgdGhlIHJvb3QgZG9lcyBub3QgaGF2ZSBhbiB1cGRhdGVRdWV1ZSwgd2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBiYWlsZWQgb3V0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBwcmV2Q2hpbGRyZW4gPSBwcmV2U3RhdGUgIT09IG51bGwgPyBwcmV2U3RhdGUuZWxlbWVudCA6IG51bGw7XG4gIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgbnVsbCwgcmVuZGVyTGFuZXMpO1xuICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRTdGF0ZS5lbGVtZW50O1xuXG4gIGlmIChuZXh0Q2hpbGRyZW4gPT09IHByZXZDaGlsZHJlbikge1xuICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIHJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHJvb3QuaHlkcmF0ZSAmJiBlbnRlckh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKSkge1xuICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IGN1cnJlbnQgY2hpbGRyZW4gdGhpcyBtaWdodCBiZSB0aGUgZmlyc3QgcGFzcy5cbiAgICAvLyBXZSBhbHdheXMgdHJ5IHRvIGh5ZHJhdGUuIElmIHRoaXMgaXNuJ3QgYSBoeWRyYXRpb24gcGFzcyB0aGVyZSB3b24ndFxuICAgIC8vIGJlIGFueSBjaGlsZHJlbiB0byBoeWRyYXRlIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIHRoaW5nIGFzXG4gICAgLy8gbm90IGh5ZHJhdGluZy5cbiAgICB7XG4gICAgICB2YXIgbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YTtcblxuICAgICAgaWYgKG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgIT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGFbaV07XG4gICAgICAgICAgdmFyIHZlcnNpb24gPSBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhW2kgKyAxXTtcbiAgICAgICAgICBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSwgdmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hpbGQgPSBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGNoaWxkO1xuICAgIHZhciBub2RlID0gY2hpbGQ7XG5cbiAgICB3aGlsZSAobm9kZSkge1xuICAgICAgLy8gTWFyayBlYWNoIGNoaWxkIGFzIGh5ZHJhdGluZy4gVGhpcyBpcyBhIGZhc3QgcGF0aCB0byBrbm93IHdoZXRoZXIgdGhpc1xuICAgICAgLy8gdHJlZSBpcyBwYXJ0IG9mIGEgaHlkcmF0aW5nIHRyZWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBjaGlsZFxuICAgICAgLy8gbm9kZSBoYXMgZnVsbHkgbW91bnRlZCB5ZXQsIGFuZCBmb3Igc2NoZWR1bGluZyBldmVudCByZXBsYXlpbmcuXG4gICAgICAvLyBDb25jZXB0dWFsbHkgdGhpcyBpcyBzaW1pbGFyIHRvIFBsYWNlbWVudCBpbiB0aGF0IGEgbmV3IHN1YnRyZWUgaXNcbiAgICAgIC8vIGluc2VydGVkIGludG8gdGhlIFJlYWN0IHRyZWUgaGVyZS4gSXQganVzdCBoYXBwZW5zIHRvIG5vdCBuZWVkIERPTVxuICAgICAgLy8gbXV0YXRpb25zIGJlY2F1c2UgaXQgYWxyZWFkeSBleGlzdHMuXG4gICAgICBub2RlLmZsYWdzID0gbm9kZS5mbGFncyAmIH5QbGFjZW1lbnQgfCBIeWRyYXRpbmc7XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UgcmVzZXQgaHlkcmF0aW9uIHN0YXRlIGluIGNhc2Ugd2UgYWJvcnRlZCBhbmQgcmVzdW1lZCBhbm90aGVyXG4gICAgLy8gcm9vdC5cbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpO1xuICB9XG5cbiAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcHJldlByb3BzID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG51bGw7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhciBpc0RpcmVjdFRleHRDaGlsZCA9IHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIG5leHRQcm9wcyk7XG5cbiAgaWYgKGlzRGlyZWN0VGV4dENoaWxkKSB7XG4gICAgLy8gV2Ugc3BlY2lhbCBjYXNlIGEgZGlyZWN0IHRleHQgY2hpbGQgb2YgYSBob3N0IG5vZGUuIFRoaXMgaXMgYSBjb21tb25cbiAgICAvLyBjYXNlLiBXZSB3b24ndCBoYW5kbGUgaXQgYXMgYSByZWlmaWVkIGNoaWxkLiBXZSB3aWxsIGluc3RlYWQgaGFuZGxlXG4gICAgLy8gdGhpcyBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudCB0aGF0IGFsc28gaGFzIGFjY2VzcyB0byB0aGlzIHByb3AuIFRoYXRcbiAgICAvLyBhdm9pZHMgYWxsb2NhdGluZyBhbm90aGVyIEhvc3RUZXh0IGZpYmVyIGFuZCB0cmF2ZXJzaW5nIGl0LlxuICAgIG5leHRDaGlsZHJlbiA9IG51bGw7XG4gIH0gZWxzZSBpZiAocHJldlByb3BzICE9PSBudWxsICYmIHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIHByZXZQcm9wcykpIHtcbiAgICAvLyBJZiB3ZSdyZSBzd2l0Y2hpbmcgZnJvbSBhIGRpcmVjdCB0ZXh0IGNoaWxkIHRvIGEgbm9ybWFsIGNoaWxkLCBvciB0b1xuICAgIC8vIGVtcHR5LCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHRoZSB0ZXh0IGNvbnRlbnQgdG8gYmUgcmVzZXQuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ29udGVudFJlc2V0O1xuICB9XG5cbiAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0VGV4dChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcbiAgfSAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIFRoaXMgaXMgdGVybWluYWwuIFdlJ2xsIGRvIHRoZSBjb21wbGV0aW9uIHN0ZXBcbiAgLy8gaW1tZWRpYXRlbHkgYWZ0ZXIuXG5cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbW91bnRMYXp5Q29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZWxlbWVudFR5cGUsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBIGxhenkgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIGxhenlDb21wb25lbnQgPSBlbGVtZW50VHlwZTtcbiAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG4gIHZhciBDb21wb25lbnQgPSBpbml0KHBheWxvYWQpOyAvLyBTdG9yZSB0aGUgdW53cmFwcGVkIGNvbXBvbmVudCBpbiB0aGUgdHlwZS5cblxuICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50O1xuICB2YXIgcmVzb2x2ZWRUYWcgPSB3b3JrSW5Qcm9ncmVzcy50YWcgPSByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpO1xuICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBwcm9wcyk7XG4gIHZhciBjaGlsZDtcblxuICBzd2l0Y2ggKHJlc29sdmVkVGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRm9yd2FyZFJlZihudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCByZXNvbHZlZFByb3BzLCAvLyBSZXNvbHZlZCBmb3Igb3V0ZXIgb25seVxuICAgICAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVNZW1vQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LnR5cGUsIHJlc29sdmVkUHJvcHMpLCAvLyBUaGUgaW5uZXIgdHlwZSBjYW4gaGF2ZSBkZWZhdWx0cyB0b29cbiAgICAgICAgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICB9XG5cbiAgdmFyIGhpbnQgPSAnJztcblxuICB7XG4gICAgaWYgKENvbXBvbmVudCAhPT0gbnVsbCAmJiB0eXBlb2YgQ29tcG9uZW50ID09PSAnb2JqZWN0JyAmJiBDb21wb25lbnQuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgaGludCA9ICcgRGlkIHlvdSB3cmFwIGEgY29tcG9uZW50IGluIFJlYWN0LmxhenkoKSBtb3JlIHRoYW4gb25jZT8nO1xuICAgIH1cbiAgfSAvLyBUaGlzIG1lc3NhZ2UgaW50ZW50aW9uYWxseSBkb2Vzbid0IG1lbnRpb24gRm9yd2FyZFJlZiBvciBNZW1vQ29tcG9uZW50XG4gIC8vIGJlY2F1c2UgdGhlIGZhY3QgdGhhdCBpdCdzIGEgc2VwYXJhdGUgdHlwZSBvZiB3b3JrIGlzIGFuXG4gIC8vIGltcGxlbWVudGF0aW9uIGRldGFpbC5cblxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZC4gUmVjZWl2ZWQgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG86IFwiICsgQ29tcG9uZW50ICsgXCIuIExhenkgZWxlbWVudCB0eXBlIG11c3QgcmVzb2x2ZSB0byBhIGNsYXNzIG9yIGZ1bmN0aW9uLlwiICsgaGludCApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBbiBpbmNvbXBsZXRlIGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH0gLy8gUHJvbW90ZSB0aGUgZmliZXIgdG8gYSBjbGFzcyBhbmQgdHJ5IHJlbmRlcmluZyBhZ2Fpbi5cblxuXG4gIHdvcmtJblByb2dyZXNzLnRhZyA9IENsYXNzQ29tcG9uZW50OyAvLyBUaGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGEgZm9yayBvZiBgdXBkYXRlQ2xhc3NDb21wb25lbnRgXG4gIC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG4gIHZhciBoYXNDb250ZXh0O1xuXG4gIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gZWxzZSB7XG4gICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpO1xuICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiBmaW5pc2hDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKF9jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gQW4gaW5kZXRlcm1pbmF0ZSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgY29udGV4dDtcblxuICB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBmYWxzZSk7XG4gICAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgdmFsdWU7XG5cbiAge1xuICAgIGlmIChDb21wb25lbnQucHJvdG90eXBlICYmIHR5cGVvZiBDb21wb25lbnQucHJvdG90eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEJhZENsYXNzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKFwiVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBoYXZlIGEgcmVuZGVyIG1ldGhvZCwgYnV0IGRvZXNuJ3QgZXh0ZW5kIFJlYWN0LkNvbXBvbmVudC4gXCIgKyAnVGhpcyBpcyBsaWtlbHkgdG8gY2F1c2UgZXJyb3JzLiBDaGFuZ2UgJXMgdG8gZXh0ZW5kIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dEJhZENsYXNzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKHdvcmtJblByb2dyZXNzLCBudWxsKTtcbiAgICB9XG5cbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICB2YWx1ZSA9IHJlbmRlcldpdGhIb29rcyhudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuXG4gIHtcbiAgICAvLyBTdXBwb3J0IGZvciBtb2R1bGUgY29tcG9uZW50cyBpcyBkZXByZWNhdGVkIGFuZCBpcyByZW1vdmVkIGJlaGluZCBhIGZsYWcuXG4gICAgLy8gV2hldGhlciBvciBub3QgaXQgd291bGQgY3Jhc2ggbGF0ZXIsIHdlIHdhbnQgdG8gc2hvdyBhIGdvb2QgbWVzc2FnZSBpbiBERVYgZmlyc3QuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb24gY29tcG9uZW50IHRoYXQgcmV0dXJucyBhIGNsYXNzIGluc3RhbmNlLiAnICsgJ0NoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gJyArIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArIFwiYCVzLnByb3RvdHlwZSA9IFJlYWN0LkNvbXBvbmVudC5wcm90b3R5cGVgLiBEb24ndCB1c2UgYW4gYXJyb3cgZnVuY3Rpb24gc2luY2UgaXQgXCIgKyAnY2Fubm90IGJlIGNhbGxlZCB3aXRoIGBuZXdgIGJ5IFJlYWN0LicsIF9jb21wb25lbnROYW1lLCBfY29tcG9uZW50TmFtZSwgX2NvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIC8vIFJ1biB0aGVzZSBjaGVja3MgaW4gcHJvZHVjdGlvbiBvbmx5IGlmIHRoZSBmbGFnIGlzIG9mZi5cbiAgLy8gRXZlbnR1YWxseSB3ZSdsbCBkZWxldGUgdGhpcyBicmFuY2ggYWx0b2dldGhlci5cbiAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lMiA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTJdKSB7XG4gICAgICAgIGVycm9yKCdUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb24gY29tcG9uZW50IHRoYXQgcmV0dXJucyBhIGNsYXNzIGluc3RhbmNlLiAnICsgJ0NoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gJyArIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArIFwiYCVzLnByb3RvdHlwZSA9IFJlYWN0LkNvbXBvbmVudC5wcm90b3R5cGVgLiBEb24ndCB1c2UgYW4gYXJyb3cgZnVuY3Rpb24gc2luY2UgaXQgXCIgKyAnY2Fubm90IGJlIGNhbGxlZCB3aXRoIGBuZXdgIGJ5IFJlYWN0LicsIF9jb21wb25lbnROYW1lMiwgX2NvbXBvbmVudE5hbWUyLCBfY29tcG9uZW50TmFtZTIpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWUyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSAvLyBQcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIGNsYXNzIGluc3RhbmNlXG5cblxuICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IENsYXNzQ29tcG9uZW50OyAvLyBUaHJvdyBvdXQgYW55IGhvb2tzIHRoYXQgd2VyZSB1c2VkLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsOyAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAgIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgICB2YXIgaGFzQ29udGV4dCA9IGZhbHNlO1xuXG4gICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gdmFsdWUuc3RhdGUgIT09IG51bGwgJiYgdmFsdWUuc3RhdGUgIT09IHVuZGVmaW5lZCA/IHZhbHVlLnN0YXRlIDogbnVsbDtcbiAgICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICAgIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuXG4gICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgcHJvcHMpO1xuICAgIH1cblxuICAgIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgdmFsdWUpO1xuICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBmaW5pc2hDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHJvY2VlZCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbiBjb21wb25lbnRcbiAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBGdW5jdGlvbkNvbXBvbmVudDtcblxuICAgIHtcblxuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsdWUgPSByZW5kZXJXaXRoSG9va3MobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlY29uY2lsZUNoaWxkcmVuKG51bGwsIHdvcmtJblByb2dyZXNzLCB2YWx1ZSwgcmVuZGVyTGFuZXMpO1xuXG4gICAge1xuICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCkge1xuICB7XG4gICAgaWYgKENvbXBvbmVudCkge1xuICAgICAgaWYgKENvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcykge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogY2hpbGRDb250ZXh0VHlwZXMgY2Fubm90IGJlIGRlZmluZWQgb24gYSBmdW5jdGlvbiBjb21wb25lbnQuJywgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuICAgICAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG5cbiAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgICAgfVxuXG4gICAgICB2YXIgd2FybmluZ0tleSA9IG93bmVyTmFtZSB8fCB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJRCB8fCAnJztcbiAgICAgIHZhciBkZWJ1Z1NvdXJjZSA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZTtcblxuICAgICAgaWYgKGRlYnVnU291cmNlKSB7XG4gICAgICAgIHdhcm5pbmdLZXkgPSBkZWJ1Z1NvdXJjZS5maWxlTmFtZSArICc6JyArIGRlYnVnU291cmNlLmxpbmVOdW1iZXI7XG4gICAgICB9XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmc1t3YXJuaW5nS2V5XSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ0Z1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGJlIGdpdmVuIHJlZnMuICcgKyAnQXR0ZW1wdHMgdG8gYWNjZXNzIHRoaXMgcmVmIHdpbGwgZmFpbC4gJyArICdEaWQgeW91IG1lYW4gdG8gdXNlIFJlYWN0LmZvcndhcmRSZWYoKT8lcycsIGluZm8pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lMyA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTNdKSB7XG4gICAgICAgIGVycm9yKCclczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuJywgX2NvbXBvbmVudE5hbWUzKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgQ29tcG9uZW50LmNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBDb21wb25lbnQuY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTQgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTRdKSB7XG4gICAgICAgIGVycm9yKCclczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBjb250ZXh0VHlwZS4nLCBfY29tcG9uZW50TmFtZTQpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIFNVU1BFTkRFRF9NQVJLRVIgPSB7XG4gIGRlaHlkcmF0ZWQ6IG51bGwsXG4gIHJldHJ5TGFuZTogTm9MYW5lXG59O1xuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlTGFuZXM6IHJlbmRlckxhbmVzXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcykge1xuICByZXR1cm4ge1xuICAgIGJhc2VMYW5lczogbWVyZ2VMYW5lcyhwcmV2T2Zmc2NyZWVuU3RhdGUuYmFzZUxhbmVzLCByZW5kZXJMYW5lcylcbiAgfTtcbn0gLy8gVE9ETzogUHJvYmFibHkgc2hvdWxkIGlubGluZSB0aGlzIGJhY2tcblxuXG5mdW5jdGlvbiBzaG91bGRSZW1haW5PbkZhbGxiYWNrKHN1c3BlbnNlQ29udGV4dCwgY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIC8vIElmIHdlJ3JlIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0b1xuICAvLyByZW1haW4gb24gdGhhdCBmYWxsYmFjayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGNvbnRlbnQgaGFzIHJlc29sdmVkLlxuICAvLyBGb3IgZXhhbXBsZSwgU3VzcGVuc2VMaXN0IGNvb3JkaW5hdGVzIHdoZW4gbmVzdGVkIGNvbnRlbnQgYXBwZWFycy5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChzdXNwZW5zZVN0YXRlID09PSBudWxsKSB7XG4gICAgICAvLyBDdXJyZW50bHkgc2hvd2luZyBjb250ZW50LiBEb24ndCBoaWRlIGl0LCBldmVuIGlmIEZvcmNlU3VzcGVuc2VGYWxsYWNrXG4gICAgICAvLyBpcyB0cnVlLiBNb3JlIHByZWNpc2UgbmFtZSBtaWdodCBiZSBcIkZvcmNlUmVtYWluU3VzcGVuc2VGYWxsYmFja1wiLlxuICAgICAgLy8gTm90ZTogVGhpcyBpcyBhIGZhY3RvcmluZyBzbWVsbC4gQ2FuJ3QgcmVtYWluIG9uIGEgZmFsbGJhY2sgaWYgdGhlcmUnc1xuICAgICAgLy8gbm8gZmFsbGJhY2sgdG8gcmVtYWluIG9uLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSAvLyBOb3QgY3VycmVudGx5IHNob3dpbmcgY29udGVudC4gQ29uc3VsdCB0aGUgU3VzcGVuc2UgY29udGV4dC5cblxuXG4gIHJldHVybiBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBTaG91bGQgbm90IHJlbW92ZSByZW5kZXIgbGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCBkdXJpbmcgdGhpcyByZW5kZXJcbiAgcmV0dXJuIHJlbW92ZUxhbmVzKGN1cnJlbnQuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wczsgLy8gVGhpcyBpcyB1c2VkIGJ5IERldlRvb2xzIHRvIGZvcmNlIGEgYm91bmRhcnkgdG8gc3VzcGVuZC5cblxuICB7XG4gICAgaWYgKHNob3VsZFN1c3BlbmQod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBzaG93RmFsbGJhY2sgPSBmYWxzZTtcbiAgdmFyIGRpZFN1c3BlbmQgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICBpZiAoZGlkU3VzcGVuZCB8fCBzaG91bGRSZW1haW5PbkZhbGxiYWNrKHN1c3BlbnNlQ29udGV4dCwgY3VycmVudCkpIHtcbiAgICAvLyBTb21ldGhpbmcgaW4gdGhpcyBib3VuZGFyeSdzIHN1YnRyZWUgYWxyZWFkeSBzdXNwZW5kZWQuIFN3aXRjaCB0b1xuICAgIC8vIHJlbmRlcmluZyB0aGUgZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgc2hvd0ZhbGxiYWNrID0gdHJ1ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+RGlkQ2FwdHVyZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBBdHRlbXB0aW5nIHRoZSBtYWluIGNvbnRlbnRcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBuZXcgbW91bnQgb3IgdGhpcyBib3VuZGFyeSBpcyBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBzdGF0ZS5cbiAgICAgIC8vIE1hcmsgdGhpcyBzdWJ0cmVlIGNvbnRleHQgYXMgaGF2aW5nIGF0IGxlYXN0IG9uZSBpbnZpc2libGUgcGFyZW50IHRoYXQgY291bGRcbiAgICAgIC8vIGhhbmRsZSB0aGUgZmFsbGJhY2sgc3RhdGUuXG4gICAgICAvLyBCb3VuZGFyaWVzIHdpdGhvdXQgZmFsbGJhY2tzIG9yIHNob3VsZCBiZSBhdm9pZGVkIGFyZSBub3QgY29uc2lkZXJlZCBzaW5jZVxuICAgICAgLy8gdGhleSBjYW5ub3QgaGFuZGxlIHByZWZlcnJlZCBmYWxsYmFjayBzdGF0ZXMuXG4gICAgICBpZiAobmV4dFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgbmV4dFByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlKSB7XG4gICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IGFkZFN1YnRyZWVTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7IC8vIE9LLCB0aGUgbmV4dCBwYXJ0IGlzIGNvbmZ1c2luZy4gV2UncmUgYWJvdXQgdG8gcmVjb25jaWxlIHRoZSBTdXNwZW5zZVxuICAvLyBib3VuZGFyeSdzIGNoaWxkcmVuLiBUaGlzIGludm9sdmVzIHNvbWUgY3VzdG9tIHJlY29uY2lsYXRpb24gbG9naWMuIFR3b1xuICAvLyBtYWluIHJlYXNvbnMgdGhpcyBpcyBzbyBjb21wbGljYXRlZC5cbiAgLy9cbiAgLy8gRmlyc3QsIExlZ2FjeSBNb2RlIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhlXG4gIC8vIHByaW1hcnkgdHJlZSB3aWxsIGNvbW1pdCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUsIHNvIHdoZW4gd2UgZG8gdGhlXG4gIC8vIHNlY29uZCBwYXNzIHRvIHJlbmRlciB0aGUgZmFsbGJhY2ssIHdlIGRvIHNvbWUgZXhjZWVkaW5nbHksIHVoLCBjbGV2ZXJcbiAgLy8gaGFja3MgdG8gbWFrZSB0aGF0IG5vdCB0b3RhbGx5IGJyZWFrLiBMaWtlIHRyYW5zZmVycmluZyBlZmZlY3RzIGFuZFxuICAvLyBkZWxldGlvbnMgZnJvbSBoaWRkZW4gdHJlZS4gSW4gQ29uY3VycmVudCBNb2RlLCBpdCdzIG11Y2ggc2ltcGxlcixcbiAgLy8gYmVjYXVzZSB3ZSBiYWlsb3V0IG9uIHRoZSBwcmltYXJ5IHRyZWUgY29tcGxldGVseSBhbmQgbGVhdmUgaXQgaW4gaXRzIG9sZFxuICAvLyBzdGF0ZSwgbm8gZWZmZWN0cy4gU2FtZSBhcyB3aGF0IHdlIGRvIGZvciBPZmZzY3JlZW4gKGV4Y2VwdCB0aGF0XG4gIC8vIE9mZnNjcmVlbiBkb2Vzbid0IGhhdmUgdGhlIGZpcnN0IHJlbmRlciBwYXNzKS5cbiAgLy9cbiAgLy8gU2Vjb25kIGlzIGh5ZHJhdGlvbi4gRHVyaW5nIGh5ZHJhdGlvbiwgdGhlIFN1c3BlbnNlIGZpYmVyIGhhcyBhIHNsaWdodGx5XG4gIC8vIGRpZmZlcmVudCBsYXlvdXQsIHdoZXJlIHRoZSBjaGlsZCBwb2ludHMgdG8gYSBkZWh5ZHJhdGVkIGZyYWdtZW50LCB3aGljaFxuICAvLyBjb250YWlucyB0aGUgRE9NIHJlbmRlcmVkIGJ5IHRoZSBzZXJ2ZXIuXG4gIC8vXG4gIC8vIFRoaXJkLCBldmVuIGlmIHlvdSBzZXQgYWxsIHRoYXQgYXNpZGUsIFN1c3BlbnNlIGlzIGxpa2UgZXJyb3IgYm91bmRhcmllcyBpblxuICAvLyB0aGF0IHdlIGZpcnN0IHdlIHRyeSB0byByZW5kZXIgb25lIHRyZWUsIGFuZCBpZiB0aGF0IGZhaWxzLCB3ZSByZW5kZXIgYWdhaW5cbiAgLy8gYW5kIHN3aXRjaCB0byBhIGRpZmZlcmVudCB0cmVlLiBMaWtlIGEgdHJ5L2NhdGNoIGJsb2NrLiBTbyB3ZSBoYXZlIHRvIHRyYWNrXG4gIC8vIHdoaWNoIGJyYW5jaCB3ZSdyZSBjdXJyZW50bHkgcmVuZGVyaW5nLiBJZGVhbGx5IHdlIHdvdWxkIG1vZGVsIHRoaXMgdXNpbmdcbiAgLy8gYSBzdGFjay5cblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICAvLyBJZiB3ZSdyZSBjdXJyZW50bHkgaHlkcmF0aW5nLCB0cnkgdG8gaHlkcmF0ZSB0aGlzIGJvdW5kYXJ5LlxuICAgIC8vIEJ1dCBvbmx5IGlmIHRoaXMgaGFzIGEgZmFsbGJhY2suXG4gICAgaWYgKG5leHRQcm9wcy5mYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7IC8vIFRoaXMgY291bGQndmUgYmVlbiBhIGRlaHlkcmF0ZWQgc3VzcGVuc2UgY29tcG9uZW50LlxuICAgIH1cblxuICAgIHZhciBuZXh0UHJpbWFyeUNoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBuZXh0RmFsbGJhY2tDaGlsZHJlbiA9IG5leHRQcm9wcy5mYWxsYmFjaztcblxuICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgIHZhciBmYWxsYmFja0ZyYWdtZW50ID0gbW91bnRTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIG5leHRGYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50Lm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICByZXR1cm4gZmFsbGJhY2tGcmFnbWVudDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcHMudW5zdGFibGVfZXhwZWN0ZWRMb2FkVGltZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBDUFUtYm91bmQgdHJlZS4gU2tpcCB0aGlzIHRyZWUgYW5kIHNob3cgYSBwbGFjZWhvbGRlciB0b1xuICAgICAgLy8gdW5ibG9jayB0aGUgc3Vycm91bmRpbmcgY29udGVudC4gVGhlbiBpbW1lZGlhdGVseSByZXRyeSBhZnRlciB0aGVcbiAgICAgIC8vIGluaXRpYWwgY29tbWl0LlxuICAgICAgdmFyIF9mYWxsYmFja0ZyYWdtZW50ID0gbW91bnRTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIG5leHRGYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudC5tZW1vaXplZFN0YXRlID0gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpcyB0b1xuICAgICAgLy8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zIG9mXG4gICAgICAvLyBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsIGl0J3NcbiAgICAgIC8vIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXMgY29tbWl0dGVkLiBJZlxuICAgICAgLy8gaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlIHBhaW50ZWQuXG4gICAgICAvLyBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuIFdlIGNhbiB1c2UgYW55XG4gICAgICAvLyBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZyBzaW5jZSB3ZSdyZSBsZWF2aW5nXG4gICAgICAvLyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgIHtcbiAgICAgICAgbWFya1NwYXduZWRXb3JrKFNvbWVSZXRyeUxhbmUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2ZhbGxiYWNrRnJhZ21lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYW4gdXBkYXRlLlxuICAgIC8vIElmIHRoZSBjdXJyZW50IGZpYmVyIGhhcyBhIFN1c3BlbnNlU3RhdGUsIHRoYXQgbWVhbnMgaXQncyBhbHJlYWR5IHNob3dpbmdcbiAgICAvLyBhIGZhbGxiYWNrLlxuICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG5cbiAgICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgICAgdmFyIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjIgPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjIgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQgPSB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiwgX25leHRGYWxsYmFja0NoaWxkcmVuMiwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgIHZhciBwcmV2T2Zmc2NyZWVuU3RhdGUgPSBjdXJyZW50LmNoaWxkLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMubWVtb2l6ZWRTdGF0ZSA9IHByZXZPZmZzY3JlZW5TdGF0ZSA9PT0gbnVsbCA/IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykgOiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzLmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgICByZXR1cm4gX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjMgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDQgPSB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW4zLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY3VycmVudCB0cmVlIGlzIG5vdCBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjay5cbiAgICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgICAgLy8gVGltZWQgb3V0LlxuICAgICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkcmVuMyA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuNCA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDIgPSB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuNCwgX25leHRGYWxsYmFja0NoaWxkcmVuMywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ1ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgIHZhciBfcHJldk9mZnNjcmVlblN0YXRlID0gY3VycmVudC5jaGlsZC5tZW1vaXplZFN0YXRlO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ1Lm1lbW9pemVkU3RhdGUgPSBfcHJldk9mZnNjcmVlblN0YXRlID09PSBudWxsID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSA6IHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUoX3ByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ1LmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCByZW5kZXJMYW5lcyk7IC8vIFNraXAgdGhlIHByaW1hcnkgY2hpbGRyZW4sIGFuZCBjb250aW51ZSB3b3JraW5nIG9uIHRoZVxuICAgICAgICAvLyBmYWxsYmFjayBjaGlsZHJlbi5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgcmV0dXJuIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU3RpbGwgaGF2ZW4ndCB0aW1lZCBvdXQuIENvbnRpbnVlIHJlbmRlcmluZyB0aGUgY2hpbGRyZW4sIGxpa2Ugd2VcbiAgICAgICAgLy8gbm9ybWFsbHkgZG8uXG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjUgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDYgPSB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW41LCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ2O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICd2aXNpYmxlJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwcmltYXJ5Q2hpbGRQcm9wcywgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCBmYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAnaGlkZGVuJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUgJiYgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIC8vIEluIGxlZ2FjeSBtb2RlLCB3ZSBjb21taXQgdGhlIHByaW1hcnkgdHJlZSBhcyBpZiBpdCBzdWNjZXNzZnVsbHlcbiAgICAvLyBjb21wbGV0ZWQsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5wZW5kaW5nUHJvcHMgPSBwcmltYXJ5Q2hpbGRQcm9wcztcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAvLyBSZXNldCB0aGUgZHVyYXRpb25zIGZyb20gdGhlIGZpcnN0IHBhc3Mgc28gdGhleSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlXG4gICAgICAvLyBmaW5hbCBhbW91bnRzLiBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUsIHNpbmNlIHdlJ3JlIGludGVudGlvbmFsbHlcbiAgICAgIC8vIG5vdCBtZWFzdXJpbmcgcGFydCBvZiB0aGUgcmVuZGVyIHBoYXNlLCBidXQgdGhpcyBtYWtlcyBpdCBtYXRjaCB3aGF0IHdlXG4gICAgICAvLyBkbyBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gICAgfVxuXG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICB9IGVsc2Uge1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHByaW1hcnlDaGlsZFByb3BzLCBtb2RlLCBOb0xhbmVzLCBudWxsKTtcbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIH1cblxuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnQsIG9mZnNjcmVlblByb3BzKSB7XG4gIC8vIFRoZSBwcm9wcyBhcmd1bWVudCB0byBgY3JlYXRlV29ya0luUHJvZ3Jlc3NgIGlzIGBhbnlgIHR5cGVkLCBzbyB3ZSB1c2UgdGhpc1xuICAvLyB3cmFwcGVyIGZ1bmN0aW9uIHRvIGNvbnN0cmFpbiBpdC5cbiAgcmV0dXJuIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIG9mZnNjcmVlblByb3BzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHZhciBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmc7XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LCB7XG4gICAgbW9kZTogJ3Zpc2libGUnLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfSk7XG5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubGFuZXMgPSByZW5kZXJMYW5lcztcbiAgfVxuXG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gbnVsbDtcblxuICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIC8vIERlbGV0ZSB0aGUgZmFsbGJhY2sgY2hpbGQgZnJhZ21lbnRcbiAgICBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQuZmxhZ3MgPSBEZWxldGlvbjtcbiAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgZmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZztcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICdoaWRkZW4nLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuXG4gIGlmICggLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAvLyBjb21wbGV0ZWQsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuICAobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSAmJiAvLyBNYWtlIHN1cmUgd2UncmUgb24gdGhlIHNlY29uZCBwYXNzLCBpLmUuIHRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50IHdhc1xuICAvLyBhbHJlYWR5IGNsb25lZC4gSW4gbGVnYWN5IG1vZGUsIHRoZSBvbmx5IGNhc2Ugd2hlcmUgdGhpcyBpc24ndCB0cnVlIGlzXG4gIC8vIHdoZW4gRGV2VG9vbHMgZm9yY2VzIHVzIHRvIGRpc3BsYXkgYSBmYWxsYmFjazsgd2Ugc2tpcCB0aGUgZmlyc3QgcmVuZGVyXG4gIC8vIHBhc3MgZW50aXJlbHkgYW5kIGdvIHN0cmFpZ2h0IHRvIHJlbmRlcmluZyB0aGUgZmFsbGJhY2suIChJbiBDb25jdXJyZW50XG4gIC8vIE1vZGUsIFN1c3BlbnNlTGlzdCBjYW4gYWxzbyB0cmlnZ2VyIHRoaXMgc2NlbmFyaW8sIGJ1dCB0aGlzIGlzIGEgbGVnYWN5LVxuICAvLyBvbmx5IGNvZGVwYXRoLilcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgIT09IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCkge1xuICAgIHZhciBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50O1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBkdXJhdGlvbnMgZnJvbSB0aGUgZmlyc3QgcGFzcyBzbyB0aGV5IGFyZW4ndCBpbmNsdWRlZCBpbiB0aGVcbiAgICAgIC8vIGZpbmFsIGFtb3VudHMuIFRoaXMgc2VlbXMgY291bnRlcmludHVpdGl2ZSwgc2luY2Ugd2UncmUgaW50ZW50aW9uYWxseVxuICAgICAgLy8gbm90IG1lYXN1cmluZyBwYXJ0IG9mIHRoZSByZW5kZXIgcGhhc2UsIGJ1dCB0aGlzIG1ha2VzIGl0IG1hdGNoIHdoYXQgd2VcbiAgICAgIC8vIGRvIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgIH0gLy8gVGhlIGZhbGxiYWNrIGZpYmVyIHdhcyBhZGRlZCBhcyBhIGRlbGV0aW9uIGVmZmVjdCBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuXG4gICAgLy8gSG93ZXZlciwgc2luY2Ugd2UncmUgZ29pbmcgdG8gcmVtYWluIG9uIHRoZSBmYWxsYmFjaywgd2Ugbm8gbG9uZ2VyIHdhbnRcbiAgICAvLyB0byBkZWxldGUgaXQuIFNvIHdlIG5lZWQgdG8gcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QuIERlbGV0aW9ucyBhcmUgc3RvcmVkXG4gICAgLy8gb24gdGhlIHNhbWUgbGlzdCBhcyBlZmZlY3RzLiBXZSB3YW50IHRvIGtlZXAgdGhlIGVmZmVjdHMgZnJvbSB0aGUgcHJpbWFyeVxuICAgIC8vIHRyZWUuIFNvIHdlIGNvcHkgdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQncyBlZmZlY3QgbGlzdCwgd2hpY2ggZG9lcyBub3RcbiAgICAvLyBpbmNsdWRlIHRoZSBmYWxsYmFjayBkZWxldGlvbiBlZmZlY3QuXG5cblxuICAgIHZhciBwcm9ncmVzc2VkTGFzdEVmZmVjdCA9IHByaW1hcnlDaGlsZEZyYWdtZW50Lmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAocHJvZ3Jlc3NlZExhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQuZmlyc3RFZmZlY3Q7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcHJvZ3Jlc3NlZExhc3RFZmZlY3Q7XG4gICAgICBwcm9ncmVzc2VkTGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETzogUmVzZXQgdGhpcyBzb21ld2hlcmUgZWxzZT8gTG9sIGxlZ2FjeSBtb2RlIGlzIHNvIHdlaXJkLlxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCwgcHJpbWFyeUNoaWxkUHJvcHMpO1xuICB9XG5cbiAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQsIGZhbGxiYWNrQ2hpbGRyZW4pO1xuICB9IGVsc2Uge1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTsgLy8gTmVlZHMgYSBwbGFjZW1lbnQgZWZmZWN0IGJlY2F1c2UgdGhlIHBhcmVudCAodGhlIFN1c3BlbnNlIGJvdW5kYXJ5KSBhbHJlYWR5XG4gICAgLy8gbW91bnRlZCBidXQgdGhpcyBpcyBhIG5ldyBmaWJlci5cblxuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVdvcmtPbkZpYmVyKGZpYmVyLCByZW5kZXJMYW5lcykge1xuICBmaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoZmliZXIubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChmaWJlci5yZXR1cm4sIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gcHJvcGFnYXRlU3VzcGVuc2VDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBmaXJzdENoaWxkLCByZW5kZXJMYW5lcykge1xuICAvLyBNYXJrIGFueSBTdXNwZW5zZSBib3VuZGFyaWVzIHdpdGggZmFsbGJhY2tzIGFzIGhhdmluZyB3b3JrIHRvIGRvLlxuICAvLyBJZiB0aGV5IHdlcmUgcHJldmlvdXNseSBmb3JjZWQgaW50byBmYWxsYmFja3MsIHRoZXkgbWF5IG5vdyBiZSBhYmxlXG4gIC8vIHRvIHVuYmxvY2suXG4gIHZhciBub2RlID0gZmlyc3RDaGlsZDtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IG5vZGUubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHNjaGVkdWxlV29ya09uRmliZXIobm9kZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlTGlzdENvbXBvbmVudCkge1xuICAgICAgLy8gSWYgdGhlIHRhaWwgaXMgaGlkZGVuIHRoZXJlIG1pZ2h0IG5vdCBiZSBhbiBTdXNwZW5zZSBib3VuZGFyaWVzXG4gICAgICAvLyB0byBzY2hlZHVsZSB3b3JrIG9uLiBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBzY2hlZHVsZSBpdCBvbiB0aGVcbiAgICAgIC8vIGxpc3QgaXRzZWxmLlxuICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB0cmF2ZXJzZSB0byB0aGUgY2hpbGRyZW4gb2YgdGhlIGxpc3Qgc2luY2VcbiAgICAgIC8vIHRoZSBsaXN0IHdpbGwgcHJvcGFnYXRlIHRoZSBjaGFuZ2Ugd2hlbiBpdCByZXJlbmRlcnMuXG4gICAgICBzY2hlZHVsZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kTGFzdENvbnRlbnRSb3coZmlyc3RDaGlsZCkge1xuICAvLyBUaGlzIGlzIGdvaW5nIHRvIGZpbmQgdGhlIGxhc3Qgcm93IGFtb25nIHRoZXNlIGNoaWxkcmVuIHRoYXQgaXMgYWxyZWFkeVxuICAvLyBzaG93aW5nIGNvbnRlbnQgb24gdGhlIHNjcmVlbiwgYXMgb3Bwb3NlZCB0byBiZWluZyBpbiBmYWxsYmFjayBzdGF0ZSBvclxuICAvLyBuZXcuIElmIGEgcm93IGhhcyBtdWx0aXBsZSBTdXNwZW5zZSBib3VuZGFyaWVzLCBhbnkgb2YgdGhlbSBiZWluZyBpbiB0aGVcbiAgLy8gZmFsbGJhY2sgc3RhdGUsIGNvdW50cyBhcyB0aGUgd2hvbGUgcm93IGJlaW5nIGluIGEgZmFsbGJhY2sgc3RhdGUuXG4gIC8vIE5vdGUgdGhhdCB0aGUgXCJyb3dzXCIgd2lsbCBiZSB3b3JrSW5Qcm9ncmVzcywgYnV0IGFueSBuZXN0ZWQgY2hpbGRyZW5cbiAgLy8gd2lsbCBzdGlsbCBiZSBjdXJyZW50IHNpbmNlIHdlIGhhdmVuJ3QgcmVuZGVyZWQgdGhlbSB5ZXQuIFRoZSBtb3VudGVkXG4gIC8vIG9yZGVyIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIG5ldyBvcmRlci4gV2UgdXNlIHRoZSBuZXcgb3JkZXIuXG4gIHZhciByb3cgPSBmaXJzdENoaWxkO1xuICB2YXIgbGFzdENvbnRlbnRSb3cgPSBudWxsO1xuXG4gIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgIGlmIChjdXJyZW50Um93ICE9PSBudWxsICYmIGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50Um93KSA9PT0gbnVsbCkge1xuICAgICAgbGFzdENvbnRlbnRSb3cgPSByb3c7XG4gICAgfVxuXG4gICAgcm93ID0gcm93LnNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbGFzdENvbnRlbnRSb3c7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmV2ZWFsT3JkZXIocmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmIChyZXZlYWxPcmRlciAhPT0gdW5kZWZpbmVkICYmIHJldmVhbE9yZGVyICE9PSAnZm9yd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAnYmFja3dhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ3RvZ2V0aGVyJyAmJiAhZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdKSB7XG4gICAgICBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcltyZXZlYWxPcmRlcl0gPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIHJldmVhbE9yZGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjYXNlICd0b2dldGhlcic6XG4gICAgICAgICAgY2FzZSAnZm9yd2FyZHMnOlxuICAgICAgICAgIGNhc2UgJ2JhY2t3YXJkcyc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnVXNlIGxvd2VyY2FzZSBcIiVzXCIgaW5zdGVhZC4nLCByZXZlYWxPcmRlciwgcmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdmb3J3YXJkJzpcbiAgICAgICAgICBjYXNlICdiYWNrd2FyZCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnUmVhY3QgdXNlcyB0aGUgLXMgc3VmZml4IGluIHRoZSBzcGVsbGluZy4gVXNlIFwiJXNzXCIgaW5zdGVhZC4nLCByZXZlYWxPcmRlciwgcmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLCByZXZlYWxPcmRlcik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignJXMgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsIHJldmVhbE9yZGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUYWlsT3B0aW9ucyh0YWlsTW9kZSwgcmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmICh0YWlsTW9kZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0pIHtcbiAgICAgIGlmICh0YWlsTW9kZSAhPT0gJ2NvbGxhcHNlZCcgJiYgdGFpbE1vZGUgIT09ICdoaWRkZW4nKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHRhaWwgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJjb2xsYXBzZWRcIiBvciBcImhpZGRlblwiPycsIHRhaWxNb2RlKTtcbiAgICAgIH0gZWxzZSBpZiAocmV2ZWFsT3JkZXIgIT09ICdmb3J3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICdiYWNrd2FyZHMnKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJzxTdXNwZW5zZUxpc3QgdGFpbD1cIiVzXCIgLz4gaXMgb25seSB2YWxpZCBpZiByZXZlYWxPcmRlciBpcyAnICsgJ1wiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBzcGVjaWZ5IHJldmVhbE9yZGVyPVwiZm9yd2FyZHNcIj8nLCB0YWlsTW9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRTbG90LCBpbmRleCkge1xuICB7XG4gICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGNoaWxkU2xvdCk7XG4gICAgdmFyIGlzSXRlcmFibGUgPSAhaXNBcnJheSAmJiB0eXBlb2YgZ2V0SXRlcmF0b3JGbihjaGlsZFNsb3QpID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKGlzQXJyYXkgfHwgaXNJdGVyYWJsZSkge1xuICAgICAgdmFyIHR5cGUgPSBpc0FycmF5ID8gJ2FycmF5JyA6ICdpdGVyYWJsZSc7XG5cbiAgICAgIGVycm9yKCdBIG5lc3RlZCAlcyB3YXMgcGFzc2VkIHRvIHJvdyAjJXMgaW4gPFN1c3BlbnNlTGlzdCAvPi4gV3JhcCBpdCBpbiAnICsgJ2FuIGFkZGl0aW9uYWwgU3VzcGVuc2VMaXN0IHRvIGNvbmZpZ3VyZSBpdHMgcmV2ZWFsT3JkZXI6ICcgKyAnPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+IC4uLiAnICsgJzxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPnslc308L1N1c3BlbnNlTGlzdD4gLi4uICcgKyAnPC9TdXNwZW5zZUxpc3Q+JywgdHlwZSwgaW5kZXgsIHR5cGUpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4oY2hpbGRyZW4sIHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAoKHJldmVhbE9yZGVyID09PSAnZm9yd2FyZHMnIHx8IHJldmVhbE9yZGVyID09PSAnYmFja3dhcmRzJykgJiYgY2hpbGRyZW4gIT09IHVuZGVmaW5lZCAmJiBjaGlsZHJlbiAhPT0gbnVsbCAmJiBjaGlsZHJlbiAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkcmVuW2ldLCBpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2hpbGRyZW5JdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChjaGlsZHJlbik7XG5cbiAgICAgICAgICBpZiAoY2hpbGRyZW5JdGVyYXRvcikge1xuICAgICAgICAgICAgdmFyIHN0ZXAgPSBjaGlsZHJlbkl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIHZhciBfaSA9IDA7XG5cbiAgICAgICAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKHN0ZXAudmFsdWUsIF9pKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIF9pKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yKCdBIHNpbmdsZSByb3cgd2FzIHBhc3NlZCB0byBhIDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9XCIlc1wiIC8+LiAnICsgJ1RoaXMgaXMgbm90IHVzZWZ1bCBzaW5jZSBpdCBuZWVkcyBtdWx0aXBsZSByb3dzLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBwYXNzIG11bHRpcGxlIGNoaWxkcmVuIG9yIGFuIGFycmF5PycsIHJldmVhbE9yZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGlzQmFja3dhcmRzLCB0YWlsLCBsYXN0Q29udGVudFJvdywgdGFpbE1vZGUsIGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmcpIHtcbiAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocmVuZGVyU3RhdGUgPT09IG51bGwpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgaXNCYWNrd2FyZHM6IGlzQmFja3dhcmRzLFxuICAgICAgcmVuZGVyaW5nOiBudWxsLFxuICAgICAgcmVuZGVyaW5nU3RhcnRUaW1lOiAwLFxuICAgICAgbGFzdDogbGFzdENvbnRlbnRSb3csXG4gICAgICB0YWlsOiB0YWlsLFxuICAgICAgdGFpbE1vZGU6IHRhaWxNb2RlLFxuICAgICAgbGFzdEVmZmVjdDogbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZ1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgY2FuIHJldXNlIHRoZSBleGlzdGluZyBvYmplY3QgZnJvbSBwcmV2aW91cyByZW5kZXJzLlxuICAgIHJlbmRlclN0YXRlLmlzQmFja3dhcmRzID0gaXNCYWNrd2FyZHM7XG4gICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbnVsbDtcbiAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSAwO1xuICAgIHJlbmRlclN0YXRlLmxhc3QgPSBsYXN0Q29udGVudFJvdztcbiAgICByZW5kZXJTdGF0ZS50YWlsID0gdGFpbDtcbiAgICByZW5kZXJTdGF0ZS50YWlsTW9kZSA9IHRhaWxNb2RlO1xuICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nO1xuICB9XG59IC8vIFRoaXMgY2FuIGVuZCB1cCByZW5kZXJpbmcgdGhpcyBjb21wb25lbnQgbXVsdGlwbGUgcGFzc2VzLlxuLy8gVGhlIGZpcnN0IHBhc3Mgc3BsaXRzIHRoZSBjaGlsZHJlbiBmaWJlcnMgaW50byB0d28gc2V0cy4gQSBoZWFkIGFuZCB0YWlsLlxuLy8gV2UgZmlyc3QgcmVuZGVyIHRoZSBoZWFkLiBJZiBhbnl0aGluZyBpcyBpbiBmYWxsYmFjayBzdGF0ZSwgd2UgZG8gYW5vdGhlclxuLy8gcGFzcyB0aHJvdWdoIGJlZ2luV29yayB0byByZXJlbmRlciBhbGwgY2hpbGRyZW4gKGluY2x1ZGluZyB0aGUgdGFpbCkgd2l0aFxuLy8gdGhlIGZvcmNlIHN1c3BlbmQgY29udGV4dC4gSWYgdGhlIGZpcnN0IHJlbmRlciBkaWRuJ3QgaGF2ZSBhbnl0aGluZyBpblxuLy8gaW4gZmFsbGJhY2sgc3RhdGUuIFRoZW4gd2UgcmVuZGVyIGVhY2ggcm93IGluIHRoZSB0YWlsIG9uZS1ieS1vbmUuXG4vLyBUaGF0IGhhcHBlbnMgaW4gdGhlIGNvbXBsZXRlV29yayBwaGFzZSB3aXRob3V0IGdvaW5nIGJhY2sgdG8gYmVnaW5Xb3JrLlxuXG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHJldmVhbE9yZGVyID0gbmV4dFByb3BzLnJldmVhbE9yZGVyO1xuICB2YXIgdGFpbE1vZGUgPSBuZXh0UHJvcHMudGFpbDtcbiAgdmFyIG5ld0NoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YWxpZGF0ZVJldmVhbE9yZGVyKHJldmVhbE9yZGVyKTtcbiAgdmFsaWRhdGVUYWlsT3B0aW9ucyh0YWlsTW9kZSwgcmV2ZWFsT3JkZXIpO1xuICB2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuKG5ld0NoaWxkcmVuLCByZXZlYWxPcmRlcik7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuICB2YXIgc2hvdWxkRm9yY2VGYWxsYmFjayA9IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG5cbiAgaWYgKHNob3VsZEZvcmNlRmFsbGJhY2spIHtcbiAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICB9IGVsc2Uge1xuICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gY3VycmVudCAhPT0gbnVsbCAmJiAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgaWYgKGRpZFN1c3BlbmRCZWZvcmUpIHtcbiAgICAgIC8vIElmIHdlIHByZXZpb3VzbHkgZm9yY2VkIGEgZmFsbGJhY2ssIHdlIG5lZWQgdG8gc2NoZWR1bGUgd29ya1xuICAgICAgLy8gb24gYW55IG5lc3RlZCBib3VuZGFyaWVzIHRvIGxldCB0aGVtIGtub3cgdG8gdHJ5IHRvIHJlbmRlclxuICAgICAgLy8gYWdhaW4uIFRoaXMgaXMgdGhlIHNhbWUgYXMgY29udGV4dCB1cGRhdGluZy5cbiAgICAgIHByb3BhZ2F0ZVN1c3BlbnNlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MuY2hpbGQsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICB9XG5cbiAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTtcblxuICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAvLyBJbiBsZWdhY3kgbW9kZSwgU3VzcGVuc2VMaXN0IGRvZXNuJ3Qgd29yayBzbyB3ZSBqdXN0XG4gICAgLy8gdXNlIG1ha2UgaXQgYSBub29wIGJ5IHRyZWF0aW5nIGl0IGFzIHRoZSBkZWZhdWx0IHJldmVhbE9yZGVyLlxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIpIHtcbiAgICAgIGNhc2UgJ2ZvcndhcmRzJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXN0Q29udGVudFJvdyA9IGZpbmRMYXN0Q29udGVudFJvdyh3b3JrSW5Qcm9ncmVzcy5jaGlsZCk7XG4gICAgICAgICAgdmFyIHRhaWw7XG5cbiAgICAgICAgICBpZiAobGFzdENvbnRlbnRSb3cgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSB3aG9sZSBsaXN0IGlzIHBhcnQgb2YgdGhlIHRhaWwuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBjb3VsZCBmYXN0IHBhdGggYnkganVzdCByZW5kZXJpbmcgdGhlIHRhaWwgbm93LlxuICAgICAgICAgICAgdGFpbCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEaXNjb25uZWN0IHRoZSB0YWlsIHJvd3MgYWZ0ZXIgdGhlIGNvbnRlbnQgcm93LlxuICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gcmVuZGVyIHRoZW0gc2VwYXJhdGVseSBsYXRlci5cbiAgICAgICAgICAgIHRhaWwgPSBsYXN0Q29udGVudFJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgbGFzdENvbnRlbnRSb3cuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBmYWxzZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICB0YWlsLCBsYXN0Q29udGVudFJvdywgdGFpbE1vZGUsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2JhY2t3YXJkcyc6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBmaW5kIHRoZSBmaXJzdCByb3cgdGhhdCBoYXMgZXhpc3RpbmcgY29udGVudC5cbiAgICAgICAgICAvLyBBdCB0aGUgc2FtZSB0aW1lIHdlJ3JlIGdvaW5nIHRvIHJldmVyc2UgdGhlIGxpc3Qgb2YgZXZlcnl0aGluZ1xuICAgICAgICAgIC8vIHdlIHBhc3MgaW4gdGhlIG1lYW50aW1lLiBUaGF0J3MgZ29pbmcgdG8gYmUgb3VyIHRhaWwgaW4gcmV2ZXJzZVxuICAgICAgICAgIC8vIG9yZGVyLlxuICAgICAgICAgIHZhciBfdGFpbCA9IG51bGw7XG4gICAgICAgICAgdmFyIHJvdyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcblxuICAgICAgICAgIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Um93ID0gcm93LmFsdGVybmF0ZTsgLy8gTmV3IHJvd3MgY2FuJ3QgYmUgY29udGVudCByb3dzLlxuXG4gICAgICAgICAgICBpZiAoY3VycmVudFJvdyAhPT0gbnVsbCAmJiBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudFJvdykgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtYWluIGNvbnRlbnQuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcm93O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5leHRSb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgIHJvdy5zaWJsaW5nID0gX3RhaWw7XG4gICAgICAgICAgICBfdGFpbCA9IHJvdztcbiAgICAgICAgICAgIHJvdyA9IG5leHRSb3c7XG4gICAgICAgICAgfSAvLyBUT0RPOiBJZiB3b3JrSW5Qcm9ncmVzcy5jaGlsZCBpcyBudWxsLCB3ZSBjYW4gY29udGludWUgb24gdGhlIHRhaWwgaW1tZWRpYXRlbHkuXG5cblxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgdHJ1ZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICBfdGFpbCwgbnVsbCwgLy8gbGFzdFxuICAgICAgICAgIHRhaWxNb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICd0b2dldGhlcic6XG4gICAgICAgIHtcbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGZhbHNlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIG51bGwsIC8vIHRhaWxcbiAgICAgICAgICBudWxsLCAvLyBsYXN0XG4gICAgICAgICAgdW5kZWZpbmVkLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgLy8gVGhlIGRlZmF1bHQgcmV2ZWFsIG9yZGVyIGlzIHRoZSBzYW1lIGFzIG5vdCBoYXZpbmdcbiAgICAgICAgICAvLyBhIGJvdW5kYXJ5LlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVQb3J0YWxDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBQb3J0YWxzIGFyZSBzcGVjaWFsIGJlY2F1c2Ugd2UgZG9uJ3QgYXBwZW5kIHRoZSBjaGlsZHJlbiBkdXJpbmcgbW91bnRcbiAgICAvLyBidXQgYXQgY29tbWl0LiBUaGVyZWZvcmUgd2UgbmVlZCB0byB0cmFjayBpbnNlcnRpb25zIHdoaWNoIHRoZSBub3JtYWxcbiAgICAvLyBmbG93IGRvZXNuJ3QgZG8gZHVyaW5nIG1vdW50LiBUaGlzIGRvZXNuJ3QgaGFwcGVuIGF0IHRoZSByb290IGJlY2F1c2VcbiAgICAvLyB0aGUgcm9vdCBhbHdheXMgc3RhcnRzIHdpdGggYSBcImN1cnJlbnRcIiB3aXRoIGEgbnVsbCBjaGlsZC5cbiAgICAvLyBUT0RPOiBDb25zaWRlciB1bmlmeWluZyB0aGlzIHdpdGggaG93IHRoZSByb290IHdvcmtzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxudmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIHByb3ZpZGVyVHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJUeXBlLl9jb250ZXh0O1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIHZhciBuZXdWYWx1ZSA9IG5ld1Byb3BzLnZhbHVlO1xuXG4gIHtcbiAgICBpZiAoISgndmFsdWUnIGluIG5ld1Byb3BzKSkge1xuICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlcikge1xuICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1RoZSBgdmFsdWVgIHByb3AgaXMgcmVxdWlyZWQgZm9yIHRoZSBgPENvbnRleHQuUHJvdmlkZXI+YC4gRGlkIHlvdSBtaXNzcGVsbCBpdCBvciBmb3JnZXQgdG8gcGFzcyBpdD8nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvdmlkZXJQcm9wVHlwZXMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLnByb3BUeXBlcztcblxuICAgIGlmIChwcm92aWRlclByb3BUeXBlcykge1xuICAgICAgY2hlY2tQcm9wVHlwZXMocHJvdmlkZXJQcm9wVHlwZXMsIG5ld1Byb3BzLCAncHJvcCcsICdDb250ZXh0LlByb3ZpZGVyJyk7XG4gICAgfVxuICB9XG5cbiAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBuZXdWYWx1ZSk7XG5cbiAgaWYgKG9sZFByb3BzICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFZhbHVlID0gb2xkUHJvcHMudmFsdWU7XG4gICAgdmFyIGNoYW5nZWRCaXRzID0gY2FsY3VsYXRlQ2hhbmdlZEJpdHMoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcblxuICAgIGlmIChjaGFuZ2VkQml0cyA9PT0gMCkge1xuICAgICAgLy8gTm8gY2hhbmdlLiBCYWlsb3V0IGVhcmx5IGlmIGNoaWxkcmVuIGFyZSB0aGUgc2FtZS5cbiAgICAgIGlmIChvbGRQcm9wcy5jaGlsZHJlbiA9PT0gbmV3UHJvcHMuY2hpbGRyZW4gJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkpIHtcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGNvbnRleHQgdmFsdWUgY2hhbmdlZC4gU2VhcmNoIGZvciBtYXRjaGluZyBjb25zdW1lcnMgYW5kIHNjaGVkdWxlXG4gICAgICAvLyB0aGVtIHRvIHVwZGF0ZS5cbiAgICAgIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIGNoYW5nZWRCaXRzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld0NoaWxkcmVuID0gbmV3UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbnZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnR5cGU7IC8vIFRoZSBsb2dpYyBiZWxvdyBmb3IgQ29udGV4dCBkaWZmZXJzIGRlcGVuZGluZyBvbiBQUk9EIG9yIERFViBtb2RlLiBJblxuICAvLyBERVYgbW9kZSwgd2UgY3JlYXRlIGEgc2VwYXJhdGUgb2JqZWN0IGZvciBDb250ZXh0LkNvbnN1bWVyIHRoYXQgYWN0c1xuICAvLyBsaWtlIGEgcHJveHkgdG8gQ29udGV4dC4gVGhpcyBwcm94eSBvYmplY3QgYWRkcyB1bm5lY2Vzc2FyeSBjb2RlIGluIFBST0RcbiAgLy8gc28gd2UgdXNlIHRoZSBvbGQgYmVoYXZpb3VyIChDb250ZXh0LkNvbnN1bWVyIHJlZmVyZW5jZXMgQ29udGV4dCkgdG9cbiAgLy8gcmVkdWNlIHNpemUgYW5kIG92ZXJoZWFkLiBUaGUgc2VwYXJhdGUgb2JqZWN0IHJlZmVyZW5jZXMgY29udGV4dCB2aWFcbiAgLy8gYSBwcm9wZXJ0eSBjYWxsZWQgXCJfY29udGV4dFwiLCB3aGljaCBhbHNvIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrXG4gIC8vIGluIERFViBtb2RlIGlmIHRoaXMgcHJvcGVydHkgZXhpc3RzIG9yIG5vdCBhbmQgd2FybiBpZiBpdCBkb2VzIG5vdC5cblxuICB7XG4gICAgaWYgKGNvbnRleHQuX2NvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVGhpcyBtYXkgYmUgYmVjYXVzZSBpdCdzIGEgQ29udGV4dCAocmF0aGVyIHRoYW4gYSBDb25zdW1lcikuXG4gICAgICAvLyBPciBpdCBtYXkgYmUgYmVjYXVzZSBpdCdzIG9sZGVyIFJlYWN0IHdoZXJlIHRoZXkncmUgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gd2FybiBpZiB3ZSdyZSBzdXJlIGl0J3MgYSBuZXcgUmVhY3QuXG4gICAgICBpZiAoY29udGV4dCAhPT0gY29udGV4dC5Db25zdW1lcikge1xuICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lcikge1xuICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0PiBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LkNvbnN1bWVyPiBpbnN0ZWFkPycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0Ll9jb250ZXh0O1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHJlbmRlciA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIHJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0EgY29udGV4dCBjb25zdW1lciB3YXMgcmVuZGVyZWQgd2l0aCBtdWx0aXBsZSBjaGlsZHJlbiwgb3IgYSBjaGlsZCAnICsgXCJ0aGF0IGlzbid0IGEgZnVuY3Rpb24uIEEgY29udGV4dCBjb25zdW1lciBleHBlY3RzIGEgc2luZ2xlIGNoaWxkIFwiICsgJ3RoYXQgaXMgYSBmdW5jdGlvbi4gSWYgeW91IGRpZCBwYXNzIGEgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0aGVyZSAnICsgJ2lzIG5vIHRyYWlsaW5nIG9yIGxlYWRpbmcgd2hpdGVzcGFjZSBhcm91bmQgaXQuJyk7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIG5ld1ZhbHVlID0gcmVhZENvbnRleHQoY29udGV4dCwgbmV3UHJvcHMudW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbiAgdmFyIG5ld0NoaWxkcmVuO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXdDaGlsZHJlbiA9IHJlbmRlcihuZXdWYWx1ZSk7XG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCkge1xuICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBSZXVzZSBwcmV2aW91cyBkZXBlbmRlbmNpZXNcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgfVxuXG4gIHtcbiAgICAvLyBEb24ndCB1cGRhdGUgXCJiYXNlXCIgcmVuZGVyIHRpbWVzIGZvciBiYWlsb3V0cy5cbiAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZygpO1xuICB9XG5cbiAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcyk7IC8vIENoZWNrIGlmIHRoZSBjaGlsZHJlbiBoYXZlIGFueSBwZW5kaW5nIHdvcmsuXG5cbiAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSkge1xuICAgIC8vIFRoZSBjaGlsZHJlbiBkb24ndCBoYXZlIGFueSB3b3JrIGVpdGhlci4gV2UgY2FuIHNraXAgdGhlbS5cbiAgICAvLyBUT0RPOiBPbmNlIHdlIGFkZCBiYWNrIHJlc3VtaW5nLCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIGNoaWxkcmVuIGFyZVxuICAgIC8vIGEgd29yay1pbi1wcm9ncmVzcyBzZXQuIElmIHNvLCB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZWlyIGVmZmVjdHMuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBmaWJlciBkb2Vzbid0IGhhdmUgd29yaywgYnV0IGl0cyBzdWJ0cmVlIGRvZXMuIENsb25lIHRoZSBjaGlsZFxuICAgIC8vIGZpYmVycyBhbmQgY29udGludWUuXG4gICAgY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW91bnRGaWJlcihjdXJyZW50LCBvbGRXb3JrSW5Qcm9ncmVzcywgbmV3V29ya0luUHJvZ3Jlc3MpIHtcbiAge1xuICAgIHZhciByZXR1cm5GaWJlciA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcblxuICAgIGlmIChyZXR1cm5GaWJlciA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3dhcCB0aGUgcm9vdCBmaWJlci4nKTtcbiAgICB9IC8vIERpc2Nvbm5lY3QgZnJvbSB0aGUgb2xkIGN1cnJlbnQuXG4gICAgLy8gSXQgd2lsbCBnZXQgZGVsZXRlZC5cblxuXG4gICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIG9sZFdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIENvbm5lY3QgdG8gdGhlIG5ldyB0cmVlLlxuXG4gICAgbmV3V29ya0luUHJvZ3Jlc3MuaW5kZXggPSBvbGRXb3JrSW5Qcm9ncmVzcy5pbmRleDtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gb2xkV29ya0luUHJvZ3Jlc3Muc2libGluZztcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5yZXR1cm4gPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MucmVmID0gb2xkV29ya0luUHJvZ3Jlc3MucmVmOyAvLyBSZXBsYWNlIHRoZSBjaGlsZC9zaWJsaW5nIHBvaW50ZXJzIGFib3ZlIGl0LlxuXG4gICAgaWYgKG9sZFdvcmtJblByb2dyZXNzID09PSByZXR1cm5GaWJlci5jaGlsZCkge1xuICAgICAgcmV0dXJuRmliZXIuY2hpbGQgPSBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHByZXZTaWJsaW5nID0gcmV0dXJuRmliZXIuY2hpbGQ7XG5cbiAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBhcmVudCB0byBoYXZlIGEgY2hpbGQuJyk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChwcmV2U2libGluZy5zaWJsaW5nICE9PSBvbGRXb3JrSW5Qcm9ncmVzcykge1xuICAgICAgICBwcmV2U2libGluZyA9IHByZXZTaWJsaW5nLnNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byBmaW5kIHRoZSBwcmV2aW91cyBzaWJsaW5nLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByZXZTaWJsaW5nLnNpYmxpbmcgPSBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgICB9IC8vIERlbGV0ZSB0aGUgb2xkIGZpYmVyIGFuZCBwbGFjZSB0aGUgbmV3IG9uZS5cbiAgICAvLyBTaW5jZSB0aGUgb2xkIGZpYmVyIGlzIGRpc2Nvbm5lY3RlZCwgd2UgaGF2ZSB0byBzY2hlZHVsZSBpdCBtYW51YWxseS5cblxuXG4gICAgdmFyIGxhc3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIGxhc3QubmV4dEVmZmVjdCA9IGN1cnJlbnQ7XG4gICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY3VycmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY3VycmVudDtcbiAgICB9XG5cbiAgICBjdXJyZW50Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGN1cnJlbnQuZmxhZ3MgPSBEZWxldGlvbjtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7IC8vIFJlc3RhcnQgd29yayBmcm9tIHRoZSBuZXcgZmliZXIuXG5cbiAgICByZXR1cm4gbmV3V29ya0luUHJvZ3Jlc3M7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmVnaW5Xb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgdXBkYXRlTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5sYW5lcztcblxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z05lZWRzUmVtb3VudCAmJiBjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIHdpbGwgcmVzdGFydCB0aGUgYmVnaW4gcGhhc2Ugd2l0aCBhIG5ldyBmaWJlci5cbiAgICAgIHJldHVybiByZW1vdW50RmliZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcy5rZXksIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcywgd29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgfHwgbnVsbCwgd29ya0luUHJvZ3Jlc3MubW9kZSwgd29ya0luUHJvZ3Jlc3MubGFuZXMpKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IGhhc0NvbnRleHRDaGFuZ2VkKCkgfHwgKCAvLyBGb3JjZSBhIHJlLXJlbmRlciBpZiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlZCBkdWUgdG8gaG90IHJlbG9hZDpcbiAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gY3VycmVudC50eXBlICkpIHtcbiAgICAgIC8vIElmIHByb3BzIG9yIGNvbnRleHQgY2hhbmdlZCwgbWFyayB0aGUgZmliZXIgYXMgaGF2aW5nIHBlcmZvcm1lZCB3b3JrLlxuICAgICAgLy8gVGhpcyBtYXkgYmUgdW5zZXQgaWYgdGhlIHByb3BzIGFyZSBkZXRlcm1pbmVkIHRvIGJlIGVxdWFsIGxhdGVyIChtZW1vKS5cbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmVzKSkge1xuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlOyAvLyBUaGlzIGZpYmVyIGRvZXMgbm90IGhhdmUgYW55IHBlbmRpbmcgd29yay4gQmFpbG91dCB3aXRob3V0IGVudGVyaW5nXG4gICAgICAvLyB0aGUgYmVnaW4gcGhhc2UuIFRoZXJlJ3Mgc3RpbGwgc29tZSBib29ra2VlcGluZyB3ZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmVcbiAgICAgIC8vIGluIHRoaXMgb3B0aW1pemVkIHBhdGgsIG1vc3RseSBwdXNoaW5nIHN0dWZmIG9udG8gdGhlIHN0YWNrLlxuXG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMudmFsdWU7XG4gICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIFByb2ZpbGVyIHNob3VsZCBvbmx5IGNhbGwgb25SZW5kZXIgd2hlbiBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgICAgICAgICAgdmFyIGhhc0NoaWxkV29yayA9IGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAoaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICAgIH0gLy8gUmVzZXQgZWZmZWN0IGR1cmF0aW9ucyBmb3IgdGhlIG5leHQgZXZlbnR1YWwgZWZmZWN0IHBoYXNlLlxuICAgICAgICAgICAgLy8gVGhlc2UgYXJlIHJlc2V0IGR1cmluZyByZW5kZXIgdG8gYWxsb3cgdGhlIERldlRvb2xzIGNvbW1pdCBob29rIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSxcblxuXG4gICAgICAgICAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIHdoZXRoZXIgdG8gcmV0cnkgdGhlIHByaW1hcnkgY2hpbGRyZW4sIG9yIHRvIHNraXAgb3ZlciBpdCBhbmRcbiAgICAgICAgICAgICAgLy8gZ28gc3RyYWlnaHQgdG8gdGhlIGZhbGxiYWNrLiBDaGVjayB0aGUgcHJpb3JpdHkgb2YgdGhlIHByaW1hcnlcbiAgICAgICAgICAgICAgLy8gY2hpbGQgZnJhZ21lbnQuXG5cblxuICAgICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZExhbmVzID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcztcblxuICAgICAgICAgICAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgcHJpbWFyeUNoaWxkTGFuZXMpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gaGF2ZSBwZW5kaW5nIHdvcmsuIFVzZSB0aGUgbm9ybWFsIHBhdGhcbiAgICAgICAgICAgICAgICAvLyB0byBhdHRlbXB0IHRvIHJlbmRlciB0aGUgcHJpbWFyeSBjaGlsZHJlbiBhZ2Fpbi5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCBkb2VzIG5vdCBoYXZlIHBlbmRpbmcgd29yayBtYXJrZWRcbiAgICAgICAgICAgICAgICAvLyBvbiBpdFxuICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCkpOyAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBkbyBub3QgaGF2ZSBwZW5kaW5nIHdvcmsgd2l0aCBzdWZmaWNpZW50XG4gICAgICAgICAgICAgICAgLy8gcHJpb3JpdHkuIEJhaWxvdXQuXG5cbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBmYWxsYmFjayBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gU2tpcCBvdmVyIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gcHJpbWFyeSBjaGlsZHJlbiBhbmQgd29yayBvbiB0aGUgZmFsbGJhY2suXG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQuc2libGluZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgICAgICAgICAgdmFyIF9oYXNDaGlsZFdvcmsgPSBpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKTtcblxuICAgICAgICAgICAgaWYgKGRpZFN1c3BlbmRCZWZvcmUpIHtcbiAgICAgICAgICAgICAgaWYgKF9oYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBzb21ldGhpbmcgd2FzIGluIGZhbGxiYWNrIHN0YXRlIGxhc3QgdGltZSwgYW5kIHdlIGhhdmUgYWxsIHRoZVxuICAgICAgICAgICAgICAgIC8vIHNhbWUgY2hpbGRyZW4gdGhlbiB3ZSdyZSBzdGlsbCBpbiBwcm9ncmVzc2l2ZSBsb2FkaW5nIHN0YXRlLlxuICAgICAgICAgICAgICAgIC8vIFNvbWV0aGluZyBtaWdodCBnZXQgdW5ibG9ja2VkIGJ5IHN0YXRlIHVwZGF0ZXMgb3IgcmV0cmllcyBpbiB0aGVcbiAgICAgICAgICAgICAgICAvLyB0cmVlIHdoaWNoIHdpbGwgYWZmZWN0IHRoZSB0YWlsLiBTbyB3ZSBuZWVkIHRvIHVzZSB0aGUgbm9ybWFsXG4gICAgICAgICAgICAgICAgLy8gcGF0aCB0byBjb21wdXRlIHRoZSBjb3JyZWN0IHRhaWwuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICB9IC8vIElmIG5vbmUgb2YgdGhlIGNoaWxkcmVuIGhhZCBhbnkgd29yaywgdGhhdCBtZWFucyB0aGF0IG5vbmUgb2ZcbiAgICAgICAgICAgICAgLy8gdGhlbSBnb3QgcmV0cmllZCBzbyB0aGV5J2xsIHN0aWxsIGJlIGJsb2NrZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgICAgICAgICAgIC8vIGFzIGJlZm9yZS4gV2UgY2FuIGZhc3QgYmFpbCBvdXQuXG5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgfSAvLyBJZiBub3RoaW5nIHN1c3BlbmRlZCBiZWZvcmUgYW5kIHdlJ3JlIHJlbmRlcmluZyB0aGUgc2FtZSBjaGlsZHJlbixcbiAgICAgICAgICAgIC8vIHRoZW4gdGhlIHRhaWwgZG9lc24ndCBtYXR0ZXIuIEFueXRoaW5nIG5ldyB0aGF0IHN1c3BlbmRzIHdpbGwgd29ya1xuICAgICAgICAgICAgLy8gaW4gdGhlIFwidG9nZXRoZXJcIiBtb2RlLCBzbyB3ZSBjYW4gY29udGludWUgZnJvbSB0aGUgc3RhdGUgd2UgaGFkLlxuXG5cbiAgICAgICAgICAgIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBSZXNldCB0byB0aGUgXCJ0b2dldGhlclwiIG1vZGUgaW4gY2FzZSB3ZSd2ZSBzdGFydGVkIGEgZGlmZmVyZW50XG4gICAgICAgICAgICAgIC8vIHVwZGF0ZSBpbiB0aGUgcGFzdCBidXQgZGlkbid0IGNvbXBsZXRlIGl0LlxuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG5cbiAgICAgICAgICAgIGlmIChfaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgICAvLyB0aGVtIGdvdCByZXRyaWVkIHNvIHRoZXknbGwgc3RpbGwgYmUgYmxvY2tlZCBpbiB0aGUgc2FtZSB3YXlcbiAgICAgICAgICAgICAgLy8gYXMgYmVmb3JlLiBXZSBjYW4gZmFzdCBiYWlsIG91dC5cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIGlmIHRoZSB0cmVlIHN0aWxsIG5lZWRzIHRvIGJlIGRlZmVycmVkLiBUaGlzIGlzXG4gICAgICAgICAgICAvLyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBsb2dpYyB1c2VkIGluIHRoZSBub3JtYWwgdXBkYXRlIHBhdGgsXG4gICAgICAgICAgICAvLyBzbyB3ZSdsbCBqdXN0IGVudGVyIHRoYXQuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgd2UnbGwgYmFpbCBvdXRcbiAgICAgICAgICAgIC8vIGF0IHRoZSBuZXh0IGxldmVsIGluc3RlYWQgb2YgdGhpcyBvbmUsIGJlY2F1c2UgdGhlIGNoaWxkIHByb3BzXG4gICAgICAgICAgICAvLyBoYXZlIG5vdCBjaGFuZ2VkLiBXaGljaCBpcyBmaW5lLlxuICAgICAgICAgICAgLy8gVE9ETzogUHJvYmFibHkgc2hvdWxkIHJlZmFjdG9yIGBiZWdpbldvcmtgIHRvIHNwbGl0IHRoZSBiYWlsb3V0XG4gICAgICAgICAgICAvLyBwYXRoIGZyb20gdGhlIG5vcm1hbCBwYXRoLiBJJ20gdGVtcHRlZCB0byBkbyBhIGxhYmVsZWQgYnJlYWsgaGVyZVxuICAgICAgICAgICAgLy8gYnV0IEkgd29uJ3QgOilcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgoY3VycmVudC5mbGFncyAmIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGV4aXN0cyBmb3IgbGVnYWN5IG1vZGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTIxNi5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBvbiB0aGlzIGZpYmVyLCBidXQgdGhlcmUgYXJlIG5vIG5ldyBwcm9wc1xuICAgICAgICAvLyBub3IgbGVnYWN5IGNvbnRleHQuIFNldCB0aGlzIHRvIGZhbHNlLiBJZiBhbiB1cGRhdGUgcXVldWUgb3IgY29udGV4dFxuICAgICAgICAvLyBjb25zdW1lciBwcm9kdWNlcyBhIGNoYW5nZWQgdmFsdWUsIGl0IHdpbGwgc2V0IHRoaXMgdG8gdHJ1ZS4gT3RoZXJ3aXNlLFxuICAgICAgICAvLyB0aGUgY29tcG9uZW50IHdpbGwgYXNzdW1lIHRoZSBjaGlsZHJlbiBoYXZlIG5vdCBjaGFuZ2VkIGFuZCBiYWlsIG91dC5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gIH0gLy8gQmVmb3JlIGVudGVyaW5nIHRoZSBiZWdpbiBwaGFzZSwgY2xlYXIgcGVuZGluZyB1cGRhdGUgcHJpb3JpdHkuXG4gIC8vIFRPRE86IFRoaXMgYXNzdW1lcyB0aGF0IHdlJ3JlIGFib3V0IHRvIGV2YWx1YXRlIHRoZSBjb21wb25lbnQgYW5kIHByb2Nlc3NcbiAgLy8gdGhlIHVwZGF0ZSBxdWV1ZS4gSG93ZXZlciwgdGhlcmUncyBhbiBleGNlcHRpb246IFNpbXBsZU1lbW9Db21wb25lbnRcbiAgLy8gc29tZXRpbWVzIGJhaWxzIG91dCBsYXRlciBpbiB0aGUgYmVnaW4gcGhhc2UuIFRoaXMgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkXG4gIC8vIG1vdmUgdGhpcyBhc3NpZ25tZW50IG91dCBvZiB0aGUgY29tbW9uIHBhdGggYW5kIGludG8gZWFjaCBicmFuY2guXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnR5cGUsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGVsZW1lbnRUeXBlID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGU7XG4gICAgICAgIHJldHVybiBtb3VudExhenlDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGVsZW1lbnRUeXBlLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50ID8gdW5yZXNvbHZlZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50LCB1bnJlc29sdmVkUHJvcHMpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50MiA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MiA/IF91bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQyLCBfdW5yZXNvbHZlZFByb3BzKTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQyLCBfcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0Um9vdChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdFRleHQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzMiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IHR5cGUgPyBfdW5yZXNvbHZlZFByb3BzMiA6IHJlc29sdmVEZWZhdWx0UHJvcHModHlwZSwgX3VucmVzb2x2ZWRQcm9wczIpO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVGb3J3YXJkUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBfcmVzb2x2ZWRQcm9wczIsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgTW9kZTpcbiAgICAgIHJldHVybiB1cGRhdGVNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRDb25zdW1lcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX3R5cGUyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBSZXNvbHZlIG91dGVyIHByb3BzIGZpcnN0LCB0aGVuIHJlc29sdmUgaW5uZXIgcHJvcHMuXG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLCBfdW5yZXNvbHZlZFByb3BzMyk7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gX3R5cGUyLnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBfcmVzb2x2ZWRQcm9wczMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShfdHlwZTIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfcmVzb2x2ZWRQcm9wczMgPSByZXNvbHZlRGVmYXVsdFByb3BzKF90eXBlMi50eXBlLCBfcmVzb2x2ZWRQcm9wczMpO1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX3R5cGUyLCBfcmVzb2x2ZWRQcm9wczMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQzID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHM0ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudDMgPyBfdW5yZXNvbHZlZFByb3BzNCA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudDMsIF91bnJlc29sdmVkUHJvcHM0KTtcblxuICAgICAgICByZXR1cm4gbW91bnRJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQzLCBfcmVzb2x2ZWRQcm9wczQsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVMZWdhY3lIaWRkZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICsgd29ya0luUHJvZ3Jlc3MudGFnICsgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpIHtcbiAgLy8gVGFnIHRoZSBmaWJlciB3aXRoIGFuIHVwZGF0ZSBlZmZlY3QuIFRoaXMgdHVybnMgYSBQbGFjZW1lbnQgaW50b1xuICAvLyBhIFBsYWNlbWVudEFuZFVwZGF0ZS5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpIHtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUmVmO1xufVxuXG52YXIgYXBwZW5kQWxsQ2hpbGRyZW47XG52YXIgdXBkYXRlSG9zdENvbnRhaW5lcjtcbnZhciB1cGRhdGVIb3N0Q29tcG9uZW50JDE7XG52YXIgdXBkYXRlSG9zdFRleHQkMTtcblxue1xuICAvLyBNdXRhdGlvbiBtb2RlXG4gIGFwcGVuZEFsbENoaWxkcmVuID0gZnVuY3Rpb24gKHBhcmVudCwgd29ya0luUHJvZ3Jlc3MsIG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSwgaXNIaWRkZW4pIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBjcmVhdGVkIGJ1dCB3ZSBuZWVkIHJlY3Vyc2UgZG93biBpdHNcbiAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgIGFwcGVuZEluaXRpYWxDaGlsZChwYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVIb3N0Q29udGFpbmVyID0gZnVuY3Rpb24gKHdvcmtJblByb2dyZXNzKSB7Ly8gTm9vcFxuICB9O1xuXG4gIHVwZGF0ZUhvc3RDb21wb25lbnQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gYWx0ZXJuYXRlLCB0aGF0IG1lYW5zIHRoaXMgaXMgYW4gdXBkYXRlIGFuZCB3ZSBuZWVkIHRvXG4gICAgLy8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cbiAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICBpZiAob2xkUHJvcHMgPT09IG5ld1Byb3BzKSB7XG4gICAgICAvLyBJbiBtdXRhdGlvbiBtb2RlLCB0aGlzIGlzIHN1ZmZpY2llbnQgZm9yIGEgYmFpbG91dCBiZWNhdXNlXG4gICAgICAvLyB3ZSB3b24ndCB0b3VjaCB0aGlzIG5vZGUgZXZlbiBpZiBjaGlsZHJlbiBjaGFuZ2VkLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UgZ2V0IHVwZGF0ZWQgYmVjYXVzZSBvbmUgb2Ygb3VyIGNoaWxkcmVuIHVwZGF0ZWQsIHdlIGRvbid0XG4gICAgLy8gaGF2ZSBuZXdQcm9wcyBzbyB3ZSdsbCBoYXZlIHRvIHJldXNlIHRoZW0uXG4gICAgLy8gVE9ETzogU3BsaXQgdGhlIHVwZGF0ZSBBUEkgYXMgc2VwYXJhdGUgZm9yIHRoZSBwcm9wcyB2cy4gY2hpbGRyZW4uXG4gICAgLy8gRXZlbiBiZXR0ZXIgd291bGQgYmUgaWYgY2hpbGRyZW4gd2VyZW4ndCBzcGVjaWFsIGNhc2VkIGF0IGFsbCB0aG8uXG5cblxuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICB2YXIgY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTsgLy8gVE9ETzogRXhwZXJpZW5jaW5nIGFuIGVycm9yIHdoZXJlIG9sZFByb3BzIGlzIG51bGwuIFN1Z2dlc3RzIGEgaG9zdFxuICAgIC8vIGNvbXBvbmVudCBpcyBoaXR0aW5nIHRoZSByZXN1bWUgcGF0aC4gRmlndXJlIG91dCB3aHkuIFBvc3NpYmx5XG4gICAgLy8gcmVsYXRlZCB0byBgaGlkZGVuYC5cblxuICAgIHZhciB1cGRhdGVQYXlsb2FkID0gcHJlcGFyZVVwZGF0ZShpbnN0YW5jZSwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCk7IC8vIFRPRE86IFR5cGUgdGhpcyBzcGVjaWZpYyB0byB0aGlzIHR5cGUgb2YgY29tcG9uZW50LlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSB1cGRhdGVQYXlsb2FkOyAvLyBJZiB0aGUgdXBkYXRlIHBheWxvYWQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSBjaGFuZ2Ugb3IgaWYgdGhlcmVcbiAgICAvLyBpcyBhIG5ldyByZWYgd2UgbWFyayB0aGlzIGFzIGFuIHVwZGF0ZS4gQWxsIHRoZSB3b3JrIGlzIGRvbmUgaW4gY29tbWl0V29yay5cblxuICAgIGlmICh1cGRhdGVQYXlsb2FkKSB7XG4gICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlSG9zdFRleHQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgb2xkVGV4dCwgbmV3VGV4dCkge1xuICAgIC8vIElmIHRoZSB0ZXh0IGRpZmZlcnMsIG1hcmsgaXQgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaW4gZG9uZSBpbiBjb21taXRXb3JrLlxuICAgIGlmIChvbGRUZXh0ICE9PSBuZXdUZXh0KSB7XG4gICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrKSB7XG4gIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgLy8gSWYgd2UncmUgaHlkcmF0aW5nLCB3ZSBzaG91bGQgY29uc3VtZSBhcyBtYW55IGl0ZW1zIGFzIHdlIGNhblxuICAgIC8vIHNvIHdlIGRvbid0IGxlYXZlIGFueSBiZWhpbmQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoIChyZW5kZXJTdGF0ZS50YWlsTW9kZSkge1xuICAgIGNhc2UgJ2hpZGRlbic6XG4gICAgICB7XG4gICAgICAgIC8vIEFueSBpbnNlcnRpb25zIGF0IHRoZSBlbmQgb2YgdGhlIHRhaWwgbGlzdCBhZnRlciB0aGlzIHBvaW50XG4gICAgICAgIC8vIHNob3VsZCBiZSBpbnZpc2libGUuIElmIHRoZXJlIGFyZSBhbHJlYWR5IG1vdW50ZWQgYm91bmRhcmllc1xuICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHdob2xlIHRhaWwgdG8gZmluZCBpZlxuICAgICAgICAvLyB0aGVyZSBhcmUgYW55LlxuICAgICAgICB2YXIgdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICB2YXIgbGFzdFRhaWxOb2RlID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAodGFpbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAodGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsYXN0VGFpbE5vZGUgPSB0YWlsTm9kZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0YWlsTm9kZSA9IHRhaWxOb2RlLnNpYmxpbmc7XG4gICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBzaW1wbHkgZ29pbmcgdG8gZGVsZXRlIGFsbCBpbnNlcnRpb25zIGFmdGVyIHRoZVxuICAgICAgICAvLyBsYXN0IHJlbmRlcmVkIGl0ZW0uXG5cblxuICAgICAgICBpZiAobGFzdFRhaWxOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICBsYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2NvbGxhcHNlZCc6XG4gICAgICB7XG4gICAgICAgIC8vIEFueSBpbnNlcnRpb25zIGF0IHRoZSBlbmQgb2YgdGhlIHRhaWwgbGlzdCBhZnRlciB0aGlzIHBvaW50XG4gICAgICAgIC8vIHNob3VsZCBiZSBpbnZpc2libGUuIElmIHRoZXJlIGFyZSBhbHJlYWR5IG1vdW50ZWQgYm91bmRhcmllc1xuICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHdob2xlIHRhaWwgdG8gZmluZCBpZlxuICAgICAgICAvLyB0aGVyZSBhcmUgYW55LlxuICAgICAgICB2YXIgX3RhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgdmFyIF9sYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgIHdoaWxlIChfdGFpbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoX3RhaWxOb2RlLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX2xhc3RUYWlsTm9kZSA9IF90YWlsTm9kZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGFpbE5vZGUgPSBfdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIGxhc3QgcmVuZGVyZWQgaXRlbS5cblxuXG4gICAgICAgIGlmIChfbGFzdFRhaWxOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICBpZiAoIWhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayAmJiByZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBzdXNwZW5kZWQgZHVyaW5nIHRoZSBoZWFkLiBXZSB3YW50IHRvIHNob3cgYXQgbGVhc3Qgb25lXG4gICAgICAgICAgICAvLyByb3cgYXQgdGhlIHRhaWwuIFNvIHdlJ2xsIGtlZXAgb24gYW5kIGN1dCBvZmYgdGhlIHJlc3QuXG4gICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRGV0YWNoIHRoZSBpbnNlcnRpb24gYWZ0ZXIgdGhlIGxhc3Qgbm9kZSB0aGF0IHdhcyBhbHJlYWR5XG4gICAgICAgICAgLy8gaW5zZXJ0ZWQuXG4gICAgICAgICAgX2xhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBsZXRlV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBGcmFnbWVudDpcbiAgICBjYXNlIE1vZGU6XG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICBjYXNlIENvbnRleHRDb25zdW1lcjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgdmFyIGZpYmVyUm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoZmliZXJSb290LnBlbmRpbmdDb250ZXh0KSB7XG4gICAgICAgICAgZmliZXJSb290LmNvbnRleHQgPSBmaWJlclJvb3QucGVuZGluZ0NvbnRleHQ7XG4gICAgICAgICAgZmliZXJSb290LnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQuY2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgcG9wIHNvIHRoYXQgd2UgY2FuIGRlbGV0ZSBhbnkgcmVtYWluaW5nIGNoaWxkcmVuXG4gICAgICAgICAgLy8gdGhhdCB3ZXJlbid0IGh5ZHJhdGVkLlxuICAgICAgICAgIHZhciB3YXNIeWRyYXRlZCA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmICh3YXNIeWRyYXRlZCkge1xuICAgICAgICAgICAgLy8gSWYgd2UgaHlkcmF0ZWQsIHRoZW4gd2UnbGwgbmVlZCB0byBzY2hlZHVsZSBhbiB1cGRhdGUgZm9yXG4gICAgICAgICAgICAvLyB0aGUgY29tbWl0IHNpZGUtZWZmZWN0cyBvbiB0aGUgcm9vdC5cbiAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWZpYmVyUm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgICAvLyBTY2hlZHVsZSBhbiBlZmZlY3QgdG8gY2xlYXIgdGhpcyBjb250YWluZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGNvbW1pdC5cbiAgICAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSBvZiBSZWFjdCByZW5kZXJpbmcgaW50byBhIGNvbnRhaW5lciB3aXRoIHByZXZpb3VzIGNoaWxkcmVuLlxuICAgICAgICAgICAgLy8gSXQncyBhbHNvIHNhZmUgdG8gZG8gZm9yIHVwZGF0ZXMgdG9vLCBiZWNhdXNlIGN1cnJlbnQuY2hpbGQgd291bGQgb25seSBiZSBudWxsXG4gICAgICAgICAgICAvLyBpZiB0aGUgcHJldmlvdXMgcmVuZGVyIHdhcyBudWxsIChzbyB0aGUgdGhlIGNvbnRhaW5lciB3b3VsZCBhbHJlYWR5IGJlIGVtcHR5KS5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZUhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgcm9vdENvbnRhaW5lckluc3RhbmNlID0gZ2V0Um9vdEhvc3RDb250YWluZXIoKTtcbiAgICAgICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdXBkYXRlSG9zdENvbXBvbmVudCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcblxuICAgICAgICAgIGlmIChjdXJyZW50LnJlZiAhPT0gd29ya0luUHJvZ3Jlc3MucmVmKSB7XG4gICAgICAgICAgICBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW5ld1Byb3BzKSB7XG4gICAgICAgICAgICBpZiAoISh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gd2UgYWJvcnQgd29yay5cblxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTsgLy8gVE9ETzogTW92ZSBjcmVhdGVJbnN0YW5jZSB0byBiZWdpbldvcmsgYW5kIGtlZXAgaXQgb24gYSBjb250ZXh0XG4gICAgICAgICAgLy8gXCJzdGFja1wiIGFzIHRoZSBwYXJlbnQuIFRoZW4gYXBwZW5kIGNoaWxkcmVuIGFzIHdlIGdvIGluIGJlZ2luV29ya1xuICAgICAgICAgIC8vIG9yIGNvbXBsZXRlV29yayBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSB3YW50IHRvIGFkZCB0aGVtIHRvcC0+ZG93biBvclxuICAgICAgICAgIC8vIGJvdHRvbS0+dXAuIFRvcC0+ZG93biBpcyBmYXN0ZXIgaW4gSUUxMS5cblxuICAgICAgICAgIHZhciBfd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgYW5kIGNyZWF0ZUluc3RhbmNlIHN0ZXAgaW50byB0aGUgYmVnaW5QaGFzZVxuICAgICAgICAgICAgLy8gdG8gY29uc29saWRhdGUuXG4gICAgICAgICAgICBpZiAocHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQpKSB7XG4gICAgICAgICAgICAgIC8vIElmIGNoYW5nZXMgdG8gdGhlIGh5ZHJhdGVkIG5vZGUgbmVlZCB0byBiZSBhcHBsaWVkIGF0IHRoZVxuICAgICAgICAgICAgICAvLyBjb21taXQtcGhhc2Ugd2UgbWFyayB0aGlzIGFzIHN1Y2guXG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGVJbnN0YW5jZSh0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIGFwcGVuZEFsbENoaWxkcmVuKGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGluc3RhbmNlOyAvLyBDZXJ0YWluIHJlbmRlcmVycyByZXF1aXJlIGNvbW1pdC10aW1lIGVmZmVjdHMgZm9yIGluaXRpYWwgbW91bnQuXG4gICAgICAgICAgICAvLyAoZWcgRE9NIHJlbmRlcmVyIHN1cHBvcnRzIGF1dG8tZm9jdXMgZm9yIGNlcnRhaW4gZWxlbWVudHMpLlxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHN1Y2ggcmVuZGVyZXJzIGdldCBzY2hlZHVsZWQgZm9yIGxhdGVyIHdvcmsuXG5cbiAgICAgICAgICAgIGlmIChmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbihpbnN0YW5jZSwgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSByZWYgb24gYSBob3N0IG5vZGUgd2UgbmVlZCB0byBzY2hlZHVsZSBhIGNhbGxiYWNrXG4gICAgICAgICAgICBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgdmFyIG5ld1RleHQgPSBuZXdQcm9wcztcblxuICAgICAgICBpZiAoY3VycmVudCAmJiB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBvbGRUZXh0ID0gY3VycmVudC5tZW1vaXplZFByb3BzOyAvLyBJZiB3ZSBoYXZlIGFuIGFsdGVybmF0ZSwgdGhhdCBtZWFucyB0aGlzIGlzIGFuIHVwZGF0ZSBhbmQgd2UgbmVlZFxuICAgICAgICAgIC8vIHRvIHNjaGVkdWxlIGEgc2lkZS1lZmZlY3QgdG8gZG8gdGhlIHVwZGF0ZXMuXG5cbiAgICAgICAgICB1cGRhdGVIb3N0VGV4dCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5ld1RleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoISh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gd2UgYWJvcnQgd29yay5cblxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfcm9vdENvbnRhaW5lckluc3RhbmNlID0gZ2V0Um9vdEhvc3RDb250YWluZXIoKTtcblxuICAgICAgICAgIHZhciBfY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTtcblxuICAgICAgICAgIHZhciBfd2FzSHlkcmF0ZWQyID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKF93YXNIeWRyYXRlZDIpIHtcbiAgICAgICAgICAgIGlmIChwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGNyZWF0ZVRleHRJbnN0YW5jZShuZXdUZXh0LCBfcm9vdENvbnRhaW5lckluc3RhbmNlLCBfY3VycmVudEhvc3RDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc3VzcGVuZGVkLiBSZS1yZW5kZXIgd2l0aCB0aGUgZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lczsgLy8gRG8gbm90IHJlc2V0IHRoZSBlZmZlY3QgbGlzdC5cblxuICAgICAgICAgIGlmICggKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5leHREaWRUaW1lb3V0ID0gbmV4dFN0YXRlICE9PSBudWxsO1xuICAgICAgICB2YXIgcHJldkRpZFRpbWVvdXQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBwcmV2RGlkVGltZW91dCA9IHByZXZTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0RGlkVGltZW91dCAmJiAhcHJldkRpZFRpbWVvdXQpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHN1YnRyZWVlIGlzIHJ1bm5pbmcgaW4gYmxvY2tpbmcgbW9kZSB3ZSBjYW4gc3VzcGVuZCxcbiAgICAgICAgICAvLyBvdGhlcndpc2Ugd2Ugd29uJ3Qgc3VzcGVuZC5cbiAgICAgICAgICAvLyBUT0RPOiBUaGlzIHdpbGwgc3RpbGwgc3VzcGVuZCBhIHN5bmNocm9ub3VzIHRyZWUgaWYgYW55dGhpbmdcbiAgICAgICAgICAvLyBpbiB0aGUgY29uY3VycmVudCB0cmVlIGFscmVhZHkgc3VzcGVuZGVkIGR1cmluZyB0aGlzIHJlbmRlci5cbiAgICAgICAgICAvLyBUaGlzIGlzIGEga25vd24gYnVnLlxuICAgICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIGJhY2sgdG8gdGhyb3dFeGNlcHRpb24gYmVjYXVzZSB0aGlzIGlzIHRvbyBsYXRlXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgbGFyZ2UgdHJlZSB3aGljaCBpcyBjb21tb24gZm9yIGluaXRpYWwgbG9hZHMuIFdlXG4gICAgICAgICAgICAvLyBkb24ndCBrbm93IGlmIHdlIHNob3VsZCByZXN0YXJ0IGEgcmVuZGVyIG9yIG5vdCB1bnRpbCB3ZSBnZXRcbiAgICAgICAgICAgIC8vIHRoaXMgbWFya2VyLCBhbmQgdGhpcyBpcyB0b28gbGF0ZS5cbiAgICAgICAgICAgIC8vIElmIHRoaXMgcmVuZGVyIGFscmVhZHkgaGFkIGEgcGluZyBvciBsb3dlciBwcmkgdXBkYXRlcyxcbiAgICAgICAgICAgIC8vIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIGtub3cgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3ZVxuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGFibGUgdG8gaW1tZWRpYXRlbHkgcmVzdGFydCBmcm9tIHdpdGhpbiB0aHJvd0V4Y2VwdGlvbi5cbiAgICAgICAgICAgIHZhciBoYXNJbnZpc2libGVDaGlsZENvbnRleHQgPSBjdXJyZW50ID09PSBudWxsICYmIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChoYXNJbnZpc2libGVDaGlsZENvbnRleHQgfHwgaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KSkge1xuICAgICAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBpbiBhbiBpbnZpc2libGUgdHJlZSBvciBhIG5ldyByZW5kZXIsIHRoZW4gc2hvd2luZ1xuICAgICAgICAgICAgICAvLyB0aGlzIGJvdW5kYXJ5IGlzIG9rLlxuICAgICAgICAgICAgICByZW5kZXJEaWRTdXNwZW5kKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlJ3JlIGdvaW5nIHRvIGhhdmUgdG8gaGlkZSBjb250ZW50IHNvIHdlIHNob3VsZFxuICAgICAgICAgICAgICAvLyBzdXNwZW5kIGZvciBsb25nZXIgaWYgcG9zc2libGUuXG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgLy8gVE9ETzogT25seSBzY2hlZHVsZSB1cGRhdGVzIGlmIHRoZXNlIHZhbHVlcyBhcmUgbm9uIGVxdWFsLCBpLmUuIGl0IGNoYW5nZWQuXG4gICAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0IHx8IHByZXZEaWRUaW1lb3V0KSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGp1c3QgdGltZWQgb3V0LCBzY2hlZHVsZSBhbiBlZmZlY3QgdG8gYXR0YWNoIGFcbiAgICAgICAgICAgIC8vIHJldHJ5IGxpc3RlbmVyIHRvIHRoZSBwcm9taXNlLiBUaGlzIGZsYWcgaXMgYWxzbyB1c2VkIHRvIGhpZGUgdGhlXG4gICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuLiBJbiBtdXRhdGlvbiBtb2RlLCB3ZSBhbHNvIG5lZWQgdGhlIGZsYWcgdG9cbiAgICAgICAgICAgIC8vICp1bmhpZGUqIGNoaWxkcmVuIHRoYXQgd2VyZSBwcmV2aW91c2x5IGhpZGRlbiwgc28gY2hlY2sgaWYgdGhpc1xuICAgICAgICAgICAgLy8gaXMgY3VycmVudGx5IHRpbWVkIG91dCwgdG9vLlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgcHJlcGFyZVBvcnRhbE1vdW50KHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIC8vIFBvcCBwcm92aWRlciBmaWJlclxuICAgICAgcG9wUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gU2FtZSBhcyBjbGFzcyBjb21wb25lbnQgY2FzZS4gSSBwdXQgaXQgZG93biBoZXJlIHNvIHRoYXQgdGhlIHRhZ3MgYXJlXG4gICAgICAgIC8vIHNlcXVlbnRpYWwgdG8gZW5zdXJlIHRoaXMgc3dpdGNoIGlzIGNvbXBpbGVkIHRvIGEganVtcCB0YWJsZS5cbiAgICAgICAgdmFyIF9Db21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihfQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAocmVuZGVyU3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIGluIHRoZSBkZWZhdWx0LCBcImluZGVwZW5kZW50XCIgbW9kZS5cbiAgICAgICAgICAvLyBXZSBkb24ndCBkbyBhbnl0aGluZyBpbiB0aGlzIG1vZGUuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGlkU3VzcGVuZEFscmVhZHkgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcbiAgICAgICAgdmFyIHJlbmRlcmVkVGFpbCA9IHJlbmRlclN0YXRlLnJlbmRlcmluZztcblxuICAgICAgICBpZiAocmVuZGVyZWRUYWlsID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UganVzdCByZW5kZXJlZCB0aGUgaGVhZC5cbiAgICAgICAgICBpZiAoIWRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBwYXNzLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYW55dGhpbmcgaXMgc3RpbGxcbiAgICAgICAgICAgIC8vIHN1c3BlbmRlZCBpbiB0aGUgcmVuZGVyZWQgc2V0LlxuICAgICAgICAgICAgLy8gSWYgbmV3IGNvbnRlbnQgdW5zdXNwZW5kZWQsIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgY29udGVudCB0aGF0XG4gICAgICAgICAgICAvLyBkaWRuJ3QuIFRoZW4gd2UgbmVlZCB0byBkbyBhIHNlY29uZCBwYXNzIHRoYXQgZm9yY2VzIGV2ZXJ5dGhpbmdcbiAgICAgICAgICAgIC8vIHRvIGtlZXAgc2hvd2luZyB0aGVpciBmYWxsYmFja3MuXG4gICAgICAgICAgICAvLyBXZSBtaWdodCBiZSBzdXNwZW5kZWQgaWYgc29tZXRoaW5nIGluIHRoaXMgcmVuZGVyIHBhc3Mgc3VzcGVuZGVkLCBvclxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGluIHRoZSBwcmV2aW91cyBjb21taXR0ZWQgcGFzcyBzdXNwZW5kZWQuIE90aGVyd2lzZSxcbiAgICAgICAgICAgIC8vIHRoZXJlJ3Mgbm8gY2hhbmNlIHNvIHdlIGNhbiBza2lwIHRoZSBleHBlbnNpdmUgY2FsbCB0b1xuICAgICAgICAgICAgLy8gZmluZEZpcnN0U3VzcGVuZGVkLlxuICAgICAgICAgICAgdmFyIGNhbm5vdEJlU3VzcGVuZGVkID0gcmVuZGVySGFzTm90U3VzcGVuZGVkWWV0KCkgJiYgKGN1cnJlbnQgPT09IG51bGwgfHwgKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyk7XG5cbiAgICAgICAgICAgIGlmICghY2Fubm90QmVTdXNwZW5kZWQpIHtcbiAgICAgICAgICAgICAgdmFyIHJvdyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgICAgICAgICAgIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VzcGVuZGVkID0gZmluZEZpcnN0U3VzcGVuZGVkKHJvdyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3VzcGVuZGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIElmIHRoaXMgaXMgYSBuZXdseSBzdXNwZW5kZWQgdHJlZSwgaXQgbWlnaHQgbm90IGdldCBjb21taXR0ZWQgYXNcbiAgICAgICAgICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIHNlY29uZCBwYXNzLiBJbiB0aGF0IGNhc2Ugbm90aGluZyB3aWxsIHN1YnNjcmliZSB0b1xuICAgICAgICAgICAgICAgICAgLy8gaXRzIHRoZW5uYWJsZXMuIEluc3RlYWQsIHdlJ2xsIHRyYW5zZmVyIGl0cyB0aGVubmFibGVzIHRvIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gU3VzcGVuc2VMaXN0IHNvIHRoYXQgaXQgY2FuIHJldHJ5IGlmIHRoZXkgcmVzb2x2ZS5cbiAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIG9mIHRoZXNlIGluIHRoZSBsaXN0IGJ1dCBzaW5jZSB3ZSdyZVxuICAgICAgICAgICAgICAgICAgLy8gZ29pbmcgdG8gd2FpdCBmb3IgYWxsIG9mIHRoZW0gYW55d2F5LCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXJcbiAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIG9uZXMgZ2V0cyB0byBwaW5nLiBJbiB0aGVvcnkgd2UgY291bGQgZ2V0IGNsZXZlciBhbmQga2VlcFxuICAgICAgICAgICAgICAgICAgLy8gdHJhY2sgb2YgaG93IG1hbnkgZGVwZW5kZW5jaWVzIHJlbWFpbiBidXQgaXQgZ2V0cyB0cmlja3kgYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIG1lYW50aW1lLCB3ZSBjYW4gYWRkL3JlbW92ZS9jaGFuZ2UgaXRlbXMgYW5kIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJhaWwgb3V0IG9mIHRoZSBsb29wIGJlZm9yZSBmaW5kaW5nIGFueSBidXQgdGhhdFxuICAgICAgICAgICAgICAgICAgLy8gZG9lc24ndCBtYXR0ZXIgc2luY2UgdGhhdCBtZWFucyB0aGF0IHRoZSBvdGhlciBib3VuZGFyaWVzIHRoYXRcbiAgICAgICAgICAgICAgICAgIC8vIHdlIGRpZCBmaW5kIGFscmVhZHkgaGFzIHRoZWlyIGxpc3RlbmVycyBhdHRhY2hlZC5cblxuICAgICAgICAgICAgICAgICAgdmFyIG5ld1RoZW5uYWJsZXMgPSBzdXNwZW5kZWQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChuZXdUaGVubmFibGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbmV3VGhlbm5hYmxlcztcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgICAgICAgfSAvLyBSZXJlbmRlciB0aGUgd2hvbGUgbGlzdCwgYnV0IHRoaXMgdGltZSwgd2UnbGwgZm9yY2UgZmFsbGJhY2tzXG4gICAgICAgICAgICAgICAgICAvLyB0byBzdGF5IGluIHBsYWNlLlxuICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGVmZmVjdCBsaXN0IGJlZm9yZSBkb2luZyB0aGUgc2Vjb25kIHBhc3Mgc2luY2UgdGhhdCdzIG5vdyBpbnZhbGlkLlxuXG5cbiAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IHJlbmRlclN0YXRlLmxhc3RFZmZlY3Q7IC8vIFJlc2V0IHRoZSBjaGlsZCBmaWJlcnMgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUuXG5cbiAgICAgICAgICAgICAgICAgIHJlc2V0Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTsgLy8gU2V0IHVwIHRoZSBTdXNwZW5zZSBDb250ZXh0IHRvIGZvcmNlIHN1c3BlbnNlIGFuZCBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAgICAgLy8gcmVyZW5kZXIgdGhlIGNoaWxkcmVuLlxuXG4gICAgICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcm93ID0gcm93LnNpYmxpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwgJiYgbm93KCkgPiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IHBhc3NlZCBvdXIgQ1BVIGRlYWRsaW5lIGJ1dCB3ZSBzdGlsbCBoYXZlIHJvd3NcbiAgICAgICAgICAgICAgLy8gbGVmdCBpbiB0aGUgdGFpbC4gV2UnbGwganVzdCBnaXZlIHVwIGZ1cnRoZXIgYXR0ZW1wdHMgdG8gcmVuZGVyXG4gICAgICAgICAgICAgIC8vIHRoZSBtYWluIGNvbnRlbnQgYW5kIG9ubHkgcmVuZGVyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXNcbiAgICAgICAgICAgICAgLy8gdG8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zXG4gICAgICAgICAgICAgIC8vIG9mIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlcixcbiAgICAgICAgICAgICAgLy8gaXQncyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzXG4gICAgICAgICAgICAgIC8vIGNvbW1pdHRlZC4gSWYgaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlXG4gICAgICAgICAgICAgIC8vIHBhaW50ZWQuIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy5cbiAgICAgICAgICAgICAgLy8gV2UgY2FuIHVzZSBhbnkgUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmdcbiAgICAgICAgICAgICAgLy8gc2luY2Ugd2UncmUgbGVhdmluZyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFya1NwYXduZWRXb3JrKFNvbWVSZXRyeUxhbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpO1xuICAgICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBnb2luZyB0byByZW5kZXIgdGhlIHRhaWwuXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBcHBlbmQgdGhlIHJlbmRlcmVkIHJvdyB0byB0aGUgY2hpbGQgbGlzdC5cbiAgICAgICAgICBpZiAoIWRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICB2YXIgX3N1c3BlbmRlZCA9IGZpbmRGaXJzdFN1c3BlbmRlZChyZW5kZXJlZFRhaWwpO1xuXG4gICAgICAgICAgICBpZiAoX3N1c3BlbmRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7IC8vIEVuc3VyZSB3ZSB0cmFuc2ZlciB0aGUgdXBkYXRlIHF1ZXVlIHRvIHRoZSBwYXJlbnQgc28gdGhhdCBpdCBkb2Vzbid0XG4gICAgICAgICAgICAgIC8vIGdldCBsb3N0IGlmIHRoaXMgcm93IGVuZHMgdXAgZHJvcHBlZCBkdXJpbmcgYSBzZWNvbmQgcGFzcy5cblxuICAgICAgICAgICAgICB2YXIgX25ld1RoZW5uYWJsZXMgPSBfc3VzcGVuZGVkLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICAgIGlmIChfbmV3VGhlbm5hYmxlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gX25ld1RoZW5uYWJsZXM7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCB0cnVlKTsgLy8gVGhpcyBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQuXG5cbiAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgPT09IG51bGwgJiYgcmVuZGVyU3RhdGUudGFpbE1vZGUgPT09ICdoaWRkZW4nICYmICFyZW5kZXJlZFRhaWwuYWx0ZXJuYXRlICYmICFnZXRJc0h5ZHJhdGluZygpIC8vIFdlIGRvbid0IGN1dCBpdCBpZiB3ZSdyZSBoeWRyYXRpbmcuXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkZWxldGUgdGhlIHJvdyB3ZSBqdXN0IHJlbmRlcmVkLlxuICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGVmZmVjdCBsaXN0IHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB3ZSByZW5kZXJlZCB0aGlzXG4gICAgICAgICAgICAgICAgICAvLyBjaGlsZC4gVGhlIG5lc3RlZCBjaGlsZHJlbiBoYXZlIGFscmVhZHkgYXBwZW5kZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IHJlbmRlclN0YXRlLmxhc3RFZmZlY3Q7IC8vIFJlbW92ZSBhbnkgZWZmZWN0cyB0aGF0IHdlcmUgYXBwZW5kZWQgYWZ0ZXIgdGhpcyBwb2ludC5cblxuICAgICAgICAgICAgICAgICAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIH0gLy8gV2UncmUgZG9uZS5cblxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCAvLyBUaGUgdGltZSBpdCB0b29rIHRvIHJlbmRlciBsYXN0IHJvdyBpcyBncmVhdGVyIHRoYW4gdGhlIHJlbWFpbmluZ1xuICAgICAgICAgICAgLy8gdGltZSB3ZSBoYXZlIHRvIHJlbmRlci4gU28gcmVuZGVyaW5nIG9uZSBtb3JlIHJvdyB3b3VsZCBsaWtlbHlcbiAgICAgICAgICAgIC8vIGV4Y2VlZCBpdC5cbiAgICAgICAgICAgIG5vdygpICogMiAtIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA+IGdldFJlbmRlclRhcmdldFRpbWUoKSAmJiByZW5kZXJMYW5lcyAhPT0gT2Zmc2NyZWVuTGFuZSkge1xuICAgICAgICAgICAgICAvLyBXZSBoYXZlIG5vdyBwYXNzZWQgb3VyIENQVSBkZWFkbGluZSBhbmQgd2UnbGwganVzdCBnaXZlIHVwIGZ1cnRoZXJcbiAgICAgICAgICAgICAgLy8gYXR0ZW1wdHMgdG8gcmVuZGVyIHRoZSBtYWluIGNvbnRlbnQgYW5kIG9ubHkgcmVuZGVyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgICAgLy8gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGlzIHVzdWFsbHkgZmFzdGVyLlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpc1xuICAgICAgICAgICAgICAvLyB0byBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXNcbiAgICAgICAgICAgICAgLy8gb2YgcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXNcbiAgICAgICAgICAgICAgLy8gY29tbWl0dGVkLiBJZiBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmVcbiAgICAgICAgICAgICAgLy8gcGFpbnRlZC4gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLlxuICAgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIGFueSBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZ1xuICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSdyZSBsZWF2aW5nIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIC8vIFRoZSBlZmZlY3QgbGlzdCBvZiB0aGUgYmFja3dhcmRzIHRhaWwgd2lsbCBoYXZlIGJlZW4gYWRkZWRcbiAgICAgICAgICAgIC8vIHRvIHRoZSBlbmQuIFRoaXMgYnJlYWtzIHRoZSBndWFyYW50ZWUgdGhhdCBsaWZlLWN5Y2xlcyBmaXJlIGluXG4gICAgICAgICAgICAvLyBzaWJsaW5nIG9yZGVyIGJ1dCB0aGF0IGlzbid0IGEgc3Ryb25nIGd1YXJhbnRlZSBwcm9taXNlZCBieSBSZWFjdC5cbiAgICAgICAgICAgIC8vIEVzcGVjaWFsbHkgc2luY2UgdGhlc2UgbWlnaHQgYWxzbyBqdXN0IHBvcCBpbiBkdXJpbmcgZnV0dXJlIGNvbW1pdHMuXG4gICAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC5cbiAgICAgICAgICAgIHJlbmRlcmVkVGFpbC5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZXZpb3VzU2libGluZyA9IHJlbmRlclN0YXRlLmxhc3Q7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nLnNpYmxpbmcgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyU3RhdGUubGFzdCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgdGFpbCByb3dzIHRvIHJlbmRlci5cbiAgICAgICAgICAvLyBQb3AgYSByb3cuXG4gICAgICAgICAgdmFyIG5leHQgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG5leHQ7XG4gICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG5leHQuc2libGluZztcbiAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSBub3coKTtcbiAgICAgICAgICBuZXh0LnNpYmxpbmcgPSBudWxsOyAvLyBSZXN0b3JlIHRoZSBjb250ZXh0LlxuICAgICAgICAgIC8vIFRPRE86IFdlIGNhbiBwcm9iYWJseSBqdXN0IGF2b2lkIHBvcHBpbmcgaXQgaW5zdGVhZCBhbmQgb25seVxuICAgICAgICAgIC8vIHNldHRpbmcgaXQgdGhlIGZpcnN0IHRpbWUgd2UgZ28gZnJvbSBub3Qgc3VzcGVuZGVkIHRvIHN1c3BlbmRlZC5cblxuICAgICAgICAgIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG5cbiAgICAgICAgICBpZiAoZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7IC8vIERvIGEgcGFzcyBvdmVyIHRoZSBuZXh0IHJvdy5cblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgQmxvY2s6XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgX3ByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgcHJldklzSGlkZGVuID0gX3ByZXZTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgICB2YXIgbmV4dElzSGlkZGVuID0gX25leHRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgIGlmIChwcmV2SXNIaWRkZW4gIT09IG5leHRJc0hpZGRlbiAmJiBuZXdQcm9wcy5tb2RlICE9PSAndW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmcnKSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArIHdvcmtJblByb2dyZXNzLnRhZyArIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bndpbmRXb3JrKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoZmxhZ3MgJiBTaG91bGRDYXB0dXJlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBmbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcblxuICAgICAgICAgIGlmICggKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCk7XG4gICAgICAgIHZhciBfZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoISgoX2ZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIHJvb3QgZmFpbGVkIHRvIHVubW91bnQgYWZ0ZXIgYW4gZXJyb3IuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gX2ZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IHBvcEh5ZHJhdGlvblN0YXRlXG4gICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgIHZhciBfZmxhZ3MyID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKF9mbGFnczIgJiBTaG91bGRDYXB0dXJlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBfZmxhZ3MyICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlOyAvLyBDYXB0dXJlZCBhIHN1c3BlbnNlIGVmZmVjdC4gUmUtcmVuZGVyIHRoZSBib3VuZGFyeS5cblxuICAgICAgICAgIGlmICggKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTsgLy8gU3VzcGVuc2VMaXN0IGRvZXNuJ3QgYWN0dWFsbHkgY2F0Y2ggYW55dGhpbmcuIEl0IHNob3VsZCd2ZSBiZWVuXG4gICAgICAgIC8vIGNhdWdodCBieSBhIG5lc3RlZCBib3VuZGFyeS4gSWYgbm90LCBpdCBzaG91bGQgYnViYmxlIHRocm91Z2guXG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcG9wUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW53aW5kSW50ZXJydXB0ZWRXb3JrKGludGVycnVwdGVkV29yaykge1xuICBzd2l0Y2ggKGludGVycnVwdGVkV29yay50YWcpIHtcbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSBpbnRlcnJ1cHRlZFdvcmsudHlwZS5jaGlsZENvbnRleHRUeXBlcztcblxuICAgICAgICBpZiAoY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBvcENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHBvcFN1c3BlbnNlQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHBvcFN1c3BlbnNlQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHBvcFByb3ZpZGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcG9wUmVuZGVyTGFuZXMoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhcHR1cmVkVmFsdWUodmFsdWUsIHNvdXJjZSkge1xuICAvLyBJZiB0aGUgdmFsdWUgaXMgYW4gZXJyb3IsIGNhbGwgdGhpcyBmdW5jdGlvbiBpbW1lZGlhdGVseSBhZnRlciBpdCBpcyB0aHJvd25cbiAgLy8gc28gdGhlIHN0YWNrIGlzIGFjY3VyYXRlLlxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdGFjazogZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHNvdXJjZSlcbiAgfTtcbn1cblxuLy8gVGhpcyBtb2R1bGUgaXMgZm9ya2VkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuXG4vLyBCeSBkZWZhdWx0LCByZXR1cm4gYHRydWVgIHRvIGxvZyBlcnJvcnMgdG8gdGhlIGNvbnNvbGUuXG4vLyBGb3JrcyBjYW4gcmV0dXJuIGBmYWxzZWAgaWYgdGhpcyBpc24ndCBkZXNpcmFibGUuXG5mdW5jdGlvbiBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbykge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbG9nQ2FwdHVyZWRFcnJvcihib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gIHRyeSB7XG4gICAgdmFyIGxvZ0Vycm9yID0gc2hvd0Vycm9yRGlhbG9nKGJvdW5kYXJ5LCBlcnJvckluZm8pOyAvLyBBbGxvdyBpbmplY3RlZCBzaG93RXJyb3JEaWFsb2coKSB0byBwcmV2ZW50IGRlZmF1bHQgY29uc29sZS5lcnJvciBsb2dnaW5nLlxuICAgIC8vIFRoaXMgZW5hYmxlcyByZW5kZXJlcnMgbGlrZSBSZWFjdE5hdGl2ZSB0byBiZXR0ZXIgbWFuYWdlIHJlZGJveCBiZWhhdmlvci5cblxuICAgIGlmIChsb2dFcnJvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgICBpZiAodHJ1ZSkge1xuICAgICAgdmFyIHNvdXJjZSA9IGVycm9ySW5mby5zb3VyY2U7XG4gICAgICB2YXIgc3RhY2sgPSBlcnJvckluZm8uc3RhY2s7XG4gICAgICB2YXIgY29tcG9uZW50U3RhY2sgPSBzdGFjayAhPT0gbnVsbCA/IHN0YWNrIDogJyc7IC8vIEJyb3dzZXJzIHN1cHBvcnQgc2lsZW5jaW5nIHVuY2F1Z2h0IGVycm9ycyBieSBjYWxsaW5nXG4gICAgICAvLyBgcHJldmVudERlZmF1bHQoKWAgaW4gd2luZG93IGBlcnJvcmAgaGFuZGxlci5cbiAgICAgIC8vIFdlIHJlY29yZCB0aGlzIGluZm9ybWF0aW9uIGFzIGFuIGV4cGFuZG8gb24gdGhlIGVycm9yLlxuXG4gICAgICBpZiAoZXJyb3IgIT0gbnVsbCAmJiBlcnJvci5fc3VwcHJlc3NMb2dnaW5nKSB7XG4gICAgICAgIGlmIChib3VuZGFyeS50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgLy8gVGhlIGVycm9yIGlzIHJlY292ZXJhYmxlIGFuZCB3YXMgc2lsZW5jZWQuXG4gICAgICAgICAgLy8gSWdub3JlIGl0IGFuZCBkb24ndCBwcmludCB0aGUgc3RhY2sgYWRkZW5kdW0uXG4gICAgICAgICAgLy8gVGhpcyBpcyBoYW5keSBmb3IgdGVzdGluZyBlcnJvciBib3VuZGFyaWVzIHdpdGhvdXQgbm9pc2UuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFRoZSBlcnJvciBpcyBmYXRhbC4gU2luY2UgdGhlIHNpbGVuY2luZyBtaWdodCBoYXZlXG4gICAgICAgIC8vIGJlZW4gYWNjaWRlbnRhbCwgd2UnbGwgc3VyZmFjZSBpdCBhbnl3YXkuXG4gICAgICAgIC8vIEhvd2V2ZXIsIHRoZSBicm93c2VyIHdvdWxkIGhhdmUgc2lsZW5jZWQgdGhlIG9yaWdpbmFsIGVycm9yXG4gICAgICAgIC8vIHNvIHdlJ2xsIHByaW50IGl0IGZpcnN0LCBhbmQgdGhlbiBwcmludCB0aGUgc3RhY2sgYWRkZW5kdW0uXG5cblxuICAgICAgICBjb25zb2xlWydlcnJvciddKGVycm9yKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgICAgIC8vIEZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhpcyBibG9jaywgc2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMzM4NFxuICAgICAgfVxuXG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IHNvdXJjZSA/IGdldENvbXBvbmVudE5hbWUoc291cmNlLnR5cGUpIDogbnVsbDtcbiAgICAgIHZhciBjb21wb25lbnROYW1lTWVzc2FnZSA9IGNvbXBvbmVudE5hbWUgPyBcIlRoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiB0aGUgPFwiICsgY29tcG9uZW50TmFtZSArIFwiPiBjb21wb25lbnQ6XCIgOiAnVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIG9uZSBvZiB5b3VyIFJlYWN0IGNvbXBvbmVudHM6JztcbiAgICAgIHZhciBlcnJvckJvdW5kYXJ5TWVzc2FnZTtcbiAgICAgIHZhciBlcnJvckJvdW5kYXJ5TmFtZSA9IGdldENvbXBvbmVudE5hbWUoYm91bmRhcnkudHlwZSk7XG5cbiAgICAgIGlmIChlcnJvckJvdW5kYXJ5TmFtZSkge1xuICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9IFwiUmVhY3Qgd2lsbCB0cnkgdG8gcmVjcmVhdGUgdGhpcyBjb21wb25lbnQgdHJlZSBmcm9tIHNjcmF0Y2ggXCIgKyAoXCJ1c2luZyB0aGUgZXJyb3IgYm91bmRhcnkgeW91IHByb3ZpZGVkLCBcIiArIGVycm9yQm91bmRhcnlOYW1lICsgXCIuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU1lc3NhZ2UgPSAnQ29uc2lkZXIgYWRkaW5nIGFuIGVycm9yIGJvdW5kYXJ5IHRvIHlvdXIgdHJlZSB0byBjdXN0b21pemUgZXJyb3IgaGFuZGxpbmcgYmVoYXZpb3IuXFxuJyArICdWaXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZXJyb3ItYm91bmRhcmllcyB0byBsZWFybiBtb3JlIGFib3V0IGVycm9yIGJvdW5kYXJpZXMuJztcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbWJpbmVkTWVzc2FnZSA9IGNvbXBvbmVudE5hbWVNZXNzYWdlICsgXCJcXG5cIiArIGNvbXBvbmVudFN0YWNrICsgXCJcXG5cXG5cIiArIChcIlwiICsgZXJyb3JCb3VuZGFyeU1lc3NhZ2UpOyAvLyBJbiBkZXZlbG9wbWVudCwgd2UgcHJvdmlkZSBvdXIgb3duIG1lc3NhZ2Ugd2l0aCBqdXN0IHRoZSBjb21wb25lbnQgc3RhY2suXG4gICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRoZSBvcmlnaW5hbCBlcnJvciBtZXNzYWdlIGFuZCBKUyBzdGFjayBiZWNhdXNlIHRoZSBicm93c2VyXG4gICAgICAvLyBoYXMgYWxyZWFkeSBwcmludGVkIGl0LiBFdmVuIGlmIHRoZSBhcHBsaWNhdGlvbiBzd2FsbG93cyB0aGUgZXJyb3IsIGl0IGlzIHN0aWxsXG4gICAgICAvLyBkaXNwbGF5ZWQgYnkgdGhlIGJyb3dzZXIgdGhhbmtzIHRvIHRoZSBERVYtb25seSBmYWtlIGV2ZW50IHRyaWNrIGluIFJlYWN0RXJyb3JVdGlscy5cblxuICAgICAgY29uc29sZVsnZXJyb3InXShjb21iaW5lZE1lc3NhZ2UpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW4gcHJvZHVjdGlvbiwgd2UgcHJpbnQgdGhlIGVycm9yIGRpcmVjdGx5LlxuICAgICAgLy8gVGhpcyB3aWxsIGluY2x1ZGUgdGhlIG1lc3NhZ2UsIHRoZSBKUyBzdGFjaywgYW5kIGFueXRoaW5nIHRoZSBicm93c2VyIHdhbnRzIHRvIHNob3cuXG4gICAgICAvLyBXZSBwYXNzIHRoZSBlcnJvciBvYmplY3QgaW5zdGVhZCBvZiBjdXN0b20gbWVzc2FnZSBzbyB0aGF0IHRoZSBicm93c2VyIGRpc3BsYXlzIHRoZSBlcnJvciBuYXRpdmVseS5cbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oZXJyb3IpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUaGlzIG1ldGhvZCBtdXN0IG5vdCB0aHJvdywgb3IgUmVhY3QgaW50ZXJuYWwgc3RhdGUgd2lsbCBnZXQgbWVzc2VkIHVwLlxuICAgIC8vIElmIGNvbnNvbGUuZXJyb3IgaXMgb3ZlcnJpZGRlbiwgb3IgbG9nQ2FwdHVyZWRFcnJvcigpIHNob3dzIGEgZGlhbG9nIHRoYXQgdGhyb3dzLFxuICAgIC8vIHdlIHdhbnQgdG8gcmVwb3J0IHRoaXMgZXJyb3Igb3V0c2lkZSBvZiB0aGUgbm9ybWFsIHN0YWNrIGFzIGEgbGFzdCByZXNvcnQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzE4OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgUG9zc2libHlXZWFrTWFwJDEgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIGxhbmUpOyAvLyBVbm1vdW50IHRoZSByb290IGJ5IHJlbmRlcmluZyBudWxsLlxuXG4gIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB1cGRhdGUucGF5bG9hZCA9IHtcbiAgICBlbGVtZW50OiBudWxsXG4gIH07XG4gIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcblxuICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgb25VbmNhdWdodEVycm9yKGVycm9yKTtcbiAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICB9O1xuXG4gIHJldHVybiB1cGRhdGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgbGFuZSkge1xuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBsYW5lKTtcbiAgdXBkYXRlLnRhZyA9IENhcHR1cmVVcGRhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPSBmaWJlci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBlcnJvciQxID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgdXBkYXRlLnBheWxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgcmV0dXJuIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvciQxKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGluc3QgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgaWYgKGluc3QgIT09IG51bGwgJiYgdHlwZW9mIGluc3QuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHtcbiAgICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUbyBwcmVzZXJ2ZSB0aGUgcHJlZXhpc3RpbmcgcmV0cnkgYmVoYXZpb3Igb2YgZXJyb3IgYm91bmRhcmllcyxcbiAgICAgICAgLy8gd2Uga2VlcCB0cmFjayBvZiB3aGljaCBvbmVzIGFscmVhZHkgZmFpbGVkIGR1cmluZyB0aGlzIGJhdGNoLlxuICAgICAgICAvLyBUaGlzIGdldHMgcmVzZXQgYmVmb3JlIHdlIHlpZWxkIGJhY2sgdG8gdGhlIGJyb3dzZXIuXG4gICAgICAgIC8vIFRPRE86IFdhcm4gaW4gc3RyaWN0IG1vZGUgaWYgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzXG4gICAgICAgIC8vIG5vdCBkZWZpbmVkLlxuICAgICAgICBtYXJrTGVnYWN5RXJyb3JCb3VuZGFyeUFzRmFpbGVkKHRoaXMpOyAvLyBPbmx5IGxvZyBoZXJlIGlmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkXG5cbiAgICAgICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVycm9yJDEgPSBlcnJvckluZm8udmFsdWU7XG4gICAgICB2YXIgc3RhY2sgPSBlcnJvckluZm8uc3RhY2s7XG4gICAgICB0aGlzLmNvbXBvbmVudERpZENhdGNoKGVycm9yJDEsIHtcbiAgICAgICAgY29tcG9uZW50U3RhY2s6IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiAnJ1xuICAgICAgfSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBJZiBjb21wb25lbnREaWRDYXRjaCBpcyB0aGUgb25seSBlcnJvciBib3VuZGFyeSBtZXRob2QgZGVmaW5lZCxcbiAgICAgICAgICAvLyB0aGVuIGl0IG5lZWRzIHRvIGNhbGwgc2V0U3RhdGUgdG8gcmVjb3ZlciBmcm9tIGVycm9ycy5cbiAgICAgICAgICAvLyBJZiBubyBzdGF0ZSB1cGRhdGUgaXMgc2NoZWR1bGVkIHRoZW4gdGhlIGJvdW5kYXJ5IHdpbGwgc3dhbGxvdyB0aGUgZXJyb3IuXG4gICAgICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKGZpYmVyLmxhbmVzLCBTeW5jTGFuZSkpIHtcbiAgICAgICAgICAgIGVycm9yKCclczogRXJyb3IgYm91bmRhcmllcyBzaG91bGQgaW1wbGVtZW50IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpLiAnICsgJ0luIHRoYXQgbWV0aG9kLCByZXR1cm4gYSBzdGF0ZSB1cGRhdGUgdG8gZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIG9yIGZhbGxiYWNrIFVJLicsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCBsYW5lcykge1xuICAvLyBBdHRhY2ggYSBsaXN0ZW5lciB0byB0aGUgcHJvbWlzZSB0byBcInBpbmdcIiB0aGUgcm9vdCBhbmQgcmV0cnkuIEJ1dCBvbmx5IGlmXG4gIC8vIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGZvciB0aGUgbGFuZXMgd2UncmUgY3VycmVudGx5IHJlbmRlcmluZyAod2hpY2hcbiAgLy8gYWN0cyBsaWtlIGEgXCJ0aHJlYWQgSURcIiBoZXJlKS5cbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICB2YXIgdGhyZWFkSURzO1xuXG4gIGlmIChwaW5nQ2FjaGUgPT09IG51bGwpIHtcbiAgICBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAkMSgpO1xuICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpO1xuICB9IGVsc2Uge1xuICAgIHRocmVhZElEcyA9IHBpbmdDYWNoZS5nZXQod2FrZWFibGUpO1xuXG4gICAgaWYgKHRocmVhZElEcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgICBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghdGhyZWFkSURzLmhhcyhsYW5lcykpIHtcbiAgICAvLyBNZW1vaXplIHVzaW5nIHRoZSB0aHJlYWQgSUQgdG8gcHJldmVudCByZWR1bmRhbnQgbGlzdGVuZXJzLlxuICAgIHRocmVhZElEcy5hZGQobGFuZXMpO1xuICAgIHZhciBwaW5nID0gcGluZ1N1c3BlbmRlZFJvb3QuYmluZChudWxsLCByb290LCB3YWtlYWJsZSwgbGFuZXMpO1xuICAgIHdha2VhYmxlLnRoZW4ocGluZywgcGluZyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFeGNlcHRpb24ocm9vdCwgcmV0dXJuRmliZXIsIHNvdXJjZUZpYmVyLCB2YWx1ZSwgcm9vdFJlbmRlckxhbmVzKSB7XG4gIC8vIFRoZSBzb3VyY2UgZmliZXIgZGlkIG5vdCBjb21wbGV0ZS5cbiAgc291cmNlRmliZXIuZmxhZ3MgfD0gSW5jb21wbGV0ZTsgLy8gSXRzIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICBzb3VyY2VGaWJlci5maXJzdEVmZmVjdCA9IHNvdXJjZUZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuXG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVGhpcyBpcyBhIHdha2VhYmxlLlxuICAgIHZhciB3YWtlYWJsZSA9IHZhbHVlO1xuXG4gICAgaWYgKChzb3VyY2VGaWJlci5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAvLyBSZXNldCB0aGUgbWVtb2l6ZWRTdGF0ZSB0byB3aGF0IGl0IHdhcyBiZWZvcmUgd2UgYXR0ZW1wdGVkXG4gICAgICAvLyB0byByZW5kZXIgaXQuXG4gICAgICB2YXIgY3VycmVudFNvdXJjZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnRTb3VyY2UpIHtcbiAgICAgICAgc291cmNlRmliZXIudXBkYXRlUXVldWUgPSBjdXJyZW50U291cmNlLnVwZGF0ZVF1ZXVlO1xuICAgICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gY3VycmVudFNvdXJjZS5tZW1vaXplZFN0YXRlO1xuICAgICAgICBzb3VyY2VGaWJlci5sYW5lcyA9IGN1cnJlbnRTb3VyY2UubGFuZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICAgIHNvdXJjZUZpYmVyLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBoYXNJbnZpc2libGVQYXJlbnRCb3VuZGFyeSA9IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCk7IC8vIFNjaGVkdWxlIHRoZSBuZWFyZXN0IFN1c3BlbnNlIHRvIHJlLXJlbmRlciB0aGUgdGltZWQgb3V0IHZpZXcuXG5cbiAgICB2YXIgX3dvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoX3dvcmtJblByb2dyZXNzLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgc2hvdWxkQ2FwdHVyZVN1c3BlbnNlKF93b3JrSW5Qcm9ncmVzcywgaGFzSW52aXNpYmxlUGFyZW50Qm91bmRhcnkpKSB7XG4gICAgICAgIC8vIEZvdW5kIHRoZSBuZWFyZXN0IGJvdW5kYXJ5LlxuICAgICAgICAvLyBTdGFzaCB0aGUgcHJvbWlzZSBvbiB0aGUgYm91bmRhcnkgZmliZXIuIElmIHRoZSBib3VuZGFyeSB0aW1lcyBvdXQsIHdlJ2xsXG4gICAgICAgIC8vIGF0dGFjaCBhbm90aGVyIGxpc3RlbmVyIHRvIGZsaXAgdGhlIGJvdW5kYXJ5IGJhY2sgdG8gaXRzIG5vcm1hbCBzdGF0ZS5cbiAgICAgICAgdmFyIHdha2VhYmxlcyA9IF93b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAod2FrZWFibGVzID09PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gbmV3IFNldCgpO1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgICAgX3dvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FrZWFibGVzLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgIH0gLy8gSWYgdGhlIGJvdW5kYXJ5IGlzIG91dHNpZGUgb2YgYmxvY2tpbmcgbW9kZSwgd2Ugc2hvdWxkICpub3QqXG4gICAgICAgIC8vIHN1c3BlbmQgdGhlIGNvbW1pdC4gUHJldGVuZCBhcyBpZiB0aGUgc3VzcGVuZGVkIGNvbXBvbmVudCByZW5kZXJlZFxuICAgICAgICAvLyBudWxsIGFuZCBrZWVwIHJlbmRlcmluZy4gSW4gdGhlIGNvbW1pdCBwaGFzZSwgd2UnbGwgc2NoZWR1bGUgYVxuICAgICAgICAvLyBzdWJzZXF1ZW50IHN5bmNocm9ub3VzIHVwZGF0ZSB0byByZS1yZW5kZXIgdGhlIFN1c3BlbnNlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBOb3RlOiBJdCBkb2Vzbid0IG1hdHRlciB3aGV0aGVyIHRoZSBjb21wb25lbnQgdGhhdCBzdXNwZW5kZWQgd2FzXG4gICAgICAgIC8vIGluc2lkZSBhIGJsb2NraW5nIG1vZGUgdHJlZS4gSWYgdGhlIFN1c3BlbnNlIGlzIG91dHNpZGUgb2YgaXQsIHdlXG4gICAgICAgIC8vIHNob3VsZCAqbm90KiBzdXNwZW5kIHRoZSBjb21taXQuXG5cblxuICAgICAgICBpZiAoKF93b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgICAgX3dvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgc291cmNlRmliZXIuZmxhZ3MgfD0gRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZTsgLy8gV2UncmUgZ29pbmcgdG8gY29tbWl0IHRoaXMgZmliZXIgZXZlbiB0aG91Z2ggaXQgZGlkbid0IGNvbXBsZXRlLlxuICAgICAgICAgIC8vIEJ1dCB3ZSBzaG91bGRuJ3QgY2FsbCBhbnkgbGlmZWN5Y2xlIG1ldGhvZHMgb3IgY2FsbGJhY2tzLiBSZW1vdmVcbiAgICAgICAgICAvLyBhbGwgbGlmZWN5Y2xlIGVmZmVjdCB0YWdzLlxuXG4gICAgICAgICAgc291cmNlRmliZXIuZmxhZ3MgJj0gfihMaWZlY3ljbGVFZmZlY3RNYXNrIHwgSW5jb21wbGV0ZSk7XG5cbiAgICAgICAgICBpZiAoc291cmNlRmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRTb3VyY2VGaWJlciA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTb3VyY2VGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IG1vdW50LiBDaGFuZ2UgdGhlIHRhZyBzbyBpdCdzIG5vdCBtaXN0YWtlbiBmb3IgYVxuICAgICAgICAgICAgICAvLyBjb21wbGV0ZWQgY2xhc3MgY29tcG9uZW50LiBGb3IgZXhhbXBsZSwgd2Ugc2hvdWxkIG5vdCBjYWxsXG4gICAgICAgICAgICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50IGlmIGl0IGlzIGRlbGV0ZWQuXG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyLnRhZyA9IEluY29tcGxldGVDbGFzc0NvbXBvbmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gd2UgdHJ5IHJlbmRlcmluZyBhZ2Fpbiwgd2Ugc2hvdWxkIG5vdCByZXVzZSB0aGUgY3VycmVudCBmaWJlcixcbiAgICAgICAgICAgICAgLy8gc2luY2UgaXQncyBrbm93biB0byBiZSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFVzZSBhIGZvcmNlIHVwZGF0ZSB0b1xuICAgICAgICAgICAgICAvLyBwcmV2ZW50IGEgYmFpbCBvdXQuXG4gICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIFN5bmNMYW5lKTtcbiAgICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuICAgICAgICAgICAgICBlbnF1ZXVlVXBkYXRlKHNvdXJjZUZpYmVyLCB1cGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLiBNYXJrIGl0IHdpdGggU3luYyBwcmlvcml0eSB0b1xuICAgICAgICAgIC8vIGluZGljYXRlIHRoYXQgaXQgc3RpbGwgaGFzIHBlbmRpbmcgd29yay5cblxuXG4gICAgICAgICAgc291cmNlRmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKHNvdXJjZUZpYmVyLmxhbmVzLCBTeW5jTGFuZSk7IC8vIEV4aXQgd2l0aG91dCBzdXNwZW5kaW5nLlxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIENvbmZpcm1lZCB0aGF0IHRoZSBib3VuZGFyeSBpcyBpbiBhIGNvbmN1cnJlbnQgbW9kZSB0cmVlLiBDb250aW51ZVxuICAgICAgICAvLyB3aXRoIHRoZSBub3JtYWwgc3VzcGVuZCBwYXRoLlxuICAgICAgICAvL1xuICAgICAgICAvLyBBZnRlciB0aGlzIHdlJ2xsIHVzZSBhIHNldCBvZiBoZXVyaXN0aWNzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXNcbiAgICAgICAgLy8gcmVuZGVyIHBhc3Mgd2lsbCBydW4gdG8gY29tcGxldGlvbiBvciByZXN0YXJ0IG9yIFwic3VzcGVuZFwiIHRoZSBjb21taXQuXG4gICAgICAgIC8vIFRoZSBhY3R1YWwgbG9naWMgZm9yIHRoaXMgaXMgc3ByZWFkIG91dCBpbiBkaWZmZXJlbnQgcGxhY2VzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGlzIGZpcnN0IHByaW5jaXBsZSBpcyB0aGF0IGlmIHdlJ3JlIGdvaW5nIHRvIHN1c3BlbmQgd2hlbiB3ZSBjb21wbGV0ZVxuICAgICAgICAvLyBhIHJvb3QsIHRoZW4gd2Ugc2hvdWxkIGFsc28gcmVzdGFydCBpZiB3ZSBnZXQgYW4gdXBkYXRlIG9yIHBpbmcgdGhhdFxuICAgICAgICAvLyBtaWdodCB1bnN1c3BlbmQgaXQsIGFuZCB2aWNlIHZlcnNhLiBUaGUgb25seSByZWFzb24gdG8gc3VzcGVuZCBpc1xuICAgICAgICAvLyBiZWNhdXNlIHlvdSB0aGluayB5b3UgbWlnaHQgd2FudCB0byByZXN0YXJ0IGJlZm9yZSBjb21taXR0aW5nLiBIb3dldmVyLFxuICAgICAgICAvLyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gcmVzdGFydCBvbmx5IHdoaWxlIGluIHRoZSBwZXJpb2Qgd2UncmUgc3VzcGVuZGVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBSZXN0YXJ0aW5nIHRvbyBhZ2dyZXNzaXZlbHkgaXMgYWxzbyBub3QgZ29vZCBiZWNhdXNlIGl0IHN0YXJ2ZXMgb3V0IGFueVxuICAgICAgICAvLyBpbnRlcm1lZGlhdGUgbG9hZGluZyBzdGF0ZS4gU28gd2UgdXNlIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZW4uXG4gICAgICAgIC8vIFN1c3BlbnNlIEhldXJpc3RpY3NcbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgbm90aGluZyB0aHJldyBhIFByb21pc2Ugb3IgYWxsIHRoZSBzYW1lIGZhbGxiYWNrcyBhcmUgYWxyZWFkeSBzaG93aW5nLFxuICAgICAgICAvLyB0aGVuIGRvbid0IHN1c3BlbmQvcmVzdGFydC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBpbml0aWFsIHJlbmRlciBvZiBhIG5ldyB0cmVlIG9mIFN1c3BlbnNlIGJvdW5kYXJpZXMgYW5kXG4gICAgICAgIC8vIHRob3NlIHRyaWdnZXIgYSBmYWxsYmFjaywgdGhlbiBkb24ndCBzdXNwZW5kL3Jlc3RhcnQuIFdlIHdhbnQgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgd2UgY2FuIHNob3cgdGhlIGluaXRpYWwgbG9hZGluZyBzdGF0ZSBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB3ZSBoaXQgYSBcIkRlbGF5ZWRcIiBjYXNlLCBzdWNoIGFzIHdoZW4gd2UnZCBzd2l0Y2ggZnJvbSBjb250ZW50IGJhY2sgaW50b1xuICAgICAgICAvLyBhIGZhbGxiYWNrLCB0aGVuIHdlIHNob3VsZCBhbHdheXMgc3VzcGVuZC9yZXN0YXJ0LiBUcmFuc2l0aW9ucyBhcHBseVxuICAgICAgICAvLyB0byB0aGlzIGNhc2UuIElmIG5vbmUgaXMgZGVmaW5lZCwgSk5EIGlzIHVzZWQgaW5zdGVhZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgd2UncmUgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgYW5kIGl0IGdldHMgXCJyZXRyaWVkXCIsIGFsbG93aW5nIHVzIHRvIHNob3dcbiAgICAgICAgLy8gYW5vdGhlciBsZXZlbCwgYnV0IHRoZXJlJ3Mgc3RpbGwgYW4gaW5uZXIgYm91bmRhcnkgdGhhdCB3b3VsZCBzaG93IGEgZmFsbGJhY2ssXG4gICAgICAgIC8vIHRoZW4gd2Ugc3VzcGVuZC9yZXN0YXJ0IGZvciA1MDBtcyBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIHNob3dlZCBhIGZhbGxiYWNrXG4gICAgICAgIC8vIGFueXdoZXJlIGluIHRoZSB0cmVlLiBUaGlzIGVmZmVjdGl2ZWx5IHRocm90dGxlcyBwcm9ncmVzc2l2ZSBsb2FkaW5nIGludG8gYVxuICAgICAgICAvLyBjb25zaXN0ZW50IHRyYWluIG9mIGNvbW1pdHMuIFRoaXMgYWxzbyBnaXZlcyB1cyBhbiBvcHBvcnR1bml0eSB0byByZXN0YXJ0IHRvXG4gICAgICAgIC8vIGdldCB0byB0aGUgY29tcGxldGVkIHN0YXRlIHNsaWdodGx5IGVhcmxpZXIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHRoZXJlJ3MgYW1iaWd1aXR5IGR1ZSB0byBiYXRjaGluZyBpdCdzIHJlc29sdmVkIGluIHByZWZlcmVuY2Ugb2Y6XG4gICAgICAgIC8vIDEpIFwiZGVsYXllZFwiLCAyKSBcImluaXRpYWwgcmVuZGVyXCIsIDMpIFwicmV0cnlcIi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBhIFwiYnVzeVwiIHN0YXRlIGRvZXNuJ3QgZ2V0IGZvcmNlIGNvbW1pdHRlZC4gV2Ugd2FudCB0b1xuICAgICAgICAvLyBlbnN1cmUgdGhhdCBuZXcgaW5pdGlhbCBsb2FkaW5nIHN0YXRlcyBjYW4gY29tbWl0IGFzIHNvb24gYXMgcG9zc2libGUuXG5cblxuICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgIF93b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuICAgICAgICBfd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByb290UmVuZGVyTGFuZXM7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gVGhpcyBib3VuZGFyeSBhbHJlYWR5IGNhcHR1cmVkIGR1cmluZyB0aGlzIHJlbmRlci4gQ29udGludWUgdG8gdGhlIG5leHRcbiAgICAgIC8vIGJvdW5kYXJ5LlxuXG5cbiAgICAgIF93b3JrSW5Qcm9ncmVzcyA9IF93b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgfSB3aGlsZSAoX3dvcmtJblByb2dyZXNzICE9PSBudWxsKTsgLy8gTm8gYm91bmRhcnkgd2FzIGZvdW5kLiBGYWxsdGhyb3VnaCB0byBlcnJvciBtb2RlLlxuICAgIC8vIFRPRE86IFVzZSBpbnZhcmlhbnQgc28gdGhlIG1lc3NhZ2UgaXMgc3RyaXBwZWQgaW4gcHJvZD9cblxuXG4gICAgdmFsdWUgPSBuZXcgRXJyb3IoKGdldENvbXBvbmVudE5hbWUoc291cmNlRmliZXIudHlwZSkgfHwgJ0EgUmVhY3QgY29tcG9uZW50JykgKyAnIHN1c3BlbmRlZCB3aGlsZSByZW5kZXJpbmcsIGJ1dCBubyBmYWxsYmFjayBVSSB3YXMgc3BlY2lmaWVkLlxcbicgKyAnXFxuJyArICdBZGQgYSA8U3VzcGVuc2UgZmFsbGJhY2s9Li4uPiBjb21wb25lbnQgaGlnaGVyIGluIHRoZSB0cmVlIHRvICcgKyAncHJvdmlkZSBhIGxvYWRpbmcgaW5kaWNhdG9yIG9yIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkuJyk7XG4gIH0gLy8gV2UgZGlkbid0IGZpbmQgYSBib3VuZGFyeSB0aGF0IGNvdWxkIGhhbmRsZSB0aGlzIHR5cGUgb2YgZXhjZXB0aW9uLiBTdGFydFxuICAvLyBvdmVyIGFuZCB0cmF2ZXJzZSBwYXJlbnQgcGF0aCBhZ2FpbiwgdGhpcyB0aW1lIHRyZWF0aW5nIHRoZSBleGNlcHRpb25cbiAgLy8gYXMgYW4gZXJyb3IuXG5cblxuICByZW5kZXJEaWRFcnJvcigpO1xuICB2YWx1ZSA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUodmFsdWUsIHNvdXJjZUZpYmVyKTtcbiAgdmFyIHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9lcnJvckluZm8gPSB2YWx1ZTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuICAgICAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUocm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMsIGxhbmUpO1xuXG4gICAgICAgICAgdmFyIF91cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF9lcnJvckluZm8sIGxhbmUpO1xuXG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfdXBkYXRlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgLy8gQ2FwdHVyZSBhbmQgcmV0cnlcbiAgICAgICAgdmFyIGVycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICB2YXIgY3RvciA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MgJiYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJyB8fCBpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG5cbiAgICAgICAgICB2YXIgX2xhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBfbGFuZSk7IC8vIFNjaGVkdWxlIHRoZSBlcnJvciBib3VuZGFyeSB0byByZS1yZW5kZXIgdXNpbmcgdXBkYXRlZCBzdGF0ZVxuXG4gICAgICAgICAgdmFyIF91cGRhdGUyID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgZXJyb3JJbmZvLCBfbGFuZSk7XG5cbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgfSB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpO1xufVxuXG52YXIgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBudWxsO1xuXG57XG4gIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbmV3IFNldCgpO1xufVxuXG52YXIgUG9zc2libHlXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbicgPyBXZWFrU2V0IDogU2V0O1xuXG52YXIgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50V2l0aFRpbWVyID0gZnVuY3Rpb24gKGN1cnJlbnQsIGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgfVxufTsgLy8gQ2FwdHVyZSBlcnJvcnMgc28gdGhleSBkb24ndCBpbnRlcnJ1cHQgdW5tb3VudGluZy5cblxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoY3VycmVudCwgaW5zdGFuY2UpIHtcbiAge1xuICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIsIG51bGwsIGN1cnJlbnQsIGluc3RhbmNlKTtcblxuICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICB2YXIgdW5tb3VudEVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgdW5tb3VudEVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpIHtcbiAgdmFyIHJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIGlmIChyZWYgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgcmVmLCBudWxsLCBudWxsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIHZhciByZWZFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCByZWZFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsRGVzdHJveShjdXJyZW50LCBkZXN0cm95KSB7XG4gIHtcbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgZGVzdHJveSwgbnVsbCk7XG5cbiAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkxpZmVDeWNsZXMoY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgU25hcHNob3QpIHtcbiAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc25hcHNob3QgPSBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgPT09IGZpbmlzaGVkV29yay50eXBlID8gcHJldlByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhmaW5pc2hlZFdvcmsudHlwZSwgcHJldlByb3BzKSwgcHJldlN0YXRlKTtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgZGlkV2FyblNldCA9IGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlO1xuXG4gICAgICAgICAgICAgIGlmIChzbmFwc2hvdCA9PT0gdW5kZWZpbmVkICYmICFkaWRXYXJuU2V0LmhhcyhmaW5pc2hlZFdvcmsudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBkaWRXYXJuU2V0LmFkZChmaW5pc2hlZFdvcmsudHlwZSk7XG5cbiAgICAgICAgICAgICAgICBlcnJvcignJXMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKTogQSBzbmFwc2hvdCB2YWx1ZSAob3IgbnVsbCkgJyArICdtdXN0IGJlIHJldHVybmVkLiBZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlID0gc25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBTbmFwc2hvdCkge1xuICAgICAgICAgICAgdmFyIHJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICAvLyBOb3RoaW5nIHRvIGRvIGZvciB0aGVzZSBjb21wb25lbnQgdHlwZXNcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQodGFnLCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgdGFnKSA9PT0gdGFnKSB7XG4gICAgICAgIC8vIFVubW91bnRcbiAgICAgICAgdmFyIGRlc3Ryb3kgPSBlZmZlY3QuZGVzdHJveTtcbiAgICAgICAgZWZmZWN0LmRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KHRhZywgZmluaXNoZWRXb3JrKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIGlmICgoZWZmZWN0LnRhZyAmIHRhZykgPT09IHRhZykge1xuICAgICAgICAvLyBNb3VudFxuICAgICAgICB2YXIgY3JlYXRlID0gZWZmZWN0LmNyZWF0ZTtcbiAgICAgICAgZWZmZWN0LmRlc3Ryb3kgPSBjcmVhdGUoKTtcblxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGRlc3Ryb3kgPSBlZmZlY3QuZGVzdHJveTtcblxuICAgICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGRlc3Ryb3kgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBhZGRlbmR1bSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgaWYgKGRlc3Ryb3kgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnIFlvdSByZXR1cm5lZCBudWxsLiBJZiB5b3VyIGVmZmVjdCBkb2VzIG5vdCByZXF1aXJlIGNsZWFuICcgKyAndXAsIHJldHVybiB1bmRlZmluZWQgKG9yIG5vdGhpbmcpLic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZXN0cm95LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnXFxuXFxuSXQgbG9va3MgbGlrZSB5b3Ugd3JvdGUgdXNlRWZmZWN0KGFzeW5jICgpID0+IC4uLikgb3IgcmV0dXJuZWQgYSBQcm9taXNlLiAnICsgJ0luc3RlYWQsIHdyaXRlIHRoZSBhc3luYyBmdW5jdGlvbiBpbnNpZGUgeW91ciBlZmZlY3QgJyArICdhbmQgY2FsbCBpdCBpbW1lZGlhdGVseTpcXG5cXG4nICsgJ3VzZUVmZmVjdCgoKSA9PiB7XFxuJyArICcgIGFzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YSgpIHtcXG4nICsgJyAgICAvLyBZb3UgY2FuIGF3YWl0IGhlcmVcXG4nICsgJyAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IE15QVBJLmdldERhdGEoc29tZUlkKTtcXG4nICsgJyAgICAvLyAuLi5cXG4nICsgJyAgfVxcbicgKyAnICBmZXRjaERhdGEoKTtcXG4nICsgXCJ9LCBbc29tZUlkXSk7IC8vIE9yIFtdIGlmIGVmZmVjdCBkb2Vzbid0IG5lZWQgcHJvcHMgb3Igc3RhdGVcXG5cXG5cIiArICdMZWFybiBtb3JlIGFib3V0IGRhdGEgZmV0Y2hpbmcgd2l0aCBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2hvb2tzLWRhdGEtZmV0Y2hpbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnIFlvdSByZXR1cm5lZDogJyArIGRlc3Ryb3k7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yKCdBbiBlZmZlY3QgZnVuY3Rpb24gbXVzdCBub3QgcmV0dXJuIGFueXRoaW5nIGJlc2lkZXMgYSBmdW5jdGlvbiwgJyArICd3aGljaCBpcyB1c2VkIGZvciBjbGVhbi11cC4lcycsIGFkZGVuZHVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgdmFyIF9lZmZlY3QgPSBlZmZlY3QsXG4gICAgICAgICAgbmV4dCA9IF9lZmZlY3QubmV4dCxcbiAgICAgICAgICB0YWcgPSBfZWZmZWN0LnRhZztcblxuICAgICAgaWYgKCh0YWcgJiBQYXNzaXZlJDEpICE9PSBOb0ZsYWdzJDEgJiYgKHRhZyAmIEhhc0VmZmVjdCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChmaW5pc2hlZFdvcmssIGVmZmVjdCk7XG4gICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RNb3VudChmaW5pc2hlZFdvcmssIGVmZmVjdCk7XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IG5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TGlmZUN5Y2xlcyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIGZpbmlzaGVkV29yaywgY29tbWl0dGVkTGFuZXMpIHtcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgbGF5b3V0IGVmZmVjdHMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIChkdXJpbmcgbXV0YXRpb24gcGhhc2UpLlxuICAgICAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzaWJsaW5nIGNvbXBvbmVudCBlZmZlY3RzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLFxuICAgICAgICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IHNob3VsZCBuZXZlciBvdmVycmlkZSBhIHJlZiBzZXRcbiAgICAgICAgLy8gYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQgZHVyaW5nIHRoZSBzYW1lIGNvbW1pdC5cbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoTGF5b3V0IHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgc2NoZWR1bGVQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZE1vdW50LiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZE1vdW50LiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGUgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBjdXJyZW50Lm1lbW9pemVkUHJvcHMpO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTsgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgbm93IGFsd2F5cyBub24tbnVsbCBieSB0aGUgdGltZSBpdCByZWFjaGVzIHRoZVxuICAgICAgICAvLyBjb21taXQgcGhhc2UuIENvbnNpZGVyIHJlbW92aW5nIHRoZSB0eXBlIGNoZWNrLlxuXG5cbiAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAncHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ3Byb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG5cbiAgICAgICAgICBjb21taXRVcGRhdGVRdWV1ZShmaW5pc2hlZFdvcmssIHVwZGF0ZVF1ZXVlLCBpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgbm93IGFsd2F5cyBub24tbnVsbCBieSB0aGUgdGltZSBpdCByZWFjaGVzIHRoZVxuICAgICAgICAvLyBjb21taXQgcGhhc2UuIENvbnNpZGVyIHJlbW92aW5nIHRoZSB0eXBlIGNoZWNrLlxuICAgICAgICB2YXIgX3VwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmIChfdXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2luc3RhbmNlID0gbnVsbDtcblxuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLmNoaWxkLnRhZykge1xuICAgICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgICAgX2luc3RhbmNlID0gZ2V0UHVibGljSW5zdGFuY2UoZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgX3VwZGF0ZVF1ZXVlLCBfaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX2luc3RhbmNlMiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFJlbmRlcmVycyBtYXkgc2NoZWR1bGUgd29yayB0byBiZSBkb25lIGFmdGVyIGhvc3QgY29tcG9uZW50cyBhcmUgbW91bnRlZFxuICAgICAgICAvLyAoZWcgRE9NIHJlbmRlcmVyIG1heSBzY2hlZHVsZSBhdXRvLWZvY3VzIGZvciBpbnB1dHMgYW5kIGZvcm0gY29udHJvbHMpLlxuICAgICAgICAvLyBUaGVzZSBlZmZlY3RzIHNob3VsZCBvbmx5IGJlIGNvbW1pdHRlZCB3aGVuIGNvbXBvbmVudHMgYXJlIGZpcnN0IG1vdW50ZWQsXG4gICAgICAgIC8vIGFrYSB3aGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQvYWx0ZXJuYXRlLlxuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsICYmIGZpbmlzaGVkV29yay5mbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGU7XG4gICAgICAgICAgdmFyIHByb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgY29tbWl0TW91bnQoX2luc3RhbmNlMiwgdHlwZSwgcHJvcHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBubyBsaWZlLWN5Y2xlcyBhc3NvY2lhdGVkIHdpdGggdGV4dC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAge1xuICAgICAgICAvLyBXZSBoYXZlIG5vIGxpZmUtY3ljbGVzIGFzc29jaWF0ZWQgd2l0aCBwb3J0YWxzLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgb25Db21taXQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uQ29tbWl0LFxuICAgICAgICAgICAgICBvblJlbmRlciA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIub25SZW5kZXI7XG4gICAgICAgICAgdmFyIGVmZmVjdER1cmF0aW9uID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbjtcbiAgICAgICAgICB2YXIgY29tbWl0VGltZSA9IGdldENvbW1pdFRpbWUoKTtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb25SZW5kZXIoZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMuaWQsIGN1cnJlbnQgPT09IG51bGwgPyAnbW91bnQnIDogJ3VwZGF0ZScsIGZpbmlzaGVkV29yay5hY3R1YWxEdXJhdGlvbiwgZmluaXNoZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24sIGZpbmlzaGVkV29yay5hY3R1YWxTdGFydFRpbWUsIGNvbW1pdFRpbWUsIGZpbmlzaGVkUm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4oZmluaXNoZWRXb3JrLCBpc0hpZGRlbikge1xuICB7XG4gICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IGZpbmlzaGVkV29yaztcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgaGlkZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bmhpZGVJbnN0YW5jZShub2RlLnN0YXRlTm9kZSwgbm9kZS5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTMgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaGlkZVRleHRJbnN0YW5jZShfaW5zdGFuY2UzLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKChub2RlLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50IHx8IG5vZGUudGFnID09PSBMZWdhY3lIaWRkZW5Db21wb25lbnQpICYmIG5vZGUubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAmJiBub2RlICE9PSBmaW5pc2hlZFdvcmspIDsgZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEF0dGFjaFJlZihmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHJlZiA9IGZpbmlzaGVkV29yay5yZWY7XG5cbiAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgdmFyIGluc3RhbmNlVG9Vc2U7XG5cbiAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGdldFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGluc3RhbmNlVG9Vc2UgPSBpbnN0YW5jZTtcbiAgICB9IC8vIE1vdmVkIG91dHNpZGUgdG8gZW5zdXJlIERDRSB3b3JrcyB3aXRoIHRoaXMgZmxhZ1xuXG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlZihpbnN0YW5jZVRvVXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICBpZiAoIXJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgcmVmIG9iamVjdCBwcm92aWRlZCBmb3IgJXMuICcgKyAnVXNlIGVpdGhlciBhIHJlZi1zZXR0ZXIgZnVuY3Rpb24gb3IgUmVhY3QuY3JlYXRlUmVmKCkuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlZi5jdXJyZW50ID0gaW5zdGFuY2VUb1VzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGV0YWNoUmVmKGN1cnJlbnQpIHtcbiAgdmFyIGN1cnJlbnRSZWYgPSBjdXJyZW50LnJlZjtcblxuICBpZiAoY3VycmVudFJlZiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgY3VycmVudFJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY3VycmVudFJlZihudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn0gLy8gVXNlci1vcmlnaW5hdGluZyBlcnJvcnMgKGxpZmVjeWNsZXMgYW5kIHJlZnMpIHNob3VsZCBub3QgaW50ZXJydXB0XG4vLyBkZWxldGlvbiwgc28gZG9uJ3QgbGV0IHRoZW0gdGhyb3cuIEhvc3Qtb3JpZ2luYXRpbmcgZXJyb3JzIHNob3VsZFxuLy8gaW50ZXJydXB0IGRlbGV0aW9uLCBzbyBpdCdzIG9rYXlcblxuXG5mdW5jdGlvbiBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgY3VycmVudCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICBvbkNvbW1pdFVubW91bnQoY3VycmVudCk7XG5cbiAgc3dpdGNoIChjdXJyZW50LnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG5cbiAgICAgICAgICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgICAgICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHZhciBfZWZmZWN0MiA9IGVmZmVjdCxcbiAgICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfZWZmZWN0Mi5kZXN0cm95LFxuICAgICAgICAgICAgICAgICAgdGFnID0gX2VmZmVjdDIudGFnO1xuXG4gICAgICAgICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoKHRhZyAmIFBhc3NpdmUkMSkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoY3VycmVudCwgZWZmZWN0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzYWZlbHlDYWxsRGVzdHJveShjdXJyZW50LCBkZXN0cm95KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50KTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY3VycmVudC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChjdXJyZW50LCBpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiB0aGlzIGlzIHJlY3Vyc2l2ZS5cbiAgICAgICAgLy8gV2UgYXJlIGFsc28gbm90IHVzaW5nIHRoaXMgcGFyZW50IGJlY2F1c2VcbiAgICAgICAgLy8gdGhlIHBvcnRhbCB3aWxsIGdldCBwdXNoZWQgaW1tZWRpYXRlbHkuXG4gICAgICAgIHtcbiAgICAgICAgICB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBEZWh5ZHJhdGVkRnJhZ21lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TmVzdGVkVW5tb3VudHMoZmluaXNoZWRSb290LCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFdoaWxlIHdlJ3JlIGluc2lkZSBhIHJlbW92ZWQgaG9zdCBub2RlIHdlIGRvbid0IHdhbnQgdG8gY2FsbFxuICAvLyByZW1vdmVDaGlsZCBvbiB0aGUgaW5uZXIgbm9kZXMgYmVjYXVzZSB0aGV5J3JlIHJlbW92ZWQgYnkgdGhlIHRvcFxuICAvLyBjYWxsIGFueXdheS4gV2UgYWxzbyB3YW50IHRvIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQgb24gYWxsXG4gIC8vIGNvbXBvc2l0ZXMgYmVmb3JlIHRoaXMgaG9zdCBub2RlIGlzIHJlbW92ZWQgZnJvbSB0aGUgdHJlZS4gVGhlcmVmb3JlXG4gIC8vIHdlIGRvIGFuIGlubmVyIGxvb3Agd2hpbGUgd2UncmUgc3RpbGwgaW5zaWRlIHRoZSBob3N0IG5vZGUuXG4gIHZhciBub2RlID0gcm9vdDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBub2RlKTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB0aGV5IG1heSBjb250YWluIG1vcmUgY29tcG9zaXRlIG9yIGhvc3Qgbm9kZXMuXG4gICAgLy8gU2tpcCBwb3J0YWxzIGJlY2F1c2UgY29tbWl0VW5tb3VudCgpIGN1cnJlbnRseSB2aXNpdHMgdGhlbSByZWN1cnNpdmVseS5cblxuICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsICYmICggLy8gSWYgd2UgdXNlIG11dGF0aW9uIHdlIGRyaWxsIGRvd24gaW50byBwb3J0YWxzIHVzaW5nIGNvbW1pdFVubW91bnQgYWJvdmUuXG4gICAgLy8gSWYgd2UgZG9uJ3QgdXNlIG11dGF0aW9uIHdlIGRyaWxsIGRvd24gaW50byBwb3J0YWxzIGhlcmUgaW5zdGVhZC5cbiAgICAgbm9kZS50YWcgIT09IEhvc3RQb3J0YWwpKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSByb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSByb290KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGFjaEZpYmVyTXV0YXRpb24oZmliZXIpIHtcbiAgLy8gQ3V0IG9mZiB0aGUgcmV0dXJuIHBvaW50ZXJzIHRvIGRpc2Nvbm5lY3QgaXQgZnJvbSB0aGUgdHJlZS4gSWRlYWxseSwgd2VcbiAgLy8gc2hvdWxkIGNsZWFyIHRoZSBjaGlsZCBwb2ludGVyIG9mIHRoZSBwYXJlbnQgYWx0ZXJuYXRlIHRvIGxldCB0aGlzXG4gIC8vIGdldCBHQzplZCBidXQgd2UgZG9uJ3Qga25vdyB3aGljaCBmb3Igc3VyZSB3aGljaCBwYXJlbnQgaXMgdGhlIGN1cnJlbnRcbiAgLy8gb25lIHNvIHdlJ2xsIHNldHRsZSBmb3IgR0M6aW5nIHRoZSBzdWJ0cmVlIG9mIHRoaXMgY2hpbGQuIFRoaXMgY2hpbGRcbiAgLy8gaXRzZWxmIHdpbGwgYmUgR0M6ZWQgd2hlbiB0aGUgcGFyZW50IHVwZGF0ZXMgdGhlIG5leHQgdGltZS5cbiAgLy8gTm90ZTogd2UgY2Fubm90IG51bGwgb3V0IHNpYmxpbmcgaGVyZSwgb3RoZXJ3aXNlIGl0IGNhbiBjYXVzZSBpc3N1ZXNcbiAgLy8gd2l0aCBmaW5kRE9NTm9kZSBhbmQgaG93IGl0IHJlcXVpcmVzIHRoZSBzaWJsaW5nIGZpZWxkIHRvIGNhcnJ5IG91dFxuICAvLyB0cmF2ZXJzYWwgaW4gYSBsYXRlciBlZmZlY3QuIFNlZSBQUiAjMTY4MjAuIFdlIG5vdyBjbGVhciB0aGUgc2libGluZ1xuICAvLyBmaWVsZCBhZnRlciBlZmZlY3RzLCBzZWU6IGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzLlxuICAvL1xuICAvLyBEb24ndCBkaXNjb25uZWN0IHN0YXRlTm9kZSBub3c7IGl0IHdpbGwgYmUgZGV0YWNoZWQgaW4gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMuXG4gIC8vIEl0IG1heSBiZSByZXF1aXJlZCBpZiB0aGUgY3VycmVudCBjb21wb25lbnQgaXMgYW4gZXJyb3IgYm91bmRhcnksXG4gIC8vIGFuZCBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIHRocm93cyB3aGlsZSB1bm1vdW50aW5nIGEgcGFzc2l2ZSBlZmZlY3QuXG4gIGZpYmVyLmFsdGVybmF0ZSA9IG51bGw7XG4gIGZpYmVyLmNoaWxkID0gbnVsbDtcbiAgZmliZXIuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgZmliZXIuZmlyc3RFZmZlY3QgPSBudWxsO1xuICBmaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gIGZpYmVyLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICBmaWJlci5wZW5kaW5nUHJvcHMgPSBudWxsO1xuICBmaWJlci5yZXR1cm4gPSBudWxsO1xuICBmaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAge1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRIb3N0UGFyZW50RmliZXIoZmliZXIpIHtcbiAgdmFyIHBhcmVudCA9IGZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKGlzSG9zdFBhcmVudChwYXJlbnQpKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gZmluZCBhIGhvc3QgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzSG9zdFBhcmVudChmaWJlcikge1xuICByZXR1cm4gZmliZXIudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QgfHwgZmliZXIudGFnID09PSBIb3N0UG9ydGFsO1xufVxuXG5mdW5jdGlvbiBnZXRIb3N0U2libGluZyhmaWJlcikge1xuICAvLyBXZSdyZSBnb2luZyB0byBzZWFyY2ggZm9yd2FyZCBpbnRvIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgYSBzaWJsaW5nIGhvc3RcbiAgLy8gbm9kZS4gVW5mb3J0dW5hdGVseSwgaWYgbXVsdGlwbGUgaW5zZXJ0aW9ucyBhcmUgZG9uZSBpbiBhIHJvdyB3ZSBoYXZlIHRvXG4gIC8vIHNlYXJjaCBwYXN0IHRoZW0uIFRoaXMgbGVhZHMgdG8gZXhwb25lbnRpYWwgc2VhcmNoIGZvciB0aGUgbmV4dCBzaWJsaW5nLlxuICAvLyBUT0RPOiBGaW5kIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMuXG4gIHZhciBub2RlID0gZmliZXI7XG5cbiAgc2libGluZ3M6IHdoaWxlICh0cnVlKSB7XG4gICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcsIGxldCdzIHRyeSB0aGUgbmV4dCBzaWJsaW5nLlxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBpc0hvc3RQYXJlbnQobm9kZS5yZXR1cm4pKSB7XG4gICAgICAgIC8vIElmIHdlIHBvcCBvdXQgb2YgdGhlIHJvb3Qgb3IgaGl0IHRoZSBwYXJlbnQgdGhlIGZpYmVyIHdlIGFyZSB0aGVcbiAgICAgICAgLy8gbGFzdCBzaWJsaW5nLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuXG4gICAgd2hpbGUgKG5vZGUudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIG5vZGUudGFnICE9PSBIb3N0VGV4dCAmJiBub2RlLnRhZyAhPT0gRGVoeWRyYXRlZEZyYWdtZW50KSB7XG4gICAgICAvLyBJZiBpdCBpcyBub3QgaG9zdCBub2RlIGFuZCwgd2UgbWlnaHQgaGF2ZSBhIGhvc3Qgbm9kZSBpbnNpZGUgaXQuXG4gICAgICAvLyBUcnkgdG8gc2VhcmNoIGRvd24gdW50aWwgd2UgZmluZCBvbmUuXG4gICAgICBpZiAobm9kZS5mbGFncyAmIFBsYWNlbWVudCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgY2hpbGQsIHRyeSB0aGUgc2libGluZ3MgaW5zdGVhZC5cbiAgICAgICAgY29udGludWUgc2libGluZ3M7XG4gICAgICB9IC8vIElmIHdlIGRvbid0IGhhdmUgYSBjaGlsZCwgdHJ5IHRoZSBzaWJsaW5ncyBpbnN0ZWFkLlxuICAgICAgLy8gV2UgYWxzbyBza2lwIHBvcnRhbHMgYmVjYXVzZSB0aGV5IGFyZSBub3QgcGFydCBvZiB0aGlzIGhvc3QgdHJlZS5cblxuXG4gICAgICBpZiAobm9kZS5jaGlsZCA9PT0gbnVsbCB8fCBub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICBjb250aW51ZSBzaWJsaW5ncztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICB9XG4gICAgfSAvLyBDaGVjayBpZiB0aGlzIGhvc3Qgbm9kZSBpcyBzdGFibGUgb3IgYWJvdXQgdG8gYmUgcGxhY2VkLlxuXG5cbiAgICBpZiAoIShub2RlLmZsYWdzICYgUGxhY2VtZW50KSkge1xuICAgICAgLy8gRm91bmQgaXQhXG4gICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFBsYWNlbWVudChmaW5pc2hlZFdvcmspIHtcblxuXG4gIHZhciBwYXJlbnRGaWJlciA9IGdldEhvc3RQYXJlbnRGaWJlcihmaW5pc2hlZFdvcmspOyAvLyBOb3RlOiB0aGVzZSB0d28gdmFyaWFibGVzICptdXN0KiBhbHdheXMgYmUgdXBkYXRlZCB0b2dldGhlci5cblxuICB2YXIgcGFyZW50O1xuICB2YXIgaXNDb250YWluZXI7XG4gIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG5cbiAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGU7XG4gICAgICBpc0NvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBpc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgaXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lLW5vLWZhbGx0aHJvdWdoXG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob3N0IHBhcmVudCBmaWJlci4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxuXG4gIGlmIChwYXJlbnRGaWJlci5mbGFncyAmIENvbnRlbnRSZXNldCkge1xuICAgIC8vIFJlc2V0IHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIHBhcmVudCBiZWZvcmUgZG9pbmcgYW55IGluc2VydGlvbnNcbiAgICByZXNldFRleHRDb250ZW50KHBhcmVudCk7IC8vIENsZWFyIENvbnRlbnRSZXNldCBmcm9tIHRoZSBlZmZlY3QgdGFnXG5cbiAgICBwYXJlbnRGaWJlci5mbGFncyAmPSB+Q29udGVudFJlc2V0O1xuICB9XG5cbiAgdmFyIGJlZm9yZSA9IGdldEhvc3RTaWJsaW5nKGZpbmlzaGVkV29yayk7IC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGluc2VydGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuXG4gIGlmIChpc0NvbnRhaW5lcikge1xuICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoZmluaXNoZWRXb3JrLCBiZWZvcmUsIHBhcmVudCk7XG4gIH0gZWxzZSB7XG4gICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKGZpbmlzaGVkV29yaywgYmVmb3JlLCBwYXJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICB2YXIgaXNIb3N0ID0gdGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHRhZyA9PT0gSG9zdFRleHQ7XG5cbiAgaWYgKGlzSG9zdCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICB2YXIgc3RhdGVOb2RlID0gaXNIb3N0ID8gbm9kZS5zdGF0ZU5vZGUgOiBub2RlLnN0YXRlTm9kZS5pbnN0YW5jZTtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIGluc2VydEluQ29udGFpbmVyQmVmb3JlKHBhcmVudCwgc3RhdGVOb2RlLCBiZWZvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKHBhcmVudCwgc3RhdGVOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2Uge1xuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoY2hpbGQsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgIHZhciBzaWJsaW5nID0gY2hpbGQuc2libGluZztcblxuICAgICAgd2hpbGUgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihzaWJsaW5nLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIHZhciBpc0hvc3QgPSB0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dDtcblxuICBpZiAoaXNIb3N0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgIHZhciBzdGF0ZU5vZGUgPSBpc0hvc3QgPyBub2RlLnN0YXRlTm9kZSA6IG5vZGUuc3RhdGVOb2RlLmluc3RhbmNlO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudCwgc3RhdGVOb2RlLCBiZWZvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRDaGlsZChwYXJlbnQsIHN0YXRlTm9kZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIHtcbiAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkO1xuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoY2hpbGQsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgIHZhciBzaWJsaW5nID0gY2hpbGQuc2libGluZztcblxuICAgICAgd2hpbGUgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKHNpYmxpbmcsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgc2libGluZyA9IHNpYmxpbmcuc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBkZWxldGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICB2YXIgbm9kZSA9IGN1cnJlbnQ7IC8vIEVhY2ggaXRlcmF0aW9uLCBjdXJyZW50UGFyZW50IGlzIHBvcHVsYXRlZCB3aXRoIG5vZGUncyBob3N0IHBhcmVudCBpZiBub3RcbiAgLy8gY3VycmVudFBhcmVudElzVmFsaWQuXG5cbiAgdmFyIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gZmFsc2U7IC8vIE5vdGU6IHRoZXNlIHR3byB2YXJpYWJsZXMgKm11c3QqIGFsd2F5cyBiZSB1cGRhdGVkIHRvZ2V0aGVyLlxuXG4gIHZhciBjdXJyZW50UGFyZW50O1xuICB2YXIgY3VycmVudFBhcmVudElzQ29udGFpbmVyO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKCFjdXJyZW50UGFyZW50SXNWYWxpZCkge1xuICAgICAgdmFyIHBhcmVudCA9IG5vZGUucmV0dXJuO1xuXG4gICAgICBmaW5kUGFyZW50OiB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAoIShwYXJlbnQgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gZmluZCBhIGhvc3QgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgc3dpdGNoIChwYXJlbnQudGFnKSB7XG4gICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZTtcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWsgZmluZFBhcmVudDtcblxuICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWsgZmluZFBhcmVudDtcblxuICAgICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50UGFyZW50SXNWYWxpZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgY29tbWl0TmVzdGVkVW5tb3VudHMoZmluaXNoZWRSb290LCBub2RlKTsgLy8gQWZ0ZXIgYWxsIHRoZSBjaGlsZHJlbiBoYXZlIHVubW91bnRlZCwgaXQgaXMgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZVxuICAgICAgLy8gbm9kZSBmcm9tIHRoZSB0cmVlLlxuXG4gICAgICBpZiAoY3VycmVudFBhcmVudElzQ29udGFpbmVyKSB7XG4gICAgICAgIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVDaGlsZChjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IC8vIERvbid0IHZpc2l0IGNoaWxkcmVuIGJlY2F1c2Ugd2UgYWxyZWFkeSB2aXNpdGVkIHRoZW0uXG5cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBXaGVuIHdlIGdvIGludG8gYSBwb3J0YWwsIGl0IGJlY29tZXMgdGhlIHBhcmVudCB0byByZW1vdmUgZnJvbS5cbiAgICAgICAgLy8gV2Ugd2lsbCByZWFzc2lnbiBpdCBiYWNrIHdoZW4gd2UgcG9wIHRoZSBwb3J0YWwgb24gdGhlIHdheSB1cC5cbiAgICAgICAgY3VycmVudFBhcmVudCA9IG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2UgcG9ydGFscyBtaWdodCBjb250YWluIGhvc3QgY29tcG9uZW50cy5cblxuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHdlIG1heSBmaW5kIG1vcmUgaG9zdCBjb21wb25lbnRzIGJlbG93LlxuXG4gICAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcblxuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgIC8vIFdoZW4gd2UgZ28gb3V0IG9mIHRoZSBwb3J0YWwsIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgcGFyZW50LlxuICAgICAgICAvLyBTaW5jZSB3ZSBkb24ndCBrZWVwIGEgc3RhY2sgb2YgdGhlbSwgd2Ugd2lsbCBzZWFyY2ggZm9yIGl0LlxuICAgICAgICBjdXJyZW50UGFyZW50SXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdERlbGV0aW9uKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICB7XG4gICAgLy8gUmVjdXJzaXZlbHkgZGVsZXRlIGFsbCBob3N0IG5vZGVzIGZyb20gdGhlIHBhcmVudC5cbiAgICAvLyBEZXRhY2ggcmVmcyBhbmQgY2FsbCBjb21wb25lbnRXaWxsVW5tb3VudCgpIG9uIHRoZSB3aG9sZSBzdWJ0cmVlLlxuICAgIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQpO1xuICB9XG5cbiAgdmFyIGFsdGVybmF0ZSA9IGN1cnJlbnQuYWx0ZXJuYXRlO1xuICBkZXRhY2hGaWJlck11dGF0aW9uKGN1cnJlbnQpO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBkZXRhY2hGaWJlck11dGF0aW9uKGFsdGVybmF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0V29yayhjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcblxuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIC8vIExheW91dCBlZmZlY3RzIGFyZSBkZXN0cm95ZWQgZHVyaW5nIHRoZSBtdXRhdGlvbiBwaGFzZSBzbyB0aGF0IGFsbFxuICAgICAgICAvLyBkZXN0cm95IGZ1bmN0aW9ucyBmb3IgYWxsIGZpYmVycyBhcmUgY2FsbGVkIGJlZm9yZSBhbnkgY3JlYXRlIGZ1bmN0aW9ucy5cbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBzaWJsaW5nIGNvbXBvbmVudCBlZmZlY3RzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLFxuICAgICAgICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IHNob3VsZCBuZXZlciBvdmVycmlkZSBhIHJlZiBzZXRcbiAgICAgICAgLy8gYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQgZHVyaW5nIHRoZSBzYW1lIGNvbW1pdC5cbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDb21taXQgdGhlIHdvcmsgcHJlcGFyZWQgZWFybGllci5cbiAgICAgICAgICB2YXIgbmV3UHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wczsgLy8gRm9yIGh5ZHJhdGlvbiB3ZSByZXVzZSB0aGUgdXBkYXRlIHBhdGggYnV0IHdlIHRyZWF0IHRoZSBvbGRQcm9wc1xuICAgICAgICAgIC8vIGFzIHRoZSBuZXdQcm9wcy4gVGhlIHVwZGF0ZVBheWxvYWQgd2lsbCBjb250YWluIHRoZSByZWFsIGNoYW5nZSBpblxuICAgICAgICAgIC8vIHRoaXMgY2FzZS5cblxuICAgICAgICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBuZXdQcm9wcztcbiAgICAgICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlOyAvLyBUT0RPOiBUeXBlIHRoZSB1cGRhdGVRdWV1ZSB0byBiZSBzcGVjaWZpYyB0byBob3N0IGNvbXBvbmVudHMuXG5cbiAgICAgICAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZVBheWxvYWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbW1pdFVwZGF0ZShpbnN0YW5jZSwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICBpZiAoIShmaW5pc2hlZFdvcmsuc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgc2hvdWxkIGhhdmUgYSB0ZXh0IG5vZGUgaW5pdGlhbGl6ZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGV4dEluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgdmFyIG5ld1RleHQgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wczsgLy8gRm9yIGh5ZHJhdGlvbiB3ZSByZXVzZSB0aGUgdXBkYXRlIHBhdGggYnV0IHdlIHRyZWF0IHRoZSBvbGRQcm9wc1xuICAgICAgICAvLyBhcyB0aGUgbmV3UHJvcHMuIFRoZSB1cGRhdGVQYXlsb2FkIHdpbGwgY29udGFpbiB0aGUgcmVhbCBjaGFuZ2UgaW5cbiAgICAgICAgLy8gdGhpcyBjYXNlLlxuXG4gICAgICAgIHZhciBvbGRUZXh0ID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG5ld1RleHQ7XG4gICAgICAgIGNvbW1pdFRleHRVcGRhdGUodGV4dEluc3RhbmNlLCBvbGRUZXh0LCBuZXdUZXh0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBpZiAoX3Jvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgICAgLy8gV2UndmUganVzdCBoeWRyYXRlZC4gTm8gbmVlZCB0byBoeWRyYXRlIGFnYWluLlxuICAgICAgICAgICAgX3Jvb3QuaHlkcmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgY29tbWl0SHlkcmF0ZWRDb250YWluZXIoX3Jvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgY29tbWl0U3VzcGVuc2VDb21wb25lbnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHZhciBpc0hpZGRlbiA9IG5ld1N0YXRlICE9PSBudWxsO1xuICAgICAgICBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihmaW5pc2hlZFdvcmssIGlzSGlkZGVuKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlQ29tcG9uZW50KGZpbmlzaGVkV29yaykge1xuICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV3U3RhdGUgIT09IG51bGwpIHtcbiAgICBtYXJrQ29tbWl0VGltZU9mRmFsbGJhY2soKTtcblxuICAgIHtcbiAgICAgIC8vIEhpZGUgdGhlIE9mZnNjcmVlbiBjb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgcHJpbWFyeSBjaGlsZHJlbi4gVE9ETzpcbiAgICAgIC8vIElkZWFsbHksIHRoaXMgZWZmZWN0IHdvdWxkIGhhdmUgYmVlbiBzY2hlZHVsZWQgb24gdGhlIE9mZnNjcmVlbiBmaWJlclxuICAgICAgLy8gaXRzZWxmLiBUaGF0J3MgaG93IHVuaGlkaW5nIHdvcmtzOiB0aGUgT2Zmc2NyZWVuIGNvbXBvbmVudCBzY2hlZHVsZXMgYW5cbiAgICAgIC8vIGVmZmVjdCBvbiBpdHNlbGYuIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSwgdGhlIGNvbXBvbmVudCBkaWRuJ3QgY29tcGxldGUsXG4gICAgICAvLyBzbyB0aGUgZmliZXIgd2FzIG5ldmVyIGFkZGVkIHRvIHRoZSBlZmZlY3QgbGlzdCBpbiB0aGUgbm9ybWFsIHBhdGguIFdlXG4gICAgICAvLyBjb3VsZCBoYXZlIGFwcGVuZGVkIGl0IHRvIHRoZSBlZmZlY3QgbGlzdCBpbiB0aGUgU3VzcGVuc2UgY29tcG9uZW50J3NcbiAgICAgIC8vIHNlY29uZCBwYXNzLCBidXQgZG9pbmcgaXQgdGhpcyB3YXkgaXMgbGVzcyBjb21wbGljYXRlZC4gVGhpcyB3b3VsZCBiZVxuICAgICAgLy8gc2ltcGxlciBpZiB3ZSBnb3QgcmlkIG9mIHRoZSBlZmZlY3QgbGlzdCBhbmQgdHJhdmVyc2VkIHRoZSB0cmVlLCBsaWtlXG4gICAgICAvLyB3ZSdyZSBwbGFubmluZyB0byBkby5cbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRQYXJlbnQgPSBmaW5pc2hlZFdvcmsuY2hpbGQ7XG4gICAgICBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihwcmltYXJ5Q2hpbGRQYXJlbnQsIHRydWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaykge1xuXG4gIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXdTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBzdXNwZW5zZUluc3RhbmNlID0gcHJldlN0YXRlLmRlaHlkcmF0ZWQ7XG5cbiAgICAgICAgaWYgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspIHtcbiAgLy8gSWYgdGhpcyBib3VuZGFyeSBqdXN0IHRpbWVkIG91dCwgdGhlbiBpdCB3aWxsIGhhdmUgYSBzZXQgb2Ygd2FrZWFibGVzLlxuICAvLyBGb3IgZWFjaCB3YWtlYWJsZSwgYXR0YWNoIGEgbGlzdGVuZXIgc28gdGhhdCB3aGVuIGl0IHJlc29sdmVzLCBSZWFjdFxuICAvLyBhdHRlbXB0cyB0byByZS1yZW5kZXIgdGhlIGJvdW5kYXJ5IGluIHRoZSBwcmltYXJ5IChwcmUtdGltZW91dCkgc3RhdGUuXG4gIHZhciB3YWtlYWJsZXMgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgaWYgKHdha2VhYmxlcyAhPT0gbnVsbCkge1xuICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgdmFyIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgaWYgKHJldHJ5Q2FjaGUgPT09IG51bGwpIHtcbiAgICAgIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpO1xuICAgIH1cblxuICAgIHdha2VhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uICh3YWtlYWJsZSkge1xuICAgICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgYm91bmRhcnkgZmliZXIgdG8gcHJldmVudCByZWR1bmRhbnQgbGlzdGVuZXJzLlxuICAgICAgdmFyIHJldHJ5ID0gcmVzb2x2ZVJldHJ5V2FrZWFibGUuYmluZChudWxsLCBmaW5pc2hlZFdvcmssIHdha2VhYmxlKTtcblxuICAgICAgaWYgKCFyZXRyeUNhY2hlLmhhcyh3YWtlYWJsZSkpIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh3YWtlYWJsZS5fX3JlYWN0RG9Ob3RUcmFjZUludGVyYWN0aW9ucyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0cnkgPSB0cmFjaW5nLnVuc3RhYmxlX3dyYXAocmV0cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHJ5Q2FjaGUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgd2FrZWFibGUudGhlbihyZXRyeSwgcmV0cnkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59IC8vIFRoaXMgZnVuY3Rpb24gZGV0ZWN0cyB3aGVuIGEgU3VzcGVuc2UgYm91bmRhcnkgZ29lcyBmcm9tIHZpc2libGUgdG8gaGlkZGVuLlxuLy8gSXQgcmV0dXJucyBmYWxzZSBpZiB0aGUgYm91bmRhcnkgaXMgYWxyZWFkeSBoaWRkZW4uXG4vLyBUT0RPOiBVc2UgYW4gZWZmZWN0IHRhZy5cblxuXG5mdW5jdGlvbiBpc1N1c3BlbnNlQm91bmRhcnlCZWluZ0hpZGRlbihjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAob2xkU3RhdGUgPT09IG51bGwgfHwgb2xkU3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICByZXR1cm4gbmV3U3RhdGUgIT09IG51bGwgJiYgbmV3U3RhdGUuZGVoeWRyYXRlZCA9PT0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJlc2V0VGV4dENvbnRlbnQoY3VycmVudCkge1xuXG4gIHJlc2V0VGV4dENvbnRlbnQoY3VycmVudC5zdGF0ZU5vZGUpO1xufVxuXG52YXIgQ09NUE9ORU5UX1RZUEUgPSAwO1xudmFyIEhBU19QU0VVRE9fQ0xBU1NfVFlQRSA9IDE7XG52YXIgUk9MRV9UWVBFID0gMjtcbnZhciBURVNUX05BTUVfVFlQRSA9IDM7XG52YXIgVEVYVF9UWVBFID0gNDtcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yJDEgPSBTeW1ib2wuZm9yO1xuICBDT01QT05FTlRfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci5jb21wb25lbnQnKTtcbiAgSEFTX1BTRVVET19DTEFTU19UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLmhhc19wc2V1ZG9fY2xhc3MnKTtcbiAgUk9MRV9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLnJvbGUnKTtcbiAgVEVTVF9OQU1FX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IudGVzdF9pZCcpO1xuICBURVhUX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IudGV4dCcpO1xufVxudmFyIGNvbW1pdEhvb2tzID0gW107XG5mdW5jdGlvbiBvbkNvbW1pdFJvb3QkMSgpIHtcbiAge1xuICAgIGNvbW1pdEhvb2tzLmZvckVhY2goZnVuY3Rpb24gKGNvbW1pdEhvb2spIHtcbiAgICAgIHJldHVybiBjb21taXRIb29rKCk7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBSZWFjdEN1cnJlbnRPd25lciQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXIsXG4gICAgSXNTb21lUmVuZGVyZXJBY3RpbmcgPSBSZWFjdFNoYXJlZEludGVybmFscy5Jc1NvbWVSZW5kZXJlckFjdGluZztcbnZhciBOb0NvbnRleHQgPVxuLyogICAgICAgICAgICAgKi9cbjA7XG52YXIgQmF0Y2hlZENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAqL1xuMTtcbnZhciBFdmVudENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgICovXG4yO1xudmFyIERpc2NyZXRlRXZlbnRDb250ZXh0ID1cbi8qICAgICAgICAgKi9cbjQ7XG52YXIgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCA9XG4vKiAgICAgICAqL1xuODtcbnZhciBSZW5kZXJDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICovXG4xNjtcbnZhciBDb21taXRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICovXG4zMjtcbnZhciBSZXRyeUFmdGVyRXJyb3IgPVxuLyogICAgICAgKi9cbjY0O1xudmFyIFJvb3RJbmNvbXBsZXRlID0gMDtcbnZhciBSb290RmF0YWxFcnJvcmVkID0gMTtcbnZhciBSb290RXJyb3JlZCA9IDI7XG52YXIgUm9vdFN1c3BlbmRlZCA9IDM7XG52YXIgUm9vdFN1c3BlbmRlZFdpdGhEZWxheSA9IDQ7XG52YXIgUm9vdENvbXBsZXRlZCA9IDU7IC8vIERlc2NyaWJlcyB3aGVyZSB3ZSBhcmUgaW4gdGhlIFJlYWN0IGV4ZWN1dGlvbiBzdGFja1xuXG52YXIgZXhlY3V0aW9uQ29udGV4dCA9IE5vQ29udGV4dDsgLy8gVGhlIHJvb3Qgd2UncmUgd29ya2luZyBvblxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDsgLy8gVGhlIGZpYmVyIHdlJ3JlIHdvcmtpbmcgb25cblxudmFyIHdvcmtJblByb2dyZXNzID0gbnVsbDsgLy8gVGhlIGxhbmVzIHdlJ3JlIHJlbmRlcmluZ1xuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBTdGFjayB0aGF0IGFsbG93cyBjb21wb25lbnRzIHRvIGNoYW5nZSB0aGUgcmVuZGVyIGxhbmVzIGZvciBpdHMgc3VidHJlZVxuLy8gVGhpcyBpcyBhIHN1cGVyc2V0IG9mIHRoZSBsYW5lcyB3ZSBzdGFydGVkIHdvcmtpbmcgb24gYXQgdGhlIHJvb3QuIFRoZSBvbmx5XG4vLyBjYXNlIHdoZXJlIGl0J3MgZGlmZmVyZW50IGZyb20gYHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzYCBpcyB3aGVuIHdlXG4vLyBlbnRlciBhIHN1YnRyZWUgdGhhdCBpcyBoaWRkZW4gYW5kIG5lZWRzIHRvIGJlIHVuaGlkZGVuOiBTdXNwZW5zZSBhbmRcbi8vIE9mZnNjcmVlbiBjb21wb25lbnQuXG4vL1xuLy8gTW9zdCB0aGluZ3MgaW4gdGhlIHdvcmsgbG9vcCBzaG91bGQgZGVhbCB3aXRoIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLlxuLy8gTW9zdCB0aGluZ3MgaW4gYmVnaW4vY29tcGxldGUgcGhhc2VzIHNob3VsZCBkZWFsIHdpdGggc3VidHJlZVJlbmRlckxhbmVzLlxuXG52YXIgc3VidHJlZVJlbmRlckxhbmVzID0gTm9MYW5lcztcbnZhciBzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTm9MYW5lcyk7IC8vIFdoZXRoZXIgdG8gcm9vdCBjb21wbGV0ZWQsIGVycm9yZWQsIHN1c3BlbmRlZCwgZXRjLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJbmNvbXBsZXRlOyAvLyBBIGZhdGFsIGVycm9yLCBpZiBvbmUgaXMgdGhyb3duXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbDsgLy8gXCJJbmNsdWRlZFwiIGxhbmVzIHJlZmVyIHRvIGxhbmVzIHRoYXQgd2VyZSB3b3JrZWQgb24gZHVyaW5nIHRoaXMgcmVuZGVyLiBJdCdzXG4vLyBzbGlnaHRseSBkaWZmZXJlbnQgdGhhbiBgcmVuZGVyTGFuZXNgIGJlY2F1c2UgYHJlbmRlckxhbmVzYCBjYW4gY2hhbmdlIGFzIHlvdVxuLy8gZW50ZXIgYW5kIGV4aXQgYW4gT2Zmc2NyZWVuIHRyZWUuIFRoaXMgdmFsdWUgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZW5kZXJcbi8vIGxhbmVzIGZvciB0aGUgZW50aXJlIHJlbmRlciBwaGFzZS5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgd29yayBsZWZ0IG92ZXIgYnkgY29tcG9uZW50cyB0aGF0IHdlcmUgdmlzaXRlZCBkdXJpbmcgdGhpcyByZW5kZXIuIE9ubHlcbi8vIGluY2x1ZGVzIHVucHJvY2Vzc2VkIHVwZGF0ZXMsIG5vdCB3b3JrIGluIGJhaWxlZCBvdXQgY2hpbGRyZW4uXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBMYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCAoaW4gYW4gaW50ZXJsZWF2ZWQgZXZlbnQpIGR1cmluZyB0aGlzIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IE5vTGFuZXM7IC8vIExhbmVzIHRoYXQgd2VyZSBwaW5nZWQgKGluIGFuIGludGVybGVhdmVkIGV2ZW50KSBkdXJpbmcgdGhpcyByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IE5vTGFuZXM7XG52YXIgbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgPSBudWxsOyAvLyBUaGUgbW9zdCByZWNlbnQgdGltZSB3ZSBjb21taXR0ZWQgYSBmYWxsYmFjay4gVGhpcyBsZXRzIHVzIGVuc3VyZSBhIHRyYWluXG4vLyBtb2RlbCB3aGVyZSB3ZSBkb24ndCBjb21taXQgbmV3IGxvYWRpbmcgc3RhdGVzIGluIHRvbyBxdWljayBzdWNjZXNzaW9uLlxuXG52YXIgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IDA7XG52YXIgRkFMTEJBQ0tfVEhST1RUTEVfTVMgPSA1MDA7IC8vIFRoZSBhYnNvbHV0ZSB0aW1lIGZvciB3aGVuIHdlIHNob3VsZCBzdGFydCBnaXZpbmcgdXAgb24gcmVuZGVyaW5nXG4vLyBtb3JlIGFuZCBwcmVmZXIgQ1BVIHN1c3BlbnNlIGhldXJpc3RpY3MgaW5zdGVhZC5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBJbmZpbml0eTsgLy8gSG93IGxvbmcgYSByZW5kZXIgaXMgc3VwcG9zZWQgdG8gdGFrZSBiZWZvcmUgd2Ugc3RhcnQgZm9sbG93aW5nIENQVVxuLy8gc3VzcGVuc2UgaGV1cmlzdGljcyBhbmQgb3B0IG91dCBvZiByZW5kZXJpbmcgbW9yZSBjb250ZW50LlxuXG52YXIgUkVOREVSX1RJTUVPVVRfTVMgPSA1MDA7XG5cbmZ1bmN0aW9uIHJlc2V0UmVuZGVyVGltZXIoKSB7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBub3coKSArIFJFTkRFUl9USU1FT1VUX01TO1xufVxuXG5mdW5jdGlvbiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZTtcbn1cbnZhciBuZXh0RWZmZWN0ID0gbnVsbDtcbnZhciBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG52YXIgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbDtcbnZhciBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7XG52YXIgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbnZhciByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGw7XG52YXIgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSBOb1ByaW9yaXR5JDE7XG52YXIgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBOb0xhbmVzO1xudmFyIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudCA9IFtdO1xudmFyIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50ID0gW107XG52YXIgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG51bGw7IC8vIFVzZSB0aGVzZSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agb2YgbmVzdGVkIHVwZGF0ZXNcblxudmFyIE5FU1RFRF9VUERBVEVfTElNSVQgPSA1MDtcbnZhciBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG52YXIgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcbnZhciBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQgPSA1MDtcbnZhciBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwOyAvLyBNYXJrcyB0aGUgbmVlZCB0byByZXNjaGVkdWxlIHBlbmRpbmcgaW50ZXJhY3Rpb25zIGF0IHRoZXNlIGxhbmVzXG4vLyBkdXJpbmcgdGhlIGNvbW1pdCBwaGFzZS4gVGhpcyBlbmFibGVzIHRoZW0gdG8gYmUgdHJhY2VkIGFjcm9zcyBjb21wb25lbnRzXG4vLyB0aGF0IHNwYXduIG5ldyB3b3JrIGR1cmluZyByZW5kZXIuIEUuZy4gaGlkZGVuIGJvdW5kYXJpZXMsIHN1c3BlbmRlZCBTU1Jcbi8vIGh5ZHJhdGlvbiBvciBTdXNwZW5zZUxpc3QuXG4vLyBUT0RPOiBDYW4gdXNlIGEgYml0bWFzayBpbnN0ZWFkIG9mIGFuIGFycmF5XG5cbnZhciBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7IC8vIElmIHR3byB1cGRhdGVzIGFyZSBzY2hlZHVsZWQgd2l0aGluIHRoZSBzYW1lIGV2ZW50LCB3ZSBzaG91bGQgdHJlYXQgdGhlaXJcbi8vIGV2ZW50IHRpbWVzIGFzIHNpbXVsdGFuZW91cywgZXZlbiBpZiB0aGUgYWN0dWFsIGNsb2NrIHRpbWUgaGFzIGFkdmFuY2VkXG4vLyBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGwuXG5cbnZhciBjdXJyZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG52YXIgY3VycmVudEV2ZW50V2lwTGFuZXMgPSBOb0xhbmVzO1xudmFyIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7IC8vIERldiBvbmx5IGZsYWcgdGhhdCB0cmFja3MgaWYgcGFzc2l2ZSBlZmZlY3RzIGFyZSBjdXJyZW50bHkgYmVpbmcgZmx1c2hlZC5cbi8vIFdlIHdhcm4gYWJvdXQgc3RhdGUgdXBkYXRlcyBmb3IgdW5tb3VudGVkIGNvbXBvbmVudHMgZGlmZmVyZW50bHkgaW4gdGhpcyBjYXNlLlxuXG52YXIgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG52YXIgZm9jdXNlZEluc3RhbmNlSGFuZGxlID0gbnVsbDtcbnZhciBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldFdvcmtJblByb2dyZXNzUm9vdCgpIHtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdDtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RFdmVudFRpbWUoKSB7XG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICAvLyBXZSdyZSBpbnNpZGUgUmVhY3QsIHNvIGl0J3MgZmluZSB0byByZWFkIHRoZSBhY3R1YWwgdGltZS5cbiAgICByZXR1cm4gbm93KCk7XG4gIH0gLy8gV2UncmUgbm90IGluc2lkZSBSZWFjdCwgc28gd2UgbWF5IGJlIGluIHRoZSBtaWRkbGUgb2YgYSBicm93c2VyIGV2ZW50LlxuXG5cbiAgaWYgKGN1cnJlbnRFdmVudFRpbWUgIT09IE5vVGltZXN0YW1wKSB7XG4gICAgLy8gVXNlIHRoZSBzYW1lIHN0YXJ0IHRpbWUgZm9yIGFsbCB1cGRhdGVzIHVudGlsIHdlIGVudGVyIFJlYWN0IGFnYWluLlxuICAgIHJldHVybiBjdXJyZW50RXZlbnRUaW1lO1xuICB9IC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZSBzaW5jZSBSZWFjdCB5aWVsZGVkLiBDb21wdXRlIGEgbmV3IHN0YXJ0IHRpbWUuXG5cblxuICBjdXJyZW50RXZlbnRUaW1lID0gbm93KCk7XG4gIHJldHVybiBjdXJyZW50RXZlbnRUaW1lO1xufVxuZnVuY3Rpb24gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpIHtcbiAgLy8gU3BlY2lhbCBjYXNlc1xuICB2YXIgbW9kZSA9IGZpYmVyLm1vZGU7XG5cbiAgaWYgKChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9IGVsc2UgaWYgKChtb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSA/IFN5bmNMYW5lIDogU3luY0JhdGNoZWRMYW5lO1xuICB9IC8vIFRoZSBhbGdvcml0aG0gZm9yIGFzc2lnbmluZyBhbiB1cGRhdGUgdG8gYSBsYW5lIHNob3VsZCBiZSBzdGFibGUgZm9yIGFsbFxuICAvLyB1cGRhdGVzIGF0IHRoZSBzYW1lIHByaW9yaXR5IHdpdGhpbiB0aGUgc2FtZSBldmVudC4gVG8gZG8gdGhpcywgdGhlIGlucHV0c1xuICAvLyB0byB0aGUgYWxnb3JpdGhtIG11c3QgYmUgdGhlIHNhbWUuIEZvciBleGFtcGxlLCB3ZSB1c2UgdGhlIGByZW5kZXJMYW5lc2BcbiAgLy8gdG8gYXZvaWQgY2hvb3NpbmcgYSBsYW5lIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIHJlbmRlcmluZy5cbiAgLy9cbiAgLy8gSG93ZXZlciwgdGhlIFwiaW5jbHVkZWRcIiBsYW5lcyBjb3VsZCBiZSBtdXRhdGVkIGluIGJldHdlZW4gdXBkYXRlcyBpbiB0aGVcbiAgLy8gc2FtZSBldmVudCwgbGlrZSBpZiB5b3UgcGVyZm9ybSBhbiB1cGRhdGUgaW5zaWRlIGBmbHVzaFN5bmNgLiBPciBhbnkgb3RoZXJcbiAgLy8gY29kZSBwYXRoIHRoYXQgbWlnaHQgY2FsbCBgcHJlcGFyZUZyZXNoU3RhY2tgLlxuICAvL1xuICAvLyBUaGUgdHJpY2sgd2UgdXNlIGlzIHRvIGNhY2hlIHRoZSBmaXJzdCBvZiBlYWNoIG9mIHRoZXNlIGlucHV0cyB3aXRoaW4gYW5cbiAgLy8gZXZlbnQuIFRoZW4gcmVzZXQgdGhlIGNhY2hlZCB2YWx1ZXMgb25jZSB3ZSBjYW4gYmUgc3VyZSB0aGUgZXZlbnQgaXMgb3Zlci5cbiAgLy8gT3VyIGhldXJpc3RpYyBmb3IgdGhhdCBpcyB3aGVuZXZlciB3ZSBlbnRlciBhIGNvbmN1cnJlbnQgd29yayBsb29wLlxuICAvL1xuICAvLyBXZSdsbCBkbyB0aGUgc2FtZSBmb3IgYGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lc2AgYmVsb3cuXG5cblxuICBpZiAoY3VycmVudEV2ZW50V2lwTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXM7XG4gIH1cblxuICB2YXIgaXNUcmFuc2l0aW9uID0gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkgIT09IE5vVHJhbnNpdGlvbjtcblxuICBpZiAoaXNUcmFuc2l0aW9uKSB7XG4gICAgaWYgKGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgIT09IG51bGwgPyBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdC5wZW5kaW5nTGFuZXMgOiBOb0xhbmVzO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5kVHJhbnNpdGlvbkxhbmUoY3VycmVudEV2ZW50V2lwTGFuZXMsIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyk7XG4gIH0gLy8gVE9ETzogUmVtb3ZlIHRoaXMgZGVwZW5kZW5jeSBvbiB0aGUgU2NoZWR1bGVyIHByaW9yaXR5LlxuICAvLyBUbyBkbyB0aGF0LCB3ZSdyZSByZXBsYWNpbmcgaXQgd2l0aCBhbiB1cGRhdGUgbGFuZSBwcmlvcml0eS5cblxuXG4gIHZhciBzY2hlZHVsZXJQcmlvcml0eSA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7IC8vIFRoZSBvbGQgYmVoYXZpb3Igd2FzIHVzaW5nIHRoZSBwcmlvcml0eSBsZXZlbCBvZiB0aGUgU2NoZWR1bGVyLlxuICAvLyBUaGlzIGNvdXBsZXMgUmVhY3QgdG8gdGhlIFNjaGVkdWxlciBpbnRlcm5hbHMsIHNvIHdlJ3JlIHJlcGxhY2luZyBpdFxuICAvLyB3aXRoIHRoZSBjdXJyZW50VXBkYXRlTGFuZVByaW9yaXR5IGFib3ZlLiBBcyBhbiBleGFtcGxlIG9mIGhvdyB0aGlzXG4gIC8vIGNvdWxkIGJlIHByb2JsZW1hdGljLCBpZiB3ZSdyZSBub3QgaW5zaWRlIGBTY2hlZHVsZXIucnVuV2l0aFByaW9yaXR5YCxcbiAgLy8gdGhlbiB3ZSdsbCBnZXQgdGhlIHByaW9yaXR5IG9mIHRoZSBjdXJyZW50IHJ1bm5pbmcgU2NoZWR1bGVyIHRhc2ssXG4gIC8vIHdoaWNoIGlzIHByb2JhYmx5IG5vdCB3aGF0IHdlIHdhbnQuXG5cbiAgdmFyIGxhbmU7XG5cbiAgaWYgKCAvLyBUT0RPOiBUZW1wb3JhcnkuIFdlJ3JlIHJlbW92aW5nIHRoZSBjb25jZXB0IG9mIGRpc2NyZXRlIHVwZGF0ZXMuXG4gIChleGVjdXRpb25Db250ZXh0ICYgRGlzY3JldGVFdmVudENvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgc2NoZWR1bGVyUHJpb3JpdHkgPT09IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIpIHtcbiAgICBsYW5lID0gZmluZFVwZGF0ZUxhbmUoSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eSwgY3VycmVudEV2ZW50V2lwTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzY2hlZHVsZXJMYW5lUHJpb3JpdHkgPSBzY2hlZHVsZXJQcmlvcml0eVRvTGFuZVByaW9yaXR5KHNjaGVkdWxlclByaW9yaXR5KTtcblxuICAgIGxhbmUgPSBmaW5kVXBkYXRlTGFuZShzY2hlZHVsZXJMYW5lUHJpb3JpdHksIGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0UmV0cnlMYW5lKGZpYmVyKSB7XG4gIC8vIFRoaXMgaXMgYSBmb3JrIG9mIGByZXF1ZXN0VXBkYXRlTGFuZWAgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBTdXNwZW5zZVxuICAvLyBcInJldHJpZXNcIiBcdTIwMTQgYSBzcGVjaWFsIHVwZGF0ZSB0aGF0IGF0dGVtcHRzIHRvIGZsaXAgYSBTdXNwZW5zZSBib3VuZGFyeVxuICAvLyBmcm9tIGl0cyBwbGFjZWhvbGRlciBzdGF0ZSB0byBpdHMgcHJpbWFyeS9yZXNvbHZlZCBzdGF0ZS5cbiAgLy8gU3BlY2lhbCBjYXNlc1xuICB2YXIgbW9kZSA9IGZpYmVyLm1vZGU7XG5cbiAgaWYgKChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9IGVsc2UgaWYgKChtb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSA/IFN5bmNMYW5lIDogU3luY0JhdGNoZWRMYW5lO1xuICB9IC8vIFNlZSBgcmVxdWVzdFVwZGF0ZUxhbmVgIGZvciBleHBsYW5hdGlvbiBvZiBgY3VycmVudEV2ZW50V2lwTGFuZXNgXG5cblxuICBpZiAoY3VycmVudEV2ZW50V2lwTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXM7XG4gIH1cblxuICByZXR1cm4gZmluZFJldHJ5TGFuZShjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKSB7XG4gIGNoZWNrRm9yTmVzdGVkVXBkYXRlcygpO1xuICB3YXJuQWJvdXRSZW5kZXJQaGFzZVVwZGF0ZXNJbkRFVihmaWJlcik7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIGxhbmUpO1xuXG4gIGlmIChyb290ID09PSBudWxsKSB7XG4gICAgd2FybkFib3V0VXBkYXRlT25Vbm1vdW50ZWRGaWJlckluREVWKGZpYmVyKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBNYXJrIHRoYXQgdGhlIHJvb3QgaGFzIGEgcGVuZGluZyB1cGRhdGUuXG5cblxuICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgbGFuZSwgZXZlbnRUaW1lKTtcblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgLy8gUmVjZWl2ZWQgYW4gdXBkYXRlIHRvIGEgdHJlZSB0aGF0J3MgaW4gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcuIE1hcmtcbiAgICAvLyB0aGF0IHRoZXJlIHdhcyBhbiBpbnRlcmxlYXZlZCB1cGRhdGUgd29yayBvbiB0aGlzIHJvb3QuIFVubGVzcyB0aGVcbiAgICAvLyBgZGVmZXJSZW5kZXJQaGFzZVVwZGF0ZVRvTmV4dEJhdGNoYCBmbGFnIGlzIG9mZiBhbmQgdGhpcyBpcyBhIHJlbmRlclxuICAgIC8vIHBoYXNlIHVwZGF0ZS4gSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB0cmVhdCByZW5kZXIgcGhhc2UgdXBkYXRlcyBhcyBpZlxuICAgIC8vIHRoZXkgd2VyZSBpbnRlcmxlYXZlZCwgZm9yIGJhY2t3YXJkcyBjb21wYXQgcmVhc29ucy5cbiAgICB7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcywgbGFuZSk7XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkpIHtcbiAgICAgIC8vIFRoZSByb290IGFscmVhZHkgc3VzcGVuZGVkIHdpdGggYSBkZWxheSwgd2hpY2ggbWVhbnMgdGhpcyByZW5kZXJcbiAgICAgIC8vIGRlZmluaXRlbHkgd29uJ3QgZmluaXNoLiBTaW5jZSB3ZSBoYXZlIGEgbmV3IHVwZGF0ZSwgbGV0J3MgbWFyayBpdCBhc1xuICAgICAgLy8gc3VzcGVuZGVkIG5vdywgcmlnaHQgYmVmb3JlIG1hcmtpbmcgdGhlIGluY29taW5nIHVwZGF0ZS4gVGhpcyBoYXMgdGhlXG4gICAgICAvLyBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHJlbmRlciBhbmQgc3dpdGNoaW5nIHRvIHRoZSB1cGRhdGUuXG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgdGhpcyBkb2Vzbid0IG92ZXJyaWRlIHBpbmdzIHRoYXQgaGFwcGVuIHdoaWxlIHdlJ3ZlXG4gICAgICAvLyBhbHJlYWR5IHN0YXJ0ZWQgcmVuZGVyaW5nLlxuICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IC8vIFRPRE86IHJlcXVlc3RVcGRhdGVMYW5lUHJpb3JpdHkgYWxzbyByZWFkcyB0aGUgcHJpb3JpdHkuIFBhc3MgdGhlXG4gIC8vIHByaW9yaXR5IGFzIGFuIGFyZ3VtZW50IHRvIHRoYXQgZnVuY3Rpb24gYW5kIHRoaXMgb25lLlxuXG5cbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuXG4gIGlmIChsYW5lID09PSBTeW5jTGFuZSkge1xuICAgIGlmICggLy8gQ2hlY2sgaWYgd2UncmUgaW5zaWRlIHVuYmF0Y2hlZFVwZGF0ZXNcbiAgICAoZXhlY3V0aW9uQ29udGV4dCAmIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgLy8gQ2hlY2sgaWYgd2UncmUgbm90IGFscmVhZHkgcmVuZGVyaW5nXG4gICAgKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBSZWdpc3RlciBwZW5kaW5nIGludGVyYWN0aW9ucyBvbiB0aGUgcm9vdCB0byBhdm9pZCBsb3NpbmcgdHJhY2VkIGludGVyYWN0aW9uIGRhdGEuXG4gICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSk7IC8vIFRoaXMgaXMgYSBsZWdhY3kgZWRnZSBjYXNlLiBUaGUgaW5pdGlhbCBtb3VudCBvZiBhIFJlYWN0RE9NLnJlbmRlci1lZFxuICAgICAgLy8gcm9vdCBpbnNpZGUgb2YgYmF0Y2hlZFVwZGF0ZXMgc2hvdWxkIGJlIHN5bmNocm9ub3VzLCBidXQgbGF5b3V0IHVwZGF0ZXNcbiAgICAgIC8vIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBiYXRjaC5cblxuICAgICAgcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTtcblxuICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgICAvLyBGbHVzaCB0aGUgc3luY2hyb25vdXMgd29yayBub3csIHVubGVzcyB3ZSdyZSBhbHJlYWR5IHdvcmtpbmcgb3IgaW5zaWRlXG4gICAgICAgIC8vIGEgYmF0Y2guIFRoaXMgaXMgaW50ZW50aW9uYWxseSBpbnNpZGUgc2NoZWR1bGVVcGRhdGVPbkZpYmVyIGluc3RlYWQgb2ZcbiAgICAgICAgLy8gc2NoZWR1bGVDYWxsYmFja0ZvckZpYmVyIHRvIHByZXNlcnZlIHRoZSBhYmlsaXR5IHRvIHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAgICAgICAgLy8gd2l0aG91dCBpbW1lZGlhdGVseSBmbHVzaGluZyBpdC4gV2Ugb25seSBkbyB0aGlzIGZvciB1c2VyLWluaXRpYXRlZFxuICAgICAgICAvLyB1cGRhdGVzLCB0byBwcmVzZXJ2ZSBoaXN0b3JpY2FsIGJlaGF2aW9yIG9mIGxlZ2FjeSBtb2RlLlxuICAgICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU2NoZWR1bGUgYSBkaXNjcmV0ZSB1cGRhdGUgYnV0IG9ubHkgaWYgaXQncyBub3QgU3luYy5cbiAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBEaXNjcmV0ZUV2ZW50Q29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAoIC8vIE9ubHkgdXBkYXRlcyBhdCB1c2VyLWJsb2NraW5nIHByaW9yaXR5IG9yIGdyZWF0ZXIgYXJlIGNvbnNpZGVyZWRcbiAgICAvLyBkaXNjcmV0ZSwgZXZlbiBpbnNpZGUgYSBkaXNjcmV0ZSBldmVudC5cbiAgICBwcmlvcml0eUxldmVsID09PSBVc2VyQmxvY2tpbmdQcmlvcml0eSQyIHx8IHByaW9yaXR5TGV2ZWwgPT09IEltbWVkaWF0ZVByaW9yaXR5JDEpKSB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSByZXN1bHQgb2YgYSBkaXNjcmV0ZSBldmVudC4gVHJhY2sgdGhlIGxvd2VzdCBwcmlvcml0eVxuICAgICAgLy8gZGlzY3JldGUgdXBkYXRlIHBlciByb290IHNvIHdlIGNhbiBmbHVzaCB0aGVtIGVhcmx5LCBpZiBuZWVkZWQuXG4gICAgICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9PT0gbnVsbCkge1xuICAgICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbmV3IFNldChbcm9vdF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcy5hZGQocm9vdCk7XG4gICAgICB9XG4gICAgfSAvLyBTY2hlZHVsZSBvdGhlciB1cGRhdGVzIGFmdGVyIGluIGNhc2UgdGhlIGNhbGxiYWNrIGlzIHN5bmMuXG5cblxuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTtcbiAgfSAvLyBXZSB1c2UgdGhpcyB3aGVuIGFzc2lnbmluZyBhIGxhbmUgZm9yIGEgdHJhbnNpdGlvbiBpbnNpZGVcbiAgLy8gYHJlcXVlc3RVcGRhdGVMYW5lYC4gV2UgYXNzdW1lIGl0J3MgdGhlIHNhbWUgYXMgdGhlIHJvb3QgYmVpbmcgdXBkYXRlZCxcbiAgLy8gc2luY2UgaW4gdGhlIGNvbW1vbiBjYXNlIG9mIGEgc2luZ2xlIHJvb3QgYXBwIGl0IHByb2JhYmx5IGlzLiBJZiBpdCdzIG5vdFxuICAvLyB0aGUgc2FtZSByb290LCB0aGVuIGl0J3Mgbm90IGEgaHVnZSBkZWFsLCB3ZSBqdXN0IG1pZ2h0IGJhdGNoIG1vcmUgc3R1ZmZcbiAgLy8gdG9nZXRoZXIgbW9yZSB0aGFuIG5lY2Vzc2FyeS5cblxuXG4gIG1vc3RSZWNlbnRseVVwZGF0ZWRSb290ID0gcm9vdDtcbn0gLy8gVGhpcyBpcyBzcGxpdCBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gd2UgY2FuIG1hcmsgYSBmaWJlciB3aXRoIHBlbmRpbmdcbi8vIHdvcmsgd2l0aG91dCB0cmVhdGluZyBpdCBhcyBhIHR5cGljYWwgdXBkYXRlIHRoYXQgb3JpZ2luYXRlcyBmcm9tIGFuIGV2ZW50O1xuLy8gZS5nLiByZXRyeWluZyBhIFN1c3BlbnNlIGJvdW5kYXJ5IGlzbid0IGFuIHVwZGF0ZSwgYnV0IGl0IGRvZXMgc2NoZWR1bGUgd29ya1xuLy8gb24gYSBmaWJlci5cblxuZnVuY3Rpb24gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qoc291cmNlRmliZXIsIGxhbmUpIHtcbiAgLy8gVXBkYXRlIHRoZSBzb3VyY2UgZmliZXIncyBsYW5lc1xuICBzb3VyY2VGaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoc291cmNlRmliZXIubGFuZXMsIGxhbmUpO1xuICB2YXIgYWx0ZXJuYXRlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgbGFuZSk7XG4gIH1cblxuICB7XG4gICAgaWYgKGFsdGVybmF0ZSA9PT0gbnVsbCAmJiAoc291cmNlRmliZXIuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpO1xuICAgIH1cbiAgfSAvLyBXYWxrIHRoZSBwYXJlbnQgcGF0aCB0byB0aGUgcm9vdCBhbmQgdXBkYXRlIHRoZSBjaGlsZCBleHBpcmF0aW9uIHRpbWUuXG5cblxuICB2YXIgbm9kZSA9IHNvdXJjZUZpYmVyO1xuICB2YXIgcGFyZW50ID0gc291cmNlRmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICBwYXJlbnQuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMocGFyZW50LmNoaWxkTGFuZXMsIGxhbmUpO1xuICAgIGFsdGVybmF0ZSA9IHBhcmVudC5hbHRlcm5hdGU7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIGxhbmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIGlmICgocGFyZW50LmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gcGFyZW50O1xuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cblxuICBpZiAobm9kZS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgdmFyIHJvb3QgPSBub2RlLnN0YXRlTm9kZTtcbiAgICByZXR1cm4gcm9vdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSAvLyBVc2UgdGhpcyBmdW5jdGlvbiB0byBzY2hlZHVsZSBhIHRhc2sgZm9yIGEgcm9vdC4gVGhlcmUncyBvbmx5IG9uZSB0YXNrIHBlclxuLy8gcm9vdDsgaWYgYSB0YXNrIHdhcyBhbHJlYWR5IHNjaGVkdWxlZCwgd2UnbGwgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBwcmlvcml0eVxuLy8gb2YgdGhlIGV4aXN0aW5nIHRhc2sgaXMgdGhlIHNhbWUgYXMgdGhlIHByaW9yaXR5IG9mIHRoZSBuZXh0IGxldmVsIHRoYXQgdGhlXG4vLyByb290IGhhcyB3b3JrIG9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBldmVyeSB1cGRhdGUsIGFuZCByaWdodCBiZWZvcmVcbi8vIGV4aXRpbmcgYSB0YXNrLlxuXG5cbmZ1bmN0aW9uIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBjdXJyZW50VGltZSkge1xuICB2YXIgZXhpc3RpbmdDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTsgLy8gQ2hlY2sgaWYgYW55IGxhbmVzIGFyZSBiZWluZyBzdGFydmVkIGJ5IG90aGVyIHdvcmsuIElmIHNvLCBtYXJrIHRoZW0gYXNcbiAgLy8gZXhwaXJlZCBzbyB3ZSBrbm93IHRvIHdvcmsgb24gdGhvc2UgbmV4dC5cblxuICBtYXJrU3RhcnZlZExhbmVzQXNFeHBpcmVkKHJvb3QsIGN1cnJlbnRUaW1lKTsgLy8gRGV0ZXJtaW5lIHRoZSBuZXh0IGxhbmVzIHRvIHdvcmsgb24sIGFuZCB0aGVpciBwcmlvcml0eS5cblxuICB2YXIgbmV4dExhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lcyk7IC8vIFRoaXMgcmV0dXJucyB0aGUgcHJpb3JpdHkgbGV2ZWwgY29tcHV0ZWQgZHVyaW5nIHRoZSBgZ2V0TmV4dExhbmVzYCBjYWxsLlxuXG4gIHZhciBuZXdDYWxsYmFja1ByaW9yaXR5ID0gcmV0dXJuTmV4dExhbmVzUHJpb3JpdHkoKTtcblxuICBpZiAobmV4dExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBUaGVyZSdzIG5vdGhpbmcgdG8gd29yayBvbi5cbiAgICBpZiAoZXhpc3RpbmdDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgICAgIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICAgIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfSAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHRhc2suIFdlIG1heSBiZSBhYmxlIHRvIHJldXNlIGl0LlxuXG5cbiAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyIGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSA9IHJvb3QuY2FsbGJhY2tQcmlvcml0eTtcblxuICAgIGlmIChleGlzdGluZ0NhbGxiYWNrUHJpb3JpdHkgPT09IG5ld0NhbGxiYWNrUHJpb3JpdHkpIHtcbiAgICAgIC8vIFRoZSBwcmlvcml0eSBoYXNuJ3QgY2hhbmdlZC4gV2UgY2FuIHJldXNlIHRoZSBleGlzdGluZyB0YXNrLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gVGhlIHByaW9yaXR5IGNoYW5nZWQuIENhbmNlbCB0aGUgZXhpc3RpbmcgY2FsbGJhY2suIFdlJ2xsIHNjaGVkdWxlIGEgbmV3XG4gICAgLy8gb25lIGJlbG93LlxuXG5cbiAgICBjYW5jZWxDYWxsYmFjayhleGlzdGluZ0NhbGxiYWNrTm9kZSk7XG4gIH0gLy8gU2NoZWR1bGUgYSBuZXcgY2FsbGJhY2suXG5cblxuICB2YXIgbmV3Q2FsbGJhY2tOb2RlO1xuXG4gIGlmIChuZXdDYWxsYmFja1ByaW9yaXR5ID09PSBTeW5jTGFuZVByaW9yaXR5KSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBTeW5jIFJlYWN0IGNhbGxiYWNrcyBhcmUgc2NoZWR1bGVkIG9uIGEgc3BlY2lhbFxuICAgIC8vIGludGVybmFsIHF1ZXVlXG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVTeW5jQ2FsbGJhY2socGVyZm9ybVN5bmNXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICB9IGVsc2UgaWYgKG5ld0NhbGxiYWNrUHJpb3JpdHkgPT09IFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5KSB7XG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBwZXJmb3JtU3luY1dvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVkdWxlclByaW9yaXR5TGV2ZWwgPSBsYW5lUHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KG5ld0NhbGxiYWNrUHJpb3JpdHkpO1xuICAgIG5ld0NhbGxiYWNrTm9kZSA9IHNjaGVkdWxlQ2FsbGJhY2soc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCwgcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICB9XG5cbiAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gbmV3Q2FsbGJhY2tQcmlvcml0eTtcbiAgcm9vdC5jYWxsYmFja05vZGUgPSBuZXdDYWxsYmFja05vZGU7XG59IC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBldmVyeSBjb25jdXJyZW50IHRhc2ssIGkuZS4gYW55dGhpbmcgdGhhdFxuLy8gZ29lcyB0aHJvdWdoIFNjaGVkdWxlci5cblxuXG5mdW5jdGlvbiBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3Qocm9vdCkge1xuICAvLyBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIGEgUmVhY3QgZXZlbnQsIHdlIGNhbiBjbGVhciB0aGUgY3VycmVudFxuICAvLyBldmVudCB0aW1lLiBUaGUgbmV4dCB1cGRhdGUgd2lsbCBjb21wdXRlIGEgbmV3IGV2ZW50IHRpbWUuXG4gIGN1cnJlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcbiAgY3VycmVudEV2ZW50V2lwTGFuZXMgPSBOb0xhbmVzO1xuICBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfSAvLyBGbHVzaCBhbnkgcGVuZGluZyBwYXNzaXZlIGVmZmVjdHMgYmVmb3JlIGRlY2lkaW5nIHdoaWNoIGxhbmVzIHRvIHdvcmsgb24sXG4gIC8vIGluIGNhc2UgdGhleSBzY2hlZHVsZSBhZGRpdGlvbmFsIHdvcmsuXG5cblxuICB2YXIgb3JpZ2luYWxDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTtcbiAgdmFyIGRpZEZsdXNoUGFzc2l2ZUVmZmVjdHMgPSBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG5cbiAgaWYgKGRpZEZsdXNoUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAvLyBTb21ldGhpbmcgaW4gdGhlIHBhc3NpdmUgZWZmZWN0IHBoYXNlIG1heSBoYXZlIGNhbmNlbGVkIHRoZSBjdXJyZW50IHRhc2suXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhc2sgbm9kZSBmb3IgdGhpcyByb290IHdhcyBjaGFuZ2VkLlxuICAgIGlmIChyb290LmNhbGxiYWNrTm9kZSAhPT0gb3JpZ2luYWxDYWxsYmFja05vZGUpIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50IHRhc2sgd2FzIGNhbmNlbGVkLiBFeGl0LiBXZSBkb24ndCBuZWVkIHRvIGNhbGxcbiAgICAgIC8vIGBlbnN1cmVSb290SXNTY2hlZHVsZWRgIGJlY2F1c2UgdGhlIGNoZWNrIGFib3ZlIGltcGxpZXMgZWl0aGVyIHRoYXRcbiAgICAgIC8vIHRoZXJlJ3MgYSBuZXcgdGFzaywgb3IgdGhhdCB0aGVyZSdzIG5vIHJlbWFpbmluZyB3b3JrIG9uIHRoaXMgcm9vdC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSAvLyBEZXRlcm1pbmUgdGhlIG5leHQgZXhwaXJhdGlvbiB0aW1lIHRvIHdvcmsgb24sIHVzaW5nIHRoZSBmaWVsZHMgc3RvcmVkXG4gIC8vIG9uIHRoZSByb290LlxuXG5cbiAgdmFyIGxhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lcyk7XG5cbiAgaWYgKGxhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gRGVmZW5zaXZlIGNvZGluZy4gVGhpcyBpcyBuZXZlciBleHBlY3RlZCB0byBoYXBwZW4uXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKTtcblxuICBpZiAoaW5jbHVkZXNTb21lTGFuZSh3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpKSB7XG4gICAgLy8gVGhlIHJlbmRlciBpbmNsdWRlZCBsYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAvLyBGb3IgZXhhbXBsZSwgd2hlbiB1bmhpZGluZyBhIGhpZGRlbiB0cmVlLCB3ZSBpbmNsdWRlIGFsbCB0aGUgbGFuZXNcbiAgICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBza2lwcGVkIHdoZW4gdGhlIHRyZWUgd2FzIGhpZGRlbi4gVGhhdCBzZXQgb2ZcbiAgICAvLyBsYW5lcyBpcyBhIHN1cGVyc2V0IG9mIHRoZSBsYW5lcyB3ZSBzdGFydGVkIHJlbmRlcmluZyB3aXRoLlxuICAgIC8vXG4gICAgLy8gU28gd2UnbGwgdGhyb3cgb3V0IHRoZSBjdXJyZW50IHdvcmsgYW5kIHJlc3RhcnQuXG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gIH0gZWxzZSBpZiAoZXhpdFN0YXR1cyAhPT0gUm9vdEluY29tcGxldGUpIHtcbiAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEVycm9yZWQpIHtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmV0cnlBZnRlckVycm9yOyAvLyBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgaHlkcmF0aW9uLFxuICAgICAgLy8gZGlzY2FyZCBzZXJ2ZXIgcmVzcG9uc2UgYW5kIGZhbGwgYmFjayB0byBjbGllbnQgc2lkZSByZW5kZXIuXG5cbiAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICB9IC8vIElmIHNvbWV0aGluZyB0aHJldyBhbiBlcnJvciwgdHJ5IHJlbmRlcmluZyBvbmUgbW9yZSB0aW1lLiBXZSdsbCByZW5kZXJcbiAgICAgIC8vIHN5bmNocm9ub3VzbHkgdG8gYmxvY2sgY29uY3VycmVudCBkYXRhIG11dGF0aW9ucywgYW5kIHdlJ2xsIGluY2x1ZGVzXG4gICAgICAvLyBhbGwgcGVuZGluZyB1cGRhdGVzIGFyZSBpbmNsdWRlZC4gSWYgaXQgc3RpbGwgZmFpbHMgYWZ0ZXIgdGhlIHNlY29uZFxuICAgICAgLy8gYXR0ZW1wdCwgd2UnbGwgZ2l2ZSB1cCBhbmQgY29tbWl0IHRoZSByZXN1bHRpbmcgdHJlZS5cblxuXG4gICAgICBsYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpO1xuXG4gICAgICBpZiAobGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEZhdGFsRXJyb3JlZCkge1xuICAgICAgdmFyIGZhdGFsRXJyb3IgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yO1xuICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgICB0aHJvdyBmYXRhbEVycm9yO1xuICAgIH0gLy8gV2Ugbm93IGhhdmUgYSBjb25zaXN0ZW50IHRyZWUuIFRoZSBuZXh0IHN0ZXAgaXMgZWl0aGVyIHRvIGNvbW1pdCBpdCxcbiAgICAvLyBvciwgaWYgc29tZXRoaW5nIHN1c3BlbmRlZCwgd2FpdCB0byBjb21taXQgaXQgYWZ0ZXIgYSB0aW1lb3V0LlxuXG5cbiAgICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgICByb290LmZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yaztcbiAgICByb290LmZpbmlzaGVkTGFuZXMgPSBsYW5lcztcbiAgICBmaW5pc2hDb25jdXJyZW50UmVuZGVyKHJvb3QsIGV4aXRTdGF0dXMsIGxhbmVzKTtcbiAgfVxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG5cbiAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlID09PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgIC8vIFRoZSB0YXNrIG5vZGUgc2NoZWR1bGVkIGZvciB0aGlzIHJvb3QgaXMgdGhlIHNhbWUgb25lIHRoYXQnc1xuICAgIC8vIGN1cnJlbnRseSBleGVjdXRlZC4gTmVlZCB0byByZXR1cm4gYSBjb250aW51YXRpb24uXG4gICAgcmV0dXJuIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgbGFuZXMpIHtcbiAgc3dpdGNoIChleGl0U3RhdHVzKSB7XG4gICAgY2FzZSBSb290SW5jb21wbGV0ZTpcbiAgICBjYXNlIFJvb3RGYXRhbEVycm9yZWQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJSb290IGRpZCBub3QgY29tcGxldGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAvLyBGbG93IGtub3dzIGFib3V0IGludmFyaWFudCwgc28gaXQgY29tcGxhaW5zIGlmIEkgYWRkIGEgYnJlYWtcbiAgICAvLyBzdGF0ZW1lbnQsIGJ1dCBlc2xpbnQgZG9lc24ndCBrbm93IGFib3V0IGludmFyaWFudCwgc28gaXQgY29tcGxhaW5zXG4gICAgLy8gaWYgSSBkby4gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG5cbiAgICBjYXNlIFJvb3RFcnJvcmVkOlxuICAgICAge1xuICAgICAgICAvLyBXZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGF0dGVtcHRlZCB0byByZXRyeSB0aGlzIHRyZWUuIElmIHdlIHJlYWNoZWRcbiAgICAgICAgLy8gdGhpcyBwb2ludCwgaXQgZXJyb3JlZCBhZ2Fpbi4gQ29tbWl0IGl0LlxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUm9vdFN1c3BlbmRlZDpcbiAgICAgIHtcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7IC8vIFdlIGhhdmUgYW4gYWNjZXB0YWJsZSBsb2FkaW5nIHN0YXRlLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgd2VcbiAgICAgICAgLy8gc2hvdWxkIGltbWVkaWF0ZWx5IGNvbW1pdCBpdCBvciB3YWl0IGEgYml0LlxuXG4gICAgICAgIGlmIChpbmNsdWRlc09ubHlSZXRyaWVzKGxhbmVzKSAmJiAvLyBkbyBub3QgZGVsYXkgaWYgd2UncmUgaW5zaWRlIGFuIGFjdCgpIHNjb3BlXG4gICAgICAgICFzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSkge1xuICAgICAgICAgIC8vIFRoaXMgcmVuZGVyIG9ubHkgaW5jbHVkZWQgcmV0cmllcywgbm8gdXBkYXRlcy4gVGhyb3R0bGUgY29tbWl0dGluZ1xuICAgICAgICAgIC8vIHJldHJpZXMgc28gdGhhdCB3ZSBkb24ndCBzaG93IHRvbyBtYW55IGxvYWRpbmcgc3RhdGVzIHRvbyBxdWlja2x5LlxuICAgICAgICAgIHZhciBtc1VudGlsVGltZW91dCA9IGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgKyBGQUxMQkFDS19USFJPVFRMRV9NUyAtIG5vdygpOyAvLyBEb24ndCBib3RoZXIgd2l0aCBhIHZlcnkgc2hvcnQgc3VzcGVuc2UgdGltZS5cblxuICAgICAgICAgIGlmIChtc1VudGlsVGltZW91dCA+IDEwKSB7XG4gICAgICAgICAgICB2YXIgbmV4dExhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIE5vTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAobmV4dExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgICAgIC8vIFRoZXJlJ3MgYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgcm9vdC5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgICAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHN1c3BlbmRlZExhbmVzLCBsYW5lcykpIHtcbiAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIHByZWZlciB0byByZW5kZXIgdGhlIGZhbGxiYWNrIG9mIGF0IHRoZSBsYXN0XG4gICAgICAgICAgICAgIC8vIHN1c3BlbmRlZCBsZXZlbC4gUGluZyB0aGUgbGFzdCBzdXNwZW5kZWQgbGV2ZWwgdG8gdHJ5XG4gICAgICAgICAgICAgIC8vIHJlbmRlcmluZyBpdCBhZ2Fpbi5cbiAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIHN1c3BlbmRlZCBsYW5lcyBhcmUgSWRsZT8gU2hvdWxkIG5vdCByZXN0YXJ0LlxuICAgICAgICAgICAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgICAgICAgICAgICBtYXJrUm9vdFBpbmdlZChyb290LCBzdXNwZW5kZWRMYW5lcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSAvLyBUaGUgcmVuZGVyIGlzIHN1c3BlbmRlZCwgaXQgaGFzbid0IHRpbWVkIG91dCwgYW5kIHRoZXJlJ3Mgbm9cbiAgICAgICAgICAgIC8vIGxvd2VyIHByaW9yaXR5IHdvcmsgdG8gZG8uIEluc3RlYWQgb2YgY29tbWl0dGluZyB0aGUgZmFsbGJhY2tcbiAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5LCB3YWl0IGZvciBtb3JlIGRhdGEgdG8gYXJyaXZlLlxuXG5cbiAgICAgICAgICAgIHJvb3QudGltZW91dEhhbmRsZSA9IHNjaGVkdWxlVGltZW91dChjb21taXRSb290LmJpbmQobnVsbCwgcm9vdCksIG1zVW50aWxUaW1lb3V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUaGUgd29yayBleHBpcmVkLiBDb21taXQgaW1tZWRpYXRlbHkuXG5cblxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUm9vdFN1c3BlbmRlZFdpdGhEZWxheTpcbiAgICAgIHtcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKGluY2x1ZGVzT25seVRyYW5zaXRpb25zKGxhbmVzKSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSB0cmFuc2l0aW9uLCBzbyB3ZSBzaG91bGQgZXhpdCB3aXRob3V0IGNvbW1pdHRpbmcgYVxuICAgICAgICAgIC8vIHBsYWNlaG9sZGVyIGFuZCB3aXRob3V0IHNjaGVkdWxpbmcgYSB0aW1lb3V0LiBEZWxheSBpbmRlZmluaXRlbHlcbiAgICAgICAgICAvLyB1bnRpbCB3ZSByZWNlaXZlIG1vcmUgZGF0YS5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHRyYW5zaXRpb24sIGJ1dCB3ZSBkaWQgdHJpZ2dlciBhbiBhdm9pZGVkIHN0YXRlLlxuICAgICAgICAgIC8vIFNjaGVkdWxlIGEgcGxhY2Vob2xkZXIgdG8gZGlzcGxheSBhZnRlciBhIHNob3J0IGRlbGF5LCB1c2luZyB0aGUgSnVzdFxuICAgICAgICAgIC8vIE5vdGljZWFibGUgRGlmZmVyZW5jZS5cbiAgICAgICAgICAvLyBUT0RPOiBJcyB0aGUgSk5EIG9wdGltaXphdGlvbiB3b3J0aCB0aGUgYWRkZWQgY29tcGxleGl0eT8gSWYgdGhpcyBpc1xuICAgICAgICAgIC8vIHRoZSBvbmx5IHJlYXNvbiB3ZSB0cmFjayB0aGUgZXZlbnQgdGltZSwgdGhlbiBwcm9iYWJseSBub3QuXG4gICAgICAgICAgLy8gQ29uc2lkZXIgcmVtb3ZpbmcuXG4gICAgICAgICAgdmFyIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBnZXRNb3N0UmVjZW50RXZlbnRUaW1lKHJvb3QsIGxhbmVzKTtcbiAgICAgICAgICB2YXIgZXZlbnRUaW1lTXMgPSBtb3N0UmVjZW50RXZlbnRUaW1lO1xuICAgICAgICAgIHZhciB0aW1lRWxhcHNlZE1zID0gbm93KCkgLSBldmVudFRpbWVNcztcblxuICAgICAgICAgIHZhciBfbXNVbnRpbFRpbWVvdXQgPSBqbmQodGltZUVsYXBzZWRNcykgLSB0aW1lRWxhcHNlZE1zOyAvLyBEb24ndCBib3RoZXIgd2l0aCBhIHZlcnkgc2hvcnQgc3VzcGVuc2UgdGltZS5cblxuXG4gICAgICAgICAgaWYgKF9tc1VudGlsVGltZW91dCA+IDEwKSB7XG4gICAgICAgICAgICAvLyBJbnN0ZWFkIG9mIGNvbW1pdHRpbmcgdGhlIGZhbGxiYWNrIGltbWVkaWF0ZWx5LCB3YWl0IGZvciBtb3JlIGRhdGFcbiAgICAgICAgICAgIC8vIHRvIGFycml2ZS5cbiAgICAgICAgICAgIHJvb3QudGltZW91dEhhbmRsZSA9IHNjaGVkdWxlVGltZW91dChjb21taXRSb290LmJpbmQobnVsbCwgcm9vdCksIF9tc1VudGlsVGltZW91dCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gQ29tbWl0IHRoZSBwbGFjZWhvbGRlci5cblxuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290Q29tcGxldGVkOlxuICAgICAge1xuICAgICAgICAvLyBUaGUgd29yayBjb21wbGV0ZWQuIFJlYWR5IHRvIGNvbW1pdC5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biByb290IGV4aXQgc3RhdHVzLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBzdXNwZW5kZWRMYW5lcykge1xuICAvLyBXaGVuIHN1c3BlbmRpbmcsIHdlIHNob3VsZCBhbHdheXMgZXhjbHVkZSBsYW5lcyB0aGF0IHdlcmUgcGluZ2VkIG9yIChtb3JlXG4gIC8vIHJhcmVseSwgc2luY2Ugd2UgdHJ5IHRvIGF2b2lkIGl0KSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAvLyBUT0RPOiBMb2wgbWF5YmUgdGhlcmUncyBhIGJldHRlciB3YXkgdG8gZmFjdG9yIHRoaXMgYmVzaWRlcyB0aGlzXG4gIC8vIG9ibm94aW91c2x5IG5hbWVkIGZ1bmN0aW9uIDopXG4gIHN1c3BlbmRlZExhbmVzID0gcmVtb3ZlTGFuZXMoc3VzcGVuZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzKTtcbiAgc3VzcGVuZGVkTGFuZXMgPSByZW1vdmVMYW5lcyhzdXNwZW5kZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKTtcbiAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpO1xufSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igc3luY2hyb25vdXMgdGFza3MgdGhhdCBkb24ndCBnb1xuLy8gdGhyb3VnaCBTY2hlZHVsZXJcblxuXG5mdW5jdGlvbiBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCkge1xuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIgKTtcbiAgICB9XG4gIH1cblxuICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIHZhciBsYW5lcztcbiAgdmFyIGV4aXRTdGF0dXM7XG5cbiAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJiBpbmNsdWRlc1NvbWVMYW5lKHJvb3QuZXhwaXJlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykpIHtcbiAgICAvLyBUaGVyZSdzIGEgcGFydGlhbCB0cmVlLCBhbmQgYXQgbGVhc3Qgb25lIG9mIGl0cyBsYW5lcyBoYXMgZXhwaXJlZC4gRmluaXNoXG4gICAgLy8gcmVuZGVyaW5nIGl0IGJlZm9yZSByZW5kZXJpbmcgdGhlIHJlc3Qgb2YgdGhlIGV4cGlyZWQgd29yay5cbiAgICBsYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzO1xuICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG5cbiAgICBpZiAoaW5jbHVkZXNTb21lTGFuZSh3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpKSB7XG4gICAgICAvLyBUaGUgcmVuZGVyIGluY2x1ZGVkIGxhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgLy8gRm9yIGV4YW1wbGUsIHdoZW4gdW5oaWRpbmcgYSBoaWRkZW4gdHJlZSwgd2UgaW5jbHVkZSBhbGwgdGhlIGxhbmVzXG4gICAgICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBza2lwcGVkIHdoZW4gdGhlIHRyZWUgd2FzIGhpZGRlbi4gVGhhdCBzZXQgb2ZcbiAgICAgIC8vIGxhbmVzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgcmVuZGVyaW5nIHdpdGguXG4gICAgICAvL1xuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgb25seSBoYXBwZW5zIHdoZW4gcGFydCBvZiB0aGUgdHJlZSBpcyByZW5kZXJlZFxuICAgICAgLy8gY29uY3VycmVudGx5LiBJZiB0aGUgd2hvbGUgdHJlZSBpcyByZW5kZXJlZCBzeW5jaHJvbm91c2x5LCB0aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbm8gaW50ZXJsZWF2ZWQgZXZlbnRzLlxuICAgICAgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgbGFuZXMpO1xuICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgTm9MYW5lcyk7XG4gICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIGlmIChyb290LnRhZyAhPT0gTGVnYWN5Um9vdCAmJiBleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmV0cnlBZnRlckVycm9yOyAvLyBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgaHlkcmF0aW9uLFxuICAgIC8vIGRpc2NhcmQgc2VydmVyIHJlc3BvbnNlIGFuZCBmYWxsIGJhY2sgdG8gY2xpZW50IHNpZGUgcmVuZGVyLlxuXG4gICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgIH0gLy8gSWYgc29tZXRoaW5nIHRocmV3IGFuIGVycm9yLCB0cnkgcmVuZGVyaW5nIG9uZSBtb3JlIHRpbWUuIFdlJ2xsIHJlbmRlclxuICAgIC8vIHN5bmNocm9ub3VzbHkgdG8gYmxvY2sgY29uY3VycmVudCBkYXRhIG11dGF0aW9ucywgYW5kIHdlJ2xsIGluY2x1ZGVzXG4gICAgLy8gYWxsIHBlbmRpbmcgdXBkYXRlcyBhcmUgaW5jbHVkZWQuIElmIGl0IHN0aWxsIGZhaWxzIGFmdGVyIHRoZSBzZWNvbmRcbiAgICAvLyBhdHRlbXB0LCB3ZSdsbCBnaXZlIHVwIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB0cmVlLlxuXG5cbiAgICBsYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpO1xuXG4gICAgaWYgKGxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChleGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgdmFyIGZhdGFsRXJyb3IgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yO1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgdGhyb3cgZmF0YWxFcnJvcjtcbiAgfSAvLyBXZSBub3cgaGF2ZSBhIGNvbnNpc3RlbnQgdHJlZS4gQmVjYXVzZSB0aGlzIGlzIGEgc3luYyByZW5kZXIsIHdlXG4gIC8vIHdpbGwgY29tbWl0IGl0IGV2ZW4gaWYgc29tZXRoaW5nIHN1c3BlbmRlZC5cblxuXG4gIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICByb290LmZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yaztcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gbGFuZXM7XG4gIGNvbW1pdFJvb3Qocm9vdCk7IC8vIEJlZm9yZSBleGl0aW5nLCBtYWtlIHN1cmUgdGhlcmUncyBhIGNhbGxiYWNrIHNjaGVkdWxlZCBmb3IgdGhlIG5leHRcbiAgLy8gcGVuZGluZyBsZXZlbC5cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGZsdXNoRGlzY3JldGVVcGRhdGVzKCkge1xuICAvLyBUT0RPOiBTaG91bGQgYmUgYWJsZSB0byBmbHVzaCBpbnNpZGUgYmF0Y2hlZFVwZGF0ZXMsIGJ1dCBub3QgaW5zaWRlIGBhY3RgLlxuICAvLyBIb3dldmVyLCBgYWN0YCB1c2VzIGBiYXRjaGVkVXBkYXRlc2AsIHNvIHRoZXJlJ3Mgbm8gd2F5IHRvIGRpc3Rpbmd1aXNoXG4gIC8vIHRob3NlIHR3byBjYXNlcy4gTmVlZCB0byBmaXggdGhpcyBiZWZvcmUgZXhwb3NpbmcgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNcbiAgLy8gYXMgYSBwdWJsaWMgQVBJLlxuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoQmF0Y2hlZENvbnRleHQgfCBSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICB7XG4gICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAgIGVycm9yKCd1bnN0YWJsZV9mbHVzaERpc2NyZXRlVXBkYXRlczogQ2Fubm90IGZsdXNoIHVwZGF0ZXMgd2hlbiBSZWFjdCBpcyAnICsgJ2FscmVhZHkgcmVuZGVyaW5nLicpO1xuICAgICAgfVxuICAgIH0gLy8gV2UncmUgYWxyZWFkeSByZW5kZXJpbmcsIHNvIHdlIGNhbid0IHN5bmNocm9ub3VzbHkgZmx1c2ggcGVuZGluZyB3b3JrLlxuICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYSBuZXN0ZWQgZXZlbnQgZGlzcGF0Y2ggdHJpZ2dlcmVkIGJ5IGEgbGlmZWN5Y2xlL2VmZmVjdCxcbiAgICAvLyBsaWtlIGBlbC5mb2N1cygpYC4gRXhpdC5cblxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZmx1c2hQZW5kaW5nRGlzY3JldGVVcGRhdGVzKCk7IC8vIElmIHRoZSBkaXNjcmV0ZSB1cGRhdGVzIHNjaGVkdWxlZCBwYXNzaXZlIGVmZmVjdHMsIGZsdXNoIHRoZW0gbm93IHNvIHRoYXRcbiAgLy8gdGhleSBmaXJlIGJlZm9yZSB0aGUgbmV4dCBzZXJpYWwgZXZlbnQuXG5cbiAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMoKSB7XG4gIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzICE9PSBudWxsKSB7XG4gICAgLy8gRm9yIGVhY2ggcm9vdCB3aXRoIHBlbmRpbmcgZGlzY3JldGUgdXBkYXRlcywgc2NoZWR1bGUgYSBjYWxsYmFjayB0b1xuICAgIC8vIGltbWVkaWF0ZWx5IGZsdXNoIHRoZW0uXG4gICAgdmFyIHJvb3RzID0gcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcztcbiAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbnVsbDtcbiAgICByb290cy5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICBtYXJrRGlzY3JldGVVcGRhdGVzRXhwaXJlZChyb290KTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgfSk7XG4gIH0gLy8gTm93IGZsdXNoIHRoZSBpbW1lZGlhdGUgcXVldWUuXG5cblxuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG59XG5cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzJDEoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBiYXRjaGVkRXZlbnRVcGRhdGVzJDEoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBFdmVudENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlzY3JldGVVcGRhdGVzJDEoZm4sIGEsIGIsIGMsIGQpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBEaXNjcmV0ZUV2ZW50Q29udGV4dDtcblxuICB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMShVc2VyQmxvY2tpbmdQcmlvcml0eSQyLCBmbi5iaW5kKG51bGwsIGEsIGIsIGMsIGQpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB1bmJhdGNoZWRVcGRhdGVzKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgJj0gfkJhdGNoZWRDb250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IExlZ2FjeVVuYmF0Y2hlZENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hTeW5jKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgaWYgKChwcmV2RXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICB7XG4gICAgICBlcnJvcignZmx1c2hTeW5jIHdhcyBjYWxsZWQgZnJvbSBpbnNpZGUgYSBsaWZlY3ljbGUgbWV0aG9kLiBSZWFjdCBjYW5ub3QgJyArICdmbHVzaCB3aGVuIFJlYWN0IGlzIGFscmVhZHkgcmVuZGVyaW5nLiBDb25zaWRlciBtb3ZpbmcgdGhpcyBjYWxsIHRvICcgKyAnYSBzY2hlZHVsZXIgdGFzayBvciBtaWNybyB0YXNrLicpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihhKTtcbiAgfVxuXG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQmF0Y2hlZENvbnRleHQ7XG5cbiAge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZuLmJpbmQobnVsbCwgYSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0OyAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoLlxuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBoYXBwZW4gZXZlbiBpZiBiYXRjaGVkVXBkYXRlcyBpcyBoaWdoZXIgdXBcbiAgICAgIC8vIHRoZSBzdGFjay5cblxuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHVzaFJlbmRlckxhbmVzKGZpYmVyLCBsYW5lcykge1xuICBwdXNoKHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciwgc3VidHJlZVJlbmRlckxhbmVzLCBmaWJlcik7XG4gIHN1YnRyZWVSZW5kZXJMYW5lcyA9IG1lcmdlTGFuZXMoc3VidHJlZVJlbmRlckxhbmVzLCBsYW5lcyk7XG4gIHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIGxhbmVzKTtcbn1cbmZ1bmN0aW9uIHBvcFJlbmRlckxhbmVzKGZpYmVyKSB7XG4gIHN1YnRyZWVSZW5kZXJMYW5lcyA9IHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvci5jdXJyZW50O1xuICBwb3Aoc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKSB7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcbiAgdmFyIHRpbWVvdXRIYW5kbGUgPSByb290LnRpbWVvdXRIYW5kbGU7XG5cbiAgaWYgKHRpbWVvdXRIYW5kbGUgIT09IG5vVGltZW91dCkge1xuICAgIC8vIFRoZSByb290IHByZXZpb3VzIHN1c3BlbmRlZCBhbmQgc2NoZWR1bGVkIGEgdGltZW91dCB0byBjb21taXQgYSBmYWxsYmFja1xuICAgIC8vIHN0YXRlLiBOb3cgdGhhdCB3ZSBoYXZlIGFkZGl0aW9uYWwgd29yaywgY2FuY2VsIHRoZSB0aW1lb3V0LlxuICAgIHJvb3QudGltZW91dEhhbmRsZSA9IG5vVGltZW91dDsgLy8gJEZsb3dGaXhNZSBDb21wbGFpbnMgbm9UaW1lb3V0IGlzIG5vdCBhIFRpbWVvdXRJRCwgZGVzcGl0ZSB0aGUgY2hlY2sgYWJvdmVcblxuICAgIGNhbmNlbFRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gIH1cblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICB2YXIgaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gICAgd2hpbGUgKGludGVycnVwdGVkV29yayAhPT0gbnVsbCkge1xuICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGludGVycnVwdGVkV29yayk7XG4gICAgICBpbnRlcnJ1cHRlZFdvcmsgPSBpbnRlcnJ1cHRlZFdvcmsucmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IHJvb3Q7XG4gIHdvcmtJblByb2dyZXNzID0gY3JlYXRlV29ya0luUHJvZ3Jlc3Mocm9vdC5jdXJyZW50LCBudWxsKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBzdWJ0cmVlUmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzID0gbGFuZXM7XG4gIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5jb21wbGV0ZTtcbiAgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gTm9MYW5lcztcblxuICB7XG4gICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBudWxsO1xuICB9XG5cbiAge1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSkge1xuICBkbyB7XG4gICAgdmFyIGVycm9yZWRXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUmVzZXQgbW9kdWxlLWxldmVsIHN0YXRlIHRoYXQgd2FzIHNldCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rc0FmdGVyVGhyb3coKTtcbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7IC8vIFRPRE86IEkgZm91bmQgYW5kIGFkZGVkIHRoaXMgbWlzc2luZyBsaW5lIHdoaWxlIGludmVzdGlnYXRpbmcgYVxuICAgICAgLy8gc2VwYXJhdGUgaXNzdWUuIFdyaXRlIGEgcmVncmVzc2lvbiB0ZXN0IHVzaW5nIHN0cmluZyByZWZzLlxuXG4gICAgICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsO1xuXG4gICAgICBpZiAoZXJyb3JlZFdvcmsgPT09IG51bGwgfHwgZXJyb3JlZFdvcmsucmV0dXJuID09PSBudWxsKSB7XG4gICAgICAgIC8vIEV4cGVjdGVkIHRvIGJlIHdvcmtpbmcgb24gYSBub24tcm9vdCBmaWJlci4gVGhpcyBpcyBhIGZhdGFsIGVycm9yXG4gICAgICAgIC8vIGJlY2F1c2UgdGhlcmUncyBubyBhbmNlc3RvciB0aGF0IGNhbiBoYW5kbGUgaXQ7IHRoZSByb290IGlzXG4gICAgICAgIC8vIHN1cHBvc2VkIHRvIGNhcHR1cmUgYWxsIGVycm9ycyB0aGF0IHdlcmVuJ3QgY2F1Z2h0IGJ5IGFuIGVycm9yXG4gICAgICAgIC8vIGJvdW5kYXJ5LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IHRocm93blZhbHVlOyAvLyBTZXQgYHdvcmtJblByb2dyZXNzYCB0byBudWxsLiBUaGlzIHJlcHJlc2VudHMgYWR2YW5jaW5nIHRvIHRoZSBuZXh0XG4gICAgICAgIC8vIHNpYmxpbmcsIG9yIHRoZSBwYXJlbnQgaWYgdGhlcmUgYXJlIG5vIHNpYmxpbmdzLiBCdXQgc2luY2UgdGhlIHJvb3RcbiAgICAgICAgLy8gaGFzIG5vIHNpYmxpbmdzIG5vciBhIHBhcmVudCwgd2Ugc2V0IGl0IHRvIG51bGwuIFVzdWFsbHkgdGhpcyBpc1xuICAgICAgICAvLyBoYW5kbGVkIGJ5IGBjb21wbGV0ZVVuaXRPZldvcmtgIG9yIGB1bndpbmRXb3JrYCwgYnV0IHNpbmNlIHdlJ3JlXG4gICAgICAgIC8vIGludGVudGlvbmFsbHkgbm90IGNhbGxpbmcgdGhvc2UsIHdlIG5lZWQgc2V0IGl0IGhlcmUuXG4gICAgICAgIC8vIFRPRE86IENvbnNpZGVyIGNhbGxpbmcgYHVud2luZFdvcmtgIHRvIHBvcCB0aGUgY29udGV4dHMuXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyICYmIGVycm9yZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHRpbWUgc3BlbnQgcmVuZGVyaW5nIGJlZm9yZSBhbiBlcnJvciB3YXMgdGhyb3duLiBUaGlzXG4gICAgICAgIC8vIGF2b2lkcyBpbmFjY3VyYXRlIFByb2ZpbGVyIGR1cmF0aW9ucyBpbiB0aGUgY2FzZSBvZiBhXG4gICAgICAgIC8vIHN1c3BlbmRlZCByZW5kZXIuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoZXJyb3JlZFdvcmssIHRydWUpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd0V4Y2VwdGlvbihyb290LCBlcnJvcmVkV29yay5yZXR1cm4sIGVycm9yZWRXb3JrLCB0aHJvd25WYWx1ZSwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgICAgY29tcGxldGVVbml0T2ZXb3JrKGVycm9yZWRXb3JrKTtcbiAgICB9IGNhdGNoICh5ZXRBbm90aGVyVGhyb3duVmFsdWUpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcmV0dXJuIHBhdGggYWxzbyB0aHJldy5cbiAgICAgIHRocm93blZhbHVlID0geWV0QW5vdGhlclRocm93blZhbHVlO1xuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IGVycm9yZWRXb3JrICYmIGVycm9yZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICAgIC8vIElmIHRoaXMgYm91bmRhcnkgaGFzIGFscmVhZHkgZXJyb3JlZCwgdGhlbiB3ZSBoYWQgdHJvdWJsZSBwcm9jZXNzaW5nXG4gICAgICAgIC8vIHRoZSBlcnJvci4gQnViYmxlIGl0IHRvIHRoZSBuZXh0IGJvdW5kYXJ5LlxuICAgICAgICBlcnJvcmVkV29yayA9IGVycm9yZWRXb3JrLnJldHVybjtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBlcnJvcmVkV29yaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yZWRXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gLy8gUmV0dXJuIHRvIHRoZSBub3JtYWwgd29yayBsb29wLlxuXG5cbiAgICByZXR1cm47XG4gIH0gd2hpbGUgKHRydWUpO1xufVxuXG5mdW5jdGlvbiBwdXNoRGlzcGF0Y2hlcigpIHtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQ7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIGlmIChwcmV2RGlzcGF0Y2hlciA9PT0gbnVsbCkge1xuICAgIC8vIFRoZSBSZWFjdCBpc29tb3JwaGljIHBhY2thZ2UgZG9lcyBub3QgaW5jbHVkZSBhIGRlZmF1bHQgZGlzcGF0Y2hlci5cbiAgICAvLyBJbnN0ZWFkIHRoZSBmaXJzdCByZW5kZXJlciB3aWxsIGxhemlseSBhdHRhY2ggb25lLCBpbiBvcmRlciB0byBnaXZlXG4gICAgLy8gbmljZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgcmV0dXJuIENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJldkRpc3BhdGNoZXI7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcikge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xufVxuXG5mdW5jdGlvbiBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpIHtcbiAge1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICAgIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnM7XG4gICAgcmV0dXJuIHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpIHtcbiAge1xuICAgIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrKCkge1xuICBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gbm93KCk7XG59XG5mdW5jdGlvbiBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKGxhbmUpIHtcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gbWVyZ2VMYW5lcyhsYW5lLCB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMpO1xufVxuZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZCgpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk7XG4gIH0gLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIHVwZGF0ZXMgdGhhdCB3ZSBza2lwcGVkIHRyZWUgdGhhdCBtaWdodCBoYXZlIHVuYmxvY2tlZFxuICAvLyB0aGlzIHJlbmRlci5cblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IG51bGwgJiYgKGluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzKSB8fCBpbmNsdWRlc05vbklkbGVXb3JrKHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpKSB7XG4gICAgLy8gTWFyayB0aGUgY3VycmVudCByZW5kZXIgYXMgc3VzcGVuZGVkIHNvIHRoYXQgd2Ugc3dpdGNoIHRvIHdvcmtpbmcgb25cbiAgICAvLyB0aGUgdXBkYXRlcyB0aGF0IHdlcmUgc2tpcHBlZC4gVXN1YWxseSB3ZSBvbmx5IHN1c3BlbmQgYXQgdGhlIGVuZCBvZlxuICAgIC8vIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgLy8gVE9ETzogV2Ugc2hvdWxkIHByb2JhYmx5IGFsd2F5cyBtYXJrIHRoZSByb290IGFzIHN1c3BlbmRlZCBpbW1lZGlhdGVseVxuICAgIC8vIChpbnNpZGUgdGhpcyBmdW5jdGlvbiksIHNpbmNlIGJ5IHN1c3BlbmRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgcmVuZGVyXG4gICAgLy8gcGhhc2UgaW50cm9kdWNlcyBhIHBvdGVudGlhbCBtaXN0YWtlIHdoZXJlIHdlIHN1c3BlbmQgbGFuZXMgdGhhdCB3ZXJlXG4gICAgLy8gcGluZ2VkIG9yIHVwZGF0ZWQgd2hpbGUgd2Ugd2VyZSByZW5kZXJpbmcuXG4gICAgbWFya1Jvb3RTdXNwZW5kZWQkMSh3b3JrSW5Qcm9ncmVzc1Jvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyRGlkRXJyb3IoKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzICE9PSBSb290Q29tcGxldGVkKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RFcnJvcmVkO1xuICB9XG59IC8vIENhbGxlZCBkdXJpbmcgcmVuZGVyIHRvIGRldGVybWluZSBpZiBhbnl0aGluZyBoYXMgc3VzcGVuZGVkLlxuLy8gUmV0dXJucyBmYWxzZSBpZiB3ZSdyZSBub3Qgc3VyZS5cblxuZnVuY3Rpb24gcmVuZGVySGFzTm90U3VzcGVuZGVkWWV0KCkge1xuICAvLyBJZiBzb21ldGhpbmcgZXJyb3JlZCBvciBjb21wbGV0ZWQsIHdlIGNhbid0IHJlYWxseSBiZSBzdXJlLFxuICAvLyBzbyB0aG9zZSBhcmUgZmFsc2UuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpOyAvLyBJZiB0aGUgcm9vdCBvciBsYW5lcyBoYXZlIGNoYW5nZWQsIHRocm93IG91dCB0aGUgZXhpc3Rpbmcgc3RhY2tcbiAgLy8gYW5kIHByZXBhcmUgYSBmcmVzaCBvbmUuIE90aGVyd2lzZSB3ZSdsbCBjb250aW51ZSB3aGVyZSB3ZSBsZWZ0IG9mZi5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lcykge1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpO1xuXG4gIGRvIHtcbiAgICB0cnkge1xuICAgICAgd29ya0xvb3BTeW5jKCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgfVxuXG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyBhIHN5bmMgcmVuZGVyLCBzbyB3ZSBzaG91bGQgaGF2ZSBmaW5pc2hlZCB0aGUgd2hvbGUgdHJlZS5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCBjb21taXQgYW4gaW5jb21wbGV0ZSByb290LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xufSAvLyBUaGUgd29yayBsb29wIGlzIGFuIGV4dHJlbWVseSBob3QgcGF0aC4gVGVsbCBDbG9zdXJlIG5vdCB0byBpbmxpbmUgaXQuXG5cbi8qKiBAbm9pbmxpbmUgKi9cblxuXG5mdW5jdGlvbiB3b3JrTG9vcFN5bmMoKSB7XG4gIC8vIEFscmVhZHkgdGltZWQgb3V0LCBzbyBwZXJmb3JtIHdvcmsgd2l0aG91dCBjaGVja2luZyBpZiB3ZSBuZWVkIHRvIHlpZWxkLlxuICB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpOyAvLyBJZiB0aGUgcm9vdCBvciBsYW5lcyBoYXZlIGNoYW5nZWQsIHRocm93IG91dCB0aGUgZXhpc3Rpbmcgc3RhY2tcbiAgLy8gYW5kIHByZXBhcmUgYSBmcmVzaCBvbmUuIE90aGVyd2lzZSB3ZSdsbCBjb250aW51ZSB3aGVyZSB3ZSBsZWZ0IG9mZi5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lcykge1xuICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gICAgc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTtcblxuICBkbyB7XG4gICAgdHJ5IHtcbiAgICAgIHdvcmtMb29wQ29uY3VycmVudCgpO1xuICAgICAgYnJlYWs7XG4gICAgfSBjYXRjaCAodGhyb3duVmFsdWUpIHtcbiAgICAgIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKTtcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUpO1xuXG4gIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuXG4gIHtcbiAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gIH1cblxuICBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKTtcbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG5cbiAgICByZXR1cm4gUm9vdEluY29tcGxldGU7XG4gIH0gZWxzZSB7XG5cblxuICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBSZXR1cm4gdGhlIGZpbmFsIGV4aXQgc3RhdHVzLlxuXG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG4gIH1cbn1cbi8qKiBAbm9pbmxpbmUgKi9cblxuXG5mdW5jdGlvbiB3b3JrTG9vcENvbmN1cnJlbnQoKSB7XG4gIC8vIFBlcmZvcm0gd29yayB1bnRpbCBTY2hlZHVsZXIgYXNrcyB1cyB0byB5aWVsZFxuICB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwgJiYgIXNob3VsZFlpZWxkKCkpIHtcbiAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVyZm9ybVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAvLyBUaGUgY3VycmVudCwgZmx1c2hlZCwgc3RhdGUgb2YgdGhpcyBmaWJlciBpcyB0aGUgYWx0ZXJuYXRlLiBJZGVhbGx5XG4gIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gIC8vIG5lZWQgYW4gYWRkaXRpb25hbCBmaWVsZCBvbiB0aGUgd29yayBpbiBwcm9ncmVzcy5cbiAgdmFyIGN1cnJlbnQgPSB1bml0T2ZXb3JrLmFsdGVybmF0ZTtcbiAgc2V0Q3VycmVudEZpYmVyKHVuaXRPZldvcmspO1xuICB2YXIgbmV4dDtcblxuICBpZiAoICh1bml0T2ZXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgICBuZXh0ID0gYmVnaW5Xb3JrJDEoY3VycmVudCwgdW5pdE9mV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKHVuaXRPZldvcmssIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIG5leHQgPSBiZWdpbldvcmskMShjdXJyZW50LCB1bml0T2ZXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgdW5pdE9mV29yay5tZW1vaXplZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG5cbiAgaWYgKG5leHQgPT09IG51bGwpIHtcbiAgICAvLyBJZiB0aGlzIGRvZXNuJ3Qgc3Bhd24gbmV3IHdvcmssIGNvbXBsZXRlIHRoZSBjdXJyZW50IHdvcmsuXG4gICAgY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspO1xuICB9IGVsc2Uge1xuICAgIHdvcmtJblByb2dyZXNzID0gbmV4dDtcbiAgfVxuXG4gIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIC8vIEF0dGVtcHQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgdW5pdCBvZiB3b3JrLCB0aGVuIG1vdmUgdG8gdGhlIG5leHRcbiAgLy8gc2libGluZy4gSWYgdGhlcmUgYXJlIG5vIG1vcmUgc2libGluZ3MsIHJldHVybiB0byB0aGUgcGFyZW50IGZpYmVyLlxuICB2YXIgY29tcGxldGVkV29yayA9IHVuaXRPZldvcms7XG5cbiAgZG8ge1xuICAgIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgICAvLyBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoaXMsIGJ1dCByZWx5aW5nIG9uIGl0IGhlcmUgbWVhbnMgdGhhdCB3ZSBkb24ndFxuICAgIC8vIG5lZWQgYW4gYWRkaXRpb25hbCBmaWVsZCBvbiB0aGUgd29yayBpbiBwcm9ncmVzcy5cbiAgICB2YXIgY3VycmVudCA9IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlO1xuICAgIHZhciByZXR1cm5GaWJlciA9IGNvbXBsZXRlZFdvcmsucmV0dXJuOyAvLyBDaGVjayBpZiB0aGUgd29yayBjb21wbGV0ZWQgb3IgaWYgc29tZXRoaW5nIHRocmV3LlxuXG4gICAgaWYgKChjb21wbGV0ZWRXb3JrLmZsYWdzICYgSW5jb21wbGV0ZSkgPT09IE5vRmxhZ3MpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgIHZhciBuZXh0ID0gdm9pZCAwO1xuXG4gICAgICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICBuZXh0ID0gY29tcGxldGVXb3JrKGN1cnJlbnQsIGNvbXBsZXRlZFdvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIoY29tcGxldGVkV29yayk7XG4gICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCwgY29tcGxldGVkV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTsgLy8gVXBkYXRlIHJlbmRlciBkdXJhdGlvbiBhc3N1bWluZyB3ZSBkaWRuJ3QgZXJyb3IuXG5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShjb21wbGV0ZWRXb3JrLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG5cbiAgICAgIGlmIChuZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIENvbXBsZXRpbmcgdGhpcyBmaWJlciBzcGF3bmVkIG5ldyB3b3JrLiBXb3JrIG9uIHRoYXQgbmV4dC5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q2hpbGRMYW5lcyhjb21wbGV0ZWRXb3JrKTtcblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsICYmIC8vIERvIG5vdCBhcHBlbmQgZWZmZWN0cyB0byBwYXJlbnRzIGlmIGEgc2libGluZyBmYWlsZWQgdG8gY29tcGxldGVcbiAgICAgIChyZXR1cm5GaWJlci5mbGFncyAmIEluY29tcGxldGUpID09PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIEFwcGVuZCBhbGwgdGhlIGVmZmVjdHMgb2YgdGhlIHN1YnRyZWUgYW5kIHRoaXMgZmliZXIgb250byB0aGUgZWZmZWN0XG4gICAgICAgIC8vIGxpc3Qgb2YgdGhlIHBhcmVudC4gVGhlIGNvbXBsZXRpb24gb3JkZXIgb2YgdGhlIGNoaWxkcmVuIGFmZmVjdHMgdGhlXG4gICAgICAgIC8vIHNpZGUtZWZmZWN0IG9yZGVyLlxuICAgICAgICBpZiAocmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkV29yay5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGNvbXBsZXRlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcmsubGFzdEVmZmVjdDtcbiAgICAgICAgfSAvLyBJZiB0aGlzIGZpYmVyIGhhZCBzaWRlLWVmZmVjdHMsIHdlIGFwcGVuZCBpdCBBRlRFUiB0aGUgY2hpbGRyZW4nc1xuICAgICAgICAvLyBzaWRlLWVmZmVjdHMuIFdlIGNhbiBwZXJmb3JtIGNlcnRhaW4gc2lkZS1lZmZlY3RzIGVhcmxpZXIgaWYgbmVlZGVkLFxuICAgICAgICAvLyBieSBkb2luZyBtdWx0aXBsZSBwYXNzZXMgb3ZlciB0aGUgZWZmZWN0IGxpc3QuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gc2NoZWR1bGUgb3VyIG93biBzaWRlLWVmZmVjdCBvbiBvdXIgb3duIGxpc3QgYmVjYXVzZSBpZiBlbmQgdXBcbiAgICAgICAgLy8gcmV1c2luZyBjaGlsZHJlbiB3ZSdsbCBzY2hlZHVsZSB0aGlzIGVmZmVjdCBvbnRvIGl0c2VsZiBzaW5jZSB3ZSdyZVxuICAgICAgICAvLyBhdCB0aGUgZW5kLlxuXG5cbiAgICAgICAgdmFyIGZsYWdzID0gY29tcGxldGVkV29yay5mbGFnczsgLy8gU2tpcCBib3RoIE5vV29yayBhbmQgUGVyZm9ybWVkV29yayB0YWdzIHdoZW4gY3JlYXRpbmcgdGhlIGVmZmVjdFxuICAgICAgICAvLyBsaXN0LiBQZXJmb3JtZWRXb3JrIGVmZmVjdCBpcyByZWFkIGJ5IFJlYWN0IERldlRvb2xzIGJ1dCBzaG91bGRuJ3QgYmVcbiAgICAgICAgLy8gY29tbWl0dGVkLlxuXG4gICAgICAgIGlmIChmbGFncyA+IFBlcmZvcm1lZFdvcmspIHtcbiAgICAgICAgICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY29tcGxldGVkV29yaztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgZmliZXIgZGlkIG5vdCBjb21wbGV0ZSBiZWNhdXNlIHNvbWV0aGluZyB0aHJldy4gUG9wIHZhbHVlcyBvZmZcbiAgICAgIC8vIHRoZSBzdGFjayB3aXRob3V0IGVudGVyaW5nIHRoZSBjb21wbGV0ZSBwaGFzZS4gSWYgdGhpcyBpcyBhIGJvdW5kYXJ5LFxuICAgICAgLy8gY2FwdHVyZSB2YWx1ZXMgaWYgcG9zc2libGUuXG4gICAgICB2YXIgX25leHQgPSB1bndpbmRXb3JrKGNvbXBsZXRlZFdvcmspOyAvLyBCZWNhdXNlIHRoaXMgZmliZXIgZGlkIG5vdCBjb21wbGV0ZSwgZG9uJ3QgcmVzZXQgaXRzIGV4cGlyYXRpb24gdGltZS5cblxuXG4gICAgICBpZiAoX25leHQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgY29tcGxldGluZyB0aGlzIHdvcmsgc3Bhd25lZCBuZXcgd29yaywgZG8gdGhhdCBuZXh0LiBXZSdsbCBjb21lXG4gICAgICAgIC8vIGJhY2sgaGVyZSBhZ2Fpbi5cbiAgICAgICAgLy8gU2luY2Ugd2UncmUgcmVzdGFydGluZywgcmVtb3ZlIGFueXRoaW5nIHRoYXQgaXMgbm90IGEgaG9zdCBlZmZlY3RcbiAgICAgICAgLy8gZnJvbSB0aGUgZWZmZWN0IHRhZy5cbiAgICAgICAgX25leHQuZmxhZ3MgJj0gSG9zdEVmZmVjdE1hc2s7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gX25leHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgLy8gUmVjb3JkIHRoZSByZW5kZXIgZHVyYXRpb24gZm9yIHRoZSBmaWJlciB0aGF0IGVycm9yZWQuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoY29tcGxldGVkV29yaywgZmFsc2UpOyAvLyBJbmNsdWRlIHRoZSB0aW1lIHNwZW50IHdvcmtpbmcgb24gZmFpbGVkIGNoaWxkcmVuIGJlZm9yZSBjb250aW51aW5nLlxuXG4gICAgICAgIHZhciBhY3R1YWxEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgICAgIHZhciBjaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTWFyayB0aGUgcGFyZW50IGZpYmVyIGFzIGluY29tcGxldGUgYW5kIGNsZWFyIGl0cyBlZmZlY3QgbGlzdC5cbiAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuRmliZXIuZmxhZ3MgfD0gSW5jb21wbGV0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2libGluZ0ZpYmVyID0gY29tcGxldGVkV29yay5zaWJsaW5nO1xuXG4gICAgaWYgKHNpYmxpbmdGaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGRvIGluIHRoaXMgcmV0dXJuRmliZXIsIGRvIHRoYXQgbmV4dC5cbiAgICAgIHdvcmtJblByb2dyZXNzID0gc2libGluZ0ZpYmVyO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gT3RoZXJ3aXNlLCByZXR1cm4gdG8gdGhlIHBhcmVudFxuXG5cbiAgICBjb21wbGV0ZWRXb3JrID0gcmV0dXJuRmliZXI7IC8vIFVwZGF0ZSB0aGUgbmV4dCB0aGluZyB3ZSdyZSB3b3JraW5nIG9uIGluIGNhc2Ugc29tZXRoaW5nIHRocm93cy5cblxuICAgIHdvcmtJblByb2dyZXNzID0gY29tcGxldGVkV29yaztcbiAgfSB3aGlsZSAoY29tcGxldGVkV29yayAhPT0gbnVsbCk7IC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIHJvb3QuXG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdENvbXBsZXRlZDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldENoaWxkTGFuZXMoY29tcGxldGVkV29yaykge1xuICBpZiAoIC8vIFRPRE86IE1vdmUgdGhpcyBjaGVjayBvdXQgb2YgdGhlIGhvdCBwYXRoIGJ5IG1vdmluZyBgcmVzZXRDaGlsZExhbmVzYFxuICAvLyB0byBzd2l0Y2ggc3RhdGVtZW50IGluIGBjb21wbGV0ZVdvcmtgLlxuICAoY29tcGxldGVkV29yay50YWcgPT09IExlZ2FjeUhpZGRlbkNvbXBvbmVudCB8fCBjb21wbGV0ZWRXb3JrLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50KSAmJiBjb21wbGV0ZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgIWluY2x1ZGVzU29tZUxhbmUoc3VidHJlZVJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKSAmJiAoY29tcGxldGVkV29yay5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb0xhbmVzKSB7XG4gICAgLy8gVGhlIGNoaWxkcmVuIG9mIHRoaXMgY29tcG9uZW50IGFyZSBoaWRkZW4uIERvbid0IGJ1YmJsZSB0aGVpclxuICAgIC8vIGV4cGlyYXRpb24gdGltZXMuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5ld0NoaWxkTGFuZXMgPSBOb0xhbmVzOyAvLyBCdWJibGUgdXAgdGhlIGVhcmxpZXN0IGV4cGlyYXRpb24gdGltZS5cblxuICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgIC8vIEluIHByb2ZpbGluZyBtb2RlLCByZXNldENoaWxkRXhwaXJhdGlvblRpbWUgaXMgYWxzbyB1c2VkIHRvIHJlc2V0XG4gICAgLy8gcHJvZmlsZXIgZHVyYXRpb25zLlxuICAgIHZhciBhY3R1YWxEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgdmFyIHRyZWVCYXNlRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLnNlbGZCYXNlRHVyYXRpb247IC8vIFdoZW4gYSBmaWJlciBpcyBjbG9uZWQsIGl0cyBhY3R1YWxEdXJhdGlvbiBpcyByZXNldCB0byAwLiBUaGlzIHZhbHVlIHdpbGxcbiAgICAvLyBvbmx5IGJlIHVwZGF0ZWQgaWYgd29yayBpcyBkb25lIG9uIHRoZSBmaWJlciAoaS5lLiBpdCBkb2Vzbid0IGJhaWxvdXQpLlxuICAgIC8vIFdoZW4gd29yayBpcyBkb25lLCBpdCBzaG91bGQgYnViYmxlIHRvIHRoZSBwYXJlbnQncyBhY3R1YWxEdXJhdGlvbi4gSWZcbiAgICAvLyB0aGUgZmliZXIgaGFzIG5vdCBiZWVuIGNsb25lZCB0aG91Z2gsIChtZWFuaW5nIG5vIHdvcmsgd2FzIGRvbmUpLCB0aGVuXG4gICAgLy8gdGhpcyB2YWx1ZSB3aWxsIHJlZmxlY3QgdGhlIGFtb3VudCBvZiB0aW1lIHNwZW50IHdvcmtpbmcgb24gYSBwcmV2aW91c1xuICAgIC8vIHJlbmRlci4gSW4gdGhhdCBjYXNlIGl0IHNob3VsZCBub3QgYnViYmxlLiBXZSBkZXRlcm1pbmUgd2hldGhlciBpdCB3YXNcbiAgICAvLyBjbG9uZWQgYnkgY29tcGFyaW5nIHRoZSBjaGlsZCBwb2ludGVyLlxuXG4gICAgdmFyIHNob3VsZEJ1YmJsZUFjdHVhbER1cmF0aW9ucyA9IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlID09PSBudWxsIHx8IGNvbXBsZXRlZFdvcmsuY2hpbGQgIT09IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlLmNoaWxkO1xuICAgIHZhciBjaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5ld0NoaWxkTGFuZXMsIG1lcmdlTGFuZXMoY2hpbGQubGFuZXMsIGNoaWxkLmNoaWxkTGFuZXMpKTtcblxuICAgICAgaWYgKHNob3VsZEJ1YmJsZUFjdHVhbER1cmF0aW9ucykge1xuICAgICAgICBhY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgdHJlZUJhc2VEdXJhdGlvbiArPSBjaGlsZC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHZhciBpc1RpbWVkT3V0U3VzcGVuc2UgPSBjb21wbGV0ZWRXb3JrLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgY29tcGxldGVkV29yay5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgaWYgKGlzVGltZWRPdXRTdXNwZW5zZSkge1xuICAgICAgLy8gRG9uJ3QgY291bnQgdGltZSBzcGVudCBpbiBhIHRpbWVkIG91dCBTdXNwZW5zZSBzdWJ0cmVlIGFzIHBhcnQgb2YgdGhlIGJhc2UgZHVyYXRpb24uXG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICBpZiAocHJpbWFyeUNoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAgICAgdHJlZUJhc2VEdXJhdGlvbiAtPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb24gPSBhY3R1YWxEdXJhdGlvbjtcbiAgICBjb21wbGV0ZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24gPSB0cmVlQmFzZUR1cmF0aW9uO1xuICB9IGVsc2Uge1xuICAgIHZhciBfY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgd2hpbGUgKF9jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbmV3Q2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobmV3Q2hpbGRMYW5lcywgbWVyZ2VMYW5lcyhfY2hpbGQubGFuZXMsIF9jaGlsZC5jaGlsZExhbmVzKSk7XG4gICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICB9XG4gIH1cblxuICBjb21wbGV0ZWRXb3JrLmNoaWxkTGFuZXMgPSBuZXdDaGlsZExhbmVzO1xufVxuXG5mdW5jdGlvbiBjb21taXRSb290KHJvb3QpIHtcbiAgdmFyIHJlbmRlclByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuICBydW5XaXRoUHJpb3JpdHkkMShJbW1lZGlhdGVQcmlvcml0eSQxLCBjb21taXRSb290SW1wbC5iaW5kKG51bGwsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpKTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3RJbXBsKHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgZG8ge1xuICAgIC8vIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCB3aWxsIGNhbGwgYGZsdXNoU3luY1VwZGF0ZVF1ZXVlYCBhdCB0aGUgZW5kLCB3aGljaFxuICAgIC8vIG1lYW5zIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCB3aWxsIHNvbWV0aW1lcyByZXN1bHQgaW4gYWRkaXRpb25hbFxuICAgIC8vIHBhc3NpdmUgZWZmZWN0cy4gU28gd2UgbmVlZCB0byBrZWVwIGZsdXNoaW5nIGluIGEgbG9vcCB1bnRpbCB0aGVyZSBhcmVcbiAgICAvLyBubyBtb3JlIHBlbmRpbmcgZWZmZWN0cy5cbiAgICAvLyBUT0RPOiBNaWdodCBiZSBiZXR0ZXIgaWYgYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIGRpZCBub3QgYXV0b21hdGljYWxseVxuICAgIC8vIGZsdXNoIHN5bmNocm9ub3VzIHdvcmsgYXQgdGhlIGVuZCwgdG8gYXZvaWQgZmFjdG9yaW5nIGhhemFyZHMgbGlrZSB0aGlzLlxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgfSB3aGlsZSAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgIT09IG51bGwpO1xuXG4gIGZsdXNoUmVuZGVyUGhhc2VTdHJpY3RNb2RlV2FybmluZ3NJbkRFVigpO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmZpbmlzaGVkV29yaztcbiAgdmFyIGxhbmVzID0gcm9vdC5maW5pc2hlZExhbmVzO1xuXG4gIGlmIChmaW5pc2hlZFdvcmsgPT09IG51bGwpIHtcblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKGZpbmlzaGVkV29yayAhPT0gcm9vdC5jdXJyZW50KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCBjb21taXQgdGhlIHNhbWUgdHJlZSBhcyBiZWZvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH0gLy8gY29tbWl0Um9vdCBuZXZlciByZXR1cm5zIGEgY29udGludWF0aW9uOyBpdCBhbHdheXMgZmluaXNoZXMgc3luY2hyb25vdXNseS5cbiAgLy8gU28gd2UgY2FuIGNsZWFyIHRoZXNlIG5vdyB0byBhbGxvdyBhIG5ldyBjYWxsYmFjayB0byBiZSBzY2hlZHVsZWQuXG5cblxuICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7IC8vIFVwZGF0ZSB0aGUgZmlyc3QgYW5kIGxhc3QgcGVuZGluZyB0aW1lcyBvbiB0aGlzIHJvb3QuIFRoZSBuZXcgZmlyc3RcbiAgLy8gcGVuZGluZyB0aW1lIGlzIHdoYXRldmVyIGlzIGxlZnQgb24gdGhlIHJvb3QgZmliZXIuXG5cbiAgdmFyIHJlbWFpbmluZ0xhbmVzID0gbWVyZ2VMYW5lcyhmaW5pc2hlZFdvcmsubGFuZXMsIGZpbmlzaGVkV29yay5jaGlsZExhbmVzKTtcbiAgbWFya1Jvb3RGaW5pc2hlZChyb290LCByZW1haW5pbmdMYW5lcyk7IC8vIENsZWFyIGFscmVhZHkgZmluaXNoZWQgZGlzY3JldGUgdXBkYXRlcyBpbiBjYXNlIHRoYXQgYSBsYXRlciBjYWxsIG9mXG4gIC8vIGBmbHVzaERpc2NyZXRlVXBkYXRlc2Agc3RhcnRzIGEgdXNlbGVzcyByZW5kZXIgcGFzcyB3aGljaCBtYXkgY2FuY2Vsc1xuICAvLyBhIHNjaGVkdWxlZCB0aW1lb3V0LlxuXG4gIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzICE9PSBudWxsKSB7XG4gICAgaWYgKCFoYXNEaXNjcmV0ZUxhbmVzKHJlbWFpbmluZ0xhbmVzKSAmJiByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmhhcyhyb290KSkge1xuICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcy5kZWxldGUocm9vdCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCkge1xuICAgIC8vIFdlIGNhbiByZXNldCB0aGVzZSBub3cgdGhhdCB0aGV5IGFyZSBmaW5pc2hlZC5cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIH0gLy8gR2V0IHRoZSBsaXN0IG9mIGVmZmVjdHMuXG5cblxuICB2YXIgZmlyc3RFZmZlY3Q7XG5cbiAgaWYgKGZpbmlzaGVkV29yay5mbGFncyA+IFBlcmZvcm1lZFdvcmspIHtcbiAgICAvLyBBIGZpYmVyJ3MgZWZmZWN0IGxpc3QgY29uc2lzdHMgb25seSBvZiBpdHMgY2hpbGRyZW4sIG5vdCBpdHNlbGYuIFNvIGlmXG4gICAgLy8gdGhlIHJvb3QgaGFzIGFuIGVmZmVjdCwgd2UgbmVlZCB0byBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4gVGhlXG4gICAgLy8gcmVzdWx0aW5nIGxpc3QgaXMgdGhlIHNldCB0aGF0IHdvdWxkIGJlbG9uZyB0byB0aGUgcm9vdCdzIHBhcmVudCwgaWYgaXRcbiAgICAvLyBoYWQgb25lOyB0aGF0IGlzLCBhbGwgdGhlIGVmZmVjdHMgaW4gdGhlIHRyZWUgaW5jbHVkaW5nIHRoZSByb290LlxuICAgIGlmIChmaW5pc2hlZFdvcmsubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgZmluaXNoZWRXb3JrLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGZpbmlzaGVkV29yaztcbiAgICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrLmZpcnN0RWZmZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yaztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlcmUgaXMgbm8gZWZmZWN0IG9uIHRoZSByb290LlxuICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrLmZpcnN0RWZmZWN0O1xuICB9XG5cbiAgaWYgKGZpcnN0RWZmZWN0ICE9PSBudWxsKSB7XG5cbiAgICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7IC8vIFJlc2V0IHRoaXMgdG8gbnVsbCBiZWZvcmUgY2FsbGluZyBsaWZlY3ljbGVzXG5cbiAgICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsOyAvLyBUaGUgY29tbWl0IHBoYXNlIGlzIGJyb2tlbiBpbnRvIHNldmVyYWwgc3ViLXBoYXNlcy4gV2UgZG8gYSBzZXBhcmF0ZSBwYXNzXG4gICAgLy8gb2YgdGhlIGVmZmVjdCBsaXN0IGZvciBlYWNoIHBoYXNlOiBhbGwgbXV0YXRpb24gZWZmZWN0cyBjb21lIGJlZm9yZSBhbGxcbiAgICAvLyBsYXlvdXQgZWZmZWN0cywgYW5kIHNvIG9uLlxuICAgIC8vIFRoZSBmaXJzdCBwaGFzZSBhIFwiYmVmb3JlIG11dGF0aW9uXCIgcGhhc2UuIFdlIHVzZSB0aGlzIHBoYXNlIHRvIHJlYWQgdGhlXG4gICAgLy8gc3RhdGUgb2YgdGhlIGhvc3QgdHJlZSByaWdodCBiZWZvcmUgd2UgbXV0YXRlIGl0LiBUaGlzIGlzIHdoZXJlXG4gICAgLy8gZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgaXMgY2FsbGVkLlxuXG4gICAgZm9jdXNlZEluc3RhbmNlSGFuZGxlID0gcHJlcGFyZUZvckNvbW1pdChyb290LmNvbnRhaW5lckluZm8pO1xuICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IGZhbHNlO1xuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cywgbnVsbCk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShuZXh0RWZmZWN0ICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgZXJyb3IpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTsgLy8gV2Ugbm8gbG9uZ2VyIG5lZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSBpbnN0YW5jZSBmaWJlclxuXG5cbiAgICBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gTWFyayB0aGUgY3VycmVudCBjb21taXQgdGltZSB0byBiZSBzaGFyZWQgYnkgYWxsIFByb2ZpbGVycyBpbiB0aGlzXG4gICAgICAvLyBiYXRjaC4gVGhpcyBlbmFibGVzIHRoZW0gdG8gYmUgZ3JvdXBlZCBsYXRlci5cbiAgICAgIHJlY29yZENvbW1pdFRpbWUoKTtcbiAgICB9IC8vIFRoZSBuZXh0IHBoYXNlIGlzIHRoZSBtdXRhdGlvbiBwaGFzZSwgd2hlcmUgd2UgbXV0YXRlIHRoZSBob3N0IHRyZWUuXG5cblxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdE11dGF0aW9uRWZmZWN0cywgbnVsbCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShuZXh0RWZmZWN0ICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2Vycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgX2Vycm9yKTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCk7XG5cbiAgICByZXNldEFmdGVyQ29tbWl0KHJvb3QuY29udGFpbmVySW5mbyk7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIHRyZWUgaXMgbm93IHRoZSBjdXJyZW50IHRyZWUuIFRoaXMgbXVzdCBjb21lIGFmdGVyXG4gICAgLy8gdGhlIG11dGF0aW9uIHBoYXNlLCBzbyB0aGF0IHRoZSBwcmV2aW91cyB0cmVlIGlzIHN0aWxsIGN1cnJlbnQgZHVyaW5nXG4gICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQsIGJ1dCBiZWZvcmUgdGhlIGxheW91dCBwaGFzZSwgc28gdGhhdCB0aGUgZmluaXNoZWRcbiAgICAvLyB3b3JrIGlzIGN1cnJlbnQgZHVyaW5nIGNvbXBvbmVudERpZE1vdW50L1VwZGF0ZS5cblxuICAgIHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gVGhlIG5leHQgcGhhc2UgaXMgdGhlIGxheW91dCBwaGFzZSwgd2hlcmUgd2UgY2FsbCBlZmZlY3RzIHRoYXQgcmVhZFxuICAgIC8vIHRoZSBob3N0IHRyZWUgYWZ0ZXIgaXQncyBiZWVuIG11dGF0ZWQuIFRoZSBpZGlvbWF0aWMgdXNlIGNhc2UgZm9yIHRoaXMgaXNcbiAgICAvLyBsYXlvdXQsIGJ1dCBjbGFzcyBjb21wb25lbnQgbGlmZWN5Y2xlcyBhbHNvIGZpcmUgaGVyZSBmb3IgbGVnYWN5IHJlYXNvbnMuXG5cbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRMYXlvdXRFZmZlY3RzLCBudWxsLCByb290LCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShuZXh0RWZmZWN0ICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2Vycm9yMiA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKG5leHRFZmZlY3QsIF9lcnJvcjIpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTtcblxuICAgIG5leHRFZmZlY3QgPSBudWxsOyAvLyBUZWxsIFNjaGVkdWxlciB0byB5aWVsZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtZSwgc28gdGhlIGJyb3dzZXIgaGFzIGFuXG4gICAgLy8gb3Bwb3J0dW5pdHkgdG8gcGFpbnQuXG5cbiAgICByZXF1ZXN0UGFpbnQoKTtcblxuICAgIHtcbiAgICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgICB9XG5cbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gTm8gZWZmZWN0cy5cbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIE1lYXN1cmUgdGhlc2UgYW55d2F5IHNvIHRoZSBmbGFtZWdyYXBoIGV4cGxpY2l0bHkgc2hvd3MgdGhhdCB0aGVyZSB3ZXJlXG4gICAgLy8gbm8gZWZmZWN0cy5cbiAgICAvLyBUT0RPOiBNYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byByZXBvcnQgdGhpcy5cblxuICAgIHtcbiAgICAgIHJlY29yZENvbW1pdFRpbWUoKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cyA9IHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzO1xuXG4gIGlmIChyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFRoaXMgY29tbWl0IGhhcyBwYXNzaXZlIGVmZmVjdHMuIFN0YXNoIGEgcmVmZXJlbmNlIHRvIHRoZW0uIEJ1dCBkb24ndFxuICAgIC8vIHNjaGVkdWxlIGEgY2FsbGJhY2sgdW50aWwgYWZ0ZXIgZmx1c2hpbmcgbGF5b3V0IHdvcmsuXG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IHJvb3Q7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBsYW5lcztcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IHJlbmRlclByaW9yaXR5TGV2ZWw7XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgYXJlIGRvbmUgd2l0aCB0aGUgZWZmZWN0IGNoYWluIGF0IHRoaXMgcG9pbnQgc28gbGV0J3MgY2xlYXIgdGhlXG4gICAgLy8gbmV4dEVmZmVjdCBwb2ludGVycyB0byBhc3Npc3Qgd2l0aCBHQy4gSWYgd2UgaGF2ZSBwYXNzaXZlIGVmZmVjdHMsIHdlJ2xsXG4gICAgLy8gY2xlYXIgdGhpcyBpbiBmbHVzaFBhc3NpdmVFZmZlY3RzLlxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV4dE5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICBuZXh0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuXG4gICAgICBpZiAobmV4dEVmZmVjdC5mbGFncyAmIERlbGV0aW9uKSB7XG4gICAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKG5leHRFZmZlY3QpO1xuICAgICAgfVxuXG4gICAgICBuZXh0RWZmZWN0ID0gbmV4dE5leHRFZmZlY3Q7XG4gICAgfVxuICB9IC8vIFJlYWQgdGhpcyBhZ2Fpbiwgc2luY2UgYW4gZWZmZWN0IG1pZ2h0IGhhdmUgdXBkYXRlZCBpdFxuXG5cbiAgcmVtYWluaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lczsgLy8gQ2hlY2sgaWYgdGhlcmUncyByZW1haW5pbmcgd29yayBvbiB0aGlzIHJvb3RcblxuICBpZiAocmVtYWluaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICB7XG4gICAgICBpZiAoc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyO1xuICAgICAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBpcmF0aW9uVGltZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUludGVyYWN0aW9ucyhyb290LCBleHBpcmF0aW9uVGltZXNbaV0sIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCByZW1haW5pbmdMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmssIHdlIGNhbiBjbGVhciB0aGUgc2V0IG9mIGFscmVhZHkgZmFpbGVkXG4gICAgLy8gZXJyb3IgYm91bmRhcmllcy5cbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKCFyb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGFzc2l2ZSBlZmZlY3RzLCB0aGVuIHdlIGNhbiBjb21wbGV0ZSB0aGUgcGVuZGluZyBpbnRlcmFjdGlvbnMuXG4gICAgICAvLyBPdGhlcndpc2UsIHdlJ2xsIHdhaXQgdW50aWwgYWZ0ZXIgdGhlIHBhc3NpdmUgZWZmZWN0cyBhcmUgZmx1c2hlZC5cbiAgICAgIC8vIFdhaXQgdG8gZG8gdGhpcyB1bnRpbCBhZnRlciByZW1haW5pbmcgd29yayBoYXMgYmVlbiBzY2hlZHVsZWQsXG4gICAgICAvLyBzbyB0aGF0IHdlIGRvbid0IHByZW1hdHVyZWx5IHNpZ25hbCBjb21wbGV0ZSBmb3IgaW50ZXJhY3Rpb25zIHdoZW4gdGhlcmUncyBlLmcuIGhpZGRlbiB3b3JrLlxuICAgICAgZmluaXNoUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlbWFpbmluZ0xhbmVzID09PSBTeW5jTGFuZSkge1xuICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHJvb3Qgc3luY2hyb25vdXNseSByZS1yZW5kZXJzIHdpdGhvdXRcbiAgICAvLyBmaW5pc2hpbmcuIElmIHRoZXJlIGFyZSB0b28gbWFueSwgaXQgaW5kaWNhdGVzIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wLlxuICAgIGlmIChyb290ID09PSByb290V2l0aE5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgIG5lc3RlZFVwZGF0ZUNvdW50Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgICAgIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IHJvb3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgfVxuXG4gIG9uQ29tbWl0Um9vdChmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLCByZW5kZXJQcmlvcml0eUxldmVsKTtcblxuICB7XG4gICAgb25Db21taXRSb290JDEoKTtcbiAgfSAvLyBBbHdheXMgY2FsbCB0aGlzIGJlZm9yZSBleGl0aW5nIGBjb21taXRSb290YCwgdG8gZW5zdXJlIHRoYXQgYW55XG4gIC8vIGFkZGl0aW9uYWwgd29yayBvbiB0aGlzIHJvb3QgaXMgc2NoZWR1bGVkLlxuXG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcblxuICBpZiAoaGFzVW5jYXVnaHRFcnJvcikge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSBmYWxzZTtcbiAgICB2YXIgX2Vycm9yMyA9IGZpcnN0VW5jYXVnaHRFcnJvcjtcbiAgICBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBudWxsO1xuICAgIHRocm93IF9lcnJvcjM7XG4gIH1cblxuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBMZWdhY3lVbmJhdGNoZWRDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgLy8gYSBSZWFjdERPTS5yZW5kZXItZWQgcm9vdCBpbnNpZGUgb2YgYmF0Y2hlZFVwZGF0ZXMuIFRoZSBjb21taXQgZmlyZWRcbiAgICAvLyBzeW5jaHJvbm91c2x5LCBidXQgbGF5b3V0IHVwZGF0ZXMgc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIHRoZSBlbmRcbiAgICAvLyBvZiB0aGUgYmF0Y2guXG5cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIElmIGxheW91dCB3b3JrIHdhcyBzY2hlZHVsZWQsIGZsdXNoIGl0IG5vdy5cblxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKCkge1xuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG5cbiAgICBpZiAoIXNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciAmJiBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgIT09IG51bGwpIHtcbiAgICAgIGlmICgobmV4dEVmZmVjdC5mbGFncyAmIERlbGV0aW9uKSAhPT0gTm9GbGFncykge1xuICAgICAgICBpZiAoZG9lc0ZpYmVyQ29udGFpbihuZXh0RWZmZWN0LCBmb2N1c2VkSW5zdGFuY2VIYW5kbGUpKSB7XG4gICAgICAgICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIG91dCBvZiB0aGUgaG90IHBhdGggdXNpbmcgYSBkZWRpY2F0ZWQgZWZmZWN0IHRhZy5cbiAgICAgICAgaWYgKG5leHRFZmZlY3QudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBpc1N1c3BlbnNlQm91bmRhcnlCZWluZ0hpZGRlbihjdXJyZW50LCBuZXh0RWZmZWN0KSAmJiBkb2VzRmliZXJDb250YWluKG5leHRFZmZlY3QsIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSkpIHtcbiAgICAgICAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZsYWdzID0gbmV4dEVmZmVjdC5mbGFncztcblxuICAgIGlmICgoZmxhZ3MgJiBTbmFwc2hvdCkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICAgIGNvbW1pdEJlZm9yZU11dGF0aW9uTGlmZUN5Y2xlcyhjdXJyZW50LCBuZXh0RWZmZWN0KTtcbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKChmbGFncyAmIFBhc3NpdmUpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgcGFzc2l2ZSBlZmZlY3RzLCBzY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGZsdXNoIGF0XG4gICAgICAvLyB0aGUgZWFybGllc3Qgb3Bwb3J0dW5pdHkuXG4gICAgICBpZiAoIXJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdE11dGF0aW9uRWZmZWN0cyhyb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFRPRE86IFNob3VsZCBwcm9iYWJseSBtb3ZlIHRoZSBidWxrIG9mIHRoaXMgZnVuY3Rpb24gdG8gY29tbWl0V29yay5cbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgdmFyIGZsYWdzID0gbmV4dEVmZmVjdC5mbGFncztcblxuICAgIGlmIChmbGFncyAmIENvbnRlbnRSZXNldCkge1xuICAgICAgY29tbWl0UmVzZXRUZXh0Q29udGVudChuZXh0RWZmZWN0KTtcbiAgICB9XG5cbiAgICBpZiAoZmxhZ3MgJiBSZWYpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbW1pdERldGFjaFJlZihjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBmb2xsb3dpbmcgc3dpdGNoIHN0YXRlbWVudCBpcyBvbmx5IGNvbmNlcm5lZCBhYm91dCBwbGFjZW1lbnQsXG4gICAgLy8gdXBkYXRlcywgYW5kIGRlbGV0aW9ucy4gVG8gYXZvaWQgbmVlZGluZyB0byBhZGQgYSBjYXNlIGZvciBldmVyeSBwb3NzaWJsZVxuICAgIC8vIGJpdG1hcCB2YWx1ZSwgd2UgcmVtb3ZlIHRoZSBzZWNvbmRhcnkgZWZmZWN0cyBmcm9tIHRoZSBlZmZlY3QgdGFnIGFuZFxuICAgIC8vIHN3aXRjaCBvbiB0aGF0IHZhbHVlLlxuXG5cbiAgICB2YXIgcHJpbWFyeUZsYWdzID0gZmxhZ3MgJiAoUGxhY2VtZW50IHwgVXBkYXRlIHwgRGVsZXRpb24gfCBIeWRyYXRpbmcpO1xuXG4gICAgc3dpdGNoIChwcmltYXJ5RmxhZ3MpIHtcbiAgICAgIGNhc2UgUGxhY2VtZW50OlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0UGxhY2VtZW50KG5leHRFZmZlY3QpOyAvLyBDbGVhciB0aGUgXCJwbGFjZW1lbnRcIiBmcm9tIGVmZmVjdCB0YWcgc28gdGhhdCB3ZSBrbm93IHRoYXQgdGhpcyBpc1xuICAgICAgICAgIC8vIGluc2VydGVkLCBiZWZvcmUgYW55IGxpZmUtY3ljbGVzIGxpa2UgY29tcG9uZW50RGlkTW91bnQgZ2V0cyBjYWxsZWQuXG4gICAgICAgICAgLy8gVE9ETzogZmluZERPTU5vZGUgZG9lc24ndCByZWx5IG9uIHRoaXMgYW55IG1vcmUgYnV0IGlzTW91bnRlZCBkb2VzXG4gICAgICAgICAgLy8gYW5kIGlzTW91bnRlZCBpcyBkZXByZWNhdGVkIGFueXdheSBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBraWxsIHRoaXMuXG5cbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5QbGFjZW1lbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBQbGFjZW1lbnRBbmRVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBQbGFjZW1lbnRcbiAgICAgICAgICBjb21taXRQbGFjZW1lbnQobmV4dEVmZmVjdCk7IC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzXG4gICAgICAgICAgLy8gaW5zZXJ0ZWQsIGJlZm9yZSBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cblxuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gflBsYWNlbWVudDsgLy8gVXBkYXRlXG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50LCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEh5ZHJhdGluZzpcbiAgICAgICAge1xuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gfkh5ZHJhdGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEh5ZHJhdGluZ0FuZFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gfkh5ZHJhdGluZzsgLy8gVXBkYXRlXG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnQyID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudDIsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9jdXJyZW50MyA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQzLCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIERlbGV0aW9uOlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0RGVsZXRpb24ocm9vdCwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TGF5b3V0RWZmZWN0cyhyb290LCBjb21taXR0ZWRMYW5lcykge1xuXG5cbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgdmFyIGZsYWdzID0gbmV4dEVmZmVjdC5mbGFncztcblxuICAgIGlmIChmbGFncyAmIChVcGRhdGUgfCBDYWxsYmFjaykpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICBjb21taXRMaWZlQ3ljbGVzKHJvb3QsIGN1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICBjb21taXRBdHRhY2hSZWYobmV4dEVmZmVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKSB7XG4gIC8vIFJldHVybnMgd2hldGhlciBwYXNzaXZlIGVmZmVjdHMgd2VyZSBmbHVzaGVkLlxuICBpZiAocGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgIT09IE5vUHJpb3JpdHkkMSkge1xuICAgIHZhciBwcmlvcml0eUxldmVsID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPiBOb3JtYWxQcmlvcml0eSQxID8gTm9ybWFsUHJpb3JpdHkkMSA6IHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5O1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gTm9Qcmlvcml0eSQxO1xuXG4gICAge1xuICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKHByaW9yaXR5TGV2ZWwsIGZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0TW91bnQoZmliZXIsIGVmZmVjdCkge1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQucHVzaChlZmZlY3QsIGZpYmVyKTtcblxuICBpZiAoIXJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGZpYmVyLCBlZmZlY3QpIHtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQucHVzaChlZmZlY3QsIGZpYmVyKTtcblxuICB7XG4gICAgZmliZXIuZmxhZ3MgfD0gUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICBhbHRlcm5hdGUuZmxhZ3MgfD0gUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgIH1cbiAgfVxuXG4gIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VQYXNzaXZlRWZmZWN0Q3JlYXRlKGVmZmVjdCkge1xuICB2YXIgY3JlYXRlID0gZWZmZWN0LmNyZWF0ZTtcbiAgZWZmZWN0LmRlc3Ryb3kgPSBjcmVhdGUoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0c0ltcGwoKSB7XG4gIGlmIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciByb290ID0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHM7XG4gIHZhciBsYW5lcyA9IHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzO1xuICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGw7XG4gIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gTm9MYW5lcztcblxuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGZsdXNoIHBhc3NpdmUgZWZmZWN0cyB3aGlsZSBhbHJlYWR5IHJlbmRlcmluZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7IC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgQUxMIHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3QgZGVzdHJveSBmdW5jdGlvbnMgYXJlIGNhbGxlZFxuICAvLyBiZWZvcmUgQU5ZIHBhc3NpdmUgZWZmZWN0IGNyZWF0ZSBmdW5jdGlvbnMgYXJlIGNhbGxlZC5cbiAgLy8gT3RoZXJ3aXNlIGVmZmVjdHMgaW4gc2libGluZyBjb21wb25lbnRzIG1pZ2h0IGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIuXG4gIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgbWF5IHVuaW50ZW50aW9uYWxseSBvdmVycmlkZSBhIHJlZlxuICAvLyB2YWx1ZSBzZXQgYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQuXG4gIC8vIExheW91dCBlZmZlY3RzIGhhdmUgdGhlIHNhbWUgY29uc3RyYWludC5cbiAgLy8gRmlyc3QgcGFzczogRGVzdHJveSBzdGFsZSBwYXNzaXZlIGVmZmVjdHMuXG5cbiAgdmFyIHVubW91bnRFZmZlY3RzID0gcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQ7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50ID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bm1vdW50RWZmZWN0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBfZWZmZWN0ID0gdW5tb3VudEVmZmVjdHNbaV07XG4gICAgdmFyIGZpYmVyID0gdW5tb3VudEVmZmVjdHNbaSArIDFdO1xuICAgIHZhciBkZXN0cm95ID0gX2VmZmVjdC5kZXN0cm95O1xuICAgIF9lZmZlY3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICAgIHtcbiAgICAgIGZpYmVyLmZsYWdzICY9IH5QYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0ZS5mbGFncyAmPSB+UGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgZGVzdHJveSwgbnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKGZpYmVyICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFNlY29uZCBwYXNzOiBDcmVhdGUgbmV3IHBhc3NpdmUgZWZmZWN0cy5cblxuXG4gIHZhciBtb3VudEVmZmVjdHMgPSBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQ7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudCA9IFtdO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb3VudEVmZmVjdHMubGVuZ3RoOyBfaSArPSAyKSB7XG4gICAgdmFyIF9lZmZlY3QyID0gbW91bnRFZmZlY3RzW19pXTtcbiAgICB2YXIgX2ZpYmVyID0gbW91bnRFZmZlY3RzW19pICsgMV07XG5cbiAgICB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoX2ZpYmVyKTtcblxuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgaW52b2tlUGFzc2l2ZUVmZmVjdENyZWF0ZSwgbnVsbCwgX2VmZmVjdDIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICBpZiAoIShfZmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9lcnJvcjQgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoX2ZpYmVyLCBfZXJyb3I0KTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9XG4gIH0gLy8gTm90ZTogVGhpcyBjdXJyZW50bHkgYXNzdW1lcyB0aGVyZSBhcmUgbm8gcGFzc2l2ZSBlZmZlY3RzIG9uIHRoZSByb290IGZpYmVyXG4gIC8vIGJlY2F1c2UgdGhlIHJvb3QgaXMgbm90IHBhcnQgb2YgaXRzIG93biBlZmZlY3QgbGlzdC5cbiAgLy8gVGhpcyBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxuXG4gIHZhciBlZmZlY3QgPSByb290LmN1cnJlbnQuZmlyc3RFZmZlY3Q7XG5cbiAgd2hpbGUgKGVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBuZXh0TmV4dEVmZmVjdCA9IGVmZmVjdC5uZXh0RWZmZWN0OyAvLyBSZW1vdmUgbmV4dEVmZmVjdCBwb2ludGVyIHRvIGFzc2lzdCBHQ1xuXG4gICAgZWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuXG4gICAgaWYgKGVmZmVjdC5mbGFncyAmIERlbGV0aW9uKSB7XG4gICAgICBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhlZmZlY3QpO1xuICAgIH1cblxuICAgIGVmZmVjdCA9IG5leHROZXh0RWZmZWN0O1xuICB9XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgICBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIHtcbiAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgfVxuXG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpOyAvLyBJZiBhZGRpdGlvbmFsIHBhc3NpdmUgZWZmZWN0cyB3ZXJlIHNjaGVkdWxlZCwgaW5jcmVtZW50IGEgY291bnRlci4gSWYgdGhpc1xuICAvLyBleGNlZWRzIHRoZSBsaW1pdCwgd2UnbGwgZmlyZSBhIHdhcm5pbmcuXG5cbiAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPT09IG51bGwgPyAwIDogbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ICsgMTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkICE9PSBudWxsICYmIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhpbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBtYXJrTGVnYWN5RXJyb3JCb3VuZGFyeUFzRmFpbGVkKGluc3RhbmNlKSB7XG4gIGlmIChsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9PT0gbnVsbCkge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbmV3IFNldChbaW5zdGFuY2VdKTtcbiAgfSBlbHNlIHtcbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5hZGQoaW5zdGFuY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb1Rocm93VW5jYXVnaHRFcnJvcihlcnJvcikge1xuICBpZiAoIWhhc1VuY2F1Z2h0RXJyb3IpIHtcbiAgICBoYXNVbmNhdWdodEVycm9yID0gdHJ1ZTtcbiAgICBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgfVxufVxuXG52YXIgb25VbmNhdWdodEVycm9yID0gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yO1xuXG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChyb290RmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcikge1xuICB2YXIgZXJyb3JJbmZvID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZShlcnJvciwgc291cmNlRmliZXIpO1xuICB2YXIgdXBkYXRlID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHJvb3RGaWJlciwgZXJyb3JJbmZvLCBTeW5jTGFuZSk7XG4gIGVucXVldWVVcGRhdGUocm9vdEZpYmVyLCB1cGRhdGUpO1xuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHJvb3RGaWJlciwgU3luY0xhbmUpO1xuXG4gIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIFN5bmNMYW5lLCBldmVudFRpbWUpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBTeW5jTGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3Ioc291cmNlRmliZXIsIGVycm9yKSB7XG4gIGlmIChzb3VyY2VGaWJlci50YWcgPT09IEhvc3RSb290KSB7XG4gICAgLy8gRXJyb3Igd2FzIHRocm93biBhdCB0aGUgcm9vdC4gVGhlcmUgaXMgbm8gcGFyZW50LCBzbyB0aGUgcm9vdFxuICAgIC8vIGl0c2VsZiBzaG91bGQgY2FwdHVyZSBpdC5cbiAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChzb3VyY2VGaWJlciwgc291cmNlRmliZXIsIGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZmliZXIgPSBzb3VyY2VGaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgaWYgKGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KGZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgdmFyIGN0b3IgPSBmaWJlci50eXBlO1xuICAgICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpIHtcbiAgICAgICAgdmFyIGVycm9ySW5mbyA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgU3luY0xhbmUpO1xuICAgICAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgICAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgICAgICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgU3luY0xhbmUsIGV2ZW50VGltZSk7XG4gICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIFN5bmNMYW5lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubW91bnRlZC5cbiAgICAgICAgICAvLyBXZSBjYW4ndCBzY2hlZHVsZSBhbnkgZm9sbG93IHVwIHdvcmsgZm9yIHRoZSByb290IGJlY2F1c2UgdGhlIGZpYmVyIGlzIGFscmVhZHkgdW5tb3VudGVkLFxuICAgICAgICAgIC8vIGJ1dCB3ZSBjYW4gc3RpbGwgY2FsbCB0aGUgbG9nLW9ubHkgYm91bmRhcnkgc28gdGhlIGVycm9yIGlzbid0IHN3YWxsb3dlZC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRPRE8gVGhpcyBpcyBvbmx5IGEgdGVtcG9yYXJ5IGJhbmRhaWQgZm9yIHRoZSBvbGQgcmVjb25jaWxlciBmb3JrLlxuICAgICAgICAgIC8vIFdlIGNhbiBkZWxldGUgdGhpcyBzcGVjaWFsIGNhc2Ugb25jZSB0aGUgbmV3IGZvcmsgaXMgbWVyZ2VkLlxuICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaChlcnJvciwgZXJyb3JJbmZvKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yVG9JZ25vcmUpIHsvLyBUT0RPIElnbm9yZSB0aGlzIGVycm9yPyBSZXRocm93IGl0P1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGtpbmQgb2YgYW4gZWRnZSBjYXNlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgfVxufVxuZnVuY3Rpb24gcGluZ1N1c3BlbmRlZFJvb3Qocm9vdCwgd2FrZWFibGUsIHBpbmdlZExhbmVzKSB7XG4gIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcblxuICBpZiAocGluZ0NhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHdha2VhYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcGluZ0NhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICBtYXJrUm9vdFBpbmdlZChyb290LCBwaW5nZWRMYW5lcyk7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCA9PT0gcm9vdCAmJiBpc1N1YnNldE9mTGFuZXMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsIHBpbmdlZExhbmVzKSkge1xuICAgIC8vIFJlY2VpdmVkIGEgcGluZyBhdCB0aGUgc2FtZSBwcmlvcml0eSBsZXZlbCBhdCB3aGljaCB3ZSdyZSBjdXJyZW50bHlcbiAgICAvLyByZW5kZXJpbmcuIFdlIG1pZ2h0IHdhbnQgdG8gcmVzdGFydCB0aGlzIHJlbmRlci4gVGhpcyBzaG91bGQgbWlycm9yXG4gICAgLy8gdGhlIGxvZ2ljIG9mIHdoZXRoZXIgb3Igbm90IGEgcm9vdCBzdXNwZW5kcyBvbmNlIGl0IGNvbXBsZXRlcy5cbiAgICAvLyBUT0RPOiBJZiB3ZSdyZSByZW5kZXJpbmcgc3luYyBlaXRoZXIgZHVlIHRvIFN5bmMsIEJhdGNoZWQgb3IgZXhwaXJlZCxcbiAgICAvLyB3ZSBzaG91bGQgcHJvYmFibHkgbmV2ZXIgcmVzdGFydC5cbiAgICAvLyBJZiB3ZSdyZSBzdXNwZW5kZWQgd2l0aCBkZWxheSwgb3IgaWYgaXQncyBhIHJldHJ5LCB3ZSdsbCBhbHdheXMgc3VzcGVuZFxuICAgIC8vIHNvIHdlIGNhbiBhbHdheXMgcmVzdGFydC5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkICYmIGluY2x1ZGVzT25seVJldHJpZXMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpICYmIG5vdygpIC0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA8IEZBTExCQUNLX1RIUk9UVExFX01TKSB7XG4gICAgICAvLyBSZXN0YXJ0IGZyb20gdGhlIHJvb3QuXG4gICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRXZlbiB0aG91Z2ggd2UgY2FuJ3QgcmVzdGFydCByaWdodCBub3csIHdlIG1pZ2h0IGdldCBhblxuICAgICAgLy8gb3Bwb3J0dW5pdHkgbGF0ZXIuIFNvIHdlIG1hcmsgdGhpcyByZW5kZXIgYXMgaGF2aW5nIGEgcGluZy5cbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcywgcGluZ2VkTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgcGluZ2VkTGFuZXMpO1xufVxuXG5mdW5jdGlvbiByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKSB7XG4gIC8vIFRoZSBib3VuZGFyeSBmaWJlciAoYSBTdXNwZW5zZSBjb21wb25lbnQgb3IgU3VzcGVuc2VMaXN0IGNvbXBvbmVudClcbiAgLy8gcHJldmlvdXNseSB3YXMgcmVuZGVyZWQgaW4gaXRzIGZhbGxiYWNrIHN0YXRlLiBPbmUgb2YgdGhlIHByb21pc2VzIHRoYXRcbiAgLy8gc3VzcGVuZGVkIGl0IGhhcyByZXNvbHZlZCwgd2hpY2ggbWVhbnMgYXQgbGVhc3QgcGFydCBvZiB0aGUgdHJlZSB3YXNcbiAgLy8gbGlrZWx5IHVuYmxvY2tlZC4gVHJ5IHJlbmRlcmluZyBhZ2FpbiwgYXQgYSBuZXcgZXhwaXJhdGlvbiB0aW1lLlxuICBpZiAocmV0cnlMYW5lID09PSBOb0xhbmUpIHtcbiAgICByZXRyeUxhbmUgPSByZXF1ZXN0UmV0cnlMYW5lKGJvdW5kYXJ5RmliZXIpO1xuICB9IC8vIFRPRE86IFNwZWNpYWwgY2FzZSBpZGxlIHByaW9yaXR5P1xuXG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xuXG4gIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIHJldHJ5TGFuZSwgZXZlbnRUaW1lKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgcmV0cnlMYW5lKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZVJldHJ5V2FrZWFibGUoYm91bmRhcnlGaWJlciwgd2FrZWFibGUpIHtcbiAgdmFyIHJldHJ5TGFuZSA9IE5vTGFuZTsgLy8gRGVmYXVsdFxuXG4gIHZhciByZXRyeUNhY2hlO1xuXG4gIHtcbiAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGU7XG4gIH1cblxuICBpZiAocmV0cnlDYWNoZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSB3YWtlYWJsZSByZXNvbHZlZCwgc28gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gbWVtb2l6ZSwgYmVjYXVzZSBpdCB3aWxsXG4gICAgLy8gbmV2ZXIgYmUgdGhyb3duIGFnYWluLlxuICAgIHJldHJ5Q2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgfVxuXG4gIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xufSAvLyBDb21wdXRlcyB0aGUgbmV4dCBKdXN0IE5vdGljZWFibGUgRGlmZmVyZW5jZSAoSk5EKSBib3VuZGFyeS5cbi8vIFRoZSB0aGVvcnkgaXMgdGhhdCBhIHBlcnNvbiBjYW4ndCB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc21hbGwgZGlmZmVyZW5jZXMgaW4gdGltZS5cbi8vIFRoZXJlZm9yZSwgaWYgd2Ugd2FpdCBhIGJpdCBsb25nZXIgdGhhbiBuZWNlc3NhcnkgdGhhdCB3b24ndCB0cmFuc2xhdGUgdG8gYSBub3RpY2VhYmxlXG4vLyBkaWZmZXJlbmNlIGluIHRoZSBleHBlcmllbmNlLiBIb3dldmVyLCB3YWl0aW5nIGZvciBsb25nZXIgbWlnaHQgbWVhbiB0aGF0IHdlIGNhbiBhdm9pZFxuLy8gc2hvd2luZyBhbiBpbnRlcm1lZGlhdGUgbG9hZGluZyBzdGF0ZS4gVGhlIGxvbmdlciB3ZSBoYXZlIGFscmVhZHkgd2FpdGVkLCB0aGUgaGFyZGVyIGl0XG4vLyBpcyB0byB0ZWxsIHNtYWxsIGRpZmZlcmVuY2VzIGluIHRpbWUuIFRoZXJlZm9yZSwgdGhlIGxvbmdlciB3ZSd2ZSBhbHJlYWR5IHdhaXRlZCxcbi8vIHRoZSBsb25nZXIgd2UgY2FuIHdhaXQgYWRkaXRpb25hbGx5LiBBdCBzb21lIHBvaW50IHdlIGhhdmUgdG8gZ2l2ZSB1cCB0aG91Z2guXG4vLyBXZSBwaWNrIGEgdHJhaW4gbW9kZWwgd2hlcmUgdGhlIG5leHQgYm91bmRhcnkgY29tbWl0cyBhdCBhIGNvbnNpc3RlbnQgc2NoZWR1bGUuXG4vLyBUaGVzZSBwYXJ0aWN1bGFyIG51bWJlcnMgYXJlIHZhZ3VlIGVzdGltYXRlcy4gV2UgZXhwZWN0IHRvIGFkanVzdCB0aGVtIGJhc2VkIG9uIHJlc2VhcmNoLlxuXG5mdW5jdGlvbiBqbmQodGltZUVsYXBzZWQpIHtcbiAgcmV0dXJuIHRpbWVFbGFwc2VkIDwgMTIwID8gMTIwIDogdGltZUVsYXBzZWQgPCA0ODAgPyA0ODAgOiB0aW1lRWxhcHNlZCA8IDEwODAgPyAxMDgwIDogdGltZUVsYXBzZWQgPCAxOTIwID8gMTkyMCA6IHRpbWVFbGFwc2VkIDwgMzAwMCA/IDMwMDAgOiB0aW1lRWxhcHNlZCA8IDQzMjAgPyA0MzIwIDogY2VpbCh0aW1lRWxhcHNlZCAvIDE5NjApICogMTk2MDtcbn1cblxuZnVuY3Rpb24gY2hlY2tGb3JOZXN0ZWRVcGRhdGVzKCkge1xuICBpZiAobmVzdGVkVXBkYXRlQ291bnQgPiBORVNURURfVVBEQVRFX0xJTUlUKSB7XG4gICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICAgIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGw7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGNvbXBvbmVudCByZXBlYXRlZGx5IGNhbGxzIHNldFN0YXRlIGluc2lkZSBjb21wb25lbnRXaWxsVXBkYXRlIG9yIGNvbXBvbmVudERpZFVwZGF0ZS4gUmVhY3QgbGltaXRzIHRoZSBudW1iZXIgb2YgbmVzdGVkIHVwZGF0ZXMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID4gTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUKSB7XG4gICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwO1xuXG4gICAgICBlcnJvcignTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50ICcgKyBcImNhbGxzIHNldFN0YXRlIGluc2lkZSB1c2VFZmZlY3QsIGJ1dCB1c2VFZmZlY3QgZWl0aGVyIGRvZXNuJ3QgXCIgKyAnaGF2ZSBhIGRlcGVuZGVuY3kgYXJyYXksIG9yIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZXMgb24gJyArICdldmVyeSByZW5kZXIuJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoUmVuZGVyUGhhc2VTdHJpY3RNb2RlV2FybmluZ3NJbkRFVigpIHtcbiAge1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcoKTtcblxuICAgIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ID0gbnVsbDtcblxuZnVuY3Rpb24gd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gV2UgbGV0IHRoZSBvdGhlciB3YXJuaW5nIGFib3V0IHJlbmRlciBwaGFzZSB1cGRhdGVzIGRlYWwgd2l0aCB0aGlzIG9uZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIShmaWJlci5tb2RlICYgKEJsb2NraW5nTW9kZSB8IENvbmN1cnJlbnRNb2RlKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gZmliZXIudGFnO1xuXG4gICAgaWYgKHRhZyAhPT0gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCAmJiB0YWcgIT09IEhvc3RSb290ICYmIHRhZyAhPT0gQ2xhc3NDb21wb25lbnQgJiYgdGFnICE9PSBGdW5jdGlvbkNvbXBvbmVudCAmJiB0YWcgIT09IEZvcndhcmRSZWYgJiYgdGFnICE9PSBNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gU2ltcGxlTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IEJsb2NrKSB7XG4gICAgICAvLyBPbmx5IHdhcm4gZm9yIHVzZXItZGVmaW5lZCBjb21wb25lbnRzLCBub3QgaW50ZXJuYWwgb25lcyBsaWtlIFN1c3BlbnNlLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2Ugc2hvdyB0aGUgd2hvbGUgc3RhY2sgYnV0IGRlZHVwZSBvbiB0aGUgdG9wIGNvbXBvbmVudCdzIG5hbWUgYmVjYXVzZVxuICAgIC8vIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFsbW9zdCBhbHdheXMgbGllcyBpbnNpZGUgdGhhdCBjb21wb25lbnQuXG5cblxuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnUmVhY3RDb21wb25lbnQnO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ID0gbmV3IFNldChbY29tcG9uZW50TmFtZV0pO1xuICAgIH1cblxuICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICBlcnJvcihcIkNhbid0IHBlcmZvcm0gYSBSZWFjdCBzdGF0ZSB1cGRhdGUgb24gYSBjb21wb25lbnQgdGhhdCBoYXNuJ3QgbW91bnRlZCB5ZXQuIFwiICsgJ1RoaXMgaW5kaWNhdGVzIHRoYXQgeW91IGhhdmUgYSBzaWRlLWVmZmVjdCBpbiB5b3VyIHJlbmRlciBmdW5jdGlvbiB0aGF0ICcgKyAnYXN5bmNocm9ub3VzbHkgbGF0ZXIgY2FsbHMgdHJpZXMgdG8gdXBkYXRlIHRoZSBjb21wb25lbnQuIE1vdmUgdGhpcyB3b3JrIHRvICcgKyAndXNlRWZmZWN0IGluc3RlYWQuJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0gbnVsbDtcblxuZnVuY3Rpb24gd2FybkFib3V0VXBkYXRlT25Vbm1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gIHtcbiAgICB2YXIgdGFnID0gZmliZXIudGFnO1xuXG4gICAgaWYgKHRhZyAhPT0gSG9zdFJvb3QgJiYgdGFnICE9PSBDbGFzc0NvbXBvbmVudCAmJiB0YWcgIT09IEZ1bmN0aW9uQ29tcG9uZW50ICYmIHRhZyAhPT0gRm9yd2FyZFJlZiAmJiB0YWcgIT09IE1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gQmxvY2spIHtcbiAgICAgIC8vIE9ubHkgd2FybiBmb3IgdXNlci1kZWZpbmVkIGNvbXBvbmVudHMsIG5vdCBpbnRlcm5hbCBvbmVzIGxpa2UgU3VzcGVuc2UuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB0aGVyZSBhcmUgcGVuZGluZyBwYXNzaXZlIGVmZmVjdHMgdW5tb3VudHMgZm9yIHRoaXMgRmliZXIsXG4gICAgLy8gd2UgY2FuIGFzc3VtZSB0aGF0IHRoZXkgd291bGQgaGF2ZSBwcmV2ZW50ZWQgdGhpcyB1cGRhdGUuXG5cblxuICAgIGlmICgoZmliZXIuZmxhZ3MgJiBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXYpICE9PSBOb0ZsYWdzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBzaG93IHRoZSB3aG9sZSBzdGFjayBidXQgZGVkdXBlIG9uIHRoZSB0b3AgY29tcG9uZW50J3MgbmFtZSBiZWNhdXNlXG4gICAgLy8gdGhlIHByb2JsZW1hdGljIGNvZGUgYWxtb3N0IGFsd2F5cyBsaWVzIGluc2lkZSB0aGF0IGNvbXBvbmVudC5cblxuXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdSZWFjdENvbXBvbmVudCc7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IG5ldyBTZXQoW2NvbXBvbmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICBpZiAoaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzKSA7IGVsc2Uge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LiBUaGlzIFwiICsgJ2lzIGEgbm8tb3AsIGJ1dCBpdCBpbmRpY2F0ZXMgYSBtZW1vcnkgbGVhayBpbiB5b3VyIGFwcGxpY2F0aW9uLiBUbyAnICsgJ2ZpeCwgY2FuY2VsIGFsbCBzdWJzY3JpcHRpb25zIGFuZCBhc3luY2hyb25vdXMgdGFza3MgaW4gJXMuJywgdGFnID09PSBDbGFzc0NvbXBvbmVudCA/ICd0aGUgY29tcG9uZW50V2lsbFVubW91bnQgbWV0aG9kJyA6ICdhIHVzZUVmZmVjdCBjbGVhbnVwIGZ1bmN0aW9uJyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgYmVnaW5Xb3JrJDE7XG5cbntcbiAgdmFyIGR1bW15RmliZXIgPSBudWxsO1xuXG4gIGJlZ2luV29yayQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKSB7XG4gICAgLy8gSWYgYSBjb21wb25lbnQgdGhyb3dzIGFuIGVycm9yLCB3ZSByZXBsYXkgaXQgYWdhaW4gaW4gYSBzeW5jaHJvbm91c2x5XG4gICAgLy8gZGlzcGF0Y2hlZCBldmVudCwgc28gdGhhdCB0aGUgZGVidWdnZXIgd2lsbCB0cmVhdCBpdCBhcyBhbiB1bmNhdWdodFxuICAgIC8vIGVycm9yIFNlZSBSZWFjdEVycm9yVXRpbHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgLy8gQmVmb3JlIGVudGVyaW5nIHRoZSBiZWdpbiBwaGFzZSwgY29weSB0aGUgd29yay1pbi1wcm9ncmVzcyBvbnRvIGEgZHVtbXlcbiAgICAvLyBmaWJlci4gSWYgYmVnaW5Xb3JrIHRocm93cywgd2UnbGwgdXNlIHRoaXMgdG8gcmVzZXQgdGhlIHN0YXRlLlxuICAgIHZhciBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSA9IGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKGR1bW15RmliZXIsIHVuaXRPZldvcmspO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBiZWdpbldvcmsoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpO1xuICAgIH0gY2F0Y2ggKG9yaWdpbmFsRXJyb3IpIHtcbiAgICAgIGlmIChvcmlnaW5hbEVycm9yICE9PSBudWxsICYmIHR5cGVvZiBvcmlnaW5hbEVycm9yID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3JpZ2luYWxFcnJvci50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIERvbid0IHJlcGxheSBwcm9taXNlcy4gVHJlYXQgZXZlcnl0aGluZyBlbHNlIGxpa2UgYW4gZXJyb3IuXG4gICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICB9IC8vIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgd2l0aCBoYW5kbGVFcnJvcjsgYW55IGNoYW5nZXMgaGVyZSBtdXN0IGhhdmVcbiAgICAgIC8vIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0aGVyZS5cblxuXG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHJlc2V0SG9va3NBZnRlclRocm93KCk7IC8vIERvbid0IHJlc2V0IGN1cnJlbnQgZGVidWcgZmliZXIsIHNpbmNlIHdlJ3JlIGFib3V0IHRvIHdvcmsgb24gdGhlXG4gICAgICAvLyBzYW1lIGZpYmVyIGFnYWluLlxuICAgICAgLy8gVW53aW5kIHRoZSBmYWlsZWQgc3RhY2sgZnJhbWVcblxuICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKHVuaXRPZldvcmspOyAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm9wZXJ0aWVzIG9mIHRoZSBmaWJlci5cblxuICAgICAgYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodW5pdE9mV29yaywgb3JpZ2luYWxXb3JrSW5Qcm9ncmVzc0NvcHkpO1xuXG4gICAgICBpZiAoIHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIC8vIFJlc2V0IHRoZSBwcm9maWxlciB0aW1lci5cbiAgICAgICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgICAgfSAvLyBSdW4gYmVnaW5Xb3JrIGFnYWluLlxuXG5cbiAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBiZWdpbldvcmssIG51bGwsIGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKTtcblxuICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgdmFyIHJlcGxheUVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpOyAvLyBgaW52b2tlR3VhcmRlZENhbGxiYWNrYCBzb21ldGltZXMgc2V0cyBhbiBleHBhbmRvIGBfc3VwcHJlc3NMb2dnaW5nYC5cbiAgICAgICAgLy8gUmV0aHJvdyB0aGlzIGVycm9yIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIG9uZS5cblxuICAgICAgICB0aHJvdyByZXBsYXlFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgYnJhbmNoIGlzIHJlYWNoYWJsZSBpZiB0aGUgcmVuZGVyIHBoYXNlIGlzIGltcHVyZS5cbiAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9IGZhbHNlO1xudmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudDtcblxue1xuICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQgPSBuZXcgU2V0KCk7XG59XG5cbmZ1bmN0aW9uIHdhcm5BYm91dFJlbmRlclBoYXNlVXBkYXRlc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoaXNSZW5kZXJpbmcgJiYgKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmICFnZXRJc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlSW5ERVYoKSkge1xuICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlbmRlcmluZ0NvbXBvbmVudE5hbWUgPSB3b3JrSW5Qcm9ncmVzcyAmJiBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdVbmtub3duJzsgLy8gRGVkdXBlIGJ5IHRoZSByZW5kZXJpbmcgY29tcG9uZW50IGJlY2F1c2UgaXQncyB0aGUgb25lIHRoYXQgbmVlZHMgdG8gYmUgZml4ZWQuXG5cbiAgICAgICAgICAgIHZhciBkZWR1cGVLZXkgPSByZW5kZXJpbmdDb21wb25lbnROYW1lO1xuXG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5oYXMoZGVkdXBlS2V5KSkge1xuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuYWRkKGRlZHVwZUtleSk7XG4gICAgICAgICAgICAgIHZhciBzZXRTdGF0ZUNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJztcblxuICAgICAgICAgICAgICBlcnJvcignQ2Fubm90IHVwZGF0ZSBhIGNvbXBvbmVudCAoYCVzYCkgd2hpbGUgcmVuZGVyaW5nIGEgJyArICdkaWZmZXJlbnQgY29tcG9uZW50IChgJXNgKS4gVG8gbG9jYXRlIHRoZSBiYWQgc2V0U3RhdGUoKSBjYWxsIGluc2lkZSBgJXNgLCAnICsgJ2ZvbGxvdyB0aGUgc3RhY2sgdHJhY2UgYXMgZGVzY3JpYmVkIGluIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zZXRzdGF0ZS1pbi1yZW5kZXInLCBzZXRTdGF0ZUNvbXBvbmVudE5hbWUsIHJlbmRlcmluZ0NvbXBvbmVudE5hbWUsIHJlbmRlcmluZ0NvbXBvbmVudE5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdDYW5ub3QgdXBkYXRlIGR1cmluZyBhbiBleGlzdGluZyBzdGF0ZSB0cmFuc2l0aW9uIChzdWNoIGFzICcgKyAnd2l0aGluIGByZW5kZXJgKS4gUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSAnICsgJ2Z1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4nKTtcblxuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gYSAnc2hhcmVkJyB2YXJpYWJsZSB0aGF0IGNoYW5nZXMgd2hlbiBhY3QoKSBvcGVucy9jbG9zZXMgaW4gdGVzdHMuXG5cblxudmFyIElzVGhpc1JlbmRlcmVyQWN0aW5nID0ge1xuICBjdXJyZW50OiBmYWxzZVxufTtcbmZ1bmN0aW9uIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChmaWJlcikge1xuICB7XG4gICAgaWYgKCBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSB0cnVlICYmIElzVGhpc1JlbmRlcmVyQWN0aW5nLmN1cnJlbnQgIT09IHRydWUpIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBlcnJvcihcIkl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIHRoZSB3cm9uZyBhY3QoKSBhcm91bmQgeW91ciB0ZXN0IGludGVyYWN0aW9ucy5cXG5cIiArICdCZSBzdXJlIHRvIHVzZSB0aGUgbWF0Y2hpbmcgdmVyc2lvbiBvZiBhY3QoKSBjb3JyZXNwb25kaW5nIHRvIHlvdXIgcmVuZGVyZXI6XFxuXFxuJyArICcvLyBmb3IgcmVhY3QtZG9tOlxcbicgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAnaW1wb3J0IHthY3R9IGZyJyArIFwib20gJ3JlYWN0LWRvbS90ZXN0LXV0aWxzJztcXG5cIiArICcvLyAuLi5cXG4nICsgJ2FjdCgoKSA9PiAuLi4pO1xcblxcbicgKyAnLy8gZm9yIHJlYWN0LXRlc3QtcmVuZGVyZXI6XFxuJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICdpbXBvcnQgVGVzdFJlbmRlcmVyIGZyJyArIFwib20gcmVhY3QtdGVzdC1yZW5kZXJlcic7XFxuXCIgKyAnY29uc3Qge2FjdH0gPSBUZXN0UmVuZGVyZXI7XFxuJyArICcvLyAuLi5cXG4nICsgJ2FjdCgoKSA9PiAuLi4pOycpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKCAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUpICE9PSBOb01vZGUgJiYgSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIGVycm9yKCdBbiB1cGRhdGUgdG8gJXMgcmFuIGFuIGVmZmVjdCwgYnV0IHdhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG4nICsgJ1doZW4gdGVzdGluZywgY29kZSB0aGF0IGNhdXNlcyBSZWFjdCBzdGF0ZSB1cGRhdGVzIHNob3VsZCBiZSAnICsgJ3dyYXBwZWQgaW50byBhY3QoLi4uKTpcXG5cXG4nICsgJ2FjdCgoKSA9PiB7XFxuJyArICcgIC8qIGZpcmUgZXZlbnRzIHRoYXQgdXBkYXRlIHN0YXRlICovXFxuJyArICd9KTtcXG4nICsgJy8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuJyArIFwiVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBcIiArICdpbiB0aGUgYnJvd3Nlci4nICsgJyBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0JywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKCBleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQgJiYgSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBlcnJvcignQW4gdXBkYXRlIHRvICVzIGluc2lkZSBhIHRlc3Qgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbicgKyAnV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlICcgKyAnd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbicgKyAnYWN0KCgpID0+IHtcXG4nICsgJyAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG4nICsgJ30pO1xcbicgKyAnLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG4nICsgXCJUaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIFwiICsgJ2luIHRoZSBicm93c2VyLicgKyAnIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3QnLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5EZXYgPSB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5ERVY7IC8vIEluIHRlc3RzLCB3ZSB3YW50IHRvIGVuZm9yY2UgYSBtb2NrZWQgc2NoZWR1bGVyLlxuXG52YXIgZGlkV2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPSBmYWxzZTsgLy8gVE9ETyBCZWZvcmUgd2UgcmVsZWFzZSBjb25jdXJyZW50IG1vZGUsIHJldmlzaXQgdGhpcyBhbmQgZGVjaWRlIHdoZXRoZXIgYSBtb2NrZWRcbi8vIHNjaGVkdWxlciBpcyB0aGUgYWN0dWFsIHJlY29tbWVuZGF0aW9uLiBUaGUgYWx0ZXJuYXRpdmUgY291bGQgYmUgYSB0ZXN0aW5nIGJ1aWxkLFxuLy8gYSBuZXcgbGliLCBvciB3aGF0ZXZlcjsgd2UgZHVubm8ganVzdCB5ZXQuIFRoaXMgbWVzc2FnZSBpcyBmb3IgZWFybHkgYWRvcHRlcnNcbi8vIHRvIGdldCB0aGVpciB0ZXN0cyByaWdodC5cblxuZnVuY3Rpb24gd2FybklmVW5tb2NrZWRTY2hlZHVsZXIoZmliZXIpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9PT0gZmFsc2UgJiYgU2NoZWR1bGVyLnVuc3RhYmxlX2ZsdXNoQWxsV2l0aG91dEFzc2VydGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZmliZXIubW9kZSAmIEJsb2NraW5nTW9kZSB8fCBmaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdJbiBDb25jdXJyZW50IG9yIFN5bmMgbW9kZXMsIHRoZSBcInNjaGVkdWxlclwiIG1vZHVsZSBuZWVkcyB0byBiZSBtb2NrZWQgJyArICd0byBndWFyYW50ZWUgY29uc2lzdGVudCBiZWhhdmlvdXIgYWNyb3NzIHRlc3RzIGFuZCBicm93c2Vycy4gJyArICdGb3IgZXhhbXBsZSwgd2l0aCBqZXN0OiBcXG4nICsgLy8gQnJlYWsgdXAgcmVxdWlyZXMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgIFwiamVzdC5tb2NrKCdzY2hlZHVsZXInLCAoKSA9PiByZXF1aXJlXCIgKyBcIignc2NoZWR1bGVyL3Vuc3RhYmxlX21vY2snKSk7XFxuXFxuXCIgKyAnRm9yIG1vcmUgaW5mbywgdmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL21vY2stc2NoZWR1bGVyJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lKSB7XG4gIC8vIEludGVyYWN0aW9uIHRocmVhZHMgYXJlIHVuaXF1ZSBwZXIgcm9vdCBhbmQgZXhwaXJhdGlvbiB0aW1lLlxuICAvLyBOT1RFOiBJbnRlbnRpb25hbGx5IHVuc291bmQgY2FzdC4gQWxsIHRoYXQgbWF0dGVycyBpcyB0aGF0IGl0J3MgYSBudW1iZXJcbiAgLy8gYW5kIGl0IHJlcHJlc2VudHMgYSBiYXRjaCBvZiB3b3JrLiBDb3VsZCBtYWtlIGEgaGVscGVyIGZ1bmN0aW9uIGluc3RlYWQsXG4gIC8vIGJ1dCBtZWggdGhpcyBpcyBmaW5lIGZvciBub3cuXG4gIHJldHVybiBsYW5lICogMTAwMCArIHJvb3QuaW50ZXJhY3Rpb25UaHJlYWRJRDtcbn1cblxuZnVuY3Rpb24gbWFya1NwYXduZWRXb3JrKGxhbmUpIHtcblxuICBpZiAoc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPT09IG51bGwpIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IFtsYW5lXTtcbiAgfSBlbHNlIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlci5wdXNoKGxhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUsIGludGVyYWN0aW9ucykge1xuXG4gIGlmIChpbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9uTWFwID0gcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXA7XG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbnMgPSBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuZ2V0KGxhbmUpO1xuXG4gICAgaWYgKHBlbmRpbmdJbnRlcmFjdGlvbnMgIT0gbnVsbCkge1xuICAgICAgaW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGlmICghcGVuZGluZ0ludGVyYWN0aW9ucy5oYXMoaW50ZXJhY3Rpb24pKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHByZXZpb3VzbHkgdW5zY2hlZHVsZWQgaW50ZXJhY3Rpb24uXG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVuZGluZ0ludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5zZXQobGFuZSwgbmV3IFNldChpbnRlcmFjdGlvbnMpKTsgLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cblxuICAgICAgaW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgbGFuZSk7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpIHtcblxuICBzY2hlZHVsZUludGVyYWN0aW9ucyhyb290LCBsYW5lLCB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQpO1xufVxuXG5mdW5jdGlvbiBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpIHtcbiAgLy8gd2UgY2FuIGFjY3VyYXRlbHkgYXR0cmlidXRlIHRpbWUgc3BlbnQgd29ya2luZyBvbiBpdCwgQW5kIHNvIHRoYXQgY2FzY2FkaW5nXG4gIC8vIHdvcmsgdHJpZ2dlcmVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgdmFyIGludGVyYWN0aW9ucyA9IG5ldyBTZXQoKTtcbiAgcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXAuZm9yRWFjaChmdW5jdGlvbiAoc2NoZWR1bGVkSW50ZXJhY3Rpb25zLCBzY2hlZHVsZWRMYW5lKSB7XG4gICAgaWYgKGluY2x1ZGVzU29tZUxhbmUobGFuZXMsIHNjaGVkdWxlZExhbmUpKSB7XG4gICAgICBzY2hlZHVsZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTsgLy8gU3RvcmUgdGhlIGN1cnJlbnQgc2V0IG9mIGludGVyYWN0aW9ucyBvbiB0aGUgRmliZXJSb290IGZvciBhIGZldyByZWFzb25zOlxuICAvLyBXZSBjYW4gcmUtdXNlIGl0IGluIGhvdCBmdW5jdGlvbnMgbGlrZSBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QoKVxuICAvLyB3aXRob3V0IGhhdmluZyB0byByZWNhbGN1bGF0ZSBpdC4gV2Ugd2lsbCBhbHNvIHVzZSBpdCBpbiBjb21taXRXb3JrKCkgdG9cbiAgLy8gcGFzcyB0byBhbnkgUHJvZmlsZXIgb25SZW5kZXIoKSBob29rcy4gVGhpcyBhbHNvIHByb3ZpZGVzIERldlRvb2xzIHdpdGggYVxuICAvLyB3YXkgdG8gYWNjZXNzIGl0IHdoZW4gdGhlIG9uQ29tbWl0Um9vdCgpIGhvb2sgaXMgY2FsbGVkLlxuXG4gIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMgPSBpbnRlcmFjdGlvbnM7XG5cbiAgaWYgKGludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgIHZhciBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgbGFuZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB0aHJvd3MsIHJldGhyb3cgaXQgaW4gYSBzZXBhcmF0ZSB0YXNrXG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBjb21taXR0ZWRMYW5lcykge1xuXG4gIHZhciByZW1haW5pbmdMYW5lc0FmdGVyQ29tbWl0ID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIHZhciBzdWJzY3JpYmVyO1xuXG4gIHRyeSB7XG4gICAgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgICAvLyBGSVhNRTogTW9yZSB0aGFuIG9uZSBsYW5lIGNhbiBmaW5pc2ggaW4gYSBzaW5nbGUgY29tbWl0LlxuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGNvbW1pdHRlZExhbmVzKTtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChyb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIENsZWFyIGNvbXBsZXRlZCBpbnRlcmFjdGlvbnMgZnJvbSB0aGUgcGVuZGluZyBNYXAuXG4gICAgLy8gVW5sZXNzIHRoZSByZW5kZXIgd2FzIHN1c3BlbmRlZCBvciBjYXNjYWRpbmcgd29yayB3YXMgc2NoZWR1bGVkLFxuICAgIC8vIEluIHdoaWNoIGNhc2VcdTIwMTMgbGVhdmUgcGVuZGluZyBpbnRlcmFjdGlvbnMgdW50aWwgdGhlIHN1YnNlcXVlbnQgcmVuZGVyLlxuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcDtcbiAgICBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuZm9yRWFjaChmdW5jdGlvbiAoc2NoZWR1bGVkSW50ZXJhY3Rpb25zLCBsYW5lKSB7XG4gICAgICAvLyBPbmx5IGRlY3JlbWVudCB0aGUgcGVuZGluZyBpbnRlcmFjdGlvbiBjb3VudCBpZiB3ZSdyZSBkb25lLlxuICAgICAgLy8gSWYgdGhlcmUncyBzdGlsbCB3b3JrIGF0IHRoZSBjdXJyZW50IHByaW9yaXR5LFxuICAgICAgLy8gVGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igc3VzcGVuc2UgZGF0YS5cbiAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW1haW5pbmdMYW5lc0FmdGVyQ29tbWl0LCBsYW5lKSkge1xuICAgICAgICBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuZGVsZXRlKGxhbmUpO1xuICAgICAgICBzY2hlZHVsZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICAgICAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0gLy8gYGFjdGAgdGVzdGluZyBBUElcblxuZnVuY3Rpb24gc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkge1xuICAvLyBOZXZlciBmb3JjZSBmbHVzaCBpbiBwcm9kdWN0aW9uLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBnZXQgc3RyaXBwZWQgb3V0LlxuICByZXR1cm4gIGFjdGluZ1VwZGF0ZXNTY29wZURlcHRoID4gMDtcbn1cbi8vIHNvIHdlIGNhbiB0ZWxsIGlmIGFueSBhc3luYyBhY3QoKSBjYWxscyB0cnkgdG8gcnVuIGluIHBhcmFsbGVsLlxuXG5cbnZhciBhY3RpbmdVcGRhdGVzU2NvcGVEZXB0aCA9IDA7XG5cbmZ1bmN0aW9uIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGZpYmVyKSB7XG4gIGZpYmVyLnNpYmxpbmcgPSBudWxsO1xuICBmaWJlci5zdGF0ZU5vZGUgPSBudWxsO1xufVxuXG52YXIgcmVzb2x2ZUZhbWlseSA9IG51bGw7IC8vICRGbG93Rml4TWUgRmxvdyBnZXRzIGNvbmZ1c2VkIGJ5IGEgV2Vha1NldCBmZWF0dXJlIGNoZWNrIGJlbG93LlxuXG52YXIgZmFpbGVkQm91bmRhcmllcyA9IG51bGw7XG52YXIgc2V0UmVmcmVzaEhhbmRsZXIgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICB7XG4gICAgcmVzb2x2ZUZhbWlseSA9IGhhbmRsZXI7XG4gIH1cbn07XG5mdW5jdGlvbiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSAvLyBVc2UgdGhlIGxhdGVzdCBrbm93biBpbXBsZW1lbnRhdGlvbi5cblxuXG4gICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICAvLyBObyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJlbmNlcy5cbiAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlYWwgZm9yd2FyZFJlZi4gRG9uJ3Qgd2FudCB0byBjcmFzaCBlYXJseS5cbiAgICAgIGlmICh0eXBlICE9PSBudWxsICYmIHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRm9yd2FyZFJlZiBpcyBzcGVjaWFsIGJlY2F1c2UgaXRzIHJlc29sdmVkIC50eXBlIGlzIGFuIG9iamVjdCxcbiAgICAgICAgLy8gYnV0IGl0J3MgcG9zc2libGUgdGhhdCB3ZSBvbmx5IGhhdmUgaXRzIGlubmVyIHJlbmRlciBmdW5jdGlvbiBpbiB0aGUgbWFwLlxuICAgICAgICAvLyBJZiB0aGF0IGlubmVyIHJlbmRlciBmdW5jdGlvbiBpcyBkaWZmZXJlbnQsIHdlJ2xsIGJ1aWxkIGEgbmV3IGZvcndhcmRSZWYgdHlwZS5cbiAgICAgICAgdmFyIGN1cnJlbnRSZW5kZXIgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZS5yZW5kZXIpO1xuXG4gICAgICAgIGlmICh0eXBlLnJlbmRlciAhPT0gY3VycmVudFJlbmRlcikge1xuICAgICAgICAgIHZhciBzeW50aGV0aWNUeXBlID0ge1xuICAgICAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgICAgICAgICByZW5kZXI6IGN1cnJlbnRSZW5kZXJcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3ludGhldGljVHlwZS5kaXNwbGF5TmFtZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN5bnRoZXRpY1R5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSAvLyBVc2UgdGhlIGxhdGVzdCBrbm93biBpbXBsZW1lbnRhdGlvbi5cblxuXG4gICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoZmliZXIsIGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBwcmV2VHlwZSA9IGZpYmVyLmVsZW1lbnRUeXBlO1xuICAgIHZhciBuZXh0VHlwZSA9IGVsZW1lbnQudHlwZTsgLy8gSWYgd2UgZ290IGhlcmUsIHdlIGtub3cgdHlwZXMgYXJlbid0ID09PSBlcXVhbC5cblxuICAgIHZhciBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IGZhbHNlO1xuICAgIHZhciAkJHR5cGVvZk5leHRUeXBlID0gdHlwZW9mIG5leHRUeXBlID09PSAnb2JqZWN0JyAmJiBuZXh0VHlwZSAhPT0gbnVsbCA/IG5leHRUeXBlLiQkdHlwZW9mIDogbnVsbDtcblxuICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXh0VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIGlubmVyIHR5cGUgeWV0LlxuICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoYXQgdGhlIGxhenkgaW5uZXIgdHlwZSBpcyBzdGFibGUsXG4gICAgICAgICAgICAvLyBhbmQgc28gaXQgaXMgc3VmZmljaWVudCB0byBhdm9pZCByZWNvbmNpbGluZyBpdCBhd2F5LlxuICAgICAgICAgICAgLy8gV2UncmUgbm90IGdvaW5nIHRvIHVud3JhcCBvciBhY3R1YWxseSB1c2UgdGhlIG5ldyBsYXp5IHR5cGUuXG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IGlmIGl0IHdhcyBidXQgY2FuIG5vIGxvbmdlciBiZSBzaW1wbGUsXG4gICAgICAgICAgICAvLyB3ZSBzaG91bGRuJ3Qgc2V0IHRoaXMuXG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBDaGVjayBpZiBib3RoIHR5cGVzIGhhdmUgYSBmYW1pbHkgYW5kIGl0J3MgdGhlIHNhbWUgb25lLlxuXG5cbiAgICBpZiAobmVlZHNDb21wYXJlRmFtaWxpZXMpIHtcbiAgICAgIC8vIE5vdGU6IG1lbW8oKSBhbmQgZm9yd2FyZFJlZigpIHdlJ2xsIGNvbXBhcmUgb3V0ZXIgcmF0aGVyIHRoYW4gaW5uZXIgdHlwZS5cbiAgICAgIC8vIFRoaXMgbWVhbnMgYm90aCBvZiB0aGVtIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCB0byBwcmVzZXJ2ZSBzdGF0ZS5cbiAgICAgIC8vIElmIHdlIHVud3JhcHBlZCBhbmQgY29tcGFyZWQgdGhlIGlubmVyIHR5cGVzIGZvciB3cmFwcGVycyBpbnN0ZWFkLFxuICAgICAgLy8gdGhlbiB3ZSB3b3VsZCByaXNrIGZhbHNlbHkgc2F5aW5nIHR3byBzZXBhcmF0ZSBtZW1vKEZvbylcbiAgICAgIC8vIGNhbGxzIGFyZSBlcXVpdmFsZW50IGJlY2F1c2UgdGhleSB3cmFwIHRoZSBzYW1lIEZvbyBmdW5jdGlvbi5cbiAgICAgIHZhciBwcmV2RmFtaWx5ID0gcmVzb2x2ZUZhbWlseShwcmV2VHlwZSk7XG5cbiAgICAgIGlmIChwcmV2RmFtaWx5ICE9PSB1bmRlZmluZWQgJiYgcHJldkZhbWlseSA9PT0gcmVzb2x2ZUZhbWlseShuZXh0VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcikge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBXZWFrU2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgPT09IG51bGwpIHtcbiAgICAgIGZhaWxlZEJvdW5kYXJpZXMgPSBuZXcgV2Vha1NldCgpO1xuICAgIH1cblxuICAgIGZhaWxlZEJvdW5kYXJpZXMuYWRkKGZpYmVyKTtcbiAgfVxufVxudmFyIHNjaGVkdWxlUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCB1cGRhdGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzdGFsZUZhbWlsaWVzID0gdXBkYXRlLnN0YWxlRmFtaWxpZXMsXG4gICAgICAgIHVwZGF0ZWRGYW1pbGllcyA9IHVwZGF0ZS51cGRhdGVkRmFtaWxpZXM7XG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KHJvb3QuY3VycmVudCwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBzY2hlZHVsZVJvb3QgPSBmdW5jdGlvbiAocm9vdCwgZWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJvb3QuY29udGV4dCAhPT0gZW1wdHlDb250ZXh0T2JqZWN0KSB7XG4gICAgICAvLyBTdXBlciBlZGdlIGNhc2U6IHJvb3QgaGFzIGEgbGVnYWN5IF9yZW5kZXJTdWJ0cmVlIGNvbnRleHRcbiAgICAgIC8vIGJ1dCB3ZSBkb24ndCBrbm93IHRoZSBwYXJlbnRDb21wb25lbnQgc28gd2UgY2FuJ3QgcGFzcyBpdC5cbiAgICAgIC8vIEp1c3QgaWdub3JlLiBXZSdsbCBkZWxldGUgdGhpcyB3aXRoIF9yZW5kZXJTdWJ0cmVlIGNvZGUgcGF0aCBsYXRlci5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgZmx1c2hTeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCByb290LCBudWxsLCBudWxsKTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShmaWJlciwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlLFxuICAgICAgICBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICBzaWJsaW5nID0gZmliZXIuc2libGluZyxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcbiAgICB2YXIgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHJlc29sdmVGYW1pbHkgdG8gYmUgc2V0IGR1cmluZyBob3QgcmVsb2FkLicpO1xuICAgIH1cblxuICAgIHZhciBuZWVkc1JlbmRlciA9IGZhbHNlO1xuICAgIHZhciBuZWVkc1JlbW91bnQgPSBmYWxzZTtcblxuICAgIGlmIChjYW5kaWRhdGVUeXBlICE9PSBudWxsKSB7XG4gICAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseShjYW5kaWRhdGVUeXBlKTtcblxuICAgICAgaWYgKGZhbWlseSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChzdGFsZUZhbWlsaWVzLmhhcyhmYW1pbHkpKSB7XG4gICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1cGRhdGVkRmFtaWxpZXMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICBpZiAodGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmVlZHNSZW5kZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzICE9PSBudWxsKSB7XG4gICAgICBpZiAoZmFpbGVkQm91bmRhcmllcy5oYXMoZmliZXIpIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBmYWlsZWRCb3VuZGFyaWVzLmhhcyhhbHRlcm5hdGUpKSB7XG4gICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lZWRzUmVtb3VudCkge1xuICAgICAgZmliZXIuX2RlYnVnTmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW1vdW50IHx8IG5lZWRzUmVuZGVyKSB7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsICYmICFuZWVkc1JlbW91bnQpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoY2hpbGQsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfVxuXG4gICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoc2libGluZywgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCBmYW1pbGllcykge1xuICB7XG4gICAgdmFyIGhvc3RJbnN0YW5jZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHR5cGVzID0gbmV3IFNldChmYW1pbGllcy5tYXAoZnVuY3Rpb24gKGZhbWlseSkge1xuICAgICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICAgIH0pKTtcbiAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkocm9vdC5jdXJyZW50LCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgcmV0dXJuIGhvc3RJbnN0YW5jZXM7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShmaWJlciwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICBzaWJsaW5nID0gZmliZXIuc2libGluZyxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcbiAgICB2YXIgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBkaWRNYXRjaCA9IGZhbHNlO1xuXG4gICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT09IG51bGwpIHtcbiAgICAgIGlmICh0eXBlcy5oYXMoY2FuZGlkYXRlVHlwZSkpIHtcbiAgICAgICAgZGlkTWF0Y2ggPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaWRNYXRjaCkge1xuICAgICAgLy8gV2UgaGF2ZSBhIG1hdGNoLiBUaGlzIG9ubHkgZHJpbGxzIGRvd24gdG8gdGhlIGNsb3Nlc3QgaG9zdCBjb21wb25lbnRzLlxuICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIHNlYXJjaCBkZWVwZXIgYmVjYXVzZSBmb3IgdGhlIHB1cnBvc2Ugb2YgZ2l2aW5nXG4gICAgICAvLyB2aXN1YWwgZmVlZGJhY2ssIFwiZmxhc2hpbmdcIiBvdXRlcm1vc3QgcGFyZW50IHJlY3RhbmdsZXMgaXMgc3VmZmljaWVudC5cbiAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGVyZSdzIG5vIG1hdGNoLCBtYXliZSB0aGVyZSB3aWxsIGJlIG9uZSBmdXJ0aGVyIGRvd24gaW4gdGhlIGNoaWxkIHRyZWUuXG4gICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KGNoaWxkLCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShzaWJsaW5nLCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBmb3VuZEhvc3RJbnN0YW5jZXMgPSBmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpO1xuXG4gICAgaWYgKGZvdW5kSG9zdEluc3RhbmNlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55IGhvc3QgY2hpbGRyZW4sIGZhbGxiYWNrIHRvIGNsb3Nlc3QgaG9zdCBwYXJlbnQuXG5cblxuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc3dpdGNoIChub2RlLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byByZWFjaCByb290IGZpcnN0LicpO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcbiAgICB2YXIgZm91bmRIb3N0SW5zdGFuY2VzID0gZmFsc2U7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50KSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIG1hdGNoLlxuICAgICAgICBmb3VuZEhvc3RJbnN0YW5jZXMgPSB0cnVlO1xuICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZSk7IC8vIFRoZXJlIG1heSBzdGlsbCBiZSBtb3JlLCBzbyBrZWVwIHNlYXJjaGluZy5cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZpYmVyKSB7XG4gICAgICAgIHJldHVybiBmb3VuZEhvc3RJbnN0YW5jZXM7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBmaWJlcikge1xuICAgICAgICAgIHJldHVybiBmb3VuZEhvc3RJbnN0YW5jZXM7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgaGFzQmFkTWFwUG9seWZpbGw7XG5cbntcbiAgaGFzQmFkTWFwUG9seWZpbGwgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIHZhciBub25FeHRlbnNpYmxlT2JqZWN0ID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cblxuICAgIG5ldyBNYXAoW1tub25FeHRlbnNpYmxlT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW25vbkV4dGVuc2libGVPYmplY3RdKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAqL1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVE9ETzogQ29uc2lkZXIgd2FybmluZyBhYm91dCBiYWQgcG9seWZpbGxzXG4gICAgaGFzQmFkTWFwUG9seWZpbGwgPSB0cnVlO1xuICB9XG59XG5cbnZhciBkZWJ1Z0NvdW50ZXIgPSAxO1xuXG5mdW5jdGlvbiBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAvLyBJbnN0YW5jZVxuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5rZXkgPSBrZXk7XG4gIHRoaXMuZWxlbWVudFR5cGUgPSBudWxsO1xuICB0aGlzLnR5cGUgPSBudWxsO1xuICB0aGlzLnN0YXRlTm9kZSA9IG51bGw7IC8vIEZpYmVyXG5cbiAgdGhpcy5yZXR1cm4gPSBudWxsO1xuICB0aGlzLmNoaWxkID0gbnVsbDtcbiAgdGhpcy5zaWJsaW5nID0gbnVsbDtcbiAgdGhpcy5pbmRleCA9IDA7XG4gIHRoaXMucmVmID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7XG4gIHRoaXMubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gIHRoaXMudXBkYXRlUXVldWUgPSBudWxsO1xuICB0aGlzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB0aGlzLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gIHRoaXMubW9kZSA9IG1vZGU7IC8vIEVmZmVjdHNcblxuICB0aGlzLmZsYWdzID0gTm9GbGFncztcbiAgdGhpcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gIHRoaXMubGFzdEVmZmVjdCA9IG51bGw7XG4gIHRoaXMubGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmFsdGVybmF0ZSA9IG51bGw7XG5cbiAge1xuICAgIC8vIE5vdGU6IFRoZSBmb2xsb3dpbmcgaXMgZG9uZSB0byBhdm9pZCBhIHY4IHBlcmZvcm1hbmNlIGNsaWZmLlxuICAgIC8vXG4gICAgLy8gSW5pdGlhbGl6aW5nIHRoZSBmaWVsZHMgYmVsb3cgdG8gc21pcyBhbmQgbGF0ZXIgdXBkYXRpbmcgdGhlbSB3aXRoXG4gICAgLy8gZG91YmxlIHZhbHVlcyB3aWxsIGNhdXNlIEZpYmVycyB0byBlbmQgdXAgaGF2aW5nIHNlcGFyYXRlIHNoYXBlcy5cbiAgICAvLyBUaGlzIGJlaGF2aW9yL2J1ZyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggT2JqZWN0LnByZXZlbnRFeHRlbnNpb24oKS5cbiAgICAvLyBGb3J0dW5hdGVseSB0aGlzIG9ubHkgaW1wYWN0cyBERVYgYnVpbGRzLlxuICAgIC8vIFVuZm9ydHVuYXRlbHkgaXQgbWFrZXMgUmVhY3QgdW51c2FibHkgc2xvdyBmb3Igc29tZSBhcHBsaWNhdGlvbnMuXG4gICAgLy8gVG8gd29yayBhcm91bmQgdGhpcywgaW5pdGlhbGl6ZSB0aGUgZmllbGRzIGJlbG93IHdpdGggZG91Ymxlcy5cbiAgICAvL1xuICAgIC8vIExlYXJuIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTQzNjVcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD04NTM4XG4gICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IE51bWJlci5OYU47XG4gICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IE51bWJlci5OYU47XG4gICAgdGhpcy50cmVlQmFzZUR1cmF0aW9uID0gTnVtYmVyLk5hTjsgLy8gSXQncyBva2F5IHRvIHJlcGxhY2UgdGhlIGluaXRpYWwgZG91YmxlcyB3aXRoIHNtaXMgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXG4gICAgLy8gVGhpcyB3b24ndCB0cmlnZ2VyIHRoZSBwZXJmb3JtYW5jZSBjbGlmZiBtZW50aW9uZWQgYWJvdmUsXG4gICAgLy8gYW5kIGl0IHNpbXBsaWZpZXMgb3RoZXIgcHJvZmlsZXIgY29kZSAoaW5jbHVkaW5nIERldlRvb2xzKS5cblxuICAgIHRoaXMuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgIHRoaXMuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICB9XG5cbiAge1xuICAgIC8vIFRoaXMgaXNuJ3QgZGlyZWN0bHkgdXNlZCBidXQgaXMgaGFuZHkgZm9yIGRlYnVnZ2luZyBpbnRlcm5hbHM6XG4gICAgdGhpcy5fZGVidWdJRCA9IGRlYnVnQ291bnRlcisrO1xuICAgIHRoaXMuX2RlYnVnU291cmNlID0gbnVsbDtcbiAgICB0aGlzLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgICB0aGlzLl9kZWJ1Z05lZWRzUmVtb3VudCA9IGZhbHNlO1xuICAgIHRoaXMuX2RlYnVnSG9va1R5cGVzID0gbnVsbDtcblxuICAgIGlmICghaGFzQmFkTWFwUG9seWZpbGwgJiYgdHlwZW9mIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHRoaXMpO1xuICAgIH1cbiAgfVxufSAvLyBUaGlzIGlzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24sIHJhdGhlciB0aGFuIGEgUE9KTyBjb25zdHJ1Y3Rvciwgc3RpbGxcbi8vIHBsZWFzZSBlbnN1cmUgd2UgZG8gdGhlIGZvbGxvd2luZzpcbi8vIDEpIE5vYm9keSBzaG91bGQgYWRkIGFueSBpbnN0YW5jZSBtZXRob2RzIG9uIHRoaXMuIEluc3RhbmNlIG1ldGhvZHMgY2FuIGJlXG4vLyAgICBtb3JlIGRpZmZpY3VsdCB0byBwcmVkaWN0IHdoZW4gdGhleSBnZXQgb3B0aW1pemVkIGFuZCB0aGV5IGFyZSBhbG1vc3Rcbi8vICAgIG5ldmVyIGlubGluZWQgcHJvcGVybHkgaW4gc3RhdGljIGNvbXBpbGVycy5cbi8vIDIpIE5vYm9keSBzaG91bGQgcmVseSBvbiBgaW5zdGFuY2VvZiBGaWJlcmAgZm9yIHR5cGUgdGVzdGluZy4gV2Ugc2hvdWxkXG4vLyAgICBhbHdheXMga25vdyB3aGVuIGl0IGlzIGEgZmliZXIuXG4vLyAzKSBXZSBtaWdodCB3YW50IHRvIGV4cGVyaW1lbnQgd2l0aCB1c2luZyBudW1lcmljIGtleXMgc2luY2UgdGhleSBhcmUgZWFzaWVyXG4vLyAgICB0byBvcHRpbWl6ZSBpbiBhIG5vbi1KSVQgZW52aXJvbm1lbnQuXG4vLyA0KSBXZSBjYW4gZWFzaWx5IGdvIGZyb20gYSBjb25zdHJ1Y3RvciB0byBhIGNyZWF0ZUZpYmVyIG9iamVjdCBsaXRlcmFsIGlmIHRoYXRcbi8vICAgIGlzIGZhc3Rlci5cbi8vIDUpIEl0IHNob3VsZCBiZSBlYXN5IHRvIHBvcnQgdGhpcyB0byBhIEMgc3RydWN0IGFuZCBrZWVwIGEgQyBpbXBsZW1lbnRhdGlvblxuLy8gICAgY29tcGF0aWJsZS5cblxuXG52YXIgY3JlYXRlRmliZXIgPSBmdW5jdGlvbiAodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAvLyAkRmxvd0ZpeE1lOiB0aGUgc2hhcGVzIGFyZSBleGFjdCBoZXJlIGJ1dCBGbG93IGRvZXNuJ3QgbGlrZSBjb25zdHJ1Y3RvcnNcbiAgcmV0dXJuIG5ldyBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG59O1xuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QkMShDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZUZ1bmN0aW9uQ29tcG9uZW50KHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmICFzaG91bGRDb25zdHJ1Y3QkMSh0eXBlKSAmJiB0eXBlLmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUxhenlDb21wb25lbnRUYWcoQ29tcG9uZW50KSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHNob3VsZENvbnN0cnVjdCQxKENvbXBvbmVudCkgPyBDbGFzc0NvbXBvbmVudCA6IEZ1bmN0aW9uQ29tcG9uZW50O1xuICB9IGVsc2UgaWYgKENvbXBvbmVudCAhPT0gdW5kZWZpbmVkICYmIENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IENvbXBvbmVudC4kJHR5cGVvZjtcblxuICAgIGlmICgkJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSkge1xuICAgICAgcmV0dXJuIEZvcndhcmRSZWY7XG4gICAgfVxuXG4gICAgaWYgKCQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgIHJldHVybiBNZW1vQ29tcG9uZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBJbmRldGVybWluYXRlQ29tcG9uZW50O1xufSAvLyBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGFsdGVybmF0ZSBmaWJlciB0byBkbyB3b3JrIG9uLlxuXG5mdW5jdGlvbiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBwZW5kaW5nUHJvcHMpIHtcbiAgdmFyIHdvcmtJblByb2dyZXNzID0gY3VycmVudC5hbHRlcm5hdGU7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzID09PSBudWxsKSB7XG4gICAgLy8gV2UgdXNlIGEgZG91YmxlIGJ1ZmZlcmluZyBwb29saW5nIHRlY2huaXF1ZSBiZWNhdXNlIHdlIGtub3cgdGhhdCB3ZSdsbFxuICAgIC8vIG9ubHkgZXZlciBuZWVkIGF0IG1vc3QgdHdvIHZlcnNpb25zIG9mIGEgdHJlZS4gV2UgcG9vbCB0aGUgXCJvdGhlclwiIHVudXNlZFxuICAgIC8vIG5vZGUgdGhhdCB3ZSdyZSBmcmVlIHRvIHJldXNlLiBUaGlzIGlzIGxhemlseSBjcmVhdGVkIHRvIGF2b2lkIGFsbG9jYXRpbmdcbiAgICAvLyBleHRyYSBvYmplY3RzIGZvciB0aGluZ3MgdGhhdCBhcmUgbmV2ZXIgdXBkYXRlZC4gSXQgYWxzbyBhbGxvdyB1cyB0b1xuICAgIC8vIHJlY2xhaW0gdGhlIGV4dHJhIG1lbW9yeSBpZiBuZWVkZWQuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVGaWJlcihjdXJyZW50LnRhZywgcGVuZGluZ1Byb3BzLCBjdXJyZW50LmtleSwgY3VycmVudC5tb2RlKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9IGN1cnJlbnQuZWxlbWVudFR5cGU7XG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50LnN0YXRlTm9kZTtcblxuICAgIHtcbiAgICAgIC8vIERFVi1vbmx5IGZpZWxkc1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSUQgPSBjdXJyZW50Ll9kZWJ1Z0lEO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnU291cmNlID0gY3VycmVudC5fZGVidWdTb3VyY2U7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcztcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBjdXJyZW50O1xuICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gd29ya0luUHJvZ3Jlc3M7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzOyAvLyBOZWVkZWQgYmVjYXVzZSBCbG9ja3Mgc3RvcmUgZGF0YSBvbiB0eXBlLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTsgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGFsdGVybmF0ZS5cbiAgICAvLyBSZXNldCB0aGUgZWZmZWN0IHRhZy5cblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gTm9GbGFnczsgLy8gVGhlIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICAgIHdvcmtJblByb2dyZXNzLm5leHRFZmZlY3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcblxuICAgIHtcbiAgICAgIC8vIFdlIGludGVudGlvbmFsbHkgcmVzZXQsIHJhdGhlciB0aGFuIGNvcHksIGFjdHVhbER1cmF0aW9uICYgYWN0dWFsU3RhcnRUaW1lLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aW1lIGZyb20gZW5kbGVzc2x5IGFjY3VtdWxhdGluZyBpbiBuZXcgY29tbWl0cy5cbiAgICAgIC8vIFRoaXMgaGFzIHRoZSBkb3duc2lkZSBvZiByZXNldHRpbmcgdmFsdWVzIGZvciBkaWZmZXJlbnQgcHJpb3JpdHkgcmVuZGVycyxcbiAgICAgIC8vIEJ1dCB3b3JrcyBmb3IgeWllbGRpbmcgKHRoZSBjb21tb24gY2FzZSkgYW5kIHNob3VsZCBzdXBwb3J0IHJlc3VtaW5nLlxuICAgICAgd29ya0luUHJvZ3Jlc3MuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcztcbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gQ2xvbmUgdGhlIGRlcGVuZGVuY2llcyBvYmplY3QuIFRoaXMgaXMgbXV0YXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgc29cbiAgLy8gaXQgY2Fubm90IGJlIHNoYXJlZCB3aXRoIHRoZSBjdXJyZW50IGZpYmVyLlxuXG4gIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMgPT09IG51bGwgPyBudWxsIDoge1xuICAgIGxhbmVzOiBjdXJyZW50RGVwZW5kZW5jaWVzLmxhbmVzLFxuICAgIGZpcnN0Q29udGV4dDogY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHRcbiAgfTsgLy8gVGhlc2Ugd2lsbCBiZSBvdmVycmlkZGVuIGR1cmluZyB0aGUgcGFyZW50J3MgcmVjb25jaWxpYXRpb25cblxuICB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gY3VycmVudC5zaWJsaW5nO1xuICB3b3JrSW5Qcm9ncmVzcy5pbmRleCA9IGN1cnJlbnQuaW5kZXg7XG4gIHdvcmtJblByb2dyZXNzLnJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gIH1cblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ID0gY3VycmVudC5fZGVidWdOZWVkc1JlbW91bnQ7XG5cbiAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xufSAvLyBVc2VkIHRvIHJldXNlIGEgRmliZXIgZm9yIGEgc2Vjb25kIHBhc3MuXG5cbmZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3Mod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgcmVzZXRzIHRoZSBGaWJlciB0byB3aGF0IGNyZWF0ZUZpYmVyIG9yIGNyZWF0ZVdvcmtJblByb2dyZXNzIHdvdWxkXG4gIC8vIGhhdmUgc2V0IHRoZSB2YWx1ZXMgdG8gYmVmb3JlIGR1cmluZyB0aGUgZmlyc3QgcGFzcy4gSWRlYWxseSB0aGlzIHdvdWxkbid0XG4gIC8vIGJlIG5lY2Vzc2FyeSBidXQgdW5mb3J0dW5hdGVseSBtYW55IGNvZGUgcGF0aHMgcmVhZHMgZnJvbSB0aGUgd29ya0luUHJvZ3Jlc3NcbiAgLy8gd2hlbiB0aGV5IHNob3VsZCBiZSByZWFkaW5nIGZyb20gY3VycmVudCBhbmQgd3JpdGluZyB0byB3b3JrSW5Qcm9ncmVzcy5cbiAgLy8gV2UgYXNzdW1lIHBlbmRpbmdQcm9wcywgaW5kZXgsIGtleSwgcmVmLCByZXR1cm4gYXJlIHN0aWxsIHVudG91Y2hlZCB0b1xuICAvLyBhdm9pZCBkb2luZyBhbm90aGVyIHJlY29uY2lsaWF0aW9uLlxuICAvLyBSZXNldCB0aGUgZWZmZWN0IHRhZyBidXQga2VlcCBhbnkgUGxhY2VtZW50IHRhZ3MsIHNpbmNlIHRoYXQncyBzb21ldGhpbmdcbiAgLy8gdGhhdCBjaGlsZCBmaWJlciBpcyBzZXR0aW5nLCBub3QgdGhlIHJlY29uY2lsaWF0aW9uLlxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSBQbGFjZW1lbnQ7IC8vIFRoZSBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgd29ya0luUHJvZ3Jlc3MubmV4dEVmZmVjdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG4gIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gUmVzZXQgdG8gY3JlYXRlRmliZXIncyBpbml0aWFsIHZhbHVlcy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgcmVzZXQgdGhlIGFjdHVhbFRpbWUgY291bnRzLiBJdCdzIHVzZWZ1bCB0byBhY2N1bXVsYXRlXG4gICAgICAvLyBhY3R1YWwgdGltZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyIHBhc3Nlcy5cbiAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFJlc2V0IHRvIHRoZSBjbG9uZWQgdmFsdWVzIHRoYXQgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGQndmUuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7IC8vIE5lZWRlZCBiZWNhdXNlIEJsb2NrcyBzdG9yZSBkYXRhIG9uIHR5cGUuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAgIC8vIGl0IGNhbm5vdCBiZSBzaGFyZWQgd2l0aCB0aGUgY3VycmVudCBmaWJlci5cblxuICAgIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgICBsYW5lczogY3VycmVudERlcGVuZGVuY2llcy5sYW5lcyxcbiAgICAgIGZpcnN0Q29udGV4dDogY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHRcbiAgICB9O1xuXG4gICAge1xuICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgcmVzZXQgdGhlIGFjdHVhbFRpbWUgY291bnRzLiBJdCdzIHVzZWZ1bCB0byBhY2N1bXVsYXRlXG4gICAgICAvLyBhY3R1YWwgdGltZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyIHBhc3Nlcy5cbiAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUhvc3RSb290RmliZXIodGFnKSB7XG4gIHZhciBtb2RlO1xuXG4gIGlmICh0YWcgPT09IENvbmN1cnJlbnRSb290KSB7XG4gICAgbW9kZSA9IENvbmN1cnJlbnRNb2RlIHwgQmxvY2tpbmdNb2RlIHwgU3RyaWN0TW9kZTtcbiAgfSBlbHNlIGlmICh0YWcgPT09IEJsb2NraW5nUm9vdCkge1xuICAgIG1vZGUgPSBCbG9ja2luZ01vZGUgfCBTdHJpY3RNb2RlO1xuICB9IGVsc2Uge1xuICAgIG1vZGUgPSBOb01vZGU7XG4gIH1cblxuICBpZiAoIGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgLy8gQWx3YXlzIGNvbGxlY3QgcHJvZmlsZSB0aW1pbmdzIHdoZW4gRGV2VG9vbHMgYXJlIHByZXNlbnQuXG4gICAgLy8gVGhpcyBlbmFibGVzIERldlRvb2xzIHRvIHN0YXJ0IGNhcHR1cmluZyB0aW1pbmcgYXQgYW55IHBvaW50XHUyMDEzXG4gICAgLy8gV2l0aG91dCBzb21lIG5vZGVzIGluIHRoZSB0cmVlIGhhdmluZyBlbXB0eSBiYXNlIHRpbWVzLlxuICAgIG1vZGUgfD0gUHJvZmlsZU1vZGU7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlRmliZXIoSG9zdFJvb3QsIG51bGwsIG51bGwsIG1vZGUpO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHR5cGUsIC8vIFJlYWN0JEVsZW1lbnRUeXBlXG5rZXksIHBlbmRpbmdQcm9wcywgb3duZXIsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBmaWJlclRhZyA9IEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7IC8vIFRoZSByZXNvbHZlZCB0eXBlIGlzIHNldCBpZiB3ZSBrbm93IHdoYXQgdGhlIGZpbmFsIHR5cGUgd2lsbCBiZS4gSS5lLiBpdCdzIG5vdCBsYXp5LlxuXG4gIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChzaG91bGRDb25zdHJ1Y3QkMSh0eXBlKSkge1xuICAgICAgZmliZXJUYWcgPSBDbGFzc0NvbXBvbmVudDtcblxuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgZmliZXJUYWcgPSBIb3N0Q29tcG9uZW50O1xuICB9IGVsc2Uge1xuICAgIGdldFRhZzogc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChwZW5kaW5nUHJvcHMuY2hpbGRyZW4sIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFOlxuICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgIG1vZGUgfD0gRGVidWdUcmFjaW5nTW9kZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgZmliZXJUYWcgPSBNb2RlO1xuICAgICAgICBtb2RlIHw9IFN0cmljdE1vZGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21Qcm9maWxlcihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZShwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlTGlzdChwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX09GRlNDUkVFTl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tTGVnYWN5SGlkZGVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU0NPUEVfVFlQRTpcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBDb250ZXh0UHJvdmlkZXI7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBjb25zdW1lclxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQ29udGV4dENvbnN1bWVyO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBGb3J3YXJkUmVmO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBNZW1vQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IExhenlDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQmxvY2s7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBcIiArICduYW1lZCBpbXBvcnRzLic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvd25lck5hbWUgPSBvd25lciA/IGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSkgOiBudWxsO1xuXG4gICAgICAgICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkOiBleHBlY3RlZCBhIHN0cmluZyAoZm9yIGJ1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgY29tcG9uZW50cykgYnV0IGdvdDogXCIgKyAodHlwZSA9PSBudWxsID8gdHlwZSA6IHR5cGVvZiB0eXBlKSArIFwiLlwiICsgaW5mbyApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKGZpYmVyVGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gdHlwZTtcbiAgZmliZXIudHlwZSA9IHJlc29sdmVkVHlwZTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcblxuICB7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBvd25lcjtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIG93bmVyID0gbnVsbDtcblxuICB7XG4gICAgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgfVxuXG4gIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciBwZW5kaW5nUHJvcHMgPSBlbGVtZW50LnByb3BzO1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHModHlwZSwga2V5LCBwZW5kaW5nUHJvcHMsIG93bmVyLCBtb2RlLCBsYW5lcyk7XG5cbiAge1xuICAgIGZpYmVyLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZWxlbWVudHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoRnJhZ21lbnQsIGVsZW1lbnRzLCBrZXksIG1vZGUpO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBwZW5kaW5nUHJvcHMuaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcignUHJvZmlsZXIgbXVzdCBzcGVjaWZ5IGFuIFwiaWRcIiBhcyBhIHByb3AnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihQcm9maWxlciwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUgfCBQcm9maWxlTW9kZSk7IC8vIFRPRE86IFRoZSBQcm9maWxlciBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIGZpYmVyLnR5cGUgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuXG4gIHtcbiAgICBmaWJlci5zdGF0ZU5vZGUgPSB7XG4gICAgICBlZmZlY3REdXJhdGlvbjogMCxcbiAgICAgIHBhc3NpdmVFZmZlY3REdXJhdGlvbjogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihTdXNwZW5zZUNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpOyAvLyBUT0RPOiBUaGUgU3VzcGVuc2VDb21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAgZmliZXIudHlwZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihTdXNwZW5zZUxpc3RDb21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcblxuICB7XG4gICAgLy8gVE9ETzogVGhlIFN1c3BlbnNlTGlzdENvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAgIC8vIGluc3RlYWQuXG4gICAgZmliZXIudHlwZSA9IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKE9mZnNjcmVlbkNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpOyAvLyBUT0RPOiBUaGUgT2Zmc2NyZWVuQ29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAvLyBpbnN0ZWFkLlxuXG4gIHtcbiAgICBmaWJlci50eXBlID0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX09GRlNDUkVFTl9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21MZWdhY3lIaWRkZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKExlZ2FjeUhpZGRlbkNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpOyAvLyBUT0RPOiBUaGUgTGVnYWN5SGlkZGVuIGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAvLyBpbnN0ZWFkLlxuXG4gIHtcbiAgICBmaWJlci50eXBlID0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVRleHQoY29udGVudCwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFRleHQsIGNvbnRlbnQsIG51bGwsIG1vZGUpO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Ib3N0SW5zdGFuY2VGb3JEZWxldGlvbigpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdENvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTsgLy8gVE9ETzogVGhlc2Ugc2hvdWxkIG5vdCBuZWVkIGEgdHlwZS5cblxuICBmaWJlci5lbGVtZW50VHlwZSA9ICdERUxFVEVEJztcbiAgZmliZXIudHlwZSA9ICdERUxFVEVEJztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIHBlbmRpbmdQcm9wcyA9IHBvcnRhbC5jaGlsZHJlbiAhPT0gbnVsbCA/IHBvcnRhbC5jaGlsZHJlbiA6IFtdO1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0UG9ydGFsLCBwZW5kaW5nUHJvcHMsIHBvcnRhbC5rZXksIG1vZGUpO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICBmaWJlci5zdGF0ZU5vZGUgPSB7XG4gICAgY29udGFpbmVySW5mbzogcG9ydGFsLmNvbnRhaW5lckluZm8sXG4gICAgcGVuZGluZ0NoaWxkcmVuOiBudWxsLFxuICAgIC8vIFVzZWQgYnkgcGVyc2lzdGVudCB1cGRhdGVzXG4gICAgaW1wbGVtZW50YXRpb246IHBvcnRhbC5pbXBsZW1lbnRhdGlvblxuICB9O1xuICByZXR1cm4gZmliZXI7XG59IC8vIFVzZWQgZm9yIHN0YXNoaW5nIFdJUCBwcm9wZXJ0aWVzIHRvIHJlcGxheSBmYWlsZWQgd29yayBpbiBERVYuXG5cbmZ1bmN0aW9uIGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKHRhcmdldCwgc291cmNlKSB7XG4gIGlmICh0YXJnZXQgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIEZpYmVyJ3MgaW5pdGlhbCBwcm9wZXJ0aWVzIHdpbGwgYWx3YXlzIGJlIG92ZXJ3cml0dGVuLlxuICAgIC8vIFdlIG9ubHkgdXNlIGEgRmliZXIgdG8gZW5zdXJlIHRoZSBzYW1lIGhpZGRlbiBjbGFzcyBzbyBERVYgaXNuJ3Qgc2xvdy5cbiAgICB0YXJnZXQgPSBjcmVhdGVGaWJlcihJbmRldGVybWluYXRlQ29tcG9uZW50LCBudWxsLCBudWxsLCBOb01vZGUpO1xuICB9IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSB3cml0dGVuIGFzIGEgbGlzdCBvZiBhbGwgcHJvcGVydGllcy5cbiAgLy8gV2UgdHJpZWQgdG8gdXNlIE9iamVjdC5hc3NpZ24oKSBpbnN0ZWFkIGJ1dCB0aGlzIGlzIGNhbGxlZCBpblxuICAvLyB0aGUgaG90dGVzdCBwYXRoLCBhbmQgT2JqZWN0LmFzc2lnbigpIHdhcyB0b28gc2xvdzpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjUwMlxuICAvLyBUaGlzIGNvZGUgaXMgREVWLW9ubHkgc28gc2l6ZSBpcyBub3QgYSBjb25jZXJuLlxuXG5cbiAgdGFyZ2V0LnRhZyA9IHNvdXJjZS50YWc7XG4gIHRhcmdldC5rZXkgPSBzb3VyY2Uua2V5O1xuICB0YXJnZXQuZWxlbWVudFR5cGUgPSBzb3VyY2UuZWxlbWVudFR5cGU7XG4gIHRhcmdldC50eXBlID0gc291cmNlLnR5cGU7XG4gIHRhcmdldC5zdGF0ZU5vZGUgPSBzb3VyY2Uuc3RhdGVOb2RlO1xuICB0YXJnZXQucmV0dXJuID0gc291cmNlLnJldHVybjtcbiAgdGFyZ2V0LmNoaWxkID0gc291cmNlLmNoaWxkO1xuICB0YXJnZXQuc2libGluZyA9IHNvdXJjZS5zaWJsaW5nO1xuICB0YXJnZXQuaW5kZXggPSBzb3VyY2UuaW5kZXg7XG4gIHRhcmdldC5yZWYgPSBzb3VyY2UucmVmO1xuICB0YXJnZXQucGVuZGluZ1Byb3BzID0gc291cmNlLnBlbmRpbmdQcm9wcztcbiAgdGFyZ2V0Lm1lbW9pemVkUHJvcHMgPSBzb3VyY2UubWVtb2l6ZWRQcm9wcztcbiAgdGFyZ2V0LnVwZGF0ZVF1ZXVlID0gc291cmNlLnVwZGF0ZVF1ZXVlO1xuICB0YXJnZXQubWVtb2l6ZWRTdGF0ZSA9IHNvdXJjZS5tZW1vaXplZFN0YXRlO1xuICB0YXJnZXQuZGVwZW5kZW5jaWVzID0gc291cmNlLmRlcGVuZGVuY2llcztcbiAgdGFyZ2V0Lm1vZGUgPSBzb3VyY2UubW9kZTtcbiAgdGFyZ2V0LmZsYWdzID0gc291cmNlLmZsYWdzO1xuICB0YXJnZXQubmV4dEVmZmVjdCA9IHNvdXJjZS5uZXh0RWZmZWN0O1xuICB0YXJnZXQuZmlyc3RFZmZlY3QgPSBzb3VyY2UuZmlyc3RFZmZlY3Q7XG4gIHRhcmdldC5sYXN0RWZmZWN0ID0gc291cmNlLmxhc3RFZmZlY3Q7XG4gIHRhcmdldC5sYW5lcyA9IHNvdXJjZS5sYW5lcztcbiAgdGFyZ2V0LmNoaWxkTGFuZXMgPSBzb3VyY2UuY2hpbGRMYW5lcztcbiAgdGFyZ2V0LmFsdGVybmF0ZSA9IHNvdXJjZS5hbHRlcm5hdGU7XG5cbiAge1xuICAgIHRhcmdldC5hY3R1YWxEdXJhdGlvbiA9IHNvdXJjZS5hY3R1YWxEdXJhdGlvbjtcbiAgICB0YXJnZXQuYWN0dWFsU3RhcnRUaW1lID0gc291cmNlLmFjdHVhbFN0YXJ0VGltZTtcbiAgICB0YXJnZXQuc2VsZkJhc2VEdXJhdGlvbiA9IHNvdXJjZS5zZWxmQmFzZUR1cmF0aW9uO1xuICAgIHRhcmdldC50cmVlQmFzZUR1cmF0aW9uID0gc291cmNlLnRyZWVCYXNlRHVyYXRpb247XG4gIH1cblxuICB0YXJnZXQuX2RlYnVnSUQgPSBzb3VyY2UuX2RlYnVnSUQ7XG4gIHRhcmdldC5fZGVidWdTb3VyY2UgPSBzb3VyY2UuX2RlYnVnU291cmNlO1xuICB0YXJnZXQuX2RlYnVnT3duZXIgPSBzb3VyY2UuX2RlYnVnT3duZXI7XG4gIHRhcmdldC5fZGVidWdOZWVkc1JlbW91bnQgPSBzb3VyY2UuX2RlYnVnTmVlZHNSZW1vdW50O1xuICB0YXJnZXQuX2RlYnVnSG9va1R5cGVzID0gc291cmNlLl9kZWJ1Z0hvb2tUeXBlcztcbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gRmliZXJSb290Tm9kZShjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpIHtcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMuY29udGFpbmVySW5mbyA9IGNvbnRhaW5lckluZm87XG4gIHRoaXMucGVuZGluZ0NoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5jdXJyZW50ID0gbnVsbDtcbiAgdGhpcy5waW5nQ2FjaGUgPSBudWxsO1xuICB0aGlzLmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHRoaXMudGltZW91dEhhbmRsZSA9IG5vVGltZW91dDtcbiAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IG51bGw7XG4gIHRoaXMuaHlkcmF0ZSA9IGh5ZHJhdGU7XG4gIHRoaXMuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgdGhpcy5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gIHRoaXMuZXZlbnRUaW1lcyA9IGNyZWF0ZUxhbmVNYXAoTm9MYW5lcyk7XG4gIHRoaXMuZXhwaXJhdGlvblRpbWVzID0gY3JlYXRlTGFuZU1hcChOb1RpbWVzdGFtcCk7XG4gIHRoaXMucGVuZGluZ0xhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5zdXNwZW5kZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMucGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmV4cGlyZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMubXV0YWJsZVJlYWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZW50YW5nbGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmVudGFuZ2xlbWVudHMgPSBjcmVhdGVMYW5lTWFwKE5vTGFuZXMpO1xuXG4gIHtcbiAgICB0aGlzLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPSBudWxsO1xuICB9XG5cbiAge1xuICAgIHRoaXMuaW50ZXJhY3Rpb25UaHJlYWRJRCA9IHRyYWNpbmcudW5zdGFibGVfZ2V0VGhyZWFkSUQoKTtcbiAgICB0aGlzLm1lbW9pemVkSW50ZXJhY3Rpb25zID0gbmV3IFNldCgpO1xuICAgIHRoaXMucGVuZGluZ0ludGVyYWN0aW9uTWFwID0gbmV3IE1hcCgpO1xuICB9XG5cbiAge1xuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEJsb2NraW5nUm9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVCbG9ja2luZ1Jvb3QoKSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIENvbmN1cnJlbnRSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZVJvb3QoKSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIExlZ2FjeVJvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlTGVnYWN5Um9vdCgpJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGh5ZHJhdGlvbkNhbGxiYWNrcykge1xuICB2YXIgcm9vdCA9IG5ldyBGaWJlclJvb3ROb2RlKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSk7XG4gIC8vIHN0YXRlTm9kZSBpcyBhbnkuXG5cblxuICB2YXIgdW5pbml0aWFsaXplZEZpYmVyID0gY3JlYXRlSG9zdFJvb3RGaWJlcih0YWcpO1xuICByb290LmN1cnJlbnQgPSB1bmluaXRpYWxpemVkRmliZXI7XG4gIHVuaW5pdGlhbGl6ZWRGaWJlci5zdGF0ZU5vZGUgPSByb290O1xuICBpbml0aWFsaXplVXBkYXRlUXVldWUodW5pbml0aWFsaXplZEZpYmVyKTtcbiAgcmV0dXJuIHJvb3Q7XG59XG5cbi8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2ZXJzaW9uIHVzZWQgZm9yIHNlcnZlciByZW5kZXJpbmcgbWF0Y2hlcyB0aGUgb25lXG4vLyB0aGF0IGlzIGV2ZW50dWFsbHkgcmVhZCBkdXJpbmcgaHlkcmF0aW9uLlxuLy8gSWYgdGhleSBkb24ndCBtYXRjaCB0aGVyZSdzIGEgcG90ZW50aWFsIHRlYXIgYW5kIGEgZnVsbCBkZW9wdCByZW5kZXIgaXMgcmVxdWlyZWQuXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTXV0YWJsZVNvdXJjZUZvckh5ZHJhdGlvbihyb290LCBtdXRhYmxlU291cmNlKSB7XG4gIHZhciBnZXRWZXJzaW9uID0gbXV0YWJsZVNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKG11dGFibGVTb3VyY2UuX3NvdXJjZSk7IC8vIFRPRE8gQ2xlYXIgdGhpcyBkYXRhIG9uY2UgYWxsIHBlbmRpbmcgaHlkcmF0aW9uIHdvcmsgaXMgZmluaXNoZWQuXG4gIC8vIFJldGFpbmluZyBpdCBmb3JldmVyIG1heSBpbnRlcmZlcmUgd2l0aCBHQy5cblxuICBpZiAocm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID09IG51bGwpIHtcbiAgICByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPSBbbXV0YWJsZVNvdXJjZSwgdmVyc2lvbl07XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLnB1c2gobXV0YWJsZVNvdXJjZSwgdmVyc2lvbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXJJbmZvLCAvLyBUT0RPOiBmaWd1cmUgb3V0IHRoZSBBUEkgZm9yIGNyb3NzLXJlbmRlcmVyIGltcGxlbWVudGF0aW9uLlxuaW1wbGVtZW50YXRpb24pIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcbiAgcmV0dXJuIHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvdyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgUG9ydGFsXG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BPUlRBTF9UWVBFLFxuICAgIGtleToga2V5ID09IG51bGwgPyBudWxsIDogJycgKyBrZXksXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lckluZm86IGNvbnRhaW5lckluZm8sXG4gICAgaW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uXG4gIH07XG59XG5cbnZhciBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzO1xudmFyIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlO1xuXG57XG4gIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGUgPSB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KSB7XG4gIGlmICghcGFyZW50Q29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfVxuXG4gIHZhciBmaWJlciA9IGdldChwYXJlbnRDb21wb25lbnQpO1xuICB2YXIgcGFyZW50Q29udGV4dCA9IGZpbmRDdXJyZW50VW5tYXNrZWRDb250ZXh0KGZpYmVyKTtcblxuICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgIHZhciBDb21wb25lbnQgPSBmaWJlci50eXBlO1xuXG4gICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCBDb21wb25lbnQsIHBhcmVudENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnRDb250ZXh0O1xufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlV2l0aFdhcm5pbmcoY29tcG9uZW50LCBtZXRob2ROYW1lKSB7XG4gIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoY29tcG9uZW50KTtcblxuICAgIGlmIChmaWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkFyZ3VtZW50IGFwcGVhcnMgdG8gbm90IGJlIGEgUmVhY3RDb21wb25lbnQuIEtleXM6IFwiICsgT2JqZWN0LmtleXMoY29tcG9uZW50KSApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG5cbiAgICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaG9zdEZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoaG9zdEZpYmVyKTtcblxuICAgICAgICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgZXJyb3IoJyVzIGlzIGRlcHJlY2F0ZWQgaW4gU3RyaWN0TW9kZS4gJyArICclcyB3YXMgcGFzc2VkIGFuIGluc3RhbmNlIG9mICVzIHdoaWNoIGlzIGluc2lkZSBTdHJpY3RNb2RlLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1maW5kLW5vZGUnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJyVzIGlzIGRlcHJlY2F0ZWQgaW4gU3RyaWN0TW9kZS4gJyArICclcyB3YXMgcGFzc2VkIGFuIGluc3RhbmNlIG9mICVzIHdoaWNoIHJlbmRlcnMgU3RyaWN0TW9kZSBjaGlsZHJlbi4gJyArICdJbnN0ZWFkLCBhZGQgYSByZWYgZGlyZWN0bHkgdG8gdGhlIGVsZW1lbnQgeW91IHdhbnQgdG8gcmVmZXJlbmNlLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtZmluZC1ub2RlJywgbWV0aG9kTmFtZSwgbWV0aG9kTmFtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIC8vIElkZWFsbHkgdGhpcyBzaG91bGQgcmVzZXQgdG8gcHJldmlvdXMgYnV0IHRoaXMgc2hvdWxkbid0IGJlIGNhbGxlZCBpblxuICAgICAgICAgIC8vIHJlbmRlciBhbmQgdGhlcmUncyBhbm90aGVyIHdhcm5pbmcgZm9yIHRoYXQgYW55d2F5LlxuICAgICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgICBzZXRDdXJyZW50RmliZXIocHJldmlvdXNGaWJlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSwgaHlkcmF0aW9uQ2FsbGJhY2tzKSB7XG4gIHJldHVybiBjcmVhdGVGaWJlclJvb3QoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCBjb250YWluZXIsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spIHtcbiAge1xuICAgIG9uU2NoZWR1bGVSb290KGNvbnRhaW5lciwgZWxlbWVudCk7XG4gIH1cblxuICB2YXIgY3VycmVudCQxID0gY29udGFpbmVyLmN1cnJlbnQ7XG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG5cbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZVbm1vY2tlZFNjaGVkdWxlcihjdXJyZW50JDEpO1xuICAgICAgd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGN1cnJlbnQkMSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShjdXJyZW50JDEpO1xuXG4gIHZhciBjb250ZXh0ID0gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KTtcblxuICBpZiAoY29udGFpbmVyLmNvbnRleHQgPT09IG51bGwpIHtcbiAgICBjb250YWluZXIuY29udGV4dCA9IGNvbnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLnBlbmRpbmdDb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIHtcbiAgICBpZiAoaXNSZW5kZXJpbmcgJiYgY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcykge1xuICAgICAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IHRydWU7XG5cbiAgICAgIGVycm9yKCdSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZTsgJyArICd0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tIHJlbmRlciBpcyBub3QgYWxsb3dlZC4gJyArICdJZiBuZWNlc3NhcnksIHRyaWdnZXIgbmVzdGVkIHVwZGF0ZXMgaW4gY29tcG9uZW50RGlkVXBkYXRlLlxcblxcbicgKyAnQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgJXMuJywgZ2V0Q29tcG9uZW50TmFtZShjdXJyZW50LnR5cGUpIHx8ICdVbmtub3duJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB1cGRhdGUucGF5bG9hZCA9IHtcbiAgICBlbGVtZW50OiBlbGVtZW50XG4gIH07XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaztcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuXG4gIGVucXVldWVVcGRhdGUoY3VycmVudCQxLCB1cGRhdGUpO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoY3VycmVudCQxLCBsYW5lLCBldmVudFRpbWUpO1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGdldFB1YmxpY1Jvb3RJbnN0YW5jZShjb250YWluZXIpIHtcbiAgdmFyIGNvbnRhaW5lckZpYmVyID0gY29udGFpbmVyLmN1cnJlbnQ7XG5cbiAgaWYgKCFjb250YWluZXJGaWJlci5jaGlsZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoIChjb250YWluZXJGaWJlci5jaGlsZC50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZ2V0UHVibGljSW5zdGFuY2UoY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsICYmIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgIHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lID0gaGlnaGVyUHJpb3JpdHlMYW5lKHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lLCByZXRyeUxhbmUpO1xuICB9XG59IC8vIEluY3JlYXNlcyB0aGUgcHJpb3JpdHkgb2YgdGhlbm5hYmxlcyB3aGVuIHRoZXkgcmVzb2x2ZSB3aXRoaW4gdGhpcyBib3VuZGFyeS5cblxuXG5mdW5jdGlvbiBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgcmV0cnlMYW5lKSB7XG4gIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUpIHtcbiAgICBtYXJrUmV0cnlMYW5lSW1wbChhbHRlcm5hdGUsIHJldHJ5TGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbiQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBhbmQgdGhleSBzaG91bGQgbm90IHN1c3BlbmQgb24gSS9PLFxuICAgIC8vIHNpbmNlIHlvdSBoYXZlIHRvIHdyYXAgYW55dGhpbmcgdGhhdCBtaWdodCBzdXNwZW5kIGluXG4gICAgLy8gU3VzcGVuc2UuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBhbmQgdGhleSBzaG91bGQgbm90IHN1c3BlbmQgb24gSS9PLFxuICAgIC8vIHNpbmNlIHlvdSBoYXZlIHRvIHdyYXAgYW55dGhpbmcgdGhhdCBtaWdodCBzdXNwZW5kIGluXG4gICAgLy8gU3VzcGVuc2UuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBvdGhlciB0aGFuIHN5bmNocm9ub3VzbHkgZmx1c2ggaXQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gcnVuV2l0aFByaW9yaXR5JDIocHJpb3JpdHksIGZuKSB7XG5cbiAgdHJ5IHtcbiAgICBzZXRDdXJyZW50VXBkYXRlTGFuZVByaW9yaXR5KHByaW9yaXR5KTtcbiAgICByZXR1cm4gZm4oKTtcbiAgfSBmaW5hbGx5IHtcbiAgfVxufVxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMoZmliZXIpIHtcbiAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyV2l0aE5vUG9ydGFscyhmaWJlcik7XG5cbiAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGhvc3RGaWJlci50YWcgPT09IEZ1bmRhbWVudGFsQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGUuaW5zdGFuY2U7XG4gIH1cblxuICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbn1cblxudmFyIHNob3VsZFN1c3BlbmRJbXBsID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZFN1c3BlbmQoZmliZXIpIHtcbiAgcmV0dXJuIHNob3VsZFN1c3BlbmRJbXBsKGZpYmVyKTtcbn1cbnZhciBvdmVycmlkZUhvb2tTdGF0ZSA9IG51bGw7XG52YXIgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHMgPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IG51bGw7XG52YXIgc2NoZWR1bGVVcGRhdGUgPSBudWxsO1xudmFyIHNldFN1c3BlbnNlSGFuZGxlciA9IG51bGw7XG5cbntcbiAgdmFyIGNvcHlXaXRoRGVsZXRlSW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGluZGV4KSB7XG4gICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdO1xuICAgIHZhciB1cGRhdGVkID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfYXNzaWduKHt9LCBvYmopO1xuXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gcGF0aC5sZW5ndGgpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICAgIHVwZGF0ZWQuc3BsaWNlKGtleSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtrZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9IC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhEZWxldGVJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEpO1xuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aERlbGV0ZSA9IGZ1bmN0aW9uIChvYmosIHBhdGgpIHtcbiAgICByZXR1cm4gY29weVdpdGhEZWxldGVJbXBsKG9iaiwgcGF0aCwgMCk7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoUmVuYW1lSW1wbCA9IGZ1bmN0aW9uIChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4KSB7XG4gICAgdmFyIG9sZEtleSA9IG9sZFBhdGhbaW5kZXhdO1xuICAgIHZhciB1cGRhdGVkID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfYXNzaWduKHt9LCBvYmopO1xuXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gb2xkUGF0aC5sZW5ndGgpIHtcbiAgICAgIHZhciBuZXdLZXkgPSBuZXdQYXRoW2luZGV4XTsgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgICB1cGRhdGVkW25ld0tleV0gPSB1cGRhdGVkW29sZEtleV07XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICAgIHVwZGF0ZWQuc3BsaWNlKG9sZEtleSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtvbGRLZXldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG4gICAgICB1cGRhdGVkW29sZEtleV0gPSBjb3B5V2l0aFJlbmFtZUltcGwoIC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICAgIG9ialtvbGRLZXldLCBvbGRQYXRoLCBuZXdQYXRoLCBpbmRleCArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFJlbmFtZSA9IGZ1bmN0aW9uIChvYmosIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICBpZiAob2xkUGF0aC5sZW5ndGggIT09IG5ld1BhdGgubGVuZ3RoKSB7XG4gICAgICB3YXJuKCdjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgb2YgdGhlIHNhbWUgbGVuZ3RoJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdQYXRoLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBpZiAob2xkUGF0aFtpXSAhPT0gbmV3UGF0aFtpXSkge1xuICAgICAgICAgIHdhcm4oJ2NvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyB0byBiZSB0aGUgc2FtZSBleGNlcHQgZm9yIHRoZSBkZWVwZXN0IGtleScpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvcHlXaXRoUmVuYW1lSW1wbChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIDApO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFNldEltcGwgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCBpbmRleCwgdmFsdWUpIHtcbiAgICBpZiAoaW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7IC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoU2V0SW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoU2V0ID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgdmFsdWUpIHtcbiAgICByZXR1cm4gY29weVdpdGhTZXRJbXBsKG9iaiwgcGF0aCwgMCwgdmFsdWUpO1xuICB9O1xuXG4gIHZhciBmaW5kSG9vayA9IGZ1bmN0aW9uIChmaWJlciwgaWQpIHtcbiAgICAvLyBGb3Igbm93LCB0aGUgXCJpZFwiIG9mIHN0YXRlZnVsIGhvb2tzIGlzIGp1c3QgdGhlIHN0YXRlZnVsIGhvb2sgaW5kZXguXG4gICAgLy8gVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUgd2l0aCBlLmcuIG5lc3RlZCBob29rcy5cbiAgICB2YXIgY3VycmVudEhvb2sgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gICAgd2hpbGUgKGN1cnJlbnRIb29rICE9PSBudWxsICYmIGlkID4gMCkge1xuICAgICAgY3VycmVudEhvb2sgPSBjdXJyZW50SG9vay5uZXh0O1xuICAgICAgaWQtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudEhvb2s7XG4gIH07IC8vIFN1cHBvcnQgRGV2VG9vbHMgZWRpdGFibGUgdmFsdWVzIGZvciB1c2VTdGF0ZSBhbmQgdXNlUmVkdWNlci5cblxuXG4gIG92ZXJyaWRlSG9va1N0YXRlID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgcGF0aCwgdmFsdWUpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhTZXQoaG9vay5tZW1vaXplZFN0YXRlLCBwYXRoLCB2YWx1ZSk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07XG5cbiAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgcGF0aCkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aERlbGV0ZShob29rLm1lbW9pemVkU3RhdGUsIHBhdGgpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhSZW5hbWUoaG9vay5tZW1vaXplZFN0YXRlLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTsgLy8gU3VwcG9ydCBEZXZUb29scyBwcm9wcyBmb3IgZnVuY3Rpb24gY29tcG9uZW50cywgZm9yd2FyZFJlZiwgbWVtbywgaG9zdCBjb21wb25lbnRzLCBldGMuXG5cblxuICBvdmVycmlkZVByb3BzID0gZnVuY3Rpb24gKGZpYmVyLCBwYXRoLCB2YWx1ZSkge1xuICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoU2V0KGZpYmVyLm1lbW9pemVkUHJvcHMsIHBhdGgsIHZhbHVlKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBwYXRoKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhEZWxldGUoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoUmVuYW1lKGZpYmVyLm1lbW9pemVkUHJvcHMsIG9sZFBhdGgsIG5ld1BhdGgpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgc2NoZWR1bGVVcGRhdGUgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgc2V0U3VzcGVuc2VIYW5kbGVyID0gZnVuY3Rpb24gKG5ld1Nob3VsZFN1c3BlbmRJbXBsKSB7XG4gICAgc2hvdWxkU3VzcGVuZEltcGwgPSBuZXdTaG91bGRTdXNwZW5kSW1wbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIoZmliZXIpIHtcbiAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcblxuICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGaW5kRmliZXJCeUhvc3RJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMoKSB7XG4gIHJldHVybiBjdXJyZW50O1xufVxuXG5mdW5jdGlvbiBpbmplY3RJbnRvRGV2VG9vbHMoZGV2VG9vbHNDb25maWcpIHtcbiAgdmFyIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlID0gZGV2VG9vbHNDb25maWcuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U7XG4gIHZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbiAgcmV0dXJuIGluamVjdEludGVybmFscyh7XG4gICAgYnVuZGxlVHlwZTogZGV2VG9vbHNDb25maWcuYnVuZGxlVHlwZSxcbiAgICB2ZXJzaW9uOiBkZXZUb29sc0NvbmZpZy52ZXJzaW9uLFxuICAgIHJlbmRlcmVyUGFja2FnZU5hbWU6IGRldlRvb2xzQ29uZmlnLnJlbmRlcmVyUGFja2FnZU5hbWUsXG4gICAgcmVuZGVyZXJDb25maWc6IGRldlRvb2xzQ29uZmlnLnJlbmRlcmVyQ29uZmlnLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlOiBvdmVycmlkZUhvb2tTdGF0ZSxcbiAgICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6IG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCxcbiAgICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6IG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCxcbiAgICBvdmVycmlkZVByb3BzOiBvdmVycmlkZVByb3BzLFxuICAgIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOiBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCxcbiAgICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aDogb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGgsXG4gICAgc2V0U3VzcGVuc2VIYW5kbGVyOiBzZXRTdXNwZW5zZUhhbmRsZXIsXG4gICAgc2NoZWR1bGVVcGRhdGU6IHNjaGVkdWxlVXBkYXRlLFxuICAgIGN1cnJlbnREaXNwYXRjaGVyUmVmOiBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOiBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcixcbiAgICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTogZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgfHwgZW1wdHlGaW5kRmliZXJCeUhvc3RJbnN0YW5jZSxcbiAgICAvLyBSZWFjdCBSZWZyZXNoXG4gICAgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOiAgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoICxcbiAgICBzY2hlZHVsZVJlZnJlc2g6ICBzY2hlZHVsZVJlZnJlc2ggLFxuICAgIHNjaGVkdWxlUm9vdDogIHNjaGVkdWxlUm9vdCAsXG4gICAgc2V0UmVmcmVzaEhhbmRsZXI6ICBzZXRSZWZyZXNoSGFuZGxlciAsXG4gICAgLy8gRW5hYmxlcyBEZXZUb29scyB0byBhcHBlbmQgb3duZXIgc3RhY2tzIHRvIGVycm9yIG1lc3NhZ2VzIGluIERFViBtb2RlLlxuICAgIGdldEN1cnJlbnRGaWJlcjogIGdldEN1cnJlbnRGaWJlckZvckRldlRvb2xzIFxuICB9KTtcbn1cblxuZnVuY3Rpb24gUmVhY3RET01Sb290KGNvbnRhaW5lciwgb3B0aW9ucykge1xuICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBjcmVhdGVSb290SW1wbChjb250YWluZXIsIENvbmN1cnJlbnRSb290LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gUmVhY3RET01CbG9ja2luZ1Jvb3QoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpIHtcbiAgdGhpcy5faW50ZXJuYWxSb290ID0gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpO1xufVxuXG5SZWFjdERPTVJvb3QucHJvdG90eXBlLnJlbmRlciA9IFJlYWN0RE9NQmxvY2tpbmdSb290LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgdmFyIHJvb3QgPSB0aGlzLl9pbnRlcm5hbFJvb3Q7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcigncmVuZGVyKC4uLik6IGRvZXMgbm90IHN1cHBvcnQgdGhlIHNlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gJyArICdUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIGEgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG5cbiAgICB2YXIgY29udGFpbmVyID0gcm9vdC5jb250YWluZXJJbmZvO1xuXG4gICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgaG9zdEluc3RhbmNlID0gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMocm9vdC5jdXJyZW50KTtcblxuICAgICAgaWYgKGhvc3RJbnN0YW5jZSkge1xuICAgICAgICBpZiAoaG9zdEluc3RhbmNlLnBhcmVudE5vZGUgIT09IGNvbnRhaW5lcikge1xuICAgICAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogSXQgbG9va3MgbGlrZSB0aGUgUmVhY3QtcmVuZGVyZWQgY29udGVudCBvZiB0aGUgJyArICdyb290IGNvbnRhaW5lciB3YXMgcmVtb3ZlZCB3aXRob3V0IHVzaW5nIFJlYWN0LiBUaGlzIGlzIG5vdCAnICsgJ3N1cHBvcnRlZCBhbmQgd2lsbCBjYXVzZSBlcnJvcnMuIEluc3RlYWQsIGNhbGwgJyArIFwicm9vdC51bm1vdW50KCkgdG8gZW1wdHkgYSByb290J3MgY29udGFpbmVyLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgcm9vdCwgbnVsbCwgbnVsbCk7XG59O1xuXG5SZWFjdERPTVJvb3QucHJvdG90eXBlLnVubW91bnQgPSBSZWFjdERPTUJsb2NraW5nUm9vdC5wcm90b3R5cGUudW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcigndW5tb3VudCguLi4pOiBkb2VzIG5vdCBzdXBwb3J0IGEgY2FsbGJhY2sgYXJndW1lbnQuICcgKyAnVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiBhIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvb3QgPSB0aGlzLl9pbnRlcm5hbFJvb3Q7XG4gIHZhciBjb250YWluZXIgPSByb290LmNvbnRhaW5lckluZm87XG4gIHVwZGF0ZUNvbnRhaW5lcihudWxsLCByb290LCBudWxsLCBmdW5jdGlvbiAoKSB7XG4gICAgdW5tYXJrQ29udGFpbmVyQXNSb290KGNvbnRhaW5lcik7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpIHtcbiAgLy8gVGFnIGlzIGVpdGhlciBMZWdhY3lSb290IG9yIENvbmN1cnJlbnQgUm9vdFxuICB2YXIgaHlkcmF0ZSA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGUgPT09IHRydWU7XG4gIHZhciBoeWRyYXRpb25DYWxsYmFja3MgPSBvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRpb25PcHRpb25zIHx8IG51bGw7XG4gIHZhciBtdXRhYmxlU291cmNlcyA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMubXV0YWJsZVNvdXJjZXMgfHwgbnVsbDtcbiAgdmFyIHJvb3QgPSBjcmVhdGVDb250YWluZXIoY29udGFpbmVyLCB0YWcsIGh5ZHJhdGUpO1xuICBtYXJrQ29udGFpbmVyQXNSb290KHJvb3QuY3VycmVudCwgY29udGFpbmVyKTtcbiAgdmFyIGNvbnRhaW5lck5vZGVUeXBlID0gY29udGFpbmVyLm5vZGVUeXBlO1xuXG4gIHtcbiAgICB2YXIgcm9vdENvbnRhaW5lckVsZW1lbnQgPSBjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSA/IGNvbnRhaW5lci5wYXJlbnROb2RlIDogY29udGFpbmVyO1xuICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KTtcbiAgfVxuXG4gIGlmIChtdXRhYmxlU291cmNlcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXV0YWJsZVNvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBtdXRhYmxlU291cmNlID0gbXV0YWJsZVNvdXJjZXNbaV07XG4gICAgICByZWdpc3Rlck11dGFibGVTb3VyY2VGb3JIeWRyYXRpb24ocm9vdCwgbXV0YWJsZVNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3Q7XG59XG5mdW5jdGlvbiBjcmVhdGVMZWdhY3lSb290KGNvbnRhaW5lciwgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IFJlYWN0RE9NQmxvY2tpbmdSb290KGNvbnRhaW5lciwgTGVnYWN5Um9vdCwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBpc1ZhbGlkQ29udGFpbmVyKG5vZGUpIHtcbiAgcmV0dXJuICEhKG5vZGUgJiYgKG5vZGUubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFICYmIG5vZGUubm9kZVZhbHVlID09PSAnIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlICcpKTtcbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDMgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzO1xudmFyIHdhcm5lZEFib3V0SHlkcmF0ZUFQSSA9IGZhbHNlO1xuXG57XG4gIHRvcExldmVsVXBkYXRlV2FybmluZ3MgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgaWYgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyICYmIGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgaG9zdEluc3RhbmNlID0gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIuX2ludGVybmFsUm9vdC5jdXJyZW50KTtcblxuICAgICAgaWYgKGhvc3RJbnN0YW5jZSkge1xuICAgICAgICBpZiAoaG9zdEluc3RhbmNlLnBhcmVudE5vZGUgIT09IGNvbnRhaW5lcikge1xuICAgICAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogSXQgbG9va3MgbGlrZSB0aGUgUmVhY3QtcmVuZGVyZWQgY29udGVudCBvZiB0aGlzICcgKyAnY29udGFpbmVyIHdhcyByZW1vdmVkIHdpdGhvdXQgdXNpbmcgUmVhY3QuIFRoaXMgaXMgbm90ICcgKyAnc3VwcG9ydGVkIGFuZCB3aWxsIGNhdXNlIGVycm9ycy4gSW5zdGVhZCwgY2FsbCAnICsgJ1JlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUgdG8gZW1wdHkgYSBjb250YWluZXIuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaXNSb290UmVuZGVyZWRCeVNvbWVSZWFjdCA9ICEhY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG4gICAgdmFyIHJvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIHZhciBoYXNOb25Sb290UmVhY3RDaGlsZCA9ICEhKHJvb3RFbCAmJiBnZXRJbnN0YW5jZUZyb21Ob2RlKHJvb3RFbCkpO1xuXG4gICAgaWYgKGhhc05vblJvb3RSZWFjdENoaWxkICYmICFpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0KSB7XG4gICAgICBlcnJvcigncmVuZGVyKC4uLik6IFJlcGxhY2luZyBSZWFjdC1yZW5kZXJlZCBjaGlsZHJlbiB3aXRoIGEgbmV3IHJvb3QgJyArICdjb21wb25lbnQuIElmIHlvdSBpbnRlbmRlZCB0byB1cGRhdGUgdGhlIGNoaWxkcmVuIG9mIHRoaXMgbm9kZSwgJyArICd5b3Ugc2hvdWxkIGluc3RlYWQgaGF2ZSB0aGUgZXhpc3RpbmcgY2hpbGRyZW4gdXBkYXRlIHRoZWlyIHN0YXRlICcgKyAnYW5kIHJlbmRlciB0aGUgbmV3IGNvbXBvbmVudHMgaW5zdGVhZCBvZiBjYWxsaW5nIFJlYWN0RE9NLnJlbmRlci4nKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgY29udGFpbmVyLnRhZ05hbWUgJiYgY29udGFpbmVyLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknKSB7XG4gICAgICBlcnJvcigncmVuZGVyKCk6IFJlbmRlcmluZyBjb21wb25lbnRzIGRpcmVjdGx5IGludG8gZG9jdW1lbnQuYm9keSBpcyAnICsgJ2Rpc2NvdXJhZ2VkLCBzaW5jZSBpdHMgY2hpbGRyZW4gYXJlIG9mdGVuIG1hbmlwdWxhdGVkIGJ5IHRoaXJkLXBhcnR5ICcgKyAnc2NyaXB0cyBhbmQgYnJvd3NlciBleHRlbnNpb25zLiBUaGlzIG1heSBsZWFkIHRvIHN1YnRsZSAnICsgJ3JlY29uY2lsaWF0aW9uIGlzc3Vlcy4gVHJ5IHJlbmRlcmluZyBpbnRvIGEgY29udGFpbmVyIGVsZW1lbnQgY3JlYXRlZCAnICsgJ2ZvciB5b3VyIGFwcC4nKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmRvY3VtZW50RWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkSHlkcmF0ZUR1ZVRvTGVnYWN5SGV1cmlzdGljKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgcmV0dXJuICEhKHJvb3RFbGVtZW50ICYmIHJvb3RFbGVtZW50Lm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgcm9vdEVsZW1lbnQuaGFzQXR0cmlidXRlKFJPT1RfQVRUUklCVVRFX05BTUUpKTtcbn1cblxuZnVuY3Rpb24gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUpIHtcbiAgdmFyIHNob3VsZEh5ZHJhdGUgPSBmb3JjZUh5ZHJhdGUgfHwgc2hvdWxkSHlkcmF0ZUR1ZVRvTGVnYWN5SGV1cmlzdGljKGNvbnRhaW5lcik7IC8vIEZpcnN0IGNsZWFyIGFueSBleGlzdGluZyBjb250ZW50LlxuXG4gIGlmICghc2hvdWxkSHlkcmF0ZSkge1xuICAgIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgICB2YXIgcm9vdFNpYmxpbmc7XG5cbiAgICB3aGlsZSAocm9vdFNpYmxpbmcgPSBjb250YWluZXIubGFzdENoaWxkKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghd2FybmVkICYmIHJvb3RTaWJsaW5nLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgcm9vdFNpYmxpbmcuaGFzQXR0cmlidXRlKFJPT1RfQVRUUklCVVRFX05BTUUpKSB7XG4gICAgICAgICAgd2FybmVkID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdyZW5kZXIoKTogVGFyZ2V0IG5vZGUgaGFzIG1hcmt1cCByZW5kZXJlZCBieSBSZWFjdCwgYnV0IHRoZXJlICcgKyAnYXJlIHVucmVsYXRlZCBub2RlcyBhcyB3ZWxsLiBUaGlzIGlzIG1vc3QgY29tbW9ubHkgY2F1c2VkIGJ5ICcgKyAnd2hpdGUtc3BhY2UgaW5zZXJ0ZWQgYXJvdW5kIHNlcnZlci1yZW5kZXJlZCBtYXJrdXAuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKHJvb3RTaWJsaW5nKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKHNob3VsZEh5ZHJhdGUgJiYgIWZvcmNlSHlkcmF0ZSAmJiAhd2FybmVkQWJvdXRIeWRyYXRlQVBJKSB7XG4gICAgICB3YXJuZWRBYm91dEh5ZHJhdGVBUEkgPSB0cnVlO1xuXG4gICAgICB3YXJuKCdyZW5kZXIoKTogQ2FsbGluZyBSZWFjdERPTS5yZW5kZXIoKSB0byBoeWRyYXRlIHNlcnZlci1yZW5kZXJlZCBtYXJrdXAgJyArICd3aWxsIHN0b3Agd29ya2luZyBpbiBSZWFjdCB2MTguIFJlcGxhY2UgdGhlIFJlYWN0RE9NLnJlbmRlcigpIGNhbGwgJyArICd3aXRoIFJlYWN0RE9NLmh5ZHJhdGUoKSBpZiB5b3Ugd2FudCBSZWFjdCB0byBhdHRhY2ggdG8gdGhlIHNlcnZlciBIVE1MLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVMZWdhY3lSb290KGNvbnRhaW5lciwgc2hvdWxkSHlkcmF0ZSA/IHtcbiAgICBoeWRyYXRlOiB0cnVlXG4gIH0gOiB1bmRlZmluZWQpO1xufVxuXG5mdW5jdGlvbiB3YXJuT25JbnZhbGlkQ2FsbGJhY2skMShjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsZXJOYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgY2hpbGRyZW4sIGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlLCBjYWxsYmFjaykge1xuICB7XG4gICAgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncyhjb250YWluZXIpO1xuICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogY2FsbGJhY2ssICdyZW5kZXInKTtcbiAgfSAvLyBUT0RPOiBXaXRob3V0IGBhbnlgIHR5cGUsIEZsb3cgc2F5cyBcIlByb3BlcnR5IGNhbm5vdCBiZSBhY2Nlc3NlZCBvbiBhbnlcbiAgLy8gbWVtYmVyIG9mIGludGVyc2VjdGlvbiB0eXBlLlwiIFdoeXl5eXl5LlxuXG5cbiAgdmFyIHJvb3QgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgdmFyIGZpYmVyUm9vdDtcblxuICBpZiAoIXJvb3QpIHtcbiAgICAvLyBJbml0aWFsIG1vdW50XG4gICAgcm9vdCA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID0gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUpO1xuICAgIGZpYmVyUm9vdCA9IHJvb3QuX2ludGVybmFsUm9vdDtcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBvcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRQdWJsaWNSb290SW5zdGFuY2UoZmliZXJSb290KTtcbiAgICAgICAgb3JpZ2luYWxDYWxsYmFjay5jYWxsKGluc3RhbmNlKTtcbiAgICAgIH07XG4gICAgfSAvLyBJbml0aWFsIG1vdW50IHNob3VsZCBub3QgYmUgYmF0Y2hlZC5cblxuXG4gICAgdW5iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIGZpYmVyUm9vdCwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZmliZXJSb290ID0gcm9vdC5faW50ZXJuYWxSb290O1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIF9vcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRQdWJsaWNSb290SW5zdGFuY2UoZmliZXJSb290KTtcblxuICAgICAgICBfb3JpZ2luYWxDYWxsYmFjay5jYWxsKGluc3RhbmNlKTtcbiAgICAgIH07XG4gICAgfSAvLyBVcGRhdGVcblxuXG4gICAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCBmaWJlclJvb3QsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgcmV0dXJuIGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xufVxuXG5mdW5jdGlvbiBmaW5kRE9NTm9kZShjb21wb25lbnRPckVsZW1lbnQpIHtcbiAge1xuICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyJDMuY3VycmVudDtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci5zdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciB3YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXI7XG5cbiAgICAgIGlmICghd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIpIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIGFjY2Vzc2luZyBmaW5kRE9NTm9kZSBpbnNpZGUgaXRzIHJlbmRlcigpLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSB8fCAnQSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgb3duZXIuc3RhdGVOb2RlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbXBvbmVudE9yRWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50Lm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gY29tcG9uZW50T3JFbGVtZW50O1xuICB9XG5cbiAge1xuICAgIHJldHVybiBmaW5kSG9zdEluc3RhbmNlV2l0aFdhcm5pbmcoY29tcG9uZW50T3JFbGVtZW50LCAnZmluZERPTU5vZGUnKTtcbiAgfVxufVxuZnVuY3Rpb24gaHlkcmF0ZShlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS5oeWRyYXRlKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCBjcmVhdGVSb290KGNvbnRhaW5lciwge2h5ZHJhdGU6IHRydWV9KS5yZW5kZXIoZWxlbWVudCk/Jyk7XG4gICAgfVxuICB9IC8vIFRPRE86IHRocm93IG9yIHdhcm4gaWYgd2UgY291bGRuJ3QgaHlkcmF0ZT9cblxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBlbGVtZW50LCBjb250YWluZXIsIHRydWUsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHJlbmRlcihlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QucmVuZGVyKGVsZW1lbnQpPycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBlbGVtZW50LCBjb250YWluZXIsIGZhbHNlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXJOb2RlKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIShwYXJlbnRDb21wb25lbnQgIT0gbnVsbCAmJiBoYXMocGFyZW50Q29tcG9uZW50KSkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJwYXJlbnRDb21wb25lbnQgbXVzdCBiZSBhIHZhbGlkIFJlYWN0IENvbXBvbmVudFwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgZmFsc2UsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBEaWQgeW91IG1lYW4gdG8gY2FsbCByb290LnVubW91bnQoKT8nKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIpIHtcbiAgICB7XG4gICAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgICB2YXIgcmVuZGVyZWRCeURpZmZlcmVudFJlYWN0ID0gcm9vdEVsICYmICFnZXRJbnN0YW5jZUZyb21Ob2RlKHJvb3RFbCk7XG5cbiAgICAgIGlmIChyZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QpIHtcbiAgICAgICAgZXJyb3IoXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IGFub3RoZXIgY29weSBvZiBSZWFjdC4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFVubW91bnQgc2hvdWxkIG5vdCBiZSBiYXRjaGVkLlxuXG5cbiAgICB1bmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIG51bGwsIGNvbnRhaW5lciwgZmFsc2UsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSBUaGlzIHNob3VsZCBwcm9iYWJseSB1c2UgYGRlbGV0ZSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcmBcbiAgICAgICAgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPSBudWxsO1xuICAgICAgICB1bm1hcmtDb250YWluZXJBc1Jvb3QoY29udGFpbmVyKTtcbiAgICAgIH0pO1xuICAgIH0pOyAvLyBJZiB5b3UgY2FsbCB1bm1vdW50Q29tcG9uZW50QXROb2RlIHR3aWNlIGluIHF1aWNrIHN1Y2Nlc3Npb24sIHlvdSdsbFxuICAgIC8vIGdldCBgdHJ1ZWAgdHdpY2UuIFRoYXQncyBwcm9iYWJseSBmaW5lP1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgdmFyIF9yb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcblxuICAgICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEoX3Jvb3RFbCAmJiBnZXRJbnN0YW5jZUZyb21Ob2RlKF9yb290RWwpKTsgLy8gQ2hlY2sgaWYgdGhlIGNvbnRhaW5lciBpdHNlbGYgaXMgYSBSZWFjdCByb290IG5vZGUuXG5cbiAgICAgIHZhciBpc0NvbnRhaW5lclJlYWN0Um9vdCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIGlzVmFsaWRDb250YWluZXIoY29udGFpbmVyLnBhcmVudE5vZGUpICYmICEhY29udGFpbmVyLnBhcmVudE5vZGUuX3JlYWN0Um9vdENvbnRhaW5lcjtcblxuICAgICAgaWYgKGhhc05vblJvb3RSZWFjdENoaWxkKSB7XG4gICAgICAgIGVycm9yKFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSgpOiBUaGUgbm9kZSB5b3UncmUgYXR0ZW1wdGluZyB0byB1bm1vdW50IFwiICsgJ3dhcyByZW5kZXJlZCBieSBSZWFjdCBhbmQgaXMgbm90IGEgdG9wLWxldmVsIGNvbnRhaW5lci4gJXMnLCBpc0NvbnRhaW5lclJlYWN0Um9vdCA/ICdZb3UgbWF5IGhhdmUgYWNjaWRlbnRhbGx5IHBhc3NlZCBpbiBhIFJlYWN0IHJvb3Qgbm9kZSBpbnN0ZWFkICcgKyAnb2YgaXRzIGNvbnRhaW5lci4nIDogJ0luc3RlYWQsIGhhdmUgdGhlIHBhcmVudCBjb21wb25lbnQgdXBkYXRlIGl0cyBzdGF0ZSBhbmQgJyArICdyZXJlbmRlciBpbiBvcmRlciB0byByZW1vdmUgdGhpcyBjb21wb25lbnQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbnNldEF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24oYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbiQxKTtcbnNldEF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uJDEpO1xuc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSQxKTtcbnNldEF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KHJ1bldpdGhQcmlvcml0eSQyKTtcbnZhciBkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCA9IGZhbHNlO1xuXG57XG4gIGlmICh0eXBlb2YgTWFwICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93SXNzdWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgTWFwIGhhcyBubyBwcm90b3R5cGVcbiAgTWFwLnByb3RvdHlwZSA9PSBudWxsIHx8IHR5cGVvZiBNYXAucHJvdG90eXBlLmZvckVhY2ggIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIFNldCAhPT0gJ2Z1bmN0aW9uJyB8fCAvLyAkRmxvd0lzc3VlIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIFNldCBoYXMgbm8gcHJvdG90eXBlXG4gIFNldC5wcm90b3R5cGUgPT0gbnVsbCB8fCB0eXBlb2YgU2V0LnByb3RvdHlwZS5jbGVhciAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgU2V0LnByb3RvdHlwZS5mb3JFYWNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgZXJyb3IoJ1JlYWN0IGRlcGVuZHMgb24gTWFwIGFuZCBTZXQgYnVpbHQtaW4gdHlwZXMuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxscycpO1xuICB9XG59XG5cbnNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbihyZXN0b3JlQ29udHJvbGxlZFN0YXRlJDMpO1xuc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihiYXRjaGVkVXBkYXRlcyQxLCBkaXNjcmV0ZVVwZGF0ZXMkMSwgZmx1c2hEaXNjcmV0ZVVwZGF0ZXMsIGJhdGNoZWRFdmVudFVwZGF0ZXMkMSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXIpIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogcGFzcyBSZWFjdERPTSBwb3J0YWwgaW1wbGVtZW50YXRpb24gYXMgdGhpcmQgYXJndW1lbnRcbiAgLy8gJEZsb3dGaXhNZSBUaGUgRmxvdyB0eXBlIGlzIG9wYXF1ZSBidXQgdGhlcmUncyBubyB3YXkgdG8gYWN0dWFsbHkgY3JlYXRlIGl0LlxuXG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVyLCBudWxsLCBrZXkpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKSB7XG5cbiAgcmV0dXJuIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsKSB7XG4gICAgICBkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ1RoZSBSZWFjdERPTS51bnN0YWJsZV9jcmVhdGVQb3J0YWwoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0RE9NLmNyZWF0ZVBvcnRhbCgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEksICcgKyAnYnV0IHdpdGhvdXQgdGhlIFwidW5zdGFibGVfXCIgcHJlZml4LicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVyLCBrZXkpO1xufVxuXG52YXIgSW50ZXJuYWxzID0ge1xuICAvLyBLZWVwIGluIHN5bmMgd2l0aCBSZWFjdFRlc3RVdGlscy5qcywgYW5kIFJlYWN0VGVzdFV0aWxzQWN0LmpzLlxuICAvLyBUaGlzIGlzIGFuIGFycmF5IGZvciBiZXR0ZXIgbWluaWZpY2F0aW9uLlxuICBFdmVudHM6IFtnZXRJbnN0YW5jZUZyb21Ob2RlLCBnZXROb2RlRnJvbUluc3RhbmNlLCBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlLCBlbnF1ZXVlU3RhdGVSZXN0b3JlLCByZXN0b3JlU3RhdGVJZk5lZWRlZCwgZmx1c2hQYXNzaXZlRWZmZWN0cywgLy8gVE9ETzogVGhpcyBpcyByZWxhdGVkIHRvIGBhY3RgLCBub3QgZXZlbnRzLiBNb3ZlIHRvIHNlcGFyYXRlIGtleT9cbiAgSXNUaGlzUmVuZGVyZXJBY3RpbmddXG59O1xudmFyIGZvdW5kRGV2VG9vbHMgPSBpbmplY3RJbnRvRGV2VG9vbHMoe1xuICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTogZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUsXG4gIGJ1bmRsZVR5cGU6ICAxICxcbiAgdmVyc2lvbjogUmVhY3RWZXJzaW9uLFxuICByZW5kZXJlclBhY2thZ2VOYW1lOiAncmVhY3QtZG9tJ1xufSk7XG5cbntcbiAgaWYgKCFmb3VuZERldlRvb2xzICYmIGNhblVzZURPTSAmJiB3aW5kb3cudG9wID09PSB3aW5kb3cuc2VsZikge1xuICAgIC8vIElmIHdlJ3JlIGluIENocm9tZSBvciBGaXJlZm94LCBwcm92aWRlIGEgZG93bmxvYWQgbGluayBpZiBub3QgaW5zdGFsbGVkLlxuICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpID4gLTEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdFZGdlJykgPT09IC0xIHx8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID4gLTEpIHtcbiAgICAgIHZhciBwcm90b2NvbCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbDsgLy8gRG9uJ3Qgd2FybiBpbiBleG90aWMgY2FzZXMgbGlrZSBjaHJvbWUtZXh0ZW5zaW9uOi8vLlxuXG4gICAgICBpZiAoL14oaHR0cHM/fGZpbGUpOiQvLnRlc3QocHJvdG9jb2wpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcbiAgICAgICAgY29uc29sZS5pbmZvKCclY0Rvd25sb2FkIHRoZSBSZWFjdCBEZXZUb29scyAnICsgJ2ZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scycgKyAocHJvdG9jb2wgPT09ICdmaWxlOicgPyAnXFxuWW91IG1pZ2h0IG5lZWQgdG8gdXNlIGEgbG9jYWwgSFRUUCBzZXJ2ZXIgKGluc3RlYWQgb2YgZmlsZTovLyk6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzLWZhcScgOiAnJyksICdmb250LXdlaWdodDpib2xkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQgPSBJbnRlcm5hbHM7XG5leHBvcnRzLmNyZWF0ZVBvcnRhbCA9IGNyZWF0ZVBvcnRhbCQxO1xuZXhwb3J0cy5maW5kRE9NTm9kZSA9IGZpbmRET01Ob2RlO1xuZXhwb3J0cy5mbHVzaFN5bmMgPSBmbHVzaFN5bmM7XG5leHBvcnRzLmh5ZHJhdGUgPSBoeWRyYXRlO1xuZXhwb3J0cy5yZW5kZXIgPSByZW5kZXI7XG5leHBvcnRzLnVubW91bnRDb21wb25lbnRBdE5vZGUgPSB1bm1vdW50Q29tcG9uZW50QXROb2RlO1xuZXhwb3J0cy51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IGJhdGNoZWRVcGRhdGVzJDE7XG5leHBvcnRzLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbCA9IHVuc3RhYmxlX2NyZWF0ZVBvcnRhbDtcbmV4cG9ydHMudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIgPSByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjtcbmV4cG9ydHMudmVyc2lvbiA9IFJlYWN0VmVyc2lvbjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGNoZWNrRENFKCkge1xuICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gIGlmIChcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJyB8fFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkXG4gICAgLy8gaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBvbmx5IGluIGRldmVsb3BtZW50LlxuICAgIC8vIFRoZXJlZm9yZSBpZiB0aGUgYnJhbmNoIGlzIHN0aWxsIGhlcmUsIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3YXNuJ3RcbiAgICAvLyBwcm9wZXJseSBhcHBsaWVkLlxuICAgIC8vIERvbid0IGNoYW5nZSB0aGUgbWVzc2FnZS4gUmVhY3QgRGV2VG9vbHMgcmVsaWVzIG9uIGl0LiBBbHNvIG1ha2Ugc3VyZVxuICAgIC8vIHRoaXMgbWVzc2FnZSBkb2Vzbid0IG9jY3VyIGVsc2V3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLCBvciBpdCB3aWxsIGNhdXNlXG4gICAgLy8gYSBmYWxzZSBwb3NpdGl2ZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ15fXicpO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvZGUgYWJvdmUgaGFzIGJlZW4gZGVhZCBjb2RlIGVsaW1pbmF0ZWQgKERDRSdkKS5cbiAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoY2hlY2tEQ0UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEZXZUb29scyBzaG91bGRuJ3QgY3Jhc2ggUmVhY3QsIG5vIG1hdHRlciB3aGF0LlxuICAgIC8vIFdlIHNob3VsZCBzdGlsbCByZXBvcnQgaW4gY2FzZSB3ZSBicmVhayB0aGlzIGNvZGUuXG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIERDRSBjaGVjayBzaG91bGQgaGFwcGVuIGJlZm9yZSBSZWFjdERPTSBidW5kbGUgZXhlY3V0ZXMgc28gdGhhdFxuICAvLyBEZXZUb29scyBjYW4gcmVwb3J0IGJhZCBtaW5pZmljYXRpb24gZHVyaW5nIGluamVjdGlvbi5cbiAgY2hlY2tEQ0UoKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKSA6IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKSA6IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKSA6IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKSA6IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKSA6IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0JykgOiAweGVhY2U7IC8vIFRPRE86IFdlIGRvbid0IHVzZSBBc3luY01vZGUgb3IgQ29uY3VycmVudE1vZGUgYW55bW9yZS4gVGhleSB3ZXJlIHRlbXBvcmFyeVxuLy8gKHVuc3RhYmxlKSBBUElzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuIENhbiB3ZSByZW1vdmUgdGhlIHN5bWJvbHM/XG5cbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0JykgOiAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYmxvY2snKSA6IDB4ZWFkOTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnVuZGFtZW50YWwnKSA6IDB4ZWFkNTtcbnZhciBSRUFDVF9SRVNQT05ERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnJlc3BvbmRlcicpIDogMHhlYWQ2O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zY29wZScpIDogMHhlYWQ3O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9SRVNQT05ERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9TQ09QRV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUpO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FTWU5DX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0gLy8gQXN5bmNNb2RlIGlzIGRlcHJlY2F0ZWQgYWxvbmcgd2l0aCBpc0FzeW5jTW9kZVxuXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE3Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkgfHwgdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQXN5bmNNb2RlID0gQXN5bmNNb2RlO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkgeyAvKiovIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgK1xuICAgICAgICAgICAgICAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcbiAgICAgICAgICAgIGxvY2F0aW9uICsgJyBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBiaWdpbnQ6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdiaWdpbnQnKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSwgZGF0YSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5kYXRhID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhOiB7fTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSxcbiAgICAgICAgICB7ZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGV9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIHZhciBjaGVja2VyUmVzdWx0ID0gY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VyUmVzdWx0LmRhdGEgJiYgaGFzKGNoZWNrZXJSZXN1bHQuZGF0YSwgJ2V4cGVjdGVkVHlwZScpKSB7XG4gICAgICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGNoZWNrZXJSZXN1bHQuZGF0YS5leHBlY3RlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgPSAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPiAwKSA/ICcsIGV4cGVjdGVkIG9uZSBvZiB0eXBlIFsnICsgZXhwZWN0ZWRUeXBlcy5qb2luKCcsICcpICsgJ10nOiAnJztcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AnICsgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIHR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHByb3BGdWxsTmFtZSArICcuJyArIGtleSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZSArICdgLidcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb20gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoaGFzKHNoYXBlVHlwZXMsIGtleSkgJiYgdHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgZ2V0UHJlY2lzZVR5cGUoY2hlY2tlcikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsICIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKGFyZykge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlVmFsdWUgKGFyZykge1xuXHRcdGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuXHRcdFx0cmV0dXJuIGFyZztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdH1cblxuXHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdHJldHVybiBhcmcudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3Nlcywga2V5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZENsYXNzICh2YWx1ZSwgbmV3Q2xhc3MpIHtcblx0XHRpZiAoIW5ld0NsYXNzKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSArICcgJyArIG5ld0NsYXNzO1xuXHRcdH1cblx0XG5cdFx0cmV0dXJuIHZhbHVlICsgbmV3Q2xhc3M7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKSA6IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKSA6IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKSA6IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKSA6IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKSA6IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0JykgOiAweGVhY2U7IC8vIFRPRE86IFdlIGRvbid0IHVzZSBBc3luY01vZGUgb3IgQ29uY3VycmVudE1vZGUgYW55bW9yZS4gVGhleSB3ZXJlIHRlbXBvcmFyeVxuLy8gKHVuc3RhYmxlKSBBUElzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuIENhbiB3ZSByZW1vdmUgdGhlIHN5bWJvbHM/XG5cbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0JykgOiAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYmxvY2snKSA6IDB4ZWFkOTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnVuZGFtZW50YWwnKSA6IDB4ZWFkNTtcbnZhciBSRUFDVF9SRVNQT05ERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnJlc3BvbmRlcicpIDogMHhlYWQ2O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zY29wZScpIDogMHhlYWQ3O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9SRVNQT05ERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9TQ09QRV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUpO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FTWU5DX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0gLy8gQXN5bmNNb2RlIGlzIGRlcHJlY2F0ZWQgYWxvbmcgd2l0aCBpc0FzeW5jTW9kZVxuXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE3Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkgfHwgdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQXN5bmNNb2RlID0gQXN5bmNNb2RlO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbnZhciBSRUFDVF9TVEFUSUNTID0ge1xuICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgY29udGV4dFR5cGU6IHRydWUsXG4gIGNvbnRleHRUeXBlczogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgZ2V0RGVmYXVsdFByb3BzOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogdHJ1ZSxcbiAgbWl4aW5zOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgS05PV05fU1RBVElDUyA9IHtcbiAgbmFtZTogdHJ1ZSxcbiAgbGVuZ3RoOiB0cnVlLFxuICBwcm90b3R5cGU6IHRydWUsXG4gIGNhbGxlcjogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBhcmd1bWVudHM6IHRydWUsXG4gIGFyaXR5OiB0cnVlXG59O1xudmFyIEZPUldBUkRfUkVGX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIHJlbmRlcjogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlXG59O1xudmFyIE1FTU9fU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgY29tcGFyZTogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIFRZUEVfU1RBVElDUyA9IHt9O1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuRm9yd2FyZFJlZl0gPSBGT1JXQVJEX1JFRl9TVEFUSUNTO1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuTWVtb10gPSBNRU1PX1NUQVRJQ1M7XG5cbmZ1bmN0aW9uIGdldFN0YXRpY3MoY29tcG9uZW50KSB7XG4gIC8vIFJlYWN0IHYxNi4xMSBhbmQgYmVsb3dcbiAgaWYgKHJlYWN0SXMuaXNNZW1vKGNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gTUVNT19TVEFUSUNTO1xuICB9IC8vIFJlYWN0IHYxNi4xMiBhbmQgYWJvdmVcblxuXG4gIHJldHVybiBUWVBFX1NUQVRJQ1NbY29tcG9uZW50WyckJHR5cGVvZiddXSB8fCBSRUFDVF9TVEFUSUNTO1xufVxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBvYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuZnVuY3Rpb24gaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21wb25lbnQsIGJsYWNrbGlzdCkge1xuICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xuICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgICBpZiAoaW5oZXJpdGVkQ29tcG9uZW50ICYmIGluaGVyaXRlZENvbXBvbmVudCAhPT0gb2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICAgIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgaW5oZXJpdGVkQ29tcG9uZW50LCBibGFja2xpc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0U3RhdGljcyA9IGdldFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50KTtcbiAgICB2YXIgc291cmNlU3RhdGljcyA9IGdldFN0YXRpY3Moc291cmNlQ29tcG9uZW50KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghS05PV05fU1RBVElDU1trZXldICYmICEoYmxhY2tsaXN0ICYmIGJsYWNrbGlzdFtrZXldKSAmJiAhKHNvdXJjZVN0YXRpY3MgJiYgc291cmNlU3RhdGljc1trZXldKSAmJiAhKHRhcmdldFN0YXRpY3MgJiYgdGFyZ2V0U3RhdGljc1trZXldKSkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBBdm9pZCBmYWlsdXJlcyBmcm9tIHJlYWQtb25seSBwcm9wZXJ0aWVzXG4gICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaG9pc3ROb25SZWFjdFN0YXRpY3M7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUNsZWFyO1xuIiwgIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwgInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwgInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCAidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwgInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCAidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCAiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrRGVsZXRlO1xuIiwgIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwgIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsICJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCAidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLCAiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwgInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCAiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCAidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwgIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsICJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwgInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCAidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwgInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwgInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwgInZhciBpc0tleWFibGUgPSByZXF1aXJlKCcuL19pc0tleWFibGUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcERhdGE7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwgInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCAidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsICJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwgInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrU2V0O1xuIiwgInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwgIi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlQWRkO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUhhcztcbiIsICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpLFxuICAgIHNldENhY2hlQWRkID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVBZGQnKSxcbiAgICBzZXRDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX3NldENhY2hlSGFzJyk7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRDYWNoZTtcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5U29tZTtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBjYWNoZUhhcyhjYWNoZSwga2V5KSB7XG4gIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWNoZUhhcztcbiIsICJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXk7XG4iLCAiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwgIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsICJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCAiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwgInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlGaWx0ZXI7XG4iLCAiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCAidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9scztcbiIsICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsICIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCAidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsICIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwgInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwgInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwgInZhciBiYXNlVGltZXMgPSByZXF1aXJlKCcuL19iYXNlVGltZXMnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaGVyaXRlZCBTcGVjaWZ5IHJldHVybmluZyBpbmhlcml0ZWQgcHJvcGVydHkgbmFtZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlLCBpbmhlcml0ZWQpIHtcbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIGlzQnVmZmVyKHZhbHVlKSxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBiYXNlVGltZXModmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpICYmXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy5cbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aClcbiAgICAgICAgKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlMaWtlS2V5cztcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCAiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsICJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXM7XG4iLCAidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCAidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLCAidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwgInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsICJ2YXIgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIG9ialN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAob2JqU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIG9ialN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBvYmplY3Q7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxPYmplY3RzO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YVZpZXc7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYWtNYXA7XG4iLCAidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwgInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIGVxdWFsQnlUYWcgPSByZXF1aXJlKCcuL19lcXVhbEJ5VGFnJyksXG4gICAgZXF1YWxPYmplY3RzID0gcmVxdWlyZSgnLi9fZXF1YWxPYmplY3RzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsRGVlcDtcbiIsICJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCAidmFyIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gKiBlcXVpdmFsZW50LlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAqIGRhdGUgb2JqZWN0cywgZXJyb3Igb2JqZWN0cywgbWFwcywgbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcyxcbiAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAqIG5vZGVzIGFyZSBjb21wYXJlZCBieSBzdHJpY3QgZXF1YWxpdHksIGkuZS4gYD09PWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBvYmplY3QgPT09IG90aGVyO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFcXVhbDtcbiIsICIvLyEgbW9tZW50LmpzXG4vLyEgdmVyc2lvbiA6IDIuMzAuMVxuLy8hIGF1dGhvcnMgOiBUaW0gV29vZCwgSXNrcmVuIENoZXJuZXYsIE1vbWVudC5qcyBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgbW9tZW50anMuY29tXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgICAgICByZXR1cm4gaG9va0NhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBkb25lIHRvIHJlZ2lzdGVyIHRoZSBtZXRob2QgY2FsbGVkIHdpdGggbW9tZW50KClcbiAgICAvLyB3aXRob3V0IGNyZWF0aW5nIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICBmdW5jdGlvbiBzZXRIb29rQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBBcnJheSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgICAgIC8vIElFOCB3aWxsIHRyZWF0IHVuZGVmaW5lZCBhbmQgbnVsbCBhcyBvYmplY3QgaWYgaXQgd2Fzbid0IGZvclxuICAgICAgICAvLyBpbnB1dCAhPSBudWxsXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCAhPSBudWxsICYmXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBPYmplY3RdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc093blByb3AoYSwgYikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICBmb3IgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09IHZvaWQgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RhdGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwKGFyciwgZm4pIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGFyckxlbiA9IGFyci5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnJMZW47ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIHRydWUpLnV0YygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmF1bHRQYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZGVlcCBjbG9uZSB0aGlzIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtcHR5OiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VuczogW10sXG4gICAgICAgICAgICB1bnVzZWRJbnB1dDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdzogLTIsXG4gICAgICAgICAgICBjaGFyc0xlZnRPdmVyOiAwLFxuICAgICAgICAgICAgbnVsbElucHV0OiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRFcmE6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkTW9udGg6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0OiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgICBpc286IGZhbHNlLFxuICAgICAgICAgICAgcGFyc2VkRGF0ZVBhcnRzOiBbXSxcbiAgICAgICAgICAgIGVyYTogbnVsbCxcbiAgICAgICAgICAgIG1lcmlkaWVtOiBudWxsLFxuICAgICAgICAgICAgcmZjMjgyMjogZmFsc2UsXG4gICAgICAgICAgICB3ZWVrZGF5TWlzbWF0Y2g6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNpbmdGbGFncyhtKSB7XG4gICAgICAgIGlmIChtLl9wZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBtLl9wZiA9IGRlZmF1bHRQYXJzaW5nRmxhZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5fcGY7XG4gICAgfVxuXG4gICAgdmFyIHNvbWU7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgICAgIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzb21lID0gZnVuY3Rpb24gKGZ1bikge1xuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgaW4gdCAmJiBmdW4uY2FsbCh0aGlzLCB0W2ldLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkKG0pIHtcbiAgICAgICAgdmFyIGZsYWdzID0gbnVsbCxcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gZmFsc2UsXG4gICAgICAgICAgICBpc05vd1ZhbGlkID0gbS5fZCAmJiAhaXNOYU4obS5fZC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoaXNOb3dWYWxpZCkge1xuICAgICAgICAgICAgZmxhZ3MgPSBnZXRQYXJzaW5nRmxhZ3MobSk7XG4gICAgICAgICAgICBwYXJzZWRQYXJ0cyA9IHNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRFcmEgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZE1vbnRoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRXZWVrZGF5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLndlZWtkYXlNaXNtYXRjaCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5udWxsSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy51c2VySW52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAoIWZsYWdzLm1lcmlkaWVtIHx8IChmbGFncy5tZXJpZGllbSAmJiBwYXJzZWRQYXJ0cykpO1xuICAgICAgICAgICAgaWYgKG0uX3N0cmljdCkge1xuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgICAgICBpc05vd1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MudW51c2VkVG9rZW5zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5iaWdIb3VyID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbiA9PSBudWxsIHx8ICFPYmplY3QuaXNGcm96ZW4obSkpIHtcbiAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBpc05vd1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTm93VmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQbHVnaW5zIHRoYXQgYWRkIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYWRkIHRoZSBrZXkgaGVyZSAobnVsbCB2YWx1ZSksXG4gICAgLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IChob29rcy5tb21lbnRQcm9wZXJ0aWVzID0gW10pLFxuICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIG1vbWVudFByb3BlcnRpZXNMZW4gPSBtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXNMZW4gPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbW9tZW50UHJvcGVydGllc0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IG1vbWVudFByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgdmFsID0gZnJvbVtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIC8vIE1vbWVudCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xuICAgICAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShjb25maWcuX2QgIT0gbnVsbCA/IGNvbmZpZy5fZC5nZXRUaW1lKCkgOiBOYU4pO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XG4gICAgICAgIC8vIG9iamVjdHMuXG4gICAgICAgIGlmICh1cGRhdGVJblByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudChvYmopIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIE1vbWVudCB8fCAob2JqICE9IG51bGwgJiYgb2JqLl9pc0FNb21lbnRPYmplY3QgIT0gbnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuKG1zZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FyblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogJyArIG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGUobXNnLCBmbikge1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBhcmdMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdMZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gJ1xcblsnICsgaSArICddICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChhcmd1bWVudHNbMF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9IGtleSArICc6ICcgKyBhcmd1bWVudHNbMF1ba2V5XSArICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDAsIC0yKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFuZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICAgICBtc2cgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbkFyZ3VtZW50czogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKS5qb2luKCcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoKS5zdGFja1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgZm4pO1xuICAgIH1cblxuICAgIHZhciBkZXByZWNhdGlvbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCBtc2cpIHtcbiAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobmFtZSwgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZhbHNlO1xuICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodHlwZW9mIEZ1bmN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldChjb25maWcpIHtcbiAgICAgICAgdmFyIHByb3AsIGk7XG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNvbmZpZywgaSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0b1xuICAgICAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZSB8fCB0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSArXG4gICAgICAgICAgICAgICAgJ3wnICtcbiAgICAgICAgICAgICAgICAvXFxkezEsMn0vLnNvdXJjZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksXG4gICAgICAgICAgICBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gY2hpbGRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pICYmIGlzT2JqZWN0KGNoaWxkQ29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgY2hpbGRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChwYXJlbnRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGV4dGVuZCh7fSwgcmVzW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB6ZXJvRmlsbChudW1iZXIsIHRhcmdldExlbmd0aCwgZm9yY2VTaWduKSB7XG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgICAgICB6ZXJvc1RvRmlsbCA9IHRhcmdldExlbmd0aCAtIGFic051bWJlci5sZW5ndGgsXG4gICAgICAgICAgICBzaWduID0gbnVtYmVyID49IDA7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcbiAgICAgICAgICAgIE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCB6ZXJvc1RvRmlsbCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpICtcbiAgICAgICAgICAgIGFic051bWJlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0aW5nVG9rZW5zID1cbiAgICAgICAgICAgIC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98TnsxLDV9fFlZWVlZWXxZWVlZWXxZWVlZfFlZfHl7Miw0fXx5bz98Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csXG4gICAgICAgIGZvcm1hdEZ1bmN0aW9ucyA9IHt9LFxuICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgLy8gdG9rZW46ICAgICdNJ1xuICAgIC8vIHBhZGRlZDogICBbJ01NJywgMl1cbiAgICAvLyBvcmRpbmFsOiAgJ01vJ1xuICAgIC8vIGNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7IHRoaXMubW9udGgoKSArIDEgfVxuICAgIGZ1bmN0aW9uIGFkZEZvcm1hdFRva2VuKHRva2VuLCBwYWRkZWQsIG9yZGluYWwsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmdW5jID0gY2FsbGJhY2s7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2NhbGxiYWNrXSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZGRlZCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbcGFkZGVkWzBdXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gemVyb0ZpbGwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBwYWRkZWRbMV0sIHBhZGRlZFsyXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmRpbmFsKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1tvcmRpbmFsXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChcbiAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgICAgICB0b2tlblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQubWF0Y2goL1xcW1tcXHNcXFNdLykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIHZhciBhcnJheSA9IGZvcm1hdC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGFycmF5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobW9tKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gJycsXG4gICAgICAgICAgICAgICAgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKVxuICAgICAgICAgICAgICAgICAgICA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIDogYXJyYXlbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID1cbiAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdIHx8IG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGkgPSA1O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5sb25nRGF0ZUZvcm1hdChpbnB1dCkgfHwgaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBsb2NhbEZvcm1hdHRpbmdUb2tlbnMudGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMsXG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBpIC09IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQgPSB7XG4gICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgTDogJ01NL0REL1lZWVknLFxuICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0KGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSxcbiAgICAgICAgICAgIGZvcm1hdFVwcGVyID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5LnRvVXBwZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChmb3JtYXQgfHwgIWZvcm1hdFVwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSA9IGZvcm1hdFVwcGVyXG4gICAgICAgICAgICAubWF0Y2goZm9ybWF0dGluZ1Rva2VucylcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHRvaykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU1NTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ0REJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdkZGRkJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdEludmFsaWREYXRlID0gJ0ludmFsaWQgZGF0ZSc7XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmFsaWREYXRlO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0T3JkaW5hbCA9ICclZCcsXG4gICAgICAgIGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlID0gL1xcZHsxLDJ9LztcblxuICAgIGZ1bmN0aW9uIG9yZGluYWwobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICB3OiAnYSB3ZWVrJyxcbiAgICAgICAgd3c6ICclZCB3ZWVrcycsXG4gICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX3JlbGF0aXZlVGltZVtzdHJpbmddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpXG4gICAgICAgICAgICA/IG91dHB1dChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpXG4gICAgICAgICAgICA6IG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhc3RGdXR1cmUoZGlmZiwgb3V0cHV0KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbZGlmZiA+IDAgPyAnZnV0dXJlJyA6ICdwYXN0J107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGZvcm1hdCkgPyBmb3JtYXQob3V0cHV0KSA6IGZvcm1hdC5yZXBsYWNlKC8lcy9pLCBvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhbGlhc2VzID0ge1xuICAgICAgICBEOiAnZGF0ZScsXG4gICAgICAgIGRhdGVzOiAnZGF0ZScsXG4gICAgICAgIGRhdGU6ICdkYXRlJyxcbiAgICAgICAgZDogJ2RheScsXG4gICAgICAgIGRheXM6ICdkYXknLFxuICAgICAgICBkYXk6ICdkYXknLFxuICAgICAgICBlOiAnd2Vla2RheScsXG4gICAgICAgIHdlZWtkYXlzOiAnd2Vla2RheScsXG4gICAgICAgIHdlZWtkYXk6ICd3ZWVrZGF5JyxcbiAgICAgICAgRTogJ2lzb1dlZWtkYXknLFxuICAgICAgICBpc293ZWVrZGF5czogJ2lzb1dlZWtkYXknLFxuICAgICAgICBpc293ZWVrZGF5OiAnaXNvV2Vla2RheScsXG4gICAgICAgIERERDogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcnM6ICdkYXlPZlllYXInLFxuICAgICAgICBkYXlvZnllYXI6ICdkYXlPZlllYXInLFxuICAgICAgICBoOiAnaG91cicsXG4gICAgICAgIGhvdXJzOiAnaG91cicsXG4gICAgICAgIGhvdXI6ICdob3VyJyxcbiAgICAgICAgbXM6ICdtaWxsaXNlY29uZCcsXG4gICAgICAgIG1pbGxpc2Vjb25kczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmQ6ICdtaWxsaXNlY29uZCcsXG4gICAgICAgIG06ICdtaW51dGUnLFxuICAgICAgICBtaW51dGVzOiAnbWludXRlJyxcbiAgICAgICAgbWludXRlOiAnbWludXRlJyxcbiAgICAgICAgTTogJ21vbnRoJyxcbiAgICAgICAgbW9udGhzOiAnbW9udGgnLFxuICAgICAgICBtb250aDogJ21vbnRoJyxcbiAgICAgICAgUTogJ3F1YXJ0ZXInLFxuICAgICAgICBxdWFydGVyczogJ3F1YXJ0ZXInLFxuICAgICAgICBxdWFydGVyOiAncXVhcnRlcicsXG4gICAgICAgIHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmRzOiAnc2Vjb25kJyxcbiAgICAgICAgc2Vjb25kOiAnc2Vjb25kJyxcbiAgICAgICAgZ2c6ICd3ZWVrWWVhcicsXG4gICAgICAgIHdlZWt5ZWFyczogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXI6ICd3ZWVrWWVhcicsXG4gICAgICAgIEdHOiAnaXNvV2Vla1llYXInLFxuICAgICAgICBpc293ZWVreWVhcnM6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyOiAnaXNvV2Vla1llYXInLFxuICAgICAgICB3OiAnd2VlaycsXG4gICAgICAgIHdlZWtzOiAnd2VlaycsXG4gICAgICAgIHdlZWs6ICd3ZWVrJyxcbiAgICAgICAgVzogJ2lzb1dlZWsnLFxuICAgICAgICBpc293ZWVrczogJ2lzb1dlZWsnLFxuICAgICAgICBpc293ZWVrOiAnaXNvV2VlaycsXG4gICAgICAgIHk6ICd5ZWFyJyxcbiAgICAgICAgeWVhcnM6ICd5ZWFyJyxcbiAgICAgICAgeWVhcjogJ3llYXInLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVVbml0cyh1bml0cykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHVuaXRzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sXG4gICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgIHByb3A7XG5cbiAgICAgICAgZm9yIChwcm9wIGluIGlucHV0T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRJbnB1dDtcbiAgICB9XG5cbiAgICB2YXIgcHJpb3JpdGllcyA9IHtcbiAgICAgICAgZGF0ZTogOSxcbiAgICAgICAgZGF5OiAxMSxcbiAgICAgICAgd2Vla2RheTogMTEsXG4gICAgICAgIGlzb1dlZWtkYXk6IDExLFxuICAgICAgICBkYXlPZlllYXI6IDQsXG4gICAgICAgIGhvdXI6IDEzLFxuICAgICAgICBtaWxsaXNlY29uZDogMTYsXG4gICAgICAgIG1pbnV0ZTogMTQsXG4gICAgICAgIG1vbnRoOiA4LFxuICAgICAgICBxdWFydGVyOiA3LFxuICAgICAgICBzZWNvbmQ6IDE1LFxuICAgICAgICB3ZWVrWWVhcjogMSxcbiAgICAgICAgaXNvV2Vla1llYXI6IDEsXG4gICAgICAgIHdlZWs6IDUsXG4gICAgICAgIGlzb1dlZWs6IDUsXG4gICAgICAgIHllYXI6IDEsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldFByaW9yaXRpemVkVW5pdHModW5pdHNPYmopIHtcbiAgICAgICAgdmFyIHVuaXRzID0gW10sXG4gICAgICAgICAgICB1O1xuICAgICAgICBmb3IgKHUgaW4gdW5pdHNPYmopIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKHVuaXRzT2JqLCB1KSkge1xuICAgICAgICAgICAgICAgIHVuaXRzLnB1c2goeyB1bml0OiB1LCBwcmlvcml0eTogcHJpb3JpdGllc1t1XSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1bml0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdW5pdHM7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoMSA9IC9cXGQvLCAvLyAgICAgICAwIC0gOVxuICAgICAgICBtYXRjaDIgPSAvXFxkXFxkLywgLy8gICAgICAwMCAtIDk5XG4gICAgICAgIG1hdGNoMyA9IC9cXGR7M30vLCAvLyAgICAgMDAwIC0gOTk5XG4gICAgICAgIG1hdGNoNCA9IC9cXGR7NH0vLCAvLyAgICAwMDAwIC0gOTk5OVxuICAgICAgICBtYXRjaDYgPSAvWystXT9cXGR7Nn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMiA9IC9cXGRcXGQ/LywgLy8gICAgICAgMCAtIDk5XG4gICAgICAgIG1hdGNoM3RvNCA9IC9cXGRcXGRcXGRcXGQ/LywgLy8gICAgIDk5OSAtIDk5OTlcbiAgICAgICAgbWF0Y2g1dG82ID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vLCAvLyAgIDk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMyA9IC9cXGR7MSwzfS8sIC8vICAgICAgIDAgLSA5OTlcbiAgICAgICAgbWF0Y2gxdG80ID0gL1xcZHsxLDR9LywgLy8gICAgICAgMCAtIDk5OTlcbiAgICAgICAgbWF0Y2gxdG82ID0gL1srLV0/XFxkezEsNn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoVW5zaWduZWQgPSAvXFxkKy8sIC8vICAgICAgIDAgLSBpbmZcbiAgICAgICAgbWF0Y2hTaWduZWQgPSAvWystXT9cXGQrLywgLy8gICAgLWluZiAtIGluZlxuICAgICAgICBtYXRjaE9mZnNldCA9IC9afFsrLV1cXGRcXGQ6P1xcZFxcZC9naSwgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naSwgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hUaW1lc3RhbXAgPSAvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vLCAvLyAxMjM0NTY3ODkgMTIzNDU2Nzg5LjEyM1xuICAgICAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICAgICAgLy8gaW5jbHVkZXMgc2NvdHRpc2ggZ2FlbGljIHR3byB3b3JkIGFuZCBoeXBoZW5hdGVkIG1vbnRoc1xuICAgICAgICBtYXRjaFdvcmQgPVxuICAgICAgICAgICAgL1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksXG4gICAgICAgIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8gPSAvXlsxLTldXFxkPy8sIC8vICAgICAgICAgMS05OVxuICAgICAgICBtYXRjaDF0bzJIYXNaZXJvID0gL14oWzEtOV1cXGR8XFxkKS8sIC8vICAgICAgICAgICAwLTk5XG4gICAgICAgIHJlZ2V4ZXM7XG5cbiAgICByZWdleGVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRSZWdleFRva2VuKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KVxuICAgICAgICAgICAgPyByZWdleFxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpc1N0cmljdCAmJiBzdHJpY3RSZWdleCA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHJlZ2V4ZXMsIHRva2VuKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodW5lc2NhcGVGb3JtYXQodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWdleGVzW3Rva2VuXShjb25maWcuX3N0cmljdCwgY29uZmlnLl9sb2NhbGUpO1xuICAgIH1cblxuICAgIC8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjE0OTMvaXMtdGhlcmUtYS1yZWdleHAtZXNjYXBlLWZ1bmN0aW9uLWluLWphdmFzY3JpcHRcbiAgICBmdW5jdGlvbiB1bmVzY2FwZUZvcm1hdChzKSB7XG4gICAgICAgIHJldHVybiByZWdleEVzY2FwZShcbiAgICAgICAgICAgIHNcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxcXCcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvXFxcXChcXFspfFxcXFwoXFxdKXxcXFsoW15cXF1cXFtdKilcXF18XFxcXCguKS9nLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAobWF0Y2hlZCwgcDEsIHAyLCBwMywgcDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwMSB8fCBwMiB8fCBwMyB8fCBwNDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0Zsb29yKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgLy8gLTAgLT4gMFxuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpIHx8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JbnQoYXJndW1lbnRGb3JDb2VyY2lvbikge1xuICAgICAgICB2YXIgY29lcmNlZE51bWJlciA9ICthcmd1bWVudEZvckNvZXJjaW9uLFxuICAgICAgICAgICAgdmFsdWUgPSAwO1xuXG4gICAgICAgIGlmIChjb2VyY2VkTnVtYmVyICE9PSAwICYmIGlzRmluaXRlKGNvZXJjZWROdW1iZXIpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGFic0Zsb29yKGNvZXJjZWROdW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZnVuYyA9IGNhbGxiYWNrLFxuICAgICAgICAgICAgdG9rZW5MZW47XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0b2tlbiA9IFt0b2tlbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTnVtYmVyKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBhcnJheVtjYWxsYmFja10gPSB0b0ludChpbnB1dCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRva2VuTGVuID0gdG9rZW4ubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5MZW47IGkrKykge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuW2ldXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgY29uZmlnLl93ID0gY29uZmlnLl93IHx8IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2soaW5wdXQsIGNvbmZpZy5fdywgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBpbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGhhc093blByb3AodG9rZW5zLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbl0oaW5wdXQsIGNvbmZpZy5fYSwgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH1cblxuICAgIHZhciBZRUFSID0gMCxcbiAgICAgICAgTU9OVEggPSAxLFxuICAgICAgICBEQVRFID0gMixcbiAgICAgICAgSE9VUiA9IDMsXG4gICAgICAgIE1JTlVURSA9IDQsXG4gICAgICAgIFNFQ09ORCA9IDUsXG4gICAgICAgIE1JTExJU0VDT05EID0gNixcbiAgICAgICAgV0VFSyA9IDcsXG4gICAgICAgIFdFRUtEQVkgPSA4O1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyB6ZXJvRmlsbCh5LCA0KSA6ICcrJyArIHk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZJywgNF0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsIDVdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdZJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVknLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ1lZWVlZJywgJ1lZWVlZWSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9XG4gICAgICAgICAgICBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTtcbiAgICB9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFllYXIgPSBtYWtlR2V0U2V0KCdGdWxsWWVhcicsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNMZWFwWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXRTZXQodW5pdCwga2VlcFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzZXQkMSh0aGlzLCB1bml0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIGtlZXBUaW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQobW9tLCB1bml0KSB7XG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkID0gbW9tLl9kLFxuICAgICAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ01pbGxpc2Vjb25kcygpIDogZC5nZXRNaWxsaXNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ1NlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDU2Vjb25kcygpIDogZC5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgICBjYXNlICdNaW51dGVzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ01pbnV0ZXMoKSA6IGQuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDSG91cnMoKSA6IGQuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRGF0ZSgpIDogZC5nZXREYXRlKCk7XG4gICAgICAgICAgICBjYXNlICdEYXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRGF5KCkgOiBkLmdldERheSgpO1xuICAgICAgICAgICAgY2FzZSAnTW9udGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTW9udGgoKSA6IGQuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNVVEMgPyBkLmdldFVUQ0Z1bGxZZWFyKCkgOiBkLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBOYU47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0JDEobW9tLCB1bml0LCB2YWx1ZSkge1xuICAgICAgICB2YXIgZCwgaXNVVEMsIHllYXIsIG1vbnRoLCBkYXRlO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGQgPSBtb20uX2Q7XG4gICAgICAgIGlzVVRDID0gbW9tLl9pc1VUQztcblxuICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgICAgIGNhc2UgJ01pbGxpc2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDXG4gICAgICAgICAgICAgICAgICAgID8gZC5zZXRVVENNaWxsaXNlY29uZHModmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogZC5zZXRNaWxsaXNlY29uZHModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ1NlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDU2Vjb25kcyh2YWx1ZSkgOiBkLnNldFNlY29uZHModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDTWludXRlcyh2YWx1ZSkgOiBkLnNldE1pbnV0ZXModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0hvdXJzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ0hvdXJzKHZhbHVlKSA6IGQuc2V0SG91cnModmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF0ZSh2YWx1ZSkgOiBkLnNldERhdGUodmFsdWUpKTtcbiAgICAgICAgICAgIC8vIGNhc2UgJ0RheSc6IC8vIE5vdCByZWFsXG4gICAgICAgICAgICAvLyAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ0RheSh2YWx1ZSkgOiBkLnNldERheSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnTW9udGgnOiAvLyBOb3QgdXNlZCBiZWNhdXNlIHdlIG5lZWQgdG8gcGFzcyB0d28gdmFyaWFibGVzXG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNb250aCh2YWx1ZSkgOiBkLnNldE1vbnRoKHZhbHVlKSk7XG4gICAgICAgICAgICBjYXNlICdGdWxsWWVhcic6XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIFNlZSBiZWxvdyAuLi5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBKdXN0IGluIGNhc2VcbiAgICAgICAgfVxuXG4gICAgICAgIHllYXIgPSB2YWx1ZTtcbiAgICAgICAgbW9udGggPSBtb20ubW9udGgoKTtcbiAgICAgICAgZGF0ZSA9IG1vbS5kYXRlKCk7XG4gICAgICAgIGRhdGUgPSBkYXRlID09PSAyOSAmJiBtb250aCA9PT0gMSAmJiAhaXNMZWFwWWVhcih5ZWFyKSA/IDI4IDogZGF0ZTtcbiAgICAgICAgdm9pZCAoaXNVVENcbiAgICAgICAgICAgID8gZC5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF0ZSlcbiAgICAgICAgICAgIDogZC5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF0ZSkpO1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHN0cmluZ0dldCh1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTZXQodW5pdHMsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdW5pdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIHZhciBwcmlvcml0aXplZCA9IGdldFByaW9yaXRpemVkVW5pdHModW5pdHMpLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgcHJpb3JpdGl6ZWRMZW4gPSBwcmlvcml0aXplZC5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpb3JpdGl6ZWRMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXNbcHJpb3JpdGl6ZWRbaV0udW5pdF0odW5pdHNbcHJpb3JpdGl6ZWRbaV0udW5pdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vZChuLCB4KSB7XG4gICAgICAgIHJldHVybiAoKG4gJSB4KSArIHgpICUgeDtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXhPZjtcblxuICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xuICAgICAgICBpbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXhPZiA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAvLyBJIGtub3dcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tpXSA9PT0gbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgICAgaWYgKGlzTmFOKHllYXIpIHx8IGlzTmFOKG1vbnRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbW9kTW9udGggPSBtb2QobW9udGgsIDEyKTtcbiAgICAgICAgeWVhciArPSAobW9udGggLSBtb2RNb250aCkgLyAxMjtcbiAgICAgICAgcmV0dXJuIG1vZE1vbnRoID09PSAxXG4gICAgICAgICAgICA/IGlzTGVhcFllYXIoeWVhcilcbiAgICAgICAgICAgICAgICA/IDI5XG4gICAgICAgICAgICAgICAgOiAyOFxuICAgICAgICAgICAgOiAzMSAtICgobW9kTW9udGggJSA3KSAlIDIpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNJywgWydNTScsIDJdLCAnTW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoKCkgKyAxO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignTScsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignTU0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTScsICdNTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9IHRvSW50KGlucHV0KSAtIDE7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTU1NJywgJ01NTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbW9udGggPSBjb25maWcuX2xvY2FsZS5tb250aHNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgYSBtb250aCBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWQuXG4gICAgICAgIGlmIChtb250aCAhPSBudWxsKSB7XG4gICAgICAgICAgICBhcnJheVtNT05USF0gPSBtb250aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRNb250aCA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRocyA9XG4gICAgICAgICAgICAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQgPVxuICAgICAgICAgICAgJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICBNT05USFNfSU5fRk9STUFUID0gL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT8vLFxuICAgICAgICBkZWZhdWx0TW9udGhzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1JlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzWydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbXG4gICAgICAgICAgICAgICAgICAodGhpcy5fbW9udGhzLmlzRm9ybWF0IHx8IE1PTlRIU19JTl9GT1JNQVQpLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzU2hvcnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFtcbiAgICAgICAgICAgICAgICAgIE1PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IG1vbnRoTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkXG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRoc1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1BhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZS5jYWxsKHRoaXMsIG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogYWRkIHNvcnRpbmdcbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlclxuICAgICAgICAvLyBzZWUgc29ydGluZyBpbiBjb21wdXRlTW9udGhzUGFyc2VcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiAhdGhpcy5fbW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzZXRNb250aChtb20sIHZhbHVlKSB7XG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQW5vdGhlciBzaWxlbnQgZmFpbHVyZT9cbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtb250aCA9IHZhbHVlLFxuICAgICAgICAgICAgZGF0ZSA9IG1vbS5kYXRlKCk7XG5cbiAgICAgICAgZGF0ZSA9IGRhdGUgPCAyOSA/IGRhdGUgOiBNYXRoLm1pbihkYXRlLCBkYXlzSW5Nb250aChtb20ueWVhcigpLCBtb250aCkpO1xuICAgICAgICB2b2lkIChtb20uX2lzVVRDXG4gICAgICAgICAgICA/IG1vbS5fZC5zZXRVVENNb250aChtb250aCwgZGF0ZSlcbiAgICAgICAgICAgIDogbW9tLl9kLnNldE1vbnRoKG1vbnRoLCBkYXRlKSk7XG4gICAgICAgIHJldHVybiBtb207XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TW9udGgodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnTW9udGgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERheXNJbk1vbnRoKCkge1xuICAgICAgICByZXR1cm4gZGF5c0luTW9udGgodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBkZWZhdWx0TW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVNb250aHNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIHNob3J0UCxcbiAgICAgICAgICAgIGxvbmdQO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIHNob3J0UCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ1AgPSByZWdleEVzY2FwZSh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0UCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ1ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0UCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xuICAgICAgICAvLyBjYW4ndCBqdXN0IGFwcGx5KCkgdG8gY3JlYXRlIGEgZGF0ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSh5KSB7XG4gICAgICAgIHZhciBkYXRlLCBhcmdzO1xuICAgICAgICAvLyB0aGUgRGF0ZS5VVEMgZnVuY3Rpb24gcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgYXJnc1swXSA9IHkgKyA0MDA7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQtb2YtZmlyc3Qtd2VlayAtIHN0YXJ0LW9mLXllYXJcbiAgICBmdW5jdGlvbiBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIC8vIGZpcnN0LXdlZWsgZGF5IC0tIHdoaWNoIGphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrICg0IGZvciBpc28sIDEgZm9yIG90aGVyKVxuICAgICAgICAgICAgZndkID0gNyArIGRvdyAtIGRveSxcbiAgICAgICAgICAgIC8vIGZpcnN0LXdlZWsgZGF5IGxvY2FsIHdlZWtkYXkgLS0gd2hpY2ggbG9jYWwgd2Vla2RheSBpcyBmd2RcbiAgICAgICAgICAgIGZ3ZGx3ID0gKDcgKyBjcmVhdGVVVENEYXRlKHllYXIsIDAsIGZ3ZCkuZ2V0VVRDRGF5KCkgLSBkb3cpICUgNztcblxuICAgICAgICByZXR1cm4gLWZ3ZGx3ICsgZndkIC0gMTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlI0NhbGN1bGF0aW5nX2FfZGF0ZV9naXZlbl90aGVfeWVhci4yQ193ZWVrX251bWJlcl9hbmRfd2Vla2RheVxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgbG9jYWxXZWVrZGF5ID0gKDcgKyB3ZWVrZGF5IC0gZG93KSAlIDcsXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRheU9mWWVhciA9IDEgKyA3ICogKHdlZWsgLSAxKSArIGxvY2FsV2Vla2RheSArIHdlZWtPZmZzZXQsXG4gICAgICAgICAgICByZXNZZWFyLFxuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyO1xuXG4gICAgICAgIGlmIChkYXlPZlllYXIgPD0gMCkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgLSAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5c0luWWVhcihyZXNZZWFyKSArIGRheU9mWWVhcjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXIpKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciArIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXIgLSBkYXlzSW5ZZWFyKHllYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXI7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgICAgIGRheU9mWWVhcjogcmVzRGF5T2ZZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldChtb20ueWVhcigpLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrID0gTWF0aC5mbG9vcigobW9tLmRheU9mWWVhcigpIC0gd2Vla09mZnNldCAtIDEpIC8gNykgKyAxLFxuICAgICAgICAgICAgcmVzV2VlayxcbiAgICAgICAgICAgIHJlc1llYXI7XG5cbiAgICAgICAgaWYgKHdlZWsgPCAxKSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSAtIDE7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayArIHdlZWtzSW5ZZWFyKHJlc1llYXIsIGRvdywgZG95KTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrID4gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayAtIHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KTtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2VlazogcmVzV2VlayxcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla3NJblllYXIoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2Vla09mZnNldE5leHQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciArIDEsIGRvdywgZG95KTtcbiAgICAgICAgcmV0dXJuIChkYXlzSW5ZZWFyKHllYXIpIC0gd2Vla09mZnNldCArIHdlZWtPZmZzZXROZXh0KSAvIDc7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3cnLCBbJ3d3JywgMl0sICd3bycsICd3ZWVrJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ1cnLCBbJ1dXJywgMl0sICdXbycsICdpc29XZWVrJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCd3dycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdXJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ3cnLCAnd3cnLCAnVycsICdXVyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDEpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mV2VlaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdlJywgMCwgMCwgJ3dlZWtkYXknKTtcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdkJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdlJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdFJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNNaW5SZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkZCcsICdkZGQnLCAnZGRkZCddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIHdlZWtkYXkgPSBjb25maWcuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgd2Vla2RheSBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWRcbiAgICAgICAgaWYgKHdlZWtkYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2Vlay5kID0gd2Vla2RheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRXZWVrZGF5ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZCcsICdlJywgJ0UnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0ID0gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VJc29XZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCkgJSA3IHx8IDc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTmFOKGlucHV0KSA/IG51bGwgOiBpbnB1dDtcbiAgICB9XG5cbiAgICAvLyBMT0NBTEVTXG4gICAgZnVuY3Rpb24gc2hpZnRXZWVrZGF5cyh3cywgbikge1xuICAgICAgICByZXR1cm4gd3Muc2xpY2UobiwgNykuY29uY2F0KHdzLnNsaWNlKDAsIG4pKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzID1cbiAgICAgICAgICAgICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQgPSAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4gPSAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1JlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNNaW5SZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKVxuICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1xuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1tcbiAgICAgICAgICAgICAgICAgIG0gJiYgbSAhPT0gdHJ1ZSAmJiB0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh3ZWVrZGF5cywgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB3ZWVrZGF5c1ttLmRheSgpXVxuICAgICAgICAgICAgICA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzU2hvcnQobSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzU2hvcnQsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXVxuICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNNaW4obSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzTWluLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IHdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNNaW4oXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1BhcnNlKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UkMS5jYWxsKHRoaXMsIHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuXG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXMobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRheSA9IGdldCh0aGlzLCAnRGF5Jyk7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHBhcnNlV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGlucHV0IC0gZGF5LCAnZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRheTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldExvY2FsZURheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdlZWtkYXkgPSAodGhpcy5kYXkoKSArIDcgLSB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpICUgNztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrZGF5IDogdGhpcy5hZGQoaW5wdXQgLSB3ZWVrZGF5LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT0RheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vbWVudCNkYXkgZXhjZXB0XG4gICAgICAgIC8vIGFzIGEgZ2V0dGVyLCByZXR1cm5zIDcgaW5zdGVhZCBvZiAwICgxLTcgcmFuZ2UgaW5zdGVhZCBvZiAwLTYpXG4gICAgICAgIC8vIGFzIGEgc2V0dGVyLCBzdW5kYXkgc2hvdWxkIGJlbG9uZyB0byB0aGUgcHJldmlvdXMgd2Vlay5cblxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHdlZWtkYXkgPSBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSh0aGlzLmRheSgpICUgNyA/IHdlZWtkYXkgOiB3ZWVrZGF5IC0gNyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSB8fCA3O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzTWluUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSBkZWZhdWx0V2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZVdlZWtkYXlzUGFyc2UoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5QaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIG1pbnAsXG4gICAgICAgICAgICBzaG9ydHAsXG4gICAgICAgICAgICBsb25ncDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBtaW5wID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c01pbihtb20sICcnKSk7XG4gICAgICAgICAgICBzaG9ydHAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ3AgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1pblBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIHdlZWtkYXkgKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBtaW5QaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbWluUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIGhGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgJSAxMiB8fCAxMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpIHx8IDI0O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdIJywgWydISCcsIDJdLCAwLCAnaG91cicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdoJywgWydoaCcsIDJdLCAwLCBoRm9ybWF0KTtcbiAgICBhZGRGb3JtYXRUb2tlbignaycsIFsna2snLCAyXSwgMCwga0Zvcm1hdCk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgaEZvcm1hdC5hcHBseSh0aGlzKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyB0aGlzLmhvdXJzKCkgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICB0aGlzLmhvdXJzKCkgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW0odG9rZW4sIGxvd2VyY2FzZSkge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKFxuICAgICAgICAgICAgICAgIHRoaXMuaG91cnMoKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgICAgICBsb3dlcmNhc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lcmlkaWVtKCdhJywgdHJ1ZSk7XG4gICAgbWVyaWRpZW0oJ0EnLCBmYWxzZSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBmdW5jdGlvbiBtYXRjaE1lcmlkaWVtKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fbWVyaWRpZW1QYXJzZTtcbiAgICB9XG5cbiAgICBhZGRSZWdleFRva2VuKCdhJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignQScsIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0gnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMkhhc1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2gnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2snLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0hIJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2hoJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2trJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignaG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdobW1zcycsIG1hdGNoNXRvNik7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW1zcycsIG1hdGNoNXRvNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnSCcsICdISCddLCBIT1VSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaycsICdrayddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIGtJbnB1dCA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSBrSW5wdXQgPT09IDI0ID8gMCA6IGtJbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnYScsICdBJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2lzUG0gPSBjb25maWcuX2xvY2FsZS5pc1BNKGlucHV0KTtcbiAgICAgICAgY29uZmlnLl9tZXJpZGllbSA9IGlucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydoJywgJ2hoJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgICAgIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUlzUE0oaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IFF1aXJrcyBNb2RlICYgSUU3IFN0YW5kYXJkcyBNb2RlIGRvIG5vdCBhbGxvdyBhY2Nlc3Npbmcgc3RyaW5ncyBsaWtlIGFycmF5c1xuICAgICAgICAvLyBVc2luZyBjaGFyQXQgc2hvdWxkIGJlIG1vcmUgY29tcGF0aWJsZS5cbiAgICAgICAgcmV0dXJuIChpbnB1dCArICcnKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSA9PT0gJ3AnO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSA9IC9bYXBdXFwuP20/XFwuPy9pLFxuICAgICAgICAvLyBTZXR0aW5nIHRoZSBob3VyIHNob3VsZCBrZWVwIHRoZSB0aW1lLCBiZWNhdXNlIHRoZSB1c2VyIGV4cGxpY2l0bHlcbiAgICAgICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgdGhleSB3YW50LiBTbyB0cnlpbmcgdG8gbWFpbnRhaW4gdGhlIHNhbWUgaG91ciAoaW5cbiAgICAgICAgLy8gYSBuZXcgdGltZXpvbmUpIG1ha2VzIHNlbnNlLiBBZGRpbmcvc3VidHJhY3RpbmcgaG91cnMgZG9lcyBub3QgZm9sbG93XG4gICAgICAgIC8vIHRoaXMgcnVsZS5cbiAgICAgICAgZ2V0U2V0SG91ciA9IG1ha2VHZXRTZXQoJ0hvdXJzJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNZXJpZGllbShob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncG0nIDogJ1BNJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2FtJyA6ICdBTSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYmFzZUNvbmZpZyA9IHtcbiAgICAgICAgY2FsZW5kYXI6IGRlZmF1bHRDYWxlbmRhcixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IGRlZmF1bHRMb25nRGF0ZUZvcm1hdCxcbiAgICAgICAgaW52YWxpZERhdGU6IGRlZmF1bHRJbnZhbGlkRGF0ZSxcbiAgICAgICAgb3JkaW5hbDogZGVmYXVsdE9yZGluYWwsXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlLFxuICAgICAgICByZWxhdGl2ZVRpbWU6IGRlZmF1bHRSZWxhdGl2ZVRpbWUsXG5cbiAgICAgICAgbW9udGhzOiBkZWZhdWx0TG9jYWxlTW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LFxuXG4gICAgICAgIHdlZWs6IGRlZmF1bHRMb2NhbGVXZWVrLFxuXG4gICAgICAgIHdlZWtkYXlzOiBkZWZhdWx0TG9jYWxlV2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LFxuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlLFxuICAgIH07XG5cbiAgICAvLyBpbnRlcm5hbCBzdG9yYWdlIGZvciBsb2NhbGUgY29uZmlnIGZpbGVzXG4gICAgdmFyIGxvY2FsZXMgPSB7fSxcbiAgICAgICAgbG9jYWxlRmFtaWxpZXMgPSB7fSxcbiAgICAgICAgZ2xvYmFsTG9jYWxlO1xuXG4gICAgZnVuY3Rpb24gY29tbW9uUHJlZml4KGFycjEsIGFycjIpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBtaW5sID0gTWF0aC5taW4oYXJyMS5sZW5ndGgsIGFycjIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG1pbmw7IGkgKz0gMSkge1xuICAgICAgICAgICAgaWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlubDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVMb2NhbGUoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgPyBrZXkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdfJywgJy0nKSA6IGtleTtcbiAgICB9XG5cbiAgICAvLyBwaWNrIHRoZSBsb2NhbGUgZnJvbSB0aGUgYXJyYXlcbiAgICAvLyB0cnkgWydlbi1hdScsICdlbi1nYiddIGFzICdlbi1hdScsICdlbi1nYicsICdlbicsIGFzIGluIG1vdmUgdGhyb3VnaCB0aGUgbGlzdCB0cnlpbmcgZWFjaFxuICAgIC8vIHN1YnN0cmluZyBmcm9tIG1vc3Qgc3BlY2lmaWMgdG8gbGVhc3QsIGJ1dCBtb3ZlIHRvIHRoZSBuZXh0IGFycmF5IGl0ZW0gaWYgaXQncyBhIG1vcmUgc3BlY2lmaWMgdmFyaWFudCB0aGFuIHRoZSBjdXJyZW50IHJvb3RcbiAgICBmdW5jdGlvbiBjaG9vc2VMb2NhbGUobmFtZXMpIHtcbiAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgaixcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBzcGxpdDtcblxuICAgICAgICB3aGlsZSAoaSA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3BsaXQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaV0pLnNwbGl0KCctJyk7XG4gICAgICAgICAgICBqID0gc3BsaXQubGVuZ3RoO1xuICAgICAgICAgICAgbmV4dCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpICsgMV0pO1xuICAgICAgICAgICAgbmV4dCA9IG5leHQgPyBuZXh0LnNwbGl0KCctJykgOiBudWxsO1xuICAgICAgICAgICAgd2hpbGUgKGogPiAwKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShzcGxpdC5zbGljZSgwLCBqKS5qb2luKCctJykpO1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBuZXh0ICYmXG4gICAgICAgICAgICAgICAgICAgIG5leHQubGVuZ3RoID49IGogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uUHJlZml4KHNwbGl0LCBuZXh0KSA+PSBqIC0gMVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvL3RoZSBuZXh0IGFycmF5IGl0ZW0gaXMgYmV0dGVyIHRoYW4gYSBzaGFsbG93ZXIgc3Vic3RyaW5nIG9mIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsZU5hbWVTYW5lKG5hbWUpIHtcbiAgICAgICAgLy8gUHJldmVudCBuYW1lcyB0aGF0IGxvb2sgbGlrZSBmaWxlc3lzdGVtIHBhdGhzLCBpLmUgY29udGFpbiAnLycgb3IgJ1xcJ1xuICAgICAgICAvLyBFbnN1cmUgbmFtZSBpcyBhdmFpbGFibGUgYW5kIGZ1bmN0aW9uIHJldHVybnMgYm9vbGVhblxuICAgICAgICByZXR1cm4gISEobmFtZSAmJiBuYW1lLm1hdGNoKCdeW14vXFxcXFxcXFxdKiQnKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZExvY2FsZShuYW1lKSB7XG4gICAgICAgIHZhciBvbGRMb2NhbGUgPSBudWxsLFxuICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmU7XG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIG1vZHVsZSAmJlxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgJiZcbiAgICAgICAgICAgIGlzTG9jYWxlTmFtZVNhbmUobmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUoJy4vbG9jYWxlLycgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUob2xkTG9jYWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGFzIG5vdCBmb3VuZCB0byBhdm9pZCByZXBlYXRpbmcgZXhwZW5zaXZlIGZpbGUgcmVxdWlyZSBjYWxsIGNhdXNpbmcgaGlnaCBDUFVcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBmaW5kIGVuLVVTLCBlbl9VUywgZW4tdXMgZm9yIGV2ZXJ5IGZvcm1hdCBjYWxsXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG51bGw7IC8vIG51bGwgbWVhbnMgbm90IGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGxvYWQgbG9jYWxlIGFuZCB0aGVuIHNldCB0aGUgZ2xvYmFsIGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIGZ1bmN0aW9uIGdldFNldEdsb2JhbExvY2FsZShrZXksIHZhbHVlcykge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vd2FybiB1c2VyIGlmIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGJ1dCB0aGUgbG9jYWxlIGNvdWxkIG5vdCBiZSBzZXRcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0xvY2FsZSAnICsga2V5ICsgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/J1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmaW5lTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICAnZGVmaW5lTG9jYWxlT3ZlcnJpZGUnLFxuICAgICAgICAgICAgICAgICAgICAndXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tuYW1lXS5fY29uZmlnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0uX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGNvbmZpZy5wYXJlbnRMb2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBuZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZykpO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlRmFtaWxpZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZUxvY2FsZSh4Lm5hbWUsIHguY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBsb2NhbGUgQUZURVIgYWxsIGNoaWxkIGxvY2FsZXMgaGF2ZSBiZWVuXG4gICAgICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB1c2VmdWwgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcblxuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCAmJiBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNoaWxkIGxvY2FsZSBpbi1wbGFjZSB0byBhdm9pZCBtZW1vcnktbGVha3NcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdLnNldChtZXJnZUNvbmZpZ3MobG9jYWxlc1tuYW1lXS5fY29uZmlnLCBjb25maWcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTUVSR0VcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUgPSBsb2FkTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSB0bXBMb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uZmlnID0gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlTG9jYWxlIGlzIGNhbGxlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBhYmJyIHNvIGl0IHdpbGwgaGF2ZSBhIG5hbWUgKGdldHRlcnMgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBvdGhlcndpc2UpLlxuICAgICAgICAgICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgICAgICBsb2NhbGUucGFyZW50TG9jYWxlID0gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHBhc3MgbnVsbCBmb3IgY29uZmlnIHRvIHVudXBkYXRlLCB1c2VmdWwgZm9yIHRlc3RzXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZ2V0U2V0R2xvYmFsTG9jYWxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxvY2FsZSBkYXRhXG4gICAgZnVuY3Rpb24gZ2V0TG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbG9jYWxlO1xuXG4gICAgICAgIGlmIChrZXkgJiYga2V5Ll9sb2NhbGUgJiYga2V5Ll9sb2NhbGUuX2FiYnIpIHtcbiAgICAgICAgICAgIGtleSA9IGtleS5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAgLy9zaG9ydC1jaXJjdWl0IGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXkgPSBba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaG9vc2VMb2NhbGUoa2V5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TG9jYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIGtleXMobG9jYWxlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tPdmVyZmxvdyhtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdyxcbiAgICAgICAgICAgIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSA8IDAgfHwgYVtNT05USF0gPiAxMVxuICAgICAgICAgICAgICAgICAgICA/IE1PTlRIXG4gICAgICAgICAgICAgICAgICAgIDogYVtEQVRFXSA8IDEgfHwgYVtEQVRFXSA+IGRheXNJbk1vbnRoKGFbWUVBUl0sIGFbTU9OVEhdKVxuICAgICAgICAgICAgICAgICAgICAgID8gREFURVxuICAgICAgICAgICAgICAgICAgICAgIDogYVtIT1VSXSA8IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYVtIT1VSXSA+IDI0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIChhW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbTUlOVVRFXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbU0VDT05EXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbTUlMTElTRUNPTkRdICE9PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gSE9VUlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhW01JTlVURV0gPCAwIHx8IGFbTUlOVVRFXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gTUlOVVRFXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYVtTRUNPTkRdIDwgMCB8fCBhW1NFQ09ORF0gPiA1OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gU0VDT05EXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW01JTExJU0VDT05EXSA8IDAgfHwgYVtNSUxMSVNFQ09ORF0gPiA5OTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUlMTElTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93RGF5T2ZZZWFyICYmXG4gICAgICAgICAgICAgICAgKG92ZXJmbG93IDwgWUVBUiB8fCBvdmVyZmxvdyA+IERBVEUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtzICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFSztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla2RheSAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUtEQVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gaXNvIDg2MDEgcmVnZXhcbiAgICAvLyAwMDAwLTAwLTAwIDAwMDAtVzAwIG9yIDAwMDAtVzAwLTAgKyBUICsgMDAgb3IgMDA6MDAgb3IgMDA6MDA6MDAgb3IgMDA6MDA6MDAuMDAwICsgKzAwOjAwIG9yICswMDAwIG9yICswMClcbiAgICB2YXIgZXh0ZW5kZWRJc29SZWdleCA9XG4gICAgICAgICAgICAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICAgICAgYmFzaWNJc29SZWdleCA9XG4gICAgICAgICAgICAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pKD86XFxkXFxkXFxkXFxkfFdcXGRcXGRcXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkfCkpKD86KFR8ICkoXFxkXFxkKD86XFxkXFxkKD86XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICB0elJlZ2V4ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vLFxuICAgICAgICBpc29EYXRlcyA9IFtcbiAgICAgICAgICAgIFsnWVlZWVlZLU1NLUREJywgL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydZWVlZLU1NLUREJywgL1xcZHs0fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cXGR7NH0tV1xcZFxcZC1cXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVycsIC9cXGR7NH0tV1xcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWS1EREQnLCAvXFxkezR9LVxcZHszfS9dLFxuICAgICAgICAgICAgWydZWVlZLU1NJywgL1xcZHs0fS1cXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlZWU1NREQnLCAvWystXVxcZHsxMH0vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NREQnLCAvXFxkezh9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XV0UnLCAvXFxkezR9V1xcZHszfS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1cnLCAvXFxkezR9V1xcZHsyfS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWURERCcsIC9cXGR7N30vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NJywgL1xcZHs2fS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWScsIC9cXGR7NH0vLCBmYWxzZV0sXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGlzbyB0aW1lIGZvcm1hdHMgYW5kIHJlZ2V4ZXNcbiAgICAgICAgaXNvVGltZXMgPSBbXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLlNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLFNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISDptbScsIC9cXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW1zcy5TU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLFNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzJywgL1xcZFxcZFxcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tJywgL1xcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISCcsIC9cXGRcXGQvXSxcbiAgICAgICAgXSxcbiAgICAgICAgYXNwTmV0SnNvblJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2ksXG4gICAgICAgIC8vIFJGQyAyODIyIHJlZ2V4OiBGb3IgZGV0YWlscyBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4MjIjc2VjdGlvbi0zLjNcbiAgICAgICAgcmZjMjgyMiA9XG4gICAgICAgICAgICAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9cXHMpPyhcXGR7MSwyfSlcXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXFxzKFxcZHsyLDR9KVxccyhcXGRcXGQpOihcXGRcXGQpKD86OihcXGRcXGQpKT9cXHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cXGR7NH0pKSQvLFxuICAgICAgICBvYnNPZmZzZXRzID0ge1xuICAgICAgICAgICAgVVQ6IDAsXG4gICAgICAgICAgICBHTVQ6IDAsXG4gICAgICAgICAgICBFRFQ6IC00ICogNjAsXG4gICAgICAgICAgICBFU1Q6IC01ICogNjAsXG4gICAgICAgICAgICBDRFQ6IC01ICogNjAsXG4gICAgICAgICAgICBDU1Q6IC02ICogNjAsXG4gICAgICAgICAgICBNRFQ6IC02ICogNjAsXG4gICAgICAgICAgICBNU1Q6IC03ICogNjAsXG4gICAgICAgICAgICBQRFQ6IC03ICogNjAsXG4gICAgICAgICAgICBQU1Q6IC04ICogNjAsXG4gICAgICAgIH07XG5cbiAgICAvLyBkYXRlIGZyb20gaXNvIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JU08oY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIG1hdGNoID0gZXh0ZW5kZWRJc29SZWdleC5leGVjKHN0cmluZykgfHwgYmFzaWNJc29SZWdleC5leGVjKHN0cmluZyksXG4gICAgICAgICAgICBhbGxvd1RpbWUsXG4gICAgICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICAgICAgdGltZUZvcm1hdCxcbiAgICAgICAgICAgIHR6Rm9ybWF0LFxuICAgICAgICAgICAgaXNvRGF0ZXNMZW4gPSBpc29EYXRlcy5sZW5ndGgsXG4gICAgICAgICAgICBpc29UaW1lc0xlbiA9IGlzb1RpbWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmlzbyA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvRGF0ZXNMZW47IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNvRGF0ZXNbaV1bMV0uZXhlYyhtYXRjaFsxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IGlzb0RhdGVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICBhbGxvd1RpbWUgPSBpc29EYXRlc1tpXVsyXSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvVGltZXNMZW47IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzb1RpbWVzW2ldWzFdLmV4ZWMobWF0Y2hbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaFsyXSBzaG91bGQgYmUgJ1QnIG9yIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0ID0gKG1hdGNoWzJdIHx8ICcgJykgKyBpc29UaW1lc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFsbG93VGltZSAmJiB0aW1lRm9ybWF0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbNF0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHpSZWdleC5leGVjKG1hdGNoWzRdKSkge1xuICAgICAgICAgICAgICAgICAgICB0ekZvcm1hdCA9ICdaJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZy5fZiA9IGRhdGVGb3JtYXQgKyAodGltZUZvcm1hdCB8fCAnJykgKyAodHpGb3JtYXQgfHwgJycpO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICB5ZWFyU3RyLFxuICAgICAgICBtb250aFN0cixcbiAgICAgICAgZGF5U3RyLFxuICAgICAgICBob3VyU3RyLFxuICAgICAgICBtaW51dGVTdHIsXG4gICAgICAgIHNlY29uZFN0clxuICAgICkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW1xuICAgICAgICAgICAgdW50cnVuY2F0ZVllYXIoeWVhclN0ciksXG4gICAgICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0ciksXG4gICAgICAgICAgICBwYXJzZUludChkYXlTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGhvdXJTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbnV0ZVN0ciwgMTApLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChzZWNvbmRTdHIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlSW50KHNlY29uZFN0ciwgMTApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhclN0cikge1xuICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KHllYXJTdHIsIDEwKTtcbiAgICAgICAgaWYgKHllYXIgPD0gNDkpIHtcbiAgICAgICAgICAgIHJldHVybiAyMDAwICsgeWVhcjtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyIDw9IDk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIDE5MDAgKyB5ZWFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXByb2Nlc3NSRkMyODIyKHMpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGNvbW1lbnRzIGFuZCBmb2xkaW5nIHdoaXRlc3BhY2UgYW5kIHJlcGxhY2UgbXVsdGlwbGUtc3BhY2VzIHdpdGggYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgcmV0dXJuIHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXigpXSpcXCl8W1xcblxcdF0vZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvXlxcc1xccyovLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1dlZWtkYXkod2Vla2RheVN0ciwgcGFyc2VkSW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAod2Vla2RheVN0cikge1xuICAgICAgICAgICAgLy8gVE9ETzogUmVwbGFjZSB0aGUgdmFuaWxsYSBKUyBEYXRlIG9iamVjdCB3aXRoIGFuIGluZGVwZW5kZW50IGRheS1vZi13ZWVrIGNoZWNrLlxuICAgICAgICAgICAgdmFyIHdlZWtkYXlQcm92aWRlZCA9IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0ciksXG4gICAgICAgICAgICAgICAgd2Vla2RheUFjdHVhbCA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFswXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMV0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzJdXG4gICAgICAgICAgICAgICAgKS5nZXREYXkoKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5UHJvdmlkZWQgIT09IHdlZWtkYXlBY3R1YWwpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVPZmZzZXQob2JzT2Zmc2V0LCBtaWxpdGFyeU9mZnNldCwgbnVtT2Zmc2V0KSB7XG4gICAgICAgIGlmIChvYnNPZmZzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNPZmZzZXRzW29ic09mZnNldF07XG4gICAgICAgIH0gZWxzZSBpZiAobWlsaXRhcnlPZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGFsbG93ZWQgbWlsaXRhcnkgdHogaXMgWlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBwYXJzZUludChudW1PZmZzZXQsIDEwKSxcbiAgICAgICAgICAgICAgICBtID0gaG0gJSAxMDAsXG4gICAgICAgICAgICAgICAgaCA9IChobSAtIG0pIC8gMTAwO1xuICAgICAgICAgICAgcmV0dXJuIGggKiA2MCArIG07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGFuZCB0aW1lIGZyb20gcmVmIDI4MjIgZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHJmYzI4MjIuZXhlYyhwcmVwcm9jZXNzUkZDMjgyMihjb25maWcuX2kpKSxcbiAgICAgICAgICAgIHBhcnNlZEFycmF5O1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHBhcnNlZEFycmF5ID0gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgICAgICAgICBtYXRjaFs0XSxcbiAgICAgICAgICAgICAgICBtYXRjaFszXSxcbiAgICAgICAgICAgICAgICBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICBtYXRjaFs1XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs2XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs3XVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghY2hlY2tXZWVrZGF5KG1hdGNoWzFdLCBwYXJzZWRBcnJheSwgY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uZmlnLl9hID0gcGFyc2VkQXJyYXk7XG4gICAgICAgICAgICBjb25maWcuX3R6bSA9IGNhbGN1bGF0ZU9mZnNldChtYXRjaFs4XSwgbWF0Y2hbOV0sIG1hdGNoWzEwXSk7XG5cbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGNyZWF0ZVVUQ0RhdGUuYXBwbHkobnVsbCwgY29uZmlnLl9hKTtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnJmYzI4MjIgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gMSkgQVNQLk5FVCwgMikgSVNPLCAzKSBSRkMgMjgyMiBmb3JtYXRzLCBvciA0KSBvcHRpb25hbCBmYWxsYmFjayBpZiBwYXJzaW5nIGlzbid0IHN0cmljdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gYXNwTmV0SnNvblJlZ2V4LmV4ZWMoY29uZmlnLl9pKTtcbiAgICAgICAgaWYgKG1hdGNoZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX3N0cmljdCkge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaW5hbCBhdHRlbXB0LCB1c2UgSW5wdXQgRmFsbGJhY2tcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3ZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCAnICtcbiAgICAgICAgICAgICd3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlICcgK1xuICAgICAgICAgICAgJ2Rpc2NvdXJhZ2VkLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLicsXG4gICAgICAgIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5faSArIChjb25maWcuX3VzZVVUQyA/ICcgVVRDJyA6ICcnKSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxuICAgIGZ1bmN0aW9uIGRlZmF1bHRzKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3VycmVudERhdGVBcnJheShjb25maWcpIHtcbiAgICAgICAgLy8gaG9va3MgaXMgYWN0dWFsbHkgdGhlIGV4cG9ydGVkIG1vbWVudCBvYmplY3RcbiAgICAgICAgdmFyIG5vd1ZhbHVlID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENNb250aCgpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtub3dWYWx1ZS5nZXRGdWxsWWVhcigpLCBub3dWYWx1ZS5nZXRNb250aCgpLCBub3dWYWx1ZS5nZXREYXRlKCldO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBkYXRlLlxuICAgIC8vIHRoZSBhcnJheSBzaG91bGQgbWlycm9yIHRoZSBwYXJhbWV0ZXJzIGJlbG93XG4gICAgLy8gbm90ZTogYWxsIHZhbHVlcyBwYXN0IHRoZSB5ZWFyIGFyZSBvcHRpb25hbCBhbmQgd2lsbCBkZWZhdWx0IHRvIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUuXG4gICAgLy8gW3llYXIsIG1vbnRoLCBkYXkgLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBpbnB1dCA9IFtdLFxuICAgICAgICAgICAgY3VycmVudERhdGUsXG4gICAgICAgICAgICBleHBlY3RlZFdlZWtkYXksXG4gICAgICAgICAgICB5ZWFyVG9Vc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZyk7XG5cbiAgICAgICAgLy9jb21wdXRlIGRheSBvZiB0aGUgeWVhciBmcm9tIHdlZWtzIGFuZCB3ZWVrZGF5c1xuICAgICAgICBpZiAoY29uZmlnLl93ICYmIGNvbmZpZy5fYVtEQVRFXSA9PSBudWxsICYmIGNvbmZpZy5fYVtNT05USF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHRoZSBkYXkgb2YgdGhlIHllYXIgaXMgc2V0LCBmaWd1cmUgb3V0IHdoYXQgaXQgaXNcbiAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHllYXJUb1VzZSA9IGRlZmF1bHRzKGNvbmZpZy5fYVtZRUFSXSwgY3VycmVudERhdGVbWUVBUl0pO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXJUb1VzZSkgfHxcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7XG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgY29uZmlnLl9hW0RBVEVdID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheVxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxuICAgICAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmdcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFplcm8gb3V0IHdoYXRldmVyIHdhcyBub3QgZGVmYXVsdGVkLCBpbmNsdWRpbmcgdGltZVxuICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9PSBudWxsID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSU5VVEVdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTExJU0VDT05EXSA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdGVkV2Vla2RheSA9IGNvbmZpZy5fdXNlVVRDXG4gICAgICAgICAgICA/IGNvbmZpZy5fZC5nZXRVVENEYXkoKVxuICAgICAgICAgICAgOiBjb25maWcuX2QuZ2V0RGF5KCk7XG5cbiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgICAgIC8vIHdpdGggcGFyc2Vab25lLlxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX25leHREYXkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIG1pc21hdGNoaW5nIGRheSBvZiB3ZWVrXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fdyAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbmZpZy5fdy5kICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uZmlnLl93LmQgIT09IGV4cGVjdGVkV2Vla2RheVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKSB7XG4gICAgICAgIHZhciB3LCB3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3ksIHRlbXAsIHdlZWtkYXlPdmVyZmxvdywgY3VyV2VlaztcblxuICAgICAgICB3ID0gY29uZmlnLl93O1xuICAgICAgICBpZiAody5HRyAhPSBudWxsIHx8IHcuVyAhPSBudWxsIHx8IHcuRSAhPSBudWxsKSB7XG4gICAgICAgICAgICBkb3cgPSAxO1xuICAgICAgICAgICAgZG95ID0gNDtcblxuICAgICAgICAgICAgLy8gVE9ETzogV2UgbmVlZCB0byB0YWtlIHRoZSBjdXJyZW50IGlzb1dlZWtZZWFyLCBidXQgdGhhdCBkZXBlbmRzIG9uXG4gICAgICAgICAgICAvLyBob3cgd2UgaW50ZXJwcmV0IG5vdyAobG9jYWwsIHV0YywgZml4ZWQgb2Zmc2V0KS4gU28gY3JlYXRlXG4gICAgICAgICAgICAvLyBhIG5vdyB2ZXJzaW9uIG9mIGN1cnJlbnQgY29uZmlnICh0YWtlIGxvY2FsL3V0Yy9vZmZzZXQgZmxhZ3MsIGFuZFxuICAgICAgICAgICAgLy8gY3JlYXRlIG5vdykuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKFxuICAgICAgICAgICAgICAgIHcuR0csXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdLFxuICAgICAgICAgICAgICAgIHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgMSwgNCkueWVhclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LlcsIDEpO1xuICAgICAgICAgICAgd2Vla2RheSA9IGRlZmF1bHRzKHcuRSwgMSk7XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IDEgfHwgd2Vla2RheSA+IDcpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG93ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG93O1xuICAgICAgICAgICAgZG95ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG95O1xuXG4gICAgICAgICAgICBjdXJXZWVrID0gd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCBkb3csIGRveSk7XG5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5nZywgY29uZmlnLl9hW1lFQVJdLCBjdXJXZWVrLnllYXIpO1xuXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgd2Vlay5cbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LncsIGN1cldlZWsud2Vlayk7XG5cbiAgICAgICAgICAgIGlmICh3LmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIHdlZWtkYXkgLS0gbG93IGRheSBudW1iZXJzIGFyZSBjb25zaWRlcmVkIG5leHQgd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmQ7XG4gICAgICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAwIHx8IHdlZWtkYXkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh3LmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGxvY2FsIHdlZWtkYXkgLS0gY291bnRpbmcgc3RhcnRzIGZyb20gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5lICsgZG93O1xuICAgICAgICAgICAgICAgIGlmICh3LmUgPCAwIHx8IHcuZSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gZG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3ZWVrIDwgMSB8fCB3ZWVrID4gd2Vla3NJblllYXIod2Vla1llYXIsIGRvdywgZG95KSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla3MgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWtkYXlPdmVyZmxvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrZGF5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlbXAgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IHRlbXAueWVhcjtcbiAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdGVtcC5kYXlPZlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgSVNPIHN0YW5kYXJkXG4gICAgaG9va3MuSVNPXzg2MDEgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBSRkMgMjgyMiBmb3JtXG4gICAgaG9va3MuUkZDXzI4MjIgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmdcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gYW5vdGhlciBwYXJ0IG9mIHRoZSBjcmVhdGlvbiBmbG93IHRvIHByZXZlbnQgY2lyY3VsYXIgZGVwc1xuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5JU09fODYwMSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLlJGQ18yODIyKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbmZpZy5fYSA9IFtdO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gVGhpcyBhcnJheSBpcyB1c2VkIHRvIG1ha2UgYSBEYXRlLCBlaXRoZXIgd2l0aCBgbmV3IERhdGVgIG9yIGBEYXRlLlVUQ2BcbiAgICAgICAgdmFyIHN0cmluZyA9ICcnICsgY29uZmlnLl9pLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHBhcnNlZElucHV0LFxuICAgICAgICAgICAgdG9rZW5zLFxuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICBza2lwcGVkLFxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggPSAwLFxuICAgICAgICAgICAgZXJhLFxuICAgICAgICAgICAgdG9rZW5MZW47XG5cbiAgICAgICAgdG9rZW5zID1cbiAgICAgICAgICAgIGV4cGFuZEZvcm1hdChjb25maWcuX2YsIGNvbmZpZy5fbG9jYWxlKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSB8fCBbXTtcbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbnMubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5MZW47IGkrKykge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICBwYXJzZWRJbnB1dCA9IChzdHJpbmcubWF0Y2goZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKSB8fFxuICAgICAgICAgICAgICAgIFtdKVswXTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNraXBwZWQgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSk7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHNraXBwZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSArIHBhcnNlZElucHV0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCArPSBwYXJzZWRJbnB1dC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkb24ndCBwYXJzZSBpZiBpdCdzIG5vdCBhIGtub3duIHRva2VuXG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgcGFyc2VkSW5wdXQsIGNvbmZpZyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5fc3RyaWN0ICYmICFwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCByZW1haW5pbmcgdW5wYXJzZWQgaW5wdXQgbGVuZ3RoIHRvIHRoZSBzdHJpbmdcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuY2hhcnNMZWZ0T3ZlciA9XG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggLSB0b3RhbFBhcnNlZElucHV0TGVuZ3RoO1xuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIF8xMmggZmxhZyBpZiBob3VyIGlzIDw9IDEyXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA8PSAxMiAmJlxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5wYXJzZWREYXRlUGFydHMgPSBjb25maWcuX2Euc2xpY2UoMCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLm1lcmlkaWVtID0gY29uZmlnLl9tZXJpZGllbTtcbiAgICAgICAgLy8gaGFuZGxlIG1lcmlkaWVtXG4gICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IG1lcmlkaWVtRml4V3JhcChcbiAgICAgICAgICAgIGNvbmZpZy5fbG9jYWxlLFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdLFxuICAgICAgICAgICAgY29uZmlnLl9tZXJpZGllbVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGhhbmRsZSBlcmFcbiAgICAgICAgZXJhID0gZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhO1xuICAgICAgICBpZiAoZXJhICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFzQ29udmVydFllYXIoZXJhLCBjb25maWcuX2FbWUVBUl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIGNoZWNrT3ZlcmZsb3coY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbUZpeFdyYXAobG9jYWxlLCBob3VyLCBtZXJpZGllbSkge1xuICAgICAgICB2YXIgaXNQbTtcblxuICAgICAgICBpZiAobWVyaWRpZW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsZS5tZXJpZGllbUhvdXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5tZXJpZGllbUhvdXIoaG91ciwgbWVyaWRpZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZS5pc1BNICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgICAgICBpc1BtID0gbG9jYWxlLmlzUE0obWVyaWRpZW0pO1xuICAgICAgICAgICAgaWYgKGlzUG0gJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQbSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW5cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgYXJyYXkgb2YgZm9ybWF0IHN0cmluZ3NcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciB0ZW1wQ29uZmlnLFxuICAgICAgICAgICAgYmVzdE1vbWVudCxcbiAgICAgICAgICAgIHNjb3JlVG9CZWF0LFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSxcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQsXG4gICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlnZkxlbiA9IGNvbmZpZy5fZi5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGNvbmZpZ2ZMZW4gPT09IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25maWdmTGVuOyBpKyspIHtcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSA9IDA7XG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICB0ZW1wQ29uZmlnID0gY29weUNvbmZpZyh7fSwgY29uZmlnKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuX3VzZVVUQyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGVtcENvbmZpZy5fdXNlVVRDID0gY29uZmlnLl91c2VVVEM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ29uZmlnLl9mID0gY29uZmlnLl9mW2ldO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCh0ZW1wQ29uZmlnKTtcblxuICAgICAgICAgICAgaWYgKGlzVmFsaWQodGVtcENvbmZpZykpIHtcbiAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55IGlucHV0IHRoYXQgd2FzIG5vdCBwYXJzZWQgYWRkIGEgcGVuYWx0eSBmb3IgdGhhdCBmb3JtYXRcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuY2hhcnNMZWZ0T3ZlcjtcblxuICAgICAgICAgICAgLy9vciB0b2tlbnNcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykudW51c2VkVG9rZW5zLmxlbmd0aCAqIDEwO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuc2NvcmUgPSBjdXJyZW50U2NvcmU7XG5cbiAgICAgICAgICAgIGlmICghYmVzdEZvcm1hdElzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQgfHxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZEZvcm1hdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXh0ZW5kKGNvbmZpZywgYmVzdE1vbWVudCB8fCB0ZW1wQ29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tT2JqZWN0KGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGNvbmZpZy5faSksXG4gICAgICAgICAgICBkYXlPckRhdGUgPSBpLmRheSA9PT0gdW5kZWZpbmVkID8gaS5kYXRlIDogaS5kYXk7XG4gICAgICAgIGNvbmZpZy5fYSA9IG1hcChcbiAgICAgICAgICAgIFtpLnllYXIsIGkubW9udGgsIGRheU9yRGF0ZSwgaS5ob3VyLCBpLm1pbnV0ZSwgaS5zZWNvbmQsIGkubWlsbGlzZWNvbmRdLFxuICAgICAgICAgICAgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogJiYgcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRnJvbUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhwcmVwYXJlQ29uZmlnKGNvbmZpZykpKTtcbiAgICAgICAgaWYgKHJlcy5fbmV4dERheSkge1xuICAgICAgICAgICAgLy8gQWRkaW5nIGlzIHNtYXJ0IGVub3VnaCBhcm91bmQgRFNUXG4gICAgICAgICAgICByZXMuYWRkKDEsICdkJyk7XG4gICAgICAgICAgICByZXMuX25leHREYXkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVDb25maWcoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGNvbmZpZy5fZjtcblxuICAgICAgICBjb25maWcuX2xvY2FsZSA9IGNvbmZpZy5fbG9jYWxlIHx8IGdldExvY2FsZShjb25maWcuX2wpO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCAoZm9ybWF0ID09PSB1bmRlZmluZWQgJiYgaW5wdXQgPT09ICcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoeyBudWxsSW5wdXQ6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnLl9pID0gaW5wdXQgPSBjb25maWcuX2xvY2FsZS5wcmVwYXJzZShpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNb21lbnQoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vbWVudChjaGVja092ZXJmbG93KGlucHV0KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gaW5wdXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShmb3JtYXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pO1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQudmFsdWVPZigpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IG1hcChpbnB1dC5zbGljZSgwKSwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAvLyBmcm9tIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGlzVVRDKSB7XG4gICAgICAgIHZhciBjID0ge307XG5cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gdHJ1ZSB8fCBmb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9jYWxlID09PSB0cnVlIHx8IGxvY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGxvY2FsZTtcbiAgICAgICAgICAgIGxvY2FsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChpc09iamVjdChpbnB1dCkgJiYgaXNPYmplY3RFbXB0eShpbnB1dCkpIHx8XG4gICAgICAgICAgICAoaXNBcnJheShpbnB1dCkgJiYgaW5wdXQubGVuZ3RoID09PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gbXVzdCBiZSBkb25lIHRoaXMgd2F5LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyM1xuICAgICAgICBjLl9pc0FNb21lbnRPYmplY3QgPSB0cnVlO1xuICAgICAgICBjLl91c2VVVEMgPSBjLl9pc1VUQyA9IGlzVVRDO1xuICAgICAgICBjLl9sID0gbG9jYWxlO1xuICAgICAgICBjLl9pID0gaW5wdXQ7XG4gICAgICAgIGMuX2YgPSBmb3JtYXQ7XG4gICAgICAgIGMuX3N0cmljdCA9IHN0cmljdDtcblxuICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUNvbmZpZyhjKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHZhciBwcm90b3R5cGVNaW4gPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPCB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICBwcm90b3R5cGVNYXggPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPiB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgLy8gUGljayBhIG1vbWVudCBtIGZyb20gbW9tZW50cyBzbyB0aGF0IG1bZm5dKG90aGVyKSBpcyB0cnVlIGZvciBhbGxcbiAgICAvLyBvdGhlci4gVGhpcyByZWxpZXMgb24gdGhlIGZ1bmN0aW9uIGZuIHRvIGJlIHRyYW5zaXRpdmUuXG4gICAgLy9cbiAgICAvLyBtb21lbnRzIHNob3VsZCBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMgb3IgYW4gYXJyYXksIHdob3NlXG4gICAgLy8gZmlyc3QgZWxlbWVudCBpcyBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cy5cbiAgICBmdW5jdGlvbiBwaWNrQnkoZm4sIG1vbWVudHMpIHtcbiAgICAgICAgdmFyIHJlcywgaTtcbiAgICAgICAgaWYgKG1vbWVudHMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkobW9tZW50c1swXSkpIHtcbiAgICAgICAgICAgIG1vbWVudHMgPSBtb21lbnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IG1vbWVudHNbMF07XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBtb21lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoIW1vbWVudHNbaV0uaXNWYWxpZCgpIHx8IG1vbWVudHNbaV1bZm5dKHJlcykpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBtb21lbnRzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIFtdLnNvcnQgaW5zdGVhZD9cbiAgICBmdW5jdGlvbiBtaW4oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQmVmb3JlJywgYXJncyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF4KCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0FmdGVyJywgYXJncyk7XG4gICAgfVxuXG4gICAgdmFyIG5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93ID8gRGF0ZS5ub3coKSA6ICtuZXcgRGF0ZSgpO1xuICAgIH07XG5cbiAgICB2YXIgb3JkZXJpbmcgPSBbXG4gICAgICAgICd5ZWFyJyxcbiAgICAgICAgJ3F1YXJ0ZXInLFxuICAgICAgICAnbW9udGgnLFxuICAgICAgICAnd2VlaycsXG4gICAgICAgICdkYXknLFxuICAgICAgICAnaG91cicsXG4gICAgICAgICdtaW51dGUnLFxuICAgICAgICAnc2Vjb25kJyxcbiAgICAgICAgJ21pbGxpc2Vjb25kJyxcbiAgICBdO1xuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvblZhbGlkKG0pIHtcbiAgICAgICAgdmFyIGtleSxcbiAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gZmFsc2UsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3JkZXJMZW4gPSBvcmRlcmluZy5sZW5ndGg7XG4gICAgICAgIGZvciAoa2V5IGluIG0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKG0sIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICBpbmRleE9mLmNhbGwob3JkZXJpbmcsIGtleSkgIT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIChtW2tleV0gPT0gbnVsbCB8fCAhaXNOYU4obVtrZXldKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3JkZXJMZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKG1bb3JkZXJpbmdbaV1dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaXRIYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gb25seSBhbGxvdyBub24taW50ZWdlcnMgZm9yIHNtYWxsZXN0IHVuaXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQobVtvcmRlcmluZ1tpXV0pICE9PSB0b0ludChtW29yZGVyaW5nW2ldXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oTmFOKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBEdXJhdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoZHVyYXRpb24pLFxuICAgICAgICAgICAgeWVhcnMgPSBub3JtYWxpemVkSW5wdXQueWVhciB8fCAwLFxuICAgICAgICAgICAgcXVhcnRlcnMgPSBub3JtYWxpemVkSW5wdXQucXVhcnRlciB8fCAwLFxuICAgICAgICAgICAgbW9udGhzID0gbm9ybWFsaXplZElucHV0Lm1vbnRoIHx8IDAsXG4gICAgICAgICAgICB3ZWVrcyA9IG5vcm1hbGl6ZWRJbnB1dC53ZWVrIHx8IG5vcm1hbGl6ZWRJbnB1dC5pc29XZWVrIHx8IDAsXG4gICAgICAgICAgICBkYXlzID0gbm9ybWFsaXplZElucHV0LmRheSB8fCAwLFxuICAgICAgICAgICAgaG91cnMgPSBub3JtYWxpemVkSW5wdXQuaG91ciB8fCAwLFxuICAgICAgICAgICAgbWludXRlcyA9IG5vcm1hbGl6ZWRJbnB1dC5taW51dGUgfHwgMCxcbiAgICAgICAgICAgIHNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQuc2Vjb25kIHx8IDAsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQubWlsbGlzZWNvbmQgfHwgMDtcblxuICAgICAgICB0aGlzLl9pc1ZhbGlkID0gaXNEdXJhdGlvblZhbGlkKG5vcm1hbGl6ZWRJbnB1dCk7XG5cbiAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIGRhdGVBZGRSZW1vdmVcbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID1cbiAgICAgICAgICAgICttaWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgc2Vjb25kcyAqIDFlMyArIC8vIDEwMDBcbiAgICAgICAgICAgIG1pbnV0ZXMgKiA2ZTQgKyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGhvdXJzICogMTAwMCAqIDYwICogNjA7IC8vdXNpbmcgMTAwMCAqIDYwICogNjAgaW5zdGVhZCBvZiAzNmU1IHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjk3OFxuICAgICAgICAvLyBCZWNhdXNlIG9mIGRhdGVBZGRSZW1vdmUgdHJlYXRzIDI0IGhvdXJzIGFzIGRpZmZlcmVudCBmcm9tIGFcbiAgICAgICAgLy8gZGF5IHdoZW4gd29ya2luZyBhcm91bmQgRFNULCB3ZSBuZWVkIHRvIHN0b3JlIHRoZW0gc2VwYXJhdGVseVxuICAgICAgICB0aGlzLl9kYXlzID0gK2RheXMgKyB3ZWVrcyAqIDc7XG4gICAgICAgIC8vIEl0IGlzIGltcG9zc2libGUgdG8gdHJhbnNsYXRlIG1vbnRocyBpbnRvIGRheXMgd2l0aG91dCBrbm93aW5nXG4gICAgICAgIC8vIHdoaWNoIG1vbnRocyB5b3UgYXJlIGFyZSB0YWxraW5nIGFib3V0LCBzbyB3ZSBoYXZlIHRvIHN0b3JlXG4gICAgICAgIC8vIGl0IHNlcGFyYXRlbHkuXG4gICAgICAgIHRoaXMuX21vbnRocyA9ICttb250aHMgKyBxdWFydGVycyAqIDMgKyB5ZWFycyAqIDEyO1xuXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcblxuICAgICAgICB0aGlzLl9sb2NhbGUgPSBnZXRMb2NhbGUoKTtcblxuICAgICAgICB0aGlzLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzUm91bmQobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgtMSAqIG51bWJlcikgKiAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb21wYXJlIHR3byBhcnJheXMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhhcnJheTEsIGFycmF5MiwgZG9udENvbnZlcnQpIHtcbiAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKGFycmF5MS5sZW5ndGgsIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGRpZmZzID0gMCxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChkb250Q29udmVydCAmJiBhcnJheTFbaV0gIT09IGFycmF5MltpXSkgfHxcbiAgICAgICAgICAgICAgICAoIWRvbnRDb252ZXJ0ICYmIHRvSW50KGFycmF5MVtpXSkgIT09IHRvSW50KGFycmF5MltpXSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkaWZmcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWZmcyArIGxlbmd0aERpZmY7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0KHRva2VuLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLnV0Y09mZnNldCgpLFxuICAgICAgICAgICAgICAgIHNpZ24gPSAnKyc7XG4gICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7XG4gICAgICAgICAgICAgICAgc2lnbiA9ICctJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgc2lnbiArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn4ob2Zmc2V0IC8gNjApLCAyKSArXG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fm9mZnNldCAlIDYwLCAyKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb2Zmc2V0KCdaJywgJzonKTtcbiAgICBvZmZzZXQoJ1paJywgJycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1paJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ1onLCAnWlonXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fdXNlVVRDID0gdHJ1ZTtcbiAgICAgICAgY29uZmlnLl90em0gPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIHRpbWV6b25lIGNodW5rZXJcbiAgICAvLyAnKzEwOjAwJyA+IFsnMTAnLCAgJzAwJ11cbiAgICAvLyAnLTE1MzAnICA+IFsnLTE1JywgJzMwJ11cbiAgICB2YXIgY2h1bmtPZmZzZXQgPSAvKFtcXCtcXC1dfFxcZFxcZCkvZ2k7XG5cbiAgICBmdW5jdGlvbiBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoZXIsIHN0cmluZykge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IChzdHJpbmcgfHwgJycpLm1hdGNoKG1hdGNoZXIpLFxuICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICBwYXJ0cyxcbiAgICAgICAgICAgIG1pbnV0ZXM7XG5cbiAgICAgICAgaWYgKG1hdGNoZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2h1bmsgPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0gfHwgW107XG4gICAgICAgIHBhcnRzID0gKGNodW5rICsgJycpLm1hdGNoKGNodW5rT2Zmc2V0KSB8fCBbJy0nLCAwLCAwXTtcbiAgICAgICAgbWludXRlcyA9ICsocGFydHNbMV0gKiA2MCkgKyB0b0ludChwYXJ0c1syXSk7XG5cbiAgICAgICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgPyAwIDogcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBtb21lbnQgZnJvbSBpbnB1dCwgdGhhdCBpcyBsb2NhbC91dGMvem9uZSBlcXVpdmFsZW50IHRvIG1vZGVsLlxuICAgIGZ1bmN0aW9uIGNsb25lV2l0aE9mZnNldChpbnB1dCwgbW9kZWwpIHtcbiAgICAgICAgdmFyIHJlcywgZGlmZjtcbiAgICAgICAgaWYgKG1vZGVsLl9pc1VUQykge1xuICAgICAgICAgICAgcmVzID0gbW9kZWwuY2xvbmUoKTtcbiAgICAgICAgICAgIGRpZmYgPVxuICAgICAgICAgICAgICAgIChpc01vbWVudChpbnB1dCkgfHwgaXNEYXRlKGlucHV0KVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZUxvY2FsKGlucHV0KS52YWx1ZU9mKCkpIC0gcmVzLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIC8vIFVzZSBsb3ctbGV2ZWwgYXBpLCBiZWNhdXNlIHRoaXMgZm4gaXMgbG93LWxldmVsIGFwaS5cbiAgICAgICAgICAgIHJlcy5fZC5zZXRUaW1lKHJlcy5fZC52YWx1ZU9mKCkgKyBkaWZmKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQpLmxvY2FsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXRlT2Zmc2V0KG0pIHtcbiAgICAgICAgLy8gT24gRmlyZWZveC4yNCBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgYSBmbG9hdGluZyBwb2ludC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvcHVsbC8xODcxXG4gICAgICAgIHJldHVybiAtTWF0aC5yb3VuZChtLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbW9tZW50IGlzIG11dGF0ZWQuXG4gICAgLy8gSXQgaXMgaW50ZW5kZWQgdG8ga2VlcCB0aGUgb2Zmc2V0IGluIHN5bmMgd2l0aCB0aGUgdGltZXpvbmUuXG4gICAgaG9va3MudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICAvLyBrZWVwTG9jYWxUaW1lID0gdHJ1ZSBtZWFucyBvbmx5IGNoYW5nZSB0aGUgdGltZXpvbmUsIHdpdGhvdXRcbiAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bdXRjT2Zmc2V0KDIsIHRydWUpXS0tPlxuICAgIC8vIDU6MzE6MjYgKzAyMDAgSXQgaXMgcG9zc2libGUgdGhhdCA1OjMxOjI2IGRvZXNuJ3QgZXhpc3Qgd2l0aCBvZmZzZXRcbiAgICAvLyArMDIwMCwgc28gd2UgYWRqdXN0IHRoZSB0aW1lIGFzIG5lZWRlZCwgdG8gYmUgdmFsaWQuXG4gICAgLy9cbiAgICAvLyBLZWVwaW5nIHRoZSB0aW1lIGFjdHVhbGx5IGFkZHMvc3VidHJhY3RzIChvbmUgaG91cilcbiAgICAvLyBmcm9tIHRoZSBhY3R1YWwgcmVwcmVzZW50ZWQgdGltZS4gVGhhdCBpcyB3aHkgd2UgY2FsbCB1cGRhdGVPZmZzZXRcbiAgICAvLyBhIHNlY29uZCB0aW1lLiBJbiBjYXNlIGl0IHdhbnRzIHVzIHRvIGNoYW5nZSB0aGUgb2Zmc2V0IGFnYWluXG4gICAgLy8gX2NoYW5nZUluUHJvZ3Jlc3MgPT0gdHJ1ZSBjYXNlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0LCBiZWNhdXNlXG4gICAgLy8gdGhlcmUgaXMgbm8gc3VjaCB0aW1lIGluIHRoZSBnaXZlbiB0aW1lem9uZS5cbiAgICBmdW5jdGlvbiBnZXRTZXRPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUsIGtlZXBNaW51dGVzKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9vZmZzZXQgfHwgMCxcbiAgICAgICAgICAgIGxvY2FsQWRqdXN0O1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhpbnB1dCkgPCAxNiAmJiAha2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0ICogNjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzVVRDICYmIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICBsb2NhbEFkanVzdCA9IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBpbnB1dDtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChsb2NhbEFkanVzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQobG9jYWxBZGp1c3QsICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmICgha2VlcExvY2FsVGltZSB8fCB0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN1YnRyYWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUR1cmF0aW9uKGlucHV0IC0gb2Zmc2V0LCAnbScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/IG9mZnNldCA6IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRab25lKGlucHV0LCBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gLWlucHV0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC10aGlzLnV0Y09mZnNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9VVEMoa2VlcExvY2FsVGltZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9Mb2NhbChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1VUQykge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzKSwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5faSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciB0Wm9uZSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hPZmZzZXQsIHRoaXMuX2kpO1xuICAgICAgICAgICAgaWYgKHRab25lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0Wm9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc0FsaWduZWRIb3VyT2Zmc2V0KGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbnB1dCA9IGlucHV0ID8gY3JlYXRlTG9jYWwoaW5wdXQpLnV0Y09mZnNldCgpIDogMDtcblxuICAgICAgICByZXR1cm4gKHRoaXMudXRjT2Zmc2V0KCkgLSBpbnB1dCkgJSA2MCA9PT0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCkgfHxcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQoKSB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5faXNEU1RTaGlmdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjID0ge30sXG4gICAgICAgICAgICBvdGhlcjtcblxuICAgICAgICBjb3B5Q29uZmlnKGMsIHRoaXMpO1xuICAgICAgICBjID0gcHJlcGFyZUNvbmZpZyhjKTtcblxuICAgICAgICBpZiAoYy5fYSkge1xuICAgICAgICAgICAgb3RoZXIgPSBjLl9pc1VUQyA/IGNyZWF0ZVVUQyhjLl9hKSA6IGNyZWF0ZUxvY2FsKGMuX2EpO1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID1cbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJiBjb21wYXJlQXJyYXlzKGMuX2EsIG90aGVyLnRvQXJyYXkoKSkgPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/ICF0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBU1AuTkVUIGpzb24gZGF0ZSBmb3JtYXQgcmVnZXhcbiAgICB2YXIgYXNwTmV0UmVnZXggPSAvXigtfFxcKyk/KD86KFxcZCopWy4gXSk/KFxcZCspOihcXGQrKSg/OjooXFxkKykoXFwuXFxkKik/KT8kLyxcbiAgICAgICAgLy8gZnJvbSBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vZ2l0L2Nsb3N1cmVfZ29vZ19kYXRlX2RhdGUuanMuc291cmNlLmh0bWxcbiAgICAgICAgLy8gc29tZXdoYXQgbW9yZSBpbiBsaW5lIHdpdGggNC40LjMuMiAyMDA0IHNwZWMsIGJ1dCBhbGxvd3MgZGVjaW1hbCBhbnl3aGVyZVxuICAgICAgICAvLyBhbmQgZnVydGhlciBtb2RpZmllZCB0byBhbGxvdyBmb3Igc3RyaW5ncyBjb250YWluaW5nIGJvdGggd2VlayBhbmQgZGF5XG4gICAgICAgIGlzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEdXJhdGlvbihpbnB1dCwga2V5KSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGlucHV0LFxuICAgICAgICAgICAgLy8gbWF0Y2hpbmcgYWdhaW5zdCByZWdleHAgaXMgZXhwZW5zaXZlLCBkbyBpdCBvbiBkZW1hbmRcbiAgICAgICAgICAgIG1hdGNoID0gbnVsbCxcbiAgICAgICAgICAgIHNpZ24sXG4gICAgICAgICAgICByZXQsXG4gICAgICAgICAgICBkaWZmUmVzO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbXM6IGlucHV0Ll9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICAgICAgZDogaW5wdXQuX2RheXMsXG4gICAgICAgICAgICAgICAgTTogaW5wdXQuX21vbnRocyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpIHx8ICFpc05hTigraW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uW2tleV0gPSAraW5wdXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kcyA9ICtpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICBkOiB0b0ludChtYXRjaFtEQVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIGg6IHRvSW50KG1hdGNoW0hPVVJdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbTogdG9JbnQobWF0Y2hbTUlOVVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIHM6IHRvSW50KG1hdGNoW1NFQ09ORF0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtczogdG9JbnQoYWJzUm91bmQobWF0Y2hbTUlMTElTRUNPTkRdICogMTAwMCkpICogc2lnbiwgLy8gdGhlIG1pbGxpc2Vjb25kIGRlY2ltYWwgcG9pbnQgaXMgaW5jbHVkZWQgaW4gdGhlIG1hdGNoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGlzb1JlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiBwYXJzZUlzbyhtYXRjaFsyXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgTTogcGFyc2VJc28obWF0Y2hbM10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHc6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkOiBwYXJzZUlzbyhtYXRjaFs1XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgaDogcGFyc2VJc28obWF0Y2hbNl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIG06IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzOiBwYXJzZUlzbyhtYXRjaFs4XSwgc2lnbiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZHVyYXRpb24gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoJ2Zyb20nIGluIGR1cmF0aW9uIHx8ICd0bycgaW4gZHVyYXRpb24pXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLnRvKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1zID0gZGlmZlJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICBkdXJhdGlvbi5NID0gZGlmZlJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXQgPSBuZXcgRHVyYXRpb24oZHVyYXRpb24pO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2xvY2FsZScpKSB7XG4gICAgICAgICAgICByZXQuX2xvY2FsZSA9IGlucHV0Ll9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19pc1ZhbGlkJykpIHtcbiAgICAgICAgICAgIHJldC5faXNWYWxpZCA9IGlucHV0Ll9pc1ZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBjcmVhdGVEdXJhdGlvbi5mbiA9IER1cmF0aW9uLnByb3RvdHlwZTtcbiAgICBjcmVhdGVEdXJhdGlvbi5pbnZhbGlkID0gY3JlYXRlSW52YWxpZCQxO1xuXG4gICAgZnVuY3Rpb24gcGFyc2VJc28oaW5wLCBzaWduKSB7XG4gICAgICAgIC8vIFdlJ2Qgbm9ybWFsbHkgdXNlIH5+aW5wIGZvciB0aGlzLCBidXQgdW5mb3J0dW5hdGVseSBpdCBhbHNvXG4gICAgICAgIC8vIGNvbnZlcnRzIGZsb2F0cyB0byBpbnRzLlxuICAgICAgICAvLyBpbnAgbWF5IGJlIHVuZGVmaW5lZCwgc28gY2FyZWZ1bCBjYWxsaW5nIHJlcGxhY2Ugb24gaXQuXG4gICAgICAgIHZhciByZXMgPSBpbnAgJiYgcGFyc2VGbG9hdChpbnAucmVwbGFjZSgnLCcsICcuJykpO1xuICAgICAgICAvLyBhcHBseSBzaWduIHdoaWxlIHdlJ3JlIGF0IGl0XG4gICAgICAgIHJldHVybiAoaXNOYU4ocmVzKSA/IDAgOiByZXMpICogc2lnbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXMgPSB7fTtcblxuICAgICAgICByZXMubW9udGhzID1cbiAgICAgICAgICAgIG90aGVyLm1vbnRoKCkgLSBiYXNlLm1vbnRoKCkgKyAob3RoZXIueWVhcigpIC0gYmFzZS55ZWFyKCkpICogMTI7XG4gICAgICAgIGlmIChiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykuaXNBZnRlcihvdGhlcikpIHtcbiAgICAgICAgICAgIC0tcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSArb3RoZXIgLSArYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgaWYgKCEoYmFzZS5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWlsbGlzZWNvbmRzOiAwLCBtb250aHM6IDAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyID0gY2xvbmVXaXRoT2Zmc2V0KG90aGVyLCBiYXNlKTtcbiAgICAgICAgaWYgKGJhc2UuaXNCZWZvcmUob3RoZXIpKSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2Uob3RoZXIsIGJhc2UpO1xuICAgICAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9IC1yZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgcmVzLm1vbnRocyA9IC1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgJ25hbWUnIGFyZyBhZnRlciBkZXByZWNhdGlvbiBpcyByZW1vdmVkXG4gICAgZnVuY3Rpb24gY3JlYXRlQWRkZXIoZGlyZWN0aW9uLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBkdXIsIHRtcDtcbiAgICAgICAgICAgIC8vaW52ZXJ0IHRoZSBhcmd1bWVudHMsIGJ1dCBjb21wbGFpbiBhYm91dCBpdFxuICAgICAgICAgICAgaWYgKHBlcmlvZCAhPT0gbnVsbCAmJiAhaXNOYU4oK3BlcmlvZCkpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICdtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhudW1iZXIsIHBlcmlvZCkuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0bXAgPSB2YWw7XG4gICAgICAgICAgICAgICAgdmFsID0gcGVyaW9kO1xuICAgICAgICAgICAgICAgIHBlcmlvZCA9IHRtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZHVyID0gY3JlYXRlRHVyYXRpb24odmFsLCBwZXJpb2QpO1xuICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgZHVyLCBkaXJlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QobW9tLCBkdXJhdGlvbiwgaXNBZGRpbmcsIHVwZGF0ZU9mZnNldCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSBhYnNSb3VuZChkdXJhdGlvbi5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnNSb3VuZChkdXJhdGlvbi5fbW9udGhzKTtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVPZmZzZXQgPSB1cGRhdGVPZmZzZXQgPT0gbnVsbCA/IHRydWUgOiB1cGRhdGVPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG1vbnRocykge1xuICAgICAgICAgICAgc2V0TW9udGgobW9tLCBnZXQobW9tLCAnTW9udGgnKSArIG1vbnRocyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5cykge1xuICAgICAgICAgICAgc2V0JDEobW9tLCAnRGF0ZScsIGdldChtb20sICdEYXRlJykgKyBkYXlzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIG1vbS5fZC5zZXRUaW1lKG1vbS5fZC52YWx1ZU9mKCkgKyBtaWxsaXNlY29uZHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZU9mZnNldCkge1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KG1vbSwgZGF5cyB8fCBtb250aHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFkZCA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKSxcbiAgICAgICAgc3VidHJhY3QgPSBjcmVhdGVBZGRlcigtMSwgJ3N1YnRyYWN0Jyk7XG5cbiAgICBmdW5jdGlvbiBpc1N0cmluZyhpbnB1dCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCBpbnB1dCBpbnN0YW5jZW9mIFN0cmluZztcbiAgICB9XG5cbiAgICAvLyB0eXBlIE1vbWVudElucHV0ID0gTW9tZW50IHwgRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IChudW1iZXIgfCBzdHJpbmcpW10gfCBNb21lbnRJbnB1dE9iamVjdCB8IHZvaWQ7IC8vIG51bGwgfCB1bmRlZmluZWRcbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc01vbWVudChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzRGF0ZShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzU3RyaW5nKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXIoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAneWVhcnMnLFxuICAgICAgICAgICAgICAgICd5ZWFyJyxcbiAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgJ21vbnRocycsXG4gICAgICAgICAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgICAgICAgICAnTScsXG4gICAgICAgICAgICAgICAgJ2RheXMnLFxuICAgICAgICAgICAgICAgICdkYXknLFxuICAgICAgICAgICAgICAgICdkJyxcbiAgICAgICAgICAgICAgICAnZGF0ZXMnLFxuICAgICAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICAgICAnRCcsXG4gICAgICAgICAgICAgICAgJ2hvdXJzJyxcbiAgICAgICAgICAgICAgICAnaG91cicsXG4gICAgICAgICAgICAgICAgJ2gnLFxuICAgICAgICAgICAgICAgICdtaW51dGVzJyxcbiAgICAgICAgICAgICAgICAnbWludXRlJyxcbiAgICAgICAgICAgICAgICAnbScsXG4gICAgICAgICAgICAgICAgJ3NlY29uZHMnLFxuICAgICAgICAgICAgICAgICdzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdtcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgcHJvcGVydHlMZW4gPSBwcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydHlMZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gcHJvcGVydHlUZXN0IHx8IGhhc093blByb3AoaW5wdXQsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgdmFyIGFycmF5VGVzdCA9IGlzQXJyYXkoaW5wdXQpLFxuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID0gZmFsc2U7XG4gICAgICAgIGlmIChhcnJheVRlc3QpIHtcbiAgICAgICAgICAgIGRhdGFUeXBlVGVzdCA9XG4gICAgICAgICAgICAgICAgaW5wdXQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNOdW1iZXIoaXRlbSkgJiYgaXNTdHJpbmcoaW5wdXQpO1xuICAgICAgICAgICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXlUZXN0ICYmIGRhdGFUeXBlVGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0NhbGVuZGFyU3BlYyhpbnB1dCkge1xuICAgICAgICB2YXIgb2JqZWN0VGVzdCA9IGlzT2JqZWN0KGlucHV0KSAmJiAhaXNPYmplY3RFbXB0eShpbnB1dCksXG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAgICAgJ3NhbWVEYXknLFxuICAgICAgICAgICAgICAgICduZXh0RGF5JyxcbiAgICAgICAgICAgICAgICAnbGFzdERheScsXG4gICAgICAgICAgICAgICAgJ25leHRXZWVrJyxcbiAgICAgICAgICAgICAgICAnbGFzdFdlZWsnLFxuICAgICAgICAgICAgICAgICdzYW1lRWxzZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENhbGVuZGFyRm9ybWF0KG15TW9tZW50LCBub3cpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBteU1vbWVudC5kaWZmKG5vdywgJ2RheXMnLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGRpZmYgPCAtNlxuICAgICAgICAgICAgPyAnc2FtZUVsc2UnXG4gICAgICAgICAgICA6IGRpZmYgPCAtMVxuICAgICAgICAgICAgICA/ICdsYXN0V2VlaydcbiAgICAgICAgICAgICAgOiBkaWZmIDwgMFxuICAgICAgICAgICAgICAgID8gJ2xhc3REYXknXG4gICAgICAgICAgICAgICAgOiBkaWZmIDwgMVxuICAgICAgICAgICAgICAgICAgPyAnc2FtZURheSdcbiAgICAgICAgICAgICAgICAgIDogZGlmZiA8IDJcbiAgICAgICAgICAgICAgICAgICAgPyAnbmV4dERheSdcbiAgICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgN1xuICAgICAgICAgICAgICAgICAgICAgID8gJ25leHRXZWVrJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3NhbWVFbHNlJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciQxKHRpbWUsIGZvcm1hdHMpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBmb3Igc2luZ2xlIHBhcmFtZXRlciwgZm9ybWF0cyBvbmx5IG92ZXJsb2FkIHRvIHRoZSBjYWxlbmRhciBmdW5jdGlvblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTW9tZW50SW5wdXQoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNDYWxlbmRhclNwZWMoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBXZSB3YW50IHRvIGNvbXBhcmUgdGhlIHN0YXJ0IG9mIHRvZGF5LCB2cyB0aGlzLlxuICAgICAgICAvLyBHZXR0aW5nIHN0YXJ0LW9mLXRvZGF5IGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBsb2NhbC91dGMvb2Zmc2V0IG9yIG5vdC5cbiAgICAgICAgdmFyIG5vdyA9IHRpbWUgfHwgY3JlYXRlTG9jYWwoKSxcbiAgICAgICAgICAgIHNvZCA9IGNsb25lV2l0aE9mZnNldChub3csIHRoaXMpLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgICAgICAgZm9ybWF0ID0gaG9va3MuY2FsZW5kYXJGb3JtYXQodGhpcywgc29kKSB8fCAnc2FtZUVsc2UnLFxuICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICBmb3JtYXRzICYmXG4gICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZm9ybWF0c1tmb3JtYXRdKVxuICAgICAgICAgICAgICAgICAgICA/IGZvcm1hdHNbZm9ybWF0XS5jYWxsKHRoaXMsIG5vdylcbiAgICAgICAgICAgICAgICAgICAgOiBmb3JtYXRzW2Zvcm1hdF0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChcbiAgICAgICAgICAgIG91dHB1dCB8fCB0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihmb3JtYXQsIHRoaXMsIGNyZWF0ZUxvY2FsKG5vdykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9tZW50KHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWZ0ZXIoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID4gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxJbnB1dC52YWx1ZU9mKCkgPCB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmV0d2Vlbihmcm9tLCB0bywgdW5pdHMsIGluY2x1c2l2aXR5KSB7XG4gICAgICAgIHZhciBsb2NhbEZyb20gPSBpc01vbWVudChmcm9tKSA/IGZyb20gOiBjcmVhdGVMb2NhbChmcm9tKSxcbiAgICAgICAgICAgIGxvY2FsVG8gPSBpc01vbWVudCh0bykgPyB0byA6IGNyZWF0ZUxvY2FsKHRvKTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxGcm9tLmlzVmFsaWQoKSAmJiBsb2NhbFRvLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbmNsdXNpdml0eSA9IGluY2x1c2l2aXR5IHx8ICcoKSc7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMF0gPT09ICcoJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5pc0FmdGVyKGxvY2FsRnJvbSwgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0JlZm9yZShsb2NhbEZyb20sIHVuaXRzKSkgJiZcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVsxXSA9PT0gJyknXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQmVmb3JlKGxvY2FsVG8sIHVuaXRzKVxuICAgICAgICAgICAgICAgIDogIXRoaXMuaXNBZnRlcihsb2NhbFRvLCB1bml0cykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpLFxuICAgICAgICAgICAgaW5wdXRNcztcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRNcyA9IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpIDw9IGlucHV0TXMgJiZcbiAgICAgICAgICAgICAgICBpbnB1dE1zIDw9IHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0FmdGVyKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNCZWZvcmUoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmKGlucHV0LCB1bml0cywgYXNGbG9hdCkge1xuICAgICAgICB2YXIgdGhhdCwgem9uZURlbHRhLCBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpO1xuXG4gICAgICAgIGlmICghdGhhdC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0O1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDEyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAxZTM7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDBcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDZlNDtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMzZlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDg2NGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0ICogNywgbmVnYXRlIGRzdFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSB0aGlzIC0gdGhhdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc0Zsb2F0ID8gb3V0cHV0IDogYWJzRmxvb3Iob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aERpZmYoYSwgYikge1xuICAgICAgICBpZiAoYS5kYXRlKCkgPCBiLmRhdGUoKSkge1xuICAgICAgICAgICAgLy8gZW5kLW9mLW1vbnRoIGNhbGN1bGF0aW9ucyB3b3JrIGNvcnJlY3Qgd2hlbiB0aGUgc3RhcnQgbW9udGggaGFzIG1vcmVcbiAgICAgICAgICAgIC8vIGRheXMgdGhhbiB0aGUgZW5kIG1vbnRoLlxuICAgICAgICAgICAgcmV0dXJuIC1tb250aERpZmYoYiwgYSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlmZmVyZW5jZSBpbiBtb250aHNcbiAgICAgICAgdmFyIHdob2xlTW9udGhEaWZmID0gKGIueWVhcigpIC0gYS55ZWFyKCkpICogMTIgKyAoYi5tb250aCgpIC0gYS5tb250aCgpKSxcbiAgICAgICAgICAgIC8vIGIgaXMgaW4gKGFuY2hvciAtIDEgbW9udGgsIGFuY2hvciArIDEgbW9udGgpXG4gICAgICAgICAgICBhbmNob3IgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmLCAnbW9udGhzJyksXG4gICAgICAgICAgICBhbmNob3IyLFxuICAgICAgICAgICAgYWRqdXN0O1xuXG4gICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvcjIgLSBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jaGVjayBmb3IgbmVnYXRpdmUgemVybywgcmV0dXJuIHplcm8gaWYgbmVnYXRpdmUgemVyb1xuICAgICAgICByZXR1cm4gLSh3aG9sZU1vbnRoRGlmZiArIGFkanVzdCkgfHwgMDtcbiAgICB9XG5cbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0VXRjID0gJ1lZWVktTU0tRERUSEg6bW06c3NbWl0nO1xuXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCdlbicpLmZvcm1hdCgnZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWlonKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyhrZWVwT2Zmc2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1dGMgPSBrZWVwT2Zmc2V0ICE9PSB0cnVlLFxuICAgICAgICAgICAgbSA9IHV0YyA/IHRoaXMuY2xvbmUoKS51dGMoKSA6IHRoaXM7XG4gICAgICAgIGlmIChtLnllYXIoKSA8IDAgfHwgbS55ZWFyKCkgPiA5OTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgICAgIG0sXG4gICAgICAgICAgICAgICAgdXRjXG4gICAgICAgICAgICAgICAgICAgID8gJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSdcbiAgICAgICAgICAgICAgICAgICAgOiAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpKSB7XG4gICAgICAgICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhblxuICAgICAgICAgICAgaWYgKHV0Yykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIHRoaXMudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDApXG4gICAgICAgICAgICAgICAgICAgIC50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdaJywgZm9ybWF0TW9tZW50KG0sICdaJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICBtLFxuICAgICAgICAgICAgdXRjID8gJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nIDogJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9tZW50IHRoYXQgY2FuXG4gICAgICogYWxzbyBiZSBldmFsdWF0ZWQgdG8gZ2V0IGEgbmV3IG1vbWVudCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0L2RvY3MvYXBpL3V0aWwuaHRtbCN1dGlsX2N1c3RvbV9pbnNwZWN0X2Z1bmN0aW9uX29uX29iamVjdHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ21vbWVudC5pbnZhbGlkKC8qICcgKyB0aGlzLl9pICsgJyAqLyknO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmdW5jID0gJ21vbWVudCcsXG4gICAgICAgICAgICB6b25lID0gJycsXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgZGF0ZXRpbWUsXG4gICAgICAgICAgICBzdWZmaXg7XG4gICAgICAgIGlmICghdGhpcy5pc0xvY2FsKCkpIHtcbiAgICAgICAgICAgIGZ1bmMgPSB0aGlzLnV0Y09mZnNldCgpID09PSAwID8gJ21vbWVudC51dGMnIDogJ21vbWVudC5wYXJzZVpvbmUnO1xuICAgICAgICAgICAgem9uZSA9ICdaJztcbiAgICAgICAgfVxuICAgICAgICBwcmVmaXggPSAnWycgKyBmdW5jICsgJyhcIl0nO1xuICAgICAgICB5ZWFyID0gMCA8PSB0aGlzLnllYXIoKSAmJiB0aGlzLnllYXIoKSA8PSA5OTk5ID8gJ1lZWVknIDogJ1lZWVlZWSc7XG4gICAgICAgIGRhdGV0aW1lID0gJy1NTS1ERFtUXUhIOm1tOnNzLlNTUyc7XG4gICAgICAgIHN1ZmZpeCA9IHpvbmUgKyAnW1wiKV0nO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChwcmVmaXggKyB5ZWFyICsgZGF0ZXRpbWUgKyBzdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdChpbnB1dFN0cmluZykge1xuICAgICAgICBpZiAoIWlucHV0U3RyaW5nKSB7XG4gICAgICAgICAgICBpbnB1dFN0cmluZyA9IHRoaXMuaXNVdGMoKVxuICAgICAgICAgICAgICAgID8gaG9va3MuZGVmYXVsdEZvcm1hdFV0Y1xuICAgICAgICAgICAgICAgIDogaG9va3MuZGVmYXVsdEZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3V0cHV0ID0gZm9ybWF0TW9tZW50KHRoaXMsIGlucHV0U3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyB0bzogdGhpcywgZnJvbTogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbShjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0byh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgZnJvbTogdGhpcywgdG86IHRpbWUgfSlcbiAgICAgICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAgICAgLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy50byhjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICAvLyBJZiBwYXNzZWQgYSBsb2NhbGUga2V5LCBpdCB3aWxsIHNldCB0aGUgbG9jYWxlIGZvciB0aGlzXG4gICAgLy8gaW5zdGFuY2UuICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBsb2NhbGUgY29uZmlndXJhdGlvblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICBmdW5jdGlvbiBsb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBuZXdMb2NhbGVEYXRhO1xuXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xvY2FsZURhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChuZXdMb2NhbGVEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2NhbGUgPSBuZXdMb2NhbGVEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuJyxcbiAgICAgICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIHZhciBNU19QRVJfU0VDT05EID0gMTAwMCxcbiAgICAgICAgTVNfUEVSX01JTlVURSA9IDYwICogTVNfUEVSX1NFQ09ORCxcbiAgICAgICAgTVNfUEVSX0hPVVIgPSA2MCAqIE1TX1BFUl9NSU5VVEUsXG4gICAgICAgIE1TX1BFUl80MDBfWUVBUlMgPSAoMzY1ICogNDAwICsgOTcpICogMjQgKiBNU19QRVJfSE9VUjtcblxuICAgIC8vIGFjdHVhbCBtb2R1bG8gLSBoYW5kbGVzIG5lZ2F0aXZlIG51bWJlcnMgKGZvciBkYXRlcyBiZWZvcmUgMTk3MCk6XG4gICAgZnVuY3Rpb24gbW9kJDEoZGl2aWRlbmQsIGRpdmlzb3IpIHtcbiAgICAgICAgcmV0dXJuICgoZGl2aWRlbmQgJSBkaXZpc29yKSArIGRpdmlzb3IpICUgZGl2aXNvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbFN0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSwgbSwgZCkudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXRjU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyBEYXRlLlVUQyByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5LCBtLCBkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0T2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKFxuICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kT2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpICsgMSwgMCwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMykgKyAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSArIDEsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSkgKyA3XG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSArIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9XG4gICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSIC1cbiAgICAgICAgICAgICAgICAgICAgbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSXG4gICAgICAgICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfTUlOVVRFIC0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfU0VDT05EIC0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbHVlT2YoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kLnZhbHVlT2YoKSAtICh0aGlzLl9vZmZzZXQgfHwgMCkgKiA2MDAwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bml4KCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKSAvIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBtLnllYXIoKSxcbiAgICAgICAgICAgIG0ubW9udGgoKSxcbiAgICAgICAgICAgIG0uZGF0ZSgpLFxuICAgICAgICAgICAgbS5ob3VyKCksXG4gICAgICAgICAgICBtLm1pbnV0ZSgpLFxuICAgICAgICAgICAgbS5zZWNvbmQoKSxcbiAgICAgICAgICAgIG0ubWlsbGlzZWNvbmQoKSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b09iamVjdCgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcnM6IG0ueWVhcigpLFxuICAgICAgICAgICAgbW9udGhzOiBtLm1vbnRoKCksXG4gICAgICAgICAgICBkYXRlOiBtLmRhdGUoKSxcbiAgICAgICAgICAgIGhvdXJzOiBtLmhvdXJzKCksXG4gICAgICAgICAgICBtaW51dGVzOiBtLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgIHNlY29uZHM6IG0uc2Vjb25kcygpLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzOiBtLm1pbGxpc2Vjb25kcygpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgLy8gbmV3IERhdGUoTmFOKS50b0pTT04oKSA9PT0gbnVsbFxuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLnRvSVNPU3RyaW5nKCkgOiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMigpIHtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBnZXRQYXJzaW5nRmxhZ3ModGhpcykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludmFsaWRBdCgpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcnNpbmdGbGFncyh0aGlzKS5vdmVyZmxvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGlvbkRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbnB1dDogdGhpcy5faSxcbiAgICAgICAgICAgIGZvcm1hdDogdGhpcy5fZixcbiAgICAgICAgICAgIGxvY2FsZTogdGhpcy5fbG9jYWxlLFxuICAgICAgICAgICAgaXNVVEM6IHRoaXMuX2lzVVRDLFxuICAgICAgICAgICAgc3RyaWN0OiB0aGlzLl9zdHJpY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ04nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk4nLCAwLCAwLCAnZXJhTmFtZScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk5OTicsIDAsIDAsICdlcmFOYXJyb3cnKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5JywgMV0sICd5bycsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5JywgMl0sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eScsIDNdLCAwLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eXl5JywgNF0sIDAsICdlcmFZZWFyJyk7XG5cbiAgICBhZGRSZWdleFRva2VuKCdOJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OJywgbWF0Y2hFcmFOYW1lKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OTicsIG1hdGNoRXJhTmFycm93KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oXG4gICAgICAgIFsnTicsICdOTicsICdOTk4nLCAnTk5OTicsICdOTk5OTiddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICB2YXIgZXJhID0gY29uZmlnLl9sb2NhbGUuZXJhc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAgICAgaWYgKGVyYSkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYSA9IGVyYTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEVyYSA9IGlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3knLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5bycsIG1hdGNoRXJhWWVhck9yZGluYWwpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ3knLCAneXknLCAneXl5JywgJ3l5eXknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3lvJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1hdGNoO1xuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpIHtcbiAgICAgICAgICAgIG1hdGNoID0gaW5wdXQubWF0Y2goY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UpIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZShpbnB1dCwgbWF0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuX2VyYXMgfHwgZ2V0TG9jYWxlKCdlbicpLl9lcmFzO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnNpbmNlKS5zdGFydE9mKCdkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5zaW5jZSA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSArSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0udW50aWwpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJhcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzUGFyc2UoZXJhTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFiYnIsXG4gICAgICAgICAgICBuYXJyb3c7XG4gICAgICAgIGVyYU5hbWUgPSBlcmFOYW1lLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBuYW1lID0gZXJhc1tpXS5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBhYmJyID0gZXJhc1tpXS5hYmJyLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBuYXJyb3cgPSBlcmFzW2ldLm5hcnJvdy50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYmJyID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFycm93ID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFtuYW1lLCBhYmJyLCBuYXJyb3ddLmluZGV4T2YoZXJhTmFtZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc0NvbnZlcnRZZWFyKGVyYSwgeWVhcikge1xuICAgICAgICB2YXIgZGlyID0gZXJhLnNpbmNlIDw9IGVyYS51bnRpbCA/ICsxIDogLTE7XG4gICAgICAgIGlmICh5ZWFyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKSArICh5ZWFyIC0gZXJhLm9mZnNldCkgKiBkaXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYW1lKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hcnJvdygpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhQWJicigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFZZWFyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkaXIsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGRpciA9IGVyYXNbaV0uc2luY2UgPD0gZXJhc1tpXS51bnRpbCA/ICsxIDogLTE7XG5cbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHx8XG4gICAgICAgICAgICAgICAgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMueWVhcigpIC0gaG9va3MoZXJhc1tpXS5zaW5jZSkueWVhcigpKSAqIGRpciArXG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0ub2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYW1lUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYW1lUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc0FiYnJSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzQWJiclJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzQWJiclJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYXJyb3dSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFycm93UmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYXJyb3dSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYUFiYnIoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFtZShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hbWVSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYXJyb3coaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYXJyb3dSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFZZWFyT3JkaW5hbChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXggfHwgbWF0Y2hVbnNpZ25lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlRXJhc1BhcnNlKCkge1xuICAgICAgICB2YXIgYWJiclBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFtZVBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFycm93UGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzTmFtZSxcbiAgICAgICAgICAgIGVyYXNBYmJyLFxuICAgICAgICAgICAgZXJhc05hcnJvdyxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGVyYXNOYW1lID0gcmVnZXhFc2NhcGUoZXJhc1tpXS5uYW1lKTtcbiAgICAgICAgICAgIGVyYXNBYmJyID0gcmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKTtcbiAgICAgICAgICAgIGVyYXNOYXJyb3cgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hcnJvdyk7XG5cbiAgICAgICAgICAgIG5hbWVQaWVjZXMucHVzaChlcmFzTmFtZSk7XG4gICAgICAgICAgICBhYmJyUGllY2VzLnB1c2goZXJhc0FiYnIpO1xuICAgICAgICAgICAgbmFycm93UGllY2VzLnB1c2goZXJhc05hcnJvdyk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc0FiYnIpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VyYXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hbWVSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG5hbWVQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzQWJiclJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgYWJiclBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYXJyb3dSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbmFycm93UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnZ2cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53ZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydHRycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzb1dlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrWWVhckZvcm1hdFRva2VuKHRva2VuLCBnZXR0ZXIpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4oMCwgW3Rva2VuLCB0b2tlbi5sZW5ndGhdLCAwLCBnZXR0ZXIpO1xuICAgIH1cblxuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0cnLCAnaXNvV2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHRycsICdpc29XZWVrWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdnJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHRycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnZycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ2dnZ2cnLCAnZ2dnZ2cnLCAnR0dHRycsICdHR0dHRyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDIpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnJywgJ0dHJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy53ZWVrKCksXG4gICAgICAgICAgICB0aGlzLndlZWtkYXkoKSArIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy5pc29XZWVrKCksXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWtkYXkoKSxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICA0XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy5pc29XZWVrWWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5XZWVrWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLndlZWtZZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhckhlbHBlcihpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtzVGFyZ2V0O1xuICAgICAgICBpZiAoaW5wdXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIodGhpcywgZG93LCBkb3kpLnllYXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3ZWVrc1RhcmdldCA9IHdlZWtzSW5ZZWFyKGlucHV0LCBkb3csIGRveSk7XG4gICAgICAgICAgICBpZiAod2VlayA+IHdlZWtzVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgd2VlayA9IHdlZWtzVGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNldFdlZWtBbGwuY2FsbCh0aGlzLCBpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0V2Vla0FsbCh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhckRhdGEgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKGRheU9mWWVhckRhdGEueWVhciwgMCwgZGF5T2ZZZWFyRGF0YS5kYXlPZlllYXIpO1xuXG4gICAgICAgIHRoaXMueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpO1xuICAgICAgICB0aGlzLm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSk7XG4gICAgICAgIHRoaXMuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdRJywgMCwgJ1FvJywgJ3F1YXJ0ZXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsXG4gICAgICAgICAgICA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKVxuICAgICAgICAgICAgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArICh0aGlzLm1vbnRoKCkgJSAzKSk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdERCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdEbycsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0XG4gICAgICAgICAgICA/IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZSB8fCBsb2NhbGUuX29yZGluYWxQYXJzZVxuICAgICAgICAgICAgOiBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50O1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0QnLCAnREQnXSwgREFURSk7XG4gICAgYWRkUGFyc2VUb2tlbignRG8nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W0RBVEVdID0gdG9JbnQoaW5wdXQubWF0Y2gobWF0Y2gxdG8yKVswXSk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0RGF5T2ZNb250aCA9IG1ha2VHZXRTZXQoJ0RhdGUnLCB0cnVlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEREQnLCBbJ0REREQnLCAzXSwgJ0RERG8nLCAnZGF5T2ZZZWFyJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEREQnLCBtYXRjaDF0bzMpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REREQnLCBtYXRjaDMpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIoaW5wdXQpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhciA9XG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAgICh0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykgLSB0aGlzLmNsb25lKCkuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1XG4gICAgICAgICAgICApICsgMTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyBkYXlPZlllYXIgOiB0aGlzLmFkZChpbnB1dCAtIGRheU9mWWVhciwgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignbScsIFsnbW0nLCAyXSwgMCwgJ21pbnV0ZScpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignbScsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignbW0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ20nLCAnbW0nXSwgTUlOVVRFKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaW51dGUgPSBtYWtlR2V0U2V0KCdNaW51dGVzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3MnLCBbJ3NzJywgMl0sIDAsICdzZWNvbmQnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3MnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMkhhc1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3NzJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydzJywgJ3NzJ10sIFNFQ09ORCk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0U2Vjb25kID0gbWFrZUdldFNldCgnU2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdTJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTAwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1MnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1MnLCAzXSwgMCwgJ21pbGxpc2Vjb25kJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTJywgNF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1MnLCA1XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTJywgNl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTJywgN10sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1MnLCA4XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1NTJywgOV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbiwgZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0TWlsbGlzZWNvbmQgPSBtYWtlR2V0U2V0KCdNaWxsaXNlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigneicsIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZScgOiAnJztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8gPSBNb21lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8uYWRkID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgPSBkaWZmO1xuICAgIHByb3RvLmVuZE9mID0gZW5kT2Y7XG4gICAgcHJvdG8uZm9ybWF0ID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gPSBmcm9tO1xuICAgIHByb3RvLmZyb21Ob3cgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvID0gdG87XG4gICAgcHJvdG8udG9Ob3cgPSB0b05vdztcbiAgICBwcm90by5nZXQgPSBzdHJpbmdHZXQ7XG4gICAgcHJvdG8uaW52YWxpZEF0ID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgPSBpc0FmdGVyO1xuICAgIHByb3RvLmlzQmVmb3JlID0gaXNCZWZvcmU7XG4gICAgcHJvdG8uaXNCZXR3ZWVuID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgPSBpc1ZhbGlkJDI7XG4gICAgcHJvdG8ubGFuZyA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCA9IHByb3RvdHlwZU1heDtcbiAgICBwcm90by5taW4gPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCA9IHN0cmluZ1NldDtcbiAgICBwcm90by5zdGFydE9mID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgIT0gbnVsbCkge1xuICAgICAgICBwcm90b1tTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW9tZW50PCcgKyB0aGlzLmZvcm1hdCgpICsgJz4nO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm90by50b0pTT04gPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ID0gdW5peDtcbiAgICBwcm90by52YWx1ZU9mID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgPSBjcmVhdGlvbkRhdGE7XG4gICAgcHJvdG8uZXJhTmFtZSA9IGdldEVyYU5hbWU7XG4gICAgcHJvdG8uZXJhTmFycm93ID0gZ2V0RXJhTmFycm93O1xuICAgIHByb3RvLmVyYUFiYnIgPSBnZXRFcmFBYmJyO1xuICAgIHByb3RvLmVyYVllYXIgPSBnZXRFcmFZZWFyO1xuICAgIHByb3RvLnllYXIgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrID0gcHJvdG8ud2Vla3MgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgPSBwcm90by5pc29XZWVrcyA9IGdldFNldElTT1dlZWs7XG4gICAgcHJvdG8ud2Vla3NJblllYXIgPSBnZXRXZWVrc0luWWVhcjtcbiAgICBwcm90by53ZWVrc0luV2Vla1llYXIgPSBnZXRXZWVrc0luV2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luSVNPV2Vla1llYXIgPSBnZXRJU09XZWVrc0luSVNPV2Vla1llYXI7XG4gICAgcHJvdG8uZGF0ZSA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ID0gcHJvdG8uZGF5cyA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyID0gZ2V0U2V0RGF5T2ZZZWFyO1xuICAgIHByb3RvLmhvdXIgPSBwcm90by5ob3VycyA9IGdldFNldEhvdXI7XG4gICAgcHJvdG8ubWludXRlID0gcHJvdG8ubWludXRlcyA9IGdldFNldE1pbnV0ZTtcbiAgICBwcm90by5zZWNvbmQgPSBwcm90by5zZWNvbmRzID0gZ2V0U2V0U2Vjb25kO1xuICAgIHByb3RvLm1pbGxpc2Vjb25kID0gcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgcHJvdG8udXRjT2Zmc2V0ID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldDtcbiAgICBwcm90by5oYXNBbGlnbmVkSG91ck9mZnNldCA9IGhhc0FsaWduZWRIb3VyT2Zmc2V0O1xuICAgIHByb3RvLmlzRFNUID0gaXNEYXlsaWdodFNhdmluZ1RpbWU7XG4gICAgcHJvdG8uaXNMb2NhbCA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzID0gZGVwcmVjYXRlKFxuICAgICAgICAnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXREYXlPZk1vbnRoXG4gICAgKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRNb250aFxuICAgICk7XG4gICAgcHJvdG8ueWVhcnMgPSBkZXByZWNhdGUoXG4gICAgICAgICd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0WWVhclxuICAgICk7XG4gICAgcHJvdG8uem9uZSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJyxcbiAgICAgICAgZ2V0U2V0Wm9uZVxuICAgICk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKFxuICAgICAgICAnaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbicsXG4gICAgICAgIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVbml4KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0KHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm90byQxID0gTG9jYWxlLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDEuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSA9IGludmFsaWREYXRlO1xuICAgIHByb3RvJDEub3JkaW5hbCA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnBvc3Rmb3JtYXQgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCA9IHNldDtcbiAgICBwcm90byQxLmVyYXMgPSBsb2NhbGVFcmFzO1xuICAgIHByb3RvJDEuZXJhc1BhcnNlID0gbG9jYWxlRXJhc1BhcnNlO1xuICAgIHByb3RvJDEuZXJhc0NvbnZlcnRZZWFyID0gbG9jYWxlRXJhc0NvbnZlcnRZZWFyO1xuICAgIHByb3RvJDEuZXJhc0FiYnJSZWdleCA9IGVyYXNBYmJyUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFtZVJlZ2V4ID0gZXJhc05hbWVSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYXJyb3dSZWdleCA9IGVyYXNOYXJyb3dSZWdleDtcblxuICAgIHByb3RvJDEubW9udGhzID0gbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgPSBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlID0gbG9jYWxlTW9udGhzUGFyc2U7XG4gICAgcHJvdG8kMS5tb250aHNSZWdleCA9IG1vbnRoc1JlZ2V4O1xuICAgIHByb3RvJDEubW9udGhzU2hvcnRSZWdleCA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyA9IGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gPSBsb2NhbGVXZWVrZGF5c01pbjtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnQgPSBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSA9IGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggPSB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ID0gd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCA9IHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgdXRjID0gY3JlYXRlVVRDKCkuc2V0KHNldHRlciwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbG9jYWxlW2ZpZWxkXSh1dGMsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDAsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRocycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNTaG9ydChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNNaW4obG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZXJhczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICtJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0Fubm8gRG9taW5pJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQmVmb3JlIENocmlzdCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdCQycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB0b0ludCgobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgaG9va3MubGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlXG4gICAgKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLFxuICAgICAgICBnZXRMb2NhbGVcbiAgICApO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicygpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9IG1hdGhBYnModGhpcy5fbWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5fZGF5cyA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5taWxsaXNlY29uZHMpO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBtYXRoQWJzKGRhdGEuc2Vjb25kcyk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1hdGhBYnMoZGF0YS5taW51dGVzKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzID0gbWF0aEFicyhkYXRhLm1vbnRocyk7XG4gICAgICAgIGRhdGEueWVhcnMgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEoZHVyYXRpb24sIGlucHV0LCB2YWx1ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUR1cmF0aW9uKGlucHV0LCB2YWx1ZSk7XG5cbiAgICAgICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xuICAgICAgICBkdXJhdGlvbi5fZGF5cyArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIDEpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gc3VidHJhY3QkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyxcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgbW9udGhzRnJvbURheXM7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1peCBvZiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzLCBidWJibGUgZG93biBmaXJzdFxuICAgICAgICAvLyBjaGVjazogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIxNjZcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzKGRheXMpIHtcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTQ2MDk3IGRheXMgKHRha2luZyBpbnRvIGFjY291bnQgbGVhcCB5ZWFyIHJ1bGVzKVxuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxMiBtb250aHMgPT09IDQ4MDBcbiAgICAgICAgcmV0dXJuIChkYXlzICogNDgwMCkgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIChtb250aHMgKiAxNDYwOTcpIC8gNDgwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcyh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzLFxuICAgICAgICAgICAgbW9udGhzLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMztcbiAgICAgICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKG1vbnRoc1RvRGF5cyh0aGlzLl9tb250aHMpKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgLyA3ICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMjQgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMTQ0MCArIG1pbGxpc2Vjb25kcyAvIDZlNDtcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VBcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKSxcbiAgICAgICAgYXNTZWNvbmRzID0gbWFrZUFzKCdzJyksXG4gICAgICAgIGFzTWludXRlcyA9IG1ha2VBcygnbScpLFxuICAgICAgICBhc0hvdXJzID0gbWFrZUFzKCdoJyksXG4gICAgICAgIGFzRGF5cyA9IG1ha2VBcygnZCcpLFxuICAgICAgICBhc1dlZWtzID0gbWFrZUFzKCd3JyksXG4gICAgICAgIGFzTW9udGhzID0gbWFrZUFzKCdNJyksXG4gICAgICAgIGFzUXVhcnRlcnMgPSBtYWtlQXMoJ1EnKSxcbiAgICAgICAgYXNZZWFycyA9IG1ha2VBcygneScpLFxuICAgICAgICB2YWx1ZU9mJDEgPSBhc01pbGxpc2Vjb25kcztcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQkMih1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpc1t1bml0cyArICdzJ10oKSA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0dGVyKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2RhdGFbbmFtZV0gOiBOYU47XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpLFxuICAgICAgICBzZWNvbmRzID0gbWFrZUdldHRlcignc2Vjb25kcycpLFxuICAgICAgICBtaW51dGVzID0gbWFrZUdldHRlcignbWludXRlcycpLFxuICAgICAgICBob3VycyA9IG1ha2VHZXR0ZXIoJ2hvdXJzJyksXG4gICAgICAgIGRheXMgPSBtYWtlR2V0dGVyKCdkYXlzJyksXG4gICAgICAgIG1vbnRocyA9IG1ha2VHZXR0ZXIoJ21vbnRocycpLFxuICAgICAgICB5ZWFycyA9IG1ha2VHZXR0ZXIoJ3llYXJzJyk7XG5cbiAgICBmdW5jdGlvbiB3ZWVrcygpIHtcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XG4gICAgfVxuXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgICAgdGhyZXNob2xkcyA9IHtcbiAgICAgICAgICAgIHNzOiA0NCwgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgICAgICBzOiA0NSwgLy8gc2Vjb25kcyB0byBtaW51dGVcbiAgICAgICAgICAgIG06IDQ1LCAvLyBtaW51dGVzIHRvIGhvdXJcbiAgICAgICAgICAgIGg6IDIyLCAvLyBob3VycyB0byBkYXlcbiAgICAgICAgICAgIGQ6IDI2LCAvLyBkYXlzIHRvIG1vbnRoL3dlZWtcbiAgICAgICAgICAgIHc6IG51bGwsIC8vIHdlZWtzIHRvIG1vbnRoXG4gICAgICAgICAgICBNOiAxMSwgLy8gbW9udGhzIHRvIHllYXJcbiAgICAgICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEocG9zTmVnRHVyYXRpb24sIHdpdGhvdXRTdWZmaXgsIHRocmVzaG9sZHMsIGxvY2FsZSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCksXG4gICAgICAgICAgICBzZWNvbmRzID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSksXG4gICAgICAgICAgICBtaW51dGVzID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSksXG4gICAgICAgICAgICBob3VycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpLFxuICAgICAgICAgICAgZGF5cyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpLFxuICAgICAgICAgICAgbW9udGhzID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSksXG4gICAgICAgICAgICB3ZWVrcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd3JykpLFxuICAgICAgICAgICAgeWVhcnMgPSByb3VuZChkdXJhdGlvbi5hcygneScpKSxcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDw9IHRocmVzaG9sZHMuc3MgJiYgWydzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgJiYgWydzcycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDw9IDEgJiYgWydtJ10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPCB0aHJlc2hvbGRzLm0gJiYgWydtbScsIG1pbnV0ZXNdKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8PSAxICYmIFsnaCddKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8IHRocmVzaG9sZHMuaCAmJiBbJ2hoJywgaG91cnNdKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDw9IDEgJiYgWydkJ10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPCB0aHJlc2hvbGRzLmQgJiYgWydkZCcsIGRheXNdKTtcblxuICAgICAgICBpZiAodGhyZXNob2xkcy53ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIGEgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPD0gMSAmJiBbJ3cnXSkgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPCB0aHJlc2hvbGRzLncgJiYgWyd3dycsIHdlZWtzXSk7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEgfHxcbiAgICAgICAgICAgIChtb250aHMgPD0gMSAmJiBbJ00nXSkgfHxcbiAgICAgICAgICAgIChtb250aHMgPCB0aHJlc2hvbGRzLk0gJiYgWydNTScsIG1vbnRoc10pIHx8XG4gICAgICAgICAgICAoeWVhcnMgPD0gMSAmJiBbJ3knXSkgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcocm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICBpZiAocm91bmRpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3VuZGluZ0Z1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb3VuZCA9IHJvdW5kaW5nRnVuY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZShhcmdXaXRoU3VmZml4LCBhcmdUaHJlc2hvbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpdGhTdWZmaXggPSBmYWxzZSxcbiAgICAgICAgICAgIHRoID0gdGhyZXNob2xkcyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhcmdUaHJlc2hvbGRzID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgICAgIGFyZ1dpdGhTdWZmaXggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgd2l0aFN1ZmZpeCA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdUaHJlc2hvbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGggPSBPYmplY3QuYXNzaWduKHt9LCB0aHJlc2hvbGRzLCBhcmdUaHJlc2hvbGRzKTtcbiAgICAgICAgICAgIGlmIChhcmdUaHJlc2hvbGRzLnMgIT0gbnVsbCAmJiBhcmdUaHJlc2hvbGRzLnNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aC5zcyA9IGFyZ1RocmVzaG9sZHMucyAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgb3V0cHV0ID0gcmVsYXRpdmVUaW1lJDEodGhpcywgIXdpdGhTdWZmaXgsIHRoLCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyQxKCkge1xuICAgICAgICAvLyBmb3IgSVNPIHN0cmluZ3Mgd2UgZG8gbm90IHVzZSB0aGUgbm9ybWFsIGJ1YmJsaW5nIHJ1bGVzOlxuICAgICAgICAvLyAgKiBtaWxsaXNlY29uZHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIGhvdXJzXG4gICAgICAgIC8vICAqIGRheXMgZG8gbm90IGJ1YmJsZSBhdCBhbGxcbiAgICAgICAgLy8gICogbW9udGhzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSB5ZWFyc1xuICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29udGV4dC1mcmVlIGNvbnZlcnNpb24gYmV0d2VlbiBob3VycyBhbmQgZGF5c1xuICAgICAgICAvLyAodGhpbmsgb2YgY2xvY2sgY2hhbmdlcylcbiAgICAgICAgLy8gYW5kIGFsc28gbm90IGJldHdlZW4gZGF5cyBhbmQgbW9udGhzICgyOC0zMSBkYXlzIHBlciBtb250aClcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2Vjb25kcyA9IGFicyQxKHRoaXMuX21pbGxpc2Vjb25kcykgLyAxMDAwLFxuICAgICAgICAgICAgZGF5cyA9IGFicyQxKHRoaXMuX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzJDEodGhpcy5fbW9udGhzKSxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIHRvdGFsID0gdGhpcy5hc1NlY29uZHMoKSxcbiAgICAgICAgICAgIHRvdGFsU2lnbixcbiAgICAgICAgICAgIHltU2lnbixcbiAgICAgICAgICAgIGRheXNTaWduLFxuICAgICAgICAgICAgaG1zU2lnbjtcblxuICAgICAgICBpZiAoIXRvdGFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIEMjJ3MgKE5vZGEpIGFuZCBweXRob24gKGlzb2RhdGUpLi4uXG4gICAgICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXG4gICAgICAgICAgICByZXR1cm4gJ1AwRCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzNjAwIHNlY29uZHMgLT4gNjAgbWludXRlcyAtPiAxIGhvdXJcbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcbiAgICAgICAgbWludXRlcyAlPSA2MDtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2RvcmRpbGxlL21vbWVudC1pc29kdXJhdGlvbi9ibG9iL21hc3Rlci9tb21lbnQuaXNvZHVyYXRpb24uanNcbiAgICAgICAgcyA9IHNlY29uZHMgPyBzZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sICcnKSA6ICcnO1xuXG4gICAgICAgIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB5bVNpZ24gPSBzaWduKHRoaXMuX21vbnRocykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGRheXNTaWduID0gc2lnbih0aGlzLl9kYXlzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdG90YWxTaWduICtcbiAgICAgICAgICAgICdQJyArXG4gICAgICAgICAgICAoeWVhcnMgPyB5bVNpZ24gKyB5ZWFycyArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAobW9udGhzID8geW1TaWduICsgbW9udGhzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChkYXlzID8gZGF5c1NpZ24gKyBkYXlzICsgJ0QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyB8fCBtaW51dGVzIHx8IHNlY29uZHMgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzID8gaG1zU2lnbiArIGhvdXJzICsgJ0gnIDogJycpICtcbiAgICAgICAgICAgIChtaW51dGVzID8gaG1zU2lnbiArIG1pbnV0ZXMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKHNlY29uZHMgPyBobXNTaWduICsgcyArICdTJyA6ICcnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBwcm90byQyID0gRHVyYXRpb24ucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMi5pc1ZhbGlkID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzID0gYWJzO1xuICAgIHByb3RvJDIuYWRkID0gYWRkJDE7XG4gICAgcHJvdG8kMi5zdWJ0cmFjdCA9IHN1YnRyYWN0JDE7XG4gICAgcHJvdG8kMi5hcyA9IGFzO1xuICAgIHByb3RvJDIuYXNNaWxsaXNlY29uZHMgPSBhc01pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLmFzU2Vjb25kcyA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyA9IGFzTWludXRlcztcbiAgICBwcm90byQyLmFzSG91cnMgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzID0gYXNEYXlzO1xuICAgIHByb3RvJDIuYXNXZWVrcyA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyA9IGFzUXVhcnRlcnM7XG4gICAgcHJvdG8kMi5hc1llYXJzID0gYXNZZWFycztcbiAgICBwcm90byQyLnZhbHVlT2YgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlID0gYnViYmxlO1xuICAgIHByb3RvJDIuY2xvbmUgPSBjbG9uZSQxO1xuICAgIHByb3RvJDIuZ2V0ID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5zZWNvbmRzID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgPSBtaW51dGVzO1xuICAgIHByb3RvJDIuaG91cnMgPSBob3VycztcbiAgICBwcm90byQyLmRheXMgPSBkYXlzO1xuICAgIHByb3RvJDIud2Vla3MgPSB3ZWVrcztcbiAgICBwcm90byQyLm1vbnRocyA9IG1vbnRocztcbiAgICBwcm90byQyLnllYXJzID0geWVhcnM7XG4gICAgcHJvdG8kMi5odW1hbml6ZSA9IGh1bWFuaXplO1xuICAgIHByb3RvJDIudG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9KU09OID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90byQyLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3RvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpJyxcbiAgICAgICAgdG9JU09TdHJpbmckMVxuICAgICk7XG4gICAgcHJvdG8kMi5sYW5nID0gbGFuZztcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd4JywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG4gICAgYWRkUGFyc2VUb2tlbignWCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShwYXJzZUZsb2F0KGlucHV0KSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vISBtb21lbnQuanNcblxuICAgIGhvb2tzLnZlcnNpb24gPSAnMi4zMC4xJztcblxuICAgIHNldEhvb2tDYWxsYmFjayhjcmVhdGVMb2NhbCk7XG5cbiAgICBob29rcy5mbiA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiA9IG1pbjtcbiAgICBob29rcy5tYXggPSBtYXg7XG4gICAgaG9va3Mubm93ID0gbm93O1xuICAgIGhvb2tzLnV0YyA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ID0gY3JlYXRlVW5peDtcbiAgICBob29rcy5tb250aHMgPSBsaXN0TW9udGhzO1xuICAgIGhvb2tzLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBob29rcy5sb2NhbGUgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG4gICAgaG9va3MuaW52YWxpZCA9IGNyZWF0ZUludmFsaWQ7XG4gICAgaG9va3MuZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbjtcbiAgICBob29rcy5pc01vbWVudCA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzID0gbGlzdFdlZWtkYXlzO1xuICAgIGhvb2tzLnBhcnNlWm9uZSA9IGNyZWF0ZUluWm9uZTtcbiAgICBob29rcy5sb2NhbGVEYXRhID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuICAgIGhvb2tzLm1vbnRoc1Nob3J0ID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluID0gbGlzdFdlZWtkYXlzTWluO1xuICAgIGhvb2tzLmRlZmluZUxvY2FsZSA9IGRlZmluZUxvY2FsZTtcbiAgICBob29rcy51cGRhdGVMb2NhbGUgPSB1cGRhdGVMb2NhbGU7XG4gICAgaG9va3MubG9jYWxlcyA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgPSBsaXN0V2Vla2RheXNTaG9ydDtcbiAgICBob29rcy5ub3JtYWxpemVVbml0cyA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nID0gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmc7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkO1xuICAgIGhvb2tzLmNhbGVuZGFyRm9ybWF0ID0gZ2V0Q2FsZW5kYXJGb3JtYXQ7XG4gICAgaG9va3MucHJvdG90eXBlID0gcHJvdG87XG5cbiAgICAvLyBjdXJyZW50bHkgSFRNTDUgaW5wdXQgdHlwZSBvbmx5IHN1cHBvcnRzIDI0LWhvdXIgZm9ybWF0c1xuICAgIGhvb2tzLkhUTUw1X0ZNVCA9IHtcbiAgICAgICAgREFURVRJTUVfTE9DQUw6ICdZWVlZLU1NLUREVEhIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6ICdZWVlZLU1NLUREVEhIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBEQVRFOiAnWVlZWS1NTS1ERCcsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBUSU1FX01TOiAnSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAvLyA8aW5wdXQgdHlwZT1cIndlZWtcIiAvPlxuICAgICAgICBNT05USDogJ1lZWVktTU0nLCAvLyA8aW5wdXQgdHlwZT1cIm1vbnRoXCIgLz5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGhvb2tzO1xuXG59KSkpO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYm9vbGVhbiBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYm9vbGVhbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQm9vbGVhbihmYWxzZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Jvb2xlYW4obnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGJvb2xUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQm9vbGVhbjtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBOdW1iZXJgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogKipOb3RlOioqIFRvIGV4Y2x1ZGUgYEluZmluaXR5YCwgYC1JbmZpbml0eWAsIGFuZCBgTmFOYCwgd2hpY2ggYXJlXG4gKiBjbGFzc2lmaWVkIGFzIG51bWJlcnMsIHVzZSB0aGUgYF8uaXNGaW5pdGVgIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG51bWJlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTnVtYmVyKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc051bWJlcignMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IG51bWJlclRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOdW1iZXI7XG4iLCAidmFyIGlzTnVtYmVyID0gcmVxdWlyZSgnLi9pc051bWJlcicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBOYU5gLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICogW2BOdW1iZXIuaXNOYU5gXShodHRwczovL21kbi5pby9OdW1iZXIvaXNOYU4pIGFuZCBpcyBub3QgdGhlIHNhbWUgYXNcbiAqIGdsb2JhbCBbYGlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vaXNOYU4pIHdoaWNoIHJldHVybnMgYHRydWVgIGZvclxuICogYHVuZGVmaW5lZGAgYW5kIG90aGVyIG5vbi1udW1iZXIgdmFsdWVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNOYU4oTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTmFOKG5ldyBOdW1iZXIoTmFOKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogaXNOYU4odW5kZWZpbmVkKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTmFOKHVuZGVmaW5lZCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICAvLyBBbiBgTmFOYCBwcmltaXRpdmUgaXMgdGhlIG9ubHkgdmFsdWUgdGhhdCBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLlxuICAvLyBQZXJmb3JtIHRoZSBgdG9TdHJpbmdUYWdgIGNoZWNrIGZpcnN0IHRvIGF2b2lkIGVycm9ycyB3aXRoIHNvbWVcbiAgLy8gQWN0aXZlWCBvYmplY3RzIGluIElFLlxuICByZXR1cm4gaXNOdW1iZXIodmFsdWUpICYmIHZhbHVlICE9ICt2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc05hTjtcbiIsICIvKiEgQHByZXNlcnZlXG4gKiBudW1lcmFsLmpzXG4gKiB2ZXJzaW9uIDogMi4wLjZcbiAqIGF1dGhvciA6IEFkYW0gRHJhcGVyXG4gKiBsaWNlbnNlIDogTUlUXG4gKiBodHRwOi8vYWRhbXdkcmFwZXIuZ2l0aHViLmNvbS9OdW1lcmFsLWpzL1xuICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBnbG9iYWwubnVtZXJhbCA9IGZhY3RvcnkoKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIFZhcmlhYmxlc1xuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHZhciBudW1lcmFsLFxuICAgICAgICBfLFxuICAgICAgICBWRVJTSU9OID0gJzIuMC42JyxcbiAgICAgICAgZm9ybWF0cyA9IHt9LFxuICAgICAgICBsb2NhbGVzID0ge30sXG4gICAgICAgIGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgY3VycmVudExvY2FsZTogJ2VuJyxcbiAgICAgICAgICAgIHplcm9Gb3JtYXQ6IG51bGwsXG4gICAgICAgICAgICBudWxsRm9ybWF0OiBudWxsLFxuICAgICAgICAgICAgZGVmYXVsdEZvcm1hdDogJzAsMCcsXG4gICAgICAgICAgICBzY2FsZVBlcmNlbnRCeTEwMDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgY3VycmVudExvY2FsZTogZGVmYXVsdHMuY3VycmVudExvY2FsZSxcbiAgICAgICAgICAgIHplcm9Gb3JtYXQ6IGRlZmF1bHRzLnplcm9Gb3JtYXQsXG4gICAgICAgICAgICBudWxsRm9ybWF0OiBkZWZhdWx0cy5udWxsRm9ybWF0LFxuICAgICAgICAgICAgZGVmYXVsdEZvcm1hdDogZGVmYXVsdHMuZGVmYXVsdEZvcm1hdCxcbiAgICAgICAgICAgIHNjYWxlUGVyY2VudEJ5MTAwOiBkZWZhdWx0cy5zY2FsZVBlcmNlbnRCeTEwMFxuICAgICAgICB9O1xuXG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgIENvbnN0cnVjdG9yc1xuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIC8vIE51bWVyYWwgcHJvdG90eXBlIG9iamVjdFxuICAgIGZ1bmN0aW9uIE51bWVyYWwoaW5wdXQsIG51bWJlcikge1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gbnVtYmVyO1xuICAgIH1cblxuICAgIG51bWVyYWwgPSBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgdmFsdWUsXG4gICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgdW5mb3JtYXRGdW5jdGlvbixcbiAgICAgICAgICAgIHJlZ2V4cDtcblxuICAgICAgICBpZiAobnVtZXJhbC5pc051bWVyYWwoaW5wdXQpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGlucHV0LnZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IDAgfHwgdHlwZW9mIGlucHV0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBudWxsIHx8IF8uaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuemVyb0Zvcm1hdCAmJiBpbnB1dCA9PT0gb3B0aW9ucy56ZXJvRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm51bGxGb3JtYXQgJiYgaW5wdXQgPT09IG9wdGlvbnMubnVsbEZvcm1hdCB8fCAhaW5wdXQucmVwbGFjZSgvW14wLTldKy9nLCAnJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGtpbmQgaW4gZm9ybWF0cykge1xuICAgICAgICAgICAgICAgICAgICByZWdleHAgPSB0eXBlb2YgZm9ybWF0c1traW5kXS5yZWdleHBzLnVuZm9ybWF0ID09PSAnZnVuY3Rpb24nID8gZm9ybWF0c1traW5kXS5yZWdleHBzLnVuZm9ybWF0KCkgOiBmb3JtYXRzW2tpbmRdLnJlZ2V4cHMudW5mb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2V4cCAmJiBpbnB1dC5tYXRjaChyZWdleHApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uID0gZm9ybWF0c1traW5kXS51bmZvcm1hdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1bmZvcm1hdEZ1bmN0aW9uID0gdW5mb3JtYXRGdW5jdGlvbiB8fCBudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXI7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZm9ybWF0RnVuY3Rpb24oaW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIoaW5wdXQpfHwgbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgTnVtZXJhbChpbnB1dCwgdmFsdWUpO1xuICAgIH07XG5cbiAgICAvLyB2ZXJzaW9uIG51bWJlclxuICAgIG51bWVyYWwudmVyc2lvbiA9IFZFUlNJT047XG5cbiAgICAvLyBjb21wYXJlIG51bWVyYWwgb2JqZWN0XG4gICAgbnVtZXJhbC5pc051bWVyYWwgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE51bWVyYWw7XG4gICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbnNcbiAgICBudW1lcmFsLl8gPSBfID0ge1xuICAgICAgICAvLyBmb3JtYXRzIG51bWJlcnMgc2VwYXJhdG9ycywgZGVjaW1hbHMgcGxhY2VzLCBzaWducywgYWJicmV2aWF0aW9uc1xuICAgICAgICBudW1iZXJUb0Zvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGxvY2FsZXNbbnVtZXJhbC5vcHRpb25zLmN1cnJlbnRMb2NhbGVdLFxuICAgICAgICAgICAgICAgIG5lZ1AgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBvcHREZWMgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBsZWFkaW5nQ291bnQgPSAwLFxuICAgICAgICAgICAgICAgIGFiYnIgPSAnJyxcbiAgICAgICAgICAgICAgICB0cmlsbGlvbiA9IDEwMDAwMDAwMDAwMDAsXG4gICAgICAgICAgICAgICAgYmlsbGlvbiA9IDEwMDAwMDAwMDAsXG4gICAgICAgICAgICAgICAgbWlsbGlvbiA9IDEwMDAwMDAsXG4gICAgICAgICAgICAgICAgdGhvdXNhbmQgPSAxMDAwLFxuICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJyxcbiAgICAgICAgICAgICAgICBuZWcgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UsIC8vIGZvcmNlIGFiYnJldmlhdGlvblxuICAgICAgICAgICAgICAgIGFicyxcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4LFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIGludCxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb24sXG4gICAgICAgICAgICAgICAgc2lnbmVkLFxuICAgICAgICAgICAgICAgIHRob3VzYW5kcyxcbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBuZXZlciBmb3JtYXQgYSBudWxsIHZhbHVlXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIHx8IDA7XG5cbiAgICAgICAgICAgIGFicyA9IE1hdGguYWJzKHZhbHVlKTtcblxuICAgICAgICAgICAgLy8gc2VlIGlmIHdlIHNob3VsZCB1c2UgcGFyZW50aGVzZXMgZm9yIG5lZ2F0aXZlIG51bWJlciBvciBpZiB3ZSBzaG91bGQgcHJlZml4IHdpdGggYSBzaWduXG4gICAgICAgICAgICAvLyBpZiBib3RoIGFyZSBwcmVzZW50IHdlIGRlZmF1bHQgdG8gcGFyZW50aGVzZXNcbiAgICAgICAgICAgIGlmIChudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnKCcpKSB7XG4gICAgICAgICAgICAgICAgbmVnUCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1tcXCh8XFwpXS9nLCAnJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcrJykgfHwgbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJy0nKSkge1xuICAgICAgICAgICAgICAgIHNpZ25lZCA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcrJykgPyBmb3JtYXQuaW5kZXhPZignKycpIDogdmFsdWUgPCAwID8gZm9ybWF0LmluZGV4T2YoJy0nKSA6IC0xO1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9bXFwrfFxcLV0vZywgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzZWUgaWYgYWJicmV2aWF0aW9uIGlzIHdhbnRlZFxuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdhJykpIHtcbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UgPSBmb3JtYXQubWF0Y2goL2Eoa3xtfGJ8dCk/Lyk7XG5cbiAgICAgICAgICAgICAgICBhYmJyRm9yY2UgPSBhYmJyRm9yY2UgPyBhYmJyRm9yY2VbMV0gOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgYWJicmV2aWF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICcgYScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFiYnIgPSAnICc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UobmV3IFJlZ0V4cChhYmJyICsgJ2Fba21idF0/JyksICcnKTtcblxuICAgICAgICAgICAgICAgIGlmIChhYnMgPj0gdHJpbGxpb24gJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICd0Jykge1xuICAgICAgICAgICAgICAgICAgICAvLyB0cmlsbGlvblxuICAgICAgICAgICAgICAgICAgICBhYmJyICs9IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gdHJpbGxpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhYnMgPCB0cmlsbGlvbiAmJiBhYnMgPj0gYmlsbGlvbiAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ2InKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGJpbGxpb25cbiAgICAgICAgICAgICAgICAgICAgYWJiciArPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gYmlsbGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFicyA8IGJpbGxpb24gJiYgYWJzID49IG1pbGxpb24gJiYgIWFiYnJGb3JjZSB8fCBhYmJyRm9yY2UgPT09ICdtJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBtaWxsaW9uXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMubWlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAvIG1pbGxpb247XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhYnMgPCBtaWxsaW9uICYmIGFicyA+PSB0aG91c2FuZCAmJiAhYWJickZvcmNlIHx8IGFiYnJGb3JjZSA9PT0gJ2snKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRob3VzYW5kXG4gICAgICAgICAgICAgICAgICAgIGFiYnIgKz0gbG9jYWxlLmFiYnJldmlhdGlvbnMudGhvdXNhbmQ7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLyB0aG91c2FuZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBvcHRpb25hbCBkZWNpbWFsc1xuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdbLl0nKSkge1xuICAgICAgICAgICAgICAgIG9wdERlYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoJ1suXScsICcuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJyZWFrIG51bWJlciBhbmQgZm9ybWF0XG4gICAgICAgICAgICBpbnQgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJylbMF07XG4gICAgICAgICAgICBwcmVjaXNpb24gPSBmb3JtYXQuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgICAgIHRob3VzYW5kcyA9IGZvcm1hdC5pbmRleE9mKCcsJyk7XG4gICAgICAgICAgICBsZWFkaW5nQ291bnQgPSAoZm9ybWF0LnNwbGl0KCcuJylbMF0uc3BsaXQoJywnKVswXS5tYXRjaCgvMC9nKSB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICAgICAgICBpZiAocHJlY2lzaW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhwcmVjaXNpb24sICdbJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uLnJlcGxhY2UoJ10nLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbi5zcGxpdCgnWycpO1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gbnVtZXJhbC5fLnRvRml4ZWQodmFsdWUsIChwcmVjaXNpb25bMF0ubGVuZ3RoICsgcHJlY2lzaW9uWzFdLmxlbmd0aCksIHJvdW5kaW5nRnVuY3Rpb24sIHByZWNpc2lvblsxXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uLmxlbmd0aCwgcm91bmRpbmdGdW5jdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaW50ID0gZGVjaW1hbC5zcGxpdCgnLicpWzBdO1xuXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhkZWNpbWFsLCAnLicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsICsgZGVjaW1hbC5zcGxpdCgnLicpWzFdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgPSAnJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAob3B0RGVjICYmIE51bWJlcihkZWNpbWFsLnNsaWNlKDEpKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnQgPSBudW1lcmFsLl8udG9GaXhlZCh2YWx1ZSwgMCwgcm91bmRpbmdGdW5jdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGFiYnJldmlhdGlvbiBhZ2FpbiBhZnRlciByb3VuZGluZ1xuICAgICAgICAgICAgaWYgKGFiYnIgJiYgIWFiYnJGb3JjZSAmJiBOdW1iZXIoaW50KSA+PSAxMDAwICYmIGFiYnIgIT09IGxvY2FsZS5hYmJyZXZpYXRpb25zLnRyaWxsaW9uKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gU3RyaW5nKE51bWJlcihpbnQpIC8gMTAwMCk7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFiYnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBsb2NhbGUuYWJicmV2aWF0aW9ucy50aG91c2FuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5taWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgbG9jYWxlLmFiYnJldmlhdGlvbnMubWlsbGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy5iaWxsaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgbG9jYWxlLmFiYnJldmlhdGlvbnMuYmlsbGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYnIgPSBsb2NhbGUuYWJicmV2aWF0aW9ucy50cmlsbGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAvLyBmb3JtYXQgbnVtYmVyXG4gICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKGludCwgJy0nKSkge1xuICAgICAgICAgICAgICAgIGludCA9IGludC5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICBuZWcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW50Lmxlbmd0aCA8IGxlYWRpbmdDb3VudCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBsZWFkaW5nQ291bnQgLSBpbnQubGVuZ3RoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGludCA9ICcwJyArIGludDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aG91c2FuZHMgPiAtMSkge1xuICAgICAgICAgICAgICAgIGludCA9IGludC50b1N0cmluZygpLnJlcGxhY2UoLyhcXGQpKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJyQxJyArIGxvY2FsZS5kZWxpbWl0ZXJzLnRob3VzYW5kcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmb3JtYXQuaW5kZXhPZignLicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaW50ID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG91dHB1dCA9IGludCArIGRlY2ltYWwgKyAoYWJiciA/IGFiYnIgOiAnJyk7XG5cbiAgICAgICAgICAgIGlmIChuZWdQKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKG5lZ1AgJiYgbmVnID8gJygnIDogJycpICsgb3V0cHV0ICsgKG5lZ1AgJiYgbmVnID8gJyknIDogJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc2lnbmVkID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gc2lnbmVkID09PSAwID8gKG5lZyA/ICctJyA6ICcrJykgKyBvdXRwdXQgOiBvdXRwdXQgKyAobmVnID8gJy0nIDogJysnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5lZykge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnLScgKyBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICAvLyB1bmZvcm1hdHMgbnVtYmVycyBzZXBhcmF0b3JzLCBkZWNpbWFscyBwbGFjZXMsIHNpZ25zLCBhYmJyZXZpYXRpb25zXG4gICAgICAgIHN0cmluZ1RvTnVtYmVyOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBsb2NhbGVzW29wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgc3RyaW5nT3JpZ2luYWwgPSBzdHJpbmcsXG4gICAgICAgICAgICAgICAgYWJicmV2aWF0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmQ6IDMsXG4gICAgICAgICAgICAgICAgICAgIG1pbGxpb246IDYsXG4gICAgICAgICAgICAgICAgICAgIGJpbGxpb246IDksXG4gICAgICAgICAgICAgICAgICAgIHRyaWxsaW9uOiAxMlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWJicmV2aWF0aW9uLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgcmVnZXhwO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy56ZXJvRm9ybWF0ICYmIHN0cmluZyA9PT0gb3B0aW9ucy56ZXJvRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLm51bGxGb3JtYXQgJiYgc3RyaW5nID09PSBvcHRpb25zLm51bGxGb3JtYXQgfHwgIXN0cmluZy5yZXBsYWNlKC9bXjAtOV0rL2csICcnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gMTtcblxuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xcLi9nLCAnJykucmVwbGFjZShsb2NhbGUuZGVsaW1pdGVycy5kZWNpbWFsLCAnLicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoYWJicmV2aWF0aW9uIGluIGFiYnJldmlhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnZXhwID0gbmV3IFJlZ0V4cCgnW15hLXpBLVpdJyArIGxvY2FsZS5hYmJyZXZpYXRpb25zW2FiYnJldmlhdGlvbl0gKyAnKD86XFxcXCl8KFxcXFwnICsgbG9jYWxlLmN1cnJlbmN5LnN5bWJvbCArICcpPyg/OlxcXFwpKT8pPyQnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nT3JpZ2luYWwubWF0Y2gocmVnZXhwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKj0gTWF0aC5wb3coMTAsIGFiYnJldmlhdGlvbnNbYWJicmV2aWF0aW9uXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBuZWdhdGl2ZSBudW1iZXJcbiAgICAgICAgICAgICAgICB2YWx1ZSAqPSAoc3RyaW5nLnNwbGl0KCctJykubGVuZ3RoICsgTWF0aC5taW4oc3RyaW5nLnNwbGl0KCcoJykubGVuZ3RoIC0gMSwgc3RyaW5nLnNwbGl0KCcpJykubGVuZ3RoIC0gMSkpICUgMiA/IDEgOiAtMTtcblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBub24gbnVtYmVyc1xuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9bXjAtOVxcLl0rL2csICcnKTtcblxuICAgICAgICAgICAgICAgIHZhbHVlICo9IE51bWJlcihzdHJpbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGlzTmFOOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4odmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBpbmNsdWRlczogZnVuY3Rpb24oc3RyaW5nLCBzZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuaW5kZXhPZihzZWFyY2gpICE9PSAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5zZXJ0OiBmdW5jdGlvbihzdHJpbmcsIHN1YlN0cmluZywgc3RhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UoMCwgc3RhcnQpICsgc3ViU3RyaW5nICsgc3RyaW5nLnNsaWNlKHN0YXJ0KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVkdWNlOiBmdW5jdGlvbihhcnJheSwgY2FsbGJhY2sgLyosIGluaXRpYWxWYWx1ZSovKSB7XG4gICAgICAgICAgICBpZiAodGhpcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5LnByb3RvdHlwZS5yZWR1Y2UgY2FsbGVkIG9uIG51bGwgb3IgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdChhcnJheSksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgayA9IDAsXG4gICAgICAgICAgICAgICAgdmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBhcmd1bWVudHNbMl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdoaWxlIChrIDwgbGVuICYmICEoayBpbiB0KSkge1xuICAgICAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGsgPj0gbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRbaysrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoOyBrIDwgbGVuOyBrKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoayBpbiB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIHRba10sIGssIHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXB1dGVzIHRoZSBtdWx0aXBsaWVyIG5lY2Vzc2FyeSB0byBtYWtlIHggPj0gMSxcbiAgICAgICAgICogZWZmZWN0aXZlbHkgZWxpbWluYXRpbmcgbWlzY2FsY3VsYXRpb25zIGNhdXNlZCBieVxuICAgICAgICAgKiBmaW5pdGUgcHJlY2lzaW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgbXVsdGlwbGllcjogZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IHgudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoIDwgMiA/IDEgOiBNYXRoLnBvdygxMCwgcGFydHNbMV0ubGVuZ3RoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgcmV0dXJucyB0aGUgbWF4aW11bVxuICAgICAgICAgKiBtdWx0aXBsaWVyIHRoYXQgbXVzdCBiZSB1c2VkIHRvIG5vcm1hbGl6ZSBhbiBvcGVyYXRpb24gaW52b2x2aW5nXG4gICAgICAgICAqIGFsbCBvZiB0aGVtLlxuICAgICAgICAgKi9cbiAgICAgICAgY29ycmVjdGlvbkZhY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgICAgICAgICByZXR1cm4gYXJncy5yZWR1Y2UoZnVuY3Rpb24oYWNjdW0sIG5leHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbW4gPSBfLm11bHRpcGxpZXIobmV4dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtID4gbW4gPyBhY2N1bSA6IG1uO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0b0ZpeGVkKCkgdGhhdCB0cmVhdHMgZmxvYXRzIG1vcmUgbGlrZSBkZWNpbWFsc1xuICAgICAgICAgKlxuICAgICAgICAgKiBGaXhlcyBiaW5hcnkgcm91bmRpbmcgaXNzdWVzIChlZy4gKDAuNjE1KS50b0ZpeGVkKDIpID09PSAnMC42MScpIHRoYXQgcHJlc2VudFxuICAgICAgICAgKiBwcm9ibGVtcyBmb3IgYWNjb3VudGluZy0gYW5kIGZpbmFuY2UtcmVsYXRlZCBzb2Z0d2FyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRvRml4ZWQ6IGZ1bmN0aW9uKHZhbHVlLCBtYXhEZWNpbWFscywgcm91bmRpbmdGdW5jdGlvbiwgb3B0aW9uYWxzKSB7XG4gICAgICAgICAgICB2YXIgc3BsaXRWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKSxcbiAgICAgICAgICAgICAgICBtaW5EZWNpbWFscyA9IG1heERlY2ltYWxzIC0gKG9wdGlvbmFscyB8fCAwKSxcbiAgICAgICAgICAgICAgICBib3VuZGVkUHJlY2lzaW9uLFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsc1JlZ0V4cCxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgIC8vIFVzZSB0aGUgc21hbGxlc3QgcHJlY2lzaW9uIHZhbHVlIHBvc3NpYmxlIHRvIGF2b2lkIGVycm9ycyBmcm9tIGZsb2F0aW5nIHBvaW50IHJlcHJlc2VudGF0aW9uXG4gICAgICAgICAgICBpZiAoc3BsaXRWYWx1ZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgYm91bmRlZFByZWNpc2lvbiA9IE1hdGgubWluKE1hdGgubWF4KHNwbGl0VmFsdWVbMV0ubGVuZ3RoLCBtaW5EZWNpbWFscyksIG1heERlY2ltYWxzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJvdW5kZWRQcmVjaXNpb24gPSBtaW5EZWNpbWFscztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcG93ZXIgPSBNYXRoLnBvdygxMCwgYm91bmRlZFByZWNpc2lvbik7XG5cbiAgICAgICAgICAgIC8vIE11bHRpcGx5IHVwIGJ5IHByZWNpc2lvbiwgcm91bmQgYWNjdXJhdGVseSwgdGhlbiBkaXZpZGUgYW5kIHVzZSBuYXRpdmUgdG9GaXhlZCgpOlxuICAgICAgICAgICAgb3V0cHV0ID0gKHJvdW5kaW5nRnVuY3Rpb24odmFsdWUgKyAnZSsnICsgYm91bmRlZFByZWNpc2lvbikgLyBwb3dlcikudG9GaXhlZChib3VuZGVkUHJlY2lzaW9uKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbmFscyA+IG1heERlY2ltYWxzIC0gYm91bmRlZFByZWNpc2lvbikge1xuICAgICAgICAgICAgICAgIG9wdGlvbmFsc1JlZ0V4cCA9IG5ldyBSZWdFeHAoJ1xcXFwuPzB7MSwnICsgKG9wdGlvbmFscyAtIChtYXhEZWNpbWFscyAtIGJvdW5kZWRQcmVjaXNpb24pKSArICd9JCcpO1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKG9wdGlvbmFsc1JlZ0V4cCwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIGF2YWxpYWJsZSBvcHRpb25zXG4gICAgbnVtZXJhbC5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIC8vIGF2YWxpYWJsZSBmb3JtYXRzXG4gICAgbnVtZXJhbC5mb3JtYXRzID0gZm9ybWF0cztcblxuICAgIC8vIGF2YWxpYWJsZSBmb3JtYXRzXG4gICAgbnVtZXJhbC5sb2NhbGVzID0gbG9jYWxlcztcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY3VycmVudCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBudW1lcmFsLmxvY2FsZSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBvcHRpb25zLmN1cnJlbnRMb2NhbGUgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zLmN1cnJlbnRMb2NhbGU7XG4gICAgfTtcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBsb2FkZWQgbG9jYWxlIGRhdGEuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnRcbiAgICAvLyBnbG9iYWwgbG9jYWxlIG9iamVjdC5cbiAgICBudW1lcmFsLmxvY2FsZURhdGEgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW29wdGlvbnMuY3VycmVudExvY2FsZV07XG4gICAgICAgIH1cblxuICAgICAgICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAoIWxvY2FsZXNba2V5XSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxvY2FsZSA6ICcgKyBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNba2V5XTtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBkZWZhdWx0cykge1xuICAgICAgICAgICAgb3B0aW9uc1twcm9wZXJ0eV0gPSBkZWZhdWx0c1twcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbnVtZXJhbC56ZXJvRm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIG9wdGlvbnMuemVyb0Zvcm1hdCA9IHR5cGVvZihmb3JtYXQpID09PSAnc3RyaW5nJyA/IGZvcm1hdCA6IG51bGw7XG4gICAgfTtcblxuICAgIG51bWVyYWwubnVsbEZvcm1hdCA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgb3B0aW9ucy5udWxsRm9ybWF0ID0gdHlwZW9mKGZvcm1hdCkgPT09ICdzdHJpbmcnID8gZm9ybWF0IDogbnVsbDtcbiAgICB9O1xuXG4gICAgbnVtZXJhbC5kZWZhdWx0Rm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIG9wdGlvbnMuZGVmYXVsdEZvcm1hdCA9IHR5cGVvZihmb3JtYXQpID09PSAnc3RyaW5nJyA/IGZvcm1hdCA6ICcwLjAnO1xuICAgIH07XG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgZm9ybWF0KSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgaWYgKHRoaXNbdHlwZSArICdzJ11bbmFtZV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IobmFtZSArICcgJyArIHR5cGUgKyAnIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXNbdHlwZSArICdzJ11bbmFtZV0gPSBmb3JtYXQ7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9O1xuXG5cbiAgICBudW1lcmFsLnZhbGlkYXRlID0gZnVuY3Rpb24odmFsLCBjdWx0dXJlKSB7XG4gICAgICAgIHZhciBfZGVjaW1hbFNlcCxcbiAgICAgICAgICAgIF90aG91c2FuZFNlcCxcbiAgICAgICAgICAgIF9jdXJyU3ltYm9sLFxuICAgICAgICAgICAgX3ZhbEFycmF5LFxuICAgICAgICAgICAgX2FiYnJPYmosXG4gICAgICAgICAgICBfdGhvdXNhbmRSZWdFeCxcbiAgICAgICAgICAgIGxvY2FsZURhdGEsXG4gICAgICAgICAgICB0ZW1wO1xuXG4gICAgICAgIC8vY29lcmNlIHZhbCB0byBzdHJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWwgKz0gJyc7XG5cbiAgICAgICAgICAgIGlmIChjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ051bWVyYWwuanM6IFZhbHVlIGlzIG5vdCBzdHJpbmcuIEl0IGhhcyBiZWVuIGNvLWVyY2VkIHRvOiAnLCB2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy90cmltIHdoaXRlc3BhY2VzIGZyb20gZWl0aGVyIHNpZGVzXG4gICAgICAgIHZhbCA9IHZhbC50cmltKCk7XG5cbiAgICAgICAgLy9pZiB2YWwgaXMganVzdCBkaWdpdHMgcmV0dXJuIHRydWVcbiAgICAgICAgaWYgKCEhdmFsLm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHZhbCBpcyBlbXB0eSByZXR1cm4gZmFsc2VcbiAgICAgICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vZ2V0IHRoZSBkZWNpbWFsIGFuZCB0aG91c2FuZHMgc2VwYXJhdG9yIGZyb20gbnVtZXJhbC5sb2NhbGVEYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvL2NoZWNrIGlmIHRoZSBjdWx0dXJlIGlzIHVuZGVyc3Rvb2QgYnkgbnVtZXJhbC4gaWYgbm90LCBkZWZhdWx0IGl0IHRvIGN1cnJlbnQgbG9jYWxlXG4gICAgICAgICAgICBsb2NhbGVEYXRhID0gbnVtZXJhbC5sb2NhbGVEYXRhKGN1bHR1cmUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2NhbGVEYXRhID0gbnVtZXJhbC5sb2NhbGVEYXRhKG51bWVyYWwubG9jYWxlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9zZXR1cCB0aGUgZGVsaW1pdGVycyBhbmQgY3VycmVuY3kgc3ltYm9sIGJhc2VkIG9uIGN1bHR1cmUvbG9jYWxlXG4gICAgICAgIF9jdXJyU3ltYm9sID0gbG9jYWxlRGF0YS5jdXJyZW5jeS5zeW1ib2w7XG4gICAgICAgIF9hYmJyT2JqID0gbG9jYWxlRGF0YS5hYmJyZXZpYXRpb25zO1xuICAgICAgICBfZGVjaW1hbFNlcCA9IGxvY2FsZURhdGEuZGVsaW1pdGVycy5kZWNpbWFsO1xuICAgICAgICBpZiAobG9jYWxlRGF0YS5kZWxpbWl0ZXJzLnRob3VzYW5kcyA9PT0gJy4nKSB7XG4gICAgICAgICAgICBfdGhvdXNhbmRTZXAgPSAnXFxcXC4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3Rob3VzYW5kU2VwID0gbG9jYWxlRGF0YS5kZWxpbWl0ZXJzLnRob3VzYW5kcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkYXRpbmcgY3VycmVuY3kgc3ltYm9sXG4gICAgICAgIHRlbXAgPSB2YWwubWF0Y2goL15bXlxcZF0rLyk7XG4gICAgICAgIGlmICh0ZW1wICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwuc3Vic3RyKDEpO1xuICAgICAgICAgICAgaWYgKHRlbXBbMF0gIT09IF9jdXJyU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy92YWxpZGF0aW5nIGFiYnJldmlhdGlvbiBzeW1ib2xcbiAgICAgICAgdGVtcCA9IHZhbC5tYXRjaCgvW15cXGRdKyQvKTtcbiAgICAgICAgaWYgKHRlbXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICBpZiAodGVtcFswXSAhPT0gX2FiYnJPYmoudGhvdXNhbmQgJiYgdGVtcFswXSAhPT0gX2FiYnJPYmoubWlsbGlvbiAmJiB0ZW1wWzBdICE9PSBfYWJick9iai5iaWxsaW9uICYmIHRlbXBbMF0gIT09IF9hYmJyT2JqLnRyaWxsaW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3Rob3VzYW5kUmVnRXggPSBuZXcgUmVnRXhwKF90aG91c2FuZFNlcCArICd7Mn0nKTtcblxuICAgICAgICBpZiAoIXZhbC5tYXRjaCgvW15cXGQuLF0vZykpIHtcbiAgICAgICAgICAgIF92YWxBcnJheSA9IHZhbC5zcGxpdChfZGVjaW1hbFNlcCk7XG4gICAgICAgICAgICBpZiAoX3ZhbEFycmF5Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChfdmFsQXJyYXkubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrLipcXGQkLykgJiYgIV92YWxBcnJheVswXS5tYXRjaChfdGhvdXNhbmRSZWdFeCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdmFsQXJyYXlbMF0ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAhISBfdmFsQXJyYXlbMF0ubWF0Y2goL15cXGQrJC8pICYmICFfdmFsQXJyYXlbMF0ubWF0Y2goX3Rob3VzYW5kUmVnRXgpICYmICEhIF92YWxBcnJheVsxXS5tYXRjaCgvXlxcZCskLykpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICggISEgX3ZhbEFycmF5WzBdLm1hdGNoKC9eXFxkKy4qXFxkJC8pICYmICFfdmFsQXJyYXlbMF0ubWF0Y2goX3Rob3VzYW5kUmVnRXgpICYmICEhIF92YWxBcnJheVsxXS5tYXRjaCgvXlxcZCskLykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgTnVtZXJhbCBQcm90b3R5cGVcbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBudW1lcmFsLmZuID0gTnVtZXJhbC5wcm90b3R5cGUgPSB7XG4gICAgICAgIGNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1lcmFsKHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBmb3JtYXQ6IGZ1bmN0aW9uKGlucHV0U3RyaW5nLCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl92YWx1ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSBpbnB1dFN0cmluZyB8fCBvcHRpb25zLmRlZmF1bHRGb3JtYXQsXG4gICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb247XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgcm91bmRpbmdGdW5jdGlvblxuICAgICAgICAgICAgcm91bmRpbmdGdW5jdGlvbiA9IHJvdW5kaW5nRnVuY3Rpb24gfHwgTWF0aC5yb3VuZDtcblxuICAgICAgICAgICAgLy8gZm9ybWF0IGJhc2VkIG9uIHZhbHVlXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IDAgJiYgb3B0aW9ucy56ZXJvRm9ybWF0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3B0aW9ucy56ZXJvRm9ybWF0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiBvcHRpb25zLm51bGxGb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvcHRpb25zLm51bGxGb3JtYXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoa2luZCBpbiBmb3JtYXRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXQubWF0Y2goZm9ybWF0c1traW5kXS5yZWdleHBzLmZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uID0gZm9ybWF0c1traW5kXS5mb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb24gPSBmb3JtYXRGdW5jdGlvbiB8fCBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQ7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBmb3JtYXRGdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBpbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGFkZDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yLmNhbGwobnVsbCwgdGhpcy5fdmFsdWUsIHZhbHVlKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtICsgTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY3Vycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrLCAwKSAvIGNvcnJGYWN0b3I7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBzdWJ0cmFjdDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yLmNhbGwobnVsbCwgdGhpcy5fdmFsdWUsIHZhbHVlKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2JhY2soYWNjdW0sIGN1cnIsIGN1cnJJLCBPKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtIC0gTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY3Vycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3ZhbHVlXSwgY2JhY2ssIE1hdGgucm91bmQodGhpcy5fdmFsdWUgKiBjb3JyRmFjdG9yKSkgLyBjb3JyRmFjdG9yO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgbXVsdGlwbHk6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBjYmFjayhhY2N1bSwgY3VyciwgY3VyckksIE8pIHtcbiAgICAgICAgICAgICAgICB2YXIgY29yckZhY3RvciA9IF8uY29ycmVjdGlvbkZhY3RvcihhY2N1bSwgY3Vycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoYWNjdW0gKiBjb3JyRmFjdG9yKSAqIE1hdGgucm91bmQoY3VyciAqIGNvcnJGYWN0b3IpIC8gTWF0aC5yb3VuZChjb3JyRmFjdG9yICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrLCAxKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGRpdmlkZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gXy5jb3JyZWN0aW9uRmFjdG9yKGFjY3VtLCBjdXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChhY2N1bSAqIGNvcnJGYWN0b3IpIC8gTWF0aC5yb3VuZChjdXJyICogY29yckZhY3Rvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gXy5yZWR1Y2UoW3RoaXMuX3ZhbHVlLCB2YWx1ZV0sIGNiYWNrKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGRpZmZlcmVuY2U6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5hYnMobnVtZXJhbCh0aGlzLl92YWx1ZSkuc3VidHJhY3QodmFsdWUpLnZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgICAgRGVmYXVsdCBMb2NhbGUgJiYgRm9ybWF0XG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgbnVtZXJhbC5yZWdpc3RlcignbG9jYWxlJywgJ2VuJywge1xuICAgICAgICBkZWxpbWl0ZXJzOiB7XG4gICAgICAgICAgICB0aG91c2FuZHM6ICcsJyxcbiAgICAgICAgICAgIGRlY2ltYWw6ICcuJ1xuICAgICAgICB9LFxuICAgICAgICBhYmJyZXZpYXRpb25zOiB7XG4gICAgICAgICAgICB0aG91c2FuZDogJ2snLFxuICAgICAgICAgICAgbWlsbGlvbjogJ20nLFxuICAgICAgICAgICAgYmlsbGlvbjogJ2InLFxuICAgICAgICAgICAgdHJpbGxpb246ICd0J1xuICAgICAgICB9LFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbihudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTA7XG4gICAgICAgICAgICByZXR1cm4gKH5+KG51bWJlciAlIDEwMCAvIDEwKSA9PT0gMSkgPyAndGgnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMSkgPyAnc3QnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMikgPyAnbmQnIDpcbiAgICAgICAgICAgICAgICAoYiA9PT0gMykgPyAncmQnIDogJ3RoJztcbiAgICAgICAgfSxcbiAgICAgICAgY3VycmVuY3k6IHtcbiAgICAgICAgICAgIHN5bWJvbDogJyQnXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIFxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdicHMnLCB7XG4gICAgICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiAvKEJQUykvLFxuICAgICAgICAgICAgICAgIHVuZm9ybWF0OiAvKEJQUykvXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNwYWNlID0gbnVtZXJhbC5fLmluY2x1ZGVzKGZvcm1hdCwgJyBCUFMnKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICogMTAwMDA7XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlIEJQU1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9cXHM/QlBTLywgJycpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhvdXRwdXQsICcpJykpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNwbGl0KCcnKTtcblxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQuc3BsaWNlKC0xLCAwLCBzcGFjZSArICdCUFMnKTtcblxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuam9pbignJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0ICsgc3BhY2UgKyAnQlBTJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKyhudW1lcmFsLl8uc3RyaW5nVG9OdW1iZXIoc3RyaW5nKSAqIDAuMDAwMSkudG9GaXhlZCgxNSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkZWNpbWFsID0ge1xuICAgICAgICAgICAgYmFzZTogMTAwMCxcbiAgICAgICAgICAgIHN1ZmZpeGVzOiBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXVxuICAgICAgICB9LFxuICAgICAgICBiaW5hcnkgPSB7XG4gICAgICAgICAgICBiYXNlOiAxMDI0LFxuICAgICAgICAgICAgc3VmZml4ZXM6IFsnQicsICdLaUInLCAnTWlCJywgJ0dpQicsICdUaUInLCAnUGlCJywgJ0VpQicsICdaaUInLCAnWWlCJ11cbiAgICAgICAgfTtcblxuICAgIHZhciBhbGxTdWZmaXhlcyA9ICBkZWNpbWFsLnN1ZmZpeGVzLmNvbmNhdChiaW5hcnkuc3VmZml4ZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjaW1hbC5zdWZmaXhlcy5pbmRleE9mKGl0ZW0pIDwgMDtcbiAgICAgICAgfSkpO1xuICAgICAgICB2YXIgdW5mb3JtYXRSZWdleCA9IGFsbFN1ZmZpeGVzLmpvaW4oJ3wnKTtcbiAgICAgICAgLy8gQWxsb3cgc3VwcG9ydCBmb3IgQlBTIChodHRwOi8vd3d3LmludmVzdG9wZWRpYS5jb20vdGVybXMvYi9iYXNpc3BvaW50LmFzcClcbiAgICAgICAgdW5mb3JtYXRSZWdleCA9ICcoJyArIHVuZm9ybWF0UmVnZXgucmVwbGFjZSgnQicsICdCKD8hUFMpJykgKyAnKSc7XG5cbiAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnYnl0ZXMnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhbMFxcc11pP2IpLyxcbiAgICAgICAgICAgIHVuZm9ybWF0OiBuZXcgUmVnRXhwKHVuZm9ybWF0UmVnZXgpXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIG91dHB1dCxcbiAgICAgICAgICAgICAgICBieXRlcyA9IG51bWVyYWwuXy5pbmNsdWRlcyhmb3JtYXQsICdpYicpID8gYmluYXJ5IDogZGVjaW1hbCxcbiAgICAgICAgICAgICAgICBzdWZmaXggPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIGInKSB8fCBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIGliJykgPyAnICcgOiAnJyxcbiAgICAgICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICAgICAgbWF4O1xuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP2k/Yi8sICcnKTtcblxuICAgICAgICAgICAgZm9yIChwb3dlciA9IDA7IHBvd2VyIDw9IGJ5dGVzLnN1ZmZpeGVzLmxlbmd0aDsgcG93ZXIrKykge1xuICAgICAgICAgICAgICAgIG1pbiA9IE1hdGgucG93KGJ5dGVzLmJhc2UsIHBvd2VyKTtcbiAgICAgICAgICAgICAgICBtYXggPSBNYXRoLnBvdyhieXRlcy5iYXNlLCBwb3dlciArIDEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSAwIHx8IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8IG1heCkge1xuICAgICAgICAgICAgICAgICAgICBzdWZmaXggKz0gYnl0ZXMuc3VmZml4ZXNbcG93ZXJdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW4gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gbWluO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyBzdWZmaXg7XG4gICAgICAgIH0sXG4gICAgICAgIHVuZm9ybWF0OiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpLFxuICAgICAgICAgICAgICAgIHBvd2VyLFxuICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllcjtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZm9yIChwb3dlciA9IGRlY2ltYWwuc3VmZml4ZXMubGVuZ3RoIC0gMTsgcG93ZXIgPj0gMDsgcG93ZXItLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgZGVjaW1hbC5zdWZmaXhlc1twb3dlcl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBieXRlc011bHRpcGxpZXIgPSBNYXRoLnBvdyhkZWNpbWFsLmJhc2UsIHBvd2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgYmluYXJ5LnN1ZmZpeGVzW3Bvd2VyXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzTXVsdGlwbGllciA9IE1hdGgucG93KGJpbmFyeS5iYXNlLCBwb3dlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFsdWUgKj0gKGJ5dGVzTXVsdGlwbGllciB8fCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ2N1cnJlbmN5Jywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oXFwkKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlID0gbnVtZXJhbC5sb2NhbGVzW251bWVyYWwub3B0aW9ucy5jdXJyZW50TG9jYWxlXSxcbiAgICAgICAgICAgICAgICBzeW1ib2xzID0ge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmU6IGZvcm1hdC5tYXRjaCgvXihbXFwrfFxcLXxcXCh8XFxzfFxcJF0qKS8pWzBdLFxuICAgICAgICAgICAgICAgICAgICBhZnRlcjogZm9ybWF0Lm1hdGNoKC8oW1xcK3xcXC18XFwpfFxcc3xcXCRdKikkLylbMF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgICAgICBzeW1ib2wsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgLy8gc3RyaXAgZm9ybWF0IG9mIHNwYWNlcyBhbmQgJFxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9cXCRcXHM/LywgJycpO1xuXG4gICAgICAgICAgICAvLyBmb3JtYXQgdGhlIG51bWJlclxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KHZhbHVlLCBmb3JtYXQsIHJvdW5kaW5nRnVuY3Rpb24pO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgYmFzZWQgb24gdmFsdWVcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9scy5iZWZvcmUgPSBzeW1ib2xzLmJlZm9yZS5yZXBsYWNlKC9bXFwtXFwoXS8sICcnKTtcbiAgICAgICAgICAgICAgICBzeW1ib2xzLmFmdGVyID0gc3ltYm9scy5hZnRlci5yZXBsYWNlKC9bXFwtXFwpXS8sICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwICYmICghbnVtZXJhbC5fLmluY2x1ZGVzKHN5bWJvbHMuYmVmb3JlLCAnLScpICYmICFudW1lcmFsLl8uaW5jbHVkZXMoc3ltYm9scy5iZWZvcmUsICcoJykpKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9scy5iZWZvcmUgPSAnLScgKyBzeW1ib2xzLmJlZm9yZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGVhY2ggYmVmb3JlIHN5bWJvbFxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN5bWJvbHMuYmVmb3JlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gc3ltYm9scy5iZWZvcmVbaV07XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICckJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5pbnNlcnQob3V0cHV0LCAnICcsIGkgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggZWFjaCBhZnRlciBzeW1ib2xcbiAgICAgICAgICAgIGZvciAoaSA9IHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBzeW1ib2xzLmFmdGVyW2ldO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnJCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBpID09PSBzeW1ib2xzLmFmdGVyLmxlbmd0aCAtIDEgPyBvdXRwdXQgKyBsb2NhbGUuY3VycmVuY3kuc3ltYm9sIDogbnVtZXJhbC5fLmluc2VydChvdXRwdXQsIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wsIC0oc3ltYm9scy5hZnRlci5sZW5ndGggLSAoMSArIGkpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBpID09PSBzeW1ib2xzLmFmdGVyLmxlbmd0aCAtIDEgPyBvdXRwdXQgKyAnICcgOiBudW1lcmFsLl8uaW5zZXJ0KG91dHB1dCwgJyAnLCAtKHN5bWJvbHMuYWZ0ZXIubGVuZ3RoIC0gKDEgKyBpKSArIGxvY2FsZS5jdXJyZW5jeS5zeW1ib2wubGVuZ3RoIC0gMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG5cblxuKGZ1bmN0aW9uKCkge1xuICAgICAgICBudW1lcmFsLnJlZ2lzdGVyKCdmb3JtYXQnLCAnZXhwb25lbnRpYWwnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyhlXFwrfGUtKS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyhlXFwrfGUtKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0LFxuICAgICAgICAgICAgICAgIGV4cG9uZW50aWFsID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhbnVtZXJhbC5fLmlzTmFOKHZhbHVlKSA/IHZhbHVlLnRvRXhwb25lbnRpYWwoKSA6ICcwZSswJyxcbiAgICAgICAgICAgICAgICBwYXJ0cyA9IGV4cG9uZW50aWFsLnNwbGl0KCdlJyk7XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKC9lW1xcK3xcXC1dezF9MC8sICcnKTtcblxuICAgICAgICAgICAgb3V0cHV0ID0gbnVtZXJhbC5fLm51bWJlclRvRm9ybWF0KE51bWJlcihwYXJ0c1swXSksIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyAnZScgKyBwYXJ0c1sxXTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gbnVtZXJhbC5fLmluY2x1ZGVzKHN0cmluZywgJ2UrJykgPyBzdHJpbmcuc3BsaXQoJ2UrJykgOiBzdHJpbmcuc3BsaXQoJ2UtJyksXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIocGFydHNbMF0pLFxuICAgICAgICAgICAgICAgIHBvd2VyID0gTnVtYmVyKHBhcnRzWzFdKTtcblxuICAgICAgICAgICAgcG93ZXIgPSBudW1lcmFsLl8uaW5jbHVkZXMoc3RyaW5nLCAnZS0nKSA/IHBvd2VyICo9IC0xIDogcG93ZXI7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNiYWNrKGFjY3VtLCBjdXJyLCBjdXJySSwgTykge1xuICAgICAgICAgICAgICAgIHZhciBjb3JyRmFjdG9yID0gbnVtZXJhbC5fLmNvcnJlY3Rpb25GYWN0b3IoYWNjdW0sIGN1cnIpLFxuICAgICAgICAgICAgICAgICAgICBudW0gPSAoYWNjdW0gKiBjb3JyRmFjdG9yKSAqIChjdXJyICogY29yckZhY3RvcikgLyAoY29yckZhY3RvciAqIGNvcnJGYWN0b3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudW1lcmFsLl8ucmVkdWNlKFt2YWx1ZSwgTWF0aC5wb3coMTAsIHBvd2VyKV0sIGNiYWNrLCAxKTtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICdvcmRpbmFsJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8obykvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IG51bWVyYWwubG9jYWxlc1tudW1lcmFsLm9wdGlvbnMuY3VycmVudExvY2FsZV0sXG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIG9yZGluYWwgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnIG8nKSA/ICcgJyA6ICcnO1xuXG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZSgvXFxzP28vLCAnJyk7XG5cbiAgICAgICAgICAgIG9yZGluYWwgKz0gbG9jYWxlLm9yZGluYWwodmFsdWUpO1xuXG4gICAgICAgICAgICBvdXRwdXQgPSBudW1lcmFsLl8ubnVtYmVyVG9Gb3JtYXQodmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQgKyBvcmRpbmFsO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5cbihmdW5jdGlvbigpIHtcbiAgICAgICAgbnVtZXJhbC5yZWdpc3RlcignZm9ybWF0JywgJ3BlcmNlbnRhZ2UnLCB7XG4gICAgICAgIHJlZ2V4cHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogLyglKS8sXG4gICAgICAgICAgICB1bmZvcm1hdDogLyglKS9cbiAgICAgICAgfSxcbiAgICAgICAgZm9ybWF0OiBmdW5jdGlvbih2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICB2YXIgc3BhY2UgPSBudW1lcmFsLl8uaW5jbHVkZXMoZm9ybWF0LCAnICUnKSA/ICcgJyA6ICcnLFxuICAgICAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICAgICAgaWYgKG51bWVyYWwub3B0aW9ucy5zY2FsZVBlcmNlbnRCeTEwMCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAxMDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgJVxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoL1xccz9cXCUvLCAnJyk7XG5cbiAgICAgICAgICAgIG91dHB1dCA9IG51bWVyYWwuXy5udW1iZXJUb0Zvcm1hdCh2YWx1ZSwgZm9ybWF0LCByb3VuZGluZ0Z1bmN0aW9uKTtcblxuICAgICAgICAgICAgaWYgKG51bWVyYWwuXy5pbmNsdWRlcyhvdXRwdXQsICcpJykpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXQoJycpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0LnNwbGljZSgtMSwgMCwgc3BhY2UgKyAnJScpO1xuXG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmpvaW4oJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQgKyBzcGFjZSArICclJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIG51bWJlciA9IG51bWVyYWwuXy5zdHJpbmdUb051bWJlcihzdHJpbmcpO1xuICAgICAgICAgICAgaWYgKG51bWVyYWwub3B0aW9ucy5zY2FsZVBlcmNlbnRCeTEwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKiAwLjAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0pO1xufSkoKTtcblxuXG4oZnVuY3Rpb24oKSB7XG4gICAgICAgIG51bWVyYWwucmVnaXN0ZXIoJ2Zvcm1hdCcsICd0aW1lJywge1xuICAgICAgICByZWdleHBzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IC8oOikvLFxuICAgICAgICAgICAgdW5mb3JtYXQ6IC8oOikvXG4gICAgICAgIH0sXG4gICAgICAgIGZvcm1hdDogZnVuY3Rpb24odmFsdWUsIGZvcm1hdCwgcm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICAgICAgdmFyIGhvdXJzID0gTWF0aC5mbG9vcih2YWx1ZSAvIDYwIC8gNjApLFxuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh2YWx1ZSAtIChob3VycyAqIDYwICogNjApKSAvIDYwKSxcbiAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5yb3VuZCh2YWx1ZSAtIChob3VycyAqIDYwICogNjApIC0gKG1pbnV0ZXMgKiA2MCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gaG91cnMgKyAnOicgKyAobWludXRlcyA8IDEwID8gJzAnICsgbWludXRlcyA6IG1pbnV0ZXMpICsgJzonICsgKHNlY29uZHMgPCAxMCA/ICcwJyArIHNlY29uZHMgOiBzZWNvbmRzKTtcbiAgICAgICAgfSxcbiAgICAgICAgdW5mb3JtYXQ6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgICAgICAgdmFyIHRpbWVBcnJheSA9IHN0cmluZy5zcGxpdCgnOicpLFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPSAwO1xuXG4gICAgICAgICAgICAvLyB0dXJuIGhvdXJzIGFuZCBtaW51dGVzIGludG8gc2Vjb25kcyBhbmQgYWRkIHRoZW0gYWxsIHVwXG4gICAgICAgICAgICBpZiAodGltZUFycmF5Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIC8vIGhvdXJzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVswXSkgKiA2MCAqIDYwKTtcbiAgICAgICAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVsxXSkgKiA2MCk7XG4gICAgICAgICAgICAgICAgLy8gc2Vjb25kc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgTnVtYmVyKHRpbWVBcnJheVsyXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVBcnJheS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyBtaW51dGVzXG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNlY29uZHMgKyAoTnVtYmVyKHRpbWVBcnJheVswXSkgKiA2MCk7XG4gICAgICAgICAgICAgICAgLy8gc2Vjb25kc1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWNvbmRzICsgTnVtYmVyKHRpbWVBcnJheVsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlY29uZHMpO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG5yZXR1cm4gbnVtZXJhbDtcbn0pKTtcbiIsICJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZTtcbiIsICJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCAidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwgInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIiwgInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwgIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlNYXA7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwgInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwgInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHN0cmluZ1RvUGF0aCA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvUGF0aCcpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhc3RQYXRoO1xuIiwgInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCAidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldDtcbiIsICJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCAidmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICogdmFsdWUgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduVmFsdWU7XG4iLCAidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwgInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCAidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbjtcbiIsICIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCAidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzSW4gPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzSW4nKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXNJbihvYmplY3QpO1xuICB9XG4gIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5c0luO1xuIiwgInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzSW4gPSByZXF1aXJlKCcuL19iYXNlS2V5c0luJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXNJbihuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICovXG5mdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QsIHRydWUpIDogYmFzZUtleXNJbihvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXNJbjtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbkluYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LCBzb3VyY2UpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbkluO1xuIiwgInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICBhbGxvY1Vuc2FmZSA9IEJ1ZmZlciA/IEJ1ZmZlci5hbGxvY1Vuc2FmZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgIGBidWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIFRoZSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgaWYgKGlzRGVlcCkge1xuICAgIHJldHVybiBidWZmZXIuc2xpY2UoKTtcbiAgfVxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGFsbG9jVW5zYWZlID8gYWxsb2NVbnNhZmUobGVuZ3RoKSA6IG5ldyBidWZmZXIuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICBidWZmZXIuY29weShyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lQnVmZmVyO1xuIiwgIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpO1xuXG4vKipcbiAqIENvcGllcyBvd24gc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcbiAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHM7XG4iLCAidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsICJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHdoaWxlIChvYmplY3QpIHtcbiAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpO1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHNJbjtcbiIsICJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKTtcblxuLyoqXG4gKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlTeW1ib2xzSW47XG4iLCAidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzSW4nKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0luLCBnZXRTeW1ib2xzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFsbEtleXNJbjtcbiIsICIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIGFycmF5IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVBcnJheShhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gbmV3IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgLy8gQWRkIHByb3BlcnRpZXMgYXNzaWduZWQgYnkgYFJlZ0V4cCNleGVjYC5cbiAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJyYXlbMF0gPT0gJ3N0cmluZycgJiYgaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgJ2luZGV4JykpIHtcbiAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDtcbiAgICByZXN1bHQuaW5wdXQgPSBhcnJheS5pbnB1dDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZUFycmF5O1xuIiwgInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsICJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGRhdGFWaWV3YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFWaWV3IFRoZSBkYXRhIHZpZXcgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGRhdGEgdmlldy5cbiAqL1xuZnVuY3Rpb24gY2xvbmVEYXRhVmlldyhkYXRhVmlldywgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7XG4gIHJldHVybiBuZXcgZGF0YVZpZXcuY29uc3RydWN0b3IoYnVmZmVyLCBkYXRhVmlldy5ieXRlT2Zmc2V0LCBkYXRhVmlldy5ieXRlTGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZURhdGFWaWV3O1xuIiwgIi8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZsYWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlRmxhZ3MgPSAvXFx3KiQvO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgcmVnZXhwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHJlZ2V4cCBUaGUgcmVnZXhwIHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHJlZ2V4cC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgcmVnZXhwLmNvbnN0cnVjdG9yKHJlZ2V4cC5zb3VyY2UsIHJlRmxhZ3MuZXhlYyhyZWdleHApKTtcbiAgcmVzdWx0Lmxhc3RJbmRleCA9IHJlZ2V4cC5sYXN0SW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVSZWdFeHA7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVTeW1ib2w7XG4iLCAidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVUeXBlZEFycmF5O1xuIiwgInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpLFxuICAgIGNsb25lRGF0YVZpZXcgPSByZXF1aXJlKCcuL19jbG9uZURhdGFWaWV3JyksXG4gICAgY2xvbmVSZWdFeHAgPSByZXF1aXJlKCcuL19jbG9uZVJlZ0V4cCcpLFxuICAgIGNsb25lU3ltYm9sID0gcmVxdWlyZSgnLi9fY2xvbmVTeW1ib2wnKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY2xvbmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHtcbiAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICBjYXNlIHVpbnQ4VGFnOiBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzogY2FzZSB1aW50MTZUYWc6IGNhc2UgdWludDMyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQnlUYWc7XG4iLCAidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCAidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkpXG4gICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxuICAgIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lT2JqZWN0O1xuIiwgInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXBgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hcCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IG1hcFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNNYXA7XG4iLCAidmFyIGJhc2VJc01hcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc01hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNNYXAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc01hcDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE1hcGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNNYXAobmV3IE1hcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5hcnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc01hcDtcbiIsICJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzU2V0YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNTZXQodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBzZXRUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzU2V0O1xuIiwgInZhciBiYXNlSXNTZXQgPSByZXF1aXJlKCcuL19iYXNlSXNTZXQnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzU2V0ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNTZXQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTZXRgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU2V0KG5ldyBTZXQpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTZXQobmV3IFdlYWtTZXQpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzU2V0ID0gbm9kZUlzU2V0ID8gYmFzZVVuYXJ5KG5vZGVJc1NldCkgOiBiYXNlSXNTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTZXQ7XG4iLCAidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBhcnJheUVhY2ggPSByZXF1aXJlKCcuL19hcnJheUVhY2gnKSxcbiAgICBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ24nKSxcbiAgICBiYXNlQXNzaWduSW4gPSByZXF1aXJlKCcuL19iYXNlQXNzaWduSW4nKSxcbiAgICBjbG9uZUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQnVmZmVyJyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgY29weVN5bWJvbHMgPSByZXF1aXJlKCcuL19jb3B5U3ltYm9scycpLFxuICAgIGNvcHlTeW1ib2xzSW4gPSByZXF1aXJlKCcuL19jb3B5U3ltYm9sc0luJyksXG4gICAgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKSxcbiAgICBnZXRBbGxLZXlzSW4gPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzSW4nKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpbml0Q2xvbmVBcnJheSA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUFycmF5JyksXG4gICAgaW5pdENsb25lQnlUYWcgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVCeVRhZycpLFxuICAgIGluaXRDbG9uZU9iamVjdCA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZU9iamVjdCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc01hcCA9IHJlcXVpcmUoJy4vaXNNYXAnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1NldCA9IHJlcXVpcmUoJy4vaXNTZXQnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xudmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbmNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9XG5jbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbmNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID1cbmNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG5jbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9XG5jbG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbmNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9XG5jbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuY2xvbmVhYmxlVGFnc1tlcnJvclRhZ10gPSBjbG9uZWFibGVUYWdzW2Z1bmNUYWddID1cbmNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gKiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIERlZXAgY2xvbmVcbiAqICAyIC0gRmxhdHRlbiBpbmhlcml0ZWQgcHJvcGVydGllc1xuICogIDQgLSBDbG9uZSBzeW1ib2xzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIFRoZSBrZXkgb2YgYHZhbHVlYC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgcGFyZW50IG9iamVjdCBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICB2YXIgcmVzdWx0LFxuICAgICAgaXNEZWVwID0gYml0bWFzayAmIENMT05FX0RFRVBfRkxBRyxcbiAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICBpc0Z1bGwgPSBiaXRtYXNrICYgQ0xPTkVfU1lNQk9MU19GTEFHO1xuXG4gIGlmIChjdXN0b21pemVyKSB7XG4gICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICB9XG4gIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSk7XG4gIGlmIChpc0Fycikge1xuICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcbiAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG5cbiAgICBpZiAoaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgfVxuICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IChpc0Z1bmMgJiYgIW9iamVjdCkpIHtcbiAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgIHJldHVybiBpc0ZsYXRcbiAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICA6IGNvcHlTeW1ib2xzKHZhbHVlLCBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCA/IHZhbHVlIDoge307XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZSwgdGFnLCBpc0RlZXApO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgcmV0dXJuIGl0cyBjb3JyZXNwb25kaW5nIGNsb25lLlxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gIGlmIChzdGFja2VkKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQ7XG4gIH1cbiAgc3RhY2suc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gIGlmIChpc1NldCh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICByZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3ViVmFsdWUsIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0LnNldChrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBrZXlzRnVuYyA9IGlzRnVsbFxuICAgID8gKGlzRmxhdCA/IGdldEFsbEtleXNJbiA6IGdldEFsbEtleXMpXG4gICAgOiAoaXNGbGF0ID8ga2V5c0luIDoga2V5cyk7XG5cbiAgdmFyIHByb3BzID0gaXNBcnIgPyB1bmRlZmluZWQgOiBrZXlzRnVuYyh2YWx1ZSk7XG4gIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgIGlmIChwcm9wcykge1xuICAgICAga2V5ID0gc3ViVmFsdWU7XG4gICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IHBvcHVsYXRlIGNsb25lIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNsb25lO1xuIiwgIi8qKlxuICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubGFzdChbMSwgMiwgM10pO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxhc3Q7XG4iLCAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuZ3RoO1xuICB9XG4gIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgc3RhcnQgPj4+PSAwO1xuXG4gIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTbGljZTtcbiIsICJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKSxcbiAgICBiYXNlU2xpY2UgPSByZXF1aXJlKCcuL19iYXNlU2xpY2UnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwYXJlbnQgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IHZhbHVlIG9mLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBhcmVudCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gcGFyZW50KG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gcGF0aC5sZW5ndGggPCAyID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIGJhc2VTbGljZShwYXRoLCAwLCAtMSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKSxcbiAgICBwYXJlbnQgPSByZXF1aXJlKCcuL19wYXJlbnQnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5zZXQ7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUGxhaW5PYmplY3Q7XG4iLCAidmFyIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PbWl0Q2xvbmU7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgISEoc3ByZWFkYWJsZVN5bWJvbCAmJiB2YWx1ZSAmJiB2YWx1ZVtzcHJlYWRhYmxlU3ltYm9sXSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGbGF0dGVuYWJsZTtcbiIsICJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLCAidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKTtcblxuLyoqXG4gKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbjtcbiIsICIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCAidmFyIGFwcGx5ID0gcmVxdWlyZSgnLi9fYXBwbHknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgfVxuICAgIGluZGV4ID0gLTE7XG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xuICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgIH1cbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcbiAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyUmVzdDtcbiIsICIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsICIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwgInZhciBjb25zdGFudCA9IHJlcXVpcmUoJy4vY29uc3RhbnQnKSxcbiAgICBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5JyksXG4gICAgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgc3RyaW5nKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcbiAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICd3cml0YWJsZSc6IHRydWVcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXRUb1N0cmluZztcbiIsICIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCAidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsICJ2YXIgZmxhdHRlbiA9IHJlcXVpcmUoJy4vZmxhdHRlbicpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0UmVzdDtcbiIsICJ2YXIgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VDbG9uZSA9IHJlcXVpcmUoJy4vX2Jhc2VDbG9uZScpLFxuICAgIGJhc2VVbnNldCA9IHJlcXVpcmUoJy4vX2Jhc2VVbnNldCcpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGN1c3RvbU9taXRDbG9uZSA9IHJlcXVpcmUoJy4vX2N1c3RvbU9taXRDbG9uZScpLFxuICAgIGZsYXRSZXN0ID0gcmVxdWlyZSgnLi9fZmxhdFJlc3QnKSxcbiAgICBnZXRBbGxLZXlzSW4gPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzSW4nKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZVxuICogb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBwYXRocyBvZiBgb2JqZWN0YCB0aGF0IGFyZSBub3Qgb21pdHRlZC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgY29uc2lkZXJhYmx5IHNsb3dlciB0aGFuIGBfLnBpY2tgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBvbWl0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gKlxuICogXy5vbWl0KG9iamVjdCwgWydhJywgJ2MnXSk7XG4gKiAvLyA9PiB7ICdiJzogJzInIH1cbiAqL1xudmFyIG9taXQgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIHBhdGhzKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB2YXIgaXNEZWVwID0gZmFsc2U7XG4gIHBhdGhzID0gYXJyYXlNYXAocGF0aHMsIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICBpc0RlZXAgfHwgKGlzRGVlcCA9IHBhdGgubGVuZ3RoID4gMSk7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH0pO1xuICBjb3B5T2JqZWN0KG9iamVjdCwgZ2V0QWxsS2V5c0luKG9iamVjdCksIHJlc3VsdCk7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXN1bHQgPSBiYXNlQ2xvbmUocmVzdWx0LCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9GTEFUX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbU9taXRDbG9uZSk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IHBhdGhzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgYmFzZVVuc2V0KHJlc3VsdCwgcGF0aHNbbGVuZ3RoXSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG9taXQ7XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IDB4ZWFjZTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgfHwgZW5hYmxlU2NvcGVBUEkgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSB8fCB0eXBlWzBdID09PSBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0NvbmN1cnJlbnRNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxOCsuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2hlY2sgaWYgd2UncmUgcmVxdWlyZWQgdG8gYWRkIGEgcG9ydCBudW1iZXIuXG4gKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RlZmF1bHQtcG9ydFxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSBwb3J0IFBvcnQgbnVtYmVyIHdlIG5lZWQgdG8gY2hlY2tcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm90b2NvbCBQcm90b2NvbCB3ZSBuZWVkIHRvIGNoZWNrIGFnYWluc3QuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSXMgaXQgYSBkZWZhdWx0IHBvcnQgZm9yIHRoZSBnaXZlbiBwcm90b2NvbFxuICogQGFwaSBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVxdWlyZWQocG9ydCwgcHJvdG9jb2wpIHtcbiAgcHJvdG9jb2wgPSBwcm90b2NvbC5zcGxpdCgnOicpWzBdO1xuICBwb3J0ID0gK3BvcnQ7XG5cbiAgaWYgKCFwb3J0KSByZXR1cm4gZmFsc2U7XG5cbiAgc3dpdGNoIChwcm90b2NvbCkge1xuICAgIGNhc2UgJ2h0dHAnOlxuICAgIGNhc2UgJ3dzJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gODA7XG5cbiAgICBjYXNlICdodHRwcyc6XG4gICAgY2FzZSAnd3NzJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gNDQzO1xuXG4gICAgY2FzZSAnZnRwJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gMjE7XG5cbiAgICBjYXNlICdnb3BoZXInOlxuICAgIHJldHVybiBwb3J0ICE9PSA3MDtcblxuICAgIGNhc2UgJ2ZpbGUnOlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBwb3J0ICE9PSAwO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgdW5kZWY7XG5cbi8qKlxuICogRGVjb2RlIGEgVVJJIGVuY29kZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgVVJJIGVuY29kZWQgc3RyaW5nLlxuICogQHJldHVybnMge1N0cmluZ3xOdWxsfSBUaGUgZGVjb2RlZCBzdHJpbmcuXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZGVjb2RlKGlucHV0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChpbnB1dC5yZXBsYWNlKC9cXCsvZywgJyAnKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGVuY29kZSBhIGdpdmVuIGlucHV0LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIHRoYXQgbmVlZHMgdG8gYmUgZW5jb2RlZC5cbiAqIEByZXR1cm5zIHtTdHJpbmd8TnVsbH0gVGhlIGVuY29kZWQgc3RyaW5nLlxuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShpbnB1dCkge1xuICB0cnkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoaW5wdXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBTaW1wbGUgcXVlcnkgc3RyaW5nIHBhcnNlci5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcXVlcnkgVGhlIHF1ZXJ5IHN0cmluZyB0aGF0IG5lZWRzIHRvIGJlIHBhcnNlZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBxdWVyeXN0cmluZyhxdWVyeSkge1xuICB2YXIgcGFyc2VyID0gLyhbXj0/IyZdKyk9PyhbXiZdKikvZ1xuICAgICwgcmVzdWx0ID0ge31cbiAgICAsIHBhcnQ7XG5cbiAgd2hpbGUgKHBhcnQgPSBwYXJzZXIuZXhlYyhxdWVyeSkpIHtcbiAgICB2YXIga2V5ID0gZGVjb2RlKHBhcnRbMV0pXG4gICAgICAsIHZhbHVlID0gZGVjb2RlKHBhcnRbMl0pO1xuXG4gICAgLy9cbiAgICAvLyBQcmV2ZW50IG92ZXJyaWRpbmcgb2YgZXhpc3RpbmcgcHJvcGVydGllcy4gVGhpcyBlbnN1cmVzIHRoYXQgYnVpbGQtaW5cbiAgICAvLyBtZXRob2RzIGxpa2UgYHRvU3RyaW5nYCBvciBfX3Byb3RvX18gYXJlIG5vdCBvdmVycmlkZW4gYnkgbWFsaWNpb3VzXG4gICAgLy8gcXVlcnlzdHJpbmdzLlxuICAgIC8vXG4gICAgLy8gSW4gdGhlIGNhc2UgaWYgZmFpbGVkIGRlY29kaW5nLCB3ZSB3YW50IHRvIG9taXQgdGhlIGtleS92YWx1ZSBwYWlyc1xuICAgIC8vIGZyb20gdGhlIHJlc3VsdC5cbiAgICAvL1xuICAgIGlmIChrZXkgPT09IG51bGwgfHwgdmFsdWUgPT09IG51bGwgfHwga2V5IGluIHJlc3VsdCkgY29udGludWU7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGEgcXVlcnkgc3RyaW5nIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0aGF0IHNob3VsZCBiZSB0cmFuc2Zvcm1lZC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBwcmVmaXggT3B0aW9uYWwgcHJlZml4LlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5c3RyaW5naWZ5KG9iaiwgcHJlZml4KSB7XG4gIHByZWZpeCA9IHByZWZpeCB8fCAnJztcblxuICB2YXIgcGFpcnMgPSBbXVxuICAgICwgdmFsdWVcbiAgICAsIGtleTtcblxuICAvL1xuICAvLyBPcHRpb25hbGx5IHByZWZpeCB3aXRoIGEgJz8nIGlmIG5lZWRlZFxuICAvL1xuICBpZiAoJ3N0cmluZycgIT09IHR5cGVvZiBwcmVmaXgpIHByZWZpeCA9ICc/JztcblxuICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICBpZiAoaGFzLmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICB2YWx1ZSA9IG9ialtrZXldO1xuXG4gICAgICAvL1xuICAgICAgLy8gRWRnZSBjYXNlcyB3aGVyZSB3ZSBhY3R1YWxseSB3YW50IHRvIGVuY29kZSB0aGUgdmFsdWUgdG8gYW4gZW1wdHlcbiAgICAgIC8vIHN0cmluZyBpbnN0ZWFkIG9mIHRoZSBzdHJpbmdpZmllZCB2YWx1ZS5cbiAgICAgIC8vXG4gICAgICBpZiAoIXZhbHVlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWYgfHwgaXNOYU4odmFsdWUpKSkge1xuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSBlbmNvZGUoa2V5KTtcbiAgICAgIHZhbHVlID0gZW5jb2RlKHZhbHVlKTtcblxuICAgICAgLy9cbiAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBlbmNvZGUgdGhlIHN0cmluZ3MsIHdlIHNob3VsZCBiYWlsIG91dCBhcyB3ZSBkb24ndFxuICAgICAgLy8gd2FudCB0byBhZGQgaW52YWxpZCBzdHJpbmdzIHRvIHRoZSBxdWVyeS5cbiAgICAgIC8vXG4gICAgICBpZiAoa2V5ID09PSBudWxsIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgIHBhaXJzLnB1c2goa2V5ICsnPScrIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFpcnMubGVuZ3RoID8gcHJlZml4ICsgcGFpcnMuam9pbignJicpIDogJyc7XG59XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5leHBvcnRzLnN0cmluZ2lmeSA9IHF1ZXJ5c3RyaW5naWZ5O1xuZXhwb3J0cy5wYXJzZSA9IHF1ZXJ5c3RyaW5nO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHJlcXVpcmVkID0gcmVxdWlyZSgncmVxdWlyZXMtcG9ydCcpXG4gICwgcXMgPSByZXF1aXJlKCdxdWVyeXN0cmluZ2lmeScpXG4gICwgY29udHJvbE9yV2hpdGVzcGFjZSA9IC9eW1xceDAwLVxceDIwXFx1MDBhMFxcdTE2ODBcXHUyMDAwLVxcdTIwMGFcXHUyMDI4XFx1MjAyOVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdWZlZmZdKy9cbiAgLCBDUkhUTEYgPSAvW1xcblxcclxcdF0vZ1xuICAsIHNsYXNoZXMgPSAvXltBLVphLXpdW0EtWmEtejAtOSstLl0qOlxcL1xcLy9cbiAgLCBwb3J0ID0gLzpcXGQrJC9cbiAgLCBwcm90b2NvbHJlID0gL14oW2Etel1bYS16MC05ListXSo6KT8oXFwvXFwvKT8oW1xcXFwvXSspPyhbXFxTXFxzXSopL2lcbiAgLCB3aW5kb3dzRHJpdmVMZXR0ZXIgPSAvXlthLXpBLVpdOi87XG5cbi8qKlxuICogUmVtb3ZlIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgd2hpdGVzcGFjZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBzdHIgU3RyaW5nIHRvIHRyaW0uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBBIG5ldyBzdHJpbmcgcmVwcmVzZW50aW5nIGBzdHJgIHN0cmlwcGVkIG9mIGNvbnRyb2xcbiAqICAgICBjaGFyYWN0ZXJzIGFuZCB3aGl0ZXNwYWNlIGZyb20gaXRzIGJlZ2lubmluZy5cbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gdHJpbUxlZnQoc3RyKSB7XG4gIHJldHVybiAoc3RyID8gc3RyIDogJycpLnRvU3RyaW5nKCkucmVwbGFjZShjb250cm9sT3JXaGl0ZXNwYWNlLCAnJyk7XG59XG5cbi8qKlxuICogVGhlc2UgYXJlIHRoZSBwYXJzZSBydWxlcyBmb3IgdGhlIFVSTCBwYXJzZXIsIGl0IGluZm9ybXMgdGhlIHBhcnNlclxuICogYWJvdXQ6XG4gKlxuICogMC4gVGhlIGNoYXIgaXQgTmVlZHMgdG8gcGFyc2UsIGlmIGl0J3MgYSBzdHJpbmcgaXQgc2hvdWxkIGJlIGRvbmUgdXNpbmdcbiAqICAgIGluZGV4T2YsIFJlZ0V4cCB1c2luZyBleGVjIGFuZCBOYU4gbWVhbnMgc2V0IGFzIGN1cnJlbnQgdmFsdWUuXG4gKiAxLiBUaGUgcHJvcGVydHkgd2Ugc2hvdWxkIHNldCB3aGVuIHBhcnNpbmcgdGhpcyB2YWx1ZS5cbiAqIDIuIEluZGljYXRpb24gaWYgaXQncyBiYWNrd2FyZHMgb3IgZm9yd2FyZCBwYXJzaW5nLCB3aGVuIHNldCBhcyBudW1iZXIgaXQnc1xuICogICAgdGhlIHZhbHVlIG9mIGV4dHJhIGNoYXJzIHRoYXQgc2hvdWxkIGJlIHNwbGl0IG9mZi5cbiAqIDMuIEluaGVyaXQgZnJvbSBsb2NhdGlvbiBpZiBub24gZXhpc3RpbmcgaW4gdGhlIHBhcnNlci5cbiAqIDQuIGB0b0xvd2VyQ2FzZWAgdGhlIHJlc3VsdGluZyB2YWx1ZS5cbiAqL1xudmFyIHJ1bGVzID0gW1xuICBbJyMnLCAnaGFzaCddLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgWyc/JywgJ3F1ZXJ5J10sICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGJhY2suXG4gIGZ1bmN0aW9uIHNhbml0aXplKGFkZHJlc3MsIHVybCkgeyAgICAgLy8gU2FuaXRpemUgd2hhdCBpcyBsZWZ0IG9mIHRoZSBhZGRyZXNzXG4gICAgcmV0dXJuIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpID8gYWRkcmVzcy5yZXBsYWNlKC9cXFxcL2csICcvJykgOiBhZGRyZXNzO1xuICB9LFxuICBbJy8nLCAncGF0aG5hbWUnXSwgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgWydAJywgJ2F1dGgnLCAxXSwgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGZyb250LlxuICBbTmFOLCAnaG9zdCcsIHVuZGVmaW5lZCwgMSwgMV0sICAgICAgIC8vIFNldCBsZWZ0IG92ZXIgdmFsdWUuXG4gIFsvOihcXGQqKSQvLCAncG9ydCcsIHVuZGVmaW5lZCwgMV0sICAgIC8vIFJlZ0V4cCB0aGUgYmFjay5cbiAgW05hTiwgJ2hvc3RuYW1lJywgdW5kZWZpbmVkLCAxLCAxXSAgICAvLyBTZXQgbGVmdCBvdmVyLlxuXTtcblxuLyoqXG4gKiBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgY29waWVkIG9yIGluaGVyaXRlZCBmcm9tLiBUaGlzIGlzIG9ubHkgbmVlZGVkXG4gKiBmb3IgYWxsIG5vbiBibG9iIFVSTCdzIGFzIGEgYmxvYiBVUkwgZG9lcyBub3QgaW5jbHVkZSBhIGhhc2gsIG9ubHkgdGhlXG4gKiBvcmlnaW4uXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbnZhciBpZ25vcmUgPSB7IGhhc2g6IDEsIHF1ZXJ5OiAxIH07XG5cbi8qKlxuICogVGhlIGxvY2F0aW9uIG9iamVjdCBkaWZmZXJzIHdoZW4geW91ciBjb2RlIGlzIGxvYWRlZCB0aHJvdWdoIGEgbm9ybWFsIHBhZ2UsXG4gKiBXb3JrZXIgb3IgdGhyb3VnaCBhIHdvcmtlciB1c2luZyBhIGJsb2IuIEFuZCB3aXRoIHRoZSBibG9iYmxlIGJlZ2lucyB0aGVcbiAqIHRyb3VibGUgYXMgdGhlIGxvY2F0aW9uIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIFVSTCBvZiB0aGUgYmxvYiwgbm90IHRoZVxuICogbG9jYXRpb24gb2YgdGhlIHBhZ2Ugd2hlcmUgb3VyIGNvZGUgaXMgbG9hZGVkIGluLiBUaGUgYWN0dWFsIG9yaWdpbiBpc1xuICogZW5jb2RlZCBpbiB0aGUgYHBhdGhuYW1lYCBzbyB3ZSBjYW4gdGhhbmtmdWxseSBnZW5lcmF0ZSBhIGdvb2QgXCJkZWZhdWx0XCJcbiAqIGxvY2F0aW9uIGZyb20gaXQgc28gd2UgY2FuIGdlbmVyYXRlIHByb3BlciByZWxhdGl2ZSBVUkwncyBhZ2Fpbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGxvYyBPcHRpb25hbCBkZWZhdWx0IGxvY2F0aW9uIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IGxvbGNhdGlvbiBvYmplY3QuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGxvbGNhdGlvbihsb2MpIHtcbiAgdmFyIGdsb2JhbFZhcjtcblxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IHdpbmRvdztcbiAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IGdsb2JhbDtcbiAgZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSBnbG9iYWxWYXIgPSBzZWxmO1xuICBlbHNlIGdsb2JhbFZhciA9IHt9O1xuXG4gIHZhciBsb2NhdGlvbiA9IGdsb2JhbFZhci5sb2NhdGlvbiB8fCB7fTtcbiAgbG9jID0gbG9jIHx8IGxvY2F0aW9uO1xuXG4gIHZhciBmaW5hbGRlc3RpbmF0aW9uID0ge31cbiAgICAsIHR5cGUgPSB0eXBlb2YgbG9jXG4gICAgLCBrZXk7XG5cbiAgaWYgKCdibG9iOicgPT09IGxvYy5wcm90b2NvbCkge1xuICAgIGZpbmFsZGVzdGluYXRpb24gPSBuZXcgVXJsKHVuZXNjYXBlKGxvYy5wYXRobmFtZSksIHt9KTtcbiAgfSBlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlwZSkge1xuICAgIGZpbmFsZGVzdGluYXRpb24gPSBuZXcgVXJsKGxvYywge30pO1xuICAgIGZvciAoa2V5IGluIGlnbm9yZSkgZGVsZXRlIGZpbmFsZGVzdGluYXRpb25ba2V5XTtcbiAgfSBlbHNlIGlmICgnb2JqZWN0JyA9PT0gdHlwZSkge1xuICAgIGZvciAoa2V5IGluIGxvYykge1xuICAgICAgaWYgKGtleSBpbiBpZ25vcmUpIGNvbnRpbnVlO1xuICAgICAgZmluYWxkZXN0aW5hdGlvbltrZXldID0gbG9jW2tleV07XG4gICAgfVxuXG4gICAgaWYgKGZpbmFsZGVzdGluYXRpb24uc2xhc2hlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaW5hbGRlc3RpbmF0aW9uLnNsYXNoZXMgPSBzbGFzaGVzLnRlc3QobG9jLmhyZWYpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaW5hbGRlc3RpbmF0aW9uO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBwcm90b2NvbCBzY2hlbWUgaXMgc3BlY2lhbC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gVGhlIHByb3RvY29sIHNjaGVtZSBvZiB0aGUgVVJMXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIHByb3RvY29sIHNjaGVtZSBpcyBzcGVjaWFsLCBlbHNlIGBmYWxzZWBcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGlzU3BlY2lhbChzY2hlbWUpIHtcbiAgcmV0dXJuIChcbiAgICBzY2hlbWUgPT09ICdmaWxlOicgfHxcbiAgICBzY2hlbWUgPT09ICdmdHA6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ2h0dHA6JyB8fFxuICAgIHNjaGVtZSA9PT0gJ2h0dHBzOicgfHxcbiAgICBzY2hlbWUgPT09ICd3czonIHx8XG4gICAgc2NoZW1lID09PSAnd3NzOidcbiAgKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBQcm90b2NvbEV4dHJhY3RcbiAqIEB0eXBlIE9iamVjdFxuICogQHByb3BlcnR5IHtTdHJpbmd9IHByb3RvY29sIFByb3RvY29sIG1hdGNoZWQgaW4gdGhlIFVSTCwgaW4gbG93ZXJjYXNlLlxuICogQHByb3BlcnR5IHtCb29sZWFufSBzbGFzaGVzIGB0cnVlYCBpZiBwcm90b2NvbCBpcyBmb2xsb3dlZCBieSBcIi8vXCIsIGVsc2UgYGZhbHNlYC5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZXN0IFJlc3Qgb2YgdGhlIFVSTCB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBwcm90b2NvbC5cbiAqL1xuXG4vKipcbiAqIEV4dHJhY3QgcHJvdG9jb2wgaW5mb3JtYXRpb24gZnJvbSBhIFVSTCB3aXRoL3dpdGhvdXQgZG91YmxlIHNsYXNoIChcIi8vXCIpLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIFVSTCB3ZSB3YW50IHRvIGV4dHJhY3QgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBsb2NhdGlvblxuICogQHJldHVybiB7UHJvdG9jb2xFeHRyYWN0fSBFeHRyYWN0ZWQgaW5mb3JtYXRpb24uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBleHRyYWN0UHJvdG9jb2woYWRkcmVzcywgbG9jYXRpb24pIHtcbiAgYWRkcmVzcyA9IHRyaW1MZWZ0KGFkZHJlc3MpO1xuICBhZGRyZXNzID0gYWRkcmVzcy5yZXBsYWNlKENSSFRMRiwgJycpO1xuICBsb2NhdGlvbiA9IGxvY2F0aW9uIHx8IHt9O1xuXG4gIHZhciBtYXRjaCA9IHByb3RvY29scmUuZXhlYyhhZGRyZXNzKTtcbiAgdmFyIHByb3RvY29sID0gbWF0Y2hbMV0gPyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIDogJyc7XG4gIHZhciBmb3J3YXJkU2xhc2hlcyA9ICEhbWF0Y2hbMl07XG4gIHZhciBvdGhlclNsYXNoZXMgPSAhIW1hdGNoWzNdO1xuICB2YXIgc2xhc2hlc0NvdW50ID0gMDtcbiAgdmFyIHJlc3Q7XG5cbiAgaWYgKGZvcndhcmRTbGFzaGVzKSB7XG4gICAgaWYgKG90aGVyU2xhc2hlcykge1xuICAgICAgcmVzdCA9IG1hdGNoWzJdICsgbWF0Y2hbM10gKyBtYXRjaFs0XTtcbiAgICAgIHNsYXNoZXNDb3VudCA9IG1hdGNoWzJdLmxlbmd0aCArIG1hdGNoWzNdLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdCA9IG1hdGNoWzJdICsgbWF0Y2hbNF07XG4gICAgICBzbGFzaGVzQ291bnQgPSBtYXRjaFsyXS5sZW5ndGg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChvdGhlclNsYXNoZXMpIHtcbiAgICAgIHJlc3QgPSBtYXRjaFszXSArIG1hdGNoWzRdO1xuICAgICAgc2xhc2hlc0NvdW50ID0gbWF0Y2hbM10ubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN0ID0gbWF0Y2hbNF1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvdG9jb2wgPT09ICdmaWxlOicpIHtcbiAgICBpZiAoc2xhc2hlc0NvdW50ID49IDIpIHtcbiAgICAgIHJlc3QgPSByZXN0LnNsaWNlKDIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1NwZWNpYWwocHJvdG9jb2wpKSB7XG4gICAgcmVzdCA9IG1hdGNoWzRdO1xuICB9IGVsc2UgaWYgKHByb3RvY29sKSB7XG4gICAgaWYgKGZvcndhcmRTbGFzaGVzKSB7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZSgyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2xhc2hlc0NvdW50ID49IDIgJiYgaXNTcGVjaWFsKGxvY2F0aW9uLnByb3RvY29sKSkge1xuICAgIHJlc3QgPSBtYXRjaFs0XTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcHJvdG9jb2w6IHByb3RvY29sLFxuICAgIHNsYXNoZXM6IGZvcndhcmRTbGFzaGVzIHx8IGlzU3BlY2lhbChwcm90b2NvbCksXG4gICAgc2xhc2hlc0NvdW50OiBzbGFzaGVzQ291bnQsXG4gICAgcmVzdDogcmVzdFxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSByZWxhdGl2ZSBVUkwgcGF0aG5hbWUgYWdhaW5zdCBhIGJhc2UgVVJMIHBhdGhuYW1lLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByZWxhdGl2ZSBQYXRobmFtZSBvZiB0aGUgcmVsYXRpdmUgVVJMLlxuICogQHBhcmFtIHtTdHJpbmd9IGJhc2UgUGF0aG5hbWUgb2YgdGhlIGJhc2UgVVJMLlxuICogQHJldHVybiB7U3RyaW5nfSBSZXNvbHZlZCBwYXRobmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmUocmVsYXRpdmUsIGJhc2UpIHtcbiAgaWYgKHJlbGF0aXZlID09PSAnJykgcmV0dXJuIGJhc2U7XG5cbiAgdmFyIHBhdGggPSAoYmFzZSB8fCAnLycpLnNwbGl0KCcvJykuc2xpY2UoMCwgLTEpLmNvbmNhdChyZWxhdGl2ZS5zcGxpdCgnLycpKVxuICAgICwgaSA9IHBhdGgubGVuZ3RoXG4gICAgLCBsYXN0ID0gcGF0aFtpIC0gMV1cbiAgICAsIHVuc2hpZnQgPSBmYWxzZVxuICAgICwgdXAgPSAwO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICBpZiAocGF0aFtpXSA9PT0gJy4nKSB7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKHBhdGhbaV0gPT09ICcuLicpIHtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBpZiAoaSA9PT0gMCkgdW5zaGlmdCA9IHRydWU7XG4gICAgICBwYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgaWYgKHVuc2hpZnQpIHBhdGgudW5zaGlmdCgnJyk7XG4gIGlmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgcGF0aC5wdXNoKCcnKTtcblxuICByZXR1cm4gcGF0aC5qb2luKCcvJyk7XG59XG5cbi8qKlxuICogVGhlIGFjdHVhbCBVUkwgaW5zdGFuY2UuIEluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIG9iamVjdCB3ZSd2ZSBvcHRlZC1pbiB0b1xuICogY3JlYXRlIGFuIGFjdHVhbCBjb25zdHJ1Y3RvciBhcyBpdCdzIG11Y2ggbW9yZSBtZW1vcnkgZWZmaWNpZW50IGFuZFxuICogZmFzdGVyIGFuZCBpdCBwbGVhc2VzIG15IE9DRC5cbiAqXG4gKiBJdCBpcyB3b3J0aCBub3RpbmcgdGhhdCB3ZSBzaG91bGQgbm90IHVzZSBgVVJMYCBhcyBjbGFzcyBuYW1lIHRvIHByZXZlbnRcbiAqIGNsYXNoZXMgd2l0aCB0aGUgZ2xvYmFsIFVSTCBpbnN0YW5jZSB0aGF0IGdvdCBpbnRyb2R1Y2VkIGluIGJyb3dzZXJzLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgVVJMIHdlIHdhbnQgdG8gcGFyc2UuXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IFtsb2NhdGlvbl0gTG9jYXRpb24gZGVmYXVsdHMgZm9yIHJlbGF0aXZlIHBhdGhzLlxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSBbcGFyc2VyXSBQYXJzZXIgZm9yIHRoZSBxdWVyeSBzdHJpbmcuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBVcmwoYWRkcmVzcywgbG9jYXRpb24sIHBhcnNlcikge1xuICBhZGRyZXNzID0gdHJpbUxlZnQoYWRkcmVzcyk7XG4gIGFkZHJlc3MgPSBhZGRyZXNzLnJlcGxhY2UoQ1JIVExGLCAnJyk7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVybCkpIHtcbiAgICByZXR1cm4gbmV3IFVybChhZGRyZXNzLCBsb2NhdGlvbiwgcGFyc2VyKTtcbiAgfVxuXG4gIHZhciByZWxhdGl2ZSwgZXh0cmFjdGVkLCBwYXJzZSwgaW5zdHJ1Y3Rpb24sIGluZGV4LCBrZXlcbiAgICAsIGluc3RydWN0aW9ucyA9IHJ1bGVzLnNsaWNlKClcbiAgICAsIHR5cGUgPSB0eXBlb2YgbG9jYXRpb25cbiAgICAsIHVybCA9IHRoaXNcbiAgICAsIGkgPSAwO1xuXG4gIC8vXG4gIC8vIFRoZSBmb2xsb3dpbmcgaWYgc3RhdGVtZW50cyBhbGxvd3MgdGhpcyBtb2R1bGUgdHdvIGhhdmUgY29tcGF0aWJpbGl0eSB3aXRoXG4gIC8vIDIgZGlmZmVyZW50IEFQSTpcbiAgLy9cbiAgLy8gMS4gTm9kZS5qcydzIGB1cmwucGFyc2VgIGFwaSB3aGljaCBhY2NlcHRzIGEgVVJMLCBib29sZWFuIGFzIGFyZ3VtZW50c1xuICAvLyAgICB3aGVyZSB0aGUgYm9vbGVhbiBpbmRpY2F0ZXMgdGhhdCB0aGUgcXVlcnkgc3RyaW5nIHNob3VsZCBhbHNvIGJlIHBhcnNlZC5cbiAgLy9cbiAgLy8gMi4gVGhlIGBVUkxgIGludGVyZmFjZSBvZiB0aGUgYnJvd3NlciB3aGljaCBhY2NlcHRzIGEgVVJMLCBvYmplY3QgYXNcbiAgLy8gICAgYXJndW1lbnRzLiBUaGUgc3VwcGxpZWQgb2JqZWN0IHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0IHZhbHVlcyAvIGZhbGwtYmFja1xuICAvLyAgICBmb3IgcmVsYXRpdmUgcGF0aHMuXG4gIC8vXG4gIGlmICgnb2JqZWN0JyAhPT0gdHlwZSAmJiAnc3RyaW5nJyAhPT0gdHlwZSkge1xuICAgIHBhcnNlciA9IGxvY2F0aW9uO1xuICAgIGxvY2F0aW9uID0gbnVsbDtcbiAgfVxuXG4gIGlmIChwYXJzZXIgJiYgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHBhcnNlcikgcGFyc2VyID0gcXMucGFyc2U7XG5cbiAgbG9jYXRpb24gPSBsb2xjYXRpb24obG9jYXRpb24pO1xuXG4gIC8vXG4gIC8vIEV4dHJhY3QgcHJvdG9jb2wgaW5mb3JtYXRpb24gYmVmb3JlIHJ1bm5pbmcgdGhlIGluc3RydWN0aW9ucy5cbiAgLy9cbiAgZXh0cmFjdGVkID0gZXh0cmFjdFByb3RvY29sKGFkZHJlc3MgfHwgJycsIGxvY2F0aW9uKTtcbiAgcmVsYXRpdmUgPSAhZXh0cmFjdGVkLnByb3RvY29sICYmICFleHRyYWN0ZWQuc2xhc2hlcztcbiAgdXJsLnNsYXNoZXMgPSBleHRyYWN0ZWQuc2xhc2hlcyB8fCByZWxhdGl2ZSAmJiBsb2NhdGlvbi5zbGFzaGVzO1xuICB1cmwucHJvdG9jb2wgPSBleHRyYWN0ZWQucHJvdG9jb2wgfHwgbG9jYXRpb24ucHJvdG9jb2wgfHwgJyc7XG4gIGFkZHJlc3MgPSBleHRyYWN0ZWQucmVzdDtcblxuICAvL1xuICAvLyBXaGVuIHRoZSBhdXRob3JpdHkgY29tcG9uZW50IGlzIGFic2VudCB0aGUgVVJMIHN0YXJ0cyB3aXRoIGEgcGF0aFxuICAvLyBjb21wb25lbnQuXG4gIC8vXG4gIGlmIChcbiAgICBleHRyYWN0ZWQucHJvdG9jb2wgPT09ICdmaWxlOicgJiYgKFxuICAgICAgZXh0cmFjdGVkLnNsYXNoZXNDb3VudCAhPT0gMiB8fCB3aW5kb3dzRHJpdmVMZXR0ZXIudGVzdChhZGRyZXNzKSkgfHxcbiAgICAoIWV4dHJhY3RlZC5zbGFzaGVzICYmXG4gICAgICAoZXh0cmFjdGVkLnByb3RvY29sIHx8XG4gICAgICAgIGV4dHJhY3RlZC5zbGFzaGVzQ291bnQgPCAyIHx8XG4gICAgICAgICFpc1NwZWNpYWwodXJsLnByb3RvY29sKSkpXG4gICkge1xuICAgIGluc3RydWN0aW9uc1szXSA9IFsvKC4qKS8sICdwYXRobmFtZSddO1xuICB9XG5cbiAgZm9yICg7IGkgPCBpbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uc1tpXTtcblxuICAgIGlmICh0eXBlb2YgaW5zdHJ1Y3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFkZHJlc3MgPSBpbnN0cnVjdGlvbihhZGRyZXNzLCB1cmwpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcGFyc2UgPSBpbnN0cnVjdGlvblswXTtcbiAgICBrZXkgPSBpbnN0cnVjdGlvblsxXTtcblxuICAgIGlmIChwYXJzZSAhPT0gcGFyc2UpIHtcbiAgICAgIHVybFtrZXldID0gYWRkcmVzcztcbiAgICB9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgcGFyc2UpIHtcbiAgICAgIGluZGV4ID0gcGFyc2UgPT09ICdAJ1xuICAgICAgICA/IGFkZHJlc3MubGFzdEluZGV4T2YocGFyc2UpXG4gICAgICAgIDogYWRkcmVzcy5pbmRleE9mKHBhcnNlKTtcblxuICAgICAgaWYgKH5pbmRleCkge1xuICAgICAgICBpZiAoJ251bWJlcicgPT09IHR5cGVvZiBpbnN0cnVjdGlvblsyXSkge1xuICAgICAgICAgIHVybFtrZXldID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoaW5kZXggKyBpbnN0cnVjdGlvblsyXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXJsW2tleV0gPSBhZGRyZXNzLnNsaWNlKGluZGV4KTtcbiAgICAgICAgICBhZGRyZXNzID0gYWRkcmVzcy5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChpbmRleCA9IHBhcnNlLmV4ZWMoYWRkcmVzcykpKSB7XG4gICAgICB1cmxba2V5XSA9IGluZGV4WzFdO1xuICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXguaW5kZXgpO1xuICAgIH1cblxuICAgIHVybFtrZXldID0gdXJsW2tleV0gfHwgKFxuICAgICAgcmVsYXRpdmUgJiYgaW5zdHJ1Y3Rpb25bM10gPyBsb2NhdGlvbltrZXldIHx8ICcnIDogJydcbiAgICApO1xuXG4gICAgLy9cbiAgICAvLyBIb3N0bmFtZSwgaG9zdCBhbmQgcHJvdG9jb2wgc2hvdWxkIGJlIGxvd2VyY2FzZWQgc28gdGhleSBjYW4gYmUgdXNlZCB0b1xuICAgIC8vIGNyZWF0ZSBhIHByb3BlciBgb3JpZ2luYC5cbiAgICAvL1xuICAgIGlmIChpbnN0cnVjdGlvbls0XSkgdXJsW2tleV0gPSB1cmxba2V5XS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLy9cbiAgLy8gQWxzbyBwYXJzZSB0aGUgc3VwcGxpZWQgcXVlcnkgc3RyaW5nIGluIHRvIGFuIG9iamVjdC4gSWYgd2UncmUgc3VwcGxpZWRcbiAgLy8gd2l0aCBhIGN1c3RvbSBwYXJzZXIgYXMgZnVuY3Rpb24gdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBidWlsZC1pblxuICAvLyBwYXJzZXIuXG4gIC8vXG4gIGlmIChwYXJzZXIpIHVybC5xdWVyeSA9IHBhcnNlcih1cmwucXVlcnkpO1xuXG4gIC8vXG4gIC8vIElmIHRoZSBVUkwgaXMgcmVsYXRpdmUsIHJlc29sdmUgdGhlIHBhdGhuYW1lIGFnYWluc3QgdGhlIGJhc2UgVVJMLlxuICAvL1xuICBpZiAoXG4gICAgICByZWxhdGl2ZVxuICAgICYmIGxvY2F0aW9uLnNsYXNoZXNcbiAgICAmJiB1cmwucGF0aG5hbWUuY2hhckF0KDApICE9PSAnLydcbiAgICAmJiAodXJsLnBhdGhuYW1lICE9PSAnJyB8fCBsb2NhdGlvbi5wYXRobmFtZSAhPT0gJycpXG4gICkge1xuICAgIHVybC5wYXRobmFtZSA9IHJlc29sdmUodXJsLnBhdGhuYW1lLCBsb2NhdGlvbi5wYXRobmFtZSk7XG4gIH1cblxuICAvL1xuICAvLyBEZWZhdWx0IHRvIGEgLyBmb3IgcGF0aG5hbWUgaWYgbm9uZSBleGlzdHMuIFRoaXMgbm9ybWFsaXplcyB0aGUgVVJMXG4gIC8vIHRvIGFsd2F5cyBoYXZlIGEgL1xuICAvL1xuICBpZiAodXJsLnBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nICYmIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpKSB7XG4gICAgdXJsLnBhdGhuYW1lID0gJy8nICsgdXJsLnBhdGhuYW1lO1xuICB9XG5cbiAgLy9cbiAgLy8gV2Ugc2hvdWxkIG5vdCBhZGQgcG9ydCBudW1iZXJzIGlmIHRoZXkgYXJlIGFscmVhZHkgdGhlIGRlZmF1bHQgcG9ydCBudW1iZXJcbiAgLy8gZm9yIGEgZ2l2ZW4gcHJvdG9jb2wuIEFzIHRoZSBob3N0IGFsc28gY29udGFpbnMgdGhlIHBvcnQgbnVtYmVyIHdlJ3JlIGdvaW5nXG4gIC8vIG92ZXJyaWRlIGl0IHdpdGggdGhlIGhvc3RuYW1lIHdoaWNoIGNvbnRhaW5zIG5vIHBvcnQgbnVtYmVyLlxuICAvL1xuICBpZiAoIXJlcXVpcmVkKHVybC5wb3J0LCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWU7XG4gICAgdXJsLnBvcnQgPSAnJztcbiAgfVxuXG4gIC8vXG4gIC8vIFBhcnNlIGRvd24gdGhlIGBhdXRoYCBmb3IgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAgLy9cbiAgdXJsLnVzZXJuYW1lID0gdXJsLnBhc3N3b3JkID0gJyc7XG5cbiAgaWYgKHVybC5hdXRoKSB7XG4gICAgaW5kZXggPSB1cmwuYXV0aC5pbmRleE9mKCc6Jyk7XG5cbiAgICBpZiAofmluZGV4KSB7XG4gICAgICB1cmwudXNlcm5hbWUgPSB1cmwuYXV0aC5zbGljZSgwLCBpbmRleCk7XG4gICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC51c2VybmFtZSkpO1xuXG4gICAgICB1cmwucGFzc3dvcmQgPSB1cmwuYXV0aC5zbGljZShpbmRleCArIDEpO1xuICAgICAgdXJsLnBhc3N3b3JkID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwucGFzc3dvcmQpKVxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwudXNlcm5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC5hdXRoKSk7XG4gICAgfVxuXG4gICAgdXJsLmF1dGggPSB1cmwucGFzc3dvcmQgPyB1cmwudXNlcm5hbWUgKyc6JysgdXJsLnBhc3N3b3JkIDogdXJsLnVzZXJuYW1lO1xuICB9XG5cbiAgdXJsLm9yaWdpbiA9IHVybC5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJiBpc1NwZWNpYWwodXJsLnByb3RvY29sKSAmJiB1cmwuaG9zdFxuICAgID8gdXJsLnByb3RvY29sICsnLy8nKyB1cmwuaG9zdFxuICAgIDogJ251bGwnO1xuXG4gIC8vXG4gIC8vIFRoZSBocmVmIGlzIGp1c3QgdGhlIGNvbXBpbGVkIHJlc3VsdC5cbiAgLy9cbiAgdXJsLmhyZWYgPSB1cmwudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGNvbnZlbmllbmNlIG1ldGhvZCBmb3IgY2hhbmdpbmcgcHJvcGVydGllcyBpbiB0aGUgVVJMIGluc3RhbmNlIHRvXG4gKiBpbnN1cmUgdGhhdCB0aGV5IGFsbCBwcm9wYWdhdGUgY29ycmVjdGx5LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXJ0ICAgICAgICAgIFByb3BlcnR5IHdlIG5lZWQgdG8gYWRqdXN0LlxuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgICAgICAgICAgVGhlIG5ld2x5IGFzc2lnbmVkIHZhbHVlLlxuICogQHBhcmFtIHtCb29sZWFufEZ1bmN0aW9ufSBmbiAgV2hlbiBzZXR0aW5nIHRoZSBxdWVyeSwgaXQgd2lsbCBiZSB0aGUgZnVuY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgdG8gcGFyc2UgdGhlIHF1ZXJ5LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBzZXR0aW5nIHRoZSBwcm90b2NvbCwgZG91YmxlIHNsYXNoIHdpbGwgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgZnJvbSB0aGUgZmluYWwgdXJsIGlmIGl0IGlzIHRydWUuXG4gKiBAcmV0dXJucyB7VVJMfSBVUkwgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBzZXQocGFydCwgdmFsdWUsIGZuKSB7XG4gIHZhciB1cmwgPSB0aGlzO1xuXG4gIHN3aXRjaCAocGFydCkge1xuICAgIGNhc2UgJ3F1ZXJ5JzpcbiAgICAgIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IChmbiB8fCBxcy5wYXJzZSkodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncG9ydCc6XG4gICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcblxuICAgICAgaWYgKCFyZXF1aXJlZCh2YWx1ZSwgdXJsLnByb3RvY29sKSkge1xuICAgICAgICB1cmwuaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgICAgICAgdXJsW3BhcnRdID0gJyc7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lICsnOicrIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hvc3RuYW1lJzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAodXJsLnBvcnQpIHZhbHVlICs9ICc6JysgdXJsLnBvcnQ7XG4gICAgICB1cmwuaG9zdCA9IHZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdob3N0JzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAocG9ydC50ZXN0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgIHVybC5wb3J0ID0gdmFsdWUucG9wKCk7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlLmpvaW4oJzonKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlO1xuICAgICAgICB1cmwucG9ydCA9ICcnO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Byb3RvY29sJzpcbiAgICAgIHVybC5wcm90b2NvbCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICB1cmwuc2xhc2hlcyA9ICFmbjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncGF0aG5hbWUnOlxuICAgIGNhc2UgJ2hhc2gnOlxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhciBjaGFyID0gcGFydCA9PT0gJ3BhdGhuYW1lJyA/ICcvJyA6ICcjJztcbiAgICAgICAgdXJsW3BhcnRdID0gdmFsdWUuY2hhckF0KDApICE9PSBjaGFyID8gY2hhciArIHZhbHVlIDogdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndXNlcm5hbWUnOlxuICAgIGNhc2UgJ3Bhc3N3b3JkJzpcbiAgICAgIHVybFtwYXJ0XSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2F1dGgnOlxuICAgICAgdmFyIGluZGV4ID0gdmFsdWUuaW5kZXhPZignOicpO1xuXG4gICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgIHVybC51c2VybmFtZSA9IHZhbHVlLnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgdXJsLnVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh1cmwudXNlcm5hbWUpKTtcblxuICAgICAgICB1cmwucGFzc3dvcmQgPSB2YWx1ZS5zbGljZShpbmRleCArIDEpO1xuICAgICAgICB1cmwucGFzc3dvcmQgPSBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHVybC5wYXNzd29yZCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsLnVzZXJuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICAgICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpbnMgPSBydWxlc1tpXTtcblxuICAgIGlmIChpbnNbNF0pIHVybFtpbnNbMV1dID0gdXJsW2luc1sxXV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHVybC5hdXRoID0gdXJsLnBhc3N3b3JkID8gdXJsLnVzZXJuYW1lICsnOicrIHVybC5wYXNzd29yZCA6IHVybC51c2VybmFtZTtcblxuICB1cmwub3JpZ2luID0gdXJsLnByb3RvY29sICE9PSAnZmlsZTonICYmIGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpICYmIHVybC5ob3N0XG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgdXJsLmhyZWYgPSB1cmwudG9TdHJpbmcoKTtcblxuICByZXR1cm4gdXJsO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgcHJvcGVydGllcyBiYWNrIGluIHRvIGEgdmFsaWQgYW5kIGZ1bGwgVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmdpZnkgT3B0aW9uYWwgcXVlcnkgc3RyaW5naWZ5IGZ1bmN0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gQ29tcGlsZWQgdmVyc2lvbiBvZiB0aGUgVVJMLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyhzdHJpbmdpZnkpIHtcbiAgaWYgKCFzdHJpbmdpZnkgfHwgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHN0cmluZ2lmeSkgc3RyaW5naWZ5ID0gcXMuc3RyaW5naWZ5O1xuXG4gIHZhciBxdWVyeVxuICAgICwgdXJsID0gdGhpc1xuICAgICwgaG9zdCA9IHVybC5ob3N0XG4gICAgLCBwcm90b2NvbCA9IHVybC5wcm90b2NvbDtcblxuICBpZiAocHJvdG9jb2wgJiYgcHJvdG9jb2wuY2hhckF0KHByb3RvY29sLmxlbmd0aCAtIDEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICB2YXIgcmVzdWx0ID1cbiAgICBwcm90b2NvbCArXG4gICAgKCh1cmwucHJvdG9jb2wgJiYgdXJsLnNsYXNoZXMpIHx8IGlzU3BlY2lhbCh1cmwucHJvdG9jb2wpID8gJy8vJyA6ICcnKTtcblxuICBpZiAodXJsLnVzZXJuYW1lKSB7XG4gICAgcmVzdWx0ICs9IHVybC51c2VybmFtZTtcbiAgICBpZiAodXJsLnBhc3N3b3JkKSByZXN1bHQgKz0gJzonKyB1cmwucGFzc3dvcmQ7XG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfSBlbHNlIGlmICh1cmwucGFzc3dvcmQpIHtcbiAgICByZXN1bHQgKz0gJzonKyB1cmwucGFzc3dvcmQ7XG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfSBlbHNlIGlmIChcbiAgICB1cmwucHJvdG9jb2wgIT09ICdmaWxlOicgJiZcbiAgICBpc1NwZWNpYWwodXJsLnByb3RvY29sKSAmJlxuICAgICFob3N0ICYmXG4gICAgdXJsLnBhdGhuYW1lICE9PSAnLydcbiAgKSB7XG4gICAgLy9cbiAgICAvLyBBZGQgYmFjayB0aGUgZW1wdHkgdXNlcmluZm8sIG90aGVyd2lzZSB0aGUgb3JpZ2luYWwgaW52YWxpZCBVUkxcbiAgICAvLyBtaWdodCBiZSB0cmFuc2Zvcm1lZCBpbnRvIGEgdmFsaWQgb25lIHdpdGggYHVybC5wYXRobmFtZWAgYXMgaG9zdC5cbiAgICAvL1xuICAgIHJlc3VsdCArPSAnQCc7XG4gIH1cblxuICAvL1xuICAvLyBUcmFpbGluZyBjb2xvbiBpcyByZW1vdmVkIGZyb20gYHVybC5ob3N0YCB3aGVuIGl0IGlzIHBhcnNlZC4gSWYgaXQgc3RpbGxcbiAgLy8gZW5kcyB3aXRoIGEgY29sb24sIHRoZW4gYWRkIGJhY2sgdGhlIHRyYWlsaW5nIGNvbG9uIHRoYXQgd2FzIHJlbW92ZWQuIFRoaXNcbiAgLy8gcHJldmVudHMgYW4gaW52YWxpZCBVUkwgZnJvbSBiZWluZyB0cmFuc2Zvcm1lZCBpbnRvIGEgdmFsaWQgb25lLlxuICAvL1xuICBpZiAoaG9zdFtob3N0Lmxlbmd0aCAtIDFdID09PSAnOicgfHwgKHBvcnQudGVzdCh1cmwuaG9zdG5hbWUpICYmICF1cmwucG9ydCkpIHtcbiAgICBob3N0ICs9ICc6JztcbiAgfVxuXG4gIHJlc3VsdCArPSBob3N0ICsgdXJsLnBhdGhuYW1lO1xuXG4gIHF1ZXJ5ID0gJ29iamVjdCcgPT09IHR5cGVvZiB1cmwucXVlcnkgPyBzdHJpbmdpZnkodXJsLnF1ZXJ5KSA6IHVybC5xdWVyeTtcbiAgaWYgKHF1ZXJ5KSByZXN1bHQgKz0gJz8nICE9PSBxdWVyeS5jaGFyQXQoMCkgPyAnPycrIHF1ZXJ5IDogcXVlcnk7XG5cbiAgaWYgKHVybC5oYXNoKSByZXN1bHQgKz0gdXJsLmhhc2g7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuVXJsLnByb3RvdHlwZSA9IHsgc2V0OiBzZXQsIHRvU3RyaW5nOiB0b1N0cmluZyB9O1xuXG4vL1xuLy8gRXhwb3NlIHRoZSBVUkwgcGFyc2VyIGFuZCBzb21lIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCBmb3Jcbi8vIG90aGVycyBvciB0ZXN0aW5nLlxuLy9cblVybC5leHRyYWN0UHJvdG9jb2wgPSBleHRyYWN0UHJvdG9jb2w7XG5VcmwubG9jYXRpb24gPSBsb2xjYXRpb247XG5VcmwudHJpbUxlZnQgPSB0cmltTGVmdDtcblVybC5xcyA9IHFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVybDtcbiIsICIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuXHR2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuXG52YXIgX3JlYWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JlYWN0KTtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKCdwcm9wLXR5cGVzJyk7XG5cbnZhciBfcHJvcFR5cGVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb3BUeXBlcyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG52YXIgc2l6ZXJTdHlsZSA9IHtcblx0cG9zaXRpb246ICdhYnNvbHV0ZScsXG5cdHRvcDogMCxcblx0bGVmdDogMCxcblx0dmlzaWJpbGl0eTogJ2hpZGRlbicsXG5cdGhlaWdodDogMCxcblx0b3ZlcmZsb3c6ICdzY3JvbGwnLFxuXHR3aGl0ZVNwYWNlOiAncHJlJ1xufTtcblxudmFyIElOUFVUX1BST1BTX0JMQUNLTElTVCA9IFsnZXh0cmFXaWR0aCcsICdpbmplY3RTdHlsZXMnLCAnaW5wdXRDbGFzc05hbWUnLCAnaW5wdXRSZWYnLCAnaW5wdXRTdHlsZScsICdtaW5XaWR0aCcsICdvbkF1dG9zaXplJywgJ3BsYWNlaG9sZGVySXNNaW5XaWR0aCddO1xuXG52YXIgY2xlYW5JbnB1dFByb3BzID0gZnVuY3Rpb24gY2xlYW5JbnB1dFByb3BzKGlucHV0UHJvcHMpIHtcblx0SU5QVVRfUFJPUFNfQkxBQ0tMSVNULmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG5cdFx0cmV0dXJuIGRlbGV0ZSBpbnB1dFByb3BzW2ZpZWxkXTtcblx0fSk7XG5cdHJldHVybiBpbnB1dFByb3BzO1xufTtcblxudmFyIGNvcHlTdHlsZXMgPSBmdW5jdGlvbiBjb3B5U3R5bGVzKHN0eWxlcywgbm9kZSkge1xuXHRub2RlLnN0eWxlLmZvbnRTaXplID0gc3R5bGVzLmZvbnRTaXplO1xuXHRub2RlLnN0eWxlLmZvbnRGYW1pbHkgPSBzdHlsZXMuZm9udEZhbWlseTtcblx0bm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gc3R5bGVzLmZvbnRXZWlnaHQ7XG5cdG5vZGUuc3R5bGUuZm9udFN0eWxlID0gc3R5bGVzLmZvbnRTdHlsZTtcblx0bm9kZS5zdHlsZS5sZXR0ZXJTcGFjaW5nID0gc3R5bGVzLmxldHRlclNwYWNpbmc7XG5cdG5vZGUuc3R5bGUudGV4dFRyYW5zZm9ybSA9IHN0eWxlcy50ZXh0VHJhbnNmb3JtO1xufTtcblxudmFyIGlzSUUgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yID8gL01TSUUgfFRyaWRlbnRcXC98RWRnZVxcLy8udGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkgOiBmYWxzZTtcblxudmFyIGdlbmVyYXRlSWQgPSBmdW5jdGlvbiBnZW5lcmF0ZUlkKCkge1xuXHQvLyB3ZSBvbmx5IG5lZWQgYW4gYXV0by1nZW5lcmF0ZWQgSUQgZm9yIHN0eWxlc2hlZXQgaW5qZWN0aW9uLCB3aGljaCBpcyBvbmx5XG5cdC8vIHVzZWQgZm9yIElFLiBzbyBpZiB0aGUgYnJvd3NlciBpcyBub3QgSUUsIHRoaXMgc2hvdWxkIHJldHVybiB1bmRlZmluZWQuXG5cdHJldHVybiBpc0lFID8gJ18nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDEyKSA6IHVuZGVmaW5lZDtcbn07XG5cbnZhciBBdXRvc2l6ZUlucHV0ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcblx0X2luaGVyaXRzKEF1dG9zaXplSW5wdXQsIF9Db21wb25lbnQpO1xuXG5cdF9jcmVhdGVDbGFzcyhBdXRvc2l6ZUlucHV0LCBudWxsLCBbe1xuXHRcdGtleTogJ2dldERlcml2ZWRTdGF0ZUZyb21Qcm9wcycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcblx0XHRcdHZhciBpZCA9IHByb3BzLmlkO1xuXG5cdFx0XHRyZXR1cm4gaWQgIT09IHN0YXRlLnByZXZJZCA/IHsgaW5wdXRJZDogaWQgfHwgZ2VuZXJhdGVJZCgpLCBwcmV2SWQ6IGlkIH0gOiBudWxsO1xuXHRcdH1cblx0fV0pO1xuXG5cdGZ1bmN0aW9uIEF1dG9zaXplSW5wdXQocHJvcHMpIHtcblx0XHRfY2xhc3NDYWxsQ2hlY2sodGhpcywgQXV0b3NpemVJbnB1dCk7XG5cblx0XHR2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQXV0b3NpemVJbnB1dC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEF1dG9zaXplSW5wdXQpKS5jYWxsKHRoaXMsIHByb3BzKSk7XG5cblx0XHRfdGhpcy5pbnB1dFJlZiA9IGZ1bmN0aW9uIChlbCkge1xuXHRcdFx0X3RoaXMuaW5wdXQgPSBlbDtcblx0XHRcdGlmICh0eXBlb2YgX3RoaXMucHJvcHMuaW5wdXRSZWYgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0X3RoaXMucHJvcHMuaW5wdXRSZWYoZWwpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRfdGhpcy5wbGFjZUhvbGRlclNpemVyUmVmID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRfdGhpcy5wbGFjZUhvbGRlclNpemVyID0gZWw7XG5cdFx0fTtcblxuXHRcdF90aGlzLnNpemVyUmVmID0gZnVuY3Rpb24gKGVsKSB7XG5cdFx0XHRfdGhpcy5zaXplciA9IGVsO1xuXHRcdH07XG5cblx0XHRfdGhpcy5zdGF0ZSA9IHtcblx0XHRcdGlucHV0V2lkdGg6IHByb3BzLm1pbldpZHRoLFxuXHRcdFx0aW5wdXRJZDogcHJvcHMuaWQgfHwgZ2VuZXJhdGVJZCgpLFxuXHRcdFx0cHJldklkOiBwcm9wcy5pZFxuXHRcdH07XG5cdFx0cmV0dXJuIF90aGlzO1xuXHR9XG5cblx0X2NyZWF0ZUNsYXNzKEF1dG9zaXplSW5wdXQsIFt7XG5cdFx0a2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcblx0XHRcdHRoaXMubW91bnRlZCA9IHRydWU7XG5cdFx0XHR0aGlzLmNvcHlJbnB1dFN0eWxlcygpO1xuXHRcdFx0dGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29tcG9uZW50RGlkVXBkYXRlJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG5cdFx0XHRpZiAocHJldlN0YXRlLmlucHV0V2lkdGggIT09IHRoaXMuc3RhdGUuaW5wdXRXaWR0aCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIHRoaXMucHJvcHMub25BdXRvc2l6ZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHRoaXMucHJvcHMub25BdXRvc2l6ZSh0aGlzLnN0YXRlLmlucHV0V2lkdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuXHRcdFx0dGhpcy5tb3VudGVkID0gZmFsc2U7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnY29weUlucHV0U3R5bGVzJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY29weUlucHV0U3R5bGVzKCkge1xuXHRcdFx0aWYgKCF0aGlzLm1vdW50ZWQgfHwgIXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBpbnB1dFN0eWxlcyA9IHRoaXMuaW5wdXQgJiYgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5pbnB1dCk7XG5cdFx0XHRpZiAoIWlucHV0U3R5bGVzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvcHlTdHlsZXMoaW5wdXRTdHlsZXMsIHRoaXMuc2l6ZXIpO1xuXHRcdFx0aWYgKHRoaXMucGxhY2VIb2xkZXJTaXplcikge1xuXHRcdFx0XHRjb3B5U3R5bGVzKGlucHV0U3R5bGVzLCB0aGlzLnBsYWNlSG9sZGVyU2l6ZXIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ3VwZGF0ZUlucHV0V2lkdGgnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVJbnB1dFdpZHRoKCkge1xuXHRcdFx0aWYgKCF0aGlzLm1vdW50ZWQgfHwgIXRoaXMuc2l6ZXIgfHwgdHlwZW9mIHRoaXMuc2l6ZXIuc2Nyb2xsV2lkdGggPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBuZXdJbnB1dFdpZHRoID0gdm9pZCAwO1xuXHRcdFx0aWYgKHRoaXMucHJvcHMucGxhY2Vob2xkZXIgJiYgKCF0aGlzLnByb3BzLnZhbHVlIHx8IHRoaXMucHJvcHMudmFsdWUgJiYgdGhpcy5wcm9wcy5wbGFjZWhvbGRlcklzTWluV2lkdGgpKSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSBNYXRoLm1heCh0aGlzLnNpemVyLnNjcm9sbFdpZHRoLCB0aGlzLnBsYWNlSG9sZGVyU2l6ZXIuc2Nyb2xsV2lkdGgpICsgMjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSB0aGlzLnNpemVyLnNjcm9sbFdpZHRoICsgMjtcblx0XHRcdH1cblx0XHRcdC8vIGFkZCBleHRyYVdpZHRoIHRvIHRoZSBkZXRlY3RlZCB3aWR0aC4gZm9yIG51bWJlciB0eXBlcywgdGhpcyBkZWZhdWx0cyB0byAxNiB0byBhbGxvdyBmb3IgdGhlIHN0ZXBwZXIgVUlcblx0XHRcdHZhciBleHRyYVdpZHRoID0gdGhpcy5wcm9wcy50eXBlID09PSAnbnVtYmVyJyAmJiB0aGlzLnByb3BzLmV4dHJhV2lkdGggPT09IHVuZGVmaW5lZCA/IDE2IDogcGFyc2VJbnQodGhpcy5wcm9wcy5leHRyYVdpZHRoKSB8fCAwO1xuXHRcdFx0bmV3SW5wdXRXaWR0aCArPSBleHRyYVdpZHRoO1xuXHRcdFx0aWYgKG5ld0lucHV0V2lkdGggPCB0aGlzLnByb3BzLm1pbldpZHRoKSB7XG5cdFx0XHRcdG5ld0lucHV0V2lkdGggPSB0aGlzLnByb3BzLm1pbldpZHRoO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG5ld0lucHV0V2lkdGggIT09IHRoaXMuc3RhdGUuaW5wdXRXaWR0aCkge1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtcblx0XHRcdFx0XHRpbnB1dFdpZHRoOiBuZXdJbnB1dFdpZHRoXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2dldElucHV0Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gZ2V0SW5wdXQoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnB1dDtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdmb2N1cycsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGZvY3VzKCkge1xuXHRcdFx0dGhpcy5pbnB1dC5mb2N1cygpO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2JsdXInLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiBibHVyKCkge1xuXHRcdFx0dGhpcy5pbnB1dC5ibHVyKCk7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAnc2VsZWN0Jyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gc2VsZWN0KCkge1xuXHRcdFx0dGhpcy5pbnB1dC5zZWxlY3QoKTtcblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICdyZW5kZXJTdHlsZXMnLFxuXHRcdHZhbHVlOiBmdW5jdGlvbiByZW5kZXJTdHlsZXMoKSB7XG5cdFx0XHQvLyB0aGlzIG1ldGhvZCBpbmplY3RzIHN0eWxlcyB0byBoaWRlIElFJ3MgY2xlYXIgaW5kaWNhdG9yLCB3aGljaCBtZXNzZXNcblx0XHRcdC8vIHdpdGggaW5wdXQgc2l6ZSBkZXRlY3Rpb24uIHRoZSBzdHlsZXNoZWV0IGlzIG9ubHkgaW5qZWN0ZWQgd2hlbiB0aGVcblx0XHRcdC8vIGJyb3dzZXIgaXMgSUUsIGFuZCBjYW4gYWxzbyBiZSBkaXNhYmxlZCBieSB0aGUgYGluamVjdFN0eWxlc2AgcHJvcC5cblx0XHRcdHZhciBpbmplY3RTdHlsZXMgPSB0aGlzLnByb3BzLmluamVjdFN0eWxlcztcblxuXHRcdFx0cmV0dXJuIGlzSUUgJiYgaW5qZWN0U3R5bGVzID8gX3JlYWN0Mi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJywgeyBkYW5nZXJvdXNseVNldElubmVySFRNTDoge1xuXHRcdFx0XHRcdF9faHRtbDogJ2lucHV0IycgKyB0aGlzLnN0YXRlLmlucHV0SWQgKyAnOjotbXMtY2xlYXIge2Rpc3BsYXk6IG5vbmU7fSdcblx0XHRcdFx0fSB9KSA6IG51bGw7XG5cdFx0fVxuXHR9LCB7XG5cdFx0a2V5OiAncmVuZGVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdFx0dmFyIHNpemVyVmFsdWUgPSBbdGhpcy5wcm9wcy5kZWZhdWx0VmFsdWUsIHRoaXMucHJvcHMudmFsdWUsICcnXS5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRpZiAocHJldmlvdXNWYWx1ZSAhPT0gbnVsbCAmJiBwcmV2aW91c1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY3VycmVudFZhbHVlO1xuXHRcdFx0fSk7XG5cblx0XHRcdHZhciB3cmFwcGVyU3R5bGUgPSBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcy5zdHlsZSk7XG5cdFx0XHRpZiAoIXdyYXBwZXJTdHlsZS5kaXNwbGF5KSB3cmFwcGVyU3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xuXG5cdFx0XHR2YXIgaW5wdXRTdHlsZSA9IF9leHRlbmRzKHtcblx0XHRcdFx0Ym94U2l6aW5nOiAnY29udGVudC1ib3gnLFxuXHRcdFx0XHR3aWR0aDogdGhpcy5zdGF0ZS5pbnB1dFdpZHRoICsgJ3B4J1xuXHRcdFx0fSwgdGhpcy5wcm9wcy5pbnB1dFN0eWxlKTtcblxuXHRcdFx0dmFyIGlucHV0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXModGhpcy5wcm9wcywgW10pO1xuXG5cdFx0XHRjbGVhbklucHV0UHJvcHMoaW5wdXRQcm9wcyk7XG5cdFx0XHRpbnB1dFByb3BzLmNsYXNzTmFtZSA9IHRoaXMucHJvcHMuaW5wdXRDbGFzc05hbWU7XG5cdFx0XHRpbnB1dFByb3BzLmlkID0gdGhpcy5zdGF0ZS5pbnB1dElkO1xuXHRcdFx0aW5wdXRQcm9wcy5zdHlsZSA9IGlucHV0U3R5bGU7XG5cblx0XHRcdHJldHVybiBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0J2RpdicsXG5cdFx0XHRcdHsgY2xhc3NOYW1lOiB0aGlzLnByb3BzLmNsYXNzTmFtZSwgc3R5bGU6IHdyYXBwZXJTdHlsZSB9LFxuXHRcdFx0XHR0aGlzLnJlbmRlclN0eWxlcygpLFxuXHRcdFx0XHRfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgnaW5wdXQnLCBfZXh0ZW5kcyh7fSwgaW5wdXRQcm9wcywgeyByZWY6IHRoaXMuaW5wdXRSZWYgfSkpLFxuXHRcdFx0XHRfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHR7IHJlZjogdGhpcy5zaXplclJlZiwgc3R5bGU6IHNpemVyU3R5bGUgfSxcblx0XHRcdFx0XHRzaXplclZhbHVlXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRoaXMucHJvcHMucGxhY2Vob2xkZXIgPyBfcmVhY3QyLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcblx0XHRcdFx0XHQnZGl2Jyxcblx0XHRcdFx0XHR7IHJlZjogdGhpcy5wbGFjZUhvbGRlclNpemVyUmVmLCBzdHlsZTogc2l6ZXJTdHlsZSB9LFxuXHRcdFx0XHRcdHRoaXMucHJvcHMucGxhY2Vob2xkZXJcblx0XHRcdFx0KSA6IG51bGxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XSk7XG5cblx0cmV0dXJuIEF1dG9zaXplSW5wdXQ7XG59KF9yZWFjdC5Db21wb25lbnQpO1xuXG5BdXRvc2l6ZUlucHV0LnByb3BUeXBlcyA9IHtcblx0Y2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gY2xhc3NOYW1lIGZvciB0aGUgb3V0ZXIgZWxlbWVudFxuXHRkZWZhdWx0VmFsdWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55LCAvLyBkZWZhdWx0IGZpZWxkIHZhbHVlXG5cdGV4dHJhV2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQub25lT2ZUeXBlKFsvLyBhZGRpdGlvbmFsIHdpZHRoIGZvciBpbnB1dCBlbGVtZW50XG5cdF9wcm9wVHlwZXMyLmRlZmF1bHQubnVtYmVyLCBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZ10pLFxuXHRpZDogX3Byb3BUeXBlczIuZGVmYXVsdC5zdHJpbmcsIC8vIGlkIHRvIHVzZSBmb3IgdGhlIGlucHV0LCBjYW4gYmUgc2V0IGZvciBjb25zaXN0ZW50IHNuYXBzaG90c1xuXHRpbmplY3RTdHlsZXM6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCwgLy8gaW5qZWN0IHRoZSBjdXN0b20gc3R5bGVzaGVldCB0byBoaWRlIGNsZWFyIFVJLCBkZWZhdWx0cyB0byB0cnVlXG5cdGlucHV0Q2xhc3NOYW1lOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gY2xhc3NOYW1lIGZvciB0aGUgaW5wdXQgZWxlbWVudFxuXHRpbnB1dFJlZjogX3Byb3BUeXBlczIuZGVmYXVsdC5mdW5jLCAvLyByZWYgY2FsbGJhY2sgZm9yIHRoZSBpbnB1dCBlbGVtZW50XG5cdGlucHV0U3R5bGU6IF9wcm9wVHlwZXMyLmRlZmF1bHQub2JqZWN0LCAvLyBjc3Mgc3R5bGVzIGZvciB0aGUgaW5wdXQgZWxlbWVudFxuXHRtaW5XaWR0aDogX3Byb3BUeXBlczIuZGVmYXVsdC5vbmVPZlR5cGUoWy8vIG1pbmltdW0gd2lkdGggZm9yIGlucHV0IGVsZW1lbnRcblx0X3Byb3BUeXBlczIuZGVmYXVsdC5udW1iZXIsIF9wcm9wVHlwZXMyLmRlZmF1bHQuc3RyaW5nXSksXG5cdG9uQXV0b3NpemU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gb25BdXRvc2l6ZSBoYW5kbGVyOiBmdW5jdGlvbihuZXdXaWR0aCkge31cblx0b25DaGFuZ2U6IF9wcm9wVHlwZXMyLmRlZmF1bHQuZnVuYywgLy8gb25DaGFuZ2UgaGFuZGxlcjogZnVuY3Rpb24oZXZlbnQpIHt9XG5cdHBsYWNlaG9sZGVyOiBfcHJvcFR5cGVzMi5kZWZhdWx0LnN0cmluZywgLy8gcGxhY2Vob2xkZXIgdGV4dFxuXHRwbGFjZWhvbGRlcklzTWluV2lkdGg6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYm9vbCwgLy8gZG9uJ3QgY29sbGFwc2Ugc2l6ZSB0byBsZXNzIHRoYW4gdGhlIHBsYWNlaG9sZGVyXG5cdHN0eWxlOiBfcHJvcFR5cGVzMi5kZWZhdWx0Lm9iamVjdCwgLy8gY3NzIHN0eWxlcyBmb3IgdGhlIG91dGVyIGVsZW1lbnRcblx0dmFsdWU6IF9wcm9wVHlwZXMyLmRlZmF1bHQuYW55IC8vIGZpZWxkIHZhbHVlXG59O1xuQXV0b3NpemVJbnB1dC5kZWZhdWx0UHJvcHMgPSB7XG5cdG1pbldpZHRoOiAxLFxuXHRpbmplY3RTdHlsZXM6IHRydWVcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IEF1dG9zaXplSW5wdXQ7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCB0aGlzIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzV2l0aEJpbmQgPSBOQVRJVkVfQklORCAmJiBGdW5jdGlvblByb3RvdHlwZS5iaW5kLmJpbmQoY2FsbCwgY2FsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyB1bmN1cnJ5VGhpc1dpdGhCaW5kIDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuKSB7XG4gIC8vIE5hc2hvcm4gYnVnOlxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTI4XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMzBcbiAgaWYgKGNsYXNzb2ZSYXcoZm4pID09PSAnRnVuY3Rpb24nKSByZXR1cm4gdW5jdXJyeVRoaXMoZm4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZG9jdW1lbnRBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCcgJiYgZG9jdW1lbnQuYWxsO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgSVNfSFRNTEREQSA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWxsOiBkb2N1bWVudEFsbCxcbiAgSVNfSFRNTEREQTogSVNfSFRNTEREQVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG4vLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nIHx8IGFyZ3VtZW50ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PSAnZnVuY3Rpb24nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gTmFzaG9ybiB+IEpESzggYnVnXG52YXIgTkFTSE9STl9CVUcgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgISRwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gd2UgY2FuJ3QgdXNlIGp1c3QgYGl0ID09IG51bGxgIHNpbmNlIG9mIGBkb2N1bWVudC5hbGxgIHNwZWNpYWwgY2FzZVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdC1hZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gbnVsbCB8fCBpdCA9PT0gdW5kZWZpbmVkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgJGRvY3VtZW50QWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCcpO1xuXG52YXIgZG9jdW1lbnRBbGwgPSAkZG9jdW1lbnRBbGwuYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRkb2N1bWVudEFsbC5JU19IVE1MRERBID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpIHx8IGl0ID09PSBkb2N1bWVudEFsbDtcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodmFyaWFibGUpID8gdmFyaWFibGUgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24ocGF0aFtuYW1lc3BhY2VdKSB8fCBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pXG4gICAgOiBwYXRoW25hbWVzcGFjZV0gJiYgcGF0aFtuYW1lc3BhY2VdW21ldGhvZF0gfHwgZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKHt9LmlzUHJvdG90eXBlT2YpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIG5hdmlnYXRvciAhPSAndW5kZWZpbmVkJyAmJiBTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgJyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgJFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjMzLjInLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyMyBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjMzLjIvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyYXBwZXIpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gYXBwbHkoTmF0aXZlQ29uc3RydWN0b3IsIHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbCA6IFNUQVRJQyA/IGdsb2JhbFtUQVJHRVRdIDogKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFRBUkdFVCwge30pW1RBUkdFVF07XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXNPd24obmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgbWV0aG9kcyB0byBnbG9iYWwgZm9yIGNhbGxpbmcgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2VzIGluIHRoaXMgdmVyc2lvblxuICAgIGVsc2UgaWYgKG9wdGlvbnMud3JhcCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IHdyYXBDb25zdHJ1Y3Rvcihzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgZWxzZSBpZiAoUFJPVE8gJiYgaXNDYWxsYWJsZShzb3VyY2VQcm9wZXJ0eSkpIHJlc3VsdFByb3BlcnR5ID0gdW5jdXJyeVRoaXMoc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHRQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHJlc3VsdFByb3BlcnR5KTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzT3duKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aFtWSVJUVUFMX1BST1RPVFlQRV0sIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgLy8gZXhwb3J0IHJlYWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGlmIChvcHRpb25zLnJlYWwgJiYgdGFyZ2V0UHJvdG90eXBlICYmIChGT1JDRUQgfHwgIXRhcmdldFByb3RvdHlwZVtrZXldKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0UHJvdG90eXBlLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eS5zaGFtKSBkZWZpbmVQcm9wZXJ0eS5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KSwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKHByb3BlcnR5S2V5IGluIG9iamVjdCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbcHJvcGVydHlLZXldID0gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gdW5jdXJyeVRoaXMoRnVuY3Rpb24udG9TdHJpbmcpO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgZW1wdHkgPSBbXTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoY29uc3RydWN0b3JSZWdFeHAuZXhlYyk7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC50ZXN0KG5vb3ApO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChub29wLCBlbXB0eSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICAgIC8vIGBGdW5jdGlvbiN0b1N0cmluZ2AgdGhyb3dzIG9uIHNvbWUgYnVpbHQtaXQgZnVuY3Rpb24gaW4gc29tZSBsZWdhY3kgZW5naW5lc1xuICAgIC8vIChmb3IgZXhhbXBsZSwgYERPTVF1YWRgIGFuZCBzaW1pbGFyIGluIEZGNDEtKVxuICAgIHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYyhjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5pc0NvbnN0cnVjdG9yTGVnYWN5LnNoYW0gPSB0cnVlO1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIGxlbik7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgMSk7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KEEsIG4rKywgRSk7XG4gICAgICB9XG4gICAgfVxuICAgIEEubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gIHZhciByZXN1bHQgPSAkQXJyYXkobWF4KGZpbiAtIGssIDApKTtcbiAgdmFyIG4gPSAwO1xuICBmb3IgKDsgayA8IGZpbjsgaysrLCBuKyspIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gIHJlc3VsdC5sZW5ndGggPSBuO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW51bWVyYWJsZSkgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBuYXRpdmVPYmplY3RDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgSElEREVOID0gc2hhcmVkS2V5KCdoaWRkZW4nKTtcbnZhciBTWU1CT0wgPSAnU3ltYm9sJztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcblxudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2wgJiYgJFN5bWJvbFtQUk9UT1RZUEVdO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mO1xudmFyIG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIFVTRV9TRVRURVIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBmYWxsYmFja0RlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgdmFyIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCBQKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpIGRlbGV0ZSBPYmplY3RQcm90b3R5cGVbUF07XG4gIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciAmJiBPICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGUsIFAsIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpO1xuICB9XG59O1xuXG52YXIgc2V0U3ltYm9sRGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdENyZWF0ZShuYXRpdmVEZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPT0gNztcbn0pID8gZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA6IG5hdGl2ZURlZmluZVByb3BlcnR5O1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcsIGRlc2NyaXB0aW9uKSB7XG4gIHZhciBzeW1ib2wgPSBBbGxTeW1ib2xzW3RhZ10gPSBuYXRpdmVPYmplY3RDcmVhdGUoU3ltYm9sUHJvdG90eXBlKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZShzeW1ib2wsIHtcbiAgICB0eXBlOiBTWU1CT0wsXG4gICAgdGFnOiB0YWcsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG4gIH0pO1xuICBpZiAoIURFU0NSSVBUT1JTKSBzeW1ib2wuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgcmV0dXJuIHN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGlmIChPID09PSBPYmplY3RQcm90b3R5cGUpICRkZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQLCBBdHRyaWJ1dGVzKTtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFBdHRyaWJ1dGVzLmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzT3duKE8sIEhJRERFTikpIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIEhJRERFTiwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHt9KSk7XG4gICAgICBPW0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNPd24oTywgSElEREVOKSAmJiBPW0hJRERFTl1ba2V5XSkgT1tISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSBuYXRpdmVPYmplY3RDcmVhdGUoQXR0cmlidXRlcywgeyBlbnVtZXJhYmxlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2NyaXB0b3IoTywga2V5LCBBdHRyaWJ1dGVzKTtcbiAgfSByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkoTywga2V5LCBBdHRyaWJ1dGVzKTtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BlcnRpZXMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhwcm9wZXJ0aWVzKS5jb25jYXQoJGdldE93blByb3BlcnR5U3ltYm9scyhwcm9wZXJ0aWVzKSk7XG4gICRmb3JFYWNoKGtleXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwoJHByb3BlcnR5SXNFbnVtZXJhYmxlLCBwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1Byb3BlcnR5S2V5KFYpO1xuICB2YXIgZW51bWVyYWJsZSA9IGNhbGwobmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUsIHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBQKSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXNPd24odGhpcywgUCkgfHwgIWhhc093bihBbGxTeW1ib2xzLCBQKSB8fCBoYXNPd24odGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF1cbiAgICA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzT3duKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpKSBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBJU19PQkpFQ1RfUFJPVE9UWVBFID0gTyA9PT0gT2JqZWN0UHJvdG90eXBlO1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKElTX09CSkVDVF9QUk9UT1RZUEUgPyBPYmplY3RQcm90b3R5cGVTeW1ib2xzIDogdG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAoIUlTX09CSkVDVF9QUk9UT1RZUEUgfHwgaGFzT3duKE9iamVjdFByb3RvdHlwZSwga2V5KSkpIHtcbiAgICAgIHB1c2gocmVzdWx0LCBBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmIChpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuICAgIHZhciBkZXNjcmlwdGlvbiA9ICFhcmd1bWVudHMubGVuZ3RoIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogJHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHRhZyA9IHVpZChkZXNjcmlwdGlvbik7XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyICR0aGlzID0gdGhpcyA9PT0gdW5kZWZpbmVkID8gZ2xvYmFsIDogdGhpcztcbiAgICAgIGlmICgkdGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bigkdGhpcywgSElEREVOKSAmJiBoYXNPd24oJHRoaXNbSElEREVOXSwgdGFnKSkgJHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZXBsYWNlcikge1xuICBpZiAoaXNDYWxsYWJsZShyZXBsYWNlcikpIHJldHVybiByZXBsYWNlcjtcbiAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmV0dXJuO1xuICB2YXIgcmF3TGVuZ3RoID0gcmVwbGFjZXIubGVuZ3RoO1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0xlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGVsZW1lbnQgPSByZXBsYWNlcltpXTtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ3N0cmluZycpIHB1c2goa2V5cywgZWxlbWVudCk7XG4gICAgZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT0gJ251bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ051bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PT0gJ1N0cmluZycpIHB1c2goa2V5cywgdG9TdHJpbmcoZWxlbWVudCkpO1xuICB9XG4gIHZhciBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciByb290ID0gdHJ1ZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHJvb3QpIHtcbiAgICAgIHJvb3QgPSBmYWxzZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHJldHVybiB2YWx1ZTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXNMZW5ndGg7IGorKykgaWYgKGtleXNbal0gPT09IGtleSkgcmV0dXJuIHZhbHVlO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIGdldFJlcGxhY2VyRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWpzb24tcmVwbGFjZXItZnVuY3Rpb24nKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJHN0cmluZ2lmeSA9IGdldEJ1aWx0SW4oJ0pTT04nLCAnc3RyaW5naWZ5Jyk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKC8uLy5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbnVtYmVyVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG52YXIgdGVzdGVyID0gL1tcXHVEODAwLVxcdURGRkZdL2c7XG52YXIgbG93ID0gL15bXFx1RDgwMC1cXHVEQkZGXSQvO1xudmFyIGhpID0gL15bXFx1REMwMC1cXHVERkZGXSQvO1xuXG52YXIgV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoJ3N0cmluZ2lmeSBkZXRlY3Rpb24nKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgcmV0dXJuICRzdHJpbmdpZnkoW3N5bWJvbF0pICE9PSAnW251bGxdJ1xuICAgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAgIHx8ICRzdHJpbmdpZnkoeyBhOiBzeW1ib2wgfSkgIT09ICd7fSdcbiAgICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICAgIHx8ICRzdHJpbmdpZnkoT2JqZWN0KHN5bWJvbCkpICE9PSAne30nO1xufSk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXdlbGwtZm9ybWVkLXN0cmluZ2lmeVxudmFyIElMTF9GT1JNRURfVU5JQ09ERSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRzdHJpbmdpZnkoJ1xcdURGMDZcXHVEODM0JykgIT09ICdcIlxcXFx1ZGYwNlxcXFx1ZDgzNFwiJ1xuICAgIHx8ICRzdHJpbmdpZnkoJ1xcdURFQUQnKSAhPT0gJ1wiXFxcXHVkZWFkXCInO1xufSk7XG5cbnZhciBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA9IGZ1bmN0aW9uIChpdCwgcmVwbGFjZXIpIHtcbiAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gIHZhciAkcmVwbGFjZXIgPSBnZXRSZXBsYWNlckZ1bmN0aW9uKHJlcGxhY2VyKTtcbiAgaWYgKCFpc0NhbGxhYmxlKCRyZXBsYWNlcikgJiYgKGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gIGFyZ3NbMV0gPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIHNvbWUgb2xkIGltcGxlbWVudGF0aW9ucyAobGlrZSBXZWJLaXQpIGNvdWxkIHBhc3MgbnVtYmVycyBhcyBrZXlzXG4gICAgaWYgKGlzQ2FsbGFibGUoJHJlcGxhY2VyKSkgdmFsdWUgPSBjYWxsKCRyZXBsYWNlciwgdGhpcywgJFN0cmluZyhrZXkpLCB2YWx1ZSk7XG4gICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbiAgcmV0dXJuIGFwcGx5KCRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xufTtcblxudmFyIGZpeElsbEZvcm1lZCA9IGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0LCBzdHJpbmcpIHtcbiAgdmFyIHByZXYgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgLSAxKTtcbiAgdmFyIG5leHQgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgKyAxKTtcbiAgaWYgKChleGVjKGxvdywgbWF0Y2gpICYmICFleGVjKGhpLCBuZXh0KSkgfHwgKGV4ZWMoaGksIG1hdGNoKSAmJiAhZXhlYyhsb3csIHByZXYpKSkge1xuICAgIHJldHVybiAnXFxcXHUnICsgbnVtYmVyVG9TdHJpbmcoY2hhckNvZGVBdChtYXRjaCwgMCksIDE2KTtcbiAgfSByZXR1cm4gbWF0Y2g7XG59O1xuXG5pZiAoJHN0cmluZ2lmeSkge1xuICAvLyBgSlNPTi5zdHJpbmdpZnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24uc3RyaW5naWZ5XG4gICQoeyB0YXJnZXQ6ICdKU09OJywgc3RhdDogdHJ1ZSwgYXJpdHk6IDMsIGZvcmNlZDogV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIHx8IElMTF9GT1JNRURfVU5JQ09ERSB9LCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgICAgIHZhciByZXN1bHQgPSBhcHBseShXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPyBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA6ICRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xuICAgICAgcmV0dXJuIElMTF9GT1JNRURfVU5JQ09ERSAmJiB0eXBlb2YgcmVzdWx0ID09ICdzdHJpbmcnID8gcmVwbGFjZShyZXN1bHQsIHRlc3RlciwgZml4SWxsRm9ybWVkKSA6IHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxuLy8gVjggfiBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRk9SQ0VEID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5c3ltYm9sc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICB2YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gJGdldE93blByb3BlcnR5U3ltYm9scyh0b09iamVjdChpdCkpIDogW107XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNJdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmFzeW5jaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNJdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaGFzSW5zdGFuY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5oYXNpbnN0YW5jZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdoYXNJbnN0YW5jZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXNjb25jYXRzcHJlYWRhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuaXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hBbGxgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaGFsbFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaEFsbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucmVwbGFjZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnJlcGxhY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc2VhcmNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc2VhcmNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NlYXJjaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BlY2llc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwZWNpZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuc3BsaXRgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGxpdFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGxpdCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC50b1ByaW1pdGl2ZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvcHJpbWl0aXZlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9zdHJpbmd0YWdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2V0QnVpbHRJbignU3ltYm9sJyksICdTeW1ib2wnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnVuc2NvcGFibGVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudW5zY29wYWJsZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIEpTT05bQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wucmVwbGFjZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zcGxpdCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC51bnNjb3BhYmxlcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QudG8tc3RyaW5nLXRhZycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU3ltYm9sO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIE9iamVjdFByb3RvdHlwZSA9ICRPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gJE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChPKTtcbiAgaWYgKGhhc093bihvYmplY3QsIElFX1BST1RPKSkgcmV0dXJuIG9iamVjdFtJRV9QUk9UT107XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgaWYgKGlzQ2FsbGFibGUoY29uc3RydWN0b3IpICYmIG9iamVjdCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgJE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSAhaXNPYmplY3QoSXRlcmF0b3JQcm90b3R5cGUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgZGVmaW5lQnVpbHRJbihJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgYXJndW1lbnQgPT0gJ29iamVjdCcgfHwgaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuUFJPUEVSO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcblxuICAgIHN3aXRjaCAoS0lORCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgRU5UUklFUzogcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNDYWxsYWJsZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICAgICAgICAgIGRlZmluZUJ1aWx0SW4oQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkucHJvdG90eXBlLnsgdmFsdWVzLCBAQGl0ZXJhdG9yIH0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBERUZBVUxUID09PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgaWYgKCFJU19QVVJFICYmIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsICduYW1lJywgVkFMVUVTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIGNhbGwobmF0aXZlSXRlcmF0b3IsIHRoaXMpOyB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydCBhZGRpdGlvbmFsIG1ldGhvZHNcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBnZXRJdGVyYXRpb25NZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/IGRlZmF1bHRJdGVyYXRvciA6IGdldEl0ZXJhdGlvbk1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChFTlRSSUVTKVxuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChLRVkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIHx8ICEoS0VZIGluIEl0ZXJhYmxlUHJvdG90eXBlKSkge1xuICAgICAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5mb3IgKHZhciBDT0xMRUNUSU9OX05BTUUgaW4gRE9NSXRlcmFibGVzKSB7XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uUHJvdG90eXBlID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUgJiYgY2xhc3NvZihDb2xsZWN0aW9uUHJvdG90eXBlKSAhPT0gVE9fU1RSSU5HX1RBRykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCBDT0xMRUNUSU9OX05BTUUpO1xuICB9XG4gIEl0ZXJhdG9yc1tDT0xMRUNUSU9OX05BTUVdID0gSXRlcmF0b3JzLkFycmF5O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBNRVRBREFUQSA9IHdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLy8gRnVuY3Rpb24ucHJvdG90eXBlW0BAbWV0YWRhdGFdXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmlmIChGdW5jdGlvblByb3RvdHlwZVtNRVRBREFUQV0gPT09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShGdW5jdGlvblByb3RvdHlwZSwgTUVUQURBVEEsIHtcbiAgICB2YWx1ZTogbnVsbFxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jRGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFzeW5jLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNEaXNwb3NlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5kaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdkaXNwb3NlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvcnNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL3N5bWJvbCcpO1xuXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5mdW5jdGlvbi5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciBrZXlGb3IgPSBTeW1ib2wua2V5Rm9yO1xudmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbCB8fCBmdW5jdGlvbiBpc1JlZ2lzdGVyZWRTeW1ib2wodmFsdWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4ga2V5Rm9yKHRoaXNTeW1ib2xWYWx1ZSh2YWx1ZSkpICE9PSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzUmVnaXN0ZXJlZFN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtcmVnaXN0ZXJlZCcpO1xuXG4vLyBgU3ltYm9sLmlzUmVnaXN0ZXJlZFN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzUmVnaXN0ZXJlZFN5bWJvbDogaXNSZWdpc3RlcmVkU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbnZhciAkaXNXZWxsS25vd25TeW1ib2wgPSBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2w7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldEJ1aWx0SW4oJ09iamVjdCcsICdnZXRPd25Qcm9wZXJ0eU5hbWVzJyk7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG5mb3IgKHZhciBpID0gMCwgc3ltYm9sS2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKSwgc3ltYm9sS2V5c0xlbmd0aCA9IHN5bWJvbEtleXMubGVuZ3RoOyBpIDwgc3ltYm9sS2V5c0xlbmd0aDsgaSsrKSB7XG4gIC8vIHNvbWUgb2xkIGVuZ2luZXMgdGhyb3dzIG9uIGFjY2VzcyB0byBzb21lIGtleXMgbGlrZSBgYXJndW1lbnRzYCBvciBgY2FsbGVyYFxuICB0cnkge1xuICAgIHZhciBzeW1ib2xLZXkgPSBzeW1ib2xLZXlzW2ldO1xuICAgIGlmIChpc1N5bWJvbChTeW1ib2xbc3ltYm9sS2V5XSkpIHdlbGxLbm93blN5bWJvbChzeW1ib2xLZXkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25TeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzd2VsbGtub3duc3ltYm9sXG4vLyBXZSBzaG91bGQgcGF0Y2ggaXQgZm9yIG5ld2x5IGFkZGVkIHdlbGwta25vd24gc3ltYm9scy4gSWYgaXQncyBub3QgcmVxdWlyZWQsIHRoaXMgbW9kdWxlIGp1c3Qgd2lsbCBub3QgYmUgaW5qZWN0ZWRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNXZWxsS25vd25TeW1ib2wodmFsdWUpIHtcbiAgaWYgKCRpc1dlbGxLbm93blN5bWJvbCAmJiAkaXNXZWxsS25vd25TeW1ib2wodmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICB2YXIgc3ltYm9sID0gdGhpc1N5bWJvbFZhbHVlKHZhbHVlKTtcbiAgICBmb3IgKHZhciBqID0gMCwga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoOyBqIDwga2V5c0xlbmd0aDsgaisrKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxIC0tIHBvbHlmaWxsZWQgc3ltYm9scyBjYXNlXG4gICAgICBpZiAoV2VsbEtub3duU3ltYm9sc1N0b3JlW2tleXNbal1dID09IHN5bWJvbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmYWxzZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duU3ltYm9sOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGVyYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaGVyJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5vYnNlcnZhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkYCBtZXRob2Rcbi8vIG9ic29sZXRlIHZlcnNpb24gb2YgaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1JlZ2lzdGVyZWRTeW1ib2wnIH0sIHtcbiAgaXNSZWdpc3RlcmVkOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy13ZWxsLWtub3duJyk7XG5cbi8vIGBTeW1ib2wuaXNXZWxsS25vd25gIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIG5hbWU6ICdpc1dlbGxLbm93blN5bWJvbCcsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gIGlzV2VsbEtub3duOiBpc1dlbGxLbm93blN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wubWV0YWRhdGFLZXlgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1kZWNvcmF0b3ItbWV0YWRhdGFcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGFLZXknKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5wYXR0ZXJuTWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3BhdHRlcm5NYXRjaCcpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2VBbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQtc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bi1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZScpO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtd2VsbC1rbm93bicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLWtleScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnBhdHRlcm4tbWF0Y2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHBvaW50LCBmYWxzZSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvcicpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZignaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sL2l0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3N5bWJvbC9pdGVyYXRvcicpO1xuIiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX1N5bWJvbCRpdGVyYXRvciBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBfU3ltYm9sJGl0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBfU3ltYm9sICYmIG8gIT09IF9TeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufSIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ3RvUHJpbWl0aXZlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbC90by1wcmltaXRpdmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvdG8tcHJpbWl0aXZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sL3RvLXByaW1pdGl2ZScpO1xuIiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkdG9QcmltaXRpdmUgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbX1N5bWJvbCR0b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufSIsICJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIjtcbmltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodGFyZ2V0LCB0b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgX09iamVjdCRkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsICJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIjtcbmltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEMsIGFyZ3NMZW5ndGgsIGFyZ3MpIHtcbiAgaWYgKCFoYXNPd24oZmFjdG9yaWVzLCBhcmdzTGVuZ3RoKSkge1xuICAgIHZhciBsaXN0ID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSBsaXN0W2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgZmFjdG9yaWVzW2FyZ3NMZW5ndGhdID0gJEZ1bmN0aW9uKCdDLGEnLCAncmV0dXJuIG5ldyBDKCcgKyBqb2luKGxpc3QsICcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/ICRGdW5jdGlvbi5iaW5kIDogZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgRiA9IGFDYWxsYWJsZSh0aGlzKTtcbiAgdmFyIFByb3RvdHlwZSA9IEYucHJvdG90eXBlO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gZnVuY3Rpb24gYm91bmQoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gY29uY2F0KHBhcnRBcmdzLCBhcnJheVNsaWNlKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChGLCBhcmdzLmxlbmd0aCwgYXJncykgOiBGLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoUHJvdG90eXBlKSkgYm91bmRGdW5jdGlvbi5wcm90b3R5cGUgPSBQcm90b3R5cGU7XG4gIHJldHVybiBib3VuZEZ1bmN0aW9uO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gZGV0ZWN0aW9uXG4kKHsgdGFyZ2V0OiAnRnVuY3Rpb24nLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGdW5jdGlvbi5iaW5kICE9PSBiaW5kIH0sIHtcbiAgYmluZDogYmluZFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IsIE1FVEhPRCkge1xuICB2YXIgTmFtZXNwYWNlID0gcGF0aFtDT05TVFJVQ1RPUiArICdQcm90b3R5cGUnXTtcbiAgdmFyIHB1cmVNZXRob2QgPSBOYW1lc3BhY2UgJiYgTmFtZXNwYWNlW01FVEhPRF07XG4gIGlmIChwdXJlTWV0aG9kKSByZXR1cm4gcHVyZU1ldGhvZDtcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIE5hdGl2ZVByb3RvdHlwZSAmJiBOYXRpdmVQcm90b3R5cGVbTUVUSE9EXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0Z1bmN0aW9uJywgJ2JpbmQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vZnVuY3Rpb24vdmlydHVhbC9iaW5kJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmJpbmQ7XG4gIHJldHVybiBpdCA9PT0gRnVuY3Rpb25Qcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoRnVuY3Rpb25Qcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmRcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IHJlZHVjZSwgcmVkdWNlUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19SSUdIVCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c0xlbmd0aCwgbWVtbykge1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gSVNfUklHSFQgPyBsZW5ndGggLSAxIDogMDtcbiAgICB2YXIgaSA9IElTX1JJR0hUID8gLTEgOiAxO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPCAyKSB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgICBpbmRleCArPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBpZiAoSVNfUklHSFQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7SVNfUklHSFQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuICBsZWZ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3NvZihnbG9iYWwucHJvY2VzcykgPT09ICdwcm9jZXNzJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgQ0hST01FX1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbi8vIENocm9tZSA4MC04MiBoYXMgYSBjcml0aWNhbCBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNDk5ODJcbnZhciBDSFJPTUVfQlVHID0gIUlTX05PREUgJiYgQ0hST01FX1ZFUlNJT04gPiA3OSAmJiBDSFJPTUVfVkVSU0lPTiA8IDgzO1xudmFyIEZPUkNFRCA9IENIUk9NRV9CVUcgfHwgIWFycmF5TWV0aG9kSXNTdHJpY3QoJ3JlZHVjZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBsZW5ndGgsIGxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdyZWR1Y2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZWR1Y2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmVkdWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZWR1Y2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmVkdWNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZpbHRlcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbHRlcikgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maWx0ZXJcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5tYXAnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnbWFwJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvbWFwJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0Lm1hcDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUubWFwKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL21hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL21hcFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcblxuLy8gYEZsYXR0ZW5JbnRvQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBiaW5kKG1hcHBlciwgdGhpc0FyZykgOiBmYWxzZTtcbiAgdmFyIGVsZW1lbnQsIGVsZW1lbnRMZW47XG5cbiAgd2hpbGUgKHNvdXJjZUluZGV4IDwgc291cmNlTGVuKSB7XG4gICAgaWYgKHNvdXJjZUluZGV4IGluIHNvdXJjZSkge1xuICAgICAgZWxlbWVudCA9IG1hcEZuID8gbWFwRm4oc291cmNlW3NvdXJjZUluZGV4XSwgc291cmNlSW5kZXgsIG9yaWdpbmFsKSA6IHNvdXJjZVtzb3VyY2VJbmRleF07XG5cbiAgICAgIGlmIChkZXB0aCA+IDAgJiYgaXNBcnJheShlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50TGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoZWxlbWVudCk7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCBlbGVtZW50TGVuLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIodGFyZ2V0SW5kZXggKyAxKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZsYXRNYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmxhdG1hcFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIEE7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgQS5sZW5ndGggPSBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgMSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnVuc2NvcGFibGVzLmZsYXQtbWFwJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZsYXRNYXAnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mbGF0LW1hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5mbGF0TWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mbGF0TWFwKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZsYXQtbWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmxhdC1tYXBcIik7IiwgImltcG9ydCB7IERhdGFJbnRlcmZhY2UsIEV2ZW50Q2FsbGJhY2tzLCBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcblxuLyoqXG4gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVBpcGUge1xuICAvKipcbiAgICogVGFrZSBhbGwgaXRlbXMgZnJvbSB0aGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldywgdHJhbnNmb3JtIHRoZW0gYXNcbiAgICogY29uZmlndXJlZCBhbmQgdXBkYXRlIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBhbGwoKTogdGhpcztcblxuICAvKipcbiAgICogU3RhcnQgb2JzZXJ2aW5nIHRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LCB0cmFuc2Zvcm1pbmcgdGhlIGl0ZW1zXG4gICAqIGFuZCB1cGRhdGluZyB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBzb3VyY2UgZGF0YSBzZXQgd2lsbCBiZSBpZ25vcmVkLiBJZiB5b3UgZm9yXG4gICAqIGV4YW1wbGUgd2FudCB0byBwcm9jZXNzIGFsbCB0aGUgaXRlbXMgdGhhdCBhcmUgYWxyZWFkeSB0aGVyZSB1c2U6XG4gICAqIGBwaXBlLmFsbCgpLnN0YXJ0KClgLlxuICAgKi9cbiAgc3RhcnQoKTogdGhpcztcblxuICAvKipcbiAgICogU3RvcCBvYnNlcnZpbmcgdGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcsIHRyYW5zZm9ybWluZyB0aGUgaXRlbXNcbiAgICogYW5kIHVwZGF0aW5nIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBzdG9wKCk6IHRoaXM7XG59XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFQaXBlRmFjdG9yeSA9IEluc3RhbmNlVHlwZTx0eXBlb2YgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbj47XG5cbi8qKlxuICogQ3JlYXRlIG5ldyBkYXRhIHBpcGUuXG4gKlxuICogQHBhcmFtIGZyb20gLSBUaGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldy5cbiAqIEByZW1hcmtzXG4gKiBFeGFtcGxlIHVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIEFwcEl0ZW0ge1xuICogICB3aG9hbWk6IHN0cmluZztcbiAqICAgYXBwRGF0YTogdW5rbm93bjtcbiAqICAgdmlzRGF0YTogVmlzSXRlbTtcbiAqIH1cbiAqIGludGVyZmFjZSBWaXNJdGVtIHtcbiAqICAgaWQ6IG51bWJlcjtcbiAqICAgbGFiZWw6IHN0cmluZztcbiAqICAgY29sb3I6IHN0cmluZztcbiAqICAgeDogbnVtYmVyO1xuICogICB5OiBudW1iZXI7XG4gKiB9XG4gKlxuICogY29uc3QgZHMxID0gbmV3IERhdGFTZXQ8QXBwSXRlbSwgXCJ3aG9hbWlcIj4oW10sIHsgZmllbGRJZDogXCJ3aG9hbWlcIiB9KTtcbiAqIGNvbnN0IGRzMiA9IG5ldyBEYXRhU2V0PFZpc0l0ZW0sIFwiaWRcIj4oKTtcbiAqXG4gKiBjb25zdCBwaXBlID0gY3JlYXRlTmV3RGF0YVBpcGVGcm9tKGRzMSlcbiAqICAgLmZpbHRlcigoaXRlbSk6IGJvb2xlYW4gPT4gaXRlbS5lbmFibGVkID09PSB0cnVlKVxuICogICAubWFwPFZpc0l0ZW0sIFwiaWRcIj4oKGl0ZW0pOiBWaXNJdGVtID0+IGl0ZW0udmlzRGF0YSlcbiAqICAgLnRvKGRzMik7XG4gKlxuICogcGlwZS5zdGFydCgpO1xuICogYGBgXG4gKiBAcmV0dXJucyBBIGZhY3Rvcnkgd2hvc2UgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdEYXRhUGlwZUZyb208XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihmcm9tOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFNJLCBTUD4ge1xuICByZXR1cm4gbmV3IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24oZnJvbSk7XG59XG5cbnR5cGUgVHJhbnNmb3JtZXI8VD4gPSAoaW5wdXQ6IFRbXSkgPT4gVFtdO1xuXG4vKipcbiAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwaXBlLiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlIG9ubHkgdGhyb3VnaFxuICogYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFNJIC0gU291cmNlIGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gU1AgLSBTb3VyY2UgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICogQHR5cGVQYXJhbSBUUCAtIFRhcmdldCBpdGVtIHR5cGUncyBpZCBwcm9wZXJ0eSBuYW1lLlxuICovXG5jbGFzcyBTaW1wbGVEYXRhUGlwZTxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nLFxuICBUSSBleHRlbmRzIFBhcnRJdGVtPFRQPixcbiAgVFAgZXh0ZW5kcyBzdHJpbmdcbj4gaW1wbGVtZW50cyBEYXRhUGlwZVxue1xuICAvKipcbiAgICogQm91bmQgbGlzdGVuZXJzIGZvciB1c2Ugd2l0aCBgRGF0YUludGVyZmFjZVsnb24nIHwgJ29mZiddYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogRXZlbnRDYWxsYmFja3M8U0ksIFNQPiA9IHtcbiAgICBhZGQ6IHRoaXMuX2FkZC5iaW5kKHRoaXMpLFxuICAgIHJlbW92ZTogdGhpcy5fcmVtb3ZlLmJpbmQodGhpcyksXG4gICAgdXBkYXRlOiB0aGlzLl91cGRhdGUuYmluZCh0aGlzKSxcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZS5cbiAgICpcbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IHRoYXQgd2lsbCBiZSBvYnNlcnZlZC5cbiAgICogQHBhcmFtIF90cmFuc2Zvcm1lcnMgLSBBbiBhcnJheSBvZiB0cmFuc2Zvcm1pbmcgZnVuY3Rpb25zIHRvIGJlIHVzZWQgdG9cbiAgICogZmlsdGVyIG9yIHRyYW5zZm9ybSB0aGUgaXRlbXMgaW4gdGhlIHBpcGUuXG4gICAqIEBwYXJhbSBfdGFyZ2V0IC0gVGhlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiByZWFkb25seSBUcmFuc2Zvcm1lcjx1bmtub3duPltdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhcmdldDogRGF0YVNldDxUSSwgVFA+XG4gICkge31cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGFsbCgpOiB0aGlzIHtcbiAgICB0aGlzLl90YXJnZXQudXBkYXRlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQoKSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdGFydCgpOiB0aGlzIHtcbiAgICB0aGlzLl9zb3VyY2Uub24oXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9uKFwicmVtb3ZlXCIsIHRoaXMuX2xpc3RlbmVycy5yZW1vdmUpO1xuICAgIHRoaXMuX3NvdXJjZS5vbihcInVwZGF0ZVwiLCB0aGlzLl9saXN0ZW5lcnMudXBkYXRlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdG9wKCk6IHRoaXMge1xuICAgIHRoaXMuX3NvdXJjZS5vZmYoXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9mZihcInJlbW92ZVwiLCB0aGlzLl9saXN0ZW5lcnMucmVtb3ZlKTtcbiAgICB0aGlzLl9zb3VyY2Uub2ZmKFwidXBkYXRlXCIsIHRoaXMuX2xpc3RlbmVycy51cGRhdGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdGhlIHRyYW5zZm9ybWVycyB0byB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIFRoZSBpdGVtcyB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdHJhbnNmb3JtSXRlbXMoaXRlbXM6IHVua25vd25bXSk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtZXJzLnJlZHVjZSgoaXRlbXMsIHRyYW5zZm9ybSk6IHVua25vd25bXSA9PiB7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtKGl0ZW1zKTtcbiAgICB9LCBpdGVtcyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGFkZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBpZHMgb2YgdGhlIGFkZGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJhZGRcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcImFkZFwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5hZGQodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiB1cGRhdGUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSB1cGRhdGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJ1cGRhdGVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInVwZGF0ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC51cGRhdGUodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHJlbW92ZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBkYXRhIG9mIHRoZSByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJyZW1vdmVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInJlbW92ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5yZW1vdmUodGhpcy5fdHJhbnNmb3JtSXRlbXMocGF5bG9hZC5vbGREYXRhKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGlwZSBmYWN0b3J5LiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlXG4gKiBvbmx5IHRocm91Z2ggYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqL1xuY2xhc3MgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+IHtcbiAgLyoqXG4gICAqIEFycmF5IHRyYW5zZm9ybWVycyB1c2VkIHRvIHRyYW5zZm9ybSBpdGVtcyB3aXRoaW4gdGhlIHBpcGUuIFRoaXMgaXMgdHlwZWRcbiAgICogYXMgYW55IGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiBUcmFuc2Zvcm1lcjxhbnk+W10gPSBbXTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZSBmYWN0b3J5LiBUaGlzIGlzIGFuIGludGVybmFsIGNvbnN0cnVjdG9yIHRoYXRcbiAgICogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhpcyBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IGZvciB0aGlzIHBpcGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pIHt9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgZmlsdGVyaW5nIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGdpdmVuIGl0ZW1cbiAgICogc2hvdWxkIGJlIHBpcGVkIGFuZCBmYWxzZSBpZiBub3QuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZpbHRlcihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBib29sZWFuXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248U0ksIFNQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZpbHRlcihjYWxsYmFjaykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBlYWNoIHNvdXJjZSBpdGVtIHRvIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbS5cbiAgICogQHR5cGVQYXJhbSBUSSAtIFRhcmdldCBpdGVtIHR5cGUuXG4gICAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAgICogQHJldHVybnMgVGhpcyBmYWN0b3J5IGZvciBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgbWFwPFRJIGV4dGVuZHMgUGFydEl0ZW08VFA+LCBUUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIj4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gVElcbiAgKTogRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxUSSwgVFA+IHtcbiAgICB0aGlzLl90cmFuc2Zvcm1lcnMucHVzaCgoaW5wdXQpOiB1bmtub3duW10gPT4gaW5wdXQubWFwKGNhbGxiYWNrKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD47XG4gIH1cblxuICAvKipcbiAgICogTWFwIGVhY2ggc291cmNlIGl0ZW0gdG8gemVybyBvciBtb3JlIGl0ZW1zIG9mIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogYW4gYXJyYXkgb2YgY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbXMuXG4gICAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICAgKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZsYXRNYXA8VEkgZXh0ZW5kcyBQYXJ0SXRlbTxUUD4sIFRQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiPihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBUSVtdXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZsYXRNYXAoY2FsbGJhY2spKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IHRoaXMgcGlwZSB0byBnaXZlbiBkYXRhIHNldC5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBkYXRhIHNldCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMgZnJvbSB0aGlzIHBpcGUuXG4gICAqIEByZXR1cm5zIFRoZSBwaXBlIGNvbm5lY3RlZCBiZXR3ZWVuIGdpdmVuIGRhdGEgc2V0cyBhbmQgcGVyZm9ybWluZ1xuICAgKiBjb25maWd1cmVkIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBwcm9jZXNzZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgdG8odGFyZ2V0OiBEYXRhU2V0PFNJLCBTUD4pOiBEYXRhUGlwZSB7XG4gICAgcmV0dXJuIG5ldyBTaW1wbGVEYXRhUGlwZSh0aGlzLl9zb3VyY2UsIHRoaXMuX3RyYW5zZm9ybWVycywgdGFyZ2V0KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZyb20nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmZyb207XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvck1ldGhvZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi9zdGFibGUvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vYWN0dWFsL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9mdWxsL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmlzYXJyYXlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBpc0FycmF5OiBpc0FycmF5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5pc0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2FycmF5L2lzLWFycmF5Jyk7XG4iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggYW5kIFNhZmFyaSA8PSAxNS40LCBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5wdXNoJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3B1c2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9wdXNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnB1c2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnB1c2gpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcHVzaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3B1c2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9pbnN0YW5jZS9wdXNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9wdXNoJyk7XG4iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX3B1c2hJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcHVzaC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgX1N5bWJvbCAmJiBfZ2V0SXRlcmF0b3JNZXRob2QocikgfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChfcHVzaEluc3RhbmNlUHJvcGVydHkoYSkuY2FsbChhLCBlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufSIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIG5hdGl2ZVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKGlzQ29uc3RydWN0b3IoQ29uc3RydWN0b3IpICYmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQ29uc3RydWN0b3IucHJvdG90eXBlKSkpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KENvbnN0cnVjdG9yKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yW1NQRUNJRVNdO1xuICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IG51bGwpIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQ29uc3RydWN0b3IpKG1heChmaW4gLSBrLCAwKSk7XG4gICAgZm9yIChuID0gMDsgayA8IGZpbjsgaysrLCBuKyspIGlmIChrIGluIE8pIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zbGljZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNsaWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL3NsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvYXJyYXkvZnJvbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvYXJyYXkvZnJvbScpO1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufSIsICJpbXBvcnQgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5pbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIHZhciBfY29udGV4dDtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBfc2xpY2VJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pKS5jYWxsKF9jb250ZXh0LCA4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBfQXJyYXkkZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsICJpbXBvcnQgX0FycmF5JGlzQXJyYXkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoX0FycmF5JGlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn0iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBfU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIF9nZXRJdGVyYXRvck1ldGhvZChpdGVyKSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBfQXJyYXkkZnJvbShpdGVyKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aG91dEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVTcHJlYWQgZnJvbSBcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufSIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnY29uY2F0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvY29uY2F0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmNvbmNhdDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuY29uY2F0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2NvbmNhdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2NvbmNhdFwiKTsiLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zbGljZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xuXG4vLyBgUmVmbGVjdC5vd25LZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5vd25rZXlzXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBvd25LZXlzOiBvd25LZXlzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3Qub3duLWtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlJlZmxlY3Qub3duS2V5cztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcmVmbGVjdC9vd24ta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3JlZmxlY3Qvb3duLWtleXNcIik7IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXlcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3Qva2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9rZXlzXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICFTVFJJQ1RfTUVUSE9EID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9PSBmb3JFYWNoIH0sIHtcbiAgZm9yRWFjaDogZm9yRWFjaFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmb3JFYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZvckVhY2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciBuYXRpdmVSZXZlcnNlID0gdW5jdXJyeVRoaXMoW10ucmV2ZXJzZSk7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJldmVyc2Vcbi8vIGZpeCBmb3IgU2FmYXJpIDEyLjAgYnVnXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4Nzk0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTdHJpbmcodGVzdCkgPT09IFN0cmluZyh0ZXN0LnJldmVyc2UoKSkgfSwge1xuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnbiAtLSBkaXJ0eSBoYWNrXG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgcmV0dXJuIG5hdGl2ZVJldmVyc2UodGhpcyk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZScpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdyZXZlcnNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZXZlcnNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZXZlcnNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZXZlcnNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgUCkge1xuICBpZiAoIWRlbGV0ZSBPW1BdKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzcGxpY2UnKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNwbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zcGxpY2Vcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIHNwbGljZTogZnVuY3Rpb24gc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCAvKiAsIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFjdHVhbFN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpbnNlcnRDb3VudCwgYWN0dWFsRGVsZXRlQ291bnQsIEEsIGssIGZyb20sIHRvO1xuICAgIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgIGluc2VydENvdW50ID0gYWN0dWFsRGVsZXRlQ291bnQgPSAwO1xuICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgICBpbnNlcnRDb3VudCA9IDA7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IGxlbiAtIGFjdHVhbFN0YXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnNlcnRDb3VudCA9IGFyZ3VtZW50c0xlbmd0aCAtIDI7XG4gICAgICBhY3R1YWxEZWxldGVDb3VudCA9IG1pbihtYXgodG9JbnRlZ2VyT3JJbmZpbml0eShkZWxldGVDb3VudCksIDApLCBsZW4gLSBhY3R1YWxTdGFydCk7XG4gICAgfVxuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBpbnNlcnRDb3VudCAtIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIGFjdHVhbERlbGV0ZUNvdW50KTtcbiAgICBmb3IgKGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgZnJvbSA9IGFjdHVhbFN0YXJ0ICsgaztcbiAgICAgIGlmIChmcm9tIGluIE8pIGNyZWF0ZVByb3BlcnR5KEEsIGssIE9bZnJvbV0pO1xuICAgIH1cbiAgICBBLmxlbmd0aCA9IGFjdHVhbERlbGV0ZUNvdW50O1xuICAgIGlmIChpbnNlcnRDb3VudCA8IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBhY3R1YWxTdGFydDsgayA8IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50OyBrKyspIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudDtcbiAgICAgICAgdG8gPSBrICsgaW5zZXJ0Q291bnQ7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgICAgZm9yIChrID0gbGVuOyBrID4gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudDsgay0tKSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgayAtIDEpO1xuICAgIH0gZWxzZSBpZiAoaW5zZXJ0Q291bnQgPiBhY3R1YWxEZWxldGVDb3VudCkge1xuICAgICAgZm9yIChrID0gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsgPiBhY3R1YWxTdGFydDsgay0tKSB7XG4gICAgICAgIGZyb20gPSBrICsgYWN0dWFsRGVsZXRlQ291bnQgLSAxO1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudCAtIDE7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGVQcm9wZXJ0eU9yVGhyb3coTywgdG8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGsgPSAwOyBrIDwgaW5zZXJ0Q291bnQ7IGsrKykge1xuICAgICAgT1trICsgYWN0dWFsU3RhcnRdID0gYXJndW1lbnRzW2sgKyAyXTtcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudCk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NwbGljZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NwbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zcGxpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNwbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zcGxpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zcGxpY2VcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBzaG91bGQgaGF2ZSBjb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgKEVkZ2UgYnVnKVxuICBpZiAoREVTQ1JJUFRPUlMgJiYgJGFzc2lnbih7IGI6IDEgfSwgJGFzc2lnbihkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICdiJywge1xuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksIHsgYjogMiB9KSkuYiAhPT0gMSkgcmV0dXJuIHRydWU7XG4gIC8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3ltYm9sIC0tIHNhZmVcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnYXNzaWduIGRldGVjdGlvbicpO1xuICB2YXIgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW3N5bWJvbF0gPSA3O1xuICBhbHBoYWJldC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoY2hyKSB7IEJbY2hyXSA9IGNocjsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtzeW1ib2xdICE9PSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9PSBhbHBoYWJldDtcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG4gIHdoaWxlIChhcmd1bWVudHNMZW5ndGggPiBpbmRleCkge1xuICAgIHZhciBTID0gSW5kZXhlZE9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KG9iamVjdEtleXMoUyksIGdldE93blByb3BlcnR5U3ltYm9scyhTKSkgOiBvYmplY3RLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlLCBTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24nKTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGFyaXR5OiAyLCBmb3JjZWQ6IE9iamVjdC5hc3NpZ24gIT09IGFzc2lnbiB9LCB7XG4gIGFzc2lnbjogYXNzaWduXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5hc3NpZ247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9hc3NpZ24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvYXNzaWduXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBjcmVhdGU6IGNyZWF0ZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWpzb24gLS0gc2FmZVxuaWYgKCFwYXRoLkpTT04pIHBhdGguSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICByZXR1cm4gYXBwbHkocGF0aC5KU09OLnN0cmluZ2lmeSwgbnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvanNvbi9zdHJpbmdpZnlcIik7IiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBCdW4gPT0gJ2Z1bmN0aW9uJyAmJiBCdW4gJiYgdHlwZW9mIEJ1bi52ZXJzaW9uID09ICdzdHJpbmcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgRU5HSU5FX0lTX0JVTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnVuJyk7XG52YXIgVVNFUl9BR0VOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciBGdW5jdGlvbiA9IGdsb2JhbC5GdW5jdGlvbjtcbi8vIGRpcnR5IElFOS0gYW5kIEJ1biAwLjMuMC0gY2hlY2tzXG52YXIgV1JBUCA9IC9NU0lFIC5cXC4vLnRlc3QoVVNFUl9BR0VOVCkgfHwgRU5HSU5FX0lTX0JVTiAmJiAoZnVuY3Rpb24gKCkge1xuICB2YXIgdmVyc2lvbiA9IGdsb2JhbC5CdW4udmVyc2lvbi5zcGxpdCgnLicpO1xuICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPCAzIHx8IHZlcnNpb25bMF0gPT09ICcwJyAmJiAodmVyc2lvblsxXSA8IDMgfHwgdmVyc2lvblsxXSA9PT0gJzMnICYmIHZlcnNpb25bMl0gPT09ICcwJyk7XG59KSgpO1xuXG4vLyBJRTktIC8gQnVuIDAuMy4wLSBzZXRUaW1lb3V0IC8gc2V0SW50ZXJ2YWwgLyBzZXRJbW1lZGlhdGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvMTYzM1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBoYXNUaW1lQXJnKSB7XG4gIHZhciBmaXJzdFBhcmFtSW5kZXggPSBoYXNUaW1lQXJnID8gMiA6IDE7XG4gIHJldHVybiBXUkFQID8gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSkgPiBmaXJzdFBhcmFtSW5kZXg7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgcGFyYW1zID0gYm91bmRBcmdzID8gYXJyYXlTbGljZShhcmd1bWVudHMsIGZpcnN0UGFyYW1JbmRleCkgOiBbXTtcbiAgICB2YXIgY2FsbGJhY2sgPSBib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdGhpcywgcGFyYW1zKTtcbiAgICB9IDogZm47XG4gICAgcmV0dXJuIGhhc1RpbWVBcmcgPyBzY2hlZHVsZXIoY2FsbGJhY2ssIHRpbWVvdXQpIDogc2NoZWR1bGVyKGNhbGxiYWNrKTtcbiAgfSA6IHNjaGVkdWxlcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxudmFyIHNldEludGVydmFsID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0SW50ZXJ2YWwsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldGludGVydmFsXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRJbnRlcnZhbCAhPT0gc2V0SW50ZXJ2YWwgfSwge1xuICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWxcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRUaW1lb3V0ID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0VGltZW91dCwgdHJ1ZSk7XG5cbi8vIEJ1biAvIElFOS0gc2V0VGltZW91dCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRUaW1lb3V0ICE9PSBzZXRUaW1lb3V0IH0sIHtcbiAgc2V0VGltZW91dDogc2V0VGltZW91dFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRUaW1lb3V0O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXRcIik7IiwgImZ1bmN0aW9uIEVtaXR0ZXIob2JqZWN0KSB7XG5cdGlmIChvYmplY3QpIHtcblx0XHRyZXR1cm4gbWl4aW4ob2JqZWN0KTtcblx0fVxuXG5cdHRoaXMuX2NhbGxiYWNrcyA9IG5ldyBNYXAoKTtcbn1cblxuZnVuY3Rpb24gbWl4aW4ob2JqZWN0KSB7XG5cdE9iamVjdC5hc3NpZ24ob2JqZWN0LCBFbWl0dGVyLnByb3RvdHlwZSk7XG5cdG9iamVjdC5fY2FsbGJhY2tzID0gbmV3IE1hcCgpO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5FbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCkgPz8gW107XG5cdGNhbGxiYWNrcy5wdXNoKGxpc3RlbmVyKTtcblx0dGhpcy5fY2FsbGJhY2tzLnNldChldmVudCwgY2FsbGJhY2tzKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRjb25zdCBvbiA9ICguLi5hcmd1bWVudHNfKSA9PiB7XG5cdFx0dGhpcy5vZmYoZXZlbnQsIG9uKTtcblx0XHRsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0fTtcblxuXHRvbi5mbiA9IGxpc3RlbmVyO1xuXHR0aGlzLm9uKGV2ZW50LCBvbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCAmJiBsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5fY2FsbGJhY2tzLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2NhbGxiYWNrcy5kZWxldGUoZXZlbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCk7XG5cdGlmIChjYWxsYmFja3MpIHtcblx0XHRmb3IgKGNvbnN0IFtpbmRleCwgY2FsbGJhY2tdIG9mIGNhbGxiYWNrcy5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChjYWxsYmFjayA9PT0gbGlzdGVuZXIgfHwgY2FsbGJhY2suZm4gPT09IGxpc3RlbmVyKSB7XG5cdFx0XHRcdGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5fY2FsbGJhY2tzLmRlbGV0ZShldmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2NhbGxiYWNrcy5zZXQoZXZlbnQsIGNhbGxiYWNrcyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50LCAuLi5hcmd1bWVudHNfKSB7XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpO1xuXHRpZiAoY2FsbGJhY2tzKSB7XG5cdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiB0aGUgY2FsbGJhY2tzIGFycmF5IHRvIGF2b2lkIGlzc3VlcyBpZiBpdCdzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb25cblx0XHRjb25zdCBjYWxsYmFja3NDb3B5ID0gWy4uLmNhbGxiYWNrc107XG5cblx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrc0NvcHkpIHtcblx0XHRcdGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50c18pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLl9jYWxsYmFja3MuZ2V0KGV2ZW50KSA/PyBbXTtcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0aWYgKGV2ZW50KSB7XG5cdFx0cmV0dXJuIHRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XG5cdH1cblxuXHRsZXQgdG90YWxDb3VudCA9IDA7XG5cdGZvciAoY29uc3QgY2FsbGJhY2tzIG9mIHRoaXMuX2NhbGxiYWNrcy52YWx1ZXMoKSkge1xuXHRcdHRvdGFsQ291bnQgKz0gY2FsbGJhY2tzLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiB0b3RhbENvdW50O1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUuaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLmxpc3RlbmVyQ291bnQoZXZlbnQpID4gMDtcbn07XG5cbi8vIEFsaWFzZXNcbkVtaXR0ZXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vbjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub2ZmO1xuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gRW1pdHRlcjtcbn1cbiIsICIvKiEgSGFtbWVyLkpTIC0gdjIuMC4xNy1yYyAtIDIwMTktMTItMTZcbiAqIGh0dHA6Ly9uYXZlci5naXRodWIuaW8vZWdqc1xuICpcbiAqIEZvcmtlZCBCeSBOYXZlciBlZ2pzXG4gKiBDb3B5cmlnaHQgKGMpIGhhbW1lcmpzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKi9cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IG9iamVjdHNfdG9fYXNzaWduXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB0YXJnZXRcbiAqL1xudmFyIGFzc2lnbjtcblxuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF07XG5cbiAgICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSB7XG4gICAgICAgICAgICBvdXRwdXRbbmV4dEtleV0gPSBzb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcbn0gZWxzZSB7XG4gIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbnZhciBhc3NpZ24kMSA9IGFzc2lnbjtcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IHtcbiAgc3R5bGU6IHt9XG59IDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG52YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgIGFicyA9IE1hdGguYWJzO1xudmFyIG5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHByZWZpeGVkIHByb3BlcnR5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfSBwcmVmaXhlZFxuICovXG5cbmZ1bmN0aW9uIHByZWZpeGVkKG9iaiwgcHJvcGVydHkpIHtcbiAgdmFyIHByZWZpeDtcbiAgdmFyIHByb3A7XG4gIHZhciBjYW1lbFByb3AgPSBwcm9wZXJ0eVswXS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICBwcmVmaXggPSBWRU5ET1JfUFJFRklYRVNbaV07XG4gICAgcHJvcCA9IHByZWZpeCA/IHByZWZpeCArIGNhbWVsUHJvcCA6IHByb3BlcnR5O1xuXG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYywgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbnZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gIC8vIHdpbmRvdyBpcyB1bmRlZmluZWQgaW4gbm9kZS5qc1xuICB3aW4gPSB7fTtcbn0gZWxzZSB7XG4gIHdpbiA9IHdpbmRvdztcbn1cblxudmFyIFBSRUZJWEVEX1RPVUNIX0FDVElPTiA9IHByZWZpeGVkKFRFU1RfRUxFTUVOVC5zdHlsZSwgJ3RvdWNoQWN0aW9uJyk7XG52YXIgTkFUSVZFX1RPVUNIX0FDVElPTiA9IFBSRUZJWEVEX1RPVUNIX0FDVElPTiAhPT0gdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpIHtcbiAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRvdWNoTWFwID0ge307XG4gIHZhciBjc3NTdXBwb3J0cyA9IHdpbi5DU1MgJiYgd2luLkNTUy5zdXBwb3J0cztcbiAgWydhdXRvJywgJ21hbmlwdWxhdGlvbicsICdwYW4teScsICdwYW4teCcsICdwYW4teCBwYW4teScsICdub25lJ10uZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgLy8gYWxsIHZhbHVlcy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgSUUgMTAgYW5kIDExLlxuICAgIHJldHVybiB0b3VjaE1hcFt2YWxdID0gY3NzU3VwcG9ydHMgPyB3aW4uQ1NTLnN1cHBvcnRzKCd0b3VjaC1hY3Rpb24nLCB2YWwpIDogdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiB0b3VjaE1hcDtcbn1cblxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG5cbnZhciBUT1VDSF9BQ1RJT05fTk9ORSA9ICdub25lJztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1ggPSAncGFuLXgnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWSA9ICdwYW4teSc7XG52YXIgVE9VQ0hfQUNUSU9OX01BUCA9IGdldFRvdWNoQWN0aW9uUHJvcHMoKTtcblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcbnZhciBTVVBQT1JUX1RPVUNIID0gJ29udG91Y2hzdGFydCcgaW4gd2luO1xudmFyIFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMgPSBwcmVmaXhlZCh3aW4sICdQb2ludGVyRXZlbnQnKSAhPT0gdW5kZWZpbmVkO1xudmFyIFNVUFBPUlRfT05MWV9UT1VDSCA9IFNVUFBPUlRfVE9VQ0ggJiYgTU9CSUxFX1JFR0VYLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xudmFyIENPTVBVVEVfSU5URVJWQUwgPSAyNTtcbnZhciBJTlBVVF9TVEFSVCA9IDE7XG52YXIgSU5QVVRfTU9WRSA9IDI7XG52YXIgSU5QVVRfRU5EID0gNDtcbnZhciBJTlBVVF9DQU5DRUwgPSA4O1xudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG52YXIgRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fTEVGVCB8IERJUkVDVElPTl9SSUdIVDtcbnZhciBESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVVAgfCBESVJFQ1RJT05fRE9XTjtcbnZhciBESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUw7XG52YXIgUFJPUFNfWFkgPSBbJ3gnLCAneSddO1xudmFyIFBST1BTX0NMSUVOVF9YWSA9IFsnY2xpZW50WCcsICdjbGllbnRZJ107XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdhbGsgb2JqZWN0cyBhbmQgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gIHZhciBpO1xuXG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9iai5mb3JFYWNoKSB7XG4gICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICB9IGVsc2UgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBvYmoubGVuZ3RoKSB7XG4gICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpIGluIG9iaikge1xuICAgICAgb2JqLmhhc093blByb3BlcnR5KGkpICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBsZXQgYSBib29sZWFuIHZhbHVlIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IG11c3QgcmV0dXJuIGEgYm9vbGVhblxuICogdGhpcyBmaXJzdCBpdGVtIGluIGFyZ3Mgd2lsbCBiZSB1c2VkIGFzIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IHZhbFxuICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFRZUEVfRlVOQ1RJT04pIHtcbiAgICByZXR1cm4gdmFsLmFwcGx5KGFyZ3MgPyBhcmdzWzBdIHx8IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzbWFsbCBpbmRleE9mIHdyYXBwZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaW5TdHIoc3RyLCBmaW5kKSB7XG4gIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3aGVuIHRoZSB0b3VjaEFjdGlvbnMgYXJlIGNvbGxlY3RlZCB0aGV5IGFyZSBub3QgYSB2YWxpZCB2YWx1ZSwgc28gd2UgbmVlZCB0byBjbGVhbiB0aGluZ3MgdXAuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuXG5mdW5jdGlvbiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zKSB7XG4gIC8vIG5vbmVcbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfVxuXG4gIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpOyAvLyBpZiBib3RoIHBhbi14IGFuZCBwYW4teSBhcmUgc2V0IChkaWZmZXJlbnQgcmVjb2duaXplcnNcbiAgLy8gZm9yIGRpZmZlcmVudCBkaXJlY3Rpb25zLCBlLmcuIGhvcml6b250YWwgcGFuIGJ1dCB2ZXJ0aWNhbCBzd2lwZT8pXG4gIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAvLyByZWNvZ25pemVycyB3aWxsIHdvcmssIHNpbmNlIHRoZSBicm93c2VyIHdvdWxkIGhhbmRsZSBhbGwgcGFubmluZ1xuXG4gIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH0gLy8gcGFuLXggT1IgcGFuLXlcblxuXG4gIGlmIChoYXNQYW5YIHx8IGhhc1BhblkpIHtcbiAgICByZXR1cm4gaGFzUGFuWCA/IFRPVUNIX0FDVElPTl9QQU5fWCA6IFRPVUNIX0FDVElPTl9QQU5fWTtcbiAgfSAvLyBtYW5pcHVsYXRpb25cblxuXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OO1xuICB9XG5cbiAgcmV0dXJuIFRPVUNIX0FDVElPTl9BVVRPO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBBY3Rpb25cbiAqIHNldHMgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IG9yIHVzZXMgdGhlIGpzIGFsdGVybmF0aXZlXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIFRvdWNoQWN0aW9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG91Y2hBY3Rpb24obWFuYWdlciwgdmFsdWUpIHtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2V0KHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaEFjdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIGZpbmQgb3V0IHRoZSB0b3VjaC1hY3Rpb24gYnkgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKHZhbHVlID09PSBUT1VDSF9BQ1RJT05fQ09NUFVURSkge1xuICAgICAgdmFsdWUgPSB0aGlzLmNvbXB1dGUoKTtcbiAgICB9XG5cbiAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICoganVzdCByZS1zZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjb21wdXRlIHRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IGJhc2VkIG9uIHRoZSByZWNvZ25pemVyJ3Mgc2V0dGluZ3NcbiAgICogQHJldHVybnMge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8uY29tcHV0ZSA9IGZ1bmN0aW9uIGNvbXB1dGUoKSB7XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICBlYWNoKHRoaXMubWFuYWdlci5yZWNvZ25pemVycywgZnVuY3Rpb24gKHJlY29nbml6ZXIpIHtcbiAgICAgIGlmIChib29sT3JGbihyZWNvZ25pemVyLm9wdGlvbnMuZW5hYmxlLCBbcmVjb2duaXplcl0pKSB7XG4gICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zLmpvaW4oJyAnKSk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gZWFjaCBpbnB1dCBjeWNsZSBhbmQgcHJvdmlkZXMgdGhlIHByZXZlbnRpbmcgb2YgdGhlIGJyb3dzZXIgYmVoYXZpb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnREZWZhdWx0cyA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhpbnB1dCkge1xuICAgIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5vZmZzZXREaXJlY3Rpb247IC8vIGlmIHRoZSB0b3VjaCBhY3Rpb24gZGlkIHByZXZlbnRlZCBvbmNlIHRoaXMgc2Vzc2lvblxuXG4gICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWV07XG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWF07XG5cbiAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgLy8gZG8gbm90IHByZXZlbnQgZGVmYXVsdHMgaWYgdGhpcyBpcyBhIHRhcCBnZXN0dXJlXG4gICAgICB2YXIgaXNUYXBQb2ludGVyID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSAxO1xuICAgICAgdmFyIGlzVGFwTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IDI7XG4gICAgICB2YXIgaXNUYXBUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCAyNTA7XG5cbiAgICAgIGlmIChpc1RhcFBvaW50ZXIgJiYgaXNUYXBNb3ZlbWVudCAmJiBpc1RhcFRvdWNoVGltZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgLy8gYHBhbi14IHBhbi15YCBtZWFucyBicm93c2VyIGhhbmRsZXMgYWxsIHNjcm9sbGluZy9wYW5uaW5nLCBkbyBub3QgcHJldmVudFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChoYXNOb25lIHx8IGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwgfHwgaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZlbnRTcmMoc3JjRXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGwgcHJldmVudERlZmF1bHQgdG8gcHJldmVudCB0aGUgYnJvd3NlcidzIGRlZmF1bHQgYmVoYXZpb3IgKHNjcm9sbGluZyBpbiBtb3N0IGNhc2VzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudFNyYyA9IGZ1bmN0aW9uIHByZXZlbnRTcmMoc3JjRXZlbnQpIHtcbiAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoQWN0aW9uO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBjZW50ZXIgb2YgYWxsIHRoZSBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gcG9pbnRlcnNcbiAqIEByZXR1cm4ge09iamVjdH0gY2VudGVyIGNvbnRhaW5zIGB4YCBhbmQgYHlgIHByb3BlcnRpZXNcbiAqL1xuXG5mdW5jdGlvbiBnZXRDZW50ZXIocG9pbnRlcnMpIHtcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBubyBuZWVkIHRvIGxvb3Agd2hlbiBvbmx5IG9uZSB0b3VjaFxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgfTtcbiAgfVxuXG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgIHggKz0gcG9pbnRlcnNbaV0uY2xpZW50WDtcbiAgICB5ICs9IHBvaW50ZXJzW2ldLmNsaWVudFk7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4IC8gcG9pbnRlcnNMZW5ndGgpLFxuICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIGEgc2ltcGxlIGNsb25lIGZyb20gdGhlIGlucHV0IHVzZWQgZm9yIHN0b3JhZ2Ugb2YgZmlyc3RJbnB1dCBhbmQgZmlyc3RNdWx0aXBsZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBjbG9uZWRJbnB1dERhdGFcbiAqL1xuXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAvLyBtYWtlIGEgc2ltcGxlIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgYSByZWZlcmVuY2UgaWYgd2UgZG9uJ3RcbiAgLy8gd2Ugb25seSBuZWVkIGNsaWVudFhZIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gIHZhciBwb2ludGVycyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBpbnB1dC5wb2ludGVycy5sZW5ndGgpIHtcbiAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICB9O1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGltZVN0YW1wOiBub3coKSxcbiAgICBwb2ludGVyczogcG9pbnRlcnMsXG4gICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgIGRlbHRhWDogaW5wdXQuZGVsdGFYLFxuICAgIGRlbHRhWTogaW5wdXQuZGVsdGFZXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gcDEge3gsIHl9XG4gKiBAcGFyYW0ge09iamVjdH0gcDIge3gsIHl9XG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIHR3byBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IHAxXG4gKiBAcGFyYW0ge09iamVjdH0gcDJcbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRBbmdsZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KSAqIDE4MCAvIE1hdGguUEk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgZGlyZWN0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpcmVjdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICB9XG5cbiAgaWYgKGFicyh4KSA+PSBhYnMoeSkpIHtcbiAgICByZXR1cm4geCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgfVxuXG4gIHJldHVybiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyOyAvLyBsZXQgeyBvZmZzZXREZWx0YTpvZmZzZXQgPSB7fSwgcHJldkRlbHRhID0ge30sIHByZXZJbnB1dCA9IHt9IH0gPSBzZXNzaW9uO1xuICAvLyBqc2NzIHRocm93aW5nIGVycm9yIG9uIGRlZmFsdXQgZGVzdHJ1Y3R1cmVkIHZhbHVlcyBhbmQgd2l0aG91dCBkZWZhdWx0cyB0ZXN0cyBmYWlsXG5cbiAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gIHZhciBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZJbnB1dCA9IHNlc3Npb24ucHJldklucHV0IHx8IHt9O1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhID0ge1xuICAgICAgeDogcHJldklucHV0LmRlbHRhWCB8fCAwLFxuICAgICAgeTogcHJldklucHV0LmRlbHRhWSB8fCAwXG4gICAgfTtcbiAgICBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhID0ge1xuICAgICAgeDogY2VudGVyLngsXG4gICAgICB5OiBjZW50ZXIueVxuICAgIH07XG4gIH1cblxuICBpbnB1dC5kZWx0YVggPSBwcmV2RGVsdGEueCArIChjZW50ZXIueCAtIG9mZnNldC54KTtcbiAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgeTogeSAvIGRlbHRhVGltZSB8fCAwXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgc2NhbGUgZmFjdG9yIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBubyBzY2FsZSBpcyAxLCBhbmQgZ29lcyBkb3duIHRvIDAgd2hlbiBwaW5jaGVkIHRvZ2V0aGVyLCBhbmQgYmlnZ2VyIHdoZW4gcGluY2hlZCBvdXRcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gc2NhbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRTY2FsZShzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXREaXN0YW5jZShlbmRbMF0sIGVuZFsxXSwgUFJPUFNfQ0xJRU5UX1hZKSAvIGdldERpc3RhbmNlKHN0YXJ0WzBdLCBzdGFydFsxXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSByb3RhdGlvbiBkZWdyZWVzIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHJvdGF0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0QW5nbGUoZW5kWzFdLCBlbmRbMF0sIFBST1BTX0NMSUVOVF9YWSkgKyBnZXRBbmdsZShzdGFydFsxXSwgc3RhcnRbMF0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHZlbG9jaXR5IGlzIGNhbGN1bGF0ZWQgZXZlcnkgeCBtc1xuICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgbGFzdCA9IHNlc3Npb24ubGFzdEludGVydmFsIHx8IGlucHV0O1xuICB2YXIgZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gbGFzdC50aW1lU3RhbXA7XG4gIHZhciB2ZWxvY2l0eTtcbiAgdmFyIHZlbG9jaXR5WDtcbiAgdmFyIHZlbG9jaXR5WTtcbiAgdmFyIGRpcmVjdGlvbjtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9DQU5DRUwgJiYgKGRlbHRhVGltZSA+IENPTVBVVEVfSU5URVJWQUwgfHwgbGFzdC52ZWxvY2l0eSA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHZhciBkZWx0YVggPSBpbnB1dC5kZWx0YVggLSBsYXN0LmRlbHRhWDtcbiAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG4gICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICB2ZWxvY2l0eVggPSB2Lng7XG4gICAgdmVsb2NpdHlZID0gdi55O1xuICAgIHZlbG9jaXR5ID0gYWJzKHYueCkgPiBhYnModi55KSA/IHYueCA6IHYueTtcbiAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgIHZlbG9jaXR5ID0gbGFzdC52ZWxvY2l0eTtcbiAgICB2ZWxvY2l0eVggPSBsYXN0LnZlbG9jaXR5WDtcbiAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICBkaXJlY3Rpb24gPSBsYXN0LmRpcmVjdGlvbjtcbiAgfVxuXG4gIGlucHV0LnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIGlucHV0LnZlbG9jaXR5WCA9IHZlbG9jaXR5WDtcbiAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG59XG5cbi8qKlxuKiBAcHJpdmF0ZVxuICogZXh0ZW5kIHRoZSBkYXRhIHdpdGggc29tZSB1c2FibGUgcHJvcGVydGllcyBsaWtlIHNjYWxlLCByb3RhdGUsIHZlbG9jaXR5IGV0Y1xuICogQHBhcmFtIHtPYmplY3R9IG1hbmFnZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpIHtcbiAgdmFyIHNlc3Npb24gPSBtYW5hZ2VyLnNlc3Npb247XG4gIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cblxuICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgIHNlc3Npb24uZmlyc3RJbnB1dCA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSAvLyB0byBjb21wdXRlIHNjYWxlIGFuZCByb3RhdGlvbiB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBtdWx0aXBsZSB0b3VjaGVzXG5cblxuICBpZiAocG9pbnRlcnNMZW5ndGggPiAxICYmICFzZXNzaW9uLmZpcnN0TXVsdGlwbGUpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gZWxzZSBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBmaXJzdElucHV0ID0gc2Vzc2lvbi5maXJzdElucHV0LFxuICAgICAgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgdmFyIG9mZnNldENlbnRlciA9IGZpcnN0TXVsdGlwbGUgPyBmaXJzdE11bHRpcGxlLmNlbnRlciA6IGZpcnN0SW5wdXQuY2VudGVyO1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgaW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gIGlucHV0LmRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGZpcnN0SW5wdXQudGltZVN0YW1wO1xuICBpbnB1dC5hbmdsZSA9IGdldEFuZ2xlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgaW5wdXQuZGlzdGFuY2UgPSBnZXREaXN0YW5jZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KTtcbiAgaW5wdXQub2Zmc2V0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgdmFyIG92ZXJhbGxWZWxvY2l0eSA9IGdldFZlbG9jaXR5KGlucHV0LmRlbHRhVGltZSwgaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYID0gb3ZlcmFsbFZlbG9jaXR5Lng7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5ID0gYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkgPyBvdmVyYWxsVmVsb2NpdHkueCA6IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5zY2FsZSA9IGZpcnN0TXVsdGlwbGUgPyBnZXRTY2FsZShmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAxO1xuICBpbnB1dC5yb3RhdGlvbiA9IGZpcnN0TXVsdGlwbGUgPyBnZXRSb3RhdGlvbihmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAwO1xuICBpbnB1dC5tYXhQb2ludGVycyA9ICFzZXNzaW9uLnByZXZJbnB1dCA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA+IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnM7XG4gIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCk7IC8vIGZpbmQgdGhlIGNvcnJlY3QgdGFyZ2V0XG5cbiAgdmFyIHRhcmdldCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gIHZhciBzcmNFdmVudFRhcmdldDtcblxuICBpZiAoc3JjRXZlbnQuY29tcG9zZWRQYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5jb21wb3NlZFBhdGgoKVswXTtcbiAgfSBlbHNlIGlmIChzcmNFdmVudC5wYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5wYXRoWzBdO1xuICB9IGVsc2Uge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgaWYgKGhhc1BhcmVudChzcmNFdmVudFRhcmdldCwgdGFyZ2V0KSkge1xuICAgIHRhcmdldCA9IHNyY0V2ZW50VGFyZ2V0O1xuICB9XG5cbiAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBoYW5kbGUgaW5wdXQgZXZlbnRzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gIHZhciBwb2ludGVyc0xlbiA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGNoYW5nZWRQb2ludGVyc0xlbiA9IGlucHV0LmNoYW5nZWRQb2ludGVycy5sZW5ndGg7XG4gIHZhciBpc0ZpcnN0ID0gZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIHZhciBpc0ZpbmFsID0gZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIGlucHV0LmlzRmlyc3QgPSAhIWlzRmlyc3Q7XG4gIGlucHV0LmlzRmluYWwgPSAhIWlzRmluYWw7XG5cbiAgaWYgKGlzRmlyc3QpIHtcbiAgICBtYW5hZ2VyLnNlc3Npb24gPSB7fTtcbiAgfSAvLyBzb3VyY2UgZXZlbnQgaXMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2YgdGhlIGRvbUV2ZW50c1xuICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcblxuXG4gIGlucHV0LmV2ZW50VHlwZSA9IGV2ZW50VHlwZTsgLy8gY29tcHV0ZSBzY2FsZSwgcm90YXRpb24gZXRjXG5cbiAgY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCk7IC8vIGVtaXQgc2VjcmV0IGV2ZW50XG5cbiAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG4gIG1hbmFnZXIucmVjb2duaXplKGlucHV0KTtcbiAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzcGxpdCBzdHJpbmcgb24gd2hpdGVzcGFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge0FycmF5fSB3b3Jkc1xuICovXG5mdW5jdGlvbiBzcGxpdFN0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltKCkuc3BsaXQoL1xccysvZyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZEV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZWxlbWVudDtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93IHx8IHdpbmRvdztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIElucHV0KG1hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICB0aGlzLnRhcmdldCA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dFRhcmdldDsgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuXG4gICAgdGhpcy5kb21IYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICBpZiAoYm9vbE9yRm4obWFuYWdlci5vcHRpb25zLmVuYWJsZSwgW21hbmFnZXJdKSkge1xuICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2hvdWxkIGhhbmRsZSB0aGUgaW5wdXRFdmVudCBkYXRhIGFuZCB0cmlnZ2VyIHRoZSBjYWxsYmFja1xuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5ldkVsICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiBhZGRFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4gSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICBpZiAoc3JjLmluZGV4T2YgJiYgIWZpbmRCeUtleSkge1xuICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgIGlmIChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCB8fCAhZmluZEJ5S2V5ICYmIHNyY1tpXSA9PT0gZmluZCkge1xuICAgICAgICAvLyBkbyBub3QgdXNlID09PSBoZXJlLCB0ZXN0IGZhaWxzXG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgcG9pbnRlcmRvd246IElOUFVUX1NUQVJULFxuICBwb2ludGVybW92ZTogSU5QVVRfTU9WRSxcbiAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gIHBvaW50ZXJjYW5jZWw6IElOUFVUX0NBTkNFTCxcbiAgcG9pbnRlcm91dDogSU5QVVRfQ0FOQ0VMXG59OyAvLyBpbiBJRTEwIHRoZSBwb2ludGVyIHR5cGVzIGlzIGRlZmluZWQgYXMgYW4gZW51bVxuXG52YXIgSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSA9IHtcbiAgMjogSU5QVVRfVFlQRV9UT1VDSCxcbiAgMzogSU5QVVRfVFlQRV9QRU4sXG4gIDQ6IElOUFVUX1RZUEVfTU9VU0UsXG4gIDU6IElOUFVUX1RZUEVfS0lORUNUIC8vIHNlZSBodHRwczovL3R3aXR0ZXIuY29tL2phY29icm9zc2kvc3RhdHVzLzQ4MDU5NjQzODQ4OTg5MDgxNlxuXG59O1xudmFyIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAncG9pbnRlcmRvd24nO1xudmFyIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdwb2ludGVybW92ZSBwb2ludGVydXAgcG9pbnRlcmNhbmNlbCc7IC8vIElFMTAgaGFzIHByZWZpeGVkIHN1cHBvcnQsIGFuZCBjYXNlLXNlbnNpdGl2ZVxuXG5pZiAod2luLk1TUG9pbnRlckV2ZW50ICYmICF3aW4uUG9pbnRlckV2ZW50KSB7XG4gIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAnTVNQb2ludGVyRG93bic7XG4gIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBQb2ludGVyIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cblxudmFyIFBvaW50ZXJFdmVudElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUG9pbnRlckV2ZW50SW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdG9yZSA9IF90aGlzLm1hbmFnZXIuc2Vzc2lvbi5wb2ludGVyRXZlbnRzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZhbHNlO1xuICAgIHZhciBldmVudFR5cGVOb3JtYWxpemVkID0gZXYudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ21zJywgJycpO1xuICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICB2YXIgcG9pbnRlclR5cGUgPSBJRTEwX1BPSU5URVJfVFlQRV9FTlVNW2V2LnBvaW50ZXJUeXBlXSB8fCBldi5wb2ludGVyVHlwZTtcbiAgICB2YXIgaXNUb3VjaCA9IHBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIOyAvLyBnZXQgaW5kZXggb2YgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG4gICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTsgLy8gc3RhcnQgYW5kIG1vdXNlIG11c3QgYmUgZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChldi5idXR0b24gPT09IDAgfHwgaXNUb3VjaCkpIHtcbiAgICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgc3RvcmVJbmRleCA9IHN0b3JlLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgfSAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcblxuXG4gICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG5cbiAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuXG4gICAgaWYgKHJlbW92ZVBvaW50ZXIpIHtcbiAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBzdG9yZVxuICAgICAgc3RvcmUuc3BsaWNlKHN0b3JlSW5kZXgsIDEpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUG9pbnRlckV2ZW50SW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaiwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHVuaXF1ZSBhcnJheSB3aXRoIG9iamVjdHMgYmFzZWQgb24gYSBrZXkgKGxpa2UgJ2lkJykgb3IganVzdCBieSB0aGUgYXJyYXkncyB2YWx1ZVxuICogQHBhcmFtIHtBcnJheX0gc3JjIFt7aWQ6MX0se2lkOjJ9LHtpZDoxfV1cbiAqIEBwYXJhbSB7U3RyaW5nfSBba2V5XVxuICogQHBhcmFtIHtCb29sZWFufSBbc29ydD1GYWxzZV1cbiAqIEByZXR1cm5zIHtBcnJheX0gW3tpZDoxfSx7aWQ6Mn1dXG4gKi9cblxuZnVuY3Rpb24gdW5pcXVlQXJyYXkoc3JjLCBrZXksIHNvcnQpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgdmFyIHZhbCA9IGtleSA/IHNyY1tpXVtrZXldIDogc3JjW2ldO1xuXG4gICAgaWYgKGluQXJyYXkodmFsdWVzLCB2YWwpIDwgMCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHNyY1tpXSk7XG4gICAgfVxuXG4gICAgdmFsdWVzW2ldID0gdmFsO1xuICAgIGkrKztcbiAgfVxuXG4gIGlmIChzb3J0KSB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYVtrZXldID4gYltrZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNdWx0aS11c2VyIHRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIFRvdWNoSW5wdXQucHJvdG90eXBlLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMudGFyZ2V0SWRzID0ge307IC8vIHRoaXMuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgIHZhciB0b3VjaGVzID0gZ2V0VG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTtcblxuICAgIGlmICghdG91Y2hlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gZ2V0VG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciB0YXJnZXRJZHMgPSB0aGlzLnRhcmdldElkczsgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcblxuICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgdGFyZ2V0SWRzW2FsbFRvdWNoZXNbMF0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgIHJldHVybiBbYWxsVG91Y2hlcywgYWxsVG91Y2hlc107XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIHRhcmdldFRvdWNoZXM7XG4gIHZhciBjaGFuZ2VkVG91Y2hlcyA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXTtcbiAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0OyAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG5cbiAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uICh0b3VjaCkge1xuICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICB9KTsgLy8gY29sbGVjdCB0b3VjaGVzXG5cbiAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICBpKys7XG4gICAgfVxuICB9IC8vIGZpbHRlciBjaGFuZ2VkIHRvdWNoZXMgdG8gb25seSBjb250YWluIHRvdWNoZXMgdGhhdCBleGlzdCBpbiB0aGUgY29sbGVjdGVkIHRhcmdldCBpZHNcblxuXG4gIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgY2hhbmdlZFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgfSAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIGlmICghY2hhbmdlZFRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIFsvLyBtZXJnZSB0YXJnZXRUb3VjaGVzIHdpdGggY2hhbmdlZFRhcmdldFRvdWNoZXMgc28gaXQgY29udGFpbnMgQUxMIHRvdWNoZXMsIGluY2x1ZGluZyAnZW5kJyBhbmQgJ2NhbmNlbCdcbiAgdW5pcXVlQXJyYXkodGFyZ2V0VG91Y2hlcy5jb25jYXQoY2hhbmdlZFRhcmdldFRvdWNoZXMpLCAnaWRlbnRpZmllcicsIHRydWUpLCBjaGFuZ2VkVGFyZ2V0VG91Y2hlc107XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gIG1vdXNlZG93bjogSU5QVVRfU1RBUlQsXG4gIG1vdXNlbW92ZTogSU5QVVRfTU9WRSxcbiAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xudmFyIE1PVVNFX0VMRU1FTlRfRVZFTlRTID0gJ21vdXNlZG93bic7XG52YXIgTU9VU0VfV0lORE9XX0VWRU5UUyA9ICdtb3VzZW1vdmUgbW91c2V1cCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gTU9VU0VfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBNT1VTRV9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5wcmVzc2VkID0gZmFsc2U7IC8vIG1vdXNlZG93biBzdGF0ZVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBvbiBzdGFydCB3ZSB3YW50IHRvIGhhdmUgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX01PVkUgJiYgZXYud2hpY2ggIT09IDEpIHtcbiAgICAgIGV2ZW50VHlwZSA9IElOUFVUX0VORDtcbiAgICB9IC8vIG1vdXNlIG11c3QgYmUgZG93blxuXG5cbiAgICBpZiAoIXRoaXMucHJlc3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTW91c2VJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDb21iaW5lZCB0b3VjaCBhbmQgbW91c2UgaW5wdXRcbiAqXG4gKiBUb3VjaCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhlbiBtb3VzZSwgYW5kIHdoaWxlIHRvdWNoaW5nIG5vIG1vdXNlIGV2ZW50cyBhcmUgYWxsb3dlZC5cbiAqIFRoaXMgYmVjYXVzZSB0b3VjaCBkZXZpY2VzIGFsc28gZW1pdCBtb3VzZSBldmVudHMgd2hpbGUgZG9pbmcgYSB0b3VjaC5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIERFRFVQX1RJTUVPVVQgPSAyNTAwO1xudmFyIERFRFVQX0RJU1RBTkNFID0gMjU7XG5cbmZ1bmN0aW9uIHNldExhc3RUb3VjaChldmVudERhdGEpIHtcbiAgdmFyIF9ldmVudERhdGEkY2hhbmdlZFBvaSA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnMsXG4gICAgICB0b3VjaCA9IF9ldmVudERhdGEkY2hhbmdlZFBvaVswXTtcblxuICBpZiAodG91Y2guaWRlbnRpZmllciA9PT0gdGhpcy5wcmltYXJ5VG91Y2gpIHtcbiAgICB2YXIgbGFzdFRvdWNoID0ge1xuICAgICAgeDogdG91Y2guY2xpZW50WCxcbiAgICAgIHk6IHRvdWNoLmNsaWVudFlcbiAgICB9O1xuICAgIHZhciBsdHMgPSB0aGlzLmxhc3RUb3VjaGVzO1xuICAgIHRoaXMubGFzdFRvdWNoZXMucHVzaChsYXN0VG91Y2gpO1xuXG4gICAgdmFyIHJlbW92ZUxhc3RUb3VjaCA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RUb3VjaCgpIHtcbiAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcblxuICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICB2YXIgeCA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRYO1xuICB2YXIgeSA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRZO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYXN0VG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0ID0gdGhpcy5sYXN0VG91Y2hlc1tpXTtcbiAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KTtcbiAgICB2YXIgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcblxuICAgIGlmIChkeCA8PSBERURVUF9ESVNUQU5DRSAmJiBkeSA8PSBERURVUF9ESVNUQU5DRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgVG91Y2hNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIFRvdWNoTW91c2VJbnB1dCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9JbnB1dCkge1xuICAgIF9pbmhlcml0c0xvb3NlKFRvdWNoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICAgIGZ1bmN0aW9uIFRvdWNoTW91c2VJbnB1dChfbWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfSW5wdXQuY2FsbCh0aGlzLCBfbWFuYWdlciwgY2FsbGJhY2spIHx8IHRoaXM7XG5cbiAgICAgIF90aGlzLmhhbmRsZXIgPSBmdW5jdGlvbiAobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIO1xuICAgICAgICB2YXIgaXNNb3VzZSA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9NT1VTRTtcblxuICAgICAgICBpZiAoaXNNb3VzZSAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuXG5cbiAgICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgICByZWNvcmRUb3VjaGVzLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RGF0YSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLm1vdXNlID0gbmV3IE1vdXNlSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgICAgX3RoaXMubGFzdFRvdWNoZXMgPSBbXTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBoYW5kbGUgbW91c2UgYW5kIHRvdWNoIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0RXZlbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb3VjaE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgdGhpcy5tb3VzZS5kZXN0cm95KCk7XG4gICAgfTtcblxuICAgIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG4gIH0oSW5wdXQpO1xuXG4gIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBjYWxsZWQgYnkgdGhlIE1hbmFnZXIgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gIHZhciBUeXBlOyAvLyBsZXQgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIHZhciBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgaWYgKGlucHV0Q2xhc3MpIHtcbiAgICBUeXBlID0gaW5wdXRDbGFzcztcbiAgfSBlbHNlIGlmIChTVVBQT1JUX1BPSU5URVJfRVZFTlRTKSB7XG4gICAgVHlwZSA9IFBvaW50ZXJFdmVudElucHV0O1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfT05MWV9UT1VDSCkge1xuICAgIFR5cGUgPSBUb3VjaElucHV0O1xuICB9IGVsc2UgaWYgKCFTVVBQT1JUX1RPVUNIKSB7XG4gICAgVHlwZSA9IE1vdXNlSW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgVHlwZSA9IFRvdWNoTW91c2VJbnB1dDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZm4gb24gZWFjaCBlbnRyeVxuICogaWYgaXQgYWludCBhbiBhcnJheSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGhpbmcuXG4gKiB0aGlzIGlzIHVzZWQgYnkgYWxsIHRoZSBtZXRob2RzIHRoYXQgYWNjZXB0IGEgc2luZ2xlIGFuZCBhcnJheSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7KnxBcnJheX0gYXJnXG4gKiBAcGFyYW0ge1N0cmluZ30gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGludm9rZUFycmF5QXJnKGFyZywgZm4sIGNvbnRleHQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIGVhY2goYXJnLCBjb250ZXh0W2ZuXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVuaXF1ZSBpZFxuICogQHJldHVybnMge251bWJlcn0gdW5pcXVlSWRcbiAqL1xudmFyIF91bmlxdWVJZCA9IDE7XG5mdW5jdGlvbiB1bmlxdWVJZCgpIHtcbiAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSByZWNvZ25pemVyIGJ5IG5hbWUgaWYgaXQgaXMgYm91bmQgdG8gYSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSBvdGhlclJlY29nbml6ZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICogQHJldHVybnMge1JlY29nbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCByZWNvZ25pemVyKSB7XG4gIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuXG4gIGlmIChtYW5hZ2VyKSB7XG4gICAgcmV0dXJuIG1hbmFnZXIuZ2V0KG90aGVyUmVjb2duaXplcik7XG4gIH1cblxuICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1c2FibGUgc3RyaW5nLCB1c2VkIGFzIGV2ZW50IHBvc3RmaXhcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IHN0YXRlXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdGF0ZVxuICovXG5cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gIGlmIChzdGF0ZSAmIFNUQVRFX0NBTkNFTExFRCkge1xuICAgIHJldHVybiAnY2FuY2VsJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0VOREVEKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQ0hBTkdFRCkge1xuICAgIHJldHVybiAnbW92ZSc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9CRUdBTikge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyIGZsb3cgZXhwbGFpbmVkOyAqXG4gKiBBbGwgcmVjb2duaXplcnMgaGF2ZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBQT1NTSUJMRSB3aGVuIGEgaW5wdXQgc2Vzc2lvbiBzdGFydHMuXG4gKiBUaGUgZGVmaW5pdGlvbiBvZiBhIGlucHV0IHNlc3Npb24gaXMgZnJvbSB0aGUgZmlyc3QgaW5wdXQgdW50aWwgdGhlIGxhc3QgaW5wdXQsIHdpdGggYWxsIGl0J3MgbW92ZW1lbnQgaW4gaXQuICpcbiAqIEV4YW1wbGUgc2Vzc2lvbiBmb3IgbW91c2UtaW5wdXQ6IG1vdXNlZG93biAtPiBtb3VzZW1vdmUgLT4gbW91c2V1cFxuICpcbiAqIE9uIGVhY2ggcmVjb2duaXppbmcgY3ljbGUgKHNlZSBNYW5hZ2VyLnJlY29nbml6ZSkgdGhlIC5yZWNvZ25pemUoKSBtZXRob2QgaXMgZXhlY3V0ZWRcbiAqIHdoaWNoIGRldGVybWluZXMgd2l0aCBzdGF0ZSBpdCBzaG91bGQgYmUuXG4gKlxuICogSWYgdGhlIHJlY29nbml6ZXIgaGFzIHRoZSBzdGF0ZSBGQUlMRUQsIENBTkNFTExFRCBvciBSRUNPR05JWkVEIChlcXVhbHMgRU5ERUQpLCBpdCBpcyByZXNldCB0b1xuICogUE9TU0lCTEUgdG8gZ2l2ZSBpdCBhbm90aGVyIGNoYW5nZSBvbiB0aGUgbmV4dCBjeWNsZS5cbiAqXG4gKiAgICAgICAgICAgICAgIFBvc3NpYmxlXG4gKiAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgKy0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgKy0tLS0tKy0tLS0tKyAgICAgICAgICAgICAgIHxcbiAqICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHxcbiAqICAgRmFpbGVkICAgICAgQ2FuY2VsbGVkICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgUmVjb2duaXplZCAgICAgICBCZWdhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kZWQvUmVjb2duaXplZFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXJcbiAqIEV2ZXJ5IHJlY29nbml6ZXIgbmVlZHMgdG8gZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuXG52YXIgUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7XG4gICAgICBlbmFibGU6IHRydWVcbiAgICB9LCBvcHRpb25zKTtcbiAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsOyAvLyBkZWZhdWx0IGlzIGVuYWJsZSB0cnVlXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgdGhpcy5zaW11bHRhbmVvdXMgPSB7fTtcbiAgICB0aGlzLnJlcXVpcmVGYWlsID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG5cbiAgICB0aGlzLm1hbmFnZXIgJiYgdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiByZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzaW11bHRhbmVvdXMgPSB0aGlzLnNpbXVsdGFuZW91cztcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoIXNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdKSB7XG4gICAgICBzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSA9IG90aGVyUmVjb2duaXplcjtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZWNvZ25pemVXaXRoKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgc2ltdWx0YW5lb3VzIGxpbmsuIGl0IGRvZXNudCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gZHJvcFJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICBkZWxldGUgdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZXIgY2FuIG9ubHkgcnVuIHdoZW4gYW4gb3RoZXIgaXMgZmFpbGluZ1xuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIHJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgcmVxdWlyZUZhaWx1cmUgbGluay4gaXQgZG9lcyBub3QgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiBkcm9wUmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgdmFyIGluZGV4ID0gaW5BcnJheSh0aGlzLnJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhcyByZXF1aXJlIGZhaWx1cmVzIGJvb2xlYW5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmhhc1JlcXVpcmVGYWlsdXJlcyA9IGZ1bmN0aW9uIGhhc1JlcXVpcmVGYWlsdXJlcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaWYgdGhlIHJlY29nbml6ZXIgY2FuIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5SZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gY2FuUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gISF0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogWW91IHNob3VsZCB1c2UgYHRyeUVtaXRgIGluc3RlYWQgb2YgYGVtaXRgIGRpcmVjdGx5IHRvIGNoZWNrXG4gICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgc2VsZi5tYW5hZ2VyLmVtaXQoZXZlbnQsIGlucHV0KTtcbiAgICB9IC8vICdwYW5zdGFydCcgYW5kICdwYW5tb3ZlJ1xuXG5cbiAgICBpZiAoc3RhdGUgPCBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cblxuICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgaWYgKGlucHV0LmFkZGl0aW9uYWxFdmVudCkge1xuICAgICAgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgfSAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuXG5cbiAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAqIGlmIHRydWUsIGl0IGVtaXRzIGEgZ2VzdHVyZSBldmVudCxcbiAgICogb3RoZXJ3aXNlLCBzZXR1cCB0aGUgc3RhdGUgdG8gRkFJTEVELlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8udHJ5RW1pdCA9IGZ1bmN0aW9uIHRyeUVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgIH0gLy8gaXQncyBmYWlsaW5nIGFueXdheVxuXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FuIHdlIGVtaXQ/XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5FbWl0ID0gZnVuY3Rpb24gY2FuRW1pdCgpIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoKSB7XG4gICAgICBpZiAoISh0aGlzLnJlcXVpcmVGYWlsW2ldLnN0YXRlICYgKFNUQVRFX0ZBSUxFRCB8IFNUQVRFX1BPU1NJQkxFKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAvLyBzbyB3ZSBjYW4gY2hhbmdlIHRoZSBpbnB1dERhdGEgd2l0aG91dCBtZXNzaW5nIHVwIHRoZSBvdGhlciByZWNvZ25pemVyc1xuICAgIHZhciBpbnB1dERhdGFDbG9uZSA9IGFzc2lnbiQxKHt9LCBpbnB1dERhdGEpOyAvLyBpcyBpcyBlbmFibGVkIGFuZCBhbGxvdyByZWNvZ25pemluZz9cblxuICAgIGlmICghYm9vbE9yRm4odGhpcy5vcHRpb25zLmVuYWJsZSwgW3RoaXMsIGlucHV0RGF0YUNsb25lXSkpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyByZXNldCB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZFxuXG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9SRUNPR05JWkVEIHwgU1RBVEVfQ0FOQ0VMTEVEIHwgU1RBVEVfRkFJTEVEKSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpOyAvLyB0aGUgcmVjb2duaXplciBoYXMgcmVjb2duaXplZCBhIGdlc3R1cmVcbiAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCB8IFNUQVRFX0NBTkNFTExFRCkpIHtcbiAgICAgIHRoaXMudHJ5RW1pdChpbnB1dERhdGFDbG9uZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgcmVjb2duaXplclxuICAgKiB0aGUgYWN0dWFsIHJlY29nbml6aW5nIGhhcHBlbnMgaW4gdGhpcyBtZXRob2RcbiAgICogQHZpcnR1YWxcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKiBAcmV0dXJucyB7Y29uc3RhbnR9IFNUQVRFXG4gICAqL1xuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dERhdGEpIHt9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHByZWZlcnJlZCB0b3VjaC1hY3Rpb25cbiAgICogQHZpcnR1YWxcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cblxuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsZWQgd2hlbiB0aGUgZ2VzdHVyZSBpc24ndCBhbGxvd2VkIHRvIHJlY29nbml6ZVxuICAgKiBsaWtlIHdoZW4gYW5vdGhlciBpcyBiZWluZyByZWNvZ25pemVkIG9yIGl0IGlzIGRpc2FibGVkXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7fTtcblxuICByZXR1cm4gUmVjb2duaXplcjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQSB0YXAgaXMgcmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvaW5nIGEgc21hbGwgdGFwL2NsaWNrLiBNdWx0aXBsZSB0YXBzIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgb2NjdXJcbiAqIGJldHdlZW4gdGhlIGdpdmVuIGludGVydmFsIGFuZCBwb3NpdGlvbi4gVGhlIGRlbGF5IG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvZ25pemUgbXVsdGktdGFwcyB3aXRob3V0IGZpcmluZ1xuICogYSBzaW5nbGUgdGFwLlxuICpcbiAqIFRoZSBldmVudERhdGEgZnJvbSB0aGUgZW1pdHRlZCBldmVudCBjb250YWlucyB0aGUgcHJvcGVydHkgYHRhcENvdW50YCwgd2hpY2ggY29udGFpbnMgdGhlIGFtb3VudCBvZlxuICogbXVsdGktdGFwcyBiZWluZyByZWNvZ25pemVkLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFRhcFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFRhcFJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBUYXBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAndGFwJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGFwczogMSxcbiAgICAgIGludGVydmFsOiAzMDAsXG4gICAgICAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgdGltZTogMjUwLFxuICAgICAgLy8gbWF4IHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgZG93biAobGlrZSBmaW5nZXIgb24gdGhlIHNjcmVlbilcbiAgICAgIHRocmVzaG9sZDogOSxcbiAgICAgIC8vIGEgbWluaW1hbCBtb3ZlbWVudCBpcyBvaywgYnV0IGtlZXAgaXQgbG93XG4gICAgICBwb3NUaHJlc2hvbGQ6IDEwXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7IC8vIHByZXZpb3VzIHRpbWUgYW5kIGNlbnRlcixcbiAgICAvLyB1c2VkIGZvciB0YXAgY291bnRpbmdcblxuICAgIF90aGlzLnBUaW1lID0gZmFsc2U7XG4gICAgX3RoaXMucENlbnRlciA9IGZhbHNlO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICBfdGhpcy5jb3VudCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRhcFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTl07XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiB0aGlzLmNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgIH0gLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cblxuICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsaWRJbnRlcnZhbCA9IHRoaXMucFRpbWUgPyBpbnB1dC50aW1lU3RhbXAgLSB0aGlzLnBUaW1lIDwgb3B0aW9ucy5pbnRlcnZhbCA6IHRydWU7XG4gICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG4gICAgICB0aGlzLnBUaW1lID0gaW5wdXQudGltZVN0YW1wO1xuICAgICAgdGhpcy5wQ2VudGVyID0gaW5wdXQuY2VudGVyO1xuXG4gICAgICBpZiAoIXZhbGlkTXVsdGlUYXAgfHwgIXZhbGlkSW50ZXJ2YWwpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG5cbiAgICAgIHZhciB0YXBDb3VudCA9IHRoaXMuY291bnQgJSBvcHRpb25zLnRhcHM7XG5cbiAgICAgIGlmICh0YXBDb3VudCA9PT0gMCkge1xuICAgICAgICAvLyBubyBmYWlsaW5nIHJlcXVpcmVtZW50cywgaW1tZWRpYXRlbHkgdHJpZ2dlciB0aGUgdGFwIGV2ZW50XG4gICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZUZhaWx1cmVzKCkpIHtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgICAgICB9LCBvcHRpb25zLmludGVydmFsKTtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5mYWlsVGltZW91dCA9IGZ1bmN0aW9uIGZhaWxUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHRoaXMuX2lucHV0LnRhcENvdW50ID0gdGhpcy5jb3VudDtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVGFwUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBBdHRyUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoQXR0clJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBBdHRyUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBBdHRyUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgcmV0dXJuIG9wdGlvblBvaW50ZXJzID09PSAwIHx8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9uUG9pbnRlcnM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHZhciBldmVudFR5cGUgPSBpbnB1dC5ldmVudFR5cGU7XG4gICAgdmFyIGlzUmVjb2duaXplZCA9IHN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCk7XG4gICAgdmFyIGlzVmFsaWQgPSB0aGlzLmF0dHJUZXN0KGlucHV0KTsgLy8gb24gY2FuY2VsIGlucHV0IGFuZCB3ZSd2ZSByZWNvZ25pemVkIGJlZm9yZSwgcmV0dXJuIFNUQVRFX0NBTkNFTExFRFxuXG4gICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgIH0gZWxzZSBpZiAoaXNSZWNvZ25pemVkIHx8IGlzVmFsaWQpIHtcbiAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgcmV0dXJuIEF0dHJSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge2NvbnN0YW50fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZGlyZWN0aW9uU3RyKGRpcmVjdGlvbikge1xuICBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fRE9XTikge1xuICAgIHJldHVybiAnZG93bic7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fVVApIHtcbiAgICByZXR1cm4gJ3VwJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgcmV0dXJuICdsZWZ0JztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9SSUdIVCkge1xuICAgIHJldHVybiAncmlnaHQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQYW5cbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGFuZCBtb3ZlZCBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBhblJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQYW5SZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBhblJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLnBYID0gbnVsbDtcbiAgICBfdGhpcy5wWSA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBhblJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciBhY3Rpb25zID0gW107XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9O1xuXG4gIF9wcm90by5kaXJlY3Rpb25UZXN0ID0gZnVuY3Rpb24gZGlyZWN0aW9uVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBoYXNNb3ZlZCA9IHRydWU7XG4gICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0LmRpcmVjdGlvbjtcbiAgICB2YXIgeCA9IGlucHV0LmRlbHRhWDtcbiAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTsgLy8gbG9jayB0byBheGlzP1xuXG4gICAgaWYgKCEoZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb24pKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICBkaXJlY3Rpb24gPSB4ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgICAgICBoYXNNb3ZlZCA9IHggIT09IHRoaXMucFg7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFYKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHkgPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG4gICAgICAgIGhhc01vdmVkID0geSAhPT0gdGhpcy5wWTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gaGFzTW92ZWQgJiYgZGlzdGFuY2UgPiBvcHRpb25zLnRocmVzaG9sZCAmJiBkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBBdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKCAvLyByZXBsYWNlIHdpdGggYSBzdXBlciBjYWxsXG4gICAgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOIHx8ICEodGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKSAmJiB0aGlzLmRpcmVjdGlvblRlc3QoaW5wdXQpKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgIHRoaXMucFkgPSBpbnB1dC5kZWx0YVk7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5kaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGFuUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTd2lwZVxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIG1vdmluZyBmYXN0ICh2ZWxvY2l0eSksIHdpdGggZW5vdWdoIGRpc3RhbmNlIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgU3dpcGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpcGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFN3aXBlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICB2ZWxvY2l0eTogMC4zLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpcGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciB2ZWxvY2l0eTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiAoRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiBkaXJlY3Rpb24gJiBpbnB1dC5vZmZzZXREaXJlY3Rpb24gJiYgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmIGlucHV0Lm1heFBvaW50ZXJzID09PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiYgYWJzKHZlbG9jaXR5KSA+IHRoaXMub3B0aW9ucy52ZWxvY2l0eSAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQ7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5vZmZzZXREaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uLCBpbnB1dCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXBlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQaW5jaFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQaW5jaFJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGluY2hSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGluY2gnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQaW5jaFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnNjYWxlIC0gMSkgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBpbmNoUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFJvdGF0ZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShSb3RhdGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdyb3RhdGUnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSb3RhdGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5yb3RhdGlvbikgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgcmV0dXJuIFJvdGF0ZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUHJlc3NcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGZvciB4IG1zIHdpdGhvdXQgYW55IG1vdmVtZW50LlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFByZXNzUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUHJlc3NSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUHJlc3NSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0aW1lOiAyNTEsXG4gICAgICAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgdGhyZXNob2xkOiA5XG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQcmVzc1JlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX0FVVE9dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cbiAgICBpZiAoIXZhbGlkTW92ZW1lbnQgfHwgIXZhbGlkUG9pbnRlcnMgfHwgaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgIH0sIG9wdGlvbnMudGltZSk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpbnB1dCAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIFwidXBcIiwgaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUHJlc3NSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IGlmIERPTSBldmVudHMgYXJlIGJlaW5nIHRyaWdnZXJlZC5cbiAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkb21FdmVudHM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICogV2hlbiBzZXQgdG8gYGNvbXB1dGVgIGl0IHdpbGwgbWFnaWNhbGx5IHNldCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgYWRkZWQgcmVjb2duaXplcnMuXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICovXG4gIHRvdWNoQWN0aW9uOiBUT1VDSF9BQ1RJT05fQ09NUFVURSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGVuYWJsZTogdHJ1ZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgKiBDaGFuZ2UgdGhlIHBhcmVudCBpbnB1dCB0YXJnZXQgZWxlbWVudC5cbiAgICogSWYgTnVsbCwgdGhlbiBpdCBpcyBiZWluZyBzZXQgdGhlIHRvIG1haW4gZWxlbWVudC5cbiAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBmb3JjZSBhbiBpbnB1dCBjbGFzc1xuICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRDbGFzczogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICogQWRkIHRoZW0gdG8gdGhpcyBtZXRob2QgYW5kIHRoZXkgd2lsbCBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyLlxuICAgKiBAbmFtZXNwYWNlXG4gICAqL1xuICBjc3NQcm9wczoge1xuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGV4dCBzZWxlY3Rpb24gdG8gaW1wcm92ZSB0aGUgZHJhZ2dpbmcgZ2VzdHVyZS4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlclNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGUgdGhlIFdpbmRvd3MgUGhvbmUgZ3JpcHBlcnMgd2hlbiBwcmVzc2luZyBhbiBlbGVtZW50LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAqIE9uIGlPUywgd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQgc3VjaCBhcyBhIGxpbmssIFNhZmFyaSBkaXNwbGF5c1xuICAgICAqIGEgY2FsbG91dCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rLiBUaGlzIHByb3BlcnR5IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGF0IGNhbGxvdXQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaENhbGxvdXQ6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB6b29taW5nIGlzIGVuYWJsZWQuIFVzZWQgYnkgSUUxMD5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIGNvbnRlbnRab29taW5nOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlckRyYWc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBPdmVycmlkZXMgdGhlIGhpZ2hsaWdodCBjb2xvciBzaG93biB3aGVuIHRoZSB1c2VyIHRhcHMgYSBsaW5rIG9yIGEgSmF2YVNjcmlwdFxuICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdyZ2JhKDAsMCwwLDApJ1xuICAgICAqL1xuICAgIHRhcEhpZ2hsaWdodENvbG9yOiBcInJnYmEoMCwwLDAsMClcIlxuICB9XG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogRGVmYXVsdCByZWNvZ25pemVyIHNldHVwIHdoZW4gY2FsbGluZyBgSGFtbWVyKClgXG4gKiBXaGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIgdGhlc2Ugd2lsbCBiZSBza2lwcGVkLlxuICogVGhpcyBpcyBzZXBhcmF0ZWQgd2l0aCBvdGhlciBkZWZhdWx0cyBiZWNhdXNlIG9mIHRyZWUtc2hha2luZy5cbiAqIEB0eXBlIHtBcnJheX1cbiAqL1xuXG52YXIgcHJlc2V0ID0gW1tSb3RhdGVSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn1dLCBbUGluY2hSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn0sIFsncm90YXRlJ11dLCBbU3dpcGVSZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn1dLCBbUGFuUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59LCBbJ3N3aXBlJ11dLCBbVGFwUmVjb2duaXplcl0sIFtUYXBSZWNvZ25pemVyLCB7XG4gIGV2ZW50OiAnZG91YmxldGFwJyxcbiAgdGFwczogMlxufSwgWyd0YXAnXV0sIFtQcmVzc1JlY29nbml6ZXJdXTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZC9yZW1vdmUgdGhlIGNzcyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gbWFuYWdlci5vcHRpb25zLmNzc1Byb3BzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWRkXG4gKi9cblxuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gIHZhciBlbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gIGlmICghZWxlbWVudC5zdHlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcm9wO1xuICBlYWNoKG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wcywgZnVuY3Rpb24gKHZhbHVlLCBuYW1lKSB7XG4gICAgcHJvcCA9IHByZWZpeGVkKGVsZW1lbnQuc3R5bGUsIG5hbWUpO1xuXG4gICAgaWYgKGFkZCkge1xuICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdIHx8IFwiXCI7XG4gICAgfVxuICB9KTtcblxuICBpZiAoIWFkZCkge1xuICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSkge1xuICB2YXIgZ2VzdHVyZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgZ2VzdHVyZUV2ZW50LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgZGF0YS50YXJnZXQuZGlzcGF0Y2hFdmVudChnZXN0dXJlRXZlbnQpO1xufVxuLyoqXG4qIEBwcml2YXRlXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG5cbnZhciBNYW5hZ2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMub3B0aW9ucyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMucmVjb2duaXplcnMgPSBbXTtcbiAgICB0aGlzLm9sZENzc1Byb3BzID0ge307XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmlucHV0ID0gY3JlYXRlSW5wdXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnRvdWNoQWN0aW9uID0gbmV3IFRvdWNoQWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG4gICAgZWFjaCh0aGlzLm9wdGlvbnMucmVjb2duaXplcnMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgcmVjb2duaXplciA9IF90aGlzLmFkZChuZXcgaXRlbVswXShpdGVtWzFdKSk7XG5cbiAgICAgIGl0ZW1bMl0gJiYgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKGl0ZW1bMl0pO1xuICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gT3B0aW9ucyB0aGF0IG5lZWQgYSBsaXR0bGUgbW9yZSBzZXR1cFxuXG4gICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc3RvcCByZWNvZ25pemluZyBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBUaGlzIHNlc3Npb24gd2lsbCBiZSBkaXNjYXJkZWQsIHdoZW4gYSBuZXcgW2lucHV0XXN0YXJ0IGV2ZW50IGlzIGZpcmVkLlxuICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VdXG4gICAqL1xuXG5cbiAgX3Byb3RvLnN0b3AgPSBmdW5jdGlvbiBzdG9wKGZvcmNlKSB7XG4gICAgdGhpcy5zZXNzaW9uLnN0b3BwZWQgPSBmb3JjZSA/IEZPUkNFRF9TVE9QIDogU1RPUDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJ1biB0aGUgcmVjb2duaXplcnMhXG4gICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICogaXQgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHJlY29nbml6ZXJzIGFuZCB0cmllcyB0byBkZXRlY3QgdGhlIGdlc3R1cmUgdGhhdCBpcyBiZWluZyBtYWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuXG4gICAgaWYgKHNlc3Npb24uc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcnVuIHRoZSB0b3VjaC1hY3Rpb24gcG9seWZpbGxcblxuXG4gICAgdGhpcy50b3VjaEFjdGlvbi5wcmV2ZW50RGVmYXVsdHMoaW5wdXREYXRhKTtcbiAgICB2YXIgcmVjb2duaXplcjtcbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzOyAvLyB0aGlzIGhvbGRzIHRoZSByZWNvZ25pemVyIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAvLyBzbyB0aGUgcmVjb2duaXplcidzIHN0YXRlIG5lZWRzIHRvIGJlIEJFR0FOLCBDSEFOR0VELCBFTkRFRCBvciBSRUNPR05JWkVEXG4gICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuXG4gICAgdmFyIGN1clJlY29nbml6ZXIgPSBzZXNzaW9uLmN1clJlY29nbml6ZXI7IC8vIHJlc2V0IHdoZW4gdGhlIGxhc3QgcmVjb2duaXplciBpcyByZWNvZ25pemVkXG4gICAgLy8gb3Igd2hlbiB3ZSdyZSBpbiBhIG5ldyBzZXNzaW9uXG5cbiAgICBpZiAoIWN1clJlY29nbml6ZXIgfHwgY3VyUmVjb2duaXplciAmJiBjdXJSZWNvZ25pemVyLnN0YXRlICYgU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICAgIGN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07IC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG5cbiAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQgIT09IEZPUkNFRF9TVE9QICYmICggLy8gMVxuICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PT0gY3VyUmVjb2duaXplciB8fCAvLyAyXG4gICAgICByZWNvZ25pemVyLmNhblJlY29nbml6ZVdpdGgoY3VyUmVjb2duaXplcikpKSB7XG4gICAgICAgIC8vIDNcbiAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29nbml6ZXIucmVzZXQoKTtcbiAgICAgIH0gLy8gaWYgdGhlIHJlY29nbml6ZXIgaGFzIGJlZW4gcmVjb2duaXppbmcgdGhlIGlucHV0IGFzIGEgdmFsaWQgZ2VzdHVyZSwgd2Ugd2FudCB0byBzdG9yZSB0aGlzIG9uZSBhcyB0aGVcbiAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIHJlY29nbml6ZXIuIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgcmVjb2duaXplclxuXG5cbiAgICAgIGlmICghY3VyUmVjb2duaXplciAmJiByZWNvZ25pemVyLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEKSkge1xuICAgICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgICBjdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGdldCBhIHJlY29nbml6ZXIgYnkgaXRzIGV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TnVsbH1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHJlY29nbml6ZXIpIHtcbiAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgIH1cblxuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVjb2duaXplcnNbaV0ub3B0aW9ucy5ldmVudCA9PT0gcmVjb2duaXplcikge1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcnNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBhZGQgYSByZWNvZ25pemVyIHRvIHRoZSBtYW5hZ2VyXG4gICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE1hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwiYWRkXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IC8vIHJlbW92ZSBleGlzdGluZ1xuXG5cbiAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLnJlbW92ZShleGlzdGluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWNvZ25pemVycy5wdXNoKHJlY29nbml6ZXIpO1xuICAgIHJlY29nbml6ZXIubWFuYWdlciA9IHRoaXM7XG4gICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlbW92ZSBhIHJlY29nbml6ZXIgYnkgbmFtZSBvciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcInJlbW92ZVwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTsgLy8gbGV0J3MgbWFrZSBzdXJlIHRoaXMgcmVjb2duaXplciBleGlzdHNcblxuICAgIGlmIChyZWNvZ25pemVyKSB7XG4gICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuICAgICAgdmFyIGluZGV4ID0gaW5BcnJheShyZWNvZ25pemVycywgdGFyZ2V0UmVjb2duaXplcik7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgZXZlbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub24gPSBmdW5jdGlvbiBvbihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQgfHwgaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICBoYW5kbGVyc1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2hhbmRsZXJdXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub2ZmID0gZnVuY3Rpb24gb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVyc1tldmVudF0gJiYgaGFuZGxlcnNbZXZlbnRdLnNwbGljZShpbkFycmF5KGhhbmRsZXJzW2V2ZW50XSwgaGFuZGxlciksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgZGF0YSkge1xuICAgIC8vIHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGRvbSBldmVudHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmRvbUV2ZW50cykge1xuICAgICAgdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKTtcbiAgICB9IC8vIG5vIGhhbmRsZXJzLCBzbyBza2lwIGl0IGFsbFxuXG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50XSAmJiB0aGlzLmhhbmRsZXJzW2V2ZW50XS5zbGljZSgpO1xuXG4gICAgaWYgKCFoYW5kbGVycyB8fCAhaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGF0YS50eXBlID0gZXZlbnQ7XG5cbiAgICBkYXRhLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGF0YS5zcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgaGFuZGxlcnNbaV0oZGF0YSk7XG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZGVzdHJveSB0aGUgbWFuYWdlciBhbmQgdW5iaW5kcyBhbGwgZXZlbnRzXG4gICAqIGl0IGRvZXNuJ3QgdW5iaW5kIGRvbSBldmVudHMsIHRoYXQgaXMgdGhlIHVzZXIgb3duIHJlc3BvbnNpYmlsaXR5XG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZWxlbWVudCAmJiB0b2dnbGVDc3NQcm9wcyh0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIE1hbmFnZXI7XG59KCk7XG5cbnZhciBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBTaW5nbGVUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU2luZ2xlVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBTaW5nbGVUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07IC8vIHNob3VsZCB3ZSBoYW5kbGUgdGhlIHRvdWNoIGV2ZW50cz9cblxuICAgIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3VjaGVzID0gbm9ybWFsaXplU2luZ2xlVG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTsgLy8gd2hlbiBkb25lLCByZXNldCB0aGUgc3RhcnRlZCBzdGF0ZVxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBTaW5nbGVUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIGFsbCA9IHVuaXF1ZUFycmF5KGFsbC5jb25jYXQoY2hhbmdlZCksICdpZGVudGlmaWVyJywgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdyYXAgYSBtZXRob2Qgd2l0aCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIHN0YWNrIHRyYWNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB3cmFwcGluZyB0aGUgc3VwcGxpZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBkZXByZWNhdGUobWV0aG9kLCBuYW1lLCBtZXNzYWdlKSB7XG4gIHZhciBkZXByZWNhdGlvbk1lc3NhZ2UgPSBcIkRFUFJFQ0FURUQgTUVUSE9EOiBcIiArIG5hbWUgKyBcIlxcblwiICsgbWVzc2FnZSArIFwiIEFUIFxcblwiO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICB2YXIgc3RhY2sgPSBlICYmIGUuc3RhY2sgPyBlLnN0YWNrLnJlcGxhY2UoL15bXlxcKF0rP1tcXG4kXS9nbSwgJycpLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJykucmVwbGFjZSgvXk9iamVjdC48YW5vbnltb3VzPlxccypcXCgvZ20sICd7YW5vbnltb3VzfSgpQCcpIDogJ1Vua25vd24gU3RhY2sgVHJhY2UnO1xuICAgIHZhciBsb2cgPSB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUud2FybiB8fCB3aW5kb3cuY29uc29sZS5sb2cpO1xuXG4gICAgaWYgKGxvZykge1xuICAgICAgbG9nLmNhbGwod2luZG93LmNvbnNvbGUsIGRlcHJlY2F0aW9uTWVzc2FnZSwgc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBleHRlbmQgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYywgbWVyZ2UpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBrZXlzLmxlbmd0aCkge1xuICAgIGlmICghbWVyZ2UgfHwgbWVyZ2UgJiYgZGVzdFtrZXlzW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXN0W2tleXNbaV1dID0gc3JjW2tleXNbaV1dO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufSwgJ2V4dGVuZCcsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgbWVyZ2UgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYykge1xuICByZXR1cm4gZXh0ZW5kKGRlc3QsIHNyYywgdHJ1ZSk7XG59LCAnbWVyZ2UnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgY2xhc3MgaW5oZXJpdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBiYXNlXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdChjaGlsZCwgYmFzZSwgcHJvcGVydGllcykge1xuICB2YXIgYmFzZVAgPSBiYXNlLnByb3RvdHlwZTtcbiAgdmFyIGNoaWxkUDtcbiAgY2hpbGRQID0gY2hpbGQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShiYXNlUCk7XG4gIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICBjaGlsZFAuX3N1cGVyID0gYmFzZVA7XG5cbiAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICBhc3NpZ24kMShjaGlsZFAsIHByb3BlcnRpZXMpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBmdW5jdGlvbiBiaW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gYmluZEZuKGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIEhhbW1lciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBIYW1tZXIgPVxuICAvKipcbiAgICAqIEBwcml2YXRlXG4gICAgKiBAY29uc3Qge3N0cmluZ31cbiAgICAqL1xuICBmdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hbmFnZXIoZWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgcmVjb2duaXplcnM6IHByZXNldC5jb25jYXQoKVxuICAgIH0sIG9wdGlvbnMpKTtcbiAgfTtcblxuICBIYW1tZXIuVkVSU0lPTiA9IFwiMi4wLjE3LXJjXCI7XG4gIEhhbW1lci5ESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0FMTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5ESVJFQ1RJT05fTEVGVCA9IERJUkVDVElPTl9MRUZUO1xuICBIYW1tZXIuRElSRUNUSU9OX1JJR0hUID0gRElSRUNUSU9OX1JJR0hUO1xuICBIYW1tZXIuRElSRUNUSU9OX1VQID0gRElSRUNUSU9OX1VQO1xuICBIYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9WRVJUSUNBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9OT05FID0gRElSRUNUSU9OX05PTkU7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuSU5QVVRfU1RBUlQgPSBJTlBVVF9TVEFSVDtcbiAgSGFtbWVyLklOUFVUX01PVkUgPSBJTlBVVF9NT1ZFO1xuICBIYW1tZXIuSU5QVVRfRU5EID0gSU5QVVRfRU5EO1xuICBIYW1tZXIuSU5QVVRfQ0FOQ0VMID0gSU5QVVRfQ0FOQ0VMO1xuICBIYW1tZXIuU1RBVEVfUE9TU0lCTEUgPSBTVEFURV9QT1NTSUJMRTtcbiAgSGFtbWVyLlNUQVRFX0JFR0FOID0gU1RBVEVfQkVHQU47XG4gIEhhbW1lci5TVEFURV9DSEFOR0VEID0gU1RBVEVfQ0hBTkdFRDtcbiAgSGFtbWVyLlNUQVRFX0VOREVEID0gU1RBVEVfRU5ERUQ7XG4gIEhhbW1lci5TVEFURV9SRUNPR05JWkVEID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgSGFtbWVyLlNUQVRFX0NBTkNFTExFRCA9IFNUQVRFX0NBTkNFTExFRDtcbiAgSGFtbWVyLlNUQVRFX0ZBSUxFRCA9IFNUQVRFX0ZBSUxFRDtcbiAgSGFtbWVyLk1hbmFnZXIgPSBNYW5hZ2VyO1xuICBIYW1tZXIuSW5wdXQgPSBJbnB1dDtcbiAgSGFtbWVyLlRvdWNoQWN0aW9uID0gVG91Y2hBY3Rpb247XG4gIEhhbW1lci5Ub3VjaElucHV0ID0gVG91Y2hJbnB1dDtcbiAgSGFtbWVyLk1vdXNlSW5wdXQgPSBNb3VzZUlucHV0O1xuICBIYW1tZXIuUG9pbnRlckV2ZW50SW5wdXQgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgSGFtbWVyLlRvdWNoTW91c2VJbnB1dCA9IFRvdWNoTW91c2VJbnB1dDtcbiAgSGFtbWVyLlNpbmdsZVRvdWNoSW5wdXQgPSBTaW5nbGVUb3VjaElucHV0O1xuICBIYW1tZXIuUmVjb2duaXplciA9IFJlY29nbml6ZXI7XG4gIEhhbW1lci5BdHRyUmVjb2duaXplciA9IEF0dHJSZWNvZ25pemVyO1xuICBIYW1tZXIuVGFwID0gVGFwUmVjb2duaXplcjtcbiAgSGFtbWVyLlBhbiA9IFBhblJlY29nbml6ZXI7XG4gIEhhbW1lci5Td2lwZSA9IFN3aXBlUmVjb2duaXplcjtcbiAgSGFtbWVyLlBpbmNoID0gUGluY2hSZWNvZ25pemVyO1xuICBIYW1tZXIuUm90YXRlID0gUm90YXRlUmVjb2duaXplcjtcbiAgSGFtbWVyLlByZXNzID0gUHJlc3NSZWNvZ25pemVyO1xuICBIYW1tZXIub24gPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLm9mZiA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZWFjaCA9IGVhY2g7XG4gIEhhbW1lci5tZXJnZSA9IG1lcmdlO1xuICBIYW1tZXIuZXh0ZW5kID0gZXh0ZW5kO1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIuYXNzaWduID0gYXNzaWduJDE7XG4gIEhhbW1lci5pbmhlcml0ID0gaW5oZXJpdDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLnByZWZpeGVkID0gcHJlZml4ZWQ7XG4gIEhhbW1lci50b0FycmF5ID0gdG9BcnJheTtcbiAgSGFtbWVyLmluQXJyYXkgPSBpbkFycmF5O1xuICBIYW1tZXIudW5pcXVlQXJyYXkgPSB1bmlxdWVBcnJheTtcbiAgSGFtbWVyLnNwbGl0U3RyID0gc3BsaXRTdHI7XG4gIEhhbW1lci5ib29sT3JGbiA9IGJvb2xPckZuO1xuICBIYW1tZXIuaGFzUGFyZW50ID0gaGFzUGFyZW50O1xuICBIYW1tZXIuYWRkRXZlbnRMaXN0ZW5lcnMgPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLnJlbW92ZUV2ZW50TGlzdGVuZXJzID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5kZWZhdWx0cyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywge1xuICAgIHByZXNldDogcHJlc2V0XG4gIH0pO1xuICByZXR1cm4gSGFtbWVyO1xufSgpO1xuXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cblxudmFyIGRlZmF1bHRzJDEgPSBIYW1tZXIuZGVmYXVsdHM7XG5cbmV4cG9ydCBkZWZhdWx0IEhhbW1lcjtcbmV4cG9ydCB7IElOUFVUX1NUQVJULCBJTlBVVF9NT1ZFLCBJTlBVVF9FTkQsIElOUFVUX0NBTkNFTCwgU1RBVEVfUE9TU0lCTEUsIFNUQVRFX0JFR0FOLCBTVEFURV9DSEFOR0VELCBTVEFURV9FTkRFRCwgU1RBVEVfUkVDT0dOSVpFRCwgU1RBVEVfQ0FOQ0VMTEVELCBTVEFURV9GQUlMRUQsIERJUkVDVElPTl9OT05FLCBESVJFQ1RJT05fTEVGVCwgRElSRUNUSU9OX1JJR0hULCBESVJFQ1RJT05fVVAsIERJUkVDVElPTl9ET1dOLCBESVJFQ1RJT05fSE9SSVpPTlRBTCwgRElSRUNUSU9OX1ZFUlRJQ0FMLCBESVJFQ1RJT05fQUxMLCBNYW5hZ2VyLCBJbnB1dCwgVG91Y2hBY3Rpb24sIFRvdWNoSW5wdXQsIE1vdXNlSW5wdXQsIFBvaW50ZXJFdmVudElucHV0LCBUb3VjaE1vdXNlSW5wdXQsIFNpbmdsZVRvdWNoSW5wdXQsIFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCBUYXBSZWNvZ25pemVyIGFzIFRhcCwgUGFuUmVjb2duaXplciBhcyBQYW4sIFN3aXBlUmVjb2duaXplciBhcyBTd2lwZSwgUGluY2hSZWNvZ25pemVyIGFzIFBpbmNoLCBSb3RhdGVSZWNvZ25pemVyIGFzIFJvdGF0ZSwgUHJlc3NSZWNvZ25pemVyIGFzIFByZXNzLCBhZGRFdmVudExpc3RlbmVycyBhcyBvbiwgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMgYXMgb2ZmLCBlYWNoLCBtZXJnZSwgZXh0ZW5kLCBhc3NpZ24kMSBhcyBhc3NpZ24sIGluaGVyaXQsIGJpbmRGbiwgcHJlZml4ZWQsIHRvQXJyYXksIGluQXJyYXksIHVuaXF1ZUFycmF5LCBzcGxpdFN0ciwgYm9vbE9yRm4sIGhhc1BhcmVudCwgYWRkRXZlbnRMaXN0ZW5lcnMsIHJlbW92ZUV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0cyQxIGFzIGRlZmF1bHRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW1tZXIuZXNtLmpzLm1hcFxuIiwgIi8qKlxuICogdmlzLXV0aWxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtdXRpbFxuICpcbiAqIHV0aWxpdGllIGNvbGxlY3Rpb24gZm9yIHZpc2pzXG4gKlxuICogQHZlcnNpb24gNS4wLjdcbiAqIEBkYXRlICAgIDIwMjMtMTEtMjBUMDk6MDY6NTEuMDY3WlxuICpcbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTEtMjAxNyBBbG1lbmRlIEIuViwgaHR0cDovL2FsbWVuZGUuY29tXG4gKiBAY29weXJpZ2h0IChjKSAyMDE3LTIwMTkgdmlzanMgY29udHJpYnV0b3JzLCBodHRwczovL2dpdGh1Yi5jb20vdmlzanNcbiAqXG4gKiBAbGljZW5zZVxuICogdmlzLmpzIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aFxuICpcbiAqICAgMS4gVGhlIEFwYWNoZSAyLjAgTGljZW5zZVxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgIGFuZFxuICpcbiAqICAgMi4gVGhlIE1JVCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiB2aXMuanMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGVpdGhlciBsaWNlbnNlLlxuICovXG5cbmltcG9ydCBFbWl0dGVyIGZyb20gJ2NvbXBvbmVudC1lbWl0dGVyJztcbmltcG9ydCBSZWFsSGFtbWVyIGZyb20gJ0BlZ2pzL2hhbW1lcmpzJztcblxuLyoqXHJcbiAqIFVzZSB0aGlzIHN5bWJvbCB0byBkZWxldGUgcHJvcGVyaWVzIGluIGRlZXBPYmplY3RBc3NpZ24uXHJcbiAqL1xyXG5jb25zdCBERUxFVEUgPSBTeW1ib2woXCJERUxFVEVcIik7XHJcbi8qKlxyXG4gKiBQdXJlIHZlcnNpb24gb2YgZGVlcE9iamVjdEFzc2lnbiwgaXQgZG9lc24ndCBtb2RpZnkgYW55IG9mIGl0J3MgYXJndW1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0gYmFzZSAtIFRoZSBiYXNlIG9iamVjdCB0aGF0IGZ1bGxmaWxzIHRoZSB3aG9sZSBpbnRlcmZhY2UgVC5cclxuICogQHBhcmFtIHVwZGF0ZXMgLSBVcGRhdGVzIHRoYXQgbWF5IGNoYW5nZSBvciBkZWxldGUgcHJvcHMuXHJcbiAqIEByZXR1cm5zIEEgYnJhbmQgbmV3IGluc3RhbmNlIHdpdGggYWxsIHRoZSBzdXBwbGllZCBvYmplY3RzIGRlZXBseSBtZXJnZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwdXJlRGVlcE9iamVjdEFzc2lnbihiYXNlLCAuLi51cGRhdGVzKSB7XHJcbiAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbih7fSwgYmFzZSwgLi4udXBkYXRlcyk7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ24oLi4udmFsdWVzKSB7XHJcbiAgICBjb25zdCBtZXJnZWQgPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKTtcclxuICAgIHN0cmlwRGVsZXRlKG1lcmdlZCk7XHJcbiAgICByZXR1cm4gbWVyZ2VkO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoaXMgZG9lc24ndCBzdHJpcCB0aGUgREVMRVRFIHN5bWJvbHMgc28gdGhleSBtYXkgZW5kIHVwIGluIHRoZSBmaW5hbCBvYmplY3QuXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKSB7XHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGRlZXBPYmplY3RBc3NpZ24odmFsdWVzWzBdLCB2YWx1ZXNbMV0pLCAuLi52YWx1ZXMuc2xpY2UoMikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYSA9IHZhbHVlc1swXTtcclxuICAgIGNvbnN0IGIgPSB2YWx1ZXNbMV07XHJcbiAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICBhLnNldFRpbWUoYi5nZXRUaW1lKCkpO1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIFJlZmxlY3Qub3duS2V5cyhiKSkge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGIsIHByb3ApKSA7XHJcbiAgICAgICAgZWxzZSBpZiAoYltwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYVtwcm9wXSkgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShhW3Byb3BdLCBiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBjbG9uZShiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBjbG9uZSBnaXZlbiBvYmplY3Qgb3IgYXJyYXkuIEluIGNhc2Ugb2YgcHJpbWl0aXZlIHNpbXBseSByZXR1cm4uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gQW55dGhpbmcuXHJcbiAqIEByZXR1cm5zIERlZXAgY2xvbmVkIG9iamVjdC9hcnJheSBvciB1bmNoYW5nZWQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGNsb25lKGEpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIGEubWFwKCh2YWx1ZSkgPT4gY2xvbmUodmFsdWUpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBhID09PSBcIm9iamVjdFwiICYmIGEgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGEuZ2V0VGltZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSh7fSwgYSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogU3RyaXAgREVMRVRFIGZyb20gZ2l2ZW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB3aGljaCBtYXkgY29udGFpbiBERUxFVEUgYnV0IHdvbid0IGFmdGVyIHRoaXMgaXMgZXhlY3V0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBzdHJpcERlbGV0ZShhKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoYSkpIHtcclxuICAgICAgICBpZiAoYVtwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJiBhW3Byb3BdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHN0cmlwRGVsZXRlKGFbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG4vKipcclxuICogU2VlZGFibGUsIGZhc3QgYW5kIHJlYXNvbmFibHkgZ29vZCAobm90IGNyeXB0byBidXQgbW9yZSB0aGFuIG9rYXkgZm9yIG91clxyXG4gKiBuZWVkcykgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIEFkYXB0ZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTEwNDI5MTAwNzM2L2h0dHA6Ly9iYWFnb2UuY29tOjgwL2VuL1JhbmRvbU11c2luZ3MvamF2YXNjcmlwdH0uXHJcbiAqIE9yaWdpbmFsIGFsZ29yaXRobSBjcmVhdGVkIGJ5IEpvaGFubmVzIEJhYWfDuGUgXFw8YmFhZ29lXFxAYmFhZ29lLmNvbVxcPiBpbiAyMDEwLlxyXG4gKi9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIGdlbmVyYXRvciBiYXNlZCBvbiBBbGVhIGJ5IEpvaGFubmVzIEJhYWfDuGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQWxsIHN1cHBsaWVkIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWQgYXMgYSBzZWVkLiBJbiBjYXNlIG5vdGhpbmdcclxuICogaXMgc3VwcGxpZWQgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYSguLi5zZWVkKSB7XHJcbiAgICByZXR1cm4gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQubGVuZ3RoID8gc2VlZCA6IFtEYXRlLm5vdygpXSk7XHJcbn1cclxuLyoqXHJcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFtbQWxlYV1dIHdpdGhvdXQgdXNlciBpbnB1dCB2YWxpZGF0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIFRoZSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkKSB7XHJcbiAgICBsZXQgW3MwLCBzMSwgczJdID0gbWFzaFNlZWQoc2VlZCk7XHJcbiAgICBsZXQgYyA9IDE7XHJcbiAgICBjb25zdCByYW5kb20gPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgICAgIHMwID0gczE7XHJcbiAgICAgICAgczEgPSBzMjtcclxuICAgICAgICByZXR1cm4gKHMyID0gdCAtIChjID0gdCB8IDApKTtcclxuICAgIH07XHJcbiAgICByYW5kb20udWludDMyID0gKCkgPT4gcmFuZG9tKCkgKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgcmFuZG9tLmZyYWN0NTMgPSAoKSA9PiByYW5kb20oKSArICgocmFuZG9tKCkgKiAweDIwMDAwMCkgfCAwKSAqIDEuMTEwMjIzMDI0NjI1MTU2NWUtMTY7IC8vIDJeLTUzXHJcbiAgICByYW5kb20uYWxnb3JpdGhtID0gXCJBbGVhXCI7XHJcbiAgICByYW5kb20uc2VlZCA9IHNlZWQ7XHJcbiAgICByYW5kb20udmVyc2lvbiA9IFwiMC45XCI7XHJcbiAgICByZXR1cm4gcmFuZG9tO1xyXG59XHJcbi8qKlxyXG4gKiBUdXJuIGFyYml0cmFyeSBkYXRhIGludG8gdmFsdWVzIFtbQWxlYUltcGxlbWVudGF0aW9uXV0gY2FuIHVzZSB0byBnZW5lcmF0ZVxyXG4gKiByYW5kb20gbnVtYmVycy5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBcmJpdHJhcnkgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgc2VlZC5cclxuICogQHJldHVybnMgVGhyZWUgbnVtYmVycyB0byB1c2UgYXMgaW5pdGlhbCB2YWx1ZXMgZm9yIFtbQWxlYUltcGxlbWVudGF0aW9uXV0uXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXNoU2VlZCguLi5zZWVkKSB7XHJcbiAgICBjb25zdCBtYXNoID0gTWFzaCgpO1xyXG4gICAgbGV0IHMwID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczEgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMiA9IG1hc2goXCIgXCIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgczAgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczAgPCAwKSB7XHJcbiAgICAgICAgICAgIHMwICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMxIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMxIDwgMCkge1xyXG4gICAgICAgICAgICBzMSArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMiAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMiA8IDApIHtcclxuICAgICAgICAgICAgczIgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW3MwLCBzMSwgczJdO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWFzaCBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMgQSBub25wdXJlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYXJiaXRyYXJ5IFtbTWFzaGFibGVdXSBkYXRhIGFuZCB0dXJuc1xyXG4gKiB0aGVtIGludG8gbnVtYmVycy5cclxuICovXHJcbmZ1bmN0aW9uIE1hc2goKSB7XHJcbiAgICBsZXQgbiA9IDB4ZWZjODI0OWQ7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICBjb25zdCBzdHJpbmcgPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbiArPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgbGV0IGggPSAwLjAyNTE5NjAzMjgyNDE2OTM4ICogbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgaCAqPSBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBuICs9IGggKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgIH07XHJcbn1cblxuLyoqXG4gKiBTZXR1cCBhIG1vY2sgaGFtbWVyLmpzIG9iamVjdCwgZm9yIHVuaXQgdGVzdGluZy5cbiAqXG4gKiBJbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3ViZXIvZGVjay5nbC9wdWxsLzY1OFxuICpcbiAqIEByZXR1cm5zIHt7b246IG5vb3AsIG9mZjogbm9vcCwgZGVzdHJveTogbm9vcCwgZW1pdDogbm9vcCwgZ2V0OiBnZXR9fVxuICovXG5mdW5jdGlvbiBoYW1tZXJNb2NrKCkge1xuICBjb25zdCBub29wID0gKCkgPT4ge307XG5cbiAgcmV0dXJuIHtcbiAgICBvbjogbm9vcCxcbiAgICBvZmY6IG5vb3AsXG4gICAgZGVzdHJveTogbm9vcCxcbiAgICBlbWl0OiBub29wLFxuXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0OiBub29wLFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBIYW1tZXIkMSA9XG4gIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IHdpbmRvdy5IYW1tZXIgfHwgUmVhbEhhbW1lclxuICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBoYW1tZXIuanMgaXMgb25seSBhdmFpbGFibGUgaW4gYSBicm93c2VyLCBub3QgaW4gbm9kZS5qcy4gUmVwbGFjaW5nIGl0IHdpdGggYSBtb2NrIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIGhhbW1lck1vY2soKTtcbiAgICAgIH07XG5cbi8qKlxuICogVHVybiBhbiBlbGVtZW50IGludG8gYW4gY2xpY2tUb1VzZSBlbGVtZW50LlxuICogV2hlbiBub3QgYWN0aXZlLCB0aGUgZWxlbWVudCBoYXMgYSB0cmFuc3BhcmVudCBvdmVybGF5LiBXaGVuIHRoZSBvdmVybGF5IGlzXG4gKiBjbGlja2VkLCB0aGUgbW9kZSBpcyBjaGFuZ2VkIHRvIGFjdGl2ZS5cbiAqIFdoZW4gYWN0aXZlLCB0aGUgZWxlbWVudCBpcyBkaXNwbGF5ZWQgd2l0aCBhIGJsdWUgYm9yZGVyIGFyb3VuZCBpdCwgYW5kXG4gKiB0aGUgaW50ZXJhY3RpdmUgY29udGVudHMgb2YgdGhlIGVsZW1lbnQgY2FuIGJlIHVzZWQuIFdoZW4gY2xpY2tlZCBvdXRzaWRlXG4gKiB0aGUgZWxlbWVudCwgdGhlIGVsZW1lbnRzIG1vZGUgaXMgY2hhbmdlZCB0byBpbmFjdGl2ZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lclxuICogQGNsYXNzIEFjdGl2YXRvclxuICovXG5mdW5jdGlvbiBBY3RpdmF0b3IkMShjb250YWluZXIpIHtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlID0gW107XG5cbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICB0aGlzLl9kb20gPSB7XG4gICAgY29udGFpbmVyLFxuICAgIG92ZXJsYXk6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gIH07XG5cbiAgdGhpcy5fZG9tLm92ZXJsYXkuY2xhc3NMaXN0LmFkZChcInZpcy1vdmVybGF5XCIpO1xuXG4gIHRoaXMuX2RvbS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgdGhpcy5fZG9tLm92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIH0pO1xuXG4gIGNvbnN0IGhhbW1lciA9IEhhbW1lciQxKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgaGFtbWVyLm9uKFwidGFwXCIsIHRoaXMuX29uVGFwT3ZlcmxheS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIGhhbW1lci5kZXN0cm95KCk7XG4gICAgLy8gRklYTUU6IGNsZWFuaW5nIHVwIGhhbW1lciBpbnN0YW5jZXMgZG9lc24ndCB3b3JrIChUaW1lbGluZSBub3QgcmVtb3ZlZFxuICAgIC8vIGZyb20gbWVtb3J5KVxuICB9KTtcblxuICAvLyBibG9jayBhbGwgdG91Y2ggZXZlbnRzIChleGNlcHQgdGFwKVxuICBjb25zdCBldmVudHMgPSBbXG4gICAgXCJ0YXBcIixcbiAgICBcImRvdWJsZXRhcFwiLFxuICAgIFwicHJlc3NcIixcbiAgICBcInBpbmNoXCIsXG4gICAgXCJwYW5cIixcbiAgICBcInBhbnN0YXJ0XCIsXG4gICAgXCJwYW5tb3ZlXCIsXG4gICAgXCJwYW5lbmRcIixcbiAgXTtcbiAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgaGFtbWVyLm9uKGV2ZW50LCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBhdHRhY2ggYSBjbGljayBldmVudCB0byB0aGUgd2luZG93LCBpbiBvcmRlciB0byBkZWFjdGl2YXRlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSB0aGUgdGltZWxpbmVcbiAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmJvZHkpIHtcbiAgICB0aGlzLl9vbkNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIV9oYXNQYXJlbnQoZXZlbnQudGFyZ2V0LCBjb250YWluZXIpKSB7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBwcmVwYXJlIGVzY2FwZSBrZXkgbGlzdGVuZXIgZm9yIGRlYWN0aXZhdGluZyB3aGVuIGFjdGl2ZVxuICB0aGlzLl9lc2NMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIFwia2V5XCIgaW4gZXZlbnRcbiAgICAgICAgPyBldmVudC5rZXkgPT09IFwiRXNjYXBlXCJcbiAgICAgICAgOiBldmVudC5rZXlDb2RlID09PSAyNyAvKiB0aGUga2V5Q29kZSBpcyBmb3IgSUUxMSAqL1xuICAgICkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICB9O1xufVxuXG4vLyB0dXJuIGludG8gYW4gZXZlbnQgZW1pdHRlclxuRW1pdHRlcihBY3RpdmF0b3IkMS5wcm90b3R5cGUpO1xuXG4vLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBhY3RpdmF0b3JcbkFjdGl2YXRvciQxLmN1cnJlbnQgPSBudWxsO1xuXG4vKipcbiAqIERlc3Ryb3kgdGhlIGFjdGl2YXRvci4gQ2xlYW5zIHVwIGFsbCBjcmVhdGVkIERPTSBhbmQgZXZlbnQgbGlzdGVuZXJzXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmRlYWN0aXZhdGUoKTtcblxuICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2NsZWFudXBRdWV1ZS5zcGxpY2UoMCkucmV2ZXJzZSgpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBoaWRkZW4sIGVsZW1lbnQgaXMgZGVjb3JhdGVkIHdpdGggYSBibHVlIHNoYWRvdyBib3JkZXJcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICAvLyB3ZSBhbGxvdyBvbmx5IG9uZSBhY3RpdmUgYWN0aXZhdG9yIGF0IGEgdGltZVxuICBpZiAoQWN0aXZhdG9yJDEuY3VycmVudCkge1xuICAgIEFjdGl2YXRvciQxLmN1cnJlbnQuZGVhY3RpdmF0ZSgpO1xuICB9XG4gIEFjdGl2YXRvciQxLmN1cnJlbnQgPSB0aGlzO1xuXG4gIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ2aXMtYWN0aXZlXCIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiYWN0aXZhdGVcIik7XG5cbiAgLy8gdWdseSBoYWNrOiBiaW5kIEVTQyBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnRzLCBhcyB0aGUgTmV0d29yayByZWJpbmRzIGFsbFxuICAvLyBrZXlib2FyZCBldmVudHMgb24gYSAnY2hhbmdlJyBldmVudFxuICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gdG9wIG9mIHRoZSBlbGVtZW50XG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJ2aXMtYWN0aXZlXCIpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImRlYWN0aXZhdGVcIik7XG59O1xuXG4vKipcbiAqIEhhbmRsZSBhIHRhcCBldmVudDogYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLl9vblRhcE92ZXJsYXkgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICB0aGlzLmFjdGl2YXRlKCk7XG4gIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIHRoZSByZXF1ZXN0ZWQgcGFyZW50IGVsZW1lbnQgc29tZXdoZXJlIGluXG4gKiBpdHMgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwYXJlbnQgaXMgZm91bmQgc29tZXdoZXJlIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9oYXNQYXJlbnQoZWxlbWVudCwgcGFyZW50KSB7XG4gIHdoaWxlIChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyB1dGlsaXR5IGZ1bmN0aW9uc1xyXG4vLyBwYXJzZSBBU1AuTmV0IERhdGUgcGF0dGVybixcclxuLy8gZm9yIGV4YW1wbGUgJy9EYXRlKDExOTg5MDg3MTcwNTYpLycgb3IgJy9EYXRlKDExOTg5MDg3MTcwNTYtMDcwMCkvJ1xyXG4vLyBjb2RlIGZyb20gaHR0cDovL21vbWVudGpzLmNvbS9cclxuY29uc3QgQVNQRGF0ZVJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2k7XHJcbi8vIENvbG9yIFJFc1xyXG5jb25zdCBmdWxsSGV4UkUgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pO1xyXG5jb25zdCBzaG9ydEhleFJFID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcclxuY29uc3QgcmdiUkUgPSAvXnJnYlxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqXFwpJC9pO1xyXG5jb25zdCByZ2JhUkUgPSAvXnJnYmFcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKihbMDFdfDA/XFwuXFxkKykgKlxcKSQvaTtcclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBudW1iZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBudW1iZXIsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgZXZlcnl0aGluZyBpbiB0aGUgRE9NIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIERPTW9iamVjdCAtIE5vZGUgd2hvc2UgY2hpbGQgbm9kZXMgd2lsbCBiZSByZWN1cnNpdmVseSBkZWxldGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVjdXJzaXZlRE9NRGVsZXRlKERPTW9iamVjdCkge1xyXG4gICAgaWYgKERPTW9iamVjdCkge1xyXG4gICAgICAgIHdoaWxlIChET01vYmplY3QuaGFzQ2hpbGROb2RlcygpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gRE9Nb2JqZWN0LmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIERPTW9iamVjdC5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgb2JqZWN0IChub3QgcHJpbWl0aXZlIG9yIG51bGwpLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbm90IG51bGwgb2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIERhdGUsIG9yIGEgU3RyaW5nIGNvbnRhaW5pbmcgYSBEYXRlLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgRGF0ZSBpbnN0YW5jZSBvciBzdHJpbmcgZGF0ZSByZXByZXNlbnRhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBzdHJpbmcgY29udGFpbnMgYSBkYXRlXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBBU1BEYXRlUmVnZXguZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG4vKipcclxuICogQ29weSBwcm9wZXJ0eSBmcm9tIGIgdG8gYSBpZiBwcm9wZXJ0eSBwcmVzZW50IGluIGEuXHJcbiAqIElmIHByb3BlcnR5IGluIGIgZXhwbGljaXRseSBzZXQgdG8gbnVsbCwgZGVsZXRlIGl0IGlmIGBhbGxvd0RlbGV0aW9uYCBzZXQuXHJcbiAqXHJcbiAqIEludGVybmFsIGhlbHBlciByb3V0aW5lLCBzaG91bGQgbm90IGJlIGV4cG9ydGVkLiBOb3QgYWRkZWQgdG8gYGV4cG9ydHNgIGZvciB0aGF0IHJlYXNvbi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm9wIC0gTmFtZSBvZiBwcm9wZXJ0eSB0byBjb3B5IGZyb20gYiB0byBhLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKSB7XHJcbiAgICBsZXQgZG9EZWxldGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUpIHtcclxuICAgICAgICBkb0RlbGV0aW9uID0gYltwcm9wXSA9PT0gbnVsbCAmJiBhW3Byb3BdICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoZG9EZWxldGlvbikge1xyXG4gICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF07IC8vIFJlbWVtYmVyLCB0aGlzIGlzIGEgcmVmZXJlbmNlIGNvcHkhXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEZpbGwgYW4gb2JqZWN0IHdpdGggYSBwb3NzaWJseSBwYXJ0aWFsbHkgZGVmaW5lZCBvdGhlciBvYmplY3QuXHJcbiAqXHJcbiAqIE9ubHkgY29waWVzIHZhbHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgYWxyZWFkeSBwcmVzZW50IGluIGEuXHJcbiAqIFRoYXQgbWVhbnMgYW4gb2JqZWN0IGlzIG5vdCBjcmVhdGVkIG9uIGEgcHJvcGVydHkgaWYgb25seSB0aGUgYiBvYmplY3QgaGFzIGl0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBvYmplY3QgdGhhdCB3aWxsIGhhdmUgaXQncyBwcm9wZXJ0aWVzIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBiIC0gVGhlIG9iamVjdCB3aXRoIHByb3BlcnR5IHVwZGF0ZXMuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBmaWxsSWZEZWZpbmVkKGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gTk9URTogaXRlcmF0aW9uIG9mIHByb3BlcnRpZXMgb2YgYVxyXG4gICAgLy8gTk9URTogcHJvdG90eXBlIHByb3BlcnRpZXMgaXRlcmF0ZWQgb3ZlciBhcyB3ZWxsXHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYSkge1xyXG4gICAgICAgIGlmIChiW3Byb3BdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gPT09IG51bGwgfHwgdHlwZW9mIGJbcHJvcF0gIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vdGU6IHR5cGVvZiBudWxsID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYVByb3AgPSBhW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYlByb3AgPSBiW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGFQcm9wKSAmJiBpc09iamVjdChiUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsSWZEZWZpbmVkKGFQcm9wLCBiUHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXHJcbiAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxyXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXHJcbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKi9cclxuY29uc3QgZXh0ZW5kID0gT2JqZWN0LmFzc2lnbjtcclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIgb3IgYSBzZXJpZXMgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHJlbWFya3NcclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBjb3BpZWQgdG8gYS5cclxuICogQHBhcmFtIGEgLSBUaGUgdGFyZ2V0LlxyXG4gKiBAcGFyYW0gb3RoZXJzIC0gVGhlIHNvdXJjZXMuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVFeHRlbmQocHJvcHMsIGEsIC4uLm90aGVycykge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFycmF5IHdpdGggcHJvcGVydHkgbmFtZXMgZXhwZWN0ZWQgYXMgZmlyc3QgYXJndW1lbnRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVycykge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgICAgICBpZiAob3RoZXIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBwcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IG90aGVyW3Byb3BdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyByb3V0aW5lIGltcGxpZWQgdGhhdCBtdWx0aXBsZSBzb3VyY2Ugb2JqZWN0cyBjb3VsZFxyXG4gKiBiZSB1c2VkOyBob3dldmVyLCB0aGUgaW1wbGVtZW50YXRpb24gd2FzICoqd3JvbmcqKi4gU2luY2UgbXVsdGlwbGUgKFxcPjEpXHJcbiAqIHNvdXJjZXMgd2VyZW4ndCB1c2VkIGFueXdoZXJlIGluIHRoZSBgdmlzLmpzYCBjb2RlLCB0aGlzIGhhcyBiZWVuIHJlbW92ZWRcclxuICogQHBhcmFtIHByb3BzIC0gTmFtZXMgb2YgZmlyc3QtbGV2ZWwgcHJvcGVydGllcyB0byBjb3B5IG92ZXIuXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZURlZXBFeHRlbmQocHJvcHMsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBmYWxzZSwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYGFgIHdpdGggcHJvcGVydGllcyBvZiBvYmplY3QgYGJgLCBpZ25vcmluZyBwcm9wZXJ0aWVzIHdoaWNoXHJcbiAqIGFyZSBleHBsaWNpdGx5IHNwZWNpZmllZCB0byBiZSBleGNsdWRlZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhlIHByb3BlcnRpZXMgb2YgYGJgIGFyZSBjb25zaWRlcmVkIGZvciBjb3B5aW5nLiBQcm9wZXJ0aWVzIHdoaWNoIGFyZVxyXG4gKiB0aGVtc2VsdmVzIG9iamVjdHMgYXJlIGFyZSBhbHNvIGV4dGVuZGVkLiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkXHJcbiAqIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHNUb0V4Y2x1ZGUgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHdoaWNoIHNob3VsZCAqbm90KiBiZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHRvIGV4dGVuZC5cclxuICogQHBhcmFtIGIgLSBPYmplY3QgdG8gdGFrZSBwcm9wZXJ0aWVzIGZyb20gZm9yIGV4dGVuc2lvbi5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHlcclxuICogc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQocHJvcHNUb0V4Y2x1ZGUsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICAvLyBOT1RFOiBhcnJheSBwcm9wZXJ0aWVzIGhhdmUgYW4gZWxzZS1iZWxvdzsgYXBwYXJlbnRseSwgdGhlcmUgaXMgYSBwcm9ibGVtIGhlcmUuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBIYW5kbGUgbG9jYWwgcHJvcGVydGllcyBvbmx5XHJcbiAgICAgICAgaWYgKHByb3BzVG9FeGNsdWRlLmluY2x1ZGVzKHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSW4gZXhjbHVzaW9uIGxpc3QsIHNraXBcclxuICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYltwcm9wXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXS5wdXNoKGJbcHJvcF1baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgZXh0ZW5kIGFuIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvdG9FeHRlbmQgLSBJZiB0cnVlLCB0aGUgcHJvdG90eXBlIHZhbHVlcyB3aWxsIGFsc28gYmUgZXh0ZW5kZWQuXHJcbiAqIChUaGF0IGlzIHRoZSBvcHRpb25zIG9iamVjdHMgdGhhdCBpbmhlcml0IGZyb20gb3RoZXJzIHdpbGwgYWxzbyBnZXQgdGhlXHJcbiAqIGluaGVyaXRlZCBvcHRpb25zKS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCB0aGUgdmFsdWVzIG9mIGZpZWxkcyB0aGF0IGFyZSBudWxsIHdpbGwgYmUgZGVsZXRlZC5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBFeHRlbmQoYSwgYiwgcHJvdG9FeHRlbmQgPSBmYWxzZSwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkgfHwgcHJvdG9FeHRlbmQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYltwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0gZGVlcEV4dGVuZCh7fSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF0uc2xpY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgYWxsIGVsZW1lbnRzIGluIHR3byBhcnJheXMgYXJlIGVxdWFsLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEZpcnN0IGFycmF5LlxyXG4gKiBAcGFyYW0gYiAtIFNlY29uZCBhcnJheS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBib3RoIGFycmF5cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2FtZSBlbGVtZW50cyAoMSA9ICcxJykuXHJcbiAqL1xyXG5mdW5jdGlvbiBlcXVhbEFycmF5KGEsIGIpIHtcclxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBHZXQgdGhlIHR5cGUgb2YgYW4gb2JqZWN0LCBmb3IgZXhhbXBsZSBleHBvcnRzLmdldFR5cGUoW10pIHJldHVybnMgJ0FycmF5Jy5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgRGV0ZWN0ZWQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFR5cGUob2JqZWN0KSB7XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcclxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJBcnJheVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJEYXRlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIk9iamVjdFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBGaXJzdCBwYXJ0LlxyXG4gKiBAcGFyYW0gbmV3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgYWFkZGVkIGludG8gdGhlIGFycmF5LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aXRoIGFsbCBpdGVtcyBmcm9tIGFyciBhbmQgbmV3VmFsdWUgKHdoaWNoIGlzIGxhc3QpLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFuZEV4dGVuZEFycmF5KGFyciwgbmV3VmFsdWUpIHtcclxuICAgIHJldHVybiBbLi4uYXJyLCBuZXdWYWx1ZV07XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIGJlIGNvcGllZC5cclxuICogQHJldHVybnMgU2hhbGxvdyBjb3B5IG9mIGFyci5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBcnJheShhcnIpIHtcclxuICAgIHJldHVybiBhcnIuc2xpY2UoKTtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIGxlZnQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIGxlZnQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZUxlZnQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHJpZ2h0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSByaWdodCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlUmlnaHQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSB0b3AgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHRvcCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlVG9wKGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxufVxyXG4vKipcclxuICogQWRkIGEgY2xhc3NOYW1lIHRvIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIGFkZGVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBuZXdDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQobmV3Q2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhY2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSkpO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgYSBjbGFzc05hbWUgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG9sZENsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFvbGRDbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogRm9yIGVhY2ggbWV0aG9kIGZvciBib3RoIGFycmF5cyBhbmQgb2JqZWN0cy5cclxuICogSW4gY2FzZSBvZiBhbiBhcnJheSwgdGhlIGJ1aWx0LWluIEFycmF5LmZvckVhY2goKSBpcyBhcHBsaWVkICgqKk5vLCBpdCdzIG5vdCEqKikuXHJcbiAqIEluIGNhc2Ugb2YgYW4gT2JqZWN0LCB0aGUgbWV0aG9kIGxvb3BzIG92ZXIgYWxsIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIEFuIE9iamVjdCBvciBBcnJheSB0byBiZSBpdGVyYXRlZCBvdmVyLlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5mb3JFYWNoLWxpa2UgY2FsbGJhY2suXHJcbiAqL1xyXG5mdW5jdGlvbiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAvLyBhcnJheVxyXG4gICAgICAgIGNvbnN0IGxlbiA9IG9iamVjdC5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhvYmplY3RbaV0sIGksIG9iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gb2JqZWN0XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGFuIGFycmF5OiBhbGwgb2JqZWN0cyBwcm9wZXJ0aWVzIGFyZSBwdXQgaW50byB0aGUgYXJyYXkuIFRoZSByZXN1bHRpbmcgYXJyYXkgaXMgdW5vcmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbyAtIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bm9yZGVyZWQgdmFsdWVzLlxyXG4gKi9cclxuY29uc3QgdG9BcnJheSA9IE9iamVjdC52YWx1ZXM7XHJcbi8qKlxyXG4gKiBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IHdpbGwgYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIGtleSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgYXNzaWduZWQuXHJcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIHdhcyB1cGRhdGVkICh0cnVlKSBvciBhbHJlYWR5IHN0cmljdGx5IHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBvYmplY3QgKGZhbHNlKS5cclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KG9iamVjdCwga2V5LCB2YWx1ZSkge1xyXG4gICAgaWYgKG9iamVjdFtrZXldICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBiZSBvbmx5IGV4ZWN1dGVkIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZS5cclxuICpcclxuICogQHBhcmFtIGZuIC0gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJucyBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uLlxyXG4gKi9cclxuZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcclxuICAgIGxldCBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzY2hlZHVsZWQpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm4oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ2FuY2VscyB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBpZiBpdCBpcyBjYW5jZWxhYmxlLCB3aXRob3V0IHN0b3BwaW5nIGZ1cnRoZXIgcHJvcGFnYXRpb24gb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgd2hvc2UgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIG5vbi1JRSBicm93c2Vyc1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldCBIVE1MIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudC5cclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgb3IgbnVsbCBpZiBub3Qgb2J0YWluYWJsZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFRhcmdldChldmVudCA9IHdpbmRvdy5ldmVudCkge1xyXG4gICAgLy8gY29kZSBmcm9tIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxyXG4gICAgLy8gQFRPRE86IEV2ZW50VGFyZ2V0IGNhbiBiZSBhbG1vc3QgYW55dGhpbmcsIGlzIGl0IG9rYXkgdG8gcmV0dXJuIG9ubHkgRWxlbWVudHM/XHJcbiAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcclxuICAgIGlmICghZXZlbnQpIDtcclxuICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LnNyY0VsZW1lbnQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC5zcmNFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gbnVsbCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykge1xyXG4gICAgICAgIC8vIGRlZmVhdCBTYWZhcmkgYnVnXHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gZWxlbWVudCBjb250YWlucyBnaXZlbiBwYXJlbnQgc29tZXdoZXJlIGluIHRoZSBET00gdHJlZS5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBwYXJlbnQgLSBUaGUgYW5jZXN0b3IgKG5vdCBuZWNlc3NhcmlseSBwYXJlbnQpIG9mIHRoZSBlbGVtZW50LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHBhcmVudCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZWxlbWVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xyXG4gICAgbGV0IGVsZW0gPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKGVsZW0pIHtcclxuICAgICAgICBpZiAoZWxlbSA9PT0gcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9ib29sZWFuLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nIGJvb2xlYW4gdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgbnVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvbnVtYmVyLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nICoqYm94ZWQqKiBudW1iZXIgdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzTnVtYmVyKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIHN0cmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3N0cmluZywgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogc3RyaW5nIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1N0cmluZyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvc2l6ZSwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUgKG51bWJlciArICdweCcpLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1NpemUodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBET00gRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBET00gRWxlbWVudCwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIERPTSBFbGVtZW50LCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0VsZW1lbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYn1cclxuICogQHBhcmFtIGhleCAtIEhleCBjb2xvciBzdHJpbmcgKDMgb3IgNiBkaWdpdHMsIHdpdGggb3Igd2l0aG91dCAjKS5cclxuICogQHJldHVybnMgUkdCIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvUkdCKGhleCkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHN3aXRjaCAoaGV4Lmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHNob3J0SGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0gKyByZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0gKyByZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10gKyByZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBmdWxsSGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBzdHJpbmcgY29sb3IgaW4gaGV4IG9yIFJHQiBmb3JtYXQgYW5kIGFkZHMgdGhlIG9wYWNpdHksIFJHQkEgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29sb3IgLSBUaGUgY29sb3Igc3RyaW5nIChoZXgsIFJHQiwgUkdCQSkuXHJcbiAqIEBwYXJhbSBvcGFjaXR5IC0gVGhlIG5ldyBvcGFjaXR5LlxyXG4gKiBAcmV0dXJucyBSR0JBIHN0cmluZywgZm9yIGV4YW1wbGUgJ3JnYmEoMjU1LCAwLCAxMjcsIDAuMyknLlxyXG4gKi9cclxuZnVuY3Rpb24gb3ZlcnJpZGVPcGFjaXR5KGNvbG9yLCBvcGFjaXR5KSB7XHJcbiAgICBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JhXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JcIikpIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBjb2xvclxyXG4gICAgICAgICAgICAuc3Vic3RyKGNvbG9yLmluZGV4T2YoXCIoXCIpICsgMSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYlswXSArIFwiLFwiICsgcmdiWzFdICsgXCIsXCIgKyByZ2JbMl0gKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJnYiA9IGhleFRvUkdCKGNvbG9yKTtcclxuICAgICAgICBpZiAocmdiID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYi5yICsgXCIsXCIgKyByZ2IuZyArIFwiLFwiICsgcmdiLmIgKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcgKGZvciBleGFtcGxlOiAnIzBhY2RjMCcpLlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IZXgocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmV0dXJuIChcIiNcIiArICgoMSA8PCAyNCkgKyAocmVkIDw8IDE2KSArIChncmVlbiA8PCA4KSArIGJsdWUpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XHJcbn1cclxuLyoqXHJcbiAqIFBhcnNlIGEgY29sb3IgcHJvcGVydHkgaW50byBhbiBvYmplY3Qgd2l0aCBib3JkZXIsIGJhY2tncm91bmQsIGFuZCBoaWdobGlnaHQgY29sb3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5wdXRDb2xvciAtIFNob3J0aGFuZCBjb2xvciBzdHJpbmcgb3IgaW5wdXQgY29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0gZGVmYXVsdENvbG9yIC0gRnVsbCBjb2xvciBvYmplY3QgdG8gZmlsbCBpbiBtaXNzaW5nIHZhbHVlcyBpbiBpbnB1dENvbG9yLlxyXG4gKiBAcmV0dXJucyBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0Q29sb3IsIGRlZmF1bHRDb2xvcikge1xyXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0Q29sb3IpKSB7XHJcbiAgICAgICAgbGV0IGNvbG9yU3RyID0gaW5wdXRDb2xvcjtcclxuICAgICAgICBpZiAoaXNWYWxpZFJHQihjb2xvclN0cikpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiID0gY29sb3JTdHJcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoNClcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3JTdHIubGVuZ3RoIC0gNSlcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29sb3JTdHIgPSBSR0JUb0hleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVmFsaWRIZXgoY29sb3JTdHIpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSFNWKGNvbG9yU3RyKTtcclxuICAgICAgICAgICAgY29uc3QgbGlnaHRlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBoc3YucyAqIDAuOCxcclxuICAgICAgICAgICAgICAgIHY6IE1hdGgubWluKDEsIGhzdi52ICogMS4wMiksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBNYXRoLm1pbigxLCBoc3YucyAqIDEuMjUpLFxyXG4gICAgICAgICAgICAgICAgdjogaHN2LnYgKiAwLjgsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySGV4ID0gSFNWVG9IZXgoZGFya2VyQ29sb3JIU1YuaCwgZGFya2VyQ29sb3JIU1YucywgZGFya2VyQ29sb3JIU1Yudik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhleCA9IEhTVlRvSGV4KGxpZ2h0ZXJDb2xvckhTVi5oLCBsaWdodGVyQ29sb3JIU1YucywgbGlnaHRlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q29sb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgZGVmYXVsdENvbG9yLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IGRlZmF1bHRDb2xvci5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5ob3ZlciAmJiBpbnB1dENvbG9yLmhvdmVyLmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuYmFja2dyb3VuZCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogaXNTdHJpbmcoaW5wdXRDb2xvci5oaWdobGlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBSR0IgXFw8MCwgMjU1XFw+IGludG8gSFNWIG9iamVjdC5cclxuICpcclxuICogQHJlbWFya3NcclxuICoge0BsaW5rIGh0dHA6Ly93d3cuamF2YXNjcmlwdGVyLm5ldC9mYXEvcmdiMmhzdi5odG19XHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhTViBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBSR0JUb0hTVihyZWQsIGdyZWVuLCBibHVlKSB7XHJcbiAgICByZWQgPSByZWQgLyAyNTU7XHJcbiAgICBncmVlbiA9IGdyZWVuIC8gMjU1O1xyXG4gICAgYmx1ZSA9IGJsdWUgLyAyNTU7XHJcbiAgICBjb25zdCBtaW5SR0IgPSBNYXRoLm1pbihyZWQsIE1hdGgubWluKGdyZWVuLCBibHVlKSk7XHJcbiAgICBjb25zdCBtYXhSR0IgPSBNYXRoLm1heChyZWQsIE1hdGgubWF4KGdyZWVuLCBibHVlKSk7XHJcbiAgICAvLyBCbGFjay1ncmF5LXdoaXRlXHJcbiAgICBpZiAobWluUkdCID09PSBtYXhSR0IpIHtcclxuICAgICAgICByZXR1cm4geyBoOiAwLCBzOiAwLCB2OiBtaW5SR0IgfTtcclxuICAgIH1cclxuICAgIC8vIENvbG9ycyBvdGhlciB0aGFuIGJsYWNrLWdyYXktd2hpdGU6XHJcbiAgICBjb25zdCBkID0gcmVkID09PSBtaW5SR0IgPyBncmVlbiAtIGJsdWUgOiBibHVlID09PSBtaW5SR0IgPyByZWQgLSBncmVlbiA6IGJsdWUgLSByZWQ7XHJcbiAgICBjb25zdCBoID0gcmVkID09PSBtaW5SR0IgPyAzIDogYmx1ZSA9PT0gbWluUkdCID8gMSA6IDU7XHJcbiAgICBjb25zdCBodWUgPSAoNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSkpIC8gMzYwO1xyXG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IChtYXhSR0IgLSBtaW5SR0IpIC8gbWF4UkdCO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtYXhSR0I7XHJcbiAgICByZXR1cm4geyBoOiBodWUsIHM6IHNhdHVyYXRpb24sIHY6IHZhbHVlIH07XHJcbn1cclxuLyoqXHJcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBpbnRvIGFuIG9iamVjdCB3aXRoIGtleS92YWx1ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gQ1NTIHNvdXJjZSBjb2RlIHRvIHNwbGl0IGludG8ga2V5L3ZhbHVlIG9iamVjdC5cclxuICogQHJldHVybnMgS2V5L3ZhbHVlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHtAbGluayBjc3NUZXh0fS5cclxuICovXHJcbmZ1bmN0aW9uIHNwbGl0Q1NTVGV4dChjc3NUZXh0KSB7XHJcbiAgICBjb25zdCB0bXBFbGxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB7fTtcclxuICAgIHRtcEVsbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bXBFbGxlbWVudC5zdHlsZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIHN0eWxlc1t0bXBFbGxlbWVudC5zdHlsZVtpXV0gPSB0bXBFbGxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRtcEVsbGVtZW50LnN0eWxlW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbn1cclxuLyoqXHJcbiAqIEFwcGVuZCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgdG8gYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgc3R5bGVzLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgYXBwZW5kZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDc3NUZXh0KGVsZW1lbnQsIGNzc1RleHQpIHtcclxuICAgIGNvbnN0IGNzc1N0eWxlID0gc3BsaXRDU1NUZXh0KGNzc1RleHQpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3NzU3R5bGUpKSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCBzdHlsZXMgc2hvdWxkIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gVGhlIHN0eWxlcyB0byBiZSByZW1vdmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamlqYWNrc29uLzUzMTEyNTZ9XHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb1JHQihoLCBzLCB2KSB7XHJcbiAgICBsZXQgcjtcclxuICAgIGxldCBnO1xyXG4gICAgbGV0IGI7XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihoICogNik7XHJcbiAgICBjb25zdCBmID0gaCAqIDYgLSBpO1xyXG4gICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xyXG4gICAgY29uc3QgcSA9IHYgKiAoMSAtIGYgKiBzKTtcclxuICAgIGNvbnN0IHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyk7XHJcbiAgICBzd2l0Y2ggKGkgJSA2KSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAociA9IHYpLCAoZyA9IHQpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIChyID0gcSksIChnID0gdiksIChiID0gcCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSB2KSwgKGIgPSB0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAociA9IHApLCAoZyA9IHEpLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIChyID0gdCksIChnID0gcCksIChiID0gdik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSBwKSwgKGIgPSBxKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHI6IE1hdGguZmxvb3IociAqIDI1NSksXHJcbiAgICAgICAgZzogTWF0aC5mbG9vcihnICogMjU1KSxcclxuICAgICAgICBiOiBNYXRoLmZsb29yKGIgKiAyNTUpLFxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb0hleChoLCBzLCB2KSB7XHJcbiAgICBjb25zdCByZ2IgPSBIU1ZUb1JHQihoLCBzLCB2KTtcclxuICAgIHJldHVybiBSR0JUb0hleChyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBoZXggY29sb3Igc3RyaW5nIGludG8gSFNWIFxcPDAsIDFcXD4uXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gaGV4VG9IU1YoaGV4KSB7XHJcbiAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihoZXgpO1xyXG4gICAgaWYgKCFyZ2IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHtoZXh9JyBpcyBub3QgYSB2YWxpZCBjb2xvci5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSR0JUb0hTVihyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgaGV4IGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIGhleCAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xyXG4gICAgY29uc3QgaXNPayA9IC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XHJcbiAgICByZXR1cm4gaXNPaztcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCIGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHJnYiAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCKHJnYikge1xyXG4gICAgcmV0dXJuIHJnYlJFLnRlc3QocmdiKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCQSBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2JhIC0gVW5rbm93biBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBhIGNvbG9yLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzVmFsaWRSR0JBKHJnYmEpIHtcclxuICAgIHJldHVybiByZ2JhUkUudGVzdChyZ2JhKTtcclxufVxyXG4vKipcclxuICogVGhpcyByZWN1cnNpdmVseSByZWRpcmVjdHMgdGhlIHByb3RvdHlwZSBvZiBKU09OIG9iamVjdHMgdG8gdGhlIHJlZmVyZW5jZU9iamVjdC5cclxuICogVGhpcyBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZHMgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHRvIGJlIGJyaWRnZWQuXHJcbiAqIEBwYXJhbSByZWZlcmVuY2VPYmplY3QgLSBUaGUgb3JpZ2luYWwgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVCcmlkZ2VPYmplY3QoZmllbGRzLCByZWZlcmVuY2VPYmplY3QpIHtcclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIHJlZmVyZW5jZU9iamVjdCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIC8vICEhISB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICBjb25zdCBvYmplY3RUbyA9IE9iamVjdC5jcmVhdGUocmVmZXJlbmNlT2JqZWN0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZmVyZW5jZU9iamVjdCwgZmllbGRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0VG9bZmllbGRzW2ldXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFRvO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgVGhlIEVsZW1lbnQgaWYgdGhlIHJlZmVyZW5jZU9iamVjdCBpcyBhbiBFbGVtZW50LCBvciBhIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiByZWZlcmVuY2VPYmplY3QgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gQXZvaWQgYnJpZGdpbmcgRE9NIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlT2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGkpKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ldID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFRvW2ldID0gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0VG87XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgc3RhYmxlIHNvcnQgaW1wbGVtZW50YXRpb24sIHZlcnkgZmFzdCBmb3IgcHJlc29ydGVkIGRhdGEuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIGFycmF5IHRvIGJlIHNvcnRlZCAoaW4tcGxhY2UpLlxyXG4gKiBAcGFyYW0gY29tcGFyZSAtIEFuIG9yZGVyIGNvbXBhcmF0b3IuXHJcbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5zZXJ0U29ydChhLCBjb21wYXJlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBrID0gYVtpXTtcclxuICAgICAgICBsZXQgajtcclxuICAgICAgICBmb3IgKGogPSBpOyBqID4gMCAmJiBjb21wYXJlKGssIGFbaiAtIDFdKSA8IDA7IGotLSkge1xyXG4gICAgICAgICAgICBhW2pdID0gYVtqIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFbal0gPSBrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIG9wdGlvbnMgb2Ygc3Vib2JqZWN0cyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXHJcbiAqXHJcbiAqIEEgcmVxdWlyZW1lbnQgb2YgdGhlc2Ugc3Vib2JqZWN0cyBpcyB0aGF0IHRoZXkgaGF2ZSBhbiAnZW5hYmxlZCcgZWxlbWVudFxyXG4gKiB3aGljaCBpcyBvcHRpb25hbCBmb3IgdGhlIHVzZXIgYnV0IG1hbmRhdG9yeSBmb3IgdGhlIHByb2dyYW0uXHJcbiAqXHJcbiAqIFRoZSBhZGRlZCB2YWx1ZSBoZXJlIG9mIHRoZSBtZXJnZSBpcyB0aGF0IG9wdGlvbiAnZW5hYmxlZCcgaXMgc2V0IGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWVyZ2VUYXJnZXQgLSBFaXRoZXIgdGhpcy5vcHRpb25zIG9yIHRoZSBvcHRpb25zIHVzZWQgZm9yIHRoZSBncm91cHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICogQHBhcmFtIG9wdGlvbiAtIE9wdGlvbiBrZXkgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSBnbG9iYWxPcHRpb25zIC0gR2xvYmFsIG9wdGlvbnMsIHBhc3NlZCBpbiB0byBkZXRlcm1pbmUgdmFsdWUgb2Ygb3B0aW9uICdlbmFibGVkJy5cclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhtZXJnZVRhcmdldCwgb3B0aW9ucywgb3B0aW9uLCBnbG9iYWxPcHRpb25zID0ge30pIHtcclxuICAgIC8vIExvY2FsIGhlbHBlcnNcclxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9iaiAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIjtcclxuICAgIH07XHJcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzQ0OTEyODcvMTIyMzUzMVxyXG4gICAgY29uc3QgaXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHggaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCB4KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8vIEd1YXJkc1xyXG4gICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbWVyZ2VUYXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzUHJlc2VudChvcHRpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgZ2xvYmFsT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyBBY3R1YWwgbWVyZ2Ugcm91dGluZSwgc2VwYXJhdGVkIGZyb20gbWFpbiBsb2dpY1xyXG4gICAgLy8gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBvcHRpb25zIGlzIG1lcmdlZC4gRGVlcGVyIGxldmVscyBhcmUgcmVmJ2QuIFRoaXMgbWF5IGFjdHVhbGx5IGJlIGFuIGlzc3VlLlxyXG4gICAgLy9cclxuICAgIGNvbnN0IGRvTWVyZ2UgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KHRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbb3B0aW9uXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcmMgPSBvcHRpb25zW29wdGlvbl07XHJcbiAgICAgICAgY29uc3QgZHN0ID0gdGFyZ2V0W29wdGlvbl07XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNyYywgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRzdFtwcm9wXSA9IHNyY1twcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBMb2NhbCBpbml0aWFsaXphdGlvblxyXG4gICAgY29uc3Qgc3JjT3B0aW9uID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgY29uc3QgZ2xvYmFsUGFzc2VkID0gaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykgJiYgIWlzRW1wdHkoZ2xvYmFsT3B0aW9ucyk7XHJcbiAgICBjb25zdCBnbG9iYWxPcHRpb24gPSBnbG9iYWxQYXNzZWQgPyBnbG9iYWxPcHRpb25zW29wdGlvbl0gOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBnbG9iYWxFbmFibGVkID0gZ2xvYmFsT3B0aW9uID8gZ2xvYmFsT3B0aW9uLmVuYWJsZWQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTWFpbiByb3V0aW5lXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgaWYgKHNyY09wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNyY09wdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gc3JjT3B0aW9uO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChzcmNPcHRpb24gPT09IG51bGwgJiYgIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgLy8gSWYgcG9zc2libGUsIGV4cGxpY2l0IGNvcHkgZnJvbSBnbG9iYWxzXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChnbG9iYWxPcHRpb24pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KHNyY09wdGlvbikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gRW5zdXJlIHRoYXQgJ2VuYWJsZWQnIGlzIHByb3Blcmx5IHNldC4gSXQgaXMgcmVxdWlyZWQgaW50ZXJuYWxseVxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBmcm9tIG9wdGlvbnMgd2lsbCBhbHdheXMgb3ZlcndyaXRlIHRoZSBleGlzdGluZyB2YWx1ZVxyXG4gICAgLy9cclxuICAgIGxldCBlbmFibGVkID0gdHJ1ZTsgLy8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgaWYgKHNyY09wdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBlbmFibGVkID0gc3JjT3B0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBUYWtlIGZyb20gZ2xvYmFscywgaWYgcHJlc2VudFxyXG4gICAgICAgIGlmIChnbG9iYWxFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IGdsb2JhbE9wdGlvbi5lbmFibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRvTWVyZ2UobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbik7XHJcbiAgICBtZXJnZVRhcmdldFtvcHRpb25dLmVuYWJsZWQgPSBlbmFibGVkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBiaW5hcnkgc2VhcmNoIGZvciBhIHZpc2libGUgaXRlbSBpbiBhIHNvcnRlZCBsaXN0LiBJZiB3ZSBmaW5kIGEgdmlzaWJsZSBpdGVtLCB0aGUgY29kZSB0aGF0IHVzZXNcclxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4gaXRlcmF0ZSBpbiBib3RoIGRpcmVjdGlvbnMgb3ZlciB0aGlzIHNvcnRlZCBsaXN0IHRvIGZpbmQgYWxsIHZpc2libGUgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBJdGVtcyBvcmRlcmVkIGJ5IHN0YXJ0LlxyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIC0xIGlzIGxvd2VyLCAwIGlzIGVxdWFsLCAxIGlzIGhpZ2hlci5cclxuICogQHBhcmFtIGZpZWxkIC0gUHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdKS5cclxuICogQHBhcmFtIGZpZWxkMiAtIFNlY29uZCBwcm9wZXJ0eSBuYW1lIG9uIGFuIGl0ZW0gKFRoYXQgaXMgaXRlbVtmaWVsZF1bZmllbGQyXSkuXHJcbiAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBmb3VuZCBpdGVtIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoQ3VzdG9tKG9yZGVyZWRJdGVtcywgY29tcGFyYXRvciwgZmllbGQsIGZpZWxkMikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQyID09PSB1bmRlZmluZWQgPyBpdGVtW2ZpZWxkXSA6IGl0ZW1bZmllbGRdW2ZpZWxkMl07XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGppaGFhLCBmb3VuZCBhIHZpc2libGUgaXRlbSFcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoUmVzdWx0ID09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBzbWFsbCAtLT4gaW5jcmVhc2UgbG93XHJcbiAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyB2YWx1ZSBpbiBhIHNvcnRlZCBhcnJheS5cclxuICogSWYgaXQgZG9lcyBub3QgZXhpc3QgYnV0IGlzIGluIGJldHdlZW4gb2YgdHdvIHZhbHVlcywgd2UgcmV0dXJuIGVpdGhlciB0aGVcclxuICogb25lIGJlZm9yZSBvciB0aGUgb25lIGFmdGVyLCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCBJZiBpdCBpcyBmb3VuZCwgd2VcclxuICogcmV0dXJuIHRoZSBpbmRleCwgZWxzZSAtMS5cclxuICpcclxuICogQHBhcmFtIG9yZGVyZWRJdGVtcyAtIFNvcnRlZCBhcnJheS5cclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSBzZWFyY2hlZCB2YWx1ZS5cclxuICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gaXRlbXMgdG8gYmUgc2VhcmNoZWQuXHJcbiAqIEBwYXJhbSBzaWRlUHJlZmVyZW5jZSAtIElmIHRoZSB0YXJnZXQgaXMgYmV0d2VlbiB0d28gdmFsdWVzLCBzaG91bGQgdGhlIGluZGV4IG9mIHRoZSBiZWZvcmUgb3IgdGhlIGFmdGVyIGJlIHJldHVybmVkP1xyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIEFuIG9wdGlvbmFsIGNvbXBhcmF0b3IsIHJldHVybmluZyAtMSwgMCwgMSBmb3IgXFw8LCA9PT0sIFxcPi5cclxuICogQHJldHVybnMgVGhlIGluZGV4IG9mIGZvdW5kIHZhbHVlIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoVmFsdWUob3JkZXJlZEl0ZW1zLCB0YXJnZXQsIGZpZWxkLCBzaWRlUHJlZmVyZW5jZSwgY29tcGFyYXRvcikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgcHJldlZhbHVlO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IG5leHRWYWx1ZTtcclxuICAgIGxldCBtaWRkbGU7XHJcbiAgICBjb21wYXJhdG9yID1cclxuICAgICAgICBjb21wYXJhdG9yICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGNvbXBhcmF0b3JcclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYiA/IDAgOiBhIDwgYiA/IC0xIDogMTtcclxuICAgICAgICAgICAgfTtcclxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKSB7XHJcbiAgICAgICAgLy8gZ2V0IGEgbmV3IGd1ZXNzXHJcbiAgICAgICAgbWlkZGxlID0gTWF0aC5mbG9vcigwLjUgKiAoaGlnaCArIGxvdykpO1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IG9yZGVyZWRJdGVtc1tNYXRoLm1heCgwLCBtaWRkbGUgLSAxKV1bZmllbGRdO1xyXG4gICAgICAgIHZhbHVlID0gb3JkZXJlZEl0ZW1zW21pZGRsZV1bZmllbGRdO1xyXG4gICAgICAgIG5leHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIG9yZGVyZWRJdGVtc1tNYXRoLm1pbihvcmRlcmVkSXRlbXMubGVuZ3RoIC0gMSwgbWlkZGxlICsgMSldW2ZpZWxkXTtcclxuICAgICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcihwcmV2VmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCIgPyBNYXRoLm1heCgwLCBtaWRkbGUgLSAxKSA6IG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA8IDAgJiZcclxuICAgICAgICAgICAgY29tcGFyYXRvcihuZXh0VmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dFxyXG4gICAgICAgICAgICByZXR1cm4gc2lkZVByZWZlcmVuY2UgPT0gXCJiZWZvcmVcIlxyXG4gICAgICAgICAgICAgICAgPyBtaWRkbGVcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlkbnQgZmluZCB0aGUgdGFyZ2V0LCB3ZSBuZWVkIHRvIGNoYW5nZSBvdXIgYm91bmRhcmllcy5cclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICAgICAgbG93ID0gbWlkZGxlICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBiaWcgLS0+IGRlY3JlYXNlIGhpZ2hcclxuICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgfVxyXG4gICAgLy8gZGlkbnQgZmluZCBhbnl0aGluZy4gUmV0dXJuIC0xLlxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qXHJcbiAqIEVhc2luZyBGdW5jdGlvbnMuXHJcbiAqIE9ubHkgY29uc2lkZXJpbmcgdGhlIHQgdmFsdWUgZm9yIHRoZSByYW5nZSBbMCwgMV0gPT4gWzAsIDFdLlxyXG4gKlxyXG4gKiBJbnNwaXJhdGlvbjogZnJvbSBodHRwOi8vZ2l6bWEuY29tL2Vhc2luZy9cclxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTRcclxuICovXHJcbmNvbnN0IGVhc2luZ0Z1bmN0aW9ucyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgbm8gZWFzaW5nIGFuZCBubyBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBsaW5lYXIodCkge1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5RdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5DdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRDdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gMSAtIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKyAtLXQgKiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAxNiAqIHQgKiB0ICogdCAqIHQgKiB0IDogMSArIDE2ICogLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFeHBlcmltZW50YWx5IGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRoZSBzY3JvbGxiYXIgZm9yIHRoaXMgYnJvd3Nlci5cclxuICpcclxuICogQHJldHVybnMgVGhlIHdpZHRoIGluIHBpeGVscy5cclxuICovXHJcbmZ1bmN0aW9uIGdldFNjcm9sbEJhcldpZHRoKCkge1xyXG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGlubmVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XHJcbiAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIG91dGVyLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSBcIjIwMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcclxuICAgIGNvbnN0IHcxID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XHJcbiAgICBsZXQgdzIgPSBpbm5lci5vZmZzZXRXaWR0aDtcclxuICAgIGlmICh3MSA9PSB3Mikge1xyXG4gICAgICAgIHcyID0gb3V0ZXIuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcclxuICAgIHJldHVybiB3MSAtIHcyO1xyXG59XHJcbi8vIEBUT0RPOiBUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseS5cclxuLy8gSXQgd29ya3Mgb25seSBmb3Igc2luZ2xlIHByb3BlcnR5IG9iamVjdHMsXHJcbi8vIG90aGVyd2lzZSBpdCBjb21iaW5lcyBhbGwgb2YgdGhlIHR5cGVzIGluIGEgdW5pb24uXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBWMT4gKFxyXG4vLyAgIHBpbGU6IFJlY29yZDxLMSwgdW5kZWZpbmVkIHwgVjE+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBLMSB8IFtLMV1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjFcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIHRvcE1vc3Q8SzEgZXh0ZW5kcyBzdHJpbmcsIEsyIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjI+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgSzMgZXh0ZW5kcyBzdHJpbmcsIFYxLCBWMiwgVjM+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMiB8IFJlY29yZDxLMywgdW5kZWZpbmVkIHwgVjM+Pj5bXSxcclxuLy8gICBhY2Nlc3NvcnM6IFtLMSwgSzIsIEszXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyIHwgVjNcclxuLyoqXHJcbiAqIEdldCB0aGUgdG9wIG1vc3QgcHJvcGVydHkgdmFsdWUgZnJvbSBhIHBpbGUgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHBhcmFtIHBpbGUgLSBBcnJheSBvZiBvYmplY3RzLCBubyByZXF1aXJlZCBmb3JtYXQuXHJcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cclxuICogRm9yIGV4YW1wbGUgYG9iamVjdFsnZm9vJ11bJ2JhciddYCDihpIgYFsnZm9vJywgJ2JhciddYC5cclxuICogQHJldHVybnMgVmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGggZ2l2ZW4gYWNjZXNzb3JzIHBhdGggZnJvbSB0aGUgZmlyc3QgcGlsZSBpdGVtIHdoZXJlIGl0J3Mgbm90IHVuZGVmaW5lZC5cclxuICovXHJcbmZ1bmN0aW9uIHRvcE1vc3QocGlsZSwgYWNjZXNzb3JzKSB7XHJcbiAgICBsZXQgY2FuZGlkYXRlO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjY2Vzc29ycykpIHtcclxuICAgICAgICBhY2Nlc3NvcnMgPSBbYWNjZXNzb3JzXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHBpbGUpIHtcclxuICAgICAgICBpZiAobWVtYmVyKSB7XHJcbiAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG1lbWJlclthY2Nlc3NvcnNbMF1dO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVthY2Nlc3NvcnNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjYW5kaWRhdGU7XHJcbn1cblxuY29uc3QgaHRtbENvbG9ycyA9IHtcbiAgYmxhY2s6IFwiIzAwMDAwMFwiLFxuICBuYXZ5OiBcIiMwMDAwODBcIixcbiAgZGFya2JsdWU6IFwiIzAwMDA4QlwiLFxuICBtZWRpdW1ibHVlOiBcIiMwMDAwQ0RcIixcbiAgYmx1ZTogXCIjMDAwMEZGXCIsXG4gIGRhcmtncmVlbjogXCIjMDA2NDAwXCIsXG4gIGdyZWVuOiBcIiMwMDgwMDBcIixcbiAgdGVhbDogXCIjMDA4MDgwXCIsXG4gIGRhcmtjeWFuOiBcIiMwMDhCOEJcIixcbiAgZGVlcHNreWJsdWU6IFwiIzAwQkZGRlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIiMwMENFRDFcIixcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiIzAwRkE5QVwiLFxuICBsaW1lOiBcIiMwMEZGMDBcIixcbiAgc3ByaW5nZ3JlZW46IFwiIzAwRkY3RlwiLFxuICBhcXVhOiBcIiMwMEZGRkZcIixcbiAgY3lhbjogXCIjMDBGRkZGXCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIjMTkxOTcwXCIsXG4gIGRvZGdlcmJsdWU6IFwiIzFFOTBGRlwiLFxuICBsaWdodHNlYWdyZWVuOiBcIiMyMEIyQUFcIixcbiAgZm9yZXN0Z3JlZW46IFwiIzIyOEIyMlwiLFxuICBzZWFncmVlbjogXCIjMkU4QjU3XCIsXG4gIGRhcmtzbGF0ZWdyYXk6IFwiIzJGNEY0RlwiLFxuICBsaW1lZ3JlZW46IFwiIzMyQ0QzMlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIjM0NCMzcxXCIsXG4gIHR1cnF1b2lzZTogXCIjNDBFMEQwXCIsXG4gIHJveWFsYmx1ZTogXCIjNDE2OUUxXCIsXG4gIHN0ZWVsYmx1ZTogXCIjNDY4MkI0XCIsXG4gIGRhcmtzbGF0ZWJsdWU6IFwiIzQ4M0Q4QlwiLFxuICBtZWRpdW10dXJxdW9pc2U6IFwiIzQ4RDFDQ1wiLFxuICBpbmRpZ286IFwiIzRCMDA4MlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCIjNTU2QjJGXCIsXG4gIGNhZGV0Ymx1ZTogXCIjNUY5RUEwXCIsXG4gIGNvcm5mbG93ZXJibHVlOiBcIiM2NDk1RURcIixcbiAgbWVkaXVtYXF1YW1hcmluZTogXCIjNjZDREFBXCIsXG4gIGRpbWdyYXk6IFwiIzY5Njk2OVwiLFxuICBzbGF0ZWJsdWU6IFwiIzZBNUFDRFwiLFxuICBvbGl2ZWRyYWI6IFwiIzZCOEUyM1wiLFxuICBzbGF0ZWdyYXk6IFwiIzcwODA5MFwiLFxuICBsaWdodHNsYXRlZ3JheTogXCIjNzc4ODk5XCIsXG4gIG1lZGl1bXNsYXRlYmx1ZTogXCIjN0I2OEVFXCIsXG4gIGxhd25ncmVlbjogXCIjN0NGQzAwXCIsXG4gIGNoYXJ0cmV1c2U6IFwiIzdGRkYwMFwiLFxuICBhcXVhbWFyaW5lOiBcIiM3RkZGRDRcIixcbiAgbWFyb29uOiBcIiM4MDAwMDBcIixcbiAgcHVycGxlOiBcIiM4MDAwODBcIixcbiAgb2xpdmU6IFwiIzgwODAwMFwiLFxuICBncmF5OiBcIiM4MDgwODBcIixcbiAgc2t5Ymx1ZTogXCIjODdDRUVCXCIsXG4gIGxpZ2h0c2t5Ymx1ZTogXCIjODdDRUZBXCIsXG4gIGJsdWV2aW9sZXQ6IFwiIzhBMkJFMlwiLFxuICBkYXJrcmVkOiBcIiM4QjAwMDBcIixcbiAgZGFya21hZ2VudGE6IFwiIzhCMDA4QlwiLFxuICBzYWRkbGVicm93bjogXCIjOEI0NTEzXCIsXG4gIGRhcmtzZWFncmVlbjogXCIjOEZCQzhGXCIsXG4gIGxpZ2h0Z3JlZW46IFwiIzkwRUU5MFwiLFxuICBtZWRpdW1wdXJwbGU6IFwiIzkzNzBEOFwiLFxuICBkYXJrdmlvbGV0OiBcIiM5NDAwRDNcIixcbiAgcGFsZWdyZWVuOiBcIiM5OEZCOThcIixcbiAgZGFya29yY2hpZDogXCIjOTkzMkNDXCIsXG4gIHllbGxvd2dyZWVuOiBcIiM5QUNEMzJcIixcbiAgc2llbm5hOiBcIiNBMDUyMkRcIixcbiAgYnJvd246IFwiI0E1MkEyQVwiLFxuICBkYXJrZ3JheTogXCIjQTlBOUE5XCIsXG4gIGxpZ2h0Ymx1ZTogXCIjQUREOEU2XCIsXG4gIGdyZWVueWVsbG93OiBcIiNBREZGMkZcIixcbiAgcGFsZXR1cnF1b2lzZTogXCIjQUZFRUVFXCIsXG4gIGxpZ2h0c3RlZWxibHVlOiBcIiNCMEM0REVcIixcbiAgcG93ZGVyYmx1ZTogXCIjQjBFMEU2XCIsXG4gIGZpcmVicmljazogXCIjQjIyMjIyXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiI0I4ODYwQlwiLFxuICBtZWRpdW1vcmNoaWQ6IFwiI0JBNTVEM1wiLFxuICByb3N5YnJvd246IFwiI0JDOEY4RlwiLFxuICBkYXJra2hha2k6IFwiI0JEQjc2QlwiLFxuICBzaWx2ZXI6IFwiI0MwQzBDMFwiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiI0M3MTU4NVwiLFxuICBpbmRpYW5yZWQ6IFwiI0NENUM1Q1wiLFxuICBwZXJ1OiBcIiNDRDg1M0ZcIixcbiAgY2hvY29sYXRlOiBcIiNEMjY5MUVcIixcbiAgdGFuOiBcIiNEMkI0OENcIixcbiAgbGlnaHRncmV5OiBcIiNEM0QzRDNcIixcbiAgcGFsZXZpb2xldHJlZDogXCIjRDg3MDkzXCIsXG4gIHRoaXN0bGU6IFwiI0Q4QkZEOFwiLFxuICBvcmNoaWQ6IFwiI0RBNzBENlwiLFxuICBnb2xkZW5yb2Q6IFwiI0RBQTUyMFwiLFxuICBjcmltc29uOiBcIiNEQzE0M0NcIixcbiAgZ2FpbnNib3JvOiBcIiNEQ0RDRENcIixcbiAgcGx1bTogXCIjRERBMEREXCIsXG4gIGJ1cmx5d29vZDogXCIjREVCODg3XCIsXG4gIGxpZ2h0Y3lhbjogXCIjRTBGRkZGXCIsXG4gIGxhdmVuZGVyOiBcIiNFNkU2RkFcIixcbiAgZGFya3NhbG1vbjogXCIjRTk5NjdBXCIsXG4gIHZpb2xldDogXCIjRUU4MkVFXCIsXG4gIHBhbGVnb2xkZW5yb2Q6IFwiI0VFRThBQVwiLFxuICBsaWdodGNvcmFsOiBcIiNGMDgwODBcIixcbiAga2hha2k6IFwiI0YwRTY4Q1wiLFxuICBhbGljZWJsdWU6IFwiI0YwRjhGRlwiLFxuICBob25leWRldzogXCIjRjBGRkYwXCIsXG4gIGF6dXJlOiBcIiNGMEZGRkZcIixcbiAgc2FuZHlicm93bjogXCIjRjRBNDYwXCIsXG4gIHdoZWF0OiBcIiNGNURFQjNcIixcbiAgYmVpZ2U6IFwiI0Y1RjVEQ1wiLFxuICB3aGl0ZXNtb2tlOiBcIiNGNUY1RjVcIixcbiAgbWludGNyZWFtOiBcIiNGNUZGRkFcIixcbiAgZ2hvc3R3aGl0ZTogXCIjRjhGOEZGXCIsXG4gIHNhbG1vbjogXCIjRkE4MDcyXCIsXG4gIGFudGlxdWV3aGl0ZTogXCIjRkFFQkQ3XCIsXG4gIGxpbmVuOiBcIiNGQUYwRTZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiI0ZBRkFEMlwiLFxuICBvbGRsYWNlOiBcIiNGREY1RTZcIixcbiAgcmVkOiBcIiNGRjAwMDBcIixcbiAgZnVjaHNpYTogXCIjRkYwMEZGXCIsXG4gIG1hZ2VudGE6IFwiI0ZGMDBGRlwiLFxuICBkZWVwcGluazogXCIjRkYxNDkzXCIsXG4gIG9yYW5nZXJlZDogXCIjRkY0NTAwXCIsXG4gIHRvbWF0bzogXCIjRkY2MzQ3XCIsXG4gIGhvdHBpbms6IFwiI0ZGNjlCNFwiLFxuICBjb3JhbDogXCIjRkY3RjUwXCIsXG4gIGRhcmtvcmFuZ2U6IFwiI0ZGOEMwMFwiLFxuICBsaWdodHNhbG1vbjogXCIjRkZBMDdBXCIsXG4gIG9yYW5nZTogXCIjRkZBNTAwXCIsXG4gIGxpZ2h0cGluazogXCIjRkZCNkMxXCIsXG4gIHBpbms6IFwiI0ZGQzBDQlwiLFxuICBnb2xkOiBcIiNGRkQ3MDBcIixcbiAgcGVhY2hwdWZmOiBcIiNGRkRBQjlcIixcbiAgbmF2YWpvd2hpdGU6IFwiI0ZGREVBRFwiLFxuICBtb2NjYXNpbjogXCIjRkZFNEI1XCIsXG4gIGJpc3F1ZTogXCIjRkZFNEM0XCIsXG4gIG1pc3R5cm9zZTogXCIjRkZFNEUxXCIsXG4gIGJsYW5jaGVkYWxtb25kOiBcIiNGRkVCQ0RcIixcbiAgcGFwYXlhd2hpcDogXCIjRkZFRkQ1XCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiI0ZGRjBGNVwiLFxuICBzZWFzaGVsbDogXCIjRkZGNUVFXCIsXG4gIGNvcm5zaWxrOiBcIiNGRkY4RENcIixcbiAgbGVtb25jaGlmZm9uOiBcIiNGRkZBQ0RcIixcbiAgZmxvcmFsd2hpdGU6IFwiI0ZGRkFGMFwiLFxuICBzbm93OiBcIiNGRkZBRkFcIixcbiAgeWVsbG93OiBcIiNGRkZGMDBcIixcbiAgbGlnaHR5ZWxsb3c6IFwiI0ZGRkZFMFwiLFxuICBpdm9yeTogXCIjRkZGRkYwXCIsXG4gIHdoaXRlOiBcIiNGRkZGRkZcIixcbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gKi9cbmxldCBDb2xvclBpY2tlciQxID0gY2xhc3MgQ29sb3JQaWNrZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwaXhlbFJhdGlvID0gMSkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiAyODkgLyAyLCB5OiAyODkgLyAyIH07XG4gICAgdGhpcy5yID0gMjg5ICogMC40OTtcbiAgICB0aGlzLmNvbG9yID0geyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhOiAxLjAgfTtcbiAgICB0aGlzLmh1ZUNpcmNsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmluaXRpYWxDb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5wcmV2aW91c0NvbG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLy8gYm91bmQgYnlcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gKCkgPT4ge307XG5cbiAgICAvLyBjcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgIHRoaXMuX2NyZWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgaW5zZXJ0cyB0aGUgY29sb3JQaWNrZXIgaW50byBhIGRpdiBmcm9tIHRoZSBET01cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAgICovXG4gIGluc2VydFRvKGNvbnRhaW5lcikge1xuICAgIGlmICh0aGlzLmhhbW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuXG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldFVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIG9uIGFwcGx5IGFuZCBzYXZlLiBCaW5kIGl0IHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgc2V0Q2xvc2VDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIGNsb3NpbmcgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gaHRtbENvbG9yc1tjb2xvcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29sb3Igb2YgdGhlIGNvbG9yUGlja2VyXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAncmVkJyAgICAgICAgICAgICAgICAgICAtLT4gSFRNTCBjb2xvciBzdHJpbmdcbiAgICogJyNmZmZmZmYnICAgICAgICAgICAgICAgLS0+IGhleCBzdHJpbmdcbiAgICogJ3JnYigyNTUsMjU1LDI1NSknICAgICAgLS0+IHJnYiBzdHJpbmdcbiAgICogJ3JnYmEoMjU1LDI1NSwyNTUsMS4wKScgLS0+IHJnYmEgc3RyaW5nXG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NX0gICAgIC0tPiByZ2Igb2JqZWN0XG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NSxhOjEuMH0gLS0+IHJnYmEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgb2JqZWN0fSBjb2xvclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqL1xuICBzZXRDb2xvcihjb2xvciwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICBpZiAoY29sb3IgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJnYmE7XG5cbiAgICAvLyBpZiBhIGh0bWwgY29sb3Igc2hvcnRoYW5kIGlzIHVzZWQsIGNvbnZlcnQgdG8gaGV4XG4gICAgY29uc3QgaHRtbENvbG9yID0gdGhpcy5faXNDb2xvclN0cmluZyhjb2xvcik7XG4gICAgaWYgKGh0bWxDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IGh0bWxDb2xvcjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3JtYXRcbiAgICBpZiAoaXNTdHJpbmcoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICBpZiAoaXNWYWxpZFJHQihjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDQpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA1KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYmFBcnJheVswXSwgZzogcmdiYUFycmF5WzFdLCBiOiByZ2JhQXJyYXlbMl0sIGE6IDEuMCB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkUkdCQShjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDUpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA2KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7XG4gICAgICAgICAgcjogcmdiYUFycmF5WzBdLFxuICAgICAgICAgIGc6IHJnYmFBcnJheVsxXSxcbiAgICAgICAgICBiOiByZ2JhQXJyYXlbMl0sXG4gICAgICAgICAgYTogcmdiYUFycmF5WzNdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZ2JPYmogPSBoZXhUb1JHQihjb2xvcik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYk9iai5yLCBnOiByZ2JPYmouZywgYjogcmdiT2JqLmIsIGE6IDEuMCB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbG9yLnIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmIgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhbHBoYSA9IGNvbG9yLmEgIT09IHVuZGVmaW5lZCA/IGNvbG9yLmEgOiBcIjEuMFwiO1xuICAgICAgICAgIHJnYmEgPSB7IHI6IGNvbG9yLnIsIGc6IGNvbG9yLmcsIGI6IGNvbG9yLmIsIGE6IGFscGhhIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBpZiAocmdiYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biBjb2xvciBwYXNzZWQgdG8gdGhlIGNvbG9yUGlja2VyLiBTdXBwb3J0ZWQgYXJlIHN0cmluZ3M6IHJnYiwgaGV4LCByZ2JhLiBPYmplY3Q6IHJnYiAoe3I6cixnOmcsYjpiLFthOmFdfSkuIFN1cHBsaWVkOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29sb3IpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzaG93cyB0aGUgY29sb3IgcGlja2VyLlxuICAgKiBUaGUgaHVlIGNpcmNsZSBpcyBjb25zdHJ1Y3RlZCBvbmNlIGFuZCBzdG9yZWQuXG4gICAqL1xuICBzaG93KCkge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHRoaXMuX2dlbmVyYXRlSHVlQ2lyY2xlKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwaWNrZXIuIElzIGNhbGxlZCBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogT3B0aW9uYWwgYm9vbGVhbiB0byBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIGVhc3kgYWNjZXNzIGxhdGVyIG9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZVByZXZpb3VzPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGlkZShzdG9yZVByZXZpb3VzID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBwcmV2aW91cyBjb2xvciBmb3IgbmV4dCB0aW1lO1xuICAgIGlmIChzdG9yZVByZXZpb3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQ29sb3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBsaWVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuaW5pdGlhbENvbG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICAgIC8vIGNhbGwgdGhlIGNsb3NpbmcgY2FsbGJhY2ssIHJlc3RvcmluZyB0aGUgb25jbGljayBtZXRob2QuXG4gICAgLy8gdGhpcyBpcyBpbiBhIHNldFRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgdGhlIHNob3cgYWdhaW4gYmVmb3JlIHRoZSBjbGljayBpcyBkb25lLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gdGhlIHNhdmUgYnV0dG9uLiBTYXZlcyBhbmQgaGlkZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2F2ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuX2hpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb3VuZCB0byBhcHBseSBidXR0b24uIFNhdmVzIGJ1dCBkb2VzIG5vdCBjbG9zZS4gSXMgdW5kb25lIGJ5IHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FwcGx5KCkge1xuICAgIHRoaXMuYXBwbGllZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogbG9hZCB0aGUgY29sb3IgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IodGhpcy5wcmV2aW91c0NvbG9yLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KFwiVGhlcmUgaXMgbm8gbGFzdCBjb2xvciB0byBsb2FkLi4uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGNvbG9yLCBwbGFjZSB0aGUgcGlja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZ2JhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NldEluaXRpYWw9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIGNvbG9yXG4gICAgaWYgKHNldEluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgcmdiYSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvciA9IHJnYmE7XG4gICAgY29uc3QgaHN2ID0gUkdCVG9IU1YocmdiYS5yLCByZ2JhLmcsIHJnYmEuYik7XG5cbiAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAyICogTWF0aC5QSTtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLnIgKiBoc3YucztcbiAgICBjb25zdCB4ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcbiAgICBjb25zdCB5ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIHggLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICB5IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudEhlaWdodCArIFwicHhcIjtcblxuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcihyZ2JhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBvcGFjaXR5IGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0T3BhY2l0eSh2YWx1ZSkge1xuICAgIHRoaXMuY29sb3IuYSA9IHZhbHVlIC8gMTAwO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBicmlnaHRuZXNzIGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJpZ2h0bmVzcyh2YWx1ZSkge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi52ID0gdmFsdWUgLyAxMDA7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgY29sb3IgcGlja2VyLiBBIGJsYWNrIGNpcmNsZSBvdmVybGF5cyB0aGUgaHVlIGNpcmNsZSB0byBtaW1pYyB0aGUgYnJpZ2h0bmVzcyBkZWNyZWFzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBpY2tlcihyZ2JhID0gdGhpcy5jb2xvcikge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgfVxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuXG4gICAgY3R4LnB1dEltYWdlRGF0YSh0aGlzLmh1ZUNpcmNsZSwgMCwgMCk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLDAsMCxcIiArICgxIC0gaHN2LnYpICsgXCIpXCI7XG4gICAgY3R4LmNpcmNsZSh0aGlzLmNlbnRlckNvb3JkaW5hdGVzLngsIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSwgdGhpcy5yKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudmFsdWUgPSAxMDAgKiBoc3YudjtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IDEwMCAqIHJnYmEuYTtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgY3JlYXRlIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFNpemUoKSB7XG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLndpZHRoID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuaGVpZ2h0ID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhbGwgZG9tIGVsZW1lbnRzXG4gICAqIFRPRE86IGNsZWFudXAsIGxvdHMgb2Ygc2ltaWxhciBkb20gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5mcmFtZS5jbGFzc05hbWUgPSBcInZpcy1jb2xvci1waWNrZXJcIjtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsYXNzTmFtZSA9IFwidmlzLXNlbGVjdG9yXCI7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcblxuICAgIGlmICghdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KSB7XG4gICAgICBjb25zdCBub0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7XG4gICAgICBub0NhbnZhcy5zdHlsZS5jb2xvciA9IFwicmVkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5wYWRkaW5nID0gXCIxMHB4XCI7XG4gICAgICBub0NhbnZhcy5pbm5lclRleHQgPSBcIkVycm9yOiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MIGNhbnZhc1wiO1xuICAgICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgKGN0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAxKTtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXNcbiAgICAgICAgLmdldENvbnRleHQoXCIyZFwiKVxuICAgICAgICAuc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbG9yXCI7XG5cbiAgICB0aGlzLm9wYWNpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eURpdi5jbGFzc05hbWUgPSBcInZpcy1vcGFjaXR5XCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0Rpdi5jbGFzc05hbWUgPSBcInZpcy1icmlnaHRuZXNzXCI7XG5cbiAgICB0aGlzLmFycm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmFycm93RGl2LmNsYXNzTmFtZSA9IFwidmlzLWFycm93XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS50eXBlID0gXCJyYW5nZVwiOyAvLyBOb3Qgc3VwcG9ydGVkIG9uIElFOVxuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWluID0gXCIwXCI7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5tYXggPSBcIjEwMFwiO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETzogQWRkIHNvbWUgZXJyb3IgaGFuZGxpbmcuXG4gICAgfVxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gXCIxMDBcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5jbGFzc05hbWUgPSBcInZpcy1yYW5nZVwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2LmFwcGVuZENoaWxkKHRoaXMub3BhY2l0eVJhbmdlKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuYXBwZW5kQ2hpbGQodGhpcy5icmlnaHRuZXNzUmFuZ2UpO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLWJyaWdodG5lc3NcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbC5pbm5lclRleHQgPSBcImJyaWdodG5lc3M6XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLW9wYWNpdHlcIjtcbiAgICB0aGlzLm9wYWNpdHlMYWJlbC5pbm5lclRleHQgPSBcIm9wYWNpdHk6XCI7XG5cbiAgICB0aGlzLm5ld0NvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmNsYXNzTmFtZSA9IFwidmlzLW5ldy1jb2xvclwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuaW5uZXJUZXh0ID0gXCJuZXdcIjtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1pbml0aWFsLWNvbG9yXCI7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuaW5uZXJUZXh0ID0gXCJpbml0aWFsXCI7XG5cbiAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1jYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBcImNhbmNlbFwiO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpO1xuXG4gICAgdGhpcy5hcHBseUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5pbm5lclRleHQgPSBcImFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fYXBwbHkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5zYXZlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtc2F2ZVwiO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5pbm5lclRleHQgPSBcInNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24ub25jbGljayA9IHRoaXMuX3NhdmUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubG9hZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5sb2FkQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtbG9hZFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5pbm5lclRleHQgPSBcImxvYWQgbGFzdFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fbG9hZExhc3QuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFycm93RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0xhYmVsKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uZXdDb2xvckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmluaXRpYWxDb2xvckRpdik7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2FuY2VsQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYXBwbHlCdXR0b24pO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5zYXZlQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubG9hZEJ1dHRvbik7XG4gIH1cblxuICAvKipcbiAgICogYmluZCBoYW1tZXIgdG8gdGhlIGNvbG9yIHBpY2tlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lciQxKHRoaXMuY29sb3JQaWNrZXJDYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuaGFtbWVyLm9uKFwiaGFtbWVyLmlucHV0XCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRmlyc3QpIHtcbiAgICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5zdGFydFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5tb3ZlXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIGh1ZSBjaXJjbGUuIFRoaXMgaXMgcmVsYXRpdmVseSBoZWF2eSAoMjAwbXMpIGFuZCBpcyBkb25lIG9ubHkgb25jZSBvbiB0aGUgZmlyc3QgdGltZSBpdCBpcyBzaG93bi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZW5lcmF0ZUh1ZUNpcmNsZSgpIHtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIDEpO1xuICAgICAgfVxuICAgICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgaCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gZHJhdyBodWUgY2lyY2xlXG4gICAgICBsZXQgeCwgeSwgaHVlLCBzYXQ7XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiB3ICogMC41LCB5OiBoICogMC41IH07XG4gICAgICB0aGlzLnIgPSAwLjQ5ICogdztcbiAgICAgIGNvbnN0IGFuZ2xlQ29udmVydCA9ICgyICogTWF0aC5QSSkgLyAzNjA7XG4gICAgICBjb25zdCBoZmFjID0gMSAvIDM2MDtcbiAgICAgIGNvbnN0IHNmYWMgPSAxIC8gdGhpcy5yO1xuICAgICAgbGV0IHJnYjtcbiAgICAgIGZvciAoaHVlID0gMDsgaHVlIDwgMzYwOyBodWUrKykge1xuICAgICAgICBmb3IgKHNhdCA9IDA7IHNhdCA8IHRoaXMucjsgc2F0KyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy54ICsgc2F0ICogTWF0aC5zaW4oYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICB5ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy55ICsgc2F0ICogTWF0aC5jb3MoYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICByZ2IgPSBIU1ZUb1JHQihodWUgKiBoZmFjLCBzYXQgKiBzZmFjLCAxKTtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2IoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCI7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KHggLSAwLjUsIHkgLSAwLjUsIDIsIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMSlcIjtcbiAgICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIHRoaXMuaHVlQ2lyY2xlID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIHNlbGVjdG9yLiBUaGlzIGlzIGNhbGxlZCBieSBoYW1tZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlU2VsZWN0b3IoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb2xvclBpY2tlckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gZXZlbnQuY2VudGVyLnggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gZXZlbnQuY2VudGVyLnkgLSByZWN0LnRvcDtcblxuICAgIGNvbnN0IGNlbnRlclkgPSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyRGl2LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBjZW50ZXJYID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRXaWR0aDtcblxuICAgIGNvbnN0IHggPSBsZWZ0IC0gY2VudGVyWDtcbiAgICBjb25zdCB5ID0gdG9wIC0gY2VudGVyWTtcblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih4LCB5KTtcbiAgICBjb25zdCByYWRpdXMgPSAwLjk4ICogTWF0aC5taW4oTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpLCBjZW50ZXJYKTtcblxuICAgIGNvbnN0IG5ld1RvcCA9IE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclk7XG4gICAgY29uc3QgbmV3TGVmdCA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclg7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUudG9wID1cbiAgICAgIG5ld1RvcCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLmxlZnQgPVxuICAgICAgbmV3TGVmdCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCArIFwicHhcIjtcblxuICAgIC8vIHNldCBjb2xvclxuICAgIGxldCBoID0gYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgIGggPSBoIDwgMCA/IGggKyAxIDogaDtcbiAgICBjb25zdCBzID0gcmFkaXVzIC8gdGhpcy5yO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi5oID0gaDtcbiAgICBoc3YucyA9IHM7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuXG4gICAgLy8gdXBkYXRlIHByZXZpZXdzXG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmNvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gIH1cbn07XG5cbi8qKlxuICogV3JhcCBnaXZlbiB0ZXh0IChsYXN0IGFyZ3VtZW50KSBpbiBIVE1MIGVsZW1lbnRzIChhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cykuXG4gKlxuICogQHBhcmFtIHsuLi5hbnl9IHJlc3QgLSBMaXN0IG9mIHRhZyBuYW1lcyBmb2xsb3dlZCBieSBpbm5lciB0ZXh0LlxuICogQHJldHVybnMgQW4gZWxlbWVudCBvciBhIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gd3JhcEluVGFnKC4uLnJlc3QpIHtcbiAgaWYgKHJlc3QubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cy5cIik7XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdFswXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmVzdFswXSk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoLi4ucmVzdC5zbGljZSgxKSkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGZvciBhbGwgcHJvcGVydGllcyBvZiB0aGlzLnBvc3NpYmxlIG9wdGlvbnMsIHlvdSBjYW4gc3VwcGx5IHRoZSBwcm9wZXJ0eSBuYW1lIGluIGFueSBmb3JtIHRvIGxpc3QgdGhlIG9wdGlvbnMuXG4gKiBCb29sZWFuIG9wdGlvbnMgYXJlIHJlY29nbmlzZWQgYXMgQm9vbGVhblxuICogTnVtYmVyIG9wdGlvbnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtkZWZhdWx0IHZhbHVlLCBtaW4gdmFsdWUsIG1heCB2YWx1ZSwgc3RlcHNpemVdXG4gKiBDb2xvcnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFsnY29sb3InLCAnI2ZmZmZmZiddXG4gKiBTdHJpbmdzIHdpdGggc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtvcHRpb24xLCBvcHRpb24yLCBvcHRpb24zLCAuLl1cbiAqXG4gKiBUaGUgb3B0aW9ucyBhcmUgbWF0Y2hlZCB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiBlYWNoIG9mIHRoZSBtb2R1bGVzIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYXJlXG4gKi9cbmxldCBDb25maWd1cmF0b3IkMSA9IGNsYXNzIENvbmZpZ3VyYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50TW9kdWxlICAgICAgICB8IHRoZSBsb2NhdGlvbiB3aGVyZSBwYXJlbnRNb2R1bGUuc2V0T3B0aW9ucygpIGNhbiBiZSBjYWxsZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRDb250YWluZXIgICAgfCB0aGUgZGVmYXVsdCBjb250YWluZXIgb2YgdGhlIG1vZHVsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlndXJlT3B0aW9ucyAgICB8IHRoZSBmdWxseSBjb25maWd1cmVkIGFuZCBwcmVkZWZpbmVkIG9wdGlvbnMgc2V0IGZvdW5kIGluIGFsbE9wdGlvbnMuanNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBpeGVsUmF0aW8gICAgICAgICAgfCBjYW52YXMgcGl4ZWwgcmF0aW9cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGlkZU9wdGlvbiAgICAgICAgfCBjdXN0b20gbG9naWMgdG8gZHluYW1pY2FsbHkgaGlkZSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnRNb2R1bGUsXG4gICAgZGVmYXVsdENvbnRhaW5lcixcbiAgICBjb25maWd1cmVPcHRpb25zLFxuICAgIHBpeGVsUmF0aW8gPSAxLFxuICAgIGhpZGVPcHRpb24gPSAoKSA9PiBmYWxzZVxuICApIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudE1vZHVsZTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyO1xuICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZU9wdGlvbiA9IGhpZGVPcHRpb247XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5wb3B1cENvdW50ZXIgPSAwO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgIGNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICAgICAgc2hvd0J1dHRvbjogdHJ1ZSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuY29uZmlndXJlT3B0aW9ucyA9IGNvbmZpZ3VyZU9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0ge307XG4gICAgdGhpcy5kb21FbGVtZW50cyA9IFtdO1xuICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB0aGlzLnBvcHVwTGltaXQgPSA1O1xuICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgdGhpcy5jb2xvclBpY2tlciA9IG5ldyBDb2xvclBpY2tlciQxKHBpeGVsUmF0aW8pO1xuICAgIHRoaXMud3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGFsbCBvcHRpb25zLlxuICAgKiBCZWNhdXNlIGFsbCBtb2R1bGVzIHBhcnNlIHRoZWlyIG9wdGlvbnMgYnkgdGhlbXNlbHZlcywgd2UganVzdCB1c2UgdGhlaXIgb3B0aW9ucy4gV2UgY29weSB0aGVtIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXNldCB0aGUgcG9wdXAgaGlzdG9yeSBiZWNhdXNlIHRoZSBpbmRpY2VzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuXG4gICAgICBsZXQgZW5hYmxlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuam9pbigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMgY2Fubm90IGJlIG51bGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0J1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dCdXR0b24gPSBvcHRpb25zLnNob3dCdXR0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIGVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICBlbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlT3B0aW9uc1xuICAgKi9cbiAgc2V0TW9kdWxlT3B0aW9ucyhtb2R1bGVPcHRpb25zKSB7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0gbW9kdWxlT3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy5maWx0ZXI7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gdGhpcy5jb25maWd1cmVPcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlndXJlT3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc2hvdyA9IGZpbHRlcihvcHRpb24sIFtdKTtcbiAgICAgICAgICBzaG93ID1cbiAgICAgICAgICAgIHNob3cgfHxcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbb3B0aW9uXSwgW29wdGlvbl0sIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIuaW5kZXhPZihvcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIGxpbmVicmVhayBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAgICAgICBpZiAoY291bnRlciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VJdGVtKFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYSBoZWFkZXIgZm9yIHRoZSBjYXRlZ29yeVxuICAgICAgICAgIHRoaXMuX21ha2VIZWFkZXIob3B0aW9uKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3ViIG9wdGlvbnNcbiAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dKTtcbiAgICAgICAgfVxuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21ha2VCdXR0b24oKTtcbiAgICB0aGlzLl9wdXNoKCk7XG4gICAgLy9+IHRoaXMuY29sb3JQaWNrZXIuaW5zZXJ0VG8odGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYXcgYWxsIERPTSBlbGVtZW50cyBvbiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHVzaCgpIHtcbiAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMud3JhcHBlci5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uLXdyYXBwZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tRWxlbWVudHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Nob3dQb3B1cElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogZGVsZXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53cmFwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcblxuICAgIHRoaXMuX3JlbW92ZVBvcHVwKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBhY3R1YWxPcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsdWUocGF0aCkge1xuICAgIGxldCBiYXNlID0gdGhpcy5tb2R1bGVPcHRpb25zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJhc2VbcGF0aFtpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBiYXNlID0gYmFzZVtwYXRoW2ldXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGwgb3B0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGVkIGluIGFuIGl0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBkb21FbGVtZW50c1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VJdGVtKHBhdGgsIC4uLmRvbUVsZW1lbnRzKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpdGVtLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1pdGVtIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgICBkb21FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogaGVhZGVyIGZvciBtYWpvciBzdWJqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VIZWFkZXIobmFtZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1oZWFkZXJcIjtcbiAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZTtcbiAgICB0aGlzLl9tYWtlSXRlbShbXSwgZGl2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgbGFiZWwsIGlmIGl0IGlzIGFuIG9iamVjdCBsYWJlbCwgaXQgZ2V0cyBkaWZmZXJlbnQgc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RMYWJlbFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUxhYmVsKG5hbWUsIHBhdGgsIG9iamVjdExhYmVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWxhYmVsIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgaWYgKG9iamVjdExhYmVsID09PSB0cnVlKSB7XG4gICAgICB3aGlsZSAoZGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIGRpdi5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoXCJpXCIsIFwiYlwiLCBuYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBuYW1lICsgXCI6XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGRyb3Bkb3duIGxpc3QgZm9yIG11bHRpcGxlIHBvc3NpYmxlIHN0cmluZyBvcHRvaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIHNlbGVjdC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctc2VsZWN0XCI7XG4gICAgbGV0IHNlbGVjdGVkVmFsdWUgPSAwO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgb3B0aW9uLnZhbHVlID0gYXJyW2ldO1xuICAgICAgaWYgKGkgPT09IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gXCJzZWxlY3RlZFwiO1xuICAgICAgfVxuICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGFycltpXTtcbiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBzZWxlY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSByYW5nZSBvYmplY3QgZm9yIG51bWVyaWMgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VSYW5nZShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJyWzBdO1xuICAgIGNvbnN0IG1pbiA9IGFyclsxXTtcbiAgICBjb25zdCBtYXggPSBhcnJbMl07XG4gICAgY29uc3Qgc3RlcCA9IGFyclszXTtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICByYW5nZS5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctcmFuZ2VcIjtcbiAgICB0cnkge1xuICAgICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gbm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHJhbmdlLm1pbiA9IG1pbjtcbiAgICAgIHJhbmdlLm1heCA9IG1heDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICByYW5nZS5zdGVwID0gc3RlcDtcblxuICAgIC8vIHNldCB1cCB0aGUgcG9wdXAgc2V0dGluZ3MgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQuXG4gICAgbGV0IHBvcHVwU3RyaW5nID0gXCJcIjtcbiAgICBsZXQgcG9wdXBWYWx1ZSA9IDA7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmFjdG9yID0gMS4yO1xuICAgICAgaWYgKHZhbHVlIDwgMCAmJiB2YWx1ZSAqIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgKiBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIC8gZmFjdG9yIDwgbWluKSB7XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGguY2VpbCh2YWx1ZSAvIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5taW47XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAqIGZhY3RvciA+IG1heCAmJiBtYXggIT09IDEpIHtcbiAgICAgICAgcmFuZ2UubWF4ID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1heDtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfVxuICAgICAgcmFuZ2UudmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlaW5wdXRcIjtcbiAgICBpbnB1dC52YWx1ZSA9IHJhbmdlLnZhbHVlO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgbWUuX3VwZGF0ZShOdW1iZXIodGhpcy52YWx1ZSksIHBhdGgpO1xuICAgIH07XG4gICAgcmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgcmFuZ2UsIGlucHV0KTtcblxuICAgIC8vIGlmIGEgcG9wdXAgaXMgbmVlZGVkIEFORCBpdCBoYXMgbm90IGJlZW4gc2hvd24gZm9yIHRoaXMgdmFsdWUsIHNob3cgaXQuXG4gICAgaWYgKHBvcHVwU3RyaW5nICE9PSBcIlwiICYmIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gIT09IHBvcHVwVmFsdWUpIHtcbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gPSBwb3B1cFZhbHVlO1xuICAgICAgdGhpcy5fc2V0dXBQb3B1cChwb3B1cFN0cmluZywgaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGJ1dHRvbiBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvblwiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uaW5uZXJUZXh0ID0gXCJnZW5lcmF0ZSBvcHRpb25zXCI7XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9wcmludE9wdGlvbnMoKTtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3ZlciA9ICgpID0+IHtcbiAgICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlclwiO1xuICAgICAgfTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLm9ubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXJcIjtcblxuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKHRoaXMub3B0aW9uc0NvbnRhaW5lcik7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goZ2VuZXJhdGVCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlIHRoZSBwb3B1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldHVwUG9wdXAoc3RyaW5nLCBpbmRleCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5wb3B1cENvdW50ZXIgPCB0aGlzLnBvcHVwTGltaXRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBkaXYuaWQgPSBcInZpcy1jb25maWd1cmF0aW9uLXBvcHVwXCI7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmlubmVyVGV4dCA9IHN0cmluZztcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyICs9IDE7XG4gICAgICB0aGlzLnBvcHVwRGl2ID0geyBodG1sOiBkaXYsIGluZGV4OiBpbmRleCB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUgdGhlIHBvcHVwIGZyb20gdGhlIGRvbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBwb3B1cCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd1BvcHVwSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMucG9wdXBEaXYuaHRtbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudHNbdGhpcy5wb3B1cERpdi5pbmRleF07XG4gICAgICBjb25zdCByZWN0ID0gY29ycmVzcG9uZGluZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5zdHlsZS50b3AgPSByZWN0LnRvcCAtIDMwICsgXCJweFwiOyAvLyAzMCBpcyB0aGUgaGVpZ2h0O1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpO1xuICAgICAgdGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICB9LCAxNTAwKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuZGVsZXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfSwgMTgwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBjaGVja2JveCBmb3IgYm9vbGVhbiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQ2hlY2tib3goZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy5jaGVja2VkLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgY2hlY2tib3gpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciBzdHJpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZVRleHRJbnB1dChkZWZhdWx0VmFsdWUsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgY2hlY2tib3gudHlwZSA9IFwidGV4dFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy10ZXh0XCI7XG4gICAgY2hlY2tib3gudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy52YWx1ZSwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY29sb3IgZmllbGQgd2l0aCBhIGNvbG9yIHBpY2tlciBmb3IgY29sb3IgZmllbGRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGFyclsxXTtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICE9PSBcIm5vbmVcIikge1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayBub25lXCI7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbG9yIDogdmFsdWU7XG4gICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogdXNlZCBieSB0aGUgY29sb3IgYnV0dG9ucyB0byBjYWxsIHRoZSBjb2xvciBwaWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBkaXZcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpIHtcbiAgICAvLyBjbGVhciB0aGUgY2FsbGJhY2sgZnJvbSB0aGlzIGRpdlxuICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKGRpdik7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zaG93KCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENvbG9yKHZhbHVlKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldFVwZGF0ZUNhbGxiYWNrKChjb2xvcikgPT4ge1xuICAgICAgY29uc3QgY29sb3JTdHJpbmcgPVxuICAgICAgICBcInJnYmEoXCIgKyBjb2xvci5yICsgXCIsXCIgKyBjb2xvci5nICsgXCIsXCIgKyBjb2xvci5iICsgXCIsXCIgKyBjb2xvci5hICsgXCIpXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JTdHJpbmc7XG4gICAgICB0aGlzLl91cGRhdGUoY29sb3JTdHJpbmcsIHBhdGgpO1xuICAgIH0pO1xuXG4gICAgLy8gb24gY2xvc2Ugb2YgdGhlIGNvbG9ycGlja2VyLCByZXN0b3JlIHRoZSBjYWxsYmFjay5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENsb3NlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcGFyc2UgYW4gb2JqZWN0IGFuZCBkcmF3IHRoZSBjb3JyZWN0IGl0ZW1zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtBcnJheX0gW3BhdGg9W11dICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tPbmx5PWZhbHNlXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVPYmplY3Qob2JqLCBwYXRoID0gW10sIGNoZWNrT25seSA9IGZhbHNlKSB7XG4gICAgbGV0IHNob3cgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCB2aXNpYmxlSW5TZXQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHN1Yk9iaiBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBzdWJPYmopKSB7XG4gICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICBjb25zdCBpdGVtID0gb2JqW3N1Yk9ial07XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgc3ViT2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIoc3ViT2JqLCBwYXRoKTtcblxuICAgICAgICAgIC8vIGlmIG5lZWRlZCB3ZSBtdXN0IGdvIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICAgICAgaWYgKHNob3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAgICAgICBpdGVtIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHNob3cgPSB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGNoZWNrT25seSA9PT0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmlzaWJsZUluU2V0ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKG5ld1BhdGgpO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycmF5KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlVGV4dElucHV0KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIHNraXAgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5oaWRlT3B0aW9uKHBhdGgsIHN1Yk9iaiwgdGhpcy5tb2R1bGVPcHRpb25zKSkge1xuICAgICAgICAgICAgICAvLyBpbml0aWFsbHkgY29sbGFwc2Ugb3B0aW9ucyB3aXRoIGFuIGRpc2FibGVkIGVuYWJsZWQgb3B0aW9uLlxuICAgICAgICAgICAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkUGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShuZXdQYXRoLCBcImVuYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoZW5hYmxlZFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkVmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgICB2aXNpYmxlSW5TZXQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlQ2hlY2tib3goaXRlbSwgZW5hYmxlZFZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwoc3ViT2JqLCBuZXdQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdChpdGVtLCBuZXdQYXRoKSB8fCB2aXNpYmxlSW5TZXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvbnQga25vdyBob3cgdG8gaGFuZGxlXCIsIGl0ZW0sIHN1Yk9iaiwgbmV3UGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlSW5TZXQ7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSBhcnJheSB0eXBlIG9mIG9wdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUFycmF5KGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIiAmJiBhcnJbMF0gPT09IFwiY29sb3JcIikge1xuICAgICAgdGhpcy5fbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzFdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9tYWtlRHJvcGRvd24oYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogTnVtYmVyKHZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIHRvIHVwZGF0ZSB0aGUgbmV0d29yayB3aXRoIHRoZSBuZXcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGUodmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudC5ib2R5ICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIgJiZcbiAgICAgIHRoaXMucGFyZW50LmJvZHkuZW1pdHRlci5lbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdChcImNvbmZpZ0NoYW5nZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wYXJlbnQuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGJvb2xlYW59IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHt7fX0gb3B0aW9uc09ialxuICAgKiBAcmV0dXJucyB7e319XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCwgb3B0aW9uc09iaiA9IHt9KSB7XG4gICAgbGV0IHBvaW50ZXIgPSBvcHRpb25zT2JqO1xuXG4gICAgLy8gd2hlbiBkcm9wZG93biBib3hlcyBjYW4gYmUgc3RyaW5nIG9yIGJvb2xlYW4sIHdlIHR5cGVjYXN0IGl0IGludG8gY29ycmVjdCB0eXBlc1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsdWU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXRoW2ldICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICAgIGlmIChwb2ludGVyW3BhdGhbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyW3BhdGhbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvaW50ZXJbcGF0aFtpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc09iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByaW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICB3aGlsZSAodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnNDb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgIHdyYXBJblRhZyhcInByZVwiLCBcImNvbnN0IG9wdGlvbnMgPSBcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t9fSBvcHRpb25zXG4gICAqL1xuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdE9wdGlvbnMoXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0udmFsdWUsXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0ucGF0aCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn07XG5cbi8qKlxuICogUG9wdXAgaXMgYSBjbGFzcyB0byBjcmVhdGUgYSBwb3B1cCB3aW5kb3cgd2l0aCBzb21lIHRleHRcbiAqL1xubGV0IFBvcHVwJDEgPSBjbGFzcyBQb3B1cCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgICAgICBUaGUgY29udGFpbmVyIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvdmVyZmxvd01ldGhvZCAgSG93IHRoZSBwb3B1cCBzaG91bGQgYWN0IHRvIG92ZXJmbG93aW5nICgnZmxpcCcgb3IgJ2NhcCcpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIG92ZXJmbG93TWV0aG9kKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5vdmVyZmxvd01ldGhvZCA9IG92ZXJmbG93TWV0aG9kIHx8IFwiY2FwXCI7XG5cbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5wYWRkaW5nID0gNTtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBmcmFtZVxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtdG9vbHRpcFwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgc2V0UG9zaXRpb24oeCwgeSkge1xuICAgIHRoaXMueCA9IHBhcnNlSW50KHgpO1xuICAgIHRoaXMueSA9IHBhcnNlSW50KHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29udGVudCBmb3IgdGhlIHBvcHVwIHdpbmRvdy4gVGhpcyBjYW4gYmUgSFRNTCBjb2RlIG9yIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRWxlbWVudH0gY29udGVudFxuICAgKi9cbiAgc2V0VGV4dChjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICB3aGlsZSAodGhpcy5mcmFtZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cmluZyBjb250YWluaW5nIGxpdGVyYWwgdGV4dCwgZWxlbWVudCBoYXMgdG8gYmUgdXNlZCBmb3IgSFRNTCBkdWUgdG9cbiAgICAgIC8vIFhTUyByaXNrcyBhc3NvY2lhdGVkIHdpdGggaW5uZXJIVE1MIChpLmUuIHByZXZlbnQgWFNTIGJ5IGFjY2lkZW50KS5cbiAgICAgIHRoaXMuZnJhbWUuaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgd2luZG93XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvU2hvd10gICAgU2hvdyBvciBoaWRlIHRoZSB3aW5kb3dcbiAgICovXG4gIHNob3coZG9TaG93KSB7XG4gICAgaWYgKGRvU2hvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb1Nob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkb1Nob3cgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZyYW1lLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudFdpZHRoO1xuXG4gICAgICBsZXQgbGVmdCA9IDAsXG4gICAgICAgIHRvcCA9IDA7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJmbG93TWV0aG9kID09IFwiZmxpcFwiKSB7XG4gICAgICAgIGxldCBpc0xlZnQgPSBmYWxzZSxcbiAgICAgICAgICBpc1RvcCA9IHRydWU7IC8vIFdoZXJlIGFyb3VuZCB0aGUgcG9zaXRpb24gaXQncyBsb2NhdGVkXG5cbiAgICAgICAgaWYgKHRoaXMueSAtIGhlaWdodCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzVG9wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy54ICsgd2lkdGggPiBtYXhXaWR0aCAtIHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzTGVmdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMueCAtIHdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIGlmICh0b3AgKyBoZWlnaHQgKyB0aGlzLnBhZGRpbmcgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICB0b3AgPSBtYXhIZWlnaHQgLSBoZWlnaHQgLSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIHRvcCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIGlmIChsZWZ0ICsgd2lkdGggKyB0aGlzLnBhZGRpbmcgPiBtYXhXaWR0aCkge1xuICAgICAgICAgIGxlZnQgPSBtYXhXaWR0aCAtIHdpZHRoIC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0IDwgdGhpcy5wYWRkaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZSk7IC8vIFJlbW92ZSBlbGVtZW50IGZyb20gRE9NXG4gIH1cbn07XG5cbmxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5sZXQgYWxsT3B0aW9ucztcblxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDEgPSBcImJhY2tncm91bmQ6ICNGRmVlZWU7IGNvbG9yOiAjZGQwMDAwXCI7XG5cbi8qKlxuICogIFVzZWQgdG8gdmFsaWRhdGUgb3B0aW9ucy5cbiAqL1xubGV0IFZhbGlkYXRvciQxID0gY2xhc3MgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJPYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBzdWJPYmplY3QpIHtcbiAgICBlcnJvckZvdW5kID0gZmFsc2U7XG4gICAgYWxsT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgbGV0IHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpZiAoc3ViT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9uc1tzdWJPYmplY3RdO1xuICAgIH1cbiAgICBWYWxpZGF0b3IucGFyc2Uob3B0aW9ucywgdXNlZE9wdGlvbnMsIFtdKTtcbiAgICByZXR1cm4gZXJyb3JGb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHRyYXZlcnNlIGFuIG9iamVjdCByZWN1cnNpdmVseSBhbmQgY2hlY2sgZXZlcnkgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICAgIFZhbGlkYXRvci5jaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBldmVyeSB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbCB0aGUgcGFyc2UgZnVuY3Rpb24gb24gdGhhdCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpIHtcbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIFZhbGlkYXRvci5nZXRTdWdnZXN0aW9uKG9wdGlvbiwgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZU9wdGlvbiA9IG9wdGlvbjtcbiAgICBsZXQgaXNfb2JqZWN0ID0gdHJ1ZTtcblxuICAgIGlmIChcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnNbb3B0aW9uXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICByZWZlcmVuY2VPcHRpb25zLl9fYW55X18gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTk9URTogVGhpcyBvbmx5IHRyaWdnZXJzIGlmIHRoZSBfX2FueV9fIGlzIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgLy8gICAgICAgVEhBVCdTIEEgUkVBTExZIEJBRCBQTEFDRSBUTyBBTExPVyBJVCEhISFcbiAgICAgIC8vIFRPRE86IEV4YW1pbmUgaWYgbmVlZGVkLCByZW1vdmUgaWYgcG9zc2libGVcblxuICAgICAgLy8gX19hbnlfXyBpcyBhIHdpbGRjYXJkLiBBbnkgdmFsdWUgaXMgYWNjZXB0ZWQgYW5kIHdpbGwgYmUgZnVydGhlciBhbmFseXNlZCBieSByZWZlcmVuY2UuXG4gICAgICByZWZlcmVuY2VPcHRpb24gPSBcIl9fYW55X19cIjtcblxuICAgICAgLy8gaWYgdGhlIGFueS1zdWJncm91cCBpcyBub3QgYSBwcmVkZWZpbmVkIG9iamVjdCBpbiB0aGUgY29uZmlndXJhdG9yLFxuICAgICAgLy8gd2UgZG8gbm90IGxvb2sgZGVlcGVyIGludG8gdGhlIG9iamVjdC5cbiAgICAgIGlzX29iamVjdCA9IFZhbGlkYXRvci5nZXRUeXBlKG9wdGlvbnNbb3B0aW9uXSkgPT09IFwib2JqZWN0XCI7XG4gICAgfVxuXG4gICAgbGV0IHJlZk9wdGlvbk9iaiA9IHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXTtcbiAgICBpZiAoaXNfb2JqZWN0ICYmIHJlZk9wdGlvbk9iai5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWZPcHRpb25PYmogPSByZWZPcHRpb25PYmouX190eXBlX187XG4gICAgfVxuXG4gICAgVmFsaWRhdG9yLmNoZWNrRmllbGRzKFxuICAgICAgb3B0aW9uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb24sXG4gICAgICByZWZPcHRpb25PYmosXG4gICAgICBwYXRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIG9wdGlvbiAgICAgICAgICAgfCB0aGUgb3B0aW9uIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICB8IFRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge29iamVjdH0gIHJlZmVyZW5jZU9wdGlvbnMgfCBUaGUgcmVmZXJlbmNlIG9wdGlvbnMgY29udGFpbmluZyBhbGwgb3B0aW9ucyBhbmQgdGhlaXIgYWxsb3dlZCBmb3JtYXRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgcmVmZXJlbmNlT3B0aW9uICB8IFVzdWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBvcHRpb24sIGV4Y2VwdCB3aGVuIGhhbmRsaW5nIGFuIF9fYW55X18gdGFnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZk9wdGlvbk9iaiAgICAgfCBUaGlzIGlzIHRoZSB0eXBlIG9iamVjdCBmcm9tIHRoZSByZWZlcmVuY2Ugb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBhdGggICAgICAgICAgICAgfCB3aGVyZSBpbiB0aGUgb2JqZWN0IGlzIHRoZSBvcHRpb25cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrRmllbGRzKFxuICAgIG9wdGlvbixcbiAgICBvcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgIHJlZk9wdGlvbk9iaixcbiAgICBwYXRoXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjXCIgKyBtZXNzYWdlICsgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKSxcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvblR5cGUgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pO1xuICAgIGNvbnN0IHJlZk9wdGlvblR5cGUgPSByZWZPcHRpb25PYmpbb3B0aW9uVHlwZV07XG5cbiAgICBpZiAocmVmT3B0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpZiB0aGUgdHlwZSBpcyBjb3JyZWN0LCB3ZSBjaGVjayBpZiBpdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgYSBmZXcgc2VsZWN0IHZhbHVlc1xuICAgICAgaWYgKFxuICAgICAgICBWYWxpZGF0b3IuZ2V0VHlwZShyZWZPcHRpb25UeXBlKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgIHJlZk9wdGlvblR5cGUuaW5kZXhPZihvcHRpb25zW29wdGlvbl0pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gXCInICtcbiAgICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgICAnXCIuJyArXG4gICAgICAgICAgICBcIiBBbGxvd2VkIHZhbHVlcyBhcmU6XCIgK1xuICAgICAgICAgICAgVmFsaWRhdG9yLnByaW50KHJlZk9wdGlvblR5cGUpICtcbiAgICAgICAgICAgICcgbm90IFwiJyArXG4gICAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICAgJ1wiLiAnXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25UeXBlID09PSBcIm9iamVjdFwiICYmIHJlZmVyZW5jZU9wdGlvbiAhPT0gXCJfX2FueV9fXCIpIHtcbiAgICAgICAgcGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcHRpb24pO1xuICAgICAgICBWYWxpZGF0b3IucGFyc2UoXG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25dLFxuICAgICAgICAgIHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWZPcHRpb25PYmpbXCJhbnlcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdHlwZSBvZiB0aGUgZmllbGQgaXMgaW5jb3JyZWN0IGFuZCB0aGUgZmllbGQgY2Fubm90IGJlIGFueVxuICAgICAgbG9nKFxuICAgICAgICAnSW52YWxpZCB0eXBlIHJlY2VpdmVkIGZvciBcIicgK1xuICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgJ1wiLiBFeHBlY3RlZDogJyArXG4gICAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKHJlZk9wdGlvbk9iaikpICtcbiAgICAgICAgICBcIi4gUmVjZWl2ZWQgW1wiICtcbiAgICAgICAgICBvcHRpb25UeXBlICtcbiAgICAgICAgICAnXSBcIicgK1xuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSArXG4gICAgICAgICAgJ1wiJ1xuICAgICAgKTtcbiAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBBcnJheS48bnVtYmVyPiB8IERhdGUgfCBOb2RlIHwgTW9tZW50IHwgdW5kZWZpbmVkIHwgbnVsbH0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRUeXBlKG9iamVjdCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xuXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Lm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiZG9tXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Ll9pc0FNb21lbnRPYmplY3QgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFwibW9tZW50XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRTdWdnZXN0aW9uKG9wdGlvbiwgb3B0aW9ucywgcGF0aCkge1xuICAgIGNvbnN0IGxvY2FsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCBmYWxzZSk7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBhbGxPcHRpb25zLCBbXSwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhbFNlYXJjaFRocmVzaG9sZCA9IDg7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoVGhyZXNob2xkID0gNDtcblxuICAgIGxldCBtc2c7XG4gICAgaWYgKGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guaW5kZXhNYXRjaCArXG4gICAgICAgICdcIj9cXG5cXG4nO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBnbG9iYWxTZWFyY2guZGlzdGFuY2UgPD0gZ2xvYmFsU2VhcmNoVGhyZXNob2xkICYmXG4gICAgICBsb2NhbFNlYXJjaC5kaXN0YW5jZSA+IGdsb2JhbFNlYXJjaC5kaXN0YW5jZVxuICAgICkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgXCJQZXJoYXBzIGl0IHdhcyBtaXNwbGFjZWQ/IE1hdGNoaW5nIG9wdGlvbiBmb3VuZCBhdDogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihcbiAgICAgICAgICBnbG9iYWxTZWFyY2gucGF0aCxcbiAgICAgICAgICBnbG9iYWxTZWFyY2guY2xvc2VzdE1hdGNoLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2FsU2VhcmNoLmRpc3RhbmNlIDw9IGxvY2FsU2VhcmNoVGhyZXNob2xkKSB7XG4gICAgICBtc2cgPVxuICAgICAgICAnLiBEaWQgeW91IG1lYW4gXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guY2xvc2VzdE1hdGNoICtcbiAgICAgICAgJ1wiPycgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPVxuICAgICAgICBcIi4gRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZTogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnQoT2JqZWN0LmtleXMob3B0aW9ucykpICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6IFwiJyArIG9wdGlvbiArICdcIicgKyBtc2csXG4gICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEUkMVxuICAgICk7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2UgdGhlIG9wdGlvbnMgaW4gc2VhcmNoIGZvciBhIG1hdGNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWN1cnNpdmU9ZmFsc2VdXG4gICAqIEByZXR1cm5zIHt7Y2xvc2VzdE1hdGNoOiBzdHJpbmcsIHBhdGg6IEFycmF5LCBkaXN0YW5jZTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAgIGxldCBtaW4gPSAxZTk7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaCA9IFwiXCI7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaFBhdGggPSBbXTtcbiAgICBjb25zdCBsb3dlckNhc2VPcHRpb24gPSBvcHRpb24udG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaW5kZXhNYXRjaCA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IG9wIGluIG9wdGlvbnMpIHtcbiAgICAgIGxldCBkaXN0YW5jZTtcbiAgICAgIGlmIChvcHRpb25zW29wXS5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkICYmIHJlY3Vyc2l2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWYWxpZGF0b3IuZmluZEluT3B0aW9ucyhcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgb3B0aW9uc1tvcF0sXG4gICAgICAgICAgY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIG9wKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWluID4gcmVzdWx0LmRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gcmVzdWx0LmNsb3Nlc3RNYXRjaDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gcmVzdWx0LnBhdGg7XG4gICAgICAgICAgbWluID0gcmVzdWx0LmRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSByZXN1bHQuaW5kZXhNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2VPcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSBvcDtcbiAgICAgICAgfVxuICAgICAgICBkaXN0YW5jZSA9IFZhbGlkYXRvci5sZXZlbnNodGVpbkRpc3RhbmNlKG9wdGlvbiwgb3ApO1xuICAgICAgICBpZiAobWluID4gZGlzdGFuY2UpIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2ggPSBvcDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gY29weUFycmF5KHBhdGgpO1xuICAgICAgICAgIG1pbiA9IGRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXN0TWF0Y2g6IGNsb3Nlc3RNYXRjaCxcbiAgICAgIHBhdGg6IGNsb3Nlc3RNYXRjaFBhdGgsXG4gICAgICBkaXN0YW5jZTogbWluLFxuICAgICAgaW5kZXhNYXRjaDogaW5kZXhNYXRjaCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiwgcHJlZml4ID0gXCJQcm9ibGVtIHZhbHVlIGZvdW5kIGF0OiBcXG5cIikge1xuICAgIGxldCBzdHIgPSBcIlxcblxcblwiICsgcHJlZml4ICsgXCJvcHRpb25zID0ge1xcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpICsgMTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gcGF0aFtpXSArIFwiOiB7XFxuXCI7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggKyAxOyBqKyspIHtcbiAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgfVxuICAgIHN0ciArPSBvcHRpb24gKyBcIlxcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggLSBpOyBqKyspIHtcbiAgICAgICAgc3RyICs9IFwiICBcIjtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBcIn1cXG5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0ciArIFwiXFxuXFxuXCI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHByaW50KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICAgIC5yZXBsYWNlKC8oXCIpfChcXFspfChcXF0pfCgsXCJfX3R5cGVfX1wiKS9nLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoLygsKS9nLCBcIiwgXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb21wdXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBnaXZlbiBzdHJpbmdzXG4gICAqIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL1N0cmluZ3MvTGV2ZW5zaHRlaW5fZGlzdGFuY2UjSmF2YVNjcmlwdFxuICAgKlxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5kcmVpIE1hY2tlbnppZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgKlxuICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICpcbiAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGxldmVuc2h0ZWluRGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbWF0cml4ID0gW107XG5cbiAgICAvLyBpbmNyZW1lbnQgYWxvbmcgdGhlIGZpcnN0IGNvbHVtbiBvZiBlYWNoIHJvd1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW2ldO1xuICAgIH1cblxuICAgIC8vIGluY3JlbWVudCBlYWNoIGNvbHVtbiBpbiB0aGUgZmlyc3Qgcm93XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cblxuICAgIC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG1hdHJpeFxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT0gYS5jaGFyQXQoaiAtIDEpKSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAxXVtqIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgICAgICBtYXRyaXhbaSAtIDFdW2ogLSAxXSArIDEsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgIG1hdHJpeFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqXSArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApOyAvLyBkZWxldGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xuICB9XG59O1xuXG5jb25zdCBBY3RpdmF0b3IgPSBBY3RpdmF0b3IkMTtcclxuY29uc3QgQ29sb3JQaWNrZXIgPSBDb2xvclBpY2tlciQxO1xyXG5jb25zdCBDb25maWd1cmF0b3IgPSBDb25maWd1cmF0b3IkMTtcclxuY29uc3QgSGFtbWVyID0gSGFtbWVyJDE7XHJcbmNvbnN0IFBvcHVwID0gUG9wdXAkMTtcclxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFID0gVkFMSURBVE9SX1BSSU5UX1NUWUxFJDE7XHJcbmNvbnN0IFZhbGlkYXRvciA9IFZhbGlkYXRvciQxO1xuXG5leHBvcnQgeyBBY3RpdmF0b3IsIEFsZWEsIENvbG9yUGlja2VyLCBDb25maWd1cmF0b3IsIERFTEVURSwgSFNWVG9IZXgsIEhTVlRvUkdCLCBIYW1tZXIsIFBvcHVwLCBSR0JUb0hTViwgUkdCVG9IZXgsIFZBTElEQVRPUl9QUklOVF9TVFlMRSwgVmFsaWRhdG9yLCBhZGRDbGFzc05hbWUsIGFkZENzc1RleHQsIGJpbmFyeVNlYXJjaEN1c3RvbSwgYmluYXJ5U2VhcmNoVmFsdWUsIGJyaWRnZU9iamVjdCwgY29weUFuZEV4dGVuZEFycmF5LCBjb3B5QXJyYXksIGRlZXBFeHRlbmQsIGRlZXBPYmplY3RBc3NpZ24sIGVhc2luZ0Z1bmN0aW9ucywgZXF1YWxBcnJheSwgZXh0ZW5kLCBmaWxsSWZEZWZpbmVkLCBmb3JFYWNoLCBnZXRBYnNvbHV0ZUxlZnQsIGdldEFic29sdXRlUmlnaHQsIGdldEFic29sdXRlVG9wLCBnZXRTY3JvbGxCYXJXaWR0aCwgZ2V0VGFyZ2V0LCBnZXRUeXBlLCBoYXNQYXJlbnQsIGhleFRvSFNWLCBoZXhUb1JHQiwgaW5zZXJ0U29ydCwgaXNEYXRlLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ZhbGlkSGV4LCBpc1ZhbGlkUkdCLCBpc1ZhbGlkUkdCQSwgbWVyZ2VPcHRpb25zLCBvcHRpb24sIG92ZXJyaWRlT3BhY2l0eSwgcGFyc2VDb2xvciwgcHJldmVudERlZmF1bHQsIHB1cmVEZWVwT2JqZWN0QXNzaWduLCByZWN1cnNpdmVET01EZWxldGUsIHJlbW92ZUNsYXNzTmFtZSwgcmVtb3ZlQ3NzVGV4dCwgc2VsZWN0aXZlQnJpZGdlT2JqZWN0LCBzZWxlY3RpdmVEZWVwRXh0ZW5kLCBzZWxlY3RpdmVFeHRlbmQsIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsIHRocm90dGxlLCB0b0FycmF5LCB0b3BNb3N0LCB1cGRhdGVQcm9wZXJ0eSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmlzLXV0aWwuanMubWFwXG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgbmF0aXZlQ29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgUmVmbGVjdC5jb25zdHJ1Y3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmNvbnN0cnVjdFxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEobmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcblxudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxudmFyIEZPUkNFRCA9IE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHO1xuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiBGT1JDRUQgfSwge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhQ29uc3RydWN0b3IoVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhQ29uc3RydWN0b3IoYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gbmF0aXZlQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICBhcHBseShwdXNoLCAkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChhcHBseShiaW5kLCBUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3RQcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBhcHBseShUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5SZWZsZWN0LmNvbnN0cnVjdDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvcmVmbGVjdC9jb25zdHJ1Y3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9yZWZsZWN0L2NvbnN0cnVjdFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xufTtcblxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSkgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIga2V5LCBkZXNjcmlwdG9yO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSA9IGtleXNbaW5kZXgrK10pO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yc1wiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgIT09IGRlZmluZVByb3BlcnRpZXMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoVCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVCwgRCk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMuc2hhbSkgZGVmaW5lUHJvcGVydGllcy5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0aWVzXCIpOyIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3QvY3JlYXRlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBzZXRQcm90b3R5cGVPZjogc2V0UHJvdG90eXBlT2Zcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL29iamVjdC9zZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vYWN0dWFsL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL2JpbmQnKTtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfc2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRzZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkY3JlYXRlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfZ2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRnZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBfT2JqZWN0JGdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsICJ2YXIgX1N5bWJvbCA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCIpO1xudmFyIF9TeW1ib2wkaXRlcmF0b3IgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pdGVyYXRvci5qc1wiKTtcbmZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgX1N5bWJvbCRpdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gX1N5bWJvbCAmJiBvICE9PSBfU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzKSwgX3R5cGVvZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvaW5zdGFuY2UvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL2Zvci1lYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyJyk7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUnKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX1JFQ09SRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19SRUNPUkQpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX1JFQ09SRCkge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGUuaXRlcmF0b3I7XG4gIH0gZWxzZSBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSwgaXRlckZuKTtcbiAgfVxuXG4gIG5leHQgPSBJU19SRUNPUkQgPyBpdGVyYWJsZS5uZXh0IDogaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCAkZGVmYXVsdCkge1xuICByZXR1cm4gYXJndW1lbnQgPT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gJycgOiAkZGVmYXVsdCA6IHRvU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgaW5zdGFsbEVycm9yQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZScpO1xudmFyIGluc3RhbGxFcnJvclN0YWNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBub3JtYWxpemVTdHJpbmdBcmd1bWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG52YXIgJEFnZ3JlZ2F0ZUVycm9yID0gZnVuY3Rpb24gQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlIC8qICwgb3B0aW9ucyAqLykge1xuICB2YXIgaXNJbnN0YW5jZSA9IGlzUHJvdG90eXBlT2YoQWdncmVnYXRlRXJyb3JQcm90b3R5cGUsIHRoaXMpO1xuICB2YXIgdGhhdDtcbiAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgdGhhdCA9IHNldFByb3RvdHlwZU9mKG5ldyAkRXJyb3IoKSwgaXNJbnN0YW5jZSA/IGdldFByb3RvdHlwZU9mKHRoaXMpIDogQWdncmVnYXRlRXJyb3JQcm90b3R5cGUpO1xuICB9IGVsc2Uge1xuICAgIHRoYXQgPSBpc0luc3RhbmNlID8gdGhpcyA6IGNyZWF0ZShBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsIFRPX1NUUklOR19UQUcsICdFcnJvcicpO1xuICB9XG4gIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnbWVzc2FnZScsIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KG1lc3NhZ2UpKTtcbiAgaW5zdGFsbEVycm9yU3RhY2sodGhhdCwgJEFnZ3JlZ2F0ZUVycm9yLCB0aGF0LnN0YWNrLCAxKTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSBpbnN0YWxsRXJyb3JDYXVzZSh0aGF0LCBhcmd1bWVudHNbMl0pO1xuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIHB1c2gsIHsgdGhhdDogZXJyb3JzQXJyYXkgfSk7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnZXJyb3JzJywgZXJyb3JzQXJyYXkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IpO1xuZWxzZSBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKCRBZ2dyZWdhdGVFcnJvciwgJEVycm9yLCB7IG5hbWU6IHRydWUgfSk7XG5cbnZhciBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSA9ICRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoJEVycm9yLnByb3RvdHlwZSwge1xuICBjb25zdHJ1Y3RvcjogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICRBZ2dyZWdhdGVFcnJvciksXG4gIG1lc3NhZ2U6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnJyksXG4gIG5hbWU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAnQWdncmVnYXRlRXJyb3InKVxufSk7XG5cbi8vIGBBZ2dyZWdhdGVFcnJvcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWdncmVnYXRlLWVycm9yLWNvbnN0cnVjdG9yXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDIgfSwge1xuICBBZ2dyZWdhdGVFcnJvcjogJEFnZ3JlZ2F0ZUVycm9yXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCBpc051bGxPclVuZGVmaW5lZChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUNvbnN0cnVjdG9yKFMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gLyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgc2V0ID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyICRsb2NhdGlvbiwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbmZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gRGVubyB0aHJvd3MgYSBSZWZlcmVuY2VFcnJvciBvbiBgbG9jYXRpb25gIGFjY2VzcyB3aXRob3V0IGAtLWxvY2F0aW9uYCBmbGFnXG4gICRsb2NhdGlvbiA9IGdsb2JhbC5sb2NhdGlvbjtcbn0pO1xuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlmIChoYXNPd24ocXVldWUsIGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG5cbnZhciBydW5uZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBydW4oaWQpO1xuICB9O1xufTtcblxudmFyIGV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuKGV2ZW50LmRhdGEpO1xufTtcblxudmFyIGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gb2xkIGVuZ2luZXMgaGF2ZSBub3QgbG9jYXRpb24ub3JpZ2luXG4gIGdsb2JhbC5wb3N0TWVzc2FnZShTdHJpbmcoaWQpLCAkbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgJGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShoYW5kbGVyKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXIgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoSVNfTk9ERSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3cocnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICAvLyBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzYyNFxuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsICYmICFJU19JT1MpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBldmVudExpc3RlbmVyO1xuICAgIGRlZmVyID0gYmluZChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0KTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoXG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiZcbiAgICBpc0NhbGxhYmxlKGdsb2JhbC5wb3N0TWVzc2FnZSkgJiZcbiAgICAhZ2xvYmFsLmltcG9ydFNjcmlwdHMgJiZcbiAgICAkbG9jYXRpb24gJiYgJGxvY2F0aW9uLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgIWZhaWxzKGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIpXG4gICkge1xuICAgIGRlZmVyID0gZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcjtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhlYWQgPSBudWxsO1xuICB0aGlzLnRhaWwgPSBudWxsO1xufTtcblxuUXVldWUucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmFyIGVudHJ5ID0geyBpdGVtOiBpdGVtLCBuZXh0OiBudWxsIH07XG4gICAgdmFyIHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgaWYgKHRhaWwpIHRhaWwubmV4dCA9IGVudHJ5O1xuICAgIGVsc2UgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgdGhpcy50YWlsID0gZW50cnk7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbnRyeSA9IHRoaXMuaGVhZDtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHZhciBuZXh0ID0gdGhpcy5oZWFkID0gZW50cnkubmV4dDtcbiAgICAgIGlmIChuZXh0ID09PSBudWxsKSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgcmV0dXJuIGVudHJ5Lml0ZW07XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvaXBhZHxpcGhvbmV8aXBvZC9pLnRlc3QodXNlckFnZW50KSAmJiB0eXBlb2YgUGViYmxlICE9ICd1bmRlZmluZWQnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZScpO1xudmFyIElTX1dFQk9TX1dFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgbWljcm90YXNrID0gcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yICYmIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvci52YWx1ZTtcbnZhciBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghbWljcm90YXNrKSB7XG4gIHZhciBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChmbiA9IHF1ZXVlLmdldCgpKSB0cnkge1xuICAgICAgZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHF1ZXVlLmhlYWQpIG5vdGlmeSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gYmluZChwcm9taXNlLnRoZW4sIHByb21pc2UpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdlXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIC8vIGB3ZWJwYWNrYCBkZXYgc2VydmVyIGJ1ZyBvbiBJRSBnbG9iYWwgbWV0aG9kcyAtIHVzZSBiaW5kKGZuLCBnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgbWljcm90YXNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKCFxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICBxdWV1ZS5hZGQoZm4pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pY3JvdGFzaztcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gc2FmZVxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLlByb21pc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIERlbm8gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBEZW5vID09ICdvYmplY3QnICYmIERlbm8gJiYgdHlwZW9mIERlbm8udmVyc2lvbiA9PSAnb2JqZWN0JztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfREVOTyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtZGVubycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhSVNfREVOTyAmJiAhSVNfTk9ERVxuICAmJiB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnXG4gICYmIHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfQlJPV1NFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3NlcicpO1xudmFyIElTX0RFTk8gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8nKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFNVQkNMQVNTSU5HID0gZmFsc2U7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gaXNDYWxsYWJsZShnbG9iYWwuUHJvbWlzZVJlamVjdGlvbkV2ZW50KTtcblxudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gaXNGb3JjZWQoJ1Byb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSA9IGluc3BlY3RTb3VyY2UoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSAhPT0gU3RyaW5nKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSN7IGNhdGNoLCBmaW5hbGx5IH0gaW4gdGhlIHB1cmUgdmVyc2lvbiBmb3IgcHJldmVudGluZyBwcm90b3R5cGUgcG9sbHV0aW9uXG4gIGlmIChJU19QVVJFICYmICEoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10pKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKCFWOF9WRVJTSU9OIHx8IFY4X1ZFUlNJT04gPCA1MSB8fCAhL25hdGl2ZSBjb2RlLy50ZXN0KFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFKSkge1xuICAgIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSBuZXcgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUoMSk7IH0pO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgICB9O1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICAgIFNVQkNMQVNTSU5HID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgICBpZiAoIVNVQkNMQVNTSU5HKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICB9IHJldHVybiAhR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiAoSVNfQlJPV1NFUiB8fCBJU19ERU5PKSAmJiAhTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDT05TVFJVQ1RPUjogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsXG4gIFJFSkVDVElPTl9FVkVOVDogTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5ULFxuICBTVUJDTEFTU0lORzogU1VCQ0xBU1NJTkdcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhQ2FsbGFibGUocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUNhbGxhYmxlKHJlamVjdCk7XG59O1xuXG4vLyBgTmV3UHJvbWlzZUNhcGFiaWxpdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uZXdwcm9taXNlY2FwYWJpbGl0eVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLkNPTlNUUlVDVE9SO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5SRUpFQ1RJT05fRVZFTlQ7XG52YXIgTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uU1VCQ0xBU1NJTkc7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvciA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcjtcbnZhciBQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG52YXIgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHk7XG5cbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcblxudmFyIEludGVybmFsLCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgUHJvbWlzZVdyYXBwZXIsIG5hdGl2ZVRoZW47XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIGlzQ2FsbGFibGUodGhlbiA9IGl0LnRoZW4pID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIGNhbGxSZWFjdGlvbiA9IGZ1bmN0aW9uIChyZWFjdGlvbiwgc3RhdGUpIHtcbiAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gIHZhciBvayA9IHN0YXRlLnN0YXRlID09PSBGVUxGSUxMRUQ7XG4gIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICB0cnkge1xuICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGlmIChzdGF0ZS5yZWplY3Rpb24gPT09IFVOSEFORExFRCkgb25IYW5kbGVVbmhhbmRsZWQoc3RhdGUpO1xuICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgfVxuICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gY2FuIHRocm93XG4gICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgY2FsbCh0aGVuLCByZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICByZWplY3QoZXJyb3IpO1xuICB9XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWFjdGlvbnMgPSBzdGF0ZS5yZWFjdGlvbnM7XG4gICAgdmFyIHJlYWN0aW9uO1xuICAgIHdoaWxlIChyZWFjdGlvbiA9IHJlYWN0aW9ucy5nZXQoKSkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCAmJiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pKSBoYW5kbGVyKGV2ZW50KTtcbiAgZWxzZSBpZiAobmFtZSA9PT0gVU5IQU5ETEVEX1JFSkVDVElPTikgaG9zdFJlcG9ydEVycm9ycygnVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgcmVhc29uKTtcbn07XG5cbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAoc3RhdGUuZmFjYWRlID09PSB2YWx1ZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGwodGhlbiwgdmFsdWUsXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVzb2x2ZSwgd3JhcHBlciwgc3RhdGUpLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlamVjdCwgd3JhcHBlciwgc3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpbnRlcm5hbFJlamVjdCh3cmFwcGVyLCBlcnJvciwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHN0YXRlLnN0YXRlID0gRlVMRklMTEVEO1xuICAgICAgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGludGVybmFsUmVqZWN0KHsgZG9uZTogZmFsc2UgfSwgZXJyb3IsIHN0YXRlKTtcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmIChGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUikge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICBhQ2FsbGFibGUoZXhlY3V0b3IpO1xuICAgIGNhbGwoSW50ZXJuYWwsIHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdChzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBQcm9taXNlUHJvdG90eXBlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIHR5cGU6IFBST01JU0UsXG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZmFsc2UsXG4gICAgICByZWFjdGlvbnM6IG5ldyBRdWV1ZSgpLFxuICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgIHN0YXRlOiBQRU5ESU5HLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gIEludGVybmFsLnByb3RvdHlwZSA9IGRlZmluZUJ1aWx0SW4oUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgcmVhY3Rpb24ub2sgPSBpc0NhbGxhYmxlKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICByZWFjdGlvbi5mYWlsID0gaXNDYWxsYWJsZShvblJlamVjdGVkKSAmJiBvblJlamVjdGVkO1xuICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc3RhdGUuc3RhdGUgPT09IFBFTkRJTkcpIHN0YXRlLnJlYWN0aW9ucy5hZGQocmVhY3Rpb24pO1xuICAgIGVsc2UgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICB9KTtcblxuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHByb21pc2UpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKTtcbiAgICB0aGlzLnJlamVjdCA9IGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKTtcbiAgfTtcblxuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICBpZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBuYXRpdmVUaGVuID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZS50aGVuO1xuXG4gICAgaWYgKCFOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORykge1xuICAgICAgLy8gbWFrZSBgUHJvbWlzZSN0aGVuYCByZXR1cm4gYSBwb2x5ZmlsbGVkIGBQcm9taXNlYCBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgY2FsbChuYXRpdmVUaGVuLCB0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIG1ha2UgYC5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIHRyeSB7XG4gICAgICBkZWxldGUgTmF0aXZlUHJvbWlzZVByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICAvLyBtYWtlIGBpbnN0YW5jZW9mIFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIHNldFByb3RvdHlwZU9mKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIFByb21pc2U6IFByb21pc2VDb25zdHJ1Y3RvclxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSwgZmFsc2UsIHRydWUpO1xuc2V0U3BlY2llcyhQUk9NSVNFKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSkudGhlbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwoJHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmNhdGNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsIHJlYWw6IHRydWUgfSwge1xuICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgfVxufSk7XG5cbi8vIG1ha2VzIHN1cmUgdGhhdCBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzIGBQcm9taXNlI2NhdGNoYCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2NhdGNoJ107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICE9PSBtZXRob2QpIHtcbiAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICdjYXRjaCcsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5yYWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKHRoaXMpO1xuICAgIGNhbGwoY2FwYWJpbGl0eS5yZWplY3QsIHVuZGVmaW5lZCwgcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uJykuQ09OU1RSVUNUT1I7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG5cbnZhciBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID0gZ2V0QnVpbHRJbignUHJvbWlzZScpO1xudmFyIENIRUNLX1dSQVBQRVIgPSBJU19QVVJFICYmICFGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQ0hFQ0tfV1JBUFBFUiAmJiB0aGlzID09PSBQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyID8gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbFNldHRsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbHNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ2Z1bGZpbGxlZCcsIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdyZWplY3RlZCcsIHJlYXNvbjogZXJyb3IgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFueVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYW55OiBmdW5jdGlvbiBhbnkoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIEFnZ3JlZ2F0ZUVycm9yID0gZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKTtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGVycm9yO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10aGVuYWJsZSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10uY2FsbCh7IHRoZW46IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBOT05fR0VORVJJQyB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSBpc0NhbGxhYmxlKG9uRmluYWxseSk7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNmaW5hbGx5YCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnZmluYWxseScsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFueScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG4vLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2Utd2l0aC1yZXNvbHZlcnNcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHdpdGhSZXNvbHZlcnM6IGZ1bmN0aW9uIHdpdGhSZXNvbHZlcnMoKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvbWlzZTogcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZSxcbiAgICAgIHJlc29sdmU6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUsXG4gICAgICByZWplY3Q6IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdFxuICAgIH07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS53aXRoLXJlc29sdmVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xuXG4vLyBgUHJvbWlzZS50cnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgICAocmVzdWx0LmVycm9yID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9wcm9taXNlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuYWdncmVnYXRlLWVycm9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLmFsbC1zZXR0bGVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3Byb21pc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9yZXZlcnNlJyk7XG4iLCAidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIF9PYmplY3QkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIik7XG52YXIgX1N5bWJvbCA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCIpO1xudmFyIF9PYmplY3QkY3JlYXRlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzXCIpO1xudmFyIF9PYmplY3QkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2guanNcIik7XG52YXIgX3B1c2hJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzXCIpO1xudmFyIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIF9Qcm9taXNlID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9wcm9taXNlL2luZGV4LmpzXCIpO1xudmFyIF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZS5qc1wiKTtcbnZhciBfc2xpY2VJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qc1wiKTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBfT2JqZWN0JGRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uICh0LCBlLCByKSB7XG4gICAgICB0W2VdID0gci52YWx1ZTtcbiAgICB9LFxuICAgIGkgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIF9TeW1ib2wgPyBfU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHQsIGUsIHtcbiAgICAgIHZhbHVlOiByLFxuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgd3JpdGFibGU6ICEwXG4gICAgfSksIHRbZV07XG4gIH1cbiAgdHJ5IHtcbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoICh0KSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24gZGVmaW5lKHQsIGUsIHIpIHtcbiAgICAgIHJldHVybiB0W2VdID0gcjtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHdyYXAodCwgZSwgciwgbikge1xuICAgIHZhciBpID0gZSAmJiBlLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IGUgOiBHZW5lcmF0b3IsXG4gICAgICBhID0gX09iamVjdCRjcmVhdGUoaS5wcm90b3R5cGUpLFxuICAgICAgYyA9IG5ldyBDb250ZXh0KG4gfHwgW10pO1xuICAgIHJldHVybiBvKGEsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogbWFrZUludm9rZU1ldGhvZCh0LCByLCBjKVxuICAgIH0pLCBhO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKHQsIGUsIHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICAgICAgYXJnOiB0LmNhbGwoZSwgcilcbiAgICAgIH07XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IHRcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGUud3JhcCA9IHdyYXA7XG4gIHZhciBoID0gXCJzdXNwZW5kZWRTdGFydFwiLFxuICAgIGwgPSBcInN1c3BlbmRlZFlpZWxkXCIsXG4gICAgZiA9IFwiZXhlY3V0aW5nXCIsXG4gICAgcyA9IFwiY29tcGxldGVkXCIsXG4gICAgeSA9IHt9O1xuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cbiAgdmFyIHAgPSB7fTtcbiAgZGVmaW5lKHAsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIHZhciBkID0gX09iamVjdCRnZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHApO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHModCkge1xuICAgIHZhciBfY29udGV4dDtcbiAgICBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0pLmNhbGwoX2NvbnRleHQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkZWZpbmUodCwgZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShlLCB0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IodCwgZSkge1xuICAgIGZ1bmN0aW9uIGludm9rZShyLCBvLCBpLCBhKSB7XG4gICAgICB2YXIgYyA9IHRyeUNhdGNoKHRbcl0sIHQsIG8pO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gYy50eXBlKSB7XG4gICAgICAgIHZhciB1ID0gYy5hcmcsXG4gICAgICAgICAgaCA9IHUudmFsdWU7XG4gICAgICAgIHJldHVybiBoICYmIFwib2JqZWN0XCIgPT0gX3R5cGVvZihoKSAmJiBuLmNhbGwoaCwgXCJfX2F3YWl0XCIpID8gZS5yZXNvbHZlKGguX19hd2FpdCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pIDogZS5yZXNvbHZlKGgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICB1LnZhbHVlID0gdCwgaSh1KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgdCwgaSwgYSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgYShjLmFyZyk7XG4gICAgfVxuICAgIHZhciByO1xuICAgIG8odGhpcywgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh0LCBuKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgZShmdW5jdGlvbiAoZSwgcikge1xuICAgICAgICAgICAgaW52b2tlKHQsIG4sIGUsIHIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByID0gciA/IHIudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGUsIHIsIG4pIHtcbiAgICB2YXIgbyA9IGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBhKSB7XG4gICAgICBpZiAobyA9PT0gZikgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIGlmIChvID09PSBzKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IGkpIHRocm93IGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IHQsXG4gICAgICAgICAgZG9uZTogITBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZvciAobi5tZXRob2QgPSBpLCBuLmFyZyA9IGE7Oykge1xuICAgICAgICB2YXIgYyA9IG4uZGVsZWdhdGU7XG4gICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgdmFyIHUgPSBtYXliZUludm9rZURlbGVnYXRlKGMsIG4pO1xuICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICBpZiAodSA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBuLm1ldGhvZCkgbi5zZW50ID0gbi5fc2VudCA9IG4uYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gbi5tZXRob2QpIHtcbiAgICAgICAgICBpZiAobyA9PT0gaCkgdGhyb3cgbyA9IHMsIG4uYXJnO1xuICAgICAgICAgIG4uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpO1xuICAgICAgICB9IGVsc2UgXCJyZXR1cm5cIiA9PT0gbi5tZXRob2QgJiYgbi5hYnJ1cHQoXCJyZXR1cm5cIiwgbi5hcmcpO1xuICAgICAgICBvID0gZjtcbiAgICAgICAgdmFyIHAgPSB0cnlDYXRjaChlLCByLCBuKTtcbiAgICAgICAgaWYgKFwibm9ybWFsXCIgPT09IHAudHlwZSkge1xuICAgICAgICAgIGlmIChvID0gbi5kb25lID8gcyA6IGwsIHAuYXJnID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHAuYXJnLFxuICAgICAgICAgICAgZG9uZTogbi5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcInRocm93XCIgPT09IHAudHlwZSAmJiAobyA9IHMsIG4ubWV0aG9kID0gXCJ0aHJvd1wiLCBuLmFyZyA9IHAuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgcikge1xuICAgIHZhciBuID0gci5tZXRob2QsXG4gICAgICBvID0gZS5pdGVyYXRvcltuXTtcbiAgICBpZiAobyA9PT0gdCkgcmV0dXJuIHIuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG4gJiYgZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoci5tZXRob2QgPSBcInJldHVyblwiLCByLmFyZyA9IHQsIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgciksIFwidGhyb3dcIiA9PT0gci5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG4gJiYgKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG4gKyBcIicgbWV0aG9kXCIpKSwgeTtcbiAgICB2YXIgaSA9IHRyeUNhdGNoKG8sIGUuaXRlcmF0b3IsIHIuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSBpLnR5cGUpIHJldHVybiByLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBpLmFyZywgci5kZWxlZ2F0ZSA9IG51bGwsIHk7XG4gICAgdmFyIGEgPSBpLmFyZztcbiAgICByZXR1cm4gYSA/IGEuZG9uZSA/IChyW2UucmVzdWx0TmFtZV0gPSBhLnZhbHVlLCByLm5leHQgPSBlLm5leHRMb2MsIFwicmV0dXJuXCIgIT09IHIubWV0aG9kICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCByLmRlbGVnYXRlID0gbnVsbCwgeSkgOiBhIDogKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeSh0KSB7XG4gICAgdmFyIF9jb250ZXh0MjtcbiAgICB2YXIgZSA9IHtcbiAgICAgIHRyeUxvYzogdFswXVxuICAgIH07XG4gICAgMSBpbiB0ICYmIChlLmNhdGNoTG9jID0gdFsxXSksIDIgaW4gdCAmJiAoZS5maW5hbGx5TG9jID0gdFsyXSwgZS5hZnRlckxvYyA9IHRbM10pLCBfcHVzaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQyID0gdGhpcy50cnlFbnRyaWVzKS5jYWxsKF9jb250ZXh0MiwgZSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeSh0KSB7XG4gICAgdmFyIGUgPSB0LmNvbXBsZXRpb24gfHwge307XG4gICAgZS50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIGUuYXJnLCB0LmNvbXBsZXRpb24gPSBlO1xuICB9XG4gIGZ1bmN0aW9uIENvbnRleHQodCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSh0KS5jYWxsKHQsIHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhlKSB7XG4gICAgaWYgKGUgfHwgXCJcIiA9PT0gZSkge1xuICAgICAgdmFyIHIgPSBlW2FdO1xuICAgICAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLm5leHQpIHJldHVybiBlO1xuICAgICAgaWYgKCFpc05hTihlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIG8gPSAtMSxcbiAgICAgICAgICBpID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK28gPCBlLmxlbmd0aDspIGlmIChuLmNhbGwoZSwgbykpIHJldHVybiBuZXh0LnZhbHVlID0gZVtvXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBpLm5leHQgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF90eXBlb2YoZSkgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBvKGcsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBvKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHQgJiYgdC5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFlICYmIChlID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSkpO1xuICB9LCBlLm1hcmsgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX09iamVjdCRzZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKGcpLCB0O1xuICB9LCBlLmF3cmFwID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogdFxuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZS5hc3luYyA9IGZ1bmN0aW9uICh0LCByLCBuLCBvLCBpKSB7XG4gICAgdm9pZCAwID09PSBpICYmIChpID0gX1Byb21pc2UpO1xuICAgIHZhciBhID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcCh0LCByLCBuLCBvKSwgaSk7XG4gICAgcmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKSA/IGEgOiBhLm5leHQoKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5kb25lID8gdC52YWx1ZSA6IGEubmV4dCgpO1xuICAgIH0pO1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoZyksIGRlZmluZShnLCB1LCBcIkdlbmVyYXRvclwiKSwgZGVmaW5lKGcsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShnLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSksIGUua2V5cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBPYmplY3QodCksXG4gICAgICByID0gW107XG4gICAgZm9yICh2YXIgbiBpbiBlKSBfcHVzaEluc3RhbmNlUHJvcGVydHkocikuY2FsbChyLCBuKTtcbiAgICByZXR1cm4gX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsgci5sZW5ndGg7KSB7XG4gICAgICAgIHZhciB0ID0gci5wb3AoKTtcbiAgICAgICAgaWYgKHQgaW4gZSkgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBlLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGUpIHtcbiAgICAgIHZhciBfY29udGV4dDM7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB0LCBfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQzID0gdGhpcy50cnlFbnRyaWVzKS5jYWxsKF9jb250ZXh0MywgcmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtfc2xpY2VJbnN0YW5jZVByb3BlcnR5KHIpLmNhbGwociwgMSkpICYmICh0aGlzW3JdID0gdCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgdCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZSkge1xuICAgICAgaWYgKHRoaXMuZG9uZSkgdGhyb3cgZTtcbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShuLCBvKSB7XG4gICAgICAgIHJldHVybiBhLnR5cGUgPSBcInRocm93XCIsIGEuYXJnID0gZSwgci5uZXh0ID0gbiwgbyAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgISFvO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbyA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBvID49IDA7IC0tbykge1xuICAgICAgICB2YXIgaSA9IHRoaXMudHJ5RW50cmllc1tvXSxcbiAgICAgICAgICBhID0gaS5jb21wbGV0aW9uO1xuICAgICAgICBpZiAoXCJyb290XCIgPT09IGkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoaS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGMgPSBuLmNhbGwoaSwgXCJjYXRjaExvY1wiKSxcbiAgICAgICAgICAgIHUgPSBuLmNhbGwoaSwgXCJmaW5hbGx5TG9jXCIpO1xuICAgICAgICAgIGlmIChjICYmIHUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF1KSB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24gZGVsZWdhdGVZaWVsZChlLCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcixcbiAgICAgICAgbmV4dExvYzogblxuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHQpLCB5O1xuICAgIH1cbiAgfSwgZTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsICIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gRkYyNi0gYnVnOiBBcnJheUJ1ZmZlcnMgYXJlIG5vbi1leHRlbnNpYmxlLCBidXQgT2JqZWN0LmlzRXh0ZW5zaWJsZSBkb2VzIG5vdCByZXBvcnQgaXRcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShidWZmZXIpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVmZmVyLCAnYScsIHsgdmFsdWU6IDggfSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkaXNFeHRlbnNpYmxlKDEpOyB9KTtcblxuLy8gYE9iamVjdC5pc0V4dGVuc2libGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNleHRlbnNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IChGQUlMU19PTl9QUklNSVRJVkVTIHx8IEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSkgPyBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSAmJiBjbGFzc29mKGl0KSA9PT0gJ0FycmF5QnVmZmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZTtcbn0gOiAkaXNFeHRlbnNpYmxlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtcHJldmVudGV4dGVuc2lvbnMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgaXNFeHRlbnNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG5cbnZhciBSRVFVSVJFRCA9IGZhbHNlO1xudmFyIE1FVEFEQVRBID0gdWlkKCdtZXRhJyk7XG52YXIgaWQgPSAwO1xuXG52YXIgc2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgZGVmaW5lUHJvcGVydHkoaXQsIE1FVEFEQVRBLCB7IHZhbHVlOiB7XG4gICAgb2JqZWN0SUQ6ICdPJyArIGlkKyssIC8vIG9iamVjdCBJRFxuICAgIHdlYWtEYXRhOiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcblxudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gYSBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS5vYmplY3RJRDtcbn07XG5cbnZhciBnZXRXZWFrRGF0YSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gdGhlIHN0b3JlIG9mIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS53ZWFrRGF0YTtcbn07XG5cbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWklORyAmJiBSRVFVSVJFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXNPd24oaXQsIE1FVEFEQVRBKSkgc2V0TWV0YWRhdGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG52YXIgZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICBtZXRhLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgUkVRVUlSRUQgPSB0cnVlO1xuICB2YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZjtcbiAgdmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG4gIHZhciB0ZXN0ID0ge307XG4gIHRlc3RbTUVUQURBVEFdID0gMTtcblxuICAvLyBwcmV2ZW50IGV4cG9zaW5nIG9mIG1ldGFkYXRhIGtleVxuICBpZiAoZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0KS5sZW5ndGgpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdFtpXSA9PT0gTUVUQURBVEEpIHtcbiAgICAgICAgICBzcGxpY2UocmVzdWx0LCBpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZS5mXG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrRGF0YTogZ2V0V2Vha0RhdGEsXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuaGlkZGVuS2V5c1tNRVRBREFUQV0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSwgd3JhcHBlciwgY29tbW9uKSB7XG4gIHZhciBJU19NQVAgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ01hcCcpICE9PSAtMTtcbiAgdmFyIElTX1dFQUsgPSBDT05TVFJVQ1RPUl9OQU1FLmluZGV4T2YoJ1dlYWsnKSAhPT0gLTE7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl9OQU1FXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgdmFyIGV4cG9ydGVkID0ge307XG4gIHZhciBDb25zdHJ1Y3RvcjtcblxuICBpZiAoIURFU0NSSVBUT1JTIHx8ICFpc0NhbGxhYmxlKE5hdGl2ZUNvbnN0cnVjdG9yKVxuICAgIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKS5lbnRyaWVzKCkubmV4dCgpOyB9KSlcbiAgKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDb25zdHJ1Y3RvciA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB9IGVsc2Uge1xuICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZShhbkluc3RhbmNlKHRhcmdldCwgUHJvdG90eXBlKSwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBjb2xsZWN0aW9uOiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGFyZ2V0W0FEREVSXSwgeyB0aGF0OiB0YXJnZXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICBmb3JFYWNoKFsnYWRkJywgJ2NsZWFyJywgJ2RlbGV0ZScsICdmb3JFYWNoJywgJ2dldCcsICdoYXMnLCAnc2V0JywgJ2tleXMnLCAndmFsdWVzJywgJ2VudHJpZXMnXSwgZnVuY3Rpb24gKEtFWSkge1xuICAgICAgdmFyIElTX0FEREVSID0gS0VZID09PSAnYWRkJyB8fCBLRVkgPT09ICdzZXQnO1xuICAgICAgaWYgKEtFWSBpbiBOYXRpdmVQcm90b3R5cGUgJiYgIShJU19XRUFLICYmIEtFWSA9PT0gJ2NsZWFyJykpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5jb2xsZWN0aW9uO1xuICAgICAgICAgIGlmICghSVNfQURERVIgJiYgSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkpIHJldHVybiBLRVkgPT09ICdnZXQnID8gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGNvbGxlY3Rpb25bS0VZXShhID09PSAwID8gMCA6IGEsIGIpO1xuICAgICAgICAgIHJldHVybiBJU19BRERFUiA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgSVNfV0VBSyB8fCBkZWZpbmVQcm9wZXJ0eShQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb24uc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgZXhwb3J0ZWRbQ09OU1RSVUNUT1JfTkFNRV0gPSBDb25zdHJ1Y3RvcjtcbiAgJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIGV4cG9ydGVkKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5zYWZlICYmIHRhcmdldFtrZXldKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgIGVsc2UgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZmFzdEtleTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgUHJvdG90eXBlKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpbmRleDogY3JlYXRlKG51bGwpLFxuICAgICAgICBmaXJzdDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWQsXG4gICAgICAgIHNpemU6IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCFERVNDUklQVE9SUykgdGhhdC5zaXplID0gMDtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0aGF0W0FEREVSXSwgeyB0aGF0OiB0aGF0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgUHJvdG90eXBlID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgdmFyIGRlZmluZSA9IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgIHZhciBwcmV2aW91cywgaW5kZXg7XG4gICAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUubGFzdCA9IGVudHJ5ID0ge1xuICAgICAgICAgIGluZGV4OiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgcHJldmlvdXM6IHByZXZpb3VzID0gc3RhdGUubGFzdCxcbiAgICAgICAgICBuZXh0OiB1bmRlZmluZWQsXG4gICAgICAgICAgcmVtb3ZlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzdGF0ZS5maXJzdCkgc3RhdGUuZmlyc3QgPSBlbnRyeTtcbiAgICAgICAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy5uZXh0ID0gZW50cnk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSsrO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSsrO1xuICAgICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHN0YXRlLmluZGV4W2luZGV4XSA9IGVudHJ5O1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9O1xuXG4gICAgdmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIC8vIGZhc3QgY2FzZVxuICAgICAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICAgICAgdmFyIGVudHJ5O1xuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiBzdGF0ZS5pbmRleFtpbmRleF07XG4gICAgICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgICAgIGZvciAoZW50cnkgPSBzdGF0ZS5maXJzdDsgZW50cnk7IGVudHJ5ID0gZW50cnkubmV4dCkge1xuICAgICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCB7XG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5jbGVhcigpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5jbGVhclxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBkYXRhID0gc3RhdGUuaW5kZXg7XG4gICAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmZpcnN0O1xuICAgICAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucHJldmlvdXMpIGVudHJ5LnByZXZpb3VzID0gZW50cnkucHJldmlvdXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmZpcnN0ID0gc3RhdGUubGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplID0gMDtcbiAgICAgICAgZWxzZSB0aGF0LnNpemUgPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmRlbGV0ZShrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5pbmRleFtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubmV4dCA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucHJldmlvdXMgPSBwcmV2O1xuICAgICAgICAgIGlmIChzdGF0ZS5maXJzdCA9PT0gZW50cnkpIHN0YXRlLmZpcnN0ID0gbmV4dDtcbiAgICAgICAgICBpZiAoc3RhdGUubGFzdCA9PT0gZW50cnkpIHN0YXRlLmxhc3QgPSBwcmV2O1xuICAgICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZS0tO1xuICAgICAgICAgIGVsc2UgdGhhdC5zaXplLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuZmlyc3QpIHtcbiAgICAgICAgICBib3VuZEZ1bmN0aW9uKGVudHJ5LnZhbHVlLCBlbnRyeS5rZXksIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXR9LnByb3RvdHlwZS5oYXMoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmhhc1xuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIElTX01BUCA/IHtcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLmdldChrZXkpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudmFsdWU7XG4gICAgICB9LFxuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5zZXRcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmFkZFxuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCkge1xuICAgIHZhciBJVEVSQVRPUl9OQU1FID0gQ09OU1RSVUNUT1JfTkFNRSArICcgSXRlcmF0b3InO1xuICAgIHZhciBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgdmFyIGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoSVRFUkFUT1JfTkFNRSk7XG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUueyBrZXlzLCB2YWx1ZXMsIGVudHJpZXMsIEBAaXRlcmF0b3IgfSgpYCBtZXRob2RzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICBkZWZpbmVJdGVyYXRvcihDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgICAgdHlwZTogSVRFUkFUT1JfTkFNRSxcbiAgICAgICAgdGFyZ2V0OiBpdGVyYXRlZCxcbiAgICAgICAgc3RhdGU6IGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlKGl0ZXJhdGVkKSxcbiAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gICAgICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gICAgICB2YXIgZW50cnkgPSBzdGF0ZS5sYXN0O1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXN0YXRlLnRhcmdldCB8fCAhKHN0YXRlLmxhc3QgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLnN0YXRlLmZpcnN0KSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PT0gJ2tleXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS5rZXksIGZhbHNlKTtcbiAgICAgIGlmIChraW5kID09PSAndmFsdWVzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkudmFsdWUsIGZhbHNlKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZmFsc2UpO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xuY29sbGVjdGlvbignTWFwJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hcCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguTWFwO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9tYXAnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL21hcFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc29tZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb21lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2Uvc29tZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2tleXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9rZXlzJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmtleXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmtleXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2tleXNcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgbWVyZ2VTb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICByZXR1cm4gbGVuZ3RoIDwgOCA/IGluc2VydGlvblNvcnQoYXJyYXksIGNvbXBhcmVmbikgOiBtZXJnZShcbiAgICBhcnJheSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBjb21wYXJlZm5cbiAgKTtcbn07XG5cbnZhciBpbnNlcnRpb25Tb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGkgPSAxO1xuICB2YXIgZWxlbWVudCwgajtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGogPSBpO1xuICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICB9XG4gICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIChhcnJheSwgbGVmdCwgcmlnaHQsIGNvbXBhcmVmbikge1xuICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgdmFyIGxpbmRleCA9IDA7XG4gIHZhciByaW5kZXggPSAwO1xuXG4gIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlU29ydDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBmaXJlZm94ID0gdXNlckFnZW50Lm1hdGNoKC9maXJlZm94XFwvKFxcZCspL2kpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhZmlyZWZveCAmJiArZmlyZWZveFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbicpO1xudmFyIElFX09SX0VER0UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24nKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdW5jdXJyeVRoaXModGVzdC5zb3J0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXModGVzdC5wdXNoKTtcblxuLy8gSUU4LVxudmFyIEZBSUxTX09OX1VOREVGSU5FRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KTtcbi8vIFY4IGJ1Z1xudmFyIEZBSUxTX09OX05VTEwgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydChudWxsKTtcbn0pO1xuLy8gT2xkIFdlYktpdFxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb3J0Jyk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDcwO1xuICBpZiAoRkYgJiYgRkYgPiAzKSByZXR1cm47XG4gIGlmIChJRV9PUl9FREdFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdFQktJVCkgcmV0dXJuIFdFQktJVCA8IDYwMztcblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBjb2RlLCBjaHIsIHZhbHVlLCBpbmRleDtcblxuICAvLyBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIG1vcmUgNTEyIGVsZW1lbnRzIChDaGFrcmEgYW5kIG9sZCBWOCBmYWlscyBvbmx5IGluIHRoaXMgY2FzZSlcbiAgZm9yIChjb2RlID0gNjU7IGNvZGUgPCA3NjsgY29kZSsrKSB7XG4gICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSA2NjogY2FzZSA2OTogY2FzZSA3MDogY2FzZSA3MjogdmFsdWUgPSAzOyBicmVhaztcbiAgICAgIGNhc2UgNjg6IGNhc2UgNzE6IHZhbHVlID0gNDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB2YWx1ZSA9IDI7XG4gICAgfVxuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDc7IGluZGV4KyspIHtcbiAgICAgIHRlc3QucHVzaCh7IGs6IGNociArIGluZGV4LCB2OiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudiAtIGEudjsgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGVzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSB0ZXN0W2luZGV4XS5rLmNoYXJBdCgwKTtcbiAgICBpZiAocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IGNocikgcmVzdWx0ICs9IGNocjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgIT09ICdER0JFRkhBQ0lKSyc7XG59KTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRCB8fCAhU1RBQkxFX1NPUlQ7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICByZXR1cm4gdG9TdHJpbmcoeCkgPiB0b1N0cmluZyh5KSA/IDEgOiAtMTtcbiAgfTtcbn07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb3J0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG5cbiAgICB2YXIgYXJyYXkgPSB0b09iamVjdCh0aGlzKTtcblxuICAgIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkID8gbmF0aXZlU29ydChhcnJheSkgOiBuYXRpdmVTb3J0KGFycmF5LCBjb21wYXJlZm4pO1xuXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICAgIHZhciBpdGVtc0xlbmd0aCwgaW5kZXg7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGluZGV4IGluIGFycmF5KSBwdXNoKGl0ZW1zLCBhcnJheVtpbmRleF0pO1xuICAgIH1cblxuICAgIGludGVybmFsU29ydChpdGVtcywgZ2V0U29ydENvbXBhcmUoY29tcGFyZWZuKSk7XG5cbiAgICBpdGVtc0xlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZW1zKTtcbiAgICBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBpdGVtc0xlbmd0aCkgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXgrK107XG4gICAgd2hpbGUgKGluZGV4IDwgYXJyYXlMZW5ndGgpIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhhcnJheSwgaW5kZXgrKyk7XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29ydCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdzb3J0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29ydCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb3J0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zb3J0XCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAndmFsdWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudmFsdWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlc1wiKTsiLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3JcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdlbnRyaWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5lbnRyaWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5lbnRyaWVzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9lbnRyaWVzXCIpOyIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbmxldCBnZXRSYW5kb21WYWx1ZXM7XG5jb25zdCBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsICJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cblxuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiBieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghdmFsaWRhdGUodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICB9XG5cbiAgcmV0dXJuIHV1aWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ2lmeTsiLCAiY29uc3QgcmFuZG9tVVVJRCA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5yYW5kb21VVUlEICYmIGNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmFuZG9tVVVJRFxufTsiLCAiaW1wb3J0IG5hdGl2ZSBmcm9tICcuL25hdGl2ZS5qcyc7XG5pbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCB7IHVuc2FmZVN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgaWYgKG5hdGl2ZS5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmF0aXZlLnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG4gIHJuZHNbNl0gPSBybmRzWzZdICYgMHgwZiB8IDB4NDA7XG4gIHJuZHNbOF0gPSBybmRzWzhdICYgMHgzZiB8IDB4ODA7IC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuXG4gIGlmIChidWYpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgcmV0dXJuIHVuc2FmZVN0cmluZ2lmeShybmRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjQ7IiwgImltcG9ydCB7IEFzc2lnbmFibGUgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcbmltcG9ydCB7IERhdGFTdHJlYW0gfSBmcm9tIFwiLi9kYXRhLXN0cmVhbVwiO1xuXG50eXBlIFZhbHVlT2Y8VD4gPSBUW2tleW9mIFRdO1xuXG4vKiogVmFsaWQgaWQgdHlwZS4gKi9cbmV4cG9ydCB0eXBlIElkID0gbnVtYmVyIHwgc3RyaW5nO1xuLyoqIE51bGxhYmxlIGlkIHR5cGUuICovXG5leHBvcnQgdHlwZSBPcHRJZCA9IHVuZGVmaW5lZCB8IG51bGwgfCBJZDtcbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgYSB2YWx1ZSBjYW4gYmUgdXNlZCBhcyBhbiBpZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCBpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIElkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XG59XG5cbi8qKlxuICogTWFrZSBhbiBvYmplY3QgZGVlcGx5IHBhcnRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIGFueVtdIHwgRnVuY3Rpb24gfCBOb2RlXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgPyB7IFtrZXkgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW2tleV0+IH1cbiAgOiBUO1xuXG4vKipcbiAqIEFuIGl0ZW0gdGhhdCBtYXkgKHtAbGluayBJZH0pIG9yIG1heSBub3QgKGFic2VudCwgdW5kZWZpbmVkIG9yIG51bGwpIGhhdmUgYW4gaWQgcHJvcGVydHkuXG4gKlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgUGFydEl0ZW08SWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IFBhcnRpYWw8UmVjb3JkPElkUHJvcCwgT3B0SWQ+Pjtcbi8qKlxuICogQW4gaXRlbSB0aGF0IGhhcyBhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gaWQgYW5kIGFsbCBvdGhlciByZXF1aXJlZCBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRnVsbEl0ZW08XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gPSBJdGVtICYgUmVjb3JkPElkUHJvcCwgSWQ+O1xuLyoqXG4gKiBBbiBpdGVtIHRoYXQgaGFzIGEgcHJvcGVydHkgY29udGFpbmluZyBhbiBpZCBhbmQgb3B0aW9uYWxseSBvdGhlciBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgVXBkYXRlSXRlbTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiA9IEFzc2lnbmFibGU8RnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4gJiBSZWNvcmQ8SWRQcm9wLCBJZD47XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIGl0ZW0gaGFzIGFuIGlkIChpcyBhIHtAbGluayBGdWxsSXRlbX0pLlxuICpcbiAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIGlkUHJvcCAtIE5hbWUgb2YgdGhlIGlkIHByb3BlcnR5LlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoaXMgdmFsdWUgaXMgYSB7QGxpbmsgRnVsbEl0ZW19LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGxJdGVtPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+KGl0ZW06IEl0ZW0sIGlkUHJvcDogSWRQcm9wKTogaXRlbSBpcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIGl0ZW1baWRQcm9wXSAhPSBudWxsO1xufVxuXG4vKiogQWRkIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEV2ZW50UGF5bG9hZCB7XG4gIC8qKiBJZHMgb2YgYWRkZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xufVxuLyoqIFVwZGF0ZSBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVFdmVudFBheWxvYWQ8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKiogSWRzIG9mIHVwZGF0ZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xuICAvKiogSXRlbXMgYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGlzIHVwZGF0ZS4gKi9cbiAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogSXRlbXMgYXMgdGhleSBhcmUgbm93LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBKdXN0IGdldCB0aGUgZGF0YSBmcm9tIHRoZSBkYXRhIHNldCBvciBkYXRhIHZpZXcuXG4gICAqL1xuICBkYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG59XG4vKiogUmVtb3ZlIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbW92ZUV2ZW50UGF5bG9hZDxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIC8qKiBJZHMgb2YgcmVtb3ZlZCBpdGVtcy4gKi9cbiAgaXRlbXM6IElkW107XG4gIC8qKiBJdGVtcyBhcyB0aGV5IHdlcmUgYmVmb3JlIHRoZWlyIHJlbW92YWwuICovXG4gIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbn1cblxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyAoZXZlbnQgbmFtZSDihpIgcGF5bG9hZCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQYXlsb2FkczxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIGFkZDogQWRkRXZlbnRQYXlsb2FkO1xuICB1cGRhdGU6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xuICByZW1vdmU6IFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xufVxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBwYXlsb2FkKS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFBheWxvYWRzV2l0aEFueTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBleHRlbmRzIEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPiB7XG4gIFwiKlwiOiBWYWx1ZU9mPEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPj47XG59XG5cbi8qKlxuICogTWFwIG9mIGV2ZW50IGNhbGxiYWNrIHR5cGVzIChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3M8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgYWRkKG5hbWU6IFwiYWRkXCIsIHBheWxvYWQ6IEFkZEV2ZW50UGF5bG9hZCB8IG51bGwsIHNlbmRlcklkPzogSWQgfCBudWxsKTogdm9pZDtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHVwZGF0ZShcbiAgICBuYW1lOiBcInVwZGF0ZVwiLFxuICAgIHBheWxvYWQ6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+IHwgbnVsbCxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgcmVtb3ZlKFxuICAgIG5hbWU6IFwicmVtb3ZlXCIsXG4gICAgcGF5bG9hZDogUmVtb3ZlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4gfCBudWxsLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG59XG4vKipcbiAqIE1hcCBvZiBldmVudCBjYWxsYmFjayB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3NXaXRoQW55PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGV4dGVuZHMgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCAoe0BsaW5rIEV2ZW50TmFtZX0pLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIERhdGEgYWJvdXQgdGhlIGl0ZW1zIGFmZmVjdGVkIGJ5IHRoaXMgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIEEgc2VuZGVySWQsIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2hpY2ggdHJpZ2dlcmVkIHRoZSBldmVudC4gSWYgc2VuZGVySWQgaXMgbm90IHByb3ZpZGVkLCB0aGUgYXJndW1lbnQgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICBcIipcIjxOIGV4dGVuZHMga2V5b2YgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPj4oXG4gICAgbmFtZTogTixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bTl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbn1cblxuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcy4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50TmFtZSA9IGtleW9mIEV2ZW50UGF5bG9hZHM8bmV2ZXIsIFwiXCI+O1xuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcyBhbmQgJyonIHRvIGxpc3RlbiBmb3IgYWxsLiAqL1xuZXhwb3J0IHR5cGUgRXZlbnROYW1lV2l0aEFueSA9IGtleW9mIEV2ZW50UGF5bG9hZHNXaXRoQW55PG5ldmVyLCBcIlwiPjtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBvcmRlciBwYXJhbWV0ZXIuXG4gKiAtIEEgc3RyaW5nIHZhbHVlIGRldGVybWluZXMgd2hpY2ggcHJvcGVydHkgd2lsbCBiZSB1c2VkIGZvciBzb3J0aW5nICh1c2luZyA8IGFuZCA+IG9wZXJhdG9ycyBmb3IgbnVtZXJpYyBjb21wYXJpc29uKS5cbiAqIC0gQSBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdGhlIHNhbWUgd2F5IGFzIGluIEFycmF5LnNvcnQuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YUludGVyZmFjZU9yZGVyPEl0ZW0+ID1cbiAgfCBrZXlvZiBJdGVtXG4gIHwgKChhOiBJdGVtLCBiOiBJdGVtKSA9PiBudW1iZXIpO1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm4gdHlwZSBpbmRlcGVuZGVudCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0Jhc2U8SXRlbT4ge1xuICAvKipcbiAgICogQW4gYXJyYXkgd2l0aCBmaWVsZCBuYW1lcywgb3IgYW4gb2JqZWN0IHdpdGggY3VycmVudCBmaWVsZCBuYW1lIGFuZCBuZXcgZmllbGQgbmFtZSB0aGF0IHRoZSBmaWVsZCBpcyByZXR1cm5lZCBhcy4gQnkgZGVmYXVsdCwgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGFyZSBlbWl0dGVkLiBXaGVuIGZpZWxkcyBpcyBkZWZpbmVkLCBvbmx5IHRoZSBwcm9wZXJ0aWVzIHdob3NlIG5hbWUgaXMgc3BlY2lmaWVkIGluIGZpZWxkcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogV2FybmluZyoqOiBUaGVyZSBpcyBubyBUeXBlU2NyaXB0IHN1cHBvcnQgZm9yIHRoaXMuXG4gICAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZ2V0IG9wdGlvbnMgKHJldHVybnMgYSBzaW5nbGUgaXRlbSBvciBhbiBhcnJheSkuXG4gKlxuICogQHJlbWFya3NcbiAqIFdoZXRoZXIgYW4gaXRlbSBvciBhbmQgYXJyYXkgb2YgaXRlbXMgaXMgcmV0dXJuZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdHlwZSBvZiB0aGUgaWQocykgYXJndW1lbnQuXG4gKiBJZiBhbiBhcnJheSBvZiBpZHMgaXMgcmVxdWVzdGVkIGFuIGFycmF5IG9mIGl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiBhIHNpbmdsZSBpZCBpcyByZXF1ZXN0ZWQgYSBzaW5nbGUgaXRlbSAob3IgbnVsbCBpZiB0aGUgaWQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBpdGVtKSB3aWxsIGJlIHJldHVybmVkLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzaW5nbGUgaXRlbSAoaWYgaW52b2tlZCB3aXRoIGFuIGlkKSBvciBhbiBhcnJheSBvZiBpdGVtcyAoaWYgaW52b2tlZCB3aXRoIGFuIGFycmF5IG9mIGlkcykuICovXG4gIHJldHVyblR5cGU/OiB1bmRlZmluZWQgfCBcIkFycmF5XCI7XG59XG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm5zIGFuIG9iamVjdCkuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSByZXR1cm5lZCBvYmplY3QgaGFzIGlkcyBhcyBrZXlzIGFuZCBpdGVtcyBhcyB2YWx1ZXMgb2YgY29ycmVzcG9uZGluZyBpZHMuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG1hcCAoaWQg4oaSIGl0ZW0pLiAqL1xuICByZXR1cm5UeXBlOiBcIk9iamVjdFwiO1xufVxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJucyBzaW5nbGUgaXRlbSwgYW4gYXJyYXkgb3Igb2JqZWN0KS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgdHlwZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiA9XG4gIHwgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICB8IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+O1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBpZHMgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBmb3IgZWFjaCBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEFuIGFycmF5IHdpdGggZmllbGQgbmFtZXMsIG9yIGFuIG9iamVjdCB3aXRoIGN1cnJlbnQgZmllbGQgbmFtZSBhbmQgbmV3IGZpZWxkIG5hbWUgdGhhdCB0aGUgZmllbGQgaXMgcmV0dXJuZWQgYXMuIEJ5IGRlZmF1bHQsIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtcyBhcmUgZW1pdHRlZC4gV2hlbiBmaWVsZHMgaXMgZGVmaW5lZCwgb25seSB0aGUgcHJvcGVydGllcyB3aG9zZSBuYW1lIGlzIHNwZWNpZmllZCBpbiBmaWVsZHMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgaXRlbXMuICovXG4gIGZpZWxkcz86IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBtYXAgb3ByaW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIE9yaWdpbmFsIC0gVGhlIG9yaWdpbmFsIGl0ZW0gdHlwZSBpbiB0aGUgZGF0YS5cbiAqIEB0eXBlUGFyYW0gTWFwcGVkIC0gVGhlIHR5cGUgYWZ0ZXIgbWFwcGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxPcmlnaW5hbCwgTWFwcGVkPiB7XG4gIC8qKiBBbiBhcnJheSB3aXRoIGZpZWxkIG5hbWVzLCBvciBhbiBvYmplY3Qgd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUgYW5kIG5ldyBmaWVsZCBuYW1lIHRoYXQgdGhlIGZpZWxkIGlzIHJldHVybmVkIGFzLiBCeSBkZWZhdWx0LCBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgYXJlIGVtaXR0ZWQuIFdoZW4gZmllbGRzIGlzIGRlZmluZWQsIG9ubHkgdGhlIHByb3BlcnRpZXMgd2hvc2UgbmFtZSBpcyBzcGVjaWZpZWQgaW4gZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIGl0ZW1zLiAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBPcmlnaW5hbCkgPT4gYm9vbGVhbjtcbiAgLyoqIE9yZGVyIHRoZSBpdGVtcyBieSBhIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uICovXG4gIG9yZGVyPzogRGF0YUludGVyZmFjZU9yZGVyPE1hcHBlZD47XG59XG5cbi8qKlxuICogQ29tbW9uIGludGVyZmFjZSBmb3IgZGF0YSBzZXRzIGFuZCBkYXRhIHZpZXcuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZCAobWlzc2luZyBpZHMgd2lsbCBiZSBnZW5lcmF0ZWQgdXBvbiBpbnNlcnRpb24pLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgSXRlbSB0eXBlIHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4ge1xuICAvKiogVGhlIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgbGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBrZXkgb2YgaWQgcHJvcGVydHkuICovXG4gIGlkUHJvcDogSWRQcm9wO1xuXG4gIC8qKlxuICAgKiBBZGQgYSB1bml2ZXJzYWwgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgKmAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW55IG9mIHRoZSBldmVudHMgYGFkZGAsIGB1cGRhdGVgLCBhbmQgYHJlbW92ZWAgb2NjdXJzLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcIipcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYGFkZGAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgYWRkYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIGFkZGVkLCBvciB3aGVuIGFuIGl0ZW0gaXMgdXBkYXRlZCB3aGlsZSBub3QgeWV0IGV4aXN0aW5nLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcImFkZFwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl0pOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGEgYHJlbW92ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgcmVtb3ZlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgdXBkYXRlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBleGlzdGluZyBpdGVtIG9yIGEgc2V0IG9mIGV4aXN0aW5nIGl0ZW1zIGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHVuaXZlcnNhbCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiKlwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdKTogdm9pZDtcbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBgYWRkYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiYWRkXCIsIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBgcmVtb3ZlYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zLlxuICAgKi9cbiAgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyByZXF1ZXN0ZWQgaXRlbXMuXG4gICAqL1xuICBnZXQob3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPik6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBhcmUgbm8gaXRlbXMpLlxuICAgKi9cbiAgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgcmVxdWVzdGVkIGl0ZW1zIG9yIGlmIHJlcXVlc3RlZCBhbiBvYmplY3QgbWFwIG9mIGl0ZW1zIChtYXkgYmUgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGFyZSBubyBpdGVtcykuXG4gICAqL1xuICBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBvciBudWxsIGlmIHRoZSBpZCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGl0ZW0uXG4gICAqL1xuICBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIG9yIG51bGwgaWYgdGhlIGlkIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbS5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIGlmIGZvdW5kIG9yIG51bGwgb3RoZXJ3aXNlLiBJZiByZXF1ZXN0ZWQgYW4gb2JqZWN0IG1hcCB3aXRoIDAgdG8gMSBpdGVtcy5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICogSWYgcmVxdWVzdGVkIGFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gSWQgb3IgaWRzIHRvIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIGl0ZW1zIChmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSBpZHMgKHNpbmdsZSBvciBhcnJheSkgYW5kIHRoZSBvcHRpb25zLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIERhdGFTZXQgdG8gd2hpY2ggdGhlIGluc3RhbmNlIGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSBpcyBjb25uZWN0ZWQuXG4gICAqIEluIGNhc2UgdGhlcmUgaXMgYSBjaGFpbiBvZiBtdWx0aXBsZSBEYXRhVmlld3MsIHRoZSByb290IERhdGFTZXQgb2YgdGhpcyBjaGFpbiBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRhdGEgc2V0IHRoYXQgYWN0dWFsbHkgY29udGFpbnMgdGhlIGRhdGEuXG4gICAqL1xuICBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPjtcblxuICAvKipcbiAgICogR2V0IGlkcyBvZiBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiByZXR1cm5lZCBpZHMgdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICovXG4gIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiBpdGVyYXRpb24gdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBFeGVjdXRlZCBpbiBzaW1pbGFyIGZhc2hpb24gdG8gQXJyYXkuZm9yRWFjaCBjYWxsYmFjaywgYnV0IGluc3RlYWQgb2YgaXRlbSwgaW5kZXgsIGFycmF5IHJlY2VpdmVzIGl0ZW0sIGlkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICovXG4gIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBNYXAgZWFjaCBpdGVtIGludG8gZGlmZmVyZW50IGl0ZW0gYW5kIHJldHVybiB0aGVtIGFzIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBObyBndWFyYW50ZWUgaXMgZ2l2ZW4gYWJvdXQgdGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBldmVuIGlmIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkICh0aGUgaXRlbXMgYXJlIHNvcnRlZCBhZnRlciB0aGUgbWFwcGluZykuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEFycmF5Lm1hcC1saWtlIGNhbGxiYWNrLCBidXQgb25seSB3aXRoIHRoZSBmaXJzdCB0d28gcGFyYW1zLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIG1hcHBlZCBpdGVtcy5cbiAgICovXG4gIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdO1xuXG4gIC8qKlxuICAgKiBTdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBJZHMgb2YgdGhlIGl0ZW1zIHRvIGJlIGluY2x1ZGVkIGluIHRoaXMgc3RyZWFtIChtaXNzaW5nIGFyZSBpZ25vcmVkKSwgYWxsIGlmIG9taXR0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhIHN0cmVhbSBmb3IgdGhpcyBkYXRhIHNldC5cbiAgICovXG4gIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+O1xufVxuIiwgIi8qKiBRdWV1ZSBjb25maWd1cmF0aW9uIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVPcHRpb25zIHtcbiAgLyoqIFRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBCeSBkZWZhdWx0IHRoZXJlIGlzIG5vIGF1dG9tYXRpYyBmbHVzaGluZyAoYG51bGxgKS4gKi9cbiAgZGVsYXk/OiBudWxsIHwgbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBpcyBgSW5maW5pdHlgLiAqL1xuICBtYXg/OiBudW1iZXI7XG59XG4vKipcbiAqIFF1ZXVlIGV4dGVuZGluZyBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIG1ldGhvZCBuYW1lcyB0byBiZSByZXBsYWNlZCBieSBxdWV1ZWQgdmVyc2lvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVFeHRlbmRPcHRpb25zPFQ+IHtcbiAgLyoqIEEgbGlzdCB3aXRoIG1ldGhvZCBuYW1lcyBvZiB0aGUgbWV0aG9kcyBvbiB0aGUgb2JqZWN0IHRvIGJlIHJlcGxhY2VkIHdpdGggcXVldWVkIG9uZXMuICovXG4gIHJlcGxhY2U6IFRbXTtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IHZhbHVlIGlzIG51bGwuICovXG4gIGRlbGF5PzogbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBvZiBtYXggaXMgSW5maW5pdHkuICovXG4gIG1heD86IG51bWJlcjtcbn1cbi8qKlxuICogUXVldWUgY2FsbCBlbnRyeS5cbiAqIC0gQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZC5cbiAqIC0gQW4gb2JqZWN0IHdpdGggZnVuY3Rpb24sIGFyZ3MsIGNvbnRleHQgKGxpa2UgZnVuY3Rpb24uYmluZChjb250ZXh0LCAuLi5hcmdzKSkuXG4gKi9cbnR5cGUgUXVldWVDYWxsRW50cnkgPVxuICB8IEZ1bmN0aW9uXG4gIHwge1xuICAgICAgZm46IEZ1bmN0aW9uO1xuICAgICAgYXJnczogdW5rbm93bltdO1xuICAgIH1cbiAgfCB7XG4gICAgICBmbjogRnVuY3Rpb247XG4gICAgICBhcmdzOiB1bmtub3duW107XG4gICAgICBjb250ZXh0OiB1bmtub3duO1xuICAgIH07XG5cbmludGVyZmFjZSBRdWV1ZUV4dGVuZGVkPE8+IHtcbiAgb2JqZWN0OiBPO1xuICBtZXRob2RzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG9yaWdpbmFsOiB1bmtub3duO1xuICB9W107XG59XG5cbi8qKlxuICogQSBxdWV1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBtZXRob2QgbmFtZXMgdG8gYmUgcmVwbGFjZWQgYnkgcXVldWVkIHZlcnNpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVldWU8VCA9IG5ldmVyPiB7XG4gIC8qKiBEZWxheSBpbiBtaWxsaXNlY29uZHMuIElmIGRlZmluZWQgdGhlIHF1ZXVlIHdpbGwgYmUgcGVyaW9kaWNhbGx5IGZsdXNoZWQuICovXG4gIHB1YmxpYyBkZWxheTogbnVsbCB8IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHF1ZXVlIGJlZm9yZSBpdCB3aWxsIGJlIGZsdXNoZWQuICovXG4gIHB1YmxpYyBtYXg6IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9xdWV1ZToge1xuICAgIGZuOiBGdW5jdGlvbjtcbiAgICBhcmdzPzogdW5rbm93bltdO1xuICAgIGNvbnRleHQ/OiB1bmtub3duO1xuICB9W10gPSBbXTtcblxuICBwcml2YXRlIF90aW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9leHRlbmRlZDogbnVsbCB8IFF1ZXVlRXh0ZW5kZWQ8VD4gPSBudWxsO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgUXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUXVldWUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogUXVldWVPcHRpb25zKSB7XG4gICAgLy8gb3B0aW9uc1xuICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgIHRoaXMubWF4ID0gSW5maW5pdHk7XG5cbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBRdWV1ZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9ucz86IFF1ZXVlT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmRlbGF5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLmRlbGF5ID0gb3B0aW9ucy5kZWxheTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xuICAgIH1cblxuICAgIHRoaXMuX2ZsdXNoSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgYW4gb2JqZWN0IHdpdGggcXVldWluZyBmdW5jdGlvbmFsaXR5LlxuICAgKiBUaGUgb2JqZWN0IHdpbGwgYmUgZXh0ZW5kZWQgd2l0aCBhIGZ1bmN0aW9uIGZsdXNoLCBhbmQgdGhlIG1ldGhvZHMgcHJvdmlkZWQgaW4gb3B0aW9ucy5yZXBsYWNlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBxdWV1ZWQgb25lcy5cbiAgICpcbiAgICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXh0ZW5kPE8gZXh0ZW5kcyB7IGZsdXNoPzogKCkgPT4gdm9pZCB9LCBLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IE8sXG4gICAgb3B0aW9uczogUXVldWVFeHRlbmRPcHRpb25zPEs+XG4gICk6IFF1ZXVlPE8+IHtcbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBRdWV1ZTxPPihvcHRpb25zKTtcblxuICAgIGlmIChvYmplY3QuZmx1c2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFyZ2V0IG9iamVjdCBhbHJlYWR5IGhhcyBhIHByb3BlcnR5IGZsdXNoXCIpO1xuICAgIH1cbiAgICBvYmplY3QuZmx1c2ggPSAoKTogdm9pZCA9PiB7XG4gICAgICBxdWV1ZS5mbHVzaCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBtZXRob2RzOiBRdWV1ZUV4dGVuZGVkPE8+W1wibWV0aG9kc1wiXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJmbHVzaFwiLFxuICAgICAgICBvcmlnaW5hbDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXBsYWNlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMucmVwbGFjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBuYW1lID0gb3B0aW9ucy5yZXBsYWNlW2ldO1xuICAgICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBvcmlnaW5hbDogKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPilbbmFtZV0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICBxdWV1ZS5yZXBsYWNlKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPiwgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVldWUuX2V4dGVuZGVkID0ge1xuICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICBtZXRob2RzOiBtZXRob2RzLFxuICAgIH07XG5cbiAgICByZXR1cm4gcXVldWU7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSB0aGUgcXVldWUuIFRoZSBxdWV1ZSB3aWxsIGZpcnN0IGZsdXNoIGFsbCBxdWV1ZWQgYWN0aW9ucywgYW5kIGluIGNhc2UgaXQgaGFzIGV4dGVuZGVkIGFuIG9iamVjdCwgd2lsbCByZXN0b3JlIHRoZSBvcmlnaW5hbCBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsdXNoKCk7XG5cbiAgICBpZiAodGhpcy5fZXh0ZW5kZWQpIHtcbiAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuX2V4dGVuZGVkLm9iamVjdDtcbiAgICAgIGNvbnN0IG1ldGhvZHMgPSB0aGlzLl9leHRlbmRlZC5tZXRob2RzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZHNbaV07XG4gICAgICAgIGlmIChtZXRob2Qub3JpZ2luYWwpIHtcbiAgICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICAgIChvYmplY3QgYXMgYW55KVttZXRob2QubmFtZV0gPSBtZXRob2Qub3JpZ2luYWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBkZWxldGUgKG9iamVjdCBhcyBhbnkpW21ldGhvZC5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fZXh0ZW5kZWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgbWV0aG9kIG9uIGFuIG9iamVjdCB3aXRoIGEgcXVldWVkIHZlcnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBPYmplY3QgaGF2aW5nIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSBtZXRob2QgLSBUaGUgbWV0aG9kIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcmVwbGFjZTxNIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IFJlY29yZDxNLCAoKSA9PiB2b2lkPixcbiAgICBtZXRob2Q6IE1cbiAgKTogdm9pZCB7XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzIC0tIEZ1bmN0aW9uIHRoaXMgaXMgbmVjZXNzYXJ5IGluIHRoZSBmdW5jdGlvbiBiZWxsb3csIHNvIGNsYXNzIHRoaXMgaGFzIHRvIGJlIHNhdmVkIGludG8gYSB2YXJpYWJsZSBoZXJlLiAqL1xuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjb25zdCBvcmlnaW5hbCA9IG9iamVjdFttZXRob2RdO1xuICAgIGlmICghb3JpZ2luYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBcIiArIG1ldGhvZCArIFwiIHVuZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBvYmplY3RbbWV0aG9kXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICAgIC8vIGFkZCB0aGlzIGNhbGwgdG8gdGhlIHF1ZXVlXG4gICAgICBtZS5xdWV1ZSh7XG4gICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgIGZuOiBvcmlnaW5hbCxcbiAgICAgICAgY29udGV4dDogdGhpcyxcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUXVldWUgYSBjYWxsLlxuICAgKlxuICAgKiBAcGFyYW0gZW50cnkgLSBUaGUgZnVuY3Rpb24gb3IgZW50cnkgdG8gYmUgcXVldWVkLlxuICAgKi9cbiAgcHVibGljIHF1ZXVlKGVudHJ5OiBRdWV1ZUNhbGxFbnRyeSk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7IGZuOiBlbnRyeSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWUucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmx1c2hJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHF1ZXVlIG5lZWRzIHRvIGJlIGZsdXNoZWQuXG4gICAqL1xuICBwcml2YXRlIF9mbHVzaElmTmVlZGVkKCk6IHZvaWQge1xuICAgIC8vIGZsdXNoIHdoZW4gdGhlIG1heGltdW0gaXMgZXhjZWVkZWQuXG4gICAgaWYgKHRoaXMuX3F1ZXVlLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gICAgLy8gZmx1c2ggYWZ0ZXIgYSBwZXJpb2Qgb2YgaW5hY3Rpdml0eSB3aGVuIGEgZGVsYXkgaXMgY29uZmlndXJlZFxuICAgIGlmICh0aGlzLl90aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHR5cGVvZiB0aGlzLmRlbGF5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH0sIHRoaXMuZGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCBhbGwgcXVldWVkIGNhbGxzXG4gICAqL1xuICBwdWJsaWMgZmx1c2goKTogdm9pZCB7XG4gICAgdGhpcy5fcXVldWUuc3BsaWNlKDApLmZvckVhY2goKGVudHJ5KTogdm9pZCA9PiB7XG4gICAgICBlbnRyeS5mbi5hcHBseShlbnRyeS5jb250ZXh0IHx8IGVudHJ5LmZuLCBlbnRyeS5hcmdzIHx8IFtdKTtcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIEV2ZW50Q2FsbGJhY2tzV2l0aEFueSxcbiAgRXZlbnROYW1lLFxuICBFdmVudE5hbWVXaXRoQW55LFxuICBFdmVudFBheWxvYWRzLFxuICBJZCxcbiAgUGFydEl0ZW0sXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbnR5cGUgRXZlbnRTdWJzY3JpYmVyczxJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPiwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW05hbWUgaW4ga2V5b2YgRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5dOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG59O1xuXG4vKipcbiAqIHtAbGluayBEYXRhU2V0fSBjb2RlIHRoYXQgY2FuIGJlIHJldXNlZCBpbiB7QGxpbmsgRGF0YVZpZXd9IG9yIG90aGVyIHNpbWlsYXIgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBEYXRhSW50ZXJmYWNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFTZXRQYXJ0PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGltcGxlbWVudHMgUGljazxEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4sIFwib25cIiB8IFwib2ZmXCI+XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmliZXJzOiB7XG4gICAgW05hbWUgaW4gRXZlbnROYW1lV2l0aEFueV06IEV2ZW50U3Vic2NyaWJlcnM8SXRlbSwgSWRQcm9wPltOYW1lXVtdO1xuICB9ID0ge1xuICAgIFwiKlwiOiBbXSxcbiAgICBhZGQ6IFtdLFxuICAgIHJlbW92ZTogW10sXG4gICAgdXBkYXRlOiBbXSxcbiAgfTtcblxuICBwcm90ZWN0ZWQgX3RyaWdnZXIoXG4gICAgZXZlbnQ6IFwiYWRkXCIsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1wiYWRkXCJdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG4gIHByb3RlY3RlZCBfdHJpZ2dlcihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgcHJvdGVjdGVkIF90cmlnZ2VyKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogVHJpZ2dlciBhbiBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIEV2ZW50IHBheWxvYWQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIElkIG9mIHRoZSBzZW5kZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3RyaWdnZXI8TmFtZSBleHRlbmRzIEV2ZW50TmFtZT4oXG4gICAgZXZlbnQ6IE5hbWUsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W05hbWVdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICgoZXZlbnQgYXMgc3RyaW5nKSA9PT0gXCIqXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB0cmlnZ2VyIGV2ZW50ICpcIik7XG4gICAgfVxuXG4gICAgWy4uLnRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XSwgLi4udGhpcy5fc3Vic2NyaWJlcnNbXCIqXCJdXS5mb3JFYWNoKFxuICAgICAgKHN1YnNjcmliZXIpOiB2b2lkID0+IHtcbiAgICAgICAgc3Vic2NyaWJlcihldmVudCwgcGF5bG9hZCwgc2VuZGVySWQgIT0gbnVsbCA/IHNlbmRlcklkIDogbnVsbCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwiKlwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJhZGRcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl1cbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBhbiBldmVudCwgYWRkIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBOb24tZnVuY3Rpb24gY2FsbGJhY2tzIGFyZSBpZ25vcmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgb248TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLy8gQFRPRE86IE1heWJlIHRocm93IGZvciBpbnZhbGlkIGNhbGxiYWNrcz9cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcIipcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcImFkZFwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXVxuICApOiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvZmYoXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIGFuIGV2ZW50LCByZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIElmIHRoZSBzYW1lIGNhbGxiYWNrIHdhcyBzdWJzY3JpYmVkIG1vcmUgdGhhbiBvbmNlICoqYWxsKiogb2NjdXJlbmNlcyB3aWxsIGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyBvZmY8TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0gPSB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0uZmlsdGVyKFxuICAgICAgKHN1YnNjcmliZXIpOiBib29sZWFuID0+IHN1YnNjcmliZXIgIT09IGNhbGxiYWNrXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb24gaW5zdGVhZCAoUFM6IERhdGFWaWV3LnN1YnNjcmliZSA9PT0gRGF0YVZpZXcub24pLlxuICAgKi9cbiAgcHVibGljIHN1YnNjcmliZTogRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPltcIm9uXCJdID0gRGF0YVNldFBhcnQucHJvdG90eXBlLm9uO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9mZiBpbnN0ZWFkIChQUzogRGF0YVZpZXcudW5zdWJzY3JpYmUgPT09IERhdGFWaWV3Lm9mZikuXG4gICAqL1xuICBwdWJsaWMgdW5zdWJzY3JpYmU6IERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5bXCJvZmZcIl0gPVxuICAgIERhdGFTZXRQYXJ0LnByb3RvdHlwZS5vZmY7XG5cbiAgLyogZGV2ZWxibG9jazpzdGFydCAqL1xuICBwdWJsaWMgZ2V0IHRlc3RMZWFrU3Vic2NyaWJlcnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlcnM7XG4gIH1cbiAgLyogZGV2ZWxibG9jazplbmQgKi9cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgU2V0YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQtb2JqZWN0c1xuY29sbGVjdGlvbignU2V0JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU2V0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zZXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3NldFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vZXMvZ2V0LWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL3N0YWJsZS9nZXQtaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uL2FjdHVhbC9nZXQtaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9mdWxsL2dldC1pdGVyYXRvcicpO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3JcIik7IiwgImltcG9ydCB7IElkIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcblxuLyoqXG4gKiBEYXRhIHN0cmVhbVxuICpcbiAqIEByZW1hcmtzXG4gKiB7QGxpbmsgRGF0YVN0cmVhbX0gb2ZmZXJzIGFuIGFsd2F5cyB1cCB0byBkYXRlIHN0cmVhbSBvZiBpdGVtcyBmcm9tIGEge0BsaW5rIERhdGFTZXR9IG9yIHtAbGluayBEYXRhVmlld30uXG4gKiBUaGF0IG1lYW5zIHRoYXQgdGhlIHN0cmVhbSBpcyBldmFsdWF0ZWQgYXQgdGhlIHRpbWUgb2YgaXRlcmF0aW9uLCBjb252ZXJzaW9uIHRvIGFub3RoZXIgZGF0YSB0eXBlIG9yIHdoZW4ge0BsaW5rIGNhY2hlfSBpcyBjYWxsZWQsIG5vdCB3aGVuIHRoZSB7QGxpbmsgRGF0YVN0cmVhbX0gd2FzIGNyZWF0ZWQuXG4gKiBNdWx0aXBsZSBpbnZvY2F0aW9ucyBvZiBmb3IgZXhhbXBsZSB7QGxpbmsgdG9JdGVtQXJyYXl9IG1heSB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cyAoaWYgdGhlIGRhdGEgc291cmNlIGxpa2UgZm9yIGV4YW1wbGUge0BsaW5rIERhdGFTZXR9IGdldHMgbW9kaWZpZWQpLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gVGhlIGl0ZW0gdHlwZSB0aGlzIHN0cmVhbSBpcyBnb2luZyB0byB3b3JrIHdpdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU3RyZWFtPEl0ZW0+IGltcGxlbWVudHMgSXRlcmFibGU8W0lkLCBJdGVtXT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWlyczogSXRlcmFibGU8W0lkLCBJdGVtXT47XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBkYXRhIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIHBhaXJzIC0gVGhlIGlkLCBpdGVtIHBhaXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhaXJzOiBJdGVyYWJsZTxbSWQsIEl0ZW1dPikge1xuICAgIHRoaXMuX3BhaXJzID0gcGFpcnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZXJhYmxlIG9mIGtleSwgdmFsdWUgcGFpcnMgZm9yIGV2ZXJ5IGVudHJ5IGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4ge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGl0ZXJhYmxlIG9mIGtleSwgdmFsdWUgcGFpcnMgZm9yIGV2ZXJ5IGVudHJ5IGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKmVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2Yga2V5cyBpbiB0aGUgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljICprZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8SWQ+IHtcbiAgICBmb3IgKGNvbnN0IFtpZF0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIGlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2YgdmFsdWVzIGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKnZhbHVlcygpOiBJdGVyYWJsZUl0ZXJhdG9yPEl0ZW0+IHtcbiAgICBmb3IgKGNvbnN0IFssIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBpdGVtO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGlkcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFycmF5IG1heSBjb250YWluIGR1cGxpY2l0aWVzLlxuICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCBhbGwgaWRzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JZEFycmF5KCk6IElkW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFpcnNdLm1hcCgocGFpcik6IElkID0+IHBhaXJbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBhcnJheSBtYXkgY29udGFpbiBkdXBsaWNpdGllcy5cbiAgICogQHJldHVybnMgVGhlIGFycmF5IHdpdGggYWxsIGl0ZW1zIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JdGVtQXJyYXkoKTogSXRlbVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3BhaXJzXS5tYXAoKHBhaXIpOiBJdGVtID0+IHBhaXJbMV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgZW50cmllcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFycmF5IG1heSBjb250YWluIGR1cGxpY2l0aWVzLlxuICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCBhbGwgZW50cmllcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvRW50cnlBcnJheSgpOiBbSWQsIEl0ZW1dW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFpcnNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvYmplY3QgbWFwIGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBpbiB0aGlzIHN0cmVhbSBhY2Nlc3NpYmxlIGJ5IGlkcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSW4gY2FzZSBvZiBkdXBsaWNhdGUgaWRzIChjb2VyY2VkIHRvIHN0cmluZyBzbyBgNyA9PSAnNydgKSB0aGUgbGFzdCBlbmNvdXRlcmVkIGFwcGVhcnMgaW4gdGhlIHJldHVybmVkIG9iamVjdC5cbiAgICogQHJldHVybnMgVGhlIG9iamVjdCBtYXAgb2YgYWxsIGlkIOKGkiBpdGVtIHBhaXJzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9PYmplY3RNYXAoKTogUmVjb3JkPElkLCBJdGVtPiB7XG4gICAgY29uc3QgbWFwOiBSZWNvcmQ8SWQsIEl0ZW0+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIG1hcFtpZF0gPSBpdGVtO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hcCBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMgaW4gdGhpcyBzdHJlYW0gYWNjZXNzaWJsZSBieSBpZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBtYXAgb2YgYWxsIGlkIOKGkiBpdGVtIHBhaXJzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9NYXAoKTogTWFwPElkLCBJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBNYXAodGhpcy5fcGFpcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHNldCBjb250YWluaW5nIGFsbCB0aGUgKHVuaXF1ZSkgaWRzIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgc2V0IG9mIGFsbCBpZHMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0lkU2V0KCk6IFNldDxJZD4ge1xuICAgIHJldHVybiBuZXcgU2V0KHRoaXMudG9JZEFycmF5KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHNldCBjb250YWluaW5nIGFsbCB0aGUgKHVuaXF1ZSkgaXRlbXMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBzZXQgb2YgYWxsIGl0ZW1zIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9JdGVtU2V0KCk6IFNldDxJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBTZXQodGhpcy50b0l0ZW1BcnJheSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNoZSB0aGUgaXRlbXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBtZXRob2QgYWxsb3dzIGZvciBpdGVtcyB0byBiZSBmZXRjaGVkIGltbWVkaWF0ZWxseSBhbmQgdXNlZCAocG9zc2libHkgbXVsdGlwbGUgdGltZXMpIGxhdGVyLlxuICAgKiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIG9wdGltaXplIHBlcmZvcm1hbmNlIGFzIHtAbGluayBEYXRhU3RyZWFtfSB3b3VsZCBvdGhlcndpc2UgcmVldmFsdWF0ZSBldmVyeXRoaW5nIHVwb24gZWFjaCBpdGVyYXRpb24uXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiBjb25zdCBkcyA9IG5ldyBEYXRhU2V0KFvigKZdKVxuICAgKlxuICAgKiBjb25zdCBjYWNoZWRTdHJlYW0gPSBkcy5zdHJlYW0oKVxuICAgKiAgIC5maWx0ZXIo4oCmKVxuICAgKiAgIC5zb3J0KOKApilcbiAgICogICAubWFwKOKApilcbiAgICogICAuY2FjaGVkKOKApikgLy8gRGF0YSBhcmUgZmV0Y2hlZCwgcHJvY2Vzc2VkIGFuZCBjYWNoZWQgaGVyZS5cbiAgICpcbiAgICogZHMuY2xlYXIoKVxuICAgKiBjaGFjaGVkU3RyZWFtIC8vIFN0aWxsIGhhcyBhbGwgdGhlIGl0ZW1zLlxuICAgKiBgYGBcbiAgICogQHJldHVybnMgQSBuZXcge0BsaW5rIERhdGFTdHJlYW19IHdpdGggY2FjaGVkIGl0ZW1zIChkZXRhY2hlZCBmcm9tIHRoZSBvcmlnaW5hbCB7QGxpbmsgRGF0YVNldH0pLlxuICAgKi9cbiAgcHVibGljIGNhY2hlKCk6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbShbLi4udGhpcy5fcGFpcnNdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRpc3RpbmN0IHZhbHVlcyBvZiBnaXZlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcGlja3MgYW5kIHBvc3NpYmx5IGNvbnZlcnRzIHRoZSBwcm9wZXJ0eS5cbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRpc3RpbmN0IHZhbHVlLlxuICAgKiBAcmV0dXJucyBBIHNldCBvZiBhbGwgZGlzdGluY3QgcHJvcGVydGllcy5cbiAgICovXG4gIHB1YmxpYyBkaXN0aW5jdDxUPihjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCk6IFNldDxUPiB7XG4gICAgY29uc3Qgc2V0ID0gbmV3IFNldDxUPigpO1xuXG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICBzZXQuYWRkKGNhbGxiYWNrKGl0ZW0sIGlkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIGl0ZW1zIG9mIHRoZSBzdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IGRlY2lkZXMgd2hldGhlciBhbiBpdGVtIHdpbGwgYmUgaW5jbHVkZWQuXG4gICAqIEByZXR1cm5zIEEgbmV3IGRhdGEgc3RyZWFtIHdpdGggdGhlIGZpbHRlcmVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGZpbHRlcihjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gYm9vbGVhbik6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIGNvbnN0IHBhaXJzID0gdGhpcy5fcGFpcnM7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtPEl0ZW0+KHtcbiAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICAgICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHBhaXJzKSB7XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKGl0ZW0sIGlkKSkge1xuICAgICAgICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIGl0ZW0gb2YgdGhlIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBpbnZva2VkIGZvciBlYWNoIGl0ZW0uXG4gICAqL1xuICBwdWJsaWMgZm9yRWFjaChjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gYm9vbGVhbik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgdGhlIGl0ZW1zIGludG8gYSBkaWZmZXJlbnQgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgY29udmVyc2lvbi5cbiAgICogQHR5cGVQYXJhbSBNYXBwZWQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbSBhZnRlciBtYXBwaW5nLlxuICAgKiBAcmV0dXJucyBBIG5ldyBkYXRhIHN0cmVhbSB3aXRoIHRoZSBtYXBwZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgbWFwPE1hcHBlZD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IE1hcHBlZFxuICApOiBEYXRhU3RyZWFtPE1hcHBlZD4ge1xuICAgIGNvbnN0IHBhaXJzID0gdGhpcy5fcGFpcnM7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtPE1hcHBlZD4oe1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBNYXBwZWRdPiB7XG4gICAgICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiBwYWlycykge1xuICAgICAgICAgIHlpZWxkIFtpZCwgY2FsbGJhY2soaXRlbSwgaWQpXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGl0ZW0gd2l0aCB0aGUgbWF4aW11bSB2YWx1ZSBvZiBnaXZlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcGlja3MgYW5kIHBvc3NpYmx5IGNvbnZlcnRzIHRoZSBwcm9wZXJ0eS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gd2l0aCB0aGUgbWF4aW11bSBpZiBmb3VuZCBvdGhlcndpc2UgbnVsbC5cbiAgICovXG4gIHB1YmxpYyBtYXgoY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IG51bWJlcik6IEl0ZW0gfCBudWxsIHtcbiAgICBjb25zdCBpdGVyID0gdGhpcy5fcGFpcnNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIGxldCBjdXJyID0gaXRlci5uZXh0KCk7XG4gICAgaWYgKGN1cnIuZG9uZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG1heEl0ZW06IEl0ZW0gPSBjdXJyLnZhbHVlWzFdO1xuICAgIGxldCBtYXhWYWx1ZTogbnVtYmVyID0gY2FsbGJhY2soY3Vyci52YWx1ZVsxXSwgY3Vyci52YWx1ZVswXSk7XG4gICAgd2hpbGUgKCEoY3VyciA9IGl0ZXIubmV4dCgpKS5kb25lKSB7XG4gICAgICBjb25zdCBbaWQsIGl0ZW1dID0gY3Vyci52YWx1ZTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgaWYgKHZhbHVlID4gbWF4VmFsdWUpIHtcbiAgICAgICAgbWF4VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgbWF4SXRlbSA9IGl0ZW07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heEl0ZW07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpdGVtIHdpdGggdGhlIG1pbmltdW0gdmFsdWUgb2YgZ2l2ZW4gcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0aGF0IHBpY2tzIGFuZCBwb3NzaWJseSBjb252ZXJ0cyB0aGUgcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIHdpdGggdGhlIG1pbmltdW0gaWYgZm91bmQgb3RoZXJ3aXNlIG51bGwuXG4gICAqL1xuICBwdWJsaWMgbWluKGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBudW1iZXIpOiBJdGVtIHwgbnVsbCB7XG4gICAgY29uc3QgaXRlciA9IHRoaXMuX3BhaXJzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBsZXQgY3VyciA9IGl0ZXIubmV4dCgpO1xuICAgIGlmIChjdXJyLmRvbmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBtaW5JdGVtOiBJdGVtID0gY3Vyci52YWx1ZVsxXTtcbiAgICBsZXQgbWluVmFsdWU6IG51bWJlciA9IGNhbGxiYWNrKGN1cnIudmFsdWVbMV0sIGN1cnIudmFsdWVbMF0pO1xuICAgIHdoaWxlICghKGN1cnIgPSBpdGVyLm5leHQoKSkuZG9uZSkge1xuICAgICAgY29uc3QgW2lkLCBpdGVtXSA9IGN1cnIudmFsdWU7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgIGlmICh2YWx1ZSA8IG1pblZhbHVlKSB7XG4gICAgICAgIG1pblZhbHVlID0gdmFsdWU7XG4gICAgICAgIG1pbkl0ZW0gPSBpdGVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtaW5JdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZSB0aGUgaXRlbXMgaW50byBhIHNpbmdsZSB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgcmVkdWN0aW9uLlxuICAgKiBAcGFyYW0gYWNjdW11bGF0b3IgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYWNjdW11bGF0b3IuXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhlIHJlZHVjZWQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgcmVkdWNlPFQ+KFxuICAgIGNhbGxiYWNrOiAoYWNjdW11bGF0b3I6IFQsIGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBhY2N1bXVsYXRvcjogVFxuICApOiBUIHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gY2FsbGJhY2soYWNjdW11bGF0b3IsIGl0ZW0sIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBJdGVtIGNvbXBhcmF0b3IuXG4gICAqIEByZXR1cm5zIEEgbmV3IHN0cmVhbSB3aXRoIHNvcnRlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBzb3J0KFxuICAgIGNhbGxiYWNrOiAoaXRlbUE6IEl0ZW0sIGl0ZW1COiBJdGVtLCBpZEE6IElkLCBpZEI6IElkKSA9PiBudW1iZXJcbiAgKTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtKHtcbiAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiAoKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiA9PlxuICAgICAgICBbLi4udGhpcy5fcGFpcnNdXG4gICAgICAgICAgLnNvcnQoKFtpZEEsIGl0ZW1BXSwgW2lkQiwgaXRlbUJdKTogbnVtYmVyID0+XG4gICAgICAgICAgICBjYWxsYmFjayhpdGVtQSwgaXRlbUIsIGlkQSwgaWRCKVxuICAgICAgICAgIClcbiAgICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpLFxuICAgIH0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgdjQgYXMgdXVpZDQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgcHVyZURlZXBPYmplY3RBc3NpZ24gfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbmltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldElkc09wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5LFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdCxcbiAgRGF0YUludGVyZmFjZU1hcE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VPcmRlcixcbiAgRGVlcFBhcnRpYWwsXG4gIEV2ZW50UGF5bG9hZHMsXG4gIEZ1bGxJdGVtLFxuICBJZCxcbiAgT3B0SWQsXG4gIFBhcnRJdGVtLFxuICBVcGRhdGVJdGVtLFxuICBpc0lkLFxufSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBRdWV1ZSwgUXVldWVPcHRpb25zIH0gZnJvbSBcIi4vcXVldWVcIjtcbmltcG9ydCB7IERhdGFTZXRQYXJ0IH0gZnJvbSBcIi4vZGF0YS1zZXQtcGFydFwiO1xuaW1wb3J0IHsgRGF0YVN0cmVhbSB9IGZyb20gXCIuL2RhdGEtc3RyZWFtXCI7XG5cbi8qKlxuICogSW5pdGlhbCBEYXRhU2V0IGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcCBleHRlbmRzIHN0cmluZz4ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpZWxkIGNvbnRhaW5pbmcgdGhlIGlkIG9mIHRoZSBpdGVtcy4gV2hlbiBkYXRhIGlzIGZldGNoZWQgZnJvbSBhIHNlcnZlciB3aGljaCB1c2VzIHNvbWUgc3BlY2lmaWMgZmllbGQgdG8gaWRlbnRpZnkgaXRlbXMsIHRoaXMgZmllbGQgbmFtZSBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBEYXRhU2V0IHVzaW5nIHRoZSBvcHRpb24gYGZpZWxkSWRgLiBGb3IgZXhhbXBsZSBbQ291Y2hEQl0oaHR0cDovL2NvdWNoZGIuYXBhY2hlLm9yZy8pIHVzZXMgdGhlIGZpZWxkIGAnX2lkJ2AgdG8gaWRlbnRpZnkgZG9jdW1lbnRzLlxuICAgKi9cbiAgZmllbGRJZD86IElkUHJvcDtcbiAgLyoqXG4gICAqIFF1ZXVlIGRhdGEgY2hhbmdlcyAoJ2FkZCcsICd1cGRhdGUnLCAncmVtb3ZlJykgYW5kIGZsdXNoIHRoZW0gYXQgb25jZS4gVGhlIHF1ZXVlIGNhbiBiZSBmbHVzaGVkIG1hbnVhbGx5IGJ5IGNhbGxpbmcgYERhdGFTZXQuZmx1c2goKWAsIG9yIGNhbiBiZSBmbHVzaGVkIGFmdGVyIGEgY29uZmlndXJlZCBkZWxheSBvciBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzLlxuICAgKlxuICAgKiBXaGVuIHF1ZXVlIGlzIHRydWUsIGEgcXVldWUgaXMgY3JlYXRlZCB3aXRoIGRlZmF1bHQgb3B0aW9ucy4gT3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHByb3ZpZGluZyBhbiBvYmplY3QuXG4gICAqL1xuICBxdWV1ZT86IFF1ZXVlT3B0aW9ucyB8IGZhbHNlO1xufVxuLyoqIERhdGFTZXQgY29uZmlndXJhdGlvbiBvYmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFF1ZXVlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IG9yIGZhbHNlIGlmIG5vIHF1ZXVlIHNob3VsZCBiZSB1c2VkLlxuICAgKlxuICAgKiAtIElmIGZhbHNlIGFuZCB0aGVyZSB3YXMgYSBxdWV1ZSBiZWZvcmUgaXQgd2lsbCBiZSBmbHVzaGVkIGFuZCB0aGVuIHJlbW92ZWQuXG4gICAqIC0gSWYge0BsaW5rIFF1ZXVlT3B0aW9uc30gdGhlIGV4aXN0aW5nIHF1ZXVlIHdpbGwgYmUgcmVjb25maWd1cmVkIG9yIGEgbmV3IHF1ZXVlIHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIHF1ZXVlPzogUXVldWUgfCBRdWV1ZU9wdGlvbnMgfCBmYWxzZTtcbn1cblxuLyoqXG4gKiBBZGQgYW4gaWQgdG8gZ2l2ZW4gaXRlbSBpZiBpdCBkb2Vzbid0IGhhdmUgb25lIGFscmVhZHkuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBpdGVtIHdpbGwgYmUgbW9kaWZpZWQuXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBpdGVtIHRoYXQgd2lsbCBoYXZlIGFuIGlkIGFmdGVyIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIGlkUHJvcCAtIFRoZSBrZXkgb2YgdGhlIGlkIHByb3BlcnR5LlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKiBAcmV0dXJucyB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVuc3VyZUZ1bGxJdGVtPEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LCBJZFByb3AgZXh0ZW5kcyBzdHJpbmc+KFxuICBpdGVtOiBJdGVtLFxuICBpZFByb3A6IElkUHJvcFxuKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB7XG4gIGlmIChpdGVtW2lkUHJvcF0gPT0gbnVsbCkge1xuICAgIC8vIGdlbmVyYXRlIGFuIGlkXG4gICAgaXRlbVtpZFByb3BdID0gdXVpZDQoKSBhcyBhbnk7XG4gIH1cblxuICByZXR1cm4gaXRlbSBhcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xufVxuXG4vKipcbiAqICMgRGF0YVNldFxuICpcbiAqIFZpcy5qcyBjb21lcyB3aXRoIGEgZmxleGlibGUgRGF0YVNldCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaG9sZCBhbmRcbiAqIG1hbmlwdWxhdGUgdW5zdHJ1Y3R1cmVkIGRhdGEgYW5kIGxpc3RlbiBmb3IgY2hhbmdlcyBpbiB0aGUgZGF0YS4gVGhlIERhdGFTZXRcbiAqIGlzIGtleS92YWx1ZSBiYXNlZC4gRGF0YSBpdGVtcyBjYW4gYmUgYWRkZWQsIHVwZGF0ZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGVcbiAqIERhdGFTZXQsIGFuZCBvbmUgY2FuIHN1YnNjcmliZSB0byBjaGFuZ2VzIGluIHRoZSBEYXRhU2V0LiBUaGUgZGF0YSBpbiB0aGVcbiAqIERhdGFTZXQgY2FuIGJlIGZpbHRlcmVkIGFuZCBvcmRlcmVkLiBEYXRhIGNhbiBiZSBub3JtYWxpemVkIHdoZW4gYXBwZW5kaW5nIGl0XG4gKiB0byB0aGUgRGF0YVNldCBhcyB3ZWxsLlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHVzZSBhIERhdGFTZXQuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICogdmFyIG9wdGlvbnMgPSB7fTtcbiAqIHZhciBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KG9wdGlvbnMpO1xuICpcbiAqIC8vIGFkZCBpdGVtc1xuICogLy8gbm90ZSB0aGF0IHRoZSBkYXRhIGl0ZW1zIGNhbiBjb250YWluIGRpZmZlcmVudCBwcm9wZXJ0aWVzIGFuZCBkYXRhIGZvcm1hdHNcbiAqIGRhdGEuYWRkKFtcbiAqICAge2lkOiAxLCB0ZXh0OiAnaXRlbSAxJywgZGF0ZTogbmV3IERhdGUoMjAxMywgNiwgMjApLCBncm91cDogMSwgZmlyc3Q6IHRydWV9LFxuICogICB7aWQ6IDIsIHRleHQ6ICdpdGVtIDInLCBkYXRlOiAnMjAxMy0wNi0yMycsIGdyb3VwOiAyfSxcbiAqICAge2lkOiAzLCB0ZXh0OiAnaXRlbSAzJywgZGF0ZTogJzIwMTMtMDYtMjUnLCBncm91cDogMn0sXG4gKiAgIHtpZDogNCwgdGV4dDogJ2l0ZW0gNCd9XG4gKiBdKTtcbiAqXG4gKiAvLyBzdWJzY3JpYmUgdG8gYW55IGNoYW5nZSBpbiB0aGUgRGF0YVNldFxuICogZGF0YS5vbignKicsIGZ1bmN0aW9uIChldmVudCwgcHJvcGVydGllcywgc2VuZGVySWQpIHtcbiAqICAgY29uc29sZS5sb2coJ2V2ZW50JywgZXZlbnQsIHByb3BlcnRpZXMpO1xuICogfSk7XG4gKlxuICogLy8gdXBkYXRlIGFuIGV4aXN0aW5nIGl0ZW1cbiAqIGRhdGEudXBkYXRlKHtpZDogMiwgZ3JvdXA6IDF9KTtcbiAqXG4gKiAvLyByZW1vdmUgYW4gaXRlbVxuICogZGF0YS5yZW1vdmUoNCk7XG4gKlxuICogLy8gZ2V0IGFsbCBpZHNcbiAqIHZhciBpZHMgPSBkYXRhLmdldElkcygpO1xuICogY29uc29sZS5sb2coJ2lkcycsIGlkcyk7XG4gKlxuICogLy8gZ2V0IGEgc3BlY2lmaWMgaXRlbVxuICogdmFyIGl0ZW0xID0gZGF0YS5nZXQoMSk7XG4gKiBjb25zb2xlLmxvZygnaXRlbTEnLCBpdGVtMSk7XG4gKlxuICogLy8gcmV0cmlldmUgYSBmaWx0ZXJlZCBzdWJzZXQgb2YgdGhlIGRhdGFcbiAqIHZhciBpdGVtcyA9IGRhdGEuZ2V0KHtcbiAqICAgZmlsdGVyOiBmdW5jdGlvbiAoaXRlbSkge1xuICogICAgIHJldHVybiBpdGVtLmdyb3VwID09IDE7XG4gKiAgIH1cbiAqIH0pO1xuICogY29uc29sZS5sb2coJ2ZpbHRlcmVkIGl0ZW1zJywgaXRlbXMpO1xuICogYGBgXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU2V0PFxuICAgIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICAgIElkUHJvcCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuICA+XG4gIGV4dGVuZHMgRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPlxuICBpbXBsZW1lbnRzIERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPlxue1xuICAvKiogRmx1c2ggYWxsIHF1ZXVlZCBjYWxscy4gKi9cbiAgcHVibGljIGZsdXNoPzogKCkgPT4gdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBsZW5ndGg6IG51bWJlcjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQgaWRQcm9wKCk6IElkUHJvcCB7XG4gICAgcmV0dXJuIHRoaXMuX2lkUHJvcDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhOiBNYXA8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pZFByb3A6IElkUHJvcDtcbiAgcHJpdmF0ZSBfcXVldWU6IFF1ZXVlPHRoaXM+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRGF0YVNldCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPik7XG4gIC8qKlxuICAgKiBAcGFyYW0gZGF0YSAtIEFuIGluaXRpYWwgc2V0IG9mIGl0ZW1zIGZvciB0aGUgbmV3IGluc3RhbmNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIERhdGFTZXQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRhOiBJdGVtW10sIG9wdGlvbnM/OiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPik7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgRGF0YVNldC5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBJbml0aWFsIGRhdGEgb3Igb3B0aW9ucy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zICh0eXBlIGVycm9yIGlmIGRhdGEgaXMgYWxzbyBvcHRpb25zKS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBkYXRhPzogSXRlbVtdIHwgRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD4sXG4gICAgb3B0aW9ucz86IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+XG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBjb3JyZWN0bHkgcmVhZCBvcHRpb25hbCBhcmd1bWVudHNcbiAgICBpZiAoZGF0YSAmJiAhQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgb3B0aW9ucyA9IGRhdGE7XG4gICAgICBkYXRhID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5fZGF0YSA9IG5ldyBNYXAoKTsgLy8gbWFwIHdpdGggZGF0YSBpbmRleGVkIGJ5IGlkXG4gICAgdGhpcy5sZW5ndGggPSAwOyAvLyBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIERhdGFTZXRcbiAgICB0aGlzLl9pZFByb3AgPSB0aGlzLl9vcHRpb25zLmZpZWxkSWQgfHwgKFwiaWRcIiBhcyBJZFByb3ApOyAvLyBuYW1lIG9mIHRoZSBmaWVsZCBjb250YWluaW5nIGlkXG5cbiAgICAvLyBhZGQgaW5pdGlhbCBkYXRhIHdoZW4gcHJvdmlkZWRcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCkge1xuICAgICAgdGhpcy5hZGQoZGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBuZXcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgbmV3IG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zPzogRGF0YVNldE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLnF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICAvLyBkZWxldGUgcXVldWUgaWYgbG9hZGVkXG4gICAgICAgIGlmICh0aGlzLl9xdWV1ZSkge1xuICAgICAgICAgIHRoaXMuX3F1ZXVlLmRlc3Ryb3koKTtcbiAgICAgICAgICB0aGlzLl9xdWV1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNyZWF0ZSBxdWV1ZSBhbmQgdXBkYXRlIGl0cyBvcHRpb25zXG4gICAgICAgIGlmICghdGhpcy5fcXVldWUpIHtcbiAgICAgICAgICB0aGlzLl9xdWV1ZSA9IFF1ZXVlLmV4dGVuZCh0aGlzLCB7XG4gICAgICAgICAgICByZXBsYWNlOiBbXCJhZGRcIiwgXCJ1cGRhdGVcIiwgXCJyZW1vdmVcIl0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5xdWV1ZSAmJiB0eXBlb2Ygb3B0aW9ucy5xdWV1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHRoaXMuX3F1ZXVlLnNldE9wdGlvbnMob3B0aW9ucy5xdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZGF0YSBpdGVtIG9yIGFuIGFycmF5IHdpdGggaXRlbXMuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgYWRkZWQgdG8gdGhlIERhdGFTZXQsIHRoZSBEYXRhU2V0IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgYWRkYC4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldCgpXG4gICAqXG4gICAqIC8vIGFkZCBpdGVtc1xuICAgKiBjb25zdCBpZHMgPSBkYXRhLmFkZChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgdGV4dDogJ2l0ZW0gd2l0aG91dCBhbiBpZCcgfVxuICAgKiBdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsxLCAyLCAnPFVVSUR2ND4nXVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBJdGVtcyB0byBiZSBhZGRlZCAoaWRzIHdpbGwgYmUgZ2VuZXJhdGVkIGlmIG1pc3NpbmcpLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIGFkZGVkSWRzIC0gQXJyYXkgd2l0aCB0aGUgaWRzIChnZW5lcmF0ZWQgaWYgbm90IHByZXNlbnQpIG9mIHRoZSBhZGRlZCBpdGVtcy5cbiAgICogQHRocm93cyBXaGVuIGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpZCBhcyBhbnkgb2YgdGhlIGFkZGVkIGl0ZW1zIGFscmVhZHkgZXhpc3RzLlxuICAgKi9cbiAgcHVibGljIGFkZChkYXRhOiBJdGVtIHwgSXRlbVtdLCBzZW5kZXJJZD86IElkIHwgbnVsbCk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgbGV0IGlkOiBJZDtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAvLyBBcnJheVxuICAgICAgY29uc3QgaWRzVG9BZGQ6IElkW10gPSBkYXRhLm1hcCgoZCkgPT4gZFt0aGlzLl9pZFByb3BdIGFzIElkKTtcbiAgICAgIGlmIChpZHNUb0FkZC5zb21lKChpZCkgPT4gdGhpcy5fZGF0YS5oYXMoaWQpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGR1cGxpY2F0ZSBpZCB3YXMgZm91bmQgaW4gdGhlIHBhcmFtZXRlciBhcnJheS5cIik7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZCA9IHRoaXMuX2FkZEl0ZW0oZGF0YVtpXSk7XG4gICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gU2luZ2xlIGl0ZW1cbiAgICAgIGlkID0gdGhpcy5fYWRkSXRlbShkYXRhKTtcbiAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlXCIpO1xuICAgIH1cblxuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSwgc2VuZGVySWQpO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRlZElkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3RpbmcgaXRlbXMuIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgcHJvdmlkZWQgcHJvcGVydGllcyB3aWxsIGJlIG1lcmdlZCBpbiB0aGUgZXhpc3RpbmcgaXRlbS4gV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgdXBkYXRlZCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGBhZGRgIGZvciB0aGUgYWRkZWQgaXRlbXMsIGFuZCBhbiBldmVudCBgdXBkYXRlYC4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgaWQ6IDMsIHRleHQ6ICdpdGVtIDMnIH1cbiAgICogXSlcbiAgICpcbiAgICogLy8gdXBkYXRlIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEudXBkYXRlKFtcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyICh1cGRhdGVkKScgfSxcbiAgICogICB7IGlkOiA0LCB0ZXh0OiAnaXRlbSA0IChuZXcpJyB9XG4gICAqIF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzIsIDRdXG4gICAqIGBgYFxuICAgKlxuICAgKiAjIyBXYXJuaW5nIGZvciBUeXBlU2NyaXB0IHVzZXJzXG4gICAqIFRoaXMgbWV0aG9kIG1heSBpbnRyb2R1Y2UgcGFydGlhbCBpdGVtcyBpbnRvIHRoZSBkYXRhIHNldC4gVXNlIGFkZCBvciB1cGRhdGVPbmx5IGluc3RlYWQgZm9yIGJldHRlciB0eXBlIHNhZmV0eS5cbiAgICogQHBhcmFtIGRhdGEgLSBJdGVtcyB0byBiZSB1cGRhdGVkIChpZiB0aGUgaWQgaXMgYWxyZWFkeSBwcmVzZW50KSBvciBhZGRlZCAoaWYgdGhlIGlkIGlzIG1pc3NpbmcpLlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIHVwZGF0ZWRJZHMgLSBUaGUgaWRzIG9mIHRoZSBhZGRlZCAodGhlc2UgbWF5IGJlIG5ld2x5IGdlbmVyYXRlZCBpZiB0aGVyZSB3YXMgbm8gaWQgaW4gdGhlIGl0ZW0gZnJvbSB0aGUgZGF0YSkgb3IgdXBkYXRlZCBpdGVtcy5cbiAgICogQHRocm93cyBXaGVuIHRoZSBzdXBwbGllZCBkYXRhIGlzIG5laXRoZXIgYW4gaXRlbSBub3IgYW4gYXJyYXkgb2YgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlKFxuICAgIGRhdGE6IERlZXBQYXJ0aWFsPEl0ZW0+IHwgRGVlcFBhcnRpYWw8SXRlbT5bXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiBJZFtdIHtcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCBvbGREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgY29uc3QgaWRQcm9wID0gdGhpcy5faWRQcm9wO1xuXG4gICAgY29uc3QgYWRkT3JVcGRhdGUgPSAoaXRlbTogRGVlcFBhcnRpYWw8SXRlbT4pOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IG9yaWdJZDogT3B0SWQgPSBpdGVtW2lkUHJvcF07XG4gICAgICBpZiAob3JpZ0lkICE9IG51bGwgJiYgdGhpcy5fZGF0YS5oYXMob3JpZ0lkKSkge1xuICAgICAgICBjb25zdCBmdWxsSXRlbSA9IGl0ZW0gYXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjsgLy8gaXQgaGFzIGFuIGlkLCB0aGVyZWZvcmUgaXQgaXMgYSBmdWxsaXRlbVxuICAgICAgICBjb25zdCBvbGRJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGF0YS5nZXQob3JpZ0lkKSk7XG4gICAgICAgIC8vIHVwZGF0ZSBpdGVtXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5fdXBkYXRlSXRlbShmdWxsSXRlbSk7XG4gICAgICAgIHVwZGF0ZWRJZHMucHVzaChpZCk7XG4gICAgICAgIHVwZGF0ZWREYXRhLnB1c2goZnVsbEl0ZW0pO1xuICAgICAgICBvbGREYXRhLnB1c2gob2xkSXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhZGQgbmV3IGl0ZW1cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLl9hZGRJdGVtKGl0ZW0gYXMgYW55KTtcbiAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAvLyBBcnJheVxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGRhdGFbaV0gJiYgdHlwZW9mIGRhdGFbaV0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBhZGRPclVwZGF0ZShkYXRhW2ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIklnbm9yaW5nIGlucHV0IGl0ZW0sIHdoaWNoIGlzIG5vdCBhbiBvYmplY3QgYXQgaW5kZXggXCIgKyBpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gU2luZ2xlIGl0ZW1cbiAgICAgIGFkZE9yVXBkYXRlKGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlXCIpO1xuICAgIH1cblxuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSwgc2VuZGVySWQpO1xuICAgIH1cbiAgICBpZiAodXBkYXRlZElkcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByb3BzID0geyBpdGVtczogdXBkYXRlZElkcywgb2xkRGF0YTogb2xkRGF0YSwgZGF0YTogdXBkYXRlZERhdGEgfTtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGVkIHByb3BlcnR5ICdkYXRhJyBzb21lIGRheVxuICAgICAgLy9PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdkYXRhJywge1xuICAgICAgLy8gICdnZXQnOiAoZnVuY3Rpb24oKSB7XG4gICAgICAvLyAgICBjb25zb2xlLndhcm4oJ1Byb3BlcnR5IGRhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIERhdGFTZXQuZ2V0KGlkcykgdG8gcmV0cmlldmUgdGhlIG5ldyBkYXRhLCB1c2UgdGhlIG9sZERhdGEgcHJvcGVydHkgb24gdGhpcyBvYmplY3QgdG8gZ2V0IHRoZSBvbGQgZGF0YScpO1xuICAgICAgLy8gICAgcmV0dXJuIHVwZGF0ZWREYXRhO1xuICAgICAgLy8gIH0pLmJpbmQodGhpcylcbiAgICAgIC8vfSk7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwidXBkYXRlXCIsIHByb3BzLCBzZW5kZXJJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkSWRzLmNvbmNhdCh1cGRhdGVkSWRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZXhpc3RpbmcgaXRlbXMuIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBwcm92aWRlZCBwcm9wZXJ0aWVzIHdpbGwgYmUgZGVlcGx5IG1lcmdlZCBpbnRvIHRoZSBleGlzdGluZyBpdGVtLlxuICAgKiBXaGVuIGFuIGl0ZW0gZG9lcyBub3QgZXhpc3QgKGlkIG5vdCBwcmVzZW50IGluIHRoZSBkYXRhIHNldCBvciBhYnNlbnQpLCBhbiBlcnJvciB3aWxsIGJlIHRocm93biBhbmQgbm90aGluZyB3aWxsIGJlIGNoYW5nZWQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgdXBkYXRlZCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGB1cGRhdGVgLlxuICAgKiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyBpZDogMywgdGV4dDogJ2l0ZW0gMycgfSxcbiAgICogXSlcbiAgICpcbiAgICogLy8gdXBkYXRlIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEudXBkYXRlKFtcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyICh1cGRhdGVkKScgfSwgLy8gd29ya3NcbiAgICogICAvLyB7IGlkOiA0LCB0ZXh0OiAnaXRlbSA0IChuZXcpJyB9LCAvLyB3b3VsZCB0aHJvd1xuICAgKiAgIC8vIHsgdGV4dDogJ2l0ZW0gNCAobmV3KScgfSwgLy8gd291bGQgYWxzbyB0aHJvd1xuICAgKiBdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsyXVxuICAgKiBgYGBcbiAgICogQHBhcmFtIGRhdGEgLSBVcGRhdGVzICh0aGUgaWQgYW5kIG9wdGlvbmFsbHkgb3RoZXIgcHJvcHMpIHRvIHRoZSBpdGVtcyBpbiB0aGlzIGRhdGEgc2V0LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIHVwZGF0ZWRJZHMgLSBUaGUgaWRzIG9mIHRoZSB1cGRhdGVkIGl0ZW1zLlxuICAgKiBAdGhyb3dzIFdoZW4gdGhlIHN1cHBsaWVkIGRhdGEgaXMgbmVpdGhlciBhbiBpdGVtIG5vciBhbiBhcnJheSBvZiBpdGVtcywgd2hlbiB0aGUgaWRzIGFyZSBtaXNzaW5nLlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZU9ubHkoXG4gICAgZGF0YTogVXBkYXRlSXRlbTxJdGVtLCBJZFByb3A+IHwgVXBkYXRlSXRlbTxJdGVtLCBJZFByb3A+W10sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogSWRbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBkYXRhID0gW2RhdGFdO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZUV2ZW50RGF0YSA9IGRhdGFcbiAgICAgIC5tYXAoXG4gICAgICAgIChcbiAgICAgICAgICB1cGRhdGVcbiAgICAgICAgKToge1xuICAgICAgICAgIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgICAgdXBkYXRlOiBVcGRhdGVJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgIH0gPT4ge1xuICAgICAgICAgIGNvbnN0IG9sZERhdGEgPSB0aGlzLl9kYXRhLmdldCh1cGRhdGVbdGhpcy5faWRQcm9wXSk7XG4gICAgICAgICAgaWYgKG9sZERhdGEgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVXBkYXRpbmcgbm9uLWV4aXN0ZW50IGl0ZW1zIGlzIG5vdCBhbGxvd2VkLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgb2xkRGF0YSwgdXBkYXRlIH07XG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5tYXAoXG4gICAgICAgICh7XG4gICAgICAgICAgb2xkRGF0YSxcbiAgICAgICAgICB1cGRhdGUsXG4gICAgICAgIH0pOiB7XG4gICAgICAgICAgaWQ6IElkO1xuICAgICAgICAgIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgICAgdXBkYXRlZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gICAgICAgIH0gPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gb2xkRGF0YVt0aGlzLl9pZFByb3BdO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gcHVyZURlZXBPYmplY3RBc3NpZ24ob2xkRGF0YSwgdXBkYXRlKTtcblxuICAgICAgICAgIHRoaXMuX2RhdGEuc2V0KGlkLCB1cGRhdGVkRGF0YSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBvbGREYXRhOiBvbGREYXRhLFxuICAgICAgICAgICAgdXBkYXRlZERhdGEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgIGlmICh1cGRhdGVFdmVudERhdGEubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcm9wczogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdID0ge1xuICAgICAgICBpdGVtczogdXBkYXRlRXZlbnREYXRhLm1hcCgodmFsdWUpOiBJZCA9PiB2YWx1ZS5pZCksXG4gICAgICAgIG9sZERhdGE6IHVwZGF0ZUV2ZW50RGF0YS5tYXAoXG4gICAgICAgICAgKHZhbHVlKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiA9PiB2YWx1ZS5vbGREYXRhXG4gICAgICAgICksXG4gICAgICAgIGRhdGE6IHVwZGF0ZUV2ZW50RGF0YS5tYXAoXG4gICAgICAgICAgKHZhbHVlKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiA9PiB2YWx1ZS51cGRhdGVkRGF0YVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGVkIHByb3BlcnR5ICdkYXRhJyBzb21lIGRheVxuICAgICAgLy9PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdkYXRhJywge1xuICAgICAgLy8gICdnZXQnOiAoZnVuY3Rpb24oKSB7XG4gICAgICAvLyAgICBjb25zb2xlLndhcm4oJ1Byb3BlcnR5IGRhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIERhdGFTZXQuZ2V0KGlkcykgdG8gcmV0cmlldmUgdGhlIG5ldyBkYXRhLCB1c2UgdGhlIG9sZERhdGEgcHJvcGVydHkgb24gdGhpcyBvYmplY3QgdG8gZ2V0IHRoZSBvbGQgZGF0YScpO1xuICAgICAgLy8gICAgcmV0dXJuIHVwZGF0ZWREYXRhO1xuICAgICAgLy8gIH0pLmJpbmQodGhpcylcbiAgICAgIC8vfSk7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwidXBkYXRlXCIsIHByb3BzLCBzZW5kZXJJZCk7XG5cbiAgICAgIHJldHVybiBwcm9wcy5pdGVtcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkOiBJZCk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkczogSWRbXSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGZpcnN0PzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gfCBJZCB8IElkW10sXG4gICAgc2Vjb25kPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PiB7XG4gICAgLy8gQFRPRE86IFdvdWRuJ3QgaXQgYmUgYmV0dGVyIHRvIHNwbGl0IHRoaXMgaW50byBtdWx0aXBsZSBtZXRob2RzP1xuXG4gICAgLy8gcGFyc2UgdGhlIGFyZ3VtZW50c1xuICAgIGxldCBpZDogSWQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGlkczogSWRbXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzSWQoZmlyc3QpKSB7XG4gICAgICAvLyBnZXQoaWQgWywgb3B0aW9uc10pXG4gICAgICBpZCA9IGZpcnN0O1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlyc3QpKSB7XG4gICAgICAvLyBnZXQoaWRzIFssIG9wdGlvbnNdKVxuICAgICAgaWRzID0gZmlyc3Q7XG4gICAgICBvcHRpb25zID0gc2Vjb25kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBnZXQoWywgb3B0aW9uc10pXG4gICAgICBvcHRpb25zID0gZmlyc3Q7XG4gICAgfVxuXG4gICAgLy8gZGV0ZXJtaW5lIHRoZSByZXR1cm4gdHlwZVxuICAgIGNvbnN0IHJldHVyblR5cGUgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnJldHVyblR5cGUgPT09IFwiT2JqZWN0XCIgPyBcIk9iamVjdFwiIDogXCJBcnJheVwiO1xuICAgIC8vIEBUT0RPOiBXVEYgaXMgdGhpcz8gT3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz9cbiAgICAvLyB2YXIgcmV0dXJuVHlwZVxuICAgIC8vIGlmIChvcHRpb25zICYmIG9wdGlvbnMucmV0dXJuVHlwZSkge1xuICAgIC8vICAgdmFyIGFsbG93ZWRWYWx1ZXMgPSBbJ0FycmF5JywgJ09iamVjdCddXG4gICAgLy8gICByZXR1cm5UeXBlID1cbiAgICAvLyAgICAgYWxsb3dlZFZhbHVlcy5pbmRleE9mKG9wdGlvbnMucmV0dXJuVHlwZSkgPT0gLTFcbiAgICAvLyAgICAgICA/ICdBcnJheSdcbiAgICAvLyAgICAgICA6IG9wdGlvbnMucmV0dXJuVHlwZVxuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICByZXR1cm5UeXBlID0gJ0FycmF5J1xuICAgIC8vIH1cblxuICAgIC8vIGJ1aWxkIG9wdGlvbnNcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IGl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBsZXQgaXRlbTogdW5kZWZpbmVkIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaXRlbUlkczogdW5kZWZpbmVkIHwgSWRbXSA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaXRlbUlkOiB1bmRlZmluZWQgfCBJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIGNvbnZlcnQgaXRlbXNcbiAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgLy8gcmV0dXJuIGEgc2luZ2xlIGl0ZW1cbiAgICAgIGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICBpZiAoaXRlbSAmJiBmaWx0ZXIgJiYgIWZpbHRlcihpdGVtKSkge1xuICAgICAgICBpdGVtID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaWRzICE9IG51bGwpIHtcbiAgICAgIC8vIHJldHVybiBhIHN1YnNldCBvZiBpdGVtc1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWRzW2ldKTtcbiAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoaXRlbSkpKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXR1cm4gYWxsIGl0ZW1zXG4gICAgICBpdGVtSWRzID0gWy4uLnRoaXMuX2RhdGEua2V5cygpXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGl0ZW1JZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgIGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpdGVtSWQpO1xuICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgdGhlIHJlc3VsdHNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyICYmIGlkID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fc29ydChpdGVtcywgb3B0aW9ucy5vcmRlcik7XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIGZpZWxkcyBvZiB0aGUgaXRlbXNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmZpZWxkcykge1xuICAgICAgY29uc3QgZmllbGRzID0gb3B0aW9ucy5maWVsZHM7XG4gICAgICBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGl0ZW0gIT0gbnVsbCkge1xuICAgICAgICBpdGVtID0gdGhpcy5fZmlsdGVyRmllbGRzKGl0ZW0sIGZpZWxkcykgYXMgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGl0ZW1zW2ldID0gdGhpcy5fZmlsdGVyRmllbGRzKGl0ZW1zW2ldLCBmaWVsZHMpIGFzIEZ1bGxJdGVtPFxuICAgICAgICAgICAgSXRlbSxcbiAgICAgICAgICAgIElkUHJvcFxuICAgICAgICAgID47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZXR1cm4gdGhlIHJlc3VsdHNcbiAgICBpZiAocmV0dXJuVHlwZSA9PSBcIk9iamVjdFwiKSB7XG4gICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+ID0ge307XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVzdWx0YW50ID0gaXRlbXNbaV07XG4gICAgICAgIC8vIEBUT0RPOiBTaG91ZG4ndCB0aGlzIGJlIHRoaXMuX2ZpZWxkSWQ/XG4gICAgICAgIC8vIHJlc3VsdFtyZXN1bHRhbnQuaWRdID0gcmVzdWx0YW50XG4gICAgICAgIGNvbnN0IGlkOiBJZCA9IHJlc3VsdGFudFt0aGlzLl9pZFByb3BdO1xuICAgICAgICByZXN1bHRbaWRdID0gcmVzdWx0YW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgLy8gYSBzaW5nbGUgaXRlbVxuICAgICAgICByZXR1cm4gaXRlbSA/PyBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8ganVzdCByZXR1cm4gb3VyIGFycmF5XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IG9yZGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuICAgIGNvbnN0IGlkczogSWRbXSA9IFtdO1xuXG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgLy8gZ2V0IGZpbHRlcmVkIGl0ZW1zXG4gICAgICBpZiAob3JkZXIpIHtcbiAgICAgICAgLy8gY3JlYXRlIG9yZGVyZWQgbGlzdFxuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgZmlsdGVyKGl0ZW0pKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NvcnQoaXRlbXMsIG9yZGVyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZHMucHVzaChpdGVtc1tpXVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIHVub3JkZXJlZCBsaXN0XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiBmaWx0ZXIoaXRlbSkpIHtcbiAgICAgICAgICAgIGlkcy5wdXNoKGl0ZW1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldCBhbGwgaXRlbXNcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICAvLyBjcmVhdGUgYW4gb3JkZXJlZCBsaXN0XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGl0ZW1zLnB1c2goZGF0YS5nZXQoaWQpISk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zb3J0KGl0ZW1zLCBvcmRlcik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaWRzLnB1c2goaXRlbXNbaV1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNyZWF0ZSB1bm9yZGVyZWQgbGlzdFxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gZGF0YS5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlkcy5wdXNoKGl0ZW1bdGhpcy5faWRQcm9wXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0RGF0YVNldCgpOiBEYXRhU2V0PEl0ZW0sIElkUHJvcD4ge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBmb3JFYWNoKFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiB2b2lkLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnM8SXRlbT5cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZGF0YTtcbiAgICBjb25zdCBpdGVtSWRzID0gWy4uLmRhdGEua2V5cygpXTtcblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMub3JkZXIpIHtcbiAgICAgIC8vIGV4ZWN1dGUgZm9yRWFjaCBvbiBvcmRlcmVkIGxpc3RcbiAgICAgIGNvbnN0IGl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSB0aGlzLmdldChvcHRpb25zKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgY29uc3QgaWQgPSBpdGVtW3RoaXMuX2lkUHJvcF07XG4gICAgICAgIGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5vcmRlcmVkXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICAgIGNhbGxiYWNrKGl0ZW0sIGlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbWFwPFQ+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBULFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxJdGVtLCBUPlxuICApOiBUW10ge1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3QgbWFwcGVkSXRlbXM6IFRbXSA9IFtdO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuXG4gICAgLy8gY29udmVydCBhbmQgZmlsdGVyIGl0ZW1zXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgbWFwcGVkSXRlbXMucHVzaChjYWxsYmFjayhpdGVtLCBpZCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9yZGVyIGl0ZW1zXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcikge1xuICAgICAgdGhpcy5fc29ydChtYXBwZWRJdGVtcywgb3B0aW9ucy5vcmRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBlZEl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KGl0ZW06IG51bGwsIGZpZWxkczogS1tdKTogbnVsbDtcbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGl0ZW06IFJlY29yZDxLLCB1bmtub3duPixcbiAgICBmaWVsZHM6IEtbXVxuICApOiBSZWNvcmQ8SywgdW5rbm93bj47XG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkczxLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpdGVtOiBSZWNvcmQ8SywgdW5rbm93bj4sXG4gICAgZmllbGRzOiBLW10gfCBSZWNvcmQ8Sywgc3RyaW5nPlxuICApOiBhbnk7XG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIGZpZWxkcyBvZiBhbiBpdGVtLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSAtIFRoZSBpdGVtIHdob3NlIGZpZWxkcyBzaG91bGQgYmUgZmlsdGVyZWQuXG4gICAqIEBwYXJhbSBmaWVsZHMgLSBUaGUgbmFtZXMgb2YgdGhlIGZpZWxkcyB0aGF0IHdpbGwgYmUga2VwdC5cbiAgICogQHR5cGVQYXJhbSBLIC0gRmllbGQgbmFtZSB0eXBlLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGZpZWxkcy5cbiAgICovXG4gIHByaXZhdGUgX2ZpbHRlckZpZWxkczxLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpdGVtOiBSZWNvcmQ8SywgdW5rbm93bj4gfCBudWxsLFxuICAgIGZpZWxkczogS1tdIHwgUmVjb3JkPEssIHVua25vd24+XG4gICk6IFJlY29yZDxLLCB1bmtub3duPiB8IG51bGwge1xuICAgIGlmICghaXRlbSkge1xuICAgICAgLy8gaXRlbSBpcyBudWxsXG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgQXJyYXkuaXNBcnJheShmaWVsZHMpXG4gICAgICAgID8gLy8gVXNlIHRoZSBzdXBwbGllZCBhcnJheVxuICAgICAgICAgIGZpZWxkc1xuICAgICAgICA6IC8vIFVzZSB0aGUga2V5cyBvZiB0aGUgc3VwcGxpZWQgb2JqZWN0XG4gICAgICAgICAgKE9iamVjdC5rZXlzKGZpZWxkcykgYXMgS1tdKVxuICAgICkucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgIChmaWx0ZXJlZEl0ZW0sIGZpZWxkKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICAgICAgICBmaWx0ZXJlZEl0ZW1bZmllbGRdID0gaXRlbVtmaWVsZF07XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZEl0ZW07XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgdGhlIHByb3ZpZGVkIGFycmF5IHdpdGggaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIEl0ZW1zIHRvIGJlIHNvcnRlZCBpbiBwbGFjZS5cbiAgICogQHBhcmFtIG9yZGVyIC0gQSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgaXRlbXMgaW4gdGhlIGl0ZW1zIGFycmF5LlxuICAgKi9cbiAgcHJpdmF0ZSBfc29ydDxUPihpdGVtczogVFtdLCBvcmRlcjogRGF0YUludGVyZmFjZU9yZGVyPFQ+KTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBvcmRlciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gb3JkZXIgYnkgcHJvdmlkZWQgZmllbGQgbmFtZVxuICAgICAgY29uc3QgbmFtZSA9IG9yZGVyOyAvLyBmaWVsZCBuYW1lXG4gICAgICBpdGVtcy5zb3J0KChhLCBiKTogLTEgfCAwIHwgMSA9PiB7XG4gICAgICAgIC8vIEBUT0RPOiBIb3cgdG8gdHJlYXQgbWlzc2luZyBwcm9wZXJ0aWVzP1xuICAgICAgICBjb25zdCBhdiA9IChhIGFzIGFueSlbbmFtZV07XG4gICAgICAgIGNvbnN0IGJ2ID0gKGIgYXMgYW55KVtuYW1lXTtcbiAgICAgICAgcmV0dXJuIGF2ID4gYnYgPyAxIDogYXYgPCBidiA/IC0xIDogMDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9yZGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIC8vIG9yZGVyIGJ5IHNvcnQgZnVuY3Rpb25cbiAgICAgIGl0ZW1zLnNvcnQob3JkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBleHRlbmQgb3JkZXIgYnkgYW4gT2JqZWN0IHtmaWVsZDpzdHJpbmcsIGRpcmVjdGlvbjpzdHJpbmd9XG4gICAgICAvLyAgICAgICB3aGVyZSBkaXJlY3Rpb24gY2FuIGJlICdhc2MnIG9yICdkZXNjJ1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9yZGVyIG11c3QgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGl0ZW0gb3IgbXVsdGlwbGUgaXRlbXMgYnkg4oCccmVmZXJlbmNl4oCdIChvbmx5IHRoZSBpZCBpcyB1c2VkKSBvciBieSBpZC5cbiAgICpcbiAgICogVGhlIG1ldGhvZCBpZ25vcmVzIHJlbW92YWwgb2Ygbm9uLWV4aXN0aW5nIGl0ZW1zLCBhbmQgcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBpZHMgb2YgdGhlIGl0ZW1zIHdoaWNoIGFyZSBhY3R1YWxseSByZW1vdmVkIGZyb20gdGhlIERhdGFTZXQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgcmVtb3ZlZCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGByZW1vdmVgIGZvciB0aGUgcmVtb3ZlZCBpdGVtcy4gV2hlbiBhIGBzZW5kZXJJZGAgaXMgcHJvdmlkZWQsIHRoaXMgaWQgd2lsbCBiZSBwYXNzZWQgd2l0aCB0aGUgdHJpZ2dlcmVkIGV2ZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIC8vIGNyZWF0ZSBhIERhdGFTZXRcbiAgICogY29uc3QgZGF0YSA9IG5ldyB2aXMuRGF0YVNldChbXG4gICAqICAgeyBpZDogMSwgdGV4dDogJ2l0ZW0gMScgfSxcbiAgICogICB7IGlkOiAyLCB0ZXh0OiAnaXRlbSAyJyB9LFxuICAgKiAgIHsgaWQ6IDMsIHRleHQ6ICdpdGVtIDMnIH1cbiAgICogXSlcbiAgICpcbiAgICogLy8gcmVtb3ZlIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEucmVtb3ZlKFsyLCB7IGlkOiAzIH0sIDRdKVxuICAgKlxuICAgKiBjb25zb2xlLmxvZyhpZHMpIC8vIFsyLCAzXVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGlkIC0gT25lIG9yIG1vcmUgaXRlbXMgb3IgaWRzIG9mIGl0ZW1zIHRvIGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgVGhlIGlkcyBvZiB0aGUgcmVtb3ZlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyByZW1vdmUoaWQ6IElkIHwgSXRlbSB8IChJZCB8IEl0ZW0pW10sIHNlbmRlcklkPzogSWQgfCBudWxsKTogSWRbXSB7XG4gICAgY29uc3QgcmVtb3ZlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICAvLyBmb3JjZSBldmVyeXRoaW5nIHRvIGJlIGFuIGFycmF5IGZvciBzaW1wbGljaXR5XG4gICAgY29uc3QgaWRzID0gQXJyYXkuaXNBcnJheShpZCkgPyBpZCA6IFtpZF07XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fcmVtb3ZlKGlkc1tpXSk7XG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICBjb25zdCBpdGVtSWQ6IE9wdElkID0gaXRlbVt0aGlzLl9pZFByb3BdO1xuICAgICAgICBpZiAoaXRlbUlkICE9IG51bGwpIHtcbiAgICAgICAgICByZW1vdmVkSWRzLnB1c2goaXRlbUlkKTtcbiAgICAgICAgICByZW1vdmVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZW1vdmVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgXCJyZW1vdmVcIixcbiAgICAgICAgeyBpdGVtczogcmVtb3ZlZElkcywgb2xkRGF0YTogcmVtb3ZlZEl0ZW1zIH0sXG4gICAgICAgIHNlbmRlcklkXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZW1vdmVkSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpdGVtIGJ5IGl0cyBpZCBvciByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIElkIG9mIGFuIGl0ZW0gb3IgdGhlIGl0ZW0gaXRzZWxmLlxuICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBpdGVtIGlmIHJlbW92ZWQsIG51bGwgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlKGlkOiBJZCB8IEl0ZW0pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgbnVsbCB7XG4gICAgLy8gQFRPRE86IEl0IG9yaWdpYW5sbHkgcmV0dXJuZWQgdGhlIGl0ZW0gYWx0aG91Z2ggdGhlIGRvY3Mgc2F5IGlkLlxuICAgIC8vIFRoZSBjb2RlIGV4cGVjdHMgdGhlIGl0ZW0sIHNvIHByb2JhYmx5IGFuIGVycm9yIGluIHRoZSBkb2NzLlxuICAgIGxldCBpZGVudDogT3B0SWQ7XG5cbiAgICAvLyBjb25maXJtIHRoZSBpZCB0byB1c2UgYmFzZWQgb24gdGhlIGFyZ3MgdHlwZVxuICAgIGlmIChpc0lkKGlkKSkge1xuICAgICAgaWRlbnQgPSBpZDtcbiAgICB9IGVsc2UgaWYgKGlkICYmIHR5cGVvZiBpZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgaWRlbnQgPSBpZFt0aGlzLl9pZFByb3BdOyAvLyBsb29rIGZvciB0aGUgaWRlbnRpZmllciBmaWVsZCB1c2luZyAuX2lkUHJvcFxuICAgIH1cblxuICAgIC8vIGRvIHRoZSByZW1vdmluZyBpZiB0aGUgaXRlbSBpcyBmb3VuZFxuICAgIGlmIChpZGVudCAhPSBudWxsICYmIHRoaXMuX2RhdGEuaGFzKGlkZW50KSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkZW50KSB8fCBudWxsO1xuICAgICAgdGhpcy5fZGF0YS5kZWxldGUoaWRlbnQpO1xuICAgICAgLS10aGlzLmxlbmd0aDtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBlbnRpcmUgZGF0YSBzZXQuXG4gICAqXG4gICAqIEFmdGVyIHRoZSBpdGVtcyBhcmUgcmVtb3ZlZCwgdGhlIHtAbGluayBEYXRhU2V0fSB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYHJlbW92ZWAgZm9yIGFsbCByZW1vdmVkIGl0ZW1zLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBTZW5kZXIgaWQuXG4gICAqIEByZXR1cm5zIHJlbW92ZWRJZHMgLSBUaGUgaWRzIG9mIGFsbCByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIGNsZWFyKHNlbmRlcklkPzogSWQgfCBudWxsKTogSWRbXSB7XG4gICAgY29uc3QgaWRzID0gWy4uLnRoaXMuX2RhdGEua2V5cygpXTtcbiAgICBjb25zdCBpdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpdGVtcy5wdXNoKHRoaXMuX2RhdGEuZ2V0KGlkc1tpXSkhKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhLmNsZWFyKCk7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fdHJpZ2dlcihcInJlbW92ZVwiLCB7IGl0ZW1zOiBpZHMsIG9sZERhdGE6IGl0ZW1zIH0sIHNlbmRlcklkKTtcblxuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaXRlbSB3aXRoIG1heGltdW0gdmFsdWUgb2YgYSBzcGVjaWZpZWQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIGZvciBtYXggdmFsdWUuXG4gICAqIEByZXR1cm5zIEl0ZW0gY29udGFpbmluZyBtYXggdmFsdWUsIG9yIG51bGwgaWYgbm8gaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgbWF4KGZpZWxkOiBrZXlvZiBJdGVtKTogSXRlbSB8IG51bGwge1xuICAgIGxldCBtYXggPSBudWxsO1xuICAgIGxldCBtYXhGaWVsZCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fZGF0YS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgaXRlbUZpZWxkID0gaXRlbVtmaWVsZF07XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBpdGVtRmllbGQgPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgKG1heEZpZWxkID09IG51bGwgfHwgaXRlbUZpZWxkID4gbWF4RmllbGQpXG4gICAgICApIHtcbiAgICAgICAgbWF4ID0gaXRlbTtcbiAgICAgICAgbWF4RmllbGQgPSBpdGVtRmllbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heCB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGl0ZW0gd2l0aCBtaW5pbXVtIHZhbHVlIG9mIGEgc3BlY2lmaWVkIGZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZmllbGQgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHNob3VsZCBiZSBzZWFyY2hlZCBmb3IgbWluIHZhbHVlLlxuICAgKiBAcmV0dXJucyBJdGVtIGNvbnRhaW5pbmcgbWluIHZhbHVlLCBvciBudWxsIGlmIG5vIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIG1pbihmaWVsZDoga2V5b2YgSXRlbSk6IEl0ZW0gfCBudWxsIHtcbiAgICBsZXQgbWluID0gbnVsbDtcbiAgICBsZXQgbWluRmllbGQgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuX2RhdGEudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGl0ZW1GaWVsZCA9IGl0ZW1bZmllbGRdO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgaXRlbUZpZWxkID09PSBcIm51bWJlclwiICYmXG4gICAgICAgIChtaW5GaWVsZCA9PSBudWxsIHx8IGl0ZW1GaWVsZCA8IG1pbkZpZWxkKVxuICAgICAgKSB7XG4gICAgICAgIG1pbiA9IGl0ZW07XG4gICAgICAgIG1pbkZpZWxkID0gaXRlbUZpZWxkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtaW4gfHwgbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBkaXN0aW5jdDxUIGV4dGVuZHMga2V5b2YgSXRlbT4ocHJvcDogVCk6IEl0ZW1bVF1bXTtcbiAgcHVibGljIGRpc3RpbmN0KHByb3A6IHN0cmluZyk6IHVua25vd25bXTtcbiAgLyoqXG4gICAqIEZpbmQgYWxsIGRpc3RpbmN0IHZhbHVlcyBvZiBhIHNwZWNpZmllZCBmaWVsZFxuICAgKlxuICAgKiBAcGFyYW0gcHJvcCAtIFRoZSBwcm9wZXJ0eSBuYW1lIHdob3NlIGRpc3RpbmN0IHZhbHVlcyBzaG91bGQgYmUgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIFVub3JkZXJlZCBhcnJheSBjb250YWluaW5nIGFsbCBkaXN0aW5jdCB2YWx1ZXMuIEl0ZW1zIHdpdGhvdXQgc3BlY2lmaWVkIHByb3BlcnR5IGFyZSBpZ25vcmVkLlxuICAgKi9cbiAgcHVibGljIGRpc3RpbmN0PFQgZXh0ZW5kcyBzdHJpbmc+KHByb3A6IFQpOiB1bmtub3duW10ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuICAgIGNvbnN0IHZhbHVlczogdW5rbm93bltdID0gW107XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICBjb25zdCBpdGVtID0gZGF0YS5nZXQoaWQpO1xuICAgICAgY29uc3QgdmFsdWUgPSAoaXRlbSBhcyBhbnkpW3Byb3BdO1xuICAgICAgbGV0IGV4aXN0cyA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb3VudDsgaisrKSB7XG4gICAgICAgIGlmICh2YWx1ZXNbal0gPT0gdmFsdWUpIHtcbiAgICAgICAgICBleGlzdHMgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWV4aXN0cyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlc1tjb3VudF0gPSB2YWx1ZTtcbiAgICAgICAgY291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpbmdsZSBpdGVtLiBXaWxsIGZhaWwgd2hlbiBhbiBpdGVtIHdpdGggdGhlIHNhbWUgaWQgYWxyZWFkeSBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtIC0gQSBuZXcgaXRlbSB0byBiZSBhZGRlZC5cbiAgICogQHJldHVybnMgQWRkZWQgaXRlbSdzIGlkLiBBbiBpZCBpcyBnZW5lcmF0ZWQgd2hlbiBpdCBpcyBub3QgcHJlc2VudCBpbiB0aGUgaXRlbS5cbiAgICovXG4gIHByaXZhdGUgX2FkZEl0ZW0oaXRlbTogSXRlbSk6IElkIHtcbiAgICBjb25zdCBmdWxsSXRlbSA9IGVuc3VyZUZ1bGxJdGVtKGl0ZW0sIHRoaXMuX2lkUHJvcCk7XG4gICAgY29uc3QgaWQgPSBmdWxsSXRlbVt0aGlzLl9pZFByb3BdO1xuXG4gICAgLy8gY2hlY2sgd2hldGhlciB0aGlzIGlkIGlzIGFscmVhZHkgdGFrZW5cbiAgICBpZiAodGhpcy5fZGF0YS5oYXMoaWQpKSB7XG4gICAgICAvLyBpdGVtIGFscmVhZHkgZXhpc3RzXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IGFkZCBpdGVtOiBpdGVtIHdpdGggaWQgXCIgKyBpZCArIFwiIGFscmVhZHkgZXhpc3RzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YS5zZXQoaWQsIGZ1bGxJdGVtKTtcbiAgICArK3RoaXMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIHNpbmdsZSBpdGVtOiBtZXJnZSB3aXRoIGV4aXN0aW5nIGl0ZW0uXG4gICAqIFdpbGwgZmFpbCB3aGVuIHRoZSBpdGVtIGhhcyBubyBpZCwgb3Igd2hlbiB0aGVyZSBkb2VzIG5vdCBleGlzdCBhbiBpdGVtIHdpdGggdGhlIHNhbWUgaWQuXG4gICAqXG4gICAqIEBwYXJhbSB1cGRhdGUgLSBUaGUgbmV3IGl0ZW1cbiAgICogQHJldHVybnMgVGhlIGlkIG9mIHRoZSB1cGRhdGVkIGl0ZW0uXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVJdGVtKHVwZGF0ZTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPik6IElkIHtcbiAgICBjb25zdCBpZDogT3B0SWQgPSB1cGRhdGVbdGhpcy5faWRQcm9wXTtcbiAgICBpZiAoaWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCB1cGRhdGUgaXRlbTogaXRlbSBoYXMgbm8gaWQgKGl0ZW06IFwiICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh1cGRhdGUpICtcbiAgICAgICAgICBcIilcIlxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIC8vIGl0ZW0gZG9lc24ndCBleGlzdFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHVwZGF0ZSBpdGVtOiBubyBpdGVtIHdpdGggaWQgXCIgKyBpZCArIFwiIGZvdW5kXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGEuc2V0KGlkLCB7IC4uLml0ZW0sIC4uLnVwZGF0ZSB9KTtcblxuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RyZWFtKGlkcz86IEl0ZXJhYmxlPElkPik6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIGlmIChpZHMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICByZXR1cm4gbmV3IERhdGFTdHJlYW08SXRlbT4oe1xuICAgICAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmdldChpZCk7XG4gICAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHlpZWxkIFtpZCwgaXRlbV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbSh7XG4gICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiB0aGlzLl9kYXRhLmVudHJpZXMuYmluZCh0aGlzLl9kYXRhKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qIGRldmVsYmxvY2s6c3RhcnQgKi9cbiAgcHVibGljIGdldCB0ZXN0TGVha0RhdGEoKTogTWFwPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cbiAgcHVibGljIGdldCB0ZXN0TGVha0lkUHJvcCgpOiBJZFByb3Age1xuICAgIHJldHVybiB0aGlzLl9pZFByb3A7XG4gIH1cbiAgcHVibGljIGdldCB0ZXN0TGVha09wdGlvbnMoKTogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD4ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG4gIHB1YmxpYyBnZXQgdGVzdExlYWtRdWV1ZSgpOiBRdWV1ZTx0aGlzPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9xdWV1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHRlc3RMZWFrUXVldWUodjogUXVldWU8dGhpcz4gfCBudWxsKSB7XG4gICAgdGhpcy5fcXVldWUgPSB2O1xuICB9XG4gIC8qIGRldmVsYmxvY2s6ZW5kICovXG59XG4iLCAiaW1wb3J0IHtcbiAgRGF0YUludGVyZmFjZSxcbiAgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXksXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0LFxuICBEYXRhSW50ZXJmYWNlTWFwT3B0aW9ucyxcbiAgRXZlbnRDYWxsYmFja3NXaXRoQW55LFxuICBFdmVudE5hbWUsXG4gIEV2ZW50UGF5bG9hZHMsXG4gIEZ1bGxJdGVtLFxuICBJZCxcbiAgUGFydEl0ZW0sXG4gIFJlbW92ZUV2ZW50UGF5bG9hZCxcbiAgVXBkYXRlRXZlbnRQYXlsb2FkLFxuICBpc0lkLFxufSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcbmltcG9ydCB7IERhdGFTZXRQYXJ0IH0gZnJvbSBcIi4vZGF0YS1zZXQtcGFydFwiO1xuaW1wb3J0IHsgRGF0YVN0cmVhbSB9IGZyb20gXCIuL2RhdGEtc3RyZWFtXCI7XG5cbi8qKlxuICogRGF0YSB2aWV3IG9wdGlvbnMuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVZpZXdPcHRpb25zPEl0ZW0sIElkUHJvcCBleHRlbmRzIHN0cmluZz4ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZpZWxkIGNvbnRhaW5pbmcgdGhlIGlkIG9mIHRoZSBpdGVtcy4gV2hlbiBkYXRhIGlzIGZldGNoZWQgZnJvbSBhIHNlcnZlciB3aGljaCB1c2VzIHNvbWUgc3BlY2lmaWMgZmllbGQgdG8gaWRlbnRpZnkgaXRlbXMsIHRoaXMgZmllbGQgbmFtZSBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBEYXRhU2V0IHVzaW5nIHRoZSBvcHRpb24gYGZpZWxkSWRgLiBGb3IgZXhhbXBsZSBbQ291Y2hEQl0oaHR0cDovL2NvdWNoZGIuYXBhY2hlLm9yZy8pIHVzZXMgdGhlIGZpZWxkIGAnX2lkJ2AgdG8gaWRlbnRpZnkgZG9jdW1lbnRzLlxuICAgKi9cbiAgZmllbGRJZD86IElkUHJvcDtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogRGF0YVZpZXdcbiAqXG4gKiBBIERhdGFWaWV3IG9mZmVycyBhIGZpbHRlcmVkIGFuZC9vciBmb3JtYXR0ZWQgdmlldyBvbiBhIERhdGFTZXQuIE9uZSBjYW4gc3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gYSBEYXRhVmlldywgYW5kIGVhc2lseSBnZXQgZmlsdGVyZWQgb3IgZm9ybWF0dGVkIGRhdGEgd2l0aG91dCBoYXZpbmcgdG8gc3BlY2lmeSBmaWx0ZXJzIGFuZCBmaWVsZCB0eXBlcyBhbGwgdGhlIHRpbWUuXG4gKlxuICogIyMgRXhhbXBsZVxuICogYGBgamF2YXNjcmlwdFxuICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICogdmFyIGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoKTtcbiAqIGRhdGEuYWRkKFtcbiAqICAge2lkOiAxLCB0ZXh0OiAnaXRlbSAxJywgZGF0ZTogbmV3IERhdGUoMjAxMywgNiwgMjApLCBncm91cDogMSwgZmlyc3Q6IHRydWV9LFxuICogICB7aWQ6IDIsIHRleHQ6ICdpdGVtIDInLCBkYXRlOiAnMjAxMy0wNi0yMycsIGdyb3VwOiAyfSxcbiAqICAge2lkOiAzLCB0ZXh0OiAnaXRlbSAzJywgZGF0ZTogJzIwMTMtMDYtMjUnLCBncm91cDogMn0sXG4gKiAgIHtpZDogNCwgdGV4dDogJ2l0ZW0gNCd9XG4gKiBdKTtcbiAqXG4gKiAvLyBjcmVhdGUgYSBEYXRhVmlld1xuICogLy8gdGhlIHZpZXcgd2lsbCBvbmx5IGNvbnRhaW4gaXRlbXMgaGF2aW5nIGEgcHJvcGVydHkgZ3JvdXAgd2l0aCB2YWx1ZSAxLFxuICogLy8gYW5kIHdpbGwgb25seSBvdXRwdXQgZmllbGRzIGlkLCB0ZXh0LCBhbmQgZGF0ZS5cbiAqIHZhciB2aWV3ID0gbmV3IHZpcy5EYXRhVmlldyhkYXRhLCB7XG4gKiAgIGZpbHRlcjogZnVuY3Rpb24gKGl0ZW0pIHtcbiAqICAgICByZXR1cm4gKGl0ZW0uZ3JvdXAgPT0gMSk7XG4gKiAgIH0sXG4gKiAgIGZpZWxkczogWydpZCcsICd0ZXh0JywgJ2RhdGUnXVxuICogfSk7XG4gKlxuICogLy8gc3Vic2NyaWJlIHRvIGFueSBjaGFuZ2UgaW4gdGhlIERhdGFWaWV3XG4gKiB2aWV3Lm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50LCBwcm9wZXJ0aWVzLCBzZW5kZXJJZCkge1xuICogICBjb25zb2xlLmxvZygnZXZlbnQnLCBldmVudCwgcHJvcGVydGllcyk7XG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGUgYW4gaXRlbSBpbiB0aGUgZGF0YSBzZXRcbiAqIGRhdGEudXBkYXRlKHtpZDogMiwgZ3JvdXA6IDF9KTtcbiAqXG4gKiAvLyBnZXQgYWxsIGlkcyBpbiB0aGUgdmlld1xuICogdmFyIGlkcyA9IHZpZXcuZ2V0SWRzKCk7XG4gKiBjb25zb2xlLmxvZygnaWRzJywgaWRzKTsgLy8gd2lsbCBvdXRwdXQgWzEsIDJdXG4gKlxuICogLy8gZ2V0IGFsbCBpdGVtcyBpbiB0aGUgdmlld1xuICogdmFyIGl0ZW1zID0gdmlldy5nZXQoKTtcbiAqIGBgYFxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKiBAdHlwZVBhcmFtIElkUHJvcCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVZpZXc8XG4gICAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gICAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4gID5cbiAgZXh0ZW5kcyBEYXRhU2V0UGFydDxJdGVtLCBJZFByb3A+XG4gIGltcGxlbWVudHMgRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+XG57XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbGVuZ3RoID0gMDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQgaWRQcm9wKCk6IElkUHJvcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVNldCgpLmlkUHJvcDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl07XG4gIHByaXZhdGUgX2RhdGEhOiBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD47IC8vIGNvbnN0cnVjdG9yIOKGkiBzZXREYXRhXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lkczogU2V0PElkPiA9IG5ldyBTZXQoKTsgLy8gaWRzIG9mIHRoZSBpdGVtcyBjdXJyZW50bHkgaW4gbWVtb3J5IChqdXN0IGNvbnRhaW5zIGEgYm9vbGVhbiB0cnVlKVxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBEYXRhVmlld09wdGlvbnM8SXRlbSwgSWRQcm9wPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0YVZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGluc3RhbmNlIGNvbnRhaW5pbmcgZGF0YSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgdGhpcyBkYXRhIHZpZXcuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgZGF0YTogRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+LFxuICAgIG9wdGlvbnM/OiBEYXRhVmlld09wdGlvbnM8SXRlbSwgSWRQcm9wPlxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICB0aGlzLl9saXN0ZW5lciA9IHRoaXMuX29uRXZlbnQuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2V0RGF0YShkYXRhKTtcbiAgfVxuXG4gIC8vIFRPRE86IGltcGxlbWVudCBhIGZ1bmN0aW9uIC5jb25maWcoKSB0byBkeW5hbWljYWxseSB1cGRhdGUgdGhpbmdzIGxpa2UgY29uZmlndXJlZCBmaWx0ZXJcbiAgLy8gYW5kIHRyaWdnZXIgY2hhbmdlcyBhY2NvcmRpbmdseVxuXG4gIC8qKlxuICAgKiBTZXQgYSBkYXRhIHNvdXJjZSBmb3IgdGhlIHZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGluc3RhbmNlIGNvbnRhaW5pbmcgZGF0YSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkuXG4gICAqIEByZW1hcmtzXG4gICAqIE5vdGUgdGhhdCB3aGVuIHRoZSBkYXRhIHZpZXcgaXMgYm91bmQgdG8gYSBkYXRhIHNldCBpdCB3b24ndCBiZSBnYXJiYWdlXG4gICAqIGNvbGxlY3RlZCB1bmxlc3MgdGhlIGRhdGEgc2V0IGlzIHRvby4gVXNlIGBkYXRhVmlldy5zZXREYXRhKG51bGwpYCBvclxuICAgKiBgZGF0YVZpZXcuZGlzcG9zZSgpYCB0byBlbmFibGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGJlZm9yZSB5b3UgbG9zZSB0aGUgbGFzdFxuICAgKiByZWZlcmVuY2UuXG4gICAqL1xuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgLy8gdW5zdWJzY3JpYmUgZnJvbSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGlmICh0aGlzLl9kYXRhLm9mZikge1xuICAgICAgICB0aGlzLl9kYXRhLm9mZihcIipcIiwgdGhpcy5fbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICAvLyB0cmlnZ2VyIGEgcmVtb3ZlIG9mIGFsbCBpdGVtcyBpbiBtZW1vcnlcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuX2RhdGEuZ2V0SWRzKHsgZmlsdGVyOiB0aGlzLl9vcHRpb25zLmZpbHRlciB9KTtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZGF0YS5nZXQoaWRzKTtcblxuICAgICAgdGhpcy5faWRzLmNsZWFyKCk7XG4gICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsIHsgaXRlbXM6IGlkcywgb2xkRGF0YTogaXRlbXMgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG5cbiAgICAgIC8vIHRyaWdnZXIgYW4gYWRkIG9mIGFsbCBhZGRlZCBpdGVtc1xuICAgICAgY29uc3QgaWRzID0gdGhpcy5fZGF0YS5nZXRJZHMoeyBmaWx0ZXI6IHRoaXMuX29wdGlvbnMuZmlsdGVyIH0pO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgICAgdGhpcy5faWRzLmFkZChpZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmxlbmd0aCA9IGlkcy5sZW5ndGg7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGlkcyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZGF0YSA9IG5ldyBEYXRhU2V0PEl0ZW0sIElkUHJvcD4oKTtcbiAgICB9XG5cbiAgICAvLyBzdWJzY3JpYmUgdG8gbmV3IGRhdGFzZXRcbiAgICBpZiAodGhpcy5fZGF0YS5vbikge1xuICAgICAgdGhpcy5fZGF0YS5vbihcIipcIiwgdGhpcy5fbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBEYXRhVmlldy5cbiAgICogVXNlZnVsIHdoZW4gdGhlIERhdGFWaWV3IGhhcyBhIGZpbHRlciBmdW5jdGlvbiBjb250YWluaW5nIGEgdmFyaWFibGUgcGFyYW1ldGVyLlxuICAgKi9cbiAgcHVibGljIHJlZnJlc2goKTogdm9pZCB7XG4gICAgY29uc3QgaWRzID0gdGhpcy5fZGF0YS5nZXRJZHMoe1xuICAgICAgZmlsdGVyOiB0aGlzLl9vcHRpb25zLmZpbHRlcixcbiAgICB9KTtcbiAgICBjb25zdCBvbGRJZHMgPSBbLi4udGhpcy5faWRzXTtcbiAgICBjb25zdCBuZXdJZHM6IFJlY29yZDxJZCwgYm9vbGVhbj4gPSB7fTtcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuXG4gICAgLy8gY2hlY2sgZm9yIGFkZGl0aW9uc1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgbmV3SWRzW2lkXSA9IHRydWU7XG4gICAgICBpZiAoIXRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgcmVtb3ZhbHNcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gb2xkSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IG9sZElkc1tpXTtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICBpZiAoaXRlbSA9PSBudWxsKSB7XG4gICAgICAgIC8vIEBUT0RPOiBJbnZlc3RpZ2F0ZS5cbiAgICAgICAgLy8gRG9lc24ndCBoYXBwZW4gZHVyaW5nIHRlc3RzIG9yIGV4YW1wbGVzLlxuICAgICAgICAvLyBJcyBpdCByZWFsbHkgaW1wb3NzaWJsZSBvciBjb3VsZCBpdCBldmVudHVhbGx5IGhhcHBlbj9cbiAgICAgICAgLy8gSG93IHRvIGhhbmRsZSBpdCBpZiBpdCBkb2VzPyBUaGUgdHlwZXMgZ3VhcmFudGVlIG5vbi1udWxsYWJsZSBpdGVtcy5cbiAgICAgICAgY29uc29sZS5lcnJvcihcIklmIHlvdSBzZWUgdGhpcywgcmVwb3J0IGl0IHBsZWFzZS5cIik7XG4gICAgICB9IGVsc2UgaWYgKCFuZXdJZHNbaWRdKSB7XG4gICAgICAgIHJlbW92ZWRJZHMucHVzaChpZCk7XG4gICAgICAgIHJlbW92ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB0aGlzLl9pZHMuZGVsZXRlKGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCArPSBhZGRlZElkcy5sZW5ndGggLSByZW1vdmVkSWRzLmxlbmd0aDtcblxuICAgIC8vIHRyaWdnZXIgZXZlbnRzXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9KTtcbiAgICB9XG4gICAgaWYgKHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsIHsgaXRlbXM6IHJlbW92ZWRJZHMsIG9sZERhdGE6IHJlbW92ZWRJdGVtcyB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCgpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChpZDogSWQpOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkIHwgSWRbXSxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBmaXJzdD86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+IHwgSWQgfCBJZFtdLFxuICAgIHNlY29uZD86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6XG4gICAgfCBudWxsXG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+XG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W11cbiAgICB8IFJlY29yZDxzdHJpbmcsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+IHtcbiAgICBpZiAodGhpcy5fZGF0YSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBwYXJzZSB0aGUgYXJndW1lbnRzXG4gICAgbGV0IGlkczogSWQgfCBJZFtdIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IG9wdGlvbnM6IGFueTtcbiAgICBpZiAoaXNJZChmaXJzdCkgfHwgQXJyYXkuaXNBcnJheShmaXJzdCkpIHtcbiAgICAgIGlkcyA9IGZpcnN0O1xuICAgICAgb3B0aW9ucyA9IHNlY29uZDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IGZpcnN0O1xuICAgIH1cblxuICAgIC8vIGV4dGVuZCB0aGUgb3B0aW9ucyB3aXRoIHRoZSBkZWZhdWx0IG9wdGlvbnMgYW5kIHByb3ZpZGVkIG9wdGlvbnNcbiAgICBjb25zdCB2aWV3T3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICB0aGlzLl9vcHRpb25zLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG5cbiAgICAvLyBjcmVhdGUgYSBjb21iaW5lZCBmaWx0ZXIgbWV0aG9kIHdoZW4gbmVlZGVkXG4gICAgY29uc3QgdGhpc0ZpbHRlciA9IHRoaXMuX29wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGlmICh0aGlzRmlsdGVyICYmIG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgIHZpZXdPcHRpb25zLmZpbHRlciA9IChpdGVtKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzRmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpZHMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0KHZpZXdPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0KGlkcywgdmlld09wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0SWRzKG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPik6IElkW10ge1xuICAgIGlmICh0aGlzLl9kYXRhLmxlbmd0aCkge1xuICAgICAgY29uc3QgZGVmYXVsdEZpbHRlciA9IHRoaXMuX29wdGlvbnMuZmlsdGVyO1xuICAgICAgY29uc3Qgb3B0aW9uc0ZpbHRlciA9IG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMuZmlsdGVyIDogbnVsbDtcbiAgICAgIGxldCBmaWx0ZXI6IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+W1wiZmlsdGVyXCJdO1xuXG4gICAgICBpZiAob3B0aW9uc0ZpbHRlcikge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgIGZpbHRlciA9IChpdGVtKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZpbHRlcihpdGVtKSAmJiBvcHRpb25zRmlsdGVyKGl0ZW0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVyID0gb3B0aW9uc0ZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuZ2V0SWRzKHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIG9yZGVyOiBvcHRpb25zICYmIG9wdGlvbnMub3JkZXIsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZm9yRWFjaChcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gdm9pZCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+XG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICAgIGxldCBmaWx0ZXI6IHVuZGVmaW5lZCB8ICgoaXRlbTogSXRlbSkgPT4gYm9vbGVhbik7XG5cbiAgICAgIGlmIChvcHRpb25zRmlsdGVyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgZmlsdGVyID0gZnVuY3Rpb24gKGl0ZW06IEl0ZW0pOiBib29sZWFuIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIgPSBvcHRpb25zRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kYXRhLmZvckVhY2goY2FsbGJhY2ssIHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIG9yZGVyOiBvcHRpb25zICYmIG9wdGlvbnMub3JkZXIsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdIHtcbiAgICB0eXBlIEZpbHRlciA9IE5vbk51bGxhYmxlPERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+W1wiZmlsdGVyXCJdPjtcblxuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICAgIGxldCBmaWx0ZXI6IHVuZGVmaW5lZCB8IEZpbHRlcjtcblxuICAgICAgaWYgKG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgICBmaWx0ZXIgPSAoaXRlbSk6IFJldHVyblR5cGU8RmlsdGVyPiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZpbHRlcihpdGVtKSAmJiBvcHRpb25zRmlsdGVyKGl0ZW0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVyID0gb3B0aW9uc0ZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGEubWFwKGNhbGxiYWNrLCB7XG4gICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICBvcmRlcjogb3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldERhdGFTZXQoKTogRGF0YVNldDxJdGVtLCBJZFByb3A+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXREYXRhU2V0KCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5zdHJlYW0oXG4gICAgICBpZHMgfHwge1xuICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXTogdGhpcy5faWRzLmtleXMuYmluZCh0aGlzLl9pZHMpLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBpbnN0YW5jZSB1bnVzYWJsZSBwcmlvciB0byBnYXJiYWdlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBpbnRlbnRpb24gb2YgdGhpcyBtZXRob2QgaXMgdG8gaGVscCBkaXNjb3ZlciBzY2VuYXJpb3Mgd2hlcmUgdGhlIGRhdGFcbiAgICogdmlldyBpcyBiZWluZyB1c2VkIHdoZW4gdGhlIHByb2dyYW1tZXIgdGhpbmtzIGl0IGhhcyBiZWVuIGdhcmJhZ2UgY29sbGVjdGVkXG4gICAqIGFscmVhZHkuIEl0J3Mgc3RyaWN0ZXIgdmVyc2lvbiBvZiBgZGF0YVZpZXcuc2V0RGF0YShudWxsKWAuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGF0YT8ub2ZmKSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZihcIipcIiwgdGhpcy5fbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBcIlRoaXMgZGF0YSB2aWV3IGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQgb2YuXCI7XG4gICAgY29uc3QgcmVwbGFjZW1lbnQgPSB7XG4gICAgICBnZXQ6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICAgIHNldDogKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9LFxuXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKERhdGFWaWV3LnByb3RvdHlwZSkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHJlcGxhY2VtZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgbGlzdGVuZXIuIFdpbGwgcHJvcGFnYXRlIGFsbCBldmVudHMgZnJvbSB0aGUgY29ubmVjdGVkIGRhdGEgc2V0IHRvIHRoZSBzdWJzY3JpYmVycyBvZiB0aGUgRGF0YVZpZXcsIGJ1dCB3aWxsIGZpbHRlciB0aGUgaXRlbXMgYW5kIG9ubHkgdHJpZ2dlciB3aGVuIHRoZXJlIGFyZSBjaGFuZ2VzIGluIHRoZSBmaWx0ZXJlZCBkYXRhIHNldC5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIElkIHN1cHBsaWVkIGJ5IHRoZSBzZW5kZXIuXG4gICAqL1xuICBwcml2YXRlIF9vbkV2ZW50PEVOIGV4dGVuZHMgRXZlbnROYW1lPihcbiAgICBldmVudDogRU4sXG4gICAgcGFyYW1zOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bRU5dLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMuaXRlbXMgfHwgIXRoaXMuX2RhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpZHMgPSBwYXJhbXMuaXRlbXM7XG4gICAgY29uc3QgYWRkZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IG9sZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCB1cGRhdGVkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgIC8vIGZpbHRlciB0aGUgaWRzIG9mIHRoZSBhZGRlZCBpdGVtc1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5faWRzLmFkZChpZCk7XG4gICAgICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInVwZGF0ZVwiOlxuICAgICAgICAvLyBkZXRlcm1pbmUgdGhlIGV2ZW50IGZyb20gdGhlIHZpZXdzIHZpZXdwb2ludDogYW4gdXBkYXRlZFxuICAgICAgICAvLyBpdGVtIGNhbiBiZSBhZGRlZCwgdXBkYXRlZCwgb3IgcmVtb3ZlZCBmcm9tIHRoaXMgdmlldy5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldChpZCk7XG5cbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICAgIHVwZGF0ZWRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgIChwYXJhbXMgYXMgVXBkYXRlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLmRhdGFbaV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgb2xkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAocGFyYW1zIGFzIFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+KS5vbGREYXRhW2ldXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgICAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgICB0aGlzLl9pZHMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgcmVtb3ZlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgKHBhcmFtcyBhcyBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikub2xkRGF0YVtpXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gbm90aGluZyBpbnRlcmVzdGluZyBmb3IgbWUgOi0oXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJyZW1vdmVcIjpcbiAgICAgICAgLy8gZmlsdGVyIHRoZSBpZHMgb2YgdGhlIHJlbW92ZWQgaXRlbXNcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICAgIGlmICh0aGlzLl9pZHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgdGhpcy5faWRzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICByZW1vdmVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgIChwYXJhbXMgYXMgUmVtb3ZlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLm9sZERhdGFbaV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5sZW5ndGggKz0gYWRkZWRJZHMubGVuZ3RoIC0gcmVtb3ZlZElkcy5sZW5ndGg7XG5cbiAgICBpZiAoYWRkZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGFkZGVkSWRzIH0sIHNlbmRlcklkKTtcbiAgICB9XG4gICAgaWYgKHVwZGF0ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICBcInVwZGF0ZVwiLFxuICAgICAgICB7IGl0ZW1zOiB1cGRhdGVkSWRzLCBvbGREYXRhOiBvbGRJdGVtcywgZGF0YTogdXBkYXRlZEl0ZW1zIH0sXG4gICAgICAgIHNlbmRlcklkXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocmVtb3ZlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgIFwicmVtb3ZlXCIsXG4gICAgICAgIHsgaXRlbXM6IHJlbW92ZWRJZHMsIG9sZERhdGE6IHJlbW92ZWRJdGVtcyB9LFxuICAgICAgICBzZW5kZXJJZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcblxuLyoqXG4gKiBDaGVjayB0aGF0IGdpdmVuIHZhbHVlIGlzIGNvbXBhdGlibGUgd2l0aCBWaXMgRGF0YSBTZXQgaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBpZFByb3AgLSBUaGUgZXhwZWN0ZWQgcHJvcGVydHkgdG8gY29udGFpbiBpdGVtIGlkLlxuICogQHBhcmFtIHYgLSBUaGUgdmFsdWUgdG8gYmUgdGVzdGVkLlxuICogQHJldHVybnMgVHJ1ZSBpZiBhbGwgZXhwZWN0ZWQgdmFsdWVzIGFuZCBtZXRob2RzIG1hdGNoLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFTZXRMaWtlPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+KGlkUHJvcDogSWRQcm9wLCB2OiBhbnkpOiB2IGlzIERhdGFTZXQ8SXRlbSwgSWRQcm9wPiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiZcbiAgICB2ICE9PSBudWxsICYmXG4gICAgaWRQcm9wID09PSB2LmlkUHJvcCAmJlxuICAgIHR5cGVvZiB2LmFkZCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuY2xlYXIgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmRpc3RpbmN0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5mb3JFYWNoID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldERhdGFTZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldElkcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgdHlwZW9mIHYubWFwID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5tYXggPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm1pbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub2ZmID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYucmVtb3ZlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5zZXRPcHRpb25zID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5zdHJlYW0gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnVwZGF0ZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYudXBkYXRlT25seSA9PT0gXCJmdW5jdGlvblwiXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgRGF0YVZpZXcgfSBmcm9tIFwiLi9kYXRhLXZpZXdcIjtcbmltcG9ydCB7IFBhcnRJdGVtIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcbmltcG9ydCB7IGlzRGF0YVNldExpa2UgfSBmcm9tIFwiLi9kYXRhLXNldC1jaGVja1wiO1xuXG4vKipcbiAqIENoZWNrIHRoYXQgZ2l2ZW4gdmFsdWUgaXMgY29tcGF0aWJsZSB3aXRoIFZpcyBEYXRhIFZpZXcgaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBpZFByb3AgLSBUaGUgZXhwZWN0ZWQgcHJvcGVydHkgdG8gY29udGFpbiBpdGVtIGlkLlxuICogQHBhcmFtIHYgLSBUaGUgdmFsdWUgdG8gYmUgdGVzdGVkLlxuICogQHJldHVybnMgVHJ1ZSBpZiBhbGwgZXhwZWN0ZWQgdmFsdWVzIGFuZCBtZXRob2RzIG1hdGNoLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFWaWV3TGlrZTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihpZFByb3A6IElkUHJvcCwgdjogYW55KTogdiBpcyBEYXRhVmlldzxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHYgIT09IG51bGwgJiZcbiAgICBpZFByb3AgPT09IHYuaWRQcm9wICYmXG4gICAgdHlwZW9mIHYuZm9yRWFjaCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXREYXRhU2V0ID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXRJZHMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiB2Lm1hcCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYub2ZmID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuc3RyZWFtID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICBpc0RhdGFTZXRMaWtlKGlkUHJvcCwgdi5nZXREYXRhU2V0KCkpXG4gICk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IHRoaXMgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3Rcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBJU19IVE1MRERBID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhbGw6IGRvY3VtZW50QWxsLFxuICBJU19IVE1MRERBOiBJU19IVE1MRERBXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZG9jdW1lbnRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsJyk7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxubW9kdWxlLmV4cG9ydHMgPSAkZG9jdW1lbnRBbGwuSVNfSFRNTEREQSA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciAkZG9jdW1lbnRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsJyk7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCkgfHwgaXQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh2YXJpYWJsZSkgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgbmF2aWdhdG9yICE9ICd1bmRlZmluZWQnICYmIFN0cmluZyhuYXZpZ2F0b3IudXNlckFnZW50KSB8fCAnJztcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ3N5bWJvbCBkZXRlY3Rpb24nKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICAvLyBuYjogRG8gbm90IGNhbGwgYFN0cmluZ2AgZGlyZWN0bHkgdG8gYXZvaWQgdGhpcyBiZWluZyBvcHRpbWl6ZWQgb3V0IHRvIGBzeW1ib2wrJydgIHdoaWNoIHdpbGwsXG4gIC8vIG9mIGNvdXJzZSwgZmFpbC5cbiAgcmV0dXJuICEkU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWwsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zMy4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjMgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zMy4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbFsnZm9yJ10gfHwgU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKVxuICAgICAgPyBTeW1ib2xbbmFtZV1cbiAgICAgIDogY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBiaW5kID0gdW5jdXJyeVRoaXModW5jdXJyeVRoaXMuYmluZCk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgcmV0dXJuIHRoYXQgPT09IHVuZGVmaW5lZCA/IGZuIDogTkFUSVZFX0JJTkQgPyBiaW5kKGZuLCB0aGF0KSA6IGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT09IDQyO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCRTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIHdyYXBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChOYXRpdmVDb25zdHJ1Y3Rvcikge1xuICB2YXIgV3JhcHBlciA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBXcmFwcGVyKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIGFwcGx5KE5hdGl2ZUNvbnN0cnVjdG9yLCB0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICBXcmFwcGVyLnByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIFdyYXBwZXI7XG59O1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgICAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLmRvbnRDYWxsR2V0U2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuICBvcHRpb25zLm5hbWUgICAgICAgICAgIC0gdGhlIC5uYW1lIG9mIHRoZSBmdW5jdGlvbiBpZiBpdCBkb2VzIG5vdCBtYXRjaCB0aGUga2V5XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBUQVJHRVQsIHt9KVtUQVJHRVRdO1xuICB2YXIgdGFyZ2V0UHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcblxuICB2YXIgRk9SQ0VELCBVU0VfTkFUSVZFLCBWSVJUVUFMX1BST1RPVFlQRTtcbiAgdmFyIGtleSwgc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5LCBuYXRpdmVQcm9wZXJ0eSwgcmVzdWx0UHJvcGVydHksIGRlc2NyaXB0b3I7XG5cbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBVU0VfTkFUSVZFID0gIUZPUkNFRCAmJiBuYXRpdmVTb3VyY2UgJiYgaGFzT3duKG5hdGl2ZVNvdXJjZSwga2V5KTtcblxuICAgIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSkgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmF0aXZlU291cmNlLCBrZXkpO1xuICAgICAgbmF0aXZlUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIG5hdGl2ZVByb3BlcnR5ID0gbmF0aXZlU291cmNlW2tleV07XG5cbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIGltcGxlbWVudGF0aW9uXG4gICAgc291cmNlUHJvcGVydHkgPSAoVVNFX05BVElWRSAmJiBuYXRpdmVQcm9wZXJ0eSkgPyBuYXRpdmVQcm9wZXJ0eSA6IHNvdXJjZVtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUgJiYgdHlwZW9mIHRhcmdldFByb3BlcnR5ID09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIG1ldGhvZHMgdG8gZ2xvYmFsIGZvciBjYWxsaW5nIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBpZiAob3B0aW9ucy5iaW5kICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gYmluZChzb3VyY2VQcm9wZXJ0eSwgZ2xvYmFsKTtcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlcyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIGlzQ2FsbGFibGUoc291cmNlUHJvcGVydHkpKSByZXN1bHRQcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwga2V5LCByZXN1bHRQcm9wZXJ0eSk7XG5cbiAgICBpZiAoUFJPVE8pIHtcbiAgICAgIFZJUlRVQUxfUFJPVE9UWVBFID0gVEFSR0VUICsgJ1Byb3RvdHlwZSc7XG4gICAgICBpZiAoIWhhc093bihwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFLCB7fSk7XG4gICAgICB9XG4gICAgICAvLyBleHBvcnQgdmlydHVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAoRk9SQ0VEIHx8ICF0YXJnZXRQcm90b3R5cGVba2V5XSkpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldFByb3RvdHlwZSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBMZW5ndGhPZkFycmF5TGlrZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWxlbmd0aG9mYXJyYXlsaWtlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHRvTGVuZ3RoKG9iai5sZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWFzc2lnbiAtLSBzYWZlXG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmICRhc3NpZ24oeyBiOiAxIH0sICRhc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN5bWJvbCAtLSBzYWZlXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woJ2Fzc2lnbiBkZXRlY3Rpb24nKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPT0gNyB8fCBvYmplY3RLZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPT0gYWxwaGFiZXQ7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xuICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IEluZGV4ZWRPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChvYmplY3RLZXlzKFMpLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZSwgUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtYXNzaWduJyk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBhcml0eTogMiwgZm9yY2VkOiBPYmplY3QuYXNzaWduICE9PSBhc3NpZ24gfSwge1xuICBhc3NpZ246IGFzc2lnblxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuYXNzaWduO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyhbXS5zbGljZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEMsIGFyZ3NMZW5ndGgsIGFyZ3MpIHtcbiAgaWYgKCFoYXNPd24oZmFjdG9yaWVzLCBhcmdzTGVuZ3RoKSkge1xuICAgIHZhciBsaXN0ID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSBsaXN0W2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgZmFjdG9yaWVzW2FyZ3NMZW5ndGhdID0gJEZ1bmN0aW9uKCdDLGEnLCAncmV0dXJuIG5ldyBDKCcgKyBqb2luKGxpc3QsICcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/ICRGdW5jdGlvbi5iaW5kIDogZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgRiA9IGFDYWxsYWJsZSh0aGlzKTtcbiAgdmFyIFByb3RvdHlwZSA9IEYucHJvdG90eXBlO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gZnVuY3Rpb24gYm91bmQoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gY29uY2F0KHBhcnRBcmdzLCBhcnJheVNsaWNlKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChGLCBhcmdzLmxlbmd0aCwgYXJncykgOiBGLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoUHJvdG90eXBlKSkgYm91bmRGdW5jdGlvbi5wcm90b3R5cGUgPSBQcm90b3R5cGU7XG4gIHJldHVybiBib3VuZEZ1bmN0aW9uO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gZGV0ZWN0aW9uXG4kKHsgdGFyZ2V0OiAnRnVuY3Rpb24nLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGdW5jdGlvbi5iaW5kICE9PSBiaW5kIH0sIHtcbiAgYmluZDogYmluZFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUikge1xuICByZXR1cm4gcGF0aFtDT05TVFJVQ1RPUiArICdQcm90b3R5cGUnXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0Z1bmN0aW9uJykuYmluZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vZnVuY3Rpb24vdmlydHVhbC9iaW5kJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmJpbmQ7XG4gIHJldHVybiBpdCA9PT0gRnVuY3Rpb25Qcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoRnVuY3Rpb25Qcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmRcIik7IiwgIi8qKlxuICogRHJhdyBhIGNpcmNsZS5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3Q2lyY2xlKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4LmFyYyh4LCB5LCByLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhIHNxdWFyZS5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBIYWxmIG9mIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzcXVhcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3U3F1YXJlKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4LnJlY3QoeCAtIHIsIHkgLSByLCByICogMiwgciAqIDIpO1xuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhbiBlcXVpbGF0ZXJhbCB0cmlhbmdsZSBzdGFuZGluZyBvbiBhIHNpZGUuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBzaWRlcy5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VxdWlsYXRlcmFsX3RyaWFuZ2xlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3VHJpYW5nbGUoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY3R4LmJlZ2luUGF0aCgpO1xuXG4gIC8vIHRoZSBjaGFuZ2UgaW4gcmFkaXVzIGFuZCB0aGUgb2Zmc2V0IGlzIGhlcmUgdG8gY2VudGVyIHRoZSBzaGFwZVxuICByICo9IDEuMTU7XG4gIHkgKz0gMC4yNzUgKiByO1xuXG4gIGNvbnN0IHMgPSByICogMjtcbiAgY29uc3QgczIgPSBzIC8gMjtcbiAgY29uc3QgaXIgPSAoTWF0aC5zcXJ0KDMpIC8gNikgKiBzOyAvLyByYWRpdXMgb2YgaW5uZXIgY2lyY2xlXG4gIGNvbnN0IGggPSBNYXRoLnNxcnQocyAqIHMgLSBzMiAqIHMyKTsgLy8gaGVpZ2h0XG5cbiAgY3R4Lm1vdmVUbyh4LCB5IC0gKGggLSBpcikpO1xuICBjdHgubGluZVRvKHggKyBzMiwgeSArIGlyKTtcbiAgY3R4LmxpbmVUbyh4IC0gczIsIHkgKyBpcik7XG4gIGN0eC5saW5lVG8oeCwgeSAtIChoIC0gaXIpKTtcbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYW4gZXF1aWxhdGVyYWwgdHJpYW5nbGUgc3RhbmRpbmcgb24gYSB2ZXJ0ZXguXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBzaWRlcy5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VxdWlsYXRlcmFsX3RyaWFuZ2xlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3VHJpYW5nbGVEb3duKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHI6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcblxuICAvLyB0aGUgY2hhbmdlIGluIHJhZGl1cyBhbmQgdGhlIG9mZnNldCBpcyBoZXJlIHRvIGNlbnRlciB0aGUgc2hhcGVcbiAgciAqPSAxLjE1O1xuICB5IC09IDAuMjc1ICogcjtcblxuICBjb25zdCBzID0gciAqIDI7XG4gIGNvbnN0IHMyID0gcyAvIDI7XG4gIGNvbnN0IGlyID0gKE1hdGguc3FydCgzKSAvIDYpICogczsgLy8gcmFkaXVzIG9mIGlubmVyIGNpcmNsZVxuICBjb25zdCBoID0gTWF0aC5zcXJ0KHMgKiBzIC0gczIgKiBzMik7IC8vIGhlaWdodFxuXG4gIGN0eC5tb3ZlVG8oeCwgeSArIChoIC0gaXIpKTtcbiAgY3R4LmxpbmVUbyh4ICsgczIsIHkgLSBpcik7XG4gIGN0eC5saW5lVG8oeCAtIHMyLCB5IC0gaXIpO1xuICBjdHgubGluZVRvKHgsIHkgKyAoaCAtIGlyKSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGEgc3Rhci5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBUaGUgb3V0ZXIgcmFkaXVzIG9mIHRoZSBzdGFyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1N0YXIoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgLy8gaHR0cDovL3d3dy5odG1sNWNhbnZhc3R1dG9yaWFscy5jb20vbGFicy9odG1sNS1jYW52YXMtc3Rhci1zcGlubmVyL1xuICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgLy8gdGhlIGNoYW5nZSBpbiByYWRpdXMgYW5kIHRoZSBvZmZzZXQgaXMgaGVyZSB0byBjZW50ZXIgdGhlIHNoYXBlXG4gIHIgKj0gMC44MjtcbiAgeSArPSAwLjEgKiByO1xuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgMTA7IG4rKykge1xuICAgIGNvbnN0IHJhZGl1cyA9IG4gJSAyID09PSAwID8gciAqIDEuMyA6IHIgKiAwLjU7XG4gICAgY3R4LmxpbmVUbyhcbiAgICAgIHggKyByYWRpdXMgKiBNYXRoLnNpbigobiAqIDIgKiBNYXRoLlBJKSAvIDEwKSxcbiAgICAgIHkgLSByYWRpdXMgKiBNYXRoLmNvcygobiAqIDIgKiBNYXRoLlBJKSAvIDEwKVxuICAgICk7XG4gIH1cblxuICBjdHguY2xvc2VQYXRoKCk7XG59XG5cbi8qKlxuICogRHJhdyBhIGRpYW1vbmQuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSByIC0gSGFsZiBvZiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgZGlhbW9uZC5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vd3d3Lmh0bWw1Y2FudmFzdHV0b3JpYWxzLmNvbS9sYWJzL2h0bWw1LWNhbnZhcy1zdGFyLXNwaW5uZXIvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RGlhbW9uZChcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICByOiBudW1iZXJcbik6IHZvaWQge1xuICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgY3R4LmxpbmVUbyh4LCB5ICsgcik7XG4gIGN0eC5saW5lVG8oeCArIHIsIHkpO1xuICBjdHgubGluZVRvKHgsIHkgLSByKTtcbiAgY3R4LmxpbmVUbyh4IC0gciwgeSk7XG5cbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG4vKipcbiAqIERyYXcgYSByZWN0YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5lcnMuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSB3IC0gVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuXG4gKiBAcGFyYW0gaCAtIFRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS5cbiAqIEBwYXJhbSByIC0gVGhlIHJhZGl1cyBvZiB0aGUgY29ybmVycy5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEyNTU1MTIvaG93LXRvLWRyYXctYS1yb3VuZGVkLXJlY3RhbmdsZS1vbi1odG1sLWNhbnZhc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd1JvdW5kUmVjdChcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB3OiBudW1iZXIsXG4gIGg6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY29uc3QgcjJkID0gTWF0aC5QSSAvIDE4MDtcbiAgaWYgKHcgLSAyICogciA8IDApIHtcbiAgICByID0gdyAvIDI7XG4gIH0gLy9lbnN1cmUgdGhhdCB0aGUgcmFkaXVzIGlzbid0IHRvbyBsYXJnZSBmb3IgeFxuICBpZiAoaCAtIDIgKiByIDwgMCkge1xuICAgIHIgPSBoIC8gMjtcbiAgfSAvL2Vuc3VyZSB0aGF0IHRoZSByYWRpdXMgaXNuJ3QgdG9vIGxhcmdlIGZvciB5XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyh4ICsgciwgeSk7XG4gIGN0eC5saW5lVG8oeCArIHcgLSByLCB5KTtcbiAgY3R4LmFyYyh4ICsgdyAtIHIsIHkgKyByLCByLCByMmQgKiAyNzAsIHIyZCAqIDM2MCwgZmFsc2UpO1xuICBjdHgubGluZVRvKHggKyB3LCB5ICsgaCAtIHIpO1xuICBjdHguYXJjKHggKyB3IC0gciwgeSArIGggLSByLCByLCAwLCByMmQgKiA5MCwgZmFsc2UpO1xuICBjdHgubGluZVRvKHggKyByLCB5ICsgaCk7XG4gIGN0eC5hcmMoeCArIHIsIHkgKyBoIC0gciwgciwgcjJkICogOTAsIHIyZCAqIDE4MCwgZmFsc2UpO1xuICBjdHgubGluZVRvKHgsIHkgKyByKTtcbiAgY3R4LmFyYyh4ICsgciwgeSArIHIsIHIsIHIyZCAqIDE4MCwgcjJkICogMjcwLCBmYWxzZSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGFuIGVsbGlwc2UuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHggYXhpcy5cbiAqIEBwYXJhbSB5IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBjZW50ZXIgb24gdGhlIHkgYXhpcy5cbiAqIEBwYXJhbSB3IC0gVGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNlLlxuICogQHBhcmFtIGggLSBUaGUgaGVpZ2h0IG9mIHRoZSBlbGxpcHNlLlxuICogQHJlbWFya3NcbiAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3Mjc5OC9ob3ctdG8tZHJhdy1hbi1vdmFsLWluLWh0bWw1LWNhbnZhc1xuICpcbiAqIFBvc3RmaXggJ192aXMnIGFkZGVkIHRvIGRpc2Nlcm4gaXQgZnJvbSBzdGFuZGFyZCBtZXRob2QgZWxsaXBzZSgpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0VsbGlwc2UoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgdzogbnVtYmVyLFxuICBoOiBudW1iZXJcbik6IHZvaWQge1xuICBjb25zdCBrYXBwYSA9IDAuNTUyMjg0OCxcbiAgICBveCA9ICh3IC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgIG95ID0gKGggLyAyKSAqIGthcHBhLCAvLyBjb250cm9sIHBvaW50IG9mZnNldCB2ZXJ0aWNhbFxuICAgIHhlID0geCArIHcsIC8vIHgtZW5kXG4gICAgeWUgPSB5ICsgaCwgLy8geS1lbmRcbiAgICB4bSA9IHggKyB3IC8gMiwgLy8geC1taWRkbGVcbiAgICB5bSA9IHkgKyBoIC8gMjsgLy8geS1taWRkbGVcblxuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oeCwgeW0pO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4LCB5bSAtIG95LCB4bSAtIG94LCB5LCB4bSwgeSk7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtICsgb3gsIHksIHhlLCB5bSAtIG95LCB4ZSwgeW0pO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cblxuLyoqXG4gKiBEcmF3IGFuIGlzb21ldHJpYyBjeWxpbmRlci5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHcgLSBUaGUgd2lkdGggb2YgdGhlIGRhdGFiYXNlLlxuICogQHBhcmFtIGggLSBUaGUgaGVpZ2h0IG9mIHRoZSBkYXRhYmFzZS5cbiAqIEByZW1hcmtzXG4gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIxNzI3OTgvaG93LXRvLWRyYXctYW4tb3ZhbC1pbi1odG1sNS1jYW52YXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYXdEYXRhYmFzZShcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB3OiBudW1iZXIsXG4gIGg6IG51bWJlclxuKTogdm9pZCB7XG4gIGNvbnN0IGYgPSAxIC8gMztcbiAgY29uc3Qgd0VsbGlwc2UgPSB3O1xuICBjb25zdCBoRWxsaXBzZSA9IGggKiBmO1xuXG4gIGNvbnN0IGthcHBhID0gMC41NTIyODQ4LFxuICAgIG94ID0gKHdFbGxpcHNlIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgaG9yaXpvbnRhbFxuICAgIG95ID0gKGhFbGxpcHNlIC8gMikgKiBrYXBwYSwgLy8gY29udHJvbCBwb2ludCBvZmZzZXQgdmVydGljYWxcbiAgICB4ZSA9IHggKyB3RWxsaXBzZSwgLy8geC1lbmRcbiAgICB5ZSA9IHkgKyBoRWxsaXBzZSwgLy8geS1lbmRcbiAgICB4bSA9IHggKyB3RWxsaXBzZSAvIDIsIC8vIHgtbWlkZGxlXG4gICAgeW0gPSB5ICsgaEVsbGlwc2UgLyAyLCAvLyB5LW1pZGRsZVxuICAgIHltYiA9IHkgKyAoaCAtIGhFbGxpcHNlIC8gMiksIC8vIHktbWlkbGxlLCBib3R0b20gZWxsaXBzZVxuICAgIHllYiA9IHkgKyBoOyAvLyB5LWVuZCwgYm90dG9tIGVsbGlwc2VcblxuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oeGUsIHltKTtcblxuICBjdHguYmV6aWVyQ3VydmVUbyh4ZSwgeW0gKyBveSwgeG0gKyBveCwgeWUsIHhtLCB5ZSk7XG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhtIC0gb3gsIHllLCB4LCB5bSArIG95LCB4LCB5bSk7XG5cbiAgY3R4LmJlemllckN1cnZlVG8oeCwgeW0gLSBveSwgeG0gLSBveCwgeSwgeG0sIHkpO1xuICBjdHguYmV6aWVyQ3VydmVUbyh4bSArIG94LCB5LCB4ZSwgeW0gLSBveSwgeGUsIHltKTtcblxuICBjdHgubGluZVRvKHhlLCB5bWIpO1xuXG4gIGN0eC5iZXppZXJDdXJ2ZVRvKHhlLCB5bWIgKyBveSwgeG0gKyBveCwgeWViLCB4bSwgeWViKTtcbiAgY3R4LmJlemllckN1cnZlVG8oeG0gLSBveCwgeWViLCB4LCB5bWIgKyBveSwgeCwgeW1iKTtcblxuICBjdHgubGluZVRvKHgsIHltKTtcbn1cblxuLyoqXG4gKiBEcmF3IGEgZGFzaGVkIGxpbmUuXG4gKlxuICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoaXMgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCB0by5cbiAqIEBwYXJhbSB4IC0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9uIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0geSAtIFRoZSBzdGFydCBwb3NpdGlvbiBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHgyIC0gVGhlIGVuZCBwb3NpdGlvbiBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkyIC0gVGhlIGVuZCBwb3NpdGlvbiBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHBhdHRlcm4gLSBMaXN0IG9mIGxlbmd0aHMgc3RhcnRpbmcgd2l0aCBsaW5lIGFuZCB0aGVuIGFsdGVybmF0aW5nIGJldHdlZW4gc3BhY2UgYW5kIGxpbmUuXG4gKiBAYXV0aG9yIERhdmlkIEpvcmRhblxuICogQHJlbWFya3NcbiAqIGRhdGUgMjAxMi0wOC0wOFxuICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NTc2NzI0L2RvdHRlZC1zdHJva2UtaW4tY2FudmFzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RGFzaGVkTGluZShcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB4MjogbnVtYmVyLFxuICB5MjogbnVtYmVyLFxuICBwYXR0ZXJuOiBudW1iZXJbXVxuKTogdm9pZCB7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyh4LCB5KTtcblxuICBjb25zdCBwYXR0ZXJuTGVuZ3RoID0gcGF0dGVybi5sZW5ndGg7XG4gIGNvbnN0IGR4ID0geDIgLSB4O1xuICBjb25zdCBkeSA9IHkyIC0geTtcbiAgY29uc3Qgc2xvcGUgPSBkeSAvIGR4O1xuICBsZXQgZGlzdFJlbWFpbmluZyA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gIGxldCBwYXR0ZXJuSW5kZXggPSAwO1xuICBsZXQgZHJhdyA9IHRydWU7XG4gIGxldCB4U3RlcCA9IDA7XG4gIGxldCBkYXNoTGVuZ3RoID0gK3BhdHRlcm5bMF07XG5cbiAgd2hpbGUgKGRpc3RSZW1haW5pbmcgPj0gMC4xKSB7XG4gICAgZGFzaExlbmd0aCA9ICtwYXR0ZXJuW3BhdHRlcm5JbmRleCsrICUgcGF0dGVybkxlbmd0aF07XG4gICAgaWYgKGRhc2hMZW5ndGggPiBkaXN0UmVtYWluaW5nKSB7XG4gICAgICBkYXNoTGVuZ3RoID0gZGlzdFJlbWFpbmluZztcbiAgICB9XG5cbiAgICB4U3RlcCA9IE1hdGguc3FydCgoZGFzaExlbmd0aCAqIGRhc2hMZW5ndGgpIC8gKDEgKyBzbG9wZSAqIHNsb3BlKSk7XG4gICAgeFN0ZXAgPSBkeCA8IDAgPyAteFN0ZXAgOiB4U3RlcDtcbiAgICB4ICs9IHhTdGVwO1xuICAgIHkgKz0gc2xvcGUgKiB4U3RlcDtcblxuICAgIGlmIChkcmF3ID09PSB0cnVlKSB7XG4gICAgICBjdHgubGluZVRvKHgsIHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHgubW92ZVRvKHgsIHkpO1xuICAgIH1cblxuICAgIGRpc3RSZW1haW5pbmcgLT0gZGFzaExlbmd0aDtcbiAgICBkcmF3ID0gIWRyYXc7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3IGEgaGV4YWdvbi5cbiAqXG4gKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhpcyBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIHRvLlxuICogQHBhcmFtIHggLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeCBheGlzLlxuICogQHBhcmFtIHkgLSBUaGUgcG9zaXRpb24gb2YgdGhlIGNlbnRlciBvbiB0aGUgeSBheGlzLlxuICogQHBhcmFtIHIgLSBUaGUgcmFkaXVzIG9mIHRoZSBoZXhhZ29uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZHJhd0hleGFnb24oXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgcjogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjb25zdCBzaWRlcyA9IDY7XG4gIGNvbnN0IGEgPSAoTWF0aC5QSSAqIDIpIC8gc2lkZXM7XG4gIGN0eC5tb3ZlVG8oeCArIHIsIHkpO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IHNpZGVzOyBpKyspIHtcbiAgICBjdHgubGluZVRvKHggKyByICogTWF0aC5jb3MoYSAqIGkpLCB5ICsgciAqIE1hdGguc2luKGEgKiBpKSk7XG4gIH1cbiAgY3R4LmNsb3NlUGF0aCgpO1xufVxuXG5jb25zdCBzaGFwZU1hcCA9IHtcbiAgY2lyY2xlOiBkcmF3Q2lyY2xlLFxuICBkYXNoZWRMaW5lOiBkcmF3RGFzaGVkTGluZSxcbiAgZGF0YWJhc2U6IGRyYXdEYXRhYmFzZSxcbiAgZGlhbW9uZDogZHJhd0RpYW1vbmQsXG4gIGVsbGlwc2U6IGRyYXdFbGxpcHNlLFxuICBlbGxpcHNlX3ZpczogZHJhd0VsbGlwc2UsXG4gIGhleGFnb246IGRyYXdIZXhhZ29uLFxuICByb3VuZFJlY3Q6IGRyYXdSb3VuZFJlY3QsXG4gIHNxdWFyZTogZHJhd1NxdWFyZSxcbiAgc3RhcjogZHJhd1N0YXIsXG4gIHRyaWFuZ2xlOiBkcmF3VHJpYW5nbGUsXG4gIHRyaWFuZ2xlRG93bjogZHJhd1RyaWFuZ2xlRG93bixcbn07XG5cbi8qKlxuICogUmV0dXJucyBlaXRoZXIgY3VzdG9tIG9yIG5hdGl2ZSBkcmF3aW5nIGZ1bmN0aW9uIGJhc2Ugb24gc3VwcGxpZWQgbmFtZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4gRWl0aGVyIHRoZSBuYW1lIG9mIGFcbiAqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBwcm9wZXJ0eSBvciBhbiBleHBvcnQgZnJvbSBzaGFwZXMudHMgd2l0aG91dCB0aGVcbiAqIGRyYXcgcHJlZml4LlxuICogQHJldHVybnMgVGhlIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHJlbmRlcmluZy4gSW4gY2FzZSBvZiBuYXRpdmVcbiAqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmdW5jdGlvbiB0aGUgQVBJIGlzIG5vcm1hbGl6ZWQgdG9cbiAqIGAoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIC4uLm9yaWdpbmFsQXJncykgPT4gdm9pZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaGFwZShcbiAgbmFtZToga2V5b2YgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwga2V5b2YgdHlwZW9mIHNoYXBlTWFwXG4pOiBhbnkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNoYXBlTWFwLCBuYW1lKSkge1xuICAgIHJldHVybiAoc2hhcGVNYXAgYXMgYW55KVtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cGUgYXMgYW55KVtuYW1lXS5jYWxsKGN0eCwgYXJncyk7XG4gICAgfTtcbiAgfVxufVxuIiwgIlxyXG4vKipcclxuICogRXhwb3NlIGBFbWl0dGVyYC5cclxuICovXHJcblxyXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICBtb2R1bGUuZXhwb3J0cyA9IEVtaXR0ZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplIGEgbmV3IGBFbWl0dGVyYC5cclxuICpcclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5mdW5jdGlvbiBFbWl0dGVyKG9iaikge1xyXG4gIGlmIChvYmopIHJldHVybiBtaXhpbihvYmopO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE1peGluIHRoZSBlbWl0dGVyIHByb3BlcnRpZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKiBAYXBpIHByaXZhdGVcclxuICovXHJcblxyXG5mdW5jdGlvbiBtaXhpbihvYmopIHtcclxuICBmb3IgKHZhciBrZXkgaW4gRW1pdHRlci5wcm90b3R5cGUpIHtcclxuICAgIG9ialtrZXldID0gRW1pdHRlci5wcm90b3R5cGVba2V5XTtcclxuICB9XHJcbiAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuLyoqXHJcbiAqIExpc3RlbiBvbiB0aGUgZ2l2ZW4gYGV2ZW50YCB3aXRoIGBmbmAuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxyXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLm9uID1cclxuRW1pdHRlci5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XHJcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xyXG4gICh0aGlzLl9jYWxsYmFja3NbJyQnICsgZXZlbnRdID0gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSB8fCBbXSlcclxuICAgIC5wdXNoKGZuKTtcclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIGFuIGBldmVudGAgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgYSBzaW5nbGVcclxuICogdGltZSB0aGVuIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZC5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXHJcbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuRW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XHJcbiAgZnVuY3Rpb24gb24oKSB7XHJcbiAgICB0aGlzLm9mZihldmVudCwgb24pO1xyXG4gICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICB9XHJcblxyXG4gIG9uLmZuID0gZm47XHJcbiAgdGhpcy5vbihldmVudCwgb24pO1xyXG4gIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSB0aGUgZ2l2ZW4gY2FsbGJhY2sgZm9yIGBldmVudGAgb3IgYWxsXHJcbiAqIHJlZ2lzdGVyZWQgY2FsbGJhY2tzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cclxuICogQHJldHVybiB7RW1pdHRlcn1cclxuICogQGFwaSBwdWJsaWNcclxuICovXHJcblxyXG5FbWl0dGVyLnByb3RvdHlwZS5vZmYgPVxyXG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XHJcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XHJcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgZm4pe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuXHJcbiAgLy8gYWxsXHJcbiAgaWYgKDAgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgdGhpcy5fY2FsbGJhY2tzID0ge307XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIHNwZWNpZmljIGV2ZW50XHJcbiAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgaWYgKCFjYWxsYmFja3MpIHJldHVybiB0aGlzO1xyXG5cclxuICAvLyByZW1vdmUgYWxsIGhhbmRsZXJzXHJcbiAgaWYgKDEgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIHJlbW92ZSBzcGVjaWZpYyBoYW5kbGVyXHJcbiAgdmFyIGNiO1xyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjYiA9IGNhbGxiYWNrc1tpXTtcclxuICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XHJcbiAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUmVtb3ZlIGV2ZW50IHNwZWNpZmljIGFycmF5cyBmb3IgZXZlbnQgdHlwZXMgdGhhdCBub1xyXG4gIC8vIG9uZSBpcyBzdWJzY3JpYmVkIGZvciB0byBhdm9pZCBtZW1vcnkgbGVhay5cclxuICBpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1snJCcgKyBldmVudF07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBFbWl0IGBldmVudGAgd2l0aCB0aGUgZ2l2ZW4gYXJncy5cclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XHJcbiAqIEBwYXJhbSB7TWl4ZWR9IC4uLlxyXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbihldmVudCl7XHJcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xyXG5cclxuICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSlcclxuICAgICwgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XTtcclxuXHJcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNhbGxiYWNrcykge1xyXG4gICAgY2FsbGJhY2tzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xyXG4gICAgICBjYWxsYmFja3NbaV0uYXBwbHkodGhpcywgYXJncyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gYXJyYXkgb2YgY2FsbGJhY2tzIGZvciBgZXZlbnRgLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcclxuICogQHJldHVybiB7QXJyYXl9XHJcbiAqIEBhcGkgcHVibGljXHJcbiAqL1xyXG5cclxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnQpe1xyXG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcclxuICByZXR1cm4gdGhpcy5fY2FsbGJhY2tzWyckJyArIGV2ZW50XSB8fCBbXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiB0aGlzIGVtaXR0ZXIgaGFzIGBldmVudGAgaGFuZGxlcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxyXG4gKiBAcmV0dXJuIHtCb29sZWFufVxyXG4gKiBAYXBpIHB1YmxpY1xyXG4gKi9cclxuXHJcbkVtaXR0ZXIucHJvdG90eXBlLmhhc0xpc3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50KXtcclxuICByZXR1cm4gISEgdGhpcy5saXN0ZW5lcnMoZXZlbnQpLmxlbmd0aDtcclxufTtcclxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgJiYgIVY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBwcm9wc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnVtZXJhYmxlKSB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgdmFsdWUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAodHlwZW9mIGFyZ3VtZW50ID09ICdvYmplY3QnIHx8IGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgJFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBgQ3JlYXRlSXRlclJlc3VsdE9iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWl0ZXJyZXN1bHRvYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogZG9uZSB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChwb2ludCwgZmFsc2UpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIGVtcHR5ID0gW107XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAudGVzdChub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgZW1wdHksIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKHByb3BlcnR5S2V5IGluIG9iamVjdCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbcHJvcGVydHlLZXldID0gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXQpKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PT0gJEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6ICRBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICB0cnkge1xuICAgIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIHdvcmthcm91bmQgb2Ygb2xkIFdlYktpdCArIGBldmFsYCBidWdcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYWJsZSk7XG59KTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mcm9tJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5mcm9tO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9mcm9tJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvZnJvbVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXgrKztcbiAgaWYgKCF0YXJnZXQgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aCkge1xuICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICB9XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgJ2tleXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChpbmRleCwgZmFsc2UpO1xuICAgIGNhc2UgJ3ZhbHVlcyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHRhcmdldFtpbmRleF0sIGZhbHNlKTtcbiAgfSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBmYWxzZSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVtYXBwZWRhcmd1bWVudHNvYmplY3RcbnZhciB2YWx1ZXMgPSBJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcblxuLy8gVjggfiBDaHJvbWUgNDUtIGJ1Z1xuaWYgKCFJU19QVVJFICYmIERFU0NSSVBUT1JTICYmIHZhbHVlcy5uYW1lICE9PSAndmFsdWVzJykgdHJ5IHtcbiAgZGVmaW5lUHJvcGVydHkodmFsdWVzLCAnbmFtZScsIHsgdmFsdWU6ICd2YWx1ZXMnIH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yTWV0aG9kO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdO1xuICB2YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlICYmIGNsYXNzb2YoQ29sbGVjdGlvblByb3RvdHlwZSkgIT09IFRPX1NUUklOR19UQUcpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgfVxuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vZnVsbC9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2RcIik7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSBkZWZpbmVQcm9wZXJ0eSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGRlZmluZVByb3BlcnR5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkuc2hhbSkgZGVmaW5lUHJvcGVydHkuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09PSAnQXJyYXknO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYSBwYXJ0IG9mIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXkpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAoaXNDb25zdHJ1Y3RvcihDKSAmJiAoQyA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IEM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbi8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9IFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBpc0NvbmNhdFNwcmVhZGFibGUgPSBmdW5jdGlvbiAoTykge1xuICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzcHJlYWRhYmxlID0gT1tJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gIHJldHVybiBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KE8pO1xufTtcblxudmFyIEZPUkNFRCA9ICFJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIHx8ICFhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBjb25jYXQ6IGZ1bmN0aW9uIGNvbmNhdChhcmcpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoRSk7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgbGVuKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyAxKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gIHZhciByZXN1bHQgPSAkQXJyYXkobWF4KGZpbiAtIGssIDApKTtcbiAgdmFyIG4gPSAwO1xuICBmb3IgKDsgayA8IGZpbjsgaysrLCBuKyspIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gIHJlc3VsdC5sZW5ndGggPSBuO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXJyYXlTbGljZSh3aW5kb3dOYW1lcyk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiBjbGFzc29mKGl0KSA9PT0gJ1dpbmRvdydcbiAgICA/IGdldFdpbmRvd05hbWVzKGl0KVxuICAgIDogJGdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbmV4cG9ydHMuZiA9IHdlbGxLbm93blN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09PSA2O1xuICB2YXIgSVNfRklMVEVSX1JFSkVDVCA9IFRZUEUgPT09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShzZWxmKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG5cbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB7fSkpO1xuICAgICAgT1tISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzT3duKE8sIEhJRERFTikgJiYgT1tISURERU5dW2tleV0pIE9bSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBBdHRyaWJ1dGVzID0gbmF0aXZlT2JqZWN0Q3JlYXRlKEF0dHJpYnV0ZXMsIHsgZW51bWVyYWJsZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjcmlwdG9yKE8sIGtleSwgQXR0cmlidXRlcyk7XG4gIH0gcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIGtleSwgQXR0cmlidXRlcyk7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wZXJ0aWVzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMocHJvcGVydGllcykuY29uY2F0KCRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJvcGVydGllcykpO1xuICAkZm9yRWFjaChrZXlzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFERVNDUklQVE9SUyB8fCBjYWxsKCRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgcHJvcGVydGllcywga2V5KSkgJGRlZmluZVByb3BlcnR5KE8sIGtleSwgcHJvcGVydGllc1trZXldKTtcbiAgfSk7XG4gIHJldHVybiBPO1xufTtcblxudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gbmF0aXZlT2JqZWN0Q3JlYXRlKE8pIDogJGRlZmluZVByb3BlcnRpZXMobmF0aXZlT2JqZWN0Q3JlYXRlKE8pLCBQcm9wZXJ0aWVzKTtcbn07XG5cbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBQID0gdG9Qcm9wZXJ0eUtleShWKTtcbiAgdmFyIGVudW1lcmFibGUgPSBjYWxsKG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLCB0aGlzLCBQKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywgUCkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBQKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZW51bWVyYWJsZSB8fCAhaGFzT3duKHRoaXMsIFApIHx8ICFoYXNPd24oQWxsU3ltYm9scywgUCkgfHwgaGFzT3duKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW1BdXG4gICAgPyBlbnVtZXJhYmxlIDogdHJ1ZTtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgdmFyIGl0ID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihPYmplY3RQcm90b3R5cGVTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBkZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xuICBpZiAoZGVzY3JpcHRvciAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhKGhhc093bihpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSB7XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICB2YXIgbmFtZXMgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIWhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSkgcHVzaChyZXN1bHQsIGtleSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiAoTykge1xuICB2YXIgSVNfT0JKRUNUX1BST1RPVFlQRSA9IE8gPT09IE9iamVjdFByb3RvdHlwZTtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyhJU19PQkpFQ1RfUFJPVE9UWVBFID8gT2JqZWN0UHJvdG90eXBlU3ltYm9scyA6IHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgKCFJU19PQkpFQ1RfUFJPVE9UWVBFIHx8IGhhc093bihPYmplY3RQcm90b3R5cGUsIGtleSkpKSB7XG4gICAgICBwdXNoKHJlc3VsdCwgQWxsU3ltYm9sc1trZXldKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gYFN5bWJvbGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLWNvbnN0cnVjdG9yXG5pZiAoIU5BVElWRV9TWU1CT0wpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAoaXNQcm90b3R5cGVPZihTeW1ib2xQcm90b3R5cGUsIHRoaXMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSAhYXJndW1lbnRzLmxlbmd0aCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICR0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciB0YWcgPSB1aWQoZGVzY3JpcHRpb24pO1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKHRoaXMsIEhJRERFTikgJiYgaGFzT3duKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IodGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgICBmYWxsYmFja0RlZmluZVByb3BlcnR5KHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVwbGFjZXIpIHtcbiAgaWYgKGlzQ2FsbGFibGUocmVwbGFjZXIpKSByZXR1cm4gcmVwbGFjZXI7XG4gIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJldHVybjtcbiAgdmFyIHJhd0xlbmd0aCA9IHJlcGxhY2VyLmxlbmd0aDtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gcmVwbGFjZXJbaV07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKSBwdXNoKGtleXMsIGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdudW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdOdW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdTdHJpbmcnKSBwdXNoKGtleXMsIHRvU3RyaW5nKGVsZW1lbnQpKTtcbiAgfVxuICB2YXIga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgcm9vdCA9IHRydWU7XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChyb290KSB7XG4gICAgICByb290ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHRoaXMpKSByZXR1cm4gdmFsdWU7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzTGVuZ3RoOyBqKyspIGlmIChrZXlzW2pdID09PSBrZXkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBnZXRSZXBsYWNlckZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCdzdHJpbmdpZnkgZGV0ZWN0aW9uJyk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPT0gJ1tudWxsXSdcbiAgICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9PSAne30nXG4gICAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZPUkNFRCA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eXN5bWJvbHNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgdmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5U3ltYm9scyA/ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3QoaXQpKSA6IFtdO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmFzeW5jSXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5hc3luY2l0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jSXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmhhc0luc3RhbmNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaGFzaW5zdGFuY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaGFzSW5zdGFuY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmlzY29uY2F0c3ByZWFkYWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoQWxsYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hhbGxcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2hBbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnJlcGxhY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5yZXBsYWNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNlYXJjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNlYXJjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzZWFyY2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwZWNpZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zcGVjaWVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnNwbGl0YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BsaXRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BsaXQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIGRlZmluZVN5bWJvbFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlJyk7XG5cbi8vIGBTeW1ib2wudG9QcmltaXRpdmVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3ByaW1pdGl2ZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvc3RyaW5ndGFnXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdldEJ1aWx0SW4oJ1N5bWJvbCcpLCAnU3ltYm9sJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC51bnNjb3BhYmxlc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnVuc2NvcGFibGVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBKU09OW0BAdG9TdHJpbmdUYWddIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24tQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5jb25jYXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaGFzLWluc3RhbmNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNlYXJjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BlY2llcycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuc3BsaXQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wudW5zY29wYWJsZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hdGgudG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LnRvLXN0cmluZy10YWcnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlN5bWJvbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgTUVUQURBVEEgPSB3ZWxsS25vd25TeW1ib2woJ21ldGFkYXRhJyk7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8vIEZ1bmN0aW9uLnByb3RvdHlwZVtAQG1ldGFkYXRhXVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5pZiAoRnVuY3Rpb25Qcm90b3R5cGVbTUVUQURBVEFdID09PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE1FVEFEQVRBLCB7XG4gICAgdmFsdWU6IG51bGxcbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hc3luYy1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jRGlzcG9zZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuZGlzcG9zZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWV4cGxpY2l0LXJlc291cmNlLW1hbmFnZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnZGlzcG9zZScpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sJyk7XG5cbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuYXN5bmMtZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyIGtleUZvciA9IFN5bWJvbC5rZXlGb3I7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sIHx8IGZ1bmN0aW9uIGlzUmVnaXN0ZXJlZFN5bWJvbCh2YWx1ZSkge1xuICB0cnkge1xuICAgIHJldHVybiBrZXlGb3IodGhpc1N5bWJvbFZhbHVlKHZhbHVlKSkgIT09IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNSZWdpc3RlcmVkU3ltYm9sOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyICRpc1dlbGxLbm93blN5bWJvbCA9IFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbDtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0QnVpbHRJbignT2JqZWN0JywgJ2dldE93blByb3BlcnR5TmFtZXMnKTtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbmZvciAodmFyIGkgPSAwLCBzeW1ib2xLZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpLCBzeW1ib2xLZXlzTGVuZ3RoID0gc3ltYm9sS2V5cy5sZW5ndGg7IGkgPCBzeW1ib2xLZXlzTGVuZ3RoOyBpKyspIHtcbiAgLy8gc29tZSBvbGQgZW5naW5lcyB0aHJvd3Mgb24gYWNjZXNzIHRvIHNvbWUga2V5cyBsaWtlIGBhcmd1bWVudHNgIG9yIGBjYWxsZXJgXG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbEtleSA9IHN5bWJvbEtleXNbaV07XG4gICAgaWYgKGlzU3ltYm9sKFN5bWJvbFtzeW1ib2xLZXldKSkgd2VsbEtub3duU3ltYm9sKHN5bWJvbEtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn1cblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkge1xuICBpZiAoJGlzV2VsbEtub3duU3ltYm9sICYmICRpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodmFsdWUpO1xuICAgIGZvciAodmFyIGogPSAwLCBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7IGogPCBrZXlzTGVuZ3RoOyBqKyspIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXEgLS0gcG9seWZpbGxlZCBzeW1ib2xzIGNhc2VcbiAgICAgIGlmIChXZWxsS25vd25TeW1ib2xzU3RvcmVba2V5c1tqXV0gPT0gc3ltYm9sKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1dlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bicpO1xuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd25TeW1ib2w6IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoZXJgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm9ic2VydmFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1JlZ2lzdGVyZWRTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXJlZ2lzdGVyZWQnKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRgIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzUmVnaXN0ZXJlZFN5bWJvbCcgfSwge1xuICBpc1JlZ2lzdGVyZWQ6IGlzUmVnaXN0ZXJlZFN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93bmAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzV2VsbEtub3duU3ltYm9sJywgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd246IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhS2V5YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yLW1ldGFkYXRhXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21ldGFkYXRhS2V5Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wucGF0dGVybk1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdwYXR0ZXJuTWF0Y2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlQWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy1yZWdpc3RlcmVkLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24tc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWF0Y2hlcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm9ic2VydmFibGUnKTtcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXdlbGwta25vd24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YS1rZXknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucmVwbGFjZS1hbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3InKTtcbnZhciBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXcmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoJ2l0ZXJhdG9yJyk7XG4iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfU3ltYm9sJGl0ZXJhdG9yIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZigndG9QcmltaXRpdmUnKTtcbiIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkdG9QcmltaXRpdmUgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbX1N5bWJvbCR0b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIF9PYmplY3QkZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmlzYXJyYXlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBpc0FycmF5OiBpc0FycmF5XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5BcnJheS5pc0FycmF5O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9hcnJheS9pcy1hcnJheScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggYW5kIFNhZmFyaSA8PSAxNS40LCBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5wdXNoJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykucHVzaDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9wdXNoJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnB1c2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnB1c2gpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcHVzaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIG5hdGl2ZVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnc2xpY2UnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKGlzQ29uc3RydWN0b3IoQ29uc3RydWN0b3IpICYmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQ29uc3RydWN0b3IucHJvdG90eXBlKSkpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KENvbnN0cnVjdG9yKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yW1NQRUNJRVNdO1xuICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IG51bGwpIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yID09PSAkQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQ29uc3RydWN0b3IpKG1heChmaW4gLSBrLCAwKSk7XG4gICAgZm9yIChuID0gMDsgayA8IGZpbjsgaysrLCBuKyspIGlmIChrIGluIE8pIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zbGljZScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnNsaWNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNsaWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL3NsaWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvYXJyYXkvZnJvbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICByZXR1cm4gYXJyMjtcbn0iLCAiaW1wb3J0IF9zbGljZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZS5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICB2YXIgX2NvbnRleHQ7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSkuY2FsbChfY29udGV4dCwgOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gX0FycmF5JGZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsICJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9wdXNoSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIF9TeW1ib2wgJiYgX2dldEl0ZXJhdG9yTWV0aG9kKHIpIHx8IHJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSB0KSB7XG4gICAgdmFyIGUsXG4gICAgICBuLFxuICAgICAgaSxcbiAgICAgIHUsXG4gICAgICBhID0gW10sXG4gICAgICBmID0gITAsXG4gICAgICBvID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHtcbiAgICAgICAgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuO1xuICAgICAgICBmID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoX3B1c2hJbnN0YW5jZVByb3BlcnR5KGEpLmNhbGwoYSwgZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aG91dEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVTcHJlYWQgZnJvbSBcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufSIsICJpbXBvcnQgX0FycmF5JGlzQXJyYXkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9pcy1hcnJheS5qc1wiO1xuaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoX0FycmF5JGlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn0iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfZ2V0SXRlcmF0b3JNZXRob2QgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCI7XG5pbXBvcnQgX0FycmF5JGZyb20gZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9hcnJheS9mcm9tLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBfU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIF9nZXRJdGVyYXRvck1ldGhvZChpdGVyKSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBfQXJyYXkkZnJvbShpdGVyKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zeW1ib2xcIik7IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuY29uY2F0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2NvbmNhdCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5jb25jYXQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmNvbmNhdCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9jb25jYXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9zbGljZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9pcy1hcnJheVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lm1hcCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLm1hcDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5tYXApID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvbWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyICREYXRlID0gRGF0ZTtcbnZhciB0aGlzVGltZVZhbHVlID0gdW5jdXJyeVRoaXMoJERhdGUucHJvdG90eXBlLmdldFRpbWUpO1xuXG4vLyBgRGF0ZS5ub3dgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLm5vd1xuJCh7IHRhcmdldDogJ0RhdGUnLCBzdGF0OiB0cnVlIH0sIHtcbiAgbm93OiBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuIHRoaXNUaW1lVmFsdWUobmV3ICREYXRlKCkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmRhdGUubm93Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5EYXRlLm5vdztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0sIDEpO1xuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG59IDogW10uZm9yRWFjaDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogW10uZm9yRWFjaCAhPT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2gnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5mb3JFYWNoO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5mb3JFYWNoO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mb3JFYWNoKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IHVuY3VycnlUaGlzKFtdLnJldmVyc2UpO1xudmFyIHRlc3QgPSBbMSwgMl07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmV2ZXJzZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ24gLS0gZGlydHkgaGFja1xuICAgIGlmIChpc0FycmF5KHRoaXMpKSB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHJldHVybiBuYXRpdmVSZXZlcnNlKHRoaXMpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZXZlcnNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3JldmVyc2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucmV2ZXJzZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmV2ZXJzZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9yZXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NwbGljZScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc3BsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNwbGljZVxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc3BsaWNlOiBmdW5jdGlvbiBzcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50IC8qICwgLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYWN0dWFsU3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGluc2VydENvdW50LCBhY3R1YWxEZWxldGVDb3VudCwgQSwgaywgZnJvbSwgdG87XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMCkge1xuICAgICAgaW5zZXJ0Q291bnQgPSBhY3R1YWxEZWxldGVDb3VudCA9IDA7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDEpIHtcbiAgICAgIGluc2VydENvdW50ID0gMDtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbGVuIC0gYWN0dWFsU3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc2VydENvdW50ID0gYXJndW1lbnRzTGVuZ3RoIC0gMjtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbWluKG1heCh0b0ludGVnZXJPckluZmluaXR5KGRlbGV0ZUNvdW50KSwgMCksIGxlbiAtIGFjdHVhbFN0YXJ0KTtcbiAgICB9XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGluc2VydENvdW50IC0gYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIGZvciAoayA9IDA7IGsgPCBhY3R1YWxEZWxldGVDb3VudDsgaysrKSB7XG4gICAgICBmcm9tID0gYWN0dWFsU3RhcnQgKyBrO1xuICAgICAgaWYgKGZyb20gaW4gTykgY3JlYXRlUHJvcGVydHkoQSwgaywgT1tmcm9tXSk7XG4gICAgfVxuICAgIEEubGVuZ3RoID0gYWN0dWFsRGVsZXRlQ291bnQ7XG4gICAgaWYgKGluc2VydENvdW50IDwgYWN0dWFsRGVsZXRlQ291bnQpIHtcbiAgICAgIGZvciAoayA9IGFjdHVhbFN0YXJ0OyBrIDwgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgICBmcm9tID0gayArIGFjdHVhbERlbGV0ZUNvdW50O1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudDtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgICBmb3IgKGsgPSBsZW47IGsgPiBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50OyBrLS0pIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCBrIC0gMSk7XG4gICAgfSBlbHNlIGlmIChpbnNlcnRDb3VudCA+IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBsZW4gLSBhY3R1YWxEZWxldGVDb3VudDsgayA+IGFjdHVhbFN0YXJ0OyBrLS0pIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudCAtIDE7XG4gICAgICAgIHRvID0gayArIGluc2VydENvdW50IC0gMTtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IDA7IGsgPCBpbnNlcnRDb3VudDsgaysrKSB7XG4gICAgICBPW2sgKyBhY3R1YWxTdGFydF0gPSBhcmd1bWVudHNbayArIDJdO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50KTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zcGxpY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc3BsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNwbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc3BsaWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NwbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmNsdWRlcztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIEZGOTkrIGJ1Z1xudmFyIEJST0tFTl9PTl9TUEFSU0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtaW5jbHVkZXMgLS0gZGV0ZWN0aW9uXG4gIHJldHVybiAhQXJyYXkoMSkuaW5jbHVkZXMoKTtcbn0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCUk9LRU5fT05fU1BBUlNFIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcycpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmluY2x1ZGVzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09PSAnUmVnRXhwJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1JlZ0V4cChpdCkpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICB2YXIgcmVnZXhwID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICB0cnkge1xuICAgICAgcmVnZXhwW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICAgIH0gY2F0Y2ggKGVycm9yMikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBub3RBUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMnKTtcblxudmFyIHN0cmluZ0luZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIWNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdpbmNsdWRlcycpIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5zdHJpbmdJbmRleE9mKFxuICAgICAgdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSksXG4gICAgICB0b1N0cmluZyhub3RBUmVnRXhwKHNlYXJjaFN0cmluZykpLFxuICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcycpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdTdHJpbmcnKS5pbmNsdWRlcztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYXJyYXlNZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2luY2x1ZGVzJyk7XG52YXIgc3RyaW5nTWV0aG9kID0gcmVxdWlyZSgnLi4vc3RyaW5nL3ZpcnR1YWwvaW5jbHVkZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xudmFyIFN0cmluZ1Byb3RvdHlwZSA9IFN0cmluZy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5pbmNsdWRlcztcbiAgaWYgKGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuaW5jbHVkZXMpKSByZXR1cm4gYXJyYXlNZXRob2Q7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgfHwgaXQgPT09IFN0cmluZ1Byb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihTdHJpbmdQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IFN0cmluZ1Byb3RvdHlwZS5pbmNsdWRlcykpIHtcbiAgICByZXR1cm4gc3RyaW5nTWV0aG9kO1xuICB9IHJldHVybiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9pbmNsdWRlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmlsdGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbHRlcikgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maWx0ZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyJyArXG4gICdcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXlsnICsgd2hpdGVzcGFjZXMgKyAnXSsnKTtcbnZhciBydHJpbSA9IFJlZ0V4cCgnKF58W14nICsgd2hpdGVzcGFjZXMgKyAnXSlbJyArIHdoaXRlc3BhY2VzICsgJ10rJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgbHRyaW0sICcnKTtcbiAgICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBydHJpbSwgJyQxJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbVJpZ2h0LCB0cmltRW5kIH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciAkcGFyc2VJbnQgPSBnbG9iYWwucGFyc2VJbnQ7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBJVEVSQVRPUiA9IFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgaGV4ID0gL15bKy1dPzB4L2k7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGhleC5leGVjKTtcbnZhciBGT1JDRUQgPSAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMDgnKSAhPT0gOCB8fCAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMHgxNicpICE9PSAyMlxuICAvLyBNUyBFZGdlIDE4LSBicm9rZW4gd2l0aCBib3hlZCBzeW1ib2xzXG4gIHx8IChJVEVSQVRPUiAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyAkcGFyc2VJbnQoT2JqZWN0KElURVJBVE9SKSk7IH0pKTtcblxuLy8gYHBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VpbnQtc3RyaW5nLXJhZGl4XG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlSW50KHN0cmluZywgcmFkaXgpIHtcbiAgdmFyIFMgPSB0cmltKHRvU3RyaW5nKHN0cmluZykpO1xuICByZXR1cm4gJHBhcnNlSW50KFMsIChyYWRpeCA+Pj4gMCkgfHwgKGV4ZWMoaGV4LCBTKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1wYXJzZS1pbnQnKTtcblxuLy8gYHBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VpbnQtc3RyaW5nLXJhZGl4XG4kKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHBhcnNlSW50ICE9PSAkcGFyc2VJbnQgfSwge1xuICBwYXJzZUludDogJHBhcnNlSW50XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnBhcnNlLWludCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGgucGFyc2VJbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluZGV4b2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciAkaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVJbmRleE9mID0gdW5jdXJyeVRoaXMoW10uaW5kZXhPZik7XG5cbnZhciBORUdBVElWRV9aRVJPID0gISFuYXRpdmVJbmRleE9mICYmIDEgLyBuYXRpdmVJbmRleE9mKFsxXSwgMSwgLTApIDwgMDtcbnZhciBGT1JDRUQgPSBORUdBVElWRV9aRVJPIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdpbmRleE9mJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgdmFyIGZyb21JbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/IG5hdGl2ZUluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4KSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5pbmRleE9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2luZGV4LW9mJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmluZGV4T2Y7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmluZGV4T2YpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvaW5kZXgtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgY3JlYXRlOiBjcmVhdGVcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoUCwgRCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2NyZWF0ZVwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1qc29uIC0tIHNhZmVcbmlmICghcGF0aC5KU09OKSBwYXRoLkpTT04gPSB7IHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnkgfTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgcmV0dXJuIGFwcGx5KHBhdGguSlNPTi5zdHJpbmdpZnksIG51bGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9qc29uL3N0cmluZ2lmeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQnVuIC0tIERlbm8gY2FzZSAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgQnVuID09ICdmdW5jdGlvbicgJiYgQnVuICYmIHR5cGVvZiBCdW4udmVyc2lvbiA9PSAnc3RyaW5nJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93IG5ldyAkVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICByZXR1cm4gcGFzc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIEVOR0lORV9JU19CVU4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJ1bicpO1xudmFyIFVTRVJfQUdFTlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xuXG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG4vLyBkaXJ0eSBJRTktIGFuZCBCdW4gMC4zLjAtIGNoZWNrc1xudmFyIFdSQVAgPSAvTVNJRSAuXFwuLy50ZXN0KFVTRVJfQUdFTlQpIHx8IEVOR0lORV9JU19CVU4gJiYgKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlcnNpb24gPSBnbG9iYWwuQnVuLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoIDwgMyB8fCB2ZXJzaW9uWzBdID09PSAnMCcgJiYgKHZlcnNpb25bMV0gPCAzIHx8IHZlcnNpb25bMV0gPT09ICczJyAmJiB2ZXJzaW9uWzJdID09PSAnMCcpO1xufSkoKTtcblxuLy8gSUU5LSAvIEJ1biAwLjMuMC0gc2V0VGltZW91dCAvIHNldEludGVydmFsIC8gc2V0SW1tZWRpYXRlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjdGltZXJzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vb3Zlbi1zaC9idW4vaXNzdWVzLzE2MzNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaGFzVGltZUFyZykge1xuICB2YXIgZmlyc3RQYXJhbUluZGV4ID0gaGFzVGltZUFyZyA/IDIgOiAxO1xuICByZXR1cm4gV1JBUCA/IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gZmlyc3RQYXJhbUluZGV4O1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIHBhcmFtcyA9IGJvdW5kQXJncyA/IGFycmF5U2xpY2UoYXJndW1lbnRzLCBmaXJzdFBhcmFtSW5kZXgpIDogW107XG4gICAgdmFyIGNhbGxiYWNrID0gYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHRoaXMsIHBhcmFtcyk7XG4gICAgfSA6IGZuO1xuICAgIHJldHVybiBoYXNUaW1lQXJnID8gc2NoZWR1bGVyKGNhbGxiYWNrLCB0aW1lb3V0KSA6IHNjaGVkdWxlcihjYWxsYmFjayk7XG4gIH0gOiBzY2hlZHVsZXI7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRJbnRlcnZhbCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldEludGVydmFsLCB0cnVlKTtcblxuLy8gQnVuIC8gSUU5LSBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0SW50ZXJ2YWwgIT09IHNldEludGVydmFsIH0sIHtcbiAgc2V0SW50ZXJ2YWw6IHNldEludGVydmFsXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2NoZWR1bGVyc0ZpeCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zY2hlZHVsZXJzLWZpeCcpO1xuXG52YXIgc2V0VGltZW91dCA9IHNjaGVkdWxlcnNGaXgoZ2xvYmFsLnNldFRpbWVvdXQsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldFRpbWVvdXQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tc2V0dGltZW91dFxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0VGltZW91dCAhPT0gc2V0VGltZW91dCB9LCB7XG4gIHNldFRpbWVvdXQ6IHNldFRpbWVvdXRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnRpbWVycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguc2V0VGltZW91dDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWxsYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbGxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmlsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1maWxsJyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbGxcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmlsbDogZmlsbFxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2ZpbGwnKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbGwnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5maWxsO1xuIiwgIi8qISBIYW1tZXIuSlMgLSB2Mi4wLjE3LXJjIC0gMjAxOS0xMi0xNlxuICogaHR0cDovL25hdmVyLmdpdGh1Yi5pby9lZ2pzXG4gKlxuICogRm9ya2VkIEJ5IE5hdmVyIGVnanNcbiAqIENvcHlyaWdodCAoYykgaGFtbWVyanNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAqL1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBleHRlbmQgb2JqZWN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIGluIGRlc3Qgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgb25lcyBpbiBzcmMuXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gey4uLk9iamVjdH0gb2JqZWN0c190b19hc3NpZ25cbiAqIEByZXR1cm5zIHtPYmplY3R9IHRhcmdldFxuICovXG52YXIgYXNzaWduO1xuXG5pZiAodHlwZW9mIE9iamVjdC5hc3NpZ24gIT09ICdmdW5jdGlvbicpIHtcbiAgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCkge1xuICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCB8fCB0YXJnZXQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHZhciBvdXRwdXQgPSBPYmplY3QodGFyZ2V0KTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBhcmd1bWVudHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2luZGV4XTtcblxuICAgICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBuZXh0S2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIHtcbiAgICAgICAgICAgIG91dHB1dFtuZXh0S2V5XSA9IHNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xufSBlbHNlIHtcbiAgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbn1cblxudmFyIGFzc2lnbiQxID0gYXNzaWduO1xuXG52YXIgVkVORE9SX1BSRUZJWEVTID0gWycnLCAnd2Via2l0JywgJ01veicsICdNUycsICdtcycsICdvJ107XG52YXIgVEVTVF9FTEVNRU5UID0gdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiID8ge1xuICBzdHlsZToge31cbn0gOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbnZhciBUWVBFX0ZVTkNUSU9OID0gJ2Z1bmN0aW9uJztcbnZhciByb3VuZCA9IE1hdGgucm91bmQsXG4gICAgYWJzID0gTWF0aC5hYnM7XG52YXIgbm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgcHJlZml4ZWQgcHJvcGVydHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eVxuICogQHJldHVybnMge1N0cmluZ3xVbmRlZmluZWR9IHByZWZpeGVkXG4gKi9cblxuZnVuY3Rpb24gcHJlZml4ZWQob2JqLCBwcm9wZXJ0eSkge1xuICB2YXIgcHJlZml4O1xuICB2YXIgcHJvcDtcbiAgdmFyIGNhbWVsUHJvcCA9IHByb3BlcnR5WzBdLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgVkVORE9SX1BSRUZJWEVTLmxlbmd0aCkge1xuICAgIHByZWZpeCA9IFZFTkRPUl9QUkVGSVhFU1tpXTtcbiAgICBwcm9wID0gcHJlZml4ID8gcHJlZml4ICsgY2FtZWxQcm9wIDogcHJvcGVydHk7XG5cbiAgICBpZiAocHJvcCBpbiBvYmopIHtcbiAgICAgIHJldHVybiBwcm9wO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldy1mdW5jLCBuby1uZXN0ZWQtdGVybmFyeSAqL1xudmFyIHdpbjtcblxuaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgLy8gd2luZG93IGlzIHVuZGVmaW5lZCBpbiBub2RlLmpzXG4gIHdpbiA9IHt9O1xufSBlbHNlIHtcbiAgd2luID0gd2luZG93O1xufVxuXG52YXIgUFJFRklYRURfVE9VQ0hfQUNUSU9OID0gcHJlZml4ZWQoVEVTVF9FTEVNRU5ULnN0eWxlLCAndG91Y2hBY3Rpb24nKTtcbnZhciBOQVRJVkVfVE9VQ0hfQUNUSU9OID0gUFJFRklYRURfVE9VQ0hfQUNUSU9OICE9PSB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRUb3VjaEFjdGlvblByb3BzKCkge1xuICBpZiAoIU5BVElWRV9UT1VDSF9BQ1RJT04pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdG91Y2hNYXAgPSB7fTtcbiAgdmFyIGNzc1N1cHBvcnRzID0gd2luLkNTUyAmJiB3aW4uQ1NTLnN1cHBvcnRzO1xuICBbJ2F1dG8nLCAnbWFuaXB1bGF0aW9uJywgJ3Bhbi15JywgJ3Bhbi14JywgJ3Bhbi14IHBhbi15JywgJ25vbmUnXS5mb3JFYWNoKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAvLyBJZiBjc3Muc3VwcG9ydHMgaXMgbm90IHN1cHBvcnRlZCBidXQgdGhlcmUgaXMgbmF0aXZlIHRvdWNoLWFjdGlvbiBhc3N1bWUgaXQgc3VwcG9ydHNcbiAgICAvLyBhbGwgdmFsdWVzLiBUaGlzIGlzIHRoZSBjYXNlIGZvciBJRSAxMCBhbmQgMTEuXG4gICAgcmV0dXJuIHRvdWNoTWFwW3ZhbF0gPSBjc3NTdXBwb3J0cyA/IHdpbi5DU1Muc3VwcG9ydHMoJ3RvdWNoLWFjdGlvbicsIHZhbCkgOiB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHRvdWNoTWFwO1xufVxuXG52YXIgVE9VQ0hfQUNUSU9OX0NPTVBVVEUgPSAnY29tcHV0ZSc7XG52YXIgVE9VQ0hfQUNUSU9OX0FVVE8gPSAnYXV0byc7XG52YXIgVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTiA9ICdtYW5pcHVsYXRpb24nOyAvLyBub3QgaW1wbGVtZW50ZWRcblxudmFyIFRPVUNIX0FDVElPTl9OT05FID0gJ25vbmUnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWCA9ICdwYW4teCc7XG52YXIgVE9VQ0hfQUNUSU9OX1BBTl9ZID0gJ3Bhbi15JztcbnZhciBUT1VDSF9BQ1RJT05fTUFQID0gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpO1xuXG52YXIgTU9CSUxFX1JFR0VYID0gL21vYmlsZXx0YWJsZXR8aXAoYWR8aG9uZXxvZCl8YW5kcm9pZC9pO1xudmFyIFNVUFBPUlRfVE9VQ0ggPSAnb250b3VjaHN0YXJ0JyBpbiB3aW47XG52YXIgU1VQUE9SVF9QT0lOVEVSX0VWRU5UUyA9IHByZWZpeGVkKHdpbiwgJ1BvaW50ZXJFdmVudCcpICE9PSB1bmRlZmluZWQ7XG52YXIgU1VQUE9SVF9PTkxZX1RPVUNIID0gU1VQUE9SVF9UT1VDSCAmJiBNT0JJTEVfUkVHRVgudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJTlBVVF9UWVBFX1RPVUNIID0gJ3RvdWNoJztcbnZhciBJTlBVVF9UWVBFX1BFTiA9ICdwZW4nO1xudmFyIElOUFVUX1RZUEVfTU9VU0UgPSAnbW91c2UnO1xudmFyIElOUFVUX1RZUEVfS0lORUNUID0gJ2tpbmVjdCc7XG52YXIgQ09NUFVURV9JTlRFUlZBTCA9IDI1O1xudmFyIElOUFVUX1NUQVJUID0gMTtcbnZhciBJTlBVVF9NT1ZFID0gMjtcbnZhciBJTlBVVF9FTkQgPSA0O1xudmFyIElOUFVUX0NBTkNFTCA9IDg7XG52YXIgRElSRUNUSU9OX05PTkUgPSAxO1xudmFyIERJUkVDVElPTl9MRUZUID0gMjtcbnZhciBESVJFQ1RJT05fUklHSFQgPSA0O1xudmFyIERJUkVDVElPTl9VUCA9IDg7XG52YXIgRElSRUNUSU9OX0RPV04gPSAxNjtcbnZhciBESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9MRUZUIHwgRElSRUNUSU9OX1JJR0hUO1xudmFyIERJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9VUCB8IERJUkVDVElPTl9ET1dOO1xudmFyIERJUkVDVElPTl9BTEwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTDtcbnZhciBQUk9QU19YWSA9IFsneCcsICd5J107XG52YXIgUFJPUFNfQ0xJRU5UX1hZID0gWydjbGllbnRYJywgJ2NsaWVudFknXTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogd2FsayBvYmplY3RzIGFuZCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICovXG5mdW5jdGlvbiBlYWNoKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgdmFyIGk7XG5cbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAob2JqLmZvckVhY2gpIHtcbiAgICBvYmouZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCk7XG4gIH0gZWxzZSBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IG9iai5sZW5ndGgpIHtcbiAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgICAgaSsrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICBvYmouaGFzT3duUHJvcGVydHkoaSkgJiYgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGxldCBhIGJvb2xlYW4gdmFsdWUgYWxzbyBiZSBhIGZ1bmN0aW9uIHRoYXQgbXVzdCByZXR1cm4gYSBib29sZWFuXG4gKiB0aGlzIGZpcnN0IGl0ZW0gaW4gYXJncyB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gdmFsXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnc11cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGJvb2xPckZuKHZhbCwgYXJncykge1xuICBpZiAodHlwZW9mIHZhbCA9PT0gVFlQRV9GVU5DVElPTikge1xuICAgIHJldHVybiB2YWwuYXBwbHkoYXJncyA/IGFyZ3NbMF0gfHwgdW5kZWZpbmVkIDogdW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB2YWw7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNtYWxsIGluZGV4T2Ygd3JhcHBlclxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBpblN0cihzdHIsIGZpbmQpIHtcbiAgcmV0dXJuIHN0ci5pbmRleE9mKGZpbmQpID4gLTE7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdoZW4gdGhlIHRvdWNoQWN0aW9ucyBhcmUgY29sbGVjdGVkIHRoZXkgYXJlIG5vdCBhIHZhbGlkIHZhbHVlLCBzbyB3ZSBuZWVkIHRvIGNsZWFuIHRoaW5ncyB1cC4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFjdGlvbnNcbiAqIEByZXR1cm5zIHsqfVxuICovXG5cbmZ1bmN0aW9uIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMpIHtcbiAgLy8gbm9uZVxuICBpZiAoaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX05PTkUpKSB7XG4gICAgcmV0dXJuIFRPVUNIX0FDVElPTl9OT05FO1xuICB9XG5cbiAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSk7IC8vIGlmIGJvdGggcGFuLXggYW5kIHBhbi15IGFyZSBzZXQgKGRpZmZlcmVudCByZWNvZ25pemVyc1xuICAvLyBmb3IgZGlmZmVyZW50IGRpcmVjdGlvbnMsIGUuZy4gaG9yaXpvbnRhbCBwYW4gYnV0IHZlcnRpY2FsIHN3aXBlPylcbiAgLy8gd2UgbmVlZCBub25lIChhcyBvdGhlcndpc2Ugd2l0aCBwYW4teCBwYW4teSBjb21iaW5lZCBub25lIG9mIHRoZXNlXG4gIC8vIHJlY29nbml6ZXJzIHdpbGwgd29yaywgc2luY2UgdGhlIGJyb3dzZXIgd291bGQgaGFuZGxlIGFsbCBwYW5uaW5nXG5cbiAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfSAvLyBwYW4teCBPUiBwYW4teVxuXG5cbiAgaWYgKGhhc1BhblggfHwgaGFzUGFuWSkge1xuICAgIHJldHVybiBoYXNQYW5YID8gVE9VQ0hfQUNUSU9OX1BBTl9YIDogVE9VQ0hfQUNUSU9OX1BBTl9ZO1xuICB9IC8vIG1hbmlwdWxhdGlvblxuXG5cbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04pKSB7XG4gICAgcmV0dXJuIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT047XG4gIH1cblxuICByZXR1cm4gVE9VQ0hfQUNUSU9OX0FVVE87XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIEFjdGlvblxuICogc2V0cyB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgb3IgdXNlcyB0aGUganMgYWx0ZXJuYXRpdmVcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG52YXIgVG91Y2hBY3Rpb24gPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBUb3VjaEFjdGlvbihtYW5hZ2VyLCB2YWx1ZSkge1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5zZXQodmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlIG9uIHRoZSBlbGVtZW50IG9yIGVuYWJsZSB0aGUgcG9seWZpbGxcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFRvdWNoQWN0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgLy8gZmluZCBvdXQgdGhlIHRvdWNoLWFjdGlvbiBieSB0aGUgZXZlbnQgaGFuZGxlcnNcbiAgICBpZiAodmFsdWUgPT09IFRPVUNIX0FDVElPTl9DT01QVVRFKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuY29tcHV0ZSgpO1xuICAgIH1cblxuICAgIGlmIChOQVRJVkVfVE9VQ0hfQUNUSU9OICYmIHRoaXMubWFuYWdlci5lbGVtZW50LnN0eWxlICYmIFRPVUNIX0FDVElPTl9NQVBbdmFsdWVdKSB7XG4gICAgICB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZVtQUkVGSVhFRF9UT1VDSF9BQ1RJT05dID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25zID0gdmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBqdXN0IHJlLXNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8udXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHRoaXMuc2V0KHRoaXMubWFuYWdlci5vcHRpb25zLnRvdWNoQWN0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNvbXB1dGUgdGhlIHZhbHVlIGZvciB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgYmFzZWQgb24gdGhlIHJlY29nbml6ZXIncyBzZXR0aW5nc1xuICAgKiBAcmV0dXJucyB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIF9wcm90by5jb21wdXRlID0gZnVuY3Rpb24gY29tcHV0ZSgpIHtcbiAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgIGVhY2godGhpcy5tYW5hZ2VyLnJlY29nbml6ZXJzLCBmdW5jdGlvbiAocmVjb2duaXplcikge1xuICAgICAgaWYgKGJvb2xPckZuKHJlY29nbml6ZXIub3B0aW9ucy5lbmFibGUsIFtyZWNvZ25pemVyXSkpIHtcbiAgICAgICAgYWN0aW9ucyA9IGFjdGlvbnMuY29uY2F0KHJlY29nbml6ZXIuZ2V0VG91Y2hBY3Rpb24oKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMuam9pbignICcpKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiBlYWNoIGlucHV0IGN5Y2xlIGFuZCBwcm92aWRlcyB0aGUgcHJldmVudGluZyBvZiB0aGUgYnJvd3NlciBiZWhhdmlvclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudERlZmF1bHRzID0gZnVuY3Rpb24gcHJldmVudERlZmF1bHRzKGlucHV0KSB7XG4gICAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0Lm9mZnNldERpcmVjdGlvbjsgLy8gaWYgdGhlIHRvdWNoIGFjdGlvbiBkaWQgcHJldmVudGVkIG9uY2UgdGhpcyBzZXNzaW9uXG5cbiAgICBpZiAodGhpcy5tYW5hZ2VyLnNlc3Npb24ucHJldmVudGVkKSB7XG4gICAgICBzcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgIHZhciBoYXNOb25lID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX05PTkUpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgICB2YXIgaGFzUGFuWSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWSkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9ZXTtcbiAgICB2YXIgaGFzUGFuWCA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWCkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9YXTtcblxuICAgIGlmIChoYXNOb25lKSB7XG4gICAgICAvLyBkbyBub3QgcHJldmVudCBkZWZhdWx0cyBpZiB0aGlzIGlzIGEgdGFwIGdlc3R1cmVcbiAgICAgIHZhciBpc1RhcFBvaW50ZXIgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IDE7XG4gICAgICB2YXIgaXNUYXBNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgMjtcbiAgICAgIHZhciBpc1RhcFRvdWNoVGltZSA9IGlucHV0LmRlbHRhVGltZSA8IDI1MDtcblxuICAgICAgaWYgKGlzVGFwUG9pbnRlciAmJiBpc1RhcE1vdmVtZW50ICYmIGlzVGFwVG91Y2hUaW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgICAvLyBgcGFuLXggcGFuLXlgIG1lYW5zIGJyb3dzZXIgaGFuZGxlcyBhbGwgc2Nyb2xsaW5nL3Bhbm5pbmcsIGRvIG5vdCBwcmV2ZW50XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGhhc05vbmUgfHwgaGFzUGFuWSAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8fCBoYXNQYW5YICYmIGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJldmVudFNyYyhzcmNFdmVudCk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FsbCBwcmV2ZW50RGVmYXVsdCB0byBwcmV2ZW50IHRoZSBicm93c2VyJ3MgZGVmYXVsdCBiZWhhdmlvciAoc2Nyb2xsaW5nIGluIG1vc3QgY2FzZXMpXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzcmNFdmVudFxuICAgKi9cblxuXG4gIF9wcm90by5wcmV2ZW50U3JjID0gZnVuY3Rpb24gcHJldmVudFNyYyhzcmNFdmVudCkge1xuICAgIHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCA9IHRydWU7XG4gICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfTtcblxuICByZXR1cm4gVG91Y2hBY3Rpb247XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBub2RlIGlzIGluIHRoZSBnaXZlbiBwYXJlbnRcbiAqIEBtZXRob2QgaGFzUGFyZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYXJlbnRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGhhc1BhcmVudChub2RlLCBwYXJlbnQpIHtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZSA9PT0gcGFyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIGNlbnRlciBvZiBhbGwgdGhlIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBwb2ludGVyc1xuICogQHJldHVybiB7T2JqZWN0fSBjZW50ZXIgY29udGFpbnMgYHhgIGFuZCBgeWAgcHJvcGVydGllc1xuICovXG5cbmZ1bmN0aW9uIGdldENlbnRlcihwb2ludGVycykge1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIG5vIG5lZWQgdG8gbG9vcCB3aGVuIG9ubHkgb25lIHRvdWNoXG5cbiAgaWYgKHBvaW50ZXJzTGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFgpLFxuICAgICAgeTogcm91bmQocG9pbnRlcnNbMF0uY2xpZW50WSlcbiAgICB9O1xuICB9XG5cbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IHBvaW50ZXJzTGVuZ3RoKSB7XG4gICAgeCArPSBwb2ludGVyc1tpXS5jbGllbnRYO1xuICAgIHkgKz0gcG9pbnRlcnNbaV0uY2xpZW50WTtcbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHggLyBwb2ludGVyc0xlbmd0aCksXG4gICAgeTogcm91bmQoeSAvIHBvaW50ZXJzTGVuZ3RoKVxuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjcmVhdGUgYSBzaW1wbGUgY2xvbmUgZnJvbSB0aGUgaW5wdXQgdXNlZCBmb3Igc3RvcmFnZSBvZiBmaXJzdElucHV0IGFuZCBmaXJzdE11bHRpcGxlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IGNsb25lZElucHV0RGF0YVxuICovXG5cbmZ1bmN0aW9uIHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KSB7XG4gIC8vIG1ha2UgYSBzaW1wbGUgY29weSBvZiB0aGUgcG9pbnRlcnMgYmVjYXVzZSB3ZSB3aWxsIGdldCBhIHJlZmVyZW5jZSBpZiB3ZSBkb24ndFxuICAvLyB3ZSBvbmx5IG5lZWQgY2xpZW50WFkgZm9yIHRoZSBjYWxjdWxhdGlvbnNcbiAgdmFyIHBvaW50ZXJzID0gW107XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgIHBvaW50ZXJzW2ldID0ge1xuICAgICAgY2xpZW50WDogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WCksXG4gICAgICBjbGllbnRZOiByb3VuZChpbnB1dC5wb2ludGVyc1tpXS5jbGllbnRZKVxuICAgIH07XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0aW1lU3RhbXA6IG5vdygpLFxuICAgIHBvaW50ZXJzOiBwb2ludGVycyxcbiAgICBjZW50ZXI6IGdldENlbnRlcihwb2ludGVycyksXG4gICAgZGVsdGFYOiBpbnB1dC5kZWx0YVgsXG4gICAgZGVsdGFZOiBpbnB1dC5kZWx0YVlcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhYnNvbHV0ZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMSB7eCwgeX1cbiAqIEBwYXJhbSB7T2JqZWN0fSBwMiB7eCwgeX1cbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gZGlzdGFuY2VcbiAqL1xuXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIGFuZ2xlIGJldHdlZW4gdHdvIGNvb3JkaW5hdGVzXG4gKiBAcGFyYW0ge09iamVjdH0gcDFcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMlxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICovXG5cbmZ1bmN0aW9uIGdldEFuZ2xlKHAxLCBwMiwgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHByb3BzID0gUFJPUFNfWFk7XG4gIH1cblxuICB2YXIgeCA9IHAyW3Byb3BzWzBdXSAtIHAxW3Byb3BzWzBdXTtcbiAgdmFyIHkgPSBwMltwcm9wc1sxXV0gLSBwMVtwcm9wc1sxXV07XG4gIHJldHVybiBNYXRoLmF0YW4yKHksIHgpICogMTgwIC8gTWF0aC5QSTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBkaXJlY3Rpb24gYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge051bWJlcn0gZGlyZWN0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlyZWN0aW9uKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHtcbiAgICByZXR1cm4gRElSRUNUSU9OX05PTkU7XG4gIH1cblxuICBpZiAoYWJzKHgpID49IGFicyh5KSkge1xuICAgIHJldHVybiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICB9XG5cbiAgcmV0dXJuIHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KSB7XG4gIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXI7IC8vIGxldCB7IG9mZnNldERlbHRhOm9mZnNldCA9IHt9LCBwcmV2RGVsdGEgPSB7fSwgcHJldklucHV0ID0ge30gfSA9IHNlc3Npb247XG4gIC8vIGpzY3MgdGhyb3dpbmcgZXJyb3Igb24gZGVmYWx1dCBkZXN0cnVjdHVyZWQgdmFsdWVzIGFuZCB3aXRob3V0IGRlZmF1bHRzIHRlc3RzIGZhaWxcblxuICB2YXIgb2Zmc2V0ID0gc2Vzc2lvbi5vZmZzZXREZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhIHx8IHt9O1xuICB2YXIgcHJldklucHV0ID0gc2Vzc2lvbi5wcmV2SW5wdXQgfHwge307XG5cbiAgaWYgKGlucHV0LmV2ZW50VHlwZSA9PT0gSU5QVVRfU1RBUlQgfHwgcHJldklucHV0LmV2ZW50VHlwZSA9PT0gSU5QVVRfRU5EKSB7XG4gICAgcHJldkRlbHRhID0gc2Vzc2lvbi5wcmV2RGVsdGEgPSB7XG4gICAgICB4OiBwcmV2SW5wdXQuZGVsdGFYIHx8IDAsXG4gICAgICB5OiBwcmV2SW5wdXQuZGVsdGFZIHx8IDBcbiAgICB9O1xuICAgIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgPSB7XG4gICAgICB4OiBjZW50ZXIueCxcbiAgICAgIHk6IGNlbnRlci55XG4gICAgfTtcbiAgfVxuXG4gIGlucHV0LmRlbHRhWCA9IHByZXZEZWx0YS54ICsgKGNlbnRlci54IC0gb2Zmc2V0LngpO1xuICBpbnB1dC5kZWx0YVkgPSBwcmV2RGVsdGEueSArIChjZW50ZXIueSAtIG9mZnNldC55KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSB2ZWxvY2l0eSBiZXR3ZWVuIHR3byBwb2ludHMuIHVuaXQgaXMgaW4gcHggcGVyIG1zLlxuICogQHBhcmFtIHtOdW1iZXJ9IGRlbHRhVGltZVxuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtPYmplY3R9IHZlbG9jaXR5IGB4YCBhbmQgYHlgXG4gKi9cbmZ1bmN0aW9uIGdldFZlbG9jaXR5KGRlbHRhVGltZSwgeCwgeSkge1xuICByZXR1cm4ge1xuICAgIHg6IHggLyBkZWx0YVRpbWUgfHwgMCxcbiAgICB5OiB5IC8gZGVsdGFUaW1lIHx8IDBcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBzY2FsZSBmYWN0b3IgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAqIG5vIHNjYWxlIGlzIDEsIGFuZCBnb2VzIGRvd24gdG8gMCB3aGVuIHBpbmNoZWQgdG9nZXRoZXIsIGFuZCBiaWdnZXIgd2hlbiBwaW5jaGVkIG91dFxuICogQHBhcmFtIHtBcnJheX0gc3RhcnQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IGVuZCBhcnJheSBvZiBwb2ludGVyc1xuICogQHJldHVybiB7TnVtYmVyfSBzY2FsZVxuICovXG5cbmZ1bmN0aW9uIGdldFNjYWxlKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGdldERpc3RhbmNlKGVuZFswXSwgZW5kWzFdLCBQUk9QU19DTElFTlRfWFkpIC8gZ2V0RGlzdGFuY2Uoc3RhcnRbMF0sIHN0YXJ0WzFdLCBQUk9QU19DTElFTlRfWFkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjYWxjdWxhdGUgdGhlIHJvdGF0aW9uIGRlZ3JlZXMgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gcm90YXRpb25cbiAqL1xuXG5mdW5jdGlvbiBnZXRSb3RhdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXRBbmdsZShlbmRbMV0sIGVuZFswXSwgUFJPUFNfQ0xJRU5UX1hZKSArIGdldEFuZ2xlKHN0YXJ0WzFdLCBzdGFydFswXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdmVsb2NpdHkgaXMgY2FsY3VsYXRlZCBldmVyeSB4IG1zXG4gKiBAcGFyYW0ge09iamVjdH0gc2Vzc2lvblxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cblxuZnVuY3Rpb24gY29tcHV0ZUludGVydmFsSW5wdXREYXRhKHNlc3Npb24sIGlucHV0KSB7XG4gIHZhciBsYXN0ID0gc2Vzc2lvbi5sYXN0SW50ZXJ2YWwgfHwgaW5wdXQ7XG4gIHZhciBkZWx0YVRpbWUgPSBpbnB1dC50aW1lU3RhbXAgLSBsYXN0LnRpbWVTdGFtcDtcbiAgdmFyIHZlbG9jaXR5O1xuICB2YXIgdmVsb2NpdHlYO1xuICB2YXIgdmVsb2NpdHlZO1xuICB2YXIgZGlyZWN0aW9uO1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0NBTkNFTCAmJiAoZGVsdGFUaW1lID4gQ09NUFVURV9JTlRFUlZBTCB8fCBsYXN0LnZlbG9jaXR5ID09PSB1bmRlZmluZWQpKSB7XG4gICAgdmFyIGRlbHRhWCA9IGlucHV0LmRlbHRhWCAtIGxhc3QuZGVsdGFYO1xuICAgIHZhciBkZWx0YVkgPSBpbnB1dC5kZWx0YVkgLSBsYXN0LmRlbHRhWTtcbiAgICB2YXIgdiA9IGdldFZlbG9jaXR5KGRlbHRhVGltZSwgZGVsdGFYLCBkZWx0YVkpO1xuICAgIHZlbG9jaXR5WCA9IHYueDtcbiAgICB2ZWxvY2l0eVkgPSB2Lnk7XG4gICAgdmVsb2NpdHkgPSBhYnModi54KSA+IGFicyh2LnkpID8gdi54IDogdi55O1xuICAgIGRpcmVjdGlvbiA9IGdldERpcmVjdGlvbihkZWx0YVgsIGRlbHRhWSk7XG4gICAgc2Vzc2lvbi5sYXN0SW50ZXJ2YWwgPSBpbnB1dDtcbiAgfSBlbHNlIHtcbiAgICAvLyB1c2UgbGF0ZXN0IHZlbG9jaXR5IGluZm8gaWYgaXQgZG9lc24ndCBvdmVydGFrZSBhIG1pbmltdW0gcGVyaW9kXG4gICAgdmVsb2NpdHkgPSBsYXN0LnZlbG9jaXR5O1xuICAgIHZlbG9jaXR5WCA9IGxhc3QudmVsb2NpdHlYO1xuICAgIHZlbG9jaXR5WSA9IGxhc3QudmVsb2NpdHlZO1xuICAgIGRpcmVjdGlvbiA9IGxhc3QuZGlyZWN0aW9uO1xuICB9XG5cbiAgaW5wdXQudmVsb2NpdHkgPSB2ZWxvY2l0eTtcbiAgaW5wdXQudmVsb2NpdHlYID0gdmVsb2NpdHlYO1xuICBpbnB1dC52ZWxvY2l0eVkgPSB2ZWxvY2l0eVk7XG4gIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbn1cblxuLyoqXG4qIEBwcml2YXRlXG4gKiBleHRlbmQgdGhlIGRhdGEgd2l0aCBzb21lIHVzYWJsZSBwcm9wZXJ0aWVzIGxpa2Ugc2NhbGUsIHJvdGF0ZSwgdmVsb2NpdHkgZXRjXG4gKiBAcGFyYW0ge09iamVjdH0gbWFuYWdlclxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cblxuZnVuY3Rpb24gY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCkge1xuICB2YXIgc2Vzc2lvbiA9IG1hbmFnZXIuc2Vzc2lvbjtcbiAgdmFyIHBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnM7XG4gIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDsgLy8gc3RvcmUgdGhlIGZpcnN0IGlucHV0IHRvIGNhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYW5kIGRpcmVjdGlvblxuXG4gIGlmICghc2Vzc2lvbi5maXJzdElucHV0KSB7XG4gICAgc2Vzc2lvbi5maXJzdElucHV0ID0gc2ltcGxlQ2xvbmVJbnB1dERhdGEoaW5wdXQpO1xuICB9IC8vIHRvIGNvbXB1dGUgc2NhbGUgYW5kIHJvdGF0aW9uIHdlIG5lZWQgdG8gc3RvcmUgdGhlIG11bHRpcGxlIHRvdWNoZXNcblxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA+IDEgJiYgIXNlc3Npb24uZmlyc3RNdWx0aXBsZSkge1xuICAgIHNlc3Npb24uZmlyc3RNdWx0aXBsZSA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSBlbHNlIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHNlc3Npb24uZmlyc3RNdWx0aXBsZSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGZpcnN0SW5wdXQgPSBzZXNzaW9uLmZpcnN0SW5wdXQsXG4gICAgICBmaXJzdE11bHRpcGxlID0gc2Vzc2lvbi5maXJzdE11bHRpcGxlO1xuICB2YXIgb2Zmc2V0Q2VudGVyID0gZmlyc3RNdWx0aXBsZSA/IGZpcnN0TXVsdGlwbGUuY2VudGVyIDogZmlyc3RJbnB1dC5jZW50ZXI7XG4gIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXIgPSBnZXRDZW50ZXIocG9pbnRlcnMpO1xuICBpbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgaW5wdXQuZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gZmlyc3RJbnB1dC50aW1lU3RhbXA7XG4gIGlucHV0LmFuZ2xlID0gZ2V0QW5nbGUob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICBpbnB1dC5kaXN0YW5jZSA9IGdldERpc3RhbmNlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgY29tcHV0ZURlbHRhWFkoc2Vzc2lvbiwgaW5wdXQpO1xuICBpbnB1dC5vZmZzZXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICB2YXIgb3ZlcmFsbFZlbG9jaXR5ID0gZ2V0VmVsb2NpdHkoaW5wdXQuZGVsdGFUaW1lLCBpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVggPSBvdmVyYWxsVmVsb2NpdHkueDtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WSA9IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHkgPSBhYnMob3ZlcmFsbFZlbG9jaXR5LngpID4gYWJzKG92ZXJhbGxWZWxvY2l0eS55KSA/IG92ZXJhbGxWZWxvY2l0eS54IDogb3ZlcmFsbFZlbG9jaXR5Lnk7XG4gIGlucHV0LnNjYWxlID0gZmlyc3RNdWx0aXBsZSA/IGdldFNjYWxlKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDE7XG4gIGlucHV0LnJvdGF0aW9uID0gZmlyc3RNdWx0aXBsZSA/IGdldFJvdGF0aW9uKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDA7XG4gIGlucHV0Lm1heFBvaW50ZXJzID0gIXNlc3Npb24ucHJldklucHV0ID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogaW5wdXQucG9pbnRlcnMubGVuZ3RoID4gc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnMgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycztcbiAgY29tcHV0ZUludGVydmFsSW5wdXREYXRhKHNlc3Npb24sIGlucHV0KTsgLy8gZmluZCB0aGUgY29ycmVjdCB0YXJnZXRcblxuICB2YXIgdGFyZ2V0ID0gbWFuYWdlci5lbGVtZW50O1xuICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgdmFyIHNyY0V2ZW50VGFyZ2V0O1xuXG4gIGlmIChzcmNFdmVudC5jb21wb3NlZFBhdGgpIHtcbiAgICBzcmNFdmVudFRhcmdldCA9IHNyY0V2ZW50LmNvbXBvc2VkUGF0aCgpWzBdO1xuICB9IGVsc2UgaWYgKHNyY0V2ZW50LnBhdGgpIHtcbiAgICBzcmNFdmVudFRhcmdldCA9IHNyY0V2ZW50LnBhdGhbMF07XG4gIH0gZWxzZSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC50YXJnZXQ7XG4gIH1cblxuICBpZiAoaGFzUGFyZW50KHNyY0V2ZW50VGFyZ2V0LCB0YXJnZXQpKSB7XG4gICAgdGFyZ2V0ID0gc3JjRXZlbnRUYXJnZXQ7XG4gIH1cblxuICBpbnB1dC50YXJnZXQgPSB0YXJnZXQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGhhbmRsZSBpbnB1dCBldmVudHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50VHlwZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cblxuZnVuY3Rpb24gaW5wdXRIYW5kbGVyKG1hbmFnZXIsIGV2ZW50VHlwZSwgaW5wdXQpIHtcbiAgdmFyIHBvaW50ZXJzTGVuID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoO1xuICB2YXIgY2hhbmdlZFBvaW50ZXJzTGVuID0gaW5wdXQuY2hhbmdlZFBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGlzRmlyc3QgPSBldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMDtcbiAgdmFyIGlzRmluYWwgPSBldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiBwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMDtcbiAgaW5wdXQuaXNGaXJzdCA9ICEhaXNGaXJzdDtcbiAgaW5wdXQuaXNGaW5hbCA9ICEhaXNGaW5hbDtcblxuICBpZiAoaXNGaXJzdCkge1xuICAgIG1hbmFnZXIuc2Vzc2lvbiA9IHt9O1xuICB9IC8vIHNvdXJjZSBldmVudCBpcyB0aGUgbm9ybWFsaXplZCB2YWx1ZSBvZiB0aGUgZG9tRXZlbnRzXG4gIC8vIGxpa2UgJ3RvdWNoc3RhcnQsIG1vdXNldXAsIHBvaW50ZXJkb3duJ1xuXG5cbiAgaW5wdXQuZXZlbnRUeXBlID0gZXZlbnRUeXBlOyAvLyBjb21wdXRlIHNjYWxlLCByb3RhdGlvbiBldGNcblxuICBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KTsgLy8gZW1pdCBzZWNyZXQgZXZlbnRcblxuICBtYW5hZ2VyLmVtaXQoJ2hhbW1lci5pbnB1dCcsIGlucHV0KTtcbiAgbWFuYWdlci5yZWNvZ25pemUoaW5wdXQpO1xuICBtYW5hZ2VyLnNlc3Npb24ucHJldklucHV0ID0gaW5wdXQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNwbGl0IHN0cmluZyBvbiB3aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7QXJyYXl9IHdvcmRzXG4gKi9cbmZ1bmN0aW9uIHNwbGl0U3RyKHN0cikge1xuICByZXR1cm4gc3RyLnRyaW0oKS5zcGxpdCgvXFxzKy9nKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogYWRkRXZlbnRMaXN0ZW5lciB3aXRoIG11bHRpcGxlIGV2ZW50cyBhdCBvbmNlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICovXG5cbmZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXJzKHRhcmdldCwgdHlwZXMsIGhhbmRsZXIpIHtcbiAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogcmVtb3ZlRXZlbnRMaXN0ZW5lciB3aXRoIG11bHRpcGxlIGV2ZW50cyBhdCBvbmNlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICovXG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRhcmdldCwgdHlwZXMsIGhhbmRsZXIpIHtcbiAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSB3aW5kb3cgb2JqZWN0IG9mIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtEb2N1bWVudFZpZXd8V2luZG93fVxuICovXG5mdW5jdGlvbiBnZXRXaW5kb3dGb3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGRvYyA9IGVsZW1lbnQub3duZXJEb2N1bWVudCB8fCBlbGVtZW50O1xuICByZXR1cm4gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3cgfHwgd2luZG93O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjcmVhdGUgbmV3IGlucHV0IHR5cGUgbWFuYWdlclxuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0lucHV0fVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gSW5wdXQobWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5lbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbWFuYWdlci5vcHRpb25zLmlucHV0VGFyZ2V0OyAvLyBzbWFsbGVyIHdyYXBwZXIgYXJvdW5kIHRoZSBoYW5kbGVyLCBmb3IgdGhlIHNjb3BlIGFuZCB0aGUgZW5hYmxlZCBzdGF0ZSBvZiB0aGUgbWFuYWdlcixcbiAgICAvLyBzbyB3aGVuIGRpc2FibGVkIHRoZSBpbnB1dCBldmVudHMgYXJlIGNvbXBsZXRlbHkgYnlwYXNzZWQuXG5cbiAgICB0aGlzLmRvbUhhbmRsZXIgPSBmdW5jdGlvbiAoZXYpIHtcbiAgICAgIGlmIChib29sT3JGbihtYW5hZ2VyLm9wdGlvbnMuZW5hYmxlLCBbbWFuYWdlcl0pKSB7XG4gICAgICAgIHNlbGYuaGFuZGxlcihldik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuaW5pdCgpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzaG91bGQgaGFuZGxlIHRoZSBpbnB1dEV2ZW50IGRhdGEgYW5kIHRyaWdnZXIgdGhlIGNhbGxiYWNrXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoKSB7fTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5pbml0ID0gZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB0aGlzLmV2RWwgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiBhZGRFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIGFkZEV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHVuYmluZCB0aGUgZXZlbnRzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZXZFbCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLmVsZW1lbnQsIHRoaXMuZXZFbCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2VGFyZ2V0ICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKHRoaXMudGFyZ2V0LCB0aGlzLmV2VGFyZ2V0LCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZXaW4gJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICB9O1xuXG4gIHJldHVybiBJbnB1dDtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZmluZCBpZiBhIGFycmF5IGNvbnRhaW5zIHRoZSBvYmplY3QgdXNpbmcgaW5kZXhPZiBvciBhIHNpbXBsZSBwb2x5RmlsbFxuICogQHBhcmFtIHtBcnJheX0gc3JjXG4gKiBAcGFyYW0ge1N0cmluZ30gZmluZFxuICogQHBhcmFtIHtTdHJpbmd9IFtmaW5kQnlLZXldXG4gKiBAcmV0dXJuIHtCb29sZWFufE51bWJlcn0gZmFsc2Ugd2hlbiBub3QgZm91bmQsIG9yIHRoZSBpbmRleFxuICovXG5mdW5jdGlvbiBpbkFycmF5KHNyYywgZmluZCwgZmluZEJ5S2V5KSB7XG4gIGlmIChzcmMuaW5kZXhPZiAmJiAhZmluZEJ5S2V5KSB7XG4gICAgcmV0dXJuIHNyYy5pbmRleE9mKGZpbmQpO1xuICB9IGVsc2Uge1xuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgICAgaWYgKGZpbmRCeUtleSAmJiBzcmNbaV1bZmluZEJ5S2V5XSA9PSBmaW5kIHx8ICFmaW5kQnlLZXkgJiYgc3JjW2ldID09PSBmaW5kKSB7XG4gICAgICAgIC8vIGRvIG5vdCB1c2UgPT09IGhlcmUsIHRlc3QgZmFpbHNcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cbn1cblxudmFyIFBPSU5URVJfSU5QVVRfTUFQID0ge1xuICBwb2ludGVyZG93bjogSU5QVVRfU1RBUlQsXG4gIHBvaW50ZXJtb3ZlOiBJTlBVVF9NT1ZFLFxuICBwb2ludGVydXA6IElOUFVUX0VORCxcbiAgcG9pbnRlcmNhbmNlbDogSU5QVVRfQ0FOQ0VMLFxuICBwb2ludGVyb3V0OiBJTlBVVF9DQU5DRUxcbn07IC8vIGluIElFMTAgdGhlIHBvaW50ZXIgdHlwZXMgaXMgZGVmaW5lZCBhcyBhbiBlbnVtXG5cbnZhciBJRTEwX1BPSU5URVJfVFlQRV9FTlVNID0ge1xuICAyOiBJTlBVVF9UWVBFX1RPVUNILFxuICAzOiBJTlBVVF9UWVBFX1BFTixcbiAgNDogSU5QVVRfVFlQRV9NT1VTRSxcbiAgNTogSU5QVVRfVFlQRV9LSU5FQ1QgLy8gc2VlIGh0dHBzOi8vdHdpdHRlci5jb20vamFjb2Jyb3NzaS9zdGF0dXMvNDgwNTk2NDM4NDg5ODkwODE2XG5cbn07XG52YXIgUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyA9ICdwb2ludGVyZG93bic7XG52YXIgUE9JTlRFUl9XSU5ET1dfRVZFTlRTID0gJ3BvaW50ZXJtb3ZlIHBvaW50ZXJ1cCBwb2ludGVyY2FuY2VsJzsgLy8gSUUxMCBoYXMgcHJlZml4ZWQgc3VwcG9ydCwgYW5kIGNhc2Utc2Vuc2l0aXZlXG5cbmlmICh3aW4uTVNQb2ludGVyRXZlbnQgJiYgIXdpbi5Qb2ludGVyRXZlbnQpIHtcbiAgUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyA9ICdNU1BvaW50ZXJEb3duJztcbiAgUE9JTlRFUl9XSU5ET1dfRVZFTlRTID0gJ01TUG9pbnRlck1vdmUgTVNQb2ludGVyVXAgTVNQb2ludGVyQ2FuY2VsJztcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqIFBvaW50ZXIgZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxuXG52YXIgUG9pbnRlckV2ZW50SW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShQb2ludGVyRXZlbnRJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBQb2ludGVyRXZlbnRJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG4gICAgcHJvdG8uZXZFbCA9IFBPSU5URVJfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBQT0lOVEVSX1dJTkRPV19FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0b3JlID0gX3RoaXMubWFuYWdlci5zZXNzaW9uLnBvaW50ZXJFdmVudHMgPSBbXTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhbmRsZSBtb3VzZSBldmVudHNcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFBvaW50ZXJFdmVudElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgc3RvcmUgPSB0aGlzLnN0b3JlO1xuICAgIHZhciByZW1vdmVQb2ludGVyID0gZmFsc2U7XG4gICAgdmFyIGV2ZW50VHlwZU5vcm1hbGl6ZWQgPSBldi50eXBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnbXMnLCAnJyk7XG4gICAgdmFyIGV2ZW50VHlwZSA9IFBPSU5URVJfSU5QVVRfTUFQW2V2ZW50VHlwZU5vcm1hbGl6ZWRdO1xuICAgIHZhciBwb2ludGVyVHlwZSA9IElFMTBfUE9JTlRFUl9UWVBFX0VOVU1bZXYucG9pbnRlclR5cGVdIHx8IGV2LnBvaW50ZXJUeXBlO1xuICAgIHZhciBpc1RvdWNoID0gcG9pbnRlclR5cGUgPT09IElOUFVUX1RZUEVfVE9VQ0g7IC8vIGdldCBpbmRleCBvZiB0aGUgZXZlbnQgaW4gdGhlIHN0b3JlXG5cbiAgICB2YXIgc3RvcmVJbmRleCA9IGluQXJyYXkoc3RvcmUsIGV2LnBvaW50ZXJJZCwgJ3BvaW50ZXJJZCcpOyAvLyBzdGFydCBhbmQgbW91c2UgbXVzdCBiZSBkb3duXG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgKGV2LmJ1dHRvbiA9PT0gMCB8fCBpc1RvdWNoKSkge1xuICAgICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICAgIHN0b3JlLnB1c2goZXYpO1xuICAgICAgICBzdG9yZUluZGV4ID0gc3RvcmUubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICByZW1vdmVQb2ludGVyID0gdHJ1ZTtcbiAgICB9IC8vIGl0IG5vdCBmb3VuZCwgc28gdGhlIHBvaW50ZXIgaGFzbid0IGJlZW4gZG93biAoc28gaXQncyBwcm9iYWJseSBhIGhvdmVyKVxuXG5cbiAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHVwZGF0ZSB0aGUgZXZlbnQgaW4gdGhlIHN0b3JlXG5cblxuICAgIHN0b3JlW3N0b3JlSW5kZXhdID0gZXY7XG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIGV2ZW50VHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHN0b3JlLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IHBvaW50ZXJUeXBlLFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG5cbiAgICBpZiAocmVtb3ZlUG9pbnRlcikge1xuICAgICAgLy8gcmVtb3ZlIGZyb20gdGhlIHN0b3JlXG4gICAgICBzdG9yZS5zcGxpY2Uoc3RvcmVJbmRleCwgMSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBQb2ludGVyRXZlbnRJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBjb252ZXJ0IGFycmF5LWxpa2Ugb2JqZWN0cyB0byByZWFsIGFycmF5c1xuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiB0b0FycmF5KG9iaikge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwob2JqLCAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdW5pcXVlIGFycmF5IHdpdGggb2JqZWN0cyBiYXNlZCBvbiBhIGtleSAobGlrZSAnaWQnKSBvciBqdXN0IGJ5IHRoZSBhcnJheSdzIHZhbHVlXG4gKiBAcGFyYW0ge0FycmF5fSBzcmMgW3tpZDoxfSx7aWQ6Mn0se2lkOjF9XVxuICogQHBhcmFtIHtTdHJpbmd9IFtrZXldXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtzb3J0PUZhbHNlXVxuICogQHJldHVybnMge0FycmF5fSBbe2lkOjF9LHtpZDoyfV1cbiAqL1xuXG5mdW5jdGlvbiB1bmlxdWVBcnJheShzcmMsIGtleSwgc29ydCkge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICB2YXIgdmFsdWVzID0gW107XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICB2YXIgdmFsID0ga2V5ID8gc3JjW2ldW2tleV0gOiBzcmNbaV07XG5cbiAgICBpZiAoaW5BcnJheSh2YWx1ZXMsIHZhbCkgPCAwKSB7XG4gICAgICByZXN1bHRzLnB1c2goc3JjW2ldKTtcbiAgICB9XG5cbiAgICB2YWx1ZXNbaV0gPSB2YWw7XG4gICAgaSsrO1xuICB9XG5cbiAgaWYgKHNvcnQpIHtcbiAgICBpZiAoIWtleSkge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhW2tleV0gPiBiW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxudmFyIFRPVUNIX0lOUFVUX01BUCA9IHtcbiAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gIHRvdWNobW92ZTogSU5QVVRfTU9WRSxcbiAgdG91Y2hlbmQ6IElOUFVUX0VORCxcbiAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcbnZhciBUT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIE11bHRpLXVzZXIgdG91Y2ggZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIFRvdWNoSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShUb3VjaElucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIFRvdWNoSW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgVG91Y2hJbnB1dC5wcm90b3R5cGUuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy50YXJnZXRJZHMgPSB7fTsgLy8gdGhpcy5ldlRhcmdldCA9IFRPVUNIX1RBUkdFVF9FVkVOVFM7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVG91Y2hJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHR5cGUgPSBUT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07XG4gICAgdmFyIHRvdWNoZXMgPSBnZXRUb3VjaGVzLmNhbGwodGhpcywgZXYsIHR5cGUpO1xuXG4gICAgaWYgKCF0b3VjaGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIHR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiB0b3VjaGVzWzFdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gVG91Y2hJbnB1dDtcbn0oSW5wdXQpO1xuXG5mdW5jdGlvbiBnZXRUb3VjaGVzKGV2LCB0eXBlKSB7XG4gIHZhciBhbGxUb3VjaGVzID0gdG9BcnJheShldi50b3VjaGVzKTtcbiAgdmFyIHRhcmdldElkcyA9IHRoaXMudGFyZ2V0SWRzOyAvLyB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIHRvdWNoLCB0aGUgcHJvY2VzcyBjYW4gYmUgc2ltcGxpZmllZFxuXG4gIGlmICh0eXBlICYgKElOUFVUX1NUQVJUIHwgSU5QVVRfTU9WRSkgJiYgYWxsVG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICB0YXJnZXRJZHNbYWxsVG91Y2hlc1swXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgcmV0dXJuIFthbGxUb3VjaGVzLCBhbGxUb3VjaGVzXTtcbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgdGFyZ2V0VG91Y2hlcztcbiAgdmFyIGNoYW5nZWRUb3VjaGVzID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkVGFyZ2V0VG91Y2hlcyA9IFtdO1xuICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7IC8vIGdldCB0YXJnZXQgdG91Y2hlcyBmcm9tIHRvdWNoZXNcblxuICB0YXJnZXRUb3VjaGVzID0gYWxsVG91Y2hlcy5maWx0ZXIoZnVuY3Rpb24gKHRvdWNoKSB7XG4gICAgcmV0dXJuIGhhc1BhcmVudCh0b3VjaC50YXJnZXQsIHRhcmdldCk7XG4gIH0pOyAvLyBjb2xsZWN0IHRvdWNoZXNcblxuICBpZiAodHlwZSA9PT0gSU5QVVRfU1RBUlQpIHtcbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgdGFyZ2V0VG91Y2hlcy5sZW5ndGgpIHtcbiAgICAgIHRhcmdldElkc1t0YXJnZXRUb3VjaGVzW2ldLmlkZW50aWZpZXJdID0gdHJ1ZTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gLy8gZmlsdGVyIGNoYW5nZWQgdG91Y2hlcyB0byBvbmx5IGNvbnRhaW4gdG91Y2hlcyB0aGF0IGV4aXN0IGluIHRoZSBjb2xsZWN0ZWQgdGFyZ2V0IGlkc1xuXG5cbiAgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBjaGFuZ2VkVG91Y2hlcy5sZW5ndGgpIHtcbiAgICBpZiAodGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdKSB7XG4gICAgICBjaGFuZ2VkVGFyZ2V0VG91Y2hlcy5wdXNoKGNoYW5nZWRUb3VjaGVzW2ldKTtcbiAgICB9IC8vIGNsZWFudXAgcmVtb3ZlZCB0b3VjaGVzXG5cblxuICAgIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXRJZHNbY2hhbmdlZFRvdWNoZXNbaV0uaWRlbnRpZmllcl07XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkVGFyZ2V0VG91Y2hlcy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gWy8vIG1lcmdlIHRhcmdldFRvdWNoZXMgd2l0aCBjaGFuZ2VkVGFyZ2V0VG91Y2hlcyBzbyBpdCBjb250YWlucyBBTEwgdG91Y2hlcywgaW5jbHVkaW5nICdlbmQnIGFuZCAnY2FuY2VsJ1xuICB1bmlxdWVBcnJheSh0YXJnZXRUb3VjaGVzLmNvbmNhdChjaGFuZ2VkVGFyZ2V0VG91Y2hlcyksICdpZGVudGlmaWVyJywgdHJ1ZSksIGNoYW5nZWRUYXJnZXRUb3VjaGVzXTtcbn1cblxudmFyIE1PVVNFX0lOUFVUX01BUCA9IHtcbiAgbW91c2Vkb3duOiBJTlBVVF9TVEFSVCxcbiAgbW91c2Vtb3ZlOiBJTlBVVF9NT1ZFLFxuICBtb3VzZXVwOiBJTlBVVF9FTkRcbn07XG52YXIgTU9VU0VfRUxFTUVOVF9FVkVOVFMgPSAnbW91c2Vkb3duJztcbnZhciBNT1VTRV9XSU5ET1dfRVZFTlRTID0gJ21vdXNlbW92ZSBtb3VzZXVwJztcbi8qKlxuICogQHByaXZhdGVcbiAqIE1vdXNlIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBNb3VzZUlucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IE1vdXNlSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBNT1VTRV9FTEVNRU5UX0VWRU5UUztcbiAgICBwcm90by5ldldpbiA9IE1PVVNFX1dJTkRPV19FVkVOVFM7XG4gICAgX3RoaXMgPSBfSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIF90aGlzLnByZXNzZWQgPSBmYWxzZTsgLy8gbW91c2Vkb3duIHN0YXRlXG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhbmRsZSBtb3VzZSBldmVudHNcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciBldmVudFR5cGUgPSBNT1VTRV9JTlBVVF9NQVBbZXYudHlwZV07IC8vIG9uIHN0YXJ0IHdlIHdhbnQgdG8gaGF2ZSB0aGUgbGVmdCBtb3VzZSBidXR0b24gZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIGV2LmJ1dHRvbiA9PT0gMCkge1xuICAgICAgdGhpcy5wcmVzc2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfTU9WRSAmJiBldi53aGljaCAhPT0gMSkge1xuICAgICAgZXZlbnRUeXBlID0gSU5QVVRfRU5EO1xuICAgIH0gLy8gbW91c2UgbXVzdCBiZSBkb3duXG5cblxuICAgIGlmICghdGhpcy5wcmVzc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIGV2ZW50VHlwZSwge1xuICAgICAgcG9pbnRlcnM6IFtldl0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IFtldl0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9NT1VTRSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNb3VzZUlucHV0O1xufShJbnB1dCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIENvbWJpbmVkIHRvdWNoIGFuZCBtb3VzZSBpbnB1dFxuICpcbiAqIFRvdWNoIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGVuIG1vdXNlLCBhbmQgd2hpbGUgdG91Y2hpbmcgbm8gbW91c2UgZXZlbnRzIGFyZSBhbGxvd2VkLlxuICogVGhpcyBiZWNhdXNlIHRvdWNoIGRldmljZXMgYWxzbyBlbWl0IG1vdXNlIGV2ZW50cyB3aGlsZSBkb2luZyBhIHRvdWNoLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgREVEVVBfVElNRU9VVCA9IDI1MDA7XG52YXIgREVEVVBfRElTVEFOQ0UgPSAyNTtcblxuZnVuY3Rpb24gc2V0TGFzdFRvdWNoKGV2ZW50RGF0YSkge1xuICB2YXIgX2V2ZW50RGF0YSRjaGFuZ2VkUG9pID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVycyxcbiAgICAgIHRvdWNoID0gX2V2ZW50RGF0YSRjaGFuZ2VkUG9pWzBdO1xuXG4gIGlmICh0b3VjaC5pZGVudGlmaWVyID09PSB0aGlzLnByaW1hcnlUb3VjaCkge1xuICAgIHZhciBsYXN0VG91Y2ggPSB7XG4gICAgICB4OiB0b3VjaC5jbGllbnRYLFxuICAgICAgeTogdG91Y2guY2xpZW50WVxuICAgIH07XG4gICAgdmFyIGx0cyA9IHRoaXMubGFzdFRvdWNoZXM7XG4gICAgdGhpcy5sYXN0VG91Y2hlcy5wdXNoKGxhc3RUb3VjaCk7XG5cbiAgICB2YXIgcmVtb3ZlTGFzdFRvdWNoID0gZnVuY3Rpb24gcmVtb3ZlTGFzdFRvdWNoKCkge1xuICAgICAgdmFyIGkgPSBsdHMuaW5kZXhPZihsYXN0VG91Y2gpO1xuXG4gICAgICBpZiAoaSA+IC0xKSB7XG4gICAgICAgIGx0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNldFRpbWVvdXQocmVtb3ZlTGFzdFRvdWNoLCBERURVUF9USU1FT1VUKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmRUb3VjaGVzKGV2ZW50VHlwZSwgZXZlbnREYXRhKSB7XG4gIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgIHRoaXMucHJpbWFyeVRvdWNoID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVyc1swXS5pZGVudGlmaWVyO1xuICAgIHNldExhc3RUb3VjaC5jYWxsKHRoaXMsIGV2ZW50RGF0YSk7XG4gIH0gZWxzZSBpZiAoZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3ludGhldGljRXZlbnQoZXZlbnREYXRhKSB7XG4gIHZhciB4ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFg7XG4gIHZhciB5ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxhc3RUb3VjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHQgPSB0aGlzLmxhc3RUb3VjaGVzW2ldO1xuICAgIHZhciBkeCA9IE1hdGguYWJzKHggLSB0LngpO1xuICAgIHZhciBkeSA9IE1hdGguYWJzKHkgLSB0LnkpO1xuXG4gICAgaWYgKGR4IDw9IERFRFVQX0RJU1RBTkNFICYmIGR5IDw9IERFRFVQX0RJU1RBTkNFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBUb3VjaE1vdXNlSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICB2YXIgVG91Y2hNb3VzZUlucHV0ID1cbiAgLyojX19QVVJFX18qL1xuICBmdW5jdGlvbiAoX0lucHV0KSB7XG4gICAgX2luaGVyaXRzTG9vc2UoVG91Y2hNb3VzZUlucHV0LCBfSW5wdXQpO1xuXG4gICAgZnVuY3Rpb24gVG91Y2hNb3VzZUlucHV0KF9tYW5hZ2VyLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9JbnB1dC5jYWxsKHRoaXMsIF9tYW5hZ2VyLCBjYWxsYmFjaykgfHwgdGhpcztcblxuICAgICAgX3RoaXMuaGFuZGxlciA9IGZ1bmN0aW9uIChtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpIHtcbiAgICAgICAgdmFyIGlzVG91Y2ggPSBpbnB1dERhdGEucG9pbnRlclR5cGUgPT09IElOUFVUX1RZUEVfVE9VQ0g7XG4gICAgICAgIHZhciBpc01vdXNlID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX01PVVNFO1xuXG4gICAgICAgIGlmIChpc01vdXNlICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcy5maXJlc1RvdWNoRXZlbnRzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIHdoZW4gd2UncmUgaW4gYSB0b3VjaCBldmVudCwgcmVjb3JkIHRvdWNoZXMgdG8gIGRlLWR1cGUgc3ludGhldGljIG1vdXNlIGV2ZW50XG5cblxuICAgICAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgICAgIHJlY29yZFRvdWNoZXMuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgaW5wdXRFdmVudCwgaW5wdXREYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01vdXNlICYmIGlzU3ludGhldGljRXZlbnQuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgaW5wdXREYXRhKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLmNhbGxiYWNrKG1hbmFnZXIsIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy50b3VjaCA9IG5ldyBUb3VjaElucHV0KF90aGlzLm1hbmFnZXIsIF90aGlzLmhhbmRsZXIpO1xuICAgICAgX3RoaXMubW91c2UgPSBuZXcgTW91c2VJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLnByaW1hcnlUb3VjaCA9IG51bGw7XG4gICAgICBfdGhpcy5sYXN0VG91Y2hlcyA9IFtdO1xuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIGhhbmRsZSBtb3VzZSBhbmQgdG91Y2ggZXZlbnRzXG4gICAgICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXRFdmVudFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICAgKi9cblxuXG4gICAgdmFyIF9wcm90byA9IFRvdWNoTW91c2VJbnB1dC5wcm90b3R5cGU7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIHJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXJzXG4gICAgICovXG4gICAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgdGhpcy50b3VjaC5kZXN0cm95KCk7XG4gICAgICB0aGlzLm1vdXNlLmRlc3Ryb3koKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFRvdWNoTW91c2VJbnB1dDtcbiAgfShJbnB1dCk7XG5cbiAgcmV0dXJuIFRvdWNoTW91c2VJbnB1dDtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIGNhbGxlZCBieSB0aGUgTWFuYWdlciBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVJbnB1dEluc3RhbmNlKG1hbmFnZXIpIHtcbiAgdmFyIFR5cGU7IC8vIGxldCBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgdmFyIGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICBpZiAoaW5wdXRDbGFzcykge1xuICAgIFR5cGUgPSBpbnB1dENsYXNzO1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMpIHtcbiAgICBUeXBlID0gUG9pbnRlckV2ZW50SW5wdXQ7XG4gIH0gZWxzZSBpZiAoU1VQUE9SVF9PTkxZX1RPVUNIKSB7XG4gICAgVHlwZSA9IFRvdWNoSW5wdXQ7XG4gIH0gZWxzZSBpZiAoIVNVUFBPUlRfVE9VQ0gpIHtcbiAgICBUeXBlID0gTW91c2VJbnB1dDtcbiAgfSBlbHNlIHtcbiAgICBUeXBlID0gVG91Y2hNb3VzZUlucHV0O1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlKG1hbmFnZXIsIGlucHV0SGFuZGxlcik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGlmIHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSwgd2Ugd2FudCB0byBleGVjdXRlIHRoZSBmbiBvbiBlYWNoIGVudHJ5XG4gKiBpZiBpdCBhaW50IGFuIGFycmF5IHdlIGRvbid0IHdhbnQgdG8gZG8gYSB0aGluZy5cbiAqIHRoaXMgaXMgdXNlZCBieSBhbGwgdGhlIG1ldGhvZHMgdGhhdCBhY2NlcHQgYSBzaW5nbGUgYW5kIGFycmF5IGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfEFycmF5fSBhcmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBmblxuICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0XVxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cblxuZnVuY3Rpb24gaW52b2tlQXJyYXlBcmcoYXJnLCBmbiwgY29udGV4dCkge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgZWFjaChhcmcsIGNvbnRleHRbZm5dLCBjb250ZXh0KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIFNUQVRFX1BPU1NJQkxFID0gMTtcbnZhciBTVEFURV9CRUdBTiA9IDI7XG52YXIgU1RBVEVfQ0hBTkdFRCA9IDQ7XG52YXIgU1RBVEVfRU5ERUQgPSA4O1xudmFyIFNUQVRFX1JFQ09HTklaRUQgPSBTVEFURV9FTkRFRDtcbnZhciBTVEFURV9DQU5DRUxMRUQgPSAxNjtcbnZhciBTVEFURV9GQUlMRUQgPSAzMjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IGEgdW5pcXVlIGlkXG4gKiBAcmV0dXJucyB7bnVtYmVyfSB1bmlxdWVJZFxuICovXG52YXIgX3VuaXF1ZUlkID0gMTtcbmZ1bmN0aW9uIHVuaXF1ZUlkKCkge1xuICByZXR1cm4gX3VuaXF1ZUlkKys7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHJlY29nbml6ZXIgYnkgbmFtZSBpZiBpdCBpcyBib3VuZCB0byBhIG1hbmFnZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IG90aGVyUmVjb2duaXplclxuICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gKiBAcmV0dXJucyB7UmVjb2duaXplcn1cbiAqL1xuZnVuY3Rpb24gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHJlY29nbml6ZXIpIHtcbiAgdmFyIG1hbmFnZXIgPSByZWNvZ25pemVyLm1hbmFnZXI7XG5cbiAgaWYgKG1hbmFnZXIpIHtcbiAgICByZXR1cm4gbWFuYWdlci5nZXQob3RoZXJSZWNvZ25pemVyKTtcbiAgfVxuXG4gIHJldHVybiBvdGhlclJlY29nbml6ZXI7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVzYWJsZSBzdHJpbmcsIHVzZWQgYXMgZXZlbnQgcG9zdGZpeFxuICogQHBhcmFtIHtjb25zdGFudH0gc3RhdGVcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0YXRlXG4gKi9cblxuZnVuY3Rpb24gc3RhdGVTdHIoc3RhdGUpIHtcbiAgaWYgKHN0YXRlICYgU1RBVEVfQ0FOQ0VMTEVEKSB7XG4gICAgcmV0dXJuICdjYW5jZWwnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfRU5ERUQpIHtcbiAgICByZXR1cm4gJ2VuZCc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9DSEFOR0VEKSB7XG4gICAgcmV0dXJuICdtb3ZlJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0JFR0FOKSB7XG4gICAgcmV0dXJuICdzdGFydCc7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXIgZmxvdyBleHBsYWluZWQ7ICpcbiAqIEFsbCByZWNvZ25pemVycyBoYXZlIHRoZSBpbml0aWFsIHN0YXRlIG9mIFBPU1NJQkxFIHdoZW4gYSBpbnB1dCBzZXNzaW9uIHN0YXJ0cy5cbiAqIFRoZSBkZWZpbml0aW9uIG9mIGEgaW5wdXQgc2Vzc2lvbiBpcyBmcm9tIHRoZSBmaXJzdCBpbnB1dCB1bnRpbCB0aGUgbGFzdCBpbnB1dCwgd2l0aCBhbGwgaXQncyBtb3ZlbWVudCBpbiBpdC4gKlxuICogRXhhbXBsZSBzZXNzaW9uIGZvciBtb3VzZS1pbnB1dDogbW91c2Vkb3duIC0+IG1vdXNlbW92ZSAtPiBtb3VzZXVwXG4gKlxuICogT24gZWFjaCByZWNvZ25pemluZyBjeWNsZSAoc2VlIE1hbmFnZXIucmVjb2duaXplKSB0aGUgLnJlY29nbml6ZSgpIG1ldGhvZCBpcyBleGVjdXRlZFxuICogd2hpY2ggZGV0ZXJtaW5lcyB3aXRoIHN0YXRlIGl0IHNob3VsZCBiZS5cbiAqXG4gKiBJZiB0aGUgcmVjb2duaXplciBoYXMgdGhlIHN0YXRlIEZBSUxFRCwgQ0FOQ0VMTEVEIG9yIFJFQ09HTklaRUQgKGVxdWFscyBFTkRFRCksIGl0IGlzIHJlc2V0IHRvXG4gKiBQT1NTSUJMRSB0byBnaXZlIGl0IGFub3RoZXIgY2hhbmdlIG9uIHRoZSBuZXh0IGN5Y2xlLlxuICpcbiAqICAgICAgICAgICAgICAgUG9zc2libGVcbiAqICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICArLS0tLS0rLS0tLS0tLS0tLS0tLS0tK1xuICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICArLS0tLS0rLS0tLS0rICAgICAgICAgICAgICAgfFxuICogICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfFxuICogICBGYWlsZWQgICAgICBDYW5jZWxsZWQgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLStcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICBSZWNvZ25pemVkICAgICAgIEJlZ2FuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRlZC9SZWNvZ25pemVkXG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUmVjb2duaXplclxuICogRXZlcnkgcmVjb2duaXplciBuZWVkcyB0byBleHRlbmQgZnJvbSB0aGlzIGNsYXNzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5cbnZhciBSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHtcbiAgICAgIGVuYWJsZTogdHJ1ZVxuICAgIH0sIG9wdGlvbnMpO1xuICAgIHRoaXMuaWQgPSB1bmlxdWVJZCgpO1xuICAgIHRoaXMubWFuYWdlciA9IG51bGw7IC8vIGRlZmF1bHQgaXMgZW5hYmxlIHRydWVcblxuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcbiAgICB0aGlzLnNpbXVsdGFuZW91cyA9IHt9O1xuICAgIHRoaXMucmVxdWlyZUZhaWwgPSBbXTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7UmVjb2duaXplcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gYWxzbyB1cGRhdGUgdGhlIHRvdWNoQWN0aW9uLCBpbiBjYXNlIHNvbWV0aGluZyBjaGFuZ2VkIGFib3V0IHRoZSBkaXJlY3Rpb25zL2VuYWJsZWQgc3RhdGVcblxuICAgIHRoaXMubWFuYWdlciAmJiB0aGlzLm1hbmFnZXIudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplci5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplV2l0aCA9IGZ1bmN0aW9uIHJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ3JlY29nbml6ZVdpdGgnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHNpbXVsdGFuZW91cyA9IHRoaXMuc2ltdWx0YW5lb3VzO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmICghc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF0pIHtcbiAgICAgIHNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdID0gb3RoZXJSZWNvZ25pemVyO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlY29nbml6ZVdpdGgodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBkcm9wIHRoZSBzaW11bHRhbmVvdXMgbGluay4gaXQgZG9lc250IHJlbW92ZSB0aGUgbGluayBvbiB0aGUgb3RoZXIgcmVjb2duaXplci5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8uZHJvcFJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiBkcm9wUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAnZHJvcFJlY29nbml6ZVdpdGgnLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuICAgIGRlbGV0ZSB0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplciBjYW4gb25seSBydW4gd2hlbiBhbiBvdGhlciBpcyBmYWlsaW5nXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlcXVpcmVGYWlsdXJlID0gZnVuY3Rpb24gcmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ3JlcXVpcmVGYWlsdXJlJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciByZXF1aXJlRmFpbCA9IHRoaXMucmVxdWlyZUZhaWw7XG4gICAgb3RoZXJSZWNvZ25pemVyID0gZ2V0UmVjb2duaXplckJ5TmFtZUlmTWFuYWdlcihvdGhlclJlY29nbml6ZXIsIHRoaXMpO1xuXG4gICAgaWYgKGluQXJyYXkocmVxdWlyZUZhaWwsIG90aGVyUmVjb2duaXplcikgPT09IC0xKSB7XG4gICAgICByZXF1aXJlRmFpbC5wdXNoKG90aGVyUmVjb2duaXplcik7XG4gICAgICBvdGhlclJlY29nbml6ZXIucmVxdWlyZUZhaWx1cmUodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBkcm9wIHRoZSByZXF1aXJlRmFpbHVyZSBsaW5rLiBpdCBkb2VzIG5vdCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIGRyb3BSZXF1aXJlRmFpbHVyZShvdGhlclJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAnZHJvcFJlcXVpcmVGYWlsdXJlJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICB2YXIgaW5kZXggPSBpbkFycmF5KHRoaXMucmVxdWlyZUZhaWwsIG90aGVyUmVjb2duaXplcik7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5yZXF1aXJlRmFpbC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaGFzIHJlcXVpcmUgZmFpbHVyZXMgYm9vbGVhblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBfcHJvdG8uaGFzUmVxdWlyZUZhaWx1cmVzID0gZnVuY3Rpb24gaGFzUmVxdWlyZUZhaWx1cmVzKCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCA+IDA7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBpZiB0aGUgcmVjb2duaXplciBjYW4gcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmNhblJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiBjYW5SZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIHJldHVybiAhIXRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBZb3Ugc2hvdWxkIHVzZSBgdHJ5RW1pdGAgaW5zdGVhZCBvZiBgZW1pdGAgZGlyZWN0bHkgdG8gY2hlY2tcbiAgICogdGhhdCBhbGwgdGhlIG5lZWRlZCByZWNvZ25pemVycyBoYXMgZmFpbGVkIGJlZm9yZSBlbWl0dGluZy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGU7XG5cbiAgICBmdW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgICBzZWxmLm1hbmFnZXIuZW1pdChldmVudCwgaW5wdXQpO1xuICAgIH0gLy8gJ3BhbnN0YXJ0JyBhbmQgJ3Bhbm1vdmUnXG5cblxuICAgIGlmIChzdGF0ZSA8IFNUQVRFX0VOREVEKSB7XG4gICAgICBlbWl0KHNlbGYub3B0aW9ucy5ldmVudCArIHN0YXRlU3RyKHN0YXRlKSk7XG4gICAgfVxuXG4gICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQpOyAvLyBzaW1wbGUgJ2V2ZW50TmFtZScgZXZlbnRzXG5cbiAgICBpZiAoaW5wdXQuYWRkaXRpb25hbEV2ZW50KSB7XG4gICAgICAvLyBhZGRpdGlvbmFsIGV2ZW50KHBhbmxlZnQsIHBhbnJpZ2h0LCBwaW5jaGluLCBwaW5jaG91dC4uLilcbiAgICAgIGVtaXQoaW5wdXQuYWRkaXRpb25hbEV2ZW50KTtcbiAgICB9IC8vIHBhbmVuZCBhbmQgcGFuY2FuY2VsXG5cblxuICAgIGlmIChzdGF0ZSA+PSBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIENoZWNrIHRoYXQgYWxsIHRoZSByZXF1aXJlIGZhaWx1cmUgcmVjb2duaXplcnMgaGFzIGZhaWxlZCxcbiAgICogaWYgdHJ1ZSwgaXQgZW1pdHMgYSBnZXN0dXJlIGV2ZW50LFxuICAgKiBvdGhlcndpc2UsIHNldHVwIHRoZSBzdGF0ZSB0byBGQUlMRUQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by50cnlFbWl0ID0gZnVuY3Rpb24gdHJ5RW1pdChpbnB1dCkge1xuICAgIGlmICh0aGlzLmNhbkVtaXQoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZW1pdChpbnB1dCk7XG4gICAgfSAvLyBpdCdzIGZhaWxpbmcgYW55d2F5XG5cblxuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYW4gd2UgZW1pdD9cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmNhbkVtaXQgPSBmdW5jdGlvbiBjYW5FbWl0KCkge1xuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGgpIHtcbiAgICAgIGlmICghKHRoaXMucmVxdWlyZUZhaWxbaV0uc3RhdGUgJiAoU1RBVEVfRkFJTEVEIHwgU1RBVEVfUE9TU0lCTEUpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHVwZGF0ZSB0aGUgcmVjb2duaXplclxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZSA9IGZ1bmN0aW9uIHJlY29nbml6ZShpbnB1dERhdGEpIHtcbiAgICAvLyBtYWtlIGEgbmV3IGNvcHkgb2YgdGhlIGlucHV0RGF0YVxuICAgIC8vIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIGlucHV0RGF0YSB3aXRob3V0IG1lc3NpbmcgdXAgdGhlIG90aGVyIHJlY29nbml6ZXJzXG4gICAgdmFyIGlucHV0RGF0YUNsb25lID0gYXNzaWduJDEoe30sIGlucHV0RGF0YSk7IC8vIGlzIGlzIGVuYWJsZWQgYW5kIGFsbG93IHJlY29nbml6aW5nP1xuXG4gICAgaWYgKCFib29sT3JGbih0aGlzLm9wdGlvbnMuZW5hYmxlLCBbdGhpcywgaW5wdXREYXRhQ2xvbmVdKSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIHJlc2V0IHdoZW4gd2UndmUgcmVhY2hlZCB0aGUgZW5kXG5cblxuICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX1JFQ09HTklaRUQgfCBTVEFURV9DQU5DRUxMRUQgfCBTVEFURV9GQUlMRUQpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucHJvY2VzcyhpbnB1dERhdGFDbG9uZSk7IC8vIHRoZSByZWNvZ25pemVyIGhhcyByZWNvZ25pemVkIGEgZ2VzdHVyZVxuICAgIC8vIHNvIHRyaWdnZXIgYW4gZXZlbnRcblxuICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEIHwgU1RBVEVfQ0FOQ0VMTEVEKSkge1xuICAgICAgdGhpcy50cnlFbWl0KGlucHV0RGF0YUNsb25lKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHN0YXRlIG9mIHRoZSByZWNvZ25pemVyXG4gICAqIHRoZSBhY3R1YWwgcmVjb2duaXppbmcgaGFwcGVucyBpbiB0aGlzIG1ldGhvZFxuICAgKiBAdmlydHVhbFxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAqIEByZXR1cm5zIHtjb25zdGFudH0gU1RBVEVcbiAgICovXG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuXG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0RGF0YSkge307XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJldHVybiB0aGUgcHJlZmVycmVkIHRvdWNoLWFjdGlvblxuICAgKiBAdmlydHVhbFxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7fTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGxlZCB3aGVuIHRoZSBnZXN0dXJlIGlzbid0IGFsbG93ZWQgdG8gcmVjb2duaXplXG4gICAqIGxpa2Ugd2hlbiBhbm90aGVyIGlzIGJlaW5nIHJlY29nbml6ZWQgb3IgaXQgaXMgZGlzYWJsZWRcbiAgICogQHZpcnR1YWxcbiAgICovXG5cblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHt9O1xuXG4gIHJldHVybiBSZWNvZ25pemVyO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBBIHRhcCBpcyByZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG9pbmcgYSBzbWFsbCB0YXAvY2xpY2suIE11bHRpcGxlIHRhcHMgYXJlIHJlY29nbml6ZWQgaWYgdGhleSBvY2N1clxuICogYmV0d2VlbiB0aGUgZ2l2ZW4gaW50ZXJ2YWwgYW5kIHBvc2l0aW9uLiBUaGUgZGVsYXkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlY29nbml6ZSBtdWx0aS10YXBzIHdpdGhvdXQgZmlyaW5nXG4gKiBhIHNpbmdsZSB0YXAuXG4gKlxuICogVGhlIGV2ZW50RGF0YSBmcm9tIHRoZSBlbWl0dGVkIGV2ZW50IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSBgdGFwQ291bnRgLCB3aGljaCBjb250YWlucyB0aGUgYW1vdW50IG9mXG4gKiBtdWx0aS10YXBzIGJlaW5nIHJlY29nbml6ZWQuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuXG52YXIgVGFwUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoVGFwUmVjb2duaXplciwgX1JlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFRhcFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICd0YXAnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0YXBzOiAxLFxuICAgICAgaW50ZXJ2YWw6IDMwMCxcbiAgICAgIC8vIG1heCB0aW1lIGJldHdlZW4gdGhlIG11bHRpLXRhcCB0YXBzXG4gICAgICB0aW1lOiAyNTAsXG4gICAgICAvLyBtYXggdGltZSBvZiB0aGUgcG9pbnRlciB0byBiZSBkb3duIChsaWtlIGZpbmdlciBvbiB0aGUgc2NyZWVuKVxuICAgICAgdGhyZXNob2xkOiA5LFxuICAgICAgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICAgIHBvc1RocmVzaG9sZDogMTBcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpczsgLy8gcHJldmlvdXMgdGltZSBhbmQgY2VudGVyLFxuICAgIC8vIHVzZWQgZm9yIHRhcCBjb3VudGluZ1xuXG4gICAgX3RoaXMucFRpbWUgPSBmYWxzZTtcbiAgICBfdGhpcy5wQ2VudGVyID0gZmFsc2U7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIF90aGlzLmNvdW50ID0gMDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVGFwUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OXTtcbiAgfTtcblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICB2YXIgdmFsaWRUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5yZXNldCgpO1xuXG4gICAgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIHRoaXMuY291bnQgPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7XG4gICAgfSAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgIC8vIGFuZCB3ZSd2ZSByZWFjaGVkIGFuIGVuZCBldmVudCwgc28gYSB0YXAgaXMgcG9zc2libGVcblxuXG4gICAgaWYgKHZhbGlkTW92ZW1lbnQgJiYgdmFsaWRUb3VjaFRpbWUgJiYgdmFsaWRQb2ludGVycykge1xuICAgICAgaWYgKGlucHV0LmV2ZW50VHlwZSAhPT0gSU5QVVRfRU5EKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWxpZEludGVydmFsID0gdGhpcy5wVGltZSA/IGlucHV0LnRpbWVTdGFtcCAtIHRoaXMucFRpbWUgPCBvcHRpb25zLmludGVydmFsIDogdHJ1ZTtcbiAgICAgIHZhciB2YWxpZE11bHRpVGFwID0gIXRoaXMucENlbnRlciB8fCBnZXREaXN0YW5jZSh0aGlzLnBDZW50ZXIsIGlucHV0LmNlbnRlcikgPCBvcHRpb25zLnBvc1RocmVzaG9sZDtcbiAgICAgIHRoaXMucFRpbWUgPSBpbnB1dC50aW1lU3RhbXA7XG4gICAgICB0aGlzLnBDZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG5cbiAgICAgIGlmICghdmFsaWRNdWx0aVRhcCB8fCAhdmFsaWRJbnRlcnZhbCkge1xuICAgICAgICB0aGlzLmNvdW50ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY291bnQgKz0gMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gaWYgdGFwIGNvdW50IG1hdGNoZXMgd2UgaGF2ZSByZWNvZ25pemVkIGl0LFxuICAgICAgLy8gZWxzZSBpdCBoYXMgYmVnYW4gcmVjb2duaXppbmcuLi5cblxuICAgICAgdmFyIHRhcENvdW50ID0gdGhpcy5jb3VudCAlIG9wdGlvbnMudGFwcztcblxuICAgICAgaWYgKHRhcENvdW50ID09PSAwKSB7XG4gICAgICAgIC8vIG5vIGZhaWxpbmcgcmVxdWlyZW1lbnRzLCBpbW1lZGlhdGVseSB0cmlnZ2VyIHRoZSB0YXAgZXZlbnRcbiAgICAgICAgLy8gb3Igd2FpdCBhcyBsb25nIGFzIHRoZSBtdWx0aXRhcCBpbnRlcnZhbCB0byB0cmlnZ2VyXG4gICAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlRmFpbHVyZXMoKSkge1xuICAgICAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczIuc3RhdGUgPSBTVEFURV9SRUNPR05JWkVEO1xuXG4gICAgICAgICAgICBfdGhpczIudHJ5RW1pdCgpO1xuICAgICAgICAgIH0sIG9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLmZhaWxUaW1lb3V0ID0gZnVuY3Rpb24gZmFpbFRpbWVvdXQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgIH0sIHRoaXMub3B0aW9ucy5pbnRlcnZhbCk7XG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdCgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgdGhpcy5faW5wdXQudGFwQ291bnQgPSB0aGlzLmNvdW50O1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBUYXBSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogVGhpcyByZWNvZ25pemVyIGlzIGp1c3QgdXNlZCBhcyBhIGJhc2UgZm9yIHRoZSBzaW1wbGUgYXR0cmlidXRlIHJlY29nbml6ZXJzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIEF0dHJSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShBdHRyUmVjb2duaXplciwgX1JlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIEF0dHJSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9SZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgcG9pbnRlcnM6IDFcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogVXNlZCB0byBjaGVjayBpZiBpdCB0aGUgcmVjb2duaXplciByZWNlaXZlcyB2YWxpZCBpbnB1dCwgbGlrZSBpbnB1dC5kaXN0YW5jZSA+IDEwLlxuICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqIEByZXR1cm5zIHtCb29sZWFufSByZWNvZ25pemVkXG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IEF0dHJSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25Qb2ludGVycyA9IHRoaXMub3B0aW9ucy5wb2ludGVycztcbiAgICByZXR1cm4gb3B0aW9uUG9pbnRlcnMgPT09IDAgfHwgaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25Qb2ludGVycztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFByb2Nlc3MgdGhlIGlucHV0IGFuZCByZXR1cm4gdGhlIHN0YXRlIGZvciB0aGUgcmVjb2duaXplclxuICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqIEByZXR1cm5zIHsqfSBTdGF0ZVxuICAgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgdmFyIGV2ZW50VHlwZSA9IGlucHV0LmV2ZW50VHlwZTtcbiAgICB2YXIgaXNSZWNvZ25pemVkID0gc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEKTtcbiAgICB2YXIgaXNWYWxpZCA9IHRoaXMuYXR0clRlc3QoaW5wdXQpOyAvLyBvbiBjYW5jZWwgaW5wdXQgYW5kIHdlJ3ZlIHJlY29nbml6ZWQgYmVmb3JlLCByZXR1cm4gU1RBVEVfQ0FOQ0VMTEVEXG5cbiAgICBpZiAoaXNSZWNvZ25pemVkICYmIChldmVudFR5cGUgJiBJTlBVVF9DQU5DRUwgfHwgIWlzVmFsaWQpKSB7XG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DQU5DRUxMRUQ7XG4gICAgfSBlbHNlIGlmIChpc1JlY29nbml6ZWQgfHwgaXNWYWxpZCkge1xuICAgICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9FTkRFRDtcbiAgICAgIH0gZWxzZSBpZiAoIShzdGF0ZSAmIFNUQVRFX0JFR0FOKSkge1xuICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGF0ZSB8IFNUQVRFX0NIQU5HRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICByZXR1cm4gQXR0clJlY29nbml6ZXI7XG59KFJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBkaXJlY3Rpb24gY29ucyB0byBzdHJpbmdcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IGRpcmVjdGlvblxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBkaXJlY3Rpb25TdHIoZGlyZWN0aW9uKSB7XG4gIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9ET1dOKSB7XG4gICAgcmV0dXJuICdkb3duJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9VUCkge1xuICAgIHJldHVybiAndXAnO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQpIHtcbiAgICByZXR1cm4gJ2xlZnQnO1xuICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX1JJR0hUKSB7XG4gICAgcmV0dXJuICdyaWdodCc7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFBhblxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gYW5kIG1vdmVkIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgUGFuUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFBhblJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGFuUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIF90aGlzID0gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdwYW4nLFxuICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fQUxMXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMucFggPSBudWxsO1xuICAgIF90aGlzLnBZID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUGFuUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb247XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgYWN0aW9ucy5wdXNoKFRPVUNIX0FDVElPTl9QQU5fWSk7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgYWN0aW9ucy5wdXNoKFRPVUNIX0FDVElPTl9QQU5fWCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLmRpcmVjdGlvblRlc3QgPSBmdW5jdGlvbiBkaXJlY3Rpb25UZXN0KGlucHV0KSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIGhhc01vdmVkID0gdHJ1ZTtcbiAgICB2YXIgZGlzdGFuY2UgPSBpbnB1dC5kaXN0YW5jZTtcbiAgICB2YXIgZGlyZWN0aW9uID0gaW5wdXQuZGlyZWN0aW9uO1xuICAgIHZhciB4ID0gaW5wdXQuZGVsdGFYO1xuICAgIHZhciB5ID0gaW5wdXQuZGVsdGFZOyAvLyBsb2NrIHRvIGF4aXM/XG5cbiAgICBpZiAoIShkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbikpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHggPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHggPCAwID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gICAgICAgIGhhc01vdmVkID0geCAhPT0gdGhpcy5wWDtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlyZWN0aW9uID0geSA9PT0gMCA/IERJUkVDVElPTl9OT05FIDogeSA8IDAgPyBESVJFQ1RJT05fVVAgOiBESVJFQ1RJT05fRE9XTjtcbiAgICAgICAgaGFzTW92ZWQgPSB5ICE9PSB0aGlzLnBZO1xuICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKGlucHV0LmRlbHRhWSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5wdXQuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgIHJldHVybiBoYXNNb3ZlZCAmJiBkaXN0YW5jZSA+IG9wdGlvbnMudGhyZXNob2xkICYmIGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIEF0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoIC8vIHJlcGxhY2Ugd2l0aCBhIHN1cGVyIGNhbGxcbiAgICB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4gfHwgISh0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pICYmIHRoaXMuZGlyZWN0aW9uVGVzdChpbnB1dCkpO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHRoaXMucFggPSBpbnB1dC5kZWx0YVg7XG4gICAgdGhpcy5wWSA9IGlucHV0LmRlbHRhWTtcbiAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0LmRpcmVjdGlvbik7XG5cbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb247XG4gICAgfVxuXG4gICAgX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICB9O1xuXG4gIHJldHVybiBQYW5SZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFN3aXBlXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgbW92aW5nIGZhc3QgKHZlbG9jaXR5KSwgd2l0aCBlbm91Z2ggZGlzdGFuY2UgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBTd2lwZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShTd2lwZVJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gU3dpcGVSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAnc3dpcGUnLFxuICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgIHZlbG9jaXR5OiAwLjMsXG4gICAgICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMIHwgRElSRUNUSU9OX1ZFUlRJQ0FMLFxuICAgICAgcG9pbnRlcnM6IDFcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTd2lwZVJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBQYW5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRUb3VjaEFjdGlvbi5jYWxsKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMub3B0aW9ucy5kaXJlY3Rpb247XG4gICAgdmFyIHZlbG9jaXR5O1xuXG4gICAgaWYgKGRpcmVjdGlvbiAmIChESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCkpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5O1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WDtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9WRVJUSUNBTCkge1xuICAgICAgdmVsb2NpdHkgPSBpbnB1dC5vdmVyYWxsVmVsb2NpdHlZO1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIGRpcmVjdGlvbiAmIGlucHV0Lm9mZnNldERpcmVjdGlvbiAmJiBpbnB1dC5kaXN0YW5jZSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgJiYgaW5wdXQubWF4UG9pbnRlcnMgPT09IHRoaXMub3B0aW9ucy5wb2ludGVycyAmJiBhYnModmVsb2NpdHkpID4gdGhpcy5vcHRpb25zLnZlbG9jaXR5ICYmIGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORDtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0Lm9mZnNldERpcmVjdGlvbik7XG5cbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb24sIGlucHV0KTtcbiAgICB9XG5cbiAgICB0aGlzLm1hbmFnZXIuZW1pdCh0aGlzLm9wdGlvbnMuZXZlbnQsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gU3dpcGVSZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFBpbmNoXG4gKiBSZWNvZ25pemVkIHdoZW4gdHdvIG9yIG1vcmUgcG9pbnRlcnMgYXJlIG1vdmluZyB0b3dhcmQgKHpvb20taW4pIG9yIGF3YXkgZnJvbSBlYWNoIG90aGVyICh6b29tLW91dCkuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBpbmNoUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFBpbmNoUmVjb2duaXplciwgX0F0dHJSZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBQaW5jaFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdwaW5jaCcsXG4gICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICBwb2ludGVyczogMlxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBpbmNoUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gIH07XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiAoTWF0aC5hYnMoaW5wdXQuc2NhbGUgLSAxKSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQuc2NhbGUgIT09IDEpIHtcbiAgICAgIHZhciBpbk91dCA9IGlucHV0LnNjYWxlIDwgMSA/ICdpbicgOiAnb3V0JztcbiAgICAgIGlucHV0LmFkZGl0aW9uYWxFdmVudCA9IHRoaXMub3B0aW9ucy5ldmVudCArIGluT3V0O1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGluY2hSZWNvZ25pemVyO1xufShBdHRyUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJvdGF0ZVxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXIgYXJlIG1vdmluZyBpbiBhIGNpcmN1bGFyIG1vdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgUm90YXRlUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0F0dHJSZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFJvdGF0ZVJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUm90YXRlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3JvdGF0ZScsXG4gICAgICB0aHJlc2hvbGQ6IDAsXG4gICAgICBwb2ludGVyczogMlxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFJvdGF0ZVJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnJvdGF0aW9uKSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKTtcbiAgfTtcblxuICByZXR1cm4gUm90YXRlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQcmVzc1xuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvd24gZm9yIHggbXMgd2l0aG91dCBhbnkgbW92ZW1lbnQuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuXG52YXIgUHJlc3NSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQcmVzc1JlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBQcmVzc1JlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdwcmVzcycsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIHRpbWU6IDI1MSxcbiAgICAgIC8vIG1pbmltYWwgdGltZSBvZiB0aGUgcG9pbnRlciB0byBiZSBwcmVzc2VkXG4gICAgICB0aHJlc2hvbGQ6IDlcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgICBfdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIF90aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFByZXNzUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmdldFRvdWNoQWN0aW9uID0gZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb24oKSB7XG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fQVVUT107XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVGltZSA9IGlucHV0LmRlbHRhVGltZSA+IG9wdGlvbnMudGltZTtcbiAgICB0aGlzLl9pbnB1dCA9IGlucHV0OyAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgIC8vIGFuZCB3ZSd2ZSByZWFjaGVkIGFuIGVuZCBldmVudCwgc28gYSB0YXAgaXMgcG9zc2libGVcblxuICAgIGlmICghdmFsaWRNb3ZlbWVudCB8fCAhdmFsaWRQb2ludGVycyB8fCBpbnB1dC5ldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiAhdmFsaWRUaW1lKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICBfdGhpczIudHJ5RW1pdCgpO1xuICAgICAgfSwgb3B0aW9ucy50aW1lKTtcbiAgICB9IGVsc2UgaWYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgcmV0dXJuIFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlucHV0ICYmIGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgXCJ1cFwiLCBpbnB1dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBQcmVzc1JlY29nbml6ZXI7XG59KFJlY29nbml6ZXIpO1xuXG52YXIgZGVmYXVsdHMgPSB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgaWYgRE9NIGV2ZW50cyBhcmUgYmVpbmcgdHJpZ2dlcmVkLlxuICAgKiBCdXQgdGhpcyBpcyBzbG93ZXIgYW5kIHVudXNlZCBieSBzaW1wbGUgaW1wbGVtZW50YXRpb25zLCBzbyBkaXNhYmxlZCBieSBkZWZhdWx0LlxuICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRvbUV2ZW50czogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5L2ZhbGxiYWNrLlxuICAgKiBXaGVuIHNldCB0byBgY29tcHV0ZWAgaXQgd2lsbCBtYWdpY2FsbHkgc2V0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBhZGRlZCByZWNvZ25pemVycy5cbiAgICogQHR5cGUge1N0cmluZ31cbiAgICogQGRlZmF1bHQgY29tcHV0ZVxuICAgKi9cbiAgdG91Y2hBY3Rpb246IFRPVUNIX0FDVElPTl9DT01QVVRFLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZW5hYmxlOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBFWFBFUklNRU5UQUwgRkVBVFVSRSAtLSBjYW4gYmUgcmVtb3ZlZC9jaGFuZ2VkXG4gICAqIENoYW5nZSB0aGUgcGFyZW50IGlucHV0IHRhcmdldCBlbGVtZW50LlxuICAgKiBJZiBOdWxsLCB0aGVuIGl0IGlzIGJlaW5nIHNldCB0aGUgdG8gbWFpbiBlbGVtZW50LlxuICAgKiBAdHlwZSB7TnVsbHxFdmVudFRhcmdldH1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRUYXJnZXQ6IG51bGwsXG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGZvcmNlIGFuIGlucHV0IGNsYXNzXG4gICAqIEB0eXBlIHtOdWxsfEZ1bmN0aW9ufVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBpbnB1dENsYXNzOiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBTb21lIENTUyBwcm9wZXJ0aWVzIGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgdGhlIHdvcmtpbmcgb2YgSGFtbWVyLlxuICAgKiBBZGQgdGhlbSB0byB0aGlzIG1ldGhvZCBhbmQgdGhleSB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIuXG4gICAqIEBuYW1lc3BhY2VcbiAgICovXG4gIGNzc1Byb3BzOiB7XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0ZXh0IHNlbGVjdGlvbiB0byBpbXByb3ZlIHRoZSBkcmFnZ2luZyBnZXN0dXJlLiBNYWlubHkgZm9yIGRlc2t0b3AgYnJvd3NlcnMuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZSB0aGUgV2luZG93cyBQaG9uZSBncmlwcGVycyB3aGVuIHByZXNzaW5nIGFuIGVsZW1lbnQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaFNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGVzIHRoZSBkZWZhdWx0IGNhbGxvdXQgc2hvd24gd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQuXG4gICAgICogT24gaU9TLCB3aGVuIHlvdSB0b3VjaCBhbmQgaG9sZCBhIHRvdWNoIHRhcmdldCBzdWNoIGFzIGEgbGluaywgU2FmYXJpIGRpc3BsYXlzXG4gICAgICogYSBjYWxsb3V0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmsuIFRoaXMgcHJvcGVydHkgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoYXQgY2FsbG91dC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIHRvdWNoQ2FsbG91dDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHpvb21pbmcgaXMgZW5hYmxlZC4gVXNlZCBieSBJRTEwPlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgY29udGVudFpvb21pbmc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgdGhhdCBhbiBlbnRpcmUgZWxlbWVudCBzaG91bGQgYmUgZHJhZ2dhYmxlIGluc3RlYWQgb2YgaXRzIGNvbnRlbnRzLiBNYWlubHkgZm9yIGRlc2t0b3AgYnJvd3NlcnMuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB1c2VyRHJhZzogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIE92ZXJyaWRlcyB0aGUgaGlnaGxpZ2h0IGNvbG9yIHNob3duIHdoZW4gdGhlIHVzZXIgdGFwcyBhIGxpbmsgb3IgYSBKYXZhU2NyaXB0XG4gICAgICogY2xpY2thYmxlIGVsZW1lbnQgaW4gaU9TLiBUaGlzIHByb3BlcnR5IG9iZXlzIHRoZSBhbHBoYSB2YWx1ZSwgaWYgc3BlY2lmaWVkLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ3JnYmEoMCwwLDAsMCknXG4gICAgICovXG4gICAgdGFwSGlnaGxpZ2h0Q29sb3I6IFwicmdiYSgwLDAsMCwwKVwiXG4gIH1cbn07XG4vKipcbiAqIEBwcml2YXRlXG4gKiBEZWZhdWx0IHJlY29nbml6ZXIgc2V0dXAgd2hlbiBjYWxsaW5nIGBIYW1tZXIoKWBcbiAqIFdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlciB0aGVzZSB3aWxsIGJlIHNraXBwZWQuXG4gKiBUaGlzIGlzIHNlcGFyYXRlZCB3aXRoIG90aGVyIGRlZmF1bHRzIGJlY2F1c2Ugb2YgdHJlZS1zaGFraW5nLlxuICogQHR5cGUge0FycmF5fVxuICovXG5cbnZhciBwcmVzZXQgPSBbW1JvdGF0ZVJlY29nbml6ZXIsIHtcbiAgZW5hYmxlOiBmYWxzZVxufV0sIFtQaW5jaFJlY29nbml6ZXIsIHtcbiAgZW5hYmxlOiBmYWxzZVxufSwgWydyb3RhdGUnXV0sIFtTd2lwZVJlY29nbml6ZXIsIHtcbiAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTFxufV0sIFtQYW5SZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn0sIFsnc3dpcGUnXV0sIFtUYXBSZWNvZ25pemVyXSwgW1RhcFJlY29nbml6ZXIsIHtcbiAgZXZlbnQ6ICdkb3VibGV0YXAnLFxuICB0YXBzOiAyXG59LCBbJ3RhcCddXSwgW1ByZXNzUmVjb2duaXplcl1dO1xuXG52YXIgU1RPUCA9IDE7XG52YXIgRk9SQ0VEX1NUT1AgPSAyO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogYWRkL3JlbW92ZSB0aGUgY3NzIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtCb29sZWFufSBhZGRcbiAqL1xuXG5mdW5jdGlvbiB0b2dnbGVDc3NQcm9wcyhtYW5hZ2VyLCBhZGQpIHtcbiAgdmFyIGVsZW1lbnQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG5cbiAgaWYgKCFlbGVtZW50LnN0eWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHByb3A7XG4gIGVhY2gobWFuYWdlci5vcHRpb25zLmNzc1Byb3BzLCBmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICBwcm9wID0gcHJlZml4ZWQoZWxlbWVudC5zdHlsZSwgbmFtZSk7XG5cbiAgICBpZiAoYWRkKSB7XG4gICAgICBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdID0gZWxlbWVudC5zdHlsZVtwcm9wXTtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IG1hbmFnZXIub2xkQ3NzUHJvcHNbcHJvcF0gfHwgXCJcIjtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICghYWRkKSB7XG4gICAgbWFuYWdlci5vbGRDc3NQcm9wcyA9IHt9O1xuICB9XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiB0cmlnZ2VyIGRvbSBldmVudFxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICovXG5cblxuZnVuY3Rpb24gdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKSB7XG4gIHZhciBnZXN0dXJlRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICBnZXN0dXJlRXZlbnQuaW5pdEV2ZW50KGV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgZ2VzdHVyZUV2ZW50Lmdlc3R1cmUgPSBkYXRhO1xuICBkYXRhLnRhcmdldC5kaXNwYXRjaEV2ZW50KGdlc3R1cmVFdmVudCk7XG59XG4vKipcbiogQHByaXZhdGVcbiAqIE1hbmFnZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cblxudmFyIE1hbmFnZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNYW5hZ2VyKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5vcHRpb25zID0gYXNzaWduJDEoe30sIGRlZmF1bHRzLCBvcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLm9wdGlvbnMuaW5wdXRUYXJnZXQgPSB0aGlzLm9wdGlvbnMuaW5wdXRUYXJnZXQgfHwgZWxlbWVudDtcbiAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgdGhpcy5yZWNvZ25pemVycyA9IFtdO1xuICAgIHRoaXMub2xkQ3NzUHJvcHMgPSB7fTtcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuaW5wdXQgPSBjcmVhdGVJbnB1dEluc3RhbmNlKHRoaXMpO1xuICAgIHRoaXMudG91Y2hBY3Rpb24gPSBuZXcgVG91Y2hBY3Rpb24odGhpcywgdGhpcy5vcHRpb25zLnRvdWNoQWN0aW9uKTtcbiAgICB0b2dnbGVDc3NQcm9wcyh0aGlzLCB0cnVlKTtcbiAgICBlYWNoKHRoaXMub3B0aW9ucy5yZWNvZ25pemVycywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciByZWNvZ25pemVyID0gX3RoaXMuYWRkKG5ldyBpdGVtWzBdKGl0ZW1bMV0pKTtcblxuICAgICAgaXRlbVsyXSAmJiByZWNvZ25pemVyLnJlY29nbml6ZVdpdGgoaXRlbVsyXSk7XG4gICAgICBpdGVtWzNdICYmIHJlY29nbml6ZXIucmVxdWlyZUZhaWx1cmUoaXRlbVszXSk7XG4gICAgfSwgdGhpcyk7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICBhc3NpZ24kMSh0aGlzLm9wdGlvbnMsIG9wdGlvbnMpOyAvLyBPcHRpb25zIHRoYXQgbmVlZCBhIGxpdHRsZSBtb3JlIHNldHVwXG5cbiAgICBpZiAob3B0aW9ucy50b3VjaEFjdGlvbikge1xuICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5pbnB1dFRhcmdldCkge1xuICAgICAgLy8gQ2xlYW4gdXAgZXhpc3RpbmcgZXZlbnQgbGlzdGVuZXJzIGFuZCByZWluaXRpYWxpemVcbiAgICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgICAgdGhpcy5pbnB1dC50YXJnZXQgPSBvcHRpb25zLmlucHV0VGFyZ2V0O1xuICAgICAgdGhpcy5pbnB1dC5pbml0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzdG9wIHJlY29nbml6aW5nIGZvciB0aGlzIHNlc3Npb24uXG4gICAqIFRoaXMgc2Vzc2lvbiB3aWxsIGJlIGRpc2NhcmRlZCwgd2hlbiBhIG5ldyBbaW5wdXRdc3RhcnQgZXZlbnQgaXMgZmlyZWQuXG4gICAqIFdoZW4gZm9yY2VkLCB0aGUgcmVjb2duaXplciBjeWNsZSBpcyBzdG9wcGVkIGltbWVkaWF0ZWx5LlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZV1cbiAgICovXG5cblxuICBfcHJvdG8uc3RvcCA9IGZ1bmN0aW9uIHN0b3AoZm9yY2UpIHtcbiAgICB0aGlzLnNlc3Npb24uc3RvcHBlZCA9IGZvcmNlID8gRk9SQ0VEX1NUT1AgOiBTVE9QO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcnVuIHRoZSByZWNvZ25pemVycyFcbiAgICogY2FsbGVkIGJ5IHRoZSBpbnB1dEhhbmRsZXIgZnVuY3Rpb24gb24gZXZlcnkgbW92ZW1lbnQgb2YgdGhlIHBvaW50ZXJzICh0b3VjaGVzKVxuICAgKiBpdCB3YWxrcyB0aHJvdWdoIGFsbCB0aGUgcmVjb2duaXplcnMgYW5kIHRyaWVzIHRvIGRldGVjdCB0aGUgZ2VzdHVyZSB0aGF0IGlzIGJlaW5nIG1hZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG5cbiAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBydW4gdGhlIHRvdWNoLWFjdGlvbiBwb2x5ZmlsbFxuXG5cbiAgICB0aGlzLnRvdWNoQWN0aW9uLnByZXZlbnREZWZhdWx0cyhpbnB1dERhdGEpO1xuICAgIHZhciByZWNvZ25pemVyO1xuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7IC8vIHRoaXMgaG9sZHMgdGhlIHJlY29nbml6ZXIgdGhhdCBpcyBiZWluZyByZWNvZ25pemVkLlxuICAgIC8vIHNvIHRoZSByZWNvZ25pemVyJ3Mgc3RhdGUgbmVlZHMgdG8gYmUgQkVHQU4sIENIQU5HRUQsIEVOREVEIG9yIFJFQ09HTklaRURcbiAgICAvLyBpZiBubyByZWNvZ25pemVyIGlzIGRldGVjdGluZyBhIHRoaW5nLCBpdCBpcyBzZXQgdG8gYG51bGxgXG5cbiAgICB2YXIgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplcjsgLy8gcmVzZXQgd2hlbiB0aGUgbGFzdCByZWNvZ25pemVyIGlzIHJlY29nbml6ZWRcbiAgICAvLyBvciB3aGVuIHdlJ3JlIGluIGEgbmV3IHNlc3Npb25cblxuICAgIGlmICghY3VyUmVjb2duaXplciB8fCBjdXJSZWNvZ25pemVyICYmIGN1clJlY29nbml6ZXIuc3RhdGUgJiBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgICAgY3VyUmVjb2duaXplciA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCByZWNvZ25pemVycy5sZW5ndGgpIHtcbiAgICAgIHJlY29nbml6ZXIgPSByZWNvZ25pemVyc1tpXTsgLy8gZmluZCBvdXQgaWYgd2UgYXJlIGFsbG93ZWQgdHJ5IHRvIHJlY29nbml6ZSB0aGUgaW5wdXQgZm9yIHRoaXMgb25lLlxuICAgICAgLy8gMS4gICBhbGxvdyBpZiB0aGUgc2Vzc2lvbiBpcyBOT1QgZm9yY2VkIHN0b3BwZWQgKHNlZSB0aGUgLnN0b3AoKSBtZXRob2QpXG4gICAgICAvLyAyLiAgIGFsbG93IGlmIHdlIHN0aWxsIGhhdmVuJ3QgcmVjb2duaXplZCBhIGdlc3R1cmUgaW4gdGhpcyBzZXNzaW9uLCBvciB0aGUgdGhpcyByZWNvZ25pemVyIGlzIHRoZSBvbmVcbiAgICAgIC8vICAgICAgdGhhdCBpcyBiZWluZyByZWNvZ25pemVkLlxuICAgICAgLy8gMy4gICBhbGxvdyBpZiB0aGUgcmVjb2duaXplciBpcyBhbGxvd2VkIHRvIHJ1biBzaW11bHRhbmVvdXMgd2l0aCB0aGUgY3VycmVudCByZWNvZ25pemVkIHJlY29nbml6ZXIuXG4gICAgICAvLyAgICAgIHRoaXMgY2FuIGJlIHNldHVwIHdpdGggdGhlIGByZWNvZ25pemVXaXRoKClgIG1ldGhvZCBvbiB0aGUgcmVjb2duaXplci5cblxuICAgICAgaWYgKHNlc3Npb24uc3RvcHBlZCAhPT0gRk9SQ0VEX1NUT1AgJiYgKCAvLyAxXG4gICAgICAhY3VyUmVjb2duaXplciB8fCByZWNvZ25pemVyID09PSBjdXJSZWNvZ25pemVyIHx8IC8vIDJcbiAgICAgIHJlY29nbml6ZXIuY2FuUmVjb2duaXplV2l0aChjdXJSZWNvZ25pemVyKSkpIHtcbiAgICAgICAgLy8gM1xuICAgICAgICByZWNvZ25pemVyLnJlY29nbml6ZShpbnB1dERhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjb2duaXplci5yZXNldCgpO1xuICAgICAgfSAvLyBpZiB0aGUgcmVjb2duaXplciBoYXMgYmVlbiByZWNvZ25pemluZyB0aGUgaW5wdXQgYXMgYSB2YWxpZCBnZXN0dXJlLCB3ZSB3YW50IHRvIHN0b3JlIHRoaXMgb25lIGFzIHRoZVxuICAgICAgLy8gY3VycmVudCBhY3RpdmUgcmVjb2duaXplci4gYnV0IG9ubHkgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGFjdGl2ZSByZWNvZ25pemVyXG5cblxuICAgICAgaWYgKCFjdXJSZWNvZ25pemVyICYmIHJlY29nbml6ZXIuc3RhdGUgJiAoU1RBVEVfQkVHQU4gfCBTVEFURV9DSEFOR0VEIHwgU1RBVEVfRU5ERUQpKSB7XG4gICAgICAgIHNlc3Npb24uY3VyUmVjb2duaXplciA9IHJlY29nbml6ZXI7XG4gICAgICAgIGN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZ2V0IGEgcmVjb2duaXplciBieSBpdHMgZXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxOdWxsfVxuICAgKi9cblxuXG4gIF9wcm90by5nZXQgPSBmdW5jdGlvbiBnZXQocmVjb2duaXplcikge1xuICAgIGlmIChyZWNvZ25pemVyIGluc3RhbmNlb2YgUmVjb2duaXplcikge1xuICAgICAgcmV0dXJuIHJlY29nbml6ZXI7XG4gICAgfVxuXG4gICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjb2duaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWNvZ25pemVyc1tpXS5vcHRpb25zLmV2ZW50ID09PSByZWNvZ25pemVyKSB7XG4gICAgICAgIHJldHVybiByZWNvZ25pemVyc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIGFkZCBhIHJlY29nbml6ZXIgdG8gdGhlIG1hbmFnZXJcbiAgICogZXhpc3RpbmcgcmVjb2duaXplcnMgd2l0aCB0aGUgc2FtZSBldmVudCBuYW1lIHdpbGwgYmUgcmVtb3ZlZFxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TWFuYWdlcn1cbiAgICovXG5cblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKHJlY29nbml6ZXIpIHtcbiAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgXCJhZGRcIiwgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gLy8gcmVtb3ZlIGV4aXN0aW5nXG5cblxuICAgIHZhciBleGlzdGluZyA9IHRoaXMuZ2V0KHJlY29nbml6ZXIub3B0aW9ucy5ldmVudCk7XG5cbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHRoaXMucmVtb3ZlKGV4aXN0aW5nKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlY29nbml6ZXJzLnB1c2gocmVjb2duaXplcik7XG4gICAgcmVjb2duaXplci5tYW5hZ2VyID0gdGhpcztcbiAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiByZWNvZ25pemVyO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVtb3ZlIGEgcmVjb2duaXplciBieSBuYW1lIG9yIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwicmVtb3ZlXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0UmVjb2duaXplciA9IHRoaXMuZ2V0KHJlY29nbml6ZXIpOyAvLyBsZXQncyBtYWtlIHN1cmUgdGhpcyByZWNvZ25pemVyIGV4aXN0c1xuXG4gICAgaWYgKHJlY29nbml6ZXIpIHtcbiAgICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG4gICAgICB2YXIgaW5kZXggPSBpbkFycmF5KHJlY29nbml6ZXJzLCB0YXJnZXRSZWNvZ25pemVyKTtcblxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICByZWNvZ25pemVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogYmluZCBldmVudFxuICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAgICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCB8fCBoYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgZWFjaChzcGxpdFN0cihldmVudHMpLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGhhbmRsZXJzW2V2ZW50XSA9IGhhbmRsZXJzW2V2ZW50XSB8fCBbXTtcbiAgICAgIGhhbmRsZXJzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgdW5iaW5kIGV2ZW50LCBsZWF2ZSBlbWl0IGJsYW5rIHRvIHJlbW92ZSBhbGwgaGFuZGxlcnNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaGFuZGxlcl1cbiAgICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5vZmYgPSBmdW5jdGlvbiBvZmYoZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgZGVsZXRlIGhhbmRsZXJzW2V2ZW50XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZXJzW2V2ZW50XSAmJiBoYW5kbGVyc1tldmVudF0uc3BsaWNlKGluQXJyYXkoaGFuZGxlcnNbZXZlbnRdLCBoYW5kbGVyKSwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBlbWl0IGV2ZW50IHRvIHRoZSBsaXN0ZW5lcnNcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAqL1xuXG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50LCBkYXRhKSB7XG4gICAgLy8gd2UgYWxzbyB3YW50IHRvIHRyaWdnZXIgZG9tIGV2ZW50c1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZG9tRXZlbnRzKSB7XG4gICAgICB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpO1xuICAgIH0gLy8gbm8gaGFuZGxlcnMsIHNvIHNraXAgaXQgYWxsXG5cblxuICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNbZXZlbnRdICYmIHRoaXMuaGFuZGxlcnNbZXZlbnRdLnNsaWNlKCk7XG5cbiAgICBpZiAoIWhhbmRsZXJzIHx8ICFoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkYXRhLnR5cGUgPSBldmVudDtcblxuICAgIGRhdGEucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBkYXRhLnNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfTtcblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICBoYW5kbGVyc1tpXShkYXRhKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBkZXN0cm95IHRoZSBtYW5hZ2VyIGFuZCB1bmJpbmRzIGFsbCBldmVudHNcbiAgICogaXQgZG9lc24ndCB1bmJpbmQgZG9tIGV2ZW50cywgdGhhdCBpcyB0aGUgdXNlciBvd24gcmVzcG9uc2liaWxpdHlcbiAgICovXG5cblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5lbGVtZW50ICYmIHRvZ2dsZUNzc1Byb3BzKHRoaXMsIGZhbHNlKTtcbiAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgdGhpcy5pbnB1dC5kZXN0cm95KCk7XG4gICAgdGhpcy5lbGVtZW50ID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gTWFuYWdlcjtcbn0oKTtcblxudmFyIFNJTkdMRV9UT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCc7XG52YXIgU0lOR0xFX1RPVUNIX1dJTkRPV19FVkVOVFMgPSAndG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogVG91Y2ggZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIFNpbmdsZVRvdWNoSW5wdXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9JbnB1dCkge1xuICBfaW5oZXJpdHNMb29zZShTaW5nbGVUb3VjaElucHV0LCBfSW5wdXQpO1xuXG4gIGZ1bmN0aW9uIFNpbmdsZVRvdWNoSW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gU2luZ2xlVG91Y2hJbnB1dC5wcm90b3R5cGU7XG4gICAgcHJvdG8uZXZUYXJnZXQgPSBTSU5HTEVfVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBwcm90by5ldldpbiA9IFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gU0lOR0xFX1RPVUNIX0lOUFVUX01BUFtldi50eXBlXTsgLy8gc2hvdWxkIHdlIGhhbmRsZSB0aGUgdG91Y2ggZXZlbnRzP1xuXG4gICAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRvdWNoZXMgPSBub3JtYWxpemVTaW5nbGVUb3VjaGVzLmNhbGwodGhpcywgZXYsIHR5cGUpOyAvLyB3aGVuIGRvbmUsIHJlc2V0IHRoZSBzdGFydGVkIHN0YXRlXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIHRvdWNoZXNbMF0ubGVuZ3RoIC0gdG91Y2hlc1sxXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFNpbmdsZVRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gbm9ybWFsaXplU2luZ2xlVG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsID0gdG9BcnJheShldi50b3VjaGVzKTtcbiAgdmFyIGNoYW5nZWQgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKTtcblxuICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgYWxsID0gdW5pcXVlQXJyYXkoYWxsLmNvbmNhdChjaGFuZ2VkKSwgJ2lkZW50aWZpZXInLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBbYWxsLCBjaGFuZ2VkXTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogd3JhcCBhIG1ldGhvZCB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZyBhbmQgc3RhY2sgdHJhY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgbmV3IGZ1bmN0aW9uIHdyYXBwaW5nIHRoZSBzdXBwbGllZCBtZXRob2QuXG4gKi9cbmZ1bmN0aW9uIGRlcHJlY2F0ZShtZXRob2QsIG5hbWUsIG1lc3NhZ2UpIHtcbiAgdmFyIGRlcHJlY2F0aW9uTWVzc2FnZSA9IFwiREVQUkVDQVRFRCBNRVRIT0Q6IFwiICsgbmFtZSArIFwiXFxuXCIgKyBtZXNzYWdlICsgXCIgQVQgXFxuXCI7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGUgPSBuZXcgRXJyb3IoJ2dldC1zdGFjay10cmFjZScpO1xuICAgIHZhciBzdGFjayA9IGUgJiYgZS5zdGFjayA/IGUuc3RhY2sucmVwbGFjZSgvXlteXFwoXSs/W1xcbiRdL2dtLCAnJykucmVwbGFjZSgvXlxccythdFxccysvZ20sICcnKS5yZXBsYWNlKC9eT2JqZWN0Ljxhbm9ueW1vdXM+XFxzKlxcKC9nbSwgJ3thbm9ueW1vdXN9KClAJykgOiAnVW5rbm93biBTdGFjayBUcmFjZSc7XG4gICAgdmFyIGxvZyA9IHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS53YXJuIHx8IHdpbmRvdy5jb25zb2xlLmxvZyk7XG5cbiAgICBpZiAobG9nKSB7XG4gICAgICBsb2cuY2FsbCh3aW5kb3cuY29uc29sZSwgZGVwcmVjYXRpb25NZXNzYWdlLCBzdGFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBleHRlbmQgb2JqZWN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIGluIGRlc3Qgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgb25lcyBpbiBzcmMuXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzdFxuICogQHBhcmFtIHtPYmplY3R9IHNyY1xuICogQHBhcmFtIHtCb29sZWFufSBbbWVyZ2U9ZmFsc2VdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBkZXN0XG4gKi9cblxudmFyIGV4dGVuZCA9IGRlcHJlY2F0ZShmdW5jdGlvbiAoZGVzdCwgc3JjLCBtZXJnZSkge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHNyYyk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IGtleXMubGVuZ3RoKSB7XG4gICAgaWYgKCFtZXJnZSB8fCBtZXJnZSAmJiBkZXN0W2tleXNbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc3Rba2V5c1tpXV0gPSBzcmNba2V5c1tpXV07XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIGRlc3Q7XG59LCAnZXh0ZW5kJywgJ1VzZSBgYXNzaWduYC4nKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogbWVyZ2UgdGhlIHZhbHVlcyBmcm9tIHNyYyBpbiB0aGUgZGVzdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyB0aGF0IGV4aXN0IGluIGRlc3Qgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4gYnkgc3JjXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzdFxuICogQHBhcmFtIHtPYmplY3R9IHNyY1xuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBtZXJnZSA9IGRlcHJlY2F0ZShmdW5jdGlvbiAoZGVzdCwgc3JjKSB7XG4gIHJldHVybiBleHRlbmQoZGVzdCwgc3JjLCB0cnVlKTtcbn0sICdtZXJnZScsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBjbGFzcyBpbmhlcml0YW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hpbGRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGJhc2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllc11cbiAqL1xuXG5mdW5jdGlvbiBpbmhlcml0KGNoaWxkLCBiYXNlLCBwcm9wZXJ0aWVzKSB7XG4gIHZhciBiYXNlUCA9IGJhc2UucHJvdG90eXBlO1xuICB2YXIgY2hpbGRQO1xuICBjaGlsZFAgPSBjaGlsZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGJhc2VQKTtcbiAgY2hpbGRQLmNvbnN0cnVjdG9yID0gY2hpbGQ7XG4gIGNoaWxkUC5fc3VwZXIgPSBiYXNlUDtcblxuICBpZiAocHJvcGVydGllcykge1xuICAgIGFzc2lnbiQxKGNoaWxkUCwgcHJvcGVydGllcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogc2ltcGxlIGZ1bmN0aW9uIGJpbmRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge09iamVjdH0gY29udGV4dFxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBiaW5kRm4oZm4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvdW5kRm4oKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFNpbXBsZSB3YXkgdG8gY3JlYXRlIGEgbWFuYWdlciB3aXRoIGEgZGVmYXVsdCBzZXQgb2YgcmVjb2duaXplcnMuXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG52YXIgSGFtbWVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIEhhbW1lciA9XG4gIC8qKlxuICAgICogQHByaXZhdGVcbiAgICAqIEBjb25zdCB7c3RyaW5nfVxuICAgICovXG4gIGZ1bmN0aW9uIEhhbW1lcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTWFuYWdlcihlbGVtZW50LCBfZXh0ZW5kcyh7XG4gICAgICByZWNvZ25pemVyczogcHJlc2V0LmNvbmNhdCgpXG4gICAgfSwgb3B0aW9ucykpO1xuICB9O1xuXG4gIEhhbW1lci5WRVJTSU9OID0gXCIyLjAuMTctcmNcIjtcbiAgSGFtbWVyLkRJUkVDVElPTl9BTEwgPSBESVJFQ1RJT05fQUxMO1xuICBIYW1tZXIuRElSRUNUSU9OX0RPV04gPSBESVJFQ1RJT05fRE9XTjtcbiAgSGFtbWVyLkRJUkVDVElPTl9MRUZUID0gRElSRUNUSU9OX0xFRlQ7XG4gIEhhbW1lci5ESVJFQ1RJT05fUklHSFQgPSBESVJFQ1RJT05fUklHSFQ7XG4gIEhhbW1lci5ESVJFQ1RJT05fVVAgPSBESVJFQ1RJT05fVVA7XG4gIEhhbW1lci5ESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9IT1JJWk9OVEFMO1xuICBIYW1tZXIuRElSRUNUSU9OX1ZFUlRJQ0FMID0gRElSRUNUSU9OX1ZFUlRJQ0FMO1xuICBIYW1tZXIuRElSRUNUSU9OX05PTkUgPSBESVJFQ1RJT05fTk9ORTtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5JTlBVVF9TVEFSVCA9IElOUFVUX1NUQVJUO1xuICBIYW1tZXIuSU5QVVRfTU9WRSA9IElOUFVUX01PVkU7XG4gIEhhbW1lci5JTlBVVF9FTkQgPSBJTlBVVF9FTkQ7XG4gIEhhbW1lci5JTlBVVF9DQU5DRUwgPSBJTlBVVF9DQU5DRUw7XG4gIEhhbW1lci5TVEFURV9QT1NTSUJMRSA9IFNUQVRFX1BPU1NJQkxFO1xuICBIYW1tZXIuU1RBVEVfQkVHQU4gPSBTVEFURV9CRUdBTjtcbiAgSGFtbWVyLlNUQVRFX0NIQU5HRUQgPSBTVEFURV9DSEFOR0VEO1xuICBIYW1tZXIuU1RBVEVfRU5ERUQgPSBTVEFURV9FTkRFRDtcbiAgSGFtbWVyLlNUQVRFX1JFQ09HTklaRUQgPSBTVEFURV9SRUNPR05JWkVEO1xuICBIYW1tZXIuU1RBVEVfQ0FOQ0VMTEVEID0gU1RBVEVfQ0FOQ0VMTEVEO1xuICBIYW1tZXIuU1RBVEVfRkFJTEVEID0gU1RBVEVfRkFJTEVEO1xuICBIYW1tZXIuTWFuYWdlciA9IE1hbmFnZXI7XG4gIEhhbW1lci5JbnB1dCA9IElucHV0O1xuICBIYW1tZXIuVG91Y2hBY3Rpb24gPSBUb3VjaEFjdGlvbjtcbiAgSGFtbWVyLlRvdWNoSW5wdXQgPSBUb3VjaElucHV0O1xuICBIYW1tZXIuTW91c2VJbnB1dCA9IE1vdXNlSW5wdXQ7XG4gIEhhbW1lci5Qb2ludGVyRXZlbnRJbnB1dCA9IFBvaW50ZXJFdmVudElucHV0O1xuICBIYW1tZXIuVG91Y2hNb3VzZUlucHV0ID0gVG91Y2hNb3VzZUlucHV0O1xuICBIYW1tZXIuU2luZ2xlVG91Y2hJbnB1dCA9IFNpbmdsZVRvdWNoSW5wdXQ7XG4gIEhhbW1lci5SZWNvZ25pemVyID0gUmVjb2duaXplcjtcbiAgSGFtbWVyLkF0dHJSZWNvZ25pemVyID0gQXR0clJlY29nbml6ZXI7XG4gIEhhbW1lci5UYXAgPSBUYXBSZWNvZ25pemVyO1xuICBIYW1tZXIuUGFuID0gUGFuUmVjb2duaXplcjtcbiAgSGFtbWVyLlN3aXBlID0gU3dpcGVSZWNvZ25pemVyO1xuICBIYW1tZXIuUGluY2ggPSBQaW5jaFJlY29nbml6ZXI7XG4gIEhhbW1lci5Sb3RhdGUgPSBSb3RhdGVSZWNvZ25pemVyO1xuICBIYW1tZXIuUHJlc3MgPSBQcmVzc1JlY29nbml6ZXI7XG4gIEhhbW1lci5vbiA9IGFkZEV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIub2ZmID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5lYWNoID0gZWFjaDtcbiAgSGFtbWVyLm1lcmdlID0gbWVyZ2U7XG4gIEhhbW1lci5leHRlbmQgPSBleHRlbmQ7XG4gIEhhbW1lci5iaW5kRm4gPSBiaW5kRm47XG4gIEhhbW1lci5hc3NpZ24gPSBhc3NpZ24kMTtcbiAgSGFtbWVyLmluaGVyaXQgPSBpbmhlcml0O1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIucHJlZml4ZWQgPSBwcmVmaXhlZDtcbiAgSGFtbWVyLnRvQXJyYXkgPSB0b0FycmF5O1xuICBIYW1tZXIuaW5BcnJheSA9IGluQXJyYXk7XG4gIEhhbW1lci51bmlxdWVBcnJheSA9IHVuaXF1ZUFycmF5O1xuICBIYW1tZXIuc3BsaXRTdHIgPSBzcGxpdFN0cjtcbiAgSGFtbWVyLmJvb2xPckZuID0gYm9vbE9yRm47XG4gIEhhbW1lci5oYXNQYXJlbnQgPSBoYXNQYXJlbnQ7XG4gIEhhbW1lci5hZGRFdmVudExpc3RlbmVycyA9IGFkZEV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcnMgPSByZW1vdmVFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLmRlZmF1bHRzID0gYXNzaWduJDEoe30sIGRlZmF1bHRzLCB7XG4gICAgcHJlc2V0OiBwcmVzZXRcbiAgfSk7XG4gIHJldHVybiBIYW1tZXI7XG59KCk7XG5cbi8vICBzdHlsZSBsb2FkZXIgYnV0IGJ5IHNjcmlwdCB0YWcsIG5vdCBieSB0aGUgbG9hZGVyLlxuXG52YXIgZGVmYXVsdHMkMSA9IEhhbW1lci5kZWZhdWx0cztcblxuZXhwb3J0IGRlZmF1bHQgSGFtbWVyO1xuZXhwb3J0IHsgSU5QVVRfU1RBUlQsIElOUFVUX01PVkUsIElOUFVUX0VORCwgSU5QVVRfQ0FOQ0VMLCBTVEFURV9QT1NTSUJMRSwgU1RBVEVfQkVHQU4sIFNUQVRFX0NIQU5HRUQsIFNUQVRFX0VOREVELCBTVEFURV9SRUNPR05JWkVELCBTVEFURV9DQU5DRUxMRUQsIFNUQVRFX0ZBSUxFRCwgRElSRUNUSU9OX05PTkUsIERJUkVDVElPTl9MRUZULCBESVJFQ1RJT05fUklHSFQsIERJUkVDVElPTl9VUCwgRElSRUNUSU9OX0RPV04sIERJUkVDVElPTl9IT1JJWk9OVEFMLCBESVJFQ1RJT05fVkVSVElDQUwsIERJUkVDVElPTl9BTEwsIE1hbmFnZXIsIElucHV0LCBUb3VjaEFjdGlvbiwgVG91Y2hJbnB1dCwgTW91c2VJbnB1dCwgUG9pbnRlckV2ZW50SW5wdXQsIFRvdWNoTW91c2VJbnB1dCwgU2luZ2xlVG91Y2hJbnB1dCwgUmVjb2duaXplciwgQXR0clJlY29nbml6ZXIsIFRhcFJlY29nbml6ZXIgYXMgVGFwLCBQYW5SZWNvZ25pemVyIGFzIFBhbiwgU3dpcGVSZWNvZ25pemVyIGFzIFN3aXBlLCBQaW5jaFJlY29nbml6ZXIgYXMgUGluY2gsIFJvdGF0ZVJlY29nbml6ZXIgYXMgUm90YXRlLCBQcmVzc1JlY29nbml6ZXIgYXMgUHJlc3MsIGFkZEV2ZW50TGlzdGVuZXJzIGFzIG9uLCByZW1vdmVFdmVudExpc3RlbmVycyBhcyBvZmYsIGVhY2gsIG1lcmdlLCBleHRlbmQsIGFzc2lnbiQxIGFzIGFzc2lnbiwgaW5oZXJpdCwgYmluZEZuLCBwcmVmaXhlZCwgdG9BcnJheSwgaW5BcnJheSwgdW5pcXVlQXJyYXksIHNwbGl0U3RyLCBib29sT3JGbiwgaGFzUGFyZW50LCBhZGRFdmVudExpc3RlbmVycywgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMsIGRlZmF1bHRzJDEgYXMgZGVmYXVsdHMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhbW1lci5lc20uanMubWFwXG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmlsbCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWxsO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWxsKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZpbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiLyoqXG4gKiB2aXMtdXRpbFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Zpc2pzL3Zpcy11dGlsXG4gKlxuICogdXRpbGl0aWUgY29sbGVjdGlvbiBmb3IgdmlzanNcbiAqXG4gKiBAdmVyc2lvbiA1LjAuNVxuICogQGRhdGUgICAgMjAyMy0xMC0wM1QxODo0Nzo1OC4wNjFaXG4gKlxuICogQGNvcHlyaWdodCAoYykgMjAxMS0yMDE3IEFsbWVuZGUgQi5WLCBodHRwOi8vYWxtZW5kZS5jb21cbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTctMjAxOSB2aXNqcyBjb250cmlidXRvcnMsIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqc1xuICpcbiAqIEBsaWNlbnNlXG4gKiB2aXMuanMgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciBib3RoXG4gKlxuICogICAxLiBUaGUgQXBhY2hlIDIuMCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICAgYW5kXG4gKlxuICogICAyLiBUaGUgTUlUIExpY2Vuc2VcbiAqICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICpcbiAqIHZpcy5qcyBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgZWl0aGVyIGxpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IEVtaXR0ZXIgZnJvbSAnY29tcG9uZW50LWVtaXR0ZXInO1xuaW1wb3J0IFJlYWxIYW1tZXIgZnJvbSAnQGVnanMvaGFtbWVyanMnO1xuXG4vKipcclxuICogVXNlIHRoaXMgc3ltYm9sIHRvIGRlbGV0ZSBwcm9wZXJpZXMgaW4gZGVlcE9iamVjdEFzc2lnbi5cclxuICovXHJcbmNvbnN0IERFTEVURSA9IFN5bWJvbChcIkRFTEVURVwiKTtcclxuLyoqXHJcbiAqIFB1cmUgdmVyc2lvbiBvZiBkZWVwT2JqZWN0QXNzaWduLCBpdCBkb2Vzbid0IG1vZGlmeSBhbnkgb2YgaXQncyBhcmd1bWVudHMuXHJcbiAqXHJcbiAqIEBwYXJhbSBiYXNlIC0gVGhlIGJhc2Ugb2JqZWN0IHRoYXQgZnVsbGZpbHMgdGhlIHdob2xlIGludGVyZmFjZSBULlxyXG4gKiBAcGFyYW0gdXBkYXRlcyAtIFVwZGF0ZXMgdGhhdCBtYXkgY2hhbmdlIG9yIGRlbGV0ZSBwcm9wcy5cclxuICogQHJldHVybnMgQSBicmFuZCBuZXcgaW5zdGFuY2Ugd2l0aCBhbGwgdGhlIHN1cHBsaWVkIG9iamVjdHMgZGVlcGx5IG1lcmdlZC5cclxuICovXHJcbmZ1bmN0aW9uIHB1cmVEZWVwT2JqZWN0QXNzaWduKGJhc2UsIC4uLnVwZGF0ZXMpIHtcclxuICAgIHJldHVybiBkZWVwT2JqZWN0QXNzaWduKHt9LCBiYXNlLCAuLi51cGRhdGVzKTtcclxufVxyXG4vKipcclxuICogRGVlcCB2ZXJzaW9uIG9mIG9iamVjdCBhc3NpZ24gd2l0aCBhZGRpdGlvbmFsIGRlbGV0aW5nIGJ5IHRoZSBERUxFVEUgc3ltYm9sLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWVzIC0gT2JqZWN0cyB0byBiZSBkZWVwbHkgbWVyZ2VkLlxyXG4gKiBAcmV0dXJucyBUaGUgZmlyc3Qgb2JqZWN0IGZyb20gdmFsdWVzLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcE9iamVjdEFzc2lnbiguLi52YWx1ZXMpIHtcclxuICAgIGNvbnN0IG1lcmdlZCA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSguLi52YWx1ZXMpO1xyXG4gICAgc3RyaXBEZWxldGUobWVyZ2VkKTtcclxuICAgIHJldHVybiBtZXJnZWQ7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhpcyBkb2Vzbid0IHN0cmlwIHRoZSBERUxFVEUgc3ltYm9scyBzbyB0aGV5IG1heSBlbmQgdXAgaW4gdGhlIGZpbmFsIG9iamVjdC5cclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSguLi52YWx1ZXMpIHtcclxuICAgIGlmICh2YWx1ZXMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZXNbMF07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID4gMikge1xyXG4gICAgICAgIHJldHVybiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoZGVlcE9iamVjdEFzc2lnbih2YWx1ZXNbMF0sIHZhbHVlc1sxXSksIC4uLnZhbHVlcy5zbGljZSgyKSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhID0gdmFsdWVzWzBdO1xyXG4gICAgY29uc3QgYiA9IHZhbHVlc1sxXTtcclxuICAgIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgIGEuc2V0VGltZShiLmdldFRpbWUoKSk7XHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgUmVmbGVjdC5vd25LZXlzKGIpKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoYiwgcHJvcCkpIDtcclxuICAgICAgICBlbHNlIGlmIChiW3Byb3BdID09PSBERUxFVEUpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGFbcHJvcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgYltwcm9wXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgYltwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShhW3Byb3BdKSAmJlxyXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGFbcHJvcF0sIGJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGNsb25lKGJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIGNsb25lIGdpdmVuIG9iamVjdCBvciBhcnJheS4gSW4gY2FzZSBvZiBwcmltaXRpdmUgc2ltcGx5IHJldHVybi5cclxuICpcclxuICogQHBhcmFtIGEgLSBBbnl0aGluZy5cclxuICogQHJldHVybnMgRGVlcCBjbG9uZWQgb2JqZWN0L2FycmF5IG9yIHVuY2hhbmdlZCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gY2xvbmUoYSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcclxuICAgICAgICByZXR1cm4gYS5tYXAoKHZhbHVlKSA9PiBjbG9uZSh2YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGEgPT09IFwib2JqZWN0XCIgJiYgYSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChhIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoYS5nZXRUaW1lKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KHt9LCBhKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBTdHJpcCBERUxFVEUgZnJvbSBnaXZlbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHdoaWNoIG1heSBjb250YWluIERFTEVURSBidXQgd29uJ3QgYWZ0ZXIgdGhpcyBpcyBleGVjdXRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHN0cmlwRGVsZXRlKGEpIHtcclxuICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhhKSkge1xyXG4gICAgICAgIGlmIChhW3Byb3BdID09PSBERUxFVEUpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGFbcHJvcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBhW3Byb3BdID09PSBcIm9iamVjdFwiICYmIGFbcHJvcF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgc3RyaXBEZWxldGUoYVtwcm9wXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbi8qKlxyXG4gKiBTZWVkYWJsZSwgZmFzdCBhbmQgcmVhc29uYWJseSBnb29kIChub3QgY3J5cHRvIGJ1dCBtb3JlIHRoYW4gb2theSBmb3Igb3VyXHJcbiAqIG5lZWRzKSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci5cclxuICpcclxuICogQHJlbWFya3NcclxuICogQWRhcHRlZCBmcm9tIHtAbGluayBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMTA0MjkxMDA3MzYvaHR0cDovL2JhYWdvZS5jb206ODAvZW4vUmFuZG9tTXVzaW5ncy9qYXZhc2NyaXB0fS5cclxuICogT3JpZ2luYWwgYWxnb3JpdGhtIGNyZWF0ZWQgYnkgSm9oYW5uZXMgQmFhZ8O4ZSBcXDxiYWFnb2VcXEBiYWFnb2UuY29tXFw+IGluIDIwMTAuXHJcbiAqL1xyXG4vKipcclxuICogQ3JlYXRlIGEgc2VlZGVkIHBzZXVkbyByYW5kb20gZ2VuZXJhdG9yIGJhc2VkIG9uIEFsZWEgYnkgSm9oYW5uZXMgQmFhZ8O4ZS5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBbGwgc3VwcGxpZWQgYXJndW1lbnRzIHdpbGwgYmUgdXNlZCBhcyBhIHNlZWQuIEluIGNhc2Ugbm90aGluZ1xyXG4gKiBpcyBzdXBwbGllZCB0aGUgY3VycmVudCB0aW1lIHdpbGwgYmUgdXNlZCB0byBzZWVkIHRoZSBnZW5lcmF0b3IuXHJcbiAqIEByZXR1cm5zIEEgcmVhZHkgdG8gdXNlIHNlZWRlZCBnZW5lcmF0b3IuXHJcbiAqL1xyXG5mdW5jdGlvbiBBbGVhKC4uLnNlZWQpIHtcclxuICAgIHJldHVybiBBbGVhSW1wbGVtZW50YXRpb24oc2VlZC5sZW5ndGggPyBzZWVkIDogW0RhdGUubm93KCldKTtcclxufVxyXG4vKipcclxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgW1tBbGVhXV0gd2l0aG91dCB1c2VyIGlucHV0IHZhbGlkYXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gVGhlIGRhdGEgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQpIHtcclxuICAgIGxldCBbczAsIHMxLCBzMl0gPSBtYXNoU2VlZChzZWVkKTtcclxuICAgIGxldCBjID0gMTtcclxuICAgIGNvbnN0IHJhbmRvbSA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCB0ID0gMjA5MTYzOSAqIHMwICsgYyAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXHJcbiAgICAgICAgczAgPSBzMTtcclxuICAgICAgICBzMSA9IHMyO1xyXG4gICAgICAgIHJldHVybiAoczIgPSB0IC0gKGMgPSB0IHwgMCkpO1xyXG4gICAgfTtcclxuICAgIHJhbmRvbS51aW50MzIgPSAoKSA9PiByYW5kb20oKSAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXHJcbiAgICByYW5kb20uZnJhY3Q1MyA9ICgpID0+IHJhbmRvbSgpICsgKChyYW5kb20oKSAqIDB4MjAwMDAwKSB8IDApICogMS4xMTAyMjMwMjQ2MjUxNTY1ZS0xNjsgLy8gMl4tNTNcclxuICAgIHJhbmRvbS5hbGdvcml0aG0gPSBcIkFsZWFcIjtcclxuICAgIHJhbmRvbS5zZWVkID0gc2VlZDtcclxuICAgIHJhbmRvbS52ZXJzaW9uID0gXCIwLjlcIjtcclxuICAgIHJldHVybiByYW5kb207XHJcbn1cclxuLyoqXHJcbiAqIFR1cm4gYXJiaXRyYXJ5IGRhdGEgaW50byB2YWx1ZXMgW1tBbGVhSW1wbGVtZW50YXRpb25dXSBjYW4gdXNlIHRvIGdlbmVyYXRlXHJcbiAqIHJhbmRvbSBudW1iZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIEFyYml0cmFyeSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBzZWVkLlxyXG4gKiBAcmV0dXJucyBUaHJlZSBudW1iZXJzIHRvIHVzZSBhcyBpbml0aWFsIHZhbHVlcyBmb3IgW1tBbGVhSW1wbGVtZW50YXRpb25dXS5cclxuICovXHJcbmZ1bmN0aW9uIG1hc2hTZWVkKC4uLnNlZWQpIHtcclxuICAgIGNvbnN0IG1hc2ggPSBNYXNoKCk7XHJcbiAgICBsZXQgczAgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMSA9IG1hc2goXCIgXCIpO1xyXG4gICAgbGV0IHMyID0gbWFzaChcIiBcIik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBzMCAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMCA8IDApIHtcclxuICAgICAgICAgICAgczAgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgczEgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczEgPCAwKSB7XHJcbiAgICAgICAgICAgIHMxICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMyIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMyIDwgMCkge1xyXG4gICAgICAgICAgICBzMiArPSAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbczAsIHMxLCBzMl07XHJcbn1cclxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyBtYXNoIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJucyBBIG5vbnB1cmUgZnVuY3Rpb24gdGhhdCB0YWtlcyBhcmJpdHJhcnkgW1tNYXNoYWJsZV1dIGRhdGEgYW5kIHR1cm5zXHJcbiAqIHRoZW0gaW50byBudW1iZXJzLlxyXG4gKi9cclxuZnVuY3Rpb24gTWFzaCgpIHtcclxuICAgIGxldCBuID0gMHhlZmM4MjQ5ZDtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHN0cmluZyA9IGRhdGEudG9TdHJpbmcoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBuICs9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgICAgICBsZXQgaCA9IDAuMDI1MTk2MDMyODI0MTY5MzggKiBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBoICo9IG47XHJcbiAgICAgICAgICAgIG4gPSBoID4+PiAwO1xyXG4gICAgICAgICAgICBoIC09IG47XHJcbiAgICAgICAgICAgIG4gKz0gaCAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAobiA+Pj4gMCkgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgfTtcclxufVxuXG4vKipcbiAqIFNldHVwIGEgbW9jayBoYW1tZXIuanMgb2JqZWN0LCBmb3IgdW5pdCB0ZXN0aW5nLlxuICpcbiAqIEluc3BpcmF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vdWJlci9kZWNrLmdsL3B1bGwvNjU4XG4gKlxuICogQHJldHVybnMge3tvbjogbm9vcCwgb2ZmOiBub29wLCBkZXN0cm95OiBub29wLCBlbWl0OiBub29wLCBnZXQ6IGdldH19XG4gKi9cbmZ1bmN0aW9uIGhhbW1lck1vY2soKSB7XG4gIGNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuICByZXR1cm4ge1xuICAgIG9uOiBub29wLFxuICAgIG9mZjogbm9vcCxcbiAgICBkZXN0cm95OiBub29wLFxuICAgIGVtaXQ6IG5vb3AsXG5cbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXQ6IG5vb3AsXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG5cbmNvbnN0IEhhbW1lciQxID1cbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIlxuICAgID8gd2luZG93LkhhbW1lciB8fCBSZWFsSGFtbWVyXG4gICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGhhbW1lci5qcyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBhIGJyb3dzZXIsIG5vdCBpbiBub2RlLmpzLiBSZXBsYWNpbmcgaXQgd2l0aCBhIG1vY2sgb2JqZWN0LlxuICAgICAgICByZXR1cm4gaGFtbWVyTW9jaygpO1xuICAgICAgfTtcblxuLyoqXG4gKiBUdXJuIGFuIGVsZW1lbnQgaW50byBhbiBjbGlja1RvVXNlIGVsZW1lbnQuXG4gKiBXaGVuIG5vdCBhY3RpdmUsIHRoZSBlbGVtZW50IGhhcyBhIHRyYW5zcGFyZW50IG92ZXJsYXkuIFdoZW4gdGhlIG92ZXJsYXkgaXNcbiAqIGNsaWNrZWQsIHRoZSBtb2RlIGlzIGNoYW5nZWQgdG8gYWN0aXZlLlxuICogV2hlbiBhY3RpdmUsIHRoZSBlbGVtZW50IGlzIGRpc3BsYXllZCB3aXRoIGEgYmx1ZSBib3JkZXIgYXJvdW5kIGl0LCBhbmRcbiAqIHRoZSBpbnRlcmFjdGl2ZSBjb250ZW50cyBvZiB0aGUgZWxlbWVudCBjYW4gYmUgdXNlZC4gV2hlbiBjbGlja2VkIG91dHNpZGVcbiAqIHRoZSBlbGVtZW50LCB0aGUgZWxlbWVudHMgbW9kZSBpcyBjaGFuZ2VkIHRvIGluYWN0aXZlLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyXG4gKiBAY2xhc3MgQWN0aXZhdG9yXG4gKi9cbmZ1bmN0aW9uIEFjdGl2YXRvciQxKGNvbnRhaW5lcikge1xuICB0aGlzLl9jbGVhbnVwUXVldWUgPSBbXTtcblxuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuXG4gIHRoaXMuX2RvbSA9IHtcbiAgICBjb250YWluZXIsXG4gICAgb3ZlcmxheTogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxcbiAgfTtcblxuICB0aGlzLl9kb20ub3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwidmlzLW92ZXJsYXlcIik7XG5cbiAgdGhpcy5fZG9tLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIHRoaXMuX2NsZWFudXBRdWV1ZS5wdXNoKCgpID0+IHtcbiAgICB0aGlzLl9kb20ub3ZlcmxheS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgfSk7XG5cbiAgY29uc3QgaGFtbWVyID0gSGFtbWVyJDEodGhpcy5fZG9tLm92ZXJsYXkpO1xuICBoYW1tZXIub24oXCJ0YXBcIiwgdGhpcy5fb25UYXBPdmVybGF5LmJpbmQodGhpcykpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgaGFtbWVyLmRlc3Ryb3koKTtcbiAgICAvLyBGSVhNRTogY2xlYW5pbmcgdXAgaGFtbWVyIGluc3RhbmNlcyBkb2Vzbid0IHdvcmsgKFRpbWVsaW5lIG5vdCByZW1vdmVkXG4gICAgLy8gZnJvbSBtZW1vcnkpXG4gIH0pO1xuXG4gIC8vIGJsb2NrIGFsbCB0b3VjaCBldmVudHMgKGV4Y2VwdCB0YXApXG4gIGNvbnN0IGV2ZW50cyA9IFtcbiAgICBcInRhcFwiLFxuICAgIFwiZG91YmxldGFwXCIsXG4gICAgXCJwcmVzc1wiLFxuICAgIFwicGluY2hcIixcbiAgICBcInBhblwiLFxuICAgIFwicGFuc3RhcnRcIixcbiAgICBcInBhbm1vdmVcIixcbiAgICBcInBhbmVuZFwiLFxuICBdO1xuICBldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICBoYW1tZXIub24oZXZlbnQsIChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuc3JjRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIGF0dGFjaCBhIGNsaWNrIGV2ZW50IHRvIHRoZSB3aW5kb3csIGluIG9yZGVyIHRvIGRlYWN0aXZhdGUgd2hlbiBjbGlja2luZyBvdXRzaWRlIHRoZSB0aW1lbGluZVxuICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQuYm9keSkge1xuICAgIHRoaXMuX29uQ2xpY2sgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghX2hhc1BhcmVudChldmVudC50YXJnZXQsIGNvbnRhaW5lcikpIHtcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9vbkNsaWNrKTtcbiAgICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9vbkNsaWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHByZXBhcmUgZXNjYXBlIGtleSBsaXN0ZW5lciBmb3IgZGVhY3RpdmF0aW5nIHdoZW4gYWN0aXZlXG4gIHRoaXMuX2VzY0xpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKFxuICAgICAgXCJrZXlcIiBpbiBldmVudFxuICAgICAgICA/IGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIlxuICAgICAgICA6IGV2ZW50LmtleUNvZGUgPT09IDI3IC8qIHRoZSBrZXlDb2RlIGlzIGZvciBJRTExICovXG4gICAgKSB7XG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgICB9XG4gIH07XG59XG5cbi8vIHR1cm4gaW50byBhbiBldmVudCBlbWl0dGVyXG5FbWl0dGVyKEFjdGl2YXRvciQxLnByb3RvdHlwZSk7XG5cbi8vIFRoZSBjdXJyZW50bHkgYWN0aXZlIGFjdGl2YXRvclxuQWN0aXZhdG9yJDEuY3VycmVudCA9IG51bGw7XG5cbi8qKlxuICogRGVzdHJveSB0aGUgYWN0aXZhdG9yLiBDbGVhbnMgdXAgYWxsIGNyZWF0ZWQgRE9NIGFuZCBldmVudCBsaXN0ZW5lcnNcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZGVhY3RpdmF0ZSgpO1xuXG4gIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgdGhpcy5fY2xlYW51cFF1ZXVlLnNwbGljZSgwKS5yZXZlcnNlKCkpIHtcbiAgICBjYWxsYmFjaygpO1xuICB9XG59O1xuXG4vKipcbiAqIEFjdGl2YXRlIHRoZSBlbGVtZW50XG4gKiBPdmVybGF5IGlzIGhpZGRlbiwgZWxlbWVudCBpcyBkZWNvcmF0ZWQgd2l0aCBhIGJsdWUgc2hhZG93IGJvcmRlclxuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIHdlIGFsbG93IG9ubHkgb25lIGFjdGl2ZSBhY3RpdmF0b3IgYXQgYSB0aW1lXG4gIGlmIChBY3RpdmF0b3IkMS5jdXJyZW50KSB7XG4gICAgQWN0aXZhdG9yJDEuY3VycmVudC5kZWFjdGl2YXRlKCk7XG4gIH1cbiAgQWN0aXZhdG9yJDEuY3VycmVudCA9IHRoaXM7XG5cbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gIHRoaXMuX2RvbS5jb250YWluZXIuY2xhc3NMaXN0LmFkZChcInZpcy1hY3RpdmVcIik7XG5cbiAgdGhpcy5lbWl0KFwiY2hhbmdlXCIpO1xuICB0aGlzLmVtaXQoXCJhY3RpdmF0ZVwiKTtcblxuICAvLyB1Z2x5IGhhY2s6IGJpbmQgRVNDIGFmdGVyIGVtaXR0aW5nIHRoZSBldmVudHMsIGFzIHRoZSBOZXR3b3JrIHJlYmluZHMgYWxsXG4gIC8vIGtleWJvYXJkIGV2ZW50cyBvbiBhICdjaGFuZ2UnIGV2ZW50XG4gIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5fZXNjTGlzdGVuZXIpO1xufTtcblxuLyoqXG4gKiBEZWFjdGl2YXRlIHRoZSBlbGVtZW50XG4gKiBPdmVybGF5IGlzIGRpc3BsYXllZCBvbiB0b3Agb2YgdGhlIGVsZW1lbnRcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmRlYWN0aXZhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gIHRoaXMuX2RvbS5vdmVybGF5LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gIHRoaXMuX2RvbS5jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcInZpcy1hY3RpdmVcIik7XG4gIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5fZXNjTGlzdGVuZXIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiZGVhY3RpdmF0ZVwiKTtcbn07XG5cbi8qKlxuICogSGFuZGxlIGEgdGFwIGV2ZW50OiBhY3RpdmF0ZSB0aGUgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gKiBAcHJpdmF0ZVxuICovXG5BY3RpdmF0b3IkMS5wcm90b3R5cGUuX29uVGFwT3ZlcmxheSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAvLyBhY3RpdmF0ZSB0aGUgY29udGFpbmVyXG4gIHRoaXMuYWN0aXZhdGUoKTtcbiAgZXZlbnQuc3JjRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59O1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgZWxlbWVudCBoYXMgdGhlIHJlcXVlc3RlZCBwYXJlbnQgZWxlbWVudCBzb21ld2hlcmUgaW5cbiAqIGl0cyBjaGFpbiBvZiBwYXJlbnQgbm9kZXMuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHBhcmVudCBpcyBmb3VuZCBzb21ld2hlcmUgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX2hhc1BhcmVudChlbGVtZW50LCBwYXJlbnQpIHtcbiAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudCA9PT0gcGFyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIHV0aWxpdHkgZnVuY3Rpb25zXHJcbi8vIHBhcnNlIEFTUC5OZXQgRGF0ZSBwYXR0ZXJuLFxyXG4vLyBmb3IgZXhhbXBsZSAnL0RhdGUoMTE5ODkwODcxNzA1NikvJyBvciAnL0RhdGUoMTE5ODkwODcxNzA1Ni0wNzAwKS8nXHJcbi8vIGNvZGUgZnJvbSBodHRwOi8vbW9tZW50anMuY29tL1xyXG5jb25zdCBBU1BEYXRlUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaTtcclxuLy8gQ29sb3IgUkVzXHJcbmNvbnN0IGZ1bGxIZXhSRSA9IC9eIz8oW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkkL2k7XHJcbmNvbnN0IHNob3J0SGV4UkUgPSAvXiM/KFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pO1xyXG5jb25zdCByZ2JSRSA9IC9ecmdiXFwoICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICpcXCkkL2k7XHJcbmNvbnN0IHJnYmFSRSA9IC9ecmdiYVxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKFswMV18MD9cXC5cXGQrKSAqXFwpJC9pO1xyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIG51bWJlci5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIG51bWJlciwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE51bWJlciB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBldmVyeXRoaW5nIGluIHRoZSBET00gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gRE9Nb2JqZWN0IC0gTm9kZSB3aG9zZSBjaGlsZCBub2RlcyB3aWxsIGJlIHJlY3Vyc2l2ZWx5IGRlbGV0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiByZWN1cnNpdmVET01EZWxldGUoRE9Nb2JqZWN0KSB7XHJcbiAgICBpZiAoRE9Nb2JqZWN0KSB7XHJcbiAgICAgICAgd2hpbGUgKERPTW9iamVjdC5oYXNDaGlsZE5vZGVzKCkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBET01vYmplY3QuZmlyc3RDaGlsZDtcclxuICAgICAgICAgICAgaWYgKGNoaWxkKSB7XHJcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVET01EZWxldGUoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgRE9Nb2JqZWN0LnJlbW92ZUNoaWxkKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHZhbHVlIC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHN0cmluZywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCI7XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBvYmplY3QgKG5vdCBwcmltaXRpdmUgb3IgbnVsbCkuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBub3QgbnVsbCBvYmplY3QsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgRGF0ZSwgb3IgYSBTdHJpbmcgY29udGFpbmluZyBhIERhdGUuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBEYXRlIGluc3RhbmNlIG9yIHN0cmluZyBkYXRlIHJlcHJlc2VudGF0aW9uLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0RhdGUodmFsdWUpIHtcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgIC8vIHRlc3Qgd2hldGhlciB0aGlzIHN0cmluZyBjb250YWlucyBhIGRhdGVcclxuICAgICAgICBjb25zdCBtYXRjaCA9IEFTUERhdGVSZWdleC5leGVjKHZhbHVlKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKCFpc05hTihEYXRlLnBhcnNlKHZhbHVlKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcbi8qKlxyXG4gKiBDb3B5IHByb3BlcnR5IGZyb20gYiB0byBhIGlmIHByb3BlcnR5IHByZXNlbnQgaW4gYS5cclxuICogSWYgcHJvcGVydHkgaW4gYiBleHBsaWNpdGx5IHNldCB0byBudWxsLCBkZWxldGUgaXQgaWYgYGFsbG93RGVsZXRpb25gIHNldC5cclxuICpcclxuICogSW50ZXJuYWwgaGVscGVyIHJvdXRpbmUsIHNob3VsZCBub3QgYmUgZXhwb3J0ZWQuIE5vdCBhZGRlZCB0byBgZXhwb3J0c2AgZm9yIHRoYXQgcmVhc29uLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRhcmdldCBvYmplY3QuXHJcbiAqIEBwYXJhbSBiIC0gU291cmNlIG9iamVjdC5cclxuICogQHBhcmFtIHByb3AgLSBOYW1lIG9mIHByb3BlcnR5IHRvIGNvcHkgZnJvbSBiIHRvIGEuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnR5IGluIGEgaWYgZXhwbGljaXRseSBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pIHtcclxuICAgIGxldCBkb0RlbGV0aW9uID0gZmFsc2U7XHJcbiAgICBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGRvRGVsZXRpb24gPSBiW3Byb3BdID09PSBudWxsICYmIGFbcHJvcF0gIT09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGlmIChkb0RlbGV0aW9uKSB7XHJcbiAgICAgICAgZGVsZXRlIGFbcHJvcF07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBhW3Byb3BdID0gYltwcm9wXTsgLy8gUmVtZW1iZXIsIHRoaXMgaXMgYSByZWZlcmVuY2UgY29weSFcclxuICAgIH1cclxufVxyXG4vKipcclxuICogRmlsbCBhbiBvYmplY3Qgd2l0aCBhIHBvc3NpYmx5IHBhcnRpYWxseSBkZWZpbmVkIG90aGVyIG9iamVjdC5cclxuICpcclxuICogT25seSBjb3BpZXMgdmFsdWVzIGZvciB0aGUgcHJvcGVydGllcyBhbHJlYWR5IHByZXNlbnQgaW4gYS5cclxuICogVGhhdCBtZWFucyBhbiBvYmplY3QgaXMgbm90IGNyZWF0ZWQgb24gYSBwcm9wZXJ0eSBpZiBvbmx5IHRoZSBiIG9iamVjdCBoYXMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIG9iamVjdCB0aGF0IHdpbGwgaGF2ZSBpdCdzIHByb3BlcnRpZXMgdXBkYXRlZC5cclxuICogQHBhcmFtIGIgLSBUaGUgb2JqZWN0IHdpdGggcHJvcGVydHkgdXBkYXRlcy5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGZpbGxJZkRlZmluZWQoYSwgYiwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBOT1RFOiBpdGVyYXRpb24gb2YgcHJvcGVydGllcyBvZiBhXHJcbiAgICAvLyBOT1RFOiBwcm90b3R5cGUgcHJvcGVydGllcyBpdGVyYXRlZCBvdmVyIGFzIHdlbGxcclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBhKSB7XHJcbiAgICAgICAgaWYgKGJbcHJvcF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSA9PT0gbnVsbCB8fCB0eXBlb2YgYltwcm9wXSAhPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gTm90ZTogdHlwZW9mIG51bGwgPT09ICdvYmplY3QnXHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhUHJvcCA9IGFbcHJvcF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiUHJvcCA9IGJbcHJvcF07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QoYVByb3ApICYmIGlzT2JqZWN0KGJQcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGxJZkRlZmluZWQoYVByb3AsIGJQcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIG9mIGFsbCBvZiB0aGUgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGFcclxuICogdGFyZ2V0IG9iamVjdC4gUmV0dXJucyB0aGUgdGFyZ2V0IG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIGNvcHkgdG8uXHJcbiAqIEBwYXJhbSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCBmcm9tIHdoaWNoIHRvIGNvcHkgcHJvcGVydGllcy5cclxuICogQHJldHVybnMgVGhlIHRhcmdldCBvYmplY3QuXHJcbiAqL1xyXG5jb25zdCBleHRlbmQgPSBPYmplY3QuYXNzaWduO1xyXG4vKipcclxuICogRXh0ZW5kIG9iamVjdCBhIHdpdGggc2VsZWN0ZWQgcHJvcGVydGllcyBvZiBvYmplY3QgYiBvciBhIHNlcmllcyBvZiBvYmplY3RzLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHMgLSBQcm9wZXJ0aWVzIHRvIGJlIGNvcGllZCB0byBhLlxyXG4gKiBAcGFyYW0gYSAtIFRoZSB0YXJnZXQuXHJcbiAqIEBwYXJhbSBvdGhlcnMgLSBUaGUgc291cmNlcy5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZUV4dGVuZChwcm9wcywgYSwgLi4ub3RoZXJzKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXJyYXkgd2l0aCBwcm9wZXJ0eSBuYW1lcyBleHBlY3RlZCBhcyBmaXJzdCBhcmd1bWVudFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgb3RoZXIgb2Ygb3RoZXJzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBwcm9wcy5sZW5ndGg7IHArKykge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgICAgIGlmIChvdGhlciAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdID0gb3RoZXJbcHJvcF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRXh0ZW5kIG9iamVjdCBhIHdpdGggc2VsZWN0ZWQgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogUHJldmlvdXMgdmVyc2lvbiBvZiB0aGlzIHJvdXRpbmUgaW1wbGllZCB0aGF0IG11bHRpcGxlIHNvdXJjZSBvYmplY3RzIGNvdWxkXHJcbiAqIGJlIHVzZWQ7IGhvd2V2ZXIsIHRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgKip3cm9uZyoqLiBTaW5jZSBtdWx0aXBsZSAoXFw+MSlcclxuICogc291cmNlcyB3ZXJlbid0IHVzZWQgYW55d2hlcmUgaW4gdGhlIGB2aXMuanNgIGNvZGUsIHRoaXMgaGFzIGJlZW4gcmVtb3ZlZFxyXG4gKiBAcGFyYW0gcHJvcHMgLSBOYW1lcyBvZiBmaXJzdC1sZXZlbCBwcm9wZXJ0aWVzIHRvIGNvcHkgb3Zlci5cclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnR5IGluIGEgaWYgZXhwbGljaXRseSBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlRGVlcEV4dGVuZChwcm9wcywgYSwgYiwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgQXJyYXlzIHRvIGRlZXBFeHRlbmRcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgcCA9IDA7IHAgPCBwcm9wcy5sZW5ndGg7IHArKykge1xyXG4gICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1twXTtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHByb3ApKSB7XHJcbiAgICAgICAgICAgIGlmIChiW3Byb3BdICYmIGJbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFbcHJvcF0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0sIGZhbHNlLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRXh0ZW5kIG9iamVjdCBgYWAgd2l0aCBwcm9wZXJ0aWVzIG9mIG9iamVjdCBgYmAsIGlnbm9yaW5nIHByb3BlcnRpZXMgd2hpY2hcclxuICogYXJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHRvIGJlIGV4Y2x1ZGVkLlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGUgcHJvcGVydGllcyBvZiBgYmAgYXJlIGNvbnNpZGVyZWQgZm9yIGNvcHlpbmcuIFByb3BlcnRpZXMgd2hpY2ggYXJlXHJcbiAqIHRoZW1zZWx2ZXMgb2JqZWN0cyBhcmUgYXJlIGFsc28gZXh0ZW5kZWQuIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWRcclxuICogdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBwcm9wc1RvRXhjbHVkZSAtIE5hbWVzIG9mIHByb3BlcnRpZXMgd2hpY2ggc2hvdWxkICpub3QqIGJlIGNvcGllZC5cclxuICogQHBhcmFtIGEgLSBPYmplY3QgdG8gZXh0ZW5kLlxyXG4gKiBAcGFyYW0gYiAtIE9iamVjdCB0byB0YWtlIHByb3BlcnRpZXMgZnJvbSBmb3IgZXh0ZW5zaW9uLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0aWVzIGluIGEgdGhhdCBhcmUgZXhwbGljaXRseVxyXG4gKiBzZXQgdG8gbnVsbCBpbiBiLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gc2VsZWN0aXZlTm90RGVlcEV4dGVuZChwcm9wc1RvRXhjbHVkZSwgYSwgYiwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgQXJyYXlzIHRvIGRlZXBFeHRlbmRcclxuICAgIC8vIE5PVEU6IGFycmF5IHByb3BlcnRpZXMgaGF2ZSBhbiBlbHNlLWJlbG93OyBhcHBhcmVudGx5LCB0aGVyZSBpcyBhIHByb2JsZW0gaGVyZS5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIGluIGIpIHtcclxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9IC8vIEhhbmRsZSBsb2NhbCBwcm9wZXJ0aWVzIG9ubHlcclxuICAgICAgICBpZiAocHJvcHNUb0V4Y2x1ZGUuaW5jbHVkZXMocHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBJbiBleGNsdXNpb24gbGlzdCwgc2tpcFxyXG4gICAgICAgIGlmIChiW3Byb3BdICYmIGJbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoYVtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdKTsgLy8gTk9URTogYWxsb3dEZWxldGlvbiBub3QgcHJvcGFnYXRlZCFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiW3Byb3BdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdLnB1c2goYltwcm9wXVtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBleHRlbmQgYW4gb2JqZWN0IGEgd2l0aCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm90b0V4dGVuZCAtIElmIHRydWUsIHRoZSBwcm90b3R5cGUgdmFsdWVzIHdpbGwgYWxzbyBiZSBleHRlbmRlZC5cclxuICogKFRoYXQgaXMgdGhlIG9wdGlvbnMgb2JqZWN0cyB0aGF0IGluaGVyaXQgZnJvbSBvdGhlcnMgd2lsbCBhbHNvIGdldCB0aGVcclxuICogaW5oZXJpdGVkIG9wdGlvbnMpLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIHRoZSB2YWx1ZXMgb2YgZmllbGRzIHRoYXQgYXJlIG51bGwgd2lsbCBiZSBkZWxldGVkLlxyXG4gKiBAcmV0dXJucyBBcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gZGVlcEV4dGVuZChhLCBiLCBwcm90b0V4dGVuZCA9IGZhbHNlLCBhbGxvd0RlbGV0aW9uID0gZmFsc2UpIHtcclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSB8fCBwcm90b0V4dGVuZCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihiW3Byb3BdKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFbcHJvcF0gPSBkZWVwRXh0ZW5kKHt9LCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGFbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYVtwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0sIHByb3RvRXh0ZW5kKTsgLy8gTk9URTogYWxsb3dEZWxldGlvbiBub3QgcHJvcGFnYXRlZCFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XHJcbiAgICAgICAgICAgICAgICBhW3Byb3BdID0gYltwcm9wXS5zbGljZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBhbGwgZWxlbWVudHMgaW4gdHdvIGFycmF5cyBhcmUgZXF1YWwuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gRmlyc3QgYXJyYXkuXHJcbiAqIEBwYXJhbSBiIC0gU2Vjb25kIGFycmF5LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIGJvdGggYXJyYXlzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzYW1lIGVsZW1lbnRzICgxID0gJzEnKS5cclxuICovXHJcbmZ1bmN0aW9uIGVxdWFsQXJyYXkoYSwgYikge1xyXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuLyoqXHJcbiAqIEdldCB0aGUgdHlwZSBvZiBhbiBvYmplY3QsIGZvciBleGFtcGxlIGV4cG9ydHMuZ2V0VHlwZShbXSkgcmV0dXJucyAnQXJyYXknLlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqZWN0IC0gSW5wdXQgdmFsdWUgb2YgdW5rbm93biB0eXBlLlxyXG4gKiBAcmV0dXJucyBEZXRlY3RlZCB0eXBlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0VHlwZShvYmplY3QpIHtcclxuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xyXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiQm9vbGVhblwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIk51bWJlclwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlN0cmluZ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkFycmF5XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkRhdGVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiT2JqZWN0XCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIHJldHVybiBcIk51bWJlclwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiQm9vbGVhblwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcclxuICAgIH1cclxuICAgIHJldHVybiB0eXBlO1xyXG59XHJcbi8qKlxyXG4gKiBVc2VkIHRvIGV4dGVuZCBhbiBhcnJheSBhbmQgY29weSBpdC4gVGhpcyBpcyB1c2VkIHRvIHByb3BhZ2F0ZSBwYXRocyByZWN1cnNpdmVseS5cclxuICpcclxuICogQHBhcmFtIGFyciAtIEZpcnN0IHBhcnQuXHJcbiAqIEBwYXJhbSBuZXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBhYWRkZWQgaW50byB0aGUgYXJyYXkuXHJcbiAqIEByZXR1cm5zIEEgbmV3IGFycmF5IHdpdGggYWxsIGl0ZW1zIGZyb20gYXJyIGFuZCBuZXdWYWx1ZSAod2hpY2ggaXMgbGFzdCkuXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3B5QW5kRXh0ZW5kQXJyYXkoYXJyLCBuZXdWYWx1ZSkge1xyXG4gICAgcmV0dXJuIFsuLi5hcnIsIG5ld1ZhbHVlXTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBUaGUgYXJyYXkgdG8gYmUgY29waWVkLlxyXG4gKiBAcmV0dXJucyBTaGFsbG93IGNvcHkgb2YgYXJyLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFycmF5KGFycikge1xyXG4gICAgcmV0dXJuIGFyci5zbGljZSgpO1xyXG59XHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgbGVmdCB2YWx1ZSBvZiBhIERPTSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIEEgZG9tIGVsZW1lbnQsIGZvciBleGFtcGxlIGEgZGl2LlxyXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgbGVmdCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlTGVmdChlbGVtKSB7XHJcbiAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xyXG59XHJcbi8qKlxyXG4gKiBSZXRyaWV2ZSB0aGUgYWJzb2x1dGUgcmlnaHQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHJpZ2h0IHBvc2l0aW9uIG9mIHRoaXMgZWxlbWVudCBpbiB0aGUgYnJvd3NlciBwYWdlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVSaWdodChlbGVtKSB7XHJcbiAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHRvcCB2YWx1ZSBvZiBhIERPTSBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIEEgZG9tIGVsZW1lbnQsIGZvciBleGFtcGxlIGEgZGl2LlxyXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgdG9wIHBvc2l0aW9uIG9mIHRoaXMgZWxlbWVudCBpbiB0aGUgYnJvd3NlciBwYWdlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVUb3AoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xyXG59XHJcbi8qKlxyXG4gKiBBZGQgYSBjbGFzc05hbWUgdG8gdGhlIGdpdmVuIGVsZW1lbnRzIHN0eWxlLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbSAtIFRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBjbGFzc2VzIHdpbGwgYmUgYWRkZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIGFkZENsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG5ld0NsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmNvbmNhdChuZXdDbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFjbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KSk7XHJcbiAgICBlbGVtLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbihcIiBcIik7XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhIGNsYXNzTmFtZSBmcm9tIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCBmcm9tIHdoaWNoIHRoZSBjbGFzc2VzIHdpbGwgYmUgcmVtb3ZlZC5cclxuICogQHBhcmFtIGNsYXNzTmFtZXMgLSBTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZXMpIHtcclxuICAgIGxldCBjbGFzc2VzID0gZWxlbS5jbGFzc05hbWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgY29uc3Qgb2xkQ2xhc3NlcyA9IGNsYXNzTmFtZXMuc3BsaXQoXCIgXCIpO1xyXG4gICAgY2xhc3NlcyA9IGNsYXNzZXMuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcclxuICAgICAgICByZXR1cm4gIW9sZENsYXNzZXMuaW5jbHVkZXMoY2xhc3NOYW1lKTtcclxuICAgIH0pO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBGb3IgZWFjaCBtZXRob2QgZm9yIGJvdGggYXJyYXlzIGFuZCBvYmplY3RzLlxyXG4gKiBJbiBjYXNlIG9mIGFuIGFycmF5LCB0aGUgYnVpbHQtaW4gQXJyYXkuZm9yRWFjaCgpIGlzIGFwcGxpZWQgKCoqTm8sIGl0J3Mgbm90ISoqKS5cclxuICogSW4gY2FzZSBvZiBhbiBPYmplY3QsIHRoZSBtZXRob2QgbG9vcHMgb3ZlciBhbGwgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gb2JqZWN0IC0gQW4gT2JqZWN0IG9yIEFycmF5IHRvIGJlIGl0ZXJhdGVkIG92ZXIuXHJcbiAqIEBwYXJhbSBjYWxsYmFjayAtIEFycmF5LmZvckVhY2gtbGlrZSBjYWxsYmFjay5cclxuICovXHJcbmZ1bmN0aW9uIGZvckVhY2gob2JqZWN0LCBjYWxsYmFjaykge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgIC8vIGFycmF5XHJcbiAgICAgICAgY29uc3QgbGVuID0gb2JqZWN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG9iamVjdFtpXSwgaSwgb2JqZWN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBvYmplY3RcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG9iamVjdFtrZXldLCBrZXksIG9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYW4gYXJyYXk6IGFsbCBvYmplY3RzIHByb3BlcnRpZXMgYXJlIHB1dCBpbnRvIHRoZSBhcnJheS4gVGhlIHJlc3VsdGluZyBhcnJheSBpcyB1bm9yZGVyZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSBvIC0gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuXHJcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVub3JkZXJlZCB2YWx1ZXMuXHJcbiAqL1xyXG5jb25zdCB0b0FycmF5ID0gT2JqZWN0LnZhbHVlcztcclxuLyoqXHJcbiAqIFVwZGF0ZSBhIHByb3BlcnR5IGluIGFuIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydHkgd2lsbCBiZSB1cGRhdGVkLlxyXG4gKiBAcGFyYW0ga2V5IC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIHZhbHVlIC0gVGhlIG5ldyB2YWx1ZSB0byBiZSBhc3NpZ25lZC5cclxuICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgd2FzIHVwZGF0ZWQgKHRydWUpIG9yIGFscmVhZHkgc3RyaWN0bHkgdGhlIHNhbWUgaW4gdGhlIG9yaWdpbmFsIG9iamVjdCAoZmFsc2UpLlxyXG4gKi9cclxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydHkob2JqZWN0LCBrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAob2JqZWN0W2tleV0gIT09IHZhbHVlKSB7XHJcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhyb3R0bGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHRvIGJlIG9ubHkgZXhlY3V0ZWQgb25jZSBwZXIgYW5pbWF0aW9uIGZyYW1lLlxyXG4gKlxyXG4gKiBAcGFyYW0gZm4gLSBUaGUgb3JpZ2luYWwgZnVuY3Rpb24uXHJcbiAqIEByZXR1cm5zIFRoZSB0aHJvdHRsZWQgZnVuY3Rpb24uXHJcbiAqL1xyXG5mdW5jdGlvbiB0aHJvdHRsZShmbikge1xyXG4gICAgbGV0IHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICBpZiAoIXNjaGVkdWxlZCkge1xyXG4gICAgICAgICAgICBzY2hlZHVsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmbigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbi8qKlxyXG4gKiBBZGQgYW5kIGV2ZW50IGxpc3RlbmVyLiBXb3JrcyBmb3IgYWxsIGJyb3dzZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGJpbmQgdGhlIGV2ZW50IGxpc3RlbmVyIHRvLlxyXG4gKiBAcGFyYW0gYWN0aW9uIC0gU2FtZSBhcyBFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYWN0aW9uLCDigJQsIOKAlCkuXHJcbiAqIEBwYXJhbSBsaXN0ZW5lciAtIFNhbWUgYXMgRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKOKAlCwgbGlzdGVuZXIsIOKAlCkuXHJcbiAqIEBwYXJhbSB1c2VDYXB0dXJlIC0gU2FtZSBhcyBFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo4oCULCDigJQsIHVzZUNhcHR1cmUpLlxyXG4gKi9cclxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihlbGVtZW50LCBhY3Rpb24sIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSB7XHJcbiAgICBpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKSB7XHJcbiAgICAgICAgaWYgKHVzZUNhcHR1cmUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB1c2VDYXB0dXJlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhY3Rpb24gPT09IFwibW91c2V3aGVlbFwiICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5jbHVkZXMoXCJGaXJlZm94XCIpKSB7XHJcbiAgICAgICAgICAgIGFjdGlvbiA9IFwiRE9NTW91c2VTY3JvbGxcIjsgLy8gRm9yIEZpcmVmb3hcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGFjdGlvbiwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoXCJvblwiICsgYWN0aW9uLCBsaXN0ZW5lcik7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFJlbW92ZSBhbiBldmVudCBsaXN0ZW5lciBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgdG8gYmluZCB0aGUgZXZlbnQgbGlzdGVuZXIgdG8uXHJcbiAqIEBwYXJhbSBhY3Rpb24gLSBTYW1lIGFzIEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhY3Rpb24sIOKAlCwg4oCUKS5cclxuICogQHBhcmFtIGxpc3RlbmVyIC0gU2FtZSBhcyBFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIo4oCULCBsaXN0ZW5lciwg4oCUKS5cclxuICogQHBhcmFtIHVzZUNhcHR1cmUgLSBTYW1lIGFzIEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcijigJQsIOKAlCwgdXNlQ2FwdHVyZSkuXHJcbiAqL1xyXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKGVsZW1lbnQsIGFjdGlvbiwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpIHtcclxuICAgIGlmIChlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcclxuICAgICAgICAvLyBub24tSUUgYnJvd3NlcnNcclxuICAgICAgICBpZiAodXNlQ2FwdHVyZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHVzZUNhcHR1cmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJtb3VzZXdoZWVsXCIgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcyhcIkZpcmVmb3hcIikpIHtcclxuICAgICAgICAgICAgYWN0aW9uID0gXCJET01Nb3VzZVNjcm9sbFwiOyAvLyBGb3IgRmlyZWZveFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoYWN0aW9uLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBAVE9ETzogSUUgdHlwZXM/IERvZXMgYW55b25lIGNhcmU/XHJcbiAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudChcIm9uXCIgKyBhY3Rpb24sIGxpc3RlbmVyKTsgLy8gSUUgYnJvd3NlcnNcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ2FuY2VscyB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBpZiBpdCBpcyBjYW5jZWxhYmxlLCB3aXRob3V0IHN0b3BwaW5nIGZ1cnRoZXIgcHJvcGFnYXRpb24gb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgd2hvc2UgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIG5vbi1JRSBicm93c2Vyc1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldCBIVE1MIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudC5cclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgb3IgbnVsbCBpZiBub3Qgb2J0YWluYWJsZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFRhcmdldChldmVudCA9IHdpbmRvdy5ldmVudCkge1xyXG4gICAgLy8gY29kZSBmcm9tIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxyXG4gICAgLy8gQFRPRE86IEV2ZW50VGFyZ2V0IGNhbiBiZSBhbG1vc3QgYW55dGhpbmcsIGlzIGl0IG9rYXkgdG8gcmV0dXJuIG9ubHkgRWxlbWVudHM/XHJcbiAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcclxuICAgIGlmICghZXZlbnQpIDtcclxuICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LnNyY0VsZW1lbnQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC5zcmNFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gbnVsbCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykge1xyXG4gICAgICAgIC8vIGRlZmVhdCBTYWZhcmkgYnVnXHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gZWxlbWVudCBjb250YWlucyBnaXZlbiBwYXJlbnQgc29tZXdoZXJlIGluIHRoZSBET00gdHJlZS5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBwYXJlbnQgLSBUaGUgYW5jZXN0b3IgKG5vdCBuZWNlc3NhcmlseSBwYXJlbnQpIG9mIHRoZSBlbGVtZW50LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHBhcmVudCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZWxlbWVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xyXG4gICAgbGV0IGVsZW0gPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKGVsZW0pIHtcclxuICAgICAgICBpZiAoZWxlbSA9PT0gcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9ib29sZWFuLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nIGJvb2xlYW4gdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgbnVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvbnVtYmVyLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nICoqYm94ZWQqKiBudW1iZXIgdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzTnVtYmVyKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIHN0cmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3N0cmluZywgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogc3RyaW5nIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1N0cmluZyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvc2l6ZSwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUgKG51bWJlciArICdweCcpLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1NpemUodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBET00gRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBET00gRWxlbWVudCwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIERPTSBFbGVtZW50LCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0VsZW1lbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYn1cclxuICogQHBhcmFtIGhleCAtIEhleCBjb2xvciBzdHJpbmcgKDMgb3IgNiBkaWdpdHMsIHdpdGggb3Igd2l0aG91dCAjKS5cclxuICogQHJldHVybnMgUkdCIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvUkdCKGhleCkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHN3aXRjaCAoaGV4Lmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHNob3J0SGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0gKyByZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0gKyByZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10gKyByZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBmdWxsSGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBzdHJpbmcgY29sb3IgaW4gaGV4IG9yIFJHQiBmb3JtYXQgYW5kIGFkZHMgdGhlIG9wYWNpdHksIFJHQkEgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29sb3IgLSBUaGUgY29sb3Igc3RyaW5nIChoZXgsIFJHQiwgUkdCQSkuXHJcbiAqIEBwYXJhbSBvcGFjaXR5IC0gVGhlIG5ldyBvcGFjaXR5LlxyXG4gKiBAcmV0dXJucyBSR0JBIHN0cmluZywgZm9yIGV4YW1wbGUgJ3JnYmEoMjU1LCAwLCAxMjcsIDAuMyknLlxyXG4gKi9cclxuZnVuY3Rpb24gb3ZlcnJpZGVPcGFjaXR5KGNvbG9yLCBvcGFjaXR5KSB7XHJcbiAgICBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JhXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JcIikpIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBjb2xvclxyXG4gICAgICAgICAgICAuc3Vic3RyKGNvbG9yLmluZGV4T2YoXCIoXCIpICsgMSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYlswXSArIFwiLFwiICsgcmdiWzFdICsgXCIsXCIgKyByZ2JbMl0gKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJnYiA9IGhleFRvUkdCKGNvbG9yKTtcclxuICAgICAgICBpZiAocmdiID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYi5yICsgXCIsXCIgKyByZ2IuZyArIFwiLFwiICsgcmdiLmIgKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcgKGZvciBleGFtcGxlOiAnIzBhY2RjMCcpLlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IZXgocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmV0dXJuIChcIiNcIiArICgoMSA8PCAyNCkgKyAocmVkIDw8IDE2KSArIChncmVlbiA8PCA4KSArIGJsdWUpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XHJcbn1cclxuLyoqXHJcbiAqIFBhcnNlIGEgY29sb3IgcHJvcGVydHkgaW50byBhbiBvYmplY3Qgd2l0aCBib3JkZXIsIGJhY2tncm91bmQsIGFuZCBoaWdobGlnaHQgY29sb3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5wdXRDb2xvciAtIFNob3J0aGFuZCBjb2xvciBzdHJpbmcgb3IgaW5wdXQgY29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0gZGVmYXVsdENvbG9yIC0gRnVsbCBjb2xvciBvYmplY3QgdG8gZmlsbCBpbiBtaXNzaW5nIHZhbHVlcyBpbiBpbnB1dENvbG9yLlxyXG4gKiBAcmV0dXJucyBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0Q29sb3IsIGRlZmF1bHRDb2xvcikge1xyXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0Q29sb3IpKSB7XHJcbiAgICAgICAgbGV0IGNvbG9yU3RyID0gaW5wdXRDb2xvcjtcclxuICAgICAgICBpZiAoaXNWYWxpZFJHQihjb2xvclN0cikpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiID0gY29sb3JTdHJcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoNClcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3JTdHIubGVuZ3RoIC0gNSlcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29sb3JTdHIgPSBSR0JUb0hleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVmFsaWRIZXgoY29sb3JTdHIpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSFNWKGNvbG9yU3RyKTtcclxuICAgICAgICAgICAgY29uc3QgbGlnaHRlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBoc3YucyAqIDAuOCxcclxuICAgICAgICAgICAgICAgIHY6IE1hdGgubWluKDEsIGhzdi52ICogMS4wMiksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBNYXRoLm1pbigxLCBoc3YucyAqIDEuMjUpLFxyXG4gICAgICAgICAgICAgICAgdjogaHN2LnYgKiAwLjgsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySGV4ID0gSFNWVG9IZXgoZGFya2VyQ29sb3JIU1YuaCwgZGFya2VyQ29sb3JIU1YucywgZGFya2VyQ29sb3JIU1Yudik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhleCA9IEhTVlRvSGV4KGxpZ2h0ZXJDb2xvckhTVi5oLCBsaWdodGVyQ29sb3JIU1YucywgbGlnaHRlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q29sb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgZGVmYXVsdENvbG9yLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IGRlZmF1bHRDb2xvci5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5ob3ZlciAmJiBpbnB1dENvbG9yLmhvdmVyLmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuYmFja2dyb3VuZCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogaXNTdHJpbmcoaW5wdXRDb2xvci5oaWdobGlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBSR0IgXFw8MCwgMjU1XFw+IGludG8gSFNWIG9iamVjdC5cclxuICpcclxuICogQHJlbWFya3NcclxuICoge0BsaW5rIGh0dHA6Ly93d3cuamF2YXNjcmlwdGVyLm5ldC9mYXEvcmdiMmhzdi5odG19XHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhTViBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBSR0JUb0hTVihyZWQsIGdyZWVuLCBibHVlKSB7XHJcbiAgICByZWQgPSByZWQgLyAyNTU7XHJcbiAgICBncmVlbiA9IGdyZWVuIC8gMjU1O1xyXG4gICAgYmx1ZSA9IGJsdWUgLyAyNTU7XHJcbiAgICBjb25zdCBtaW5SR0IgPSBNYXRoLm1pbihyZWQsIE1hdGgubWluKGdyZWVuLCBibHVlKSk7XHJcbiAgICBjb25zdCBtYXhSR0IgPSBNYXRoLm1heChyZWQsIE1hdGgubWF4KGdyZWVuLCBibHVlKSk7XHJcbiAgICAvLyBCbGFjay1ncmF5LXdoaXRlXHJcbiAgICBpZiAobWluUkdCID09PSBtYXhSR0IpIHtcclxuICAgICAgICByZXR1cm4geyBoOiAwLCBzOiAwLCB2OiBtaW5SR0IgfTtcclxuICAgIH1cclxuICAgIC8vIENvbG9ycyBvdGhlciB0aGFuIGJsYWNrLWdyYXktd2hpdGU6XHJcbiAgICBjb25zdCBkID0gcmVkID09PSBtaW5SR0IgPyBncmVlbiAtIGJsdWUgOiBibHVlID09PSBtaW5SR0IgPyByZWQgLSBncmVlbiA6IGJsdWUgLSByZWQ7XHJcbiAgICBjb25zdCBoID0gcmVkID09PSBtaW5SR0IgPyAzIDogYmx1ZSA9PT0gbWluUkdCID8gMSA6IDU7XHJcbiAgICBjb25zdCBodWUgPSAoNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSkpIC8gMzYwO1xyXG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IChtYXhSR0IgLSBtaW5SR0IpIC8gbWF4UkdCO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtYXhSR0I7XHJcbiAgICByZXR1cm4geyBoOiBodWUsIHM6IHNhdHVyYXRpb24sIHY6IHZhbHVlIH07XHJcbn1cclxuLyoqXHJcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBpbnRvIGFuIG9iamVjdCB3aXRoIGtleS92YWx1ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gQ1NTIHNvdXJjZSBjb2RlIHRvIHNwbGl0IGludG8ga2V5L3ZhbHVlIG9iamVjdC5cclxuICogQHJldHVybnMgS2V5L3ZhbHVlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHtAbGluayBjc3NUZXh0fS5cclxuICovXHJcbmZ1bmN0aW9uIHNwbGl0Q1NTVGV4dChjc3NUZXh0KSB7XHJcbiAgICBjb25zdCB0bXBFbGxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB7fTtcclxuICAgIHRtcEVsbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bXBFbGxlbWVudC5zdHlsZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIHN0eWxlc1t0bXBFbGxlbWVudC5zdHlsZVtpXV0gPSB0bXBFbGxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRtcEVsbGVtZW50LnN0eWxlW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbn1cclxuLyoqXHJcbiAqIEFwcGVuZCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgdG8gYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgc3R5bGVzLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgYXBwZW5kZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDc3NUZXh0KGVsZW1lbnQsIGNzc1RleHQpIHtcclxuICAgIGNvbnN0IGNzc1N0eWxlID0gc3BsaXRDU1NUZXh0KGNzc1RleHQpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3NzU3R5bGUpKSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCBzdHlsZXMgc2hvdWxkIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gVGhlIHN0eWxlcyB0byBiZSByZW1vdmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamlqYWNrc29uLzUzMTEyNTZ9XHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb1JHQihoLCBzLCB2KSB7XHJcbiAgICBsZXQgcjtcclxuICAgIGxldCBnO1xyXG4gICAgbGV0IGI7XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihoICogNik7XHJcbiAgICBjb25zdCBmID0gaCAqIDYgLSBpO1xyXG4gICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xyXG4gICAgY29uc3QgcSA9IHYgKiAoMSAtIGYgKiBzKTtcclxuICAgIGNvbnN0IHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyk7XHJcbiAgICBzd2l0Y2ggKGkgJSA2KSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAociA9IHYpLCAoZyA9IHQpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIChyID0gcSksIChnID0gdiksIChiID0gcCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSB2KSwgKGIgPSB0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAociA9IHApLCAoZyA9IHEpLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIChyID0gdCksIChnID0gcCksIChiID0gdik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSBwKSwgKGIgPSBxKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHI6IE1hdGguZmxvb3IociAqIDI1NSksXHJcbiAgICAgICAgZzogTWF0aC5mbG9vcihnICogMjU1KSxcclxuICAgICAgICBiOiBNYXRoLmZsb29yKGIgKiAyNTUpLFxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb0hleChoLCBzLCB2KSB7XHJcbiAgICBjb25zdCByZ2IgPSBIU1ZUb1JHQihoLCBzLCB2KTtcclxuICAgIHJldHVybiBSR0JUb0hleChyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBoZXggY29sb3Igc3RyaW5nIGludG8gSFNWIFxcPDAsIDFcXD4uXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gaGV4VG9IU1YoaGV4KSB7XHJcbiAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihoZXgpO1xyXG4gICAgaWYgKCFyZ2IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHtoZXh9JyBpcyBub3QgYSB2YWxpZCBjb2xvci5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSR0JUb0hTVihyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgaGV4IGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIGhleCAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xyXG4gICAgY29uc3QgaXNPayA9IC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XHJcbiAgICByZXR1cm4gaXNPaztcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCIGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHJnYiAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCKHJnYikge1xyXG4gICAgcmV0dXJuIHJnYlJFLnRlc3QocmdiKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCQSBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2JhIC0gVW5rbm93biBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBhIGNvbG9yLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzVmFsaWRSR0JBKHJnYmEpIHtcclxuICAgIHJldHVybiByZ2JhUkUudGVzdChyZ2JhKTtcclxufVxyXG4vKipcclxuICogVGhpcyByZWN1cnNpdmVseSByZWRpcmVjdHMgdGhlIHByb3RvdHlwZSBvZiBKU09OIG9iamVjdHMgdG8gdGhlIHJlZmVyZW5jZU9iamVjdC5cclxuICogVGhpcyBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZHMgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHRvIGJlIGJyaWRnZWQuXHJcbiAqIEBwYXJhbSByZWZlcmVuY2VPYmplY3QgLSBUaGUgb3JpZ2luYWwgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVCcmlkZ2VPYmplY3QoZmllbGRzLCByZWZlcmVuY2VPYmplY3QpIHtcclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIHJlZmVyZW5jZU9iamVjdCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIC8vICEhISB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICBjb25zdCBvYmplY3RUbyA9IE9iamVjdC5jcmVhdGUocmVmZXJlbmNlT2JqZWN0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZmVyZW5jZU9iamVjdCwgZmllbGRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0VG9bZmllbGRzW2ldXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFRvO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgVGhlIEVsZW1lbnQgaWYgdGhlIHJlZmVyZW5jZU9iamVjdCBpcyBhbiBFbGVtZW50LCBvciBhIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiByZWZlcmVuY2VPYmplY3QgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gQXZvaWQgYnJpZGdpbmcgRE9NIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlT2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGkpKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ldID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFRvW2ldID0gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0VG87XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgc3RhYmxlIHNvcnQgaW1wbGVtZW50YXRpb24sIHZlcnkgZmFzdCBmb3IgcHJlc29ydGVkIGRhdGEuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIGFycmF5IHRvIGJlIHNvcnRlZCAoaW4tcGxhY2UpLlxyXG4gKiBAcGFyYW0gY29tcGFyZSAtIEFuIG9yZGVyIGNvbXBhcmF0b3IuXHJcbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5zZXJ0U29ydChhLCBjb21wYXJlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBrID0gYVtpXTtcclxuICAgICAgICBsZXQgajtcclxuICAgICAgICBmb3IgKGogPSBpOyBqID4gMCAmJiBjb21wYXJlKGssIGFbaiAtIDFdKSA8IDA7IGotLSkge1xyXG4gICAgICAgICAgICBhW2pdID0gYVtqIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFbal0gPSBrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIG9wdGlvbnMgb2Ygc3Vib2JqZWN0cyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXHJcbiAqXHJcbiAqIEEgcmVxdWlyZW1lbnQgb2YgdGhlc2Ugc3Vib2JqZWN0cyBpcyB0aGF0IHRoZXkgaGF2ZSBhbiAnZW5hYmxlZCcgZWxlbWVudFxyXG4gKiB3aGljaCBpcyBvcHRpb25hbCBmb3IgdGhlIHVzZXIgYnV0IG1hbmRhdG9yeSBmb3IgdGhlIHByb2dyYW0uXHJcbiAqXHJcbiAqIFRoZSBhZGRlZCB2YWx1ZSBoZXJlIG9mIHRoZSBtZXJnZSBpcyB0aGF0IG9wdGlvbiAnZW5hYmxlZCcgaXMgc2V0IGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWVyZ2VUYXJnZXQgLSBFaXRoZXIgdGhpcy5vcHRpb25zIG9yIHRoZSBvcHRpb25zIHVzZWQgZm9yIHRoZSBncm91cHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICogQHBhcmFtIG9wdGlvbiAtIE9wdGlvbiBrZXkgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSBnbG9iYWxPcHRpb25zIC0gR2xvYmFsIG9wdGlvbnMsIHBhc3NlZCBpbiB0byBkZXRlcm1pbmUgdmFsdWUgb2Ygb3B0aW9uICdlbmFibGVkJy5cclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhtZXJnZVRhcmdldCwgb3B0aW9ucywgb3B0aW9uLCBnbG9iYWxPcHRpb25zID0ge30pIHtcclxuICAgIC8vIExvY2FsIGhlbHBlcnNcclxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9iaiAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIjtcclxuICAgIH07XHJcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzQ0OTEyODcvMTIyMzUzMVxyXG4gICAgY29uc3QgaXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHggaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCB4KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8vIEd1YXJkc1xyXG4gICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbWVyZ2VUYXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzUHJlc2VudChvcHRpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgZ2xvYmFsT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyBBY3R1YWwgbWVyZ2Ugcm91dGluZSwgc2VwYXJhdGVkIGZyb20gbWFpbiBsb2dpY1xyXG4gICAgLy8gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBvcHRpb25zIGlzIG1lcmdlZC4gRGVlcGVyIGxldmVscyBhcmUgcmVmJ2QuIFRoaXMgbWF5IGFjdHVhbGx5IGJlIGFuIGlzc3VlLlxyXG4gICAgLy9cclxuICAgIGNvbnN0IGRvTWVyZ2UgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KHRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbb3B0aW9uXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcmMgPSBvcHRpb25zW29wdGlvbl07XHJcbiAgICAgICAgY29uc3QgZHN0ID0gdGFyZ2V0W29wdGlvbl07XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNyYywgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRzdFtwcm9wXSA9IHNyY1twcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBMb2NhbCBpbml0aWFsaXphdGlvblxyXG4gICAgY29uc3Qgc3JjT3B0aW9uID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgY29uc3QgZ2xvYmFsUGFzc2VkID0gaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykgJiYgIWlzRW1wdHkoZ2xvYmFsT3B0aW9ucyk7XHJcbiAgICBjb25zdCBnbG9iYWxPcHRpb24gPSBnbG9iYWxQYXNzZWQgPyBnbG9iYWxPcHRpb25zW29wdGlvbl0gOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBnbG9iYWxFbmFibGVkID0gZ2xvYmFsT3B0aW9uID8gZ2xvYmFsT3B0aW9uLmVuYWJsZWQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTWFpbiByb3V0aW5lXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgaWYgKHNyY09wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNyY09wdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gc3JjT3B0aW9uO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChzcmNPcHRpb24gPT09IG51bGwgJiYgIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgLy8gSWYgcG9zc2libGUsIGV4cGxpY2l0IGNvcHkgZnJvbSBnbG9iYWxzXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChnbG9iYWxPcHRpb24pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KHNyY09wdGlvbikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gRW5zdXJlIHRoYXQgJ2VuYWJsZWQnIGlzIHByb3Blcmx5IHNldC4gSXQgaXMgcmVxdWlyZWQgaW50ZXJuYWxseVxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBmcm9tIG9wdGlvbnMgd2lsbCBhbHdheXMgb3ZlcndyaXRlIHRoZSBleGlzdGluZyB2YWx1ZVxyXG4gICAgLy9cclxuICAgIGxldCBlbmFibGVkID0gdHJ1ZTsgLy8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgaWYgKHNyY09wdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBlbmFibGVkID0gc3JjT3B0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBUYWtlIGZyb20gZ2xvYmFscywgaWYgcHJlc2VudFxyXG4gICAgICAgIGlmIChnbG9iYWxFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IGdsb2JhbE9wdGlvbi5lbmFibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRvTWVyZ2UobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbik7XHJcbiAgICBtZXJnZVRhcmdldFtvcHRpb25dLmVuYWJsZWQgPSBlbmFibGVkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBiaW5hcnkgc2VhcmNoIGZvciBhIHZpc2libGUgaXRlbSBpbiBhIHNvcnRlZCBsaXN0LiBJZiB3ZSBmaW5kIGEgdmlzaWJsZSBpdGVtLCB0aGUgY29kZSB0aGF0IHVzZXNcclxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4gaXRlcmF0ZSBpbiBib3RoIGRpcmVjdGlvbnMgb3ZlciB0aGlzIHNvcnRlZCBsaXN0IHRvIGZpbmQgYWxsIHZpc2libGUgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBJdGVtcyBvcmRlcmVkIGJ5IHN0YXJ0LlxyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIC0xIGlzIGxvd2VyLCAwIGlzIGVxdWFsLCAxIGlzIGhpZ2hlci5cclxuICogQHBhcmFtIGZpZWxkIC0gUHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdKS5cclxuICogQHBhcmFtIGZpZWxkMiAtIFNlY29uZCBwcm9wZXJ0eSBuYW1lIG9uIGFuIGl0ZW0gKFRoYXQgaXMgaXRlbVtmaWVsZF1bZmllbGQyXSkuXHJcbiAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBmb3VuZCBpdGVtIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoQ3VzdG9tKG9yZGVyZWRJdGVtcywgY29tcGFyYXRvciwgZmllbGQsIGZpZWxkMikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQyID09PSB1bmRlZmluZWQgPyBpdGVtW2ZpZWxkXSA6IGl0ZW1bZmllbGRdW2ZpZWxkMl07XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGppaGFhLCBmb3VuZCBhIHZpc2libGUgaXRlbSFcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoUmVzdWx0ID09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBzbWFsbCAtLT4gaW5jcmVhc2UgbG93XHJcbiAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyB2YWx1ZSBpbiBhIHNvcnRlZCBhcnJheS5cclxuICogSWYgaXQgZG9lcyBub3QgZXhpc3QgYnV0IGlzIGluIGJldHdlZW4gb2YgdHdvIHZhbHVlcywgd2UgcmV0dXJuIGVpdGhlciB0aGVcclxuICogb25lIGJlZm9yZSBvciB0aGUgb25lIGFmdGVyLCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCBJZiBpdCBpcyBmb3VuZCwgd2VcclxuICogcmV0dXJuIHRoZSBpbmRleCwgZWxzZSAtMS5cclxuICpcclxuICogQHBhcmFtIG9yZGVyZWRJdGVtcyAtIFNvcnRlZCBhcnJheS5cclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSBzZWFyY2hlZCB2YWx1ZS5cclxuICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gaXRlbXMgdG8gYmUgc2VhcmNoZWQuXHJcbiAqIEBwYXJhbSBzaWRlUHJlZmVyZW5jZSAtIElmIHRoZSB0YXJnZXQgaXMgYmV0d2VlbiB0d28gdmFsdWVzLCBzaG91bGQgdGhlIGluZGV4IG9mIHRoZSBiZWZvcmUgb3IgdGhlIGFmdGVyIGJlIHJldHVybmVkP1xyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIEFuIG9wdGlvbmFsIGNvbXBhcmF0b3IsIHJldHVybmluZyAtMSwgMCwgMSBmb3IgXFw8LCA9PT0sIFxcPi5cclxuICogQHJldHVybnMgVGhlIGluZGV4IG9mIGZvdW5kIHZhbHVlIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoVmFsdWUob3JkZXJlZEl0ZW1zLCB0YXJnZXQsIGZpZWxkLCBzaWRlUHJlZmVyZW5jZSwgY29tcGFyYXRvcikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgcHJldlZhbHVlO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IG5leHRWYWx1ZTtcclxuICAgIGxldCBtaWRkbGU7XHJcbiAgICBjb21wYXJhdG9yID1cclxuICAgICAgICBjb21wYXJhdG9yICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGNvbXBhcmF0b3JcclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYiA/IDAgOiBhIDwgYiA/IC0xIDogMTtcclxuICAgICAgICAgICAgfTtcclxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKSB7XHJcbiAgICAgICAgLy8gZ2V0IGEgbmV3IGd1ZXNzXHJcbiAgICAgICAgbWlkZGxlID0gTWF0aC5mbG9vcigwLjUgKiAoaGlnaCArIGxvdykpO1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IG9yZGVyZWRJdGVtc1tNYXRoLm1heCgwLCBtaWRkbGUgLSAxKV1bZmllbGRdO1xyXG4gICAgICAgIHZhbHVlID0gb3JkZXJlZEl0ZW1zW21pZGRsZV1bZmllbGRdO1xyXG4gICAgICAgIG5leHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIG9yZGVyZWRJdGVtc1tNYXRoLm1pbihvcmRlcmVkSXRlbXMubGVuZ3RoIC0gMSwgbWlkZGxlICsgMSldW2ZpZWxkXTtcclxuICAgICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcihwcmV2VmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCIgPyBNYXRoLm1heCgwLCBtaWRkbGUgLSAxKSA6IG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA8IDAgJiZcclxuICAgICAgICAgICAgY29tcGFyYXRvcihuZXh0VmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dFxyXG4gICAgICAgICAgICByZXR1cm4gc2lkZVByZWZlcmVuY2UgPT0gXCJiZWZvcmVcIlxyXG4gICAgICAgICAgICAgICAgPyBtaWRkbGVcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlkbnQgZmluZCB0aGUgdGFyZ2V0LCB3ZSBuZWVkIHRvIGNoYW5nZSBvdXIgYm91bmRhcmllcy5cclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICAgICAgbG93ID0gbWlkZGxlICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBiaWcgLS0+IGRlY3JlYXNlIGhpZ2hcclxuICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgfVxyXG4gICAgLy8gZGlkbnQgZmluZCBhbnl0aGluZy4gUmV0dXJuIC0xLlxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qXHJcbiAqIEVhc2luZyBGdW5jdGlvbnMuXHJcbiAqIE9ubHkgY29uc2lkZXJpbmcgdGhlIHQgdmFsdWUgZm9yIHRoZSByYW5nZSBbMCwgMV0gPT4gWzAsIDFdLlxyXG4gKlxyXG4gKiBJbnNwaXJhdGlvbjogZnJvbSBodHRwOi8vZ2l6bWEuY29tL2Vhc2luZy9cclxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTRcclxuICovXHJcbmNvbnN0IGVhc2luZ0Z1bmN0aW9ucyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgbm8gZWFzaW5nIGFuZCBubyBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBsaW5lYXIodCkge1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5RdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5DdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRDdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gMSAtIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKyAtLXQgKiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAxNiAqIHQgKiB0ICogdCAqIHQgKiB0IDogMSArIDE2ICogLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFeHBlcmltZW50YWx5IGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRoZSBzY3JvbGxiYXIgZm9yIHRoaXMgYnJvd3Nlci5cclxuICpcclxuICogQHJldHVybnMgVGhlIHdpZHRoIGluIHBpeGVscy5cclxuICovXHJcbmZ1bmN0aW9uIGdldFNjcm9sbEJhcldpZHRoKCkge1xyXG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGlubmVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XHJcbiAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIG91dGVyLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSBcIjIwMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcclxuICAgIGNvbnN0IHcxID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XHJcbiAgICBsZXQgdzIgPSBpbm5lci5vZmZzZXRXaWR0aDtcclxuICAgIGlmICh3MSA9PSB3Mikge1xyXG4gICAgICAgIHcyID0gb3V0ZXIuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcclxuICAgIHJldHVybiB3MSAtIHcyO1xyXG59XHJcbi8vIEBUT0RPOiBUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseS5cclxuLy8gSXQgd29ya3Mgb25seSBmb3Igc2luZ2xlIHByb3BlcnR5IG9iamVjdHMsXHJcbi8vIG90aGVyd2lzZSBpdCBjb21iaW5lcyBhbGwgb2YgdGhlIHR5cGVzIGluIGEgdW5pb24uXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBWMT4gKFxyXG4vLyAgIHBpbGU6IFJlY29yZDxLMSwgdW5kZWZpbmVkIHwgVjE+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBLMSB8IFtLMV1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjFcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIHRvcE1vc3Q8SzEgZXh0ZW5kcyBzdHJpbmcsIEsyIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjI+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgSzMgZXh0ZW5kcyBzdHJpbmcsIFYxLCBWMiwgVjM+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMiB8IFJlY29yZDxLMywgdW5kZWZpbmVkIHwgVjM+Pj5bXSxcclxuLy8gICBhY2Nlc3NvcnM6IFtLMSwgSzIsIEszXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyIHwgVjNcclxuLyoqXHJcbiAqIEdldCB0aGUgdG9wIG1vc3QgcHJvcGVydHkgdmFsdWUgZnJvbSBhIHBpbGUgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHBhcmFtIHBpbGUgLSBBcnJheSBvZiBvYmplY3RzLCBubyByZXF1aXJlZCBmb3JtYXQuXHJcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cclxuICogRm9yIGV4YW1wbGUgYG9iamVjdFsnZm9vJ11bJ2JhciddYCDihpIgYFsnZm9vJywgJ2JhciddYC5cclxuICogQHJldHVybnMgVmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGggZ2l2ZW4gYWNjZXNzb3JzIHBhdGggZnJvbSB0aGUgZmlyc3QgcGlsZSBpdGVtIHdoZXJlIGl0J3Mgbm90IHVuZGVmaW5lZC5cclxuICovXHJcbmZ1bmN0aW9uIHRvcE1vc3QocGlsZSwgYWNjZXNzb3JzKSB7XHJcbiAgICBsZXQgY2FuZGlkYXRlO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjY2Vzc29ycykpIHtcclxuICAgICAgICBhY2Nlc3NvcnMgPSBbYWNjZXNzb3JzXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHBpbGUpIHtcclxuICAgICAgICBpZiAobWVtYmVyKSB7XHJcbiAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG1lbWJlclthY2Nlc3NvcnNbMF1dO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVthY2Nlc3NvcnNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjYW5kaWRhdGU7XHJcbn1cblxuY29uc3QgaHRtbENvbG9ycyA9IHtcbiAgYmxhY2s6IFwiIzAwMDAwMFwiLFxuICBuYXZ5OiBcIiMwMDAwODBcIixcbiAgZGFya2JsdWU6IFwiIzAwMDA4QlwiLFxuICBtZWRpdW1ibHVlOiBcIiMwMDAwQ0RcIixcbiAgYmx1ZTogXCIjMDAwMEZGXCIsXG4gIGRhcmtncmVlbjogXCIjMDA2NDAwXCIsXG4gIGdyZWVuOiBcIiMwMDgwMDBcIixcbiAgdGVhbDogXCIjMDA4MDgwXCIsXG4gIGRhcmtjeWFuOiBcIiMwMDhCOEJcIixcbiAgZGVlcHNreWJsdWU6IFwiIzAwQkZGRlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIiMwMENFRDFcIixcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiIzAwRkE5QVwiLFxuICBsaW1lOiBcIiMwMEZGMDBcIixcbiAgc3ByaW5nZ3JlZW46IFwiIzAwRkY3RlwiLFxuICBhcXVhOiBcIiMwMEZGRkZcIixcbiAgY3lhbjogXCIjMDBGRkZGXCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIjMTkxOTcwXCIsXG4gIGRvZGdlcmJsdWU6IFwiIzFFOTBGRlwiLFxuICBsaWdodHNlYWdyZWVuOiBcIiMyMEIyQUFcIixcbiAgZm9yZXN0Z3JlZW46IFwiIzIyOEIyMlwiLFxuICBzZWFncmVlbjogXCIjMkU4QjU3XCIsXG4gIGRhcmtzbGF0ZWdyYXk6IFwiIzJGNEY0RlwiLFxuICBsaW1lZ3JlZW46IFwiIzMyQ0QzMlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIjM0NCMzcxXCIsXG4gIHR1cnF1b2lzZTogXCIjNDBFMEQwXCIsXG4gIHJveWFsYmx1ZTogXCIjNDE2OUUxXCIsXG4gIHN0ZWVsYmx1ZTogXCIjNDY4MkI0XCIsXG4gIGRhcmtzbGF0ZWJsdWU6IFwiIzQ4M0Q4QlwiLFxuICBtZWRpdW10dXJxdW9pc2U6IFwiIzQ4RDFDQ1wiLFxuICBpbmRpZ286IFwiIzRCMDA4MlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCIjNTU2QjJGXCIsXG4gIGNhZGV0Ymx1ZTogXCIjNUY5RUEwXCIsXG4gIGNvcm5mbG93ZXJibHVlOiBcIiM2NDk1RURcIixcbiAgbWVkaXVtYXF1YW1hcmluZTogXCIjNjZDREFBXCIsXG4gIGRpbWdyYXk6IFwiIzY5Njk2OVwiLFxuICBzbGF0ZWJsdWU6IFwiIzZBNUFDRFwiLFxuICBvbGl2ZWRyYWI6IFwiIzZCOEUyM1wiLFxuICBzbGF0ZWdyYXk6IFwiIzcwODA5MFwiLFxuICBsaWdodHNsYXRlZ3JheTogXCIjNzc4ODk5XCIsXG4gIG1lZGl1bXNsYXRlYmx1ZTogXCIjN0I2OEVFXCIsXG4gIGxhd25ncmVlbjogXCIjN0NGQzAwXCIsXG4gIGNoYXJ0cmV1c2U6IFwiIzdGRkYwMFwiLFxuICBhcXVhbWFyaW5lOiBcIiM3RkZGRDRcIixcbiAgbWFyb29uOiBcIiM4MDAwMDBcIixcbiAgcHVycGxlOiBcIiM4MDAwODBcIixcbiAgb2xpdmU6IFwiIzgwODAwMFwiLFxuICBncmF5OiBcIiM4MDgwODBcIixcbiAgc2t5Ymx1ZTogXCIjODdDRUVCXCIsXG4gIGxpZ2h0c2t5Ymx1ZTogXCIjODdDRUZBXCIsXG4gIGJsdWV2aW9sZXQ6IFwiIzhBMkJFMlwiLFxuICBkYXJrcmVkOiBcIiM4QjAwMDBcIixcbiAgZGFya21hZ2VudGE6IFwiIzhCMDA4QlwiLFxuICBzYWRkbGVicm93bjogXCIjOEI0NTEzXCIsXG4gIGRhcmtzZWFncmVlbjogXCIjOEZCQzhGXCIsXG4gIGxpZ2h0Z3JlZW46IFwiIzkwRUU5MFwiLFxuICBtZWRpdW1wdXJwbGU6IFwiIzkzNzBEOFwiLFxuICBkYXJrdmlvbGV0OiBcIiM5NDAwRDNcIixcbiAgcGFsZWdyZWVuOiBcIiM5OEZCOThcIixcbiAgZGFya29yY2hpZDogXCIjOTkzMkNDXCIsXG4gIHllbGxvd2dyZWVuOiBcIiM5QUNEMzJcIixcbiAgc2llbm5hOiBcIiNBMDUyMkRcIixcbiAgYnJvd246IFwiI0E1MkEyQVwiLFxuICBkYXJrZ3JheTogXCIjQTlBOUE5XCIsXG4gIGxpZ2h0Ymx1ZTogXCIjQUREOEU2XCIsXG4gIGdyZWVueWVsbG93OiBcIiNBREZGMkZcIixcbiAgcGFsZXR1cnF1b2lzZTogXCIjQUZFRUVFXCIsXG4gIGxpZ2h0c3RlZWxibHVlOiBcIiNCMEM0REVcIixcbiAgcG93ZGVyYmx1ZTogXCIjQjBFMEU2XCIsXG4gIGZpcmVicmljazogXCIjQjIyMjIyXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiI0I4ODYwQlwiLFxuICBtZWRpdW1vcmNoaWQ6IFwiI0JBNTVEM1wiLFxuICByb3N5YnJvd246IFwiI0JDOEY4RlwiLFxuICBkYXJra2hha2k6IFwiI0JEQjc2QlwiLFxuICBzaWx2ZXI6IFwiI0MwQzBDMFwiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiI0M3MTU4NVwiLFxuICBpbmRpYW5yZWQ6IFwiI0NENUM1Q1wiLFxuICBwZXJ1OiBcIiNDRDg1M0ZcIixcbiAgY2hvY29sYXRlOiBcIiNEMjY5MUVcIixcbiAgdGFuOiBcIiNEMkI0OENcIixcbiAgbGlnaHRncmV5OiBcIiNEM0QzRDNcIixcbiAgcGFsZXZpb2xldHJlZDogXCIjRDg3MDkzXCIsXG4gIHRoaXN0bGU6IFwiI0Q4QkZEOFwiLFxuICBvcmNoaWQ6IFwiI0RBNzBENlwiLFxuICBnb2xkZW5yb2Q6IFwiI0RBQTUyMFwiLFxuICBjcmltc29uOiBcIiNEQzE0M0NcIixcbiAgZ2FpbnNib3JvOiBcIiNEQ0RDRENcIixcbiAgcGx1bTogXCIjRERBMEREXCIsXG4gIGJ1cmx5d29vZDogXCIjREVCODg3XCIsXG4gIGxpZ2h0Y3lhbjogXCIjRTBGRkZGXCIsXG4gIGxhdmVuZGVyOiBcIiNFNkU2RkFcIixcbiAgZGFya3NhbG1vbjogXCIjRTk5NjdBXCIsXG4gIHZpb2xldDogXCIjRUU4MkVFXCIsXG4gIHBhbGVnb2xkZW5yb2Q6IFwiI0VFRThBQVwiLFxuICBsaWdodGNvcmFsOiBcIiNGMDgwODBcIixcbiAga2hha2k6IFwiI0YwRTY4Q1wiLFxuICBhbGljZWJsdWU6IFwiI0YwRjhGRlwiLFxuICBob25leWRldzogXCIjRjBGRkYwXCIsXG4gIGF6dXJlOiBcIiNGMEZGRkZcIixcbiAgc2FuZHlicm93bjogXCIjRjRBNDYwXCIsXG4gIHdoZWF0OiBcIiNGNURFQjNcIixcbiAgYmVpZ2U6IFwiI0Y1RjVEQ1wiLFxuICB3aGl0ZXNtb2tlOiBcIiNGNUY1RjVcIixcbiAgbWludGNyZWFtOiBcIiNGNUZGRkFcIixcbiAgZ2hvc3R3aGl0ZTogXCIjRjhGOEZGXCIsXG4gIHNhbG1vbjogXCIjRkE4MDcyXCIsXG4gIGFudGlxdWV3aGl0ZTogXCIjRkFFQkQ3XCIsXG4gIGxpbmVuOiBcIiNGQUYwRTZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiI0ZBRkFEMlwiLFxuICBvbGRsYWNlOiBcIiNGREY1RTZcIixcbiAgcmVkOiBcIiNGRjAwMDBcIixcbiAgZnVjaHNpYTogXCIjRkYwMEZGXCIsXG4gIG1hZ2VudGE6IFwiI0ZGMDBGRlwiLFxuICBkZWVwcGluazogXCIjRkYxNDkzXCIsXG4gIG9yYW5nZXJlZDogXCIjRkY0NTAwXCIsXG4gIHRvbWF0bzogXCIjRkY2MzQ3XCIsXG4gIGhvdHBpbms6IFwiI0ZGNjlCNFwiLFxuICBjb3JhbDogXCIjRkY3RjUwXCIsXG4gIGRhcmtvcmFuZ2U6IFwiI0ZGOEMwMFwiLFxuICBsaWdodHNhbG1vbjogXCIjRkZBMDdBXCIsXG4gIG9yYW5nZTogXCIjRkZBNTAwXCIsXG4gIGxpZ2h0cGluazogXCIjRkZCNkMxXCIsXG4gIHBpbms6IFwiI0ZGQzBDQlwiLFxuICBnb2xkOiBcIiNGRkQ3MDBcIixcbiAgcGVhY2hwdWZmOiBcIiNGRkRBQjlcIixcbiAgbmF2YWpvd2hpdGU6IFwiI0ZGREVBRFwiLFxuICBtb2NjYXNpbjogXCIjRkZFNEI1XCIsXG4gIGJpc3F1ZTogXCIjRkZFNEM0XCIsXG4gIG1pc3R5cm9zZTogXCIjRkZFNEUxXCIsXG4gIGJsYW5jaGVkYWxtb25kOiBcIiNGRkVCQ0RcIixcbiAgcGFwYXlhd2hpcDogXCIjRkZFRkQ1XCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiI0ZGRjBGNVwiLFxuICBzZWFzaGVsbDogXCIjRkZGNUVFXCIsXG4gIGNvcm5zaWxrOiBcIiNGRkY4RENcIixcbiAgbGVtb25jaGlmZm9uOiBcIiNGRkZBQ0RcIixcbiAgZmxvcmFsd2hpdGU6IFwiI0ZGRkFGMFwiLFxuICBzbm93OiBcIiNGRkZBRkFcIixcbiAgeWVsbG93OiBcIiNGRkZGMDBcIixcbiAgbGlnaHR5ZWxsb3c6IFwiI0ZGRkZFMFwiLFxuICBpdm9yeTogXCIjRkZGRkYwXCIsXG4gIHdoaXRlOiBcIiNGRkZGRkZcIixcbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gKi9cbmxldCBDb2xvclBpY2tlciQxID0gY2xhc3MgQ29sb3JQaWNrZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwaXhlbFJhdGlvID0gMSkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiAyODkgLyAyLCB5OiAyODkgLyAyIH07XG4gICAgdGhpcy5yID0gMjg5ICogMC40OTtcbiAgICB0aGlzLmNvbG9yID0geyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhOiAxLjAgfTtcbiAgICB0aGlzLmh1ZUNpcmNsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmluaXRpYWxDb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5wcmV2aW91c0NvbG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLy8gYm91bmQgYnlcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gKCkgPT4ge307XG5cbiAgICAvLyBjcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgIHRoaXMuX2NyZWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgaW5zZXJ0cyB0aGUgY29sb3JQaWNrZXIgaW50byBhIGRpdiBmcm9tIHRoZSBET01cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAgICovXG4gIGluc2VydFRvKGNvbnRhaW5lcikge1xuICAgIGlmICh0aGlzLmhhbW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuXG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldFVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIG9uIGFwcGx5IGFuZCBzYXZlLiBCaW5kIGl0IHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgc2V0Q2xvc2VDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIGNsb3NpbmcgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gaHRtbENvbG9yc1tjb2xvcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29sb3Igb2YgdGhlIGNvbG9yUGlja2VyXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAncmVkJyAgICAgICAgICAgICAgICAgICAtLT4gSFRNTCBjb2xvciBzdHJpbmdcbiAgICogJyNmZmZmZmYnICAgICAgICAgICAgICAgLS0+IGhleCBzdHJpbmdcbiAgICogJ3JnYigyNTUsMjU1LDI1NSknICAgICAgLS0+IHJnYiBzdHJpbmdcbiAgICogJ3JnYmEoMjU1LDI1NSwyNTUsMS4wKScgLS0+IHJnYmEgc3RyaW5nXG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NX0gICAgIC0tPiByZ2Igb2JqZWN0XG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NSxhOjEuMH0gLS0+IHJnYmEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgb2JqZWN0fSBjb2xvclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqL1xuICBzZXRDb2xvcihjb2xvciwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICBpZiAoY29sb3IgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJnYmE7XG5cbiAgICAvLyBpZiBhIGh0bWwgY29sb3Igc2hvcnRoYW5kIGlzIHVzZWQsIGNvbnZlcnQgdG8gaGV4XG4gICAgY29uc3QgaHRtbENvbG9yID0gdGhpcy5faXNDb2xvclN0cmluZyhjb2xvcik7XG4gICAgaWYgKGh0bWxDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IGh0bWxDb2xvcjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3JtYXRcbiAgICBpZiAoaXNTdHJpbmcoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICBpZiAoaXNWYWxpZFJHQihjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDQpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA1KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYmFBcnJheVswXSwgZzogcmdiYUFycmF5WzFdLCBiOiByZ2JhQXJyYXlbMl0sIGE6IDEuMCB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkUkdCQShjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDUpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA2KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7XG4gICAgICAgICAgcjogcmdiYUFycmF5WzBdLFxuICAgICAgICAgIGc6IHJnYmFBcnJheVsxXSxcbiAgICAgICAgICBiOiByZ2JhQXJyYXlbMl0sXG4gICAgICAgICAgYTogcmdiYUFycmF5WzNdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZ2JPYmogPSBoZXhUb1JHQihjb2xvcik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYk9iai5yLCBnOiByZ2JPYmouZywgYjogcmdiT2JqLmIsIGE6IDEuMCB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbG9yLnIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmIgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhbHBoYSA9IGNvbG9yLmEgIT09IHVuZGVmaW5lZCA/IGNvbG9yLmEgOiBcIjEuMFwiO1xuICAgICAgICAgIHJnYmEgPSB7IHI6IGNvbG9yLnIsIGc6IGNvbG9yLmcsIGI6IGNvbG9yLmIsIGE6IGFscGhhIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBpZiAocmdiYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biBjb2xvciBwYXNzZWQgdG8gdGhlIGNvbG9yUGlja2VyLiBTdXBwb3J0ZWQgYXJlIHN0cmluZ3M6IHJnYiwgaGV4LCByZ2JhLiBPYmplY3Q6IHJnYiAoe3I6cixnOmcsYjpiLFthOmFdfSkuIFN1cHBsaWVkOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29sb3IpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzaG93cyB0aGUgY29sb3IgcGlja2VyLlxuICAgKiBUaGUgaHVlIGNpcmNsZSBpcyBjb25zdHJ1Y3RlZCBvbmNlIGFuZCBzdG9yZWQuXG4gICAqL1xuICBzaG93KCkge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHRoaXMuX2dlbmVyYXRlSHVlQ2lyY2xlKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwaWNrZXIuIElzIGNhbGxlZCBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogT3B0aW9uYWwgYm9vbGVhbiB0byBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIGVhc3kgYWNjZXNzIGxhdGVyIG9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZVByZXZpb3VzPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGlkZShzdG9yZVByZXZpb3VzID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBwcmV2aW91cyBjb2xvciBmb3IgbmV4dCB0aW1lO1xuICAgIGlmIChzdG9yZVByZXZpb3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQ29sb3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBsaWVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuaW5pdGlhbENvbG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICAgIC8vIGNhbGwgdGhlIGNsb3NpbmcgY2FsbGJhY2ssIHJlc3RvcmluZyB0aGUgb25jbGljayBtZXRob2QuXG4gICAgLy8gdGhpcyBpcyBpbiBhIHNldFRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgdGhlIHNob3cgYWdhaW4gYmVmb3JlIHRoZSBjbGljayBpcyBkb25lLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gdGhlIHNhdmUgYnV0dG9uLiBTYXZlcyBhbmQgaGlkZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2F2ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuX2hpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb3VuZCB0byBhcHBseSBidXR0b24uIFNhdmVzIGJ1dCBkb2VzIG5vdCBjbG9zZS4gSXMgdW5kb25lIGJ5IHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FwcGx5KCkge1xuICAgIHRoaXMuYXBwbGllZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogbG9hZCB0aGUgY29sb3IgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IodGhpcy5wcmV2aW91c0NvbG9yLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KFwiVGhlcmUgaXMgbm8gbGFzdCBjb2xvciB0byBsb2FkLi4uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGNvbG9yLCBwbGFjZSB0aGUgcGlja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZ2JhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NldEluaXRpYWw9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIGNvbG9yXG4gICAgaWYgKHNldEluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgcmdiYSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvciA9IHJnYmE7XG4gICAgY29uc3QgaHN2ID0gUkdCVG9IU1YocmdiYS5yLCByZ2JhLmcsIHJnYmEuYik7XG5cbiAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAyICogTWF0aC5QSTtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLnIgKiBoc3YucztcbiAgICBjb25zdCB4ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcbiAgICBjb25zdCB5ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIHggLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICB5IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudEhlaWdodCArIFwicHhcIjtcblxuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcihyZ2JhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBvcGFjaXR5IGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0T3BhY2l0eSh2YWx1ZSkge1xuICAgIHRoaXMuY29sb3IuYSA9IHZhbHVlIC8gMTAwO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBicmlnaHRuZXNzIGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJpZ2h0bmVzcyh2YWx1ZSkge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi52ID0gdmFsdWUgLyAxMDA7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgY29sb3IgcGlja2VyLiBBIGJsYWNrIGNpcmNsZSBvdmVybGF5cyB0aGUgaHVlIGNpcmNsZSB0byBtaW1pYyB0aGUgYnJpZ2h0bmVzcyBkZWNyZWFzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBpY2tlcihyZ2JhID0gdGhpcy5jb2xvcikge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgfVxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuXG4gICAgY3R4LnB1dEltYWdlRGF0YSh0aGlzLmh1ZUNpcmNsZSwgMCwgMCk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLDAsMCxcIiArICgxIC0gaHN2LnYpICsgXCIpXCI7XG4gICAgY3R4LmNpcmNsZSh0aGlzLmNlbnRlckNvb3JkaW5hdGVzLngsIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSwgdGhpcy5yKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudmFsdWUgPSAxMDAgKiBoc3YudjtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IDEwMCAqIHJnYmEuYTtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgY3JlYXRlIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFNpemUoKSB7XG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLndpZHRoID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuaGVpZ2h0ID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhbGwgZG9tIGVsZW1lbnRzXG4gICAqIFRPRE86IGNsZWFudXAsIGxvdHMgb2Ygc2ltaWxhciBkb20gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5mcmFtZS5jbGFzc05hbWUgPSBcInZpcy1jb2xvci1waWNrZXJcIjtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsYXNzTmFtZSA9IFwidmlzLXNlbGVjdG9yXCI7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcblxuICAgIGlmICghdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KSB7XG4gICAgICBjb25zdCBub0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7XG4gICAgICBub0NhbnZhcy5zdHlsZS5jb2xvciA9IFwicmVkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5wYWRkaW5nID0gXCIxMHB4XCI7XG4gICAgICBub0NhbnZhcy5pbm5lclRleHQgPSBcIkVycm9yOiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MIGNhbnZhc1wiO1xuICAgICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgKGN0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAxKTtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXNcbiAgICAgICAgLmdldENvbnRleHQoXCIyZFwiKVxuICAgICAgICAuc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbG9yXCI7XG5cbiAgICB0aGlzLm9wYWNpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eURpdi5jbGFzc05hbWUgPSBcInZpcy1vcGFjaXR5XCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0Rpdi5jbGFzc05hbWUgPSBcInZpcy1icmlnaHRuZXNzXCI7XG5cbiAgICB0aGlzLmFycm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmFycm93RGl2LmNsYXNzTmFtZSA9IFwidmlzLWFycm93XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS50eXBlID0gXCJyYW5nZVwiOyAvLyBOb3Qgc3VwcG9ydGVkIG9uIElFOVxuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWluID0gXCIwXCI7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5tYXggPSBcIjEwMFwiO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETzogQWRkIHNvbWUgZXJyb3IgaGFuZGxpbmcuXG4gICAgfVxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gXCIxMDBcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5jbGFzc05hbWUgPSBcInZpcy1yYW5nZVwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2LmFwcGVuZENoaWxkKHRoaXMub3BhY2l0eVJhbmdlKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuYXBwZW5kQ2hpbGQodGhpcy5icmlnaHRuZXNzUmFuZ2UpO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLWJyaWdodG5lc3NcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbC5pbm5lclRleHQgPSBcImJyaWdodG5lc3M6XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLW9wYWNpdHlcIjtcbiAgICB0aGlzLm9wYWNpdHlMYWJlbC5pbm5lclRleHQgPSBcIm9wYWNpdHk6XCI7XG5cbiAgICB0aGlzLm5ld0NvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmNsYXNzTmFtZSA9IFwidmlzLW5ldy1jb2xvclwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuaW5uZXJUZXh0ID0gXCJuZXdcIjtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1pbml0aWFsLWNvbG9yXCI7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuaW5uZXJUZXh0ID0gXCJpbml0aWFsXCI7XG5cbiAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1jYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBcImNhbmNlbFwiO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpO1xuXG4gICAgdGhpcy5hcHBseUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5pbm5lclRleHQgPSBcImFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fYXBwbHkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5zYXZlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtc2F2ZVwiO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5pbm5lclRleHQgPSBcInNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24ub25jbGljayA9IHRoaXMuX3NhdmUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubG9hZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5sb2FkQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtbG9hZFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5pbm5lclRleHQgPSBcImxvYWQgbGFzdFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fbG9hZExhc3QuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFycm93RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0xhYmVsKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uZXdDb2xvckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmluaXRpYWxDb2xvckRpdik7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2FuY2VsQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYXBwbHlCdXR0b24pO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5zYXZlQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubG9hZEJ1dHRvbik7XG4gIH1cblxuICAvKipcbiAgICogYmluZCBoYW1tZXIgdG8gdGhlIGNvbG9yIHBpY2tlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lciQxKHRoaXMuY29sb3JQaWNrZXJDYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuaGFtbWVyLm9uKFwiaGFtbWVyLmlucHV0XCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRmlyc3QpIHtcbiAgICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5zdGFydFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5tb3ZlXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIGh1ZSBjaXJjbGUuIFRoaXMgaXMgcmVsYXRpdmVseSBoZWF2eSAoMjAwbXMpIGFuZCBpcyBkb25lIG9ubHkgb25jZSBvbiB0aGUgZmlyc3QgdGltZSBpdCBpcyBzaG93bi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZW5lcmF0ZUh1ZUNpcmNsZSgpIHtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIDEpO1xuICAgICAgfVxuICAgICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgaCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gZHJhdyBodWUgY2lyY2xlXG4gICAgICBsZXQgeCwgeSwgaHVlLCBzYXQ7XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiB3ICogMC41LCB5OiBoICogMC41IH07XG4gICAgICB0aGlzLnIgPSAwLjQ5ICogdztcbiAgICAgIGNvbnN0IGFuZ2xlQ29udmVydCA9ICgyICogTWF0aC5QSSkgLyAzNjA7XG4gICAgICBjb25zdCBoZmFjID0gMSAvIDM2MDtcbiAgICAgIGNvbnN0IHNmYWMgPSAxIC8gdGhpcy5yO1xuICAgICAgbGV0IHJnYjtcbiAgICAgIGZvciAoaHVlID0gMDsgaHVlIDwgMzYwOyBodWUrKykge1xuICAgICAgICBmb3IgKHNhdCA9IDA7IHNhdCA8IHRoaXMucjsgc2F0KyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy54ICsgc2F0ICogTWF0aC5zaW4oYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICB5ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy55ICsgc2F0ICogTWF0aC5jb3MoYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICByZ2IgPSBIU1ZUb1JHQihodWUgKiBoZmFjLCBzYXQgKiBzZmFjLCAxKTtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2IoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCI7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KHggLSAwLjUsIHkgLSAwLjUsIDIsIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMSlcIjtcbiAgICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIHRoaXMuaHVlQ2lyY2xlID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIHNlbGVjdG9yLiBUaGlzIGlzIGNhbGxlZCBieSBoYW1tZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlU2VsZWN0b3IoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb2xvclBpY2tlckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gZXZlbnQuY2VudGVyLnggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gZXZlbnQuY2VudGVyLnkgLSByZWN0LnRvcDtcblxuICAgIGNvbnN0IGNlbnRlclkgPSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyRGl2LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBjZW50ZXJYID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRXaWR0aDtcblxuICAgIGNvbnN0IHggPSBsZWZ0IC0gY2VudGVyWDtcbiAgICBjb25zdCB5ID0gdG9wIC0gY2VudGVyWTtcblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih4LCB5KTtcbiAgICBjb25zdCByYWRpdXMgPSAwLjk4ICogTWF0aC5taW4oTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpLCBjZW50ZXJYKTtcblxuICAgIGNvbnN0IG5ld1RvcCA9IE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclk7XG4gICAgY29uc3QgbmV3TGVmdCA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclg7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUudG9wID1cbiAgICAgIG5ld1RvcCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLmxlZnQgPVxuICAgICAgbmV3TGVmdCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCArIFwicHhcIjtcblxuICAgIC8vIHNldCBjb2xvclxuICAgIGxldCBoID0gYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgIGggPSBoIDwgMCA/IGggKyAxIDogaDtcbiAgICBjb25zdCBzID0gcmFkaXVzIC8gdGhpcy5yO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi5oID0gaDtcbiAgICBoc3YucyA9IHM7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuXG4gICAgLy8gdXBkYXRlIHByZXZpZXdzXG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmNvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gIH1cbn07XG5cbi8qKlxuICogV3JhcCBnaXZlbiB0ZXh0IChsYXN0IGFyZ3VtZW50KSBpbiBIVE1MIGVsZW1lbnRzIChhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cykuXG4gKlxuICogQHBhcmFtIHsuLi5hbnl9IHJlc3QgLSBMaXN0IG9mIHRhZyBuYW1lcyBmb2xsb3dlZCBieSBpbm5lciB0ZXh0LlxuICogQHJldHVybnMgQW4gZWxlbWVudCBvciBhIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gd3JhcEluVGFnKC4uLnJlc3QpIHtcbiAgaWYgKHJlc3QubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cy5cIik7XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdFswXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmVzdFswXSk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoLi4ucmVzdC5zbGljZSgxKSkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGZvciBhbGwgcHJvcGVydGllcyBvZiB0aGlzLnBvc3NpYmxlIG9wdGlvbnMsIHlvdSBjYW4gc3VwcGx5IHRoZSBwcm9wZXJ0eSBuYW1lIGluIGFueSBmb3JtIHRvIGxpc3QgdGhlIG9wdGlvbnMuXG4gKiBCb29sZWFuIG9wdGlvbnMgYXJlIHJlY29nbmlzZWQgYXMgQm9vbGVhblxuICogTnVtYmVyIG9wdGlvbnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtkZWZhdWx0IHZhbHVlLCBtaW4gdmFsdWUsIG1heCB2YWx1ZSwgc3RlcHNpemVdXG4gKiBDb2xvcnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFsnY29sb3InLCAnI2ZmZmZmZiddXG4gKiBTdHJpbmdzIHdpdGggc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtvcHRpb24xLCBvcHRpb24yLCBvcHRpb24zLCAuLl1cbiAqXG4gKiBUaGUgb3B0aW9ucyBhcmUgbWF0Y2hlZCB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiBlYWNoIG9mIHRoZSBtb2R1bGVzIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYXJlXG4gKi9cbmxldCBDb25maWd1cmF0b3IkMSA9IGNsYXNzIENvbmZpZ3VyYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50TW9kdWxlICAgICAgICB8IHRoZSBsb2NhdGlvbiB3aGVyZSBwYXJlbnRNb2R1bGUuc2V0T3B0aW9ucygpIGNhbiBiZSBjYWxsZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRDb250YWluZXIgICAgfCB0aGUgZGVmYXVsdCBjb250YWluZXIgb2YgdGhlIG1vZHVsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlndXJlT3B0aW9ucyAgICB8IHRoZSBmdWxseSBjb25maWd1cmVkIGFuZCBwcmVkZWZpbmVkIG9wdGlvbnMgc2V0IGZvdW5kIGluIGFsbE9wdGlvbnMuanNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBpeGVsUmF0aW8gICAgICAgICAgfCBjYW52YXMgcGl4ZWwgcmF0aW9cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGlkZU9wdGlvbiAgICAgICAgfCBjdXN0b20gbG9naWMgdG8gZHluYW1pY2FsbHkgaGlkZSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnRNb2R1bGUsXG4gICAgZGVmYXVsdENvbnRhaW5lcixcbiAgICBjb25maWd1cmVPcHRpb25zLFxuICAgIHBpeGVsUmF0aW8gPSAxLFxuICAgIGhpZGVPcHRpb24gPSAoKSA9PiBmYWxzZVxuICApIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudE1vZHVsZTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyO1xuICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZU9wdGlvbiA9IGhpZGVPcHRpb247XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5wb3B1cENvdW50ZXIgPSAwO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgIGNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICAgICAgc2hvd0J1dHRvbjogdHJ1ZSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuY29uZmlndXJlT3B0aW9ucyA9IGNvbmZpZ3VyZU9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0ge307XG4gICAgdGhpcy5kb21FbGVtZW50cyA9IFtdO1xuICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB0aGlzLnBvcHVwTGltaXQgPSA1O1xuICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgdGhpcy5jb2xvclBpY2tlciA9IG5ldyBDb2xvclBpY2tlciQxKHBpeGVsUmF0aW8pO1xuICAgIHRoaXMud3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGFsbCBvcHRpb25zLlxuICAgKiBCZWNhdXNlIGFsbCBtb2R1bGVzIHBhcnNlIHRoZWlyIG9wdGlvbnMgYnkgdGhlbXNlbHZlcywgd2UganVzdCB1c2UgdGhlaXIgb3B0aW9ucy4gV2UgY29weSB0aGVtIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXNldCB0aGUgcG9wdXAgaGlzdG9yeSBiZWNhdXNlIHRoZSBpbmRpY2VzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuXG4gICAgICBsZXQgZW5hYmxlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuam9pbigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMgY2Fubm90IGJlIG51bGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0J1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dCdXR0b24gPSBvcHRpb25zLnNob3dCdXR0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIGVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICBlbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlT3B0aW9uc1xuICAgKi9cbiAgc2V0TW9kdWxlT3B0aW9ucyhtb2R1bGVPcHRpb25zKSB7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0gbW9kdWxlT3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy5maWx0ZXI7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gdGhpcy5jb25maWd1cmVPcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlndXJlT3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc2hvdyA9IGZpbHRlcihvcHRpb24sIFtdKTtcbiAgICAgICAgICBzaG93ID1cbiAgICAgICAgICAgIHNob3cgfHxcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbb3B0aW9uXSwgW29wdGlvbl0sIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIuaW5kZXhPZihvcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIGxpbmVicmVhayBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAgICAgICBpZiAoY291bnRlciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VJdGVtKFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYSBoZWFkZXIgZm9yIHRoZSBjYXRlZ29yeVxuICAgICAgICAgIHRoaXMuX21ha2VIZWFkZXIob3B0aW9uKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3ViIG9wdGlvbnNcbiAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dKTtcbiAgICAgICAgfVxuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21ha2VCdXR0b24oKTtcbiAgICB0aGlzLl9wdXNoKCk7XG4gICAgLy9+IHRoaXMuY29sb3JQaWNrZXIuaW5zZXJ0VG8odGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYXcgYWxsIERPTSBlbGVtZW50cyBvbiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHVzaCgpIHtcbiAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMud3JhcHBlci5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uLXdyYXBwZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tRWxlbWVudHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Nob3dQb3B1cElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogZGVsZXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53cmFwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcblxuICAgIHRoaXMuX3JlbW92ZVBvcHVwKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBhY3R1YWxPcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsdWUocGF0aCkge1xuICAgIGxldCBiYXNlID0gdGhpcy5tb2R1bGVPcHRpb25zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJhc2VbcGF0aFtpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBiYXNlID0gYmFzZVtwYXRoW2ldXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGwgb3B0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGVkIGluIGFuIGl0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBkb21FbGVtZW50c1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VJdGVtKHBhdGgsIC4uLmRvbUVsZW1lbnRzKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpdGVtLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1pdGVtIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgICBkb21FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogaGVhZGVyIGZvciBtYWpvciBzdWJqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VIZWFkZXIobmFtZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1oZWFkZXJcIjtcbiAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZTtcbiAgICB0aGlzLl9tYWtlSXRlbShbXSwgZGl2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgbGFiZWwsIGlmIGl0IGlzIGFuIG9iamVjdCBsYWJlbCwgaXQgZ2V0cyBkaWZmZXJlbnQgc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RMYWJlbFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUxhYmVsKG5hbWUsIHBhdGgsIG9iamVjdExhYmVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWxhYmVsIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgaWYgKG9iamVjdExhYmVsID09PSB0cnVlKSB7XG4gICAgICB3aGlsZSAoZGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIGRpdi5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoXCJpXCIsIFwiYlwiLCBuYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBuYW1lICsgXCI6XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGRyb3Bkb3duIGxpc3QgZm9yIG11bHRpcGxlIHBvc3NpYmxlIHN0cmluZyBvcHRvaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIHNlbGVjdC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctc2VsZWN0XCI7XG4gICAgbGV0IHNlbGVjdGVkVmFsdWUgPSAwO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgb3B0aW9uLnZhbHVlID0gYXJyW2ldO1xuICAgICAgaWYgKGkgPT09IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gXCJzZWxlY3RlZFwiO1xuICAgICAgfVxuICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGFycltpXTtcbiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBzZWxlY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSByYW5nZSBvYmplY3QgZm9yIG51bWVyaWMgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VSYW5nZShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJyWzBdO1xuICAgIGNvbnN0IG1pbiA9IGFyclsxXTtcbiAgICBjb25zdCBtYXggPSBhcnJbMl07XG4gICAgY29uc3Qgc3RlcCA9IGFyclszXTtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICByYW5nZS5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctcmFuZ2VcIjtcbiAgICB0cnkge1xuICAgICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gbm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHJhbmdlLm1pbiA9IG1pbjtcbiAgICAgIHJhbmdlLm1heCA9IG1heDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICByYW5nZS5zdGVwID0gc3RlcDtcblxuICAgIC8vIHNldCB1cCB0aGUgcG9wdXAgc2V0dGluZ3MgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQuXG4gICAgbGV0IHBvcHVwU3RyaW5nID0gXCJcIjtcbiAgICBsZXQgcG9wdXBWYWx1ZSA9IDA7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmFjdG9yID0gMS4yO1xuICAgICAgaWYgKHZhbHVlIDwgMCAmJiB2YWx1ZSAqIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgKiBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIC8gZmFjdG9yIDwgbWluKSB7XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGguY2VpbCh2YWx1ZSAvIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5taW47XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAqIGZhY3RvciA+IG1heCAmJiBtYXggIT09IDEpIHtcbiAgICAgICAgcmFuZ2UubWF4ID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1heDtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfVxuICAgICAgcmFuZ2UudmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlaW5wdXRcIjtcbiAgICBpbnB1dC52YWx1ZSA9IHJhbmdlLnZhbHVlO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgbWUuX3VwZGF0ZShOdW1iZXIodGhpcy52YWx1ZSksIHBhdGgpO1xuICAgIH07XG4gICAgcmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgcmFuZ2UsIGlucHV0KTtcblxuICAgIC8vIGlmIGEgcG9wdXAgaXMgbmVlZGVkIEFORCBpdCBoYXMgbm90IGJlZW4gc2hvd24gZm9yIHRoaXMgdmFsdWUsIHNob3cgaXQuXG4gICAgaWYgKHBvcHVwU3RyaW5nICE9PSBcIlwiICYmIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gIT09IHBvcHVwVmFsdWUpIHtcbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gPSBwb3B1cFZhbHVlO1xuICAgICAgdGhpcy5fc2V0dXBQb3B1cChwb3B1cFN0cmluZywgaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGJ1dHRvbiBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvblwiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uaW5uZXJUZXh0ID0gXCJnZW5lcmF0ZSBvcHRpb25zXCI7XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9wcmludE9wdGlvbnMoKTtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3ZlciA9ICgpID0+IHtcbiAgICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlclwiO1xuICAgICAgfTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLm9ubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXJcIjtcblxuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKHRoaXMub3B0aW9uc0NvbnRhaW5lcik7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goZ2VuZXJhdGVCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlIHRoZSBwb3B1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldHVwUG9wdXAoc3RyaW5nLCBpbmRleCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5wb3B1cENvdW50ZXIgPCB0aGlzLnBvcHVwTGltaXRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBkaXYuaWQgPSBcInZpcy1jb25maWd1cmF0aW9uLXBvcHVwXCI7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmlubmVyVGV4dCA9IHN0cmluZztcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyICs9IDE7XG4gICAgICB0aGlzLnBvcHVwRGl2ID0geyBodG1sOiBkaXYsIGluZGV4OiBpbmRleCB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUgdGhlIHBvcHVwIGZyb20gdGhlIGRvbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBwb3B1cCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd1BvcHVwSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMucG9wdXBEaXYuaHRtbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudHNbdGhpcy5wb3B1cERpdi5pbmRleF07XG4gICAgICBjb25zdCByZWN0ID0gY29ycmVzcG9uZGluZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5zdHlsZS50b3AgPSByZWN0LnRvcCAtIDMwICsgXCJweFwiOyAvLyAzMCBpcyB0aGUgaGVpZ2h0O1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpO1xuICAgICAgdGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICB9LCAxNTAwKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuZGVsZXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfSwgMTgwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBjaGVja2JveCBmb3IgYm9vbGVhbiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQ2hlY2tib3goZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy5jaGVja2VkLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgY2hlY2tib3gpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciBzdHJpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZVRleHRJbnB1dChkZWZhdWx0VmFsdWUsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgY2hlY2tib3gudHlwZSA9IFwidGV4dFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy10ZXh0XCI7XG4gICAgY2hlY2tib3gudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy52YWx1ZSwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY29sb3IgZmllbGQgd2l0aCBhIGNvbG9yIHBpY2tlciBmb3IgY29sb3IgZmllbGRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGFyclsxXTtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICE9PSBcIm5vbmVcIikge1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayBub25lXCI7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbG9yIDogdmFsdWU7XG4gICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogdXNlZCBieSB0aGUgY29sb3IgYnV0dG9ucyB0byBjYWxsIHRoZSBjb2xvciBwaWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBkaXZcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpIHtcbiAgICAvLyBjbGVhciB0aGUgY2FsbGJhY2sgZnJvbSB0aGlzIGRpdlxuICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKGRpdik7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zaG93KCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENvbG9yKHZhbHVlKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldFVwZGF0ZUNhbGxiYWNrKChjb2xvcikgPT4ge1xuICAgICAgY29uc3QgY29sb3JTdHJpbmcgPVxuICAgICAgICBcInJnYmEoXCIgKyBjb2xvci5yICsgXCIsXCIgKyBjb2xvci5nICsgXCIsXCIgKyBjb2xvci5iICsgXCIsXCIgKyBjb2xvci5hICsgXCIpXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JTdHJpbmc7XG4gICAgICB0aGlzLl91cGRhdGUoY29sb3JTdHJpbmcsIHBhdGgpO1xuICAgIH0pO1xuXG4gICAgLy8gb24gY2xvc2Ugb2YgdGhlIGNvbG9ycGlja2VyLCByZXN0b3JlIHRoZSBjYWxsYmFjay5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENsb3NlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcGFyc2UgYW4gb2JqZWN0IGFuZCBkcmF3IHRoZSBjb3JyZWN0IGl0ZW1zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtBcnJheX0gW3BhdGg9W11dICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tPbmx5PWZhbHNlXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVPYmplY3Qob2JqLCBwYXRoID0gW10sIGNoZWNrT25seSA9IGZhbHNlKSB7XG4gICAgbGV0IHNob3cgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCB2aXNpYmxlSW5TZXQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHN1Yk9iaiBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBzdWJPYmopKSB7XG4gICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICBjb25zdCBpdGVtID0gb2JqW3N1Yk9ial07XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgc3ViT2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIoc3ViT2JqLCBwYXRoKTtcblxuICAgICAgICAgIC8vIGlmIG5lZWRlZCB3ZSBtdXN0IGdvIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICAgICAgaWYgKHNob3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAgICAgICBpdGVtIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHNob3cgPSB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGNoZWNrT25seSA9PT0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmlzaWJsZUluU2V0ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKG5ld1BhdGgpO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycmF5KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlVGV4dElucHV0KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIHNraXAgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5oaWRlT3B0aW9uKHBhdGgsIHN1Yk9iaiwgdGhpcy5tb2R1bGVPcHRpb25zKSkge1xuICAgICAgICAgICAgICAvLyBpbml0aWFsbHkgY29sbGFwc2Ugb3B0aW9ucyB3aXRoIGFuIGRpc2FibGVkIGVuYWJsZWQgb3B0aW9uLlxuICAgICAgICAgICAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkUGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShuZXdQYXRoLCBcImVuYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoZW5hYmxlZFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkVmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgICB2aXNpYmxlSW5TZXQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlQ2hlY2tib3goaXRlbSwgZW5hYmxlZFZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwoc3ViT2JqLCBuZXdQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdChpdGVtLCBuZXdQYXRoKSB8fCB2aXNpYmxlSW5TZXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvbnQga25vdyBob3cgdG8gaGFuZGxlXCIsIGl0ZW0sIHN1Yk9iaiwgbmV3UGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlSW5TZXQ7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSBhcnJheSB0eXBlIG9mIG9wdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUFycmF5KGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIiAmJiBhcnJbMF0gPT09IFwiY29sb3JcIikge1xuICAgICAgdGhpcy5fbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzFdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9tYWtlRHJvcGRvd24oYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogTnVtYmVyKHZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIHRvIHVwZGF0ZSB0aGUgbmV0d29yayB3aXRoIHRoZSBuZXcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGUodmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudC5ib2R5ICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIgJiZcbiAgICAgIHRoaXMucGFyZW50LmJvZHkuZW1pdHRlci5lbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdChcImNvbmZpZ0NoYW5nZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wYXJlbnQuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGJvb2xlYW59IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHt7fX0gb3B0aW9uc09ialxuICAgKiBAcmV0dXJucyB7e319XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCwgb3B0aW9uc09iaiA9IHt9KSB7XG4gICAgbGV0IHBvaW50ZXIgPSBvcHRpb25zT2JqO1xuXG4gICAgLy8gd2hlbiBkcm9wZG93biBib3hlcyBjYW4gYmUgc3RyaW5nIG9yIGJvb2xlYW4sIHdlIHR5cGVjYXN0IGl0IGludG8gY29ycmVjdCB0eXBlc1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsdWU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXRoW2ldICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICAgIGlmIChwb2ludGVyW3BhdGhbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyW3BhdGhbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvaW50ZXJbcGF0aFtpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc09iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByaW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICB3aGlsZSAodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnNDb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgIHdyYXBJblRhZyhcInByZVwiLCBcImNvbnN0IG9wdGlvbnMgPSBcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t9fSBvcHRpb25zXG4gICAqL1xuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdE9wdGlvbnMoXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0udmFsdWUsXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0ucGF0aCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn07XG5cbi8qKlxuICogUG9wdXAgaXMgYSBjbGFzcyB0byBjcmVhdGUgYSBwb3B1cCB3aW5kb3cgd2l0aCBzb21lIHRleHRcbiAqL1xubGV0IFBvcHVwJDEgPSBjbGFzcyBQb3B1cCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgICAgICBUaGUgY29udGFpbmVyIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvdmVyZmxvd01ldGhvZCAgSG93IHRoZSBwb3B1cCBzaG91bGQgYWN0IHRvIG92ZXJmbG93aW5nICgnZmxpcCcgb3IgJ2NhcCcpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIG92ZXJmbG93TWV0aG9kKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5vdmVyZmxvd01ldGhvZCA9IG92ZXJmbG93TWV0aG9kIHx8IFwiY2FwXCI7XG5cbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5wYWRkaW5nID0gNTtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBmcmFtZVxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtdG9vbHRpcFwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgc2V0UG9zaXRpb24oeCwgeSkge1xuICAgIHRoaXMueCA9IHBhcnNlSW50KHgpO1xuICAgIHRoaXMueSA9IHBhcnNlSW50KHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29udGVudCBmb3IgdGhlIHBvcHVwIHdpbmRvdy4gVGhpcyBjYW4gYmUgSFRNTCBjb2RlIG9yIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRWxlbWVudH0gY29udGVudFxuICAgKi9cbiAgc2V0VGV4dChjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICB3aGlsZSAodGhpcy5mcmFtZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cmluZyBjb250YWluaW5nIGxpdGVyYWwgdGV4dCwgZWxlbWVudCBoYXMgdG8gYmUgdXNlZCBmb3IgSFRNTCBkdWUgdG9cbiAgICAgIC8vIFhTUyByaXNrcyBhc3NvY2lhdGVkIHdpdGggaW5uZXJIVE1MIChpLmUuIHByZXZlbnQgWFNTIGJ5IGFjY2lkZW50KS5cbiAgICAgIHRoaXMuZnJhbWUuaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgd2luZG93XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvU2hvd10gICAgU2hvdyBvciBoaWRlIHRoZSB3aW5kb3dcbiAgICovXG4gIHNob3coZG9TaG93KSB7XG4gICAgaWYgKGRvU2hvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb1Nob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkb1Nob3cgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZyYW1lLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudFdpZHRoO1xuXG4gICAgICBsZXQgbGVmdCA9IDAsXG4gICAgICAgIHRvcCA9IDA7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJmbG93TWV0aG9kID09IFwiZmxpcFwiKSB7XG4gICAgICAgIGxldCBpc0xlZnQgPSBmYWxzZSxcbiAgICAgICAgICBpc1RvcCA9IHRydWU7IC8vIFdoZXJlIGFyb3VuZCB0aGUgcG9zaXRpb24gaXQncyBsb2NhdGVkXG5cbiAgICAgICAgaWYgKHRoaXMueSAtIGhlaWdodCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzVG9wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy54ICsgd2lkdGggPiBtYXhXaWR0aCAtIHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzTGVmdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMueCAtIHdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIGlmICh0b3AgKyBoZWlnaHQgKyB0aGlzLnBhZGRpbmcgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICB0b3AgPSBtYXhIZWlnaHQgLSBoZWlnaHQgLSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIHRvcCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIGlmIChsZWZ0ICsgd2lkdGggKyB0aGlzLnBhZGRpbmcgPiBtYXhXaWR0aCkge1xuICAgICAgICAgIGxlZnQgPSBtYXhXaWR0aCAtIHdpZHRoIC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0IDwgdGhpcy5wYWRkaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZSk7IC8vIFJlbW92ZSBlbGVtZW50IGZyb20gRE9NXG4gIH1cbn07XG5cbmxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5sZXQgYWxsT3B0aW9ucztcblxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDEgPSBcImJhY2tncm91bmQ6ICNGRmVlZWU7IGNvbG9yOiAjZGQwMDAwXCI7XG5cbi8qKlxuICogIFVzZWQgdG8gdmFsaWRhdGUgb3B0aW9ucy5cbiAqL1xubGV0IFZhbGlkYXRvciQxID0gY2xhc3MgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJPYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBzdWJPYmplY3QpIHtcbiAgICBlcnJvckZvdW5kID0gZmFsc2U7XG4gICAgYWxsT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgbGV0IHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpZiAoc3ViT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9uc1tzdWJPYmplY3RdO1xuICAgIH1cbiAgICBWYWxpZGF0b3IucGFyc2Uob3B0aW9ucywgdXNlZE9wdGlvbnMsIFtdKTtcbiAgICByZXR1cm4gZXJyb3JGb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHRyYXZlcnNlIGFuIG9iamVjdCByZWN1cnNpdmVseSBhbmQgY2hlY2sgZXZlcnkgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICAgIFZhbGlkYXRvci5jaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBldmVyeSB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbCB0aGUgcGFyc2UgZnVuY3Rpb24gb24gdGhhdCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpIHtcbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIFZhbGlkYXRvci5nZXRTdWdnZXN0aW9uKG9wdGlvbiwgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZU9wdGlvbiA9IG9wdGlvbjtcbiAgICBsZXQgaXNfb2JqZWN0ID0gdHJ1ZTtcblxuICAgIGlmIChcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnNbb3B0aW9uXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICByZWZlcmVuY2VPcHRpb25zLl9fYW55X18gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTk9URTogVGhpcyBvbmx5IHRyaWdnZXJzIGlmIHRoZSBfX2FueV9fIGlzIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgLy8gICAgICAgVEhBVCdTIEEgUkVBTExZIEJBRCBQTEFDRSBUTyBBTExPVyBJVCEhISFcbiAgICAgIC8vIFRPRE86IEV4YW1pbmUgaWYgbmVlZGVkLCByZW1vdmUgaWYgcG9zc2libGVcblxuICAgICAgLy8gX19hbnlfXyBpcyBhIHdpbGRjYXJkLiBBbnkgdmFsdWUgaXMgYWNjZXB0ZWQgYW5kIHdpbGwgYmUgZnVydGhlciBhbmFseXNlZCBieSByZWZlcmVuY2UuXG4gICAgICByZWZlcmVuY2VPcHRpb24gPSBcIl9fYW55X19cIjtcblxuICAgICAgLy8gaWYgdGhlIGFueS1zdWJncm91cCBpcyBub3QgYSBwcmVkZWZpbmVkIG9iamVjdCBpbiB0aGUgY29uZmlndXJhdG9yLFxuICAgICAgLy8gd2UgZG8gbm90IGxvb2sgZGVlcGVyIGludG8gdGhlIG9iamVjdC5cbiAgICAgIGlzX29iamVjdCA9IFZhbGlkYXRvci5nZXRUeXBlKG9wdGlvbnNbb3B0aW9uXSkgPT09IFwib2JqZWN0XCI7XG4gICAgfVxuXG4gICAgbGV0IHJlZk9wdGlvbk9iaiA9IHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXTtcbiAgICBpZiAoaXNfb2JqZWN0ICYmIHJlZk9wdGlvbk9iai5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWZPcHRpb25PYmogPSByZWZPcHRpb25PYmouX190eXBlX187XG4gICAgfVxuXG4gICAgVmFsaWRhdG9yLmNoZWNrRmllbGRzKFxuICAgICAgb3B0aW9uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb24sXG4gICAgICByZWZPcHRpb25PYmosXG4gICAgICBwYXRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIG9wdGlvbiAgICAgICAgICAgfCB0aGUgb3B0aW9uIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICB8IFRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge29iamVjdH0gIHJlZmVyZW5jZU9wdGlvbnMgfCBUaGUgcmVmZXJlbmNlIG9wdGlvbnMgY29udGFpbmluZyBhbGwgb3B0aW9ucyBhbmQgdGhlaXIgYWxsb3dlZCBmb3JtYXRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgcmVmZXJlbmNlT3B0aW9uICB8IFVzdWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBvcHRpb24sIGV4Y2VwdCB3aGVuIGhhbmRsaW5nIGFuIF9fYW55X18gdGFnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZk9wdGlvbk9iaiAgICAgfCBUaGlzIGlzIHRoZSB0eXBlIG9iamVjdCBmcm9tIHRoZSByZWZlcmVuY2Ugb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBhdGggICAgICAgICAgICAgfCB3aGVyZSBpbiB0aGUgb2JqZWN0IGlzIHRoZSBvcHRpb25cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrRmllbGRzKFxuICAgIG9wdGlvbixcbiAgICBvcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgIHJlZk9wdGlvbk9iaixcbiAgICBwYXRoXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjXCIgKyBtZXNzYWdlICsgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKSxcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvblR5cGUgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pO1xuICAgIGNvbnN0IHJlZk9wdGlvblR5cGUgPSByZWZPcHRpb25PYmpbb3B0aW9uVHlwZV07XG5cbiAgICBpZiAocmVmT3B0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpZiB0aGUgdHlwZSBpcyBjb3JyZWN0LCB3ZSBjaGVjayBpZiBpdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgYSBmZXcgc2VsZWN0IHZhbHVlc1xuICAgICAgaWYgKFxuICAgICAgICBWYWxpZGF0b3IuZ2V0VHlwZShyZWZPcHRpb25UeXBlKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgIHJlZk9wdGlvblR5cGUuaW5kZXhPZihvcHRpb25zW29wdGlvbl0pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gXCInICtcbiAgICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgICAnXCIuJyArXG4gICAgICAgICAgICBcIiBBbGxvd2VkIHZhbHVlcyBhcmU6XCIgK1xuICAgICAgICAgICAgVmFsaWRhdG9yLnByaW50KHJlZk9wdGlvblR5cGUpICtcbiAgICAgICAgICAgICcgbm90IFwiJyArXG4gICAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICAgJ1wiLiAnXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25UeXBlID09PSBcIm9iamVjdFwiICYmIHJlZmVyZW5jZU9wdGlvbiAhPT0gXCJfX2FueV9fXCIpIHtcbiAgICAgICAgcGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcHRpb24pO1xuICAgICAgICBWYWxpZGF0b3IucGFyc2UoXG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25dLFxuICAgICAgICAgIHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWZPcHRpb25PYmpbXCJhbnlcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdHlwZSBvZiB0aGUgZmllbGQgaXMgaW5jb3JyZWN0IGFuZCB0aGUgZmllbGQgY2Fubm90IGJlIGFueVxuICAgICAgbG9nKFxuICAgICAgICAnSW52YWxpZCB0eXBlIHJlY2VpdmVkIGZvciBcIicgK1xuICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgJ1wiLiBFeHBlY3RlZDogJyArXG4gICAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKHJlZk9wdGlvbk9iaikpICtcbiAgICAgICAgICBcIi4gUmVjZWl2ZWQgW1wiICtcbiAgICAgICAgICBvcHRpb25UeXBlICtcbiAgICAgICAgICAnXSBcIicgK1xuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSArXG4gICAgICAgICAgJ1wiJ1xuICAgICAgKTtcbiAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBBcnJheS48bnVtYmVyPiB8IERhdGUgfCBOb2RlIHwgTW9tZW50IHwgdW5kZWZpbmVkIHwgbnVsbH0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRUeXBlKG9iamVjdCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xuXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Lm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiZG9tXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Ll9pc0FNb21lbnRPYmplY3QgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFwibW9tZW50XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRTdWdnZXN0aW9uKG9wdGlvbiwgb3B0aW9ucywgcGF0aCkge1xuICAgIGNvbnN0IGxvY2FsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCBmYWxzZSk7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBhbGxPcHRpb25zLCBbXSwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhbFNlYXJjaFRocmVzaG9sZCA9IDg7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoVGhyZXNob2xkID0gNDtcblxuICAgIGxldCBtc2c7XG4gICAgaWYgKGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guaW5kZXhNYXRjaCArXG4gICAgICAgICdcIj9cXG5cXG4nO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBnbG9iYWxTZWFyY2guZGlzdGFuY2UgPD0gZ2xvYmFsU2VhcmNoVGhyZXNob2xkICYmXG4gICAgICBsb2NhbFNlYXJjaC5kaXN0YW5jZSA+IGdsb2JhbFNlYXJjaC5kaXN0YW5jZVxuICAgICkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgXCJQZXJoYXBzIGl0IHdhcyBtaXNwbGFjZWQ/IE1hdGNoaW5nIG9wdGlvbiBmb3VuZCBhdDogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihcbiAgICAgICAgICBnbG9iYWxTZWFyY2gucGF0aCxcbiAgICAgICAgICBnbG9iYWxTZWFyY2guY2xvc2VzdE1hdGNoLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2FsU2VhcmNoLmRpc3RhbmNlIDw9IGxvY2FsU2VhcmNoVGhyZXNob2xkKSB7XG4gICAgICBtc2cgPVxuICAgICAgICAnLiBEaWQgeW91IG1lYW4gXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guY2xvc2VzdE1hdGNoICtcbiAgICAgICAgJ1wiPycgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPVxuICAgICAgICBcIi4gRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZTogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnQoT2JqZWN0LmtleXMob3B0aW9ucykpICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6IFwiJyArIG9wdGlvbiArICdcIicgKyBtc2csXG4gICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEUkMVxuICAgICk7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2UgdGhlIG9wdGlvbnMgaW4gc2VhcmNoIGZvciBhIG1hdGNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWN1cnNpdmU9ZmFsc2VdXG4gICAqIEByZXR1cm5zIHt7Y2xvc2VzdE1hdGNoOiBzdHJpbmcsIHBhdGg6IEFycmF5LCBkaXN0YW5jZTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAgIGxldCBtaW4gPSAxZTk7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaCA9IFwiXCI7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaFBhdGggPSBbXTtcbiAgICBjb25zdCBsb3dlckNhc2VPcHRpb24gPSBvcHRpb24udG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaW5kZXhNYXRjaCA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IG9wIGluIG9wdGlvbnMpIHtcbiAgICAgIGxldCBkaXN0YW5jZTtcbiAgICAgIGlmIChvcHRpb25zW29wXS5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkICYmIHJlY3Vyc2l2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWYWxpZGF0b3IuZmluZEluT3B0aW9ucyhcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgb3B0aW9uc1tvcF0sXG4gICAgICAgICAgY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIG9wKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWluID4gcmVzdWx0LmRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gcmVzdWx0LmNsb3Nlc3RNYXRjaDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gcmVzdWx0LnBhdGg7XG4gICAgICAgICAgbWluID0gcmVzdWx0LmRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSByZXN1bHQuaW5kZXhNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2VPcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSBvcDtcbiAgICAgICAgfVxuICAgICAgICBkaXN0YW5jZSA9IFZhbGlkYXRvci5sZXZlbnNodGVpbkRpc3RhbmNlKG9wdGlvbiwgb3ApO1xuICAgICAgICBpZiAobWluID4gZGlzdGFuY2UpIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2ggPSBvcDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gY29weUFycmF5KHBhdGgpO1xuICAgICAgICAgIG1pbiA9IGRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXN0TWF0Y2g6IGNsb3Nlc3RNYXRjaCxcbiAgICAgIHBhdGg6IGNsb3Nlc3RNYXRjaFBhdGgsXG4gICAgICBkaXN0YW5jZTogbWluLFxuICAgICAgaW5kZXhNYXRjaDogaW5kZXhNYXRjaCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiwgcHJlZml4ID0gXCJQcm9ibGVtIHZhbHVlIGZvdW5kIGF0OiBcXG5cIikge1xuICAgIGxldCBzdHIgPSBcIlxcblxcblwiICsgcHJlZml4ICsgXCJvcHRpb25zID0ge1xcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpICsgMTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gcGF0aFtpXSArIFwiOiB7XFxuXCI7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggKyAxOyBqKyspIHtcbiAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgfVxuICAgIHN0ciArPSBvcHRpb24gKyBcIlxcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggLSBpOyBqKyspIHtcbiAgICAgICAgc3RyICs9IFwiICBcIjtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBcIn1cXG5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0ciArIFwiXFxuXFxuXCI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHByaW50KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICAgIC5yZXBsYWNlKC8oXCIpfChcXFspfChcXF0pfCgsXCJfX3R5cGVfX1wiKS9nLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoLygsKS9nLCBcIiwgXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb21wdXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBnaXZlbiBzdHJpbmdzXG4gICAqIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL1N0cmluZ3MvTGV2ZW5zaHRlaW5fZGlzdGFuY2UjSmF2YVNjcmlwdFxuICAgKlxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5kcmVpIE1hY2tlbnppZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgKlxuICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICpcbiAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGxldmVuc2h0ZWluRGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbWF0cml4ID0gW107XG5cbiAgICAvLyBpbmNyZW1lbnQgYWxvbmcgdGhlIGZpcnN0IGNvbHVtbiBvZiBlYWNoIHJvd1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW2ldO1xuICAgIH1cblxuICAgIC8vIGluY3JlbWVudCBlYWNoIGNvbHVtbiBpbiB0aGUgZmlyc3Qgcm93XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cblxuICAgIC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG1hdHJpeFxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT0gYS5jaGFyQXQoaiAtIDEpKSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAxXVtqIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgICAgICBtYXRyaXhbaSAtIDFdW2ogLSAxXSArIDEsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgIG1hdHJpeFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqXSArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApOyAvLyBkZWxldGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xuICB9XG59O1xuXG5jb25zdCBBY3RpdmF0b3IgPSBBY3RpdmF0b3IkMTtcclxuY29uc3QgQ29sb3JQaWNrZXIgPSBDb2xvclBpY2tlciQxO1xyXG5jb25zdCBDb25maWd1cmF0b3IgPSBDb25maWd1cmF0b3IkMTtcclxuY29uc3QgSGFtbWVyID0gSGFtbWVyJDE7XHJcbmNvbnN0IFBvcHVwID0gUG9wdXAkMTtcclxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFID0gVkFMSURBVE9SX1BSSU5UX1NUWUxFJDE7XHJcbmNvbnN0IFZhbGlkYXRvciA9IFZhbGlkYXRvciQxO1xuXG5leHBvcnQgeyBBY3RpdmF0b3IsIEFsZWEsIENvbG9yUGlja2VyLCBDb25maWd1cmF0b3IsIERFTEVURSwgSFNWVG9IZXgsIEhTVlRvUkdCLCBIYW1tZXIsIFBvcHVwLCBSR0JUb0hTViwgUkdCVG9IZXgsIFZBTElEQVRPUl9QUklOVF9TVFlMRSwgVmFsaWRhdG9yLCBhZGRDbGFzc05hbWUsIGFkZENzc1RleHQsIGFkZEV2ZW50TGlzdGVuZXIsIGJpbmFyeVNlYXJjaEN1c3RvbSwgYmluYXJ5U2VhcmNoVmFsdWUsIGJyaWRnZU9iamVjdCwgY29weUFuZEV4dGVuZEFycmF5LCBjb3B5QXJyYXksIGRlZXBFeHRlbmQsIGRlZXBPYmplY3RBc3NpZ24sIGVhc2luZ0Z1bmN0aW9ucywgZXF1YWxBcnJheSwgZXh0ZW5kLCBmaWxsSWZEZWZpbmVkLCBmb3JFYWNoLCBnZXRBYnNvbHV0ZUxlZnQsIGdldEFic29sdXRlUmlnaHQsIGdldEFic29sdXRlVG9wLCBnZXRTY3JvbGxCYXJXaWR0aCwgZ2V0VGFyZ2V0LCBnZXRUeXBlLCBoYXNQYXJlbnQsIGhleFRvSFNWLCBoZXhUb1JHQiwgaW5zZXJ0U29ydCwgaXNEYXRlLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ZhbGlkSGV4LCBpc1ZhbGlkUkdCLCBpc1ZhbGlkUkdCQSwgbWVyZ2VPcHRpb25zLCBvcHRpb24sIG92ZXJyaWRlT3BhY2l0eSwgcGFyc2VDb2xvciwgcHJldmVudERlZmF1bHQsIHB1cmVEZWVwT2JqZWN0QXNzaWduLCByZWN1cnNpdmVET01EZWxldGUsIHJlbW92ZUNsYXNzTmFtZSwgcmVtb3ZlQ3NzVGV4dCwgcmVtb3ZlRXZlbnRMaXN0ZW5lciwgc2VsZWN0aXZlQnJpZGdlT2JqZWN0LCBzZWxlY3RpdmVEZWVwRXh0ZW5kLCBzZWxlY3RpdmVFeHRlbmQsIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsIHRocm90dGxlLCB0b0FycmF5LCB0b3BNb3N0LCB1cGRhdGVQcm9wZXJ0eSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmlzLXV0aWwuanMubWFwXG4iLCAiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG5cbi8qKlxuICogUGFyc2UgYSB0ZXh0IHNvdXJjZSBjb250YWluaW5nIGRhdGEgaW4gRE9UIGxhbmd1YWdlIGludG8gYSBKU09OIG9iamVjdC5cbiAqIFRoZSBvYmplY3QgY29udGFpbnMgdHdvIGxpc3RzOiBvbmUgd2l0aCBub2RlcyBhbmQgb25lIHdpdGggZWRnZXMuXG4gKlxuICogRE9UIGxhbmd1YWdlIHJlZmVyZW5jZTogaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvZG9jL2luZm8vbGFuZy5odG1sXG4gKlxuICogRE9UIGxhbmd1YWdlIGF0dHJpYnV0ZXM6IGh0dHA6Ly9ncmFwaHZpei5vcmcvY29udGVudC9hdHRyc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhICAgICBUZXh0IGNvbnRhaW5pbmcgYSBncmFwaCBpbiBET1Qtbm90YXRpb25cbiAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoICAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdHdvIHBhcmFtZXRlcnM6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAge09iamVjdFtdfSBub2Rlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIHtPYmplY3RbXX0gZWRnZXNcbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBUT0RPXG4gKiA9PT09XG4gKlxuICogRm9yIGxhYmVsIGhhbmRsaW5nLCB0aGlzIGlzIGFuIGluY29tcGxldGUgaW1wbGVtZW50YXRpb24uIEZyb20gZG9jcyAocXVvdGUgIzMwMTUpOlxuICpcbiAqID4gdGhlIGVzY2FwZSBzZXF1ZW5jZXMgXCJcXG5cIiwgXCJcXGxcIiBhbmQgXCJcXHJcIiBkaXZpZGUgdGhlIGxhYmVsIGludG8gbGluZXMsIGNlbnRlcmVkLFxuICogPiBsZWZ0LWp1c3RpZmllZCwgYW5kIHJpZ2h0LWp1c3RpZmllZCwgcmVzcGVjdGl2ZWx5LlxuICpcbiAqIFNvdXJjZTogaHR0cDovL3d3dy5ncmFwaHZpei5vcmcvY29udGVudC9hdHRycyNrZXNjU3RyaW5nXG4gKlxuICogPiBBcyBhbm90aGVyIGFpZCBmb3IgcmVhZGFiaWxpdHksIGRvdCBhbGxvd3MgZG91YmxlLXF1b3RlZCBzdHJpbmdzIHRvIHNwYW4gbXVsdGlwbGUgcGh5c2ljYWxcbiAqID4gbGluZXMgdXNpbmcgdGhlIHN0YW5kYXJkIEMgY29udmVudGlvbiBvZiBhIGJhY2tzbGFzaCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYSBuZXdsaW5lXG4gKiA+IGNoYXJhY3RlclxuICogPiBJbiBhZGRpdGlvbiwgZG91YmxlLXF1b3RlZCBzdHJpbmdzIGNhbiBiZSBjb25jYXRlbmF0ZWQgdXNpbmcgYSAnKycgb3BlcmF0b3IuXG4gKiA+IEFzIEhUTUwgc3RyaW5ncyBjYW4gY29udGFpbiBuZXdsaW5lIGNoYXJhY3RlcnMsIHdoaWNoIGFyZSB1c2VkIHNvbGVseSBmb3IgZm9ybWF0dGluZyxcbiAqID4gdGhlIGxhbmd1YWdlIGRvZXMgbm90IGFsbG93IGVzY2FwZWQgbmV3bGluZXMgb3IgY29uY2F0ZW5hdGlvbiBvcGVyYXRvcnMgdG8gYmUgdXNlZFxuICogPiB3aXRoaW4gdGhlbS5cbiAqXG4gKiAtIEN1cnJlbnRseSwgb25seSAnXFxcXG4nIGlzIGhhbmRsZWRcbiAqIC0gTm90ZSB0aGF0IHRleHQgZXhwbGljaXRseSBzYXlzICdsYWJlbHMnOyB0aGUgZG90IHBhcnNlciBjdXJyZW50bHkgaGFuZGxlcyBlc2NhcGVcbiAqICAgc2VxdWVuY2VzIGluICoqYWxsKiogc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRE9UKGRhdGEpIHtcbiAgZG90ID0gZGF0YTtcbiAgcmV0dXJuIHBhcnNlR3JhcGgoKTtcbn1cblxuLy8gbWFwcGluZyBvZiBhdHRyaWJ1dGVzIGZyb20gRE9UICh0aGUga2V5cykgdG8gdmlzLmpzICh0aGUgdmFsdWVzKVxudmFyIE5PREVfQVRUUl9NQVBQSU5HID0ge1xuICBmb250c2l6ZTogXCJmb250LnNpemVcIixcbiAgZm9udGNvbG9yOiBcImZvbnQuY29sb3JcIixcbiAgbGFiZWxmb250Y29sb3I6IFwiZm9udC5jb2xvclwiLFxuICBmb250bmFtZTogXCJmb250LmZhY2VcIixcbiAgY29sb3I6IFtcImNvbG9yLmJvcmRlclwiLCBcImNvbG9yLmJhY2tncm91bmRcIl0sXG4gIGZpbGxjb2xvcjogXCJjb2xvci5iYWNrZ3JvdW5kXCIsXG4gIHRvb2x0aXA6IFwidGl0bGVcIixcbiAgbGFiZWx0b29sdGlwOiBcInRpdGxlXCIsXG59O1xudmFyIEVER0VfQVRUUl9NQVBQSU5HID0gT2JqZWN0LmNyZWF0ZShOT0RFX0FUVFJfTUFQUElORyk7XG5FREdFX0FUVFJfTUFQUElORy5jb2xvciA9IFwiY29sb3IuY29sb3JcIjtcbkVER0VfQVRUUl9NQVBQSU5HLnN0eWxlID0gXCJkYXNoZXNcIjtcblxuLy8gdG9rZW4gdHlwZXMgZW51bWVyYXRpb25cbnZhciBUT0tFTlRZUEUgPSB7XG4gIE5VTEw6IDAsXG4gIERFTElNSVRFUjogMSxcbiAgSURFTlRJRklFUjogMixcbiAgVU5LTk9XTjogMyxcbn07XG5cbi8vIG1hcCB3aXRoIGFsbCBkZWxpbWl0ZXJzXG52YXIgREVMSU1JVEVSUyA9IHtcbiAgXCJ7XCI6IHRydWUsXG4gIFwifVwiOiB0cnVlLFxuICBcIltcIjogdHJ1ZSxcbiAgXCJdXCI6IHRydWUsXG4gIFwiO1wiOiB0cnVlLFxuICBcIj1cIjogdHJ1ZSxcbiAgXCIsXCI6IHRydWUsXG5cbiAgXCItPlwiOiB0cnVlLFxuICBcIi0tXCI6IHRydWUsXG59O1xuXG52YXIgZG90ID0gXCJcIjsgLy8gY3VycmVudCBkb3QgZmlsZVxudmFyIGluZGV4ID0gMDsgLy8gY3VycmVudCBpbmRleCBpbiBkb3QgZmlsZVxudmFyIGMgPSBcIlwiOyAvLyBjdXJyZW50IHRva2VuIGNoYXJhY3RlciBpbiBleHByXG52YXIgdG9rZW4gPSBcIlwiOyAvLyBjdXJyZW50IHRva2VuXG52YXIgdG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTEw7IC8vIHR5cGUgb2YgdGhlIHRva2VuXG5cbi8qKlxuICogR2V0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgZnJvbSB0aGUgZG90IGZpbGUuXG4gKiBUaGUgY2hhcmFjdGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBjaGFyIGMuIElmIHRoZSBlbmQgb2YgdGhlIGRvdCBmaWxlIGlzXG4gKiByZWFjaGVkLCB0aGUgZnVuY3Rpb24gcHV0cyBhbiBlbXB0eSBzdHJpbmcgaW4gYy5cbiAqL1xuZnVuY3Rpb24gZmlyc3QoKSB7XG4gIGluZGV4ID0gMDtcbiAgYyA9IGRvdC5jaGFyQXQoMCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBkb3QgZmlsZS5cbiAqIFRoZSBjaGFyYWN0ZXIgaXMgc3RvcmVkIGludG8gdGhlIGNoYXIgYy4gSWYgdGhlIGVuZCBvZiB0aGUgZG90IGZpbGUgaXNcbiAqIHJlYWNoZWQsIHRoZSBmdW5jdGlvbiBwdXRzIGFuIGVtcHR5IHN0cmluZyBpbiBjLlxuICovXG5mdW5jdGlvbiBuZXh0KCkge1xuICBpbmRleCsrO1xuICBjID0gZG90LmNoYXJBdChpbmRleCk7XG59XG5cbi8qKlxuICogUHJldmlldyB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgZG90IGZpbGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY05leHRcbiAqL1xuZnVuY3Rpb24gbmV4dFByZXZpZXcoKSB7XG4gIHJldHVybiBkb3QuY2hhckF0KGluZGV4ICsgMSk7XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGdpdmVuIGNoYXJhY3RlciBpcyBhbHBoYWJldGljIG9yIG51bWVyaWMgKCBhLXpBLVpfMC05LjojIClcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY1xuICogQHJldHVybnMge2Jvb2xlYW59IGlzQWxwaGFOdW1lcmljXG4gKi9cbmZ1bmN0aW9uIGlzQWxwaGFOdW1lcmljKGMpIHtcbiAgdmFyIGNoYXJDb2RlID0gYy5jaGFyQ29kZUF0KDApO1xuXG4gIGlmIChjaGFyQ29kZSA8IDQ3KSB7XG4gICAgLy8gIy5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDM1IHx8IGNoYXJDb2RlID09PSA0NjtcbiAgfVxuICBpZiAoY2hhckNvZGUgPCA1OSkge1xuICAgIC8vIDAtOSBhbmQgOlxuICAgIHJldHVybiBjaGFyQ29kZSA+IDQ3O1xuICB9XG4gIGlmIChjaGFyQ29kZSA8IDkxKSB7XG4gICAgLy8gQS1aXG4gICAgcmV0dXJuIGNoYXJDb2RlID4gNjQ7XG4gIH1cbiAgaWYgKGNoYXJDb2RlIDwgOTYpIHtcbiAgICAvLyBfXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSA5NTtcbiAgfVxuICBpZiAoY2hhckNvZGUgPCAxMjMpIHtcbiAgICAvLyBhLXpcbiAgICByZXR1cm4gY2hhckNvZGUgPiA5NjtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbGwgb3B0aW9ucyBvZiBvYmplY3QgYiBpbnRvIG9iamVjdCBiXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGFcbiAqIEBwYXJhbSB7b2JqZWN0fSBiXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBhXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKGEsIGIpIHtcbiAgaWYgKCFhKSB7XG4gICAgYSA9IHt9O1xuICB9XG5cbiAgaWYgKGIpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIGIpIHtcbiAgICAgIGlmIChiLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGFbbmFtZV0gPSBiW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBTZXQgYSB2YWx1ZSBpbiBhbiBvYmplY3QsIHdoZXJlIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXIgbmFtZSBjYW4gYmUgYVxuICogcGF0aCB3aXRoIG5lc3RlZCBwYXJhbWV0ZXJzLiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgdmFyIG9iaiA9IHthOiAyfTtcbiAqICAgICBzZXRWYWx1ZShvYmosICdiLmMnLCAzKTsgICAgIC8vIG9iaiA9IHthOiAyLCBiOiB7YzogM319XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggIEEgcGFyYW1ldGVyIG5hbWUgb3IgZG90LXNlcGFyYXRlZCBwYXJhbWV0ZXIgcGF0aCxcbiAqICAgICAgICAgICAgICAgICAgICAgIGxpa2UgXCJjb2xvci5oaWdobGlnaHQuYm9yZGVyXCIuXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHNldFZhbHVlKG9iaiwgcGF0aCwgdmFsdWUpIHtcbiAgdmFyIGtleXMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgdmFyIG8gPSBvYmo7XG4gIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgIHZhciBrZXkgPSBrZXlzLnNoaWZ0KCk7XG4gICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICAvLyB0aGlzIGlzbid0IHRoZSBlbmQgcG9pbnRcbiAgICAgIGlmICghb1trZXldKSB7XG4gICAgICAgIG9ba2V5XSA9IHt9O1xuICAgICAgfVxuICAgICAgbyA9IG9ba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgZW5kIHBvaW50XG4gICAgICBvW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYSBub2RlIHRvIGEgZ3JhcGggb2JqZWN0LiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgbm9kZSB3aXRoXG4gKiB0aGUgc2FtZSBpZCwgdGhlaXIgYXR0cmlidXRlcyB3aWxsIGJlIG1lcmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBub2RlXG4gKi9cbmZ1bmN0aW9uIGFkZE5vZGUoZ3JhcGgsIG5vZGUpIHtcbiAgdmFyIGksIGxlbjtcbiAgdmFyIGN1cnJlbnQgPSBudWxsO1xuXG4gIC8vIGZpbmQgcm9vdCBncmFwaCAoaW4gY2FzZSBvZiBzdWJncmFwaClcbiAgdmFyIGdyYXBocyA9IFtncmFwaF07IC8vIGxpc3Qgd2l0aCBhbGwgZ3JhcGhzIGZyb20gY3VycmVudCBncmFwaCB0byByb290IGdyYXBoXG4gIHZhciByb290ID0gZ3JhcGg7XG4gIHdoaWxlIChyb290LnBhcmVudCkge1xuICAgIGdyYXBocy5wdXNoKHJvb3QucGFyZW50KTtcbiAgICByb290ID0gcm9vdC5wYXJlbnQ7XG4gIH1cblxuICAvLyBmaW5kIGV4aXN0aW5nIG5vZGUgKGF0IHJvb3QgbGV2ZWwpIGJ5IGl0cyBpZFxuICBpZiAocm9vdC5ub2Rlcykge1xuICAgIGZvciAoaSA9IDAsIGxlbiA9IHJvb3Qubm9kZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChub2RlLmlkID09PSByb290Lm5vZGVzW2ldLmlkKSB7XG4gICAgICAgIGN1cnJlbnQgPSByb290Lm5vZGVzW2ldO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWN1cnJlbnQpIHtcbiAgICAvLyB0aGlzIGlzIGEgbmV3IG5vZGVcbiAgICBjdXJyZW50ID0ge1xuICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgfTtcbiAgICBpZiAoZ3JhcGgubm9kZSkge1xuICAgICAgLy8gY2xvbmUgZGVmYXVsdCBhdHRyaWJ1dGVzXG4gICAgICBjdXJyZW50LmF0dHIgPSBtZXJnZShjdXJyZW50LmF0dHIsIGdyYXBoLm5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFkZCBub2RlIHRvIHRoaXMgKHN1YilncmFwaCBhbmQgYWxsIGl0cyBwYXJlbnQgZ3JhcGhzXG4gIGZvciAoaSA9IGdyYXBocy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBnID0gZ3JhcGhzW2ldO1xuXG4gICAgaWYgKCFnLm5vZGVzKSB7XG4gICAgICBnLm5vZGVzID0gW107XG4gICAgfVxuICAgIGlmIChnLm5vZGVzLmluZGV4T2YoY3VycmVudCkgPT09IC0xKSB7XG4gICAgICBnLm5vZGVzLnB1c2goY3VycmVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2UgYXR0cmlidXRlc1xuICBpZiAobm9kZS5hdHRyKSB7XG4gICAgY3VycmVudC5hdHRyID0gbWVyZ2UoY3VycmVudC5hdHRyLCBub2RlLmF0dHIpO1xuICB9XG59XG5cbi8qKlxuICogQWRkIGFuIGVkZ2UgdG8gYSBncmFwaCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBlZGdlXG4gKi9cbmZ1bmN0aW9uIGFkZEVkZ2UoZ3JhcGgsIGVkZ2UpIHtcbiAgaWYgKCFncmFwaC5lZGdlcykge1xuICAgIGdyYXBoLmVkZ2VzID0gW107XG4gIH1cbiAgZ3JhcGguZWRnZXMucHVzaChlZGdlKTtcbiAgaWYgKGdyYXBoLmVkZ2UpIHtcbiAgICB2YXIgYXR0ciA9IG1lcmdlKHt9LCBncmFwaC5lZGdlKTsgLy8gY2xvbmUgZGVmYXVsdCBhdHRyaWJ1dGVzXG4gICAgZWRnZS5hdHRyID0gbWVyZ2UoYXR0ciwgZWRnZS5hdHRyKTsgLy8gbWVyZ2UgYXR0cmlidXRlc1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGVkZ2UgdG8gYSBncmFwaCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgb2JqZWN0fSBmcm9tXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IG9iamVjdH0gdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IGF0dHJcbiAqIEByZXR1cm5zIHtvYmplY3R9IGVkZ2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWRnZShncmFwaCwgZnJvbSwgdG8sIHR5cGUsIGF0dHIpIHtcbiAgdmFyIGVkZ2UgPSB7XG4gICAgZnJvbTogZnJvbSxcbiAgICB0bzogdG8sXG4gICAgdHlwZTogdHlwZSxcbiAgfTtcblxuICBpZiAoZ3JhcGguZWRnZSkge1xuICAgIGVkZ2UuYXR0ciA9IG1lcmdlKHt9LCBncmFwaC5lZGdlKTsgLy8gY2xvbmUgZGVmYXVsdCBhdHRyaWJ1dGVzXG4gIH1cbiAgZWRnZS5hdHRyID0gbWVyZ2UoZWRnZS5hdHRyIHx8IHt9LCBhdHRyKTsgLy8gbWVyZ2UgYXR0cmlidXRlc1xuXG4gIC8vIE1vdmUgYXJyb3dzIGF0dHJpYnV0ZSBmcm9tIGF0dHIgdG8gZWRnZSB0ZW1wb3JhbGx5IGNyZWF0ZWQgaW5cbiAgLy8gcGFyc2VBdHRyaWJ1dGVMaXN0KCkuXG4gIGlmIChhdHRyICE9IG51bGwpIHtcbiAgICBpZiAoYXR0ci5oYXNPd25Qcm9wZXJ0eShcImFycm93c1wiKSAmJiBhdHRyW1wiYXJyb3dzXCJdICE9IG51bGwpIHtcbiAgICAgIGVkZ2VbXCJhcnJvd3NcIl0gPSB7IHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGF0dHIuYXJyb3dzLnR5cGUgfSB9O1xuICAgICAgYXR0cltcImFycm93c1wiXSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHJldHVybiBlZGdlO1xufVxuXG4vKipcbiAqIEdldCBuZXh0IHRva2VuIGluIHRoZSBjdXJyZW50IGRvdCBmaWxlLlxuICogVGhlIHRva2VuIGFuZCB0b2tlbiB0eXBlIGFyZSBhdmFpbGFibGUgYXMgdG9rZW4gYW5kIHRva2VuVHlwZVxuICovXG5mdW5jdGlvbiBnZXRUb2tlbigpIHtcbiAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTEw7XG4gIHRva2VuID0gXCJcIjtcblxuICAvLyBza2lwIG92ZXIgd2hpdGVzcGFjZXNcbiAgd2hpbGUgKGMgPT09IFwiIFwiIHx8IGMgPT09IFwiXFx0XCIgfHwgYyA9PT0gXCJcXG5cIiB8fCBjID09PSBcIlxcclwiKSB7XG4gICAgLy8gc3BhY2UsIHRhYiwgZW50ZXJcbiAgICBuZXh0KCk7XG4gIH1cblxuICBkbyB7XG4gICAgdmFyIGlzQ29tbWVudCA9IGZhbHNlO1xuXG4gICAgLy8gc2tpcCBjb21tZW50XG4gICAgaWYgKGMgPT09IFwiI1wiKSB7XG4gICAgICAvLyBmaW5kIHRoZSBwcmV2aW91cyBub24tc3BhY2UgY2hhcmFjdGVyXG4gICAgICB2YXIgaSA9IGluZGV4IC0gMTtcbiAgICAgIHdoaWxlIChkb3QuY2hhckF0KGkpID09PSBcIiBcIiB8fCBkb3QuY2hhckF0KGkpID09PSBcIlxcdFwiKSB7XG4gICAgICAgIGktLTtcbiAgICAgIH1cbiAgICAgIGlmIChkb3QuY2hhckF0KGkpID09PSBcIlxcblwiIHx8IGRvdC5jaGFyQXQoaSkgPT09IFwiXCIpIHtcbiAgICAgICAgLy8gdGhlICMgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSwgdGhpcyBpcyBpbmRlZWQgYSBsaW5lIGNvbW1lbnRcbiAgICAgICAgd2hpbGUgKGMgIT0gXCJcIiAmJiBjICE9IFwiXFxuXCIpIHtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaXNDb21tZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGMgPT09IFwiL1wiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiL1wiKSB7XG4gICAgICAvLyBza2lwIGxpbmUgY29tbWVudFxuICAgICAgd2hpbGUgKGMgIT0gXCJcIiAmJiBjICE9IFwiXFxuXCIpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgICAgaXNDb21tZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGMgPT09IFwiL1wiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiKlwiKSB7XG4gICAgICAvLyBza2lwIGJsb2NrIGNvbW1lbnRcbiAgICAgIHdoaWxlIChjICE9IFwiXCIpIHtcbiAgICAgICAgaWYgKGMgPT09IFwiKlwiICYmIG5leHRQcmV2aWV3KCkgPT09IFwiL1wiKSB7XG4gICAgICAgICAgLy8gZW5kIG9mIGJsb2NrIGNvbW1lbnQgZm91bmQuIHNraXAgdGhlc2UgbGFzdCB0d28gY2hhcmFjdGVyc1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpc0NvbW1lbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIHNraXAgb3ZlciB3aGl0ZXNwYWNlc1xuICAgIHdoaWxlIChjID09PSBcIiBcIiB8fCBjID09PSBcIlxcdFwiIHx8IGMgPT09IFwiXFxuXCIgfHwgYyA9PT0gXCJcXHJcIikge1xuICAgICAgLy8gc3BhY2UsIHRhYiwgZW50ZXJcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH0gd2hpbGUgKGlzQ29tbWVudCk7XG5cbiAgLy8gY2hlY2sgZm9yIGVuZCBvZiBkb3QgZmlsZVxuICBpZiAoYyA9PT0gXCJcIikge1xuICAgIC8vIHRva2VuIGlzIHN0aWxsIGVtcHR5XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDIgY2hhcmFjdGVyc1xuICB2YXIgYzIgPSBjICsgbmV4dFByZXZpZXcoKTtcbiAgaWYgKERFTElNSVRFUlNbYzJdKSB7XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICB0b2tlbiA9IGMyO1xuICAgIG5leHQoKTtcbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gY2hlY2sgZm9yIGRlbGltaXRlcnMgY29uc2lzdGluZyBvZiAxIGNoYXJhY3RlclxuICBpZiAoREVMSU1JVEVSU1tjXSkge1xuICAgIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgdG9rZW4gPSBjO1xuICAgIG5leHQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjaGVjayBmb3IgYW4gaWRlbnRpZmllciAobnVtYmVyIG9yIHN0cmluZylcbiAgLy8gVE9ETzogbW9yZSBwcmVjaXNlIHBhcnNpbmcgb2YgbnVtYmVycy9zdHJpbmdzIChhbmQgdGhlIHBvcnQgc2VwYXJhdG9yICc6JylcbiAgaWYgKGlzQWxwaGFOdW1lcmljKGMpIHx8IGMgPT09IFwiLVwiKSB7XG4gICAgdG9rZW4gKz0gYztcbiAgICBuZXh0KCk7XG5cbiAgICB3aGlsZSAoaXNBbHBoYU51bWVyaWMoYykpIHtcbiAgICAgIHRva2VuICs9IGM7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICAgIGlmICh0b2tlbiA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICB0b2tlbiA9IGZhbHNlOyAvLyBjb252ZXJ0IHRvIGJvb2xlYW5cbiAgICB9IGVsc2UgaWYgKHRva2VuID09PSBcInRydWVcIikge1xuICAgICAgdG9rZW4gPSB0cnVlOyAvLyBjb252ZXJ0IHRvIGJvb2xlYW5cbiAgICB9IGVsc2UgaWYgKCFpc05hTihOdW1iZXIodG9rZW4pKSkge1xuICAgICAgdG9rZW4gPSBOdW1iZXIodG9rZW4pOyAvLyBjb252ZXJ0IHRvIG51bWJlclxuICAgIH1cbiAgICB0b2tlblR5cGUgPSBUT0tFTlRZUEUuSURFTlRJRklFUjtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBjaGVjayBmb3IgYSBzdHJpbmcgZW5jbG9zZWQgYnkgZG91YmxlIHF1b3Rlc1xuICBpZiAoYyA9PT0gJ1wiJykge1xuICAgIG5leHQoKTtcbiAgICB3aGlsZSAoYyAhPSBcIlwiICYmIChjICE9ICdcIicgfHwgKGMgPT09ICdcIicgJiYgbmV4dFByZXZpZXcoKSA9PT0gJ1wiJykpKSB7XG4gICAgICBpZiAoYyA9PT0gJ1wiJykge1xuICAgICAgICAvLyBza2lwIHRoZSBlc2NhcGUgY2hhcmFjdGVyXG4gICAgICAgIHRva2VuICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gXCJcXFxcXCIgJiYgbmV4dFByZXZpZXcoKSA9PT0gXCJuXCIpIHtcbiAgICAgICAgLy8gSG9ub3IgYSBuZXdsaW5lIGVzY2FwZSBzZXF1ZW5jZVxuICAgICAgICB0b2tlbiArPSBcIlxcblwiO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlbiArPSBjO1xuICAgICAgfVxuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICBpZiAoYyAhPSAnXCInKSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignRW5kIG9mIHN0cmluZyBcIiBleHBlY3RlZCcpO1xuICAgIH1cbiAgICBuZXh0KCk7XG4gICAgdG9rZW5UeXBlID0gVE9LRU5UWVBFLklERU5USUZJRVI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gc29tZXRoaW5nIHVua25vd24gaXMgZm91bmQsIHdyb25nIGNoYXJhY3RlcnMsIGEgc3ludGF4IGVycm9yXG4gIHRva2VuVHlwZSA9IFRPS0VOVFlQRS5VTktOT1dOO1xuICB3aGlsZSAoYyAhPSBcIlwiKSB7XG4gICAgdG9rZW4gKz0gYztcbiAgICBuZXh0KCk7XG4gIH1cbiAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdTeW50YXggZXJyb3IgaW4gcGFydCBcIicgKyBjaG9wKHRva2VuLCAzMCkgKyAnXCInKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIGdyYXBoLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoXG4gKi9cbmZ1bmN0aW9uIHBhcnNlR3JhcGgoKSB7XG4gIHZhciBncmFwaCA9IHt9O1xuXG4gIGZpcnN0KCk7XG4gIGdldFRva2VuKCk7XG5cbiAgLy8gb3B0aW9uYWwgc3RyaWN0IGtleXdvcmRcbiAgaWYgKHRva2VuID09PSBcInN0cmljdFwiKSB7XG4gICAgZ3JhcGguc3RyaWN0ID0gdHJ1ZTtcbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLy8gZ3JhcGggb3IgZGlncmFwaCBrZXl3b3JkXG4gIGlmICh0b2tlbiA9PT0gXCJncmFwaFwiIHx8IHRva2VuID09PSBcImRpZ3JhcGhcIikge1xuICAgIGdyYXBoLnR5cGUgPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLy8gb3B0aW9uYWwgZ3JhcGggaWRcbiAgaWYgKHRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICBncmFwaC5pZCA9IHRva2VuO1xuICAgIGdldFRva2VuKCk7XG4gIH1cblxuICAvLyBvcGVuIGFuZ2xlIGJyYWNrZXRcbiAgaWYgKHRva2VuICE9IFwie1wiKSB7XG4gICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJBbmdsZSBicmFja2V0IHsgZXhwZWN0ZWRcIik7XG4gIH1cbiAgZ2V0VG9rZW4oKTtcblxuICAvLyBzdGF0ZW1lbnRzXG4gIHBhcnNlU3RhdGVtZW50cyhncmFwaCk7XG5cbiAgLy8gY2xvc2UgYW5nbGUgYnJhY2tldFxuICBpZiAodG9rZW4gIT0gXCJ9XCIpIHtcbiAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkFuZ2xlIGJyYWNrZXQgfSBleHBlY3RlZFwiKTtcbiAgfVxuICBnZXRUb2tlbigpO1xuXG4gIC8vIGVuZCBvZiBmaWxlXG4gIGlmICh0b2tlbiAhPT0gXCJcIikge1xuICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiRW5kIG9mIGZpbGUgZXhwZWN0ZWRcIik7XG4gIH1cbiAgZ2V0VG9rZW4oKTtcblxuICAvLyByZW1vdmUgdGVtcG9yYXJ5IGRlZmF1bHQgb3B0aW9uc1xuICBkZWxldGUgZ3JhcGgubm9kZTtcbiAgZGVsZXRlIGdyYXBoLmVkZ2U7XG4gIGRlbGV0ZSBncmFwaC5ncmFwaDtcblxuICByZXR1cm4gZ3JhcGg7XG59XG5cbi8qKlxuICogUGFyc2UgYSBsaXN0IHdpdGggc3RhdGVtZW50cy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZ3JhcGhcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnRzKGdyYXBoKSB7XG4gIHdoaWxlICh0b2tlbiAhPT0gXCJcIiAmJiB0b2tlbiAhPSBcIn1cIikge1xuICAgIHBhcnNlU3RhdGVtZW50KGdyYXBoKTtcbiAgICBpZiAodG9rZW4gPT09IFwiO1wiKSB7XG4gICAgICBnZXRUb2tlbigpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIGEgc2luZ2xlIHN0YXRlbWVudC4gQ2FuIGJlIGEgYW4gYXR0cmlidXRlIHN0YXRlbWVudCwgbm9kZVxuICogc3RhdGVtZW50LCBhIHNlcmllcyBvZiBub2RlIHN0YXRlbWVudHMgYW5kIGVkZ2Ugc3RhdGVtZW50cywgb3IgYVxuICogcGFyYW1ldGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICovXG5mdW5jdGlvbiBwYXJzZVN0YXRlbWVudChncmFwaCkge1xuICAvLyBwYXJzZSBzdWJncmFwaFxuICB2YXIgc3ViZ3JhcGggPSBwYXJzZVN1YmdyYXBoKGdyYXBoKTtcbiAgaWYgKHN1YmdyYXBoKSB7XG4gICAgLy8gZWRnZSBzdGF0ZW1lbnRzXG4gICAgcGFyc2VFZGdlKGdyYXBoLCBzdWJncmFwaCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBwYXJzZSBhbiBhdHRyaWJ1dGUgc3RhdGVtZW50XG4gIHZhciBhdHRyID0gcGFyc2VBdHRyaWJ1dGVTdGF0ZW1lbnQoZ3JhcGgpO1xuICBpZiAoYXR0cikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIHBhcnNlIG5vZGVcbiAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSWRlbnRpZmllciBleHBlY3RlZFwiKTtcbiAgfVxuICB2YXIgaWQgPSB0b2tlbjsgLy8gaWQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyXG4gIGdldFRva2VuKCk7XG5cbiAgaWYgKHRva2VuID09PSBcIj1cIikge1xuICAgIC8vIGlkIHN0YXRlbWVudFxuICAgIGdldFRva2VuKCk7XG4gICAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJJZGVudGlmaWVyIGV4cGVjdGVkXCIpO1xuICAgIH1cbiAgICBncmFwaFtpZF0gPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuICAgIC8vIFRPRE86IGltcGxlbWVudCBjb21tYSBzZXBhcmF0ZWQgbGlzdCB3aXRoIFwiYV9saXN0OiBJRD1JRCBbJywnXSBbYV9saXN0XSBcIlxuICB9IGVsc2Uge1xuICAgIHBhcnNlTm9kZVN0YXRlbWVudChncmFwaCwgaWQpO1xuICB9XG59XG5cbi8qKlxuICogUGFyc2UgYSBzdWJncmFwaFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaCAgICBwYXJlbnQgZ3JhcGggb2JqZWN0XG4gKiBAcmV0dXJucyB7b2JqZWN0IHwgbnVsbH0gc3ViZ3JhcGhcbiAqL1xuZnVuY3Rpb24gcGFyc2VTdWJncmFwaChncmFwaCkge1xuICB2YXIgc3ViZ3JhcGggPSBudWxsO1xuXG4gIC8vIG9wdGlvbmFsIHN1YmdyYXBoIGtleXdvcmRcbiAgaWYgKHRva2VuID09PSBcInN1YmdyYXBoXCIpIHtcbiAgICBzdWJncmFwaCA9IHt9O1xuICAgIHN1YmdyYXBoLnR5cGUgPSBcInN1YmdyYXBoXCI7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIG9wdGlvbmFsIGdyYXBoIGlkXG4gICAgaWYgKHRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICAgIHN1YmdyYXBoLmlkID0gdG9rZW47XG4gICAgICBnZXRUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG9wZW4gYW5nbGUgYnJhY2tldFxuICBpZiAodG9rZW4gPT09IFwie1wiKSB7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIGlmICghc3ViZ3JhcGgpIHtcbiAgICAgIHN1YmdyYXBoID0ge307XG4gICAgfVxuICAgIHN1YmdyYXBoLnBhcmVudCA9IGdyYXBoO1xuICAgIHN1YmdyYXBoLm5vZGUgPSBncmFwaC5ub2RlO1xuICAgIHN1YmdyYXBoLmVkZ2UgPSBncmFwaC5lZGdlO1xuICAgIHN1YmdyYXBoLmdyYXBoID0gZ3JhcGguZ3JhcGg7XG5cbiAgICAvLyBzdGF0ZW1lbnRzXG4gICAgcGFyc2VTdGF0ZW1lbnRzKHN1YmdyYXBoKTtcblxuICAgIC8vIGNsb3NlIGFuZ2xlIGJyYWNrZXRcbiAgICBpZiAodG9rZW4gIT0gXCJ9XCIpIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiQW5nbGUgYnJhY2tldCB9IGV4cGVjdGVkXCIpO1xuICAgIH1cbiAgICBnZXRUb2tlbigpO1xuXG4gICAgLy8gcmVtb3ZlIHRlbXBvcmFyeSBkZWZhdWx0IG9wdGlvbnNcbiAgICBkZWxldGUgc3ViZ3JhcGgubm9kZTtcbiAgICBkZWxldGUgc3ViZ3JhcGguZWRnZTtcbiAgICBkZWxldGUgc3ViZ3JhcGguZ3JhcGg7XG4gICAgZGVsZXRlIHN1YmdyYXBoLnBhcmVudDtcblxuICAgIC8vIHJlZ2lzdGVyIGF0IHRoZSBwYXJlbnQgZ3JhcGhcbiAgICBpZiAoIWdyYXBoLnN1YmdyYXBocykge1xuICAgICAgZ3JhcGguc3ViZ3JhcGhzID0gW107XG4gICAgfVxuICAgIGdyYXBoLnN1YmdyYXBocy5wdXNoKHN1YmdyYXBoKTtcbiAgfVxuXG4gIHJldHVybiBzdWJncmFwaDtcbn1cblxuLyoqXG4gKiBwYXJzZSBhbiBhdHRyaWJ1dGUgc3RhdGVtZW50IGxpa2UgXCJub2RlIFtzaGFwZT1jaXJjbGUgZm9udFNpemU9MTZdXCIuXG4gKiBBdmFpbGFibGUga2V5d29yZHMgYXJlICdub2RlJywgJ2VkZ2UnLCAnZ3JhcGgnLlxuICogVGhlIHByZXZpb3VzIGxpc3Qgd2l0aCBkZWZhdWx0IGF0dHJpYnV0ZXMgd2lsbCBiZSByZXBsYWNlZFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICogQHJldHVybnMge3N0cmluZyB8IG51bGx9IGtleXdvcmQgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgcGFyc2VkIGF0dHJpYnV0ZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGUsIGVkZ2UsIGdyYXBoKSwgb3IgbnVsbCBpZiBub3RoaW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBwYXJzZWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlU3RhdGVtZW50KGdyYXBoKSB7XG4gIC8vIGF0dHJpYnV0ZSBzdGF0ZW1lbnRzXG4gIGlmICh0b2tlbiA9PT0gXCJub2RlXCIpIHtcbiAgICBnZXRUb2tlbigpO1xuXG4gICAgLy8gbm9kZSBhdHRyaWJ1dGVzXG4gICAgZ3JhcGgubm9kZSA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICAgIHJldHVybiBcIm5vZGVcIjtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gXCJlZGdlXCIpIHtcbiAgICBnZXRUb2tlbigpO1xuXG4gICAgLy8gZWRnZSBhdHRyaWJ1dGVzXG4gICAgZ3JhcGguZWRnZSA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICAgIHJldHVybiBcImVkZ2VcIjtcbiAgfSBlbHNlIGlmICh0b2tlbiA9PT0gXCJncmFwaFwiKSB7XG4gICAgZ2V0VG9rZW4oKTtcblxuICAgIC8vIGdyYXBoIGF0dHJpYnV0ZXNcbiAgICBncmFwaC5ncmFwaCA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuICAgIHJldHVybiBcImdyYXBoXCI7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBwYXJzZSBhIG5vZGUgc3RhdGVtZW50XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGdyYXBoXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gaWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VOb2RlU3RhdGVtZW50KGdyYXBoLCBpZCkge1xuICAvLyBub2RlIHN0YXRlbWVudFxuICB2YXIgbm9kZSA9IHtcbiAgICBpZDogaWQsXG4gIH07XG4gIHZhciBhdHRyID0gcGFyc2VBdHRyaWJ1dGVMaXN0KCk7XG4gIGlmIChhdHRyKSB7XG4gICAgbm9kZS5hdHRyID0gYXR0cjtcbiAgfVxuICBhZGROb2RlKGdyYXBoLCBub2RlKTtcblxuICAvLyBlZGdlIHN0YXRlbWVudHNcbiAgcGFyc2VFZGdlKGdyYXBoLCBpZCk7XG59XG5cbi8qKlxuICogUGFyc2UgYW4gZWRnZSBvciBhIHNlcmllcyBvZiBlZGdlc1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBncmFwaFxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGZyb20gICAgICAgIElkIG9mIHRoZSBmcm9tIG5vZGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VFZGdlKGdyYXBoLCBmcm9tKSB7XG4gIHdoaWxlICh0b2tlbiA9PT0gXCItPlwiIHx8IHRva2VuID09PSBcIi0tXCIpIHtcbiAgICB2YXIgdG87XG4gICAgdmFyIHR5cGUgPSB0b2tlbjtcbiAgICBnZXRUb2tlbigpO1xuXG4gICAgdmFyIHN1YmdyYXBoID0gcGFyc2VTdWJncmFwaChncmFwaCk7XG4gICAgaWYgKHN1YmdyYXBoKSB7XG4gICAgICB0byA9IHN1YmdyYXBoO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodG9rZW5UeXBlICE9IFRPS0VOVFlQRS5JREVOVElGSUVSKSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiSWRlbnRpZmllciBvciBzdWJncmFwaCBleHBlY3RlZFwiKTtcbiAgICAgIH1cbiAgICAgIHRvID0gdG9rZW47XG4gICAgICBhZGROb2RlKGdyYXBoLCB7XG4gICAgICAgIGlkOiB0byxcbiAgICAgIH0pO1xuICAgICAgZ2V0VG9rZW4oKTtcbiAgICB9XG5cbiAgICAvLyBwYXJzZSBlZGdlIGF0dHJpYnV0ZXNcbiAgICB2YXIgYXR0ciA9IHBhcnNlQXR0cmlidXRlTGlzdCgpO1xuXG4gICAgLy8gY3JlYXRlIGVkZ2VcbiAgICB2YXIgZWRnZSA9IGNyZWF0ZUVkZ2UoZ3JhcGgsIGZyb20sIHRvLCB0eXBlLCBhdHRyKTtcbiAgICBhZGRFZGdlKGdyYXBoLCBlZGdlKTtcblxuICAgIGZyb20gPSB0bztcbiAgfVxufVxuXG4vKipcbiAqIEFzIGV4cGxhaW5lZCBpbiBbMV0sIGdyYXBodml6IGhhcyBsaW1pdGF0aW9ucyBmb3IgY29tYmluYXRpb24gb2ZcbiAqIGFycm93W2hlYWR8dGFpbF0gYW5kIGRpci4gSWYgYXR0cmlidXRlIGxpc3QgaW5jbHVkZXMgJ2RpcicsXG4gKiBmb2xsb3dpbmcgY2FzZXMganVzdCBiZSBzdXBwb3J0ZWQuXG4gKiAgIDEuIGJvdGggb3Igbm9uZSArIGFycm93aGVhZCwgYXJyb3d0YWlsXG4gKiAgIDIuIGZvcndhcmQgKyBhcnJvd2hlYWQgKGFycm93dGFpbCBpcyBub3QgYWZmZWR0ZWQpXG4gKiAgIDMuIGJhY2sgKyBhcnJvd3RhaWwgKGFycm93aGVhZCBpcyBub3QgYWZmZWN0ZWQpXG4gKiBbMV0gaHR0cHM6Ly93d3cuZ3JhcGh2aXoub3JnL2RvYy9pbmZvL2F0dHJzLmh0bWwjaDp1bmRpcl9ub3RlXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwYXJzZUF0dHJpYnV0ZUxpc3QoKSB0byBwYXJzZSAnZGlyJ1xuICogYXR0cmlidXRlIHdpdGggZ2l2ZW4gJ2F0dHJfbmFtZXMnIGFuZCAnYXR0cl9saXN0Jy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gYXR0cl9uYW1lcyAgQXJyYXkgb2YgYXR0cmlidXRlIG5hbWVzXG4gKiBAcGFyYW0ge29iamVjdH0gYXR0cl9saXN0ICBBcnJheSBvZiBvYmplY3RzIG9mIGF0dHJpYnV0ZSBzZXRcbiAqIEByZXR1cm5zIHtvYmplY3R9IGF0dHJfbGlzdCAgVXBkYXRlZCBhdHRyX2xpc3RcbiAqL1xuZnVuY3Rpb24gcGFyc2VEaXJBdHRyaWJ1dGUoYXR0cl9uYW1lcywgYXR0cl9saXN0KSB7XG4gIHZhciBpO1xuICBpZiAoYXR0cl9uYW1lcy5pbmNsdWRlcyhcImRpclwiKSkge1xuICAgIHZhciBpZHggPSB7fTsgLy8gZ2V0IGluZGV4IG9mICdhcnJvd3MnIGFuZCAnZGlyJ1xuICAgIGlkeC5hcnJvd3MgPSB7fTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cl9saXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwiYXJyb3dzXCIpIHtcbiAgICAgICAgaWYgKGF0dHJfbGlzdFtpXS52YWx1ZS50byAhPSBudWxsKSB7XG4gICAgICAgICAgaWR4LmFycm93cy50byA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXR0cl9saXN0W2ldLnZhbHVlLmZyb20gIT0gbnVsbCkge1xuICAgICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJJbnZhbGlkIHZhbHVlIG9mIGFycm93c1wiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhdHRyX2xpc3RbaV0ubmFtZSA9PT0gXCJkaXJcIikge1xuICAgICAgICBpZHguZGlyID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaXJzdCwgYWRkIGRlZmF1bHQgYXJyb3cgc2hhcGUgaWYgaXQgaXMgbm90IGFzc2lnbmVkIHRvIGF2b2lkIGVycm9yXG4gICAgdmFyIGRpcl90eXBlID0gYXR0cl9saXN0W2lkeC5kaXJdLnZhbHVlO1xuICAgIGlmICghYXR0cl9uYW1lcy5pbmNsdWRlcyhcImFycm93c1wiKSkge1xuICAgICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyB0bzogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgZnJvbTogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgdG86IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcImJhY2tcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyBmcm9tOiB7IGVuYWJsZWQ6IHRydWUgfSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWR4LmFycm93cy5mcm9tID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKCdJbnZhbGlkIGRpciB0eXBlIFwiJyArIGRpcl90eXBlICsgJ1wiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyb21fdHlwZTtcbiAgICB2YXIgdG9fdHlwZTtcbiAgICAvLyB1cGRhdGUgJ2Fycm93cycgYXR0cmlidXRlIGZyb20gJ2RpcicuXG4gICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgLy8gYm90aCBvZiBzaGFwZXMgb2YgJ2Zyb20nIGFuZCAndG8nIGFyZSBnaXZlblxuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0udmFsdWUuZnJvbS50eXBlO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYXR0cl9saXN0LnNwbGljZShpZHguYXJyb3dzLmZyb20sIDEpO1xuXG4gICAgICAgIC8vIHNoYXBlIG9mICd0bycgaXMgYXNzaWduZWQgYW5kIHVzZSBkZWZhdWx0IHRvICdmcm9tJ1xuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBvbmx5IHNoYXBlIG9mICdmcm9tJyBpcyBhc3NpZ25lZCBhbmQgdXNlIGRlZmF1bHQgZm9yICd0bydcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJiYWNrXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ2Zyb20nXG4gICAgICBpZiAoaWR4LmFycm93cy50byAmJiBpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiXCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gZ2l2ZW4gc2hhcGUgb2YgJ3RvJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGlkeC5hcnJvd3MudG87XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFzc2lnbiBnaXZlbiAnZnJvbScgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZnJvbToge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgdmFyIGlkeF9hcnJvdztcbiAgICAgIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIGlkeF9hcnJvdyA9IGlkeC5hcnJvd3MudG87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZHhfYXJyb3cgPSBpZHguYXJyb3dzLmZyb207XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHhfYXJyb3ddID0ge1xuICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5uYW1lLFxuICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ3RvJ1xuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYXNzaWduIGdpdmVuICd0bycgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGdpdmVuIHNoYXBlIG9mICdmcm9tJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiYXJyb3dcIjtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgaWR4LmFycm93cy50byA9IGlkeC5hcnJvd3MuZnJvbTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHRvOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKCdJbnZhbGlkIGRpciB0eXBlIFwiJyArIGRpcl90eXBlICsgJ1wiJyk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlICdkaXInIGF0dHJpYnV0ZSBubyBuZWVkIGFueW1vcmVcbiAgICBhdHRyX2xpc3Quc3BsaWNlKGlkeC5kaXIsIDEpO1xuICB9XG4gIHJldHVybiBhdHRyX2xpc3Q7XG59XG5cbi8qKlxuICogUGFyc2UgYSBzZXQgd2l0aCBhdHRyaWJ1dGVzLFxuICogZm9yIGV4YW1wbGUgW2xhYmVsPVwiMS4wMDBcIiwgc2hhcGU9c29saWRdXG4gKlxuICogQHJldHVybnMge29iamVjdCB8IG51bGx9IGF0dHJcbiAqL1xuZnVuY3Rpb24gcGFyc2VBdHRyaWJ1dGVMaXN0KCkge1xuICB2YXIgaTtcbiAgdmFyIGF0dHIgPSBudWxsO1xuXG4gIC8vIGVkZ2Ugc3R5bGVzIG9mIGRvdCBhbmQgdmlzXG4gIHZhciBlZGdlU3R5bGVzID0ge1xuICAgIGRhc2hlZDogdHJ1ZSxcbiAgICBzb2xpZDogZmFsc2UsXG4gICAgZG90dGVkOiBbMSwgNV0sXG4gIH07XG5cbiAgLyoqXG4gICAqIERlZmluZSBhcnJvdyB0eXBlcy5cbiAgICogdmlzIGN1cnJlbnRseSBzdXBwb3J0cyB0eXBlcyBkZWZpbmVkIGluICdhcnJvd1R5cGVzJy5cbiAgICogRGV0YWlscyBvZiBhcnJvdyBzaGFwZXMgYXJlIGRlc2NyaWJlZCBpblxuICAgKiBodHRwOi8vd3d3LmdyYXBodml6Lm9yZy9jb250ZW50L2Fycm93LXNoYXBlc1xuICAgKi9cbiAgdmFyIGFycm93VHlwZXMgPSB7XG4gICAgZG90OiBcImNpcmNsZVwiLFxuICAgIGJveDogXCJib3hcIixcbiAgICBjcm93OiBcImNyb3dcIixcbiAgICBjdXJ2ZTogXCJjdXJ2ZVwiLFxuICAgIGljdXJ2ZTogXCJpbnZfY3VydmVcIixcbiAgICBub3JtYWw6IFwidHJpYW5nbGVcIixcbiAgICBpbnY6IFwiaW52X3RyaWFuZ2xlXCIsXG4gICAgZGlhbW9uZDogXCJkaWFtb25kXCIsXG4gICAgdGVlOiBcImJhclwiLFxuICAgIHZlZTogXCJ2ZWVcIixcbiAgfTtcblxuICAvKipcbiAgICogJ2F0dHJfbGlzdCcgY29udGFpbnMgYXR0cmlidXRlcyBmb3IgY2hlY2tpbmcgaWYgc29tZSBvZiB0aGVtIGFyZSBhZmZlY3RlZFxuICAgKiBsYXRlci4gRm9yIGluc3RhbmNlLCBib3RoIG9mICdhcnJvd2hlYWQnIGFuZCAnZGlyJyAoZWRnZSBzdHlsZSBkZWZpbmVkXG4gICAqIGluIERPVCkgbWFrZSBjaGFuZ2VzIHRvICdhcnJvd3MnIGF0dHJpYnV0ZSBpbiB2aXMuXG4gICAqL1xuICB2YXIgYXR0cl9saXN0ID0gbmV3IEFycmF5KCk7XG4gIHZhciBhdHRyX25hbWVzID0gbmV3IEFycmF5KCk7IC8vIHVzZWQgZm9yIGNoZWNraW5nIHRoZSBjYXNlLlxuXG4gIC8vIHBhcnNlIGF0dHJpYnV0ZXNcbiAgd2hpbGUgKHRva2VuID09PSBcIltcIikge1xuICAgIGdldFRva2VuKCk7XG4gICAgYXR0ciA9IHt9O1xuICAgIHdoaWxlICh0b2tlbiAhPT0gXCJcIiAmJiB0b2tlbiAhPSBcIl1cIikge1xuICAgICAgaWYgKHRva2VuVHlwZSAhPSBUT0tFTlRZUEUuSURFTlRJRklFUikge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkF0dHJpYnV0ZSBuYW1lIGV4cGVjdGVkXCIpO1xuICAgICAgfVxuICAgICAgdmFyIG5hbWUgPSB0b2tlbjtcblxuICAgICAgZ2V0VG9rZW4oKTtcbiAgICAgIGlmICh0b2tlbiAhPSBcIj1cIikge1xuICAgICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcihcIkVxdWFsIHNpZ24gPSBleHBlY3RlZFwiKTtcbiAgICAgIH1cbiAgICAgIGdldFRva2VuKCk7XG5cbiAgICAgIGlmICh0b2tlblR5cGUgIT0gVE9LRU5UWVBFLklERU5USUZJRVIpIHtcbiAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJBdHRyaWJ1dGUgdmFsdWUgZXhwZWN0ZWRcIik7XG4gICAgICB9XG4gICAgICB2YXIgdmFsdWUgPSB0b2tlbjtcblxuICAgICAgLy8gY29udmVydCBmcm9tIGRvdCBzdHlsZSB0byB2aXNcbiAgICAgIGlmIChuYW1lID09PSBcInN0eWxlXCIpIHtcbiAgICAgICAgdmFsdWUgPSBlZGdlU3R5bGVzW3ZhbHVlXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFycm93VHlwZTtcbiAgICAgIGlmIChuYW1lID09PSBcImFycm93aGVhZFwiKSB7XG4gICAgICAgIGFycm93VHlwZSA9IGFycm93VHlwZXNbdmFsdWVdO1xuICAgICAgICBuYW1lID0gXCJhcnJvd3NcIjtcbiAgICAgICAgdmFsdWUgPSB7IHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGFycm93VHlwZSB9IH07XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSBcImFycm93dGFpbFwiKSB7XG4gICAgICAgIGFycm93VHlwZSA9IGFycm93VHlwZXNbdmFsdWVdO1xuICAgICAgICBuYW1lID0gXCJhcnJvd3NcIjtcbiAgICAgICAgdmFsdWUgPSB7IGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogYXJyb3dUeXBlIH0gfTtcbiAgICAgIH1cblxuICAgICAgYXR0cl9saXN0LnB1c2goeyBhdHRyOiBhdHRyLCBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICBhdHRyX25hbWVzLnB1c2gobmFtZSk7XG5cbiAgICAgIGdldFRva2VuKCk7XG4gICAgICBpZiAodG9rZW4gPT0gXCIsXCIpIHtcbiAgICAgICAgZ2V0VG9rZW4oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9rZW4gIT0gXCJdXCIpIHtcbiAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKFwiQnJhY2tldCBdIGV4cGVjdGVkXCIpO1xuICAgIH1cbiAgICBnZXRUb2tlbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzIGV4cGxhaW5lZCBpbiBbMV0sIGdyYXBodml6IGhhcyBsaW1pdGF0aW9ucyBmb3IgY29tYmluYXRpb24gb2ZcbiAgICogYXJyb3dbaGVhZHx0YWlsXSBhbmQgZGlyLiBJZiBhdHRyaWJ1dGUgbGlzdCBpbmNsdWRlcyAnZGlyJyxcbiAgICogZm9sbG93aW5nIGNhc2VzIGp1c3QgYmUgc3VwcG9ydGVkLlxuICAgKiAgIDEuIGJvdGggb3Igbm9uZSArIGFycm93aGVhZCwgYXJyb3d0YWlsXG4gICAqICAgMi4gZm9yd2FyZCArIGFycm93aGVhZCAoYXJyb3d0YWlsIGlzIG5vdCBhZmZlZHRlZClcbiAgICogICAzLiBiYWNrICsgYXJyb3d0YWlsIChhcnJvd2hlYWQgaXMgbm90IGFmZmVjdGVkKVxuICAgKiBbMV0gaHR0cHM6Ly93d3cuZ3JhcGh2aXoub3JnL2RvYy9pbmZvL2F0dHJzLmh0bWwjaDp1bmRpcl9ub3RlXG4gICAqL1xuICBpZiAoYXR0cl9uYW1lcy5pbmNsdWRlcyhcImRpclwiKSkge1xuICAgIHZhciBpZHggPSB7fTsgLy8gZ2V0IGluZGV4IG9mICdhcnJvd3MnIGFuZCAnZGlyJ1xuICAgIGlkeC5hcnJvd3MgPSB7fTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXR0cl9saXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwiYXJyb3dzXCIpIHtcbiAgICAgICAgaWYgKGF0dHJfbGlzdFtpXS52YWx1ZS50byAhPSBudWxsKSB7XG4gICAgICAgICAgaWR4LmFycm93cy50byA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXR0cl9saXN0W2ldLnZhbHVlLmZyb20gIT0gbnVsbCkge1xuICAgICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3U3ludGF4RXJyb3IoXCJJbnZhbGlkIHZhbHVlIG9mIGFycm93c1wiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhdHRyX2xpc3RbaV0ubmFtZSA9PT0gXCJkaXJcIikge1xuICAgICAgICBpZHguZGlyID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaXJzdCwgYWRkIGRlZmF1bHQgYXJyb3cgc2hhcGUgaWYgaXQgaXMgbm90IGFzc2lnbmVkIHRvIGF2b2lkIGVycm9yXG4gICAgdmFyIGRpcl90eXBlID0gYXR0cl9saXN0W2lkeC5kaXJdLnZhbHVlO1xuICAgIGlmICghYXR0cl9uYW1lcy5pbmNsdWRlcyhcImFycm93c1wiKSkge1xuICAgICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyB0bzogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgZnJvbTogeyBlbmFibGVkOiB0cnVlIH0gfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGF0dHJfbGlzdC5sZW5ndGggLSAxO1xuICAgICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgICAgYXR0cl9saXN0LnB1c2goe1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguZGlyXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IFwiYXJyb3dzXCIsXG4gICAgICAgICAgdmFsdWU6IHsgdG86IHsgZW5hYmxlZDogdHJ1ZSB9IH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZHguYXJyb3dzLnRvID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcImJhY2tcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogeyBmcm9tOiB7IGVuYWJsZWQ6IHRydWUgfSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWR4LmFycm93cy5mcm9tID0gYXR0cl9saXN0Lmxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgICBhdHRyX2xpc3QucHVzaCh7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5kaXJdLmF0dHIsXG4gICAgICAgICAgbmFtZTogXCJhcnJvd3NcIixcbiAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGlkeC5hcnJvd3MudG8gPSBhdHRyX2xpc3QubGVuZ3RoIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ld1N5bnRheEVycm9yKCdJbnZhbGlkIGRpciB0eXBlIFwiJyArIGRpcl90eXBlICsgJ1wiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZyb21fdHlwZTtcbiAgICB2YXIgdG9fdHlwZTtcbiAgICAvLyB1cGRhdGUgJ2Fycm93cycgYXR0cmlidXRlIGZyb20gJ2RpcicuXG4gICAgaWYgKGRpcl90eXBlID09PSBcImJvdGhcIikge1xuICAgICAgLy8gYm90aCBvZiBzaGFwZXMgb2YgJ2Zyb20nIGFuZCAndG8nIGFyZSBnaXZlblxuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0udmFsdWUuZnJvbS50eXBlO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYXR0cl9saXN0LnNwbGljZShpZHguYXJyb3dzLmZyb20sIDEpO1xuXG4gICAgICAgIC8vIHNoYXBlIG9mICd0bycgaXMgYXNzaWduZWQgYW5kIHVzZSBkZWZhdWx0IHRvICdmcm9tJ1xuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJhcnJvd1wiO1xuICAgICAgICBhdHRyX2xpc3RbaWR4LmFycm93cy50b10gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBvbmx5IHNoYXBlIG9mICdmcm9tJyBpcyBhc3NpZ25lZCBhbmQgdXNlIGRlZmF1bHQgZm9yICd0bydcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJiYWNrXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ2Zyb20nXG4gICAgICBpZiAoaWR4LmFycm93cy50byAmJiBpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiXCI7XG4gICAgICAgIGZyb21fdHlwZSA9IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gZ2l2ZW4gc2hhcGUgb2YgJ3RvJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBcImFycm93XCI7XG4gICAgICAgIGlkeC5hcnJvd3MuZnJvbSA9IGlkeC5hcnJvd3MudG87XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgICAgbmFtZTogYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGFzc2lnbiBnaXZlbiAnZnJvbScgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBcIlwiO1xuICAgICAgICBmcm9tX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS52YWx1ZS5mcm9tLnR5cGU7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy5mcm9tXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IHRvX3R5cGUgfSxcbiAgICAgICAgICAgIGZyb206IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogZnJvbV90eXBlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MuZnJvbV0gPSB7XG4gICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLm5hbWUsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZnJvbToge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLmZyb21dLnZhbHVlLmZyb20udHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGRpcl90eXBlID09PSBcIm5vbmVcIikge1xuICAgICAgdmFyIGlkeF9hcnJvdztcbiAgICAgIGlmIChpZHguYXJyb3dzLnRvKSB7XG4gICAgICAgIGlkeF9hcnJvdyA9IGlkeC5hcnJvd3MudG87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZHhfYXJyb3cgPSBpZHguYXJyb3dzLmZyb207XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHhfYXJyb3ddID0ge1xuICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5hdHRyLFxuICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4X2Fycm93XS5uYW1lLFxuICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChkaXJfdHlwZSA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgIC8vIGdpdmVuIGJvdGggb2Ygc2hhcGVzLCBidXQgdXNlIG9ubHkgJ3RvJ1xuICAgICAgaWYgKGlkeC5hcnJvd3MudG8gJiYgaWR4LmFycm93cy5mcm9tKSB7XG4gICAgICAgIHRvX3R5cGUgPSBhdHRyX2xpc3RbaWR4LmFycm93cy50b10udmFsdWUudG8udHlwZTtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYXNzaWduIGdpdmVuICd0bycgc2hhcGVcbiAgICAgIH0gZWxzZSBpZiAoaWR4LmFycm93cy50bykge1xuICAgICAgICB0b190eXBlID0gYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLnZhbHVlLnRvLnR5cGU7XG4gICAgICAgIGZyb21fdHlwZSA9IFwiXCI7XG4gICAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgICBhdHRyOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10uYXR0cixcbiAgICAgICAgICBuYW1lOiBhdHRyX2xpc3RbaWR4LmFycm93cy50b10ubmFtZSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdG86IHsgZW5hYmxlZDogdHJ1ZSwgdHlwZTogdG9fdHlwZSB9LFxuICAgICAgICAgICAgZnJvbTogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiBmcm9tX3R5cGUgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGdpdmVuIHNoYXBlIG9mICdmcm9tJywgYnV0IGRvZXMgbm90IHVzZSBpdFxuICAgICAgfSBlbHNlIGlmIChpZHguYXJyb3dzLmZyb20pIHtcbiAgICAgICAgdG9fdHlwZSA9IFwiYXJyb3dcIjtcbiAgICAgICAgZnJvbV90eXBlID0gXCJcIjtcbiAgICAgICAgaWR4LmFycm93cy50byA9IGlkeC5hcnJvd3MuZnJvbTtcbiAgICAgICAgYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dID0ge1xuICAgICAgICAgIGF0dHI6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5hdHRyLFxuICAgICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0bzogeyBlbmFibGVkOiB0cnVlLCB0eXBlOiB0b190eXBlIH0sXG4gICAgICAgICAgICBmcm9tOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGZyb21fdHlwZSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXSA9IHtcbiAgICAgICAgYXR0cjogYXR0cl9saXN0W2lkeC5hcnJvd3MudG9dLmF0dHIsXG4gICAgICAgIG5hbWU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS5uYW1lLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIHRvOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IGF0dHJfbGlzdFtpZHguYXJyb3dzLnRvXS52YWx1ZS50by50eXBlIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXdTeW50YXhFcnJvcignSW52YWxpZCBkaXIgdHlwZSBcIicgKyBkaXJfdHlwZSArICdcIicpO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSAnZGlyJyBhdHRyaWJ1dGUgbm8gbmVlZCBhbnltb3JlXG4gICAgYXR0cl9saXN0LnNwbGljZShpZHguZGlyLCAxKTtcbiAgfVxuXG4gIC8vIHBhcnNlICdwZW53aWR0aCdcbiAgdmFyIG5vZl9hdHRyX2xpc3Q7XG4gIGlmIChhdHRyX25hbWVzLmluY2x1ZGVzKFwicGVud2lkdGhcIikpIHtcbiAgICB2YXIgdG1wX2F0dHJfbGlzdCA9IFtdO1xuXG4gICAgbm9mX2F0dHJfbGlzdCA9IGF0dHJfbGlzdC5sZW5ndGg7XG4gICAgZm9yIChpID0gMDsgaSA8IG5vZl9hdHRyX2xpc3Q7IGkrKykge1xuICAgICAgLy8gZXhjbHVkZSAnd2lkdGgnIGZyb20gYXR0cl9saXN0IGlmICdwZW53aWR0aCcgZXhpc3RzXG4gICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgIT09IFwid2lkdGhcIikge1xuICAgICAgICBpZiAoYXR0cl9saXN0W2ldLm5hbWUgPT09IFwicGVud2lkdGhcIikge1xuICAgICAgICAgIGF0dHJfbGlzdFtpXS5uYW1lID0gXCJ3aWR0aFwiO1xuICAgICAgICB9XG4gICAgICAgIHRtcF9hdHRyX2xpc3QucHVzaChhdHRyX2xpc3RbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBhdHRyX2xpc3QgPSB0bXBfYXR0cl9saXN0O1xuICB9XG5cbiAgbm9mX2F0dHJfbGlzdCA9IGF0dHJfbGlzdC5sZW5ndGg7XG4gIGZvciAoaSA9IDA7IGkgPCBub2ZfYXR0cl9saXN0OyBpKyspIHtcbiAgICBzZXRWYWx1ZShhdHRyX2xpc3RbaV0uYXR0ciwgYXR0cl9saXN0W2ldLm5hbWUsIGF0dHJfbGlzdFtpXS52YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gYXR0cjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzeW50YXggZXJyb3Igd2l0aCBleHRyYSBpbmZvcm1hdGlvbiBvbiBjdXJyZW50IHRva2VuIGFuZCBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge1N5bnRheEVycm9yfSBlcnJcbiAqL1xuZnVuY3Rpb24gbmV3U3ludGF4RXJyb3IobWVzc2FnZSkge1xuICByZXR1cm4gbmV3IFN5bnRheEVycm9yKFxuICAgIG1lc3NhZ2UgKyAnLCBnb3QgXCInICsgY2hvcCh0b2tlbiwgMzApICsgJ1wiIChjaGFyICcgKyBpbmRleCArIFwiKVwiXG4gICk7XG59XG5cbi8qKlxuICogQ2hvcCBvZmYgdGV4dCBhZnRlciBhIG1heGltdW0gbGVuZ3RoXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhMZW5ndGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNob3AodGV4dCwgbWF4TGVuZ3RoKSB7XG4gIHJldHVybiB0ZXh0Lmxlbmd0aCA8PSBtYXhMZW5ndGggPyB0ZXh0IDogdGV4dC5zdWJzdHIoMCwgMjcpICsgXCIuLi5cIjtcbn1cblxuLyoqXG4gKiBFeGVjdXRlIGEgZnVuY3Rpb24gZm4gZm9yIGVhY2ggcGFpciBvZiBlbGVtZW50cyBpbiB0d28gYXJyYXlzXG4gKlxuICogQHBhcmFtIHtBcnJheSB8ICp9IGFycmF5MVxuICogQHBhcmFtIHtBcnJheSB8ICp9IGFycmF5MlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaDIoYXJyYXkxLCBhcnJheTIsIGZuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycmF5MSkpIHtcbiAgICBhcnJheTEuZm9yRWFjaChmdW5jdGlvbiAoZWxlbTEpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5MikpIHtcbiAgICAgICAgYXJyYXkyLmZvckVhY2goZnVuY3Rpb24gKGVsZW0yKSB7XG4gICAgICAgICAgZm4oZWxlbTEsIGVsZW0yKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbihlbGVtMSwgYXJyYXkyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheTIpKSB7XG4gICAgICBhcnJheTIuZm9yRWFjaChmdW5jdGlvbiAoZWxlbTIpIHtcbiAgICAgICAgZm4oYXJyYXkxLCBlbGVtMik7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm4oYXJyYXkxLCBhcnJheTIpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNldCBhIG5lc3RlZCBwcm9wZXJ0eSBvbiBhbiBvYmplY3RcbiAqIFdoZW4gbmVzdGVkIG9iamVjdHMgYXJlIG1pc3NpbmcsIHRoZXkgd2lsbCBiZSBjcmVhdGVkLlxuICogRm9yIGV4YW1wbGUgc2V0UHJvcCh7fSwgJ2ZvbnQuY29sb3InLCAncmVkJykgd2lsbCByZXR1cm4ge2ZvbnQ6IHtjb2xvcjogJ3JlZCd9fVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoICAgQSBkb3Qgc2VwYXJhdGVkIHN0cmluZyBsaWtlICdmb250LmNvbG9yJ1xuICogQHBhcmFtIHsqfSB2YWx1ZSAgICAgICBWYWx1ZSBmb3IgdGhlIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIHRoZSBvcmlnaW5hbCBvYmplY3QsIGFsbG93cyBmb3IgY2hhaW5pbmcuXG4gKi9cbmZ1bmN0aW9uIHNldFByb3Aob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICB2YXIgbmFtZXMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgdmFyIHByb3AgPSBuYW1lcy5wb3AoKTtcblxuICAvLyB0cmF2ZXJzZSBvdmVyIHRoZSBuZXN0ZWQgb2JqZWN0c1xuICB2YXIgb2JqID0gb2JqZWN0O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5hbWUgPSBuYW1lc1tpXTtcbiAgICBpZiAoIShuYW1lIGluIG9iaikpIHtcbiAgICAgIG9ialtuYW1lXSA9IHt9O1xuICAgIH1cbiAgICBvYmogPSBvYmpbbmFtZV07XG4gIH1cblxuICAvLyBzZXQgdGhlIHByb3BlcnR5IHZhbHVlXG4gIG9ialtwcm9wXSA9IHZhbHVlO1xuXG4gIHJldHVybiBvYmplY3Q7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBvYmplY3Qgd2l0aCBET1QgYXR0cmlidXRlcyB0byB0aGVpciB2aXMuanMgZXF1aXZhbGVudHMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGF0dHIgICAgIE9iamVjdCB3aXRoIERPVCBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge29iamVjdH0gbWFwcGluZ1xuICogQHJldHVybnMge29iamVjdH0gICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHZpcy5qcyBhdHRyaWJ1dGVzXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBdHRyKGF0dHIsIG1hcHBpbmcpIHtcbiAgdmFyIGNvbnZlcnRlZCA9IHt9O1xuXG4gIGZvciAodmFyIHByb3AgaW4gYXR0cikge1xuICAgIGlmIChhdHRyLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICB2YXIgdmlzUHJvcCA9IG1hcHBpbmdbcHJvcF07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2aXNQcm9wKSkge1xuICAgICAgICB2aXNQcm9wLmZvckVhY2goZnVuY3Rpb24gKHZpc1Byb3BJKSB7XG4gICAgICAgICAgc2V0UHJvcChjb252ZXJ0ZWQsIHZpc1Byb3BJLCBhdHRyW3Byb3BdKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2aXNQcm9wID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHNldFByb3AoY29udmVydGVkLCB2aXNQcm9wLCBhdHRyW3Byb3BdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFByb3AoY29udmVydGVkLCBwcm9wLCBhdHRyW3Byb3BdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29udmVydGVkO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBzdHJpbmcgY29udGFpbmluZyBhIGdyYXBoIGluIERPVCBsYW5ndWFnZSBpbnRvIGEgbWFwIGNvbnRhaW5pbmdcbiAqIHdpdGggbm9kZXMgYW5kIGVkZ2VzIGluIHRoZSBmb3JtYXQgb2YgZ3JhcGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGEgICAgICAgICBUZXh0IGNvbnRhaW5pbmcgYSBncmFwaCBpbiBET1Qtbm90YXRpb25cbiAqIEByZXR1cm5zIHtvYmplY3R9IGdyYXBoRGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gRE9UVG9HcmFwaChkYXRhKSB7XG4gIC8vIHBhcnNlIHRoZSBET1QgZmlsZVxuICB2YXIgZG90RGF0YSA9IHBhcnNlRE9UKGRhdGEpO1xuICB2YXIgZ3JhcGhEYXRhID0ge1xuICAgIG5vZGVzOiBbXSxcbiAgICBlZGdlczogW10sXG4gICAgb3B0aW9uczoge30sXG4gIH07XG5cbiAgLy8gY29weSB0aGUgbm9kZXNcbiAgaWYgKGRvdERhdGEubm9kZXMpIHtcbiAgICBkb3REYXRhLm5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGRvdE5vZGUpIHtcbiAgICAgIHZhciBncmFwaE5vZGUgPSB7XG4gICAgICAgIGlkOiBkb3ROb2RlLmlkLFxuICAgICAgICBsYWJlbDogU3RyaW5nKGRvdE5vZGUubGFiZWwgfHwgZG90Tm9kZS5pZCksXG4gICAgICB9O1xuICAgICAgbWVyZ2UoZ3JhcGhOb2RlLCBjb252ZXJ0QXR0cihkb3ROb2RlLmF0dHIsIE5PREVfQVRUUl9NQVBQSU5HKSk7XG4gICAgICBpZiAoZ3JhcGhOb2RlLmltYWdlKSB7XG4gICAgICAgIGdyYXBoTm9kZS5zaGFwZSA9IFwiaW1hZ2VcIjtcbiAgICAgIH1cbiAgICAgIGdyYXBoRGF0YS5ub2Rlcy5wdXNoKGdyYXBoTm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBjb3B5IHRoZSBlZGdlc1xuICBpZiAoZG90RGF0YS5lZGdlcykge1xuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYW4gZWRnZSBpbiBET1QgZm9ybWF0IHRvIGFuIGVkZ2Ugd2l0aCBWaXNHcmFwaCBmb3JtYXRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb3RFZGdlXG4gICAgICogQHJldHVybnMge29iamVjdH0gZ3JhcGhFZGdlXG4gICAgICovXG4gICAgdmFyIGNvbnZlcnRFZGdlID0gZnVuY3Rpb24gKGRvdEVkZ2UpIHtcbiAgICAgIHZhciBncmFwaEVkZ2UgPSB7XG4gICAgICAgIGZyb206IGRvdEVkZ2UuZnJvbSxcbiAgICAgICAgdG86IGRvdEVkZ2UudG8sXG4gICAgICB9O1xuICAgICAgbWVyZ2UoZ3JhcGhFZGdlLCBjb252ZXJ0QXR0cihkb3RFZGdlLmF0dHIsIEVER0VfQVRUUl9NQVBQSU5HKSk7XG5cbiAgICAgIC8vIEFkZCBhcnJvd3MgYXR0cmlidXRlIHRvIGRlZmF1bHQgc3R5bGVkIGFycm93LlxuICAgICAgLy8gVGhlIHJlYXNvbiB3aHkgZGVmYXVsdCBzdHlsZSBpcyBub3QgYWRkZWQgaW4gcGFyc2VBdHRyaWJ1dGVMaXN0KCkgaXNcbiAgICAgIC8vIGJlY2F1c2Ugb25seSBkZWZhdWx0IGlzIGNsZWFyZWQgYmVmb3JlIGhlcmUuXG4gICAgICBpZiAoZ3JhcGhFZGdlLmFycm93cyA9PSBudWxsICYmIGRvdEVkZ2UudHlwZSA9PT0gXCItPlwiKSB7XG4gICAgICAgIGdyYXBoRWRnZS5hcnJvd3MgPSBcInRvXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBncmFwaEVkZ2U7XG4gICAgfTtcblxuICAgIGRvdERhdGEuZWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZG90RWRnZSkge1xuICAgICAgdmFyIGZyb20sIHRvO1xuICAgICAgaWYgKGRvdEVkZ2UuZnJvbSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICBmcm9tID0gZG90RWRnZS5mcm9tLm5vZGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnJvbSA9IHtcbiAgICAgICAgICBpZDogZG90RWRnZS5mcm9tLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZG90RWRnZS50byBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0byA9IGRvdEVkZ2UudG8ubm9kZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0byA9IHtcbiAgICAgICAgICBpZDogZG90RWRnZS50byxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRvdEVkZ2UuZnJvbSBpbnN0YW5jZW9mIE9iamVjdCAmJiBkb3RFZGdlLmZyb20uZWRnZXMpIHtcbiAgICAgICAgZG90RWRnZS5mcm9tLmVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKHN1YkVkZ2UpIHtcbiAgICAgICAgICB2YXIgZ3JhcGhFZGdlID0gY29udmVydEVkZ2Uoc3ViRWRnZSk7XG4gICAgICAgICAgZ3JhcGhEYXRhLmVkZ2VzLnB1c2goZ3JhcGhFZGdlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZvckVhY2gyKGZyb20sIHRvLCBmdW5jdGlvbiAoZnJvbSwgdG8pIHtcbiAgICAgICAgdmFyIHN1YkVkZ2UgPSBjcmVhdGVFZGdlKFxuICAgICAgICAgIGdyYXBoRGF0YSxcbiAgICAgICAgICBmcm9tLmlkLFxuICAgICAgICAgIHRvLmlkLFxuICAgICAgICAgIGRvdEVkZ2UudHlwZSxcbiAgICAgICAgICBkb3RFZGdlLmF0dHJcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIGdyYXBoRWRnZSA9IGNvbnZlcnRFZGdlKHN1YkVkZ2UpO1xuICAgICAgICBncmFwaERhdGEuZWRnZXMucHVzaChncmFwaEVkZ2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkb3RFZGdlLnRvIGluc3RhbmNlb2YgT2JqZWN0ICYmIGRvdEVkZ2UudG8uZWRnZXMpIHtcbiAgICAgICAgZG90RWRnZS50by5lZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJFZGdlKSB7XG4gICAgICAgICAgdmFyIGdyYXBoRWRnZSA9IGNvbnZlcnRFZGdlKHN1YkVkZ2UpO1xuICAgICAgICAgIGdyYXBoRGF0YS5lZGdlcy5wdXNoKGdyYXBoRWRnZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gY29weSB0aGUgb3B0aW9uc1xuICBpZiAoZG90RGF0YS5hdHRyKSB7XG4gICAgZ3JhcGhEYXRhLm9wdGlvbnMgPSBkb3REYXRhLmF0dHI7XG4gIH1cblxuICByZXR1cm4gZ3JhcGhEYXRhO1xufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXZhciAqL1xuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWVuYWJsZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgKi9cbiIsICJleHBvcnQgdHlwZSBJZCA9IG51bWJlciB8IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBDb2xvck9iamVjdCB7XG4gIGJhY2tncm91bmQ6IHN0cmluZztcbiAgYm9yZGVyOiBzdHJpbmc7XG4gIGhpZ2hsaWdodDoge1xuICAgIGJhY2tncm91bmQ6IHN0cmluZztcbiAgICBib3JkZXI6IHN0cmluZztcbiAgfTtcbiAgaG92ZXI6IHtcbiAgICBiYWNrZ3JvdW5kOiBzdHJpbmc7XG4gICAgYm9yZGVyOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VwaGlEYXRhIHtcbiAgbm9kZXM6IEdlcGhpTm9kZVtdO1xuICBlZGdlczogR2VwaGlFZGdlW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEdlcGhpUGFyc2VPcHRpb25zIHtcbiAgZml4ZWQ/OiBib29sZWFuO1xuICBpbmhlcml0Q29sb3I/OiBib29sZWFuO1xuICBwYXJzZUNvbG9yPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXBoaU5vZGUge1xuICBpZDogSWQ7XG5cbiAgYXR0cmlidXRlcz86IHsgdGl0bGU/OiBzdHJpbmcgfTtcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBzaXplPzogbnVtYmVyO1xuICB0aXRsZT86IHN0cmluZztcbiAgeD86IG51bWJlcjtcbiAgeT86IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2VwaGlFZGdlIHtcbiAgaWQ6IElkO1xuICBzb3VyY2U6IElkO1xuICB0YXJnZXQ6IElkO1xuXG4gIGF0dHJpYnV0ZXM/OiB7IHRpdGxlPzogc3RyaW5nIH07XG4gIGNvbG9yPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXNEYXRhIHtcbiAgbm9kZXM6IFZpc05vZGVbXTtcbiAgZWRnZXM6IFZpc0VkZ2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXNOb2RlIHtcbiAgaWQ6IElkO1xuICBmaXhlZDogYm9vbGVhbjtcblxuICBjb2xvcj86IHN0cmluZyB8IENvbG9yT2JqZWN0O1xuICBsYWJlbD86IHN0cmluZztcbiAgc2l6ZT86IG51bWJlcjtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG5cbiAgYXR0cmlidXRlcz86IHVua25vd247XG59XG5leHBvcnQgaW50ZXJmYWNlIFZpc0VkZ2Uge1xuICBpZDogSWQ7XG4gIGZyb206IElkO1xuICB0bzogSWQ7XG5cbiAgYXJyb3dzPzogXCJ0b1wiO1xuICBjb2xvcj86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuXG4gIGF0dHJpYnV0ZXM/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIENvbnZlcnQgR2VwaGkgdG8gVmlzLlxuICpcbiAqIEBwYXJhbSBnZXBoaUpTT04gLSBUaGUgcGFyc2VkIEpTT04gZGF0YSBpbiBHZXBoaSBmb3JtYXQuXG4gKiBAcGFyYW0gb3B0aW9uc09iaiAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgZGF0YSByZWFkeSB0byBiZSB1c2VkIGluIFZpcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlR2VwaGkoXG4gIGdlcGhpSlNPTjogR2VwaGlEYXRhLFxuICBvcHRpb25zT2JqPzogR2VwaGlQYXJzZU9wdGlvbnNcbik6IFZpc0RhdGEge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIGVkZ2VzOiB7XG4gICAgICBpbmhlcml0Q29sb3I6IGZhbHNlLFxuICAgIH0sXG4gICAgbm9kZXM6IHtcbiAgICAgIGZpeGVkOiBmYWxzZSxcbiAgICAgIHBhcnNlQ29sb3I6IGZhbHNlLFxuICAgIH0sXG4gIH07XG5cbiAgaWYgKG9wdGlvbnNPYmogIT0gbnVsbCkge1xuICAgIGlmIChvcHRpb25zT2JqLmZpeGVkICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMubm9kZXMuZml4ZWQgPSBvcHRpb25zT2JqLmZpeGVkO1xuICAgIH1cbiAgICBpZiAob3B0aW9uc09iai5wYXJzZUNvbG9yICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMubm9kZXMucGFyc2VDb2xvciA9IG9wdGlvbnNPYmoucGFyc2VDb2xvcjtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnNPYmouaW5oZXJpdENvbG9yICE9IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZWRnZXMuaW5oZXJpdENvbG9yID0gb3B0aW9uc09iai5pbmhlcml0Q29sb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ0VkZ2VzID0gZ2VwaGlKU09OLmVkZ2VzO1xuICBjb25zdCB2RWRnZXMgPSBnRWRnZXMubWFwKChnRWRnZSk6IFZpc0VkZ2UgPT4ge1xuICAgIGNvbnN0IHZFZGdlOiBWaXNFZGdlID0ge1xuICAgICAgZnJvbTogZ0VkZ2Uuc291cmNlLFxuICAgICAgaWQ6IGdFZGdlLmlkLFxuICAgICAgdG86IGdFZGdlLnRhcmdldCxcbiAgICB9O1xuXG4gICAgaWYgKGdFZGdlLmF0dHJpYnV0ZXMgIT0gbnVsbCkge1xuICAgICAgdkVkZ2UuYXR0cmlidXRlcyA9IGdFZGdlLmF0dHJpYnV0ZXM7XG4gICAgfVxuICAgIGlmIChnRWRnZS5sYWJlbCAhPSBudWxsKSB7XG4gICAgICB2RWRnZS5sYWJlbCA9IGdFZGdlLmxhYmVsO1xuICAgIH1cbiAgICBpZiAoZ0VkZ2UuYXR0cmlidXRlcyAhPSBudWxsICYmIGdFZGdlLmF0dHJpYnV0ZXMudGl0bGUgIT0gbnVsbCkge1xuICAgICAgdkVkZ2UudGl0bGUgPSBnRWRnZS5hdHRyaWJ1dGVzLnRpdGxlO1xuICAgIH1cbiAgICBpZiAoZ0VkZ2UudHlwZSA9PT0gXCJEaXJlY3RlZFwiKSB7XG4gICAgICB2RWRnZS5hcnJvd3MgPSBcInRvXCI7XG4gICAgfVxuICAgIC8vIGVkZ2VbJ3ZhbHVlJ10gPSBnRWRnZS5hdHRyaWJ1dGVzICE9IG51bGwgPyBnRWRnZS5hdHRyaWJ1dGVzLldlaWdodCA6IHVuZGVmaW5lZDtcbiAgICAvLyBlZGdlWyd3aWR0aCddID0gZWRnZVsndmFsdWUnXSAhPSBudWxsID8gdW5kZWZpbmVkIDogZWRnZWdFZGdlLnNpemU7XG4gICAgaWYgKGdFZGdlLmNvbG9yICYmIG9wdGlvbnMuZWRnZXMuaW5oZXJpdENvbG9yID09PSBmYWxzZSkge1xuICAgICAgdkVkZ2UuY29sb3IgPSBnRWRnZS5jb2xvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdkVkZ2U7XG4gIH0pO1xuXG4gIGNvbnN0IHZOb2RlcyA9IGdlcGhpSlNPTi5ub2Rlcy5tYXAoKGdOb2RlKTogVmlzTm9kZSA9PiB7XG4gICAgY29uc3Qgdk5vZGU6IFZpc05vZGUgPSB7XG4gICAgICBpZDogZ05vZGUuaWQsXG4gICAgICBmaXhlZDogb3B0aW9ucy5ub2Rlcy5maXhlZCAmJiBnTm9kZS54ICE9IG51bGwgJiYgZ05vZGUueSAhPSBudWxsLFxuICAgIH07XG5cbiAgICBpZiAoZ05vZGUuYXR0cmlidXRlcyAhPSBudWxsKSB7XG4gICAgICB2Tm9kZS5hdHRyaWJ1dGVzID0gZ05vZGUuYXR0cmlidXRlcztcbiAgICB9XG4gICAgaWYgKGdOb2RlLmxhYmVsICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLmxhYmVsID0gZ05vZGUubGFiZWw7XG4gICAgfVxuICAgIGlmIChnTm9kZS5zaXplICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnNpemUgPSBnTm9kZS5zaXplO1xuICAgIH1cbiAgICBpZiAoZ05vZGUuYXR0cmlidXRlcyAhPSBudWxsICYmIGdOb2RlLmF0dHJpYnV0ZXMudGl0bGUgIT0gbnVsbCkge1xuICAgICAgdk5vZGUudGl0bGUgPSBnTm9kZS5hdHRyaWJ1dGVzLnRpdGxlO1xuICAgIH1cbiAgICBpZiAoZ05vZGUudGl0bGUgIT0gbnVsbCkge1xuICAgICAgdk5vZGUudGl0bGUgPSBnTm9kZS50aXRsZTtcbiAgICB9XG4gICAgaWYgKGdOb2RlLnggIT0gbnVsbCkge1xuICAgICAgdk5vZGUueCA9IGdOb2RlLng7XG4gICAgfVxuICAgIGlmIChnTm9kZS55ICE9IG51bGwpIHtcbiAgICAgIHZOb2RlLnkgPSBnTm9kZS55O1xuICAgIH1cbiAgICBpZiAoZ05vZGUuY29sb3IgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMubm9kZXMucGFyc2VDb2xvciA9PT0gdHJ1ZSkge1xuICAgICAgICB2Tm9kZS5jb2xvciA9IGdOb2RlLmNvbG9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdk5vZGUuY29sb3IgPSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogZ05vZGUuY29sb3IsXG4gICAgICAgICAgYm9yZGVyOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICBoaWdobGlnaHQ6IHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGdOb2RlLmNvbG9yLFxuICAgICAgICAgICAgYm9yZGVyOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBnTm9kZS5jb2xvcixcbiAgICAgICAgICAgIGJvcmRlcjogZ05vZGUuY29sb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdk5vZGU7XG4gIH0pO1xuXG4gIHJldHVybiB7IG5vZGVzOiB2Tm9kZXMsIGVkZ2VzOiB2RWRnZXMgfTtcbn1cbiIsICJleHBvcnQgaW50ZXJmYWNlIExvY2FsZSB7XG4gIGFkZERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFkZEVkZ2U6IHN0cmluZztcbiAgYWRkTm9kZTogc3RyaW5nO1xuICBiYWNrOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIGNyZWF0ZUVkZ2VFcnJvcjogc3RyaW5nO1xuICBkZWw6IHN0cmluZztcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBzdHJpbmc7XG4gIGVkZ2VEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBlZGl0OiBzdHJpbmc7XG4gIGVkaXRDbHVzdGVyRXJyb3I6IHN0cmluZztcbiAgZWRpdEVkZ2U6IHN0cmluZztcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBlZGl0Tm9kZTogc3RyaW5nO1xufVxuZXhwb3J0IHR5cGUgTG9jYWxlcyA9IFJlY29yZDxzdHJpbmcsIExvY2FsZT47XG5cbi8vIEVuZ2xpc2hcbmV4cG9ydCBjb25zdCBlbjogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJDbGljayBpbiBhbiBlbXB0eSBzcGFjZSB0byBwbGFjZSBhIG5ldyBub2RlLlwiLFxuICBhZGRFZGdlOiBcIkFkZCBFZGdlXCIsXG4gIGFkZE5vZGU6IFwiQWRkIE5vZGVcIixcbiAgYmFjazogXCJCYWNrXCIsXG4gIGNsb3NlOiBcIkNsb3NlXCIsXG4gIGNyZWF0ZUVkZ2VFcnJvcjogXCJDYW5ub3QgbGluayBlZGdlcyB0byBhIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJEZWxldGUgc2VsZWN0ZWRcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkNsdXN0ZXJzIGNhbm5vdCBiZSBkZWxldGVkLlwiLFxuICBlZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGljayBvbiBhIG5vZGUgYW5kIGRyYWcgdGhlIGVkZ2UgdG8gYW5vdGhlciBub2RlIHRvIGNvbm5lY3QgdGhlbS5cIixcbiAgZWRpdDogXCJFZGl0XCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwiQ2x1c3RlcnMgY2Fubm90IGJlIGVkaXRlZC5cIixcbiAgZWRpdEVkZ2U6IFwiRWRpdCBFZGdlXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGljayBvbiB0aGUgY29udHJvbCBwb2ludHMgYW5kIGRyYWcgdGhlbSB0byBhIG5vZGUgdG8gY29ubmVjdCB0byBpdC5cIixcbiAgZWRpdE5vZGU6IFwiRWRpdCBOb2RlXCIsXG59O1xuXG4vLyBHZXJtYW5cbmV4cG9ydCBjb25zdCBkZTogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjpcbiAgICBcIktsaWNrZSBhdWYgZWluZSBmcmVpZSBTdGVsbGUsIHVtIGVpbmVuIG5ldWVuIEtub3RlbiB6dSBwbGF6aWVyZW4uXCIsXG4gIGFkZEVkZ2U6IFwiS2FudGUgaGluenVmXFx1MDBmY2dlblwiLFxuICBhZGROb2RlOiBcIktub3RlbiBoaW56dWZcXHUwMGZjZ2VuXCIsXG4gIGJhY2s6IFwiWnVyXFx1MDBmY2NrXCIsXG4gIGNsb3NlOiBcIlNjaGxpZcOfZW5cIixcbiAgY3JlYXRlRWRnZUVycm9yOlxuICAgIFwiRXMgaXN0IG5pY2h0IG1cXHUwMGY2Z2xpY2gsIEthbnRlbiBtaXQgQ2x1c3Rlcm4genUgdmVyYmluZGVuLlwiLFxuICBkZWw6IFwiTFxcdTAwZjZzY2hlIEF1c3dhaGxcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkNsdXN0ZXIga1xcdTAwZjZubmVuIG5pY2h0IGdlbFxcdTAwZjZzY2h0IHdlcmRlbi5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiS2xpY2tlIGF1ZiBlaW5lbiBLbm90ZW4gdW5kIHppZWhlIGRpZSBLYW50ZSB6dSBlaW5lbSBhbmRlcmVuIEtub3RlbiwgdW0gZGllc2UgenUgdmVyYmluZGVuLlwiLFxuICBlZGl0OiBcIkVkaXRpZXJlblwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkNsdXN0ZXIga1xcdTAwZjZubmVuIG5pY2h0IGVkaXRpZXJ0IHdlcmRlbi5cIixcbiAgZWRpdEVkZ2U6IFwiS2FudGUgZWRpdGllcmVuXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJLbGlja2UgYXVmIGRpZSBWZXJiaW5kdW5nc3B1bmt0ZSB1bmQgemllaGUgZGllc2UgYXVmIGVpbmVuIEtub3RlbiwgdW0gc2llIHp1IHZlcmJpbmRlbi5cIixcbiAgZWRpdE5vZGU6IFwiS25vdGVuIGVkaXRpZXJlblwiLFxufTtcblxuLy8gU3BhbmlzaFxuZXhwb3J0IGNvbnN0IGVzOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOlxuICAgIFwiSGFnYSBjbGljIGVuIHVuIGx1Z2FyIHZhY1xcdTAwZWRvIHBhcmEgY29sb2NhciB1biBudWV2byBub2RvLlwiLFxuICBhZGRFZGdlOiBcIkFcXHUwMGYxYWRpciBhcmlzdGFcIixcbiAgYWRkTm9kZTogXCJBXFx1MDBmMWFkaXIgbm9kb1wiLFxuICBiYWNrOiBcIkF0clxcdTAwZTFzXCIsXG4gIGNsb3NlOiBcIkNlcnJhclwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiTm8gc2UgcHVlZGUgY29uZWN0YXIgdW5hIGFyaXN0YSBhIHVuIGdydXBvLlwiLFxuICBkZWw6IFwiRWxpbWluYXIgc2VsZWNjaVxcdTAwZjNuXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJObyBlcyBwb3NpYmxlIGVsaW1pbmFyIGdydXBvcy5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiSGFnYSBjbGljIGVuIHVuIG5vZG8geSBhcnJhc3RyZSBsYSBhcmlzdGEgaGFjaWEgb3RybyBub2RvIHBhcmEgY29uZWN0YXJsb3MuXCIsXG4gIGVkaXQ6IFwiRWRpdGFyXCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwiTm8gZXMgcG9zaWJsZSBlZGl0YXIgZ3J1cG9zLlwiLFxuICBlZGl0RWRnZTogXCJFZGl0YXIgYXJpc3RhXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJIYWdhIGNsaWMgZW4gdW4gcHVudG8gZGUgY29udHJvbCB5IGFycmFzdHJlbG8gYSB1biBub2RvIHBhcmEgY29uZWN0YXJsby5cIixcbiAgZWRpdE5vZGU6IFwiRWRpdGFyIG5vZG9cIixcbn07XG5cbi8vSXRhbGlhbm9cbmV4cG9ydCBjb25zdCBpdDogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJDbGljY2EgcGVyIGFnZ2l1bmdlcmUgdW4gbnVvdm8gbm9kb1wiLFxuICBhZGRFZGdlOiBcIkFnZ2l1bmdpIHVuIHZlcnRpY2VcIixcbiAgYWRkTm9kZTogXCJBZ2dpdW5naSB1biBub2RvXCIsXG4gIGJhY2s6IFwiSW5kaWV0cm9cIixcbiAgY2xvc2U6IFwiQ2hpdWRlcmVcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIk5vbiBzaSBwb3Nzb25vIGNvbGxlZ2FyZSB2ZXJ0aWNpIGFkIHVuIGNsdXN0ZXJcIixcbiAgZGVsOiBcIkNhbmNlbGxhIGxhIHNlbGV6aW9uZVwiLFxuICBkZWxldGVDbHVzdGVyRXJyb3I6IFwiSSBjbHVzdGVyIG5vbiBwb3Nzb25vIGVzc2VyZSBjYW5jZWxsYXRpXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaWNjYSBzdSB1biBub2RvIGUgdHJhc2NpbmFsbyBhZCB1biBhbHRybyBub2RvIHBlciBjb25uZXR0ZXJsaS5cIixcbiAgZWRpdDogXCJNb2RpZmljYVwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkkgY2x1c3RlcnMgbm9uIHBvc3Nvbm8gZXNzZXJlIG1vZGlmaWNhdGkuXCIsXG4gIGVkaXRFZGdlOiBcIk1vZGlmaWNhIGlsIHZlcnRpY2VcIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIkNsaWNjYSBzdWkgUHVudGkgZGkgY29udHJvbGxvIGUgdHJhc2NpbmFsaSBhZCB1biBub2RvIHBlciBjb25uZXR0ZXJsaS5cIixcbiAgZWRpdE5vZGU6IFwiTW9kaWZpY2EgaWwgbm9kb1wiLFxufTtcblxuLy8gRHV0Y2hcbmV4cG9ydCBjb25zdCBubDogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJLbGlrIG9wIGVlbiBsZWVnIGdlYmllZCBvbSBlZW4gbmlldXdlIG5vZGUgdGUgbWFrZW4uXCIsXG4gIGFkZEVkZ2U6IFwiTGluayB0b2V2b2VnZW5cIixcbiAgYWRkTm9kZTogXCJOb2RlIHRvZXZvZWdlblwiLFxuICBiYWNrOiBcIlRlcnVnXCIsXG4gIGNsb3NlOiBcIlNsdWl0ZW5cIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIkthbiBnZWVuIGxpbmsgbWFrZW4gbmFhciBlZW4gY2x1c3Rlci5cIixcbiAgZGVsOiBcIlNlbGVjdGllIHZlcndpamRlcmVuXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBrdW5uZW4gbmlldCB3b3JkZW4gdmVyd2lqZGVyZC5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiS2xpayBvcCBlZW4gbm9kZSBlbiBzbGVlcCBkZSBsaW5rIG5hYXIgZWVuIGFuZGVyZSBub2RlIG9tIHplIHRlIHZlcmJpbmRlbi5cIixcbiAgZWRpdDogXCJXaWp6aWdlblwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIkNsdXN0ZXJzIGt1bm5lbiBuaWV0IHdvcmRlbiBhYW5nZXBhc3QuXCIsXG4gIGVkaXRFZGdlOiBcIkxpbmsgd2lqemlnZW5cIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIktsaWsgb3AgZGUgdmVyYmluZGluZ3NwdW50ZW4gZW4gc2xlZXAgemUgbmFhciBlZW4gbm9kZSBvbSBkYWFybWVlIHRlIHZlcmJpbmRlbi5cIixcbiAgZWRpdE5vZGU6IFwiTm9kZSB3aWp6aWdlblwiLFxufTtcblxuLy8gUG9ydHVndWVzZSBCcmF6aWxcbmV4cG9ydCBjb25zdCBwdDogTG9jYWxlID0ge1xuICBhZGREZXNjcmlwdGlvbjogXCJDbGlxdWUgZW0gdW0gZXNwYcOnbyBlbSBicmFuY28gcGFyYSBhZGljaW9uYXIgdW0gbm92byBuw7NcIixcbiAgYWRkRWRnZTogXCJBZGljaW9uYXIgYXJlc3RhXCIsXG4gIGFkZE5vZGU6IFwiQWRpY2lvbmFyIG7Ds1wiLFxuICBiYWNrOiBcIlZvbHRhclwiLFxuICBjbG9zZTogXCJGZWNoYXJcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcIk7Do28gZm9pIHBvc3PDrXZlbCBsaW5rYXIgYXJlc3RhcyBhIHVtIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJSZW1vdmVyIHNlbGVjaW9uYWRvXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBuw6NvIHB1ZGVyYW0gc2VyIHJlbW92aWRvcy5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVlIGVtIHVtIG7DsyBlIGFycmFzdGUgYSBhcmVzdGEgYXTDqSBvdXRybyBuw7MgcGFyYSBjb25lY3TDoS1sb3NcIixcbiAgZWRpdDogXCJFZGl0YXJcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJDbHVzdGVycyBuw6NvIHB1ZGVyYW0gc2VyIGVkaXRhZG9zLlwiLFxuICBlZGl0RWRnZTogXCJFZGl0YXIgYXJlc3RhXCIsXG4gIGVkaXRFZGdlRGVzY3JpcHRpb246XG4gICAgXCJDbGlxdWUgbm9zIHBvbnRvcyBkZSBjb250cm9sZSBlIG9zIGFycmFzdGUgcGFyYSB1bSBuw7MgcGFyYSBjb25lY3TDoS1sb3NcIixcbiAgZWRpdE5vZGU6IFwiRWRpdGFyIG7Ds1wiLFxufTtcblxuLy8gUnVzc2lhblxuZXhwb3J0IGNvbnN0IHJ1OiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcItCa0LvQuNC60L3QuNGC0LUg0LIg0YHQstC+0LHQvtC00L3QvtC1INC80LXRgdGC0L4sINGH0YLQvtCx0Ysg0LTQvtCx0LDQstC40YLRjCDQvdC+0LLRi9C5INGD0LfQtdC7LlwiLFxuICBhZGRFZGdlOiBcItCU0L7QsdCw0LLQuNGC0Ywg0YDQtdCx0YDQvlwiLFxuICBhZGROb2RlOiBcItCU0L7QsdCw0LLQuNGC0Ywg0YPQt9C10LtcIixcbiAgYmFjazogXCLQndCw0LfQsNC0XCIsXG4gIGNsb3NlOiBcItCX0LDQutGA0YvQstCw0YLRjFwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwi0J3QtdCy0L7Qt9C80L7QttC90L4g0YHQvtC10LTQuNC90LjRgtGMINGA0LXQsdGA0LAg0LIg0LrQu9Cw0YHRgtC10YAuXCIsXG4gIGRlbDogXCLQo9C00LDQu9C40YLRjCDQstGL0LHRgNCw0L3QvdC+0LVcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcItCa0LvQsNGB0YLQtdGA0Ysg0L3QtSDQvNC+0LPRg9GCINCx0YvRgtGMINGD0LTQsNC70LXQvdGLXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvQuNC60L3QuNGC0LUg0L3QsCDRg9C30LXQuyDQuCDQv9GA0L7RgtGP0L3QuNGC0LUg0YDQtdCx0YDQviDQuiDQtNGA0YPQs9C+0LzRgyDRg9C30LvRgywg0YfRgtC+0LHRiyDRgdC+0LXQtNC40L3QuNGC0Ywg0LjRhS5cIixcbiAgZWRpdDogXCLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjFwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcItCa0LvQsNGB0YLQtdGA0Ysg0L3QtdC00L7RgdGC0YPQv9C90Ysg0LTQu9GPINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8uXCIsXG4gIGVkaXRFZGdlOiBcItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGA0LXQsdGA0L5cIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvQuNC60L3QuNGC0LUg0L3QsCDQutC+0L3RgtGA0L7Qu9GM0L3Ri9C1INGC0L7Rh9C60Lgg0Lgg0L/QtdGA0LXRgtCw0YnQuNGC0LUg0LjRhSDQsiDRg9C30LXQuywg0YfRgtC+0LHRiyDQv9C+0LTQutC70Y7Rh9C40YLRjNGB0Y8g0Log0L3QtdC80YMuXCIsXG4gIGVkaXROb2RlOiBcItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGD0LfQtdC7XCIsXG59O1xuXG4vLyBDaGluZXNlXG5leHBvcnQgY29uc3QgY246IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwi5Y2V5Ye756m655m95aSE5pS+572u5paw6IqC54K544CCXCIsXG4gIGFkZEVkZ2U6IFwi5re75Yqg6L+e5o6l57q/XCIsXG4gIGFkZE5vZGU6IFwi5re75Yqg6IqC54K5XCIsXG4gIGJhY2s6IFwi6L+U5ZueXCIsXG4gIGNsb3NlOiBcIumXnOmWiVwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwi5peg5rOV5bCG6L+e5o6l57q/6L+e5o6l5Yiw576k6ZuG44CCXCIsXG4gIGRlbDogXCLliKDpmaTpgInlrppcIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIuaXoOazleWIoOmZpOe+pOmbhuOAglwiLFxuICBlZGdlRGVzY3JpcHRpb246IFwi5Y2V5Ye75p+Q5Liq6IqC54K55bm25bCG6K+l6L+e5o6l57q/5ouW5Yqo5Yiw5Y+m5LiA5Liq6IqC54K55Lul6L+e5o6l5a6D5Lus44CCXCIsXG4gIGVkaXQ6IFwi57yW6L6RXCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwi5peg5rOV57yW6L6R576k6ZuG44CCXCIsXG4gIGVkaXRFZGdlOiBcIue8lui+kei/nuaOpee6v1wiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOiBcIuWNleWHu+aOp+WItuiKgueCueW5tuWwhuWug+S7rOaLluWIsOiKgueCueS4iui/nuaOpeOAglwiLFxuICBlZGl0Tm9kZTogXCLnvJbovpHoioLngrlcIixcbn07XG5cbi8vIFVrcmFpbmlhblxuZXhwb3J0IGNvbnN0IHVrOiBMb2NhbGUgPSB7XG4gIGFkZERlc2NyaXB0aW9uOiBcIkvQu9GW0LrQvdGW0YLRjCDQvdCwINCy0ZbQu9GM0L3QtSDQvNGW0YHRhtC1LCDRidC+0LEg0LTQvtC00LDRgtC4INC90L7QstC40Lkg0LLRg9C30L7Quy5cIixcbiAgYWRkRWRnZTogXCLQlNC+0LTQsNGC0Lgg0LrRgNCw0LlcIixcbiAgYWRkTm9kZTogXCLQlNC+0LTQsNGC0Lgg0LLRg9C30L7Qu1wiLFxuICBiYWNrOiBcItCd0LDQt9Cw0LRcIixcbiAgY2xvc2U6IFwi0JfQsNC60YDQuNGC0LhcIixcbiAgY3JlYXRlRWRnZUVycm9yOiBcItCd0LUg0LzQvtC20LvQuNCy0L4g0L7QsSfRlNC00L3QsNGC0Lgg0LrRgNCw0Zcg0LIg0LPRgNGD0L/Rgy5cIixcbiAgZGVsOiBcItCS0LjQtNCw0LvQuNGC0Lgg0L7QsdGA0LDQvdC1XCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCLQk9GA0YPQv9C4INC90LUg0LzQvtC20YPRgtGMINCx0YPRgtC4INCy0LjQtNCw0LvQtdC90ZYuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvRltC60L3RltGC0Ywg0L3QsCDQstGD0LfQvtC7INGWINC/0LXRgNC10YLRj9Cz0L3RltGC0Ywg0LrRgNCw0Lkg0LTQviDRltC90YjQvtCz0L4g0LLRg9C30LvQsCwg0YnQvtCxINGX0YUg0Lcn0ZTQtNC90LDRgtC4LlwiLFxuICBlZGl0OiBcItCg0LXQtNCw0LPRg9Cy0LDRgtC4XCIsXG4gIGVkaXRDbHVzdGVyRXJyb3I6IFwi0JPRgNGD0L/QuCDQvdC10LTQvtGB0YLRg9C/0L3RliDQtNC70Y8g0YDQtdC00LDQs9GD0LLQsNC90L3Rjy5cIixcbiAgZWRpdEVkZ2U6IFwi0KDQtdC00LDQs9GD0LLQsNGC0Lgg0LrRgNCw0LlcIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcItCa0LvRltC60L3RltGC0Ywg0L3QsCDQutC+0L3RgtGA0L7Qu9GM0L3RliDRgtC+0YfQutC4INGWINC/0LXRgNC10YLRj9Cz0L3RltGC0Ywg0ZfRhSDRgyDQstGD0LfQvtC7LCDRidC+0LEg0L/RltC00LrQu9GO0YfQuNGC0LjRgdGPINC00L4g0L3RjNC+0LPQvi5cIixcbiAgZWRpdE5vZGU6IFwi0KDQtdC00LDQs9GD0LLQsNGC0Lgg0LLRg9C30L7Qu1wiLFxufTtcblxuLy8gRnJlbmNoXG5leHBvcnQgY29uc3QgZnI6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiQ2xpcXVleiBkYW5zIHVuIGVuZHJvaXQgdmlkZSBwb3VyIHBsYWNlciB1biBuxZN1ZC5cIixcbiAgYWRkRWRnZTogXCJBam91dGVyIHVuIGxpZW5cIixcbiAgYWRkTm9kZTogXCJBam91dGVyIHVuIG7Fk3VkXCIsXG4gIGJhY2s6IFwiUmV0b3VyXCIsXG4gIGNsb3NlOiBcIkZlcm1lclwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiSW1wb3NzaWJsZSBkZSBjcsOpZXIgdW4gbGllbiB2ZXJzIHVuIGNsdXN0ZXIuXCIsXG4gIGRlbDogXCJFZmZhY2VyIGxhIHPDqWxlY3Rpb25cIixcbiAgZGVsZXRlQ2x1c3RlckVycm9yOiBcIkxlcyBjbHVzdGVycyBuZSBwZXV2ZW50IHBhcyDDqnRyZSBlZmZhY8Opcy5cIixcbiAgZWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVleiBzdXIgdW4gbsWTdWQgZXQgZ2xpc3NleiBsZSBsaWVuIHZlcnMgdW4gYXV0cmUgbsWTdWQgcG91ciBsZXMgY29ubmVjdGVyLlwiLFxuICBlZGl0OiBcIsOJZGl0ZXJcIixcbiAgZWRpdENsdXN0ZXJFcnJvcjogXCJMZXMgY2x1c3RlcnMgbmUgcGV1dmVudCBwYXMgw6p0cmUgw6lkaXTDqXMuXCIsXG4gIGVkaXRFZGdlOiBcIsOJZGl0ZXIgbGUgbGllblwiLFxuICBlZGl0RWRnZURlc2NyaXB0aW9uOlxuICAgIFwiQ2xpcXVleiBzdXIgbGVzIHBvaW50cyBkZSBjb250csO0bGUgZXQgZ2xpc3Nlei1sZXMgcG91ciBjb25uZWN0ZXIgdW4gbsWTdWQuXCIsXG4gIGVkaXROb2RlOiBcIsOJZGl0ZXIgbGUgbsWTdWRcIixcbn07XG5cbi8vIEN6ZWNoXG5leHBvcnQgY29uc3QgY3M6IExvY2FsZSA9IHtcbiAgYWRkRGVzY3JpcHRpb246IFwiS2x1a251dMOtbSBkbyBwcsOhemRuw6lobyBwcm9zdG9ydSBtxa/FvmV0ZSBwxZlpZGF0IG5vdsO9IHZyY2hvbC5cIixcbiAgYWRkRWRnZTogXCJQxZlpZGF0IGhyYW51XCIsXG4gIGFkZE5vZGU6IFwiUMWZaWRhdCB2cmNob2xcIixcbiAgYmFjazogXCJacMSbdFwiLFxuICBjbG9zZTogXCJaYXbFmcOtdFwiLFxuICBjcmVhdGVFZGdlRXJyb3I6IFwiTmVsemUgcMWZaXBvaml0IGhyYW51IGtlIHNobHVrdS5cIixcbiAgZGVsOiBcIlNtYXphdCB2w71ixJtyXCIsXG4gIGRlbGV0ZUNsdXN0ZXJFcnJvcjogXCJOZWx6ZSBtYXphdCBzaGx1a3kuXCIsXG4gIGVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIlDFmWV0YcW+ZW7DrW0geiBqZWRub2hvIHZyY2hvbHUgZG8gZHJ1aMOpaG8gbcWvxb5ldGUgc3Bvaml0IHR5dG8gdnJjaG9seSBub3ZvdSBocmFub3UuXCIsXG4gIGVkaXQ6IFwiVXByYXZpdFwiLFxuICBlZGl0Q2x1c3RlckVycm9yOiBcIk5lbHplIHVwcmF2b3ZhdCBzaGx1a3kuXCIsXG4gIGVkaXRFZGdlOiBcIlVwcmF2aXQgaHJhbnVcIixcbiAgZWRpdEVkZ2VEZXNjcmlwdGlvbjpcbiAgICBcIlDFmWV0YcW+ZW7DrW0ga29udHJvbG7DrWhvIHZyY2hvbHUgaHJhbnkgamkgbcWvxb5ldGUgcMWZaXBvaml0IGsgamluw6ltdSB2cmNob2x1LlwiLFxuICBlZGl0Tm9kZTogXCJVcHJhdml0IHZyY2hvbFwiLFxufTtcbiIsICIvKipcbiAqIEFzc29jaWF0ZXMgYSBjYW52YXMgdG8gYSBnaXZlbiBpbWFnZSwgY29udGFpbmluZyBhIG51bWJlciBvZiByZW5kZXJpbmdzXG4gKiBvZiB0aGUgaW1hZ2UgYXQgdmFyaW91cyBzaXplcy5cbiAqXG4gKiBUaGlzIHRlY2huaXF1ZSBpcyBrbm93biBhcyAnbWlwbWFwcGluZycuXG4gKlxuICogTk9URTogSW1hZ2VzIGNhbiBhbHNvIGJlIG9mIHR5cGUgJ2RhdGE6c3ZnK3htbGAuIFRoaXMgY29kZSBhbHNvIHdvcmtzXG4gKiAgICAgICBmb3Igc3ZnLCBidXQgdGhlIG1pcG1hcHBpbmcgbWF5IG5vdCBiZSBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VcbiAqL1xuY2xhc3MgQ2FjaGVkSW1hZ2Uge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5OVU1fSVRFUkFUSU9OUyA9IDQ7IC8vIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgY29vcmRpbmF0ZXMgYXJyYXlcblxuICAgIHRoaXMuaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICB0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGltYWdlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4gICAqL1xuICBpbml0KCkge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKCkpIHJldHVybjtcblxuICAgIHRoaXMuc3JjID0gdGhpcy5pbWFnZS5zcmM7IC8vIEZvciBzYW1lIGludGVyZmFjZSB3aXRoIEltYWdlXG4gICAgY29uc3QgdyA9IHRoaXMuaW1hZ2Uud2lkdGg7XG4gICAgY29uc3QgaCA9IHRoaXMuaW1hZ2UuaGVpZ2h0O1xuXG4gICAgLy8gRWFzZSBleHRlcm5hbCBhY2Nlc3NcbiAgICB0aGlzLndpZHRoID0gdztcbiAgICB0aGlzLmhlaWdodCA9IGg7XG5cbiAgICBjb25zdCBoMiA9IE1hdGguZmxvb3IoaCAvIDIpO1xuICAgIGNvbnN0IGg0ID0gTWF0aC5mbG9vcihoIC8gNCk7XG4gICAgY29uc3QgaDggPSBNYXRoLmZsb29yKGggLyA4KTtcbiAgICBjb25zdCBoMTYgPSBNYXRoLmZsb29yKGggLyAxNik7XG5cbiAgICBjb25zdCB3MiA9IE1hdGguZmxvb3IodyAvIDIpO1xuICAgIGNvbnN0IHc0ID0gTWF0aC5mbG9vcih3IC8gNCk7XG4gICAgY29uc3QgdzggPSBNYXRoLmZsb29yKHcgLyA4KTtcbiAgICBjb25zdCB3MTYgPSBNYXRoLmZsb29yKHcgLyAxNik7XG5cbiAgICAvLyBNYWtlIGNhbnZhcyBhcyBzbWFsbCBhcyBwb3NzaWJsZVxuICAgIHRoaXMuY2FudmFzLndpZHRoID0gMyAqIHc0O1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGgyO1xuXG4gICAgLy8gQ29vcmRpbmF0ZXMgYW5kIHNpemVzIG9mIGltYWdlcyBjb250YWluZWQgaW4gdGhlIGNhbnZhc1xuICAgIC8vIFZhbHVlcyBwZXIgcm93OiAgW3RvcCB4LCBsZWZ0IHksIHdpZHRoLCBoZWlnaHRdXG5cbiAgICB0aGlzLmNvb3JkaW5hdGVzID0gW1xuICAgICAgWzAsIDAsIHcyLCBoMl0sXG4gICAgICBbdzIsIDAsIHc0LCBoNF0sXG4gICAgICBbdzIsIGg0LCB3OCwgaDhdLFxuICAgICAgWzUgKiB3OCwgaDQsIHcxNiwgaDE2XSxcbiAgICBdO1xuXG4gICAgdGhpcy5fZmlsbE1pcE1hcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGluaXQoKSBoYXMgYmVlbiBjYWxsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGluaXRpYWxpemVkKCkge1xuICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGVzICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IG1haW4gaW1hZ2UgaW4gdmFyaW91cyBzaXplcyB0byB0aGUgY29udGV4dC5cbiAgICpcbiAgICogVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBpcyB0byByZWR1Y2UgYXJ0ZWZhY3RzIGR1ZSB0byBpbnRlcnBvbGF0aW9uXG4gICAqIGF0IGRpZmZlcmluZyB6b29tIGxldmVscy5cbiAgICpcbiAgICogU291cmNlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODc2MTQwNC8xMjIzNTMxXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kcyB0YWtlcyB0aGUgcmVzaXppbmcgb3V0IG9mIHRoZSBkcmF3aW5nIGxvb3AsIGluIG9yZGVyIHRvXG4gICAqIHJlZHVjZSBwZXJmb3JtYW5jZSBvdmVyaGVhZC5cbiAgICpcbiAgICogVE9ETzogVGhlIGNvZGUgYXNzdW1lcyB0aGF0IGEgMkQgY29udGV4dCBjYW4gYWx3YXlzIGJlIGdvdHRlbi4gVGhpcyBpc1xuICAgKiAgICAgICBub3QgbmVjZXNzYXJpbHkgdHJ1ZSEgT1RPSCwgaWYgbm90IHRydWUgdGhlbiB1c2FnZSBvZiB0aGlzIGNsYXNzXG4gICAqICAgICAgIGlzIHNlbnNlbGVzcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9maWxsTWlwTWFwKCkge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcblxuICAgIC8vIEZpcnN0IHpvb20tbGV2ZWwgY29tZXMgZnJvbSB0aGUgaW1hZ2VcbiAgICBjb25zdCB0byA9IHRoaXMuY29vcmRpbmF0ZXNbMF07XG4gICAgY3R4LmRyYXdJbWFnZSh0aGlzLmltYWdlLCB0b1swXSwgdG9bMV0sIHRvWzJdLCB0b1szXSk7XG5cbiAgICAvLyBUaGUgcmVzdCBhcmUgY29weSBhY3Rpb25zIGludGVybmFsIHRvIHRoZSBjYW52YXMvY29udGV4dFxuICAgIGZvciAobGV0IGl0ZXJhdGlvbnMgPSAxOyBpdGVyYXRpb25zIDwgdGhpcy5OVU1fSVRFUkFUSU9OUzsgaXRlcmF0aW9ucysrKSB7XG4gICAgICBjb25zdCBmcm9tID0gdGhpcy5jb29yZGluYXRlc1tpdGVyYXRpb25zIC0gMV07XG4gICAgICBjb25zdCB0byA9IHRoaXMuY29vcmRpbmF0ZXNbaXRlcmF0aW9uc107XG5cbiAgICAgIGN0eC5kcmF3SW1hZ2UoXG4gICAgICAgIHRoaXMuY2FudmFzLFxuICAgICAgICBmcm9tWzBdLFxuICAgICAgICBmcm9tWzFdLFxuICAgICAgICBmcm9tWzJdLFxuICAgICAgICBmcm9tWzNdLFxuICAgICAgICB0b1swXSxcbiAgICAgICAgdG9bMV0sXG4gICAgICAgIHRvWzJdLFxuICAgICAgICB0b1szXVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyB0aGUgaW1hZ2UsIHVzaW5nIHRoZSBtaXBtYXAgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBNaXBNYXAgaXMgb25seSB1c2VkIGlmIHBhcmFtIGZhY3RvciA+IDI7IG90aGVyd2lzZSwgb3JpZ2luYWwgYml0bWFwXG4gICAqIGlzIHJlc2l6ZWQuIFRoaXMgaXMgYWxzbyB1c2VkIHRvIHNraXAgbWlwbWFwIHVzYWdlLCBlLmcuIGJ5IHNldHRpbmcgZmFjdG9yID0gMVxuICAgKlxuICAgKiBDcmVkaXRzIHRvICdBbGV4IGRlIE11bGRlcicgZm9yIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4ICBjb250ZXh0IG9uIHdoaWNoIHRvIGRyYXcgem9vbWVkIGltYWdlXG4gICAqIEBwYXJhbSB7RmxvYXR9IGZhY3RvciBzY2FsZSBmYWN0b3IgYXQgd2hpY2ggdG8gZHJhd1xuICAgKiBAcGFyYW0ge251bWJlcn0gbGVmdFxuICAgKiBAcGFyYW0ge251bWJlcn0gdG9wXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XG4gICAqL1xuICBkcmF3SW1hZ2VBdFBvc2l0aW9uKGN0eCwgZmFjdG9yLCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQoKSkgcmV0dXJuOyAvL2Nhbid0IGRyYXcgaW1hZ2UgeWV0IG5vdCBpbnRpYWxpemVkXG5cbiAgICBpZiAoZmFjdG9yID4gMikge1xuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHpvb21lZCBpbWFnZSB0byB1c2VcbiAgICAgIGZhY3RvciAqPSAwLjU7XG4gICAgICBsZXQgaXRlcmF0aW9ucyA9IDA7XG4gICAgICB3aGlsZSAoZmFjdG9yID4gMiAmJiBpdGVyYXRpb25zIDwgdGhpcy5OVU1fSVRFUkFUSU9OUykge1xuICAgICAgICBmYWN0b3IgKj0gMC41O1xuICAgICAgICBpdGVyYXRpb25zICs9IDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVyYXRpb25zID49IHRoaXMuTlVNX0lURVJBVElPTlMpIHtcbiAgICAgICAgaXRlcmF0aW9ucyA9IHRoaXMuTlVNX0lURVJBVElPTlMgLSAxO1xuICAgICAgfVxuICAgICAgLy9jb25zb2xlLmxvZyhcIml0ZXJhdGlvbnM6IFwiICsgaXRlcmF0aW9ucyk7XG5cbiAgICAgIGNvbnN0IGZyb20gPSB0aGlzLmNvb3JkaW5hdGVzW2l0ZXJhdGlvbnNdO1xuICAgICAgY3R4LmRyYXdJbWFnZShcbiAgICAgICAgdGhpcy5jYW52YXMsXG4gICAgICAgIGZyb21bMF0sXG4gICAgICAgIGZyb21bMV0sXG4gICAgICAgIGZyb21bMl0sXG4gICAgICAgIGZyb21bM10sXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRHJhdyBpbWFnZSBkaXJlY3RseVxuICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLmltYWdlLCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYWNoZWRJbWFnZTtcbiIsICJpbXBvcnQgQ2FjaGVkSW1hZ2UgZnJvbSBcIi4vQ2FjaGVkSW1hZ2VcIjtcblxuLyoqXG4gKiBUaGlzIGNhbGxiYWNrIGlzIGEgY2FsbGJhY2sgdGhhdCBhY2NlcHRzIGFuIEltYWdlLlxuICpcbiAqIEBjYWxsYmFjayBJbWFnZUNhbGxiYWNrXG4gKiBAcGFyYW0ge0ltYWdlfSBpbWFnZVxuICovXG5cbi8qKlxuICogVGhpcyBjbGFzcyBsb2FkcyBpbWFnZXMgYW5kIGtlZXBzIHRoZW0gc3RvcmVkLlxuICpcbiAqIEBwYXJhbSB7SW1hZ2VDYWxsYmFja30gY2FsbGJhY2tcbiAqL1xuY2xhc3MgSW1hZ2VzIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7SW1hZ2VDYWxsYmFja30gY2FsbGJhY2tcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5pbWFnZXMgPSB7fTtcbiAgICB0aGlzLmltYWdlQnJva2VuID0ge307XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgICAgICAgICAgICAgICAgICAgICAgVGhlIG9yaWdpbmFsIFVybCB0aGF0IGZhaWxlZCB0byBsb2FkLCBpZiB0aGUgYnJva2VuIGltYWdlIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQgaXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgY2FjaGUgdXNpbmcgdGhpcyBVcmwgYXMgdGhlIGtleSBzbyB0aGF0IHN1YnNlcXVlbnQgcmVxdWVzdHMgZm9yIHRoaXMgVXJsIHdpbGwgcmV0dXJuIHRoZSBicm9rZW4gaW1hZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJyb2tlblVybCAgICAgICAgICAgICAgICBVcmwgdGhlIGJyb2tlbiBpbWFnZSB0byB0cnkgYW5kIGxvYWRcbiAgICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VUb0xvYWRCcm9rZW5VcmxPbiAgIFRoZSBpbWFnZSBvYmplY3RcbiAgICovXG4gIF90cnlsb2FkQnJva2VuVXJsKHVybCwgYnJva2VuVXJsLCBpbWFnZVRvTG9hZEJyb2tlblVybE9uKSB7XG4gICAgLy9JZiB0aGVzZSBwYXJhbWV0ZXJzIGFyZW4ndCBzcGVjaWZpZWQgdGhlbiBleGl0IHRoZSBmdW5jdGlvbiBiZWNhdXNlIG5vdGhpbmcgY29uc3RydWN0aXZlIGNhbiBiZSBkb25lXG4gICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkIHx8IGltYWdlVG9Mb2FkQnJva2VuVXJsT24gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIGlmIChicm9rZW5VcmwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS53YXJuKFwiTm8gYnJva2VuIHVybCBpbWFnZSBkZWZpbmVkXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vQ2xlYXIgdGhlIG9sZCBzdWJzY3JpcHRpb24gdG8gdGhlIGVycm9yIGV2ZW50IGFuZCBwdXQgYSBuZXcgaW4gcGxhY2UgdGhhdCBvbmx5IGhhbmRsZSBlcnJvcnMgaW4gbG9hZGluZyB0aGUgYnJva2VuSW1hZ2VVcmxcbiAgICBpbWFnZVRvTG9hZEJyb2tlblVybE9uLmltYWdlLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgYnJva2VuSW1hZ2U6XCIsIGJyb2tlblVybCk7XG4gICAgICAvLyBjYWNoZSBpdGVtIHdpbGwgY29udGFpbiBlbXB0eSBpbWFnZSwgdGhpcyBzaG91bGQgYmUgT0sgZm9yIGRlZmF1bHRcbiAgICB9O1xuXG4gICAgLy9TZXQgdGhlIHNvdXJjZSBvZiB0aGUgaW1hZ2UgdG8gdGhlIGJyb2tlblVybCwgdGhpcyBpcyBhY3R1YWxseSB3aGF0IGtpY2tzIG9mZiB0aGUgbG9hZGluZyBvZiB0aGUgYnJva2VuIGltYWdlXG4gICAgaW1hZ2VUb0xvYWRCcm9rZW5VcmxPbi5pbWFnZS5zcmMgPSBicm9rZW5Vcmw7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHt2aXMuSW1hZ2V9IGltYWdlVG9SZWRyYXdXaXRoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVkcmF3V2l0aEltYWdlKGltYWdlVG9SZWRyYXdXaXRoKSB7XG4gICAgaWYgKHRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2soaW1hZ2VUb1JlZHJhd1dpdGgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsICAgICAgICAgIFVybCBvZiB0aGUgaW1hZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJyb2tlblVybCAgICBVcmwgb2YgYW4gaW1hZ2UgdG8gdXNlIGlmIHRoZSB1cmwgaW1hZ2UgaXMgbm90IGZvdW5kXG4gICAqIEByZXR1cm5zIHtJbWFnZX0gaW1nICAgICAgICAgIFRoZSBpbWFnZSBvYmplY3RcbiAgICovXG4gIGxvYWQodXJsLCBicm9rZW5VcmwpIHtcbiAgICAvL1RyeSBhbmQgZ2V0IHRoZSBpbWFnZSBmcm9tIHRoZSBjYWNoZSwgaWYgc3VjY2Vzc2Z1bCB0aGVuIHJldHVybiB0aGUgY2FjaGVkIGltYWdlXG4gICAgY29uc3QgY2FjaGVkSW1hZ2UgPSB0aGlzLmltYWdlc1t1cmxdO1xuICAgIGlmIChjYWNoZWRJbWFnZSkgcmV0dXJuIGNhY2hlZEltYWdlO1xuXG4gICAgLy9DcmVhdGUgYSBuZXcgaW1hZ2VcbiAgICBjb25zdCBpbWcgPSBuZXcgQ2FjaGVkSW1hZ2UoKTtcblxuICAgIC8vIE5lZWQgdG8gYWRkIHRvIGNhY2hlIGhlcmUsIG90aGVyd2lzZSBmaW5hbCByZXR1cm4gd2lsbCBzcGF3biBkaWZmZXJlbnQgY29waWVzIG9mIHRoZSBzYW1lIGltYWdlLFxuICAgIC8vIEFsc28sIHRoZXJlIHdpbGwgYmUgbXVsdGlwbGUgbG9hZHMgb2YgdGhlIHNhbWUgaW1hZ2UuXG4gICAgdGhpcy5pbWFnZXNbdXJsXSA9IGltZztcblxuICAgIC8vU3Vic2NyaWJlIHRvIHRoZSBldmVudCB0aGF0IGlzIHJhaXNlZCBpZiB0aGUgaW1hZ2UgbG9hZHMgc3VjY2Vzc2Z1bGx5XG4gICAgaW1nLmltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIC8vIFByb3Blcmx5IGluaXQgdGhlIGNhY2hlZCBpdGVtIGFuZCB0aGVuIHJlcXVlc3QgYSByZWRyYXdcbiAgICAgIHRoaXMuX2ZpeEltYWdlQ29vcmRpbmF0ZXMoaW1nLmltYWdlKTtcbiAgICAgIGltZy5pbml0KCk7XG4gICAgICB0aGlzLl9yZWRyYXdXaXRoSW1hZ2UoaW1nKTtcbiAgICB9O1xuXG4gICAgLy9TdWJzY3JpYmUgdG8gdGhlIGV2ZW50IHRoYXQgaXMgcmFpc2VkIGlmIHRoZSBpbWFnZSBmYWlscyB0byBsb2FkXG4gICAgaW1nLmltYWdlLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGxvYWQgaW1hZ2U6XCIsIHVybCk7XG4gICAgICAvL1RyeSBhbmQgbG9hZCB0aGUgaW1hZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBicm9rZW5VcmwgdXNpbmdcbiAgICAgIHRoaXMuX3RyeWxvYWRCcm9rZW5VcmwodXJsLCBicm9rZW5VcmwsIGltZyk7XG4gICAgfTtcblxuICAgIC8vU2V0IHRoZSBzb3VyY2Ugb2YgdGhlIGltYWdlIHRvIHRoZSB1cmwsIHRoaXMgaXMgd2hhdCBhY3R1YWxseSBraWNrcyBvZmYgdGhlIGxvYWRpbmcgb2YgdGhlIGltYWdlXG4gICAgaW1nLmltYWdlLnNyYyA9IHVybDtcblxuICAgIC8vUmV0dXJuIHRoZSBuZXcgaW1hZ2VcbiAgICByZXR1cm4gaW1nO1xuICB9XG5cbiAgLyoqXG4gICAqIElFMTEgZml4IC0tIHRoYW5rcyBkcG9uY2ghXG4gICAqXG4gICAqIExvY2FsIGhlbHBlciBmdW5jdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5JbWFnZX0gaW1hZ2VUb0NhY2hlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZml4SW1hZ2VDb29yZGluYXRlcyhpbWFnZVRvQ2FjaGUpIHtcbiAgICBpZiAoaW1hZ2VUb0NhY2hlLndpZHRoID09PSAwKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGltYWdlVG9DYWNoZSk7XG4gICAgICBpbWFnZVRvQ2FjaGUud2lkdGggPSBpbWFnZVRvQ2FjaGUub2Zmc2V0V2lkdGg7XG4gICAgICBpbWFnZVRvQ2FjaGUuaGVpZ2h0ID0gaW1hZ2VUb0NhY2hlLm9mZnNldEhlaWdodDtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW1hZ2VUb0NhY2hlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VzO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIEZGMjYtIGJ1ZzogQXJyYXlCdWZmZXJzIGFyZSBub24tZXh0ZW5zaWJsZSwgYnV0IE9iamVjdC5pc0V4dGVuc2libGUgZG9lcyBub3QgcmVwb3J0IGl0XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoYnVmZmVyKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1ZmZlciwgJ2EnLCB7IHZhbHVlOiA4IH0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSAtLSBzYWZlXG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgJGlzRXh0ZW5zaWJsZSgxKTsgfSk7XG5cbi8vIGBPYmplY3QuaXNFeHRlbnNpYmxlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmlzZXh0ZW5zaWJsZVxubW9kdWxlLmV4cG9ydHMgPSAoRkFJTFNfT05fUFJJTUlUSVZFUyB8fCBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUpID8gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgJiYgY2xhc3NvZihpdCkgPT09ICdBcnJheUJ1ZmZlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWU7XG59IDogJGlzRXh0ZW5zaWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGlzRXh0ZW5zaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxudmFyIHNldE1ldGFkYXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIGRlZmluZVByb3BlcnR5KGl0LCBNRVRBREFUQSwgeyB2YWx1ZToge1xuICAgIG9iamVjdElEOiAnTycgKyBpZCsrLCAvLyBvYmplY3QgSURcbiAgICB3ZWFrRGF0YToge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG5cbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIGEgcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBREFUQV0ub2JqZWN0SUQ7XG59O1xuXG52YXIgZ2V0V2Vha0RhdGEgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIHRoZSBzdG9yZSBvZiB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBREFUQV0ud2Vha0RhdGE7XG59O1xuXG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpJTkcgJiYgUkVRVUlSRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzT3duKGl0LCBNRVRBREFUQSkpIHNldE1ldGFkYXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxudmFyIGVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgbWV0YS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4gIFJFUVVJUkVEID0gdHJ1ZTtcbiAgdmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmY7XG4gIHZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xuICB2YXIgdGVzdCA9IHt9O1xuICB0ZXN0W01FVEFEQVRBXSA9IDE7XG5cbiAgLy8gcHJldmVudCBleHBvc2luZyBvZiBtZXRhZGF0YSBrZXlcbiAgaWYgKGdldE93blByb3BlcnR5TmFtZXModGVzdCkubGVuZ3RoKSB7XG4gICAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHRbaV0gPT09IE1FVEFEQVRBKSB7XG4gICAgICAgICAgc3BsaWNlKHJlc3VsdCwgaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUuZlxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBlbmFibGU6IGVuYWJsZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2Vha0RhdGE6IGdldFdlYWtEYXRhLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cbmhpZGRlbktleXNbTUVUQURBVEFdID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19SRUNPUkQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfUkVDT1JEKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19SRUNPUkQpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlLml0ZXJhdG9yO1xuICB9IGVsc2UgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gSVNfUkVDT1JEID8gaXRlcmFibGUubmV4dCA6IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFByb3RvdHlwZSkge1xuICBpZiAoaXNQcm90b3R5cGVPZihQcm90b3R5cGUsIGl0KSkgcmV0dXJuIGl0O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcignSW5jb3JyZWN0IGludm9jYXRpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcbiAgdmFyIENvbnN0cnVjdG9yO1xuXG4gIGlmICghREVTQ1JJUFRPUlMgfHwgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpXG4gICAgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7IH0pKVxuICApIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSB7XG4gICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKGFuSW5zdGFuY2UodGFyZ2V0LCBQcm90b3R5cGUpLCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGNvbGxlY3Rpb246IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0YXJnZXRbQURERVJdLCB7IHRoYXQ6IHRhcmdldCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIGZvckVhY2goWydhZGQnLCAnY2xlYXInLCAnZGVsZXRlJywgJ2ZvckVhY2gnLCAnZ2V0JywgJ2hhcycsICdzZXQnLCAna2V5cycsICd2YWx1ZXMnLCAnZW50cmllcyddLCBmdW5jdGlvbiAoS0VZKSB7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT09ICdhZGQnIHx8IEtFWSA9PT0gJ3NldCc7XG4gICAgICBpZiAoS0VZIGluIE5hdGl2ZVByb3RvdHlwZSAmJiAhKElTX1dFQUsgJiYgS0VZID09PSAnY2xlYXInKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb247XG4gICAgICAgICAgaWYgKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSkgcmV0dXJuIEtFWSA9PT0gJ2dldCcgPyB1bmRlZmluZWQgOiBmYWxzZTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY29sbGVjdGlvbltLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgcmV0dXJuIElTX0FEREVSID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBJU19XRUFLIHx8IGRlZmluZVByb3BlcnR5KFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbi5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZhbHNlLCB0cnVlKTtcblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwgZXhwb3J0ZWQpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bnNhZmUgJiYgdGFyZ2V0W2tleV0pIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lJyk7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLmZhc3RLZXk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIFByb3RvdHlwZSk7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgaW5kZXg6IGNyZWF0ZShudWxsKSxcbiAgICAgICAgZmlyc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RhdGUuZmlyc3QpIHN0YXRlLmZpcnN0ID0gZW50cnk7XG4gICAgICAgIGlmIChwcmV2aW91cykgcHJldmlvdXMubmV4dCA9IGVudHJ5O1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUrKztcbiAgICAgICAgZWxzZSB0aGF0LnNpemUrKztcbiAgICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSBzdGF0ZS5pbmRleFtpbmRleF0gPSBlbnRyeTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIHZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAvLyBmYXN0IGNhc2VcbiAgICAgIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgICAgIHZhciBlbnRyeTtcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gc3RhdGUuaW5kZXhbaW5kZXhdO1xuICAgICAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gICAgICBmb3IgKGVudHJ5ID0gc3RhdGUuZmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm5leHQpIHtcbiAgICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSByZXR1cm4gZW50cnk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuY2xlYXIoKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmNsZWFyXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZGF0YSA9IHN0YXRlLmluZGV4O1xuICAgICAgICB2YXIgZW50cnkgPSBzdGF0ZS5maXJzdDtcbiAgICAgICAgd2hpbGUgKGVudHJ5KSB7XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnByZXZpb3VzKSBlbnRyeS5wcmV2aW91cyA9IGVudHJ5LnByZXZpb3VzLm5leHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5ID0gZW50cnkubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5maXJzdCA9IHN0YXRlLmxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICAgICAgdmFyIGVudHJ5ID0gc3RhdGUubGFzdDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCFzdGF0ZS50YXJnZXQgfHwgIShzdGF0ZS5sYXN0ID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5zdGF0ZS5maXJzdCkpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT09ICdrZXlzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkua2V5LCBmYWxzZSk7XG4gICAgICBpZiAoa2luZCA9PT0gJ3ZhbHVlcycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LnZhbHVlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChbZW50cnkua2V5LCBlbnRyeS52YWx1ZV0sIGZhbHNlKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZVtAQHNwZWNpZXNdYCBhY2Nlc3NvcnNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1tYXAtQEBzcGVjaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtc2V0LUBAc3BlY2llc1xuICAgIHNldFNwZWNpZXMoQ09OU1RSVUNUT1JfTkFNRSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYE1hcGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLW9iamVjdHNcbmNvbGxlY3Rpb24oJ01hcCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXAnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk1hcDtcbiIsICIvKipcbiAqIFRoaXMgY2xhc3MgY2FuIHN0b3JlIGdyb3VwcyBhbmQgb3B0aW9ucyBzcGVjaWZpYyBmb3IgZ3JvdXBzLlxuICovXG5leHBvcnQgY2xhc3MgR3JvdXBzIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLl9kZWZhdWx0SW5kZXggPSAwO1xuICAgIHRoaXMuX2dyb3VwSW5kZXggPSAwO1xuXG4gICAgdGhpcy5fZGVmYXVsdEdyb3VwcyA9IFtcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiMyQjdDRTlcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjOTdDMkZDXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiIzJCN0NFOVwiLCBiYWNrZ3JvdW5kOiBcIiNEMkU1RkZcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiIzJCN0NFOVwiLCBiYWNrZ3JvdW5kOiBcIiNEMkU1RkZcIiB9LFxuICAgICAgfSwgLy8gMDogYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0ZGQTUwMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRkZGMDBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkZBNTAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGRkZBM1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkZBNTAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGRkZBM1wiIH0sXG4gICAgICB9LCAvLyAxOiB5ZWxsb3dcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGQTBBMTBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkI3RTgxXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZBMEExMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRkFGQjFcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZBMEExMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRkFGQjFcIiB9LFxuICAgICAgfSwgLy8gMjogcmVkXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjNDFBOTA2XCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzdCRTE0MVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM0MUE5MDZcIiwgYmFja2dyb3VuZDogXCIjQTFFQzc2XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM0MUE5MDZcIiwgYmFja2dyb3VuZDogXCIjQTFFQzc2XCIgfSxcbiAgICAgIH0sIC8vIDM6IGdyZWVuXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjRTEyOUYwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0VCN0RGNFwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNFMTI5RjBcIiwgYmFja2dyb3VuZDogXCIjRjBCM0Y1XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNFMTI5RjBcIiwgYmFja2dyb3VuZDogXCIjRjBCM0Y1XCIgfSxcbiAgICAgIH0sIC8vIDQ6IG1hZ2VudGFcbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiM3QzI5RjBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjQUQ4NUU0XCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiIzdDMjlGMFwiLCBiYWNrZ3JvdW5kOiBcIiNEM0JERjBcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiIzdDMjlGMFwiLCBiYWNrZ3JvdW5kOiBcIiNEM0JERjBcIiB9LFxuICAgICAgfSwgLy8gNTogcHVycGxlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjQzM3RjAwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0ZGQTgwN1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNDMzdGMDBcIiwgYmFja2dyb3VuZDogXCIjRkZDQTY2XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNDMzdGMDBcIiwgYmFja2dyb3VuZDogXCIjRkZDQTY2XCIgfSxcbiAgICAgIH0sIC8vIDY6IG9yYW5nZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzQyMjBGQlwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM2RTZFRkRcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjNDIyMEZCXCIsIGJhY2tncm91bmQ6IFwiIzlCOUJGRFwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjNDIyMEZCXCIsIGJhY2tncm91bmQ6IFwiIzlCOUJGRFwiIH0sXG4gICAgICB9LCAvLyA3OiBkYXJrYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0ZENUE3N1wiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRkMwQ0JcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkQ1QTc3XCIsIGJhY2tncm91bmQ6IFwiI0ZGRDFEOVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkQ1QTc3XCIsIGJhY2tncm91bmQ6IFwiI0ZGRDFEOVwiIH0sXG4gICAgICB9LCAvLyA4OiBwaW5rXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjNEFENjNBXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiI0MyRkFCQ1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM0QUQ2M0FcIiwgYmFja2dyb3VuZDogXCIjRTZGRkUzXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM0QUQ2M0FcIiwgYmFja2dyb3VuZDogXCIjRTZGRkUzXCIgfSxcbiAgICAgIH0sIC8vIDk6IG1pbnRcblxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiIzk5MDAwMFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNFRTAwMDBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjQkIwMDAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGMzMzM1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjQkIwMDAwXCIsIGJhY2tncm91bmQ6IFwiI0ZGMzMzM1wiIH0sXG4gICAgICB9LCAvLyAxMDpicmlnaHQgcmVkXG5cbiAgICAgIHtcbiAgICAgICAgYm9yZGVyOiBcIiNGRjYwMDBcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjRkY2MDAwXCIsXG4gICAgICAgIGhpZ2hsaWdodDogeyBib3JkZXI6IFwiI0ZGNjAwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjYwMDBcIiB9LFxuICAgICAgICBob3ZlcjogeyBib3JkZXI6IFwiI0ZGNjAwMFwiLCBiYWNrZ3JvdW5kOiBcIiNGRjYwMDBcIiB9LFxuICAgICAgfSwgLy8gMTI6IHJlYWwgb3JhbmdlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjOTdDMkZDXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzJCN0NFOVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNEMkU1RkZcIiwgYmFja2dyb3VuZDogXCIjMkI3Q0U5XCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNEMkU1RkZcIiwgYmFja2dyb3VuZDogXCIjMkI3Q0U5XCIgfSxcbiAgICAgIH0sIC8vIDEzOiBibHVlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjMzk5NjA1XCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzI1NUMwM1wiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiMzOTk2MDVcIiwgYmFja2dyb3VuZDogXCIjMjU1QzAzXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiMzOTk2MDVcIiwgYmFja2dyb3VuZDogXCIjMjU1QzAzXCIgfSxcbiAgICAgIH0sIC8vIDE0OiBncmVlblxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0I3MDA1NFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRjAwN0VcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjQjcwMDU0XCIsIGJhY2tncm91bmQ6IFwiI0ZGMDA3RVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjQjcwMDU0XCIsIGJhY2tncm91bmQ6IFwiI0ZGMDA3RVwiIH0sXG4gICAgICB9LCAvLyAxNTogbWFnZW50YVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0FEODVFNFwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM3QzI5RjBcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRDNCREYwXCIsIGJhY2tncm91bmQ6IFwiIzdDMjlGMFwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRDNCREYwXCIsIGJhY2tncm91bmQ6IFwiIzdDMjlGMFwiIH0sXG4gICAgICB9LCAvLyAxNjogcHVycGxlXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjNDU1N0ZBXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzAwMEVBMVwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiM2RTZFRkRcIiwgYmFja2dyb3VuZDogXCIjMDAwRUExXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiM2RTZFRkRcIiwgYmFja2dyb3VuZDogXCIjMDAwRUExXCIgfSxcbiAgICAgIH0sIC8vIDE3OiBkYXJrYmx1ZVxuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0ZGQzBDQlwiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiNGRDVBNzdcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRkZEMUQ5XCIsIGJhY2tncm91bmQ6IFwiI0ZENUE3N1wiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRkZEMUQ5XCIsIGJhY2tncm91bmQ6IFwiI0ZENUE3N1wiIH0sXG4gICAgICB9LCAvLyAxODogcGlua1xuICAgICAge1xuICAgICAgICBib3JkZXI6IFwiI0MyRkFCQ1wiLFxuICAgICAgICBiYWNrZ3JvdW5kOiBcIiM3NEQ2NkFcIixcbiAgICAgICAgaGlnaGxpZ2h0OiB7IGJvcmRlcjogXCIjRTZGRkUzXCIsIGJhY2tncm91bmQ6IFwiIzc0RDY2QVwiIH0sXG4gICAgICAgIGhvdmVyOiB7IGJvcmRlcjogXCIjRTZGRkUzXCIsIGJhY2tncm91bmQ6IFwiIzc0RDY2QVwiIH0sXG4gICAgICB9LCAvLyAxOTogbWludFxuXG4gICAgICB7XG4gICAgICAgIGJvcmRlcjogXCIjRUUwMDAwXCIsXG4gICAgICAgIGJhY2tncm91bmQ6IFwiIzk5MDAwMFwiLFxuICAgICAgICBoaWdobGlnaHQ6IHsgYm9yZGVyOiBcIiNGRjMzMzNcIiwgYmFja2dyb3VuZDogXCIjQkIwMDAwXCIgfSxcbiAgICAgICAgaG92ZXI6IHsgYm9yZGVyOiBcIiNGRjMzMzNcIiwgYmFja2dyb3VuZDogXCIjQkIwMDAwXCIgfSxcbiAgICAgIH0sIC8vIDIwOmJyaWdodCByZWRcbiAgICBdO1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIHVzZURlZmF1bHRHcm91cHM6IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGNvbnN0IG9wdGlvbkZpZWxkcyA9IFtcInVzZURlZmF1bHRHcm91cHNcIl07XG5cbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyb3VwTmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgZ3JvdXBOYW1lKSkge1xuICAgICAgICAgIGlmIChvcHRpb25GaWVsZHMuaW5kZXhPZihncm91cE5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25zW2dyb3VwTmFtZV07XG4gICAgICAgICAgICB0aGlzLmFkZChncm91cE5hbWUsIGdyb3VwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGdyb3Vwc1xuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5fZ3JvdXBzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2dyb3VwTmFtZXMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZ3JvdXAgb3B0aW9ucyBvZiBhIGdyb3VwbmFtZS5cbiAgICogSWYgZ3JvdXBuYW1lIGlzIG5vdCBmb3VuZCwgYSBuZXcgZ3JvdXAgbWF5IGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gICAgICAgZ3JvdXBuYW1lICAgICBDYW4gYmUgYSBudW1iZXIsIHN0cmluZywgRGF0ZSwgZXRjLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG91bGRDcmVhdGU9dHJ1ZV0gSWYgdHJ1ZSwgY3JlYXRlIGEgbmV3IGdyb3VwXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBmb3VuZCBvciBjcmVhdGVkIGdyb3VwXG4gICAqL1xuICBnZXQoZ3JvdXBuYW1lLCBzaG91bGRDcmVhdGUgPSB0cnVlKSB7XG4gICAgbGV0IGdyb3VwID0gdGhpcy5fZ3JvdXBzLmdldChncm91cG5hbWUpO1xuXG4gICAgaWYgKGdyb3VwID09PSB1bmRlZmluZWQgJiYgc2hvdWxkQ3JlYXRlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMub3B0aW9ucy51c2VEZWZhdWx0R3JvdXBzID09PSBmYWxzZSAmJlxuICAgICAgICB0aGlzLl9ncm91cE5hbWVzLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICAvLyBjcmVhdGUgbmV3IGdyb3VwXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZ3JvdXBJbmRleCAlIHRoaXMuX2dyb3VwTmFtZXMubGVuZ3RoO1xuICAgICAgICArK3RoaXMuX2dyb3VwSW5kZXg7XG4gICAgICAgIGdyb3VwID0ge307XG4gICAgICAgIGdyb3VwLmNvbG9yID0gdGhpcy5fZ3JvdXBzLmdldCh0aGlzLl9ncm91cE5hbWVzW2luZGV4XSk7XG4gICAgICAgIHRoaXMuX2dyb3Vwcy5zZXQoZ3JvdXBuYW1lLCBncm91cCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgbmV3IGdyb3VwXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZGVmYXVsdEluZGV4ICUgdGhpcy5fZGVmYXVsdEdyb3Vwcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRJbmRleCsrO1xuICAgICAgICBncm91cCA9IHt9O1xuICAgICAgICBncm91cC5jb2xvciA9IHRoaXMuX2RlZmF1bHRHcm91cHNbaW5kZXhdO1xuICAgICAgICB0aGlzLl9ncm91cHMuc2V0KGdyb3VwbmFtZSwgZ3JvdXApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgY3VzdG9tIGdyb3VwIHN0eWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXBOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGdyb3VwLCBhIG5ldyBncm91cCB3aWxsIGJlXG4gICAqIGNyZWF0ZWQgaWYgYSBncm91cCB3aXRoIHRoZSBzYW1lIG5hbWUgZG9lc24ndCBleGlzdCwgb3RoZXJ3aXNlIHRoZSBvbGRcbiAgICogZ3JvdXBzIHN0eWxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZSAtIEFuIG9iamVjdCBjb250YWluaW5nIGJvcmRlckNvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsXG4gICAqIGV0Yy5cbiAgICogQHJldHVybnMge29iamVjdH0gVGhlIGNyZWF0ZWQgZ3JvdXAgb2JqZWN0LlxuICAgKi9cbiAgYWRkKGdyb3VwTmFtZSwgc3R5bGUpIHtcbiAgICAvLyBPbmx5IHB1c2ggZ3JvdXAgbmFtZSBvbmNlIHRvIHByZXZlbnQgZHVwbGljYXRlcyB3aGljaCB3b3VsZCBjb25zdW1lIG1vcmVcbiAgICAvLyBSQU0gYW5kIGFsc28gc2tldyB0aGUgZGlzdHJpYnV0aW9uIHRvd2FyZHMgbW9yZSBvZnRlbiB1cGRhdGVkIGdyb3VwcyxcbiAgICAvLyBuZWl0aGVyIG9mIHdoaWNoIGlzIGRlc2lyYWJsZS5cbiAgICBpZiAoIXRoaXMuX2dyb3Vwcy5oYXMoZ3JvdXBOYW1lKSkge1xuICAgICAgdGhpcy5fZ3JvdXBOYW1lcy5wdXNoKGdyb3VwTmFtZSk7XG4gICAgfVxuICAgIHRoaXMuX2dyb3Vwcy5zZXQoZ3JvdXBOYW1lLCBzdHlsZSk7XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBOdW1iZXIuaXNOYU5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNuYW5cbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm51bWJlci5pcy1uYW4nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk51bWJlci5pc05hTjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgZ2xvYmFsSXNGaW5pdGUgPSBnbG9iYWwuaXNGaW5pdGU7XG5cbi8vIGBOdW1iZXIuaXNGaW5pdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNmaW5pdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1udW1iZXItaXNmaW5pdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBnbG9iYWxJc0Zpbml0ZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG51bWJlcklzRmluaXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1pcy1maW5pdGUnKTtcblxuLy8gYE51bWJlci5pc0Zpbml0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci5pc2Zpbml0ZVxuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUgfSwgeyBpc0Zpbml0ZTogbnVtYmVySXNGaW5pdGUgfSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5udW1iZXIuaXMtZmluaXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5OdW1iZXIuaXNGaW5pdGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5zb21lO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zb21lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG59O1xuXG5pZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtKSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBrZXksIGRlc2NyaXB0b3I7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywga2V5ID0ga2V5c1tpbmRleCsrXSk7XG4gICAgICBpZiAoZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKS5mO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzICE9PSBkZWZpbmVQcm9wZXJ0aWVzLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0aWVzOiBkZWZpbmVQcm9wZXJ0aWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKFQsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQsIEQpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLnNoYW0pIGRlZmluZVByb3BlcnRpZXMuc2hhbSA9IHRydWU7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCIpOyIsICJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanNcIjtcbmltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyICRwYXJzZUZsb2F0ID0gZ2xvYmFsLnBhcnNlRmxvYXQ7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBJVEVSQVRPUiA9IFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRk9SQ0VEID0gMSAvICRwYXJzZUZsb2F0KHdoaXRlc3BhY2VzICsgJy0wJykgIT09IC1JbmZpbml0eVxuICAvLyBNUyBFZGdlIDE4LSBicm9rZW4gd2l0aCBib3hlZCBzeW1ib2xzXG4gIHx8IChJVEVSQVRPUiAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyAkcGFyc2VGbG9hdChPYmplY3QoSVRFUkFUT1IpKTsgfSkpO1xuXG4vLyBgcGFyc2VGbG9hdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlZmxvYXQtc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyaW5nKSB7XG4gIHZhciB0cmltbWVkU3RyaW5nID0gdHJpbSh0b1N0cmluZyhzdHJpbmcpKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHRyaW1tZWRTdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIGNoYXJBdCh0cmltbWVkU3RyaW5nLCAwKSA9PT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWZsb2F0Jyk7XG5cbi8vIGBwYXJzZUZsb2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VmbG9hdC1zdHJpbmdcbiQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogcGFyc2VGbG9hdCAhPT0gJHBhcnNlRmxvYXQgfSwge1xuICBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wYXJzZS1mbG9hdCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGgucGFyc2VGbG9hdDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKS5mO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgeyB0b3BNb3N0IH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIGNvbXBvbmVudHNcbiAqL1xuXG4vKipcbiAqIERldGVybWluZSB2YWx1ZXMgdG8gdXNlIGZvciAoc3ViKW9wdGlvbnMgb2YgJ2Nob3NlbicuXG4gKlxuICogVGhpcyBvcHRpb24gaXMgZWl0aGVyIGEgYm9vbGVhbiBvciBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBleGFtaW5lZCBmdXJ0aGVyLlxuICogVGhlIHJlbGV2YW50IHN0cnVjdHVyZXMgYXJlOlxuICpcbiAqIC0gY2hvc2VuOiA8Ym9vbGVhbiB2YWx1ZT5cbiAqIC0gY2hvc2VuOiB7IHN1Yk9wdGlvbjogPGJvb2xlYW4gb3IgZnVuY3Rpb24+IH1cbiAqXG4gKiBXaGVyZSBzdWJPcHRpb24gaXMgJ25vZGUnLCAnZWRnZScgb3IgJ2xhYmVsJy5cbiAqXG4gKiBUaGUgaW50ZW50aW9uIG9mIHRoaXMgbWV0aG9kIGFwcGVhcnMgdG8gYmUgdG8gc2V0IGEgc3BlY2lmaWMgcHJpb3JpdHkgdG8gdGhlIG9wdGlvbnM7XG4gKiBTaW5jZSBtb3N0IHByb3BlcnRpZXMgYXJlIGVpdGhlciBicmlkZ2VkIG9yIG1lcmdlZCBpbnRvIHRoZSBsb2NhbCBvcHRpb25zIG9iamVjdHMsIHRoZXJlXG4gKiBpcyBub3QgbXVjaCBwb2ludCBpbiBoYW5kbGluZyB0aGVtIHNlcGFyYXRlbHkuXG4gKiBUT0RPOiBleGFtaW5lIGlmICdtb3N0JyBpbiBwcmV2aW91cyBzZW50ZW5jZSBjYW4gYmUgcmVwbGFjZWQgd2l0aCAnYWxsJy4gSW4gdGhhdCBjYXNlLCB3ZVxuICogICAgICAgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHJpZCBvZiB0aGlzIG1ldGhvZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gIHN1Yk9wdGlvbiAgb3B0aW9uIHdpdGhpbiBvYmplY3QgJ2Nob3NlbicgdG8gY29uc2lkZXI7IGVpdGhlciAnbm9kZScsICdlZGdlJyBvciAnbGFiZWwnXG4gKiBAcGFyYW0ge29iamVjdH0gIHBpbGUgICAgICAgYXJyYXkgb2Ygb3B0aW9ucyBvYmplY3RzIHRvIGNvbnNpZGVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbiB8IEZ1bmN0aW9ufSAgdmFsdWUgZm9yIHBhc3NlZCBzdWJPcHRpb24gb2YgJ2Nob3NlbicgdG8gdXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaG9vc2lmeShzdWJPcHRpb24sIHBpbGUpIHtcbiAgLy8gYWxsb3dlZCB2YWx1ZXMgZm9yIHN1Yk9wdGlvblxuICBjb25zdCBhbGxvd2VkID0gW1wibm9kZVwiLCBcImVkZ2VcIiwgXCJsYWJlbFwiXTtcbiAgbGV0IHZhbHVlID0gdHJ1ZTtcblxuICBjb25zdCBjaG9zZW4gPSB0b3BNb3N0KHBpbGUsIFwiY2hvc2VuXCIpO1xuICBpZiAodHlwZW9mIGNob3NlbiA9PT0gXCJib29sZWFuXCIpIHtcbiAgICB2YWx1ZSA9IGNob3NlbjtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2hvc2VuID09PSBcIm9iamVjdFwiKSB7XG4gICAgaWYgKGFsbG93ZWQuaW5kZXhPZihzdWJPcHRpb24pID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImNob29zaWZ5OiBzdWJPcHRpb24gJ1wiICtcbiAgICAgICAgICBzdWJPcHRpb24gK1xuICAgICAgICAgIFwiJyBzaG91bGQgYmUgb25lIG9mIFwiICtcbiAgICAgICAgICBcIidcIiArXG4gICAgICAgICAgYWxsb3dlZC5qb2luKFwiJywgJ1wiKSArXG4gICAgICAgICAgXCInXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hvc2VuRWRnZSA9IHRvcE1vc3QocGlsZSwgW1wiY2hvc2VuXCIsIHN1Yk9wdGlvbl0pO1xuICAgIGlmICh0eXBlb2YgY2hvc2VuRWRnZSA9PT0gXCJib29sZWFuXCIgfHwgdHlwZW9mIGNob3NlbkVkZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdmFsdWUgPSBjaG9zZW5FZGdlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcG9pbnQgZmFsbHMgd2l0aGluIHRoZSBnaXZlbiByZWN0YW5nbGUuXG4gKlxuICogQHBhcmFtIHtyZWN0fSByZWN0XG4gKiBAcGFyYW0ge3BvaW50fSBwb2ludFxuICogQHBhcmFtIHtyb3RhdGlvblBvaW50fSBbcm90YXRpb25Qb2ludF0gaWYgc3BlY2lmaWVkLCB0aGUgcm90YXRpb24gdGhhdCBhcHBsaWVzIHRvIHRoZSByZWN0YW5nbGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gIHRydWUgaWYgcG9pbnQgd2l0aGluIHJlY3RhbmdsZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2ludEluUmVjdChyZWN0LCBwb2ludCwgcm90YXRpb25Qb2ludCkge1xuICBpZiAocmVjdC53aWR0aCA8PSAwIHx8IHJlY3QuaGVpZ2h0IDw9IDApIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIGVhcmx5IG91dFxuICB9XG5cbiAgaWYgKHJvdGF0aW9uUG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFJvdGF0ZSB0aGUgcG9pbnQgdGhlIHNhbWUgYW1vdW50IGFzIHRoZSByZWN0YW5nbGVcbiAgICBjb25zdCB0bXAgPSB7XG4gICAgICB4OiBwb2ludC54IC0gcm90YXRpb25Qb2ludC54LFxuICAgICAgeTogcG9pbnQueSAtIHJvdGF0aW9uUG9pbnQueSxcbiAgICB9O1xuXG4gICAgaWYgKHJvdGF0aW9uUG9pbnQuYW5nbGUgIT09IDApIHtcbiAgICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgY29vcmRpbmF0ZXMgdGhlIHNhbWUsIHlvdSBuZWVkIHRvXG4gICAgICAvLyByb3RhdGUgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uXG4gICAgICBjb25zdCBhbmdsZSA9IC1yb3RhdGlvblBvaW50LmFuZ2xlO1xuXG4gICAgICBjb25zdCB0bXAyID0ge1xuICAgICAgICB4OiBNYXRoLmNvcyhhbmdsZSkgKiB0bXAueCAtIE1hdGguc2luKGFuZ2xlKSAqIHRtcC55LFxuICAgICAgICB5OiBNYXRoLnNpbihhbmdsZSkgKiB0bXAueCArIE1hdGguY29zKGFuZ2xlKSAqIHRtcC55LFxuICAgICAgfTtcbiAgICAgIHBvaW50ID0gdG1wMjtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9pbnQgPSB0bXA7XG4gICAgfVxuXG4gICAgLy8gTm90ZSB0aGF0IGlmIGEgcm90YXRpb24gaXMgc3BlY2lmaWVkLCB0aGUgcmVjdGFuZ2xlIGNvb3JkaW5hdGVzXG4gICAgLy8gYXJlICoqbm90KiB0aGUgZnVsbCBjYW52YXMgY29vcmRpbmF0ZXMuIFRoZXkgYXJlIHJlbGF0aXZlIHRvIHRoZVxuICAgIC8vIHJvdGF0aW9uUG9pbnQuIEhlbmNlLCB0aGUgcG9pbnQgY29vcmRpbmF0ZXMgbmVlZCBub3QgYmUgdHJhbnNsYXRlZFxuICAgIC8vIGJhY2sgaW4gdGhpcyBjYXNlLlxuICB9XG5cbiAgY29uc3QgcmlnaHQgPSByZWN0LnggKyByZWN0LndpZHRoO1xuICBjb25zdCBib3R0b20gPSByZWN0LnkgKyByZWN0LndpZHRoO1xuXG4gIHJldHVybiAoXG4gICAgcmVjdC5sZWZ0IDwgcG9pbnQueCAmJlxuICAgIHJpZ2h0ID4gcG9pbnQueCAmJlxuICAgIHJlY3QudG9wIDwgcG9pbnQueSAmJlxuICAgIGJvdHRvbSA+IHBvaW50LnlcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBnaXZlbiB2YWx1ZSBpcyBhY2NlcHRhYmxlIGFzIGEgbGFiZWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0geyp9IHRleHQgdmFsdWUgdG8gY2hlY2s7IGNhbiBiZSBhbnl0aGluZyBhdCB0aGlzIHBvaW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB2YWxpZCBsYWJlbCB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTGFiZWwodGV4dCkge1xuICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBxdWl0ZSBzdHJpY3Q6IHR5cGVzIHRoYXQgKm1pZ2h0KiBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIGFyZSBkaXNhbGxvd2VkXG4gIHJldHVybiB0eXBlb2YgdGV4dCA9PT0gXCJzdHJpbmdcIiAmJiB0ZXh0ICE9PSBcIlwiO1xufVxuXG4vKipcbiAqIFJldHVybnMgeCwgeSBvZiBzZWxmIHJlZmVyZW5jZSBjaXJjbGUgYmFzZWQgb24gcHJvdmlkZWQgYW5nbGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY3R4XG4gKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpdXNcbiAqIEBwYXJhbSB7VmlzTm9kZX0gbm9kZVxuICogQHJldHVybnMge29iamVjdH0geCBhbmQgeSBjb29yZGluYXRlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZlJlZkNvb3JkaW5hdGVzKGN0eCwgYW5nbGUsIHJhZGl1cywgbm9kZSkge1xuICBsZXQgeCA9IG5vZGUueDtcbiAgbGV0IHkgPSBub2RlLnk7XG5cbiAgaWYgKHR5cGVvZiBub2RlLmRpc3RhbmNlVG9Cb3JkZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIC8vY2FsY3VsYXRpbmcgb3Bwb3NpdGUgYW5kIGFkamFjZW50XG4gICAgLy9kaXN0YW5lVG9Cb3JkZXIgYmVjb21lcyBIeXBvdGVudXNlLlxuICAgIC8vRm9ybXVsYXMgc2luKGEpID0gT3Bwb3NpdGUgLyBIeXBvdGVudXNlIGFuZCBjb3MoYSkgPSBBZGphY2VudCAvIEh5cG90ZW51c2VcbiAgICBjb25zdCB0b0JvcmRlckRpc3QgPSBub2RlLmRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gICAgY29uc3QgeUZyb21Ob2RlQ2VudGVyID0gTWF0aC5zaW4oYW5nbGUpICogdG9Cb3JkZXJEaXN0O1xuICAgIGNvbnN0IHhGcm9tTm9kZUNlbnRlciA9IE1hdGguY29zKGFuZ2xlKSAqIHRvQm9yZGVyRGlzdDtcbiAgICAvL3hGcm9tTm9kZUNlbnRlciBpcyBiYXNpY2FsbHkgeCBhbmQgaWYgeEZyb21Ob2RlQ2VudGVyIGVxdWFscyB0byB0aGUgZGlzdGFuY2UgdG8gYm9yZGVyIHRoZW4gaXQgbWVhbnNcbiAgICAvL3RoYXQgeSBkb2VzIG5vdCBuZWVkIGNhbGN1bGF0aW9uIGJlY2F1c2UgaXQgaXMgZXF1YWwgbm9kZS5oZWlnaHQgLyAyIG9yIG5vZGUueVxuICAgIC8vc2FtZSB0aGluZyB3aXRoIHlGcm9tTm9kZUNlbnRlciBhbmQgaWYgeUZyb21Ob2RlQ2VudGVyIGVxdWFscyB0byB0aGUgZGlzdGFuY2UgdG8gYm9yZGVyIHRoZW4gaXQgbWVhbnNcbiAgICAvL3RoYXQgeCBpcyBlcXVhbCBub2RlLndpZHRoIC8gMiBvciBub2RlLnhcbiAgICBpZiAoeEZyb21Ob2RlQ2VudGVyID09PSB0b0JvcmRlckRpc3QpIHtcbiAgICAgIHggKz0gdG9Cb3JkZXJEaXN0O1xuICAgICAgeSA9IG5vZGUueTtcbiAgICB9IGVsc2UgaWYgKHlGcm9tTm9kZUNlbnRlciA9PT0gdG9Cb3JkZXJEaXN0KSB7XG4gICAgICB4ID0gbm9kZS54O1xuICAgICAgeSAtPSB0b0JvcmRlckRpc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggKz0geEZyb21Ob2RlQ2VudGVyO1xuICAgICAgeSAtPSB5RnJvbU5vZGVDZW50ZXI7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUuc2hhcGUud2lkdGggPiBub2RlLnNoYXBlLmhlaWdodCkge1xuICAgIHggPSBub2RlLnggKyBub2RlLnNoYXBlLndpZHRoICogMC41O1xuICAgIHkgPSBub2RlLnkgLSByYWRpdXM7XG4gIH0gZWxzZSB7XG4gICAgeCA9IG5vZGUueCArIHJhZGl1cztcbiAgICB5ID0gbm9kZS55IC0gbm9kZS5zaGFwZS5oZWlnaHQgKiAwLjU7XG4gIH1cblxuICByZXR1cm4geyB4LCB5IH07XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykudmFsdWVzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudmFsdWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgfHwgaGFzT3duKERPTUl0ZXJhYmxlcywgY2xhc3NvZihpdCkpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXNcIik7IiwgIi8qKlxuICogQ2FsbGJhY2sgdG8gZGV0ZXJtaW5lIHRleHQgZGltZW5zaW9ucywgdXNpbmcgdGhlIHBhcmVudCBsYWJlbCBzZXR0aW5ncy5cbiAqXG4gKiBAY2FsbGJhY2sgTWVhc3VyZVRleHRcbiAqIEBwYXJhbSB7dGV4dH0gdGV4dFxuICogQHBhcmFtIHt0ZXh0fSBtb2RcbiAqIEByZXR1cm5zIHtvYmplY3R9IHsgd2lkdGgsIHZhbHVlc30gd2lkdGggaW4gcGl4ZWxzIGFuZCBmb250IGF0dHJpYnV0ZXNcbiAqL1xuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgTGFiZWwgd2hpY2ggY29sbGVjdHMgcmVzdWx0cyBvZiBzcGxpdHRpbmcgbGFiZWxzIGludG8gbGluZXMgYW5kIGJsb2Nrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBMYWJlbEFjY3VtdWxhdG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7TWVhc3VyZVRleHR9IG1lYXN1cmVUZXh0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZWFzdXJlVGV4dCkge1xuICAgIHRoaXMubWVhc3VyZVRleHQgPSBtZWFzdXJlVGV4dDtcbiAgICB0aGlzLmN1cnJlbnQgPSAwO1xuICAgIHRoaXMud2lkdGggPSAwO1xuICAgIHRoaXMuaGVpZ2h0ID0gMDtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kIGdpdmVuIHRleHQgdG8gdGhlIGdpdmVuIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSAgbCAgICBpbmRleCBvZiBsaW5lIHRvIGFkZCB0b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gIHRleHQgc3RyaW5nIHRvIGFwcGVuZCB0byBsaW5lXG4gICAqIEBwYXJhbSB7J2JvbGQnfCdpdGFsJ3wnYm9sZGl0YWwnfCdtb25vJ3wnbm9ybWFsJ30gW21vZD0nbm9ybWFsJ11cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9hZGQobCwgdGV4dCwgbW9kID0gXCJub3JtYWxcIikge1xuICAgIGlmICh0aGlzLmxpbmVzW2xdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubGluZXNbbF0gPSB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGJsb2NrczogW10sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFdlIHN0aWxsIG5lZWQgdG8gc2V0IGEgYmxvY2sgZm9yIHVuZGVmaW5lZCBhbmQgZW1wdHkgdGV4dHMsIGhlbmNlIHJldHVybiBhdCB0aGlzIHBvaW50XG4gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYgd2UncmUgYXQgdGhlXG4gICAgLy8gc3RhcnQgb2YgYW4gZW1wdHkgbGluZSBvciBub3QuXG4gICAgLy8gVG8gY29tcGVuc2F0ZSwgZW1wdHkgYmxvY2tzIGFyZSByZW1vdmVkIGluIGBmaW5hbGl6ZSgpYC5cbiAgICAvL1xuICAgIC8vIEVtcHR5IHN0cmluZ3Mgc2hvdWxkIHN0aWxsIGhhdmUgYSBoZWlnaHRcbiAgICBsZXQgdG1wVGV4dCA9IHRleHQ7XG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCB8fCB0ZXh0ID09PSBcIlwiKSB0bXBUZXh0ID0gXCIgXCI7XG5cbiAgICAvLyBEZXRlcm1pbmUgd2lkdGggYW5kIGdldCB0aGUgZm9udCBwcm9wZXJ0aWVzXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tZWFzdXJlVGV4dCh0bXBUZXh0LCBtb2QpO1xuICAgIGNvbnN0IGJsb2NrID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzdWx0LnZhbHVlcyk7XG4gICAgYmxvY2sudGV4dCA9IHRleHQ7XG4gICAgYmxvY2sud2lkdGggPSByZXN1bHQud2lkdGg7XG4gICAgYmxvY2subW9kID0gbW9kO1xuXG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCB8fCB0ZXh0ID09PSBcIlwiKSB7XG4gICAgICBibG9jay53aWR0aCA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy5saW5lc1tsXS5ibG9ja3MucHVzaChibG9jayk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGxpbmUgd2lkdGguIFdlIG5lZWQgdGhpcyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBzdHJpbmcgZ29lcyBvdmVyIG1heCB3aWR0aFxuICAgIHRoaXMubGluZXNbbF0ud2lkdGggKz0gYmxvY2sud2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2lkdGggaW4gcGl4ZWxzIG9mIHRoZSBjdXJyZW50IGxpbmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBjdXJXaWR0aCgpIHtcbiAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1t0aGlzLmN1cnJlbnRdO1xuICAgIGlmIChsaW5lID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuXG4gICAgcmV0dXJuIGxpbmUud2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRleHQgaW4gYmxvY2sgdG8gY3VycmVudCBsaW5lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7J2JvbGQnfCdpdGFsJ3wnYm9sZGl0YWwnfCdtb25vJ3wnbm9ybWFsJ30gW21vZD0nbm9ybWFsJ11cbiAgICovXG4gIGFwcGVuZCh0ZXh0LCBtb2QgPSBcIm5vcm1hbFwiKSB7XG4gICAgdGhpcy5fYWRkKHRoaXMuY3VycmVudCwgdGV4dCwgbW9kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGV4dCBpbiBibG9jayB0byBjdXJyZW50IGxpbmUgYW5kIHN0YXJ0IGEgbmV3IGxpbmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHBhcmFtIHsnYm9sZCd8J2l0YWwnfCdib2xkaXRhbCd8J21vbm8nfCdub3JtYWwnfSBbbW9kPSdub3JtYWwnXVxuICAgKi9cbiAgbmV3TGluZSh0ZXh0LCBtb2QgPSBcIm5vcm1hbFwiKSB7XG4gICAgdGhpcy5fYWRkKHRoaXMuY3VycmVudCwgdGV4dCwgbW9kKTtcbiAgICB0aGlzLmN1cnJlbnQrKztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgYW5kIHNldCB0aGUgaGVpZ2h0cyBvZiBhbGwgdGhlIGxpbmVzIGN1cnJlbnRseSBjb250YWluZWQgaW4gdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBOb3RlIHRoYXQgd2lkdGggaGFzIGFscmVhZHkgYmVlbiBzZXQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZXRlcm1pbmVMaW5lSGVpZ2h0cygpIHtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMubGluZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmxpbmVzW2tdO1xuXG4gICAgICAvLyBMb29raW5nIGZvciBtYXggaGVpZ2h0IG9mIGJsb2NrcyBpbiBsaW5lXG4gICAgICBsZXQgaGVpZ2h0ID0gMDtcblxuICAgICAgaWYgKGxpbmUuYmxvY2tzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gQ2FuIGhhcHBlbiBpZiB0ZXh0IGNvbnRhaW5zIGUuZy4gJ1xcbiAnXG4gICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZS5ibG9ja3MubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgICBjb25zdCBibG9jayA9IGxpbmUuYmxvY2tzW2xdO1xuXG4gICAgICAgICAgaWYgKGhlaWdodCA8IGJsb2NrLmhlaWdodCkge1xuICAgICAgICAgICAgaGVpZ2h0ID0gYmxvY2suaGVpZ2h0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaW5lLmhlaWdodCA9IGhlaWdodDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBmdWxsIHNpemUgb2YgdGhlIGxhYmVsIHRleHQsIGFzIGRldGVybWluZWQgYnkgY3VycmVudCBsaW5lcyBhbmQgYmxvY2tzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZXRlcm1pbmVMYWJlbFNpemUoKSB7XG4gICAgbGV0IHdpZHRoID0gMDtcbiAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRoaXMubGluZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmxpbmVzW2tdO1xuXG4gICAgICBpZiAobGluZS53aWR0aCA+IHdpZHRoKSB7XG4gICAgICAgIHdpZHRoID0gbGluZS53aWR0aDtcbiAgICAgIH1cbiAgICAgIGhlaWdodCArPSBsaW5lLmhlaWdodDtcbiAgICB9XG5cbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBlbXB0eSBibG9ja3MgYW5kIGVtcHR5IGxpbmVzIHdlIGRvbid0IG5lZWRcbiAgICpcbiAgICogVGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIHdpZHRoL2hlaWdodCBkZXRlcm1pbmF0aW9uLFxuICAgKiBzbyB0aGF0IHRoZXNlIGFyZSBzZXQgcHJvcGVybHkgZm9yIHByb2Nlc3NpbmcgaGVyZS5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5PExpbmU+fSBMaW5lcyB3aXRoIGVtcHR5IGJsb2NrcyAoYW5kIHNvbWUgZW1wdHkgbGluZXMpIHJlbW92ZWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlbW92ZUVtcHR5QmxvY2tzKCkge1xuICAgIGNvbnN0IHRtcExpbmVzID0gW107XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaysrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1trXTtcblxuICAgICAgLy8gTm90ZTogYW4gZW1wdHkgbGluZSBpbiBiZXR3ZWVuIHRleHQgaGFzIHdpZHRoIHplcm8gYnV0IGlzIHN0aWxsIHJlbGV2YW50IHRvIGxheW91dC5cbiAgICAgIC8vIFNvIHdlIGNhbid0IHVzZSB3aWR0aCBmb3IgdGVzdGluZyBlbXB0eSBsaW5lIGhlcmVcbiAgICAgIGlmIChsaW5lLmJsb2Nrcy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAvLyBEaXNjYXJkIGZpbmFsIGVtcHR5IGxpbmUgYWx3YXlzXG4gICAgICBpZiAoayA9PT0gdGhpcy5saW5lcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGlmIChsaW5lLndpZHRoID09PSAwKSBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG1wTGluZSA9IHt9O1xuICAgICAgT2JqZWN0LmFzc2lnbih0bXBMaW5lLCBsaW5lKTtcbiAgICAgIHRtcExpbmUuYmxvY2tzID0gW107XG5cbiAgICAgIGxldCBmaXJzdEVtcHR5QmxvY2s7XG4gICAgICBjb25zdCB0bXBCbG9ja3MgPSBbXTtcbiAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZS5ibG9ja3MubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgY29uc3QgYmxvY2sgPSBsaW5lLmJsb2Nrc1tsXTtcbiAgICAgICAgaWYgKGJsb2NrLndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgdG1wQmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmaXJzdEVtcHR5QmxvY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlyc3RFbXB0eUJsb2NrID0gYmxvY2s7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZXJlIGlzICpzb21lKiB0ZXh0IHByZXNlbnRcbiAgICAgIGlmICh0bXBCbG9ja3MubGVuZ3RoID09PSAwICYmIGZpcnN0RW1wdHlCbG9jayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRtcEJsb2Nrcy5wdXNoKGZpcnN0RW1wdHlCbG9jayk7XG4gICAgICB9XG5cbiAgICAgIHRtcExpbmUuYmxvY2tzID0gdG1wQmxvY2tzO1xuXG4gICAgICB0bXBMaW5lcy5wdXNoKHRtcExpbmUpO1xuICAgIH1cblxuICAgIHJldHVybiB0bXBMaW5lcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHNpemVzIGZvciBhbGwgbGluZXMgYW5kIHRoZSB3aG9sZSB0aGluZy5cbiAgICpcbiAgICogQHJldHVybnMge3t3aWR0aDogKG51bWJlcnwqKSwgaGVpZ2h0OiAobnVtYmVyfCopLCBsaW5lczogQXJyYXl9fVxuICAgKi9cbiAgZmluYWxpemUoKSB7XG4gICAgLy9jb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLmxpbmVzLCBudWxsLCAyKSk7XG5cbiAgICB0aGlzLmRldGVybWluZUxpbmVIZWlnaHRzKCk7XG4gICAgdGhpcy5kZXRlcm1pbmVMYWJlbFNpemUoKTtcbiAgICBjb25zdCB0bXBMaW5lcyA9IHRoaXMucmVtb3ZlRW1wdHlCbG9ja3MoKTtcblxuICAgIC8vIFJldHVybiBhIHNpbXBsZSBoYXNoIG9iamVjdCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogdGhpcy53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXG4gICAgICBsaW5lczogdG1wTGluZXMsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYWJlbEFjY3VtdWxhdG9yO1xuIiwgImltcG9ydCBMYWJlbEFjY3VtdWxhdG9yIGZyb20gXCIuL0xhYmVsQWNjdW11bGF0b3JcIjtcbmltcG9ydCB7IGlzVmFsaWRMYWJlbCB9IGZyb20gXCIuL0NvbXBvbmVudFV0aWxcIjtcblxuLy8gSGFzaCBvZiBwcmVwYXJlZCByZWdleHAncyBmb3IgdGFnc1xuY29uc3QgdGFnUGF0dGVybiA9IHtcbiAgLy8gSFRNTFxuICBcIjxiPlwiOiAvPGI+LyxcbiAgXCI8aT5cIjogLzxpPi8sXG4gIFwiPGNvZGU+XCI6IC88Y29kZT4vLFxuICBcIjwvYj5cIjogLzxcXC9iPi8sXG4gIFwiPC9pPlwiOiAvPFxcL2k+LyxcbiAgXCI8L2NvZGU+XCI6IC88XFwvY29kZT4vLFxuICAvLyBNYXJrZG93blxuICBcIipcIjogL1xcKi8sIC8vIGJvbGRcbiAgXzogL18vLCAvLyBpdGFsXG4gIFwiYFwiOiAvYC8sIC8vIG1vbm9cbiAgYWZ0ZXJCb2xkOiAvW14qXS8sXG4gIGFmdGVySXRhbDogL1teX10vLFxuICBhZnRlck1vbm86IC9bXmBdLyxcbn07XG5cbi8qKlxuICogSW50ZXJuYWwgaGVscGVyIGNsYXNzIGZvciBwYXJzaW5nIHRoZSBtYXJrdXAgdGFncyBmb3IgSFRNTCBhbmQgTWFya2Rvd24uXG4gKlxuICogTk9URTogU2VxdWVuY2VzIG9mIHRhYnMgYW5kIHNwYWNlcyBhcmUgcmVkdWNlZCB0byBzaW5nbGUgc3BhY2UuXG4gKiAgICAgICBTY2FuIHVzYWdlIG9mIGB0aGlzLnNwYWNpbmdgIHdpdGhpbiBtZXRob2RcbiAqL1xuY2xhc3MgTWFya3VwQWNjdW11bGF0b3Ige1xuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0ICB0ZXh0IHRvIHBhcnNlIGZvciBtYXJrdXBcbiAgICovXG4gIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuYm9sZCA9IGZhbHNlO1xuICAgIHRoaXMuaXRhbCA9IGZhbHNlO1xuICAgIHRoaXMubW9ubyA9IGZhbHNlO1xuICAgIHRoaXMuc3BhY2luZyA9IGZhbHNlO1xuICAgIHRoaXMucG9zaXRpb24gPSAwO1xuICAgIHRoaXMuYnVmZmVyID0gXCJcIjtcbiAgICB0aGlzLm1vZFN0YWNrID0gW107XG5cbiAgICB0aGlzLmJsb2NrcyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbW9kIGxhYmVsIGN1cnJlbnRseSBvbiB0aGUgdG9wIG9mIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAgbGFiZWwgb2YgdG9wbW9zdCBtb2RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG1vZCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RTdGFjay5sZW5ndGggPT09IDAgPyBcIm5vcm1hbFwiIDogdGhpcy5tb2RTdGFja1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1vZCBsYWJlbCBjdXJyZW50bHkgYWN0aXZlXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9ICBsYWJlbCBvZiBhY3RpdmUgbW9kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtb2ROYW1lKCkge1xuICAgIGlmICh0aGlzLm1vZFN0YWNrLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwibm9ybWFsXCI7XG4gICAgZWxzZSBpZiAodGhpcy5tb2RTdGFja1swXSA9PT0gXCJtb25vXCIpIHJldHVybiBcIm1vbm9cIjtcbiAgICBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmJvbGQgJiYgdGhpcy5pdGFsKSB7XG4gICAgICAgIHJldHVybiBcImJvbGRpdGFsXCI7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYm9sZCkge1xuICAgICAgICByZXR1cm4gXCJib2xkXCI7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXRhbCkge1xuICAgICAgICByZXR1cm4gXCJpdGFsXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0QmxvY2soKSB7XG4gICAgaWYgKHRoaXMuc3BhY2luZykge1xuICAgICAgdGhpcy5hZGQoXCIgXCIpO1xuICAgICAgdGhpcy5zcGFjaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmJsb2Nrcy5wdXNoKHsgdGV4dDogdGhpcy5idWZmZXIsIG1vZDogdGhpcy5tb2ROYW1lKCkgfSk7XG4gICAgICB0aGlzLmJ1ZmZlciA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCB0ZXh0IHRvIGJ1ZmZlclxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAgdGV4dCB0byBhZGRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkZCh0ZXh0KSB7XG4gICAgaWYgKHRleHQgPT09IFwiIFwiKSB7XG4gICAgICB0aGlzLnNwYWNpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5zcGFjaW5nKSB7XG4gICAgICB0aGlzLmJ1ZmZlciArPSBcIiBcIjtcbiAgICAgIHRoaXMuc3BhY2luZyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGV4dCAhPSBcIiBcIikge1xuICAgICAgdGhpcy5idWZmZXIgKz0gdGV4dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHBhcnNpbmcgb2Ygd2hpdGVzcGFjZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2ggIHRoZSBjaGFyYWN0ZXIgdG8gY2hlY2tcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGNoYXJhY3RlciB3YXMgcHJvY2Vzc2VkIGFzIHdoaXRlc3BhY2UsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcGFyc2VXUyhjaCkge1xuICAgIGlmICgvWyBcXHRdLy50ZXN0KGNoKSkge1xuICAgICAgaWYgKCF0aGlzLm1vbm8pIHtcbiAgICAgICAgdGhpcy5zcGFjaW5nID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkKGNoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAgbGFiZWwgZm9yIGJsb2NrIHR5cGUgdG8gc2V0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXRUYWcodGFnTmFtZSkge1xuICAgIHRoaXMuZW1pdEJsb2NrKCk7XG4gICAgdGhpc1t0YWdOYW1lXSA9IHRydWU7XG4gICAgdGhpcy5tb2RTdGFjay51bnNoaWZ0KHRhZ05hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lICBsYWJlbCBmb3IgYmxvY2sgdHlwZSB0byB1bnNldFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdW5zZXRUYWcodGFnTmFtZSkge1xuICAgIHRoaXMuZW1pdEJsb2NrKCk7XG4gICAgdGhpc1t0YWdOYW1lXSA9IGZhbHNlO1xuICAgIHRoaXMubW9kU3RhY2suc2hpZnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBsYWJlbCBmb3IgYmxvY2sgdHlwZSB3ZSBhcmUgY3VycmVudGx5IHByb2Nlc3NpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB0YWcgc3RyaW5nIHRvIG1hdGNoIGluIHRleHRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHRhZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHBhcnNlU3RhcnRUYWcodGFnTmFtZSwgdGFnKSB7XG4gICAgLy8gTm90ZTogaWYgJ21vbm8nIHBhc3NlZCBhcyB0YWdOYW1lLCB0aGVyZSBpcyBhIGRvdWJsZSBjaGVjayBoZXJlLiBUaGlzIGlzIE9LXG4gICAgaWYgKCF0aGlzLm1vbm8gJiYgIXRoaXNbdGFnTmFtZV0gJiYgdGhpcy5tYXRjaCh0YWcpKSB7XG4gICAgICB0aGlzLnNldFRhZyh0YWdOYW1lKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHRhZ1xuICAgKiBAcGFyYW0ge251bWJlcn0gW2FkdmFuY2U9dHJ1ZV0gaWYgc2V0LCBhZHZhbmNlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGV4dFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBtYXRjaCBhdCBnaXZlbiBwb3NpdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYXRjaCh0YWcsIGFkdmFuY2UgPSB0cnVlKSB7XG4gICAgY29uc3QgW3JlZ0V4cCwgbGVuZ3RoXSA9IHRoaXMucHJlcGFyZVJlZ0V4cCh0YWcpO1xuICAgIGNvbnN0IG1hdGNoZWQgPSByZWdFeHAudGVzdCh0aGlzLnRleHQuc3Vic3RyKHRoaXMucG9zaXRpb24sIGxlbmd0aCkpO1xuXG4gICAgaWYgKG1hdGNoZWQgJiYgYWR2YW5jZSkge1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIGxhYmVsIGZvciBibG9jayB0eXBlIHdlIGFyZSBjdXJyZW50bHkgcHJvY2Vzc2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IHRhZyBzdHJpbmcgdG8gbWF0Y2ggaW4gdGV4dFxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gW25leHRUYWddIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBmb3IgY2hhcmFjdGVycyAqZm9sbG93aW5nKiB0aGUgY3VycmVudCB0YWdcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHRhZyB3YXMgcHJvY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHBhcnNlRW5kVGFnKHRhZ05hbWUsIHRhZywgbmV4dFRhZykge1xuICAgIGxldCBjaGVja1RhZyA9IHRoaXMubW9kKCkgPT09IHRhZ05hbWU7XG4gICAgaWYgKHRhZ05hbWUgPT09IFwibW9ub1wiKSB7XG4gICAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciAnbW9ubydcbiAgICAgIGNoZWNrVGFnID0gY2hlY2tUYWcgJiYgdGhpcy5tb25vO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGVja1RhZyA9IGNoZWNrVGFnICYmICF0aGlzLm1vbm87XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrVGFnICYmIHRoaXMubWF0Y2godGFnKSkge1xuICAgICAgaWYgKG5leHRUYWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBQdXJwb3NlIG9mIHRoZSBmb2xsb3dpbmcgbWF0Y2ggaXMgdG8gcHJldmVudCBhIGRpcmVjdCB1bnNldC9zZXQgb2YgYSBnaXZlbiB0YWdcbiAgICAgICAgLy8gRS5nLiAnKmJvbGQgKipzdGlsbCBib2xkKicgPT4gJypib2xkIHN0aWxsIGJvbGQqJ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5wb3NpdGlvbiA9PT0gdGhpcy50ZXh0Lmxlbmd0aCAtIDEgfHxcbiAgICAgICAgICB0aGlzLm1hdGNoKG5leHRUYWcsIGZhbHNlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVuc2V0VGFnKHRhZ05hbWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVuc2V0VGFnKHRhZ05hbWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSB0YWcgIHN0cmluZyB0byBtYXRjaCBpbiB0ZXh0XG4gICAqIEBwYXJhbSB7dmFsdWV9IHZhbHVlICBzdHJpbmcgdG8gcmVwbGFjZSB0YWcgd2l0aCwgaWYgZm91bmQgYXQgY3VycmVudCBwb3NpdGlvblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgdGFnIHdhcyBwcm9jZXNzZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcmVwbGFjZSh0YWcsIHZhbHVlKSB7XG4gICAgaWYgKHRoaXMubWF0Y2godGFnKSkge1xuICAgICAgdGhpcy5hZGQodmFsdWUpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGggLSAxO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgdGhlIHRhZyBpZiBpdCBpc24ndCBhbHJlYWR5IG9uZS5cbiAgICpcbiAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBhcnJheSBgW1JlZ0V4cCwgbnVtYmVyXWAsIHdpdGggZXhhY3RseSB0d28gdmFsdWUsIHdoZXJlOlxuICAgKiAgLSBSZWdFeHAgaXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB1c2VcbiAgICogIC0gbnVtYmVyIGlzIHRoZSBsZW50aCBvZiB0aGUgaW5wdXQgc3RyaW5nIHRvIG1hdGNoXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gdGFnICBzdHJpbmcgdG8gbWF0Y2ggaW4gdGV4dFxuICAgKiBAcmV0dXJucyB7QXJyYXl9ICByZWd1bGFyIGV4cHJlc3Npb24gdG8gdXNlIGFuZCBsZW5ndGggb2YgaW5wdXQgc3RyaW5nIHRvIG1hdGNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcmVwYXJlUmVnRXhwKHRhZykge1xuICAgIGxldCBsZW5ndGg7XG4gICAgbGV0IHJlZ0V4cDtcbiAgICBpZiAodGFnIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICByZWdFeHAgPSB0YWc7XG4gICAgICBsZW5ndGggPSAxOyAvLyBBU1NVTVBUSU9OOiByZWdleHAgb25seSB0ZXN0cyBvbmUgY2hhcmFjdGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVzZSBwcmVwYXJlZCByZWdleHAgaWYgcHJlc2VudFxuICAgICAgY29uc3QgcHJlcGFyZWQgPSB0YWdQYXR0ZXJuW3RhZ107XG4gICAgICBpZiAocHJlcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZWdFeHAgPSBwcmVwYXJlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAodGFnKTtcbiAgICAgIH1cblxuICAgICAgbGVuZ3RoID0gdGFnLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gW3JlZ0V4cCwgbGVuZ3RoXTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgTGFiZWwgd2hpY2ggZXhwbG9kZXMgdGhlIGxhYmVsIHRleHQgaW50byBsaW5lcyBhbmQgYmxvY2tzIHdpdGhpbiBsaW5lc1xuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIExhYmVsU3BsaXR0ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCBDYW52YXMgcmVuZGVyaW5nIGNvbnRleHRcbiAgICogQHBhcmFtIHtMYWJlbH0gcGFyZW50IHJlZmVyZW5jZSB0byB0aGUgTGFiZWwgaW5zdGFuY2UgdXNpbmcgY3VycmVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKGN0eCwgcGFyZW50LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICB0aGlzLmN0eCA9IGN0eDtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgdGhpcy5ob3ZlciA9IGhvdmVyO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gZGV0ZXJtaW5lIHRleHQgd2lkdGg7IHBhc3NlZCB0byBMYWJlbEFjY3VtdWxhdG9yIGluc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRleHQgc3RyaW5nIHRvIGRldGVybWluZSB3aWR0aCBvZlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbW9kICBmb250IHR5cGUgdG8gdXNlIGZvciB0aGlzIHRleHRcbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSB7IHdpZHRoLCB2YWx1ZXN9IHdpZHRoIGluIHBpeGVscyBhbmQgZm9udCBhdHRyaWJ1dGVzXG4gICAgICovXG4gICAgY29uc3QgdGV4dFdpZHRoID0gKHRleHQsIG1vZCkgPT4ge1xuICAgICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG5cbiAgICAgIC8vIFRPRE86IFRoaXMgY2FuIGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseSB3aXRoIGNhY2hpbmdcbiAgICAgIC8vIFRoaXMgd2lsbCBzZXQgdGhlIGN0eC5mb250IGNvcnJlY3RseSwgZGVwZW5kaW5nIG9uIHNlbGVjdGVkL2hvdmVyIGFuZCBtb2QgLSBzbyB0aGF0IGN0eC5tZWFzdXJlVGV4dCgpIHdpbGwgYmUgYWNjdXJhdGUuXG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnBhcmVudC5nZXRGb3JtYXR0aW5nVmFsdWVzKGN0eCwgc2VsZWN0ZWQsIGhvdmVyLCBtb2QpO1xuXG4gICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgaWYgKHRleHQgIT09IFwiXCIpIHtcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KHRleHQpO1xuICAgICAgICB3aWR0aCA9IG1lYXN1cmUud2lkdGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHdpZHRoLCB2YWx1ZXM6IHZhbHVlcyB9O1xuICAgIH07XG5cbiAgICB0aGlzLmxpbmVzID0gbmV3IExhYmVsQWNjdW11bGF0b3IodGV4dFdpZHRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCBwYXNzZWQgdGV4dCBvZiBhIGxhYmVsIGludG8gbGluZXMgYW5kIGJsb2Nrcy5cbiAgICpcbiAgICogIyBOT1RFXG4gICAqXG4gICAqIFRoZSBoYW5kbGluZyBvZiBzcGFjaW5nIGlzIG9wdGlvbiBkZXBlbmRlbnQ6XG4gICAqXG4gICAqIC0gaWYgYGZvbnQubXVsdGkgOiBmYWxzZWAsIGFsbCBzcGFjZXMgYXJlIHJldGFpbmVkXG4gICAqIC0gaWYgYGZvbnQubXVsdGkgOiB0cnVlYCwgZXZlcnkgc2VxdWVuY2Ugb2Ygc3BhY2VzIGlzIGNvbXByZXNzZWQgdG8gYSBzaW5nbGUgc3BhY2VcbiAgICpcbiAgICogVGhpcyBtaWdodCBub3QgYmUgdGhlIGJlc3Qgd2F5IHRvIGRvIGl0LCBidXQgdGhpcyBpcyBhcyBpdCBoYXMgYmVlbiB3b3JraW5nIHRpbGwgbm93LlxuICAgKiBJbiBvcmRlciBub3QgdG8gYnJlYWsgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSwgZm9yIHRoZSB0aW1lIGJlaW5nIHRoaXMgYmVoYXZpb3VyIHdpbGxcbiAgICogYmUgcmV0YWluZWQgaW4gYW55IGNvZGUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgIHRleHQgdG8gc3BsaXRcbiAgICogQHJldHVybnMge0FycmF5PGxpbmU+fVxuICAgKi9cbiAgcHJvY2Vzcyh0ZXh0KSB7XG4gICAgaWYgKCFpc1ZhbGlkTGFiZWwodGV4dCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpbmVzLmZpbmFsaXplKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZm9udCA9IHRoaXMucGFyZW50LmZvbnRPcHRpb25zO1xuXG4gICAgLy8gTm9ybWFsaXplIHRoZSBlbmQtb2YtbGluZSdzIHRvIGEgc2luZ2xlIHJlcHJlc2VudGF0aW9uIC0gb3JkZXIgaW1wb3J0YW50XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxyXFxuL2csIFwiXFxuXCIpOyAvLyBEb3MgRU9MJ3NcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXHIvZywgXCJcXG5cIik7IC8vIE1hYyBFT0wnc1xuXG4gICAgLy8gTm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQsIHRoZXJlIGNhbiBiZSBubyBcXHIncyBpbiB0aGUgdGV4dC5cbiAgICAvLyBUaGlzIGlzIHVzZWQgbGF0ZXIgb24gc3BsaXRTdHJpbmdJbnRvTGluZXMoKSB0byBzcGxpdCBtdWx0aWZvbnQgdGV4dHMuXG5cbiAgICBjb25zdCBubExpbmVzID0gU3RyaW5nKHRleHQpLnNwbGl0KFwiXFxuXCIpO1xuICAgIGNvbnN0IGxpbmVDb3VudCA9IG5sTGluZXMubGVuZ3RoO1xuXG4gICAgaWYgKGZvbnQubXVsdGkpIHtcbiAgICAgIC8vIE11bHRpLWZvbnQgY2FzZTogc3R5bGluZyB0YWdzIGFjdGl2ZVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lQ291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBibG9ja3MgPSB0aGlzLnNwbGl0QmxvY2tzKG5sTGluZXNbaV0sIGZvbnQubXVsdGkpO1xuICAgICAgICAvLyBQb3N0OiBTZXF1ZW5jZXMgb2YgdGFicyBhbmQgc3BhY2VzIGFyZSByZWR1Y2VkIHRvIHNpbmdsZSBzcGFjZVxuXG4gICAgICAgIGlmIChibG9ja3MgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgaWYgKGJsb2Nrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLmxpbmVzLm5ld0xpbmUoXCJcIik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9udC5tYXhXZHQgPiAwKSB7XG4gICAgICAgICAgLy8gd2lkdGhDb25zdHJhaW50Lm1heGltdW0gZGVmaW5lZFxuICAgICAgICAgIC8vY29uc29sZS5sb2coJ1J1bm5pbmcgd2lkdGhDb25zdHJhaW50IG11bHRpLCBtYXg6ICcgKyB0aGlzLmZvbnRPcHRpb25zLm1heFdkdCk7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBibG9ja3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IGJsb2Nrc1tqXS5tb2Q7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gYmxvY2tzW2pdLnRleHQ7XG4gICAgICAgICAgICB0aGlzLnNwbGl0U3RyaW5nSW50b0xpbmVzKHRleHQsIG1vZCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdpZHRoQ29uc3RyYWludC5tYXhpbXVtIE5PVCBkZWZpbmVkXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBibG9ja3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IGJsb2Nrc1tqXS5tb2Q7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gYmxvY2tzW2pdLnRleHQ7XG4gICAgICAgICAgICB0aGlzLmxpbmVzLmFwcGVuZCh0ZXh0LCBtb2QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGluZXMubmV3TGluZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaW5nbGUtZm9udCBjYXNlXG4gICAgICBpZiAoZm9udC5tYXhXZHQgPiAwKSB7XG4gICAgICAgIC8vIHdpZHRoQ29uc3RyYWludC5tYXhpbXVtIGRlZmluZWRcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1J1bm5pbmcgd2lkdGhDb25zdHJhaW50IG5vcm1hbCwgbWF4OiAnICsgdGhpcy5mb250T3B0aW9ucy5tYXhXZHQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVDb3VudDsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5zcGxpdFN0cmluZ0ludG9MaW5lcyhubExpbmVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gd2lkdGhDb25zdHJhaW50Lm1heGltdW0gTk9UIGRlZmluZWRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lQ291bnQ7IGkrKykge1xuICAgICAgICAgIHRoaXMubGluZXMubmV3TGluZShubExpbmVzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxpbmVzLmZpbmFsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogbm9ybWFsaXplIHRoZSBtYXJrdXAgc3lzdGVtXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbnwnbWQnfCdtYXJrZG93bid8J2h0bWwnfSBtYXJrdXBTeXN0ZW1cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGRlY29kZU1hcmt1cFN5c3RlbShtYXJrdXBTeXN0ZW0pIHtcbiAgICBsZXQgc3lzdGVtID0gXCJub25lXCI7XG4gICAgaWYgKG1hcmt1cFN5c3RlbSA9PT0gXCJtYXJrZG93blwiIHx8IG1hcmt1cFN5c3RlbSA9PT0gXCJtZFwiKSB7XG4gICAgICBzeXN0ZW0gPSBcIm1hcmtkb3duXCI7XG4gICAgfSBlbHNlIGlmIChtYXJrdXBTeXN0ZW0gPT09IHRydWUgfHwgbWFya3VwU3lzdGVtID09PSBcImh0bWxcIikge1xuICAgICAgc3lzdGVtID0gXCJodG1sXCI7XG4gICAgfVxuICAgIHJldHVybiBzeXN0ZW07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgc3BsaXRIdG1sQmxvY2tzKHRleHQpIHtcbiAgICBjb25zdCBzID0gbmV3IE1hcmt1cEFjY3VtdWxhdG9yKHRleHQpO1xuXG4gICAgY29uc3QgcGFyc2VFbnRpdGllcyA9IChjaCkgPT4ge1xuICAgICAgaWYgKC8mLy50ZXN0KGNoKSkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPVxuICAgICAgICAgIHMucmVwbGFjZShzLnRleHQsIFwiJmx0O1wiLCBcIjxcIikgfHwgcy5yZXBsYWNlKHMudGV4dCwgXCImYW1wO1wiLCBcIiZcIik7XG5cbiAgICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgICBzLmFkZChcIiZcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB3aGlsZSAocy5wb3NpdGlvbiA8IHMudGV4dC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNoID0gcy50ZXh0LmNoYXJBdChzLnBvc2l0aW9uKTtcblxuICAgICAgY29uc3QgcGFyc2VkID1cbiAgICAgICAgcy5wYXJzZVdTKGNoKSB8fFxuICAgICAgICAoLzwvLnRlc3QoY2gpICYmXG4gICAgICAgICAgKHMucGFyc2VTdGFydFRhZyhcImJvbGRcIiwgXCI8Yj5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VTdGFydFRhZyhcIml0YWxcIiwgXCI8aT5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VTdGFydFRhZyhcIm1vbm9cIiwgXCI8Y29kZT5cIikgfHxcbiAgICAgICAgICAgIHMucGFyc2VFbmRUYWcoXCJib2xkXCIsIFwiPC9iPlwiKSB8fFxuICAgICAgICAgICAgcy5wYXJzZUVuZFRhZyhcIml0YWxcIiwgXCI8L2k+XCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlRW5kVGFnKFwibW9ub1wiLCBcIjwvY29kZT5cIikpKSB8fFxuICAgICAgICBwYXJzZUVudGl0aWVzKGNoKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgcy5hZGQoY2gpO1xuICAgICAgfVxuICAgICAgcy5wb3NpdGlvbisrO1xuICAgIH1cbiAgICBzLmVtaXRCbG9jaygpO1xuICAgIHJldHVybiBzLmJsb2NrcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBzcGxpdE1hcmtkb3duQmxvY2tzKHRleHQpIHtcbiAgICBjb25zdCBzID0gbmV3IE1hcmt1cEFjY3VtdWxhdG9yKHRleHQpO1xuICAgIGxldCBiZWdpbmFibGUgPSB0cnVlO1xuXG4gICAgY29uc3QgcGFyc2VPdmVycmlkZSA9IChjaCkgPT4ge1xuICAgICAgaWYgKC9cXFxcLy50ZXN0KGNoKSkge1xuICAgICAgICBpZiAocy5wb3NpdGlvbiA8IHRoaXMudGV4dC5sZW5ndGggKyAxKSB7XG4gICAgICAgICAgcy5wb3NpdGlvbisrO1xuICAgICAgICAgIGNoID0gdGhpcy50ZXh0LmNoYXJBdChzLnBvc2l0aW9uKTtcbiAgICAgICAgICBpZiAoLyBcXHQvLnRlc3QoY2gpKSB7XG4gICAgICAgICAgICBzLnNwYWNpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzLmFkZChjaCk7XG4gICAgICAgICAgICBiZWdpbmFibGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICB3aGlsZSAocy5wb3NpdGlvbiA8IHMudGV4dC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNoID0gcy50ZXh0LmNoYXJBdChzLnBvc2l0aW9uKTtcblxuICAgICAgY29uc3QgcGFyc2VkID1cbiAgICAgICAgcy5wYXJzZVdTKGNoKSB8fFxuICAgICAgICBwYXJzZU92ZXJyaWRlKGNoKSB8fFxuICAgICAgICAoKGJlZ2luYWJsZSB8fCBzLnNwYWNpbmcpICYmXG4gICAgICAgICAgKHMucGFyc2VTdGFydFRhZyhcImJvbGRcIiwgXCIqXCIpIHx8XG4gICAgICAgICAgICBzLnBhcnNlU3RhcnRUYWcoXCJpdGFsXCIsIFwiX1wiKSB8fFxuICAgICAgICAgICAgcy5wYXJzZVN0YXJ0VGFnKFwibW9ub1wiLCBcImBcIikpKSB8fFxuICAgICAgICBzLnBhcnNlRW5kVGFnKFwiYm9sZFwiLCBcIipcIiwgXCJhZnRlckJvbGRcIikgfHxcbiAgICAgICAgcy5wYXJzZUVuZFRhZyhcIml0YWxcIiwgXCJfXCIsIFwiYWZ0ZXJJdGFsXCIpIHx8XG4gICAgICAgIHMucGFyc2VFbmRUYWcoXCJtb25vXCIsIFwiYFwiLCBcImFmdGVyTW9ub1wiKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgcy5hZGQoY2gpO1xuICAgICAgICBiZWdpbmFibGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHMucG9zaXRpb24rKztcbiAgICB9XG4gICAgcy5lbWl0QmxvY2soKTtcbiAgICByZXR1cm4gcy5ibG9ja3M7XG4gIH1cblxuICAvKipcbiAgICogRXhwbG9kZXMgYSBwaWVjZSBvZiB0ZXh0IGludG8gc2luZ2xlLWZvbnQgYmxvY2tzIHVzaW5nIGEgZ2l2ZW4gbWFya3VwXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbnwnbWQnfCdtYXJrZG93bid8J2h0bWwnfSBtYXJrdXBTeXN0ZW1cbiAgICogQHJldHVybnMge0FycmF5Ljx7dGV4dDogc3RyaW5nLCBtb2Q6IHN0cmluZ30+fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3BsaXRCbG9ja3ModGV4dCwgbWFya3VwU3lzdGVtKSB7XG4gICAgY29uc3Qgc3lzdGVtID0gdGhpcy5kZWNvZGVNYXJrdXBTeXN0ZW0obWFya3VwU3lzdGVtKTtcbiAgICBpZiAoc3lzdGVtID09PSBcIm5vbmVcIikge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgICAgbW9kOiBcIm5vcm1hbFwiLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9IGVsc2UgaWYgKHN5c3RlbSA9PT0gXCJtYXJrZG93blwiKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcGxpdE1hcmtkb3duQmxvY2tzKHRleHQpO1xuICAgIH0gZWxzZSBpZiAoc3lzdGVtID09PSBcImh0bWxcIikge1xuICAgICAgcmV0dXJuIHRoaXMuc3BsaXRIdG1sQmxvY2tzKHRleHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0ZXh0IGxlbmd0aCBvdmVyIHRoZSBjdXJyZW50IG1heCB3aXRoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvdmVyTWF4V2lkdGgodGV4dCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jdHgubWVhc3VyZVRleHQodGV4dCkud2lkdGg7XG4gICAgcmV0dXJuIHRoaXMubGluZXMuY3VyV2lkdGgoKSArIHdpZHRoID4gdGhpcy5wYXJlbnQuZm9udE9wdGlvbnMubWF4V2R0O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgbG9uZ2VzdCBwYXJ0IG9mIHRoZSBzZW50ZW5jZSB3aGljaCBzdGlsbCBmaXRzIGluIHRoZVxuICAgKiBjdXJyZW50IG1heCB3aWR0aC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgIEFycmF5IG9mIHN0cmluZ3Mgc2lnbmlmeWluZyBhIHRleHQgbGluZXNcbiAgICogQHJldHVybnMge251bWJlcn0gICAgICBpbmRleCBvZiBmaXJzdCBpdGVtIGluIHN0cmluZyBtYWtpbmcgc3RyaW5nIGdvIG92ZXIgbWF4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRMb25nZXN0Rml0KHdvcmRzKSB7XG4gICAgbGV0IHRleHQgPSBcIlwiO1xuICAgIGxldCB3ID0gMDtcblxuICAgIHdoaWxlICh3IDwgd29yZHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwcmUgPSB0ZXh0ID09PSBcIlwiID8gXCJcIiA6IFwiIFwiO1xuICAgICAgY29uc3QgbmV3VGV4dCA9IHRleHQgKyBwcmUgKyB3b3Jkc1t3XTtcblxuICAgICAgaWYgKHRoaXMub3Zlck1heFdpZHRoKG5ld1RleHQpKSBicmVhaztcbiAgICAgIHRleHQgPSBuZXdUZXh0O1xuICAgICAgdysrO1xuICAgIH1cblxuICAgIHJldHVybiB3O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgbG9uZ2VzdCBwYXJ0IG9mIHRoZSBzdHJpbmcgd2hpY2ggc3RpbGwgZml0cyBpbiB0aGVcbiAgICogY3VycmVudCBtYXggd2lkdGguXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIEFycmF5IG9mIHN0cmluZ3Mgc2lnbmlmeWluZyBhIHRleHQgbGluZXNcbiAgICogQHJldHVybnMge251bWJlcn0gaW5kZXggb2YgZmlyc3QgaXRlbSBpbiBzdHJpbmcgbWFraW5nIHN0cmluZyBnbyBvdmVyIG1heFxuICAgKi9cbiAgZ2V0TG9uZ2VzdEZpdFdvcmQod29yZHMpIHtcbiAgICBsZXQgdyA9IDA7XG5cbiAgICB3aGlsZSAodyA8IHdvcmRzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMub3Zlck1heFdpZHRoKHdvcmRzLnNsaWNlKDAsIHcpKSkgYnJlYWs7XG4gICAgICB3Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHc7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgdGhlIHBhc3NlZCB0ZXh0IGludG8gbGluZXMsIGFjY29yZGluZyB0byB3aWR0aCBjb25zdHJhaW50IChpZiBhbnkpLlxuICAgKlxuICAgKiBUaGUgbWV0aG9kIGFzc3VtZXMgdGhhdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgc2luZ2xlIGxpbmUsIGkuZS4gd2l0aG91dCBsaW5lcyBicmVhay5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgcmV0YWlucyBzcGFjZXMsIGlmIHN0aWxsIHByZXNlbnQgKGNhc2UgYGZvbnQubXVsdGk6IGZhbHNlYCkuXG4gICAqIEEgc3BhY2Ugd2hpY2ggZmFsbHMgb24gYW4gaW50ZXJuYWwgbGluZSBicmVhaywgd2lsbCBiZSByZXBsYWNlZCBieSBhIG5ld2xpbmUuXG4gICAqIFRoZXJlIGlzIG5vIHNwZWNpYWwgaGFuZGxpbmcgb2YgdGFiczsgdGhlc2UgZ28gYWxvbmcgd2l0aCB0aGUgZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gW21vZD0nbm9ybWFsJ11cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXBwZW5kTGFzdD1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNwbGl0U3RyaW5nSW50b0xpbmVzKHN0ciwgbW9kID0gXCJub3JtYWxcIiwgYXBwZW5kTGFzdCA9IGZhbHNlKSB7XG4gICAgLy8gU2V0IHRoZSBjYW52YXMgY29udGV4dCBmb250LCBiYXNlZCB1cG9uIHRoZSBjdXJyZW50IHNlbGVjdGVkL2hvdmVyIHN0YXRlXG4gICAgLy8gYW5kIHRoZSBwcm92aWRlZCBtb2QsIHNvIHRoZSB0ZXh0IG1lYXN1cmVtZW50IHBlcmZvcm1lZCBieSBnZXRMb25nZXN0Rml0XG4gICAgLy8gd2lsbCBiZSBhY2N1cmF0ZSAtIGFuZCBub3QganVzdCB1c2UgdGhlIGZvbnQgb2Ygd2hvZXZlciBsYXN0IHVzZWQgdGhlIGNhbnZhcy5cbiAgICB0aGlzLnBhcmVudC5nZXRGb3JtYXR0aW5nVmFsdWVzKHRoaXMuY3R4LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyLCBtb2QpO1xuXG4gICAgLy8gU3RpbGwtcHJlc2VudCBzcGFjZXMgYXJlIHJlbGV2YW50LCByZXRhaW4gdGhlbVxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9eKCArKS9nLCBcIiQxXFxyXCIpO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8oW15cXHJdW14gXSopKCArKS9nLCBcIiQxXFxyJDJcXHJcIik7XG4gICAgbGV0IHdvcmRzID0gc3RyLnNwbGl0KFwiXFxyXCIpO1xuXG4gICAgd2hpbGUgKHdvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCB3ID0gdGhpcy5nZXRMb25nZXN0Rml0KHdvcmRzKTtcblxuICAgICAgaWYgKHcgPT09IDApIHtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiB0aGUgZmlyc3Qgd29yZCBpcyBhbHJlYWR5IGxhcmdlciB0aGFuIHRoZSBtYXggd2lkdGguXG4gICAgICAgIGNvbnN0IHdvcmQgPSB3b3Jkc1swXTtcblxuICAgICAgICAvLyBCcmVhayB0aGUgd29yZCB0byB0aGUgbGFyZ2VzdCBwYXJ0IHRoYXQgZml0cyB0aGUgbGluZVxuICAgICAgICBjb25zdCB4ID0gdGhpcy5nZXRMb25nZXN0Rml0V29yZCh3b3JkKTtcbiAgICAgICAgdGhpcy5saW5lcy5uZXdMaW5lKHdvcmQuc2xpY2UoMCwgeCksIG1vZCk7XG5cbiAgICAgICAgLy8gQWRqdXN0IHRoZSB3b3JkLCBzbyB0aGF0IHRoZSByZXN0IHdpbGwgYmUgZG9uZSBuZXh0IGl0ZXJhdGlvblxuICAgICAgICB3b3Jkc1swXSA9IHdvcmQuc2xpY2UoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBza2lwIGFueSBzcGFjZSB0aGF0IGlzIHJlcGxhY2VkIGJ5IGEgbmV3bGluZVxuICAgICAgICBsZXQgbmV3VyA9IHc7XG4gICAgICAgIGlmICh3b3Jkc1t3IC0gMV0gPT09IFwiIFwiKSB7XG4gICAgICAgICAgdy0tO1xuICAgICAgICB9IGVsc2UgaWYgKHdvcmRzW25ld1ddID09PSBcIiBcIikge1xuICAgICAgICAgIG5ld1crKztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRleHQgPSB3b3Jkcy5zbGljZSgwLCB3KS5qb2luKFwiXCIpO1xuXG4gICAgICAgIGlmICh3ID09IHdvcmRzLmxlbmd0aCAmJiBhcHBlbmRMYXN0KSB7XG4gICAgICAgICAgdGhpcy5saW5lcy5hcHBlbmQodGV4dCwgbW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxpbmVzLm5ld0xpbmUodGV4dCwgbW9kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkanVzdCB0aGUgd29yZCwgc28gdGhhdCB0aGUgcmVzdCB3aWxsIGJlIGRvbmUgbmV4dCBpdGVyYXRpb25cbiAgICAgICAgd29yZHMgPSB3b3Jkcy5zbGljZShuZXdXKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWxTcGxpdHRlcjtcbiIsICJpbXBvcnQgeyBkZWVwRXh0ZW5kLCBmb3JFYWNoLCBvdmVycmlkZU9wYWNpdHksIHRvcE1vc3QgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBjaG9vc2lmeSwgaXNWYWxpZExhYmVsIH0gZnJvbSBcIi4vQ29tcG9uZW50VXRpbFwiO1xuaW1wb3J0IExhYmVsU3BsaXR0ZXIgZnJvbSBcIi4vTGFiZWxTcGxpdHRlclwiO1xuXG4vKipcbiAqIExpc3Qgb2Ygc3BlY2lhbCBzdHlsZXMgZm9yIG11bHRpLWZvbnRzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgbXVsdGlGb250U3R5bGUgPSBbXCJib2xkXCIsIFwiaXRhbFwiLCBcImJvbGRpdGFsXCIsIFwibW9ub1wiXTtcblxuLyoqXG4gKiBBIExhYmVsIHRvIGJlIHVzZWQgZm9yIE5vZGVzIG9yIEVkZ2VzLlxuICovXG5jbGFzcyBMYWJlbCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlZGdlbGFiZWw9ZmFsc2VdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBvcHRpb25zLCBlZGdlbGFiZWwgPSBmYWxzZSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5wb2ludFRvU2VsZiA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZVNpemUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mb250T3B0aW9ucyA9IHt9OyAvLyBpbnN0YW5jZSB2YXJpYWJsZSBjb250YWluaW5nIHRoZSAqaW5zdGFuY2UtbG9jYWwqIGZvbnQgb3B0aW9uc1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLnNpemUgPSB7IHRvcDogMCwgbGVmdDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCwgeUxpbmU6IDAgfTtcbiAgICB0aGlzLmlzRWRnZUxhYmVsID0gZWRnZWxhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIHRoZSBvcHRpb25zIG9mIHRoZSBwYXJlbnQgTm9kZS1pbnN0YW5jZVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5lbGVtZW50T3B0aW9ucyA9IG9wdGlvbnM7IC8vIFJlZmVyZW5jZSB0byB0aGUgb3B0aW9ucyBvZiB0aGUgcGFyZW50IE5vZGUtaW5zdGFuY2VcblxuICAgIHRoaXMuaW5pdEZvbnRPcHRpb25zKG9wdGlvbnMuZm9udCk7XG5cbiAgICBpZiAoaXNWYWxpZExhYmVsKG9wdGlvbnMubGFiZWwpKSB7XG4gICAgICB0aGlzLmxhYmVsRGlydHkgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWQgbGFiZWwhIENoYW5nZSB0aGUgb3B0aW9uIHZhbHVlIHRvIHByZXZlbnQgYmFkIHN0dWZmIGhhcHBlbmluZ1xuICAgICAgb3B0aW9ucy5sYWJlbCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5mb250ICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5mb250ICE9PSBudWxsKSB7XG4gICAgICAvLyBmb250IG9wdGlvbnMgY2FuIGJlIGRlbGV0ZWQgYXQgdmFyaW91cyBsZXZlbHNcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mb250ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMuYmFzZVNpemUgPSB0aGlzLmZvbnRPcHRpb25zLnNpemU7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmZvbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IG9wdGlvbnMuZm9udC5zaXplO1xuXG4gICAgICAgIGlmIChzaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmJhc2VTaXplID0gc2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0IHRoZSBmb250IE9wdGlvbnMgc3RydWN0dXJlLlxuICAgKlxuICAgKiBNZW1iZXIgZm9udE9wdGlvbnMgc2VydmVzIGFzIGFuIGFjY3VtdWxhdG9yIGZvciB0aGUgY3VycmVudCBmb250IG9wdGlvbnMuXG4gICAqIEFzIHN1Y2gsIGl0IG5lZWRzIHRvIGJlIGNvbXBsZXRlbHkgc2VwYXJhdGVkIGZyb20gdGhlIG5vZGUgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld0ZvbnRPcHRpb25zIHRoZSBuZXcgZm9udCBvcHRpb25zIHRvIHByb2Nlc3NcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXRGb250T3B0aW9ucyhuZXdGb250T3B0aW9ucykge1xuICAgIC8vIFByZXBhcmUgdGhlIG11bHRpLWZvbnQgb3B0aW9uIG9iamVjdHMuXG4gICAgLy8gVGhlc2Ugd2lsbCBiZSBmaWxsZWQgaW4gcHJvcGFnYXRlRm9udHMoKSwgaWYgcmVxdWlyZWRcbiAgICBmb3JFYWNoKG11bHRpRm9udFN0eWxlLCAoc3R5bGUpID0+IHtcbiAgICAgIHRoaXMuZm9udE9wdGlvbnNbc3R5bGVdID0ge307XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgc2hvcnRoYW5kIG9wdGlvbiwgaWYgcHJlc2VudFxuICAgIGlmIChMYWJlbC5wYXJzZUZvbnRTdHJpbmcodGhpcy5mb250T3B0aW9ucywgbmV3Rm9udE9wdGlvbnMpKSB7XG4gICAgICB0aGlzLmZvbnRPcHRpb25zLnZhZGp1c3QgPSAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENvcHkgb3ZlciB0aGUgbm9uLW11bHRpZm9udCBvcHRpb25zLCBpZiBzcGVjaWZpZWRcbiAgICBmb3JFYWNoKG5ld0ZvbnRPcHRpb25zLCAocHJvcCwgbikgPT4ge1xuICAgICAgaWYgKHByb3AgIT09IHVuZGVmaW5lZCAmJiBwcm9wICE9PSBudWxsICYmIHR5cGVvZiBwcm9wICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRoaXMuZm9udE9wdGlvbnNbbl0gPSBwcm9wO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGluLXZhcmlhYmxlIGlzIGEgc3RyaW5nLCBwYXJzZSBpdCBhcyBhIGZvbnQgc3BlY2lmaWVyLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgZm9sbG93aW5nIGlzIG5vdCBkb25lIGhlcmUgYW5kIGhhdmUgdG8gYmUgZG9uZSBhZnRlciB0aGUgY2FsbDpcbiAgICogLSBOb3QgYWxsIGZvbnQgb3B0aW9ucyBhcmUgc2V0ICh2YWRqdXN0LCBtb2QpXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvdXRPcHRpb25zICBvdXQtcGFyYW1ldGVyLCBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHBhcnNlIHJlc3VsdHMgKGlmIGFueSlcbiAgICogQHBhcmFtIHtvYmplY3R9IGluT3B0aW9ucyAgZm9udCBvcHRpb25zIHRvIHBhcnNlXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGZvbnQgcGFyc2VkIGFzIHN0cmluZywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZUZvbnRTdHJpbmcob3V0T3B0aW9ucywgaW5PcHRpb25zKSB7XG4gICAgaWYgKCFpbk9wdGlvbnMgfHwgdHlwZW9mIGluT3B0aW9ucyAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgbmV3T3B0aW9uc0FycmF5ID0gaW5PcHRpb25zLnNwbGl0KFwiIFwiKTtcblxuICAgIG91dE9wdGlvbnMuc2l6ZSA9ICtuZXdPcHRpb25zQXJyYXlbMF0ucmVwbGFjZShcInB4XCIsIFwiXCIpO1xuICAgIG91dE9wdGlvbnMuZmFjZSA9IG5ld09wdGlvbnNBcnJheVsxXTtcbiAgICBvdXRPcHRpb25zLmNvbG9yID0gbmV3T3B0aW9uc0FycmF5WzJdO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGNvbnN0cmFpbnRzIGJhc2VkIG9uICduZWFyZXN0JyB2YWx1ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwaWxlIGFycmF5IG9mIG9wdGlvbiBvYmplY3RzIHRvIGNvbnNpZGVyXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IHRoZSBhY3R1YWwgY29uc3RyYWludCB2YWx1ZXMgdG8gdXNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJhaW4ocGlsZSkge1xuICAgIC8vIE5PVEU6IGNvbnN0cmFpbldpZHRoIGFuZCAgY29uc3RyYWluSGVpZ2h0IG5ldmVyIHNldCFcbiAgICAvLyBOT1RFOiBmb3IgZWRnZSBsYWJlbHMsIG9ubHkgJ21heFdkdCcgc2V0XG4gICAgLy8gTm9kZSBsYWJlbHMgY2FuIHNldCBhbGwgdGhlIGZpZWxkc1xuICAgIGNvbnN0IGZvbnRPcHRpb25zID0ge1xuICAgICAgY29uc3RyYWluV2lkdGg6IGZhbHNlLFxuICAgICAgbWF4V2R0OiAtMSxcbiAgICAgIG1pbldkdDogLTEsXG4gICAgICBjb25zdHJhaW5IZWlnaHQ6IGZhbHNlLFxuICAgICAgbWluSGd0OiAtMSxcbiAgICAgIHZhbGlnbjogXCJtaWRkbGVcIixcbiAgICB9O1xuXG4gICAgY29uc3Qgd2lkdGhDb25zdHJhaW50ID0gdG9wTW9zdChwaWxlLCBcIndpZHRoQ29uc3RyYWludFwiKTtcbiAgICBpZiAodHlwZW9mIHdpZHRoQ29uc3RyYWludCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgZm9udE9wdGlvbnMubWF4V2R0ID0gTnVtYmVyKHdpZHRoQ29uc3RyYWludCk7XG4gICAgICBmb250T3B0aW9ucy5taW5XZHQgPSBOdW1iZXIod2lkdGhDb25zdHJhaW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aWR0aENvbnN0cmFpbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IHdpZHRoQ29uc3RyYWludE1heGltdW0gPSB0b3BNb3N0KHBpbGUsIFtcbiAgICAgICAgXCJ3aWR0aENvbnN0cmFpbnRcIixcbiAgICAgICAgXCJtYXhpbXVtXCIsXG4gICAgICBdKTtcbiAgICAgIGlmICh0eXBlb2Ygd2lkdGhDb25zdHJhaW50TWF4aW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBmb250T3B0aW9ucy5tYXhXZHQgPSBOdW1iZXIod2lkdGhDb25zdHJhaW50TWF4aW11bSk7XG4gICAgICB9XG4gICAgICBjb25zdCB3aWR0aENvbnN0cmFpbnRNaW5pbXVtID0gdG9wTW9zdChwaWxlLCBbXG4gICAgICAgIFwid2lkdGhDb25zdHJhaW50XCIsXG4gICAgICAgIFwibWluaW11bVwiLFxuICAgICAgXSk7XG4gICAgICBpZiAodHlwZW9mIHdpZHRoQ29uc3RyYWludE1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZm9udE9wdGlvbnMubWluV2R0ID0gTnVtYmVyKHdpZHRoQ29uc3RyYWludE1pbmltdW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhlaWdodENvbnN0cmFpbnQgPSB0b3BNb3N0KHBpbGUsIFwiaGVpZ2h0Q29uc3RyYWludFwiKTtcbiAgICBpZiAodHlwZW9mIGhlaWdodENvbnN0cmFpbnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGZvbnRPcHRpb25zLm1pbkhndCA9IE51bWJlcihoZWlnaHRDb25zdHJhaW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBoZWlnaHRDb25zdHJhaW50ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjb25zdCBoZWlnaHRDb25zdHJhaW50TWluaW11bSA9IHRvcE1vc3QocGlsZSwgW1xuICAgICAgICBcImhlaWdodENvbnN0cmFpbnRcIixcbiAgICAgICAgXCJtaW5pbXVtXCIsXG4gICAgICBdKTtcbiAgICAgIGlmICh0eXBlb2YgaGVpZ2h0Q29uc3RyYWludE1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgZm9udE9wdGlvbnMubWluSGd0ID0gTnVtYmVyKGhlaWdodENvbnN0cmFpbnRNaW5pbXVtKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhlaWdodENvbnN0cmFpbnRWYWxpZ24gPSB0b3BNb3N0KHBpbGUsIFtcbiAgICAgICAgXCJoZWlnaHRDb25zdHJhaW50XCIsXG4gICAgICAgIFwidmFsaWduXCIsXG4gICAgICBdKTtcbiAgICAgIGlmICh0eXBlb2YgaGVpZ2h0Q29uc3RyYWludFZhbGlnbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaGVpZ2h0Q29uc3RyYWludFZhbGlnbiA9PT0gXCJ0b3BcIiB8fFxuICAgICAgICAgIGhlaWdodENvbnN0cmFpbnRWYWxpZ24gPT09IFwiYm90dG9tXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9udE9wdGlvbnMudmFsaWduID0gaGVpZ2h0Q29uc3RyYWludFZhbGlnbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb250T3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgb3B0aW9ucyBhbmQgdXBkYXRlIGludGVybmFsIHN0YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICBvcHRpb25zIHRvIHNldFxuICAgKiBAcGFyYW0ge0FycmF5fSAgcGlsZSAgICAgYXJyYXkgb2Ygb3B0aW9uIG9iamVjdHMgdG8gY29uc2lkZXIgZm9yIG9wdGlvbiAnY2hvc2VuJ1xuICAgKi9cbiAgdXBkYXRlKG9wdGlvbnMsIHBpbGUpIHtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucywgdHJ1ZSk7XG4gICAgdGhpcy5wcm9wYWdhdGVGb250cyhwaWxlKTtcbiAgICBkZWVwRXh0ZW5kKHRoaXMuZm9udE9wdGlvbnMsIHRoaXMuY29uc3RyYWluKHBpbGUpKTtcbiAgICB0aGlzLmZvbnRPcHRpb25zLmNob29zZXIgPSBjaG9vc2lmeShcImxhYmVsXCIsIHBpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gbWFyZ2lucyBhcmUgc2V0IGluIGFuIGVsZW1lbnQsIGFkanVzdCBzaXplcyBpcyBjYWxsZWQgdG8gcmVtb3ZlIHRoZW1cbiAgICogZnJvbSB0aGUgd2lkdGgvaGVpZ2h0IGNvbnN0cmFpbnRzLiBUaGlzIG11c3QgYmUgZG9uZSBwcmlvciB0byBsYWJlbCBzaXppbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7e3RvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyfX0gbWFyZ2luc1xuICAgKi9cbiAgYWRqdXN0U2l6ZXMobWFyZ2lucykge1xuICAgIGNvbnN0IHdpZHRoQmlhcyA9IG1hcmdpbnMgPyBtYXJnaW5zLnJpZ2h0ICsgbWFyZ2lucy5sZWZ0IDogMDtcbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy5jb25zdHJhaW5XaWR0aCkge1xuICAgICAgdGhpcy5mb250T3B0aW9ucy5tYXhXZHQgLT0gd2lkdGhCaWFzO1xuICAgICAgdGhpcy5mb250T3B0aW9ucy5taW5XZHQgLT0gd2lkdGhCaWFzO1xuICAgIH1cbiAgICBjb25zdCBoZWlnaHRCaWFzID0gbWFyZ2lucyA/IG1hcmdpbnMudG9wICsgbWFyZ2lucy5ib3R0b20gOiAwO1xuICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLmNvbnN0cmFpbkhlaWdodCkge1xuICAgICAgdGhpcy5mb250T3B0aW9ucy5taW5IZ3QgLT0gaGVpZ2h0QmlhcztcbiAgICB9XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gTWV0aG9kcyBmb3IgaGFuZGxpbmcgb3B0aW9ucyBwaWxlc1xuICAvLyBFdmVudHVhbGx5LCB0aGVzZSB3aWxsIGJlIG1vdmVkIHRvIGEgc2VwYXJhdGUgY2xhc3NcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZm9udCBtZW1iZXJzIG9mIHRoZSBwYXNzZWQgbGlzdCBvZiBvcHRpb24gb2JqZWN0cyB0byB0aGUgcGlsZS5cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBkc3RQaWxlICBwaWxlIG9mIG9wdGlvbiBvYmplY3RzIGFkZCB0b1xuICAgKiBAcGFyYW0ge1BpbGV9IHNyY1BpbGUgIHBpbGUgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdGFrZSBmb250IG9wdGlvbnMgZnJvbVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkRm9udE9wdGlvbnNUb1BpbGUoZHN0UGlsZSwgc3JjUGlsZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3JjUGlsZS5sZW5ndGg7ICsraSkge1xuICAgICAgdGhpcy5hZGRGb250VG9QaWxlKGRzdFBpbGUsIHNyY1BpbGVbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZ2l2ZW4gZm9udCBvcHRpb24gb2JqZWN0IHRvIHRoZSBsaXN0IG9mIG9iamVjdHMgKHRoZSAncGlsZScpIHRvIGNvbnNpZGVyIGZvciBkZXRlcm1pbmluZ1xuICAgKiBtdWx0aS1mb250IG9wdGlvbiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gcGlsZSAgcGlsZSBvZiBvcHRpb24gb2JqZWN0cyB0byB1c2VcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgIGluc3RhbmNlIHRvIGFkZCB0byBwaWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhZGRGb250VG9QaWxlKHBpbGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgaWYgKG9wdGlvbnMuZm9udCA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuZm9udCA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgaXRlbSA9IG9wdGlvbnMuZm9udDtcbiAgICBwaWxlLnB1c2goaXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdCBhbGwgb3duLXByb3BlcnR5IHZhbHVlcyBmcm9tIHRoZSBmb250IHBpbGUgdGhhdCBhcmVuJ3QgbXVsdGktZm9udCBvcHRpb24gb2JqZWN0c3MuXG4gICAqXG4gICAqIEBwYXJhbSB7UGlsZX0gcGlsZSAgcGlsZSBvZiBvcHRpb24gb2JqZWN0cyB0byB1c2VcbiAgICogQHJldHVybnMge29iamVjdH0gb2JqZWN0IHdpdGggYWxsIGN1cnJlbnQgb3duIGJhc2ljIGZvbnQgcHJvcGVydGllc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0QmFzaWNPcHRpb25zKHBpbGUpIHtcbiAgICBjb25zdCByZXQgPSB7fTtcblxuICAgIC8vIFNjYW5zIHRoZSB3aG9sZSBwaWxlIHRvIGdldCBhbGwgb3B0aW9ucyBwcmVzZW50XG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBwaWxlLmxlbmd0aDsgKytuKSB7XG4gICAgICBsZXQgZm9udE9wdGlvbnMgPSBwaWxlW25dO1xuXG4gICAgICAvLyBDb252ZXJ0IHNob3J0aGFuZCBpZiBuZWNlc3NhcnlcbiAgICAgIGNvbnN0IHRtcFNob3J0aGFuZCA9IHt9O1xuICAgICAgaWYgKExhYmVsLnBhcnNlRm9udFN0cmluZyh0bXBTaG9ydGhhbmQsIGZvbnRPcHRpb25zKSkge1xuICAgICAgICBmb250T3B0aW9ucyA9IHRtcFNob3J0aGFuZDtcbiAgICAgIH1cblxuICAgICAgZm9yRWFjaChmb250T3B0aW9ucywgKG9wdCwgbmFtZSkgPT4ge1xuICAgICAgICBpZiAob3B0ID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gbXVsdGktZm9udCBvcHRpb24gbmVlZCBub3QgYmUgcHJlc2VudFxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJldCwgbmFtZSkpIHJldHVybjsgLy8gS2VlcCBmaXJzdCB2YWx1ZSB3ZSBlbmNvdW50ZXJcblxuICAgICAgICBpZiAobXVsdGlGb250U3R5bGUuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAvLyBTa2lwIG11bHRpLWZvbnQgcHJvcGVydGllcyBidXQgd2UgZG8gbmVlZCB0aGUgc3RydWN0dXJlXG4gICAgICAgICAgcmV0W25hbWVdID0ge307XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0W25hbWVdID0gb3B0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdmFsdWUgZm9yIGdpdmVuIG9wdGlvbiBmb3IgdGhlIGdpdmVuIG11bHRpLWZvbnQuXG4gICAqXG4gICAqIEFsbCBhdmFpbGFibGUgb3B0aW9uIG9iamVjdHMgYXJlIHRyYXdsZWQgaW4gdGhlIHNldCBvcmRlciB0byBjb25zdHJ1Y3QgdGhlIG9wdGlvbiB2YWx1ZXMuXG4gICAqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiAjIyBUcmF2ZXJzYWwgb2YgcGlsZSBmb3IgbXVsdGktZm9udHNcbiAgICpcbiAgICogVGhlIGRldGVybWluYXRpb24gb2YgbXVsdGktZm9udCBvcHRpb24gdmFsdWVzIGlzIGEgc3BlY2lhbCBjYXNlLCBiZWNhdXNlIGFueSB2YWx1ZXMgbm90XG4gICAqIHByZXNlbnQgaW4gdGhlIG11bHRpLWZvbnQgb3B0aW9ucyBzaG91bGQgYnkgZGVmaW5pdGlvbiBiZSB0YWtlbiBmcm9tIHRoZSBtYWluIGZvbnQgb3B0aW9ucyxcbiAgICogaS5lLiBmcm9tIHRoZSBjdXJyZW50ICdwYXJlbnQnIG9iamVjdCBvZiB0aGUgbXVsdGktZm9udCBvcHRpb24uXG4gICAqXG4gICAqICMjIyBTZWFyY2ggb3JkZXIgZm9yIG11bHRpLWZvbnRzXG4gICAqXG4gICAqICdib2xkJyB1c2VkIGFzIGV4YW1wbGU6XG4gICAqXG4gICAqICAgLSBzZWFyY2ggaW4gb3B0aW9uIGdyb3VwICdib2xkJyBpbiBsb2NhbCBwcm9wZXJ0aWVzXG4gICAqICAgLSBzZWFyY2ggaW4gbWFpbiBmb250IG9wdGlvbiBncm91cCBpbiBsb2NhbCBwcm9wZXJ0aWVzXG4gICAqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKlxuICAgKiBAcGFyYW0ge1BpbGV9IHBpbGUgIHBpbGUgb2Ygb3B0aW9uIG9iamVjdHMgdG8gdXNlXG4gICAqIEBwYXJhbSB7TXVsdGlGb250U3R5bGV9IG11bHRpTmFtZSBzdWIgcGF0aCBmb3IgdGhlIG11bHRpLWZvbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbiAgdGhlIG9wdGlvbiB0byBzZWFyY2ggZm9yLCBmb3IgdGhlIGdpdmVuIG11bHRpLWZvbnRcbiAgICogQHJldHVybnMge3N0cmluZ3xudW1iZXJ9IHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0Rm9udE9wdGlvbihwaWxlLCBtdWx0aU5hbWUsIG9wdGlvbikge1xuICAgIGxldCBtdWx0aUZvbnQ7XG5cbiAgICAvLyBTZWFyY2ggbXVsdGkgZm9udCBpbiBsb2NhbCBwcm9wZXJ0aWVzXG4gICAgZm9yIChsZXQgbiA9IDA7IG4gPCBwaWxlLmxlbmd0aDsgKytuKSB7XG4gICAgICBjb25zdCBmb250T3B0aW9ucyA9IHBpbGVbbl07XG5cbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9udE9wdGlvbnMsIG11bHRpTmFtZSkpIHtcbiAgICAgICAgbXVsdGlGb250ID0gZm9udE9wdGlvbnNbbXVsdGlOYW1lXTtcbiAgICAgICAgaWYgKG11bHRpRm9udCA9PT0gdW5kZWZpbmVkIHx8IG11bHRpRm9udCA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgLy8gQ29udmVydCBzaG9ydGhhbmQgaWYgbmVjZXNzYXJ5XG4gICAgICAgIC8vIFRPRE86IGluZWZmaWNpZW50IHRvIGRvIHRoaXMgY29udmVyc2lvbiBldmVyeSB0aW1lOyBmaW5kIGEgYmV0dGVyIHdheS5cbiAgICAgICAgY29uc3QgdG1wU2hvcnRoYW5kID0ge307XG4gICAgICAgIGlmIChMYWJlbC5wYXJzZUZvbnRTdHJpbmcodG1wU2hvcnRoYW5kLCBtdWx0aUZvbnQpKSB7XG4gICAgICAgICAgbXVsdGlGb250ID0gdG1wU2hvcnRoYW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtdWx0aUZvbnQsIG9wdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gbXVsdGlGb250W29wdGlvbl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPcHRpb24gaXMgbm90IG1lbnRpb25lZCBpbiB0aGUgbXVsdGkgZm9udCBvcHRpb25zOyB0YWtlIGl0IGZyb20gdGhlIHBhcmVudCBmb250IG9wdGlvbnMuXG4gICAgLy8gVGhlc2UgaGF2ZSBhbHJlYWR5IGJlZW4gY29udmVydGVkIHdpdGggZ2V0QmFzaWNPcHRpb25zKCksIHNvIHVzZSB0aGUgY29udmVydGVkIHZhbHVlcy5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZm9udE9wdGlvbnMsIG9wdGlvbikpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvbnRPcHRpb25zW29wdGlvbl07XG4gICAgfVxuXG4gICAgLy8gQSB2YWx1ZSAqKm11c3QqKiBiZSBmb3VuZDsgeW91IHNob3VsZCBuZXZlciBnZXQgaGVyZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkRpZCBub3QgZmluZCB2YWx1ZSBmb3IgbXVsdGktZm9udCBmb3IgcHJvcGVydHk6ICdcIiArIG9wdGlvbiArIFwiJ1wiXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIG9wdGlvbnMgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gbXVsdGktZm9udC5cbiAgICpcbiAgICogQWxsIGF2YWlsYWJsZSBvcHRpb24gb2JqZWN0cyBhcmUgdHJhd2xlZCBpbiB0aGUgc2V0IG9yZGVyIHRvIGNvbnN0cnVjdCB0aGUgb3B0aW9uIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBwaWxlICBwaWxlIG9mIG9wdGlvbiBvYmplY3RzIHRvIHVzZVxuICAgKiBAcGFyYW0ge011bHRpRm9udFN0eWxlfSBtdWx0aU5hbWUgc3ViIHBhdGggZm9yIHRoZSBtb2QtZm9udFxuICAgKiBAcmV0dXJucyB7TXVsdGlGb250T3B0aW9uc31cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldEZvbnRPcHRpb25zKHBpbGUsIG11bHRpTmFtZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IG9wdGlvbk5hbWVzID0gW1wiY29sb3JcIiwgXCJzaXplXCIsIFwiZmFjZVwiLCBcIm1vZFwiLCBcInZhZGp1c3RcIl07IC8vIExpc3Qgb2YgYWxsb3dlZCBvcHRpb25zIHBlciBtdWx0aS1mb250XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbk5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBtb2QgPSBvcHRpb25OYW1lc1tpXTtcbiAgICAgIHJlc3VsdFttb2RdID0gdGhpcy5nZXRGb250T3B0aW9uKHBpbGUsIG11bHRpTmFtZSwgbW9kKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIEVuZCBtZXRob2RzIGZvciBoYW5kbGluZyBvcHRpb25zIHBpbGVzXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBDb2xsYXBzZSB0aGUgZm9udCBvcHRpb25zIGZvciB0aGUgbXVsdGktZm9udCB0byBzaW5nbGUgb2JqZWN0cywgZnJvbVxuICAgKiB0aGUgY2hhaW4gb2Ygb3B0aW9uIG9iamVjdHMgcGFzc2VkICh0aGUgJ3BpbGUnKS5cbiAgICpcbiAgICogQHBhcmFtIHtQaWxlfSBwaWxlICBzZXF1ZW5jZSBvZiBvcHRpb24gb2JqZWN0cyB0byBjb25zaWRlci5cbiAgICogICAgICAgICAgICAgICAgICAgICBGaXJzdCBpdGVtIGluIGxpc3QgYXNzdW1lZCB0byBiZSB0aGUgbmV3bHkgc2V0IG9wdGlvbnMuXG4gICAqL1xuICBwcm9wYWdhdGVGb250cyhwaWxlKSB7XG4gICAgY29uc3QgZm9udFBpbGUgPSBbXTsgLy8gc2VxdWVuY2Ugb2YgZm9udCBvYmplY3RzIHRvIGNvbnNpZGVyLCBvcmRlciBpbXBvcnRhbnRcblxuICAgIC8vIE5vdGUgdGhhdCB0aGlzLmVsZW1lbnRPcHRpb25zIGlzIG5vdCB1c2VkIGhlcmUuXG4gICAgdGhpcy5hZGRGb250T3B0aW9uc1RvUGlsZShmb250UGlsZSwgcGlsZSk7XG4gICAgdGhpcy5mb250T3B0aW9ucyA9IHRoaXMuZ2V0QmFzaWNPcHRpb25zKGZvbnRQaWxlKTtcblxuICAgIC8vIFdlIHNldCBtdWx0aWZvbnQgdmFsdWVzIGV2ZW4gaWYgbXVsdGkgPT09IGZhbHNlLCBmb3IgY29uc2lzdGVuY3kgKHRoaW5ncyBicmVhayBvdGhlcndpc2UpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtdWx0aUZvbnRTdHlsZS5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgbW9kID0gbXVsdGlGb250U3R5bGVbaV07XG4gICAgICBjb25zdCBtb2RPcHRpb25zID0gdGhpcy5mb250T3B0aW9uc1ttb2RdO1xuICAgICAgY29uc3QgdG1wTXVsdGlGb250T3B0aW9ucyA9IHRoaXMuZ2V0Rm9udE9wdGlvbnMoZm9udFBpbGUsIG1vZCk7XG5cbiAgICAgIC8vIENvcHkgb3ZlciBmb3VuZCB2YWx1ZXNcbiAgICAgIGZvckVhY2godG1wTXVsdGlGb250T3B0aW9ucywgKG9wdGlvbiwgbikgPT4ge1xuICAgICAgICBtb2RPcHRpb25zW25dID0gb3B0aW9uO1xuICAgICAgfSk7XG5cbiAgICAgIG1vZE9wdGlvbnMuc2l6ZSA9IE51bWJlcihtb2RPcHRpb25zLnNpemUpO1xuICAgICAgbW9kT3B0aW9ucy52YWRqdXN0ID0gTnVtYmVyKG1vZE9wdGlvbnMudmFkanVzdCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24uIFRoaXMgaXMgY2FsbGVkIGZyb20gYW55dGhpbmcgdGhhdCB3YW50cyB0byBkcmF3IGEgbGFiZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZWxpbmU9J21pZGRsZSddXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCBiYXNlbGluZSA9IFwibWlkZGxlXCIpIHtcbiAgICAvLyBpZiBubyBsYWJlbCwgcmV0dXJuXG4gICAgaWYgKHRoaXMuZWxlbWVudE9wdGlvbnMubGFiZWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byByZW5kZXIgdGhlIGxhYmVsXG4gICAgbGV0IHZpZXdGb250U2l6ZSA9IHRoaXMuZm9udE9wdGlvbnMuc2l6ZSAqIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZWxlbWVudE9wdGlvbnMubGFiZWwgJiZcbiAgICAgIHZpZXdGb250U2l6ZSA8IHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5kcmF3VGhyZXNob2xkIC0gMVxuICAgIClcbiAgICAgIHJldHVybjtcblxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZXJlIHdpbGwgbm90IGJlIEhVR0UgbGV0dGVycyBvbiBzY3JlZW5cbiAgICAvLyBieSBzZXR0aW5nIGFuIHVwcGVyIGxpbWl0IG9uIHRoZSB2aXNpYmxlIHRleHQgc2l6ZSAocmVnYXJkbGVzcyBvZiB6b29tTGV2ZWwpXG4gICAgaWYgKHZpZXdGb250U2l6ZSA+PSB0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwubWF4VmlzaWJsZSkge1xuICAgICAgdmlld0ZvbnRTaXplID1cbiAgICAgICAgTnVtYmVyKHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5tYXhWaXNpYmxlKSAvXG4gICAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZSB0aGUgc2l6ZSBjYWNoZSBpZiByZXF1aXJlZFxuICAgIHRoaXMuY2FsY3VsYXRlTGFiZWxTaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyLCB4LCB5LCBiYXNlbGluZSk7XG4gICAgdGhpcy5fZHJhd0JhY2tncm91bmQoY3R4KTtcbiAgICB0aGlzLl9kcmF3VGV4dChjdHgsIHgsIHRoaXMuc2l6ZS55TGluZSwgYmFzZWxpbmUsIHZpZXdGb250U2l6ZSk7XG4gIH1cblxuICAvKipcbiAgICogRHJhd3MgdGhlIGxhYmVsIGJhY2tncm91bmRcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdCYWNrZ3JvdW5kKGN0eCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9udE9wdGlvbnMuYmFja2dyb3VuZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZvbnRPcHRpb25zLmJhY2tncm91bmQgIT09IFwibm9uZVwiXG4gICAgKSB7XG4gICAgICBjdHguZmlsbFN0eWxlID0gdGhpcy5mb250T3B0aW9ucy5iYWNrZ3JvdW5kO1xuICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuICAgICAgY3R4LmZpbGxSZWN0KHNpemUubGVmdCwgc2l6ZS50b3AsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Jhc2VsaW5lPSdtaWRkbGUnXVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmlld0ZvbnRTaXplXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd1RleHQoY3R4LCB4LCB5LCBiYXNlbGluZSA9IFwibWlkZGxlXCIsIHZpZXdGb250U2l6ZSkge1xuICAgIFt4LCB5XSA9IHRoaXMuX3NldEFsaWdubWVudChjdHgsIHgsIHksIGJhc2VsaW5lKTtcblxuICAgIGN0eC50ZXh0QWxpZ24gPSBcImxlZnRcIjtcbiAgICB4ID0geCAtIHRoaXMuc2l6ZS53aWR0aCAvIDI7IC8vIFNoaWZ0IGxhYmVsIDEvMi1kaXN0YW5jZSB0byB0aGUgbGVmdFxuICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLnZhbGlnbiAmJiB0aGlzLnNpemUuaGVpZ2h0ID4gdGhpcy5zaXplLmxhYmVsSGVpZ2h0KSB7XG4gICAgICBpZiAodGhpcy5mb250T3B0aW9ucy52YWxpZ24gPT09IFwidG9wXCIpIHtcbiAgICAgICAgeSAtPSAodGhpcy5zaXplLmhlaWdodCAtIHRoaXMuc2l6ZS5sYWJlbEhlaWdodCkgLyAyO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZm9udE9wdGlvbnMudmFsaWduID09PSBcImJvdHRvbVwiKSB7XG4gICAgICAgIHkgKz0gKHRoaXMuc2l6ZS5oZWlnaHQgLSB0aGlzLnNpemUubGFiZWxIZWlnaHQpIC8gMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkcmF3IHRoZSB0ZXh0XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxpbmVDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBsaW5lID0gdGhpcy5saW5lc1tpXTtcbiAgICAgIGlmIChsaW5lICYmIGxpbmUuYmxvY2tzKSB7XG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGlmICh0aGlzLmlzRWRnZUxhYmVsIHx8IHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwiY2VudGVyXCIpIHtcbiAgICAgICAgICB3aWR0aCArPSAodGhpcy5zaXplLndpZHRoIC0gbGluZS53aWR0aCkgLyAyO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwicmlnaHRcIikge1xuICAgICAgICAgIHdpZHRoICs9IHRoaXMuc2l6ZS53aWR0aCAtIGxpbmUud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lLmJsb2Nrcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNvbnN0IGJsb2NrID0gbGluZS5ibG9ja3Nbal07XG4gICAgICAgICAgY3R4LmZvbnQgPSBibG9jay5mb250O1xuICAgICAgICAgIGNvbnN0IFtmb250Q29sb3IsIHN0cm9rZUNvbG9yXSA9IHRoaXMuX2dldENvbG9yKFxuICAgICAgICAgICAgYmxvY2suY29sb3IsXG4gICAgICAgICAgICB2aWV3Rm9udFNpemUsXG4gICAgICAgICAgICBibG9jay5zdHJva2VDb2xvclxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGJsb2NrLnN0cm9rZVdpZHRoID4gMCkge1xuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGJsb2NrLnN0cm9rZVdpZHRoO1xuICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3I7XG4gICAgICAgICAgICBjdHgubGluZUpvaW4gPSBcInJvdW5kXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBmb250Q29sb3I7XG5cbiAgICAgICAgICBpZiAoYmxvY2suc3Ryb2tlV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBjdHguc3Ryb2tlVGV4dChibG9jay50ZXh0LCB4ICsgd2lkdGgsIHkgKyBibG9jay52YWRqdXN0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3R4LmZpbGxUZXh0KGJsb2NrLnRleHQsIHggKyB3aWR0aCwgeSArIGJsb2NrLnZhZGp1c3QpO1xuICAgICAgICAgIHdpZHRoICs9IGJsb2NrLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHkgKz0gbGluZS5oZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VsaW5lXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRBbGlnbm1lbnQoY3R4LCB4LCB5LCBiYXNlbGluZSkge1xuICAgIC8vIGNoZWNrIGZvciBsYWJlbCBhbGlnbm1lbnQgKGZvciBlZGdlcylcbiAgICAvLyBUT0RPOiBtYWtlIGFsaWdubWVudCBmb3Igbm9kZXNcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzRWRnZUxhYmVsICYmXG4gICAgICB0aGlzLmZvbnRPcHRpb25zLmFsaWduICE9PSBcImhvcml6b250YWxcIiAmJlxuICAgICAgdGhpcy5wb2ludFRvU2VsZiA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHggPSAwO1xuICAgICAgeSA9IDA7XG5cbiAgICAgIGNvbnN0IGxpbmVNYXJnaW4gPSAyO1xuICAgICAgaWYgKHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwidG9wXCIpIHtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwiYWxwaGFiZXRpY1wiO1xuICAgICAgICB5IC09IDIgKiBsaW5lTWFyZ2luOyAvLyBkaXN0YW5jZSBmcm9tIGVkZ2UsIHJlcXVpcmVkIGJlY2F1c2Ugd2UgdXNlIGFscGhhYmV0aWMuIEFscGhhYmV0aWMgaGFzIGxlc3MgZGlmZmVyZW5jZSBiZXR3ZWVuIGJyb3dzZXJzXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZm9udE9wdGlvbnMuYWxpZ24gPT09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwiaGFuZ2luZ1wiO1xuICAgICAgICB5ICs9IDIgKiBsaW5lTWFyZ2luOyAvLyBkaXN0YW5jZSBmcm9tIGVkZ2UsIHJlcXVpcmVkIGJlY2F1c2Ugd2UgdXNlIGhhbmdpbmcuIEhhbmdpbmcgaGFzIGxlc3MgZGlmZmVyZW5jZSBiZXR3ZWVuIGJyb3dzZXJzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY3R4LnRleHRCYXNlbGluZSA9IGJhc2VsaW5lO1xuICAgIH1cbiAgICByZXR1cm4gW3gsIHldO1xuICB9XG5cbiAgLyoqXG4gICAqIGZhZGUgaW4gd2hlbiByZWxhdGl2ZSBzY2FsZSBpcyBiZXR3ZWVuIHRocmVzaG9sZCBhbmQgdGhyZXNob2xkIC0gMS5cbiAgICogSWYgdGhlIHJlbGF0aXZlIHNjYWxlIHdvdWxkIGJlIHNtYWxsZXIgdGhhbiB0aHJlc2hvbGQgLTEgdGhlIGRyYXcgZnVuY3Rpb24gd291bGQgaGF2ZSByZXR1cm5lZCBiZWZvcmUgY29taW5nIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAgVGhlIGZvbnQgY29sb3IgdG8gdXNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2aWV3Rm9udFNpemVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGluaXRpYWxTdHJva2VDb2xvclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGZvbnQgY29sb3IgYW5kIHN0cm9rZSBjb2xvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENvbG9yKGNvbG9yLCB2aWV3Rm9udFNpemUsIGluaXRpYWxTdHJva2VDb2xvcikge1xuICAgIGxldCBmb250Q29sb3IgPSBjb2xvciB8fCBcIiMwMDAwMDBcIjtcbiAgICBsZXQgc3Ryb2tlQ29sb3IgPSBpbml0aWFsU3Ryb2tlQ29sb3IgfHwgXCIjZmZmZmZmXCI7XG4gICAgaWYgKHZpZXdGb250U2l6ZSA8PSB0aGlzLmVsZW1lbnRPcHRpb25zLnNjYWxpbmcubGFiZWwuZHJhd1RocmVzaG9sZCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAxLFxuICAgICAgICAgIDEgLSAodGhpcy5lbGVtZW50T3B0aW9ucy5zY2FsaW5nLmxhYmVsLmRyYXdUaHJlc2hvbGQgLSB2aWV3Rm9udFNpemUpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBmb250Q29sb3IgPSBvdmVycmlkZU9wYWNpdHkoZm9udENvbG9yLCBvcGFjaXR5KTtcbiAgICAgIHN0cm9rZUNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KHN0cm9rZUNvbG9yLCBvcGFjaXR5KTtcbiAgICB9XG4gICAgcmV0dXJuIFtmb250Q29sb3IsIHN0cm9rZUNvbG9yXTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcmV0dXJucyB7e3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfX1cbiAgICovXG4gIGdldFRleHRTaXplKGN0eCwgc2VsZWN0ZWQgPSBmYWxzZSwgaG92ZXIgPSBmYWxzZSkge1xuICAgIHRoaXMuX3Byb2Nlc3NMYWJlbChjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB0aGlzLnNpemUud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuc2l6ZS5oZWlnaHQsXG4gICAgICBsaW5lQ291bnQ6IHRoaXMubGluZUNvdW50LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGRpbWVuc2lvbnMgb2YgdGhlIGxhYmVsXG4gICAqXG4gICAqIEByZXR1cm5zIHtyZWN0fVxuICAgKi9cbiAgZ2V0U2l6ZSgpIHtcbiAgICBjb25zdCBsaW5lTWFyZ2luID0gMjtcbiAgICBsZXQgeCA9IHRoaXMuc2l6ZS5sZWZ0OyAvLyBkZWZhdWx0IHZhbHVlcyB3aGljaCBtaWdodCBiZSBvdmVycmlkZGVuIGJlbG93XG4gICAgbGV0IHkgPSB0aGlzLnNpemUudG9wIC0gMC41ICogbGluZU1hcmdpbjsgLy8gaWRlbVxuXG4gICAgaWYgKHRoaXMuaXNFZGdlTGFiZWwpIHtcbiAgICAgIGNvbnN0IHgyID0gLXRoaXMuc2l6ZS53aWR0aCAqIDAuNTtcblxuICAgICAgc3dpdGNoICh0aGlzLmZvbnRPcHRpb25zLmFsaWduKSB7XG4gICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcbiAgICAgICAgICB4ID0geDI7XG4gICAgICAgICAgeSA9IC10aGlzLnNpemUuaGVpZ2h0ICogMC41O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidG9wXCI6XG4gICAgICAgICAgeCA9IHgyO1xuICAgICAgICAgIHkgPSAtKHRoaXMuc2l6ZS5oZWlnaHQgKyBsaW5lTWFyZ2luKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgICAgIHggPSB4MjtcbiAgICAgICAgICB5ID0gbGluZU1hcmdpbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSB7XG4gICAgICBsZWZ0OiB4LFxuICAgICAgdG9wOiB5LFxuICAgICAgd2lkdGg6IHRoaXMuc2l6ZS53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5zaXplLmhlaWdodCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3g9MF1cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt5PTBdXG4gICAqIEBwYXJhbSB7J21pZGRsZSd8J2hhbmdpbmcnfSBbYmFzZWxpbmU9J21pZGRsZSddXG4gICAqL1xuICBjYWxjdWxhdGVMYWJlbFNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIHggPSAwLCB5ID0gMCwgYmFzZWxpbmUgPSBcIm1pZGRsZVwiKSB7XG4gICAgdGhpcy5fcHJvY2Vzc0xhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLnNpemUubGVmdCA9IHggLSB0aGlzLnNpemUud2lkdGggKiAwLjU7XG4gICAgdGhpcy5zaXplLnRvcCA9IHkgLSB0aGlzLnNpemUuaGVpZ2h0ICogMC41O1xuICAgIHRoaXMuc2l6ZS55TGluZSA9IHkgKyAoMSAtIHRoaXMubGluZUNvdW50KSAqIDAuNSAqIHRoaXMuZm9udE9wdGlvbnMuc2l6ZTtcbiAgICBpZiAoYmFzZWxpbmUgPT09IFwiaGFuZ2luZ1wiKSB7XG4gICAgICB0aGlzLnNpemUudG9wICs9IDAuNSAqIHRoaXMuZm9udE9wdGlvbnMuc2l6ZTtcbiAgICAgIHRoaXMuc2l6ZS50b3AgKz0gNDsgLy8gZGlzdGFuY2UgZnJvbSBub2RlLCByZXF1aXJlZCBiZWNhdXNlIHdlIHVzZSBoYW5naW5nLiBIYW5naW5nIGhhcyBsZXNzIGRpZmZlcmVuY2UgYmV0d2VlbiBicm93c2Vyc1xuICAgICAgdGhpcy5zaXplLnlMaW5lICs9IDQ7IC8vIGRpc3RhbmNlIGZyb20gbm9kZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kXG4gICAqIEByZXR1cm5zIHt7Y29sb3IsIHNpemUsIGZhY2UsIG1vZCwgdmFkanVzdCwgc3Ryb2tlV2lkdGg6ICosIHN0cm9rZUNvbG9yOiAoKnxzdHJpbmd8YWxsT3B0aW9ucy5lZGdlcy5mb250LnN0cm9rZUNvbG9yfHtzdHJpbmd9fGFsbE9wdGlvbnMubm9kZXMuZm9udC5zdHJva2VDb2xvcnxBcnJheSl9fVxuICAgKi9cbiAgZ2V0Rm9ybWF0dGluZ1ZhbHVlcyhjdHgsIHNlbGVjdGVkLCBob3ZlciwgbW9kKSB7XG4gICAgY29uc3QgZ2V0VmFsdWUgPSBmdW5jdGlvbiAoZm9udE9wdGlvbnMsIG1vZCwgb3B0aW9uKSB7XG4gICAgICBpZiAobW9kID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgIGlmIChvcHRpb24gPT09IFwibW9kXCIpIHJldHVybiBcIlwiO1xuICAgICAgICByZXR1cm4gZm9udE9wdGlvbnNbb3B0aW9uXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvbnRPcHRpb25zW21vZF1bb3B0aW9uXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIEdydW1ibCBsZWF2aW5nIG91dCB0ZXN0IG9uIHVuZGVmaW5lZCBlcXVhbHMgZmFsc2UgZm9yIFwiXCJcbiAgICAgICAgcmV0dXJuIGZvbnRPcHRpb25zW21vZF1bb3B0aW9uXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRha2UgZnJvbSBwYXJlbnQgZm9udCBvcHRpb25cbiAgICAgICAgcmV0dXJuIGZvbnRPcHRpb25zW29wdGlvbl07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgIGNvbG9yOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwiY29sb3JcIiksXG4gICAgICBzaXplOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwic2l6ZVwiKSxcbiAgICAgIGZhY2U6IGdldFZhbHVlKHRoaXMuZm9udE9wdGlvbnMsIG1vZCwgXCJmYWNlXCIpLFxuICAgICAgbW9kOiBnZXRWYWx1ZSh0aGlzLmZvbnRPcHRpb25zLCBtb2QsIFwibW9kXCIpLFxuICAgICAgdmFkanVzdDogZ2V0VmFsdWUodGhpcy5mb250T3B0aW9ucywgbW9kLCBcInZhZGp1c3RcIiksXG4gICAgICBzdHJva2VXaWR0aDogdGhpcy5mb250T3B0aW9ucy5zdHJva2VXaWR0aCxcbiAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLmZvbnRPcHRpb25zLnN0cm9rZUNvbG9yLFxuICAgIH07XG4gICAgaWYgKHNlbGVjdGVkIHx8IGhvdmVyKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG1vZCA9PT0gXCJub3JtYWxcIiAmJlxuICAgICAgICB0aGlzLmZvbnRPcHRpb25zLmNob29zZXIgPT09IHRydWUgJiZcbiAgICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5sYWJlbEhpZ2hsaWdodEJvbGRcbiAgICAgICkge1xuICAgICAgICB2YWx1ZXMubW9kID0gXCJib2xkXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZm9udE9wdGlvbnMuY2hvb3NlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdGhpcy5mb250T3B0aW9ucy5jaG9vc2VyKFxuICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5pZCxcbiAgICAgICAgICAgIHNlbGVjdGVkLFxuICAgICAgICAgICAgaG92ZXJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZvbnRTdHJpbmcgPSBcIlwiO1xuICAgIGlmICh2YWx1ZXMubW9kICE9PSB1bmRlZmluZWQgJiYgdmFsdWVzLm1vZCAhPT0gXCJcIikge1xuICAgICAgLy8gc2FmZWd1YXJkIGZvciB1bmRlZmluZWQgLSB0aGlzIGhhcHBlbmVkXG4gICAgICBmb250U3RyaW5nICs9IHZhbHVlcy5tb2QgKyBcIiBcIjtcbiAgICB9XG4gICAgZm9udFN0cmluZyArPSB2YWx1ZXMuc2l6ZSArIFwicHggXCIgKyB2YWx1ZXMuZmFjZTtcblxuICAgIGN0eC5mb250ID0gZm9udFN0cmluZy5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICB2YWx1ZXMuZm9udCA9IGN0eC5mb250O1xuICAgIHZhbHVlcy5oZWlnaHQgPSB2YWx1ZXMuc2l6ZTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGRpZmZlcmVudFN0YXRlKHNlbGVjdGVkLCBob3Zlcikge1xuICAgIHJldHVybiBzZWxlY3RlZCAhPT0gdGhpcy5zZWxlY3RlZFN0YXRlIHx8IGhvdmVyICE9PSB0aGlzLmhvdmVyU3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBleHBsb2RlcyB0aGUgcGFzc2VkIHRleHQgaW50byBsaW5lcyBhbmQgZGV0ZXJtaW5lcyB0aGUgd2lkdGgsIGhlaWdodCBhbmQgbnVtYmVyIG9mIGxpbmVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW5UZXh0ICB0aGUgdGV4dCB0byBleHBsb2RlXG4gICAqIEByZXR1cm5zIHt7d2lkdGgsIGhlaWdodCwgbGluZXN9fCp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHJvY2Vzc0xhYmVsVGV4dChjdHgsIHNlbGVjdGVkLCBob3ZlciwgaW5UZXh0KSB7XG4gICAgY29uc3Qgc3BsaXR0ZXIgPSBuZXcgTGFiZWxTcGxpdHRlcihjdHgsIHRoaXMsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgcmV0dXJuIHNwbGl0dGVyLnByb2Nlc3MoaW5UZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGV4cGxvZGVzIHRoZSBsYWJlbCBzdHJpbmcgaW50byBsaW5lcyBhbmQgc2V0cyB0aGUgd2lkdGgsIGhlaWdodCBhbmQgbnVtYmVyIG9mIGxpbmVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Byb2Nlc3NMYWJlbChjdHgsIHNlbGVjdGVkLCBob3Zlcikge1xuICAgIGlmICh0aGlzLmxhYmVsRGlydHkgPT09IGZhbHNlICYmICF0aGlzLmRpZmZlcmVudFN0YXRlKHNlbGVjdGVkLCBob3ZlcikpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3Byb2Nlc3NMYWJlbFRleHQoXG4gICAgICBjdHgsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyLFxuICAgICAgdGhpcy5lbGVtZW50T3B0aW9ucy5sYWJlbFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5mb250T3B0aW9ucy5taW5XZHQgPiAwICYmIHN0YXRlLndpZHRoIDwgdGhpcy5mb250T3B0aW9ucy5taW5XZHQpIHtcbiAgICAgIHN0YXRlLndpZHRoID0gdGhpcy5mb250T3B0aW9ucy5taW5XZHQ7XG4gICAgfVxuXG4gICAgdGhpcy5zaXplLmxhYmVsSGVpZ2h0ID0gc3RhdGUuaGVpZ2h0O1xuICAgIGlmICh0aGlzLmZvbnRPcHRpb25zLm1pbkhndCA+IDAgJiYgc3RhdGUuaGVpZ2h0IDwgdGhpcy5mb250T3B0aW9ucy5taW5IZ3QpIHtcbiAgICAgIHN0YXRlLmhlaWdodCA9IHRoaXMuZm9udE9wdGlvbnMubWluSGd0O1xuICAgIH1cblxuICAgIHRoaXMubGluZXMgPSBzdGF0ZS5saW5lcztcbiAgICB0aGlzLmxpbmVDb3VudCA9IHN0YXRlLmxpbmVzLmxlbmd0aDtcbiAgICB0aGlzLnNpemUud2lkdGggPSBzdGF0ZS53aWR0aDtcbiAgICB0aGlzLnNpemUuaGVpZ2h0ID0gc3RhdGUuaGVpZ2h0O1xuICAgIHRoaXMuc2VsZWN0ZWRTdGF0ZSA9IHNlbGVjdGVkO1xuICAgIHRoaXMuaG92ZXJTdGF0ZSA9IGhvdmVyO1xuXG4gICAgdGhpcy5sYWJlbERpcnR5ID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBsYWJlbCBpcyB2aXNpYmxlXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgbGFiZWwgd2lsbCBiZSBzaG93LCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZpc2libGUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zaXplLndpZHRoID09PSAwIHx8XG4gICAgICB0aGlzLnNpemUuaGVpZ2h0ID09PSAwIHx8XG4gICAgICB0aGlzLmVsZW1lbnRPcHRpb25zLmxhYmVsID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gbm90aGluZyB0byBkaXNwbGF5XG4gICAgfVxuXG4gICAgY29uc3Qgdmlld0ZvbnRTaXplID0gdGhpcy5mb250T3B0aW9ucy5zaXplICogdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgaWYgKHZpZXdGb250U2l6ZSA8IHRoaXMuZWxlbWVudE9wdGlvbnMuc2NhbGluZy5sYWJlbC5kcmF3VGhyZXNob2xkIC0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUb28gc21hbGwgb3IgdG9vIGZhciBhd2F5IHRvIHNob3dcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYWJlbDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ29uc3RydWN0b3IoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBuYXRpdmVDb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbi8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuY29uc3RydWN0XG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShuYXRpdmVDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xuXG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBuYXRpdmVDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG52YXIgRk9SQ0VEID0gTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUc7XG5cbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06IEZPUkNFRCB9LCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFDb25zdHJ1Y3RvcihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFDb25zdHJ1Y3Rvcihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiBuYXRpdmVDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgIGFwcGx5KHB1c2gsICRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGFwcGx5KGJpbmQsIFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdFByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IGFwcGx5KFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC5jb25zdHJ1Y3QnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlJlZmxlY3QuY29uc3RydWN0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIHNldFByb3RvdHlwZU9mOiBzZXRQcm90b3R5cGVPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfc2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRzZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkY3JlYXRlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgImltcG9ydCBfT2JqZWN0JHNldFByb3RvdHlwZU9mIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanNcIjtcbmltcG9ydCBfYmluZEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9iaW5kLmpzXCI7XG5pbXBvcnQgX09iamVjdCRnZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICB2YXIgX2NvbnRleHQ7XG4gIF9nZXRQcm90b3R5cGVPZiA9IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPyBfYmluZEluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBfT2JqZWN0JGdldFByb3RvdHlwZU9mKS5jYWxsKF9jb250ZXh0KSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IF9PYmplY3QkZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59IiwgIi8qKlxuICogVGhlIEJhc2UgY2xhc3MgZm9yIGFsbCBOb2Rlcy5cbiAqL1xuY2xhc3MgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlID0gbGFiZWxNb2R1bGU7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIHRoaXMudG9wID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubGVmdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLndpZHRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmFkaXVzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWFyZ2luID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVmcmVzaE5lZWRlZCA9IHRydWU7XG4gICAgdGhpcy5ib3VuZGluZ0JveCA9IHsgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgYm90dG9tOiAwIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKSB7XG4gICAgdGhpcy5tYXJnaW4gPSB7fTtcbiAgICBpZiAodGhpcy5vcHRpb25zLm1hcmdpbikge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMubWFyZ2luID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhpcy5tYXJnaW4udG9wID0gdGhpcy5vcHRpb25zLm1hcmdpbi50b3A7XG4gICAgICAgIHRoaXMubWFyZ2luLnJpZ2h0ID0gdGhpcy5vcHRpb25zLm1hcmdpbi5yaWdodDtcbiAgICAgICAgdGhpcy5tYXJnaW4uYm90dG9tID0gdGhpcy5vcHRpb25zLm1hcmdpbi5ib3R0b207XG4gICAgICAgIHRoaXMubWFyZ2luLmxlZnQgPSB0aGlzLm9wdGlvbnMubWFyZ2luLmxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1hcmdpbi50b3AgPSB0aGlzLm9wdGlvbnMubWFyZ2luO1xuICAgICAgICB0aGlzLm1hcmdpbi5yaWdodCA9IHRoaXMub3B0aW9ucy5tYXJnaW47XG4gICAgICAgIHRoaXMubWFyZ2luLmJvdHRvbSA9IHRoaXMub3B0aW9ucy5tYXJnaW47XG4gICAgICAgIHRoaXMubWFyZ2luLmxlZnQgPSB0aGlzLm9wdGlvbnMubWFyZ2luO1xuICAgICAgfVxuICAgIH1cbiAgICBsYWJlbE1vZHVsZS5hZGp1c3RTaXplcyh0aGlzLm1hcmdpbik7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIE1hdGguYWJzKHRoaXMud2lkdGggLyAyIC8gTWF0aC5jb3MoYW5nbGUpKSxcbiAgICAgICAgTWF0aC5hYnModGhpcy5oZWlnaHQgLyAyIC8gTWF0aC5zaW4oYW5nbGUpKVxuICAgICAgKSArIGJvcmRlcldpZHRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGVuYWJsZVNoYWRvdyhjdHgsIHZhbHVlcykge1xuICAgIGlmICh2YWx1ZXMuc2hhZG93KSB7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSB2YWx1ZXMuc2hhZG93Q29sb3I7XG4gICAgICBjdHguc2hhZG93Qmx1ciA9IHZhbHVlcy5zaGFkb3dTaXplO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFggPSB2YWx1ZXMuc2hhZG93WDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gdmFsdWVzLnNoYWRvd1k7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcykge1xuICAgIGlmICh2YWx1ZXMuc2hhZG93KSB7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSBcInJnYmEoMCwwLDAsMClcIjtcbiAgICAgIGN0eC5zaGFkb3dCbHVyID0gMDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gMDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBlbmFibGVCb3JkZXJEYXNoZXMoY3R4LCB2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWVzLmJvcmRlckRhc2hlcyAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChjdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgZGFzaGVzID0gdmFsdWVzLmJvcmRlckRhc2hlcztcbiAgICAgICAgaWYgKGRhc2hlcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGRhc2hlcyA9IFs1LCAxNV07XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnNldExpbmVEYXNoKGRhc2hlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJzZXRMaW5lRGFzaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4gVGhlIGRhc2hlZCBib3JkZXJzIGNhbm5vdCBiZSB1c2VkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5ib3JkZXJEYXNoZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBkaXNhYmxlQm9yZGVyRGFzaGVzKGN0eCwgdmFsdWVzKSB7XG4gICAgaWYgKHZhbHVlcy5ib3JkZXJEYXNoZXMgIT09IGZhbHNlKSB7XG4gICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4LnNldExpbmVEYXNoKFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJzZXRMaW5lRGFzaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci4gVGhlIGRhc2hlZCBib3JkZXJzIGNhbm5vdCBiZSB1c2VkLlwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyRGFzaGVzID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5ib3JkZXJEYXNoZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBzaGFwZSBvZiBhIG5vZGUgbmVlZHMgdG8gYmUgcmVjYWxjdWxhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIG5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5yZWZyZXNoTmVlZGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBsb2NhdGlvbiB0byByZXNldCB0aGlzIG1lbWJlci5cbiAgICAgIC8vIEhvd2V2ZXIsIGluIHRoZSBjdXJyZW50IGxvZ2ljLCBpdCBpcyB0aGUgbW9zdCBjb252ZW5pZW50IG9uZS5cbiAgICAgIHRoaXMucmVmcmVzaE5lZWRlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMud2lkdGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5kaWZmZXJlbnRTdGF0ZShzZWxlY3RlZCwgaG92ZXIpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcykge1xuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gdmFsdWVzLmJvcmRlcldpZHRoIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG5cbiAgICBjdHgubGluZVdpZHRoID0gTWF0aC5taW4odGhpcy53aWR0aCwgYm9yZGVyV2lkdGgpO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IHZhbHVlcy5ib3JkZXJDb2xvcjtcbiAgICBjdHguZmlsbFN0eWxlID0gdmFsdWVzLmNvbG9yO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgcGVyZm9ybVN0cm9rZShjdHgsIHZhbHVlcykge1xuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gdmFsdWVzLmJvcmRlcldpZHRoIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG5cbiAgICAvL2RyYXcgZGFzaGVkIGJvcmRlciBpZiBlbmFibGVkLCBzYXZlIGFuZCByZXN0b3JlIGlzIHJlcXVpcmVkIGZvciBmaXJlZm94IG5vdCB0byBjcmFzaCBvbiB1bml4LlxuICAgIGN0eC5zYXZlKCk7XG4gICAgLy8gaWYgYm9yZGVycyBhcmUgemVybyB3aWR0aCwgdGhleSB3aWxsIGJlIGRyYXduIHdpdGggd2lkdGggMSBieSBkZWZhdWx0LiBUaGlzIHByZXZlbnRzIHRoYXRcbiAgICBpZiAoYm9yZGVyV2lkdGggPiAwKSB7XG4gICAgICB0aGlzLmVuYWJsZUJvcmRlckRhc2hlcyhjdHgsIHZhbHVlcyk7XG4gICAgICAvL2RyYXcgdGhlIGJvcmRlclxuICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgLy9kaXNhYmxlIGRhc2hlZCBib3JkZXIgZm9yIG90aGVyIGVsZW1lbnRzXG4gICAgICB0aGlzLmRpc2FibGVCb3JkZXJEYXNoZXMoY3R4LCB2YWx1ZXMpO1xuICAgIH1cbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgcGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpIHtcbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5maWxsU3R5bGUgPSB2YWx1ZXMuY29sb3I7XG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICAvLyBkcmF3IHRoZSBiYWNrZ3JvdW5kXG4gICAgY3R4LmZpbGwoKTtcbiAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG5cbiAgICBjdHgucmVzdG9yZSgpO1xuICAgIHRoaXMucGVyZm9ybVN0cm9rZShjdHgsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1hcmdpblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZEJvdW5kaW5nQm94TWFyZ2luKG1hcmdpbikge1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCAtPSBtYXJnaW47XG4gICAgdGhpcy5ib3VuZGluZ0JveC50b3AgLT0gbWFyZ2luO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICs9IG1hcmdpbjtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ICs9IG1hcmdpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgY2FsbC5cbiAgICpcbiAgICogRG9pbmcgaXQgbGlrZSB0aGlzIG1ha2VzIGl0IGVhc2llciB0byBvdmVycmlkZVxuICAgKiBpbiB0aGUgY2hpbGQgY2xhc3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAoY3R4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB9XG5cbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gdGhpcy5sZWZ0O1xuICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0gdGhpcy50b3A7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSB0aGlzLnRvcCArIHRoaXMuaGVpZ2h0O1xuICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB0aGlzLmxlZnQgKyB0aGlzLndpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgY2FsbC5cbiAgICogVGhpcyBhY3RzIGFzIGEgc3R1YiB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcikge1xuICAgIHRoaXMuX3VwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGRpbWVuc2lvbnMgdG8gdXNlIGZvciBub2RlcyB3aXRoIGFuIGludGVybmFsIGxhYmVsXG4gICAqXG4gICAqIEN1cnJlbnRseSwgdGhlc2UgYXJlOiBDaXJjbGUsIEVsbGlwc2UsIERhdGFiYXNlLCBCb3hcbiAgICogVGhlIG90aGVyIG5vZGVzIGhhdmUgZXh0ZXJuYWwgbGFiZWxzLCBhbmQgd2lsbCBub3QgY2FsbCB0aGlzIG1ldGhvZFxuICAgKlxuICAgKiBJZiB0aGVyZSBpcyBubyBsYWJlbCwgZGVjZW50IGRlZmF1bHQgdmFsdWVzIGFyZSBzdXBwbGllZC5cbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqIEByZXR1cm5zIHt7d2lkdGg6bnVtYmVyLCBoZWlnaHQ6bnVtYmVyfX1cbiAgICovXG4gIGdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICAvLyBOT1RFOiBwcmV2aW91c2x5ICd0ZXh0U2l6ZScgd2FzIG5vdCBwdXQgaW4gJ3RoaXMnIGZvciBFbGxpcHNlXG4gICAgLy8gVE9ETzogZXhhbWluZSB0aGUgY29uc2VxdWVuY2VzLlxuICAgIHRoaXMudGV4dFNpemUgPSB0aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICBsZXQgd2lkdGggPSB0aGlzLnRleHRTaXplLndpZHRoO1xuICAgIGxldCBoZWlnaHQgPSB0aGlzLnRleHRTaXplLmhlaWdodDtcblxuICAgIGNvbnN0IERFRkFVTFRfU0laRSA9IDE0O1xuICAgIGlmICh3aWR0aCA9PT0gMCkge1xuICAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gdGhlcmUgaXMgbm8gbGFiZWwgdGV4dCBzZXRcbiAgICAgIHdpZHRoID0gREVGQVVMVF9TSVpFOyAvLyB1c2UgYSBkZWNlbnQgZGVmYXVsdFxuICAgICAgaGVpZ2h0ID0gREVGQVVMVF9TSVpFOyAvLyBpZiB3aWR0aCB6ZXJvLCB0aGVuIGhlaWdodCBhbHNvIGFsd2F5cyB6ZXJvXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5vZGVCYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4uL3V0aWwvTm9kZUJhc2VcIjtcbmltcG9ydCB7IGRyYXdSb3VuZFJlY3QgfSBmcm9tIFwiLi4vdXRpbC9zaGFwZXNcIjtcblxuLyoqXG4gKiBBIEJveCBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVCYXNlXG4gKi9cbmNsYXNzIEJveCBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCwgaG92ZXIgPSB0aGlzLmhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgICB0aGlzLndpZHRoID0gZGltZW5zaW9ucy53aWR0aCArIHRoaXMubWFyZ2luLnJpZ2h0ICsgdGhpcy5tYXJnaW4ubGVmdDtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHQgKyB0aGlzLm1hcmdpbi50b3AgKyB0aGlzLm1hcmdpbi5ib3R0b207XG4gICAgICB0aGlzLnJhZGl1cyA9IHRoaXMud2lkdGggLyAyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZHJhd1JvdW5kUmVjdChcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMubGVmdCxcbiAgICAgIHRoaXMudG9wLFxuICAgICAgdGhpcy53aWR0aCxcbiAgICAgIHRoaXMuaGVpZ2h0LFxuICAgICAgdmFsdWVzLmJvcmRlclJhZGl1c1xuICAgICk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoXG4gICAgICBjdHgsXG4gICAgICB0aGlzLmxlZnQgKyB0aGlzLnRleHRTaXplLndpZHRoIC8gMiArIHRoaXMubWFyZ2luLmxlZnQsXG4gICAgICB0aGlzLnRvcCArIHRoaXMudGV4dFNpemUuaGVpZ2h0IC8gMiArIHRoaXMubWFyZ2luLnRvcCxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgaG92ZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSwgY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICB0aGlzLl91cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG5cbiAgICBjb25zdCBib3JkZXJSYWRpdXMgPSB0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmJvcmRlclJhZGl1czsgLy8gb25seSBlZmZlY3RpdmUgZm9yIGJveFxuICAgIHRoaXMuX2FkZEJvdW5kaW5nQm94TWFyZ2luKGJvcmRlclJhZGl1cyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIGlmIChjdHgpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCk7XG4gICAgfVxuICAgIGNvbnN0IGJvcmRlcldpZHRoID0gdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIE1hdGgubWluKFxuICAgICAgICBNYXRoLmFicyh0aGlzLndpZHRoIC8gMiAvIE1hdGguY29zKGFuZ2xlKSksXG4gICAgICAgIE1hdGguYWJzKHRoaXMuaGVpZ2h0IC8gMiAvIE1hdGguc2luKGFuZ2xlKSlcbiAgICAgICkgKyBib3JkZXJXaWR0aFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm94O1xuIiwgImltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi9Ob2RlQmFzZVwiO1xuaW1wb3J0IHsgZHJhd0NpcmNsZSB9IGZyb20gXCIuL3NoYXBlc1wiO1xuXG4vKipcbiAqIE5PVEU6IFRoaXMgaXMgYSBiYWQgYmFzZSBjbGFzc1xuICpcbiAqIENoaWxkIGNsYXNzZXMgYXJlOlxuICpcbiAqICAgSW1hZ2UgICAgICAgLSB1c2VzICpvbmx5KiBpbWFnZSBtZXRob2RzXG4gKiAgIENpcmNsZSAgICAgIC0gdXNlcyAqb25seSogX2RyYXdSYXdDaXJjbGVcbiAqICAgQ2lyY2xlSW1hZ2UgLSB1c2VzIGFsbFxuICpcbiAqIFRPRE86IFJlZmFjdG9yLCBtb3ZlIF9kcmF3UmF3Q2lyY2xlIHRvIGRpZmZlcmVudCBtb2R1bGUsIGRlcml2ZSBDaXJjbGUgZnJvbSBOb2RlQmFzZVxuICogICAgICAgUmVuYW1lIHRoaXMgdG8gSW1hZ2VCYXNlXG4gKiAgICAgICBDb25zb2xpZGF0ZSBjb21tb24gY29kZSBpbiBJbWFnZSBhbmQgQ2lyY2xlSW1hZ2UgdG8gYmFzZSBjbGFzc1xuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBDaXJjbGVJbWFnZUJhc2UgZXh0ZW5kcyBOb2RlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5sYWJlbE9mZnNldCA9IDA7XG4gICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbaW1hZ2VPYmpdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbaW1hZ2VPYmpBbHRdXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMsIGltYWdlT2JqLCBpbWFnZU9iakFsdCkge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIShpbWFnZU9iaiA9PT0gdW5kZWZpbmVkICYmIGltYWdlT2JqQWx0ID09PSB1bmRlZmluZWQpKSB7XG4gICAgICB0aGlzLnNldEltYWdlcyhpbWFnZU9iaiwgaW1hZ2VPYmpBbHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGltYWdlcyBmb3IgdGhpcyBub2RlLlxuICAgKlxuICAgKiBUaGUgaW1hZ2VzIGNhbiBiZSB1cGRhdGVkIGFmdGVyIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygb3B0aW9ucztcbiAgICogdGhlcmVmb3JlLCB0aGlzIG1ldGhvZCBuZWVkcyB0byBiZSByZWVudHJhbnQuXG4gICAqXG4gICAqIEZvciBjb3JyZWN0IHdvcmtpbmcgaW4gZXJyb3IgY2FzZXMsIGl0IGlzIG5lY2Vzc2FyeSB0byBwcm9wZXJseSBzZXRcbiAgICogZmllbGQgJ25vZGVzLmJyb2tlbkltYWdlJyBpbiB0aGUgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtJbWFnZX0gaW1hZ2VPYmogIHJlcXVpcmVkOyBtYWluIGltYWdlIHRvIHNob3cgZm9yIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge0ltYWdlfHVuZGVmaW5lZH0gaW1hZ2VPYmpBbHQgb3B0aW9uYWw7IGltYWdlIHRvIHNob3cgd2hlbiBub2RlIGlzIHNlbGVjdGVkXG4gICAqL1xuICBzZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KSB7XG4gICAgaWYgKGltYWdlT2JqQWx0ICYmIHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuaW1hZ2VPYmogPSBpbWFnZU9iakFsdDtcbiAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSBpbWFnZU9iajtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbWFnZU9iaiA9IGltYWdlT2JqO1xuICAgICAgdGhpcy5pbWFnZU9iakFsdCA9IGltYWdlT2JqQWx0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgc2VsZWN0aW9uIGFuZCBzd2l0Y2ggYmV0d2VlbiB0aGUgYmFzZSBhbmQgdGhlIHNlbGVjdGVkIGltYWdlLlxuICAgKlxuICAgKiBEbyB0aGUgc3dpdGNoIG9ubHkgaWYgaW1hZ2VPYmpBbHQgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkIHZhbHVlIG9mIG5ldyBzZWxlY3RlZCBzdGF0ZSBmb3IgY3VycmVudCBub2RlXG4gICAqL1xuICBzd2l0Y2hJbWFnZXMoc2VsZWN0ZWQpIHtcbiAgICBjb25zdCBzZWxlY3Rpb25fY2hhbmdlZCA9XG4gICAgICAoc2VsZWN0ZWQgJiYgIXRoaXMuc2VsZWN0ZWQpIHx8ICghc2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3RlZCk7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkOyAvLyBSZW1lbWJlciBuZXcgc2VsZWN0aW9uXG5cbiAgICBpZiAodGhpcy5pbWFnZU9iakFsdCAhPT0gdW5kZWZpbmVkICYmIHNlbGVjdGlvbl9jaGFuZ2VkKSB7XG4gICAgICBjb25zdCBpbWFnZVRtcCA9IHRoaXMuaW1hZ2VPYmo7XG4gICAgICB0aGlzLmltYWdlT2JqID0gdGhpcy5pbWFnZU9iakFsdDtcbiAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSBpbWFnZVRtcDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBJbWFnZSBQYWRkaW5nIGZyb20gbm9kZSBvcHRpb25zXG4gICAqXG4gICAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsbGVmdDogbnVtYmVyLGJvdHRvbTogbnVtYmVyLHJpZ2h0OiBudW1iZXJ9fSBpbWFnZSBwYWRkaW5nIGluc2lkZSB0aGlzIHNoYXBlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0SW1hZ2VQYWRkaW5nKCkge1xuICAgIGNvbnN0IGltZ1BhZGRpbmcgPSB7IHRvcDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCwgbGVmdDogMCB9O1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2VQYWRkaW5nKSB7XG4gICAgICBjb25zdCBvcHRJbWdQYWRkaW5nID0gdGhpcy5vcHRpb25zLmltYWdlUGFkZGluZztcbiAgICAgIGlmICh0eXBlb2Ygb3B0SW1nUGFkZGluZyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGltZ1BhZGRpbmcudG9wID0gb3B0SW1nUGFkZGluZy50b3A7XG4gICAgICAgIGltZ1BhZGRpbmcucmlnaHQgPSBvcHRJbWdQYWRkaW5nLnJpZ2h0O1xuICAgICAgICBpbWdQYWRkaW5nLmJvdHRvbSA9IG9wdEltZ1BhZGRpbmcuYm90dG9tO1xuICAgICAgICBpbWdQYWRkaW5nLmxlZnQgPSBvcHRJbWdQYWRkaW5nLmxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbWdQYWRkaW5nLnRvcCA9IG9wdEltZ1BhZGRpbmc7XG4gICAgICAgIGltZ1BhZGRpbmcucmlnaHQgPSBvcHRJbWdQYWRkaW5nO1xuICAgICAgICBpbWdQYWRkaW5nLmJvdHRvbSA9IG9wdEltZ1BhZGRpbmc7XG4gICAgICAgIGltZ1BhZGRpbmcubGVmdCA9IG9wdEltZ1BhZGRpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGltZ1BhZGRpbmc7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0IHRoZSBub2RlIGRpbWVuc2lvbnMgZm9yIGEgbG9hZGVkIGltYWdlLlxuICAgKlxuICAgKiBQcmU6IHRoaXMuaW1hZ2VPYmogaXMgdmFsaWRcbiAgICovXG4gIF9yZXNpemVJbWFnZSgpIHtcbiAgICBsZXQgd2lkdGgsIGhlaWdodDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLnVzZUltYWdlU2l6ZSA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIFVzZSB0aGUgc2l6ZSBwcm9wZXJ0eVxuICAgICAgbGV0IHJhdGlvX3dpZHRoID0gMTtcbiAgICAgIGxldCByYXRpb19oZWlnaHQgPSAxO1xuXG4gICAgICAvLyBPbmx5IGNhbGN1bGF0ZSB0aGUgcHJvcGVyIHJhdGlvIGlmIGJvdGggd2lkdGggYW5kIGhlaWdodCBub3QgemVyb1xuICAgICAgaWYgKHRoaXMuaW1hZ2VPYmoud2lkdGggJiYgdGhpcy5pbWFnZU9iai5oZWlnaHQpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VPYmoud2lkdGggPiB0aGlzLmltYWdlT2JqLmhlaWdodCkge1xuICAgICAgICAgIHJhdGlvX3dpZHRoID0gdGhpcy5pbWFnZU9iai53aWR0aCAvIHRoaXMuaW1hZ2VPYmouaGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJhdGlvX2hlaWdodCA9IHRoaXMuaW1hZ2VPYmouaGVpZ2h0IC8gdGhpcy5pbWFnZU9iai53aWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3aWR0aCA9IHRoaXMub3B0aW9ucy5zaXplICogMiAqIHJhdGlvX3dpZHRoO1xuICAgICAgaGVpZ2h0ID0gdGhpcy5vcHRpb25zLnNpemUgKiAyICogcmF0aW9faGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2UgdGhlIGltYWdlIHNpemUgd2l0aCBpbWFnZSBwYWRkaW5nXG4gICAgICBjb25zdCBpbWdQYWRkaW5nID0gdGhpcy5fZ2V0SW1hZ2VQYWRkaW5nKCk7XG4gICAgICB3aWR0aCA9IHRoaXMuaW1hZ2VPYmoud2lkdGggKyBpbWdQYWRkaW5nLmxlZnQgKyBpbWdQYWRkaW5nLnJpZ2h0O1xuICAgICAgaGVpZ2h0ID0gdGhpcy5pbWFnZU9iai5oZWlnaHQgKyBpbWdQYWRkaW5nLnRvcCArIGltZ1BhZGRpbmcuYm90dG9tO1xuICAgIH1cblxuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICB0aGlzLnJhZGl1cyA9IDAuNSAqIHRoaXMud2lkdGg7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdSYXdDaXJjbGUoY3R4LCB4LCB5LCB2YWx1ZXMpIHtcbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZHJhd0NpcmNsZShjdHgsIHgsIHksIHZhbHVlcy5zaXplKTtcbiAgICB0aGlzLnBlcmZvcm1GaWxsKGN0eCwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3SW1hZ2VBdFBvc2l0aW9uKGN0eCwgdmFsdWVzKSB7XG4gICAgaWYgKHRoaXMuaW1hZ2VPYmoud2lkdGggIT0gMCkge1xuICAgICAgLy8gZHJhdyB0aGUgaW1hZ2VcbiAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IHZhbHVlcy5vcGFjaXR5ICE9PSB1bmRlZmluZWQgPyB2YWx1ZXMub3BhY2l0eSA6IDE7XG5cbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcblxuICAgICAgbGV0IGZhY3RvciA9IDE7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5pbnRlcnBvbGF0aW9uID09PSB0cnVlKSB7XG4gICAgICAgIGZhY3RvciA9IHRoaXMuaW1hZ2VPYmoud2lkdGggLyB0aGlzLndpZHRoIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGltZ1BhZGRpbmcgPSB0aGlzLl9nZXRJbWFnZVBhZGRpbmcoKTtcblxuICAgICAgY29uc3QgaW1nUG9zTGVmdCA9IHRoaXMubGVmdCArIGltZ1BhZGRpbmcubGVmdDtcbiAgICAgIGNvbnN0IGltZ1Bvc1RvcCA9IHRoaXMudG9wICsgaW1nUGFkZGluZy50b3A7XG4gICAgICBjb25zdCBpbWdXaWR0aCA9IHRoaXMud2lkdGggLSBpbWdQYWRkaW5nLmxlZnQgLSBpbWdQYWRkaW5nLnJpZ2h0O1xuICAgICAgY29uc3QgaW1nSGVpZ2h0ID0gdGhpcy5oZWlnaHQgLSBpbWdQYWRkaW5nLnRvcCAtIGltZ1BhZGRpbmcuYm90dG9tO1xuICAgICAgdGhpcy5pbWFnZU9iai5kcmF3SW1hZ2VBdFBvc2l0aW9uKFxuICAgICAgICBjdHgsXG4gICAgICAgIGZhY3RvcixcbiAgICAgICAgaW1nUG9zTGVmdCxcbiAgICAgICAgaW1nUG9zVG9wLFxuICAgICAgICBpbWdXaWR0aCxcbiAgICAgICAgaW1nSGVpZ2h0XG4gICAgICApO1xuXG4gICAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd0ltYWdlTGFiZWwoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcblxuICAgIGlmICh0aGlzLmhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvZmZzZXQgPSB0aGlzLmhlaWdodCAqIDAuNTtcbiAgICAgIGNvbnN0IGxhYmVsRGltZW5zaW9ucyA9IHRoaXMubGFiZWxNb2R1bGUuZ2V0VGV4dFNpemUoXG4gICAgICAgIGN0eCxcbiAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgIGhvdmVyXG4gICAgICApO1xuICAgICAgaWYgKGxhYmVsRGltZW5zaW9ucy5saW5lQ291bnQgPj0gMSkge1xuICAgICAgICBvZmZzZXQgKz0gbGFiZWxEaW1lbnNpb25zLmhlaWdodCAvIDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeUxhYmVsID0geSArIG9mZnNldDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwpIHtcbiAgICAgIHRoaXMubGFiZWxPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHgsIHlMYWJlbCwgc2VsZWN0ZWQsIGhvdmVyLCBcImhhbmdpbmdcIik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlSW1hZ2VCYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQ2lyY2xlSW1hZ2VCYXNlIGZyb20gXCIuLi91dGlsL0NpcmNsZUltYWdlQmFzZVwiO1xuXG4vKipcbiAqIEEgQ2lyY2xlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgQ2lyY2xlSW1hZ2VCYXNlXG4gKi9cbmNsYXNzIENpcmNsZSBleHRlbmRzIENpcmNsZUltYWdlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gICAgdGhpcy5fc2V0TWFyZ2lucyhsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5nZXREaW1lbnNpb25zRnJvbUxhYmVsKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcblxuICAgICAgY29uc3QgZGlhbWV0ZXIgPSBNYXRoLm1heChcbiAgICAgICAgZGltZW5zaW9ucy53aWR0aCArIHRoaXMubWFyZ2luLnJpZ2h0ICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgICAgZGltZW5zaW9ucy5oZWlnaHQgKyB0aGlzLm1hcmdpbi50b3AgKyB0aGlzLm1hcmdpbi5ib3R0b21cbiAgICAgICk7XG5cbiAgICAgIHRoaXMub3B0aW9ucy5zaXplID0gZGlhbWV0ZXIgLyAyOyAvLyBOT1RFOiB0aGlzIHNpemUgZmllbGQgb25seSBzZXQgaGVyZSwgbm90IGluIEVsbGlwc2UsIERhdGFiYXNlLCBCb3hcbiAgICAgIHRoaXMud2lkdGggPSBkaWFtZXRlcjtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gZGlhbWV0ZXI7XG4gICAgICB0aGlzLnJhZGl1cyA9IHRoaXMud2lkdGggLyAyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICB0aGlzLl9kcmF3UmF3Q2lyY2xlKGN0eCwgeCwgeSwgdmFsdWVzKTtcblxuICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goeCwgeSk7XG4gICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5sZWZ0ICsgdGhpcy50ZXh0U2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgeSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgaG92ZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goeCwgeSkge1xuICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0geSAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHggLSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0geCArIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0geSArIHRoaXMub3B0aW9ucy5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4KSB7XG4gICAgaWYgKGN0eCkge1xuICAgICAgdGhpcy5yZXNpemUoY3R4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud2lkdGggKiAwLjU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgQ2lyY2xlSW1hZ2VCYXNlIGZyb20gXCIuLi91dGlsL0NpcmNsZUltYWdlQmFzZVwiO1xuXG4vKipcbiAqIEEgQ2lyY3VsYXJJbWFnZSBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIENpcmNsZUltYWdlQmFzZVxuICovXG5jbGFzcyBDaXJjdWxhckltYWdlIGV4dGVuZHMgQ2lyY2xlSW1hZ2VCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqQWx0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSwgaW1hZ2VPYmosIGltYWdlT2JqQWx0KSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuXG4gICAgdGhpcy5zZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCwgaG92ZXIgPSB0aGlzLmhvdmVyKSB7XG4gICAgY29uc3QgaW1hZ2VBYnNlbnQgPVxuICAgICAgdGhpcy5pbWFnZU9iai5zcmMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5pbWFnZU9iai53aWR0aCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLmltYWdlT2JqLmhlaWdodCA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGltYWdlQWJzZW50KSB7XG4gICAgICBjb25zdCBkaWFtZXRlciA9IHRoaXMub3B0aW9ucy5zaXplICogMjtcbiAgICAgIHRoaXMud2lkdGggPSBkaWFtZXRlcjtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gZGlhbWV0ZXI7XG4gICAgICB0aGlzLnJhZGl1cyA9IDAuNSAqIHRoaXMud2lkdGg7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYW4gaW1hZ2UgaXMgcHJlc2VudCwgaS5lLiB0aGlzLmltYWdlT2JqIGlzIHZhbGlkLlxuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICB0aGlzLl9yZXNpemVJbWFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5zd2l0Y2hJbWFnZXMoc2VsZWN0ZWQpO1xuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICBsZXQgbGFiZWxYID0geCxcbiAgICAgIGxhYmVsWSA9IHk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5jb29yZGluYXRlT3JpZ2luID09PSBcInRvcC1sZWZ0XCIpIHtcbiAgICAgIHRoaXMubGVmdCA9IHg7XG4gICAgICB0aGlzLnRvcCA9IHk7XG4gICAgICBsYWJlbFggKz0gdGhpcy53aWR0aCAvIDI7XG4gICAgICBsYWJlbFkgKz0gdGhpcy5oZWlnaHQgLyAyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG4gICAgfVxuXG4gICAgLy8gZHJhdyB0aGUgYmFja2dyb3VuZCBjaXJjbGUuIElNUE9SVEFOVDogdGhlIHN0cm9rZSBpbiB0aGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSBjbGlwIG1ldGhvZCBiZWxvdy5cbiAgICB0aGlzLl9kcmF3UmF3Q2lyY2xlKGN0eCwgbGFiZWxYLCBsYWJlbFksIHZhbHVlcyk7XG5cbiAgICAvLyBub3cgd2UgZHJhdyBpbiB0aGUgY2lyY2xlLCB3ZSBzYXZlIHNvIHdlIGNhbiByZXZlcnQgdGhlIGNsaXAgb3BlcmF0aW9uIGFmdGVyIGRyYXdpbmcuXG4gICAgY3R4LnNhdmUoKTtcbiAgICAvLyBjbGlwIGlzIHVzZWQgdG8gdXNlIHRoZSBzdHJva2UgaW4gZHJhd1Jhd0NpcmNsZSBhcyBhbiBhcmVhIHRoYXQgd2UgY2FuIGRyYXcgaW4uXG4gICAgY3R4LmNsaXAoKTtcbiAgICAvLyBkcmF3IHRoZSBpbWFnZVxuICAgIHRoaXMuX2RyYXdJbWFnZUF0UG9zaXRpb24oY3R4LCB2YWx1ZXMpO1xuICAgIC8vIHJlc3RvcmUgc28gd2UgY2FuIGFnYWluIGRyYXcgb24gdGhlIGZ1bGwgY2FudmFzXG4gICAgY3R4LnJlc3RvcmUoKTtcblxuICAgIHRoaXMuX2RyYXdJbWFnZUxhYmVsKGN0eCwgbGFiZWxYLCBsYWJlbFksIHNlbGVjdGVkLCBob3Zlcik7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpO1xuICB9XG5cbiAgLy8gVE9ETzogY29tcGFyZSB3aXRoIENpcmNsZS51cGRhdGVCb3VuZGluZ0JveCgpLCBjb25zb2xpZGF0ZT8gTW9yZSBzdHVmZiBpcyBoYXBwZW5pbmcgaGVyZVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuY29vcmRpbmF0ZU9yaWdpbiA9PT0gXCJ0b3AtbGVmdFwiKSB7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSB4O1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IHggKyB0aGlzLm9wdGlvbnMuc2l6ZSAqIDI7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHkgKyB0aGlzLm9wdGlvbnMuc2l6ZSAqIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gudG9wID0geSAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0geCAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCA9IHggKyB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0geSArIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGNvbXBhcmUgd2l0aCBJbWFnZS51cGRhdGVCb3VuZGluZ0JveCgpLCBjb25zb2xpZGF0ZT9cbiAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSBNYXRoLm1pbihcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCxcbiAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0XG4gICAgKTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0LFxuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQgKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGhcbiAgICApO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0gTWF0aC5tYXgoXG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSxcbiAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICsgdGhpcy5sYWJlbE9mZnNldFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgpIHtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53aWR0aCAqIDAuNTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaXJjdWxhckltYWdlO1xuIiwgImltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi4vdXRpbC9Ob2RlQmFzZVwiO1xuaW1wb3J0IHsgZ2V0U2hhcGUgfSBmcm9tIFwiLi9zaGFwZXNcIjtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBjb25zdHJ1Y3RpbmcgTm9kZS9DbHVzdGVyIFNoYXBlcy5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgU2hhcGVCYXNlIGV4dGVuZHMgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2VsZWN0ZWRdXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hvdmVyXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW3ZhbHVlcz17c2l6ZTogdGhpcy5vcHRpb25zLnNpemV9XVxuICAgKi9cbiAgcmVzaXplKFxuICAgIGN0eCxcbiAgICBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsXG4gICAgaG92ZXIgPSB0aGlzLmhvdmVyLFxuICAgIHZhbHVlcyA9IHsgc2l6ZTogdGhpcy5vcHRpb25zLnNpemUgfVxuICApIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5nZXRUZXh0U2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgICBjb25zdCBzaXplID0gMiAqIHZhbHVlcy5zaXplO1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMuY3VzdG9tU2l6ZVdpZHRoID8/IHNpemU7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMuY3VzdG9tU2l6ZUhlaWdodCA/PyBzaXplO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaGFwZVxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZU11bHRpcGxpZXIgLSBVbnVzZWQhIFRPRE86IFJlbW92ZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIF9kcmF3U2hhcGUoY3R4LCBzaGFwZSwgc2l6ZU11bHRpcGxpZXIsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcblxuICAgIHRoaXMuaW5pdENvbnRleHRGb3JEcmF3KGN0eCwgdmFsdWVzKTtcbiAgICBnZXRTaGFwZShzaGFwZSkoY3R4LCB4LCB5LCB2YWx1ZXMuc2l6ZSk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmljb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pY29uLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjdHguZm9udCA9XG4gICAgICAgICAgKHNlbGVjdGVkID8gXCJib2xkIFwiIDogXCJcIikgK1xuICAgICAgICAgIHRoaXMuaGVpZ2h0IC8gMiArXG4gICAgICAgICAgXCJweCBcIiArXG4gICAgICAgICAgKHRoaXMub3B0aW9ucy5pY29uLmZhY2UgfHwgXCJGb250QXdlc29tZVwiKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMub3B0aW9ucy5pY29uLmNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICAgICAgY3R4LnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XG4gICAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuICAgICAgICBjdHguZmlsbFRleHQodGhpcy5vcHRpb25zLmljb24uY29kZSwgeCwgeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYXdFeHRlcm5hbExhYmVsOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIE5lZWQgdG8gY2FsbCBmb2xsb3dpbmcgaGVyZSBpbiBvcmRlciB0byBlbnN1cmUgdmFsdWUgZm9yXG4gICAgICAgICAgLy8gYHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5oZWlnaHRgLlxuICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGUuY2FsY3VsYXRlTGFiZWxTaXplKFxuICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICBob3ZlcixcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgXCJoYW5naW5nXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHlMYWJlbCA9XG4gICAgICAgICAgICB5ICsgMC41ICogdGhpcy5oZWlnaHQgKyAwLjUgKiB0aGlzLmxhYmVsTW9kdWxlLnNpemUuaGVpZ2h0O1xuICAgICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHgsIHlMYWJlbCwgc2VsZWN0ZWQsIGhvdmVyLCBcImhhbmdpbmdcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgdGhpcy5ib3VuZGluZ0JveC50b3AgPSB5IC0gdGhpcy5vcHRpb25zLnNpemU7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0geCAtIHRoaXMub3B0aW9ucy5zaXplO1xuICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB4ICsgdGhpcy5vcHRpb25zLnNpemU7XG4gICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSB5ICsgdGhpcy5vcHRpb25zLnNpemU7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmxhYmVsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoID4gMCkge1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0ID0gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnRcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS5sZWZ0ICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLndpZHRoXG4gICAgICApO1xuICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20sXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tICsgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmhlaWdodFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2hhcGVCYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgQ3VzdG9tU2hhcGUgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgQ3VzdG9tU2hhcGUgZXh0ZW5kcyBTaGFwZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3R4UmVuZGVyZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlLCBjdHhSZW5kZXJlcikge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlLCBjdHhSZW5kZXJlcik7XG4gICAgdGhpcy5jdHhSZW5kZXJlciA9IGN0eFJlbmRlcmVyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGRpZmZlcmVudCBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICB0aGlzLnJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgLy8gR3VhcmQgcmlnaHQgYXdheSBiZWNhdXNlIHNvbWVvbmUgbWF5IGp1c3QgZHJhdyBpbiB0aGUgZnVuY3Rpb24gaXRzZWxmLlxuICAgIGN0eC5zYXZlKCk7XG4gICAgY29uc3QgZHJhd0xhdGVyID0gdGhpcy5jdHhSZW5kZXJlcih7XG4gICAgICBjdHgsXG4gICAgICBpZDogdGhpcy5vcHRpb25zLmlkLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBzdGF0ZTogeyBzZWxlY3RlZCwgaG92ZXIgfSxcbiAgICAgIHN0eWxlOiB7IC4uLnZhbHVlcyB9LFxuICAgICAgbGFiZWw6IHRoaXMub3B0aW9ucy5sYWJlbCxcbiAgICB9KTtcbiAgICAvLyBSZW5kZXIgdGhlIG5vZGUgc2hhcGUgYmVsbG93IGFycm93cy5cbiAgICBpZiAoZHJhd0xhdGVyLmRyYXdOb2RlICE9IG51bGwpIHtcbiAgICAgIGRyYXdMYXRlci5kcmF3Tm9kZSgpO1xuICAgIH1cbiAgICBjdHgucmVzdG9yZSgpO1xuXG4gICAgaWYgKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCkge1xuICAgICAgLy8gR3VhcmQgdGhlIGV4dGVybmFsIGxhYmVsIChhYm92ZSBhcnJvd3MpIGRyYXdpbmcgZnVuY3Rpb24uXG4gICAgICBjb25zdCBkcmF3RXh0ZXJuYWxMYWJlbCA9IGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbDtcbiAgICAgIGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCA9ICgpID0+IHtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgZHJhd0V4dGVybmFsTGFiZWwoKTtcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGRyYXdMYXRlci5ub2RlRGltZW5zaW9ucykge1xuICAgICAgdGhpcy5jdXN0b21TaXplV2lkdGggPSBkcmF3TGF0ZXIubm9kZURpbWVuc2lvbnMud2lkdGg7XG4gICAgICB0aGlzLmN1c3RvbVNpemVIZWlnaHQgPSBkcmF3TGF0ZXIubm9kZURpbWVuc2lvbnMuaGVpZ2h0O1xuICAgIH1cblxuICAgIHJldHVybiBkcmF3TGF0ZXI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEN1c3RvbVNoYXBlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9kZUJhc2UgZnJvbSBcIi4uL3V0aWwvTm9kZUJhc2VcIjtcbmltcG9ydCB7IGRyYXdEYXRhYmFzZSB9IGZyb20gXCIuLi91dGlsL3NoYXBlc1wiO1xuXG4vKipcbiAqIEEgRGF0YWJhc2UgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBEYXRhYmFzZSBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKi9cbiAgcmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgICAgY29uc3Qgc2l6ZSA9IGRpbWVuc2lvbnMud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG5cbiAgICAgIHRoaXMud2lkdGggPSBzaXplO1xuICAgICAgdGhpcy5oZWlnaHQgPSBzaXplO1xuICAgICAgdGhpcy5yYWRpdXMgPSB0aGlzLndpZHRoIC8gMjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geCB3aWR0aFxuICAgKiBAcGFyYW0ge251bWJlcn0geSBoZWlnaHRcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqIEBwYXJhbSB7QXJyb3dPcHRpb25zfSB2YWx1ZXNcbiAgICovXG4gIGRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIHRoaXMucmVzaXplKGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxlZnQgPSB4IC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuXG4gICAgdGhpcy5pbml0Q29udGV4dEZvckRyYXcoY3R4LCB2YWx1ZXMpO1xuICAgIGRyYXdEYXRhYmFzZShcbiAgICAgIGN0eCxcbiAgICAgIHggLSB0aGlzLndpZHRoIC8gMixcbiAgICAgIHkgLSB0aGlzLmhlaWdodCAvIDIsXG4gICAgICB0aGlzLndpZHRoLFxuICAgICAgdGhpcy5oZWlnaHRcbiAgICApO1xuICAgIHRoaXMucGVyZm9ybUZpbGwoY3R4LCB2YWx1ZXMpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5LCBjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5sZWZ0ICsgdGhpcy50ZXh0U2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgdGhpcy50b3AgKyB0aGlzLnRleHRTaXplLmhlaWdodCAvIDIgKyB0aGlzLm1hcmdpbi50b3AsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGFiYXNlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgRGlhbW9uZCBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBEaWFtb25kIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwiZGlhbW9uZFwiLCA0LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpYW1vbmQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBEb3QgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgRG90IGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwiY2lyY2xlXCIsIDIsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCkge1xuICAgIGlmIChjdHgpIHtcbiAgICAgIHRoaXMucmVzaXplKGN0eCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEb3Q7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb2RlQmFzZSBmcm9tIFwiLi4vdXRpbC9Ob2RlQmFzZVwiO1xuaW1wb3J0IHsgZHJhd0VsbGlwc2UgfSBmcm9tIFwiLi4vdXRpbC9zaGFwZXNcIjtcblxuLyoqXG4gKiBBbSBFbGxpcHNlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgRWxsaXBzZSBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbGVjdGVkXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtob3Zlcl1cbiAgICovXG4gIHJlc2l6ZShjdHgsIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZCwgaG92ZXIgPSB0aGlzLmhvdmVyKSB7XG4gICAgaWYgKHRoaXMubmVlZHNSZWZyZXNoKHNlbGVjdGVkLCBob3ZlcikpIHtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdldERpbWVuc2lvbnNGcm9tTGFiZWwoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgICB0aGlzLmhlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0ICogMjtcbiAgICAgIHRoaXMud2lkdGggPSBkaW1lbnNpb25zLndpZHRoICsgZGltZW5zaW9ucy5oZWlnaHQ7XG4gICAgICB0aGlzLnJhZGl1cyA9IDAuNSAqIHRoaXMud2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICB0aGlzLnJlc2l6ZShjdHgsIHNlbGVjdGVkLCBob3Zlcik7XG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggKiAwLjU7XG4gICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgKiAwLjU7XG5cbiAgICB0aGlzLmluaXRDb250ZXh0Rm9yRHJhdyhjdHgsIHZhbHVlcyk7XG4gICAgZHJhd0VsbGlwc2UoY3R4LCB0aGlzLmxlZnQsIHRoaXMudG9wLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG4gICAgdGhpcy5wZXJmb3JtRmlsbChjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgICB0aGlzLmxhYmVsTW9kdWxlLmRyYXcoY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpIHtcbiAgICBpZiAoY3R4KSB7XG4gICAgICB0aGlzLnJlc2l6ZShjdHgpO1xuICAgIH1cbiAgICBjb25zdCBhID0gdGhpcy53aWR0aCAqIDAuNTtcbiAgICBjb25zdCBiID0gdGhpcy5oZWlnaHQgKiAwLjU7XG4gICAgY29uc3QgdyA9IE1hdGguc2luKGFuZ2xlKSAqIGE7XG4gICAgY29uc3QgaCA9IE1hdGguY29zKGFuZ2xlKSAqIGI7XG4gICAgcmV0dXJuIChhICogYikgLyBNYXRoLnNxcnQodyAqIHcgKyBoICogaCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWxsaXBzZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGVCYXNlIGZyb20gXCIuLi91dGlsL05vZGVCYXNlXCI7XG5cbi8qKlxuICogQW4gaWNvbiByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgTm9kZSBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgTm9kZUJhc2VcbiAqL1xuY2xhc3MgSWNvbiBleHRlbmRzIE5vZGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgICB0aGlzLl9zZXRNYXJnaW5zKGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4IC0gVW51c2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy5pY29uU2l6ZSA9IHtcbiAgICAgICAgd2lkdGg6IE51bWJlcih0aGlzLm9wdGlvbnMuaWNvbi5zaXplKSxcbiAgICAgICAgaGVpZ2h0OiBOdW1iZXIodGhpcy5vcHRpb25zLmljb24uc2l6ZSksXG4gICAgICB9O1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMuaWNvblNpemUud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMuaWNvblNpemUuaGVpZ2h0ICsgdGhpcy5tYXJnaW4udG9wICsgdGhpcy5tYXJnaW4uYm90dG9tO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMub3B0aW9ucy5pY29uLnNpemUgPSB0aGlzLm9wdGlvbnMuaWNvbi5zaXplIHx8IDUwO1xuXG4gICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcbiAgICB0aGlzLl9pY29uKGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYXdFeHRlcm5hbExhYmVsOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGljb25UZXh0U3BhY2luZyA9IDU7XG4gICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5kcmF3KFxuICAgICAgICAgICAgY3R4LFxuICAgICAgICAgICAgdGhpcy5sZWZ0ICsgdGhpcy5pY29uU2l6ZS53aWR0aCAvIDIgKyB0aGlzLm1hcmdpbi5sZWZ0LFxuICAgICAgICAgICAgeSArIHRoaXMuaGVpZ2h0IC8gMiArIGljb25UZXh0U3BhY2luZyxcbiAgICAgICAgICAgIHNlbGVjdGVkXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goeCwgeSk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICovXG4gIHVwZGF0ZUJvdW5kaW5nQm94KHgsIHkpIHtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHkgLSB0aGlzLm9wdGlvbnMuaWNvbi5zaXplICogMC41O1xuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHggLSB0aGlzLm9wdGlvbnMuaWNvbi5zaXplICogMC41O1xuICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSB4ICsgdGhpcy5vcHRpb25zLmljb24uc2l6ZSAqIDAuNTtcbiAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IHkgKyB0aGlzLm9wdGlvbnMuaWNvbi5zaXplICogMC41O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGFiZWxNb2R1bGUuc2l6ZS53aWR0aCA+IDApIHtcbiAgICAgIGNvbnN0IGljb25UZXh0U3BhY2luZyA9IDU7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0LFxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdFxuICAgICAgKTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQgKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGhcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IE1hdGgubWF4KFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSxcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUuaGVpZ2h0ICsgaWNvblRleHRTcGFjaW5nXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXIgLSBVbnVzZWRcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgX2ljb24oY3R4LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcykge1xuICAgIGNvbnN0IGljb25TaXplID0gTnVtYmVyKHRoaXMub3B0aW9ucy5pY29uLnNpemUpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pY29uLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY3R4LmZvbnQgPSBbXG4gICAgICAgIHRoaXMub3B0aW9ucy5pY29uLndlaWdodCAhPSBudWxsXG4gICAgICAgICAgPyB0aGlzLm9wdGlvbnMuaWNvbi53ZWlnaHRcbiAgICAgICAgICA6IHNlbGVjdGVkXG4gICAgICAgICAgPyBcImJvbGRcIlxuICAgICAgICAgIDogXCJcIixcbiAgICAgICAgLy8gSWYgdGhlIHdlaWdodCBpcyBmb3JjZWQgKGZvciBleGFtcGxlIHRvIG1ha2UgRm9udCBBd2Vzb21lIDUgd29ya1xuICAgICAgICAvLyBwcm9wZXJseSkgc3Vic3RpdHV0ZSBzbGlnaHRseSBiaWdnZXIgc2l6ZSBmb3IgYm9sZCBmb250IGZhY2UuXG4gICAgICAgICh0aGlzLm9wdGlvbnMuaWNvbi53ZWlnaHQgIT0gbnVsbCAmJiBzZWxlY3RlZCA/IDUgOiAwKSArXG4gICAgICAgICAgaWNvblNpemUgK1xuICAgICAgICAgIFwicHhcIixcbiAgICAgICAgdGhpcy5vcHRpb25zLmljb24uZmFjZSxcbiAgICAgIF0uam9pbihcIiBcIik7XG5cbiAgICAgIC8vIGRyYXcgaWNvblxuICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMub3B0aW9ucy5pY29uLmNvbG9yIHx8IFwiYmxhY2tcIjtcbiAgICAgIGN0eC50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xuICAgICAgY3R4LnRleHRCYXNlbGluZSA9IFwibWlkZGxlXCI7XG5cbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICAgIGN0eC5maWxsVGV4dCh0aGlzLm9wdGlvbnMuaWNvbi5jb2RlLCB4LCB5KTtcblxuICAgICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiV2hlbiB1c2luZyB0aGUgaWNvbiBzaGFwZSwgeW91IG5lZWQgdG8gZGVmaW5lIHRoZSBjb2RlIGluIHRoZSBpY29uIG9wdGlvbnMgb2JqZWN0LiBUaGlzIGNhbiBiZSBkb25lIHBlciBub2RlIG9yIGdsb2JhbGx5LlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IENpcmNsZUltYWdlQmFzZSBmcm9tIFwiLi4vdXRpbC9DaXJjbGVJbWFnZUJhc2VcIjtcbmltcG9ydCB7IG92ZXJyaWRlT3BhY2l0eSB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBBbiBpbWFnZS1iYXNlZCByZXBsYWNlbWVudCBmb3IgdGhlIGRlZmF1bHQgTm9kZSBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgQ2lyY2xlSW1hZ2VCYXNlXG4gKi9cbmNsYXNzIEltYWdlIGV4dGVuZHMgQ2lyY2xlSW1hZ2VCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqXG4gICAqIEBwYXJhbSB7SW1hZ2V9IGltYWdlT2JqQWx0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSwgaW1hZ2VPYmosIGltYWdlT2JqQWx0KSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuXG4gICAgdGhpcy5zZXRJbWFnZXMoaW1hZ2VPYmosIGltYWdlT2JqQWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4IC0gVW51c2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZWxlY3RlZF1cbiAgICogQHBhcmFtIHtib29sZWFufSBbaG92ZXJdXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQsIGhvdmVyID0gdGhpcy5ob3Zlcikge1xuICAgIGNvbnN0IGltYWdlQWJzZW50ID1cbiAgICAgIHRoaXMuaW1hZ2VPYmouc3JjID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuaW1hZ2VPYmoud2lkdGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5pbWFnZU9iai5oZWlnaHQgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpbWFnZUFic2VudCkge1xuICAgICAgY29uc3Qgc2lkZSA9IHRoaXMub3B0aW9ucy5zaXplICogMjtcbiAgICAgIHRoaXMud2lkdGggPSBzaWRlO1xuICAgICAgdGhpcy5oZWlnaHQgPSBzaWRlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5lZWRzUmVmcmVzaChzZWxlY3RlZCwgaG92ZXIpKSB7XG4gICAgICB0aGlzLl9yZXNpemVJbWFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgY3R4LnNhdmUoKTtcbiAgICB0aGlzLnN3aXRjaEltYWdlcyhzZWxlY3RlZCk7XG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIGxldCBsYWJlbFggPSB4LFxuICAgICAgbGFiZWxZID0geTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4gPT09IFwidG9wLWxlZnRcIikge1xuICAgICAgdGhpcy5sZWZ0ID0geDtcbiAgICAgIHRoaXMudG9wID0geTtcbiAgICAgIGxhYmVsWCArPSB0aGlzLndpZHRoIC8gMjtcbiAgICAgIGxhYmVsWSArPSB0aGlzLmhlaWdodCAvIDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICAgIHRoaXMudG9wID0geSAtIHRoaXMuaGVpZ2h0IC8gMjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy51c2VCb3JkZXJXaXRoSW1hZ2UgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IG5ldXRyYWxib3JkZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aDtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbkxpbmVXaWR0aCA9XG4gICAgICAgIHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aFNlbGVjdGVkIHx8IDIgKiB0aGlzLm9wdGlvbnMuYm9yZGVyV2lkdGg7XG4gICAgICBjb25zdCBib3JkZXJXaWR0aCA9XG4gICAgICAgIChzZWxlY3RlZCA/IHNlbGVjdGlvbkxpbmVXaWR0aCA6IG5ldXRyYWxib3JkZXJXaWR0aCkgL1xuICAgICAgICB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLm1pbih0aGlzLndpZHRoLCBib3JkZXJXaWR0aCk7XG5cbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGxldCBzdHJva2VTdHlsZSA9IHNlbGVjdGVkXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5ib3JkZXJcbiAgICAgICAgOiBob3ZlclxuICAgICAgICA/IHRoaXMub3B0aW9ucy5jb2xvci5ob3Zlci5ib3JkZXJcbiAgICAgICAgOiB0aGlzLm9wdGlvbnMuY29sb3IuYm9yZGVyO1xuICAgICAgbGV0IGZpbGxTdHlsZSA9IHNlbGVjdGVkXG4gICAgICAgID8gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kXG4gICAgICAgIDogaG92ZXJcbiAgICAgICAgPyB0aGlzLm9wdGlvbnMuY29sb3IuaG92ZXIuYmFja2dyb3VuZFxuICAgICAgICA6IHRoaXMub3B0aW9ucy5jb2xvci5iYWNrZ3JvdW5kO1xuXG4gICAgICBpZiAodmFsdWVzLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdHJva2VTdHlsZSA9IG92ZXJyaWRlT3BhY2l0eShzdHJva2VTdHlsZSwgdmFsdWVzLm9wYWNpdHkpO1xuICAgICAgICBmaWxsU3R5bGUgPSBvdmVycmlkZU9wYWNpdHkoZmlsbFN0eWxlLCB2YWx1ZXMub3BhY2l0eSk7XG4gICAgICB9XG4gICAgICAvLyBzZXR1cCB0aGUgbGluZSBwcm9wZXJ0aWVzLlxuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlU3R5bGU7XG5cbiAgICAgIC8vIHNldCBhIGZpbGxzdHlsZVxuICAgICAgY3R4LmZpbGxTdHlsZSA9IGZpbGxTdHlsZTtcblxuICAgICAgLy8gZHJhdyBhIHJlY3RhbmdsZSB0byBmb3JtIHRoZSBib3JkZXIgYXJvdW5kLiBUaGlzIHJlY3RhbmdsZSBpcyBmaWxsZWQgc28gdGhlIG9wYWNpdHkgb2YgYSBwaWN0dXJlIChpbiBmdXR1cmUgdmlzIHJlbGVhc2VzPykgY2FuIGJlIHVzZWQgdG8gdGludCB0aGUgaW1hZ2VcbiAgICAgIGN0eC5yZWN0KFxuICAgICAgICB0aGlzLmxlZnQgLSAwLjUgKiBjdHgubGluZVdpZHRoLFxuICAgICAgICB0aGlzLnRvcCAtIDAuNSAqIGN0eC5saW5lV2lkdGgsXG4gICAgICAgIHRoaXMud2lkdGggKyBjdHgubGluZVdpZHRoLFxuICAgICAgICB0aGlzLmhlaWdodCArIGN0eC5saW5lV2lkdGhcbiAgICAgICk7XG4gICAgICBjdHguZmlsbCgpO1xuXG4gICAgICB0aGlzLnBlcmZvcm1TdHJva2UoY3R4LCB2YWx1ZXMpO1xuXG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZHJhd0ltYWdlQXRQb3NpdGlvbihjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLl9kcmF3SW1hZ2VMYWJlbChjdHgsIGxhYmVsWCwgbGFiZWxZLCBzZWxlY3RlZCwgaG92ZXIpO1xuXG4gICAgdGhpcy51cGRhdGVCb3VuZGluZ0JveCh4LCB5KTtcbiAgICBjdHgucmVzdG9yZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqL1xuICB1cGRhdGVCb3VuZGluZ0JveCh4LCB5KSB7XG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4gPT09IFwidG9wLWxlZnRcIikge1xuICAgICAgdGhpcy5sZWZ0ID0geDtcbiAgICAgIHRoaXMudG9wID0geTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sZWZ0ID0geCAtIHRoaXMud2lkdGggLyAyO1xuICAgICAgdGhpcy50b3AgPSB5IC0gdGhpcy5oZWlnaHQgLyAyO1xuICAgIH1cblxuICAgIHRoaXMuYm91bmRpbmdCb3gubGVmdCA9IHRoaXMubGVmdDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnRvcCA9IHRoaXMudG9wO1xuICAgIHRoaXMuYm91bmRpbmdCb3guYm90dG9tID0gdGhpcy50b3AgKyB0aGlzLmhlaWdodDtcbiAgICB0aGlzLmJvdW5kaW5nQm94LnJpZ2h0ID0gdGhpcy5sZWZ0ICsgdGhpcy53aWR0aDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGggPiAwKSB7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmxlZnQgPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5sZWZ0LFxuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnNpemUubGVmdFxuICAgICAgKTtcbiAgICAgIHRoaXMuYm91bmRpbmdCb3gucmlnaHQgPSBNYXRoLm1heChcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5yaWdodCxcbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5zaXplLmxlZnQgKyB0aGlzLmxhYmVsTW9kdWxlLnNpemUud2lkdGhcbiAgICAgICk7XG4gICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSA9IE1hdGgubWF4KFxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94LmJvdHRvbSxcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5ib3R0b20gKyB0aGlzLmxhYmVsT2Zmc2V0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2U7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBTcXVhcmUgTm9kZS9DbHVzdGVyIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBTaGFwZUJhc2VcbiAqL1xuY2xhc3MgU3F1YXJlIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwic3F1YXJlXCIsIDIsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3F1YXJlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgSGV4YWdvbiBOb2RlL0NsdXN0ZXIgc2hhcGUuXG4gKlxuICogQGF1Z21lbnRzIFNoYXBlQmFzZVxuICovXG5jbGFzcyBIZXhhZ29uIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShjdHgsIFwiaGV4YWdvblwiLCA0LCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhleGFnb247XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaGFwZUJhc2UgZnJvbSBcIi4uL3V0aWwvU2hhcGVCYXNlXCI7XG5cbi8qKlxuICogQSBTdGFyIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFN0YXIgZXh0ZW5kcyBTaGFwZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggd2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgaGVpZ2h0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhd1NoYXBlKGN0eCwgXCJzdGFyXCIsIDQsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhcjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGVCYXNlIGZyb20gXCIuLi91dGlsL05vZGVCYXNlXCI7XG5cbi8qKlxuICogQSB0ZXh0LWJhc2VkIHJlcGxhY2VtZW50IGZvciB0aGUgZGVmYXVsdCBOb2RlIHNoYXBlLlxuICpcbiAqIEBhdWdtZW50cyBOb2RlQmFzZVxuICovXG5jbGFzcyBUZXh0IGV4dGVuZHMgTm9kZUJhc2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxNb2R1bGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICAgIHRoaXMuX3NldE1hcmdpbnMobGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3RlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhvdmVyXG4gICAqL1xuICByZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpIHtcbiAgICBpZiAodGhpcy5uZWVkc1JlZnJlc2goc2VsZWN0ZWQsIGhvdmVyKSkge1xuICAgICAgdGhpcy50ZXh0U2l6ZSA9IHRoaXMubGFiZWxNb2R1bGUuZ2V0VGV4dFNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgICAgdGhpcy53aWR0aCA9IHRoaXMudGV4dFNpemUud2lkdGggKyB0aGlzLm1hcmdpbi5yaWdodCArIHRoaXMubWFyZ2luLmxlZnQ7XG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMudGV4dFNpemUuaGVpZ2h0ICsgdGhpcy5tYXJnaW4udG9wICsgdGhpcy5tYXJnaW4uYm90dG9tO1xuICAgICAgdGhpcy5yYWRpdXMgPSAwLjUgKiB0aGlzLndpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4IHdpZHRoXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IGhlaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgdGhpcy5yZXNpemUoY3R4LCBzZWxlY3RlZCwgaG92ZXIpO1xuICAgIHRoaXMubGVmdCA9IHggLSB0aGlzLndpZHRoIC8gMjtcbiAgICB0aGlzLnRvcCA9IHkgLSB0aGlzLmhlaWdodCAvIDI7XG5cbiAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgdGhpcy5lbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhcbiAgICAgIGN0eCxcbiAgICAgIHRoaXMubGVmdCArIHRoaXMudGV4dFNpemUud2lkdGggLyAyICsgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgIHRoaXMudG9wICsgdGhpcy50ZXh0U2l6ZS5oZWlnaHQgLyAyICsgdGhpcy5tYXJnaW4udG9wLFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBob3ZlclxuICAgICk7XG5cbiAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgIHRoaXMuZGlzYWJsZVNoYWRvdyhjdHgsIHZhbHVlcyk7XG5cbiAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KHgsIHksIGN0eCwgc2VsZWN0ZWQsIGhvdmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNoYXBlQmFzZSBmcm9tIFwiLi4vdXRpbC9TaGFwZUJhc2VcIjtcblxuLyoqXG4gKiBBIFRyaWFuZ2xlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFRyaWFuZ2xlIGV4dGVuZHMgU2hhcGVCYXNlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7TGFiZWx9IGxhYmVsTW9kdWxlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGxhYmVsTW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ZWRcbiAgICogQHBhcmFtIHtib29sZWFufSBob3ZlclxuICAgKiBAcGFyYW0ge0Fycm93T3B0aW9uc30gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IENhbGxiYWNrcyB0byBkcmF3IGxhdGVyIG9uIGhpZ2hlciBsYXllcnMuXG4gICAqL1xuICBkcmF3KGN0eCwgeCwgeSwgc2VsZWN0ZWQsIGhvdmVyLCB2YWx1ZXMpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhd1NoYXBlKGN0eCwgXCJ0cmlhbmdsZVwiLCAzLCB4LCB5LCBzZWxlY3RlZCwgaG92ZXIsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyaWFuZ2xlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2hhcGVCYXNlIGZyb20gXCIuLi91dGlsL1NoYXBlQmFzZVwiO1xuXG4vKipcbiAqIEEgZG93bndhcmQgZmFjaW5nIFRyaWFuZ2xlIE5vZGUvQ2x1c3RlciBzaGFwZS5cbiAqXG4gKiBAYXVnbWVudHMgU2hhcGVCYXNlXG4gKi9cbmNsYXNzIFRyaWFuZ2xlRG93biBleHRlbmRzIFNoYXBlQmFzZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0xhYmVsfSBsYWJlbE1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGVkXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaG92ZXJcbiAgICogQHBhcmFtIHtBcnJvd09wdGlvbnN9IHZhbHVlc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBDYWxsYmFja3MgdG8gZHJhdyBsYXRlciBvbiBoaWdoZXIgbGF5ZXJzLlxuICAgKi9cbiAgZHJhdyhjdHgsIHgsIHksIHNlbGVjdGVkLCBob3ZlciwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdTaGFwZShcbiAgICAgIGN0eCxcbiAgICAgIFwidHJpYW5nbGVEb3duXCIsXG4gICAgICAzLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGhvdmVyLFxuICAgICAgdmFsdWVzXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmdsZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVHJpYW5nbGVEb3duO1xuIiwgImltcG9ydCB7XG4gIFZBTElEQVRPUl9QUklOVF9TVFlMRSxcbiAgYnJpZGdlT2JqZWN0LFxuICBmaWxsSWZEZWZpbmVkLFxuICBtZXJnZU9wdGlvbnMsXG4gIG92ZXJyaWRlT3BhY2l0eSxcbiAgcGFyc2VDb2xvcixcbiAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZCxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG5pbXBvcnQgTGFiZWwgZnJvbSBcIi4vc2hhcmVkL0xhYmVsXCI7XG5pbXBvcnQgeyBjaG9vc2lmeSwgcG9pbnRJblJlY3QgfSBmcm9tIFwiLi9zaGFyZWQvQ29tcG9uZW50VXRpbFwiO1xuaW1wb3J0IEJveCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvQm94XCI7XG5pbXBvcnQgQ2lyY2xlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9DaXJjbGVcIjtcbmltcG9ydCBDaXJjdWxhckltYWdlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9DaXJjdWxhckltYWdlXCI7XG5pbXBvcnQgQ3VzdG9tU2hhcGUgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0N1c3RvbVNoYXBlXCI7XG5pbXBvcnQgRGF0YWJhc2UgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0RhdGFiYXNlXCI7XG5pbXBvcnQgRGlhbW9uZCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvRGlhbW9uZFwiO1xuaW1wb3J0IERvdCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvRG90XCI7XG5pbXBvcnQgRWxsaXBzZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvRWxsaXBzZVwiO1xuaW1wb3J0IEljb24gZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0ljb25cIjtcbmltcG9ydCBJbWFnZSBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvSW1hZ2VcIjtcbmltcG9ydCBTcXVhcmUgZnJvbSBcIi4vbm9kZXMvc2hhcGVzL1NxdWFyZVwiO1xuaW1wb3J0IEhleGFnb24gZnJvbSBcIi4vbm9kZXMvc2hhcGVzL0hleGFnb25cIjtcbmltcG9ydCBTdGFyIGZyb20gXCIuL25vZGVzL3NoYXBlcy9TdGFyXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvVGV4dFwiO1xuaW1wb3J0IFRyaWFuZ2xlIGZyb20gXCIuL25vZGVzL3NoYXBlcy9UcmlhbmdsZVwiO1xuaW1wb3J0IFRyaWFuZ2xlRG93biBmcm9tIFwiLi9ub2Rlcy9zaGFwZXMvVHJpYW5nbGVEb3duXCI7XG5cbi8qKlxuICogQSBub2RlLiBBIG5vZGUgY2FuIGJlIGNvbm5lY3RlZCB0byBvdGhlciBub2RlcyB2aWEgb25lIG9yIG11bHRpcGxlIGVkZ2VzLlxuICovXG5jbGFzcyBOb2RlIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIEFuIG9iamVjdCBjb250YWluaW5nIG9wdGlvbnMgZm9yIHRoZSBub2RlLiBBbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyBhcmUgb3B0aW9uYWwsIGV4Y2VwdCBmb3IgdGhlIGlkLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGlkICAgICBJZCBvZiB0aGUgbm9kZS4gUmVxdWlyZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBsYWJlbCAgVGV4dCBsYWJlbCBmb3IgdGhlIG5vZGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSB4ICAgICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgbm9kZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IHkgICAgICBWZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgbm9kZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IHNoYXBlICBOb2RlIHNoYXBlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gaW1hZ2UgIEFuIGltYWdlIHVybFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IHRpdGxlICBBIHRpdGxlIHRleHQsIGNhbiBiZSBIVE1MXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FueXR5cGV9IGdyb3VwIEEgZ3JvdXAgbmFtZSBvciBudW1iZXJcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgICAgICAgICAgICAgICBTaGFyZWQgc3RhdGUgb2YgY3VycmVudCBuZXR3b3JrIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7TmV0d29yay5JbWFnZXN9IGltYWdlbGlzdCAgQSBsaXN0IHdpdGggaW1hZ2VzLiBPbmx5IG5lZWRlZCB3aGVuIHRoZSBub2RlIGhhcyBhbiBpbWFnZVxuICAgKiBAcGFyYW0ge0dyb3Vwc30gZ3JvdXBsaXN0ICAgICAgICAgIEEgbGlzdCB3aXRoIGdyb3Vwcy4gTmVlZGVkIGZvciByZXRyaWV2aW5nIGdyb3VwIG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnMgICAgICBDdXJyZW50IGdsb2JhbCBub2RlIG9wdGlvbnM7IHRoZXNlIHNlcnZlIGFzIGRlZmF1bHRzIGZvciB0aGUgbm9kZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdE9wdGlvbnMgICAgIEdsb2JhbCBkZWZhdWx0IG9wdGlvbnMgZm9yIG5vZGVzOyBub3RlIHRoYXQgdGhpcyBpcyBhbHNvIHRoZSBwcm90b3R5cGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGBnbG9iYWxPcHRpb25zYC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnMsXG4gICAgYm9keSxcbiAgICBpbWFnZWxpc3QsXG4gICAgZ3JvdXBsaXN0LFxuICAgIGdsb2JhbE9wdGlvbnMsXG4gICAgZGVmYXVsdE9wdGlvbnNcbiAgKSB7XG4gICAgdGhpcy5vcHRpb25zID0gYnJpZGdlT2JqZWN0KGdsb2JhbE9wdGlvbnMpO1xuICAgIHRoaXMuZ2xvYmFsT3B0aW9ucyA9IGdsb2JhbE9wdGlvbnM7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG5cbiAgICB0aGlzLmVkZ2VzID0gW107IC8vIGFsbCBlZGdlcyBjb25uZWN0ZWQgdG8gdGhpcyBub2RlXG5cbiAgICAvLyBzZXQgZGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zXG4gICAgdGhpcy5pZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmltYWdlbGlzdCA9IGltYWdlbGlzdDtcbiAgICB0aGlzLmdyb3VwbGlzdCA9IGdyb3VwbGlzdDtcblxuICAgIC8vIHN0YXRlIG9wdGlvbnNcbiAgICB0aGlzLnggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy55ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYmFzZVNpemUgPSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB0aGlzLmJhc2VGb250U2l6ZSA9IHRoaXMub3B0aW9ucy5mb250LnNpemU7XG4gICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSBmYWxzZTsgLy8gdXNlZCB0byBjaGVjayBpZiBpbml0aWFsIGZpdCBzaG91bGQganVzdCB0YWtlIHRoZSByYW5nZSBvciBhcHByb3hpbWF0ZVxuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhvdmVyID0gZmFsc2U7XG5cbiAgICB0aGlzLmxhYmVsTW9kdWxlID0gbmV3IExhYmVsKFxuICAgICAgdGhpcy5ib2R5LFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgZmFsc2UgLyogTm90IGVkZ2UgbGFiZWwgKi9cbiAgICApO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSBlZGdlIHRvIHRoZSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKi9cbiAgYXR0YWNoRWRnZShlZGdlKSB7XG4gICAgaWYgKHRoaXMuZWRnZXMuaW5kZXhPZihlZGdlKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZWRnZXMucHVzaChlZGdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0YWNoIGEgZWRnZSBmcm9tIHRoZSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKi9cbiAgZGV0YWNoRWRnZShlZGdlKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmVkZ2VzLmluZGV4T2YoZWRnZSk7XG4gICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICB0aGlzLmVkZ2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBvciBvdmVyd3JpdGUgb3B0aW9ucyBmb3IgdGhlIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgYW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7bnVsbHxib29sZWFufVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgY29uc3QgY3VycmVudFNoYXBlID0gdGhpcy5vcHRpb25zLnNoYXBlO1xuXG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm47IC8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgJ3VuZGVmaW5lZCchIFRoaXMgaXMgT0suXG4gICAgfVxuXG4gICAgLy8gU2F2ZSB0aGUgY29sb3IgZm9yIGxhdGVyLlxuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHByZXZlbnQgbG9jYWwgY29sb3IgZnJvbSBiZWluZyBvdmVyd3JpdHRlbiBieSBncm91cCBjb2xvci5cbiAgICAvLyBUT0RPOiBUbyBwcmV2ZW50IHN1Y2ggd29ya2Fyb3VuZHMgdGhlIHdheSBvcHRpb25zIGFyZSBoYW5kbGVkIHNob3VsZCBiZSByZXdyaXR0ZW4gZnJvbSBzY3JhdGNoLlxuICAgIC8vIFRoaXMgaXMgbm90IHRoZSBvbmx5IHByb2JsZW0gd2l0aCBjdXJyZW50IG9wdGlvbnMgaGFuZGxpbmcuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbG9yICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLl9sb2NhbENvbG9yID0gb3B0aW9ucy5jb2xvcjtcbiAgICB9XG5cbiAgICAvLyBiYXNpYyBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pZCA9IG9wdGlvbnMuaWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm9kZSBtdXN0IGhhdmUgYW4gaWRcIik7XG4gICAgfVxuXG4gICAgTm9kZS5jaGVja01hc3Mob3B0aW9ucywgdGhpcy5pZCk7XG5cbiAgICAvLyBzZXQgdGhlc2Ugb3B0aW9ucyBsb2NhbGx5XG4gICAgLy8gY2xlYXIgeCBhbmQgeSBwb3NpdGlvbnNcbiAgICBpZiAob3B0aW9ucy54ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLnggPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy54ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnByZWRlZmluZWRQb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy54ID0gcGFyc2VJbnQob3B0aW9ucy54KTtcbiAgICAgICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy55ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChvcHRpb25zLnkgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy55ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnByZWRlZmluZWRQb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy55ID0gcGFyc2VJbnQob3B0aW9ucy55KTtcbiAgICAgICAgdGhpcy5wcmVkZWZpbmVkUG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYmFzZVNpemUgPSBvcHRpb25zLnNpemU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMudmFsdWUgPSBwYXJzZUZsb2F0KG9wdGlvbnMudmFsdWUpO1xuICAgIH1cblxuICAgIC8vIHRoaXMgdHJhbnNmb3JtcyBhbGwgc2hvcnRoYW5kcyBpbnRvIGZ1bGx5IGRlZmluZWQgb3B0aW9uc1xuICAgIE5vZGUucGFyc2VPcHRpb25zKFxuICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHRydWUsXG4gICAgICB0aGlzLmdsb2JhbE9wdGlvbnMsXG4gICAgICB0aGlzLmdyb3VwbGlzdFxuICAgICk7XG5cbiAgICBjb25zdCBwaWxlID0gW29wdGlvbnMsIHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9uc107XG4gICAgdGhpcy5jaG9vc2VyID0gY2hvb3NpZnkoXCJub2RlXCIsIHBpbGUpO1xuXG4gICAgdGhpcy5fbG9hZF9pbWFnZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKG9wdGlvbnMpO1xuXG4gICAgLy8gTmVlZCB0byBzZXQgbG9jYWwgb3BhY2l0eSBhZnRlciBgdGhpcy51cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKTtgIGJlY2F1c2UgYHRoaXMudXBkYXRlTGFiZWxNb2R1bGUob3B0aW9ucyk7YCBvdmVycml0ZXMgbG9jYWwgb3BhY2l0eSB3aXRoIGdyb3VwIG9wYWNpdHlcbiAgICBpZiAob3B0aW9ucy5vcGFjaXR5ICE9PSB1bmRlZmluZWQgJiYgTm9kZS5jaGVja09wYWNpdHkob3B0aW9ucy5vcGFjaXR5KSkge1xuICAgICAgdGhpcy5vcHRpb25zLm9wYWNpdHkgPSBvcHRpb25zLm9wYWNpdHk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTaGFwZShjdXJyZW50U2hhcGUpO1xuXG4gICAgcmV0dXJuIG9wdGlvbnMuaGlkZGVuICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5waHlzaWNzICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW1hZ2VzIGZyb20gdGhlIG9wdGlvbnMsIGZvciB0aGUgbm9kZXMgdGhhdCBuZWVkIHRoZW0uXG4gICAqXG4gICAqIEltYWdlcyBhcmUgYWx3YXlzIGxvYWRlZCwgZXZlbiBpZiB0aGV5IGFyZSBub3QgdXNlZCBpbiB0aGUgY3VycmVudCBzaGFwZS5cbiAgICogVGhlIHVzZXIgbWF5IHN3aXRjaCB0byBhbiBpbWFnZSBzaGFwZSBsYXRlciBvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkX2ltYWdlcygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnMuc2hhcGUgPT09IFwiY2lyY3VsYXJJbWFnZVwiIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuc2hhcGUgPT09IFwiaW1hZ2VcIlxuICAgICkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbWFnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIk9wdGlvbiBpbWFnZSBtdXN0IGJlIGRlZmluZWQgZm9yIG5vZGUgdHlwZSAnXCIgK1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNoYXBlICtcbiAgICAgICAgICAgIFwiJ1wiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pbWFnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW1hZ2VsaXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludGVybmFsIEVycm9yOiBObyBpbWFnZXMgcHJvdmlkZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuaW1hZ2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuaW1hZ2VPYmogPSB0aGlzLmltYWdlbGlzdC5sb2FkKFxuICAgICAgICB0aGlzLm9wdGlvbnMuaW1hZ2UsXG4gICAgICAgIHRoaXMub3B0aW9ucy5icm9rZW5JbWFnZSxcbiAgICAgICAgdGhpcy5pZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbWFnZS51bnNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdW5zZWxlY3RlZCBpbWFnZSBwcm92aWRlZFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbWFnZU9iaiA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQoXG4gICAgICAgIHRoaXMub3B0aW9ucy5pbWFnZS51bnNlbGVjdGVkLFxuICAgICAgICB0aGlzLm9wdGlvbnMuYnJva2VuSW1hZ2UsXG4gICAgICAgIHRoaXMuaWRcbiAgICAgICk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW1hZ2Uuc2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmltYWdlT2JqQWx0ID0gdGhpcy5pbWFnZWxpc3QubG9hZChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuaW1hZ2Uuc2VsZWN0ZWQsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmJyb2tlbkltYWdlLFxuICAgICAgICAgIHRoaXMuaWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW1hZ2VPYmpBbHQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgb3BhY2l0eSBpcyBvbmx5IGJldHdlZW4gMCBhbmQgMVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gb3BhY2l0eVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBjaGVja09wYWNpdHkob3BhY2l0eSkge1xuICAgIHJldHVybiAwIDw9IG9wYWNpdHkgJiYgb3BhY2l0eSA8PSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgb3JpZ2luIGlzICdjZW50ZXInIG9yICd0b3AtbGVmdCdcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBjaGVja0Nvb3JkaW5hdGVPcmlnaW4ob3JpZ2luKSB7XG4gICAgcmV0dXJuIG9yaWdpbiA9PT0gdW5kZWZpbmVkIHx8IG9yaWdpbiA9PT0gXCJjZW50ZXJcIiB8fCBvcmlnaW4gPT09IFwidG9wLWxlZnRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IGdyb3VwIG9wdGlvbiB2YWx1ZXMgaW50byB0aGUgbm9kZSBvcHRpb25zLlxuICAgKlxuICAgKiBUaGUgZ3JvdXAgb3B0aW9ucyBvdmVycmlkZSB0aGUgZ2xvYmFsIG5vZGUgb3B0aW9ucywgc28gdGhlIGNvcHkgb2YgZ3JvdXAgb3B0aW9uc1xuICAgKiAgbXVzdCBoYXBwZW4gKmFmdGVyKiB0aGUgZ2xvYmFsIG5vZGUgb3B0aW9ucyBoYXZlIGJlZW4gc2V0LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBtdXN0IGFsc28gYmUgY2FsbGVkIGFsc28gaWYgdGhlIGdsb2JhbCBub2RlIG9wdGlvbnMgaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgZ3JvdXAgb3B0aW9ucyBkaWQgbm90LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50T3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9ucyAgbmV3IHZhbHVlcyBmb3IgdGhlIG9wdGlvbnMsIGN1cnJlbnRseSBvbmx5IHBhc3NlZCBpbiBmb3IgY2hlY2tcbiAgICogQHBhcmFtIHtvYmplY3R9IGdyb3VwTGlzdFxuICAgKi9cbiAgc3RhdGljIHVwZGF0ZUdyb3VwT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBncm91cExpc3QpIHtcbiAgICBpZiAoZ3JvdXBMaXN0ID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gTm8gZ3JvdXBzLCBub3RoaW5nIHRvIGRvXG5cbiAgICBjb25zdCBncm91cCA9IHBhcmVudE9wdGlvbnMuZ3JvdXA7XG5cbiAgICAvLyBwYXJhbm9pYTogdGhlIHNlbGVjdGVkIGdyb3VwIGlzIGFscmVhZHkgbWVyZ2VkIGludG8gbm9kZSBvcHRpb25zLCBjaGVjay5cbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG5ld09wdGlvbnMuZ3JvdXAgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgZ3JvdXAgIT09IG5ld09wdGlvbnMuZ3JvdXBcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJ1cGRhdGVHcm91cE9wdGlvbnM6IGdyb3VwIHZhbHVlcyBpbiBvcHRpb25zIGRvbid0IG1hdGNoLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0dyb3VwID1cbiAgICAgIHR5cGVvZiBncm91cCA9PT0gXCJudW1iZXJcIiB8fCAodHlwZW9mIGdyb3VwID09PSBcInN0cmluZ1wiICYmIGdyb3VwICE9IFwiXCIpO1xuICAgIGlmICghaGFzR3JvdXApIHJldHVybjsgLy8gY3VycmVudCBub2RlIGhhcyBubyBncm91cCwgbm8gbmVlZCB0byBtZXJnZVxuXG4gICAgY29uc3QgZ3JvdXBPYmogPSBncm91cExpc3QuZ2V0KGdyb3VwKTtcblxuICAgIGlmIChncm91cE9iai5vcGFjaXR5ICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5vcGFjaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghTm9kZS5jaGVja09wYWNpdHkoZ3JvdXBPYmoub3BhY2l0eSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIG9wYWNpdHkuIFZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBmb3VuZDogXCIgK1xuICAgICAgICAgICAgZ3JvdXBPYmoub3BhY2l0eVxuICAgICAgICApO1xuICAgICAgICBncm91cE9iai5vcGFjaXR5ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNraXAgYW55IG5ldyBvcHRpb24gdG8gYXZvaWQgdGhlbSBiZWluZyBvdmVycmlkZGVuIGJ5IHRoZSBncm91cCBvcHRpb25zLlxuICAgIGNvbnN0IHNraXBQcm9wZXJ0aWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobmV3T3B0aW9ucykuZmlsdGVyKFxuICAgICAgKHApID0+IG5ld09wdGlvbnNbcF0gIT0gbnVsbFxuICAgICk7XG4gICAgLy8gQWx3YXlzIHNraXAgbWVyZ2luZyBncm91cCBmb250IG9wdGlvbnMgaW50byBwYXJlbnQ7IHRoZXNlIGFyZSByZXF1aXJlZCB0byBiZSBkaXN0aW5jdCBmb3IgbGFiZWxzXG4gICAgc2tpcFByb3BlcnRpZXMucHVzaChcImZvbnRcIik7XG4gICAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZChza2lwUHJvcGVydGllcywgcGFyZW50T3B0aW9ucywgZ3JvdXBPYmopO1xuXG4gICAgLy8gdGhlIGNvbG9yIG9iamVjdCBuZWVkcyB0byBiZSBjb21wbGV0ZWx5IGRlZmluZWQuXG4gICAgLy8gU2luY2UgZ3JvdXBzIGNhbiBwYXJ0aWFsbHkgb3ZlcndyaXRlIHRoZSBjb2xvcnMsIHdlIHBhcnNlIGl0IGFnYWluLCBqdXN0IGluIGNhc2UuXG4gICAgcGFyZW50T3B0aW9ucy5jb2xvciA9IHBhcnNlQ29sb3IocGFyZW50T3B0aW9ucy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9jZXNzIGFsbCBwb3NzaWJsZSBzaG9ydGhhbmRzIGluIHRoZSBuZXcgb3B0aW9ucyBhbmQgbWFrZXMgc3VyZSB0aGF0IHRoZSBwYXJlbnRPcHRpb25zIGFyZSBmdWxseSBkZWZpbmVkLlxuICAgKiBTdGF0aWMgc28gaXQgY2FuIGFsc28gYmUgdXNlZCBieSB0aGUgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld09wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dEZWxldGlvbj1mYWxzZV1cbiAgICogQHBhcmFtIHtvYmplY3R9IFtnbG9iYWxPcHRpb25zPXt9XVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2dyb3VwTGlzdF1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHBhcnNlT3B0aW9ucyhcbiAgICBwYXJlbnRPcHRpb25zLFxuICAgIG5ld09wdGlvbnMsXG4gICAgYWxsb3dEZWxldGlvbiA9IGZhbHNlLFxuICAgIGdsb2JhbE9wdGlvbnMgPSB7fSxcbiAgICBncm91cExpc3RcbiAgKSB7XG4gICAgY29uc3QgZmllbGRzID0gW1wiY29sb3JcIiwgXCJmaXhlZFwiLCBcInNoYWRvd1wiXTtcbiAgICBzZWxlY3RpdmVOb3REZWVwRXh0ZW5kKGZpZWxkcywgcGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgYWxsb3dEZWxldGlvbik7XG5cbiAgICBOb2RlLmNoZWNrTWFzcyhuZXdPcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnRPcHRpb25zLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFOb2RlLmNoZWNrT3BhY2l0eShwYXJlbnRPcHRpb25zLm9wYWNpdHkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIG9wdGlvbiBmb3Igbm9kZSBvcGFjaXR5LiBWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgZm91bmQ6IFwiICtcbiAgICAgICAgICAgIHBhcmVudE9wdGlvbnMub3BhY2l0eVxuICAgICAgICApO1xuICAgICAgICBwYXJlbnRPcHRpb25zLm9wYWNpdHkgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5ld09wdGlvbnMub3BhY2l0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIU5vZGUuY2hlY2tPcGFjaXR5KG5ld09wdGlvbnMub3BhY2l0eSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIG9wYWNpdHkuIFZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBmb3VuZDogXCIgK1xuICAgICAgICAgICAgbmV3T3B0aW9ucy5vcGFjaXR5XG4gICAgICAgICk7XG4gICAgICAgIG5ld09wdGlvbnMub3BhY2l0eSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zLnNoYXBlUHJvcGVydGllcyAmJlxuICAgICAgIU5vZGUuY2hlY2tDb29yZGluYXRlT3JpZ2luKG5ld09wdGlvbnMuc2hhcGVQcm9wZXJ0aWVzLmNvb3JkaW5hdGVPcmlnaW4pXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIGNvb3JkaW5hdGVPcmlnaW4sIGZvdW5kOiBcIiArXG4gICAgICAgICAgbmV3T3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuY29vcmRpbmF0ZU9yaWdpblxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBtZXJnZSB0aGUgc2hhZG93IG9wdGlvbnMgaW50byB0aGUgcGFyZW50LlxuICAgIG1lcmdlT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBcInNoYWRvd1wiLCBnbG9iYWxPcHRpb25zKTtcblxuICAgIC8vIGluZGl2aWR1YWwgc2hhcGUgbmV3T3B0aW9uc1xuICAgIGlmIChuZXdPcHRpb25zLmNvbG9yICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5jb2xvciAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcGFyc2VkQ29sb3IgPSBwYXJzZUNvbG9yKG5ld09wdGlvbnMuY29sb3IpO1xuICAgICAgZmlsbElmRGVmaW5lZChwYXJlbnRPcHRpb25zLmNvbG9yLCBwYXJzZWRDb2xvcik7XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuY29sb3IgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuY29sb3IgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5jb2xvcik7IC8vIHNldCB0aGUgb2JqZWN0IGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb25zXG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRoZSBmaXhlZCBvcHRpb25zXG4gICAgaWYgKG5ld09wdGlvbnMuZml4ZWQgIT09IHVuZGVmaW5lZCAmJiBuZXdPcHRpb25zLmZpeGVkICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld09wdGlvbnMuZml4ZWQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZml4ZWQueCA9IG5ld09wdGlvbnMuZml4ZWQ7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZml4ZWQueSA9IG5ld09wdGlvbnMuZml4ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV3T3B0aW9ucy5maXhlZC54ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0eXBlb2YgbmV3T3B0aW9ucy5maXhlZC54ID09PSBcImJvb2xlYW5cIlxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJlbnRPcHRpb25zLmZpeGVkLnggPSBuZXdPcHRpb25zLmZpeGVkLng7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5ld09wdGlvbnMuZml4ZWQueSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdHlwZW9mIG5ld09wdGlvbnMuZml4ZWQueSA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5maXhlZC55ID0gbmV3T3B0aW9ucy5maXhlZC55O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5mb250ID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmZvbnQgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5mb250KTsgLy8gc2V0IHRoZSBvYmplY3QgYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbnNcbiAgICB9XG5cbiAgICBOb2RlLnVwZGF0ZUdyb3VwT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBncm91cExpc3QpO1xuXG4gICAgLy8gaGFuZGxlIHRoZSBzY2FsaW5nIG9wdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgbGFiZWwgcGFydFxuICAgIGlmIChuZXdPcHRpb25zLnNjYWxpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbWVyZ2VPcHRpb25zKFxuICAgICAgICBwYXJlbnRPcHRpb25zLnNjYWxpbmcsXG4gICAgICAgIG5ld09wdGlvbnMuc2NhbGluZyxcbiAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICBnbG9iYWxPcHRpb25zLnNjYWxpbmdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHt7Y29sb3I6ICosIGJvcmRlcldpZHRoOiAqLCBib3JkZXJDb2xvcjogKiwgc2l6ZTogKiwgYm9yZGVyRGFzaGVzOiAoYm9vbGVhbnxBcnJheXxhbGxPcHRpb25zLm5vZGVzLnNoYXBlUHJvcGVydGllcy5ib3JkZXJEYXNoZXN8e2Jvb2xlYW4sIGFycmF5fSksIGJvcmRlclJhZGl1czogKG51bWJlcnxhbGxPcHRpb25zLm5vZGVzLnNoYXBlUHJvcGVydGllcy5ib3JkZXJSYWRpdXN8e251bWJlcn18QXJyYXkpLCBzaGFkb3c6ICosIHNoYWRvd0NvbG9yOiAqLCBzaGFkb3dTaXplOiAqLCBzaGFkb3dYOiAqLCBzaGFkb3dZOiAqfX1cbiAgICovXG4gIGdldEZvcm1hdHRpbmdWYWx1ZXMoKSB7XG4gICAgY29uc3QgdmFsdWVzID0ge1xuICAgICAgY29sb3I6IHRoaXMub3B0aW9ucy5jb2xvci5iYWNrZ3JvdW5kLFxuICAgICAgb3BhY2l0eTogdGhpcy5vcHRpb25zLm9wYWNpdHksXG4gICAgICBib3JkZXJXaWR0aDogdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoLFxuICAgICAgYm9yZGVyQ29sb3I6IHRoaXMub3B0aW9ucy5jb2xvci5ib3JkZXIsXG4gICAgICBzaXplOiB0aGlzLm9wdGlvbnMuc2l6ZSxcbiAgICAgIGJvcmRlckRhc2hlczogdGhpcy5vcHRpb25zLnNoYXBlUHJvcGVydGllcy5ib3JkZXJEYXNoZXMsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMub3B0aW9ucy5zaGFwZVByb3BlcnRpZXMuYm9yZGVyUmFkaXVzLFxuICAgICAgc2hhZG93OiB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQsXG4gICAgICBzaGFkb3dDb2xvcjogdGhpcy5vcHRpb25zLnNoYWRvdy5jb2xvcixcbiAgICAgIHNoYWRvd1NpemU6IHRoaXMub3B0aW9ucy5zaGFkb3cuc2l6ZSxcbiAgICAgIHNoYWRvd1g6IHRoaXMub3B0aW9ucy5zaGFkb3cueCxcbiAgICAgIHNoYWRvd1k6IHRoaXMub3B0aW9ucy5zaGFkb3cueSxcbiAgICB9O1xuICAgIGlmICh0aGlzLnNlbGVjdGVkIHx8IHRoaXMuaG92ZXIpIHtcbiAgICAgIGlmICh0aGlzLmNob29zZXIgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmJvcmRlcldpZHRoU2VsZWN0ZWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsdWVzLmJvcmRlcldpZHRoID0gdGhpcy5vcHRpb25zLmJvcmRlcldpZHRoU2VsZWN0ZWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlcy5ib3JkZXJXaWR0aCAqPSAyO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZXMuY29sb3IgPSB0aGlzLm9wdGlvbnMuY29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQ7XG4gICAgICAgICAgdmFsdWVzLmJvcmRlckNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodC5ib3JkZXI7XG4gICAgICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhvdmVyKSB7XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJhY2tncm91bmQ7XG4gICAgICAgICAgdmFsdWVzLmJvcmRlckNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyLmJvcmRlcjtcbiAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNob29zZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLmNob29zZXIodmFsdWVzLCB0aGlzLm9wdGlvbnMuaWQsIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuICAgICAgICBpZiAodmFsdWVzLnNoYWRvdyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93Q29sb3IgIT09IHRoaXMub3B0aW9ucy5zaGFkb3cuY29sb3IgfHxcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dTaXplICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LnNpemUgfHxcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dYICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LnggfHxcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3dZICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LnlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbHVlcy5zaGFkb3cgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3BhY2l0eSA9IHRoaXMub3B0aW9ucy5vcGFjaXR5O1xuICAgICAgdmFsdWVzLmJvcmRlckNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KHZhbHVlcy5ib3JkZXJDb2xvciwgb3BhY2l0eSk7XG4gICAgICB2YWx1ZXMuY29sb3IgPSBvdmVycmlkZU9wYWNpdHkodmFsdWVzLmNvbG9yLCBvcGFjaXR5KTtcbiAgICAgIHZhbHVlcy5zaGFkb3dDb2xvciA9IG92ZXJyaWRlT3BhY2l0eSh2YWx1ZXMuc2hhZG93Q29sb3IsIG9wYWNpdHkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICB1cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMub3B0aW9ucy5sYWJlbCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5vcHRpb25zLmxhYmVsID0gXCJcIjtcbiAgICB9XG5cbiAgICBOb2RlLnVwZGF0ZUdyb3VwT3B0aW9ucyhcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgY29sb3I6IChvcHRpb25zICYmIG9wdGlvbnMuY29sb3IpIHx8IHRoaXMuX2xvY2FsQ29sb3IgfHwgdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHRoaXMuZ3JvdXBsaXN0XG4gICAgKTtcblxuICAgIC8vXG4gICAgLy8gTm90ZTpUaGUgcHJvdG90eXBlIGNoYWluIGZvciB0aGlzLm9wdGlvbnMgaXM6XG4gICAgLy9cbiAgICAvLyB0aGlzLm9wdGlvbnMgLT4gICAgTm9kZXNIYW5kbGVyLm9wdGlvbnMgICAgLT4gTm9kZXNIYW5kbGVyLmRlZmF1bHRPcHRpb25zXG4gICAgLy8gICAgICAgICAgICAgICAgIChhbHNvOiB0aGlzLmdsb2JhbE9wdGlvbnMpXG4gICAgLy9cbiAgICAvLyBOb3RlIHRoYXQgdGhlIHByb3RvdHlwZXMgYXJlIG1lbnRpb25lZCBleHBsaWNpdGx5IGluIHRoZSBwaWxlIGxpc3QgYmVsb3c7XG4gICAgLy8gV0UgRE9OJ1QgV0FOVCBUSEUgT1JERVIgT0YgVEhFIFBST1RPVFlQRVMhISEhIEF0IGxlYXN0LCBub3QgZm9yIGZvbnQgaGFuZGxpbmcgb2YgbGFiZWxzLlxuICAgIC8vIFRoaXMgaXMgYSBnb29kIGluZGljYXRpb24gdGhhdCB0aGUgcHJvdG90eXBlIHVzYWdlIG9mIG9wdGlvbnMgaXMgZGVmaWNpZW50LlxuICAgIC8vXG4gICAgY29uc3QgY3VycmVudEdyb3VwID0gdGhpcy5ncm91cGxpc3QuZ2V0KHRoaXMub3B0aW9ucy5ncm91cCwgZmFsc2UpO1xuICAgIGNvbnN0IHBpbGUgPSBbXG4gICAgICBvcHRpb25zLCAvLyBuZXcgb3B0aW9uc1xuICAgICAgdGhpcy5vcHRpb25zLCAvLyBjdXJyZW50IG5vZGUgb3B0aW9ucywgc2VlIGNvbW1lbnQgYWJvdmUgZm9yIHByb3RvdHlwZVxuICAgICAgY3VycmVudEdyb3VwLCAvLyBncm91cCBvcHRpb25zLCBpZiBhbnlcbiAgICAgIHRoaXMuZ2xvYmFsT3B0aW9ucywgLy8gQ3VycmVudGx5IHNldCBnbG9iYWwgbm9kZSBvcHRpb25zXG4gICAgICB0aGlzLmRlZmF1bHRPcHRpb25zLCAvLyBEZWZhdWx0IGdsb2JhbCBub2RlIG9wdGlvbnNcbiAgICBdO1xuICAgIHRoaXMubGFiZWxNb2R1bGUudXBkYXRlKHRoaXMub3B0aW9ucywgcGlsZSk7XG5cbiAgICBpZiAodGhpcy5sYWJlbE1vZHVsZS5iYXNlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJhc2VGb250U2l6ZSA9IHRoaXMubGFiZWxNb2R1bGUuYmFzZVNpemU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50U2hhcGVcbiAgICovXG4gIHVwZGF0ZVNoYXBlKGN1cnJlbnRTaGFwZSkge1xuICAgIGlmIChjdXJyZW50U2hhcGUgPT09IHRoaXMub3B0aW9ucy5zaGFwZSAmJiB0aGlzLnNoYXBlKSB7XG4gICAgICB0aGlzLnNoYXBlLnNldE9wdGlvbnModGhpcy5vcHRpb25zLCB0aGlzLmltYWdlT2JqLCB0aGlzLmltYWdlT2JqQWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2hvb3NlIGRyYXcgbWV0aG9kIGRlcGVuZGluZyBvbiB0aGUgc2hhcGVcbiAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLnNoYXBlKSB7XG4gICAgICAgIGNhc2UgXCJib3hcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEJveCh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjaXJjbGVcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IENpcmNsZSh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjaXJjdWxhckltYWdlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBDaXJjdWxhckltYWdlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZSxcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VPYmosXG4gICAgICAgICAgICB0aGlzLmltYWdlT2JqQWx0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImN1c3RvbVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgQ3VzdG9tU2hhcGUoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmN0eFJlbmRlcmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRhdGFiYXNlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBEYXRhYmFzZSh0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkaWFtb25kXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBEaWFtb25kKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRvdFwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgRG90KHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImVsbGlwc2VcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IEVsbGlwc2UodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaWNvblwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgSWNvbih0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgSW1hZ2UoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLFxuICAgICAgICAgICAgdGhpcy5pbWFnZU9iaixcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VPYmpBbHRcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3F1YXJlXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBTcXVhcmUodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaGV4YWdvblwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgSGV4YWdvbih0aGlzLm9wdGlvbnMsIHRoaXMuYm9keSwgdGhpcy5sYWJlbE1vZHVsZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdGFyXCI6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBTdGFyKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IFRleHQodGhpcy5vcHRpb25zLCB0aGlzLmJvZHksIHRoaXMubGFiZWxNb2R1bGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidHJpYW5nbGVcIjpcbiAgICAgICAgICB0aGlzLnNoYXBlID0gbmV3IFRyaWFuZ2xlKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRyaWFuZ2xlRG93blwiOlxuICAgICAgICAgIHRoaXMuc2hhcGUgPSBuZXcgVHJpYW5nbGVEb3duKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5zaGFwZSA9IG5ldyBFbGxpcHNlKHRoaXMub3B0aW9ucywgdGhpcy5ib2R5LCB0aGlzLmxhYmVsTW9kdWxlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5uZWVkc1JlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZWxlY3QgdGhpcyBub2RlXG4gICAqL1xuICBzZWxlY3QoKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5uZWVkc1JlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1bnNlbGVjdCB0aGlzIG5vZGVcbiAgICovXG4gIHVuc2VsZWN0KCkge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLm5lZWRzUmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBjYWxjdWxhdGVkIHNpemUgb2YgdGhlIG5vZGUsIGZvcmNlcyBpdCB0byByZWNhbGN1bGF0ZSBpdHMgc2l6ZVxuICAgKi9cbiAgbmVlZHNSZWZyZXNoKCkge1xuICAgIHRoaXMuc2hhcGUucmVmcmVzaE5lZWRlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB0aXRsZSBvZiB0aGlzIG5vZGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRpdGxlICAgIFRoZSB0aXRsZSBvZiB0aGUgbm9kZSwgb3IgdW5kZWZpbmVkIHdoZW4gbm8gdGl0bGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiBzZXQuXG4gICAqL1xuICBnZXRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRpdGxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgdG8gdGhlIGJvcmRlciBvZiB0aGUgTm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gICBjdHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFuZ2xlICAgICAgICBBbmdsZSBpbiByYWRpYW5zXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IGRpc3RhbmNlICAgRGlzdGFuY2UgdG8gdGhlIGJvcmRlciBpbiBwaXhlbHNcbiAgICovXG4gIGRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSkge1xuICAgIHJldHVybiB0aGlzLnNoYXBlLmRpc3RhbmNlVG9Cb3JkZXIoY3R4LCBhbmdsZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBub2RlIGhhcyBhIGZpeGVkIHggYW5kIHkgcG9zaXRpb25cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICAgdHJ1ZSBpZiBmaXhlZCwgZmFsc2UgaWYgbm90XG4gICAqL1xuICBpc0ZpeGVkKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZml4ZWQueCAmJiB0aGlzLm9wdGlvbnMuZml4ZWQueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiB0aGlzIG5vZGUgaXMgc2VsZWN0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gc2VsZWN0ZWQgICBUcnVlIGlmIG5vZGUgaXMgc2VsZWN0ZWQsIGVsc2UgZmFsc2VcbiAgICovXG4gIGlzU2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHZhbHVlIG9mIHRoZSBub2RlLiBDYW4gYmUgdW5kZWZpbmVkXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IHZhbHVlXG4gICAqL1xuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBkaW1lbnNpb25zIG9mIHRoZSBsYWJlbFxuICAgKlxuICAgKiBAcmV0dXJucyB7cmVjdH1cbiAgICovXG4gIGdldExhYmVsU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbE1vZHVsZS5zaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0IHRoZSB2YWx1ZSByYW5nZSBvZiB0aGUgbm9kZS4gVGhlIG5vZGUgd2lsbCBhZGp1c3QgaXQncyBzaXplXG4gICAqIGJhc2VkIG9uIGl0cyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pblxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFxuICAgKi9cbiAgc2V0VmFsdWVSYW5nZShtaW4sIG1heCwgdG90YWwpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5vcHRpb25zLnNjYWxpbmcuY3VzdG9tU2NhbGluZ0Z1bmN0aW9uKFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heCxcbiAgICAgICAgdG90YWwsXG4gICAgICAgIHRoaXMub3B0aW9ucy52YWx1ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNpemVEaWZmID0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWF4IC0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWluO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgZm9udERpZmYgPVxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1heCAtIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1pbjtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvbnQuc2l6ZSA9XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNjYWxpbmcubGFiZWwubWluICsgc2NhbGUgKiBmb250RGlmZjtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucy5zaXplID0gdGhpcy5vcHRpb25zLnNjYWxpbmcubWluICsgc2NhbGUgKiBzaXplRGlmZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zLnNpemUgPSB0aGlzLmJhc2VTaXplO1xuICAgICAgdGhpcy5vcHRpb25zLmZvbnQuc2l6ZSA9IHRoaXMuYmFzZUZvbnRTaXplO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTGFiZWxNb2R1bGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgbm9kZSBpbiB0aGUgZ2l2ZW4gY2FudmFzXG4gICAqIFRoZSAyZCBjb250ZXh0IG9mIGEgSFRNTCBjYW52YXMgY2FuIGJlIHJldHJpZXZlZCBieSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gICBjdHhcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIGRyYXcoY3R4KSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRGb3JtYXR0aW5nVmFsdWVzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hhcGUuZHJhdyhjdHgsIHRoaXMueCwgdGhpcy55LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyLCB2YWx1ZXMpIHx8XG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIHNoYXBlXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSAgIGN0eFxuICAgKi9cbiAgdXBkYXRlQm91bmRpbmdCb3goY3R4KSB7XG4gICAgdGhpcy5zaGFwZS51cGRhdGVCb3VuZGluZ0JveCh0aGlzLngsIHRoaXMueSwgY3R4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGlzIG5vZGUgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqL1xuICByZXNpemUoY3R4KSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5nZXRGb3JtYXR0aW5nVmFsdWVzKCk7XG4gICAgdGhpcy5zaGFwZS5yZXNpemUoY3R4LCB0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyLCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBhbGwgdmlzdWFsIGVsZW1lbnRzIG9mIHRoaXMgbm9kZSBpbnN0YW5jZSwgaW4gd2hpY2ggdGhlIGdpdmVuXG4gICAqIHBvaW50IGZhbGxzIHdpdGhpbiB0aGUgYm91bmRpbmcgc2hhcGUuXG4gICAqXG4gICAqIEBwYXJhbSB7cG9pbnR9IHBvaW50XG4gICAqIEByZXR1cm5zIHtBcnJheS48bm9kZUNsaWNrSXRlbXxub2RlTGFiZWxDbGlja0l0ZW0+fSBsaXN0IHdpdGggdGhlIGl0ZW1zIHdoaWNoIGFyZSBvbiB0aGUgcG9pbnRcbiAgICovXG4gIGdldEl0ZW1zT25Qb2ludChwb2ludCkge1xuICAgIGNvbnN0IHJldCA9IFtdO1xuXG4gICAgaWYgKHRoaXMubGFiZWxNb2R1bGUudmlzaWJsZSgpKSB7XG4gICAgICBpZiAocG9pbnRJblJlY3QodGhpcy5sYWJlbE1vZHVsZS5nZXRTaXplKCksIHBvaW50KSkge1xuICAgICAgICByZXQucHVzaCh7IG5vZGVJZDogdGhpcy5pZCwgbGFiZWxJZDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9pbnRJblJlY3QodGhpcy5zaGFwZS5ib3VuZGluZ0JveCwgcG9pbnQpKSB7XG4gICAgICByZXQucHVzaCh7IG5vZGVJZDogdGhpcy5pZCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgb2JqZWN0IGlzIG92ZXJsYXBwaW5nIHdpdGggdGhlIHByb3ZpZGVkIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqICAgYW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b21cbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICBUcnVlIGlmIGxvY2F0aW9uIGlzIGxvY2F0ZWQgb24gbm9kZVxuICAgKi9cbiAgaXNPdmVybGFwcGluZ1dpdGgob2JqKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hhcGUubGVmdCA8IG9iai5yaWdodCAmJlxuICAgICAgdGhpcy5zaGFwZS5sZWZ0ICsgdGhpcy5zaGFwZS53aWR0aCA+IG9iai5sZWZ0ICYmXG4gICAgICB0aGlzLnNoYXBlLnRvcCA8IG9iai5ib3R0b20gJiZcbiAgICAgIHRoaXMuc2hhcGUudG9wICsgdGhpcy5zaGFwZS5oZWlnaHQgPiBvYmoudG9wXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIG9iamVjdCBpcyBvdmVybGFwcGluZyB3aXRoIHRoZSBwcm92aWRlZCBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iaiAgIGFuIG9iamVjdCB3aXRoIHBhcmFtZXRlcnMgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAgICAgVHJ1ZSBpZiBsb2NhdGlvbiBpcyBsb2NhdGVkIG9uIG5vZGVcbiAgICovXG4gIGlzQm91bmRpbmdCb3hPdmVybGFwcGluZ1dpdGgob2JqKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hhcGUuYm91bmRpbmdCb3gubGVmdCA8IG9iai5yaWdodCAmJlxuICAgICAgdGhpcy5zaGFwZS5ib3VuZGluZ0JveC5yaWdodCA+IG9iai5sZWZ0ICYmXG4gICAgICB0aGlzLnNoYXBlLmJvdW5kaW5nQm94LnRvcCA8IG9iai5ib3R0b20gJiZcbiAgICAgIHRoaXMuc2hhcGUuYm91bmRpbmdCb3guYm90dG9tID4gb2JqLnRvcFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdmFsaWQgdmFsdWVzIGZvciBtYXNzXG4gICAqXG4gICAqIFRoZSBtYXNzIG1heSBub3QgYmUgbmVnYXRpdmUgb3IgemVyby4gSWYgaXQgaXMsIHJlc2V0IHRvIDFcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBpZFxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2hlY2tNYXNzKG9wdGlvbnMsIGlkKSB7XG4gICAgaWYgKG9wdGlvbnMubWFzcyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMubWFzcyA8PSAwKSB7XG4gICAgICBsZXQgc3RySWQgPSBcIlwiO1xuICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3RySWQgPSBcIiBpbiBub2RlIGlkOiBcIiArIGlkO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCIlY05lZ2F0aXZlIG9yIHplcm8gbWFzcyBkaXNhbGxvd2VkXCIgKyBzdHJJZCArIFwiLCBzZXR0aW5nIG1hc3MgdG8gMS5cIixcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFXG4gICAgICApO1xuICAgICAgb3B0aW9ucy5tYXNzID0gMTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTm9kZTtcbiIsICJpbXBvcnQgeyBicmlkZ2VPYmplY3QsIGZvckVhY2ggfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0LCBpc0RhdGFWaWV3TGlrZSB9IGZyb20gXCJ2aXMtZGF0YS9lc25leHRcIjtcbmltcG9ydCBOb2RlIGZyb20gXCIuL2NvbXBvbmVudHMvTm9kZVwiO1xuXG4vKipcbiAqIEhhbmRsZXIgZm9yIE5vZGVzXG4gKi9cbmNsYXNzIE5vZGVzSGFuZGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0ltYWdlc30gaW1hZ2VzXG4gICAqIEBwYXJhbSB7QXJyYXkuPEdyb3VwPn0gZ3JvdXBzXG4gICAqIEBwYXJhbSB7TGF5b3V0RW5naW5lfSBsYXlvdXRFbmdpbmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIGltYWdlcywgZ3JvdXBzLCBsYXlvdXRFbmdpbmUpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuaW1hZ2VzID0gaW1hZ2VzO1xuICAgIHRoaXMuZ3JvdXBzID0gZ3JvdXBzO1xuICAgIHRoaXMubGF5b3V0RW5naW5lID0gbGF5b3V0RW5naW5lO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBub2RlIEFQSSBpbiB0aGUgYm9keSBjb250YWluZXJcbiAgICB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGUgPSB0aGlzLmNyZWF0ZS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5ub2Rlc0xpc3RlbmVycyA9IHtcbiAgICAgIGFkZDogKGV2ZW50LCBwYXJhbXMpID0+IHtcbiAgICAgICAgdGhpcy5hZGQocGFyYW1zLml0ZW1zKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlKHBhcmFtcy5pdGVtcywgcGFyYW1zLmRhdGEsIHBhcmFtcy5vbGREYXRhKTtcbiAgICAgIH0sXG4gICAgICByZW1vdmU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlKHBhcmFtcy5pdGVtcyk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICBib3JkZXJXaWR0aFNlbGVjdGVkOiB1bmRlZmluZWQsXG4gICAgICBicm9rZW5JbWFnZTogdW5kZWZpbmVkLFxuICAgICAgY29sb3I6IHtcbiAgICAgICAgYm9yZGVyOiBcIiMyQjdDRTlcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCIjOTdDMkZDXCIsXG4gICAgICAgIGhpZ2hsaWdodDoge1xuICAgICAgICAgIGJvcmRlcjogXCIjMkI3Q0U5XCIsXG4gICAgICAgICAgYmFja2dyb3VuZDogXCIjRDJFNUZGXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGhvdmVyOiB7XG4gICAgICAgICAgYm9yZGVyOiBcIiMyQjdDRTlcIixcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBcIiNEMkU1RkZcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBvcGFjaXR5OiB1bmRlZmluZWQsIC8vIG51bWJlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICAgIGZpeGVkOiB7XG4gICAgICAgIHg6IGZhbHNlLFxuICAgICAgICB5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBmb250OiB7XG4gICAgICAgIGNvbG9yOiBcIiMzNDM0MzRcIixcbiAgICAgICAgc2l6ZTogMTQsIC8vIHB4XG4gICAgICAgIGZhY2U6IFwiYXJpYWxcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCJub25lXCIsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLCAvLyBweFxuICAgICAgICBzdHJva2VDb2xvcjogXCIjZmZmZmZmXCIsXG4gICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICB2YWRqdXN0OiAwLFxuICAgICAgICBtdWx0aTogZmFsc2UsXG4gICAgICAgIGJvbGQ6IHtcbiAgICAgICAgICBtb2Q6IFwiYm9sZFwiLFxuICAgICAgICB9LFxuICAgICAgICBib2xkaXRhbDoge1xuICAgICAgICAgIG1vZDogXCJib2xkIGl0YWxpY1wiLFxuICAgICAgICB9LFxuICAgICAgICBpdGFsOiB7XG4gICAgICAgICAgbW9kOiBcIml0YWxpY1wiLFxuICAgICAgICB9LFxuICAgICAgICBtb25vOiB7XG4gICAgICAgICAgbW9kOiBcIlwiLFxuICAgICAgICAgIHNpemU6IDE1LCAvLyBweFxuICAgICAgICAgIGZhY2U6IFwibW9ub3NwYWNlXCIsXG4gICAgICAgICAgdmFkanVzdDogMixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBncm91cDogdW5kZWZpbmVkLFxuICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgIGljb246IHtcbiAgICAgICAgZmFjZTogXCJGb250QXdlc29tZVwiLCAvLydGb250QXdlc29tZScsXG4gICAgICAgIGNvZGU6IHVuZGVmaW5lZCwgLy8nXFx1ZjAwNycsXG4gICAgICAgIHNpemU6IDUwLCAvLzUwLFxuICAgICAgICBjb2xvcjogXCIjMkI3Q0U5XCIsIC8vJyNhYTAwZmYnXG4gICAgICB9LFxuICAgICAgaW1hZ2U6IHVuZGVmaW5lZCwgLy8gLS0+IFVSTFxuICAgICAgaW1hZ2VQYWRkaW5nOiB7XG4gICAgICAgIC8vIG9ubHkgZm9yIGltYWdlIHNoYXBlXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgIH0sXG4gICAgICBsYWJlbDogdW5kZWZpbmVkLFxuICAgICAgbGFiZWxIaWdobGlnaHRCb2xkOiB0cnVlLFxuICAgICAgbGV2ZWw6IHVuZGVmaW5lZCxcbiAgICAgIG1hcmdpbjoge1xuICAgICAgICB0b3A6IDUsXG4gICAgICAgIHJpZ2h0OiA1LFxuICAgICAgICBib3R0b206IDUsXG4gICAgICAgIGxlZnQ6IDUsXG4gICAgICB9LFxuICAgICAgbWFzczogMSxcbiAgICAgIHBoeXNpY3M6IHRydWUsXG4gICAgICBzY2FsaW5nOiB7XG4gICAgICAgIG1pbjogMTAsXG4gICAgICAgIG1heDogMzAsXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgbWluOiAxNCxcbiAgICAgICAgICBtYXg6IDMwLFxuICAgICAgICAgIG1heFZpc2libGU6IDMwLFxuICAgICAgICAgIGRyYXdUaHJlc2hvbGQ6IDUsXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbVNjYWxpbmdGdW5jdGlvbjogZnVuY3Rpb24gKG1pbiwgbWF4LCB0b3RhbCwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICAgICAgICAgIHJldHVybiAwLjU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gMSAvIChtYXggLSBtaW4pO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsICh2YWx1ZSAtIG1pbikgKiBzY2FsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNoYWRvdzoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgY29sb3I6IFwicmdiYSgwLDAsMCwwLjUpXCIsXG4gICAgICAgIHNpemU6IDEwLFxuICAgICAgICB4OiA1LFxuICAgICAgICB5OiA1LFxuICAgICAgfSxcbiAgICAgIHNoYXBlOiBcImVsbGlwc2VcIixcbiAgICAgIHNoYXBlUHJvcGVydGllczoge1xuICAgICAgICBib3JkZXJEYXNoZXM6IGZhbHNlLCAvLyBvbmx5IGZvciBib3JkZXJzXG4gICAgICAgIGJvcmRlclJhZGl1czogNiwgLy8gb25seSBmb3IgYm94IHNoYXBlXG4gICAgICAgIGludGVycG9sYXRpb246IHRydWUsIC8vIG9ubHkgZm9yIGltYWdlIGFuZCBjaXJjdWxhckltYWdlIHNoYXBlc1xuICAgICAgICB1c2VJbWFnZVNpemU6IGZhbHNlLCAvLyBvbmx5IGZvciBpbWFnZSBhbmQgY2lyY3VsYXJJbWFnZSBzaGFwZXNcbiAgICAgICAgdXNlQm9yZGVyV2l0aEltYWdlOiBmYWxzZSwgLy8gb25seSBmb3IgaW1hZ2Ugc2hhcGVcbiAgICAgICAgY29vcmRpbmF0ZU9yaWdpbjogXCJjZW50ZXJcIiwgLy8gb25seSBmb3IgaW1hZ2UgYW5kIGNpcmN1bGFySW1hZ2Ugc2hhcGVzXG4gICAgICB9LFxuICAgICAgc2l6ZTogMjUsXG4gICAgICB0aXRsZTogdW5kZWZpbmVkLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIHg6IHVuZGVmaW5lZCxcbiAgICAgIHk6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgLy8gUHJvdGVjdCBmcm9tIGlkaW9jeVxuICAgIGlmICh0aGlzLmRlZmF1bHRPcHRpb25zLm1hc3MgPD0gMCkge1xuICAgICAgdGhyb3cgXCJJbnRlcm5hbCBlcnJvcjogbWFzcyBpbiBkZWZhdWx0T3B0aW9ucyBvZiBOb2Rlc0hhbmRsZXIgbWF5IG5vdCBiZSB6ZXJvIG9yIG5lZ2F0aXZlXCI7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gYnJpZGdlT2JqZWN0KHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICAvLyByZWZyZXNoIHRoZSBub2Rlcy4gVXNlZCB3aGVuIHJldmVydGluZyBmcm9tIGhpZXJhcmNoaWNhbCBsYXlvdXRcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInJlZnJlc2hOb2Rlc1wiLCB0aGlzLnJlZnJlc2guYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJyZWZyZXNoXCIsIHRoaXMucmVmcmVzaC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgZm9yRWFjaCh0aGlzLm5vZGVzTGlzdGVuZXJzLCAoY2FsbGJhY2ssIGV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkuZGF0YS5ub2RlcykgdGhpcy5ib2R5LmRhdGEubm9kZXMub2ZmKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGU7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycy5hZGQ7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycy51cGRhdGU7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycy5yZW1vdmU7XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc0xpc3RlbmVycztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTm9kZS5wYXJzZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgLy8gTmVlZCB0byBzZXQgb3BhY2l0eSBoZXJlIGJlY2F1c2UgTm9kZS5wYXJzZU9wdGlvbnMgaXMgYWxzbyB1c2VkIGZvciBncm91cHMsXG4gICAgICAvLyBpZiB5b3Ugc2V0IG9wYWNpdHkgaW4gTm9kZS5wYXJzZU9wdGlvbnMgaXQgb3ZlcndyaXRlcyBncm91cCBvcGFjaXR5LlxuICAgICAgaWYgKG9wdGlvbnMub3BhY2l0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBOdW1iZXIuaXNOYU4ob3B0aW9ucy5vcGFjaXR5KSB8fFxuICAgICAgICAgICFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5vcGFjaXR5KSB8fFxuICAgICAgICAgIG9wdGlvbnMub3BhY2l0eSA8IDAgfHxcbiAgICAgICAgICBvcHRpb25zLm9wYWNpdHkgPiAxXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkludmFsaWQgb3B0aW9uIGZvciBub2RlIG9wYWNpdHkuIFZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBmb3VuZDogXCIgK1xuICAgICAgICAgICAgICBvcHRpb25zLm9wYWNpdHlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5vcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgc2hhcGUgaW4gYWxsIG5vZGVzXG4gICAgICBpZiAob3B0aW9ucy5zaGFwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS51cGRhdGVTaGFwZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgdGhlIGxhYmVscyBvZiBub2RlcyBpZiBhbnkgcmVsZXZhbnQgb3B0aW9ucyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5mb250ICE9PSBcInVuZGVmaW5lZFwiIHx8XG4gICAgICAgIHR5cGVvZiBvcHRpb25zLndpZHRoQ29uc3RyYWludCAhPT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5oZWlnaHRDb25zdHJhaW50ICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBub2RlSWQgb2YgT2JqZWN0LmtleXModGhpcy5ib2R5Lm5vZGVzKSkge1xuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLnVwZGF0ZUxhYmVsTW9kdWxlKCk7XG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0ubmVlZHNSZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHRoZSBzaGFwZSBzaXplIGluIGFsbCBub2Rlc1xuICAgICAgaWYgKG9wdGlvbnMuc2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5uZWVkc1JlZnJlc2goKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgdmFyaWFibGVzIGlmIG5lZWRlZFxuICAgICAgaWYgKG9wdGlvbnMuaGlkZGVuICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5waHlzaWNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgZGF0YSBzZXQgd2l0aCBub2RlcyBmb3IgdGhlIG5ldHdvcmtcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IERhdGFTZXQgfCBEYXRhVmlld30gbm9kZXMgICAgICAgICBUaGUgZGF0YSBjb250YWluaW5nIHRoZSBub2Rlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9Ob3RFbWl0PWZhbHNlXSAtIFN1cHByZXNzIGRhdGEgY2hhbmdlZCBldmVudC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNldERhdGEobm9kZXMsIGRvTm90RW1pdCA9IGZhbHNlKSB7XG4gICAgY29uc3Qgb2xkTm9kZXNEYXRhID0gdGhpcy5ib2R5LmRhdGEubm9kZXM7XG5cbiAgICBpZiAoaXNEYXRhVmlld0xpa2UoXCJpZFwiLCBub2RlcykpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzID0gbm9kZXM7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5vZGVzKSkge1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMgPSBuZXcgRGF0YVNldCgpO1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuYWRkKG5vZGVzKTtcbiAgICB9IGVsc2UgaWYgKCFub2Rlcykge1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMgPSBuZXcgRGF0YVNldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJyYXkgb3IgRGF0YVNldCBleHBlY3RlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAob2xkTm9kZXNEYXRhKSB7XG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIG9sZCBkYXRhc2V0XG4gICAgICBmb3JFYWNoKHRoaXMubm9kZXNMaXN0ZW5lcnMsIGZ1bmN0aW9uIChjYWxsYmFjaywgZXZlbnQpIHtcbiAgICAgICAgb2xkTm9kZXNEYXRhLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGRyYXduIG5vZGVzXG4gICAgdGhpcy5ib2R5Lm5vZGVzID0ge307XG5cbiAgICBpZiAodGhpcy5ib2R5LmRhdGEubm9kZXMpIHtcbiAgICAgIC8vIHN1YnNjcmliZSB0byBuZXcgZGF0YXNldFxuICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgZm9yRWFjaCh0aGlzLm5vZGVzTGlzdGVuZXJzLCBmdW5jdGlvbiAoY2FsbGJhY2ssIGV2ZW50KSB7XG4gICAgICAgIG1lLmJvZHkuZGF0YS5ub2Rlcy5vbihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIGRyYXcgYWxsIG5ldyBub2Rlc1xuICAgICAgY29uc3QgaWRzID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0SWRzKCk7XG4gICAgICB0aGlzLmFkZChpZHMsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChkb05vdEVtaXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbm9kZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXSB8IHN0cmluZ1tdfSBpZHNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9Ob3RFbWl0PWZhbHNlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkKGlkcywgZG9Ob3RFbWl0ID0gZmFsc2UpIHtcbiAgICBsZXQgaWQ7XG4gICAgY29uc3QgbmV3Tm9kZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWQgPSBpZHNbaV07XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0KGlkKTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmNyZWF0ZShwcm9wZXJ0aWVzKTtcbiAgICAgIG5ld05vZGVzLnB1c2gobm9kZSk7XG4gICAgICB0aGlzLmJvZHkubm9kZXNbaWRdID0gbm9kZTsgLy8gbm90ZTogdGhpcyBtYXkgcmVwbGFjZSBhbiBleGlzdGluZyBub2RlXG4gICAgfVxuXG4gICAgdGhpcy5sYXlvdXRFbmdpbmUucG9zaXRpb25Jbml0aWFsbHkobmV3Tm9kZXMpO1xuXG4gICAgaWYgKGRvTm90RW1pdCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBub2Rlcywgb3IgY3JlYXRlIHRoZW0gd2hlbiBub3QgeWV0IGV4aXN0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzIGlkJ3Mgb2YgY2hhbmdlZCBub2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5fSBjaGFuZ2VkRGF0YSBhcnJheSB3aXRoIGNoYW5nZWQgZGF0YVxuICAgKiBAcGFyYW0ge0FycmF5fHVuZGVmaW5lZH0gb2xkRGF0YSBvcHRpb25hbDsgYXJyYXkgd2l0aCBwcmV2aW91cyBkYXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1cGRhdGUoaWRzLCBjaGFuZ2VkRGF0YSwgb2xkRGF0YSkge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgIGxldCBub2RlID0gbm9kZXNbaWRdO1xuICAgICAgY29uc3QgZGF0YSA9IGNoYW5nZWREYXRhW2ldO1xuICAgICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyB1cGRhdGUgbm9kZVxuICAgICAgICBpZiAobm9kZS5zZXRPcHRpb25zKGRhdGEpKSB7XG4gICAgICAgICAgZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIC8vIGNyZWF0ZSBub2RlXG4gICAgICAgIG5vZGUgPSB0aGlzLmNyZWF0ZShkYXRhKTtcbiAgICAgICAgbm9kZXNbaWRdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWRhdGFDaGFuZ2VkICYmIG9sZERhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ2hlY2sgZm9yIGFueSBjaGFuZ2VzIHdoaWNoIHNob3VsZCB0cmlnZ2VyIGEgbGF5b3V0IHJlY2FsY3VsYXRpb25cbiAgICAgIC8vIEZvciBub3csIHRoaXMgaXMganVzdCAnbGV2ZWwnIGZvciBoaWVyYXJjaGljYWwgbGF5b3V0XG4gICAgICAvLyBBc3N1bXB0aW9uOiBvbGQgYW5kIG5ldyBkYXRhIGFycmFuZ2VkIGluIHNhbWUgb3JkZXI7IGF0IHRpbWUgb2Ygd3JpdGluZywgdGhpcyBob2xkcy5cbiAgICAgIGRhdGFDaGFuZ2VkID0gY2hhbmdlZERhdGEuc29tZShmdW5jdGlvbiAobmV3VmFsdWUsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gb2xkRGF0YVtpbmRleF07XG4gICAgICAgIHJldHVybiBvbGRWYWx1ZSAmJiBvbGRWYWx1ZS5sZXZlbCAhPT0gbmV3VmFsdWUubGV2ZWw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YUNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YVVwZGF0ZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBleGlzdGluZyBub2Rlcy4gSWYgbm9kZXMgZG8gbm90IGV4aXN0LCB0aGUgbWV0aG9kIHdpbGwganVzdCBpZ25vcmUgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZW1vdmUoaWRzKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICBkZWxldGUgbm9kZXNbaWRdO1xuICAgIH1cblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIGEgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcGVydGllc1xuICAgKiBAcGFyYW0ge2NsYXNzfSBbY29uc3RydWN0b3JDbGFzcz1Ob2RlLmRlZmF1bHRdXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgY3JlYXRlKHByb3BlcnRpZXMsIGNvbnN0cnVjdG9yQ2xhc3MgPSBOb2RlKSB7XG4gICAgcmV0dXJuIG5ldyBjb25zdHJ1Y3RvckNsYXNzKFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHRoaXMuYm9keSxcbiAgICAgIHRoaXMuaW1hZ2VzLFxuICAgICAgdGhpcy5ncm91cHMsXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLmRlZmF1bHRPcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjbGVhclBvc2l0aW9ucz1mYWxzZV1cbiAgICovXG4gIHJlZnJlc2goY2xlYXJQb3NpdGlvbnMgPSBmYWxzZSkge1xuICAgIGZvckVhY2godGhpcy5ib2R5Lm5vZGVzLCAobm9kZSwgbm9kZUlkKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0KG5vZGVJZCk7XG4gICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChjbGVhclBvc2l0aW9ucyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG5vZGUuc2V0T3B0aW9ucyh7IHg6IG51bGwsIHk6IG51bGwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5zZXRPcHRpb25zKHsgZml4ZWQ6IGZhbHNlIH0pO1xuICAgICAgICBub2RlLnNldE9wdGlvbnMoZGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcG9zaXRpb25zIG9mIHRoZSBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZS5pZD4gfCBzdHJpbmd9IFtpZHNdICAtLT4gb3B0aW9uYWwsIGNhbiBiZSBhcnJheSBvZiBub2RlSWRzLCBjYW4gYmUgc3RyaW5nXG4gICAqIEByZXR1cm5zIHt7fX1cbiAgICovXG4gIGdldFBvc2l0aW9ucyhpZHMpIHtcbiAgICBjb25zdCBkYXRhQXJyYXkgPSB7fTtcbiAgICBpZiAoaWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGlkcykgPT09IHRydWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW2lkc1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpZHNbaV1dO1xuICAgICAgICAgICAgZGF0YUFycmF5W2lkc1tpXV0gPSB7XG4gICAgICAgICAgICAgIHg6IE1hdGgucm91bmQobm9kZS54KSxcbiAgICAgICAgICAgICAgeTogTWF0aC5yb3VuZChub2RlLnkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkubm9kZXNbaWRzXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpZHNdO1xuICAgICAgICAgIGRhdGFBcnJheVtpZHNdID0geyB4OiBNYXRoLnJvdW5kKG5vZGUueCksIHk6IE1hdGgucm91bmQobm9kZS55KSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldXTtcbiAgICAgICAgZGF0YUFycmF5W3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV0gPSB7XG4gICAgICAgICAgeDogTWF0aC5yb3VuZChub2RlLngpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQobm9kZS55KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFBcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHggeSBwb3NpdGlvbiBvZiBhIHNwZWNpZmljIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIGlkIHRvIHJldHJpZXZlLlxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIG5vIGlkIGlzIGluY2x1ZGVkLlxuICAgKiBAdGhyb3dzIHtSZWZlcmVuY2VFcnJvcn0gSWYgYW4gaW52YWxpZCBpZCBpcyBwcm92aWRlZC5cbiAgICogQHJldHVybnMge3sgeDogbnVtYmVyLCB5OiBudW1iZXIgfX0gUmV0dXJucyBYLCBZIGNhbnZhcyBwb3NpdGlvbiBvZiB0aGUgbm9kZSB3aXRoIGdpdmVuIGlkLlxuICAgKi9cbiAgZ2V0UG9zaXRpb24oaWQpIHtcbiAgICBpZiAoaWQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gaWQgd2FzIHNwZWNpZmllZCBmb3IgZ2V0UG9zaXRpb24gbWV0aG9kLlwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9keS5ub2Rlc1tpZF0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXG4gICAgICAgIGBOb2RlSWQgcHJvdmlkZWQgZm9yIGdldFBvc2l0aW9uIGRvZXMgbm90IGV4aXN0LiBQcm92aWRlZDogJHtpZH1gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBNYXRoLnJvdW5kKHRoaXMuYm9keS5ub2Rlc1tpZF0ueCksXG4gICAgICAgIHk6IE1hdGgucm91bmQodGhpcy5ib2R5Lm5vZGVzW2lkXS55KSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIFhZIHBvc2l0aW9ucyBvZiB0aGUgbm9kZXMgaW50byB0aGUgZGF0YXNldC5cbiAgICovXG4gIHN0b3JlUG9zaXRpb25zKCkge1xuICAgIC8vIHRvZG86IGFkZCBzdXBwb3J0IGZvciBjbHVzdGVycyBhbmQgaGllcmFyY2hpY2FsLlxuICAgIGNvbnN0IGRhdGFBcnJheSA9IFtdO1xuICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmJvZHkuZGF0YS5ub2Rlcy5nZXREYXRhU2V0KCk7XG5cbiAgICBmb3IgKGNvbnN0IGRzTm9kZSBvZiBkYXRhc2V0LmdldCgpKSB7XG4gICAgICBjb25zdCBpZCA9IGRzTm9kZS5pZDtcbiAgICAgIGNvbnN0IGJvZHlOb2RlID0gdGhpcy5ib2R5Lm5vZGVzW2lkXTtcbiAgICAgIGNvbnN0IHggPSBNYXRoLnJvdW5kKGJvZHlOb2RlLngpO1xuICAgICAgY29uc3QgeSA9IE1hdGgucm91bmQoYm9keU5vZGUueSk7XG5cbiAgICAgIGlmIChkc05vZGUueCAhPT0geCB8fCBkc05vZGUueSAhPT0geSkge1xuICAgICAgICBkYXRhQXJyYXkucHVzaCh7IGlkLCB4LCB5IH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGFzZXQudXBkYXRlKGRhdGFBcnJheSk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBib3VuZGluZyBib3ggb2YgYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcmV0dXJucyB7anwqfVxuICAgKi9cbiAgZ2V0Qm91bmRpbmdCb3gobm9kZUlkKSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5zaGFwZS5ib3VuZGluZ0JveDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBJZHMgb2Ygbm9kZXMgY29ubmVjdGVkIHRvIHRoaXMgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHBhcmFtIHsndG8nfCdmcm9tJ3x1bmRlZmluZWR9IGRpcmVjdGlvbiB2YWx1ZXMgJ2Zyb20nIGFuZCAndG8nIHNlbGVjdCByZXNwZWN0aXZlbHkgcGFyZW50IGFuZCBjaGlsZCBub2RlcyBvbmx5LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueSBvdGhlciB2YWx1ZSByZXR1cm5zIGJvdGggcGFyZW50IGFuZCBjaGlsZCBub2Rlcy5cbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0Q29ubmVjdGVkTm9kZXMobm9kZUlkLCBkaXJlY3Rpb24pIHtcbiAgICBjb25zdCBub2RlTGlzdCA9IFtdO1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICBjb25zdCBub2RlT2JqID0ge307IC8vIHVzZWQgdG8gcXVpY2tseSBjaGVjayBpZiBub2RlIGFscmVhZHkgZXhpc3RzXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZWRnZSA9IG5vZGUuZWRnZXNbaV07XG4gICAgICAgIGlmIChkaXJlY3Rpb24gIT09IFwidG9cIiAmJiBlZGdlLnRvSWQgPT0gbm9kZS5pZCkge1xuICAgICAgICAgIC8vIHRoZXNlIGFyZSBkb3VibGUgZXF1YWxzIHNpbmNlIGlkcyBjYW4gYmUgbnVtZXJpYyBvciBzdHJpbmdcbiAgICAgICAgICBpZiAobm9kZU9ialtlZGdlLmZyb21JZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbm9kZUxpc3QucHVzaChlZGdlLmZyb21JZCk7XG4gICAgICAgICAgICBub2RlT2JqW2VkZ2UuZnJvbUlkXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAhPT0gXCJmcm9tXCIgJiYgZWRnZS5mcm9tSWQgPT0gbm9kZS5pZCkge1xuICAgICAgICAgIC8vIHRoZXNlIGFyZSBkb3VibGUgZXF1YWxzIHNpbmNlIGlkcyBjYW4gYmUgbnVtZXJpYyBvciBzdHJpbmdcbiAgICAgICAgICBpZiAobm9kZU9ialtlZGdlLnRvSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5vZGVMaXN0LnB1c2goZWRnZS50b0lkKTtcbiAgICAgICAgICAgIG5vZGVPYmpbZWRnZS50b0lkXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGlkcyBvZiB0aGUgZWRnZXMgY29ubmVjdGVkIHRvIHRoaXMgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBnZXRDb25uZWN0ZWRFZGdlcyhub2RlSWQpIHtcbiAgICBjb25zdCBlZGdlTGlzdCA9IFtdO1xuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWRnZUxpc3QucHVzaChub2RlLmVkZ2VzW2ldLmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJOb2RlSWQgcHJvdmlkZWQgZm9yIGdldENvbm5lY3RlZEVkZ2VzIGRvZXMgbm90IGV4aXN0LiBQcm92aWRlZDogXCIsXG4gICAgICAgIG5vZGVJZFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGVkZ2VMaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcGFyYW0ge251bWJlcn0geVxuICAgKi9cbiAgbW92ZU5vZGUobm9kZUlkLCB4LCB5KSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLnggPSBOdW1iZXIoeCk7XG4gICAgICB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS55ID0gTnVtYmVyKHkpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJOb2RlIGlkIHN1cHBsaWVkIHRvIG1vdmVOb2RlIGRvZXMgbm90IGV4aXN0LiBQcm92aWRlZDogXCIsXG4gICAgICAgIG5vZGVJZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTm9kZXNIYW5kbGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkZXNjcmlwdG9yKSB7XG4gIHJldHVybiBkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQgJiYgKGhhc093bihkZXNjcmlwdG9yLCAndmFsdWUnKSB8fCBoYXNPd24oZGVzY3JpcHRvciwgJ3dyaXRhYmxlJykpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWRhdGEtZGVzY3JpcHRvcicpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYFJlZmxlY3QuZ2V0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5nZXRcbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5IC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiBhcmd1bWVudHNbMl07XG4gIHZhciBkZXNjcmlwdG9yLCBwcm90b3R5cGU7XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZih0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IpIHJldHVybiBpc0RhdGFEZXNjcmlwdG9yKGRlc2NyaXB0b3IpXG4gICAgPyBkZXNjcmlwdG9yLnZhbHVlXG4gICAgOiBkZXNjcmlwdG9yLmdldCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogY2FsbChkZXNjcmlwdG9yLmdldCwgcmVjZWl2ZXIpO1xuICBpZiAoaXNPYmplY3QocHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG90eXBlLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBnZXQ6IGdldFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5yZWZsZWN0LmdldCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUmVmbGVjdC5nZXQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgImltcG9ydCBfUmVmbGVjdCRnZXQgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9yZWZsZWN0L2dldC5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmltcG9ydCBfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvciBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanNcIjtcbmltcG9ydCBzdXBlclByb3BCYXNlIGZyb20gXCIuL3N1cGVyUHJvcEJhc2UuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXQoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBfUmVmbGVjdCRnZXQpIHtcbiAgICB2YXIgX2NvbnRleHQ7XG4gICAgX2dldCA9IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9SZWZsZWN0JGdldCkuY2FsbChfY29udGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgX2dldCA9IGZ1bmN0aW9uIF9nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHtcbiAgICAgIHZhciBiYXNlID0gc3VwZXJQcm9wQmFzZSh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICAgIGlmICghYmFzZSkgcmV0dXJuO1xuICAgICAgdmFyIGRlc2MgPSBfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlLCBwcm9wZXJ0eSk7XG4gICAgICBpZiAoZGVzYy5nZXQpIHtcbiAgICAgICAgcmV0dXJuIGRlc2MuZ2V0LmNhbGwoYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiByZWNlaXZlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVzYy52YWx1ZTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBfZ2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwgImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3N1cGVyUHJvcEJhc2Uob2JqZWN0LCBwcm9wZXJ0eSkge1xuICB3aGlsZSAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkge1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn0iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLWh5cG90IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgJGh5cG90ID0gTWF0aC5oeXBvdDtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuXG4vLyBDaHJvbWUgNzcgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD05NTQ2XG52YXIgRk9SQ0VEID0gISEkaHlwb3QgJiYgJGh5cG90KEluZmluaXR5LCBOYU4pICE9PSBJbmZpbml0eTtcblxuLy8gYE1hdGguaHlwb3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmh5cG90XG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGFyaXR5OiAyLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikge1xuICAgIHZhciBzdW0gPSAwO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGxhcmcgPSAwO1xuICAgIHZhciBhcmcsIGRpdjtcbiAgICB3aGlsZSAoaSA8IGFMZW4pIHtcbiAgICAgIGFyZyA9IGFicyhhcmd1bWVudHNbaSsrXSk7XG4gICAgICBpZiAobGFyZyA8IGFyZykge1xuICAgICAgICBkaXYgPSBsYXJnIC8gYXJnO1xuICAgICAgICBzdW0gPSBzdW0gKiBkaXYgKiBkaXYgKyAxO1xuICAgICAgICBsYXJnID0gYXJnO1xuICAgICAgfSBlbHNlIGlmIChhcmcgPiAwKSB7XG4gICAgICAgIGRpdiA9IGFyZyAvIGxhcmc7XG4gICAgICAgIHN1bSArPSBkaXYgKiBkaXY7XG4gICAgICB9IGVsc2Ugc3VtICs9IGFyZztcbiAgICB9XG4gICAgcmV0dXJuIGxhcmcgPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBsYXJnICogc3FydChzdW0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm1hdGguaHlwb3QnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk1hdGguaHlwb3Q7XG4iLCAiLyoqXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBMb2NhdGlvbiBvZiBhbGwgdGhlIGVuZHBvaW50IGRyYXdpbmcgcm91dGluZXMuXG4gKlxuICogRXZlcnkgZW5kcG9pbnQgaGFzIGl0cyBvd24gZHJhd2luZyByb3V0aW5lLCB3aGljaCBjb250YWlucyBhbiBlbmRwb2ludCBkZWZpbml0aW9uLlxuICpcbiAqIFRoZSBlbmRwb2ludCBkZWZpbml0aW9ucyBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJpZXM6XG4gKlxuICogLSAoMCwwKSBpcyB0aGUgY29ubmVjdGlvbiBwb2ludCB0byB0aGUgbm9kZSBpdCBhdHRhY2hlcyB0b1xuICogLSBUaGUgZW5kcG9pbnRzIGFyZSBvcmllbnRhdGVkIHRvIHRoZSBwb3NpdGl2ZSB4LWRpcmVjdGlvblxuICogLSBUaGUgbGVuZ3RoIG9mIHRoZSBlbmRwb2ludCBpcyBhdCBtb3N0IDFcbiAqXG4gKiBBcyBsb25nIGFzIHRoZSBlbmRwb2ludCBjbGFzc2VzIHJlbWFpbiBzaW1wbGUgYW5kIG5vdCB0b28gbnVtZXJvdXMsIHRoZXkgd2lsbFxuICogYmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIG1vZHVsZS5cbiAqIEFsbCBjbGFzc2VzIGhlcmUgZXhjZXB0IGBFbmRQb2ludHNgIHNob3VsZCBiZSBjb25zaWRlcmVkIGFzIHByaXZhdGUgdG8gdGhpcyBtb2R1bGUuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqICMjIyBGdXJ0aGVyIEFjdGlvbnNcbiAqXG4gKiBBZnRlciBhZGRpbmcgYSBuZXcgZW5kcG9pbnQgaGVyZSwgeW91IGFsc28gbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nIHRoaW5nczpcbiAqXG4gKiAtIEFkZCB0aGUgbmV3IGVuZHBvaW50IG5hbWUgdG8gYG5ldHdvcmsvb3B0aW9ucy5qc2AgaW4gYXJyYXkgYGVuZFBvaW50c2AuXG4gKiAtIEFkZCB0aGUgbmV3IGVuZHBvaW50IG5hbWUgdG8gdGhlIGRvY3VtZW50YXRpb24uXG4gKiAgIFNjYW4gZm9yICdhcnJvd3MudG8udHlwZWAgYW5kIGFkZCBpdCB0byB0aGUgZGVzY3JpcHRpb24uXG4gKiAtIEFkZCB0aGUgZW5kcG9pbnQgdG8gdGhlIGV4YW1wbGVzLiBBdCB0aGUgdmVyeSBsZWFzdCwgYWRkIGl0IHRvIGV4YW1wbGVcbiAqICAgYGVkZ2VTdHlsZXMvYXJyb3dUeXBlc2AuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7IEFycm93RGF0YSwgUG9pbnQgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgZHJhd0NpcmNsZSB9IGZyb20gXCIuL3NoYXBlc1wiO1xuXG4vKipcbiAqIENvbW1vbiBtZXRob2RzIGZvciBlbmRwb2ludHNcbiAqXG4gKiBAY2xhc3NcbiAqL1xuY2xhc3MgRW5kUG9pbnQge1xuICAvKipcbiAgICogQXBwbHkgdHJhbnNmb3JtYXRpb24gb24gcG9pbnRzIGZvciBkaXNwbGF5LlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGlzIGRvbmU6XG4gICAqIC0gcm90YXRlIGJ5IHRoZSBzcGVjaWZpZWQgYW5nbGVcbiAgICogLSBtdWx0aXBseSB0aGUgKG5vcm1hbGl6ZWQpIGNvb3JkaW5hdGVzIGJ5IHRoZSBwYXNzZWQgbGVuZ3RoXG4gICAqIC0gb2Zmc2V0IGJ5IHRoZSB0YXJnZXQgY29vcmRpbmF0ZXNcbiAgICpcbiAgICogQHBhcmFtIHBvaW50cyAtIFRoZSBwb2ludChzKSB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIHRyYW5zZm9ybWF0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0cmFuc2Zvcm0ocG9pbnRzOiBQb2ludCB8IFBvaW50W10sIGFycm93RGF0YTogQXJyb3dEYXRhKTogdm9pZCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50cykpIHtcbiAgICAgIHBvaW50cyA9IFtwb2ludHNdO1xuICAgIH1cblxuICAgIGNvbnN0IHggPSBhcnJvd0RhdGEucG9pbnQueDtcbiAgICBjb25zdCB5ID0gYXJyb3dEYXRhLnBvaW50Lnk7XG4gICAgY29uc3QgYW5nbGUgPSBhcnJvd0RhdGEuYW5nbGU7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyb3dEYXRhLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBwID0gcG9pbnRzW2ldO1xuICAgICAgY29uc3QgeHQgPSBwLnggKiBNYXRoLmNvcyhhbmdsZSkgLSBwLnkgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgICBjb25zdCB5dCA9IHAueCAqIE1hdGguc2luKGFuZ2xlKSArIHAueSAqIE1hdGguY29zKGFuZ2xlKTtcblxuICAgICAgcC54ID0geCArIGxlbmd0aCAqIHh0O1xuICAgICAgcC55ID0geSArIGxlbmd0aCAqIHl0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgY2xvc2VkIHBhdGggdXNpbmcgdGhlIGdpdmVuIHJlYWwgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgcGF0aCB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gcG9pbnRzIC0gVGhlIHBvaW50cyBvZiB0aGUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhd1BhdGgoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHBvaW50czogUG9pbnRbXSk6IHZvaWQge1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGN0eC5saW5lVG8ocG9pbnRzW2ldLngsIHBvaW50c1tpXS55KTtcbiAgICB9XG4gICAgY3R4LmNsb3NlUGF0aCgpO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgYXJyb3cgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIEltYWdlIGV4dGVuZHMgRW5kUG9pbnQge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIEZhbHNlIGFzIHRoZXJlIGlzIG5vIHdheSB0byBmaWxsIGFuIGltYWdlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IGZhbHNlIHtcbiAgICBpZiAoYXJyb3dEYXRhLmltYWdlKSB7XG4gICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICBjdHgudHJhbnNsYXRlKGFycm93RGF0YS5wb2ludC54LCBhcnJvd0RhdGEucG9pbnQueSk7XG4gICAgICBjdHgucm90YXRlKE1hdGguUEkgLyAyICsgYXJyb3dEYXRhLmFuZ2xlKTtcblxuICAgICAgY29uc3Qgd2lkdGggPVxuICAgICAgICBhcnJvd0RhdGEuaW1hZ2VXaWR0aCAhPSBudWxsXG4gICAgICAgICAgPyBhcnJvd0RhdGEuaW1hZ2VXaWR0aFxuICAgICAgICAgIDogYXJyb3dEYXRhLmltYWdlLndpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0ID1cbiAgICAgICAgYXJyb3dEYXRhLmltYWdlSGVpZ2h0ICE9IG51bGxcbiAgICAgICAgICA/IGFycm93RGF0YS5pbWFnZUhlaWdodFxuICAgICAgICAgIDogYXJyb3dEYXRhLmltYWdlLmhlaWdodDtcblxuICAgICAgYXJyb3dEYXRhLmltYWdlLmRyYXdJbWFnZUF0UG9zaXRpb24oXG4gICAgICAgIGN0eCxcbiAgICAgICAgMSwgLy8gc2NhbGVcbiAgICAgICAgLXdpZHRoIC8gMiwgLy8geFxuICAgICAgICAwLCAvLyB5XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgICk7XG5cbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgYXJyb3cgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIEFycm93IGV4dGVuZHMgRW5kUG9pbnQge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgeyB4OiAwLCB5OiAwIH0sXG4gICAgICB7IHg6IC0xLCB5OiAwLjMgfSxcbiAgICAgIHsgeDogLTAuOSwgeTogMCB9LFxuICAgICAgeyB4OiAtMSwgeTogLTAuMyB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgY3JvdyBlbmRwb2ludC5cbiAqL1xuY2xhc3MgQ3JvdyB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IC0xLCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAtMC40LCB5OiAwIH0sXG4gICAgICB7IHg6IDAsIHk6IC0wLjMgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGN1cnZlIGVuZHBvaW50LlxuICovXG5jbGFzcyBDdXJ2ZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludCA9IHsgeDogLTAuNCwgeTogMCB9O1xuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludCwgYXJyb3dEYXRhKTtcblxuICAgIC8vIFVwZGF0ZSBlbmRwb2ludCBzdHlsZSBmb3IgZHJhd2luZyB0cmFuc3BhcmVudCBhcmMuXG4gICAgY3R4LnN0cm9rZVN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2JhKDAsIDAsIDAsIDApXCI7XG5cbiAgICAvLyBEZWZpbmUgY3VydmUgZW5kcG9pbnQgYXMgc2VtaWNpcmNsZS5cbiAgICBjb25zdCBwaSA9IE1hdGguUEk7XG4gICAgY29uc3Qgc3RhcnRBbmdsZSA9IGFycm93RGF0YS5hbmdsZSAtIHBpIC8gMjtcbiAgICBjb25zdCBlbmRBbmdsZSA9IGFycm93RGF0YS5hbmdsZSArIHBpIC8gMjtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhcbiAgICAgIHBvaW50LngsXG4gICAgICBwb2ludC55LFxuICAgICAgYXJyb3dEYXRhLmxlbmd0aCAqIDAuNCxcbiAgICAgIHN0YXJ0QW5nbGUsXG4gICAgICBlbmRBbmdsZSxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGludmVydGVkIGN1cnZlIGVuZHBvaW50LlxuICovXG5jbGFzcyBJbnZlcnRlZEN1cnZlIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvLyBOb3JtYWxpemVkIHBvaW50cyBvZiBjbG9zZWQgcGF0aCwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZHJhd24uXG4gICAgLy8gKDAsIDApIGlzIHRoZSBhdHRhY2htZW50IHBvaW50LCBhbmQgdGhlIHBvaW50IGFyb3VuZCB3aGljaCBzaG91bGQgYmUgcm90YXRlZFxuICAgIGNvbnN0IHBvaW50ID0geyB4OiAtMC4zLCB5OiAwIH07XG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50LCBhcnJvd0RhdGEpO1xuXG4gICAgLy8gVXBkYXRlIGVuZHBvaW50IHN0eWxlIGZvciBkcmF3aW5nIHRyYW5zcGFyZW50IGFyYy5cbiAgICBjdHguc3Ryb2tlU3R5bGUgPSBjdHguZmlsbFN0eWxlO1xuICAgIGN0eC5maWxsU3R5bGUgPSBcInJnYmEoMCwgMCwgMCwgMClcIjtcblxuICAgIC8vIERlZmluZSBpbnZlcnRlZCBjdXJ2ZSBlbmRwb2ludCBhcyBzZW1pY2lyY2xlLlxuICAgIGNvbnN0IHBpID0gTWF0aC5QSTtcbiAgICBjb25zdCBzdGFydEFuZ2xlID0gYXJyb3dEYXRhLmFuZ2xlICsgcGkgLyAyO1xuICAgIGNvbnN0IGVuZEFuZ2xlID0gYXJyb3dEYXRhLmFuZ2xlICsgKDMgKiBwaSkgLyAyO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKFxuICAgICAgcG9pbnQueCxcbiAgICAgIHBvaW50LnksXG4gICAgICBhcnJvd0RhdGEubGVuZ3RoICogMC40LFxuICAgICAgc3RhcnRBbmdsZSxcbiAgICAgIGVuZEFuZ2xlLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgdHJpbmFnbGUgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIFRyaWFuZ2xlIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvLyBOb3JtYWxpemVkIHBvaW50cyBvZiBjbG9zZWQgcGF0aCwgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZHJhd24uXG4gICAgLy8gKDAsIDApIGlzIHRoZSBhdHRhY2htZW50IHBvaW50LCBhbmQgdGhlIHBvaW50IGFyb3VuZCB3aGljaCBzaG91bGQgYmUgcm90YXRlZFxuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMC4wMiwgeTogMCB9LFxuICAgICAgeyB4OiAtMSwgeTogMC4zIH0sXG4gICAgICB7IHg6IC0xLCB5OiAtMC4zIH0sXG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgRW5kUG9pbnQuZHJhd1BhdGgoY3R4LCBwb2ludHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBpbnZlcnRlZCB0cmluYWdsZSBlbmRwb2ludC5cbiAqL1xuY2xhc3MgSW52ZXJ0ZWRUcmlhbmdsZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgLy8gTm9ybWFsaXplZCBwb2ludHMgb2YgY2xvc2VkIHBhdGgsIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRyYXduLlxuICAgIC8vICgwLCAwKSBpcyB0aGUgYXR0YWNobWVudCBwb2ludCwgYW5kIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggc2hvdWxkIGJlIHJvdGF0ZWRcbiAgICBjb25zdCBwb2ludHMgPSBbXG4gICAgICB7IHg6IDAsIHk6IDAuMyB9LFxuICAgICAgeyB4OiAwLCB5OiAtMC4zIH0sXG4gICAgICB7IHg6IC0xLCB5OiAwIH0sXG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgRW5kUG9pbnQuZHJhd1BhdGgoY3R4LCBwb2ludHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBEcmF3aW5nIG1ldGhvZHMgZm9yIHRoZSBjaXJjbGUgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIENpcmNsZSB7XG4gIC8qKlxuICAgKiBEcmF3IHRoaXMgc2hhcGUgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBiZWNhdXNlIGN0eC5maWxsKCkgY2FuIGJlIHVzZWQgdG8gZmlsbCB0aGUgYXJyb3cuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogdHJ1ZSB7XG4gICAgY29uc3QgcG9pbnQgPSB7IHg6IC0wLjQsIHk6IDAgfTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludCwgYXJyb3dEYXRhKTtcbiAgICBkcmF3Q2lyY2xlKGN0eCwgcG9pbnQueCwgcG9pbnQueSwgYXJyb3dEYXRhLmxlbmd0aCAqIDAuNCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGJhciBlbmRwb2ludC5cbiAqL1xuY2xhc3MgQmFyIHtcbiAgLyoqXG4gICAqIERyYXcgdGhpcyBzaGFwZSBhdCB0aGUgZW5kIG9mIGEgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBzaGFwZSB3aWxsIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0LlxuICAgKiBAcGFyYW0gYXJyb3dEYXRhIC0gVGhlIGRhdGEgZGV0ZXJtaW5pbmcgdGhlIHNoYXBlLlxuICAgKiBAcmV0dXJucyBUcnVlIGJlY2F1c2UgY3R4LmZpbGwoKSBjYW4gYmUgdXNlZCB0byBmaWxsIHRoZSBhcnJvdy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZHJhdyhcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB0cnVlIHtcbiAgICAvKlxuICAgIHZhciBwb2ludHMgPSBbXG4gICAgICB7eDowLCB5OjAuNX0sXG4gICAgICB7eDowLCB5Oi0wLjV9XG4gICAgXTtcblxuICAgIEVuZFBvaW50LnRyYW5zZm9ybShwb2ludHMsIGFycm93RGF0YSk7XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5tb3ZlVG8ocG9pbnRzWzBdLngsIHBvaW50c1swXS55KTtcbiAgICBjdHgubGluZVRvKHBvaW50c1sxXS54LCBwb2ludHNbMV0ueSk7XG4gICAgY3R4LnN0cm9rZSgpO1xuKi9cblxuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMC41IH0sXG4gICAgICB7IHg6IDAsIHk6IC0wLjUgfSxcbiAgICAgIHsgeDogLTAuMTUsIHk6IC0wLjUgfSxcbiAgICAgIHsgeDogLTAuMTUsIHk6IDAuNSB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgYm94IGVuZHBvaW50LlxuICovXG5jbGFzcyBCb3gge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMC4zIH0sXG4gICAgICB7IHg6IDAsIHk6IC0wLjMgfSxcbiAgICAgIHsgeDogLTAuNiwgeTogLTAuMyB9LFxuICAgICAgeyB4OiAtMC42LCB5OiAwLjMgfSxcbiAgICBdO1xuXG4gICAgRW5kUG9pbnQudHJhbnNmb3JtKHBvaW50cywgYXJyb3dEYXRhKTtcbiAgICBFbmRQb2ludC5kcmF3UGF0aChjdHgsIHBvaW50cyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERyYXdpbmcgbWV0aG9kcyBmb3IgdGhlIGRpYW1vbmQgZW5kcG9pbnQuXG4gKi9cbmNsYXNzIERpYW1vbmQge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgICAgeyB4OiAtMC41LCB5OiAtMC4zIH0sXG4gICAgICB7IHg6IC0xLCB5OiAwIH0sXG4gICAgICB7IHg6IC0wLjUsIHk6IDAuMyB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgdmVlIGVuZHBvaW50LlxuICovXG5jbGFzcyBWZWUge1xuICAvKipcbiAgICogRHJhdyB0aGlzIHNoYXBlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIHNoYXBlIHdpbGwgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQuXG4gICAqIEBwYXJhbSBhcnJvd0RhdGEgLSBUaGUgZGF0YSBkZXRlcm1pbmluZyB0aGUgc2hhcGUuXG4gICAqIEByZXR1cm5zIFRydWUgYmVjYXVzZSBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkcmF3KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGFycm93RGF0YTogQXJyb3dEYXRhXG4gICk6IHRydWUge1xuICAgIC8vIE5vcm1hbGl6ZWQgcG9pbnRzIG9mIGNsb3NlZCBwYXRoLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkcmF3bi5cbiAgICAvLyAoMCwgMCkgaXMgdGhlIGF0dGFjaG1lbnQgcG9pbnQsIGFuZCB0aGUgcG9pbnQgYXJvdW5kIHdoaWNoIHNob3VsZCBiZSByb3RhdGVkXG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgeyB4OiAtMSwgeTogMC4zIH0sXG4gICAgICB7IHg6IC0wLjUsIHk6IDAgfSxcbiAgICAgIHsgeDogLTEsIHk6IC0wLjMgfSxcbiAgICAgIHsgeDogMCwgeTogMCB9LFxuICAgIF07XG5cbiAgICBFbmRQb2ludC50cmFuc2Zvcm0ocG9pbnRzLCBhcnJvd0RhdGEpO1xuICAgIEVuZFBvaW50LmRyYXdQYXRoKGN0eCwgcG9pbnRzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogRHJhd2luZyBtZXRob2RzIGZvciB0aGUgZW5kcG9pbnRzLlxuICovXG5leHBvcnQgY2xhc3MgRW5kUG9pbnRzIHtcbiAgLyoqXG4gICAqIERyYXcgYW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgc2hhcGUgd2lsbCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dC5cbiAgICogQHBhcmFtIGFycm93RGF0YSAtIFRoZSBkYXRhIGRldGVybWluaW5nIHRoZSBzaGFwZS5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiBjdHguZmlsbCgpIGNhbiBiZSB1c2VkIHRvIGZpbGwgdGhlIGFycm93LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRyYXcoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgYXJyb3dEYXRhOiBBcnJvd0RhdGFcbiAgKTogYm9vbGVhbiB7XG4gICAgbGV0IHR5cGU7XG4gICAgaWYgKGFycm93RGF0YS50eXBlKSB7XG4gICAgICB0eXBlID0gYXJyb3dEYXRhLnR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJpbWFnZVwiOlxuICAgICAgICByZXR1cm4gSW1hZ2UuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiY2lyY2xlXCI6XG4gICAgICAgIHJldHVybiBDaXJjbGUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiYm94XCI6XG4gICAgICAgIHJldHVybiBCb3guZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiY3Jvd1wiOlxuICAgICAgICByZXR1cm4gQ3Jvdy5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJjdXJ2ZVwiOlxuICAgICAgICByZXR1cm4gQ3VydmUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwiZGlhbW9uZFwiOlxuICAgICAgICByZXR1cm4gRGlhbW9uZC5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJpbnZfY3VydmVcIjpcbiAgICAgICAgcmV0dXJuIEludmVydGVkQ3VydmUuZHJhdyhjdHgsIGFycm93RGF0YSk7XG4gICAgICBjYXNlIFwidHJpYW5nbGVcIjpcbiAgICAgICAgcmV0dXJuIFRyaWFuZ2xlLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuICAgICAgY2FzZSBcImludl90cmlhbmdsZVwiOlxuICAgICAgICByZXR1cm4gSW52ZXJ0ZWRUcmlhbmdsZS5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJiYXJcIjpcbiAgICAgICAgcmV0dXJuIEJhci5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJ2ZWVcIjpcbiAgICAgICAgcmV0dXJuIFZlZS5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICAgIGNhc2UgXCJhcnJvd1wiOiAvLyBmYWxsLXRocm91Z2hcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBBcnJvdy5kcmF3KGN0eCwgYXJyb3dEYXRhKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBvdmVycmlkZU9wYWNpdHkgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBFbmRQb2ludHMgfSBmcm9tIFwiLi9lbmQtcG9pbnRzXCI7XG5pbXBvcnQge1xuICBBcnJvd0RhdGEsXG4gIEFycm93RGF0YVdpdGhDb3JlLFxuICBBcnJvd1R5cGUsXG4gIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICBFZGdlVHlwZSxcbiAgSWQsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGRyYXdEYXNoZWRMaW5lIH0gZnJvbSBcIi4vc2hhcGVzXCI7XG5pbXBvcnQgeyBnZXRTZWxmUmVmQ29vcmRpbmF0ZXMgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL0NvbXBvbmVudFV0aWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGaW5kQm9yZGVyUG9zaXRpb25PcHRpb25zPFZpYT4ge1xuICB2aWE6IFZpYTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlT3B0aW9ucyB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICBsb3c6IG51bWJlcjtcbiAgaGlnaDogbnVtYmVyO1xuICBkaXJlY3Rpb246IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgQmFzZSBDbGFzcyBmb3IgYWxsIGVkZ2VzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWRnZUJhc2U8VmlhID0gdW5kZWZpbmVkPiBpbXBsZW1lbnRzIEVkZ2VUeXBlIHtcbiAgcHVibGljIGZyb20hOiBWTm9kZTsgLy8gSW5pdGlhbGl6ZWQgaW4gc2V0T3B0aW9uc1xuICBwdWJsaWMgZnJvbVBvaW50OiBQb2ludDtcbiAgcHVibGljIHRvITogVk5vZGU7IC8vIEluaXRpYWxpemVkIGluIHNldE9wdGlvbnNcbiAgcHVibGljIHRvUG9pbnQ6IFBvaW50O1xuICBwdWJsaWMgdmlhPzogVk5vZGU7XG5cbiAgcHVibGljIGNvbG9yOiB1bmtub3duID0ge307XG4gIHB1YmxpYyBjb2xvckRpcnR5ID0gdHJ1ZTtcbiAgcHVibGljIGlkITogSWQ7IC8vIEluaXRpYWxpemVkIGluIHNldE9wdGlvbnNcbiAgcHVibGljIG9wdGlvbnMhOiBFZGdlT3B0aW9uczsgLy8gSW5pdGlhbGl6ZWQgaW4gc2V0T3B0aW9uc1xuICBwdWJsaWMgaG92ZXJXaWR0aCA9IDEuNTtcbiAgcHVibGljIHNlbGVjdGlvbldpZHRoID0gMjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBvZiBnaXZlbiBlZGdlLlxuICAgKiBAcGFyYW0gX2JvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIF9sYWJlbE1vZHVsZSAtIExhYmVsIG1vZHVsZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zOiBFZGdlT3B0aW9ucyxcbiAgICBwcm90ZWN0ZWQgX2JvZHk6IFZCb2R5LFxuICAgIHByb3RlY3RlZCBfbGFiZWxNb2R1bGU6IExhYmVsXG4gICkge1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIHRoaXMuZnJvbVBvaW50ID0gdGhpcy5mcm9tO1xuICAgIHRoaXMudG9Qb2ludCA9IHRoaXMudG87XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2ZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBub2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICBvcHRpb25zPzogRmluZEJvcmRlclBvc2l0aW9uT3B0aW9uczxWaWE+XG4gICk6IFBvaW50VDtcblxuICAvKipcbiAgICogUmV0dXJuIGFkZGl0aW9uYWwgcG9pbnQocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQocykgdGhlIGVkZ2UgcGFzc2VzIHRocm91Z2guXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0VmlhTm9kZSgpOiBWaWE7XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXRQb2ludChwb3NpdGlvbjogbnVtYmVyLCB2aWFOb2RlPzogVmlhKTogUG9pbnQ7XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBjb25uZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuZnJvbSA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLmZyb21dO1xuICAgIHRoaXMudG8gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy50b107XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGNsZWFudXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBuZXcgZWRnZSBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBuZXcgZWRnZSBvcHRpb25zIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM6IEVkZ2VPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIHRoaXMuZnJvbSA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLmZyb21dO1xuICAgIHRoaXMudG8gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy50b107XG4gICAgdGhpcy5pZCA9IHRoaXMub3B0aW9ucy5pZDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZHJhd0xpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImNvbG9yXCJcbiAgICAgIHwgXCJvcGFjaXR5XCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgICB8IFwid2lkdGhcIlxuICAgID4sXG4gICAgX3NlbGVjdGVkPzogYm9vbGVhbixcbiAgICBfaG92ZXI/OiBib29sZWFuLFxuICAgIHZpYU5vZGU6IFZpYSA9IHRoaXMuZ2V0VmlhTm9kZSgpXG4gICk6IHZvaWQge1xuICAgIC8vIHNldCBzdHlsZVxuICAgIGN0eC5zdHJva2VTdHlsZSA9IHRoaXMuZ2V0Q29sb3IoY3R4LCB2YWx1ZXMpO1xuICAgIGN0eC5saW5lV2lkdGggPSB2YWx1ZXMud2lkdGg7XG5cbiAgICBpZiAodmFsdWVzLmRhc2hlcyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX2RyYXdEYXNoZWRMaW5lKGN0eCwgdmFsdWVzLCB2aWFOb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZHJhd0xpbmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgbGluZSB3aXRoIGdpdmVuIHN0eWxlIGJldHdlZW4gdHdvIG5vZGVzIHRocm91Z2ggc3VwcGxpZWQgbm9kZShzKS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcGFyYW0gZnJvbVBvaW50IC0gVE9ETzogU2VlbXMgaWdub3JlZCwgcmVtb3ZlP1xuICAgKiBAcGFyYW0gdG9Qb2ludCAtIFRPRE86IFNlZW1zIGlnbm9yZWQsIHJlbW92ZT9cbiAgICovXG4gIHByaXZhdGUgX2RyYXdMaW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZTogVmlhLFxuICAgIGZyb21Qb2ludD86IFBvaW50LFxuICAgIHRvUG9pbnQ/OiBQb2ludFxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mcm9tICE9IHRoaXMudG8pIHtcbiAgICAgIC8vIGRyYXcgbGluZVxuICAgICAgdGhpcy5fbGluZShjdHgsIHZhbHVlcywgdmlhTm9kZSwgZnJvbVBvaW50LCB0b1BvaW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3gsIHksIHJhZGl1c10gPSB0aGlzLl9nZXRDaXJjbGVEYXRhKGN0eCk7XG4gICAgICB0aGlzLl9jaXJjbGUoY3R4LCB2YWx1ZXMsIHgsIHksIHJhZGl1cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERyYXcgYSBkYXNoZWQgbGluZSB3aXRoIGdpdmVuIHN0eWxlIGJldHdlZW4gdHdvIG5vZGVzIHRocm91Z2ggc3VwcGxpZWQgbm9kZShzKS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcGFyYW0gX2Zyb21Qb2ludCAtIElnbm9yZWQgKFRPRE86IHJlbW92ZSBpbiB0aGUgZnV0dXJlKS5cbiAgICogQHBhcmFtIF90b1BvaW50IC0gSWdub3JlZCAoVE9ETzogcmVtb3ZlIGluIHRoZSBmdXR1cmUpLlxuICAgKi9cbiAgcHJpdmF0ZSBfZHJhd0Rhc2hlZExpbmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJzaGFkb3dDb2xvclwiIHwgXCJzaGFkb3dTaXplXCIgfCBcInNoYWRvd1hcIiB8IFwic2hhZG93WVwiXG4gICAgPixcbiAgICB2aWFOb2RlOiBWaWEsXG4gICAgX2Zyb21Qb2ludD86IFBvaW50LFxuICAgIF90b1BvaW50PzogUG9pbnRcbiAgKTogdm9pZCB7XG4gICAgY3R4LmxpbmVDYXAgPSBcInJvdW5kXCI7XG4gICAgY29uc3QgcGF0dGVybiA9IEFycmF5LmlzQXJyYXkodmFsdWVzLmRhc2hlcykgPyB2YWx1ZXMuZGFzaGVzIDogWzUsIDVdO1xuXG4gICAgLy8gb25seSBmaXJlZm94IGFuZCBjaHJvbWUgc3VwcG9ydCB0aGlzIG1ldGhvZCwgZWxzZSB3ZSB1c2UgdGhlIGxlZ2FjeSBvbmUuXG4gICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICAvLyBzZXQgZGFzaCBzZXR0aW5ncyBmb3IgY2hyb21lIG9yIGZpcmVmb3hcbiAgICAgIGN0eC5zZXRMaW5lRGFzaChwYXR0ZXJuKTtcbiAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IDA7XG5cbiAgICAgIC8vIGRyYXcgdGhlIGxpbmVcbiAgICAgIGlmICh0aGlzLmZyb20gIT0gdGhpcy50bykge1xuICAgICAgICAvLyBkcmF3IGxpbmVcbiAgICAgICAgdGhpcy5fbGluZShjdHgsIHZhbHVlcywgdmlhTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbeCwgeSwgcmFkaXVzXSA9IHRoaXMuX2dldENpcmNsZURhdGEoY3R4KTtcbiAgICAgICAgdGhpcy5fY2lyY2xlKGN0eCwgdmFsdWVzLCB4LCB5LCByYWRpdXMpO1xuICAgICAgfVxuXG4gICAgICAvLyByZXN0b3JlIHRoZSBkYXNoIHNldHRpbmdzLlxuICAgICAgY3R4LnNldExpbmVEYXNoKFswXSk7XG4gICAgICBjdHgubGluZURhc2hPZmZzZXQgPSAwO1xuICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5zdXBwb3J0aW5nIHNtb290aCBsaW5lc1xuICAgICAgaWYgKHRoaXMuZnJvbSAhPSB0aGlzLnRvKSB7XG4gICAgICAgIC8vIGRyYXcgbGluZVxuICAgICAgICBkcmF3RGFzaGVkTGluZShcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgdGhpcy5mcm9tLngsXG4gICAgICAgICAgdGhpcy5mcm9tLnksXG4gICAgICAgICAgdGhpcy50by54LFxuICAgICAgICAgIHRoaXMudG8ueSxcbiAgICAgICAgICBwYXR0ZXJuXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbeCwgeSwgcmFkaXVzXSA9IHRoaXMuX2dldENpcmNsZURhdGEoY3R4KTtcbiAgICAgICAgdGhpcy5fY2lyY2xlKGN0eCwgdmFsdWVzLCB4LCB5LCByYWRpdXMpO1xuICAgICAgfVxuICAgICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgICAgdGhpcy5lbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuXG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIC8vIGRpc2FibGUgc2hhZG93cyBmb3Igb3RoZXIgZWxlbWVudHMuXG4gICAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3IGEgbGluZSB3aXRoIGdpdmVuIHN0eWxlIGJldHdlZW4gdHdvIG5vZGVzIHRocm91Z2ggc3VwcGxpZWQgbm9kZShzKS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHZpYU5vZGUgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcGFyYW0gZnJvbVBvaW50IC0gVE9ETzogU2VlbXMgaWdub3JlZCwgcmVtb3ZlP1xuICAgKiBAcGFyYW0gdG9Qb2ludCAtIFRPRE86IFNlZW1zIGlnbm9yZWQsIHJlbW92ZT9cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgIHZpYU5vZGU6IFZpYSxcbiAgICBmcm9tUG9pbnQ/OiBQb2ludCxcbiAgICB0b1BvaW50PzogUG9pbnRcbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwdWJsaWMgZmluZEJvcmRlclBvc2l0aW9uKFxuICAgIG5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIG9wdGlvbnM/OiBGaW5kQm9yZGVyUG9zaXRpb25PcHRpb25zPFZpYT4gfCBGaW5kQm9yZGVyUG9zaXRpb25DaXJjbGVPcHRpb25zXG4gICk6IFBvaW50VCB7XG4gICAgaWYgKHRoaXMuZnJvbSAhPSB0aGlzLnRvKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uKG5vZGUsIGN0eCwgb3B0aW9ucyBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQ2lyY2xlKG5vZGUsIGN0eCwgb3B0aW9ucyBhcyBhbnkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZmluZEJvcmRlclBvc2l0aW9ucyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHtcbiAgICBmcm9tOiBQb2ludDtcbiAgICB0bzogUG9pbnQ7XG4gIH0ge1xuICAgIGlmICh0aGlzLmZyb20gIT0gdGhpcy50bykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbTogdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uKHRoaXMuZnJvbSwgY3R4KSxcbiAgICAgICAgdG86IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbih0aGlzLnRvLCBjdHgpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3gsIHldID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YShjdHgpLnNsaWNlKDAsIDIpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmcm9tOiB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgICAgbG93OiAwLjI1LFxuICAgICAgICAgIGhpZ2g6IDAuNixcbiAgICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgICB9KSxcbiAgICAgICAgdG86IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBsb3c6IDAuNixcbiAgICAgICAgICBoaWdoOiAwLjgsXG4gICAgICAgICAgZGlyZWN0aW9uOiAxLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGNlbnRlciBwb2ludCBhbmQgcmFkaXVzIG9mIGFuIGVkZ2UgY29ubmVjdGVkIHRvIHRoZSBzYW1lIG5vZGUgYXQgYm90aCBlbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHJldHVybnMgYFt4LCB5LCByYWRpdXNdYFxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXRDaXJjbGVEYXRhKFxuICAgIGN0eD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxuICApOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLnNpemU7XG5cbiAgICBpZiAoY3R4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLmZyb20uc2hhcGUud2lkdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmZyb20uc2hhcGUucmVzaXplKGN0eCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IGNpcmNsZSBjb29yZGluYXRlc1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZ2V0U2VsZlJlZkNvb3JkaW5hdGVzKFxuICAgICAgY3R4LFxuICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUsXG4gICAgICByYWRpdXMsXG4gICAgICB0aGlzLmZyb21cbiAgICApO1xuXG4gICAgcmV0dXJuIFtjb29yZGluYXRlcy54LCBjb29yZGluYXRlcy55LCByYWRpdXNdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHBvaW50IG9uIGEgY2lyY2xlLlxuICAgKlxuICAgKiBAcGFyYW0geCAtIENlbnRlciBvZiB0aGUgY2lyY2xlIG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5IC0gQ2VudGVyIG9mIHRoZSBjaXJjbGUgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHJhZGl1cyAtIFJhZGl1cyBvZiB0aGUgY2lyY2xlLlxuICAgKiBAcGFyYW0gcG9zaXRpb24gLSBWYWx1ZSBiZXR3ZWVuIDAgKGxpbmUgc3RhcnQpIGFuZCAxIChsaW5lIGVuZCkuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiByZXF1ZXN0ZWQgcG9pbnQgb24gdGhlIGNpcmNsZS5cbiAgICovXG4gIHByaXZhdGUgX3BvaW50T25DaXJjbGUoXG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICByYWRpdXM6IG51bWJlcixcbiAgICBwb3NpdGlvbjogbnVtYmVyXG4gICk6IFBvaW50IHtcbiAgICBjb25zdCBhbmdsZSA9IHBvc2l0aW9uICogMiAqIE1hdGguUEk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHggKyByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSksXG4gICAgICB5OiB5IC0gcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgZnVuY3Rpb24gdXNlcyBiaW5hcnkgc2VhcmNoIHRvIGxvb2sgZm9yIHRoZSBwb2ludCB3aGVyZSB0aGUgY2lyY2xlIGNyb3NzZXMgdGhlIGJvcmRlciBvZiB0aGUgbm9kZS5cbiAgICogQHBhcmFtIG5lYXJOb2RlIC0gVGhlIG5vZGUgKGVpdGhlciBmcm9tIG9yIHRvIG5vZGUgb2YgdGhlIGVkZ2UpLlxuICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNvbnRleHQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIENhcnRlc2lhbiBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGJvcmRlciBvZiB0aGUgbm9kZSBhbmQgdGhlIGVkZ2UuXG4gICAqL1xuICBwcml2YXRlIF9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUoXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIG9wdGlvbnM6IEZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZU9wdGlvbnNcbiAgKTogUG9pbnRUIHtcbiAgICBjb25zdCB4ID0gb3B0aW9ucy54O1xuICAgIGNvbnN0IHkgPSBvcHRpb25zLnk7XG4gICAgbGV0IGxvdyA9IG9wdGlvbnMubG93O1xuICAgIGxldCBoaWdoID0gb3B0aW9ucy5oaWdoO1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uO1xuXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwO1xuICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLnNpemU7XG4gICAgY29uc3QgdGhyZXNob2xkID0gMC4wNTtcbiAgICBsZXQgcG9zOiBQb2ludDtcblxuICAgIGxldCBtaWRkbGUgPSAobG93ICsgaGlnaCkgKiAwLjU7XG5cbiAgICBsZXQgZW5kUG9pbnRPZmZzZXQgPSAwO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYXJyb3dTdHJpa2V0aHJvdWdoID09PSB0cnVlKSB7XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAtMSkge1xuICAgICAgICBlbmRQb2ludE9mZnNldCA9IHRoaXMub3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tO1xuICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IDEpIHtcbiAgICAgICAgZW5kUG9pbnRPZmZzZXQgPSB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgZG8ge1xuICAgICAgbWlkZGxlID0gKGxvdyArIGhpZ2gpICogMC41O1xuXG4gICAgICBwb3MgPSB0aGlzLl9wb2ludE9uQ2lyY2xlKHgsIHksIHJhZGl1cywgbWlkZGxlKTtcbiAgICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMihuZWFyTm9kZS55IC0gcG9zLnksIG5lYXJOb2RlLnggLSBwb3MueCk7XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9Cb3JkZXIgPVxuICAgICAgICBuZWFyTm9kZS5kaXN0YW5jZVRvQm9yZGVyKGN0eCwgYW5nbGUpICsgZW5kUG9pbnRPZmZzZXQ7XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9Qb2ludCA9IE1hdGguc3FydChcbiAgICAgICAgTWF0aC5wb3cocG9zLnggLSBuZWFyTm9kZS54LCAyKSArIE1hdGgucG93KHBvcy55IC0gbmVhck5vZGUueSwgMilcbiAgICAgICk7XG4gICAgICBjb25zdCBkaWZmZXJlbmNlID0gZGlzdGFuY2VUb0JvcmRlciAtIGRpc3RhbmNlVG9Qb2ludDtcbiAgICAgIGlmIChNYXRoLmFicyhkaWZmZXJlbmNlKSA8IHRocmVzaG9sZCkge1xuICAgICAgICBicmVhazsgLy8gZm91bmRcbiAgICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZSA+IDApIHtcbiAgICAgICAgLy8gZGlzdGFuY2UgdG8gbm9kZXMgaXMgbGFyZ2VyIHRoYW4gZGlzdGFuY2UgdG8gYm9yZGVyIC0tPiB0IG5lZWRzIHRvIGJlIGJpZ2dlciBpZiB3ZSdyZSBsb29raW5nIGF0IHRoZSB0byBub2RlLlxuICAgICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgICAgIGhpZ2ggPSBtaWRkbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG93ID0gbWlkZGxlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICsraXRlcmF0aW9uO1xuICAgIH0gd2hpbGUgKGxvdyA8PSBoaWdoICYmIGl0ZXJhdGlvbiA8IG1heEl0ZXJhdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBvcyxcbiAgICAgIHQ6IG1pZGRsZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGluZSB3aWR0aCBvZiB0aGUgZWRnZS4gRGVwZW5kcyBvbiB3aWR0aCBhbmQgd2hldGhlciBvbmUgb2YgdGhlIGNvbm5lY3RlZCBub2RlcyBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHNlbGVjdGVkIC0gRGV0ZXJtaW5lcyB3aGV0ZXIgdGhlIGxpbmUgaXMgc2VsZWN0ZWQuXG4gICAqIEBwYXJhbSBob3ZlciAtIERldGVybWluZXMgd2hldGVyIHRoZSBsaW5lIGlzIGJlaW5nIGhvdmVyZWQsIG9ubHkgYXBwbGllcyBpZiBzZWxlY3RlZCBpcyBmYWxzZS5cbiAgICogQHJldHVybnMgVGhlIHdpZHRoIG9mIHRoZSBsaW5lLlxuICAgKi9cbiAgcHVibGljIGdldExpbmVXaWR0aChzZWxlY3RlZDogYm9vbGVhbiwgaG92ZXI6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGlmIChzZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuc2VsZWN0aW9uV2lkdGgsIDAuMyAvIHRoaXMuX2JvZHkudmlldy5zY2FsZSk7XG4gICAgfSBlbHNlIGlmIChob3ZlciA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuaG92ZXJXaWR0aCwgMC4zIC8gdGhpcy5fYm9keS52aWV3LnNjYWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMub3B0aW9ucy53aWR0aCwgMC4zIC8gdGhpcy5fYm9keS52aWV3LnNjYWxlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgY29sb3Igb3IgZ3JhZGllbnQgZm9yIGdpdmVuIGVkZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgbGlrZSBjb2xvciwgb3BhY2l0eSBvciBzaGFkb3cuXG4gICAqIEBwYXJhbSBfc2VsZWN0ZWQgLSBJZ25vcmVkIChUT0RPOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSkuXG4gICAqIEBwYXJhbSBfaG92ZXIgLSBJZ25vcmVkIChUT0RPOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSkuXG4gICAqIEByZXR1cm5zIENvbG9yIHN0cmluZyBpZiBzaW5nbGUgY29sb3IgaXMgaW5oZXJpdGVkIG9yIGdyYWRpZW50IGlmIHR3by5cbiAgICovXG4gIHB1YmxpYyBnZXRDb2xvcihcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPEVkZ2VGb3JtYXR0aW5nVmFsdWVzLCBcImNvbG9yXCIgfCBcIm9wYWNpdHlcIj5cbiAgKTogc3RyaW5nIHwgQ2FudmFzR3JhZGllbnQge1xuICAgIGlmICh2YWx1ZXMuaW5oZXJpdHNDb2xvciAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIHdoZW4gdGhpcyBpcyBhIGxvb3AgZWRnZSwganVzdCB1c2UgdGhlICdmcm9tJyBtZXRob2RcbiAgICAgIGlmICh2YWx1ZXMuaW5oZXJpdHNDb2xvciA9PT0gXCJib3RoXCIgJiYgdGhpcy5mcm9tLmlkICE9PSB0aGlzLnRvLmlkKSB7XG4gICAgICAgIGNvbnN0IGdyZCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudChcbiAgICAgICAgICB0aGlzLmZyb20ueCxcbiAgICAgICAgICB0aGlzLmZyb20ueSxcbiAgICAgICAgICB0aGlzLnRvLngsXG4gICAgICAgICAgdGhpcy50by55XG4gICAgICAgICk7XG4gICAgICAgIGxldCBmcm9tQ29sb3IgPSB0aGlzLmZyb20ub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyO1xuICAgICAgICBsZXQgdG9Db2xvciA9IHRoaXMudG8ub3B0aW9ucy5jb2xvci5oaWdobGlnaHQuYm9yZGVyO1xuXG4gICAgICAgIGlmICh0aGlzLmZyb20uc2VsZWN0ZWQgPT09IGZhbHNlICYmIHRoaXMudG8uc2VsZWN0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgZnJvbUNvbG9yID0gb3ZlcnJpZGVPcGFjaXR5KFxuICAgICAgICAgICAgdGhpcy5mcm9tLm9wdGlvbnMuY29sb3IuYm9yZGVyLFxuICAgICAgICAgICAgdmFsdWVzLm9wYWNpdHlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRvQ29sb3IgPSBvdmVycmlkZU9wYWNpdHkoXG4gICAgICAgICAgICB0aGlzLnRvLm9wdGlvbnMuY29sb3IuYm9yZGVyLFxuICAgICAgICAgICAgdmFsdWVzLm9wYWNpdHlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbS5zZWxlY3RlZCA9PT0gdHJ1ZSAmJiB0aGlzLnRvLnNlbGVjdGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIHRvQ29sb3IgPSB0aGlzLnRvLm9wdGlvbnMuY29sb3IuYm9yZGVyO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbS5zZWxlY3RlZCA9PT0gZmFsc2UgJiYgdGhpcy50by5zZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGZyb21Db2xvciA9IHRoaXMuZnJvbS5vcHRpb25zLmNvbG9yLmJvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICBncmQuYWRkQ29sb3JTdG9wKDAsIGZyb21Db2xvcik7XG4gICAgICAgIGdyZC5hZGRDb2xvclN0b3AoMSwgdG9Db2xvcik7XG5cbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGhpcyByZXR1cm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG4gICAgICAgIHJldHVybiBncmQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZXMuaW5oZXJpdHNDb2xvciA9PT0gXCJ0b1wiKSB7XG4gICAgICAgIHJldHVybiBvdmVycmlkZU9wYWNpdHkodGhpcy50by5vcHRpb25zLmNvbG9yLmJvcmRlciwgdmFsdWVzLm9wYWNpdHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gXCJmcm9tXCJcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlT3BhY2l0eSh0aGlzLmZyb20ub3B0aW9ucy5jb2xvci5ib3JkZXIsIHZhbHVlcy5vcGFjaXR5KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG92ZXJyaWRlT3BhY2l0eSh2YWx1ZXMuY29sb3IsIHZhbHVlcy5vcGFjaXR5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRHJhdyBhIGxpbmUgZnJvbSBhIG5vZGUgdG8gaXRzZWxmLCBhIGNpcmNsZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBsaWtlIGNvbG9yLCBvcGFjaXR5IG9yIHNoYWRvdy5cbiAgICogQHBhcmFtIHggLSBDZW50ZXIgb2YgdGhlIGNpcmNsZSBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geSAtIENlbnRlciBvZiB0aGUgY2lyY2xlIG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSByYWRpdXMgLSBSYWRpdXMgb2YgdGhlIGNpcmNsZS5cbiAgICovXG4gIHByaXZhdGUgX2NpcmNsZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInNoYWRvd0NvbG9yXCIgfCBcInNoYWRvd1NpemVcIiB8IFwic2hhZG93WFwiIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgcmFkaXVzOiBudW1iZXJcbiAgKTogdm9pZCB7XG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcblxuICAgIC8vZnVsbCBjaXJjbGVcbiAgICBsZXQgYW5nbGVGcm9tID0gMDtcbiAgICBsZXQgYW5nbGVUbyA9IE1hdGguUEkgKiAyO1xuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5yZW5kZXJCZWhpbmRUaGVOb2RlKSB7XG4gICAgICAvL3JlbmRlciBvbmx5IHBhcnRzIHdoaWNoIGFyZSBub3Qgb3ZlcmxhcGluZyB3aXRoIHBhcmVudCBub2RlXG4gICAgICAvL25lZWQgdG8gZmluZCB4LHkgb2YgZnJvbSBwb2ludCBhbmQgeCx5IHRvIHBvaW50XG4gICAgICAvL2NhbGN1bGF0aW5nIHJhZGlhbnNcbiAgICAgIGNvbnN0IGxvdyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlO1xuICAgICAgY29uc3QgaGlnaCA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlICsgTWF0aC5QSTtcbiAgICAgIGNvbnN0IHBvaW50VEZyb20gPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUodGhpcy5mcm9tLCBjdHgsIHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgbG93LFxuICAgICAgICBoaWdoLFxuICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwb2ludFRUbyA9IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBsb3csXG4gICAgICAgIGhpZ2gsXG4gICAgICAgIGRpcmVjdGlvbjogMSxcbiAgICAgIH0pO1xuICAgICAgYW5nbGVGcm9tID0gTWF0aC5hdGFuMihwb2ludFRGcm9tLnkgLSB5LCBwb2ludFRGcm9tLnggLSB4KTtcbiAgICAgIGFuZ2xlVG8gPSBNYXRoLmF0YW4yKHBvaW50VFRvLnkgLSB5LCBwb2ludFRUby54IC0geCk7XG4gICAgfVxuXG4gICAgLy8gZHJhdyBhIGNpcmNsZVxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKHgsIHksIHJhZGl1cywgYW5nbGVGcm9tLCBhbmdsZVRvLCBmYWxzZSk7XG4gICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgLy8gZGlzYWJsZSBzaGFkb3dzIGZvciBvdGhlciBlbGVtZW50cy5cbiAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIEByZW1hcmtzXG4gICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvODQ5MjExL3Nob3J0ZXN0LWRpc3RhbmNhZS1iZXR3ZWVuLWEtcG9pbnQtYW5kLWEtbGluZS1zZWdtZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXJcbiAgKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5mcm9tICE9IHRoaXMudG8pIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXREaXN0YW5jZVRvRWRnZSh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3gsIHksIHJhZGl1c10gPSB0aGlzLl9nZXRDaXJjbGVEYXRhKHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBkeCA9IHggLSB4MztcbiAgICAgIGNvbnN0IGR5ID0geSAtIHkzO1xuICAgICAgcmV0dXJuIE1hdGguYWJzKE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSkgLSByYWRpdXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCAoeDMsIHkzKSBhbmQgYSBsaW5lIHNlZ21lbnQgZnJvbSAoeDEsIHkxKSB0byAoeDIsIHkyKS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84NDkyMTEvc2hvcnRlc3QtZGlzdGFuY2FlLWJldHdlZW4tYS1wb2ludC1hbmQtYS1saW5lLXNlZ21lbnRcbiAgICogQHBhcmFtIHgxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB2aWEgLSBBZGRpdGlvbmFsIGNvbnRyb2wgcG9pbnQocykgZm9yIHRoZSBlZGdlLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGluZSBzZWdtZW50IGFuZCB0aGUgcG9pbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyLFxuICAgIHZpYT86IFZpYVxuICApOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBhIHBvaW50ICh4MywgeTMpIGFuZCBhIGxpbmUgc2VnbWVudCBmcm9tICh4MSwgeTEpIHRvICh4MiwgeTIpLlxuICAgKlxuICAgKiBAcGFyYW0geDEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDIgLSBTZWNvbmQgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB4MyAtIFBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHJldHVybnMgVGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGxpbmUgc2VnbWVudCBhbmQgdGhlIHBvaW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvTGluZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIGNvbnN0IHB4ID0geDIgLSB4MTtcbiAgICBjb25zdCBweSA9IHkyIC0geTE7XG4gICAgY29uc3Qgc29tZXRoaW5nID0gcHggKiBweCArIHB5ICogcHk7XG4gICAgbGV0IHUgPSAoKHgzIC0geDEpICogcHggKyAoeTMgLSB5MSkgKiBweSkgLyBzb21ldGhpbmc7XG5cbiAgICBpZiAodSA+IDEpIHtcbiAgICAgIHUgPSAxO1xuICAgIH0gZWxzZSBpZiAodSA8IDApIHtcbiAgICAgIHUgPSAwO1xuICAgIH1cblxuICAgIGNvbnN0IHggPSB4MSArIHUgKiBweDtcbiAgICBjb25zdCB5ID0geTEgKyB1ICogcHk7XG4gICAgY29uc3QgZHggPSB4IC0geDM7XG4gICAgY29uc3QgZHkgPSB5IC0geTM7XG5cbiAgICAvLyMgTm90ZTogSWYgdGhlIGFjdHVhbCBkaXN0YW5jZSBkb2VzIG5vdCBtYXR0ZXIsXG4gICAgLy8jIGlmIHlvdSBvbmx5IHdhbnQgdG8gY29tcGFyZSB3aGF0IHRoaXMgZnVuY3Rpb25cbiAgICAvLyMgcmV0dXJucyB0byBvdGhlciByZXN1bHRzIG9mIHRoaXMgZnVuY3Rpb24sIHlvdVxuICAgIC8vIyBjYW4ganVzdCByZXR1cm4gdGhlIHNxdWFyZWQgZGlzdGFuY2UgaW5zdGVhZFxuICAgIC8vIyAoaS5lLiByZW1vdmUgdGhlIHNxcnQpIHRvIGdhaW4gYSBsaXR0bGUgcGVyZm9ybWFuY2VcblxuICAgIHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwibWlkZGxlXCIsXG4gICAgdmlhTm9kZTogVk5vZGUsXG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgaG92ZXI6IGJvb2xlYW4sXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJtaWRkbGVBcnJvd1R5cGVcIiB8IFwibWlkZGxlQXJyb3dTY2FsZVwiIHwgXCJ3aWR0aFwiXG4gICAgPlxuICApOiBBcnJvd0RhdGFXaXRoQ29yZTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwidG9cIixcbiAgICB2aWFOb2RlOiBWTm9kZSxcbiAgICBzZWxlY3RlZDogYm9vbGVhbixcbiAgICBob3ZlcjogYm9vbGVhbixcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICBcInRvQXJyb3dUeXBlXCIgfCBcInRvQXJyb3dTY2FsZVwiIHwgXCJ3aWR0aFwiXG4gICAgPlxuICApOiBBcnJvd0RhdGFXaXRoQ29yZTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwiZnJvbVwiLFxuICAgIHZpYU5vZGU6IFZOb2RlLFxuICAgIHNlbGVjdGVkOiBib29sZWFuLFxuICAgIGhvdmVyOiBib29sZWFuLFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwiZnJvbUFycm93VHlwZVwiIHwgXCJmcm9tQXJyb3dTY2FsZVwiIHwgXCJ3aWR0aFwiXG4gICAgPlxuICApOiBBcnJvd0RhdGFXaXRoQ29yZTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRBcnJvd0RhdGEoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgcG9zaXRpb246IFwiZnJvbVwiIHwgXCJ0b1wiIHwgXCJtaWRkbGVcIixcbiAgICB2aWFOb2RlOiBWTm9kZSxcbiAgICBfc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gICAgX2hvdmVyOiBib29sZWFuLFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8RWRnZUZvcm1hdHRpbmdWYWx1ZXMsIFwid2lkdGhcIj5cbiAgKTogQXJyb3dEYXRhV2l0aENvcmUge1xuICAgIC8vIHNldCBsZXRzXG4gICAgbGV0IGFuZ2xlOiBudW1iZXI7XG4gICAgbGV0IGFycm93UG9pbnQ6IFBvaW50O1xuICAgIGxldCBub2RlMTogVk5vZGU7XG4gICAgbGV0IG5vZGUyOiBWTm9kZTtcbiAgICBsZXQgcmV2ZXJzZWQ6IGJvb2xlYW47XG4gICAgbGV0IHNjYWxlRmFjdG9yOiBudW1iZXI7XG4gICAgbGV0IHR5cGU6IEFycm93VHlwZTtcbiAgICBjb25zdCBsaW5lV2lkdGg6IG51bWJlciA9IHZhbHVlcy53aWR0aDtcblxuICAgIGlmIChwb3NpdGlvbiA9PT0gXCJmcm9tXCIpIHtcbiAgICAgIG5vZGUxID0gdGhpcy5mcm9tO1xuICAgICAgbm9kZTIgPSB0aGlzLnRvO1xuICAgICAgcmV2ZXJzZWQgPSB2YWx1ZXMuZnJvbUFycm93U2NhbGUhIDwgMDtcbiAgICAgIHNjYWxlRmFjdG9yID0gTWF0aC5hYnModmFsdWVzLmZyb21BcnJvd1NjYWxlISk7XG4gICAgICB0eXBlID0gdmFsdWVzLmZyb21BcnJvd1R5cGUhO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09IFwidG9cIikge1xuICAgICAgbm9kZTEgPSB0aGlzLnRvO1xuICAgICAgbm9kZTIgPSB0aGlzLmZyb207XG4gICAgICByZXZlcnNlZCA9IHZhbHVlcy50b0Fycm93U2NhbGUhIDwgMDtcbiAgICAgIHNjYWxlRmFjdG9yID0gTWF0aC5hYnModmFsdWVzLnRvQXJyb3dTY2FsZSEpO1xuICAgICAgdHlwZSA9IHZhbHVlcy50b0Fycm93VHlwZSE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUxID0gdGhpcy50bztcbiAgICAgIG5vZGUyID0gdGhpcy5mcm9tO1xuICAgICAgcmV2ZXJzZWQgPSB2YWx1ZXMubWlkZGxlQXJyb3dTY2FsZSEgPCAwO1xuICAgICAgc2NhbGVGYWN0b3IgPSBNYXRoLmFicyh2YWx1ZXMubWlkZGxlQXJyb3dTY2FsZSEpO1xuICAgICAgdHlwZSA9IHZhbHVlcy5taWRkbGVBcnJvd1R5cGUhO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IDE1ICogc2NhbGVGYWN0b3IgKyAzICogbGluZVdpZHRoOyAvLyAzKiBsaW5lV2lkdGggaXMgdGhlIHdpZHRoIG9mIHRoZSBlZGdlLlxuXG4gICAgLy8gaWYgbm90IGNvbm5lY3RlZCB0byBpdHNlbGZcbiAgICBpZiAobm9kZTEgIT0gbm9kZTIpIHtcbiAgICAgIGNvbnN0IGFwcHJveGltYXRlRWRnZUxlbmd0aCA9IE1hdGguaHlwb3QoXG4gICAgICAgIG5vZGUxLnggLSBub2RlMi54LFxuICAgICAgICBub2RlMS55IC0gbm9kZTIueVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlTGVuZ3RoID0gbGVuZ3RoIC8gYXBwcm94aW1hdGVFZGdlTGVuZ3RoO1xuXG4gICAgICBpZiAocG9zaXRpb24gIT09IFwibWlkZGxlXCIpIHtcbiAgICAgICAgLy8gZHJhdyBhcnJvdyBoZWFkXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc21vb3RoLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBwb2ludFQgPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb24obm9kZTEsIGN0eCwgeyB2aWE6IHZpYU5vZGUgfSk7XG4gICAgICAgICAgY29uc3QgZ3VpZGVQb3MgPSB0aGlzLmdldFBvaW50KFxuICAgICAgICAgICAgcG9pbnRULnQgKyByZWxhdGl2ZUxlbmd0aCAqIChwb3NpdGlvbiA9PT0gXCJmcm9tXCIgPyAxIDogLTEpLFxuICAgICAgICAgICAgdmlhTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYW5nbGUgPSBNYXRoLmF0YW4yKHBvaW50VC55IC0gZ3VpZGVQb3MueSwgcG9pbnRULnggLSBndWlkZVBvcy54KTtcbiAgICAgICAgICBhcnJvd1BvaW50ID0gcG9pbnRUO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFuZ2xlID0gTWF0aC5hdGFuMihub2RlMS55IC0gbm9kZTIueSwgbm9kZTEueCAtIG5vZGUyLngpO1xuICAgICAgICAgIGFycm93UG9pbnQgPSB0aGlzLl9maW5kQm9yZGVyUG9zaXRpb24obm9kZTEsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5lZ2F0aXZlIGhhbGYgbGVuZ3RoIHJldmVyc2VzIGFycm93IGRpcmVjdGlvbi5cbiAgICAgICAgY29uc3QgaGFsZkxlbmd0aCA9IChyZXZlcnNlZCA/IC1yZWxhdGl2ZUxlbmd0aCA6IHJlbGF0aXZlTGVuZ3RoKSAvIDI7XG4gICAgICAgIGNvbnN0IGd1aWRlUG9zMSA9IHRoaXMuZ2V0UG9pbnQoMC41ICsgaGFsZkxlbmd0aCwgdmlhTm9kZSk7XG4gICAgICAgIGNvbnN0IGd1aWRlUG9zMiA9IHRoaXMuZ2V0UG9pbnQoMC41IC0gaGFsZkxlbmd0aCwgdmlhTm9kZSk7XG4gICAgICAgIGFuZ2xlID0gTWF0aC5hdGFuMihcbiAgICAgICAgICBndWlkZVBvczEueSAtIGd1aWRlUG9zMi55LFxuICAgICAgICAgIGd1aWRlUG9zMS54IC0gZ3VpZGVQb3MyLnhcbiAgICAgICAgKTtcbiAgICAgICAgYXJyb3dQb2ludCA9IHRoaXMuZ2V0UG9pbnQoMC41LCB2aWFOb2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZHJhdyBjaXJjbGVcbiAgICAgIGNvbnN0IFt4LCB5LCByYWRpdXNdID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YShjdHgpO1xuXG4gICAgICBpZiAocG9zaXRpb24gPT09IFwiZnJvbVwiKSB7XG4gICAgICAgIGNvbnN0IGxvdyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlO1xuICAgICAgICBjb25zdCBoaWdoID0gdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUgKyBNYXRoLlBJO1xuXG4gICAgICAgIGNvbnN0IHBvaW50VCA9IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBsb3csXG4gICAgICAgICAgaGlnaCxcbiAgICAgICAgICBkaXJlY3Rpb246IC0xLFxuICAgICAgICB9KTtcbiAgICAgICAgYW5nbGUgPSBwb2ludFQudCAqIC0yICogTWF0aC5QSSArIDEuNSAqIE1hdGguUEkgKyAwLjEgKiBNYXRoLlBJO1xuICAgICAgICBhcnJvd1BvaW50ID0gcG9pbnRUO1xuICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9PT0gXCJ0b1wiKSB7XG4gICAgICAgIGNvbnN0IGxvdyA9IHRoaXMub3B0aW9ucy5zZWxmUmVmZXJlbmNlLmFuZ2xlO1xuICAgICAgICBjb25zdCBoaWdoID0gdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUgKyBNYXRoLlBJO1xuXG4gICAgICAgIGNvbnN0IHBvaW50VCA9IHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkNpcmNsZSh0aGlzLmZyb20sIGN0eCwge1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBsb3csXG4gICAgICAgICAgaGlnaCxcbiAgICAgICAgICBkaXJlY3Rpb246IDEsXG4gICAgICAgIH0pO1xuICAgICAgICBhbmdsZSA9IHBvaW50VC50ICogLTIgKiBNYXRoLlBJICsgMS41ICogTWF0aC5QSSAtIDEuMSAqIE1hdGguUEk7XG4gICAgICAgIGFycm93UG9pbnQgPSBwb2ludFQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZSAvICgyICogTWF0aC5QSSk7XG4gICAgICAgIGFycm93UG9pbnQgPSB0aGlzLl9wb2ludE9uQ2lyY2xlKHgsIHksIHJhZGl1cywgcG9zKTtcbiAgICAgICAgYW5nbGUgPSBwb3MgKiAtMiAqIE1hdGguUEkgKyAxLjUgKiBNYXRoLlBJICsgMC4xICogTWF0aC5QSTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB4aSA9IGFycm93UG9pbnQueCAtIGxlbmd0aCAqIDAuOSAqIE1hdGguY29zKGFuZ2xlKTtcbiAgICBjb25zdCB5aSA9IGFycm93UG9pbnQueSAtIGxlbmd0aCAqIDAuOSAqIE1hdGguc2luKGFuZ2xlKTtcbiAgICBjb25zdCBhcnJvd0NvcmUgPSB7IHg6IHhpLCB5OiB5aSB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvaW50OiBhcnJvd1BvaW50LFxuICAgICAgY29yZTogYXJyb3dDb3JlLFxuICAgICAgYW5nbGU6IGFuZ2xlLFxuICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGRyYXdBcnJvd0hlYWQoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImNvbG9yXCJcbiAgICAgIHwgXCJvcGFjaXR5XCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgICB8IFwid2lkdGhcIlxuICAgID4sXG4gICAgX3NlbGVjdGVkOiBib29sZWFuLFxuICAgIF9ob3ZlcjogYm9vbGVhbixcbiAgICBhcnJvd0RhdGE6IEFycm93RGF0YVxuICApOiB2b2lkIHtcbiAgICAvLyBzZXQgc3R5bGVcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSB0aGlzLmdldENvbG9yKGN0eCwgdmFsdWVzKTtcbiAgICBjdHguZmlsbFN0eWxlID0gY3R4LnN0cm9rZVN0eWxlO1xuICAgIGN0eC5saW5lV2lkdGggPSB2YWx1ZXMud2lkdGg7XG5cbiAgICBjb25zdCBjYW5GaWxsID0gRW5kUG9pbnRzLmRyYXcoY3R4LCBhcnJvd0RhdGEpO1xuXG4gICAgaWYgKGNhbkZpbGwpIHtcbiAgICAgIC8vIGRyYXcgc2hhZG93IGlmIGVuYWJsZWRcbiAgICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgICAvLyBkaXNhYmxlIHNoYWRvd3MgZm9yIG90aGVyIGVsZW1lbnRzLlxuICAgICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzaGFkb3cgZm9ybWF0dGluZyB2YWx1ZXMgaW4gdGhlIGNvbnRleHQgaWYgZW5hYmxlZCwgZG8gbm90aGluZyBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gRm9ybWF0dGluZyB2YWx1ZXMgZm9yIHRoZSBzaGFkb3cuXG4gICAqL1xuICBwdWJsaWMgZW5hYmxlU2hhZG93KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IHRydWUpIHtcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9IHZhbHVlcy5zaGFkb3dDb2xvcjtcbiAgICAgIGN0eC5zaGFkb3dCbHVyID0gdmFsdWVzLnNoYWRvd1NpemU7XG4gICAgICBjdHguc2hhZG93T2Zmc2V0WCA9IHZhbHVlcy5zaGFkb3dYO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSB2YWx1ZXMuc2hhZG93WTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHNoYWRvdyBmb3JtYXR0aW5nIHZhbHVlcyBpbiB0aGUgY29udGV4dCBpZiBlbmFibGVkLCBkbyBub3RoaW5nIG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBmb3IgdGhlIHNoYWRvdy5cbiAgICovXG4gIHB1YmxpYyBkaXNhYmxlU2hhZG93KFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogRWRnZUZvcm1hdHRpbmdWYWx1ZXNcbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IHRydWUpIHtcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9IFwicmdiYSgwLDAsMCwwKVwiO1xuICAgICAgY3R4LnNoYWRvd0JsdXIgPSAwO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFggPSAwO1xuICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGJhY2tncm91bmQgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXR0aW5nIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIGN0eCAtIFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIGZvciByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZXMgLSBGb3JtYXR0aW5nIHZhbHVlcyBmb3IgdGhlIGJhY2tncm91bmQuXG4gICAqL1xuICBwdWJsaWMgZHJhd0JhY2tncm91bmQoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgXCJiYWNrZ3JvdW5kQ29sb3JcIiB8IFwiYmFja2dyb3VuZFNpemVcIlxuICAgID5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5iYWNrZ3JvdW5kICE9PSBmYWxzZSkge1xuICAgICAgLy8gc2F2ZSBvcmlnaW5hbCBsaW5lIGF0dHJzXG4gICAgICBjb25zdCBvcmlnQ3R4QXR0ciA9IHtcbiAgICAgICAgc3Ryb2tlU3R5bGU6IGN0eC5zdHJva2VTdHlsZSxcbiAgICAgICAgbGluZVdpZHRoOiBjdHgubGluZVdpZHRoLFxuICAgICAgICBkYXNoZXM6IChjdHggYXMgYW55KS5kYXNoZXMsXG4gICAgICB9O1xuXG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSB2YWx1ZXMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IHZhbHVlcy5iYWNrZ3JvdW5kU2l6ZTtcbiAgICAgIHRoaXMuc2V0U3Ryb2tlRGFzaGVkKGN0eCwgdmFsdWVzLmJhY2tncm91bmREYXNoZXMpO1xuXG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgbGluZSBhdHRyc1xuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gb3JpZ0N0eEF0dHIuc3Ryb2tlU3R5bGU7XG4gICAgICBjdHgubGluZVdpZHRoID0gb3JpZ0N0eEF0dHIubGluZVdpZHRoO1xuICAgICAgKGN0eCBhcyBhbnkpLmRhc2hlcyA9IG9yaWdDdHhBdHRyLmRhc2hlcztcbiAgICAgIHRoaXMuc2V0U3Ryb2tlRGFzaGVkKGN0eCwgdmFsdWVzLmRhc2hlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbGluZSBkYXNoIHBhdHRlcm4gaWYgc3VwcG9ydGVkLiBMb2dzIGEgd2FybmluZyB0byB0aGUgY29uc29sZSBpZiBpdCBpc24ndCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gZGFzaGVzIC0gVGhlIHBhdHRlcm4gW2xpbmUsIHNwYWNlLCBsaW5l4oCmXSwgdHJ1ZSBmb3IgZGVmYXVsdCBkYXNoZWQgbGluZSBvciBmYWxzZSBmb3Igbm9ybWFsIGxpbmUuXG4gICAqL1xuICBwdWJsaWMgc2V0U3Ryb2tlRGFzaGVkKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGRhc2hlcz86IGJvb2xlYW4gfCBudW1iZXJbXVxuICApOiB2b2lkIHtcbiAgICBpZiAoZGFzaGVzICE9PSBmYWxzZSkge1xuICAgICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBBcnJheS5pc0FycmF5KGRhc2hlcykgPyBkYXNoZXMgOiBbNSwgNV07XG4gICAgICAgIGN0eC5zZXRMaW5lRGFzaChwYXR0ZXJuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcInNldExpbmVEYXNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLiBUaGUgZGFzaGVkIHN0cm9rZSBjYW5ub3QgYmUgdXNlZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4LnNldExpbmVEYXNoKFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcInNldExpbmVEYXNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLiBUaGUgZGFzaGVkIHN0cm9rZSBjYW5ub3QgYmUgdXNlZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IEVkZ2VCYXNlIH0gZnJvbSBcIi4vZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIFRoZSBCYXNlIENsYXNzIGZvciBhbGwgQmV6aWVyIGVkZ2VzLlxuICogQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbCBzbW9vdGggZ3JhZHVhbCBjdXJ2ZXMgaW4gcGF0aHMgYmV0d2VlbiBub2Rlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJlemllckVkZ2VCYXNlPFZpYT4gZXh0ZW5kcyBFZGdlQmFzZTxWaWE+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYWRkaXRpb25hbCBwb2ludChzKSB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICpcbiAgICogQHJldHVybnMgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludChzKSB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBfZ2V0VmlhQ29vcmRpbmF0ZXMoKTogVmlhO1xuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgYm9yZGVyIG9mIHRoZSBub2RlIGFuZCB0aGUgZWRnZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBmdW5jdGlvbiB1c2VzIGJpbmFyeSBzZWFyY2ggdG8gbG9vayBmb3IgdGhlIHBvaW50IHdoZXJlIHRoZSBiZXppZXIgY3VydmUgY3Jvc3NlcyB0aGUgYm9yZGVyIG9mIHRoZSBub2RlLlxuICAgKiBAcGFyYW0gbmVhck5vZGUgLSBUaGUgbm9kZSAoZWl0aGVyIGZyb20gb3IgdG8gbm9kZSBvZiB0aGUgZWRnZSkuXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmlhTm9kZSAtIEFkZGl0aW9uYWwgbm9kZShzKSB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICogQHJldHVybnMgQ2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgYm9yZGVyIG9mIHRoZSBub2RlIGFuZCB0aGUgZWRnZS5cbiAgICovXG4gIHByb3RlY3RlZCBfZmluZEJvcmRlclBvc2l0aW9uQmV6aWVyKFxuICAgIG5lYXJOb2RlOiBWTm9kZSxcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2aWFOb2RlOiBWaWEgPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IFBvaW50VCB7XG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwO1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IDAuMjtcbiAgICBsZXQgZnJvbSA9IGZhbHNlO1xuICAgIGxldCBoaWdoID0gMTtcbiAgICBsZXQgbG93ID0gMDtcbiAgICBsZXQgbm9kZSA9IHRoaXMudG87XG4gICAgbGV0IHBvczogUG9pbnQ7XG4gICAgbGV0IG1pZGRsZTogbnVtYmVyO1xuXG4gICAgbGV0IGVuZFBvaW50T2Zmc2V0ID0gdGhpcy5vcHRpb25zLmVuZFBvaW50T2Zmc2V0XG4gICAgICA/IHRoaXMub3B0aW9ucy5lbmRQb2ludE9mZnNldC50b1xuICAgICAgOiAwO1xuXG4gICAgaWYgKG5lYXJOb2RlLmlkID09PSB0aGlzLmZyb20uaWQpIHtcbiAgICAgIG5vZGUgPSB0aGlzLmZyb207XG4gICAgICBmcm9tID0gdHJ1ZTtcblxuICAgICAgZW5kUG9pbnRPZmZzZXQgPSB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXRcbiAgICAgICAgPyB0aGlzLm9wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcnJvd1N0cmlrZXRocm91Z2ggPT09IGZhbHNlKSB7XG4gICAgICBlbmRQb2ludE9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgZG8ge1xuICAgICAgbWlkZGxlID0gKGxvdyArIGhpZ2gpICogMC41O1xuXG4gICAgICBwb3MgPSB0aGlzLmdldFBvaW50KG1pZGRsZSwgdmlhTm9kZSk7XG4gICAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIobm9kZS55IC0gcG9zLnksIG5vZGUueCAtIHBvcy54KTtcblxuICAgICAgY29uc3QgZGlzdGFuY2VUb0JvcmRlciA9XG4gICAgICAgIG5vZGUuZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKSArIGVuZFBvaW50T2Zmc2V0O1xuXG4gICAgICBjb25zdCBkaXN0YW5jZVRvUG9pbnQgPSBNYXRoLnNxcnQoXG4gICAgICAgIE1hdGgucG93KHBvcy54IC0gbm9kZS54LCAyKSArIE1hdGgucG93KHBvcy55IC0gbm9kZS55LCAyKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBkaXN0YW5jZVRvQm9yZGVyIC0gZGlzdGFuY2VUb1BvaW50O1xuICAgICAgaWYgKE1hdGguYWJzKGRpZmZlcmVuY2UpIDwgdGhyZXNob2xkKSB7XG4gICAgICAgIGJyZWFrOyAvLyBmb3VuZFxuICAgICAgfSBlbHNlIGlmIChkaWZmZXJlbmNlIDwgMCkge1xuICAgICAgICAvLyBkaXN0YW5jZSB0byBub2RlcyBpcyBsYXJnZXIgdGhhbiBkaXN0YW5jZSB0byBib3JkZXIgLS0+IHQgbmVlZHMgdG8gYmUgYmlnZ2VyIGlmIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHRvIG5vZGUuXG4gICAgICAgIGlmIChmcm9tID09PSBmYWxzZSkge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZnJvbSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBoaWdoID0gbWlkZGxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvdyA9IG1pZGRsZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICArK2l0ZXJhdGlvbjtcbiAgICB9IHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wb3MsXG4gICAgICB0OiBtaWRkbGUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBwb2ludCAoeDMseTMpIGFuZCBhIGxpbmUgc2VnbWVudCBmcm9tICh4MSx5MSkgdG8gKHgyLHkyKS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy84NDkyMTEvc2hvcnRlc3QtZGlzdGFuY2FlLWJldHdlZW4tYS1wb2ludC1hbmQtYS1saW5lLXNlZ21lbnRcbiAgICogQHBhcmFtIHgxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkxIC0gRmlyc3QgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHgyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB4IGF4aXMuXG4gICAqIEBwYXJhbSB5MiAtIFNlY29uZCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkzIC0gUG9zaXRpb24gb2YgdGhlIHBvaW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB2aWEgLSBUaGUgY29udHJvbCBwb2ludCBmb3IgdGhlIGVkZ2UuXG4gICAqIEByZXR1cm5zIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBsaW5lIHNlZ21lbnQgYW5kIHRoZSBwb2ludC5cbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXIsXG4gICAgdmlhOiBQb2ludFxuICApOiBudW1iZXIge1xuICAgIC8vIHgzLHkzIGlzIHRoZSBwb2ludFxuICAgIGxldCBtaW5EaXN0YW5jZSA9IDFlOTtcbiAgICBsZXQgZGlzdGFuY2U7XG4gICAgbGV0IGksIHQsIHgsIHk7XG4gICAgbGV0IGxhc3RYID0geDE7XG4gICAgbGV0IGxhc3RZID0geTE7XG4gICAgZm9yIChpID0gMTsgaSA8IDEwOyBpKyspIHtcbiAgICAgIHQgPSAwLjEgKiBpO1xuICAgICAgeCA9XG4gICAgICAgIE1hdGgucG93KDEgLSB0LCAyKSAqIHgxICsgMiAqIHQgKiAoMSAtIHQpICogdmlhLnggKyBNYXRoLnBvdyh0LCAyKSAqIHgyO1xuICAgICAgeSA9XG4gICAgICAgIE1hdGgucG93KDEgLSB0LCAyKSAqIHkxICsgMiAqIHQgKiAoMSAtIHQpICogdmlhLnkgKyBNYXRoLnBvdyh0LCAyKSAqIHkyO1xuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIGRpc3RhbmNlID0gdGhpcy5fZ2V0RGlzdGFuY2VUb0xpbmUobGFzdFgsIGxhc3RZLCB4LCB5LCB4MywgeTMpO1xuICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlIDwgbWluRGlzdGFuY2UgPyBkaXN0YW5jZSA6IG1pbkRpc3RhbmNlO1xuICAgICAgfVxuICAgICAgbGFzdFggPSB4O1xuICAgICAgbGFzdFkgPSB5O1xuICAgIH1cblxuICAgIHJldHVybiBtaW5EaXN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBiZXppZXIgY3VydmUgYmV0d2VlbiB0d28gbm9kZXMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBtZXRob2QgYWNjZXB0cyB6ZXJvLCBvbmUgb3IgdHdvIGNvbnRyb2wgcG9pbnRzLlxuICAgKiBQYXNzaW5nIHplcm8gY29udHJvbCBwb2ludHMganVzdCBkcmF3cyBhIHN0cmFpZ2h0IGxpbmUuXG4gICAqIEBwYXJhbSBjdHggLSBUaGUgY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gU3R5bGUgb3B0aW9ucyBmb3IgZWRnZSBkcmF3aW5nLlxuICAgKiBAcGFyYW0gdmlhTm9kZTEgLSBGaXJzdCBjb250cm9sIHBvaW50IGZvciBjdXJ2ZSBkcmF3aW5nLlxuICAgKiBAcGFyYW0gdmlhTm9kZTIgLSBTZWNvbmQgY29udHJvbCBwb2ludCBmb3IgY3VydmUgZHJhd2luZy5cbiAgICovXG4gIHByb3RlY3RlZCBfYmV6aWVyQ3VydmUoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgdmFsdWVzOiBTZWxlY3RpdmVSZXF1aXJlZDxcbiAgICAgIEVkZ2VGb3JtYXR0aW5nVmFsdWVzLFxuICAgICAgfCBcImJhY2tncm91bmRDb2xvclwiXG4gICAgICB8IFwiYmFja2dyb3VuZFNpemVcIlxuICAgICAgfCBcInNoYWRvd0NvbG9yXCJcbiAgICAgIHwgXCJzaGFkb3dTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dYXCJcbiAgICAgIHwgXCJzaGFkb3dZXCJcbiAgICA+LFxuICAgIHZpYU5vZGUxPzogUG9pbnQsXG4gICAgdmlhTm9kZTI/OiBQb2ludFxuICApOiB2b2lkIHtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyh0aGlzLmZyb21Qb2ludC54LCB0aGlzLmZyb21Qb2ludC55KTtcblxuICAgIGlmICh2aWFOb2RlMSAhPSBudWxsICYmIHZpYU5vZGUxLnggIT0gbnVsbCkge1xuICAgICAgaWYgKHZpYU5vZGUyICE9IG51bGwgJiYgdmlhTm9kZTIueCAhPSBudWxsKSB7XG4gICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKFxuICAgICAgICAgIHZpYU5vZGUxLngsXG4gICAgICAgICAgdmlhTm9kZTEueSxcbiAgICAgICAgICB2aWFOb2RlMi54LFxuICAgICAgICAgIHZpYU5vZGUyLnksXG4gICAgICAgICAgdGhpcy50b1BvaW50LngsXG4gICAgICAgICAgdGhpcy50b1BvaW50LnlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5xdWFkcmF0aWNDdXJ2ZVRvKFxuICAgICAgICAgIHZpYU5vZGUxLngsXG4gICAgICAgICAgdmlhTm9kZTEueSxcbiAgICAgICAgICB0aGlzLnRvUG9pbnQueCxcbiAgICAgICAgICB0aGlzLnRvUG9pbnQueVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmYWxsYmFjayB0byBub3JtYWwgc3RyYWlnaHQgZWRnZVxuICAgICAgY3R4LmxpbmVUbyh0aGlzLnRvUG9pbnQueCwgdGhpcy50b1BvaW50LnkpO1xuICAgIH1cblxuICAgIC8vIGRyYXcgYSBiYWNrZ3JvdW5kXG4gICAgdGhpcy5kcmF3QmFja2dyb3VuZChjdHgsIHZhbHVlcyk7XG5cbiAgICAvLyBkcmF3IHNoYWRvdyBpZiBlbmFibGVkXG4gICAgdGhpcy5lbmFibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICAgIGN0eC5zdHJva2UoKTtcbiAgICB0aGlzLmRpc2FibGVTaGFkb3coY3R4LCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFZpYSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBCZXppZXJFZGdlQmFzZSB9IGZyb20gXCIuL3V0aWwvYmV6aWVyLWVkZ2UtYmFzZVwiO1xuaW1wb3J0IHtcbiAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gIExhYmVsLFxuICBFZGdlT3B0aW9ucyxcbiAgUG9pbnQsXG4gIFBvaW50VCxcbiAgU2VsZWN0aXZlUmVxdWlyZWQsXG4gIFZCb2R5LFxuICBWTm9kZSxcbn0gZnJvbSBcIi4vdXRpbC90eXBlc1wiO1xuXG4vKipcbiAqIEEgRHluYW1pYyBCZXppZXIgRWRnZS4gQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbCBzbW9vdGggZ3JhZHVhbFxuICogY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuIFRoZSBEeW5hbWljIHBpZWNlIHJlZmVycyB0byBob3cgdGhlIGN1cnZlXG4gKiByZWFjdHMgdG8gcGh5c2ljcyBjaGFuZ2VzLlxuICpcbiAqIEBhdWdtZW50cyBCZXppZXJFZGdlQmFzZVxuICovXG5leHBvcnQgY2xhc3MgQmV6aWVyRWRnZUR5bmFtaWMgZXh0ZW5kcyBCZXppZXJFZGdlQmFzZTxQb2ludD4ge1xuICBwdWJsaWMgdmlhOiBWTm9kZSA9IHRoaXMudmlhOyAvLyBjb25zdHJ1Y3RvciDihpIgc3VwZXIg4oaSIHN1cGVyIOKGkiBzZXRPcHRpb25zIOKGkiBzZXR1cFN1cHBvcnROb2RlXG4gIHByaXZhdGUgcmVhZG9ubHkgX2JvdW5kRnVuY3Rpb246ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgLy90aGlzLnZpYSA9IHVuZGVmaW5lZDsgLy8gSGVyZSBmb3IgY29tcGxldGVuZXNzIGJ1dCBub3QgYWxsb3dlZCB0byBkZWZpbmVkIGJlZm9yZSBzdXBlcigpIGlzIGludm9rZWQuXG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpOyAvLyAtLT4gdGhpcyBjYWxscyB0aGUgc2V0T3B0aW9ucyBiZWxvd1xuICAgIHRoaXMuX2JvdW5kRnVuY3Rpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnBvc2l0aW9uQmV6aWVyTm9kZSgpO1xuICAgIH07XG4gICAgdGhpcy5fYm9keS5lbWl0dGVyLm9uKFwiX3JlcG9zaXRpb25CZXppZXJOb2Rlc1wiLCB0aGlzLl9ib3VuZEZ1bmN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiBFZGdlT3B0aW9ucyk6IHZvaWQge1xuICAgIHN1cGVyLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgcGh5c2ljcyBoYXMgY2hhbmdlZC5cbiAgICBsZXQgcGh5c2ljc0NoYW5nZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucGh5c2ljcyAhPT0gb3B0aW9ucy5waHlzaWNzKSB7XG4gICAgICBwaHlzaWNzQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdGhlIG9wdGlvbnMgYW5kIHRoZSB0byBhbmQgZnJvbSBub2Rlc1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5pZCA9IHRoaXMub3B0aW9ucy5pZDtcbiAgICB0aGlzLmZyb20gPSB0aGlzLl9ib2R5Lm5vZGVzW3RoaXMub3B0aW9ucy5mcm9tXTtcbiAgICB0aGlzLnRvID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMudG9dO1xuXG4gICAgLy8gc2V0dXAgdGhlIHN1cHBvcnQgbm9kZSBhbmQgY29ubmVjdFxuICAgIHRoaXMuc2V0dXBTdXBwb3J0Tm9kZSgpO1xuICAgIHRoaXMuY29ubmVjdCgpO1xuXG4gICAgLy8gd2hlbiB3ZSBjaGFuZ2UgdGhlIHBoeXNpY3Mgc3RhdGUgb2YgdGhlIGVkZ2UsIHdlIHJlcG9zaXRpb24gdGhlIHN1cHBvcnQgbm9kZS5cbiAgICBpZiAocGh5c2ljc0NoYW5nZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy52aWEuc2V0T3B0aW9ucyh7IHBoeXNpY3M6IHRoaXMub3B0aW9ucy5waHlzaWNzIH0pO1xuICAgICAgdGhpcy5wb3NpdGlvbkJlemllck5vZGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGNvbm5lY3QoKTogdm9pZCB7XG4gICAgdGhpcy5mcm9tID0gdGhpcy5fYm9keS5ub2Rlc1t0aGlzLm9wdGlvbnMuZnJvbV07XG4gICAgdGhpcy50byA9IHRoaXMuX2JvZHkubm9kZXNbdGhpcy5vcHRpb25zLnRvXTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZyb20gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy50byA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLm9wdGlvbnMucGh5c2ljcyA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZml4IHdlaXJkIGJlaGF2aW91ciB3aGVyZSBhIHNlbGYgcmVmZXJlbmNpbmcgbm9kZSBoYXMgcGh5c2ljcyBlbmFibGVkXG4gICAgICBpZiAodGhpcy5mcm9tLmlkID09PSB0aGlzLnRvLmlkKSB7XG4gICAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmlhLnNldE9wdGlvbnMoeyBwaHlzaWNzOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgY2xlYW51cCgpOiBib29sZWFuIHtcbiAgICB0aGlzLl9ib2R5LmVtaXR0ZXIub2ZmKFwiX3JlcG9zaXRpb25CZXppZXJOb2Rlc1wiLCB0aGlzLl9ib3VuZEZ1bmN0aW9uKTtcbiAgICBpZiAodGhpcy52aWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIHRoaXMuX2JvZHkubm9kZXNbdGhpcy52aWEuaWRdO1xuICAgICAgdGhpcy52aWEgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbmQgYWRkIGEgc3VwcG9ydCBub2RlIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEJlemllciBjdXJ2ZXMgcmVxdWlyZSBhbiBhbmNob3IgcG9pbnQgdG8gY2FsY3VsYXRlIHRoZSBzbW9vdGggZmxvdy5cbiAgICogVGhlc2UgcG9pbnRzIGFyZSBub2Rlcy5cbiAgICogVGhlc2Ugbm9kZXMgYXJlIGludmlzaWJsZSBidXQgYXJlIHVzZWQgZm9yIHRoZSBmb3JjZSBjYWxjdWxhdGlvbi5cbiAgICpcbiAgICogVGhlIGNoYW5nZWQgZGF0YSBpcyBub3QgY2FsbGVkLCBpZiBuZWVkZWQsIGl0IGlzIHJldHVybmVkIGJ5IHRoZSBtYWluIGVkZ2UgY29uc3RydWN0b3IuXG4gICAqL1xuICBwdWJsaWMgc2V0dXBTdXBwb3J0Tm9kZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgbm9kZUlkID0gXCJlZGdlSWQ6XCIgKyB0aGlzLmlkO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX2JvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGUoe1xuICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICBzaGFwZTogXCJjaXJjbGVcIixcbiAgICAgICAgcGh5c2ljczogdHJ1ZSxcbiAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ib2R5Lm5vZGVzW25vZGVJZF0gPSBub2RlO1xuICAgICAgdGhpcy52aWEgPSBub2RlO1xuICAgICAgdGhpcy52aWEucGFyZW50RWRnZUlkID0gdGhpcy5pZDtcbiAgICAgIHRoaXMucG9zaXRpb25CZXppZXJOb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9uIGJlemllciBub2RlLlxuICAgKi9cbiAgcHVibGljIHBvc2l0aW9uQmV6aWVyTm9kZSgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnZpYSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZyb20gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy50byAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLnZpYS54ID0gMC41ICogKHRoaXMuZnJvbS54ICsgdGhpcy50by54KTtcbiAgICAgIHRoaXMudmlhLnkgPSAwLjUgKiAodGhpcy5mcm9tLnkgKyB0aGlzLnRvLnkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy52aWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy52aWEueCA9IDA7XG4gICAgICB0aGlzLnZpYS55ID0gMDtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9saW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIHwgXCJiYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgfCBcImJhY2tncm91bmRTaXplXCJcbiAgICAgIHwgXCJzaGFkb3dDb2xvclwiXG4gICAgICB8IFwic2hhZG93U2l6ZVwiXG4gICAgICB8IFwic2hhZG93WFwiXG4gICAgICB8IFwic2hhZG93WVwiXG4gICAgPixcbiAgICB2aWFOb2RlOiBWTm9kZVxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9iZXppZXJDdXJ2ZShjdHgsIHZhbHVlcywgdmlhTm9kZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9nZXRWaWFDb29yZGluYXRlcygpOiBQb2ludCB7XG4gICAgcmV0dXJuIHRoaXMudmlhO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFBvaW50IHtcbiAgICByZXR1cm4gdGhpcy52aWE7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFBvaW50KHBvc2l0aW9uOiBudW1iZXIsIHZpYU5vZGU6IFBvaW50ID0gdGhpcy52aWEpOiBQb2ludCB7XG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gdGhpcy50bykge1xuICAgICAgY29uc3QgW2N4LCBjeSwgY3JdID0gdGhpcy5fZ2V0Q2lyY2xlRGF0YSgpO1xuICAgICAgY29uc3QgYSA9IDIgKiBNYXRoLlBJICogKDEgLSBwb3NpdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBjeCArIGNyICogTWF0aC5zaW4oYSksXG4gICAgICAgIHk6IGN5ICsgY3IgLSBjciAqICgxIC0gTWF0aC5jb3MoYSkpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDpcbiAgICAgICAgICBNYXRoLnBvdygxIC0gcG9zaXRpb24sIDIpICogdGhpcy5mcm9tUG9pbnQueCArXG4gICAgICAgICAgMiAqIHBvc2l0aW9uICogKDEgLSBwb3NpdGlvbikgKiB2aWFOb2RlLnggK1xuICAgICAgICAgIE1hdGgucG93KHBvc2l0aW9uLCAyKSAqIHRoaXMudG9Qb2ludC54LFxuICAgICAgICB5OlxuICAgICAgICAgIE1hdGgucG93KDEgLSBwb3NpdGlvbiwgMikgKiB0aGlzLmZyb21Qb2ludC55ICtcbiAgICAgICAgICAyICogcG9zaXRpb24gKiAoMSAtIHBvc2l0aW9uKSAqIHZpYU5vZGUueSArXG4gICAgICAgICAgTWF0aC5wb3cocG9zaXRpb24sIDIpICogdGhpcy50b1BvaW50LnksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2ZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBuZWFyTm9kZTogVk5vZGUsXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbiAgKTogUG9pbnRUIHtcbiAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQmV6aWVyKG5lYXJOb2RlLCBjdHgsIHRoaXMudmlhKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyXG4gICk6IG51bWJlciB7XG4gICAgLy8geDMseTMgaXMgdGhlIHBvaW50XG4gICAgcmV0dXJuIHRoaXMuX2dldERpc3RhbmNlVG9CZXppZXJFZGdlKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHRoaXMudmlhKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJlemllckVkZ2VCYXNlIH0gZnJvbSBcIi4vdXRpbC9iZXppZXItZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi91dGlsL3R5cGVzXCI7XG5cbi8qKlxuICogQSBTdGF0aWMgQmV6aWVyIEVkZ2UuIEJlemllciBjdXJ2ZXMgYXJlIHVzZWQgdG8gbW9kZWwgc21vb3RoIGdyYWR1YWwgY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCZXppZXJFZGdlU3RhdGljIGV4dGVuZHMgQmV6aWVyRWRnZUJhc2U8UG9pbnQ+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICB8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAgICAgIHwgXCJiYWNrZ3JvdW5kU2l6ZVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZTogUG9pbnRcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5fYmV6aWVyQ3VydmUoY3R4LCB2YWx1ZXMsIHZpYU5vZGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFBvaW50IHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdmlhIG5vZGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFdlIGRvIG5vdCB1c2UgdGhlIHRvIGFuZCBmcm9tUG9pbnRzIGhlcmUgdG8gbWFrZSB0aGUgdmlhIG5vZGVzIHRoZSBzYW1lIGFzIGVkZ2VzIHdpdGhvdXQgYXJyb3dzLlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIHZpYSBub2RlLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9nZXRWaWFDb29yZGluYXRlcygpOiBQb2ludCB7XG4gICAgLy8gQXNzdW1wdGlvbjogeC95IGNvb3JkaW5hdGVzIGluIGZyb20vdG8gYWx3YXlzIGRlZmluZWRcbiAgICBjb25zdCBmYWN0b3IgPSB0aGlzLm9wdGlvbnMuc21vb3RoLnJvdW5kbmVzcztcbiAgICBjb25zdCB0eXBlID0gdGhpcy5vcHRpb25zLnNtb290aC50eXBlO1xuICAgIGxldCBkeCA9IE1hdGguYWJzKHRoaXMuZnJvbS54IC0gdGhpcy50by54KTtcbiAgICBsZXQgZHkgPSBNYXRoLmFicyh0aGlzLmZyb20ueSAtIHRoaXMudG8ueSk7XG4gICAgaWYgKHR5cGUgPT09IFwiZGlzY3JldGVcIiB8fCB0eXBlID09PSBcImRpYWdvbmFsQ3Jvc3NcIikge1xuICAgICAgbGV0IHN0ZXBYO1xuICAgICAgbGV0IHN0ZXBZO1xuXG4gICAgICBpZiAoZHggPD0gZHkpIHtcbiAgICAgICAgc3RlcFggPSBzdGVwWSA9IGZhY3RvciAqIGR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RlcFggPSBzdGVwWSA9IGZhY3RvciAqIGR4O1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5mcm9tLnggPiB0aGlzLnRvLngpIHtcbiAgICAgICAgc3RlcFggPSAtc3RlcFg7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mcm9tLnkgPj0gdGhpcy50by55KSB7XG4gICAgICAgIHN0ZXBZID0gLXN0ZXBZO1xuICAgICAgfVxuXG4gICAgICBsZXQgeFZpYSA9IHRoaXMuZnJvbS54ICsgc3RlcFg7XG4gICAgICBsZXQgeVZpYSA9IHRoaXMuZnJvbS55ICsgc3RlcFk7XG5cbiAgICAgIGlmICh0eXBlID09PSBcImRpc2NyZXRlXCIpIHtcbiAgICAgICAgaWYgKGR4IDw9IGR5KSB7XG4gICAgICAgICAgeFZpYSA9IGR4IDwgZmFjdG9yICogZHkgPyB0aGlzLmZyb20ueCA6IHhWaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeVZpYSA9IGR5IDwgZmFjdG9yICogZHggPyB0aGlzLmZyb20ueSA6IHlWaWE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgeDogeFZpYSwgeTogeVZpYSB9O1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJzdHJhaWdodENyb3NzXCIpIHtcbiAgICAgIGxldCBzdGVwWCA9ICgxIC0gZmFjdG9yKSAqIGR4O1xuICAgICAgbGV0IHN0ZXBZID0gKDEgLSBmYWN0b3IpICogZHk7XG5cbiAgICAgIGlmIChkeCA8PSBkeSkge1xuICAgICAgICAvLyB1cCAtIGRvd25cbiAgICAgICAgc3RlcFggPSAwO1xuICAgICAgICBpZiAodGhpcy5mcm9tLnkgPCB0aGlzLnRvLnkpIHtcbiAgICAgICAgICBzdGVwWSA9IC1zdGVwWTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGVmdCAtIHJpZ2h0XG4gICAgICAgIGlmICh0aGlzLmZyb20ueCA8IHRoaXMudG8ueCkge1xuICAgICAgICAgIHN0ZXBYID0gLXN0ZXBYO1xuICAgICAgICB9XG4gICAgICAgIHN0ZXBZID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogdGhpcy50by54ICsgc3RlcFgsXG4gICAgICAgIHk6IHRoaXMudG8ueSArIHN0ZXBZLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICBsZXQgc3RlcFggPSAoMSAtIGZhY3RvcikgKiBkeDtcbiAgICAgIGlmICh0aGlzLmZyb20ueCA8IHRoaXMudG8ueCkge1xuICAgICAgICBzdGVwWCA9IC1zdGVwWDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogdGhpcy50by54ICsgc3RlcFgsXG4gICAgICAgIHk6IHRoaXMuZnJvbS55LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwidmVydGljYWxcIikge1xuICAgICAgbGV0IHN0ZXBZID0gKDEgLSBmYWN0b3IpICogZHk7XG4gICAgICBpZiAodGhpcy5mcm9tLnkgPCB0aGlzLnRvLnkpIHtcbiAgICAgICAgc3RlcFkgPSAtc3RlcFk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHRoaXMuZnJvbS54LFxuICAgICAgICB5OiB0aGlzLnRvLnkgKyBzdGVwWSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcImN1cnZlZENXXCIpIHtcbiAgICAgIGR4ID0gdGhpcy50by54IC0gdGhpcy5mcm9tLng7XG4gICAgICBkeSA9IHRoaXMuZnJvbS55IC0gdGhpcy50by55O1xuICAgICAgY29uc3QgcmFkaXVzID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICAgIGNvbnN0IHBpID0gTWF0aC5QSTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxBbmdsZSA9IE1hdGguYXRhbjIoZHksIGR4KTtcbiAgICAgIGNvbnN0IG15QW5nbGUgPSAob3JpZ2luYWxBbmdsZSArIChmYWN0b3IgKiAwLjUgKyAwLjUpICogcGkpICUgKDIgKiBwaSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHRoaXMuZnJvbS54ICsgKGZhY3RvciAqIDAuNSArIDAuNSkgKiByYWRpdXMgKiBNYXRoLnNpbihteUFuZ2xlKSxcbiAgICAgICAgeTogdGhpcy5mcm9tLnkgKyAoZmFjdG9yICogMC41ICsgMC41KSAqIHJhZGl1cyAqIE1hdGguY29zKG15QW5nbGUpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiY3VydmVkQ0NXXCIpIHtcbiAgICAgIGR4ID0gdGhpcy50by54IC0gdGhpcy5mcm9tLng7XG4gICAgICBkeSA9IHRoaXMuZnJvbS55IC0gdGhpcy50by55O1xuICAgICAgY29uc3QgcmFkaXVzID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgICAgIGNvbnN0IHBpID0gTWF0aC5QSTtcblxuICAgICAgY29uc3Qgb3JpZ2luYWxBbmdsZSA9IE1hdGguYXRhbjIoZHksIGR4KTtcbiAgICAgIGNvbnN0IG15QW5nbGUgPSAob3JpZ2luYWxBbmdsZSArICgtZmFjdG9yICogMC41ICsgMC41KSAqIHBpKSAlICgyICogcGkpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiB0aGlzLmZyb20ueCArIChmYWN0b3IgKiAwLjUgKyAwLjUpICogcmFkaXVzICogTWF0aC5zaW4obXlBbmdsZSksXG4gICAgICAgIHk6IHRoaXMuZnJvbS55ICsgKGZhY3RvciAqIDAuNSArIDAuNSkgKiByYWRpdXMgKiBNYXRoLmNvcyhteUFuZ2xlKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbnRpbnVvdXNcbiAgICAgIGxldCBzdGVwWDtcbiAgICAgIGxldCBzdGVwWTtcblxuICAgICAgaWYgKGR4IDw9IGR5KSB7XG4gICAgICAgIHN0ZXBYID0gc3RlcFkgPSBmYWN0b3IgKiBkeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXBYID0gc3RlcFkgPSBmYWN0b3IgKiBkeDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZnJvbS54ID4gdGhpcy50by54KSB7XG4gICAgICAgIHN0ZXBYID0gLXN0ZXBYO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZnJvbS55ID49IHRoaXMudG8ueSkge1xuICAgICAgICBzdGVwWSA9IC1zdGVwWTtcbiAgICAgIH1cblxuICAgICAgbGV0IHhWaWEgPSB0aGlzLmZyb20ueCArIHN0ZXBYO1xuICAgICAgbGV0IHlWaWEgPSB0aGlzLmZyb20ueSArIHN0ZXBZO1xuXG4gICAgICBpZiAoZHggPD0gZHkpIHtcbiAgICAgICAgaWYgKHRoaXMuZnJvbS54IDw9IHRoaXMudG8ueCkge1xuICAgICAgICAgIHhWaWEgPSB0aGlzLnRvLnggPCB4VmlhID8gdGhpcy50by54IDogeFZpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4VmlhID0gdGhpcy50by54ID4geFZpYSA/IHRoaXMudG8ueCA6IHhWaWE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmZyb20ueSA+PSB0aGlzLnRvLnkpIHtcbiAgICAgICAgICB5VmlhID0gdGhpcy50by55ID4geVZpYSA/IHRoaXMudG8ueSA6IHlWaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeVZpYSA9IHRoaXMudG8ueSA8IHlWaWEgPyB0aGlzLnRvLnkgOiB5VmlhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHg6IHhWaWEsIHk6IHlWaWEgfTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIG9wdGlvbnM6IHsgdmlhPzogUG9pbnQgfSA9IHt9XG4gICk6IFBvaW50VCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbmRCb3JkZXJQb3NpdGlvbkJlemllcihuZWFyTm9kZSwgY3R4LCBvcHRpb25zLnZpYSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9nZXREaXN0YW5jZVRvRWRnZShcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlcixcbiAgICB2aWFOb2RlID0gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKVxuICApIHtcbiAgICAvLyB4Myx5MyBpcyB0aGUgcG9pbnRcbiAgICByZXR1cm4gdGhpcy5fZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgdmlhTm9kZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFBvaW50KFxuICAgIHBvc2l0aW9uOiBudW1iZXIsXG4gICAgdmlhTm9kZTogUG9pbnQgPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IFBvaW50IHtcbiAgICBjb25zdCB0ID0gcG9zaXRpb247XG4gICAgY29uc3QgeCA9XG4gICAgICBNYXRoLnBvdygxIC0gdCwgMikgKiB0aGlzLmZyb21Qb2ludC54ICtcbiAgICAgIDIgKiB0ICogKDEgLSB0KSAqIHZpYU5vZGUueCArXG4gICAgICBNYXRoLnBvdyh0LCAyKSAqIHRoaXMudG9Qb2ludC54O1xuICAgIGNvbnN0IHkgPVxuICAgICAgTWF0aC5wb3coMSAtIHQsIDIpICogdGhpcy5mcm9tUG9pbnQueSArXG4gICAgICAyICogdCAqICgxIC0gdCkgKiB2aWFOb2RlLnkgK1xuICAgICAgTWF0aC5wb3codCwgMikgKiB0aGlzLnRvUG9pbnQueTtcblxuICAgIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJlemllckVkZ2VCYXNlIH0gZnJvbSBcIi4vYmV6aWVyLWVkZ2UtYmFzZVwiO1xuaW1wb3J0IHsgTGFiZWwsIEVkZ2VPcHRpb25zLCBQb2ludCwgVkJvZHkgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEEgQmFzZSBDbGFzcyBmb3IgYWxsIEN1YmljIEJlemllciBFZGdlcy4gQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbFxuICogc21vb3RoIGdyYWR1YWwgY3VydmVzIGluIHBhdGhzIGJldHdlZW4gbm9kZXMuXG4gKlxuICogQGF1Z21lbnRzIEJlemllckVkZ2VCYXNlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDdWJpY0JlemllckVkZ2VCYXNlPFZpYT4gZXh0ZW5kcyBCZXppZXJFZGdlQmFzZTxWaWE+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGlzdGFuY2UgYmV0d2VlbiBhIHBvaW50ICh4Myx5MykgYW5kIGEgbGluZSBzZWdtZW50IGZyb20gKHgxLHkxKSB0byAoeDIseTIpLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg0OTIxMS9zaG9ydGVzdC1kaXN0YW5jYWUtYmV0d2Vlbi1hLXBvaW50LWFuZC1hLWxpbmUtc2VnbWVudFxuICAgKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CJUMzJUE5emllcl9jdXJ2ZVxuICAgKiBAcGFyYW0geDEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTEgLSBGaXJzdCBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBvbiB0aGUgeSBheGlzLlxuICAgKiBAcGFyYW0geDIgLSBTZWNvbmQgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgb24gdGhlIHggYXhpcy5cbiAgICogQHBhcmFtIHkyIC0gU2Vjb25kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG9uIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB4MyAtIFBvc2l0aW9uIG9mIHRoZSBwb2ludCBvbiB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0geTMgLSBQb3NpdGlvbiBvZiB0aGUgcG9pbnQgb24gdGhlIHkgYXhpcy5cbiAgICogQHBhcmFtIHZpYTEgLSBUaGUgZmlyc3QgcG9pbnQgdGhpcyBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKiBAcGFyYW0gdmlhMiAtIFRoZSBzZWNvbmQgcG9pbnQgdGhpcyBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKiBAcmV0dXJucyBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGluZSBzZWdtZW50IGFuZCB0aGUgcG9pbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9CZXppZXJFZGdlMihcbiAgICB4MTogbnVtYmVyLFxuICAgIHkxOiBudW1iZXIsXG4gICAgeDI6IG51bWJlcixcbiAgICB5MjogbnVtYmVyLFxuICAgIHgzOiBudW1iZXIsXG4gICAgeTM6IG51bWJlcixcbiAgICB2aWExOiBQb2ludCxcbiAgICB2aWEyOiBQb2ludFxuICApOiBudW1iZXIge1xuICAgIC8vIHgzLHkzIGlzIHRoZSBwb2ludFxuICAgIGxldCBtaW5EaXN0YW5jZSA9IDFlOTtcbiAgICBsZXQgbGFzdFggPSB4MTtcbiAgICBsZXQgbGFzdFkgPSB5MTtcbiAgICBjb25zdCB2ZWMgPSBbMCwgMCwgMCwgMF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxMDsgaSsrKSB7XG4gICAgICBjb25zdCB0ID0gMC4xICogaTtcbiAgICAgIHZlY1swXSA9IE1hdGgucG93KDEgLSB0LCAzKTtcbiAgICAgIHZlY1sxXSA9IDMgKiB0ICogTWF0aC5wb3coMSAtIHQsIDIpO1xuICAgICAgdmVjWzJdID0gMyAqIE1hdGgucG93KHQsIDIpICogKDEgLSB0KTtcbiAgICAgIHZlY1szXSA9IE1hdGgucG93KHQsIDMpO1xuICAgICAgY29uc3QgeCA9IHZlY1swXSAqIHgxICsgdmVjWzFdICogdmlhMS54ICsgdmVjWzJdICogdmlhMi54ICsgdmVjWzNdICogeDI7XG4gICAgICBjb25zdCB5ID0gdmVjWzBdICogeTEgKyB2ZWNbMV0gKiB2aWExLnkgKyB2ZWNbMl0gKiB2aWEyLnkgKyB2ZWNbM10gKiB5MjtcbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuX2dldERpc3RhbmNlVG9MaW5lKGxhc3RYLCBsYXN0WSwgeCwgeSwgeDMsIHkzKTtcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlID8gZGlzdGFuY2UgOiBtaW5EaXN0YW5jZTtcbiAgICAgIH1cbiAgICAgIGxhc3RYID0geDtcbiAgICAgIGxhc3RZID0geTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWluRGlzdGFuY2U7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBDdWJpY0JlemllckVkZ2VCYXNlIH0gZnJvbSBcIi4vdXRpbC9jdWJpYy1iZXppZXItZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi91dGlsL3R5cGVzXCI7XG5cbi8qKlxuICogQSBDdWJpYyBCZXppZXIgRWRnZS4gQmV6aWVyIGN1cnZlcyBhcmUgdXNlZCB0byBtb2RlbCBzbW9vdGggZ3JhZHVhbCBjdXJ2ZXMgaW4gcGF0aHMgYmV0d2VlbiBub2Rlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1YmljQmV6aWVyRWRnZSBleHRlbmRzIEN1YmljQmV6aWVyRWRnZUJhc2U8W1BvaW50LCBQb2ludF0+IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3Qgb2YgZ2l2ZW4gZWRnZS5cbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgYm9keSBvZiB0aGUgbmV0d29yay5cbiAgICogQHBhcmFtIGxhYmVsTW9kdWxlIC0gTGFiZWwgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVkZ2VPcHRpb25zLCBib2R5OiBWQm9keSwgbGFiZWxNb2R1bGU6IExhYmVsKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYm9keSwgbGFiZWxNb2R1bGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfbGluZShcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB2YWx1ZXM6IFNlbGVjdGl2ZVJlcXVpcmVkPFxuICAgICAgRWRnZUZvcm1hdHRpbmdWYWx1ZXMsXG4gICAgICB8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAgICAgIHwgXCJiYWNrZ3JvdW5kU2l6ZVwiXG4gICAgICB8IFwic2hhZG93Q29sb3JcIlxuICAgICAgfCBcInNoYWRvd1NpemVcIlxuICAgICAgfCBcInNoYWRvd1hcIlxuICAgICAgfCBcInNoYWRvd1lcIlxuICAgID4sXG4gICAgdmlhTm9kZXM6IFtQb2ludCwgUG9pbnRdXG4gICk6IHZvaWQge1xuICAgIC8vIGdldCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHN1cHBvcnQgcG9pbnRzLlxuICAgIGNvbnN0IHZpYTEgPSB2aWFOb2Rlc1swXTtcbiAgICBjb25zdCB2aWEyID0gdmlhTm9kZXNbMV07XG4gICAgdGhpcy5fYmV6aWVyQ3VydmUoY3R4LCB2YWx1ZXMsIHZpYTEsIHZpYTIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGFkZGl0aW9uYWwgcG9pbnRzIHRoZSBlZGdlIHBhc3NlcyB0aHJvdWdoLlxuICAgKlxuICAgKiBAcmV0dXJucyBDYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50cyB0aGUgZWRnZSBwYXNzZXMgdGhyb3VnaC5cbiAgICovXG4gIHByb3RlY3RlZCBfZ2V0VmlhQ29vcmRpbmF0ZXMoKTogW1BvaW50LCBQb2ludF0ge1xuICAgIGNvbnN0IGR4ID0gdGhpcy5mcm9tLnggLSB0aGlzLnRvLng7XG4gICAgY29uc3QgZHkgPSB0aGlzLmZyb20ueSAtIHRoaXMudG8ueTtcblxuICAgIGxldCB4MTogbnVtYmVyO1xuICAgIGxldCB5MTogbnVtYmVyO1xuICAgIGxldCB4MjogbnVtYmVyO1xuICAgIGxldCB5MjogbnVtYmVyO1xuICAgIGNvbnN0IHJvdW5kbmVzcyA9IHRoaXMub3B0aW9ucy5zbW9vdGgucm91bmRuZXNzO1xuXG4gICAgLy8gaG9yaXpvbnRhbCBpZiB4ID4geSBvciBpZiBkaXJlY3Rpb24gaXMgZm9yY2VkIG9yIGlmIGRpcmVjdGlvbiBpcyBob3Jpem9udGFsXG4gICAgaWYgKFxuICAgICAgKE1hdGguYWJzKGR4KSA+IE1hdGguYWJzKGR5KSB8fFxuICAgICAgICB0aGlzLm9wdGlvbnMuc21vb3RoLmZvcmNlRGlyZWN0aW9uID09PSB0cnVlIHx8XG4gICAgICAgIHRoaXMub3B0aW9ucy5zbW9vdGguZm9yY2VEaXJlY3Rpb24gPT09IFwiaG9yaXpvbnRhbFwiKSAmJlxuICAgICAgdGhpcy5vcHRpb25zLnNtb290aC5mb3JjZURpcmVjdGlvbiAhPT0gXCJ2ZXJ0aWNhbFwiXG4gICAgKSB7XG4gICAgICB5MSA9IHRoaXMuZnJvbS55O1xuICAgICAgeTIgPSB0aGlzLnRvLnk7XG4gICAgICB4MSA9IHRoaXMuZnJvbS54IC0gcm91bmRuZXNzICogZHg7XG4gICAgICB4MiA9IHRoaXMudG8ueCArIHJvdW5kbmVzcyAqIGR4O1xuICAgIH0gZWxzZSB7XG4gICAgICB5MSA9IHRoaXMuZnJvbS55IC0gcm91bmRuZXNzICogZHk7XG4gICAgICB5MiA9IHRoaXMudG8ueSArIHJvdW5kbmVzcyAqIGR5O1xuICAgICAgeDEgPSB0aGlzLmZyb20ueDtcbiAgICAgIHgyID0gdGhpcy50by54O1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICB7IHg6IHgxLCB5OiB5MSB9LFxuICAgICAgeyB4OiB4MiwgeTogeTIgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRWaWFOb2RlKCk6IFtQb2ludCwgUG9pbnRdIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0VmlhQ29vcmRpbmF0ZXMoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2ZpbmRCb3JkZXJQb3NpdGlvbihcbiAgICBuZWFyTm9kZTogVk5vZGUsXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbiAgKTogUG9pbnRUIHtcbiAgICByZXR1cm4gdGhpcy5fZmluZEJvcmRlclBvc2l0aW9uQmV6aWVyKG5lYXJOb2RlLCBjdHgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBfZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgeDE6IG51bWJlcixcbiAgICB5MTogbnVtYmVyLFxuICAgIHgyOiBudW1iZXIsXG4gICAgeTI6IG51bWJlcixcbiAgICB4MzogbnVtYmVyLFxuICAgIHkzOiBudW1iZXIsXG4gICAgW3ZpYTEsIHZpYTJdOiBbUG9pbnQsIFBvaW50XSA9IHRoaXMuX2dldFZpYUNvb3JkaW5hdGVzKClcbiAgKTogbnVtYmVyIHtcbiAgICAvLyB4Myx5MyBpcyB0aGUgcG9pbnRcbiAgICByZXR1cm4gdGhpcy5fZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UyKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHZpYTEsIHZpYTIpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRQb2ludChcbiAgICBwb3NpdGlvbjogbnVtYmVyLFxuICAgIFt2aWExLCB2aWEyXTogW1BvaW50LCBQb2ludF0gPSB0aGlzLl9nZXRWaWFDb29yZGluYXRlcygpXG4gICk6IFBvaW50IHtcbiAgICBjb25zdCB0ID0gcG9zaXRpb247XG4gICAgY29uc3QgdmVjOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFtcbiAgICAgIE1hdGgucG93KDEgLSB0LCAzKSxcbiAgICAgIDMgKiB0ICogTWF0aC5wb3coMSAtIHQsIDIpLFxuICAgICAgMyAqIE1hdGgucG93KHQsIDIpICogKDEgLSB0KSxcbiAgICAgIE1hdGgucG93KHQsIDMpLFxuICAgIF07XG4gICAgY29uc3QgeCA9XG4gICAgICB2ZWNbMF0gKiB0aGlzLmZyb21Qb2ludC54ICtcbiAgICAgIHZlY1sxXSAqIHZpYTEueCArXG4gICAgICB2ZWNbMl0gKiB2aWEyLnggK1xuICAgICAgdmVjWzNdICogdGhpcy50b1BvaW50Lng7XG4gICAgY29uc3QgeSA9XG4gICAgICB2ZWNbMF0gKiB0aGlzLmZyb21Qb2ludC55ICtcbiAgICAgIHZlY1sxXSAqIHZpYTEueSArXG4gICAgICB2ZWNbMl0gKiB2aWEyLnkgK1xuICAgICAgdmVjWzNdICogdGhpcy50b1BvaW50Lnk7XG5cbiAgICByZXR1cm4geyB4OiB4LCB5OiB5IH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFZGdlQmFzZSB9IGZyb20gXCIuL3V0aWwvZWRnZS1iYXNlXCI7XG5pbXBvcnQge1xuICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgTGFiZWwsXG4gIEVkZ2VPcHRpb25zLFxuICBQb2ludCxcbiAgUG9pbnRULFxuICBTZWxlY3RpdmVSZXF1aXJlZCxcbiAgVkJvZHksXG4gIFZOb2RlLFxufSBmcm9tIFwiLi91dGlsL3R5cGVzXCI7XG5cbi8qKlxuICogQSBTdHJhaWdodCBFZGdlLlxuICovXG5leHBvcnQgY2xhc3MgU3RyYWlnaHRFZGdlIGV4dGVuZHMgRWRnZUJhc2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBvZiBnaXZlbiBlZGdlLlxuICAgKiBAcGFyYW0gYm9keSAtIFRoZSBib2R5IG9mIHRoZSBuZXR3b3JrLlxuICAgKiBAcGFyYW0gbGFiZWxNb2R1bGUgLSBMYWJlbCBtb2R1bGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogRWRnZU9wdGlvbnMsIGJvZHk6IFZCb2R5LCBsYWJlbE1vZHVsZTogTGFiZWwpIHtcbiAgICBzdXBlcihvcHRpb25zLCBib2R5LCBsYWJlbE1vZHVsZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9saW5lKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHZhbHVlczogU2VsZWN0aXZlUmVxdWlyZWQ8XG4gICAgICBFZGdlRm9ybWF0dGluZ1ZhbHVlcyxcbiAgICAgIFwic2hhZG93Q29sb3JcIiB8IFwic2hhZG93U2l6ZVwiIHwgXCJzaGFkb3dYXCIgfCBcInNoYWRvd1lcIlxuICAgID5cbiAgKTogdm9pZCB7XG4gICAgLy8gZHJhdyBhIHN0cmFpZ2h0IGxpbmVcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4Lm1vdmVUbyh0aGlzLmZyb21Qb2ludC54LCB0aGlzLmZyb21Qb2ludC55KTtcbiAgICBjdHgubGluZVRvKHRoaXMudG9Qb2ludC54LCB0aGlzLnRvUG9pbnQueSk7XG4gICAgLy8gZHJhdyBzaGFkb3cgaWYgZW5hYmxlZFxuICAgIHRoaXMuZW5hYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgICBjdHguc3Ryb2tlKCk7XG4gICAgdGhpcy5kaXNhYmxlU2hhZG93KGN0eCwgdmFsdWVzKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0VmlhTm9kZSgpOiB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldFBvaW50KHBvc2l0aW9uOiBudW1iZXIpOiBQb2ludCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6ICgxIC0gcG9zaXRpb24pICogdGhpcy5mcm9tUG9pbnQueCArIHBvc2l0aW9uICogdGhpcy50b1BvaW50LngsXG4gICAgICB5OiAoMSAtIHBvc2l0aW9uKSAqIHRoaXMuZnJvbVBvaW50LnkgKyBwb3NpdGlvbiAqIHRoaXMudG9Qb2ludC55LFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIF9maW5kQm9yZGVyUG9zaXRpb24oXG4gICAgbmVhck5vZGU6IFZOb2RlLFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXG4gICk6IFBvaW50VCB7XG4gICAgbGV0IG5vZGUxID0gdGhpcy50bztcbiAgICBsZXQgbm9kZTIgPSB0aGlzLmZyb207XG4gICAgaWYgKG5lYXJOb2RlLmlkID09PSB0aGlzLmZyb20uaWQpIHtcbiAgICAgIG5vZGUxID0gdGhpcy5mcm9tO1xuICAgICAgbm9kZTIgPSB0aGlzLnRvO1xuICAgIH1cblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMihub2RlMS55IC0gbm9kZTIueSwgbm9kZTEueCAtIG5vZGUyLngpO1xuICAgIGNvbnN0IGR4ID0gbm9kZTEueCAtIG5vZGUyLng7XG4gICAgY29uc3QgZHkgPSBub2RlMS55IC0gbm9kZTIueTtcbiAgICBjb25zdCBlZGdlU2VnbWVudExlbmd0aCA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgY29uc3QgdG9Cb3JkZXJEaXN0ID0gbmVhck5vZGUuZGlzdGFuY2VUb0JvcmRlcihjdHgsIGFuZ2xlKTtcbiAgICBjb25zdCB0b0JvcmRlclBvaW50ID1cbiAgICAgIChlZGdlU2VnbWVudExlbmd0aCAtIHRvQm9yZGVyRGlzdCkgLyBlZGdlU2VnbWVudExlbmd0aDtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiAoMSAtIHRvQm9yZGVyUG9pbnQpICogbm9kZTIueCArIHRvQm9yZGVyUG9pbnQgKiBub2RlMS54LFxuICAgICAgeTogKDEgLSB0b0JvcmRlclBvaW50KSAqIG5vZGUyLnkgKyB0b0JvcmRlclBvaW50ICogbm9kZTEueSxcbiAgICAgIHQ6IDAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgX2dldERpc3RhbmNlVG9FZGdlKFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgeDM6IG51bWJlcixcbiAgICB5MzogbnVtYmVyXG4gICk6IG51bWJlciB7XG4gICAgLy8geDMseTMgaXMgdGhlIHBvaW50XG4gICAgcmV0dXJuIHRoaXMuX2dldERpc3RhbmNlVG9MaW5lKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpO1xuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgYnJpZGdlT2JqZWN0LFxuICBkZWVwRXh0ZW5kLFxuICBpc1N0cmluZyxcbiAgbWVyZ2VPcHRpb25zLFxuICBzZWxlY3RpdmVEZWVwRXh0ZW5kLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcIi4vc2hhcmVkL0xhYmVsXCI7XG5pbXBvcnQge1xuICBjaG9vc2lmeSxcbiAgZ2V0U2VsZlJlZkNvb3JkaW5hdGVzLFxuICBpc1ZhbGlkTGFiZWwsXG4gIHBvaW50SW5SZWN0LFxufSBmcm9tIFwiLi9zaGFyZWQvQ29tcG9uZW50VXRpbFwiO1xuaW1wb3J0IHtcbiAgQmV6aWVyRWRnZUR5bmFtaWMsXG4gIEJlemllckVkZ2VTdGF0aWMsXG4gIEN1YmljQmV6aWVyRWRnZSxcbiAgU3RyYWlnaHRFZGdlLFxufSBmcm9tIFwiLi9lZGdlc1wiO1xuXG4vKipcbiAqIEFuIGVkZ2UgY29ubmVjdHMgdHdvIG5vZGVzIGFuZCBoYXMgYSBzcGVjaWZpYyBkaXJlY3Rpb24uXG4gKi9cbmNsYXNzIEVkZ2Uge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgICAgICAgIHZhbHVlcyBzcGVjaWZpYyB0byB0aGlzIGVkZ2UsIG11c3QgY29udGFpbiBhdCBsZWFzdCAnZnJvbScgYW5kICd0bydcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHkgICAgICAgICAgIHNoYXJlZCBzdGF0ZSBmcm9tIE5ldHdvcmsgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtOZXR3b3JrLkltYWdlc30gaW1hZ2VsaXN0ICBBIGxpc3Qgd2l0aCBpbWFnZXMuIE9ubHkgbmVlZGVkIHdoZW4gdGhlIGVkZ2UgaGFzIGltYWdlIGFycm93cy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnMgIG9wdGlvbnMgZnJvbSB0aGUgRWRnZXNIYW5kbGVyIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0T3B0aW9ucyBkZWZhdWx0IG9wdGlvbnMgZnJvbSB0aGUgRWRnZUhhbmRsZXIgaW5zdGFuY2UuIFZhbHVlIGFuZCByZWZlcmVuY2UgYXJlIGNvbnN0YW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zLCBib2R5LCBpbWFnZWxpc3QsIGdsb2JhbE9wdGlvbnMsIGRlZmF1bHRPcHRpb25zKSB7XG4gICAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYm9keSBwcm92aWRlZFwiKTtcbiAgICB9XG5cbiAgICAvLyBTaW5jZSBnbG9iYWxPcHRpb25zIGlzIGNvbnN0YW50IGluIHZhbHVlcyBhcyB3ZWxsIGFzIHJlZmVyZW5jZSxcbiAgICAvLyBGb2xsb3dpbmcgbmVlZHMgdG8gYmUgZG9uZSBvbmx5IG9uY2UuXG5cbiAgICB0aGlzLm9wdGlvbnMgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucyk7XG4gICAgdGhpcy5nbG9iYWxPcHRpb25zID0gZ2xvYmFsT3B0aW9ucztcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmltYWdlbGlzdCA9IGltYWdlbGlzdDtcblxuICAgIC8vIGluaXRpYWxpemUgdmFyaWFibGVzXG4gICAgdGhpcy5pZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZyb21JZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRvSWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuaG92ZXIgPSBmYWxzZTtcbiAgICB0aGlzLmxhYmVsRGlydHkgPSB0cnVlO1xuXG4gICAgdGhpcy5iYXNlV2lkdGggPSB0aGlzLm9wdGlvbnMud2lkdGg7XG4gICAgdGhpcy5iYXNlRm9udFNpemUgPSB0aGlzLm9wdGlvbnMuZm9udC5zaXplO1xuXG4gICAgdGhpcy5mcm9tID0gdW5kZWZpbmVkOyAvLyBhIG5vZGVcbiAgICB0aGlzLnRvID0gdW5kZWZpbmVkOyAvLyBhIG5vZGVcblxuICAgIHRoaXMuZWRnZVR5cGUgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5sYWJlbE1vZHVsZSA9IG5ldyBMYWJlbChcbiAgICAgIHRoaXMuYm9keSxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgIHRydWUgLyogSXQncyBhbiBlZGdlIGxhYmVsICovXG4gICAgKTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG9yIG92ZXJ3cml0ZSBvcHRpb25zIGZvciB0aGUgZWRnZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgYW4gb2JqZWN0IHdpdGggb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfGJvb2xlYW59IHVuZGVmaW5lZCBpZiBubyBvcHRpb25zLCB0cnVlIGlmIGxheW91dCBhZmZlY3RpbmcgZGF0YSBjaGFuZ2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGb2xsb3dpbmcgb3B0aW9ucyBpZiBjaGFuZ2VkIGFmZmVjdCB0aGUgbGF5b3V0LlxuICAgIGxldCBhZmZlY3RzTGF5b3V0ID1cbiAgICAgICh0eXBlb2Ygb3B0aW9ucy5waHlzaWNzICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHRoaXMub3B0aW9ucy5waHlzaWNzICE9PSBvcHRpb25zLnBoeXNpY3MpIHx8XG4gICAgICAodHlwZW9mIG9wdGlvbnMuaGlkZGVuICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICh0aGlzLm9wdGlvbnMuaGlkZGVuIHx8IGZhbHNlKSAhPT0gKG9wdGlvbnMuaGlkZGVuIHx8IGZhbHNlKSkgfHxcbiAgICAgICh0eXBlb2Ygb3B0aW9ucy5mcm9tICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHRoaXMub3B0aW9ucy5mcm9tICE9PSBvcHRpb25zLmZyb20pIHx8XG4gICAgICAodHlwZW9mIG9wdGlvbnMudG8gIT09IFwidW5kZWZpbmVkXCIgJiYgdGhpcy5vcHRpb25zLnRvICE9PSBvcHRpb25zLnRvKTtcblxuICAgIEVkZ2UucGFyc2VPcHRpb25zKHRoaXMub3B0aW9ucywgb3B0aW9ucywgdHJ1ZSwgdGhpcy5nbG9iYWxPcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5mcm9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZnJvbUlkID0gb3B0aW9ucy5mcm9tO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50byAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRvSWQgPSBvcHRpb25zLnRvO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRpdGxlID0gb3B0aW9ucy50aXRsZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy52YWx1ZSA9IHBhcnNlRmxvYXQob3B0aW9ucy52YWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGlsZSA9IFtvcHRpb25zLCB0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnNdO1xuICAgIHRoaXMuY2hvb3NlciA9IGNob29zaWZ5KFwiZWRnZVwiLCBwaWxlKTtcblxuICAgIC8vIHVwZGF0ZSBsYWJlbCBNb2R1bGVcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKG9wdGlvbnMpO1xuXG4gICAgLy8gVXBkYXRlIGVkZ2UgdHlwZSwgdGhpcyBpZiBjaGFuZ2VkIGFmZmVjdHMgdGhlIGxheW91dC5cbiAgICBhZmZlY3RzTGF5b3V0ID0gdGhpcy51cGRhdGVFZGdlVHlwZSgpIHx8IGFmZmVjdHNMYXlvdXQ7XG5cbiAgICAvLyBpZiBhbnl0aGluZyBoYXMgYmVlbiB1cGRhdGVzLCByZXNldCB0aGUgc2VsZWN0aW9uIHdpZHRoIGFuZCB0aGUgaG92ZXIgd2lkdGhcbiAgICB0aGlzLl9zZXRJbnRlcmFjdGlvbldpZHRocygpO1xuXG4gICAgLy8gQSBub2RlIGlzIGNvbm5lY3RlZCB3aGVuIGl0IGhhcyBhIGZyb20gYW5kIHRvIG5vZGUgdGhhdCBib3RoIGV4aXN0IGluIHRoZSBuZXR3b3JrLmJvZHkubm9kZXMuXG4gICAgdGhpcy5jb25uZWN0KCk7XG5cbiAgICByZXR1cm4gYWZmZWN0c0xheW91dDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50T3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0RlbGV0aW9uPWZhbHNlXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2dsb2JhbE9wdGlvbnM9e31dXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHlGcm9tR2xvYmFscz1mYWxzZV1cbiAgICovXG4gIHN0YXRpYyBwYXJzZU9wdGlvbnMoXG4gICAgcGFyZW50T3B0aW9ucyxcbiAgICBuZXdPcHRpb25zLFxuICAgIGFsbG93RGVsZXRpb24gPSBmYWxzZSxcbiAgICBnbG9iYWxPcHRpb25zID0ge30sXG4gICAgY29weUZyb21HbG9iYWxzID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgZmllbGRzID0gW1xuICAgICAgXCJlbmRQb2ludE9mZnNldFwiLFxuICAgICAgXCJhcnJvd1N0cmlrZXRocm91Z2hcIixcbiAgICAgIFwiaWRcIixcbiAgICAgIFwiZnJvbVwiLFxuICAgICAgXCJoaWRkZW5cIixcbiAgICAgIFwiaG92ZXJXaWR0aFwiLFxuICAgICAgXCJsYWJlbEhpZ2hsaWdodEJvbGRcIixcbiAgICAgIFwibGVuZ3RoXCIsXG4gICAgICBcImxpbmVcIixcbiAgICAgIFwib3BhY2l0eVwiLFxuICAgICAgXCJwaHlzaWNzXCIsXG4gICAgICBcInNjYWxpbmdcIixcbiAgICAgIFwic2VsZWN0aW9uV2lkdGhcIixcbiAgICAgIFwic2VsZlJlZmVyZW5jZVNpemVcIixcbiAgICAgIFwic2VsZlJlZmVyZW5jZVwiLFxuICAgICAgXCJ0b1wiLFxuICAgICAgXCJ0aXRsZVwiLFxuICAgICAgXCJ2YWx1ZVwiLFxuICAgICAgXCJ3aWR0aFwiLFxuICAgICAgXCJmb250XCIsXG4gICAgICBcImNob3NlblwiLFxuICAgICAgXCJ3aWR0aENvbnN0cmFpbnRcIixcbiAgICBdO1xuXG4gICAgLy8gb25seSBkZWVwIGV4dGVuZCB0aGUgaXRlbXMgaW4gdGhlIGZpZWxkIGFycmF5LiBUaGVzZSBkbyBub3QgaGF2ZSBzaG9ydGhhbmQuXG4gICAgc2VsZWN0aXZlRGVlcEV4dGVuZChmaWVsZHMsIHBhcmVudE9wdGlvbnMsIG5ld09wdGlvbnMsIGFsbG93RGVsZXRpb24pO1xuXG4gICAgLy8gT25seSB1c2UgZW5kUG9pbnRPZmZzZXQgdmFsdWVzIChmcm9tIGFuZCB0bykgaWYgaXQncyB2YWxpZCB2YWx1ZXNcbiAgICBpZiAoXG4gICAgICBuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQuZnJvbSkpIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tID0gbmV3T3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5lbmRQb2ludE9mZnNldC5mcm9tID1cbiAgICAgICAgICBnbG9iYWxPcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb20gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBnbG9iYWxPcHRpb25zLmVuZFBvaW50T2Zmc2V0LmZyb21cbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc29sZS5lcnJvcihcImVuZFBvaW50T2Zmc2V0LmZyb20gaXMgbm90IGEgdmFsaWQgbnVtYmVyXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgbmV3T3B0aW9ucy5lbmRQb2ludE9mZnNldC50byAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG5ld09wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8pKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG8gPSBuZXdPcHRpb25zLmVuZFBvaW50T2Zmc2V0LnRvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50T3B0aW9ucy5lbmRQb2ludE9mZnNldC50byA9XG4gICAgICAgICAgZ2xvYmFsT3B0aW9ucy5lbmRQb2ludE9mZnNldC50byAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGdsb2JhbE9wdGlvbnMuZW5kUG9pbnRPZmZzZXQudG9cbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc29sZS5lcnJvcihcImVuZFBvaW50T2Zmc2V0LnRvIGlzIG5vdCBhIHZhbGlkIG51bWJlclwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPbmx5IGNvcHkgbGFiZWwgaWYgaXQncyBhIGxlZ2FsIHZhbHVlLlxuICAgIGlmIChpc1ZhbGlkTGFiZWwobmV3T3B0aW9ucy5sYWJlbCkpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMubGFiZWwgPSBuZXdPcHRpb25zLmxhYmVsO1xuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRMYWJlbChwYXJlbnRPcHRpb25zLmxhYmVsKSkge1xuICAgICAgcGFyZW50T3B0aW9ucy5sYWJlbCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBtZXJnZU9wdGlvbnMocGFyZW50T3B0aW9ucywgbmV3T3B0aW9ucywgXCJzbW9vdGhcIiwgZ2xvYmFsT3B0aW9ucyk7XG4gICAgbWVyZ2VPcHRpb25zKHBhcmVudE9wdGlvbnMsIG5ld09wdGlvbnMsIFwic2hhZG93XCIsIGdsb2JhbE9wdGlvbnMpO1xuICAgIG1lcmdlT3B0aW9ucyhwYXJlbnRPcHRpb25zLCBuZXdPcHRpb25zLCBcImJhY2tncm91bmRcIiwgZ2xvYmFsT3B0aW9ucyk7XG5cbiAgICBpZiAobmV3T3B0aW9ucy5kYXNoZXMgIT09IHVuZGVmaW5lZCAmJiBuZXdPcHRpb25zLmRhc2hlcyAhPT0gbnVsbCkge1xuICAgICAgcGFyZW50T3B0aW9ucy5kYXNoZXMgPSBuZXdPcHRpb25zLmRhc2hlcztcbiAgICB9IGVsc2UgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5kYXNoZXMgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuZGFzaGVzID0gT2JqZWN0LmNyZWF0ZShnbG9iYWxPcHRpb25zLmRhc2hlcyk7IC8vIHRoaXMgc2V0cyB0aGUgcG9pbnRlciBvZiB0aGUgb3B0aW9uIGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb24uXG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBzY2FsaW5nIG5ld09wdGlvbnNcbiAgICBpZiAobmV3T3B0aW9ucy5zY2FsaW5nICE9PSB1bmRlZmluZWQgJiYgbmV3T3B0aW9ucy5zY2FsaW5nICE9PSBudWxsKSB7XG4gICAgICBpZiAobmV3T3B0aW9ucy5zY2FsaW5nLm1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuc2NhbGluZy5taW4gPSBuZXdPcHRpb25zLnNjYWxpbmcubWluO1xuICAgICAgfVxuICAgICAgaWYgKG5ld09wdGlvbnMuc2NhbGluZy5tYXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXJlbnRPcHRpb25zLnNjYWxpbmcubWF4ID0gbmV3T3B0aW9ucy5zY2FsaW5nLm1heDtcbiAgICAgIH1cbiAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgcGFyZW50T3B0aW9ucy5zY2FsaW5nLFxuICAgICAgICBuZXdPcHRpb25zLnNjYWxpbmcsXG4gICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgZ2xvYmFsT3B0aW9ucy5zY2FsaW5nXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoYWxsb3dEZWxldGlvbiA9PT0gdHJ1ZSAmJiBuZXdPcHRpb25zLnNjYWxpbmcgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuc2NhbGluZyA9IE9iamVjdC5jcmVhdGUoZ2xvYmFsT3B0aW9ucy5zY2FsaW5nKTsgLy8gdGhpcyBzZXRzIHRoZSBwb2ludGVyIG9mIHRoZSBvcHRpb24gYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbi5cbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbXVsdGlwbGUgaW5wdXQgY2FzZXMgZm9yIGFycm93c1xuICAgIGlmIChuZXdPcHRpb25zLmFycm93cyAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMuYXJyb3dzICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld09wdGlvbnMuYXJyb3dzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnN0IGFycm93cyA9IG5ld09wdGlvbnMuYXJyb3dzLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHBhcmVudE9wdGlvbnMuYXJyb3dzLnRvLmVuYWJsZWQgPSBhcnJvd3MuaW5kZXhPZihcInRvXCIpICE9IC0xO1xuICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cy5taWRkbGUuZW5hYmxlZCA9IGFycm93cy5pbmRleE9mKFwibWlkZGxlXCIpICE9IC0xO1xuICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cy5mcm9tLmVuYWJsZWQgPSBhcnJvd3MuaW5kZXhPZihcImZyb21cIikgIT0gLTE7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXdPcHRpb25zLmFycm93cyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBtZXJnZU9wdGlvbnMoXG4gICAgICAgICAgcGFyZW50T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgbmV3T3B0aW9ucy5hcnJvd3MsXG4gICAgICAgICAgXCJ0b1wiLFxuICAgICAgICAgIGdsb2JhbE9wdGlvbnMuYXJyb3dzXG4gICAgICAgICk7XG4gICAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBuZXdPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBcIm1pZGRsZVwiLFxuICAgICAgICAgIGdsb2JhbE9wdGlvbnMuYXJyb3dzXG4gICAgICAgICk7XG4gICAgICAgIG1lcmdlT3B0aW9ucyhcbiAgICAgICAgICBwYXJlbnRPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBuZXdPcHRpb25zLmFycm93cyxcbiAgICAgICAgICBcImZyb21cIixcbiAgICAgICAgICBnbG9iYWxPcHRpb25zLmFycm93c1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGFycm93IG5ld09wdGlvbnMgY2FuIG9ubHkgYmUgYW4gb2JqZWN0IG9yIGEgc3RyaW5nLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbi4gWW91IHVzZWQ6XCIgK1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobmV3T3B0aW9ucy5hcnJvd3MpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuYXJyb3dzID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmFycm93cyA9IE9iamVjdC5jcmVhdGUoZ2xvYmFsT3B0aW9ucy5hcnJvd3MpOyAvLyB0aGlzIHNldHMgdGhlIHBvaW50ZXIgb2YgdGhlIG9wdGlvbiBiYWNrIHRvIHRoZSBnbG9iYWwgb3B0aW9uLlxuICAgIH1cblxuICAgIC8vIGhhbmRsZSBtdWx0aXBsZSBpbnB1dCBjYXNlcyBmb3IgY29sb3JcbiAgICBpZiAobmV3T3B0aW9ucy5jb2xvciAhPT0gdW5kZWZpbmVkICYmIG5ld09wdGlvbnMuY29sb3IgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZyb21Db2xvciA9IGlzU3RyaW5nKG5ld09wdGlvbnMuY29sb3IpXG4gICAgICAgID8ge1xuICAgICAgICAgICAgY29sb3I6IG5ld09wdGlvbnMuY29sb3IsXG4gICAgICAgICAgICBoaWdobGlnaHQ6IG5ld09wdGlvbnMuY29sb3IsXG4gICAgICAgICAgICBob3ZlcjogbmV3T3B0aW9ucy5jb2xvcixcbiAgICAgICAgICAgIGluaGVyaXQ6IGZhbHNlLFxuICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICB9XG4gICAgICAgIDogbmV3T3B0aW9ucy5jb2xvcjtcbiAgICAgIGNvbnN0IHRvQ29sb3IgPSBwYXJlbnRPcHRpb25zLmNvbG9yO1xuXG4gICAgICAvLyBJZiBwYXNzZWQsIGZpbGwgaW4gdmFsdWVzIGZyb20gZGVmYXVsdCBvcHRpb25zIC0gcmVxdWlyZWQgaW4gdGhlIGNhc2Ugb2Ygbm8gcHJvdG90eXBlIGJyaWRnaW5nXG4gICAgICBpZiAoY29weUZyb21HbG9iYWxzKSB7XG4gICAgICAgIGRlZXBFeHRlbmQodG9Db2xvciwgZ2xvYmFsT3B0aW9ucy5jb2xvciwgZmFsc2UsIGFsbG93RGVsZXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xlYXIgbG9jYWwgcHJvcGVydGllcyAtIG5lZWQgdG8gZG8gaXQgbGlrZSB0aGlzIGluIG9yZGVyIHRvIHJldGFpbiBwcm90b3R5cGUgYnJpZGdlc1xuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gdG9Db2xvcikge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodG9Db2xvciwgaSkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0b0NvbG9yW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNTdHJpbmcodG9Db2xvcikpIHtcbiAgICAgICAgdG9Db2xvci5jb2xvciA9IHRvQ29sb3I7XG4gICAgICAgIHRvQ29sb3IuaGlnaGxpZ2h0ID0gdG9Db2xvcjtcbiAgICAgICAgdG9Db2xvci5ob3ZlciA9IHRvQ29sb3I7XG4gICAgICAgIHRvQ29sb3IuaW5oZXJpdCA9IGZhbHNlO1xuICAgICAgICBpZiAoZnJvbUNvbG9yLm9wYWNpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3Iub3BhY2l0eSA9IDEuMDsgLy8gc2V0IGRlZmF1bHRcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNvbG9yc0RlZmluZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZyb21Db2xvci5jb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG9Db2xvci5jb2xvciA9IGZyb21Db2xvci5jb2xvcjtcbiAgICAgICAgICBjb2xvcnNEZWZpbmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnJvbUNvbG9yLmhpZ2hsaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG9Db2xvci5oaWdobGlnaHQgPSBmcm9tQ29sb3IuaGlnaGxpZ2h0O1xuICAgICAgICAgIGNvbG9yc0RlZmluZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tQ29sb3IuaG92ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3IuaG92ZXIgPSBmcm9tQ29sb3IuaG92ZXI7XG4gICAgICAgICAgY29sb3JzRGVmaW5lZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZyb21Db2xvci5pbmhlcml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0b0NvbG9yLmluaGVyaXQgPSBmcm9tQ29sb3IuaW5oZXJpdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnJvbUNvbG9yLm9wYWNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRvQ29sb3Iub3BhY2l0eSA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIGZyb21Db2xvci5vcGFjaXR5KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sb3JzRGVmaW5lZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRvQ29sb3IuaW5oZXJpdCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0b0NvbG9yLmluaGVyaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdG9Db2xvci5pbmhlcml0ID0gXCJmcm9tXCI7IC8vIFNldCBkZWZhdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbGxvd0RlbGV0aW9uID09PSB0cnVlICYmIG5ld09wdGlvbnMuY29sb3IgPT09IG51bGwpIHtcbiAgICAgIHBhcmVudE9wdGlvbnMuY29sb3IgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5jb2xvcik7IC8vIHNldCB0aGUgb2JqZWN0IGJhY2sgdG8gdGhlIGdsb2JhbCBvcHRpb25zXG4gICAgfVxuXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUgJiYgbmV3T3B0aW9ucy5mb250ID09PSBudWxsKSB7XG4gICAgICBwYXJlbnRPcHRpb25zLmZvbnQgPSBicmlkZ2VPYmplY3QoZ2xvYmFsT3B0aW9ucy5mb250KTsgLy8gc2V0IHRoZSBvYmplY3QgYmFjayB0byB0aGUgZ2xvYmFsIG9wdGlvbnNcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld09wdGlvbnMsIFwic2VsZlJlZmVyZW5jZVNpemVcIikpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJUaGUgc2VsZlJlZmVyZW5jZVNpemUgcHJvcGVydHkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBzZWxmUmVmZXJlbmNlIHByb3BlcnR5IGluc3RlYWQuIFRoZSBzZWxmUmVmZXJlbmNlIGNhbiBiZSBzZXQgbGlrZSB0aGlzZSBzZWxmUmVmZXJlbmNlOntzaXplOjMwLCBhbmdsZTpNYXRoLlBJIC8gNH1cIlxuICAgICAgKTtcbiAgICAgIHBhcmVudE9wdGlvbnMuc2VsZlJlZmVyZW5jZS5zaXplID0gbmV3T3B0aW9ucy5zZWxmUmVmZXJlbmNlU2l6ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge0Fycm93T3B0aW9uc31cbiAgICovXG4gIGdldEZvcm1hdHRpbmdWYWx1ZXMoKSB7XG4gICAgY29uc3QgdG9BcnJvdyA9XG4gICAgICB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvID09PSB0cnVlIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvLmVuYWJsZWQgPT09IHRydWU7XG4gICAgY29uc3QgZnJvbUFycm93ID1cbiAgICAgIHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbSA9PT0gdHJ1ZSB8fFxuICAgICAgdGhpcy5vcHRpb25zLmFycm93cy5mcm9tLmVuYWJsZWQgPT09IHRydWU7XG4gICAgY29uc3QgbWlkZGxlQXJyb3cgPVxuICAgICAgdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUgPT09IHRydWUgfHxcbiAgICAgIHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLmVuYWJsZWQgPT09IHRydWU7XG4gICAgY29uc3QgaW5oZXJpdHNDb2xvciA9IHRoaXMub3B0aW9ucy5jb2xvci5pbmhlcml0O1xuICAgIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgIHRvQXJyb3c6IHRvQXJyb3csXG4gICAgICB0b0Fycm93U2NhbGU6IHRoaXMub3B0aW9ucy5hcnJvd3MudG8uc2NhbGVGYWN0b3IsXG4gICAgICB0b0Fycm93VHlwZTogdGhpcy5vcHRpb25zLmFycm93cy50by50eXBlLFxuICAgICAgdG9BcnJvd1NyYzogdGhpcy5vcHRpb25zLmFycm93cy50by5zcmMsXG4gICAgICB0b0Fycm93SW1hZ2VXaWR0aDogdGhpcy5vcHRpb25zLmFycm93cy50by5pbWFnZVdpZHRoLFxuICAgICAgdG9BcnJvd0ltYWdlSGVpZ2h0OiB0aGlzLm9wdGlvbnMuYXJyb3dzLnRvLmltYWdlSGVpZ2h0LFxuICAgICAgbWlkZGxlQXJyb3c6IG1pZGRsZUFycm93LFxuICAgICAgbWlkZGxlQXJyb3dTY2FsZTogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuc2NhbGVGYWN0b3IsXG4gICAgICBtaWRkbGVBcnJvd1R5cGU6IHRoaXMub3B0aW9ucy5hcnJvd3MubWlkZGxlLnR5cGUsXG4gICAgICBtaWRkbGVBcnJvd1NyYzogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuc3JjLFxuICAgICAgbWlkZGxlQXJyb3dJbWFnZVdpZHRoOiB0aGlzLm9wdGlvbnMuYXJyb3dzLm1pZGRsZS5pbWFnZVdpZHRoLFxuICAgICAgbWlkZGxlQXJyb3dJbWFnZUhlaWdodDogdGhpcy5vcHRpb25zLmFycm93cy5taWRkbGUuaW1hZ2VIZWlnaHQsXG4gICAgICBmcm9tQXJyb3c6IGZyb21BcnJvdyxcbiAgICAgIGZyb21BcnJvd1NjYWxlOiB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20uc2NhbGVGYWN0b3IsXG4gICAgICBmcm9tQXJyb3dUeXBlOiB0aGlzLm9wdGlvbnMuYXJyb3dzLmZyb20udHlwZSxcbiAgICAgIGZyb21BcnJvd1NyYzogdGhpcy5vcHRpb25zLmFycm93cy5mcm9tLnNyYyxcbiAgICAgIGZyb21BcnJvd0ltYWdlV2lkdGg6IHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbS5pbWFnZVdpZHRoLFxuICAgICAgZnJvbUFycm93SW1hZ2VIZWlnaHQ6IHRoaXMub3B0aW9ucy5hcnJvd3MuZnJvbS5pbWFnZUhlaWdodCxcbiAgICAgIGFycm93U3RyaWtldGhyb3VnaDogdGhpcy5vcHRpb25zLmFycm93U3RyaWtldGhyb3VnaCxcbiAgICAgIGNvbG9yOiBpbmhlcml0c0NvbG9yID8gdW5kZWZpbmVkIDogdGhpcy5vcHRpb25zLmNvbG9yLmNvbG9yLFxuICAgICAgaW5oZXJpdHNDb2xvcjogaW5oZXJpdHNDb2xvcixcbiAgICAgIG9wYWNpdHk6IHRoaXMub3B0aW9ucy5jb2xvci5vcGFjaXR5LFxuICAgICAgaGlkZGVuOiB0aGlzLm9wdGlvbnMuaGlkZGVuLFxuICAgICAgbGVuZ3RoOiB0aGlzLm9wdGlvbnMubGVuZ3RoLFxuICAgICAgc2hhZG93OiB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQsXG4gICAgICBzaGFkb3dDb2xvcjogdGhpcy5vcHRpb25zLnNoYWRvdy5jb2xvcixcbiAgICAgIHNoYWRvd1NpemU6IHRoaXMub3B0aW9ucy5zaGFkb3cuc2l6ZSxcbiAgICAgIHNoYWRvd1g6IHRoaXMub3B0aW9ucy5zaGFkb3cueCxcbiAgICAgIHNoYWRvd1k6IHRoaXMub3B0aW9ucy5zaGFkb3cueSxcbiAgICAgIGRhc2hlczogdGhpcy5vcHRpb25zLmRhc2hlcyxcbiAgICAgIHdpZHRoOiB0aGlzLm9wdGlvbnMud2lkdGgsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZC5lbmFibGVkLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZC5jb2xvcixcbiAgICAgIGJhY2tncm91bmRTaXplOiB0aGlzLm9wdGlvbnMuYmFja2dyb3VuZC5zaXplLFxuICAgICAgYmFja2dyb3VuZERhc2hlczogdGhpcy5vcHRpb25zLmJhY2tncm91bmQuZGFzaGVzLFxuICAgIH07XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQgfHwgdGhpcy5ob3Zlcikge1xuICAgICAgaWYgKHRoaXMuY2hvb3NlciA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkV2lkdGggPSB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uV2lkdGg7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RlZFdpZHRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhbHVlcy53aWR0aCA9IHNlbGVjdGVkV2lkdGgodmFsdWVzLndpZHRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxlY3RlZFdpZHRoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB2YWx1ZXMud2lkdGggKz0gc2VsZWN0ZWRXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWVzLndpZHRoID0gTWF0aC5tYXgodmFsdWVzLndpZHRoLCAwLjMgLyB0aGlzLmJvZHkudmlldy5zY2FsZSk7XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhpZ2hsaWdodDtcbiAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdGhpcy5vcHRpb25zLnNoYWRvdy5lbmFibGVkO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaG92ZXIpIHtcbiAgICAgICAgICBjb25zdCBob3ZlcldpZHRoID0gdGhpcy5vcHRpb25zLmhvdmVyV2lkdGg7XG4gICAgICAgICAgaWYgKHR5cGVvZiBob3ZlcldpZHRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhbHVlcy53aWR0aCA9IGhvdmVyV2lkdGgodmFsdWVzLndpZHRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBob3ZlcldpZHRoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB2YWx1ZXMud2lkdGggKz0gaG92ZXJXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsdWVzLndpZHRoID0gTWF0aC5tYXgodmFsdWVzLndpZHRoLCAwLjMgLyB0aGlzLmJvZHkudmlldy5zY2FsZSk7XG4gICAgICAgICAgdmFsdWVzLmNvbG9yID0gdGhpcy5vcHRpb25zLmNvbG9yLmhvdmVyO1xuICAgICAgICAgIHZhbHVlcy5zaGFkb3cgPSB0aGlzLm9wdGlvbnMuc2hhZG93LmVuYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuY2hvb3NlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMuY2hvb3Nlcih2YWx1ZXMsIHRoaXMub3B0aW9ucy5pZCwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3Zlcik7XG4gICAgICAgIGlmICh2YWx1ZXMuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhbHVlcy5pbmhlcml0c0NvbG9yID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlcy5zaGFkb3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsdWVzLnNoYWRvd0NvbG9yICE9PSB0aGlzLm9wdGlvbnMuc2hhZG93LmNvbG9yIHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93U2l6ZSAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy5zaXplIHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93WCAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy54IHx8XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93WSAhPT0gdGhpcy5vcHRpb25zLnNoYWRvdy55XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWx1ZXMuc2hhZG93ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVzLnNoYWRvdyA9IHRoaXMub3B0aW9ucy5zaGFkb3cuZW5hYmxlZDtcbiAgICAgIHZhbHVlcy53aWR0aCA9IE1hdGgubWF4KHZhbHVlcy53aWR0aCwgMC4zIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgb3B0aW9ucyBpbiB0aGUgbGFiZWwgbW9kdWxlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICB1cGRhdGVMYWJlbE1vZHVsZShvcHRpb25zKSB7XG4gICAgY29uc3QgcGlsZSA9IFtcbiAgICAgIG9wdGlvbnMsXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLmdsb2JhbE9wdGlvbnMsIC8vIEN1cnJlbnRseSBzZXQgZ2xvYmFsIGVkZ2Ugb3B0aW9uc1xuICAgICAgdGhpcy5kZWZhdWx0T3B0aW9ucyxcbiAgICBdO1xuXG4gICAgdGhpcy5sYWJlbE1vZHVsZS51cGRhdGUodGhpcy5vcHRpb25zLCBwaWxlKTtcblxuICAgIGlmICh0aGlzLmxhYmVsTW9kdWxlLmJhc2VTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYmFzZUZvbnRTaXplID0gdGhpcy5sYWJlbE1vZHVsZS5iYXNlU2l6ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlIHRoZSBlZGdlIHR5cGUsIHNldCB0aGUgb3B0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHVwZGF0ZUVkZ2VUeXBlKCkge1xuICAgIGNvbnN0IHNtb290aCA9IHRoaXMub3B0aW9ucy5zbW9vdGg7XG4gICAgbGV0IGRhdGFDaGFuZ2VkID0gZmFsc2U7XG4gICAgbGV0IGNoYW5nZUluVHlwZSA9IHRydWU7XG4gICAgaWYgKHRoaXMuZWRnZVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKFxuICAgICAgICAodGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIEJlemllckVkZ2VEeW5hbWljICYmXG4gICAgICAgICAgc21vb3RoLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgICAgICBzbW9vdGgudHlwZSA9PT0gXCJkeW5hbWljXCIpIHx8XG4gICAgICAgICh0aGlzLmVkZ2VUeXBlIGluc3RhbmNlb2YgQ3ViaWNCZXppZXJFZGdlICYmXG4gICAgICAgICAgc21vb3RoLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgICAgICBzbW9vdGgudHlwZSA9PT0gXCJjdWJpY0JlemllclwiKSB8fFxuICAgICAgICAodGhpcy5lZGdlVHlwZSBpbnN0YW5jZW9mIEJlemllckVkZ2VTdGF0aWMgJiZcbiAgICAgICAgICBzbW9vdGguZW5hYmxlZCA9PT0gdHJ1ZSAmJlxuICAgICAgICAgIHNtb290aC50eXBlICE9PSBcImR5bmFtaWNcIiAmJlxuICAgICAgICAgIHNtb290aC50eXBlICE9PSBcImN1YmljQmV6aWVyXCIpIHx8XG4gICAgICAgICh0aGlzLmVkZ2VUeXBlIGluc3RhbmNlb2YgU3RyYWlnaHRFZGdlICYmIHNtb290aC50eXBlLmVuYWJsZWQgPT09IGZhbHNlKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZUluVHlwZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZUluVHlwZSA9PT0gdHJ1ZSkge1xuICAgICAgICBkYXRhQ2hhbmdlZCA9IHRoaXMuY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlSW5UeXBlID09PSB0cnVlKSB7XG4gICAgICBpZiAoc21vb3RoLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHNtb290aC50eXBlID09PSBcImR5bmFtaWNcIikge1xuICAgICAgICAgIGRhdGFDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVkZ2VUeXBlID0gbmV3IEJlemllckVkZ2VEeW5hbWljKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoc21vb3RoLnR5cGUgPT09IFwiY3ViaWNCZXppZXJcIikge1xuICAgICAgICAgIHRoaXMuZWRnZVR5cGUgPSBuZXcgQ3ViaWNCZXppZXJFZGdlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lZGdlVHlwZSA9IG5ldyBCZXppZXJFZGdlU3RhdGljKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRnZVR5cGUgPSBuZXcgU3RyYWlnaHRFZGdlKFxuICAgICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgICAgdGhpcy5sYWJlbE1vZHVsZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBub3RoaW5nIGNoYW5nZXMsIHdlIGp1c3Qgc2V0IHRoZSBvcHRpb25zLlxuICAgICAgdGhpcy5lZGdlVHlwZS5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhQ2hhbmdlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IGFuIGVkZ2UgdG8gaXRzIG5vZGVzXG4gICAqL1xuICBjb25uZWN0KCkge1xuICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuXG4gICAgdGhpcy5mcm9tID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuZnJvbUlkXSB8fCB1bmRlZmluZWQ7XG4gICAgdGhpcy50byA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRvSWRdIHx8IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbm5lY3RlZCA9IHRoaXMuZnJvbSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudG8gIT09IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLmNvbm5lY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5mcm9tLmF0dGFjaEVkZ2UodGhpcyk7XG4gICAgICB0aGlzLnRvLmF0dGFjaEVkZ2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmZyb20pIHtcbiAgICAgICAgdGhpcy5mcm9tLmRldGFjaEVkZ2UodGhpcyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50bykge1xuICAgICAgICB0aGlzLnRvLmRldGFjaEVkZ2UodGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lZGdlVHlwZS5jb25uZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzY29ubmVjdCBhbiBlZGdlIGZyb20gaXRzIG5vZGVzXG4gICAqL1xuICBkaXNjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLmZyb20pIHtcbiAgICAgIHRoaXMuZnJvbS5kZXRhY2hFZGdlKHRoaXMpO1xuICAgICAgdGhpcy5mcm9tID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodGhpcy50bykge1xuICAgICAgdGhpcy50by5kZXRhY2hFZGdlKHRoaXMpO1xuICAgICAgdGhpcy50byA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgdGl0bGUgb2YgdGhpcyBlZGdlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aXRsZSAgICBUaGUgdGl0bGUgb2YgdGhlIGVkZ2UsIG9yIHVuZGVmaW5lZCB3aGVuIG5vIHRpdGxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gc2V0LlxuICAgKi9cbiAgZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGU7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgaWYgdGhpcyBub2RlIGlzIHNlbGVjdGVcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHNlbGVjdGVkICAgVHJ1ZSBpZiBub2RlIGlzIHNlbGVjdGVkLCBlbHNlIGZhbHNlXG4gICAqL1xuICBpc1NlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiB0aGUgZWRnZS4gQ2FuIGJlIHVuZGVmaW5lZFxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB2YWx1ZVxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGp1c3QgdGhlIHZhbHVlIHJhbmdlIG9mIHRoZSBlZGdlLiBUaGUgZWRnZSB3aWxsIGFkanVzdCBpdCdzIHdpZHRoXG4gICAqIGJhc2VkIG9uIGl0cyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pblxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFxuICAgKi9cbiAgc2V0VmFsdWVSYW5nZShtaW4sIG1heCwgdG90YWwpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5vcHRpb25zLnNjYWxpbmcuY3VzdG9tU2NhbGluZ0Z1bmN0aW9uKFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heCxcbiAgICAgICAgdG90YWwsXG4gICAgICAgIHRoaXMub3B0aW9ucy52YWx1ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHdpZHRoRGlmZiA9IHRoaXMub3B0aW9ucy5zY2FsaW5nLm1heCAtIHRoaXMub3B0aW9ucy5zY2FsaW5nLm1pbjtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGZvbnREaWZmID1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5tYXggLSB0aGlzLm9wdGlvbnMuc2NhbGluZy5sYWJlbC5taW47XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb250LnNpemUgPVxuICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsaW5nLmxhYmVsLm1pbiArIHNjYWxlICogZm9udERpZmY7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMud2lkdGggPSB0aGlzLm9wdGlvbnMuc2NhbGluZy5taW4gKyBzY2FsZSAqIHdpZHRoRGlmZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zLndpZHRoID0gdGhpcy5iYXNlV2lkdGg7XG4gICAgICB0aGlzLm9wdGlvbnMuZm9udC5zaXplID0gdGhpcy5iYXNlRm9udFNpemU7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0SW50ZXJhY3Rpb25XaWR0aHMoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsTW9kdWxlKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRJbnRlcmFjdGlvbldpZHRocygpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuaG92ZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoKHRoaXMub3B0aW9ucy53aWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuaG92ZXJXaWR0aCA9IHRoaXMub3B0aW9ucy5ob3ZlcldpZHRoICsgdGhpcy5vcHRpb25zLndpZHRoO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5zZWxlY3Rpb25XaWR0aCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLnNlbGVjdGlvbldpZHRoID0gdGhpcy5vcHRpb25zLnNlbGVjdGlvbldpZHRoKFxuICAgICAgICB0aGlzLm9wdGlvbnMud2lkdGhcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRnZVR5cGUuc2VsZWN0aW9uV2lkdGggPVxuICAgICAgICB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uV2lkdGggKyB0aGlzLm9wdGlvbnMud2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhIGVkZ2VcbiAgICogRHJhdyB0aGlzIGVkZ2UgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqL1xuICBkcmF3KGN0eCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0dGluZ1ZhbHVlcygpO1xuICAgIGlmICh2YWx1ZXMuaGlkZGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSB2aWEgbm9kZSBmcm9tIHRoZSBlZGdlIHR5cGVcbiAgICBjb25zdCB2aWFOb2RlID0gdGhpcy5lZGdlVHlwZS5nZXRWaWFOb2RlKCk7XG5cbiAgICAvLyBkcmF3IGxpbmUgYW5kIGxhYmVsXG4gICAgdGhpcy5lZGdlVHlwZS5kcmF3TGluZShjdHgsIHZhbHVlcywgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3ZlciwgdmlhTm9kZSk7XG4gICAgdGhpcy5kcmF3TGFiZWwoY3R4LCB2aWFOb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYXJyb3dzXG4gICAqIERyYXcgdGhpcyBhcnJvd3MgaW4gdGhlIGdpdmVuIGNhbnZhc1xuICAgKiBUaGUgMmQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqL1xuICBkcmF3QXJyb3dzKGN0eCkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0Rm9ybWF0dGluZ1ZhbHVlcygpO1xuICAgIGlmICh2YWx1ZXMuaGlkZGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSB2aWEgbm9kZSBmcm9tIHRoZSBlZGdlIHR5cGVcbiAgICBjb25zdCB2aWFOb2RlID0gdGhpcy5lZGdlVHlwZS5nZXRWaWFOb2RlKCk7XG4gICAgY29uc3QgYXJyb3dEYXRhID0ge307XG5cbiAgICAvLyByZXN0b3JlIGVkZ2UgdGFyZ2V0cyB0byBkZWZhdWx0c1xuICAgIHRoaXMuZWRnZVR5cGUuZnJvbVBvaW50ID0gdGhpcy5lZGdlVHlwZS5mcm9tO1xuICAgIHRoaXMuZWRnZVR5cGUudG9Qb2ludCA9IHRoaXMuZWRnZVR5cGUudG87XG5cbiAgICAvLyBmcm9tIGFuZCB0byBhcnJvd3MgZ2l2ZSBhIGRpZmZlcmVudCBlbmQgcG9pbnQgZm9yIGVkZ2VzLiB3ZSBzZXQgdGhlbSBoZXJlXG4gICAgaWYgKHZhbHVlcy5mcm9tQXJyb3cpIHtcbiAgICAgIGFycm93RGF0YS5mcm9tID0gdGhpcy5lZGdlVHlwZS5nZXRBcnJvd0RhdGEoXG4gICAgICAgIGN0eCxcbiAgICAgICAgXCJmcm9tXCIsXG4gICAgICAgIHZpYU5vZGUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQsXG4gICAgICAgIHRoaXMuaG92ZXIsXG4gICAgICAgIHZhbHVlc1xuICAgICAgKTtcbiAgICAgIGlmICh2YWx1ZXMuYXJyb3dTdHJpa2V0aHJvdWdoID09PSBmYWxzZSlcbiAgICAgICAgdGhpcy5lZGdlVHlwZS5mcm9tUG9pbnQgPSBhcnJvd0RhdGEuZnJvbS5jb3JlO1xuICAgICAgaWYgKHZhbHVlcy5mcm9tQXJyb3dTcmMpIHtcbiAgICAgICAgYXJyb3dEYXRhLmZyb20uaW1hZ2UgPSB0aGlzLmltYWdlbGlzdC5sb2FkKHZhbHVlcy5mcm9tQXJyb3dTcmMpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlcy5mcm9tQXJyb3dJbWFnZVdpZHRoKSB7XG4gICAgICAgIGFycm93RGF0YS5mcm9tLmltYWdlV2lkdGggPSB2YWx1ZXMuZnJvbUFycm93SW1hZ2VXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMuZnJvbUFycm93SW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgYXJyb3dEYXRhLmZyb20uaW1hZ2VIZWlnaHQgPSB2YWx1ZXMuZnJvbUFycm93SW1hZ2VIZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2YWx1ZXMudG9BcnJvdykge1xuICAgICAgYXJyb3dEYXRhLnRvID0gdGhpcy5lZGdlVHlwZS5nZXRBcnJvd0RhdGEoXG4gICAgICAgIGN0eCxcbiAgICAgICAgXCJ0b1wiLFxuICAgICAgICB2aWFOb2RlLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICB2YWx1ZXNcbiAgICAgICk7XG4gICAgICBpZiAodmFsdWVzLmFycm93U3RyaWtldGhyb3VnaCA9PT0gZmFsc2UpXG4gICAgICAgIHRoaXMuZWRnZVR5cGUudG9Qb2ludCA9IGFycm93RGF0YS50by5jb3JlO1xuICAgICAgaWYgKHZhbHVlcy50b0Fycm93U3JjKSB7XG4gICAgICAgIGFycm93RGF0YS50by5pbWFnZSA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQodmFsdWVzLnRvQXJyb3dTcmMpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlcy50b0Fycm93SW1hZ2VXaWR0aCkge1xuICAgICAgICBhcnJvd0RhdGEudG8uaW1hZ2VXaWR0aCA9IHZhbHVlcy50b0Fycm93SW1hZ2VXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMudG9BcnJvd0ltYWdlSGVpZ2h0KSB7XG4gICAgICAgIGFycm93RGF0YS50by5pbWFnZUhlaWdodCA9IHZhbHVlcy50b0Fycm93SW1hZ2VIZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhlIG1pZGRsZSBhcnJvdyBkZXBlbmRzIG9uIHRoZSBsaW5lLCB3aGljaCBjYW4gZGVwZW5kIG9uIHRoZSB0byBhbmQgZnJvbSBhcnJvd3Mgc28gd2UgZG8gdGhpcyBvbmUgbGFzdGx5LlxuICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3cpIHtcbiAgICAgIGFycm93RGF0YS5taWRkbGUgPSB0aGlzLmVkZ2VUeXBlLmdldEFycm93RGF0YShcbiAgICAgICAgY3R4LFxuICAgICAgICBcIm1pZGRsZVwiLFxuICAgICAgICB2aWFOb2RlLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICB2YWx1ZXNcbiAgICAgICk7XG5cbiAgICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3dTcmMpIHtcbiAgICAgICAgYXJyb3dEYXRhLm1pZGRsZS5pbWFnZSA9IHRoaXMuaW1hZ2VsaXN0LmxvYWQodmFsdWVzLm1pZGRsZUFycm93U3JjKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMubWlkZGxlQXJyb3dJbWFnZVdpZHRoKSB7XG4gICAgICAgIGFycm93RGF0YS5taWRkbGUuaW1hZ2VXaWR0aCA9IHZhbHVlcy5taWRkbGVBcnJvd0ltYWdlV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzLm1pZGRsZUFycm93SW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgYXJyb3dEYXRhLm1pZGRsZS5pbWFnZUhlaWdodCA9IHZhbHVlcy5taWRkbGVBcnJvd0ltYWdlSGVpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZXMuZnJvbUFycm93KSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLmRyYXdBcnJvd0hlYWQoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICBhcnJvd0RhdGEuZnJvbVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlcy5taWRkbGVBcnJvdykge1xuICAgICAgdGhpcy5lZGdlVHlwZS5kcmF3QXJyb3dIZWFkKFxuICAgICAgICBjdHgsXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgYXJyb3dEYXRhLm1pZGRsZVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlcy50b0Fycm93KSB7XG4gICAgICB0aGlzLmVkZ2VUeXBlLmRyYXdBcnJvd0hlYWQoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICB0aGlzLnNlbGVjdGVkLFxuICAgICAgICB0aGlzLmhvdmVyLFxuICAgICAgICBhcnJvd0RhdGEudG9cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHhcbiAgICogQHBhcmFtIHtOb2RlfSB2aWFOb2RlXG4gICAqL1xuICBkcmF3TGFiZWwoY3R4LCB2aWFOb2RlKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzZXQgc3R5bGVcbiAgICAgIGNvbnN0IG5vZGUxID0gdGhpcy5mcm9tO1xuICAgICAgY29uc3Qgbm9kZTIgPSB0aGlzLnRvO1xuXG4gICAgICBpZiAodGhpcy5sYWJlbE1vZHVsZS5kaWZmZXJlbnRTdGF0ZSh0aGlzLnNlbGVjdGVkLCB0aGlzLmhvdmVyKSkge1xuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLmdldFRleHRTaXplKGN0eCwgdGhpcy5zZWxlY3RlZCwgdGhpcy5ob3Zlcik7XG4gICAgICB9XG5cbiAgICAgIGxldCBwb2ludDtcbiAgICAgIGlmIChub2RlMS5pZCAhPSBub2RlMi5pZCkge1xuICAgICAgICB0aGlzLmxhYmVsTW9kdWxlLnBvaW50VG9TZWxmID0gZmFsc2U7XG4gICAgICAgIHBvaW50ID0gdGhpcy5lZGdlVHlwZS5nZXRQb2ludCgwLjUsIHZpYU5vZGUpO1xuICAgICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICAgIGNvbnN0IHJvdGF0aW9uUG9pbnQgPSB0aGlzLl9nZXRSb3RhdGlvbihjdHgpO1xuICAgICAgICBpZiAocm90YXRpb25Qb2ludC5hbmdsZSAhPSAwKSB7XG4gICAgICAgICAgY3R4LnRyYW5zbGF0ZShyb3RhdGlvblBvaW50LngsIHJvdGF0aW9uUG9pbnQueSk7XG4gICAgICAgICAgY3R4LnJvdGF0ZShyb3RhdGlvblBvaW50LmFuZ2xlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRyYXcgdGhlIGxhYmVsXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHBvaW50LngsIHBvaW50LnksIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuXG4gICAgICAgIC8qXG4gICAgICAgIC8vIFVzZWZ1bCBkZWJ1ZyBjb2RlOiBkcmF3IGEgYm9yZGVyIGFyb3VuZCB0aGUgbGFiZWxcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgKipub3QqKiBiZSBlbmFibGVkIGluIHByb2R1Y3Rpb24hXG4gICAgICAgIHZhciBzaXplID0gdGhpcy5sYWJlbE1vZHVsZS5nZXRTaXplKCk7OyAvLyA7OyBpbnRlbnRpb25hbCBzbyBsaW50IGNhdGNoZXMgaXRcbiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCIjZmYwMDAwXCI7XG4gICAgICAgIGN0eC5zdHJva2VSZWN0KHNpemUubGVmdCwgc2l6ZS50b3AsIHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcbiAgICAgICAgLy8gRW5kICBkZWJ1ZyBjb2RlXG4qL1xuXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIG9yaWVudGF0aW9ucy5cbiAgICAgICAgdGhpcy5sYWJlbE1vZHVsZS5wb2ludFRvU2VsZiA9IHRydWU7XG5cbiAgICAgICAgLy8gZ2V0IGNpcmNsZSBjb29yZGluYXRlc1xuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGdldFNlbGZSZWZDb29yZGluYXRlcyhcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2UuYW5nbGUsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2Uuc2l6ZSxcbiAgICAgICAgICBub2RlMVxuICAgICAgICApO1xuXG4gICAgICAgIHBvaW50ID0gdGhpcy5fcG9pbnRPbkNpcmNsZShcbiAgICAgICAgICBjb29yZGluYXRlcy54LFxuICAgICAgICAgIGNvb3JkaW5hdGVzLnksXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGZSZWZlcmVuY2Uuc2l6ZSxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc2VsZlJlZmVyZW5jZS5hbmdsZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubGFiZWxNb2R1bGUuZHJhdyhjdHgsIHBvaW50LngsIHBvaW50LnksIHRoaXMuc2VsZWN0ZWQsIHRoaXMuaG92ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgYWxsIHZpc3VhbCBlbGVtZW50cyBvZiB0aGlzIGVkZ2UgaW5zdGFuY2UsIGluIHdoaWNoIHRoZSBnaXZlblxuICAgKiBwb2ludCBmYWxscyB3aXRoaW4gdGhlIGJvdW5kaW5nIHNoYXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb2ludFxuICAgKiBAcmV0dXJucyB7QXJyYXkuPGVkZ2VDbGlja0l0ZW18ZWRnZUxhYmVsQ2xpY2tJdGVtPn0gbGlzdCB3aXRoIHRoZSBpdGVtcyB3aGljaCBhcmUgb24gdGhlIHBvaW50XG4gICAqL1xuICBnZXRJdGVtc09uUG9pbnQocG9pbnQpIHtcbiAgICBjb25zdCByZXQgPSBbXTtcblxuICAgIGlmICh0aGlzLmxhYmVsTW9kdWxlLnZpc2libGUoKSkge1xuICAgICAgY29uc3Qgcm90YXRpb25Qb2ludCA9IHRoaXMuX2dldFJvdGF0aW9uKCk7XG4gICAgICBpZiAocG9pbnRJblJlY3QodGhpcy5sYWJlbE1vZHVsZS5nZXRTaXplKCksIHBvaW50LCByb3RhdGlvblBvaW50KSkge1xuICAgICAgICByZXQucHVzaCh7IGVkZ2VJZDogdGhpcy5pZCwgbGFiZWxJZDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBsZWZ0OiBwb2ludC54LFxuICAgICAgdG9wOiBwb2ludC55LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5pc092ZXJsYXBwaW5nV2l0aChvYmopKSB7XG4gICAgICByZXQucHVzaCh7IGVkZ2VJZDogdGhpcy5pZCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgb2JqZWN0IGlzIG92ZXJsYXBwaW5nIHdpdGggdGhlIHByb3ZpZGVkIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqICAgYW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3BcbiAgICogQHJldHVybnMge2Jvb2xlYW59ICAgICBUcnVlIGlmIGxvY2F0aW9uIGlzIGxvY2F0ZWQgb24gdGhlIGVkZ2VcbiAgICovXG4gIGlzT3ZlcmxhcHBpbmdXaXRoKG9iaikge1xuICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgY29uc3QgZGlzdE1heCA9IDEwO1xuICAgICAgY29uc3QgeEZyb20gPSB0aGlzLmZyb20ueDtcbiAgICAgIGNvbnN0IHlGcm9tID0gdGhpcy5mcm9tLnk7XG4gICAgICBjb25zdCB4VG8gPSB0aGlzLnRvLng7XG4gICAgICBjb25zdCB5VG8gPSB0aGlzLnRvLnk7XG4gICAgICBjb25zdCB4T2JqID0gb2JqLmxlZnQ7XG4gICAgICBjb25zdCB5T2JqID0gb2JqLnRvcDtcblxuICAgICAgY29uc3QgZGlzdCA9IHRoaXMuZWRnZVR5cGUuZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgICAgIHhGcm9tLFxuICAgICAgICB5RnJvbSxcbiAgICAgICAgeFRvLFxuICAgICAgICB5VG8sXG4gICAgICAgIHhPYmosXG4gICAgICAgIHlPYmpcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBkaXN0IDwgZGlzdE1heDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHJvdGF0aW9uIHBvaW50LCBpZiBhbnkuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBbY3R4XSBpZiBwYXNzZWQsIGRvIGEgcmVjYWxjdWxhdGlvbiBvZiB0aGUgbGFiZWwgc2l6ZVxuICAgKiBAcmV0dXJucyB7cm90YXRpb25Qb2ludH0gdGhlIHBvaW50IHRvIHJvdGF0ZSBhcm91bmQgYW5kIHRoZSBhbmdsZSBpbiByYWRpYW5zIHRvIHJvdGF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFJvdGF0aW9uKGN0eCkge1xuICAgIGNvbnN0IHZpYU5vZGUgPSB0aGlzLmVkZ2VUeXBlLmdldFZpYU5vZGUoKTtcbiAgICBjb25zdCBwb2ludCA9IHRoaXMuZWRnZVR5cGUuZ2V0UG9pbnQoMC41LCB2aWFOb2RlKTtcblxuICAgIGlmIChjdHggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sYWJlbE1vZHVsZS5jYWxjdWxhdGVMYWJlbFNpemUoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ob3ZlcixcbiAgICAgICAgcG9pbnQueCxcbiAgICAgICAgcG9pbnQueVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSB7XG4gICAgICB4OiBwb2ludC54LFxuICAgICAgeTogdGhpcy5sYWJlbE1vZHVsZS5zaXplLnlMaW5lLFxuICAgICAgYW5nbGU6IDAsXG4gICAgfTtcblxuICAgIGlmICghdGhpcy5sYWJlbE1vZHVsZS52aXNpYmxlKCkpIHtcbiAgICAgIHJldHVybiByZXQ7IC8vIERvbid0IGV2ZW4gYm90aGVyIGRvaW5nIHRoZSBhdGFuMiwgdGhlcmUncyBub3RoaW5nIHRvIGRyYXdcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmZvbnQuYWxpZ24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICByZXR1cm4gcmV0OyAvLyBObyBuZWVkIHRvIGNhbGN1bGF0ZSBhbmdsZVxuICAgIH1cblxuICAgIGNvbnN0IGR5ID0gdGhpcy5mcm9tLnkgLSB0aGlzLnRvLnk7XG4gICAgY29uc3QgZHggPSB0aGlzLmZyb20ueCAtIHRoaXMudG8ueDtcbiAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKGR5LCBkeCk7IC8vIHJhZGlhbnNcblxuICAgIC8vIHJvdGF0ZSBzbyB0aGF0IGxhYmVsIGlzIHJlYWRhYmxlXG4gICAgaWYgKChhbmdsZSA8IC0xICYmIGR4IDwgMCkgfHwgKGFuZ2xlID4gMCAmJiBkeCA8IDApKSB7XG4gICAgICBhbmdsZSArPSBNYXRoLlBJO1xuICAgIH1cbiAgICByZXQuYW5nbGUgPSBhbmdsZTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcG9pbnQgb24gYSBjaXJjbGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJhZGl1c1xuICAgKiBAcGFyYW0ge251bWJlcn0gYW5nbGVcbiAgICogQHJldHVybnMge29iamVjdH0gcG9pbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wb2ludE9uQ2lyY2xlKHgsIHksIHJhZGl1cywgYW5nbGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogeCArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKSxcbiAgICAgIHk6IHkgLSByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHNlbGVjdGVkIHN0YXRlIHRvIHRydWVcbiAgICovXG4gIHNlbGVjdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHNlbGVjdGVkIHN0YXRlIHRvIGZhbHNlXG4gICAqL1xuICB1bnNlbGVjdCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogY2xlYW5zIGFsbCByZXF1aXJlZCB0aGluZ3Mgb24gZGVsZXRlXG4gICAqXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgY2xlYW51cCgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGdlVHlwZS5jbGVhbnVwKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGVkZ2UgZnJvbSB0aGUgbGlzdCBhbmQgcGVyZm9ybSBuZWNlc3NhcnkgY2xlYW51cC5cbiAgICovXG4gIHJlbW92ZSgpIHtcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICBkZWxldGUgdGhpcy5ib2R5LmVkZ2VzW3RoaXMuaWRdO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGJvdGggY29ubmVjdGluZyBub2RlcyBleGlzdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGVuZFBvaW50c1ZhbGlkKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJvZHkubm9kZXNbdGhpcy5mcm9tSWRdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRvSWRdICE9PSB1bmRlZmluZWRcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkZ2U7XG4iLCAiaW1wb3J0IHsgZGVlcEV4dGVuZCwgZm9yRWFjaCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IERhdGFTZXQsIGlzRGF0YVZpZXdMaWtlIH0gZnJvbSBcInZpcy1kYXRhL2VzbmV4dFwiO1xuaW1wb3J0IEVkZ2UgZnJvbSBcIi4vY29tcG9uZW50cy9FZGdlXCI7XG5cbi8qKlxuICogSGFuZGxlciBmb3IgRWRnZXNcbiAqL1xuY2xhc3MgRWRnZXNIYW5kbGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7QXJyYXkuPEltYWdlPn0gaW1hZ2VzXG4gICAqIEBwYXJhbSB7QXJyYXkuPEdyb3VwPn0gZ3JvdXBzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBpbWFnZXMsIGdyb3Vwcykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5pbWFnZXMgPSBpbWFnZXM7XG4gICAgdGhpcy5ncm91cHMgPSBncm91cHM7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGVkZ2UgQVBJIGluIHRoZSBib2R5IGNvbnRhaW5lclxuICAgIHRoaXMuYm9keS5mdW5jdGlvbnMuY3JlYXRlRWRnZSA9IHRoaXMuY3JlYXRlLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmVkZ2VzTGlzdGVuZXJzID0ge1xuICAgICAgYWRkOiAoZXZlbnQsIHBhcmFtcykgPT4ge1xuICAgICAgICB0aGlzLmFkZChwYXJhbXMuaXRlbXMpO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZTogKGV2ZW50LCBwYXJhbXMpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGUocGFyYW1zLml0ZW1zKTtcbiAgICAgIH0sXG4gICAgICByZW1vdmU6IChldmVudCwgcGFyYW1zKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlKHBhcmFtcy5pdGVtcyk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgYXJyb3dzOiB7XG4gICAgICAgIHRvOiB7IGVuYWJsZWQ6IGZhbHNlLCBzY2FsZUZhY3RvcjogMSwgdHlwZTogXCJhcnJvd1wiIH0sIC8vIGJvb2xlYW4gLyB7YXJyb3dTY2FsZUZhY3RvcjoxfSAvIHtlbmFibGVkOiBmYWxzZSwgYXJyb3dTY2FsZUZhY3RvcjoxfVxuICAgICAgICBtaWRkbGU6IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiAxLCB0eXBlOiBcImFycm93XCIgfSxcbiAgICAgICAgZnJvbTogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IDEsIHR5cGU6IFwiYXJyb3dcIiB9LFxuICAgICAgfSxcbiAgICAgIGVuZFBvaW50T2Zmc2V0OiB7XG4gICAgICAgIGZyb206IDAsXG4gICAgICAgIHRvOiAwLFxuICAgICAgfSxcbiAgICAgIGFycm93U3RyaWtldGhyb3VnaDogdHJ1ZSxcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIGNvbG9yOiBcIiM4NDg0ODRcIixcbiAgICAgICAgaGlnaGxpZ2h0OiBcIiM4NDg0ODRcIixcbiAgICAgICAgaG92ZXI6IFwiIzg0ODQ4NFwiLFxuICAgICAgICBpbmhlcml0OiBcImZyb21cIixcbiAgICAgICAgb3BhY2l0eTogMS4wLFxuICAgICAgfSxcbiAgICAgIGRhc2hlczogZmFsc2UsXG4gICAgICBmb250OiB7XG4gICAgICAgIGNvbG9yOiBcIiMzNDM0MzRcIixcbiAgICAgICAgc2l6ZTogMTQsIC8vIHB4XG4gICAgICAgIGZhY2U6IFwiYXJpYWxcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCJub25lXCIsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAyLCAvLyBweFxuICAgICAgICBzdHJva2VDb2xvcjogXCIjZmZmZmZmXCIsXG4gICAgICAgIGFsaWduOiBcImhvcml6b250YWxcIixcbiAgICAgICAgbXVsdGk6IGZhbHNlLFxuICAgICAgICB2YWRqdXN0OiAwLFxuICAgICAgICBib2xkOiB7XG4gICAgICAgICAgbW9kOiBcImJvbGRcIixcbiAgICAgICAgfSxcbiAgICAgICAgYm9sZGl0YWw6IHtcbiAgICAgICAgICBtb2Q6IFwiYm9sZCBpdGFsaWNcIixcbiAgICAgICAgfSxcbiAgICAgICAgaXRhbDoge1xuICAgICAgICAgIG1vZDogXCJpdGFsaWNcIixcbiAgICAgICAgfSxcbiAgICAgICAgbW9ubzoge1xuICAgICAgICAgIG1vZDogXCJcIixcbiAgICAgICAgICBzaXplOiAxNSwgLy8gcHhcbiAgICAgICAgICBmYWNlOiBcImNvdXJpZXIgbmV3XCIsXG4gICAgICAgICAgdmFkanVzdDogMixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgaG92ZXJXaWR0aDogMS41LFxuICAgICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogdHJ1ZSxcbiAgICAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgcGh5c2ljczogdHJ1ZSxcbiAgICAgIHNjYWxpbmc6IHtcbiAgICAgICAgbWluOiAxLFxuICAgICAgICBtYXg6IDE1LFxuICAgICAgICBsYWJlbDoge1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgbWluOiAxNCxcbiAgICAgICAgICBtYXg6IDMwLFxuICAgICAgICAgIG1heFZpc2libGU6IDMwLFxuICAgICAgICAgIGRyYXdUaHJlc2hvbGQ6IDUsXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbVNjYWxpbmdGdW5jdGlvbjogZnVuY3Rpb24gKG1pbiwgbWF4LCB0b3RhbCwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAobWF4ID09PSBtaW4pIHtcbiAgICAgICAgICAgIHJldHVybiAwLjU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gMSAvIChtYXggLSBtaW4pO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsICh2YWx1ZSAtIG1pbikgKiBzY2FsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNlbGVjdGlvbldpZHRoOiAxLjUsXG4gICAgICBzZWxmUmVmZXJlbmNlOiB7XG4gICAgICAgIHNpemU6IDIwLFxuICAgICAgICBhbmdsZTogTWF0aC5QSSAvIDQsXG4gICAgICAgIHJlbmRlckJlaGluZFRoZU5vZGU6IHRydWUsXG4gICAgICB9LFxuICAgICAgc2hhZG93OiB7XG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBjb2xvcjogXCJyZ2JhKDAsMCwwLDAuNSlcIixcbiAgICAgICAgc2l6ZTogMTAsXG4gICAgICAgIHg6IDUsXG4gICAgICAgIHk6IDUsXG4gICAgICB9LFxuICAgICAgYmFja2dyb3VuZDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgY29sb3I6IFwicmdiYSgxMTEsMTExLDExMSwxKVwiLFxuICAgICAgICBzaXplOiAxMCxcbiAgICAgICAgZGFzaGVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBzbW9vdGg6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJkeW5hbWljXCIsXG4gICAgICAgIGZvcmNlRGlyZWN0aW9uOiBcIm5vbmVcIixcbiAgICAgICAgcm91bmRuZXNzOiAwLjUsXG4gICAgICB9LFxuICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIHdpZHRoOiAxLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgZGVlcEV4dGVuZCh0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICAvLyB0aGlzIGFsbG93cyBleHRlcm5hbCBtb2R1bGVzIHRvIGZvcmNlIGFsbCBkeW5hbWljIGN1cnZlcyB0byB0dXJuIHN0YXRpYy5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9mb3JjZURpc2FibGVEeW5hbWljQ3VydmVzXCIsICh0eXBlLCBlbWl0ID0gdHJ1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGUgPT09IFwiZHluYW1pY1wiKSB7XG4gICAgICAgIHR5cGUgPSBcImNvbnRpbnVvdXNcIjtcbiAgICAgIH1cbiAgICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgZm9yIChjb25zdCBlZGdlSWQgaW4gdGhpcy5ib2R5LmVkZ2VzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKSB7XG4gICAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICAgICAgICAgIGNvbnN0IGVkZ2VEYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0KGVkZ2VJZCk7XG5cbiAgICAgICAgICAvLyBvbmx5IGZvcmNpYmx5IHJlbW92ZSB0aGUgc21vb3RoIGN1cnZlIGlmIHRoZSBkYXRhIGhhcyBiZWVuIHNldCBvZiB0aGUgZWRnZSBoYXMgdGhlIHNtb290aCBjdXJ2ZXMgZGVmaW5lZC5cbiAgICAgICAgICAvLyB0aGlzIGlzIGJlY2F1c2UgYSBjaGFuZ2UgaW4gdGhlIGdsb2JhbCB3b3VsZCBub3QgYWZmZWN0IHRoZXNlIGN1cnZlcy5cbiAgICAgICAgICBpZiAoZWRnZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc21vb3RoT3B0aW9ucyA9IGVkZ2VEYXRhLnNtb290aDtcbiAgICAgICAgICAgIGlmIChzbW9vdGhPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHNtb290aE9wdGlvbnMuZW5hYmxlZCA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgICAgIHNtb290aE9wdGlvbnMudHlwZSA9PT0gXCJkeW5hbWljXCJcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZWRnZS5zZXRPcHRpb25zKHsgc21vb3RoOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZWRnZS5zZXRPcHRpb25zKHsgc21vb3RoOiB7IHR5cGU6IHR5cGUgfSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZW1pdCA9PT0gdHJ1ZSAmJiBkYXRhQ2hhbmdlZCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gdGhpcyBpcyBjYWxsZWQgd2hlbiBvcHRpb25zIG9mIEVYSVNUSU5HIG5vZGVzIG9yIGVkZ2VzIGhhdmUgY2hhbmdlZC5cbiAgICAvL1xuICAgIC8vIE5PVEU6IE5vdCB0cnVlLCBjYWxsZWQgd2hlbiBvcHRpb25zIGhhdmUgTk9UIGNoYW5nZWQsIGZvciBib3RoIGV4aXN0aW5nIGFzIHdlbGwgYXMgbmV3IG5vZGVzLlxuICAgIC8vICAgICAgIFNlZSB1cGRhdGUoKSBmb3IgbG9naWMuXG4gICAgLy8gVE9ETzogVmVyaWZ5IGFuZCBleGFtaW5lIHRoZSBjb25zZXF1ZW5jZXMgb2YgdGhpcy4gSXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB3aGVuXG4gICAgLy8gICAgICAgbm9uLW9wdGlvbiBmaWVsZHMgaGF2ZSBjaGFuZ2VkLCBidXQgdGhlbiByZWNvbm5lY3RpbmcgZWRnZXMgaXMgc3RpbGwgdXNlbGVzcy5cbiAgICAvLyAgICAgICBBbHRlcm5hdGl2ZWx5LCBpdCBtaWdodCBhbHNvIGJlIGNhbGxlZCB3aGVuIGVkZ2VzIGFyZSByZW1vdmVkLlxuICAgIC8vXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YVVwZGF0ZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbm5lY3RFZGdlcygpO1xuICAgIH0pO1xuXG4gICAgLy8gcmVmcmVzaCB0aGUgZWRnZXMuIFVzZWQgd2hlbiByZXZlcnRpbmcgZnJvbSBoaWVyYXJjaGljYWwgbGF5b3V0XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJyZWZyZXNoRWRnZXNcIiwgdGhpcy5yZWZyZXNoLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwicmVmcmVzaFwiLCB0aGlzLnJlZnJlc2guYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZXN0cm95XCIsICgpID0+IHtcbiAgICAgIGZvckVhY2godGhpcy5lZGdlc0xpc3RlbmVycywgKGNhbGxiYWNrLCBldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ib2R5LmRhdGEuZWRnZXMpIHRoaXMuYm9keS5kYXRhLmVkZ2VzLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVFZGdlO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnMuYWRkO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnMudXBkYXRlO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnMucmVtb3ZlO1xuICAgICAgZGVsZXRlIHRoaXMuZWRnZXNMaXN0ZW5lcnM7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHVzZSB0aGUgcGFyc2VyIGZyb20gdGhlIEVkZ2UgY2xhc3MgdG8gZmlsbCBpbiBhbGwgc2hvcnRoYW5kIG5vdGF0aW9uc1xuICAgICAgRWRnZS5wYXJzZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zLCB0cnVlLCB0aGlzLmRlZmF1bHRPcHRpb25zLCB0cnVlKTtcblxuICAgICAgLy8gdXBkYXRlIHNtb290aCBzZXR0aW5ncyBpbiBhbGwgZWRnZXNcbiAgICAgIGxldCBkYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgaWYgKG9wdGlvbnMuc21vb3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBlZGdlSWQgaW4gdGhpcy5ib2R5LmVkZ2VzKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkuZWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgICAgIGRhdGFDaGFuZ2VkID1cbiAgICAgICAgICAgICAgdGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0udXBkYXRlRWRnZVR5cGUoKSB8fCBkYXRhQ2hhbmdlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdXBkYXRlIGZvbnRzIGluIGFsbCBlZGdlc1xuICAgICAgaWYgKG9wdGlvbnMuZm9udCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuYm9keS5lZGdlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXS51cGRhdGVMYWJlbE1vZHVsZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB1cGRhdGUgdGhlIHN0YXRlIG9mIHRoZSB2YXJpYWJsZXMgaWYgbmVlZGVkXG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMuaGlkZGVuICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgb3B0aW9ucy5waHlzaWNzICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgZGF0YUNoYW5nZWQgPT09IHRydWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGVkZ2VzIGJ5IHJlYWRpbmcgdGhlIGRhdGEgdGFibGVcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IERhdGFTZXQgfCBEYXRhVmlld30gZWRnZXMgICAgVGhlIGRhdGEgY29udGFpbmluZyB0aGUgZWRnZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90RW1pdD1mYWxzZV0gLSBTdXBwcmVzcyBkYXRhIGNoYW5nZWQgZXZlbnQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXREYXRhKGVkZ2VzLCBkb05vdEVtaXQgPSBmYWxzZSkge1xuICAgIGNvbnN0IG9sZEVkZ2VzRGF0YSA9IHRoaXMuYm9keS5kYXRhLmVkZ2VzO1xuXG4gICAgaWYgKGlzRGF0YVZpZXdMaWtlKFwiaWRcIiwgZWRnZXMpKSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcyA9IGVkZ2VzO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlZGdlcykpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzID0gbmV3IERhdGFTZXQoKTtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzLmFkZChlZGdlcyk7XG4gICAgfSBlbHNlIGlmICghZWRnZXMpIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzID0gbmV3IERhdGFTZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5IG9yIERhdGFTZXQgZXhwZWN0ZWRcIik7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogaXMgdGhpcyBudWxsIG9yIHVuZGVmaW5lZCBvciBmYWxzZT9cbiAgICBpZiAob2xkRWRnZXNEYXRhKSB7XG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIG9sZCBkYXRhc2V0XG4gICAgICBmb3JFYWNoKHRoaXMuZWRnZXNMaXN0ZW5lcnMsIChjYWxsYmFjaywgZXZlbnQpID0+IHtcbiAgICAgICAgb2xkRWRnZXNEYXRhLm9mZihldmVudCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGRyYXduIGVkZ2VzXG4gICAgdGhpcy5ib2R5LmVkZ2VzID0ge307XG5cbiAgICAvLyBUT0RPOiBpcyB0aGlzIG51bGwgb3IgdW5kZWZpbmVkIG9yIGZhbHNlP1xuICAgIGlmICh0aGlzLmJvZHkuZGF0YS5lZGdlcykge1xuICAgICAgLy8gc3Vic2NyaWJlIHRvIG5ldyBkYXRhc2V0XG4gICAgICBmb3JFYWNoKHRoaXMuZWRnZXNMaXN0ZW5lcnMsIChjYWxsYmFjaywgZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMub24oZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBkcmF3IGFsbCBuZXcgbm9kZXNcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuYm9keS5kYXRhLmVkZ2VzLmdldElkcygpO1xuICAgICAgdGhpcy5hZGQoaWRzLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIpO1xuICAgIGlmIChkb05vdEVtaXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZWRnZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXSB8IHN0cmluZ1tdfSBpZHNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9Ob3RFbWl0PWZhbHNlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkKGlkcywgZG9Ob3RFbWl0ID0gZmFsc2UpIHtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBlZGdlc0RhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IGlkc1tpXTtcblxuICAgICAgY29uc3Qgb2xkRWRnZSA9IGVkZ2VzW2lkXTtcbiAgICAgIGlmIChvbGRFZGdlKSB7XG4gICAgICAgIG9sZEVkZ2UuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gZWRnZXNEYXRhLmdldChpZCwgeyBzaG93SW50ZXJuYWxJZHM6IHRydWUgfSk7XG4gICAgICBlZGdlc1tpZF0gPSB0aGlzLmNyZWF0ZShkYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIpO1xuXG4gICAgaWYgKGRvTm90RW1pdCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBlZGdlcywgb3IgY3JlYXRlIHRoZW0gd2hlbiBub3QgeWV0IGV4aXN0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1cGRhdGUoaWRzKSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZWRnZXNEYXRhID0gdGhpcy5ib2R5LmRhdGEuZWRnZXM7XG4gICAgbGV0IGRhdGFDaGFuZ2VkID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgY29uc3QgZGF0YSA9IGVkZ2VzRGF0YS5nZXQoaWQpO1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2lkXTtcbiAgICAgIGlmIChlZGdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gdXBkYXRlIGVkZ2VcbiAgICAgICAgZWRnZS5kaXNjb25uZWN0KCk7XG4gICAgICAgIGRhdGFDaGFuZ2VkID0gZWRnZS5zZXRPcHRpb25zKGRhdGEpIHx8IGRhdGFDaGFuZ2VkOyAvLyBpZiBhIHN1cHBvcnQgbm9kZSBpcyBhZGRlZCwgZGF0YSBjYW4gYmUgY2hhbmdlZC5cbiAgICAgICAgZWRnZS5jb25uZWN0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgZWRnZVxuICAgICAgICB0aGlzLmJvZHkuZWRnZXNbaWRdID0gdGhpcy5jcmVhdGUoZGF0YSk7XG4gICAgICAgIGRhdGFDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YUNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfYWRqdXN0RWRnZXNGb3JIaWVyYXJjaGljYWxMYXlvdXRcIik7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFVcGRhdGVkXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZXhpc3RpbmcgZWRnZXMuIE5vbiBleGlzdGluZyBpZHMgd2lsbCBiZSBpZ25vcmVkXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gaWRzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2VtaXQ9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlbW92ZShpZHMsIGVtaXQgPSB0cnVlKSB7XG4gICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHJldHVybjsgLy8gZWFybHkgb3V0XG5cbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBmb3JFYWNoKGlkcywgKGlkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbaWRdO1xuICAgICAgaWYgKGVkZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlZGdlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGVtaXQpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyBFZGdlIEhhbmRsZXJcbiAgICovXG4gIHJlZnJlc2goKSB7XG4gICAgZm9yRWFjaCh0aGlzLmJvZHkuZWRnZXMsIChlZGdlLCBlZGdlSWQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXQoZWRnZUlkKTtcbiAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWRnZS5zZXRPcHRpb25zKGRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIHtFZGdlfVxuICAgKi9cbiAgY3JlYXRlKHByb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gbmV3IEVkZ2UoXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgdGhpcy5ib2R5LFxuICAgICAgdGhpcy5pbWFnZXMsXG4gICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICB0aGlzLmRlZmF1bHRPcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbm5lY3QgYWxsIGVkZ2VzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWNvbm5lY3RFZGdlcygpIHtcbiAgICBsZXQgaWQ7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG5cbiAgICBmb3IgKGlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBpZCkpIHtcbiAgICAgICAgbm9kZXNbaWRdLmVkZ2VzID0gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpZCBpbiBlZGdlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZGdlcywgaWQpKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tpZF07XG4gICAgICAgIGVkZ2UuZnJvbSA9IG51bGw7XG4gICAgICAgIGVkZ2UudG8gPSBudWxsO1xuICAgICAgICBlZGdlLmNvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFZGdlLmlkfSBlZGdlSWRcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0Q29ubmVjdGVkTm9kZXMoZWRnZUlkKSB7XG4gICAgY29uc3Qgbm9kZUxpc3QgPSBbXTtcbiAgICBpZiAodGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICAgICAgaWYgKGVkZ2UuZnJvbUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZUxpc3QucHVzaChlZGdlLmZyb21JZCk7XG4gICAgICB9XG4gICAgICBpZiAoZWRnZS50b0lkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9kZUxpc3QucHVzaChlZGdlLnRvSWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9kZUxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhlcmUgaXMgbm8gZGlyZWN0IHJlbGF0aW9uIGJldHdlZW4gdGhlIG5vZGVzIGFuZCB0aGUgZWRnZXMgRGF0YVNldCxcbiAgICogc28gdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIGNhbGwgdGhpcyBpcyBpbiB0aGUgaGFuZGxlciBmb3IgZXZlbnQgYF9kYXRhVXBkYXRlZGAuXG4gICAqL1xuICBfdXBkYXRlU3RhdGUoKSB7XG4gICAgdGhpcy5fYWRkTWlzc2luZ0VkZ2VzKCk7XG4gICAgdGhpcy5fcmVtb3ZlSW52YWxpZEVkZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2NhbiBmb3IgbWlzc2luZyBub2RlcyBhbmQgcmVtb3ZlIGNvcnJlc3BvbmRpbmcgZWRnZXMsIGlmIGFueS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVJbnZhbGlkRWRnZXMoKSB7XG4gICAgY29uc3QgZWRnZXNUb0RlbGV0ZSA9IFtdO1xuXG4gICAgZm9yRWFjaCh0aGlzLmJvZHkuZWRnZXMsIChlZGdlLCBpZCkgPT4ge1xuICAgICAgY29uc3QgdG9Ob2RlID0gdGhpcy5ib2R5Lm5vZGVzW2VkZ2UudG9JZF07XG4gICAgICBjb25zdCBmcm9tTm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tlZGdlLmZyb21JZF07XG5cbiAgICAgIC8vIFNraXAgY2x1c3RlcmluZyBlZGdlcyBoZXJlLCBsZXQgdGhlIENsdXN0ZXJpbmcgbW9kdWxlIGhhbmRsZSB0aG9zZVxuICAgICAgaWYgKFxuICAgICAgICAodG9Ob2RlICE9PSB1bmRlZmluZWQgJiYgdG9Ob2RlLmlzQ2x1c3RlciA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgKGZyb21Ob2RlICE9PSB1bmRlZmluZWQgJiYgZnJvbU5vZGUuaXNDbHVzdGVyID09PSB0cnVlKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRvTm9kZSA9PT0gdW5kZWZpbmVkIHx8IGZyb21Ob2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZWRnZXNUb0RlbGV0ZS5wdXNoKGlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVtb3ZlKGVkZ2VzVG9EZWxldGUsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhZGQgYWxsIGVkZ2VzIGZyb20gZGF0YXNldCB0aGF0IGFyZSBub3QgaW4gdGhlIGNhY2hlZCBzdGF0ZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FkZE1pc3NpbmdFZGdlcygpIHtcbiAgICBjb25zdCBlZGdlc0RhdGEgPSB0aGlzLmJvZHkuZGF0YS5lZGdlcztcbiAgICBpZiAoZWRnZXNEYXRhID09PSB1bmRlZmluZWQgfHwgZWRnZXNEYXRhID09PSBudWxsKSB7XG4gICAgICByZXR1cm47IC8vIE5vIGVkZ2VzIERhdGFTZXQgeWV0OyBjYW4gaGFwcGVuIG9uIHN0YXJ0dXBcbiAgICB9XG5cbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBhZGRJZHMgPSBbXTtcblxuICAgIGVkZ2VzRGF0YS5mb3JFYWNoKChlZGdlRGF0YSwgZWRnZUlkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUlkXTtcbiAgICAgIGlmIChlZGdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWRkSWRzLnB1c2goZWRnZUlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYWRkKGFkZElkcywgdHJ1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRWRnZXNIYW5kbGVyO1xuIiwgImltcG9ydCB7IEFsZWEgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogQmFybmVzIEh1dCBTb2x2ZXJcbiAqL1xuY2xhc3MgQmFybmVzSHV0U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5iYXJuZXNIdXRUcmVlO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLl9ybmcgPSBBbGVhKFwiQkFSTkVTIEhVVCBTT0xWRVJcIik7XG5cbiAgICAvLyBkZWJ1Zzogc2hvdyBncmlkXG4gICAgLy8gdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJhZnRlckRyYXdpbmdcIiwgKGN0eCkgPT4ge3RoaXMuX2RlYnVnKGN0eCwnI2ZmMDAwMCcpfSlcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnRoZXRhSW52ZXJzZWQgPSAxIC8gdGhpcy5vcHRpb25zLnRoZXRhO1xuXG4gICAgLy8gaWYgMSB0aGVuIG1pbiBkaXN0YW5jZSA9IDAuNSwgaWYgMC41IHRoZW4gbWluIGRpc3RhbmNlID0gMC41ICsgMC41Km5vZGUuc2hhcGUucmFkaXVzXG4gICAgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yID1cbiAgICAgIDEgLSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0aGlzLm9wdGlvbnMuYXZvaWRPdmVybGFwKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBmb3JjZXMgdGhlIG5vZGVzIGFwcGx5IG9uIGVhY2ggb3RoZXIgYmFzZWQgb24gYSBncmF2aXRhdGlvbmFsIG1vZGVsLlxuICAgKiBUaGUgQmFybmVzIEh1dCBtZXRob2QgaXMgdXNlZCB0byBzcGVlZCB1cCB0aGlzIE4tYm9keSBzaW11bGF0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmdyYXZpdGF0aW9uYWxDb25zdGFudCAhPT0gMCAmJlxuICAgICAgdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgICBjb25zdCBub2RlQ291bnQgPSBub2RlSW5kaWNlcy5sZW5ndGg7XG5cbiAgICAgIC8vIGNyZWF0ZSB0aGUgdHJlZVxuICAgICAgY29uc3QgYmFybmVzSHV0VHJlZSA9IHRoaXMuX2Zvcm1CYXJuZXNIdXRUcmVlKG5vZGVzLCBub2RlSW5kaWNlcyk7XG5cbiAgICAgIC8vIGZvciBkZWJ1Z2dpbmdcbiAgICAgIHRoaXMuYmFybmVzSHV0VHJlZSA9IGJhcm5lc0h1dFRyZWU7XG5cbiAgICAgIC8vIHBsYWNlIHRoZSBub2RlcyBvbmUgYnkgb25lIHJlY3Vyc2l2ZWx5XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVDb3VudDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tub2RlSW5kaWNlc1tpXV07XG4gICAgICAgIGlmIChub2RlLm9wdGlvbnMubWFzcyA+IDApIHtcbiAgICAgICAgICAvLyBzdGFydGluZyB3aXRoIHJvb3QgaXMgaXJyZWxldmFudCwgaXQgbmV2ZXIgcGFzc2VzIHRoZSBCYXJuZXNIdXRTb2x2ZXIgY29uZGl0aW9uXG4gICAgICAgICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb25zKGJhcm5lc0h1dFRyZWUucm9vdCwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRGb3JjZUNvbnRyaWJ1dGlvbnMocGFyZW50QnJhbmNoLCBub2RlKSB7XG4gICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLmNoaWxkcmVuLk5XLCBub2RlKTtcbiAgICB0aGlzLl9nZXRGb3JjZUNvbnRyaWJ1dGlvbihwYXJlbnRCcmFuY2guY2hpbGRyZW4uTkUsIG5vZGUpO1xuICAgIHRoaXMuX2dldEZvcmNlQ29udHJpYnV0aW9uKHBhcmVudEJyYW5jaC5jaGlsZHJlbi5TVywgbm9kZSk7XG4gICAgdGhpcy5fZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLmNoaWxkcmVuLlNFLCBub2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgYmFybmVzSHV0VHJlZS4gSXQgY2hlY2tzIHdoZW4gaXQgY2FuIGFwcHJveGltYXRlIGRpc3RhbnQgbm9kZXMgd2l0aCB0aGVpciBjZW50ZXIgb2YgbWFzcy5cbiAgICogSWYgYSByZWdpb24gY29udGFpbnMgYSBzaW5nbGUgbm9kZSwgd2UgY2hlY2sgaWYgaXQgaXMgbm90IGl0c2VsZiwgdGhlbiB3ZSBhcHBseSB0aGUgZm9yY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Rm9yY2VDb250cmlidXRpb24ocGFyZW50QnJhbmNoLCBub2RlKSB7XG4gICAgLy8gd2UgZ2V0IG5vIGZvcmNlIGNvbnRyaWJ1dGlvbiBmcm9tIGFuIGVtcHR5IHJlZ2lvblxuICAgIGlmIChwYXJlbnRCcmFuY2guY2hpbGRyZW5Db3VudCA+IDApIHtcbiAgICAgIC8vIGdldCB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2VudGVyIG9mIG1hc3MgdG8gdGhlIG5vZGUuXG4gICAgICBjb25zdCBkeCA9IHBhcmVudEJyYW5jaC5jZW50ZXJPZk1hc3MueCAtIG5vZGUueDtcbiAgICAgIGNvbnN0IGR5ID0gcGFyZW50QnJhbmNoLmNlbnRlck9mTWFzcy55IC0gbm9kZS55O1xuICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICAvLyBCYXJuZXNIdXRTb2x2ZXIgY29uZGl0aW9uXG4gICAgICAvLyBvcmlnaW5hbCBjb25kaXRpb24gOiBzL2QgPCB0aGV0YSA9IHBhc3NlZCAgPT09ICBkL3MgPiAxL3RoZXRhID0gcGFzc2VkXG4gICAgICAvLyBjYWxjU2l6ZSA9IDEvcyAtLT4gZCAqIDEvcyA+IDEvdGhldGEgPSBwYXNzZWRcbiAgICAgIGlmIChkaXN0YW5jZSAqIHBhcmVudEJyYW5jaC5jYWxjU2l6ZSA+IHRoaXMudGhldGFJbnZlcnNlZCkge1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgbm9kZSwgcGFyZW50QnJhbmNoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERpZCBub3QgcGFzcyB0aGUgY29uZGl0aW9uLCBnbyBpbnRvIGNoaWxkcmVuIGlmIGF2YWlsYWJsZVxuICAgICAgICBpZiAocGFyZW50QnJhbmNoLmNoaWxkcmVuQ291bnQgPT09IDQpIHtcbiAgICAgICAgICB0aGlzLl9nZXRGb3JjZUNvbnRyaWJ1dGlvbnMocGFyZW50QnJhbmNoLCBub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBwYXJlbnRCcmFuY2ggbXVzdCBoYXZlIG9ubHkgb25lIG5vZGUsIGlmIGl0IHdhcyBlbXB0eSB3ZSB3b3VsZG50IGJlIGhlcmVcbiAgICAgICAgICBpZiAocGFyZW50QnJhbmNoLmNoaWxkcmVuLmRhdGEuaWQgIT0gbm9kZS5pZCkge1xuICAgICAgICAgICAgLy8gaWYgaXQgaXMgbm90IHNlbGZcbiAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZvcmNlcyhkaXN0YW5jZSwgZHgsIGR5LCBub2RlLCBwYXJlbnRCcmFuY2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGZvcmNlcyBiYXNlZCBvbiB0aGUgZGlzdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxuICAgKiBAcGFyYW0ge251bWJlcn0gZHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR5XG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2FsY3VsYXRlRm9yY2VzKGRpc3RhbmNlLCBkeCwgZHksIG5vZGUsIHBhcmVudEJyYW5jaCkge1xuICAgIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuICAgICAgZGlzdGFuY2UgPSAwLjE7XG4gICAgICBkeCA9IGRpc3RhbmNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm92ZXJsYXBBdm9pZGFuY2VGYWN0b3IgPCAxICYmIG5vZGUuc2hhcGUucmFkaXVzKSB7XG4gICAgICBkaXN0YW5jZSA9IE1hdGgubWF4KFxuICAgICAgICAwLjEgKyB0aGlzLm92ZXJsYXBBdm9pZGFuY2VGYWN0b3IgKiBub2RlLnNoYXBlLnJhZGl1cyxcbiAgICAgICAgZGlzdGFuY2UgLSBub2RlLnNoYXBlLnJhZGl1c1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgZGl2aWRpbmcgYnkgdGhlIGRpc3RhbmNlIGN1YmVkIGluc3RlYWQgb2Ygc3F1YXJlZCBhbGxvd3MgdXMgdG8gZ2V0IHRoZSBmeCBhbmQgZnkgY29tcG9uZW50cyB3aXRob3V0IHNpbmVzIGFuZCBjb3NpbmVzXG4gICAgLy8gaXQgaXMgc2hvcnRoYW5kIGZvciBncmF2aXR5Zm9yY2Ugd2l0aCBkaXN0YW5jZSBzcXVhcmVkIGFuZCBmeCA9IGR4L2Rpc3RhbmNlICogZ3Jhdml0eUZvcmNlXG4gICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgICh0aGlzLm9wdGlvbnMuZ3Jhdml0YXRpb25hbENvbnN0YW50ICpcbiAgICAgICAgcGFyZW50QnJhbmNoLm1hc3MgKlxuICAgICAgICBub2RlLm9wdGlvbnMubWFzcykgL1xuICAgICAgTWF0aC5wb3coZGlzdGFuY2UsIDMpO1xuICAgIGNvbnN0IGZ4ID0gZHggKiBncmF2aXR5Rm9yY2U7XG4gICAgY29uc3QgZnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcblxuICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUuaWRdLnggKz0gZng7XG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZS5pZF0ueSArPSBmeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNvbnN0cnVjdHMgdGhlIGJhcm5lc0h1dCB0cmVlIHJlY3Vyc2l2ZWx5LiBJdCBjcmVhdGVzIHRoZSByb290LCBzcGxpdHMgaXQgYW5kIHN0YXJ0cyBwbGFjaW5nIHRoZSBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG5vZGVJbmRpY2VzXG4gICAqIEByZXR1cm5zIHt7cm9vdDoge2NlbnRlck9mTWFzczoge3g6IG51bWJlciwgeTogbnVtYmVyfSwgbWFzczogbnVtYmVyLCByYW5nZToge21pblg6IG51bWJlciwgbWF4WDogbnVtYmVyLCBtaW5ZOiBudW1iZXIsIG1heFk6IG51bWJlcn0sIHNpemU6IG51bWJlciwgY2FsY1NpemU6IG51bWJlciwgY2hpbGRyZW46IHtkYXRhOiBudWxsfSwgbWF4V2lkdGg6IG51bWJlciwgbGV2ZWw6IG51bWJlciwgY2hpbGRyZW5Db3VudDogbnVtYmVyfX19IEJhcm5lc0h1dFRyZWVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9mb3JtQmFybmVzSHV0VHJlZShub2Rlcywgbm9kZUluZGljZXMpIHtcbiAgICBsZXQgbm9kZTtcbiAgICBjb25zdCBub2RlQ291bnQgPSBub2RlSW5kaWNlcy5sZW5ndGg7XG5cbiAgICBsZXQgbWluWCA9IG5vZGVzW25vZGVJbmRpY2VzWzBdXS54O1xuICAgIGxldCBtaW5ZID0gbm9kZXNbbm9kZUluZGljZXNbMF1dLnk7XG4gICAgbGV0IG1heFggPSBub2Rlc1tub2RlSW5kaWNlc1swXV0ueDtcbiAgICBsZXQgbWF4WSA9IG5vZGVzW25vZGVJbmRpY2VzWzBdXS55O1xuXG4gICAgLy8gZ2V0IHRoZSByYW5nZSBvZiB0aGUgbm9kZXNcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IG5vZGVDb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgY29uc3QgeCA9IG5vZGUueDtcbiAgICAgIGNvbnN0IHkgPSBub2RlLnk7XG4gICAgICBpZiAobm9kZS5vcHRpb25zLm1hc3MgPiAwKSB7XG4gICAgICAgIGlmICh4IDwgbWluWCkge1xuICAgICAgICAgIG1pblggPSB4O1xuICAgICAgICB9XG4gICAgICAgIGlmICh4ID4gbWF4WCkge1xuICAgICAgICAgIG1heFggPSB4O1xuICAgICAgICB9XG4gICAgICAgIGlmICh5IDwgbWluWSkge1xuICAgICAgICAgIG1pblkgPSB5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh5ID4gbWF4WSkge1xuICAgICAgICAgIG1heFkgPSB5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1ha2UgdGhlIHJhbmdlIGEgc3F1YXJlXG4gICAgY29uc3Qgc2l6ZURpZmYgPSBNYXRoLmFicyhtYXhYIC0gbWluWCkgLSBNYXRoLmFicyhtYXhZIC0gbWluWSk7IC8vIGRpZmZlcmVuY2UgYmV0d2VlbiBYIGFuZCBZXG4gICAgaWYgKHNpemVEaWZmID4gMCkge1xuICAgICAgbWluWSAtPSAwLjUgKiBzaXplRGlmZjtcbiAgICAgIG1heFkgKz0gMC41ICogc2l6ZURpZmY7XG4gICAgfSAvLyB4U2l6ZSA+IHlTaXplXG4gICAgZWxzZSB7XG4gICAgICBtaW5YICs9IDAuNSAqIHNpemVEaWZmO1xuICAgICAgbWF4WCAtPSAwLjUgKiBzaXplRGlmZjtcbiAgICB9IC8vIHhTaXplIDwgeVNpemVcblxuICAgIGNvbnN0IG1pbmltdW1UcmVlU2l6ZSA9IDFlLTU7XG4gICAgY29uc3Qgcm9vdFNpemUgPSBNYXRoLm1heChtaW5pbXVtVHJlZVNpemUsIE1hdGguYWJzKG1heFggLSBtaW5YKSk7XG4gICAgY29uc3QgaGFsZlJvb3RTaXplID0gMC41ICogcm9vdFNpemU7XG4gICAgY29uc3QgY2VudGVyWCA9IDAuNSAqIChtaW5YICsgbWF4WCksXG4gICAgICBjZW50ZXJZID0gMC41ICogKG1pblkgKyBtYXhZKTtcblxuICAgIC8vIGNvbnN0cnVjdCB0aGUgYmFybmVzSHV0VHJlZVxuICAgIGNvbnN0IGJhcm5lc0h1dFRyZWUgPSB7XG4gICAgICByb290OiB7XG4gICAgICAgIGNlbnRlck9mTWFzczogeyB4OiAwLCB5OiAwIH0sXG4gICAgICAgIG1hc3M6IDAsXG4gICAgICAgIHJhbmdlOiB7XG4gICAgICAgICAgbWluWDogY2VudGVyWCAtIGhhbGZSb290U2l6ZSxcbiAgICAgICAgICBtYXhYOiBjZW50ZXJYICsgaGFsZlJvb3RTaXplLFxuICAgICAgICAgIG1pblk6IGNlbnRlclkgLSBoYWxmUm9vdFNpemUsXG4gICAgICAgICAgbWF4WTogY2VudGVyWSArIGhhbGZSb290U2l6ZSxcbiAgICAgICAgfSxcbiAgICAgICAgc2l6ZTogcm9vdFNpemUsXG4gICAgICAgIGNhbGNTaXplOiAxIC8gcm9vdFNpemUsXG4gICAgICAgIGNoaWxkcmVuOiB7IGRhdGE6IG51bGwgfSxcbiAgICAgICAgbWF4V2lkdGg6IDAsXG4gICAgICAgIGxldmVsOiAwLFxuICAgICAgICBjaGlsZHJlbkNvdW50OiA0LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuX3NwbGl0QnJhbmNoKGJhcm5lc0h1dFRyZWUucm9vdCk7XG5cbiAgICAvLyBwbGFjZSB0aGUgbm9kZXMgb25lIGJ5IG9uZSByZWN1cnNpdmVseVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUNvdW50OyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tub2RlSW5kaWNlc1tpXV07XG4gICAgICBpZiAobm9kZS5vcHRpb25zLm1hc3MgPiAwKSB7XG4gICAgICAgIHRoaXMuX3BsYWNlSW5UcmVlKGJhcm5lc0h1dFRyZWUucm9vdCwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFrZSBnbG9iYWxcbiAgICByZXR1cm4gYmFybmVzSHV0VHJlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIHVwZGF0ZXMgdGhlIG1hc3Mgb2YgYSBicmFuY2guIHRoaXMgaXMgaW5jcmVhc2VkIGJ5IGFkZGluZyBhIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlQnJhbmNoTWFzcyhwYXJlbnRCcmFuY2gsIG5vZGUpIHtcbiAgICBjb25zdCBjZW50ZXJPZk1hc3MgPSBwYXJlbnRCcmFuY2guY2VudGVyT2ZNYXNzO1xuICAgIGNvbnN0IHRvdGFsTWFzcyA9IHBhcmVudEJyYW5jaC5tYXNzICsgbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgY29uc3QgdG90YWxNYXNzSW52ID0gMSAvIHRvdGFsTWFzcztcblxuICAgIGNlbnRlck9mTWFzcy54ID1cbiAgICAgIGNlbnRlck9mTWFzcy54ICogcGFyZW50QnJhbmNoLm1hc3MgKyBub2RlLnggKiBub2RlLm9wdGlvbnMubWFzcztcbiAgICBjZW50ZXJPZk1hc3MueCAqPSB0b3RhbE1hc3NJbnY7XG5cbiAgICBjZW50ZXJPZk1hc3MueSA9XG4gICAgICBjZW50ZXJPZk1hc3MueSAqIHBhcmVudEJyYW5jaC5tYXNzICsgbm9kZS55ICogbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgY2VudGVyT2ZNYXNzLnkgKj0gdG90YWxNYXNzSW52O1xuXG4gICAgcGFyZW50QnJhbmNoLm1hc3MgPSB0b3RhbE1hc3M7XG4gICAgY29uc3QgYmlnZ2VzdFNpemUgPSBNYXRoLm1heChcbiAgICAgIE1hdGgubWF4KG5vZGUuaGVpZ2h0LCBub2RlLnJhZGl1cyksXG4gICAgICBub2RlLndpZHRoXG4gICAgKTtcbiAgICBwYXJlbnRCcmFuY2gubWF4V2lkdGggPVxuICAgICAgcGFyZW50QnJhbmNoLm1heFdpZHRoIDwgYmlnZ2VzdFNpemUgPyBiaWdnZXN0U2l6ZSA6IHBhcmVudEJyYW5jaC5tYXhXaWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBkZXRlcm1pbmUgaW4gd2hpY2ggYnJhbmNoIHRoZSBub2RlIHdpbGwgYmUgcGxhY2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNraXBNYXNzVXBkYXRlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGxhY2VJblRyZWUocGFyZW50QnJhbmNoLCBub2RlLCBza2lwTWFzc1VwZGF0ZSkge1xuICAgIGlmIChza2lwTWFzc1VwZGF0ZSAhPSB0cnVlIHx8IHNraXBNYXNzVXBkYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHVwZGF0ZSB0aGUgbWFzcyBvZiB0aGUgYnJhbmNoLlxuICAgICAgdGhpcy5fdXBkYXRlQnJhbmNoTWFzcyhwYXJlbnRCcmFuY2gsIG5vZGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gcGFyZW50QnJhbmNoLmNoaWxkcmVuLk5XLnJhbmdlO1xuICAgIGxldCByZWdpb247XG4gICAgaWYgKHJhbmdlLm1heFggPiBub2RlLngpIHtcbiAgICAgIC8vIGluIE5XIG9yIFNXXG4gICAgICBpZiAocmFuZ2UubWF4WSA+IG5vZGUueSkge1xuICAgICAgICByZWdpb24gPSBcIk5XXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWdpb24gPSBcIlNXXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluIE5FIG9yIFNFXG4gICAgICBpZiAocmFuZ2UubWF4WSA+IG5vZGUueSkge1xuICAgICAgICByZWdpb24gPSBcIk5FXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWdpb24gPSBcIlNFXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fcGxhY2VJblJlZ2lvbihwYXJlbnRCcmFuY2gsIG5vZGUsIHJlZ2lvbik7XG4gIH1cblxuICAvKipcbiAgICogYWN0dWFsbHkgcGxhY2UgdGhlIG5vZGUgaW4gYSByZWdpb24gKG9yIGJyYW5jaClcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudEJyYW5jaFxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHsnTlcnfCAnTkUnIHwgJ1NXJyB8ICdTRSd9IHJlZ2lvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BsYWNlSW5SZWdpb24ocGFyZW50QnJhbmNoLCBub2RlLCByZWdpb24pIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudEJyYW5jaC5jaGlsZHJlbltyZWdpb25dO1xuXG4gICAgc3dpdGNoIChjaGlsZHJlbi5jaGlsZHJlbkNvdW50KSB7XG4gICAgICBjYXNlIDA6IC8vIHBsYWNlIG5vZGUgaGVyZVxuICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5kYXRhID0gbm9kZTtcbiAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW5Db3VudCA9IDE7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUJyYW5jaE1hc3MoY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTogLy8gY29udmVydCBpbnRvIGNoaWxkcmVuXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSB0d28gbm9kZXMgZXhhY3RseSBvdmVybGFwcGluZyAob24gaW5pdCwgb24gb3BlbmluZyBvZiBjbHVzdGVyIGV0Yy4pXG4gICAgICAgIC8vIHdlIG1vdmUgb25lIG5vZGUgYSBsaXR0bGUgYml0IGFuZCB3ZSBkbyBub3QgcHV0IGl0IGluIHRoZSB0cmVlLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGRyZW4uY2hpbGRyZW4uZGF0YS54ID09PSBub2RlLnggJiZcbiAgICAgICAgICBjaGlsZHJlbi5jaGlsZHJlbi5kYXRhLnkgPT09IG5vZGUueVxuICAgICAgICApIHtcbiAgICAgICAgICBub2RlLnggKz0gdGhpcy5fcm5nKCk7XG4gICAgICAgICAgbm9kZS55ICs9IHRoaXMuX3JuZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3NwbGl0QnJhbmNoKGNoaWxkcmVuKTtcbiAgICAgICAgICB0aGlzLl9wbGFjZUluVHJlZShjaGlsZHJlbiwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6IC8vIHBsYWNlIGluIGJyYW5jaFxuICAgICAgICB0aGlzLl9wbGFjZUluVHJlZShjaGlsZHJlbiwgbm9kZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGZ1bmN0aW9uIHNwbGl0cyBhIGJyYW5jaCBpbnRvIDQgc3ViIGJyYW5jaGVzLiBJZiB0aGUgYnJhbmNoIGNvbnRhaW5lZCBhIG5vZGUsIHdlIHBsYWNlIGl0IGluIHRoZSBzdWJicmFuY2hcbiAgICogYWZ0ZXIgdGhlIHNwbGl0IGlzIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50QnJhbmNoXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3BsaXRCcmFuY2gocGFyZW50QnJhbmNoKSB7XG4gICAgLy8gaWYgdGhlIGJyYW5jaCBpcyBzaGFkZWQgd2l0aCBhIG5vZGUsIHJlcGxhY2UgdGhlIG5vZGUgaW4gdGhlIG5ldyBzdWJzZXQuXG4gICAgbGV0IGNvbnRhaW5lZE5vZGUgPSBudWxsO1xuICAgIGlmIChwYXJlbnRCcmFuY2guY2hpbGRyZW5Db3VudCA9PT0gMSkge1xuICAgICAgY29udGFpbmVkTm9kZSA9IHBhcmVudEJyYW5jaC5jaGlsZHJlbi5kYXRhO1xuICAgICAgcGFyZW50QnJhbmNoLm1hc3MgPSAwO1xuICAgICAgcGFyZW50QnJhbmNoLmNlbnRlck9mTWFzcy54ID0gMDtcbiAgICAgIHBhcmVudEJyYW5jaC5jZW50ZXJPZk1hc3MueSA9IDA7XG4gICAgfVxuICAgIHBhcmVudEJyYW5jaC5jaGlsZHJlbkNvdW50ID0gNDtcbiAgICBwYXJlbnRCcmFuY2guY2hpbGRyZW4uZGF0YSA9IG51bGw7XG4gICAgdGhpcy5faW5zZXJ0UmVnaW9uKHBhcmVudEJyYW5jaCwgXCJOV1wiKTtcbiAgICB0aGlzLl9pbnNlcnRSZWdpb24ocGFyZW50QnJhbmNoLCBcIk5FXCIpO1xuICAgIHRoaXMuX2luc2VydFJlZ2lvbihwYXJlbnRCcmFuY2gsIFwiU1dcIik7XG4gICAgdGhpcy5faW5zZXJ0UmVnaW9uKHBhcmVudEJyYW5jaCwgXCJTRVwiKTtcblxuICAgIGlmIChjb250YWluZWROb2RlICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3BsYWNlSW5UcmVlKHBhcmVudEJyYW5jaCwgY29udGFpbmVkTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gc3ViZGl2aWRlcyB0aGUgcmVnaW9uIGludG8gZm91ciBuZXcgc2VnbWVudHMuXG4gICAqIFNwZWNpZmljYWxseSwgdGhpcyBpbnNlcnRzIGEgc2luZ2xlIG5ldyBzZWdtZW50LlxuICAgKiBJdCBmaWxscyB0aGUgY2hpbGRyZW4gc2VjdGlvbiBvZiB0aGUgcGFyZW50QnJhbmNoXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHBhcmFtIHsnTlcnfCAnTkUnIHwgJ1NXJyB8ICdTRSd9IHJlZ2lvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luc2VydFJlZ2lvbihwYXJlbnRCcmFuY2gsIHJlZ2lvbikge1xuICAgIGxldCBtaW5YLCBtYXhYLCBtaW5ZLCBtYXhZO1xuICAgIGNvbnN0IGNoaWxkU2l6ZSA9IDAuNSAqIHBhcmVudEJyYW5jaC5zaXplO1xuICAgIHN3aXRjaCAocmVnaW9uKSB7XG4gICAgICBjYXNlIFwiTldcIjpcbiAgICAgICAgbWluWCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YO1xuICAgICAgICBtYXhYID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblggKyBjaGlsZFNpemU7XG4gICAgICAgIG1pblkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWTtcbiAgICAgICAgbWF4WSA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5ZICsgY2hpbGRTaXplO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJORVwiOlxuICAgICAgICBtaW5YID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblggKyBjaGlsZFNpemU7XG4gICAgICAgIG1heFggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWF4WDtcbiAgICAgICAgbWluWSA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5ZO1xuICAgICAgICBtYXhZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblkgKyBjaGlsZFNpemU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlNXXCI6XG4gICAgICAgIG1pblggPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWDtcbiAgICAgICAgbWF4WCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YICsgY2hpbGRTaXplO1xuICAgICAgICBtaW5ZID0gcGFyZW50QnJhbmNoLnJhbmdlLm1pblkgKyBjaGlsZFNpemU7XG4gICAgICAgIG1heFkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWF4WTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiU0VcIjpcbiAgICAgICAgbWluWCA9IHBhcmVudEJyYW5jaC5yYW5nZS5taW5YICsgY2hpbGRTaXplO1xuICAgICAgICBtYXhYID0gcGFyZW50QnJhbmNoLnJhbmdlLm1heFg7XG4gICAgICAgIG1pblkgPSBwYXJlbnRCcmFuY2gucmFuZ2UubWluWSArIGNoaWxkU2l6ZTtcbiAgICAgICAgbWF4WSA9IHBhcmVudEJyYW5jaC5yYW5nZS5tYXhZO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBwYXJlbnRCcmFuY2guY2hpbGRyZW5bcmVnaW9uXSA9IHtcbiAgICAgIGNlbnRlck9mTWFzczogeyB4OiAwLCB5OiAwIH0sXG4gICAgICBtYXNzOiAwLFxuICAgICAgcmFuZ2U6IHsgbWluWDogbWluWCwgbWF4WDogbWF4WCwgbWluWTogbWluWSwgbWF4WTogbWF4WSB9LFxuICAgICAgc2l6ZTogMC41ICogcGFyZW50QnJhbmNoLnNpemUsXG4gICAgICBjYWxjU2l6ZTogMiAqIHBhcmVudEJyYW5jaC5jYWxjU2l6ZSxcbiAgICAgIGNoaWxkcmVuOiB7IGRhdGE6IG51bGwgfSxcbiAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgbGV2ZWw6IHBhcmVudEJyYW5jaC5sZXZlbCArIDEsXG4gICAgICBjaGlsZHJlbkNvdW50OiAwLFxuICAgIH07XG4gIH1cblxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgREVCVUdHSU5HIEJFTE9XICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZWQsIGl0IGRyYXdzIHRoZSB0cmVlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RlYnVnKGN0eCwgY29sb3IpIHtcbiAgICBpZiAodGhpcy5iYXJuZXNIdXRUcmVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGN0eC5saW5lV2lkdGggPSAxO1xuXG4gICAgICB0aGlzLl9kcmF3QnJhbmNoKHRoaXMuYmFybmVzSHV0VHJlZS5yb290LCBjdHgsIGNvbG9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBJdCBkcmF3cyB0aGUgYnJhbmNoZXMgcmVjdXJzaXZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBicmFuY2hcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kcmF3QnJhbmNoKGJyYW5jaCwgY3R4LCBjb2xvcikge1xuICAgIGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IFwiI0ZGMDAwMFwiO1xuICAgIH1cblxuICAgIGlmIChicmFuY2guY2hpbGRyZW5Db3VudCA9PT0gNCkge1xuICAgICAgdGhpcy5fZHJhd0JyYW5jaChicmFuY2guY2hpbGRyZW4uTlcsIGN0eCk7XG4gICAgICB0aGlzLl9kcmF3QnJhbmNoKGJyYW5jaC5jaGlsZHJlbi5ORSwgY3R4KTtcbiAgICAgIHRoaXMuX2RyYXdCcmFuY2goYnJhbmNoLmNoaWxkcmVuLlNFLCBjdHgpO1xuICAgICAgdGhpcy5fZHJhd0JyYW5jaChicmFuY2guY2hpbGRyZW4uU1csIGN0eCk7XG4gICAgfVxuICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5taW5YLCBicmFuY2gucmFuZ2UubWluWSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWF4WCwgYnJhbmNoLnJhbmdlLm1pblkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5tYXhYLCBicmFuY2gucmFuZ2UubWluWSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWF4WCwgYnJhbmNoLnJhbmdlLm1heFkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5tYXhYLCBicmFuY2gucmFuZ2UubWF4WSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWluWCwgYnJhbmNoLnJhbmdlLm1heFkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgubW92ZVRvKGJyYW5jaC5yYW5nZS5taW5YLCBicmFuY2gucmFuZ2UubWF4WSk7XG4gICAgY3R4LmxpbmVUbyhicmFuY2gucmFuZ2UubWluWCwgYnJhbmNoLnJhbmdlLm1pblkpO1xuICAgIGN0eC5zdHJva2UoKTtcblxuICAgIC8qXG4gICAgIGlmIChicmFuY2gubWFzcyA+IDApIHtcbiAgICAgY3R4LmNpcmNsZShicmFuY2guY2VudGVyT2ZNYXNzLngsIGJyYW5jaC5jZW50ZXJPZk1hc3MueSwgMypicmFuY2gubWFzcyk7XG4gICAgIGN0eC5zdHJva2UoKTtcbiAgICAgfVxuICAgICAqL1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhcm5lc0h1dFNvbHZlcjtcbiIsICJpbXBvcnQgeyBBbGVhIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFJlcHVsc2lvbiBTb2x2ZXJcbiAqL1xuY2xhc3MgUmVwdWxzaW9uU29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5fcm5nID0gQWxlYShcIlJFUFVMU0lPTiBTT0xWRVJcIik7XG5cbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGh5c2ljc0JvZHkgPSBwaHlzaWNzQm9keTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgdGhlIG5vZGVzIGFwcGx5IG9uIGVhY2ggb3RoZXIgYmFzZWQgb24gYSByZXB1bHNpb24gZmllbGQuXG4gICAqIFRoaXMgZmllbGQgaXMgbGluZWFybHkgYXBwcm94aW1hdGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgbGV0IGR4LCBkeSwgZGlzdGFuY2UsIGZ4LCBmeSwgcmVwdWxzaW5nRm9yY2UsIG5vZGUxLCBub2RlMjtcblxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICAvLyByZXB1bHNpbmcgZm9yY2VzIGJldHdlZW4gbm9kZXNcbiAgICBjb25zdCBub2RlRGlzdGFuY2UgPSB0aGlzLm9wdGlvbnMubm9kZURpc3RhbmNlO1xuXG4gICAgLy8gYXBwcm94aW1hdGlvbiBjb25zdGFudHNcbiAgICBjb25zdCBhID0gLTIgLyAzIC8gbm9kZURpc3RhbmNlO1xuICAgIGNvbnN0IGIgPSA0IC8gMztcblxuICAgIC8vIHdlIGxvb3AgZnJvbSBpIG92ZXIgYWxsIGJ1dCB0aGUgbGFzdCBlbnRyZWUgaW4gdGhlIGFycmF5XG4gICAgLy8gaiBsb29wcyBmcm9tIGkrMSB0byB0aGUgbGFzdC4gVGhpcyB3YXkgd2UgZG8gbm90IGRvdWJsZSBjb3VudCBhbnkgb2YgdGhlIGluZGljZXMsIG5vciBpID09PSBqXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIG5vZGUxID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgbm9kZUluZGljZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbm9kZTIgPSBub2Rlc1tub2RlSW5kaWNlc1tqXV07XG5cbiAgICAgICAgZHggPSBub2RlMi54IC0gbm9kZTEueDtcbiAgICAgICAgZHkgPSBub2RlMi55IC0gbm9kZTEueTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICAgIC8vIHNhbWUgY29uZGl0aW9uIGFzIEJhcm5lc0h1dFNvbHZlciwgbWFraW5nIHN1cmUgbm9kZXMgYXJlIG5ldmVyIDEwMCUgb3ZlcmxhcHBpbmcuXG4gICAgICAgIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICAgIGRpc3RhbmNlID0gMC4xICogdGhpcy5fcm5nKCk7XG4gICAgICAgICAgZHggPSBkaXN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXN0YW5jZSA8IDIgKiBub2RlRGlzdGFuY2UpIHtcbiAgICAgICAgICBpZiAoZGlzdGFuY2UgPCAwLjUgKiBub2RlRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gMS4wO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXB1bHNpbmdGb3JjZSA9IGEgKiBkaXN0YW5jZSArIGI7IC8vIGxpbmVhciBhcHByb3ggb2YgIDEgLyAoMSArIE1hdGguZXhwKChkaXN0YW5jZSAvIG5vZGVEaXN0YW5jZSAtIDEpICogc3RlZXBuZXNzKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVwdWxzaW5nRm9yY2UgPSByZXB1bHNpbmdGb3JjZSAvIGRpc3RhbmNlO1xuXG4gICAgICAgICAgZnggPSBkeCAqIHJlcHVsc2luZ0ZvcmNlO1xuICAgICAgICAgIGZ5ID0gZHkgKiByZXB1bHNpbmdGb3JjZTtcblxuICAgICAgICAgIGZvcmNlc1tub2RlMS5pZF0ueCAtPSBmeDtcbiAgICAgICAgICBmb3JjZXNbbm9kZTEuaWRdLnkgLT0gZnk7XG4gICAgICAgICAgZm9yY2VzW25vZGUyLmlkXS54ICs9IGZ4O1xuICAgICAgICAgIGZvcmNlc1tub2RlMi5pZF0ueSArPSBmeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXB1bHNpb25Tb2x2ZXI7XG4iLCAiLyoqXG4gKiBIaWVyYXJjaGljYWwgUmVwdWxzaW9uIFNvbHZlclxuICovXG5jbGFzcyBIaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHt7cGh5c2ljc05vZGVJbmRpY2VzOiBBcnJheSwgcGh5c2ljc0VkZ2VJbmRpY2VzOiBBcnJheSwgZm9yY2VzOiB7fSwgdmVsb2NpdGllczoge319fSBwaHlzaWNzQm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMucGh5c2ljc0JvZHkgPSBwaHlzaWNzQm9keTtcbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oMSwgdGhpcy5vcHRpb25zLmF2b2lkT3ZlcmxhcCB8fCAwKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgdGhlIG5vZGVzIGFwcGx5IG9uIGVhY2ggb3RoZXIgYmFzZWQgb24gYSByZXB1bHNpb24gZmllbGQuXG4gICAqIFRoaXMgZmllbGQgaXMgbGluZWFybHkgYXBwcm94aW1hdGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3Qgbm9kZUluZGljZXMgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcztcbiAgICBjb25zdCBmb3JjZXMgPSB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlcztcblxuICAgIC8vIHJlcHVsc2luZyBmb3JjZXMgYmV0d2VlbiBub2Rlc1xuICAgIGNvbnN0IG5vZGVEaXN0YW5jZSA9IHRoaXMub3B0aW9ucy5ub2RlRGlzdGFuY2U7XG5cbiAgICAvLyB3ZSBsb29wIGZyb20gaSBvdmVyIGFsbCBidXQgdGhlIGxhc3QgZW50cmVlIGluIHRoZSBhcnJheVxuICAgIC8vIGogbG9vcHMgZnJvbSBpKzEgdG8gdGhlIGxhc3QuIFRoaXMgd2F5IHdlIGRvIG5vdCBkb3VibGUgY291bnQgYW55IG9mIHRoZSBpbmRpY2VzLCBub3IgaSA9PT0galxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlMSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IG5vZGUyID0gbm9kZXNbbm9kZUluZGljZXNbal1dO1xuXG4gICAgICAgIC8vIG5vZGVzIG9ubHkgYWZmZWN0IG5vZGVzIG9uIHRoZWlyIGxldmVsXG4gICAgICAgIGlmIChub2RlMS5sZXZlbCA9PT0gbm9kZTIubGV2ZWwpIHtcbiAgICAgICAgICBjb25zdCB0aGVzZU5vZGVzRGlzdGFuY2UgPVxuICAgICAgICAgICAgbm9kZURpc3RhbmNlICtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxhcEF2b2lkYW5jZUZhY3RvciAqXG4gICAgICAgICAgICAgICgobm9kZTEuc2hhcGUucmFkaXVzIHx8IDApIC8gMiArIChub2RlMi5zaGFwZS5yYWRpdXMgfHwgMCkgLyAyKTtcblxuICAgICAgICAgIGNvbnN0IGR4ID0gbm9kZTIueCAtIG5vZGUxLng7XG4gICAgICAgICAgY29uc3QgZHkgPSBub2RlMi55IC0gbm9kZTEueTtcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICAgICAgICBjb25zdCBzdGVlcG5lc3MgPSAwLjA1O1xuICAgICAgICAgIGxldCByZXB1bHNpbmdGb3JjZTtcbiAgICAgICAgICBpZiAoZGlzdGFuY2UgPCB0aGVzZU5vZGVzRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID1cbiAgICAgICAgICAgICAgLU1hdGgucG93KHN0ZWVwbmVzcyAqIGRpc3RhbmNlLCAyKSArXG4gICAgICAgICAgICAgIE1hdGgucG93KHN0ZWVwbmVzcyAqIHRoZXNlTm9kZXNEaXN0YW5jZSwgMik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbm9ybWFsaXplIGZvcmNlIHdpdGhcbiAgICAgICAgICBpZiAoZGlzdGFuY2UgIT09IDApIHtcbiAgICAgICAgICAgIHJlcHVsc2luZ0ZvcmNlID0gcmVwdWxzaW5nRm9yY2UgLyBkaXN0YW5jZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZnggPSBkeCAqIHJlcHVsc2luZ0ZvcmNlO1xuICAgICAgICAgIGNvbnN0IGZ5ID0gZHkgKiByZXB1bHNpbmdGb3JjZTtcblxuICAgICAgICAgIGZvcmNlc1tub2RlMS5pZF0ueCAtPSBmeDtcbiAgICAgICAgICBmb3JjZXNbbm9kZTEuaWRdLnkgLT0gZnk7XG4gICAgICAgICAgZm9yY2VzW25vZGUyLmlkXS54ICs9IGZ4O1xuICAgICAgICAgIGZvcmNlc1tub2RlMi5pZF0ueSArPSBmeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXI7XG4iLCAiLyoqXG4gKiBTcHJpbmcgU29sdmVyXG4gKi9cbmNsYXNzIFNwcmluZ1NvbHZlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge3twaHlzaWNzTm9kZUluZGljZXM6IEFycmF5LCBwaHlzaWNzRWRnZUluZGljZXM6IEFycmF5LCBmb3JjZXM6IHt9LCB2ZWxvY2l0aWVzOiB7fX19IHBoeXNpY3NCb2R5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucykge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHBoeXNpY3NCb2R5O1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHNwcmluZ2ZvcmNlcyBvbiB0aGUgbm9kZXMsIGFjY291bnRpbmcgZm9yIHRoZSBzdXBwb3J0IG5vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc29sdmUoKSB7XG4gICAgbGV0IGVkZ2VMZW5ndGgsIGVkZ2U7XG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcztcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBsZXQgbm9kZTEsIG5vZGUyLCBub2RlMztcblxuICAgIC8vIGZvcmNlcyBjYXVzZWQgYnkgdGhlIGVkZ2VzLCBtb2RlbGxlZCBhcyBzcHJpbmdzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZWRnZSA9IGVkZ2VzW2VkZ2VJbmRpY2VzW2ldXTtcbiAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCA9PT0gdHJ1ZSAmJiBlZGdlLnRvSWQgIT09IGVkZ2UuZnJvbUlkKSB7XG4gICAgICAgIC8vIG9ubHkgY2FsY3VsYXRlIGZvcmNlcyBpZiBub2RlcyBhcmUgaW4gdGhlIHNhbWUgc2VjdG9yXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChlZGdlLmVkZ2VUeXBlLnZpYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlZGdlTGVuZ3RoID1cbiAgICAgICAgICAgICAgZWRnZS5vcHRpb25zLmxlbmd0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLm9wdGlvbnMuc3ByaW5nTGVuZ3RoXG4gICAgICAgICAgICAgICAgOiBlZGdlLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgbm9kZTEgPSBlZGdlLnRvO1xuICAgICAgICAgICAgbm9kZTIgPSBlZGdlLmVkZ2VUeXBlLnZpYTtcbiAgICAgICAgICAgIG5vZGUzID0gZWRnZS5mcm9tO1xuXG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVTcHJpbmdGb3JjZShub2RlMSwgbm9kZTIsIDAuNSAqIGVkZ2VMZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlU3ByaW5nRm9yY2Uobm9kZTIsIG5vZGUzLCAwLjUgKiBlZGdlTGVuZ3RoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhlICogMS41IGlzIGhlcmUgc28gdGhlIGVkZ2UgbG9va3MgYXMgbGFyZ2UgYXMgYSBzbW9vdGggZWRnZS4gSXQgZG9lcyBub3QgaW5pdGlhbGx5IGJlY2F1c2UgdGhlIHNtb290aCBlZGdlcyB1c2VcbiAgICAgICAgICAgIC8vIHRoZSBzdXBwb3J0IG5vZGVzIHdoaWNoIGV4ZXJ0IGEgcmVwdWxzaXZlIGZvcmNlIG9uIHRoZSB0byBhbmQgZnJvbSBub2RlcywgbWFraW5nIHRoZSBlZGdlIGFwcGVhciBsYXJnZXIuXG4gICAgICAgICAgICBlZGdlTGVuZ3RoID1cbiAgICAgICAgICAgICAgZWRnZS5vcHRpb25zLmxlbmd0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLm9wdGlvbnMuc3ByaW5nTGVuZ3RoICogMS41XG4gICAgICAgICAgICAgICAgOiBlZGdlLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlU3ByaW5nRm9yY2UoZWRnZS5mcm9tLCBlZGdlLnRvLCBlZGdlTGVuZ3RoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgY29kZSBhY3R1YWxseSBwZXJmb3JtaW5nIHRoZSBjYWxjdWxhdGlvbiBmb3IgdGhlIGZ1bmN0aW9uIGFib3ZlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUxXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZTJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VMZW5ndGhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVTcHJpbmdGb3JjZShub2RlMSwgbm9kZTIsIGVkZ2VMZW5ndGgpIHtcbiAgICBjb25zdCBkeCA9IG5vZGUxLnggLSBub2RlMi54O1xuICAgIGNvbnN0IGR5ID0gbm9kZTEueSAtIG5vZGUyLnk7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLm1heChNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpLCAwLjAxKTtcblxuICAgIC8vIHRoZSAxL2Rpc3RhbmNlIGlzIHNvIHRoZSBmeCBhbmQgZnkgY2FuIGJlIGNhbGN1bGF0ZWQgd2l0aG91dCBzaW5lIG9yIGNvc2luZS5cbiAgICBjb25zdCBzcHJpbmdGb3JjZSA9XG4gICAgICAodGhpcy5vcHRpb25zLnNwcmluZ0NvbnN0YW50ICogKGVkZ2VMZW5ndGggLSBkaXN0YW5jZSkpIC8gZGlzdGFuY2U7XG5cbiAgICBjb25zdCBmeCA9IGR4ICogc3ByaW5nRm9yY2U7XG4gICAgY29uc3QgZnkgPSBkeSAqIHNwcmluZ0ZvcmNlO1xuXG4gICAgLy8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG9uZSBub2RlIGlzIG5vdCBwYXJ0IG9mIHRoZSBwaHlzY2lzXG4gICAgaWYgKHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUxLmlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMS5pZF0ueCArPSBmeDtcbiAgICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGUxLmlkXS55ICs9IGZ5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMi5pZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZTIuaWRdLnggLT0gZng7XG4gICAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlMi5pZF0ueSAtPSBmeTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3ByaW5nU29sdmVyO1xuIiwgIi8qKlxuICogSGllcmFyY2hpY2FsIFNwcmluZyBTb2x2ZXJcbiAqL1xuY2xhc3MgSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgc3ByaW5nZm9yY2VzIG9uIHRoZSBub2RlcywgYWNjb3VudGluZyBmb3IgdGhlIHN1cHBvcnQgbm9kZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzb2x2ZSgpIHtcbiAgICBsZXQgZWRnZUxlbmd0aCwgZWRnZTtcbiAgICBsZXQgZHgsIGR5LCBmeCwgZnksIHNwcmluZ0ZvcmNlLCBkaXN0YW5jZTtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBmYWN0b3IgPSAwLjU7XG5cbiAgICBjb25zdCBlZGdlSW5kaWNlcyA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc0VkZ2VJbmRpY2VzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICAvLyBpbml0aWFsaXplIHRoZSBzcHJpbmcgZm9yY2UgY291bnRlcnNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z4ID0gMDtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z5ID0gMDtcbiAgICB9XG5cbiAgICAvLyBmb3JjZXMgY2F1c2VkIGJ5IHRoZSBlZGdlcywgbW9kZWxsZWQgYXMgc3ByaW5nc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgZWRnZUxlbmd0aCA9XG4gICAgICAgICAgZWRnZS5vcHRpb25zLmxlbmd0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMub3B0aW9ucy5zcHJpbmdMZW5ndGhcbiAgICAgICAgICAgIDogZWRnZS5vcHRpb25zLmxlbmd0aDtcblxuICAgICAgICBkeCA9IGVkZ2UuZnJvbS54IC0gZWRnZS50by54O1xuICAgICAgICBkeSA9IGVkZ2UuZnJvbS55IC0gZWRnZS50by55O1xuICAgICAgICBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgICAgIGRpc3RhbmNlID0gZGlzdGFuY2UgPT09IDAgPyAwLjAxIDogZGlzdGFuY2U7XG5cbiAgICAgICAgLy8gdGhlIDEvZGlzdGFuY2UgaXMgc28gdGhlIGZ4IGFuZCBmeSBjYW4gYmUgY2FsY3VsYXRlZCB3aXRob3V0IHNpbmUgb3IgY29zaW5lLlxuICAgICAgICBzcHJpbmdGb3JjZSA9XG4gICAgICAgICAgKHRoaXMub3B0aW9ucy5zcHJpbmdDb25zdGFudCAqIChlZGdlTGVuZ3RoIC0gZGlzdGFuY2UpKSAvIGRpc3RhbmNlO1xuXG4gICAgICAgIGZ4ID0gZHggKiBzcHJpbmdGb3JjZTtcbiAgICAgICAgZnkgPSBkeSAqIHNwcmluZ0ZvcmNlO1xuXG4gICAgICAgIGlmIChlZGdlLnRvLmxldmVsICE9IGVkZ2UuZnJvbS5sZXZlbCkge1xuICAgICAgICAgIGlmIChmb3JjZXNbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS50b0lkXS5zcHJpbmdGeCAtPSBmeDtcbiAgICAgICAgICAgIGZvcmNlc1tlZGdlLnRvSWRdLnNwcmluZ0Z5IC09IGZ5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9yY2VzW2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS5mcm9tSWRdLnNwcmluZ0Z4ICs9IGZ4O1xuICAgICAgICAgICAgZm9yY2VzW2VkZ2UuZnJvbUlkXS5zcHJpbmdGeSArPSBmeTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZvcmNlc1tlZGdlLnRvSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvcmNlc1tlZGdlLnRvSWRdLnggLT0gZmFjdG9yICogZng7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS50b0lkXS55IC09IGZhY3RvciAqIGZ5O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9yY2VzW2VkZ2UuZnJvbUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS5mcm9tSWRdLnggKz0gZmFjdG9yICogZng7XG4gICAgICAgICAgICBmb3JjZXNbZWRnZS5mcm9tSWRdLnkgKz0gZmFjdG9yICogZnk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm9ybWFsaXplIHNwcmluZyBmb3JjZXNcbiAgICBzcHJpbmdGb3JjZSA9IDE7XG4gICAgbGV0IHNwcmluZ0Z4LCBzcHJpbmdGeTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIHNwcmluZ0Z4ID0gTWF0aC5taW4oXG4gICAgICAgIHNwcmluZ0ZvcmNlLFxuICAgICAgICBNYXRoLm1heCgtc3ByaW5nRm9yY2UsIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z4KVxuICAgICAgKTtcbiAgICAgIHNwcmluZ0Z5ID0gTWF0aC5taW4oXG4gICAgICAgIHNwcmluZ0ZvcmNlLFxuICAgICAgICBNYXRoLm1heCgtc3ByaW5nRm9yY2UsIGZvcmNlc1tub2RlSWRdLnNwcmluZ0Z5KVxuICAgICAgKTtcblxuICAgICAgZm9yY2VzW25vZGVJZF0ueCArPSBzcHJpbmdGeDtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnkgKz0gc3ByaW5nRnk7XG4gICAgfVxuXG4gICAgLy8gcmV0YWluIGVuZXJneSBiYWxhbmNlXG4gICAgbGV0IHRvdGFsRnggPSAwO1xuICAgIGxldCB0b3RhbEZ5ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIHRvdGFsRnggKz0gZm9yY2VzW25vZGVJZF0ueDtcbiAgICAgIHRvdGFsRnkgKz0gZm9yY2VzW25vZGVJZF0ueTtcbiAgICB9XG4gICAgY29uc3QgY29ycmVjdGlvbkZ4ID0gdG90YWxGeCAvIG5vZGVJbmRpY2VzLmxlbmd0aDtcbiAgICBjb25zdCBjb3JyZWN0aW9uRnkgPSB0b3RhbEZ5IC8gbm9kZUluZGljZXMubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gbm9kZUluZGljZXNbaV07XG4gICAgICBmb3JjZXNbbm9kZUlkXS54IC09IGNvcnJlY3Rpb25GeDtcbiAgICAgIGZvcmNlc1tub2RlSWRdLnkgLT0gY29ycmVjdGlvbkZ5O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXI7XG4iLCAiLyoqXG4gKiBDZW50cmFsIEdyYXZpdHkgU29sdmVyXG4gKi9cbmNsYXNzIENlbnRyYWxHcmF2aXR5U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5ID0gcGh5c2ljc0JvZHk7XG4gICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgZm9yY2VzIGZvciBlYWNoIG5vZGVcbiAgICovXG4gIHNvbHZlKCkge1xuICAgIGxldCBkeCwgZHksIGRpc3RhbmNlLCBub2RlO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgY29uc3QgZm9yY2VzID0gdGhpcy5waHlzaWNzQm9keS5mb3JjZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBub2RlSW5kaWNlc1tpXTtcbiAgICAgIG5vZGUgPSBub2Rlc1tub2RlSWRdO1xuICAgICAgZHggPSAtbm9kZS54O1xuICAgICAgZHkgPSAtbm9kZS55O1xuICAgICAgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuXG4gICAgICB0aGlzLl9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgZm9yY2VzLCBub2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgYmFzZWQgb24gdGhlIGRpc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IGR4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeVxuICAgKiBAcGFyYW0ge09iamVjdDxOb2RlLmlkLCB2aXMuTm9kZT59IGZvcmNlc1xuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgZm9yY2VzLCBub2RlKSB7XG4gICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgIGRpc3RhbmNlID09PSAwID8gMCA6IHRoaXMub3B0aW9ucy5jZW50cmFsR3Jhdml0eSAvIGRpc3RhbmNlO1xuICAgIGZvcmNlc1tub2RlLmlkXS54ID0gZHggKiBncmF2aXR5Rm9yY2U7XG4gICAgZm9yY2VzW25vZGUuaWRdLnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDZW50cmFsR3Jhdml0eVNvbHZlcjtcbiIsICJpbXBvcnQgQmFybmVzSHV0U29sdmVyIGZyb20gXCIuL0Jhcm5lc0h1dFNvbHZlclwiO1xuaW1wb3J0IHsgQWxlYSB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuLyoqXG4gKiBAYXVnbWVudHMgQmFybmVzSHV0U29sdmVyXG4gKi9cbmNsYXNzIEZvcmNlQXRsYXMyQmFzZWRSZXB1bHNpb25Tb2x2ZXIgZXh0ZW5kcyBCYXJuZXNIdXRTb2x2ZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHt7cGh5c2ljc05vZGVJbmRpY2VzOiBBcnJheSwgcGh5c2ljc0VkZ2VJbmRpY2VzOiBBcnJheSwgZm9yY2VzOiB7fSwgdmVsb2NpdGllczoge319fSBwaHlzaWNzQm9keVxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpIHtcbiAgICBzdXBlcihib2R5LCBwaHlzaWNzQm9keSwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9ybmcgPSBBbGVhKFwiRk9SQ0UgQVRMQVMgMiBCQVNFRCBSRVBVTFNJT04gU09MVkVSXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIGJhc2VkIG9uIHRoZSBkaXN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeFxuICAgKiBAcGFyYW0ge251bWJlcn0gZHlcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnRCcmFuY2hcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgbm9kZSwgcGFyZW50QnJhbmNoKSB7XG4gICAgaWYgKGRpc3RhbmNlID09PSAwKSB7XG4gICAgICBkaXN0YW5jZSA9IDAuMSAqIHRoaXMuX3JuZygpO1xuICAgICAgZHggPSBkaXN0YW5jZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yIDwgMSAmJiBub2RlLnNoYXBlLnJhZGl1cykge1xuICAgICAgZGlzdGFuY2UgPSBNYXRoLm1heChcbiAgICAgICAgMC4xICsgdGhpcy5vdmVybGFwQXZvaWRhbmNlRmFjdG9yICogbm9kZS5zaGFwZS5yYWRpdXMsXG4gICAgICAgIGRpc3RhbmNlIC0gbm9kZS5zaGFwZS5yYWRpdXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVncmVlID0gbm9kZS5lZGdlcy5sZW5ndGggKyAxO1xuICAgIC8vIHRoZSBkaXZpZGluZyBieSB0aGUgZGlzdGFuY2UgY3ViZWQgaW5zdGVhZCBvZiBzcXVhcmVkIGFsbG93cyB1cyB0byBnZXQgdGhlIGZ4IGFuZCBmeSBjb21wb25lbnRzIHdpdGhvdXQgc2luZXMgYW5kIGNvc2luZXNcbiAgICAvLyBpdCBpcyBzaG9ydGhhbmQgZm9yIGdyYXZpdHlmb3JjZSB3aXRoIGRpc3RhbmNlIHNxdWFyZWQgYW5kIGZ4ID0gZHgvZGlzdGFuY2UgKiBncmF2aXR5Rm9yY2VcbiAgICBjb25zdCBncmF2aXR5Rm9yY2UgPVxuICAgICAgKHRoaXMub3B0aW9ucy5ncmF2aXRhdGlvbmFsQ29uc3RhbnQgKlxuICAgICAgICBwYXJlbnRCcmFuY2gubWFzcyAqXG4gICAgICAgIG5vZGUub3B0aW9ucy5tYXNzICpcbiAgICAgICAgZGVncmVlKSAvXG4gICAgICBNYXRoLnBvdyhkaXN0YW5jZSwgMik7XG4gICAgY29uc3QgZnggPSBkeCAqIGdyYXZpdHlGb3JjZTtcbiAgICBjb25zdCBmeSA9IGR5ICogZ3Jhdml0eUZvcmNlO1xuXG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXNbbm9kZS5pZF0ueCArPSBmeDtcbiAgICB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlLmlkXS55ICs9IGZ5O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvcmNlQXRsYXMyQmFzZWRSZXB1bHNpb25Tb2x2ZXI7XG4iLCAiaW1wb3J0IENlbnRyYWxHcmF2aXR5U29sdmVyIGZyb20gXCIuL0NlbnRyYWxHcmF2aXR5U29sdmVyXCI7XG5cbi8qKlxuICogQGF1Z21lbnRzIENlbnRyYWxHcmF2aXR5U29sdmVyXG4gKi9cbmNsYXNzIEZvcmNlQXRsYXMyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlciBleHRlbmRzIENlbnRyYWxHcmF2aXR5U29sdmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqIEBwYXJhbSB7e3BoeXNpY3NOb2RlSW5kaWNlczogQXJyYXksIHBoeXNpY3NFZGdlSW5kaWNlczogQXJyYXksIGZvcmNlczoge30sIHZlbG9jaXRpZXM6IHt9fX0gcGh5c2ljc0JvZHlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKGJvZHksIHBoeXNpY3NCb2R5LCBvcHRpb25zKSB7XG4gICAgc3VwZXIoYm9keSwgcGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZm9yY2VzIGJhc2VkIG9uIHRoZSBkaXN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkeFxuICAgKiBAcGFyYW0ge251bWJlcn0gZHlcbiAgICogQHBhcmFtIHtPYmplY3Q8Tm9kZS5pZCwgTm9kZT59IGZvcmNlc1xuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jYWxjdWxhdGVGb3JjZXMoZGlzdGFuY2UsIGR4LCBkeSwgZm9yY2VzLCBub2RlKSB7XG4gICAgaWYgKGRpc3RhbmNlID4gMCkge1xuICAgICAgY29uc3QgZGVncmVlID0gbm9kZS5lZGdlcy5sZW5ndGggKyAxO1xuICAgICAgY29uc3QgZ3Jhdml0eUZvcmNlID1cbiAgICAgICAgdGhpcy5vcHRpb25zLmNlbnRyYWxHcmF2aXR5ICogZGVncmVlICogbm9kZS5vcHRpb25zLm1hc3M7XG4gICAgICBmb3JjZXNbbm9kZS5pZF0ueCA9IGR4ICogZ3Jhdml0eUZvcmNlO1xuICAgICAgZm9yY2VzW25vZGUuaWRdLnkgPSBkeSAqIGdyYXZpdHlGb3JjZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9yY2VBdGxhczJCYXNlZENlbnRyYWxHcmF2aXR5U29sdmVyO1xuIiwgImltcG9ydCBCYXJuZXNIdXRTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0Jhcm5lc0h1dFNvbHZlclwiO1xuaW1wb3J0IFJlcHVsc2lvbiBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvUmVwdWxzaW9uU29sdmVyXCI7XG5pbXBvcnQgSGllcmFyY2hpY2FsUmVwdWxzaW9uIGZyb20gXCIuL2NvbXBvbmVudHMvcGh5c2ljcy9IaWVyYXJjaGljYWxSZXB1bHNpb25Tb2x2ZXJcIjtcbmltcG9ydCBTcHJpbmdTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL1NwcmluZ1NvbHZlclwiO1xuaW1wb3J0IEhpZXJhcmNoaWNhbFNwcmluZ1NvbHZlciBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyXCI7XG5pbXBvcnQgQ2VudHJhbEdyYXZpdHlTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0NlbnRyYWxHcmF2aXR5U29sdmVyXCI7XG5pbXBvcnQgRm9yY2VBdGxhczJCYXNlZFJlcHVsc2lvblNvbHZlciBmcm9tIFwiLi9jb21wb25lbnRzL3BoeXNpY3MvRkEyQmFzZWRSZXB1bHNpb25Tb2x2ZXJcIjtcbmltcG9ydCBGb3JjZUF0bGFzMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9waHlzaWNzL0ZBMkJhc2VkQ2VudHJhbEdyYXZpdHlTb2x2ZXJcIjtcbmltcG9ydCB7XG4gIEhTVlRvSGV4LFxuICBtZXJnZU9wdGlvbnMsXG4gIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsXG59IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCB7IEVuZFBvaW50cyB9IGZyb20gXCIuL2NvbXBvbmVudHMvZWRnZXNcIjsgLy8gZm9yIGRlYnVnZ2luZyB3aXRoIF9kcmF3Rm9yY2VzKClcblxuLyoqXG4gKiBUaGUgcGh5c2ljcyBlbmdpbmVcbiAqL1xuY2xhc3MgUGh5c2ljc0VuZ2luZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waHlzaWNzQm9keSA9IHtcbiAgICAgIHBoeXNpY3NOb2RlSW5kaWNlczogW10sXG4gICAgICBwaHlzaWNzRWRnZUluZGljZXM6IFtdLFxuICAgICAgZm9yY2VzOiB7fSxcbiAgICAgIHZlbG9jaXRpZXM6IHt9LFxuICAgIH07XG5cbiAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNpbXVsYXRpb25JbnRlcnZhbCA9IDEwMDAgLyA2MDtcbiAgICB0aGlzLnJlcXVpcmVzVGltZW91dCA9IHRydWU7XG4gICAgdGhpcy5wcmV2aW91c1N0YXRlcyA9IHt9O1xuICAgIHRoaXMucmVmZXJlbmNlU3RhdGUgPSB7fTtcbiAgICB0aGlzLmZyZWV6ZUNhY2hlID0ge307XG4gICAgdGhpcy5yZW5kZXJUaW1lciA9IHVuZGVmaW5lZDtcblxuICAgIC8vIHBhcmFtZXRlcnMgZm9yIHRoZSBhZGFwdGl2ZSB0aW1lc3RlcFxuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcCA9IGZhbHNlO1xuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcEVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmFkYXB0aXZlQ291bnRlciA9IDA7XG4gICAgdGhpcy5hZGFwdGl2ZUludGVydmFsID0gMztcblxuICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RhcnRlZFN0YWJpbGl6YXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zID0gMDtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7IC8vIHdpbGwgYmUgc2V0IHRvIHRydWUgaWYgdGhlIHN0YWJpbGl6ZVxuXG4gICAgLy8gZGVmYXVsdCBvcHRpb25zXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBiYXJuZXNIdXQ6IHtcbiAgICAgICAgdGhldGE6IDAuNSxcbiAgICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiAtMjAwMCxcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMyxcbiAgICAgICAgc3ByaW5nTGVuZ3RoOiA5NSxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDQsXG4gICAgICAgIGRhbXBpbmc6IDAuMDksXG4gICAgICAgIGF2b2lkT3ZlcmxhcDogMCxcbiAgICAgIH0sXG4gICAgICBmb3JjZUF0bGFzMkJhc2VkOiB7XG4gICAgICAgIHRoZXRhOiAwLjUsXG4gICAgICAgIGdyYXZpdGF0aW9uYWxDb25zdGFudDogLTUwLFxuICAgICAgICBjZW50cmFsR3Jhdml0eTogMC4wMSxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDgsXG4gICAgICAgIHNwcmluZ0xlbmd0aDogMTAwLFxuICAgICAgICBkYW1waW5nOiAwLjQsXG4gICAgICAgIGF2b2lkT3ZlcmxhcDogMCxcbiAgICAgIH0sXG4gICAgICByZXB1bHNpb246IHtcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMixcbiAgICAgICAgc3ByaW5nTGVuZ3RoOiAyMDAsXG4gICAgICAgIHNwcmluZ0NvbnN0YW50OiAwLjA1LFxuICAgICAgICBub2RlRGlzdGFuY2U6IDEwMCxcbiAgICAgICAgZGFtcGluZzogMC4wOSxcbiAgICAgICAgYXZvaWRPdmVybGFwOiAwLFxuICAgICAgfSxcbiAgICAgIGhpZXJhcmNoaWNhbFJlcHVsc2lvbjoge1xuICAgICAgICBjZW50cmFsR3Jhdml0eTogMC4wLFxuICAgICAgICBzcHJpbmdMZW5ndGg6IDEwMCxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDEsXG4gICAgICAgIG5vZGVEaXN0YW5jZTogMTIwLFxuICAgICAgICBkYW1waW5nOiAwLjA5LFxuICAgICAgfSxcbiAgICAgIG1heFZlbG9jaXR5OiA1MCxcbiAgICAgIG1pblZlbG9jaXR5OiAwLjc1LCAvLyBweC9zXG4gICAgICBzb2x2ZXI6IFwiYmFybmVzSHV0XCIsXG4gICAgICBzdGFiaWxpemF0aW9uOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGl0ZXJhdGlvbnM6IDEwMDAsIC8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbiB0byBzdGFiaWxpemVcbiAgICAgICAgdXBkYXRlSW50ZXJ2YWw6IDUwLFxuICAgICAgICBvbmx5RHluYW1pY0VkZ2VzOiBmYWxzZSxcbiAgICAgICAgZml0OiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHRpbWVzdGVwOiAwLjUsXG4gICAgICBhZGFwdGl2ZVRpbWVzdGVwOiB0cnVlLFxuICAgICAgd2luZDogeyB4OiAwLCB5OiAwIH0sXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG4gICAgdGhpcy50aW1lc3RlcCA9IDAuNTtcbiAgICB0aGlzLmxheW91dEZhaWxlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImluaXRQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuaW5pdFBoeXNpY3MoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9sYXlvdXRGYWlsZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXRGYWlsZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwicmVzZXRQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTtcbiAgICAgIHRoaXMucmVhZHkgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRpc2FibGVQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3RvcFNpbXVsYXRpb24oKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInJlc3RvcmVQaHlzaWNzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgICAgaWYgKHRoaXMucmVhZHkgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zdGFydFNpbXVsYXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInN0YXJ0U2ltdWxhdGlvblwiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5yZWFkeSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwic3RvcFNpbXVsYXRpb25cIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKGZhbHNlKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZigpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFDaGFuZ2VkXCIsICgpID0+IHtcbiAgICAgIC8vIE5vZGVzIGFuZC9vciBlZGdlcyBoYXZlIGJlZW4gYWRkZWQgb3IgcmVtb3ZlZCwgdXBkYXRlIHNob3J0Y3V0IGxpc3RzLlxuICAgICAgdGhpcy51cGRhdGVQaHlzaWNzRGF0YSgpO1xuICAgIH0pO1xuXG4gICAgLy8gZGVidWc6IHNob3cgZm9yY2VzXG4gICAgLy8gdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJhZnRlckRyYXdpbmdcIiwgKGN0eCkgPT4ge3RoaXMuX2RyYXdGb3JjZXMoY3R4KTt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIHBoeXNpY3Mgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5waHlzaWNzRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhcnRTaW11bGF0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBoeXNpY3NFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgc2VsZWN0aXZlTm90RGVlcEV4dGVuZChbXCJzdGFiaWxpemF0aW9uXCJdLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBvcHRpb25zLCBcInN0YWJpbGl6YXRpb25cIik7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMucGh5c2ljc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aW5kID0gdGhpcy5vcHRpb25zLndpbmQ7XG4gICAgICAgIGlmICh3aW5kKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kLnggIT09IFwibnVtYmVyXCIgfHwgTnVtYmVyLmlzTmFOKHdpbmQueCkpIHtcbiAgICAgICAgICAgIHdpbmQueCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZC55ICE9PSBcIm51bWJlclwiIHx8IE51bWJlci5pc05hTih3aW5kLnkpKSB7XG4gICAgICAgICAgICB3aW5kLnkgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCB0aGUgdGltZXN0ZXBcbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IHRoaXMub3B0aW9ucy50aW1lc3RlcDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICAvKipcbiAgICogY29uZmlndXJlIHRoZSBlbmdpbmUuXG4gICAqL1xuICBpbml0KCkge1xuICAgIGxldCBvcHRpb25zO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc29sdmVyID09PSBcImZvcmNlQXRsYXMyQmFzZWRcIikge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5mb3JjZUF0bGFzMkJhc2VkO1xuICAgICAgdGhpcy5ub2Rlc1NvbHZlciA9IG5ldyBGb3JjZUF0bGFzMkJhc2VkUmVwdWxzaW9uU29sdmVyKFxuICAgICAgICB0aGlzLmJvZHksXG4gICAgICAgIHRoaXMucGh5c2ljc0JvZHksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgICB0aGlzLmVkZ2VzU29sdmVyID0gbmV3IFNwcmluZ1NvbHZlcih0aGlzLmJvZHksIHRoaXMucGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICAgICAgdGhpcy5ncmF2aXR5U29sdmVyID0gbmV3IEZvcmNlQXRsYXMyQmFzZWRDZW50cmFsR3Jhdml0eVNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnNvbHZlciA9PT0gXCJyZXB1bHNpb25cIikge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5yZXB1bHNpb247XG4gICAgICB0aGlzLm5vZGVzU29sdmVyID0gbmV3IFJlcHVsc2lvbih0aGlzLmJvZHksIHRoaXMucGh5c2ljc0JvZHksIG9wdGlvbnMpO1xuICAgICAgdGhpcy5lZGdlc1NvbHZlciA9IG5ldyBTcHJpbmdTb2x2ZXIodGhpcy5ib2R5LCB0aGlzLnBoeXNpY3NCb2R5LCBvcHRpb25zKTtcbiAgICAgIHRoaXMuZ3Jhdml0eVNvbHZlciA9IG5ldyBDZW50cmFsR3Jhdml0eVNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnNvbHZlciA9PT0gXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIikge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWxSZXB1bHNpb247XG4gICAgICB0aGlzLm5vZGVzU29sdmVyID0gbmV3IEhpZXJhcmNoaWNhbFJlcHVsc2lvbihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgICAgdGhpcy5lZGdlc1NvbHZlciA9IG5ldyBIaWVyYXJjaGljYWxTcHJpbmdTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuZ3Jhdml0eVNvbHZlciA9IG5ldyBDZW50cmFsR3Jhdml0eVNvbHZlcihcbiAgICAgICAgdGhpcy5ib2R5LFxuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBiYXJuZXNIdXRcbiAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuYmFybmVzSHV0O1xuICAgICAgdGhpcy5ub2Rlc1NvbHZlciA9IG5ldyBCYXJuZXNIdXRTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIHRoaXMuZWRnZXNTb2x2ZXIgPSBuZXcgU3ByaW5nU29sdmVyKHRoaXMuYm9keSwgdGhpcy5waHlzaWNzQm9keSwgb3B0aW9ucyk7XG4gICAgICB0aGlzLmdyYXZpdHlTb2x2ZXIgPSBuZXcgQ2VudHJhbEdyYXZpdHlTb2x2ZXIoXG4gICAgICAgIHRoaXMuYm9keSxcbiAgICAgICAgdGhpcy5waHlzaWNzQm9keSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLm1vZGVsT3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogaW5pdGlhbGl6ZSB0aGUgZW5naW5lXG4gICAqL1xuICBpbml0UGh5c2ljcygpIHtcbiAgICBpZiAodGhpcy5waHlzaWNzRW5hYmxlZCA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zdGFiaWxpemUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImZpdFwiLCB7fSwgdGhpcy5sYXlvdXRGYWlsZWQpOyAvLyBpZiB0aGUgbGF5b3V0IGZhaWxlZCwgd2UgdXNlIHRoZSBhcHByb3hpbWF0aW9uIGZvciB0aGUgem9vbVxuICAgICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJmaXRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBzaW11bGF0aW9uXG4gICAqL1xuICBzdGFydFNpbXVsYXRpb24oKSB7XG4gICAgaWYgKHRoaXMucGh5c2ljc0VuYWJsZWQgPT09IHRydWUgJiYgdGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuXG4gICAgICAvLyB3aGVuIHZpc2libGUsIGFkYXB0aXZpdHkgaXMgZGlzYWJsZWQuXG4gICAgICB0aGlzLmFkYXB0aXZlVGltZXN0ZXAgPSBmYWxzZTtcblxuICAgICAgLy8gdGhpcyBzZXRzIHRoZSB3aWR0aCBvZiBhbGwgbm9kZXMgaW5pdGlhbGx5IHdoaWNoIGNvdWxkIGJlIHJlcXVpcmVkIGZvciB0aGUgYXZvaWRPdmVybGFwXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2l6ZU5vZGVzXCIpO1xuICAgICAgaWYgKHRoaXMudmlld0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52aWV3RnVuY3Rpb24gPSB0aGlzLnNpbXVsYXRpb25TdGVwLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfc3RhcnRSZW5kZXJpbmdcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRoZSBzaW11bGF0aW9uLCBmb3JjZSBzdGFiaWxpemF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlbWl0PXRydWVdXG4gICAqL1xuICBzdG9wU2ltdWxhdGlvbihlbWl0ID0gdHJ1ZSkge1xuICAgIHRoaXMuc3RhYmlsaXplZCA9IHRydWU7XG4gICAgaWYgKGVtaXQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2VtaXRTdGFiaWxpemVkKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZpZXdGdW5jdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIHRoaXMudmlld0Z1bmN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGVtaXQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdG9wUmVuZGVyaW5nXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmlld0Z1bmN0aW9uIGluc2VydHMgdGhpcyBzdGVwIGludG8gZWFjaCByZW5kZXIgbG9vcC4gSXQgY2FsbHMgdGhlIHBoeXNpY3MgdGljayBhbmQgaGFuZGxlcyB0aGUgY2xlYW51cCBhdCBzdGFiaWxpemVkLlxuICAgKlxuICAgKi9cbiAgc2ltdWxhdGlvblN0ZXAoKSB7XG4gICAgLy8gY2hlY2sgaWYgdGhlIHBoeXNpY3MgaGF2ZSBzZXR0bGVkXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnBoeXNpY3NUaWNrKCk7XG4gICAgY29uc3QgcGh5c2ljc1RpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuXG4gICAgLy8gcnVuIGRvdWJsZSBzcGVlZCBpZiBpdCBpcyBhIGxpdHRsZSBncmFwaFxuICAgIGlmIChcbiAgICAgIChwaHlzaWNzVGltZSA8IDAuNCAqIHRoaXMuc2ltdWxhdGlvbkludGVydmFsIHx8XG4gICAgICAgIHRoaXMucnVuRG91YmxlU3BlZWQgPT09IHRydWUpICYmXG4gICAgICB0aGlzLnN0YWJpbGl6ZWQgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICB0aGlzLnBoeXNpY3NUaWNrKCk7XG5cbiAgICAgIC8vIHRoaXMgbWFrZXMgc3VyZSB0aGVyZSBpcyBubyBqaXR0ZXIuIFRoZSBkZWNpc2lvbiBpcyB0YWtlbiBvbmNlIHRvIHJ1biBpdCBhdCBkb3VibGUgc3BlZWQuXG4gICAgICB0aGlzLnJ1bkRvdWJsZVNwZWVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFiaWxpemVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnN0b3BTaW11bGF0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRyaWdnZXIgdGhlIHN0YWJpbGl6ZWQgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYW1vdW50T2ZJdGVyYXRpb25zPXRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnNdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZW1pdFN0YWJpbGl6ZWQoYW1vdW50T2ZJdGVyYXRpb25zID0gdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMgPiAxIHx8XG4gICAgICB0aGlzLnN0YXJ0ZWRTdGFiaWxpemF0aW9uID09PSB0cnVlXG4gICAgKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YWJpbGl6ZWRcIiwge1xuICAgICAgICAgIGl0ZXJhdGlvbnM6IGFtb3VudE9mSXRlcmF0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3RhcnRlZFN0YWJpbGl6YXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucyA9IDA7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmb3JjZXMgZm9yIG9uZSBwaHlzaWNzIGl0ZXJhdGlvbiBhbmQgbW92ZSB0aGUgbm9kZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwaHlzaWNzU3RlcCgpIHtcbiAgICB0aGlzLmdyYXZpdHlTb2x2ZXIuc29sdmUoKTtcbiAgICB0aGlzLm5vZGVzU29sdmVyLnNvbHZlKCk7XG4gICAgdGhpcy5lZGdlc1NvbHZlci5zb2x2ZSgpO1xuICAgIHRoaXMubW92ZU5vZGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBkeW5hbWljIGFkanVzdG1lbnRzIHRvIHRoZSB0aW1lc3RlcCwgYmFzZWQgb24gY3VycmVudCBzdGF0ZS5cbiAgICpcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBwaHlzaWNzVGljaygpLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRqdXN0VGltZVN0ZXAoKSB7XG4gICAgY29uc3QgZmFjdG9yID0gMS4yOyAvLyBGYWN0b3IgZm9yIGluY3JlYXNpbmcgdGhlIHRpbWVzdGVwIG9uIHN1Y2Nlc3MuXG5cbiAgICAvLyB3ZSBjb21wYXJlIHRoZSB0d28gc3RlcHMuIGlmIGl0IGlzIGFjY2VwdGFibGUgd2UgZG91YmxlIHRoZSBzdGVwLlxuICAgIGlmICh0aGlzLl9ldmFsdWF0ZVN0ZXBRdWFsaXR5KCkgPT09IHRydWUpIHtcbiAgICAgIHRoaXMudGltZXN0ZXAgPSBmYWN0b3IgKiB0aGlzLnRpbWVzdGVwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBub3QsIHdlIGRlY3JlYXNlIHRoZSBzdGVwIHRvIGEgbWluaW11bSBvZiB0aGUgb3B0aW9ucyB0aW1lc3RlcC5cbiAgICAgIC8vIGlmIHRoZSBkZWNyZWFzZWQgdGltZXN0ZXAgaXMgc21hbGxlciB0aGFuIHRoZSBvcHRpb25zIHN0ZXAsIHdlIGRvIG5vdCByZXNldCB0aGUgY291bnRlclxuICAgICAgLy8gd2UgYXNzdW1lIHRoYXQgdGhlIG9wdGlvbnMgdGltZXN0ZXAgaXMgc3RhYmxlIGVub3VnaC5cbiAgICAgIGlmICh0aGlzLnRpbWVzdGVwIC8gZmFjdG9yIDwgdGhpcy5vcHRpb25zLnRpbWVzdGVwKSB7XG4gICAgICAgIHRoaXMudGltZXN0ZXAgPSB0aGlzLm9wdGlvbnMudGltZXN0ZXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiB0aGUgdGltZXN0ZXAgd2FzIGxhcmdlciB0aGFuIDIgdGltZXMgdGhlIG9wdGlvbiBvbmUgd2UgY2hlY2sgdGhlIGFkYXB0aXZpdHkgYWdhaW4gdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgbGFyZ2UgaW5zdGFiaWxpdGllcyBkbyBub3QgZm9ybS5cbiAgICAgICAgdGhpcy5hZGFwdGl2ZUNvdW50ZXIgPSAtMTsgLy8gY2hlY2sgYWdhaW4gbmV4dCBpdGVyYXRpb25cbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IE1hdGgubWF4KHRoaXMub3B0aW9ucy50aW1lc3RlcCwgdGhpcy50aW1lc3RlcCAvIGZhY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgc2luZ2xlIHNpbXVsYXRpb24gc3RlcCAob3IgJ3RpY2snKSBpbiB0aGUgcGh5c2ljcyBzaW11bGF0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwaHlzaWNzVGljaygpIHtcbiAgICB0aGlzLl9zdGFydFN0YWJpbGl6aW5nKCk7IC8vIHRoaXMgZW5zdXJlcyB0aGF0IHRoZXJlIGlzIG5vIHN0YXJ0IGV2ZW50IHdoZW4gdGhlIG5ldHdvcmsgaXMgYWxyZWFkeSBzdGFibGUuXG4gICAgaWYgKHRoaXMuc3RhYmlsaXplZCA9PT0gdHJ1ZSkgcmV0dXJuO1xuXG4gICAgLy8gYWRhcHRpdml0eSBtZWFucyB0aGUgdGltZXN0ZXAgYWRhcHRzIHRvIHRoZSBzaXR1YXRpb24sIG9ubHkgYXBwbGljYWJsZSBmb3Igc3RhYmlsaXphdGlvblxuICAgIGlmIChcbiAgICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcCA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5hZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCA9PT0gdHJ1ZVxuICAgICkge1xuICAgICAgLy8gdGltZXN0ZXAgcmVtYWlucyBzdGFibGUgZm9yIFwiaW50ZXJ2YWxcIiBpdGVyYXRpb25zLlxuICAgICAgY29uc3QgZG9BZGFwdGl2ZSA9IHRoaXMuYWRhcHRpdmVDb3VudGVyICUgdGhpcy5hZGFwdGl2ZUludGVydmFsID09PSAwO1xuXG4gICAgICBpZiAoZG9BZGFwdGl2ZSkge1xuICAgICAgICAvLyBmaXJzdCB0aGUgYmlnIHN0ZXAgYW5kIHJldmVydC5cbiAgICAgICAgdGhpcy50aW1lc3RlcCA9IDIgKiB0aGlzLnRpbWVzdGVwO1xuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7XG4gICAgICAgIHRoaXMucmV2ZXJ0KCk7IC8vIHNhdmVzIHRoZSByZWZlcmVuY2Ugc3RhdGVcblxuICAgICAgICAvLyBub3cgdGhlIG5vcm1hbCBzdGVwLiBTaW5jZSB0aGlzIGlzIHRoZSBsYXN0IHN0ZXAsIGl0IGlzIHRoZSBtb3JlIHN0YWJsZSBvbmUgYW5kIHdlIHdpbGwgdGFrZSB0aGlzLlxuICAgICAgICB0aGlzLnRpbWVzdGVwID0gMC41ICogdGhpcy50aW1lc3RlcDtcblxuICAgICAgICAvLyBzaW5jZSBpdCdzIGhhbGYgdGhlIHN0ZXAsIHdlIGRvIGl0IHR3aWNlLlxuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7XG4gICAgICAgIHRoaXMucGh5c2ljc1N0ZXAoKTtcblxuICAgICAgICB0aGlzLmFkanVzdFRpbWVTdGVwKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBoeXNpY3NTdGVwKCk7IC8vIG5vcm1hbCBzdGVwLCBrZWVwaW5nIHRpbWVzdGVwIGNvbnN0YW50XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWRhcHRpdmVDb3VudGVyICs9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNhc2UgZm9yIHRoZSBzdGF0aWMgdGltZXN0ZXAsIHdlIHJlc2V0IGl0IHRvIHRoZSBvbmUgaW4gb3B0aW9ucyBhbmQgdGFrZSBhIG5vcm1hbCBzdGVwLlxuICAgICAgdGhpcy50aW1lc3RlcCA9IHRoaXMub3B0aW9ucy50aW1lc3RlcDtcbiAgICAgIHRoaXMucGh5c2ljc1N0ZXAoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFiaWxpemVkID09PSB0cnVlKSB0aGlzLnJldmVydCgpO1xuICAgIHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMrKztcbiAgfVxuXG4gIC8qKlxuICAgKiBOb2RlcyBhbmQgZWRnZXMgY2FuIGhhdmUgdGhlIHBoeXNpY3MgdG9nZ2xlcyBvbiBvciBvZmYuIEEgY29sbGVjdGlvbiBvZiBpbmRpY2VzIGlzIGNyZWF0ZWQgaGVyZSBzbyB3ZSBjYW4gc2tpcCB0aGUgY2hlY2sgYWxsIHRoZSB0aW1lLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlUGh5c2ljc0RhdGEoKSB7XG4gICAgdGhpcy5waHlzaWNzQm9keS5mb3JjZXMgPSB7fTtcbiAgICB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlcyA9IFtdO1xuICAgIHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc0VkZ2VJbmRpY2VzID0gW107XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG5cbiAgICAvLyBnZXQgbm9kZSBpbmRpY2VzIGZvciBwaHlzaWNzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gbm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgaWYgKG5vZGVzW25vZGVJZF0ub3B0aW9ucy5waHlzaWNzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXMucHVzaChub2Rlc1tub2RlSWRdLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGdldCBlZGdlIGluZGljZXMgZm9yIHBoeXNpY3NcbiAgICBmb3IgKGNvbnN0IGVkZ2VJZCBpbiBlZGdlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZGdlcywgZWRnZUlkKSkge1xuICAgICAgICBpZiAoZWRnZXNbZWRnZUlkXS5vcHRpb25zLnBoeXNpY3MgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NFZGdlSW5kaWNlcy5wdXNoKGVkZ2VzW2VkZ2VJZF0uaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IHRoZSB2ZWxvY2l0eSBhbmQgdGhlIGZvcmNlcyB2ZWN0b3JcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSB0aGlzLnBoeXNpY3NCb2R5LnBoeXNpY3NOb2RlSW5kaWNlc1tpXTtcbiAgICAgIHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW25vZGVJZF0gPSB7IHg6IDAsIHk6IDAgfTtcblxuICAgICAgLy8gZm9yY2VzIGNhbiBiZSByZXNldCBiZWNhdXNlIHRoZXkgYXJlIHJlY2FsY3VsYXRlZC4gVmVsb2NpdGllcyBoYXZlIHRvIHBlcnNpc3QuXG4gICAgICBpZiAodGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbbm9kZUlkXSA9IHsgeDogMCwgeTogMCB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNsZWFuIGRlbGV0ZWQgbm9kZXMgZnJvbSB0aGUgdmVsb2NpdHkgdmVjdG9yXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5waHlzaWNzQm9keS52ZWxvY2l0aWVzKSB7XG4gICAgICBpZiAobm9kZXNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbbm9kZUlkXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV2ZXJ0IHRoZSBzaW11bGF0aW9uIG9uZSBzdGVwLiBUaGlzIGlzIGRvbmUgc28gYWZ0ZXIgc3RhYmlsaXphdGlvbiwgZXZlcnkgbmV3IHN0YXJ0IG9mIHRoZSBzaW11bGF0aW9uIHdpbGwgYWxzbyBzYXkgc3RhYmlsaXplZC5cbiAgICovXG4gIHJldmVydCgpIHtcbiAgICBjb25zdCBub2RlSWRzID0gT2JqZWN0LmtleXModGhpcy5wcmV2aW91c1N0YXRlcyk7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgdmVsb2NpdGllcyA9IHRoaXMucGh5c2ljc0JvZHkudmVsb2NpdGllcztcbiAgICB0aGlzLnJlZmVyZW5jZVN0YXRlID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGVJZHNbaV07XG4gICAgICBpZiAobm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChub2Rlc1tub2RlSWRdLm9wdGlvbnMucGh5c2ljcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucmVmZXJlbmNlU3RhdGVbbm9kZUlkXSA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uczogeyB4OiBub2Rlc1tub2RlSWRdLngsIHk6IG5vZGVzW25vZGVJZF0ueSB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgdmVsb2NpdGllc1tub2RlSWRdLnggPSB0aGlzLnByZXZpb3VzU3RhdGVzW25vZGVJZF0udng7XG4gICAgICAgICAgdmVsb2NpdGllc1tub2RlSWRdLnkgPSB0aGlzLnByZXZpb3VzU3RhdGVzW25vZGVJZF0udnk7XG4gICAgICAgICAgbm9kZXNbbm9kZUlkXS54ID0gdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdLng7XG4gICAgICAgICAgbm9kZXNbbm9kZUlkXS55ID0gdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdLnk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnByZXZpb3VzU3RhdGVzW25vZGVJZF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgY29tcGFyZXMgdGhlIHJlZmVyZW5jZSBzdGF0ZSB0byB0aGUgY3VycmVudCBzdGF0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ldmFsdWF0ZVN0ZXBRdWFsaXR5KCkge1xuICAgIGxldCBkeCwgZHksIGRwb3M7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2VTdGF0ZTtcbiAgICBjb25zdCBwb3NUaHJlc2hvbGQgPSAwLjM7XG5cbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLnJlZmVyZW5jZVN0YXRlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnJlZmVyZW5jZVN0YXRlLCBub2RlSWQpICYmXG4gICAgICAgIG5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGR4ID0gbm9kZXNbbm9kZUlkXS54IC0gcmVmZXJlbmNlW25vZGVJZF0ucG9zaXRpb25zLng7XG4gICAgICAgIGR5ID0gbm9kZXNbbm9kZUlkXS55IC0gcmVmZXJlbmNlW25vZGVJZF0ucG9zaXRpb25zLnk7XG5cbiAgICAgICAgZHBvcyA9IE1hdGguc3FydChNYXRoLnBvdyhkeCwgMikgKyBNYXRoLnBvdyhkeSwgMikpO1xuXG4gICAgICAgIGlmIChkcG9zID4gcG9zVGhyZXNob2xkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIG5vZGVzIG9uZSB0aW1lc3RlcCBhbmQgY2hlY2sgaWYgdGhleSBhcmUgc3RhYmlsaXplZFxuICAgKi9cbiAgbW92ZU5vZGVzKCkge1xuICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5waHlzaWNzQm9keS5waHlzaWNzTm9kZUluZGljZXM7XG4gICAgbGV0IG1heE5vZGVWZWxvY2l0eSA9IDA7XG4gICAgbGV0IGF2ZXJhZ2VOb2RlVmVsb2NpdHkgPSAwO1xuXG4gICAgLy8gdGhlIHZlbG9jaXR5IHRocmVzaG9sZCAoZW5lcmd5IGluIHRoZSBzeXN0ZW0pIGZvciB0aGUgYWRhcHRpdml0eSB0b2dnbGVcbiAgICBjb25zdCB2ZWxvY2l0eUFkYXB0aXZlVGhyZXNob2xkID0gNTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGVJbmRpY2VzW2ldO1xuICAgICAgY29uc3Qgbm9kZVZlbG9jaXR5ID0gdGhpcy5fcGVyZm9ybVN0ZXAobm9kZUlkKTtcbiAgICAgIC8vIHN0YWJpbGl6ZWQgaXMgdHJ1ZSBpZiBzdGFiaWxpemVkIGlzIHRydWUgYW5kIHZlbG9jaXR5IGlzIHNtYWxsZXIgdGhhbiB2bWluIC0tPiBhbGwgbm9kZXMgbXVzdCBiZSBzdGFiaWxpemVkXG4gICAgICBtYXhOb2RlVmVsb2NpdHkgPSBNYXRoLm1heChtYXhOb2RlVmVsb2NpdHksIG5vZGVWZWxvY2l0eSk7XG4gICAgICBhdmVyYWdlTm9kZVZlbG9jaXR5ICs9IG5vZGVWZWxvY2l0eTtcbiAgICB9XG5cbiAgICAvLyBldmFsdWF0aW5nIHRoZSBzdGFiaWxpemVkIGFuZCBhZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCBjb25kaXRpb25zXG4gICAgdGhpcy5hZGFwdGl2ZVRpbWVzdGVwRW5hYmxlZCA9XG4gICAgICBhdmVyYWdlTm9kZVZlbG9jaXR5IC8gbm9kZUluZGljZXMubGVuZ3RoIDwgdmVsb2NpdHlBZGFwdGl2ZVRocmVzaG9sZDtcbiAgICB0aGlzLnN0YWJpbGl6ZWQgPSBtYXhOb2RlVmVsb2NpdHkgPCB0aGlzLm9wdGlvbnMubWluVmVsb2NpdHk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIG5ldyB2ZWxvY2l0eSBmb3IgYSBjb29yZGluYXRlIGRpcmVjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdiAgdmVsb2NpdHkgZm9yIGN1cnJlbnQgY29vcmRpbmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gZiAgcmVndWxhciBmb3JjZSBmb3IgY3VycmVudCBjb29yZGluYXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtICBtYXNzIG9mIGN1cnJlbnQgbm9kZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBuZXcgdmVsb2NpdHkgZm9yIGN1cnJlbnQgY29vcmRpbmF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FsY3VsYXRlQ29tcG9uZW50VmVsb2NpdHkodiwgZiwgbSkge1xuICAgIGNvbnN0IGRmID0gdGhpcy5tb2RlbE9wdGlvbnMuZGFtcGluZyAqIHY7IC8vIGRhbXBpbmcgZm9yY2VcbiAgICBjb25zdCBhID0gKGYgLSBkZikgLyBtOyAvLyBhY2NlbGVyYXRpb25cblxuICAgIHYgKz0gYSAqIHRoaXMudGltZXN0ZXA7XG5cbiAgICAvLyBQdXQgYSBsaW1pdCBvbiB0aGUgdmVsb2NpdGllcyBpZiBpdCBpcyByZWFsbHkgaGlnaFxuICAgIGNvbnN0IG1heFYgPSB0aGlzLm9wdGlvbnMubWF4VmVsb2NpdHkgfHwgMWU5O1xuICAgIGlmIChNYXRoLmFicyh2KSA+IG1heFYpIHtcbiAgICAgIHYgPSB2ID4gMCA/IG1heFYgOiAtbWF4VjtcbiAgICB9XG5cbiAgICByZXR1cm4gdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBhY3R1YWwgc3RlcFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IG5vZGVJZFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgbmV3IHZlbG9jaXR5IG9mIGdpdmVuIG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtU3RlcChub2RlSWQpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgY29uc3QgZm9yY2UgPSB0aGlzLnBoeXNpY3NCb2R5LmZvcmNlc1tub2RlSWRdO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy53aW5kKSB7XG4gICAgICBmb3JjZS54ICs9IHRoaXMub3B0aW9ucy53aW5kLng7XG4gICAgICBmb3JjZS55ICs9IHRoaXMub3B0aW9ucy53aW5kLnk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVsb2NpdHkgPSB0aGlzLnBoeXNpY3NCb2R5LnZlbG9jaXRpZXNbbm9kZUlkXTtcblxuICAgIC8vIHN0b3JlIHRoZSBzdGF0ZSBzbyB3ZSBjYW4gcmV2ZXJ0XG4gICAgdGhpcy5wcmV2aW91c1N0YXRlc1tub2RlSWRdID0ge1xuICAgICAgeDogbm9kZS54LFxuICAgICAgeTogbm9kZS55LFxuICAgICAgdng6IHZlbG9jaXR5LngsXG4gICAgICB2eTogdmVsb2NpdHkueSxcbiAgICB9O1xuXG4gICAgaWYgKG5vZGUub3B0aW9ucy5maXhlZC54ID09PSBmYWxzZSkge1xuICAgICAgdmVsb2NpdHkueCA9IHRoaXMuY2FsY3VsYXRlQ29tcG9uZW50VmVsb2NpdHkoXG4gICAgICAgIHZlbG9jaXR5LngsXG4gICAgICAgIGZvcmNlLngsXG4gICAgICAgIG5vZGUub3B0aW9ucy5tYXNzXG4gICAgICApO1xuICAgICAgbm9kZS54ICs9IHZlbG9jaXR5LnggKiB0aGlzLnRpbWVzdGVwO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JjZS54ID0gMDtcbiAgICAgIHZlbG9jaXR5LnggPSAwO1xuICAgIH1cblxuICAgIGlmIChub2RlLm9wdGlvbnMuZml4ZWQueSA9PT0gZmFsc2UpIHtcbiAgICAgIHZlbG9jaXR5LnkgPSB0aGlzLmNhbGN1bGF0ZUNvbXBvbmVudFZlbG9jaXR5KFxuICAgICAgICB2ZWxvY2l0eS55LFxuICAgICAgICBmb3JjZS55LFxuICAgICAgICBub2RlLm9wdGlvbnMubWFzc1xuICAgICAgKTtcbiAgICAgIG5vZGUueSArPSB2ZWxvY2l0eS55ICogdGhpcy50aW1lc3RlcDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yY2UueSA9IDA7XG4gICAgICB2ZWxvY2l0eS55ID0gMDtcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbFZlbG9jaXR5ID0gTWF0aC5zcXJ0KFxuICAgICAgTWF0aC5wb3codmVsb2NpdHkueCwgMikgKyBNYXRoLnBvdyh2ZWxvY2l0eS55LCAyKVxuICAgICk7XG4gICAgcmV0dXJuIHRvdGFsVmVsb2NpdHk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBpbml0aWFsaXppbmcgYW5kIHN0YWJpbGl6aW5nLCB3ZSBjYW4gZnJlZXplIG5vZGVzIHdpdGggYSBwcmVkZWZpbmVkIHBvc2l0aW9uLlxuICAgKiBUaGlzIGdyZWF0bHkgc3BlZWRzIHVwIHN0YWJpbGl6YXRpb24gYmVjYXVzZSBvbmx5IHRoZSBzdXBwb3J0bm9kZXMgZm9yIHRoZSBzbW9vdGhDdXJ2ZXMgaGF2ZSB0byBzZXR0bGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZnJlZXplTm9kZXMoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgZm9yIChjb25zdCBpZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlcywgaWQpKSB7XG4gICAgICAgIGlmIChub2Rlc1tpZF0ueCAmJiBub2Rlc1tpZF0ueSkge1xuICAgICAgICAgIGNvbnN0IGZpeGVkID0gbm9kZXNbaWRdLm9wdGlvbnMuZml4ZWQ7XG4gICAgICAgICAgdGhpcy5mcmVlemVDYWNoZVtpZF0gPSB7IHg6IGZpeGVkLngsIHk6IGZpeGVkLnkgfTtcbiAgICAgICAgICBmaXhlZC54ID0gdHJ1ZTtcbiAgICAgICAgICBmaXhlZC55ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbmZyZWV6ZXMgdGhlIG5vZGVzIHRoYXQgaGF2ZSBiZWVuIGZyb3plbiBieSBfZnJlZXplRGVmaW5lZE5vZGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc3RvcmVGcm96ZW5Ob2RlcygpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBmb3IgKGNvbnN0IGlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBpZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuZnJlZXplQ2FjaGVbaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub2Rlc1tpZF0ub3B0aW9ucy5maXhlZC54ID0gdGhpcy5mcmVlemVDYWNoZVtpZF0ueDtcbiAgICAgICAgICBub2Rlc1tpZF0ub3B0aW9ucy5maXhlZC55ID0gdGhpcy5mcmVlemVDYWNoZVtpZF0ueTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmZyZWV6ZUNhY2hlID0ge307XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIHN0YWJsZSBwb3NpdGlvbiBmb3IgYWxsIG5vZGVzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaXRlcmF0aW9ucz10aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5pdGVyYXRpb25zXVxuICAgKi9cbiAgc3RhYmlsaXplKGl0ZXJhdGlvbnMgPSB0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi5pdGVyYXRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRpb25zICE9PSBcIm51bWJlclwiKSB7XG4gICAgICBpdGVyYXRpb25zID0gdGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24uaXRlcmF0aW9ucztcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiVGhlIHN0YWJpbGl6ZSBtZXRob2QgbmVlZHMgYSBudW1lcmljIGFtb3VudCBvZiBpdGVyYXRpb25zLiBTd2l0Y2hpbmcgdG8gZGVmYXVsdDogXCIsXG4gICAgICAgIGl0ZXJhdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZW5hYmxlIGFkYXB0aXZlIHRpbWVzdGVwc1xuICAgIHRoaXMuYWRhcHRpdmVUaW1lc3RlcCA9IHRydWUgJiYgdGhpcy5vcHRpb25zLmFkYXB0aXZlVGltZXN0ZXA7XG5cbiAgICAvLyB0aGlzIHNldHMgdGhlIHdpZHRoIG9mIGFsbCBub2RlcyBpbml0aWFsbHkgd2hpY2ggY291bGQgYmUgcmVxdWlyZWQgZm9yIHRoZSBhdm9pZE92ZXJsYXBcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2l6ZU5vZGVzXCIpO1xuXG4gICAgdGhpcy5zdG9wU2ltdWxhdGlvbigpOyAvLyBzdG9wIHRoZSByZW5kZXIgbG9vcFxuICAgIHRoaXMuc3RhYmlsaXplZCA9IGZhbHNlO1xuXG4gICAgLy8gYmxvY2sgcmVkcmF3IHJlcXVlc3RzXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9ibG9ja1JlZHJhd1wiKTtcbiAgICB0aGlzLnRhcmdldEl0ZXJhdGlvbnMgPSBpdGVyYXRpb25zO1xuXG4gICAgLy8gc3RhcnQgdGhlIHN0YWJpbGl6YXRpb25cbiAgICBpZiAodGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24ub25seUR5bmFtaWNFZGdlcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fZnJlZXplTm9kZXMoKTtcbiAgICB9XG4gICAgdGhpcy5zdGFiaWxpemF0aW9uSXRlcmF0aW9ucyA9IDA7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3N0YWJpbGl6YXRpb25CYXRjaCgpLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBub3QgYWxyZWFkeSBzdGFiaWxpemluZywgc3RhcnQgaXQgYW5kIGVtaXQgYSBzdGFydCBldmVudC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgc3RhYmlsaXphdGlvbiBzdGFydGVkIHdpdGggdGhpcyBjYWxsXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RhcnRTdGFiaWxpemluZygpIHtcbiAgICBpZiAodGhpcy5zdGFydGVkU3RhYmlsaXphdGlvbiA9PT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U3RhYmlsaXppbmdcIik7XG4gICAgdGhpcy5zdGFydGVkU3RhYmlsaXphdGlvbiA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogT25lIGJhdGNoIG9mIHN0YWJpbGl6YXRpb25cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zdGFiaWxpemF0aW9uQmF0Y2goKSB7XG4gICAgY29uc3QgcnVubmluZyA9ICgpID0+XG4gICAgICB0aGlzLnN0YWJpbGl6ZWQgPT09IGZhbHNlICYmXG4gICAgICB0aGlzLnN0YWJpbGl6YXRpb25JdGVyYXRpb25zIDwgdGhpcy50YXJnZXRJdGVyYXRpb25zO1xuXG4gICAgY29uc3Qgc2VuZFByb2dyZXNzID0gKCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YWJpbGl6YXRpb25Qcm9ncmVzc1wiLCB7XG4gICAgICAgIGl0ZXJhdGlvbnM6IHRoaXMuc3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMsXG4gICAgICAgIHRvdGFsOiB0aGlzLnRhcmdldEl0ZXJhdGlvbnMsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3N0YXJ0U3RhYmlsaXppbmcoKSkge1xuICAgICAgc2VuZFByb2dyZXNzKCk7IC8vIEVuc3VyZSB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzdGFydCBldmVudC5cbiAgICB9XG5cbiAgICBsZXQgY291bnQgPSAwO1xuICAgIHdoaWxlIChydW5uaW5nKCkgJiYgY291bnQgPCB0aGlzLm9wdGlvbnMuc3RhYmlsaXphdGlvbi51cGRhdGVJbnRlcnZhbCkge1xuICAgICAgdGhpcy5waHlzaWNzVGljaygpO1xuICAgICAgY291bnQrKztcbiAgICB9XG5cbiAgICBzZW5kUHJvZ3Jlc3MoKTtcblxuICAgIGlmIChydW5uaW5nKCkpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5fc3RhYmlsaXphdGlvbkJhdGNoLmJpbmQodGhpcyksIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9maW5hbGl6ZVN0YWJpbGl6YXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JhcCB1cCB0aGUgc3RhYmlsaXphdGlvbiwgZml0IGFuZCBlbWl0IHRoZSBldmVudHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluYWxpemVTdGFiaWxpemF0aW9uKCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfYWxsb3dSZWRyYXdcIik7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdGFiaWxpemF0aW9uLmZpdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImZpdFwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN0YWJpbGl6YXRpb24ub25seUR5bmFtaWNFZGdlcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fcmVzdG9yZUZyb3plbk5vZGVzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YWJpbGl6YXRpb25JdGVyYXRpb25zRG9uZVwiKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG5cbiAgICBpZiAodGhpcy5zdGFiaWxpemVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9lbWl0U3RhYmlsaXplZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0U2ltdWxhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERFQlVHR0lORyBCRUxPVyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cblxuICAvKipcbiAgICogRGVidWcgZnVuY3Rpb24gdGhhdCBkaXNwbGF5IGFycm93cyBmb3IgdGhlIGZvcmNlcyBjdXJyZW50bHkgYWN0aXZlIGluIHRoZSBuZXR3b3JrLlxuICAgKlxuICAgKiBVc2UgdGhpcyB3aGVuIGRlYnVnZ2luZyBvbmx5LlxuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd0ZvcmNlcyhjdHgpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucGh5c2ljc0JvZHkucGh5c2ljc05vZGVJbmRpY2VzW2ldO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpbmRleF07XG4gICAgICBjb25zdCBmb3JjZSA9IHRoaXMucGh5c2ljc0JvZHkuZm9yY2VzW2luZGV4XTtcbiAgICAgIGNvbnN0IGZhY3RvciA9IDIwO1xuICAgICAgY29uc3QgY29sb3JGYWN0b3IgPSAwLjAzO1xuICAgICAgY29uc3QgZm9yY2VTaXplID0gTWF0aC5zcXJ0KE1hdGgucG93KGZvcmNlLngsIDIpICsgTWF0aC5wb3coZm9yY2UueCwgMikpO1xuXG4gICAgICBjb25zdCBzaXplID0gTWF0aC5taW4oTWF0aC5tYXgoNSwgZm9yY2VTaXplKSwgMTUpO1xuICAgICAgY29uc3QgYXJyb3dTaXplID0gMyAqIHNpemU7XG5cbiAgICAgIGNvbnN0IGNvbG9yID0gSFNWVG9IZXgoXG4gICAgICAgICgxODAgLSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBjb2xvckZhY3RvciAqIGZvcmNlU2l6ZSkpICogMTgwKSAvIDM2MCxcbiAgICAgICAgMSxcbiAgICAgICAgMVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcG9pbnQgPSB7XG4gICAgICAgIHg6IG5vZGUueCArIGZhY3RvciAqIGZvcmNlLngsXG4gICAgICAgIHk6IG5vZGUueSArIGZhY3RvciAqIGZvcmNlLnksXG4gICAgICB9O1xuXG4gICAgICBjdHgubGluZVdpZHRoID0gc2l6ZTtcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGNvbG9yO1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4Lm1vdmVUbyhub2RlLngsIG5vZGUueSk7XG4gICAgICBjdHgubGluZVRvKHBvaW50LngsIHBvaW50LnkpO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuXG4gICAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIoZm9yY2UueSwgZm9yY2UueCk7XG4gICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICBFbmRQb2ludHMuZHJhdyhjdHgsIHtcbiAgICAgICAgdHlwZTogXCJhcnJvd1wiLFxuICAgICAgICBwb2ludDogcG9pbnQsXG4gICAgICAgIGFuZ2xlOiBhbmdsZSxcbiAgICAgICAgbGVuZ3RoOiBhcnJvd1NpemUsXG4gICAgICB9KTtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBoeXNpY3NFbmdpbmU7XG4iLCAiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5sZXQgZ2V0UmFuZG9tVmFsdWVzO1xuY29uc3Qgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cbiAgICBnZXRSYW5kb21WYWx1ZXMgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pO1xuXG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn0iLCAiaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUuanMnO1xuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG5cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICByZXR1cm4gYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV07XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoIXZhbGlkYXRlKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdpZnk7IiwgImNvbnN0IHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHJhbmRvbVVVSURcbn07IiwgImltcG9ydCBuYXRpdmUgZnJvbSAnLi9uYXRpdmUuanMnO1xuaW1wb3J0IHJuZyBmcm9tICcuL3JuZy5qcyc7XG5pbXBvcnQgeyB1bnNhZmVTdHJpbmdpZnkgfSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChuYXRpdmUucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5hdGl2ZS5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3Qgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7IC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiB1bnNhZmVTdHJpbmdpZnkocm5kcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHY0OyIsICJpbXBvcnQgeyBkZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFV0aWxpdHkgQ2xhc3NcbiAqL1xuY2xhc3MgTmV0d29ya1V0aWwge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBjZW50ZXIgcG9zaXRpb24gb2YgdGhlIG5ldHdvcmsgY29uc2lkZXJpbmcgdGhlIGJvdW5kaW5nIGJveGVzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBhbGxOb2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gW3NwZWNpZmljTm9kZXM9W11dXG4gICAqIEByZXR1cm5zIHt7bWluWDogbnVtYmVyLCBtYXhYOiBudW1iZXIsIG1pblk6IG51bWJlciwgbWF4WTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGdldFJhbmdlKGFsbE5vZGVzLCBzcGVjaWZpY05vZGVzID0gW10pIHtcbiAgICBsZXQgbWluWSA9IDFlOSxcbiAgICAgIG1heFkgPSAtMWU5LFxuICAgICAgbWluWCA9IDFlOSxcbiAgICAgIG1heFggPSAtMWU5LFxuICAgICAgbm9kZTtcbiAgICBpZiAoc3BlY2lmaWNOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwZWNpZmljTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZSA9IGFsbE5vZGVzW3NwZWNpZmljTm9kZXNbaV1dO1xuICAgICAgICBpZiAobWluWCA+IG5vZGUuc2hhcGUuYm91bmRpbmdCb3gubGVmdCkge1xuICAgICAgICAgIG1pblggPSBub2RlLnNoYXBlLmJvdW5kaW5nQm94LmxlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heFggPCBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnJpZ2h0KSB7XG4gICAgICAgICAgbWF4WCA9IG5vZGUuc2hhcGUuYm91bmRpbmdCb3gucmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pblkgPiBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnRvcCkge1xuICAgICAgICAgIG1pblkgPSBub2RlLnNoYXBlLmJvdW5kaW5nQm94LnRvcDtcbiAgICAgICAgfSAvLyB0b3AgaXMgbmVnYXRpdmUsIGJvdHRvbSBpcyBwb3NpdGl2ZVxuICAgICAgICBpZiAobWF4WSA8IG5vZGUuc2hhcGUuYm91bmRpbmdCb3guYm90dG9tKSB7XG4gICAgICAgICAgbWF4WSA9IG5vZGUuc2hhcGUuYm91bmRpbmdCb3guYm90dG9tO1xuICAgICAgICB9IC8vIHRvcCBpcyBuZWdhdGl2ZSwgYm90dG9tIGlzIHBvc2l0aXZlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1pblggPT09IDFlOSAmJiBtYXhYID09PSAtMWU5ICYmIG1pblkgPT09IDFlOSAmJiBtYXhZID09PSAtMWU5KSB7XG4gICAgICAobWluWSA9IDApLCAobWF4WSA9IDApLCAobWluWCA9IDApLCAobWF4WCA9IDApO1xuICAgIH1cbiAgICByZXR1cm4geyBtaW5YOiBtaW5YLCBtYXhYOiBtYXhYLCBtaW5ZOiBtaW5ZLCBtYXhZOiBtYXhZIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgY2VudGVyIHBvc2l0aW9uIG9mIHRoZSBuZXR3b3JrXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBhbGxOb2Rlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gW3NwZWNpZmljTm9kZXM9W11dXG4gICAqIEByZXR1cm5zIHt7bWluWDogbnVtYmVyLCBtYXhYOiBudW1iZXIsIG1pblk6IG51bWJlciwgbWF4WTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGdldFJhbmdlQ29yZShhbGxOb2Rlcywgc3BlY2lmaWNOb2RlcyA9IFtdKSB7XG4gICAgbGV0IG1pblkgPSAxZTksXG4gICAgICBtYXhZID0gLTFlOSxcbiAgICAgIG1pblggPSAxZTksXG4gICAgICBtYXhYID0gLTFlOSxcbiAgICAgIG5vZGU7XG4gICAgaWYgKHNwZWNpZmljTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGVjaWZpY05vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5vZGUgPSBhbGxOb2Rlc1tzcGVjaWZpY05vZGVzW2ldXTtcbiAgICAgICAgaWYgKG1pblggPiBub2RlLngpIHtcbiAgICAgICAgICBtaW5YID0gbm9kZS54O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhYIDwgbm9kZS54KSB7XG4gICAgICAgICAgbWF4WCA9IG5vZGUueDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWluWSA+IG5vZGUueSkge1xuICAgICAgICAgIG1pblkgPSBub2RlLnk7XG4gICAgICAgIH0gLy8gdG9wIGlzIG5lZ2F0aXZlLCBib3R0b20gaXMgcG9zaXRpdmVcbiAgICAgICAgaWYgKG1heFkgPCBub2RlLnkpIHtcbiAgICAgICAgICBtYXhZID0gbm9kZS55O1xuICAgICAgICB9IC8vIHRvcCBpcyBuZWdhdGl2ZSwgYm90dG9tIGlzIHBvc2l0aXZlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1pblggPT09IDFlOSAmJiBtYXhYID09PSAtMWU5ICYmIG1pblkgPT09IDFlOSAmJiBtYXhZID09PSAtMWU5KSB7XG4gICAgICAobWluWSA9IDApLCAobWF4WSA9IDApLCAobWluWCA9IDApLCAobWF4WCA9IDApO1xuICAgIH1cbiAgICByZXR1cm4geyBtaW5YOiBtaW5YLCBtYXhYOiBtYXhYLCBtaW5ZOiBtaW5ZLCBtYXhZOiBtYXhZIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHJhbmdlID0ge21pblg6IG1pblgsIG1heFg6IG1heFgsIG1pblk6IG1pblksIG1heFk6IG1heFl9O1xuICAgKiBAcmV0dXJucyB7e3g6IG51bWJlciwgeTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRDZW50ZXIocmFuZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogMC41ICogKHJhbmdlLm1heFggKyByYW5nZS5taW5YKSxcbiAgICAgIHk6IDAuNSAqIChyYW5nZS5tYXhZICsgcmFuZ2UubWluWSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHJldHVybnMgYSBjbG9uZSBvZiB0aGUgb3B0aW9ucyBvciBvcHRpb25zIG9mIHRoZSBlZGdlIG9yIG5vZGUgdG8gYmUgdXNlZCBmb3IgY29uc3RydWN0aW9uIG9mIG5ldyBlZGdlcyBvciBjaGVjayBmdW5jdGlvbnMgZm9yIG5ldyBub2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHt2aXMuSXRlbX0gaXRlbVxuICAgKiBAcGFyYW0geydub2RlJ3x1bmRlZmluZWR9IHR5cGVcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgY2xvbmVPcHRpb25zKGl0ZW0sIHR5cGUpIHtcbiAgICBjb25zdCBjbG9uZWRPcHRpb25zID0ge307XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcIm5vZGVcIikge1xuICAgICAgZGVlcEV4dGVuZChjbG9uZWRPcHRpb25zLCBpdGVtLm9wdGlvbnMsIHRydWUpO1xuICAgICAgY2xvbmVkT3B0aW9ucy54ID0gaXRlbS54O1xuICAgICAgY2xvbmVkT3B0aW9ucy55ID0gaXRlbS55O1xuICAgICAgY2xvbmVkT3B0aW9ucy5hbW91bnRPZkNvbm5lY3Rpb25zID0gaXRlbS5lZGdlcy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZXBFeHRlbmQoY2xvbmVkT3B0aW9ucywgaXRlbS5vcHRpb25zLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lZE9wdGlvbnM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTmV0d29ya1V0aWw7XG4iLCAiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCBOb2RlIGZyb20gXCIuLi9Ob2RlXCI7XG5cbi8qKlxuICogQSBDbHVzdGVyIGlzIGEgc3BlY2lhbCBOb2RlIHRoYXQgYWxsb3dzIGEgZ3JvdXAgb2YgTm9kZXMgcG9zaXRpb25lZCBjbG9zZWx5IHRvZ2V0aGVyXG4gKiB0byBiZSByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBDbHVzdGVyIE5vZGUuXG4gKlxuICogQGF1Z21lbnRzIE5vZGVcbiAqL1xuY2xhc3MgQ2x1c3RlciBleHRlbmRzIE5vZGUge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtBcnJheS48SFRNTEltYWdlRWxlbWVudD59aW1hZ2VsaXN0XG4gICAqIEBwYXJhbSB7QXJyYXl9IGdyb3VwbGlzdFxuICAgKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsT3B0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdE9wdGlvbnMgICAgIEdsb2JhbCBkZWZhdWx0IG9wdGlvbnMgZm9yIG5vZGVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zLFxuICAgIGJvZHksXG4gICAgaW1hZ2VsaXN0LFxuICAgIGdyb3VwbGlzdCxcbiAgICBnbG9iYWxPcHRpb25zLFxuICAgIGRlZmF1bHRPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJvZHksIGltYWdlbGlzdCwgZ3JvdXBsaXN0LCBnbG9iYWxPcHRpb25zLCBkZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmlzQ2x1c3RlciA9IHRydWU7XG4gICAgdGhpcy5jb250YWluZWROb2RlcyA9IHt9O1xuICAgIHRoaXMuY29udGFpbmVkRWRnZXMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2ZlciBjaGlsZCBjbHVzdGVyIGRhdGEgdG8gY3VycmVudCBhbmQgZGlzY29ubmVjdCB0aGUgY2hpbGQgY2x1c3Rlci5cbiAgICpcbiAgICogUGxlYXNlIGNvbnN1bHQgdGhlIGhlYWRlciBjb21tZW50IGluICdDbHVzdGVyaW5nLmpzJyBmb3IgdGhlIGZpZWxkcyBzZXQgaGVyZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBjaGlsZENsdXN0ZXJJZCAgaWQgb2YgY2hpbGQgY2x1c3RlciB0byBvcGVuXG4gICAqL1xuICBfb3BlbkNoaWxkQ2x1c3RlcihjaGlsZENsdXN0ZXJJZCkge1xuICAgIGNvbnN0IGNoaWxkQ2x1c3RlciA9IHRoaXMuYm9keS5ub2Rlc1tjaGlsZENsdXN0ZXJJZF07XG4gICAgaWYgKHRoaXMuY29udGFpbmVkTm9kZXNbY2hpbGRDbHVzdGVySWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJub2RlIHdpdGggaWQ6IFwiICsgY2hpbGRDbHVzdGVySWQgKyBcIiBub3QgaW4gY3VycmVudCBjbHVzdGVyXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY2hpbGRDbHVzdGVyLmlzQ2x1c3Rlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm9kZSB3aXRoIGlkOiBcIiArIGNoaWxkQ2x1c3RlcklkICsgXCIgaXMgbm90IGEgY2x1c3RlclwiKTtcbiAgICB9XG5cbiAgICAvLyBEaXNjb25uZWN0IGNoaWxkIGNsdXN0ZXIgZnJvbSBjdXJyZW50IGNsdXN0ZXJcbiAgICBkZWxldGUgdGhpcy5jb250YWluZWROb2Rlc1tjaGlsZENsdXN0ZXJJZF07XG4gICAgZm9yRWFjaChjaGlsZENsdXN0ZXIuZWRnZXMsIChlZGdlKSA9PiB7XG4gICAgICBkZWxldGUgdGhpcy5jb250YWluZWRFZGdlc1tlZGdlLmlkXTtcbiAgICB9KTtcblxuICAgIC8vIFRyYW5zZmVyIG5vZGVzIGFuZCBlZGdlc1xuICAgIGZvckVhY2goY2hpbGRDbHVzdGVyLmNvbnRhaW5lZE5vZGVzLCAobm9kZSwgbm9kZUlkKSA9PiB7XG4gICAgICB0aGlzLmNvbnRhaW5lZE5vZGVzW25vZGVJZF0gPSBub2RlO1xuICAgIH0pO1xuICAgIGNoaWxkQ2x1c3Rlci5jb250YWluZWROb2RlcyA9IHt9O1xuXG4gICAgZm9yRWFjaChjaGlsZENsdXN0ZXIuY29udGFpbmVkRWRnZXMsIChlZGdlLCBlZGdlSWQpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVkRWRnZXNbZWRnZUlkXSA9IGVkZ2U7XG4gICAgfSk7XG4gICAgY2hpbGRDbHVzdGVyLmNvbnRhaW5lZEVkZ2VzID0ge307XG5cbiAgICAvLyBUcmFuc2ZlciBlZGdlcyB3aXRoaW4gY2x1c3RlciBlZGdlcyB3aGljaCBhcmUgY2x1c3RlcmVkXG4gICAgZm9yRWFjaChjaGlsZENsdXN0ZXIuZWRnZXMsIChjbHVzdGVyRWRnZSkgPT4ge1xuICAgICAgZm9yRWFjaCh0aGlzLmVkZ2VzLCAocGFyZW50Q2x1c3RlckVkZ2UpID0+IHtcbiAgICAgICAgLy8gQXNzdW1wdGlvbjogYSBjbHVzdGVyZWQgZWRnZSBjYW4gb25seSBiZSBwcmVzZW50IGluIGEgc2luZ2xlIGNsdXN0ZXJpbmcgZWRnZVxuICAgICAgICAvLyBOb3QgdGVzdGVkIGhlcmVcbiAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnRDbHVzdGVyRWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5pbmRleE9mKFxuICAgICAgICAgIGNsdXN0ZXJFZGdlLmlkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHJldHVybjtcblxuICAgICAgICBmb3JFYWNoKGNsdXN0ZXJFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLCAoc3JjSWQpID0+IHtcbiAgICAgICAgICBwYXJlbnRDbHVzdGVyRWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5wdXNoKHNyY0lkKTtcblxuICAgICAgICAgIC8vIE1haW50YWluIGNvcnJlY3QgYm9va2tlZXBpbmcgZm9yIHRyYW5zZmVycmVkIGVkZ2VcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbc3JjSWRdLmVkZ2VSZXBsYWNlZEJ5SWQgPSBwYXJlbnRDbHVzdGVyRWRnZS5pZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGNsdXN0ZXIgZWRnZSBmcm9tIHBhcmVudCBjbHVzdGVyIGVkZ2VcbiAgICAgICAgcGFyZW50Q2x1c3RlckVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNoaWxkQ2x1c3Rlci5lZGdlcyA9IFtdO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENsdXN0ZXI7XG4iLCAiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiMgVE9ET1xuXG4tIGBlZGdlUmVwbGFjZWRCeUlkYCBub3QgY2xlYW5lZCB1cCB5ZXQgb24gY2x1c3RlciBlZGdlIHJlbW92YWxcbi0gYWxsb3dTaW5nbGVOb2RlQ2x1c3RlciBjb3VsZCBiZSBhIGdsb2JhbCBvcHRpb24gYXMgd2VsbDsgY3VycmVudGx5IG5lZWRzIHRvIGFsd2F5c1xuICBiZSBwYXNzZWQgdG8gY2x1c3RlcmluZyBtZXRob2RzXG5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIyBTdGF0ZSBNb2RlbCBmb3IgQ2x1c3RlcmluZ1xuXG5UaGUgdG90YWwgc3RhdGUgZm9yIGNsdXN0ZXJpbmcgaXMgbm9uLXRyaXZpYWwuIEl0IGlzIHVzZWZ1bCB0byBoYXZlIGEgbW9kZWxcbmF2YWlsYWJsZSBhcyB0byBob3cgaXQgd29ya3MuIFRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIHRoZSByZWxldmFudCBzdGF0ZSBpdGVtcy5cblxuXG4jIyBOZXR3b3JrIFN0YXRlXG5cblRoZSBmb2xsb3dpbmcgYG5ldHdvcmtgLW1lbWJlcnMgYXJlIHJlbGV2YW50IHRvIGNsdXN0ZXJpbmc6XG5cbi0gYGJvZHkubm9kZXNgICAgICAgIC0gYWxsIG5vZGVzIGFjdGl2ZWx5IHBhcnRpY2lwYXRpbmcgaW4gdGhlIG5ldHdvcmtcbi0gYGJvZHkuZWRnZXNgICAgICAgIC0gc2FtZSBmb3IgZWRnZXNcbi0gYGJvZHkubm9kZUluZGljZXNgIC0gaWQncyBvZiBub2RlcyB0aGF0IGFyZSB2aXNpYmxlIGF0IGEgZ2l2ZW4gbW9tZW50XG4tIGBib2R5LmVkZ2VJbmRpY2VzYCAtIHNhbWUgZm9yIGVkZ2VzXG5cblRoaXMgaW5jbHVkZXM6XG5cbi0gaGVscGVyIG5vZGVzIGZvciBkcmFnZ2luZyBpbiBgbWFuaXB1bGF0aW9uYFxuLSBoZWxwZXIgbm9kZXMgZm9yIGVkZ2UgdHlwZSBgZHluYW1pY2Bcbi0gY2x1c3RlciBub2RlcyBhbmQgZWRnZXNcbi0gdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiB0aGlzLlxuXG5BIG5vZGUvZWRnZSBtYXkgYmUgbWlzc2luZyBpbiB0aGUgYEluZGljZXNgIG1lbWJlciBpZjpcblxuLSBpdCBpcyBhIGhlbHBlciBub2RlXG4tIHRoZSBub2RlIG9yIGVkZ2Ugc3RhdGUgaGFzIG9wdGlvbiBgaGlkZGVuYCBzZXRcbi0gSXQgaXMgbm90IHZpc2libGUgZHVlIHRvIGNsdXN0ZXJpbmdcblxuXG4jIyBDbHVzdGVyaW5nIFN0YXRlXG5cbkZvciB0aGUgaGFzaGVzLCB0aGUgaWQncyBvZiB0aGUgbm9kZXMvZWRnZXMgYXJlIHVzZWQgYXMga2V5LlxuXG5NZW1iZXIgYG5ldHdvcmsuY2x1c3RlcmluZ2AgY29udGFpbnMgdGhlIGZvbGxvd2luZyBpdGVtczpcblxuLSBgY2x1c3RlcmVkTm9kZXNgIC0gaGFzaCB3aXRoIHZhbHVlczogeyBjbHVzdGVySWQ6IDxpZCBvZiBjbHVzdGVyPiwgbm9kZTogPG5vZGUgaW5zdGFuY2U+fVxuLSBgY2x1c3RlcmVkRWRnZXNgIC0gaGFzaCB3aXRoIHZhbHVlczogcmVzdG9yZSBpbmZvcm1hdGlvbiBmb3IgZ2l2ZW4gZWRnZVxuXG5cbkR1ZSB0byBuZXN0aW5nIG9mIGNsdXN0ZXJzLCB0aGVzZSBtZW1iZXJzIGNhbiBjb250YWluIGNsdXN0ZXIgbm9kZXMgYW5kIGVkZ2VzIGFzIHdlbGwuXG5cblRoZSBpbXBvcnRhbnQgdGhpbmcgdG8gbm90ZSBoZXJlLCBpcyB0aGF0IHRoZSBjbHVzdGVyZWQgbm9kZXMgYW5kIGVkZ2VzIGFsc29cbmFwcGVhciBpbiB0aGUgbWVtYmVycyBvZiB0aGUgY2x1c3RlciBub2Rlcy4gRm9yIGRhdGEgdXBkYXRlLCBpdCBpcyB0aGVyZWZvcmVcbmltcG9ydGFudCB0byBzY2FuIHRoZXNlIGxpc3RzIGFzIHdlbGwgYXMgdGhlIGNsdXN0ZXIgbm9kZXMuXG5cblxuIyMjIENsdXN0ZXIgTm9kZVxuXG5BIGNsdXN0ZXIgbm9kZSBoYXMgdGhlIGZvbGxvd2luZyBleHRyYSBmaWVsZHM6XG5cbi0gYGlzQ2x1c3RlciA6IHRydWVgIC0gaW5kaWNhdGlvbiB0aGF0IHRoaXMgaXMgYSBjbHVzdGVyIG5vZGVcbi0gYGNvbnRhaW5lZE5vZGVzYCAgIC0gaGFzaCBvZiBub2RlcyBjb250YWluZWQgaW4gdGhpcyBjbHVzdGVyXG4tIGBjb250YWluZWRFZGdlc2AgICAtIHNhbWUgZm9yIGVkZ2VzXG4tIGBlZGdlc2AgICAgICAgICAgICAtIGFycmF5IG9mIGNsdXN0ZXIgZWRnZXMgZm9yIHRoaXMgbm9kZVxuXG5cbioqTk9URToqKlxuXG4tIGBjb250YWluZWRFZGdlc2AgY2FuIGFsc28gY29udGFpbiBlZGdlcyB3aGljaCBhcmUgbm90IGNsdXN0ZXJlZDsgZS5nLiBhbiBlZGdlXG4gICBjb25uZWN0aW5nIHR3byBub2RlcyBpbiB0aGUgc2FtZSBjbHVzdGVyLlxuXG5cbiMjIyBDbHVzdGVyIEVkZ2VcblxuVGhlc2UgYXJlIHRoZSBpdGVtcyBpbiB0aGUgYGVkZ2VzYCBtZW1iZXIgb2YgYSBjbHVzdGVyZWQgbm9kZS4gVGhleSBoYXZlIHRoZVxuZm9sbG93aW5nIHJlbGV2YW50IG1lbWJlcnM6XG5cbi0gJ2NsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzYCAtIGFycmF5IG9mIGlkJ3Mgb2YgZWRnZXMgcmVwbGFjZWQgYnkgdGhpcyBlZGdlXG5cbk5vdGUgdGhhdCBpdCdzIHBvc3NpYmxlIHRvIG5lc3QgY2x1c3RlcnMsIHNvIHRoYXQgYGNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzYFxuY2FuIGNvbnRhaW4gZWRnZSBpZCdzIG9mIG90aGVyIGNsdXN0ZXJzLlxuXG5cbiMjIyBDbHVzdGVyZWQgRWRnZVxuXG5UaGlzIGlzIGFueSBlZGdlIGNvbnRhaW5lZCBieSBhIGNsdXN0ZXIgZWRnZS4gSXQgZ2V0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWxcbm1lbWJlcjpcblxuLSBgZWRnZVJlcGxhY2VkQnlJZGAgLSBpZCBvZiB0aGUgY2x1c3RlciBlZGdlIGluIHdoaWNoIGN1cnJlbnQgZWRnZSBpcyBjbHVzdGVyZWRcblxuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbmltcG9ydCB7IGRlZXBFeHRlbmQsIGZvckVhY2ggfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyB2NCBhcyByYW5kb21VVUlEIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCBOZXR3b3JrVXRpbCBmcm9tIFwiLi4vTmV0d29ya1V0aWxcIjtcbmltcG9ydCBDbHVzdGVyIGZyb20gXCIuL2NvbXBvbmVudHMvbm9kZXMvQ2x1c3RlclwiO1xuaW1wb3J0IEVkZ2UgZnJvbSBcIi4vY29tcG9uZW50cy9FZGdlXCI7IC8vIE9ubHkgbmVlZGVkIGZvciBjaGVjayBvbiB0eXBlIVxuaW1wb3J0IE5vZGUgZnJvbSBcIi4vY29tcG9uZW50cy9Ob2RlXCI7IC8vIE9ubHkgbmVlZGVkIGZvciBjaGVjayBvbiB0eXBlIVxuXG4vKipcbiAqIFRoZSBjbHVzdGVyaW5nIGVuZ2luZVxuICovXG5jbGFzcyBDbHVzdGVyRW5naW5lIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5KSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNsdXN0ZXJlZE5vZGVzID0ge307IC8vIGtleTogbm9kZSBpZCwgdmFsdWU6IHsgY2x1c3RlcklkOiA8aWQgb2YgY2x1c3Rlcj4sIG5vZGU6IDxub2RlIGluc3RhbmNlPn1cbiAgICB0aGlzLmNsdXN0ZXJlZEVkZ2VzID0ge307IC8vIGtleTogZWRnZSBpZCwgdmFsdWU6IHJlc3RvcmUgaW5mb3JtYXRpb24gZm9yIGdpdmVuIGVkZ2VcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7fTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXNldERhdGFcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5jbHVzdGVyZWROb2RlcyA9IHt9O1xuICAgICAgdGhpcy5jbHVzdGVyZWRFZGdlcyA9IHt9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBodWJzaXplXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBjbHVzdGVyQnlIdWJzaXplKGh1YnNpemUsIG9wdGlvbnMpIHtcbiAgICBpZiAoaHVic2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBodWJzaXplID0gdGhpcy5fZ2V0SHViU2l6ZSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGh1YnNpemUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIG9wdGlvbnMgPSB0aGlzLl9jaGVja09wdGlvbnMoaHVic2l6ZSk7XG4gICAgICBodWJzaXplID0gdGhpcy5fZ2V0SHViU2l6ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVzVG9DbHVzdGVyID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldXTtcbiAgICAgIGlmIChub2RlLmVkZ2VzLmxlbmd0aCA+PSBodWJzaXplKSB7XG4gICAgICAgIG5vZGVzVG9DbHVzdGVyLnB1c2gobm9kZS5pZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlc1RvQ2x1c3Rlci5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jbHVzdGVyQnlDb25uZWN0aW9uKG5vZGVzVG9DbHVzdGVyW2ldLCBvcHRpb25zLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGxvb3Agb3ZlciBhbGwgbm9kZXMsIGNoZWNrIGlmIHRoZXkgYWRoZXJlIHRvIHRoZSBjb25kaXRpb24gYW5kIGNsdXN0ZXIgaWYgbmVlZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3RlcihvcHRpb25zID0ge30sIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIGlmIChvcHRpb25zLmpvaW5Db25kaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBjYWxsIGNsdXN0ZXJCeU5vZGVEYXRhIHdpdGhvdXQgYSBqb2luQ29uZGl0aW9uIGZ1bmN0aW9uIGluIHRoZSBvcHRpb25zLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoZSBvcHRpb25zIG9iamVjdCBpcyBmaW5lLCBhcHBlbmQgaWYgbmVlZGVkXG4gICAgb3B0aW9ucyA9IHRoaXMuX2NoZWNrT3B0aW9ucyhvcHRpb25zKTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZXNPYmogPSB7fTtcbiAgICBjb25zdCBjaGlsZEVkZ2VzT2JqID0ge307XG5cbiAgICAvLyBjb2xsZWN0IHRoZSBub2RlcyB0aGF0IHdpbGwgYmUgaW4gdGhlIGNsdXN0ZXJcbiAgICBmb3JFYWNoKHRoaXMuYm9keS5ub2RlcywgKG5vZGUsIG5vZGVJZCkgPT4ge1xuICAgICAgaWYgKG5vZGUub3B0aW9ucyAmJiBvcHRpb25zLmpvaW5Db25kaXRpb24obm9kZS5vcHRpb25zKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjaGlsZE5vZGVzT2JqW25vZGVJZF0gPSBub2RlO1xuXG4gICAgICAgIC8vIGNvbGxlY3QgdGhlIGVkZ2VzIHRoYXQgd2lsbCBiZSBpbiB0aGUgY2x1c3RlclxuICAgICAgICBmb3JFYWNoKG5vZGUuZWRnZXMsIChlZGdlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2NsdXN0ZXIoY2hpbGROb2Rlc09iaiwgY2hpbGRFZGdlc09iaiwgb3B0aW9ucywgcmVmcmVzaERhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsdXN0ZXIgYWxsIG5vZGVzIGluIHRoZSBuZXR3b3JrIHRoYXQgaGF2ZSBvbmx5IFggZWRnZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VDb3VudFxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3RlckJ5RWRnZUNvdW50KGVkZ2VDb3VudCwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgb3B0aW9ucyA9IHRoaXMuX2NoZWNrT3B0aW9ucyhvcHRpb25zKTtcbiAgICBjb25zdCBjbHVzdGVycyA9IFtdO1xuICAgIGNvbnN0IHVzZWROb2RlcyA9IHt9O1xuICAgIGxldCBlZGdlLCBlZGdlcywgcmVsZXZhbnRFZGdlQ291bnQ7XG4gICAgLy8gY29sbGVjdCB0aGUgbm9kZXMgdGhhdCB3aWxsIGJlIGluIHRoZSBjbHVzdGVyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkTm9kZXNPYmogPSB7fTtcbiAgICAgIGNvbnN0IGNoaWxkRWRnZXNPYmogPSB7fTtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IHRoaXMuYm9keS5ub2RlSW5kaWNlc1tpXTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcblxuICAgICAgLy8gaWYgdGhpcyBub2RlIGlzIGFscmVhZHkgdXNlZCBpbiBhbm90aGVyIGNsdXN0ZXIgdGhpcyBzZXNzaW9uLCB3ZSBkbyBub3QgaGF2ZSB0byByZS1ldmFsdWF0ZSBpdC5cbiAgICAgIGlmICh1c2VkTm9kZXNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlbGV2YW50RWRnZUNvdW50ID0gMDtcbiAgICAgICAgZWRnZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2RlLmVkZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgZWRnZSA9IG5vZGUuZWRnZXNbal07XG4gICAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGVkZ2UudG9JZCAhPT0gZWRnZS5mcm9tSWQpIHtcbiAgICAgICAgICAgICAgcmVsZXZhbnRFZGdlQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcyBub2RlIHF1YWxpZmllcywgd2UgY29sbGVjdCBpdHMgbmVpZ2hib3VycyB0byBzdGFydCB0aGUgY2x1c3RlcmluZyBwcm9jZXNzLlxuICAgICAgICBpZiAocmVsZXZhbnRFZGdlQ291bnQgPT09IGVkZ2VDb3VudCkge1xuICAgICAgICAgIGNvbnN0IGNoZWNrSm9pbkNvbmRpdGlvbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMuam9pbkNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIG9wdGlvbnMuam9pbkNvbmRpdGlvbiA9PT0gbnVsbFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuam9pbkNvbmRpdGlvbihjbG9uZWRPcHRpb25zKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgbGV0IGdhdGhlcmluZ1N1Y2Nlc3NmdWwgPSB0cnVlO1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGVkZ2UgPSBlZGdlc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZUlkID0gdGhpcy5fZ2V0Q29ubmVjdGVkSWQoZWRnZSwgbm9kZUlkKTtcbiAgICAgICAgICAgIC8vIGFkZCB0aGUgbm9kZXMgdG8gdGhlIGxpc3QgYnkgdGhlIGpvaW4gY29uZGl0aW9uLlxuICAgICAgICAgICAgaWYgKGNoZWNrSm9pbkNvbmRpdGlvbihub2RlKSkge1xuICAgICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICAgICAgY2hpbGROb2Rlc09ialtub2RlSWRdID0gbm9kZTtcbiAgICAgICAgICAgICAgY2hpbGROb2Rlc09ialtjaGlsZE5vZGVJZF0gPSB0aGlzLmJvZHkubm9kZXNbY2hpbGROb2RlSWRdO1xuICAgICAgICAgICAgICB1c2VkTm9kZXNbbm9kZUlkXSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyB0aGlzIG5vZGUgZG9lcyBub3QgcXVhbGlmeSBhZnRlciBhbGwuXG4gICAgICAgICAgICAgIGdhdGhlcmluZ1N1Y2Nlc3NmdWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gYWRkIHRvIHRoZSBjbHVzdGVyIHF1ZXVlXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMoY2hpbGRFZGdlc09iaikubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgZ2F0aGVyaW5nU3VjY2Vzc2Z1bCA9PT0gdHJ1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZWFyY2ggZm9yIGNsdXN0ZXIgZGF0YSB0aGF0IGNvbnRhaW5zIGFueSBvZiB0aGUgbm9kZSBpZCdzXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgbm8gam9pbkNvbmRpdGlvbiwgb3RoZXJ3aXNlIHJldHVybiB2YWx1ZSBvZiBqb2luQ29uZGl0aW9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGZpbmRDbHVzdGVyRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBjbHVzdGVycy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgIC8vIFNlYXJjaCBmb3IgYSBjbHVzdGVyIGNvbnRhaW5pbmcgYW55IG9mIHRoZSBub2RlIGlkJ3NcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gaW4gY2hpbGROb2Rlc09iaikge1xuICAgICAgICAgICAgICAgICAgaWYgKGNsdXN0ZXJzW25dLm5vZGVzW21dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsdXN0ZXJzW25dO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBJZiBhbnkgb2YgdGhlIGZvdW5kIG5vZGVzIGlzIHBhcnQgb2YgYSBjbHVzdGVyIGZvdW5kIGluIHRoaXMgbWV0aG9kLFxuICAgICAgICAgICAgLy8gYWRkIHRoZSBjdXJyZW50IHZhbHVlcyB0byB0aGF0IGNsdXN0ZXJcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kQ2x1c3RlciA9IGZpbmRDbHVzdGVyRGF0YSgpO1xuICAgICAgICAgICAgaWYgKGZvdW5kQ2x1c3RlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCBub2RlcyB0byBmb3VuZCBjbHVzdGVyIGlmIG5vdCBwcmVzZW50XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbSBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kQ2x1c3Rlci5ub2Rlc1ttXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBmb3VuZENsdXN0ZXIubm9kZXNbbV0gPSBjaGlsZE5vZGVzT2JqW21dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIEFkZCBlZGdlcyB0byBmb3VuZCBjbHVzdGVyLCBpZiBub3QgcHJlc2VudFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gaW4gY2hpbGRFZGdlc09iaikge1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZENsdXN0ZXIuZWRnZXNbbV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgZm91bmRDbHVzdGVyLmVkZ2VzW21dID0gY2hpbGRFZGdlc09ialttXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBjbHVzdGVyIGdyb3VwXG4gICAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2goeyBub2RlczogY2hpbGROb2Rlc09iaiwgZWRnZXM6IGNoaWxkRWRnZXNPYmogfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbHVzdGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5fY2x1c3RlcihjbHVzdGVyc1tpXS5ub2RlcywgY2x1c3RlcnNbaV0uZWRnZXMsIG9wdGlvbnMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocmVmcmVzaERhdGEgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsdXN0ZXIgYWxsIG5vZGVzIGluIHRoZSBuZXR3b3JrIHRoYXQgaGF2ZSBvbmx5IDEgZWRnZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWZyZXNoRGF0YT10cnVlXVxuICAgKi9cbiAgY2x1c3Rlck91dGxpZXJzKG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIHRoaXMuY2x1c3RlckJ5RWRnZUNvdW50KDEsIG9wdGlvbnMsIHJlZnJlc2hEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGFsbCBub2RlcyBpbiB0aGUgbmV0d29yayB0aGF0IGhhdmUgb25seSAyIGVkZ2VcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVmcmVzaERhdGE9dHJ1ZV1cbiAgICovXG4gIGNsdXN0ZXJCcmlkZ2VzKG9wdGlvbnMsIHJlZnJlc2hEYXRhID0gdHJ1ZSkge1xuICAgIHRoaXMuY2x1c3RlckJ5RWRnZUNvdW50KDIsIG9wdGlvbnMsIHJlZnJlc2hEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdWNrIGFsbCBjb25uZWN0ZWQgbm9kZXMgb2YgYSBub2RlIGludG8gdGhlIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlZnJlc2hEYXRhPXRydWVdXG4gICAqL1xuICBjbHVzdGVyQnlDb25uZWN0aW9uKG5vZGVJZCwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgLy8ga2lsbCBjb25kaXRpb25zXG4gICAgaWYgKG5vZGVJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBub2RlSWQgc3VwcGxpZWQgdG8gY2x1c3RlckJ5Q29ubmVjdGlvbiFcIik7XG4gICAgfVxuICAgIGlmICh0aGlzLmJvZHkubm9kZXNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlIG5vZGVJZCBnaXZlbiB0byBjbHVzdGVyQnlDb25uZWN0aW9uIGRvZXMgbm90IGV4aXN0IVwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICBvcHRpb25zID0gdGhpcy5fY2hlY2tPcHRpb25zKG9wdGlvbnMsIG5vZGUpO1xuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy54ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnggPSBub2RlLng7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy55ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnkgPSBub2RlLnk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy5maXhlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmNsdXN0ZXJOb2RlUHJvcGVydGllcy5maXhlZCA9IHt9O1xuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuZml4ZWQueCA9IG5vZGUub3B0aW9ucy5maXhlZC54O1xuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuZml4ZWQueSA9IG5vZGUub3B0aW9ucy5maXhlZC55O1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkTm9kZXNPYmogPSB7fTtcbiAgICBjb25zdCBjaGlsZEVkZ2VzT2JqID0ge307XG4gICAgY29uc3QgcGFyZW50Tm9kZUlkID0gbm9kZS5pZDtcbiAgICBjb25zdCBwYXJlbnRDbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGUpO1xuICAgIGNoaWxkTm9kZXNPYmpbcGFyZW50Tm9kZUlkXSA9IG5vZGU7XG5cbiAgICAvLyBjb2xsZWN0IHRoZSBub2RlcyB0aGF0IHdpbGwgYmUgaW4gdGhlIGNsdXN0ZXJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBub2RlLmVkZ2VzW2ldO1xuICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBjaGlsZE5vZGVJZCA9IHRoaXMuX2dldENvbm5lY3RlZElkKGVkZ2UsIHBhcmVudE5vZGVJZCk7XG5cbiAgICAgICAgLy8gaWYgdGhlIGNoaWxkIG5vZGUgaXMgbm90IGluIGEgY2x1c3RlclxuICAgICAgICBpZiAodGhpcy5jbHVzdGVyZWROb2Rlc1tjaGlsZE5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChjaGlsZE5vZGVJZCAhPT0gcGFyZW50Tm9kZUlkKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5qb2luQ29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY2hpbGRFZGdlc09ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZXNPYmpbY2hpbGROb2RlSWRdID0gdGhpcy5ib2R5Lm5vZGVzW2NoaWxkTm9kZUlkXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGNsb25lIHRoZSBvcHRpb25zIGFuZCBpbnNlcnQgc29tZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZy5cbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRDbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKFxuICAgICAgICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tjaGlsZE5vZGVJZF1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuam9pbkNvbmRpdGlvbihcbiAgICAgICAgICAgICAgICAgIHBhcmVudENsb25lZE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICBjaGlsZENsb25lZE9wdGlvbnNcbiAgICAgICAgICAgICAgICApID09PSB0cnVlXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNoaWxkRWRnZXNPYmpbZWRnZS5pZF0gPSBlZGdlO1xuICAgICAgICAgICAgICAgIGNoaWxkTm9kZXNPYmpbY2hpbGROb2RlSWRdID0gdGhpcy5ib2R5Lm5vZGVzW2NoaWxkTm9kZUlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzd2FsbG93IHRoZSBlZGdlIGlmIGl0IGlzIHNlbGYtcmVmZXJlbmNpbmcuXG4gICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY2hpbGROb2RlSURzID0gT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubWFwKGZ1bmN0aW9uIChjaGlsZE5vZGUpIHtcbiAgICAgIHJldHVybiBjaGlsZE5vZGVzT2JqW2NoaWxkTm9kZV0uaWQ7XG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkTm9kZUtleSBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZE5vZGVzT2JqLCBjaGlsZE5vZGVLZXkpKVxuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY29uc3QgY2hpbGROb2RlID0gY2hpbGROb2Rlc09ialtjaGlsZE5vZGVLZXldO1xuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBjaGlsZE5vZGUuZWRnZXMubGVuZ3RoOyB5KyspIHtcbiAgICAgICAgY29uc3QgY2hpbGRFZGdlID0gY2hpbGROb2RlLmVkZ2VzW3ldO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGROb2RlSURzLmluZGV4T2YodGhpcy5fZ2V0Q29ubmVjdGVkSWQoY2hpbGRFZGdlLCBjaGlsZE5vZGUuaWQpKSA+XG4gICAgICAgICAgLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2hpbGRFZGdlc09ialtjaGlsZEVkZ2UuaWRdID0gY2hpbGRFZGdlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2NsdXN0ZXIoY2hpbGROb2Rlc09iaiwgY2hpbGRFZGdlc09iaiwgb3B0aW9ucywgcmVmcmVzaERhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgZWRnZXMgdGhhdCB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBjbHVzdGVyXG4gICAqIEl0IGxvb2tzIGZvciBlZGdlcyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIG5vZGVzIGZyb20gdGhlIFwib3V0c2lkZScgb2YgdGhlIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7e05vZGUuaWQ6IHZpcy5Ob2RlfX0gY2hpbGROb2Rlc09ialxuICAgKiBAcGFyYW0ge3t2aXMuRWRnZS5pZDogdmlzLkVkZ2V9fSBjaGlsZEVkZ2VzT2JqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjbHVzdGVyTm9kZVByb3BlcnRpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUNsdXN0ZXJFZGdlcyhcbiAgICBjaGlsZE5vZGVzT2JqLFxuICAgIGNoaWxkRWRnZXNPYmosXG4gICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICApIHtcbiAgICBsZXQgZWRnZSwgY2hpbGROb2RlSWQsIGNoaWxkTm9kZSwgdG9JZCwgZnJvbUlkLCBvdGhlck5vZGVJZDtcblxuICAgIC8vIGxvb3Agb3ZlciBhbGwgY2hpbGQgbm9kZXMgYW5kIHRoZWlyIGVkZ2VzIHRvIGZpbmQgZWRnZXMgZ29pbmcgb3V0IG9mIHRoZSBjbHVzdGVyXG4gICAgLy8gdGhlc2UgZWRnZXMgd2lsbCBiZSByZXBsYWNlZCBieSBjbHVzdGVyRWRnZXMuXG4gICAgY29uc3QgY2hpbGRLZXlzID0gT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaik7XG4gICAgY29uc3QgY3JlYXRlRWRnZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGROb2RlSWQgPSBjaGlsZEtleXNbaV07XG4gICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzT2JqW2NoaWxkTm9kZUlkXTtcblxuICAgICAgLy8gY29uc3RydWN0IG5ldyBlZGdlcyBmcm9tIHRoZSBjbHVzdGVyIHRvIG90aGVyc1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaGlsZE5vZGUuZWRnZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZWRnZSA9IGNoaWxkTm9kZS5lZGdlc1tqXTtcbiAgICAgICAgLy8gd2Ugb25seSBoYW5kbGUgZWRnZXMgdGhhdCBhcmUgdmlzaWJsZSB0byB0aGUgc3lzdGVtLCBub3QgdGhlIGRpc2FibGVkIG9uZXMgZnJvbSB0aGUgY2x1c3RlcmluZyBwcm9jZXNzLlxuICAgICAgICBpZiAodGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gc2VsZi1yZWZlcmVuY2luZyBlZGdlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBcImhpZGRlblwiIGxpc3RcbiAgICAgICAgICBpZiAoZWRnZS50b0lkID09IGVkZ2UuZnJvbUlkKSB7XG4gICAgICAgICAgICBjaGlsZEVkZ2VzT2JqW2VkZ2UuaWRdID0gZWRnZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2V0IHVwIHRoZSBmcm9tIGFuZCB0by5cbiAgICAgICAgICAgIGlmIChlZGdlLnRvSWQgPT0gY2hpbGROb2RlSWQpIHtcbiAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhIGRvdWJsZSBlcXVhbHMgYmVjYXVzZSBpbnRzIGFuZCBzdHJpbmdzIGNhbiBiZSBpbnRlcmNoYW5nZWQgaGVyZS5cbiAgICAgICAgICAgICAgdG9JZCA9IGNsdXN0ZXJOb2RlUHJvcGVydGllcy5pZDtcbiAgICAgICAgICAgICAgZnJvbUlkID0gZWRnZS5mcm9tSWQ7XG4gICAgICAgICAgICAgIG90aGVyTm9kZUlkID0gZnJvbUlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdG9JZCA9IGVkZ2UudG9JZDtcbiAgICAgICAgICAgICAgZnJvbUlkID0gY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkO1xuICAgICAgICAgICAgICBvdGhlck5vZGVJZCA9IHRvSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gT25seSBlZGdlcyBmcm9tIHRoZSBjbHVzdGVyIG91dHdhcmRzIGFyZSBiZWluZyByZXBsYWNlZC5cbiAgICAgICAgICBpZiAoY2hpbGROb2Rlc09ialtvdGhlck5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3JlYXRlRWRnZXMucHVzaCh7IGVkZ2U6IGVkZ2UsIGZyb21JZDogZnJvbUlkLCB0b0lkOiB0b0lkIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vXG4gICAgLy8gSGVyZSB3ZSBhY3R1YWxseSBjcmVhdGUgdGhlIHJlcGxhY2VtZW50IGVkZ2VzLlxuICAgIC8vXG4gICAgLy8gV2UgY291bGQgbm90IGRvIHRoaXMgaW4gdGhlIGxvb3AgYWJvdmUgYXMgdGhlIGNyZWF0aW9uIHByb2Nlc3NcbiAgICAvLyB3b3VsZCBhZGQgYW4gZWRnZSB0byB0aGUgZWRnZXMgYXJyYXkgd2UgYXJlIGl0ZXJhdGluZyBvdmVyLlxuICAgIC8vXG4gICAgLy8gTk9URTogYSBjbHVzdGVyZWQgZWRnZSBjYW4gaGF2ZSBtdWx0aXBsZSBiYXNlIGVkZ2VzIVxuICAgIC8vXG4gICAgY29uc3QgbmV3RWRnZXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSBjbHVzdGVyIGVkZ2Ugd2hpY2ggbWF0Y2hlcyB0aGUgZ2l2ZW4gY3JlYXRlZCBlZGdlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHt2aXMuRWRnZX0gY3JlYXRlZEVkZ2VcbiAgICAgKiBAcmV0dXJucyB7dmlzLkVkZ2V9XG4gICAgICovXG4gICAgY29uc3QgZ2V0TmV3RWRnZSA9IGZ1bmN0aW9uIChjcmVhdGVkRWRnZSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuZXdFZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBuZXdFZGdlID0gbmV3RWRnZXNbal07XG5cbiAgICAgICAgLy8gV2UgcmVwbGFjZSBib3RoIHRvIGFuZCBmcm9tIGVkZ2VzIHdpdGggYSBzaW5nbGUgY2x1c3RlciBlZGdlXG4gICAgICAgIGNvbnN0IG1hdGNoVG9EaXJlY3Rpb24gPVxuICAgICAgICAgIGNyZWF0ZWRFZGdlLmZyb21JZCA9PT0gbmV3RWRnZS5mcm9tSWQgJiZcbiAgICAgICAgICBjcmVhdGVkRWRnZS50b0lkID09PSBuZXdFZGdlLnRvSWQ7XG4gICAgICAgIGNvbnN0IG1hdGNoRnJvbURpcmVjdGlvbiA9XG4gICAgICAgICAgY3JlYXRlZEVkZ2UuZnJvbUlkID09PSBuZXdFZGdlLnRvSWQgJiZcbiAgICAgICAgICBjcmVhdGVkRWRnZS50b0lkID09PSBuZXdFZGdlLmZyb21JZDtcblxuICAgICAgICBpZiAobWF0Y2hUb0RpcmVjdGlvbiB8fCBtYXRjaEZyb21EaXJlY3Rpb24pIHtcbiAgICAgICAgICByZXR1cm4gbmV3RWRnZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjcmVhdGVFZGdlcy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgY3JlYXRlZEVkZ2UgPSBjcmVhdGVFZGdlc1tqXTtcbiAgICAgIGNvbnN0IGVkZ2UgPSBjcmVhdGVkRWRnZS5lZGdlO1xuICAgICAgbGV0IG5ld0VkZ2UgPSBnZXROZXdFZGdlKGNyZWF0ZWRFZGdlKTtcblxuICAgICAgaWYgKG5ld0VkZ2UgPT09IG51bGwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgY2x1c3RlcmVkIGVkZ2UgZm9yIHRoaXMgY29ubmVjdGlvblxuICAgICAgICBuZXdFZGdlID0gdGhpcy5fY3JlYXRlQ2x1c3RlcmVkRWRnZShcbiAgICAgICAgICBjcmVhdGVkRWRnZS5mcm9tSWQsXG4gICAgICAgICAgY3JlYXRlZEVkZ2UudG9JZCxcbiAgICAgICAgICBlZGdlLFxuICAgICAgICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllc1xuICAgICAgICApO1xuXG4gICAgICAgIG5ld0VkZ2VzLnB1c2gobmV3RWRnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdFZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLnB1c2goZWRnZS5pZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFsc28gcmVmZXJlbmNlIHRoZSBuZXcgZWRnZSBpbiB0aGUgb2xkIGVkZ2VcbiAgICAgIHRoaXMuYm9keS5lZGdlc1tlZGdlLmlkXS5lZGdlUmVwbGFjZWRCeUlkID0gbmV3RWRnZS5pZDtcblxuICAgICAgLy8gaGlkZSB0aGUgcmVwbGFjZWQgZWRnZVxuICAgICAgdGhpcy5fYmFja3VwRWRnZU9wdGlvbnMoZWRnZSk7XG4gICAgICBlZGdlLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3VwcGxpZWQgdG8gdGhlIGRpZmZlcmVudCBjbHVzdGVyIGZ1bmN0aW9uc1xuICAgKiBmb3IgY2VydGFpbiBmaWVsZHMgYW5kIGluc2VydHMgZGVmYXVsdHMgaWYgbmVlZGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrT3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICBpZiAob3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXMgPSB7fTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9ICAgIGNoaWxkTm9kZXNPYmogICAgICAgICB8IG9iamVjdCB3aXRoIG5vZGUgb2JqZWN0cywgaWQgYXMga2V5cywgc2FtZSBhcyBjaGlsZE5vZGVzIGV4Y2VwdCBpdCBhbHNvIGNvbnRhaW5zIGEgc291cmNlIG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9ICAgIGNoaWxkRWRnZXNPYmogICAgICAgICB8IG9iamVjdCB3aXRoIGVkZ2Ugb2JqZWN0cywgaWQgYXMga2V5c1xuICAgKiBAcGFyYW0ge0FycmF5fSAgICAgb3B0aW9ucyAgICAgICAgICAgICAgIHwgb2JqZWN0IHdpdGgge2NsdXN0ZXJOb2RlUHJvcGVydGllcywgY2x1c3RlckVkZ2VQcm9wZXJ0aWVzLCBwcm9jZXNzUHJvcGVydGllc31cbiAgICogQHBhcmFtIHtib29sZWFufSAgIHJlZnJlc2hEYXRhIHwgd2hlbiB0cnVlLCBkbyBub3Qgd3JhcCB1cFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NsdXN0ZXIoY2hpbGROb2Rlc09iaiwgY2hpbGRFZGdlc09iaiwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgLy8gUmVtb3ZlIG5vZGVzIHdoaWNoIGFyZSBhbHJlYWR5IGNsdXN0ZXJlZFxuICAgIGNvbnN0IHRtcE5vZGVzVG9SZW1vdmUgPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjaGlsZE5vZGVzT2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkTm9kZXNPYmosIG5vZGVJZCkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2x1c3RlcmVkTm9kZXNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdG1wTm9kZXNUb1JlbW92ZS5wdXNoKG5vZGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IHRtcE5vZGVzVG9SZW1vdmUubGVuZ3RoOyArK24pIHtcbiAgICAgIGRlbGV0ZSBjaGlsZE5vZGVzT2JqW3RtcE5vZGVzVG9SZW1vdmVbbl1dO1xuICAgIH1cblxuICAgIC8vIGtpbGwgY29uZGl0aW9uOiBubyBub2RlcyBkb24ndCBib3RoZXJcbiAgICBpZiAoT2JqZWN0LmtleXMoY2hpbGROb2Rlc09iaikubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhbGxvdyBjbHVzdGVycyBvZiAxIGlmIG9wdGlvbnMgYWxsb3dcbiAgICBpZiAoXG4gICAgICBPYmplY3Qua2V5cyhjaGlsZE5vZGVzT2JqKS5sZW5ndGggPT0gMSAmJlxuICAgICAgb3B0aW9ucy5jbHVzdGVyTm9kZVByb3BlcnRpZXMuYWxsb3dTaW5nbGVOb2RlQ2x1c3RlciAhPSB0cnVlXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGNsdXN0ZXJOb2RlUHJvcGVydGllcyA9IGRlZXBFeHRlbmQoe30sIG9wdGlvbnMuY2x1c3Rlck5vZGVQcm9wZXJ0aWVzKTtcblxuICAgIC8vIGNvbnN0cnVjdCB0aGUgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzXG4gICAgaWYgKG9wdGlvbnMucHJvY2Vzc1Byb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZ2V0IHRoZSBjaGlsZE5vZGUgb3B0aW9uc1xuICAgICAgY29uc3QgY2hpbGROb2Rlc09wdGlvbnMgPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNoaWxkTm9kZXNPYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZE5vZGVzT2JqLCBub2RlSWQpKSB7XG4gICAgICAgICAgY29uc3QgY2xvbmVkT3B0aW9ucyA9IE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhjaGlsZE5vZGVzT2JqW25vZGVJZF0pO1xuICAgICAgICAgIGNoaWxkTm9kZXNPcHRpb25zLnB1c2goY2xvbmVkT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZ2V0IGNsdXN0ZXIgcHJvcGVydGllcyBiYXNlZCBvbiBjaGlsZE5vZGVzXG4gICAgICBjb25zdCBjaGlsZEVkZ2VzT3B0aW9ucyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBlZGdlSWQgaW4gY2hpbGRFZGdlc09iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkRWRnZXNPYmosIGVkZ2VJZCkpIHtcbiAgICAgICAgICAvLyB0aGVzZSBjbHVzdGVyIGVkZ2VzIHdpbGwgYmUgcmVtb3ZlZCBvbiBjcmVhdGlvbiBvZiB0aGUgY2x1c3Rlci5cbiAgICAgICAgICBpZiAoZWRnZUlkLnN1YnN0cigwLCAxMikgIT09IFwiY2x1c3RlckVkZ2U6XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lZE9wdGlvbnMgPSBOZXR3b3JrVXRpbC5jbG9uZU9wdGlvbnMoXG4gICAgICAgICAgICAgIGNoaWxkRWRnZXNPYmpbZWRnZUlkXSxcbiAgICAgICAgICAgICAgXCJlZGdlXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjaGlsZEVkZ2VzT3B0aW9ucy5wdXNoKGNsb25lZE9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMgPSBvcHRpb25zLnByb2Nlc3NQcm9wZXJ0aWVzKFxuICAgICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMsXG4gICAgICAgIGNoaWxkTm9kZXNPcHRpb25zLFxuICAgICAgICBjaGlsZEVkZ2VzT3B0aW9uc1xuICAgICAgKTtcbiAgICAgIGlmICghY2x1c3Rlck5vZGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBwcm9jZXNzUHJvcGVydGllcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gcHJvcGVydGllcyFcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgYW4gdW5pcXVlIGlkO1xuICAgIGlmIChjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkID0gXCJjbHVzdGVyOlwiICsgcmFuZG9tVVVJRCgpO1xuICAgIH1cbiAgICBjb25zdCBjbHVzdGVySWQgPSBjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQ7XG5cbiAgICBpZiAoY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmxhYmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsdXN0ZXJOb2RlUHJvcGVydGllcy5sYWJlbCA9IFwiY2x1c3RlclwiO1xuICAgIH1cblxuICAgIC8vIGdpdmUgdGhlIGNsdXN0ZXJOb2RlIGEgcG9zaXRpb24gaWYgaXQgZG9lcyBub3QgaGF2ZSBvbmUuXG4gICAgbGV0IHBvcyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcG9zID0gdGhpcy5fZ2V0Q2x1c3RlclBvc2l0aW9uKGNoaWxkTm9kZXNPYmopO1xuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLnggPSBwb3MueDtcbiAgICB9XG4gICAgaWYgKGNsdXN0ZXJOb2RlUHJvcGVydGllcy55ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwb3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwb3MgPSB0aGlzLl9nZXRDbHVzdGVyUG9zaXRpb24oY2hpbGROb2Rlc09iaik7XG4gICAgICB9XG4gICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMueSA9IHBvcy55O1xuICAgIH1cblxuICAgIC8vIGZvcmNlIHRoZSBJRCB0byByZW1haW4gdGhlIHNhbWVcbiAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXMuaWQgPSBjbHVzdGVySWQ7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGNsdXN0ZXIgTm9kZVxuICAgIC8vIE5vdGUgdGhhdCBhbGxvd1NpbmdsZU5vZGVDbHVzdGVyLCBpZiBwcmVzZW50LCBpcyBzdG9yZWQgaW4gdGhlIG9wdGlvbnMgYXMgd2VsbFxuICAgIGNvbnN0IGNsdXN0ZXJOb2RlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVOb2RlKFxuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgICAgQ2x1c3RlclxuICAgICk7XG4gICAgY2x1c3Rlck5vZGUuY29udGFpbmVkTm9kZXMgPSBjaGlsZE5vZGVzT2JqO1xuICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzID0gY2hpbGRFZGdlc09iajtcbiAgICAvLyBjYWNoZSBhIGNvcHkgZnJvbSB0aGUgY2x1c3RlciBlZGdlIHByb3BlcnRpZXMgaWYgd2UgaGF2ZSB0byByZWNvbm5lY3Qgb3RoZXJzIGxhdGVyIG9uXG4gICAgY2x1c3Rlck5vZGUuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzID0gb3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXM7XG5cbiAgICAvLyBmaW5hbGx5IHB1dCB0aGUgY2x1c3RlciBub2RlIGludG8gZ2xvYmFsXG4gICAgdGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJOb2RlUHJvcGVydGllcy5pZF0gPSBjbHVzdGVyTm9kZTtcblxuICAgIHRoaXMuX2NsdXN0ZXJFZGdlcyhcbiAgICAgIGNoaWxkTm9kZXNPYmosXG4gICAgICBjaGlsZEVkZ2VzT2JqLFxuICAgICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLFxuICAgICAgb3B0aW9ucy5jbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgLy8gc2V0IElEIHRvIHVuZGVmaW5lZCBzbyBubyBkdXBsaWNhdGVzIGFyaXNlXG4gICAgY2x1c3Rlck5vZGVQcm9wZXJ0aWVzLmlkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gd3JhcCB1cFxuICAgIGlmIChyZWZyZXNoRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtFZGdlfSBlZGdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYmFja3VwRWRnZU9wdGlvbnMoZWRnZSkge1xuICAgIGlmICh0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2x1c3RlcmVkRWRnZXNbZWRnZS5pZF0gPSB7IHBoeXNpY3M6IGVkZ2Uub3B0aW9ucy5waHlzaWNzIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RWRnZX0gZWRnZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc3RvcmVFZGdlKGVkZ2UpIHtcbiAgICBjb25zdCBvcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2UuaWRdO1xuICAgIGlmIChvcmlnaW5hbE9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZWRnZS5zZXRPcHRpb25zKHsgcGh5c2ljczogb3JpZ2luYWxPcHRpb25zLnBoeXNpY3MgfSk7XG4gICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWRFZGdlc1tlZGdlLmlkXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBub2RlIGlzIGEgY2x1c3Rlci5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBpc0NsdXN0ZXIobm9kZUlkKSB7XG4gICAgaWYgKHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS5pc0NsdXN0ZXIgPT09IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb2RlIGRvZXMgbm90IGV4aXN0LlwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgY2x1c3RlciBub2RlIGJhc2VkIG9uIHdoYXQncyBpbnNpZGVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNoaWxkTm9kZXNPYmogICAgfCBvYmplY3Qgd2l0aCBub2RlIG9iamVjdHMsIGlkIGFzIGtleXNcbiAgICogQHJldHVybnMge3t4OiBudW1iZXIsIHk6IG51bWJlcn19XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q2x1c3RlclBvc2l0aW9uKGNoaWxkTm9kZXNPYmopIHtcbiAgICBjb25zdCBjaGlsZEtleXMgPSBPYmplY3Qua2V5cyhjaGlsZE5vZGVzT2JqKTtcbiAgICBsZXQgbWluWCA9IGNoaWxkTm9kZXNPYmpbY2hpbGRLZXlzWzBdXS54O1xuICAgIGxldCBtYXhYID0gY2hpbGROb2Rlc09ialtjaGlsZEtleXNbMF1dLng7XG4gICAgbGV0IG1pblkgPSBjaGlsZE5vZGVzT2JqW2NoaWxkS2V5c1swXV0ueTtcbiAgICBsZXQgbWF4WSA9IGNoaWxkTm9kZXNPYmpbY2hpbGRLZXlzWzBdXS55O1xuICAgIGxldCBub2RlO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgY2hpbGRLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gY2hpbGROb2Rlc09ialtjaGlsZEtleXNbaV1dO1xuICAgICAgbWluWCA9IG5vZGUueCA8IG1pblggPyBub2RlLnggOiBtaW5YO1xuICAgICAgbWF4WCA9IG5vZGUueCA+IG1heFggPyBub2RlLnggOiBtYXhYO1xuICAgICAgbWluWSA9IG5vZGUueSA8IG1pblkgPyBub2RlLnkgOiBtaW5ZO1xuICAgICAgbWF4WSA9IG5vZGUueSA+IG1heFkgPyBub2RlLnkgOiBtYXhZO1xuICAgIH1cblxuICAgIHJldHVybiB7IHg6IDAuNSAqIChtaW5YICsgbWF4WCksIHk6IDAuNSAqIChtaW5ZICsgbWF4WSkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIGEgY2x1c3RlciBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkVkZ2UuaWR9ICBjbHVzdGVyTm9kZUlkIHwgdGhlIElEIG9mIHRoZSBjbHVzdGVyIG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSByZWZyZXNoRGF0YSB8IHdyYXAgdXAgYWZ0ZXJ3YXJkcyBpZiBub3QgdHJ1ZVxuICAgKi9cbiAgb3BlbkNsdXN0ZXIoY2x1c3Rlck5vZGVJZCwgb3B0aW9ucywgcmVmcmVzaERhdGEgPSB0cnVlKSB7XG4gICAgLy8ga2lsbCBjb25kaXRpb25zXG4gICAgaWYgKGNsdXN0ZXJOb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY2x1c3Rlck5vZGVJZCBzdXBwbGllZCB0byBvcGVuQ2x1c3Rlci5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgY2x1c3Rlck5vZGUgPSB0aGlzLmJvZHkubm9kZXNbY2x1c3Rlck5vZGVJZF07XG5cbiAgICBpZiAoY2x1c3Rlck5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSBjbHVzdGVyTm9kZUlkIHN1cHBsaWVkIHRvIG9wZW5DbHVzdGVyIGRvZXMgbm90IGV4aXN0LlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjbHVzdGVyTm9kZS5pc0NsdXN0ZXIgIT09IHRydWUgfHxcbiAgICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZE5vZGVzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBub2RlOlwiICsgY2x1c3Rlck5vZGVJZCArIFwiIGlzIG5vdCBhIHZhbGlkIGNsdXN0ZXIuXCIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGN1cnJlbnQgY2x1c3RlciBpcyBjbHVzdGVyZWQgaXRzZWxmXG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLmZpbmROb2RlKGNsdXN0ZXJOb2RlSWQpO1xuICAgIGNvbnN0IHBhcmVudEluZGV4ID0gc3RhY2suaW5kZXhPZihjbHVzdGVyTm9kZUlkKSAtIDE7XG4gICAgaWYgKHBhcmVudEluZGV4ID49IDApIHtcbiAgICAgIC8vIEN1cnJlbnQgY2x1c3RlciBpcyBjbHVzdGVyZWQ7IHRyYW5zZmVyIGNvbnRhaW5lZCBub2RlcyBhbmQgZWRnZXMgdG8gcGFyZW50XG4gICAgICBjb25zdCBwYXJlbnRDbHVzdGVyTm9kZUlkID0gc3RhY2tbcGFyZW50SW5kZXhdO1xuICAgICAgY29uc3QgcGFyZW50Q2x1c3Rlck5vZGUgPSB0aGlzLmJvZHkubm9kZXNbcGFyZW50Q2x1c3Rlck5vZGVJZF07XG5cbiAgICAgIC8vIGNsdXN0ZXJpbmcuY2x1c3RlcmVkTm9kZXMgYW5kIGNsdXN0ZXJpbmcuY2x1c3RlcmVkRWRnZXMgcmVtYWluIHVuY2hhbmdlZFxuICAgICAgcGFyZW50Q2x1c3Rlck5vZGUuX29wZW5DaGlsZENsdXN0ZXIoY2x1c3Rlck5vZGVJZCk7XG5cbiAgICAgIC8vIEFsbCBjb21wb25lbnRzIG9mIGNoaWxkIGNsdXN0ZXIgbm9kZSBoYXZlIGJlZW4gdHJhbnNmZXJyZWQuIEl0IGNhbiBkaWUgbm93LlxuICAgICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1tjbHVzdGVyTm9kZUlkXTtcbiAgICAgIGlmIChyZWZyZXNoRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFDaGFuZ2VkXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbWFpbiBib2R5XG4gICAgY29uc3QgY29udGFpbmVkTm9kZXMgPSBjbHVzdGVyTm9kZS5jb250YWluZWROb2RlcztcbiAgICBjb25zdCBjb250YWluZWRFZGdlcyA9IGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzO1xuXG4gICAgLy8gYWxsb3cgdGhlIHVzZXIgdG8gcG9zaXRpb24gdGhlIG5vZGVzIGFmdGVyIHJlbGVhc2UuXG4gICAgaWYgKFxuICAgICAgb3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvcHRpb25zLnJlbGVhc2VGdW5jdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5yZWxlYXNlRnVuY3Rpb24gPT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgY29uc3QgcG9zaXRpb25zID0ge307XG4gICAgICBjb25zdCBjbHVzdGVyUG9zaXRpb24gPSB7IHg6IGNsdXN0ZXJOb2RlLngsIHk6IGNsdXN0ZXJOb2RlLnkgfTtcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNvbnRhaW5lZE5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBjb25zdCBjb250YWluZWROb2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgcG9zaXRpb25zW25vZGVJZF0gPSB7IHg6IGNvbnRhaW5lZE5vZGUueCwgeTogY29udGFpbmVkTm9kZS55IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld1Bvc2l0aW9ucyA9IG9wdGlvbnMucmVsZWFzZUZ1bmN0aW9uKGNsdXN0ZXJQb3NpdGlvbiwgcG9zaXRpb25zKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlSWQgaW4gY29udGFpbmVkTm9kZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb250YWluZWROb2Rlcywgbm9kZUlkKSkge1xuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lZE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBpZiAobmV3UG9zaXRpb25zW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGFpbmVkTm9kZS54ID1cbiAgICAgICAgICAgICAgbmV3UG9zaXRpb25zW25vZGVJZF0ueCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBjbHVzdGVyTm9kZS54XG4gICAgICAgICAgICAgICAgOiBuZXdQb3NpdGlvbnNbbm9kZUlkXS54O1xuICAgICAgICAgICAgY29udGFpbmVkTm9kZS55ID1cbiAgICAgICAgICAgICAgbmV3UG9zaXRpb25zW25vZGVJZF0ueSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBjbHVzdGVyTm9kZS55XG4gICAgICAgICAgICAgICAgOiBuZXdQb3NpdGlvbnNbbm9kZUlkXS55O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb3B5IHRoZSBwb3NpdGlvbiBmcm9tIHRoZSBjbHVzdGVyXG4gICAgICBmb3JFYWNoKGNvbnRhaW5lZE5vZGVzLCBmdW5jdGlvbiAoY29udGFpbmVkTm9kZSkge1xuICAgICAgICAvLyBpbmhlcml0IHBvc2l0aW9uXG4gICAgICAgIGlmIChjb250YWluZWROb2RlLm9wdGlvbnMuZml4ZWQueCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjb250YWluZWROb2RlLnggPSBjbHVzdGVyTm9kZS54O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250YWluZWROb2RlLm9wdGlvbnMuZml4ZWQueSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjb250YWluZWROb2RlLnkgPSBjbHVzdGVyTm9kZS55O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyByZWxlYXNlIG5vZGVzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gY29udGFpbmVkTm9kZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVkTm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuXG4gICAgICAgIC8vIGluaGVyaXQgc3BlZWRcbiAgICAgICAgY29udGFpbmVkTm9kZS52eCA9IGNsdXN0ZXJOb2RlLnZ4O1xuICAgICAgICBjb250YWluZWROb2RlLnZ5ID0gY2x1c3Rlck5vZGUudnk7XG5cbiAgICAgICAgY29udGFpbmVkTm9kZS5zZXRPcHRpb25zKHsgcGh5c2ljczogdHJ1ZSB9KTtcblxuICAgICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvcHkgdGhlIGNsdXN0ZXJOb2RlIGVkZ2VzIGJlY2F1c2Ugd2UgY2Fubm90IGl0ZXJhdGUgb3ZlciBhbiBvYmplY3QgdGhhdCB3ZSBhZGQgb3IgcmVtb3ZlIGZyb20uXG4gICAgY29uc3QgZWRnZXNUb0JlRGVsZXRlZCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2x1c3Rlck5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVkZ2VzVG9CZURlbGV0ZWQucHVzaChjbHVzdGVyTm9kZS5lZGdlc1tpXSk7XG4gICAgfVxuXG4gICAgLy8gYWN0dWFsbHkgaGFuZGxpbmcgdGhlIGRlbGV0aW5nLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXNUb0JlRGVsZXRlZC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzVG9CZURlbGV0ZWRbaV07XG4gICAgICBjb25zdCBvdGhlck5vZGVJZCA9IHRoaXMuX2dldENvbm5lY3RlZElkKGVkZ2UsIGNsdXN0ZXJOb2RlSWQpO1xuICAgICAgY29uc3Qgb3RoZXJOb2RlID0gdGhpcy5jbHVzdGVyZWROb2Rlc1tvdGhlck5vZGVJZF07XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCB0cmFuc2ZlcklkID0gZWRnZS5jbHVzdGVyaW5nRWRnZVJlcGxhY2luZ0lkc1tqXTtcbiAgICAgICAgY29uc3QgdHJhbnNmZXJFZGdlID0gdGhpcy5ib2R5LmVkZ2VzW3RyYW5zZmVySWRdO1xuICAgICAgICBpZiAodHJhbnNmZXJFZGdlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIGlmIHRoZSBvdGhlciBub2RlIGlzIGluIGFub3RoZXIgY2x1c3Rlciwgd2UgdHJhbnNmZXIgb3duZXJzaGlwIG9mIHRoaXMgZWRnZSB0byB0aGUgb3RoZXIgY2x1c3RlclxuICAgICAgICBpZiAob3RoZXJOb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyB0cmFuc2ZlciBvd25lcnNoaXA6XG4gICAgICAgICAgY29uc3Qgb3RoZXJDbHVzdGVyID0gdGhpcy5ib2R5Lm5vZGVzW290aGVyTm9kZS5jbHVzdGVySWRdO1xuICAgICAgICAgIG90aGVyQ2x1c3Rlci5jb250YWluZWRFZGdlc1t0cmFuc2ZlckVkZ2UuaWRdID0gdHJhbnNmZXJFZGdlO1xuXG4gICAgICAgICAgLy8gZGVsZXRlIGxvY2FsIHJlZmVyZW5jZVxuICAgICAgICAgIGRlbGV0ZSBjb250YWluZWRFZGdlc1t0cmFuc2ZlckVkZ2UuaWRdO1xuXG4gICAgICAgICAgLy8gZ2V0IHRvIGFuZCBmcm9tXG4gICAgICAgICAgbGV0IGZyb21JZCA9IHRyYW5zZmVyRWRnZS5mcm9tSWQ7XG4gICAgICAgICAgbGV0IHRvSWQgPSB0cmFuc2ZlckVkZ2UudG9JZDtcbiAgICAgICAgICBpZiAodHJhbnNmZXJFZGdlLnRvSWQgPT0gb3RoZXJOb2RlSWQpIHtcbiAgICAgICAgICAgIHRvSWQgPSBvdGhlck5vZGUuY2x1c3RlcklkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcm9tSWQgPSBvdGhlck5vZGUuY2x1c3RlcklkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgY2x1c3RlciBlZGdlIGZyb20gdGhlIG90aGVyQ2x1c3RlclxuICAgICAgICAgIHRoaXMuX2NyZWF0ZUNsdXN0ZXJlZEVkZ2UoXG4gICAgICAgICAgICBmcm9tSWQsXG4gICAgICAgICAgICB0b0lkLFxuICAgICAgICAgICAgdHJhbnNmZXJFZGdlLFxuICAgICAgICAgICAgb3RoZXJDbHVzdGVyLmNsdXN0ZXJFZGdlUHJvcGVydGllcyxcbiAgICAgICAgICAgIHsgaGlkZGVuOiBmYWxzZSwgcGh5c2ljczogdHJ1ZSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9yZXN0b3JlRWRnZSh0cmFuc2ZlckVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVkZ2UucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHRoZSByZWxlYXNpbmcgb2YgdGhlIGVkZ2VzXG4gICAgZm9yIChjb25zdCBlZGdlSWQgaW4gY29udGFpbmVkRWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkRWRnZXMsIGVkZ2VJZCkpIHtcbiAgICAgICAgdGhpcy5fcmVzdG9yZUVkZ2UoY29udGFpbmVkRWRnZXNbZWRnZUlkXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGNsdXN0ZXJOb2RlXG4gICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1tjbHVzdGVyTm9kZUlkXTtcblxuICAgIGlmIChyZWZyZXNoRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDbHVzdGVyLmlkfSBjbHVzdGVySWRcbiAgICogQHJldHVybnMge0FycmF5LjxOb2RlLmlkPn1cbiAgICovXG4gIGdldE5vZGVzSW5DbHVzdGVyKGNsdXN0ZXJJZCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSBbXTtcbiAgICBpZiAodGhpcy5pc0NsdXN0ZXIoY2x1c3RlcklkKSA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgY29udGFpbmVkTm9kZXMgPSB0aGlzLmJvZHkubm9kZXNbY2x1c3RlcklkXS5jb250YWluZWROb2RlcztcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIGNvbnRhaW5lZE5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29udGFpbmVkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBub2Rlc0FycmF5LnB1c2godGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0uaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGVzQXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGFjayBjbHVzdGVySWQncyB0aGF0IGEgY2VydGFpbiBub2RlIHJlc2lkZXMgaW4uIGNsdXN0ZXIgQSAtPiBjbHVzdGVyIEIgLT4gY2x1c3RlciBDIC0+IG5vZGVcbiAgICpcbiAgICogSWYgYSBub2RlIGNhbid0IGJlIGZvdW5kIGluIHRoZSBjaGFpbiwgcmV0dXJuIGFuIGVtcHR5IGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IG5vZGVJZFxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBmaW5kTm9kZShub2RlSWQpIHtcbiAgICBjb25zdCBzdGFjayA9IFtdO1xuICAgIGNvbnN0IG1heCA9IDEwMDtcbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgbGV0IG5vZGU7XG5cbiAgICB3aGlsZSAodGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdICE9PSB1bmRlZmluZWQgJiYgY291bnRlciA8IG1heCkge1xuICAgICAgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICAgICAgc3RhY2sucHVzaChub2RlLmlkKTtcblxuICAgICAgbm9kZUlkID0gdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdLmNsdXN0ZXJJZDtcbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG5cbiAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdO1xuICAgIHN0YWNrLnB1c2gobm9kZS5pZCk7XG5cbiAgICBzdGFjay5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzaW5nIGEgY2x1c3RlcmVkIG5vZGVJZCwgdXBkYXRlIHdpdGggdGhlIG5ldyBvcHRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gY2x1c3RlcmVkTm9kZUlkXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdPcHRpb25zXG4gICAqL1xuICB1cGRhdGVDbHVzdGVyZWROb2RlKGNsdXN0ZXJlZE5vZGVJZCwgbmV3T3B0aW9ucykge1xuICAgIGlmIChjbHVzdGVyZWROb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY2x1c3RlcmVkTm9kZUlkIHN1cHBsaWVkIHRvIHVwZGF0ZUNsdXN0ZXJlZE5vZGUuXCIpO1xuICAgIH1cbiAgICBpZiAobmV3T3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBuZXdPcHRpb25zIHN1cHBsaWVkIHRvIHVwZGF0ZUNsdXN0ZXJlZE5vZGUuXCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW2NsdXN0ZXJlZE5vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSBjbHVzdGVyZWROb2RlSWQgc3VwcGxpZWQgdG8gdXBkYXRlQ2x1c3RlcmVkTm9kZSBkb2VzIG5vdCBleGlzdC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmJvZHkubm9kZXNbY2x1c3RlcmVkTm9kZUlkXS5zZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gIH1cblxuICAvKipcbiAgICogVXNpbmcgYSBiYXNlIGVkZ2VJZCwgdXBkYXRlIGFsbCByZWxhdGVkIGNsdXN0ZXJlZCBlZGdlcyB3aXRoIHRoZSBuZXcgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBzdGFydEVkZ2VJZFxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3T3B0aW9uc1xuICAgKi9cbiAgdXBkYXRlRWRnZShzdGFydEVkZ2VJZCwgbmV3T3B0aW9ucykge1xuICAgIGlmIChzdGFydEVkZ2VJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdGFydEVkZ2VJZCBzdXBwbGllZCB0byB1cGRhdGVFZGdlLlwiKTtcbiAgICB9XG4gICAgaWYgKG5ld09wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbmV3T3B0aW9ucyBzdXBwbGllZCB0byB1cGRhdGVFZGdlLlwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9keS5lZGdlc1tzdGFydEVkZ2VJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0YXJ0RWRnZUlkIHN1cHBsaWVkIHRvIHVwZGF0ZUVkZ2UgZG9lcyBub3QgZXhpc3QuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbEVkZ2VJZHMgPSB0aGlzLmdldENsdXN0ZXJlZEVkZ2VzKHN0YXJ0RWRnZUlkKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbEVkZ2VJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbYWxsRWRnZUlkc1tpXV07XG4gICAgICBlZGdlLnNldE9wdGlvbnMobmV3T3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc3RhY2sgb2YgY2x1c3RlckVkZ2VJZCdzICgrYmFzZSBlZGdlaWQpIHRoYXQgYSBiYXNlIGVkZ2UgaXMgdGhlIHNhbWUgYXMuIGNsdXN0ZXIgZWRnZSBDIC0+IGNsdXN0ZXIgZWRnZSBCIC0+IGNsdXN0ZXIgZWRnZSBBIC0+IGJhc2UgZWRnZShlZGdlSWQpXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkVkZ2UuaWR9IGVkZ2VJZFxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHZpcy5FZGdlLmlkPn1cbiAgICovXG4gIGdldENsdXN0ZXJlZEVkZ2VzKGVkZ2VJZCkge1xuICAgIGNvbnN0IHN0YWNrID0gW107XG4gICAgY29uc3QgbWF4ID0gMTAwO1xuICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgIHdoaWxlIChcbiAgICAgIGVkZ2VJZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBjb3VudGVyIDwgbWF4XG4gICAgKSB7XG4gICAgICBzdGFjay5wdXNoKHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdLmlkKTtcbiAgICAgIGVkZ2VJZCA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdLmVkZ2VSZXBsYWNlZEJ5SWQ7XG4gICAgICBjb3VudGVyKys7XG4gICAgfVxuICAgIHN0YWNrLnJldmVyc2UoKTtcbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBiYXNlIGVkZ2UgaWQgb2YgY2x1c3RlckVkZ2VJZC4gY2x1c3RlciBlZGdlIChjbHVzdGVyZWRFZGdlSWQpIC0+IGNsdXN0ZXIgZWRnZSBCIC0+IGNsdXN0ZXIgZWRnZSBDIC0+IGJhc2UgZWRnZVxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBjbHVzdGVyZWRFZGdlSWRcbiAgICogQHJldHVybnMge3Zpcy5FZGdlLmlkfSBiYXNlRWRnZUlkXG4gICAqXG4gICAqIFRPRE86IGRlcHJlY2F0ZSBpbiA1LjAuMC4gTWV0aG9kIGdldEJhc2VFZGdlcygpIGlzIHRoZSBjb3JyZWN0IG9uZSB0byB1c2UuXG4gICAqL1xuICBnZXRCYXNlRWRnZShjbHVzdGVyZWRFZGdlSWQpIHtcbiAgICAvLyBKdXN0IGtsdWRnZSB0aGlzIGJ5IHJldHVybmluZyB0aGUgZmlyc3QgYmFzZSBlZGdlIGlkIGZvdW5kXG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzZUVkZ2VzKGNsdXN0ZXJlZEVkZ2VJZClbMF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCByZWd1bGFyIGVkZ2VzIGZvciB0aGlzIGNsdXN0ZXJlZCBlZGdlIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBjbHVzdGVyZWRFZGdlSWRcbiAgICogQHJldHVybnMge0FycmF5Ljx2aXMuRWRnZS5pZD59IGFsbCBiYXNlRWRnZUlkJ3MgdW5kZXIgdGhpcyBjbHVzdGVyZWQgZWRnZVxuICAgKi9cbiAgZ2V0QmFzZUVkZ2VzKGNsdXN0ZXJlZEVkZ2VJZCkge1xuICAgIGNvbnN0IElkc1RvSGFuZGxlID0gW2NsdXN0ZXJlZEVkZ2VJZF07XG4gICAgY29uc3QgZG9uZUlkcyA9IFtdO1xuICAgIGNvbnN0IGZvdW5kSWRzID0gW107XG4gICAgY29uc3QgbWF4ID0gMTAwO1xuICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgIHdoaWxlIChJZHNUb0hhbmRsZS5sZW5ndGggPiAwICYmIGNvdW50ZXIgPCBtYXgpIHtcbiAgICAgIGNvbnN0IG5leHRJZCA9IElkc1RvSGFuZGxlLnBvcCgpO1xuICAgICAgaWYgKG5leHRJZCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTsgLy8gUGFyYW5vaWEgaGVyZSBhbmQgb253YXJkc1xuICAgICAgY29uc3QgbmV4dEVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbbmV4dElkXTtcbiAgICAgIGlmIChuZXh0RWRnZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgIGNvdW50ZXIrKztcblxuICAgICAgY29uc3QgcmVwbGFjaW5nSWRzID0gbmV4dEVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHM7XG4gICAgICBpZiAocmVwbGFjaW5nSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbmV4dElkIGlzIGEgYmFzZSBpZFxuICAgICAgICBmb3VuZElkcy5wdXNoKG5leHRJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbm90aGVyIGNsdXN0ZXIgZWRnZSwgdW5yYXZlbCB0aGlzIG9uZSBhcyB3ZWxsXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVwbGFjaW5nSWRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY29uc3QgcmVwbGFjaW5nSWQgPSByZXBsYWNpbmdJZHNbaV07XG5cbiAgICAgICAgICAvLyBEb24ndCBhZGQgaWYgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAgICAgLy8gVE9ETzogbmV2ZXIgdHJpZ2dlcnM7IGZpbmQgYSB0ZXN0LWNhc2Ugd2hpY2ggZG9lc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIElkc1RvSGFuZGxlLmluZGV4T2YocmVwbGFjaW5nSWRzKSAhPT0gLTEgfHxcbiAgICAgICAgICAgIGRvbmVJZHMuaW5kZXhPZihyZXBsYWNpbmdJZHMpICE9PSAtMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgSWRzVG9IYW5kbGUucHVzaChyZXBsYWNpbmdJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZG9uZUlkcy5wdXNoKG5leHRJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSWQgdGhlIG5vZGUgaXMgY29ubmVjdGVkIHRvXG4gICAqXG4gICAqIEBwYXJhbSB7dmlzLkVkZ2V9IGVkZ2VcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q29ubmVjdGVkSWQoZWRnZSwgbm9kZUlkKSB7XG4gICAgaWYgKGVkZ2UudG9JZCAhPSBub2RlSWQpIHtcbiAgICAgIHJldHVybiBlZGdlLnRvSWQ7XG4gICAgfSBlbHNlIGlmIChlZGdlLmZyb21JZCAhPSBub2RlSWQpIHtcbiAgICAgIHJldHVybiBlZGdlLmZyb21JZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVkZ2UuZnJvbUlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXZSBkZXRlcm1pbmUgaG93IG1hbnkgY29ubmVjdGlvbnMgZGVub3RlIGFuIGltcG9ydGFudCBodWIuXG4gICAqIFdlIHRha2UgdGhlIG1lYW4gKyAyKnN0ZCBhcyB0aGUgaW1wb3J0YW50IGh1YiBzaXplLiAoQXNzdW1pbmcgYSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIGRhdGEsIH4yLjIlKVxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEh1YlNpemUoKSB7XG4gICAgbGV0IGF2ZXJhZ2UgPSAwO1xuICAgIGxldCBhdmVyYWdlU3F1YXJlZCA9IDA7XG4gICAgbGV0IGh1YkNvdW50ZXIgPSAwO1xuICAgIGxldCBsYXJnZXN0SHViID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV07XG4gICAgICBpZiAobm9kZS5lZGdlcy5sZW5ndGggPiBsYXJnZXN0SHViKSB7XG4gICAgICAgIGxhcmdlc3RIdWIgPSBub2RlLmVkZ2VzLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGF2ZXJhZ2UgKz0gbm9kZS5lZGdlcy5sZW5ndGg7XG4gICAgICBhdmVyYWdlU3F1YXJlZCArPSBNYXRoLnBvdyhub2RlLmVkZ2VzLmxlbmd0aCwgMik7XG4gICAgICBodWJDb3VudGVyICs9IDE7XG4gICAgfVxuICAgIGF2ZXJhZ2UgPSBhdmVyYWdlIC8gaHViQ291bnRlcjtcbiAgICBhdmVyYWdlU3F1YXJlZCA9IGF2ZXJhZ2VTcXVhcmVkIC8gaHViQ291bnRlcjtcblxuICAgIGNvbnN0IHZhcmlhbmNlID0gYXZlcmFnZVNxdWFyZWQgLSBNYXRoLnBvdyhhdmVyYWdlLCAyKTtcbiAgICBjb25zdCBzdGFuZGFyZERldmlhdGlvbiA9IE1hdGguc3FydCh2YXJpYW5jZSk7XG5cbiAgICBsZXQgaHViVGhyZXNob2xkID0gTWF0aC5mbG9vcihhdmVyYWdlICsgMiAqIHN0YW5kYXJkRGV2aWF0aW9uKTtcblxuICAgIC8vIGFsd2F5cyBoYXZlIGF0IGxlYXN0IG9uZSB0byBjbHVzdGVyXG4gICAgaWYgKGh1YlRocmVzaG9sZCA+IGxhcmdlc3RIdWIpIHtcbiAgICAgIGh1YlRocmVzaG9sZCA9IGxhcmdlc3RIdWI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh1YlRocmVzaG9sZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZWRnZSBmb3IgdGhlIGNsdXN0ZXIgcmVwcmVzZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gZnJvbUlkXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gdG9JZFxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlfSBiYXNlRWRnZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY2x1c3RlckVkZ2VQcm9wZXJ0aWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBleHRyYU9wdGlvbnNcbiAgICogQHJldHVybnMge0VkZ2V9IG5ld2x5IGNyZWF0ZWQgY2x1c3RlcmVkIGVkZ2VcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVDbHVzdGVyZWRFZGdlKFxuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIGJhc2VFZGdlLFxuICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllcyxcbiAgICBleHRyYU9wdGlvbnNcbiAgKSB7XG4gICAgLy8gY29weSB0aGUgb3B0aW9ucyBvZiB0aGUgZWRnZSB3ZSB3aWxsIHJlcGxhY2VcbiAgICBjb25zdCBjbG9uZWRPcHRpb25zID0gTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKGJhc2VFZGdlLCBcImVkZ2VcIik7XG4gICAgLy8gbWFrZSBzdXJlIHRoZSBwcm9wZXJ0aWVzIG9mIGNsdXN0ZXJFZGdlcyBhcmUgc3VwZXJpbXBvc2VkIG9uIGl0XG4gICAgZGVlcEV4dGVuZChjbG9uZWRPcHRpb25zLCBjbHVzdGVyRWRnZVByb3BlcnRpZXMpO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBlZGdlXG4gICAgY2xvbmVkT3B0aW9ucy5mcm9tID0gZnJvbUlkO1xuICAgIGNsb25lZE9wdGlvbnMudG8gPSB0b0lkO1xuICAgIGNsb25lZE9wdGlvbnMuaWQgPSBcImNsdXN0ZXJFZGdlOlwiICsgcmFuZG9tVVVJRCgpO1xuXG4gICAgLy8gYXBwbHkgdGhlIGVkZ2Ugc3BlY2lmaWMgb3B0aW9ucyB0byBpdCBpZiBzcGVjaWZpZWRcbiAgICBpZiAoZXh0cmFPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlZXBFeHRlbmQoY2xvbmVkT3B0aW9ucywgZXh0cmFPcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdFZGdlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVFZGdlKGNsb25lZE9wdGlvbnMpO1xuICAgIG5ld0VkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMgPSBbYmFzZUVkZ2UuaWRdO1xuICAgIG5ld0VkZ2UuY29ubmVjdCgpO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIG5ldyBlZGdlXG4gICAgdGhpcy5ib2R5LmVkZ2VzW25ld0VkZ2UuaWRdID0gbmV3RWRnZTtcblxuICAgIHJldHVybiBuZXdFZGdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgcGFzc2VkIGNoaWxkIG5vZGVzIGFuZCBlZGdlcyB0byB0aGUgZ2l2ZW4gY2x1c3RlciBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IE5vZGV9IGNoaWxkTm9kZXMgIGhhc2ggb2Ygbm9kZXMgb3Igc2luZ2xlIG5vZGUgdG8gYWRkIGluIGNsdXN0ZXJcbiAgICogQHBhcmFtIHtvYmplY3QgfCBFZGdlfSBjaGlsZEVkZ2VzICBoYXNoIG9mIGVkZ2VzIG9yIHNpbmdsZSBlZGdlIHRvIHRha2UgaW50byBhY2NvdW50IHdoZW4gY2x1c3RlcmluZ1xuICAgKiBAcGFyYW0ge05vZGV9IGNsdXN0ZXJOb2RlICBjbHVzdGVyIG5vZGUgdG8gYWRkIG5vZGVzIGFuZCBlZGdlcyB0b1xuICAgKiBAcGFyYW0ge29iamVjdH0gW2NsdXN0ZXJFZGdlUHJvcGVydGllc11cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbHVzdGVyRWRnZXMoY2hpbGROb2RlcywgY2hpbGRFZGdlcywgY2x1c3Rlck5vZGUsIGNsdXN0ZXJFZGdlUHJvcGVydGllcykge1xuICAgIGlmIChjaGlsZEVkZ2VzIGluc3RhbmNlb2YgRWRnZSkge1xuICAgICAgY29uc3QgZWRnZSA9IGNoaWxkRWRnZXM7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIG9ialtlZGdlLmlkXSA9IGVkZ2U7XG4gICAgICBjaGlsZEVkZ2VzID0gb2JqO1xuICAgIH1cblxuICAgIGlmIChjaGlsZE5vZGVzIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZSA9IGNoaWxkTm9kZXM7XG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIG9ialtub2RlLmlkXSA9IG5vZGU7XG4gICAgICBjaGlsZE5vZGVzID0gb2JqO1xuICAgIH1cblxuICAgIGlmIChjbHVzdGVyTm9kZSA9PT0gdW5kZWZpbmVkIHx8IGNsdXN0ZXJOb2RlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJfY2x1c3RlckVkZ2VzOiBwYXJhbWV0ZXIgY2x1c3Rlck5vZGUgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGNsdXN0ZXJFZGdlUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUYWtlIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIGZyb20gdGhlIGNsdXN0ZXIgbm9kZVxuICAgICAgY2x1c3RlckVkZ2VQcm9wZXJ0aWVzID0gY2x1c3Rlck5vZGUuY2x1c3RlckVkZ2VQcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSB0aGUgbmV3IGVkZ2VzIHRoYXQgd2lsbCBjb25uZWN0IHRvIHRoZSBjbHVzdGVyLlxuICAgIC8vIEFsbCBzZWxmLXJlZmVyZW5jaW5nIGVkZ2VzIHdpbGwgYmUgYWRkZWQgdG8gY2hpbGRFZGdlcyBoZXJlLlxuICAgIHRoaXMuX2NyZWF0ZUNsdXN0ZXJFZGdlcyhcbiAgICAgIGNoaWxkTm9kZXMsXG4gICAgICBjaGlsZEVkZ2VzLFxuICAgICAgY2x1c3Rlck5vZGUsXG4gICAgICBjbHVzdGVyRWRnZVByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgLy8gZGlzYWJsZSB0aGUgY2hpbGRFZGdlc1xuICAgIGZvciAoY29uc3QgZWRnZUlkIGluIGNoaWxkRWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hpbGRFZGdlcywgZWRnZUlkKSkge1xuICAgICAgICBpZiAodGhpcy5ib2R5LmVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICAgICAgICAvLyBjYWNoZSB0aGUgb3B0aW9ucyBiZWZvcmUgY2hhbmdpbmdcbiAgICAgICAgICB0aGlzLl9iYWNrdXBFZGdlT3B0aW9ucyhlZGdlKTtcbiAgICAgICAgICAvLyBkaXNhYmxlIHBoeXNpY3MgYW5kIGhpZGUgdGhlIGVkZ2VcbiAgICAgICAgICBlZGdlLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRpc2FibGUgdGhlIGNoaWxkTm9kZXNcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBjaGlsZE5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoaWxkTm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdID0ge1xuICAgICAgICAgIGNsdXN0ZXJJZDogY2x1c3Rlck5vZGUuaWQsXG4gICAgICAgICAgbm9kZTogdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdLnNldE9wdGlvbnMoeyBwaHlzaWNzOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGluIHdoaWNoIGNsdXN0ZXIgZ2l2ZW4gbm9kZUlkIHJlc2lkZXMuXG4gICAqXG4gICAqIElmIG5vdCBpbiBjbHVzdGVyLCByZXR1cm4gdW5kZWZpbmVkLlxuICAgKlxuICAgKiBOT1RFOiBJZiB5b3Uga25vdyBhIGNsZWFuZXIgd2F5IHRvIGRvIHRoaXMsIHBsZWFzZSBlbmxpZ2h0ZW4gbWUgKHdpbXJpam5kZXJzKS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge05vZGV8dW5kZWZpbmVkfSBOb2RlIGluc3RhbmNlIGZvciBjbHVzdGVyLCBpZiBwcmVzZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q2x1c3Rlck5vZGVGb3JOb2RlKG5vZGVJZCkge1xuICAgIGlmIChub2RlSWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBjbHVzdGVyZWROb2RlID0gdGhpcy5jbHVzdGVyZWROb2Rlc1tub2RlSWRdO1xuXG4gICAgLy8gTk9URTogSWYgbm8gY2x1c3RlciBpbmZvIGZvdW5kLCBpdCBzaG91bGQgYWN0dWFsbHkgYmUgYW4gZXJyb3JcbiAgICBpZiAoY2x1c3RlcmVkTm9kZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNsdXN0ZXJJZCA9IGNsdXN0ZXJlZE5vZGUuY2x1c3RlcklkO1xuICAgIGlmIChjbHVzdGVySWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB0aGlzLmJvZHkubm9kZXNbY2x1c3RlcklkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNvbmRpdGlvbmFsbHkgcmVtb3ZpbmcgaXRlbXMgaW4gYXJyYXlcbiAgICpcbiAgICogRG9uZSBsaWtlIHRoaXMgYmVjYXVzZSBBcnJheS5maWx0ZXIoKSBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIGJ5IGFsbCBJRSdzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbHRlcihhcnIsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgcmV0ID0gW107XG5cbiAgICBmb3JFYWNoKGFyciwgKGl0ZW0pID0+IHtcbiAgICAgIGlmIChjYWxsYmFjayhpdGVtKSkge1xuICAgICAgICByZXQucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogU2NhbiBhbGwgZWRnZXMgZm9yIGNoYW5nZXMgaW4gY2x1c3RlcmluZyBhbmQgYWRqdXN0IHRoaXMgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBDYWxsIHRoaXMgKGludGVybmFsbHkpIGFmdGVyIHRoZXJlIGhhcyBiZWVuIGEgY2hhbmdlIGluIG5vZGUgb3IgZWRnZSBkYXRhLlxuICAgKlxuICAgKiBQcmU6IFN0YXRlcyBvZiB0aGlzLmJvZHkubm9kZXMgYW5kIHRoaXMuYm9keS5lZGdlcyBjb25zaXN0ZW50XG4gICAqIFByZTogdGhpcy5jbHVzdGVyZWROb2RlcyBhbmQgdGhpcy5jbHVzdGVyZWRFZGdlIGNvbnNpc3RlbnQgd2l0aCBjb250YWluZWROb2RlcyBhbmQgY29udGFpbmVkRWRnZXNcbiAgICogICAgICBvZiBjbHVzdGVyIG5vZGVzLlxuICAgKi9cbiAgX3VwZGF0ZVN0YXRlKCkge1xuICAgIGxldCBub2RlSWQ7XG4gICAgY29uc3QgZGVsZXRlZE5vZGVJZHMgPSBbXTtcbiAgICBjb25zdCBkZWxldGVkRWRnZUlkcyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogVXRpbGl0eSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgY2x1c3RlcmluZyBub2RlcyBvbmx5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBjbHVzdGVyIG5vZGVcbiAgICAgKi9cbiAgICBjb25zdCBlYWNoQ2x1c3Rlck5vZGUgPSAoY2FsbGJhY2spID0+IHtcbiAgICAgIGZvckVhY2godGhpcy5ib2R5Lm5vZGVzLCAobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS5pc0NsdXN0ZXIgPT09IHRydWUpIHtcbiAgICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vXG4gICAgLy8gUmVtb3ZlIGRlbGV0ZWQgcmVndWxhciBub2RlcyBmcm9tIGNsdXN0ZXJpbmdcbiAgICAvL1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBkZWxldGVkIG5vZGVzXG4gICAgZm9yIChub2RlSWQgaW4gdGhpcy5jbHVzdGVyZWROb2Rlcykge1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jbHVzdGVyZWROb2Rlcywgbm9kZUlkKSlcbiAgICAgICAgY29udGludWU7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG5cbiAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlZE5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBub2RlcyBmcm9tIGNsdXN0ZXIgbm9kZXNcbiAgICBlYWNoQ2x1c3Rlck5vZGUoZnVuY3Rpb24gKGNsdXN0ZXJOb2RlKSB7XG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGRlbGV0ZWROb2RlSWRzLmxlbmd0aDsgbisrKSB7XG4gICAgICAgIGRlbGV0ZSBjbHVzdGVyTm9kZS5jb250YWluZWROb2Rlc1tkZWxldGVkTm9kZUlkc1tuXV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgbm9kZXMgZnJvbSBjbHVzdGVyIGxpc3RcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IGRlbGV0ZWROb2RlSWRzLmxlbmd0aDsgbisrKSB7XG4gICAgICBkZWxldGUgdGhpcy5jbHVzdGVyZWROb2Rlc1tkZWxldGVkTm9kZUlkc1tuXV07XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZW1vdmUgZGVsZXRlZCBlZGdlcyBmcm9tIGNsdXN0ZXJpbmdcbiAgICAvL1xuXG4gICAgLy8gQWRkIHRoZSBkZWxldGVkIGNsdXN0ZXJlZCBlZGdlcyB0byB0aGUgbGlzdFxuICAgIGZvckVhY2godGhpcy5jbHVzdGVyZWRFZGdlcywgKGVkZ2VJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICAgICAgaWYgKGVkZ2UgPT09IHVuZGVmaW5lZCB8fCAhZWRnZS5lbmRQb2ludHNWYWxpZCgpKSB7XG4gICAgICAgIGRlbGV0ZWRFZGdlSWRzW2VkZ2VJZF0gPSBlZGdlSWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDbHVzdGVyIG5vZGVzIGNhbiBhbHNvIGNvbnRhaW4gZWRnZXMgd2hpY2ggYXJlIG5vdCBjbHVzdGVyZWQsXG4gICAgLy8gaS5lLiBub2RlcyAxLTIgd2l0aGluIGNsdXN0ZXIgd2l0aCBhbiBlZGdlIGluIGJldHdlZW4uXG4gICAgLy8gU28gdGhlIGNsdXN0ZXIgbm9kZXMgYWxzbyBuZWVkIHRvIGJlIHNjYW5uZWQgZm9yIGludmFsaWQgZWRnZXNcbiAgICBlYWNoQ2x1c3Rlck5vZGUoZnVuY3Rpb24gKGNsdXN0ZXJOb2RlKSB7XG4gICAgICBmb3JFYWNoKGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzLCAoZWRnZSwgZWRnZUlkKSA9PiB7XG4gICAgICAgIGlmICghZWRnZS5lbmRQb2ludHNWYWxpZCgpICYmICFkZWxldGVkRWRnZUlkc1tlZGdlSWRdKSB7XG4gICAgICAgICAgZGVsZXRlZEVkZ2VJZHNbZWRnZUlkXSA9IGVkZ2VJZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBBbHNvIHNjYW4gZm9yIGNsdXN0ZXIgZWRnZXMgd2hpY2ggbmVlZCB0byBiZSByZW1vdmVkIGluIHRoZSBhY3RpdmUgbGlzdC5cbiAgICAvLyBSZWd1bGFyIGVkZ2VzIGhhdmUgYmVlbiByZW1vdmVkIGJlZm9yZWhhbmQsIHNvIHRoaXMgb25seSBwaWNrcyB1cCB0aGUgY2x1c3RlciBlZGdlcy5cbiAgICBmb3JFYWNoKHRoaXMuYm9keS5lZGdlcywgKGVkZ2UsIGVkZ2VJZCkgPT4ge1xuICAgICAgLy8gRXhwbGljaXRseSBzY2FuIHRoZSBjb250YWluZWQgZWRnZXMgZm9yIHZhbGlkaXR5XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICBjb25zdCByZXBsYWNlZElkcyA9IGVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHM7XG4gICAgICBpZiAocmVwbGFjZWRJZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgbnVtVmFsaWQgPSAwO1xuXG4gICAgICAgIGZvckVhY2gocmVwbGFjZWRJZHMsIChjb250YWluZWRFZGdlSWQpID0+IHtcbiAgICAgICAgICBjb25zdCBjb250YWluZWRFZGdlID0gdGhpcy5ib2R5LmVkZ2VzW2NvbnRhaW5lZEVkZ2VJZF07XG5cbiAgICAgICAgICBpZiAoY29udGFpbmVkRWRnZSAhPT0gdW5kZWZpbmVkICYmIGNvbnRhaW5lZEVkZ2UuZW5kUG9pbnRzVmFsaWQoKSkge1xuICAgICAgICAgICAgbnVtVmFsaWQgKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlzVmFsaWQgPSBudW1WYWxpZCA+IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICghZWRnZS5lbmRQb2ludHNWYWxpZCgpIHx8ICFpc1ZhbGlkKSB7XG4gICAgICAgIGRlbGV0ZWRFZGdlSWRzW2VkZ2VJZF0gPSBlZGdlSWQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgZWRnZXMgZnJvbSBjbHVzdGVyIG5vZGVzXG4gICAgZWFjaENsdXN0ZXJOb2RlKChjbHVzdGVyTm9kZSkgPT4ge1xuICAgICAgZm9yRWFjaChkZWxldGVkRWRnZUlkcywgKGRlbGV0ZWRFZGdlSWQpID0+IHtcbiAgICAgICAgZGVsZXRlIGNsdXN0ZXJOb2RlLmNvbnRhaW5lZEVkZ2VzW2RlbGV0ZWRFZGdlSWRdO1xuXG4gICAgICAgIGZvckVhY2goY2x1c3Rlck5vZGUuZWRnZXMsIChlZGdlLCBtKSA9PiB7XG4gICAgICAgICAgaWYgKGVkZ2UuaWQgPT09IGRlbGV0ZWRFZGdlSWQpIHtcbiAgICAgICAgICAgIGNsdXN0ZXJOb2RlLmVkZ2VzW21dID0gbnVsbDsgLy8gRG9uJ3Qgd2FudCB0byBkaXJlY3RseSBkZWxldGUgaGVyZSwgYmVjYXVzZSBpbiB0aGUgbG9vcFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVkZ2UuY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMgPSB0aGlzLl9maWx0ZXIoXG4gICAgICAgICAgICBlZGdlLmNsdXN0ZXJpbmdFZGdlUmVwbGFjaW5nSWRzLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgICAgICAgIHJldHVybiAhZGVsZXRlZEVkZ2VJZHNbaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENsZWFuIHVwIHRoZSBudWxsc1xuICAgICAgICBjbHVzdGVyTm9kZS5lZGdlcyA9IHRoaXMuX2ZpbHRlcihjbHVzdGVyTm9kZS5lZGdlcywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gaXRlbSAhPT0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlbW92ZSBmcm9tIGNsdXN0ZXIgbGlzdFxuICAgIGZvckVhY2goZGVsZXRlZEVkZ2VJZHMsIChlZGdlSWQpID0+IHtcbiAgICAgIGRlbGV0ZSB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2VJZF07XG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgY2x1c3RlciBlZGdlcyBmcm9tIGFjdGl2ZSBsaXN0ICh0aGlzLmJvZHkuZWRnZXMpLlxuICAgIC8vIGRlbGV0ZWRFZGdlSWRzIHN0aWxsIGNvbnRhaW5zIGlkIG9mIHJlZ3VsYXIgZWRnZXMsIGJ1dCB0aGVzZSBzaG91bGQgYWxsXG4gICAgLy8gYmUgZ29uZSB3aGVuIHlvdSByZWFjaCBoZXJlLlxuICAgIGZvckVhY2goZGVsZXRlZEVkZ2VJZHMsIChlZGdlSWQpID0+IHtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcbiAgICB9KTtcblxuICAgIC8vXG4gICAgLy8gQ2hlY2sgY2hhbmdlZCBjbHVzdGVyIHN0YXRlIG9mIGVkZ2VzXG4gICAgLy9cblxuICAgIC8vIEl0ZXJhdGluZyBvdmVyIGtleXMgaGVyZSwgYmVjYXVzZSBlZGdlcyBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUgbG9vcFxuICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHRoaXMuYm9keS5lZGdlcyk7XG4gICAgZm9yRWFjaChpZHMsIChlZGdlSWQpID0+IHtcbiAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbZWRnZUlkXTtcblxuICAgICAgY29uc3Qgc2hvdWxkQmVDbHVzdGVyZWQgPVxuICAgICAgICB0aGlzLl9pc0NsdXN0ZXJlZE5vZGUoZWRnZS5mcm9tSWQpIHx8IHRoaXMuX2lzQ2x1c3RlcmVkTm9kZShlZGdlLnRvSWQpO1xuICAgICAgaWYgKHNob3VsZEJlQ2x1c3RlcmVkID09PSB0aGlzLl9pc0NsdXN0ZXJlZEVkZ2UoZWRnZS5pZCkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBhbGwgaXMgd2VsbFxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkQmVDbHVzdGVyZWQpIHtcbiAgICAgICAgLy8gYWRkIGVkZ2UgdG8gY2x1c3RlcmluZ1xuICAgICAgICBjb25zdCBjbHVzdGVyRnJvbSA9IHRoaXMuX2dldENsdXN0ZXJOb2RlRm9yTm9kZShlZGdlLmZyb21JZCk7XG4gICAgICAgIGlmIChjbHVzdGVyRnJvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fY2x1c3RlckVkZ2VzKHRoaXMuYm9keS5ub2Rlc1tlZGdlLmZyb21JZF0sIGVkZ2UsIGNsdXN0ZXJGcm9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsdXN0ZXJUbyA9IHRoaXMuX2dldENsdXN0ZXJOb2RlRm9yTm9kZShlZGdlLnRvSWQpO1xuICAgICAgICBpZiAoY2x1c3RlclRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9jbHVzdGVyRWRnZXModGhpcy5ib2R5Lm5vZGVzW2VkZ2UudG9JZF0sIGVkZ2UsIGNsdXN0ZXJUbyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBjaGVjayB0aGF0IGl0IHdvcmtzIGZvciBib3RoIGVkZ2VzIGNsdXN0ZXJlZFxuICAgICAgICAvLyAgICAgICAoVGhpcyBtaWdodCBiZSBwYXJhbm9pYSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jbHVzdGVyRWRnZXNbZWRnZUlkXTtcbiAgICAgICAgdGhpcy5fcmVzdG9yZUVkZ2UoZWRnZSk7XG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBoYXBwZW5pbmcsIHRoZSBzdGF0ZSBzaG91bGRcbiAgICAgICAgLy8gYmUgcHJvcGVybHkgdXBkYXRlZCBhdCB0aGlzIHBvaW50LlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiBpdCAqaXMqIHJlYWNoZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24sIHRoZW4gd2UgaGF2ZSB0byBpbXBsZW1lbnRcbiAgICAgICAgLy8gdW5kbyBjbHVzdGVyaW5nIGZvciB0aGlzIGVkZ2UgaGVyZS5cbiAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKCdyZW1vdmUgZWRnZSBmcm9tIGNsdXN0ZXJpbmcgbm90IGltcGxlbWVudGVkIScpXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDbHVzdGVycyBtYXkgYmUgbmVzdGVkIHRvIGFueSBsZXZlbC4gS2VlcCBvbiBvcGVuaW5nIHVudGlsIG5vdGhpbmcgdG8gb3BlblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgbGV0IGNvbnRpbnVlTG9vcCA9IHRydWU7XG4gICAgd2hpbGUgKGNvbnRpbnVlTG9vcCkge1xuICAgICAgY29uc3QgY2x1c3RlcnNUb09wZW4gPSBbXTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBpZCdzIG9mIGNsdXN0ZXJzIHRoYXQgbmVlZCBvcGVuaW5nXG4gICAgICBlYWNoQ2x1c3Rlck5vZGUoZnVuY3Rpb24gKGNsdXN0ZXJOb2RlKSB7XG4gICAgICAgIGNvbnN0IG51bU5vZGVzID0gT2JqZWN0LmtleXMoY2x1c3Rlck5vZGUuY29udGFpbmVkTm9kZXMpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYWxsb3dTaW5nbGUgPSBjbHVzdGVyTm9kZS5vcHRpb25zLmFsbG93U2luZ2xlTm9kZUNsdXN0ZXIgPT09IHRydWU7XG4gICAgICAgIGlmICgoYWxsb3dTaW5nbGUgJiYgbnVtTm9kZXMgPCAxKSB8fCAoIWFsbG93U2luZ2xlICYmIG51bU5vZGVzIDwgMikpIHtcbiAgICAgICAgICBjbHVzdGVyc1RvT3Blbi5wdXNoKGNsdXN0ZXJOb2RlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIE9wZW4gdGhlbVxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBjbHVzdGVyc1RvT3Blbi5sZW5ndGg7ICsrbikge1xuICAgICAgICB0aGlzLm9wZW5DbHVzdGVyKFxuICAgICAgICAgIGNsdXN0ZXJzVG9PcGVuW25dLFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIGZhbHNlIC8qIERvbid0IHJlZnJlc2gsIHdlJ3JlIGluIGFuIHJlZnJlc2gvdXBkYXRlIGFscmVhZHkgKi9cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29udGludWVMb29wID0gY2x1c3RlcnNUb09wZW4ubGVuZ3RoID4gMDtcbiAgICAgIGNoYW5nZWQgPSBjaGFuZ2VkIHx8IGNvbnRpbnVlTG9vcDtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoKTsgLy8gUmVkbyB0aGlzIG1ldGhvZCAocmVjdXJzaW9uIHBvc3NpYmxlISBzaG91bGQgYmUgc2FmZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIG5vZGUgd2l0aCBnaXZlbiBpZCBpcyBwYXJ0IG9mIGEgY2x1c3Rlci5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgcGFydCBvZiBhIGNsdXN0ZXIuXG4gICAqL1xuICBfaXNDbHVzdGVyZWROb2RlKG5vZGVJZCkge1xuICAgIHJldHVybiB0aGlzLmNsdXN0ZXJlZE5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgZWRnZSB3aXRoIGdpdmVuIGlkIGlzIG5vdCB2aXNpYmxlIGR1ZSB0byBjbHVzdGVyaW5nLlxuICAgKlxuICAgKiBBbiBlZGdlIGlzIGNvbnNpZGVyZWQgY2x1c3RlcmVkIGlmOlxuICAgKiAtIGl0IGlzIGRpcmVjdGx5IHJlcGxhY2VkIGJ5IGEgY2x1c3RlcmluZyBlZGdlXG4gICAqIC0gYW55IG9mIGl0cyBjb25uZWN0aW5nIG5vZGVzIGlzIGluIGEgY2x1c3RlclxuICAgKlxuICAgKiBAcGFyYW0ge3Zpcy5FZGdlLmlkfSBlZGdlSWRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgcGFydCBvZiBhIGNsdXN0ZXIuXG4gICAqL1xuICBfaXNDbHVzdGVyZWRFZGdlKGVkZ2VJZCkge1xuICAgIHJldHVybiB0aGlzLmNsdXN0ZXJlZEVkZ2VzW2VkZ2VJZF0gIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDbHVzdGVyRW5naW5lO1xuIiwgImltcG9ydCB7IHNlbGVjdGl2ZURlZXBFeHRlbmQgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgpIHRvIGEgdXNhYmxlIGZvcm0uXG4gKlxuICogU3BlY2lmaWNhbGx5LCBzZXQgdXAgdGhpcyBtZXRob2QgZm9yIHRoZSBjYXNlIG9mIHJ1bm5pbmcgb24gbm9kZS5qcyB3aXRoIGpzZG9tIGVuYWJsZWQuXG4gKlxuICogTk9URVM6XG4gKlxuICogT24gbm9kZS5qcywgd2hlbiBjYWxsaW5nIHRoaXMgZGlyZWN0bHkgb3V0c2lkZSBvZiB0aGlzIGNsYXNzLCBgd2luZG93YCBpcyBub3QgZGVmaW5lZC5cbiAqICAgVGhpcyBoYXBwZW5zIGV2ZW4gaWYganNkb20gaXMgdXNlZC5cbiAqIEZvciBub2RlLmpzICsganNkb20sIGB3aW5kb3dgIGlzIGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50IHRoZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQuXG4gKiAgIEZvciB0aGlzIHJlYXNvbiwgdGhlIGNhbGxlZCBpcyBwbGFjZWQgd2l0aGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAqIEV2ZW4gdGhlbiwgYHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKWAgaXMgbm90IGRlZmluZWQsIHNvIGl0IHN0aWxsIG5lZWRzIHRvIGJlIGFkZGVkLlxuICogRHVyaW5nIHVuaXQgdGVzdGluZywgaXQgaGFwcGVucyB0aGF0IHRoZSB3aW5kb3cgb2JqZWN0IGlzIHJlc2V0IGR1cmluZyBleGVjdXRpb24sIGNhdXNpbmdcbiAqICAgYSBydW50aW1lIGVycm9yIGR1ZSB0byBtaXNzaW5nIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKWAuIFRoaXMgbmVlZHMgdG8gYmUgY29tcGVuc2F0ZWQgZm9yLFxuICogICBzZWUgYF9yZXF1ZXN0TmV4dEZyYW1lKClgLlxuICogU2luY2UgdGhpcyBpcyBhIGdsb2JhbCBvYmplY3QsIGl0IG1heSBhZmZlY3Qgb3RoZXIgbW9kdWxlcyBiZXNpZGVzIGBOZXR3b3JrYC4gV2l0aCBub3JtYWxcbiAqICAgdXNhZ2UsIHRoaXMgZG9lcyBub3QgY2F1c2UgYW55IHByb2JsZW1zLiBEdXJpbmcgdW5pdCB0ZXN0aW5nLCBlcnJvcnMgbWF5IG9jY3VyLiBUaGVzZSBoYXZlXG4gKiAgIGJlZW4gY29tcGVuc2F0ZWQgZm9yLCBzZWUgY29tbWVudCBibG9jayBpbiBfcmVxdWVzdE5leHRGcmFtZSgpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9pbml0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkge1xuICBsZXQgZnVuYztcblxuICBpZiAod2luZG93ICE9PSB1bmRlZmluZWQpIHtcbiAgICBmdW5jID1cbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgfVxuXG4gIGlmIChmdW5jID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyB3aW5kb3cgb3IgbWV0aG9kIG5vdCBwcmVzZW50LCBzZXR0aW5nIG1vY2sgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgLy9jb25zb2xlLmxvZyhcIkNhbGxlZCBtb2NrIHJlcXVlc3RBbmltYXRpb25GcmFtZVwiKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuYztcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBjYW52YXMgcmVuZGVyZXJcbiAqL1xuY2xhc3MgQ2FudmFzUmVuZGVyZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgX2luaXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuXG4gICAgdGhpcy5yZWRyYXdSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlclRpbWVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVxdWlyZXNUaW1lb3V0ID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyUmVxdWVzdHMgPSAwO1xuICAgIHRoaXMuYWxsb3dSZWRyYXcgPSB0cnVlO1xuXG4gICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuem9vbWluZyA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBoaWRlRWRnZXNPbkRyYWc6IGZhbHNlLFxuICAgICAgaGlkZUVkZ2VzT25ab29tOiBmYWxzZSxcbiAgICAgIGhpZGVOb2Rlc09uRHJhZzogZmFsc2UsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLl9kZXRlcm1pbmVCcm93c2VyTWV0aG9kKCk7XG4gICAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudCBsaXN0ZW5lcnNcbiAgICovXG4gIGJpbmRFdmVudExpc3RlbmVycygpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRyYWdTdGFydFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRyYWdFbmRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiem9vbVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnpvb21pbmcgPSB0cnVlO1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnpvb21UaW1lb3V0SWQpO1xuICAgICAgdGhpcy56b29tVGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnpvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdFJlZHJhdy5iaW5kKHRoaXMpKCk7XG4gICAgICB9LCAyNTApO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX3Jlc2l6ZU5vZGVzXCIsICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2l6ZU5vZGVzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVkcmF3XCIsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fcmVkcmF3KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfYmxvY2tSZWRyYXdcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5hbGxvd1JlZHJhdyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2FsbG93UmVkcmF3XCIsICgpID0+IHtcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPSB0cnVlO1xuICAgICAgdGhpcy5yZWRyYXdSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXF1ZXN0UmVkcmF3XCIsIHRoaXMuX3JlcXVlc3RSZWRyYXcuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfc3RhcnRSZW5kZXJpbmdcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5yZW5kZXJSZXF1ZXN0cyArPSAxO1xuICAgICAgdGhpcy5yZW5kZXJpbmdBY3RpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5fc3RhcnRSZW5kZXJpbmcoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9zdG9wUmVuZGVyaW5nXCIsICgpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyUmVxdWVzdHMgLT0gMTtcbiAgICAgIHRoaXMucmVuZGVyaW5nQWN0aXZlID0gdGhpcy5yZW5kZXJSZXF1ZXN0cyA+IDA7XG4gICAgICB0aGlzLnJlbmRlclRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlclJlcXVlc3RzID0gMDtcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVuZGVyaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5yZXF1aXJlc1RpbWVvdXQgPT09IHRydWUpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVuZGVyVGltZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucmVuZGVyVGltZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IFtcImhpZGVFZGdlc09uRHJhZ1wiLCBcImhpZGVFZGdlc09uWm9vbVwiLCBcImhpZGVOb2Rlc09uRHJhZ1wiXTtcbiAgICAgIHNlbGVjdGl2ZURlZXBFeHRlbmQoZmllbGRzLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIHRoZSBkcmF3aW5nIG9mIHRoZSBuZXh0IGZyYW1lLlxuICAgKlxuICAgKiBDYWxscyB0aGUgY2FsbGJhY2sgd2hlbiB0aGUgbmV4dCBmcmFtZSBjYW4gb3Igd2lsbCBiZSBkcmF3bi5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5IC0gdGltZW91dCBjYXNlIG9ubHksIHdhaXQgdGhpcyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbiB8IHVuZGVmaW5lZH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXF1ZXN0TmV4dEZyYW1lKGNhbGxiYWNrLCBkZWxheSkge1xuICAgIC8vIER1cmluZyB1bml0IHRlc3RpbmcsIGl0IGhhcHBlbnMgdGhhdCB0aGUgbW9jayB3aW5kb3cgb2JqZWN0IGlzIHJlc2V0IHdoaWxlXG4gICAgLy8gdGhlIG5leHQgZnJhbWUgaXMgc3RpbGwgcGVuZGluZy4gVGhlbiwgZWl0aGVyICd3aW5kb3cnIGlzIG5vdCBwcmVzZW50LCBvclxuICAgIC8vICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKScgaXMgbm90IHByZXNlbnQgYmVjYXVzZSBpdCBpcyBub3QgZGVmaW5lZCBvbiB0aGVcbiAgICAvLyBtb2NrIHdpbmRvdyBvYmplY3QuXG4gICAgLy9cbiAgICAvLyBBcyBhIGNvbnNlcXVlbmNlLCB1bnJlbGF0ZWQgdW5pdCB0ZXN0cyBtYXkgYXBwZWFyIHRvIGZhaWwsIGV2ZW4gaWYgdGhlIHByb2JsZW1cbiAgICAvLyBkZXNjcmliZWQgaGFwcGVucyBpbiB0aGUgY3VycmVudCB1bml0IHRlc3QuXG4gICAgLy9cbiAgICAvLyBUaGlzIGlzIG5vdCBzb21ldGhpbmcgdGhhdCB3aWxsIGhhcHBlbiBpbiBub3JtYWwgb3BlcmF0aW9uLCBidXQgd2Ugc3RpbGwgbmVlZFxuICAgIC8vIHRvIHRha2UgaXQgaW50byBhY2NvdW50LlxuICAgIC8vXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjsgLy8gRG9pbmcgYGlmICh3aW5kb3cgPT09IHVuZGVmaW5lZClgIGRvZXMgbm90IHdvcmsgaGVyZSFcblxuICAgIGxldCB0aW1lcjtcblxuICAgIGNvbnN0IG15V2luZG93ID0gd2luZG93OyAvLyBHcmFiIGEgcmVmZXJlbmNlIHRvIHJlZHVjZSB0aGUgcG9zc2liaWxpdHkgdGhhdCAnd2luZG93JyBpcyByZXNldFxuICAgIC8vIHdoaWxlIHJ1bm5pbmcgdGhpcyBtZXRob2QuXG5cbiAgICBpZiAodGhpcy5yZXF1aXJlc1RpbWVvdXQgPT09IHRydWUpIHtcbiAgICAgIC8vIHdhaXQgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBhbmQgcGVyZm9ybSB0aGUgYW5pbWF0aW9uIHN0ZXAgZnVuY3Rpb25cbiAgICAgIHRpbWVyID0gbXlXaW5kb3cuc2V0VGltZW91dChjYWxsYmFjaywgZGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobXlXaW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIHRpbWVyID0gbXlXaW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGltZXI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zdGFydFJlbmRlcmluZygpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJpbmdBY3RpdmUgPT09IHRydWUpIHtcbiAgICAgIGlmICh0aGlzLnJlbmRlclRpbWVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJUaW1lciA9IHRoaXMuX3JlcXVlc3ROZXh0RnJhbWUoXG4gICAgICAgICAgdGhpcy5fcmVuZGVyU3RlcC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHRoaXMuc2ltdWxhdGlvbkludGVydmFsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVuZGVyU3RlcCgpIHtcbiAgICBpZiAodGhpcy5yZW5kZXJpbmdBY3RpdmUgPT09IHRydWUpIHtcbiAgICAgIC8vIHJlc2V0IHRoZSByZW5kZXJUaW1lciBzbyBhIG5ldyBzY2hlZHVsZWQgYW5pbWF0aW9uIHN0ZXAgY2FuIGJlIHNldFxuICAgICAgdGhpcy5yZW5kZXJUaW1lciA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHRoaXMucmVxdWlyZXNUaW1lb3V0ID09PSB0cnVlKSB7XG4gICAgICAgIC8vIHRoaXMgc2NoZWR1bGVzIGEgbmV3IHNpbXVsYXRpb24gc3RlcFxuICAgICAgICB0aGlzLl9zdGFydFJlbmRlcmluZygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZWRyYXcoKTtcblxuICAgICAgaWYgKHRoaXMucmVxdWlyZXNUaW1lb3V0ID09PSBmYWxzZSkge1xuICAgICAgICAvLyB0aGlzIHNjaGVkdWxlcyBhIG5ldyBzaW11bGF0aW9uIHN0ZXBcbiAgICAgICAgdGhpcy5fc3RhcnRSZW5kZXJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IHRoZSBuZXR3b3JrIHdpdGggdGhlIGN1cnJlbnQgZGF0YVxuICAgKiBjaGFydCB3aWxsIGJlIHJlc2l6ZWQgdG9vLlxuICAgKi9cbiAgcmVkcmF3KCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzZXRTaXplXCIpO1xuICAgIHRoaXMuX3JlZHJhdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyB0aGUgbmV0d29yayB3aXRoIHRoZSBjdXJyZW50IGRhdGFcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXF1ZXN0UmVkcmF3KCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVkcmF3UmVxdWVzdGVkICE9PSB0cnVlICYmXG4gICAgICB0aGlzLnJlbmRlcmluZ0FjdGl2ZSA9PT0gZmFsc2UgJiZcbiAgICAgIHRoaXMuYWxsb3dSZWRyYXcgPT09IHRydWVcbiAgICApIHtcbiAgICAgIHRoaXMucmVkcmF3UmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3JlcXVlc3ROZXh0RnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZWRyYXcoZmFsc2UpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyB0aGUgbmV0d29yayB3aXRoIHRoZSBjdXJyZW50IGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlkZGVuPWZhbHNlXSB8IFVzZWQgdG8gZ2V0IHRoZSBmaXJzdCBlc3RpbWF0ZSBvZiB0aGUgbm9kZSBzaXplcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgdGhlIG5vZGVzIGFyZSBkcmF3biBhZnRlciB3aGljaCB0aGV5IGFyZSBxdWlja2x5IGRyYXduIG92ZXIuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVkcmF3KGhpZGRlbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dSZWRyYXcgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJpbml0UmVkcmF3XCIpO1xuXG4gICAgICB0aGlzLnJlZHJhd1JlcXVlc3RlZCA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBkcmF3TGF0ZXIgPSB7XG4gICAgICAgIGRyYXdFeHRlcm5hbExhYmVsczogbnVsbCxcbiAgICAgIH07XG5cbiAgICAgIC8vIHdoZW4gdGhlIGNvbnRhaW5lciBkaXYgd2FzIGhpZGRlbiwgdGhpcyBmaXhlcyBpdCBiYWNrIHVwIVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMud2lkdGggPT09IDAgfHxcbiAgICAgICAgdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmhlaWdodCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2FudmFzLnNldFNpemUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jYW52YXMuc2V0VHJhbnNmb3JtKCk7XG5cbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoKTtcblxuICAgICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgICAgY29uc3QgdyA9IHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IGggPSB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gaWYgdGhlIGRpdiBpcyBoaWRkZW4sIHdlIHN0b3AgdGhlIHJlZHJhdyBoZXJlIGZvciBwZXJmb3JtYW5jZS5cbiAgICAgIGlmICh0aGlzLmNhbnZhcy5mcmFtZS5jbGllbnRXaWR0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCBzY2FsaW5nIGFuZCB0cmFuc2xhdGlvblxuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC50cmFuc2xhdGUodGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCwgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueSk7XG4gICAgICBjdHguc2NhbGUodGhpcy5ib2R5LnZpZXcuc2NhbGUsIHRoaXMuYm9keS52aWV3LnNjYWxlKTtcblxuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImJlZm9yZURyYXdpbmdcIiwgY3R4KTtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcblxuICAgICAgaWYgKGhpZGRlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0aGlzLmRyYWdnaW5nID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgKHRoaXMuZHJhZ2dpbmcgPT09IHRydWUgJiZcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmhpZGVFZGdlc09uRHJhZyA9PT0gZmFsc2UpKSAmJlxuICAgICAgICAgICh0aGlzLnpvb21pbmcgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAodGhpcy56b29taW5nID09PSB0cnVlICYmIHRoaXMub3B0aW9ucy5oaWRlRWRnZXNPblpvb20gPT09IGZhbHNlKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fZHJhd0VkZ2VzKGN0eCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmRyYWdnaW5nID09PSBmYWxzZSB8fFxuICAgICAgICAodGhpcy5kcmFnZ2luZyA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuaGlkZU5vZGVzT25EcmFnID09PSBmYWxzZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCB7IGRyYXdFeHRlcm5hbExhYmVscyB9ID0gdGhpcy5fZHJhd05vZGVzKGN0eCwgaGlkZGVuKTtcbiAgICAgICAgZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVscyA9IGRyYXdFeHRlcm5hbExhYmVscztcbiAgICAgIH1cblxuICAgICAgLy8gZHJhdyB0aGUgYXJyb3dzIGxhc3Qgc28gdGhleSB3aWxsIGJlIGF0IHRoZSB0b3BcbiAgICAgIGlmIChoaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodGhpcy5kcmFnZ2luZyA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICh0aGlzLmRyYWdnaW5nID09PSB0cnVlICYmXG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oaWRlRWRnZXNPbkRyYWcgPT09IGZhbHNlKSkgJiZcbiAgICAgICAgICAodGhpcy56b29taW5nID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgKHRoaXMuem9vbWluZyA9PT0gdHJ1ZSAmJiB0aGlzLm9wdGlvbnMuaGlkZUVkZ2VzT25ab29tID09PSBmYWxzZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX2RyYXdBcnJvd3MoY3R4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVscyAhPSBudWxsKSB7XG4gICAgICAgIGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbHMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhpZGRlbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fZHJhd1NlbGVjdGlvbkJveChjdHgpO1xuICAgICAgfVxuXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYWZ0ZXJEcmF3aW5nXCIsIGN0eCk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG5cbiAgICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgc2NhbGluZyBhbmQgdHJhbnNsYXRpb25cbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICBpZiAoaGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdywgaCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhbGwgbm9kZXNcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9ICAgY3R4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Fsd2F5c1Nob3ddXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzaXplTm9kZXMoKSB7XG4gICAgdGhpcy5jYW52YXMuc2V0VHJhbnNmb3JtKCk7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgpO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LnRyYW5zbGF0ZSh0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54LCB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55KTtcbiAgICBjdHguc2NhbGUodGhpcy5ib2R5LnZpZXcuc2NhbGUsIHRoaXMuYm9keS52aWV3LnNjYWxlKTtcblxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICAgIGxldCBub2RlO1xuXG4gICAgLy8gcmVzaXplIGFsbCBub2Rlc1xuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tub2RlSWRdO1xuICAgICAgICBub2RlLnJlc2l6ZShjdHgpO1xuICAgICAgICBub2RlLnVwZGF0ZUJvdW5kaW5nQm94KGN0eCwgbm9kZS5zZWxlY3RlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSBvcmlnaW5hbCBzY2FsaW5nIGFuZCB0cmFuc2xhdGlvblxuICAgIGN0eC5yZXN0b3JlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IGFsbCBub2Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gY3R4ICAyRCBjb250ZXh0IG9mIGEgSFRNTCBjYW52YXNcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWx3YXlzU2hvd11cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge29iamVjdH0gQ2FsbGJhY2tzIHRvIGRyYXcgbGF0ZXIgb24gaGlnaGVyIGxheWVycy5cbiAgICovXG4gIF9kcmF3Tm9kZXMoY3R4LCBhbHdheXNTaG93ID0gZmFsc2UpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBjb25zdCBub2RlSW5kaWNlcyA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICBsZXQgbm9kZTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IFtdO1xuICAgIGNvbnN0IGhvdmVyZWQgPSBbXTtcbiAgICBjb25zdCBtYXJnaW4gPSAyMDtcbiAgICBjb25zdCB0b3BMZWZ0ID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoeyB4OiAtbWFyZ2luLCB5OiAtbWFyZ2luIH0pO1xuICAgIGNvbnN0IGJvdHRvbVJpZ2h0ID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoICsgbWFyZ2luLFxuICAgICAgeTogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCArIG1hcmdpbixcbiAgICB9KTtcbiAgICBjb25zdCB2aWV3YWJsZUFyZWEgPSB7XG4gICAgICB0b3A6IHRvcExlZnQueSxcbiAgICAgIGxlZnQ6IHRvcExlZnQueCxcbiAgICAgIGJvdHRvbTogYm90dG9tUmlnaHQueSxcbiAgICAgIHJpZ2h0OiBib3R0b21SaWdodC54LFxuICAgIH07XG5cbiAgICBjb25zdCBkcmF3RXh0ZXJuYWxMYWJlbHMgPSBbXTtcblxuICAgIC8vIGRyYXcgdW5zZWxlY3RlZCBub2RlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgLy8gc2V0IHNlbGVjdGVkIGFuZCBob3ZlcmVkIG5vZGVzIGFzaWRlXG4gICAgICBpZiAobm9kZS5ob3Zlcikge1xuICAgICAgICBob3ZlcmVkLnB1c2gobm9kZUluZGljZXNbaV0pO1xuICAgICAgfSBlbHNlIGlmIChub2RlLmlzU2VsZWN0ZWQoKSkge1xuICAgICAgICBzZWxlY3RlZC5wdXNoKG5vZGVJbmRpY2VzW2ldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhbHdheXNTaG93ID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3QgZHJhd0xhdGVyID0gbm9kZS5kcmF3KGN0eCk7XG4gICAgICAgICAgaWYgKGRyYXdMYXRlci5kcmF3RXh0ZXJuYWxMYWJlbCAhPSBudWxsKSB7XG4gICAgICAgICAgICBkcmF3RXh0ZXJuYWxMYWJlbHMucHVzaChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmlzQm91bmRpbmdCb3hPdmVybGFwcGluZ1dpdGgodmlld2FibGVBcmVhKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGRyYXdMYXRlciA9IG5vZGUuZHJhdyhjdHgpO1xuICAgICAgICAgIGlmIChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgZHJhd0V4dGVybmFsTGFiZWxzLnB1c2goZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZS51cGRhdGVCb3VuZGluZ0JveChjdHgsIG5vZGUuc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGk7XG4gICAgY29uc3Qgc2VsZWN0ZWRMZW5ndGggPSBzZWxlY3RlZC5sZW5ndGg7XG4gICAgY29uc3QgaG92ZXJlZExlbmd0aCA9IGhvdmVyZWQubGVuZ3RoO1xuXG4gICAgLy8gZHJhdyB0aGUgc2VsZWN0ZWQgbm9kZXMgb24gdG9wXG4gICAgZm9yIChpID0gMDsgaSA8IHNlbGVjdGVkTGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tzZWxlY3RlZFtpXV07XG4gICAgICBjb25zdCBkcmF3TGF0ZXIgPSBub2RlLmRyYXcoY3R4KTtcbiAgICAgIGlmIChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwgIT0gbnVsbCkge1xuICAgICAgICBkcmF3RXh0ZXJuYWxMYWJlbHMucHVzaChkcmF3TGF0ZXIuZHJhd0V4dGVybmFsTGFiZWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRyYXcgaG92ZXJlZCBub2RlcyBhYm92ZSBldmVyeXRoaW5nIGVsc2U6IGZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtbmV0d29yay9pc3N1ZXMvMjI2XG4gICAgZm9yIChpID0gMDsgaSA8IGhvdmVyZWRMZW5ndGg7IGkrKykge1xuICAgICAgbm9kZSA9IG5vZGVzW2hvdmVyZWRbaV1dO1xuICAgICAgY29uc3QgZHJhd0xhdGVyID0gbm9kZS5kcmF3KGN0eCk7XG4gICAgICBpZiAoZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsICE9IG51bGwpIHtcbiAgICAgICAgZHJhd0V4dGVybmFsTGFiZWxzLnB1c2goZHJhd0xhdGVyLmRyYXdFeHRlcm5hbExhYmVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZHJhd0V4dGVybmFsTGFiZWxzOiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZHJhdyBvZiBkcmF3RXh0ZXJuYWxMYWJlbHMpIHtcbiAgICAgICAgICBkcmF3KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXcgYWxsIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHggIDJEIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdFZGdlcyhjdHgpIHtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBjb25zdCBlZGdlSW5kaWNlcyA9IHRoaXMuYm9keS5lZGdlSW5kaWNlcztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgZWRnZS5kcmF3KGN0eCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZHJhdyBhbGwgYXJyb3dzXG4gICAqXG4gICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBjdHggIDJEIGNvbnRleHQgb2YgYSBIVE1MIGNhbnZhc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYXdBcnJvd3MoY3R4KSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLmJvZHkuZWRnZUluZGljZXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgIGVkZ2UuZHJhd0Fycm93cyhjdHgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgcmVxdWlyZXMgYSBzZXRUaW1lb3V0IG9yIGEgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBUaGlzIHdhcyByZXF1aXJlZCBiZWNhdXNlXG4gICAqIHNvbWUgaW1wbGVtZW50YXRpb25zIChzYWZhcmkgYW5kIElFOSkgZGlkIG5vdCBzdXBwb3J0IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RldGVybWluZUJyb3dzZXJNZXRob2QoKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGNvbnN0IGJyb3dzZXJUeXBlID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgdGhpcy5yZXF1aXJlc1RpbWVvdXQgPSBmYWxzZTtcbiAgICAgIGlmIChicm93c2VyVHlwZS5pbmRleE9mKFwibXNpZSA5LjBcIikgIT0gLTEpIHtcbiAgICAgICAgLy8gSUUgOVxuICAgICAgICB0aGlzLnJlcXVpcmVzVGltZW91dCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGJyb3dzZXJUeXBlLmluZGV4T2YoXCJzYWZhcmlcIikgIT0gLTEpIHtcbiAgICAgICAgLy8gc2FmYXJpXG4gICAgICAgIGlmIChicm93c2VyVHlwZS5pbmRleE9mKFwiY2hyb21lXCIpIDw9IC0xKSB7XG4gICAgICAgICAgdGhpcy5yZXF1aXJlc1RpbWVvdXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVxdWlyZXNUaW1lb3V0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3IHNlbGVjdGlvbiBib3hcbiAgICpcbiAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGN0eCAgMkQgY29udGV4dCBvZiBhIEhUTUwgY2FudmFzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZHJhd1NlbGVjdGlvbkJveChjdHgpIHtcbiAgICBpZiAodGhpcy5ib2R5LnNlbGVjdGlvbkJveC5zaG93KSB7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjb25zdCB3aWR0aCA9XG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uZW5kLnggLVxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLnN0YXJ0Lng7XG4gICAgICBjb25zdCBoZWlnaHQgPVxuICAgICAgICB0aGlzLmJvZHkuc2VsZWN0aW9uQm94LnBvc2l0aW9uLmVuZC55IC1cbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC55O1xuICAgICAgY3R4LnJlY3QoXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueCxcbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC55LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICApO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgxNTEsIDE5NCwgMjUyLCAwLjIpXCI7XG4gICAgICBjdHguZmlsbFJlY3QoXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQueCxcbiAgICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5zdGFydC55LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICApO1xuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJyZ2JhKDE1MSwgMTk0LCAyNTIsIDEpXCI7XG4gICAgICBjdHguc3Ryb2tlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FudmFzUmVuZGVyZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRJbnRlcnZhbDtcbiIsICIvKipcbiAqIFJlZ2lzdGVyIGEgdG91Y2ggZXZlbnQsIHRha2luZyBwbGFjZSBiZWZvcmUgYSBnZXN0dXJlXG4gKlxuICogQHBhcmFtIHtIYW1tZXJ9IGhhbW1lciAgICAgICBBIGhhbW1lciBpbnN0YW5jZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBDYWxsYmFjaywgY2FsbGVkIGFzIGNhbGxiYWNrKGV2ZW50KVxuICovXG5leHBvcnQgZnVuY3Rpb24gb25Ub3VjaChoYW1tZXIsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrLmlucHV0SGFuZGxlciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC5pc0ZpcnN0KSB7XG4gICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCBjYWxsYmFjay5pbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgcmVsZWFzZSBldmVudCwgdGFraW5nIHBsYWNlIGFmdGVyIGEgZ2VzdHVyZVxuICpcbiAqIEBwYXJhbSB7SGFtbWVyfSBoYW1tZXIgICAgICAgQSBoYW1tZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgQ2FsbGJhY2ssIGNhbGxlZCBhcyBjYWxsYmFjayhldmVudClcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gb25SZWxlYXNlKGhhbW1lciwgY2FsbGJhY2spIHtcbiAgY2FsbGJhY2suaW5wdXRIYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmlzRmluYWwpIHtcbiAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGhhbW1lci5vbihcImhhbW1lci5pbnB1dFwiLCBjYWxsYmFjay5pbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIFVucmVnaXN0ZXIgYSB0b3VjaCBldmVudCwgdGFraW5nIHBsYWNlIGJlZm9yZSBhIGdlc3R1cmVcbiAqXG4gKiBAcGFyYW0ge0hhbW1lcn0gaGFtbWVyICAgICAgIEEgaGFtbWVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrLCBjYWxsZWQgYXMgY2FsbGJhY2soZXZlbnQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvZmZUb3VjaChoYW1tZXIsIGNhbGxiYWNrKSB7XG4gIGhhbW1lci5vZmYoXCJoYW1tZXIuaW5wdXRcIiwgY2FsbGJhY2suaW5wdXRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBVbnJlZ2lzdGVyIGEgcmVsZWFzZSBldmVudCwgdGFraW5nIHBsYWNlIGJlZm9yZSBhIGdlc3R1cmVcbiAqXG4gKiBAcGFyYW0ge0hhbW1lcn0gaGFtbWVyICAgICAgIEEgaGFtbWVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrLCBjYWxsZWQgYXMgY2FsbGJhY2soZXZlbnQpXG4gKi9cbmV4cG9ydCBjb25zdCBvZmZSZWxlYXNlID0gb2ZmVG91Y2g7XG5cbi8qKlxuICogSGFjayB0aGUgUGluY2hSZWNvZ25pemVyIHN1Y2ggdGhhdCBpdCBkb2Vzbid0IHByZXZlbnQgZGVmYXVsdCBiZWhhdmlvclxuICogZm9yIHZlcnRpY2FsIHBhbm5pbmcuXG4gKlxuICogWWVhaCAuLi4gdGhpcyBpcyBxdWl0ZSBhIGhhY2sgLi4uIHNlZSBodHRwczovL2dpdGh1Yi5jb20vaGFtbWVyanMvaGFtbWVyLmpzL2lzc3Vlcy85MzJcbiAqXG4gKiBAcGFyYW0ge0hhbW1lci5QaW5jaH0gcGluY2hSZWNvZ25pemVyXG4gKiBAcmV0dXJucyB7SGFtbWVyLlBpbmNofSByZXR1cm5zIHRoZSBwaW5jaFJlY29nbml6ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVQcmV2ZW50RGVmYXVsdFZlcnRpY2FsbHkocGluY2hSZWNvZ25pemVyKSB7XG4gIGNvbnN0IFRPVUNIX0FDVElPTl9QQU5fWSA9IFwicGFuLXlcIjtcblxuICBwaW5jaFJlY29nbml6ZXIuZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gZGVmYXVsdCBtZXRob2QgcmV0dXJucyBbVE9VQ0hfQUNUSU9OX05PTkVdXG4gICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fUEFOX1ldO1xuICB9O1xuXG4gIHJldHVybiBwaW5jaFJlY29nbml6ZXI7XG59XG4iLCAiaW1wb3J0IHsgb25SZWxlYXNlLCBvblRvdWNoIH0gZnJvbSBcIi4uLy4uL2hhbW1lclV0aWxcIjtcblxuaW1wb3J0IHsgSGFtbWVyLCBzZWxlY3RpdmVEZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgbWFpbiBmcmFtZSBmb3IgdGhlIE5ldHdvcmsuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIG9uY2Ugd2hlbiBhIE5ldHdvcmsgb2JqZWN0IGlzIGNyZWF0ZWQuIFRoZSBmcmFtZVxuICogY29udGFpbnMgYSBjYW52YXMsIGFuZCB0aGlzIGNhbnZhcyBjb250YWlucyBhbGwgb2JqZWN0cyBsaWtlIHRoZSBheGlzIGFuZFxuICogbm9kZXMuXG4gKi9cbmNsYXNzIENhbnZhcyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSkge1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy5waXhlbFJhdGlvID0gMTtcbiAgICB0aGlzLmNhbWVyYVN0YXRlID0ge307XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuY2FudmFzVmlld0NlbnRlciA9IHt9O1xuICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3MgPSBbXTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBhdXRvUmVzaXplOiB0cnVlLFxuICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgLy8gYmluZCB0aGUgZXZlbnRzXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub25jZShcInJlc2l6ZVwiLCAob2JqKSA9PiB7XG4gICAgICBpZiAob2JqLndpZHRoICE9PSAwKSB7XG4gICAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnggPSBvYmoud2lkdGggKiAwLjU7XG4gICAgICB9XG4gICAgICBpZiAob2JqLmhlaWdodCAhPT0gMCkge1xuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55ID0gb2JqLmhlaWdodCAqIDAuNTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcInNldFNpemVcIiwgdGhpcy5zZXRTaXplLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmhhbW1lckZyYW1lLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaGFtbWVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2NsZWFuVXAoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmllbGRzID0gW1wid2lkdGhcIiwgXCJoZWlnaHRcIiwgXCJhdXRvUmVzaXplXCJdO1xuICAgICAgc2VsZWN0aXZlRGVlcEV4dGVuZChmaWVsZHMsIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gQXV0b21hdGljYWxseSBhZGFwdCB0byBjaGFuZ2luZyBzaXplIG9mIHRoZSBjb250YWluZXIgZWxlbWVudC5cbiAgICB0aGlzLl9jbGVhblVwKCk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvUmVzaXplID09PSB0cnVlKSB7XG4gICAgICBpZiAod2luZG93LlJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIGRlY2VudCBicm93c2VycywgaW1tZWRpYXRlIHJlYWN0aW9uc1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuc2V0U2l6ZSgpO1xuICAgICAgICAgIGlmIChjaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgeyBmcmFtZSB9ID0gdGhpcztcblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGZyYW1lKTtcbiAgICAgICAgdGhpcy5fY2xlYW51cENhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZnJhbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElFMTEsIGNvbnRpbm91cyBwb2xsaW5nXG4gICAgICAgIGNvbnN0IHJlc2l6ZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnNldFNpemUoKTtcbiAgICAgICAgICBpZiAoY2hhbmdlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChyZXNpemVUaW1lcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBdXRvbWF0aWNhbGx5IGFkYXB0IHRvIGNoYW5naW5nIHNpemUgb2YgdGhlIGJyb3dzZXIuXG4gICAgICBjb25zdCByZXNpemVGdW5jdGlvbiA9IHRoaXMuX29uUmVzaXplLmJpbmQodGhpcyk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVGdW5jdGlvbik7XG4gICAgICB0aGlzLl9jbGVhbnVwQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVGdW5jdGlvbik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhblVwKCkge1xuICAgIHRoaXMuX2NsZWFudXBDYWxsYmFja3NcbiAgICAgIC5zcGxpY2UoMClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25SZXNpemUoKSB7XG4gICAgdGhpcy5zZXRTaXplKCk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuZCBzdG9yZSB0aGUgY2FtZXJhU3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPXRoaXMucGl4ZWxSYXRpb11cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRDYW1lcmFTdGF0ZShwaXhlbFJhdGlvID0gdGhpcy5waXhlbFJhdGlvKSB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNXaWR0aCA9IHRoaXMuZnJhbWUuY2FudmFzLndpZHRoIC8gcGl4ZWxSYXRpbztcbiAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNIZWlnaHQgPSB0aGlzLmZyYW1lLmNhbnZhcy5oZWlnaHQgLyBwaXhlbFJhdGlvO1xuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5zY2FsZSA9IHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wb3NpdGlvbiA9IHRoaXMuRE9NdG9DYW52YXMoe1xuICAgICAgICB4OiAoMC41ICogdGhpcy5mcmFtZS5jYW52YXMud2lkdGgpIC8gcGl4ZWxSYXRpbyxcbiAgICAgICAgeTogKDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCkgLyBwaXhlbFJhdGlvLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY2FtZXJhU3RhdGVcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDYW1lcmFTdGF0ZSgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmNhbWVyYVN0YXRlLnNjYWxlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoICE9PSAwICYmXG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRIZWlnaHQgIT09IDAgJiZcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyAhPT0gMCAmJlxuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wcmV2aW91c1dpZHRoID4gMCAmJlxuICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wcmV2aW91c0hlaWdodCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IHdpZHRoUmF0aW8gPVxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCAvXG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyAvXG4gICAgICAgIHRoaXMuY2FtZXJhU3RhdGUucHJldmlvdXNXaWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodFJhdGlvID1cbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0IC9cbiAgICAgICAgdGhpcy5waXhlbFJhdGlvIC9cbiAgICAgICAgdGhpcy5jYW1lcmFTdGF0ZS5wcmV2aW91c0hlaWdodDtcbiAgICAgIGxldCBuZXdTY2FsZSA9IHRoaXMuY2FtZXJhU3RhdGUuc2NhbGU7XG5cbiAgICAgIGlmICh3aWR0aFJhdGlvICE9IDEgJiYgaGVpZ2h0UmF0aW8gIT0gMSkge1xuICAgICAgICBuZXdTY2FsZSA9IHRoaXMuY2FtZXJhU3RhdGUuc2NhbGUgKiAwLjUgKiAod2lkdGhSYXRpbyArIGhlaWdodFJhdGlvKTtcbiAgICAgIH0gZWxzZSBpZiAod2lkdGhSYXRpbyAhPSAxKSB7XG4gICAgICAgIG5ld1NjYWxlID0gdGhpcy5jYW1lcmFTdGF0ZS5zY2FsZSAqIHdpZHRoUmF0aW87XG4gICAgICB9IGVsc2UgaWYgKGhlaWdodFJhdGlvICE9IDEpIHtcbiAgICAgICAgbmV3U2NhbGUgPSB0aGlzLmNhbWVyYVN0YXRlLnNjYWxlICogaGVpZ2h0UmF0aW87XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gbmV3U2NhbGU7XG4gICAgICAvLyB0aGlzIGNvbWVzIGZyb20gdGhlIHZpZXcgbW9kdWxlLlxuICAgICAgY29uc3QgY3VycmVudFZpZXdDZW50ZXIgPSB0aGlzLkRPTXRvQ2FudmFzKHtcbiAgICAgICAgeDogMC41ICogdGhpcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGgsXG4gICAgICAgIHk6IDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkaXN0YW5jZUZyb21DZW50ZXIgPSB7XG4gICAgICAgIC8vIG9mZnNldCBmcm9tIHZpZXcsIGRpc3RhbmNlIHZpZXcgaGFzIHRvIGNoYW5nZSBieSB0aGVzZSB4IGFuZCB5IHRvIGNlbnRlciB0aGUgbm9kZVxuICAgICAgICB4OiBjdXJyZW50Vmlld0NlbnRlci54IC0gdGhpcy5jYW1lcmFTdGF0ZS5wb3NpdGlvbi54LFxuICAgICAgICB5OiBjdXJyZW50Vmlld0NlbnRlci55IC0gdGhpcy5jYW1lcmFTdGF0ZS5wb3NpdGlvbi55LFxuICAgICAgfTtcbiAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnggKz1cbiAgICAgICAgZGlzdGFuY2VGcm9tQ2VudGVyLnggKiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnkgKz1cbiAgICAgICAgZGlzdGFuY2VGcm9tQ2VudGVyLnkgKiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByZXBhcmVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSArIFwicHhcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKHZhbHVlLmluZGV4T2YoXCIlXCIpICE9PSAtMSB8fCB2YWx1ZS5pbmRleE9mKFwicHhcIikgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZihcIiVcIikgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSArIFwicHhcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJDb3VsZCBub3QgdXNlIHRoZSB2YWx1ZSBzdXBwbGllZCBmb3Igd2lkdGggb3IgaGVpZ2h0OlwiICsgdmFsdWVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgSFRNTFxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICAvLyByZW1vdmUgYWxsIGVsZW1lbnRzIGZyb20gdGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgIHdoaWxlICh0aGlzLmJvZHkuY29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgdGhpcy5ib2R5LmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLmJvZHkuY29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtbmV0d29ya1wiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG4gICAgdGhpcy5mcmFtZS50YWJJbmRleCA9IDA7IC8vIHRhYiBpbmRleCBpcyByZXF1aXJlZCBmb3Iga2V5Y2hhcm0gdG8gYmluZCBrZXlzdHJva2VzIHRvIHRoZSBkaXYgaW5zdGVhZCBvZiB0aGUgd2luZG93XG5cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHRoaXMuZnJhbWUuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICB0aGlzLmZyYW1lLmNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUuY2FudmFzKTtcblxuICAgIGlmICghdGhpcy5mcmFtZS5jYW52YXMuZ2V0Q29udGV4dCkge1xuICAgICAgY29uc3Qgbm9DYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpO1xuICAgICAgbm9DYW52YXMuc3R5bGUuY29sb3IgPSBcInJlZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xuICAgICAgbm9DYW52YXMuc3R5bGUucGFkZGluZyA9IFwiMTBweFwiO1xuICAgICAgbm9DYW52YXMuaW5uZXJUZXh0ID0gXCJFcnJvcjogeW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgSFRNTCBjYW52YXNcIjtcbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmFwcGVuZENoaWxkKG5vQ2FudmFzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0UGl4ZWxSYXRpbygpO1xuICAgICAgdGhpcy5zZXRUcmFuc2Zvcm0oKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIGZyYW1lIHRvIHRoZSBjb250YWluZXIgZWxlbWVudFxuICAgIHRoaXMuYm9keS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG5cbiAgICB0aGlzLmJvZHkudmlldy5zY2FsZSA9IDE7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7XG4gICAgICB4OiAwLjUgKiB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCxcbiAgICAgIHk6IDAuNSAqIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9O1xuXG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gYmluZHMgaGFtbWVyLCBpdCBjYW4gYmUgcmVwZWF0ZWQgb3ZlciBhbmQgb3ZlciBkdWUgdG8gdGhlIHVuaXF1ZW5lc3MgY2hlY2suXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYmluZEhhbW1lcigpIHtcbiAgICBpZiAodGhpcy5oYW1tZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5oYW1tZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLmRyYWcgPSB7fTtcbiAgICB0aGlzLnBpbmNoID0ge307XG5cbiAgICAvLyBpbml0IGhhbW1lclxuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lcih0aGlzLmZyYW1lLmNhbnZhcyk7XG4gICAgdGhpcy5oYW1tZXIuZ2V0KFwicGluY2hcIikuc2V0KHsgZW5hYmxlOiB0cnVlIH0pO1xuICAgIC8vIGVuYWJsZSB0byBnZXQgYmV0dGVyIHJlc3BvbnNlLCB0b2RvOiB0ZXN0IG9uIG1vYmlsZS5cbiAgICB0aGlzLmhhbW1lclxuICAgICAgLmdldChcInBhblwiKVxuICAgICAgLnNldCh7IHRocmVzaG9sZDogNSwgZGlyZWN0aW9uOiBIYW1tZXIuRElSRUNUSU9OX0FMTCB9KTtcblxuICAgIG9uVG91Y2godGhpcy5oYW1tZXIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVG91Y2goZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwidGFwXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVGFwKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcImRvdWJsZXRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRvdWJsZVRhcChldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwcmVzc1wiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkhvbGQoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuc3RhcnRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25EcmFnU3RhcnQoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFubW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWcoZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuaGFtbWVyLm9uKFwicGFuZW5kXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uRHJhZ0VuZChldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwaW5jaFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblBpbmNoKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIC8vIFRPRE86IG5lYXRseSBjbGVhbnVwIHRoZXNlIGhhbmRsZXJzIHdoZW4gcmUtY3JlYXRpbmcgdGhlIENhbnZhcywgSUYgdGhlc2UgYXJlIGRvbmUgd2l0aCBoYW1tZXIsIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiB3aWxsIG5vdCB3b3JrP1xuICAgIHRoaXMuZnJhbWUuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlV2hlZWwoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mcmFtZS5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlTW92ZShldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5mcmFtZS5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uQ29udGV4dChldmVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmhhbW1lckZyYW1lID0gbmV3IEhhbW1lcih0aGlzLmZyYW1lKTtcbiAgICBvblJlbGVhc2UodGhpcy5oYW1tZXJGcmFtZSwgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25SZWxlYXNlKGV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuZXcgc2l6ZSBmb3IgdGhlIG5ldHdvcmtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHdpZHRoICAgV2lkdGggaW4gcGl4ZWxzIG9yIHBlcmNlbnRhZ2UgKGZvciBleGFtcGxlICc4MDBweCdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgb3IgJzUwJScpXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoZWlnaHQgIEhlaWdodCBpbiBwaXhlbHMgb3IgcGVyY2VudGFnZSAgKGZvciBleGFtcGxlICc0MDBweCdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgb3IgJzMwJScpXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2V0U2l6ZSh3aWR0aCA9IHRoaXMub3B0aW9ucy53aWR0aCwgaGVpZ2h0ID0gdGhpcy5vcHRpb25zLmhlaWdodCkge1xuICAgIHdpZHRoID0gdGhpcy5fcHJlcGFyZVZhbHVlKHdpZHRoKTtcbiAgICBoZWlnaHQgPSB0aGlzLl9wcmVwYXJlVmFsdWUoaGVpZ2h0KTtcblxuICAgIGxldCBlbWl0RXZlbnQgPSBmYWxzZTtcbiAgICBjb25zdCBvbGRXaWR0aCA9IHRoaXMuZnJhbWUuY2FudmFzLndpZHRoO1xuICAgIGNvbnN0IG9sZEhlaWdodCA9IHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodDtcblxuICAgIC8vIHVwZGF0ZSB0aGUgcGl4ZWwgcmF0aW9cbiAgICAvL1xuICAgIC8vIE5PVEU6IENvbW1lbnQgaW4gZm9sbG93aW5nIGlzIHJhdGhlciBpbmNvbnNpc3RlbnQ7IHRoaXMgaXMgdGhlIE9OTFkgcGxhY2UgaW4gdGhlIGNvZGVcbiAgICAvLyAgICAgICB3aGVyZSBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHBpeGVsIHJhdGlvIGNvdWxkIGNoYW5nZSBhdCBydW50aW1lLlxuICAgIC8vICAgICAgIFRoZSBvbmx5IHdheSBJIGNhbiB0aGluayBvZiB0aGlzIGhhcHBlbmluZyBpcyBhIHJvdGF0aW5nIHNjcmVlbiBvciB0YWJsZXQ7IGJ1dCB0aGVuXG4gICAgLy8gICAgICAgdGhlcmUgc2hvdWxkIGJlIGEgbWVjaGFuaXNtIGZvciByZWxvYWRpbmcgdGhlIGRhdGEgKFRPRE86IGNoZWNrIGlmIHRoaXMgaXMgcHJlc2VudCkuXG4gICAgLy9cbiAgICAvLyAgICAgICBJZiB0aGUgYXNzdW1wdGlvbiBpcyB0cnVlIChpLmUuIHBpeGVsIHJhdGlvIGNhbiBjaGFuZ2UgYXQgcnVudGltZSksIHRoZW4gKmFsbCogdXNhZ2VcbiAgICAvLyAgICAgICBvZiBwaXhlbCByYXRpbyBtdXN0IGJlIG92ZXJoYXVsZWQgZm9yIHRoaXMuXG4gICAgLy9cbiAgICAvLyAgICAgICBGb3IgdGhlIHRpbWUgYmVpbmcsIEkgd2lsbCBodW1vciB0aGUgYXNzdW1wdGlvbiBoZXJlLCBhbmQgaW4gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgYXNzdW1lIGl0IGlzXG4gICAgLy8gICAgICAgY29uc3RhbnQuXG4gICAgY29uc3QgcHJldmlvdXNSYXRpbyA9IHRoaXMucGl4ZWxSYXRpbzsgLy8gd2UgY2FjaGUgdGhpcyBiZWNhdXNlIHRoZSBjYW1lcmEgc3RhdGUgc3RvcmFnZSBuZWVkcyB0aGUgb2xkIHZhbHVlXG4gICAgdGhpcy5fc2V0UGl4ZWxSYXRpbygpO1xuXG4gICAgaWYgKFxuICAgICAgd2lkdGggIT0gdGhpcy5vcHRpb25zLndpZHRoIHx8XG4gICAgICBoZWlnaHQgIT0gdGhpcy5vcHRpb25zLmhlaWdodCB8fFxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS53aWR0aCAhPSB3aWR0aCB8fFxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5oZWlnaHQgIT0gaGVpZ2h0XG4gICAgKSB7XG4gICAgICB0aGlzLl9nZXRDYW1lcmFTdGF0ZShwcmV2aW91c1JhdGlvKTtcblxuICAgICAgdGhpcy5mcmFtZS5zdHlsZS53aWR0aCA9IHdpZHRoO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICB0aGlzLmZyYW1lLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSBcIjEwMCVcIjtcblxuICAgICAgdGhpcy5mcmFtZS5jYW52YXMud2lkdGggPSBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcbiAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCA9IE1hdGgucm91bmQoXG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcblxuICAgICAgdGhpcy5vcHRpb25zLndpZHRoID0gd2lkdGg7XG4gICAgICB0aGlzLm9wdGlvbnMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICB0aGlzLmNhbnZhc1ZpZXdDZW50ZXIgPSB7XG4gICAgICAgIHg6IDAuNSAqIHRoaXMuZnJhbWUuY2xpZW50V2lkdGgsXG4gICAgICAgIHk6IDAuNSAqIHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0LFxuICAgICAgfTtcblxuICAgICAgZW1pdEV2ZW50ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyB3b3VsZCBhZGFwdCB0aGUgd2lkdGggb2YgdGhlIGNhbnZhcyB0byB0aGUgd2lkdGggZnJvbSAxMDAlIGlmIGFuZCBvbmx5IGlmXG4gICAgICAvLyB0aGVyZSBpcyBhIGNoYW5nZS5cblxuICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLnJvdW5kKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcbiAgICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGgucm91bmQoXG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCAqIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgKTtcblxuICAgICAgLy8gc3RvcmUgdGhlIGNhbWVyYSBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBzaXplLlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCAhPT0gbmV3V2lkdGggfHxcbiAgICAgICAgdGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0ICE9PSBuZXdIZWlnaHRcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9nZXRDYW1lcmFTdGF0ZShwcmV2aW91c1JhdGlvKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZnJhbWUuY2FudmFzLndpZHRoICE9PSBuZXdXaWR0aCkge1xuICAgICAgICB0aGlzLmZyYW1lLmNhbnZhcy53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgICBlbWl0RXZlbnQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCAhPT0gbmV3SGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuZnJhbWUuY2FudmFzLmhlaWdodCA9IG5ld0hlaWdodDtcbiAgICAgICAgZW1pdEV2ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW1pdEV2ZW50ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzaXplXCIsIHtcbiAgICAgICAgd2lkdGg6IE1hdGgucm91bmQodGhpcy5mcmFtZS5jYW52YXMud2lkdGggLyB0aGlzLnBpeGVsUmF0aW8pLFxuICAgICAgICBoZWlnaHQ6IE1hdGgucm91bmQodGhpcy5mcmFtZS5jYW52YXMuaGVpZ2h0IC8gdGhpcy5waXhlbFJhdGlvKSxcbiAgICAgICAgb2xkV2lkdGg6IE1hdGgucm91bmQob2xkV2lkdGggLyB0aGlzLnBpeGVsUmF0aW8pLFxuICAgICAgICBvbGRIZWlnaHQ6IE1hdGgucm91bmQob2xkSGVpZ2h0IC8gdGhpcy5waXhlbFJhdGlvKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyByZXN0b3JlIHRoZSBjYW1lcmEgb24gY2hhbmdlLlxuICAgICAgdGhpcy5fc2V0Q2FtZXJhU3RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgaW5pdGlhbGl6ZWQgc28gdGhlIGdldCBhbmQgc2V0IGNhbWVyYSB3aWxsIHdvcmsgZnJvbSBub3cgb24uXG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgcmV0dXJuIGVtaXRFdmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfVxuICAgKi9cbiAgZ2V0Q29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZS5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgcGl4ZWwgcmF0aW8gZm9yIHZhcmlvdXMgYnJvd3NlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lUGl4ZWxSYXRpbygpIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICBpZiAoY3R4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgY2FudmF4IGNvbnRleHRcIik7XG4gICAgfVxuXG4gICAgbGV0IG51bWVyYXRvciA9IDE7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIC8vICh3aW5kb3cgIT09IHVuZGVmaW5lZCkgZG9lc24ndCB3b3JrIGhlcmUhXG4gICAgICAvLyBQcm90ZWN0aW9uIGR1cmluZyB1bml0IHRlc3RzLCB3aGVyZSAnd2luZG93JyBjYW4gYmUgbWlzc2luZ1xuICAgICAgbnVtZXJhdG9yID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgICB9XG5cbiAgICBjb25zdCBkZW5vbWluYXRvciA9XG4gICAgICBjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgIDE7XG5cbiAgICByZXR1cm4gbnVtZXJhdG9yIC8gZGVub21pbmF0b3I7XG4gIH1cblxuICAvKipcbiAgICogTGF6eSBkZXRlcm1pbmF0aW9uIG9mIHBpeGVsIHJhdGlvLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFBpeGVsUmF0aW8oKSB7XG4gICAgdGhpcy5waXhlbFJhdGlvID0gdGhpcy5fZGV0ZXJtaW5lUGl4ZWxSYXRpbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNmb3JtIGluIHRoZSBjb250YWluZWQgY29udGV4dCwgYmFzZWQgb24gaXRzIHBpeGVsUmF0aW9cbiAgICovXG4gIHNldFRyYW5zZm9ybSgpIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICBpZiAoY3R4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgY2FudmF4IGNvbnRleHRcIik7XG4gICAgfVxuXG4gICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgWCBjb29yZGluYXRlIGluIERPTS1zcGFjZSAoY29vcmRpbmF0ZSBwb2ludCBpbiBicm93c2VyIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXIgZGl2KSB0b1xuICAgKiB0aGUgWCBjb29yZGluYXRlIGluIGNhbnZhcy1zcGFjZSAodGhlIHNpbXVsYXRpb24gc2FuZGJveCwgd2hpY2ggdGhlIGNhbWVyYSBsb29rcyB1cG9uKVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX1hjb252ZXJ0RE9NdG9DYW52YXMoeCkge1xuICAgIHJldHVybiAoeCAtIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLngpIC8gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgWCBjb29yZGluYXRlIGluIGNhbnZhcy1zcGFjZSAodGhlIHNpbXVsYXRpb24gc2FuZGJveCwgd2hpY2ggdGhlIGNhbWVyYSBsb29rcyB1cG9uKSB0b1xuICAgKiB0aGUgWCBjb29yZGluYXRlIGluIERPTS1zcGFjZSAoY29vcmRpbmF0ZSBwb2ludCBpbiBicm93c2VyIHJlbGF0aXZlIHRvIHRoZSBjb250YWluZXIgZGl2KVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX1hjb252ZXJ0Q2FudmFzVG9ET00oeCkge1xuICAgIHJldHVybiB4ICogdGhpcy5ib2R5LnZpZXcuc2NhbGUgKyB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi54O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIFkgY29vcmRpbmF0ZSBpbiBET00tc3BhY2UgKGNvb3JkaW5hdGUgcG9pbnQgaW4gYnJvd3NlciByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyIGRpdikgdG9cbiAgICogdGhlIFkgY29vcmRpbmF0ZSBpbiBjYW52YXMtc3BhY2UgKHRoZSBzaW11bGF0aW9uIHNhbmRib3gsIHdoaWNoIHRoZSBjYW1lcmEgbG9va3MgdXBvbilcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ZY29udmVydERPTXRvQ2FudmFzKHkpIHtcbiAgICByZXR1cm4gKHkgLSB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55KSAvIHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIFkgY29vcmRpbmF0ZSBpbiBjYW52YXMtc3BhY2UgKHRoZSBzaW11bGF0aW9uIHNhbmRib3gsIHdoaWNoIHRoZSBjYW1lcmEgbG9va3MgdXBvbikgdG9cbiAgICogdGhlIFkgY29vcmRpbmF0ZSBpbiBET00tc3BhY2UgKGNvb3JkaW5hdGUgcG9pbnQgaW4gYnJvd3NlciByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyIGRpdilcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ZY29udmVydENhbnZhc1RvRE9NKHkpIHtcbiAgICByZXR1cm4geSAqIHRoaXMuYm9keS52aWV3LnNjYWxlICsgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb3NcbiAgICogQHJldHVybnMge3BvaW50fVxuICAgKi9cbiAgY2FudmFzVG9ET00ocG9zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRoaXMuX1hjb252ZXJ0Q2FudmFzVG9ET00ocG9zLngpLFxuICAgICAgeTogdGhpcy5fWWNvbnZlcnRDYW52YXNUb0RPTShwb3MueSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3BvaW50fSBwb3NcbiAgICogQHJldHVybnMge3BvaW50fVxuICAgKi9cbiAgRE9NdG9DYW52YXMocG9zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRoaXMuX1hjb252ZXJ0RE9NdG9DYW52YXMocG9zLngpLFxuICAgICAgeTogdGhpcy5fWWNvbnZlcnRET010b0NhbnZhcyhwb3MueSksXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW52YXM7XG4iLCAiaW1wb3J0IHsgZWFzaW5nRnVuY3Rpb25zIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG5pbXBvcnQgTmV0d29ya1V0aWwgZnJvbSBcIi4uL05ldHdvcmtVdGlsXCI7XG5pbXBvcnQgeyBub3JtYWxpemVGaXRPcHRpb25zIH0gZnJvbSBcIi4vdmlldy1oYW5kbGVyXCI7XG5cbi8qKlxuICogVGhlIHZpZXdcbiAqL1xuY2xhc3MgVmlldyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5LCBjYW52YXMpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuXG4gICAgdGhpcy5hbmltYXRpb25TcGVlZCA9IDEgLyB0aGlzLnJlbmRlclJlZnJlc2hSYXRlO1xuICAgIHRoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb24gPSBcImVhc2VJbk91dFF1aW50XCI7XG4gICAgdGhpcy5lYXNpbmdUaW1lID0gMDtcbiAgICB0aGlzLnNvdXJjZVNjYWxlID0gMDtcbiAgICB0aGlzLnRhcmdldFNjYWxlID0gMDtcbiAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uID0gMDtcbiAgICB0aGlzLnRhcmdldFRyYW5zbGF0aW9uID0gMDtcbiAgICB0aGlzLmxvY2tlZE9uTm9kZUlkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubG9ja2VkT25Ob2RlT2Zmc2V0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudG91Y2hUaW1lID0gMDtcblxuICAgIHRoaXMudmlld0Z1bmN0aW9uID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJmaXRcIiwgdGhpcy5maXQuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJhbmltYXRpb25GaW5pc2hlZFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0b3BSZW5kZXJpbmdcIik7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJ1bmxvY2tOb2RlXCIsIHRoaXMucmVsZWFzZU5vZGUuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XVxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gem9vbXMgb3V0IHRvIGZpdCBhbGwgZGF0YSBvbiBzY3JlZW4gYmFzZWQgb24gYW1vdW50IG9mIG5vZGVzXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17e25vZGVzPUFycmF5fX1dXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRpYWxab29tPWZhbHNlXSAgfCB6b29tIGJhc2VkIG9uIGZpdHRlZCBmb3JtdWxhIG9yIHJhbmdlLCB0cnVlID0gZml0dGVkLCBkZWZhdWx0ID0gZmFsc2U7XG4gICAqL1xuICBmaXQob3B0aW9ucywgaW5pdGlhbFpvb20gPSBmYWxzZSkge1xuICAgIG9wdGlvbnMgPSBub3JtYWxpemVGaXRPcHRpb25zKG9wdGlvbnMsIHRoaXMuYm9keS5ub2RlSW5kaWNlcyk7XG5cbiAgICBjb25zdCBjYW52YXNXaWR0aCA9IHRoaXMuY2FudmFzLmZyYW1lLmNhbnZhcy5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBjYW52YXNIZWlnaHQgPSB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0O1xuXG4gICAgbGV0IHJhbmdlO1xuICAgIGxldCB6b29tTGV2ZWw7XG4gICAgaWYgKGNhbnZhc1dpZHRoID09PSAwIHx8IGNhbnZhc0hlaWdodCA9PT0gMCkge1xuICAgICAgLy8gVGhlcmUncyBubyBwb2ludCBpbiB0cnlpbmcgdG8gZml0IGludG8gemVybyBzaXplZCBjYW52YXMuIFRoaXMgY291bGRcbiAgICAgIC8vIHBvdGVudGlhbGx5IGV2ZW4gcmVzdWx0IGluIGludmFsaWQgdmFsdWVzIGJlaW5nIGNvbXB1dGVkLiBGb3IgZXhhbXBsZVxuICAgICAgLy8gZm9yIG5ldHdvcmsgd2l0aG91dCBub2RlcyBhbmQgemVybyBzaXplZCBjYW52YXMgdGhlIHpvb20gbGV2ZWwgd291bGRcbiAgICAgIC8vIGVuZCB1cCBiZWluZyBjb21wdXRlZCBhcyAwLzAgd2hpY2ggcmVzdWx0cyBpbiBOYU4uIEluIGFueSBvdGhlciBjYXNlXG4gICAgICAvLyB0aGlzIHdvdWxkIGJlIDAvc29tZXRoaW5nIHdoaWNoIGlzIGFnYWluIHBvaW50bGVzcyB0byBjb21wdXRlLlxuICAgICAgem9vbUxldmVsID0gMTtcblxuICAgICAgcmFuZ2UgPSBOZXR3b3JrVXRpbC5nZXRSYW5nZSh0aGlzLmJvZHkubm9kZXMsIG9wdGlvbnMubm9kZXMpO1xuICAgIH0gZWxzZSBpZiAoaW5pdGlhbFpvb20gPT09IHRydWUpIHtcbiAgICAgIC8vIGNoZWNrIGlmIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBub2RlcyBoYXZlIGEgcHJlZGVmaW5lZCBwb3NpdGlvbi4gSWYgc28sIHdlIHVzZSB0aGUgcmFuZ2UsIG5vdCB0aGUgYXBwcm94aW1hdGlvbi5cbiAgICAgIGxldCBwb3NpdGlvbkRlZmluZWQgPSAwO1xuICAgICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICAgIGlmIChub2RlLnByZWRlZmluZWRQb3NpdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcG9zaXRpb25EZWZpbmVkICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9zaXRpb25EZWZpbmVkID4gMC41ICogdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZpdChvcHRpb25zLCBmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmFuZ2UgPSBOZXR3b3JrVXRpbC5nZXRSYW5nZSh0aGlzLmJvZHkubm9kZXMsIG9wdGlvbnMubm9kZXMpO1xuXG4gICAgICBjb25zdCBudW1iZXJPZk5vZGVzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aDtcbiAgICAgIHpvb21MZXZlbCA9IDEyLjY2MiAvIChudW1iZXJPZk5vZGVzICsgNy40MTQ3KSArIDAuMDk2NDgyMjsgLy8gdGhpcyBpcyBvYnRhaW5lZCBmcm9tIGZpdHRpbmcgYSBkYXRhc2V0IGZyb20gNSBwb2ludHMgd2l0aCBzY2FsZSBsZXZlbHMgdGhhdCBsb29rZWQgZ29vZC5cblxuICAgICAgLy8gY29ycmVjdCBmb3IgbGFyZ2VyIGNhbnZhc3Nlcy5cbiAgICAgIGNvbnN0IGZhY3RvciA9IE1hdGgubWluKGNhbnZhc1dpZHRoIC8gNjAwLCBjYW52YXNIZWlnaHQgLyA2MDApO1xuICAgICAgem9vbUxldmVsICo9IGZhY3RvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXNpemVOb2Rlc1wiKTtcbiAgICAgIHJhbmdlID0gTmV0d29ya1V0aWwuZ2V0UmFuZ2UodGhpcy5ib2R5Lm5vZGVzLCBvcHRpb25zLm5vZGVzKTtcblxuICAgICAgY29uc3QgeERpc3RhbmNlID0gTWF0aC5hYnMocmFuZ2UubWF4WCAtIHJhbmdlLm1pblgpICogMS4xO1xuICAgICAgY29uc3QgeURpc3RhbmNlID0gTWF0aC5hYnMocmFuZ2UubWF4WSAtIHJhbmdlLm1pblkpICogMS4xO1xuXG4gICAgICBjb25zdCB4Wm9vbUxldmVsID0gY2FudmFzV2lkdGggLyB4RGlzdGFuY2U7XG4gICAgICBjb25zdCB5Wm9vbUxldmVsID0gY2FudmFzSGVpZ2h0IC8geURpc3RhbmNlO1xuXG4gICAgICB6b29tTGV2ZWwgPSB4Wm9vbUxldmVsIDw9IHlab29tTGV2ZWwgPyB4Wm9vbUxldmVsIDogeVpvb21MZXZlbDtcbiAgICB9XG5cbiAgICBpZiAoem9vbUxldmVsID4gb3B0aW9ucy5tYXhab29tTGV2ZWwpIHtcbiAgICAgIHpvb21MZXZlbCA9IG9wdGlvbnMubWF4Wm9vbUxldmVsO1xuICAgIH0gZWxzZSBpZiAoem9vbUxldmVsIDwgb3B0aW9ucy5taW5ab29tTGV2ZWwpIHtcbiAgICAgIHpvb21MZXZlbCA9IG9wdGlvbnMubWluWm9vbUxldmVsO1xuICAgIH1cblxuICAgIGNvbnN0IGNlbnRlciA9IE5ldHdvcmtVdGlsLmZpbmRDZW50ZXIocmFuZ2UpO1xuICAgIGNvbnN0IGFuaW1hdGlvbk9wdGlvbnMgPSB7XG4gICAgICBwb3NpdGlvbjogY2VudGVyLFxuICAgICAgc2NhbGU6IHpvb21MZXZlbCxcbiAgICAgIGFuaW1hdGlvbjogb3B0aW9ucy5hbmltYXRpb24sXG4gICAgfTtcbiAgICB0aGlzLm1vdmVUbyhhbmltYXRpb25PcHRpb25zKTtcbiAgfVxuXG4gIC8vIGFuaW1hdGlvblxuXG4gIC8qKlxuICAgKiBDZW50ZXIgYSBub2RlIGluIHZpZXcuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBub2RlSWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zXVxuICAgKi9cbiAgZm9jdXMobm9kZUlkLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW25vZGVJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgbm9kZVBvc2l0aW9uID0ge1xuICAgICAgICB4OiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS54LFxuICAgICAgICB5OiB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXS55LFxuICAgICAgfTtcbiAgICAgIG9wdGlvbnMucG9zaXRpb24gPSBub2RlUG9zaXRpb247XG4gICAgICBvcHRpb25zLmxvY2tlZE9uTm9kZSA9IG5vZGVJZDtcblxuICAgICAgdGhpcy5tb3ZlVG8ob3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb2RlOiBcIiArIG5vZGVJZCArIFwiIGNhbm5vdCBiZSBmb3VuZC5cIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICB8ICBvcHRpb25zLm9mZnNldCAgID0ge3g6bnVtYmVyLCB5Om51bWJlcn0gICAvLyBvZmZzZXQgZnJvbSB0aGUgY2VudGVyIGluIERPTSBwaXhlbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuc2NhbGUgICAgPSBudW1iZXIgICAgICAgICAgICAgICAgIC8vIHNjYWxlIHRvIG1vdmUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMucG9zaXRpb24gPSB7eDpudW1iZXIsIHk6bnVtYmVyfSAgIC8vIHBvc2l0aW9uIHRvIG1vdmUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuYW5pbWF0aW9uID0ge2R1cmF0aW9uOm51bWJlciwgZWFzaW5nRnVuY3Rpb246U3RyaW5nfSB8fCBCb29sZWFuICAgLy8gcG9zaXRpb24gdG8gbW92ZSB0b1xuICAgKi9cbiAgbW92ZVRvKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMub2Zmc2V0ICE9IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLm9mZnNldC54ICE9IG51bGwpIHtcbiAgICAgICAgLy8gQ29lcmNlIGFuZCB2ZXJpZnkgdGhhdCB4IGlzIHZhbGlkLlxuICAgICAgICBvcHRpb25zLm9mZnNldC54ID0gK29wdGlvbnMub2Zmc2V0Lng7XG4gICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG9wdGlvbnMub2Zmc2V0LngpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdUaGUgb3B0aW9uIFwib2Zmc2V0LnhcIiBoYXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLm9mZnNldC54ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMub2Zmc2V0LnkgIT0gbnVsbCkge1xuICAgICAgICAvLyBDb2VyY2UgYW5kIHZlcmlmeSB0aGF0IHkgaXMgdmFsaWQuXG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LnkgPSArb3B0aW9ucy5vZmZzZXQueTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5vZmZzZXQueSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgJ1RoZSBvcHRpb24gXCJvZmZzZXQueVwiIGhhcyB0byBiZSBhIGZpbml0ZSBudW1iZXIuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LnggPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLm9mZnNldCA9IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMucG9zaXRpb24ueCAhPSBudWxsKSB7XG4gICAgICAgIC8vIENvZXJjZSBhbmQgdmVyaWZ5IHRoYXQgeCBpcyB2YWxpZC5cbiAgICAgICAgb3B0aW9ucy5wb3NpdGlvbi54ID0gK29wdGlvbnMucG9zaXRpb24ueDtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUob3B0aW9ucy5wb3NpdGlvbi54KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAnVGhlIG9wdGlvbiBcInBvc2l0aW9uLnhcIiBoYXMgdG8gYmUgYSBmaW5pdGUgbnVtYmVyLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnBvc2l0aW9uLnggPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wb3NpdGlvbi55ICE9IG51bGwpIHtcbiAgICAgICAgLy8gQ29lcmNlIGFuZCB2ZXJpZnkgdGhhdCB5IGlzIHZhbGlkLlxuICAgICAgICBvcHRpb25zLnBvc2l0aW9uLnkgPSArb3B0aW9ucy5wb3NpdGlvbi55O1xuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShvcHRpb25zLnBvc2l0aW9uLnkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdUaGUgb3B0aW9uIFwicG9zaXRpb24ueVwiIGhhcyB0byBiZSBhIGZpbml0ZSBudW1iZXIuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnMucG9zaXRpb24ueCA9IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucG9zaXRpb24gPSB0aGlzLmdldFZpZXdQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNjYWxlICE9IG51bGwpIHtcbiAgICAgIC8vIENvZXJjZSBhbmQgdmVyaWZ5IHRoYXQgdGhlIHNjYWxlIGlzIHZhbGlkLlxuICAgICAgb3B0aW9ucy5zY2FsZSA9ICtvcHRpb25zLnNjYWxlO1xuICAgICAgaWYgKCEob3B0aW9ucy5zY2FsZSA+IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ1RoZSBvcHRpb24gXCJzY2FsZVwiIGhhcyB0byBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0aW9ucy5hbmltYXRpb24gPSB7IGR1cmF0aW9uOiAwIH07XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uID0geyBkdXJhdGlvbjogMCB9O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24gPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uID0ge307XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbiA9IDEwMDA7XG4gICAgfSAvLyBkZWZhdWx0IGR1cmF0aW9uXG4gICAgaWYgKG9wdGlvbnMuYW5pbWF0aW9uLmVhc2luZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuYW5pbWF0aW9uLmVhc2luZ0Z1bmN0aW9uID0gXCJlYXNlSW5PdXRRdWFkXCI7XG4gICAgfSAvLyBkZWZhdWx0IGVhc2luZyBmdW5jdGlvblxuXG4gICAgdGhpcy5hbmltYXRlVmlldyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAgfCAgb3B0aW9ucy5vZmZzZXQgICA9IHt4Om51bWJlciwgeTpudW1iZXJ9ICAgLy8gb2Zmc2V0IGZyb20gdGhlIGNlbnRlciBpbiBET00gcGl4ZWxzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBvcHRpb25zLnRpbWUgICAgID0gbnVtYmVyICAgICAgICAgICAgICAgICAvLyBhbmltYXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuc2NhbGUgICAgPSBudW1iZXIgICAgICAgICAgICAgICAgIC8vIHNjYWxlIHRvIGFuaW1hdGUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMucG9zaXRpb24gPSB7eDpudW1iZXIsIHk6bnVtYmVyfSAgIC8vIHBvc2l0aW9uIHRvIGFuaW1hdGUgdG9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9wdGlvbnMuZWFzaW5nRnVuY3Rpb24gPSBTdHJpbmcgICAgICAgICAgIC8vIGxpbmVhciwgZWFzZUluUXVhZCwgZWFzZU91dFF1YWQsIGVhc2VJbk91dFF1YWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYXNlSW5DdWJpYywgZWFzZU91dEN1YmljLCBlYXNlSW5PdXRDdWJpYyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVhc2VJblF1YXJ0LCBlYXNlT3V0UXVhcnQsIGVhc2VJbk91dFF1YXJ0LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWFzZUluUXVpbnQsIGVhc2VPdXRRdWludCwgZWFzZUluT3V0UXVpbnRcbiAgICovXG4gIGFuaW1hdGVWaWV3KG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb24gPSBvcHRpb25zLmFuaW1hdGlvbi5lYXNpbmdGdW5jdGlvbjtcbiAgICAvLyByZWxlYXNlIGlmIHNvbWV0aGluZyBmb2N1c3NlZCBvbiB0aGUgbm9kZVxuICAgIHRoaXMucmVsZWFzZU5vZGUoKTtcbiAgICBpZiAob3B0aW9ucy5sb2NrZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlSWQgPSBvcHRpb25zLmxvY2tlZE9uTm9kZTtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlT2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQ7XG4gICAgfVxuXG4gICAgLy8gZm9yY2VmdWxseSBjb21wbGV0ZSB0aGUgb2xkIGFuaW1hdGlvbiBpZiBpdCB3YXMgc3RpbGwgcnVubmluZ1xuICAgIGlmICh0aGlzLmVhc2luZ1RpbWUgIT0gMCkge1xuICAgICAgdGhpcy5fdHJhbnNpdGlvblJlZHJhdyh0cnVlKTsgLy8gYnkgc2V0dGluZyBlYXNpbmd0aW1lIHRvIDEsIHdlIGZpbmlzaCB0aGUgYW5pbWF0aW9uLlxuICAgIH1cblxuICAgIHRoaXMuc291cmNlU2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG4gICAgdGhpcy50YXJnZXRTY2FsZSA9IG9wdGlvbnMuc2NhbGU7XG5cbiAgICAvLyBzZXQgdGhlIHNjYWxlIHNvIHRoZSB2aWV3Q2VudGVyIGlzIGJhc2VkIG9uIHRoZSBjb3JyZWN0IHpvb20gbGV2ZWwuIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiB0aGUgdHJhbnNpdGlvblJlZHJhd1xuICAgIC8vIGJ1dCBhdCBsZWFzdCB0aGVuIHdlJ2xsIGhhdmUgdGhlIHRhcmdldCB0cmFuc2l0aW9uXG4gICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSB0aGlzLnRhcmdldFNjYWxlO1xuICAgIGNvbnN0IHZpZXdDZW50ZXIgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyh7XG4gICAgICB4OiAwLjUgKiB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50V2lkdGgsXG4gICAgICB5OiAwLjUgKiB0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMuY2xpZW50SGVpZ2h0LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQ2VudGVyID0ge1xuICAgICAgLy8gb2Zmc2V0IGZyb20gdmlldywgZGlzdGFuY2UgdmlldyBoYXMgdG8gY2hhbmdlIGJ5IHRoZXNlIHggYW5kIHkgdG8gY2VudGVyIHRoZSBub2RlXG4gICAgICB4OiB2aWV3Q2VudGVyLnggLSBvcHRpb25zLnBvc2l0aW9uLngsXG4gICAgICB5OiB2aWV3Q2VudGVyLnkgLSBvcHRpb25zLnBvc2l0aW9uLnksXG4gICAgfTtcbiAgICB0aGlzLnRhcmdldFRyYW5zbGF0aW9uID0ge1xuICAgICAgeDpcbiAgICAgICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi54ICtcbiAgICAgICAgZGlzdGFuY2VGcm9tQ2VudGVyLnggKiB0aGlzLnRhcmdldFNjYWxlICtcbiAgICAgICAgb3B0aW9ucy5vZmZzZXQueCxcbiAgICAgIHk6XG4gICAgICAgIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueSArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci55ICogdGhpcy50YXJnZXRTY2FsZSArXG4gICAgICAgIG9wdGlvbnMub2Zmc2V0LnksXG4gICAgfTtcblxuICAgIC8vIGlmIHRoZSB0aW1lIGlzIHNldCB0byAwLCBkb24ndCBkbyBhbiBhbmltYXRpb25cbiAgICBpZiAob3B0aW9ucy5hbmltYXRpb24uZHVyYXRpb24gPT09IDApIHtcbiAgICAgIGlmICh0aGlzLmxvY2tlZE9uTm9kZUlkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnZpZXdGdW5jdGlvbiA9IHRoaXMuX2xvY2tlZFJlZHJhdy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImluaXRSZWRyYXdcIiwgdGhpcy52aWV3RnVuY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSB0aGlzLnRhcmdldFNjYWxlO1xuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHRoaXMudGFyZ2V0VHJhbnNsYXRpb247XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbmltYXRpb25TcGVlZCA9XG4gICAgICAgIDEgLyAoNjAgKiBvcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbiAqIDAuMDAxKSB8fCAxIC8gNjA7IC8vIDYwIGZvciA2MCBzZWNvbmRzLCAwLjAwMSBmb3IgbWlsbGknc1xuICAgICAgdGhpcy5hbmltYXRpb25FYXNpbmdGdW5jdGlvbiA9IG9wdGlvbnMuYW5pbWF0aW9uLmVhc2luZ0Z1bmN0aW9uO1xuXG4gICAgICB0aGlzLnZpZXdGdW5jdGlvbiA9IHRoaXMuX3RyYW5zaXRpb25SZWRyYXcuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiaW5pdFJlZHJhd1wiLCB0aGlzLnZpZXdGdW5jdGlvbik7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0YXJ0UmVuZGVyaW5nXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB1c2VkIHRvIGFuaW1hdGUgc21vb3RobHkgYnkgaGlqYWNraW5nIHRoZSByZWRyYXcgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9ja2VkUmVkcmF3KCkge1xuICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHtcbiAgICAgIHg6IHRoaXMuYm9keS5ub2Rlc1t0aGlzLmxvY2tlZE9uTm9kZUlkXS54LFxuICAgICAgeTogdGhpcy5ib2R5Lm5vZGVzW3RoaXMubG9ja2VkT25Ob2RlSWRdLnksXG4gICAgfTtcbiAgICBjb25zdCB2aWV3Q2VudGVyID0gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLFxuICAgICAgeTogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9KTtcbiAgICBjb25zdCBkaXN0YW5jZUZyb21DZW50ZXIgPSB7XG4gICAgICAvLyBvZmZzZXQgZnJvbSB2aWV3LCBkaXN0YW5jZSB2aWV3IGhhcyB0byBjaGFuZ2UgYnkgdGhlc2UgeCBhbmQgeSB0byBjZW50ZXIgdGhlIG5vZGVcbiAgICAgIHg6IHZpZXdDZW50ZXIueCAtIG5vZGVQb3NpdGlvbi54LFxuICAgICAgeTogdmlld0NlbnRlci55IC0gbm9kZVBvc2l0aW9uLnksXG4gICAgfTtcbiAgICBjb25zdCBzb3VyY2VUcmFuc2xhdGlvbiA9IHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uO1xuICAgIGNvbnN0IHRhcmdldFRyYW5zbGF0aW9uID0ge1xuICAgICAgeDpcbiAgICAgICAgc291cmNlVHJhbnNsYXRpb24ueCArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci54ICogdGhpcy5ib2R5LnZpZXcuc2NhbGUgK1xuICAgICAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldC54LFxuICAgICAgeTpcbiAgICAgICAgc291cmNlVHJhbnNsYXRpb24ueSArXG4gICAgICAgIGRpc3RhbmNlRnJvbUNlbnRlci55ICogdGhpcy5ib2R5LnZpZXcuc2NhbGUgK1xuICAgICAgICB0aGlzLmxvY2tlZE9uTm9kZU9mZnNldC55LFxuICAgIH07XG5cbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHRhcmdldFRyYW5zbGF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBzdGF0ZSBvZiBhIGxvY2tlZCBvbiBOb2RlXG4gICAqL1xuICByZWxlYXNlTm9kZSgpIHtcbiAgICBpZiAodGhpcy5sb2NrZWRPbk5vZGVJZCAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmlld0Z1bmN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLm9mZihcImluaXRSZWRyYXdcIiwgdGhpcy52aWV3RnVuY3Rpb24pO1xuICAgICAgdGhpcy5sb2NrZWRPbk5vZGVJZCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubG9ja2VkT25Ob2RlT2Zmc2V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmaW5pc2hlZD1mYWxzZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90cmFuc2l0aW9uUmVkcmF3KGZpbmlzaGVkID0gZmFsc2UpIHtcbiAgICB0aGlzLmVhc2luZ1RpbWUgKz0gdGhpcy5hbmltYXRpb25TcGVlZDtcbiAgICB0aGlzLmVhc2luZ1RpbWUgPSBmaW5pc2hlZCA9PT0gdHJ1ZSA/IDEuMCA6IHRoaXMuZWFzaW5nVGltZTtcblxuICAgIGNvbnN0IHByb2dyZXNzID0gZWFzaW5nRnVuY3Rpb25zW3RoaXMuYW5pbWF0aW9uRWFzaW5nRnVuY3Rpb25dKFxuICAgICAgdGhpcy5lYXNpbmdUaW1lXG4gICAgKTtcblxuICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID1cbiAgICAgIHRoaXMuc291cmNlU2NhbGUgKyAodGhpcy50YXJnZXRTY2FsZSAtIHRoaXMuc291cmNlU2NhbGUpICogcHJvZ3Jlc3M7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7XG4gICAgICB4OlxuICAgICAgICB0aGlzLnNvdXJjZVRyYW5zbGF0aW9uLnggK1xuICAgICAgICAodGhpcy50YXJnZXRUcmFuc2xhdGlvbi54IC0gdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi54KSAqIHByb2dyZXNzLFxuICAgICAgeTpcbiAgICAgICAgdGhpcy5zb3VyY2VUcmFuc2xhdGlvbi55ICtcbiAgICAgICAgKHRoaXMudGFyZ2V0VHJhbnNsYXRpb24ueSAtIHRoaXMuc291cmNlVHJhbnNsYXRpb24ueSkgKiBwcm9ncmVzcyxcbiAgICB9O1xuXG4gICAgLy8gY2xlYW51cFxuICAgIGlmICh0aGlzLmVhc2luZ1RpbWUgPj0gMS4wKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIHRoaXMuZWFzaW5nVGltZSA9IDA7XG4gICAgICBpZiAodGhpcy5sb2NrZWRPbk5vZGVJZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52aWV3RnVuY3Rpb24gPSB0aGlzLl9sb2NrZWRSZWRyYXcuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJpbml0UmVkcmF3XCIsIHRoaXMudmlld0Z1bmN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJhbmltYXRpb25GaW5pc2hlZFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFNjYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7e3g6IG51bWJlciwgeTogbnVtYmVyfX1cbiAgICovXG4gIGdldFZpZXdQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jYW52YXMuRE9NdG9DYW52YXMoe1xuICAgICAgeDogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoLFxuICAgICAgeTogMC41ICogdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3O1xuIiwgInR5cGUgSWRUeXBlID0gc3RyaW5nIHwgbnVtYmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdGaXRPcHRpb25zIHtcbiAgbm9kZXM6IElkVHlwZVtdO1xuICBtaW5ab29tTGV2ZWw6IG51bWJlcjtcbiAgbWF4Wm9vbUxldmVsOiBudW1iZXI7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhlIGZpdCBvcHRpb25zLCByZXBsYWNlIG1pc3Npbmcgb3B0aW9uYWwgdmFsdWVzIGJ5IGRlZmF1bHRzIGV0Yy5cbiAqXG4gKiBAcGFyYW0gcmF3T3B0aW9ucyAtIFRoZSByYXcgb3B0aW9ucy5cbiAqIEBwYXJhbSBhbGxOb2RlSWRzIC0gQWxsIG5vZGUgaWRzIHRoYXQgd2lsbCBiZSB1c2VkIGlmIG5vZGVzIGFyZSBvbWl0dGVkIGluXG4gKiB0aGUgcmF3IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBPcHRpb25zIHdpdGggZXZlcnl0aGluZyBmaWxsZWQgaW4gYW5kIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZpdE9wdGlvbnMoXG4gIHJhd09wdGlvbnM6IFBhcnRpYWw8Vmlld0ZpdE9wdGlvbnM+LFxuICBhbGxOb2RlSWRzOiBJZFR5cGVbXVxuKTogVmlld0ZpdE9wdGlvbnMge1xuICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbjxWaWV3Rml0T3B0aW9ucywgUGFydGlhbDxWaWV3Rml0T3B0aW9ucz4+KFxuICAgIHtcbiAgICAgIG5vZGVzOiBhbGxOb2RlSWRzLFxuICAgICAgbWluWm9vbUxldmVsOiBOdW1iZXIuTUlOX1ZBTFVFLFxuICAgICAgbWF4Wm9vbUxldmVsOiAxLFxuICAgIH0sXG4gICAgcmF3T3B0aW9ucyA/PyB7fVxuICApO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zLm5vZGVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOb2RlcyBoYXMgdG8gYmUgYW4gYXJyYXkgb2YgaWRzLlwiKTtcbiAgfVxuICBpZiAob3B0aW9ucy5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICBvcHRpb25zLm5vZGVzID0gYWxsTm9kZUlkcztcbiAgfVxuXG4gIGlmICghKHR5cGVvZiBvcHRpb25zLm1pblpvb21MZXZlbCA9PT0gXCJudW1iZXJcIiAmJiBvcHRpb25zLm1pblpvb21MZXZlbCA+IDApKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1pbiB6b29tIGxldmVsIGhhcyB0byBiZSBhIG51bWJlciBoaWdoZXIgdGhhbiB6ZXJvLlwiKTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKFxuICAgICAgdHlwZW9mIG9wdGlvbnMubWF4Wm9vbUxldmVsID09PSBcIm51bWJlclwiICYmXG4gICAgICBvcHRpb25zLm1pblpvb21MZXZlbCA8PSBvcHRpb25zLm1heFpvb21MZXZlbFxuICAgIClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiTWF4IHpvb20gbGV2ZWwgaGFzIHRvIGJlIGEgbnVtYmVyIGhpZ2hlciB0aGFuIG1pbiB6b29tIGxldmVsLlwiXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuIiwgIi8qKlxyXG4gKiBDcmVhdGVkIGJ5IEFsZXggb24gMTEvNi8yMDE0LlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ga2V5Y2hhcm0ob3B0aW9ucykge1xyXG4gIHZhciBwcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wcmV2ZW50RGVmYXVsdCB8fCBmYWxzZTtcclxuXHJcbiAgdmFyIGNvbnRhaW5lciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250YWluZXIgfHwgd2luZG93O1xyXG5cclxuICB2YXIgX2V4cG9ydEZ1bmN0aW9ucyA9IHt9O1xyXG4gIHZhciBfYm91bmQgPSB7a2V5ZG93bjp7fSwga2V5dXA6e319O1xyXG4gIHZhciBfa2V5cyA9IHt9O1xyXG4gIHZhciBpO1xyXG5cclxuICAvLyBhIC0gelxyXG4gIGZvciAoaSA9IDk3OyBpIDw9IDEyMjsgaSsrKSB7X2tleXNbU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSB7Y29kZTo2NSArIChpIC0gOTcpLCBzaGlmdDogZmFsc2V9O31cclxuICAvLyBBIC0gWlxyXG4gIGZvciAoaSA9IDY1OyBpIDw9IDkwOyBpKyspIHtfa2V5c1tTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IHtjb2RlOmksIHNoaWZ0OiB0cnVlfTt9XHJcbiAgLy8gMCAtIDlcclxuICBmb3IgKGkgPSAwOyAgaSA8PSA5OyAgIGkrKykge19rZXlzWycnICsgaV0gPSB7Y29kZTo0OCArIGksIHNoaWZ0OiBmYWxzZX07fVxyXG4gIC8vIEYxIC0gRjEyXHJcbiAgZm9yIChpID0gMTsgIGkgPD0gMTI7ICAgaSsrKSB7X2tleXNbJ0YnICsgaV0gPSB7Y29kZToxMTEgKyBpLCBzaGlmdDogZmFsc2V9O31cclxuICAvLyBudW0wIC0gbnVtOVxyXG4gIGZvciAoaSA9IDA7ICBpIDw9IDk7ICAgaSsrKSB7X2tleXNbJ251bScgKyBpXSA9IHtjb2RlOjk2ICsgaSwgc2hpZnQ6IGZhbHNlfTt9XHJcblxyXG4gIC8vIG51bXBhZCBtaXNjXHJcbiAgX2tleXNbJ251bSonXSA9IHtjb2RlOjEwNiwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snbnVtKyddID0ge2NvZGU6MTA3LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydudW0tJ10gPSB7Y29kZToxMDksIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ251bS8nXSA9IHtjb2RlOjExMSwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snbnVtLiddID0ge2NvZGU6MTEwLCBzaGlmdDogZmFsc2V9O1xyXG4gIC8vIGFycm93c1xyXG4gIF9rZXlzWydsZWZ0J10gID0ge2NvZGU6MzcsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3VwJ10gICAgPSB7Y29kZTozOCwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1sncmlnaHQnXSA9IHtjb2RlOjM5LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydkb3duJ10gID0ge2NvZGU6NDAsIHNoaWZ0OiBmYWxzZX07XHJcbiAgLy8gZXh0cmEga2V5c1xyXG4gIF9rZXlzWydzcGFjZSddID0ge2NvZGU6MzIsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ2VudGVyJ10gPSB7Y29kZToxMywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snc2hpZnQnXSA9IHtjb2RlOjE2LCBzaGlmdDogdW5kZWZpbmVkfTtcclxuICBfa2V5c1snZXNjJ10gICA9IHtjb2RlOjI3LCBzaGlmdDogZmFsc2V9O1xyXG4gIF9rZXlzWydiYWNrc3BhY2UnXSA9IHtjb2RlOjgsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ3RhYiddICAgICAgID0ge2NvZGU6OSwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snY3RybCddICAgICAgPSB7Y29kZToxNywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snYWx0J10gICAgICAgPSB7Y29kZToxOCwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1snZGVsZXRlJ10gICAgPSB7Y29kZTo0Niwgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1sncGFnZXVwJ10gICAgPSB7Y29kZTozMywgc2hpZnQ6IGZhbHNlfTtcclxuICBfa2V5c1sncGFnZWRvd24nXSAgPSB7Y29kZTozNCwgc2hpZnQ6IGZhbHNlfTtcclxuICAvLyBzeW1ib2xzXHJcbiAgX2tleXNbJz0nXSAgICAgPSB7Y29kZToxODcsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJy0nXSAgICAgPSB7Y29kZToxODksIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ10nXSAgICAgPSB7Y29kZToyMjEsIHNoaWZ0OiBmYWxzZX07XHJcbiAgX2tleXNbJ1snXSAgICAgPSB7Y29kZToyMTksIHNoaWZ0OiBmYWxzZX07XHJcblxyXG5cclxuXHJcbiAgdmFyIGRvd24gPSBmdW5jdGlvbihldmVudCkge2hhbmRsZUV2ZW50KGV2ZW50LCdrZXlkb3duJyk7fTtcclxuICB2YXIgdXAgPSBmdW5jdGlvbihldmVudCkge2hhbmRsZUV2ZW50KGV2ZW50LCdrZXl1cCcpO307XHJcblxyXG4gIC8vIGhhbmRsZSB0aGUgYWN0dWFseSBib3VuZCBrZXkgd2l0aCB0aGUgZXZlbnRcclxuICB2YXIgaGFuZGxlRXZlbnQgPSBmdW5jdGlvbihldmVudCx0eXBlKSB7XHJcbiAgICBpZiAoX2JvdW5kW3R5cGVdW2V2ZW50LmtleUNvZGVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdmFyIGJvdW5kID0gX2JvdW5kW3R5cGVdW2V2ZW50LmtleUNvZGVdO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGJvdW5kW2ldLnNoaWZ0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGJvdW5kW2ldLmZuKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYm91bmRbaV0uc2hpZnQgPT0gdHJ1ZSAmJiBldmVudC5zaGlmdEtleSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICBib3VuZFtpXS5mbihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGJvdW5kW2ldLnNoaWZ0ID09IGZhbHNlICYmIGV2ZW50LnNoaWZ0S2V5ID09IGZhbHNlKSB7XHJcbiAgICAgICAgICBib3VuZFtpXS5mbihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocHJldmVudERlZmF1bHQgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyBiaW5kIGEga2V5IHRvIGEgY2FsbGJhY2tcclxuICBfZXhwb3J0RnVuY3Rpb25zLmJpbmQgPSBmdW5jdGlvbihrZXksIGNhbGxiYWNrLCB0eXBlKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHR5cGUgPSAna2V5ZG93bic7XHJcbiAgICB9XHJcbiAgICBpZiAoX2tleXNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGtleTogXCIgKyBrZXkpO1xyXG4gICAgfVxyXG4gICAgaWYgKF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV0gPSBbXTtcclxuICAgIH1cclxuICAgIF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdLnB1c2goe2ZuOmNhbGxiYWNrLCBzaGlmdDpfa2V5c1trZXldLnNoaWZ0fSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8vIGJpbmQgYWxsIGtleXMgdG8gYSBjYWxsIGJhY2sgKGRlbW8gcHVycG9zZXMpXHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5iaW5kQWxsID0gZnVuY3Rpb24oY2FsbGJhY2ssIHR5cGUpIHtcclxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdHlwZSA9ICdrZXlkb3duJztcclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiBfa2V5cykge1xyXG4gICAgICBpZiAoX2tleXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIF9leHBvcnRGdW5jdGlvbnMuYmluZChrZXksY2FsbGJhY2ssdHlwZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyBnZXQgdGhlIGtleSBsYWJlbCBmcm9tIGFuIGV2ZW50XHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5nZXRLZXkgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgZm9yICh2YXIga2V5IGluIF9rZXlzKSB7XHJcbiAgICAgIGlmIChfa2V5cy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ID09IHRydWUgJiYgX2tleXNba2V5XS5zaGlmdCA9PSB0cnVlICYmIGV2ZW50LmtleUNvZGUgPT0gX2tleXNba2V5XS5jb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5zaGlmdEtleSA9PSBmYWxzZSAmJiBfa2V5c1trZXldLnNoaWZ0ID09IGZhbHNlICYmIGV2ZW50LmtleUNvZGUgPT0gX2tleXNba2V5XS5jb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5rZXlDb2RlID09IF9rZXlzW2tleV0uY29kZSAmJiBrZXkgPT0gJ3NoaWZ0Jykge1xyXG4gICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBcInVua25vd24ga2V5LCBjdXJyZW50bHkgbm90IHN1cHBvcnRlZFwiO1xyXG4gIH07XHJcblxyXG4gIC8vIHVuYmluZCBlaXRoZXIgYSBzcGVjaWZpYyBjYWxsYmFjayBmcm9tIGEga2V5IG9yIGFsbCBvZiB0aGVtIChieSBsZWF2aW5nIGNhbGxiYWNrIHVuZGVmaW5lZClcclxuICBfZXhwb3J0RnVuY3Rpb25zLnVuYmluZCA9IGZ1bmN0aW9uKGtleSwgY2FsbGJhY2ssIHR5cGUpIHtcclxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdHlwZSA9ICdrZXlkb3duJztcclxuICAgIH1cclxuICAgIGlmIChfa2V5c1trZXldID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQga2V5OiBcIiArIGtleSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB2YXIgbmV3QmluZGluZ3MgPSBbXTtcclxuICAgICAgdmFyIGJvdW5kID0gX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV07XHJcbiAgICAgIGlmIChib3VuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKCEoYm91bmRbaV0uZm4gPT0gY2FsbGJhY2sgJiYgYm91bmRbaV0uc2hpZnQgPT0gX2tleXNba2V5XS5zaGlmdCkpIHtcclxuICAgICAgICAgICAgbmV3QmluZGluZ3MucHVzaChfYm91bmRbdHlwZV1bX2tleXNba2V5XS5jb2RlXVtpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIF9ib3VuZFt0eXBlXVtfa2V5c1trZXldLmNvZGVdID0gbmV3QmluZGluZ3M7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgX2JvdW5kW3R5cGVdW19rZXlzW2tleV0uY29kZV0gPSBbXTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLyByZXNldCBhbGwgYm91bmQgdmFyaWFibGVzLlxyXG4gIF9leHBvcnRGdW5jdGlvbnMucmVzZXQgPSBmdW5jdGlvbigpIHtcclxuICAgIF9ib3VuZCA9IHtrZXlkb3duOnt9LCBrZXl1cDp7fX07XHJcbiAgfTtcclxuXHJcbiAgLy8gdW5iaW5kIGFsbCBsaXN0ZW5lcnMgYW5kIHJlc2V0IGFsbCB2YXJpYWJsZXMuXHJcbiAgX2V4cG9ydEZ1bmN0aW9ucy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfYm91bmQgPSB7a2V5ZG93bjp7fSwga2V5dXA6e319O1xyXG4gICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBkb3duLCB0cnVlKTtcclxuICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHVwLCB0cnVlKTtcclxuICB9O1xyXG5cclxuICAvLyBjcmVhdGUgbGlzdGVuZXJzLlxyXG4gIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyxkb3duLHRydWUpO1xyXG4gIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsdXAsdHJ1ZSk7XHJcblxyXG4gIC8vIHJldHVybiB0aGUgcHVibGljIGZ1bmN0aW9ucy5cclxuICByZXR1cm4gX2V4cG9ydEZ1bmN0aW9ucztcclxufVxyXG4iLCAiaW1wb3J0IFwiLi9OYXZpZ2F0aW9uSGFuZGxlci5jc3NcIjtcblxuaW1wb3J0IHsgSGFtbWVyIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgb25SZWxlYXNlLCBvblRvdWNoIH0gZnJvbSBcIi4uLy4uLy4uL2hhbW1lclV0aWxcIjtcbmltcG9ydCBrZXljaGFybSBmcm9tIFwia2V5Y2hhcm1cIjtcblxuLyoqXG4gKiBOYXZpZ2F0aW9uIEhhbmRsZXJcbiAqL1xuY2xhc3MgTmF2aWdhdGlvbkhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcblxuICAgIHRoaXMuaWNvbnNDcmVhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5uYXZpZ2F0aW9uSGFtbWVycyA9IFtdO1xuICAgIHRoaXMuYm91bmRGdW5jdGlvbnMgPSB7fTtcbiAgICB0aGlzLnRvdWNoVGltZSA9IDA7XG4gICAgdGhpcy5hY3RpdmF0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiYWN0aXZhdGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5hY3RpdmF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZWFjdGl2YXRlXCIsICgpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmNvbmZpZ3VyZUtleWJvYXJkQmluZGluZ3MoKTtcbiAgICB9KTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcImRlc3Ryb3lcIiwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMua2V5Y2hhcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmtleWNoYXJtLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy5jcmVhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBvciByZWZyZXNoZXMgbmF2aWdhdGlvbiBhbmQgc2V0cyBrZXkgYmluZGluZ3NcbiAgICovXG4gIGNyZWF0ZSgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm5hdmlnYXRpb25CdXR0b25zID09PSB0cnVlKSB7XG4gICAgICBpZiAodGhpcy5pY29uc0NyZWF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubG9hZE5hdmlnYXRpb25FbGVtZW50cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pY29uc0NyZWF0ZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY2xlYW5OYXZpZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIHVwIHByZXZpb3VzIG5hdmlnYXRpb24gaXRlbXNcbiAgICovXG4gIGNsZWFuTmF2aWdhdGlvbigpIHtcbiAgICAvLyBjbGVhbiBoYW1tZXIgYmluZGluZ3NcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uSGFtbWVycy5sZW5ndGggIT0gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5hdmlnYXRpb25IYW1tZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkhhbW1lcnNbaV0uZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5uYXZpZ2F0aW9uSGFtbWVycyA9IFtdO1xuICAgIH1cblxuICAgIC8vIGNsZWFuIHVwIHByZXZpb3VzIG5hdmlnYXRpb24gaXRlbXNcbiAgICBpZiAoXG4gICAgICB0aGlzLm5hdmlnYXRpb25ET00gJiZcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0gJiZcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtcIndyYXBwZXJcIl0ucGFyZW50Tm9kZVxuICAgICkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFxuICAgICAgICB0aGlzLm5hdmlnYXRpb25ET01bXCJ3cmFwcGVyXCJdXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaWNvbnNDcmVhdGVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRpb24gb2YgdGhlIG5hdmlnYXRpb24gY29udHJvbHMgbm9kZXMuIFRoZXkgYXJlIGRyYXduIG92ZXIgdGhlIHJlc3Qgb2YgdGhlIG5vZGVzIGFuZCBhcmUgbm90IGFmZmVjdGVkIGJ5IHNjYWxlIGFuZCB0cmFuc2xhdGlvblxuICAgKiB0aGV5IGhhdmUgYSB0cmlnZ2VyRnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIG9uIGNsaWNrLiBJZiB0aGUgcG9zaXRpb24gb2YgdGhlIG5hdmlnYXRpb24gY29udHJvbHMgaXMgZGVwZW5kZW50XG4gICAqIG9uIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudFdpZHRoIG9yIHRoaXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCwgd2UgZmxhZyBob3Jpem9udGFsQWxpZ25MZWZ0IGFuZCB2ZXJ0aWNhbEFsaWduVG9wIGZhbHNlLlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGxvY2F0aW9uIHdpbGwgYmUgY29ycmVjdGVkIGJ5IHRoZSBfcmVsb2NhdGVOYXZpZ2F0aW9uIGZ1bmN0aW9uIG9uIGEgc2l6ZSBjaGFuZ2Ugb2YgdGhlIGNhbnZhcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGxvYWROYXZpZ2F0aW9uRWxlbWVudHMoKSB7XG4gICAgdGhpcy5jbGVhbk5hdmlnYXRpb24oKTtcblxuICAgIHRoaXMubmF2aWdhdGlvbkRPTSA9IHt9O1xuICAgIGNvbnN0IG5hdmlnYXRpb25EaXZzID0gW1xuICAgICAgXCJ1cFwiLFxuICAgICAgXCJkb3duXCIsXG4gICAgICBcImxlZnRcIixcbiAgICAgIFwicmlnaHRcIixcbiAgICAgIFwiem9vbUluXCIsXG4gICAgICBcInpvb21PdXRcIixcbiAgICAgIFwiem9vbUV4dGVuZHNcIixcbiAgICBdO1xuICAgIGNvbnN0IG5hdmlnYXRpb25EaXZBY3Rpb25zID0gW1xuICAgICAgXCJfbW92ZVVwXCIsXG4gICAgICBcIl9tb3ZlRG93blwiLFxuICAgICAgXCJfbW92ZUxlZnRcIixcbiAgICAgIFwiX21vdmVSaWdodFwiLFxuICAgICAgXCJfem9vbUluXCIsXG4gICAgICBcIl96b29tT3V0XCIsXG4gICAgICBcIl9maXRcIixcbiAgICBdO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXS5jbGFzc05hbWUgPSBcInZpcy1uYXZpZ2F0aW9uXCI7XG4gICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdmlnYXRpb25EaXZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25ET01bbmF2aWdhdGlvbkRpdnNbaV1dID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkRPTVtuYXZpZ2F0aW9uRGl2c1tpXV0uY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtYnV0dG9uIHZpcy1cIiArIG5hdmlnYXRpb25EaXZzW2ldO1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW1wid3JhcHBlclwiXS5hcHBlbmRDaGlsZChcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRE9NW25hdmlnYXRpb25EaXZzW2ldXVxuICAgICAgKTtcblxuICAgICAgY29uc3QgaGFtbWVyID0gbmV3IEhhbW1lcih0aGlzLm5hdmlnYXRpb25ET01bbmF2aWdhdGlvbkRpdnNbaV1dKTtcbiAgICAgIGlmIChuYXZpZ2F0aW9uRGl2QWN0aW9uc1tpXSA9PT0gXCJfZml0XCIpIHtcbiAgICAgICAgb25Ub3VjaChoYW1tZXIsIHRoaXMuX2ZpdC5iaW5kKHRoaXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uVG91Y2goaGFtbWVyLCB0aGlzLmJpbmRUb1JlZHJhdy5iaW5kKHRoaXMsIG5hdmlnYXRpb25EaXZBY3Rpb25zW2ldKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmF2aWdhdGlvbkhhbW1lcnMucHVzaChoYW1tZXIpO1xuICAgIH1cblxuICAgIC8vIHVzZSBhIGhhbW1lciBmb3IgdGhlIHJlbGVhc2Ugc28gd2UgZG8gbm90IHJlcXVpcmUgdGhlIG9uZSB1c2VkIGluIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrXG4gICAgLy8gdGhlIG9uZSB0aGUgcmVzdCB1c2VzIGNhbiBiZSBvdmVybG9hZGVkIGJ5IHRoZSBtYW5pcHVsYXRpb24gc3lzdGVtLlxuICAgIGNvbnN0IGhhbW1lckZyYW1lID0gbmV3IEhhbW1lcih0aGlzLmNhbnZhcy5mcmFtZSk7XG4gICAgb25SZWxlYXNlKGhhbW1lckZyYW1lLCAoKSA9PiB7XG4gICAgICB0aGlzLl9zdG9wTW92ZW1lbnQoKTtcbiAgICB9KTtcbiAgICB0aGlzLm5hdmlnYXRpb25IYW1tZXJzLnB1c2goaGFtbWVyRnJhbWUpO1xuXG4gICAgdGhpcy5pY29uc0NyZWF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25cbiAgICovXG4gIGJpbmRUb1JlZHJhdyhhY3Rpb24pIHtcbiAgICBpZiAodGhpcy5ib3VuZEZ1bmN0aW9uc1thY3Rpb25dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXSA9IHRoaXNbYWN0aW9uXS5iaW5kKHRoaXMpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJpbml0UmVkcmF3XCIsIHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXSk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3N0YXJ0UmVuZGVyaW5nXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uXG4gICAqL1xuICB1bmJpbmRGcm9tUmVkcmF3KGFjdGlvbikge1xuICAgIGlmICh0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKFwiaW5pdFJlZHJhd1wiLCB0aGlzLmJvdW5kRnVuY3Rpb25zW2FjdGlvbl0pO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9zdG9wUmVuZGVyaW5nXCIpO1xuICAgICAgZGVsZXRlIHRoaXMuYm91bmRGdW5jdGlvbnNbYWN0aW9uXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzdG9wcyBhbGwgbW92ZW1lbnQgaW5kdWNlZCBieSB0aGUgbmF2aWdhdGlvbiBidXR0b25zXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZml0KCkge1xuICAgIGlmIChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHRoaXMudG91Y2hUaW1lID4gNzAwKSB7XG4gICAgICAvLyBUT0RPOiBmaXggdWdseSBoYWNrIHRvIGF2b2lkIGhhbW1lcidzIGRvdWJsZSBmaXJlaW5nIG9mIGV2ZW50IChiZWNhdXNlIHdlIHVzZSByZWxlYXNlPylcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJmaXRcIiwgeyBkdXJhdGlvbjogNzAwIH0pO1xuICAgICAgdGhpcy50b3VjaFRpbWUgPSBuZXcgRGF0ZSgpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzdG9wcyBhbGwgbW92ZW1lbnQgaW5kdWNlZCBieSB0aGUgbmF2aWdhdGlvbiBidXR0b25zXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RvcE1vdmVtZW50KCkge1xuICAgIGZvciAoY29uc3QgYm91bmRBY3Rpb24gaW4gdGhpcy5ib3VuZEZ1bmN0aW9ucykge1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib3VuZEZ1bmN0aW9ucywgYm91bmRBY3Rpb24pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKFwiaW5pdFJlZHJhd1wiLCB0aGlzLmJvdW5kRnVuY3Rpb25zW2JvdW5kQWN0aW9uXSk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfc3RvcFJlbmRlcmluZ1wiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ib3VuZEZ1bmN0aW9ucyA9IHt9O1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVVcCgpIHtcbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbi55ICs9IHRoaXMub3B0aW9ucy5rZXlib2FyZC5zcGVlZC55O1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVEb3duKCkge1xuICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uLnkgLT0gdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLnk7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbW92ZUxlZnQoKSB7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCArPSB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQueDtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlUmlnaHQoKSB7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24ueCAtPSB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQueDtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF96b29tSW4oKSB7XG4gICAgY29uc3Qgc2NhbGVPbGQgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICBjb25zdCBzY2FsZSA9IHRoaXMuYm9keS52aWV3LnNjYWxlICogKDEgKyB0aGlzLm9wdGlvbnMua2V5Ym9hcmQuc3BlZWQuem9vbSk7XG4gICAgY29uc3QgdHJhbnNsYXRpb24gPSB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbjtcbiAgICBjb25zdCBzY2FsZUZyYWMgPSBzY2FsZSAvIHNjYWxlT2xkO1xuICAgIGNvbnN0IHR4ID1cbiAgICAgICgxIC0gc2NhbGVGcmFjKSAqIHRoaXMuY2FudmFzLmNhbnZhc1ZpZXdDZW50ZXIueCArXG4gICAgICB0cmFuc2xhdGlvbi54ICogc2NhbGVGcmFjO1xuICAgIGNvbnN0IHR5ID1cbiAgICAgICgxIC0gc2NhbGVGcmFjKSAqIHRoaXMuY2FudmFzLmNhbnZhc1ZpZXdDZW50ZXIueSArXG4gICAgICB0cmFuc2xhdGlvbi55ICogc2NhbGVGcmFjO1xuXG4gICAgdGhpcy5ib2R5LnZpZXcuc2NhbGUgPSBzY2FsZTtcbiAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHsgeDogdHgsIHk6IHR5IH07XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInpvb21cIiwge1xuICAgICAgZGlyZWN0aW9uOiBcIitcIixcbiAgICAgIHNjYWxlOiB0aGlzLmJvZHkudmlldy5zY2FsZSxcbiAgICAgIHBvaW50ZXI6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF96b29tT3V0KCkge1xuICAgIGNvbnN0IHNjYWxlT2xkID0gdGhpcy5ib2R5LnZpZXcuc2NhbGU7XG4gICAgY29uc3Qgc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZSAvICgxICsgdGhpcy5vcHRpb25zLmtleWJvYXJkLnNwZWVkLnpvb20pO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG4gICAgY29uc3Qgc2NhbGVGcmFjID0gc2NhbGUgLyBzY2FsZU9sZDtcbiAgICBjb25zdCB0eCA9XG4gICAgICAoMSAtIHNjYWxlRnJhYykgKiB0aGlzLmNhbnZhcy5jYW52YXNWaWV3Q2VudGVyLnggK1xuICAgICAgdHJhbnNsYXRpb24ueCAqIHNjYWxlRnJhYztcbiAgICBjb25zdCB0eSA9XG4gICAgICAoMSAtIHNjYWxlRnJhYykgKiB0aGlzLmNhbnZhcy5jYW52YXNWaWV3Q2VudGVyLnkgK1xuICAgICAgdHJhbnNsYXRpb24ueSAqIHNjYWxlRnJhYztcblxuICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gc2NhbGU7XG4gICAgdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb24gPSB7IHg6IHR4LCB5OiB0eSB9O1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJ6b29tXCIsIHtcbiAgICAgIGRpcmVjdGlvbjogXCItXCIsXG4gICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICBwb2ludGVyOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGJpbmQgYWxsIGtleXMgdXNpbmcga2V5Y2hhcm0uXG4gICAqL1xuICBjb25maWd1cmVLZXlib2FyZEJpbmRpbmdzKCkge1xuICAgIGlmICh0aGlzLmtleWNoYXJtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMua2V5Y2hhcm0uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMua2V5Ym9hcmQuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5rZXlib2FyZC5iaW5kVG9XaW5kb3cgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5rZXljaGFybSA9IGtleWNoYXJtKHsgY29udGFpbmVyOiB3aW5kb3csIHByZXZlbnREZWZhdWx0OiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5rZXljaGFybSA9IGtleWNoYXJtKHtcbiAgICAgICAgICBjb250YWluZXI6IHRoaXMuY2FudmFzLmZyYW1lLFxuICAgICAgICAgIHByZXZlbnREZWZhdWx0OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5rZXljaGFybS5yZXNldCgpO1xuXG4gICAgICBpZiAodGhpcy5hY3RpdmF0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwidXBcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl9tb3ZlVXBcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJkb3duXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfbW92ZURvd25cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJsZWZ0XCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfbW92ZUxlZnRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJyaWdodFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX21vdmVSaWdodFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIj1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJudW0rXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbUluXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtLVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleWRvd25cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCItXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIltcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUb1JlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXlkb3duXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiXVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInBhZ2V1cFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRvUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcInBhZ2Vkb3duXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5iaW5kVG9SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5ZG93blwiXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwidXBcIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfbW92ZVVwXCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcImRvd25cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfbW92ZURvd25cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibGVmdFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl9tb3ZlTGVmdFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJyaWdodFwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl9tb3ZlUmlnaHRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiPVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtK1wiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwibnVtLVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMua2V5Y2hhcm0uYmluZChcbiAgICAgICAgICBcIi1cIixcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZEZyb21SZWRyYXcoXCJfem9vbU91dFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJbXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX3pvb21PdXRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwiXVwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tSW5cIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImtleXVwXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5rZXljaGFybS5iaW5kKFxuICAgICAgICAgIFwicGFnZXVwXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRGcm9tUmVkcmF3KFwiX3pvb21JblwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwia2V5dXBcIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLmtleWNoYXJtLmJpbmQoXG4gICAgICAgICAgXCJwYWdlZG93blwiLFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudW5iaW5kRnJvbVJlZHJhdyhcIl96b29tT3V0XCIpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJrZXl1cFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb25IYW5kbGVyO1xuIiwgImltcG9ydCB7XG4gIFBvcHVwLFxuICBnZXRBYnNvbHV0ZUxlZnQsXG4gIGdldEFic29sdXRlVG9wLFxuICBtZXJnZU9wdGlvbnMsXG4gIHBhcnNlQ29sb3IsXG4gIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsXG59IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcbmltcG9ydCBOYXZpZ2F0aW9uSGFuZGxlciBmcm9tIFwiLi9jb21wb25lbnRzL05hdmlnYXRpb25IYW5kbGVyXCI7XG5cbi8qKlxuICogSGFuZGxlciBmb3IgaW50ZXJhY3Rpb25zXG4gKi9cbmNsYXNzIEludGVyYWN0aW9uSGFuZGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9keVxuICAgKiBAcGFyYW0ge0NhbnZhc30gY2FudmFzXG4gICAqIEBwYXJhbSB7U2VsZWN0aW9uSGFuZGxlcn0gc2VsZWN0aW9uSGFuZGxlclxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzLCBzZWxlY3Rpb25IYW5kbGVyKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBzZWxlY3Rpb25IYW5kbGVyO1xuICAgIHRoaXMubmF2aWdhdGlvbkhhbmRsZXIgPSBuZXcgTmF2aWdhdGlvbkhhbmRsZXIoYm9keSwgY2FudmFzKTtcblxuICAgIC8vIGJpbmQgdGhlIGV2ZW50cyBmcm9tIGhhbW1lciB0byBmdW5jdGlvbnMgaW4gdGhpcyBvYmplY3RcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25UYXAgPSB0aGlzLm9uVGFwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uVG91Y2ggPSB0aGlzLm9uVG91Y2guYmluZCh0aGlzKTtcbiAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMub25Eb3VibGVUYXAgPSB0aGlzLm9uRG91YmxlVGFwLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uSG9sZCA9IHRoaXMub25Ib2xkLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uRHJhZ1N0YXJ0ID0gdGhpcy5vbkRyYWdTdGFydC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWcgPSB0aGlzLm9uRHJhZy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkRyYWdFbmQgPSB0aGlzLm9uRHJhZ0VuZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbk1vdXNlV2hlZWwgPSB0aGlzLm9uTW91c2VXaGVlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblBpbmNoID0gdGhpcy5vblBpbmNoLmJpbmQodGhpcyk7XG4gICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzLm9uTW91c2VNb3ZlID0gdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vblJlbGVhc2UgPSB0aGlzLm9uUmVsZWFzZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVycy5vbkNvbnRleHQgPSB0aGlzLm9uQ29udGV4dC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy50b3VjaFRpbWUgPSAwO1xuICAgIHRoaXMuZHJhZyA9IHt9O1xuICAgIHRoaXMucGluY2ggPSB7fTtcbiAgICB0aGlzLnBvcHVwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9wdXBPYmogPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wb3B1cFRpbWVyID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyID0gdGhpcy5nZXRQb2ludGVyLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZHJhZ05vZGVzOiB0cnVlLFxuICAgICAgZHJhZ1ZpZXc6IHRydWUsXG4gICAgICBob3ZlcjogZmFsc2UsXG4gICAgICBrZXlib2FyZDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgc3BlZWQ6IHsgeDogMTAsIHk6IDEwLCB6b29tOiAwLjAyIH0sXG4gICAgICAgIGJpbmRUb1dpbmRvdzogdHJ1ZSxcbiAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIG5hdmlnYXRpb25CdXR0b25zOiBmYWxzZSxcbiAgICAgIHRvb2x0aXBEZWxheTogMzAwLFxuICAgICAgem9vbVZpZXc6IHRydWUsXG4gICAgICB6b29tU3BlZWQ6IDEsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJpbmRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGV2ZW50IGxpc3RlbmVyc1xuICAgKi9cbiAgYmluZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiZGVzdHJveVwiLCAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wb3B1cFRpbWVyKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXI7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGV4dGVuZCBhbGwgYnV0IHRoZSB2YWx1ZXMgaW4gZmllbGRzXG4gICAgICBjb25zdCBmaWVsZHMgPSBbXG4gICAgICAgIFwiaGlkZUVkZ2VzT25EcmFnXCIsXG4gICAgICAgIFwiaGlkZUVkZ2VzT25ab29tXCIsXG4gICAgICAgIFwiaGlkZU5vZGVzT25EcmFnXCIsXG4gICAgICAgIFwia2V5Ym9hcmRcIixcbiAgICAgICAgXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBcInNlbGVjdGFibGVcIixcbiAgICAgICAgXCJzZWxlY3RDb25uZWN0ZWRFZGdlc1wiLFxuICAgICAgXTtcbiAgICAgIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQoZmllbGRzLCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBtZXJnZSB0aGUga2V5Ym9hcmQgb3B0aW9ucyBpbi5cbiAgICAgIG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMsIFwia2V5Ym9hcmRcIik7XG5cbiAgICAgIGlmIChvcHRpb25zLnRvb2x0aXApIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMudG9vbHRpcCwgb3B0aW9ucy50b29sdGlwKTtcbiAgICAgICAgaWYgKG9wdGlvbnMudG9vbHRpcC5jb2xvcikge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy50b29sdGlwLmNvbG9yID0gcGFyc2VDb2xvcihvcHRpb25zLnRvb2x0aXAuY29sb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5uYXZpZ2F0aW9uSGFuZGxlci5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwb2ludGVyIGxvY2F0aW9uIGZyb20gYSB0b3VjaCBsb2NhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHRvdWNoXG4gICAqIEByZXR1cm5zIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRQb2ludGVyKHRvdWNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRvdWNoLnggLSBnZXRBYnNvbHV0ZUxlZnQodGhpcy5jYW52YXMuZnJhbWUuY2FudmFzKSxcbiAgICAgIHk6IHRvdWNoLnkgLSBnZXRBYnNvbHV0ZVRvcCh0aGlzLmNhbnZhcy5mcmFtZS5jYW52YXMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogT24gc3RhcnQgb2YgYSB0b3VjaCBnZXN0dXJlLCBzdG9yZSB0aGUgcG9pbnRlclxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uVG91Y2goZXZlbnQpIHtcbiAgICBpZiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLSB0aGlzLnRvdWNoVGltZSA+IDUwKSB7XG4gICAgICB0aGlzLmRyYWcucG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgICAgdGhpcy5kcmFnLnBpbmNoZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMucGluY2guc2NhbGUgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIC8vIHRvIGF2b2lkIGRvdWJsZSBmaXJlaW5nIG9mIHRoaXMgZXZlbnQgYmVjYXVzZSB3ZSBoYXZlIHR3byBoYW1tZXIgaW5zdGFuY2VzLiAob24gY2FudmFzIGFuZCBvbiBmcmFtZSlcbiAgICAgIHRoaXMudG91Y2hUaW1lID0gbmV3IERhdGUoKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSB0YXAvY2xpY2sgZXZlbnQ6IHNlbGVjdC91bnNlbGVjdCBhIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uVGFwKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IG11bHRpc2VsZWN0ID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5vcHRpb25zLm11bHRpc2VsZWN0ICYmXG4gICAgICAoZXZlbnQuY2hhbmdlZFBvaW50ZXJzWzBdLmN0cmxLZXkgfHwgZXZlbnQuY2hhbmdlZFBvaW50ZXJzWzBdLm1ldGFLZXkpO1xuXG4gICAgdGhpcy5jaGVja1NlbGVjdGlvbkNoYW5nZXMocG9pbnRlciwgbXVsdGlzZWxlY3QpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdEFuZEVtaXQocG9pbnRlciwgZXZlbnQpO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJjbGlja1wiLCBldmVudCwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIGRvdWJsZXRhcCBldmVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Eb3VibGVUYXAoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcImRvdWJsZUNsaWNrXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBoYW5kbGUgbG9uZyB0YXAgZXZlbnQ6IG11bHRpIHNlbGVjdCBub2Rlc1xuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Ib2xkKGV2ZW50KSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IG11bHRpc2VsZWN0ID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLm9wdGlvbnMubXVsdGlzZWxlY3Q7XG5cbiAgICB0aGlzLmNoZWNrU2VsZWN0aW9uQ2hhbmdlcyhwb2ludGVyLCBtdWx0aXNlbGVjdCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuY29tbWl0QW5kRW1pdChwb2ludGVyLCBldmVudCk7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcImNsaWNrXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwiaG9sZFwiLCBldmVudCwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSByZWxlYXNlIG9mIHRoZSBzY3JlZW5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uUmVsZWFzZShldmVudCkge1xuICAgIGlmIChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAtIHRoaXMudG91Y2hUaW1lID4gMTApIHtcbiAgICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJyZWxlYXNlXCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgICAgIC8vIHRvIGF2b2lkIGRvdWJsZSBmaXJlaW5nIG9mIHRoaXMgZXZlbnQgYmVjYXVzZSB3ZSBoYXZlIHR3byBoYW1tZXIgaW5zdGFuY2VzLiAob24gY2FudmFzIGFuZCBvbiBmcmFtZSlcbiAgICAgIHRoaXMudG91Y2hUaW1lID0gbmV3IERhdGUoKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqL1xuICBvbkNvbnRleHQoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9KTtcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwib25jb250ZXh0XCIsIGV2ZW50LCBwb2ludGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYW5kIGRlc2VsZWN0IG5vZGVzIGRlcGVuZGluZyBjdXJyZW50IHNlbGVjdGlvbiBjaGFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZGQ9ZmFsc2VdXG4gICAqL1xuICBjaGVja1NlbGVjdGlvbkNoYW5nZXMocG9pbnRlciwgYWRkID0gZmFsc2UpIHtcbiAgICBpZiAoYWRkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0QWRkaXRpb25hbE9uUG9pbnQocG9pbnRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZWxlY3RPblBvaW50KHBvaW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIG5vZGUgYW5kIGVkZ2UgaWQncyBmcm9tIHRoZSBmaXJzdCBzZXQgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgc2Vjb25kIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHt7bm9kZXM6IEFycmF5LjxOb2RlPiwgZWRnZXM6IEFycmF5Ljx2aXMuRWRnZT59fSBmaXJzdFNldFxuICAgKiBAcGFyYW0ge3tub2RlczogQXJyYXkuPE5vZGU+LCBlZGdlczogQXJyYXkuPHZpcy5FZGdlPn19IHNlY29uZFNldFxuICAgKiBAcmV0dXJucyB7e25vZGVzOiBBcnJheS48Tm9kZT4sIGVkZ2VzOiBBcnJheS48dmlzLkVkZ2U+fX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZXRlcm1pbmVEaWZmZXJlbmNlKGZpcnN0U2V0LCBzZWNvbmRTZXQpIHtcbiAgICBjb25zdCBhcnJheURpZmYgPSBmdW5jdGlvbiAoZmlyc3RBcnIsIHNlY29uZEFycikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlyc3RBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaXJzdEFycltpXTtcbiAgICAgICAgaWYgKHNlY29uZEFyci5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5vZGVzOiBhcnJheURpZmYoZmlyc3RTZXQubm9kZXMsIHNlY29uZFNldC5ub2RlcyksXG4gICAgICBlZGdlczogYXJyYXlEaWZmKGZpcnN0U2V0LmVkZ2VzLCBzZWNvbmRTZXQuZWRnZXMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgb25EcmFnU3RhcnQuXG4gICAqIEl0IGlzIHNlcGFyYXRlZCBvdXQgYmVjYXVzZSB3ZSBjYW4gdGhlbiBvdmVybG9hZCBpdCBmb3IgdGhlIGRhdGFtYW5pcHVsYXRpb24gc3lzdGVtLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25EcmFnU3RhcnQoZXZlbnQpIHtcbiAgICAvLyBpZiBhbHJlYWR5IGRyYWdnaW5nLCBkbyBub3Qgc3RhcnRcbiAgICAvLyB0aGlzIGNhbiBoYXBwZW4gb24gdG91Y2ggc2NyZWVucyB3aXRoIG11bHRpcGxlIGZpbmdlcnNcbiAgICBpZiAodGhpcy5kcmFnLmRyYWdnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy9pbiBjYXNlIHRoZSB0b3VjaCBldmVudCB3YXMgdHJpZ2dlcmVkIG9uIGFuIGV4dGVybmFsIGRpdiwgZG8gdGhlIGluaXRpYWwgdG91Y2ggbm93LlxuICAgIGlmICh0aGlzLmRyYWcucG9pbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2goZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIG5vdGU6IGRyYWcucG9pbnRlciBpcyBzZXQgaW4gb25Ub3VjaCB0byBnZXQgdGhlIGluaXRpYWwgdG91Y2ggbG9jYXRpb25cbiAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdCh0aGlzLmRyYWcucG9pbnRlcik7XG5cbiAgICB0aGlzLmRyYWcuZHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMuZHJhZy5zZWxlY3Rpb24gPSBbXTtcbiAgICB0aGlzLmRyYWcudHJhbnNsYXRpb24gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbik7IC8vIGNvcHkgdGhlIG9iamVjdFxuICAgIHRoaXMuZHJhZy5ub2RlSWQgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZXZlbnQuc3JjRXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3guc2hvdyA9IHRydWU7XG4gICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG5cbiAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uc3RhcnQgPSB7XG4gICAgICAgIHg6IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCksXG4gICAgICAgIHk6IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueSksXG4gICAgICB9O1xuICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5wb3NpdGlvbi5lbmQgPSB7XG4gICAgICAgIHg6IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCksXG4gICAgICAgIHk6IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueSksXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobm9kZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMub3B0aW9ucy5kcmFnTm9kZXMgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZHJhZy5ub2RlSWQgPSBub2RlLmlkO1xuICAgICAgLy8gc2VsZWN0IHRoZSBjbGlja2VkIG5vZGUgaWYgbm90IHlldCBzZWxlY3RlZFxuICAgICAgaWYgKG5vZGUuaXNTZWxlY3RlZCgpID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2V0U2VsZWN0aW9uKHsgbm9kZXM6IFtub2RlLmlkXSB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gYWZ0ZXIgc2VsZWN0IHRvIGNvbnRhaW4gdGhlIG5vZGVcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZHJhZ1N0YXJ0XCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLmRyYWcucG9pbnRlclxuICAgICAgKTtcblxuICAgICAgLy8gY3JlYXRlIGFuIGFycmF5IHdpdGggdGhlIHNlbGVjdGVkIG5vZGVzIGFuZCB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbiBhbmQgc3RhdHVzXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkTm9kZXMoKSkge1xuICAgICAgICBjb25zdCBzID0ge1xuICAgICAgICAgIGlkOiBub2RlLmlkLFxuICAgICAgICAgIG5vZGU6IG5vZGUsXG5cbiAgICAgICAgICAvLyBzdG9yZSBvcmlnaW5hbCB4LCB5LCB4Rml4ZWQgYW5kIHlGaXhlZCwgbWFrZSB0aGUgbm9kZSB0ZW1wb3JhcmlseSBGaXhlZFxuICAgICAgICAgIHg6IG5vZGUueCxcbiAgICAgICAgICB5OiBub2RlLnksXG4gICAgICAgICAgeEZpeGVkOiBub2RlLm9wdGlvbnMuZml4ZWQueCxcbiAgICAgICAgICB5Rml4ZWQ6IG5vZGUub3B0aW9ucy5maXhlZC55LFxuICAgICAgICB9O1xuXG4gICAgICAgIG5vZGUub3B0aW9ucy5maXhlZC54ID0gdHJ1ZTtcbiAgICAgICAgbm9kZS5vcHRpb25zLmZpeGVkLnkgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuZHJhZy5zZWxlY3Rpb24ucHVzaChzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbGJhY2sgaWYgbm8gbm9kZSBpcyBzZWxlY3RlZCBhbmQgdGh1cyB0aGUgdmlldyBpcyBkcmFnZ2VkLlxuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgXCJkcmFnU3RhcnRcIixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHRoaXMuZHJhZy5wb2ludGVyLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZSBkcmFnIGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBvbkRyYWcoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5kcmFnLnBpbmNoZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgdGhlIGZvY3VzIG9uIG5vZGUgaWYgaXQgaXMgZm9jdXNzZWQgb24gYnkgdGhlIGZvY3VzT25Ob2RlXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInVubG9ja05vZGVcIik7XG5cbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmRyYWcuc2VsZWN0aW9uO1xuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLmxlbmd0aCAmJiB0aGlzLm9wdGlvbnMuZHJhZ05vZGVzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFwiZHJhZ2dpbmdcIiwgZXZlbnQsIHBvaW50ZXIpO1xuXG4gICAgICAvLyBjYWxjdWxhdGUgZGVsdGEncyBhbmQgbmV3IGxvY2F0aW9uXG4gICAgICBjb25zdCBkZWx0YVggPSBwb2ludGVyLnggLSB0aGlzLmRyYWcucG9pbnRlci54O1xuICAgICAgY29uc3QgZGVsdGFZID0gcG9pbnRlci55IC0gdGhpcy5kcmFnLnBvaW50ZXIueTtcblxuICAgICAgLy8gdXBkYXRlIHBvc2l0aW9uIG9mIGFsbCBzZWxlY3RlZCBub2Rlc1xuICAgICAgc2VsZWN0aW9uLmZvckVhY2goKHNlbGVjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gc2VsZWN0aW9uLm5vZGU7XG4gICAgICAgIC8vIG9ubHkgbW92ZSB0aGUgbm9kZSBpZiBpdCB3YXMgbm90IGZpeGVkIGluaXRpYWxseVxuICAgICAgICBpZiAoc2VsZWN0aW9uLnhGaXhlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBub2RlLnggPSB0aGlzLmNhbnZhcy5fWGNvbnZlcnRET010b0NhbnZhcyhcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLl9YY29udmVydENhbnZhc1RvRE9NKHNlbGVjdGlvbi54KSArIGRlbHRhWFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb25seSBtb3ZlIHRoZSBub2RlIGlmIGl0IHdhcyBub3QgZml4ZWQgaW5pdGlhbGx5XG4gICAgICAgIGlmIChzZWxlY3Rpb24ueUZpeGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIG5vZGUueSA9IHRoaXMuY2FudmFzLl9ZY29udmVydERPTXRvQ2FudmFzKFxuICAgICAgICAgICAgdGhpcy5jYW52YXMuX1ljb252ZXJ0Q2FudmFzVG9ET00oc2VsZWN0aW9uLnkpICsgZGVsdGFZXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHN0YXJ0IHRoZSBzaW11bGF0aW9uIG9mIHRoZSBwaHlzaWNzXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwic3RhcnRTaW11bGF0aW9uXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjcmVhdGUgc2VsZWN0aW9uIGJveFxuICAgICAgaWYgKGV2ZW50LnNyY0V2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgICAgXCJkcmFnZ2luZ1wiLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHBvaW50ZXIsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBpZiB0aGUgZHJhZyB3YXMgbm90IHN0YXJ0ZWQgcHJvcGVybHkgYmVjYXVzZSB0aGUgY2xpY2sgc3RhcnRlZCBvdXRzaWRlIHRoZSBuZXR3b3JrIGRpdiwgc3RhcnQgaXQgbm93LlxuICAgICAgICBpZiAodGhpcy5kcmFnLnBvaW50ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMub25EcmFnU3RhcnQoZXZlbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb24uZW5kID0ge1xuICAgICAgICAgIHg6IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCksXG4gICAgICAgICAgeTogdGhpcy5jYW52YXMuX1ljb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci55KSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgICAgfVxuXG4gICAgICAvLyBtb3ZlIHRoZSBuZXR3b3JrXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRyYWdWaWV3ID09PSB0cnVlICYmICFldmVudC5zcmNFdmVudC5zaGlmdEtleSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ2dpbmdcIixcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBwb2ludGVyLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaWYgdGhlIGRyYWcgd2FzIG5vdCBzdGFydGVkIHByb3Blcmx5IGJlY2F1c2UgdGhlIGNsaWNrIHN0YXJ0ZWQgb3V0c2lkZSB0aGUgbmV0d29yayBkaXYsIHN0YXJ0IGl0IG5vdy5cbiAgICAgICAgaWYgKHRoaXMuZHJhZy5wb2ludGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9uRHJhZ1N0YXJ0KGV2ZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWZmWCA9IHBvaW50ZXIueCAtIHRoaXMuZHJhZy5wb2ludGVyLng7XG4gICAgICAgIGNvbnN0IGRpZmZZID0gcG9pbnRlci55IC0gdGhpcy5kcmFnLnBvaW50ZXIueTtcblxuICAgICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHtcbiAgICAgICAgICB4OiB0aGlzLmRyYWcudHJhbnNsYXRpb24ueCArIGRpZmZYLFxuICAgICAgICAgIHk6IHRoaXMuZHJhZy50cmFuc2xhdGlvbi55ICsgZGlmZlksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIGRyYWcgc3RhcnQgZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uRHJhZ0VuZChldmVudCkge1xuICAgIHRoaXMuZHJhZy5kcmFnZ2luZyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuYm9keS5zZWxlY3Rpb25Cb3guc2hvdykge1xuICAgICAgdGhpcy5ib2R5LnNlbGVjdGlvbkJveC5zaG93ID0gZmFsc2U7XG4gICAgICBjb25zdCBzZWxlY3Rpb25Cb3hQb3NpdGlvbiA9IHRoaXMuYm9keS5zZWxlY3Rpb25Cb3gucG9zaXRpb247XG4gICAgICBjb25zdCBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heCA9IHtcbiAgICAgICAgbWluWDogTWF0aC5taW4oXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uc3RhcnQueCxcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5lbmQueFxuICAgICAgICApLFxuICAgICAgICBtaW5ZOiBNYXRoLm1pbihcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5zdGFydC55LFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLmVuZC55XG4gICAgICAgICksXG4gICAgICAgIG1heFg6IE1hdGgubWF4KFxuICAgICAgICAgIHNlbGVjdGlvbkJveFBvc2l0aW9uLnN0YXJ0LngsXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uZW5kLnhcbiAgICAgICAgKSxcbiAgICAgICAgbWF4WTogTWF0aC5tYXgoXG4gICAgICAgICAgc2VsZWN0aW9uQm94UG9zaXRpb24uc3RhcnQueSxcbiAgICAgICAgICBzZWxlY3Rpb25Cb3hQb3NpdGlvbi5lbmQueVxuICAgICAgICApLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdG9CZVNlbGVjdGVkTm9kZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXMuZmlsdGVyKChub2RlSWQpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG5vZGUueCA+PSBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heC5taW5YICYmXG4gICAgICAgICAgbm9kZS54IDw9IHNlbGVjdGlvbkJveFBvc2l0aW9uTWluTWF4Lm1heFggJiZcbiAgICAgICAgICBub2RlLnkgPj0gc2VsZWN0aW9uQm94UG9zaXRpb25NaW5NYXgubWluWSAmJlxuICAgICAgICAgIG5vZGUueSA8PSBzZWxlY3Rpb25Cb3hQb3NpdGlvbk1pbk1heC5tYXhZXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgdG9CZVNlbGVjdGVkTm9kZXMuZm9yRWFjaCgobm9kZUlkKSA9PlxuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0T2JqZWN0KHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcG9pbnRlciA9IHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdEFuZEVtaXQocG9pbnRlciwgZXZlbnQpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgXCJkcmFnRW5kXCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmRyYWcuc2VsZWN0aW9uO1xuICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgIHNlbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgLy8gcmVzdG9yZSBvcmlnaW5hbCB4Rml4ZWQgYW5kIHlGaXhlZFxuICAgICAgICAgIHMubm9kZS5vcHRpb25zLmZpeGVkLnggPSBzLnhGaXhlZDtcbiAgICAgICAgICBzLm5vZGUub3B0aW9ucy5maXhlZC55ID0gcy55Rml4ZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ0VuZFwiLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2VuZXJhdGVDbGlja0V2ZW50KFxuICAgICAgICAgIFwiZHJhZ0VuZFwiLFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHRoaXMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHBpbmNoIGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25QaW5jaChldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcblxuICAgIHRoaXMuZHJhZy5waW5jaGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5waW5jaFtcInNjYWxlXCJdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGluY2guc2NhbGUgPSAxO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGVuYWJsZWQgbW92aW5nIHdoaWxlIHBpbmNoaW5nP1xuICAgIGNvbnN0IHNjYWxlID0gdGhpcy5waW5jaC5zY2FsZSAqIGV2ZW50LnNjYWxlO1xuICAgIHRoaXMuem9vbShzY2FsZSwgcG9pbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogWm9vbSB0aGUgbmV0d29yayBpbiBvciBvdXRcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlIGEgbnVtYmVyIGFyb3VuZCAxLCBhbmQgYmV0d2VlbiAwLjAxIGFuZCAxMFxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXIgICAgUG9zaXRpb24gb24gc2NyZWVuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB6b29tKHNjYWxlLCBwb2ludGVyKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy56b29tVmlldyA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3Qgc2NhbGVPbGQgPSB0aGlzLmJvZHkudmlldy5zY2FsZTtcbiAgICAgIGlmIChzY2FsZSA8IDAuMDAwMDEpIHtcbiAgICAgICAgc2NhbGUgPSAwLjAwMDAxO1xuICAgICAgfVxuICAgICAgaWYgKHNjYWxlID4gMTApIHtcbiAgICAgICAgc2NhbGUgPSAxMDtcbiAgICAgIH1cblxuICAgICAgbGV0IHByZVNjYWxlRHJhZ1BvaW50ZXIgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5kcmFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZy5kcmFnZ2luZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHByZVNjYWxlRHJhZ1BvaW50ZXIgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyh0aGlzLmRyYWcucG9pbnRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vICsgdGhpcy5jYW52YXMuZnJhbWUuY2FudmFzLmNsaWVudEhlaWdodCAvIDJcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdGhpcy5ib2R5LnZpZXcudHJhbnNsYXRpb247XG5cbiAgICAgIGNvbnN0IHNjYWxlRnJhYyA9IHNjYWxlIC8gc2NhbGVPbGQ7XG4gICAgICBjb25zdCB0eCA9ICgxIC0gc2NhbGVGcmFjKSAqIHBvaW50ZXIueCArIHRyYW5zbGF0aW9uLnggKiBzY2FsZUZyYWM7XG4gICAgICBjb25zdCB0eSA9ICgxIC0gc2NhbGVGcmFjKSAqIHBvaW50ZXIueSArIHRyYW5zbGF0aW9uLnkgKiBzY2FsZUZyYWM7XG5cbiAgICAgIHRoaXMuYm9keS52aWV3LnNjYWxlID0gc2NhbGU7XG4gICAgICB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbiA9IHsgeDogdHgsIHk6IHR5IH07XG5cbiAgICAgIGlmIChwcmVTY2FsZURyYWdQb2ludGVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBwb3N0U2NhbGVEcmFnUG9pbnRlciA9XG4gICAgICAgICAgdGhpcy5jYW52YXMuY2FudmFzVG9ET00ocHJlU2NhbGVEcmFnUG9pbnRlcik7XG4gICAgICAgIHRoaXMuZHJhZy5wb2ludGVyLnggPSBwb3N0U2NhbGVEcmFnUG9pbnRlci54O1xuICAgICAgICB0aGlzLmRyYWcucG9pbnRlci55ID0gcG9zdFNjYWxlRHJhZ1BvaW50ZXIueTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZXF1ZXN0UmVkcmF3XCIpO1xuXG4gICAgICBpZiAoc2NhbGVPbGQgPCBzY2FsZSkge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiem9vbVwiLCB7XG4gICAgICAgICAgZGlyZWN0aW9uOiBcIitcIixcbiAgICAgICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICAgICAgcG9pbnRlcjogcG9pbnRlcixcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiem9vbVwiLCB7XG4gICAgICAgICAgZGlyZWN0aW9uOiBcIi1cIixcbiAgICAgICAgICBzY2FsZTogdGhpcy5ib2R5LnZpZXcuc2NhbGUsXG4gICAgICAgICAgcG9pbnRlcjogcG9pbnRlcixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgZm9yIG1vdXNlIHdoZWVsIGV2ZW50LCB1c2VkIHRvIHpvb20gdGhlIHRpbWVsaW5lXG4gICAqIFNlZSBodHRwOi8vYWRvbWFzLm9yZy9qYXZhc2NyaXB0LW1vdXNlLXdoZWVsL1xuICAgKiAgICAgaHR0cHM6Ly9naXRodWIuY29tL0VpZ2h0TWVkaWEvaGFtbWVyLmpzL2lzc3Vlcy8yNTZcbiAgICpcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSAgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uTW91c2VXaGVlbChldmVudCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuem9vbVZpZXcgPT09IHRydWUpIHtcbiAgICAgIC8vIElmIGRlbHRhIGlzIG5vbnplcm8sIGhhbmRsZSBpdC5cbiAgICAgIC8vIEJhc2ljYWxseSwgZGVsdGEgaXMgbm93IHBvc2l0aXZlIGlmIHdoZWVsIHdhcyBzY3JvbGxlZCB1cCxcbiAgICAgIC8vIGFuZCBuZWdhdGl2ZSwgaWYgd2hlZWwgd2FzIHNjcm9sbGVkIGRvd24uXG4gICAgICBpZiAoZXZlbnQuZGVsdGFZICE9PSAwKSB7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgbmV3IHNjYWxlXG4gICAgICAgIGxldCBzY2FsZSA9IHRoaXMuYm9keS52aWV3LnNjYWxlO1xuICAgICAgICBzY2FsZSAqPVxuICAgICAgICAgIDEgKyAoZXZlbnQuZGVsdGFZIDwgMCA/IDEgOiAtMSkgKiAodGhpcy5vcHRpb25zLnpvb21TcGVlZCAqIDAuMSk7XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBwb2ludGVyIGxvY2F0aW9uXG4gICAgICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmdldFBvaW50ZXIoeyB4OiBldmVudC5jbGllbnRYLCB5OiBldmVudC5jbGllbnRZIH0pO1xuXG4gICAgICAgIC8vIGFwcGx5IHRoZSBuZXcgc2NhbGVcbiAgICAgICAgdGhpcy56b29tKHNjYWxlLCBwb2ludGVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGFjdGlvbnMgY2F1c2VkIGJ5IG1vdXNlIHdoZWVsLlxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW91c2UgbW92ZSBoYW5kbGVyIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSB0aXRsZSBtb3ZlcyBvdmVyIGEgbm9kZSB3aXRoIGEgdGl0bGUuXG4gICAqXG4gICAqIEBwYXJhbSAge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Nb3VzZU1vdmUoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5nZXRQb2ludGVyKHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9KTtcbiAgICBsZXQgcG9wdXBWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBub2RlIGlzIHN0aWxsIHNlbGVjdGVkXG4gICAgaWYgKHRoaXMucG9wdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMucG9wdXAuaGlkZGVuID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9jaGVja0hpZGVQb3B1cChwb2ludGVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHBvcHVwIHdhcyBub3QgaGlkZGVuIGFib3ZlXG4gICAgICBpZiAodGhpcy5wb3B1cC5oaWRkZW4gPT09IGZhbHNlKSB7XG4gICAgICAgIHBvcHVwVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHRoaXMucG9wdXAuc2V0UG9zaXRpb24ocG9pbnRlci54ICsgMywgcG9pbnRlci55IC0gNSk7XG4gICAgICAgIHRoaXMucG9wdXAuc2hvdygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIHdlIGJpbmQgdGhlIGtleWJvYXJkIHRvIHRoZSBkaXYsIHdlIGhhdmUgdG8gaGlnaGxpZ2h0IGl0IHRvIHVzZSBpdC4gVGhpcyBoaWdobGlnaHRzIGl0IG9uIG1vdXNlIG92ZXIuXG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmtleWJvYXJkLmF1dG9Gb2N1cyAmJlxuICAgICAgdGhpcy5vcHRpb25zLmtleWJvYXJkLmJpbmRUb1dpbmRvdyA9PT0gZmFsc2UgJiZcbiAgICAgIHRoaXMub3B0aW9ucy5rZXlib2FyZC5lbmFibGVkID09PSB0cnVlXG4gICAgKSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IGEgdGltZW91dCB0aGF0IHdpbGwgY2hlY2sgaWYgdGhlIG1vdXNlIGlzIHBvc2l0aW9uZWQgYWJvdmUgYW4gZWxlbWVudFxuICAgIGlmIChwb3B1cFZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5wb3B1cFRpbWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBvcHVwVGltZXIpOyAvLyBzdG9wIGFueSBydW5uaW5nIGNhbGN1bGF0aW9uVGltZXJcbiAgICAgICAgdGhpcy5wb3B1cFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmRyYWcuZHJhZ2dpbmcpIHtcbiAgICAgICAgdGhpcy5wb3B1cFRpbWVyID0gc2V0VGltZW91dChcbiAgICAgICAgICAoKSA9PiB0aGlzLl9jaGVja1Nob3dQb3B1cChwb2ludGVyKSxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMudG9vbHRpcERlbGF5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRkaW5nIGhvdmVyIGhpZ2hsaWdodHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmhvdmVyID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuaG92ZXJPYmplY3QoZXZlbnQsIHBvaW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBlbGVtZW50IG9uIHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgbmV0d29ya1xuICAgKiAoYSBub2RlIG9yIGVkZ2UpLiBJZiBzbywgYW5kIGlmIHRoaXMgZWxlbWVudCBoYXMgYSB0aXRsZSxcbiAgICogc2hvdyBhIHBvcHVwIHdpbmRvdyB3aXRoIGl0cyB0aXRsZS5cbiAgICpcbiAgICogQHBhcmFtIHt7eDpudW1iZXIsIHk6bnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrU2hvd1BvcHVwKHBvaW50ZXIpIHtcbiAgICBjb25zdCB4ID0gdGhpcy5jYW52YXMuX1hjb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci54KTtcbiAgICBjb25zdCB5ID0gdGhpcy5jYW52YXMuX1ljb252ZXJ0RE9NdG9DYW52YXMocG9pbnRlci55KTtcbiAgICBjb25zdCBwb2ludGVyT2JqID0ge1xuICAgICAgbGVmdDogeCxcbiAgICAgIHRvcDogeSxcbiAgICAgIHJpZ2h0OiB4LFxuICAgICAgYm90dG9tOiB5LFxuICAgIH07XG5cbiAgICBjb25zdCBwcmV2aW91c1BvcHVwT2JqSWQgPVxuICAgICAgdGhpcy5wb3B1cE9iaiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdGhpcy5wb3B1cE9iai5pZDtcbiAgICBsZXQgbm9kZVVuZGVyQ3Vyc29yID0gZmFsc2U7XG4gICAgbGV0IHBvcHVwVHlwZSA9IFwibm9kZVwiO1xuXG4gICAgLy8gY2hlY2sgaWYgYSBub2RlIGlzIHVuZGVyIHRoZSBjdXJzb3IuXG4gICAgaWYgKHRoaXMucG9wdXBPYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2VhcmNoIHRoZSBub2RlcyBmb3Igb3ZlcmxhcCwgc2VsZWN0IHRoZSB0b3Agb25lIGluIGNhc2Ugb2YgbXVsdGlwbGUgbm9kZXNcbiAgICAgIGNvbnN0IG5vZGVJbmRpY2VzID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzO1xuICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZXMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW25vZGVJbmRpY2VzW2ldXTtcbiAgICAgICAgaWYgKG5vZGUuaXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaikgPT09IHRydWUpIHtcbiAgICAgICAgICBub2RlVW5kZXJDdXJzb3IgPSB0cnVlO1xuICAgICAgICAgIGlmIChub2RlLmdldFRpdGxlKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3ZlcmxhcHBpbmdOb2Rlcy5wdXNoKG5vZGVJbmRpY2VzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG92ZXJsYXBwaW5nTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBpZiB0aGVyZSBhcmUgb3ZlcmxhcHBpbmcgbm9kZXMsIHNlbGVjdCB0aGUgbGFzdCBvbmUsIHRoaXMgaXMgdGhlIG9uZSB3aGljaCBpcyBkcmF3biBvbiB0b3Agb2YgdGhlIG90aGVyc1xuICAgICAgICB0aGlzLnBvcHVwT2JqID0gbm9kZXNbb3ZlcmxhcHBpbmdOb2Rlc1tvdmVybGFwcGluZ05vZGVzLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgLy8gaWYgeW91IGhvdmVyIG92ZXIgYSBub2RlLCB0aGUgdGl0bGUgb2YgdGhlIGVkZ2UgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHNob3duLlxuICAgICAgICBub2RlVW5kZXJDdXJzb3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBvcHVwT2JqID09PSB1bmRlZmluZWQgJiYgbm9kZVVuZGVyQ3Vyc29yID09PSBmYWxzZSkge1xuICAgICAgLy8gc2VhcmNoIHRoZSBlZGdlcyBmb3Igb3ZlcmxhcFxuICAgICAgY29uc3QgZWRnZUluZGljZXMgPSB0aGlzLmJvZHkuZWRnZUluZGljZXM7XG4gICAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICAgIGxldCBlZGdlO1xuICAgICAgY29uc3Qgb3ZlcmxhcHBpbmdFZGdlcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBlZGdlID0gZWRnZXNbZWRnZUluZGljZXNbaV1dO1xuICAgICAgICBpZiAoZWRnZS5pc092ZXJsYXBwaW5nV2l0aChwb2ludGVyT2JqKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCA9PT0gdHJ1ZSAmJiBlZGdlLmdldFRpdGxlKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3ZlcmxhcHBpbmdFZGdlcy5wdXNoKGVkZ2VJbmRpY2VzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG92ZXJsYXBwaW5nRWRnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnBvcHVwT2JqID0gZWRnZXNbb3ZlcmxhcHBpbmdFZGdlc1tvdmVybGFwcGluZ0VkZ2VzLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgcG9wdXBUeXBlID0gXCJlZGdlXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9wdXBPYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2hvdyBwb3B1cCBtZXNzYWdlIHdpbmRvd1xuICAgICAgaWYgKHRoaXMucG9wdXBPYmouaWQgIT09IHByZXZpb3VzUG9wdXBPYmpJZCkge1xuICAgICAgICBpZiAodGhpcy5wb3B1cCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5wb3B1cCA9IG5ldyBQb3B1cCh0aGlzLmNhbnZhcy5mcmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0VHlwZSA9IHBvcHVwVHlwZTtcbiAgICAgICAgdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkID0gdGhpcy5wb3B1cE9iai5pZDtcblxuICAgICAgICAvLyBhZGp1c3QgYSBzbWFsbCBvZmZzZXQgc3VjaCB0aGF0IHRoZSBtb3VzZSBjdXJzb3IgaXMgbG9jYXRlZCBpbiB0aGVcbiAgICAgICAgLy8gYm90dG9tIGxlZnQgbG9jYXRpb24gb2YgdGhlIHBvcHVwLCBhbmQgeW91IGNhbiBlYXNpbHkgbW92ZSBvdmVyIHRoZVxuICAgICAgICAvLyBwb3B1cCBhcmVhXG4gICAgICAgIHRoaXMucG9wdXAuc2V0UG9zaXRpb24ocG9pbnRlci54ICsgMywgcG9pbnRlci55IC0gNSk7XG4gICAgICAgIHRoaXMucG9wdXAuc2V0VGV4dCh0aGlzLnBvcHVwT2JqLmdldFRpdGxlKCkpO1xuICAgICAgICB0aGlzLnBvcHVwLnNob3coKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInNob3dQb3B1cFwiLCB0aGlzLnBvcHVwT2JqLmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucG9wdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnBvcHVwLmhpZGUoKTtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImhpZGVQb3B1cFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBvcHVwIG11c3QgYmUgaGlkZGVuLCB3aGljaCBpcyB0aGUgY2FzZSB3aGVuIHRoZSBtb3VzZSBpcyBub1xuICAgKiBsb25nZXIgaG92ZXJpbmcgb24gdGhlIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge3t4Om51bWJlciwgeTpudW1iZXJ9fSBwb2ludGVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hlY2tIaWRlUG9wdXAocG9pbnRlcikge1xuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuXG4gICAgbGV0IHN0aWxsT25PYmogPSBmYWxzZTtcbiAgICBpZiAodGhpcy5wb3B1cC5wb3B1cFRhcmdldFR5cGUgPT09IFwibm9kZVwiKSB7XG4gICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW3RoaXMucG9wdXAucG9wdXBUYXJnZXRJZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzdGlsbE9uT2JqID1cbiAgICAgICAgICB0aGlzLmJvZHkubm9kZXNbdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkXS5pc092ZXJsYXBwaW5nV2l0aChcbiAgICAgICAgICAgIHBvaW50ZXJPYmpcbiAgICAgICAgICApO1xuXG4gICAgICAgIC8vIGlmIHRoZSBtb3VzZSBpcyBzdGlsbCBvbmUgdGhlIG5vZGUsIHdlIGhhdmUgdG8gY2hlY2sgaWYgaXQgaXMgbm90IGFsc28gb24gb25lIHRoYXQgaXMgZHJhd24gb24gdG9wIG9mIGl0LlxuICAgICAgICAvLyB3ZSBpbml0aWFsbHkgb25seSBjaGVjayBzdGlsbE9uT2JqIGJlY2F1c2UgdGhpcyBpcyBtdWNoIGZhc3Rlci5cbiAgICAgICAgaWYgKHN0aWxsT25PYmogPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBvdmVyTm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXROb2RlQXQocG9pbnRlcik7XG4gICAgICAgICAgc3RpbGxPbk9iaiA9XG4gICAgICAgICAgICBvdmVyTm9kZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgOiBvdmVyTm9kZS5pZCA9PT0gdGhpcy5wb3B1cC5wb3B1cFRhcmdldElkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0Tm9kZUF0KHBvaW50ZXIpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuYm9keS5lZGdlc1t0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0SWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdGlsbE9uT2JqID1cbiAgICAgICAgICAgIHRoaXMuYm9keS5lZGdlc1t0aGlzLnBvcHVwLnBvcHVwVGFyZ2V0SWRdLmlzT3ZlcmxhcHBpbmdXaXRoKFxuICAgICAgICAgICAgICBwb2ludGVyT2JqXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0aWxsT25PYmogPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnBvcHVwT2JqID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5wb3B1cC5oaWRlKCk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiaGlkZVBvcHVwXCIpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcmFjdGlvbkhhbmRsZXI7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYFNldGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LW9iamVjdHNcbmNvbGxlY3Rpb24oJ1NldCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnNldCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLlNldDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGdldFdlYWtEYXRhID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZ2V0V2Vha0RhdGE7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgQXJyYXlJdGVyYXRpb25Nb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xudmFyIGZpbmQgPSBBcnJheUl0ZXJhdGlvbk1vZHVsZS5maW5kO1xudmFyIGZpbmRJbmRleCA9IEFycmF5SXRlcmF0aW9uTW9kdWxlLmZpbmRJbmRleDtcbnZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xudmFyIGlkID0gMDtcblxuLy8gZmFsbGJhY2sgZm9yIHVuY2F1Z2h0IGZyb3plbiBrZXlzXG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuZnJvemVuIHx8IChzdGF0ZS5mcm96ZW4gPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG5cbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVudHJpZXMgPSBbXTtcbn07XG5cbnZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiAoc3RvcmUsIGtleSkge1xuICByZXR1cm4gZmluZChzdG9yZS5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuXG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnlbMV07XG4gIH0sXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSBlbnRyeVsxXSA9IHZhbHVlO1xuICAgIGVsc2UgdGhpcy5lbnRyaWVzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSxcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXgodGhpcy5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHNwbGljZSh0aGlzLmVudHJpZXMsIGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGlkOiBpZCsrLFxuICAgICAgICBmcm96ZW46IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgdW5jYXVnaHRGcm96ZW5TdG9yZShzdGF0ZSkuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgZWxzZSBkYXRhW3N0YXRlLmlkXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwge1xuICAgICAgLy8gYHsgV2Vha01hcCwgV2Vha1NldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrRGF0YShrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiBoYXNPd24oZGF0YSwgc3RhdGUuaWQpICYmIGRlbGV0ZSBkYXRhW3N0YXRlLmlkXTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBXZWFrTWFwLCBXZWFrU2V0IH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrRGF0YShrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiBoYXNPd24oZGF0YSwgc3RhdGUuaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgV2Vha01hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLmdldChrZXkpO1xuICAgICAgICAgIHJldHVybiBkYXRhID8gZGF0YVtzdGF0ZS5pZF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uV2VhayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmVuZm9yY2U7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyIGlzRXh0ZW5zaWJsZSA9ICRPYmplY3QuaXNFeHRlbnNpYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2Zyb3plbiAtLSBzYWZlXG52YXIgaXNGcm96ZW4gPSAkT2JqZWN0LmlzRnJvemVuO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc3NlYWxlZCAtLSBzYWZlXG52YXIgaXNTZWFsZWQgPSAkT2JqZWN0LmlzU2VhbGVkO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1mcmVlemUgLS0gc2FmZVxudmFyIGZyZWV6ZSA9ICRPYmplY3QuZnJlZXplO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZWFsIC0tIHNhZmVcbnZhciBzZWFsID0gJE9iamVjdC5zZWFsO1xuXG52YXIgRlJPWkVOID0ge307XG52YXIgU0VBTEVEID0ge307XG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xudmFyIEludGVybmFsV2Vha01hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbi8vIGBXZWFrTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLWNvbnN0cnVjdG9yXG52YXIgJFdlYWtNYXAgPSBjb2xsZWN0aW9uKCdXZWFrTWFwJywgd3JhcHBlciwgY29sbGVjdGlvbldlYWspO1xudmFyIFdlYWtNYXBQcm90b3R5cGUgPSAkV2Vha01hcC5wcm90b3R5cGU7XG52YXIgbmF0aXZlU2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5zZXQpO1xuXG4vLyBDaGFrcmEgRWRnZSBidWc6IGFkZGluZyBmcm96ZW4gYXJyYXlzIHRvIFdlYWtNYXAgdW5mcmVlemUgdGhlbVxudmFyIGhhc01TRWRnZUZyZWV6aW5nQnVnID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRlJFRVpJTkcgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBmcm96ZW5BcnJheSA9IGZyZWV6ZShbXSk7XG4gICAgbmF0aXZlU2V0KG5ldyAkV2Vha01hcCgpLCBmcm96ZW5BcnJheSwgMSk7XG4gICAgcmV0dXJuICFpc0Zyb3plbihmcm96ZW5BcnJheSk7XG4gIH0pO1xufTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuLy8gV2UgY2FuJ3QgdXNlIGZlYXR1cmUgZGV0ZWN0aW9uIGJlY2F1c2UgaXQgY3Jhc2ggc29tZSBvbGQgSUUgYnVpbGRzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDg1XG5pZiAoTkFUSVZFX1dFQUtfTUFQKSBpZiAoSVNfSUUxMSkge1xuICBJbnRlcm5hbFdlYWtNYXAgPSBjb2xsZWN0aW9uV2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCAnV2Vha01hcCcsIHRydWUpO1xuICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB2YXIgbmF0aXZlRGVsZXRlID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZVsnZGVsZXRlJ10pO1xuICB2YXIgbmF0aXZlSGFzID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5oYXMpO1xuICB2YXIgbmF0aXZlR2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5nZXQpO1xuICBkZWZpbmVCdWlsdElucyhXZWFrTWFwUHJvdG90eXBlLCB7XG4gICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5mcm96ZW4pIHN0YXRlLmZyb3plbiA9IG5ldyBJbnRlcm5hbFdlYWtNYXAoKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpIHx8IHN0YXRlLmZyb3plblsnZGVsZXRlJ10oa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICBpZiAoaXNPYmplY3Qoa2V5KSAmJiAhaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghc3RhdGUuZnJvemVuKSBzdGF0ZS5mcm96ZW4gPSBuZXcgSW50ZXJuYWxXZWFrTWFwKCk7XG4gICAgICAgIHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KSB8fCBzdGF0ZS5mcm96ZW4uaGFzKGtleSk7XG4gICAgICB9IHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlSGFzKHRoaXMsIGtleSkgPyBuYXRpdmVHZXQodGhpcywga2V5KSA6IHN0YXRlLmZyb3plbi5nZXQoa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZUdldCh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICBuYXRpdmVIYXModGhpcywga2V5KSA/IG5hdGl2ZVNldCh0aGlzLCBrZXksIHZhbHVlKSA6IHN0YXRlLmZyb3plbi5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgbmF0aXZlU2V0KHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9KTtcbi8vIENoYWtyYSBFZGdlIGZyb3plbiBrZXlzIGZpeFxufSBlbHNlIGlmIChoYXNNU0VkZ2VGcmVlemluZ0J1ZygpKSB7XG4gIGRlZmluZUJ1aWx0SW5zKFdlYWtNYXBQcm90b3R5cGUsIHtcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgYXJyYXlJbnRlZ3JpdHlMZXZlbDtcbiAgICAgIGlmIChpc0FycmF5KGtleSkpIHtcbiAgICAgICAgaWYgKGlzRnJvemVuKGtleSkpIGFycmF5SW50ZWdyaXR5TGV2ZWwgPSBGUk9aRU47XG4gICAgICAgIGVsc2UgaWYgKGlzU2VhbGVkKGtleSkpIGFycmF5SW50ZWdyaXR5TGV2ZWwgPSBTRUFMRUQ7XG4gICAgICB9XG4gICAgICBuYXRpdmVTZXQodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoYXJyYXlJbnRlZ3JpdHlMZXZlbCA9PT0gRlJPWkVOKSBmcmVlemUoa2V5KTtcbiAgICAgIGlmIChhcnJheUludGVncml0eUxldmVsID09PSBTRUFMRUQpIHNlYWwoa2V5KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLndlYWstbWFwJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5XZWFrTWFwO1xuIiwgImV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0YWJsZSB7XG4gIHNlbGVjdCgpOiB2b2lkO1xuICB1bnNlbGVjdCgpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yQ2hhbmdlczxUPiB7XG4gIGFkZGVkOiBUW107XG4gIGRlbGV0ZWQ6IFRbXTtcbiAgcHJldmlvdXM6IFRbXTtcbiAgY3VycmVudDogVFtdO1xufVxuXG4vKipcbiAqIEBwYXJhbSBwcmV2XG4gKiBAcGFyYW0gbmV4dFxuICovXG5mdW5jdGlvbiBkaWZmU2V0czxUPihwcmV2OiBSZWFkb25seVNldDxUPiwgbmV4dDogUmVhZG9ubHlTZXQ8VD4pOiBTZXQ8VD4ge1xuICBjb25zdCBkaWZmID0gbmV3IFNldDxUPigpO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbmV4dCkge1xuICAgIGlmICghcHJldi5oYXMoaXRlbSkpIHtcbiAgICAgIGRpZmYuYWRkKGl0ZW0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGlmZjtcbn1cblxuY2xhc3MgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yPFQgZXh0ZW5kcyBTZWxlY3RhYmxlPiB7XG4gICNwcmV2aW91c1NlbGVjdGlvbjogUmVhZG9ubHlTZXQ8VD4gPSBuZXcgU2V0KCk7XG4gICNzZWxlY3Rpb246IFNldDxUPiA9IG5ldyBTZXQoKTtcblxuICBwdWJsaWMgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uLnNpemU7XG4gIH1cblxuICBwdWJsaWMgYWRkKC4uLml0ZW1zOiByZWFkb25seSBUW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIHRoaXMuI3NlbGVjdGlvbi5hZGQoaXRlbSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBkZWxldGUoLi4uaXRlbXM6IHJlYWRvbmx5IFRbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgdGhpcy4jc2VsZWN0aW9uLmRlbGV0ZShpdGVtKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuI3NlbGVjdGlvbi5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbigpOiBUW10ge1xuICAgIHJldHVybiBbLi4udGhpcy4jc2VsZWN0aW9uXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDaGFuZ2VzKCk6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8VD4ge1xuICAgIHJldHVybiB7XG4gICAgICBhZGRlZDogWy4uLmRpZmZTZXRzKHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uLCB0aGlzLiNzZWxlY3Rpb24pXSxcbiAgICAgIGRlbGV0ZWQ6IFsuLi5kaWZmU2V0cyh0aGlzLiNzZWxlY3Rpb24sIHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uKV0sXG4gICAgICBwcmV2aW91czogWy4uLm5ldyBTZXQ8VD4odGhpcy4jcHJldmlvdXNTZWxlY3Rpb24pXSxcbiAgICAgIGN1cnJlbnQ6IFsuLi5uZXcgU2V0PFQ+KHRoaXMuI3NlbGVjdGlvbildLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY29tbWl0KCk6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8VD4ge1xuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmdldENoYW5nZXMoKTtcblxuICAgIHRoaXMuI3ByZXZpb3VzU2VsZWN0aW9uID0gdGhpcy4jc2VsZWN0aW9uO1xuICAgIHRoaXMuI3NlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy4jcHJldmlvdXNTZWxlY3Rpb24pO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNoYW5nZXMuYWRkZWQpIHtcbiAgICAgIGl0ZW0uc2VsZWN0KCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjaGFuZ2VzLmRlbGV0ZWQpIHtcbiAgICAgIGl0ZW0udW5zZWxlY3QoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxufVxuXG4vLyBUT0RPOiBUaGVzZSBzaG91bGQgYmUgcmVhbCB0eXBlcyBpbXBvcnRlZCBmcm9tIG5vZGUudHMgYW5kIGVkZ2UudHMgdGhhdCBkb24ndFxuLy8gZXhpc3QgeWV0LlxuaW50ZXJmYWNlIE5vZGUgZXh0ZW5kcyBTZWxlY3RhYmxlIHtcbiAgJDogXCJub2RlXCI7XG59XG5pbnRlcmZhY2UgRWRnZSBleHRlbmRzIFNlbGVjdGFibGUge1xuICAkOiBcImVkZ2VcIjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25BY2N1bXVsYXRvckNvbW1pdFN1bW1hcnkge1xuICBub2RlczogU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yQ2hhbmdlczxOb2RlPjtcbiAgZWRnZXM6IFNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvckNoYW5nZXM8RWRnZT47XG59XG5cbmV4cG9ydCB0eXBlIFNlbGVjdGlvbkFjY3VtdWxhdG9yQ29tbWl0SGFuZGxlcjxcbiAgQ29tbWl0QXJncyBleHRlbmRzIHJlYWRvbmx5IGFueVtdXG4+ID0gKHN1bW1hcnk6IFNlbGVjdGlvbkFjY3VtdWxhdG9yQ29tbWl0U3VtbWFyeSwgLi4ucmVzdDogQ29tbWl0QXJncykgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbkFjY3VtdWxhdG9yPENvbW1pdEFyZ3MgZXh0ZW5kcyByZWFkb25seSBhbnlbXT4ge1xuICAjbm9kZXMgPSBuZXcgU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yPE5vZGU+KCk7XG4gICNlZGdlcyA9IG5ldyBTaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3I8RWRnZT4oKTtcblxuICByZWFkb25seSAjY29tbWl0SGFuZGxlcjogU2VsZWN0aW9uQWNjdW11bGF0b3JDb21taXRIYW5kbGVyPENvbW1pdEFyZ3M+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBjb21taXRIYW5kbGVyOiBTZWxlY3Rpb25BY2N1bXVsYXRvckNvbW1pdEhhbmRsZXI8Q29tbWl0QXJncz4gPSAoKTogdm9pZCA9PiB7fVxuICApIHtcbiAgICB0aGlzLiNjb21taXRIYW5kbGVyID0gY29tbWl0SGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2l6ZU5vZGVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI25vZGVzLnNpemU7XG4gIH1cbiAgcHVibGljIGdldCBzaXplRWRnZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jZWRnZXMuc2l6ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROb2RlcygpOiBOb2RlW10ge1xuICAgIHJldHVybiB0aGlzLiNub2Rlcy5nZXRTZWxlY3Rpb24oKTtcbiAgfVxuICBwdWJsaWMgZ2V0RWRnZXMoKTogRWRnZVtdIHtcbiAgICByZXR1cm4gdGhpcy4jZWRnZXMuZ2V0U2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgYWRkTm9kZXMoLi4ubm9kZXM6IHJlYWRvbmx5IE5vZGVbXSk6IHZvaWQge1xuICAgIHRoaXMuI25vZGVzLmFkZCguLi5ub2Rlcyk7XG4gIH1cbiAgcHVibGljIGFkZEVkZ2VzKC4uLmVkZ2VzOiByZWFkb25seSBFZGdlW10pOiB2b2lkIHtcbiAgICB0aGlzLiNlZGdlcy5hZGQoLi4uZWRnZXMpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZU5vZGVzKG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICB0aGlzLiNub2Rlcy5kZWxldGUobm9kZSk7XG4gIH1cbiAgcHVibGljIGRlbGV0ZUVkZ2VzKGVkZ2U6IEVkZ2UpOiB2b2lkIHtcbiAgICB0aGlzLiNlZGdlcy5kZWxldGUoZWRnZSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy4jbm9kZXMuY2xlYXIoKTtcbiAgICB0aGlzLiNlZGdlcy5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGNvbW1pdCguLi5yZXN0OiBDb21taXRBcmdzKTogU2VsZWN0aW9uQWNjdW11bGF0b3JDb21taXRTdW1tYXJ5IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0ge1xuICAgICAgbm9kZXM6IHRoaXMuI25vZGVzLmNvbW1pdCgpLFxuICAgICAgZWRnZXM6IHRoaXMuI2VkZ2VzLmNvbW1pdCgpLFxuICAgIH07XG4gICAgdGhpcy4jY29tbWl0SGFuZGxlcihzdW1tYXJ5LCAuLi5yZXN0KTtcbiAgICByZXR1cm4gc3VtbWFyeTtcbiAgfVxufVxuIiwgImltcG9ydCBOb2RlIGZyb20gXCIuL2NvbXBvbmVudHMvTm9kZVwiO1xuaW1wb3J0IEVkZ2UgZnJvbSBcIi4vY29tcG9uZW50cy9FZGdlXCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25BY2N1bXVsYXRvciB9IGZyb20gXCIuL3NlbGVjdGlvblwiO1xuXG5pbXBvcnQgeyBzZWxlY3RpdmVEZWVwRXh0ZW5kIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuXG4vKipcbiAqIFRoZSBoYW5kbGVyIGZvciBzZWxlY3Rpb25zXG4gKi9cbmNsYXNzIFNlbGVjdGlvbkhhbmRsZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcbiAgICAvLyBUT0RPOiBDb25zaWRlciBmaXJpbmcgYW4gZXZlbnQgb24gYW55IGNoYW5nZSB0byB0aGUgc2VsZWN0aW9uLCBub3RcbiAgICAvLyBvbmx5IHRob3NlIGNhdXNlZCBieSBjbGlja3MgYW5kIHRhcHMuIEl0IHdvdWxkIGJlIGVhc3kgdG8gaW1wbGVtZW50XG4gICAgLy8gbm93IGFuZCAoYXQgbGVhc3QgdG8gbWUpIGl0IHNlZW1zIGxpa2Ugc29tZXRoaW5nIHRoYXQgY291bGQgYmVcbiAgICAvLyBxdWl0ZSB1c2VmdWwuXG4gICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IgPSBuZXcgU2VsZWN0aW9uQWNjdW11bGF0b3IoKTtcbiAgICB0aGlzLmhvdmVyT2JqID0geyBub2Rlczoge30sIGVkZ2VzOiB7fSB9O1xuXG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIG11bHRpc2VsZWN0OiBmYWxzZSxcbiAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICBzZWxlY3RDb25uZWN0ZWRFZGdlczogdHJ1ZSxcbiAgICAgIGhvdmVyQ29ubmVjdGVkRWRnZXM6IHRydWUsXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhQ2hhbmdlZFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IFtcbiAgICAgICAgXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBcImhvdmVyQ29ubmVjdGVkRWRnZXNcIixcbiAgICAgICAgXCJzZWxlY3RhYmxlXCIsXG4gICAgICAgIFwic2VsZWN0Q29ubmVjdGVkRWRnZXNcIixcbiAgICAgIF07XG4gICAgICBzZWxlY3RpdmVEZWVwRXh0ZW5kKGZpZWxkcywgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlcyB0aGUgc2VsZWN0aW9uIHBhcnQgb2YgdGhlIHRhcDtcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2VsZWN0T25Qb2ludChwb2ludGVyKSB7XG4gICAgbGV0IHNlbGVjdGVkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlY3RhYmxlID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBvYmogPSB0aGlzLmdldE5vZGVBdChwb2ludGVyKSB8fCB0aGlzLmdldEVkZ2VBdChwb2ludGVyKTtcblxuICAgICAgLy8gdW5zZWxlY3QgYWZ0ZXIgZ2V0dGluZyB0aGUgb2JqZWN0cyBpbiBvcmRlciB0byByZXN0b3JlIHdpZHRoIGFuZCBoZWlnaHQuXG4gICAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XG5cbiAgICAgIGlmIChvYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0T2JqZWN0KG9iaik7XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IHBvaW50ZXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzZWxlY3RBZGRpdGlvbmFsT25Qb2ludChwb2ludGVyKSB7XG4gICAgbGV0IHNlbGVjdGlvbkNoYW5nZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVjdGFibGUgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IG9iaiA9IHRoaXMuZ2V0Tm9kZUF0KHBvaW50ZXIpIHx8IHRoaXMuZ2V0RWRnZUF0KHBvaW50ZXIpO1xuXG4gICAgICBpZiAob2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIGlmIChvYmouaXNTZWxlY3RlZCgpID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5kZXNlbGVjdE9iamVjdChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3Rpb25DaGFuZ2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgc3RhbmRhcmQgZmllbGRzIGZvciBhbiBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIE9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHJldHVybnMge3t9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXRCYXNlRXZlbnQoZXZlbnQsIHBvaW50ZXIpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge307XG5cbiAgICBwcm9wZXJ0aWVzW1wicG9pbnRlclwiXSA9IHtcbiAgICAgIERPTTogeyB4OiBwb2ludGVyLngsIHk6IHBvaW50ZXIueSB9LFxuICAgICAgY2FudmFzOiB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKSxcbiAgICB9O1xuICAgIHByb3BlcnRpZXNbXCJldmVudFwiXSA9IGV2ZW50O1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYW4gZXZlbnQgd2hpY2ggdGhlIHVzZXIgY2FuIGNhdGNoLlxuICAgKlxuICAgKiBUaGlzIGFkZHMgc29tZSBleHRyYSBkYXRhIHRvIHRoZSBldmVudCB3aXRoIHJlc3BlY3QgdG8gY3Vyc29yIHBvc2l0aW9uIGFuZFxuICAgKiBzZWxlY3RlZCBub2RlcyBhbmQgZWRnZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgb2YgZXZlbnQgdG8gc2VuZFxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyICAgICAgICAgICAgT2JqZWN0IHdpdGggdGhlIHggYW5kIHkgc2NyZWVuIGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZVxuICAgKiBAcGFyYW0ge29iamVjdCB8IHVuZGVmaW5lZH0gb2xkU2VsZWN0aW9uICAgICAgICAgICAgIElmIHByZXNlbnQsIHNlbGVjdGlvbiBzdGF0ZSBiZWZvcmUgZXZlbnQgb2NjdXJlZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBbZW1wdHlTZWxlY3Rpb249ZmFsc2VdICBJbmRpY2F0ZSBpZiBzZWxlY3Rpb24gZGF0YSBzaG91bGQgYmUgcGFzc2VkXG4gICAqL1xuICBnZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgZXZlbnRUeXBlLFxuICAgIGV2ZW50LFxuICAgIHBvaW50ZXIsXG4gICAgb2xkU2VsZWN0aW9uLFxuICAgIGVtcHR5U2VsZWN0aW9uID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuX2luaXRCYXNlRXZlbnQoZXZlbnQsIHBvaW50ZXIpO1xuXG4gICAgaWYgKGVtcHR5U2VsZWN0aW9uID09PSB0cnVlKSB7XG4gICAgICBwcm9wZXJ0aWVzLm5vZGVzID0gW107XG4gICAgICBwcm9wZXJ0aWVzLmVkZ2VzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRtcCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBwcm9wZXJ0aWVzLm5vZGVzID0gdG1wLm5vZGVzO1xuICAgICAgcHJvcGVydGllcy5lZGdlcyA9IHRtcC5lZGdlcztcbiAgICB9XG5cbiAgICBpZiAob2xkU2VsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb3BlcnRpZXNbXCJwcmV2aW91c1NlbGVjdGlvblwiXSA9IG9sZFNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRUeXBlID09IFwiY2xpY2tcIikge1xuICAgICAgLy8gRm9yIHRoZSB0aW1lIGJlaW5nLCByZXN0cmljdCB0aGlzIGZ1bmN0aW9uYWxpdHkgdG9cbiAgICAgIC8vIGp1c3QgdGhlIGNsaWNrIGV2ZW50LlxuICAgICAgcHJvcGVydGllcy5pdGVtcyA9IHRoaXMuZ2V0Q2xpY2tlZEl0ZW1zKHBvaW50ZXIpO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jb250cm9sRWRnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9wZXJ0aWVzLmNvbnRyb2xFZGdlID0gZXZlbnQuY29udHJvbEVkZ2U7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChldmVudFR5cGUsIHByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlnaGxpZ2h0RWRnZXM9dGhpcy5vcHRpb25zLnNlbGVjdENvbm5lY3RlZEVkZ2VzXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNlbGVjdE9iamVjdChvYmosIGhpZ2hsaWdodEVkZ2VzID0gdGhpcy5vcHRpb25zLnNlbGVjdENvbm5lY3RlZEVkZ2VzKSB7XG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICBpZiAoaGlnaGxpZ2h0RWRnZXMgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5hZGRFZGdlcyguLi5vYmouZWRnZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmFkZE5vZGVzKG9iaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5hZGRFZGdlcyhvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqL1xuICBkZXNlbGVjdE9iamVjdChvYmopIHtcbiAgICBpZiAob2JqLmlzU2VsZWN0ZWQoKSA9PT0gdHJ1ZSkge1xuICAgICAgb2JqLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZW1vdmVGcm9tU2VsZWN0aW9uKG9iaik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHJpZXZlIGFsbCBub2RlcyBvdmVybGFwcGluZyB3aXRoIGdpdmVuIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0ICBBbiBvYmplY3Qgd2l0aCBwYXJhbWV0ZXJzIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbVxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119ICAgQW4gYXJyYXkgd2l0aCBpZCdzIG9mIHRoZSBvdmVybGFwcGluZyBub2Rlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkge1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZXMgPSBbXTtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldO1xuICAgICAgaWYgKG5vZGVzW25vZGVJZF0uaXNPdmVybGFwcGluZ1dpdGgob2JqZWN0KSkge1xuICAgICAgICBvdmVybGFwcGluZ05vZGVzLnB1c2gobm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG92ZXJsYXBwaW5nTm9kZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcG9zaXRpb24gb2JqZWN0IGluIGNhbnZhc3NwYWNlIGZyb20gYSBzaW5nbGUgcG9pbnQgaW4gc2NyZWVuc3BhY2VcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEByZXR1cm5zIHt7bGVmdDogbnVtYmVyLCB0b3A6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYm90dG9tOiBudW1iZXJ9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpIHtcbiAgICBjb25zdCBjYW52YXNQb3MgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogY2FudmFzUG9zLnggLSAxLFxuICAgICAgdG9wOiBjYW52YXNQb3MueSArIDEsXG4gICAgICByaWdodDogY2FudmFzUG9zLnggKyAxLFxuICAgICAgYm90dG9tOiBjYW52YXNQb3MueSAtIDEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRvcCBub2RlIGF0IHRoZSBwYXNzZWQgcG9pbnQgKGxpa2UgYSBjbGljaylcbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldHVybk5vZGU9dHJ1ZV1cbiAgICogQHJldHVybnMge05vZGUgfCB1bmRlZmluZWR9IG5vZGVcbiAgICovXG4gIGdldE5vZGVBdChwb2ludGVyLCByZXR1cm5Ob2RlID0gdHJ1ZSkge1xuICAgIC8vIHdlIGZpcnN0IGNoZWNrIGlmIHRoaXMgaXMgYW4gbmF2aWdhdGlvbiBjb250cm9scyBlbGVtZW50XG4gICAgY29uc3QgcG9zaXRpb25PYmplY3QgPSB0aGlzLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcbiAgICBjb25zdCBvdmVybGFwcGluZ05vZGVzID0gdGhpcy5fZ2V0QWxsTm9kZXNPdmVybGFwcGluZ1dpdGgocG9zaXRpb25PYmplY3QpO1xuICAgIC8vIGlmIHRoZXJlIGFyZSBvdmVybGFwcGluZyBub2Rlcywgc2VsZWN0IHRoZSBsYXN0IG9uZSwgdGhpcyBpcyB0aGVcbiAgICAvLyBvbmUgd2hpY2ggaXMgZHJhd24gb24gdG9wIG9mIHRoZSBvdGhlcnNcbiAgICBpZiAob3ZlcmxhcHBpbmdOb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAocmV0dXJuTm9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2R5Lm5vZGVzW292ZXJsYXBwaW5nTm9kZXNbb3ZlcmxhcHBpbmdOb2Rlcy5sZW5ndGggLSAxXV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb3ZlcmxhcHBpbmdOb2Rlc1tvdmVybGFwcGluZ05vZGVzLmxlbmd0aCAtIDFdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZXRyaWV2ZSBhbGwgZWRnZXMgb3ZlcmxhcHBpbmcgd2l0aCBnaXZlbiBvYmplY3QsIHNlbGVjdG9yIGlzIGFyb3VuZCBjZW50ZXJcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCAgQW4gb2JqZWN0IHdpdGggcGFyYW1ldGVycyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b21cbiAgICogQHBhcmFtIHtudW1iZXJbXX0gb3ZlcmxhcHBpbmdFZGdlcyBBbiBhcnJheSB3aXRoIGlkJ3Mgb2YgdGhlIG92ZXJsYXBwaW5nIG5vZGVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0RWRnZXNPdmVybGFwcGluZ1dpdGgob2JqZWN0LCBvdmVybGFwcGluZ0VkZ2VzKSB7XG4gICAgY29uc3QgZWRnZXMgPSB0aGlzLmJvZHkuZWRnZXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkuZWRnZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2VJZCA9IHRoaXMuYm9keS5lZGdlSW5kaWNlc1tpXTtcbiAgICAgIGlmIChlZGdlc1tlZGdlSWRdLmlzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkpIHtcbiAgICAgICAgb3ZlcmxhcHBpbmdFZGdlcy5wdXNoKGVkZ2VJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHJpZXZlIGFsbCBub2RlcyBvdmVybGFwcGluZyB3aXRoIGdpdmVuIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0ICBBbiBvYmplY3Qgd2l0aCBwYXJhbWV0ZXJzIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbVxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119ICAgQW4gYXJyYXkgd2l0aCBpZCdzIG9mIHRoZSBvdmVybGFwcGluZyBub2Rlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEFsbEVkZ2VzT3ZlcmxhcHBpbmdXaXRoKG9iamVjdCkge1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nRWRnZXMgPSBbXTtcbiAgICB0aGlzLl9nZXRFZGdlc092ZXJsYXBwaW5nV2l0aChvYmplY3QsIG92ZXJsYXBwaW5nRWRnZXMpO1xuICAgIHJldHVybiBvdmVybGFwcGluZ0VkZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZWRnZXMgbmVhcmVzdCB0byB0aGUgcGFzc2VkIHBvaW50IChsaWtlIGEgY2xpY2spXG4gICAqXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXR1cm5FZGdlPXRydWVdXG4gICAqIEByZXR1cm5zIHtFZGdlIHwgdW5kZWZpbmVkfSBub2RlXG4gICAqL1xuICBnZXRFZGdlQXQocG9pbnRlciwgcmV0dXJuRWRnZSA9IHRydWUpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgZWRnZXMsIHBpY2sgY2xvc2VzdCB3aXRoaW4gMTBcbiAgICBjb25zdCBjYW52YXNQb3MgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICBsZXQgbWluZGlzdCA9IDEwO1xuICAgIGxldCBvdmVybGFwcGluZ0VkZ2UgPSBudWxsO1xuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5ib2R5LmVkZ2VzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlZGdlSWQgPSB0aGlzLmJvZHkuZWRnZUluZGljZXNbaV07XG4gICAgICBjb25zdCBlZGdlID0gZWRnZXNbZWRnZUlkXTtcbiAgICAgIGlmIChlZGdlLmNvbm5lY3RlZCkge1xuICAgICAgICBjb25zdCB4RnJvbSA9IGVkZ2UuZnJvbS54O1xuICAgICAgICBjb25zdCB5RnJvbSA9IGVkZ2UuZnJvbS55O1xuICAgICAgICBjb25zdCB4VG8gPSBlZGdlLnRvLng7XG4gICAgICAgIGNvbnN0IHlUbyA9IGVkZ2UudG8ueTtcbiAgICAgICAgY29uc3QgZGlzdCA9IGVkZ2UuZWRnZVR5cGUuZ2V0RGlzdGFuY2VUb0VkZ2UoXG4gICAgICAgICAgeEZyb20sXG4gICAgICAgICAgeUZyb20sXG4gICAgICAgICAgeFRvLFxuICAgICAgICAgIHlUbyxcbiAgICAgICAgICBjYW52YXNQb3MueCxcbiAgICAgICAgICBjYW52YXNQb3MueVxuICAgICAgICApO1xuICAgICAgICBpZiAoZGlzdCA8IG1pbmRpc3QpIHtcbiAgICAgICAgICBvdmVybGFwcGluZ0VkZ2UgPSBlZGdlSWQ7XG4gICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG92ZXJsYXBwaW5nRWRnZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHJldHVybkVkZ2UgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5lZGdlc1tvdmVybGFwcGluZ0VkZ2VdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXBwaW5nRWRnZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIG9iamVjdCB0byB0aGUgc2VsZWN0aW9uIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfYWRkVG9Ib3ZlcihvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgdGhpcy5ob3Zlck9iai5ub2Rlc1tvYmouaWRdID0gb2JqO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhvdmVyT2JqLmVkZ2VzW29iai5pZF0gPSBvYmo7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHNpbmdsZSBvcHRpb24gZnJvbSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW1vdmVGcm9tU2VsZWN0aW9uKG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBOb2RlKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5kZWxldGVOb2RlcyhvYmopO1xuICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZGVsZXRlRWRnZXMoLi4ub2JqLmVkZ2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZGVsZXRlRWRnZXMob2JqKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zZWxlY3QgYWxsIG5vZGVzIGFuZCBlZGdlcy5cbiAgICovXG4gIHVuc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgbm9kZXNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFNlbGVjdGVkTm9kZUNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5zaXplTm9kZXM7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgZWRnZXNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFNlbGVjdGVkRWRnZUNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5zaXplRWRnZXM7XG4gIH1cblxuICAvKipcbiAgICogc2VsZWN0IHRoZSBlZGdlcyBjb25uZWN0ZWQgdG8gdGhlIG5vZGUgdGhhdCBpcyBiZWluZyBzZWxlY3RlZFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9ob3ZlckNvbm5lY3RlZEVkZ2VzKG5vZGUpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBub2RlLmVkZ2VzW2ldO1xuICAgICAgZWRnZS5ob3ZlciA9IHRydWU7XG4gICAgICB0aGlzLl9hZGRUb0hvdmVyKGVkZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGhpZ2hsaWdodCBmcm9tIGEgbm9kZSBvciBlZGdlLCBpbiByZXNwb25zZSB0byBtb3VzZSBtb3ZlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIG9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHBhcmFtIHtOb2RlfHZpcy5FZGdlfSBvYmplY3RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXRCbHVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIG9iamVjdCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9pbml0QmFzZUV2ZW50KGV2ZW50LCBwb2ludGVyKTtcblxuICAgIGlmIChvYmplY3QuaG92ZXIgPT09IHRydWUpIHtcbiAgICAgIG9iamVjdC5ob3ZlciA9IGZhbHNlO1xuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgcHJvcGVydGllcy5ub2RlID0gb2JqZWN0LmlkO1xuICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYmx1ck5vZGVcIiwgcHJvcGVydGllcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wZXJ0aWVzLmVkZ2UgPSBvYmplY3QuaWQ7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJibHVyRWRnZVwiLCBwcm9wZXJ0aWVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBoaWdobGlnaHQgZm9yIGEgbm9kZSBvciBlZGdlLCBpbiByZXNwb25zZSB0byBtb3VzZSBtb3ZlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnRcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIG9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICogQHBhcmFtIHtOb2RlfHZpcy5FZGdlfSBvYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGhvdmVyQ2hhbmdlZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdEhvdmVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIG9iamVjdCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9pbml0QmFzZUV2ZW50KGV2ZW50LCBwb2ludGVyKTtcbiAgICBsZXQgaG92ZXJDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICBpZiAob2JqZWN0LmhvdmVyID09PSBmYWxzZSkge1xuICAgICAgb2JqZWN0LmhvdmVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2FkZFRvSG92ZXIob2JqZWN0KTtcbiAgICAgIGhvdmVyQ2hhbmdlZCA9IHRydWU7XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICBwcm9wZXJ0aWVzLm5vZGUgPSBvYmplY3QuaWQ7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJob3Zlck5vZGVcIiwgcHJvcGVydGllcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wZXJ0aWVzLmVkZ2UgPSBvYmplY3QuaWQ7XG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJob3ZlckVkZ2VcIiwgcHJvcGVydGllcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdmVyQ2hhbmdlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGFjdGlvbnMgaW4gcmVzcG9uc2UgdG8gYSBtb3VzZSBtb3ZlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50XG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9pbnRlciB8IG9iamVjdCB3aXRoIHRoZSB4IGFuZCB5IHNjcmVlbiBjb29yZGluYXRlcyBvZiB0aGUgbW91c2VcbiAgICovXG4gIGhvdmVyT2JqZWN0KGV2ZW50LCBwb2ludGVyKSB7XG4gICAgbGV0IG9iamVjdCA9IHRoaXMuZ2V0Tm9kZUF0KHBvaW50ZXIpO1xuICAgIGlmIChvYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb2JqZWN0ID0gdGhpcy5nZXRFZGdlQXQocG9pbnRlcik7XG4gICAgfVxuXG4gICAgbGV0IGhvdmVyQ2hhbmdlZCA9IGZhbHNlO1xuICAgIC8vIHJlbW92ZSBhbGwgbm9kZSBob3ZlciBoaWdobGlnaHRzXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ob3Zlck9iai5ub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmhvdmVyT2JqLm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBvYmplY3QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChvYmplY3QgaW5zdGFuY2VvZiBOb2RlICYmIG9iamVjdC5pZCAhPSBub2RlSWQpIHx8XG4gICAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgRWRnZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmVtaXRCbHVyRXZlbnQoZXZlbnQsIHBvaW50ZXIsIHRoaXMuaG92ZXJPYmoubm9kZXNbbm9kZUlkXSk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuaG92ZXJPYmoubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBob3ZlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZpbmcgYWxsIGVkZ2UgaG92ZXIgaGlnaGxpZ2h0c1xuICAgIGZvciAoY29uc3QgZWRnZUlkIGluIHRoaXMuaG92ZXJPYmouZWRnZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ob3Zlck9iai5lZGdlcywgZWRnZUlkKSkge1xuICAgICAgICAvLyBpZiB0aGUgaG92ZXIgaGFzIGJlZW4gY2hhbmdlZCBoZXJlIGl0IG1lYW5zIHRoYXQgdGhlIG5vZGUgaGFzIGJlZW4gaG92ZXJlZCBvdmVyIG9yIG9mZlxuICAgICAgICAvLyB3ZSB0aGVuIGRvIG5vdCB1c2UgdGhlIGVtaXRCbHVyRXZlbnQgbWV0aG9kIGhlcmUuXG4gICAgICAgIGlmIChob3ZlckNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmhvdmVyT2JqLmVkZ2VzW2VkZ2VJZF0uaG92ZXIgPSBmYWxzZTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5ob3Zlck9iai5lZGdlc1tlZGdlSWRdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRoZSBibHVyIHJlbWFpbnMgdGhlIHNhbWUgYW5kIHRoZSBvYmplY3QgaXMgdW5kZWZpbmVkIChtb3VzZSBvZmYpIG9yIGFub3RoZXJcbiAgICAgICAgLy8gZWRnZSBoYXMgYmVlbiBob3ZlcmVkLCBvciBhbm90aGVyIG5vZGUgaGFzIGJlZW4gaG92ZXJlZCB3ZSBibHVyIHRoZSBlZGdlLlxuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICBvYmplY3QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIChvYmplY3QgaW5zdGFuY2VvZiBFZGdlICYmIG9iamVjdC5pZCAhPSBlZGdlSWQpIHx8XG4gICAgICAgICAgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgJiYgIW9iamVjdC5ob3ZlcilcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5lbWl0Qmx1ckV2ZW50KGV2ZW50LCBwb2ludGVyLCB0aGlzLmhvdmVyT2JqLmVkZ2VzW2VkZ2VJZF0pO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmhvdmVyT2JqLmVkZ2VzW2VkZ2VJZF07XG4gICAgICAgICAgaG92ZXJDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvYmplY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgaG92ZXJlZEVkZ2VzQ291bnQgPSBPYmplY3Qua2V5cyh0aGlzLmhvdmVyT2JqLmVkZ2VzKS5sZW5ndGg7XG4gICAgICBjb25zdCBob3ZlcmVkTm9kZXNDb3VudCA9IE9iamVjdC5rZXlzKHRoaXMuaG92ZXJPYmoubm9kZXMpLmxlbmd0aDtcbiAgICAgIGNvbnN0IG5ld09ubHlIb3ZlcmVkRWRnZSA9XG4gICAgICAgIG9iamVjdCBpbnN0YW5jZW9mIEVkZ2UgJiZcbiAgICAgICAgaG92ZXJlZEVkZ2VzQ291bnQgPT09IDAgJiZcbiAgICAgICAgaG92ZXJlZE5vZGVzQ291bnQgPT09IDA7XG4gICAgICBjb25zdCBuZXdPbmx5SG92ZXJlZE5vZGUgPVxuICAgICAgICBvYmplY3QgaW5zdGFuY2VvZiBOb2RlICYmXG4gICAgICAgIGhvdmVyZWRFZGdlc0NvdW50ID09PSAwICYmXG4gICAgICAgIGhvdmVyZWROb2Rlc0NvdW50ID09PSAwO1xuXG4gICAgICBpZiAoaG92ZXJDaGFuZ2VkIHx8IG5ld09ubHlIb3ZlcmVkRWRnZSB8fCBuZXdPbmx5SG92ZXJlZE5vZGUpIHtcbiAgICAgICAgaG92ZXJDaGFuZ2VkID0gdGhpcy5lbWl0SG92ZXJFdmVudChldmVudCwgcG9pbnRlciwgb2JqZWN0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgJiYgdGhpcy5vcHRpb25zLmhvdmVyQ29ubmVjdGVkRWRnZXMgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5faG92ZXJDb25uZWN0ZWRFZGdlcyhvYmplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChob3ZlckNoYW5nZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVxdWVzdFJlZHJhd1wiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0IHRoZSBzZWxlY3Rpb24gY2hhbmdlcyBidXQgZG9uJ3QgZW1pdCBhbnkgZXZlbnRzLlxuICAgKi9cbiAgY29tbWl0V2l0aG91dEVtaXR0aW5nKCkge1xuICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNvbW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhbmQgZGVzZWxlY3Qgbm9kZXMgZGVwZW5kaW5nIGN1cnJlbnQgc2VsZWN0aW9uIGNoYW5nZS5cbiAgICpcbiAgICogRm9yIGNoYW5naW5nIG5vZGVzLCBzZWxlY3QvZGVzZWxlY3QgZXZlbnRzIGFyZSBmaXJlZC5cbiAgICpcbiAgICogTk9URTogRm9yIGEgZ2l2ZW4gZWRnZSwgaWYgb25lIGNvbm5lY3Rpbmcgbm9kZSBpcyBkZXNlbGVjdGVkIGFuZCB3aXRoIHRoZVxuICAgKiBzYW1lIGNsaWNrIHRoZSBvdGhlciBub2RlIGlzIHNlbGVjdGVkLCBubyBldmVudHMgZm9yIHRoZSBlZGdlIHdpbGwgZmlyZS4gSXRcbiAgICogd2FzIHNlbGVjdGVkIGFuZCBpdCB3aWxsIHJlbWFpbiBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSBwb2ludGVyIC0gVGhlIHggYW5kIHkgY29vcmRpbmF0ZXMgb2YgdGhlXG4gICAqIGNsaWNrLCB0YXAsIGRyYWdlbmTigKYgdGhhdCB0cmlnZ2VyZWQgdGhpcy5cbiAgICogQHBhcmFtIHtVSUV2ZW50fSBldmVudCAtIFRoZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGlzLlxuICAgKi9cbiAgY29tbWl0QW5kRW1pdChwb2ludGVyLCBldmVudCkge1xuICAgIGxldCBzZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2VsZWN0aW9uQ2hhbmdlcyA9IHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmNvbW1pdCgpO1xuICAgIGNvbnN0IHByZXZpb3VzU2VsZWN0aW9uID0ge1xuICAgICAgbm9kZXM6IHNlbGVjdGlvbkNoYW5nZXMubm9kZXMucHJldmlvdXMsXG4gICAgICBlZGdlczogc2VsZWN0aW9uQ2hhbmdlcy5lZGdlcy5wcmV2aW91cyxcbiAgICB9O1xuXG4gICAgaWYgKHNlbGVjdGlvbkNoYW5nZXMuZWRnZXMuZGVsZXRlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgICAgXCJkZXNlbGVjdEVkZ2VcIixcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHBvaW50ZXIsXG4gICAgICAgIHByZXZpb3VzU2VsZWN0aW9uXG4gICAgICApO1xuICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VzLm5vZGVzLmRlbGV0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICAgIFwiZGVzZWxlY3ROb2RlXCIsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBwb2ludGVyLFxuICAgICAgICBwcmV2aW91c1NlbGVjdGlvblxuICAgICAgKTtcbiAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlcy5ub2Rlcy5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2xpY2tFdmVudChcInNlbGVjdE5vZGVcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICAgICAgc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VzLmVkZ2VzLmFkZGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDbGlja0V2ZW50KFwic2VsZWN0RWRnZVwiLCBldmVudCwgcG9pbnRlcik7XG4gICAgICBzZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmlyZSB0aGUgc2VsZWN0IGV2ZW50IGlmIGFueXRoaW5nIGhhcyBiZWVuIHNlbGVjdGVkIG9yIGRlc2VsZWN0ZWRcbiAgICBpZiAoc2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIHNlbGVjdCBvciB1bnNlbGVjdFxuICAgICAgdGhpcy5nZW5lcmF0ZUNsaWNrRXZlbnQoXCJzZWxlY3RcIiwgZXZlbnQsIHBvaW50ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGUgYW5kIGVkZ2UgaWRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7e25vZGVzOiBBcnJheS48c3RyaW5nPiwgZWRnZXM6IEFycmF5LjxzdHJpbmc+fX0gQXJyYXlzIHdpdGggdGhlXG4gICAqIGlkcyBvZiB0aGUgc2VsZWN0ZWQgbm9kZXMgYW5kIGVkZ2VzLlxuICAgKi9cbiAgZ2V0U2VsZWN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBub2RlczogdGhpcy5nZXRTZWxlY3RlZE5vZGVJZHMoKSxcbiAgICAgIGVkZ2VzOiB0aGlzLmdldFNlbGVjdGVkRWRnZUlkcygpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBub2Rlcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSB3aXRoIHNlbGVjdGVkIG5vZGVzLlxuICAgKi9cbiAgZ2V0U2VsZWN0ZWROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0Tm9kZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVkZ2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFuIGFycmF5IHdpdGggc2VsZWN0ZWQgZWRnZXMuXG4gICAqL1xuICBnZXRTZWxlY3RlZEVkZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5nZXRFZGdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZSBpZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQW4gYXJyYXkgd2l0aCB0aGUgaWRzIG9mIHRoZSBzZWxlY3RlZCBub2Rlcy5cbiAgICovXG4gIGdldFNlbGVjdGVkTm9kZUlkcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0Tm9kZXMoKS5tYXAoKG5vZGUpID0+IG5vZGUuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZWRnZSBpZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQW4gYXJyYXkgd2l0aCB0aGUgaWRzIG9mIHRoZSBzZWxlY3RlZCBlZGdlcy5cbiAgICovXG4gIGdldFNlbGVjdGVkRWRnZUlkcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0RWRnZXMoKS5tYXAoKGVkZ2UpID0+IGVkZ2UuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7e25vZGVzOiBBcnJheS48c3RyaW5nPiwgZWRnZXM6IEFycmF5LjxzdHJpbmc+fX0gc2VsZWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uc1xuICAgKi9cbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgKCFzZWxlY3Rpb24ubm9kZXMgJiYgIXNlbGVjdGlvbi5lZGdlcykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiU2VsZWN0aW9uIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggbm9kZXMgYW5kL29yIGVkZ2VzIHByb3BlcnRpZXNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCB1bnNlbGVjdCBhbnkgc2VsZWN0ZWQgbm9kZSwgaWYgb3B0aW9uIGlzIHRydWUgb3IgdW5kZWZpbmVkXG4gICAgaWYgKG9wdGlvbnMudW5zZWxlY3RBbGwgfHwgb3B0aW9ucy51bnNlbGVjdEFsbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XG4gICAgfVxuICAgIGlmIChzZWxlY3Rpb24ubm9kZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2VsZWN0aW9uLm5vZGVzKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbaWRdO1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTm9kZSB3aXRoIGlkIFwiJyArIGlkICsgJ1wiIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IHNlbGVjdCBlZGdlcyB3aXRoIGl0XG4gICAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KG5vZGUsIG9wdGlvbnMuaGlnaGxpZ2h0RWRnZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzZWxlY3Rpb24uZWRnZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2VsZWN0aW9uLmVkZ2VzKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbaWRdO1xuICAgICAgICBpZiAoIWVkZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRWRnZSB3aXRoIGlkIFwiJyArIGlkICsgJ1wiIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0T2JqZWN0KGVkZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gICAgdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuY29tbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogc2VsZWN0IHplcm8gb3IgbW9yZSBub2RlcyB3aXRoIHRoZSBvcHRpb24gdG8gaGlnaGxpZ2h0IGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gc2VsZWN0aW9uICAgICBBbiBhcnJheSB3aXRoIHRoZSBpZHMgb2YgdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBub2Rlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlnaGxpZ2h0RWRnZXNdXG4gICAqL1xuICBzZWxlY3ROb2RlcyhzZWxlY3Rpb24sIGhpZ2hsaWdodEVkZ2VzID0gdHJ1ZSkge1xuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5sZW5ndGggPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IFwiU2VsZWN0aW9uIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBpZHNcIjtcblxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHsgbm9kZXM6IHNlbGVjdGlvbiB9LCB7IGhpZ2hsaWdodEVkZ2VzOiBoaWdobGlnaHRFZGdlcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZWxlY3QgemVybyBvciBtb3JlIGVkZ2VzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW10gfCBzdHJpbmdbXX0gc2VsZWN0aW9uICAgICBBbiBhcnJheSB3aXRoIHRoZSBpZHMgb2YgdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBub2Rlcy5cbiAgICovXG4gIHNlbGVjdEVkZ2VzKHNlbGVjdGlvbikge1xuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5sZW5ndGggPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IFwiU2VsZWN0aW9uIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBpZHNcIjtcblxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHsgZWRnZXM6IHNlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgc2VsZWN0aW9uOiByZW1vdmUgaWRzIG9mIG5vZGVzIHdoaWNoIG5vIGxvbmdlciBleGlzdFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlU2VsZWN0aW9uKCkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBpbiB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5nZXROb2RlcygpKSB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGUuaWQpKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkFjY3VtdWxhdG9yLmRlbGV0ZU5vZGVzKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVkZ2UgaW4gdGhpcy5fc2VsZWN0aW9uQWNjdW11bGF0b3IuZ2V0RWRnZXMoKSkge1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlLmlkKSkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25BY2N1bXVsYXRvci5kZWxldGVFZGdlcyhlZGdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGFsbCB0aGUgdmlzdWFsIGVsZW1lbnRzIGNsaWNrZWQgd2hpY2ggYXJlIG9uIHRoZSBnaXZlbiBwb2ludC5cbiAgICpcbiAgICogQWxsIGVsZW1lbnRzIGFyZSByZXR1cm5lZDsgdGhpcyBpbmNsdWRlcyBub2RlcywgZWRnZXMgYW5kIHRoZWlyIGxhYmVscy5cbiAgICogVGhlIG9yZGVyIHJldHVybmVkIGlzIGZyb20gaGlnaGVzdCB0byBsb3dlc3QsIGkuZS4gZWxlbWVudCAwIG9mIHRoZSByZXR1cm5cbiAgICogdmFsdWUgaXMgdGhlIHRvcG1vc3QgaXRlbSBjbGlja2VkIG9uLlxuICAgKlxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIGNvbnNpc3RzIG9mIGFuIGFycmF5IG9mIHRoZSBmb2xsb3dpbmcgcG9zc2libGUgZWxlbWVudHM6XG4gICAqXG4gICAqIC0gYHtub2RlSWQ6bnVtYmVyfWAgICAgICAgICAgICAgLSBub2RlIHdpdGggZ2l2ZW4gaWQgY2xpY2tlZCBvblxuICAgKiAtIGB7bm9kZUlkOm51bWJlciwgbGFiZWxJZDowfWAgIC0gbGFiZWwgb2Ygbm9kZSB3aXRoIGdpdmVuIGlkIGNsaWNrZWQgb25cbiAgICogLSBge2VkZ2VJZDpudW1iZXJ9YCAgICAgICAgICAgICAtIGVkZ2Ugd2l0aCBnaXZlbiBpZCBjbGlja2VkIG9uXG4gICAqIC0gYHtlZGdlOm51bWJlciwgbGFiZWxJZDowfWAgICAgLSBsYWJlbCBvZiBlZGdlIHdpdGggZ2l2ZW4gaWQgY2xpY2tlZCBvblxuICAgKlxuICAgKiAjIyBOT1RFU1xuICAgKlxuICAgKiAtIEN1cnJlbnRseSwgdGhlcmUgaXMgb25seSBvbmUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIGEgbm9kZSBvciBhbiBlZGdlLFxuICAgKiAgIGJ1dCB0aGlzIGlzIGV4cGVjdGVkIHRvIGNoYW5nZSBzb21ld2hlcmUgaW4gdGhlIGZ1dHVyZS5cbiAgICogLSBTaW5jZSB0aGVyZSBpcyBubyB6LWluZGV4aW5nIHlldCwgaXQgaXMgbm90IHJlYWxseSBwb3NzaWJsZSB0byBzZXQgdGhlIG5vZGVzIGFuZFxuICAgKiAgIGVkZ2VzIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBGb3IgdGhlIHRpbWUgYmVpbmcsIG5vZGVzIGNvbWUgZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7cG9pbnR9IHBvaW50ZXIgIG1vdXNlIHBvc2l0aW9uIGluIHNjcmVlbiBjb29yZGluYXRlc1xuICAgKiBAcmV0dXJucyB7QXJyYXkuPG5vZGVDbGlja0l0ZW18bm9kZUxhYmVsQ2xpY2tJdGVtfGVkZ2VDbGlja0l0ZW18ZWRnZUxhYmVsQ2xpY2tJdGVtPn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldENsaWNrZWRJdGVtcyhwb2ludGVyKSB7XG4gICAgY29uc3QgcG9pbnQgPSB0aGlzLmNhbnZhcy5ET010b0NhbnZhcyhwb2ludGVyKTtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuXG4gICAgLy8gTm90ZSByZXZlcnNlIG9yZGVyOyB3ZSB3YW50IHRoZSB0b3Btb3N0IGNsaWNrZWQgaXRlbXMgdG8gYmUgZmlyc3QgaW4gdGhlIGFycmF5XG4gICAgLy8gQWxzbyBub3RlIHRoYXQgc2VsZWN0ZWQgbm9kZXMgYXJlIGRpc3JlZ2FyZGVkIGhlcmU7IHRoZXNlIG5vcm1hbGx5IGRpc3BsYXkgb24gdG9wXG4gICAgY29uc3Qgbm9kZUluZGljZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgZm9yIChsZXQgaSA9IG5vZGVJbmRpY2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZXNbbm9kZUluZGljZXNbaV1dO1xuICAgICAgY29uc3QgcmV0ID0gbm9kZS5nZXRJdGVtc09uUG9pbnQocG9pbnQpO1xuICAgICAgaXRlbXMucHVzaC5hcHBseShpdGVtcywgcmV0KTsgLy8gQXBwZW5kIHRoZSByZXR1cm4gdmFsdWUgdG8gdGhlIHJ1bm5pbmcgbGlzdC5cbiAgICB9XG5cbiAgICBjb25zdCBlZGdlSW5kaWNlcyA9IHRoaXMuYm9keS5lZGdlSW5kaWNlcztcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgICBmb3IgKGxldCBpID0gZWRnZUluZGljZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlSW5kaWNlc1tpXV07XG4gICAgICBjb25zdCByZXQgPSBlZGdlLmdldEl0ZW1zT25Qb2ludChwb2ludCk7XG4gICAgICBpdGVtcy5wdXNoLmFwcGx5KGl0ZW1zLCByZXQpOyAvLyBBcHBlbmQgdGhlIHJldHVybiB2YWx1ZSB0byB0aGUgcnVubmluZyBsaXN0LlxuICAgIH1cblxuICAgIHJldHVybiBpdGVtcztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Rpb25IYW5kbGVyO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgbWVyZ2VTb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICByZXR1cm4gbGVuZ3RoIDwgOCA/IGluc2VydGlvblNvcnQoYXJyYXksIGNvbXBhcmVmbikgOiBtZXJnZShcbiAgICBhcnJheSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBjb21wYXJlZm5cbiAgKTtcbn07XG5cbnZhciBpbnNlcnRpb25Tb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGkgPSAxO1xuICB2YXIgZWxlbWVudCwgajtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGogPSBpO1xuICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICB9XG4gICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIChhcnJheSwgbGVmdCwgcmlnaHQsIGNvbXBhcmVmbikge1xuICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgdmFyIGxpbmRleCA9IDA7XG4gIHZhciByaW5kZXggPSAwO1xuXG4gIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlU29ydDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBmaXJlZm94ID0gdXNlckFnZW50Lm1hdGNoKC9maXJlZm94XFwvKFxcZCspL2kpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhZmlyZWZveCAmJiArZmlyZWZveFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbicpO1xudmFyIElFX09SX0VER0UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24nKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdW5jdXJyeVRoaXModGVzdC5zb3J0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXModGVzdC5wdXNoKTtcblxuLy8gSUU4LVxudmFyIEZBSUxTX09OX1VOREVGSU5FRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KTtcbi8vIFY4IGJ1Z1xudmFyIEZBSUxTX09OX05VTEwgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydChudWxsKTtcbn0pO1xuLy8gT2xkIFdlYktpdFxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb3J0Jyk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDcwO1xuICBpZiAoRkYgJiYgRkYgPiAzKSByZXR1cm47XG4gIGlmIChJRV9PUl9FREdFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdFQktJVCkgcmV0dXJuIFdFQktJVCA8IDYwMztcblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBjb2RlLCBjaHIsIHZhbHVlLCBpbmRleDtcblxuICAvLyBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIG1vcmUgNTEyIGVsZW1lbnRzIChDaGFrcmEgYW5kIG9sZCBWOCBmYWlscyBvbmx5IGluIHRoaXMgY2FzZSlcbiAgZm9yIChjb2RlID0gNjU7IGNvZGUgPCA3NjsgY29kZSsrKSB7XG4gICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSA2NjogY2FzZSA2OTogY2FzZSA3MDogY2FzZSA3MjogdmFsdWUgPSAzOyBicmVhaztcbiAgICAgIGNhc2UgNjg6IGNhc2UgNzE6IHZhbHVlID0gNDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB2YWx1ZSA9IDI7XG4gICAgfVxuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDc7IGluZGV4KyspIHtcbiAgICAgIHRlc3QucHVzaCh7IGs6IGNociArIGluZGV4LCB2OiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudiAtIGEudjsgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGVzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSB0ZXN0W2luZGV4XS5rLmNoYXJBdCgwKTtcbiAgICBpZiAocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IGNocikgcmVzdWx0ICs9IGNocjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgIT09ICdER0JFRkhBQ0lKSyc7XG59KTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRCB8fCAhU1RBQkxFX1NPUlQ7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICByZXR1cm4gdG9TdHJpbmcoeCkgPiB0b1N0cmluZyh5KSA/IDEgOiAtMTtcbiAgfTtcbn07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb3J0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG5cbiAgICB2YXIgYXJyYXkgPSB0b09iamVjdCh0aGlzKTtcblxuICAgIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkID8gbmF0aXZlU29ydChhcnJheSkgOiBuYXRpdmVTb3J0KGFycmF5LCBjb21wYXJlZm4pO1xuXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICAgIHZhciBpdGVtc0xlbmd0aCwgaW5kZXg7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGluZGV4IGluIGFycmF5KSBwdXNoKGl0ZW1zLCBhcnJheVtpbmRleF0pO1xuICAgIH1cblxuICAgIGludGVybmFsU29ydChpdGVtcywgZ2V0U29ydENvbXBhcmUoY29tcGFyZWZuKSk7XG5cbiAgICBpdGVtc0xlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZW1zKTtcbiAgICBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBpdGVtc0xlbmd0aCkgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXgrK107XG4gICAgd2hpbGUgKGluZGV4IDwgYXJyYXlMZW5ndGgpIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhhcnJheSwgaW5kZXgrKyk7XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc29ydCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnNvcnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc29ydCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zb3J0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zb3J0KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3NvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgcmVkdWNlLCByZWR1Y2VSaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX1JJR0hUKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYXJndW1lbnRzTGVuZ3RoLCBtZW1vKSB7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDtJU19SSUdIVCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuICByaWdodDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG4vLyBDaHJvbWUgODAtODIgaGFzIGEgY3JpdGljYWwgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDQ5OTgyXG52YXIgQ0hST01FX0JVRyA9ICFJU19OT0RFICYmIENIUk9NRV9WRVJTSU9OID4gNzkgJiYgQ0hST01FX1ZFUlNJT04gPCA4MztcbnZhciBGT1JDRUQgPSBDSFJPTUVfQlVHIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgbGVuZ3RoLCBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZWR1Y2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmVkdWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJlZHVjZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmVkdWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIvKipcbiAqIEhlbHBlciBjbGFzc2VzIGZvciBMYXlvdXRFbmdpbmUuXG4gKlxuICogU3RyYXRlZ3kgcGF0dGVybiBmb3IgdXNhZ2Ugb2YgZGlyZWN0aW9uIG1ldGhvZHMgZm9yIGhpZXJhcmNoaWNhbCBsYXlvdXRzLlxuICovXG5cbi8qKlxuICogSW50ZXJmYWNlIGRlZmluaXRpb24gZm9yIGRpcmVjdGlvbiBzdHJhdGVneSBjbGFzc2VzLlxuICpcbiAqIFRoaXMgY2xhc3MgZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBTdHJhdGVneVxuICogcGF0dGVybiBjbGFzc2VzIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbFxuICogZGlyZWN0aW9uIG9mIGhpZXJhcmNoaWNhbCByZXN1bHRzLlxuICpcbiAqIEZvciBhIGdpdmVuIGRpcmVjdGlvbiwgb25lIGNvb3JkaW5hdGUgd2lsbCBiZSAnZml4ZWQnLCBtZWFuaW5nIHRoYXQgaXQgaXNcbiAqIGRldGVybWluZWQgYnkgbGV2ZWwuXG4gKiBUaGUgb3RoZXIgY29vcmRpbmF0ZSBpcyAndW5maXhlZCcsIG1lYW5pbmcgdGhhdCB0aGUgbm9kZXMgb24gYSBnaXZlbiBsZXZlbFxuICogY2FuIHN0aWxsIG1vdmUgYWxvbmcgdGhhdCBjb29yZGluYXRlLiBTbzpcbiAqXG4gKiAtIGB2ZXJ0aWNhbGAgbGF5b3V0OiBgeGAgdW5maXhlZCwgYHlgIGZpeGVkIHBlciBsZXZlbFxuICogLSBgaG9yaXpvbnRhbGAgbGF5b3V0OiBgeGAgZml4ZWQgcGVyIGxldmVsLCBgeWAgdW5maXhlZFxuICpcbiAqIFRoZSBsb2NhbCBtZXRob2RzIGFyZSBzdHVicyBhbmQgc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIGFic3RyYWN0LlxuICogRGVyaXZlZCBjbGFzc2VzICoqbXVzdCoqIGltcGxlbWVudCBhbGwgdGhlIG1ldGhvZHMgdGhlbXNlbHZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBEaXJlY3Rpb25JbnRlcmZhY2Uge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgYWJzdHJhY3QoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgaW5zdGFudGlhdGUgYWJzdHJhY3QgY2xhc3MhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBkdW1teSBjYWxsIHdoaWNoIGlzIHVzZWQgdG8gc3VwcHJlc3MgdGhlIGpzZG9jIGVycm9ycyBvZiB0eXBlOlxuICAgKlxuICAgKiAgIFwiJ3BhcmFtJyBpcyBhc3NpZ25lZCBhIHZhbHVlIGJ1dCBuZXZlciB1c2VkXCJcbiAgICpcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZmFrZV91c2UoKSB7XG4gICAgLy8gRG8gbm90aGluZyBzcGVjaWFsXG4gIH1cblxuICAvKipcbiAgICogVHlwZSB0byB1c2UgdG8gdHJhbnNsYXRlIGR5bmFtaWMgY3VydmVzIHRvLCBpbiB0aGUgY2FzZSBvZiBoaWVyYXJjaGljYWwgbGF5b3V0LlxuICAgKiBEeW5hbWljIGN1cnZlcyBkbyBub3Qgd29yayBmb3IgdGhlc2UuXG4gICAqXG4gICAqIFRoZSB2YWx1ZSBzaG91bGQgYmUgcGVycGVuZGljdWxhciB0byB0aGUgYWN0dWFsIGRpcmVjdGlvbiBvZiB0aGUgbGF5b3V0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBEaXJlY3Rpb24sIGVpdGhlciAndmVydGljYWwnIG9yICdob3Jpem9udGFsJ1xuICAgKi9cbiAgY3VydmVUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG5vdCBmaXhlZCBmb3IgdGhpcyBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZWFkXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIG9mIHRoZSB1bmZpeGVkIGNvb3JkaW5hdGVcbiAgICovXG4gIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGUpO1xuICAgIHJldHVybiB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29vcmRpbmF0ZSB0aGF0IGlzIG5vdCBmaXhlZCBmb3IgdGhpcyBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSBUaGUgbm9kZSB0byBhZGp1c3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbGV2ZWxdIGlmIHNwZWNpZmllZCwgdGhlIGhpZXJhcmNoeSBsZXZlbCB0aGF0IHRoaXMgbm9kZSBzaG91bGQgYmUgZml4ZWQgdG9cbiAgICovXG4gIHNldFBvc2l0aW9uKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCA9IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZmFrZV91c2Uobm9kZSwgcG9zaXRpb24sIGxldmVsKTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB3aWR0aCBvZiBhIHRyZWUuXG4gICAqXG4gICAqIEEgYHRyZWVgIGhlcmUgaXMgYSBzdWJzZXQgb2Ygbm9kZXMgd2l0aGluIHRoZSBuZXR3b3JrIHdoaWNoIGFyZSBub3QgY29ubmVjdGVkIHRvIG90aGVyIG5vZGVzLFxuICAgKiBvbmx5IGFtb25nIHRoZW1zZWx2ZXMuIEluIGVzc2VuY2UsIGl0IGlzIGEgc3ViLW5ldHdvcmsuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggbnVtYmVyIG9mIGEgdHJlZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgd2lkdGggb2YgYSB0cmVlIGluIHRoZSB2aWV3IGNvb3JkaW5hdGVzXG4gICAqL1xuICBnZXRUcmVlU2l6ZShpbmRleCkge1xuICAgIHRoaXMuZmFrZV91c2UoaW5kZXgpO1xuICAgIHJldHVybiB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCBhcnJheSBvZiBub2RlcyBvbiB0aGUgdW5maXhlZCBjb29yZGluYXRlcy5cbiAgICpcbiAgICogTm90ZToqKiBjaHJvbWUgaGFzIG5vbi1zdGFibGUgc29ydGluZyBpbXBsZW1lbnRhdGlvbiwgd2hpY2hcbiAgICogaGFzIGEgdGVuZGVuY3kgdG8gY2hhbmdlIHRoZSBvcmRlciBvZiB0aGUgYXJyYXkgaXRlbXMsXG4gICAqIGV2ZW4gaWYgdGhlIGN1c3RvbSBzb3J0IGZ1bmN0aW9uIHJldHVybnMgMC5cbiAgICpcbiAgICogRm9yIHRoaXMgcmVhc29uLCBhbiBleHRlcm5hbCBzb3J0IGltcGxlbWVudGF0aW9uIGlzIHVzZWQsXG4gICAqIHdoaWNoIGhhcyB0aGUgYWRkZWQgYmVuZWZpdCBvZiBiZWluZyBmYXN0ZXIgdGhhbiB0aGUgc3RhbmRhcmRcbiAgICogcGxhdGZvcm1zIGltcGxlbWVudGF0aW9uLiBUaGlzIGhhcyBiZWVuIHZlcmlmaWVkIG9uIGBub2RlLmpzYCxcbiAgICogYGZpcmVmb3hgIGFuZCBgY2hyb21lYCAoYWxsIGxpbnV4KS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVBcnJheSBhcnJheSBvZiBub2RlcyB0byBzb3J0XG4gICAqL1xuICBzb3J0KG5vZGVBcnJheSkge1xuICAgIHRoaXMuZmFrZV91c2Uobm9kZUFycmF5KTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIHRoZSBmaXhlZCBjb29yZGluYXRlIG9mIHRoZSBub2RlIHRvIHRoZSBnaXZlbiBsZXZlbFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgVGhlIG5vZGUgdG8gYWRqdXN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbCBUaGUgbGV2ZWwgdG8gZml4IHRvXG4gICAqL1xuICBmaXgobm9kZSwgbGV2ZWwpIHtcbiAgICB0aGlzLmZha2VfdXNlKG5vZGUsIGxldmVsKTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIG9mZnNldCB0byB0aGUgdW5maXhlZCBjb29yZGluYXRlIG9mIHRoZSBnaXZlbiBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGVJZH0gbm9kZUlkIElkIG9mIHRoZSBub2RlIHRvIGFkanVzdFxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlmZiBPZmZzZXQgdG8gYWRkIHRvIHRoZSB1bmZpeGVkIGNvb3JkaW5hdGVcbiAgICovXG4gIHNoaWZ0KG5vZGVJZCwgZGlmZikge1xuICAgIHRoaXMuZmFrZV91c2Uobm9kZUlkLCBkaWZmKTtcbiAgICB0aGlzLmFic3RyYWN0KCk7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJ0aWNhbCBTdHJhdGVneVxuICpcbiAqIENvb3JkaW5hdGUgYHlgIGlzIGZpeGVkIG9uIGxldmVscywgY29vcmRpbmF0ZSBgeGAgaXMgdW5maXhlZC5cbiAqXG4gKiBAYXVnbWVudHMgRGlyZWN0aW9uSW50ZXJmYWNlXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBWZXJ0aWNhbFN0cmF0ZWd5IGV4dGVuZHMgRGlyZWN0aW9uSW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBsYXlvdXQgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgTGF5b3V0RW5naW5lIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IobGF5b3V0KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBjdXJ2ZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaG9yaXpvbnRhbFwiO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS54O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNldFBvc2l0aW9uKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChsZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxheW91dC5oaWVyYXJjaGljYWwuYWRkVG9PcmRlcmluZyhub2RlLCBsZXZlbCk7XG4gICAgfVxuICAgIG5vZGUueCA9IHBvc2l0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFRyZWVTaXplKGluZGV4KSB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5sYXlvdXQuaGllcmFyY2hpY2FsLmdldFRyZWVTaXplKFxuICAgICAgdGhpcy5sYXlvdXQuYm9keS5ub2RlcyxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgICByZXR1cm4geyBtaW46IHJlcy5taW5feCwgbWF4OiByZXMubWF4X3ggfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzb3J0KG5vZGVBcnJheSkge1xuICAgIG5vZGVBcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS54IC0gYi54O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGZpeChub2RlLCBsZXZlbCkge1xuICAgIG5vZGUueSA9IHRoaXMubGF5b3V0Lm9wdGlvbnMuaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiAqIGxldmVsO1xuICAgIG5vZGUub3B0aW9ucy5maXhlZC55ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzaGlmdChub2RlSWQsIGRpZmYpIHtcbiAgICB0aGlzLmxheW91dC5ib2R5Lm5vZGVzW25vZGVJZF0ueCArPSBkaWZmO1xuICB9XG59XG5cbi8qKlxuICogSG9yaXpvbnRhbCBTdHJhdGVneVxuICpcbiAqIENvb3JkaW5hdGUgYHhgIGlzIGZpeGVkIG9uIGxldmVscywgY29vcmRpbmF0ZSBgeWAgaXMgdW5maXhlZC5cbiAqXG4gKiBAYXVnbWVudHMgRGlyZWN0aW9uSW50ZXJmYWNlXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBIb3Jpem9udGFsU3RyYXRlZ3kgZXh0ZW5kcyBEaXJlY3Rpb25JbnRlcmZhY2Uge1xuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGxheW91dCByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBMYXlvdXRFbmdpbmUgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihsYXlvdXQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGN1cnZlVHlwZSgpIHtcbiAgICByZXR1cm4gXCJ2ZXJ0aWNhbFwiO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFBvc2l0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS55O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNldFBvc2l0aW9uKG5vZGUsIHBvc2l0aW9uLCBsZXZlbCA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChsZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxheW91dC5oaWVyYXJjaGljYWwuYWRkVG9PcmRlcmluZyhub2RlLCBsZXZlbCk7XG4gICAgfVxuICAgIG5vZGUueSA9IHBvc2l0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFRyZWVTaXplKGluZGV4KSB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5sYXlvdXQuaGllcmFyY2hpY2FsLmdldFRyZWVTaXplKFxuICAgICAgdGhpcy5sYXlvdXQuYm9keS5ub2RlcyxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgICByZXR1cm4geyBtaW46IHJlcy5taW5feSwgbWF4OiByZXMubWF4X3kgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzb3J0KG5vZGVBcnJheSkge1xuICAgIG5vZGVBcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYS55IC0gYi55O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGZpeChub2RlLCBsZXZlbCkge1xuICAgIG5vZGUueCA9IHRoaXMubGF5b3V0Lm9wdGlvbnMuaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiAqIGxldmVsO1xuICAgIG5vZGUub3B0aW9ucy5maXhlZC54ID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzaGlmdChub2RlSWQsIGRpZmYpIHtcbiAgICB0aGlzLmxheW91dC5ib2R5Lm5vZGVzW25vZGVJZF0ueSArPSBkaWZmO1xuICB9XG59XG5cbmV4cG9ydCB7IEhvcml6b250YWxTdHJhdGVneSwgVmVydGljYWxTdHJhdGVneSB9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5ldmVyeTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdldmVyeScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZXZlcnkodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmV2ZXJ5Jyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZXZlcnk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZXZlcnknKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZXZlcnk7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmV2ZXJ5KSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2V2ZXJ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgInR5cGUgTGV2ZWxzID0gUmVjb3JkPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPjtcbnR5cGUgSWQgPSBzdHJpbmcgfCBudW1iZXI7XG5pbnRlcmZhY2UgRWRnZSB7XG4gIGNvbm5lY3RlZDogYm9vbGVhbjtcbiAgZnJvbTogTm9kZTtcbiAgZnJvbUlkOiBJZDtcbiAgdG86IE5vZGU7XG4gIHRvSWQ6IElkO1xufVxuaW50ZXJmYWNlIE5vZGUge1xuICBpZDogSWQ7XG4gIGVkZ2VzOiBFZGdlW107XG59XG5cbi8qKlxuICogVHJ5IHRvIGFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgY3ljbGljIOKAnGhpZXJhcmNoeeKAnS5cbiAqXG4gKiBAcGFyYW0gbm9kZXMgLSBWaXNpYmxlIG5vZGVzIG9mIHRoZSBncmFwaC5cbiAqIEBwYXJhbSBsZXZlbHMgLSBJZiBwcmVzZW50IGxldmVscyB3aWxsIGJlIGFkZGVkIHRvIGl0LCBpZiBub3QgYSBuZXcgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZC5cbiAqIEByZXR1cm5zIFBvcHVsYXRlZCBub2RlIGxldmVscy5cbiAqL1xuZnVuY3Rpb24gZmlsbExldmVsc0J5RGlyZWN0aW9uQ3ljbGljKFxuICBub2RlczogTWFwPElkLCBOb2RlPixcbiAgbGV2ZWxzOiBMZXZlbHNcbik6IExldmVscyB7XG4gIGNvbnN0IGVkZ2VzID0gbmV3IFNldDxFZGdlPigpO1xuICBub2Rlcy5mb3JFYWNoKChub2RlKTogdm9pZCA9PiB7XG4gICAgbm9kZS5lZGdlcy5mb3JFYWNoKChlZGdlKTogdm9pZCA9PiB7XG4gICAgICBpZiAoZWRnZS5jb25uZWN0ZWQpIHtcbiAgICAgICAgZWRnZXMuYWRkKGVkZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBlZGdlcy5mb3JFYWNoKChlZGdlKTogdm9pZCA9PiB7XG4gICAgY29uc3QgZnJvbUlkID0gZWRnZS5mcm9tLmlkO1xuICAgIGNvbnN0IHRvSWQgPSBlZGdlLnRvLmlkO1xuXG4gICAgaWYgKGxldmVsc1tmcm9tSWRdID09IG51bGwpIHtcbiAgICAgIGxldmVsc1tmcm9tSWRdID0gMDtcbiAgICB9XG5cbiAgICBpZiAobGV2ZWxzW3RvSWRdID09IG51bGwgfHwgbGV2ZWxzW2Zyb21JZF0gPj0gbGV2ZWxzW3RvSWRdKSB7XG4gICAgICBsZXZlbHNbdG9JZF0gPSBsZXZlbHNbZnJvbUlkXSArIDE7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbGV2ZWxzO1xufVxuXG4vKipcbiAqIEFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgaGllcmFyY2h5LiBMZWF2ZXMgd2lsbCBiZSBsaW5lZCB1cCBhdCB0aGUgYm90dG9tIGFuZCBhbGwgb3RoZXIgbm9kZXMgYXMgY2xvc2UgdG8gdGhlaXIgY2hpbGRyZW4gYXMgcG9zc2libGUuXG4gKlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25MZWF2ZXMobm9kZXM6IE1hcDxJZCwgTm9kZT4pOiBMZXZlbHMge1xuICByZXR1cm4gZmlsbExldmVsc0J5RGlyZWN0aW9uKFxuICAgIC8vIFBpY2sgb25seSBsZWF2ZXMgKG5vZGVzIHdpdGhvdXQgY2hpbGRyZW4pLlxuICAgIChub2RlKTogYm9vbGVhbiA9PlxuICAgICAgbm9kZS5lZGdlc1xuICAgICAgICAvLyBUYWtlIG9ubHkgdmlzaWJsZSBub2RlcyBpbnRvIGFjY291bnQuXG4gICAgICAgIC5maWx0ZXIoKGVkZ2UpOiBib29sZWFuID0+IG5vZGVzLmhhcyhlZGdlLnRvSWQpKVxuICAgICAgICAvLyBDaGVjayB0aGF0IGFsbCBlZGdlcyBsZWFkIHRvIHRoaXMgbm9kZSAobGVhZikuXG4gICAgICAgIC5ldmVyeSgoZWRnZSk6IGJvb2xlYW4gPT4gZWRnZS50byA9PT0gbm9kZSksXG4gICAgLy8gVXNlIHRoZSBsb3dlc3QgbGV2ZWwuXG4gICAgKG5ld0xldmVsLCBvbGRMZXZlbCk6IGJvb2xlYW4gPT4gb2xkTGV2ZWwgPiBuZXdMZXZlbCxcbiAgICAvLyBHbyBhZ2FpbnN0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVkZ2VzLlxuICAgIFwiZnJvbVwiLFxuICAgIG5vZGVzXG4gICk7XG59XG5cbi8qKlxuICogQXNzaWduIGxldmVscyB0byBub2RlcyBhY2NvcmRpbmcgdG8gdGhlaXIgcG9zaXRpb25zIGluIHRoZSBoaWVyYXJjaHkuIFJvb3RzIHdpbGwgYmUgbGluZWQgdXAgYXQgdGhlIHRvcCBhbmQgYWxsIG5vZGVzIGFzIGNsb3NlIHRvIHRoZWlyIHBhcmVudHMgYXMgcG9zc2libGUuXG4gKlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25Sb290cyhub2RlczogTWFwPElkLCBOb2RlPik6IExldmVscyB7XG4gIHJldHVybiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb24oXG4gICAgLy8gUGljayBvbmx5IHJvb3RzIChub2RlcyB3aXRob3V0IHBhcmVudHMpLlxuICAgIChub2RlKTogYm9vbGVhbiA9PlxuICAgICAgbm9kZS5lZGdlc1xuICAgICAgICAvLyBUYWtlIG9ubHkgdmlzaWJsZSBub2RlcyBpbnRvIGFjY291bnQuXG4gICAgICAgIC5maWx0ZXIoKGVkZ2UpOiBib29sZWFuID0+IG5vZGVzLmhhcyhlZGdlLnRvSWQpKVxuICAgICAgICAvLyBDaGVjayB0aGF0IGFsbCBlZGdlcyBsZWFkIGZyb20gdGhpcyBub2RlIChyb290KS5cbiAgICAgICAgLmV2ZXJ5KChlZGdlKTogYm9vbGVhbiA9PiBlZGdlLmZyb20gPT09IG5vZGUpLFxuICAgIC8vIFVzZSB0aGUgaGlnaGVzdCBsZXZlbC5cbiAgICAobmV3TGV2ZWwsIG9sZExldmVsKTogYm9vbGVhbiA9PiBvbGRMZXZlbCA8IG5ld0xldmVsLFxuICAgIC8vIEdvIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGVkZ2VzLlxuICAgIFwidG9cIixcbiAgICBub2Rlc1xuICApO1xufVxuXG4vKipcbiAqIEFzc2lnbiBsZXZlbHMgdG8gbm9kZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHBvc2l0aW9ucyBpbiB0aGUgaGllcmFyY2h5LlxuICpcbiAqIEBwYXJhbSBpc0VudHJ5Tm9kZSAtIENoZWNrcyBhbmQgcmV0dXJuIHRydWUgaWYgdGhlIGdyYXBoIHNob3VsZCBiZSB0cmF2ZXJzZWQgZnJvbSB0aGlzIG5vZGUuXG4gKiBAcGFyYW0gc2hvdWxkTGV2ZWxCZVJlcGxhY2VkIC0gQ2hlY2tzIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIGxldmVsIG9mIGdpdmVuIG5vZGUgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdGhlIG5ldyB2YWx1ZS5cbiAqIEBwYXJhbSBkaXJlY3Rpb24gLSBXaGV0ZXIgdGhlIGdyYXBoIHNob3VsZCBiZSB0cmF2ZXJzZWQgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZWRnZXMgYFwidG9cImAgb3IgaW4gdGhlIG90aGVyIHdheSBgXCJmcm9tXCJgLlxuICogQHBhcmFtIG5vZGVzIC0gVmlzaWJsZSBub2RlcyBvZiB0aGUgZ3JhcGguXG4gKiBAcmV0dXJucyBQb3B1bGF0ZWQgbm9kZSBsZXZlbHMuXG4gKi9cbmZ1bmN0aW9uIGZpbGxMZXZlbHNCeURpcmVjdGlvbihcbiAgaXNFbnRyeU5vZGU6IChub2RlOiBOb2RlKSA9PiBib29sZWFuLFxuICBzaG91bGRMZXZlbEJlUmVwbGFjZWQ6IChuZXdMZXZlbDogbnVtYmVyLCBvbGRMZXZlbDogbnVtYmVyKSA9PiBib29sZWFuLFxuICBkaXJlY3Rpb246IFwidG9cIiB8IFwiZnJvbVwiLFxuICBub2RlczogTWFwPElkLCBOb2RlPlxuKTogTGV2ZWxzIHtcbiAgY29uc3QgbGV2ZWxzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvLyBJZiBhY3ljbGljLCB0aGUgZ3JhcGggY2FuIGJlIHdhbGtlZCB0aHJvdWdoIHdpdGggKG1vc3QgbGlrZWx5IHdheSkgZmV3ZXJcbiAgLy8gc3RlcHMgdGhhbiB0aGUgbnVtYmVyIGJlbGxvdy4gVGhlIGV4YWN0IHZhbHVlIGlzbid0IHRvbyBpbXBvcnRhbnQgYXMgbG9uZ1xuICAvLyBhcyBpdCdzIHF1aWNrIHRvIGNvbXB1dGUgKGRvZXNuJ3QgaW1wYWN0IGFjeWNsaWMgZ3JhcGhzIHRvbyBtdWNoKSwgaXNcbiAgLy8gaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZiBzdGVwcyBhY3R1YWxseSBuZWVkZWQgKGRvZXNuJ3QgY3V0IG9mZiBiZWZvcmVcbiAgLy8gYWN5Y2xpYyBncmFwaCBpcyB3YWxrZWQgdGhyb3VnaCkgYW5kIHByZXZlbnRzIGluZmluaXRlIGxvb3BzIChjdXRzIG9mZiBmb3JcbiAgLy8gY3ljbGljIGdyYXBocykuXG4gIGNvbnN0IGxpbWl0ID0gWy4uLm5vZGVzLnZhbHVlcygpXS5yZWR1Y2U8bnVtYmVyPihcbiAgICAoYWNjLCBub2RlKTogbnVtYmVyID0+IGFjYyArIDEgKyBub2RlLmVkZ2VzLmxlbmd0aCxcbiAgICAwXG4gICk7XG5cbiAgY29uc3QgZWRnZUlkUHJvcDogXCJmcm9tSWRcIiB8IFwidG9JZFwiID0gKGRpcmVjdGlvbiArIFwiSWRcIikgYXMgXCJmcm9tSWRcIiB8IFwidG9JZFwiO1xuICBjb25zdCBuZXdMZXZlbERpZmYgPSBkaXJlY3Rpb24gPT09IFwidG9cIiA/IDEgOiAtMTtcblxuICBmb3IgKGNvbnN0IFtlbnRyeU5vZGVJZCwgZW50cnlOb2RlXSBvZiBub2Rlcykge1xuICAgIGlmIChcbiAgICAgIC8vIFNraXAgaWYgdGhlIG5vZGUgaXMgbm90IHZpc2libGUuXG4gICAgICAhbm9kZXMuaGFzKGVudHJ5Tm9kZUlkKSB8fFxuICAgICAgLy8gU2tpcCBpZiB0aGUgbm9kZSBpcyBub3QgYW4gZW50cnkgbm9kZS5cbiAgICAgICFpc0VudHJ5Tm9kZShlbnRyeU5vZGUpXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBMaW5lIHVwIGFsbCB0aGUgZW50cnkgbm9kZXMgb24gbGV2ZWwgMC5cbiAgICBsZXZlbHNbZW50cnlOb2RlSWRdID0gMDtcblxuICAgIGNvbnN0IHN0YWNrOiBOb2RlW10gPSBbZW50cnlOb2RlXTtcbiAgICBsZXQgZG9uZSA9IDA7XG4gICAgbGV0IG5vZGU6IE5vZGUgfCB1bmRlZmluZWQ7XG4gICAgd2hpbGUgKChub2RlID0gc3RhY2sucG9wKCkpKSB7XG4gICAgICBpZiAoIW5vZGVzLmhhcyhlbnRyeU5vZGVJZCkpIHtcbiAgICAgICAgLy8gU2tpcCBpZiB0aGUgbm9kZSBpcyBub3QgdmlzaWJsZS5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0xldmVsID0gbGV2ZWxzW25vZGUuaWRdICsgbmV3TGV2ZWxEaWZmO1xuXG4gICAgICBub2RlLmVkZ2VzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGVkZ2UpOiBib29sZWFuID0+XG4gICAgICAgICAgICAvLyBJZ25vcmUgZGlzY29ubmVjdGVkIGVkZ2VzLlxuICAgICAgICAgICAgZWRnZS5jb25uZWN0ZWQgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBjaXJjdWxhciBlZGdlcy5cbiAgICAgICAgICAgIGVkZ2UudG8gIT09IGVkZ2UuZnJvbSAmJlxuICAgICAgICAgICAgLy8gSWdub3JlIGVkZ2VzIGxlYWRpbmcgdG8gdGhlIG5vZGUgdGhhdCdzIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQuXG4gICAgICAgICAgICBlZGdlW2RpcmVjdGlvbl0gIT09IG5vZGUgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBlZGdlcyBjb25uZWN0aW5nIHRvIGFuIGludmlzaWJsZSBub2RlLlxuICAgICAgICAgICAgbm9kZXMuaGFzKGVkZ2UudG9JZCkgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBlZGdlcyBjb25uZWN0aW5nIGZyb20gYW4gaW52aXNpYmxlIG5vZGUuXG4gICAgICAgICAgICBub2Rlcy5oYXMoZWRnZS5mcm9tSWQpXG4gICAgICAgIClcbiAgICAgICAgLmZvckVhY2goKGVkZ2UpOiB2b2lkID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXROb2RlSWQgPSBlZGdlW2VkZ2VJZFByb3BdO1xuICAgICAgICAgIGNvbnN0IG9sZExldmVsID0gbGV2ZWxzW3RhcmdldE5vZGVJZF07XG5cbiAgICAgICAgICBpZiAob2xkTGV2ZWwgPT0gbnVsbCB8fCBzaG91bGRMZXZlbEJlUmVwbGFjZWQobmV3TGV2ZWwsIG9sZExldmVsKSkge1xuICAgICAgICAgICAgbGV2ZWxzW3RhcmdldE5vZGVJZF0gPSBuZXdMZXZlbDtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goZWRnZVtkaXJlY3Rpb25dKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAoZG9uZSA+IGxpbWl0KSB7XG4gICAgICAgIC8vIFRoaXMgd291bGQgcnVuIGZvcmV2ZXIgb24gYSBjeWNsaWMgZ3JhcGguXG4gICAgICAgIHJldHVybiBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25DeWNsaWMobm9kZXMsIGxldmVscyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICArK2RvbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxldmVscztcbn1cbiIsICIvKipcbiAqIFRoZXJlJ3MgYSBtaXgtdXAgd2l0aCB0ZXJtcyBpbiB0aGUgY29kZS4gRm9sbG93aW5nIGFyZSB0aGUgZm9ybWFsIGRlZmluaXRpb25zOlxuICpcbiAqICAgdHJlZSAgIC0gYSBzdHJpY3QgaGllcmFyY2hpY2FsIG5ldHdvcmssIGkuZS4gZXZlcnkgbm9kZSBoYXMgYXQgbW9zdCBvbmUgcGFyZW50XG4gKiAgIGZvcmVzdCAtIGEgY29sbGVjdGlvbiBvZiB0cmVlcy4gVGhlc2UgZGlzdGluY3QgdHJlZXMgYXJlIHRodXMgbm90IGNvbm5lY3RlZC5cbiAqXG4gKiBTbzpcbiAqIC0gaW4gYSBuZXR3b3JrIHRoYXQgaXMgbm90IGEgdHJlZSwgdGhlcmUgZXhpc3Qgbm9kZXMgd2l0aCBtdWx0aXBsZSBwYXJlbnRzLlxuICogLSBhIG5ldHdvcmsgY29uc2lzdGluZyBvZiB1bmNvbm5lY3RlZCBzdWItbmV0d29ya3MsIG9mIHdoaWNoIGF0IGxlYXN0IG9uZVxuICogICBpcyBub3QgYSB0cmVlLCBpcyBub3QgYSBmb3Jlc3QuXG4gKlxuICogSW4gdGhlIGNvZGUsIHRoZSBkZWZpbml0aW9ucyBhcmU6XG4gKlxuICogICB0cmVlICAgLSBhbnkgZGlzY29ubmVjdGVkIHN1Yi1uZXR3b3JrLCBzdHJpY3QgaGllcmFyY2hpY2FsIG9yIG5vdC5cbiAqICAgZm9yZXN0IC0gYSBidW5jaCBvZiB0aGVzZSBzdWItbmV0d29ya3NcbiAqXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRyZWUgYW5kIG5vdC10cmVlIGlzIGltcG9ydGFudCBpbiB0aGUgY29kZSwgbm90YWJseSB3aXRoaW5cbiAqIHRvIHRoZSBibG9jay1zaGlmdGluZyBhbGdvcml0aG0uIFRoZSBhbGdvcml0aG0gYXNzdW1lcyBmb3JtYWwgdHJlZXMgYW5kIGZhaWxzXG4gKiBmb3Igbm90LXRyZWVzLCBvZnRlbiBpbiBhIHNwZWN0YWN1bGFyIG1hbm5lciAoc2VhcmNoIGZvciAnZXhwbG9kaW5nIG5ldHdvcmsnIGluIHRoZSBpc3N1ZXMpLlxuICpcbiAqIEluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoIHRoZSBkZWZpbml0aW9ucyBpbiB0aGUgZm9sbG93aW5nIGNvZGUsIHRoZSBhZGplY3RpdmUgJ2Zvcm1hbCcgaXNcbiAqIHVzZWQuIElmICdmb3JtYWwnIGlzIGFic2VudCwgeW91IG11c3QgYXNzdW1lIHRoZSBub24tZm9ybWFsIGRlZmluaXRpb24uXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogTk9URVNcbiAqID09PT09XG4gKlxuICogQSBoaWVyYXJjaGljYWwgbGF5b3V0IGlzIGEgZGlmZmVyZW50IHRoaW5nIGZyb20gYSBoaWVyYXJjaGljYWwgbmV0d29yay5cbiAqIFRoZSBsYXlvdXQgaXMgYSB3YXkgdG8gYXJyYW5nZSB0aGUgbm9kZXMgaW4gdGhlIHZpZXc7IHRoaXMgY2FuIGJlIGRvbmVcbiAqIG9uIG5vbi1oaWVyYXJjaGljYWwgbmV0d29ya3MgYXMgd2VsbC4gVGhlIGNvbnZlcnNlIGlzIGFsc28gcG9zc2libGUuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuaW1wb3J0IHtcbiAgQWxlYSxcbiAgZGVlcEV4dGVuZCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2VPcHRpb25zLFxuICBzZWxlY3RpdmVEZWVwRXh0ZW5kLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgTmV0d29ya1V0aWwgZnJvbSBcIi4uL05ldHdvcmtVdGlsXCI7XG5pbXBvcnQge1xuICBIb3Jpem9udGFsU3RyYXRlZ3ksXG4gIFZlcnRpY2FsU3RyYXRlZ3ksXG59IGZyb20gXCIuL2NvbXBvbmVudHMvRGlyZWN0aW9uU3RyYXRlZ3kuanNcIjtcbmltcG9ydCB7XG4gIGZpbGxMZXZlbHNCeURpcmVjdGlvbkxlYXZlcyxcbiAgZmlsbExldmVsc0J5RGlyZWN0aW9uUm9vdHMsXG59IGZyb20gXCIuL2xheW91dC1lbmdpbmVcIjtcblxuLyoqXG4gKiBDb250YWluZXIgZm9yIGRlcml2ZWQgZGF0YSBvbiBjdXJyZW50IG5ldHdvcmssIHJlbGF0aW5nIHRvIGhpZXJhcmNoeS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBIaWVyYXJjaGljYWxTdGF0dXMge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jaGlsZHJlblJlZmVyZW5jZSA9IHt9OyAvLyBjaGlsZCBpZCdzIHBlciBub2RlIGlkXG4gICAgdGhpcy5wYXJlbnRSZWZlcmVuY2UgPSB7fTsgLy8gcGFyZW50IGlkJ3MgcGVyIG5vZGUgaWRcbiAgICB0aGlzLnRyZWVzID0ge307IC8vIHRyZWUgaWQgcGVyIG5vZGUgaWQ7IGkuZS4gdG8gd2hpY2ggdHJlZSBkb2VzIGdpdmVuIG5vZGUgaWQgYmVsb25nXG5cbiAgICB0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nID0ge307IC8vIFRoZSBub2RlcyBwZXIgbGV2ZWwsIGluIHRoZSBkaXNwbGF5IG9yZGVyXG4gICAgdGhpcy5sZXZlbHMgPSB7fTsgLy8gaGllcmFyY2h5IGxldmVsIHBlciBub2RlIGlkXG4gICAgdGhpcy5kaXN0cmlidXRpb25JbmRleCA9IHt9OyAvLyBUaGUgcG9zaXRpb24gb2YgdGhlIG5vZGUgaW4gdGhlIGxldmVsIHNvcnRpbmcgb3JkZXIsIHBlciBub2RlIGlkLlxuXG4gICAgdGhpcy5pc1RyZWUgPSBmYWxzZTsgLy8gVHJ1ZSBpZiBjdXJyZW50IG5ldHdvcmsgaXMgYSBmb3JtYWwgdHJlZVxuICAgIHRoaXMudHJlZUluZGV4ID0gLTE7IC8vIEhpZ2hlc3QgdHJlZSBpZCBpbiBjdXJyZW50IG5ldHdvcmsuXG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGdpdmVuIG5vZGVzIHRvIHRoZSBjdXJyZW50IHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHBhcmVudE5vZGVJZFxuICAgKiBAcGFyYW0ge05vZGUuaWR9IGNoaWxkTm9kZUlkXG4gICAqL1xuICBhZGRSZWxhdGlvbihwYXJlbnROb2RlSWQsIGNoaWxkTm9kZUlkKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW5SZWZlcmVuY2VbcGFyZW50Tm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW3BhcmVudE5vZGVJZF0gPSBbXTtcbiAgICB9XG4gICAgdGhpcy5jaGlsZHJlblJlZmVyZW5jZVtwYXJlbnROb2RlSWRdLnB1c2goY2hpbGROb2RlSWQpO1xuXG4gICAgaWYgKHRoaXMucGFyZW50UmVmZXJlbmNlW2NoaWxkTm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBhcmVudFJlZmVyZW5jZVtjaGlsZE5vZGVJZF0gPSBbXTtcbiAgICB9XG4gICAgdGhpcy5wYXJlbnRSZWZlcmVuY2VbY2hpbGROb2RlSWRdLnB1c2gocGFyZW50Tm9kZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBmb3IgYSBmb3JtYWwgdHJlZSBvciBmb3JtYWwgZm9yZXN0LlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBjYXNlIGlmIGV2ZXJ5IG5vZGUgaGFzIGF0IG1vc3Qgb25lIHBhcmVudC5cbiAgICpcbiAgICogUHJlOiBwYXJlbnRSZWZlcmVuY2UgaW5pdCdlZCBwcm9wZXJseSBmb3IgY3VycmVudCBuZXR3b3JrXG4gICAqL1xuICBjaGVja0lmVHJlZSgpIHtcbiAgICBmb3IgKGNvbnN0IGkgaW4gdGhpcy5wYXJlbnRSZWZlcmVuY2UpIHtcbiAgICAgIGlmICh0aGlzLnBhcmVudFJlZmVyZW5jZVtpXS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMuaXNUcmVlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmlzVHJlZSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VwYXJhdGUgdHJlZXMgaW4gdGhlIGN1cnJlbnQgbmV0d29yay5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIG51bVRyZWVzKCkge1xuICAgIHJldHVybiB0aGlzLnRyZWVJbmRleCArIDE7IC8vIFRoaXMgYXNzdW1lcyB0aGUgaW5kZXhlcyBhcmUgYXNzaWduZWQgY29uc2VjaXRpdmVseVxuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBhIHRyZWUgaWQgdG8gYSBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHRyZWVJZFxuICAgKi9cbiAgc2V0VHJlZUluZGV4KG5vZGUsIHRyZWVJZCkge1xuICAgIGlmICh0cmVlSWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuOyAvLyBEb24ndCBib3RoZXJcblxuICAgIGlmICh0aGlzLnRyZWVzW25vZGUuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudHJlZXNbbm9kZS5pZF0gPSB0cmVlSWQ7XG4gICAgICB0aGlzLnRyZWVJbmRleCA9IE1hdGgubWF4KHRyZWVJZCwgdGhpcy50cmVlSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgbGV2ZWwgZm9yIGdpdmVuIGlkIGlzIGRlZmluZWQuXG4gICAqXG4gICAqIFNldHMgbGV2ZWwgdG8gemVybyBmb3IgZ2l2ZW4gbm9kZSBpZCBpZiBub3QgYWxyZWFkeSBwcmVzZW50XG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gbm9kZUlkXG4gICAqL1xuICBlbnN1cmVMZXZlbChub2RlSWQpIHtcbiAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxldmVsc1tub2RlSWRdID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBtYXhpbXVtIGxldmVsIG9mIGEgYnJhbmNoLlxuICAgKlxuICAgKiBUT0RPOiBOZXZlciBlbnRlcmVkOyBmaW5kIGEgdGVzdCBjYXNlIHRvIHRlc3QgdGhpcyFcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBub2RlSWRcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldE1heExldmVsKG5vZGVJZCkge1xuICAgIGNvbnN0IGFjY3VtdWxhdG9yID0ge307XG5cbiAgICBjb25zdCBfZ2V0TWF4TGV2ZWwgPSAobm9kZUlkKSA9PiB7XG4gICAgICBpZiAoYWNjdW11bGF0b3Jbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcltub2RlSWRdO1xuICAgICAgfVxuICAgICAgbGV0IGxldmVsID0gdGhpcy5sZXZlbHNbbm9kZUlkXTtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW25vZGVJZF0pIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuUmVmZXJlbmNlW25vZGVJZF07XG4gICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV2ZWwgPSBNYXRoLm1heChsZXZlbCwgX2dldE1heExldmVsKGNoaWxkcmVuW2ldKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhY2N1bXVsYXRvcltub2RlSWRdID0gbGV2ZWw7XG4gICAgICByZXR1cm4gbGV2ZWw7XG4gICAgfTtcblxuICAgIHJldHVybiBfZ2V0TWF4TGV2ZWwobm9kZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVBXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZUJcbiAgICovXG4gIGxldmVsRG93bnN0cmVhbShub2RlQSwgbm9kZUIpIHtcbiAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUIuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHNldCBpbml0aWFsIGxldmVsXG4gICAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUEuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5sZXZlbHNbbm9kZUEuaWRdID0gMDtcbiAgICAgIH1cbiAgICAgIC8vIHNldCBsZXZlbFxuICAgICAgdGhpcy5sZXZlbHNbbm9kZUIuaWRdID0gdGhpcy5sZXZlbHNbbm9kZUEuaWRdICsgMTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU21hbGwgdXRpbCBtZXRob2QgdG8gc2V0IHRoZSBtaW5pbXVtIGxldmVscyBvZiB0aGUgbm9kZXMgdG8gemVyby5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzXG4gICAqL1xuICBzZXRNaW5MZXZlbFRvWmVybyhub2Rlcykge1xuICAgIGxldCBtaW5MZXZlbCA9IDFlOTtcbiAgICAvLyBnZXQgdGhlIG1pbmltdW0gbGV2ZWxcbiAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiBub2Rlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBpZiAodGhpcy5sZXZlbHNbbm9kZUlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbWluTGV2ZWwgPSBNYXRoLm1pbih0aGlzLmxldmVsc1tub2RlSWRdLCBtaW5MZXZlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzdWJ0cmFjdCB0aGUgbWluaW11bSBmcm9tIHRoZSBzZXQgc28gd2UgaGF2ZSBhIHJhbmdlIHN0YXJ0aW5nIGZyb20gMFxuICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmICh0aGlzLmxldmVsc1tub2RlSWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmxldmVsc1tub2RlSWRdIC09IG1pbkxldmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWluIGFuZCBtYXggeHktY29vcmRpbmF0ZXMgb2YgYSBnaXZlbiB0cmVlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE5vZGU+fSBub2Rlc1xuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICogQHJldHVybnMge3ttaW5feDogbnVtYmVyLCBtYXhfeDogbnVtYmVyLCBtaW5feTogbnVtYmVyLCBtYXhfeTogbnVtYmVyfX1cbiAgICovXG4gIGdldFRyZWVTaXplKG5vZGVzLCBpbmRleCkge1xuICAgIGxldCBtaW5feCA9IDFlOTtcbiAgICBsZXQgbWF4X3ggPSAtMWU5O1xuICAgIGxldCBtaW5feSA9IDFlOTtcbiAgICBsZXQgbWF4X3kgPSAtMWU5O1xuXG4gICAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy50cmVlcykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnRyZWVzLCBub2RlSWQpKSB7XG4gICAgICAgIGlmICh0aGlzLnRyZWVzW25vZGVJZF0gPT09IGluZGV4KSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25vZGVJZF07XG4gICAgICAgICAgbWluX3ggPSBNYXRoLm1pbihub2RlLngsIG1pbl94KTtcbiAgICAgICAgICBtYXhfeCA9IE1hdGgubWF4KG5vZGUueCwgbWF4X3gpO1xuICAgICAgICAgIG1pbl95ID0gTWF0aC5taW4obm9kZS55LCBtaW5feSk7XG4gICAgICAgICAgbWF4X3kgPSBNYXRoLm1heChub2RlLnksIG1heF95KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtaW5feDogbWluX3gsXG4gICAgICBtYXhfeDogbWF4X3gsXG4gICAgICBtaW5feTogbWluX3ksXG4gICAgICBtYXhfeTogbWF4X3ksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gbm9kZXMgaGF2ZSB0aGUgc2FtZSBwYXJlbnQocylcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlMVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSB0d28gbm9kZXMgaGF2ZSBhIHNhbWUgYW5jZXN0b3Igbm9kZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBoYXNTYW1lUGFyZW50KG5vZGUxLCBub2RlMikge1xuICAgIGNvbnN0IHBhcmVudHMxID0gdGhpcy5wYXJlbnRSZWZlcmVuY2Vbbm9kZTEuaWRdO1xuICAgIGNvbnN0IHBhcmVudHMyID0gdGhpcy5wYXJlbnRSZWZlcmVuY2Vbbm9kZTIuaWRdO1xuICAgIGlmIChwYXJlbnRzMSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudHMyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudHMxLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhcmVudHMyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChwYXJlbnRzMVtpXSA9PSBwYXJlbnRzMltqXSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gbm9kZXMgYXJlIGluIHRoZSBzYW1lIHRyZWUuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZTFcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlMlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGlzIGlzIHNvLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGluU2FtZVN1Yk5ldHdvcmsobm9kZTEsIG5vZGUyKSB7XG4gICAgcmV0dXJuIHRoaXMudHJlZXNbbm9kZTEuaWRdID09PSB0aGlzLnRyZWVzW25vZGUyLmlkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBsaXN0IG9mIHRoZSBkaXN0aW5jdCBsZXZlbHMgaW4gdGhlIGN1cnJlbnQgbmV0d29ya1xuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXRMZXZlbHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5vZGUgdG8gdGhlIG9yZGVyaW5nIHBlciBsZXZlbFxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXG4gICAqL1xuICBhZGRUb09yZGVyaW5nKG5vZGUsIGxldmVsKSB7XG4gICAgaWYgKHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdID0gW107XG4gICAgfVxuXG4gICAgbGV0IGlzUHJlc2VudCA9IGZhbHNlO1xuICAgIGNvbnN0IGN1ckxldmVsID0gdGhpcy5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF07XG4gICAgZm9yIChjb25zdCBuIGluIGN1ckxldmVsKSB7XG4gICAgICAvL2lmIChjdXJMZXZlbFtuXS5pZCA9PT0gbm9kZS5pZCkge1xuICAgICAgaWYgKGN1ckxldmVsW25dID09PSBub2RlKSB7XG4gICAgICAgIGlzUHJlc2VudCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNQcmVzZW50KSB7XG4gICAgICB0aGlzLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXS5wdXNoKG5vZGUpO1xuICAgICAgdGhpcy5kaXN0cmlidXRpb25JbmRleFtub2RlLmlkXSA9XG4gICAgICAgIHRoaXMuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdLmxlbmd0aCAtIDE7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhlIExheW91dCBFbmdpbmVcbiAqL1xuY2xhc3MgTGF5b3V0RW5naW5lIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib2R5XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihib2R5KSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhbHdheXMgaXMgc29tZSBSTkcgYmVjYXVzZSB0aGUgc2V0T3B0aW9ucyBtZXRob2Qgd29uJ3RcbiAgICAvLyBzZXQgaXQgdW5sZXNzIHRoZXJlJ3MgYSBzZWVkIGZvciBpdC5cbiAgICB0aGlzLl9yZXNldFJORyhNYXRoLnJhbmRvbSgpICsgXCI6XCIgKyBEYXRlLm5vdygpKTtcblxuICAgIHRoaXMuc2V0UGh5c2ljcyA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMub3B0aW9uc0JhY2t1cCA9IHsgcGh5c2ljczoge30gfTtcblxuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICByYW5kb21TZWVkOiB1bmRlZmluZWQsXG4gICAgICBpbXByb3ZlZExheW91dDogdHJ1ZSxcbiAgICAgIGNsdXN0ZXJUaHJlc2hvbGQ6IDE1MCxcbiAgICAgIGhpZXJhcmNoaWNhbDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbGV2ZWxTZXBhcmF0aW9uOiAxNTAsXG4gICAgICAgIG5vZGVTcGFjaW5nOiAxMDAsXG4gICAgICAgIHRyZWVTcGFjaW5nOiAyMDAsXG4gICAgICAgIGJsb2NrU2hpZnRpbmc6IHRydWUsXG4gICAgICAgIGVkZ2VNaW5pbWl6YXRpb246IHRydWUsXG4gICAgICAgIHBhcmVudENlbnRyYWxpemF0aW9uOiB0cnVlLFxuICAgICAgICBkaXJlY3Rpb246IFwiVURcIiwgLy8gVUQsIERVLCBMUiwgUkxcbiAgICAgICAgc29ydE1ldGhvZDogXCJodWJzaXplXCIsIC8vIGh1YnNpemUsIGRpcmVjdGVkXG4gICAgICB9LFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuICAgIHRoaXMuYmluZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgZXZlbnQgbGlzdGVuZXJzXG4gICAqL1xuICBiaW5kRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YUNoYW5nZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zZXR1cEhpZXJhcmNoaWNhbExheW91dCgpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFMb2FkZWRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5sYXlvdXROZXR3b3JrKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfcmVzZXRIaWVyYXJjaGljYWxMYXlvdXRcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zZXR1cEhpZXJhcmNoaWNhbExheW91dCgpO1xuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2FkanVzdEVkZ2VzRm9ySGllcmFyY2hpY2FsTGF5b3V0XCIsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmVuYWJsZWQgIT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IHRoZSB0eXBlIG9mIHN0YXRpYyBzbW9vdGggY3VydmUgaW4gY2FzZSBpdCBpcyByZXF1aXJlZFxuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuZGlyZWN0aW9uLmN1cnZlVHlwZSgpO1xuXG4gICAgICAvLyBmb3JjZSBhbGwgZWRnZXMgaW50byBzdGF0aWMgc21vb3RoIGN1cnZlcy5cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZm9yY2VEaXNhYmxlRHluYW1pY0N1cnZlc1wiLCB0eXBlLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGFsbE9wdGlvbnNcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucywgYWxsT3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGhpZXJhcmNoaWNhbCA9IHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWw7XG4gICAgICBjb25zdCBwcmV2SGllcmFyY2hpY2FsU3RhdGUgPSBoaWVyYXJjaGljYWwuZW5hYmxlZDtcbiAgICAgIHNlbGVjdGl2ZURlZXBFeHRlbmQoXG4gICAgICAgIFtcInJhbmRvbVNlZWRcIiwgXCJpbXByb3ZlZExheW91dFwiLCBcImNsdXN0ZXJUaHJlc2hvbGRcIl0sXG4gICAgICAgIHRoaXMub3B0aW9ucyxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICAgIG1lcmdlT3B0aW9ucyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMsIFwiaGllcmFyY2hpY2FsXCIpO1xuXG4gICAgICBpZiAob3B0aW9ucy5yYW5kb21TZWVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fcmVzZXRSTkcob3B0aW9ucy5yYW5kb21TZWVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhpZXJhcmNoaWNhbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChwcmV2SGllcmFyY2hpY2FsU3RhdGUgPT09IHRydWUpIHtcbiAgICAgICAgICAvLyByZWZyZXNoIHRoZSBvdmVycmlkZGVuIG9wdGlvbnMgZm9yIG5vZGVzIGFuZCBlZGdlcy5cbiAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVmcmVzaFwiLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgbGV2ZWwgc2VwYXJhdGlvbiBpcyB0aGUgcmlnaHQgd2F5IHVwXG4gICAgICAgIGlmIChcbiAgICAgICAgICBoaWVyYXJjaGljYWwuZGlyZWN0aW9uID09PSBcIlJMXCIgfHxcbiAgICAgICAgICBoaWVyYXJjaGljYWwuZGlyZWN0aW9uID09PSBcIkRVXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gPiAwKSB7XG4gICAgICAgICAgICBoaWVyYXJjaGljYWwubGV2ZWxTZXBhcmF0aW9uICo9IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbiA8IDApIHtcbiAgICAgICAgICAgIGhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gKj0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXREaXJlY3Rpb25TdHJhdGVneSgpO1xuXG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVzZXRIaWVyYXJjaGljYWxMYXlvdXRcIik7XG4gICAgICAgIC8vIGJlY2F1c2UgdGhlIGhpZXJhcmNoaWNhbCBzeXN0ZW0gbmVlZHMgaXQncyBvd24gcGh5c2ljcyBhbmQgc21vb3RoIGN1cnZlIHNldHRpbmdzLFxuICAgICAgICAvLyB3ZSBhZGFwdCB0aGUgb3RoZXIgb3B0aW9ucyBpZiBuZWVkZWQuXG4gICAgICAgIHJldHVybiB0aGlzLmFkYXB0QWxsT3B0aW9uc0ZvckhpZXJhcmNoaWNhbExheW91dChhbGxPcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcmV2SGllcmFyY2hpY2FsU3RhdGUgPT09IHRydWUpIHtcbiAgICAgICAgICAvLyByZWZyZXNoIHRoZSBvdmVycmlkZGVuIG9wdGlvbnMgZm9yIG5vZGVzIGFuZCBlZGdlcy5cbiAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVmcmVzaFwiKTtcbiAgICAgICAgICByZXR1cm4gZGVlcEV4dGVuZChhbGxPcHRpb25zLCB0aGlzLm9wdGlvbnNCYWNrdXApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhbGxPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRoIGdpdmVuIHNlZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBzZWVkIC0gVGhlIHNlZWQgdGhhdCB3aWxsIGJlIGZvcndhcmRlZCB0aGUgdGhlIFJORy5cbiAgICovXG4gIF9yZXNldFJORyhzZWVkKSB7XG4gICAgdGhpcy5pbml0aWFsUmFuZG9tU2VlZCA9IHNlZWQ7XG4gICAgdGhpcy5fcm5nID0gQWxlYSh0aGlzLmluaXRpYWxSYW5kb21TZWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYWxsT3B0aW9uc1xuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgYWRhcHRBbGxPcHRpb25zRm9ySGllcmFyY2hpY2FsTGF5b3V0KGFsbE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBiYWNrdXBQaHlzaWNzID0gdGhpcy5vcHRpb25zQmFja3VwLnBoeXNpY3M7XG5cbiAgICAgIC8vIHNldCB0aGUgcGh5c2ljc1xuICAgICAgaWYgKGFsbE9wdGlvbnMucGh5c2ljcyA9PT0gdW5kZWZpbmVkIHx8IGFsbE9wdGlvbnMucGh5c2ljcyA9PT0gdHJ1ZSkge1xuICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3MgPSB7XG4gICAgICAgICAgZW5hYmxlZDpcbiAgICAgICAgICAgIGJhY2t1cFBoeXNpY3MuZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGJhY2t1cFBoeXNpY3MuZW5hYmxlZCxcbiAgICAgICAgICBzb2x2ZXI6IFwiaGllcmFyY2hpY2FsUmVwdWxzaW9uXCIsXG4gICAgICAgIH07XG4gICAgICAgIGJhY2t1cFBoeXNpY3MuZW5hYmxlZCA9XG4gICAgICAgICAgYmFja3VwUGh5c2ljcy5lbmFibGVkID09PSB1bmRlZmluZWQgPyB0cnVlIDogYmFja3VwUGh5c2ljcy5lbmFibGVkO1xuICAgICAgICBiYWNrdXBQaHlzaWNzLnNvbHZlciA9IGJhY2t1cFBoeXNpY3Muc29sdmVyIHx8IFwiYmFybmVzSHV0XCI7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhbGxPcHRpb25zLnBoeXNpY3MgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgYmFja3VwUGh5c2ljcy5lbmFibGVkID1cbiAgICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3MuZW5hYmxlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgIDogYWxsT3B0aW9ucy5waHlzaWNzLmVuYWJsZWQ7XG4gICAgICAgIGJhY2t1cFBoeXNpY3Muc29sdmVyID0gYWxsT3B0aW9ucy5waHlzaWNzLnNvbHZlciB8fCBcImJhcm5lc0h1dFwiO1xuICAgICAgICBhbGxPcHRpb25zLnBoeXNpY3Muc29sdmVyID0gXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIjtcbiAgICAgIH0gZWxzZSBpZiAoYWxsT3B0aW9ucy5waHlzaWNzICE9PSBmYWxzZSkge1xuICAgICAgICBiYWNrdXBQaHlzaWNzLnNvbHZlciA9IFwiYmFybmVzSHV0XCI7XG4gICAgICAgIGFsbE9wdGlvbnMucGh5c2ljcyA9IHsgc29sdmVyOiBcImhpZXJhcmNoaWNhbFJlcHVsc2lvblwiIH07XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCB0aGUgdHlwZSBvZiBzdGF0aWMgc21vb3RoIGN1cnZlIGluIGNhc2UgaXQgaXMgcmVxdWlyZWRcbiAgICAgIGxldCB0eXBlID0gdGhpcy5kaXJlY3Rpb24uY3VydmVUeXBlKCk7XG5cbiAgICAgIC8vIGRpc2FibGUgc21vb3RoIGN1cnZlcyBpZiBub3RoaW5nIGlzIGRlZmluZWQuIElmIHNtb290aCBjdXJ2ZXMgaGF2ZSBiZWVuIHR1cm5lZCBvbixcbiAgICAgIC8vIHR1cm4gdGhlbSBpbnRvIHN0YXRpYyBzbW9vdGggY3VydmVzLlxuICAgICAgaWYgKGFsbE9wdGlvbnMuZWRnZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7XG4gICAgICAgICAgc21vb3RoOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IFwiZHluYW1pY1wiIH0sXG4gICAgICAgIH07XG4gICAgICAgIGFsbE9wdGlvbnMuZWRnZXMgPSB7IHNtb290aDogZmFsc2UgfTtcbiAgICAgIH0gZWxzZSBpZiAoYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7XG4gICAgICAgICAgc21vb3RoOiB7IGVuYWJsZWQ6IHRydWUsIHR5cGU6IFwiZHluYW1pY1wiIH0sXG4gICAgICAgIH07XG4gICAgICAgIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgIHRoaXMub3B0aW9uc0JhY2t1cC5lZGdlcyA9IHsgc21vb3RoOiBhbGxPcHRpb25zLmVkZ2VzLnNtb290aCB9O1xuICAgICAgICAgIGFsbE9wdGlvbnMuZWRnZXMuc21vb3RoID0ge1xuICAgICAgICAgICAgZW5hYmxlZDogYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGgsXG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc21vb3RoID0gYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGg7XG5cbiAgICAgICAgICAvLyBhbGxvdyBjdXN0b20gdHlwZXMgZXhjZXB0IGZvciBkeW5hbWljXG4gICAgICAgICAgaWYgKHNtb290aC50eXBlICE9PSB1bmRlZmluZWQgJiYgc21vb3RoLnR5cGUgIT09IFwiZHluYW1pY1wiKSB7XG4gICAgICAgICAgICB0eXBlID0gc21vb3RoLnR5cGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVE9ETzogdGhpcyBpcyBvcHRpb25zIG1lcmdpbmc7IHNlZSBpZiB0aGUgc3RhbmRhcmQgcm91dGluZXMgY2FuIGJlIHVzZWQgaGVyZS5cbiAgICAgICAgICB0aGlzLm9wdGlvbnNCYWNrdXAuZWRnZXMgPSB7XG4gICAgICAgICAgICBzbW9vdGg6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogc21vb3RoLmVuYWJsZWQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBzbW9vdGguZW5hYmxlZCxcbiAgICAgICAgICAgICAgdHlwZTogc21vb3RoLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiZHluYW1pY1wiIDogc21vb3RoLnR5cGUsXG4gICAgICAgICAgICAgIHJvdW5kbmVzczpcbiAgICAgICAgICAgICAgICBzbW9vdGgucm91bmRuZXNzID09PSB1bmRlZmluZWQgPyAwLjUgOiBzbW9vdGgucm91bmRuZXNzLFxuICAgICAgICAgICAgICBmb3JjZURpcmVjdGlvbjpcbiAgICAgICAgICAgICAgICBzbW9vdGguZm9yY2VEaXJlY3Rpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgICAgOiBzbW9vdGguZm9yY2VEaXJlY3Rpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyBOT1RFOiBDb3B5aW5nIGFuIG9iamVjdCB0byBzZWxmOyB0aGlzIGlzIGJhc2ljYWxseSBzZXR0aW5nIGRlZmF1bHRzIGZvciB1bmRlZmluZWQgdmFyaWFibGVzXG4gICAgICAgICAgYWxsT3B0aW9ucy5lZGdlcy5zbW9vdGggPSB7XG4gICAgICAgICAgICBlbmFibGVkOiBzbW9vdGguZW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHNtb290aC5lbmFibGVkLFxuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIHJvdW5kbmVzczogc21vb3RoLnJvdW5kbmVzcyA9PT0gdW5kZWZpbmVkID8gMC41IDogc21vb3RoLnJvdW5kbmVzcyxcbiAgICAgICAgICAgIGZvcmNlRGlyZWN0aW9uOlxuICAgICAgICAgICAgICBzbW9vdGguZm9yY2VEaXJlY3Rpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6IHNtb290aC5mb3JjZURpcmVjdGlvbixcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEZvcmNlIGFsbCBlZGdlcyBpbnRvIHN0YXRpYyBzbW9vdGggY3VydmVzLlxuICAgICAgLy8gT25seSBhcHBsaWVzIHRvIGVkZ2VzIHRoYXQgZG8gbm90IHVzZSB0aGUgZ2xvYmFsIG9wdGlvbnMgZm9yIHNtb290aC5cbiAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZm9yY2VEaXNhYmxlRHluYW1pY0N1cnZlc1wiLCB0eXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWxsT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gbm9kZXNBcnJheVxuICAgKi9cbiAgcG9zaXRpb25Jbml0aWFsbHkobm9kZXNBcnJheSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmVuYWJsZWQgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuX3Jlc2V0Uk5HKHRoaXMuaW5pdGlhbFJhbmRvbVNlZWQpO1xuICAgICAgY29uc3QgcmFkaXVzID0gbm9kZXNBcnJheS5sZW5ndGggKyA1MDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlID0gbm9kZXNBcnJheVtpXTtcbiAgICAgICAgY29uc3QgYW5nbGUgPSAyICogTWF0aC5QSSAqIHRoaXMuX3JuZygpO1xuICAgICAgICBpZiAobm9kZS54ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBub2RlLnggPSByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUueSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbm9kZS55ID0gcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBLYW1hZGEgS2F3YWkgdG8gcG9zaXRpb24gbm9kZXMuIFRoaXMgaXMgcXVpdGUgYSBoZWF2eSBhbGdvcml0aG0gc28gaWYgdGhlcmUgYXJlIGEgbG90IG9mIG5vZGVzIHdlXG4gICAqIGNsdXN0ZXIgdGhlbSBmaXJzdCB0byByZWR1Y2UgdGhlIGFtb3VudC5cbiAgICovXG4gIGxheW91dE5ldHdvcmsoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lbmFibGVkICE9PSB0cnVlICYmXG4gICAgICB0aGlzLm9wdGlvbnMuaW1wcm92ZWRMYXlvdXQgPT09IHRydWVcbiAgICApIHtcbiAgICAgIGNvbnN0IGluZGljZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG5cbiAgICAgIC8vIGZpcnN0IGNoZWNrIGlmIHdlIHNob3VsZCBLYW1hZGEgS2F3YWkgdG8gbGF5b3V0LiBUaGUgdGhyZXNob2xkIGlzIGlmIGxlc3MgdGhhbiBoYWxmIG9mIHRoZSB2aXNpYmxlXG4gICAgICAvLyBub2RlcyBoYXZlIHByZWRlZmluZWQgcG9zaXRpb25zIHdlIHVzZSB0aGlzLlxuICAgICAgbGV0IHBvc2l0aW9uRGVmaW5lZCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tpbmRpY2VzW2ldXTtcbiAgICAgICAgaWYgKG5vZGUucHJlZGVmaW5lZFBvc2l0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgcG9zaXRpb25EZWZpbmVkICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gaWYgbGVzcyB0aGFuIGhhbGYgb2YgdGhlIG5vZGVzIGhhdmUgYSBwcmVkZWZpbmVkIHBvc2l0aW9uIHdlIGNvbnRpbnVlXG4gICAgICBpZiAocG9zaXRpb25EZWZpbmVkIDwgMC41ICogaW5kaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgTUFYX0xFVkVMUyA9IDEwO1xuICAgICAgICBsZXQgbGV2ZWwgPSAwO1xuICAgICAgICBjb25zdCBjbHVzdGVyVGhyZXNob2xkID0gdGhpcy5vcHRpb25zLmNsdXN0ZXJUaHJlc2hvbGQ7XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gRGVmaW5lIHRoZSBvcHRpb25zIGZvciB0aGUgaGlkZGVuIGNsdXN0ZXIgbm9kZXNcbiAgICAgICAgLy8gVGhlc2Ugb3B0aW9ucyBkb24ndCBwcm9wYWdhdGUgb3V0c2lkZSB0aGUgY2x1c3RlcmluZyBwaGFzZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gU29tZSBvcHRpb25zIGFyZSBleHBsaWNpdGx5IGRpc2FibGVkLCBiZWNhdXNlIHRoZXkgbWF5IGJlIHNldCBpbiBncm91cCBvciBkZWZhdWx0IG5vZGUgb3B0aW9ucy5cbiAgICAgICAgLy8gVGhlIGNsdXN0ZXJzIGFyZSBuZXZlciBkaXNwbGF5ZWQsIHNvIG1vc3QgZXhwbGljaXQgc2V0dGluZ3MgaGVyZSBzZXJ2ZSBhcyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgZXhwbGljaXQgc2V0dGluZyBvZiAnc2hhcGUnIGlzIHRvIGF2b2lkIGBzaGFwZTogJ2ltYWdlJ2A7IGltYWdlcyBhcmUgbm90IHBhc3NlZCB0byB0aGUgaGlkZGVuXG4gICAgICAgIC8vIGNsdXN0ZXIgbm9kZXMsIGxlYWRpbmcgdG8gYW4gZXhjZXB0aW9uIG9uIGNyZWF0aW9uLlxuICAgICAgICAvL1xuICAgICAgICAvLyBBbGwgc2V0dGluZ3MgaGVyZSBhcmUgcGVyZm9ybWFuY2UgcmVsYXRlZCwgZXhjZXB0IHdoZW4gbm90ZWQgb3RoZXJ3aXNlLlxuICAgICAgICAvL1xuICAgICAgICBjb25zdCBjbHVzdGVyT3B0aW9ucyA9IHtcbiAgICAgICAgICBjbHVzdGVyTm9kZVByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHNoYXBlOiBcImVsbGlwc2VcIiwgLy8gQnVnZml4OiBhdm9pZCB0eXBlICdpbWFnZScsIG5vIGltYWdlcyBzdXBwbGllZFxuICAgICAgICAgICAgbGFiZWw6IFwiXCIsIC8vIGF2b2lkIGxhYmVsIGhhbmRsaW5nXG4gICAgICAgICAgICBncm91cDogXCJcIiwgLy8gYXZvaWQgZ3JvdXAgaGFuZGxpbmdcbiAgICAgICAgICAgIGZvbnQ6IHsgbXVsdGk6IGZhbHNlIH0sIC8vIGF2b2lkIGZvbnQgcHJvcGFnYXRpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsdXN0ZXJFZGdlUHJvcGVydGllczoge1xuICAgICAgICAgICAgbGFiZWw6IFwiXCIsIC8vIGF2b2lkIGxhYmVsIGhhbmRsaW5nXG4gICAgICAgICAgICBmb250OiB7IG11bHRpOiBmYWxzZSB9LCAvLyBhdm9pZCBmb250IHByb3BhZ2F0aW9uXG4gICAgICAgICAgICBzbW9vdGg6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsIC8vIGF2b2lkIGRyYXdpbmcgcGVuYWx0eSBmb3IgY29tcGxleCBlZGdlc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSBhIGxvdCBvZiBub2Rlcywgd2UgY2x1c3RlciBiZWZvcmUgd2UgcnVuIHRoZSBhbGdvcml0aG0uXG4gICAgICAgIC8vIE5PVEU6IHRoaXMgcGFydCBmYWlscyB0byBmaW5kIGNsdXN0ZXJzIGZvciBsYXJnZSBzY2FsZS1mcmVlIG5ldHdvcmtzLCB3aGljaCBzaG91bGRcbiAgICAgICAgLy8gICAgICAgYmUgZWFzaWx5IGNsdXN0ZXJhYmxlLlxuICAgICAgICAvLyBUT0RPOiBleGFtaW5lIHdoeSB0aGlzIGlzIHNvXG4gICAgICAgIGlmIChpbmRpY2VzLmxlbmd0aCA+IGNsdXN0ZXJUaHJlc2hvbGQpIHtcbiAgICAgICAgICBjb25zdCBzdGFydExlbmd0aCA9IGluZGljZXMubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpbmRpY2VzLmxlbmd0aCA+IGNsdXN0ZXJUaHJlc2hvbGQgJiYgbGV2ZWwgPD0gTUFYX0xFVkVMUykge1xuICAgICAgICAgICAgLy9jb25zb2xlLnRpbWUoXCJjbHVzdGVyaW5nXCIpXG4gICAgICAgICAgICBsZXZlbCArPSAxO1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgbWFueSBub2RlcyB3ZSBkbyBhIGh1YnNpemUgY2x1c3RlclxuICAgICAgICAgICAgaWYgKGxldmVsICUgMyA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLmJvZHkubW9kdWxlcy5jbHVzdGVyaW5nLmNsdXN0ZXJCcmlkZ2VzKGNsdXN0ZXJPcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuYm9keS5tb2R1bGVzLmNsdXN0ZXJpbmcuY2x1c3Rlck91dGxpZXJzKGNsdXN0ZXJPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoYmVmb3JlID09IGFmdGVyICYmIGxldmVsICUgMyAhPT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLl9kZWNsdXN0ZXJBbGwoKTtcbiAgICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9sYXlvdXRGYWlsZWRcIik7XG4gICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgICAgICBcIlRoaXMgbmV0d29yayBjb3VsZCBub3QgYmUgcG9zaXRpb25lZCBieSB0aGlzIHZlcnNpb24gb2YgdGhlIGltcHJvdmVkIGxheW91dCBhbGdvcml0aG0uXCIgK1xuICAgICAgICAgICAgICAgICAgXCIgUGxlYXNlIGRpc2FibGUgaW1wcm92ZWRMYXlvdXQgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2NvbnNvbGUudGltZUVuZChcImNsdXN0ZXJpbmdcIilcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coYmVmb3JlLGxldmVsLGFmdGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGVkZ2VzXG4gICAgICAgICAgdGhpcy5ib2R5Lm1vZHVsZXMua2FtYWRhS2F3YWkuc2V0T3B0aW9ucyh7XG4gICAgICAgICAgICBzcHJpbmdMZW5ndGg6IE1hdGgubWF4KDE1MCwgMiAqIHN0YXJ0TGVuZ3RoKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGV2ZWwgPiBNQVhfTEVWRUxTKSB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgXCJUaGUgY2x1c3RlcmluZyBkaWRuJ3Qgc3VjY2VlZCB3aXRoaW4gdGhlIGFtb3VudCBvZiBpbnRlcmF0aW9ucyBhbGxvd2VkLFwiICtcbiAgICAgICAgICAgICAgXCIgcHJvZ3Jlc3Npbmcgd2l0aCBwYXJ0aWFsIHJlc3VsdC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwb3NpdGlvbiB0aGUgc3lzdGVtIGZvciB0aGVzZSBub2RlcyBhbmQgZWRnZXNcbiAgICAgICAgdGhpcy5ib2R5Lm1vZHVsZXMua2FtYWRhS2F3YWkuc29sdmUoXG4gICAgICAgICAgaW5kaWNlcyxcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZUluZGljZXMsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHNoaWZ0IHRvIGNlbnRlciBwb2ludFxuICAgICAgICB0aGlzLl9zaGlmdFRvQ2VudGVyKCk7XG5cbiAgICAgICAgLy8gcGVydHVyYiB0aGUgbm9kZXMgYSBsaXR0bGUgYml0IHRvIGZvcmNlIHRoZSBwaHlzaWNzIHRvIGtpY2sgaW5cbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gNzA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIC8vIE9ubHkgcGVydHVyYiB0aGUgbm9kZXMgdGhhdCBhcmVuJ3QgZml4ZWRcbiAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW2luZGljZXNbaV1dO1xuICAgICAgICAgIGlmIChub2RlLnByZWRlZmluZWRQb3NpdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG5vZGUueCArPSAoMC41IC0gdGhpcy5fcm5nKCkpICogb2Zmc2V0O1xuICAgICAgICAgICAgbm9kZS55ICs9ICgwLjUgLSB0aGlzLl9ybmcoKSkgKiBvZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW5jbHVzdGVyIGFsbCBjbHVzdGVyc1xuICAgICAgICB0aGlzLl9kZWNsdXN0ZXJBbGwoKTtcblxuICAgICAgICAvLyByZXBvc2l0aW9uIGFsbCBiZXppZXIgbm9kZXMuXG4gICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVwb3NpdGlvbkJlemllck5vZGVzXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGFsbCB0aGUgbm9kZXMgdG93YXJkcyB0byB0aGUgY2VudGVyIHNvIGdyYXZpdGF0aW9uYWwgcHVsbCB3aWwgbm90IG1vdmUgdGhlIG5vZGVzIGF3YXkgZnJvbSB2aWV3XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hpZnRUb0NlbnRlcigpIHtcbiAgICBjb25zdCByYW5nZSA9IE5ldHdvcmtVdGlsLmdldFJhbmdlQ29yZShcbiAgICAgIHRoaXMuYm9keS5ub2RlcyxcbiAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlc1xuICAgICk7XG4gICAgY29uc3QgY2VudGVyID0gTmV0d29ya1V0aWwuZmluZENlbnRlcihyYW5nZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvZHkubm9kZUluZGljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldXTtcbiAgICAgIG5vZGUueCAtPSBjZW50ZXIueDtcbiAgICAgIG5vZGUueSAtPSBjZW50ZXIueTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyBhbGwgY2x1c3RlcnNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZWNsdXN0ZXJBbGwoKSB7XG4gICAgbGV0IGNsdXN0ZXJzUHJlc2VudCA9IHRydWU7XG4gICAgd2hpbGUgKGNsdXN0ZXJzUHJlc2VudCA9PT0gdHJ1ZSkge1xuICAgICAgY2x1c3RlcnNQcmVzZW50ID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5ib2R5Lm5vZGVzW3RoaXMuYm9keS5ub2RlSW5kaWNlc1tpXV0uaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgY2x1c3RlcnNQcmVzZW50ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmJvZHkubW9kdWxlcy5jbHVzdGVyaW5nLm9wZW5DbHVzdGVyKFxuICAgICAgICAgICAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzW2ldLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjbHVzdGVyc1ByZXNlbnQgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9kYXRhQ2hhbmdlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcnwqfVxuICAgKi9cbiAgZ2V0U2VlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsUmFuZG9tU2VlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIHRvIGxheW91dCB0aGUgbm9kZXMgaW4gYSBoaWVyYXJjaGljYWwgd2F5LlxuICAgKiBJdCBjaGVja3MgaWYgdGhlIG5vZGUgZGV0YWlscyBhcmUgc3VwcGxpZWQgY29ycmVjdGx5XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXR1cEhpZXJhcmNoaWNhbExheW91dCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmVuYWJsZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICAvLyBnZXQgdGhlIHNpemUgb2YgdGhlIGxhcmdlc3QgaHVicyBhbmQgY2hlY2sgaWYgdGhlIHVzZXIgaGFzIGRlZmluZWQgYSBsZXZlbCBmb3IgYSBub2RlLlxuICAgICAgbGV0IG5vZGUsIG5vZGVJZDtcbiAgICAgIGxldCBkZWZpbmVkTGV2ZWwgPSBmYWxzZTtcbiAgICAgIGxldCB1bmRlZmluZWRMZXZlbCA9IGZhbHNlO1xuICAgICAgdGhpcy5sYXN0Tm9kZU9uTGV2ZWwgPSB7fTtcbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsID0gbmV3IEhpZXJhcmNoaWNhbFN0YXR1cygpO1xuXG4gICAgICBmb3IgKG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgICAgaWYgKG5vZGUub3B0aW9ucy5sZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkZWZpbmVkTGV2ZWwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGVJZF0gPSBub2RlLm9wdGlvbnMubGV2ZWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuZGVmaW5lZExldmVsID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlIHVzZXIgZGVmaW5lZCBzb21lIGxldmVscyBidXQgbm90IGFsbCwgYWxlcnQgYW5kIHJ1biB3aXRob3V0IGhpZXJhcmNoaWNhbCBsYXlvdXRcbiAgICAgIGlmICh1bmRlZmluZWRMZXZlbCA9PT0gdHJ1ZSAmJiBkZWZpbmVkTGV2ZWwgPT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVG8gdXNlIHRoZSBoaWVyYXJjaGljYWwgbGF5b3V0LCBub2RlcyByZXF1aXJlIGVpdGhlciBubyBwcmVkZWZpbmVkIGxldmVsc1wiICtcbiAgICAgICAgICAgIFwiIG9yIGxldmVscyBoYXZlIHRvIGJlIGRlZmluZWQgZm9yIGFsbCBub2Rlcy5cIlxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmaW5lIGxldmVscyBpZiB1bmRlZmluZWQgYnkgdGhlIHVzZXJzLiBCYXNlZCBvbiBodWJzaXplLlxuICAgICAgICBpZiAodW5kZWZpbmVkTGV2ZWwgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBzb3J0TWV0aG9kID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5zb3J0TWV0aG9kO1xuICAgICAgICAgIGlmIChzb3J0TWV0aG9kID09PSBcImh1YnNpemVcIikge1xuICAgICAgICAgICAgdGhpcy5fZGV0ZXJtaW5lTGV2ZWxzQnlIdWJzaXplKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzb3J0TWV0aG9kID09PSBcImRpcmVjdGVkXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RldGVybWluZUxldmVsc0RpcmVjdGVkKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzb3J0TWV0aG9kID09PSBcImN1c3RvbVwiKSB7XG4gICAgICAgICAgICB0aGlzLl9kZXRlcm1pbmVMZXZlbHNDdXN0b21DYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZhbGxiYWNrIGZvciBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgbm9kZXMgYnV0IG5vIGVkZ2VzXG4gICAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRoaXMuYm9keS5ub2Rlcykge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5lbnN1cmVMZXZlbChub2RlSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBub2RlcyBwZXIgbGV2ZWwuXG4gICAgICAgIGNvbnN0IGRpc3RyaWJ1dGlvbiA9IHRoaXMuX2dldERpc3RyaWJ1dGlvbigpO1xuXG4gICAgICAgIC8vIGdldCB0aGUgcGFyZW50IGNoaWxkcmVuIHJlbGF0aW9ucy5cbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVNYXAoKTtcblxuICAgICAgICAvLyBwbGFjZSB0aGUgbm9kZXMgb24gdGhlIGNhbnZhcy5cbiAgICAgICAgdGhpcy5fcGxhY2VOb2Rlc0J5SGllcmFyY2h5KGRpc3RyaWJ1dGlvbik7XG5cbiAgICAgICAgLy8gY29uZGVuc2UgdGhlIHdoaXRlc3BhY2UuXG4gICAgICAgIHRoaXMuX2NvbmRlbnNlSGllcmFyY2h5KCk7XG5cbiAgICAgICAgLy8gc2hpZnQgdG8gY2VudGVyIHNvIGdyYXZpdHkgZG9lcyBub3QgaGF2ZSB0byBkbyBtdWNoXG4gICAgICAgIHRoaXMuX3NoaWZ0VG9DZW50ZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb25kZW5zZUhpZXJhcmNoeSgpIHtcbiAgICAvLyBHbG9iYWwgdmFyIGluIHRoaXMgc2NvcGUgdG8gZGVmaW5lIHdoZW4gdGhlIG1vdmVtZW50IGhhcyBzdG9wcGVkLlxuICAgIGxldCBzdGlsbFNoaWZ0aW5nID0gZmFsc2U7XG4gICAgY29uc3QgYnJhbmNoZXMgPSB7fTtcbiAgICAvLyBmaXJzdCB3ZSBoYXZlIHNvbWUgbWV0aG9kcyB0byBoZWxwIHNoaWZ0aW5nIHRyZWVzIGFyb3VuZC5cbiAgICAvLyB0aGUgbWFpbiBtZXRob2QgdG8gc2hpZnQgdGhlIHRyZWVzXG4gICAgY29uc3Qgc2hpZnRUcmVlcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHRyZWVTaXplcyA9IGdldFRyZWVTaXplcygpO1xuICAgICAgbGV0IHNoaWZ0QnkgPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmVlU2l6ZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRpZmYgPSB0cmVlU2l6ZXNbaV0ubWF4IC0gdHJlZVNpemVzW2kgKyAxXS5taW47XG4gICAgICAgIHNoaWZ0QnkgKz0gZGlmZiArIHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwudHJlZVNwYWNpbmc7XG4gICAgICAgIHNoaWZ0VHJlZShpICsgMSwgc2hpZnRCeSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHNoaWZ0IGEgc2luZ2xlIHRyZWUgYnkgYW4gb2Zmc2V0XG4gICAgY29uc3Qgc2hpZnRUcmVlID0gKGluZGV4LCBvZmZzZXQpID0+IHtcbiAgICAgIGNvbnN0IHRyZWVzID0gdGhpcy5oaWVyYXJjaGljYWwudHJlZXM7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIGluIHRyZWVzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodHJlZXMsIG5vZGVJZCkpIHtcbiAgICAgICAgICBpZiAodHJlZXNbbm9kZUlkXSA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNoaWZ0KG5vZGVJZCwgb2Zmc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gZ2V0IHRoZSB3aWR0aCBvZiBhbGwgdHJlZXNcbiAgICBjb25zdCBnZXRUcmVlU2l6ZXMgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0cmVlV2lkdGhzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaGllcmFyY2hpY2FsLm51bVRyZWVzKCk7IGkrKykge1xuICAgICAgICB0cmVlV2lkdGhzLnB1c2godGhpcy5kaXJlY3Rpb24uZ2V0VHJlZVNpemUoaSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyZWVXaWR0aHM7XG4gICAgfTtcblxuICAgIC8vIGdldCBhIG1hcCBvZiBhbGwgbm9kZXMgaW4gdGhpcyBicmFuY2hcbiAgICBjb25zdCBnZXRCcmFuY2hOb2RlcyA9IChzb3VyY2UsIG1hcCkgPT4ge1xuICAgICAgaWYgKG1hcFtzb3VyY2UuaWRdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG1hcFtzb3VyY2UuaWRdID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLmhpZXJhcmNoaWNhbC5jaGlsZHJlblJlZmVyZW5jZVtzb3VyY2UuaWRdKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5oaWVyYXJjaGljYWwuY2hpbGRyZW5SZWZlcmVuY2Vbc291cmNlLmlkXTtcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBnZXRCcmFuY2hOb2Rlcyh0aGlzLmJvZHkubm9kZXNbY2hpbGRyZW5baV1dLCBtYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBnZXQgYSBtaW4gbWF4IHdpZHRoIGFzIHdlbGwgYXMgdGhlIG1heGltdW0gbW92ZW1lbnQgc3BhY2UgaXQgaGFzIG9uIGVpdGhlciBzaWRlc1xuICAgIC8vIHdlIHVzZSBtaW4gbWF4IHRlcm1pbm9sb2d5IGJlY2F1c2Ugd2lkdGggYW5kIGhlaWdodCBjYW4gaW50ZXJjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGxheW91dFxuICAgIGNvbnN0IGdldEJyYW5jaEJvdW5kYXJ5ID0gKGJyYW5jaE1hcCwgbWF4TGV2ZWwgPSAxZTkpID0+IHtcbiAgICAgIGxldCBtaW5TcGFjZSA9IDFlOTtcbiAgICAgIGxldCBtYXhTcGFjZSA9IDFlOTtcbiAgICAgIGxldCBtaW4gPSAxZTk7XG4gICAgICBsZXQgbWF4ID0gLTFlOTtcbiAgICAgIGZvciAoY29uc3QgYnJhbmNoTm9kZSBpbiBicmFuY2hNYXApIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChicmFuY2hNYXAsIGJyYW5jaE5vZGUpKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1ticmFuY2hOb2RlXTtcbiAgICAgICAgICBjb25zdCBsZXZlbCA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlLmlkXTtcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuXG4gICAgICAgICAgLy8gZ2V0IHRoZSBzcGFjZSBhcm91bmQgdGhlIG5vZGUuXG4gICAgICAgICAgY29uc3QgW21pblNwYWNlTm9kZSwgbWF4U3BhY2VOb2RlXSA9IHRoaXMuX2dldFNwYWNlQXJvdW5kTm9kZShcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBicmFuY2hNYXBcbiAgICAgICAgICApO1xuICAgICAgICAgIG1pblNwYWNlID0gTWF0aC5taW4obWluU3BhY2VOb2RlLCBtaW5TcGFjZSk7XG4gICAgICAgICAgbWF4U3BhY2UgPSBNYXRoLm1pbihtYXhTcGFjZU5vZGUsIG1heFNwYWNlKTtcblxuICAgICAgICAgIC8vIHRoZSB3aWR0aCBpcyBvbmx5IHJlbGV2YW50IGZvciB0aGUgbGV2ZWxzIHR3byBub2RlcyBoYXZlIGluIGNvbW1vbi4gVGhpcyBpcyB3aHkgd2UgZmlsdGVyIG9uIHRoaXMuXG4gICAgICAgICAgaWYgKGxldmVsIDw9IG1heExldmVsKSB7XG4gICAgICAgICAgICBtaW4gPSBNYXRoLm1pbihwb3NpdGlvbiwgbWluKTtcbiAgICAgICAgICAgIG1heCA9IE1hdGgubWF4KHBvc2l0aW9uLCBtYXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gW21pbiwgbWF4LCBtaW5TcGFjZSwgbWF4U3BhY2VdO1xuICAgIH07XG5cbiAgICAvLyBjaGVjayB3aGF0IHRoZSBtYXhpbXVtIGxldmVsIGlzIHRoZXNlIG5vZGVzIGhhdmUgaW4gY29tbW9uLlxuICAgIGNvbnN0IGdldENvbGxpc2lvbkxldmVsID0gKG5vZGUxLCBub2RlMikgPT4ge1xuICAgICAgY29uc3QgbWF4TGV2ZWwxID0gdGhpcy5oaWVyYXJjaGljYWwuZ2V0TWF4TGV2ZWwobm9kZTEuaWQpO1xuICAgICAgY29uc3QgbWF4TGV2ZWwyID0gdGhpcy5oaWVyYXJjaGljYWwuZ2V0TWF4TGV2ZWwobm9kZTIuaWQpO1xuICAgICAgcmV0dXJuIE1hdGgubWluKG1heExldmVsMSwgbWF4TGV2ZWwyKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29uZGVuc2UgZWxlbWVudHMuIFRoZXNlIGNhbiBiZSBub2RlcyBvciBicmFuY2hlcyBkZXBlbmRpbmcgb24gdGhlIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBsZXZlbHNcbiAgICAgKiBAcGFyYW0geyp9IGNlbnRlclBhcmVudHNcbiAgICAgKi9cbiAgICBjb25zdCBzaGlmdEVsZW1lbnRzQ2xvc2VyID0gKGNhbGxiYWNrLCBsZXZlbHMsIGNlbnRlclBhcmVudHMpID0+IHtcbiAgICAgIGNvbnN0IGhpZXIgPSB0aGlzLmhpZXJhcmNoaWNhbDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZXZlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbGV2ZWwgPSBsZXZlbHNbaV07XG4gICAgICAgIGNvbnN0IGxldmVsTm9kZXMgPSBoaWVyLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXTtcbiAgICAgICAgaWYgKGxldmVsTm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV2ZWxOb2Rlcy5sZW5ndGggLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUxID0gbGV2ZWxOb2Rlc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUyID0gbGV2ZWxOb2Rlc1tqICsgMV07XG5cbiAgICAgICAgICAgIC8vIE5PVEU6IGxvZ2ljIG1haW50YWluZWQgYXMgaXQgd2FzOyBpZiBub2RlcyBoYXZlIHNhbWUgYW5jZXN0b3IsXG4gICAgICAgICAgICAvLyAgICAgICB0aGVuIG9mIGNvdXJzZSB0aGV5IGFyZSBpbiB0aGUgc2FtZSBzdWItbmV0d29yay5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaGllci5oYXNTYW1lUGFyZW50KG5vZGUxLCBub2RlMikgJiZcbiAgICAgICAgICAgICAgaGllci5pblNhbWVTdWJOZXR3b3JrKG5vZGUxLCBub2RlMilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhub2RlMSwgbm9kZTIsIGNlbnRlclBhcmVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBjYWxsYmFjayBmb3Igc2hpZnRpbmcgYnJhbmNoZXNcbiAgICBjb25zdCBicmFuY2hTaGlmdENhbGxiYWNrID0gKG5vZGUxLCBub2RlMiwgY2VudGVyUGFyZW50ID0gZmFsc2UpID0+IHtcbiAgICAgIC8vd2luZG93LkNBTExCQUNLUy5wdXNoKCgpID0+IHtcbiAgICAgIGNvbnN0IHBvczEgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihub2RlMSk7XG4gICAgICBjb25zdCBwb3MyID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZTIpO1xuICAgICAgY29uc3QgZGlmZkFicyA9IE1hdGguYWJzKHBvczIgLSBwb3MxKTtcbiAgICAgIGNvbnN0IG5vZGVTcGFjaW5nID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZztcbiAgICAgIC8vY29uc29sZS5sb2coXCJOT1cgQ0hFQ0tJTkc6XCIsIG5vZGUxLmlkLCBub2RlMi5pZCwgZGlmZkFicyk7XG4gICAgICBpZiAoZGlmZkFicyA+IG5vZGVTcGFjaW5nKSB7XG4gICAgICAgIGNvbnN0IGJyYW5jaE5vZGVzMSA9IHt9O1xuICAgICAgICBjb25zdCBicmFuY2hOb2RlczIgPSB7fTtcblxuICAgICAgICBnZXRCcmFuY2hOb2Rlcyhub2RlMSwgYnJhbmNoTm9kZXMxKTtcbiAgICAgICAgZ2V0QnJhbmNoTm9kZXMobm9kZTIsIGJyYW5jaE5vZGVzMik7XG5cbiAgICAgICAgLy8gY2hlY2sgdGhlIGxhcmdlc3QgZGlzdGFuY2UgYmV0d2VlbiB0aGUgYnJhbmNoZXNcbiAgICAgICAgY29uc3QgbWF4TGV2ZWwgPSBnZXRDb2xsaXNpb25MZXZlbChub2RlMSwgbm9kZTIpO1xuICAgICAgICBjb25zdCBicmFuY2hOb2RlQm91bmRhcnkxID0gZ2V0QnJhbmNoQm91bmRhcnkoYnJhbmNoTm9kZXMxLCBtYXhMZXZlbCk7XG4gICAgICAgIGNvbnN0IGJyYW5jaE5vZGVCb3VuZGFyeTIgPSBnZXRCcmFuY2hCb3VuZGFyeShicmFuY2hOb2RlczIsIG1heExldmVsKTtcbiAgICAgICAgY29uc3QgbWF4MSA9IGJyYW5jaE5vZGVCb3VuZGFyeTFbMV07XG4gICAgICAgIGNvbnN0IG1pbjIgPSBicmFuY2hOb2RlQm91bmRhcnkyWzBdO1xuICAgICAgICBjb25zdCBtaW5TcGFjZTIgPSBicmFuY2hOb2RlQm91bmRhcnkyWzJdO1xuXG4gICAgICAgIC8vY29uc29sZS5sb2cobm9kZTEuaWQsIGdldEJyYW5jaEJvdW5kYXJ5KGJyYW5jaE5vZGVzMSwgbWF4TGV2ZWwpLCBub2RlMi5pZCxcbiAgICAgICAgLy8gICAgICAgICAgICBnZXRCcmFuY2hCb3VuZGFyeShicmFuY2hOb2RlczIsIG1heExldmVsKSwgbWF4TGV2ZWwpO1xuICAgICAgICBjb25zdCBkaWZmQnJhbmNoID0gTWF0aC5hYnMobWF4MSAtIG1pbjIpO1xuICAgICAgICBpZiAoZGlmZkJyYW5jaCA+IG5vZGVTcGFjaW5nKSB7XG4gICAgICAgICAgbGV0IG9mZnNldCA9IG1heDEgLSBtaW4yICsgbm9kZVNwYWNpbmc7XG4gICAgICAgICAgaWYgKG9mZnNldCA8IC1taW5TcGFjZTIgKyBub2RlU3BhY2luZykge1xuICAgICAgICAgICAgb2Zmc2V0ID0gLW1pblNwYWNlMiArIG5vZGVTcGFjaW5nO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlJFU0VUVElORyBPRkZTRVRcIiwgbWF4MSAtIG1pbjIgKyB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nLCAtbWluU3BhY2UyLCBvZmZzZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlNISUZUSU5HXCIsIG5vZGUyLmlkLCBvZmZzZXQpO1xuICAgICAgICAgICAgdGhpcy5fc2hpZnRCbG9jayhub2RlMi5pZCwgb2Zmc2V0KTtcbiAgICAgICAgICAgIHN0aWxsU2hpZnRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoY2VudGVyUGFyZW50ID09PSB0cnVlKSB0aGlzLl9jZW50ZXJQYXJlbnQobm9kZTIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy90aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTt9KVxuICAgIH07XG5cbiAgICBjb25zdCBtaW5pbWl6ZUVkZ2VMZW5ndGggPSAoaXRlcmF0aW9ucywgbm9kZSkgPT4ge1xuICAgICAgLy93aW5kb3cuQ0FMTEJBQ0tTLnB1c2goKCkgPT4ge1xuICAgICAgLy8gIGNvbnNvbGUubG9nKFwidHNcIixub2RlLmlkKTtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IG5vZGUuaWQ7XG4gICAgICBjb25zdCBhbGxFZGdlcyA9IG5vZGUuZWRnZXM7XG4gICAgICBjb25zdCBub2RlTGV2ZWwgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZS5pZF07XG5cbiAgICAgIC8vIGdhdGhlciBjb25zdGFudHNcbiAgICAgIGNvbnN0IEMyID1cbiAgICAgICAgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5sZXZlbFNlcGFyYXRpb24gKlxuICAgICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmxldmVsU2VwYXJhdGlvbjtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGVzID0ge307XG4gICAgICBjb25zdCBhYm92ZUVkZ2VzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbEVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBhbGxFZGdlc1tpXTtcbiAgICAgICAgaWYgKGVkZ2UudG9JZCAhPSBlZGdlLmZyb21JZCkge1xuICAgICAgICAgIGNvbnN0IG90aGVyTm9kZSA9IGVkZ2UudG9JZCA9PSBub2RlSWQgPyBlZGdlLmZyb20gOiBlZGdlLnRvO1xuICAgICAgICAgIHJlZmVyZW5jZU5vZGVzW2FsbEVkZ2VzW2ldLmlkXSA9IG90aGVyTm9kZTtcbiAgICAgICAgICBpZiAodGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW290aGVyTm9kZS5pZF0gPCBub2RlTGV2ZWwpIHtcbiAgICAgICAgICAgIGFib3ZlRWRnZXMucHVzaChlZGdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZGlmZmVyZW50aWF0ZWQgc3VtIG9mIGxlbmd0aHMgYmFzZWQgb24gb25seSBtb3Zpbmcgb25lIG5vZGUgb3ZlciBvbmUgYXhpc1xuICAgICAgY29uc3QgZ2V0RnggPSAocG9pbnQsIGVkZ2VzKSA9PiB7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGVzW2VkZ2VzW2ldLmlkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBhID1cbiAgICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24ocmVmZXJlbmNlTm9kZXNbZWRnZXNbaV0uaWRdKSAtIHBvaW50O1xuICAgICAgICAgICAgc3VtICs9IGEgLyBNYXRoLnNxcnQoYSAqIGEgKyBDMik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdW07XG4gICAgICB9O1xuXG4gICAgICAvLyBkb3VibHkgZGlmZmVyZW50aWF0ZWQgc3VtIG9mIGxlbmd0aHMgYmFzZWQgb24gb25seSBtb3Zpbmcgb25lIG5vZGUgb3ZlciBvbmUgYXhpc1xuICAgICAgY29uc3QgZ2V0REZ4ID0gKHBvaW50LCBlZGdlcykgPT4ge1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChyZWZlcmVuY2VOb2Rlc1tlZGdlc1tpXS5pZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYSA9XG4gICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKHJlZmVyZW5jZU5vZGVzW2VkZ2VzW2ldLmlkXSkgLSBwb2ludDtcbiAgICAgICAgICAgIHN1bSAtPSBDMiAqIE1hdGgucG93KGEgKiBhICsgQzIsIC0xLjUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VtO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZ2V0R3Vlc3MgPSAoaXRlcmF0aW9ucywgZWRnZXMpID0+IHtcbiAgICAgICAgbGV0IGd1ZXNzID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZSk7XG4gICAgICAgIC8vIE5ld3RvbidzIG1ldGhvZCBmb3Igb3B0aW1pemF0aW9uXG4gICAgICAgIGNvbnN0IGd1ZXNzTWFwID0ge307XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZnggPSBnZXRGeChndWVzcywgZWRnZXMpO1xuICAgICAgICAgIGNvbnN0IGRmeCA9IGdldERGeChndWVzcywgZWRnZXMpO1xuXG4gICAgICAgICAgLy8gd2UgbGltaXQgdGhlIG1vdmVtZW50IHRvIGF2b2lkIGluc3RhYmlsaXR5LlxuICAgICAgICAgIGNvbnN0IGxpbWl0ID0gNDA7XG4gICAgICAgICAgY29uc3QgcmF0aW8gPSBNYXRoLm1heCgtbGltaXQsIE1hdGgubWluKGxpbWl0LCBNYXRoLnJvdW5kKGZ4IC8gZGZ4KSkpO1xuICAgICAgICAgIGd1ZXNzID0gZ3Vlc3MgLSByYXRpbztcbiAgICAgICAgICAvLyByZWR1Y2UgZHVwbGljYXRlc1xuICAgICAgICAgIGlmIChndWVzc01hcFtndWVzc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGd1ZXNzTWFwW2d1ZXNzXSA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGd1ZXNzO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgbW92ZUJyYW5jaCA9IChndWVzcykgPT4ge1xuICAgICAgICAvLyBwb3NpdGlvbiBub2RlIGlmIHRoZXJlIGlzIHNwYWNlXG4gICAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuXG4gICAgICAgIC8vIGNoZWNrIG1vdmFibGUgYXJlYSBvZiB0aGUgYnJhbmNoXG4gICAgICAgIGlmIChicmFuY2hlc1tub2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgYnJhbmNoTm9kZXMgPSB7fTtcbiAgICAgICAgICBnZXRCcmFuY2hOb2Rlcyhub2RlLCBicmFuY2hOb2Rlcyk7XG4gICAgICAgICAgYnJhbmNoZXNbbm9kZS5pZF0gPSBicmFuY2hOb2RlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBicmFuY2hCb3VuZGFyeSA9IGdldEJyYW5jaEJvdW5kYXJ5KGJyYW5jaGVzW25vZGUuaWRdKTtcbiAgICAgICAgY29uc3QgbWluU3BhY2VCcmFuY2ggPSBicmFuY2hCb3VuZGFyeVsyXTtcbiAgICAgICAgY29uc3QgbWF4U3BhY2VCcmFuY2ggPSBicmFuY2hCb3VuZGFyeVszXTtcblxuICAgICAgICBjb25zdCBkaWZmID0gZ3Vlc3MgLSBub2RlUG9zaXRpb247XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIGFsbG93ZWQgdG8gbW92ZSB0aGUgbm9kZTpcbiAgICAgICAgbGV0IGJyYW5jaE9mZnNldCA9IDA7XG4gICAgICAgIGlmIChkaWZmID4gMCkge1xuICAgICAgICAgIGJyYW5jaE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgICAgICAgZGlmZixcbiAgICAgICAgICAgIG1heFNwYWNlQnJhbmNoIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZiA8IDApIHtcbiAgICAgICAgICBicmFuY2hPZmZzZXQgPSAtTWF0aC5taW4oXG4gICAgICAgICAgICAtZGlmZixcbiAgICAgICAgICAgIG1pblNwYWNlQnJhbmNoIC0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnJhbmNoT2Zmc2V0ICE9IDApIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwibW92aW5nIGJyYW5jaDpcIixicmFuY2hPZmZzZXQsIG1heFNwYWNlQnJhbmNoLCBtaW5TcGFjZUJyYW5jaClcbiAgICAgICAgICB0aGlzLl9zaGlmdEJsb2NrKG5vZGUuaWQsIGJyYW5jaE9mZnNldCk7XG4gICAgICAgICAgLy90aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICAgICAgICBzdGlsbFNoaWZ0aW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW92ZU5vZGUgPSAoZ3Vlc3MpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZVBvc2l0aW9uID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24obm9kZSk7XG5cbiAgICAgICAgLy8gcG9zaXRpb24gbm9kZSBpZiB0aGVyZSBpcyBzcGFjZVxuICAgICAgICBjb25zdCBbbWluU3BhY2UsIG1heFNwYWNlXSA9IHRoaXMuX2dldFNwYWNlQXJvdW5kTm9kZShub2RlKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IGd1ZXNzIC0gbm9kZVBvc2l0aW9uO1xuICAgICAgICAvLyBjaGVjayBpZiB3ZSBhcmUgYWxsb3dlZCB0byBtb3ZlIHRoZSBub2RlOlxuICAgICAgICBsZXQgbmV3UG9zaXRpb24gPSBub2RlUG9zaXRpb247XG4gICAgICAgIGlmIChkaWZmID4gMCkge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gTWF0aC5taW4oXG4gICAgICAgICAgICBub2RlUG9zaXRpb24gKyAobWF4U3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKSxcbiAgICAgICAgICAgIGd1ZXNzXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChkaWZmIDwgMCkge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgICAgICBub2RlUG9zaXRpb24gLSAobWluU3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKSxcbiAgICAgICAgICAgIGd1ZXNzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdQb3NpdGlvbiAhPT0gbm9kZVBvc2l0aW9uKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIm1vdmluZyBOb2RlOlwiLGRpZmYsIG1pblNwYWNlLCBtYXhTcGFjZSk7XG4gICAgICAgICAgdGhpcy5kaXJlY3Rpb24uc2V0UG9zaXRpb24obm9kZSwgbmV3UG9zaXRpb24pO1xuICAgICAgICAgIC8vdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgICAgICAgc3RpbGxTaGlmdGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGxldCBndWVzcyA9IGdldEd1ZXNzKGl0ZXJhdGlvbnMsIGFib3ZlRWRnZXMpO1xuICAgICAgbW92ZUJyYW5jaChndWVzcyk7XG4gICAgICBndWVzcyA9IGdldEd1ZXNzKGl0ZXJhdGlvbnMsIGFsbEVkZ2VzKTtcbiAgICAgIG1vdmVOb2RlKGd1ZXNzKTtcbiAgICAgIC8vfSlcbiAgICB9O1xuXG4gICAgLy8gbWV0aG9kIHRvIHJlbW92ZSB3aGl0ZXNwYWNlIGJldHdlZW4gYnJhbmNoZXMuIEJlY2F1c2Ugd2UgZG8gYm90dG9tIHVwLCB3ZSBjYW4gY2VudGVyIHRoZSBwYXJlbnRzLlxuICAgIGNvbnN0IG1pbmltaXplRWRnZUxlbmd0aEJvdHRvbVVwID0gKGl0ZXJhdGlvbnMpID0+IHtcbiAgICAgIGxldCBsZXZlbHMgPSB0aGlzLmhpZXJhcmNoaWNhbC5nZXRMZXZlbHMoKTtcbiAgICAgIGxldmVscyA9IGxldmVscy5yZXZlcnNlKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICBzdGlsbFNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV2ZWxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3QgbGV2ZWwgPSBsZXZlbHNbal07XG4gICAgICAgICAgY29uc3QgbGV2ZWxOb2RlcyA9IHRoaXMuaGllcmFyY2hpY2FsLmRpc3RyaWJ1dGlvbk9yZGVyaW5nW2xldmVsXTtcbiAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxldmVsTm9kZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIG1pbmltaXplRWRnZUxlbmd0aCgxMDAwLCBsZXZlbE5vZGVzW2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0aWxsU2hpZnRpbmcgIT09IHRydWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiRklOSVNIRUQgbWluaW1pemVFZGdlTGVuZ3RoQm90dG9tVXAgSU4gXCIgKyBpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBtZXRob2QgdG8gcmVtb3ZlIHdoaXRlc3BhY2UgYmV0d2VlbiBicmFuY2hlcy4gQmVjYXVzZSB3ZSBkbyBib3R0b20gdXAsIHdlIGNhbiBjZW50ZXIgdGhlIHBhcmVudHMuXG4gICAgY29uc3Qgc2hpZnRCcmFuY2hlc0Nsb3NlckJvdHRvbVVwID0gKGl0ZXJhdGlvbnMpID0+IHtcbiAgICAgIGxldCBsZXZlbHMgPSB0aGlzLmhpZXJhcmNoaWNhbC5nZXRMZXZlbHMoKTtcbiAgICAgIGxldmVscyA9IGxldmVscy5yZXZlcnNlKCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICBzdGlsbFNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgIHNoaWZ0RWxlbWVudHNDbG9zZXIoYnJhbmNoU2hpZnRDYWxsYmFjaywgbGV2ZWxzLCB0cnVlKTtcbiAgICAgICAgaWYgKHN0aWxsU2hpZnRpbmcgIT09IHRydWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiRklOSVNIRUQgc2hpZnRCcmFuY2hlc0Nsb3NlckJvdHRvbVVwIElOIFwiICsgKGkrMSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGNlbnRlciBhbGwgcGFyZW50c1xuICAgIGNvbnN0IGNlbnRlckFsbFBhcmVudHMgPSAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGVJZCBpbiB0aGlzLmJvZHkubm9kZXMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmJvZHkubm9kZXMsIG5vZGVJZCkpXG4gICAgICAgICAgdGhpcy5fY2VudGVyUGFyZW50KHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gY2VudGVyIGFsbCBwYXJlbnRzXG4gICAgY29uc3QgY2VudGVyQWxsUGFyZW50c0JvdHRvbVVwID0gKCkgPT4ge1xuICAgICAgbGV0IGxldmVscyA9IHRoaXMuaGllcmFyY2hpY2FsLmdldExldmVscygpO1xuICAgICAgbGV2ZWxzID0gbGV2ZWxzLnJldmVyc2UoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGV2ZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxldmVsID0gbGV2ZWxzW2ldO1xuICAgICAgICBjb25zdCBsZXZlbE5vZGVzID0gdGhpcy5oaWVyYXJjaGljYWwuZGlzdHJpYnV0aW9uT3JkZXJpbmdbbGV2ZWxdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldmVsTm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB0aGlzLl9jZW50ZXJQYXJlbnQobGV2ZWxOb2Rlc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gdGhlIGFjdHVhbCB3b3JrIGlzIGRvbmUgaGVyZS5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ibG9ja1NoaWZ0aW5nID09PSB0cnVlKSB7XG4gICAgICBzaGlmdEJyYW5jaGVzQ2xvc2VyQm90dG9tVXAoNSk7XG4gICAgICBjZW50ZXJBbGxQYXJlbnRzKCk7XG4gICAgfVxuXG4gICAgLy8gbWluaW1pemUgZWRnZSBsZW5ndGhcbiAgICBpZiAodGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5lZGdlTWluaW1pemF0aW9uID09PSB0cnVlKSB7XG4gICAgICBtaW5pbWl6ZUVkZ2VMZW5ndGhCb3R0b21VcCgyMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5oaWVyYXJjaGljYWwucGFyZW50Q2VudHJhbGl6YXRpb24gPT09IHRydWUpIHtcbiAgICAgIGNlbnRlckFsbFBhcmVudHNCb3R0b21VcCgpO1xuICAgIH1cblxuICAgIHNoaWZ0VHJlZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGdpdmVzIHRoZSBzcGFjZSBhcm91bmQgdGhlIG5vZGUuIElGIGEgbWFwIGlzIHN1cHBsaWVkLCBpdCB3aWxsIG9ubHkgY2hlY2sgYWdhaW5zdCBub2RlcyBOT1QgaW4gdGhlIG1hcC5cbiAgICogVGhpcyBpcyB1c2VkIHRvIG9ubHkgZ2V0IHRoZSBkaXN0YW5jZXMgdG8gbm9kZXMgb3V0c2lkZSBvZiBhIGJyYW5jaC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7e05vZGUuaWQ6IHZpcy5Ob2RlfX0gbWFwXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRTcGFjZUFyb3VuZE5vZGUobm9kZSwgbWFwKSB7XG4gICAgbGV0IHVzZU1hcCA9IHRydWU7XG4gICAgaWYgKG1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2VNYXAgPSBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbGV2ZWwgPSB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZS5pZF07XG4gICAgaWYgKGxldmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5oaWVyYXJjaGljYWwuZGlzdHJpYnV0aW9uSW5kZXhbbm9kZS5pZF07XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGUpO1xuICAgICAgY29uc3Qgb3JkZXJpbmcgPSB0aGlzLmhpZXJhcmNoaWNhbC5kaXN0cmlidXRpb25PcmRlcmluZ1tsZXZlbF07XG4gICAgICBsZXQgbWluU3BhY2UgPSAxZTk7XG4gICAgICBsZXQgbWF4U3BhY2UgPSAxZTk7XG4gICAgICBpZiAoaW5kZXggIT09IDApIHtcbiAgICAgICAgY29uc3QgcHJldk5vZGUgPSBvcmRlcmluZ1tpbmRleCAtIDFdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHVzZU1hcCA9PT0gdHJ1ZSAmJiBtYXBbcHJldk5vZGUuaWRdID09PSB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgdXNlTWFwID09PSBmYWxzZVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBwcmV2UG9zID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24ocHJldk5vZGUpO1xuICAgICAgICAgIG1pblNwYWNlID0gcG9zaXRpb24gLSBwcmV2UG9zO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpbmRleCAhPSBvcmRlcmluZy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNvbnN0IG5leHROb2RlID0gb3JkZXJpbmdbaW5kZXggKyAxXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh1c2VNYXAgPT09IHRydWUgJiYgbWFwW25leHROb2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB8fFxuICAgICAgICAgIHVzZU1hcCA9PT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbmV4dFBvcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5leHROb2RlKTtcbiAgICAgICAgICBtYXhTcGFjZSA9IE1hdGgubWluKG1heFNwYWNlLCBuZXh0UG9zIC0gcG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbWluU3BhY2UsIG1heFNwYWNlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFswLCAwXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2UgdXNlIHRoaXMgbWV0aG9kIHRvIGNlbnRlciBhIHBhcmVudCBub2RlIGFuZCBjaGVjayBpZiBpdCBkb2VzIG5vdCBjcm9zcyBvdGhlciBub2RlcyB3aGVuIGl0IGRvZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NlbnRlclBhcmVudChub2RlKSB7XG4gICAgaWYgKHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtub2RlLmlkXSkge1xuICAgICAgY29uc3QgcGFyZW50cyA9IHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtub2RlLmlkXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHBhcmVudHNbaV07XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbcGFyZW50SWRdO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuaGllcmFyY2hpY2FsLmNoaWxkcmVuUmVmZXJlbmNlW3BhcmVudElkXTtcblxuICAgICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIGdldCB0aGUgcmFuZ2Ugb2YgdGhlIGNoaWxkcmVuXG4gICAgICAgICAgY29uc3QgbmV3UG9zaXRpb24gPSB0aGlzLl9nZXRDZW50ZXJQb3NpdGlvbihjaGlsZHJlbik7XG5cbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKHBhcmVudE5vZGUpO1xuICAgICAgICAgIGNvbnN0IFttaW5TcGFjZSwgbWF4U3BhY2VdID0gdGhpcy5fZ2V0U3BhY2VBcm91bmROb2RlKHBhcmVudE5vZGUpO1xuICAgICAgICAgIGNvbnN0IGRpZmYgPSBwb3NpdGlvbiAtIG5ld1Bvc2l0aW9uO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChkaWZmIDwgMCAmJlxuICAgICAgICAgICAgICBNYXRoLmFicyhkaWZmKSA8XG4gICAgICAgICAgICAgICAgbWF4U3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKSB8fFxuICAgICAgICAgICAgKGRpZmYgPiAwICYmXG4gICAgICAgICAgICAgIE1hdGguYWJzKGRpZmYpIDwgbWluU3BhY2UgLSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24uc2V0UG9zaXRpb24ocGFyZW50Tm9kZSwgbmV3UG9zaXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHBsYWNlcyB0aGUgbm9kZXMgb24gdGhlIGNhbnZhcyBiYXNlZCBvbiB0aGUgaGllcmFyY2hpYWwgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZGlzdHJpYnV0aW9uIHwgb2J0YWluZWQgYnkgdGhlIGZ1bmN0aW9uIHRoaXMuX2dldERpc3RyaWJ1dGlvbigpXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGxhY2VOb2Rlc0J5SGllcmFyY2h5KGRpc3RyaWJ1dGlvbikge1xuICAgIHRoaXMucG9zaXRpb25lZE5vZGVzID0ge307XG4gICAgLy8gc3RhcnQgcGxhY2luZyBhbGwgdGhlIGxldmVsIDAgbm9kZXMgZmlyc3QuIFRoZW4gcmVjdXJzaXZlbHkgcG9zaXRpb24gdGhlaXIgYnJhbmNoZXMuXG4gICAgZm9yIChjb25zdCBsZXZlbCBpbiBkaXN0cmlidXRpb24pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGlzdHJpYnV0aW9uLCBsZXZlbCkpIHtcbiAgICAgICAgLy8gc29ydCBub2RlcyBpbiBsZXZlbCBieSBwb3NpdGlvbjpcbiAgICAgICAgbGV0IG5vZGVBcnJheSA9IE9iamVjdC5rZXlzKGRpc3RyaWJ1dGlvbltsZXZlbF0pO1xuICAgICAgICBub2RlQXJyYXkgPSB0aGlzLl9pbmRleEFycmF5VG9Ob2Rlcyhub2RlQXJyYXkpO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbi5zb3J0KG5vZGVBcnJheSk7XG4gICAgICAgIGxldCBoYW5kbGVkTm9kZUNvdW50ID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2RlQXJyYXlbaV07XG4gICAgICAgICAgaWYgKHRoaXMucG9zaXRpb25lZE5vZGVzW25vZGUuaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYWNpbmcgPSB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nO1xuICAgICAgICAgICAgbGV0IHBvcyA9IHNwYWNpbmcgKiBoYW5kbGVkTm9kZUNvdW50O1xuICAgICAgICAgICAgLy8gV2UgZ2V0IHRoZSBYIG9yIFkgdmFsdWVzIHdlIG5lZWQgYW5kIHN0b3JlIHRoZW0gaW4gcG9zIGFuZCBwcmV2aW91c1Bvcy5cbiAgICAgICAgICAgIC8vIFRoZSBnZXQgYW5kIHNldCBtYWtlIHN1cmUgd2UgZ2V0IFggb3IgWVxuICAgICAgICAgICAgaWYgKGhhbmRsZWROb2RlQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgIHBvcyA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKG5vZGVBcnJheVtpIC0gMV0pICsgc3BhY2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKG5vZGUsIHBvcywgbGV2ZWwpO1xuICAgICAgICAgICAgdGhpcy5fdmFsaWRhdGVQb3NpdGlvbkFuZENvbnRpbnVlKG5vZGUsIGxldmVsLCBwb3MpO1xuXG4gICAgICAgICAgICBoYW5kbGVkTm9kZUNvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSByZWN1cnNpdmVseSBjYWxsZWQgZnVuY3Rpb24gdG8gZW51bWVyYXRlIHRoZSBicmFuY2hlcyBmcm9tIHRoZSBsYXJnZXN0IGh1YnMgYW5kIHBsYWNlIHRoZSBub2Rlc1xuICAgKiBvbiBhIFggcG9zaXRpb24gdGhhdCBlbnN1cmVzIHRoZXJlIHdpbGwgYmUgbm8gb3ZlcmxhcC5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBwYXJlbnRJZFxuICAgKiBAcGFyYW0ge251bWJlcn0gcGFyZW50TGV2ZWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wbGFjZUJyYW5jaE5vZGVzKHBhcmVudElkLCBwYXJlbnRMZXZlbCkge1xuICAgIGNvbnN0IGNoaWxkUmVmID0gdGhpcy5oaWVyYXJjaGljYWwuY2hpbGRyZW5SZWZlcmVuY2VbcGFyZW50SWRdO1xuXG4gICAgLy8gaWYgdGhpcyBpcyBub3QgYSBwYXJlbnQsIGNhbmNlbCB0aGUgcGxhY2luZy4gVGhpcyBjYW4gaGFwcGVuIHdpdGggbXVsdGlwbGUgcGFyZW50cyB0byBvbmUgY2hpbGQuXG4gICAgaWYgKGNoaWxkUmVmID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBnZXQgYSBsaXN0IG9mIGNoaWxkTm9kZXNcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZFJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGROb2Rlcy5wdXNoKHRoaXMuYm9keS5ub2Rlc1tjaGlsZFJlZltpXV0pO1xuICAgIH1cblxuICAgIC8vIHVzZSB0aGUgcG9zaXRpb25zIHRvIG9yZGVyIHRoZSBub2Rlcy5cbiAgICB0aGlzLmRpcmVjdGlvbi5zb3J0KGNoaWxkTm9kZXMpO1xuXG4gICAgLy8gcG9zaXRpb24gdGhlIGNoaWxkTm9kZXNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGNoaWxkTm9kZXNbaV07XG4gICAgICBjb25zdCBjaGlsZE5vZGVMZXZlbCA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tjaGlsZE5vZGUuaWRdO1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIGNoaWxkIG5vZGUgaXMgYmVsb3cgdGhlIHBhcmVudCBub2RlIGFuZCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIHBvc2l0aW9uZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoaWxkTm9kZUxldmVsID4gcGFyZW50TGV2ZWwgJiZcbiAgICAgICAgdGhpcy5wb3NpdGlvbmVkTm9kZXNbY2hpbGROb2RlLmlkXSA9PT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgLy8gZ2V0IHRoZSBhbW91bnQgb2Ygc3BhY2UgcmVxdWlyZWQgZm9yIHRoaXMgbm9kZS4gSWYgcGFyZW50IHRoZSB3aWR0aCBpcyBiYXNlZCBvbiB0aGUgYW1vdW50IG9mIGNoaWxkcmVuLlxuICAgICAgICBjb25zdCBzcGFjaW5nID0gdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZztcbiAgICAgICAgbGV0IHBvcztcblxuICAgICAgICAvLyB3ZSBnZXQgdGhlIFggb3IgWSB2YWx1ZXMgd2UgbmVlZCBhbmQgc3RvcmUgdGhlbSBpbiBwb3MgYW5kIHByZXZpb3VzUG9zLlxuICAgICAgICAvLyBUaGUgZ2V0IGFuZCBzZXQgbWFrZSBzdXJlIHdlIGdldCBYIG9yIFlcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICBwb3MgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbih0aGlzLmJvZHkubm9kZXNbcGFyZW50SWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwb3MgPSB0aGlzLmRpcmVjdGlvbi5nZXRQb3NpdGlvbihjaGlsZE5vZGVzW2kgLSAxXSkgKyBzcGFjaW5nO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKGNoaWxkTm9kZSwgcG9zLCBjaGlsZE5vZGVMZXZlbCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25BbmRDb250aW51ZShjaGlsZE5vZGUsIGNoaWxkTm9kZUxldmVsLCBwb3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNlbnRlciB0aGUgcGFyZW50IG5vZGVzLlxuICAgIGNvbnN0IGNlbnRlciA9IHRoaXMuX2dldENlbnRlclBvc2l0aW9uKGNoaWxkTm9kZXMpO1xuICAgIHRoaXMuZGlyZWN0aW9uLnNldFBvc2l0aW9uKHRoaXMuYm9keS5ub2Rlc1twYXJlbnRJZF0sIGNlbnRlciwgcGFyZW50TGV2ZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3Igb3ZlcmxhcCBhbmQgaWYgcmVxdWlyZWQgc2hpZnRzIHRoZSBicmFuY2guIEl0IGFsc28ga2VlcHMgcmVjb3JkcyBvZiBwb3NpdGlvbmVkIG5vZGVzLlxuICAgKiBGaW5hbGx5IGl0IHdpbGwgY2FsbCBfcGxhY2VCcmFuY2hOb2RlcyB0byBwbGFjZSB0aGUgYnJhbmNoIG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF92YWxpZGF0ZVBvc2l0aW9uQW5kQ29udGludWUobm9kZSwgbGV2ZWwsIHBvcykge1xuICAgIC8vIFRoaXMgbWV0aG9kIG9ubHkgd29ya3MgZm9yIGZvcm1hbCB0cmVlcyBhbmQgZm9ybWFsIGZvcmVzdHNcbiAgICAvLyBFYXJseSBleGl0IGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlXG4gICAgaWYgKCF0aGlzLmhpZXJhcmNoaWNhbC5pc1RyZWUpIHJldHVybjtcblxuICAgIC8vIGlmIG92ZXJsYXAgaGFzIGJlZW4gZGV0ZWN0ZWQsIHdlIHNoaWZ0IHRoZSBicmFuY2hcbiAgICBpZiAodGhpcy5sYXN0Tm9kZU9uTGV2ZWxbbGV2ZWxdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzUG9zID0gdGhpcy5kaXJlY3Rpb24uZ2V0UG9zaXRpb24oXG4gICAgICAgIHRoaXMuYm9keS5ub2Rlc1t0aGlzLmxhc3ROb2RlT25MZXZlbFtsZXZlbF1dXG4gICAgICApO1xuICAgICAgaWYgKHBvcyAtIHByZXZpb3VzUG9zIDwgdGhpcy5vcHRpb25zLmhpZXJhcmNoaWNhbC5ub2RlU3BhY2luZykge1xuICAgICAgICBjb25zdCBkaWZmID0gcHJldmlvdXNQb3MgKyB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLm5vZGVTcGFjaW5nIC0gcG9zO1xuICAgICAgICBjb25zdCBzaGFyZWRQYXJlbnQgPSB0aGlzLl9maW5kQ29tbW9uUGFyZW50KFxuICAgICAgICAgIHRoaXMubGFzdE5vZGVPbkxldmVsW2xldmVsXSxcbiAgICAgICAgICBub2RlLmlkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3NoaWZ0QmxvY2soc2hhcmVkUGFyZW50LndpdGhDaGlsZCwgZGlmZik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0Tm9kZU9uTGV2ZWxbbGV2ZWxdID0gbm9kZS5pZDsgLy8gc3RvcmUgY2hhbmdlIGluIHBvc2l0aW9uLlxuICAgIHRoaXMucG9zaXRpb25lZE5vZGVzW25vZGUuaWRdID0gdHJ1ZTtcbiAgICB0aGlzLl9wbGFjZUJyYW5jaE5vZGVzKG5vZGUuaWQsIGxldmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNlaXZlcyBhbiBhcnJheSB3aXRoIG5vZGUgaW5kaWNlcyBhbmQgcmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBhY3R1YWwgbm9kZSByZWZlcmVuY2VzLlxuICAgKiBVc2VkIGZvciBzb3J0aW5nIGJhc2VkIG9uIG5vZGUgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZS5pZD59IGlkQXJyYXlcbiAgICogQHJldHVybnMge0FycmF5LjxOb2RlPn1cbiAgICovXG4gIF9pbmRleEFycmF5VG9Ob2RlcyhpZEFycmF5KSB7XG4gICAgY29uc3QgYXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFycmF5LnB1c2godGhpcy5ib2R5Lm5vZGVzW2lkQXJyYXlbaV1dKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gZ2V0IHRoZSBkaXN0cmlidXRpb24gb2YgbGV2ZWxzIGJhc2VkIG9uIGh1YnNpemVcbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXREaXN0cmlidXRpb24oKSB7XG4gICAgY29uc3QgZGlzdHJpYnV0aW9uID0ge307XG4gICAgbGV0IG5vZGVJZCwgbm9kZTtcblxuICAgIC8vIHdlIGZpeCBZIGJlY2F1c2UgdGhlIGhpZXJhcmNoeSBpcyB2ZXJ0aWNhbCxcbiAgICAvLyB3ZSBmaXggWCBzbyB3ZSBkbyBub3QgZ2l2ZSBhIG5vZGUgYW4geCBwb3NpdGlvbiBmb3IgYSBzZWNvbmQgdGltZS5cbiAgICAvLyB0aGUgZml4IG9mIFggaXMgcmVtb3ZlZCBhZnRlciB0aGUgeCB2YWx1ZSBoYXMgYmVlbiBzZXQuXG4gICAgZm9yIChub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYm9keS5ub2Rlcywgbm9kZUlkKSkge1xuICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW25vZGVJZF07XG4gICAgICAgIGNvbnN0IGxldmVsID1cbiAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbbm9kZUlkXSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogdGhpcy5oaWVyYXJjaGljYWwubGV2ZWxzW25vZGVJZF07XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLmZpeChub2RlLCBsZXZlbCk7XG4gICAgICAgIGlmIChkaXN0cmlidXRpb25bbGV2ZWxdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkaXN0cmlidXRpb25bbGV2ZWxdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgZGlzdHJpYnV0aW9uW2xldmVsXVtub2RlSWRdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpc3RyaWJ1dGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGFjdGl2ZSAoaS5lLiB2aXNpYmxlKSBlZGdlcyBmb3IgdGhpcyBub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHZpcy5FZGdlPn0gQXJyYXkgb2YgZWRnZSBpbnN0YW5jZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRBY3RpdmVFZGdlcyhub2RlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBmb3JFYWNoKG5vZGUuZWRnZXMsIChlZGdlKSA9PiB7XG4gICAgICBpZiAodGhpcy5ib2R5LmVkZ2VJbmRpY2VzLmluZGV4T2YoZWRnZS5pZCkgIT09IC0xKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVkZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1YnNpemVzIGZvciBhbGwgYWN0aXZlIG5vZGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEh1YlNpemVzKCkge1xuICAgIGNvbnN0IGh1YlNpemVzID0ge307XG4gICAgY29uc3Qgbm9kZUlkcyA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcblxuICAgIGZvckVhY2gobm9kZUlkcywgKG5vZGVJZCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICAgICAgY29uc3QgaHViU2l6ZSA9IHRoaXMuX2dldEFjdGl2ZUVkZ2VzKG5vZGUpLmxlbmd0aDtcbiAgICAgIGh1YlNpemVzW2h1YlNpemVdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIC8vIE1ha2UgYW4gYXJyYXkgb2YgdGhlIHNpemUgc29ydGVkIGRlc2NlbmRpbmdcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3JFYWNoKGh1YlNpemVzLCAoc2l6ZSkgPT4ge1xuICAgICAgcmVzdWx0LnB1c2goTnVtYmVyKHNpemUpKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYiAtIGE7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIG5vZGVzIGluIGxldmVscyBiYXNlZCBvbiB0aGUgcmVjdXJzaXZlIGJyYW5jaGluZyBmcm9tIHRoZSBsYXJnZXN0IGh1YnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lTGV2ZWxzQnlIdWJzaXplKCkge1xuICAgIGNvbnN0IGxldmVsRG93bnN0cmVhbSA9IChub2RlQSwgbm9kZUIpID0+IHtcbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsRG93bnN0cmVhbShub2RlQSwgbm9kZUIpO1xuICAgIH07XG5cbiAgICBjb25zdCBodWJTaXplcyA9IHRoaXMuX2dldEh1YlNpemVzKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGh1YlNpemVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBodWJTaXplID0gaHViU2l6ZXNbaV07XG4gICAgICBpZiAoaHViU2l6ZSA9PT0gMCkgYnJlYWs7XG5cbiAgICAgIGZvckVhY2godGhpcy5ib2R5Lm5vZGVJbmRpY2VzLCAobm9kZUlkKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcblxuICAgICAgICBpZiAoaHViU2l6ZSA9PT0gdGhpcy5fZ2V0QWN0aXZlRWRnZXMobm9kZSkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5fY3Jhd2xOZXR3b3JrKGxldmVsRG93bnN0cmVhbSwgbm9kZUlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRPRE86IHJlbGVhc2UgZmVhdHVyZVxuICAgKiBUT0RPOiBEZXRlcm1pbmUgaWYgdGhpcyBmZWF0dXJlIGlzIG5lZWRlZCBhdCBhbGxcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kZXRlcm1pbmVMZXZlbHNDdXN0b21DYWxsYmFjaygpIHtcbiAgICBjb25zdCBtaW5MZXZlbCA9IDEwMDAwMDtcblxuICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGNvbWUgZnJvbSBvcHRpb25zLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSBUaGlzIHNob3VsZCBldmVudHVhbGx5IGJlIGltcGxlbWVudGVkIHdpdGggdGhlc2UgcGFyYW1ldGVycyB1c2VkLlxuICAgIGNvbnN0IGN1c3RvbUNhbGxiYWNrID0gZnVuY3Rpb24gKG5vZGVBLCBub2RlQiwgZWRnZSkge307XG5cbiAgICAvLyBUT0RPOiBwZXJoYXBzIG1vdmUgdG8gSGllcmFyY2hpY2FsU3RhdHVzLlxuICAgIC8vICAgICAgIEJ1dCBJIGN1cnJlbnRseSBkb24ndCBzZWUgdGhlIHBvaW50LCB0aGlzIG1ldGhvZCBpcyBub3QgdXNlZC5cbiAgICBjb25zdCBsZXZlbEJ5RGlyZWN0aW9uID0gKG5vZGVBLCBub2RlQiwgZWRnZSkgPT4ge1xuICAgICAgbGV0IGxldmVsQSA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlQS5pZF07XG4gICAgICAvLyBzZXQgaW5pdGlhbCBsZXZlbFxuICAgICAgaWYgKGxldmVsQSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldmVsQSA9IHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlQS5pZF0gPSBtaW5MZXZlbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGlmZiA9IGN1c3RvbUNhbGxiYWNrKFxuICAgICAgICBOZXR3b3JrVXRpbC5jbG9uZU9wdGlvbnMobm9kZUEsIFwibm9kZVwiKSxcbiAgICAgICAgTmV0d29ya1V0aWwuY2xvbmVPcHRpb25zKG5vZGVCLCBcIm5vZGVcIiksXG4gICAgICAgIE5ldHdvcmtVdGlsLmNsb25lT3B0aW9ucyhlZGdlLCBcImVkZ2VcIilcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1tub2RlQi5pZF0gPSBsZXZlbEEgKyBkaWZmO1xuICAgIH07XG5cbiAgICB0aGlzLl9jcmF3bE5ldHdvcmsobGV2ZWxCeURpcmVjdGlvbik7XG4gICAgdGhpcy5oaWVyYXJjaGljYWwuc2V0TWluTGV2ZWxUb1plcm8odGhpcy5ib2R5Lm5vZGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvY2F0ZSBub2RlcyBpbiBsZXZlbHMgYmFzZWQgb24gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZWRnZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGV0ZXJtaW5lTGV2ZWxzRGlyZWN0ZWQoKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZUluZGljZXMucmVkdWNlKChhY2MsIGlkKSA9PiB7XG4gICAgICBhY2Muc2V0KGlkLCB0aGlzLmJvZHkubm9kZXNbaWRdKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3IE1hcCgpKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLnNoYWtlVG93YXJkcyA9PT0gXCJyb290c1wiKSB7XG4gICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHMgPSBmaWxsTGV2ZWxzQnlEaXJlY3Rpb25Sb290cyhub2Rlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVscyA9IGZpbGxMZXZlbHNCeURpcmVjdGlvbkxlYXZlcyhub2Rlcyk7XG4gICAgfVxuXG4gICAgdGhpcy5oaWVyYXJjaGljYWwuc2V0TWluTGV2ZWxUb1plcm8odGhpcy5ib2R5Lm5vZGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGJvb2trZWVwaW5nIG9mIHBhcmVudCBhbmQgY2hpbGQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2VuZXJhdGVNYXAoKSB7XG4gICAgY29uc3QgZmlsbEluUmVsYXRpb25zID0gKHBhcmVudE5vZGUsIGNoaWxkTm9kZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbC5sZXZlbHNbY2hpbGROb2RlLmlkXSA+XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmxldmVsc1twYXJlbnROb2RlLmlkXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLmFkZFJlbGF0aW9uKHBhcmVudE5vZGUuaWQsIGNoaWxkTm9kZS5pZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX2NyYXdsTmV0d29yayhmaWxsSW5SZWxhdGlvbnMpO1xuICAgIHRoaXMuaGllcmFyY2hpY2FsLmNoZWNrSWZUcmVlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3Jhd2wgb3ZlciB0aGUgZW50aXJlIG5ldHdvcmsgYW5kIHVzZSBhIGNhbGxiYWNrIG9uIGVhY2ggbm9kZSBjb3VwbGUgdGhhdCBpcyBjb25uZWN0ZWQgdG8gZWFjaCBvdGhlci5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrPWZ1bmN0aW9uKCl7fV0gICAgICAgICAgfCB3aWxsIHJlY2VpdmUgbm9kZUEsIG5vZGVCIGFuZCB0aGUgY29ubmVjdGluZyBlZGdlLiBBIGFuZCBCIGFyZSBkaXN0aW5jdC5cbiAgICogQHBhcmFtIHtOb2RlLmlkfSBzdGFydGluZ05vZGVJZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyYXdsTmV0d29yayhjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHt9LCBzdGFydGluZ05vZGVJZCkge1xuICAgIGNvbnN0IHByb2dyZXNzID0ge307XG5cbiAgICBjb25zdCBjcmF3bGVyID0gKG5vZGUsIHRyZWUpID0+IHtcbiAgICAgIGlmIChwcm9ncmVzc1tub2RlLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaGllcmFyY2hpY2FsLnNldFRyZWVJbmRleChub2RlLCB0cmVlKTtcblxuICAgICAgICBwcm9ncmVzc1tub2RlLmlkXSA9IHRydWU7XG4gICAgICAgIGxldCBjaGlsZE5vZGU7XG4gICAgICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5fZ2V0QWN0aXZlRWRnZXMobm9kZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBlZGdlID0gZWRnZXNbaV07XG4gICAgICAgICAgaWYgKGVkZ2UuY29ubmVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAoZWRnZS50b0lkID09IG5vZGUuaWQpIHtcbiAgICAgICAgICAgICAgLy8gTm90ICc9PT0nIGJlY2F1c2UgaWQncyBjYW4gYmUgc3RyaW5nIGFuZCBudW1lcmljXG4gICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGVkZ2UuZnJvbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGVkZ2UudG87XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlLmlkICE9IGNoaWxkTm9kZS5pZCkge1xuICAgICAgICAgICAgICAvLyBOb3QgJyE9PScgYmVjYXVzZSBpZCdzIGNhbiBiZSBzdHJpbmcgYW5kIG51bWVyaWNcbiAgICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgY2hpbGROb2RlLCBlZGdlKTtcbiAgICAgICAgICAgICAgY3Jhd2xlcihjaGlsZE5vZGUsIHRyZWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3RhcnRpbmdOb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQ3Jhd2wgb3ZlciBhbGwgbm9kZXNcbiAgICAgIGxldCB0cmVlSW5kZXggPSAwOyAvLyBTZXJ2ZXMgdG8gcGFzcyBhIHVuaXF1ZSBpZCBmb3IgdGhlIGN1cnJlbnQgZGlzdGluY3QgdHJlZVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm9keS5ub2RlSW5kaWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlSWQgPSB0aGlzLmJvZHkubm9kZUluZGljZXNbaV07XG5cbiAgICAgICAgaWYgKHByb2dyZXNzW25vZGVJZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbbm9kZUlkXTtcbiAgICAgICAgICBjcmF3bGVyKG5vZGUsIHRyZWVJbmRleCk7XG4gICAgICAgICAgdHJlZUluZGV4ICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3Jhd2wgZnJvbSB0aGUgZ2l2ZW4gc3RhcnRpbmcgbm9kZVxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuYm9keS5ub2Rlc1tzdGFydGluZ05vZGVJZF07XG4gICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb2RlIG5vdCBmb3VuZDpcIiwgc3RhcnRpbmdOb2RlSWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjcmF3bGVyKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaGlmdCBhIGJyYW5jaCBhIGNlcnRhaW4gZGlzdGFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBwYXJlbnRJZFxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlmZlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NoaWZ0QmxvY2socGFyZW50SWQsIGRpZmYpIHtcbiAgICBjb25zdCBwcm9ncmVzcyA9IHt9O1xuICAgIGNvbnN0IHNoaWZ0ZXIgPSAocGFyZW50SWQpID0+IHtcbiAgICAgIGlmIChwcm9ncmVzc1twYXJlbnRJZF0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcHJvZ3Jlc3NbcGFyZW50SWRdID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGlyZWN0aW9uLnNoaWZ0KHBhcmVudElkLCBkaWZmKTtcblxuICAgICAgY29uc3QgY2hpbGRSZWYgPSB0aGlzLmhpZXJhcmNoaWNhbC5jaGlsZHJlblJlZmVyZW5jZVtwYXJlbnRJZF07XG4gICAgICBpZiAoY2hpbGRSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkUmVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgc2hpZnRlcihjaGlsZFJlZltpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHNoaWZ0ZXIocGFyZW50SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBjb21tb24gcGFyZW50IGJldHdlZW4gYnJhbmNoZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gY2hpbGRBXG4gICAqIEBwYXJhbSB7Tm9kZS5pZH0gY2hpbGRCXG4gICAqIEByZXR1cm5zIHt7Zm91bmRQYXJlbnQsIHdpdGhDaGlsZH19XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluZENvbW1vblBhcmVudChjaGlsZEEsIGNoaWxkQikge1xuICAgIGNvbnN0IHBhcmVudHMgPSB7fTtcbiAgICBjb25zdCBpdGVyYXRlUGFyZW50cyA9IChwYXJlbnRzLCBjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50UmVmID0gdGhpcy5oaWVyYXJjaGljYWwucGFyZW50UmVmZXJlbmNlW2NoaWxkXTtcbiAgICAgIGlmIChwYXJlbnRSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudFJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudFJlZltpXTtcbiAgICAgICAgICBwYXJlbnRzW3BhcmVudF0gPSB0cnVlO1xuICAgICAgICAgIGl0ZXJhdGVQYXJlbnRzKHBhcmVudHMsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXJlbnQgPSAocGFyZW50cywgY2hpbGQpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudFJlZiA9IHRoaXMuaGllcmFyY2hpY2FsLnBhcmVudFJlZmVyZW5jZVtjaGlsZF07XG4gICAgICBpZiAocGFyZW50UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnRSZWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRSZWZbaV07XG4gICAgICAgICAgaWYgKHBhcmVudHNbcGFyZW50XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBmb3VuZFBhcmVudDogcGFyZW50LCB3aXRoQ2hpbGQ6IGNoaWxkIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGJyYW5jaCA9IGZpbmRQYXJlbnQocGFyZW50cywgcGFyZW50KTtcbiAgICAgICAgICBpZiAoYnJhbmNoLmZvdW5kUGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYnJhbmNoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZm91bmRQYXJlbnQ6IG51bGwsIHdpdGhDaGlsZDogY2hpbGQgfTtcbiAgICB9O1xuXG4gICAgaXRlcmF0ZVBhcmVudHMocGFyZW50cywgY2hpbGRBKTtcbiAgICByZXR1cm4gZmluZFBhcmVudChwYXJlbnRzLCBjaGlsZEIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3RyYXRlZ3kgcGF0dGVybiBmb3IgaGFuZGxpbmcgdGhlIGNvb3JkaW5hdGVzIGdpdmVuIHRoZSBjdXJyZW50IGRpcmVjdGlvbi5cbiAgICpcbiAgICogVGhlIGluZGl2aWR1YWwgaW5zdGFuY2VzIGNvbnRhaW4gYWxsIHRoZSBvcGVyYXRpb25zIGFuZCBkYXRhIHNwZWNpZmljIHRvIGEgbGF5b3V0IGRpcmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7e3g6IG51bWJlciwgeTogbnVtYmVyfX0gcG9zaXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvTm90VXBkYXRlPWZhbHNlXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0RGlyZWN0aW9uU3RyYXRlZ3koKSB7XG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9XG4gICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmRpcmVjdGlvbiA9PT0gXCJVRFwiIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuaGllcmFyY2hpY2FsLmRpcmVjdGlvbiA9PT0gXCJEVVwiO1xuXG4gICAgaWYgKGlzVmVydGljYWwpIHtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gbmV3IFZlcnRpY2FsU3RyYXRlZ3kodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gbmV3IEhvcml6b250YWxTdHJhdGVneSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBjZW50ZXIgcG9zaXRpb24gb2YgYSBicmFuY2ggZnJvbSB0aGUgcGFzc2VkIGxpc3Qgb2YgY2hpbGQgbm9kZXNcbiAgICpcbiAgICogVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHBvc2l0aW9ucyBvZiBhbGwgdGhlIGNoaWxkIG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlfHZpcy5Ob2RlLmlkPn0gY2hpbGROb2RlcyAgQXJyYXkgb2YgZWl0aGVyIGNoaWxkIG5vZGVzIG9yIG5vZGUgaWQnc1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldENlbnRlclBvc2l0aW9uKGNoaWxkTm9kZXMpIHtcbiAgICBsZXQgbWluUG9zID0gMWU5O1xuICAgIGxldCBtYXhQb3MgPSAtMWU5O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2hpbGROb2RlO1xuICAgICAgaWYgKGNoaWxkTm9kZXNbaV0uaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlSWQgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgICBjaGlsZE5vZGUgPSB0aGlzLmJvZHkubm9kZXNbY2hpbGROb2RlSWRdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmdldFBvc2l0aW9uKGNoaWxkTm9kZSk7XG4gICAgICBtaW5Qb3MgPSBNYXRoLm1pbihtaW5Qb3MsIHBvc2l0aW9uKTtcbiAgICAgIG1heFBvcyA9IE1hdGgubWF4KG1heFBvcywgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiAwLjUgKiAobWluUG9zICsgbWF4UG9zKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMYXlvdXRFbmdpbmU7XG4iLCAiaW1wb3J0IFwiLi9NYW5pcHVsYXRpb25TeXN0ZW0uY3NzXCI7XG5cbmltcG9ydCB7IEhhbW1lciwgZGVlcEV4dGVuZCwgcmVjdXJzaXZlRE9NRGVsZXRlIH0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgdjQgYXMgcmFuZG9tVVVJRCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBvblRvdWNoIH0gZnJvbSBcIi4uLy4uL2hhbW1lclV0aWxcIjtcblxuLyoqXG4gKiBDbGVhcnMgdGhlIHRvb2xiYXIgZGl2IGVsZW1lbnQgb2YgY2hpbGRyZW5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBNYW5pcHVsYXRpb25TeXN0ZW0ge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtDYW52YXN9IGNhbnZhc1xuICAgKiBAcGFyYW0ge1NlbGVjdGlvbkhhbmRsZXJ9IHNlbGVjdGlvbkhhbmRsZXJcbiAgICogQHBhcmFtIHtJbnRlcmFjdGlvbkhhbmRsZXJ9IGludGVyYWN0aW9uSGFuZGxlclxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgY2FudmFzLCBzZWxlY3Rpb25IYW5kbGVyLCBpbnRlcmFjdGlvbkhhbmRsZXIpIHtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuY2FudmFzID0gY2FudmFzO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IHNlbGVjdGlvbkhhbmRsZXI7XG4gICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIgPSBpbnRlcmFjdGlvbkhhbmRsZXI7XG5cbiAgICB0aGlzLmVkaXRNb2RlID0gZmFsc2U7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0TW9kZURpdiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNsb3NlRGl2ID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5fZG9tRXZlbnRMaXN0ZW5lckNsZWFudXBRdWV1ZSA9IFtdO1xuICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnMgPSB7fTtcbiAgICB0aGlzLnRlbXBvcmFyeUV2ZW50RnVuY3Rpb25zID0gW107XG5cbiAgICB0aGlzLnRvdWNoVGltZSA9IDA7XG4gICAgdGhpcy50ZW1wb3JhcnlJZHMgPSB7IG5vZGVzOiBbXSwgZWRnZXM6IFtdIH07XG4gICAgdGhpcy5ndWlFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5pbk1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBpbml0aWFsbHlBY3RpdmU6IGZhbHNlLFxuICAgICAgYWRkTm9kZTogdHJ1ZSxcbiAgICAgIGFkZEVkZ2U6IHRydWUsXG4gICAgICBlZGl0Tm9kZTogdW5kZWZpbmVkLFxuICAgICAgZWRpdEVkZ2U6IHRydWUsXG4gICAgICBkZWxldGVOb2RlOiB0cnVlLFxuICAgICAgZGVsZXRlRWRnZTogdHJ1ZSxcbiAgICAgIGNvbnRyb2xOb2RlU3R5bGU6IHtcbiAgICAgICAgc2hhcGU6IFwiZG90XCIsXG4gICAgICAgIHNpemU6IDYsXG4gICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgYmFja2dyb3VuZDogXCIjZmYwMDAwXCIsXG4gICAgICAgICAgYm9yZGVyOiBcIiMzYzNjM2NcIixcbiAgICAgICAgICBoaWdobGlnaHQ6IHsgYmFja2dyb3VuZDogXCIjMDdmOTY4XCIsIGJvcmRlcjogXCIjM2MzYzNjXCIgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYm9yZGVyV2lkdGg6IDIsXG4gICAgICAgIGJvcmRlcldpZHRoU2VsZWN0ZWQ6IDIsXG4gICAgICB9LFxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdGlvbnMsIHRoaXMuZGVmYXVsdE9wdGlvbnMpO1xuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJkZXN0cm95XCIsICgpID0+IHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgfSk7XG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIub24oXCJfZGF0YUNoYW5nZWRcIiwgdGhpcy5fcmVzdG9yZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9yZXNldERhdGFcIiwgdGhpcy5fcmVzdG9yZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBzb21ldGhpbmcgY2hhbmdlcyBpbiB0aGUgZGF0YSBkdXJpbmcgZWRpdGluZywgc3dpdGNoIGJhY2sgdG8gdGhlIGluaXRpYWwgZGF0YW1hbmlwdWxhdGlvbiBzdGF0ZSBhbmQgY2xvc2UgYWxsIGVkaXQgbW9kZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzdG9yZSgpIHtcbiAgICBpZiAodGhpcy5pbk1vZGUgIT09IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmluaXRpYWxseUFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc2FibGVFZGl0TW9kZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIE9wdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGFsbE9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbE9wdGlvbnNcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucywgYWxsT3B0aW9ucywgZ2xvYmFsT3B0aW9ucykge1xuICAgIGlmIChhbGxPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChhbGxPcHRpb25zLmxvY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGUgPSBhbGxPcHRpb25zLmxvY2FsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGUgPSBnbG9iYWxPcHRpb25zLmxvY2FsZTtcbiAgICAgIH1cbiAgICAgIGlmIChhbGxPcHRpb25zLmxvY2FsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlcyA9IGFsbE9wdGlvbnMubG9jYWxlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzID0gZ2xvYmFsT3B0aW9ucy5sb2NhbGVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICBkZWVwRXh0ZW5kKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmluaXRpYWxseUFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NldHVwKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGVkaXQtbW9kZS4gRHJhd3MgdGhlIERPTSByZXF1aXJlZCBhbmQgY2xlYW5zIHVwIGFmdGVyIGl0c2VsZi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRvZ2dsZUVkaXRNb2RlKCkge1xuICAgIGlmICh0aGlzLmVkaXRNb2RlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmRpc2FibGVFZGl0TW9kZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgRWRpdCBNb2RlXG4gICAqL1xuICBlbmFibGVFZGl0TW9kZSgpIHtcbiAgICB0aGlzLmVkaXRNb2RlID0gdHJ1ZTtcblxuICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuY2xvc2VEaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuZWRpdE1vZGVEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIEVkaXQgTW9kZVxuICAgKi9cbiAgZGlzYWJsZUVkaXRNb2RlKCkge1xuICAgIHRoaXMuZWRpdE1vZGUgPSBmYWxzZTtcblxuICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgdGhpcy5jbG9zZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICB0aGlzLmVkaXRNb2RlRGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLl9jcmVhdGVFZGl0QnV0dG9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIG1haW4gdG9vbGJhci4gUmVtb3ZlcyBmdW5jdGlvbnMgYm91bmQgdG8gdGhlIHNlbGVjdCBldmVudC4gQmluZHMgYWxsIHRoZSBidXR0b25zIG9mIHRoZSB0b29sYmFyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpIHtcbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICAvLyByZXNldCBnbG9iYWwgdmFyaWFibGVzXG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcblxuICAgIC8vIGlmIHRoZSBndWkgaXMgZW5hYmxlZCwgZHJhdyBhbGwgZWxlbWVudHMuXG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gYSBfcmVzdG9yZSB3aWxsIGhpZGUgdGhlc2UgbWVudXNcbiAgICAgIHRoaXMuZWRpdE1vZGUgPSB0cnVlO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuY2xvc2VEaXYuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuICAgICAgY29uc3Qgc2VsZWN0ZWROb2RlQ291bnQgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlQ291bnQoKTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRWRnZUNvdW50ID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkRWRnZUNvdW50KCk7XG4gICAgICBjb25zdCBzZWxlY3RlZFRvdGFsQ291bnQgPSBzZWxlY3RlZE5vZGVDb3VudCArIHNlbGVjdGVkRWRnZUNvdW50O1xuICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV07XG4gICAgICBsZXQgbmVlZFNlcGVyYXRvciA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFkZE5vZGUgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUFkZE5vZGVCdXR0b24obG9jYWxlKTtcbiAgICAgICAgbmVlZFNlcGVyYXRvciA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFkZEVkZ2UgIT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChuZWVkU2VwZXJhdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5fY3JlYXRlU2VwZXJhdG9yKDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5lZWRTZXBlcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NyZWF0ZUFkZEVkZ2VCdXR0b24obG9jYWxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RlZE5vZGVDb3VudCA9PT0gMSAmJlxuICAgICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLmVkaXROb2RlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICkge1xuICAgICAgICBpZiAobmVlZFNlcGVyYXRvciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZWVkU2VwZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jcmVhdGVFZGl0Tm9kZUJ1dHRvbihsb2NhbGUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc2VsZWN0ZWRFZGdlQ291bnQgPT09IDEgJiZcbiAgICAgICAgc2VsZWN0ZWROb2RlQ291bnQgPT09IDAgJiZcbiAgICAgICAgdGhpcy5vcHRpb25zLmVkaXRFZGdlICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZWVkU2VwZXJhdG9yID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5fY3JlYXRlU2VwZXJhdG9yKDMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5lZWRTZXBlcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NyZWF0ZUVkaXRFZGdlQnV0dG9uKGxvY2FsZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlbW92ZSBidXR0b25zXG4gICAgICBpZiAoc2VsZWN0ZWRUb3RhbENvdW50ICE9PSAwKSB7XG4gICAgICAgIGlmIChzZWxlY3RlZE5vZGVDb3VudCA+IDAgJiYgdGhpcy5vcHRpb25zLmRlbGV0ZU5vZGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKG5lZWRTZXBlcmF0b3IgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcig0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fY3JlYXRlRGVsZXRlQnV0dG9uKGxvY2FsZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgc2VsZWN0ZWROb2RlQ291bnQgPT09IDAgJiZcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZGVsZXRlRWRnZSAhPT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKG5lZWRTZXBlcmF0b3IgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcig0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fY3JlYXRlRGVsZXRlQnV0dG9uKGxvY2FsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuXG4gICAgICAvLyByZWZyZXNoIHRoaXMgYmFyIGJhc2VkIG9uIHdoYXQgaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRFdmVudChcbiAgICAgICAgXCJzZWxlY3RcIixcbiAgICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyLmJpbmQodGhpcylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gcmVkcmF3IHRvIHNob3cgYW55IHBvc3NpYmxlIGNoYW5nZXNcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIHRvb2xiYXIgZm9yIGFkZGluZyBOb2Rlc1xuICAgKi9cbiAgYWRkTm9kZU1vZGUoKSB7XG4gICAgLy8gd2hlbiB1c2luZyB0aGUgZ3VpLCBlbmFibGUgZWRpdCBtb2RlIGlmIGl0IHdhc250IGFscmVhZHkuXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICB0aGlzLmluTW9kZSA9IFwiYWRkTm9kZVwiO1xuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcbiAgICAgIHRoaXMuX2NyZWF0ZUJhY2tCdXR0b24obG9jYWxlKTtcbiAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigpO1xuICAgICAgdGhpcy5fY3JlYXRlRGVzY3JpcHRpb24oXG4gICAgICAgIGxvY2FsZVtcImFkZERlc2NyaXB0aW9uXCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJhZGREZXNjcmlwdGlvblwiXVxuICAgICAgKTtcblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRFdmVudChcImNsaWNrXCIsIHRoaXMuX3BlcmZvcm1BZGROb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGwgdGhlIGJvdW5kIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZWRpdGluZyBvZiB0aGUgbm9kZS4gVGhlIG5vZGUgaGFzIHRvIGJlIHNlbGVjdGVkLlxuICAgKi9cbiAgZWRpdE5vZGUoKSB7XG4gICAgLy8gd2hlbiB1c2luZyB0aGUgZ3VpLCBlbmFibGUgZWRpdCBtb2RlIGlmIGl0IHdhc250IGFscmVhZHkuXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICB9XG5cbiAgICAvLyByZXN0b3JlIHRoZSBzdGF0ZSBvZiBhbnkgYm91bmQgZnVuY3Rpb25zIG9yIGV2ZW50cywgcmVtb3ZlIGNvbnRyb2wgbm9kZXMsIHJlc3RvcmUgcGh5c2ljc1xuICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZE5vZGVzKClbMF07XG4gICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbk1vZGUgPSBcImVkaXROb2RlXCI7XG4gICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5lZGl0Tm9kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGlmIChub2RlLmlzQ2x1c3RlciAhPT0gdHJ1ZSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBkZWVwRXh0ZW5kKHt9LCBub2RlLm9wdGlvbnMsIGZhbHNlKTtcbiAgICAgICAgICBkYXRhLnggPSBub2RlLng7XG4gICAgICAgICAgZGF0YS55ID0gbm9kZS55O1xuXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lZGl0Tm9kZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5lZGl0Tm9kZShkYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaW5Nb2RlID09PSBcImVkaXROb2RlXCJcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLnVwZGF0ZShmaW5hbGl6ZWREYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBlZGl0IGRvZXMgbm90IHN1cHBvcnQgdHdvIGFyZ3VtZW50cyAoZGF0YSwgY2FsbGJhY2spXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFsZXJ0KFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV1bXCJlZGl0Q2x1c3RlckVycm9yXCJdIHx8XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJlZGl0Q2x1c3RlckVycm9yXCJdXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiTm8gZnVuY3Rpb24gaGFzIGJlZW4gY29uZmlndXJlZCB0byBoYW5kbGUgdGhlIGVkaXRpbmcgb2Ygbm9kZXMuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSB0aGUgdG9vbGJhciB0byBjb25uZWN0IG5vZGVzXG4gICAqL1xuICBhZGRFZGdlTW9kZSgpIHtcbiAgICAvLyB3aGVuIHVzaW5nIHRoZSBndWksIGVuYWJsZSBlZGl0IG1vZGUgaWYgaXQgd2FzbnQgYWxyZWFkeS5cbiAgICBpZiAodGhpcy5lZGl0TW9kZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgdGhlIHN0YXRlIG9mIGFueSBib3VuZCBmdW5jdGlvbnMgb3IgZXZlbnRzLCByZW1vdmUgY29udHJvbCBub2RlcywgcmVzdG9yZSBwaHlzaWNzXG4gICAgdGhpcy5fY2xlYW4oKTtcblxuICAgIHRoaXMuaW5Nb2RlID0gXCJhZGRFZGdlXCI7XG4gICAgaWYgKHRoaXMuZ3VpRW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV07XG4gICAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTSA9IHt9O1xuICAgICAgdGhpcy5fY3JlYXRlQmFja0J1dHRvbihsb2NhbGUpO1xuICAgICAgdGhpcy5fY3JlYXRlU2VwZXJhdG9yKCk7XG4gICAgICB0aGlzLl9jcmVhdGVEZXNjcmlwdGlvbihcbiAgICAgICAgbG9jYWxlW1wiZWRnZURlc2NyaXB0aW9uXCJdIHx8XG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImVkZ2VEZXNjcmlwdGlvblwiXVxuICAgICAgKTtcblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIC8vIHRlbXBvcmFyaWx5IG92ZXJsb2FkIGZ1bmN0aW9uc1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uVG91Y2hcIiwgdGhpcy5faGFuZGxlQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkRyYWdFbmRcIiwgdGhpcy5fZmluaXNoQ29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkRyYWdcIiwgdGhpcy5fZHJhZ0NvbnRyb2xOb2RlLmJpbmQodGhpcykpO1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uUmVsZWFzZVwiLCB0aGlzLl9maW5pc2hDb25uZWN0LmJpbmQodGhpcykpO1xuICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uRHJhZ1N0YXJ0XCIsIHRoaXMuX2RyYWdTdGFydEVkZ2UuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25Ib2xkXCIsICgpID0+IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgdGhlIHRvb2xiYXIgdG8gZWRpdCBlZGdlc1xuICAgKi9cbiAgZWRpdEVkZ2VNb2RlKCkge1xuICAgIC8vIHdoZW4gdXNpbmcgdGhlIGd1aSwgZW5hYmxlIGVkaXQgbW9kZSBpZiBpdCB3YXNuJ3QgYWxyZWFkeS5cbiAgICBpZiAodGhpcy5lZGl0TW9kZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgIH1cblxuICAgIC8vIHJlc3RvcmUgdGhlIHN0YXRlIG9mIGFueSBib3VuZCBmdW5jdGlvbnMgb3IgZXZlbnRzLCByZW1vdmUgY29udHJvbCBub2RlcywgcmVzdG9yZSBwaHlzaWNzXG4gICAgdGhpcy5fY2xlYW4oKTtcblxuICAgIHRoaXMuaW5Nb2RlID0gXCJlZGl0RWRnZVwiO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB0aGlzLm9wdGlvbnMuZWRpdEVkZ2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHR5cGVvZiB0aGlzLm9wdGlvbnMuZWRpdEVkZ2UuZWRpdFdpdGhvdXREcmFnID09PSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWRFZGdlSWRzKClbMF07XG4gICAgICBpZiAodGhpcy5lZGdlQmVpbmdFZGl0ZWRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy5lZGdlQmVpbmdFZGl0ZWRJZF07XG4gICAgICAgIHRoaXMuX3BlcmZvcm1FZGl0RWRnZShlZGdlLmZyb20uaWQsIGVkZ2UudG8uaWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmd1aUVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGxvY2FsZSA9IHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25ET00gPSB7fTtcbiAgICAgIHRoaXMuX2NyZWF0ZUJhY2tCdXR0b24obG9jYWxlKTtcbiAgICAgIHRoaXMuX2NyZWF0ZVNlcGVyYXRvcigpO1xuICAgICAgdGhpcy5fY3JlYXRlRGVzY3JpcHRpb24oXG4gICAgICAgIGxvY2FsZVtcImVkaXRFZGdlRGVzY3JpcHRpb25cIl0gfHxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdEVkZ2VEZXNjcmlwdGlvblwiXVxuICAgICAgKTtcblxuICAgICAgLy8gYmluZCB0aGUgY2xvc2UgYnV0dG9uXG4gICAgICB0aGlzLl9iaW5kRWxlbWVudEV2ZW50cyh0aGlzLmNsb3NlRGl2LCB0aGlzLnRvZ2dsZUVkaXRNb2RlLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWRFZGdlSWRzKClbMF07XG4gICAgaWYgKHRoaXMuZWRnZUJlaW5nRWRpdGVkSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1t0aGlzLmVkZ2VCZWluZ0VkaXRlZElkXTtcblxuICAgICAgLy8gY3JlYXRlIGNvbnRyb2wgbm9kZXNcbiAgICAgIGNvbnN0IGNvbnRyb2xOb2RlRnJvbSA9IHRoaXMuX2dldE5ld1RhcmdldE5vZGUoZWRnZS5mcm9tLngsIGVkZ2UuZnJvbS55KTtcbiAgICAgIGNvbnN0IGNvbnRyb2xOb2RlVG8gPSB0aGlzLl9nZXROZXdUYXJnZXROb2RlKGVkZ2UudG8ueCwgZWRnZS50by55KTtcblxuICAgICAgdGhpcy50ZW1wb3JhcnlJZHMubm9kZXMucHVzaChjb250cm9sTm9kZUZyb20uaWQpO1xuICAgICAgdGhpcy50ZW1wb3JhcnlJZHMubm9kZXMucHVzaChjb250cm9sTm9kZVRvLmlkKTtcblxuICAgICAgdGhpcy5ib2R5Lm5vZGVzW2NvbnRyb2xOb2RlRnJvbS5pZF0gPSBjb250cm9sTm9kZUZyb207XG4gICAgICB0aGlzLmJvZHkubm9kZUluZGljZXMucHVzaChjb250cm9sTm9kZUZyb20uaWQpO1xuICAgICAgdGhpcy5ib2R5Lm5vZGVzW2NvbnRyb2xOb2RlVG8uaWRdID0gY29udHJvbE5vZGVUbztcbiAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5wdXNoKGNvbnRyb2xOb2RlVG8uaWQpO1xuXG4gICAgICAvLyB0ZW1wb3JhcmlseSBvdmVybG9hZCBVSSBmdW5jdGlvbnMsIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSBiZWNhdXNlIG9mIF90ZW1wb3JhcnlCaW5kVUlcbiAgICAgIHRoaXMuX3RlbXBvcmFyeUJpbmRVSShcIm9uVG91Y2hcIiwgdGhpcy5fY29udHJvbE5vZGVUb3VjaC5iaW5kKHRoaXMpKTsgLy8gdXNlZCB0byBnZXQgdGhlIHBvc2l0aW9uXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvblRhcFwiLCAoKSA9PiB7fSk7IC8vIGRpc2FibGVkXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbkhvbGRcIiwgKCkgPT4ge30pOyAvLyBkaXNhYmxlZFxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFxuICAgICAgICBcIm9uRHJhZ1N0YXJ0XCIsXG4gICAgICAgIHRoaXMuX2NvbnRyb2xOb2RlRHJhZ1N0YXJ0LmJpbmQodGhpcylcbiAgICAgICk7IC8vIHVzZWQgdG8gc2VsZWN0IGNvbnRyb2wgbm9kZVxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25EcmFnXCIsIHRoaXMuX2NvbnRyb2xOb2RlRHJhZy5iaW5kKHRoaXMpKTsgLy8gdXNlZCB0byBkcmFnIGNvbnRyb2wgbm9kZVxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZFVJKFwib25EcmFnRW5kXCIsIHRoaXMuX2NvbnRyb2xOb2RlRHJhZ0VuZC5iaW5kKHRoaXMpKTsgLy8gdXNlZCB0byBjb25uZWN0IG9yIHJldmVydCBjb250cm9sIG5vZGVzXG4gICAgICB0aGlzLl90ZW1wb3JhcnlCaW5kVUkoXCJvbk1vdXNlTW92ZVwiLCAoKSA9PiB7fSk7IC8vIGRpc2FibGVkXG5cbiAgICAgIC8vIGNyZWF0ZSBmdW5jdGlvbiB0byBwb3NpdGlvbiBjb250cm9sIG5vZGVzIGNvcnJlY3RseSBvbiBtb3ZlbWVudFxuICAgICAgLy8gYXV0b21hdGljYWxseSBjbGVhbmVkIHVwIGJlY2F1c2Ugd2UgdXNlIHRoZSB0ZW1wb3JhcnkgYmluZFxuICAgICAgdGhpcy5fdGVtcG9yYXJ5QmluZEV2ZW50KFwiYmVmb3JlRHJhd2luZ1wiLCAoY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGVkZ2UuZWRnZVR5cGUuZmluZEJvcmRlclBvc2l0aW9ucyhjdHgpO1xuICAgICAgICBpZiAoY29udHJvbE5vZGVGcm9tLnNlbGVjdGVkID09PSBmYWxzZSkge1xuICAgICAgICAgIGNvbnRyb2xOb2RlRnJvbS54ID0gcG9zaXRpb25zLmZyb20ueDtcbiAgICAgICAgICBjb250cm9sTm9kZUZyb20ueSA9IHBvc2l0aW9ucy5mcm9tLnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRyb2xOb2RlVG8uc2VsZWN0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgY29udHJvbE5vZGVUby54ID0gcG9zaXRpb25zLnRvLng7XG4gICAgICAgICAgY29udHJvbE5vZGVUby55ID0gcG9zaXRpb25zLnRvLnk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBldmVyeXRoaW5nIGluIHRoZSBzZWxlY3Rpb25cbiAgICovXG4gIGRlbGV0ZVNlbGVjdGVkKCkge1xuICAgIC8vIHdoZW4gdXNpbmcgdGhlIGd1aSwgZW5hYmxlIGVkaXQgbW9kZSBpZiBpdCB3YXNudCBhbHJlYWR5LlxuICAgIGlmICh0aGlzLmVkaXRNb2RlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgfVxuXG4gICAgLy8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgYW55IGJvdW5kIGZ1bmN0aW9ucyBvciBldmVudHMsIHJlbW92ZSBjb250cm9sIG5vZGVzLCByZXN0b3JlIHBoeXNpY3NcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgdGhpcy5pbk1vZGUgPSBcImRlbGV0ZVwiO1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlSWRzKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRFZGdlcyA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3RlZEVkZ2VJZHMoKTtcbiAgICBsZXQgZGVsZXRlRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgaWYgKHNlbGVjdGVkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkubm9kZXNbc2VsZWN0ZWROb2Rlc1tpXV0uaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgYWxlcnQoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXVtcImRlbGV0ZUNsdXN0ZXJFcnJvclwiXSB8fFxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZGVsZXRlQ2x1c3RlckVycm9yXCJdXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuZGVsZXRlTm9kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRlbGV0ZUZ1bmN0aW9uID0gdGhpcy5vcHRpb25zLmRlbGV0ZU5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZEVkZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmRlbGV0ZUVkZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkZWxldGVGdW5jdGlvbiA9IHRoaXMub3B0aW9ucy5kZWxldGVFZGdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGVsZXRlRnVuY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY29uc3QgZGF0YSA9IHsgbm9kZXM6IHNlbGVjdGVkTm9kZXMsIGVkZ2VzOiBzZWxlY3RlZEVkZ2VzIH07XG4gICAgICBpZiAoZGVsZXRlRnVuY3Rpb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGRlbGV0ZUZ1bmN0aW9uKGRhdGEsIChmaW5hbGl6ZWREYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgZmluYWxpemVkRGF0YSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0aGlzLmluTW9kZSA9PT0gXCJkZWxldGVcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkucmVtb3ZlKGZpbmFsaXplZERhdGEuZWRnZXMpO1xuICAgICAgICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLnJlbW92ZShmaW5hbGl6ZWREYXRhLm5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgZnVuY3Rpb24gZm9yIGRlbGV0ZSBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsIGNhbGxiYWNrKVwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9keS5kYXRhLmVkZ2VzLmdldERhdGFTZXQoKS5yZW1vdmUoc2VsZWN0ZWRFZGdlcyk7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5ub2Rlcy5nZXREYXRhU2V0KCkucmVtb3ZlKHNlbGVjdGVkTm9kZXMpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQUklWQVRFICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vXG5cbiAgLyoqXG4gICAqIGRyYXcgb3IgcmVtb3ZlIHRoZSBET01cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXR1cCgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIEVuYWJsZSB0aGUgR1VJXG4gICAgICB0aGlzLmd1aUVuYWJsZWQgPSB0cnVlO1xuXG4gICAgICB0aGlzLl9jcmVhdGVXcmFwcGVycygpO1xuICAgICAgaWYgKHRoaXMuZWRpdE1vZGUgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUVkaXRCdXR0b24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZW1vdmVNYW5pcHVsYXRpb25ET00oKTtcblxuICAgICAgLy8gZGlzYWJsZSB0aGUgZ3VpXG4gICAgICB0aGlzLmd1aUVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIHRoZSBkaXYgb3ZlcmxheXMgdGhhdCBjb250YWluIHRoZSBET01cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVXcmFwcGVycygpIHtcbiAgICAvLyBsb2FkIHRoZSBtYW5pcHVsYXRvciBIVE1MIGVsZW1lbnRzLiBBbGwgc3R5bGluZyBkb25lIGluIGNzcy5cbiAgICBpZiAodGhpcy5tYW5pcHVsYXRpb25EaXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuY2xhc3NOYW1lID0gXCJ2aXMtbWFuaXB1bGF0aW9uXCI7XG4gICAgICBpZiAodGhpcy5lZGl0TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgfVxuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuICAgIH1cblxuICAgIC8vIGNvbnRhaW5lciBmb3IgdGhlIGVkaXQgYnV0dG9uLlxuICAgIGlmICh0aGlzLmVkaXRNb2RlRGl2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdE1vZGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdGhpcy5lZGl0TW9kZURpdi5jbGFzc05hbWUgPSBcInZpcy1lZGl0LW1vZGVcIjtcbiAgICAgIGlmICh0aGlzLmVkaXRNb2RlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuZWRpdE1vZGVEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0TW9kZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgfVxuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5lZGl0TW9kZURpdik7XG4gICAgfVxuXG4gICAgLy8gY29udGFpbmVyIGZvciB0aGUgY2xvc2UgZGl2IGJ1dHRvblxuICAgIGlmICh0aGlzLmNsb3NlRGl2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICAgICAgdGhpcy5jbG9zZURpdi5jbGFzc05hbWUgPSBcInZpcy1jbG9zZVwiO1xuICAgICAgdGhpcy5jbG9zZURpdi5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiLFxuICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXT8uW1wiY2xvc2VcIl0gPz9cbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiY2xvc2VcIl1cbiAgICAgICk7XG4gICAgICB0aGlzLmNsb3NlRGl2LnN0eWxlLmRpc3BsYXkgPSB0aGlzLm1hbmlwdWxhdGlvbkRpdi5zdHlsZS5kaXNwbGF5O1xuICAgICAgdGhpcy5jYW52YXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jbG9zZURpdik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlIGEgbmV3IHRhcmdldCBub2RlLiBVc2VkIGZvciBjcmVhdGluZyBuZXcgZWRnZXMgYW5kIGVkaXRpbmcgZWRnZXNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybnMge05vZGV9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0TmV3VGFyZ2V0Tm9kZSh4LCB5KSB7XG4gICAgY29uc3QgY29udHJvbE5vZGVTdHlsZSA9IGRlZXBFeHRlbmQoe30sIHRoaXMub3B0aW9ucy5jb250cm9sTm9kZVN0eWxlKTtcblxuICAgIGNvbnRyb2xOb2RlU3R5bGUuaWQgPSBcInRhcmdldE5vZGVcIiArIHJhbmRvbVVVSUQoKTtcbiAgICBjb250cm9sTm9kZVN0eWxlLmhpZGRlbiA9IGZhbHNlO1xuICAgIGNvbnRyb2xOb2RlU3R5bGUucGh5c2ljcyA9IGZhbHNlO1xuICAgIGNvbnRyb2xOb2RlU3R5bGUueCA9IHg7XG4gICAgY29udHJvbE5vZGVTdHlsZS55ID0geTtcblxuICAgIC8vIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBib3VuZGluZyBib3ggaW4gb3JkZXIgZm9yIHRoZSBub2RlcyB0byBiZSBkcmF3biBpbW1lZGlhdGVseVxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmNyZWF0ZU5vZGUoY29udHJvbE5vZGVTdHlsZSk7XG4gICAgbm9kZS5zaGFwZS5ib3VuZGluZ0JveCA9IHsgbGVmdDogeCwgcmlnaHQ6IHgsIHRvcDogeSwgYm90dG9tOiB5IH07XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGVkaXQgYnV0dG9uXG4gICAqL1xuICBfY3JlYXRlRWRpdEJ1dHRvbigpIHtcbiAgICAvLyByZXN0b3JlIGV2ZXJ5dGhpbmcgdG8gaXQncyBvcmlnaW5hbCBzdGF0ZSAoaWYgYXBwbGljYWJsZSlcbiAgICB0aGlzLl9jbGVhbigpO1xuXG4gICAgLy8gcmVzZXQgdGhlIG1hbmlwdWxhdGlvbkRPTVxuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NID0ge307XG5cbiAgICAvLyBlbXB0eSB0aGUgZWRpdE1vZGVEaXZcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5lZGl0TW9kZURpdik7XG5cbiAgICAvLyBjcmVhdGUgdGhlIGNvbnRlbnRzIGZvciB0aGUgZWRpdE1vZGUgYnV0dG9uXG4gICAgY29uc3QgbG9jYWxlID0gdGhpcy5vcHRpb25zLmxvY2FsZXNbdGhpcy5vcHRpb25zLmxvY2FsZV07XG4gICAgY29uc3QgYnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKFxuICAgICAgXCJlZGl0TW9kZVwiLFxuICAgICAgXCJ2aXMtZWRpdCB2aXMtZWRpdC1tb2RlXCIsXG4gICAgICBsb2NhbGVbXCJlZGl0XCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJlZGl0XCJdXG4gICAgKTtcbiAgICB0aGlzLmVkaXRNb2RlRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAvLyBiaW5kIGEgaGFtbWVyIGxpc3RlbmVyIHRvIHRoZSBidXR0b24sIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIHRvZ2dsZUVkaXRNb2RlLlxuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy50b2dnbGVFZGl0TW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGZ1bmN0aW9uIGNsZWFucyB1cCBhZnRlciBldmVyeXRoaW5nIHRoaXMgbW9kdWxlIGRvZXMuIFRlbXBvcmFyeSBlbGVtZW50cywgZnVuY3Rpb25zIGFuZCBldmVudHMgYXJlIHJlbW92ZWQsIHBoeXNpY3MgcmVzdG9yZWQsIGhhbW1lcnMgcmVtb3ZlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICAvLyBub3QgaW4gbW9kZVxuICAgIHRoaXMuaW5Nb2RlID0gZmFsc2U7XG5cbiAgICAvLyBfY2xlYW4gdGhlIGRpdnNcbiAgICBpZiAodGhpcy5ndWlFbmFibGVkID09PSB0cnVlKSB7XG4gICAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5lZGl0TW9kZURpdik7XG4gICAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuXG4gICAgICAvLyByZW1vdmVzIGFsbCB0aGUgYmluZGluZ3MgYW5kIG92ZXJsb2Fkc1xuICAgICAgdGhpcy5fY2xlYW51cERPTUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIHRlbXBvcmFyeSBub2RlcyBhbmQgZWRnZXNcbiAgICB0aGlzLl9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcygpO1xuXG4gICAgLy8gcmVzdG9yZSBvdmVybG9hZGVkIFVJIGZ1bmN0aW9uc1xuICAgIHRoaXMuX3VuYmluZFRlbXBvcmFyeVVJcygpO1xuXG4gICAgLy8gcmVtb3ZlIHRoZSB0ZW1wb3JhcnlFdmVudEZ1bmN0aW9uc1xuICAgIHRoaXMuX3VuYmluZFRlbXBvcmFyeUV2ZW50cygpO1xuXG4gICAgLy8gcmVzdG9yZSB0aGUgcGh5c2ljcyBpZiByZXF1aXJlZFxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJyZXN0b3JlUGh5c2ljc1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFYWNoIGRvbSBlbGVtZW50IGhhcyBpdCdzIG93biBoYW1tZXIuIFRoZXkgYXJlIHN0b3JlZCBpbiB0aGlzLm1hbmlwdWxhdGlvbkhhbW1lcnMuIFRoaXMgY2xlYW5zIHRoZW0gdXAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2xlYW51cERPTUV2ZW50TGlzdGVuZXJzKCkge1xuICAgIC8vIF9jbGVhbiBET00gZXZlbnQgbGlzdGVuZXIgYmluZGluZ3NcbiAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2RvbUV2ZW50TGlzdGVuZXJDbGVhbnVwUXVldWUuc3BsaWNlKDApKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIERPTSBlbGVtZW50cyBjcmVhdGVkIGJ5IHRoaXMgbW9kdWxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZU1hbmlwdWxhdGlvbkRPTSgpIHtcbiAgICAvLyByZW1vdmVzIGFsbCB0aGUgYmluZGluZ3MgYW5kIG92ZXJsb2Fkc1xuICAgIHRoaXMuX2NsZWFuKCk7XG5cbiAgICAvLyBlbXB0eSB0aGUgbWFuaXB1bGF0aW9uIGRpdnNcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5tYW5pcHVsYXRpb25EaXYpO1xuICAgIHJlY3Vyc2l2ZURPTURlbGV0ZSh0aGlzLmVkaXRNb2RlRGl2KTtcbiAgICByZWN1cnNpdmVET01EZWxldGUodGhpcy5jbG9zZURpdik7XG5cbiAgICAvLyByZW1vdmUgdGhlIG1hbmlwdWxhdGlvbiBkaXZzXG4gICAgaWYgKHRoaXMubWFuaXB1bGF0aW9uRGl2KSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5yZW1vdmVDaGlsZCh0aGlzLm1hbmlwdWxhdGlvbkRpdik7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXRNb2RlRGl2KSB7XG4gICAgICB0aGlzLmNhbnZhcy5mcmFtZS5yZW1vdmVDaGlsZCh0aGlzLmVkaXRNb2RlRGl2KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvc2VEaXYpIHtcbiAgICAgIHRoaXMuY2FudmFzLmZyYW1lLnJlbW92ZUNoaWxkKHRoaXMuY2xvc2VEaXYpO1xuICAgIH1cblxuICAgIC8vIHNldCB0aGUgcmVmZXJlbmNlcyB0byB1bmRlZmluZWRcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRNb2RlRGl2ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2xvc2VEaXYgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIGEgc2VwZXJhdG9yIGxpbmUuIHRoZSBpbmRleCBpcyB0byBkaWZmZXJlbnRpYXRlIGluIHRoZSBtYW5pcHVsYXRpb24gZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXg9MV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVTZXBlcmF0b3IoaW5kZXggPSAxKSB7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01bXCJzZXBlcmF0b3JMaW5lRGl2XCIgKyBpbmRleF0gPVxuICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtcInNlcGVyYXRvckxpbmVEaXZcIiArIGluZGV4XS5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtc2VwYXJhdG9yLWxpbmVcIjtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW1wic2VwZXJhdG9yTGluZURpdlwiICsgaW5kZXhdXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgRE9NIGZ1bmN0aW9ucyBmb3IgYnV0dG9ucyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVBZGROb2RlQnV0dG9uKGxvY2FsZSkge1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihcbiAgICAgIFwiYWRkTm9kZVwiLFxuICAgICAgXCJ2aXMtYWRkXCIsXG4gICAgICBsb2NhbGVbXCJhZGROb2RlXCJdIHx8IHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJhZGROb2RlXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5hZGROb2RlTW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQWRkRWRnZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImFkZEVkZ2VcIixcbiAgICAgIFwidmlzLWNvbm5lY3RcIixcbiAgICAgIGxvY2FsZVtcImFkZEVkZ2VcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImFkZEVkZ2VcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLmFkZEVkZ2VNb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVFZGl0Tm9kZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImVkaXROb2RlXCIsXG4gICAgICBcInZpcy1lZGl0XCIsXG4gICAgICBsb2NhbGVbXCJlZGl0Tm9kZVwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdE5vZGVcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLmVkaXROb2RlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7TG9jYWxlfSBsb2NhbGVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVFZGl0RWRnZUJ1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImVkaXRFZGdlXCIsXG4gICAgICBcInZpcy1lZGl0XCIsXG4gICAgICBsb2NhbGVbXCJlZGl0RWRnZVwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZWRpdEVkZ2VcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLmVkaXRFZGdlTW9kZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlRGVsZXRlQnV0dG9uKGxvY2FsZSkge1xuICAgIGxldCBkZWxldGVCdG5DbGFzcztcbiAgICBpZiAodGhpcy5vcHRpb25zLnJ0bCkge1xuICAgICAgZGVsZXRlQnRuQ2xhc3MgPSBcInZpcy1kZWxldGUtcnRsXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUJ0bkNsYXNzID0gXCJ2aXMtZGVsZXRlXCI7XG4gICAgfVxuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihcbiAgICAgIFwiZGVsZXRlXCIsXG4gICAgICBkZWxldGVCdG5DbGFzcyxcbiAgICAgIGxvY2FsZVtcImRlbFwiXSB8fCB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiZGVsXCJdXG4gICAgKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRpdi5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKGJ1dHRvbiwgdGhpcy5kZWxldGVTZWxlY3RlZC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQmFja0J1dHRvbihsb2NhbGUpIHtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oXG4gICAgICBcImJhY2tcIixcbiAgICAgIFwidmlzLWJhY2tcIixcbiAgICAgIGxvY2FsZVtcImJhY2tcIl0gfHwgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImJhY2tcIl1cbiAgICApO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XG4gICAgdGhpcy5fYmluZEVsZW1lbnRFdmVudHMoYnV0dG9uLCB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBpZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gICAqIEBwYXJhbSB7bGFiZWx9IGxhYmVsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbENsYXNzTmFtZVxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY3JlYXRlQnV0dG9uKGlkLCBjbGFzc05hbWUsIGxhYmVsLCBsYWJlbENsYXNzTmFtZSA9IFwidmlzLWxhYmVsXCIpIHtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiRGl2XCJdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiRGl2XCJdLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiBcIiArIGNsYXNzTmFtZTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiTGFiZWxcIl0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJMYWJlbFwiXS5jbGFzc05hbWUgPSBsYWJlbENsYXNzTmFtZTtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtpZCArIFwiTGFiZWxcIl0uaW5uZXJUZXh0ID0gbGFiZWw7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01baWQgKyBcIkRpdlwiXS5hcHBlbmRDaGlsZChcbiAgICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJMYWJlbFwiXVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMubWFuaXB1bGF0aW9uRE9NW2lkICsgXCJEaXZcIl07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtMYWJlbH0gbGFiZWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVEZXNjcmlwdGlvbihsYWJlbCkge1xuICAgIHRoaXMubWFuaXB1bGF0aW9uRE9NW1wiZGVzY3JpcHRpb25MYWJlbFwiXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25ET01bXCJkZXNjcmlwdGlvbkxhYmVsXCJdLmNsYXNzTmFtZSA9IFwidmlzLW5vbmVcIjtcbiAgICB0aGlzLm1hbmlwdWxhdGlvbkRPTVtcImRlc2NyaXB0aW9uTGFiZWxcIl0uaW5uZXJUZXh0ID0gbGFiZWw7XG4gICAgdGhpcy5tYW5pcHVsYXRpb25EaXYuYXBwZW5kQ2hpbGQodGhpcy5tYW5pcHVsYXRpb25ET01bXCJkZXNjcmlwdGlvbkxhYmVsXCJdKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVuZCBvZiBET00gZnVuY3Rpb25zIGZvciBidXR0b25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIHRoaXMgYmluZHMgYW4gZXZlbnQgdW50aWwgY2xlYW51cCBieSB0aGUgY2xlYW4gZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV3RnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF90ZW1wb3JhcnlCaW5kRXZlbnQoZXZlbnQsIG5ld0Z1bmN0aW9uKSB7XG4gICAgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucy5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGJvdW5kRnVuY3Rpb246IG5ld0Z1bmN0aW9uLFxuICAgIH0pO1xuICAgIHRoaXMuYm9keS5lbWl0dGVyLm9uKGV2ZW50LCBuZXdGdW5jdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBvdmVycmlkZXMgYW4gVUkgZnVuY3Rpb24gdW50aWwgY2xlYW51cCBieSB0aGUgY2xlYW4gZnVuY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFVJZnVuY3Rpb25OYW1lXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5ld0Z1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdGVtcG9yYXJ5QmluZFVJKFVJZnVuY3Rpb25OYW1lLCBuZXdGdW5jdGlvbikge1xuICAgIGlmICh0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnNbVUlmdW5jdGlvbk5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnNbVUlmdW5jdGlvbk5hbWVdID1cbiAgICAgICAgdGhpcy5ib2R5LmV2ZW50TGlzdGVuZXJzW1VJZnVuY3Rpb25OYW1lXTtcbiAgICAgIHRoaXMuYm9keS5ldmVudExpc3RlbmVyc1tVSWZ1bmN0aW9uTmFtZV0gPSBuZXdGdW5jdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoaXMgVUkgZnVuY3Rpb24gZG9lcyBub3QgZXhpc3QuIFR5cG8/IFlvdSB0cmllZDogXCIgK1xuICAgICAgICAgIFVJZnVuY3Rpb25OYW1lICtcbiAgICAgICAgICBcIiBwb3NzaWJsZSBhcmU6IFwiICtcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyh0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnMpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZSB0aGUgb3ZlcnJpZGRlbiBVSSBmdW5jdGlvbnMgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdW5iaW5kVGVtcG9yYXJ5VUlzKCkge1xuICAgIGZvciAoY29uc3QgZnVuY3Rpb25OYW1lIGluIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuICAgICAgICAgIHRoaXMudGVtcG9yYXJ5VUlGdW5jdGlvbnMsXG4gICAgICAgICAgZnVuY3Rpb25OYW1lXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aGlzLmJvZHkuZXZlbnRMaXN0ZW5lcnNbZnVuY3Rpb25OYW1lXSA9XG4gICAgICAgICAgdGhpcy50ZW1wb3JhcnlVSUZ1bmN0aW9uc1tmdW5jdGlvbk5hbWVdO1xuICAgICAgICBkZWxldGUgdGhpcy50ZW1wb3JhcnlVSUZ1bmN0aW9uc1tmdW5jdGlvbk5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnRlbXBvcmFyeVVJRnVuY3Rpb25zID0ge307XG4gIH1cblxuICAvKipcbiAgICogVW5iaW5kIHRoZSBldmVudHMgY3JlYXRlZCBieSBfdGVtcG9yYXJ5QmluZEV2ZW50XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdW5iaW5kVGVtcG9yYXJ5RXZlbnRzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZXZlbnROYW1lID0gdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9uc1tpXS5ldmVudDtcbiAgICAgIGNvbnN0IGJvdW5kRnVuY3Rpb24gPSB0aGlzLnRlbXBvcmFyeUV2ZW50RnVuY3Rpb25zW2ldLmJvdW5kRnVuY3Rpb247XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5vZmYoZXZlbnROYW1lLCBib3VuZEZ1bmN0aW9uKTtcbiAgICB9XG4gICAgdGhpcy50ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgYW4gaGFtbWVyIGluc3RhbmNlIHRvIGEgRE9NIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZG9tRWxlbWVudFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBib3VuZEZ1bmN0aW9uXG4gICAqL1xuICBfYmluZEVsZW1lbnRFdmVudHMoZG9tRWxlbWVudCwgYm91bmRGdW5jdGlvbikge1xuICAgIC8vIEJpbmQgdG91Y2ggZXZlbnRzLlxuICAgIGNvbnN0IGhhbW1lciA9IG5ldyBIYW1tZXIoZG9tRWxlbWVudCwge30pO1xuICAgIG9uVG91Y2goaGFtbWVyLCBib3VuZEZ1bmN0aW9uKTtcbiAgICB0aGlzLl9kb21FdmVudExpc3RlbmVyQ2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgaGFtbWVyLmRlc3Ryb3koKTtcbiAgICB9KTtcblxuICAgIC8vIEJpbmQga2V5Ym9hcmQgZXZlbnRzLlxuICAgIGNvbnN0IGtleXVwTGlzdGVuZXIgPSAoeyBrZXlDb2RlLCBrZXkgfSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gXCJFbnRlclwiIHx8IGtleSA9PT0gXCIgXCIgfHwga2V5Q29kZSA9PT0gMTMgfHwga2V5Q29kZSA9PT0gMzIpIHtcbiAgICAgICAgYm91bmRGdW5jdGlvbigpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwga2V5dXBMaXN0ZW5lciwgZmFsc2UpO1xuICAgIHRoaXMuX2RvbUV2ZW50TGlzdGVuZXJDbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgICBkb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBrZXl1cExpc3RlbmVyLCBmYWxzZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTmVhdGx5IGNsZWFuIHVwIHRlbXBvcmFyeSBlZGdlcyBhbmQgbm9kZXNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcygpIHtcbiAgICAvLyBfY2xlYW4gdGVtcG9yYXJ5IGVkZ2VzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRlbXBvcmFyeUlkcy5lZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5ib2R5LmVkZ2VzW3RoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzW2ldXS5kaXNjb25uZWN0KCk7XG4gICAgICBkZWxldGUgdGhpcy5ib2R5LmVkZ2VzW3RoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzW2ldXTtcbiAgICAgIGNvbnN0IGluZGV4VGVtcEVkZ2UgPSB0aGlzLmJvZHkuZWRnZUluZGljZXMuaW5kZXhPZihcbiAgICAgICAgdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXNbaV1cbiAgICAgICk7XG4gICAgICBpZiAoaW5kZXhUZW1wRWRnZSAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5ib2R5LmVkZ2VJbmRpY2VzLnNwbGljZShpbmRleFRlbXBFZGdlLCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBfY2xlYW4gdGVtcG9yYXJ5IG5vZGVzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1tpXV07XG4gICAgICBjb25zdCBpbmRleFRlbXBOb2RlID0gdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmluZGV4T2YoXG4gICAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLm5vZGVzW2ldXG4gICAgICApO1xuICAgICAgaWYgKGluZGV4VGVtcE5vZGUgIT09IC0xKSB7XG4gICAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5zcGxpY2UoaW5kZXhUZW1wTm9kZSwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50ZW1wb3JhcnlJZHMgPSB7IG5vZGVzOiBbXSwgZWRnZXM6IFtdIH07XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRURJVCBFREdFIEZVTkNUSU9OUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIHRoZSB0b3VjaCBpcyB1c2VkIHRvIGdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGluaXRpYWwgY2xpY2tcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29udHJvbE5vZGVUb3VjaChldmVudCkge1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgIHRoaXMubGFzdFRvdWNoID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgdGhpcy5sYXN0VG91Y2gudHJhbnNsYXRpb24gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmJvZHkudmlldy50cmFuc2xhdGlvbik7IC8vIGNvcHkgdGhlIG9iamVjdFxuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBkcmFnIHN0YXJ0IGlzIHVzZWQgdG8gbWFyayBvbmUgb2YgdGhlIGNvbnRyb2wgbm9kZXMgYXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29udHJvbE5vZGVEcmFnU3RhcnQoKSB7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMubGFzdFRvdWNoO1xuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuICAgIGNvbnN0IGZyb20gPSB0aGlzLmJvZHkubm9kZXNbdGhpcy50ZW1wb3JhcnlJZHMubm9kZXNbMF1dO1xuICAgIGNvbnN0IHRvID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMudGVtcG9yYXJ5SWRzLm5vZGVzWzFdXTtcbiAgICBjb25zdCBlZGdlID0gdGhpcy5ib2R5LmVkZ2VzW3RoaXMuZWRnZUJlaW5nRWRpdGVkSWRdO1xuICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGZyb21TZWxlY3QgPSBmcm9tLmlzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuICAgIGNvbnN0IHRvU2VsZWN0ID0gdG8uaXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaik7XG5cbiAgICBpZiAoZnJvbVNlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlID0gZnJvbTtcbiAgICAgIGVkZ2UuZWRnZVR5cGUuZnJvbSA9IGZyb207XG4gICAgfSBlbHNlIGlmICh0b1NlbGVjdCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlID0gdG87XG4gICAgICBlZGdlLmVkZ2VUeXBlLnRvID0gdG87XG4gICAgfVxuXG4gICAgLy8gd2UgdXNlIHRoZSBzZWxlY3Rpb24gdG8gZmluZCB0aGUgbm9kZSB0aGF0IGlzIGJlaW5nIGRyYWdnZWQuIFdlIGV4cGxpY2l0bHkgc2VsZWN0IGl0IGhlcmUuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0T2JqZWN0KHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvKipcbiAgICogZHJhZ2dpbmcgdGhlIGNvbnRyb2wgbm9kZXMgb3IgdGhlIGNhbnZhc1xuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb250cm9sTm9kZURyYWcoZXZlbnQpIHtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiZGlzYWJsZVBoeXNpY3NcIik7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMuYm9keS5mdW5jdGlvbnMuZ2V0UG9pbnRlcihldmVudC5jZW50ZXIpO1xuICAgIGNvbnN0IHBvcyA9IHRoaXMuY2FudmFzLkRPTXRvQ2FudmFzKHBvaW50ZXIpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnRyb2xOb2RlLnggPSBwb3MueDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS55ID0gcG9zLnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLm9uRHJhZyhldmVudCk7XG4gICAgfVxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfcmVkcmF3XCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNvbm5lY3Rpbmcgb3IgcmVzdG9yaW5nIHRoZSBjb250cm9sIG5vZGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb250cm9sTm9kZURyYWdFbmQoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5nZXRQb2ludGVyKGV2ZW50LmNlbnRlcik7XG4gICAgY29uc3QgcG9pbnRlck9iaiA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fcG9pbnRlclRvUG9zaXRpb25PYmplY3QocG9pbnRlcik7XG4gICAgY29uc3QgZWRnZSA9IHRoaXMuYm9keS5lZGdlc1t0aGlzLmVkZ2VCZWluZ0VkaXRlZElkXTtcbiAgICAvLyBpZiB0aGUgbm9kZSB0aGF0IHdhcyBkcmFnZ2VkIGlzIG5vdCBhIGNvbnRyb2wgbm9kZSwgcmV0dXJuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gd2UgdXNlIHRoZSBzZWxlY3Rpb24gdG8gZmluZCB0aGUgbm9kZSB0aGF0IGlzIGJlaW5nIGRyYWdnZWQuIFdlIGV4cGxpY2l0bHkgREVzZWxlY3QgdGhlIGNvbnRyb2wgbm9kZSBoZXJlLlxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgIGNvbnN0IG92ZXJsYXBwaW5nTm9kZUlkcyA9XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoKHBvaW50ZXJPYmopO1xuICAgIGxldCBub2RlID0gdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGkgPSBvdmVybGFwcGluZ05vZGVJZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChvdmVybGFwcGluZ05vZGVJZHNbaV0gIT09IHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS5pZCkge1xuICAgICAgICBub2RlID0gdGhpcy5ib2R5Lm5vZGVzW292ZXJsYXBwaW5nTm9kZUlkc1tpXV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBwZXJmb3JtIHRoZSBjb25uZWN0aW9uXG4gICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkQ29udHJvbE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG5vZGUuaXNDbHVzdGVyID09PSB0cnVlKSB7XG4gICAgICAgIGFsZXJ0KFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdW1wiY3JlYXRlRWRnZUVycm9yXCJdIHx8XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1tcImVuXCJdW1wiY3JlYXRlRWRnZUVycm9yXCJdXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmcm9tID0gdGhpcy5ib2R5Lm5vZGVzW3RoaXMudGVtcG9yYXJ5SWRzLm5vZGVzWzBdXTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250cm9sTm9kZS5pZCA9PT0gZnJvbS5pZCkge1xuICAgICAgICAgIHRoaXMuX3BlcmZvcm1FZGl0RWRnZShub2RlLmlkLCBlZGdlLnRvLmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9wZXJmb3JtRWRpdEVkZ2UoZWRnZS5mcm9tLmlkLCBub2RlLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlZGdlLnVwZGF0ZUVkZ2VUeXBlKCk7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzdG9yZVBoeXNpY3NcIik7XG4gICAgfVxuXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EIE9GIEVESVQgRURHRSBGVU5DVElPTlMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQUREIEVER0UgRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cbiAgLyoqXG4gICAqIHRoZSBmdW5jdGlvbiBib3VuZCB0byB0aGUgc2VsZWN0aW9uIGV2ZW50LiBJdCBjaGVja3MgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIGNsdXN0ZXIgYW5kIGNoYW5nZXMgdGhlIGRlc2NyaXB0aW9uXG4gICAqIHRvIHdhbGsgdGhlIHVzZXIgdGhyb3VnaCB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVDb25uZWN0KGV2ZW50KSB7XG4gICAgLy8gY2hlY2sgdG8gYXZvaWQgZG91YmxlIGZpcmVpbmcgb2YgdGhpcyBmdW5jdGlvbi5cbiAgICBpZiAobmV3IERhdGUoKS52YWx1ZU9mKCkgLSB0aGlzLnRvdWNoVGltZSA+IDEwMCkge1xuICAgICAgdGhpcy5sYXN0VG91Y2ggPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICAgIHRoaXMubGFzdFRvdWNoLnRyYW5zbGF0aW9uID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIHRoaXMuYm9keS52aWV3LnRyYW5zbGF0aW9uXG4gICAgICApOyAvLyBjb3B5IHRoZSBvYmplY3RcblxuICAgICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIuZHJhZy5wb2ludGVyID0gdGhpcy5sYXN0VG91Y2g7IC8vIERyYWcgcG9pbnRlciBpcyBub3QgdXBkYXRlZCB3aGVuIGFkZGluZyBlZGdlc1xuICAgICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIuZHJhZy50cmFuc2xhdGlvbiA9IHRoaXMubGFzdFRvdWNoLnRyYW5zbGF0aW9uO1xuXG4gICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5sYXN0VG91Y2g7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdChwb2ludGVyKTtcblxuICAgICAgaWYgKG5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobm9kZS5pc0NsdXN0ZXIgPT09IHRydWUpIHtcbiAgICAgICAgICBhbGVydChcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW3RoaXMub3B0aW9ucy5sb2NhbGVdW1wiY3JlYXRlRWRnZUVycm9yXCJdIHx8XG4gICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sb2NhbGVzW1wiZW5cIl1bXCJjcmVhdGVFZGdlRXJyb3JcIl1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNyZWF0ZSBhIG5vZGUgdGhlIHRlbXBvcmFyeSBsaW5lIGNhbiBsb29rIGF0XG4gICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuX2dldE5ld1RhcmdldE5vZGUobm9kZS54LCBub2RlLnkpO1xuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1t0YXJnZXROb2RlLmlkXSA9IHRhcmdldE5vZGU7XG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLnB1c2godGFyZ2V0Tm9kZS5pZCk7XG5cbiAgICAgICAgICAvLyBjcmVhdGUgYSB0ZW1wb3JhcnkgZWRnZVxuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25FZGdlID0gdGhpcy5ib2R5LmZ1bmN0aW9ucy5jcmVhdGVFZGdlKHtcbiAgICAgICAgICAgIGlkOiBcImNvbm5lY3Rpb25FZGdlXCIgKyByYW5kb21VVUlEKCksXG4gICAgICAgICAgICBmcm9tOiBub2RlLmlkLFxuICAgICAgICAgICAgdG86IHRhcmdldE5vZGUuaWQsXG4gICAgICAgICAgICBwaHlzaWNzOiBmYWxzZSxcbiAgICAgICAgICAgIHNtb290aDoge1xuICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICB0eXBlOiBcImNvbnRpbnVvdXNcIixcbiAgICAgICAgICAgICAgcm91bmRuZXNzOiAwLjUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYm9keS5lZGdlc1tjb25uZWN0aW9uRWRnZS5pZF0gPSBjb25uZWN0aW9uRWRnZTtcbiAgICAgICAgICB0aGlzLmJvZHkuZWRnZUluZGljZXMucHVzaChjb25uZWN0aW9uRWRnZS5pZCk7XG5cbiAgICAgICAgICB0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5wdXNoKHRhcmdldE5vZGUuaWQpO1xuICAgICAgICAgIHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzLnB1c2goY29ubmVjdGlvbkVkZ2UuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnRvdWNoVGltZSA9IG5ldyBEYXRlKCkudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYWdDb250cm9sTm9kZShldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcblxuICAgIGNvbnN0IHBvaW50ZXJPYmogPSB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuX3BvaW50ZXJUb1Bvc2l0aW9uT2JqZWN0KHBvaW50ZXIpO1xuICAgIC8vIHJlbWVtYmVyIHRoZSBlZGdlIGlkXG4gICAgbGV0IGNvbm5lY3RGcm9tSWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbm5lY3RGcm9tSWQgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXNbMF1dLmZyb21JZDtcbiAgICB9XG5cbiAgICAvLyBnZXQgdGhlIG92ZXJsYXBwaW5nIG5vZGUgYnV0IE5PVCB0aGUgdGVtcG9yYXJ5IG5vZGU7XG4gICAgY29uc3Qgb3ZlcmxhcHBpbmdOb2RlSWRzID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fZ2V0QWxsTm9kZXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaik7XG4gICAgbGV0IG5vZGUgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IG92ZXJsYXBwaW5nTm9kZUlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgLy8gaWYgdGhlIG5vZGUgaWQgaXMgTk9UIGEgdGVtcG9yYXJ5IG5vZGUsIGFjY2VwdCB0aGUgbm9kZS5cbiAgICAgIGlmICh0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5pbmRleE9mKG92ZXJsYXBwaW5nTm9kZUlkc1tpXSkgPT09IC0xKSB7XG4gICAgICAgIG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbb3ZlcmxhcHBpbmdOb2RlSWRzW2ldXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXZlbnQuY29udHJvbEVkZ2UgPSB7IGZyb206IGNvbm5lY3RGcm9tSWQsIHRvOiBub2RlID8gbm9kZS5pZCA6IHVuZGVmaW5lZCB9O1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZW5lcmF0ZUNsaWNrRXZlbnQoXG4gICAgICBcImNvbnRyb2xOb2RlRHJhZ2dpbmdcIixcbiAgICAgIGV2ZW50LFxuICAgICAgcG9pbnRlclxuICAgICk7XG5cbiAgICBpZiAodGhpcy50ZW1wb3JhcnlJZHMubm9kZXNbMF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuYm9keS5ub2Rlc1t0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlc1swXV07IC8vIHRoZXJlIGlzIG9ubHkgb25lIHRlbXAgbm9kZSBpbiB0aGUgYWRkIGVkZ2UgbW9kZS5cbiAgICAgIHRhcmdldE5vZGUueCA9IHRoaXMuY2FudmFzLl9YY29udmVydERPTXRvQ2FudmFzKHBvaW50ZXIueCk7XG4gICAgICB0YXJnZXROb2RlLnkgPSB0aGlzLmNhbnZhcy5fWWNvbnZlcnRET010b0NhbnZhcyhwb2ludGVyLnkpO1xuICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcIl9yZWRyYXdcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyLm9uRHJhZyhldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbm5lY3QgdGhlIG5ldyBlZGdlIHRvIHRoZSB0YXJnZXQgaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIHJlbW92ZSB0ZW1wIGxpbmVcbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gIGV2ZW50ICAgVGhlIGV2ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluaXNoQ29ubmVjdChldmVudCkge1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLmJvZHkuZnVuY3Rpb25zLmdldFBvaW50ZXIoZXZlbnQuY2VudGVyKTtcbiAgICBjb25zdCBwb2ludGVyT2JqID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdChwb2ludGVyKTtcblxuICAgIC8vIHJlbWVtYmVyIHRoZSBlZGdlIGlkXG4gICAgbGV0IGNvbm5lY3RGcm9tSWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMudGVtcG9yYXJ5SWRzLmVkZ2VzWzBdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbm5lY3RGcm9tSWQgPSB0aGlzLmJvZHkuZWRnZXNbdGhpcy50ZW1wb3JhcnlJZHMuZWRnZXNbMF1dLmZyb21JZDtcbiAgICB9XG5cbiAgICAvLyBnZXQgdGhlIG92ZXJsYXBwaW5nIG5vZGUgYnV0IE5PVCB0aGUgdGVtcG9yYXJ5IG5vZGU7XG4gICAgY29uc3Qgb3ZlcmxhcHBpbmdOb2RlSWRzID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5fZ2V0QWxsTm9kZXNPdmVybGFwcGluZ1dpdGgocG9pbnRlck9iaik7XG4gICAgbGV0IG5vZGUgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgaSA9IG92ZXJsYXBwaW5nTm9kZUlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgLy8gaWYgdGhlIG5vZGUgaWQgaXMgTk9UIGEgdGVtcG9yYXJ5IG5vZGUsIGFjY2VwdCB0aGUgbm9kZS5cbiAgICAgIGlmICh0aGlzLnRlbXBvcmFyeUlkcy5ub2Rlcy5pbmRleE9mKG92ZXJsYXBwaW5nTm9kZUlkc1tpXSkgPT09IC0xKSB7XG4gICAgICAgIG5vZGUgPSB0aGlzLmJvZHkubm9kZXNbb3ZlcmxhcHBpbmdOb2RlSWRzW2ldXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdGVtcG9yYXJ5IG5vZGVzIGFuZCBlZGdlcy5cbiAgICB0aGlzLl9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcygpO1xuXG4gICAgLy8gcGVyZm9ybSB0aGUgY29ubmVjdGlvblxuICAgIGlmIChub2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChub2RlLmlzQ2x1c3RlciA9PT0gdHJ1ZSkge1xuICAgICAgICBhbGVydChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubG9jYWxlc1t0aGlzLm9wdGlvbnMubG9jYWxlXVtcImNyZWF0ZUVkZ2VFcnJvclwiXSB8fFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmxvY2FsZXNbXCJlblwiXVtcImNyZWF0ZUVkZ2VFcnJvclwiXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYm9keS5ub2Rlc1tjb25uZWN0RnJvbUlkXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5ib2R5Lm5vZGVzW25vZGUuaWRdICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fcGVyZm9ybUFkZEVkZ2UoY29ubmVjdEZyb21JZCwgbm9kZS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBldmVudC5jb250cm9sRWRnZSA9IHsgZnJvbTogY29ubmVjdEZyb21JZCwgdG86IG5vZGUgPyBub2RlLmlkIDogdW5kZWZpbmVkIH07XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgIFwiY29udHJvbE5vZGVEcmFnRW5kXCIsXG4gICAgICBldmVudCxcbiAgICAgIHBvaW50ZXJcbiAgICApO1xuXG4gICAgLy8gTm8gbmVlZCB0byBkbyBfZ2VuZXJhdGVjbGlja2V2ZW50KCdkcmFnRW5kJykgaGVyZSwgdGhlIHJlZ3VsYXIgZHJhZ0VuZCBldmVudCBmaXJlcy5cbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2RyYWdTdGFydEVkZ2UoZXZlbnQpIHtcbiAgICBjb25zdCBwb2ludGVyID0gdGhpcy5sYXN0VG91Y2g7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdlbmVyYXRlQ2xpY2tFdmVudChcbiAgICAgIFwiZHJhZ1N0YXJ0XCIsXG4gICAgICBldmVudCxcbiAgICAgIHBvaW50ZXIsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQgT0YgQUREIEVER0UgRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQZXJmb3JtaW5nIGFsbCB0aGUgYWN0dWFsIGRhdGEgbWFuaXB1bGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXG5cbiAgLyoqXG4gICAqIEFkZHMgYSBub2RlIG9uIHRoZSBzcGVjaWZpZWQgbG9jYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNsaWNrRGF0YVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BlcmZvcm1BZGROb2RlKGNsaWNrRGF0YSkge1xuICAgIGNvbnN0IGRlZmF1bHREYXRhID0ge1xuICAgICAgaWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgIHg6IGNsaWNrRGF0YS5wb2ludGVyLmNhbnZhcy54LFxuICAgICAgeTogY2xpY2tEYXRhLnBvaW50ZXIuY2FudmFzLnksXG4gICAgICBsYWJlbDogXCJuZXdcIixcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuYWRkTm9kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmFkZE5vZGUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5hZGROb2RlKGRlZmF1bHREYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IG51bGwgJiZcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdGhpcy5pbk1vZGUgPT09IFwiYWRkTm9kZVwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBpZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHRoZSBtb2RlIGhhcyBjaGFuZ2VzIChkdWUgdG8gZGF0YXNldCBjaGFuZ2UpIGRpc3JlZ2FyZCB0aGUgY2FsbGJhY2tcbiAgICAgICAgICAgIHRoaXMuYm9keS5kYXRhLm5vZGVzLmdldERhdGFTZXQoKS5hZGQoZmluYWxpemVkRGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgZnVuY3Rpb24gZm9yIGFkZCBkb2VzIG5vdCBzdXBwb3J0IHR3byBhcmd1bWVudHMgKGRhdGEsY2FsbGJhY2spXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmRhdGEubm9kZXMuZ2V0RGF0YVNldCgpLmFkZChkZWZhdWx0RGF0YSk7XG4gICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY29ubmVjdCB0d28gbm9kZXMgd2l0aCBhIG5ldyBlZGdlLlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHNvdXJjZU5vZGVJZFxuICAgKiBAcGFyYW0ge05vZGUuaWR9IHRhcmdldE5vZGVJZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BlcmZvcm1BZGRFZGdlKHNvdXJjZU5vZGVJZCwgdGFyZ2V0Tm9kZUlkKSB7XG4gICAgY29uc3QgZGVmYXVsdERhdGEgPSB7IGZyb206IHNvdXJjZU5vZGVJZCwgdG86IHRhcmdldE5vZGVJZCB9O1xuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmFkZEVkZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGRFZGdlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuYWRkRWRnZShkZWZhdWx0RGF0YSwgKGZpbmFsaXplZERhdGEpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSBudWxsICYmXG4gICAgICAgICAgICBmaW5hbGl6ZWREYXRhICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHRoaXMuaW5Nb2RlID09PSBcImFkZEVkZ2VcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrXG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkuYWRkKGZpbmFsaXplZERhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBjb25uZWN0IGRvZXMgbm90IHN1cHBvcnQgdHdvIGFyZ3VtZW50cyAoZGF0YSxjYWxsYmFjaylcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkuYWRkKGRlZmF1bHREYXRhKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci51bnNlbGVjdEFsbCgpO1xuICAgICAgdGhpcy5zaG93TWFuaXB1bGF0b3JUb29sYmFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNvbm5lY3QgdHdvIG5vZGVzIHdpdGggYSBuZXcgZWRnZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBzb3VyY2VOb2RlSWRcbiAgICogQHBhcmFtIHtOb2RlLmlkfSB0YXJnZXROb2RlSWRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtRWRpdEVkZ2Uoc291cmNlTm9kZUlkLCB0YXJnZXROb2RlSWQpIHtcbiAgICBjb25zdCBkZWZhdWx0RGF0YSA9IHtcbiAgICAgIGlkOiB0aGlzLmVkZ2VCZWluZ0VkaXRlZElkLFxuICAgICAgZnJvbTogc291cmNlTm9kZUlkLFxuICAgICAgdG86IHRhcmdldE5vZGVJZCxcbiAgICAgIGxhYmVsOiB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXQodGhpcy5lZGdlQmVpbmdFZGl0ZWRJZCkubGFiZWwsXG4gICAgfTtcbiAgICBsZXQgZWVGdW5jdCA9IHRoaXMub3B0aW9ucy5lZGl0RWRnZTtcbiAgICBpZiAodHlwZW9mIGVlRnVuY3QgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGVlRnVuY3QgPSBlZUZ1bmN0LmVkaXRXaXRob3V0RHJhZztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlZUZ1bmN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGlmIChlZUZ1bmN0Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICBlZUZ1bmN0KGRlZmF1bHREYXRhLCAoZmluYWxpemVkRGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGZpbmFsaXplZERhdGEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgdGhpcy5pbk1vZGUgIT09IFwiZWRpdEVkZ2VcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgbW9kZSBoYXMgY2hhbmdlcyAoZHVlIHRvIGRhdGFzZXQgY2hhbmdlKSBkaXNyZWdhcmQgdGhlIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZWRnZXNbZGVmYXVsdERhdGEuaWRdLnVwZGF0ZUVkZ2VUeXBlKCk7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlZHJhd1wiKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJvZHkuZGF0YS5lZGdlcy5nZXREYXRhU2V0KCkudXBkYXRlKGZpbmFsaXplZERhdGEpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICB0aGlzLnNob3dNYW5pcHVsYXRvclRvb2xiYXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIGZvciBlZGl0IGRvZXMgbm90IHN1cHBvcnQgdHdvIGFyZ3VtZW50cyAoZGF0YSwgY2FsbGJhY2spXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib2R5LmRhdGEuZWRnZXMuZ2V0RGF0YVNldCgpLnVwZGF0ZShkZWZhdWx0RGF0YSk7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcbiAgICAgIHRoaXMuc2hvd01hbmlwdWxhdG9yVG9vbGJhcigpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYW5pcHVsYXRpb25TeXN0ZW07XG4iLCAiaW1wb3J0IHtcbiAgQ29uZmlndXJhdG9yQ29uZmlnLFxuICBDb25maWd1cmF0b3JIaWRlT3B0aW9uLFxuICBPcHRpb25zQ29uZmlnLFxufSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5cbi8qKlxuICogVGhpcyBvYmplY3QgY29udGFpbnMgYWxsIHBvc3NpYmxlIG9wdGlvbnMuIEl0IHdpbGwgY2hlY2sgaWYgdGhlIHR5cGVzIGFyZSBjb3JyZWN0LCBpZiByZXF1aXJlZCBpZiB0aGUgb3B0aW9uIGlzIG9uZVxuICogb2YgdGhlIGFsbG93ZWQgdmFsdWVzLlxuICpcbiAqIF9fYW55X18gbWVhbnMgdGhhdCB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgbWF0dGVyLlxuICogX190eXBlX18gaXMgYSByZXF1aXJlZCBmaWVsZCBmb3IgYWxsIG9iamVjdHMgYW5kIGNvbnRhaW5zIHRoZSBhbGxvd2VkIHR5cGVzIG9mIGFsbCBvYmplY3RzXG4gKi9cbmNvbnN0IHN0cmluZyA9IFwic3RyaW5nXCI7XG5jb25zdCBib29sID0gXCJib29sZWFuXCI7XG5jb25zdCBudW1iZXIgPSBcIm51bWJlclwiO1xuY29uc3QgYXJyYXkgPSBcImFycmF5XCI7XG5jb25zdCBvYmplY3QgPSBcIm9iamVjdFwiOyAvLyBzaG91bGQgb25seSBiZSBpbiBhIF9fdHlwZV9fIHByb3BlcnR5XG5jb25zdCBkb20gPSBcImRvbVwiO1xuY29uc3QgYW55ID0gXCJhbnlcIjtcblxuLy8gTGlzdCBvZiBlbmRwb2ludHNcbmNvbnN0IGVuZFBvaW50cyA9IFtcbiAgXCJhcnJvd1wiLFxuICBcImJhclwiLFxuICBcImJveFwiLFxuICBcImNpcmNsZVwiLFxuICBcImNyb3dcIixcbiAgXCJjdXJ2ZVwiLFxuICBcImRpYW1vbmRcIixcbiAgXCJpbWFnZVwiLFxuICBcImludl9jdXJ2ZVwiLFxuICBcImludl90cmlhbmdsZVwiLFxuICBcInRyaWFuZ2xlXCIsXG4gIFwidmVlXCIsXG5dO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gLS0gVGhlIF9fKl9fIGZvcm1hdCBpcyB1c2VkIHRvIHByZXZlbnQgY29sbGlzaW9ucyB3aXRoIGFjdHVhbCBvcHRpb24gbmFtZXMuICovXG5jb25zdCBub2RlT3B0aW9uczogT3B0aW9uc0NvbmZpZyA9IHtcbiAgYm9yZGVyV2lkdGg6IHsgbnVtYmVyIH0sXG4gIGJvcmRlcldpZHRoU2VsZWN0ZWQ6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgYnJva2VuSW1hZ2U6IHsgc3RyaW5nLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgY2hvc2VuOiB7XG4gICAgbGFiZWw6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIG5vZGU6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuICBjb2xvcjoge1xuICAgIGJvcmRlcjogeyBzdHJpbmcgfSxcbiAgICBiYWNrZ3JvdW5kOiB7IHN0cmluZyB9LFxuICAgIGhpZ2hsaWdodDoge1xuICAgICAgYm9yZGVyOiB7IHN0cmluZyB9LFxuICAgICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBob3Zlcjoge1xuICAgICAgYm9yZGVyOiB7IHN0cmluZyB9LFxuICAgICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICB9LFxuICBvcGFjaXR5OiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGZpeGVkOiB7XG4gICAgeDogeyBib29sZWFuOiBib29sIH0sXG4gICAgeTogeyBib29sZWFuOiBib29sIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gIH0sXG4gIGZvbnQ6IHtcbiAgICBhbGlnbjogeyBzdHJpbmcgfSxcbiAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICBzdHJva2VXaWR0aDogeyBudW1iZXIgfSwgLy8gcHhcbiAgICBzdHJva2VDb2xvcjogeyBzdHJpbmcgfSxcbiAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgIG11bHRpOiB7IGJvb2xlYW46IGJvb2wsIHN0cmluZyB9LFxuICAgIGJvbGQ6IHtcbiAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgc2l6ZTogeyBudW1iZXIgfSwgLy8gcHhcbiAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICBtb2Q6IHsgc3RyaW5nIH0sXG4gICAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICB9LFxuICAgIGJvbGRpdGFsOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBpdGFsOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBtb25vOiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICB9LFxuICBncm91cDogeyBzdHJpbmcsIG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gIGhlaWdodENvbnN0cmFpbnQ6IHtcbiAgICBtaW5pbXVtOiB7IG51bWJlciB9LFxuICAgIHZhbGlnbjogeyBzdHJpbmcgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIG51bWJlciB9LFxuICB9LFxuICBoaWRkZW46IHsgYm9vbGVhbjogYm9vbCB9LFxuICBpY29uOiB7XG4gICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICBjb2RlOiB7IHN0cmluZyB9LCAvLydcXHVmMDA3JyxcbiAgICBzaXplOiB7IG51bWJlciB9LCAvLzUwLFxuICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgIHdlaWdodDogeyBzdHJpbmcsIG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBpZDogeyBzdHJpbmcsIG51bWJlciB9LFxuICBpbWFnZToge1xuICAgIHNlbGVjdGVkOiB7IHN0cmluZywgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sIC8vIC0tPiBVUkxcbiAgICB1bnNlbGVjdGVkOiB7IHN0cmluZywgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sIC8vIC0tPiBVUkxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICB9LFxuICBpbWFnZVBhZGRpbmc6IHtcbiAgICB0b3A6IHsgbnVtYmVyIH0sXG4gICAgcmlnaHQ6IHsgbnVtYmVyIH0sXG4gICAgYm90dG9tOiB7IG51bWJlciB9LFxuICAgIGxlZnQ6IHsgbnVtYmVyIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBudW1iZXIgfSxcbiAgfSxcbiAgbGFiZWw6IHsgc3RyaW5nLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgbGFiZWxIaWdobGlnaHRCb2xkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgbGV2ZWw6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgbWFyZ2luOiB7XG4gICAgdG9wOiB7IG51bWJlciB9LFxuICAgIHJpZ2h0OiB7IG51bWJlciB9LFxuICAgIGJvdHRvbTogeyBudW1iZXIgfSxcbiAgICBsZWZ0OiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgbnVtYmVyIH0sXG4gIH0sXG4gIG1hc3M6IHsgbnVtYmVyIH0sXG4gIHBoeXNpY3M6IHsgYm9vbGVhbjogYm9vbCB9LFxuICBzY2FsaW5nOiB7XG4gICAgbWluOiB7IG51bWJlciB9LFxuICAgIG1heDogeyBudW1iZXIgfSxcbiAgICBsYWJlbDoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBtaW46IHsgbnVtYmVyIH0sXG4gICAgICBtYXg6IHsgbnVtYmVyIH0sXG4gICAgICBtYXhWaXNpYmxlOiB7IG51bWJlciB9LFxuICAgICAgZHJhd1RocmVzaG9sZDogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgY3VzdG9tU2NhbGluZ0Z1bmN0aW9uOiB7IGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgc2hhZG93OiB7XG4gICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgc2l6ZTogeyBudW1iZXIgfSxcbiAgICB4OiB7IG51bWJlciB9LFxuICAgIHk6IHsgbnVtYmVyIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gIH0sXG4gIHNoYXBlOiB7XG4gICAgc3RyaW5nOiBbXG4gICAgICBcImN1c3RvbVwiLFxuICAgICAgXCJlbGxpcHNlXCIsXG4gICAgICBcImNpcmNsZVwiLFxuICAgICAgXCJkYXRhYmFzZVwiLFxuICAgICAgXCJib3hcIixcbiAgICAgIFwidGV4dFwiLFxuICAgICAgXCJpbWFnZVwiLFxuICAgICAgXCJjaXJjdWxhckltYWdlXCIsXG4gICAgICBcImRpYW1vbmRcIixcbiAgICAgIFwiZG90XCIsXG4gICAgICBcInN0YXJcIixcbiAgICAgIFwidHJpYW5nbGVcIixcbiAgICAgIFwidHJpYW5nbGVEb3duXCIsXG4gICAgICBcInNxdWFyZVwiLFxuICAgICAgXCJpY29uXCIsXG4gICAgICBcImhleGFnb25cIixcbiAgICBdLFxuICB9LFxuICBjdHhSZW5kZXJlcjogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gIHNoYXBlUHJvcGVydGllczoge1xuICAgIGJvcmRlckRhc2hlczogeyBib29sZWFuOiBib29sLCBhcnJheSB9LFxuICAgIGJvcmRlclJhZGl1czogeyBudW1iZXIgfSxcbiAgICBpbnRlcnBvbGF0aW9uOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICB1c2VJbWFnZVNpemU6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHVzZUJvcmRlcldpdGhJbWFnZTogeyBib29sZWFuOiBib29sIH0sXG4gICAgY29vcmRpbmF0ZU9yaWdpbjogeyBzdHJpbmc6IFtcImNlbnRlclwiLCBcInRvcC1sZWZ0XCJdIH0sXG4gICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gIH0sXG4gIHNpemU6IHsgbnVtYmVyIH0sXG4gIHRpdGxlOiB7IHN0cmluZywgZG9tLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgdmFsdWU6IHsgbnVtYmVyLCB1bmRlZmluZWQ6IFwidW5kZWZpbmVkXCIgfSxcbiAgd2lkdGhDb25zdHJhaW50OiB7XG4gICAgbWluaW11bTogeyBudW1iZXIgfSxcbiAgICBtYXhpbXVtOiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCwgbnVtYmVyIH0sXG4gIH0sXG4gIHg6IHsgbnVtYmVyIH0sXG4gIHk6IHsgbnVtYmVyIH0sXG4gIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxufTtcbmNvbnN0IGFsbE9wdGlvbnM6IE9wdGlvbnNDb25maWcgPSB7XG4gIGNvbmZpZ3VyZToge1xuICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGZpbHRlcjogeyBib29sZWFuOiBib29sLCBzdHJpbmcsIGFycmF5LCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgY29udGFpbmVyOiB7IGRvbSB9LFxuICAgIHNob3dCdXR0b246IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCwgc3RyaW5nLCBhcnJheSwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICB9LFxuICBlZGdlczoge1xuICAgIGFycm93czoge1xuICAgICAgdG86IHtcbiAgICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICAgIHNjYWxlRmFjdG9yOiB7IG51bWJlciB9LFxuICAgICAgICB0eXBlOiB7IHN0cmluZzogZW5kUG9pbnRzIH0sXG4gICAgICAgIGltYWdlSGVpZ2h0OiB7IG51bWJlciB9LFxuICAgICAgICBpbWFnZVdpZHRoOiB7IG51bWJlciB9LFxuICAgICAgICBzcmM6IHsgc3RyaW5nIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgfSxcbiAgICAgIG1pZGRsZToge1xuICAgICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgICAgc2NhbGVGYWN0b3I6IHsgbnVtYmVyIH0sXG4gICAgICAgIHR5cGU6IHsgc3RyaW5nOiBlbmRQb2ludHMgfSxcbiAgICAgICAgaW1hZ2VXaWR0aDogeyBudW1iZXIgfSxcbiAgICAgICAgaW1hZ2VIZWlnaHQ6IHsgbnVtYmVyIH0sXG4gICAgICAgIHNyYzogeyBzdHJpbmcgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgICB9LFxuICAgICAgZnJvbToge1xuICAgICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgICAgc2NhbGVGYWN0b3I6IHsgbnVtYmVyIH0sXG4gICAgICAgIHR5cGU6IHsgc3RyaW5nOiBlbmRQb2ludHMgfSxcbiAgICAgICAgaW1hZ2VXaWR0aDogeyBudW1iZXIgfSxcbiAgICAgICAgaW1hZ2VIZWlnaHQ6IHsgbnVtYmVyIH0sXG4gICAgICAgIHNyYzogeyBzdHJpbmcgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHsgc3RyaW5nOiBbXCJmcm9tXCIsIFwidG9cIiwgXCJtaWRkbGVcIl0sIG9iamVjdCB9LFxuICAgIH0sXG4gICAgZW5kUG9pbnRPZmZzZXQ6IHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXIsXG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgbnVtYmVyOiBudW1iZXIsXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHtcbiAgICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICAgIG51bWJlcjogbnVtYmVyLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGFycm93U3RyaWtldGhyb3VnaDogeyBib29sZWFuOiBib29sIH0sXG4gICAgYmFja2dyb3VuZDoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sXG4gICAgICBkYXNoZXM6IHsgYm9vbGVhbjogYm9vbCwgYXJyYXkgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgY2hvc2VuOiB7XG4gICAgICBsYWJlbDogeyBib29sZWFuOiBib29sLCBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgICBlZGdlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgY29sb3I6IHtcbiAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgaGlnaGxpZ2h0OiB7IHN0cmluZyB9LFxuICAgICAgaG92ZXI6IHsgc3RyaW5nIH0sXG4gICAgICBpbmhlcml0OiB7IHN0cmluZzogW1wiZnJvbVwiLCBcInRvXCIsIFwiYm90aFwiXSwgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgb3BhY2l0eTogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgfSxcbiAgICBkYXNoZXM6IHsgYm9vbGVhbjogYm9vbCwgYXJyYXkgfSxcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgYmFja2dyb3VuZDogeyBzdHJpbmcgfSxcbiAgICAgIHN0cm9rZVdpZHRoOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgc3Ryb2tlQ29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICBhbGlnbjogeyBzdHJpbmc6IFtcImhvcml6b250YWxcIiwgXCJ0b3BcIiwgXCJtaWRkbGVcIiwgXCJib3R0b21cIl0gfSxcbiAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICBtdWx0aTogeyBib29sZWFuOiBib29sLCBzdHJpbmcgfSxcbiAgICAgIGJvbGQ6IHtcbiAgICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICAgIH0sXG4gICAgICBib2xkaXRhbDoge1xuICAgICAgICBjb2xvcjogeyBzdHJpbmcgfSxcbiAgICAgICAgc2l6ZTogeyBudW1iZXIgfSwgLy8gcHhcbiAgICAgICAgZmFjZTogeyBzdHJpbmcgfSxcbiAgICAgICAgbW9kOiB7IHN0cmluZyB9LFxuICAgICAgICB2YWRqdXN0OiB7IG51bWJlciB9LFxuICAgICAgICBfX3R5cGVfXzogeyBvYmplY3QsIHN0cmluZyB9LFxuICAgICAgfSxcbiAgICAgIGl0YWw6IHtcbiAgICAgICAgY29sb3I6IHsgc3RyaW5nIH0sXG4gICAgICAgIHNpemU6IHsgbnVtYmVyIH0sIC8vIHB4XG4gICAgICAgIGZhY2U6IHsgc3RyaW5nIH0sXG4gICAgICAgIG1vZDogeyBzdHJpbmcgfSxcbiAgICAgICAgdmFkanVzdDogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICAgIH0sXG4gICAgICBtb25vOiB7XG4gICAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgICBzaXplOiB7IG51bWJlciB9LCAvLyBweFxuICAgICAgICBmYWNlOiB7IHN0cmluZyB9LFxuICAgICAgICBtb2Q6IHsgc3RyaW5nIH0sXG4gICAgICAgIHZhZGp1c3Q6IHsgbnVtYmVyIH0sXG4gICAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgc3RyaW5nIH0sXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBzdHJpbmcgfSxcbiAgICB9LFxuICAgIGhpZGRlbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgaG92ZXJXaWR0aDogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiLCBudW1iZXIgfSxcbiAgICBsYWJlbDogeyBzdHJpbmcsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgbGVuZ3RoOiB7IG51bWJlciwgdW5kZWZpbmVkOiBcInVuZGVmaW5lZFwiIH0sXG4gICAgcGh5c2ljczogeyBib29sZWFuOiBib29sIH0sXG4gICAgc2NhbGluZzoge1xuICAgICAgbWluOiB7IG51bWJlciB9LFxuICAgICAgbWF4OiB7IG51bWJlciB9LFxuICAgICAgbGFiZWw6IHtcbiAgICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICAgIG1pbjogeyBudW1iZXIgfSxcbiAgICAgICAgbWF4OiB7IG51bWJlciB9LFxuICAgICAgICBtYXhWaXNpYmxlOiB7IG51bWJlciB9LFxuICAgICAgICBkcmF3VGhyZXNob2xkOiB7IG51bWJlciB9LFxuICAgICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIH0sXG4gICAgICBjdXN0b21TY2FsaW5nRnVuY3Rpb246IHsgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgfSxcbiAgICBzZWxlY3Rpb25XaWR0aDogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiLCBudW1iZXIgfSxcbiAgICBzZWxmUmVmZXJlbmNlU2l6ZTogeyBudW1iZXIgfSxcbiAgICBzZWxmUmVmZXJlbmNlOiB7XG4gICAgICBzaXplOiB7IG51bWJlciB9LFxuICAgICAgYW5nbGU6IHsgbnVtYmVyIH0sXG4gICAgICByZW5kZXJCZWhpbmRUaGVOb2RlOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICAgIH0sXG4gICAgc2hhZG93OiB7XG4gICAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGNvbG9yOiB7IHN0cmluZyB9LFxuICAgICAgc2l6ZTogeyBudW1iZXIgfSxcbiAgICAgIHg6IHsgbnVtYmVyIH0sXG4gICAgICB5OiB7IG51bWJlciB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICBzbW9vdGg6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgdHlwZToge1xuICAgICAgICBzdHJpbmc6IFtcbiAgICAgICAgICBcImR5bmFtaWNcIixcbiAgICAgICAgICBcImNvbnRpbnVvdXNcIixcbiAgICAgICAgICBcImRpc2NyZXRlXCIsXG4gICAgICAgICAgXCJkaWFnb25hbENyb3NzXCIsXG4gICAgICAgICAgXCJzdHJhaWdodENyb3NzXCIsXG4gICAgICAgICAgXCJob3Jpem9udGFsXCIsXG4gICAgICAgICAgXCJ2ZXJ0aWNhbFwiLFxuICAgICAgICAgIFwiY3VydmVkQ1dcIixcbiAgICAgICAgICBcImN1cnZlZENDV1wiLFxuICAgICAgICAgIFwiY3ViaWNCZXppZXJcIixcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICByb3VuZG5lc3M6IHsgbnVtYmVyIH0sXG4gICAgICBmb3JjZURpcmVjdGlvbjoge1xuICAgICAgICBzdHJpbmc6IFtcImhvcml6b250YWxcIiwgXCJ2ZXJ0aWNhbFwiLCBcIm5vbmVcIl0sXG4gICAgICAgIGJvb2xlYW46IGJvb2wsXG4gICAgICB9LFxuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICB0aXRsZTogeyBzdHJpbmcsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIHdpZHRoOiB7IG51bWJlciB9LFxuICAgIHdpZHRoQ29uc3RyYWludDoge1xuICAgICAgbWF4aW11bTogeyBudW1iZXIgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCwgbnVtYmVyIH0sXG4gICAgfSxcbiAgICB2YWx1ZTogeyBudW1iZXIsIHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBncm91cHM6IHtcbiAgICB1c2VEZWZhdWx0R3JvdXBzOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBfX2FueV9fOiBub2RlT3B0aW9ucyxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgaW50ZXJhY3Rpb246IHtcbiAgICBkcmFnTm9kZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGRyYWdWaWV3OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBoaWRlRWRnZXNPbkRyYWc6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGhpZGVFZGdlc09uWm9vbTogeyBib29sZWFuOiBib29sIH0sXG4gICAgaGlkZU5vZGVzT25EcmFnOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBob3ZlcjogeyBib29sZWFuOiBib29sIH0sXG4gICAga2V5Ym9hcmQ6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgc3BlZWQ6IHtcbiAgICAgICAgeDogeyBudW1iZXIgfSxcbiAgICAgICAgeTogeyBudW1iZXIgfSxcbiAgICAgICAgem9vbTogeyBudW1iZXIgfSxcbiAgICAgICAgX190eXBlX186IHsgb2JqZWN0IH0sXG4gICAgICB9LFxuICAgICAgYmluZFRvV2luZG93OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIGF1dG9Gb2N1czogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wgfSxcbiAgICB9LFxuICAgIG11bHRpc2VsZWN0OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBuYXZpZ2F0aW9uQnV0dG9uczogeyBib29sZWFuOiBib29sIH0sXG4gICAgc2VsZWN0YWJsZTogeyBib29sZWFuOiBib29sIH0sXG4gICAgc2VsZWN0Q29ubmVjdGVkRWRnZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIGhvdmVyQ29ubmVjdGVkRWRnZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgIHRvb2x0aXBEZWxheTogeyBudW1iZXIgfSxcbiAgICB6b29tVmlldzogeyBib29sZWFuOiBib29sIH0sXG4gICAgem9vbVNwZWVkOiB7IG51bWJlciB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCB9LFxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICByYW5kb21TZWVkOiB7IHVuZGVmaW5lZDogXCJ1bmRlZmluZWRcIiwgbnVtYmVyLCBzdHJpbmcgfSxcbiAgICBpbXByb3ZlZExheW91dDogeyBib29sZWFuOiBib29sIH0sXG4gICAgY2x1c3RlclRocmVzaG9sZDogeyBudW1iZXIgfSxcbiAgICBoaWVyYXJjaGljYWw6IHtcbiAgICAgIGVuYWJsZWQ6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgbGV2ZWxTZXBhcmF0aW9uOiB7IG51bWJlciB9LFxuICAgICAgbm9kZVNwYWNpbmc6IHsgbnVtYmVyIH0sXG4gICAgICB0cmVlU3BhY2luZzogeyBudW1iZXIgfSxcbiAgICAgIGJsb2NrU2hpZnRpbmc6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgZWRnZU1pbmltaXphdGlvbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBwYXJlbnRDZW50cmFsaXphdGlvbjogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBkaXJlY3Rpb246IHsgc3RyaW5nOiBbXCJVRFwiLCBcIkRVXCIsIFwiTFJcIiwgXCJSTFwiXSB9LCAvLyBVRCwgRFUsIExSLCBSTFxuICAgICAgc29ydE1ldGhvZDogeyBzdHJpbmc6IFtcImh1YnNpemVcIiwgXCJkaXJlY3RlZFwiXSB9LCAvLyBodWJzaXplLCBkaXJlY3RlZFxuICAgICAgc2hha2VUb3dhcmRzOiB7IHN0cmluZzogW1wibGVhdmVzXCIsIFwicm9vdHNcIl0gfSwgLy8gbGVhdmVzLCByb290c1xuICAgICAgX190eXBlX186IHsgb2JqZWN0LCBib29sZWFuOiBib29sIH0sXG4gICAgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgbWFuaXB1bGF0aW9uOiB7XG4gICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgaW5pdGlhbGx5QWN0aXZlOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBhZGROb2RlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBhZGRFZGdlOiB7IGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICBlZGl0Tm9kZTogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgZWRpdEVkZ2U6IHtcbiAgICAgIGVkaXRXaXRob3V0RHJhZzogeyBmdW5jdGlvbjogXCJmdW5jdGlvblwiIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QsIGJvb2xlYW46IGJvb2wsIGZ1bmN0aW9uOiBcImZ1bmN0aW9uXCIgfSxcbiAgICB9LFxuICAgIGRlbGV0ZU5vZGU6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIGRlbGV0ZUVkZ2U6IHsgYm9vbGVhbjogYm9vbCwgZnVuY3Rpb246IFwiZnVuY3Rpb25cIiB9LFxuICAgIGNvbnRyb2xOb2RlU3R5bGU6IG5vZGVPcHRpb25zLFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuICBub2Rlczogbm9kZU9wdGlvbnMsXG4gIHBoeXNpY3M6IHtcbiAgICBlbmFibGVkOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICBiYXJuZXNIdXQ6IHtcbiAgICAgIHRoZXRhOiB7IG51bWJlciB9LFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiB7IG51bWJlciB9LFxuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBhdm9pZE92ZXJsYXA6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIGZvcmNlQXRsYXMyQmFzZWQ6IHtcbiAgICAgIHRoZXRhOiB7IG51bWJlciB9LFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiB7IG51bWJlciB9LFxuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBhdm9pZE92ZXJsYXA6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIHJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIG5vZGVEaXN0YW5jZTogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIGhpZXJhcmNoaWNhbFJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdMZW5ndGg6IHsgbnVtYmVyIH0sXG4gICAgICBzcHJpbmdDb25zdGFudDogeyBudW1iZXIgfSxcbiAgICAgIG5vZGVEaXN0YW5jZTogeyBudW1iZXIgfSxcbiAgICAgIGRhbXBpbmc6IHsgbnVtYmVyIH0sXG4gICAgICBhdm9pZE92ZXJsYXA6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIG1heFZlbG9jaXR5OiB7IG51bWJlciB9LFxuICAgIG1pblZlbG9jaXR5OiB7IG51bWJlciB9LCAvLyBweC9zXG4gICAgc29sdmVyOiB7XG4gICAgICBzdHJpbmc6IFtcbiAgICAgICAgXCJiYXJuZXNIdXRcIixcbiAgICAgICAgXCJyZXB1bHNpb25cIixcbiAgICAgICAgXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIixcbiAgICAgICAgXCJmb3JjZUF0bGFzMkJhc2VkXCIsXG4gICAgICBdLFxuICAgIH0sXG4gICAgc3RhYmlsaXphdGlvbjoge1xuICAgICAgZW5hYmxlZDogeyBib29sZWFuOiBib29sIH0sXG4gICAgICBpdGVyYXRpb25zOiB7IG51bWJlciB9LCAvLyBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb24gdG8gc3RhYmlsaXplXG4gICAgICB1cGRhdGVJbnRlcnZhbDogeyBudW1iZXIgfSxcbiAgICAgIG9ubHlEeW5hbWljRWRnZXM6IHsgYm9vbGVhbjogYm9vbCB9LFxuICAgICAgZml0OiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICAgIH0sXG4gICAgdGltZXN0ZXA6IHsgbnVtYmVyIH0sXG4gICAgYWRhcHRpdmVUaW1lc3RlcDogeyBib29sZWFuOiBib29sIH0sXG4gICAgd2luZDoge1xuICAgICAgeDogeyBudW1iZXIgfSxcbiAgICAgIHk6IHsgbnVtYmVyIH0sXG4gICAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgICB9LFxuICAgIF9fdHlwZV9fOiB7IG9iamVjdCwgYm9vbGVhbjogYm9vbCB9LFxuICB9LFxuXG4gIC8vZ2xvYmFscyA6XG4gIGF1dG9SZXNpemU6IHsgYm9vbGVhbjogYm9vbCB9LFxuICBjbGlja1RvVXNlOiB7IGJvb2xlYW46IGJvb2wgfSxcbiAgbG9jYWxlOiB7IHN0cmluZyB9LFxuICBsb2NhbGVzOiB7XG4gICAgX19hbnlfXzogeyBhbnkgfSxcbiAgICBfX3R5cGVfXzogeyBvYmplY3QgfSxcbiAgfSxcbiAgaGVpZ2h0OiB7IHN0cmluZyB9LFxuICB3aWR0aDogeyBzdHJpbmcgfSxcbiAgX190eXBlX186IHsgb2JqZWN0IH0sXG59O1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cblxuLyoqXG4gKiBUaGlzIHByb3ZpZGVzIHJhbmdlcywgaW5pdGlhbCB2YWx1ZXMsIHN0ZXBzIGFuZCBkcm9wZG93biBtZW51IGNob2ljZXMgZm9yIHRoZVxuICogY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAcmVtYXJrc1xuICogQ2hlY2tib3g6IGBib29sZWFuYFxuICogICBUaGUgdmFsdWUgc3VwbGxpZWQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICpcbiAqIFRleHQgZmllbGQ6IGBzdHJpbmdgXG4gKiAgIFRoZSBwYXNzZWQgdGV4dCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluaXRpYWwgdmFsdWUuIEFueSB0ZXh0IHdpbGwgYmVcbiAqICAgYWNjZXB0ZWQgYWZ0ZXJ3YXJkcy5cbiAqXG4gKiBOdW1iZXIgcmFuZ2U6IGBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXWBcbiAqICAgVGhlIG1lYW5pbmdzIGFyZSBgW2luaXRpYWwgdmFsdWUsIG1pbiwgbWF4LCBzdGVwXWAuXG4gKlxuICogRHJvcGRvd246IGBbRXhjbHVkZTxzdHJpbmcsIFwiY29sb3JcIj4sIC4uLihzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKVtdXWBcbiAqICAgVHJhbnNsYXRpb25zIGZvciBwZW9wbGUgd2l0aCBwb29yIHVuZGVyc3RhbmRpbmcgb2YgVHlwZVNjcmlwdDogdGhlIGZpcnN0XG4gKiAgIHZhbHVlIGFsd2F5cyBoYXMgdG8gYmUgYSBzdHJpbmcgYnV0IG5ldmVyIGBcImNvbG9yXCJgLCB0aGUgcmVzdCBjYW4gYmUgYW55XG4gKiAgIGNvbWJpbmF0aW9uIG9mIHN0cmluZ3MsIG51bWJlcnMgYW5kIGJvb2xlYW5zLlxuICpcbiAqIENvbG9yIHBpY2tlcjogYFtcImNvbG9yXCIsIHN0cmluZ11gXG4gKiAgIFRoZSBmaXJzdCB2YWx1ZSBzYXlzIHRoaXMgd2lsbCBiZSBhIGNvbG9yIHBpY2tlciBub3QgYSBkcm9wZG93biBtZW51LiBUaGVcbiAqICAgbmV4dCB2YWx1ZSBpcyB0aGUgaW5pdGlhbCBjb2xvci5cbiAqL1xuY29uc3QgY29uZmlndXJlT3B0aW9uczogQ29uZmlndXJhdG9yQ29uZmlnID0ge1xuICBub2Rlczoge1xuICAgIGJvcmRlcldpZHRoOiBbMSwgMCwgMTAsIDFdLFxuICAgIGJvcmRlcldpZHRoU2VsZWN0ZWQ6IFsyLCAwLCAxMCwgMV0sXG4gICAgY29sb3I6IHtcbiAgICAgIGJvcmRlcjogW1wiY29sb3JcIiwgXCIjMkI3Q0U5XCJdLFxuICAgICAgYmFja2dyb3VuZDogW1wiY29sb3JcIiwgXCIjOTdDMkZDXCJdLFxuICAgICAgaGlnaGxpZ2h0OiB7XG4gICAgICAgIGJvcmRlcjogW1wiY29sb3JcIiwgXCIjMkI3Q0U5XCJdLFxuICAgICAgICBiYWNrZ3JvdW5kOiBbXCJjb2xvclwiLCBcIiNEMkU1RkZcIl0sXG4gICAgICB9LFxuICAgICAgaG92ZXI6IHtcbiAgICAgICAgYm9yZGVyOiBbXCJjb2xvclwiLCBcIiMyQjdDRTlcIl0sXG4gICAgICAgIGJhY2tncm91bmQ6IFtcImNvbG9yXCIsIFwiI0QyRTVGRlwiXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBvcGFjaXR5OiBbMCwgMCwgMSwgMC4xXSxcbiAgICBmaXhlZDoge1xuICAgICAgeDogZmFsc2UsXG4gICAgICB5OiBmYWxzZSxcbiAgICB9LFxuICAgIGZvbnQ6IHtcbiAgICAgIGNvbG9yOiBbXCJjb2xvclwiLCBcIiMzNDM0MzRcIl0sXG4gICAgICBzaXplOiBbMTQsIDAsIDEwMCwgMV0sIC8vIHB4XG4gICAgICBmYWNlOiBbXCJhcmlhbFwiLCBcInZlcmRhbmFcIiwgXCJ0YWhvbWFcIl0sXG4gICAgICBiYWNrZ3JvdW5kOiBbXCJjb2xvclwiLCBcIm5vbmVcIl0sXG4gICAgICBzdHJva2VXaWR0aDogWzAsIDAsIDUwLCAxXSwgLy8gcHhcbiAgICAgIHN0cm9rZUNvbG9yOiBbXCJjb2xvclwiLCBcIiNmZmZmZmZcIl0sXG4gICAgfSxcbiAgICAvL2dyb3VwOiAnc3RyaW5nJyxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGxhYmVsSGlnaGxpZ2h0Qm9sZDogdHJ1ZSxcbiAgICAvL2ljb246IHtcbiAgICAvLyAgZmFjZTogJ3N0cmluZycsICAvLydGb250QXdlc29tZScsXG4gICAgLy8gIGNvZGU6ICdzdHJpbmcnLCAgLy8nXFx1ZjAwNycsXG4gICAgLy8gIHNpemU6IFs1MCwgMCwgMjAwLCAxXSwgIC8vNTAsXG4gICAgLy8gIGNvbG9yOiBbJ2NvbG9yJywnIzJCN0NFOSddICAgLy8nI2FhMDBmZidcbiAgICAvL30sXG4gICAgLy9pbWFnZTogJ3N0cmluZycsIC8vIC0tPiBVUkxcbiAgICBwaHlzaWNzOiB0cnVlLFxuICAgIHNjYWxpbmc6IHtcbiAgICAgIG1pbjogWzEwLCAwLCAyMDAsIDFdLFxuICAgICAgbWF4OiBbMzAsIDAsIDIwMCwgMV0sXG4gICAgICBsYWJlbDoge1xuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgbWluOiBbMTQsIDAsIDIwMCwgMV0sXG4gICAgICAgIG1heDogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgICBtYXhWaXNpYmxlOiBbMzAsIDAsIDIwMCwgMV0sXG4gICAgICAgIGRyYXdUaHJlc2hvbGQ6IFs1LCAwLCAyMCwgMV0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2hhZG93OiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGNvbG9yOiBcInJnYmEoMCwwLDAsMC41KVwiLFxuICAgICAgc2l6ZTogWzEwLCAwLCAyMCwgMV0sXG4gICAgICB4OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgICB5OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgfSxcbiAgICBzaGFwZTogW1xuICAgICAgXCJlbGxpcHNlXCIsXG4gICAgICBcImJveFwiLFxuICAgICAgXCJjaXJjbGVcIixcbiAgICAgIFwiZGF0YWJhc2VcIixcbiAgICAgIFwiZGlhbW9uZFwiLFxuICAgICAgXCJkb3RcIixcbiAgICAgIFwic3F1YXJlXCIsXG4gICAgICBcInN0YXJcIixcbiAgICAgIFwidGV4dFwiLFxuICAgICAgXCJ0cmlhbmdsZVwiLFxuICAgICAgXCJ0cmlhbmdsZURvd25cIixcbiAgICAgIFwiaGV4YWdvblwiLFxuICAgIF0sXG4gICAgc2hhcGVQcm9wZXJ0aWVzOiB7XG4gICAgICBib3JkZXJEYXNoZXM6IGZhbHNlLFxuICAgICAgYm9yZGVyUmFkaXVzOiBbNiwgMCwgMjAsIDFdLFxuICAgICAgaW50ZXJwb2xhdGlvbjogdHJ1ZSxcbiAgICAgIHVzZUltYWdlU2l6ZTogZmFsc2UsXG4gICAgfSxcbiAgICBzaXplOiBbMjUsIDAsIDIwMCwgMV0sXG4gIH0sXG4gIGVkZ2VzOiB7XG4gICAgYXJyb3dzOiB7XG4gICAgICB0bzogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IFsxLCAwLCAzLCAwLjA1XSwgdHlwZTogXCJhcnJvd1wiIH0sXG4gICAgICBtaWRkbGU6IHsgZW5hYmxlZDogZmFsc2UsIHNjYWxlRmFjdG9yOiBbMSwgMCwgMywgMC4wNV0sIHR5cGU6IFwiYXJyb3dcIiB9LFxuICAgICAgZnJvbTogeyBlbmFibGVkOiBmYWxzZSwgc2NhbGVGYWN0b3I6IFsxLCAwLCAzLCAwLjA1XSwgdHlwZTogXCJhcnJvd1wiIH0sXG4gICAgfSxcbiAgICBlbmRQb2ludE9mZnNldDoge1xuICAgICAgZnJvbTogWzAsIC0xMCwgMTAsIDFdLFxuICAgICAgdG86IFswLCAtMTAsIDEwLCAxXSxcbiAgICB9LFxuICAgIGFycm93U3RyaWtldGhyb3VnaDogdHJ1ZSxcbiAgICBjb2xvcjoge1xuICAgICAgY29sb3I6IFtcImNvbG9yXCIsIFwiIzg0ODQ4NFwiXSxcbiAgICAgIGhpZ2hsaWdodDogW1wiY29sb3JcIiwgXCIjODQ4NDg0XCJdLFxuICAgICAgaG92ZXI6IFtcImNvbG9yXCIsIFwiIzg0ODQ4NFwiXSxcbiAgICAgIGluaGVyaXQ6IFtcImZyb21cIiwgXCJ0b1wiLCBcImJvdGhcIiwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgb3BhY2l0eTogWzEsIDAsIDEsIDAuMDVdLFxuICAgIH0sXG4gICAgZGFzaGVzOiBmYWxzZSxcbiAgICBmb250OiB7XG4gICAgICBjb2xvcjogW1wiY29sb3JcIiwgXCIjMzQzNDM0XCJdLFxuICAgICAgc2l6ZTogWzE0LCAwLCAxMDAsIDFdLCAvLyBweFxuICAgICAgZmFjZTogW1wiYXJpYWxcIiwgXCJ2ZXJkYW5hXCIsIFwidGFob21hXCJdLFxuICAgICAgYmFja2dyb3VuZDogW1wiY29sb3JcIiwgXCJub25lXCJdLFxuICAgICAgc3Ryb2tlV2lkdGg6IFsyLCAwLCA1MCwgMV0sIC8vIHB4XG4gICAgICBzdHJva2VDb2xvcjogW1wiY29sb3JcIiwgXCIjZmZmZmZmXCJdLFxuICAgICAgYWxpZ246IFtcImhvcml6b250YWxcIiwgXCJ0b3BcIiwgXCJtaWRkbGVcIiwgXCJib3R0b21cIl0sXG4gICAgfSxcbiAgICBoaWRkZW46IGZhbHNlLFxuICAgIGhvdmVyV2lkdGg6IFsxLjUsIDAsIDUsIDAuMV0sXG4gICAgbGFiZWxIaWdobGlnaHRCb2xkOiB0cnVlLFxuICAgIHBoeXNpY3M6IHRydWUsXG4gICAgc2NhbGluZzoge1xuICAgICAgbWluOiBbMSwgMCwgMTAwLCAxXSxcbiAgICAgIG1heDogWzE1LCAwLCAxMDAsIDFdLFxuICAgICAgbGFiZWw6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbWluOiBbMTQsIDAsIDIwMCwgMV0sXG4gICAgICAgIG1heDogWzMwLCAwLCAyMDAsIDFdLFxuICAgICAgICBtYXhWaXNpYmxlOiBbMzAsIDAsIDIwMCwgMV0sXG4gICAgICAgIGRyYXdUaHJlc2hvbGQ6IFs1LCAwLCAyMCwgMV0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2VsZWN0aW9uV2lkdGg6IFsxLjUsIDAsIDUsIDAuMV0sXG4gICAgc2VsZlJlZmVyZW5jZVNpemU6IFsyMCwgMCwgMjAwLCAxXSxcbiAgICBzZWxmUmVmZXJlbmNlOiB7XG4gICAgICBzaXplOiBbMjAsIDAsIDIwMCwgMV0sXG4gICAgICBhbmdsZTogW01hdGguUEkgLyAyLCAtNiAqIE1hdGguUEksIDYgKiBNYXRoLlBJLCBNYXRoLlBJIC8gOF0sXG4gICAgICByZW5kZXJCZWhpbmRUaGVOb2RlOiB0cnVlLFxuICAgIH0sXG4gICAgc2hhZG93OiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGNvbG9yOiBcInJnYmEoMCwwLDAsMC41KVwiLFxuICAgICAgc2l6ZTogWzEwLCAwLCAyMCwgMV0sXG4gICAgICB4OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgICB5OiBbNSwgLTMwLCAzMCwgMV0sXG4gICAgfSxcbiAgICBzbW9vdGg6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICB0eXBlOiBbXG4gICAgICAgIFwiZHluYW1pY1wiLFxuICAgICAgICBcImNvbnRpbnVvdXNcIixcbiAgICAgICAgXCJkaXNjcmV0ZVwiLFxuICAgICAgICBcImRpYWdvbmFsQ3Jvc3NcIixcbiAgICAgICAgXCJzdHJhaWdodENyb3NzXCIsXG4gICAgICAgIFwiaG9yaXpvbnRhbFwiLFxuICAgICAgICBcInZlcnRpY2FsXCIsXG4gICAgICAgIFwiY3VydmVkQ1dcIixcbiAgICAgICAgXCJjdXJ2ZWRDQ1dcIixcbiAgICAgICAgXCJjdWJpY0JlemllclwiLFxuICAgICAgXSxcbiAgICAgIGZvcmNlRGlyZWN0aW9uOiBbXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIiwgXCJub25lXCJdLFxuICAgICAgcm91bmRuZXNzOiBbMC41LCAwLCAxLCAwLjA1XSxcbiAgICB9LFxuICAgIHdpZHRoOiBbMSwgMCwgMzAsIDFdLFxuICB9LFxuICBsYXlvdXQ6IHtcbiAgICAvL3JhbmRvbVNlZWQ6IFswLCAwLCA1MDAsIDFdLFxuICAgIC8vaW1wcm92ZWRMYXlvdXQ6IHRydWUsXG4gICAgaGllcmFyY2hpY2FsOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGxldmVsU2VwYXJhdGlvbjogWzE1MCwgMjAsIDUwMCwgNV0sXG4gICAgICBub2RlU3BhY2luZzogWzEwMCwgMjAsIDUwMCwgNV0sXG4gICAgICB0cmVlU3BhY2luZzogWzIwMCwgMjAsIDUwMCwgNV0sXG4gICAgICBibG9ja1NoaWZ0aW5nOiB0cnVlLFxuICAgICAgZWRnZU1pbmltaXphdGlvbjogdHJ1ZSxcbiAgICAgIHBhcmVudENlbnRyYWxpemF0aW9uOiB0cnVlLFxuICAgICAgZGlyZWN0aW9uOiBbXCJVRFwiLCBcIkRVXCIsIFwiTFJcIiwgXCJSTFwiXSwgLy8gVUQsIERVLCBMUiwgUkxcbiAgICAgIHNvcnRNZXRob2Q6IFtcImh1YnNpemVcIiwgXCJkaXJlY3RlZFwiXSwgLy8gaHVic2l6ZSwgZGlyZWN0ZWRcbiAgICAgIHNoYWtlVG93YXJkczogW1wibGVhdmVzXCIsIFwicm9vdHNcIl0sIC8vIGxlYXZlcywgcm9vdHNcbiAgICB9LFxuICB9LFxuICBpbnRlcmFjdGlvbjoge1xuICAgIGRyYWdOb2RlczogdHJ1ZSxcbiAgICBkcmFnVmlldzogdHJ1ZSxcbiAgICBoaWRlRWRnZXNPbkRyYWc6IGZhbHNlLFxuICAgIGhpZGVFZGdlc09uWm9vbTogZmFsc2UsXG4gICAgaGlkZU5vZGVzT25EcmFnOiBmYWxzZSxcbiAgICBob3ZlcjogZmFsc2UsXG4gICAga2V5Ym9hcmQ6IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgc3BlZWQ6IHtcbiAgICAgICAgeDogWzEwLCAwLCA0MCwgMV0sXG4gICAgICAgIHk6IFsxMCwgMCwgNDAsIDFdLFxuICAgICAgICB6b29tOiBbMC4wMiwgMCwgMC4xLCAwLjAwNV0sXG4gICAgICB9LFxuICAgICAgYmluZFRvV2luZG93OiB0cnVlLFxuICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgIH0sXG4gICAgbXVsdGlzZWxlY3Q6IGZhbHNlLFxuICAgIG5hdmlnYXRpb25CdXR0b25zOiBmYWxzZSxcbiAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgIHNlbGVjdENvbm5lY3RlZEVkZ2VzOiB0cnVlLFxuICAgIGhvdmVyQ29ubmVjdGVkRWRnZXM6IHRydWUsXG4gICAgdG9vbHRpcERlbGF5OiBbMzAwLCAwLCAxMDAwLCAyNV0sXG4gICAgem9vbVZpZXc6IHRydWUsXG4gICAgem9vbVNwZWVkOiBbMSwgMC4xLCAyLCAwLjFdLFxuICB9LFxuICBtYW5pcHVsYXRpb246IHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBpbml0aWFsbHlBY3RpdmU6IGZhbHNlLFxuICB9LFxuICBwaHlzaWNzOiB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBiYXJuZXNIdXQ6IHtcbiAgICAgIHRoZXRhOiBbMC41LCAwLjEsIDEsIDAuMDVdLFxuICAgICAgZ3Jhdml0YXRpb25hbENvbnN0YW50OiBbLTIwMDAsIC0zMDAwMCwgMCwgNTBdLFxuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjMsIDAsIDEwLCAwLjA1XSxcbiAgICAgIHNwcmluZ0xlbmd0aDogWzk1LCAwLCA1MDAsIDVdLFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IFswLjA0LCAwLCAxLjIsIDAuMDA1XSxcbiAgICAgIGRhbXBpbmc6IFswLjA5LCAwLCAxLCAwLjAxXSxcbiAgICAgIGF2b2lkT3ZlcmxhcDogWzAsIDAsIDEsIDAuMDFdLFxuICAgIH0sXG4gICAgZm9yY2VBdGxhczJCYXNlZDoge1xuICAgICAgdGhldGE6IFswLjUsIDAuMSwgMSwgMC4wNV0sXG4gICAgICBncmF2aXRhdGlvbmFsQ29uc3RhbnQ6IFstNTAsIC01MDAsIDAsIDFdLFxuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjAxLCAwLCAxLCAwLjAwNV0sXG4gICAgICBzcHJpbmdMZW5ndGg6IFs5NSwgMCwgNTAwLCA1XSxcbiAgICAgIHNwcmluZ0NvbnN0YW50OiBbMC4wOCwgMCwgMS4yLCAwLjAwNV0sXG4gICAgICBkYW1waW5nOiBbMC40LCAwLCAxLCAwLjAxXSxcbiAgICAgIGF2b2lkT3ZlcmxhcDogWzAsIDAsIDEsIDAuMDFdLFxuICAgIH0sXG4gICAgcmVwdWxzaW9uOiB7XG4gICAgICBjZW50cmFsR3Jhdml0eTogWzAuMiwgMCwgMTAsIDAuMDVdLFxuICAgICAgc3ByaW5nTGVuZ3RoOiBbMjAwLCAwLCA1MDAsIDVdLFxuICAgICAgc3ByaW5nQ29uc3RhbnQ6IFswLjA1LCAwLCAxLjIsIDAuMDA1XSxcbiAgICAgIG5vZGVEaXN0YW5jZTogWzEwMCwgMCwgNTAwLCA1XSxcbiAgICAgIGRhbXBpbmc6IFswLjA5LCAwLCAxLCAwLjAxXSxcbiAgICB9LFxuICAgIGhpZXJhcmNoaWNhbFJlcHVsc2lvbjoge1xuICAgICAgY2VudHJhbEdyYXZpdHk6IFswLjIsIDAsIDEwLCAwLjA1XSxcbiAgICAgIHNwcmluZ0xlbmd0aDogWzEwMCwgMCwgNTAwLCA1XSxcbiAgICAgIHNwcmluZ0NvbnN0YW50OiBbMC4wMSwgMCwgMS4yLCAwLjAwNV0sXG4gICAgICBub2RlRGlzdGFuY2U6IFsxMjAsIDAsIDUwMCwgNV0sXG4gICAgICBkYW1waW5nOiBbMC4wOSwgMCwgMSwgMC4wMV0sXG4gICAgICBhdm9pZE92ZXJsYXA6IFswLCAwLCAxLCAwLjAxXSxcbiAgICB9LFxuICAgIG1heFZlbG9jaXR5OiBbNTAsIDAsIDE1MCwgMV0sXG4gICAgbWluVmVsb2NpdHk6IFswLjEsIDAuMDEsIDAuNSwgMC4wMV0sXG4gICAgc29sdmVyOiBbXG4gICAgICBcImJhcm5lc0h1dFwiLFxuICAgICAgXCJmb3JjZUF0bGFzMkJhc2VkXCIsXG4gICAgICBcInJlcHVsc2lvblwiLFxuICAgICAgXCJoaWVyYXJjaGljYWxSZXB1bHNpb25cIixcbiAgICBdLFxuICAgIHRpbWVzdGVwOiBbMC41LCAwLjAxLCAxLCAwLjAxXSxcbiAgICB3aW5kOiB7XG4gICAgICB4OiBbMCwgLTEwLCAxMCwgMC4xXSxcbiAgICAgIHk6IFswLCAtMTAsIDEwLCAwLjFdLFxuICAgIH0sXG4gICAgLy9hZGFwdGl2ZVRpbWVzdGVwOiB0cnVlXG4gIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgY29uZmlndXJhdG9ySGlkZU9wdGlvbjogQ29uZmlndXJhdG9ySGlkZU9wdGlvbiA9IChcbiAgcGFyZW50UGF0aCxcbiAgb3B0aW9uTmFtZSxcbiAgb3B0aW9uc1xuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChcbiAgICBwYXJlbnRQYXRoLmluY2x1ZGVzKFwicGh5c2ljc1wiKSAmJlxuICAgIChjb25maWd1cmVPcHRpb25zIGFzIGFueSkucGh5c2ljcy5zb2x2ZXIuaW5jbHVkZXMob3B0aW9uTmFtZSkgJiZcbiAgICBvcHRpb25zLnBoeXNpY3Muc29sdmVyICE9PSBvcHRpb25OYW1lICYmXG4gICAgb3B0aW9uTmFtZSAhPT0gXCJ3aW5kXCJcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgeyBhbGxPcHRpb25zLCBjb25maWd1cmVPcHRpb25zIH07XG4iLCAiLyoqXG4gKiAgVGhlIEZsb3lk4oCTV2Fyc2hhbGwgYWxnb3JpdGhtIGlzIGFuIGFsZ29yaXRobSBmb3IgZmluZGluZyBzaG9ydGVzdCBwYXRocyBpblxuICogIGEgd2VpZ2h0ZWQgZ3JhcGggd2l0aCBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBlZGdlIHdlaWdodHMgKGJ1dCB3aXRoIG5vIG5lZ2F0aXZlXG4gKiAgY3ljbGVzKS4gLSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GbG95ZOKAk1dhcnNoYWxsX2FsZ29yaXRobVxuICovXG5jbGFzcyBGbG95ZFdhcnNoYWxsIHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtBcnJheS48Tm9kZT59IG5vZGVzQXJyYXlcbiAgICogQHBhcmFtIHtBcnJheS48RWRnZT59IGVkZ2VzQXJyYXlcbiAgICogQHJldHVybnMge3t9fVxuICAgKi9cbiAgZ2V0RGlzdGFuY2VzKGJvZHksIG5vZGVzQXJyYXksIGVkZ2VzQXJyYXkpIHtcbiAgICBjb25zdCBEX21hdHJpeCA9IHt9O1xuICAgIGNvbnN0IGVkZ2VzID0gYm9keS5lZGdlcztcblxuICAgIC8vIHByZXBhcmUgbWF0cml4IHdpdGggbGFyZ2UgbnVtYmVyc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzQXJyYXlbaV07XG4gICAgICBjb25zdCBjZWxsID0ge307XG4gICAgICBEX21hdHJpeFtub2RlXSA9IGNlbGw7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5vZGVzQXJyYXkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY2VsbFtub2Rlc0FycmF5W2pdXSA9IGkgPT0gaiA/IDAgOiAxZTk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcHV0IHRoZSB3ZWlnaHRzIGZvciB0aGUgZWRnZXMgaW4uIFRoaXMgYXNzdW1lcyB1bmlkaXJlY3Rpb25hbGl0eS5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVkZ2VzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tlZGdlc0FycmF5W2ldXTtcbiAgICAgIC8vIGVkZ2UgaGFzIHRvIGJlIGNvbm5lY3RlZCBpZiBpdCBjb3VudHMgdG8gdGhlIGRpc3RhbmNlcy4gSWYgaXQgaXMgY29ubmVjdGVkIHRvIGlubmVyIGNsdXN0ZXJzIGl0IHdpbGwgY3Jhc2ggc28gd2UgYWxzbyBjaGVjayBpZiBpdCBpcyBpbiB0aGUgRF9tYXRyaXhcbiAgICAgIGlmIChcbiAgICAgICAgZWRnZS5jb25uZWN0ZWQgPT09IHRydWUgJiZcbiAgICAgICAgRF9tYXRyaXhbZWRnZS5mcm9tSWRdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgRF9tYXRyaXhbZWRnZS50b0lkXSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgRF9tYXRyaXhbZWRnZS5mcm9tSWRdW2VkZ2UudG9JZF0gPSAxO1xuICAgICAgICBEX21hdHJpeFtlZGdlLnRvSWRdW2VkZ2UuZnJvbUlkXSA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZUNvdW50ID0gbm9kZXNBcnJheS5sZW5ndGg7XG5cbiAgICAvLyBBZGFwdGVkIEZsb3lkV2Fyc2hhbGwgYmFzZWQgb24gdW5pZGlyZWN0aW9uYWxpdHkgdG8gZ3JlYXRseSByZWR1Y2UgY29tcGxleGl0eS5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IG5vZGVDb3VudDsgaysrKSB7XG4gICAgICBjb25zdCBrbm9kZSA9IG5vZGVzQXJyYXlba107XG4gICAgICBjb25zdCBrY29sbSA9IERfbWF0cml4W2tub2RlXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZUNvdW50IC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlub2RlID0gbm9kZXNBcnJheVtpXTtcbiAgICAgICAgY29uc3QgaWNvbG0gPSBEX21hdHJpeFtpbm9kZV07XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5vZGVDb3VudDsgaisrKSB7XG4gICAgICAgICAgY29uc3Qgam5vZGUgPSBub2Rlc0FycmF5W2pdO1xuICAgICAgICAgIGNvbnN0IGpjb2xtID0gRF9tYXRyaXhbam5vZGVdO1xuXG4gICAgICAgICAgY29uc3QgdmFsID0gTWF0aC5taW4oaWNvbG1bam5vZGVdLCBpY29sbVtrbm9kZV0gKyBrY29sbVtqbm9kZV0pO1xuICAgICAgICAgIGljb2xtW2pub2RlXSA9IHZhbDtcbiAgICAgICAgICBqY29sbVtpbm9kZV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gRF9tYXRyaXg7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxveWRXYXJzaGFsbDtcbiIsICIvLyBkaXN0YW5jZSBmaW5kaW5nIGFsZ29yaXRobVxuaW1wb3J0IEZsb3lkV2Fyc2hhbGwgZnJvbSBcIi4vY29tcG9uZW50cy9hbGdvcml0aG1zL0Zsb3lkV2Fyc2hhbGwuanNcIjtcblxuLyoqXG4gKiBLYW1hZGFLYXdhaSBwb3NpdGlvbnMgdGhlIG5vZGVzIGluaXRpYWxseSBiYXNlZCBvblxuICpcbiAqIFwiQU4gQUxHT1JJVEhNIEZPUiBEUkFXSU5HIEdFTkVSQUwgVU5ESVJFQ1RFRCBHUkFQSFNcIlxuICogLS0gVG9taWhpc2EgS0FNQURBIGFuZCBTYXRvcnUgS0FXQUkgaW4gMTk4OVxuICpcbiAqIFBvc3NpYmxlIG9wdGltaXphdGlvbnMgaW4gdGhlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGNhbiBiZSBpbXBsZW1lbnRlZC5cbiAqL1xuY2xhc3MgS2FtYWRhS2F3YWkge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VMZW5ndGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVkZ2VTdHJlbmd0aFxuICAgKi9cbiAgY29uc3RydWN0b3IoYm9keSwgZWRnZUxlbmd0aCwgZWRnZVN0cmVuZ3RoKSB7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLnNwcmluZ0xlbmd0aCA9IGVkZ2VMZW5ndGg7XG4gICAgdGhpcy5zcHJpbmdDb25zdGFudCA9IGVkZ2VTdHJlbmd0aDtcbiAgICB0aGlzLmRpc3RhbmNlU29sdmVyID0gbmV3IEZsb3lkV2Fyc2hhbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3Qgc3VyZSBpZiBuZWVkZWQgYnV0IGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgc3ByaW5nIGxlbmd0aCBhbmQgc3ByaW5nIGNvbnN0YW50XG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuc3ByaW5nTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc3ByaW5nTGVuZ3RoID0gb3B0aW9ucy5zcHJpbmdMZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5zcHJpbmdDb25zdGFudCkge1xuICAgICAgICB0aGlzLnNwcmluZ0NvbnN0YW50ID0gb3B0aW9ucy5zcHJpbmdDb25zdGFudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9zaXRpb24gdGhlIHN5c3RlbVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOb2RlPn0gbm9kZXNBcnJheVxuICAgKiBAcGFyYW0ge0FycmF5Ljx2aXMuRWRnZT59IGVkZ2VzQXJyYXlcbiAgICogQHBhcmFtIHtib29sZWFufSBbaWdub3JlQ2x1c3RlcnM9ZmFsc2VdXG4gICAqL1xuICBzb2x2ZShub2Rlc0FycmF5LCBlZGdlc0FycmF5LCBpZ25vcmVDbHVzdGVycyA9IGZhbHNlKSB7XG4gICAgLy8gZ2V0IGRpc3RhbmNlIG1hdHJpeFxuICAgIGNvbnN0IERfbWF0cml4ID0gdGhpcy5kaXN0YW5jZVNvbHZlci5nZXREaXN0YW5jZXMoXG4gICAgICB0aGlzLmJvZHksXG4gICAgICBub2Rlc0FycmF5LFxuICAgICAgZWRnZXNBcnJheVxuICAgICk7IC8vIGRpc3RhbmNlIG1hdHJpeFxuXG4gICAgLy8gZ2V0IHRoZSBMIE1hdHJpeFxuICAgIHRoaXMuX2NyZWF0ZUxfbWF0cml4KERfbWF0cml4KTtcblxuICAgIC8vIGdldCB0aGUgSyBNYXRyaXhcbiAgICB0aGlzLl9jcmVhdGVLX21hdHJpeChEX21hdHJpeCk7XG5cbiAgICAvLyBpbml0aWFsIEUgTWF0cml4XG4gICAgdGhpcy5fY3JlYXRlRV9tYXRyaXgoKTtcblxuICAgIC8vIGNhbGN1bGF0ZSBwb3NpdGlvbnNcbiAgICBjb25zdCB0aHJlc2hvbGQgPSAwLjAxO1xuICAgIGNvbnN0IGlubmVyVGhyZXNob2xkID0gMTtcbiAgICBsZXQgaXRlcmF0aW9ucyA9IDA7XG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IE1hdGgubWF4KFxuICAgICAgMTAwMCxcbiAgICAgIE1hdGgubWluKDEwICogdGhpcy5ib2R5Lm5vZGVJbmRpY2VzLmxlbmd0aCwgNjAwMClcbiAgICApO1xuICAgIGNvbnN0IG1heElubmVySXRlcmF0aW9ucyA9IDU7XG5cbiAgICBsZXQgbWF4RW5lcmd5ID0gMWU5O1xuICAgIGxldCBoaWdoRV9ub2RlSWQgPSAwLFxuICAgICAgZEVfZHggPSAwLFxuICAgICAgZEVfZHkgPSAwLFxuICAgICAgZGVsdGFfbSA9IDAsXG4gICAgICBzdWJJdGVyYXRpb25zID0gMDtcblxuICAgIHdoaWxlIChtYXhFbmVyZ3kgPiB0aHJlc2hvbGQgJiYgaXRlcmF0aW9ucyA8IG1heEl0ZXJhdGlvbnMpIHtcbiAgICAgIGl0ZXJhdGlvbnMgKz0gMTtcbiAgICAgIFtoaWdoRV9ub2RlSWQsIG1heEVuZXJneSwgZEVfZHgsIGRFX2R5XSA9XG4gICAgICAgIHRoaXMuX2dldEhpZ2hlc3RFbmVyZ3lOb2RlKGlnbm9yZUNsdXN0ZXJzKTtcbiAgICAgIGRlbHRhX20gPSBtYXhFbmVyZ3k7XG4gICAgICBzdWJJdGVyYXRpb25zID0gMDtcbiAgICAgIHdoaWxlIChkZWx0YV9tID4gaW5uZXJUaHJlc2hvbGQgJiYgc3ViSXRlcmF0aW9ucyA8IG1heElubmVySXRlcmF0aW9ucykge1xuICAgICAgICBzdWJJdGVyYXRpb25zICs9IDE7XG4gICAgICAgIHRoaXMuX21vdmVOb2RlKGhpZ2hFX25vZGVJZCwgZEVfZHgsIGRFX2R5KTtcbiAgICAgICAgW2RlbHRhX20sIGRFX2R4LCBkRV9keV0gPSB0aGlzLl9nZXRFbmVyZ3koaGlnaEVfbm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBub2RlIHdpdGggdGhlIGhpZ2hlc3QgZW5lcmd5XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlQ2x1c3RlcnNcbiAgICogQHJldHVybnMge251bWJlcltdfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldEhpZ2hlc3RFbmVyZ3lOb2RlKGlnbm9yZUNsdXN0ZXJzKSB7XG4gICAgY29uc3Qgbm9kZXNBcnJheSA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuYm9keS5ub2RlcztcbiAgICBsZXQgbWF4RW5lcmd5ID0gMDtcbiAgICBsZXQgbWF4RW5lcmd5Tm9kZUlkID0gbm9kZXNBcnJheVswXTtcbiAgICBsZXQgZEVfZHhfbWF4ID0gMCxcbiAgICAgIGRFX2R5X21heCA9IDA7XG5cbiAgICBmb3IgKGxldCBub2RlSWR4ID0gMDsgbm9kZUlkeCA8IG5vZGVzQXJyYXkubGVuZ3RoOyBub2RlSWR4KyspIHtcbiAgICAgIGNvbnN0IG0gPSBub2Rlc0FycmF5W25vZGVJZHhdO1xuICAgICAgLy8gYnkgbm90IGV2YWx1YXRpbmcgbm9kZXMgd2l0aCBwcmVkZWZpbmVkIHBvc2l0aW9ucyB3ZSBzaG91bGQgb25seSBtb3ZlIG5vZGVzIHRoYXQgaGF2ZSBubyBwb3NpdGlvbnMuXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGVzW21dLnByZWRlZmluZWRQb3NpdGlvbiAhPT0gdHJ1ZSB8fFxuICAgICAgICAobm9kZXNbbV0uaXNDbHVzdGVyID09PSB0cnVlICYmIGlnbm9yZUNsdXN0ZXJzID09PSB0cnVlKSB8fFxuICAgICAgICBub2Rlc1ttXS5vcHRpb25zLmZpeGVkLnggIT09IHRydWUgfHxcbiAgICAgICAgbm9kZXNbbV0ub3B0aW9ucy5maXhlZC55ICE9PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgW2RlbHRhX20sIGRFX2R4LCBkRV9keV0gPSB0aGlzLl9nZXRFbmVyZ3kobSk7XG4gICAgICAgIGlmIChtYXhFbmVyZ3kgPCBkZWx0YV9tKSB7XG4gICAgICAgICAgbWF4RW5lcmd5ID0gZGVsdGFfbTtcbiAgICAgICAgICBtYXhFbmVyZ3lOb2RlSWQgPSBtO1xuICAgICAgICAgIGRFX2R4X21heCA9IGRFX2R4O1xuICAgICAgICAgIGRFX2R5X21heCA9IGRFX2R5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFttYXhFbmVyZ3lOb2RlSWQsIG1heEVuZXJneSwgZEVfZHhfbWF4LCBkRV9keV9tYXhdO1xuICB9XG5cbiAgLyoqXG4gICAqIGNhbGN1bGF0ZSB0aGUgZW5lcmd5IG9mIGEgc2luZ2xlIG5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlLmlkfSBtXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRFbmVyZ3kobSkge1xuICAgIGNvbnN0IFtkRV9keCwgZEVfZHldID0gdGhpcy5FX3N1bXNbbV07XG4gICAgY29uc3QgZGVsdGFfbSA9IE1hdGguc3FydChkRV9keCAqKiAyICsgZEVfZHkgKiogMik7XG4gICAgcmV0dXJuIFtkZWx0YV9tLCBkRV9keCwgZEVfZHldO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIG5vZGUgYmFzZWQgb24gaXQncyBlbmVyZ3lcbiAgICogdGhlIGR4IGFuZCBkeSBhcmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBsaW5lYXIgc3lzdGVtIHByb3Bvc2VkIGJ5IEthbWFkYSBhbmQgS2F3YWlcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRFX2R4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkRV9keVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21vdmVOb2RlKG0sIGRFX2R4LCBkRV9keSkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgbGV0IGQyRV9keDIgPSAwO1xuICAgIGxldCBkMkVfZHhkeSA9IDA7XG4gICAgbGV0IGQyRV9keTIgPSAwO1xuXG4gICAgY29uc3QgeF9tID0gbm9kZXNbbV0ueDtcbiAgICBjb25zdCB5X20gPSBub2Rlc1ttXS55O1xuICAgIGNvbnN0IGttID0gdGhpcy5LX21hdHJpeFttXTtcbiAgICBjb25zdCBsbSA9IHRoaXMuTF9tYXRyaXhbbV07XG5cbiAgICBmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IG5vZGVzQXJyYXkubGVuZ3RoOyBpSWR4KyspIHtcbiAgICAgIGNvbnN0IGkgPSBub2Rlc0FycmF5W2lJZHhdO1xuICAgICAgaWYgKGkgIT09IG0pIHtcbiAgICAgICAgY29uc3QgeF9pID0gbm9kZXNbaV0ueDtcbiAgICAgICAgY29uc3QgeV9pID0gbm9kZXNbaV0ueTtcbiAgICAgICAgY29uc3Qga21hdCA9IGttW2ldO1xuICAgICAgICBjb25zdCBsbWF0ID0gbG1baV07XG4gICAgICAgIGNvbnN0IGRlbm9taW5hdG9yID0gMS4wIC8gKCh4X20gLSB4X2kpICoqIDIgKyAoeV9tIC0geV9pKSAqKiAyKSAqKiAxLjU7XG4gICAgICAgIGQyRV9keDIgKz0ga21hdCAqICgxIC0gbG1hdCAqICh5X20gLSB5X2kpICoqIDIgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGQyRV9keGR5ICs9IGttYXQgKiAobG1hdCAqICh4X20gLSB4X2kpICogKHlfbSAtIHlfaSkgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGQyRV9keTIgKz0ga21hdCAqICgxIC0gbG1hdCAqICh4X20gLSB4X2kpICoqIDIgKiBkZW5vbWluYXRvcik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1ha2UgdGhlIHZhcmlhYmxlIG5hbWVzIGVhc2llciB0byBtYWtlIHRoZSBzb2x2aW5nIG9mIHRoZSBsaW5lYXIgc3lzdGVtIGVhc2llciB0byByZWFkXG4gICAgY29uc3QgQSA9IGQyRV9keDIsXG4gICAgICBCID0gZDJFX2R4ZHksXG4gICAgICBDID0gZEVfZHgsXG4gICAgICBEID0gZDJFX2R5MixcbiAgICAgIEUgPSBkRV9keTtcblxuICAgIC8vIHNvbHZlIHRoZSBsaW5lYXIgc3lzdGVtIGZvciBkeCBhbmQgZHlcbiAgICBjb25zdCBkeSA9IChDIC8gQSArIEUgLyBCKSAvIChCIC8gQSAtIEQgLyBCKTtcbiAgICBjb25zdCBkeCA9IC0oQiAqIGR5ICsgQykgLyBBO1xuXG4gICAgLy8gbW92ZSB0aGUgbm9kZVxuICAgIG5vZGVzW21dLnggKz0gZHg7XG4gICAgbm9kZXNbbV0ueSArPSBkeTtcblxuICAgIC8vIFJlY2FsY3VsYXRlIEVfbWF0cml4IChzaG91bGQgYmUgaW5jcmVtZW50YWwpXG4gICAgdGhpcy5fdXBkYXRlRV9tYXRyaXgobSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBMIG1hdHJpeDogZWRnZSBsZW5ndGggdGltZXMgc2hvcnRlc3QgcGF0aFxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gRF9tYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVMX21hdHJpeChEX21hdHJpeCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3QgZWRnZUxlbmd0aCA9IHRoaXMuc3ByaW5nTGVuZ3RoO1xuXG4gICAgdGhpcy5MX21hdHJpeCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5MX21hdHJpeFtub2Rlc0FycmF5W2ldXSA9IHt9O1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2Rlc0FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHRoaXMuTF9tYXRyaXhbbm9kZXNBcnJheVtpXV1bbm9kZXNBcnJheVtqXV0gPVxuICAgICAgICAgIGVkZ2VMZW5ndGggKiBEX21hdHJpeFtub2Rlc0FycmF5W2ldXVtub2Rlc0FycmF5W2pdXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBLIG1hdHJpeDogc3ByaW5nIGNvbnN0YW50cyB0aW1lcyBzaG9ydGVzdCBwYXRoXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBEX21hdHJpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUtfbWF0cml4KERfbWF0cml4KSB7XG4gICAgY29uc3Qgbm9kZXNBcnJheSA9IHRoaXMuYm9keS5ub2RlSW5kaWNlcztcbiAgICBjb25zdCBlZGdlU3RyZW5ndGggPSB0aGlzLnNwcmluZ0NvbnN0YW50O1xuXG4gICAgdGhpcy5LX21hdHJpeCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5LX21hdHJpeFtub2Rlc0FycmF5W2ldXSA9IHt9O1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBub2Rlc0FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHRoaXMuS19tYXRyaXhbbm9kZXNBcnJheVtpXV1bbm9kZXNBcnJheVtqXV0gPVxuICAgICAgICAgIGVkZ2VTdHJlbmd0aCAqIERfbWF0cml4W25vZGVzQXJyYXlbaV1dW25vZGVzQXJyYXlbal1dICoqIC0yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAgQ3JlYXRlIG1hdHJpeCB3aXRoIGFsbCBlbmVyZ2llcyBiZXR3ZWVuIG5vZGVzXG4gICAqXG4gICAqICBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUVfbWF0cml4KCkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgdGhpcy5FX21hdHJpeCA9IHt9O1xuICAgIHRoaXMuRV9zdW1zID0ge307XG4gICAgZm9yIChsZXQgbUlkeCA9IDA7IG1JZHggPCBub2Rlc0FycmF5Lmxlbmd0aDsgbUlkeCsrKSB7XG4gICAgICB0aGlzLkVfbWF0cml4W25vZGVzQXJyYXlbbUlkeF1dID0gW107XG4gICAgfVxuICAgIGZvciAobGV0IG1JZHggPSAwOyBtSWR4IDwgbm9kZXNBcnJheS5sZW5ndGg7IG1JZHgrKykge1xuICAgICAgY29uc3QgbSA9IG5vZGVzQXJyYXlbbUlkeF07XG4gICAgICBjb25zdCB4X20gPSBub2Rlc1ttXS54O1xuICAgICAgY29uc3QgeV9tID0gbm9kZXNbbV0ueTtcbiAgICAgIGxldCBkRV9keCA9IDA7XG4gICAgICBsZXQgZEVfZHkgPSAwO1xuICAgICAgZm9yIChsZXQgaUlkeCA9IG1JZHg7IGlJZHggPCBub2Rlc0FycmF5Lmxlbmd0aDsgaUlkeCsrKSB7XG4gICAgICAgIGNvbnN0IGkgPSBub2Rlc0FycmF5W2lJZHhdO1xuICAgICAgICBpZiAoaSAhPT0gbSkge1xuICAgICAgICAgIGNvbnN0IHhfaSA9IG5vZGVzW2ldLng7XG4gICAgICAgICAgY29uc3QgeV9pID0gbm9kZXNbaV0ueTtcbiAgICAgICAgICBjb25zdCBkZW5vbWluYXRvciA9XG4gICAgICAgICAgICAxLjAgLyBNYXRoLnNxcnQoKHhfbSAtIHhfaSkgKiogMiArICh5X20gLSB5X2kpICoqIDIpO1xuICAgICAgICAgIHRoaXMuRV9tYXRyaXhbbV1baUlkeF0gPSBbXG4gICAgICAgICAgICB0aGlzLktfbWF0cml4W21dW2ldICpcbiAgICAgICAgICAgICAgKHhfbSAtIHhfaSAtIHRoaXMuTF9tYXRyaXhbbV1baV0gKiAoeF9tIC0geF9pKSAqIGRlbm9taW5hdG9yKSxcbiAgICAgICAgICAgIHRoaXMuS19tYXRyaXhbbV1baV0gKlxuICAgICAgICAgICAgICAoeV9tIC0geV9pIC0gdGhpcy5MX21hdHJpeFttXVtpXSAqICh5X20gLSB5X2kpICogZGVub21pbmF0b3IpLFxuICAgICAgICAgIF07XG4gICAgICAgICAgdGhpcy5FX21hdHJpeFtpXVttSWR4XSA9IHRoaXMuRV9tYXRyaXhbbV1baUlkeF07XG4gICAgICAgICAgZEVfZHggKz0gdGhpcy5FX21hdHJpeFttXVtpSWR4XVswXTtcbiAgICAgICAgICBkRV9keSArPSB0aGlzLkVfbWF0cml4W21dW2lJZHhdWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvL1N0b3JlIHN1bVxuICAgICAgdGhpcy5FX3N1bXNbbV0gPSBbZEVfZHgsIGRFX2R5XTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG1ldGhvZCwganVzdCBkb2luZyBzaW5nbGUgY29sdW1uIChyb3dzIGFyZSBhdXRvLXVwZGF0ZWQpICh1cGRhdGUgYWxsIHN1bXMpXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlRV9tYXRyaXgobSkge1xuICAgIGNvbnN0IG5vZGVzQXJyYXkgPSB0aGlzLmJvZHkubm9kZUluZGljZXM7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmJvZHkubm9kZXM7XG4gICAgY29uc3QgY29sbSA9IHRoaXMuRV9tYXRyaXhbbV07XG4gICAgY29uc3Qga2NvbG0gPSB0aGlzLktfbWF0cml4W21dO1xuICAgIGNvbnN0IGxjb2xtID0gdGhpcy5MX21hdHJpeFttXTtcbiAgICBjb25zdCB4X20gPSBub2Rlc1ttXS54O1xuICAgIGNvbnN0IHlfbSA9IG5vZGVzW21dLnk7XG4gICAgbGV0IGRFX2R4ID0gMDtcbiAgICBsZXQgZEVfZHkgPSAwO1xuICAgIGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgbm9kZXNBcnJheS5sZW5ndGg7IGlJZHgrKykge1xuICAgICAgY29uc3QgaSA9IG5vZGVzQXJyYXlbaUlkeF07XG4gICAgICBpZiAoaSAhPT0gbSkge1xuICAgICAgICAvL0tlZXAgb2xkIGVuZXJneSB2YWx1ZSBmb3Igc3VtIG1vZGlmaWNhdGlvbiBiZWxvd1xuICAgICAgICBjb25zdCBjZWxsID0gY29sbVtpSWR4XTtcbiAgICAgICAgY29uc3Qgb2xkRHggPSBjZWxsWzBdO1xuICAgICAgICBjb25zdCBvbGREeSA9IGNlbGxbMV07XG5cbiAgICAgICAgLy9DYWxjIG5ldyBlbmVyZ3k6XG4gICAgICAgIGNvbnN0IHhfaSA9IG5vZGVzW2ldLng7XG4gICAgICAgIGNvbnN0IHlfaSA9IG5vZGVzW2ldLnk7XG4gICAgICAgIGNvbnN0IGRlbm9taW5hdG9yID1cbiAgICAgICAgICAxLjAgLyBNYXRoLnNxcnQoKHhfbSAtIHhfaSkgKiogMiArICh5X20gLSB5X2kpICoqIDIpO1xuICAgICAgICBjb25zdCBkeCA9XG4gICAgICAgICAga2NvbG1baV0gKiAoeF9tIC0geF9pIC0gbGNvbG1baV0gKiAoeF9tIC0geF9pKSAqIGRlbm9taW5hdG9yKTtcbiAgICAgICAgY29uc3QgZHkgPVxuICAgICAgICAgIGtjb2xtW2ldICogKHlfbSAtIHlfaSAtIGxjb2xtW2ldICogKHlfbSAtIHlfaSkgKiBkZW5vbWluYXRvcik7XG4gICAgICAgIGNvbG1baUlkeF0gPSBbZHgsIGR5XTtcbiAgICAgICAgZEVfZHggKz0gZHg7XG4gICAgICAgIGRFX2R5ICs9IGR5O1xuXG4gICAgICAgIC8vYWRkIG5ldyBlbmVyZ3kgdG8gc3VtIG9mIGVhY2ggY29sdW1uXG4gICAgICAgIGNvbnN0IHN1bSA9IHRoaXMuRV9zdW1zW2ldO1xuICAgICAgICBzdW1bMF0gKz0gZHggLSBvbGREeDtcbiAgICAgICAgc3VtWzFdICs9IGR5IC0gb2xkRHk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vU3RvcmUgc3VtIGF0IC0xIGluZGV4XG4gICAgdGhpcy5FX3N1bXNbbV0gPSBbZEVfZHgsIGRFX2R5XTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBLYW1hZGFLYXdhaTtcbiIsICIvLyBMb2FkIGN1c3RvbSBzaGFwZXMgaW50byBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRcbmltcG9ydCBcIi4vc2hhcGVzXCI7XG5cbmltcG9ydCBcInZpcy11dGlsL2VzbmV4dC9zdHlsZXMvYWN0aXZhdG9yLmNzc1wiO1xuaW1wb3J0IFwidmlzLXV0aWwvZXNuZXh0L3N0eWxlcy9ib290c3RyYXAuY3NzXCI7XG5pbXBvcnQgXCJ2aXMtdXRpbC9lc25leHQvc3R5bGVzL2NvbG9yLXBpY2tlci5jc3NcIjtcbmltcG9ydCBcInZpcy11dGlsL2VzbmV4dC9zdHlsZXMvY29uZmlndXJhdG9yLmNzc1wiO1xuaW1wb3J0IFwidmlzLXV0aWwvZXNuZXh0L3N0eWxlcy9wb3B1cC5jc3NcIjtcblxuaW1wb3J0IEVtaXR0ZXIgZnJvbSBcImNvbXBvbmVudC1lbWl0dGVyXCI7XG5pbXBvcnQge1xuICBBY3RpdmF0b3IsXG4gIENvbmZpZ3VyYXRvcixcbiAgVkFMSURBVE9SX1BSSU5UX1NUWUxFLFxuICBWYWxpZGF0b3IsXG4gIGRlZXBFeHRlbmQsXG4gIHJlY3Vyc2l2ZURPTURlbGV0ZSxcbiAgc2VsZWN0aXZlRGVlcEV4dGVuZCxcbn0gZnJvbSBcInZpcy11dGlsL2VzbmV4dFwiO1xuaW1wb3J0IHsgRE9UVG9HcmFwaCB9IGZyb20gXCIuL2RvdHBhcnNlclwiO1xuaW1wb3J0IHsgcGFyc2VHZXBoaSB9IGZyb20gXCIuL2dlcGhpUGFyc2VyXCI7XG5pbXBvcnQgKiBhcyBsb2NhbGVzIGZyb20gXCIuL2xvY2FsZXNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUxhbmd1YWdlQ29kZSB9IGZyb20gXCIuL2xvY2FsZS11dGlsc1wiO1xuXG5pbXBvcnQgSW1hZ2VzIGZyb20gXCIuL0ltYWdlc1wiO1xuaW1wb3J0IHsgR3JvdXBzIH0gZnJvbSBcIi4vbW9kdWxlcy9Hcm91cHNcIjtcbmltcG9ydCBOb2Rlc0hhbmRsZXIgZnJvbSBcIi4vbW9kdWxlcy9Ob2Rlc0hhbmRsZXJcIjtcbmltcG9ydCBFZGdlc0hhbmRsZXIgZnJvbSBcIi4vbW9kdWxlcy9FZGdlc0hhbmRsZXJcIjtcbmltcG9ydCBQaHlzaWNzRW5naW5lIGZyb20gXCIuL21vZHVsZXMvUGh5c2ljc0VuZ2luZVwiO1xuaW1wb3J0IENsdXN0ZXJFbmdpbmUgZnJvbSBcIi4vbW9kdWxlcy9DbHVzdGVyaW5nXCI7XG5pbXBvcnQgQ2FudmFzUmVuZGVyZXIgZnJvbSBcIi4vbW9kdWxlcy9DYW52YXNSZW5kZXJlclwiO1xuaW1wb3J0IENhbnZhcyBmcm9tIFwiLi9tb2R1bGVzL0NhbnZhc1wiO1xuaW1wb3J0IFZpZXcgZnJvbSBcIi4vbW9kdWxlcy9WaWV3XCI7XG5pbXBvcnQgSW50ZXJhY3Rpb25IYW5kbGVyIGZyb20gXCIuL21vZHVsZXMvSW50ZXJhY3Rpb25IYW5kbGVyXCI7XG5pbXBvcnQgU2VsZWN0aW9uSGFuZGxlciBmcm9tIFwiLi9tb2R1bGVzL1NlbGVjdGlvbkhhbmRsZXJcIjtcbmltcG9ydCBMYXlvdXRFbmdpbmUgZnJvbSBcIi4vbW9kdWxlcy9MYXlvdXRFbmdpbmVcIjtcbmltcG9ydCBNYW5pcHVsYXRpb25TeXN0ZW0gZnJvbSBcIi4vbW9kdWxlcy9NYW5pcHVsYXRpb25TeXN0ZW1cIjtcbmltcG9ydCB7XG4gIGFsbE9wdGlvbnMsXG4gIGNvbmZpZ3VyZU9wdGlvbnMsXG4gIGNvbmZpZ3VyYXRvckhpZGVPcHRpb24sXG59IGZyb20gXCIuL29wdGlvbnNcIjtcbmltcG9ydCBLYW1hZGFLYXdhaSBmcm9tIFwiLi9tb2R1bGVzL0thbWFkYUthd2FpLmpzXCI7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV0d29yayB2aXN1YWxpemF0aW9uLCBkaXNwbGF5aW5nIG5vZGVzIGFuZCBlZGdlcy5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgIFRoZSBET00gZWxlbWVudCBpbiB3aGljaCB0aGUgTmV0d29yayB3aWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBjcmVhdGVkLiBOb3JtYWxseSBhIGRpdiBlbGVtZW50LlxuICogQHBhcmFtIHtvYmplY3R9IGRhdGEgICAgICAgICBBbiBvYmplY3QgY29udGFpbmluZyBwYXJhbWV0ZXJzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtBcnJheX0gbm9kZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0FycmF5fSBlZGdlc1xuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgICAgICBPcHRpb25zXG4gKiBAY2xhc3MgTmV0d29ya1xuICovXG5leHBvcnQgZnVuY3Rpb24gTmV0d29yayhjb250YWluZXIsIGRhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE5ldHdvcmspKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yXCIpO1xuICB9XG5cbiAgLy8gc2V0IGNvbnN0YW50IHZhbHVlc1xuICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBsb2NhbGU6IFwiZW5cIixcbiAgICBsb2NhbGVzOiBsb2NhbGVzLFxuICAgIGNsaWNrVG9Vc2U6IGZhbHNlLFxuICB9O1xuICBPYmplY3QuYXNzaWduKHRoaXMub3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucyk7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lcnMgZm9yIG5vZGVzIGFuZCBlZGdlcy5cbiAgICpcbiAgICogJ2VkZ2VzJyBhbmQgJ25vZGVzJyBjb250YWluIHRoZSBmdWxsIGRlZmluaXRpb25zIG9mIGFsbCB0aGUgbmV0d29yayBlbGVtZW50cy5cbiAgICogJ25vZGVJbmRpY2VzJyBhbmQgJ2VkZ2VJbmRpY2VzJyBjb250YWluIHRoZSBpZCdzIG9mIHRoZSBhY3RpdmUgZWxlbWVudHMuXG4gICAqXG4gICAqIFRoZSBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgYSBkZWZpbmVkIG5vZGUgbmVlZCBub3QgYmUgYWN0aXZlLCBpLmUuXG4gICAqIHZpc2libGUgb24gdGhlIGNhbnZhcy4gVGhpcyBoYXBwZW5zIGluIHBhcnRpY3VsYXIgd2hlbiBjbHVzdGVycyBhcmUgZGVmaW5lZCwgaW5cbiAgICogdGhhdCBjYXNlIHRoZXJlIHdpbGwgYmUgbm9kZXMgYW5kIGVkZ2VzIG5vdCBkaXNwbGF5ZWQuXG4gICAqIFRoZSBib3R0b20gbGluZSBpcyB0aGF0IGFsbCBjb2RlIHdpdGggYWN0aW9ucyByZWxhdGVkIHRvIHZpc2liaWxpdHksICptdXN0KiB1c2VcbiAgICogJ25vZGVJbmRpY2VzJyBhbmQgJ2VkZ2VJbmRpY2VzJywgbm90ICdub2RlcycgYW5kICdlZGdlcycgZGlyZWN0bHkuXG4gICAqL1xuICB0aGlzLmJvZHkgPSB7XG4gICAgY29udGFpbmVyOiBjb250YWluZXIsXG5cbiAgICAvLyBTZWUgY29tbWVudCBhYm92ZSBmb3IgZm9sbG93aW5nIGZpZWxkc1xuICAgIG5vZGVzOiB7fSxcbiAgICBub2RlSW5kaWNlczogW10sXG4gICAgZWRnZXM6IHt9LFxuICAgIGVkZ2VJbmRpY2VzOiBbXSxcblxuICAgIGVtaXR0ZXI6IHtcbiAgICAgIG9uOiB0aGlzLm9uLmJpbmQodGhpcyksXG4gICAgICBvZmY6IHRoaXMub2ZmLmJpbmQodGhpcyksXG4gICAgICBlbWl0OiB0aGlzLmVtaXQuYmluZCh0aGlzKSxcbiAgICAgIG9uY2U6IHRoaXMub25jZS5iaW5kKHRoaXMpLFxuICAgIH0sXG4gICAgZXZlbnRMaXN0ZW5lcnM6IHtcbiAgICAgIG9uVGFwOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uVG91Y2g6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Eb3VibGVUYXA6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Ib2xkOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uRHJhZzogZnVuY3Rpb24gKCkge30sXG4gICAgICBvbkRyYWdFbmQ6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Nb3VzZVdoZWVsOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uUGluY2g6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25Nb3VzZU1vdmU6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgb25SZWxlYXNlOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgIG9uQ29udGV4dDogZnVuY3Rpb24gKCkge30sXG4gICAgfSxcbiAgICBkYXRhOiB7XG4gICAgICBub2RlczogbnVsbCwgLy8gQSBEYXRhU2V0IG9yIERhdGFWaWV3XG4gICAgICBlZGdlczogbnVsbCwgLy8gQSBEYXRhU2V0IG9yIERhdGFWaWV3XG4gICAgfSxcbiAgICBmdW5jdGlvbnM6IHtcbiAgICAgIGNyZWF0ZU5vZGU6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgY3JlYXRlRWRnZTogZnVuY3Rpb24gKCkge30sXG4gICAgICBnZXRQb2ludGVyOiBmdW5jdGlvbiAoKSB7fSxcbiAgICB9LFxuICAgIG1vZHVsZXM6IHt9LFxuICAgIHZpZXc6IHtcbiAgICAgIHNjYWxlOiAxLFxuICAgICAgdHJhbnNsYXRpb246IHsgeDogMCwgeTogMCB9LFxuICAgIH0sXG4gICAgc2VsZWN0aW9uQm94OiB7XG4gICAgICBzaG93OiBmYWxzZSxcbiAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgIHN0YXJ0OiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgICAgZW5kOiB7IHg6IDAsIHk6IDAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBiaW5kIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAgdGhpcy5iaW5kRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAvLyBzZXR0aW5nIHVwIGFsbCBtb2R1bGVzXG4gIHRoaXMuaW1hZ2VzID0gbmV3IEltYWdlcygoKSA9PiB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIikpOyAvLyBvYmplY3Qgd2l0aCBpbWFnZXNcbiAgdGhpcy5ncm91cHMgPSBuZXcgR3JvdXBzKCk7IC8vIG9iamVjdCB3aXRoIGdyb3Vwc1xuICB0aGlzLmNhbnZhcyA9IG5ldyBDYW52YXModGhpcy5ib2R5KTsgLy8gRE9NIGhhbmRsZXJcbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gbmV3IFNlbGVjdGlvbkhhbmRsZXIodGhpcy5ib2R5LCB0aGlzLmNhbnZhcyk7IC8vIFNlbGVjdGlvbiBoYW5kbGVyXG4gIHRoaXMuaW50ZXJhY3Rpb25IYW5kbGVyID0gbmV3IEludGVyYWN0aW9uSGFuZGxlcihcbiAgICB0aGlzLmJvZHksXG4gICAgdGhpcy5jYW52YXMsXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyXG4gICk7IC8vIEludGVyYWN0aW9uIGhhbmRsZXIgaGFuZGxlcyBhbGwgdGhlIGhhbW1lciBiaW5kaW5ncyAodGhhdCBhcmUgYm91bmQgYnkgY2FudmFzKSwga2V5XG4gIHRoaXMudmlldyA9IG5ldyBWaWV3KHRoaXMuYm9keSwgdGhpcy5jYW52YXMpOyAvLyBjYW1lcmEgaGFuZGxlciwgZG9lcyBhbmltYXRpb25zIGFuZCB6b29tc1xuICB0aGlzLnJlbmRlcmVyID0gbmV3IENhbnZhc1JlbmRlcmVyKHRoaXMuYm9keSwgdGhpcy5jYW52YXMpOyAvLyByZW5kZXJlciwgc3RhcnRzIHJlbmRlcmxvb3AsIGhhcyBldmVudHMgdGhhdCBtb2R1bGVzIGNhbiBob29rIGludG9cbiAgdGhpcy5waHlzaWNzID0gbmV3IFBoeXNpY3NFbmdpbmUodGhpcy5ib2R5KTsgLy8gcGh5c2ljcyBlbmdpbmUsIGRvZXMgYWxsIHRoZSBzaW11bGF0aW9uc1xuICB0aGlzLmxheW91dEVuZ2luZSA9IG5ldyBMYXlvdXRFbmdpbmUodGhpcy5ib2R5KTsgLy8gbGF5b3V0IGVuZ2luZSBmb3IgaW5pdGFsIGxheW91dCBhbmQgaGllcmFyY2hpY2FsIGxheW91dFxuICB0aGlzLmNsdXN0ZXJpbmcgPSBuZXcgQ2x1c3RlckVuZ2luZSh0aGlzLmJvZHkpOyAvLyBjbHVzdGVyaW5nIGFwaVxuICB0aGlzLm1hbmlwdWxhdGlvbiA9IG5ldyBNYW5pcHVsYXRpb25TeXN0ZW0oXG4gICAgdGhpcy5ib2R5LFxuICAgIHRoaXMuY2FudmFzLFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICB0aGlzLmludGVyYWN0aW9uSGFuZGxlclxuICApOyAvLyBkYXRhIG1hbmlwdWxhdGlvbiBzeXN0ZW1cblxuICB0aGlzLm5vZGVzSGFuZGxlciA9IG5ldyBOb2Rlc0hhbmRsZXIoXG4gICAgdGhpcy5ib2R5LFxuICAgIHRoaXMuaW1hZ2VzLFxuICAgIHRoaXMuZ3JvdXBzLFxuICAgIHRoaXMubGF5b3V0RW5naW5lXG4gICk7IC8vIEhhbmRsZSBhZGRpbmcsIGRlbGV0aW5nIGFuZCB1cGRhdGluZyBvZiBub2RlcyBhcyB3ZWxsIGFzIGdsb2JhbCBvcHRpb25zXG4gIHRoaXMuZWRnZXNIYW5kbGVyID0gbmV3IEVkZ2VzSGFuZGxlcih0aGlzLmJvZHksIHRoaXMuaW1hZ2VzLCB0aGlzLmdyb3Vwcyk7IC8vIEhhbmRsZSBhZGRpbmcsIGRlbGV0aW5nIGFuZCB1cGRhdGluZyBvZiBlZGdlcyBhcyB3ZWxsIGFzIGdsb2JhbCBvcHRpb25zXG5cbiAgdGhpcy5ib2R5Lm1vZHVsZXNbXCJrYW1hZGFLYXdhaVwiXSA9IG5ldyBLYW1hZGFLYXdhaSh0aGlzLmJvZHksIDE1MCwgMC4wNSk7IC8vIExheW91dGluZyBhbGdvcml0aG0uXG4gIHRoaXMuYm9keS5tb2R1bGVzW1wiY2x1c3RlcmluZ1wiXSA9IHRoaXMuY2x1c3RlcmluZztcblxuICAvLyBjcmVhdGUgdGhlIERPTSBlbGVtZW50c1xuICB0aGlzLmNhbnZhcy5fY3JlYXRlKCk7XG5cbiAgLy8gYXBwbHkgb3B0aW9uc1xuICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgLy8gbG9hZCBkYXRhICh0aGUgZGlzYWJsZSBzdGFydCB2YXJpYWJsZSB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBlbmFibGVkIGNsdXN0ZXJpbmcpXG4gIHRoaXMuc2V0RGF0YShkYXRhKTtcbn1cblxuLy8gRXh0ZW5kIE5ldHdvcmsgd2l0aCBhbiBFbWl0dGVyIG1peGluXG5FbWl0dGVyKE5ldHdvcmsucHJvdG90eXBlKTtcblxuLyoqXG4gKiBTZXQgb3B0aW9uc1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLnNldE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gbnVsbCkge1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7IC8vIFRoaXMgZW5zdXJlcyB0aGF0IG9wdGlvbnMgaGFuZGxpbmcgZG9lc24ndCBjcmFzaCBpbiB0aGUgaGFuZGxpbmdcbiAgfVxuXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBlcnJvckZvdW5kID0gVmFsaWRhdG9yLnZhbGlkYXRlKG9wdGlvbnMsIGFsbE9wdGlvbnMpO1xuICAgIGlmIChlcnJvckZvdW5kID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjRXJyb3JzIGhhdmUgYmVlbiBmb3VuZCBpbiB0aGUgc3VwcGxpZWQgb3B0aW9ucyBvYmplY3QuXCIsXG4gICAgICAgIFZBTElEQVRPUl9QUklOVF9TVFlMRVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjb3B5IHRoZSBnbG9iYWwgZmllbGRzIG92ZXJcbiAgICBjb25zdCBmaWVsZHMgPSBbXCJsb2NhbGVcIiwgXCJsb2NhbGVzXCIsIFwiY2xpY2tUb1VzZVwiXTtcbiAgICBzZWxlY3RpdmVEZWVwRXh0ZW5kKGZpZWxkcywgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcblxuICAgIC8vIG5vcm1hbGl6ZSB0aGUgbG9jYWxlIG9yIHVzZSBFbmdsaXNoXG4gICAgaWYgKG9wdGlvbnMubG9jYWxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMubG9jYWxlID0gbm9ybWFsaXplTGFuZ3VhZ2VDb2RlKFxuICAgICAgICBvcHRpb25zLmxvY2FsZXMgfHwgdGhpcy5vcHRpb25zLmxvY2FsZXMsXG4gICAgICAgIG9wdGlvbnMubG9jYWxlXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHRoZSBoaWVyYXJjaGljYWwgc3lzdGVtIGNhbiBhZGFwdCB0aGUgZWRnZXMgYW5kIHRoZSBwaHlzaWNzIHRvIGl0J3Mgb3duIG9wdGlvbnMgYmVjYXVzZSBub3QgYWxsIGNvbWJpbmF0aW9ucyB3b3JrIHdpdGggdGhlIGhpZXJhcmljaGljYWwgc3lzdGVtLlxuICAgIG9wdGlvbnMgPSB0aGlzLmxheW91dEVuZ2luZS5zZXRPcHRpb25zKG9wdGlvbnMubGF5b3V0LCBvcHRpb25zKTtcblxuICAgIHRoaXMuY2FudmFzLnNldE9wdGlvbnMob3B0aW9ucyk7IC8vIG9wdGlvbnMgZm9yIGNhbnZhcyBhcmUgaW4gZ2xvYmFsc1xuXG4gICAgLy8gcGFzcyB0aGUgb3B0aW9ucyB0byB0aGUgbW9kdWxlc1xuICAgIHRoaXMuZ3JvdXBzLnNldE9wdGlvbnMob3B0aW9ucy5ncm91cHMpO1xuICAgIHRoaXMubm9kZXNIYW5kbGVyLnNldE9wdGlvbnMob3B0aW9ucy5ub2Rlcyk7XG4gICAgdGhpcy5lZGdlc0hhbmRsZXIuc2V0T3B0aW9ucyhvcHRpb25zLmVkZ2VzKTtcbiAgICB0aGlzLnBoeXNpY3Muc2V0T3B0aW9ucyhvcHRpb25zLnBoeXNpY3MpO1xuICAgIHRoaXMubWFuaXB1bGF0aW9uLnNldE9wdGlvbnMob3B0aW9ucy5tYW5pcHVsYXRpb24sIG9wdGlvbnMsIHRoaXMub3B0aW9ucyk7IC8vIG1hbmlwdWxhdGlvbiB1c2VzIHRoZSBsb2NhbGVzIGluIHRoZSBnbG9iYWxzXG5cbiAgICB0aGlzLmludGVyYWN0aW9uSGFuZGxlci5zZXRPcHRpb25zKG9wdGlvbnMuaW50ZXJhY3Rpb24pO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0T3B0aW9ucyhvcHRpb25zLmludGVyYWN0aW9uKTsgLy8gb3B0aW9ucyBmb3IgcmVuZGVyaW5nIGFyZSBpbiBpbnRlcmFjdGlvblxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZXRPcHRpb25zKG9wdGlvbnMuaW50ZXJhY3Rpb24pOyAvLyBvcHRpb25zIGZvciBzZWxlY3Rpb24gYXJlIGluIGludGVyYWN0aW9uXG5cbiAgICAvLyByZWxvYWQgdGhlIHNldHRpbmdzIG9mIHRoZSBub2RlcyB0byBhcHBseSBjaGFuZ2VzIGluIGdyb3VwcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBieSBwb2ludGVyLlxuICAgIGlmIChvcHRpb25zLmdyb3VwcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVmcmVzaE5vZGVzXCIpO1xuICAgIH1cbiAgICAvLyB0aGVzZSB0d28gZG8gbm90IGhhdmUgb3B0aW9ucyBhdCB0aGUgbW9tZW50LCBoZXJlIGZvciBjb21wbGV0ZW5lc3NcbiAgICAvL3RoaXMudmlldy5zZXRPcHRpb25zKG9wdGlvbnMudmlldyk7XG4gICAgLy90aGlzLmNsdXN0ZXJpbmcuc2V0T3B0aW9ucyhvcHRpb25zLmNsdXN0ZXJpbmcpO1xuXG4gICAgaWYgKFwiY29uZmlndXJlXCIgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRvcikge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRvciA9IG5ldyBDb25maWd1cmF0b3IoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmJvZHkuY29udGFpbmVyLFxuICAgICAgICAgIGNvbmZpZ3VyZU9wdGlvbnMsXG4gICAgICAgICAgdGhpcy5jYW52YXMucGl4ZWxSYXRpbyxcbiAgICAgICAgICBjb25maWd1cmF0b3JIaWRlT3B0aW9uXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29uZmlndXJhdG9yLnNldE9wdGlvbnMob3B0aW9ucy5jb25maWd1cmUpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBpcyBlbmFibGVkLCBjb3B5IGFsbCBvcHRpb25zIGFuZCBwdXQgdGhlbSBpbnRvIHRoZSBjb25maWcgc3lzdGVtXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdG9yICYmIHRoaXMuY29uZmlndXJhdG9yLm9wdGlvbnMuZW5hYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgbmV0d29ya09wdGlvbnMgPSB7XG4gICAgICAgIG5vZGVzOiB7fSxcbiAgICAgICAgZWRnZXM6IHt9LFxuICAgICAgICBsYXlvdXQ6IHt9LFxuICAgICAgICBpbnRlcmFjdGlvbjoge30sXG4gICAgICAgIG1hbmlwdWxhdGlvbjoge30sXG4gICAgICAgIHBoeXNpY3M6IHt9LFxuICAgICAgICBnbG9iYWw6IHt9LFxuICAgICAgfTtcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMubm9kZXMsIHRoaXMubm9kZXNIYW5kbGVyLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5lZGdlcywgdGhpcy5lZGdlc0hhbmRsZXIub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLmxheW91dCwgdGhpcy5sYXlvdXRFbmdpbmUub3B0aW9ucyk7XG4gICAgICAvLyBsb2FkIHRoZSBzZWxlY3Rpb25IYW5kbGVyIGFuZCByZW5kZXIgZGVmYXVsdCBvcHRpb25zIGluIHRvIHRoZSBpbnRlcmFjdGlvbiBncm91cFxuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5pbnRlcmFjdGlvbiwgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLm9wdGlvbnMpO1xuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5pbnRlcmFjdGlvbiwgdGhpcy5yZW5kZXJlci5vcHRpb25zKTtcblxuICAgICAgZGVlcEV4dGVuZChuZXR3b3JrT3B0aW9ucy5pbnRlcmFjdGlvbiwgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLm1hbmlwdWxhdGlvbiwgdGhpcy5tYW5pcHVsYXRpb24ub3B0aW9ucyk7XG4gICAgICBkZWVwRXh0ZW5kKG5ldHdvcmtPcHRpb25zLnBoeXNpY3MsIHRoaXMucGh5c2ljcy5vcHRpb25zKTtcblxuICAgICAgLy8gbG9hZCBnbG9iYWxzIGludG8gdGhlIGdsb2JhbCBvYmplY3RcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuZ2xvYmFsLCB0aGlzLmNhbnZhcy5vcHRpb25zKTtcbiAgICAgIGRlZXBFeHRlbmQobmV0d29ya09wdGlvbnMuZ2xvYmFsLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRvci5zZXRNb2R1bGVPcHRpb25zKG5ldHdvcmtPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgbmV0d29yayBnbG9iYWwgb3B0aW9uc1xuICAgIGlmIChvcHRpb25zLmNsaWNrVG9Vc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMuY2xpY2tUb1VzZSA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdG9yID0gbmV3IEFjdGl2YXRvcih0aGlzLmNhbnZhcy5mcmFtZSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmF0b3Iub24oXCJjaGFuZ2VcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImFjdGl2YXRlXCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmF0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5hY3RpdmF0b3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImFjdGl2YXRlXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiYWN0aXZhdGVcIik7XG4gICAgfVxuXG4gICAgdGhpcy5jYW52YXMuc2V0U2l6ZSgpO1xuICAgIC8vIHN0YXJ0IHRoZSBwaHlzaWNzIHNpbXVsYXRpb24uIENhbiBiZSBzYWZlbHkgY2FsbGVkIG11bHRpcGxlIHRpbWVzLlxuICAgIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJzdGFydFNpbXVsYXRpb25cIik7XG4gIH1cbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSB2aXNpYmxlIG5vZGVzIGFuZCBlZGdlcyBsaXN0IHdpdGggdGhlIG1vc3QgcmVjZW50IG5vZGUgc3RhdGUuXG4gKlxuICogVmlzaWJsZSBub2RlcyBhcmUgc3RvcmVkIGluIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5cbiAqIFZpc2libGUgZWRnZXMgYXJlIHN0b3JlZCBpbiB0aGlzLmJvZHkuZWRnZUluZGljZXMuXG4gKiBBIG5vZGUgb3IgZWRnZXMgaXMgdmlzaWJsZSBpZiBpdCBpcyBub3QgaGlkZGVuIG9yIGNsdXN0ZXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5fdXBkYXRlVmlzaWJsZUluZGljZXMgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IG5vZGVzID0gdGhpcy5ib2R5Lm5vZGVzO1xuICBjb25zdCBlZGdlcyA9IHRoaXMuYm9keS5lZGdlcztcbiAgdGhpcy5ib2R5Lm5vZGVJbmRpY2VzID0gW107XG4gIHRoaXMuYm9keS5lZGdlSW5kaWNlcyA9IFtdO1xuXG4gIGZvciAoY29uc3Qgbm9kZUlkIGluIG5vZGVzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2Rlcywgbm9kZUlkKSkge1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5jbHVzdGVyaW5nLl9pc0NsdXN0ZXJlZE5vZGUobm9kZUlkKSAmJlxuICAgICAgICBub2Rlc1tub2RlSWRdLm9wdGlvbnMuaGlkZGVuID09PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuYm9keS5ub2RlSW5kaWNlcy5wdXNoKG5vZGVzW25vZGVJZF0uaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZWRnZUlkIGluIGVkZ2VzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlZGdlcywgZWRnZUlkKSkge1xuICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2VkZ2VJZF07XG5cbiAgICAgIC8vIEl0IGNhbiBoYXBwZW4gdGhhdCB0aGlzIGlzIGV4ZWN1dGVkICphZnRlciogYSBub2RlIGVkZ2UgaGFzIGJlZW4gcmVtb3ZlZCxcbiAgICAgIC8vIGJ1dCAqYmVmb3JlKiB0aGUgZWRnZSBpdHNlbGYgaGFzIGJlZW4gcmVtb3ZlZC4gVGFraW5nIHRoaXMgaW50byBhY2NvdW50LlxuICAgICAgY29uc3QgZnJvbU5vZGUgPSBub2Rlc1tlZGdlLmZyb21JZF07XG4gICAgICBjb25zdCB0b05vZGUgPSBub2Rlc1tlZGdlLnRvSWRdO1xuICAgICAgY29uc3QgZWRnZU5vZGVzUHJlc2VudCA9IGZyb21Ob2RlICE9PSB1bmRlZmluZWQgJiYgdG9Ob2RlICE9PSB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGlzVmlzaWJsZSA9XG4gICAgICAgICF0aGlzLmNsdXN0ZXJpbmcuX2lzQ2x1c3RlcmVkRWRnZShlZGdlSWQpICYmXG4gICAgICAgIGVkZ2Uub3B0aW9ucy5oaWRkZW4gPT09IGZhbHNlICYmXG4gICAgICAgIGVkZ2VOb2Rlc1ByZXNlbnQgJiZcbiAgICAgICAgZnJvbU5vZGUub3B0aW9ucy5oaWRkZW4gPT09IGZhbHNlICYmIC8vIEFsc28gaGlkZGVuIGlmIGFueSBvZiBpdHMgY29ubmVjdGluZyBub2RlcyBhcmUgaGlkZGVuXG4gICAgICAgIHRvTm9kZS5vcHRpb25zLmhpZGRlbiA9PT0gZmFsc2U7IC8vIGlkZW1cblxuICAgICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgICB0aGlzLmJvZHkuZWRnZUluZGljZXMucHVzaChlZGdlLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQmluZCBhbGwgZXZlbnRzXG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmJpbmRFdmVudExpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhpcyBldmVudCB3aWxsIHRyaWdnZXIgYSByZWJ1aWxkaW5nIG9mIHRoZSBjYWNoZSBldmVyeXRoaW5nLlxuICAvLyBVc2VkIHdoZW4gbm9kZXMgb3IgZWRnZXMgaGF2ZSBiZWVuIGFkZGVkIG9yIHJlbW92ZWQuXG4gIHRoaXMuYm9keS5lbWl0dGVyLm9uKFwiX2RhdGFDaGFuZ2VkXCIsICgpID0+IHtcbiAgICB0aGlzLmVkZ2VzSGFuZGxlci5fdXBkYXRlU3RhdGUoKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFVcGRhdGVkXCIpO1xuICB9KTtcblxuICAvLyB0aGlzIGlzIGNhbGxlZCB3aGVuIG9wdGlvbnMgb2YgRVhJU1RJTkcgbm9kZXMgb3IgZWRnZXMgaGF2ZSBjaGFuZ2VkLlxuICB0aGlzLmJvZHkuZW1pdHRlci5vbihcIl9kYXRhVXBkYXRlZFwiLCAoKSA9PiB7XG4gICAgLy8gT3JkZXIgaW1wb3J0YW50IGluIGZvbGxvd2luZyBibG9ja1xuICAgIHRoaXMuY2x1c3RlcmluZy5fdXBkYXRlU3RhdGUoKTtcbiAgICB0aGlzLl91cGRhdGVWaXNpYmxlSW5kaWNlcygpO1xuXG4gICAgdGhpcy5fdXBkYXRlVmFsdWVSYW5nZSh0aGlzLmJvZHkubm9kZXMpO1xuICAgIHRoaXMuX3VwZGF0ZVZhbHVlUmFuZ2UodGhpcy5ib2R5LmVkZ2VzKTtcbiAgICAvLyBzdGFydCBzaW11bGF0aW9uIChjYW4gYmUgY2FsbGVkIHNhZmVseSwgZXZlbiBpZiBhbHJlYWR5IHJ1bm5pbmcpXG4gICAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcInN0YXJ0U2ltdWxhdGlvblwiKTtcbiAgICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3JlcXVlc3RSZWRyYXdcIik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTZXQgbm9kZXMgYW5kIGVkZ2VzLCBhbmQgb3B0aW9uYWxseSBvcHRpb25zIGFzIHdlbGwuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRhdGEgICAgICAgICAgICAgIE9iamVjdCBjb250YWluaW5nIHBhcmFtZXRlcnM6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge0FycmF5IHwgRGF0YVNldCB8IERhdGFWaWV3fSBbbm9kZXNdIEFycmF5IHdpdGggbm9kZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QXJyYXkgfCBEYXRhU2V0IHwgRGF0YVZpZXd9IFtlZGdlc10gQXJyYXkgd2l0aCBlZGdlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmd9IFtkb3RdIFN0cmluZyBjb250YWluaW5nIGRhdGEgaW4gRE9UIGZvcm1hdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmd9IFtnZXBoaV0gU3RyaW5nIGNvbnRhaW5pbmcgZGF0YSBpbiBnZXBoaSBKU09OIGZvcm1hdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtPcHRpb25zfSBbb3B0aW9uc10gT2JqZWN0IHdpdGggb3B0aW9uc1xuICovXG5OZXR3b3JrLnByb3RvdHlwZS5zZXREYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgLy8gcmVzZXQgdGhlIHBoeXNpY3MgZW5naW5lLlxuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwicmVzZXRQaHlzaWNzXCIpO1xuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX3Jlc2V0RGF0YVwiKTtcblxuICAvLyB1bnNlbGVjdCBhbGwgdG8gZW5zdXJlIG5vIHNlbGVjdGlvbnMgZnJvbSBvbGQgZGF0YSBhcmUgY2FycmllZCBvdmVyLlxuICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIudW5zZWxlY3RBbGwoKTtcblxuICBpZiAoZGF0YSAmJiBkYXRhLmRvdCAmJiAoZGF0YS5ub2RlcyB8fCBkYXRhLmVkZ2VzKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcbiAgICAgICdEYXRhIG11c3QgY29udGFpbiBlaXRoZXIgcGFyYW1ldGVyIFwiZG90XCIgb3IgJyArXG4gICAgICAgICcgcGFyYW1ldGVyIHBhaXIgXCJub2Rlc1wiIGFuZCBcImVkZ2VzXCIsIGJ1dCBub3QgYm90aC4nXG4gICAgKTtcbiAgfVxuXG4gIC8vIHNldCBvcHRpb25zXG4gIHRoaXMuc2V0T3B0aW9ucyhkYXRhICYmIGRhdGEub3B0aW9ucyk7XG4gIC8vIHNldCBhbGwgZGF0YVxuICBpZiAoZGF0YSAmJiBkYXRhLmRvdCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiVGhlIGRvdCBwcm9wZXJ0eSBoYXMgYmVlbiBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRoZSBzdGF0aWMgY29udmVydERvdCBtZXRob2QgdG8gY29udmVydCBET1QgaW50byB2aXMubmV0d29yayBmb3JtYXQgYW5kIHVzZSB0aGUgbm9ybWFsIGRhdGEgZm9ybWF0IHdpdGggbm9kZXMgYW5kIGVkZ2VzLiBUaGlzIGNvbnZlcnRlciBpcyB1c2VkIGxpa2UgdGhpczogdmFyIGRhdGEgPSB2aXMubmV0d29yay5jb252ZXJ0RG90KGRvdFN0cmluZyk7XCJcbiAgICApO1xuICAgIC8vIHBhcnNlIERPVCBmaWxlXG4gICAgY29uc3QgZG90RGF0YSA9IERPVFRvR3JhcGgoZGF0YS5kb3QpO1xuICAgIHRoaXMuc2V0RGF0YShkb3REYXRhKTtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLmdlcGhpKSB7XG4gICAgLy8gcGFyc2UgRE9UIGZpbGVcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIlRoZSBnZXBoaSBwcm9wZXJ0eSBoYXMgYmVlbiBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRoZSBzdGF0aWMgY29udmVydEdlcGhpIG1ldGhvZCB0byBjb252ZXJ0IGdlcGhpIGludG8gdmlzLm5ldHdvcmsgZm9ybWF0IGFuZCB1c2UgdGhlIG5vcm1hbCBkYXRhIGZvcm1hdCB3aXRoIG5vZGVzIGFuZCBlZGdlcy4gVGhpcyBjb252ZXJ0ZXIgaXMgdXNlZCBsaWtlIHRoaXM6IHZhciBkYXRhID0gdmlzLm5ldHdvcmsuY29udmVydEdlcGhpKGdlcGhpSnNvbik7XCJcbiAgICApO1xuICAgIGNvbnN0IGdlcGhpRGF0YSA9IHBhcnNlR2VwaGkoZGF0YS5nZXBoaSk7XG4gICAgdGhpcy5zZXREYXRhKGdlcGhpRGF0YSk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubm9kZXNIYW5kbGVyLnNldERhdGEoZGF0YSAmJiBkYXRhLm5vZGVzLCB0cnVlKTtcbiAgICB0aGlzLmVkZ2VzSGFuZGxlci5zZXREYXRhKGRhdGEgJiYgZGF0YS5lZGdlcywgdHJ1ZSk7XG4gIH1cblxuICAvLyBlbWl0IGNoYW5nZSBpbiBkYXRhXG4gIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJfZGF0YUNoYW5nZWRcIik7XG5cbiAgLy8gZW1pdCBkYXRhIGxvYWRlZFxuICB0aGlzLmJvZHkuZW1pdHRlci5lbWl0KFwiX2RhdGFMb2FkZWRcIik7XG5cbiAgLy8gZmluZCBhIHN0YWJsZSBwb3NpdGlvbiBvciBzdGFydCBhbmltYXRpbmcgdG8gYSBzdGFibGUgcG9zaXRpb25cbiAgdGhpcy5ib2R5LmVtaXR0ZXIuZW1pdChcImluaXRQaHlzaWNzXCIpO1xufTtcblxuLyoqXG4gKiBDbGVhbnMgdXAgYWxsIGJpbmRpbmdzIG9mIHRoZSBuZXR3b3JrLCByZW1vdmluZyBpdCBmdWxseSBmcm9tIHRoZSBtZW1vcnkgSUYgdGhlIHZhcmlhYmxlIGlzIHNldCB0byBudWxsIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiAqIHZhciBuZXR3b3JrID0gbmV3IHZpcy5OZXR3b3JrKC4uKTtcbiAqIG5ldHdvcmsuZGVzdHJveSgpO1xuICogbmV0d29yayA9IG51bGw7XG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYm9keS5lbWl0dGVyLmVtaXQoXCJkZXN0cm95XCIpO1xuICAvLyBjbGVhciBldmVudHNcbiAgdGhpcy5ib2R5LmVtaXR0ZXIub2ZmKCk7XG4gIHRoaXMub2ZmKCk7XG5cbiAgLy8gZGVsZXRlIG1vZHVsZXNcbiAgZGVsZXRlIHRoaXMuZ3JvdXBzO1xuICBkZWxldGUgdGhpcy5jYW52YXM7XG4gIGRlbGV0ZSB0aGlzLnNlbGVjdGlvbkhhbmRsZXI7XG4gIGRlbGV0ZSB0aGlzLmludGVyYWN0aW9uSGFuZGxlcjtcbiAgZGVsZXRlIHRoaXMudmlldztcbiAgZGVsZXRlIHRoaXMucmVuZGVyZXI7XG4gIGRlbGV0ZSB0aGlzLnBoeXNpY3M7XG4gIGRlbGV0ZSB0aGlzLmxheW91dEVuZ2luZTtcbiAgZGVsZXRlIHRoaXMuY2x1c3RlcmluZztcbiAgZGVsZXRlIHRoaXMubWFuaXB1bGF0aW9uO1xuICBkZWxldGUgdGhpcy5ub2Rlc0hhbmRsZXI7XG4gIGRlbGV0ZSB0aGlzLmVkZ2VzSGFuZGxlcjtcbiAgZGVsZXRlIHRoaXMuY29uZmlndXJhdG9yO1xuICBkZWxldGUgdGhpcy5pbWFnZXM7XG5cbiAgZm9yIChjb25zdCBub2RlSWQgaW4gdGhpcy5ib2R5Lm5vZGVzKSB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5Lm5vZGVzLCBub2RlSWQpKVxuICAgICAgY29udGludWU7XG4gICAgZGVsZXRlIHRoaXMuYm9keS5ub2Rlc1tub2RlSWRdO1xuICB9XG5cbiAgZm9yIChjb25zdCBlZGdlSWQgaW4gdGhpcy5ib2R5LmVkZ2VzKSB7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5ib2R5LmVkZ2VzLCBlZGdlSWQpKVxuICAgICAgY29udGludWU7XG4gICAgZGVsZXRlIHRoaXMuYm9keS5lZGdlc1tlZGdlSWRdO1xuICB9XG5cbiAgLy8gcmVtb3ZlIHRoZSBjb250YWluZXIgYW5kIGV2ZXJ5dGhpbmcgaW5zaWRlIGl0IHJlY3Vyc2l2ZWx5XG4gIHJlY3Vyc2l2ZURPTURlbGV0ZSh0aGlzLmJvZHkuY29udGFpbmVyKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHRoZSB2YWx1ZXMgb2YgYWxsIG9iamVjdCBpbiB0aGUgZ2l2ZW4gYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50XG4gKiB2YWx1ZSByYW5nZSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAgICBBbiBvYmplY3QgY29udGFpbmluZyBhIHNldCBvZiBFZGdlcyBvciBOb2Rlc1xuICogICAgICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0cyBtdXN0IGhhdmUgYSBtZXRob2QgZ2V0VmFsdWUoKSBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWVSYW5nZShtaW4sIG1heCkuXG4gKiBAcHJpdmF0ZVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5fdXBkYXRlVmFsdWVSYW5nZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgbGV0IGlkO1xuXG4gIC8vIGRldGVybWluZSB0aGUgcmFuZ2Ugb2YgdGhlIG9iamVjdHNcbiAgbGV0IHZhbHVlTWluID0gdW5kZWZpbmVkO1xuICBsZXQgdmFsdWVNYXggPSB1bmRlZmluZWQ7XG4gIGxldCB2YWx1ZVRvdGFsID0gMDtcbiAgZm9yIChpZCBpbiBvYmopIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaWQpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtpZF0uZ2V0VmFsdWUoKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlTWluID0gdmFsdWVNaW4gPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogTWF0aC5taW4odmFsdWUsIHZhbHVlTWluKTtcbiAgICAgICAgdmFsdWVNYXggPSB2YWx1ZU1heCA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBNYXRoLm1heCh2YWx1ZSwgdmFsdWVNYXgpO1xuICAgICAgICB2YWx1ZVRvdGFsICs9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGFkanVzdCB0aGUgcmFuZ2Ugb2YgYWxsIG9iamVjdHNcbiAgaWYgKHZhbHVlTWluICE9PSB1bmRlZmluZWQgJiYgdmFsdWVNYXggIT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoaWQgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaWQpKSB7XG4gICAgICAgIG9ialtpZF0uc2V0VmFsdWVSYW5nZSh2YWx1ZU1pbiwgdmFsdWVNYXgsIHZhbHVlVG90YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgTmV0d29yayBpcyBhY3RpdmUuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbk5ldHdvcmsucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIXRoaXMuYWN0aXZhdG9yIHx8IHRoaXMuYWN0aXZhdG9yLmFjdGl2ZTtcbn07XG5cbk5ldHdvcmsucHJvdG90eXBlLnNldFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNhbnZhcy5zZXRTaXplLmFwcGx5KHRoaXMuY2FudmFzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNhbnZhc1RvRE9NID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jYW52YXMuY2FudmFzVG9ET00uYXBwbHkodGhpcy5jYW52YXMsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuRE9NdG9DYW52YXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNhbnZhcy5ET010b0NhbnZhcy5hcHBseSh0aGlzLmNhbnZhcywgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogTm9kZXMgY2FuIGJlIGluIGNsdXN0ZXJzLiBDbHVzdGVycyBjYW4gYWxzbyBiZSBpbiBjbHVzdGVycy4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuZCBhcnJheSBvZlxuICogbm9kZUlkcyBzaG93aW5nIHdoZXJlIHRoZSBub2RlIGlzLlxuICpcbiAqIElmIGFueSBub2RlSWQgaW4gdGhlIGNoYWluLCBlc3BlY2lhbGx5IHRoZSBmaXJzdCBwYXNzZWQgaW4gYXMgYSBwYXJhbWV0ZXIsIGlzIG5vdCBwcmVzZW50IGluXG4gKiB0aGUgY3VycmVudCBub2RlcyBsaXN0LCBhbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC5cbiAqXG4gKiBFeGFtcGxlOlxuICogY2x1c3RlciAnQScgY29udGFpbnMgY2x1c3RlciAnQicsXG4gKiBjbHVzdGVyICdCJyBjb250YWlucyBjbHVzdGVyICdDJyxcbiAqIGNsdXN0ZXIgJ0MnIGNvbnRhaW5zIG5vZGUgJ2ZyZWQnLlxuICogYGpzbmV0d29yay5jbHVzdGVyaW5nLmZpbmROb2RlKCdmcmVkJylgIHdpbGwgcmV0dXJuIGBbJ0EnLCdCJywnQycsJ2ZyZWQnXWAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBub2RlSWRcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuTmV0d29yay5wcm90b3R5cGUuZmluZE5vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuZmluZE5vZGUuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcblxuTmV0d29yay5wcm90b3R5cGUuaXNDbHVzdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmlzQ2x1c3Rlci5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUub3BlbkNsdXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcub3BlbkNsdXN0ZXIuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNsdXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3Rlci5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Tm9kZXNJbkNsdXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuZ2V0Tm9kZXNJbkNsdXN0ZXIuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmNsdXN0ZXJCeUNvbm5lY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3RlckJ5Q29ubmVjdGlvbi5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuY2x1c3RlckJ5SHVic2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5jbHVzdGVyQnlIdWJzaXplLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS51cGRhdGVDbHVzdGVyZWROb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLnVwZGF0ZUNsdXN0ZXJlZE5vZGUuYXBwbHkodGhpcy5jbHVzdGVyaW5nLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldENsdXN0ZXJlZEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmdldENsdXN0ZXJlZEVkZ2VzLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRCYXNlRWRnZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy5nZXRCYXNlRWRnZS5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0QmFzZUVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbHVzdGVyaW5nLmdldEJhc2VFZGdlcy5hcHBseSh0aGlzLmNsdXN0ZXJpbmcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUudXBkYXRlRWRnZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY2x1c3RlcmluZy51cGRhdGVFZGdlLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2Qgd2lsbCBjbHVzdGVyIGFsbCBub2RlcyB3aXRoIDEgZWRnZSB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgY29ubmVjdGVkIG5vZGUuXG4gKiBUaGUgb3B0aW9ucyBvYmplY3QgaXMgZXhwbGFpbmVkIGluIGZ1bGwgPGEgZGF0YS1zY3JvbGw9XCJcIiBkYXRhLW9wdGlvbnM9XCJ7ICZxdW90O2Vhc2luZyZxdW90OzogJnF1b3Q7ZWFzZUluQ3ViaWMmcXVvdDsgfVwiIGhyZWY9XCIjb3B0aW9uc09iamVjdFwiPmJlbG93PC9hPi5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5OZXR3b3JrLnByb3RvdHlwZS5jbHVzdGVyT3V0bGllcnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNsdXN0ZXJpbmcuY2x1c3Rlck91dGxpZXJzLmFwcGx5KHRoaXMuY2x1c3RlcmluZywgYXJndW1lbnRzKTtcbn07XG5cbk5ldHdvcmsucHJvdG90eXBlLmdldFNlZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxheW91dEVuZ2luZS5nZXRTZWVkLmFwcGx5KHRoaXMubGF5b3V0RW5naW5lLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmVuYWJsZUVkaXRNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZW5hYmxlRWRpdE1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZGlzYWJsZUVkaXRNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZGlzYWJsZUVkaXRNb2RlLmFwcGx5KHRoaXMubWFuaXB1bGF0aW9uLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmFkZE5vZGVNb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uYWRkTm9kZU1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZWRpdE5vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5lZGl0Tm9kZS5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5lZGl0Tm9kZU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnNvbGUud2FybihcIkRlcHJlY2F0ZWQ6IFBsZWFzZSB1c2UgZWRpdE5vZGUgaW5zdGVhZCBvZiBlZGl0Tm9kZU1vZGUuXCIpO1xuICByZXR1cm4gdGhpcy5tYW5pcHVsYXRpb24uZWRpdE5vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuYWRkRWRnZU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5hZGRFZGdlTW9kZS5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5lZGl0RWRnZU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5lZGl0RWRnZU1vZGUuYXBwbHkodGhpcy5tYW5pcHVsYXRpb24sIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZGVsZXRlU2VsZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm1hbmlwdWxhdGlvbi5kZWxldGVTZWxlY3RlZC5hcHBseSh0aGlzLm1hbmlwdWxhdGlvbiwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRQb3NpdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRQb3NpdGlvbnMuYXBwbHkodGhpcy5ub2Rlc0hhbmRsZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRQb3NpdGlvbi5hcHBseSh0aGlzLm5vZGVzSGFuZGxlciwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5zdG9yZVBvc2l0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubm9kZXNIYW5kbGVyLnN0b3JlUG9zaXRpb25zLmFwcGx5KHRoaXMubm9kZXNIYW5kbGVyLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLm1vdmVOb2RlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIubW92ZU5vZGUuYXBwbHkodGhpcy5ub2Rlc0hhbmRsZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3ggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm5vZGVzSGFuZGxlci5nZXRCb3VuZGluZ0JveC5hcHBseSh0aGlzLm5vZGVzSGFuZGxlciwgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRDb25uZWN0ZWROb2RlcyA9IGZ1bmN0aW9uIChvYmplY3RJZCkge1xuICBpZiAodGhpcy5ib2R5Lm5vZGVzW29iamVjdElkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZXNIYW5kbGVyLmdldENvbm5lY3RlZE5vZGVzLmFwcGx5KFxuICAgICAgdGhpcy5ub2Rlc0hhbmRsZXIsXG4gICAgICBhcmd1bWVudHNcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aGlzLmVkZ2VzSGFuZGxlci5nZXRDb25uZWN0ZWROb2Rlcy5hcHBseShcbiAgICAgIHRoaXMuZWRnZXNIYW5kbGVyLFxuICAgICAgYXJndW1lbnRzXG4gICAgKTtcbiAgfVxufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldENvbm5lY3RlZEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5ub2Rlc0hhbmRsZXIuZ2V0Q29ubmVjdGVkRWRnZXMuYXBwbHkoXG4gICAgdGhpcy5ub2Rlc0hhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc3RhcnRTaW11bGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5waHlzaWNzLnN0YXJ0U2ltdWxhdGlvbi5hcHBseSh0aGlzLnBoeXNpY3MsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc3RvcFNpbXVsYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnBoeXNpY3Muc3RvcFNpbXVsYXRpb24uYXBwbHkodGhpcy5waHlzaWNzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnN0YWJpbGl6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucGh5c2ljcy5zdGFiaWxpemUuYXBwbHkodGhpcy5waHlzaWNzLCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5nZXRTZWxlY3Rpb24uYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnNldFNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uSGFuZGxlci5zZXRTZWxlY3Rpb24uYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFNlbGVjdGVkTm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuZ2V0U2VsZWN0ZWROb2RlSWRzLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5nZXRTZWxlY3RlZEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldFNlbGVjdGVkRWRnZUlkcy5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0Tm9kZUF0ID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBub2RlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldE5vZGVBdC5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG4gIGlmIChub2RlICE9PSB1bmRlZmluZWQgJiYgbm9kZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5vZGUuaWQ7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0RWRnZUF0ID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBlZGdlID0gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmdldEVkZ2VBdC5hcHBseShcbiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIsXG4gICAgYXJndW1lbnRzXG4gICk7XG4gIGlmIChlZGdlICE9PSB1bmRlZmluZWQgJiYgZWRnZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGVkZ2UuaWQ7XG4gIH1cbiAgcmV0dXJuIGVkZ2U7XG59O1xuTmV0d29yay5wcm90b3R5cGUuc2VsZWN0Tm9kZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdGlvbkhhbmRsZXIuc2VsZWN0Tm9kZXMuYXBwbHkoXG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLFxuICAgIGFyZ3VtZW50c1xuICApO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnNlbGVjdEVkZ2VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnNlbGVjdEVkZ2VzLmFwcGx5KFxuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcixcbiAgICBhcmd1bWVudHNcbiAgKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS51bnNlbGVjdEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLnVuc2VsZWN0QWxsLmFwcGx5KHRoaXMuc2VsZWN0aW9uSGFuZGxlciwgYXJndW1lbnRzKTtcbiAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyLmNvbW1pdFdpdGhvdXRFbWl0dGluZy5hcHBseSh0aGlzLnNlbGVjdGlvbkhhbmRsZXIpO1xuICB0aGlzLnJlZHJhdygpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLnJlZHJhdyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMucmVuZGVyZXIucmVkcmF3LmFwcGx5KHRoaXMucmVuZGVyZXIsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0U2NhbGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnZpZXcuZ2V0U2NhbGUuYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmdldFZpZXdQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5nZXRWaWV3UG9zaXRpb24uYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmZpdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5maXQuYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLm1vdmVUbyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5tb3ZlVG8uYXBwbHkodGhpcy52aWV3LCBhcmd1bWVudHMpO1xufTtcbk5ldHdvcmsucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy52aWV3LmZvY3VzLmFwcGx5KHRoaXMudmlldywgYXJndW1lbnRzKTtcbn07XG5OZXR3b3JrLnByb3RvdHlwZS5yZWxlYXNlTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMudmlldy5yZWxlYXNlTm9kZS5hcHBseSh0aGlzLnZpZXcsIGFyZ3VtZW50cyk7XG59O1xuTmV0d29yay5wcm90b3R5cGUuZ2V0T3B0aW9uc0Zyb21Db25maWd1cmF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIGxldCBvcHRpb25zID0ge307XG4gIGlmICh0aGlzLmNvbmZpZ3VyYXRvcikge1xuICAgIG9wdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRvci5nZXRPcHRpb25zLmFwcGx5KHRoaXMuY29uZmlndXJhdG9yKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5ldHdvcms7XG4iLCAiLyoqXG4gKiBOb3JtYWxpemVzIGxhbmd1YWdlIGNvZGUgaW50byB0aGUgZm9ybWF0IHVzZWQgaW50ZXJuYWxseS5cbiAqXG4gKiBAcGFyYW0gbG9jYWxlcyAtIEFsbCB0aGUgYXZhaWxhYmxlIGxvY2FsZXMuXG4gKiBAcGFyYW0gcmF3Q29kZSAtIFRoZSBvcmlnaW5hbCBjb2RlIGFzIHN1cHBsaWVkIGJ5IHRoZSB1c2VyLlxuICogQHJldHVybnMgTGFuZ3VhZ2UgY29kZSBpbiB0aGUgZm9ybWF0IGxhbmd1YWdlLUNPVU5UUlkgb3IgbGFuZ3VhZ2UsIGV2ZW50dWFsbHlcbiAqIGZhbGxiYWNrcyB0byBlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUxhbmd1YWdlQ29kZShcbiAgbG9jYWxlczogUmVjb3JkPHN0cmluZywgdW5kZWZpbmVkIHwgb2JqZWN0PixcbiAgcmF3Q29kZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IFtyYXdMYW5ndWFnZSwgcmF3Q291bnRyeV0gPSByYXdDb2RlLnNwbGl0KC9bLV8gL10vLCAyKTtcbiAgICBjb25zdCBsYW5ndWFnZSA9IHJhd0xhbmd1YWdlICE9IG51bGwgPyByYXdMYW5ndWFnZS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbiAgICBjb25zdCBjb3VudHJ5ID0gcmF3Q291bnRyeSAhPSBudWxsID8gcmF3Q291bnRyeS50b1VwcGVyQ2FzZSgpIDogbnVsbDtcblxuICAgIGlmIChsYW5ndWFnZSAmJiBjb3VudHJ5KSB7XG4gICAgICBjb25zdCBjb2RlID0gbGFuZ3VhZ2UgKyBcIi1cIiArIGNvdW50cnk7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxvY2FsZXMsIGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBjb2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIHZhcmlhbnQgJHtjb3VudHJ5fSBvZiBsYW5ndWFnZSAke2xhbmd1YWdlfS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGFuZ3VhZ2UpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBsYW5ndWFnZTtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobG9jYWxlcywgY29kZSkpIHtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gbGFuZ3VhZ2UgJHtsYW5ndWFnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYFVua25vd24gbG9jYWxlICR7cmF3Q29kZX0sIGZhbGxpbmcgYmFjayB0byBFbmdsaXNoLmApO1xuXG4gICAgcmV0dXJuIFwiZW5cIjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgVW5leHBlY3RlZCBlcnJvciB3aGlsZSBub3JtYWxpemluZyBsb2NhbGUgJHtyYXdDb2RlfSwgZmFsbGluZyBiYWNrIHRvIEVuZ2xpc2guYFxuICAgICk7XG5cbiAgICByZXR1cm4gXCJlblwiO1xuICB9XG59XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vbmV0d29yay9OZXR3b3JrXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgTmV0d29ya0ltYWdlcyB9IGZyb20gXCIuL25ldHdvcmsvSW1hZ2VzXCI7XG5cbmltcG9ydCAqIGFzIGRvdHBhcnNlciBmcm9tIFwiLi9uZXR3b3JrL2RvdHBhcnNlclwiO1xuZXhwb3J0IHsgZG90cGFyc2VyIGFzIG5ldHdvcmtET1RQYXJzZXIgfTtcbmV4cG9ydCBjb25zdCBwYXJzZURPVE5ldHdvcmsgPSBkb3RwYXJzZXIuRE9UVG9HcmFwaDtcblxuaW1wb3J0ICogYXMgZ2VwaGlQYXJzZXIgZnJvbSBcIi4vbmV0d29yay9nZXBoaVBhcnNlclwiO1xuZXhwb3J0IHsgcGFyc2VHZXBoaSBhcyBwYXJzZUdlcGhpTmV0d29yayB9IGZyb20gXCIuL25ldHdvcmsvZ2VwaGlQYXJzZXJcIjtcbmV4cG9ydCB7IGdlcGhpUGFyc2VyIGFzIG5ldHdvcmtHZXBoaVBhcnNlciB9O1xuXG5pbXBvcnQgKiBhcyBhbGxPcHRpb25zIGZyb20gXCIuL25ldHdvcmsvb3B0aW9uc1wiO1xuZXhwb3J0IHsgYWxsT3B0aW9ucyBhcyBuZXR3b3JrT3B0aW9ucyB9O1xuXG4vLyBEYXRhU2V0LCB1dGlscyBldGMuIGNhbid0IGJlIHJlZXhwb3J0ZWQgaGVyZSBiZWNhdXNlIHRoYXQgd291bGQgY2F1c2Ugc3RhY2tcbi8vIG92ZXJmbG93IGluIFVNRCBidWlsZHMuIFRoZXkgYWxsIGV4cG9ydCB2aXMgbmFtZXNwYWNlIHRoZXJlZm9yZSByZWV4cG9ydGluZ1xuLy8gbGVhZHMgdG8gbG9hZGluZyB2aXMgdG8gbG9hZCB2aXMgdG8gbG9hZCB2aXPigKZcbiIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsICIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgdGhpcyB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChOQVRJVkVfQklORCA/IGNhbGwuYmluZChhcHBseSkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbikge1xuICAvLyBOYXNob3JuIGJ1ZzpcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEyOFxuICAvLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xMTMwXG4gIGlmIChjbGFzc29mUmF3KGZuKSA9PT0gJ0Z1bmN0aW9uJykgcmV0dXJuIHVuY3VycnlUaGlzKGZuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdHlwZW9mLXVuZGVmaW5lZCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIElTX0hUTUxEREEgPSB0eXBlb2YgZG9jdW1lbnRBbGwgPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRBbGwgIT09IHVuZGVmaW5lZDtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFsbDogZG9jdW1lbnRBbGwsXG4gIElTX0hUTUxEREE6IElTX0hUTUxEREFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRkb2N1bWVudEFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1hbGwnKTtcblxudmFyIGRvY3VtZW50QWxsID0gJGRvY3VtZW50QWxsLmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG5tb2R1bGUuZXhwb3J0cyA9ICRkb2N1bWVudEFsbC5JU19IVE1MRERBID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09PSAnU3RyaW5nJyA/IHNwbGl0KGl0LCAnJykgOiAkT2JqZWN0KGl0KTtcbn0gOiAkT2JqZWN0O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyICRkb2N1bWVudEFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1hbGwnKTtcblxudmFyIGRvY3VtZW50QWxsID0gJGRvY3VtZW50QWxsLmFsbDtcblxubW9kdWxlLmV4cG9ydHMgPSAkZG9jdW1lbnRBbGwuSVNfSFRNTEREQSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KSB8fCBpdCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHZhcmlhYmxlKSA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBuYXZpZ2F0b3IgIT0gJ3VuZGVmaW5lZCcgJiYgU3RyaW5nKG5hdmlnYXRvci51c2VyQWdlbnQpIHx8ICcnO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjMzLjInLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyMyBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjMzLjIvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyYXBwZXIpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gYXBwbHkoTmF0aXZlQ29uc3RydWN0b3IsIHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbCA6IFNUQVRJQyA/IGdsb2JhbFtUQVJHRVRdIDogKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHBhdGgsIFRBUkdFVCwge30pW1RBUkdFVF07XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXNPd24obmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgbWV0aG9kcyB0byBnbG9iYWwgZm9yIGNhbGxpbmcgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2VzIGluIHRoaXMgdmVyc2lvblxuICAgIGVsc2UgaWYgKG9wdGlvbnMud3JhcCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IHdyYXBDb25zdHJ1Y3Rvcihzb3VyY2VQcm9wZXJ0eSk7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgZWxzZSBpZiAoUFJPVE8gJiYgaXNDYWxsYWJsZShzb3VyY2VQcm9wZXJ0eSkpIHJlc3VsdFByb3BlcnR5ID0gdW5jdXJyeVRoaXMoc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHRQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCBrZXksIHJlc3VsdFByb3BlcnR5KTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzT3duKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aFtWSVJUVUFMX1BST1RPVFlQRV0sIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgLy8gZXhwb3J0IHJlYWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIGlmIChvcHRpb25zLnJlYWwgJiYgdGFyZ2V0UHJvdG90eXBlICYmIChGT1JDRUQgfHwgIXRhcmdldFByb3RvdHlwZVtrZXldKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0UHJvdG90eXBlLCBrZXksIHNvdXJjZVByb3BlcnR5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eS5zaGFtKSBkZWZpbmVQcm9wZXJ0eS5zaGFtID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdHJ1bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC10cnVuYycpO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiBudW1iZXIgIT09IG51bWJlciB8fCBudW1iZXIgPT09IDAgPyAwIDogdHJ1bmMobnVtYmVyKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIHByb3BlcnR5S2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbi8vIGdldHRpbmcgdGFnIGZyb20gRVM2KyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2Bcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8gY2xhc3NvZlJhdyA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgdGFnLCByZXN1bHQ7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mICh0YWcgPSB0cnlHZXQoTyA9ICRPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBlbXB0eSA9IFtdO1xudmFyIGNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgY29uc3RydWN0b3JSZWdFeHAgPSAvXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhjb25zdHJ1Y3RvclJlZ0V4cC5leGVjKTtcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLnRlc3Qobm9vcCk7XG5cbnZhciBpc0NvbnN0cnVjdG9yTW9kZXJuID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3RydWN0KG5vb3AsIGVtcHR5LCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICBzd2l0Y2ggKGNsYXNzb2YoYXJndW1lbnQpKSB7XG4gICAgY2FzZSAnQXN5bmNGdW5jdGlvbic6XG4gICAgY2FzZSAnR2VuZXJhdG9yRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nOiByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gICAgLy8gYEZ1bmN0aW9uI3RvU3RyaW5nYCB0aHJvd3Mgb24gc29tZSBidWlsdC1pdCBmdW5jdGlvbiBpbiBzb21lIGxlZ2FjeSBlbmdpbmVzXG4gICAgLy8gKGZvciBleGFtcGxlLCBgRE9NUXVhZGAgYW5kIHNpbWlsYXIgaW4gRkY0MS0pXG4gICAgcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjKGNvbnN0cnVjdG9yUmVnRXhwLCBpbnNwZWN0U291cmNlKGFyZ3VtZW50KSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmlzQ29uc3RydWN0b3JMZWdhY3kuc2hhbSA9IHRydWU7XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYSBwYXJ0IG9mIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXkpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAoaXNDb25zdHJ1Y3RvcihDKSAmJiAoQyA9PT0gJEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IEM7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG4vLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbi8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc5XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCA9IFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gW107XG4gIGFycmF5W0lTX0NPTkNBVF9TUFJFQURBQkxFXSA9IGZhbHNlO1xuICByZXR1cm4gYXJyYXkuY29uY2F0KClbMF0gIT09IGFycmF5O1xufSk7XG5cbnZhciBpc0NvbmNhdFNwcmVhZGFibGUgPSBmdW5jdGlvbiAoTykge1xuICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzcHJlYWRhYmxlID0gT1tJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gIHJldHVybiBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KE8pO1xufTtcblxudmFyIEZPUkNFRCA9ICFJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIHx8ICFhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdjb25jYXQnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb25jYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29uY2F0XG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAaXNDb25jYXRTcHJlYWRhYmxlIGFuZCBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBjb25jYXQ6IGZ1bmN0aW9uIGNvbmNhdChhcmcpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoRSk7XG4gICAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihuICsgbGVuKTtcbiAgICAgICAgZm9yIChrID0gMDsgayA8IGxlbjsgaysrLCBuKyspIGlmIChrIGluIEUpIGNyZWF0ZVByb3BlcnR5KEEsIG4sIEVba10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyAxKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzT3duKGhpZGRlbktleXMsIGtleSkgJiYgaGFzT3duKE8sIGtleSkgJiYgcHVzaChyZXN1bHQsIGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcHVzaChyZXN1bHQsIGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgdmFyIHJlc3VsdCA9ICRBcnJheShtYXgoZmluIC0gaywgMCkpO1xuICB2YXIgbiA9IDA7XG4gIGZvciAoOyBrIDwgZmluOyBrKyssIG4rKykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlJyk7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBhcnJheVNsaWNlKHdpbmRvd05hbWVzKTtcbiAgfVxufTtcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIGNsYXNzb2YoaXQpID09PSAnV2luZG93J1xuICAgID8gZ2V0V2luZG93TmFtZXMoaXQpXG4gICAgOiAkZ2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnVtZXJhYmxlKSB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgdmFsdWUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5leHBvcnRzLmYgPSB3ZWxsS25vd25TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgdmFyIFN5bWJvbCA9IHBhdGguU3ltYm9sIHx8IChwYXRoLlN5bWJvbCA9IHt9KTtcbiAgaWYgKCFoYXNPd24oU3ltYm9sLCBOQU1FKSkgZGVmaW5lUHJvcGVydHkoU3ltYm9sLCBOQU1FLCB7XG4gICAgdmFsdWU6IHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZihOQU1FKVxuICB9KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlclJlamVjdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9SRUpFQ1QgPSBUWVBFID09PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0KTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY3JlYXRlID0gc3BlY2lmaWNDcmVhdGUgfHwgYXJyYXlTcGVjaWVzQ3JlYXRlO1xuICAgIHZhciB0YXJnZXQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgfHwgSVNfRklMVEVSX1JFSkVDVCA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbHVlLCByZXN1bHQ7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzdWx0ID0gYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgdGFyZ2V0W2luZGV4XSA9IHJlc3VsdDsgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdCkgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWx1ZTsgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgLy8gZXZlcnlcbiAgICAgICAgICBjYXNlIDc6IHB1c2godGFyZ2V0LCB2YWx1ZSk7ICAgICAgLy8gZmlsdGVyUmVqZWN0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG4gIGZvckVhY2g6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbiAgbWFwOiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoNCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRJbmRleFxuICBmaW5kSW5kZXg6IGNyZWF0ZU1ldGhvZCg2KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJSZWplY3RgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiAgZmlsdGVyUmVqZWN0OiBjcmVhdGVNZXRob2QoNylcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIG5hdGl2ZU9iamVjdENyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG5cbnZhciBISURERU4gPSBzaGFyZWRLZXkoJ2hpZGRlbicpO1xudmFyIFNZTUJPTCA9ICdTeW1ib2wnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTWU1CT0wpO1xuXG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbCAmJiAkU3ltYm9sW1BST1RPVFlQRV07XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmY7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90b3R5cGVTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAoTywgUCwgQXR0cmlidXRlcykge1xuICB2YXIgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIFApO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcikgZGVsZXRlIE9iamVjdFByb3RvdHlwZVtQXTtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yICYmIE8gIT09IE9iamVjdFByb3RvdHlwZSkge1xuICAgIG5hdGl2ZURlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZSwgUCwgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcik7XG4gIH1cbn07XG5cbnZhciBzZXRTeW1ib2xEZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0Q3JlYXRlKG5hdGl2ZURlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9PSA3O1xufSkgPyBmYWxsYmFja0RlZmluZVByb3BlcnR5IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZShTeW1ib2xQcm90b3R5cGUpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXNPd24oTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwge30pKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgJHRoaXMgPSB0aGlzID09PSB1bmRlZmluZWQgPyBnbG9iYWwgOiB0aGlzO1xuICAgICAgaWYgKCR0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKCR0aGlzLCBISURERU4pICYmIGhhc093bigkdGhpc1tISURERU5dLCB0YWcpKSAkdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSgkdGhpcywgdGFnLCBkZXNjcmlwdG9yKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBVU0VfU0VUVEVSKSBzZXRTeW1ib2xEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiBzZXR0ZXIgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnLCBkZXNjcmlwdGlvbik7XG4gIH07XG5cbiAgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbFtQUk9UT1RZUEVdO1xuXG4gIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS50YWc7XG4gIH0pO1xuXG4gIGRlZmluZUJ1aWx0SW4oJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdlbGxLbm93blN5bWJvbChuYW1lKSwgbmFtZSk7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtU3ltYm9sLWRlc2NyaXB0aW9uXG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuZGVzY3JpcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFJU19QVVJFKSB7XG4gICAgICBkZWZpbmVCdWlsdEluKE9iamVjdFByb3RvdHlwZSwgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgU3ltYm9sOiAkU3ltYm9sXG59KTtcblxuJGZvckVhY2gob2JqZWN0S2V5cyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBmdW5jdGlvbiAobmFtZSkge1xuICBkZWZpbmVXZWxsS25vd25TeW1ib2wobmFtZSk7XG59KTtcblxuJCh7IHRhcmdldDogU1lNQk9MLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IGZhbHNlOyB9XG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIC8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Jcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIC8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUoKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgU1lNQk9MKTtcblxuaGlkZGVuS2V5c1tISURERU5dID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSBzYWZlICovXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiYgISFTeW1ib2xbJ2ZvciddICYmICEhU3ltYm9sLmtleUZvcjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeScpO1xudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5mb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuZm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKGtleSk7XG4gICAgaWYgKGhhc093bihTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5LCBzdHJpbmcpKSByZXR1cm4gU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddO1xuICAgIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKShzdHJpbmcpO1xuICAgIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXSA9IHN5bWJvbDtcbiAgICBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bWJvbF0gPSBzdHJpbmc7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbicpO1xuXG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmtleUZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBuZXcgVHlwZUVycm9yKHRyeVRvU3RyaW5nKHN5bSkgKyAnIGlzIG5vdCBhIHN5bWJvbCcpO1xuICAgIGlmIChoYXNPd24oU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSwgc3ltKSkgcmV0dXJuIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnlbc3ltXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKFtdLnNsaWNlKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbicpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoLy4vLmV4ZWMpO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBudW1iZXJUb1N0cmluZyA9IHVuY3VycnlUaGlzKDEuMC50b1N0cmluZyk7XG5cbnZhciB0ZXN0ZXIgPSAvW1xcdUQ4MDAtXFx1REZGRl0vZztcbnZhciBsb3cgPSAvXltcXHVEODAwLVxcdURCRkZdJC87XG52YXIgaGkgPSAvXltcXHVEQzAwLVxcdURGRkZdJC87XG5cbnZhciBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKSgnc3RyaW5naWZ5IGRldGVjdGlvbicpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT09ICdbbnVsbF0nXG4gICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT09ICd7fSc7XG59KTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG52YXIgSUxMX0ZPUk1FRF9VTklDT0RFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxudmFyIHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4ID0gZnVuY3Rpb24gKGl0LCByZXBsYWNlcikge1xuICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgdmFyICRyZXBsYWNlciA9IGdldFJlcGxhY2VyRnVuY3Rpb24ocmVwbGFjZXIpO1xuICBpZiAoIWlzQ2FsbGFibGUoJHJlcGxhY2VyKSAmJiAoaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgYXJnc1sxXSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgLy8gc29tZSBvbGQgaW1wbGVtZW50YXRpb25zIChsaWtlIFdlYktpdCkgY291bGQgcGFzcyBudW1iZXJzIGFzIGtleXNcbiAgICBpZiAoaXNDYWxsYWJsZSgkcmVwbGFjZXIpKSB2YWx1ZSA9IGNhbGwoJHJlcGxhY2VyLCB0aGlzLCAkU3RyaW5nKGtleSksIHZhbHVlKTtcbiAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9O1xuICByZXR1cm4gYXBwbHkoJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG59O1xuXG52YXIgZml4SWxsRm9ybWVkID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IGNoYXJBdChzdHJpbmcsIG9mZnNldCArIDEpO1xuICBpZiAoKGV4ZWMobG93LCBtYXRjaCkgJiYgIWV4ZWMoaGksIG5leHQpKSB8fCAoZXhlYyhoaSwgbWF0Y2gpICYmICFleGVjKGxvdywgcHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBudW1iZXJUb1N0cmluZyhjaGFyQ29kZUF0KG1hdGNoLCAwKSwgMTYpO1xuICB9IHJldHVybiBtYXRjaDtcbn07XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBhcml0eTogMywgZm9yY2VkOiBXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gfHwgSUxMX0ZPUk1FRF9VTklDT0RFIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFwcGx5KFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA/IHN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IDogJHN0cmluZ2lmeSwgbnVsbCwgYXJncyk7XG4gICAgICByZXR1cm4gSUxMX0ZPUk1FRF9VTklDT0RFICYmIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXBsYWNlKHJlc3VsdCwgdGVzdGVyLCBmaXhJbGxGb3JtZWQpIDogcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5hc3luY0l0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuYXN5bmNpdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5oYXNJbnN0YW5jZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmhhc2luc3RhbmNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2hhc0luc3RhbmNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pc2NvbmNhdHNwcmVhZGFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5pdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLml0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tYXRjaEFsbGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoYWxsXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoQWxsJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5yZXBsYWNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucmVwbGFjZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zZWFyY2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5zZWFyY2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc2VhcmNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGVjaWVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BlY2llc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5zcGxpdGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwbGl0XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwbGl0Jyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnRvUHJpbWl0aXZlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9wcmltaXRpdmVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIGBTeW1ib2wudG9TdHJpbmdUYWdgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3N0cmluZ3RhZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnZXRCdWlsdEluKCdTeW1ib2wnKSwgJ1N5bWJvbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wudW5zY29wYWJsZXNgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC51bnNjb3BhYmxlc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gSlNPTltAQHRvU3RyaW5nVGFnXSBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24nKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wuaXMtY29uY2F0LXNwcmVhZGFibGUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5tYXRoLnRvLXN0cmluZy10YWcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC50by1zdHJpbmctdGFnJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9ICFpc09iamVjdChJdGVyYXRvclByb3RvdHlwZSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICBkZWZpbmVCdWlsdEluKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQsIEVOVU1FUkFCTEVfTkVYVCkge1xuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCshRU5VTUVSQUJMRV9ORVhULCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKHR5cGVvZiBhcmd1bWVudCA9PSAnb2JqZWN0JyB8fCBpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LXNldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgc2V0dGVyID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJywgJ3NldCcpO1xuICAgIHNldHRlcih0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBzd2l0Y2ggKHN0YXRlLmtpbmQpIHtcbiAgICBjYXNlICdrZXlzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoaW5kZXgsIGZhbHNlKTtcbiAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIH0gcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZmFsc2UpO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG52YXIgdmFsdWVzID0gSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDQ1LSBidWdcbmlmICghSVNfUFVSRSAmJiBERVNDUklQVE9SUyAmJiB2YWx1ZXMubmFtZSAhPT0gJ3ZhbHVlcycpIHRyeSB7XG4gIGRlZmluZVByb3BlcnR5KHZhbHVlcywgJ25hbWUnLCB7IHZhbHVlOiAndmFsdWVzJyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiIsICIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbQ09MTEVDVElPTl9OQU1FXTtcbiAgdmFyIENvbGxlY3Rpb25Qcm90b3R5cGUgPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSAmJiBjbGFzc29mKENvbGxlY3Rpb25Qcm90b3R5cGUpICE9PSBUT19TVFJJTkdfVEFHKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIENPTExFQ1RJT05fTkFNRSk7XG4gIH1cbiAgSXRlcmF0b3JzW0NPTExFQ1RJT05fTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL3N5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIE1FVEFEQVRBID0gd2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vLyBGdW5jdGlvbi5wcm90b3R5cGVbQEBtZXRhZGF0YV1cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuaWYgKEZ1bmN0aW9uUHJvdG90eXBlW01FVEFEQVRBXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uUHJvdG90eXBlLCBNRVRBREFUQSwge1xuICAgIHZhbHVlOiBudWxsXG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXN5bmMtZXhwbGljaXQtcmVzb3VyY2UtbWFuYWdlbWVudFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0Rpc3Bvc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLmRpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1leHBsaWNpdC1yZXNvdXJjZS1tYW5hZ2VtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2Rpc3Bvc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvc3ltYm9sJyk7XG5cbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LmZ1bmN0aW9uLm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuYXN5bmMtZGlzcG9zZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmRpc3Bvc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tZXRhZGF0YScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyIGtleUZvciA9IFN5bWJvbC5rZXlGb3I7XG52YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRTeW1ib2xgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLXN5bWJvbC1wcmVkaWNhdGVzLyNzZWMtc3ltYm9sLWlzcmVnaXN0ZXJlZHN5bWJvbFxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sIHx8IGZ1bmN0aW9uIGlzUmVnaXN0ZXJlZFN5bWJvbCh2YWx1ZSkge1xuICB0cnkge1xuICAgIHJldHVybiBrZXlGb3IodGhpc1N5bWJvbFZhbHVlKHZhbHVlKSkgIT09IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNSZWdpc3RlcmVkU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1pcy1yZWdpc3RlcmVkJyk7XG5cbi8vIGBTeW1ib2wuaXNSZWdpc3RlcmVkU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3JlZ2lzdGVyZWRzeW1ib2xcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNSZWdpc3RlcmVkU3ltYm9sOiBpc1JlZ2lzdGVyZWRTeW1ib2xcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xudmFyICRpc1dlbGxLbm93blN5bWJvbCA9IFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbDtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0QnVpbHRJbignT2JqZWN0JywgJ2dldE93blByb3BlcnR5TmFtZXMnKTtcbnZhciB0aGlzU3ltYm9sVmFsdWUgPSB1bmN1cnJ5VGhpcyhTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG5cbmZvciAodmFyIGkgPSAwLCBzeW1ib2xLZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpLCBzeW1ib2xLZXlzTGVuZ3RoID0gc3ltYm9sS2V5cy5sZW5ndGg7IGkgPCBzeW1ib2xLZXlzTGVuZ3RoOyBpKyspIHtcbiAgLy8gc29tZSBvbGQgZW5naW5lcyB0aHJvd3Mgb24gYWNjZXNzIHRvIHNvbWUga2V5cyBsaWtlIGBhcmd1bWVudHNgIG9yIGBjYWxsZXJgXG4gIHRyeSB7XG4gICAgdmFyIHN5bWJvbEtleSA9IHN5bWJvbEtleXNbaV07XG4gICAgaWYgKGlzU3ltYm9sKFN5bWJvbFtzeW1ib2xLZXldKSkgd2VsbEtub3duU3ltYm9sKHN5bWJvbEtleSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn1cblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93blN5bWJvbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXN3ZWxsa25vd25zeW1ib2xcbi8vIFdlIHNob3VsZCBwYXRjaCBpdCBmb3IgbmV3bHkgYWRkZWQgd2VsbC1rbm93biBzeW1ib2xzLiBJZiBpdCdzIG5vdCByZXF1aXJlZCwgdGhpcyBtb2R1bGUganVzdCB3aWxsIG5vdCBiZSBpbmplY3RlZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkge1xuICBpZiAoJGlzV2VsbEtub3duU3ltYm9sICYmICRpc1dlbGxLbm93blN5bWJvbCh2YWx1ZSkpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodmFsdWUpO1xuICAgIGZvciAodmFyIGogPSAwLCBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhXZWxsS25vd25TeW1ib2xzU3RvcmUpLCBrZXlzTGVuZ3RoID0ga2V5cy5sZW5ndGg7IGogPCBrZXlzTGVuZ3RoOyBqKyspIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXEgLS0gcG9seWZpbGxlZCBzeW1ib2xzIGNhc2VcbiAgICAgIGlmIChXZWxsS25vd25TeW1ib2xzU3RvcmVba2V5c1tqXV0gPT0gc3ltYm9sKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1dlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtaXMtd2VsbC1rbm93bicpO1xuXG4vLyBgU3ltYm9sLmlzV2VsbEtub3duU3ltYm9sYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd25TeW1ib2w6IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm1hdGNoZXJgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLm9ic2VydmFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1JlZ2lzdGVyZWRTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXJlZ2lzdGVyZWQnKTtcblxuLy8gYFN5bWJvbC5pc1JlZ2lzdGVyZWRgIG1ldGhvZFxuLy8gb2Jzb2xldGUgdmVyc2lvbiBvZiBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc3ltYm9sLXByZWRpY2F0ZXMvI3NlYy1zeW1ib2wtaXNyZWdpc3RlcmVkc3ltYm9sXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzUmVnaXN0ZXJlZFN5bWJvbCcgfSwge1xuICBpc1JlZ2lzdGVyZWQ6IGlzUmVnaXN0ZXJlZFN5bWJvbFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWlzLXdlbGwta25vd24nKTtcblxuLy8gYFN5bWJvbC5pc1dlbGxLbm93bmAgbWV0aG9kXG4vLyBvYnNvbGV0ZSB2ZXJzaW9uIG9mIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1zeW1ib2wtcHJlZGljYXRlcy8jc2VjLXN5bWJvbC1pc3dlbGxrbm93bnN5bWJvbFxuLy8gV2Ugc2hvdWxkIHBhdGNoIGl0IGZvciBuZXdseSBhZGRlZCB3ZWxsLWtub3duIHN5bWJvbHMuIElmIGl0J3Mgbm90IHJlcXVpcmVkLCB0aGlzIG1vZHVsZSBqdXN0IHdpbGwgbm90IGJlIGluamVjdGVkXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgbmFtZTogJ2lzV2VsbEtub3duU3ltYm9sJywgZm9yY2VkOiB0cnVlIH0sIHtcbiAgaXNXZWxsS25vd246IGlzV2VsbEtub3duU3ltYm9sXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YUtleWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvci1tZXRhZGF0YVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YUtleScpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLnBhdHRlcm5NYXRjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgncGF0dGVybk1hdGNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG5cbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZUFsbCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9hY3R1YWwvc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuaXMtcmVnaXN0ZXJlZC1zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duLXN5bWJvbCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLm1hdGNoZXInKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLmlzLXJlZ2lzdGVyZWQnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5pcy13ZWxsLWtub3duJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEta2V5Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucGF0dGVybi1tYXRjaCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9zeW1ib2wnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcblxudmFyIFNUUklOR19JVEVSQVRPUiA9ICdTdHJpbmcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLUBAaXRlcmF0b3JcbmRlZmluZUl0ZXJhdG9yKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiB0b1N0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXN0cmluZ2l0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QocG9pbnQsIGZhbHNlKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yJyk7XG52YXIgV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKCdpdGVyYXRvcicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9zeW1ib2wvaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvc3ltYm9sL2l0ZXJhdG9yJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9zeW1ib2wvaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiaW1wb3J0IF9TeW1ib2wgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIjtcbmltcG9ydCBfU3ltYm9sJGl0ZXJhdG9yIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2l0ZXJhdG9yLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZScpO1xudmFyIFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZigndG9QcmltaXRpdmUnKTtcbiIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IF9TeW1ib2wkdG9QcmltaXRpdmUgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvdG8tcHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbX1N5bWJvbCR0b1ByaW1pdGl2ZV07XG4gIGlmIChwcmltICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVzID0gcHJpbS5jYWxsKGlucHV0LCBoaW50IHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKGhpbnQgPT09IFwic3RyaW5nXCIgPyBTdHJpbmcgOiBOdW1iZXIpKGlucHV0KTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIF9PYmplY3QkZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCAiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghaGFzT3duKGZhY3RvcmllcywgYXJnc0xlbmd0aCkpIHtcbiAgICB2YXIgbGlzdCA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IGFyZ3NMZW5ndGg7IGkrKykgbGlzdFtpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIGZhY3Rvcmllc1thcmdzTGVuZ3RoXSA9ICRGdW5jdGlvbignQyxhJywgJ3JldHVybiBuZXcgQygnICsgam9pbihsaXN0LCAnLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2FyZ3NMZW5ndGhdKEMsIGFyZ3MpO1xufTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBkZXRlY3Rpb25cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyAkRnVuY3Rpb24uYmluZCA6IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIEYgPSBhQ2FsbGFibGUodGhpcyk7XG4gIHZhciBQcm90b3R5cGUgPSBGLnByb3RvdHlwZTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IGNvbmNhdChwYXJ0QXJncywgYXJyYXlTbGljZShhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kRnVuY3Rpb24gPyBjb25zdHJ1Y3QoRiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogRi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KFByb3RvdHlwZSkpIGJvdW5kRnVuY3Rpb24ucHJvdG90eXBlID0gUHJvdG90eXBlO1xuICByZXR1cm4gYm91bmRGdW5jdGlvbjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIGRldGVjdGlvblxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUsIGZvcmNlZDogRnVuY3Rpb24uYmluZCAhPT0gYmluZCB9LCB7XG4gIGJpbmQ6IGJpbmRcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SLCBNRVRIT0QpIHtcbiAgdmFyIE5hbWVzcGFjZSA9IHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG4gIHZhciBwdXJlTWV0aG9kID0gTmFtZXNwYWNlICYmIE5hbWVzcGFjZVtNRVRIT0RdO1xuICBpZiAocHVyZU1ldGhvZCkgcmV0dXJuIHB1cmVNZXRob2Q7XG4gIHZhciBOYXRpdmVDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBOYXRpdmVQcm90b3R5cGUgJiYgTmF0aXZlUHJvdG90eXBlW01FVEhPRF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdGdW5jdGlvbicsICdiaW5kJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9uL3ZpcnR1YWwvYmluZCcpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5iaW5kO1xuICByZXR1cm4gaXQgPT09IEZ1bmN0aW9uUHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEZ1bmN0aW9uUHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBGdW5jdGlvblByb3RvdHlwZS5iaW5kKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2JpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9iaW5kXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyByZWR1Y2UsIHJlZHVjZVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfUklHSFQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhcmd1bWVudHNMZW5ndGgsIG1lbW8pIHtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2tmbik7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IElTX1JJR0hUID8gbGVuZ3RoIC0gMSA6IDA7XG4gICAgdmFyIGkgPSBJU19SSUdIVCA/IC0xIDogMTtcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDwgMikgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgICAgaW5kZXggKz0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgaWYgKElTX1JJR0hUID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoO0lTX1JJR0hUID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiAgbGVmdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZXJpZ2h0XG4gIHJpZ2h0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG4vLyBDaHJvbWUgODAtODIgaGFzIGEgY3JpdGljYWwgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDQ5OTgyXG52YXIgQ0hST01FX0JVRyA9ICFJU19OT0RFICYmIENIUk9NRV9WRVJTSU9OID4gNzkgJiYgQ0hST01FX1ZFUlNJT04gPCA4MztcbnZhciBGT1JDRUQgPSBDSFJPTUVfQlVHIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgbGVuZ3RoLCBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAncmVkdWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmVkdWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJlZHVjZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmVkdWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbHRlcicpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmaWx0ZXInKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maWx0ZXInKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmlsdGVyO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLm1hcDtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnbWFwJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkubWFwJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ21hcCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL21hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5tYXA7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLm1hcCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG5cbi8vIGBGbGF0dGVuSW50b0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gZnVuY3Rpb24gKHRhcmdldCwgb3JpZ2luYWwsIHNvdXJjZSwgc291cmNlTGVuLCBzdGFydCwgZGVwdGgsIG1hcHBlciwgdGhpc0FyZykge1xuICB2YXIgdGFyZ2V0SW5kZXggPSBzdGFydDtcbiAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgdmFyIG1hcEZuID0gbWFwcGVyID8gYmluZChtYXBwZXIsIHRoaXNBcmcpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBlbGVtZW50TGVuO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBpZiAoZGVwdGggPiAwICYmIGlzQXJyYXkoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudExlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKGVsZW1lbnQpO1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgZWxlbWVudExlbiwgdGFyZ2V0SW5kZXgsIGRlcHRoIC0gMSkgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKHRhcmdldEluZGV4ICsgMSk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbkludG9BcnJheTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mbGF0TWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZsYXRtYXBcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBBO1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIEEubGVuZ3RoID0gZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5mbGF0LW1hcCcpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS51bnNjb3BhYmxlcy5mbGF0LW1hcCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdmbGF0TWFwJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmxhdC1tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmxhdE1hcDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZmxhdE1hcCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgImltcG9ydCB7IERhdGFJbnRlcmZhY2UsIEV2ZW50Q2FsbGJhY2tzLCBQYXJ0SXRlbSB9IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcblxuLyoqXG4gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVBpcGUge1xuICAvKipcbiAgICogVGFrZSBhbGwgaXRlbXMgZnJvbSB0aGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldywgdHJhbnNmb3JtIHRoZW0gYXNcbiAgICogY29uZmlndXJlZCBhbmQgdXBkYXRlIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBhbGwoKTogdGhpcztcblxuICAvKipcbiAgICogU3RhcnQgb2JzZXJ2aW5nIHRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3LCB0cmFuc2Zvcm1pbmcgdGhlIGl0ZW1zXG4gICAqIGFuZCB1cGRhdGluZyB0aGUgdGFyZ2V0IGRhdGEgc2V0LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBzb3VyY2UgZGF0YSBzZXQgd2lsbCBiZSBpZ25vcmVkLiBJZiB5b3UgZm9yXG4gICAqIGV4YW1wbGUgd2FudCB0byBwcm9jZXNzIGFsbCB0aGUgaXRlbXMgdGhhdCBhcmUgYWxyZWFkeSB0aGVyZSB1c2U6XG4gICAqIGBwaXBlLmFsbCgpLnN0YXJ0KClgLlxuICAgKi9cbiAgc3RhcnQoKTogdGhpcztcblxuICAvKipcbiAgICogU3RvcCBvYnNlcnZpbmcgdGhlIHNvdXJjZSBkYXRhIHNldCBvciBkYXRhIHZpZXcsIHRyYW5zZm9ybWluZyB0aGUgaXRlbXNcbiAgICogYW5kIHVwZGF0aW5nIHRoZSB0YXJnZXQgZGF0YSBzZXQuXG4gICAqL1xuICBzdG9wKCk6IHRoaXM7XG59XG5cbi8qKlxuICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCB0eXBlIERhdGFQaXBlRmFjdG9yeSA9IEluc3RhbmNlVHlwZTx0eXBlb2YgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbj47XG5cbi8qKlxuICogQ3JlYXRlIG5ldyBkYXRhIHBpcGUuXG4gKlxuICogQHBhcmFtIGZyb20gLSBUaGUgc291cmNlIGRhdGEgc2V0IG9yIGRhdGEgdmlldy5cbiAqIEByZW1hcmtzXG4gKiBFeGFtcGxlIHVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogaW50ZXJmYWNlIEFwcEl0ZW0ge1xuICogICB3aG9hbWk6IHN0cmluZztcbiAqICAgYXBwRGF0YTogdW5rbm93bjtcbiAqICAgdmlzRGF0YTogVmlzSXRlbTtcbiAqIH1cbiAqIGludGVyZmFjZSBWaXNJdGVtIHtcbiAqICAgaWQ6IG51bWJlcjtcbiAqICAgbGFiZWw6IHN0cmluZztcbiAqICAgY29sb3I6IHN0cmluZztcbiAqICAgeDogbnVtYmVyO1xuICogICB5OiBudW1iZXI7XG4gKiB9XG4gKlxuICogY29uc3QgZHMxID0gbmV3IERhdGFTZXQ8QXBwSXRlbSwgXCJ3aG9hbWlcIj4oW10sIHsgZmllbGRJZDogXCJ3aG9hbWlcIiB9KTtcbiAqIGNvbnN0IGRzMiA9IG5ldyBEYXRhU2V0PFZpc0l0ZW0sIFwiaWRcIj4oKTtcbiAqXG4gKiBjb25zdCBwaXBlID0gY3JlYXRlTmV3RGF0YVBpcGVGcm9tKGRzMSlcbiAqICAgLmZpbHRlcigoaXRlbSk6IGJvb2xlYW4gPT4gaXRlbS5lbmFibGVkID09PSB0cnVlKVxuICogICAubWFwPFZpc0l0ZW0sIFwiaWRcIj4oKGl0ZW0pOiBWaXNJdGVtID0+IGl0ZW0udmlzRGF0YSlcbiAqICAgLnRvKGRzMik7XG4gKlxuICogcGlwZS5zdGFydCgpO1xuICogYGBgXG4gKiBAcmV0dXJucyBBIGZhY3Rvcnkgd2hvc2UgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHBpcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdEYXRhUGlwZUZyb208XG4gIFNJIGV4dGVuZHMgUGFydEl0ZW08U1A+LFxuICBTUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIlxuPihmcm9tOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pOiBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFNJLCBTUD4ge1xuICByZXR1cm4gbmV3IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb24oZnJvbSk7XG59XG5cbnR5cGUgVHJhbnNmb3JtZXI8VD4gPSAoaW5wdXQ6IFRbXSkgPT4gVFtdO1xuXG4vKipcbiAqIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwaXBlLiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlIG9ubHkgdGhyb3VnaFxuICogYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFNJIC0gU291cmNlIGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gU1AgLSBTb3VyY2UgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICogQHR5cGVQYXJhbSBUUCAtIFRhcmdldCBpdGVtIHR5cGUncyBpZCBwcm9wZXJ0eSBuYW1lLlxuICovXG5jbGFzcyBTaW1wbGVEYXRhUGlwZTxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nLFxuICBUSSBleHRlbmRzIFBhcnRJdGVtPFRQPixcbiAgVFAgZXh0ZW5kcyBzdHJpbmdcbj4gaW1wbGVtZW50cyBEYXRhUGlwZVxue1xuICAvKipcbiAgICogQm91bmQgbGlzdGVuZXJzIGZvciB1c2Ugd2l0aCBgRGF0YUludGVyZmFjZVsnb24nIHwgJ29mZiddYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogRXZlbnRDYWxsYmFja3M8U0ksIFNQPiA9IHtcbiAgICBhZGQ6IHRoaXMuX2FkZC5iaW5kKHRoaXMpLFxuICAgIHJlbW92ZTogdGhpcy5fcmVtb3ZlLmJpbmQodGhpcyksXG4gICAgdXBkYXRlOiB0aGlzLl91cGRhdGUuYmluZCh0aGlzKSxcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZS5cbiAgICpcbiAgICogQHBhcmFtIF9zb3VyY2UgLSBUaGUgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IHRoYXQgd2lsbCBiZSBvYnNlcnZlZC5cbiAgICogQHBhcmFtIF90cmFuc2Zvcm1lcnMgLSBBbiBhcnJheSBvZiB0cmFuc2Zvcm1pbmcgZnVuY3Rpb25zIHRvIGJlIHVzZWQgdG9cbiAgICogZmlsdGVyIG9yIHRyYW5zZm9ybSB0aGUgaXRlbXMgaW4gdGhlIHBpcGUuXG4gICAqIEBwYXJhbSBfdGFyZ2V0IC0gVGhlIGRhdGEgc2V0IG9yIGRhdGEgdmlldyB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiByZWFkb25seSBUcmFuc2Zvcm1lcjx1bmtub3duPltdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhcmdldDogRGF0YVNldDxUSSwgVFA+XG4gICkge31cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGFsbCgpOiB0aGlzIHtcbiAgICB0aGlzLl90YXJnZXQudXBkYXRlKHRoaXMuX3RyYW5zZm9ybUl0ZW1zKHRoaXMuX3NvdXJjZS5nZXQoKSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdGFydCgpOiB0aGlzIHtcbiAgICB0aGlzLl9zb3VyY2Uub24oXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9uKFwicmVtb3ZlXCIsIHRoaXMuX2xpc3RlbmVycy5yZW1vdmUpO1xuICAgIHRoaXMuX3NvdXJjZS5vbihcInVwZGF0ZVwiLCB0aGlzLl9saXN0ZW5lcnMudXBkYXRlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdG9wKCk6IHRoaXMge1xuICAgIHRoaXMuX3NvdXJjZS5vZmYoXCJhZGRcIiwgdGhpcy5fbGlzdGVuZXJzLmFkZCk7XG4gICAgdGhpcy5fc291cmNlLm9mZihcInJlbW92ZVwiLCB0aGlzLl9saXN0ZW5lcnMucmVtb3ZlKTtcbiAgICB0aGlzLl9zb3VyY2Uub2ZmKFwidXBkYXRlXCIsIHRoaXMuX2xpc3RlbmVycy51cGRhdGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdGhlIHRyYW5zZm9ybWVycyB0byB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyAtIFRoZSBpdGVtcyB0byBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdHJhbnNmb3JtSXRlbXMoaXRlbXM6IHVua25vd25bXSk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtZXJzLnJlZHVjZSgoaXRlbXMsIHRyYW5zZm9ybSk6IHVua25vd25bXSA9PiB7XG4gICAgICByZXR1cm4gdHJhbnNmb3JtKGl0ZW1zKTtcbiAgICB9LCBpdGVtcyk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGFkZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBpZHMgb2YgdGhlIGFkZGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJhZGRcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcImFkZFwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5hZGQodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhbiB1cGRhdGUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBfbmFtZSAtIElnbm9yZWQuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgaWRzIG9mIHRoZSB1cGRhdGVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJ1cGRhdGVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInVwZGF0ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC51cGRhdGUodGhpcy5fdHJhbnNmb3JtSXRlbXModGhpcy5fc291cmNlLmdldChwYXlsb2FkLml0ZW1zKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhIHJlbW92ZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIF9uYW1lIC0gSWdub3JlZC5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBkYXRhIG9mIHRoZSByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVtb3ZlKFxuICAgIF9uYW1lOiBQYXJhbWV0ZXJzPEV2ZW50Q2FsbGJhY2tzPFNJLCBTUD5bXCJyZW1vdmVcIl0+WzBdLFxuICAgIHBheWxvYWQ6IFBhcmFtZXRlcnM8RXZlbnRDYWxsYmFja3M8U0ksIFNQPltcInJlbW92ZVwiXT5bMV1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHBheWxvYWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RhcmdldC5yZW1vdmUodGhpcy5fdHJhbnNmb3JtSXRlbXMocGF5bG9hZC5vbGREYXRhKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGlwZSBmYWN0b3J5LiBUaGlzIHNob3VsZCBiZSBhY2Nlc3NpYmxlXG4gKiBvbmx5IHRocm91Z2ggYGNyZWF0ZU5ld0RhdGFQaXBlRnJvbWAgZnJvbSB0aGUgb3V0c2lkZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRJIC0gVGFyZ2V0IGl0ZW0gdHlwZS5cbiAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAqL1xuY2xhc3MgRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxcbiAgU0kgZXh0ZW5kcyBQYXJ0SXRlbTxTUD4sXG4gIFNQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+IHtcbiAgLyoqXG4gICAqIEFycmF5IHRyYW5zZm9ybWVycyB1c2VkIHRvIHRyYW5zZm9ybSBpdGVtcyB3aXRoaW4gdGhlIHBpcGUuIFRoaXMgaXMgdHlwZWRcbiAgICogYXMgYW55IGZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXJzOiBUcmFuc2Zvcm1lcjxhbnk+W10gPSBbXTtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgcGlwZSBmYWN0b3J5LiBUaGlzIGlzIGFuIGludGVybmFsIGNvbnN0cnVjdG9yIHRoYXRcbiAgICogc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgb2YgdGhpcyBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gX3NvdXJjZSAtIFRoZSBzb3VyY2UgZGF0YSBzZXQgb3IgZGF0YSB2aWV3IGZvciB0aGlzIHBpcGUuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfc291cmNlOiBEYXRhSW50ZXJmYWNlPFNJLCBTUD4pIHt9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgZmlsdGVyaW5nIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIGdpdmVuIGl0ZW1cbiAgICogc2hvdWxkIGJlIHBpcGVkIGFuZCBmYWxzZSBpZiBub3QuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZpbHRlcihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBib29sZWFuXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248U0ksIFNQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZpbHRlcihjYWxsYmFjaykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBlYWNoIHNvdXJjZSBpdGVtIHRvIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbS5cbiAgICogQHR5cGVQYXJhbSBUSSAtIFRhcmdldCBpdGVtIHR5cGUuXG4gICAqIEB0eXBlUGFyYW0gVFAgLSBUYXJnZXQgaXRlbSB0eXBlJ3MgaWQgcHJvcGVydHkgbmFtZS5cbiAgICogQHJldHVybnMgVGhpcyBmYWN0b3J5IGZvciBmdXJ0aGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgbWFwPFRJIGV4dGVuZHMgUGFydEl0ZW08VFA+LCBUUCBleHRlbmRzIHN0cmluZyA9IFwiaWRcIj4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBTSSkgPT4gVElcbiAgKTogRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbjxUSSwgVFA+IHtcbiAgICB0aGlzLl90cmFuc2Zvcm1lcnMucHVzaCgoaW5wdXQpOiB1bmtub3duW10gPT4gaW5wdXQubWFwKGNhbGxiYWNrKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uPFRJLCBUUD47XG4gIH1cblxuICAvKipcbiAgICogTWFwIGVhY2ggc291cmNlIGl0ZW0gdG8gemVybyBvciBtb3JlIGl0ZW1zIG9mIGEgbmV3IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgbWFwcGluZyBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc291cmNlIGl0ZW0gYW5kIHJldHVybnNcbiAgICogYW4gYXJyYXkgb2YgY29ycmVzcG9uZGluZyBtYXBwZWQgaXRlbXMuXG4gICAqIEB0eXBlUGFyYW0gVEkgLSBUYXJnZXQgaXRlbSB0eXBlLlxuICAgKiBAdHlwZVBhcmFtIFRQIC0gVGFyZ2V0IGl0ZW0gdHlwZSdzIGlkIHByb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm5zIFRoaXMgZmFjdG9yeSBmb3IgZnVydGhlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGZsYXRNYXA8VEkgZXh0ZW5kcyBQYXJ0SXRlbTxUUD4sIFRQIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiPihcbiAgICBjYWxsYmFjazogKGl0ZW06IFNJKSA9PiBUSVtdXG4gICk6IERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPiB7XG4gICAgdGhpcy5fdHJhbnNmb3JtZXJzLnB1c2goKGlucHV0KTogdW5rbm93bltdID0+IGlucHV0LmZsYXRNYXAoY2FsbGJhY2spKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIERhdGFQaXBlVW5kZXJDb25zdHJ1Y3Rpb248VEksIFRQPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IHRoaXMgcGlwZSB0byBnaXZlbiBkYXRhIHNldC5cbiAgICpcbiAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBkYXRhIHNldCB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaXRlbXMgZnJvbSB0aGlzIHBpcGUuXG4gICAqIEByZXR1cm5zIFRoZSBwaXBlIGNvbm5lY3RlZCBiZXR3ZWVuIGdpdmVuIGRhdGEgc2V0cyBhbmQgcGVyZm9ybWluZ1xuICAgKiBjb25maWd1cmVkIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSBwcm9jZXNzZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgdG8odGFyZ2V0OiBEYXRhU2V0PFNJLCBTUD4pOiBEYXRhUGlwZSB7XG4gICAgcmV0dXJuIG5ldyBTaW1wbGVEYXRhUGlwZSh0aGlzLl9zb3VyY2UsIHRoaXMuX3RyYW5zZm9ybWVycywgdGFyZ2V0KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gY2FsbChpbm5lclJlc3VsdCwgaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG4vLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBFTlRSSUVTKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEVOVFJJRVMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZyb20nKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmZyb207XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9hcnJheS9mcm9tXCIpOyIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Z1bGwvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yTWV0aG9kO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9nZXQtaXRlcmF0b3ItbWV0aG9kXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbi8vIGBBcnJheS5pc0FycmF5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuaXNhcnJheVxuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzQXJyYXk6IGlzQXJyYXlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXMtYXJyYXknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLkFycmF5LmlzQXJyYXk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2FycmF5L2lzLWFycmF5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvYXJyYXkvaXMtYXJyYXknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBTYWZhcmkgPCAxMyBkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpbiB0aGlzIGNhc2VcbnZhciBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPSBERVNDUklQVE9SUyAmJiAhZnVuY3Rpb24gKCkge1xuICAvLyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IHByb3BlciBzdHJpY3QgbW9kZSBzdXBwb3J0XG4gIGlmICh0aGlzICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLmxlbmd0aCA9IDE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID8gZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICBpZiAoaXNBcnJheShPKSAmJiAhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sICdsZW5ndGgnKS53cml0YWJsZSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoJyk7XG4gIH0gcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufSA6IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBJTkNPUlJFQ1RfVE9fTEVOR1RIID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW10ucHVzaC5jYWxsKHsgbGVuZ3RoOiAweDEwMDAwMDAwMCB9LCAxKSAhPT0gNDI5NDk2NzI5Nztcbn0pO1xuXG4vLyBWOCBhbmQgU2FmYXJpIDw9IDE1LjQsIEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnB1c2gnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAncHVzaCcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3B1c2gnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQucHVzaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucHVzaCkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9pbnN0YW5jZS9wdXNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBuYXRpdmVTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc2xpY2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zbGljZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5zbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc2xpY2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL3NsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2FycmF5L2Zyb20nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59IiwgImltcG9ydCBfc2xpY2VJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanNcIjtcbmltcG9ydCBfQXJyYXkkZnJvbSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2Zyb20uanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgdmFyIF9jb250ZXh0O1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IF9zbGljZUluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykpLmNhbGwoX2NvbnRleHQsIDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIF9BcnJheSRmcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCAiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwgImltcG9ydCBfQXJyYXkkaXNBcnJheSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2FycmF5L2lzLWFycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChfQXJyYXkkaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsICJpbXBvcnQgX1N5bWJvbCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiO1xuaW1wb3J0IF9nZXRJdGVyYXRvck1ldGhvZCBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2dldC1pdGVyYXRvci1tZXRob2QuanNcIjtcbmltcG9ydCBfcHVzaEluc3RhbmNlUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9wdXNoLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkge1xuICB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBfU3ltYm9sICYmIF9nZXRJdGVyYXRvck1ldGhvZChyKSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShhKS5jYWxsKGEsIGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgbyA9ICEwLCBuID0gcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmICYmIG51bGwgIT0gdFtcInJldHVyblwiXSAmJiAodSA9IHRbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG8pIHRocm93IG47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgImltcG9ydCBhcnJheVdpdGhvdXRIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlU3ByZWFkIGZyb20gXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn0iLCAiaW1wb3J0IF9BcnJheSRpc0FycmF5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvaXMtYXJyYXkuanNcIjtcbmltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKF9BcnJheSRpc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59IiwgImltcG9ydCBfU3ltYm9sIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvc3ltYm9sL2luZGV4LmpzXCI7XG5pbXBvcnQgX2dldEl0ZXJhdG9yTWV0aG9kIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiO1xuaW1wb3J0IF9BcnJheSRmcm9tIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvYXJyYXkvZnJvbS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgX1N5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBfZ2V0SXRlcmF0b3JNZXRob2QoaXRlcikgIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gX0FycmF5JGZyb20oaXRlcik7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvc3ltYm9sXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdjb25jYXQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9jb25jYXQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuY29uY2F0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5jb25jYXQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3NsaWNlXCIpOyIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG5cbi8vIGBSZWZsZWN0Lm93bktleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0Lm93bmtleXNcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIG93bktleXM6IG93bktleXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucmVmbGVjdC5vd24ta2V5cycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguUmVmbGVjdC5vd25LZXlzO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvaXMtYXJyYXlcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmtleXMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXRoLk9iamVjdC5rZXlzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2ZvckVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbm1vZHVsZS5leHBvcnRzID0gIVNUUklDVF9NRVRIT0QgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWZvcmVhY2ggLS0gc2FmZVxufSA6IFtdLmZvckVhY2g7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT09IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2ZvckVhY2gnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2gnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuZm9yRWFjaClcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2hcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyIG5hdGl2ZVJldmVyc2UgPSB1bmN1cnJ5VGhpcyhbXS5yZXZlcnNlKTtcbnZhciB0ZXN0ID0gWzEsIDJdO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJldmVyc2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmV2ZXJzZVxuLy8gZml4IGZvciBTYWZhcmkgMTIuMCBidWdcbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg3OTRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFN0cmluZyh0ZXN0KSA9PT0gU3RyaW5nKHRlc3QucmV2ZXJzZSgpKSB9LCB7XG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduIC0tIGRpcnR5IGhhY2tcbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZSh0aGlzKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3JldmVyc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZXZlcnNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJldmVyc2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJldmVyc2UpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmV2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3JldmVyc2VcIik7IiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NwbGljZScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc3BsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNwbGljZVxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc3BsaWNlOiBmdW5jdGlvbiBzcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50IC8qICwgLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYWN0dWFsU3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGluc2VydENvdW50LCBhY3R1YWxEZWxldGVDb3VudCwgQSwgaywgZnJvbSwgdG87XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMCkge1xuICAgICAgaW5zZXJ0Q291bnQgPSBhY3R1YWxEZWxldGVDb3VudCA9IDA7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDEpIHtcbiAgICAgIGluc2VydENvdW50ID0gMDtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbGVuIC0gYWN0dWFsU3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc2VydENvdW50ID0gYXJndW1lbnRzTGVuZ3RoIC0gMjtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbWluKG1heCh0b0ludGVnZXJPckluZmluaXR5KGRlbGV0ZUNvdW50KSwgMCksIGxlbiAtIGFjdHVhbFN0YXJ0KTtcbiAgICB9XG4gICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKGxlbiArIGluc2VydENvdW50IC0gYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIGZvciAoayA9IDA7IGsgPCBhY3R1YWxEZWxldGVDb3VudDsgaysrKSB7XG4gICAgICBmcm9tID0gYWN0dWFsU3RhcnQgKyBrO1xuICAgICAgaWYgKGZyb20gaW4gTykgY3JlYXRlUHJvcGVydHkoQSwgaywgT1tmcm9tXSk7XG4gICAgfVxuICAgIEEubGVuZ3RoID0gYWN0dWFsRGVsZXRlQ291bnQ7XG4gICAgaWYgKGluc2VydENvdW50IDwgYWN0dWFsRGVsZXRlQ291bnQpIHtcbiAgICAgIGZvciAoayA9IGFjdHVhbFN0YXJ0OyBrIDwgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgICBmcm9tID0gayArIGFjdHVhbERlbGV0ZUNvdW50O1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudDtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgICBmb3IgKGsgPSBsZW47IGsgPiBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50OyBrLS0pIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCBrIC0gMSk7XG4gICAgfSBlbHNlIGlmIChpbnNlcnRDb3VudCA+IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBsZW4gLSBhY3R1YWxEZWxldGVDb3VudDsgayA+IGFjdHVhbFN0YXJ0OyBrLS0pIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudCAtIDE7XG4gICAgICAgIHRvID0gayArIGluc2VydENvdW50IC0gMTtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IDA7IGsgPCBpbnNlcnRDb3VudDsgaysrKSB7XG4gICAgICBPW2sgKyBhY3R1YWxTdGFydF0gPSBhcmd1bWVudHNbayArIDJdO1xuICAgIH1cbiAgICBzZXRBcnJheUxlbmd0aChPLCBsZW4gLSBhY3R1YWxEZWxldGVDb3VudCArIGluc2VydENvdW50KTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc3BsaWNlJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc3BsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNwbGljZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc3BsaWNlKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gc2FmZVxudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHNob3VsZCBoYXZlIGNvcnJlY3Qgb3JkZXIgb2Ygb3BlcmF0aW9ucyAoRWRnZSBidWcpXG4gIGlmIChERVNDUklQVE9SUyAmJiAkYXNzaWduKHsgYjogMSB9LCAkYXNzaWduKGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgJ2InLCB7XG4gICAgICAgIHZhbHVlOiAzLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9KSwgeyBiOiAyIH0pKS5iICE9PSAxKSByZXR1cm4gdHJ1ZTtcbiAgLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zeW1ib2wgLS0gc2FmZVxuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdhc3NpZ24gZGV0ZWN0aW9uJyk7XG4gIHZhciBhbHBoYWJldCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbc3ltYm9sXSA9IDc7XG4gIGFscGhhYmV0LnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChjaHIpIHsgQltjaHJdID0gY2hyOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW3N5bWJvbF0gIT09IDcgfHwgb2JqZWN0S2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT09IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQob2JqZWN0S2V5cyhTKSwgZ2V0T3duUHJvcGVydHlTeW1ib2xzKFMpKSA6IG9iamVjdEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGNhbGwocHJvcGVydHlJc0VudW1lcmFibGUsIFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgYXJpdHk6IDIsIGZvcmNlZDogT2JqZWN0LmFzc2lnbiAhPT0gYXNzaWduIH0sIHtcbiAgYXNzaWduOiBhc3NpZ25cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmFzc2lnbjtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LXByb3RvdHlwZS1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBjcmVhdGU6IGNyZWF0ZVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShQLCBEKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9vYmplY3QvY3JlYXRlXCIpOyIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWpzb24gLS0gc2FmZVxuaWYgKCFwYXRoLkpTT04pIHBhdGguSlNPTiA9IHsgc3RyaW5naWZ5OiBKU09OLnN0cmluZ2lmeSB9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICByZXR1cm4gYXBwbHkocGF0aC5KU09OLnN0cmluZ2lmeSwgbnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2pzb24vc3RyaW5naWZ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBCdW4gPT0gJ2Z1bmN0aW9uJyAmJiBCdW4gJiYgdHlwZW9mIEJ1bi52ZXJzaW9uID09ICdzdHJpbmcnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgRU5HSU5FX0lTX0JVTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnVuJyk7XG52YXIgVVNFUl9BR0VOVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG5cbnZhciBGdW5jdGlvbiA9IGdsb2JhbC5GdW5jdGlvbjtcbi8vIGRpcnR5IElFOS0gYW5kIEJ1biAwLjMuMC0gY2hlY2tzXG52YXIgV1JBUCA9IC9NU0lFIC5cXC4vLnRlc3QoVVNFUl9BR0VOVCkgfHwgRU5HSU5FX0lTX0JVTiAmJiAoZnVuY3Rpb24gKCkge1xuICB2YXIgdmVyc2lvbiA9IGdsb2JhbC5CdW4udmVyc2lvbi5zcGxpdCgnLicpO1xuICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPCAzIHx8IHZlcnNpb25bMF0gPT09ICcwJyAmJiAodmVyc2lvblsxXSA8IDMgfHwgdmVyc2lvblsxXSA9PT0gJzMnICYmIHZlcnNpb25bMl0gPT09ICcwJyk7XG59KSgpO1xuXG4vLyBJRTktIC8gQnVuIDAuMy4wLSBzZXRUaW1lb3V0IC8gc2V0SW50ZXJ2YWwgLyBzZXRJbW1lZGlhdGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCN0aW1lcnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9pc3N1ZXMvMTYzM1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBoYXNUaW1lQXJnKSB7XG4gIHZhciBmaXJzdFBhcmFtSW5kZXggPSBoYXNUaW1lQXJnID8gMiA6IDE7XG4gIHJldHVybiBXUkFQID8gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSkgPiBmaXJzdFBhcmFtSW5kZXg7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgcGFyYW1zID0gYm91bmRBcmdzID8gYXJyYXlTbGljZShhcmd1bWVudHMsIGZpcnN0UGFyYW1JbmRleCkgOiBbXTtcbiAgICB2YXIgY2FsbGJhY2sgPSBib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdGhpcywgcGFyYW1zKTtcbiAgICB9IDogZm47XG4gICAgcmV0dXJuIGhhc1RpbWVBcmcgPyBzY2hlZHVsZXIoY2FsbGJhY2ssIHRpbWVvdXQpIDogc2NoZWR1bGVyKGNhbGxiYWNrKTtcbiAgfSA6IHNjaGVkdWxlcjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxudmFyIHNldEludGVydmFsID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0SW50ZXJ2YWwsIHRydWUpO1xuXG4vLyBCdW4gLyBJRTktIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldGludGVydmFsXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRJbnRlcnZhbCAhPT0gc2V0SW50ZXJ2YWwgfSwge1xuICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWxcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzY2hlZHVsZXJzRml4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NjaGVkdWxlcnMtZml4Jyk7XG5cbnZhciBzZXRUaW1lb3V0ID0gc2NoZWR1bGVyc0ZpeChnbG9iYWwuc2V0VGltZW91dCwgdHJ1ZSk7XG5cbi8vIEJ1biAvIElFOS0gc2V0VGltZW91dCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5zZXRUaW1lb3V0ICE9PSBzZXRUaW1lb3V0IH0sIHtcbiAgc2V0VGltZW91dDogc2V0VGltZW91dFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5zZXRUaW1lb3V0O1xuIiwgImZ1bmN0aW9uIEVtaXR0ZXIob2JqZWN0KSB7XG5cdGlmIChvYmplY3QpIHtcblx0XHRyZXR1cm4gbWl4aW4ob2JqZWN0KTtcblx0fVxuXG5cdHRoaXMuX2NhbGxiYWNrcyA9IG5ldyBNYXAoKTtcbn1cblxuZnVuY3Rpb24gbWl4aW4ob2JqZWN0KSB7XG5cdE9iamVjdC5hc3NpZ24ob2JqZWN0LCBFbWl0dGVyLnByb3RvdHlwZSk7XG5cdG9iamVjdC5fY2FsbGJhY2tzID0gbmV3IE1hcCgpO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG5FbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIChldmVudCwgbGlzdGVuZXIpIHtcblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCkgPz8gW107XG5cdGNhbGxiYWNrcy5wdXNoKGxpc3RlbmVyKTtcblx0dGhpcy5fY2FsbGJhY2tzLnNldChldmVudCwgY2FsbGJhY2tzKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRjb25zdCBvbiA9ICguLi5hcmd1bWVudHNfKSA9PiB7XG5cdFx0dGhpcy5vZmYoZXZlbnQsIG9uKTtcblx0XHRsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHNfKTtcblx0fTtcblxuXHRvbi5mbiA9IGxpc3RlbmVyO1xuXHR0aGlzLm9uKGV2ZW50LCBvbik7XG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBsaXN0ZW5lcikge1xuXHRpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCAmJiBsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5fY2FsbGJhY2tzLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2NhbGxiYWNrcy5kZWxldGUoZXZlbnQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzLmdldChldmVudCk7XG5cdGlmIChjYWxsYmFja3MpIHtcblx0XHRmb3IgKGNvbnN0IFtpbmRleCwgY2FsbGJhY2tdIG9mIGNhbGxiYWNrcy5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChjYWxsYmFjayA9PT0gbGlzdGVuZXIgfHwgY2FsbGJhY2suZm4gPT09IGxpc3RlbmVyKSB7XG5cdFx0XHRcdGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoY2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5fY2FsbGJhY2tzLmRlbGV0ZShldmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2NhbGxiYWNrcy5zZXQoZXZlbnQsIGNhbGxiYWNrcyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2ZW50LCAuLi5hcmd1bWVudHNfKSB7XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcy5nZXQoZXZlbnQpO1xuXHRpZiAoY2FsbGJhY2tzKSB7XG5cdFx0Ly8gQ3JlYXRlIGEgY29weSBvZiB0aGUgY2FsbGJhY2tzIGFycmF5IHRvIGF2b2lkIGlzc3VlcyBpZiBpdCdzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb25cblx0XHRjb25zdCBjYWxsYmFja3NDb3B5ID0gWy4uLmNhbGxiYWNrc107XG5cblx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrc0NvcHkpIHtcblx0XHRcdGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50c18pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLl9jYWxsYmFja3MuZ2V0KGV2ZW50KSA/PyBbXTtcbn07XG5cbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0aWYgKGV2ZW50KSB7XG5cdFx0cmV0dXJuIHRoaXMubGlzdGVuZXJzKGV2ZW50KS5sZW5ndGg7XG5cdH1cblxuXHRsZXQgdG90YWxDb3VudCA9IDA7XG5cdGZvciAoY29uc3QgY2FsbGJhY2tzIG9mIHRoaXMuX2NhbGxiYWNrcy52YWx1ZXMoKSkge1xuXHRcdHRvdGFsQ291bnQgKz0gY2FsbGJhY2tzLmxlbmd0aDtcblx0fVxuXG5cdHJldHVybiB0b3RhbENvdW50O1xufTtcblxuRW1pdHRlci5wcm90b3R5cGUuaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdHJldHVybiB0aGlzLmxpc3RlbmVyQ291bnQoZXZlbnQpID4gMDtcbn07XG5cbi8vIEFsaWFzZXNcbkVtaXR0ZXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFbWl0dGVyLnByb3RvdHlwZS5vbjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gRW1pdHRlci5wcm90b3R5cGUub2ZmO1xuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IEVtaXR0ZXIucHJvdG90eXBlLm9mZjtcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gRW1pdHRlcjtcbn1cbiIsICIvKiEgSGFtbWVyLkpTIC0gdjIuMC4xNy1yYyAtIDIwMTktMTItMTZcbiAqIGh0dHA6Ly9uYXZlci5naXRodWIuaW8vZWdqc1xuICpcbiAqIEZvcmtlZCBCeSBOYXZlciBlZ2pzXG4gKiBDb3B5cmlnaHQgKGMpIGhhbW1lcmpzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKi9cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldFxuICogQHBhcmFtIHsuLi5PYmplY3R9IG9iamVjdHNfdG9fYXNzaWduXG4gKiBAcmV0dXJucyB7T2JqZWN0fSB0YXJnZXRcbiAqL1xudmFyIGFzc2lnbjtcblxuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcbiAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0gT2JqZWN0KHRhcmdldCk7XG5cbiAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgYXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF07XG5cbiAgICAgIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5leHRLZXkpKSB7XG4gICAgICAgICAgICBvdXRwdXRbbmV4dEtleV0gPSBzb3VyY2VbbmV4dEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfTtcbn0gZWxzZSB7XG4gIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbnZhciBhc3NpZ24kMSA9IGFzc2lnbjtcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IHtcbiAgc3R5bGU6IHt9XG59IDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG52YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgIGFicyA9IE1hdGguYWJzO1xudmFyIG5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgdGhlIHByZWZpeGVkIHByb3BlcnR5XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlcbiAqIEByZXR1cm5zIHtTdHJpbmd8VW5kZWZpbmVkfSBwcmVmaXhlZFxuICovXG5cbmZ1bmN0aW9uIHByZWZpeGVkKG9iaiwgcHJvcGVydHkpIHtcbiAgdmFyIHByZWZpeDtcbiAgdmFyIHByb3A7XG4gIHZhciBjYW1lbFByb3AgPSBwcm9wZXJ0eVswXS50b1VwcGVyQ2FzZSgpICsgcHJvcGVydHkuc2xpY2UoMSk7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICBwcmVmaXggPSBWRU5ET1JfUFJFRklYRVNbaV07XG4gICAgcHJvcCA9IHByZWZpeCA/IHByZWZpeCArIGNhbWVsUHJvcCA6IHByb3BlcnR5O1xuXG4gICAgaWYgKHByb3AgaW4gb2JqKSB7XG4gICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG5cbiAgICBpKys7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXctZnVuYywgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbnZhciB3aW47XG5cbmlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gIC8vIHdpbmRvdyBpcyB1bmRlZmluZWQgaW4gbm9kZS5qc1xuICB3aW4gPSB7fTtcbn0gZWxzZSB7XG4gIHdpbiA9IHdpbmRvdztcbn1cblxudmFyIFBSRUZJWEVEX1RPVUNIX0FDVElPTiA9IHByZWZpeGVkKFRFU1RfRUxFTUVOVC5zdHlsZSwgJ3RvdWNoQWN0aW9uJyk7XG52YXIgTkFUSVZFX1RPVUNIX0FDVElPTiA9IFBSRUZJWEVEX1RPVUNIX0FDVElPTiAhPT0gdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0VG91Y2hBY3Rpb25Qcm9wcygpIHtcbiAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRvdWNoTWFwID0ge307XG4gIHZhciBjc3NTdXBwb3J0cyA9IHdpbi5DU1MgJiYgd2luLkNTUy5zdXBwb3J0cztcbiAgWydhdXRvJywgJ21hbmlwdWxhdGlvbicsICdwYW4teScsICdwYW4teCcsICdwYW4teCBwYW4teScsICdub25lJ10uZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgLy8gYWxsIHZhbHVlcy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgSUUgMTAgYW5kIDExLlxuICAgIHJldHVybiB0b3VjaE1hcFt2YWxdID0gY3NzU3VwcG9ydHMgPyB3aW4uQ1NTLnN1cHBvcnRzKCd0b3VjaC1hY3Rpb24nLCB2YWwpIDogdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiB0b3VjaE1hcDtcbn1cblxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG5cbnZhciBUT1VDSF9BQ1RJT05fTk9ORSA9ICdub25lJztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1ggPSAncGFuLXgnO1xudmFyIFRPVUNIX0FDVElPTl9QQU5fWSA9ICdwYW4teSc7XG52YXIgVE9VQ0hfQUNUSU9OX01BUCA9IGdldFRvdWNoQWN0aW9uUHJvcHMoKTtcblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcbnZhciBTVVBQT1JUX1RPVUNIID0gJ29udG91Y2hzdGFydCcgaW4gd2luO1xudmFyIFNVUFBPUlRfUE9JTlRFUl9FVkVOVFMgPSBwcmVmaXhlZCh3aW4sICdQb2ludGVyRXZlbnQnKSAhPT0gdW5kZWZpbmVkO1xudmFyIFNVUFBPUlRfT05MWV9UT1VDSCA9IFNVUFBPUlRfVE9VQ0ggJiYgTU9CSUxFX1JFR0VYLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xudmFyIENPTVBVVEVfSU5URVJWQUwgPSAyNTtcbnZhciBJTlBVVF9TVEFSVCA9IDE7XG52YXIgSU5QVVRfTU9WRSA9IDI7XG52YXIgSU5QVVRfRU5EID0gNDtcbnZhciBJTlBVVF9DQU5DRUwgPSA4O1xudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG52YXIgRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fTEVGVCB8IERJUkVDVElPTl9SSUdIVDtcbnZhciBESVJFQ1RJT05fVkVSVElDQUwgPSBESVJFQ1RJT05fVVAgfCBESVJFQ1RJT05fRE9XTjtcbnZhciBESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUw7XG52YXIgUFJPUFNfWFkgPSBbJ3gnLCAneSddO1xudmFyIFBST1BTX0NMSUVOVF9YWSA9IFsnY2xpZW50WCcsICdjbGllbnRZJ107XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdhbGsgb2JqZWN0cyBhbmQgYXJyYXlzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG4gIHZhciBpO1xuXG4gIGlmICghb2JqKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9iai5mb3JFYWNoKSB7XG4gICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xuICB9IGVsc2UgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBvYmoubGVuZ3RoKSB7XG4gICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpIGluIG9iaikge1xuICAgICAgb2JqLmhhc093blByb3BlcnR5KGkpICYmIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBsZXQgYSBib29sZWFuIHZhbHVlIGFsc28gYmUgYSBmdW5jdGlvbiB0aGF0IG11c3QgcmV0dXJuIGEgYm9vbGVhblxuICogdGhpcyBmaXJzdCBpdGVtIGluIGFyZ3Mgd2lsbCBiZSB1c2VkIGFzIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IHZhbFxuICogQHBhcmFtIHtBcnJheX0gW2FyZ3NdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFRZUEVfRlVOQ1RJT04pIHtcbiAgICByZXR1cm4gdmFsLmFwcGx5KGFyZ3MgPyBhcmdzWzBdIHx8IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzbWFsbCBpbmRleE9mIHdyYXBwZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmaW5kXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gZm91bmRcbiAqL1xuZnVuY3Rpb24gaW5TdHIoc3RyLCBmaW5kKSB7XG4gIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiB3aGVuIHRoZSB0b3VjaEFjdGlvbnMgYXJlIGNvbGxlY3RlZCB0aGV5IGFyZSBub3QgYSB2YWxpZCB2YWx1ZSwgc28gd2UgbmVlZCB0byBjbGVhbiB0aGluZ3MgdXAuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuXG5mdW5jdGlvbiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zKSB7XG4gIC8vIG5vbmVcbiAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTk9ORTtcbiAgfVxuXG4gIHZhciBoYXNQYW5YID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9YKTtcbiAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpOyAvLyBpZiBib3RoIHBhbi14IGFuZCBwYW4teSBhcmUgc2V0IChkaWZmZXJlbnQgcmVjb2duaXplcnNcbiAgLy8gZm9yIGRpZmZlcmVudCBkaXJlY3Rpb25zLCBlLmcuIGhvcml6b250YWwgcGFuIGJ1dCB2ZXJ0aWNhbCBzd2lwZT8pXG4gIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAvLyByZWNvZ25pemVycyB3aWxsIHdvcmssIHNpbmNlIHRoZSBicm93c2VyIHdvdWxkIGhhbmRsZSBhbGwgcGFubmluZ1xuXG4gIGlmIChoYXNQYW5YICYmIGhhc1BhblkpIHtcbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gIH0gLy8gcGFuLXggT1IgcGFuLXlcblxuXG4gIGlmIChoYXNQYW5YIHx8IGhhc1BhblkpIHtcbiAgICByZXR1cm4gaGFzUGFuWCA/IFRPVUNIX0FDVElPTl9QQU5fWCA6IFRPVUNIX0FDVElPTl9QQU5fWTtcbiAgfSAvLyBtYW5pcHVsYXRpb25cblxuXG4gIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgIHJldHVybiBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OO1xuICB9XG5cbiAgcmV0dXJuIFRPVUNIX0FDVElPTl9BVVRPO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUb3VjaCBBY3Rpb25cbiAqIHNldHMgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IG9yIHVzZXMgdGhlIGpzIGFsdGVybmF0aXZlXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIFRvdWNoQWN0aW9uID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG91Y2hBY3Rpb24obWFuYWdlciwgdmFsdWUpIHtcbiAgICB0aGlzLm1hbmFnZXIgPSBtYW5hZ2VyO1xuICAgIHRoaXMuc2V0KHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBUb3VjaEFjdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgIC8vIGZpbmQgb3V0IHRoZSB0b3VjaC1hY3Rpb24gYnkgdGhlIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKHZhbHVlID09PSBUT1VDSF9BQ1RJT05fQ09NUFVURSkge1xuICAgICAgdmFsdWUgPSB0aGlzLmNvbXB1dGUoKTtcbiAgICB9XG5cbiAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICoganVzdCByZS1zZXQgdGhlIHRvdWNoQWN0aW9uIHZhbHVlXG4gICAqL1xuXG5cbiAgX3Byb3RvLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjb21wdXRlIHRoZSB2YWx1ZSBmb3IgdGhlIHRvdWNoQWN0aW9uIHByb3BlcnR5IGJhc2VkIG9uIHRoZSByZWNvZ25pemVyJ3Mgc2V0dGluZ3NcbiAgICogQHJldHVybnMge1N0cmluZ30gdmFsdWVcbiAgICovXG5cblxuICBfcHJvdG8uY29tcHV0ZSA9IGZ1bmN0aW9uIGNvbXB1dGUoKSB7XG4gICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICBlYWNoKHRoaXMubWFuYWdlci5yZWNvZ25pemVycywgZnVuY3Rpb24gKHJlY29nbml6ZXIpIHtcbiAgICAgIGlmIChib29sT3JGbihyZWNvZ25pemVyLm9wdGlvbnMuZW5hYmxlLCBbcmVjb2duaXplcl0pKSB7XG4gICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbGVhblRvdWNoQWN0aW9ucyhhY3Rpb25zLmpvaW4oJyAnKSk7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gZWFjaCBpbnB1dCBjeWNsZSBhbmQgcHJvdmlkZXMgdGhlIHByZXZlbnRpbmcgb2YgdGhlIGJyb3dzZXIgYmVoYXZpb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAqL1xuXG5cbiAgX3Byb3RvLnByZXZlbnREZWZhdWx0cyA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhpbnB1dCkge1xuICAgIHZhciBzcmNFdmVudCA9IGlucHV0LnNyY0V2ZW50O1xuICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5vZmZzZXREaXJlY3Rpb247IC8vIGlmIHRoZSB0b3VjaCBhY3Rpb24gZGlkIHByZXZlbnRlZCBvbmNlIHRoaXMgc2Vzc2lvblxuXG4gICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgdmFyIGhhc1BhblkgPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1kpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWV07XG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpICYmICFUT1VDSF9BQ1RJT05fTUFQW1RPVUNIX0FDVElPTl9QQU5fWF07XG5cbiAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgLy8gZG8gbm90IHByZXZlbnQgZGVmYXVsdHMgaWYgdGhpcyBpcyBhIHRhcCBnZXN0dXJlXG4gICAgICB2YXIgaXNUYXBQb2ludGVyID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSAxO1xuICAgICAgdmFyIGlzVGFwTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IDI7XG4gICAgICB2YXIgaXNUYXBUb3VjaFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPCAyNTA7XG5cbiAgICAgIGlmIChpc1RhcFBvaW50ZXIgJiYgaXNUYXBNb3ZlbWVudCAmJiBpc1RhcFRvdWNoVGltZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgLy8gYHBhbi14IHBhbi15YCBtZWFucyBicm93c2VyIGhhbmRsZXMgYWxsIHNjcm9sbGluZy9wYW5uaW5nLCBkbyBub3QgcHJldmVudFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChoYXNOb25lIHx8IGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwgfHwgaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZlbnRTcmMoc3JjRXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGNhbGwgcHJldmVudERlZmF1bHQgdG8gcHJldmVudCB0aGUgYnJvd3NlcidzIGRlZmF1bHQgYmVoYXZpb3IgKHNjcm9sbGluZyBpbiBtb3N0IGNhc2VzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICovXG5cblxuICBfcHJvdG8ucHJldmVudFNyYyA9IGZ1bmN0aW9uIHByZXZlbnRTcmMoc3JjRXZlbnQpIHtcbiAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHNyY0V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoQWN0aW9uO1xufSgpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZ2V0IHRoZSBjZW50ZXIgb2YgYWxsIHRoZSBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gcG9pbnRlcnNcbiAqIEByZXR1cm4ge09iamVjdH0gY2VudGVyIGNvbnRhaW5zIGB4YCBhbmQgYHlgIHByb3BlcnRpZXNcbiAqL1xuXG5mdW5jdGlvbiBnZXRDZW50ZXIocG9pbnRlcnMpIHtcbiAgdmFyIHBvaW50ZXJzTGVuZ3RoID0gcG9pbnRlcnMubGVuZ3RoOyAvLyBubyBuZWVkIHRvIGxvb3Agd2hlbiBvbmx5IG9uZSB0b3VjaFxuXG4gIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgfTtcbiAgfVxuXG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgIHggKz0gcG9pbnRlcnNbaV0uY2xpZW50WDtcbiAgICB5ICs9IHBvaW50ZXJzW2ldLmNsaWVudFk7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4IC8gcG9pbnRlcnNMZW5ndGgpLFxuICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIGEgc2ltcGxlIGNsb25lIGZyb20gdGhlIGlucHV0IHVzZWQgZm9yIHN0b3JhZ2Ugb2YgZmlyc3RJbnB1dCBhbmQgZmlyc3RNdWx0aXBsZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBjbG9uZWRJbnB1dERhdGFcbiAqL1xuXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAvLyBtYWtlIGEgc2ltcGxlIGNvcHkgb2YgdGhlIHBvaW50ZXJzIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgYSByZWZlcmVuY2UgaWYgd2UgZG9uJ3RcbiAgLy8gd2Ugb25seSBuZWVkIGNsaWVudFhZIGZvciB0aGUgY2FsY3VsYXRpb25zXG4gIHZhciBwb2ludGVycyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBpbnB1dC5wb2ludGVycy5sZW5ndGgpIHtcbiAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICB9O1xuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGltZVN0YW1wOiBub3coKSxcbiAgICBwb2ludGVyczogcG9pbnRlcnMsXG4gICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgIGRlbHRhWDogaW5wdXQuZGVsdGFYLFxuICAgIGRlbHRhWTogaW5wdXQuZGVsdGFZXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gcDEge3gsIHl9XG4gKiBAcGFyYW0ge09iamVjdH0gcDIge3gsIHl9XG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpc3RhbmNlXG4gKi9cblxuZnVuY3Rpb24gZ2V0RGlzdGFuY2UocDEsIHAyLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcHJvcHMgPSBQUk9QU19YWTtcbiAgfVxuXG4gIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dO1xuICB2YXIgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSBhbmdsZSBiZXR3ZWVuIHR3byBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IHAxXG4gKiBAcGFyYW0ge09iamVjdH0gcDJcbiAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wc10gY29udGFpbmluZyB4IGFuZCB5IGtleXNcbiAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRBbmdsZShwMSwgcDIsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICBwcm9wcyA9IFBST1BTX1hZO1xuICB9XG5cbiAgdmFyIHggPSBwMltwcm9wc1swXV0gLSBwMVtwcm9wc1swXV07XG4gIHZhciB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KSAqIDE4MCAvIE1hdGguUEk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgZGlyZWN0aW9uIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGRpcmVjdGlvblxuICovXG5cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gIGlmICh4ID09PSB5KSB7XG4gICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICB9XG5cbiAgaWYgKGFicyh4KSA+PSBhYnMoeSkpIHtcbiAgICByZXR1cm4geCA8IDAgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgfVxuXG4gIHJldHVybiB5IDwgMCA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyOyAvLyBsZXQgeyBvZmZzZXREZWx0YTpvZmZzZXQgPSB7fSwgcHJldkRlbHRhID0ge30sIHByZXZJbnB1dCA9IHt9IH0gPSBzZXNzaW9uO1xuICAvLyBqc2NzIHRocm93aW5nIGVycm9yIG9uIGRlZmFsdXQgZGVzdHJ1Y3R1cmVkIHZhbHVlcyBhbmQgd2l0aG91dCBkZWZhdWx0cyB0ZXN0cyBmYWlsXG5cbiAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gIHZhciBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSB8fCB7fTtcbiAgdmFyIHByZXZJbnB1dCA9IHNlc3Npb24ucHJldklucHV0IHx8IHt9O1xuXG4gIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhID0ge1xuICAgICAgeDogcHJldklucHV0LmRlbHRhWCB8fCAwLFxuICAgICAgeTogcHJldklucHV0LmRlbHRhWSB8fCAwXG4gICAgfTtcbiAgICBvZmZzZXQgPSBzZXNzaW9uLm9mZnNldERlbHRhID0ge1xuICAgICAgeDogY2VudGVyLngsXG4gICAgICB5OiBjZW50ZXIueVxuICAgIH07XG4gIH1cblxuICBpbnB1dC5kZWx0YVggPSBwcmV2RGVsdGEueCArIChjZW50ZXIueCAtIG9mZnNldC54KTtcbiAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgeTogeSAvIGRlbHRhVGltZSB8fCAwXG4gIH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNhbGN1bGF0ZSB0aGUgc2NhbGUgZmFjdG9yIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBubyBzY2FsZSBpcyAxLCBhbmQgZ29lcyBkb3duIHRvIDAgd2hlbiBwaW5jaGVkIHRvZ2V0aGVyLCBhbmQgYmlnZ2VyIHdoZW4gcGluY2hlZCBvdXRcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gc2NhbGVcbiAqL1xuXG5mdW5jdGlvbiBnZXRTY2FsZShzdGFydCwgZW5kKSB7XG4gIHJldHVybiBnZXREaXN0YW5jZShlbmRbMF0sIGVuZFsxXSwgUFJPUFNfQ0xJRU5UX1hZKSAvIGdldERpc3RhbmNlKHN0YXJ0WzBdLCBzdGFydFsxXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY2FsY3VsYXRlIHRoZSByb3RhdGlvbiBkZWdyZWVzIGJldHdlZW4gdHdvIHBvaW50ZXJzZXRzXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHJvdGF0aW9uXG4gKi9cblxuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZ2V0QW5nbGUoZW5kWzFdLCBlbmRbMF0sIFBST1BTX0NMSUVOVF9YWSkgKyBnZXRBbmdsZShzdGFydFsxXSwgc3RhcnRbMF0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHZlbG9jaXR5IGlzIGNhbGN1bGF0ZWQgZXZlcnkgeCBtc1xuICogQHBhcmFtIHtPYmplY3R9IHNlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICB2YXIgbGFzdCA9IHNlc3Npb24ubGFzdEludGVydmFsIHx8IGlucHV0O1xuICB2YXIgZGVsdGFUaW1lID0gaW5wdXQudGltZVN0YW1wIC0gbGFzdC50aW1lU3RhbXA7XG4gIHZhciB2ZWxvY2l0eTtcbiAgdmFyIHZlbG9jaXR5WDtcbiAgdmFyIHZlbG9jaXR5WTtcbiAgdmFyIGRpcmVjdGlvbjtcblxuICBpZiAoaW5wdXQuZXZlbnRUeXBlICE9PSBJTlBVVF9DQU5DRUwgJiYgKGRlbHRhVGltZSA+IENPTVBVVEVfSU5URVJWQUwgfHwgbGFzdC52ZWxvY2l0eSA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHZhciBkZWx0YVggPSBpbnB1dC5kZWx0YVggLSBsYXN0LmRlbHRhWDtcbiAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG4gICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICB2ZWxvY2l0eVggPSB2Lng7XG4gICAgdmVsb2NpdHlZID0gdi55O1xuICAgIHZlbG9jaXR5ID0gYWJzKHYueCkgPiBhYnModi55KSA/IHYueCA6IHYueTtcbiAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgIHZlbG9jaXR5ID0gbGFzdC52ZWxvY2l0eTtcbiAgICB2ZWxvY2l0eVggPSBsYXN0LnZlbG9jaXR5WDtcbiAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICBkaXJlY3Rpb24gPSBsYXN0LmRpcmVjdGlvbjtcbiAgfVxuXG4gIGlucHV0LnZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIGlucHV0LnZlbG9jaXR5WCA9IHZlbG9jaXR5WDtcbiAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG59XG5cbi8qKlxuKiBAcHJpdmF0ZVxuICogZXh0ZW5kIHRoZSBkYXRhIHdpdGggc29tZSB1c2FibGUgcHJvcGVydGllcyBsaWtlIHNjYWxlLCByb3RhdGUsIHZlbG9jaXR5IGV0Y1xuICogQHBhcmFtIHtPYmplY3R9IG1hbmFnZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGNvbXB1dGVJbnB1dERhdGEobWFuYWdlciwgaW5wdXQpIHtcbiAgdmFyIHNlc3Npb24gPSBtYW5hZ2VyLnNlc3Npb247XG4gIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICB2YXIgcG9pbnRlcnNMZW5ndGggPSBwb2ludGVycy5sZW5ndGg7IC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cblxuICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgIHNlc3Npb24uZmlyc3RJbnB1dCA9IHNpbXBsZUNsb25lSW5wdXREYXRhKGlucHV0KTtcbiAgfSAvLyB0byBjb21wdXRlIHNjYWxlIGFuZCByb3RhdGlvbiB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBtdWx0aXBsZSB0b3VjaGVzXG5cblxuICBpZiAocG9pbnRlcnNMZW5ndGggPiAxICYmICFzZXNzaW9uLmZpcnN0TXVsdGlwbGUpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gIH0gZWxzZSBpZiAocG9pbnRlcnNMZW5ndGggPT09IDEpIHtcbiAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBmaXJzdElucHV0ID0gc2Vzc2lvbi5maXJzdElucHV0LFxuICAgICAgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgdmFyIG9mZnNldENlbnRlciA9IGZpcnN0TXVsdGlwbGUgPyBmaXJzdE11bHRpcGxlLmNlbnRlciA6IGZpcnN0SW5wdXQuY2VudGVyO1xuICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgaW5wdXQudGltZVN0YW1wID0gbm93KCk7XG4gIGlucHV0LmRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGZpcnN0SW5wdXQudGltZVN0YW1wO1xuICBpbnB1dC5hbmdsZSA9IGdldEFuZ2xlKG9mZnNldENlbnRlciwgY2VudGVyKTtcbiAgaW5wdXQuZGlzdGFuY2UgPSBnZXREaXN0YW5jZShvZmZzZXRDZW50ZXIsIGNlbnRlcik7XG4gIGNvbXB1dGVEZWx0YVhZKHNlc3Npb24sIGlucHV0KTtcbiAgaW5wdXQub2Zmc2V0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKGlucHV0LmRlbHRhWCwgaW5wdXQuZGVsdGFZKTtcbiAgdmFyIG92ZXJhbGxWZWxvY2l0eSA9IGdldFZlbG9jaXR5KGlucHV0LmRlbHRhVGltZSwgaW5wdXQuZGVsdGFYLCBpbnB1dC5kZWx0YVkpO1xuICBpbnB1dC5vdmVyYWxsVmVsb2NpdHlYID0gb3ZlcmFsbFZlbG9jaXR5Lng7XG4gIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5ID0gYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkgPyBvdmVyYWxsVmVsb2NpdHkueCA6IG92ZXJhbGxWZWxvY2l0eS55O1xuICBpbnB1dC5zY2FsZSA9IGZpcnN0TXVsdGlwbGUgPyBnZXRTY2FsZShmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAxO1xuICBpbnB1dC5yb3RhdGlvbiA9IGZpcnN0TXVsdGlwbGUgPyBnZXRSb3RhdGlvbihmaXJzdE11bHRpcGxlLnBvaW50ZXJzLCBwb2ludGVycykgOiAwO1xuICBpbnB1dC5tYXhQb2ludGVycyA9ICFzZXNzaW9uLnByZXZJbnB1dCA/IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA6IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA+IHNlc3Npb24ucHJldklucHV0Lm1heFBvaW50ZXJzID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogc2Vzc2lvbi5wcmV2SW5wdXQubWF4UG9pbnRlcnM7XG4gIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCk7IC8vIGZpbmQgdGhlIGNvcnJlY3QgdGFyZ2V0XG5cbiAgdmFyIHRhcmdldCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgdmFyIHNyY0V2ZW50ID0gaW5wdXQuc3JjRXZlbnQ7XG4gIHZhciBzcmNFdmVudFRhcmdldDtcblxuICBpZiAoc3JjRXZlbnQuY29tcG9zZWRQYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5jb21wb3NlZFBhdGgoKVswXTtcbiAgfSBlbHNlIGlmIChzcmNFdmVudC5wYXRoKSB7XG4gICAgc3JjRXZlbnRUYXJnZXQgPSBzcmNFdmVudC5wYXRoWzBdO1xuICB9IGVsc2Uge1xuICAgIHNyY0V2ZW50VGFyZ2V0ID0gc3JjRXZlbnQudGFyZ2V0O1xuICB9XG5cbiAgaWYgKGhhc1BhcmVudChzcmNFdmVudFRhcmdldCwgdGFyZ2V0KSkge1xuICAgIHRhcmdldCA9IHNyY0V2ZW50VGFyZ2V0O1xuICB9XG5cbiAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBoYW5kbGUgaW5wdXQgZXZlbnRzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICovXG5cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gIHZhciBwb2ludGVyc0xlbiA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aDtcbiAgdmFyIGNoYW5nZWRQb2ludGVyc0xlbiA9IGlucHV0LmNoYW5nZWRQb2ludGVycy5sZW5ndGg7XG4gIHZhciBpc0ZpcnN0ID0gZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIHZhciBpc0ZpbmFsID0gZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgcG9pbnRlcnNMZW4gLSBjaGFuZ2VkUG9pbnRlcnNMZW4gPT09IDA7XG4gIGlucHV0LmlzRmlyc3QgPSAhIWlzRmlyc3Q7XG4gIGlucHV0LmlzRmluYWwgPSAhIWlzRmluYWw7XG5cbiAgaWYgKGlzRmlyc3QpIHtcbiAgICBtYW5hZ2VyLnNlc3Npb24gPSB7fTtcbiAgfSAvLyBzb3VyY2UgZXZlbnQgaXMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2YgdGhlIGRvbUV2ZW50c1xuICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcblxuXG4gIGlucHV0LmV2ZW50VHlwZSA9IGV2ZW50VHlwZTsgLy8gY29tcHV0ZSBzY2FsZSwgcm90YXRpb24gZXRjXG5cbiAgY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCk7IC8vIGVtaXQgc2VjcmV0IGV2ZW50XG5cbiAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG4gIG1hbmFnZXIucmVjb2duaXplKGlucHV0KTtcbiAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzcGxpdCBzdHJpbmcgb24gd2hpdGVzcGFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybnMge0FycmF5fSB3b3Jkc1xuICovXG5mdW5jdGlvbiBzcGxpdFN0cihzdHIpIHtcbiAgcmV0dXJuIHN0ci50cmltKCkuc3BsaXQoL1xccysvZyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZEV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbiAodHlwZSkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBkb2MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZWxlbWVudDtcbiAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93IHx8IHdpbmRvdztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5cbnZhciBJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIElucHV0KG1hbmFnZXIsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHRoaXMuZWxlbWVudCA9IG1hbmFnZXIuZWxlbWVudDtcbiAgICB0aGlzLnRhcmdldCA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dFRhcmdldDsgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuXG4gICAgdGhpcy5kb21IYW5kbGVyID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICBpZiAoYm9vbE9yRm4obWFuYWdlci5vcHRpb25zLmVuYWJsZSwgW21hbmFnZXJdKSkge1xuICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2hvdWxkIGhhbmRsZSB0aGUgaW5wdXRFdmVudCBkYXRhIGFuZCB0cmlnZ2VyIHRoZSBjYWxsYmFja1xuICAgKiBAdmlydHVhbFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBiaW5kIHRoZSBldmVudHNcbiAgICovXG5cblxuICBfcHJvdG8uaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5ldkVsICYmIGFkZEV2ZW50TGlzdGVuZXJzKHRoaXMuZWxlbWVudCwgdGhpcy5ldkVsLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldldpbiAmJiBhZGRFdmVudExpc3RlbmVycyhnZXRXaW5kb3dGb3JFbGVtZW50KHRoaXMuZWxlbWVudCksIHRoaXMuZXZXaW4sIHRoaXMuZG9tSGFuZGxlcik7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgKi9cblxuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgdGhpcy5ldlRhcmdldCAmJiByZW1vdmVFdmVudExpc3RlbmVycyh0aGlzLnRhcmdldCwgdGhpcy5ldlRhcmdldCwgdGhpcy5kb21IYW5kbGVyKTtcbiAgICB0aGlzLmV2V2luICYmIHJlbW92ZUV2ZW50TGlzdGVuZXJzKGdldFdpbmRvd0ZvckVsZW1lbnQodGhpcy5lbGVtZW50KSwgdGhpcy5ldldpbiwgdGhpcy5kb21IYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4gSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICBpZiAoc3JjLmluZGV4T2YgJiYgIWZpbmRCeUtleSkge1xuICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHNyYy5sZW5ndGgpIHtcbiAgICAgIGlmIChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCB8fCAhZmluZEJ5S2V5ICYmIHNyY1tpXSA9PT0gZmluZCkge1xuICAgICAgICAvLyBkbyBub3QgdXNlID09PSBoZXJlLCB0ZXN0IGZhaWxzXG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgcG9pbnRlcmRvd246IElOUFVUX1NUQVJULFxuICBwb2ludGVybW92ZTogSU5QVVRfTU9WRSxcbiAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gIHBvaW50ZXJjYW5jZWw6IElOUFVUX0NBTkNFTCxcbiAgcG9pbnRlcm91dDogSU5QVVRfQ0FOQ0VMXG59OyAvLyBpbiBJRTEwIHRoZSBwb2ludGVyIHR5cGVzIGlzIGRlZmluZWQgYXMgYW4gZW51bVxuXG52YXIgSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSA9IHtcbiAgMjogSU5QVVRfVFlQRV9UT1VDSCxcbiAgMzogSU5QVVRfVFlQRV9QRU4sXG4gIDQ6IElOUFVUX1RZUEVfTU9VU0UsXG4gIDU6IElOUFVUX1RZUEVfS0lORUNUIC8vIHNlZSBodHRwczovL3R3aXR0ZXIuY29tL2phY29icm9zc2kvc3RhdHVzLzQ4MDU5NjQzODQ4OTg5MDgxNlxuXG59O1xudmFyIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAncG9pbnRlcmRvd24nO1xudmFyIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdwb2ludGVybW92ZSBwb2ludGVydXAgcG9pbnRlcmNhbmNlbCc7IC8vIElFMTAgaGFzIHByZWZpeGVkIHN1cHBvcnQsIGFuZCBjYXNlLXNlbnNpdGl2ZVxuXG5pZiAod2luLk1TUG9pbnRlckV2ZW50ICYmICF3aW4uUG9pbnRlckV2ZW50KSB7XG4gIFBPSU5URVJfRUxFTUVOVF9FVkVOVFMgPSAnTVNQb2ludGVyRG93bic7XG4gIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBQb2ludGVyIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cblxudmFyIFBvaW50ZXJFdmVudElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUG9pbnRlckV2ZW50SW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgdmFyIHByb3RvID0gUG9pbnRlckV2ZW50SW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2RWwgPSBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTO1xuICAgIHByb3RvLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5zdG9yZSA9IF90aGlzLm1hbmFnZXIuc2Vzc2lvbi5wb2ludGVyRXZlbnRzID0gW107XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBQb2ludGVyRXZlbnRJbnB1dC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGV2KSB7XG4gICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICB2YXIgcmVtb3ZlUG9pbnRlciA9IGZhbHNlO1xuICAgIHZhciBldmVudFR5cGVOb3JtYWxpemVkID0gZXYudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ21zJywgJycpO1xuICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICB2YXIgcG9pbnRlclR5cGUgPSBJRTEwX1BPSU5URVJfVFlQRV9FTlVNW2V2LnBvaW50ZXJUeXBlXSB8fCBldi5wb2ludGVyVHlwZTtcbiAgICB2YXIgaXNUb3VjaCA9IHBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIOyAvLyBnZXQgaW5kZXggb2YgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG4gICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTsgLy8gc3RhcnQgYW5kIG1vdXNlIG11c3QgYmUgZG93blxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChldi5idXR0b24gPT09IDAgfHwgaXNUb3VjaCkpIHtcbiAgICAgIGlmIChzdG9yZUluZGV4IDwgMCkge1xuICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgc3RvcmVJbmRleCA9IHN0b3JlLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgfSAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcblxuXG4gICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuXG5cbiAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuXG4gICAgaWYgKHJlbW92ZVBvaW50ZXIpIHtcbiAgICAgIC8vIHJlbW92ZSBmcm9tIHRoZSBzdG9yZVxuICAgICAgc3RvcmUuc3BsaWNlKHN0b3JlSW5kZXgsIDEpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUG9pbnRlckV2ZW50SW5wdXQ7XG59KElucHV0KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaiwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHVuaXF1ZSBhcnJheSB3aXRoIG9iamVjdHMgYmFzZWQgb24gYSBrZXkgKGxpa2UgJ2lkJykgb3IganVzdCBieSB0aGUgYXJyYXkncyB2YWx1ZVxuICogQHBhcmFtIHtBcnJheX0gc3JjIFt7aWQ6MX0se2lkOjJ9LHtpZDoxfV1cbiAqIEBwYXJhbSB7U3RyaW5nfSBba2V5XVxuICogQHBhcmFtIHtCb29sZWFufSBbc29ydD1GYWxzZV1cbiAqIEByZXR1cm5zIHtBcnJheX0gW3tpZDoxfSx7aWQ6Mn1dXG4gKi9cblxuZnVuY3Rpb24gdW5pcXVlQXJyYXkoc3JjLCBrZXksIHNvcnQpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBzcmMubGVuZ3RoKSB7XG4gICAgdmFyIHZhbCA9IGtleSA/IHNyY1tpXVtrZXldIDogc3JjW2ldO1xuXG4gICAgaWYgKGluQXJyYXkodmFsdWVzLCB2YWwpIDwgMCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHNyY1tpXSk7XG4gICAgfVxuXG4gICAgdmFsdWVzW2ldID0gdmFsO1xuICAgIGkrKztcbiAgfVxuXG4gIGlmIChzb3J0KSB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNvcnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYVtrZXldID4gYltrZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gIHRvdWNoc3RhcnQ6IElOUFVUX1NUQVJULFxuICB0b3VjaG1vdmU6IElOUFVUX01PVkUsXG4gIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gIHRvdWNoY2FuY2VsOiBJTlBVVF9DQU5DRUxcbn07XG52YXIgVE9VQ0hfVEFSR0VUX0VWRU5UUyA9ICd0b3VjaHN0YXJ0IHRvdWNobW92ZSB0b3VjaGVuZCB0b3VjaGNhbmNlbCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNdWx0aS11c2VyIHRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIFRvdWNoSW5wdXQucHJvdG90eXBlLmV2VGFyZ2V0ID0gVE9VQ0hfVEFSR0VUX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMudGFyZ2V0SWRzID0ge307IC8vIHRoaXMuZXZUYXJnZXQgPSBUT1VDSF9UQVJHRVRfRVZFTlRTO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRvdWNoSW5wdXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihldikge1xuICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgIHZhciB0b3VjaGVzID0gZ2V0VG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTtcblxuICAgIGlmICghdG91Y2hlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRvdWNoSW5wdXQ7XG59KElucHV0KTtcblxuZnVuY3Rpb24gZ2V0VG91Y2hlcyhldiwgdHlwZSkge1xuICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciB0YXJnZXRJZHMgPSB0aGlzLnRhcmdldElkczsgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcblxuICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgdGFyZ2V0SWRzW2FsbFRvdWNoZXNbMF0uaWRlbnRpZmllcl0gPSB0cnVlO1xuICAgIHJldHVybiBbYWxsVG91Y2hlcywgYWxsVG91Y2hlc107XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIHRhcmdldFRvdWNoZXM7XG4gIHZhciBjaGFuZ2VkVG91Y2hlcyA9IHRvQXJyYXkoZXYuY2hhbmdlZFRvdWNoZXMpO1xuICB2YXIgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXTtcbiAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0OyAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG5cbiAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uICh0b3VjaCkge1xuICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICB9KTsgLy8gY29sbGVjdCB0b3VjaGVzXG5cbiAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICBpKys7XG4gICAgfVxuICB9IC8vIGZpbHRlciBjaGFuZ2VkIHRvdWNoZXMgdG8gb25seSBjb250YWluIHRvdWNoZXMgdGhhdCBleGlzdCBpbiB0aGUgY29sbGVjdGVkIHRhcmdldCBpZHNcblxuXG4gIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgY2hhbmdlZFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgfSAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuXG5cbiAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIGlmICghY2hhbmdlZFRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIFsvLyBtZXJnZSB0YXJnZXRUb3VjaGVzIHdpdGggY2hhbmdlZFRhcmdldFRvdWNoZXMgc28gaXQgY29udGFpbnMgQUxMIHRvdWNoZXMsIGluY2x1ZGluZyAnZW5kJyBhbmQgJ2NhbmNlbCdcbiAgdW5pcXVlQXJyYXkodGFyZ2V0VG91Y2hlcy5jb25jYXQoY2hhbmdlZFRhcmdldFRvdWNoZXMpLCAnaWRlbnRpZmllcicsIHRydWUpLCBjaGFuZ2VkVGFyZ2V0VG91Y2hlc107XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gIG1vdXNlZG93bjogSU5QVVRfU1RBUlQsXG4gIG1vdXNlbW92ZTogSU5QVVRfTU9WRSxcbiAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xudmFyIE1PVVNFX0VMRU1FTlRfRVZFTlRTID0gJ21vdXNlZG93bic7XG52YXIgTU9VU0VfV0lORE9XX0VWRU5UUyA9ICdtb3VzZW1vdmUgbW91c2V1cCc7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgTW91c2VJbnB1dCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX0lucHV0KSB7XG4gIF9pbmhlcml0c0xvb3NlKE1vdXNlSW5wdXQsIF9JbnB1dCk7XG5cbiAgZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcbiAgICBwcm90by5ldkVsID0gTU9VU0VfRUxFTUVOVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBNT1VTRV9XSU5ET1dfRVZFTlRTO1xuICAgIF90aGlzID0gX0lucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICBfdGhpcy5wcmVzc2VkID0gZmFsc2U7IC8vIG1vdXNlZG93biBzdGF0ZVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldlxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBNb3VzZUlucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgZXZlbnRUeXBlID0gTU9VU0VfSU5QVVRfTUFQW2V2LnR5cGVdOyAvLyBvbiBzdGFydCB3ZSB3YW50IHRvIGhhdmUgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGRvd25cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50VHlwZSAmIElOUFVUX01PVkUgJiYgZXYud2hpY2ggIT09IDEpIHtcbiAgICAgIGV2ZW50VHlwZSA9IElOUFVUX0VORDtcbiAgICB9IC8vIG1vdXNlIG11c3QgYmUgZG93blxuXG5cbiAgICBpZiAoIXRoaXMucHJlc3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICBzcmNFdmVudDogZXZcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTW91c2VJbnB1dDtcbn0oSW5wdXQpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBDb21iaW5lZCB0b3VjaCBhbmQgbW91c2UgaW5wdXRcbiAqXG4gKiBUb3VjaCBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhlbiBtb3VzZSwgYW5kIHdoaWxlIHRvdWNoaW5nIG5vIG1vdXNlIGV2ZW50cyBhcmUgYWxsb3dlZC5cbiAqIFRoaXMgYmVjYXVzZSB0b3VjaCBkZXZpY2VzIGFsc28gZW1pdCBtb3VzZSBldmVudHMgd2hpbGUgZG9pbmcgYSB0b3VjaC5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cblxudmFyIERFRFVQX1RJTUVPVVQgPSAyNTAwO1xudmFyIERFRFVQX0RJU1RBTkNFID0gMjU7XG5cbmZ1bmN0aW9uIHNldExhc3RUb3VjaChldmVudERhdGEpIHtcbiAgdmFyIF9ldmVudERhdGEkY2hhbmdlZFBvaSA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnMsXG4gICAgICB0b3VjaCA9IF9ldmVudERhdGEkY2hhbmdlZFBvaVswXTtcblxuICBpZiAodG91Y2guaWRlbnRpZmllciA9PT0gdGhpcy5wcmltYXJ5VG91Y2gpIHtcbiAgICB2YXIgbGFzdFRvdWNoID0ge1xuICAgICAgeDogdG91Y2guY2xpZW50WCxcbiAgICAgIHk6IHRvdWNoLmNsaWVudFlcbiAgICB9O1xuICAgIHZhciBsdHMgPSB0aGlzLmxhc3RUb3VjaGVzO1xuICAgIHRoaXMubGFzdFRvdWNoZXMucHVzaChsYXN0VG91Y2gpO1xuXG4gICAgdmFyIHJlbW92ZUxhc3RUb3VjaCA9IGZ1bmN0aW9uIHJlbW92ZUxhc3RUb3VjaCgpIHtcbiAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcblxuICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICBzZXRMYXN0VG91Y2guY2FsbCh0aGlzLCBldmVudERhdGEpO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICB2YXIgeCA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRYO1xuICB2YXIgeSA9IGV2ZW50RGF0YS5zcmNFdmVudC5jbGllbnRZO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sYXN0VG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0ID0gdGhpcy5sYXN0VG91Y2hlc1tpXTtcbiAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KTtcbiAgICB2YXIgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcblxuICAgIGlmIChkeCA8PSBERURVUF9ESVNUQU5DRSAmJiBkeSA8PSBERURVUF9ESVNUQU5DRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgVG91Y2hNb3VzZUlucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgdmFyIFRvdWNoTW91c2VJbnB1dCA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9JbnB1dCkge1xuICAgIF9pbmhlcml0c0xvb3NlKFRvdWNoTW91c2VJbnB1dCwgX0lucHV0KTtcblxuICAgIGZ1bmN0aW9uIFRvdWNoTW91c2VJbnB1dChfbWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfSW5wdXQuY2FsbCh0aGlzLCBfbWFuYWdlciwgY2FsbGJhY2spIHx8IHRoaXM7XG5cbiAgICAgIF90aGlzLmhhbmRsZXIgPSBmdW5jdGlvbiAobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gaW5wdXREYXRhLnBvaW50ZXJUeXBlID09PSBJTlBVVF9UWVBFX1RPVUNIO1xuICAgICAgICB2YXIgaXNNb3VzZSA9IGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PT0gSU5QVVRfVFlQRV9NT1VTRTtcblxuICAgICAgICBpZiAoaXNNb3VzZSAmJiBpbnB1dERhdGEuc291cmNlQ2FwYWJpbGl0aWVzICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuXG5cbiAgICAgICAgaWYgKGlzVG91Y2gpIHtcbiAgICAgICAgICByZWNvcmRUb3VjaGVzLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSksIGlucHV0RGF0YSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dChfdGhpcy5tYW5hZ2VyLCBfdGhpcy5oYW5kbGVyKTtcbiAgICAgIF90aGlzLm1vdXNlID0gbmV3IE1vdXNlSW5wdXQoX3RoaXMubWFuYWdlciwgX3RoaXMuaGFuZGxlcik7XG4gICAgICBfdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgICAgX3RoaXMubGFzdFRvdWNoZXMgPSBbXTtcbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBoYW5kbGUgbW91c2UgYW5kIHRvdWNoIGV2ZW50c1xuICAgICAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0RXZlbnRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG5cblxuICAgIHZhciBfcHJvdG8gPSBUb3VjaE1vdXNlSW5wdXQucHJvdG90eXBlO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgdGhpcy5tb3VzZS5kZXN0cm95KCk7XG4gICAgfTtcblxuICAgIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG4gIH0oSW5wdXQpO1xuXG4gIHJldHVybiBUb3VjaE1vdXNlSW5wdXQ7XG59KCk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBjYWxsZWQgYnkgdGhlIE1hbmFnZXIgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7SGFtbWVyfSBtYW5hZ2VyXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gIHZhciBUeXBlOyAvLyBsZXQgaW5wdXRDbGFzcyA9IG1hbmFnZXIub3B0aW9ucy5pbnB1dENsYXNzO1xuXG4gIHZhciBpbnB1dENsYXNzID0gbWFuYWdlci5vcHRpb25zLmlucHV0Q2xhc3M7XG5cbiAgaWYgKGlucHV0Q2xhc3MpIHtcbiAgICBUeXBlID0gaW5wdXRDbGFzcztcbiAgfSBlbHNlIGlmIChTVVBQT1JUX1BPSU5URVJfRVZFTlRTKSB7XG4gICAgVHlwZSA9IFBvaW50ZXJFdmVudElucHV0O1xuICB9IGVsc2UgaWYgKFNVUFBPUlRfT05MWV9UT1VDSCkge1xuICAgIFR5cGUgPSBUb3VjaElucHV0O1xuICB9IGVsc2UgaWYgKCFTVVBQT1JUX1RPVUNIKSB7XG4gICAgVHlwZSA9IE1vdXNlSW5wdXQ7XG4gIH0gZWxzZSB7XG4gICAgVHlwZSA9IFRvdWNoTW91c2VJbnB1dDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYXJyYXksIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgZm4gb24gZWFjaCBlbnRyeVxuICogaWYgaXQgYWludCBhbiBhcnJheSB3ZSBkb24ndCB3YW50IHRvIGRvIGEgdGhpbmcuXG4gKiB0aGlzIGlzIHVzZWQgYnkgYWxsIHRoZSBtZXRob2RzIHRoYXQgYWNjZXB0IGEgc2luZ2xlIGFuZCBhcnJheSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7KnxBcnJheX0gYXJnXG4gKiBAcGFyYW0ge1N0cmluZ30gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF1cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5cbmZ1bmN0aW9uIGludm9rZUFycmF5QXJnKGFyZywgZm4sIGNvbnRleHQpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgIGVhY2goYXJnLCBjb250ZXh0W2ZuXSwgY29udGV4dCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIGdldCBhIHVuaXF1ZSBpZFxuICogQHJldHVybnMge251bWJlcn0gdW5pcXVlSWRcbiAqL1xudmFyIF91bmlxdWVJZCA9IDE7XG5mdW5jdGlvbiB1bmlxdWVJZCgpIHtcbiAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSByZWNvZ25pemVyIGJ5IG5hbWUgaWYgaXQgaXMgYm91bmQgdG8gYSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSBvdGhlclJlY29nbml6ZXJcbiAqIEBwYXJhbSB7UmVjb2duaXplcn0gcmVjb2duaXplclxuICogQHJldHVybnMge1JlY29nbml6ZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCByZWNvZ25pemVyKSB7XG4gIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuXG4gIGlmIChtYW5hZ2VyKSB7XG4gICAgcmV0dXJuIG1hbmFnZXIuZ2V0KG90aGVyUmVjb2duaXplcik7XG4gIH1cblxuICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBnZXQgYSB1c2FibGUgc3RyaW5nLCB1c2VkIGFzIGV2ZW50IHBvc3RmaXhcbiAqIEBwYXJhbSB7Y29uc3RhbnR9IHN0YXRlXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdGF0ZVxuICovXG5cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gIGlmIChzdGF0ZSAmIFNUQVRFX0NBTkNFTExFRCkge1xuICAgIHJldHVybiAnY2FuY2VsJztcbiAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0VOREVEKSB7XG4gICAgcmV0dXJuICdlbmQnO1xuICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfQ0hBTkdFRCkge1xuICAgIHJldHVybiAnbW92ZSc7XG4gIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9CRUdBTikge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSZWNvZ25pemVyIGZsb3cgZXhwbGFpbmVkOyAqXG4gKiBBbGwgcmVjb2duaXplcnMgaGF2ZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBQT1NTSUJMRSB3aGVuIGEgaW5wdXQgc2Vzc2lvbiBzdGFydHMuXG4gKiBUaGUgZGVmaW5pdGlvbiBvZiBhIGlucHV0IHNlc3Npb24gaXMgZnJvbSB0aGUgZmlyc3QgaW5wdXQgdW50aWwgdGhlIGxhc3QgaW5wdXQsIHdpdGggYWxsIGl0J3MgbW92ZW1lbnQgaW4gaXQuICpcbiAqIEV4YW1wbGUgc2Vzc2lvbiBmb3IgbW91c2UtaW5wdXQ6IG1vdXNlZG93biAtPiBtb3VzZW1vdmUgLT4gbW91c2V1cFxuICpcbiAqIE9uIGVhY2ggcmVjb2duaXppbmcgY3ljbGUgKHNlZSBNYW5hZ2VyLnJlY29nbml6ZSkgdGhlIC5yZWNvZ25pemUoKSBtZXRob2QgaXMgZXhlY3V0ZWRcbiAqIHdoaWNoIGRldGVybWluZXMgd2l0aCBzdGF0ZSBpdCBzaG91bGQgYmUuXG4gKlxuICogSWYgdGhlIHJlY29nbml6ZXIgaGFzIHRoZSBzdGF0ZSBGQUlMRUQsIENBTkNFTExFRCBvciBSRUNPR05JWkVEIChlcXVhbHMgRU5ERUQpLCBpdCBpcyByZXNldCB0b1xuICogUE9TU0lCTEUgdG8gZ2l2ZSBpdCBhbm90aGVyIGNoYW5nZSBvbiB0aGUgbmV4dCBjeWNsZS5cbiAqXG4gKiAgICAgICAgICAgICAgIFBvc3NpYmxlXG4gKiAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgKy0tLS0tKy0tLS0tLS0tLS0tLS0tLStcbiAqICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgKy0tLS0tKy0tLS0tKyAgICAgICAgICAgICAgIHxcbiAqICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHxcbiAqICAgRmFpbGVkICAgICAgQ2FuY2VsbGVkICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSstLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgUmVjb2duaXplZCAgICAgICBCZWdhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kZWQvUmVjb2duaXplZFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFJlY29nbml6ZXJcbiAqIEV2ZXJ5IHJlY29nbml6ZXIgbmVlZHMgdG8gZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqL1xuXG52YXIgUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7XG4gICAgICBlbmFibGU6IHRydWVcbiAgICB9LCBvcHRpb25zKTtcbiAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsOyAvLyBkZWZhdWx0IGlzIGVuYWJsZSB0cnVlXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfUE9TU0lCTEU7XG4gICAgdGhpcy5zaW11bHRhbmVvdXMgPSB7fTtcbiAgICB0aGlzLnJlcXVpcmVGYWlsID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHNldCBvcHRpb25zXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAqL1xuXG5cbiAgdmFyIF9wcm90byA9IFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQob3B0aW9ucykge1xuICAgIGFzc2lnbiQxKHRoaXMub3B0aW9ucywgb3B0aW9ucyk7IC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG5cbiAgICB0aGlzLm1hbmFnZXIgJiYgdGhpcy5tYW5hZ2VyLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmVjb2duaXplIHNpbXVsdGFuZW91cyB3aXRoIGFuIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlY29nbml6ZVdpdGggPSBmdW5jdGlvbiByZWNvZ25pemVXaXRoKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBzaW11bHRhbmVvdXMgPSB0aGlzLnNpbXVsdGFuZW91cztcbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG5cbiAgICBpZiAoIXNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdKSB7XG4gICAgICBzaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXSA9IG90aGVyUmVjb2duaXplcjtcbiAgICAgIG90aGVyUmVjb2duaXplci5yZWNvZ25pemVXaXRoKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgc2ltdWx0YW5lb3VzIGxpbmsuIGl0IGRvZXNudCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAqL1xuXG5cbiAgX3Byb3RvLmRyb3BSZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gZHJvcFJlY29nbml6ZVdpdGgob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICBkZWxldGUgdGhpcy5zaW11bHRhbmVvdXNbb3RoZXJSZWNvZ25pemVyLmlkXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlY29nbml6ZXIgY2FuIG9ubHkgcnVuIHdoZW4gYW4gb3RoZXIgaXMgZmFpbGluZ1xuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5yZXF1aXJlRmFpbHVyZSA9IGZ1bmN0aW9uIHJlcXVpcmVGYWlsdXJlKG90aGVyUmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcblxuICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZHJvcCB0aGUgcmVxdWlyZUZhaWx1cmUgbGluay4gaXQgZG9lcyBub3QgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgKi9cblxuXG4gIF9wcm90by5kcm9wUmVxdWlyZUZhaWx1cmUgPSBmdW5jdGlvbiBkcm9wUmVxdWlyZUZhaWx1cmUob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKG90aGVyUmVjb2duaXplciwgJ2Ryb3BSZXF1aXJlRmFpbHVyZScsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgdmFyIGluZGV4ID0gaW5BcnJheSh0aGlzLnJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGhhcyByZXF1aXJlIGZhaWx1cmVzIGJvb2xlYW5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgX3Byb3RvLmhhc1JlcXVpcmVGYWlsdXJlcyA9IGZ1bmN0aW9uIGhhc1JlcXVpcmVGYWlsdXJlcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlRmFpbC5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogaWYgdGhlIHJlY29nbml6ZXIgY2FuIHJlY29nbml6ZSBzaW11bHRhbmVvdXMgd2l0aCBhbiBvdGhlciByZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5SZWNvZ25pemVXaXRoID0gZnVuY3Rpb24gY2FuUmVjb2duaXplV2l0aChvdGhlclJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gISF0aGlzLnNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogWW91IHNob3VsZCB1c2UgYHRyeUVtaXRgIGluc3RlYWQgb2YgYGVtaXRgIGRpcmVjdGx5IHRvIGNoZWNrXG4gICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChpbnB1dCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgc2VsZi5tYW5hZ2VyLmVtaXQoZXZlbnQsIGlucHV0KTtcbiAgICB9IC8vICdwYW5zdGFydCcgYW5kICdwYW5tb3ZlJ1xuXG5cbiAgICBpZiAoc3RhdGUgPCBTVEFURV9FTkRFRCkge1xuICAgICAgZW1pdChzZWxmLm9wdGlvbnMuZXZlbnQgKyBzdGF0ZVN0cihzdGF0ZSkpO1xuICAgIH1cblxuICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgaWYgKGlucHV0LmFkZGl0aW9uYWxFdmVudCkge1xuICAgICAgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgfSAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuXG5cbiAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAqIGlmIHRydWUsIGl0IGVtaXRzIGEgZ2VzdHVyZSBldmVudCxcbiAgICogb3RoZXJ3aXNlLCBzZXR1cCB0aGUgc3RhdGUgdG8gRkFJTEVELlxuICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICovXG5cblxuICBfcHJvdG8udHJ5RW1pdCA9IGZ1bmN0aW9uIHRyeUVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgIH0gLy8gaXQncyBmYWlsaW5nIGFueXdheVxuXG5cbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogY2FuIHdlIGVtaXQ/XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cblxuXG4gIF9wcm90by5jYW5FbWl0ID0gZnVuY3Rpb24gY2FuRW1pdCgpIHtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IHRoaXMucmVxdWlyZUZhaWwubGVuZ3RoKSB7XG4gICAgICBpZiAoISh0aGlzLnJlcXVpcmVGYWlsW2ldLnN0YXRlICYgKFNUQVRFX0ZBSUxFRCB8IFNUQVRFX1BPU1NJQkxFKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5yZWNvZ25pemUgPSBmdW5jdGlvbiByZWNvZ25pemUoaW5wdXREYXRhKSB7XG4gICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAvLyBzbyB3ZSBjYW4gY2hhbmdlIHRoZSBpbnB1dERhdGEgd2l0aG91dCBtZXNzaW5nIHVwIHRoZSBvdGhlciByZWNvZ25pemVyc1xuICAgIHZhciBpbnB1dERhdGFDbG9uZSA9IGFzc2lnbiQxKHt9LCBpbnB1dERhdGEpOyAvLyBpcyBpcyBlbmFibGVkIGFuZCBhbGxvdyByZWNvZ25pemluZz9cblxuICAgIGlmICghYm9vbE9yRm4odGhpcy5vcHRpb25zLmVuYWJsZSwgW3RoaXMsIGlucHV0RGF0YUNsb25lXSkpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9GQUlMRUQ7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyByZXNldCB3aGVuIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZFxuXG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9SRUNPR05JWkVEIHwgU1RBVEVfQ0FOQ0VMTEVEIHwgU1RBVEVfRkFJTEVEKSkge1xuICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1BPU1NJQkxFO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpOyAvLyB0aGUgcmVjb2duaXplciBoYXMgcmVjb2duaXplZCBhIGdlc3R1cmVcbiAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG5cbiAgICBpZiAodGhpcy5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCB8IFNUQVRFX0NBTkNFTExFRCkpIHtcbiAgICAgIHRoaXMudHJ5RW1pdChpbnB1dERhdGFDbG9uZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgcmVjb2duaXplclxuICAgKiB0aGUgYWN0dWFsIHJlY29nbml6aW5nIGhhcHBlbnMgaW4gdGhpcyBtZXRob2RcbiAgICogQHZpcnR1YWxcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgKiBAcmV0dXJucyB7Y29uc3RhbnR9IFNUQVRFXG4gICAqL1xuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cblxuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dERhdGEpIHt9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiByZXR1cm4gdGhlIHByZWZlcnJlZCB0b3VjaC1hY3Rpb25cbiAgICogQHZpcnR1YWxcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cblxuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge307XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBjYWxsZWQgd2hlbiB0aGUgZ2VzdHVyZSBpc24ndCBhbGxvd2VkIHRvIHJlY29nbml6ZVxuICAgKiBsaWtlIHdoZW4gYW5vdGhlciBpcyBiZWluZyByZWNvZ25pemVkIG9yIGl0IGlzIGRpc2FibGVkXG4gICAqIEB2aXJ0dWFsXG4gICAqL1xuXG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7fTtcblxuICByZXR1cm4gUmVjb2duaXplcjtcbn0oKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQSB0YXAgaXMgcmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIGRvaW5nIGEgc21hbGwgdGFwL2NsaWNrLiBNdWx0aXBsZSB0YXBzIGFyZSByZWNvZ25pemVkIGlmIHRoZXkgb2NjdXJcbiAqIGJldHdlZW4gdGhlIGdpdmVuIGludGVydmFsIGFuZCBwb3NpdGlvbi4gVGhlIGRlbGF5IG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZWNvZ25pemUgbXVsdGktdGFwcyB3aXRob3V0IGZpcmluZ1xuICogYSBzaW5nbGUgdGFwLlxuICpcbiAqIFRoZSBldmVudERhdGEgZnJvbSB0aGUgZW1pdHRlZCBldmVudCBjb250YWlucyB0aGUgcHJvcGVydHkgYHRhcENvdW50YCwgd2hpY2ggY29udGFpbnMgdGhlIGFtb3VudCBvZlxuICogbXVsdGktdGFwcyBiZWluZyByZWNvZ25pemVkLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFRhcFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9SZWNvZ25pemVyKSB7XG4gIF9pbmhlcml0c0xvb3NlKFRhcFJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBUYXBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAndGFwJyxcbiAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgdGFwczogMSxcbiAgICAgIGludGVydmFsOiAzMDAsXG4gICAgICAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgdGltZTogMjUwLFxuICAgICAgLy8gbWF4IHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgZG93biAobGlrZSBmaW5nZXIgb24gdGhlIHNjcmVlbilcbiAgICAgIHRocmVzaG9sZDogOSxcbiAgICAgIC8vIGEgbWluaW1hbCBtb3ZlbWVudCBpcyBvaywgYnV0IGtlZXAgaXQgbG93XG4gICAgICBwb3NUaHJlc2hvbGQ6IDEwXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7IC8vIHByZXZpb3VzIHRpbWUgYW5kIGNlbnRlcixcbiAgICAvLyB1c2VkIGZvciB0YXAgY291bnRpbmdcblxuICAgIF90aGlzLnBUaW1lID0gZmFsc2U7XG4gICAgX3RoaXMucENlbnRlciA9IGZhbHNlO1xuICAgIF90aGlzLl90aW1lciA9IG51bGw7XG4gICAgX3RoaXMuX2lucHV0ID0gbnVsbDtcbiAgICBfdGhpcy5jb3VudCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRhcFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTl07XG4gIH07XG5cbiAgX3Byb3RvLnByb2Nlc3MgPSBmdW5jdGlvbiBwcm9jZXNzKGlucHV0KSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgdmFsaWRQb2ludGVycyA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9ucy5wb2ludGVycztcbiAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuICAgIHRoaXMucmVzZXQoKTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiB0aGlzLmNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgIH0gLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cblxuICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT09IElOUFVUX0VORCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mYWlsVGltZW91dCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdmFsaWRJbnRlcnZhbCA9IHRoaXMucFRpbWUgPyBpbnB1dC50aW1lU3RhbXAgLSB0aGlzLnBUaW1lIDwgb3B0aW9ucy5pbnRlcnZhbCA6IHRydWU7XG4gICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG4gICAgICB0aGlzLnBUaW1lID0gaW5wdXQudGltZVN0YW1wO1xuICAgICAgdGhpcy5wQ2VudGVyID0gaW5wdXQuY2VudGVyO1xuXG4gICAgICBpZiAoIXZhbGlkTXVsdGlUYXAgfHwgIXZhbGlkSW50ZXJ2YWwpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7IC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG5cbiAgICAgIHZhciB0YXBDb3VudCA9IHRoaXMuY291bnQgJSBvcHRpb25zLnRhcHM7XG5cbiAgICAgIGlmICh0YXBDb3VudCA9PT0gMCkge1xuICAgICAgICAvLyBubyBmYWlsaW5nIHJlcXVpcmVtZW50cywgaW1tZWRpYXRlbHkgdHJpZ2dlciB0aGUgdGFwIGV2ZW50XG4gICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZUZhaWx1cmVzKCkpIHtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcblxuICAgICAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgICAgICB9LCBvcHRpb25zLmludGVydmFsKTtcbiAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICB9O1xuXG4gIF9wcm90by5mYWlsVGltZW91dCA9IGZ1bmN0aW9uIGZhaWxUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpO1xuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IFNUQVRFX1JFQ09HTklaRUQpIHtcbiAgICAgIHRoaXMuX2lucHV0LnRhcENvdW50ID0gdGhpcy5jb3VudDtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gVGFwUmVjb2duaXplcjtcbn0oUmVjb2duaXplcik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5cbnZhciBBdHRyUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoQXR0clJlY29nbml6ZXIsIF9SZWNvZ25pemVyKTtcblxuICBmdW5jdGlvbiBBdHRyUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgKi9cblxuXG4gIHZhciBfcHJvdG8gPSBBdHRyUmVjb2duaXplci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmF0dHJUZXN0ID0gZnVuY3Rpb24gYXR0clRlc3QoaW5wdXQpIHtcbiAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgcmV0dXJuIG9wdGlvblBvaW50ZXJzID09PSAwIHx8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gb3B0aW9uUG9pbnRlcnM7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dFxuICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICovXG5cblxuICBfcHJvdG8ucHJvY2VzcyA9IGZ1bmN0aW9uIHByb2Nlc3MoaW5wdXQpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIHZhciBldmVudFR5cGUgPSBpbnB1dC5ldmVudFR5cGU7XG4gICAgdmFyIGlzUmVjb2duaXplZCA9IHN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCk7XG4gICAgdmFyIGlzVmFsaWQgPSB0aGlzLmF0dHJUZXN0KGlucHV0KTsgLy8gb24gY2FuY2VsIGlucHV0IGFuZCB3ZSd2ZSByZWNvZ25pemVkIGJlZm9yZSwgcmV0dXJuIFNUQVRFX0NBTkNFTExFRFxuXG4gICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgIH0gZWxzZSBpZiAoaXNSZWNvZ25pemVkIHx8IGlzVmFsaWQpIHtcbiAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0JFR0FOO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgcmV0dXJuIEF0dHJSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge2NvbnN0YW50fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZGlyZWN0aW9uU3RyKGRpcmVjdGlvbikge1xuICBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fRE9XTikge1xuICAgIHJldHVybiAnZG93bic7XG4gIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBESVJFQ1RJT05fVVApIHtcbiAgICByZXR1cm4gJ3VwJztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgcmV0dXJuICdsZWZ0JztcbiAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IERJUkVDVElPTl9SSUdIVCkge1xuICAgIHJldHVybiAncmlnaHQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQYW5cbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGFuZCBtb3ZlZCBpbiB0aGUgYWxsb3dlZCBkaXJlY3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFBhblJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQYW5SZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFBhblJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICBwb2ludGVyczogMSxcbiAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sIG9wdGlvbnMpKSB8fCB0aGlzO1xuICAgIF90aGlzLnBYID0gbnVsbDtcbiAgICBfdGhpcy5wWSA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFBhblJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciBhY3Rpb25zID0gW107XG5cbiAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9O1xuXG4gIF9wcm90by5kaXJlY3Rpb25UZXN0ID0gZnVuY3Rpb24gZGlyZWN0aW9uVGVzdChpbnB1dCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBoYXNNb3ZlZCA9IHRydWU7XG4gICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0LmRpcmVjdGlvbjtcbiAgICB2YXIgeCA9IGlucHV0LmRlbHRhWDtcbiAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTsgLy8gbG9jayB0byBheGlzP1xuXG4gICAgaWYgKCEoZGlyZWN0aW9uICYgb3B0aW9ucy5kaXJlY3Rpb24pKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXJlY3Rpb24gJiBESVJFQ1RJT05fSE9SSVpPTlRBTCkge1xuICAgICAgICBkaXJlY3Rpb24gPSB4ID09PSAwID8gRElSRUNUSU9OX05PTkUgOiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgICAgICBoYXNNb3ZlZCA9IHggIT09IHRoaXMucFg7XG4gICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFYKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IHkgPT09IDAgPyBESVJFQ1RJT05fTk9ORSA6IHkgPCAwID8gRElSRUNUSU9OX1VQIDogRElSRUNUSU9OX0RPV047XG4gICAgICAgIGhhc01vdmVkID0geSAhPT0gdGhpcy5wWTtcbiAgICAgICAgZGlzdGFuY2UgPSBNYXRoLmFicyhpbnB1dC5kZWx0YVkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gaGFzTW92ZWQgJiYgZGlzdGFuY2UgPiBvcHRpb25zLnRocmVzaG9sZCAmJiBkaXJlY3Rpb24gJiBvcHRpb25zLmRpcmVjdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBBdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKCAvLyByZXBsYWNlIHdpdGggYSBzdXBlciBjYWxsXG4gICAgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOIHx8ICEodGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKSAmJiB0aGlzLmRpcmVjdGlvblRlc3QoaW5wdXQpKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgIHRoaXMucFkgPSBpbnB1dC5kZWx0YVk7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5kaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgaW5wdXQuYWRkaXRpb25hbEV2ZW50ID0gdGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgfTtcblxuICByZXR1cm4gUGFuUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTd2lwZVxuICogUmVjb2duaXplZCB3aGVuIHRoZSBwb2ludGVyIGlzIG1vdmluZyBmYXN0ICh2ZWxvY2l0eSksIHdpdGggZW5vdWdoIGRpc3RhbmNlIGluIHRoZSBhbGxvd2VkIGRpcmVjdGlvbi5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgQXR0clJlY29nbml6ZXJcbiAqL1xuXG52YXIgU3dpcGVSZWNvZ25pemVyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfQXR0clJlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpcGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFN3aXBlUmVjb2duaXplcihvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIuY2FsbCh0aGlzLCBfZXh0ZW5kcyh7XG4gICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgIHRocmVzaG9sZDogMTAsXG4gICAgICB2ZWxvY2l0eTogMC4zLFxuICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpcGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciB2ZWxvY2l0eTtcblxuICAgIGlmIChkaXJlY3Rpb24gJiAoRElSRUNUSU9OX0hPUklaT05UQUwgfCBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5WTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJiBkaXJlY3Rpb24gJiBpbnB1dC5vZmZzZXREaXJlY3Rpb24gJiYgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmIGlucHV0Lm1heFBvaW50ZXJzID09PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiYgYWJzKHZlbG9jaXR5KSA+IHRoaXMub3B0aW9ucy52ZWxvY2l0eSAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQ7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGRpcmVjdGlvblN0cihpbnB1dC5vZmZzZXREaXJlY3Rpb24pO1xuXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50ICsgZGlyZWN0aW9uLCBpbnB1dCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXBlUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5cbnZhciBQaW5jaFJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShQaW5jaFJlY29nbml6ZXIsIF9BdHRyUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUGluY2hSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncGluY2gnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQaW5jaFJlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICB9O1xuXG4gIF9wcm90by5hdHRyVGVzdCA9IGZ1bmN0aW9uIGF0dHJUZXN0KGlucHV0KSB7XG4gICAgcmV0dXJuIF9BdHRyUmVjb2duaXplci5wcm90b3R5cGUuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiYgKE1hdGguYWJzKGlucHV0LnNjYWxlIC0gMSkgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgX3Byb3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICB9XG5cbiAgICBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmVtaXQuY2FsbCh0aGlzLCBpbnB1dCk7XG4gIH07XG5cbiAgcmV0dXJuIFBpbmNoUmVjb2duaXplcjtcbn0oQXR0clJlY29nbml6ZXIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cblxudmFyIFJvdGF0ZVJlY29nbml6ZXIgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKF9BdHRyUmVjb2duaXplcikge1xuICBfaW5oZXJpdHNMb29zZShSb3RhdGVSZWNvZ25pemVyLCBfQXR0clJlY29nbml6ZXIpO1xuXG4gIGZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gX0F0dHJSZWNvZ25pemVyLmNhbGwodGhpcywgX2V4dGVuZHMoe1xuICAgICAgZXZlbnQ6ICdyb3RhdGUnLFxuICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgcG9pbnRlcnM6IDJcbiAgICB9LCBvcHRpb25zKSkgfHwgdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSb3RhdGVSZWNvZ25pemVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZ2V0VG91Y2hBY3Rpb24gPSBmdW5jdGlvbiBnZXRUb3VjaEFjdGlvbigpIHtcbiAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9OT05FXTtcbiAgfTtcblxuICBfcHJvdG8uYXR0clRlc3QgPSBmdW5jdGlvbiBhdHRyVGVzdChpbnB1dCkge1xuICAgIHJldHVybiBfQXR0clJlY29nbml6ZXIucHJvdG90eXBlLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmIChNYXRoLmFicyhpbnB1dC5yb3RhdGlvbikgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkIHx8IHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTik7XG4gIH07XG5cbiAgcmV0dXJuIFJvdGF0ZVJlY29nbml6ZXI7XG59KEF0dHJSZWNvZ25pemVyKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogUHJlc3NcbiAqIFJlY29nbml6ZWQgd2hlbiB0aGUgcG9pbnRlciBpcyBkb3duIGZvciB4IG1zIHdpdGhvdXQgYW55IG1vdmVtZW50LlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBSZWNvZ25pemVyXG4gKi9cblxudmFyIFByZXNzUmVjb2duaXplciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlY29nbml6ZXIpIHtcbiAgX2luaGVyaXRzTG9vc2UoUHJlc3NSZWNvZ25pemVyLCBfUmVjb2duaXplcik7XG5cbiAgZnVuY3Rpb24gUHJlc3NSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVjb2duaXplci5jYWxsKHRoaXMsIF9leHRlbmRzKHtcbiAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICB0aW1lOiAyNTEsXG4gICAgICAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgdGhyZXNob2xkOiA5XG4gICAgfSwgb3B0aW9ucykpIHx8IHRoaXM7XG4gICAgX3RoaXMuX3RpbWVyID0gbnVsbDtcbiAgICBfdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBQcmVzc1JlY29nbml6ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5nZXRUb3VjaEFjdGlvbiA9IGZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uKCkge1xuICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX0FVVE9dO1xuICB9O1xuXG4gIF9wcm90by5wcm9jZXNzID0gZnVuY3Rpb24gcHJvY2VzcyhpbnB1dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgdmFyIHZhbGlkTW92ZW1lbnQgPSBpbnB1dC5kaXN0YW5jZSA8IG9wdGlvbnMudGhyZXNob2xkO1xuICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG4gICAgdGhpcy5faW5wdXQgPSBpbnB1dDsgLy8gd2Ugb25seSBhbGxvdyBsaXR0bGUgbW92ZW1lbnRcbiAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG5cbiAgICBpZiAoIXZhbGlkTW92ZW1lbnQgfHwgIXZhbGlkUG9pbnRlcnMgfHwgaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfU1RBUlQpIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG5cbiAgICAgICAgX3RoaXMyLnRyeUVtaXQoKTtcbiAgICAgIH0sIG9wdGlvbnMudGltZSk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHJldHVybiBTVEFURV9SRUNPR05JWkVEO1xuICAgIH1cblxuICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gIH07XG5cbiAgX3Byb3RvLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoaW5wdXQpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpbnB1dCAmJiBpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9FTkQpIHtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIFwidXBcIiwgaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCwgdGhpcy5faW5wdXQpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUHJlc3NSZWNvZ25pemVyO1xufShSZWNvZ25pemVyKTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc2V0IGlmIERPTSBldmVudHMgYXJlIGJlaW5nIHRyaWdnZXJlZC5cbiAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkb21FdmVudHM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICogV2hlbiBzZXQgdG8gYGNvbXB1dGVgIGl0IHdpbGwgbWFnaWNhbGx5IHNldCB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgYWRkZWQgcmVjb2duaXplcnMuXG4gICAqIEB0eXBlIHtTdHJpbmd9XG4gICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICovXG4gIHRvdWNoQWN0aW9uOiBUT1VDSF9BQ1RJT05fQ09NUFVURSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGVuYWJsZTogdHJ1ZSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgKiBDaGFuZ2UgdGhlIHBhcmVudCBpbnB1dCB0YXJnZXQgZWxlbWVudC5cbiAgICogSWYgTnVsbCwgdGhlbiBpdCBpcyBiZWluZyBzZXQgdGhlIHRvIG1haW4gZWxlbWVudC5cbiAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBmb3JjZSBhbiBpbnB1dCBjbGFzc1xuICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5wdXRDbGFzczogbnVsbCxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICogQWRkIHRoZW0gdG8gdGhpcyBtZXRob2QgYW5kIHRoZXkgd2lsbCBiZSBzZXQgd2hlbiBjcmVhdGluZyBhIG5ldyBNYW5hZ2VyLlxuICAgKiBAbmFtZXNwYWNlXG4gICAqL1xuICBjc3NQcm9wczoge1xuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogRGlzYWJsZXMgdGV4dCBzZWxlY3Rpb24gdG8gaW1wcm92ZSB0aGUgZHJhZ2dpbmcgZ2VzdHVyZS4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlclNlbGVjdDogXCJub25lXCIsXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIERpc2FibGUgdGhlIFdpbmRvd3MgUGhvbmUgZ3JpcHBlcnMgd2hlbiBwcmVzc2luZyBhbiBlbGVtZW50LlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdG91Y2hTZWxlY3Q6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAqIE9uIGlPUywgd2hlbiB5b3UgdG91Y2ggYW5kIGhvbGQgYSB0b3VjaCB0YXJnZXQgc3VjaCBhcyBhIGxpbmssIFNhZmFyaSBkaXNwbGF5c1xuICAgICAqIGEgY2FsbG91dCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rLiBUaGlzIHByb3BlcnR5IGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGF0IGNhbGxvdXQuXG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgKi9cbiAgICB0b3VjaENhbGxvdXQ6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB6b29taW5nIGlzIGVuYWJsZWQuIFVzZWQgYnkgSUUxMD5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAqL1xuICAgIGNvbnRlbnRab29taW5nOiBcIm5vbmVcIixcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICovXG4gICAgdXNlckRyYWc6IFwibm9uZVwiLFxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBPdmVycmlkZXMgdGhlIGhpZ2hsaWdodCBjb2xvciBzaG93biB3aGVuIHRoZSB1c2VyIHRhcHMgYSBsaW5rIG9yIGEgSmF2YVNjcmlwdFxuICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdyZ2JhKDAsMCwwLDApJ1xuICAgICAqL1xuICAgIHRhcEhpZ2hsaWdodENvbG9yOiBcInJnYmEoMCwwLDAsMClcIlxuICB9XG59O1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogRGVmYXVsdCByZWNvZ25pemVyIHNldHVwIHdoZW4gY2FsbGluZyBgSGFtbWVyKClgXG4gKiBXaGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIgdGhlc2Ugd2lsbCBiZSBza2lwcGVkLlxuICogVGhpcyBpcyBzZXBhcmF0ZWQgd2l0aCBvdGhlciBkZWZhdWx0cyBiZWNhdXNlIG9mIHRyZWUtc2hha2luZy5cbiAqIEB0eXBlIHtBcnJheX1cbiAqL1xuXG52YXIgcHJlc2V0ID0gW1tSb3RhdGVSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn1dLCBbUGluY2hSZWNvZ25pemVyLCB7XG4gIGVuYWJsZTogZmFsc2Vcbn0sIFsncm90YXRlJ11dLCBbU3dpcGVSZWNvZ25pemVyLCB7XG4gIGRpcmVjdGlvbjogRElSRUNUSU9OX0hPUklaT05UQUxcbn1dLCBbUGFuUmVjb2duaXplciwge1xuICBkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMXG59LCBbJ3N3aXBlJ11dLCBbVGFwUmVjb2duaXplcl0sIFtUYXBSZWNvZ25pemVyLCB7XG4gIGV2ZW50OiAnZG91YmxldGFwJyxcbiAgdGFwczogMlxufSwgWyd0YXAnXV0sIFtQcmVzc1JlY29nbml6ZXJdXTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcbi8qKlxuICogQHByaXZhdGVcbiAqIGFkZC9yZW1vdmUgdGhlIGNzcyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gbWFuYWdlci5vcHRpb25zLmNzc1Byb3BzXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gYWRkXG4gKi9cblxuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gIHZhciBlbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuXG4gIGlmICghZWxlbWVudC5zdHlsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwcm9wO1xuICBlYWNoKG1hbmFnZXIub3B0aW9ucy5jc3NQcm9wcywgZnVuY3Rpb24gKHZhbHVlLCBuYW1lKSB7XG4gICAgcHJvcCA9IHByZWZpeGVkKGVsZW1lbnQuc3R5bGUsIG5hbWUpO1xuXG4gICAgaWYgKGFkZCkge1xuICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGVbcHJvcF0gPSBtYW5hZ2VyLm9sZENzc1Byb3BzW3Byb3BdIHx8IFwiXCI7XG4gICAgfVxuICB9KTtcblxuICBpZiAoIWFkZCkge1xuICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgfVxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyaWdnZXJEb21FdmVudChldmVudCwgZGF0YSkge1xuICB2YXIgZ2VzdHVyZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgZ2VzdHVyZUV2ZW50LmluaXRFdmVudChldmVudCwgdHJ1ZSwgdHJ1ZSk7XG4gIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgZGF0YS50YXJnZXQuZGlzcGF0Y2hFdmVudChnZXN0dXJlRXZlbnQpO1xufVxuLyoqXG4qIEBwcml2YXRlXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuXG5cbnZhciBNYW5hZ2VyID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMub3B0aW9ucyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMucmVjb2duaXplcnMgPSBbXTtcbiAgICB0aGlzLm9sZENzc1Byb3BzID0ge307XG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmlucHV0ID0gY3JlYXRlSW5wdXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnRvdWNoQWN0aW9uID0gbmV3IFRvdWNoQWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG4gICAgZWFjaCh0aGlzLm9wdGlvbnMucmVjb2duaXplcnMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgcmVjb2duaXplciA9IF90aGlzLmFkZChuZXcgaXRlbVswXShpdGVtWzFdKSk7XG5cbiAgICAgIGl0ZW1bMl0gJiYgcmVjb2duaXplci5yZWNvZ25pemVXaXRoKGl0ZW1bMl0pO1xuICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBzZXQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7TWFuYWdlcn1cbiAgICovXG5cblxuICB2YXIgX3Byb3RvID0gTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgYXNzaWduJDEodGhpcy5vcHRpb25zLCBvcHRpb25zKTsgLy8gT3B0aW9ucyB0aGF0IG5lZWQgYSBsaXR0bGUgbW9yZSBzZXR1cFxuXG4gICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogc3RvcCByZWNvZ25pemluZyBmb3IgdGhpcyBzZXNzaW9uLlxuICAgKiBUaGlzIHNlc3Npb24gd2lsbCBiZSBkaXNjYXJkZWQsIHdoZW4gYSBuZXcgW2lucHV0XXN0YXJ0IGV2ZW50IGlzIGZpcmVkLlxuICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2VdXG4gICAqL1xuXG5cbiAgX3Byb3RvLnN0b3AgPSBmdW5jdGlvbiBzdG9wKGZvcmNlKSB7XG4gICAgdGhpcy5zZXNzaW9uLnN0b3BwZWQgPSBmb3JjZSA/IEZPUkNFRF9TVE9QIDogU1RPUDtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJ1biB0aGUgcmVjb2duaXplcnMhXG4gICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICogaXQgd2Fsa3MgdGhyb3VnaCBhbGwgdGhlIHJlY29nbml6ZXJzIGFuZCB0cmllcyB0byBkZXRlY3QgdGhlIGdlc3R1cmUgdGhhdCBpcyBiZWluZyBtYWRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dERhdGFcbiAgICovXG5cblxuICBfcHJvdG8ucmVjb2duaXplID0gZnVuY3Rpb24gcmVjb2duaXplKGlucHV0RGF0YSkge1xuICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xuXG4gICAgaWYgKHNlc3Npb24uc3RvcHBlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gcnVuIHRoZSB0b3VjaC1hY3Rpb24gcG9seWZpbGxcblxuXG4gICAgdGhpcy50b3VjaEFjdGlvbi5wcmV2ZW50RGVmYXVsdHMoaW5wdXREYXRhKTtcbiAgICB2YXIgcmVjb2duaXplcjtcbiAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzOyAvLyB0aGlzIGhvbGRzIHRoZSByZWNvZ25pemVyIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAvLyBzbyB0aGUgcmVjb2duaXplcidzIHN0YXRlIG5lZWRzIHRvIGJlIEJFR0FOLCBDSEFOR0VELCBFTkRFRCBvciBSRUNPR05JWkVEXG4gICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuXG4gICAgdmFyIGN1clJlY29nbml6ZXIgPSBzZXNzaW9uLmN1clJlY29nbml6ZXI7IC8vIHJlc2V0IHdoZW4gdGhlIGxhc3QgcmVjb2duaXplciBpcyByZWNvZ25pemVkXG4gICAgLy8gb3Igd2hlbiB3ZSdyZSBpbiBhIG5ldyBzZXNzaW9uXG5cbiAgICBpZiAoIWN1clJlY29nbml6ZXIgfHwgY3VyUmVjb2duaXplciAmJiBjdXJSZWNvZ25pemVyLnN0YXRlICYgU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gbnVsbDtcbiAgICAgIGN1clJlY29nbml6ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07IC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG5cbiAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQgIT09IEZPUkNFRF9TVE9QICYmICggLy8gMVxuICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PT0gY3VyUmVjb2duaXplciB8fCAvLyAyXG4gICAgICByZWNvZ25pemVyLmNhblJlY29nbml6ZVdpdGgoY3VyUmVjb2duaXplcikpKSB7XG4gICAgICAgIC8vIDNcbiAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29nbml6ZXIucmVzZXQoKTtcbiAgICAgIH0gLy8gaWYgdGhlIHJlY29nbml6ZXIgaGFzIGJlZW4gcmVjb2duaXppbmcgdGhlIGlucHV0IGFzIGEgdmFsaWQgZ2VzdHVyZSwgd2Ugd2FudCB0byBzdG9yZSB0aGlzIG9uZSBhcyB0aGVcbiAgICAgIC8vIGN1cnJlbnQgYWN0aXZlIHJlY29nbml6ZXIuIGJ1dCBvbmx5IGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBhY3RpdmUgcmVjb2duaXplclxuXG5cbiAgICAgIGlmICghY3VyUmVjb2duaXplciAmJiByZWNvZ25pemVyLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEKSkge1xuICAgICAgICBzZXNzaW9uLmN1clJlY29nbml6ZXIgPSByZWNvZ25pemVyO1xuICAgICAgICBjdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGdldCBhIHJlY29nbml6ZXIgYnkgaXRzIGV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICogQHJldHVybnMge1JlY29nbml6ZXJ8TnVsbH1cbiAgICovXG5cblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHJlY29nbml6ZXIpIHtcbiAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgIH1cblxuICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY29nbml6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVjb2duaXplcnNbaV0ub3B0aW9ucy5ldmVudCA9PT0gcmVjb2duaXplcikge1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcnNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBAcHJpdmF0ZSBhZGQgYSByZWNvZ25pemVyIHRvIHRoZSBtYW5hZ2VyXG4gICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICogQHBhcmFtIHtSZWNvZ25pemVyfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfE1hbmFnZXJ9XG4gICAqL1xuXG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChyZWNvZ25pemVyKSB7XG4gICAgaWYgKGludm9rZUFycmF5QXJnKHJlY29nbml6ZXIsIFwiYWRkXCIsIHRoaXMpKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IC8vIHJlbW92ZSBleGlzdGluZ1xuXG5cbiAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuXG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLnJlbW92ZShleGlzdGluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWNvZ25pemVycy5wdXNoKHJlY29nbml6ZXIpO1xuICAgIHJlY29nbml6ZXIubWFuYWdlciA9IHRoaXM7XG4gICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIHJlbW92ZSBhIHJlY29nbml6ZXIgYnkgbmFtZSBvciBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ8U3RyaW5nfSByZWNvZ25pemVyXG4gICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgKi9cblxuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocmVjb2duaXplcikge1xuICAgIGlmIChpbnZva2VBcnJheUFyZyhyZWNvZ25pemVyLCBcInJlbW92ZVwiLCB0aGlzKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTsgLy8gbGV0J3MgbWFrZSBzdXJlIHRoaXMgcmVjb2duaXplciBleGlzdHNcblxuICAgIGlmIChyZWNvZ25pemVyKSB7XG4gICAgICB2YXIgcmVjb2duaXplcnMgPSB0aGlzLnJlY29nbml6ZXJzO1xuICAgICAgdmFyIGluZGV4ID0gaW5BcnJheShyZWNvZ25pemVycywgdGFyZ2V0UmVjb2duaXplcik7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy50b3VjaEFjdGlvbi51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIGJpbmQgZXZlbnRcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub24gPSBmdW5jdGlvbiBvbihldmVudHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQgfHwgaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzO1xuICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICBoYW5kbGVyc1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEBwcml2YXRlIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2hhbmRsZXJdXG4gICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICovXG5cblxuICBfcHJvdG8ub2ZmID0gZnVuY3Rpb24gb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gdGhpcy5oYW5kbGVycztcbiAgICBlYWNoKHNwbGl0U3RyKGV2ZW50cyksIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVyc1tldmVudF0gJiYgaGFuZGxlcnNbZXZlbnRdLnNwbGljZShpbkFycmF5KGhhbmRsZXJzW2V2ZW50XSwgaGFuZGxlciksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogQHByaXZhdGUgZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgKi9cblxuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgZGF0YSkge1xuICAgIC8vIHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGRvbSBldmVudHNcbiAgICBpZiAodGhpcy5vcHRpb25zLmRvbUV2ZW50cykge1xuICAgICAgdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKTtcbiAgICB9IC8vIG5vIGhhbmRsZXJzLCBzbyBza2lwIGl0IGFsbFxuXG5cbiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzW2V2ZW50XSAmJiB0aGlzLmhhbmRsZXJzW2V2ZW50XS5zbGljZSgpO1xuXG4gICAgaWYgKCFoYW5kbGVycyB8fCAhaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGF0YS50eXBlID0gZXZlbnQ7XG5cbiAgICBkYXRhLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZGF0YS5zcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH07XG5cbiAgICB2YXIgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgaGFuZGxlcnNbaV0oZGF0YSk7XG4gICAgICBpKys7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogZGVzdHJveSB0aGUgbWFuYWdlciBhbmQgdW5iaW5kcyBhbGwgZXZlbnRzXG4gICAqIGl0IGRvZXNuJ3QgdW5iaW5kIGRvbSBldmVudHMsIHRoYXQgaXMgdGhlIHVzZXIgb3duIHJlc3BvbnNpYmlsaXR5XG4gICAqL1xuXG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuZWxlbWVudCAmJiB0b2dnbGVDc3NQcm9wcyh0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgIHRoaXMuc2Vzc2lvbiA9IHt9O1xuICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIE1hbmFnZXI7XG59KCk7XG5cbnZhciBTSU5HTEVfVE9VQ0hfSU5QVVRfTUFQID0ge1xuICB0b3VjaHN0YXJ0OiBJTlBVVF9TVEFSVCxcbiAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICB0b3VjaGVuZDogSU5QVVRfRU5ELFxuICB0b3VjaGNhbmNlbDogSU5QVVRfQ0FOQ0VMXG59O1xudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcbi8qKlxuICogQHByaXZhdGVcbiAqIFRvdWNoIGV2ZW50cyBpbnB1dFxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBJbnB1dFxuICovXG5cbnZhciBTaW5nbGVUb3VjaElucHV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uIChfSW5wdXQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU2luZ2xlVG91Y2hJbnB1dCwgX0lucHV0KTtcblxuICBmdW5jdGlvbiBTaW5nbGVUb3VjaElucHV0KCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBwcm90byA9IFNpbmdsZVRvdWNoSW5wdXQucHJvdG90eXBlO1xuICAgIHByb3RvLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgcHJvdG8uZXZXaW4gPSBTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUztcbiAgICBfdGhpcyA9IF9JbnB1dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgX3RoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTaW5nbGVUb3VjaElucHV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoZXYpIHtcbiAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07IC8vIHNob3VsZCB3ZSBoYW5kbGUgdGhlIHRvdWNoIGV2ZW50cz9cblxuICAgIGlmICh0eXBlID09PSBJTlBVVF9TVEFSVCkge1xuICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0b3VjaGVzID0gbm9ybWFsaXplU2luZ2xlVG91Y2hlcy5jYWxsKHRoaXMsIGV2LCB0eXBlKTsgLy8gd2hlbiBkb25lLCByZXNldCB0aGUgc3RhcnRlZCBzdGF0ZVxuXG4gICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKHRoaXMubWFuYWdlciwgdHlwZSwge1xuICAgICAgcG9pbnRlcnM6IHRvdWNoZXNbMF0sXG4gICAgICBjaGFuZ2VkUG9pbnRlcnM6IHRvdWNoZXNbMV0sXG4gICAgICBwb2ludGVyVHlwZTogSU5QVVRfVFlQRV9UT1VDSCxcbiAgICAgIHNyY0V2ZW50OiBldlxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBTaW5nbGVUb3VjaElucHV0O1xufShJbnB1dCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gIHZhciBjaGFuZ2VkID0gdG9BcnJheShldi5jaGFuZ2VkVG91Y2hlcyk7XG5cbiAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgIGFsbCA9IHVuaXF1ZUFycmF5KGFsbC5jb25jYXQoY2hhbmdlZCksICdpZGVudGlmaWVyJywgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHdyYXAgYSBtZXRob2Qgd2l0aCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIHN0YWNrIHRyYWNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2RcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB3cmFwcGluZyB0aGUgc3VwcGxpZWQgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBkZXByZWNhdGUobWV0aG9kLCBuYW1lLCBtZXNzYWdlKSB7XG4gIHZhciBkZXByZWNhdGlvbk1lc3NhZ2UgPSBcIkRFUFJFQ0FURUQgTUVUSE9EOiBcIiArIG5hbWUgKyBcIlxcblwiICsgbWVzc2FnZSArIFwiIEFUIFxcblwiO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICB2YXIgc3RhY2sgPSBlICYmIGUuc3RhY2sgPyBlLnN0YWNrLnJlcGxhY2UoL15bXlxcKF0rP1tcXG4kXS9nbSwgJycpLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJykucmVwbGFjZSgvXk9iamVjdC48YW5vbnltb3VzPlxccypcXCgvZ20sICd7YW5vbnltb3VzfSgpQCcpIDogJ1Vua25vd24gU3RhY2sgVHJhY2UnO1xuICAgIHZhciBsb2cgPSB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUud2FybiB8fCB3aW5kb3cuY29uc29sZS5sb2cpO1xuXG4gICAgaWYgKGxvZykge1xuICAgICAgbG9nLmNhbGwod2luZG93LmNvbnNvbGUsIGRlcHJlY2F0aW9uTWVzc2FnZSwgc3RhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRob2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG5cbnZhciBleHRlbmQgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYywgbWVyZ2UpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBrZXlzLmxlbmd0aCkge1xuICAgIGlmICghbWVyZ2UgfHwgbWVyZ2UgJiYgZGVzdFtrZXlzW2ldXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXN0W2tleXNbaV1dID0gc3JjW2tleXNbaV1dO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufSwgJ2V4dGVuZCcsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xuXG52YXIgbWVyZ2UgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGRlc3QsIHNyYykge1xuICByZXR1cm4gZXh0ZW5kKGRlc3QsIHNyYywgdHJ1ZSk7XG59LCAnbWVyZ2UnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBzaW1wbGUgY2xhc3MgaW5oZXJpdGFuY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBiYXNlXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdXG4gKi9cblxuZnVuY3Rpb24gaW5oZXJpdChjaGlsZCwgYmFzZSwgcHJvcGVydGllcykge1xuICB2YXIgYmFzZVAgPSBiYXNlLnByb3RvdHlwZTtcbiAgdmFyIGNoaWxkUDtcbiAgY2hpbGRQID0gY2hpbGQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShiYXNlUCk7XG4gIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICBjaGlsZFAuX3N1cGVyID0gYmFzZVA7XG5cbiAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICBhc3NpZ24kMShjaGlsZFAsIHByb3BlcnRpZXMpO1xuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIHNpbXBsZSBmdW5jdGlvbiBiaW5kXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gYmluZEZuKGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgIHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cblxudmFyIEhhbW1lciA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIHZhciBIYW1tZXIgPVxuICAvKipcbiAgICAqIEBwcml2YXRlXG4gICAgKiBAY29uc3Qge3N0cmluZ31cbiAgICAqL1xuICBmdW5jdGlvbiBIYW1tZXIoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1hbmFnZXIoZWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgcmVjb2duaXplcnM6IHByZXNldC5jb25jYXQoKVxuICAgIH0sIG9wdGlvbnMpKTtcbiAgfTtcblxuICBIYW1tZXIuVkVSU0lPTiA9IFwiMi4wLjE3LXJjXCI7XG4gIEhhbW1lci5ESVJFQ1RJT05fQUxMID0gRElSRUNUSU9OX0FMTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9ET1dOID0gRElSRUNUSU9OX0RPV047XG4gIEhhbW1lci5ESVJFQ1RJT05fTEVGVCA9IERJUkVDVElPTl9MRUZUO1xuICBIYW1tZXIuRElSRUNUSU9OX1JJR0hUID0gRElSRUNUSU9OX1JJR0hUO1xuICBIYW1tZXIuRElSRUNUSU9OX1VQID0gRElSRUNUSU9OX1VQO1xuICBIYW1tZXIuRElSRUNUSU9OX0hPUklaT05UQUwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9WRVJUSUNBTDtcbiAgSGFtbWVyLkRJUkVDVElPTl9OT05FID0gRElSRUNUSU9OX05PTkU7XG4gIEhhbW1lci5ESVJFQ1RJT05fRE9XTiA9IERJUkVDVElPTl9ET1dOO1xuICBIYW1tZXIuSU5QVVRfU1RBUlQgPSBJTlBVVF9TVEFSVDtcbiAgSGFtbWVyLklOUFVUX01PVkUgPSBJTlBVVF9NT1ZFO1xuICBIYW1tZXIuSU5QVVRfRU5EID0gSU5QVVRfRU5EO1xuICBIYW1tZXIuSU5QVVRfQ0FOQ0VMID0gSU5QVVRfQ0FOQ0VMO1xuICBIYW1tZXIuU1RBVEVfUE9TU0lCTEUgPSBTVEFURV9QT1NTSUJMRTtcbiAgSGFtbWVyLlNUQVRFX0JFR0FOID0gU1RBVEVfQkVHQU47XG4gIEhhbW1lci5TVEFURV9DSEFOR0VEID0gU1RBVEVfQ0hBTkdFRDtcbiAgSGFtbWVyLlNUQVRFX0VOREVEID0gU1RBVEVfRU5ERUQ7XG4gIEhhbW1lci5TVEFURV9SRUNPR05JWkVEID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgSGFtbWVyLlNUQVRFX0NBTkNFTExFRCA9IFNUQVRFX0NBTkNFTExFRDtcbiAgSGFtbWVyLlNUQVRFX0ZBSUxFRCA9IFNUQVRFX0ZBSUxFRDtcbiAgSGFtbWVyLk1hbmFnZXIgPSBNYW5hZ2VyO1xuICBIYW1tZXIuSW5wdXQgPSBJbnB1dDtcbiAgSGFtbWVyLlRvdWNoQWN0aW9uID0gVG91Y2hBY3Rpb247XG4gIEhhbW1lci5Ub3VjaElucHV0ID0gVG91Y2hJbnB1dDtcbiAgSGFtbWVyLk1vdXNlSW5wdXQgPSBNb3VzZUlucHV0O1xuICBIYW1tZXIuUG9pbnRlckV2ZW50SW5wdXQgPSBQb2ludGVyRXZlbnRJbnB1dDtcbiAgSGFtbWVyLlRvdWNoTW91c2VJbnB1dCA9IFRvdWNoTW91c2VJbnB1dDtcbiAgSGFtbWVyLlNpbmdsZVRvdWNoSW5wdXQgPSBTaW5nbGVUb3VjaElucHV0O1xuICBIYW1tZXIuUmVjb2duaXplciA9IFJlY29nbml6ZXI7XG4gIEhhbW1lci5BdHRyUmVjb2duaXplciA9IEF0dHJSZWNvZ25pemVyO1xuICBIYW1tZXIuVGFwID0gVGFwUmVjb2duaXplcjtcbiAgSGFtbWVyLlBhbiA9IFBhblJlY29nbml6ZXI7XG4gIEhhbW1lci5Td2lwZSA9IFN3aXBlUmVjb2duaXplcjtcbiAgSGFtbWVyLlBpbmNoID0gUGluY2hSZWNvZ25pemVyO1xuICBIYW1tZXIuUm90YXRlID0gUm90YXRlUmVjb2duaXplcjtcbiAgSGFtbWVyLlByZXNzID0gUHJlc3NSZWNvZ25pemVyO1xuICBIYW1tZXIub24gPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLm9mZiA9IHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICBIYW1tZXIuZWFjaCA9IGVhY2g7XG4gIEhhbW1lci5tZXJnZSA9IG1lcmdlO1xuICBIYW1tZXIuZXh0ZW5kID0gZXh0ZW5kO1xuICBIYW1tZXIuYmluZEZuID0gYmluZEZuO1xuICBIYW1tZXIuYXNzaWduID0gYXNzaWduJDE7XG4gIEhhbW1lci5pbmhlcml0ID0gaW5oZXJpdDtcbiAgSGFtbWVyLmJpbmRGbiA9IGJpbmRGbjtcbiAgSGFtbWVyLnByZWZpeGVkID0gcHJlZml4ZWQ7XG4gIEhhbW1lci50b0FycmF5ID0gdG9BcnJheTtcbiAgSGFtbWVyLmluQXJyYXkgPSBpbkFycmF5O1xuICBIYW1tZXIudW5pcXVlQXJyYXkgPSB1bmlxdWVBcnJheTtcbiAgSGFtbWVyLnNwbGl0U3RyID0gc3BsaXRTdHI7XG4gIEhhbW1lci5ib29sT3JGbiA9IGJvb2xPckZuO1xuICBIYW1tZXIuaGFzUGFyZW50ID0gaGFzUGFyZW50O1xuICBIYW1tZXIuYWRkRXZlbnRMaXN0ZW5lcnMgPSBhZGRFdmVudExpc3RlbmVycztcbiAgSGFtbWVyLnJlbW92ZUV2ZW50TGlzdGVuZXJzID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gIEhhbW1lci5kZWZhdWx0cyA9IGFzc2lnbiQxKHt9LCBkZWZhdWx0cywge1xuICAgIHByZXNldDogcHJlc2V0XG4gIH0pO1xuICByZXR1cm4gSGFtbWVyO1xufSgpO1xuXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cblxudmFyIGRlZmF1bHRzJDEgPSBIYW1tZXIuZGVmYXVsdHM7XG5cbmV4cG9ydCBkZWZhdWx0IEhhbW1lcjtcbmV4cG9ydCB7IElOUFVUX1NUQVJULCBJTlBVVF9NT1ZFLCBJTlBVVF9FTkQsIElOUFVUX0NBTkNFTCwgU1RBVEVfUE9TU0lCTEUsIFNUQVRFX0JFR0FOLCBTVEFURV9DSEFOR0VELCBTVEFURV9FTkRFRCwgU1RBVEVfUkVDT0dOSVpFRCwgU1RBVEVfQ0FOQ0VMTEVELCBTVEFURV9GQUlMRUQsIERJUkVDVElPTl9OT05FLCBESVJFQ1RJT05fTEVGVCwgRElSRUNUSU9OX1JJR0hULCBESVJFQ1RJT05fVVAsIERJUkVDVElPTl9ET1dOLCBESVJFQ1RJT05fSE9SSVpPTlRBTCwgRElSRUNUSU9OX1ZFUlRJQ0FMLCBESVJFQ1RJT05fQUxMLCBNYW5hZ2VyLCBJbnB1dCwgVG91Y2hBY3Rpb24sIFRvdWNoSW5wdXQsIE1vdXNlSW5wdXQsIFBvaW50ZXJFdmVudElucHV0LCBUb3VjaE1vdXNlSW5wdXQsIFNpbmdsZVRvdWNoSW5wdXQsIFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCBUYXBSZWNvZ25pemVyIGFzIFRhcCwgUGFuUmVjb2duaXplciBhcyBQYW4sIFN3aXBlUmVjb2duaXplciBhcyBTd2lwZSwgUGluY2hSZWNvZ25pemVyIGFzIFBpbmNoLCBSb3RhdGVSZWNvZ25pemVyIGFzIFJvdGF0ZSwgUHJlc3NSZWNvZ25pemVyIGFzIFByZXNzLCBhZGRFdmVudExpc3RlbmVycyBhcyBvbiwgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMgYXMgb2ZmLCBlYWNoLCBtZXJnZSwgZXh0ZW5kLCBhc3NpZ24kMSBhcyBhc3NpZ24sIGluaGVyaXQsIGJpbmRGbiwgcHJlZml4ZWQsIHRvQXJyYXksIGluQXJyYXksIHVuaXF1ZUFycmF5LCBzcGxpdFN0ciwgYm9vbE9yRm4sIGhhc1BhcmVudCwgYWRkRXZlbnRMaXN0ZW5lcnMsIHJlbW92ZUV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0cyQxIGFzIGRlZmF1bHRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW1tZXIuZXNtLmpzLm1hcFxuIiwgIi8qKlxuICogdmlzLXV0aWxcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92aXNqcy92aXMtdXRpbFxuICpcbiAqIHV0aWxpdGllIGNvbGxlY3Rpb24gZm9yIHZpc2pzXG4gKlxuICogQHZlcnNpb24gNS4wLjdcbiAqIEBkYXRlICAgIDIwMjMtMTEtMjBUMDk6MDY6NTEuMDY3WlxuICpcbiAqIEBjb3B5cmlnaHQgKGMpIDIwMTEtMjAxNyBBbG1lbmRlIEIuViwgaHR0cDovL2FsbWVuZGUuY29tXG4gKiBAY29weXJpZ2h0IChjKSAyMDE3LTIwMTkgdmlzanMgY29udHJpYnV0b3JzLCBodHRwczovL2dpdGh1Yi5jb20vdmlzanNcbiAqXG4gKiBAbGljZW5zZVxuICogdmlzLmpzIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgYm90aFxuICpcbiAqICAgMS4gVGhlIEFwYWNoZSAyLjAgTGljZW5zZVxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgIGFuZFxuICpcbiAqICAgMi4gVGhlIE1JVCBMaWNlbnNlXG4gKiAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiB2aXMuanMgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGVpdGhlciBsaWNlbnNlLlxuICovXG5cbmltcG9ydCBFbWl0dGVyIGZyb20gJ2NvbXBvbmVudC1lbWl0dGVyJztcbmltcG9ydCBSZWFsSGFtbWVyIGZyb20gJ0BlZ2pzL2hhbW1lcmpzJztcblxuLyoqXHJcbiAqIFVzZSB0aGlzIHN5bWJvbCB0byBkZWxldGUgcHJvcGVyaWVzIGluIGRlZXBPYmplY3RBc3NpZ24uXHJcbiAqL1xyXG5jb25zdCBERUxFVEUgPSBTeW1ib2woXCJERUxFVEVcIik7XHJcbi8qKlxyXG4gKiBQdXJlIHZlcnNpb24gb2YgZGVlcE9iamVjdEFzc2lnbiwgaXQgZG9lc24ndCBtb2RpZnkgYW55IG9mIGl0J3MgYXJndW1lbnRzLlxyXG4gKlxyXG4gKiBAcGFyYW0gYmFzZSAtIFRoZSBiYXNlIG9iamVjdCB0aGF0IGZ1bGxmaWxzIHRoZSB3aG9sZSBpbnRlcmZhY2UgVC5cclxuICogQHBhcmFtIHVwZGF0ZXMgLSBVcGRhdGVzIHRoYXQgbWF5IGNoYW5nZSBvciBkZWxldGUgcHJvcHMuXHJcbiAqIEByZXR1cm5zIEEgYnJhbmQgbmV3IGluc3RhbmNlIHdpdGggYWxsIHRoZSBzdXBwbGllZCBvYmplY3RzIGRlZXBseSBtZXJnZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBwdXJlRGVlcE9iamVjdEFzc2lnbihiYXNlLCAuLi51cGRhdGVzKSB7XHJcbiAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbih7fSwgYmFzZSwgLi4udXBkYXRlcyk7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgdmVyc2lvbiBvZiBvYmplY3QgYXNzaWduIHdpdGggYWRkaXRpb25hbCBkZWxldGluZyBieSB0aGUgREVMRVRFIHN5bWJvbC5cclxuICpcclxuICogQHBhcmFtIHZhbHVlcyAtIE9iamVjdHMgdG8gYmUgZGVlcGx5IG1lcmdlZC5cclxuICogQHJldHVybnMgVGhlIGZpcnN0IG9iamVjdCBmcm9tIHZhbHVlcy5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBPYmplY3RBc3NpZ24oLi4udmFsdWVzKSB7XHJcbiAgICBjb25zdCBtZXJnZWQgPSBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKTtcclxuICAgIHN0cmlwRGVsZXRlKG1lcmdlZCk7XHJcbiAgICByZXR1cm4gbWVyZ2VkO1xyXG59XHJcbi8qKlxyXG4gKiBEZWVwIHZlcnNpb24gb2Ygb2JqZWN0IGFzc2lnbiB3aXRoIGFkZGl0aW9uYWwgZGVsZXRpbmcgYnkgdGhlIERFTEVURSBzeW1ib2wuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoaXMgZG9lc24ndCBzdHJpcCB0aGUgREVMRVRFIHN5bWJvbHMgc28gdGhleSBtYXkgZW5kIHVwIGluIHRoZSBmaW5hbCBvYmplY3QuXHJcbiAqIEBwYXJhbSB2YWx1ZXMgLSBPYmplY3RzIHRvIGJlIGRlZXBseSBtZXJnZWQuXHJcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBvYmplY3QgZnJvbSB2YWx1ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwT2JqZWN0QXNzaWduTm9uZW50cnkoLi4udmFsdWVzKSB7XHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVzWzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5KGRlZXBPYmplY3RBc3NpZ24odmFsdWVzWzBdLCB2YWx1ZXNbMV0pLCAuLi52YWx1ZXMuc2xpY2UoMikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYSA9IHZhbHVlc1swXTtcclxuICAgIGNvbnN0IGIgPSB2YWx1ZXNbMV07XHJcbiAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICBhLnNldFRpbWUoYi5nZXRUaW1lKCkpO1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBwcm9wIG9mIFJlZmxlY3Qub3duS2V5cyhiKSkge1xyXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGIsIHByb3ApKSA7XHJcbiAgICAgICAgZWxzZSBpZiAoYltwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIGJbcHJvcF0gIT09IG51bGwgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgdHlwZW9mIGJbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYVtwcm9wXSkgJiZcclxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcclxuICAgICAgICAgICAgYVtwcm9wXSA9IGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeShhW3Byb3BdLCBiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFbcHJvcF0gPSBjbG9uZShiW3Byb3BdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG4vKipcclxuICogRGVlcCBjbG9uZSBnaXZlbiBvYmplY3Qgb3IgYXJyYXkuIEluIGNhc2Ugb2YgcHJpbWl0aXZlIHNpbXBseSByZXR1cm4uXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gQW55dGhpbmcuXHJcbiAqIEByZXR1cm5zIERlZXAgY2xvbmVkIG9iamVjdC9hcnJheSBvciB1bmNoYW5nZWQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGNsb25lKGEpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIGEubWFwKCh2YWx1ZSkgPT4gY2xvbmUodmFsdWUpKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiBhID09PSBcIm9iamVjdFwiICYmIGEgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGEuZ2V0VGltZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZXBPYmplY3RBc3NpZ25Ob25lbnRyeSh7fSwgYSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogU3RyaXAgREVMRVRFIGZyb20gZ2l2ZW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIE9iamVjdCB3aGljaCBtYXkgY29udGFpbiBERUxFVEUgYnV0IHdvbid0IGFmdGVyIHRoaXMgaXMgZXhlY3V0ZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBzdHJpcERlbGV0ZShhKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoYSkpIHtcclxuICAgICAgICBpZiAoYVtwcm9wXSA9PT0gREVMRVRFKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYVtwcm9wXSA9PT0gXCJvYmplY3RcIiAmJiBhW3Byb3BdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHN0cmlwRGVsZXRlKGFbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG4vKipcclxuICogU2VlZGFibGUsIGZhc3QgYW5kIHJlYXNvbmFibHkgZ29vZCAobm90IGNyeXB0byBidXQgbW9yZSB0aGFuIG9rYXkgZm9yIG91clxyXG4gKiBuZWVkcykgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIEFkYXB0ZWQgZnJvbSB7QGxpbmsgaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTEwNDI5MTAwNzM2L2h0dHA6Ly9iYWFnb2UuY29tOjgwL2VuL1JhbmRvbU11c2luZ3MvamF2YXNjcmlwdH0uXHJcbiAqIE9yaWdpbmFsIGFsZ29yaXRobSBjcmVhdGVkIGJ5IEpvaGFubmVzIEJhYWfDuGUgXFw8YmFhZ29lXFxAYmFhZ29lLmNvbVxcPiBpbiAyMDEwLlxyXG4gKi9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIGdlbmVyYXRvciBiYXNlZCBvbiBBbGVhIGJ5IEpvaGFubmVzIEJhYWfDuGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBzZWVkIC0gQWxsIHN1cHBsaWVkIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWQgYXMgYSBzZWVkLiBJbiBjYXNlIG5vdGhpbmdcclxuICogaXMgc3VwcGxpZWQgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQgdG8gc2VlZCB0aGUgZ2VuZXJhdG9yLlxyXG4gKiBAcmV0dXJucyBBIHJlYWR5IHRvIHVzZSBzZWVkZWQgZ2VuZXJhdG9yLlxyXG4gKi9cclxuZnVuY3Rpb24gQWxlYSguLi5zZWVkKSB7XHJcbiAgICByZXR1cm4gQWxlYUltcGxlbWVudGF0aW9uKHNlZWQubGVuZ3RoID8gc2VlZCA6IFtEYXRlLm5vdygpXSk7XHJcbn1cclxuLyoqXHJcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFtbQWxlYV1dIHdpdGhvdXQgdXNlciBpbnB1dCB2YWxpZGF0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0gc2VlZCAtIFRoZSBkYXRhIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNlZWQgdGhlIGdlbmVyYXRvci5cclxuICogQHJldHVybnMgQSByZWFkeSB0byB1c2Ugc2VlZGVkIGdlbmVyYXRvci5cclxuICovXHJcbmZ1bmN0aW9uIEFsZWFJbXBsZW1lbnRhdGlvbihzZWVkKSB7XHJcbiAgICBsZXQgW3MwLCBzMSwgczJdID0gbWFzaFNlZWQoc2VlZCk7XHJcbiAgICBsZXQgYyA9IDE7XHJcbiAgICBjb25zdCByYW5kb20gPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxyXG4gICAgICAgIHMwID0gczE7XHJcbiAgICAgICAgczEgPSBzMjtcclxuICAgICAgICByZXR1cm4gKHMyID0gdCAtIChjID0gdCB8IDApKTtcclxuICAgIH07XHJcbiAgICByYW5kb20udWludDMyID0gKCkgPT4gcmFuZG9tKCkgKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgcmFuZG9tLmZyYWN0NTMgPSAoKSA9PiByYW5kb20oKSArICgocmFuZG9tKCkgKiAweDIwMDAwMCkgfCAwKSAqIDEuMTEwMjIzMDI0NjI1MTU2NWUtMTY7IC8vIDJeLTUzXHJcbiAgICByYW5kb20uYWxnb3JpdGhtID0gXCJBbGVhXCI7XHJcbiAgICByYW5kb20uc2VlZCA9IHNlZWQ7XHJcbiAgICByYW5kb20udmVyc2lvbiA9IFwiMC45XCI7XHJcbiAgICByZXR1cm4gcmFuZG9tO1xyXG59XHJcbi8qKlxyXG4gKiBUdXJuIGFyYml0cmFyeSBkYXRhIGludG8gdmFsdWVzIFtbQWxlYUltcGxlbWVudGF0aW9uXV0gY2FuIHVzZSB0byBnZW5lcmF0ZVxyXG4gKiByYW5kb20gbnVtYmVycy5cclxuICpcclxuICogQHBhcmFtIHNlZWQgLSBBcmJpdHJhcnkgZGF0YSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgc2VlZC5cclxuICogQHJldHVybnMgVGhyZWUgbnVtYmVycyB0byB1c2UgYXMgaW5pdGlhbCB2YWx1ZXMgZm9yIFtbQWxlYUltcGxlbWVudGF0aW9uXV0uXHJcbiAqL1xyXG5mdW5jdGlvbiBtYXNoU2VlZCguLi5zZWVkKSB7XHJcbiAgICBjb25zdCBtYXNoID0gTWFzaCgpO1xyXG4gICAgbGV0IHMwID0gbWFzaChcIiBcIik7XHJcbiAgICBsZXQgczEgPSBtYXNoKFwiIFwiKTtcclxuICAgIGxldCBzMiA9IG1hc2goXCIgXCIpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgczAgLT0gbWFzaChzZWVkW2ldKTtcclxuICAgICAgICBpZiAoczAgPCAwKSB7XHJcbiAgICAgICAgICAgIHMwICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMxIC09IG1hc2goc2VlZFtpXSk7XHJcbiAgICAgICAgaWYgKHMxIDwgMCkge1xyXG4gICAgICAgICAgICBzMSArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzMiAtPSBtYXNoKHNlZWRbaV0pO1xyXG4gICAgICAgIGlmIChzMiA8IDApIHtcclxuICAgICAgICAgICAgczIgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW3MwLCBzMSwgczJdO1xyXG59XHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWFzaCBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMgQSBub25wdXJlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYXJiaXRyYXJ5IFtbTWFzaGFibGVdXSBkYXRhIGFuZCB0dXJuc1xyXG4gKiB0aGVtIGludG8gbnVtYmVycy5cclxuICovXHJcbmZ1bmN0aW9uIE1hc2goKSB7XHJcbiAgICBsZXQgbiA9IDB4ZWZjODI0OWQ7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICBjb25zdCBzdHJpbmcgPSBkYXRhLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbiArPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICAgICAgbGV0IGggPSAwLjAyNTE5NjAzMjgyNDE2OTM4ICogbjtcclxuICAgICAgICAgICAgbiA9IGggPj4+IDA7XHJcbiAgICAgICAgICAgIGggLT0gbjtcclxuICAgICAgICAgICAgaCAqPSBuO1xyXG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcclxuICAgICAgICAgICAgaCAtPSBuO1xyXG4gICAgICAgICAgICBuICs9IGggKiAweDEwMDAwMDAwMDsgLy8gMl4zMlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcclxuICAgIH07XHJcbn1cblxuLyoqXG4gKiBTZXR1cCBhIG1vY2sgaGFtbWVyLmpzIG9iamVjdCwgZm9yIHVuaXQgdGVzdGluZy5cbiAqXG4gKiBJbnNwaXJhdGlvbjogaHR0cHM6Ly9naXRodWIuY29tL3ViZXIvZGVjay5nbC9wdWxsLzY1OFxuICpcbiAqIEByZXR1cm5zIHt7b246IG5vb3AsIG9mZjogbm9vcCwgZGVzdHJveTogbm9vcCwgZW1pdDogbm9vcCwgZ2V0OiBnZXR9fVxuICovXG5mdW5jdGlvbiBoYW1tZXJNb2NrKCkge1xuICBjb25zdCBub29wID0gKCkgPT4ge307XG5cbiAgcmV0dXJuIHtcbiAgICBvbjogbm9vcCxcbiAgICBvZmY6IG5vb3AsXG4gICAgZGVzdHJveTogbm9vcCxcbiAgICBlbWl0OiBub29wLFxuXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0OiBub29wLFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBIYW1tZXIkMSA9XG4gIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IHdpbmRvdy5IYW1tZXIgfHwgUmVhbEhhbW1lclxuICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBoYW1tZXIuanMgaXMgb25seSBhdmFpbGFibGUgaW4gYSBicm93c2VyLCBub3QgaW4gbm9kZS5qcy4gUmVwbGFjaW5nIGl0IHdpdGggYSBtb2NrIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIGhhbW1lck1vY2soKTtcbiAgICAgIH07XG5cbi8qKlxuICogVHVybiBhbiBlbGVtZW50IGludG8gYW4gY2xpY2tUb1VzZSBlbGVtZW50LlxuICogV2hlbiBub3QgYWN0aXZlLCB0aGUgZWxlbWVudCBoYXMgYSB0cmFuc3BhcmVudCBvdmVybGF5LiBXaGVuIHRoZSBvdmVybGF5IGlzXG4gKiBjbGlja2VkLCB0aGUgbW9kZSBpcyBjaGFuZ2VkIHRvIGFjdGl2ZS5cbiAqIFdoZW4gYWN0aXZlLCB0aGUgZWxlbWVudCBpcyBkaXNwbGF5ZWQgd2l0aCBhIGJsdWUgYm9yZGVyIGFyb3VuZCBpdCwgYW5kXG4gKiB0aGUgaW50ZXJhY3RpdmUgY29udGVudHMgb2YgdGhlIGVsZW1lbnQgY2FuIGJlIHVzZWQuIFdoZW4gY2xpY2tlZCBvdXRzaWRlXG4gKiB0aGUgZWxlbWVudCwgdGhlIGVsZW1lbnRzIG1vZGUgaXMgY2hhbmdlZCB0byBpbmFjdGl2ZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lclxuICogQGNsYXNzIEFjdGl2YXRvclxuICovXG5mdW5jdGlvbiBBY3RpdmF0b3IkMShjb250YWluZXIpIHtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlID0gW107XG5cbiAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICB0aGlzLl9kb20gPSB7XG4gICAgY29udGFpbmVyLFxuICAgIG92ZXJsYXk6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gIH07XG5cbiAgdGhpcy5fZG9tLm92ZXJsYXkuY2xhc3NMaXN0LmFkZChcInZpcy1vdmVybGF5XCIpO1xuXG4gIHRoaXMuX2RvbS5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZG9tLm92ZXJsYXkpO1xuICB0aGlzLl9jbGVhbnVwUXVldWUucHVzaCgoKSA9PiB7XG4gICAgdGhpcy5fZG9tLm92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9kb20ub3ZlcmxheSk7XG4gIH0pO1xuXG4gIGNvbnN0IGhhbW1lciA9IEhhbW1lciQxKHRoaXMuX2RvbS5vdmVybGF5KTtcbiAgaGFtbWVyLm9uKFwidGFwXCIsIHRoaXMuX29uVGFwT3ZlcmxheS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgIGhhbW1lci5kZXN0cm95KCk7XG4gICAgLy8gRklYTUU6IGNsZWFuaW5nIHVwIGhhbW1lciBpbnN0YW5jZXMgZG9lc24ndCB3b3JrIChUaW1lbGluZSBub3QgcmVtb3ZlZFxuICAgIC8vIGZyb20gbWVtb3J5KVxuICB9KTtcblxuICAvLyBibG9jayBhbGwgdG91Y2ggZXZlbnRzIChleGNlcHQgdGFwKVxuICBjb25zdCBldmVudHMgPSBbXG4gICAgXCJ0YXBcIixcbiAgICBcImRvdWJsZXRhcFwiLFxuICAgIFwicHJlc3NcIixcbiAgICBcInBpbmNoXCIsXG4gICAgXCJwYW5cIixcbiAgICBcInBhbnN0YXJ0XCIsXG4gICAgXCJwYW5tb3ZlXCIsXG4gICAgXCJwYW5lbmRcIixcbiAgXTtcbiAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgaGFtbWVyLm9uKGV2ZW50LCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBhdHRhY2ggYSBjbGljayBldmVudCB0byB0aGUgd2luZG93LCBpbiBvcmRlciB0byBkZWFjdGl2YXRlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZSB0aGUgdGltZWxpbmVcbiAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LmJvZHkpIHtcbiAgICB0aGlzLl9vbkNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIV9oYXNQYXJlbnQoZXZlbnQudGFyZ2V0LCBjb250YWluZXIpKSB7XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgdGhpcy5fY2xlYW51cFF1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBwcmVwYXJlIGVzY2FwZSBrZXkgbGlzdGVuZXIgZm9yIGRlYWN0aXZhdGluZyB3aGVuIGFjdGl2ZVxuICB0aGlzLl9lc2NMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIFwia2V5XCIgaW4gZXZlbnRcbiAgICAgICAgPyBldmVudC5rZXkgPT09IFwiRXNjYXBlXCJcbiAgICAgICAgOiBldmVudC5rZXlDb2RlID09PSAyNyAvKiB0aGUga2V5Q29kZSBpcyBmb3IgSUUxMSAqL1xuICAgICkge1xuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICB9O1xufVxuXG4vLyB0dXJuIGludG8gYW4gZXZlbnQgZW1pdHRlclxuRW1pdHRlcihBY3RpdmF0b3IkMS5wcm90b3R5cGUpO1xuXG4vLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBhY3RpdmF0b3JcbkFjdGl2YXRvciQxLmN1cnJlbnQgPSBudWxsO1xuXG4vKipcbiAqIERlc3Ryb3kgdGhlIGFjdGl2YXRvci4gQ2xlYW5zIHVwIGFsbCBjcmVhdGVkIERPTSBhbmQgZXZlbnQgbGlzdGVuZXJzXG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmRlYWN0aXZhdGUoKTtcblxuICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuX2NsZWFudXBRdWV1ZS5zcGxpY2UoMCkucmV2ZXJzZSgpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcblxuLyoqXG4gKiBBY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBoaWRkZW4sIGVsZW1lbnQgaXMgZGVjb3JhdGVkIHdpdGggYSBibHVlIHNoYWRvdyBib3JkZXJcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICAvLyB3ZSBhbGxvdyBvbmx5IG9uZSBhY3RpdmUgYWN0aXZhdG9yIGF0IGEgdGltZVxuICBpZiAoQWN0aXZhdG9yJDEuY3VycmVudCkge1xuICAgIEFjdGl2YXRvciQxLmN1cnJlbnQuZGVhY3RpdmF0ZSgpO1xuICB9XG4gIEFjdGl2YXRvciQxLmN1cnJlbnQgPSB0aGlzO1xuXG4gIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5fZG9tLm92ZXJsYXkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ2aXMtYWN0aXZlXCIpO1xuXG4gIHRoaXMuZW1pdChcImNoYW5nZVwiKTtcbiAgdGhpcy5lbWl0KFwiYWN0aXZhdGVcIik7XG5cbiAgLy8gdWdseSBoYWNrOiBiaW5kIEVTQyBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnRzLCBhcyB0aGUgTmV0d29yayByZWJpbmRzIGFsbFxuICAvLyBrZXlib2FyZCBldmVudHMgb24gYSAnY2hhbmdlJyBldmVudFxuICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcbn07XG5cbi8qKlxuICogRGVhY3RpdmF0ZSB0aGUgZWxlbWVudFxuICogT3ZlcmxheSBpcyBkaXNwbGF5ZWQgb24gdG9wIG9mIHRoZSBlbGVtZW50XG4gKi9cbkFjdGl2YXRvciQxLnByb3RvdHlwZS5kZWFjdGl2YXRlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB0aGlzLl9kb20ub3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICB0aGlzLl9kb20uY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJ2aXMtYWN0aXZlXCIpO1xuICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuX2VzY0xpc3RlbmVyKTtcblxuICB0aGlzLmVtaXQoXCJjaGFuZ2VcIik7XG4gIHRoaXMuZW1pdChcImRlYWN0aXZhdGVcIik7XG59O1xuXG4vKipcbiAqIEhhbmRsZSBhIHRhcCBldmVudDogYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICpcbiAqIEBwYXJhbSB7RXZlbnR9ICBldmVudCAgIFRoZSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuQWN0aXZhdG9yJDEucHJvdG90eXBlLl9vblRhcE92ZXJsYXkgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gYWN0aXZhdGUgdGhlIGNvbnRhaW5lclxuICB0aGlzLmFjdGl2YXRlKCk7XG4gIGV2ZW50LnNyY0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIHRoZSByZXF1ZXN0ZWQgcGFyZW50IGVsZW1lbnQgc29tZXdoZXJlIGluXG4gKiBpdHMgY2hhaW4gb2YgcGFyZW50IG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBwYXJlbnQgaXMgZm91bmQgc29tZXdoZXJlIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgIGNoYWluIG9mIHBhcmVudCBub2Rlcy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9oYXNQYXJlbnQoZWxlbWVudCwgcGFyZW50KSB7XG4gIHdoaWxlIChlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IHBhcmVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyB1dGlsaXR5IGZ1bmN0aW9uc1xyXG4vLyBwYXJzZSBBU1AuTmV0IERhdGUgcGF0dGVybixcclxuLy8gZm9yIGV4YW1wbGUgJy9EYXRlKDExOTg5MDg3MTcwNTYpLycgb3IgJy9EYXRlKDExOTg5MDg3MTcwNTYtMDcwMCkvJ1xyXG4vLyBjb2RlIGZyb20gaHR0cDovL21vbWVudGpzLmNvbS9cclxuY29uc3QgQVNQRGF0ZVJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2k7XHJcbi8vIENvbG9yIFJFc1xyXG5jb25zdCBmdWxsSGV4UkUgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pO1xyXG5jb25zdCBzaG9ydEhleFJFID0gL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaTtcclxuY29uc3QgcmdiUkUgPSAvXnJnYlxcKCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqXFwpJC9pO1xyXG5jb25zdCByZ2JhUkUgPSAvXnJnYmFcXCggKigxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSAqLCAqKDE/XFxkezEsMn18MlswLTRdXFxkfDI1WzAtNV0pICosICooMT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkgKiwgKihbMDFdfDA/XFwuXFxkKykgKlxcKSQvaTtcclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBudW1iZXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBudW1iZXIsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgZXZlcnl0aGluZyBpbiB0aGUgRE9NIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIERPTW9iamVjdCAtIE5vZGUgd2hvc2UgY2hpbGQgbm9kZXMgd2lsbCBiZSByZWN1cnNpdmVseSBkZWxldGVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVjdXJzaXZlRE9NRGVsZXRlKERPTW9iamVjdCkge1xyXG4gICAgaWYgKERPTW9iamVjdCkge1xyXG4gICAgICAgIHdoaWxlIChET01vYmplY3QuaGFzQ2hpbGROb2RlcygpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gRE9Nb2JqZWN0LmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZCkge1xyXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlRE9NRGVsZXRlKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIERPTW9iamVjdC5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRlc3Qgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgb2JqZWN0IChub3QgcHJpbWl0aXZlIG9yIG51bGwpLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgbm90IG51bGwgb2JqZWN0LCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcclxufVxyXG4vKipcclxuICogVGVzdCB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhIERhdGUsIG9yIGEgU3RyaW5nIGNvbnRhaW5pbmcgYSBEYXRlLlxyXG4gKlxyXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXHJcbiAqIEByZXR1cm5zIFRydWUgaWYgRGF0ZSBpbnN0YW5jZSBvciBzdHJpbmcgZGF0ZSByZXByZXNlbnRhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcclxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBzdHJpbmcgY29udGFpbnMgYSBkYXRlXHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBBU1BEYXRlUmVnZXguZXhlYyh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG4vKipcclxuICogQ29weSBwcm9wZXJ0eSBmcm9tIGIgdG8gYSBpZiBwcm9wZXJ0eSBwcmVzZW50IGluIGEuXHJcbiAqIElmIHByb3BlcnR5IGluIGIgZXhwbGljaXRseSBzZXQgdG8gbnVsbCwgZGVsZXRlIGl0IGlmIGBhbGxvd0RlbGV0aW9uYCBzZXQuXHJcbiAqXHJcbiAqIEludGVybmFsIGhlbHBlciByb3V0aW5lLCBzaG91bGQgbm90IGJlIGV4cG9ydGVkLiBOb3QgYWRkZWQgdG8gYGV4cG9ydHNgIGZvciB0aGF0IHJlYXNvbi5cclxuICpcclxuICogQHBhcmFtIGEgLSBUYXJnZXQgb2JqZWN0LlxyXG4gKiBAcGFyYW0gYiAtIFNvdXJjZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBwcm9wIC0gTmFtZSBvZiBwcm9wZXJ0eSB0byBjb3B5IGZyb20gYiB0byBhLlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKSB7XHJcbiAgICBsZXQgZG9EZWxldGlvbiA9IGZhbHNlO1xyXG4gICAgaWYgKGFsbG93RGVsZXRpb24gPT09IHRydWUpIHtcclxuICAgICAgICBkb0RlbGV0aW9uID0gYltwcm9wXSA9PT0gbnVsbCAmJiBhW3Byb3BdICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoZG9EZWxldGlvbikge1xyXG4gICAgICAgIGRlbGV0ZSBhW3Byb3BdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF07IC8vIFJlbWVtYmVyLCB0aGlzIGlzIGEgcmVmZXJlbmNlIGNvcHkhXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEZpbGwgYW4gb2JqZWN0IHdpdGggYSBwb3NzaWJseSBwYXJ0aWFsbHkgZGVmaW5lZCBvdGhlciBvYmplY3QuXHJcbiAqXHJcbiAqIE9ubHkgY29waWVzIHZhbHVlcyBmb3IgdGhlIHByb3BlcnRpZXMgYWxyZWFkeSBwcmVzZW50IGluIGEuXHJcbiAqIFRoYXQgbWVhbnMgYW4gb2JqZWN0IGlzIG5vdCBjcmVhdGVkIG9uIGEgcHJvcGVydHkgaWYgb25seSB0aGUgYiBvYmplY3QgaGFzIGl0LlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIFRoZSBvYmplY3QgdGhhdCB3aWxsIGhhdmUgaXQncyBwcm9wZXJ0aWVzIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSBiIC0gVGhlIG9iamVjdCB3aXRoIHByb3BlcnR5IHVwZGF0ZXMuXHJcbiAqIEBwYXJhbSBhbGxvd0RlbGV0aW9uIC0gSWYgdHJ1ZSwgZGVsZXRlIHByb3BlcnRpZXMgaW4gYSB0aGF0IGFyZSBleHBsaWNpdGx5IHNldCB0byBudWxsIGluIGIuXHJcbiAqL1xyXG5mdW5jdGlvbiBmaWxsSWZEZWZpbmVkKGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gTk9URTogaXRlcmF0aW9uIG9mIHByb3BlcnRpZXMgb2YgYVxyXG4gICAgLy8gTk9URTogcHJvdG90eXBlIHByb3BlcnRpZXMgaXRlcmF0ZWQgb3ZlciBhcyB3ZWxsXHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYSkge1xyXG4gICAgICAgIGlmIChiW3Byb3BdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGJbcHJvcF0gPT09IG51bGwgfHwgdHlwZW9mIGJbcHJvcF0gIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vdGU6IHR5cGVvZiBudWxsID09PSAnb2JqZWN0J1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYVByb3AgPSBhW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYlByb3AgPSBiW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGFQcm9wKSAmJiBpc09iamVjdChiUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxsSWZEZWZpbmVkKGFQcm9wLCBiUHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhXHJcbiAqIHRhcmdldCBvYmplY3QuIFJldHVybnMgdGhlIHRhcmdldCBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBjb3B5IHRvLlxyXG4gKiBAcGFyYW0gc291cmNlIC0gVGhlIHNvdXJjZSBvYmplY3QgZnJvbSB3aGljaCB0byBjb3B5IHByb3BlcnRpZXMuXHJcbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gKi9cclxuY29uc3QgZXh0ZW5kID0gT2JqZWN0LmFzc2lnbjtcclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIgb3IgYSBzZXJpZXMgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHJlbWFya3NcclxuICogT25seSBwcm9wZXJ0aWVzIHdpdGggZGVmaW5lZCB2YWx1ZXMgYXJlIGNvcGllZC5cclxuICogQHBhcmFtIHByb3BzIC0gUHJvcGVydGllcyB0byBiZSBjb3BpZWQgdG8gYS5cclxuICogQHBhcmFtIGEgLSBUaGUgdGFyZ2V0LlxyXG4gKiBAcGFyYW0gb3RoZXJzIC0gVGhlIHNvdXJjZXMuXHJcbiAqIEByZXR1cm5zIEFyZ3VtZW50IGEuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVFeHRlbmQocHJvcHMsIGEsIC4uLm90aGVycykge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFycmF5IHdpdGggcHJvcGVydHkgbmFtZXMgZXhwZWN0ZWQgYXMgZmlyc3QgYXJndW1lbnRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVycykge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW3BdO1xyXG4gICAgICAgICAgICBpZiAob3RoZXIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBwcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IG90aGVyW3Byb3BdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHNlbGVjdGVkIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqIE9ubHkgcHJvcGVydGllcyB3aXRoIGRlZmluZWQgdmFsdWVzIGFyZSBjb3BpZWQuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFByZXZpb3VzIHZlcnNpb24gb2YgdGhpcyByb3V0aW5lIGltcGxpZWQgdGhhdCBtdWx0aXBsZSBzb3VyY2Ugb2JqZWN0cyBjb3VsZFxyXG4gKiBiZSB1c2VkOyBob3dldmVyLCB0aGUgaW1wbGVtZW50YXRpb24gd2FzICoqd3JvbmcqKi4gU2luY2UgbXVsdGlwbGUgKFxcPjEpXHJcbiAqIHNvdXJjZXMgd2VyZW4ndCB1c2VkIGFueXdoZXJlIGluIHRoZSBgdmlzLmpzYCBjb2RlLCB0aGlzIGhhcyBiZWVuIHJlbW92ZWRcclxuICogQHBhcmFtIHByb3BzIC0gTmFtZXMgb2YgZmlyc3QtbGV2ZWwgcHJvcGVydGllcyB0byBjb3B5IG92ZXIuXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gYWxsb3dEZWxldGlvbiAtIElmIHRydWUsIGRlbGV0ZSBwcm9wZXJ0eSBpbiBhIGlmIGV4cGxpY2l0bHkgc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZURlZXBFeHRlbmQocHJvcHMsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcHJvcHMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbcF07XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwcm9wKSkge1xyXG4gICAgICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBmYWxzZSwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29weU9yRGVsZXRlKGEsIGIsIHByb3AsIGFsbG93RGVsZXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIEV4dGVuZCBvYmplY3QgYGFgIHdpdGggcHJvcGVydGllcyBvZiBvYmplY3QgYGJgLCBpZ25vcmluZyBwcm9wZXJ0aWVzIHdoaWNoXHJcbiAqIGFyZSBleHBsaWNpdGx5IHNwZWNpZmllZCB0byBiZSBleGNsdWRlZC5cclxuICpcclxuICogQHJlbWFya3NcclxuICogVGhlIHByb3BlcnRpZXMgb2YgYGJgIGFyZSBjb25zaWRlcmVkIGZvciBjb3B5aW5nLiBQcm9wZXJ0aWVzIHdoaWNoIGFyZVxyXG4gKiB0aGVtc2VsdmVzIG9iamVjdHMgYXJlIGFyZSBhbHNvIGV4dGVuZGVkLiBPbmx5IHByb3BlcnRpZXMgd2l0aCBkZWZpbmVkXHJcbiAqIHZhbHVlcyBhcmUgY29waWVkLlxyXG4gKiBAcGFyYW0gcHJvcHNUb0V4Y2x1ZGUgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHdoaWNoIHNob3VsZCAqbm90KiBiZSBjb3BpZWQuXHJcbiAqIEBwYXJhbSBhIC0gT2JqZWN0IHRvIGV4dGVuZC5cclxuICogQHBhcmFtIGIgLSBPYmplY3QgdG8gdGFrZSBwcm9wZXJ0aWVzIGZyb20gZm9yIGV4dGVuc2lvbi5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCBkZWxldGUgcHJvcGVydGllcyBpbiBhIHRoYXQgYXJlIGV4cGxpY2l0bHlcclxuICogc2V0IHRvIG51bGwgaW4gYi5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQocHJvcHNUb0V4Y2x1ZGUsIGEsIGIsIGFsbG93RGVsZXRpb24gPSBmYWxzZSkge1xyXG4gICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXHJcbiAgICAvLyBOT1RFOiBhcnJheSBwcm9wZXJ0aWVzIGhhdmUgYW4gZWxzZS1iZWxvdzsgYXBwYXJlbnRseSwgdGhlcmUgaXMgYSBwcm9ibGVtIGhlcmUuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBiKSB7XHJcbiAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSAvLyBIYW5kbGUgbG9jYWwgcHJvcGVydGllcyBvbmx5XHJcbiAgICAgICAgaWYgKHByb3BzVG9FeGNsdWRlLmluY2x1ZGVzKHByb3ApKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH0gLy8gSW4gZXhjbHVzaW9uIGxpc3QsIHNraXBcclxuICAgICAgICBpZiAoYltwcm9wXSAmJiBiW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGFbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGRlZXBFeHRlbmQoYVtwcm9wXSwgYltwcm9wXSk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICBhW3Byb3BdID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYltwcm9wXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXS5wdXNoKGJbcHJvcF1baV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIERlZXAgZXh0ZW5kIGFuIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGFyZ2V0IG9iamVjdC5cclxuICogQHBhcmFtIGIgLSBTb3VyY2Ugb2JqZWN0LlxyXG4gKiBAcGFyYW0gcHJvdG9FeHRlbmQgLSBJZiB0cnVlLCB0aGUgcHJvdG90eXBlIHZhbHVlcyB3aWxsIGFsc28gYmUgZXh0ZW5kZWQuXHJcbiAqIChUaGF0IGlzIHRoZSBvcHRpb25zIG9iamVjdHMgdGhhdCBpbmhlcml0IGZyb20gb3RoZXJzIHdpbGwgYWxzbyBnZXQgdGhlXHJcbiAqIGluaGVyaXRlZCBvcHRpb25zKS5cclxuICogQHBhcmFtIGFsbG93RGVsZXRpb24gLSBJZiB0cnVlLCB0aGUgdmFsdWVzIG9mIGZpZWxkcyB0aGF0IGFyZSBudWxsIHdpbGwgYmUgZGVsZXRlZC5cclxuICogQHJldHVybnMgQXJndW1lbnQgYS5cclxuICovXHJcbmZ1bmN0aW9uIGRlZXBFeHRlbmQoYSwgYiwgcHJvdG9FeHRlbmQgPSBmYWxzZSwgYWxsb3dEZWxldGlvbiA9IGZhbHNlKSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gYikge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcHJvcCkgfHwgcHJvdG9FeHRlbmQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiW3Byb3BdID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgICAgICAgICAgICBiW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYltwcm9wXSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdID0gZGVlcEV4dGVuZCh7fSwgYltwcm9wXSwgcHJvdG9FeHRlbmQpOyAvLyBOT1RFOiBhbGxvd0RlbGV0aW9uIG5vdCBwcm9wYWdhdGVkIVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFbcHJvcF0gPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgICAgICAgICAgICAgICBhW3Byb3BdICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFbcHJvcF0pID09PSBPYmplY3QucHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdLCBwcm90b0V4dGVuZCk7IC8vIE5PVEU6IGFsbG93RGVsZXRpb24gbm90IHByb3BhZ2F0ZWQhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb3B5T3JEZWxldGUoYSwgYiwgcHJvcCwgYWxsb3dEZWxldGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiW3Byb3BdKSkge1xyXG4gICAgICAgICAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF0uc2xpY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvcHlPckRlbGV0ZShhLCBiLCBwcm9wLCBhbGxvd0RlbGV0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59XHJcbi8qKlxyXG4gKiBUZXN0IHdoZXRoZXIgYWxsIGVsZW1lbnRzIGluIHR3byBhcnJheXMgYXJlIGVxdWFsLlxyXG4gKlxyXG4gKiBAcGFyYW0gYSAtIEZpcnN0IGFycmF5LlxyXG4gKiBAcGFyYW0gYiAtIFNlY29uZCBhcnJheS5cclxuICogQHJldHVybnMgVHJ1ZSBpZiBib3RoIGFycmF5cyBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2FtZSBlbGVtZW50cyAoMSA9ICcxJykuXHJcbiAqL1xyXG5mdW5jdGlvbiBlcXVhbEFycmF5KGEsIGIpIHtcclxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBHZXQgdGhlIHR5cGUgb2YgYW4gb2JqZWN0LCBmb3IgZXhhbXBsZSBleHBvcnRzLmdldFR5cGUoW10pIHJldHVybnMgJ0FycmF5Jy5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIElucHV0IHZhbHVlIG9mIHVua25vd24gdHlwZS5cclxuICogQHJldHVybnMgRGV0ZWN0ZWQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFR5cGUob2JqZWN0KSB7XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iamVjdDtcclxuICAgIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJTdHJpbmdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJBcnJheVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJEYXRlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIk9iamVjdFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJOdW1iZXJcIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIHJldHVybiBcIkJvb2xlYW5cIjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiU3RyaW5nXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZTtcclxufVxyXG4vKipcclxuICogVXNlZCB0byBleHRlbmQgYW4gYXJyYXkgYW5kIGNvcHkgaXQuIFRoaXMgaXMgdXNlZCB0byBwcm9wYWdhdGUgcGF0aHMgcmVjdXJzaXZlbHkuXHJcbiAqXHJcbiAqIEBwYXJhbSBhcnIgLSBGaXJzdCBwYXJ0LlxyXG4gKiBAcGFyYW0gbmV3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgYWFkZGVkIGludG8gdGhlIGFycmF5LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aXRoIGFsbCBpdGVtcyBmcm9tIGFyciBhbmQgbmV3VmFsdWUgKHdoaWNoIGlzIGxhc3QpLlxyXG4gKi9cclxuZnVuY3Rpb24gY29weUFuZEV4dGVuZEFycmF5KGFyciwgbmV3VmFsdWUpIHtcclxuICAgIHJldHVybiBbLi4uYXJyLCBuZXdWYWx1ZV07XHJcbn1cclxuLyoqXHJcbiAqIFVzZWQgdG8gZXh0ZW5kIGFuIGFycmF5IGFuZCBjb3B5IGl0LiBUaGlzIGlzIHVzZWQgdG8gcHJvcGFnYXRlIHBhdGhzIHJlY3Vyc2l2ZWx5LlxyXG4gKlxyXG4gKiBAcGFyYW0gYXJyIC0gVGhlIGFycmF5IHRvIGJlIGNvcGllZC5cclxuICogQHJldHVybnMgU2hhbGxvdyBjb3B5IG9mIGFyci5cclxuICovXHJcbmZ1bmN0aW9uIGNvcHlBcnJheShhcnIpIHtcclxuICAgIHJldHVybiBhcnIuc2xpY2UoKTtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIGxlZnQgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIGxlZnQgcG9zaXRpb24gb2YgdGhpcyBlbGVtZW50IGluIHRoZSBicm93c2VyIHBhZ2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZUxlZnQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcclxufVxyXG4vKipcclxuICogUmV0cmlldmUgdGhlIGFic29sdXRlIHJpZ2h0IHZhbHVlIG9mIGEgRE9NIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gQSBkb20gZWxlbWVudCwgZm9yIGV4YW1wbGUgYSBkaXYuXHJcbiAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSByaWdodCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlUmlnaHQoZWxlbSkge1xyXG4gICAgcmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7XHJcbn1cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhYnNvbHV0ZSB0b3AgdmFsdWUgb2YgYSBET00gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBBIGRvbSBlbGVtZW50LCBmb3IgZXhhbXBsZSBhIGRpdi5cclxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHRvcCBwb3NpdGlvbiBvZiB0aGlzIGVsZW1lbnQgaW4gdGhlIGJyb3dzZXIgcGFnZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldEFic29sdXRlVG9wKGVsZW0pIHtcclxuICAgIHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxufVxyXG4vKipcclxuICogQWRkIGEgY2xhc3NOYW1lIHRvIHRoZSBnaXZlbiBlbGVtZW50cyBzdHlsZS5cclxuICpcclxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIGFkZGVkLlxyXG4gKiBAcGFyYW0gY2xhc3NOYW1lcyAtIFNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lcykge1xyXG4gICAgbGV0IGNsYXNzZXMgPSBlbGVtLmNsYXNzTmFtZS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBuZXdDbGFzc2VzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIik7XHJcbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5jb25jYXQobmV3Q2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhY2xhc3Nlcy5pbmNsdWRlcyhjbGFzc05hbWUpO1xyXG4gICAgfSkpO1xyXG4gICAgZWxlbS5jbGFzc05hbWUgPSBjbGFzc2VzLmpvaW4oXCIgXCIpO1xyXG59XHJcbi8qKlxyXG4gKiBSZW1vdmUgYSBjbGFzc05hbWUgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudHMgc3R5bGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtIC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0aGUgY2xhc3NlcyB3aWxsIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjbGFzc05hbWVzIC0gU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy5cclxuICovXHJcbmZ1bmN0aW9uIHJlbW92ZUNsYXNzTmFtZShlbGVtLCBjbGFzc05hbWVzKSB7XHJcbiAgICBsZXQgY2xhc3NlcyA9IGVsZW0uY2xhc3NOYW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IG9sZENsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KFwiIFwiKTtcclxuICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICFvbGRDbGFzc2VzLmluY2x1ZGVzKGNsYXNzTmFtZSk7XHJcbiAgICB9KTtcclxuICAgIGVsZW0uY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKFwiIFwiKTtcclxufVxyXG4vKipcclxuICogRm9yIGVhY2ggbWV0aG9kIGZvciBib3RoIGFycmF5cyBhbmQgb2JqZWN0cy5cclxuICogSW4gY2FzZSBvZiBhbiBhcnJheSwgdGhlIGJ1aWx0LWluIEFycmF5LmZvckVhY2goKSBpcyBhcHBsaWVkICgqKk5vLCBpdCdzIG5vdCEqKikuXHJcbiAqIEluIGNhc2Ugb2YgYW4gT2JqZWN0LCB0aGUgbWV0aG9kIGxvb3BzIG92ZXIgYWxsIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIG9iamVjdCAtIEFuIE9iamVjdCBvciBBcnJheSB0byBiZSBpdGVyYXRlZCBvdmVyLlxyXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBBcnJheS5mb3JFYWNoLWxpa2UgY2FsbGJhY2suXHJcbiAqL1xyXG5mdW5jdGlvbiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcclxuICAgICAgICAvLyBhcnJheVxyXG4gICAgICAgIGNvbnN0IGxlbiA9IG9iamVjdC5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhvYmplY3RbaV0sIGksIG9iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gb2JqZWN0XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBDb252ZXJ0IGFuIG9iamVjdCBpbnRvIGFuIGFycmF5OiBhbGwgb2JqZWN0cyBwcm9wZXJ0aWVzIGFyZSBwdXQgaW50byB0aGUgYXJyYXkuIFRoZSByZXN1bHRpbmcgYXJyYXkgaXMgdW5vcmRlcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbyAtIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxyXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bm9yZGVyZWQgdmFsdWVzLlxyXG4gKi9cclxuY29uc3QgdG9BcnJheSA9IE9iamVjdC52YWx1ZXM7XHJcbi8qKlxyXG4gKiBVcGRhdGUgYSBwcm9wZXJ0eSBpbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSBvYmplY3QgLSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnR5IHdpbGwgYmUgdXBkYXRlZC5cclxuICogQHBhcmFtIGtleSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHVwZGF0ZWQuXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgYXNzaWduZWQuXHJcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIHdhcyB1cGRhdGVkICh0cnVlKSBvciBhbHJlYWR5IHN0cmljdGx5IHRoZSBzYW1lIGluIHRoZSBvcmlnaW5hbCBvYmplY3QgKGZhbHNlKS5cclxuICovXHJcbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KG9iamVjdCwga2V5LCB2YWx1ZSkge1xyXG4gICAgaWYgKG9iamVjdFtrZXldICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBiZSBvbmx5IGV4ZWN1dGVkIG9uY2UgcGVyIGFuaW1hdGlvbiBmcmFtZS5cclxuICpcclxuICogQHBhcmFtIGZuIC0gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJucyBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uLlxyXG4gKi9cclxuZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcclxuICAgIGxldCBzY2hlZHVsZWQgPSBmYWxzZTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzY2hlZHVsZWQpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZm4oKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ2FuY2VscyB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBpZiBpdCBpcyBjYW5jZWxhYmxlLCB3aXRob3V0IHN0b3BwaW5nIGZ1cnRoZXIgcHJvcGFnYXRpb24gb2YgdGhlIGV2ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgd2hvc2UgZGVmYXVsdCBhY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cclxuICovXHJcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XHJcbiAgICB9XHJcbiAgICBpZiAoIWV2ZW50KSA7XHJcbiAgICBlbHNlIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIG5vbi1JRSBicm93c2Vyc1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gQFRPRE86IElFIHR5cGVzPyBEb2VzIGFueW9uZSBjYXJlP1xyXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7IC8vIElFIGJyb3dzZXJzXHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIEdldCBIVE1MIGVsZW1lbnQgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudC5cclxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgb3IgbnVsbCBpZiBub3Qgb2J0YWluYWJsZS5cclxuICovXHJcbmZ1bmN0aW9uIGdldFRhcmdldChldmVudCA9IHdpbmRvdy5ldmVudCkge1xyXG4gICAgLy8gY29kZSBmcm9tIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxyXG4gICAgLy8gQFRPRE86IEV2ZW50VGFyZ2V0IGNhbiBiZSBhbG1vc3QgYW55dGhpbmcsIGlzIGl0IG9rYXkgdG8gcmV0dXJuIG9ubHkgRWxlbWVudHM/XHJcbiAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcclxuICAgIGlmICghZXZlbnQpIDtcclxuICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2ZW50LnNyY0VsZW1lbnQpIHtcclxuICAgICAgICB0YXJnZXQgPSBldmVudC5zcmNFbGVtZW50O1xyXG4gICAgfVxyXG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT0gbnVsbCAmJiB0YXJnZXQubm9kZVR5cGUgPT0gMykge1xyXG4gICAgICAgIC8vIGRlZmVhdCBTYWZhcmkgYnVnXHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4vKipcclxuICogQ2hlY2sgaWYgZ2l2ZW4gZWxlbWVudCBjb250YWlucyBnaXZlbiBwYXJlbnQgc29tZXdoZXJlIGluIHRoZSBET00gdHJlZS5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBwYXJlbnQgLSBUaGUgYW5jZXN0b3IgKG5vdCBuZWNlc3NhcmlseSBwYXJlbnQpIG9mIHRoZSBlbGVtZW50LlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHBhcmVudCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZWxlbWVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cclxuZnVuY3Rpb24gaGFzUGFyZW50KGVsZW1lbnQsIHBhcmVudCkge1xyXG4gICAgbGV0IGVsZW0gPSBlbGVtZW50O1xyXG4gICAgd2hpbGUgKGVsZW0pIHtcclxuICAgICAgICBpZiAoZWxlbSA9PT0gcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIGJvb2xlYW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gYmUgY29udmVydGVkIGludG9ib29sZWFuLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nIGJvb2xlYW4gdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzQm9vbGVhbih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgbnVsbDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgbnVtYmVyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvbnVtYmVyLCBhIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYXMgYCgoKSA9PiB1bmtub3duKWAuXHJcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gSWYgdGhlIHZhbHVlIG9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uID09IG51bGwgdGhlbiB0aGlzIHdpbGwgYmUgcmV0dXJuZWQuXHJcbiAgICAgKiBAcmV0dXJucyBDb3JyZXNwb25kaW5nICoqYm94ZWQqKiBudW1iZXIgdmFsdWUsIGlmIG5vbmUgdGhlbiB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgbm9uZSB0aGVuIG51bGwuXHJcbiAgICAgKi9cclxuICAgIGFzTnVtYmVyKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgaW50byBhIHN0cmluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50b3N0cmluZywgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyAqKmJveGVkKiogc3RyaW5nIHZhbHVlLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1N0cmluZyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBzaXplLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGJlIGNvbnZlcnRlZCBpbnRvc2l6ZSwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgQ29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUgKG51bWJlciArICdweCcpLCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc1NpemUodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBhIHZhbHVlIGludG8gYSBET00gRWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQgaW50byBET00gRWxlbWVudCwgYSBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFzIGAoKCkgPT4gdW5rbm93bilgLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIElmIHRoZSB2YWx1ZSBvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiA9PSBudWxsIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkLlxyXG4gICAgICogQHJldHVybnMgVGhlIERPTSBFbGVtZW50LCBpZiBub25lIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWUsIGlmIG5vbmUgdGhlbiBudWxsLlxyXG4gICAgICovXHJcbiAgICBhc0VsZW1lbnQodmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIHx8IGRlZmF1bHRWYWx1ZSB8fCBudWxsO1xyXG4gICAgfSxcclxufTtcclxuLyoqXHJcbiAqIENvbnZlcnQgaGV4IGNvbG9yIHN0cmluZyBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU2MjM4MzgvcmdiLXRvLWhleC1hbmQtaGV4LXRvLXJnYn1cclxuICogQHBhcmFtIGhleCAtIEhleCBjb2xvciBzdHJpbmcgKDMgb3IgNiBkaWdpdHMsIHdpdGggb3Igd2l0aG91dCAjKS5cclxuICogQHJldHVybnMgUkdCIGNvbG9yIG9iamVjdC5cclxuICovXHJcbmZ1bmN0aW9uIGhleFRvUkdCKGhleCkge1xyXG4gICAgbGV0IHJlc3VsdDtcclxuICAgIHN3aXRjaCAoaGV4Lmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMzpcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHNob3J0SGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0gKyByZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0gKyByZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10gKyByZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXN1bHQgPSBmdWxsSGV4UkUuZXhlYyhoZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICByOiBwYXJzZUludChyZXN1bHRbMV0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBnOiBwYXJzZUludChyZXN1bHRbMl0sIDE2KSxcclxuICAgICAgICAgICAgICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBzdHJpbmcgY29sb3IgaW4gaGV4IG9yIFJHQiBmb3JtYXQgYW5kIGFkZHMgdGhlIG9wYWNpdHksIFJHQkEgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29sb3IgLSBUaGUgY29sb3Igc3RyaW5nIChoZXgsIFJHQiwgUkdCQSkuXHJcbiAqIEBwYXJhbSBvcGFjaXR5IC0gVGhlIG5ldyBvcGFjaXR5LlxyXG4gKiBAcmV0dXJucyBSR0JBIHN0cmluZywgZm9yIGV4YW1wbGUgJ3JnYmEoMjU1LCAwLCAxMjcsIDAuMyknLlxyXG4gKi9cclxuZnVuY3Rpb24gb3ZlcnJpZGVPcGFjaXR5KGNvbG9yLCBvcGFjaXR5KSB7XHJcbiAgICBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JhXCIpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sb3IuaW5jbHVkZXMoXCJyZ2JcIikpIHtcclxuICAgICAgICBjb25zdCByZ2IgPSBjb2xvclxyXG4gICAgICAgICAgICAuc3Vic3RyKGNvbG9yLmluZGV4T2YoXCIoXCIpICsgMSlcclxuICAgICAgICAgICAgLnJlcGxhY2UoXCIpXCIsIFwiXCIpXHJcbiAgICAgICAgICAgIC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYlswXSArIFwiLFwiICsgcmdiWzFdICsgXCIsXCIgKyByZ2JbMl0gKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJnYiA9IGhleFRvUkdCKGNvbG9yKTtcclxuICAgICAgICBpZiAocmdiID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHJnYi5yICsgXCIsXCIgKyByZ2IuZyArIFwiLFwiICsgcmdiLmIgKyBcIixcIiArIG9wYWNpdHkgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIENvbnZlcnQgUkdCIFxcPDAsIDI1NVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcgKGZvciBleGFtcGxlOiAnIzBhY2RjMCcpLlxyXG4gKi9cclxuZnVuY3Rpb24gUkdCVG9IZXgocmVkLCBncmVlbiwgYmx1ZSkge1xyXG4gICAgcmV0dXJuIChcIiNcIiArICgoMSA8PCAyNCkgKyAocmVkIDw8IDE2KSArIChncmVlbiA8PCA4KSArIGJsdWUpLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XHJcbn1cclxuLyoqXHJcbiAqIFBhcnNlIGEgY29sb3IgcHJvcGVydHkgaW50byBhbiBvYmplY3Qgd2l0aCBib3JkZXIsIGJhY2tncm91bmQsIGFuZCBoaWdobGlnaHQgY29sb3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5wdXRDb2xvciAtIFNob3J0aGFuZCBjb2xvciBzdHJpbmcgb3IgaW5wdXQgY29sb3Igb2JqZWN0LlxyXG4gKiBAcGFyYW0gZGVmYXVsdENvbG9yIC0gRnVsbCBjb2xvciBvYmplY3QgdG8gZmlsbCBpbiBtaXNzaW5nIHZhbHVlcyBpbiBpbnB1dENvbG9yLlxyXG4gKiBAcmV0dXJucyBDb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0Q29sb3IsIGRlZmF1bHRDb2xvcikge1xyXG4gICAgaWYgKGlzU3RyaW5nKGlucHV0Q29sb3IpKSB7XHJcbiAgICAgICAgbGV0IGNvbG9yU3RyID0gaW5wdXRDb2xvcjtcclxuICAgICAgICBpZiAoaXNWYWxpZFJHQihjb2xvclN0cikpIHtcclxuICAgICAgICAgICAgY29uc3QgcmdiID0gY29sb3JTdHJcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoNClcclxuICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgY29sb3JTdHIubGVuZ3RoIC0gNSlcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIixcIilcclxuICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29sb3JTdHIgPSBSR0JUb0hleChyZ2JbMF0sIHJnYlsxXSwgcmdiWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzVmFsaWRIZXgoY29sb3JTdHIpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhzdiA9IGhleFRvSFNWKGNvbG9yU3RyKTtcclxuICAgICAgICAgICAgY29uc3QgbGlnaHRlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBoc3YucyAqIDAuOCxcclxuICAgICAgICAgICAgICAgIHY6IE1hdGgubWluKDEsIGhzdi52ICogMS4wMiksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySFNWID0ge1xyXG4gICAgICAgICAgICAgICAgaDogaHN2LmgsXHJcbiAgICAgICAgICAgICAgICBzOiBNYXRoLm1pbigxLCBoc3YucyAqIDEuMjUpLFxyXG4gICAgICAgICAgICAgICAgdjogaHN2LnYgKiAwLjgsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhcmtlckNvbG9ySGV4ID0gSFNWVG9IZXgoZGFya2VyQ29sb3JIU1YuaCwgZGFya2VyQ29sb3JIU1YucywgZGFya2VyQ29sb3JIU1Yudik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZ2h0ZXJDb2xvckhleCA9IEhTVlRvSGV4KGxpZ2h0ZXJDb2xvckhTVi5oLCBsaWdodGVyQ29sb3JIU1YucywgbGlnaHRlckNvbG9ySFNWLnYpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGRhcmtlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlckNvbG9ySGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogZGFya2VyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVyQ29sb3JIZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBkYXJrZXJDb2xvckhleCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBjb2xvclN0cixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGNvbG9yU3RyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogY29sb3JTdHIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkZWZhdWx0Q29sb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmJhY2tncm91bmQgfHwgZGVmYXVsdENvbG9yLmJhY2tncm91bmQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IGRlZmF1bHRDb2xvci5ib3JkZXIsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGlzU3RyaW5nKGlucHV0Q29sb3IuaGlnaGxpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgID8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpbnB1dENvbG9yLmhpZ2hsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbG9yLmhpZ2hsaWdodC5iYWNrZ3JvdW5kLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IChpbnB1dENvbG9yLmhpZ2hsaWdodCAmJiBpbnB1dENvbG9yLmhpZ2hsaWdodC5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAoaW5wdXRDb2xvci5ob3ZlciAmJiBpbnB1dENvbG9yLmhvdmVyLmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29sb3IuaG92ZXIuYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHtcclxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuYmFja2dyb3VuZCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlucHV0Q29sb3IuYm9yZGVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogaXNTdHJpbmcoaW5wdXRDb2xvci5oaWdobGlnaHQpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5oaWdobGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGlucHV0Q29sb3IuaGlnaGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJhY2tncm91bmQpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaGlnaGxpZ2h0ICYmIGlucHV0Q29sb3IuaGlnaGxpZ2h0LmJvcmRlcikgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaG92ZXI6IGlzU3RyaW5nKGlucHV0Q29sb3IuaG92ZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaW5wdXRDb2xvci5ob3ZlcixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5ib3JkZXIpIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogKGlucHV0Q29sb3IuaG92ZXIgJiYgaW5wdXRDb2xvci5ob3Zlci5iYWNrZ3JvdW5kKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBSR0IgXFw8MCwgMjU1XFw+IGludG8gSFNWIG9iamVjdC5cclxuICpcclxuICogQHJlbWFya3NcclxuICoge0BsaW5rIGh0dHA6Ly93d3cuamF2YXNjcmlwdGVyLm5ldC9mYXEvcmdiMmhzdi5odG19XHJcbiAqIEBwYXJhbSByZWQgLSBSZWQgY2hhbm5lbC5cclxuICogQHBhcmFtIGdyZWVuIC0gR3JlZW4gY2hhbm5lbC5cclxuICogQHBhcmFtIGJsdWUgLSBCbHVlIGNoYW5uZWwuXHJcbiAqIEByZXR1cm5zIEhTViBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBSR0JUb0hTVihyZWQsIGdyZWVuLCBibHVlKSB7XHJcbiAgICByZWQgPSByZWQgLyAyNTU7XHJcbiAgICBncmVlbiA9IGdyZWVuIC8gMjU1O1xyXG4gICAgYmx1ZSA9IGJsdWUgLyAyNTU7XHJcbiAgICBjb25zdCBtaW5SR0IgPSBNYXRoLm1pbihyZWQsIE1hdGgubWluKGdyZWVuLCBibHVlKSk7XHJcbiAgICBjb25zdCBtYXhSR0IgPSBNYXRoLm1heChyZWQsIE1hdGgubWF4KGdyZWVuLCBibHVlKSk7XHJcbiAgICAvLyBCbGFjay1ncmF5LXdoaXRlXHJcbiAgICBpZiAobWluUkdCID09PSBtYXhSR0IpIHtcclxuICAgICAgICByZXR1cm4geyBoOiAwLCBzOiAwLCB2OiBtaW5SR0IgfTtcclxuICAgIH1cclxuICAgIC8vIENvbG9ycyBvdGhlciB0aGFuIGJsYWNrLWdyYXktd2hpdGU6XHJcbiAgICBjb25zdCBkID0gcmVkID09PSBtaW5SR0IgPyBncmVlbiAtIGJsdWUgOiBibHVlID09PSBtaW5SR0IgPyByZWQgLSBncmVlbiA6IGJsdWUgLSByZWQ7XHJcbiAgICBjb25zdCBoID0gcmVkID09PSBtaW5SR0IgPyAzIDogYmx1ZSA9PT0gbWluUkdCID8gMSA6IDU7XHJcbiAgICBjb25zdCBodWUgPSAoNjAgKiAoaCAtIGQgLyAobWF4UkdCIC0gbWluUkdCKSkpIC8gMzYwO1xyXG4gICAgY29uc3Qgc2F0dXJhdGlvbiA9IChtYXhSR0IgLSBtaW5SR0IpIC8gbWF4UkdCO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtYXhSR0I7XHJcbiAgICByZXR1cm4geyBoOiBodWUsIHM6IHNhdHVyYXRpb24sIHY6IHZhbHVlIH07XHJcbn1cclxuLyoqXHJcbiAqIFNwbGl0IGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBpbnRvIGFuIG9iamVjdCB3aXRoIGtleS92YWx1ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gQ1NTIHNvdXJjZSBjb2RlIHRvIHNwbGl0IGludG8ga2V5L3ZhbHVlIG9iamVjdC5cclxuICogQHJldHVybnMgS2V5L3ZhbHVlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHtAbGluayBjc3NUZXh0fS5cclxuICovXHJcbmZ1bmN0aW9uIHNwbGl0Q1NTVGV4dChjc3NUZXh0KSB7XHJcbiAgICBjb25zdCB0bXBFbGxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBjb25zdCBzdHlsZXMgPSB7fTtcclxuICAgIHRtcEVsbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0bXBFbGxlbWVudC5zdHlsZS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIHN0eWxlc1t0bXBFbGxlbWVudC5zdHlsZVtpXV0gPSB0bXBFbGxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHRtcEVsbGVtZW50LnN0eWxlW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZXM7XHJcbn1cclxuLyoqXHJcbiAqIEFwcGVuZCBhIHN0cmluZyB3aXRoIGNzcyBzdHlsZXMgdG8gYW4gZWxlbWVudC5cclxuICpcclxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0aGF0IHdpbGwgcmVjZWl2ZSBuZXcgc3R5bGVzLlxyXG4gKiBAcGFyYW0gY3NzVGV4dCAtIFRoZSBzdHlsZXMgdG8gYmUgYXBwZW5kZWQuXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRDc3NUZXh0KGVsZW1lbnQsIGNzc1RleHQpIHtcclxuICAgIGNvbnN0IGNzc1N0eWxlID0gc3BsaXRDU1NUZXh0KGNzc1RleHQpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3NzU3R5bGUpKSB7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogUmVtb3ZlIGEgc3RyaW5nIHdpdGggY3NzIHN0eWxlcyBmcm9tIGFuIGVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIGVsZW1lbnQgZnJvbSB3aGljaCBzdHlsZXMgc2hvdWxkIGJlIHJlbW92ZWQuXHJcbiAqIEBwYXJhbSBjc3NUZXh0IC0gVGhlIHN0eWxlcyB0byBiZSByZW1vdmVkLlxyXG4gKi9cclxuZnVuY3Rpb24gcmVtb3ZlQ3NzVGV4dChlbGVtZW50LCBjc3NUZXh0KSB7XHJcbiAgICBjb25zdCBjc3NTdHlsZSA9IHNwbGl0Q1NTVGV4dChjc3NUZXh0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNzc1N0eWxlKSkge1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIHtAbGluayBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tamlqYWNrc29uLzUzMTEyNTZ9XHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIFJHQiBjb2xvciBvYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb1JHQihoLCBzLCB2KSB7XHJcbiAgICBsZXQgcjtcclxuICAgIGxldCBnO1xyXG4gICAgbGV0IGI7XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihoICogNik7XHJcbiAgICBjb25zdCBmID0gaCAqIDYgLSBpO1xyXG4gICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xyXG4gICAgY29uc3QgcSA9IHYgKiAoMSAtIGYgKiBzKTtcclxuICAgIGNvbnN0IHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyk7XHJcbiAgICBzd2l0Y2ggKGkgJSA2KSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAociA9IHYpLCAoZyA9IHQpLCAoYiA9IHApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIChyID0gcSksIChnID0gdiksIChiID0gcCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgKHIgPSBwKSwgKGcgPSB2KSwgKGIgPSB0KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAociA9IHApLCAoZyA9IHEpLCAoYiA9IHYpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgIChyID0gdCksIChnID0gcCksIChiID0gdik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgKHIgPSB2KSwgKGcgPSBwKSwgKGIgPSBxKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHI6IE1hdGguZmxvb3IociAqIDI1NSksXHJcbiAgICAgICAgZzogTWF0aC5mbG9vcihnICogMjU1KSxcclxuICAgICAgICBiOiBNYXRoLmZsb29yKGIgKiAyNTUpLFxyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBIU1YgXFw8MCwgMVxcPiBpbnRvIGhleCBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSBoIC0gSHVlLlxyXG4gKiBAcGFyYW0gcyAtIFNhdHVyYXRpb24uXHJcbiAqIEBwYXJhbSB2IC0gVmFsdWUuXHJcbiAqIEByZXR1cm5zIEhleCBjb2xvciBzdHJpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiBIU1ZUb0hleChoLCBzLCB2KSB7XHJcbiAgICBjb25zdCByZ2IgPSBIU1ZUb1JHQihoLCBzLCB2KTtcclxuICAgIHJldHVybiBSR0JUb0hleChyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogQ29udmVydCBoZXggY29sb3Igc3RyaW5nIGludG8gSFNWIFxcPDAsIDFcXD4uXHJcbiAqXHJcbiAqIEBwYXJhbSBoZXggLSBIZXggY29sb3Igc3RyaW5nLlxyXG4gKiBAcmV0dXJucyBIU1YgY29sb3Igb2JqZWN0LlxyXG4gKi9cclxuZnVuY3Rpb24gaGV4VG9IU1YoaGV4KSB7XHJcbiAgICBjb25zdCByZ2IgPSBoZXhUb1JHQihoZXgpO1xyXG4gICAgaWYgKCFyZ2IpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHtoZXh9JyBpcyBub3QgYSB2YWxpZCBjb2xvci5gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBSR0JUb0hTVihyZ2IuciwgcmdiLmcsIHJnYi5iKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgaGV4IGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIGhleCAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkSGV4KGhleCkge1xyXG4gICAgY29uc3QgaXNPayA9IC8oXiNbMC05QS1GXXs2fSQpfCheI1swLTlBLUZdezN9JCkvaS50ZXN0KGhleCk7XHJcbiAgICByZXR1cm4gaXNPaztcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCIGNvbG9yIHN0cmluZy5cclxuICpcclxuICogQHBhcmFtIHJnYiAtIFVua25vd24gc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gYSBjb2xvci5cclxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xyXG5mdW5jdGlvbiBpc1ZhbGlkUkdCKHJnYikge1xyXG4gICAgcmV0dXJuIHJnYlJFLnRlc3QocmdiKTtcclxufVxyXG4vKipcclxuICogVmFsaWRhdGUgUkdCQSBjb2xvciBzdHJpbmcuXHJcbiAqXHJcbiAqIEBwYXJhbSByZ2JhIC0gVW5rbm93biBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBhIGNvbG9yLlxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXHJcbmZ1bmN0aW9uIGlzVmFsaWRSR0JBKHJnYmEpIHtcclxuICAgIHJldHVybiByZ2JhUkUudGVzdChyZ2JhKTtcclxufVxyXG4vKipcclxuICogVGhpcyByZWN1cnNpdmVseSByZWRpcmVjdHMgdGhlIHByb3RvdHlwZSBvZiBKU09OIG9iamVjdHMgdG8gdGhlIHJlZmVyZW5jZU9iamVjdC5cclxuICogVGhpcyBpcyB1c2VkIGZvciBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZHMgLSBOYW1lcyBvZiBwcm9wZXJ0aWVzIHRvIGJlIGJyaWRnZWQuXHJcbiAqIEBwYXJhbSByZWZlcmVuY2VPYmplY3QgLSBUaGUgb3JpZ2luYWwgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyBBIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBzZWxlY3RpdmVCcmlkZ2VPYmplY3QoZmllbGRzLCByZWZlcmVuY2VPYmplY3QpIHtcclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIHJlZmVyZW5jZU9iamVjdCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIC8vICEhISB0eXBlb2YgbnVsbCA9PT0gJ29iamVjdCdcclxuICAgICAgICBjb25zdCBvYmplY3RUbyA9IE9iamVjdC5jcmVhdGUocmVmZXJlbmNlT2JqZWN0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZmVyZW5jZU9iamVjdCwgZmllbGRzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSA9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0VG9bZmllbGRzW2ldXSA9IGJyaWRnZU9iamVjdChyZWZlcmVuY2VPYmplY3RbZmllbGRzW2ldXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFRvO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgcmVjdXJzaXZlbHkgcmVkaXJlY3RzIHRoZSBwcm90b3R5cGUgb2YgSlNPTiBvYmplY3RzIHRvIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmVmZXJlbmNlT2JqZWN0IC0gVGhlIG9yaWdpbmFsIG9iamVjdC5cclxuICogQHJldHVybnMgVGhlIEVsZW1lbnQgaWYgdGhlIHJlZmVyZW5jZU9iamVjdCBpcyBhbiBFbGVtZW50LCBvciBhIG5ldyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIHRoZSByZWZlcmVuY2VPYmplY3QuXHJcbiAqL1xyXG5mdW5jdGlvbiBicmlkZ2VPYmplY3QocmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICBpZiAocmVmZXJlbmNlT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiByZWZlcmVuY2VPYmplY3QgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChyZWZlcmVuY2VPYmplY3QgaW5zdGFuY2VvZiBFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gQXZvaWQgYnJpZGdpbmcgRE9NIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gcmVmZXJlbmNlT2JqZWN0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqZWN0VG8gPSBPYmplY3QuY3JlYXRlKHJlZmVyZW5jZU9iamVjdCk7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVmZXJlbmNlT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWZlcmVuY2VPYmplY3QsIGkpKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVmZXJlbmNlT2JqZWN0W2ldID09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIG9iamVjdFRvW2ldID0gYnJpZGdlT2JqZWN0KHJlZmVyZW5jZU9iamVjdFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0VG87XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgc3RhYmxlIHNvcnQgaW1wbGVtZW50YXRpb24sIHZlcnkgZmFzdCBmb3IgcHJlc29ydGVkIGRhdGEuXHJcbiAqXHJcbiAqIEBwYXJhbSBhIC0gVGhlIGFycmF5IHRvIGJlIHNvcnRlZCAoaW4tcGxhY2UpLlxyXG4gKiBAcGFyYW0gY29tcGFyZSAtIEFuIG9yZGVyIGNvbXBhcmF0b3IuXHJcbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudCBhLlxyXG4gKi9cclxuZnVuY3Rpb24gaW5zZXJ0U29ydChhLCBjb21wYXJlKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBrID0gYVtpXTtcclxuICAgICAgICBsZXQgajtcclxuICAgICAgICBmb3IgKGogPSBpOyBqID4gMCAmJiBjb21wYXJlKGssIGFbaiAtIDFdKSA8IDA7IGotLSkge1xyXG4gICAgICAgICAgICBhW2pdID0gYVtqIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFbal0gPSBrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGE7XHJcbn1cclxuLyoqXHJcbiAqIFRoaXMgaXMgdXNlZCB0byBzZXQgdGhlIG9wdGlvbnMgb2Ygc3Vib2JqZWN0cyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXHJcbiAqXHJcbiAqIEEgcmVxdWlyZW1lbnQgb2YgdGhlc2Ugc3Vib2JqZWN0cyBpcyB0aGF0IHRoZXkgaGF2ZSBhbiAnZW5hYmxlZCcgZWxlbWVudFxyXG4gKiB3aGljaCBpcyBvcHRpb25hbCBmb3IgdGhlIHVzZXIgYnV0IG1hbmRhdG9yeSBmb3IgdGhlIHByb2dyYW0uXHJcbiAqXHJcbiAqIFRoZSBhZGRlZCB2YWx1ZSBoZXJlIG9mIHRoZSBtZXJnZSBpcyB0aGF0IG9wdGlvbiAnZW5hYmxlZCcgaXMgc2V0IGFzIHJlcXVpcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWVyZ2VUYXJnZXQgLSBFaXRoZXIgdGhpcy5vcHRpb25zIG9yIHRoZSBvcHRpb25zIHVzZWQgZm9yIHRoZSBncm91cHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICogQHBhcmFtIG9wdGlvbiAtIE9wdGlvbiBrZXkgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQuXHJcbiAqIEBwYXJhbSBnbG9iYWxPcHRpb25zIC0gR2xvYmFsIG9wdGlvbnMsIHBhc3NlZCBpbiB0byBkZXRlcm1pbmUgdmFsdWUgb2Ygb3B0aW9uICdlbmFibGVkJy5cclxuICovXHJcbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhtZXJnZVRhcmdldCwgb3B0aW9ucywgb3B0aW9uLCBnbG9iYWxPcHRpb25zID0ge30pIHtcclxuICAgIC8vIExvY2FsIGhlbHBlcnNcclxuICAgIGNvbnN0IGlzUHJlc2VudCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9iaiAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGlzT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIjtcclxuICAgIH07XHJcbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzQ0OTEyODcvMTIyMzUzMVxyXG4gICAgY29uc3QgaXNFbXB0eSA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHggaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCB4KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8vIEd1YXJkc1xyXG4gICAgaWYgKCFpc09iamVjdChtZXJnZVRhcmdldCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgbWVyZ2VUYXJnZXQgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3RcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzUHJlc2VudChvcHRpb24pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyYW1ldGVyIG9wdGlvbiBtdXN0IGhhdmUgYSB2YWx1ZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJhbWV0ZXIgZ2xvYmFsT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdFwiKTtcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICAvLyBBY3R1YWwgbWVyZ2Ugcm91dGluZSwgc2VwYXJhdGVkIGZyb20gbWFpbiBsb2dpY1xyXG4gICAgLy8gT25seSBhIHNpbmdsZSBsZXZlbCBvZiBvcHRpb25zIGlzIG1lcmdlZC4gRGVlcGVyIGxldmVscyBhcmUgcmVmJ2QuIFRoaXMgbWF5IGFjdHVhbGx5IGJlIGFuIGlzc3VlLlxyXG4gICAgLy9cclxuICAgIGNvbnN0IGRvTWVyZ2UgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zLCBvcHRpb24pIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KHRhcmdldFtvcHRpb25dKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbb3B0aW9uXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcmMgPSBvcHRpb25zW29wdGlvbl07XHJcbiAgICAgICAgY29uc3QgZHN0ID0gdGFyZ2V0W29wdGlvbl07XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHNyYykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNyYywgcHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRzdFtwcm9wXSA9IHNyY1twcm9wXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBMb2NhbCBpbml0aWFsaXphdGlvblxyXG4gICAgY29uc3Qgc3JjT3B0aW9uID0gb3B0aW9uc1tvcHRpb25dO1xyXG4gICAgY29uc3QgZ2xvYmFsUGFzc2VkID0gaXNPYmplY3QoZ2xvYmFsT3B0aW9ucykgJiYgIWlzRW1wdHkoZ2xvYmFsT3B0aW9ucyk7XHJcbiAgICBjb25zdCBnbG9iYWxPcHRpb24gPSBnbG9iYWxQYXNzZWQgPyBnbG9iYWxPcHRpb25zW29wdGlvbl0gOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBnbG9iYWxFbmFibGVkID0gZ2xvYmFsT3B0aW9uID8gZ2xvYmFsT3B0aW9uLmVuYWJsZWQgOiB1bmRlZmluZWQ7XHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTWFpbiByb3V0aW5lXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgaWYgKHNyY09wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNyY09wdGlvbiA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICBpZiAoIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVyZ2VUYXJnZXRbb3B0aW9uXS5lbmFibGVkID0gc3JjT3B0aW9uO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChzcmNPcHRpb24gPT09IG51bGwgJiYgIWlzT2JqZWN0KG1lcmdlVGFyZ2V0W29wdGlvbl0pKSB7XHJcbiAgICAgICAgLy8gSWYgcG9zc2libGUsIGV4cGxpY2l0IGNvcHkgZnJvbSBnbG9iYWxzXHJcbiAgICAgICAgaWYgKGlzUHJlc2VudChnbG9iYWxPcHRpb24pKSB7XHJcbiAgICAgICAgICAgIG1lcmdlVGFyZ2V0W29wdGlvbl0gPSBPYmplY3QuY3JlYXRlKGdsb2JhbE9wdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzT2JqZWN0KHNyY09wdGlvbikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gRW5zdXJlIHRoYXQgJ2VuYWJsZWQnIGlzIHByb3Blcmx5IHNldC4gSXQgaXMgcmVxdWlyZWQgaW50ZXJuYWxseVxyXG4gICAgLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBmcm9tIG9wdGlvbnMgd2lsbCBhbHdheXMgb3ZlcndyaXRlIHRoZSBleGlzdGluZyB2YWx1ZVxyXG4gICAgLy9cclxuICAgIGxldCBlbmFibGVkID0gdHJ1ZTsgLy8gZGVmYXVsdCB2YWx1ZVxyXG4gICAgaWYgKHNyY09wdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBlbmFibGVkID0gc3JjT3B0aW9uLmVuYWJsZWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBUYWtlIGZyb20gZ2xvYmFscywgaWYgcHJlc2VudFxyXG4gICAgICAgIGlmIChnbG9iYWxFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZCA9IGdsb2JhbE9wdGlvbi5lbmFibGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRvTWVyZ2UobWVyZ2VUYXJnZXQsIG9wdGlvbnMsIG9wdGlvbik7XHJcbiAgICBtZXJnZVRhcmdldFtvcHRpb25dLmVuYWJsZWQgPSBlbmFibGVkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYSBiaW5hcnkgc2VhcmNoIGZvciBhIHZpc2libGUgaXRlbSBpbiBhIHNvcnRlZCBsaXN0LiBJZiB3ZSBmaW5kIGEgdmlzaWJsZSBpdGVtLCB0aGUgY29kZSB0aGF0IHVzZXNcclxuICogdGhpcyBmdW5jdGlvbiB3aWxsIHRoZW4gaXRlcmF0ZSBpbiBib3RoIGRpcmVjdGlvbnMgb3ZlciB0aGlzIHNvcnRlZCBsaXN0IHRvIGZpbmQgYWxsIHZpc2libGUgaXRlbXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBvcmRlcmVkSXRlbXMgLSBJdGVtcyBvcmRlcmVkIGJ5IHN0YXJ0LlxyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIC0xIGlzIGxvd2VyLCAwIGlzIGVxdWFsLCAxIGlzIGhpZ2hlci5cclxuICogQHBhcmFtIGZpZWxkIC0gUHJvcGVydHkgbmFtZSBvbiBhbiBpdGVtIChUaGF0IGlzIGl0ZW1bZmllbGRdKS5cclxuICogQHBhcmFtIGZpZWxkMiAtIFNlY29uZCBwcm9wZXJ0eSBuYW1lIG9uIGFuIGl0ZW0gKFRoYXQgaXMgaXRlbVtmaWVsZF1bZmllbGQyXSkuXHJcbiAqIEByZXR1cm5zIEluZGV4IG9mIHRoZSBmb3VuZCBpdGVtIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoQ3VzdG9tKG9yZGVyZWRJdGVtcywgY29tcGFyYXRvciwgZmllbGQsIGZpZWxkMikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICB3aGlsZSAobG93IDw9IGhpZ2ggJiYgaXRlcmF0aW9uIDwgbWF4SXRlcmF0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IoKGxvdyArIGhpZ2gpIC8gMik7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IG9yZGVyZWRJdGVtc1ttaWRkbGVdO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQyID09PSB1bmRlZmluZWQgPyBpdGVtW2ZpZWxkXSA6IGl0ZW1bZmllbGRdW2ZpZWxkMl07XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gY29tcGFyYXRvcih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGppaGFhLCBmb3VuZCBhIHZpc2libGUgaXRlbSFcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2VhcmNoUmVzdWx0ID09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBzbWFsbCAtLT4gaW5jcmVhc2UgbG93XHJcbiAgICAgICAgICAgIGxvdyA9IG1pZGRsZSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpdCBpcyB0b28gYmlnIC0tPiBkZWNyZWFzZSBoaWdoXHJcbiAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpdGVyYXRpb24rKztcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxufVxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBkb2VzIGEgYmluYXJ5IHNlYXJjaCBmb3IgYSBzcGVjaWZpYyB2YWx1ZSBpbiBhIHNvcnRlZCBhcnJheS5cclxuICogSWYgaXQgZG9lcyBub3QgZXhpc3QgYnV0IGlzIGluIGJldHdlZW4gb2YgdHdvIHZhbHVlcywgd2UgcmV0dXJuIGVpdGhlciB0aGVcclxuICogb25lIGJlZm9yZSBvciB0aGUgb25lIGFmdGVyLCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dCBJZiBpdCBpcyBmb3VuZCwgd2VcclxuICogcmV0dXJuIHRoZSBpbmRleCwgZWxzZSAtMS5cclxuICpcclxuICogQHBhcmFtIG9yZGVyZWRJdGVtcyAtIFNvcnRlZCBhcnJheS5cclxuICogQHBhcmFtIHRhcmdldCAtIFRoZSBzZWFyY2hlZCB2YWx1ZS5cclxuICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gaXRlbXMgdG8gYmUgc2VhcmNoZWQuXHJcbiAqIEBwYXJhbSBzaWRlUHJlZmVyZW5jZSAtIElmIHRoZSB0YXJnZXQgaXMgYmV0d2VlbiB0d28gdmFsdWVzLCBzaG91bGQgdGhlIGluZGV4IG9mIHRoZSBiZWZvcmUgb3IgdGhlIGFmdGVyIGJlIHJldHVybmVkP1xyXG4gKiBAcGFyYW0gY29tcGFyYXRvciAtIEFuIG9wdGlvbmFsIGNvbXBhcmF0b3IsIHJldHVybmluZyAtMSwgMCwgMSBmb3IgXFw8LCA9PT0sIFxcPi5cclxuICogQHJldHVybnMgVGhlIGluZGV4IG9mIGZvdW5kIHZhbHVlIG9yIC0xIGlmIG5vdGhpbmcgd2FzIGZvdW5kLlxyXG4gKi9cclxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoVmFsdWUob3JkZXJlZEl0ZW1zLCB0YXJnZXQsIGZpZWxkLCBzaWRlUHJlZmVyZW5jZSwgY29tcGFyYXRvcikge1xyXG4gICAgY29uc3QgbWF4SXRlcmF0aW9ucyA9IDEwMDAwO1xyXG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XHJcbiAgICBsZXQgbG93ID0gMDtcclxuICAgIGxldCBoaWdoID0gb3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgcHJldlZhbHVlO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgbGV0IG5leHRWYWx1ZTtcclxuICAgIGxldCBtaWRkbGU7XHJcbiAgICBjb21wYXJhdG9yID1cclxuICAgICAgICBjb21wYXJhdG9yICE9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGNvbXBhcmF0b3JcclxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gYiA/IDAgOiBhIDwgYiA/IC0xIDogMTtcclxuICAgICAgICAgICAgfTtcclxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpdGVyYXRpb24gPCBtYXhJdGVyYXRpb25zKSB7XHJcbiAgICAgICAgLy8gZ2V0IGEgbmV3IGd1ZXNzXHJcbiAgICAgICAgbWlkZGxlID0gTWF0aC5mbG9vcigwLjUgKiAoaGlnaCArIGxvdykpO1xyXG4gICAgICAgIHByZXZWYWx1ZSA9IG9yZGVyZWRJdGVtc1tNYXRoLm1heCgwLCBtaWRkbGUgLSAxKV1bZmllbGRdO1xyXG4gICAgICAgIHZhbHVlID0gb3JkZXJlZEl0ZW1zW21pZGRsZV1bZmllbGRdO1xyXG4gICAgICAgIG5leHRWYWx1ZSA9XHJcbiAgICAgICAgICAgIG9yZGVyZWRJdGVtc1tNYXRoLm1pbihvcmRlcmVkSXRlbXMubGVuZ3RoIC0gMSwgbWlkZGxlICsgMSldW2ZpZWxkXTtcclxuICAgICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcihwcmV2VmFsdWUsIHRhcmdldCkgPCAwICYmXHJcbiAgICAgICAgICAgIGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIGN1cnJlbnRcclxuICAgICAgICAgICAgcmV0dXJuIHNpZGVQcmVmZXJlbmNlID09IFwiYmVmb3JlXCIgPyBNYXRoLm1heCgwLCBtaWRkbGUgLSAxKSA6IG1pZGRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29tcGFyYXRvcih2YWx1ZSwgdGFyZ2V0KSA8IDAgJiZcclxuICAgICAgICAgICAgY29tcGFyYXRvcihuZXh0VmFsdWUsIHRhcmdldCkgPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIHRhcmdldCBpcyBpbiBiZXR3ZWVuIG9mIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dFxyXG4gICAgICAgICAgICByZXR1cm4gc2lkZVByZWZlcmVuY2UgPT0gXCJiZWZvcmVcIlxyXG4gICAgICAgICAgICAgICAgPyBtaWRkbGVcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4ob3JkZXJlZEl0ZW1zLmxlbmd0aCAtIDEsIG1pZGRsZSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gZGlkbnQgZmluZCB0aGUgdGFyZ2V0LCB3ZSBuZWVkIHRvIGNoYW5nZSBvdXIgYm91bmRhcmllcy5cclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIHRhcmdldCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyB0b28gc21hbGwgLS0+IGluY3JlYXNlIGxvd1xyXG4gICAgICAgICAgICAgICAgbG93ID0gbWlkZGxlICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIHRvbyBiaWcgLS0+IGRlY3JlYXNlIGhpZ2hcclxuICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgfVxyXG4gICAgLy8gZGlkbnQgZmluZCBhbnl0aGluZy4gUmV0dXJuIC0xLlxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcbi8qXHJcbiAqIEVhc2luZyBGdW5jdGlvbnMuXHJcbiAqIE9ubHkgY29uc2lkZXJpbmcgdGhlIHQgdmFsdWUgZm9yIHRoZSByYW5nZSBbMCwgMV0gPT4gWzAsIDFdLlxyXG4gKlxyXG4gKiBJbnNwaXJhdGlvbjogZnJvbSBodHRwOi8vZ2l6bWEuY29tL2Vhc2luZy9cclxuICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZ3JlLzE2NTAyOTRcclxuICovXHJcbmNvbnN0IGVhc2luZ0Z1bmN0aW9ucyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgbm8gZWFzaW5nIGFuZCBubyBhY2NlbGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBsaW5lYXIodCkge1xyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5RdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCAqIHQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNlbGVyYXRlIHRvIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlT3V0UXVhZCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiAoMiAtIHQpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWFkKHQpIHtcclxuICAgICAgICByZXR1cm4gdCA8IDAuNSA/IDIgKiB0ICogdCA6IC0xICsgKDQgLSAyICogdCkgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSBmcm9tIHplcm8gdmVsb2NpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5DdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRDdWJpYyh0KSB7XHJcbiAgICAgICAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0Q3ViaWModCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gNCAqIHQgKiB0ICogdCA6ICh0IC0gMSkgKiAoMiAqIHQgLSAyKSAqICgyICogdCAtIDIpICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGVjZWxlcmF0ZSB0byB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZU91dFF1YXJ0KHQpIHtcclxuICAgICAgICByZXR1cm4gMSAtIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgdW50aWwgaGFsZndheSwgdGhlbiBkZWNlbGVyYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluT3V0UXVhcnQodCkge1xyXG4gICAgICAgIHJldHVybiB0IDwgMC41ID8gOCAqIHQgKiB0ICogdCAqIHQgOiAxIC0gOCAqIC0tdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VsZXJhdGUgZnJvbSB6ZXJvIHZlbG9jaXR5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0IC0gVGltZS5cclxuICAgICAqIEByZXR1cm5zIFZhbHVlIGF0IHRpbWUgdC5cclxuICAgICAqL1xyXG4gICAgZWFzZUluUXVpbnQodCkge1xyXG4gICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERlY2VsZXJhdGUgdG8gemVybyB2ZWxvY2l0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdCAtIFRpbWUuXHJcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBhdCB0aW1lIHQuXHJcbiAgICAgKi9cclxuICAgIGVhc2VPdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKyAtLXQgKiB0ICogdCAqIHQgKiB0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWNjZWxlcmF0ZSB1bnRpbCBoYWxmd2F5LCB0aGVuIGRlY2VsZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHQgLSBUaW1lLlxyXG4gICAgICogQHJldHVybnMgVmFsdWUgYXQgdGltZSB0LlxyXG4gICAgICovXHJcbiAgICBlYXNlSW5PdXRRdWludCh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyAxNiAqIHQgKiB0ICogdCAqIHQgKiB0IDogMSArIDE2ICogLS10ICogdCAqIHQgKiB0ICogdDtcclxuICAgIH0sXHJcbn07XHJcbi8qKlxyXG4gKiBFeHBlcmltZW50YWx5IGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRoZSBzY3JvbGxiYXIgZm9yIHRoaXMgYnJvd3Nlci5cclxuICpcclxuICogQHJldHVybnMgVGhlIHdpZHRoIGluIHBpeGVscy5cclxuICovXHJcbmZ1bmN0aW9uIGdldFNjcm9sbEJhcldpZHRoKCkge1xyXG4gICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTtcclxuICAgIGlubmVyLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XHJcbiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSBcIjIwMHB4XCI7XHJcbiAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgIG91dGVyLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5sZWZ0ID0gXCIwcHhcIjtcclxuICAgIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xyXG4gICAgb3V0ZXIuc3R5bGUud2lkdGggPSBcIjIwMHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5oZWlnaHQgPSBcIjE1MHB4XCI7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcbiAgICBvdXRlci5hcHBlbmRDaGlsZChpbm5lcik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyKTtcclxuICAgIGNvbnN0IHcxID0gaW5uZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwic2Nyb2xsXCI7XHJcbiAgICBsZXQgdzIgPSBpbm5lci5vZmZzZXRXaWR0aDtcclxuICAgIGlmICh3MSA9PSB3Mikge1xyXG4gICAgICAgIHcyID0gb3V0ZXIuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyKTtcclxuICAgIHJldHVybiB3MSAtIHcyO1xyXG59XHJcbi8vIEBUT0RPOiBUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseS5cclxuLy8gSXQgd29ya3Mgb25seSBmb3Igc2luZ2xlIHByb3BlcnR5IG9iamVjdHMsXHJcbi8vIG90aGVyd2lzZSBpdCBjb21iaW5lcyBhbGwgb2YgdGhlIHR5cGVzIGluIGEgdW5pb24uXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBWMT4gKFxyXG4vLyAgIHBpbGU6IFJlY29yZDxLMSwgdW5kZWZpbmVkIHwgVjE+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBLMSB8IFtLMV1cclxuLy8gKTogdW5kZWZpbmVkIHwgVjFcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIHRvcE1vc3Q8SzEgZXh0ZW5kcyBzdHJpbmcsIEsyIGV4dGVuZHMgc3RyaW5nLCBWMSwgVjI+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMj4+W10sXHJcbi8vICAgYWNjZXNzb3JzOiBbSzEsIEsyXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiB0b3BNb3N0PEsxIGV4dGVuZHMgc3RyaW5nLCBLMiBleHRlbmRzIHN0cmluZywgSzMgZXh0ZW5kcyBzdHJpbmcsIFYxLCBWMiwgVjM+IChcclxuLy8gICBwaWxlOiBSZWNvcmQ8SzEsIHVuZGVmaW5lZCB8IFYxIHwgUmVjb3JkPEsyLCB1bmRlZmluZWQgfCBWMiB8IFJlY29yZDxLMywgdW5kZWZpbmVkIHwgVjM+Pj5bXSxcclxuLy8gICBhY2Nlc3NvcnM6IFtLMSwgSzIsIEszXVxyXG4vLyApOiB1bmRlZmluZWQgfCBWMSB8IFYyIHwgVjNcclxuLyoqXHJcbiAqIEdldCB0aGUgdG9wIG1vc3QgcHJvcGVydHkgdmFsdWUgZnJvbSBhIHBpbGUgb2Ygb2JqZWN0cy5cclxuICpcclxuICogQHBhcmFtIHBpbGUgLSBBcnJheSBvZiBvYmplY3RzLCBubyByZXF1aXJlZCBmb3JtYXQuXHJcbiAqIEBwYXJhbSBhY2Nlc3NvcnMgLSBBcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cclxuICogRm9yIGV4YW1wbGUgYG9iamVjdFsnZm9vJ11bJ2JhciddYCDihpIgYFsnZm9vJywgJ2JhciddYC5cclxuICogQHJldHVybnMgVmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGggZ2l2ZW4gYWNjZXNzb3JzIHBhdGggZnJvbSB0aGUgZmlyc3QgcGlsZSBpdGVtIHdoZXJlIGl0J3Mgbm90IHVuZGVmaW5lZC5cclxuICovXHJcbmZ1bmN0aW9uIHRvcE1vc3QocGlsZSwgYWNjZXNzb3JzKSB7XHJcbiAgICBsZXQgY2FuZGlkYXRlO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFjY2Vzc29ycykpIHtcclxuICAgICAgICBhY2Nlc3NvcnMgPSBbYWNjZXNzb3JzXTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHBpbGUpIHtcclxuICAgICAgICBpZiAobWVtYmVyKSB7XHJcbiAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG1lbWJlclthY2Nlc3NvcnNbMF1dO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFjY2Vzc29ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVthY2Nlc3NvcnNbaV1dO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjYW5kaWRhdGU7XHJcbn1cblxuY29uc3QgaHRtbENvbG9ycyA9IHtcbiAgYmxhY2s6IFwiIzAwMDAwMFwiLFxuICBuYXZ5OiBcIiMwMDAwODBcIixcbiAgZGFya2JsdWU6IFwiIzAwMDA4QlwiLFxuICBtZWRpdW1ibHVlOiBcIiMwMDAwQ0RcIixcbiAgYmx1ZTogXCIjMDAwMEZGXCIsXG4gIGRhcmtncmVlbjogXCIjMDA2NDAwXCIsXG4gIGdyZWVuOiBcIiMwMDgwMDBcIixcbiAgdGVhbDogXCIjMDA4MDgwXCIsXG4gIGRhcmtjeWFuOiBcIiMwMDhCOEJcIixcbiAgZGVlcHNreWJsdWU6IFwiIzAwQkZGRlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIiMwMENFRDFcIixcbiAgbWVkaXVtc3ByaW5nZ3JlZW46IFwiIzAwRkE5QVwiLFxuICBsaW1lOiBcIiMwMEZGMDBcIixcbiAgc3ByaW5nZ3JlZW46IFwiIzAwRkY3RlwiLFxuICBhcXVhOiBcIiMwMEZGRkZcIixcbiAgY3lhbjogXCIjMDBGRkZGXCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIjMTkxOTcwXCIsXG4gIGRvZGdlcmJsdWU6IFwiIzFFOTBGRlwiLFxuICBsaWdodHNlYWdyZWVuOiBcIiMyMEIyQUFcIixcbiAgZm9yZXN0Z3JlZW46IFwiIzIyOEIyMlwiLFxuICBzZWFncmVlbjogXCIjMkU4QjU3XCIsXG4gIGRhcmtzbGF0ZWdyYXk6IFwiIzJGNEY0RlwiLFxuICBsaW1lZ3JlZW46IFwiIzMyQ0QzMlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIjM0NCMzcxXCIsXG4gIHR1cnF1b2lzZTogXCIjNDBFMEQwXCIsXG4gIHJveWFsYmx1ZTogXCIjNDE2OUUxXCIsXG4gIHN0ZWVsYmx1ZTogXCIjNDY4MkI0XCIsXG4gIGRhcmtzbGF0ZWJsdWU6IFwiIzQ4M0Q4QlwiLFxuICBtZWRpdW10dXJxdW9pc2U6IFwiIzQ4RDFDQ1wiLFxuICBpbmRpZ286IFwiIzRCMDA4MlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCIjNTU2QjJGXCIsXG4gIGNhZGV0Ymx1ZTogXCIjNUY5RUEwXCIsXG4gIGNvcm5mbG93ZXJibHVlOiBcIiM2NDk1RURcIixcbiAgbWVkaXVtYXF1YW1hcmluZTogXCIjNjZDREFBXCIsXG4gIGRpbWdyYXk6IFwiIzY5Njk2OVwiLFxuICBzbGF0ZWJsdWU6IFwiIzZBNUFDRFwiLFxuICBvbGl2ZWRyYWI6IFwiIzZCOEUyM1wiLFxuICBzbGF0ZWdyYXk6IFwiIzcwODA5MFwiLFxuICBsaWdodHNsYXRlZ3JheTogXCIjNzc4ODk5XCIsXG4gIG1lZGl1bXNsYXRlYmx1ZTogXCIjN0I2OEVFXCIsXG4gIGxhd25ncmVlbjogXCIjN0NGQzAwXCIsXG4gIGNoYXJ0cmV1c2U6IFwiIzdGRkYwMFwiLFxuICBhcXVhbWFyaW5lOiBcIiM3RkZGRDRcIixcbiAgbWFyb29uOiBcIiM4MDAwMDBcIixcbiAgcHVycGxlOiBcIiM4MDAwODBcIixcbiAgb2xpdmU6IFwiIzgwODAwMFwiLFxuICBncmF5OiBcIiM4MDgwODBcIixcbiAgc2t5Ymx1ZTogXCIjODdDRUVCXCIsXG4gIGxpZ2h0c2t5Ymx1ZTogXCIjODdDRUZBXCIsXG4gIGJsdWV2aW9sZXQ6IFwiIzhBMkJFMlwiLFxuICBkYXJrcmVkOiBcIiM4QjAwMDBcIixcbiAgZGFya21hZ2VudGE6IFwiIzhCMDA4QlwiLFxuICBzYWRkbGVicm93bjogXCIjOEI0NTEzXCIsXG4gIGRhcmtzZWFncmVlbjogXCIjOEZCQzhGXCIsXG4gIGxpZ2h0Z3JlZW46IFwiIzkwRUU5MFwiLFxuICBtZWRpdW1wdXJwbGU6IFwiIzkzNzBEOFwiLFxuICBkYXJrdmlvbGV0OiBcIiM5NDAwRDNcIixcbiAgcGFsZWdyZWVuOiBcIiM5OEZCOThcIixcbiAgZGFya29yY2hpZDogXCIjOTkzMkNDXCIsXG4gIHllbGxvd2dyZWVuOiBcIiM5QUNEMzJcIixcbiAgc2llbm5hOiBcIiNBMDUyMkRcIixcbiAgYnJvd246IFwiI0E1MkEyQVwiLFxuICBkYXJrZ3JheTogXCIjQTlBOUE5XCIsXG4gIGxpZ2h0Ymx1ZTogXCIjQUREOEU2XCIsXG4gIGdyZWVueWVsbG93OiBcIiNBREZGMkZcIixcbiAgcGFsZXR1cnF1b2lzZTogXCIjQUZFRUVFXCIsXG4gIGxpZ2h0c3RlZWxibHVlOiBcIiNCMEM0REVcIixcbiAgcG93ZGVyYmx1ZTogXCIjQjBFMEU2XCIsXG4gIGZpcmVicmljazogXCIjQjIyMjIyXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiI0I4ODYwQlwiLFxuICBtZWRpdW1vcmNoaWQ6IFwiI0JBNTVEM1wiLFxuICByb3N5YnJvd246IFwiI0JDOEY4RlwiLFxuICBkYXJra2hha2k6IFwiI0JEQjc2QlwiLFxuICBzaWx2ZXI6IFwiI0MwQzBDMFwiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiI0M3MTU4NVwiLFxuICBpbmRpYW5yZWQ6IFwiI0NENUM1Q1wiLFxuICBwZXJ1OiBcIiNDRDg1M0ZcIixcbiAgY2hvY29sYXRlOiBcIiNEMjY5MUVcIixcbiAgdGFuOiBcIiNEMkI0OENcIixcbiAgbGlnaHRncmV5OiBcIiNEM0QzRDNcIixcbiAgcGFsZXZpb2xldHJlZDogXCIjRDg3MDkzXCIsXG4gIHRoaXN0bGU6IFwiI0Q4QkZEOFwiLFxuICBvcmNoaWQ6IFwiI0RBNzBENlwiLFxuICBnb2xkZW5yb2Q6IFwiI0RBQTUyMFwiLFxuICBjcmltc29uOiBcIiNEQzE0M0NcIixcbiAgZ2FpbnNib3JvOiBcIiNEQ0RDRENcIixcbiAgcGx1bTogXCIjRERBMEREXCIsXG4gIGJ1cmx5d29vZDogXCIjREVCODg3XCIsXG4gIGxpZ2h0Y3lhbjogXCIjRTBGRkZGXCIsXG4gIGxhdmVuZGVyOiBcIiNFNkU2RkFcIixcbiAgZGFya3NhbG1vbjogXCIjRTk5NjdBXCIsXG4gIHZpb2xldDogXCIjRUU4MkVFXCIsXG4gIHBhbGVnb2xkZW5yb2Q6IFwiI0VFRThBQVwiLFxuICBsaWdodGNvcmFsOiBcIiNGMDgwODBcIixcbiAga2hha2k6IFwiI0YwRTY4Q1wiLFxuICBhbGljZWJsdWU6IFwiI0YwRjhGRlwiLFxuICBob25leWRldzogXCIjRjBGRkYwXCIsXG4gIGF6dXJlOiBcIiNGMEZGRkZcIixcbiAgc2FuZHlicm93bjogXCIjRjRBNDYwXCIsXG4gIHdoZWF0OiBcIiNGNURFQjNcIixcbiAgYmVpZ2U6IFwiI0Y1RjVEQ1wiLFxuICB3aGl0ZXNtb2tlOiBcIiNGNUY1RjVcIixcbiAgbWludGNyZWFtOiBcIiNGNUZGRkFcIixcbiAgZ2hvc3R3aGl0ZTogXCIjRjhGOEZGXCIsXG4gIHNhbG1vbjogXCIjRkE4MDcyXCIsXG4gIGFudGlxdWV3aGl0ZTogXCIjRkFFQkQ3XCIsXG4gIGxpbmVuOiBcIiNGQUYwRTZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiI0ZBRkFEMlwiLFxuICBvbGRsYWNlOiBcIiNGREY1RTZcIixcbiAgcmVkOiBcIiNGRjAwMDBcIixcbiAgZnVjaHNpYTogXCIjRkYwMEZGXCIsXG4gIG1hZ2VudGE6IFwiI0ZGMDBGRlwiLFxuICBkZWVwcGluazogXCIjRkYxNDkzXCIsXG4gIG9yYW5nZXJlZDogXCIjRkY0NTAwXCIsXG4gIHRvbWF0bzogXCIjRkY2MzQ3XCIsXG4gIGhvdHBpbms6IFwiI0ZGNjlCNFwiLFxuICBjb3JhbDogXCIjRkY3RjUwXCIsXG4gIGRhcmtvcmFuZ2U6IFwiI0ZGOEMwMFwiLFxuICBsaWdodHNhbG1vbjogXCIjRkZBMDdBXCIsXG4gIG9yYW5nZTogXCIjRkZBNTAwXCIsXG4gIGxpZ2h0cGluazogXCIjRkZCNkMxXCIsXG4gIHBpbms6IFwiI0ZGQzBDQlwiLFxuICBnb2xkOiBcIiNGRkQ3MDBcIixcbiAgcGVhY2hwdWZmOiBcIiNGRkRBQjlcIixcbiAgbmF2YWpvd2hpdGU6IFwiI0ZGREVBRFwiLFxuICBtb2NjYXNpbjogXCIjRkZFNEI1XCIsXG4gIGJpc3F1ZTogXCIjRkZFNEM0XCIsXG4gIG1pc3R5cm9zZTogXCIjRkZFNEUxXCIsXG4gIGJsYW5jaGVkYWxtb25kOiBcIiNGRkVCQ0RcIixcbiAgcGFwYXlhd2hpcDogXCIjRkZFRkQ1XCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiI0ZGRjBGNVwiLFxuICBzZWFzaGVsbDogXCIjRkZGNUVFXCIsXG4gIGNvcm5zaWxrOiBcIiNGRkY4RENcIixcbiAgbGVtb25jaGlmZm9uOiBcIiNGRkZBQ0RcIixcbiAgZmxvcmFsd2hpdGU6IFwiI0ZGRkFGMFwiLFxuICBzbm93OiBcIiNGRkZBRkFcIixcbiAgeWVsbG93OiBcIiNGRkZGMDBcIixcbiAgbGlnaHR5ZWxsb3c6IFwiI0ZGRkZFMFwiLFxuICBpdm9yeTogXCIjRkZGRkYwXCIsXG4gIHdoaXRlOiBcIiNGRkZGRkZcIixcbn07XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gKi9cbmxldCBDb2xvclBpY2tlciQxID0gY2xhc3MgQ29sb3JQaWNrZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtwaXhlbFJhdGlvPTFdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwaXhlbFJhdGlvID0gMSkge1xuICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiAyODkgLyAyLCB5OiAyODkgLyAyIH07XG4gICAgdGhpcy5yID0gMjg5ICogMC40OTtcbiAgICB0aGlzLmNvbG9yID0geyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhOiAxLjAgfTtcbiAgICB0aGlzLmh1ZUNpcmNsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmluaXRpYWxDb2xvciA9IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYTogMS4wIH07XG4gICAgdGhpcy5wcmV2aW91c0NvbG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuXG4gICAgLy8gYm91bmQgYnlcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gKCkgPT4ge307XG4gICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gKCkgPT4ge307XG5cbiAgICAvLyBjcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgIHRoaXMuX2NyZWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgaW5zZXJ0cyB0aGUgY29sb3JQaWNrZXIgaW50byBhIGRpdiBmcm9tIHRoZSBET01cbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fSBjb250YWluZXJcbiAgICovXG4gIGluc2VydFRvKGNvbnRhaW5lcikge1xuICAgIGlmICh0aGlzLmhhbW1lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmhhbW1lci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhhbW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XG4gICAgdGhpcy5fYmluZEhhbW1lcigpO1xuXG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBvbiBhcHBseSBhbmQgc2F2ZS4gQmluZCBpdCB0byB0aGUgYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHNldFVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIHVwZGF0ZSBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbi5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIG9uIGFwcGx5IGFuZCBzYXZlLiBCaW5kIGl0IHRvIHRoZSBhcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgc2V0Q2xvc2VDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGdW5jdGlvbiBhdHRlbXB0ZWQgdG8gc2V0IGFzIGNvbG9yUGlja2VyIGNsb3NpbmcgY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24uXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lzQ29sb3JTdHJpbmcoY29sb3IpIHtcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gaHRtbENvbG9yc1tjb2xvcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29sb3Igb2YgdGhlIGNvbG9yUGlja2VyXG4gICAqIFN1cHBvcnRlZCBmb3JtYXRzOlxuICAgKiAncmVkJyAgICAgICAgICAgICAgICAgICAtLT4gSFRNTCBjb2xvciBzdHJpbmdcbiAgICogJyNmZmZmZmYnICAgICAgICAgICAgICAgLS0+IGhleCBzdHJpbmdcbiAgICogJ3JnYigyNTUsMjU1LDI1NSknICAgICAgLS0+IHJnYiBzdHJpbmdcbiAgICogJ3JnYmEoMjU1LDI1NSwyNTUsMS4wKScgLS0+IHJnYmEgc3RyaW5nXG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NX0gICAgIC0tPiByZ2Igb2JqZWN0XG4gICAqIHtyOjI1NSxnOjI1NSxiOjI1NSxhOjEuMH0gLS0+IHJnYmEgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgb2JqZWN0fSBjb2xvclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXRJbml0aWFsPXRydWVdXG4gICAqL1xuICBzZXRDb2xvcihjb2xvciwgc2V0SW5pdGlhbCA9IHRydWUpIHtcbiAgICBpZiAoY29sb3IgPT09IFwibm9uZVwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJnYmE7XG5cbiAgICAvLyBpZiBhIGh0bWwgY29sb3Igc2hvcnRoYW5kIGlzIHVzZWQsIGNvbnZlcnQgdG8gaGV4XG4gICAgY29uc3QgaHRtbENvbG9yID0gdGhpcy5faXNDb2xvclN0cmluZyhjb2xvcik7XG4gICAgaWYgKGh0bWxDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2xvciA9IGh0bWxDb2xvcjtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3JtYXRcbiAgICBpZiAoaXNTdHJpbmcoY29sb3IpID09PSB0cnVlKSB7XG4gICAgICBpZiAoaXNWYWxpZFJHQihjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDQpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA1KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYmFBcnJheVswXSwgZzogcmdiYUFycmF5WzFdLCBiOiByZ2JhQXJyYXlbMl0sIGE6IDEuMCB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkUkdCQShjb2xvcikgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3QgcmdiYUFycmF5ID0gY29sb3JcbiAgICAgICAgICAuc3Vic3RyKDUpXG4gICAgICAgICAgLnN1YnN0cigwLCBjb2xvci5sZW5ndGggLSA2KVxuICAgICAgICAgIC5zcGxpdChcIixcIik7XG4gICAgICAgIHJnYmEgPSB7XG4gICAgICAgICAgcjogcmdiYUFycmF5WzBdLFxuICAgICAgICAgIGc6IHJnYmFBcnJheVsxXSxcbiAgICAgICAgICBiOiByZ2JhQXJyYXlbMl0sXG4gICAgICAgICAgYTogcmdiYUFycmF5WzNdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkSGV4KGNvbG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZ2JPYmogPSBoZXhUb1JHQihjb2xvcik7XG4gICAgICAgIHJnYmEgPSB7IHI6IHJnYk9iai5yLCBnOiByZ2JPYmouZywgYjogcmdiT2JqLmIsIGE6IDEuMCB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29sb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbG9yLnIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGNvbG9yLmIgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhbHBoYSA9IGNvbG9yLmEgIT09IHVuZGVmaW5lZCA/IGNvbG9yLmEgOiBcIjEuMFwiO1xuICAgICAgICAgIHJnYmEgPSB7IHI6IGNvbG9yLnIsIGc6IGNvbG9yLmcsIGI6IGNvbG9yLmIsIGE6IGFscGhhIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgY29sb3JcbiAgICBpZiAocmdiYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biBjb2xvciBwYXNzZWQgdG8gdGhlIGNvbG9yUGlja2VyLiBTdXBwb3J0ZWQgYXJlIHN0cmluZ3M6IHJnYiwgaGV4LCByZ2JhLiBPYmplY3Q6IHJnYiAoe3I6cixnOmcsYjpiLFthOmFdfSkuIFN1cHBsaWVkOiBcIiArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29sb3IpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogdGhpcyBzaG93cyB0aGUgY29sb3IgcGlja2VyLlxuICAgKiBUaGUgaHVlIGNpcmNsZSBpcyBjb25zdHJ1Y3RlZCBvbmNlIGFuZCBzdG9yZWQuXG4gICAqL1xuICBzaG93KCkge1xuICAgIGlmICh0aGlzLmNsb3NlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jbG9zZUNhbGxiYWNrKCk7XG4gICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHRoaXMuX2dlbmVyYXRlSHVlQ2lyY2xlKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFJJVkFURSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwaWNrZXIuIElzIGNhbGxlZCBieSB0aGUgY2FuY2VsIGJ1dHRvbi5cbiAgICogT3B0aW9uYWwgYm9vbGVhbiB0byBzdG9yZSB0aGUgcHJldmlvdXMgY29sb3IgZm9yIGVhc3kgYWNjZXNzIGxhdGVyIG9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzdG9yZVByZXZpb3VzPXRydWVdXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaGlkZShzdG9yZVByZXZpb3VzID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBwcmV2aW91cyBjb2xvciBmb3IgbmV4dCB0aW1lO1xuICAgIGlmIChzdG9yZVByZXZpb3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnByZXZpb3VzQ29sb3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBsaWVkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuaW5pdGlhbENvbG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICAgIC8vIGNhbGwgdGhlIGNsb3NpbmcgY2FsbGJhY2ssIHJlc3RvcmluZyB0aGUgb25jbGljayBtZXRob2QuXG4gICAgLy8gdGhpcyBpcyBpbiBhIHNldFRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgdGhlIHNob3cgYWdhaW4gYmVmb3JlIHRoZSBjbGljayBpcyBkb25lLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2xvc2VDYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDYWxsYmFjaygpO1xuICAgICAgICB0aGlzLmNsb3NlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogYm91bmQgdG8gdGhlIHNhdmUgYnV0dG9uLiBTYXZlcyBhbmQgaGlkZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2F2ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUNhbGxiYWNrKHRoaXMuY29sb3IpO1xuICAgIHRoaXMuYXBwbGllZCA9IGZhbHNlO1xuICAgIHRoaXMuX2hpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb3VuZCB0byBhcHBseSBidXR0b24uIFNhdmVzIGJ1dCBkb2VzIG5vdCBjbG9zZS4gSXMgdW5kb25lIGJ5IHRoZSBjYW5jZWwgYnV0dG9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2FwcGx5KCkge1xuICAgIHRoaXMuYXBwbGllZCA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLl91cGRhdGVQaWNrZXIodGhpcy5jb2xvcik7XG4gIH1cblxuICAvKipcbiAgICogbG9hZCB0aGUgY29sb3IgZnJvbSB0aGUgcHJldmlvdXMgc2Vzc2lvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9sb2FkTGFzdCgpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c0NvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IodGhpcy5wcmV2aW91c0NvbG9yLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KFwiVGhlcmUgaXMgbm8gbGFzdCBjb2xvciB0byBsb2FkLi4uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgdGhlIGNvbG9yLCBwbGFjZSB0aGUgcGlja2VyXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZ2JhXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NldEluaXRpYWw9dHJ1ZV1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRDb2xvcihyZ2JhLCBzZXRJbml0aWFsID0gdHJ1ZSkge1xuICAgIC8vIHN0b3JlIHRoZSBpbml0aWFsIGNvbG9yXG4gICAgaWYgKHNldEluaXRpYWwgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gT2JqZWN0LmFzc2lnbih7fSwgcmdiYSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvciA9IHJnYmE7XG4gICAgY29uc3QgaHN2ID0gUkdCVG9IU1YocmdiYS5yLCByZ2JhLmcsIHJnYmEuYik7XG5cbiAgICBjb25zdCBhbmdsZUNvbnZlcnQgPSAyICogTWF0aC5QSTtcbiAgICBjb25zdCByYWRpdXMgPSB0aGlzLnIgKiBoc3YucztcbiAgICBjb25zdCB4ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueCArIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcbiAgICBjb25zdCB5ID1cbiAgICAgIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlQ29udmVydCAqIGhzdi5oKTtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5zdHlsZS5sZWZ0ID1cbiAgICAgIHggLSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IuY2xpZW50V2lkdGggKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLnRvcCA9XG4gICAgICB5IC0gMC41ICogdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsaWVudEhlaWdodCArIFwicHhcIjtcblxuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcihyZ2JhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBvcGFjaXR5IGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0T3BhY2l0eSh2YWx1ZSkge1xuICAgIHRoaXMuY29sb3IuYSA9IHZhbHVlIC8gMTAwO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcih0aGlzLmNvbG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBib3VuZCB0byBicmlnaHRuZXNzIGNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0QnJpZ2h0bmVzcyh2YWx1ZSkge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi52ID0gdmFsdWUgLyAxMDA7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuICAgIHRoaXMuX3VwZGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSB0aGUgY29sb3IgcGlja2VyLiBBIGJsYWNrIGNpcmNsZSBvdmVybGF5cyB0aGUgaHVlIGNpcmNsZSB0byBtaW1pYyB0aGUgYnJpZ2h0bmVzcyBkZWNyZWFzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmdiYVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZVBpY2tlcihyZ2JhID0gdGhpcy5jb2xvcikge1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGl4ZWxSYXRpbyA9XG4gICAgICAgICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAvXG4gICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgIGN0eC5iYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgMSk7XG4gICAgfVxuICAgIGN0eC5zZXRUcmFuc2Zvcm0odGhpcy5waXhlbFJhdGlvLCAwLCAwLCB0aGlzLnBpeGVsUmF0aW8sIDAsIDApO1xuXG4gICAgLy8gY2xlYXIgdGhlIGNhbnZhc1xuICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgIGNvbnN0IGggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudEhlaWdodDtcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuXG4gICAgY3R4LnB1dEltYWdlRGF0YSh0aGlzLmh1ZUNpcmNsZSwgMCwgMCk7XG4gICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLDAsMCxcIiArICgxIC0gaHN2LnYpICsgXCIpXCI7XG4gICAgY3R4LmNpcmNsZSh0aGlzLmNlbnRlckNvb3JkaW5hdGVzLngsIHRoaXMuY2VudGVyQ29vcmRpbmF0ZXMueSwgdGhpcy5yKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UudmFsdWUgPSAxMDAgKiBoc3YudjtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IDEwMCAqIHJnYmEuYTtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuciArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYSArXG4gICAgICBcIilcIjtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9XG4gICAgICBcInJnYmEoXCIgK1xuICAgICAgdGhpcy5jb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuZyArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHVzZWQgYnkgY3JlYXRlIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFNpemUoKSB7XG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuc3R5bGUuaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLndpZHRoID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXMuaGVpZ2h0ID0gMjg5ICogdGhpcy5waXhlbFJhdGlvO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhbGwgZG9tIGVsZW1lbnRzXG4gICAqIFRPRE86IGNsZWFudXAsIGxvdHMgb2Ygc2ltaWxhciBkb20gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGUoKSB7XG4gICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5mcmFtZS5jbGFzc05hbWUgPSBcInZpcy1jb2xvci1waWNrZXJcIjtcblxuICAgIHRoaXMuY29sb3JQaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuY29sb3JQaWNrZXJTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLmNsYXNzTmFtZSA9IFwidmlzLXNlbGVjdG9yXCI7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3IpO1xuXG4gICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgdGhpcy5jb2xvclBpY2tlckRpdi5hcHBlbmRDaGlsZCh0aGlzLmNvbG9yUGlja2VyQ2FudmFzKTtcblxuICAgIGlmICghdGhpcy5jb2xvclBpY2tlckNhbnZhcy5nZXRDb250ZXh0KSB7XG4gICAgICBjb25zdCBub0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIik7XG4gICAgICBub0NhbnZhcy5zdHlsZS5jb2xvciA9IFwicmVkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XG4gICAgICBub0NhbnZhcy5zdHlsZS5wYWRkaW5nID0gXCIxMHB4XCI7XG4gICAgICBub0NhbnZhcy5pbm5lclRleHQgPSBcIkVycm9yOiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBIVE1MIGNhbnZhc1wiO1xuICAgICAgdGhpcy5jb2xvclBpY2tlckNhbnZhcy5hcHBlbmRDaGlsZChub0NhbnZhcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIC9cbiAgICAgICAgKGN0eC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICBjdHgubXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4Lm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIHx8XG4gICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAxKTtcbiAgICAgIHRoaXMuY29sb3JQaWNrZXJDYW52YXNcbiAgICAgICAgLmdldENvbnRleHQoXCIyZFwiKVxuICAgICAgICAuc2V0VHJhbnNmb3JtKHRoaXMucGl4ZWxSYXRpbywgMCwgMCwgdGhpcy5waXhlbFJhdGlvLCAwLCAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyRGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbG9yXCI7XG5cbiAgICB0aGlzLm9wYWNpdHlEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMub3BhY2l0eURpdi5jbGFzc05hbWUgPSBcInZpcy1vcGFjaXR5XCI7XG5cbiAgICB0aGlzLmJyaWdodG5lc3NEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuYnJpZ2h0bmVzc0Rpdi5jbGFzc05hbWUgPSBcInZpcy1icmlnaHRuZXNzXCI7XG5cbiAgICB0aGlzLmFycm93RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmFycm93RGl2LmNsYXNzTmFtZSA9IFwidmlzLWFycm93XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gTm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHRoaXMub3BhY2l0eVJhbmdlLm1pbiA9IFwiMFwiO1xuICAgICAgdGhpcy5vcGFjaXR5UmFuZ2UubWF4ID0gXCIxMDBcIjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICB0aGlzLm9wYWNpdHlSYW5nZS52YWx1ZSA9IFwiMTAwXCI7XG4gICAgdGhpcy5vcGFjaXR5UmFuZ2UuY2xhc3NOYW1lID0gXCJ2aXMtcmFuZ2VcIjtcblxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS50eXBlID0gXCJyYW5nZVwiOyAvLyBOb3Qgc3VwcG9ydGVkIG9uIElFOVxuICAgICAgdGhpcy5icmlnaHRuZXNzUmFuZ2UubWluID0gXCIwXCI7XG4gICAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5tYXggPSBcIjEwMFwiO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVE9ETzogQWRkIHNvbWUgZXJyb3IgaGFuZGxpbmcuXG4gICAgfVxuICAgIHRoaXMuYnJpZ2h0bmVzc1JhbmdlLnZhbHVlID0gXCIxMDBcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5jbGFzc05hbWUgPSBcInZpcy1yYW5nZVwiO1xuXG4gICAgdGhpcy5vcGFjaXR5RGl2LmFwcGVuZENoaWxkKHRoaXMub3BhY2l0eVJhbmdlKTtcbiAgICB0aGlzLmJyaWdodG5lc3NEaXYuYXBwZW5kQ2hpbGQodGhpcy5icmlnaHRuZXNzUmFuZ2UpO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHRoaXMub3BhY2l0eVJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLm9wYWNpdHlSYW5nZS5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWUuX3NldE9wYWNpdHkodGhpcy52YWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmJyaWdodG5lc3NSYW5nZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5icmlnaHRuZXNzUmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl9zZXRCcmlnaHRuZXNzKHRoaXMudmFsdWUpO1xuICAgIH07XG5cbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5icmlnaHRuZXNzTGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLWJyaWdodG5lc3NcIjtcbiAgICB0aGlzLmJyaWdodG5lc3NMYWJlbC5pbm5lclRleHQgPSBcImJyaWdodG5lc3M6XCI7XG5cbiAgICB0aGlzLm9wYWNpdHlMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5vcGFjaXR5TGFiZWwuY2xhc3NOYW1lID0gXCJ2aXMtbGFiZWwgdmlzLW9wYWNpdHlcIjtcbiAgICB0aGlzLm9wYWNpdHlMYWJlbC5pbm5lclRleHQgPSBcIm9wYWNpdHk6XCI7XG5cbiAgICB0aGlzLm5ld0NvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLm5ld0NvbG9yRGl2LmNsYXNzTmFtZSA9IFwidmlzLW5ldy1jb2xvclwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuaW5uZXJUZXh0ID0gXCJuZXdcIjtcblxuICAgIHRoaXMuaW5pdGlhbENvbG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmluaXRpYWxDb2xvckRpdi5jbGFzc05hbWUgPSBcInZpcy1pbml0aWFsLWNvbG9yXCI7XG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuaW5uZXJUZXh0ID0gXCJpbml0aWFsXCI7XG5cbiAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5jYW5jZWxCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtYnV0dG9uIHZpcy1jYW5jZWxcIjtcbiAgICB0aGlzLmNhbmNlbEJ1dHRvbi5pbm5lclRleHQgPSBcImNhbmNlbFwiO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uLm9uY2xpY2sgPSB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpO1xuXG4gICAgdGhpcy5hcHBseUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5jbGFzc05hbWUgPSBcInZpcy1idXR0b24gdmlzLWFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5pbm5lclRleHQgPSBcImFwcGx5XCI7XG4gICAgdGhpcy5hcHBseUJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fYXBwbHkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuc2F2ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5zYXZlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtc2F2ZVwiO1xuICAgIHRoaXMuc2F2ZUJ1dHRvbi5pbm5lclRleHQgPSBcInNhdmVcIjtcbiAgICB0aGlzLnNhdmVCdXR0b24ub25jbGljayA9IHRoaXMuX3NhdmUuYmluZCh0aGlzKTtcblxuICAgIHRoaXMubG9hZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5sb2FkQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWJ1dHRvbiB2aXMtbG9hZFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5pbm5lclRleHQgPSBcImxvYWQgbGFzdFwiO1xuICAgIHRoaXMubG9hZEJ1dHRvbi5vbmNsaWNrID0gdGhpcy5fbG9hZExhc3QuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5jb2xvclBpY2tlckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmFycm93RGl2KTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0xhYmVsKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYnJpZ2h0bmVzc0Rpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlMYWJlbCk7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLm9wYWNpdHlEaXYpO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5uZXdDb2xvckRpdik7XG4gICAgdGhpcy5mcmFtZS5hcHBlbmRDaGlsZCh0aGlzLmluaXRpYWxDb2xvckRpdik7XG5cbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuY2FuY2VsQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMuYXBwbHlCdXR0b24pO1xuICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQodGhpcy5zYXZlQnV0dG9uKTtcbiAgICB0aGlzLmZyYW1lLmFwcGVuZENoaWxkKHRoaXMubG9hZEJ1dHRvbik7XG4gIH1cblxuICAvKipcbiAgICogYmluZCBoYW1tZXIgdG8gdGhlIGNvbG9yIHBpY2tlclxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2JpbmRIYW1tZXIoKSB7XG4gICAgdGhpcy5kcmFnID0ge307XG4gICAgdGhpcy5waW5jaCA9IHt9O1xuICAgIHRoaXMuaGFtbWVyID0gbmV3IEhhbW1lciQxKHRoaXMuY29sb3JQaWNrZXJDYW52YXMpO1xuICAgIHRoaXMuaGFtbWVyLmdldChcInBpbmNoXCIpLnNldCh7IGVuYWJsZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuaGFtbWVyLm9uKFwiaGFtbWVyLmlucHV0XCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmlzRmlyc3QpIHtcbiAgICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInRhcFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5zdGFydFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gICAgdGhpcy5oYW1tZXIub24oXCJwYW5tb3ZlXCIsIChldmVudCkgPT4ge1xuICAgICAgdGhpcy5fbW92ZVNlbGVjdG9yKGV2ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLmhhbW1lci5vbihcInBhbmVuZFwiLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX21vdmVTZWxlY3RvcihldmVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2VuZXJhdGUgdGhlIGh1ZSBjaXJjbGUuIFRoaXMgaXMgcmVsYXRpdmVseSBoZWF2eSAoMjAwbXMpIGFuZCBpcyBkb25lIG9ubHkgb25jZSBvbiB0aGUgZmlyc3QgdGltZSBpdCBpcyBzaG93bi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZW5lcmF0ZUh1ZUNpcmNsZSgpIHtcbiAgICBpZiAodGhpcy5nZW5lcmF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGlmICh0aGlzLnBpeGVsUmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID1cbiAgICAgICAgICAod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSkgL1xuICAgICAgICAgIChjdHgud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIGN0eC5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgICAgICAgICAgY3R4LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAgICAgICAgIDEpO1xuICAgICAgfVxuICAgICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLnBpeGVsUmF0aW8sIDAsIDAsIHRoaXMucGl4ZWxSYXRpbywgMCwgMCk7XG5cbiAgICAgIC8vIGNsZWFyIHRoZSBjYW52YXNcbiAgICAgIGNvbnN0IHcgPSB0aGlzLmNvbG9yUGlja2VyQ2FudmFzLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgaCA9IHRoaXMuY29sb3JQaWNrZXJDYW52YXMuY2xpZW50SGVpZ2h0O1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAgICAgLy8gZHJhdyBodWUgY2lyY2xlXG4gICAgICBsZXQgeCwgeSwgaHVlLCBzYXQ7XG4gICAgICB0aGlzLmNlbnRlckNvb3JkaW5hdGVzID0geyB4OiB3ICogMC41LCB5OiBoICogMC41IH07XG4gICAgICB0aGlzLnIgPSAwLjQ5ICogdztcbiAgICAgIGNvbnN0IGFuZ2xlQ29udmVydCA9ICgyICogTWF0aC5QSSkgLyAzNjA7XG4gICAgICBjb25zdCBoZmFjID0gMSAvIDM2MDtcbiAgICAgIGNvbnN0IHNmYWMgPSAxIC8gdGhpcy5yO1xuICAgICAgbGV0IHJnYjtcbiAgICAgIGZvciAoaHVlID0gMDsgaHVlIDwgMzYwOyBodWUrKykge1xuICAgICAgICBmb3IgKHNhdCA9IDA7IHNhdCA8IHRoaXMucjsgc2F0KyspIHtcbiAgICAgICAgICB4ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy54ICsgc2F0ICogTWF0aC5zaW4oYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICB5ID0gdGhpcy5jZW50ZXJDb29yZGluYXRlcy55ICsgc2F0ICogTWF0aC5jb3MoYW5nbGVDb252ZXJ0ICogaHVlKTtcbiAgICAgICAgICByZ2IgPSBIU1ZUb1JHQihodWUgKiBoZmFjLCBzYXQgKiBzZmFjLCAxKTtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2IoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCI7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KHggLSAwLjUsIHkgLSAwLjUsIDIsIDIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMSlcIjtcbiAgICAgIGN0eC5jaXJjbGUodGhpcy5jZW50ZXJDb29yZGluYXRlcy54LCB0aGlzLmNlbnRlckNvb3JkaW5hdGVzLnksIHRoaXMucik7XG4gICAgICBjdHguc3Ryb2tlKCk7XG5cbiAgICAgIHRoaXMuaHVlQ2lyY2xlID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIG1vdmUgdGhlIHNlbGVjdG9yLiBUaGlzIGlzIGNhbGxlZCBieSBoYW1tZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSAgZXZlbnQgICBUaGUgZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tb3ZlU2VsZWN0b3IoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jb2xvclBpY2tlckRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBsZWZ0ID0gZXZlbnQuY2VudGVyLnggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgdG9wID0gZXZlbnQuY2VudGVyLnkgLSByZWN0LnRvcDtcblxuICAgIGNvbnN0IGNlbnRlclkgPSAwLjUgKiB0aGlzLmNvbG9yUGlja2VyRGl2LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBjZW50ZXJYID0gMC41ICogdGhpcy5jb2xvclBpY2tlckRpdi5jbGllbnRXaWR0aDtcblxuICAgIGNvbnN0IHggPSBsZWZ0IC0gY2VudGVyWDtcbiAgICBjb25zdCB5ID0gdG9wIC0gY2VudGVyWTtcblxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih4LCB5KTtcbiAgICBjb25zdCByYWRpdXMgPSAwLjk4ICogTWF0aC5taW4oTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpLCBjZW50ZXJYKTtcblxuICAgIGNvbnN0IG5ld1RvcCA9IE1hdGguY29zKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclk7XG4gICAgY29uc3QgbmV3TGVmdCA9IE1hdGguc2luKGFuZ2xlKSAqIHJhZGl1cyArIGNlbnRlclg7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyU2VsZWN0b3Iuc3R5bGUudG9wID1cbiAgICAgIG5ld1RvcCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XG4gICAgdGhpcy5jb2xvclBpY2tlclNlbGVjdG9yLnN0eWxlLmxlZnQgPVxuICAgICAgbmV3TGVmdCAtIDAuNSAqIHRoaXMuY29sb3JQaWNrZXJTZWxlY3Rvci5jbGllbnRXaWR0aCArIFwicHhcIjtcblxuICAgIC8vIHNldCBjb2xvclxuICAgIGxldCBoID0gYW5nbGUgLyAoMiAqIE1hdGguUEkpO1xuICAgIGggPSBoIDwgMCA/IGggKyAxIDogaDtcbiAgICBjb25zdCBzID0gcmFkaXVzIC8gdGhpcy5yO1xuICAgIGNvbnN0IGhzdiA9IFJHQlRvSFNWKHRoaXMuY29sb3IuciwgdGhpcy5jb2xvci5nLCB0aGlzLmNvbG9yLmIpO1xuICAgIGhzdi5oID0gaDtcbiAgICBoc3YucyA9IHM7XG4gICAgY29uc3QgcmdiYSA9IEhTVlRvUkdCKGhzdi5oLCBoc3YucywgaHN2LnYpO1xuICAgIHJnYmFbXCJhXCJdID0gdGhpcy5jb2xvci5hO1xuICAgIHRoaXMuY29sb3IgPSByZ2JhO1xuXG4gICAgLy8gdXBkYXRlIHByZXZpZXdzXG4gICAgdGhpcy5pbml0aWFsQ29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5yICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLmcgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5pbml0aWFsQ29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmluaXRpYWxDb2xvci5hICtcbiAgICAgIFwiKVwiO1xuICAgIHRoaXMubmV3Q29sb3JEaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID1cbiAgICAgIFwicmdiYShcIiArXG4gICAgICB0aGlzLmNvbG9yLnIgK1xuICAgICAgXCIsXCIgK1xuICAgICAgdGhpcy5jb2xvci5nICtcbiAgICAgIFwiLFwiICtcbiAgICAgIHRoaXMuY29sb3IuYiArXG4gICAgICBcIixcIiArXG4gICAgICB0aGlzLmNvbG9yLmEgK1xuICAgICAgXCIpXCI7XG4gIH1cbn07XG5cbi8qKlxuICogV3JhcCBnaXZlbiB0ZXh0IChsYXN0IGFyZ3VtZW50KSBpbiBIVE1MIGVsZW1lbnRzIChhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cykuXG4gKlxuICogQHBhcmFtIHsuLi5hbnl9IHJlc3QgLSBMaXN0IG9mIHRhZyBuYW1lcyBmb2xsb3dlZCBieSBpbm5lciB0ZXh0LlxuICogQHJldHVybnMgQW4gZWxlbWVudCBvciBhIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gd3JhcEluVGFnKC4uLnJlc3QpIHtcbiAgaWYgKHJlc3QubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50cy5cIik7XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVzdFswXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmVzdFswXSk7XG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoLi4ucmVzdC5zbGljZSgxKSkpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59XG5cbi8qKlxuICogVGhlIHdheSB0aGlzIHdvcmtzIGlzIGZvciBhbGwgcHJvcGVydGllcyBvZiB0aGlzLnBvc3NpYmxlIG9wdGlvbnMsIHlvdSBjYW4gc3VwcGx5IHRoZSBwcm9wZXJ0eSBuYW1lIGluIGFueSBmb3JtIHRvIGxpc3QgdGhlIG9wdGlvbnMuXG4gKiBCb29sZWFuIG9wdGlvbnMgYXJlIHJlY29nbmlzZWQgYXMgQm9vbGVhblxuICogTnVtYmVyIG9wdGlvbnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtkZWZhdWx0IHZhbHVlLCBtaW4gdmFsdWUsIG1heCB2YWx1ZSwgc3RlcHNpemVdXG4gKiBDb2xvcnMgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFsnY29sb3InLCAnI2ZmZmZmZiddXG4gKiBTdHJpbmdzIHdpdGggc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYXJyYXk6IFtvcHRpb24xLCBvcHRpb24yLCBvcHRpb24zLCAuLl1cbiAqXG4gKiBUaGUgb3B0aW9ucyBhcmUgbWF0Y2hlZCB3aXRoIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiBlYWNoIG9mIHRoZSBtb2R1bGVzIGFuZCB0aGUgdmFsdWVzIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYXJlXG4gKi9cbmxldCBDb25maWd1cmF0b3IkMSA9IGNsYXNzIENvbmZpZ3VyYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50TW9kdWxlICAgICAgICB8IHRoZSBsb2NhdGlvbiB3aGVyZSBwYXJlbnRNb2R1bGUuc2V0T3B0aW9ucygpIGNhbiBiZSBjYWxsZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRDb250YWluZXIgICAgfCB0aGUgZGVmYXVsdCBjb250YWluZXIgb2YgdGhlIG1vZHVsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlndXJlT3B0aW9ucyAgICB8IHRoZSBmdWxseSBjb25maWd1cmVkIGFuZCBwcmVkZWZpbmVkIG9wdGlvbnMgc2V0IGZvdW5kIGluIGFsbE9wdGlvbnMuanNcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBpeGVsUmF0aW8gICAgICAgICAgfCBjYW52YXMgcGl4ZWwgcmF0aW9cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGlkZU9wdGlvbiAgICAgICAgfCBjdXN0b20gbG9naWMgdG8gZHluYW1pY2FsbHkgaGlkZSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXJlbnRNb2R1bGUsXG4gICAgZGVmYXVsdENvbnRhaW5lcixcbiAgICBjb25maWd1cmVPcHRpb25zLFxuICAgIHBpeGVsUmF0aW8gPSAxLFxuICAgIGhpZGVPcHRpb24gPSAoKSA9PiBmYWxzZVxuICApIHtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudE1vZHVsZTtcbiAgICB0aGlzLmNoYW5nZWRPcHRpb25zID0gW107XG4gICAgdGhpcy5jb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyO1xuICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaGlkZU9wdGlvbiA9IGhpZGVPcHRpb247XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5wb3B1cENvdW50ZXIgPSAwO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgIGNvbnRhaW5lcjogdW5kZWZpbmVkLFxuICAgICAgc2hvd0J1dHRvbjogdHJ1ZSxcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5vcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKTtcblxuICAgIHRoaXMuY29uZmlndXJlT3B0aW9ucyA9IGNvbmZpZ3VyZU9wdGlvbnM7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0ge307XG4gICAgdGhpcy5kb21FbGVtZW50cyA9IFtdO1xuICAgIHRoaXMucG9wdXBEaXYgPSB7fTtcbiAgICB0aGlzLnBvcHVwTGltaXQgPSA1O1xuICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgdGhpcy5jb2xvclBpY2tlciA9IG5ldyBDb2xvclBpY2tlciQxKHBpeGVsUmF0aW8pO1xuICAgIHRoaXMud3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWZyZXNoIGFsbCBvcHRpb25zLlxuICAgKiBCZWNhdXNlIGFsbCBtb2R1bGVzIHBhcnNlIHRoZWlyIG9wdGlvbnMgYnkgdGhlbXNlbHZlcywgd2UganVzdCB1c2UgdGhlaXIgb3B0aW9ucy4gV2UgY29weSB0aGVtIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuICBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXNldCB0aGUgcG9wdXAgaGlzdG9yeSBiZWNhdXNlIHRoZSBpbmRpY2VzIG1heSBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5ID0ge307XG4gICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuXG4gICAgICBsZXQgZW5hYmxlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuam9pbigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbnMgY2Fubm90IGJlIG51bGxcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvd0J1dHRvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnNob3dCdXR0b24gPSBvcHRpb25zLnNob3dCdXR0b247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpbHRlciA9IHRydWU7XG4gICAgICAgIGVuYWJsZWQgPSBvcHRpb25zO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zO1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmlsdGVyID09PSBmYWxzZSkge1xuICAgICAgICBlbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9ucy5lbmFibGVkID0gZW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5fY2xlYW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlT3B0aW9uc1xuICAgKi9cbiAgc2V0TW9kdWxlT3B0aW9ucyhtb2R1bGVPcHRpb25zKSB7XG4gICAgdGhpcy5tb2R1bGVPcHRpb25zID0gbW9kdWxlT3B0aW9ucztcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuX2NsZWFuKCk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NyZWF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYWxsIERPTSBlbGVtZW50c1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZSgpIHtcbiAgICB0aGlzLl9jbGVhbigpO1xuICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMgPSBbXTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMub3B0aW9ucy5maWx0ZXI7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCBzaG93ID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gdGhpcy5jb25maWd1cmVPcHRpb25zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlndXJlT3B0aW9ucywgb3B0aW9uKSkge1xuICAgICAgICB0aGlzLmFsbG93Q3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgc2hvdyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc2hvdyA9IGZpbHRlcihvcHRpb24sIFtdKTtcbiAgICAgICAgICBzaG93ID1cbiAgICAgICAgICAgIHNob3cgfHxcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdCh0aGlzLmNvbmZpZ3VyZU9wdGlvbnNbb3B0aW9uXSwgW29wdGlvbl0sIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIuaW5kZXhPZihvcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIGxpbmVicmVhayBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAgICAgICBpZiAoY291bnRlciA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX21ha2VJdGVtKFtdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYSBoZWFkZXIgZm9yIHRoZSBjYXRlZ29yeVxuICAgICAgICAgIHRoaXMuX21ha2VIZWFkZXIob3B0aW9uKTtcblxuICAgICAgICAgIC8vIGdldCB0aGUgc3ViIG9wdGlvbnNcbiAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QodGhpcy5jb25maWd1cmVPcHRpb25zW29wdGlvbl0sIFtvcHRpb25dKTtcbiAgICAgICAgfVxuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21ha2VCdXR0b24oKTtcbiAgICB0aGlzLl9wdXNoKCk7XG4gICAgLy9+IHRoaXMuY29sb3JQaWNrZXIuaW5zZXJ0VG8odGhpcy5jb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYXcgYWxsIERPTSBlbGVtZW50cyBvbiB0aGUgc2NyZWVuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHVzaCgpIHtcbiAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMud3JhcHBlci5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uLXdyYXBwZXJcIjtcbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb21FbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tRWxlbWVudHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX3Nob3dQb3B1cElmTmVlZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogZGVsZXRlIGFsbCBET00gZWxlbWVudHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jbGVhbigpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9tRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLmRvbUVsZW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53cmFwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMud3JhcHBlcik7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuZG9tRWxlbWVudHMgPSBbXTtcblxuICAgIHRoaXMuX3JlbW92ZVBvcHVwKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBhY3R1YWxPcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0VmFsdWUocGF0aCkge1xuICAgIGxldCBiYXNlID0gdGhpcy5tb2R1bGVPcHRpb25zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGJhc2VbcGF0aFtpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBiYXNlID0gYmFzZVtwYXRoW2ldXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhbGwgb3B0aW9uIGVsZW1lbnRzIGFyZSB3cmFwcGVkIGluIGFuIGl0ZW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXkuPEVsZW1lbnQ+fSBkb21FbGVtZW50c1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VJdGVtKHBhdGgsIC4uLmRvbUVsZW1lbnRzKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBpdGVtLmNsYXNzTmFtZSA9XG4gICAgICAgIFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1pdGVtIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgICBkb21FbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZG9tRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnRzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogaGVhZGVyIGZvciBtYWpvciBzdWJqZWN0c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VIZWFkZXIobmFtZSkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1oZWFkZXJcIjtcbiAgICBkaXYuaW5uZXJUZXh0ID0gbmFtZTtcbiAgICB0aGlzLl9tYWtlSXRlbShbXSwgZGl2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgbGFiZWwsIGlmIGl0IGlzIGFuIG9iamVjdCBsYWJlbCwgaXQgZ2V0cyBkaWZmZXJlbnQgc3R5bGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RMYWJlbFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUxhYmVsKG5hbWUsIHBhdGgsIG9iamVjdExhYmVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRpdi5jbGFzc05hbWUgPVxuICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWxhYmVsIHZpcy1jb25maWctc1wiICsgcGF0aC5sZW5ndGg7XG4gICAgaWYgKG9iamVjdExhYmVsID09PSB0cnVlKSB7XG4gICAgICB3aGlsZSAoZGl2LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZGl2LnJlbW92ZUNoaWxkKGRpdi5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIGRpdi5hcHBlbmRDaGlsZCh3cmFwSW5UYWcoXCJpXCIsIFwiYlwiLCBuYW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lclRleHQgPSBuYW1lICsgXCI6XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGRyb3Bkb3duIGxpc3QgZm9yIG11bHRpcGxlIHBvc3NpYmxlIHN0cmluZyBvcHRvaW5zXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZURyb3Bkb3duKGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIHNlbGVjdC5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctc2VsZWN0XCI7XG4gICAgbGV0IHNlbGVjdGVkVmFsdWUgPSAwO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYXJyLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgICBzZWxlY3RlZFZhbHVlID0gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgb3B0aW9uLnZhbHVlID0gYXJyW2ldO1xuICAgICAgaWYgKGkgPT09IHNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gXCJzZWxlY3RlZFwiO1xuICAgICAgfVxuICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IGFycltpXTtcbiAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBzZWxlY3Qub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtZS5fdXBkYXRlKHRoaXMudmFsdWUsIHBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuX21ha2VMYWJlbChwYXRoW3BhdGgubGVuZ3RoIC0gMV0sIHBhdGgpO1xuICAgIHRoaXMuX21ha2VJdGVtKHBhdGgsIGxhYmVsLCBzZWxlY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSByYW5nZSBvYmplY3QgZm9yIG51bWVyaWMgb3B0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX21ha2VSYW5nZShhcnIsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXJyWzBdO1xuICAgIGNvbnN0IG1pbiA9IGFyclsxXTtcbiAgICBjb25zdCBtYXggPSBhcnJbMl07XG4gICAgY29uc3Qgc3RlcCA9IGFyclszXTtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICByYW5nZS5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctcmFuZ2VcIjtcbiAgICB0cnkge1xuICAgICAgcmFuZ2UudHlwZSA9IFwicmFuZ2VcIjsgLy8gbm90IHN1cHBvcnRlZCBvbiBJRTlcbiAgICAgIHJhbmdlLm1pbiA9IG1pbjtcbiAgICAgIHJhbmdlLm1heCA9IG1heDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE86IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLlxuICAgIH1cbiAgICByYW5nZS5zdGVwID0gc3RlcDtcblxuICAgIC8vIHNldCB1cCB0aGUgcG9wdXAgc2V0dGluZ3MgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQuXG4gICAgbGV0IHBvcHVwU3RyaW5nID0gXCJcIjtcbiAgICBsZXQgcG9wdXBWYWx1ZSA9IDA7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmFjdG9yID0gMS4yO1xuICAgICAgaWYgKHZhbHVlIDwgMCAmJiB2YWx1ZSAqIGZhY3RvciA8IG1pbikge1xuICAgICAgICByYW5nZS5taW4gPSBNYXRoLmNlaWwodmFsdWUgKiBmYWN0b3IpO1xuICAgICAgICBwb3B1cFZhbHVlID0gcmFuZ2UubWluO1xuICAgICAgICBwb3B1cFN0cmluZyA9IFwicmFuZ2UgaW5jcmVhc2VkXCI7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIC8gZmFjdG9yIDwgbWluKSB7XG4gICAgICAgIHJhbmdlLm1pbiA9IE1hdGguY2VpbCh2YWx1ZSAvIGZhY3Rvcik7XG4gICAgICAgIHBvcHVwVmFsdWUgPSByYW5nZS5taW47XG4gICAgICAgIHBvcHVwU3RyaW5nID0gXCJyYW5nZSBpbmNyZWFzZWRcIjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAqIGZhY3RvciA+IG1heCAmJiBtYXggIT09IDEpIHtcbiAgICAgICAgcmFuZ2UubWF4ID0gTWF0aC5jZWlsKHZhbHVlICogZmFjdG9yKTtcbiAgICAgICAgcG9wdXBWYWx1ZSA9IHJhbmdlLm1heDtcbiAgICAgICAgcG9wdXBTdHJpbmcgPSBcInJhbmdlIGluY3JlYXNlZFwiO1xuICAgICAgfVxuICAgICAgcmFuZ2UudmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UudmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgaW5wdXQuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLXJhbmdlaW5wdXRcIjtcbiAgICBpbnB1dC52YWx1ZSA9IHJhbmdlLnZhbHVlO1xuXG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIHJhbmdlLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgbWUuX3VwZGF0ZShOdW1iZXIodGhpcy52YWx1ZSksIHBhdGgpO1xuICAgIH07XG4gICAgcmFuZ2Uub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgcmFuZ2UsIGlucHV0KTtcblxuICAgIC8vIGlmIGEgcG9wdXAgaXMgbmVlZGVkIEFORCBpdCBoYXMgbm90IGJlZW4gc2hvd24gZm9yIHRoaXMgdmFsdWUsIHNob3cgaXQuXG4gICAgaWYgKHBvcHVwU3RyaW5nICE9PSBcIlwiICYmIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gIT09IHBvcHVwVmFsdWUpIHtcbiAgICAgIHRoaXMucG9wdXBIaXN0b3J5W2l0ZW1JbmRleF0gPSBwb3B1cFZhbHVlO1xuICAgICAgdGhpcy5fc2V0dXBQb3B1cChwb3B1cFN0cmluZywgaXRlbUluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogbWFrZSBhIGJ1dHRvbiBvYmplY3RcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0J1dHRvbiA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZ2VuZXJhdGVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvblwiO1xuICAgICAgZ2VuZXJhdGVCdXR0b24uaW5uZXJUZXh0ID0gXCJnZW5lcmF0ZSBvcHRpb25zXCI7XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9wcmludE9wdGlvbnMoKTtcbiAgICAgIH07XG4gICAgICBnZW5lcmF0ZUJ1dHRvbi5vbm1vdXNlb3ZlciA9ICgpID0+IHtcbiAgICAgICAgZ2VuZXJhdGVCdXR0b24uY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWJ1dHRvbiBob3ZlclwiO1xuICAgICAgfTtcbiAgICAgIGdlbmVyYXRlQnV0dG9uLm9ubW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgIGdlbmVyYXRlQnV0dG9uLmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1idXR0b25cIjtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLm9wdGlvbnNDb250YWluZXIuY2xhc3NOYW1lID1cbiAgICAgICAgXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLW9wdGlvbi1jb250YWluZXJcIjtcblxuICAgICAgdGhpcy5kb21FbGVtZW50cy5wdXNoKHRoaXMub3B0aW9uc0NvbnRhaW5lcik7XG4gICAgICB0aGlzLmRvbUVsZW1lbnRzLnB1c2goZ2VuZXJhdGVCdXR0b24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlIHRoZSBwb3B1cFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldHVwUG9wdXAoc3RyaW5nLCBpbmRleCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPT09IHRydWUgJiZcbiAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgdGhpcy5wb3B1cENvdW50ZXIgPCB0aGlzLnBvcHVwTGltaXRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBkaXYuaWQgPSBcInZpcy1jb25maWd1cmF0aW9uLXBvcHVwXCI7XG4gICAgICBkaXYuY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbi1wb3B1cFwiO1xuICAgICAgZGl2LmlubmVyVGV4dCA9IHN0cmluZztcbiAgICAgIGRpdi5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucG9wdXBDb3VudGVyICs9IDE7XG4gICAgICB0aGlzLnBvcHVwRGl2ID0geyBodG1sOiBkaXYsIGluZGV4OiBpbmRleCB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiByZW1vdmUgdGhlIHBvcHVwIGZyb20gdGhlIGRvbVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3JlbW92ZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwRGl2Lmh0bWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wb3B1cERpdi5odG1sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wb3B1cERpdi5odG1sKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmhpZGVUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnBvcHVwRGl2LmRlbGV0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5wb3B1cERpdiA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBwb3B1cCBpZiBpdCBpcyBuZWVkZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd1BvcHVwSWZOZWVkZWQoKSB7XG4gICAgaWYgKHRoaXMucG9wdXBEaXYuaHRtbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudHNbdGhpcy5wb3B1cERpdi5pbmRleF07XG4gICAgICBjb25zdCByZWN0ID0gY29ycmVzcG9uZGluZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArIFwicHhcIjtcbiAgICAgIHRoaXMucG9wdXBEaXYuaHRtbC5zdHlsZS50b3AgPSByZWN0LnRvcCAtIDMwICsgXCJweFwiOyAvLyAzMCBpcyB0aGUgaGVpZ2h0O1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwRGl2Lmh0bWwpO1xuICAgICAgdGhpcy5wb3B1cERpdi5oaWRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvcHVwRGl2Lmh0bWwuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICB9LCAxNTAwKTtcbiAgICAgIHRoaXMucG9wdXBEaXYuZGVsZXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1vdmVQb3B1cCgpO1xuICAgICAgfSwgMTgwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSBjaGVja2JveCBmb3IgYm9vbGVhbiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVmYXVsdFZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9tYWtlQ2hlY2tib3goZGVmYXVsdFZhbHVlLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIGNoZWNrYm94LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2xhc3NOYW1lID0gXCJ2aXMtY29uZmlndXJhdGlvbiB2aXMtY29uZmlnLWNoZWNrYm94XCI7XG4gICAgY2hlY2tib3guY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlICE9PSBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnMucHVzaCh7IHBhdGg6IHBhdGgsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy5jaGVja2VkLCBwYXRoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBwYXRoKTtcbiAgICB0aGlzLl9tYWtlSXRlbShwYXRoLCBsYWJlbCwgY2hlY2tib3gpO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ha2UgYSB0ZXh0IGlucHV0IGZpZWxkIGZvciBzdHJpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZVRleHRJbnB1dChkZWZhdWx0VmFsdWUsIHZhbHVlLCBwYXRoKSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgY2hlY2tib3gudHlwZSA9IFwidGV4dFwiO1xuICAgIGNoZWNrYm94LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy10ZXh0XCI7XG4gICAgY2hlY2tib3gudmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdGhpcy5jaGFuZ2VkT3B0aW9ucy5wdXNoKHsgcGF0aDogcGF0aCwgdmFsdWU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjaGVja2JveC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1lLl91cGRhdGUodGhpcy52YWx1ZSwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGNoZWNrYm94KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtYWtlIGEgY29sb3IgZmllbGQgd2l0aCBhIGNvbG9yIHBpY2tlciBmb3IgY29sb3IgZmllbGRzXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2xvciA9IGFyclsxXTtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2xvciA6IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICE9PSBcIm5vbmVcIikge1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IFwidmlzLWNvbmZpZ3VyYXRpb24gdmlzLWNvbmZpZy1jb2xvckJsb2NrXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSBcInZpcy1jb25maWd1cmF0aW9uIHZpcy1jb25maWctY29sb3JCbG9jayBub25lXCI7XG4gICAgfVxuXG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdENvbG9yIDogdmFsdWU7XG4gICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9zaG93Q29sb3JQaWNrZXIodmFsdWUsIGRpdiwgcGF0aCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aCk7XG4gICAgdGhpcy5fbWFrZUl0ZW0ocGF0aCwgbGFiZWwsIGRpdik7XG4gIH1cblxuICAvKipcbiAgICogdXNlZCBieSB0aGUgY29sb3IgYnV0dG9ucyB0byBjYWxsIHRoZSBjb2xvciBwaWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBkaXZcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2hvd0NvbG9yUGlja2VyKHZhbHVlLCBkaXYsIHBhdGgpIHtcbiAgICAvLyBjbGVhciB0aGUgY2FsbGJhY2sgZnJvbSB0aGlzIGRpdlxuICAgIGRpdi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge307XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLmluc2VydFRvKGRpdik7XG4gICAgdGhpcy5jb2xvclBpY2tlci5zaG93KCk7XG5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENvbG9yKHZhbHVlKTtcbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldFVwZGF0ZUNhbGxiYWNrKChjb2xvcikgPT4ge1xuICAgICAgY29uc3QgY29sb3JTdHJpbmcgPVxuICAgICAgICBcInJnYmEoXCIgKyBjb2xvci5yICsgXCIsXCIgKyBjb2xvci5nICsgXCIsXCIgKyBjb2xvci5iICsgXCIsXCIgKyBjb2xvci5hICsgXCIpXCI7XG4gICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JTdHJpbmc7XG4gICAgICB0aGlzLl91cGRhdGUoY29sb3JTdHJpbmcsIHBhdGgpO1xuICAgIH0pO1xuXG4gICAgLy8gb24gY2xvc2Ugb2YgdGhlIGNvbG9ycGlja2VyLCByZXN0b3JlIHRoZSBjYWxsYmFjay5cbiAgICB0aGlzLmNvbG9yUGlja2VyLnNldENsb3NlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgZGl2Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3Nob3dDb2xvclBpY2tlcih2YWx1ZSwgZGl2LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcGFyc2UgYW4gb2JqZWN0IGFuZCBkcmF3IHRoZSBjb3JyZWN0IGl0ZW1zXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAgICogQHBhcmFtIHtBcnJheX0gW3BhdGg9W11dICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tPbmx5PWZhbHNlXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9oYW5kbGVPYmplY3Qob2JqLCBwYXRoID0gW10sIGNoZWNrT25seSA9IGZhbHNlKSB7XG4gICAgbGV0IHNob3cgPSBmYWxzZTtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLm9wdGlvbnMuZmlsdGVyO1xuICAgIGxldCB2aXNpYmxlSW5TZXQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHN1Yk9iaiBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBzdWJPYmopKSB7XG4gICAgICAgIHNob3cgPSB0cnVlO1xuICAgICAgICBjb25zdCBpdGVtID0gb2JqW3N1Yk9ial07XG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBjb3B5QW5kRXh0ZW5kQXJyYXkocGF0aCwgc3ViT2JqKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHNob3cgPSBmaWx0ZXIoc3ViT2JqLCBwYXRoKTtcblxuICAgICAgICAgIC8vIGlmIG5lZWRlZCB3ZSBtdXN0IGdvIGRlZXBlciBpbnRvIHRoZSBvYmplY3QuXG4gICAgICAgICAgaWYgKHNob3cgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGl0ZW0pICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBpdGVtICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAgICAgICBpdGVtIGluc3RhbmNlb2YgT2JqZWN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgIHNob3cgPSB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dDcmVhdGlvbiA9IGNoZWNrT25seSA9PT0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdmlzaWJsZUluU2V0ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKG5ld1BhdGgpO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFycmF5KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLl9tYWtlVGV4dElucHV0KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgdGhpcy5fbWFrZUNoZWNrYm94KGl0ZW0sIHZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIC8vIHNraXAgdGhlIG9wdGlvbnMgdGhhdCBhcmUgbm90IGVuYWJsZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5oaWRlT3B0aW9uKHBhdGgsIHN1Yk9iaiwgdGhpcy5tb2R1bGVPcHRpb25zKSkge1xuICAgICAgICAgICAgICAvLyBpbml0aWFsbHkgY29sbGFwc2Ugb3B0aW9ucyB3aXRoIGFuIGRpc2FibGVkIGVuYWJsZWQgb3B0aW9uLlxuICAgICAgICAgICAgICBpZiAoaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkUGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShuZXdQYXRoLCBcImVuYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlZFZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoZW5hYmxlZFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkVmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5fbWFrZUxhYmVsKHN1Yk9iaiwgbmV3UGF0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgICB2aXNpYmxlSW5TZXQgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVPYmplY3QoaXRlbSwgbmV3UGF0aCkgfHwgdmlzaWJsZUluU2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWtlQ2hlY2tib3goaXRlbSwgZW5hYmxlZFZhbHVlLCBuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLl9tYWtlTGFiZWwoc3ViT2JqLCBuZXdQYXRoLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYWtlSXRlbShuZXdQYXRoLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUluU2V0ID1cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZU9iamVjdChpdGVtLCBuZXdQYXRoKSB8fCB2aXNpYmxlSW5TZXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImRvbnQga25vdyBob3cgdG8gaGFuZGxlXCIsIGl0ZW0sIHN1Yk9iaiwgbmV3UGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlSW5TZXQ7XG4gIH1cblxuICAvKipcbiAgICogaGFuZGxlIHRoZSBhcnJheSB0eXBlIG9mIG9wdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2hhbmRsZUFycmF5KGFyciwgdmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIGFyclswXSA9PT0gXCJzdHJpbmdcIiAmJiBhcnJbMF0gPT09IFwiY29sb3JcIikge1xuICAgICAgdGhpcy5fbWFrZUNvbG9yRmllbGQoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzFdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9tYWtlRHJvcGRvd24oYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJyWzBdID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl9tYWtlUmFuZ2UoYXJyLCB2YWx1ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyWzBdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWRPcHRpb25zLnB1c2goeyBwYXRoOiBwYXRoLCB2YWx1ZTogTnVtYmVyKHZhbHVlKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIHRvIHVwZGF0ZSB0aGUgbmV0d29yayB3aXRoIHRoZSBuZXcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRoICAgIHwgd2hlcmUgdG8gbG9vayBmb3IgdGhlIGFjdHVhbCBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGUodmFsdWUsIHBhdGgpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudC5ib2R5ICYmXG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIgJiZcbiAgICAgIHRoaXMucGFyZW50LmJvZHkuZW1pdHRlci5lbWl0XG4gICAgKSB7XG4gICAgICB0aGlzLnBhcmVudC5ib2R5LmVtaXR0ZXIuZW1pdChcImNvbmZpZ0NoYW5nZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5wYXJlbnQuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IGJvb2xlYW59IHZhbHVlXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHt7fX0gb3B0aW9uc09ialxuICAgKiBAcmV0dXJucyB7e319XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uc3RydWN0T3B0aW9ucyh2YWx1ZSwgcGF0aCwgb3B0aW9uc09iaiA9IHt9KSB7XG4gICAgbGV0IHBvaW50ZXIgPSBvcHRpb25zT2JqO1xuXG4gICAgLy8gd2hlbiBkcm9wZG93biBib3hlcyBjYW4gYmUgc3RyaW5nIG9yIGJvb2xlYW4sIHdlIHR5cGVjYXN0IGl0IGludG8gY29ycmVjdCB0eXBlc1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHZhbHVlID0gdmFsdWUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdmFsdWU7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXRoW2ldICE9PSBcImdsb2JhbFwiKSB7XG4gICAgICAgIGlmIChwb2ludGVyW3BhdGhbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb2ludGVyW3BhdGhbaV1dID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgIT09IHBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHBvaW50ZXIgPSBwb2ludGVyW3BhdGhbaV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBvaW50ZXJbcGF0aFtpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc09iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3ByaW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICB3aGlsZSAodGhpcy5vcHRpb25zQ29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm9wdGlvbnNDb250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHRoaXMub3B0aW9uc0NvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgIHdyYXBJblRhZyhcInByZVwiLCBcImNvbnN0IG9wdGlvbnMgPSBcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge3t9fSBvcHRpb25zXG4gICAqL1xuICBnZXRPcHRpb25zKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hhbmdlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdE9wdGlvbnMoXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0udmFsdWUsXG4gICAgICAgIHRoaXMuY2hhbmdlZE9wdGlvbnNbaV0ucGF0aCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn07XG5cbi8qKlxuICogUG9wdXAgaXMgYSBjbGFzcyB0byBjcmVhdGUgYSBwb3B1cCB3aW5kb3cgd2l0aCBzb21lIHRleHRcbiAqL1xubGV0IFBvcHVwJDEgPSBjbGFzcyBQb3B1cCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRhaW5lciAgICAgICBUaGUgY29udGFpbmVyIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICBvdmVyZmxvd01ldGhvZCAgSG93IHRoZSBwb3B1cCBzaG91bGQgYWN0IHRvIG92ZXJmbG93aW5nICgnZmxpcCcgb3IgJ2NhcCcpXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIG92ZXJmbG93TWV0aG9kKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5vdmVyZmxvd01ldGhvZCA9IG92ZXJmbG93TWV0aG9kIHx8IFwiY2FwXCI7XG5cbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5wYWRkaW5nID0gNTtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBmcmFtZVxuICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRoaXMuZnJhbWUuY2xhc3NOYW1lID0gXCJ2aXMtdG9vbHRpcFwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgcG9wdXAgd2luZG93XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgc2V0UG9zaXRpb24oeCwgeSkge1xuICAgIHRoaXMueCA9IHBhcnNlSW50KHgpO1xuICAgIHRoaXMueSA9IHBhcnNlSW50KHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29udGVudCBmb3IgdGhlIHBvcHVwIHdpbmRvdy4gVGhpcyBjYW4gYmUgSFRNTCBjb2RlIG9yIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgRWxlbWVudH0gY29udGVudFxuICAgKi9cbiAgc2V0VGV4dChjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICB3aGlsZSAodGhpcy5mcmFtZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZnJhbWUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJhbWUuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cmluZyBjb250YWluaW5nIGxpdGVyYWwgdGV4dCwgZWxlbWVudCBoYXMgdG8gYmUgdXNlZCBmb3IgSFRNTCBkdWUgdG9cbiAgICAgIC8vIFhTUyByaXNrcyBhc3NvY2lhdGVkIHdpdGggaW5uZXJIVE1MIChpLmUuIHByZXZlbnQgWFNTIGJ5IGFjY2lkZW50KS5cbiAgICAgIHRoaXMuZnJhbWUuaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcG9wdXAgd2luZG93XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvU2hvd10gICAgU2hvdyBvciBoaWRlIHRoZSB3aW5kb3dcbiAgICovXG4gIHNob3coZG9TaG93KSB7XG4gICAgaWYgKGRvU2hvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb1Nob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkb1Nob3cgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZnJhbWUuY2xpZW50SGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZyYW1lLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5mcmFtZS5wYXJlbnROb2RlLmNsaWVudFdpZHRoO1xuXG4gICAgICBsZXQgbGVmdCA9IDAsXG4gICAgICAgIHRvcCA9IDA7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJmbG93TWV0aG9kID09IFwiZmxpcFwiKSB7XG4gICAgICAgIGxldCBpc0xlZnQgPSBmYWxzZSxcbiAgICAgICAgICBpc1RvcCA9IHRydWU7IC8vIFdoZXJlIGFyb3VuZCB0aGUgcG9zaXRpb24gaXQncyBsb2NhdGVkXG5cbiAgICAgICAgaWYgKHRoaXMueSAtIGhlaWdodCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzVG9wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy54ICsgd2lkdGggPiBtYXhXaWR0aCAtIHRoaXMucGFkZGluZykge1xuICAgICAgICAgIGlzTGVmdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMueCAtIHdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9wID0gdGhpcy55O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSB0aGlzLnkgLSBoZWlnaHQ7XG4gICAgICAgIGlmICh0b3AgKyBoZWlnaHQgKyB0aGlzLnBhZGRpbmcgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICB0b3AgPSBtYXhIZWlnaHQgLSBoZWlnaHQgLSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvcCA8IHRoaXMucGFkZGluZykge1xuICAgICAgICAgIHRvcCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZnQgPSB0aGlzLng7XG4gICAgICAgIGlmIChsZWZ0ICsgd2lkdGggKyB0aGlzLnBhZGRpbmcgPiBtYXhXaWR0aCkge1xuICAgICAgICAgIGxlZnQgPSBtYXhXaWR0aCAtIHdpZHRoIC0gdGhpcy5wYWRkaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZWZ0IDwgdGhpcy5wYWRkaW5nKSB7XG4gICAgICAgICAgbGVmdCA9IHRoaXMucGFkZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgdGhpcy5mcmFtZS5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICB0aGlzLmZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcbiAgICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIHRoZSBwb3B1cCB3aW5kb3dcbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUubGVmdCA9IFwiMFwiO1xuICAgIHRoaXMuZnJhbWUuc3R5bGUudG9wID0gXCIwXCI7XG4gICAgdGhpcy5mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIHBvcHVwIHdpbmRvd1xuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5mcmFtZSk7IC8vIFJlbW92ZSBlbGVtZW50IGZyb20gRE9NXG4gIH1cbn07XG5cbmxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5sZXQgYWxsT3B0aW9ucztcblxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDEgPSBcImJhY2tncm91bmQ6ICNGRmVlZWU7IGNvbG9yOiAjZGQwMDAwXCI7XG5cbi8qKlxuICogIFVzZWQgdG8gdmFsaWRhdGUgb3B0aW9ucy5cbiAqL1xubGV0IFZhbGlkYXRvciQxID0gY2xhc3MgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIE1haW4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWZlcmVuY2VPcHRpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdWJPYmplY3RcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBzdWJPYmplY3QpIHtcbiAgICBlcnJvckZvdW5kID0gZmFsc2U7XG4gICAgYWxsT3B0aW9ucyA9IHJlZmVyZW5jZU9wdGlvbnM7XG4gICAgbGV0IHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpZiAoc3ViT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVzZWRPcHRpb25zID0gcmVmZXJlbmNlT3B0aW9uc1tzdWJPYmplY3RdO1xuICAgIH1cbiAgICBWYWxpZGF0b3IucGFyc2Uob3B0aW9ucywgdXNlZE9wdGlvbnMsIFtdKTtcbiAgICByZXR1cm4gZXJyb3JGb3VuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIHRyYXZlcnNlIGFuIG9iamVjdCByZWN1cnNpdmVseSBhbmQgY2hlY2sgZXZlcnkgdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwYXJzZShvcHRpb25zLCByZWZlcmVuY2VPcHRpb25zLCBwYXRoKSB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBvcHRpb24pKSB7XG4gICAgICAgIFZhbGlkYXRvci5jaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBldmVyeSB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFuIG9iamVjdCwgY2FsbCB0aGUgcGFyc2UgZnVuY3Rpb24gb24gdGhhdCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtvYmplY3R9IHJlZmVyZW5jZU9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aCAgICB8IHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBhY3R1YWwgb3B0aW9uXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBjaGVjayhvcHRpb24sIG9wdGlvbnMsIHJlZmVyZW5jZU9wdGlvbnMsIHBhdGgpIHtcbiAgICBpZiAoXG4gICAgICByZWZlcmVuY2VPcHRpb25zW29wdGlvbl0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVmZXJlbmNlT3B0aW9ucy5fX2FueV9fID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIFZhbGlkYXRvci5nZXRTdWdnZXN0aW9uKG9wdGlvbiwgcmVmZXJlbmNlT3B0aW9ucywgcGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZU9wdGlvbiA9IG9wdGlvbjtcbiAgICBsZXQgaXNfb2JqZWN0ID0gdHJ1ZTtcblxuICAgIGlmIChcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnNbb3B0aW9uXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICByZWZlcmVuY2VPcHRpb25zLl9fYW55X18gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTk9URTogVGhpcyBvbmx5IHRyaWdnZXJzIGlmIHRoZSBfX2FueV9fIGlzIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAgLy8gICAgICAgVEhBVCdTIEEgUkVBTExZIEJBRCBQTEFDRSBUTyBBTExPVyBJVCEhISFcbiAgICAgIC8vIFRPRE86IEV4YW1pbmUgaWYgbmVlZGVkLCByZW1vdmUgaWYgcG9zc2libGVcblxuICAgICAgLy8gX19hbnlfXyBpcyBhIHdpbGRjYXJkLiBBbnkgdmFsdWUgaXMgYWNjZXB0ZWQgYW5kIHdpbGwgYmUgZnVydGhlciBhbmFseXNlZCBieSByZWZlcmVuY2UuXG4gICAgICByZWZlcmVuY2VPcHRpb24gPSBcIl9fYW55X19cIjtcblxuICAgICAgLy8gaWYgdGhlIGFueS1zdWJncm91cCBpcyBub3QgYSBwcmVkZWZpbmVkIG9iamVjdCBpbiB0aGUgY29uZmlndXJhdG9yLFxuICAgICAgLy8gd2UgZG8gbm90IGxvb2sgZGVlcGVyIGludG8gdGhlIG9iamVjdC5cbiAgICAgIGlzX29iamVjdCA9IFZhbGlkYXRvci5nZXRUeXBlKG9wdGlvbnNbb3B0aW9uXSkgPT09IFwib2JqZWN0XCI7XG4gICAgfVxuXG4gICAgbGV0IHJlZk9wdGlvbk9iaiA9IHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXTtcbiAgICBpZiAoaXNfb2JqZWN0ICYmIHJlZk9wdGlvbk9iai5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWZPcHRpb25PYmogPSByZWZPcHRpb25PYmouX190eXBlX187XG4gICAgfVxuXG4gICAgVmFsaWRhdG9yLmNoZWNrRmllbGRzKFxuICAgICAgb3B0aW9uLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgICByZWZlcmVuY2VPcHRpb24sXG4gICAgICByZWZPcHRpb25PYmosXG4gICAgICBwYXRoXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIG9wdGlvbiAgICAgICAgICAgfCB0aGUgb3B0aW9uIHByb3BlcnR5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSAgb3B0aW9ucyAgICAgICAgICB8IFRoZSBzdXBwbGllZCBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge29iamVjdH0gIHJlZmVyZW5jZU9wdGlvbnMgfCBUaGUgcmVmZXJlbmNlIG9wdGlvbnMgY29udGFpbmluZyBhbGwgb3B0aW9ucyBhbmQgdGhlaXIgYWxsb3dlZCBmb3JtYXRzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgcmVmZXJlbmNlT3B0aW9uICB8IFVzdWFsbHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBvcHRpb24sIGV4Y2VwdCB3aGVuIGhhbmRsaW5nIGFuIF9fYW55X18gdGFnLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gIHJlZk9wdGlvbk9iaiAgICAgfCBUaGlzIGlzIHRoZSB0eXBlIG9iamVjdCBmcm9tIHRoZSByZWZlcmVuY2Ugb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBhdGggICAgICAgICAgICAgfCB3aGVyZSBpbiB0aGUgb2JqZWN0IGlzIHRoZSBvcHRpb25cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGNoZWNrRmllbGRzKFxuICAgIG9wdGlvbixcbiAgICBvcHRpb25zLFxuICAgIHJlZmVyZW5jZU9wdGlvbnMsXG4gICAgcmVmZXJlbmNlT3B0aW9uLFxuICAgIHJlZk9wdGlvbk9iaixcbiAgICBwYXRoXG4gICkge1xuICAgIGNvbnN0IGxvZyA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIiVjXCIgKyBtZXNzYWdlICsgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKSxcbiAgICAgICAgVkFMSURBVE9SX1BSSU5UX1NUWUxFJDFcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvblR5cGUgPSBWYWxpZGF0b3IuZ2V0VHlwZShvcHRpb25zW29wdGlvbl0pO1xuICAgIGNvbnN0IHJlZk9wdGlvblR5cGUgPSByZWZPcHRpb25PYmpbb3B0aW9uVHlwZV07XG5cbiAgICBpZiAocmVmT3B0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBpZiB0aGUgdHlwZSBpcyBjb3JyZWN0LCB3ZSBjaGVjayBpZiBpdCBpcyBzdXBwb3NlZCB0byBiZSBvbmUgb2YgYSBmZXcgc2VsZWN0IHZhbHVlc1xuICAgICAgaWYgKFxuICAgICAgICBWYWxpZGF0b3IuZ2V0VHlwZShyZWZPcHRpb25UeXBlKSA9PT0gXCJhcnJheVwiICYmXG4gICAgICAgIHJlZk9wdGlvblR5cGUuaW5kZXhPZihvcHRpb25zW29wdGlvbl0pID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIGxvZyhcbiAgICAgICAgICAnSW52YWxpZCBvcHRpb24gZGV0ZWN0ZWQgaW4gXCInICtcbiAgICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgICAnXCIuJyArXG4gICAgICAgICAgICBcIiBBbGxvd2VkIHZhbHVlcyBhcmU6XCIgK1xuICAgICAgICAgICAgVmFsaWRhdG9yLnByaW50KHJlZk9wdGlvblR5cGUpICtcbiAgICAgICAgICAgICcgbm90IFwiJyArXG4gICAgICAgICAgICBvcHRpb25zW29wdGlvbl0gK1xuICAgICAgICAgICAgJ1wiLiAnXG4gICAgICAgICk7XG4gICAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25UeXBlID09PSBcIm9iamVjdFwiICYmIHJlZmVyZW5jZU9wdGlvbiAhPT0gXCJfX2FueV9fXCIpIHtcbiAgICAgICAgcGF0aCA9IGNvcHlBbmRFeHRlbmRBcnJheShwYXRoLCBvcHRpb24pO1xuICAgICAgICBWYWxpZGF0b3IucGFyc2UoXG4gICAgICAgICAgb3B0aW9uc1tvcHRpb25dLFxuICAgICAgICAgIHJlZmVyZW5jZU9wdGlvbnNbcmVmZXJlbmNlT3B0aW9uXSxcbiAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWZPcHRpb25PYmpbXCJhbnlcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdHlwZSBvZiB0aGUgZmllbGQgaXMgaW5jb3JyZWN0IGFuZCB0aGUgZmllbGQgY2Fubm90IGJlIGFueVxuICAgICAgbG9nKFxuICAgICAgICAnSW52YWxpZCB0eXBlIHJlY2VpdmVkIGZvciBcIicgK1xuICAgICAgICAgIG9wdGlvbiArXG4gICAgICAgICAgJ1wiLiBFeHBlY3RlZDogJyArXG4gICAgICAgICAgVmFsaWRhdG9yLnByaW50KE9iamVjdC5rZXlzKHJlZk9wdGlvbk9iaikpICtcbiAgICAgICAgICBcIi4gUmVjZWl2ZWQgW1wiICtcbiAgICAgICAgICBvcHRpb25UeXBlICtcbiAgICAgICAgICAnXSBcIicgK1xuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSArXG4gICAgICAgICAgJ1wiJ1xuICAgICAgKTtcbiAgICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdCB8IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBBcnJheS48bnVtYmVyPiB8IERhdGUgfCBOb2RlIHwgTW9tZW50IHwgdW5kZWZpbmVkIHwgbnVsbH0gb2JqZWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRUeXBlKG9iamVjdCkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqZWN0O1xuXG4gICAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGlmIChvYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgfVxuICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE51bWJlcikge1xuICAgICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Lm5vZGVUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiZG9tXCI7XG4gICAgICB9XG4gICAgICBpZiAob2JqZWN0Ll9pc0FNb21lbnRPYmplY3QgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFwibW9tZW50XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBwYXRoXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBnZXRTdWdnZXN0aW9uKG9wdGlvbiwgb3B0aW9ucywgcGF0aCkge1xuICAgIGNvbnN0IGxvY2FsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCBmYWxzZSk7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoID0gVmFsaWRhdG9yLmZpbmRJbk9wdGlvbnMob3B0aW9uLCBhbGxPcHRpb25zLCBbXSwgdHJ1ZSk7XG5cbiAgICBjb25zdCBsb2NhbFNlYXJjaFRocmVzaG9sZCA9IDg7XG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoVGhyZXNob2xkID0gNDtcblxuICAgIGxldCBtc2c7XG4gICAgaWYgKGxvY2FsU2VhcmNoLmluZGV4TWF0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgJ1BlcmhhcHMgaXQgd2FzIGluY29tcGxldGU/IERpZCB5b3UgbWVhbjogXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guaW5kZXhNYXRjaCArXG4gICAgICAgICdcIj9cXG5cXG4nO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBnbG9iYWxTZWFyY2guZGlzdGFuY2UgPD0gZ2xvYmFsU2VhcmNoVGhyZXNob2xkICYmXG4gICAgICBsb2NhbFNlYXJjaC5kaXN0YW5jZSA+IGdsb2JhbFNlYXJjaC5kaXN0YW5jZVxuICAgICkge1xuICAgICAgbXNnID1cbiAgICAgICAgXCIgaW4gXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24sIFwiXCIpICtcbiAgICAgICAgXCJQZXJoYXBzIGl0IHdhcyBtaXNwbGFjZWQ/IE1hdGNoaW5nIG9wdGlvbiBmb3VuZCBhdDogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihcbiAgICAgICAgICBnbG9iYWxTZWFyY2gucGF0aCxcbiAgICAgICAgICBnbG9iYWxTZWFyY2guY2xvc2VzdE1hdGNoLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2FsU2VhcmNoLmRpc3RhbmNlIDw9IGxvY2FsU2VhcmNoVGhyZXNob2xkKSB7XG4gICAgICBtc2cgPVxuICAgICAgICAnLiBEaWQgeW91IG1lYW4gXCInICtcbiAgICAgICAgbG9jYWxTZWFyY2guY2xvc2VzdE1hdGNoICtcbiAgICAgICAgJ1wiPycgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnRMb2NhdGlvbihsb2NhbFNlYXJjaC5wYXRoLCBvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPVxuICAgICAgICBcIi4gRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZTogXCIgK1xuICAgICAgICBWYWxpZGF0b3IucHJpbnQoT2JqZWN0LmtleXMob3B0aW9ucykpICtcbiAgICAgICAgVmFsaWRhdG9yLnByaW50TG9jYXRpb24ocGF0aCwgb3B0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgJyVjVW5rbm93biBvcHRpb24gZGV0ZWN0ZWQ6IFwiJyArIG9wdGlvbiArICdcIicgKyBtc2csXG4gICAgICBWQUxJREFUT1JfUFJJTlRfU1RZTEUkMVxuICAgICk7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogdHJhdmVyc2UgdGhlIG9wdGlvbnMgaW4gc2VhcmNoIGZvciBhIG1hdGNoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggICAgfCB3aGVyZSB0byBsb29rIGZvciB0aGUgYWN0dWFsIG9wdGlvblxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWN1cnNpdmU9ZmFsc2VdXG4gICAqIEByZXR1cm5zIHt7Y2xvc2VzdE1hdGNoOiBzdHJpbmcsIHBhdGg6IEFycmF5LCBkaXN0YW5jZTogbnVtYmVyfX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGZpbmRJbk9wdGlvbnMob3B0aW9uLCBvcHRpb25zLCBwYXRoLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAgIGxldCBtaW4gPSAxZTk7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaCA9IFwiXCI7XG4gICAgbGV0IGNsb3Nlc3RNYXRjaFBhdGggPSBbXTtcbiAgICBjb25zdCBsb3dlckNhc2VPcHRpb24gPSBvcHRpb24udG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgaW5kZXhNYXRjaCA9IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IG9wIGluIG9wdGlvbnMpIHtcbiAgICAgIGxldCBkaXN0YW5jZTtcbiAgICAgIGlmIChvcHRpb25zW29wXS5fX3R5cGVfXyAhPT0gdW5kZWZpbmVkICYmIHJlY3Vyc2l2ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBWYWxpZGF0b3IuZmluZEluT3B0aW9ucyhcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgb3B0aW9uc1tvcF0sXG4gICAgICAgICAgY29weUFuZEV4dGVuZEFycmF5KHBhdGgsIG9wKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWluID4gcmVzdWx0LmRpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE1hdGNoID0gcmVzdWx0LmNsb3Nlc3RNYXRjaDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gcmVzdWx0LnBhdGg7XG4gICAgICAgICAgbWluID0gcmVzdWx0LmRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSByZXN1bHQuaW5kZXhNYXRjaDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsb3dlckNhc2VPcHRpb24pICE9PSAtMSkge1xuICAgICAgICAgIGluZGV4TWF0Y2ggPSBvcDtcbiAgICAgICAgfVxuICAgICAgICBkaXN0YW5jZSA9IFZhbGlkYXRvci5sZXZlbnNodGVpbkRpc3RhbmNlKG9wdGlvbiwgb3ApO1xuICAgICAgICBpZiAobWluID4gZGlzdGFuY2UpIHtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2ggPSBvcDtcbiAgICAgICAgICBjbG9zZXN0TWF0Y2hQYXRoID0gY29weUFycmF5KHBhdGgpO1xuICAgICAgICAgIG1pbiA9IGRpc3RhbmNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXN0TWF0Y2g6IGNsb3Nlc3RNYXRjaCxcbiAgICAgIHBhdGg6IGNsb3Nlc3RNYXRjaFBhdGgsXG4gICAgICBkaXN0YW5jZTogbWluLFxuICAgICAgaW5kZXhNYXRjaDogaW5kZXhNYXRjaCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHBhdGhcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBwcmludExvY2F0aW9uKHBhdGgsIG9wdGlvbiwgcHJlZml4ID0gXCJQcm9ibGVtIHZhbHVlIGZvdW5kIGF0OiBcXG5cIikge1xuICAgIGxldCBzdHIgPSBcIlxcblxcblwiICsgcHJlZml4ICsgXCJvcHRpb25zID0ge1xcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpICsgMTsgaisrKSB7XG4gICAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgICB9XG4gICAgICBzdHIgKz0gcGF0aFtpXSArIFwiOiB7XFxuXCI7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggKyAxOyBqKyspIHtcbiAgICAgIHN0ciArPSBcIiAgXCI7XG4gICAgfVxuICAgIHN0ciArPSBvcHRpb24gKyBcIlxcblwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggKyAxOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGF0aC5sZW5ndGggLSBpOyBqKyspIHtcbiAgICAgICAgc3RyICs9IFwiICBcIjtcbiAgICAgIH1cbiAgICAgIHN0ciArPSBcIn1cXG5cIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0ciArIFwiXFxuXFxuXCI7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHByaW50KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICAgIC5yZXBsYWNlKC8oXCIpfChcXFspfChcXF0pfCgsXCJfX3R5cGVfX1wiKS9nLCBcIlwiKVxuICAgICAgLnJlcGxhY2UoLygsKS9nLCBcIiwgXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqICBDb21wdXRlIHRoZSBlZGl0IGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byBnaXZlbiBzdHJpbmdzXG4gICAqIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL1N0cmluZ3MvTGV2ZW5zaHRlaW5fZGlzdGFuY2UjSmF2YVNjcmlwdFxuICAgKlxuICAgKiBDb3B5cmlnaHQgKGMpIDIwMTEgQW5kcmVpIE1hY2tlbnppZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICAgKlxuICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAgICpcbiAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fX1cbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGxldmVuc2h0ZWluRGlzdGFuY2UoYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbWF0cml4ID0gW107XG5cbiAgICAvLyBpbmNyZW1lbnQgYWxvbmcgdGhlIGZpcnN0IGNvbHVtbiBvZiBlYWNoIHJvd1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgbWF0cml4W2ldID0gW2ldO1xuICAgIH1cblxuICAgIC8vIGluY3JlbWVudCBlYWNoIGNvbHVtbiBpbiB0aGUgZmlyc3Qgcm93XG4gICAgbGV0IGo7XG4gICAgZm9yIChqID0gMDsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cblxuICAgIC8vIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIG1hdHJpeFxuICAgIGZvciAoaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT0gYS5jaGFyQXQoaiAtIDEpKSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2kgLSAxXVtqIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0cml4W2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgICAgICBtYXRyaXhbaSAtIDFdW2ogLSAxXSArIDEsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAgIG1hdHJpeFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgICAgICAgbWF0cml4W2kgLSAxXVtqXSArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApOyAvLyBkZWxldGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeFtiLmxlbmd0aF1bYS5sZW5ndGhdO1xuICB9XG59O1xuXG5jb25zdCBBY3RpdmF0b3IgPSBBY3RpdmF0b3IkMTtcclxuY29uc3QgQ29sb3JQaWNrZXIgPSBDb2xvclBpY2tlciQxO1xyXG5jb25zdCBDb25maWd1cmF0b3IgPSBDb25maWd1cmF0b3IkMTtcclxuY29uc3QgSGFtbWVyID0gSGFtbWVyJDE7XHJcbmNvbnN0IFBvcHVwID0gUG9wdXAkMTtcclxuY29uc3QgVkFMSURBVE9SX1BSSU5UX1NUWUxFID0gVkFMSURBVE9SX1BSSU5UX1NUWUxFJDE7XHJcbmNvbnN0IFZhbGlkYXRvciA9IFZhbGlkYXRvciQxO1xuXG5leHBvcnQgeyBBY3RpdmF0b3IsIEFsZWEsIENvbG9yUGlja2VyLCBDb25maWd1cmF0b3IsIERFTEVURSwgSFNWVG9IZXgsIEhTVlRvUkdCLCBIYW1tZXIsIFBvcHVwLCBSR0JUb0hTViwgUkdCVG9IZXgsIFZBTElEQVRPUl9QUklOVF9TVFlMRSwgVmFsaWRhdG9yLCBhZGRDbGFzc05hbWUsIGFkZENzc1RleHQsIGJpbmFyeVNlYXJjaEN1c3RvbSwgYmluYXJ5U2VhcmNoVmFsdWUsIGJyaWRnZU9iamVjdCwgY29weUFuZEV4dGVuZEFycmF5LCBjb3B5QXJyYXksIGRlZXBFeHRlbmQsIGRlZXBPYmplY3RBc3NpZ24sIGVhc2luZ0Z1bmN0aW9ucywgZXF1YWxBcnJheSwgZXh0ZW5kLCBmaWxsSWZEZWZpbmVkLCBmb3JFYWNoLCBnZXRBYnNvbHV0ZUxlZnQsIGdldEFic29sdXRlUmlnaHQsIGdldEFic29sdXRlVG9wLCBnZXRTY3JvbGxCYXJXaWR0aCwgZ2V0VGFyZ2V0LCBnZXRUeXBlLCBoYXNQYXJlbnQsIGhleFRvSFNWLCBoZXhUb1JHQiwgaW5zZXJ0U29ydCwgaXNEYXRlLCBpc051bWJlciwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1ZhbGlkSGV4LCBpc1ZhbGlkUkdCLCBpc1ZhbGlkUkdCQSwgbWVyZ2VPcHRpb25zLCBvcHRpb24sIG92ZXJyaWRlT3BhY2l0eSwgcGFyc2VDb2xvciwgcHJldmVudERlZmF1bHQsIHB1cmVEZWVwT2JqZWN0QXNzaWduLCByZWN1cnNpdmVET01EZWxldGUsIHJlbW92ZUNsYXNzTmFtZSwgcmVtb3ZlQ3NzVGV4dCwgc2VsZWN0aXZlQnJpZGdlT2JqZWN0LCBzZWxlY3RpdmVEZWVwRXh0ZW5kLCBzZWxlY3RpdmVFeHRlbmQsIHNlbGVjdGl2ZU5vdERlZXBFeHRlbmQsIHRocm90dGxlLCB0b0FycmF5LCB0b3BNb3N0LCB1cGRhdGVQcm9wZXJ0eSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmlzLXV0aWwuanMubWFwXG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgbmF0aXZlQ29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgUmVmbGVjdC5jb25zdHJ1Y3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmNvbnN0cnVjdFxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEobmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcblxudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxudmFyIEZPUkNFRCA9IE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHO1xuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiBGT1JDRUQgfSwge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhQ29uc3RydWN0b3IoVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhQ29uc3RydWN0b3IoYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gbmF0aXZlQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICBhcHBseShwdXNoLCAkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChhcHBseShiaW5kLCBUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3RQcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBhcHBseShUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0Jyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5SZWZsZWN0LmNvbnN0cnVjdDtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN5bWJvbCcpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpO1xufTtcblxuaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSkgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0gPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpLmY7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgIT09IGRlZmluZVByb3BlcnRpZXMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoVCwgRCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVCwgRCk7XG59O1xuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMuc2hhbSkgZGVmaW5lUHJvcGVydGllcy5zaGFtID0gdHJ1ZTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufSIsICIndXNlIHN0cmljdCc7XG52YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL29iamVjdC9jcmVhdGUnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIHNldFByb3RvdHlwZU9mOiBzZXRQcm90b3R5cGVPZlxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vZnVsbC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZicpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJpbXBvcnQgX09iamVjdCRzZXRQcm90b3R5cGVPZiBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzXCI7XG5pbXBvcnQgX2JpbmRJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvYmluZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgdmFyIF9jb250ZXh0O1xuICBfc2V0UHJvdG90eXBlT2YgPSBfT2JqZWN0JHNldFByb3RvdHlwZU9mID8gX2JpbmRJbnN0YW5jZVByb3BlcnR5KF9jb250ZXh0ID0gX09iamVjdCRzZXRQcm90b3R5cGVPZikuY2FsbChfY29udGV4dCkgOiBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCAiaW1wb3J0IF9PYmplY3QkY3JlYXRlIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2NyZWF0ZS5qc1wiO1xuaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IF9PYmplY3QkY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBfT2JqZWN0JGRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL29iamVjdC9nZXQtcHJvdG90eXBlLW9mJyk7XG4iLCAiaW1wb3J0IF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgZnJvbSBcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZi5qc1wiO1xuaW1wb3J0IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2JpbmQuanNcIjtcbmltcG9ydCBfT2JqZWN0JGdldFByb3RvdHlwZU9mIGZyb20gXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIHZhciBfY29udGV4dDtcbiAgX2dldFByb3RvdHlwZU9mID0gX09iamVjdCRzZXRQcm90b3R5cGVPZiA/IF9iaW5kSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3QkZ2V0UHJvdG90eXBlT2YpLmNhbGwoX2NvbnRleHQpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgX09iamVjdCRnZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCAidmFyIF9TeW1ib2wgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3N5bWJvbC9pbmRleC5qc1wiKTtcbnZhciBfU3ltYm9sJGl0ZXJhdG9yID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaXRlcmF0b3IuanNcIik7XG5mdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiAobW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIF9TeW1ib2wkaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBfU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IF9TeW1ib2wgJiYgbyAhPT0gX1N5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL2luc3RhbmNlL2Zvci1lYWNoJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL3N0YWJsZS9pbnN0YW5jZS9mb3ItZWFjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbi8vIGBJbnN0YWxsRXJyb3JDYXVzZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtZXJyb3ItY2F1c2UvI3NlYy1lcnJvcm9iamVjdHMtaW5zdGFsbC1lcnJvci1jYXVzZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgb3B0aW9ucykge1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgJ2NhdXNlJyBpbiBvcHRpb25zKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE8sICdjYXVzZScsIG9wdGlvbnMuY2F1c2UpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcblxudmFyIFRFU1QgPSAoZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gU3RyaW5nKG5ldyAkRXJyb3IoYXJnKS5zdGFjayk7IH0pKCd6eGNhc2QnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbnZhciBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkgPSAvXFxuXFxzKmF0IFteOl0qOlteXFxuXSovO1xudmFyIElTX1Y4X09SX0NIQUtSQV9TVEFDSyA9IFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWS50ZXN0KFRFU1QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKElTX1Y4X09SX0NIQUtSQV9TVEFDSyAmJiB0eXBlb2Ygc3RhY2sgPT0gJ3N0cmluZycgJiYgISRFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuICAgIHdoaWxlIChkcm9wRW50cmllcy0tKSBzdGFjayA9IHJlcGxhY2Uoc3RhY2ssIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSwgJycpO1xuICB9IHJldHVybiBzdGFjaztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdhJyk7XG4gIGlmICghKCdzdGFjaycgaW4gZXJyb3IpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIDcpKTtcbiAgcmV0dXJuIGVycm9yLnN0YWNrICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjbGVhckVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXInKTtcbnZhciBFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZScpO1xuXG4vLyBub24tc3RhbmRhcmQgVjhcbnZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlcnJvciwgQywgc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSkge1xuICAgIGlmIChjYXB0dXJlU3RhY2tUcmFjZSkgY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIEMpO1xuICAgIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjbGVhckVycm9yU3RhY2soc3RhY2ssIGRyb3BFbnRyaWVzKSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBSZXN1bHRQcm90b3R5cGUgPSBSZXN1bHQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfUkVDT1JEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX1JFQ09SRCk7XG4gIHZhciBJU19JVEVSQVRPUiA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19JVEVSQVRPUik7XG4gIHZhciBJTlRFUlJVUFRFRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JTlRFUlJVUFRFRCk7XG4gIHZhciBmbiA9IGJpbmQodW5ib3VuZEZ1bmN0aW9uLCB0aGF0KTtcbiAgdmFyIGl0ZXJhdG9yLCBpdGVyRm4sIGluZGV4LCBsZW5ndGgsIHJlc3VsdCwgbmV4dCwgc3RlcDtcblxuICB2YXIgc3RvcCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHtcbiAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBjb25kaXRpb24pO1xuICAgIHJldHVybiBuZXcgUmVzdWx0KHRydWUsIGNvbmRpdGlvbik7XG4gIH07XG5cbiAgdmFyIGNhbGxGbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChBU19FTlRSSUVTKSB7XG4gICAgICBhbk9iamVjdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZVswXSwgdmFsdWVbMV0sIHN0b3ApIDogZm4odmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICB9IHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlLCBzdG9wKSA6IGZuKHZhbHVlKTtcbiAgfTtcblxuICBpZiAoSVNfUkVDT1JEKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZS5pdGVyYXRvcjtcbiAgfSBlbHNlIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICghaXRlckZuKSB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdGVyYWJsZSkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlcmFibGUpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IElTX1JFQ09SRCA/IGl0ZXJhYmxlLm5leHQgOiBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaW5zdGFsbEVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJEVycm9yID0gRXJyb3I7XG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbnZhciAkQWdncmVnYXRlRXJyb3IgPSBmdW5jdGlvbiBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIG1lc3NhZ2UgLyogLCBvcHRpb25zICovKSB7XG4gIHZhciBpc0luc3RhbmNlID0gaXNQcm90b3R5cGVPZihBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSwgdGhpcyk7XG4gIHZhciB0aGF0O1xuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICB0aGF0ID0gc2V0UHJvdG90eXBlT2YobmV3ICRFcnJvcigpLCBpc0luc3RhbmNlID8gZ2V0UHJvdG90eXBlT2YodGhpcykgOiBBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhhdCA9IGlzSW5zdGFuY2UgPyB0aGlzIDogY3JlYXRlKEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlKTtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgVE9fU1RSSU5HX1RBRywgJ0Vycm9yJyk7XG4gIH1cbiAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdtZXNzYWdlJywgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQobWVzc2FnZSkpO1xuICBpbnN0YWxsRXJyb3JTdGFjayh0aGF0LCAkQWdncmVnYXRlRXJyb3IsIHRoYXQuc3RhY2ssIDEpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIGluc3RhbGxFcnJvckNhdXNlKHRoYXQsIGFyZ3VtZW50c1syXSk7XG4gIHZhciBlcnJvcnNBcnJheSA9IFtdO1xuICBpdGVyYXRlKGVycm9ycywgcHVzaCwgeyB0aGF0OiBlcnJvcnNBcnJheSB9KTtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdlcnJvcnMnLCBlcnJvcnNBcnJheSk7XG4gIHJldHVybiB0aGF0O1xufTtcblxuaWYgKHNldFByb3RvdHlwZU9mKSBzZXRQcm90b3R5cGVPZigkQWdncmVnYXRlRXJyb3IsICRFcnJvcik7XG5lbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoJEFnZ3JlZ2F0ZUVycm9yLCAkRXJyb3IsIHsgbmFtZTogdHJ1ZSB9KTtcblxudmFyIEFnZ3JlZ2F0ZUVycm9yUHJvdG90eXBlID0gJEFnZ3JlZ2F0ZUVycm9yLnByb3RvdHlwZSA9IGNyZWF0ZSgkRXJyb3IucHJvdG90eXBlLCB7XG4gIGNvbnN0cnVjdG9yOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJEFnZ3JlZ2F0ZUVycm9yKSxcbiAgbWVzc2FnZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICcnKSxcbiAgbmFtZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICdBZ2dyZWdhdGVFcnJvcicpXG59KTtcblxuLy8gYEFnZ3JlZ2F0ZUVycm9yYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZ2dyZWdhdGUtZXJyb3ItY29uc3RydWN0b3JcbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBhcml0eTogMiB9LCB7XG4gIEFnZ3JlZ2F0ZUVycm9yOiAkQWdncmVnYXRlRXJyb3Jcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIEZ1bmN0aW9uID0gZ2xvYmFsLkZ1bmN0aW9uO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciAkbG9jYXRpb24sIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG5mYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIERlbm8gdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3Igb24gYGxvY2F0aW9uYCBhY2Nlc3Mgd2l0aG91dCBgLS1sb2NhdGlvbmAgZmxhZ1xuICAkbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG59KTtcblxudmFyIHJ1biA9IGZ1bmN0aW9uIChpZCkge1xuICBpZiAoaGFzT3duKHF1ZXVlLCBpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBldmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBnbG9iYWxQb3N0TWVzc2FnZURlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWwucG9zdE1lc3NhZ2UoU3RyaW5nKGlkKSwgJGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArICRsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoaGFuZGxlcikge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBmbiA9IGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcik7XG4gICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZXZlbnRMaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKFxuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmXG4gICAgaXNDYWxsYWJsZShnbG9iYWwucG9zdE1lc3NhZ2UpICYmXG4gICAgIWdsb2JhbC5pbXBvcnRTY3JpcHRzICYmXG4gICAgJGxvY2F0aW9uICYmICRsb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgICFmYWlscyhnbG9iYWxQb3N0TWVzc2FnZURlZmVyKVxuICApIHtcbiAgICBkZWZlciA9IGdsb2JhbFBvc3RNZXNzYWdlRGVmZXI7XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudExpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCBpc051bGxPclVuZGVmaW5lZChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUNvbnN0cnVjdG9yKFMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gLyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaGVhZCA9IG51bGw7XG4gIHRoaXMudGFpbCA9IG51bGw7XG59O1xuXG5RdWV1ZS5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2YXIgZW50cnkgPSB7IGl0ZW06IGl0ZW0sIG5leHQ6IG51bGwgfTtcbiAgICB2YXIgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBpZiAodGFpbCkgdGFpbC5uZXh0ID0gZW50cnk7XG4gICAgZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5oZWFkO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgdmFyIG5leHQgPSB0aGlzLmhlYWQgPSBlbnRyeS5uZXh0O1xuICAgICAgaWYgKG5leHQgPT09IG51bGwpIHRoaXMudGFpbCA9IG51bGw7XG4gICAgICByZXR1cm4gZW50cnkuaXRlbTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUXVldWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBRdWV1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9xdWV1ZScpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfSU9TX1BFQkJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZScpO1xudmFyIElTX1dFQk9TX1dFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0Jyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgbWljcm90YXNrID0gcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yICYmIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvci52YWx1ZTtcbnZhciBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghbWljcm90YXNrKSB7XG4gIHZhciBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChmbiA9IHF1ZXVlLmdldCgpKSB0cnkge1xuICAgICAgZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHF1ZXVlLmhlYWQpIG5vdGlmeSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gYmluZChwcm9taXNlLnRoZW4sIHByb21pc2UpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdlXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIC8vIGB3ZWJwYWNrYCBkZXYgc2VydmVyIGJ1ZyBvbiBJRSBnbG9iYWwgbWV0aG9kcyAtIHVzZSBiaW5kKGZuLCBnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgbWljcm90YXNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKCFxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICBxdWV1ZS5hZGQoZm4pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pY3JvdGFzaztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHVzZXJBZ2VudCkgJiYgdHlwZW9mIFBlYmJsZSAhPSAndW5kZWZpbmVkJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdCh1c2VyQWdlbnQpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIHZhbHVlOiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgdmFsdWU6IGVycm9yIH07XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuUHJvbWlzZTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgRGVubyAtLSBEZW5vIGNhc2UgKi9cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIERlbm8gPT0gJ29iamVjdCcgJiYgRGVubyAmJiB0eXBlb2YgRGVuby52ZXJzaW9uID09ICdvYmplY3QnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJU19ERU5PID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFJU19ERU5PICYmICFJU19OT0RFXG4gICYmIHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCdcbiAgJiYgdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19CUk9XU0VSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyJyk7XG52YXIgSVNfREVOTyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtZGVubycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgU1VCQ0xBU1NJTkcgPSBmYWxzZTtcbnZhciBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgPSBpc0NhbGxhYmxlKGdsb2JhbC5Qcm9taXNlUmVqZWN0aW9uRXZlbnQpO1xuXG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBpc0ZvcmNlZCgnUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFID0gaW5zcGVjdFNvdXJjZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpO1xuICB2YXIgR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSA9IFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFICE9PSBTdHJpbmcoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgLy8gVjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgLy8gV2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgaWYgKCFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIFY4X1ZFUlNJT04gPT09IDY2KSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgbmVlZCBQcm9taXNlI3sgY2F0Y2gsIGZpbmFsbHkgfSBpbiB0aGUgcHVyZSB2ZXJzaW9uIGZvciBwcmV2ZW50aW5nIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgaWYgKElTX1BVUkUgJiYgIShOYXRpdmVQcm9taXNlUHJvdG90eXBlWydjYXRjaCddICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSkpIHJldHVybiB0cnVlO1xuICAvLyBXZSBjYW4ndCB1c2UgQEBzcGVjaWVzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxuICBpZiAoIVY4X1ZFUlNJT04gfHwgVjhfVkVSU0lPTiA8IDUxIHx8ICEvbmF0aXZlIGNvZGUvLnRlc3QoUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UpKSB7XG4gICAgLy8gRGV0ZWN0IGNvcnJlY3RuZXNzIG9mIHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSgxKTsgfSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICAgIH07XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gRmFrZVByb21pc2U7XG4gICAgU1VCQ0xBU1NJTkcgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICAgIGlmICghU1VCQ0xBU1NJTkcpIHJldHVybiB0cnVlO1xuICAvLyBVbmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gIH0gcmV0dXJuICFHTE9CQUxfQ09SRV9KU19QUk9NSVNFICYmIChJU19CUk9XU0VSIHx8IElTX0RFTk8pICYmICFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENPTlNUUlVDVE9SOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUixcbiAgUkVKRUNUSU9OX0VWRU5UOiBOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQsXG4gIFNVQkNMQVNTSU5HOiBTVUJDTEFTU0lOR1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFDYWxsYWJsZShyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhQ2FsbGFibGUocmVqZWN0KTtcbn07XG5cbi8vIGBOZXdQcm9taXNlQ2FwYWJpbGl0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW5ld3Byb21pc2VjYXBhYmlsaXR5XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9taWNyb3Rhc2snKTtcbnZhciBob3N0UmVwb3J0RXJyb3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycycpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIFF1ZXVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3F1ZXVlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uQ09OU1RSVUNUT1I7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlJFSkVDVElPTl9FVkVOVDtcbnZhciBOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORyA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5TVUJDTEFTU0lORztcbnZhciBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFBST01JU0UpO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yO1xudmFyIFByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbnZhciBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eTtcblxudmFyIERJU1BBVENIX0VWRU5UID0gISEoZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRXZlbnQgJiYgZ2xvYmFsLmRpc3BhdGNoRXZlbnQpO1xudmFyIFVOSEFORExFRF9SRUpFQ1RJT04gPSAndW5oYW5kbGVkcmVqZWN0aW9uJztcbnZhciBSRUpFQ1RJT05fSEFORExFRCA9ICdyZWplY3Rpb25oYW5kbGVkJztcbnZhciBQRU5ESU5HID0gMDtcbnZhciBGVUxGSUxMRUQgPSAxO1xudmFyIFJFSkVDVEVEID0gMjtcbnZhciBIQU5ETEVEID0gMTtcbnZhciBVTkhBTkRMRUQgPSAyO1xuXG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgaXNDYWxsYWJsZSh0aGVuID0gaXQudGhlbikgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgY2FsbFJlYWN0aW9uID0gZnVuY3Rpb24gKHJlYWN0aW9uLCBzdGF0ZSkge1xuICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT09IEZVTEZJTExFRDtcbiAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gIHRyeSB7XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGlmICghb2spIHtcbiAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChzdGF0ZSk7XG4gICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICBjYWxsKHRoZW4sIHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgIHJlamVjdChlcnJvcik7XG4gIH1cbn07XG5cbnZhciBub3RpZnkgPSBmdW5jdGlvbiAoc3RhdGUsIGlzUmVqZWN0KSB7XG4gIGlmIChzdGF0ZS5ub3RpZmllZCkgcmV0dXJuO1xuICBzdGF0ZS5ub3RpZmllZCA9IHRydWU7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlYWN0aW9ucyA9IHN0YXRlLnJlYWN0aW9ucztcbiAgICB2YXIgcmVhY3Rpb247XG4gICAgd2hpbGUgKHJlYWN0aW9uID0gcmVhY3Rpb25zLmdldCgpKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQoc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2UgZXZlbnQgPSB7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcmVhc29uIH07XG4gIGlmICghTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UICYmIChoYW5kbGVyID0gZ2xvYmFsWydvbicgKyBuYW1lXSkpIGhhbmRsZXIoZXZlbnQpO1xuICBlbHNlIGlmIChuYW1lID09PSBVTkhBTkRMRURfUkVKRUNUSU9OKSBob3N0UmVwb3J0RXJyb3JzKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCByZWFzb24pO1xufTtcblxudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIElTX1VOSEFORExFRCA9IGlzVW5oYW5kbGVkKHN0YXRlKTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGlmIChJU19VTkhBTkRMRUQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChVTkhBTkRMRURfUkVKRUNUSU9OLCBwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBzdGF0ZS5yZWplY3Rpb24gPSBJU19OT0RFIHx8IGlzVW5oYW5kbGVkKHN0YXRlKSA/IFVOSEFORExFRCA6IEhBTkRMRUQ7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyByZXN1bHQudmFsdWU7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUucmVqZWN0aW9uICE9PSBIQU5ETEVEICYmICFzdGF0ZS5wYXJlbnQ7XG59O1xuXG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4oc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChzdGF0ZS5mYWNhZGUgPT09IHZhbHVlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgdmFyIHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKTtcbiAgICBpZiAodGhlbikge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IGRvbmU6IGZhbHNlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FsbCh0aGVuLCB2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkoc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QoeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIGFDYWxsYWJsZShleGVjdXRvcik7XG4gICAgY2FsbChJbnRlcm5hbCwgdGhpcyk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSksIGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGludGVybmFsUmVqZWN0KHN0YXRlLCBlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIFByb21pc2VQcm90b3R5cGUgPSBQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogbmV3IFF1ZXVlKCksXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG5cbiAgLy8gYFByb21pc2UucHJvdG90eXBlLnRoZW5gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLnRoZW5cbiAgSW50ZXJuYWwucHJvdG90eXBlID0gZGVmaW5lQnVpbHRJbihQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yKSk7XG4gICAgc3RhdGUucGFyZW50ID0gdHJ1ZTtcbiAgICByZWFjdGlvbi5vayA9IGlzQ2FsbGFibGUob25GdWxmaWxsZWQpID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgIHJlYWN0aW9uLmZhaWwgPSBpc0NhbGxhYmxlKG9uUmVqZWN0ZWQpICYmIG9uUmVqZWN0ZWQ7XG4gICAgcmVhY3Rpb24uZG9tYWluID0gSVNfTk9ERSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgIGlmIChzdGF0ZS5zdGF0ZSA9PT0gUEVORElORykgc3RhdGUucmVhY3Rpb25zLmFkZChyZWFjdGlvbik7XG4gICAgZWxzZSBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gIH0pO1xuXG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUocHJvbWlzZSk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpO1xuICAgIHRoaXMucmVqZWN0ID0gYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpO1xuICB9O1xuXG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikgJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIG5hdGl2ZVRoZW4gPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLnRoZW47XG5cbiAgICBpZiAoIU5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HKSB7XG4gICAgICAvLyBtYWtlIGBQcm9taXNlI3RoZW5gIHJldHVybiBhIHBvbHlmaWxsZWQgYFByb21pc2VgIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBjYWxsKG5hdGl2ZVRoZW4sIHRoYXQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY0MFxuICAgICAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBgLmNvbnN0cnVjdG9yID09PSBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICAgIC8vIG1ha2UgYGluc3RhbmNlb2YgUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgc2V0UHJvdG90eXBlT2YoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBzYWZlXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKS50aGVuKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5jYXRjaFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiwgcmVhbDogdHJ1ZSB9LCB7XG4gICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnY2F0Y2gnXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgY2FsbChjYXBhYmlsaXR5LnJlamVjdCwgdW5kZWZpbmVkLCByKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcblxudmFyIFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPSBnZXRCdWlsdEluKCdQcm9taXNlJyk7XG52YXIgQ0hFQ0tfV1JBUFBFUiA9IElTX1BVUkUgJiYgIUZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SO1xuXG4vLyBgUHJvbWlzZS5yZXNvbHZlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZXNvbHZlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB8fCBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDSEVDS19XUkFQUEVSICYmIHRoaXMgPT09IFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uJyk7XG5cbi8vIGBQcm9taXNlLmFsbFNldHRsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbHNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgY2FsbChwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ2Z1bGZpbGxlZCcsIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdyZWplY3RlZCcsIHJlYXNvbjogZXJyb3IgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG52YXIgUFJPTUlTRV9BTllfRVJST1IgPSAnTm8gb25lIHByb21pc2UgcmVzb2x2ZWQnO1xuXG4vLyBgUHJvbWlzZS5hbnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFueVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYW55OiBmdW5jdGlvbiBhbnkoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIEFnZ3JlZ2F0ZUVycm9yID0gZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKTtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgZXJyb3JzW2luZGV4XSA9IGVycm9yO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10aGVuYWJsZSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10uY2FsbCh7IHRoZW46IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBOT05fR0VORVJJQyB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSBpc0NhbGxhYmxlKG9uRmluYWxseSk7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNmaW5hbGx5YCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2ZpbmFsbHknXSAhPT0gbWV0aG9kKSB7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnZmluYWxseScsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnByb21pc2UnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZCcpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFueScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5Qcm9taXNlO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9wcm9taXNlJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG4vLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2Utd2l0aC1yZXNvbHZlcnNcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHdpdGhSZXNvbHZlcnM6IGZ1bmN0aW9uIHdpdGhSZXNvbHZlcnMoKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvbWlzZTogcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZSxcbiAgICAgIHJlc29sdmU6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUsXG4gICAgICByZWplY3Q6IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdFxuICAgIH07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvcHJvbWlzZScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS53aXRoLXJlc29sdmVycycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xuXG4vLyBgUHJvbWlzZS50cnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgICAocmVzdWx0LmVycm9yID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2FjdHVhbC9wcm9taXNlJyk7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQuYWdncmVnYXRlLWVycm9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLmFsbC1zZXR0bGVkJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lc25leHQucHJvbWlzZS5hbnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9mdWxsL3Byb21pc2UnKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2Z1bGwvaW5zdGFuY2UvcmV2ZXJzZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvcmV2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qc1wiKTtcbnZhciBfU3ltYm9sID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9zeW1ib2wvaW5kZXguanNcIik7XG52YXIgX09iamVjdCRjcmVhdGUgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanNcIik7XG52YXIgX09iamVjdCRnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2dldC1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaC5qc1wiKTtcbnZhciBfcHVzaEluc3RhbmNlUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3B1c2guanNcIik7XG52YXIgX09iamVjdCRzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgX1Byb21pc2UgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL3Byb21pc2UvaW5kZXguanNcIik7XG52YXIgX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5ID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlLmpzXCIpO1xudmFyIF9zbGljZUluc3RhbmNlUHJvcGVydHkgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzXCIpO1xuZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7IC8qISByZWdlbmVyYXRvci1ydW50aW1lIC0tIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLiAtLSBsaWNlbnNlIChNSVQpOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL0xJQ0VOU0UgKi9cbiAgbW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lID0gZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICB2YXIgdCxcbiAgICBlID0ge30sXG4gICAgciA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgbiA9IHIuaGFzT3duUHJvcGVydHksXG4gICAgbyA9IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgX1N5bWJvbCA/IF9TeW1ib2wgOiB7fSxcbiAgICBhID0gaS5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIixcbiAgICBjID0gaS5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCIsXG4gICAgdSA9IGkudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG4gIGZ1bmN0aW9uIGRlZmluZSh0LCBlLCByKSB7XG4gICAgcmV0dXJuIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBfT2JqZWN0JGNyZWF0ZShpLnByb3RvdHlwZSksXG4gICAgICBjID0gbmV3IENvbnRleHQobiB8fCBbXSk7XG4gICAgcmV0dXJuIG8oYSwgXCJfaW52b2tlXCIsIHtcbiAgICAgIHZhbHVlOiBtYWtlSW52b2tlTWV0aG9kKHQsIHIsIGMpXG4gICAgfSksIGE7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2godCwgZSwgcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IHQuY2FsbChlLCByKVxuICAgICAgfTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRocm93XCIsXG4gICAgICAgIGFyZzogdFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZS53cmFwID0gd3JhcDtcbiAgdmFyIGggPSBcInN1c3BlbmRlZFN0YXJ0XCIsXG4gICAgbCA9IFwic3VzcGVuZGVkWWllbGRcIixcbiAgICBmID0gXCJleGVjdXRpbmdcIixcbiAgICBzID0gXCJjb21wbGV0ZWRcIixcbiAgICB5ID0ge307XG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuICB2YXIgcCA9IHt9O1xuICBkZWZpbmUocCwgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbiAgdmFyIGQgPSBfT2JqZWN0JGdldFByb3RvdHlwZU9mLFxuICAgIHYgPSBkICYmIGQoZCh2YWx1ZXMoW10pKSk7XG4gIHYgJiYgdiAhPT0gciAmJiBuLmNhbGwodiwgYSkgJiYgKHAgPSB2KTtcbiAgdmFyIGcgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgdmFyIF9jb250ZXh0O1xuICAgIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXSkuY2FsbChfY29udGV4dCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKG8gPT09IHMpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gaSkgdGhyb3cgYTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICBkb25lOiAhMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZm9yIChuLm1ldGhvZCA9IGksIG4uYXJnID0gYTs7KSB7XG4gICAgICAgIHZhciBjID0gbi5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICB2YXIgdSA9IG1heWJlSW52b2tlRGVsZWdhdGUoYywgbik7XG4gICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgIGlmICh1ID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiB1O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJuZXh0XCIgPT09IG4ubWV0aG9kKSBuLnNlbnQgPSBuLl9zZW50ID0gbi5hcmc7ZWxzZSBpZiAoXCJ0aHJvd1wiID09PSBuLm1ldGhvZCkge1xuICAgICAgICAgIGlmIChvID09PSBoKSB0aHJvdyBvID0gcywgbi5hcmc7XG4gICAgICAgICAgbi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBuLm1ldGhvZCAmJiBuLmFicnVwdChcInJldHVyblwiLCBuLmFyZyk7XG4gICAgICAgIG8gPSBmO1xuICAgICAgICB2YXIgcCA9IHRyeUNhdGNoKGUsIHIsIG4pO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcC50eXBlKSB7XG4gICAgICAgICAgaWYgKG8gPSBuLmRvbmUgPyBzIDogbCwgcC5hcmcgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcC5hcmcsXG4gICAgICAgICAgICBkb25lOiBuLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcC50eXBlICYmIChvID0gcywgbi5tZXRob2QgPSBcInRocm93XCIsIG4uYXJnID0gcC5hcmcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSB7XG4gICAgdmFyIG4gPSByLm1ldGhvZCxcbiAgICAgIG8gPSBlLml0ZXJhdG9yW25dO1xuICAgIGlmIChvID09PSB0KSByZXR1cm4gci5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbiAmJiBlLml0ZXJhdG9yW1wicmV0dXJuXCJdICYmIChyLm1ldGhvZCA9IFwicmV0dXJuXCIsIHIuYXJnID0gdCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSwgXCJ0aHJvd1wiID09PSByLm1ldGhvZCkgfHwgXCJyZXR1cm5cIiAhPT0gbiAmJiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ1wiICsgbiArIFwiJyBtZXRob2RcIikpLCB5O1xuICAgIHZhciBpID0gdHJ5Q2F0Y2gobywgZS5pdGVyYXRvciwgci5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IGkudHlwZSkgcmV0dXJuIHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IGkuYXJnLCByLmRlbGVnYXRlID0gbnVsbCwgeTtcbiAgICB2YXIgYSA9IGkuYXJnO1xuICAgIHJldHVybiBhID8gYS5kb25lID8gKHJbZS5yZXN1bHROYW1lXSA9IGEudmFsdWUsIHIubmV4dCA9IGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gci5tZXRob2QgJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksIHIuZGVsZWdhdGUgPSBudWxsLCB5KSA6IGEgOiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLCByLmRlbGVnYXRlID0gbnVsbCwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgX2NvbnRleHQyO1xuICAgIHZhciBlID0ge1xuICAgICAgdHJ5TG9jOiB0WzBdXG4gICAgfTtcbiAgICAxIGluIHQgJiYgKGUuY2F0Y2hMb2MgPSB0WzFdKSwgMiBpbiB0ICYmIChlLmZpbmFsbHlMb2MgPSB0WzJdLCBlLmFmdGVyTG9jID0gdFszXSksIF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDIgPSB0aGlzLnRyeUVudHJpZXMpLmNhbGwoX2NvbnRleHQyLCBlKTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHQuY29tcGxldGlvbiB8fCB7fTtcbiAgICBlLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgZS5hcmcsIHQuY29tcGxldGlvbiA9IGU7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5KHQpLmNhbGwodCwgcHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGUpIHtcbiAgICBpZiAoZSB8fCBcIlwiID09PSBlKSB7XG4gICAgICB2YXIgciA9IGVbYV07XG4gICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUubmV4dCkgcmV0dXJuIGU7XG4gICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgbyA9IC0xLFxuICAgICAgICAgIGkgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIG8oZywgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG8oR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGUuZGlzcGxheU5hbWUgfHwgZS5uYW1lKSk7XG4gIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIF9PYmplY3Qkc2V0UHJvdG90eXBlT2YgPyBfT2JqZWN0JHNldFByb3RvdHlwZU9mKHQsIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6ICh0Ll9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBkZWZpbmUodCwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksIHQucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoZyksIHQ7XG4gIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiB0XG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBjLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHtcbiAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBfUHJvbWlzZSk7XG4gICAgdmFyIGEgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKHQsIHIsIG4sIG8pLCBpKTtcbiAgICByZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpID8gYSA6IGEubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LmRvbmUgPyB0LnZhbHVlIDogYS5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhnKSwgZGVmaW5lKGcsIHUsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoZywgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZGVmaW5lKGcsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZS5rZXlzID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IE9iamVjdCh0KSxcbiAgICAgIHIgPSBbXTtcbiAgICBmb3IgKHZhciBuIGluIGUpIF9wdXNoSW5zdGFuY2VQcm9wZXJ0eShyKS5jYWxsKHIsIG4pO1xuICAgIHJldHVybiBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkocikuY2FsbChyKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyByLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIHQgPSByLnBvcCgpO1xuICAgICAgICBpZiAodCBpbiBlKSByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgICAgdmFyIF9jb250ZXh0MztcbiAgICAgIGlmICh0aGlzLnByZXYgPSAwLCB0aGlzLm5leHQgPSAwLCB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHQsIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDMgPSB0aGlzLnRyeUVudHJpZXMpLmNhbGwoX2NvbnRleHQzLCByZXNldFRyeUVudHJ5KSwgIWUpIGZvciAodmFyIHIgaW4gdGhpcykgXCJ0XCIgPT09IHIuY2hhckF0KDApICYmIG4uY2FsbCh0aGlzLCByKSAmJiAhaXNOYU4oK19zbGljZUluc3RhbmNlUHJvcGVydHkocikuY2FsbChyLCAxKSkgJiYgKHRoaXNbcl0gPSB0KTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciB0ID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihlKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBlO1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKG4sIG8pIHtcbiAgICAgICAgcmV0dXJuIGEudHlwZSA9IFwidGhyb3dcIiwgYS5hcmcgPSBlLCByLm5leHQgPSBuLCBvICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCAhIW87XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBvID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IG8gPj0gMDsgLS1vKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy50cnlFbnRyaWVzW29dLFxuICAgICAgICAgIGEgPSBpLmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gaS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChpLnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgYyA9IG4uY2FsbChpLCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgdSA9IG4uY2FsbChpLCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGMgJiYgdSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXUpIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodCwgZSkge1xuICAgICAgZm9yICh2YXIgciA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyByID49IDA7IC0tcikge1xuICAgICAgICB2YXIgbyA9IHRoaXMudHJ5RW50cmllc1tyXTtcbiAgICAgICAgaWYgKG8udHJ5TG9jIDw9IHRoaXMucHJldiAmJiBuLmNhbGwobywgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IG8uZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBpID0gbztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaSAmJiAoXCJicmVha1wiID09PSB0IHx8IFwiY29udGludWVcIiA9PT0gdCkgJiYgaS50cnlMb2MgPD0gZSAmJiBlIDw9IGkuZmluYWxseUxvYyAmJiAoaSA9IG51bGwpO1xuICAgICAgdmFyIGEgPSBpID8gaS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gYS50eXBlID0gdCwgYS5hcmcgPSBlLCBpID8gKHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMubmV4dCA9IGkuZmluYWxseUxvYywgeSkgOiB0aGlzLmNvbXBsZXRlKGEpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHQsIGUpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gXCJicmVha1wiID09PSB0LnR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0LnR5cGUgPyB0aGlzLm5leHQgPSB0LmFyZyA6IFwicmV0dXJuXCIgPT09IHQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHQuYXJnLCB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCIsIHRoaXMubmV4dCA9IFwiZW5kXCIpIDogXCJub3JtYWxcIiA9PT0gdC50eXBlICYmIGUgJiYgKHRoaXMubmV4dCA9IGUpLCB5O1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2godCkge1xuICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMudHJ5RW50cmllc1tlXTtcbiAgICAgICAgaWYgKHIuZmluYWxseUxvYyA9PT0gdCkgcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLCByLmFmdGVyTG9jKSwgcmVzZXRUcnlFbnRyeShyKSwgeTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24gX2NhdGNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLnRyeUxvYyA9PT0gdCkge1xuICAgICAgICAgIHZhciBuID0gci5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChcInRocm93XCIgPT09IG4udHlwZSkge1xuICAgICAgICAgICAgdmFyIG8gPSBuLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkocik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG4vLyBGRjI2LSBidWc6IEFycmF5QnVmZmVycyBhcmUgbm9uLWV4dGVuc2libGUsIGJ1dCBPYmplY3QuaXNFeHRlbnNpYmxlIGRvZXMgbm90IHJlcG9ydCBpdFxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyID09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKGJ1ZmZlcikpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidWZmZXIsICdhJywgeyB2YWx1ZTogOCB9KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRpc0V4dGVuc2libGUoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmlzRXh0ZW5zaWJsZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5pc2V4dGVuc2libGVcbm1vZHVsZS5leHBvcnRzID0gKEZBSUxTX09OX1BSSU1JVElWRVMgfHwgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFKSA/IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFICYmIGNsYXNzb2YoaXQpID09PSAnQXJyYXlCdWZmZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlO1xufSA6ICRpc0V4dGVuc2libGU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1wcmV2ZW50ZXh0ZW5zaW9ucyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKTtcbnZhciBpc0V4dGVuc2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcblxudmFyIFJFUVVJUkVEID0gZmFsc2U7XG52YXIgTUVUQURBVEEgPSB1aWQoJ21ldGEnKTtcbnZhciBpZCA9IDA7XG5cbnZhciBzZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBkZWZpbmVQcm9wZXJ0eShpdCwgTUVUQURBVEEsIHsgdmFsdWU6IHtcbiAgICBvYmplY3RJRDogJ08nICsgaWQrKywgLy8gb2JqZWN0IElEXG4gICAgd2Vha0RhdGE6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xuXG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBhIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLm9iamVjdElEO1xufTtcblxudmFyIGdldFdlYWtEYXRhID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiB0aGUgc3RvcmUgb2Ygd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLndlYWtEYXRhO1xufTtcblxuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaSU5HICYmIFJFUVVJUkVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhc093bihpdCwgTUVUQURBVEEpKSBzZXRNZXRhZGF0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cbnZhciBlbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIG1ldGEuZW5hYmxlID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICBSRVFVSVJFRCA9IHRydWU7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mO1xuICB2YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdGVzdFtNRVRBREFUQV0gPSAxO1xuXG4gIC8vIHByZXZlbnQgZXhwb3Npbmcgb2YgbWV0YWRhdGEga2V5XG4gIGlmIChnZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QpLmxlbmd0aCkge1xuICAgIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocmVzdWx0W2ldID09PSBNRVRBREFUQSkge1xuICAgICAgICAgIHNwbGljZShyZXN1bHQsIGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlLmZcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5hYmxlOiBlbmFibGUsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWtEYXRhOiBnZXRXZWFrRGF0YSxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5oaWRkZW5LZXlzW01FVEFEQVRBXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcbiAgdmFyIENvbnN0cnVjdG9yO1xuXG4gIGlmICghREVTQ1JJUFRPUlMgfHwgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpXG4gICAgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7IH0pKVxuICApIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSB7XG4gICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKGFuSW5zdGFuY2UodGFyZ2V0LCBQcm90b3R5cGUpLCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGNvbGxlY3Rpb246IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlcmFibGUpKSBpdGVyYXRlKGl0ZXJhYmxlLCB0YXJnZXRbQURERVJdLCB7IHRoYXQ6IHRhcmdldCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIGZvckVhY2goWydhZGQnLCAnY2xlYXInLCAnZGVsZXRlJywgJ2ZvckVhY2gnLCAnZ2V0JywgJ2hhcycsICdzZXQnLCAna2V5cycsICd2YWx1ZXMnLCAnZW50cmllcyddLCBmdW5jdGlvbiAoS0VZKSB7XG4gICAgICB2YXIgSVNfQURERVIgPSBLRVkgPT09ICdhZGQnIHx8IEtFWSA9PT0gJ3NldCc7XG4gICAgICBpZiAoS0VZIGluIE5hdGl2ZVByb3RvdHlwZSAmJiAhKElTX1dFQUsgJiYgS0VZID09PSAnY2xlYXInKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmNvbGxlY3Rpb247XG4gICAgICAgICAgaWYgKCFJU19BRERFUiAmJiBJU19XRUFLICYmICFpc09iamVjdChhKSkgcmV0dXJuIEtFWSA9PT0gJ2dldCcgPyB1bmRlZmluZWQgOiBmYWxzZTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY29sbGVjdGlvbltLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgcmV0dXJuIElTX0FEREVSID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBJU19XRUFLIHx8IGRlZmluZVByb3BlcnR5KFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuY29sbGVjdGlvbi5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZhbHNlLCB0cnVlKTtcblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwgZXhwb3J0ZWQpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bnNhZmUgJiYgdGFyZ2V0W2tleV0pIHRhcmdldFtrZXldID0gc3JjW2tleV07XG4gICAgZWxzZSBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgc2l6ZTogMFxuICAgICAgfSk7XG4gICAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGF0LnNpemUgPSAwO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgdmFyIHByZXZpb3VzLCBpbmRleDtcbiAgICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sYXN0ID0gZW50cnkgPSB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91czogcHJldmlvdXMgPSBzdGF0ZS5sYXN0LFxuICAgICAgICAgIG5leHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGRhdGEgPSBzdGF0ZS5pbmRleDtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUgPSAwO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5kZWxldGVcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uZXh0O1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgICAgZGVsZXRlIHN0YXRlLmluZGV4W2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uZXh0ID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wcmV2aW91cyA9IHByZXY7XG4gICAgICAgICAgaWYgKHN0YXRlLmZpcnN0ID09PSBlbnRyeSkgc3RhdGUuZmlyc3QgPSBuZXh0O1xuICAgICAgICAgIGlmIChzdGF0ZS5sYXN0ID09PSBlbnRyeSkgc3RhdGUubGFzdCA9IHByZXY7XG4gICAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplLS07XG4gICAgICAgICAgZWxzZSB0aGF0LnNpemUtLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5maXJzdCkge1xuICAgICAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldH0ucHJvdG90eXBlLmhhcyhrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuaGFzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmdldFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52YWx1ZTtcbiAgICAgIH0sXG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IDoge1xuICAgICAgLy8gYFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihQcm90b3R5cGUsICdzaXplJywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKSB7XG4gICAgdmFyIElURVJBVE9SX05BTUUgPSBDT05TVFJVQ1RPUl9OQU1FICsgJyBJdGVyYXRvcic7XG4gICAgdmFyIGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICB2YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihJVEVSQVRPUl9OQU1FKTtcbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS57IGtleXMsIHZhbHVlcywgZW50cmllcywgQEBpdGVyYXRvciB9KClgIG1ldGhvZHNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIGRlZmluZUl0ZXJhdG9yKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgICB0eXBlOiBJVEVSQVRPUl9OQU1FLFxuICAgICAgICB0YXJnZXQ6IGl0ZXJhdGVkLFxuICAgICAgICBzdGF0ZTogZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUoaXRlcmF0ZWQpLFxuICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmxhc3Q7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghc3RhdGUudGFyZ2V0IHx8ICEoc3RhdGUubGFzdCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuc3RhdGUuZmlyc3QpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHN0YXRlLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09PSAna2V5cycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVudHJ5LmtleSwgZmFsc2UpO1xuICAgICAgaWYgKGtpbmQgPT09ICd2YWx1ZXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS52YWx1ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoW2VudHJ5LmtleSwgZW50cnkudmFsdWVdLCBmYWxzZSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGVbQEBzcGVjaWVzXWAgYWNjZXNzb3JzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtbWFwLUBAc3BlY2llc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXNldC1AQHNwZWNpZXNcbiAgICBzZXRTcGVjaWVzKENPTlNUUlVDVE9SX05BTUUpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uU3Ryb25nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIGBNYXBgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC1vYmplY3RzXG5jb2xsZWN0aW9uKCdNYXAnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25TdHJvbmcpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMubWFwJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5NYXA7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb21lJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb21lXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNvbWUnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAnc29tZScpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NvbWUnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc29tZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc29tZSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZycpO1xudmFyIGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLXByb3RvdHlwZS1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kKCdBcnJheScsICdrZXlzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2tleXMnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQua2V5cztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXNQcm90b3R5cGVPZihBcnJheVByb3RvdHlwZSwgaXQpICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUua2V5cylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlJyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbnZhciBtZXJnZVNvcnQgPSBmdW5jdGlvbiAoYXJyYXksIGNvbXBhcmVmbikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB2YXIgbWlkZGxlID0gZmxvb3IobGVuZ3RoIC8gMik7XG4gIHJldHVybiBsZW5ndGggPCA4ID8gaW5zZXJ0aW9uU29ydChhcnJheSwgY29tcGFyZWZuKSA6IG1lcmdlKFxuICAgIGFycmF5LFxuICAgIG1lcmdlU29ydChhcnJheVNsaWNlKGFycmF5LCAwLCBtaWRkbGUpLCBjb21wYXJlZm4pLFxuICAgIG1lcmdlU29ydChhcnJheVNsaWNlKGFycmF5LCBtaWRkbGUpLCBjb21wYXJlZm4pLFxuICAgIGNvbXBhcmVmblxuICApO1xufTtcblxudmFyIGluc2VydGlvblNvcnQgPSBmdW5jdGlvbiAoYXJyYXksIGNvbXBhcmVmbikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB2YXIgaSA9IDE7XG4gIHZhciBlbGVtZW50LCBqO1xuXG4gIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgaiA9IGk7XG4gICAgZWxlbWVudCA9IGFycmF5W2ldO1xuICAgIHdoaWxlIChqICYmIGNvbXBhcmVmbihhcnJheVtqIC0gMV0sIGVsZW1lbnQpID4gMCkge1xuICAgICAgYXJyYXlbal0gPSBhcnJheVstLWpdO1xuICAgIH1cbiAgICBpZiAoaiAhPT0gaSsrKSBhcnJheVtqXSA9IGVsZW1lbnQ7XG4gIH0gcmV0dXJuIGFycmF5O1xufTtcblxudmFyIG1lcmdlID0gZnVuY3Rpb24gKGFycmF5LCBsZWZ0LCByaWdodCwgY29tcGFyZWZuKSB7XG4gIHZhciBsbGVuZ3RoID0gbGVmdC5sZW5ndGg7XG4gIHZhciBybGVuZ3RoID0gcmlnaHQubGVuZ3RoO1xuICB2YXIgbGluZGV4ID0gMDtcbiAgdmFyIHJpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGxpbmRleCA8IGxsZW5ndGggfHwgcmluZGV4IDwgcmxlbmd0aCkge1xuICAgIGFycmF5W2xpbmRleCArIHJpbmRleF0gPSAobGluZGV4IDwgbGxlbmd0aCAmJiByaW5kZXggPCBybGVuZ3RoKVxuICAgICAgPyBjb21wYXJlZm4obGVmdFtsaW5kZXhdLCByaWdodFtyaW5kZXhdKSA8PSAwID8gbGVmdFtsaW5kZXgrK10gOiByaWdodFtyaW5kZXgrK11cbiAgICAgIDogbGluZGV4IDwgbGxlbmd0aCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdO1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2VTb3J0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIGZpcmVmb3ggPSB1c2VyQWdlbnQubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvaSk7XG5cbm1vZHVsZS5leHBvcnRzID0gISFmaXJlZm94ICYmICtmaXJlZm94WzFdO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBVQSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9NU0lFfFRyaWRlbnQvLnRlc3QoVUEpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHdlYmtpdCA9IHVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcXC8oXFxkKylcXC4vKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIXdlYmtpdCAmJiArd2Via2l0WzFdO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpbnRlcm5hbFNvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc29ydCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIEZGID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uJyk7XG52YXIgSUVfT1JfRURHRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZScpO1xudmFyIFY4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgV0VCS0lUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS13ZWJraXQtdmVyc2lvbicpO1xuXG52YXIgdGVzdCA9IFtdO1xudmFyIG5hdGl2ZVNvcnQgPSB1bmN1cnJ5VGhpcyh0ZXN0LnNvcnQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyh0ZXN0LnB1c2gpO1xuXG4vLyBJRTgtXG52YXIgRkFJTFNfT05fVU5ERUZJTkVEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pO1xuLy8gVjggYnVnXG52YXIgRkFJTFNfT05fTlVMTCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KG51bGwpO1xufSk7XG4vLyBPbGQgV2ViS2l0XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3NvcnQnKTtcblxudmFyIFNUQUJMRV9TT1JUID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZmVhdHVyZSBkZXRlY3Rpb24gY2FuIGJlIHRvbyBzbG93LCBzbyBjaGVjayBlbmdpbmVzIHZlcnNpb25zXG4gIGlmIChWOCkgcmV0dXJuIFY4IDwgNzA7XG4gIGlmIChGRiAmJiBGRiA+IDMpIHJldHVybjtcbiAgaWYgKElFX09SX0VER0UpIHJldHVybiB0cnVlO1xuICBpZiAoV0VCS0lUKSByZXR1cm4gV0VCS0lUIDwgNjAzO1xuXG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGNvZGUsIGNociwgdmFsdWUsIGluZGV4O1xuXG4gIC8vIGdlbmVyYXRlIGFuIGFycmF5IHdpdGggbW9yZSA1MTIgZWxlbWVudHMgKENoYWtyYSBhbmQgb2xkIFY4IGZhaWxzIG9ubHkgaW4gdGhpcyBjYXNlKVxuICBmb3IgKGNvZGUgPSA2NTsgY29kZSA8IDc2OyBjb2RlKyspIHtcbiAgICBjaHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICBjYXNlIDY2OiBjYXNlIDY5OiBjYXNlIDcwOiBjYXNlIDcyOiB2YWx1ZSA9IDM7IGJyZWFrO1xuICAgICAgY2FzZSA2ODogY2FzZSA3MTogdmFsdWUgPSA0OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHZhbHVlID0gMjtcbiAgICB9XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA0NzsgaW5kZXgrKykge1xuICAgICAgdGVzdC5wdXNoKHsgazogY2hyICsgaW5kZXgsIHY6IHZhbHVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRlc3Quc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi52IC0gYS52OyB9KTtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0ZXN0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IHRlc3RbaW5kZXhdLmsuY2hhckF0KDApO1xuICAgIGlmIChyZXN1bHQuY2hhckF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gY2hyKSByZXN1bHQgKz0gY2hyO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCAhPT0gJ0RHQkVGSEFDSUpLJztcbn0pO1xuXG52YXIgRk9SQ0VEID0gRkFJTFNfT05fVU5ERUZJTkVEIHx8ICFGQUlMU19PTl9OVUxMIHx8ICFTVFJJQ1RfTUVUSE9EIHx8ICFTVEFCTEVfU09SVDtcblxudmFyIGdldFNvcnRDb21wYXJlID0gZnVuY3Rpb24gKGNvbXBhcmVmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTE7XG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gK2NvbXBhcmVmbih4LCB5KSB8fCAwO1xuICAgIHJldHVybiB0b1N0cmluZyh4KSA+IHRvU3RyaW5nKHkpID8gMSA6IC0xO1xuICB9O1xufTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvcnRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSBhQ2FsbGFibGUoY29tcGFyZWZuKTtcblxuICAgIHZhciBhcnJheSA9IHRvT2JqZWN0KHRoaXMpO1xuXG4gICAgaWYgKFNUQUJMRV9TT1JUKSByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWQgPyBuYXRpdmVTb3J0KGFycmF5KSA6IG5hdGl2ZVNvcnQoYXJyYXksIGNvbXBhcmVmbik7XG5cbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB2YXIgYXJyYXlMZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShhcnJheSk7XG4gICAgdmFyIGl0ZW1zTGVuZ3RoLCBpbmRleDtcblxuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoaW5kZXggaW4gYXJyYXkpIHB1c2goaXRlbXMsIGFycmF5W2luZGV4XSk7XG4gICAgfVxuXG4gICAgaW50ZXJuYWxTb3J0KGl0ZW1zLCBnZXRTb3J0Q29tcGFyZShjb21wYXJlZm4pKTtcblxuICAgIGl0ZW1zTGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlbXMpO1xuICAgIGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChpbmRleCA8IGl0ZW1zTGVuZ3RoKSBhcnJheVtpbmRleF0gPSBpdGVtc1tpbmRleCsrXTtcbiAgICB3aGlsZSAoaW5kZXggPCBhcnJheUxlbmd0aCkgZGVsZXRlUHJvcGVydHlPclRocm93KGFycmF5LCBpbmRleCsrKTtcblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zb3J0Jyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ3NvcnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgbWV0aG9kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9zb3J0Jyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNvcnQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnNvcnQpID8gbWV0aG9kIDogb3duO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnZhciBnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbi1wcm90b3R5cGUtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCgnQXJyYXknLCAndmFsdWVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBtZXRob2QgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC52YWx1ZXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGlzUHJvdG90eXBlT2YoQXJyYXlQcm90b3R5cGUsIGl0KSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnZhbHVlcylcbiAgICB8fCBoYXNPd24oRE9NSXRlcmFibGVzLCBjbGFzc29mKGl0KSkgPyBtZXRob2QgOiBvd247XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi8uLi9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL3N5bWJvbC9pdGVyYXRvclwiKTsiLCAiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nJyk7XG52YXIgZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4tcHJvdG90eXBlLW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW5Qcm90b3R5cGVNZXRob2QoJ0FycmF5JywgJ2VudHJpZXMnKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIG1ldGhvZCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5lbnRyaWVzO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpc1Byb3RvdHlwZU9mKEFycmF5UHJvdG90eXBlLCBpdCkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5lbnRyaWVzKVxuICAgIHx8IGhhc093bihET01JdGVyYWJsZXMsIGNsYXNzb2YoaXQpKSA/IG1ldGhvZCA6IG93bjtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZW50cmllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbmxldCBnZXRSYW5kb21WYWx1ZXM7XG5jb25zdCBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsICJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cblxuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiBieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghdmFsaWRhdGUodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICB9XG5cbiAgcmV0dXJuIHV1aWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ2lmeTsiLCAiY29uc3QgcmFuZG9tVVVJRCA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5yYW5kb21VVUlEICYmIGNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmFuZG9tVVVJRFxufTsiLCAiaW1wb3J0IG5hdGl2ZSBmcm9tICcuL25hdGl2ZS5qcyc7XG5pbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCB7IHVuc2FmZVN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgaWYgKG5hdGl2ZS5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmF0aXZlLnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG4gIHJuZHNbNl0gPSBybmRzWzZdICYgMHgwZiB8IDB4NDA7XG4gIHJuZHNbOF0gPSBybmRzWzhdICYgMHgzZiB8IDB4ODA7IC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuXG4gIGlmIChidWYpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgcmV0dXJuIHVuc2FmZVN0cmluZ2lmeShybmRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjQ7IiwgImltcG9ydCB7IEFzc2lnbmFibGUgfSBmcm9tIFwidmlzLXV0aWwvZXNuZXh0XCI7XG5pbXBvcnQgeyBEYXRhU2V0IH0gZnJvbSBcIi4vZGF0YS1zZXRcIjtcbmltcG9ydCB7IERhdGFTdHJlYW0gfSBmcm9tIFwiLi9kYXRhLXN0cmVhbVwiO1xuXG50eXBlIFZhbHVlT2Y8VD4gPSBUW2tleW9mIFRdO1xuXG4vKiogVmFsaWQgaWQgdHlwZS4gKi9cbmV4cG9ydCB0eXBlIElkID0gbnVtYmVyIHwgc3RyaW5nO1xuLyoqIE51bGxhYmxlIGlkIHR5cGUuICovXG5leHBvcnQgdHlwZSBPcHRJZCA9IHVuZGVmaW5lZCB8IG51bGwgfCBJZDtcbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgYSB2YWx1ZSBjYW4gYmUgdXNlZCBhcyBhbiBpZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBJbnB1dCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCBpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIElkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XG59XG5cbi8qKlxuICogTWFrZSBhbiBvYmplY3QgZGVlcGx5IHBhcnRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBQYXJ0aWFsPFQ+ID0gVCBleHRlbmRzIGFueVtdIHwgRnVuY3Rpb24gfCBOb2RlXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBvYmplY3RcbiAgPyB7IFtrZXkgaW4ga2V5b2YgVF0/OiBEZWVwUGFydGlhbDxUW2tleV0+IH1cbiAgOiBUO1xuXG4vKipcbiAqIEFuIGl0ZW0gdGhhdCBtYXkgKHtAbGluayBJZH0pIG9yIG1heSBub3QgKGFic2VudCwgdW5kZWZpbmVkIG9yIG51bGwpIGhhdmUgYW4gaWQgcHJvcGVydHkuXG4gKlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgUGFydEl0ZW08SWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IFBhcnRpYWw8UmVjb3JkPElkUHJvcCwgT3B0SWQ+Pjtcbi8qKlxuICogQW4gaXRlbSB0aGF0IGhhcyBhIHByb3BlcnR5IGNvbnRhaW5pbmcgYW4gaWQgYW5kIGFsbCBvdGhlciByZXF1aXJlZCBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRnVsbEl0ZW08XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4gPSBJdGVtICYgUmVjb3JkPElkUHJvcCwgSWQ+O1xuLyoqXG4gKiBBbiBpdGVtIHRoYXQgaGFzIGEgcHJvcGVydHkgY29udGFpbmluZyBhbiBpZCBhbmQgb3B0aW9uYWxseSBvdGhlciBwcm9wZXJ0aWVzIG9mIGdpdmVuIGl0ZW0gdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgVXBkYXRlSXRlbTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiA9IEFzc2lnbmFibGU8RnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4gJiBSZWNvcmQ8SWRQcm9wLCBJZD47XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIGl0ZW0gaGFzIGFuIGlkIChpcyBhIHtAbGluayBGdWxsSXRlbX0pLlxuICpcbiAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIGlkUHJvcCAtIE5hbWUgb2YgdGhlIGlkIHByb3BlcnR5LlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoaXMgdmFsdWUgaXMgYSB7QGxpbmsgRnVsbEl0ZW19LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGxJdGVtPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+KGl0ZW06IEl0ZW0sIGlkUHJvcDogSWRQcm9wKTogaXRlbSBpcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIGl0ZW1baWRQcm9wXSAhPSBudWxsO1xufVxuXG4vKiogQWRkIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEV2ZW50UGF5bG9hZCB7XG4gIC8qKiBJZHMgb2YgYWRkZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xufVxuLyoqIFVwZGF0ZSBldmVudCBwYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVFdmVudFBheWxvYWQ8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKiogSWRzIG9mIHVwZGF0ZWQgaXRlbXMuICovXG4gIGl0ZW1zOiBJZFtdO1xuICAvKiogSXRlbXMgYXMgdGhleSB3ZXJlIGJlZm9yZSB0aGlzIHVwZGF0ZS4gKi9cbiAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKipcbiAgICogSXRlbXMgYXMgdGhleSBhcmUgbm93LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBKdXN0IGdldCB0aGUgZGF0YSBmcm9tIHRoZSBkYXRhIHNldCBvciBkYXRhIHZpZXcuXG4gICAqL1xuICBkYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG59XG4vKiogUmVtb3ZlIGV2ZW50IHBheWxvYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbW92ZUV2ZW50UGF5bG9hZDxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIC8qKiBJZHMgb2YgcmVtb3ZlZCBpdGVtcy4gKi9cbiAgaXRlbXM6IElkW107XG4gIC8qKiBJdGVtcyBhcyB0aGV5IHdlcmUgYmVmb3JlIHRoZWlyIHJlbW92YWwuICovXG4gIG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbn1cblxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyAoZXZlbnQgbmFtZSDihpIgcGF5bG9hZCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRQYXlsb2FkczxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiB7XG4gIGFkZDogQWRkRXZlbnRQYXlsb2FkO1xuICB1cGRhdGU6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xuICByZW1vdmU6IFJlbW92ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+O1xufVxuLyoqXG4gKiBNYXAgb2YgZXZlbnQgcGF5bG9hZCB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBwYXlsb2FkKS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFBheWxvYWRzV2l0aEFueTxcbiAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gIElkUHJvcCBleHRlbmRzIHN0cmluZ1xuPiBleHRlbmRzIEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPiB7XG4gIFwiKlwiOiBWYWx1ZU9mPEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPj47XG59XG5cbi8qKlxuICogTWFwIG9mIGV2ZW50IGNhbGxiYWNrIHR5cGVzIChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3M8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmdcbj4ge1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgYWRkKG5hbWU6IFwiYWRkXCIsIHBheWxvYWQ6IEFkZEV2ZW50UGF5bG9hZCB8IG51bGwsIHNlbmRlcklkPzogSWQgfCBudWxsKTogdm9pZDtcbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50ICh7QGxpbmsgRXZlbnROYW1lfSkuXG4gICAqIEBwYXJhbSBwYXlsb2FkIC0gRGF0YSBhYm91dCB0aGUgaXRlbXMgYWZmZWN0ZWQgYnkgdGhpcyBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gQSBzZW5kZXJJZCwgb3B0aW9uYWxseSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gY29kZSB3aGljaCB0cmlnZ2VyZWQgdGhlIGV2ZW50LiBJZiBzZW5kZXJJZCBpcyBub3QgcHJvdmlkZWQsIHRoZSBhcmd1bWVudCB3aWxsIGJlIGBudWxsYC5cbiAgICovXG4gIHVwZGF0ZShcbiAgICBuYW1lOiBcInVwZGF0ZVwiLFxuICAgIHBheWxvYWQ6IFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+IHwgbnVsbCxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKHtAbGluayBFdmVudE5hbWV9KS5cbiAgICogQHBhcmFtIHBheWxvYWQgLSBEYXRhIGFib3V0IHRoZSBpdGVtcyBhZmZlY3RlZCBieSB0aGlzIGV2ZW50LlxuICAgKiBAcGFyYW0gc2VuZGVySWQgLSBBIHNlbmRlcklkLCBvcHRpb25hbGx5IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdoaWNoIHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIHNlbmRlcklkIGlzIG5vdCBwcm92aWRlZCwgdGhlIGFyZ3VtZW50IHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgcmVtb3ZlKFxuICAgIG5hbWU6IFwicmVtb3ZlXCIsXG4gICAgcGF5bG9hZDogUmVtb3ZlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4gfCBudWxsLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG59XG4vKipcbiAqIE1hcCBvZiBldmVudCBjYWxsYmFjayB0eXBlcyBpbmNsdWRpbmcgYW55IGV2ZW50IChldmVudCBuYW1lIOKGkiBjYWxsYmFjaykuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja3NXaXRoQW55PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGV4dGVuZHMgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCAoe0BsaW5rIEV2ZW50TmFtZX0pLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIERhdGEgYWJvdXQgdGhlIGl0ZW1zIGFmZmVjdGVkIGJ5IHRoaXMgZXZlbnQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIEEgc2VuZGVySWQsIG9wdGlvbmFsbHkgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2hpY2ggdHJpZ2dlcmVkIHRoZSBldmVudC4gSWYgc2VuZGVySWQgaXMgbm90IHByb3ZpZGVkLCB0aGUgYXJndW1lbnQgd2lsbCBiZSBgbnVsbGAuXG4gICAqL1xuICBcIipcIjxOIGV4dGVuZHMga2V5b2YgRXZlbnRDYWxsYmFja3M8SXRlbSwgSWRQcm9wPj4oXG4gICAgbmFtZTogTixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bTl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbn1cblxuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcy4gKi9cbmV4cG9ydCB0eXBlIEV2ZW50TmFtZSA9IGtleW9mIEV2ZW50UGF5bG9hZHM8bmV2ZXIsIFwiXCI+O1xuLyoqIEF2YWlsYWJsZSBldmVudCBuYW1lcyBhbmQgJyonIHRvIGxpc3RlbiBmb3IgYWxsLiAqL1xuZXhwb3J0IHR5cGUgRXZlbnROYW1lV2l0aEFueSA9IGtleW9mIEV2ZW50UGF5bG9hZHNXaXRoQW55PG5ldmVyLCBcIlwiPjtcblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBvcmRlciBwYXJhbWV0ZXIuXG4gKiAtIEEgc3RyaW5nIHZhbHVlIGRldGVybWluZXMgd2hpY2ggcHJvcGVydHkgd2lsbCBiZSB1c2VkIGZvciBzb3J0aW5nICh1c2luZyA8IGFuZCA+IG9wZXJhdG9ycyBmb3IgbnVtZXJpYyBjb21wYXJpc29uKS5cbiAqIC0gQSBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdGhlIHNhbWUgd2F5IGFzIGluIEFycmF5LnNvcnQuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YUludGVyZmFjZU9yZGVyPEl0ZW0+ID1cbiAgfCBrZXlvZiBJdGVtXG4gIHwgKChhOiBJdGVtLCBiOiBJdGVtKSA9PiBudW1iZXIpO1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm4gdHlwZSBpbmRlcGVuZGVudCkuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0Jhc2U8SXRlbT4ge1xuICAvKipcbiAgICogQW4gYXJyYXkgd2l0aCBmaWVsZCBuYW1lcywgb3IgYW4gb2JqZWN0IHdpdGggY3VycmVudCBmaWVsZCBuYW1lIGFuZCBuZXcgZmllbGQgbmFtZSB0aGF0IHRoZSBmaWVsZCBpcyByZXR1cm5lZCBhcy4gQnkgZGVmYXVsdCwgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW1zIGFyZSBlbWl0dGVkLiBXaGVuIGZpZWxkcyBpcyBkZWZpbmVkLCBvbmx5IHRoZSBwcm9wZXJ0aWVzIHdob3NlIG5hbWUgaXMgc3BlY2lmaWVkIGluIGZpZWxkcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogV2FybmluZyoqOiBUaGVyZSBpcyBubyBUeXBlU2NyaXB0IHN1cHBvcnQgZm9yIHRoaXMuXG4gICAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuO1xuICAvKiogT3JkZXIgdGhlIGl0ZW1zIGJ5IGEgZmllbGQgbmFtZSBvciBjdXN0b20gc29ydCBmdW5jdGlvbi4gKi9cbiAgb3JkZXI/OiBEYXRhSW50ZXJmYWNlT3JkZXI8SXRlbT47XG59XG5cbi8qKlxuICogRGF0YSBpbnRlcmZhY2UgZ2V0IG9wdGlvbnMgKHJldHVybnMgYSBzaW5nbGUgaXRlbSBvciBhbiBhcnJheSkuXG4gKlxuICogQHJlbWFya3NcbiAqIFdoZXRoZXIgYW4gaXRlbSBvciBhbmQgYXJyYXkgb2YgaXRlbXMgaXMgcmV0dXJuZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdHlwZSBvZiB0aGUgaWQocykgYXJndW1lbnQuXG4gKiBJZiBhbiBhcnJheSBvZiBpZHMgaXMgcmVxdWVzdGVkIGFuIGFycmF5IG9mIGl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBJZiBhIHNpbmdsZSBpZCBpcyByZXF1ZXN0ZWQgYSBzaW5nbGUgaXRlbSAob3IgbnVsbCBpZiB0aGUgaWQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGFueSBpdGVtKSB3aWxsIGJlIHJldHVybmVkLlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzaW5nbGUgaXRlbSAoaWYgaW52b2tlZCB3aXRoIGFuIGlkKSBvciBhbiBhcnJheSBvZiBpdGVtcyAoaWYgaW52b2tlZCB3aXRoIGFuIGFycmF5IG9mIGlkcykuICovXG4gIHJldHVyblR5cGU/OiB1bmRlZmluZWQgfCBcIkFycmF5XCI7XG59XG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBvcHRpb25zIChyZXR1cm5zIGFuIG9iamVjdCkuXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSByZXR1cm5lZCBvYmplY3QgaGFzIGlkcyBhcyBrZXlzIGFuZCBpdGVtcyBhcyB2YWx1ZXMgb2YgY29ycmVzcG9uZGluZyBpZHMuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gIGV4dGVuZHMgRGF0YUludGVyZmFjZUdldE9wdGlvbnNCYXNlPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIHdpbGwgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG1hcCAoaWQg4oaSIGl0ZW0pLiAqL1xuICByZXR1cm5UeXBlOiBcIk9iamVjdFwiO1xufVxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBnZXQgb3B0aW9ucyAocmV0dXJucyBzaW5nbGUgaXRlbSwgYW4gYXJyYXkgb3Igb2JqZWN0KS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgdHlwZSBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiA9XG4gIHwgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICB8IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+O1xuXG4vKipcbiAqIERhdGEgaW50ZXJmYWNlIGdldCBpZHMgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBmb3IgZWFjaCBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gSXRlbSAtIEl0ZW0gdHlwZSB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW4gaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zPEl0ZW0+IHtcbiAgLyoqIEFuIGFycmF5IHdpdGggZmllbGQgbmFtZXMsIG9yIGFuIG9iamVjdCB3aXRoIGN1cnJlbnQgZmllbGQgbmFtZSBhbmQgbmV3IGZpZWxkIG5hbWUgdGhhdCB0aGUgZmllbGQgaXMgcmV0dXJuZWQgYXMuIEJ5IGRlZmF1bHQsIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtcyBhcmUgZW1pdHRlZC4gV2hlbiBmaWVsZHMgaXMgZGVmaW5lZCwgb25seSB0aGUgcHJvcGVydGllcyB3aG9zZSBuYW1lIGlzIHNwZWNpZmllZCBpbiBmaWVsZHMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgaXRlbXMuICovXG4gIGZpZWxkcz86IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIEl0ZW1zIGNhbiBiZSBmaWx0ZXJlZCBvbiBzcGVjaWZpYyBwcm9wZXJ0aWVzIGJ5IHByb3ZpZGluZyBhIGZpbHRlciBmdW5jdGlvbi4gQSBmaWx0ZXIgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlIGl0ZW1zIGluIHRoZSBEYXRhU2V0LCBhbmQgaXMgY2FsbGVkIHdpdGggdGhlIGl0ZW0gYXMgcGFyYW1ldGVyLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLiBBbGwgaXRlbXMgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZW1pdHRlZC4gKi9cbiAgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW47XG4gIC8qKiBPcmRlciB0aGUgaXRlbXMgYnkgYSBmaWVsZCBuYW1lIG9yIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLiAqL1xuICBvcmRlcj86IERhdGFJbnRlcmZhY2VPcmRlcjxJdGVtPjtcbn1cblxuLyoqXG4gKiBEYXRhIGludGVyZmFjZSBtYXAgb3ByaW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIE9yaWdpbmFsIC0gVGhlIG9yaWdpbmFsIGl0ZW0gdHlwZSBpbiB0aGUgZGF0YS5cbiAqIEB0eXBlUGFyYW0gTWFwcGVkIC0gVGhlIHR5cGUgYWZ0ZXIgbWFwcGluZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxPcmlnaW5hbCwgTWFwcGVkPiB7XG4gIC8qKiBBbiBhcnJheSB3aXRoIGZpZWxkIG5hbWVzLCBvciBhbiBvYmplY3Qgd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUgYW5kIG5ldyBmaWVsZCBuYW1lIHRoYXQgdGhlIGZpZWxkIGlzIHJldHVybmVkIGFzLiBCeSBkZWZhdWx0LCBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbXMgYXJlIGVtaXR0ZWQuIFdoZW4gZmllbGRzIGlzIGRlZmluZWQsIG9ubHkgdGhlIHByb3BlcnRpZXMgd2hvc2UgbmFtZSBpcyBzcGVjaWZpZWQgaW4gZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIGl0ZW1zLiAqL1xuICBmaWVsZHM/OiBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJdGVtcyBjYW4gYmUgZmlsdGVyZWQgb24gc3BlY2lmaWMgcHJvcGVydGllcyBieSBwcm92aWRpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uIEEgZmlsdGVyIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9mIHRoZSBpdGVtcyBpbiB0aGUgRGF0YVNldCwgYW5kIGlzIGNhbGxlZCB3aXRoIHRoZSBpdGVtIGFzIHBhcmFtZXRlci4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi4gQWxsIGl0ZW1zIGZvciB3aGljaCB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aWxsIGJlIGVtaXR0ZWQuICovXG4gIGZpbHRlcj86IChpdGVtOiBPcmlnaW5hbCkgPT4gYm9vbGVhbjtcbiAgLyoqIE9yZGVyIHRoZSBpdGVtcyBieSBhIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uICovXG4gIG9yZGVyPzogRGF0YUludGVyZmFjZU9yZGVyPE1hcHBlZD47XG59XG5cbi8qKlxuICogQ29tbW9uIGludGVyZmFjZSBmb3IgZGF0YSBzZXRzIGFuZCBkYXRhIHZpZXcuXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZCAobWlzc2luZyBpZHMgd2lsbCBiZSBnZW5lcmF0ZWQgdXBvbiBpbnNlcnRpb24pLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBvbiB0aGUgSXRlbSB0eXBlIHRoYXQgY29udGFpbnMgdGhlIGlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnRlcmZhY2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4ge1xuICAvKiogVGhlIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgbGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBrZXkgb2YgaWQgcHJvcGVydHkuICovXG4gIGlkUHJvcDogSWRQcm9wO1xuXG4gIC8qKlxuICAgKiBBZGQgYSB1bml2ZXJzYWwgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgKmAgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYW55IG9mIHRoZSBldmVudHMgYGFkZGAsIGB1cGRhdGVgLCBhbmQgYHJlbW92ZWAgb2NjdXJzLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcIipcIiwgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYGFkZGAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgYWRkYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIGFkZGVkLCBvciB3aGVuIGFuIGl0ZW0gaXMgdXBkYXRlZCB3aGlsZSBub3QgeWV0IGV4aXN0aW5nLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIG9uKGV2ZW50OiBcImFkZFwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl0pOiB2b2lkO1xuICAvKipcbiAgICogQWRkIGEgYHJlbW92ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgcmVtb3ZlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBpdGVtIG9yIGEgc2V0IG9mIGl0ZW1zIGlzIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGQgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIFRoZSBgdXBkYXRlYCBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhbiBleGlzdGluZyBpdGVtIG9yIGEgc2V0IG9mIGV4aXN0aW5nIGl0ZW1zIGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHVuaXZlcnNhbCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiKlwiLCBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdKTogdm9pZDtcbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBgYWRkYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoZXZlbnQ6IFwiYWRkXCIsIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBgcmVtb3ZlYCBldmVudCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqL1xuICBvZmYoXG4gICAgZXZlbnQ6IFwicmVtb3ZlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wicmVtb3ZlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gYHVwZGF0ZWAgZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgb2ZmKFxuICAgIGV2ZW50OiBcInVwZGF0ZVwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcInVwZGF0ZVwiXVxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zLlxuICAgKi9cbiAgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgY29udGFpbmluZyByZXF1ZXN0ZWQgaXRlbXMuXG4gICAqL1xuICBnZXQob3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPik6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqXG4gICAqIEdldCBhbGwgdGhlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBhcmUgbm8gaXRlbXMpLlxuICAgKi9cbiAgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnRhaW5pbmcgcmVxdWVzdGVkIGl0ZW1zIG9yIGlmIHJlcXVlc3RlZCBhbiBvYmplY3QgbWFwIG9mIGl0ZW1zIChtYXkgYmUgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGFyZSBubyBpdGVtcykuXG4gICAqL1xuICBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBvciBudWxsIGlmIHRoZSBpZCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGl0ZW0uXG4gICAqL1xuICBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIG9yIG51bGwgaWYgdGhlIGlkIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgaXRlbS5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqXG4gICAqIEdldCBvbmUgaXRlbS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSBpdGVtLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgb25lIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIGlmIGZvdW5kIG9yIG51bGwgb3RoZXJ3aXNlLiBJZiByZXF1ZXN0ZWQgYW4gb2JqZWN0IG1hcCB3aXRoIDAgdG8gMSBpdGVtcy5cbiAgICovXG4gIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IG11bHRpcGxlIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChpZHM6IElkW10pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICovXG4gIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gb2JqZWN0IG1hcCBvZiBpdGVtcyAobWF5IGJlIGFuIGVtcHR5IG9iamVjdCBpZiBubyBpdGVtIHdhcyBmb3VuZCkuXG4gICAqL1xuICBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKlxuICAgKiBHZXQgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBBbiBhcnJheSBvZiByZXF1ZXN0ZWQgaWRzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZm91bmQgaXRlbXMgKGlkcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBpdGVtIGFyZSBvbWl0dGVkKS5cbiAgICogSWYgcmVxdWVzdGVkIGFuIG9iamVjdCBtYXAgb2YgaXRlbXMgKG1heSBiZSBhbiBlbXB0eSBvYmplY3QgaWYgbm8gaXRlbSB3YXMgZm91bmQpLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKipcbiAgICogR2V0IGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gaWRzIC0gSWQgb3IgaWRzIHRvIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIGl0ZW1zIChmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSBpZHMgKHNpbmdsZSBvciBhcnJheSkgYW5kIHRoZSBvcHRpb25zLlxuICAgKi9cbiAgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIERhdGFTZXQgdG8gd2hpY2ggdGhlIGluc3RhbmNlIGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSBpcyBjb25uZWN0ZWQuXG4gICAqIEluIGNhc2UgdGhlcmUgaXMgYSBjaGFpbiBvZiBtdWx0aXBsZSBEYXRhVmlld3MsIHRoZSByb290IERhdGFTZXQgb2YgdGhpcyBjaGFpbiBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIGRhdGEgc2V0IHRoYXQgYWN0dWFsbHkgY29udGFpbnMgdGhlIGRhdGEuXG4gICAqL1xuICBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPjtcblxuICAvKipcbiAgICogR2V0IGlkcyBvZiBpdGVtcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiByZXR1cm5lZCBpZHMgdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgcmVxdWVzdGVkIGlkcy5cbiAgICovXG4gIGdldElkcyhvcHRpb25zPzogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT4pOiBJZFtdO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTm8gZ3VhcmFudGVlIGlzIGdpdmVuIGFib3V0IHRoZSBvcmRlciBvZiBpdGVyYXRpb24gdW5sZXNzIGFuIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBFeGVjdXRlZCBpbiBzaW1pbGFyIGZhc2hpb24gdG8gQXJyYXkuZm9yRWFjaCBjYWxsYmFjaywgYnV0IGluc3RlYWQgb2YgaXRlbSwgaW5kZXgsIGFycmF5IHJlY2VpdmVzIGl0ZW0sIGlkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICovXG4gIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBNYXAgZWFjaCBpdGVtIGludG8gZGlmZmVyZW50IGl0ZW0gYW5kIHJldHVybiB0aGVtIGFzIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBObyBndWFyYW50ZWUgaXMgZ2l2ZW4gYWJvdXQgdGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBldmVuIGlmIG9yZGVyaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkICh0aGUgaXRlbXMgYXJlIHNvcnRlZCBhZnRlciB0aGUgbWFwcGluZykuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEFycmF5Lm1hcC1saWtlIGNhbGxiYWNrLCBidXQgb25seSB3aXRoIHRoZSBmaXJzdCB0d28gcGFyYW1zLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gc3BlY2lmeSBpdGVyYXRpb24gZGV0YWlscy5cbiAgICogQHJldHVybnMgVGhlIG1hcHBlZCBpdGVtcy5cbiAgICovXG4gIG1hcDxUPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gVCxcbiAgICBvcHRpb25zPzogRGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5cbiAgKTogVFtdO1xuXG4gIC8qKlxuICAgKiBTdHJlYW0uXG4gICAqXG4gICAqIEBwYXJhbSBpZHMgLSBJZHMgb2YgdGhlIGl0ZW1zIHRvIGJlIGluY2x1ZGVkIGluIHRoaXMgc3RyZWFtIChtaXNzaW5nIGFyZSBpZ25vcmVkKSwgYWxsIGlmIG9taXR0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSBkYXRhIHN0cmVhbSBmb3IgdGhpcyBkYXRhIHNldC5cbiAgICovXG4gIHN0cmVhbShpZHM/OiBJdGVyYWJsZTxJZD4pOiBEYXRhU3RyZWFtPEl0ZW0+O1xufVxuIiwgIi8qKiBRdWV1ZSBjb25maWd1cmF0aW9uIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVPcHRpb25zIHtcbiAgLyoqIFRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBCeSBkZWZhdWx0IHRoZXJlIGlzIG5vIGF1dG9tYXRpYyBmbHVzaGluZyAoYG51bGxgKS4gKi9cbiAgZGVsYXk/OiBudWxsIHwgbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBpcyBgSW5maW5pdHlgLiAqL1xuICBtYXg/OiBudW1iZXI7XG59XG4vKipcbiAqIFF1ZXVlIGV4dGVuZGluZyBvcHRpb25zLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIG1ldGhvZCBuYW1lcyB0byBiZSByZXBsYWNlZCBieSBxdWV1ZWQgdmVyc2lvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVFeHRlbmRPcHRpb25zPFQ+IHtcbiAgLyoqIEEgbGlzdCB3aXRoIG1ldGhvZCBuYW1lcyBvZiB0aGUgbWV0aG9kcyBvbiB0aGUgb2JqZWN0IHRvIGJlIHJlcGxhY2VkIHdpdGggcXVldWVkIG9uZXMuICovXG4gIHJlcGxhY2U6IFRbXTtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHRoZSBxdWV1ZSB3aWxsIGJlIGZsdXNoZWQgYXV0b21hdGljYWxseSBhZnRlciBhbiBpbmFjdGl2aXR5IG9mIHRoaXMgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IHZhbHVlIGlzIG51bGwuICovXG4gIGRlbGF5PzogbnVtYmVyO1xuICAvKiogV2hlbiB0aGUgcXVldWUgZXhjZWVkcyB0aGUgZ2l2ZW4gbWF4aW11bSBudW1iZXIgb2YgZW50cmllcywgdGhlIHF1ZXVlIGlzIGZsdXNoZWQgYXV0b21hdGljYWxseS4gRGVmYXVsdCB2YWx1ZSBvZiBtYXggaXMgSW5maW5pdHkuICovXG4gIG1heD86IG51bWJlcjtcbn1cbi8qKlxuICogUXVldWUgY2FsbCBlbnRyeS5cbiAqIC0gQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZC5cbiAqIC0gQW4gb2JqZWN0IHdpdGggZnVuY3Rpb24sIGFyZ3MsIGNvbnRleHQgKGxpa2UgZnVuY3Rpb24uYmluZChjb250ZXh0LCAuLi5hcmdzKSkuXG4gKi9cbnR5cGUgUXVldWVDYWxsRW50cnkgPVxuICB8IEZ1bmN0aW9uXG4gIHwge1xuICAgICAgZm46IEZ1bmN0aW9uO1xuICAgICAgYXJnczogdW5rbm93bltdO1xuICAgIH1cbiAgfCB7XG4gICAgICBmbjogRnVuY3Rpb247XG4gICAgICBhcmdzOiB1bmtub3duW107XG4gICAgICBjb250ZXh0OiB1bmtub3duO1xuICAgIH07XG5cbmludGVyZmFjZSBRdWV1ZUV4dGVuZGVkPE8+IHtcbiAgb2JqZWN0OiBPO1xuICBtZXRob2RzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG9yaWdpbmFsOiB1bmtub3duO1xuICB9W107XG59XG5cbi8qKlxuICogQSBxdWV1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBtZXRob2QgbmFtZXMgdG8gYmUgcmVwbGFjZWQgYnkgcXVldWVkIHZlcnNpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVldWU8VCA9IG5ldmVyPiB7XG4gIC8qKiBEZWxheSBpbiBtaWxsaXNlY29uZHMuIElmIGRlZmluZWQgdGhlIHF1ZXVlIHdpbGwgYmUgcGVyaW9kaWNhbGx5IGZsdXNoZWQuICovXG4gIHB1YmxpYyBkZWxheTogbnVsbCB8IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHF1ZXVlIGJlZm9yZSBpdCB3aWxsIGJlIGZsdXNoZWQuICovXG4gIHB1YmxpYyBtYXg6IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9xdWV1ZToge1xuICAgIGZuOiBGdW5jdGlvbjtcbiAgICBhcmdzPzogdW5rbm93bltdO1xuICAgIGNvbnRleHQ/OiB1bmtub3duO1xuICB9W10gPSBbXTtcblxuICBwcml2YXRlIF90aW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9leHRlbmRlZDogbnVsbCB8IFF1ZXVlRXh0ZW5kZWQ8VD4gPSBudWxsO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgUXVldWUuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUXVldWUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zPzogUXVldWVPcHRpb25zKSB7XG4gICAgLy8gb3B0aW9uc1xuICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgIHRoaXMubWF4ID0gSW5maW5pdHk7XG5cbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBRdWV1ZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9ucz86IFF1ZXVlT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmRlbGF5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLmRlbGF5ID0gb3B0aW9ucy5kZWxheTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMubWF4ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xuICAgIH1cblxuICAgIHRoaXMuX2ZsdXNoSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgYW4gb2JqZWN0IHdpdGggcXVldWluZyBmdW5jdGlvbmFsaXR5LlxuICAgKiBUaGUgb2JqZWN0IHdpbGwgYmUgZXh0ZW5kZWQgd2l0aCBhIGZ1bmN0aW9uIGZsdXNoLCBhbmQgdGhlIG1ldGhvZHMgcHJvdmlkZWQgaW4gb3B0aW9ucy5yZXBsYWNlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBxdWV1ZWQgb25lcy5cbiAgICpcbiAgICogQHBhcmFtIG9iamVjdCAtIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXh0ZW5kPE8gZXh0ZW5kcyB7IGZsdXNoPzogKCkgPT4gdm9pZCB9LCBLIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IE8sXG4gICAgb3B0aW9uczogUXVldWVFeHRlbmRPcHRpb25zPEs+XG4gICk6IFF1ZXVlPE8+IHtcbiAgICBjb25zdCBxdWV1ZSA9IG5ldyBRdWV1ZTxPPihvcHRpb25zKTtcblxuICAgIGlmIChvYmplY3QuZmx1c2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFyZ2V0IG9iamVjdCBhbHJlYWR5IGhhcyBhIHByb3BlcnR5IGZsdXNoXCIpO1xuICAgIH1cbiAgICBvYmplY3QuZmx1c2ggPSAoKTogdm9pZCA9PiB7XG4gICAgICBxdWV1ZS5mbHVzaCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBtZXRob2RzOiBRdWV1ZUV4dGVuZGVkPE8+W1wibWV0aG9kc1wiXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJmbHVzaFwiLFxuICAgICAgICBvcmlnaW5hbDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXBsYWNlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMucmVwbGFjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBuYW1lID0gb3B0aW9ucy5yZXBsYWNlW2ldO1xuICAgICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBvcmlnaW5hbDogKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPilbbmFtZV0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICBxdWV1ZS5yZXBsYWNlKG9iamVjdCBhcyB1bmtub3duIGFzIFJlY29yZDxLLCAoKSA9PiB2b2lkPiwgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVldWUuX2V4dGVuZGVkID0ge1xuICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICBtZXRob2RzOiBtZXRob2RzLFxuICAgIH07XG5cbiAgICByZXR1cm4gcXVldWU7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSB0aGUgcXVldWUuIFRoZSBxdWV1ZSB3aWxsIGZpcnN0IGZsdXNoIGFsbCBxdWV1ZWQgYWN0aW9ucywgYW5kIGluIGNhc2UgaXQgaGFzIGV4dGVuZGVkIGFuIG9iamVjdCwgd2lsbCByZXN0b3JlIHRoZSBvcmlnaW5hbCBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsdXNoKCk7XG5cbiAgICBpZiAodGhpcy5fZXh0ZW5kZWQpIHtcbiAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuX2V4dGVuZGVkLm9iamVjdDtcbiAgICAgIGNvbnN0IG1ldGhvZHMgPSB0aGlzLl9leHRlbmRlZC5tZXRob2RzO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IG1ldGhvZHNbaV07XG4gICAgICAgIGlmIChtZXRob2Qub3JpZ2luYWwpIHtcbiAgICAgICAgICAvLyBAVE9ETzogYmV0dGVyIHNvbHV0aW9uP1xuICAgICAgICAgIChvYmplY3QgYXMgYW55KVttZXRob2QubmFtZV0gPSBtZXRob2Qub3JpZ2luYWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQFRPRE86IGJldHRlciBzb2x1dGlvbj9cbiAgICAgICAgICBkZWxldGUgKG9iamVjdCBhcyBhbnkpW21ldGhvZC5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fZXh0ZW5kZWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgbWV0aG9kIG9uIGFuIG9iamVjdCB3aXRoIGEgcXVldWVkIHZlcnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgLSBPYmplY3QgaGF2aW5nIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSBtZXRob2QgLSBUaGUgbWV0aG9kIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcmVwbGFjZTxNIGV4dGVuZHMgc3RyaW5nPihcbiAgICBvYmplY3Q6IFJlY29yZDxNLCAoKSA9PiB2b2lkPixcbiAgICBtZXRob2Q6IE1cbiAgKTogdm9pZCB7XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzIC0tIEZ1bmN0aW9uIHRoaXMgaXMgbmVjZXNzYXJ5IGluIHRoZSBmdW5jdGlvbiBiZWxsb3csIHNvIGNsYXNzIHRoaXMgaGFzIHRvIGJlIHNhdmVkIGludG8gYSB2YXJpYWJsZSBoZXJlLiAqL1xuICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICBjb25zdCBvcmlnaW5hbCA9IG9iamVjdFttZXRob2RdO1xuICAgIGlmICghb3JpZ2luYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBcIiArIG1ldGhvZCArIFwiIHVuZGVmaW5lZFwiKTtcbiAgICB9XG5cbiAgICBvYmplY3RbbWV0aG9kXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICAgIC8vIGFkZCB0aGlzIGNhbGwgdG8gdGhlIHF1ZXVlXG4gICAgICBtZS5xdWV1ZSh7XG4gICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgIGZuOiBvcmlnaW5hbCxcbiAgICAgICAgY29udGV4dDogdGhpcyxcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUXVldWUgYSBjYWxsLlxuICAgKlxuICAgKiBAcGFyYW0gZW50cnkgLSBUaGUgZnVuY3Rpb24gb3IgZW50cnkgdG8gYmUgcXVldWVkLlxuICAgKi9cbiAgcHVibGljIHF1ZXVlKGVudHJ5OiBRdWV1ZUNhbGxFbnRyeSk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7IGZuOiBlbnRyeSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWUucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmx1c2hJZk5lZWRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHF1ZXVlIG5lZWRzIHRvIGJlIGZsdXNoZWQuXG4gICAqL1xuICBwcml2YXRlIF9mbHVzaElmTmVlZGVkKCk6IHZvaWQge1xuICAgIC8vIGZsdXNoIHdoZW4gdGhlIG1heGltdW0gaXMgZXhjZWVkZWQuXG4gICAgaWYgKHRoaXMuX3F1ZXVlLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICB0aGlzLmZsdXNoKCk7XG4gICAgfVxuXG4gICAgLy8gZmx1c2ggYWZ0ZXIgYSBwZXJpb2Qgb2YgaW5hY3Rpdml0eSB3aGVuIGEgZGVsYXkgaXMgY29uZmlndXJlZFxuICAgIGlmICh0aGlzLl90aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHR5cGVvZiB0aGlzLmRlbGF5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH0sIHRoaXMuZGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCBhbGwgcXVldWVkIGNhbGxzXG4gICAqL1xuICBwdWJsaWMgZmx1c2goKTogdm9pZCB7XG4gICAgdGhpcy5fcXVldWUuc3BsaWNlKDApLmZvckVhY2goKGVudHJ5KTogdm9pZCA9PiB7XG4gICAgICBlbnRyeS5mbi5hcHBseShlbnRyeS5jb250ZXh0IHx8IGVudHJ5LmZuLCBlbnRyeS5hcmdzIHx8IFtdKTtcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIERhdGFJbnRlcmZhY2UsXG4gIEV2ZW50Q2FsbGJhY2tzV2l0aEFueSxcbiAgRXZlbnROYW1lLFxuICBFdmVudE5hbWVXaXRoQW55LFxuICBFdmVudFBheWxvYWRzLFxuICBJZCxcbiAgUGFydEl0ZW0sXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbnR5cGUgRXZlbnRTdWJzY3JpYmVyczxJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPiwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW05hbWUgaW4ga2V5b2YgRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5dOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG59O1xuXG4vKipcbiAqIHtAbGluayBEYXRhU2V0fSBjb2RlIHRoYXQgY2FuIGJlIHJldXNlZCBpbiB7QGxpbmsgRGF0YVZpZXd9IG9yIG90aGVyIHNpbWlsYXIgaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBEYXRhSW50ZXJmYWNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERhdGFTZXRQYXJ0PFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nXG4+IGltcGxlbWVudHMgUGljazxEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4sIFwib25cIiB8IFwib2ZmXCI+XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmliZXJzOiB7XG4gICAgW05hbWUgaW4gRXZlbnROYW1lV2l0aEFueV06IEV2ZW50U3Vic2NyaWJlcnM8SXRlbSwgSWRQcm9wPltOYW1lXVtdO1xuICB9ID0ge1xuICAgIFwiKlwiOiBbXSxcbiAgICBhZGQ6IFtdLFxuICAgIHJlbW92ZTogW10sXG4gICAgdXBkYXRlOiBbXSxcbiAgfTtcblxuICBwcm90ZWN0ZWQgX3RyaWdnZXIoXG4gICAgZXZlbnQ6IFwiYWRkXCIsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W1wiYWRkXCJdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQ7XG4gIHByb3RlY3RlZCBfdHJpZ2dlcihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBwYXlsb2FkOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZDtcbiAgcHJvdGVjdGVkIF90cmlnZ2VyKFxuICAgIGV2ZW50OiBcInJlbW92ZVwiLFxuICAgIHBheWxvYWQ6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltcInJlbW92ZVwiXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiB2b2lkO1xuICAvKipcbiAgICogVHJpZ2dlciBhbiBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gcGF5bG9hZCAtIEV2ZW50IHBheWxvYWQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIElkIG9mIHRoZSBzZW5kZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3RyaWdnZXI8TmFtZSBleHRlbmRzIEV2ZW50TmFtZT4oXG4gICAgZXZlbnQ6IE5hbWUsXG4gICAgcGF5bG9hZDogRXZlbnRQYXlsb2FkczxJdGVtLCBJZFByb3A+W05hbWVdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICgoZXZlbnQgYXMgc3RyaW5nKSA9PT0gXCIqXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB0cmlnZ2VyIGV2ZW50ICpcIik7XG4gICAgfVxuXG4gICAgWy4uLnRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XSwgLi4udGhpcy5fc3Vic2NyaWJlcnNbXCIqXCJdXS5mb3JFYWNoKFxuICAgICAgKHN1YnNjcmliZXIpOiB2b2lkID0+IHtcbiAgICAgICAgc3Vic2NyaWJlcihldmVudCwgcGF5bG9hZCwgc2VuZGVySWQgIT0gbnVsbCA/IHNlbmRlcklkIDogbnVsbCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb24oXG4gICAgZXZlbnQ6IFwiKlwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcIipcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJhZGRcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJhZGRcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvbihcbiAgICBldmVudDogXCJ1cGRhdGVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl1cbiAgKTogdm9pZDtcbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBhbiBldmVudCwgYWRkIGFuIGV2ZW50IGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcmVtYXJrcyBOb24tZnVuY3Rpb24gY2FsbGJhY2tzIGFyZSBpZ25vcmVkLlxuICAgKiBAcGFyYW0gZXZlbnQgLSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBDYWxsYmFjayBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgb248TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXJzW2V2ZW50XS5wdXNoKGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLy8gQFRPRE86IE1heWJlIHRocm93IGZvciBpbnZhbGlkIGNhbGxiYWNrcz9cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcIipcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCIqXCJdXG4gICk6IHZvaWQ7XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgb2ZmKFxuICAgIGV2ZW50OiBcImFkZFwiLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltcImFkZFwiXVxuICApOiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIG9mZihcbiAgICBldmVudDogXCJyZW1vdmVcIixcbiAgICBjYWxsYmFjazogRXZlbnRDYWxsYmFja3NXaXRoQW55PEl0ZW0sIElkUHJvcD5bXCJyZW1vdmVcIl1cbiAgKTogdm9pZDtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBvZmYoXG4gICAgZXZlbnQ6IFwidXBkYXRlXCIsXG4gICAgY2FsbGJhY2s6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1widXBkYXRlXCJdXG4gICk6IHZvaWQ7XG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIGFuIGV2ZW50LCByZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIuXG4gICAqXG4gICAqIEByZW1hcmtzIElmIHRoZSBzYW1lIGNhbGxiYWNrIHdhcyBzdWJzY3JpYmVkIG1vcmUgdGhhbiBvbmNlICoqYWxsKiogb2NjdXJlbmNlcyB3aWxsIGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSBldmVudCAtIEV2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIENhbGxiYWNrIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyBvZmY8TmFtZSBleHRlbmRzIEV2ZW50TmFtZVdpdGhBbnk+KFxuICAgIGV2ZW50OiBOYW1lLFxuICAgIGNhbGxiYWNrOiBFdmVudENhbGxiYWNrc1dpdGhBbnk8SXRlbSwgSWRQcm9wPltOYW1lXVxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0gPSB0aGlzLl9zdWJzY3JpYmVyc1tldmVudF0uZmlsdGVyKFxuICAgICAgKHN1YnNjcmliZXIpOiBib29sZWFuID0+IHN1YnNjcmliZXIgIT09IGNhbGxiYWNrXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugb24gaW5zdGVhZCAoUFM6IERhdGFWaWV3LnN1YnNjcmliZSA9PT0gRGF0YVZpZXcub24pLlxuICAgKi9cbiAgcHVibGljIHN1YnNjcmliZTogRGF0YVNldFBhcnQ8SXRlbSwgSWRQcm9wPltcIm9uXCJdID0gRGF0YVNldFBhcnQucHJvdG90eXBlLm9uO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9mZiBpbnN0ZWFkIChQUzogRGF0YVZpZXcudW5zdWJzY3JpYmUgPT09IERhdGFWaWV3Lm9mZikuXG4gICAqL1xuICBwdWJsaWMgdW5zdWJzY3JpYmU6IERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5bXCJvZmZcIl0gPVxuICAgIERhdGFTZXRQYXJ0LnByb3RvdHlwZS5vZmY7XG5cbiAgLyogZGV2ZWxibG9jazpzdGFydCAqL1xuICBwdWJsaWMgZ2V0IHRlc3RMZWFrU3Vic2NyaWJlcnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlcnM7XG4gIH1cbiAgLyogZGV2ZWxibG9jazplbmQgKi9cbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgU2V0YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQtb2JqZWN0c1xuY29sbGVjdGlvbignU2V0JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMuc2V0Jyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvcicpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguU2V0O1xuIiwgIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SXRlcmF0b3I7XG4iLCAiaW1wb3J0IHsgSWQgfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuXG4vKipcbiAqIERhdGEgc3RyZWFtXG4gKlxuICogQHJlbWFya3NcbiAqIHtAbGluayBEYXRhU3RyZWFtfSBvZmZlcnMgYW4gYWx3YXlzIHVwIHRvIGRhdGUgc3RyZWFtIG9mIGl0ZW1zIGZyb20gYSB7QGxpbmsgRGF0YVNldH0gb3Ige0BsaW5rIERhdGFWaWV3fS5cbiAqIFRoYXQgbWVhbnMgdGhhdCB0aGUgc3RyZWFtIGlzIGV2YWx1YXRlZCBhdCB0aGUgdGltZSBvZiBpdGVyYXRpb24sIGNvbnZlcnNpb24gdG8gYW5vdGhlciBkYXRhIHR5cGUgb3Igd2hlbiB7QGxpbmsgY2FjaGV9IGlzIGNhbGxlZCwgbm90IHdoZW4gdGhlIHtAbGluayBEYXRhU3RyZWFtfSB3YXMgY3JlYXRlZC5cbiAqIE11bHRpcGxlIGludm9jYXRpb25zIG9mIGZvciBleGFtcGxlIHtAbGluayB0b0l0ZW1BcnJheX0gbWF5IHlpZWxkIGRpZmZlcmVudCByZXN1bHRzIChpZiB0aGUgZGF0YSBzb3VyY2UgbGlrZSBmb3IgZXhhbXBsZSB7QGxpbmsgRGF0YVNldH0gZ2V0cyBtb2RpZmllZCkuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBUaGUgaXRlbSB0eXBlIHRoaXMgc3RyZWFtIGlzIGdvaW5nIHRvIHdvcmsgd2l0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFTdHJlYW08SXRlbT4gaW1wbGVtZW50cyBJdGVyYWJsZTxbSWQsIEl0ZW1dPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhaXJzOiBJdGVyYWJsZTxbSWQsIEl0ZW1dPjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGRhdGEgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gcGFpcnMgLSBUaGUgaWQsIGl0ZW0gcGFpcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFpcnM6IEl0ZXJhYmxlPFtJZCwgSXRlbV0+KSB7XG4gICAgdGhpcy5fcGFpcnMgPSBwYWlycztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2Yga2V5LCB2YWx1ZSBwYWlycyBmb3IgZXZlcnkgZW50cnkgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIEl0ZW1dPiB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gaXRlcmFibGUgb2Yga2V5LCB2YWx1ZSBwYWlycyBmb3IgZXZlcnkgZW50cnkgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIFtpZCwgaXRlbV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVyYWJsZSBvZiBrZXlzIGluIHRoZSBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgKmtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxJZD4ge1xuICAgIGZvciAoY29uc3QgW2lkXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgeWllbGQgaWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBpdGVyYWJsZSBvZiB2YWx1ZXMgaW4gdGhlIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyAqdmFsdWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8SXRlbT4ge1xuICAgIGZvciAoY29uc3QgWywgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHlpZWxkIGl0ZW07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgaWRzIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYXJyYXkgbWF5IGNvbnRhaW4gZHVwbGljaXRpZXMuXG4gICAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIGFsbCBpZHMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0lkQXJyYXkoKTogSWRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9wYWlyc10ubWFwKChwYWlyKTogSWQgPT4gcGFpclswXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFycmF5IG1heSBjb250YWluIGR1cGxpY2l0aWVzLlxuICAgKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCBhbGwgaXRlbXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0l0ZW1BcnJheSgpOiBJdGVtW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcGFpcnNdLm1hcCgocGFpcik6IEl0ZW0gPT4gcGFpclsxXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBlbnRyaWVzIGluIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYXJyYXkgbWF5IGNvbnRhaW4gZHVwbGljaXRpZXMuXG4gICAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIGFsbCBlbnRyaWVzIGZyb20gdGhpcyBzdHJlYW0uXG4gICAqL1xuICBwdWJsaWMgdG9FbnRyeUFycmF5KCk6IFtJZCwgSXRlbV1bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9wYWlyc107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9iamVjdCBtYXAgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGluIHRoaXMgc3RyZWFtIGFjY2Vzc2libGUgYnkgaWRzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJbiBjYXNlIG9mIGR1cGxpY2F0ZSBpZHMgKGNvZXJjZWQgdG8gc3RyaW5nIHNvIGA3ID09ICc3J2ApIHRoZSBsYXN0IGVuY291dGVyZWQgYXBwZWFycyBpbiB0aGUgcmV0dXJuZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgb2JqZWN0IG1hcCBvZiBhbGwgaWQg4oaSIGl0ZW0gcGFpcnMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b09iamVjdE1hcCgpOiBSZWNvcmQ8SWQsIEl0ZW0+IHtcbiAgICBjb25zdCBtYXA6IFJlY29yZDxJZCwgSXRlbT4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgbWFwW2lkXSA9IGl0ZW07XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgbWFwIGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBpbiB0aGlzIHN0cmVhbSBhY2Nlc3NpYmxlIGJ5IGlkcy5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIG1hcCBvZiBhbGwgaWQg4oaSIGl0ZW0gcGFpcnMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b01hcCgpOiBNYXA8SWQsIEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLl9wYWlycyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSAodW5pcXVlKSBpZHMgaW4gdGhpcyBzdHJlYW0uXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBzZXQgb2YgYWxsIGlkcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIHRvSWRTZXQoKTogU2V0PElkPiB7XG4gICAgcmV0dXJuIG5ldyBTZXQodGhpcy50b0lkQXJyYXkoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSAodW5pcXVlKSBpdGVtcyBpbiB0aGlzIHN0cmVhbS5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHNldCBvZiBhbGwgaXRlbXMgZnJvbSB0aGlzIHN0cmVhbS5cbiAgICovXG4gIHB1YmxpYyB0b0l0ZW1TZXQoKTogU2V0PEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IFNldCh0aGlzLnRvSXRlbUFycmF5KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhY2hlIHRoZSBpdGVtcyBmcm9tIHRoaXMgc3RyZWFtLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIG1ldGhvZCBhbGxvd3MgZm9yIGl0ZW1zIHRvIGJlIGZldGNoZWQgaW1tZWRpYXRlbGx5IGFuZCB1c2VkIChwb3NzaWJseSBtdWx0aXBsZSB0aW1lcykgbGF0ZXIuXG4gICAqIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gb3B0aW1pemUgcGVyZm9ybWFuY2UgYXMge0BsaW5rIERhdGFTdHJlYW19IHdvdWxkIG90aGVyd2lzZSByZWV2YWx1YXRlIGV2ZXJ5dGhpbmcgdXBvbiBlYWNoIGl0ZXJhdGlvbi5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKiBgYGBqYXZhc2NyaXB0XG4gICAqIGNvbnN0IGRzID0gbmV3IERhdGFTZXQoW+KApl0pXG4gICAqXG4gICAqIGNvbnN0IGNhY2hlZFN0cmVhbSA9IGRzLnN0cmVhbSgpXG4gICAqICAgLmZpbHRlcijigKYpXG4gICAqICAgLnNvcnQo4oCmKVxuICAgKiAgIC5tYXAo4oCmKVxuICAgKiAgIC5jYWNoZWQo4oCmKSAvLyBEYXRhIGFyZSBmZXRjaGVkLCBwcm9jZXNzZWQgYW5kIGNhY2hlZCBoZXJlLlxuICAgKlxuICAgKiBkcy5jbGVhcigpXG4gICAqIGNoYWNoZWRTdHJlYW0gLy8gU3RpbGwgaGFzIGFsbCB0aGUgaXRlbXMuXG4gICAqIGBgYFxuICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgRGF0YVN0cmVhbX0gd2l0aCBjYWNoZWQgaXRlbXMgKGRldGFjaGVkIGZyb20gdGhlIG9yaWdpbmFsIHtAbGluayBEYXRhU2V0fSkuXG4gICAqL1xuICBwdWJsaWMgY2FjaGUoKTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtKFsuLi50aGlzLl9wYWlyc10pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGlzdGluY3QgdmFsdWVzIG9mIGdpdmVuIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBwaWNrcyBhbmQgcG9zc2libHkgY29udmVydHMgdGhlIHByb3BlcnR5LlxuICAgKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgZGlzdGluY3QgdmFsdWUuXG4gICAqIEByZXR1cm5zIEEgc2V0IG9mIGFsbCBkaXN0aW5jdCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIGRpc3RpbmN0PFQ+KGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBUKTogU2V0PFQ+IHtcbiAgICBjb25zdCBzZXQgPSBuZXcgU2V0PFQ+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgdGhpcy5fcGFpcnMpIHtcbiAgICAgIHNldC5hZGQoY2FsbGJhY2soaXRlbSwgaWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMgb2YgdGhlIHN0cmVhbS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgZGVjaWRlcyB3aGV0aGVyIGFuIGl0ZW0gd2lsbCBiZSBpbmNsdWRlZC5cbiAgICogQHJldHVybnMgQSBuZXcgZGF0YSBzdHJlYW0gd2l0aCB0aGUgZmlsdGVyZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgZmlsdGVyKGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBib29sZWFuKTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgY29uc3QgcGFpcnMgPSB0aGlzLl9wYWlycztcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW08SXRlbT4oe1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0lkLCBJdGVtXT4ge1xuICAgICAgICBmb3IgKGNvbnN0IFtpZCwgaXRlbV0gb2YgcGFpcnMpIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2soaXRlbSwgaWQpKSB7XG4gICAgICAgICAgICB5aWVsZCBbaWQsIGl0ZW1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggaXRlbSBvZiB0aGUgc3RyZWFtLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGludm9rZWQgZm9yIGVhY2ggaXRlbS5cbiAgICovXG4gIHB1YmxpYyBmb3JFYWNoKGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHRoaXMuX3BhaXJzKSB7XG4gICAgICBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcCB0aGUgaXRlbXMgaW50byBhIGRpZmZlcmVudCB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSBjb252ZXJzaW9uLlxuICAgKiBAdHlwZVBhcmFtIE1hcHBlZCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtIGFmdGVyIG1hcHBpbmcuXG4gICAqIEByZXR1cm5zIEEgbmV3IGRhdGEgc3RyZWFtIHdpdGggdGhlIG1hcHBlZCBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBtYXA8TWFwcGVkPihcbiAgICBjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gTWFwcGVkXG4gICk6IERhdGFTdHJlYW08TWFwcGVkPiB7XG4gICAgY29uc3QgcGFpcnMgPSB0aGlzLl9wYWlycztcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW08TWFwcGVkPih7XG4gICAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWQsIE1hcHBlZF0+IHtcbiAgICAgICAgZm9yIChjb25zdCBbaWQsIGl0ZW1dIG9mIHBhaXJzKSB7XG4gICAgICAgICAgeWllbGQgW2lkLCBjYWxsYmFjayhpdGVtLCBpZCldO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaXRlbSB3aXRoIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGdpdmVuIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBwaWNrcyBhbmQgcG9zc2libHkgY29udmVydHMgdGhlIHByb3BlcnR5LlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSB3aXRoIHRoZSBtYXhpbXVtIGlmIGZvdW5kIG90aGVyd2lzZSBudWxsLlxuICAgKi9cbiAgcHVibGljIG1heChjYWxsYmFjazogKGl0ZW06IEl0ZW0sIGlkOiBJZCkgPT4gbnVtYmVyKTogSXRlbSB8IG51bGwge1xuICAgIGNvbnN0IGl0ZXIgPSB0aGlzLl9wYWlyc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgbGV0IGN1cnIgPSBpdGVyLm5leHQoKTtcbiAgICBpZiAoY3Vyci5kb25lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgbWF4SXRlbTogSXRlbSA9IGN1cnIudmFsdWVbMV07XG4gICAgbGV0IG1heFZhbHVlOiBudW1iZXIgPSBjYWxsYmFjayhjdXJyLnZhbHVlWzFdLCBjdXJyLnZhbHVlWzBdKTtcbiAgICB3aGlsZSAoIShjdXJyID0gaXRlci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIGNvbnN0IFtpZCwgaXRlbV0gPSBjdXJyLnZhbHVlO1xuICAgICAgY29uc3QgdmFsdWUgPSBjYWxsYmFjayhpdGVtLCBpZCk7XG4gICAgICBpZiAodmFsdWUgPiBtYXhWYWx1ZSkge1xuICAgICAgICBtYXhWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBtYXhJdGVtID0gaXRlbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF4SXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGl0ZW0gd2l0aCB0aGUgbWluaW11bSB2YWx1ZSBvZiBnaXZlbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRoYXQgcGlja3MgYW5kIHBvc3NpYmx5IGNvbnZlcnRzIHRoZSBwcm9wZXJ0eS5cbiAgICogQHJldHVybnMgVGhlIGl0ZW0gd2l0aCB0aGUgbWluaW11bSBpZiBmb3VuZCBvdGhlcndpc2UgbnVsbC5cbiAgICovXG4gIHB1YmxpYyBtaW4oY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IG51bWJlcik6IEl0ZW0gfCBudWxsIHtcbiAgICBjb25zdCBpdGVyID0gdGhpcy5fcGFpcnNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIGxldCBjdXJyID0gaXRlci5uZXh0KCk7XG4gICAgaWYgKGN1cnIuZG9uZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG1pbkl0ZW06IEl0ZW0gPSBjdXJyLnZhbHVlWzFdO1xuICAgIGxldCBtaW5WYWx1ZTogbnVtYmVyID0gY2FsbGJhY2soY3Vyci52YWx1ZVsxXSwgY3Vyci52YWx1ZVswXSk7XG4gICAgd2hpbGUgKCEoY3VyciA9IGl0ZXIubmV4dCgpKS5kb25lKSB7XG4gICAgICBjb25zdCBbaWQsIGl0ZW1dID0gY3Vyci52YWx1ZTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgaWYgKHZhbHVlIDwgbWluVmFsdWUpIHtcbiAgICAgICAgbWluVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgbWluSXRlbSA9IGl0ZW07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbkl0ZW07XG4gIH1cblxuICAvKipcbiAgICogUmVkdWNlIHRoZSBpdGVtcyBpbnRvIGEgc2luZ2xlIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSByZWR1Y3Rpb24uXG4gICAqIEBwYXJhbSBhY2N1bXVsYXRvciAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBhY2N1bXVsYXRvci5cbiAgICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGUgcmVkdWNlZCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyByZWR1Y2U8VD4oXG4gICAgY2FsbGJhY2s6IChhY2N1bXVsYXRvcjogVCwgaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBULFxuICAgIGFjY3VtdWxhdG9yOiBUXG4gICk6IFQge1xuICAgIGZvciAoY29uc3QgW2lkLCBpdGVtXSBvZiB0aGlzLl9wYWlycykge1xuICAgICAgYWNjdW11bGF0b3IgPSBjYWxsYmFjayhhY2N1bXVsYXRvciwgaXRlbSwgaWQpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogU29ydCB0aGUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEl0ZW0gY29tcGFyYXRvci5cbiAgICogQHJldHVybnMgQSBuZXcgc3RyZWFtIHdpdGggc29ydGVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHNvcnQoXG4gICAgY2FsbGJhY2s6IChpdGVtQTogSXRlbSwgaXRlbUI6IEl0ZW0sIGlkQTogSWQsIGlkQjogSWQpID0+IG51bWJlclxuICApOiBEYXRhU3RyZWFtPEl0ZW0+IHtcbiAgICByZXR1cm4gbmV3IERhdGFTdHJlYW0oe1xuICAgICAgW1N5bWJvbC5pdGVyYXRvcl06ICgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+ID0+XG4gICAgICAgIFsuLi50aGlzLl9wYWlyc11cbiAgICAgICAgICAuc29ydCgoW2lkQSwgaXRlbUFdLCBbaWRCLCBpdGVtQl0pOiBudW1iZXIgPT5cbiAgICAgICAgICAgIGNhbGxiYWNrKGl0ZW1BLCBpdGVtQiwgaWRBLCBpZEIpXG4gICAgICAgICAgKVxuICAgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCksXG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyB2NCBhcyB1dWlkNCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBwdXJlRGVlcE9iamVjdEFzc2lnbiB9IGZyb20gXCJ2aXMtdXRpbC9lc25leHRcIjtcblxuaW1wb3J0IHtcbiAgRGF0YUludGVyZmFjZSxcbiAgRGF0YUludGVyZmFjZUZvckVhY2hPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXksXG4gIERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0LFxuICBEYXRhSW50ZXJmYWNlTWFwT3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZU9yZGVyLFxuICBEZWVwUGFydGlhbCxcbiAgRXZlbnRQYXlsb2FkcyxcbiAgRnVsbEl0ZW0sXG4gIElkLFxuICBPcHRJZCxcbiAgUGFydEl0ZW0sXG4gIFVwZGF0ZUl0ZW0sXG4gIGlzSWQsXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbmltcG9ydCB7IFF1ZXVlLCBRdWV1ZU9wdGlvbnMgfSBmcm9tIFwiLi9xdWV1ZVwiO1xuaW1wb3J0IHsgRGF0YVNldFBhcnQgfSBmcm9tIFwiLi9kYXRhLXNldC1wYXJ0XCI7XG5pbXBvcnQgeyBEYXRhU3RyZWFtIH0gZnJvbSBcIi4vZGF0YS1zdHJlYW1cIjtcblxuLyoqXG4gKiBJbml0aWFsIERhdGFTZXQgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wIGV4dGVuZHMgc3RyaW5nPiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmllbGQgY29udGFpbmluZyB0aGUgaWQgb2YgdGhlIGl0ZW1zLiBXaGVuIGRhdGEgaXMgZmV0Y2hlZCBmcm9tIGEgc2VydmVyIHdoaWNoIHVzZXMgc29tZSBzcGVjaWZpYyBmaWVsZCB0byBpZGVudGlmeSBpdGVtcywgdGhpcyBmaWVsZCBuYW1lIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIERhdGFTZXQgdXNpbmcgdGhlIG9wdGlvbiBgZmllbGRJZGAuIEZvciBleGFtcGxlIFtDb3VjaERCXShodHRwOi8vY291Y2hkYi5hcGFjaGUub3JnLykgdXNlcyB0aGUgZmllbGQgYCdfaWQnYCB0byBpZGVudGlmeSBkb2N1bWVudHMuXG4gICAqL1xuICBmaWVsZElkPzogSWRQcm9wO1xuICAvKipcbiAgICogUXVldWUgZGF0YSBjaGFuZ2VzICgnYWRkJywgJ3VwZGF0ZScsICdyZW1vdmUnKSBhbmQgZmx1c2ggdGhlbSBhdCBvbmNlLiBUaGUgcXVldWUgY2FuIGJlIGZsdXNoZWQgbWFudWFsbHkgYnkgY2FsbGluZyBgRGF0YVNldC5mbHVzaCgpYCwgb3IgY2FuIGJlIGZsdXNoZWQgYWZ0ZXIgYSBjb25maWd1cmVkIGRlbGF5IG9yIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMuXG4gICAqXG4gICAqIFdoZW4gcXVldWUgaXMgdHJ1ZSwgYSBxdWV1ZSBpcyBjcmVhdGVkIHdpdGggZGVmYXVsdCBvcHRpb25zLiBPcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcHJvdmlkaW5nIGFuIG9iamVjdC5cbiAgICovXG4gIHF1ZXVlPzogUXVldWVPcHRpb25zIHwgZmFsc2U7XG59XG4vKiogRGF0YVNldCBjb25maWd1cmF0aW9uIG9iamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNldE9wdGlvbnMge1xuICAvKipcbiAgICogUXVldWUgY29uZmlndXJhdGlvbiBvYmplY3Qgb3IgZmFsc2UgaWYgbm8gcXVldWUgc2hvdWxkIGJlIHVzZWQuXG4gICAqXG4gICAqIC0gSWYgZmFsc2UgYW5kIHRoZXJlIHdhcyBhIHF1ZXVlIGJlZm9yZSBpdCB3aWxsIGJlIGZsdXNoZWQgYW5kIHRoZW4gcmVtb3ZlZC5cbiAgICogLSBJZiB7QGxpbmsgUXVldWVPcHRpb25zfSB0aGUgZXhpc3RpbmcgcXVldWUgd2lsbCBiZSByZWNvbmZpZ3VyZWQgb3IgYSBuZXcgcXVldWUgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgcXVldWU/OiBRdWV1ZSB8IFF1ZXVlT3B0aW9ucyB8IGZhbHNlO1xufVxuXG4vKipcbiAqIEFkZCBhbiBpZCB0byBnaXZlbiBpdGVtIGlmIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgYWxyZWFkeS5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhlIGl0ZW0gd2lsbCBiZSBtb2RpZmllZC5cbiAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gdGhhdCB3aWxsIGhhdmUgYW4gaWQgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0gaWRQcm9wIC0gVGhlIGtleSBvZiB0aGUgaWQgcHJvcGVydHkuXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqIEByZXR1cm5zIHRydWVcbiAqL1xuZnVuY3Rpb24gZW5zdXJlRnVsbEl0ZW08SXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sIElkUHJvcCBleHRlbmRzIHN0cmluZz4oXG4gIGl0ZW06IEl0ZW0sXG4gIGlkUHJvcDogSWRQcm9wXG4pOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHtcbiAgaWYgKGl0ZW1baWRQcm9wXSA9PSBudWxsKSB7XG4gICAgLy8gZ2VuZXJhdGUgYW4gaWRcbiAgICBpdGVtW2lkUHJvcF0gPSB1dWlkNCgpIGFzIGFueTtcbiAgfVxuXG4gIHJldHVybiBpdGVtIGFzIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG59XG5cbi8qKlxuICogIyBEYXRhU2V0XG4gKlxuICogVmlzLmpzIGNvbWVzIHdpdGggYSBmbGV4aWJsZSBEYXRhU2V0LCB3aGljaCBjYW4gYmUgdXNlZCB0byBob2xkIGFuZFxuICogbWFuaXB1bGF0ZSB1bnN0cnVjdHVyZWQgZGF0YSBhbmQgbGlzdGVuIGZvciBjaGFuZ2VzIGluIHRoZSBkYXRhLiBUaGUgRGF0YVNldFxuICogaXMga2V5L3ZhbHVlIGJhc2VkLiBEYXRhIGl0ZW1zIGNhbiBiZSBhZGRlZCwgdXBkYXRlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZVxuICogRGF0YVNldCwgYW5kIG9uZSBjYW4gc3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gdGhlIERhdGFTZXQuIFRoZSBkYXRhIGluIHRoZVxuICogRGF0YVNldCBjYW4gYmUgZmlsdGVyZWQgYW5kIG9yZGVyZWQuIERhdGEgY2FuIGJlIG5vcm1hbGl6ZWQgd2hlbiBhcHBlbmRpbmcgaXRcbiAqIHRvIHRoZSBEYXRhU2V0IGFzIHdlbGwuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIGEgRGF0YVNldC5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gKiB2YXIgb3B0aW9ucyA9IHt9O1xuICogdmFyIGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQob3B0aW9ucyk7XG4gKlxuICogLy8gYWRkIGl0ZW1zXG4gKiAvLyBub3RlIHRoYXQgdGhlIGRhdGEgaXRlbXMgY2FuIGNvbnRhaW4gZGlmZmVyZW50IHByb3BlcnRpZXMgYW5kIGRhdGEgZm9ybWF0c1xuICogZGF0YS5hZGQoW1xuICogICB7aWQ6IDEsIHRleHQ6ICdpdGVtIDEnLCBkYXRlOiBuZXcgRGF0ZSgyMDEzLCA2LCAyMCksIGdyb3VwOiAxLCBmaXJzdDogdHJ1ZX0sXG4gKiAgIHtpZDogMiwgdGV4dDogJ2l0ZW0gMicsIGRhdGU6ICcyMDEzLTA2LTIzJywgZ3JvdXA6IDJ9LFxuICogICB7aWQ6IDMsIHRleHQ6ICdpdGVtIDMnLCBkYXRlOiAnMjAxMy0wNi0yNScsIGdyb3VwOiAyfSxcbiAqICAge2lkOiA0LCB0ZXh0OiAnaXRlbSA0J31cbiAqIF0pO1xuICpcbiAqIC8vIHN1YnNjcmliZSB0byBhbnkgY2hhbmdlIGluIHRoZSBEYXRhU2V0XG4gKiBkYXRhLm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50LCBwcm9wZXJ0aWVzLCBzZW5kZXJJZCkge1xuICogICBjb25zb2xlLmxvZygnZXZlbnQnLCBldmVudCwgcHJvcGVydGllcyk7XG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGUgYW4gZXhpc3RpbmcgaXRlbVxuICogZGF0YS51cGRhdGUoe2lkOiAyLCBncm91cDogMX0pO1xuICpcbiAqIC8vIHJlbW92ZSBhbiBpdGVtXG4gKiBkYXRhLnJlbW92ZSg0KTtcbiAqXG4gKiAvLyBnZXQgYWxsIGlkc1xuICogdmFyIGlkcyA9IGRhdGEuZ2V0SWRzKCk7XG4gKiBjb25zb2xlLmxvZygnaWRzJywgaWRzKTtcbiAqXG4gKiAvLyBnZXQgYSBzcGVjaWZpYyBpdGVtXG4gKiB2YXIgaXRlbTEgPSBkYXRhLmdldCgxKTtcbiAqIGNvbnNvbGUubG9nKCdpdGVtMScsIGl0ZW0xKTtcbiAqXG4gKiAvLyByZXRyaWV2ZSBhIGZpbHRlcmVkIHN1YnNldCBvZiB0aGUgZGF0YVxuICogdmFyIGl0ZW1zID0gZGF0YS5nZXQoe1xuICogICBmaWx0ZXI6IGZ1bmN0aW9uIChpdGVtKSB7XG4gKiAgICAgcmV0dXJuIGl0ZW0uZ3JvdXAgPT0gMTtcbiAqICAgfVxuICogfSk7XG4gKiBjb25zb2xlLmxvZygnZmlsdGVyZWQgaXRlbXMnLCBpdGVtcyk7XG4gKiBgYGBcbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFTZXQ8XG4gICAgSXRlbSBleHRlbmRzIFBhcnRJdGVtPElkUHJvcD4sXG4gICAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4gID5cbiAgZXh0ZW5kcyBEYXRhU2V0UGFydDxJdGVtLCBJZFByb3A+XG4gIGltcGxlbWVudHMgRGF0YUludGVyZmFjZTxJdGVtLCBJZFByb3A+XG57XG4gIC8qKiBGbHVzaCBhbGwgcXVldWVkIGNhbGxzLiAqL1xuICBwdWJsaWMgZmx1c2g/OiAoKSA9PiB2b2lkO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGxlbmd0aDogbnVtYmVyO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCBpZFByb3AoKTogSWRQcm9wIHtcbiAgICByZXR1cm4gdGhpcy5faWRQcm9wO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGE6IE1hcDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lkUHJvcDogSWRQcm9wO1xuICBwcml2YXRlIF9xdWV1ZTogUXVldWU8dGhpcz4gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBEYXRhU2V0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9ucz86IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+KTtcbiAgLyoqXG4gICAqIEBwYXJhbSBkYXRhIC0gQW4gaW5pdGlhbCBzZXQgb2YgaXRlbXMgZm9yIHRoZSBuZXcgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRGF0YVNldCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IEl0ZW1bXSwgb3B0aW9ucz86IERhdGFTZXRJbml0aWFsT3B0aW9uczxJZFByb3A+KTtcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBEYXRhU2V0LlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIEluaXRpYWwgZGF0YSBvciBvcHRpb25zLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgKHR5cGUgZXJyb3IgaWYgZGF0YSBpcyBhbHNvIG9wdGlvbnMpLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIGRhdGE/OiBJdGVtW10gfCBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPixcbiAgICBvcHRpb25zPzogRGF0YVNldEluaXRpYWxPcHRpb25zPElkUHJvcD5cbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8vIGNvcnJlY3RseSByZWFkIG9wdGlvbmFsIGFyZ3VtZW50c1xuICAgIGlmIChkYXRhICYmICFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBvcHRpb25zID0gZGF0YTtcbiAgICAgIGRhdGEgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLl9kYXRhID0gbmV3IE1hcCgpOyAvLyBtYXAgd2l0aCBkYXRhIGluZGV4ZWQgYnkgaWRcbiAgICB0aGlzLmxlbmd0aCA9IDA7IC8vIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgRGF0YVNldFxuICAgIHRoaXMuX2lkUHJvcCA9IHRoaXMuX29wdGlvbnMuZmllbGRJZCB8fCAoXCJpZFwiIGFzIElkUHJvcCk7IC8vIG5hbWUgb2YgdGhlIGZpZWxkIGNvbnRhaW5pbmcgaWRcblxuICAgIC8vIGFkZCBpbml0aWFsIGRhdGEgd2hlbiBwcm92aWRlZFxuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICB0aGlzLmFkZChkYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG5ldyBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBuZXcgb3B0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM/OiBEYXRhU2V0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMucXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIC8vIGRlbGV0ZSBxdWV1ZSBpZiBsb2FkZWRcbiAgICAgICAgaWYgKHRoaXMuX3F1ZXVlKSB7XG4gICAgICAgICAgdGhpcy5fcXVldWUuZGVzdHJveSgpO1xuICAgICAgICAgIHRoaXMuX3F1ZXVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIHF1ZXVlIGFuZCB1cGRhdGUgaXRzIG9wdGlvbnNcbiAgICAgICAgaWYgKCF0aGlzLl9xdWV1ZSkge1xuICAgICAgICAgIHRoaXMuX3F1ZXVlID0gUXVldWUuZXh0ZW5kKHRoaXMsIHtcbiAgICAgICAgICAgIHJlcGxhY2U6IFtcImFkZFwiLCBcInVwZGF0ZVwiLCBcInJlbW92ZVwiXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnF1ZXVlICYmIHR5cGVvZiBvcHRpb25zLnF1ZXVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgdGhpcy5fcXVldWUuc2V0T3B0aW9ucyhvcHRpb25zLnF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkYXRhIGl0ZW0gb3IgYW4gYXJyYXkgd2l0aCBpdGVtcy5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSBhZGRlZCB0byB0aGUgRGF0YVNldCwgdGhlIERhdGFTZXQgd2lsbCB0cmlnZ2VyIGFuIGV2ZW50IGBhZGRgLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KClcbiAgICpcbiAgICogLy8gYWRkIGl0ZW1zXG4gICAqIGNvbnN0IGlkcyA9IGRhdGEuYWRkKFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyB0ZXh0OiAnaXRlbSB3aXRob3V0IGFuIGlkJyB9XG4gICAqIF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzEsIDIsICc8VVVJRHY0PiddXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSAtIEl0ZW1zIHRvIGJlIGFkZGVkIChpZHMgd2lsbCBiZSBnZW5lcmF0ZWQgaWYgbWlzc2luZykuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgYWRkZWRJZHMgLSBBcnJheSB3aXRoIHRoZSBpZHMgKGdlbmVyYXRlZCBpZiBub3QgcHJlc2VudCkgb2YgdGhlIGFkZGVkIGl0ZW1zLlxuICAgKiBAdGhyb3dzIFdoZW4gYW4gaXRlbSB3aXRoIHRoZSBzYW1lIGlkIGFzIGFueSBvZiB0aGUgYWRkZWQgaXRlbXMgYWxyZWFkeSBleGlzdHMuXG4gICAqL1xuICBwdWJsaWMgYWRkKGRhdGE6IEl0ZW0gfCBJdGVtW10sIHNlbmRlcklkPzogSWQgfCBudWxsKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gICAgY29uc3QgYWRkZWRJZHM6IElkW10gPSBbXTtcbiAgICBsZXQgaWQ6IElkO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIC8vIEFycmF5XG4gICAgICBjb25zdCBpZHNUb0FkZDogSWRbXSA9IGRhdGEubWFwKChkKSA9PiBkW3RoaXMuX2lkUHJvcF0gYXMgSWQpO1xuICAgICAgaWYgKGlkc1RvQWRkLnNvbWUoKGlkKSA9PiB0aGlzLl9kYXRhLmhhcyhpZCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgZHVwbGljYXRlIGlkIHdhcyBmb3VuZCBpbiB0aGUgcGFyYW1ldGVyIGFycmF5LlwiKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBkYXRhLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlkID0gdGhpcy5fYWRkSXRlbShkYXRhW2ldKTtcbiAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBTaW5nbGUgaXRlbVxuICAgICAgaWQgPSB0aGlzLl9hZGRJdGVtKGRhdGEpO1xuICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGF0YVR5cGVcIik7XG4gICAgfVxuXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9LCBzZW5kZXJJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZGVkSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBpdGVtcy4gV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBwcm92aWRlZCBwcm9wZXJ0aWVzIHdpbGwgYmUgbWVyZ2VkIGluIHRoZSBleGlzdGluZyBpdGVtLiBXaGVuIGFuIGl0ZW0gZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSB1cGRhdGVkLCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYGFkZGAgZm9yIHRoZSBhZGRlZCBpdGVtcywgYW5kIGFuIGV2ZW50IGB1cGRhdGVgLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyBpZDogMywgdGV4dDogJ2l0ZW0gMycgfVxuICAgKiBdKVxuICAgKlxuICAgKiAvLyB1cGRhdGUgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS51cGRhdGUoW1xuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDIgKHVwZGF0ZWQpJyB9LFxuICAgKiAgIHsgaWQ6IDQsIHRleHQ6ICdpdGVtIDQgKG5ldyknIH1cbiAgICogXSlcbiAgICpcbiAgICogY29uc29sZS5sb2coaWRzKSAvLyBbMiwgNF1cbiAgICogYGBgXG4gICAqXG4gICAqICMjIFdhcm5pbmcgZm9yIFR5cGVTY3JpcHQgdXNlcnNcbiAgICogVGhpcyBtZXRob2QgbWF5IGludHJvZHVjZSBwYXJ0aWFsIGl0ZW1zIGludG8gdGhlIGRhdGEgc2V0LiBVc2UgYWRkIG9yIHVwZGF0ZU9ubHkgaW5zdGVhZCBmb3IgYmV0dGVyIHR5cGUgc2FmZXR5LlxuICAgKiBAcGFyYW0gZGF0YSAtIEl0ZW1zIHRvIGJlIHVwZGF0ZWQgKGlmIHRoZSBpZCBpcyBhbHJlYWR5IHByZXNlbnQpIG9yIGFkZGVkIChpZiB0aGUgaWQgaXMgbWlzc2luZykuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgdXBkYXRlZElkcyAtIFRoZSBpZHMgb2YgdGhlIGFkZGVkICh0aGVzZSBtYXkgYmUgbmV3bHkgZ2VuZXJhdGVkIGlmIHRoZXJlIHdhcyBubyBpZCBpbiB0aGUgaXRlbSBmcm9tIHRoZSBkYXRhKSBvciB1cGRhdGVkIGl0ZW1zLlxuICAgKiBAdGhyb3dzIFdoZW4gdGhlIHN1cHBsaWVkIGRhdGEgaXMgbmVpdGhlciBhbiBpdGVtIG5vciBhbiBhcnJheSBvZiBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGUoXG4gICAgZGF0YTogRGVlcFBhcnRpYWw8SXRlbT4gfCBEZWVwUGFydGlhbDxJdGVtPltdLFxuICAgIHNlbmRlcklkPzogSWQgfCBudWxsXG4gICk6IElkW10ge1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgdXBkYXRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IG9sZERhdGE6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWREYXRhOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcbiAgICBjb25zdCBpZFByb3AgPSB0aGlzLl9pZFByb3A7XG5cbiAgICBjb25zdCBhZGRPclVwZGF0ZSA9IChpdGVtOiBEZWVwUGFydGlhbDxJdGVtPik6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgb3JpZ0lkOiBPcHRJZCA9IGl0ZW1baWRQcm9wXTtcbiAgICAgIGlmIChvcmlnSWQgIT0gbnVsbCAmJiB0aGlzLl9kYXRhLmhhcyhvcmlnSWQpKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxJdGVtID0gaXRlbSBhcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+OyAvLyBpdCBoYXMgYW4gaWQsIHRoZXJlZm9yZSBpdCBpcyBhIGZ1bGxpdGVtXG4gICAgICAgIGNvbnN0IG9sZEl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kYXRhLmdldChvcmlnSWQpKTtcbiAgICAgICAgLy8gdXBkYXRlIGl0ZW1cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLl91cGRhdGVJdGVtKGZ1bGxJdGVtKTtcbiAgICAgICAgdXBkYXRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgdXBkYXRlZERhdGEucHVzaChmdWxsSXRlbSk7XG4gICAgICAgIG9sZERhdGEucHVzaChvbGRJdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFkZCBuZXcgaXRlbVxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuX2FkZEl0ZW0oaXRlbSBhcyBhbnkpO1xuICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIC8vIEFycmF5XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoZGF0YVtpXSAmJiB0eXBlb2YgZGF0YVtpXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIGFkZE9yVXBkYXRlKGRhdGFbaV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiSWdub3JpbmcgaW5wdXQgaXRlbSwgd2hpY2ggaXMgbm90IGFuIG9iamVjdCBhdCBpbmRleCBcIiArIGlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBTaW5nbGUgaXRlbVxuICAgICAgYWRkT3JVcGRhdGUoZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZGF0YVR5cGVcIik7XG4gICAgfVxuXG4gICAgaWYgKGFkZGVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcImFkZFwiLCB7IGl0ZW1zOiBhZGRlZElkcyB9LCBzZW5kZXJJZCk7XG4gICAgfVxuICAgIGlmICh1cGRhdGVkSWRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgcHJvcHMgPSB7IGl0ZW1zOiB1cGRhdGVkSWRzLCBvbGREYXRhOiBvbGREYXRhLCBkYXRhOiB1cGRhdGVkRGF0YSB9O1xuICAgICAgLy8gVE9ETzogcmVtb3ZlIGRlcHJlY2F0ZWQgcHJvcGVydHkgJ2RhdGEnIHNvbWUgZGF5XG4gICAgICAvL09iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2RhdGEnLCB7XG4gICAgICAvLyAgJ2dldCc6IChmdW5jdGlvbigpIHtcbiAgICAgIC8vICAgIGNvbnNvbGUud2FybignUHJvcGVydHkgZGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgRGF0YVNldC5nZXQoaWRzKSB0byByZXRyaWV2ZSB0aGUgbmV3IGRhdGEsIHVzZSB0aGUgb2xkRGF0YSBwcm9wZXJ0eSBvbiB0aGlzIG9iamVjdCB0byBnZXQgdGhlIG9sZCBkYXRhJyk7XG4gICAgICAvLyAgICByZXR1cm4gdXBkYXRlZERhdGE7XG4gICAgICAvLyAgfSkuYmluZCh0aGlzKVxuICAgICAgLy99KTtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJ1cGRhdGVcIiwgcHJvcHMsIHNlbmRlcklkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkZWRJZHMuY29uY2F0KHVwZGF0ZWRJZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBpdGVtcy4gV2hlbiBhbiBpdGVtIGRvZXMgbm90IGV4aXN0LCBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIHByb3ZpZGVkIHByb3BlcnRpZXMgd2lsbCBiZSBkZWVwbHkgbWVyZ2VkIGludG8gdGhlIGV4aXN0aW5nIGl0ZW0uXG4gICAqIFdoZW4gYW4gaXRlbSBkb2VzIG5vdCBleGlzdCAoaWQgbm90IHByZXNlbnQgaW4gdGhlIGRhdGEgc2V0IG9yIGFic2VudCksIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duIGFuZCBub3RoaW5nIHdpbGwgYmUgY2hhbmdlZC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSB1cGRhdGVkLCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYHVwZGF0ZWAuXG4gICAqIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqICMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gICAqIGNvbnN0IGRhdGEgPSBuZXcgdmlzLkRhdGFTZXQoW1xuICAgKiAgIHsgaWQ6IDEsIHRleHQ6ICdpdGVtIDEnIH0sXG4gICAqICAgeyBpZDogMiwgdGV4dDogJ2l0ZW0gMicgfSxcbiAgICogICB7IGlkOiAzLCB0ZXh0OiAnaXRlbSAzJyB9LFxuICAgKiBdKVxuICAgKlxuICAgKiAvLyB1cGRhdGUgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS51cGRhdGUoW1xuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDIgKHVwZGF0ZWQpJyB9LCAvLyB3b3Jrc1xuICAgKiAgIC8vIHsgaWQ6IDQsIHRleHQ6ICdpdGVtIDQgKG5ldyknIH0sIC8vIHdvdWxkIHRocm93XG4gICAqICAgLy8geyB0ZXh0OiAnaXRlbSA0IChuZXcpJyB9LCAvLyB3b3VsZCBhbHNvIHRocm93XG4gICAqIF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzJdXG4gICAqIGBgYFxuICAgKiBAcGFyYW0gZGF0YSAtIFVwZGF0ZXMgKHRoZSBpZCBhbmQgb3B0aW9uYWxseSBvdGhlciBwcm9wcykgdG8gdGhlIGl0ZW1zIGluIHRoaXMgZGF0YSBzZXQuXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgdXBkYXRlZElkcyAtIFRoZSBpZHMgb2YgdGhlIHVwZGF0ZWQgaXRlbXMuXG4gICAqIEB0aHJvd3MgV2hlbiB0aGUgc3VwcGxpZWQgZGF0YSBpcyBuZWl0aGVyIGFuIGl0ZW0gbm9yIGFuIGFycmF5IG9mIGl0ZW1zLCB3aGVuIHRoZSBpZHMgYXJlIG1pc3NpbmcuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlT25seShcbiAgICBkYXRhOiBVcGRhdGVJdGVtPEl0ZW0sIElkUHJvcD4gfCBVcGRhdGVJdGVtPEl0ZW0sIElkUHJvcD5bXSxcbiAgICBzZW5kZXJJZD86IElkIHwgbnVsbFxuICApOiBJZFtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlRXZlbnREYXRhID0gZGF0YVxuICAgICAgLm1hcChcbiAgICAgICAgKFxuICAgICAgICAgIHVwZGF0ZVxuICAgICAgICApOiB7XG4gICAgICAgICAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgICB1cGRhdGU6IFVwZGF0ZUl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgfSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2xkRGF0YSA9IHRoaXMuX2RhdGEuZ2V0KHVwZGF0ZVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgICBpZiAob2xkRGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVcGRhdGluZyBub24tZXhpc3RlbnQgaXRlbXMgaXMgbm90IGFsbG93ZWQuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBvbGREYXRhLCB1cGRhdGUgfTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLm1hcChcbiAgICAgICAgKHtcbiAgICAgICAgICBvbGREYXRhLFxuICAgICAgICAgIHVwZGF0ZSxcbiAgICAgICAgfSk6IHtcbiAgICAgICAgICBpZDogSWQ7XG4gICAgICAgICAgb2xkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgICB1cGRhdGVkRGF0YTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgICAgICAgfSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBvbGREYXRhW3RoaXMuX2lkUHJvcF07XG4gICAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBwdXJlRGVlcE9iamVjdEFzc2lnbihvbGREYXRhLCB1cGRhdGUpO1xuXG4gICAgICAgICAgdGhpcy5fZGF0YS5zZXQoaWQsIHVwZGF0ZWREYXRhKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIG9sZERhdGE6IG9sZERhdGEsXG4gICAgICAgICAgICB1cGRhdGVkRGF0YSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgaWYgKHVwZGF0ZUV2ZW50RGF0YS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByb3BzOiBFdmVudFBheWxvYWRzPEl0ZW0sIElkUHJvcD5bXCJ1cGRhdGVcIl0gPSB7XG4gICAgICAgIGl0ZW1zOiB1cGRhdGVFdmVudERhdGEubWFwKCh2YWx1ZSk6IElkID0+IHZhbHVlLmlkKSxcbiAgICAgICAgb2xkRGF0YTogdXBkYXRlRXZlbnREYXRhLm1hcChcbiAgICAgICAgICAodmFsdWUpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+ID0+IHZhbHVlLm9sZERhdGFcbiAgICAgICAgKSxcbiAgICAgICAgZGF0YTogdXBkYXRlRXZlbnREYXRhLm1hcChcbiAgICAgICAgICAodmFsdWUpOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+ID0+IHZhbHVlLnVwZGF0ZWREYXRhXG4gICAgICAgICksXG4gICAgICB9O1xuICAgICAgLy8gVE9ETzogcmVtb3ZlIGRlcHJlY2F0ZWQgcHJvcGVydHkgJ2RhdGEnIHNvbWUgZGF5XG4gICAgICAvL09iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2RhdGEnLCB7XG4gICAgICAvLyAgJ2dldCc6IChmdW5jdGlvbigpIHtcbiAgICAgIC8vICAgIGNvbnNvbGUud2FybignUHJvcGVydHkgZGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgRGF0YVNldC5nZXQoaWRzKSB0byByZXRyaWV2ZSB0aGUgbmV3IGRhdGEsIHVzZSB0aGUgb2xkRGF0YSBwcm9wZXJ0eSBvbiB0aGlzIG9iamVjdCB0byBnZXQgdGhlIG9sZCBkYXRhJyk7XG4gICAgICAvLyAgICByZXR1cm4gdXBkYXRlZERhdGE7XG4gICAgICAvLyAgfSkuYmluZCh0aGlzKVxuICAgICAgLy99KTtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJ1cGRhdGVcIiwgcHJvcHMsIHNlbmRlcklkKTtcblxuICAgICAgcmV0dXJuIHByb3BzLml0ZW1zO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoaWQ6IElkKTogbnVsbCB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc0FycmF5PEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+IHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoaWRzOiBJZFtdKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWRbXSxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uc09iamVjdDxJdGVtPlxuICApOiBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdIHwgUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZCB8IElkW10sXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6XG4gICAgfCBudWxsXG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+XG4gICAgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W11cbiAgICB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgZmlyc3Q/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiB8IElkIHwgSWRbXSxcbiAgICBzZWNvbmQ/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+IHtcbiAgICAvLyBAVE9ETzogV291ZG4ndCBpdCBiZSBiZXR0ZXIgdG8gc3BsaXQgdGhpcyBpbnRvIG11bHRpcGxlIG1ldGhvZHM/XG5cbiAgICAvLyBwYXJzZSB0aGUgYXJndW1lbnRzXG4gICAgbGV0IGlkOiBJZCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaWRzOiBJZFtdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNJZChmaXJzdCkpIHtcbiAgICAgIC8vIGdldChpZCBbLCBvcHRpb25zXSlcbiAgICAgIGlkID0gZmlyc3Q7XG4gICAgICBvcHRpb25zID0gc2Vjb25kO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaXJzdCkpIHtcbiAgICAgIC8vIGdldChpZHMgWywgb3B0aW9uc10pXG4gICAgICBpZHMgPSBmaXJzdDtcbiAgICAgIG9wdGlvbnMgPSBzZWNvbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGdldChbLCBvcHRpb25zXSlcbiAgICAgIG9wdGlvbnMgPSBmaXJzdDtcbiAgICB9XG5cbiAgICAvLyBkZXRlcm1pbmUgdGhlIHJldHVybiB0eXBlXG4gICAgY29uc3QgcmV0dXJuVHlwZSA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMucmV0dXJuVHlwZSA9PT0gXCJPYmplY3RcIiA/IFwiT2JqZWN0XCIgOiBcIkFycmF5XCI7XG4gICAgLy8gQFRPRE86IFdURiBpcyB0aGlzPyBPciBhbSBJIG1pc3Npbmcgc29tZXRoaW5nP1xuICAgIC8vIHZhciByZXR1cm5UeXBlXG4gICAgLy8gaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yZXR1cm5UeXBlKSB7XG4gICAgLy8gICB2YXIgYWxsb3dlZFZhbHVlcyA9IFsnQXJyYXknLCAnT2JqZWN0J11cbiAgICAvLyAgIHJldHVyblR5cGUgPVxuICAgIC8vICAgICBhbGxvd2VkVmFsdWVzLmluZGV4T2Yob3B0aW9ucy5yZXR1cm5UeXBlKSA9PSAtMVxuICAgIC8vICAgICAgID8gJ0FycmF5J1xuICAgIC8vICAgICAgIDogb3B0aW9ucy5yZXR1cm5UeXBlXG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIHJldHVyblR5cGUgPSAnQXJyYXknXG4gICAgLy8gfVxuXG4gICAgLy8gYnVpbGQgb3B0aW9uc1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3QgaXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGxldCBpdGVtOiB1bmRlZmluZWQgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+ID0gdW5kZWZpbmVkO1xuICAgIGxldCBpdGVtSWRzOiB1bmRlZmluZWQgfCBJZFtdID0gdW5kZWZpbmVkO1xuICAgIGxldCBpdGVtSWQ6IHVuZGVmaW5lZCB8IElkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gY29udmVydCBpdGVtc1xuICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAvLyByZXR1cm4gYSBzaW5nbGUgaXRlbVxuICAgICAgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgIGlmIChpdGVtICYmIGZpbHRlciAmJiAhZmlsdGVyKGl0ZW0pKSB7XG4gICAgICAgIGl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpZHMgIT0gbnVsbCkge1xuICAgICAgLy8gcmV0dXJuIGEgc3Vic2V0IG9mIGl0ZW1zXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZHNbaV0pO1xuICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmICghZmlsdGVyIHx8IGZpbHRlcihpdGVtKSkpIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJldHVybiBhbGwgaXRlbXNcbiAgICAgIGl0ZW1JZHMgPSBbLi4udGhpcy5fZGF0YS5rZXlzKCldO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaXRlbUlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGl0ZW1JZCk7XG4gICAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvcmRlciB0aGUgcmVzdWx0c1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMub3JkZXIgJiYgaWQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9zb3J0KGl0ZW1zLCBvcHRpb25zLm9yZGVyKTtcbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgZmllbGRzIG9mIHRoZSBpdGVtc1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZmllbGRzKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBvcHRpb25zLmZpZWxkcztcbiAgICAgIGlmIChpZCAhPSB1bmRlZmluZWQgJiYgaXRlbSAhPSBudWxsKSB7XG4gICAgICAgIGl0ZW0gPSB0aGlzLl9maWx0ZXJGaWVsZHMoaXRlbSwgZmllbGRzKSBhcyBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaXRlbXNbaV0gPSB0aGlzLl9maWx0ZXJGaWVsZHMoaXRlbXNbaV0sIGZpZWxkcykgYXMgRnVsbEl0ZW08XG4gICAgICAgICAgICBJdGVtLFxuICAgICAgICAgICAgSWRQcm9wXG4gICAgICAgICAgPjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJldHVybiB0aGUgcmVzdWx0c1xuICAgIGlmIChyZXR1cm5UeXBlID09IFwiT2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4gPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCByZXN1bHRhbnQgPSBpdGVtc1tpXTtcbiAgICAgICAgLy8gQFRPRE86IFNob3Vkbid0IHRoaXMgYmUgdGhpcy5fZmllbGRJZD9cbiAgICAgICAgLy8gcmVzdWx0W3Jlc3VsdGFudC5pZF0gPSByZXN1bHRhbnRcbiAgICAgICAgY29uc3QgaWQ6IElkID0gcmVzdWx0YW50W3RoaXMuX2lkUHJvcF07XG4gICAgICAgIHJlc3VsdFtpZF0gPSByZXN1bHRhbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAvLyBhIHNpbmdsZSBpdGVtXG4gICAgICAgIHJldHVybiBpdGVtID8/IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBqdXN0IHJldHVybiBvdXIgYXJyYXlcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0SWRzKG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0SWRzT3B0aW9uczxJdGVtPik6IElkW10ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3Qgb3JkZXIgPSBvcHRpb25zICYmIG9wdGlvbnMub3JkZXI7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG4gICAgY29uc3QgaWRzOiBJZFtdID0gW107XG5cbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAvLyBnZXQgZmlsdGVyZWQgaXRlbXNcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICAvLyBjcmVhdGUgb3JkZXJlZCBsaXN0XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9kYXRhLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiBmaWx0ZXIoaXRlbSkpIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc29ydChpdGVtcywgb3JkZXIpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlkcy5wdXNoKGl0ZW1zW2ldW3RoaXMuX2lkUHJvcF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGUgdW5vcmRlcmVkIGxpc3RcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoaXRlbSAhPSBudWxsICYmIGZpbHRlcihpdGVtKSkge1xuICAgICAgICAgICAgaWRzLnB1c2goaXRlbVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZ2V0IGFsbCBpdGVtc1xuICAgICAgaWYgKG9yZGVyKSB7XG4gICAgICAgIC8vIGNyZWF0ZSBhbiBvcmRlcmVkIGxpc3RcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1JZHNbaV07XG4gICAgICAgICAgaXRlbXMucHVzaChkYXRhLmdldChpZCkhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NvcnQoaXRlbXMsIG9yZGVyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZHMucHVzaChpdGVtc1tpXVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIHVub3JkZXJlZCBsaXN0XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmdldChpZCk7XG4gICAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWRzLnB1c2goaXRlbVt0aGlzLl9pZFByb3BdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaWRzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXREYXRhU2V0KCk6IERhdGFTZXQ8SXRlbSwgSWRQcm9wPiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGZvckVhY2goXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IHZvaWQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VGb3JFYWNoT3B0aW9uczxJdGVtPlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kYXRhO1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBbLi4uZGF0YS5rZXlzKCldO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcikge1xuICAgICAgLy8gZXhlY3V0ZSBmb3JFYWNoIG9uIG9yZGVyZWQgbGlzdFxuICAgICAgY29uc3QgaXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IHRoaXMuZ2V0KG9wdGlvbnMpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgICBjb25zdCBpZCA9IGl0ZW1bdGhpcy5faWRQcm9wXTtcbiAgICAgICAgY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bm9yZGVyZWRcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpdGVtSWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgICAgaWYgKGl0ZW0gIT0gbnVsbCAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoaXRlbSkpKSB7XG4gICAgICAgICAgY2FsbGJhY2soaXRlbSwgaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBtYXA8VD4oXG4gICAgY2FsbGJhY2s6IChpdGVtOiBJdGVtLCBpZDogSWQpID0+IFQsXG4gICAgb3B0aW9ucz86IERhdGFJbnRlcmZhY2VNYXBPcHRpb25zPEl0ZW0sIFQ+XG4gICk6IFRbXSB7XG4gICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlcjtcbiAgICBjb25zdCBtYXBwZWRJdGVtczogVFtdID0gW107XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG5cbiAgICAvLyBjb252ZXJ0IGFuZCBmaWx0ZXIgaXRlbXNcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaXRlbUlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpdGVtSWRzW2ldO1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgIGlmIChpdGVtICE9IG51bGwgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGl0ZW0pKSkge1xuICAgICAgICBtYXBwZWRJdGVtcy5wdXNoKGNhbGxiYWNrKGl0ZW0sIGlkKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgaXRlbXNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm9yZGVyKSB7XG4gICAgICB0aGlzLl9zb3J0KG1hcHBlZEl0ZW1zLCBvcHRpb25zLm9yZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwcGVkSXRlbXM7XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXJGaWVsZHM8SyBleHRlbmRzIHN0cmluZz4oaXRlbTogbnVsbCwgZmllbGRzOiBLW10pOiBudWxsO1xuICBwcml2YXRlIF9maWx0ZXJGaWVsZHM8SyBleHRlbmRzIHN0cmluZz4oXG4gICAgaXRlbTogUmVjb3JkPEssIHVua25vd24+LFxuICAgIGZpZWxkczogS1tdXG4gICk6IFJlY29yZDxLLCB1bmtub3duPjtcbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGl0ZW06IFJlY29yZDxLLCB1bmtub3duPixcbiAgICBmaWVsZHM6IEtbXSB8IFJlY29yZDxLLCBzdHJpbmc+XG4gICk6IGFueTtcbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgZmllbGRzIG9mIGFuIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtIC0gVGhlIGl0ZW0gd2hvc2UgZmllbGRzIHNob3VsZCBiZSBmaWx0ZXJlZC5cbiAgICogQHBhcmFtIGZpZWxkcyAtIFRoZSBuYW1lcyBvZiB0aGUgZmllbGRzIHRoYXQgd2lsbCBiZSBrZXB0LlxuICAgKiBAdHlwZVBhcmFtIEsgLSBGaWVsZCBuYW1lIHR5cGUuXG4gICAqIEByZXR1cm5zIFRoZSBpdGVtIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgZmllbGRzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmlsdGVyRmllbGRzPEsgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGl0ZW06IFJlY29yZDxLLCB1bmtub3duPiB8IG51bGwsXG4gICAgZmllbGRzOiBLW10gfCBSZWNvcmQ8SywgdW5rbm93bj5cbiAgKTogUmVjb3JkPEssIHVua25vd24+IHwgbnVsbCB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICAvLyBpdGVtIGlzIG51bGxcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICBBcnJheS5pc0FycmF5KGZpZWxkcylcbiAgICAgICAgPyAvLyBVc2UgdGhlIHN1cHBsaWVkIGFycmF5XG4gICAgICAgICAgZmllbGRzXG4gICAgICAgIDogLy8gVXNlIHRoZSBrZXlzIG9mIHRoZSBzdXBwbGllZCBvYmplY3RcbiAgICAgICAgICAoT2JqZWN0LmtleXMoZmllbGRzKSBhcyBLW10pXG4gICAgKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgKGZpbHRlcmVkSXRlbSwgZmllbGQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gICAgICAgIGZpbHRlcmVkSXRlbVtmaWVsZF0gPSBpdGVtW2ZpZWxkXTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbTtcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCB0aGUgcHJvdmlkZWQgYXJyYXkgd2l0aCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW1zIC0gSXRlbXMgdG8gYmUgc29ydGVkIGluIHBsYWNlLlxuICAgKiBAcGFyYW0gb3JkZXIgLSBBIGZpZWxkIG5hbWUgb3IgY3VzdG9tIHNvcnQgZnVuY3Rpb24uXG4gICAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBpdGVtcyBpbiB0aGUgaXRlbXMgYXJyYXkuXG4gICAqL1xuICBwcml2YXRlIF9zb3J0PFQ+KGl0ZW1zOiBUW10sIG9yZGVyOiBEYXRhSW50ZXJmYWNlT3JkZXI8VD4pOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIG9yZGVyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBvcmRlciBieSBwcm92aWRlZCBmaWVsZCBuYW1lXG4gICAgICBjb25zdCBuYW1lID0gb3JkZXI7IC8vIGZpZWxkIG5hbWVcbiAgICAgIGl0ZW1zLnNvcnQoKGEsIGIpOiAtMSB8IDAgfCAxID0+IHtcbiAgICAgICAgLy8gQFRPRE86IEhvdyB0byB0cmVhdCBtaXNzaW5nIHByb3BlcnRpZXM/XG4gICAgICAgIGNvbnN0IGF2ID0gKGEgYXMgYW55KVtuYW1lXTtcbiAgICAgICAgY29uc3QgYnYgPSAoYiBhcyBhbnkpW25hbWVdO1xuICAgICAgICByZXR1cm4gYXYgPiBidiA/IDEgOiBhdiA8IGJ2ID8gLTEgOiAwO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3JkZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgLy8gb3JkZXIgYnkgc29ydCBmdW5jdGlvblxuICAgICAgaXRlbXMuc29ydChvcmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IGV4dGVuZCBvcmRlciBieSBhbiBPYmplY3Qge2ZpZWxkOnN0cmluZywgZGlyZWN0aW9uOnN0cmluZ31cbiAgICAgIC8vICAgICAgIHdoZXJlIGRpcmVjdGlvbiBjYW4gYmUgJ2FzYycgb3IgJ2Rlc2MnXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT3JkZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaXRlbSBvciBtdWx0aXBsZSBpdGVtcyBieSDigJxyZWZlcmVuY2XigJ0gKG9ubHkgdGhlIGlkIGlzIHVzZWQpIG9yIGJ5IGlkLlxuICAgKlxuICAgKiBUaGUgbWV0aG9kIGlnbm9yZXMgcmVtb3ZhbCBvZiBub24tZXhpc3RpbmcgaXRlbXMsIGFuZCByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkcyBvZiB0aGUgaXRlbXMgd2hpY2ggYXJlIGFjdHVhbGx5IHJlbW92ZWQgZnJvbSB0aGUgRGF0YVNldC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSByZW1vdmVkLCB0aGUgRGF0YVNldCB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgYHJlbW92ZWAgZm9yIHRoZSByZW1vdmVkIGl0ZW1zLiBXaGVuIGEgYHNlbmRlcklkYCBpcyBwcm92aWRlZCwgdGhpcyBpZCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSB0cmlnZ2VyZWQgZXZlbnQgdG8gYWxsIHN1YnNjcmliZXJzLlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqIGBgYGphdmFzY3JpcHRcbiAgICogLy8gY3JlYXRlIGEgRGF0YVNldFxuICAgKiBjb25zdCBkYXRhID0gbmV3IHZpcy5EYXRhU2V0KFtcbiAgICogICB7IGlkOiAxLCB0ZXh0OiAnaXRlbSAxJyB9LFxuICAgKiAgIHsgaWQ6IDIsIHRleHQ6ICdpdGVtIDInIH0sXG4gICAqICAgeyBpZDogMywgdGV4dDogJ2l0ZW0gMycgfVxuICAgKiBdKVxuICAgKlxuICAgKiAvLyByZW1vdmUgaXRlbXNcbiAgICogY29uc3QgaWRzID0gZGF0YS5yZW1vdmUoWzIsIHsgaWQ6IDMgfSwgNF0pXG4gICAqXG4gICAqIGNvbnNvbGUubG9nKGlkcykgLy8gWzIsIDNdXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBPbmUgb3IgbW9yZSBpdGVtcyBvciBpZHMgb2YgaXRlbXMgdG8gYmUgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gU2VuZGVyIGlkLlxuICAgKiBAcmV0dXJucyBUaGUgaWRzIG9mIHRoZSByZW1vdmVkIGl0ZW1zLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZShpZDogSWQgfCBJdGVtIHwgKElkIHwgSXRlbSlbXSwgc2VuZGVySWQ/OiBJZCB8IG51bGwpOiBJZFtdIHtcbiAgICBjb25zdCByZW1vdmVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIC8vIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gYmUgYW4gYXJyYXkgZm9yIHNpbXBsaWNpdHlcbiAgICBjb25zdCBpZHMgPSBBcnJheS5pc0FycmF5KGlkKSA/IGlkIDogW2lkXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9yZW1vdmUoaWRzW2ldKTtcbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1JZDogT3B0SWQgPSBpdGVtW3RoaXMuX2lkUHJvcF07XG4gICAgICAgIGlmIChpdGVtSWQgIT0gbnVsbCkge1xuICAgICAgICAgIHJlbW92ZWRJZHMucHVzaChpdGVtSWQpO1xuICAgICAgICAgIHJlbW92ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICBcInJlbW92ZVwiLFxuICAgICAgICB7IGl0ZW1zOiByZW1vdmVkSWRzLCBvbGREYXRhOiByZW1vdmVkSXRlbXMgfSxcbiAgICAgICAgc2VuZGVySWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbW92ZWRJZHM7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGl0ZW0gYnkgaXRzIGlkIG9yIHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gSWQgb2YgYW4gaXRlbSBvciB0aGUgaXRlbSBpdHNlbGYuXG4gICAqIEByZXR1cm5zIFRoZSByZW1vdmVkIGl0ZW0gaWYgcmVtb3ZlZCwgbnVsbCBvdGhlcndpc2UuXG4gICAqL1xuICBwcml2YXRlIF9yZW1vdmUoaWQ6IElkIHwgSXRlbSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4gfCBudWxsIHtcbiAgICAvLyBAVE9ETzogSXQgb3JpZ2lhbmxseSByZXR1cm5lZCB0aGUgaXRlbSBhbHRob3VnaCB0aGUgZG9jcyBzYXkgaWQuXG4gICAgLy8gVGhlIGNvZGUgZXhwZWN0cyB0aGUgaXRlbSwgc28gcHJvYmFibHkgYW4gZXJyb3IgaW4gdGhlIGRvY3MuXG4gICAgbGV0IGlkZW50OiBPcHRJZDtcblxuICAgIC8vIGNvbmZpcm0gdGhlIGlkIHRvIHVzZSBiYXNlZCBvbiB0aGUgYXJncyB0eXBlXG4gICAgaWYgKGlzSWQoaWQpKSB7XG4gICAgICBpZGVudCA9IGlkO1xuICAgIH0gZWxzZSBpZiAoaWQgJiYgdHlwZW9mIGlkID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZGVudCA9IGlkW3RoaXMuX2lkUHJvcF07IC8vIGxvb2sgZm9yIHRoZSBpZGVudGlmaWVyIGZpZWxkIHVzaW5nIC5faWRQcm9wXG4gICAgfVxuXG4gICAgLy8gZG8gdGhlIHJlbW92aW5nIGlmIHRoZSBpdGVtIGlzIGZvdW5kXG4gICAgaWYgKGlkZW50ICE9IG51bGwgJiYgdGhpcy5fZGF0YS5oYXMoaWRlbnQpKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWRlbnQpIHx8IG51bGw7XG4gICAgICB0aGlzLl9kYXRhLmRlbGV0ZShpZGVudCk7XG4gICAgICAtLXRoaXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIGVudGlyZSBkYXRhIHNldC5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGl0ZW1zIGFyZSByZW1vdmVkLCB0aGUge0BsaW5rIERhdGFTZXR9IHdpbGwgdHJpZ2dlciBhbiBldmVudCBgcmVtb3ZlYCBmb3IgYWxsIHJlbW92ZWQgaXRlbXMuIFdoZW4gYSBgc2VuZGVySWRgIGlzIHByb3ZpZGVkLCB0aGlzIGlkIHdpbGwgYmUgcGFzc2VkIHdpdGggdGhlIHRyaWdnZXJlZCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBzZW5kZXJJZCAtIFNlbmRlciBpZC5cbiAgICogQHJldHVybnMgcmVtb3ZlZElkcyAtIFRoZSBpZHMgb2YgYWxsIHJlbW92ZWQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoc2VuZGVySWQ/OiBJZCB8IG51bGwpOiBJZFtdIHtcbiAgICBjb25zdCBpZHMgPSBbLi4udGhpcy5fZGF0YS5rZXlzKCldO1xuICAgIGNvbnN0IGl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5fZGF0YS5nZXQoaWRzW2ldKSEpO1xuICAgIH1cblxuICAgIHRoaXMuX2RhdGEuY2xlYXIoKTtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsIHsgaXRlbXM6IGlkcywgb2xkRGF0YTogaXRlbXMgfSwgc2VuZGVySWQpO1xuXG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBpdGVtIHdpdGggbWF4aW11bSB2YWx1ZSBvZiBhIHNwZWNpZmllZCBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIGZpZWxkIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBzaG91bGQgYmUgc2VhcmNoZWQgZm9yIG1heCB2YWx1ZS5cbiAgICogQHJldHVybnMgSXRlbSBjb250YWluaW5nIG1heCB2YWx1ZSwgb3IgbnVsbCBpZiBubyBpdGVtcy5cbiAgICovXG4gIHB1YmxpYyBtYXgoZmllbGQ6IGtleW9mIEl0ZW0pOiBJdGVtIHwgbnVsbCB7XG4gICAgbGV0IG1heCA9IG51bGw7XG4gICAgbGV0IG1heEZpZWxkID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLl9kYXRhLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBpdGVtRmllbGQgPSBpdGVtW2ZpZWxkXTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGl0ZW1GaWVsZCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAobWF4RmllbGQgPT0gbnVsbCB8fCBpdGVtRmllbGQgPiBtYXhGaWVsZClcbiAgICAgICkge1xuICAgICAgICBtYXggPSBpdGVtO1xuICAgICAgICBtYXhGaWVsZCA9IGl0ZW1GaWVsZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF4IHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgaXRlbSB3aXRoIG1pbmltdW0gdmFsdWUgb2YgYSBzcGVjaWZpZWQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZCAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIGZvciBtaW4gdmFsdWUuXG4gICAqIEByZXR1cm5zIEl0ZW0gY29udGFpbmluZyBtaW4gdmFsdWUsIG9yIG51bGwgaWYgbm8gaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgbWluKGZpZWxkOiBrZXlvZiBJdGVtKTogSXRlbSB8IG51bGwge1xuICAgIGxldCBtaW4gPSBudWxsO1xuICAgIGxldCBtaW5GaWVsZCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fZGF0YS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgaXRlbUZpZWxkID0gaXRlbVtmaWVsZF07XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBpdGVtRmllbGQgPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgKG1pbkZpZWxkID09IG51bGwgfHwgaXRlbUZpZWxkIDwgbWluRmllbGQpXG4gICAgICApIHtcbiAgICAgICAgbWluID0gaXRlbTtcbiAgICAgICAgbWluRmllbGQgPSBpdGVtRmllbGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbiB8fCBudWxsO1xuICB9XG5cbiAgcHVibGljIGRpc3RpbmN0PFQgZXh0ZW5kcyBrZXlvZiBJdGVtPihwcm9wOiBUKTogSXRlbVtUXVtdO1xuICBwdWJsaWMgZGlzdGluY3QocHJvcDogc3RyaW5nKTogdW5rbm93bltdO1xuICAvKipcbiAgICogRmluZCBhbGwgZGlzdGluY3QgdmFsdWVzIG9mIGEgc3BlY2lmaWVkIGZpZWxkXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wIC0gVGhlIHByb3BlcnR5IG5hbWUgd2hvc2UgZGlzdGluY3QgdmFsdWVzIHNob3VsZCBiZSByZXR1cm5lZC5cbiAgICogQHJldHVybnMgVW5vcmRlcmVkIGFycmF5IGNvbnRhaW5pbmcgYWxsIGRpc3RpbmN0IHZhbHVlcy4gSXRlbXMgd2l0aG91dCBzcGVjaWZpZWQgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gICAqL1xuICBwdWJsaWMgZGlzdGluY3Q8VCBleHRlbmRzIHN0cmluZz4ocHJvcDogVCk6IHVua25vd25bXSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgY29uc3QgaXRlbUlkcyA9IFsuLi5kYXRhLmtleXMoKV07XG4gICAgY29uc3QgdmFsdWVzOiB1bmtub3duW10gPSBbXTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gaXRlbUlkc1tpXTtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmdldChpZCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IChpdGVtIGFzIGFueSlbcHJvcF07XG4gICAgICBsZXQgZXhpc3RzID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvdW50OyBqKyspIHtcbiAgICAgICAgaWYgKHZhbHVlc1tqXSA9PSB2YWx1ZSkge1xuICAgICAgICAgIGV4aXN0cyA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZXhpc3RzICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWVzW2NvdW50XSA9IHZhbHVlO1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2luZ2xlIGl0ZW0uIFdpbGwgZmFpbCB3aGVuIGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpZCBhbHJlYWR5IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIGl0ZW0gLSBBIG5ldyBpdGVtIHRvIGJlIGFkZGVkLlxuICAgKiBAcmV0dXJucyBBZGRlZCBpdGVtJ3MgaWQuIEFuIGlkIGlzIGdlbmVyYXRlZCB3aGVuIGl0IGlzIG5vdCBwcmVzZW50IGluIHRoZSBpdGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkSXRlbShpdGVtOiBJdGVtKTogSWQge1xuICAgIGNvbnN0IGZ1bGxJdGVtID0gZW5zdXJlRnVsbEl0ZW0oaXRlbSwgdGhpcy5faWRQcm9wKTtcbiAgICBjb25zdCBpZCA9IGZ1bGxJdGVtW3RoaXMuX2lkUHJvcF07XG5cbiAgICAvLyBjaGVjayB3aGV0aGVyIHRoaXMgaWQgaXMgYWxyZWFkeSB0YWtlblxuICAgIGlmICh0aGlzLl9kYXRhLmhhcyhpZCkpIHtcbiAgICAgIC8vIGl0ZW0gYWxyZWFkeSBleGlzdHNcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgYWRkIGl0ZW06IGl0ZW0gd2l0aCBpZCBcIiArIGlkICsgXCIgYWxyZWFkeSBleGlzdHNcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhLnNldChpZCwgZnVsbEl0ZW0pO1xuICAgICsrdGhpcy5sZW5ndGg7XG5cbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGEgc2luZ2xlIGl0ZW06IG1lcmdlIHdpdGggZXhpc3RpbmcgaXRlbS5cbiAgICogV2lsbCBmYWlsIHdoZW4gdGhlIGl0ZW0gaGFzIG5vIGlkLCBvciB3aGVuIHRoZXJlIGRvZXMgbm90IGV4aXN0IGFuIGl0ZW0gd2l0aCB0aGUgc2FtZSBpZC5cbiAgICpcbiAgICogQHBhcmFtIHVwZGF0ZSAtIFRoZSBuZXcgaXRlbVxuICAgKiBAcmV0dXJucyBUaGUgaWQgb2YgdGhlIHVwZGF0ZWQgaXRlbS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZUl0ZW0odXBkYXRlOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+KTogSWQge1xuICAgIGNvbnN0IGlkOiBPcHRJZCA9IHVwZGF0ZVt0aGlzLl9pZFByb3BdO1xuICAgIGlmIChpZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHVwZGF0ZSBpdGVtOiBpdGVtIGhhcyBubyBpZCAoaXRlbTogXCIgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVwZGF0ZSkgK1xuICAgICAgICAgIFwiKVwiXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBpdGVtID0gdGhpcy5fZGF0YS5nZXQoaWQpO1xuICAgIGlmICghaXRlbSkge1xuICAgICAgLy8gaXRlbSBkb2Vzbid0IGV4aXN0XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXBkYXRlIGl0ZW06IG5vIGl0ZW0gd2l0aCBpZCBcIiArIGlkICsgXCIgZm91bmRcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YS5zZXQoaWQsIHsgLi4uaXRlbSwgLi4udXBkYXRlIH0pO1xuXG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBzdHJlYW0oaWRzPzogSXRlcmFibGU8SWQ+KTogRGF0YVN0cmVhbTxJdGVtPiB7XG4gICAgaWYgKGlkcykge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgIHJldHVybiBuZXcgRGF0YVN0cmVhbTxJdGVtPih7XG4gICAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZCwgSXRlbV0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRhdGEuZ2V0KGlkKTtcbiAgICAgICAgICAgIGlmIChpdGVtICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgeWllbGQgW2lkLCBpdGVtXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRhU3RyZWFtKHtcbiAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06IHRoaXMuX2RhdGEuZW50cmllcy5iaW5kKHRoaXMuX2RhdGEpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyogZGV2ZWxibG9jazpzdGFydCAqL1xuICBwdWJsaWMgZ2V0IHRlc3RMZWFrRGF0YSgpOiBNYXA8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRlc3RMZWFrSWRQcm9wKCk6IElkUHJvcCB7XG4gICAgcmV0dXJuIHRoaXMuX2lkUHJvcDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRlc3RMZWFrT3B0aW9ucygpOiBEYXRhU2V0SW5pdGlhbE9wdGlvbnM8SWRQcm9wPiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgcHVibGljIGdldCB0ZXN0TGVha1F1ZXVlKCk6IFF1ZXVlPHRoaXM+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlO1xuICB9XG4gIHB1YmxpYyBzZXQgdGVzdExlYWtRdWV1ZSh2OiBRdWV1ZTx0aGlzPiB8IG51bGwpIHtcbiAgICB0aGlzLl9xdWV1ZSA9IHY7XG4gIH1cbiAgLyogZGV2ZWxibG9jazplbmQgKi9cbn1cbiIsICJpbXBvcnQge1xuICBEYXRhSW50ZXJmYWNlLFxuICBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnMsXG4gIERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zLFxuICBEYXRhSW50ZXJmYWNlR2V0T3B0aW9ucyxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheSxcbiAgRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3QsXG4gIERhdGFJbnRlcmZhY2VNYXBPcHRpb25zLFxuICBFdmVudENhbGxiYWNrc1dpdGhBbnksXG4gIEV2ZW50TmFtZSxcbiAgRXZlbnRQYXlsb2FkcyxcbiAgRnVsbEl0ZW0sXG4gIElkLFxuICBQYXJ0SXRlbSxcbiAgUmVtb3ZlRXZlbnRQYXlsb2FkLFxuICBVcGRhdGVFdmVudFBheWxvYWQsXG4gIGlzSWQsXG59IGZyb20gXCIuL2RhdGEtaW50ZXJmYWNlXCI7XG5cbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tIFwiLi9kYXRhLXNldFwiO1xuaW1wb3J0IHsgRGF0YVNldFBhcnQgfSBmcm9tIFwiLi9kYXRhLXNldC1wYXJ0XCI7XG5pbXBvcnQgeyBEYXRhU3RyZWFtIH0gZnJvbSBcIi4vZGF0YS1zdHJlYW1cIjtcblxuLyoqXG4gKiBEYXRhIHZpZXcgb3B0aW9ucy5cbiAqXG4gKiBAdHlwZVBhcmFtIEl0ZW0gLSBJdGVtIHR5cGUgdGhhdCBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGlkLlxuICogQHR5cGVQYXJhbSBJZFByb3AgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGNvbnRhaW5zIHRoZSBpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhVmlld09wdGlvbnM8SXRlbSwgSWRQcm9wIGV4dGVuZHMgc3RyaW5nPiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZmllbGQgY29udGFpbmluZyB0aGUgaWQgb2YgdGhlIGl0ZW1zLiBXaGVuIGRhdGEgaXMgZmV0Y2hlZCBmcm9tIGEgc2VydmVyIHdoaWNoIHVzZXMgc29tZSBzcGVjaWZpYyBmaWVsZCB0byBpZGVudGlmeSBpdGVtcywgdGhpcyBmaWVsZCBuYW1lIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlIERhdGFTZXQgdXNpbmcgdGhlIG9wdGlvbiBgZmllbGRJZGAuIEZvciBleGFtcGxlIFtDb3VjaERCXShodHRwOi8vY291Y2hkYi5hcGFjaGUub3JnLykgdXNlcyB0aGUgZmllbGQgYCdfaWQnYCB0byBpZGVudGlmeSBkb2N1bWVudHMuXG4gICAqL1xuICBmaWVsZElkPzogSWRQcm9wO1xuICAvKiogSXRlbXMgY2FuIGJlIGZpbHRlcmVkIG9uIHNwZWNpZmljIHByb3BlcnRpZXMgYnkgcHJvdmlkaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLiBBIGZpbHRlciBmdW5jdGlvbiBpcyBleGVjdXRlZCBmb3IgZWFjaCBvZiB0aGUgaXRlbXMgaW4gdGhlIERhdGFTZXQsIGFuZCBpcyBjYWxsZWQgd2l0aCB0aGUgaXRlbSBhcyBwYXJhbWV0ZXIuIFRoZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhIGJvb2xlYW4uIEFsbCBpdGVtcyBmb3Igd2hpY2ggdGhlIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2lsbCBiZSBlbWl0dGVkLiAqL1xuICBmaWx0ZXI/OiAoaXRlbTogSXRlbSkgPT4gYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEYXRhVmlld1xuICpcbiAqIEEgRGF0YVZpZXcgb2ZmZXJzIGEgZmlsdGVyZWQgYW5kL29yIGZvcm1hdHRlZCB2aWV3IG9uIGEgRGF0YVNldC4gT25lIGNhbiBzdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiBhIERhdGFWaWV3LCBhbmQgZWFzaWx5IGdldCBmaWx0ZXJlZCBvciBmb3JtYXR0ZWQgZGF0YSB3aXRob3V0IGhhdmluZyB0byBzcGVjaWZ5IGZpbHRlcnMgYW5kIGZpZWxkIHR5cGVzIGFsbCB0aGUgdGltZS5cbiAqXG4gKiAjIyBFeGFtcGxlXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBjcmVhdGUgYSBEYXRhU2V0XG4gKiB2YXIgZGF0YSA9IG5ldyB2aXMuRGF0YVNldCgpO1xuICogZGF0YS5hZGQoW1xuICogICB7aWQ6IDEsIHRleHQ6ICdpdGVtIDEnLCBkYXRlOiBuZXcgRGF0ZSgyMDEzLCA2LCAyMCksIGdyb3VwOiAxLCBmaXJzdDogdHJ1ZX0sXG4gKiAgIHtpZDogMiwgdGV4dDogJ2l0ZW0gMicsIGRhdGU6ICcyMDEzLTA2LTIzJywgZ3JvdXA6IDJ9LFxuICogICB7aWQ6IDMsIHRleHQ6ICdpdGVtIDMnLCBkYXRlOiAnMjAxMy0wNi0yNScsIGdyb3VwOiAyfSxcbiAqICAge2lkOiA0LCB0ZXh0OiAnaXRlbSA0J31cbiAqIF0pO1xuICpcbiAqIC8vIGNyZWF0ZSBhIERhdGFWaWV3XG4gKiAvLyB0aGUgdmlldyB3aWxsIG9ubHkgY29udGFpbiBpdGVtcyBoYXZpbmcgYSBwcm9wZXJ0eSBncm91cCB3aXRoIHZhbHVlIDEsXG4gKiAvLyBhbmQgd2lsbCBvbmx5IG91dHB1dCBmaWVsZHMgaWQsIHRleHQsIGFuZCBkYXRlLlxuICogdmFyIHZpZXcgPSBuZXcgdmlzLkRhdGFWaWV3KGRhdGEsIHtcbiAqICAgZmlsdGVyOiBmdW5jdGlvbiAoaXRlbSkge1xuICogICAgIHJldHVybiAoaXRlbS5ncm91cCA9PSAxKTtcbiAqICAgfSxcbiAqICAgZmllbGRzOiBbJ2lkJywgJ3RleHQnLCAnZGF0ZSddXG4gKiB9KTtcbiAqXG4gKiAvLyBzdWJzY3JpYmUgdG8gYW55IGNoYW5nZSBpbiB0aGUgRGF0YVZpZXdcbiAqIHZpZXcub24oJyonLCBmdW5jdGlvbiAoZXZlbnQsIHByb3BlcnRpZXMsIHNlbmRlcklkKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdldmVudCcsIGV2ZW50LCBwcm9wZXJ0aWVzKTtcbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZSBhbiBpdGVtIGluIHRoZSBkYXRhIHNldFxuICogZGF0YS51cGRhdGUoe2lkOiAyLCBncm91cDogMX0pO1xuICpcbiAqIC8vIGdldCBhbGwgaWRzIGluIHRoZSB2aWV3XG4gKiB2YXIgaWRzID0gdmlldy5nZXRJZHMoKTtcbiAqIGNvbnNvbGUubG9nKCdpZHMnLCBpZHMpOyAvLyB3aWxsIG91dHB1dCBbMSwgMl1cbiAqXG4gKiAvLyBnZXQgYWxsIGl0ZW1zIGluIHRoZSB2aWV3XG4gKiB2YXIgaXRlbXMgPSB2aWV3LmdldCgpO1xuICogYGBgXG4gKlxuICogQHR5cGVQYXJhbSBJdGVtIC0gSXRlbSB0eXBlIHRoYXQgbWF5IG9yIG1heSBub3QgaGF2ZSBhbiBpZC5cbiAqIEB0eXBlUGFyYW0gSWRQcm9wIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgaWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhVmlldzxcbiAgICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbiAgPlxuICBleHRlbmRzIERhdGFTZXRQYXJ0PEl0ZW0sIElkUHJvcD5cbiAgaW1wbGVtZW50cyBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD5cbntcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBsZW5ndGggPSAwO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldCBpZFByb3AoKTogSWRQcm9wIHtcbiAgICByZXR1cm4gdGhpcy5nZXREYXRhU2V0KCkuaWRQcm9wO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXI6IEV2ZW50Q2FsbGJhY2tzV2l0aEFueTxJdGVtLCBJZFByb3A+W1wiKlwiXTtcbiAgcHJpdmF0ZSBfZGF0YSE6IERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPjsgLy8gY29uc3RydWN0b3Ig4oaSIHNldERhdGFcbiAgcHJpdmF0ZSByZWFkb25seSBfaWRzOiBTZXQ8SWQ+ID0gbmV3IFNldCgpOyAvLyBpZHMgb2YgdGhlIGl0ZW1zIGN1cnJlbnRseSBpbiBtZW1vcnkgKGp1c3QgY29udGFpbnMgYSBib29sZWFuIHRydWUpXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IERhdGFWaWV3T3B0aW9uczxJdGVtLCBJZFByb3A+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRhVmlldy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgaW5zdGFuY2UgY29udGFpbmluZyBkYXRhIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGlzIGRhdGEgdmlldy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBkYXRhOiBEYXRhSW50ZXJmYWNlPEl0ZW0sIElkUHJvcD4sXG4gICAgb3B0aW9ucz86IERhdGFWaWV3T3B0aW9uczxJdGVtLCBJZFByb3A+XG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHRoaXMuX2xpc3RlbmVyID0gdGhpcy5fb25FdmVudC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5zZXREYXRhKGRhdGEpO1xuICB9XG5cbiAgLy8gVE9ETzogaW1wbGVtZW50IGEgZnVuY3Rpb24gLmNvbmZpZygpIHRvIGR5bmFtaWNhbGx5IHVwZGF0ZSB0aGluZ3MgbGlrZSBjb25maWd1cmVkIGZpbHRlclxuICAvLyBhbmQgdHJpZ2dlciBjaGFuZ2VzIGFjY29yZGluZ2x5XG5cbiAgLyoqXG4gICAqIFNldCBhIGRhdGEgc291cmNlIGZvciB0aGUgdmlldy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgaW5zdGFuY2UgY29udGFpbmluZyBkYXRhIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KS5cbiAgICogQHJlbWFya3NcbiAgICogTm90ZSB0aGF0IHdoZW4gdGhlIGRhdGEgdmlldyBpcyBib3VuZCB0byBhIGRhdGEgc2V0IGl0IHdvbid0IGJlIGdhcmJhZ2VcbiAgICogY29sbGVjdGVkIHVubGVzcyB0aGUgZGF0YSBzZXQgaXMgdG9vLiBVc2UgYGRhdGFWaWV3LnNldERhdGEobnVsbClgIG9yXG4gICAqIGBkYXRhVmlldy5kaXNwb3NlKClgIHRvIGVuYWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24gYmVmb3JlIHlvdSBsb3NlIHRoZSBsYXN0XG4gICAqIHJlZmVyZW5jZS5cbiAgICovXG4gIHB1YmxpYyBzZXREYXRhKGRhdGE6IERhdGFJbnRlcmZhY2U8SXRlbSwgSWRQcm9wPik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhKSB7XG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIGN1cnJlbnQgZGF0YXNldFxuICAgICAgaWYgKHRoaXMuX2RhdGEub2ZmKSB7XG4gICAgICAgIHRoaXMuX2RhdGEub2ZmKFwiKlwiLCB0aGlzLl9saXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIC8vIHRyaWdnZXIgYSByZW1vdmUgb2YgYWxsIGl0ZW1zIGluIG1lbW9yeVxuICAgICAgY29uc3QgaWRzID0gdGhpcy5fZGF0YS5nZXRJZHMoeyBmaWx0ZXI6IHRoaXMuX29wdGlvbnMuZmlsdGVyIH0pO1xuICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLl9kYXRhLmdldChpZHMpO1xuXG4gICAgICB0aGlzLl9pZHMuY2xlYXIoKTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJyZW1vdmVcIiwgeyBpdGVtczogaWRzLCBvbGREYXRhOiBpdGVtcyB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9kYXRhID0gZGF0YTtcblxuICAgICAgLy8gdHJpZ2dlciBhbiBhZGQgb2YgYWxsIGFkZGVkIGl0ZW1zXG4gICAgICBjb25zdCBpZHMgPSB0aGlzLl9kYXRhLmdldElkcyh7IGZpbHRlcjogdGhpcy5fb3B0aW9ucy5maWx0ZXIgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGlkID0gaWRzW2ldO1xuICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGVuZ3RoID0gaWRzLmxlbmd0aDtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogaWRzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhID0gbmV3IERhdGFTZXQ8SXRlbSwgSWRQcm9wPigpO1xuICAgIH1cblxuICAgIC8vIHN1YnNjcmliZSB0byBuZXcgZGF0YXNldFxuICAgIGlmICh0aGlzLl9kYXRhLm9uKSB7XG4gICAgICB0aGlzLl9kYXRhLm9uKFwiKlwiLCB0aGlzLl9saXN0ZW5lcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIERhdGFWaWV3LlxuICAgKiBVc2VmdWwgd2hlbiB0aGUgRGF0YVZpZXcgaGFzIGEgZmlsdGVyIGZ1bmN0aW9uIGNvbnRhaW5pbmcgYSB2YXJpYWJsZSBwYXJhbWV0ZXIuXG4gICAqL1xuICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCBpZHMgPSB0aGlzLl9kYXRhLmdldElkcyh7XG4gICAgICBmaWx0ZXI6IHRoaXMuX29wdGlvbnMuZmlsdGVyLFxuICAgIH0pO1xuICAgIGNvbnN0IG9sZElkcyA9IFsuLi50aGlzLl9pZHNdO1xuICAgIGNvbnN0IG5ld0lkczogUmVjb3JkPElkLCBib29sZWFuPiA9IHt9O1xuICAgIGNvbnN0IGFkZGVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHJlbW92ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG5cbiAgICAvLyBjaGVjayBmb3IgYWRkaXRpb25zXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICBuZXdJZHNbaWRdID0gdHJ1ZTtcbiAgICAgIGlmICghdGhpcy5faWRzLmhhcyhpZCkpIHtcbiAgICAgICAgYWRkZWRJZHMucHVzaChpZCk7XG4gICAgICAgIHRoaXMuX2lkcy5hZGQoaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciByZW1vdmFsc1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBvbGRJZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gb2xkSWRzW2ldO1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2RhdGEuZ2V0KGlkKTtcbiAgICAgIGlmIChpdGVtID09IG51bGwpIHtcbiAgICAgICAgLy8gQFRPRE86IEludmVzdGlnYXRlLlxuICAgICAgICAvLyBEb2Vzbid0IGhhcHBlbiBkdXJpbmcgdGVzdHMgb3IgZXhhbXBsZXMuXG4gICAgICAgIC8vIElzIGl0IHJlYWxseSBpbXBvc3NpYmxlIG9yIGNvdWxkIGl0IGV2ZW50dWFsbHkgaGFwcGVuP1xuICAgICAgICAvLyBIb3cgdG8gaGFuZGxlIGl0IGlmIGl0IGRvZXM/IFRoZSB0eXBlcyBndWFyYW50ZWUgbm9uLW51bGxhYmxlIGl0ZW1zLlxuICAgICAgICBjb25zb2xlLmVycm9yKFwiSWYgeW91IHNlZSB0aGlzLCByZXBvcnQgaXQgcGxlYXNlLlwiKTtcbiAgICAgIH0gZWxzZSBpZiAoIW5ld0lkc1tpZF0pIHtcbiAgICAgICAgcmVtb3ZlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgcmVtb3ZlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIHRoaXMuX2lkcy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoICs9IGFkZGVkSWRzLmxlbmd0aCAtIHJlbW92ZWRJZHMubGVuZ3RoO1xuXG4gICAgLy8gdHJpZ2dlciBldmVudHNcbiAgICBpZiAoYWRkZWRJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyKFwiYWRkXCIsIHsgaXRlbXM6IGFkZGVkSWRzIH0pO1xuICAgIH1cbiAgICBpZiAocmVtb3ZlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJyZW1vdmVcIiwgeyBpdGVtczogcmVtb3ZlZElkcywgb2xkRGF0YTogcmVtb3ZlZEl0ZW1zIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KCk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W107XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkOiBJZCk6IG51bGwgfCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+O1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZDogSWQsXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNBcnJheTxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWQ6IElkLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zT2JqZWN0PEl0ZW0+XG4gICk6IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkOiBJZCxcbiAgICBvcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOiBudWxsIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPiB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KGlkczogSWRbXSk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXTtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zQXJyYXk8SXRlbT5cbiAgKTogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdO1xuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldChcbiAgICBpZHM6IElkW10sXG4gICAgb3B0aW9uczogRGF0YUludGVyZmFjZUdldE9wdGlvbnNPYmplY3Q8SXRlbT5cbiAgKTogUmVjb3JkPElkLCBGdWxsSXRlbTxJdGVtLCBJZFByb3A+PjtcbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXQoXG4gICAgaWRzOiBJZFtdLFxuICAgIG9wdGlvbnM6IERhdGFJbnRlcmZhY2VHZXRPcHRpb25zPEl0ZW0+XG4gICk6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSB8IFJlY29yZDxJZCwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj47XG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGlkczogSWQgfCBJZFtdLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPlxuICApOlxuICAgIHwgbnVsbFxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPlxuICAgIHwgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdXG4gICAgfCBSZWNvcmQ8SWQsIEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD4+O1xuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0KFxuICAgIGZpcnN0PzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT4gfCBJZCB8IElkW10sXG4gICAgc2Vjb25kPzogRGF0YUludGVyZmFjZUdldE9wdGlvbnM8SXRlbT5cbiAgKTpcbiAgICB8IG51bGxcbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5cbiAgICB8IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXVxuICAgIHwgUmVjb3JkPHN0cmluZywgRnVsbEl0ZW08SXRlbSwgSWRQcm9wPj4ge1xuICAgIGlmICh0aGlzLl9kYXRhID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIHBhcnNlIHRoZSBhcmd1bWVudHNcbiAgICBsZXQgaWRzOiBJZCB8IElkW10gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgb3B0aW9uczogYW55O1xuICAgIGlmIChpc0lkKGZpcnN0KSB8fCBBcnJheS5pc0FycmF5KGZpcnN0KSkge1xuICAgICAgaWRzID0gZmlyc3Q7XG4gICAgICBvcHRpb25zID0gc2Vjb25kO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0gZmlyc3Q7XG4gICAgfVxuXG4gICAgLy8gZXh0ZW5kIHRoZSBvcHRpb25zIHdpdGggdGhlIGRlZmF1bHQgb3B0aW9ucyBhbmQgcHJvdmlkZWQgb3B0aW9uc1xuICAgIGNvbnN0IHZpZXdPcHRpb25zOiBEYXRhSW50ZXJmYWNlR2V0T3B0aW9uczxJdGVtPiA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHRoaXMuX29wdGlvbnMsXG4gICAgICBvcHRpb25zXG4gICAgKTtcblxuICAgIC8vIGNyZWF0ZSBhIGNvbWJpbmVkIGZpbHRlciBtZXRob2Qgd2hlbiBuZWVkZWRcbiAgICBjb25zdCB0aGlzRmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgY29uc3Qgb3B0aW9uc0ZpbHRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXI7XG4gICAgaWYgKHRoaXNGaWx0ZXIgJiYgb3B0aW9uc0ZpbHRlcikge1xuICAgICAgdmlld09wdGlvbnMuZmlsdGVyID0gKGl0ZW0pOiBib29sZWFuID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXNGaWx0ZXIoaXRlbSkgJiYgb3B0aW9uc0ZpbHRlcihpdGVtKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGlkcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXQodmlld09wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXQoaWRzLCB2aWV3T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRJZHMob3B0aW9ucz86IERhdGFJbnRlcmZhY2VHZXRJZHNPcHRpb25zPEl0ZW0+KTogSWRbXSB7XG4gICAgaWYgKHRoaXMuX2RhdGEubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZWZhdWx0RmlsdGVyID0gdGhpcy5fb3B0aW9ucy5maWx0ZXI7XG4gICAgICBjb25zdCBvcHRpb25zRmlsdGVyID0gb3B0aW9ucyAhPSBudWxsID8gb3B0aW9ucy5maWx0ZXIgOiBudWxsO1xuICAgICAgbGV0IGZpbHRlcjogRGF0YUludGVyZmFjZUdldElkc09wdGlvbnM8SXRlbT5bXCJmaWx0ZXJcIl07XG5cbiAgICAgIGlmIChvcHRpb25zRmlsdGVyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgZmlsdGVyID0gKGl0ZW0pOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIgPSBvcHRpb25zRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXRJZHMoe1xuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgb3JkZXI6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBmb3JFYWNoKFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiB2b2lkLFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlRm9yRWFjaE9wdGlvbnM8SXRlbT5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSB0aGlzLl9vcHRpb25zLmZpbHRlcjtcbiAgICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgICAgbGV0IGZpbHRlcjogdW5kZWZpbmVkIHwgKChpdGVtOiBJdGVtKSA9PiBib29sZWFuKTtcblxuICAgICAgaWYgKG9wdGlvbnNGaWx0ZXIpIHtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgICBmaWx0ZXIgPSBmdW5jdGlvbiAoaXRlbTogSXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGaWx0ZXIoaXRlbSkgJiYgb3B0aW9uc0ZpbHRlcihpdGVtKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbHRlciA9IG9wdGlvbnNGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlciA9IGRlZmF1bHRGaWx0ZXI7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RhdGEuZm9yRWFjaChjYWxsYmFjaywge1xuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgb3JkZXI6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmRlcixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgbWFwPFQ+KFxuICAgIGNhbGxiYWNrOiAoaXRlbTogSXRlbSwgaWQ6IElkKSA9PiBULFxuICAgIG9wdGlvbnM/OiBEYXRhSW50ZXJmYWNlTWFwT3B0aW9uczxJdGVtLCBUPlxuICApOiBUW10ge1xuICAgIHR5cGUgRmlsdGVyID0gTm9uTnVsbGFibGU8RGF0YUludGVyZmFjZU1hcE9wdGlvbnM8SXRlbSwgVD5bXCJmaWx0ZXJcIl0+O1xuXG4gICAgaWYgKHRoaXMuX2RhdGEpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXIgPSB0aGlzLl9vcHRpb25zLmZpbHRlcjtcbiAgICAgIGNvbnN0IG9wdGlvbnNGaWx0ZXIgPSBvcHRpb25zICYmIG9wdGlvbnMuZmlsdGVyO1xuICAgICAgbGV0IGZpbHRlcjogdW5kZWZpbmVkIHwgRmlsdGVyO1xuXG4gICAgICBpZiAob3B0aW9uc0ZpbHRlcikge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgIGZpbHRlciA9IChpdGVtKTogUmV0dXJuVHlwZTxGaWx0ZXI+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmlsdGVyKGl0ZW0pICYmIG9wdGlvbnNGaWx0ZXIoaXRlbSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIgPSBvcHRpb25zRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXIgPSBkZWZhdWx0RmlsdGVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZGF0YS5tYXAoY2FsbGJhY2ssIHtcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIG9yZGVyOiBvcHRpb25zICYmIG9wdGlvbnMub3JkZXIsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0RGF0YVNldCgpOiBEYXRhU2V0PEl0ZW0sIElkUHJvcD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmdldERhdGFTZXQoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgc3RyZWFtKGlkcz86IEl0ZXJhYmxlPElkPik6IERhdGFTdHJlYW08SXRlbT4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLnN0cmVhbShcbiAgICAgIGlkcyB8fCB7XG4gICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiB0aGlzLl9pZHMua2V5cy5iaW5kKHRoaXMuX2lkcyksXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGluc3RhbmNlIHVudXNhYmxlIHByaW9yIHRvIGdhcmJhZ2UgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGludGVudGlvbiBvZiB0aGlzIG1ldGhvZCBpcyB0byBoZWxwIGRpc2NvdmVyIHNjZW5hcmlvcyB3aGVyZSB0aGUgZGF0YVxuICAgKiB2aWV3IGlzIGJlaW5nIHVzZWQgd2hlbiB0aGUgcHJvZ3JhbW1lciB0aGlua3MgaXQgaGFzIGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWRcbiAgICogYWxyZWFkeS4gSXQncyBzdHJpY3RlciB2ZXJzaW9uIG9mIGBkYXRhVmlldy5zZXREYXRhKG51bGwpYC5cbiAgICovXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhPy5vZmYpIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmKFwiKlwiLCB0aGlzLl9saXN0ZW5lcik7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IFwiVGhpcyBkYXRhIHZpZXcgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi5cIjtcbiAgICBjb25zdCByZXBsYWNlbWVudCA9IHtcbiAgICAgIGdldDogKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9LFxuICAgICAgc2V0OiAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMoRGF0YVZpZXcucHJvdG90eXBlKSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgcmVwbGFjZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBsaXN0ZW5lci4gV2lsbCBwcm9wYWdhdGUgYWxsIGV2ZW50cyBmcm9tIHRoZSBjb25uZWN0ZWQgZGF0YSBzZXQgdG8gdGhlIHN1YnNjcmliZXJzIG9mIHRoZSBEYXRhVmlldywgYnV0IHdpbGwgZmlsdGVyIHRoZSBpdGVtcyBhbmQgb25seSB0cmlnZ2VyIHdoZW4gdGhlcmUgYXJlIGNoYW5nZXMgaW4gdGhlIGZpbHRlcmVkIGRhdGEgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9mIHRoZSBldmVudC5cbiAgICogQHBhcmFtIHNlbmRlcklkIC0gSWQgc3VwcGxpZWQgYnkgdGhlIHNlbmRlci5cbiAgICovXG4gIHByaXZhdGUgX29uRXZlbnQ8RU4gZXh0ZW5kcyBFdmVudE5hbWU+KFxuICAgIGV2ZW50OiBFTixcbiAgICBwYXJhbXM6IEV2ZW50UGF5bG9hZHM8SXRlbSwgSWRQcm9wPltFTl0sXG4gICAgc2VuZGVySWQ/OiBJZCB8IG51bGxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy5pdGVtcyB8fCAhdGhpcy5fZGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlkcyA9IHBhcmFtcy5pdGVtcztcbiAgICBjb25zdCBhZGRlZElkczogSWRbXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRJZHM6IElkW10gPSBbXTtcbiAgICBjb25zdCByZW1vdmVkSWRzOiBJZFtdID0gW107XG4gICAgY29uc3Qgb2xkSXRlbXM6IEZ1bGxJdGVtPEl0ZW0sIElkUHJvcD5bXSA9IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRJdGVtczogRnVsbEl0ZW08SXRlbSwgSWRQcm9wPltdID0gW107XG4gICAgY29uc3QgcmVtb3ZlZEl0ZW1zOiBGdWxsSXRlbTxJdGVtLCBJZFByb3A+W10gPSBbXTtcblxuICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgIGNhc2UgXCJhZGRcIjpcbiAgICAgICAgLy8gZmlsdGVyIHRoZSBpZHMgb2YgdGhlIGFkZGVkIGl0ZW1zXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBpZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGlkc1tpXTtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXQoaWQpO1xuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLl9pZHMuYWRkKGlkKTtcbiAgICAgICAgICAgIGFkZGVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwidXBkYXRlXCI6XG4gICAgICAgIC8vIGRldGVybWluZSB0aGUgZXZlbnQgZnJvbSB0aGUgdmlld3Mgdmlld3BvaW50OiBhbiB1cGRhdGVkXG4gICAgICAgIC8vIGl0ZW0gY2FuIGJlIGFkZGVkLCB1cGRhdGVkLCBvciByZW1vdmVkIGZyb20gdGhpcyB2aWV3LlxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0KGlkKTtcblxuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgdXBkYXRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgdXBkYXRlZEl0ZW1zLnB1c2goXG4gICAgICAgICAgICAgICAgKHBhcmFtcyBhcyBVcGRhdGVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikuZGF0YVtpXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBvbGRJdGVtcy5wdXNoKFxuICAgICAgICAgICAgICAgIChwYXJhbXMgYXMgVXBkYXRlRXZlbnRQYXlsb2FkPEl0ZW0sIElkUHJvcD4pLm9sZERhdGFbaV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX2lkcy5hZGQoaWQpO1xuICAgICAgICAgICAgICBhZGRlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2lkcy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICByZW1vdmVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgICAgICByZW1vdmVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgICAocGFyYW1zIGFzIFVwZGF0ZUV2ZW50UGF5bG9hZDxJdGVtLCBJZFByb3A+KS5vbGREYXRhW2ldXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBub3RoaW5nIGludGVyZXN0aW5nIGZvciBtZSA6LShcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInJlbW92ZVwiOlxuICAgICAgICAvLyBmaWx0ZXIgdGhlIGlkcyBvZiB0aGUgcmVtb3ZlZCBpdGVtc1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBpZHNbaV07XG4gICAgICAgICAgaWYgKHRoaXMuX2lkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICB0aGlzLl9pZHMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIHJlbW92ZWRJZHMucHVzaChpZCk7XG4gICAgICAgICAgICByZW1vdmVkSXRlbXMucHVzaChcbiAgICAgICAgICAgICAgKHBhcmFtcyBhcyBSZW1vdmVFdmVudFBheWxvYWQ8SXRlbSwgSWRQcm9wPikub2xkRGF0YVtpXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCArPSBhZGRlZElkcy5sZW5ndGggLSByZW1vdmVkSWRzLmxlbmd0aDtcblxuICAgIGlmIChhZGRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXCJhZGRcIiwgeyBpdGVtczogYWRkZWRJZHMgfSwgc2VuZGVySWQpO1xuICAgIH1cbiAgICBpZiAodXBkYXRlZElkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgIFwidXBkYXRlXCIsXG4gICAgICAgIHsgaXRlbXM6IHVwZGF0ZWRJZHMsIG9sZERhdGE6IG9sZEl0ZW1zLCBkYXRhOiB1cGRhdGVkSXRlbXMgfSxcbiAgICAgICAgc2VuZGVySWRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZW1vdmVkSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgXCJyZW1vdmVcIixcbiAgICAgICAgeyBpdGVtczogcmVtb3ZlZElkcywgb2xkRGF0YTogcmVtb3ZlZEl0ZW1zIH0sXG4gICAgICAgIHNlbmRlcklkXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IFBhcnRJdGVtIH0gZnJvbSBcIi4vZGF0YS1pbnRlcmZhY2VcIjtcbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tIFwiLi9kYXRhLXNldFwiO1xuXG4vKipcbiAqIENoZWNrIHRoYXQgZ2l2ZW4gdmFsdWUgaXMgY29tcGF0aWJsZSB3aXRoIFZpcyBEYXRhIFNldCBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIGlkUHJvcCAtIFRoZSBleHBlY3RlZCBwcm9wZXJ0eSB0byBjb250YWluIGl0ZW0gaWQuXG4gKiBAcGFyYW0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0ZXN0ZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIGFsbCBleHBlY3RlZCB2YWx1ZXMgYW5kIG1ldGhvZHMgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YVNldExpa2U8XG4gIEl0ZW0gZXh0ZW5kcyBQYXJ0SXRlbTxJZFByb3A+LFxuICBJZFByb3AgZXh0ZW5kcyBzdHJpbmcgPSBcImlkXCJcbj4oaWRQcm9wOiBJZFByb3AsIHY6IGFueSk6IHYgaXMgRGF0YVNldDxJdGVtLCBJZFByb3A+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHYgIT09IG51bGwgJiZcbiAgICBpZFByb3AgPT09IHYuaWRQcm9wICYmXG4gICAgdHlwZW9mIHYuYWRkID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5jbGVhciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZGlzdGluY3QgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmZvckVhY2ggPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0RGF0YVNldCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYuZ2V0SWRzID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5sZW5ndGggPT09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2Ygdi5tYXAgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm1heCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubWluID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vZmYgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm9uID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5yZW1vdmUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnNldE9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LnN0cmVhbSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYudXBkYXRlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi51cGRhdGVPbmx5ID09PSBcImZ1bmN0aW9uXCJcbiAgKTtcbn1cbiIsICJpbXBvcnQgeyBEYXRhVmlldyB9IGZyb20gXCIuL2RhdGEtdmlld1wiO1xuaW1wb3J0IHsgUGFydEl0ZW0gfSBmcm9tIFwiLi9kYXRhLWludGVyZmFjZVwiO1xuaW1wb3J0IHsgaXNEYXRhU2V0TGlrZSB9IGZyb20gXCIuL2RhdGEtc2V0LWNoZWNrXCI7XG5cbi8qKlxuICogQ2hlY2sgdGhhdCBnaXZlbiB2YWx1ZSBpcyBjb21wYXRpYmxlIHdpdGggVmlzIERhdGEgVmlldyBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIGlkUHJvcCAtIFRoZSBleHBlY3RlZCBwcm9wZXJ0eSB0byBjb250YWluIGl0ZW0gaWQuXG4gKiBAcGFyYW0gdiAtIFRoZSB2YWx1ZSB0byBiZSB0ZXN0ZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIGFsbCBleHBlY3RlZCB2YWx1ZXMgYW5kIG1ldGhvZHMgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YVZpZXdMaWtlPFxuICBJdGVtIGV4dGVuZHMgUGFydEl0ZW08SWRQcm9wPixcbiAgSWRQcm9wIGV4dGVuZHMgc3RyaW5nID0gXCJpZFwiXG4+KGlkUHJvcDogSWRQcm9wLCB2OiBhbnkpOiB2IGlzIERhdGFWaWV3PEl0ZW0sIElkUHJvcD4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmXG4gICAgdiAhPT0gbnVsbCAmJlxuICAgIGlkUHJvcCA9PT0gdi5pZFByb3AgJiZcbiAgICB0eXBlb2Ygdi5mb3JFYWNoID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5nZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldERhdGFTZXQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2LmdldElkcyA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIHYubGVuZ3RoID09PSBcIm51bWJlclwiICYmXG4gICAgdHlwZW9mIHYubWFwID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5vZmYgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiB2Lm9uID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygdi5zdHJlYW0gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIGlzRGF0YVNldExpa2UoaWRQcm9wLCB2LmdldERhdGFTZXQoKSlcbiAgKTtcbn1cbiIsICJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uIH0gZnJvbSBcIkBlbGFzdGljL2V1aS9zcmMvY29tcG9uZW50cy9jb21ib19ib3gvdHlwZXNcIjtcbmltcG9ydCB7XG4gIEV1aUNvbWJvQm94LFxuICBldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQsXG4gIGV1aVBhbGV0dGVDb2xvckJsaW5kLFxuICBFdWlIaWdobGlnaHQsXG4gIEV1aUhlYWx0aCxcbiAgRXVpUHJvdmlkZXIsXG4gIEV1aUljb25cbn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi4vTWV0YWRhdGFXaWRnZXQvQnJlYWRjcnVtYldpZGdldC9CcmVhZGNydW1iUHJlc2VudGF0aW9uXCI7XG5cbi8qKlxuICogQSBSZWFjdCBjb21wb25lbnQgdG8gcHJvdmlkZSBBdXRvc3VnZ2VzdGlvbiBiYXNlZCBvbiBTZW1Mb29rUC5cbiAqL1xuZnVuY3Rpb24gQXV0b2NvbXBsZXRlV2lkZ2V0KHByb3BzOiBBdXRvY29tcGxldGVXaWRnZXRQcm9wcykge1xuICBjb25zdCB7XG4gICAgYXBpLFxuICAgIHBhcmFtZXRlcixcbiAgICBoYXNTaG9ydFNlbGVjdGVkTGFiZWwsXG4gICAgYWxsb3dDdXN0b21UZXJtcyxcbiAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQsXG4gICAgcHJlc2VsZWN0ZWQsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgc2luZ2xlU2VsZWN0aW9uLFxuICAgIHNpbmdsZVN1Z2dlc3Rpb25Sb3csXG4gICAgdHM0bmZkaUdhdGV3YXkgPSBmYWxzZSxcbiAgICBzaG93QXBpU291cmNlID0gdHJ1ZSxcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3QgdmlzQ29sb3JzID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKTtcbiAgY29uc3QgdmlzQ29sb3JzQmVoaW5kVGV4dCA9IGV1aVBhbGV0dGVDb2xvckJsaW5kQmVoaW5kVGV4dCgpO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBzZWFyY2ggdmFsdWVcbiAgICovXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKTtcblxuICAvKipcbiAgICogVGhlIHNldCBvZiBhdmFpbGFibGUgb3B0aW9ucy5zXG4gICAqL1xuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+Pj4oW10pO1xuXG4gIC8qKlxuICAgKiBTdG9yZSBjdXJyZW50IHNldCBvZiBzZWxlY3QgT3B0aW9ucy4gQSBzdWJzZXQgb2Ygb3B0aW9ucy5cbiAgICovXG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc10gPSB1c2VTdGF0ZTxBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+Pj4oW10pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCByZW5kZXJPcHRpb24gPSAob3B0aW9uLCBzZWFyY2hWYWx1ZSkgPT4ge1xuICAgIGNvbnN0IHsgbGFiZWwsIHZhbHVlIH0gPSBvcHRpb247XG4gICAgY29uc3QgZG90Q29sb3JJbmRleCA9IHZpc0NvbG9yc0JlaGluZFRleHQuaW5kZXhPZih2YWx1ZS50eXBlID09PSBcImNsYXNzXCIgPyB2aXNDb2xvcnNCZWhpbmRUZXh0WzVdIDpcbiAgICAgIHZhbHVlLnR5cGUgPT09IFwiaW5kaXZpZHVhbFwiID8gdmlzQ29sb3JzQmVoaW5kVGV4dFszXSA6XG4gICAgICAgIHZhbHVlLnR5cGUgPT09IFwicHJvcGVydHlcIiA/IHZpc0NvbG9yc0JlaGluZFRleHRbMV0gOiBcIlwiKTtcbiAgICBjb25zdCBkb3RDb2xvciA9IHZpc0NvbG9yc1tkb3RDb2xvckluZGV4XTtcblxuICAgIGlmIChhbGxvd0N1c3RvbVRlcm1zICYmIHZhbHVlLmlyaSA9PSBcIlwiKSB7Ly8gaWYgd2UgaGF2ZSBhIGN1c3RvbSB0ZXJtLCBqdXN0IHNob3cgdGhlIGxhYmVsXG4gICAgICByZXR1cm4gbGFiZWw7XG4gICAgfVxuXG4gICAgbGV0IHByZWZpeCA9ICh2YWx1ZS50eXBlID09PSBcIm9udG9sb2d5XCIpXG4gICAgICA/IFwiUHJlZml4OiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWVcbiAgICAgIDogXCJQcmVmaXggPiBTaG9ydCBmb3JtOiBcIiArIHZhbHVlLm9udG9sb2d5X25hbWUgKyBcIiA+IFwiICsgdmFsdWUuc2hvcnRfZm9ybTtcblxuICAgIGxldCBob3ZlclRleHQgPSBgVHlwZTogJHt2YWx1ZS50eXBlfVxcblxcbkxhYmVsOiAke3ZhbHVlLmxhYmVsfVxcblxcbiR7cHJlZml4fWA7XG4gICAgaWYgKHZhbHVlLmRlc2NyaXB0aW9uICE9IHVuZGVmaW5lZCkge1xuICAgICAgaG92ZXJUZXh0ICs9IGBcXG5cXG5EZXNjcmlwdGlvbjogJHt2YWx1ZS5kZXNjcmlwdGlvbn1gO1xuICAgIH1cbiAgICBpZiAoc2hvd0FwaVNvdXJjZSAmJiB2YWx1ZS5zb3VyY2VfdXJsICYmIHZhbHVlLnNvdXJjZV91cmwgIT09IFwiXCIpe1xuICAgICAgaG92ZXJUZXh0ICs9IFwiXFxuXFxuU291cmNlOiBcIiArIHZhbHVlLnNvdXJjZTtcbiAgICAgIGhvdmVyVGV4dCArPSBcIlxcblxcblNvdXJjZSBVUkw6IFwiICsgdmFsdWUuc291cmNlX3VybDtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJPbnRvbG9neSA9ICgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlIZWFsdGhcbiAgICAgICAgICBjb2xvcj17ZG90Q29sb3J9PlxuICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxFdWlIaWdobGlnaHQgc2VhcmNoPXtzZWFyY2hWYWx1ZX0+e3ZhbHVlLmxhYmVsfTwvRXVpSGlnaGxpZ2h0PlxuICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAge3ZhbHVlLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvRXVpSGVhbHRoPlxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVuZGVyRW50aXR5V2l0aERlc2NyaXB0aW9uID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHNwYW4gdGl0bGU9e2hvdmVyVGV4dH0gc3R5bGU9e3sgaGVpZ2h0OiAyMDAgKyBcInB4XCIgfX0+XG4gICAgICAgICAgICA8RXVpSGVhbHRoXG4gICAgICAgICAgICAgIGNvbG9yPXtkb3RDb2xvcn0+XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxFdWlIaWdobGlnaHQgc2VhcmNoPXtzZWFyY2hWYWx1ZX0+e3ZhbHVlLmxhYmVsfTwvRXVpSGlnaGxpZ2h0PlxuICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XG4gICAgICAgICAgICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neU5hbWU9e3ZhbHVlLm9udG9sb2d5X25hbWV9XG4gICAgICAgICAgICAgICAgICAgIHNob3J0Rm9ybT17dmFsdWUuc2hvcnRfZm9ybX1cbiAgICAgICAgICAgICAgICAgICAgY29sb3JGaXJzdD17XCJwcmltYXJ5XCJ9XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yU2Vjb25kPXtcInN1Y2Nlc3NcIn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8RXVpSWNvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPXtcImlJbkNpcmNsZVwifVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiA1IH19XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtob3ZlclRleHR9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgeyFzaW5nbGVTdWdnZXN0aW9uUm93ICYmIHZhbHVlLmRlc2NyaXB0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICB7dmFsdWUuZGVzY3JpcHRpb24uc3Vic3RyaW5nKDAsIDQwKSArIFwiLi4uXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9FdWlIZWFsdGg+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICk7XG4gICAgfTtcblxuICAgIHJldHVybiB2YWx1ZS50eXBlID09PSBcIm9udG9sb2d5XCIgPyByZW5kZXJPbnRvbG9neSgpIDogcmVuZGVyRW50aXR5V2l0aERlc2NyaXB0aW9uKCk7XG4gIH07XG5cbiAgICAvKipcbiAgICAgKiBvbiBtb3VudDogZmV0Y2hlcyB0ZXJtIGZvciBwcmVzZWxlY3RlZFxuICAgICAqIHNldHMgaXRzIGxhYmVsIG9yIHNldHMgYSBnaXZlbiBsYWJlbCBpZiBubyBpcmkgaXMgcHJvdmlkZWQvdGhlIGdpdmVuIGlyaSBjYW5ub3QgYmUgcmVzb2x2ZWRcbiAgICAgKiBvbmx5IGlmIGFsbG93Q3VzdG9tVGVybXMgaXMgdHJ1ZVxuICAgICAqL1xuICAgIGNvbnN0IHtcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdPbk1vdW50XG4gICAgfSA9IHVzZVF1ZXJ5KFxuICAgICAgICBbXG4gICAgICAgICAgICBcIm9uTW91bnRcIixcbiAgICAgICAgICAgIHByZXNlbGVjdGVkXG4gICAgICAgIF0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGxldCBwcmVzZWxlY3RlZFZhbHVlczogRXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55PltdID0gW107XG5cbiAgICAgIGxldCB1bmlxdWVWYWx1ZXMgPSBbLi4ubmV3IFNldChwcmVzZWxlY3RlZCldXG4gICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgICAgIHJldHVybiAoYWxsb3dDdXN0b21UZXJtcyAmJiBvcHRpb24ubGFiZWwpIHx8IG9wdGlvbi5pcmk7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodW5pcXVlVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbikgdW5pcXVlVmFsdWVzID0gW3VuaXF1ZVZhbHVlc1swXV07XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB1bmlxdWVWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbiAmJiBvcHRpb24uaXJpICYmIG9wdGlvbi5pcmkuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBvbHNBcGkuZ2V0U2VsZWN0RGF0YShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cXVlcnk6IG9wdGlvbi5pcml9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHM0bmZkaUdhdGV3YXlcbiAgICAgICAgICAgICAgICAgICAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvcGVydGllcy5tYXAoKHNlbGVjdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLmlyaSA9PT0gc2VsZWN0aW9uLmdldElyaSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VsZWN0ZWRWYWx1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhYmVsIHRvIGRpc3BsYXkgd2l0aGluIHRoZSBjb21ib2JveCBlaXRoZXIgcmF3IHZhbHVlIG9yIGdlbmVyYXRlZCBvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gI3JlbmRlck9wdGlvbigpIGlzIHVzZWQgdG8gZGlzcGxheSBkdXJpbmcgc2VsZWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogaGFzU2hvcnRTZWxlY3RlZExhYmVsID8gc2VsZWN0aW9uLmdldExhYmVsKCkgOiBnZW5lcmF0ZURpc3BsYXlMYWJlbChzZWxlY3Rpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZXkgdG8gZGlzdGluZ3Vpc2ggdGhlIG9wdGlvbnMgKGVzcGVjaWFsbHkgdGhvc2Ugd2l0aCBzYW1lIGxhYmVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHNlbGVjdGlvbi5nZXRJcmkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlyaTogc2VsZWN0aW9uLmdldElyaSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHNlbGVjdGlvbi5nZXRMYWJlbCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogc2VsZWN0aW9uLmdldE9udG9sb2d5SWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHNlbGVjdGlvbi5nZXRUeXBlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9mb3JtOiBzZWxlY3Rpb24uZ2V0U2hvcnRGb3JtKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc2VsZWN0aW9uLmdldERlc2NyaXB0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHNlbGVjdGlvbi5nZXRBcGlTb3VyY2VOYW1lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfdXJsOiBzZWxlY3Rpb24uZ2V0QXBpU291cmNlRW5kcG9pbnQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbiAmJiBwcmVzZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAxKSBwcmVzZWxlY3RlZFZhbHVlcyA9IFtwcmVzZWxlY3RlZFZhbHVlc1swXV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uICYmIG9wdGlvbi5sYWJlbCAmJiBhbGxvd0N1c3RvbVRlcm1zKSB7XG4gICAgICAgICAgICBwcmVzZWxlY3RlZFZhbHVlcy5wdXNoKHtcbiAgICAgICAgICAgICAgbGFiZWw6IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICAgICAga2V5OiBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgaXJpOiBcIlwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBcIlwiLFxuICAgICAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJcIixcbiAgICAgICAgICAgICAgICBzaG9ydF9mb3JtOiBcIlwiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogXCJcIixcbiAgICAgICAgICAgICAgICBzb3VyY2VfdXJsOiBcIlwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNldE9wdGlvbnMocHJlc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgICBzZXRTZWxlY3RlZE9wdGlvbnMocHJlc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcblxuICAvKipcbiAgICogZmV0Y2hlcyBuZXcgb3B0aW9ucyB3aGVuIHNlYXJjaFZhbHVlIGNoYW5nZXNcbiAgICovXG4gIGNvbnN0IHtcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1Rlcm1zXG4gIH0gPSB1c2VRdWVyeShcbiAgICBbXG4gICAgICBcIm9uU2VhcmNoQ2hhbmdlXCIsXG4gICAgICBzZWFyY2hWYWx1ZVxuICAgIF0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNlYXJjaFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRTZWxlY3REYXRhKFxuICAgICAgICAgIHsgcXVlcnk6IHNlYXJjaFZhbHVlIH0sXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgdHM0bmZkaUdhdGV3YXlcbiAgICAgICAgKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgc2V0T3B0aW9ucyhyZXNwb25zZS5wcm9wZXJ0aWVzLm1hcCgoc2VsZWN0aW9uOiBhbnkpID0+IChcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGxhYmVsIHRvIGRpc3BsYXkgd2l0aGluIHRoZSBjb21ib2JveCBlaXRoZXIgcmF3IHZhbHVlIG9yIGdlbmVyYXRlZCBvbmVcbiAgICAgICAgICAgICAgICAvLyAjcmVuZGVyT3B0aW9uKCkgaXMgdXNlZCB0byBkaXNwbGF5IGR1cmluZyBzZWxlY3Rpb24uXG4gICAgICAgICAgICAgICAgbGFiZWw6IGhhc1Nob3J0U2VsZWN0ZWRMYWJlbCA/IHNlbGVjdGlvbi5nZXRMYWJlbCgpIDogZ2VuZXJhdGVEaXNwbGF5TGFiZWwoc2VsZWN0aW9uKSxcbiAgICAgICAgICAgICAgICAvLyBrZXkgdG8gZGlzdGluZ3Vpc2ggdGhlIG9wdGlvbnMgKGVzcGVjaWFsbHkgdGhvc2Ugd2l0aCBzYW1lIGxhYmVsKVxuICAgICAgICAgICAgICAgIGtleTogc2VsZWN0aW9uLmdldElyaSgpLFxuICAgICAgICAgICAgICAgIC8vIHZhbHVlcyB0byBwYXNzIHRvIGNsaWVudHNcbiAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgaXJpOiBzZWxlY3Rpb24uZ2V0SXJpKCksXG4gICAgICAgICAgICAgICAgICBsYWJlbDogc2VsZWN0aW9uLmdldExhYmVsKCksXG4gICAgICAgICAgICAgICAgICBvbnRvbG9neV9uYW1lOiBzZWxlY3Rpb24uZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICAgICAgICAgICAgdHlwZTogc2VsZWN0aW9uLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgICAgIHNob3J0X2Zvcm06IHNlbGVjdGlvbi5nZXRTaG9ydEZvcm0oKSxcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzZWxlY3Rpb24uZ2V0RGVzY3JpcHRpb24oKSxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZTogc2VsZWN0aW9uLmdldEFwaVNvdXJjZU5hbWUoKSxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZV91cmw6IHNlbGVjdGlvbi5nZXRBcGlTb3VyY2VFbmRwb2ludCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICk7XG5cbiAgLyoqXG4gICAqIE9uY2UgdGhlIHNldCBvZiBzZWxlY3RlZCBvcHRpb25zIGNoYW5nZXMsIHBhc3MgdGhlIGV2ZW50IGJ5IGludm9raW5nIHRoZSBwYXNzZWQgZnVuY3Rpb24uXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudChcbiAgICAgIHNlbGVjdGVkT3B0aW9ucy5tYXAoKHgpID0+IHtcbiAgICAgICAgLy8gcmV0dXJuIHRoZSB2YWx1ZSBvYmplY3Qgd2l0aCB0aGUgcmF3IHZhbHVlcyBmcm9tIE9MUyB0byBhIGNsaWVudFxuICAgICAgICBpZiAoYWxsb3dDdXN0b21UZXJtcyAmJiB4LnZhbHVlLmlyaSA9PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgICAgIGxhYmVsOiB4LmxhYmVsLFxuICAgICAgICAgICAgb250b2xvZ3lfbmFtZTogXCJcIixcbiAgICAgICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgICAgICBzaG9ydF9mb3JtOiB4LnZhbHVlLnNob3J0X2Zvcm0sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogeC52YWx1ZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNvdXJjZTogeC52YWx1ZS5zb3VyY2VcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHgudmFsdWUuaXJpID09IFwiXCIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiBcIlwiLFxuICAgICAgICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICAgICAgICBvbnRvbG9neV9uYW1lOiBcIlwiLFxuICAgICAgICAgICAgdHlwZTogXCJcIixcbiAgICAgICAgICAgIHNob3J0X2Zvcm06IFwiXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJcIixcbiAgICAgICAgICAgIHNvdXJjZTogXCJcIlxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogeC52YWx1ZS5pcmksXG4gICAgICAgICAgICBsYWJlbDogeC52YWx1ZS5sYWJlbCxcbiAgICAgICAgICAgIG9udG9sb2d5X25hbWU6IHgudmFsdWUub250b2xvZ3lfbmFtZSxcbiAgICAgICAgICAgIHR5cGU6IHgudmFsdWUudHlwZSxcbiAgICAgICAgICAgIHNob3J0X2Zvcm06IHgudmFsdWUuc2hvcnRfZm9ybSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB4LnZhbHVlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgc291cmNlOiB4LnZhbHVlLnNvdXJjZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfSwgW3NlbGVjdGVkT3B0aW9uc10pO1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlRGlzcGxheUxhYmVsKGl0ZW06IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICBpdGVtLmxhYmVsICtcbiAgICAgIFwiIChcIiArXG4gICAgICBpdGVtLm9udG9sb2d5X25hbWUudG9VcHBlckNhc2UoKSArXG4gICAgICBcIiBcIiArXG4gICAgICBpdGVtLnNob3J0X2Zvcm0gK1xuICAgICAgXCIpXCJcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DaGFuZ2VIYW5kbGVyKG9wdGlvbnM6IEFycmF5PGFueT4pOiB2b2lkIHtcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNyZWF0ZU9wdGlvbkhhbmRsZXIoc2VhcmNoVmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IG5ld09wdGlvbiA9IHtcbiAgICAgIGxhYmVsOiBzZWFyY2hWYWx1ZSxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGlyaTogXCJcIixcbiAgICAgICAgbGFiZWw6IFwiXCIsXG4gICAgICAgIG9udG9sb2d5X25hbWU6IFwiXCIsXG4gICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgIHNob3J0X2Zvcm06IFwiXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgICBzb3VyY2U6IFwiXCJcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2V0T3B0aW9ucyhbLi4ub3B0aW9ucywgbmV3T3B0aW9uXSk7XG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zKHNpbmdsZVNlbGVjdGlvbiA/IFtuZXdPcHRpb25dIDogWy4uLnNlbGVjdGVkT3B0aW9ucywgbmV3T3B0aW9uXSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxFdWlDb21ib0JveFxuICAgICAgaXNDbGVhcmFibGVcbiAgICAgIGFyaWEtbGFiZWw9XCJzZWFyY2hCYXJcIlxuICAgICAgZnVsbFdpZHRoPXt0cnVlfVxuICAgICAgey4uLnJlc3R9IC8vIGl0ZW1zIGFib3ZlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgY2xpZW50XG4gICAgICBhc3luYz17dHJ1ZX1cbiAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nVGVybXMgfHwgaXNMb2FkaW5nT25Nb3VudH1cbiAgICAgIHNpbmdsZVNlbGVjdGlvbj17c2luZ2xlU2VsZWN0aW9uID8geyBhc1BsYWluVGV4dDogdHJ1ZSB9IDogZmFsc2V9XG4gICAgICBwbGFjZWhvbGRlcj17XG4gICAgICAgIHBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiBcIlNlYXJjaCBmb3IgYSBDb25jZXB0XCJcbiAgICAgIH1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBzZWxlY3RlZE9wdGlvbnM9e3NlbGVjdGVkT3B0aW9uc31cbiAgICAgIG9uU2VhcmNoQ2hhbmdlPXtzZXRTZWFyY2hWYWx1ZX1cbiAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZUhhbmRsZXJ9XG4gICAgICByZW5kZXJPcHRpb249e3JlbmRlck9wdGlvbn1cbiAgICAgIG9uQ3JlYXRlT3B0aW9uPXthbGxvd0N1c3RvbVRlcm1zID8gb25DcmVhdGVPcHRpb25IYW5kbGVyIDogdW5kZWZpbmVkfVxuICAgICAgcm93SGVpZ2h0PXtzaW5nbGVTdWdnZXN0aW9uUm93ID8gMzAgOiA1MH1cbiAgICAvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBdXRvY29tcGxldGUocHJvcHM6IEF1dG9jb21wbGV0ZVdpZGdldFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkQXV0b2NvbXBsZXRlV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRBdXRvY29tcGxldGVXaWRnZXQocHJvcHM6IEF1dG9jb21wbGV0ZVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPEF1dG9jb21wbGV0ZVdpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudD17cHJvcHMuc2VsZWN0aW9uQ2hhbmdlZEV2ZW50fVxuICAgICAgICAgIHByZXNlbGVjdGVkPXtwcm9wcy5wcmVzZWxlY3RlZH1cbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb249e3Byb3BzLnNpbmdsZVNlbGVjdGlvbn1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cHJvcHMucGxhY2Vob2xkZXJ9XG4gICAgICAgICAgaGFzU2hvcnRTZWxlY3RlZExhYmVsPXtwcm9wcy5oYXNTaG9ydFNlbGVjdGVkTGFiZWx9XG4gICAgICAgICAgYWxsb3dDdXN0b21UZXJtcz17cHJvcHMuYWxsb3dDdXN0b21UZXJtc31cbiAgICAgICAgICB0czRuZmRpR2F0ZXdheT17cHJvcHMudHM0bmZkaUdhdGV3YXl9XG4gICAgICAgICAgc2luZ2xlU3VnZ2VzdGlvblJvdz17cHJvcHMuc2luZ2xlU3VnZ2VzdGlvblJvd31cbiAgICAgICAgICBzaG93QXBpU291cmNlPXtwcm9wcy5zaG93QXBpU291cmNlfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IEF1dG9jb21wbGV0ZVdpZGdldCwgY3JlYXRlQXV0b2NvbXBsZXRlIH07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHwgKFxuICAgICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuY29uc3QgW2lzUmVhZGFibGVTdHJlYW0sIGlzUmVxdWVzdCwgaXNSZXNwb25zZSwgaXNIZWFkZXJzXSA9IFsnUmVhZGFibGVTdHJlYW0nLCAnUmVxdWVzdCcsICdSZXNwb25zZScsICdIZWFkZXJzJ10ubWFwKGtpbmRPZlRlc3QpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5jb25zdCB0cmltID0gKHN0cikgPT4gc3RyLnRyaW0gP1xuICBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCAnJyk7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHthbGxPd25LZXlzID0gZmFsc2V9ID0ge30pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaTtcbiAgbGV0IGw7XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmosIGtleSkge1xuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpXG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIGNvbnN0IHtjYXNlbGVzc30gPSBpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMgfHwge307XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBhc3NpZ25WYWx1ZSA9ICh2YWwsIGtleSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEtleSA9IGNhc2VsZXNzICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpIHx8IGtleTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRbdGFyZ2V0S2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHJlc3VsdFt0YXJnZXRLZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7XG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgICAgcmV0dXJuIHAxLnRvVXBwZXJDYXNlKCkgKyBwMjtcbiAgICB9XG4gICk7XG59O1xuXG4vKiBDcmVhdGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuICovXG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9ICgoe2hhc093blByb3BlcnR5fSkgPT4gKG9iaiwgcHJvcCkgPT4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKShPYmplY3QucHJvdG90eXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVnRXhwID0ga2luZE9mVGVzdCgnUmVnRXhwJyk7XG5cbmNvbnN0IHJlZHVjZURlc2NyaXB0b3JzID0gKG9iaiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gIGNvbnN0IHJlZHVjZWREZXNjcmlwdG9ycyA9IHt9O1xuXG4gIGZvckVhY2goZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgbGV0IHJldDtcbiAgICBpZiAoKHJldCA9IHJlZHVjZXIoZGVzY3JpcHRvciwgbmFtZSwgb2JqKSkgIT09IGZhbHNlKSB7XG4gICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSByZXQgfHwgZGVzY3JpcHRvcjtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgcmVkdWNlZERlc2NyaXB0b3JzKTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBpc0FycmF5KGFycmF5T3JTdHJpbmcpID8gZGVmaW5lKGFycmF5T3JTdHJpbmcpIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTtcblxuICByZXR1cm4gb2JqO1xufVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUgPSArdmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59XG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59XG5cbmNvbnN0IGdlbmVyYXRlU3RyaW5nID0gKHNpemUgPSAxNiwgYWxwaGFiZXQgPSBBTFBIQUJFVC5BTFBIQV9ESUdJVCkgPT4ge1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IHtsZW5ndGh9ID0gYWxwaGFiZXQ7XG4gIHdoaWxlIChzaXplLS0pIHtcbiAgICBzdHIgKz0gYWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIGxlbmd0aHwwXVxuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn1cblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG4vLyBvcmlnaW5hbCBjb2RlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRGlnaXRhbEJyYWluSlMvQXhpb3NQcm9taXNlL2Jsb2IvMTZkZWFiMTM3MTBlYzA5Nzc5OTIyMTMxZjNmYTU5NTQzMjBmODNhYi9saWIvdXRpbHMuanMjTDExLUwzNFxuXG5jb25zdCBfc2V0SW1tZWRpYXRlID0gKChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQsIHBvc3RNZXNzYWdlU3VwcG9ydGVkKSA9PiB7XG4gIGlmIChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQpIHtcbiAgICByZXR1cm4gc2V0SW1tZWRpYXRlO1xuICB9XG5cbiAgcmV0dXJuIHBvc3RNZXNzYWdlU3VwcG9ydGVkID8gKCh0b2tlbiwgY2FsbGJhY2tzKSA9PiB7XG4gICAgX2dsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoe3NvdXJjZSwgZGF0YX0pID0+IHtcbiAgICAgIGlmIChzb3VyY2UgPT09IF9nbG9iYWwgJiYgZGF0YSA9PT0gdG9rZW4pIHtcbiAgICAgICAgY2FsbGJhY2tzLmxlbmd0aCAmJiBjYWxsYmFja3Muc2hpZnQoKSgpO1xuICAgICAgfVxuICAgIH0sIGZhbHNlKTtcblxuICAgIHJldHVybiAoY2IpID0+IHtcbiAgICAgIGNhbGxiYWNrcy5wdXNoKGNiKTtcbiAgICAgIF9nbG9iYWwucG9zdE1lc3NhZ2UodG9rZW4sIFwiKlwiKTtcbiAgICB9XG4gIH0pKGBheGlvc0Ake01hdGgucmFuZG9tKCl9YCwgW10pIDogKGNiKSA9PiBzZXRUaW1lb3V0KGNiKTtcbn0pKFxuICB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nLFxuICBpc0Z1bmN0aW9uKF9nbG9iYWwucG9zdE1lc3NhZ2UpXG4pO1xuXG5jb25zdCBhc2FwID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrICE9PSAndW5kZWZpbmVkJyA/XG4gIHF1ZXVlTWljcm90YXNrLmJpbmQoX2dsb2JhbCkgOiAoIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLm5leHRUaWNrIHx8IF9zZXRJbW1lZGlhdGUpO1xuXG4vLyAqKioqKioqKioqKioqKioqKioqKipcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGUsXG4gIHNldEltbWVkaWF0ZTogX3NldEltbWVkaWF0ZSxcbiAgYXNhcFxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgaWYgKHJlc3BvbnNlKSB7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzID8gcmVzcG9uc2Uuc3RhdHVzIDogbnVsbDtcbiAgfVxufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1c1xuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zRXJyb3I7XG4iLCAiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxuZXhwb3J0IGRlZmF1bHQgbnVsbDtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuLy8gdGVtcG9yYXJ5IGhvdGZpeCB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzIHVudGlsIEF4aW9zVVJMU2VhcmNoUGFyYW1zIGlzIHJlZmFjdG9yZWRcbmltcG9ydCBQbGF0Zm9ybUZvcm1EYXRhIGZyb20gJy4uL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscy50b0ZsYXRPYmplY3QodXRpbHMsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKFBsYXRmb3JtRm9ybURhdGEgfHwgRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscy50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscy5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Gb3JtRGF0YTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUpO1xuICB9IDogZW5jb2RlO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbFxuIiwgImltcG9ydCBVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCBGb3JtRGF0YSBmcm9tICcuL2NsYXNzZXMvRm9ybURhdGEuanMnXG5pbXBvcnQgQmxvYiBmcm9tICcuL2NsYXNzZXMvQmxvYi5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYlxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcbiIsICJjb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuY29uc3QgX25hdmlnYXRvciA9IHR5cGVvZiBuYXZpZ2F0b3IgPT09ICdvYmplY3QnICYmIG5hdmlnYXRvciB8fCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSBoYXNCcm93c2VyRW52ICYmXG4gICghX25hdmlnYXRvciB8fCBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YoX25hdmlnYXRvci5wcm9kdWN0KSA8IDApO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5jb25zdCBvcmlnaW4gPSBoYXNCcm93c2VyRW52ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmIHx8ICdodHRwOi8vbG9jYWxob3N0JztcblxuZXhwb3J0IHtcbiAgaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIF9uYXZpZ2F0b3IgYXMgbmF2aWdhdG9yLFxuICBvcmlnaW5cbn1cbiIsICJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi9ub2RlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vY29tbW9uL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9ybURhdGFUb0pTT047XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHRvVVJMRW5jb2RlZEZvcm0gZnJvbSAnLi4vaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAodXRpbHMuaXNSZXNwb25zZShkYXRhKSB8fCB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgcmF3SGVhZGVycyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGFyc2VIZWFkZXJzIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzJztcblxuY29uc3QgJGludGVybmFscyA9IFN5bWJvbCgnaW50ZXJuYWxzJyk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlciAmJiBTdHJpbmcoaGVhZGVyKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjtcblxuICBpZiAodXRpbHMuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlci50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7XG5cbiAgWydnZXQnLCAnc2V0JywgJ2hhcyddLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSArIGFjY2Vzc29yTmFtZSwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uY2FsbCh0aGlzLCBoZWFkZXIsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQXhpb3NIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IoaGVhZGVycykge1xuICAgIGhlYWRlcnMgJiYgdGhpcy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghbEhlYWRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIChfdmFsdWUsIF9oZWFkZXIpID0+IHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSk7XG5cbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChoZWFkZXIpIHx8IGhlYWRlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIHNldEhlYWRlcnMoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSlcbiAgICB9IGVsc2UgaWYodXRpbHMuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzSGVhZGVycyhoZWFkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBoZWFkZXIuZW50cmllcygpKSB7XG4gICAgICAgIHNldEhlYWRlcih2YWx1ZSwga2V5LCByZXdyaXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5BeGlvc0hlYWRlcnMuYWNjZXNzb3IoWydDb250ZW50LVR5cGUnLCAnQ29udGVudC1MZW5ndGgnLCAnQWNjZXB0JywgJ0FjY2VwdC1FbmNvZGluZycsICdVc2VyLUFnZW50JywgJ0F1dGhvcml6YXRpb24nXSk7XG5cbi8vIHJlc2VydmVkIG5hbWVzIGhvdGZpeFxudXRpbHMucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscy5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zSGVhZGVycztcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsZWRFcnJvcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vQXhpb3NFcnJvci5qcyc7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDYWxjdWxhdGUgZGF0YSBtYXhSYXRlXG4gKiBAcGFyYW0ge051bWJlcn0gW3NhbXBsZXNDb3VudD0gMTBdXG4gKiBAcGFyYW0ge051bWJlcn0gW21pbj0gMTAwMF1cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3BlZWRvbWV0ZXIoc2FtcGxlc0NvdW50LCBtaW4pIHtcbiAgc2FtcGxlc0NvdW50ID0gc2FtcGxlc0NvdW50IHx8IDEwO1xuICBjb25zdCBieXRlcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBjb25zdCB0aW1lc3RhbXBzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGxldCBoZWFkID0gMDtcbiAgbGV0IHRhaWwgPSAwO1xuICBsZXQgZmlyc3RTYW1wbGVUUztcblxuICBtaW4gPSBtaW4gIT09IHVuZGVmaW5lZCA/IG1pbiA6IDEwMDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHB1c2goY2h1bmtMZW5ndGgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gdGltZXN0YW1wc1t0YWlsXTtcblxuICAgIGlmICghZmlyc3RTYW1wbGVUUykge1xuICAgICAgZmlyc3RTYW1wbGVUUyA9IG5vdztcbiAgICB9XG5cbiAgICBieXRlc1toZWFkXSA9IGNodW5rTGVuZ3RoO1xuICAgIHRpbWVzdGFtcHNbaGVhZF0gPSBub3c7XG5cbiAgICBsZXQgaSA9IHRhaWw7XG4gICAgbGV0IGJ5dGVzQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGkgIT09IGhlYWQpIHtcbiAgICAgIGJ5dGVzQ291bnQgKz0gYnl0ZXNbaSsrXTtcbiAgICAgIGkgPSBpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGhlYWQgPSAoaGVhZCArIDEpICUgc2FtcGxlc0NvdW50O1xuXG4gICAgaWYgKGhlYWQgPT09IHRhaWwpIHtcbiAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGlmIChub3cgLSBmaXJzdFNhbXBsZVRTIDwgbWluKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc2VkID0gc3RhcnRlZEF0ICYmIG5vdyAtIHN0YXJ0ZWRBdDtcblxuICAgIHJldHVybiBwYXNzZWQgPyBNYXRoLnJvdW5kKGJ5dGVzQ291bnQgKiAxMDAwIC8gcGFzc2VkKSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3BlZWRvbWV0ZXI7XG4iLCAiLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gZnJlcVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7XG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBsZXQgdGhyZXNob2xkID0gMTAwMCAvIGZyZXE7XG4gIGxldCBsYXN0QXJncztcbiAgbGV0IHRpbWVyO1xuXG4gIGNvbnN0IGludm9rZSA9IChhcmdzLCBub3cgPSBEYXRlLm5vdygpKSA9PiB7XG4gICAgdGltZXN0YW1wID0gbm93O1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9XG5cbiAgY29uc3QgdGhyb3R0bGVkID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHBhc3NlZCA9IG5vdyAtIHRpbWVzdGFtcDtcbiAgICBpZiAoIHBhc3NlZCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGludm9rZShhcmdzLCBub3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGludm9rZShsYXN0QXJncylcbiAgICAgICAgfSwgdGhyZXNob2xkIC0gcGFzc2VkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBmbHVzaCA9ICgpID0+IGxhc3RBcmdzICYmIGludm9rZShsYXN0QXJncyk7XG5cbiAgcmV0dXJuIFt0aHJvdHRsZWQsIGZsdXNoXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGhyb3R0bGU7XG4iLCAiaW1wb3J0IHNwZWVkb21ldGVyIGZyb20gXCIuL3NwZWVkb21ldGVyLmpzXCI7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSBcIi4vdGhyb3R0bGUuanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNvbnN0IHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZShlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlLFxuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbCxcbiAgICAgIFtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXTogdHJ1ZVxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yID0gKHRvdGFsLCB0aHJvdHRsZWQpID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG5cbiAgcmV0dXJuIFsobG9hZGVkKSA9PiB0aHJvdHRsZWRbMF0oe1xuICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgdG90YWwsXG4gICAgbG9hZGVkXG4gIH0pLCB0aHJvdHRsZWRbMV1dO1xufVxuXG5leHBvcnQgY29uc3QgYXN5bmNEZWNvcmF0b3IgPSAoZm4pID0+ICguLi5hcmdzKSA9PiB1dGlscy5hc2FwKCgpID0+IGZuKC4uLmFyZ3MpKTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbi8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgY29uc3QgbXNpZSA9IHBsYXRmb3JtLm5hdmlnYXRvciAmJiAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KHBsYXRmb3JtLm5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICBjb25zdCBjb29raWUgPSBbbmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSldO1xuXG4gICAgICB1dGlscy5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcoZG9tYWluKSAmJiBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuXG4gICAgICBzZWN1cmUgPT09IHRydWUgJiYgY29va2llLnB1c2goJ3NlY3VyZScpO1xuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgIH0sXG5cbiAgICByZW1vdmUobmFtZSkge1xuICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICB9XG4gIH1cblxuICA6XG5cbiAgLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICB7XG4gICAgd3JpdGUoKSB7fSxcbiAgICByZWFkKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7fVxuICB9O1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBpc0Fic29sdXRlVVJMIGZyb20gJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyc7XG5pbXBvcnQgY29tYmluZVVSTHMgZnJvbSAnLi4vaGVscGVycy9jb21iaW5lVVJMcy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL0F4aW9zSGVhZGVycy5qc1wiO1xuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8geyAuLi50aGluZyB9IDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIpID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHRydWUpXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwgImltcG9ydCBwbGF0Zm9ybSBmcm9tIFwiLi4vcGxhdGZvcm0vaW5kZXguanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCBpc1VSTFNhbWVPcmlnaW4gZnJvbSBcIi4vaXNVUkxTYW1lT3JpZ2luLmpzXCI7XG5pbXBvcnQgY29va2llcyBmcm9tIFwiLi9jb29raWVzLmpzXCI7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tIFwiLi4vY29yZS9idWlsZEZ1bGxQYXRoLmpzXCI7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSBcIi4uL2NvcmUvbWVyZ2VDb25maWcuanNcIjtcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSBcIi4vYnVpbGRVUkwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGNvbmZpZykgPT4ge1xuICBjb25zdCBuZXdDb25maWcgPSBtZXJnZUNvbmZpZyh7fSwgY29uZmlnKTtcblxuICBsZXQge2RhdGEsIHdpdGhYU1JGVG9rZW4sIHhzcmZIZWFkZXJOYW1lLCB4c3JmQ29va2llTmFtZSwgaGVhZGVycywgYXV0aH0gPSBuZXdDb25maWc7XG5cbiAgbmV3Q29uZmlnLmhlYWRlcnMgPSBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oaGVhZGVycyk7XG5cbiAgbmV3Q29uZmlnLnVybCA9IGJ1aWxkVVJMKGJ1aWxkRnVsbFBhdGgobmV3Q29uZmlnLmJhc2VVUkwsIG5ld0NvbmZpZy51cmwpLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG5cbiAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICBpZiAoYXV0aCkge1xuICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgK1xuICAgICAgYnRvYSgoYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAoYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhdXRoLnBhc3N3b3JkKSkgOiAnJykpXG4gICAgKTtcbiAgfVxuXG4gIGxldCBjb250ZW50VHlwZTtcblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSkge1xuICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9IGVsc2UgaWYgKChjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAvLyBmaXggc2VtaWNvbG9uIGR1cGxpY2F0aW9uIGlzc3VlIGZvciBSZWFjdE5hdGl2ZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uc3QgW3R5cGUsIC4uLnRva2Vuc10gPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKFt0eXBlIHx8ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgLi4udG9rZW5zXS5qb2luKCc7ICcpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4obmV3Q29uZmlnKSk7XG5cbiAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICBjb25zdCB4c3JmVmFsdWUgPSB4c3JmSGVhZGVyTmFtZSAmJiB4c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoeHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0KHhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdDb25maWc7XG59XG5cbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7cHJvZ3Jlc3NFdmVudFJlZHVjZXJ9IGZyb20gJy4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMnO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSBcIi4uL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qc1wiO1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oX2NvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZSwgb25VcGxvYWRQcm9ncmVzcywgb25Eb3dubG9hZFByb2dyZXNzfSA9IF9jb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgbGV0IHVwbG9hZFRocm90dGxlZCwgZG93bmxvYWRUaHJvdHRsZWQ7XG4gICAgbGV0IGZsdXNoVXBsb2FkLCBmbHVzaERvd25sb2FkO1xuXG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGZsdXNoVXBsb2FkICYmIGZsdXNoVXBsb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuICAgICAgZmx1c2hEb3dubG9hZCAmJiBmbHVzaERvd25sb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG5cbiAgICAgIF9jb25maWcuc2lnbmFsICYmIF9jb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub3BlbihfY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBfY29uZmlnLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IF9jb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgIChbZG93bmxvYWRUaHJvdHRsZWQsIGZsdXNoRG93bmxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZG93bmxvYWRUaHJvdHRsZWQpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKG9uVXBsb2FkUHJvZ3Jlc3MgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIChbdXBsb2FkVGhyb3R0bGVkLCBmbHVzaFVwbG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKSk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdXBsb2FkVGhyb3R0bGVkKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZsdXNoVXBsb2FkKTtcbiAgICB9XG5cbiAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgX2NvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IF9jb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKF9jb25maWcudXJsKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSBcIi4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzXCI7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGNvbnN0IHtsZW5ndGh9ID0gKHNpZ25hbHMgPSBzaWduYWxzID8gc2lnbmFscy5maWx0ZXIoQm9vbGVhbikgOiBbXSk7XG5cbiAgaWYgKHRpbWVvdXQgfHwgbGVuZ3RoKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBsZXQgYWJvcnRlZDtcblxuICAgIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IGVyciA9IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uIDogdGhpcy5yZWFzb247XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvciA/IGVyciA6IG5ldyBDYW5jZWxlZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdGltZXIgPSB0aW1lb3V0ICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKVxuICAgIH0sIHRpbWVvdXQpXG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICAgIGlmIChzaWduYWxzKSB7XG4gICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgc2lnbmFscy5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICAgICAgc2lnbmFsLnVuc3Vic2NyaWJlID8gc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpIDogc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzaWduYWxzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gICAgY29uc3Qge3NpZ25hbH0gPSBjb250cm9sbGVyO1xuXG4gICAgc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdXRpbHMuYXNhcCh1bnN1YnNjcmliZSk7XG5cbiAgICByZXR1cm4gc2lnbmFsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VTaWduYWxzO1xuIiwgIlxuZXhwb3J0IGNvbnN0IHN0cmVhbUNodW5rID0gZnVuY3Rpb24qIChjaHVuaywgY2h1bmtTaXplKSB7XG4gIGxldCBsZW4gPSBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gIGlmICghY2h1bmtTaXplIHx8IGxlbiA8IGNodW5rU2l6ZSkge1xuICAgIHlpZWxkIGNodW5rO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBsZXQgZW5kO1xuXG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBlbmQgPSBwb3MgKyBjaHVua1NpemU7XG4gICAgeWllbGQgY2h1bmsuc2xpY2UocG9zLCBlbmQpO1xuICAgIHBvcyA9IGVuZDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVhZEJ5dGVzID0gYXN5bmMgZnVuY3Rpb24qIChpdGVyYWJsZSwgY2h1bmtTaXplKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcmVhZFN0cmVhbShpdGVyYWJsZSkpIHtcbiAgICB5aWVsZCogc3RyZWFtQ2h1bmsoY2h1bmssIGNodW5rU2l6ZSk7XG4gIH1cbn1cblxuY29uc3QgcmVhZFN0cmVhbSA9IGFzeW5jIGZ1bmN0aW9uKiAoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgeWllbGQqIHN0cmVhbTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWFkZXIuY2FuY2VsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRyYWNrU3RyZWFtID0gKHN0cmVhbSwgY2h1bmtTaXplLCBvblByb2dyZXNzLCBvbkZpbmlzaCkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSk7XG5cbiAgbGV0IGJ5dGVzID0gMDtcbiAgbGV0IGRvbmU7XG4gIGxldCBfb25GaW5pc2ggPSAoZSkgPT4ge1xuICAgIGlmICghZG9uZSkge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBvbkZpbmlzaCAmJiBvbkZpbmlzaChlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgIF9vbkZpbmlzaCgpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICBsZXQgbG9hZGVkQnl0ZXMgPSBieXRlcyArPSBsZW47XG4gICAgICAgICAgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX29uRmluaXNoKGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIF9vbkZpbmlzaChyZWFzb24pO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgIH1cbiAgfSwge1xuICAgIGhpZ2hXYXRlck1hcms6IDJcbiAgfSlcbn1cbiIsICJpbXBvcnQgcGxhdGZvcm0gZnJvbSBcIi4uL3BsYXRmb3JtL2luZGV4LmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5pbXBvcnQgY29tcG9zZVNpZ25hbHMgZnJvbSBcIi4uL2hlbHBlcnMvY29tcG9zZVNpZ25hbHMuanNcIjtcbmltcG9ydCB7dHJhY2tTdHJlYW19IGZyb20gXCIuLi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzXCI7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IHtwcm9ncmVzc0V2ZW50UmVkdWNlciwgcHJvZ3Jlc3NFdmVudERlY29yYXRvciwgYXN5bmNEZWNvcmF0b3J9IGZyb20gXCIuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzXCI7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tIFwiLi4vaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzXCI7XG5pbXBvcnQgc2V0dGxlIGZyb20gXCIuLi9jb3JlL3NldHRsZS5qc1wiO1xuXG5jb25zdCBpc0ZldGNoU3VwcG9ydGVkID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXF1ZXN0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXNwb25zZSA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcblxuLy8gdXNlZCBvbmx5IGluc2lkZSB0aGUgZmV0Y2ggYWRhcHRlclxuY29uc3QgZW5jb2RlVGV4dCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgKChlbmNvZGVyKSA9PiAoc3RyKSA9PiBlbmNvZGVyLmVuY29kZShzdHIpKShuZXcgVGV4dEVuY29kZXIoKSkgOlxuICAgIGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShzdHIpLmFycmF5QnVmZmVyKCkpXG4pO1xuXG5jb25zdCB0ZXN0ID0gKGZuLCAuLi5hcmdzKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZm4oLi4uYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5jb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmIHRlc3QoKCkgPT4ge1xuICBsZXQgZHVwbGV4QWNjZXNzZWQgPSBmYWxzZTtcblxuICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICByZXR1cm4gJ2hhbGYnO1xuICAgIH0sXG4gIH0pLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKTtcblxuICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xufSk7XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDtcblxuY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgdGVzdCgoKSA9PiB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSkpO1xuXG5cbmNvbnN0IHJlc29sdmVycyA9IHtcbiAgc3RyZWFtOiBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmICgocmVzKSA9PiByZXMuYm9keSlcbn07XG5cbmlzRmV0Y2hTdXBwb3J0ZWQgJiYgKCgocmVzKSA9PiB7XG4gIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2godHlwZSA9PiB7XG4gICAgIXJlc29sdmVyc1t0eXBlXSAmJiAocmVzb2x2ZXJzW3R5cGVdID0gdXRpbHMuaXNGdW5jdGlvbihyZXNbdHlwZV0pID8gKHJlcykgPT4gcmVzW3R5cGVdKCkgOlxuICAgICAgKF8sIGNvbmZpZykgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgUmVzcG9uc2UgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZGAsIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JULCBjb25maWcpO1xuICAgICAgfSlcbiAgfSk7XG59KShuZXcgUmVzcG9uc2UpKTtcblxuY29uc3QgZ2V0Qm9keUxlbmd0aCA9IGFzeW5jIChib2R5KSA9PiB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzQmxvYihib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemU7XG4gIH1cblxuICBpZih1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgY29uc3QgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keSxcbiAgICB9KTtcbiAgICByZXR1cm4gKGF3YWl0IF9yZXF1ZXN0LmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscy5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscy5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgYm9keSA9IGJvZHkgKyAnJztcbiAgfVxuXG4gIGlmKHV0aWxzLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59XG5cbmNvbnN0IHJlc29sdmVCb2R5TGVuZ3RoID0gYXN5bmMgKGhlYWRlcnMsIGJvZHkpID0+IHtcbiAgY29uc3QgbGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKGFzeW5jIChjb25maWcpID0+IHtcbiAgbGV0IHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIGRhdGEsXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIHRpbWVvdXQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgcmVzcG9uc2VUeXBlLFxuICAgIGhlYWRlcnMsXG4gICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICBmZXRjaE9wdGlvbnNcbiAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgbGV0IGNvbXBvc2VkU2lnbmFsID0gY29tcG9zZVNpZ25hbHMoW3NpZ25hbCwgY2FuY2VsVG9rZW4gJiYgY2FuY2VsVG9rZW4udG9BYm9ydFNpZ25hbCgpXSwgdGltZW91dCk7XG5cbiAgbGV0IHJlcXVlc3Q7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSBjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSAmJiAoKCkgPT4ge1xuICAgICAgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgfSk7XG5cbiAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgKSB7XG4gICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogXCJoYWxmXCJcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZUhlYWRlcilcbiAgICAgIH1cblxuICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgcmVxdWVzdENvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25VcGxvYWRQcm9ncmVzcykpXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YSA9IHRyYWNrU3RyZWFtKF9yZXF1ZXN0LmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgZmx1c2gpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXRpbHMuaXNTdHJpbmcod2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ29taXQnO1xuICAgIH1cblxuICAgIC8vIENsb3VkZmxhcmUgV29ya2VycyB0aHJvd3Mgd2hlbiBjcmVkZW50aWFscyBhcmUgZGVmaW5lZFxuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2xvdWRmbGFyZS93b3JrZXJkL2lzc3Vlcy85MDJcbiAgICBjb25zdCBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID0gXCJjcmVkZW50aWFsc1wiIGluIFJlcXVlc3QucHJvdG90eXBlO1xuICAgIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIHNpZ25hbDogY29tcG9zZWRTaWduYWwsXG4gICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycy5ub3JtYWxpemUoKS50b0pTT04oKSxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgICAgY3JlZGVudGlhbHM6IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPyB3aXRoQ3JlZGVudGlhbHMgOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3QpO1xuXG4gICAgY29uc3QgaXNTdHJlYW1SZXNwb25zZSA9IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTtcblxuICAgIGlmIChzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgKGlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUpKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgICBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBvcHRpb25zW3Byb3BdID0gcmVzcG9uc2VbcHJvcF07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gb25Eb3dubG9hZFByb2dyZXNzICYmIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25Eb3dubG9hZFByb2dyZXNzKSwgdHJ1ZSlcbiAgICAgICkgfHwgW107XG5cbiAgICAgIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKFxuICAgICAgICB0cmFja1N0cmVhbShyZXNwb25zZS5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsICgpID0+IHtcbiAgICAgICAgICBmbHVzaCAmJiBmbHVzaCgpO1xuICAgICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSB8fCAndGV4dCc7XG5cbiAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10ocmVzcG9uc2UsIGNvbmZpZyk7XG5cbiAgICAhaXNTdHJlYW1SZXNwb25zZSAmJiB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfSlcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gJ1R5cGVFcnJvcicgJiYgL2ZldGNoL2kudGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSxcbiAgICAgICAge1xuICAgICAgICAgIGNhdXNlOiBlcnIuY2F1c2UgfHwgZXJyXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG5cbiAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBlcnIgJiYgZXJyLmNvZGUsIGNvbmZpZywgcmVxdWVzdCk7XG4gIH1cbn0pO1xuXG5cbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGh0dHBBZGFwdGVyIGZyb20gJy4vaHR0cC5qcyc7XG5pbXBvcnQgeGhyQWRhcHRlciBmcm9tICcuL3hoci5qcyc7XG5pbXBvcnQgZmV0Y2hBZGFwdGVyIGZyb20gJy4vZmV0Y2guanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyLFxuICBmZXRjaDogZmV0Y2hBZGFwdGVyXG59XG5cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRyYW5zZm9ybURhdGEgZnJvbSAnLi90cmFuc2Zvcm1EYXRhLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gXCIuLi9hZGFwdGVycy9hZGFwdGVycy5qc1wiO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuIiwgImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxLjcuN1wiOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi4vZW52L2RhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4uL2hlbHBlcnMvYnVpbGRVUkwuanMnO1xuaW1wb3J0IEludGVyY2VwdG9yTWFuYWdlciBmcm9tICcuL0ludGVyY2VwdG9yTWFuYWdlci5qcyc7XG5pbXBvcnQgZGlzcGF0Y2hSZXF1ZXN0IGZyb20gJy4vZGlzcGF0Y2hSZXF1ZXN0LmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gJy4vYnVpbGRGdWxsUGF0aC5qcyc7XG5pbXBvcnQgdmFsaWRhdG9yIGZyb20gJy4uL2hlbHBlcnMvdmFsaWRhdG9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi9BeGlvc0hlYWRlcnMuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXk7XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSA9IHt9KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaWdub3JlIHRoZSBjYXNlIHdoZXJlIFwic3RhY2tcIiBpcyBhbiB1bi13cml0YWJsZSBwcm9wZXJ0eVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBfcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICAgIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICAgIH1cblxuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7dHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhwYXJhbXNTZXJpYWxpemVyLCB7XG4gICAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvblxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscy5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoLmFwcGx5KGNoYWluLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuICB9XG59XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9DYW5jZWxlZEVycm9yLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oY2FuY2VsID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSBvbmZ1bGZpbGxlZCA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICB0b0Fib3J0U2lnbmFsKCkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgY29udHJvbGxlci5zaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB0aGlzLnVuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIHJldHVybiBjb250cm9sbGVyLnNpZ25hbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuIiwgImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4vZW52L2RhdGEuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHNwcmVhZCBmcm9tICcuL2hlbHBlcnMvc3ByZWFkLmpzJztcbmltcG9ydCBpc0F4aW9zRXJyb3IgZnJvbSAnLi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zXG4iLCAiaW1wb3J0IGF4aW9zIGZyb20gJy4vbGliL2F4aW9zLmpzJztcblxuLy8gVGhpcyBtb2R1bGUgaXMgaW50ZW5kZWQgdG8gdW53cmFwIEF4aW9zIGRlZmF1bHQgZXhwb3J0IGFzIG5hbWVkLlxuLy8gS2VlcCB0b3AtbGV2ZWwgZXhwb3J0IHNhbWUgd2l0aCBzdGF0aWMgcHJvcGVydGllc1xuLy8gc28gdGhhdCBpdCBjYW4ga2VlcCBzYW1lIHdpdGggZXMgbW9kdWxlIG9yIGNqc1xuY29uc3Qge1xuICBBeGlvcyxcbiAgQXhpb3NFcnJvcixcbiAgQ2FuY2VsZWRFcnJvcixcbiAgaXNDYW5jZWwsXG4gIENhbmNlbFRva2VuLFxuICBWRVJTSU9OLFxuICBhbGwsXG4gIENhbmNlbCxcbiAgaXNBeGlvc0Vycm9yLFxuICBzcHJlYWQsXG4gIHRvRm9ybURhdGEsXG4gIEF4aW9zSGVhZGVycyxcbiAgSHR0cFN0YXR1c0NvZGUsXG4gIGZvcm1Ub0pTT04sXG4gIGdldEFkYXB0ZXIsXG4gIG1lcmdlQ29uZmlnXG59ID0gYXhpb3M7XG5cbmV4cG9ydCB7XG4gIGF4aW9zIGFzIGRlZmF1bHQsXG4gIEF4aW9zLFxuICBBeGlvc0Vycm9yLFxuICBDYW5jZWxlZEVycm9yLFxuICBpc0NhbmNlbCxcbiAgQ2FuY2VsVG9rZW4sXG4gIFZFUlNJT04sXG4gIGFsbCxcbiAgQ2FuY2VsLFxuICBpc0F4aW9zRXJyb3IsXG4gIHNwcmVhZCxcbiAgdG9Gb3JtRGF0YSxcbiAgQXhpb3NIZWFkZXJzLFxuICBIdHRwU3RhdHVzQ29kZSxcbiAgZm9ybVRvSlNPTixcbiAgZ2V0QWRhcHRlcixcbiAgbWVyZ2VDb25maWdcbn1cbiIsICJpbXBvcnQgeyBUaGluZywgRW50aXR5LCBDbGFzcywgUHJvcGVydHksIEluZGl2aWR1YWwsIE9udG9sb2d5IH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuXG4vLyBSRUFET05MWSBhcnJheXMgY29udGFpbmluZyB0aGUgc3RyaW5ncyBkZWZpbmluZyBhIE1vZGVsIE9iamVjdCBUeXBlXG5leHBvcnQgY29uc3QgY2xhc3NUeXBlTmFtZXMgPSBbXCJjbGFzc1wiICwgXCJ0ZXJtXCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHByb3BlcnR5VHlwZU5hbWVzID0gW1wicHJvcGVydHlcIiwgXCJhbm5vdGF0aW9uUHJvcGVydHlcIiwgXCJkYXRhUHJvcGVydHlcIiwgXCJvYmplY3RQcm9wZXJ0eVwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBpbmRpdmlkdWFsVHlwZU5hbWVzID0gW1wiaW5kaXZpZHVhbFwiXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBvbnRvbG9neVR5cGVOYW1lcyA9IFtcIm9udG9sb2d5XCJdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IGVudGl0eVR5cGVOYW1lcyA9IFsuLi5jbGFzc1R5cGVOYW1lcywgLi4uaW5kaXZpZHVhbFR5cGVOYW1lcywgLi4ucHJvcGVydHlUeXBlTmFtZXNdIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHRoaW5nVHlwZU5hbWVzID0gWy4uLmVudGl0eVR5cGVOYW1lcywgLi4ub250b2xvZ3lUeXBlTmFtZXNdIGFzIGNvbnN0O1xuXG4vLyBUeXBlLWNyZWF0aW9uIG91dCBvZiBSRUFET05MWSBhcnJheXNcbmV4cG9ydCB0eXBlIENsYXNzVHlwZU5hbWUgPSB0eXBlb2YgY2xhc3NUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZU5hbWUgPSB0eXBlb2YgcHJvcGVydHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIEluZGl2aWR1YWxUeXBlTmFtZSA9IHR5cGVvZiBpbmRpdmlkdWFsVHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBPbnRvbG9neVR5cGVOYW1lID0gdHlwZW9mIG9udG9sb2d5VHlwZU5hbWVzW251bWJlcl07XG5leHBvcnQgdHlwZSBFbnRpdHlUeXBlTmFtZSA9IHR5cGVvZiBlbnRpdHlUeXBlTmFtZXNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFRoaW5nVHlwZU5hbWUgPSB0eXBlb2YgdGhpbmdUeXBlTmFtZXNbbnVtYmVyXTtcblxuLy8gRnVuY3Rpb25zIGNoZWNraW5nIHN0cmluZyBhZ2FpbnN0IHR5cGUgbmFtZXMsIHJldHVybmluZyBzdHJpbmcgYXMgdHlwZSBuYW1lIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3NUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogdHlwZSBpcyBDbGFzc1R5cGVOYW1lIHtcbiAgICByZXR1cm4gY2xhc3NUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBDbGFzc1R5cGVOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgUHJvcGVydHlUeXBlTmFtZSB7XG4gICAgcmV0dXJuIHByb3BlcnR5VHlwZU5hbWVzLmluY2x1ZGVzKHR5cGUgYXMgUHJvcGVydHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbmRpdmlkdWFsVHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgSW5kaXZpZHVhbFR5cGVOYW1lIHtcbiAgICByZXR1cm4gaW5kaXZpZHVhbFR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIEluZGl2aWR1YWxUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neVR5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIE9udG9sb2d5VHlwZU5hbWUge1xuICAgIHJldHVybiBvbnRvbG9neVR5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIE9udG9sb2d5VHlwZU5hbWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5VHlwZU5hbWUodHlwZTogc3RyaW5nKSA6IHR5cGUgaXMgRW50aXR5VHlwZU5hbWUge1xuICAgIHJldHVybiBlbnRpdHlUeXBlTmFtZXMuaW5jbHVkZXModHlwZSBhcyBFbnRpdHlUeXBlTmFtZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUaGluZ1R5cGVOYW1lKHR5cGU6IHN0cmluZykgOiB0eXBlIGlzIFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiB0aGluZ1R5cGVOYW1lcy5pbmNsdWRlcyh0eXBlIGFzIFRoaW5nVHlwZU5hbWUpO1xufVxuXG4vLyBGdW5jdGlvbnMgY2hlY2tpbmcgVGhpbmcgb2JqZWN0cyBhZ2FpbnN0IHNwZWNpZmljIHR5cGUgKHZpYSBjaGVja2luZyBnZXRUeXBlKCkgYWdhaW5zdCB0eXBlIG5hbWVzKSwgcmV0dXJuaW5nIG9iamVjdCBhcyBzcGVjaWZpYyB0eXBlIGlmIGNoZWNrIHBhc3Nlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xhc3ModGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIENsYXNzIHtcbiAgICByZXR1cm4gaXNDbGFzc1R5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eSh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgUHJvcGVydHkge1xuICAgIHJldHVybiBpc1Byb3BlcnR5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0luZGl2aWR1YWwodGhpbmc6IFRoaW5nKSA6IHRoaW5nIGlzIEluZGl2aWR1YWwge1xuICAgIHJldHVybiBpc0luZGl2aWR1YWxUeXBlTmFtZSh0aGluZy5nZXRUeXBlKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRW50aXR5KHRoaW5nOiBUaGluZykgOiB0aGluZyBpcyBFbnRpdHkge1xuICAgIHJldHVybiBpc0VudGl0eVR5cGVOYW1lKHRoaW5nLmdldFR5cGUoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPbnRvbG9neSh0aGluZzogVGhpbmcpIDogdGhpbmcgaXMgT250b2xvZ3kge1xuICAgIHJldHVybiBpc09udG9sb2d5VHlwZU5hbWUodGhpbmcuZ2V0VHlwZSgpKTtcbn0iLCAiaW1wb3J0IHtFdWlMaW5rQ29sb3J9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvbGluay9saW5rXCI7XG5pbXBvcnQge1xuICAgIGlzQ2xhc3NUeXBlTmFtZSxcbiAgICBpc0luZGl2aWR1YWxUeXBlTmFtZSxcbiAgICBpc09udG9sb2d5VHlwZU5hbWUsXG4gICAgaXNQcm9wZXJ0eVR5cGVOYW1lLFxuICAgIGlzVGhpbmdUeXBlTmFtZSwgVGhpbmdUeXBlTmFtZVxufSBmcm9tIFwiLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7U3RvcnlDb250ZXh0fSBmcm9tIFwiQHN0b3J5Ym9vay9yZWFjdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheTxUPihvYmo6IFQgfCBUW10pOiBUW10ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9IGVsc2UgaWYgKG9iaikge1xuICAgICAgICByZXR1cm4gW29ial07XG4gICAgfVxuICAgIHJldHVybiBbXSBhcyBUW107XG59XG5cbmNvbnN0IERFRkFVTFRfVVNFX0xFR0FDWSA9IHRydWU7XG4vKipcbiAqIFJldHVybnMgYHVzZUxlZ2FjeWAgaWYgdW5kZWZpbmVkLCBvdGhlcndpc2UgcmV0dXJucyBkZWZhdWx0IHZhbHVlIGZvciB1c2VMZWdhY3lcbiAqIEBwYXJhbSB1c2VMZWdhY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3k/OiBib29sZWFuKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodXNlTGVnYWN5ICE9PSB1bmRlZmluZWQpID8gdXNlTGVnYWN5IDogREVGQVVMVF9VU0VfTEVHQUNZO1xufVxuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIHR5cGV9LiBJZiB7QGxpbmsgdHlwZX0gZXF1YWxzICd0ZXJtJywgJ2NsYXNzJyBnZXRzIHJldHVybmVkIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRpdHlUeXBlTmFtZSh0eXBlOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gXCJ0ZXJtXCIgPyBcImNsYXNzXCIgOiB0eXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHI6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZUNhbWVsQ2FzZShzdHI6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBjYXBpdGFsaXplKHN0cikuc3BsaXQoLyg/PVtBLVpdW2Etel0pLykuam9pbihcIiBcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZVVuZGVyc2NvcmUoc3RyOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FwaXRhbGl6ZShzdHIpLnJlcGxhY2UoXCJfXCIsIFwiIFwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRyaW1tZWQgYXBpIChvbWl0cyAvYXBpL3YyIGF0IHRoZSBlbmQpXG4gKiBAcGFyYW0gYXBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcm9udEVuZEFwaShhcGk6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiBhcGkucmVwbGFjZSgvXFwvYXBpXFwvPyQvLCBcIi9cIik7XG59XG5cbi8qKlxuICogUmV0dXJucyBcIm9udG9sb2dpZXMve29udG9sb2d5SWR9L3tlbnRpdHlUeXBlfS97aXJpfVwiLCB3aGljaCBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggZnJvbnRlbmRBcGkgdG8gZ2V0IGZ1bGwgbGlua1xuICogQHBhcmFtIG9udG9sb2d5SWQgdGhlIGVudGl0aWVzJyBvbnRvbG9neUlkXG4gKiBAcGFyYW0gaXJpIHRoZSBlbnRpdGllcycgaXJpXG4gKiBAcGFyYW0gZW50aXR5VHlwZUFycmF5IHRoZSBlbnRpdGllcycgdHlwZSBhcnJheSAoZnJvbSBhcGkgSlNPTiBsaW5rZWRFbnRpdGllcylcbiAqIEBwYXJhbSB1c2VMZWdhY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlQXJyYXk6IHN0cmluZ1tdIHwgc3RyaW5nLCBpcmk/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pIDogc3RyaW5nIHtcbiAgICByZXR1cm4gYG9udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke3BsdXJhbGl6ZVR5cGUoYXNBcnJheShlbnRpdHlUeXBlQXJyYXkpLCB1c2VMZWdhY3kpfWAgKyAoaXJpICE9IHVuZGVmaW5lZCA/IGAvJHtlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGlyaSkpfWAgOiBcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBsdXJhbGl6ZVR5cGUodHlwZUFycmF5OiBzdHJpbmdbXSB8IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbikgOiBcInRlcm1zXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHwgXCJvbnRvbG9naWVzXCIge1xuICAgIGZvcihjb25zdCB0eXBlIG9mIGFzQXJyYXkodHlwZUFycmF5KSkge1xuICAgICAgICBpZihpc1RoaW5nVHlwZU5hbWUodHlwZSkpIHtcbiAgICAgICAgICAgIGlmKGlzQ2xhc3NUeXBlTmFtZSh0eXBlKSkgcmV0dXJuIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJ0ZXJtc1wiIDogXCJjbGFzc2VzXCI7XG4gICAgICAgICAgICBpZihpc1Byb3BlcnR5VHlwZU5hbWUodHlwZSkpIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgICAgICAgIGlmKGlzSW5kaXZpZHVhbFR5cGVOYW1lKHR5cGUpKSByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgICAgICAgaWYoaXNPbnRvbG9neVR5cGVOYW1lKHR5cGUpKSByZXR1cm4gXCJvbnRvbG9naWVzXCJcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0aGluZ1R5cGUgZm91bmQgdG8gcGx1cmFsaXplIGluIHByb3ZpZGVkIHR5cGVBcnJheS5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW5ndWxhcml6ZVR5cGUodHlwZUFycmF5OiBzdHJpbmdbXSB8IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFRoaW5nVHlwZU5hbWUge1xuICAgIGZvcihjb25zdCB0eXBlIG9mIGFzQXJyYXkodHlwZUFycmF5KSkge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0ZXJtc1wiOiBjYXNlIFwiY2xhc3Nlc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwidGVybVwiIDogXCJjbGFzc1wiO1xuICAgICAgICAgICAgY2FzZSBcInByb3BlcnRpZXNcIjogY2FzZSBcImRhdGFQcm9wZXJ0aWVzXCI6IGNhc2UgXCJvYmplY3RQcm9wZXJ0aWVzXCI6IGNhc2UgXCJhbm5vdGF0aW9uUHJvcGVydGllc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInByb3BlcnR5XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW5kaXZpZHVhbHNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsXCI7XG4gICAgICAgICAgICBjYXNlIFwib250b2xvZ2llc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIm9udG9sb2d5XCJcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0aGluZ1R5cGUgZm91bmQgdG8gc2luZ3VsYXJpemUgaW4gcHJvdmlkZWQgdHlwZUFycmF5LlwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIHN0cmluZyB1c2VkIG1haW5seSBmb3IgY29tcG9uZW50IGtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gICAgcmV0dXJuIChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMiwgNTQpKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hleENvbG9yKHN0cjogc3RyaW5nKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXiNbMC05QS1GXXs2fSQvaS50ZXN0KHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JnYkNvbG9yKHN0cjogc3RyaW5nKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXihyZ2J8aHNsKShhPylbKF1cXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKixcXHMqKFtcXGQuXStcXHMqJT8pXFxzKig/OixcXHMqKFtcXGQuXSspXFxzKik/WyldJC9pLnRlc3Qoc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXVpTGlua0NvbG9yKHN0cjogc3RyaW5nKSA6IHN0ciBpcyBFdWlMaW5rQ29sb3Ige1xuICAgIHJldHVybiBbXCJwcmltYXJ5XCIsIFwic3ViZHVlZFwiLCBcInN1Y2Nlc3NcIiwgXCJhY2NlbnRcIiwgXCJkYW5nZXJcIiwgXCJ3YXJuaW5nXCIsIFwidGV4dFwiLCBcImdob3N0XCJdLmluY2x1ZGVzKHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3I6IGFueSwgbWVzc2FnZVBsYWNlaG9sZGVyID0gXCJpbmZvcm1hdGlvblwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBlcnJvcl9tc2cgOiBzdHJpbmcgPSBlcnJvci5tZXNzYWdlO1xuICAgIGlmKGVycm9yX21zZyA9PT0gKFwiUmVzcG9uc2UgY29udGFpbnMgMCBlbGVtZW50c1wiKSkge1xuICAgICAgICByZXR1cm4gXCJObyBlbGVtZW50cyBmb3VuZFwiO1xuICAgIH1cbiAgICBlbHNlIHJldHVybiBgTm8gJHttZXNzYWdlUGxhY2Vob2xkZXJ9IGF2YWlsYWJsZWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmZlclR5cGVGcm9tVHlwZUFycmF5KHR5cGVzOiBzdHJpbmdbXSkge1xuICAgIGxldCByZXMgPSB0eXBlcy5maWx0ZXIoKGVsZW0gOiBzdHJpbmcpID0+IGlzVGhpbmdUeXBlTmFtZShlbGVtKSk7IC8vIGZpbHRlciBub3QgbWF0Y2hpbmcgc3RyaW5nc1xuICAgIHJlcyA9IHJlcy5tYXAoaXRlbSA9PiBpdGVtID09PSBcImFubm90YXRpb25Qcm9wZXJ0eVwiIHx8IGl0ZW0gPT09IFwib2JqZWN0UHJvcGVydHlcIiB8fCBpdGVtID09PSBcImRhdGFQcm9wZXJ0eVwiID8gXCJwcm9wZXJ0eVwiIDogaXRlbSk7XG4gICAgcmVzID0gWy4uLm5ldyBTZXQ8c3RyaW5nPihyZXMpXTsgLy8gcmVtb3ZlIGR1cGxpY2F0ZXNcblxuICAgIGlmKHJlcy5sZW5ndGggPT09IDEpIHJldHVybiByZXNbMF0gYXMgVGhpbmdUeXBlTmFtZTtcbiAgICBlbHNlIGlmKHJlcy5sZW5ndGggPT09IDApIHRocm93IEVycm9yKFwiRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZDogTm8gc3VpdGFibGUgdHlwZSBmb3VuZCBpbiBhcnJheS5cIik7XG4gICAgZWxzZSB0aHJvdyBFcnJvcihgRW50aXR5IHR5cGUgY291bGQgbm90IGJlIGNvcnJlY3RseSBpbmZlcnJlZDogTXVsdGlwbGUgdHlwZXMgZm91bmQgaW4gYXJyYXksIG5vIGRlZmluaXRlIGNob2ljZSBwb3NzaWJsZSAtICR7SlNPTi5zdHJpbmdpZnkocmVzKX1gKTtcbn1cblxuLyogVE9ETzogcGx1cmFsaXplVHlwZSBub3QgYXZhaWxhYmxlIGluIGh0bWwgdmVyc2lvbiwgcmVwbGFjZSB3aXRoIGxvY2FsIGZ1bmN0aW9uYWxpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBtYW51YWxseUVtYmVkT25OYXZpZ2F0ZShjb2RlOiBzdHJpbmcsIHN0b3J5Q29udGV4dDogU3RvcnlDb250ZXh0KSB7XG4gICAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb0VudGl0eVwiXSkge1xuICAgICAgICBjYXNlIFwiQ29uc29sZSBtZXNzYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9vbk5hdmlnYXRlVG9FbnRpdHk9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRW50aXR5PXtcXG4gICAgKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgIGNvbnNvbGUubG9nKCdUcmlnZ2VyZWQgb25OYXZpZ2F0ZVRvRW50aXR5KCknICsgKGVudGl0eVR5cGUgPyBgIGZvciAke2VudGl0eVR5cGUgfHwgXFxcImVudGl0eVxcXCJ9YCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5sYWJlbCkgPyBgIFxcXCIke2VudGl0eS5sYWJlbH1cXFwiYCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5pcmkpID8gYCAoaXJpPVxcXCIke2VudGl0eS5pcml9XFxcIilgIDogJycpICsgJy4nKTtcXG4gICAgfVxcbiAgfVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJOYXZpZ2F0ZSB0byBFQkkgcGFnZVwiOlxuICAgICAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZShcbiAgICAgICAgICAgICAgICAvb25OYXZpZ2F0ZVRvRW50aXR5PVxceyhcXChcXCkgPT4gXFx7fXxmdW5jdGlvbiBub1JlZkNoZWNrXFwoXFwpXFx7fSl9LyxcbiAgICAgICAgICAgICAgICBcIm9uTmF2aWdhdGVUb0VudGl0eT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBpZihlbnRpdHkgJiYgZW50aXR5LmlyaSAmJiBlbnRpdHlUeXBlKSB7XFxuICAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy8nICsgb250b2xvZ3lJZCArICcvJyArIG5ldyBNYXAoW1tcXFwidGVybVxcXCIsXFxcImNsYXNzZXNcXFwiXSxbXFxcImNsYXNzXFxcIixcXFwiY2xhc3Nlc1xcXCJdLFtcXFwiaW5kaXZpZHVhbFxcXCIsXFxcImluZGl2aWR1YWxzXFxcIl0sW1xcXCJwcm9wZXJ0eVxcXCIsXFxcInByb3BlcnRpZXNcXFwiXSxbXFxcImRhdGFQcm9wZXJ0eVxcXCIsXFxcInByb3BlcnRpZXNcXFwiXSxbXFxcIm9iamVjdFByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwiYW5ub3RhdGlvblByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdXSkuZ2V0KGVudGl0eVR5cGUpICsgJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChlbnRpdHkuaXJpKSksIFxcXCJfdG9wXFxcIik7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L29udG9sb2dpZXMvJyArIG9udG9sb2d5SWQsIFxcXCJfdG9wXFxcIik7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XCJcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIHN3aXRjaCAoc3RvcnlDb250ZXh0LmFyZ3NbXCJvbk5hdmlnYXRlVG9PbnRvbG9neVwiXSkge1xuICAgICAgICBjYXNlIFwiQ29uc29sZSBtZXNzYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9vbk5hdmlnYXRlVG9PbnRvbG9neT1cXHsoXFwoXFwpID0+IFxce318ZnVuY3Rpb24gbm9SZWZDaGVja1xcKFxcKVxce30pfS8sXG4gICAgICAgICAgICAgICAgXCJvbk5hdmlnYXRlVG9PbnRvbG9neT17XFxuICAgIChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICBjb25zb2xlLmxvZygnVHJpZ2dlcmVkIG9uTmF2aWdhdGVUb09udG9sb2d5KCknICsgKGVudGl0eVR5cGUgPyBgIGZvciAke2VudGl0eVR5cGUgfHwgXFxcImVudGl0eVxcXCJ9YCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5sYWJlbCkgPyBgIFxcXCIke2VudGl0eS5sYWJlbH1cXFwiYCA6ICcnKSArICgoZW50aXR5ICYmIGVudGl0eS5pcmkpID8gYCAoaXJpPVxcXCIke2VudGl0eS5pcml9XFxcIilgIDogJycpICsgYCBmb3Igb250b2xvZ3lJZCBcXFwiJHtvbnRvbG9neUlkfVxcXCIuYCk7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTmF2aWdhdGUgdG8gRUJJIHBhZ2VcIjpcbiAgICAgICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgL29uTmF2aWdhdGVUb09udG9sb2d5PVxceyhcXChcXCkgPT4gXFx7fXxmdW5jdGlvbiBub1JlZkNoZWNrXFwoXFwpXFx7fSl9LyxcbiAgICAgICAgICAgICAgICBcIm9uTmF2aWdhdGVUb09udG9sb2d5PXtcXG4gICAgKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogeyBpcmk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xcbiAgICAgIGlmKGVudGl0eSAmJiBlbnRpdHkuaXJpICYmIGVudGl0eVR5cGUpIHtcXG4gICAgICAgIHdpbmRvdy5vcGVuKCdodHRwczovL3d3dy5lYmkuYWMudWsvb2xzNC9vbnRvbG9naWVzLycgKyBvbnRvbG9neUlkICsgJy8nICsgbmV3IE1hcChbW1xcXCJ0ZXJtXFxcIixcXFwiY2xhc3Nlc1xcXCJdLFtcXFwiY2xhc3NcXFwiLFxcXCJjbGFzc2VzXFxcIl0sW1xcXCJpbmRpdmlkdWFsXFxcIixcXFwiaW5kaXZpZHVhbHNcXFwiXSxbXFxcInByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwiZGF0YVByb3BlcnR5XFxcIixcXFwicHJvcGVydGllc1xcXCJdLFtcXFwib2JqZWN0UHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl0sW1xcXCJhbm5vdGF0aW9uUHJvcGVydHlcXFwiLFxcXCJwcm9wZXJ0aWVzXFxcIl1dKS5nZXQoZW50aXR5VHlwZSkgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eS5pcmkpKSwgXFxcIl90b3BcXFwiKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSB7XFxuICAgICAgICB3aW5kb3cub3BlbignaHR0cHM6Ly93d3cuZWJpLmFjLnVrL29sczQvb250b2xvZ2llcy8nICsgb250b2xvZ3lJZCwgXFxcIl90b3BcXFwiKTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgc3dpdGNoIChzdG9yeUNvbnRleHQuYXJnc1tcIm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZVwiXSkge1xuICAgICAgICBjYXNlIFwiQ29uc29sZSBtZXNzYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtcXG4gICAgKGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICAgY29uc29sZS5sb2coJ1RyaWdnZXJlZCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUoKScgKyAoZW50aXR5VHlwZSA/IGAgZm9yICR7ZW50aXR5VHlwZSB8fCBcXFwiZW50aXR5XFxcIn1gIDogJycpICsgKChlbnRpdHkgJiYgZW50aXR5LmxhYmVsKSA/IGAgXFxcIiR7ZW50aXR5LmxhYmVsfVxcXCJgIDogJycpICsgKChlbnRpdHkgJiYgZW50aXR5LmlyaSkgPyBgIChpcmk9XFxcIiR7ZW50aXR5LmlyaX1cXFwiKWAgOiAnJykgKyAnLicpO1xcbiAgICB9XFxuICB9XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk5hdmlnYXRlIHRvIEVCSSBwYWdlXCI6XG4gICAgICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU9XFx7KFxcKFxcKSA9PiBcXHt9fGZ1bmN0aW9uIG5vUmVmQ2hlY2tcXChcXClcXHt9KX0vLFxuICAgICAgICAgICAgICAgIFwib25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtcXG4gICAgKGVudGl0eVR5cGU/OiBzdHJpbmcsIGVudGl0eT86IHsgaXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH0pID0+IHtcXG4gICAgICAgd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3LmViaS5hYy51ay9vbHM0L3NlYXJjaD9xPScgKyAoKGVudGl0eSAmJiBlbnRpdHkubGFiZWwpID8gZW50aXR5LmxhYmVsIDogXFxcIlxcXCIpICsgJyZleGFjdE1hdGNoPXRydWUmbGFuZz1lbicsIFxcXCJfdG9wXFxcIik7XFxuICAgIH1cXG4gIH1cIlxuICAgICAgICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBjb2RlO1xufSIsICJleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWlmaWVkPFQ+IHtcbiAgdmFsdWU6IFQ7XG4gIGF4aW9tczogYW55W10gfCBudWxsO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IFQsIGF4aW9tczogYW55W10gfCBudWxsKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuYXhpb21zID0gYXhpb21zO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbjxUPihqc29uTm9kZTogYW55KTogUmVpZmllZDxUPltdIHtcbiAgICBpZiAoIWpzb25Ob2RlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGpzb25Ob2RlKSkge1xuICAgICAganNvbk5vZGUgPSBbanNvbk5vZGVdO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uTm9kZS5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUudHlwZSkgJiZcbiAgICAgICAgdmFsdWUudHlwZS5pbmRleE9mKFwicmVpZmljYXRpb25cIikgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLnZhbHVlLCB2YWx1ZS5heGlvbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWlmaWVkPFQ+KHZhbHVlLCBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGhhc01ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmF4aW9tcyAhPSBudWxsO1xuICB9XG5cbiAgLy8gQ29tYmluZSBhbGwgb2YgdGhlIGF4aW9tcyBpbnRvIG9uZSBtZXRhZGF0YSBvYmplY3QgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgLy9cbiAgLy8gbm90ZTogVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBzYW1lIHByb3BlcnR5IGlzIHJlaWZpZWQgbXVsdGlwbGUgdGltZXMgd2l0aFxuICAvLyBkaWZmZXJlbnQgbWV0YWRhdGEsIGl0IHdpbGwgYWxsIGJlIGNvbWJpbmVkIGluIHRoZSBVSS4gV2hldGhlciB0aGlzIGlzXG4gIC8vIHRoZSBkZXNpcmVkIGJlaGF2aW91ciBpcyBUQkQuXG4gIC8vXG4gIGdldE1ldGFkYXRhKCk6IGFueSB8IG51bGwge1xuICAgIGlmICghdGhpcy5heGlvbXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnRpZXM6IGFueSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBheGlvbSBvZiB0aGlzLmF4aW9tcykge1xuICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGF4aW9tKSkge1xuICAgICAgICBjb25zdCB2ID0gYXhpb21ba107XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nOiBhbnlbXSB8IHVuZGVmaW5lZCA9IHByb3BlcnRpZXNba107XG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhpc3RpbmcucHVzaCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzW2tdID0gW3ZdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cbn1cbiIsICJpbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCJcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRFbnRpdHkge1xuXHRkZWZpbmVkQnk/OnN0cmluZ1tdXG5cdGlyaT86c3RyaW5nXG5cdHVybD86c3RyaW5nXG5cdG51bUFwcGVhcnNJbjpzdHJpbmdcblx0aGFzTG9jYWxEZWZpbml0aW9uOmJvb2xlYW5cblx0bGFiZWw6c3RyaW5nfHN0cmluZ1tdXG5cdHR5cGU6c3RyaW5nW11cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlua2VkRW50aXRpZXMge1xuXG5cdGxpbmtlZEVudGl0aWVzOnsgW2tleTpzdHJpbmddOkxpbmtlZEVudGl0eSB9XG5cblx0Y29uc3RydWN0b3IobGlua2VkRW50aXRpZXM6YW55KSB7XG5cdFx0aWYobGlua2VkRW50aXRpZXMpXG5cdFx0XHR0aGlzLmxpbmtlZEVudGl0aWVzID0gey4uLmxpbmtlZEVudGl0aWVzfVxuXHRcdGVsc2Vcblx0XHRcdHRoaXMubGlua2VkRW50aXRpZXMgPSB7fVxuXHR9XG5cblx0bWVyZ2VXaXRoKGxpbmtlZEVudGl0aWVzOmFueSk6TGlua2VkRW50aXRpZXMge1xuXHRcdGlmKGxpbmtlZEVudGl0aWVzKVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMsIGxpbmtlZEVudGl0aWVzIH0pXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMgfSlcblx0fVxuXG5cdGdldExhYmVsRm9ySXJpKGlyaTpzdHJpbmcpOnN0cmluZ3x1bmRlZmluZWQge1xuXHRcdGNvbnN0IGxpbmtlZEVudGl0eSA9IHRoaXMubGlua2VkRW50aXRpZXNbaXJpXVxuXG5cdFx0aWYobGlua2VkRW50aXR5KSB7XG5cdFx0XHRjb25zdCBsYWJlbCA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXR5LmxhYmVsIClcblx0XHRcdGlmKGxhYmVsICYmIGxhYmVsLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGxhYmVsWzBdLnZhbHVlXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Z2V0KGlyaTpzdHJpbmcpOkxpbmtlZEVudGl0eXx1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmxpbmtlZEVudGl0aWVzW2lyaV1cblx0fVxufVxuIiwgImltcG9ydCB7VGhpbmd9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5cbmltcG9ydCBMaW5rZWRFbnRpdGllcyBmcm9tIFwiLi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5pbXBvcnQge1RoaW5nVHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHtwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzNUaGluZyBpbXBsZW1lbnRzIFRoaW5nIHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIGN1cmllIC8gb2JvX2lkIG1lYW50PyBcImlkXCIgb25seSBleGlzdHMgaW4gc3RhbmRhcmQ/IChodHRwOi8vd3d3LmViaS5hYy51ay9vbHM0L2FwaS9vbnRvbG9naWVzL2Fkby9wcm9wZXJ0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vUk9fMDAwMjE3NSlcbiAgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaWRcIl07XG4gIH1cblxuICBnZXRJcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXJpXCJdO1xuICB9XG5cbiAgLy8gc3RhbmRhcmQgcmVzcG9uc2VzIGRvbid0IGhhdmUgXCJ0eXBlXCIga2V5IC0+IGltcGxlbWVudCBzdGF0aWNhbGx5IGluIHN1YnR5cGVzXG4gIGFic3RyYWN0IGdldFR5cGUoKTogVGhpbmdUeXBlTmFtZTtcblxuICBnZXRUeXBlUGx1cmFsKCk6IFwib250b2xvZ2llc1wiIHwgXCJjbGFzc2VzXCIgfCBcInRlcm1zXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIHBsdXJhbGl6ZVR5cGUodGhpcy5nZXRUeXBlKCkpO1xuICB9XG5cbiAgLy8gbm90IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCByZXNwb25zZXNcbiAgZ2V0UmRmVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcblx0cmV0dXJuIHRoaXMuZ2V0TmFtZXMoKVswXTtcbiAgfVxuXG4gIC8vIGhhcyBhZGRpdGlvbmFsIGtleSBcInNob3J0aGFuZFwiPyAoaHR0cDovL3d3dy5lYmkuYWMudWsvb2xzNC9hcGkvb250b2xvZ2llcy9hZG8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsYWJlbHMgPSBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXVxuICAgICk7XG4gICAgaWYgKGxhYmVscyAmJiBsYWJlbHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGxhYmVscy5tYXAobGFiZWwgPT4gbGFiZWwudmFsdWUpXG4gICAgfVxuICAgIHJldHVybiBbdGhpcy5nZXRJcmkoKV07XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl0pO1xuICAgIGlmIChkZWZpbml0aW9uICYmIGRlZmluaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRlZmluaXRpb24ubWFwKChkZWYpID0+IGRlZi52YWx1ZSB8fCBcIlwiKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X25hbWVcIl07XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXBwbGljYWJsZSAvIG5lY2Vzc2FyeSBpbiBzdGFuZGFyZCBhcyB0aGVyZSBhcmUgbm8gbGlua2VkIGVudGl0aWVzXG4gIGdldExhYmVsRm9ySXJpKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsaW5rZWRFbnRpdGllcyA9IHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdO1xuICAgIGlmIChsaW5rZWRFbnRpdGllcykge1xuICAgICAgY29uc3QgbGFiZWw6UmVpZmllZDxzdHJpbmc+W10gPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oIGxpbmtlZEVudGl0aWVzW2lkXT8ubGFiZWwgKTtcbiAgICAgIHJldHVybiBsYWJlbFswXT8udmFsdWUgfHwgaWRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdO1xuICBhYnN0cmFjdCBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmc7XG4gIGFic3RyYWN0IGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdO1xuXG4gIC8vIFRPRE86IG5vdCBhcHBsaWNhYmxlIC8gbmVjZXNzYXJ5IGluIHN0YW5kYXJkXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxuXG4gIGdldERlcGljdGlvblVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdICYmIHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl1bXCJkZXBpY3Rpb25cIl0pIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW1wiZGVwaWN0aW9uXCJdWzBdO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwgImltcG9ydCB7RW50aXR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzVGhpbmd9IGZyb20gXCIuL09MUzNUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQge2FzQXJyYXksIGRlVW5kZXJzY29yZX0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eVR5cGVOYW1lfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzNFbnRpdHkgZXh0ZW5kcyBPTFMzVGhpbmcgaW1wbGVtZW50cyBFbnRpdHl7XG4gIGFic3RyYWN0IGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIGlzQ2Fub25pY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGRvZXMgbm90IHNlZW0gdG8gb2NjdXIgaW4gc3RhbmRhcmQgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL2VudGl0aWVzP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vRk9PRE9OXzAwMDA0NDc0KVxuICAvLyAgICAgICB2MiBoYXMgZGVwcmVjYXRlZCBpbmZvcm1hdGlvbiwgc3RhbmRhcmQgaGFzIG5vdFxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl0gPT09IFwidHJ1ZVwiXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIC8vIG9ubHkgc3VwcG9ydHMgRUZPIGZvciBub3dcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL29ic29sZXRlZF9pbl92ZXJzaW9uXCJdO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZWFzb24oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDAyMzFcIl1cbiAgICApLmNvbmNhdChcbiAgICAgIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL3JlYXNvbl9mb3Jfb2Jzb2xlc2NlbmNlXCJdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVwbGFjZW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMTAwMDAxXCJdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGV4aXN0ZW50IGluIHN0YW5kYXJkLiBDYW4gYmUgZXh0cmFjdGVkIGZyb20gXCJsaW5rc1wiLT5cImdyYXBoXCJcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3Rlcm1zP2lyaT1odHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vQUdST18wMDAwMDAwMilcbiAgZ2V0UmVsYXRlZEZyb20oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wicmVsYXRlZEZyb21cIl0pO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb25Bc0FycmF5KCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlc2NyaXB0aW9uXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCBmcm9tIFwibGlua3NcIi0+XCJjaGlsZHJlblwiXG4gIGhhc0RpcmVjdENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNEaXJlY3RDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICAvLyAvLyBUT0RPOiBub3QgZXhpc3RlbnQgaW4gc3RhbmRhcmQuIENhbiBiZSBleHRyYWN0ZWQgZnJvbSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQ2hpbGRyZW5cIlxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl0gPT09IFwidHJ1ZVwiO1xuICB9XG5cbiAgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc19jaGlsZHJlblwiXVxuICB9XG5cbiAgLy8gVE9ETzogY291bGQgbm90IGZpbmQgZXhhbXBsZXMgb2YgYW5jZXN0b3JzIGluIG5ldyBhcGkgc28gZmFyXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogY2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiaGllcmFyY2hpY2FsQW5jZXN0b3JzXCJcbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1zXCJdKTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gQ2FuIGJlIGV4dHJhY3RlZCB2aWEgc2VhcmNoaW5nIGZvciBlbnRpdHkgd2l0aG91dCBzcGVjaWZpYyBvbnRvbG9neSAtPiBnaXZlcyBhbGwgb2NjdXJyZW5jZXNcbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRDcm9zc1JlZmVyZW5jZXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW1wiaGFzX2RieHJlZlwiXSB8fCBbXTtcbiAgfVxuXG4gIC8vIFRPRE86IG5vdCBleGlzdGVudCBpbiBzdGFuZGFyZC4gU3RhbmRhcmQgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIGlzX2RlZmluaW5nX29udG9sb2d5IGFzIHdlbGxcbiAgLy8gICAgICAgKGh0dHA6Ly93d3cuZWJpLmFjLnVrL29sczQvYXBpL3YyL29udG9sb2dpZXMvcm8vcHJvcGVydGllcz9pcmk9aHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL1JPXzAwMDIxNzUpXG4gIGdldERlZmluZWRCeSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbmVkQnlcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0SXNEZWZpbmluZ09udG9sb2d5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0gfHwgdW5kZWZpbmVkICkgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvYm9faWRcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IGFyZSB0aGUgZm9sbG93aW5nIDMgbmVlZGVkP1xuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgWyAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl0gfHwgW10pLFxuICAgICAgICAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdIHx8IFtdKSBdXG4gICAgKTtcbiAgfVxuXG4gIGlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9zY2hlbWEub3JnL1wiKVxuICB9XG5cbiAgLyoqIENhbiBiZSBqdXN0IGZvdW5kIHVuZGVyIGBwcm9wZXJ0aWVzW1wiYW5ub3RhdGlvblwiXWAuXG4gICAqICBOb3QgcHJlc2VudCBpbiBvbHM0L2FwaSxcbiAgICogIGJ1dCBpbiBzZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9hcGkuXG4gICAqL1xuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgLyogb2xzNCBleGNsdWRlcyBcImhhcyBwcmVmZXJyZWQgcm9vdCB0ZXJtXCIsXG4gICAgICAgcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhbmQgYW55dGhpbmcgaW4gcmRmLCByZGZzIGFuZCBvd2wgbmFtZXNwYWNlcyxcbiAgICAgICBidXQgdGhpcyBpcyBub3QgcG9zc2libGUgaGVyZSBhcyB0aGUgbGFiZWxzIGFyZSBrZXlzIGhlcmUsIG5vdCB0aGUgSVJJJ3MgKi9cbiAgICByZXR1cm4gYXNBcnJheTxzdHJpbmc+KE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllc1tcImFubm90YXRpb25cIl0pKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlVW5kZXJzY29yZShpZCk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTpSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJhbm5vdGF0aW9uXCJdW2lkXSkpXG4gIH1cblxuICAvLyBUT0RPOiBDYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxEZXNjZW5kYW50c1wiXG4gIGdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgLy8gVE9ETzogQ2FuIGJlIGluZmVycmVkIHZpYSBcImxpbmtzXCItPlwiZGVzY2VuZGFudHNcIlxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIC8vIFRPRE86IENhbiBiZSBpbmZlcnJlZCB2aWEgXCJsaW5rc1wiLT5cImhpZXJhcmNoaWNhbFBhcmVudHNcIlxuICBnZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhwYXJlbnRJcmk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgaGllcmFyY2hpY2FsUGFyZW50cykge1xuICAgICAgaWYgKHAudmFsdWUgPT09IHBhcmVudElyaSkge1xuICAgICAgICByZXR1cm4gcC5nZXRNZXRhZGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IGdldFR5cGUoKTogRW50aXR5VHlwZU5hbWU7XG59XG4iLCAiaW1wb3J0IHtDbGFzc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM0VudGl0eX0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0NsYXNzVHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgT0xTM0NsYXNzIGV4dGVuZHMgT0xTM0VudGl0eSBpbXBsZW1lbnRzIENsYXNzIHtcblxuICBnZXRUeXBlKCk6IENsYXNzVHlwZU5hbWUge1xuICAgIHJldHVybiBcImNsYXNzXCJcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJjbGFzc2VzXCIgfCBcInByb3BlcnRpZXNcIiB8IFwiaW5kaXZpZHVhbHNcIiB7XG4gICAgcmV0dXJuIFwiY2xhc3Nlc1wiXG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJoaWVyYXJjaGljYWxQYXJlbnRzXCJcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG4gIH1cblxuICAvLyBUT0RPOiBjYW4gYmUgaW5mZXJyZWQgdmlhIFwibGlua3NcIi0+XCJwYXJlbnRzXCJcbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudENsYXNzXCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgLy8gVE9ETzogY2FuIHRoaXMgYmUgaW5mZXJyZWQ/XG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFdpdGgnXSlcbiAgfVxuXG4gIC8vIFRPRE86IGNhbiB0aGlzIGJlIGluZmVycmVkP1xuICBnZXRIYXNLZXkoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXknXSlcbiAgfVxuXG4gIGdldFN1YnNldHMoKTogYW55W10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImluX3N1YnNldFwiXSkgfHwgW107XG4gIH1cbn1cbiIsICJpbXBvcnQge1Byb3BlcnR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFMzRW50aXR5fSBmcm9tIFwiLi9PTFMzRW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7UHJvcGVydHlUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzUHJvcGVydHkgZXh0ZW5kcyBPTFMzRW50aXR5IGltcGxlbWVudHMgUHJvcGVydHl7XG5cbiAgZ2V0VHlwZSgpOiBQcm9wZXJ0eVR5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJwcm9wZXJ0eVwiO1xuICB9XG5cbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eURpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludmVyc2VPZlwiXSk7XG4gIH1cblxuICBnZXREb21haW4oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjZG9tYWluJ10pXG4gIH1cblxuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNyYW5nZSddKVxuICB9XG5cbiAgZ2V0UHJvcGVydHlDaGFpbnMoKTpSZWlmaWVkPGFueT5bXSB7XG5cdHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG5cdFx0dGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlDaGFpbkF4aW9tXCJdXG5cdClcbiAgfVxufVxuIiwgImltcG9ydCB7SW5kaXZpZHVhbH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM0VudGl0eX0gZnJvbSBcIi4vT0xTM0VudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0luZGl2aWR1YWxUeXBlTmFtZX0gZnJvbSBcIi4uL01vZGVsVHlwZUNoZWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFMzSW5kaXZpZHVhbCBleHRlbmRzIE9MUzNFbnRpdHkgaW1wbGVtZW50cyBJbmRpdmlkdWFse1xuXG4gIGdldFR5cGUoKTogSW5kaXZpZHVhbFR5cGVOYW1lIHtcbiAgICByZXR1cm4gXCJpbmRpdmlkdWFsXCI7XG4gIH1cblxuICBnZXRQYXJlbnRzKCkge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJkaXJlY3RQYXJlbnRcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFtdKVxuICB9XG5cbiAgZ2V0RGlmZmVyZW50RnJvbSgpIHtcbiAgICByZXR1cm4gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RpZmZlcmVudEZyb21cIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0U2FtZUFzKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3NhbWVBc1wiXSk7XG4gIH1cblxuICBnZXRJbmRpdmlkdWFsVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJkZlR5cGVzOiBhbnkgPSB0aGlzLmdldFJkZlR5cGVzKCk7XG5cbiAgICBpZiAoIXJkZlR5cGVzIHx8ICFBcnJheS5pc0FycmF5KHJkZlR5cGVzKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZGZUeXBlcy5maWx0ZXIoXG4gICAgICAodDogYW55KSA9PlxuICAgICAgICB0ICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI05hbWVkSW5kaXZpZHVhbFwiICYmXG5cdFx0KCAoISAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB8fCAhdC5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSkpXG4gICAgKTtcbiAgfVxufVxuIiwgImltcG9ydCB7T250b2xvZ3l9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzNUaGluZ30gZnJvbSBcIi4vT0xTM1RoaW5nXCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7YXNBcnJheSwgZGVDYW1lbENhc2V9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTM09udG9sb2d5IGV4dGVuZHMgT0xTM1RoaW5nIGltcGxlbWVudHMgT250b2xvZ3l7XG5cbiAgZ2V0VHlwZSgpOiBcIm9udG9sb2d5XCIgfCBcImNsYXNzXCIgfCBcInByb3BlcnR5XCIgfCBcImluZGl2aWR1YWxcIiB7XG4gICAgcmV0dXJuIFwib250b2xvZ3lcIjtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJvbnRvbG9naWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICByZXR1cm4gXCJvbnRvbG9naWVzXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWVzID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ0aXRsZVwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKG5hbWVzWzBdICYmIG5hbWVzWzBdLnZhbHVlKSB8fCB0aGlzLmdldE9udG9sb2d5SWQoKTtcbiAgfVxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9ucyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImRlc2NyaXB0aW9uXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAoZGVzY3JpcHRpb25zWzBdICYmIGRlc2NyaXB0aW9uc1swXS52YWx1ZSkgfHwgXCJcIjtcbiAgfVxuXG4gIGdldENyZWF0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJhbm5vdGF0aW9uc1wiXVtcImNyZWF0b3JcIl0pO1xuICB9XG5cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ1cGRhdGVkXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZUZXJtc1wiXSk7XG4gIH1cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlByb3BlcnRpZXNcIl0pO1xuICB9XG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mSW5kaXZpZHVhbHNcIl0pO1xuICB9XG4gIGdldExvZ29VUkwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wibG9nb1wiXSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyB1c2VkIGFzIElSSVxuICBnZXRPbnRvbG9neVB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiaWRcIl07XG4gIH1cblxuICBnZXRIb21lcGFnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJob21lcGFnZVwiXTtcbiAgfVxuICBnZXRNYWlsaW5nTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJtYWlsaW5nTGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl1bXCJ2ZXJzaW9uSXJpXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1widmVyc2lvblwiXTtcbiAgfVxuICBnZXRWZXJzaW9uRnJvbUlyaSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25JcmkgPSB0aGlzLmdldFZlcnNpb25JcmkoKTtcbiAgICBpZiAoIXZlcnNpb25JcmkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZlcnNpb25Gcm9tRGF0ZSA9IHZlcnNpb25JcmkubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Lyk7XG5cbiAgICBpZiAodmVyc2lvbkZyb21EYXRlICYmIHZlcnNpb25Gcm9tRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21EYXRlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2ZXJzaW9uRnJvbU51bWJlciA9IHZlcnNpb25JcmkubWF0Y2goL1xcL3ZbZC5dLipcXC8vKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbU51bWJlclxuICAgICAgICA/IHZlcnNpb25Gcm9tTnVtYmVyWzBdLnJlcGxhY2VBbGwoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCJ2XCIsIFwiXCIpXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0TG9hZGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxvYWRlZFwiXTtcbiAgfVxuXG4gIC8qKiBDYW4gYmUganVzdCBmb3VuZCB1bmRlciBgcHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdYC5cbiAgICogIE5vdCBwcmVzZW50IGluIG9sczQvYXBpLFxuICAgKiAgYnV0IGluIHNlbWFudGljbG9va3VwLnpibWVkLmRlL2FwaS5cbiAgICovXG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZih0aGlzLnByb3BlcnRpZXNbXCJjb25maWdcIl0gJiYgdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYW5ub3RhdGlvbnNcIl0pIHtcbiAgICAgIC8qIG9sczQgZXhjbHVkZXMgXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiLFxuICAgICAgIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYW5kIGFueXRoaW5nIGluIHJkZiwgcmRmcyBhbmQgb3dsIG5hbWVzcGFjZXMsXG4gICAgICAgYnV0IHRoaXMgaXMgbm90IHBvc3NpYmxlIGhlcmUgYXMgdGhlIGxhYmVscyBhcmUga2V5cyBoZXJlLCBub3QgdGhlIElSSSdzICovXG4gICAgICByZXR1cm4gYXNBcnJheTxzdHJpbmc+KE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gXCJhbm5vdGF0aW9uc1wiIGtleSBpcyBub3QgcHJlc2VudCBpbiBvbHM0L2FwaVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGdldEFubm90YXRpb25UaXRsZUJ5SWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlQ2FtZWxDYXNlKGlkKTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25CeUlkKGlkOiBzdHJpbmcpOlJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbihhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImNvbmZpZ1wiXVtcImFubm90YXRpb25zXCJdW2lkXSlcbiAgICAgICAgLmZpbHRlcigoZWxlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgZWxlbSAhPT0gXCJzdHJpbmdcIiB8fCBlbGVtICE9PSBcIlwiXG4gICAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG4gIGdldExhbmd1YWdlcygpOiBzdHJpbmdbXSB7XG4gICAgLy8gbm90IGF2YWlsYWJsZSBpbiBzZW1sb29rcCBBUEksIGJ1dCBpbiBlYmkgQVBJXG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wibGFuZ1wiXSk7XG4gIH1cblxuICAvLyBUT0RPOiBub3QgYXZhaWxhYmxlP1xuICBnZXRJbXBvcnRzRnJvbSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGF2YWlsYWJsZT9cbiAgZ2V0RXhwb3J0c1RvKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJleHBvcnRzVG9cIl0pO1xuICB9XG4gIGdldEFsbG93RG93bmxvYWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiY29uZmlnXCJdW1wiYWxsb3dEb3dubG9hZFwiXTtcbiAgfVxufVxuIiwgImltcG9ydCB7T250b2xvZ2llc30gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTM09udG9sb2d5fSBmcm9tIFwiLi9PTFMzT250b2xvZ3lcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzNPbnRvbG9naWVzIGltcGxlbWVudHMgT250b2xvZ2llcyB7XG4gIHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IE9MUzNPbnRvbG9neVtdKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldFRvdGFsT250b2xvZ2llcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0TnVtRW50aXRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bUVudGl0aWVzKCksIDApO1xuICB9XG5cbiAgZ2V0TnVtQ2xhc3NlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtQ2xhc3NlcygpLCAwKTtcbiAgfVxuXG4gIGdldE51bVByb3BlcnRpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZSgodG90YWwsIG9udG9sb2d5KSA9PiB0b3RhbCArIG9udG9sb2d5LmdldE51bVByb3BlcnRpZXMoKSwgMCk7XG4gIH1cblxuICBnZXROdW1JbmRpdmlkdWFscygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKCh0b3RhbCwgb250b2xvZ3kpID0+IHRvdGFsICsgb250b2xvZ3kuZ2V0TnVtSW5kaXZpZHVhbHMoKSwgMCk7XG4gIH1cbn1cbiIsICJpbXBvcnQge1RoaW5nfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuXG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4uL0xpbmtlZEVudGl0aWVzXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBpc1RoaW5nVHlwZU5hbWUsIFRoaW5nVHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9MUzRUaGluZyBpbXBsZW1lbnRzIFRoaW5nIHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIC8vIFRPRE86IElzIGN1cmllIC8gb2JvX2lkIG1lYW50P1xuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpZFwiXTtcbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5wcm9wZXJ0aWVzW1widHlwZVwiXSBhcyBzdHJpbmdbXTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKFxuICAgICAgICBpc1RoaW5nVHlwZU5hbWUodHlwZSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHlwZSBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcInRlcm1zXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjogY2FzZSBcImFubm90YXRpb25Qcm9wZXJ0eVwiOiBjYXNlIFwiZGF0YVByb3BlcnR5XCI6IGNhc2UgXCJvYmplY3RQcm9wZXJ0eVwiOlxuICAgICAgICByZXR1cm4gXCJwcm9wZXJ0aWVzXCI7XG4gICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICByZXR1cm4gXCJpbmRpdmlkdWFsc1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGdldFJkZlR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXG4gICAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCJcbiAgICBdKVxuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRyZXR1cm4gdGhpcy5nZXROYW1lcygpWzBdO1xuICB9XG5cbiAgZ2V0TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhYmVscyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdXG4gICAgKTtcbiAgICBpZiAobGFiZWxzICYmIGxhYmVscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbGFiZWxzLm1hcChsYWJlbCA9PiBsYWJlbC52YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIFt0aGlzLmdldElyaSgpXTtcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uXCJdKTtcbiAgICBpZiAoZGVmaW5pdGlvbiAmJiBkZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uLm1hcCgoZGVmKSA9PiBkZWYudmFsdWUgfHwgXCJcIikuam9pbihcIiBcIik7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG5cbiAgZ2V0TGFiZWxGb3JJcmkoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpbmtlZEVudGl0aWVzID0gdGhpcy5wcm9wZXJ0aWVzW1wibGlua2VkRW50aXRpZXNcIl07XG4gICAgaWYgKGxpbmtlZEVudGl0aWVzKSB7XG4gICAgICBjb25zdCBsYWJlbDpSZWlmaWVkPHN0cmluZz5bXSA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPiggbGlua2VkRW50aXRpZXNbaWRdPy5sYWJlbCApO1xuICAgICAgcmV0dXJuIGxhYmVsWzBdPy52YWx1ZSB8fCBpZFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3QgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW107XG5cbiAgZ2V0QW5ub3RhdGlvbkJ5SWQoaWQ6IHN0cmluZyk6UmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uKGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW2lkXSkpXG4gIH1cblxuICBnZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExhYmVsRm9ySXJpKGlkKTtcbiAgfVxuXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxuXG4gIGdldERlcGljdGlvblVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xL2RlcGljdGlvblwiXSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwgImltcG9ydCB7RW50aXR5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0VGhpbmd9IGZyb20gXCIuL09MUzRUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPTFM0RW50aXR5IGV4dGVuZHMgT0xTNFRoaW5nIGltcGxlbWVudHMgRW50aXR5e1xuICBhYnN0cmFjdCBnZXRQYXJlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdO1xuICBhYnN0cmFjdCBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXTtcblxuICBpc0Nhbm9uaWNhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXNEZWZpbmluZ09udG9sb2d5XCJdXG4gIH1cblxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25WZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgLy8gb25seSBzdXBwb3J0cyBFRk8gZm9yIG5vd1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vb2Jzb2xldGVkX2luX3ZlcnNpb25cIl07XG4gIH1cblxuICBnZXREZXByZWNhdGlvblJlYXNvbigpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDIzMVwiXVxuICAgICkuY29uY2F0KFxuICAgICAgUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LmViaS5hYy51ay9lZm8vcmVhc29uX2Zvcl9vYnNvbGVzY2VuY2VcIl1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZXBsYWNlbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAxMDAwMDFcIl07XG4gIH1cblxuICBnZXRSZWxhdGVkRnJvbSgpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pih0aGlzLnByb3BlcnRpZXNbXCJyZWxhdGVkRnJvbVwiXSk7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbkFzQXJyYXkoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSk7XG4gIH1cblxuICBoYXNEaXJlY3RDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzRGlyZWN0Q2hpbGRyZW5cIl07XG4gIH1cblxuICBoYXNIaWVyYXJjaGljYWxDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW5cIl07XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RDaGlsZHJlbigpIHx8IHRoaXMuaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1cIl0pO1xuICB9XG5cbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXRDcm9zc1JlZmVyZW5jZXMoKTogYW55W10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaGFzRGJYcmVmXCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldERlZmluZWRCeSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbmVkQnlcIl0gfHwgW10pIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0SXNEZWZpbmluZ09udG9sb2d5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0gfHwgdW5kZWZpbmVkICkgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjdXJpZVwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydEZvcm1cIl07XG4gIH1cblxuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgWyAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0ZWRfYnlcIl0gfHwgW10pLFxuICAgICAgICAuLi5hc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvZGVwaWN0aW9uXCJdIHx8IFtdKSBdXG4gICAgKTtcbiAgfVxuXG4gIGlzUHJlZGljYXRlRnJvbUluZm9ybWFsVm9jYWJ1bGFyeShwcmVkaWNhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIikgfHxcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly9zY2hlbWEub3JnL1wiKVxuICB9XG4gIGdldEFubm90YXRpb25QcmVkaWNhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBkZWZpbml0aW9uUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblByb3BlcnR5XCJdKTtcbiAgICBjb25zdCBzeW5vbnltUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVByb3BlcnR5XCJdKTtcbiAgICBjb25zdCBoaWVyYXJjaGljYWxQcm9wZXJ0aWVzID0gYXNBcnJheShcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFByb3BlcnR5XCJdXG4gICAgKTtcbiAgICBjb25zdCBhbm5vdGF0aW9uUHJlZGljYXRlcyA9IG5ldyBTZXQoKTtcblxuICAgIGZvciAoY29uc3QgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAvLyB0aGlzIGlzIGhhbmRsZWQgZXhwbGljaXRseSBpbiBFbnRpdHlQYWdlXG4gICAgICBpZiAocHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiKSBjb250aW51ZTtcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3Rpb25cIikgY29udGludWU7XG5cbiAgICAgIC8vIE9iamVjdCBwcm9wZXJ0aWVzIGFuZCBkYXRhIHByb3BlcnRpZXMgYXJlIG5vdCBhbm5vdGF0aW9uIHByb3BlcnRpZXMsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBpbmZvcm1hbCB2b2NhYnVsYXJpZXMuXG4gICAgICBpZiAoIXRoaXMuaXNQcmVkaWNhdGVGcm9tSW5mb3JtYWxWb2NhYnVsYXJ5KHByZWRpY2F0ZSkpIHtcbiAgICAgICAgY29uc3QgbGlua2VkRW50aXR5ID0gdGhpcy5nZXRMaW5rZWRFbnRpdGllcygpLmdldChwcmVkaWNhdGUpXG4gICAgICAgIGlmIChsaW5rZWRFbnRpdHkgIT0gdW5kZWZpbmVkICYmIGxpbmtlZEVudGl0eS50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTEpIGNvbnRpbnVlO1xuICAgICAgICBpZiAobGlua2VkRW50aXR5ICE9IHVuZGVmaW5lZCAmJiBsaW5rZWRFbnRpdHkudHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBpbnRlcnByZXRlZCBhcyBkZWZpbml0aW9uL3N5bm9ueW0vaGllcmFyY2hpY2FsLCBkb1xuICAgICAgLy8gbm90IGluY2x1ZGUgaXQgYXMgYW4gYW5ub3RhdGlvblxuICAgICAgaWYgKFxuICAgICAgICBkZWZpbml0aW9uUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xIHx8XG4gICAgICAgIHN5bm9ueW1Qcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTEgfHxcbiAgICAgICAgaGllcmFyY2hpY2FsUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFueXRoaW5nIGluIHRoZSByZGYsIHJkZnMsIG93bCBuYW1lc3BhY2VzIGFyZW4ndCBkaXNwbGF5ZWQgaW4gdGhlIGFubm90YXRpb25zIHNlY3Rpb24uLi5cbiAgICAgIGlmIChcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIC4uLmFwYXJ0IGZyb20gdGhlc2Ugb25lc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNjb21tZW50XCIgJiZcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3NlZUFsc29cIiAmJlxuICAgICAgICAgIC8vIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXlcIiAmJlxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFVuaW9uT2ZcIlxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB3aGlsZSBpbiBnZW5lcmFsIG9ib0luT3dsIG5hbWVzcGFjZSBwcm9wZXJ0aWVzIGFyZSBhbm5vdGF0aW9ucywgc29tZVxuICAgICAgLy8gb2YgdGhlbSB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXlcbiAgICAgIC8vXG4gICAgICBpZiAoXG4gICAgICAgIHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpblN1YnNldFwiIHx8XG4gICAgICAgIHByZWRpY2F0ZSA9PT0gXCJodHRwOi8vd3d3LmdlbmVvbnRvbG9neS5vcmcvZm9ybWF0cy9vYm9Jbk93bCNpZFwiXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGFubm90YXRpb25QcmVkaWNhdGVzLmFkZChwcmVkaWNhdGUpO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKFwiQVBzXCIpO1xuICAgIC8vIGNvbnNvbGUuZGlyKEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpKTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGFubm90YXRpb25QcmVkaWNhdGVzKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdXG4gICAgICA/IHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzXCJdKVxuICAgICAgOiAwO1xuICB9XG5cbiAgZ2V0TnVtRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtRGlyZWN0RGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtRGlyZWN0RGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICBnZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhwYXJlbnRJcmk6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHAgb2YgaGllcmFyY2hpY2FsUGFyZW50cykge1xuICAgICAgaWYgKHAudmFsdWUgPT09IHBhcmVudElyaSkge1xuICAgICAgICByZXR1cm4gcC5nZXRNZXRhZGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7Q2xhc3N9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQge09MUzRFbnRpdHl9IGZyb20gXCIuL09MUzRFbnRpdHlcIjtcblxuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL1JlaWZpZWRcIjtcblxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gXCIuLi8uLi9hcHAvdXRpbFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTNENsYXNzIGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIENsYXNzIHtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRDbGFzc1wiXVxuICAgICk7XG4gIH1cblxuICBnZXREaXNqb2ludFdpdGgoKSB7XG5cdHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlzam9pbnRXaXRoJ10pO1xuICB9XG5cbiAgZ2V0SGFzS2V5KCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzS2V5J10pO1xuICB9XG5cbiAgZ2V0U3Vic2V0cygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5nZW5lb250b2xvZ3kub3JnL2Zvcm1hdHMvb2JvSW5Pd2wjaW5TdWJzZXRcIl0pIHx8IFtdO1xuICB9XG59XG4iLCAiaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7T0xTNEVudGl0eX0gZnJvbSBcIi4vT0xTNEVudGl0eVwiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0UHJvcGVydHkgZXh0ZW5kcyBPTFM0RW50aXR5IGltcGxlbWVudHMgUHJvcGVydHl7XG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViUHJvcGVydHlPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2VxdWl2YWxlbnRQcm9wZXJ0eVwiXVxuICAgICk7XG4gIH1cblxuXG4gIGdldERpc2pvaW50V2l0aCgpIHtcblx0cmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eURpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2ludmVyc2VPZlwiXSk7XG4gIH1cblxuICBnZXREb21haW4oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzWydodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjZG9tYWluJ10pXG4gIH1cblxuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNyYW5nZSddKVxuICB9XG5cbiAgZ2V0UHJvcGVydHlDaGFpbnMoKTpSZWlmaWVkPGFueT5bXSB7XG5cdHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG5cdFx0dGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcHJvcGVydHlDaGFpbkF4aW9tXCJdXG5cdClcbiAgfVxuXG59XG4iLCAiaW1wb3J0IHtJbmRpdmlkdWFsfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0RW50aXR5fSBmcm9tIFwiLi9PTFM0RW50aXR5XCI7XG5cbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9SZWlmaWVkXCI7XG5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vLi4vYXBwL3V0aWxcIjtcblxuZXhwb3J0IGNsYXNzIE9MUzRJbmRpdmlkdWFsIGV4dGVuZHMgT0xTNEVudGl0eSBpbXBsZW1lbnRzIEluZGl2aWR1YWx7XG4gIGdldFBhcmVudHMoKSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImRpcmVjdFBhcmVudFwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oW10pXG4gIH1cblxuICBnZXREaWZmZXJlbnRGcm9tKCkge1xuICAgIHJldHVybiBhc0FycmF5KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZGlmZmVyZW50RnJvbVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRTYW1lQXMoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc2FtZUFzXCJdKTtcbiAgfVxuXG4gIGdldEluZGl2aWR1YWxUeXBlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmRmVHlwZXM6IGFueSA9IHRoaXMuZ2V0UmRmVHlwZXMoKTtcblxuICAgIGlmICghcmRmVHlwZXMgfHwgIUFycmF5LmlzQXJyYXkocmRmVHlwZXMpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJkZlR5cGVzLmZpbHRlcihcbiAgICAgICh0OiBhbnkpID0+XG4gICAgICAgIHQgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjTmFtZWRJbmRpdmlkdWFsXCIgJiZcblx0XHQoICghICh0eXBlb2YgdCA9PT0gJ3N0cmluZycpIHx8ICF0LnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpKSlcbiAgICApO1xuICB9XG5cbn1cbiIsICJpbXBvcnQge09udG9sb2d5fSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtPTFM0VGhpbmd9IGZyb20gXCIuL09MUzRUaGluZ1wiO1xuXG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vUmVpZmllZFwiO1xuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBjbGFzcyBPTFM0T250b2xvZ3kgZXh0ZW5kcyBPTFM0VGhpbmcgaW1wbGVtZW50cyBPbnRvbG9neXtcbiAgZ2V0T250b2xvZ3lJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neUlkXCJdO1xuICB9XG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lcyA9IFJlaWZpZWQuZnJvbUpzb248c3RyaW5nPihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImxhYmVsXCJdIHx8IHRoaXMucHJvcGVydGllc1tcInRpdGxlXCJdIHx8IFwiXCJcbiAgICApO1xuICAgIHJldHVybiAobmFtZXNbMF0gJiYgbmFtZXNbMF0udmFsdWUpIHx8IHRoaXMuZ2V0T250b2xvZ3lJZCgpO1xuICB9XG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb25zID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKGRlc2NyaXB0aW9uc1swXSAmJiBkZXNjcmlwdGlvbnNbMF0udmFsdWUpIHx8IFwiXCI7XG4gIH1cblxuICBnZXRDcmVhdG9ycygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9jcmVhdG9yXCJdKTtcbiAgfVxuXG4gIGdldFNvdXJjZUZpbGVUaW1lc3RhbXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic291cmNlRmlsZVRpbWVzdGFtcFwiXTtcbiAgfVxuICBnZXROdW1FbnRpdGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZkVudGl0aWVzXCJdKTtcbiAgfVxuICBnZXROdW1DbGFzc2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mQ2xhc3Nlc1wiXSk7XG4gIH1cbiAgZ2V0TnVtUHJvcGVydGllcygpOiBudW1iZXIge1xuICAgIHJldHVybiBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1iZXJPZlByb3BlcnRpZXNcIl0pO1xuICB9XG4gIGdldE51bUluZGl2aWR1YWxzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mSW5kaXZpZHVhbHNcIl0pO1xuICB9XG4gIGdldExvZ29VUkwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiZGVwaWN0ZWRfYnlcIl0gfHwgdW5kZWZpbmVkO1xuICB9XG4gIGdldE9udG9sb2d5UHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJvbnRvbG9neV9wdXJsXCJdO1xuICB9XG4gIGdldEhvbWVwYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhvbWVwYWdlXCJdO1xuICB9XG4gIGdldE1haWxpbmdMaXN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm1haWxpbmdfbGlzdFwiXTtcbiAgfVxuICBnZXRUcmFja2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcInRyYWNrZXJcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbklyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSVJJXCJdO1xuICB9XG4gIGdldFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbkluZm9cIl07XG4gIH1cbiAgZ2V0VmVyc2lvbkZyb21JcmkoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXJzaW9uSXJpID0gdGhpcy5nZXRWZXJzaW9uSXJpKCk7XG4gICAgaWYgKCF2ZXJzaW9uSXJpKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCB2ZXJzaW9uRnJvbURhdGUgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXGR7NH0tXFxkezJ9LVxcZHsyfS8pO1xuXG4gICAgaWYgKHZlcnNpb25Gcm9tRGF0ZSAmJiB2ZXJzaW9uRnJvbURhdGUubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHZlcnNpb25Gcm9tRGF0ZVswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmVyc2lvbkZyb21OdW1iZXIgPSB2ZXJzaW9uSXJpLm1hdGNoKC9cXC92W2QuXS4qXFwvLyk7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21OdW1iZXJcbiAgICAgICAgPyB2ZXJzaW9uRnJvbU51bWJlclswXS5yZXBsYWNlQWxsKFwiL1wiLCBcIlwiKS5yZXBsYWNlKFwidlwiLCBcIlwiKVxuICAgICAgICA6IFwiXCI7XG4gICAgfVxuICB9XG4gIGdldExvYWRlZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsb2FkZWRcIl07XG4gIH1cbiAgZ2V0QW5ub3RhdGlvblByZWRpY2F0ZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChjb25zdCBwcmVkaWNhdGUgb2YgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKSkge1xuICAgICAgLy8gcHJvcGVydGllcyB3aXRob3V0IGFuIElSSSBhcmUgdGhpbmdzIHRoYXQgd2VyZSBhZGRlZCBieSByZGYyanNvbiBzbyBzaG91bGQgbm90XG4gICAgICAvLyBiZSBpbmNsdWRlZCBhcyBhbm5vdGF0aW9uc1xuICAgICAgaWYgKHByZWRpY2F0ZS5pbmRleE9mKFwiOi8vXCIpID09PSAtMSkgY29udGludWU7XG5cbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMDAwNzAwXCIpIHtcbiAgICAgICAgLy8gXCJoYXMgcHJlZmVycmVkIHJvb3QgdGVybVwiXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbnl0aGluZyBpbiB0aGUgcmRmLCByZGZzLCBvd2wgbmFtZXNwYWNlcyBhcmVuJ3QgY29uc2lkZXJlZCBhbm5vdGF0aW9uc1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjXCIpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBhbm5vdGF0aW9uUHJlZGljYXRlcy5hZGQocHJlZGljYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykgYXMgc3RyaW5nW107XG4gIH1cbiAgZ2V0UHJlZmVycmVkUm9vdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImhhc1ByZWZlcnJlZFJvb3RcIl0pO1xuICB9XG4gIGdldExhbmd1YWdlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wibGFuZ3VhZ2VcIl0pO1xuICB9XG4gIGdldEltcG9ydHNGcm9tKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJpbXBvcnRzRnJvbVwiXSk7XG4gIH1cbiAgZ2V0RXhwb3J0c1RvKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJleHBvcnRzVG9cIl0pO1xuICB9XG5cbiAgLy8gVE9ETzogbm90IGF2YWlsYWJsZT9cbiAgZ2V0QWxsb3dEb3dubG9hZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJhbGxvd0Rvd25sb2FkXCJdO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgT0xTM09udG9sb2d5LCBPTFMzQ2xhc3MsIE9MUzNQcm9wZXJ0eSwgT0xTM0luZGl2aWR1YWwgfSBmcm9tIFwiLi9vbHMzLW1vZGVsXCI7XG5pbXBvcnQgeyBPTFM0T250b2xvZ3ksIE9MUzRDbGFzcywgT0xTNFByb3BlcnR5LCBPTFM0SW5kaXZpZHVhbCB9IGZyb20gXCIuL29sczQtbW9kZWxcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgVGhpbmdUeXBlTmFtZSB9IGZyb20gXCIuL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBhc0FycmF5LCBpbmZlclR5cGVGcm9tVHlwZUFycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbE9iamVjdChyZXNwb25zZTogYW55KSB7XG4gIGxldCB1c2VMZWdhY3k6IGJvb2xlYW47XG4gIGlmIChyZXNwb25zZVtcIl9lbWJlZGRlZFwiXSAhPT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlW1wibnVtYmVyT2ZUZXJtc1wiXSAhPT0gdW5kZWZpbmVkKSB1c2VMZWdhY3kgPSB0cnVlO1xuICBlbHNlIGlmIChyZXNwb25zZVtcImVsZW1lbnRzXCJdICE9PSB1bmRlZmluZWQgfHwgcmVzcG9uc2VbXCJudW1iZXJPZkNsYXNzZXNcIl0gIT09IHVuZGVmaW5lZCkgdXNlTGVnYWN5ID0gZmFsc2U7XG4gIGVsc2UgdGhyb3cgRXJyb3IoYFJlc3BvbnNlIHN0cnVjdHVyZSBkb2VzIG5vdCBjb3JyZWxhdGUgdG8gYW55IG9mIHRoZSBmZWF0dXJlZCByZXNwb25zZSBzdHJ1Y3R1cmVzOiBcXG4gJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZSl9YCk7XG5cbiAgbGV0IGVudGl0eVR5cGU6IFRoaW5nVHlwZU5hbWUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGlmICh1c2VMZWdhY3kpIHtcbiAgICBpZiAocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW50aXR5VHlwZSA9IFwib250b2xvZ3lcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJ0ZXJtc1wiXSAhPT0gdW5kZWZpbmVkKSBlbnRpdHlUeXBlID0gXCJ0ZXJtXCI7XG4gICAgICBlbHNlIGlmIChyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInByb3BlcnRpZXNcIl0gIT09IHVuZGVmaW5lZCkgZW50aXR5VHlwZSA9IFwicHJvcGVydHlcIjtcbiAgICAgIGVsc2UgaWYgKHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1wiaW5kaXZpZHVhbHNcIl0gIT09IHVuZGVmaW5lZCkgZW50aXR5VHlwZSA9IFwiaW5kaXZpZHVhbFwiO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBpZiAocmVzcG9uc2VbXCJlbGVtZW50c1wiXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbnRpdHlUeXBlID0gXCJvbnRvbG9neVwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChyZXNwb25zZVtcImVsZW1lbnRzXCJdWzBdID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRW1wdHkgcmVzcG9uc2UuXCIpO1xuXG4gICAgICBlbnRpdHlUeXBlID0gaW5mZXJUeXBlRnJvbVR5cGVBcnJheShyZXNwb25zZVtcImVsZW1lbnRzXCJdWzBdW1widHlwZVwiXSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGVudGl0eVR5cGUgPT09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoXCJFbnRpdHkgdHlwZSBjb3VsZCBub3QgYmUgY29ycmVjdGx5IGluZmVycmVkLlwiKTtcblxuICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3RXaXRoRW50aXR5VHlwZVdpdGhVc2VMZWdhY3kocmVzcG9uc2UsIGVudGl0eVR5cGUsIHVzZUxlZ2FjeSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vZGVsT2JqZWN0V2l0aEVudGl0eVR5cGVXaXRoVXNlTGVnYWN5KHJlc3BvbnNlOiBhbnksIGVudGl0eVR5cGU6IHN0cmluZywgdXNlTGVnYWN5OiBib29sZWFuKTogVGhpbmcge1xuICBzd2l0Y2ggKGVudGl0eVR5cGUpIHtcbiAgICBjYXNlIFwib250b2xvZ3lcIjpcbiAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM09udG9sb2d5KHJlc3BvbnNlKSA6IG5ldyBPTFM0T250b2xvZ3kocmVzcG9uc2UpO1xuXG4gICAgY2FzZSBcInRlcm1cIjpcbiAgICBjYXNlIFwiY2xhc3NcIjogLy8gYWxsb3cgQk9USCwgZXZlbiBpZiBpdCBzaG91bGQgYWN0dWFsbHkgYmUgXCJ0ZXJtXCJcbiAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM0NsYXNzKGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdW1widGVybXNcIl0pLCB1c2VMZWdhY3kpKSA6IG5ldyBPTFM0Q2xhc3MoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICByZXR1cm4gdXNlTGVnYWN5ID8gbmV3IE9MUzNQcm9wZXJ0eShnZXRQcmVmZXJyZWRPbnRvbG9neUpTT04oYXNBcnJheShyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcInByb3BlcnRpZXNcIl0pLCB1c2VMZWdhY3kpKSA6IG5ldyBPTFM0UHJvcGVydHkoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJlbGVtZW50c1wiXSksIHVzZUxlZ2FjeSkpO1xuXG4gICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgIHJldHVybiB1c2VMZWdhY3kgPyBuZXcgT0xTM0luZGl2aWR1YWwoZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OKGFzQXJyYXkocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJpbmRpdmlkdWFsc1wiXSksIHVzZUxlZ2FjeSkpIDogbmV3IE9MUzRJbmRpdmlkdWFsKGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihhc0FycmF5KHJlc3BvbnNlW1wiZWxlbWVudHNcIl0pLCB1c2VMZWdhY3kpKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBlbnRpdHkgdHlwZSBcIicgKyBlbnRpdHlUeXBlICsgJ1wiLiBNdXN0IGJlIG9uZSBvZiB7XCJ0ZXJtXCIsIFwiY2xhc3NcIiwgXCJvbnRvbG9neVwiLCBcInByb3BlcnR5XCIsIFwiaW5kaXZpZHVhbFwifScpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgSlNPTiBvZiB0aGUgZW50aXR5IGluIGl0cyBkZWZpbmluZyBvbnRvbG9neSwgb3IsIGlmIG5vdCBhdmFpbGFibGUsIGp1c3QgdGhlIGZpcnN0IEpTT04gaW4gdGhlIGFycmF5LlxuICogSWYgb250b2xvZ3lJZCB3YXMgcHJvdmlkZWQgaW4gdGhlIHJlc3BvbnNlIHJlcXVlc3QsIHRoZSBhcnJheSBzaG91bGQgb25seSBjb250YWluIG9uZSBlbGVtZW50LCB0aHVzIHRoZSBmdW5jdGlvbmFsaXR5IGlzIGFzIGV4cGVjdGVkIGFzIHdlbGxcbiAqIEBwYXJhbSBlbnRpdHlBcnJheVJlc3BvbnNlIHRoZSBzdWItcmVzcG9uc2Ugb2YgdGhlIGluaXRpYWwgcXVlcnkgcmVzcG9uc2UgY29udGFpbmluZyBqdXN0IHRoZSBlbnRpdHkgYXJyYXlcbiAqIEBwYXJhbSB1c2VMZWdhY3kgYXBpIHZlcnNpb24gKG5lZWRlZCBiZWNhdXNlIGtleSBnaXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgZGVmaW5pbmcgb250b2xvZ3kgaGFzIGRpZmZlcmVudCBuYW1lcyBpbiBib3RoIHZlcnNpb25zKVxuICogQHBhcmFtIG9udG9sb2d5SWQgaWYgc3BlY2lmaWVkLCByZXR1cm5zIHRoZSBlbnRpdHkgaW4gdGhpcyBvbnRvbG9neSBpZiBhdmFpbGFibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihlbnRpdHlBcnJheVJlc3BvbnNlOiBhbnlbXSwgdXNlTGVnYWN5OiBib29sZWFuLCBvbnRvbG9neUlkPzogc3RyaW5nKSB7XG4gIGlmIChvbnRvbG9neUlkKSB7XG4gICAgY29uc3QgZW50aXR5SW5PbnRvbG9neSA9IGFzQXJyYXkoZW50aXR5QXJyYXlSZXNwb25zZSkuZmlsdGVyKChlbnRpdHkpID0+ICh1c2VMZWdhY3kgPyBlbnRpdHlbXCJvbnRvbG9neV9uYW1lXCJdIDogZW50aXR5W1wib250b2xvZ3lJZFwiXSkgPT0gb250b2xvZ3lJZCk7XG4gICAgaWYgKGVudGl0eUluT250b2xvZ3kubGVuZ3RoID4gMCkgcmV0dXJuIGVudGl0eUluT250b2xvZ3lbMF07XG4gICAgZWxzZSBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG9udG9sb2d5SWQgJHtvbnRvbG9neUlkfSBmb3IgZ2l2ZW4gZW50aXR5QXJyYXlSZXNwb25zZS5gKTtcbiAgfVxuXG4gIGNvbnN0IGRlZmluaW5nT250b2xvZ3lBcnIgPSBhc0FycmF5KGVudGl0eUFycmF5UmVzcG9uc2UpLmZpbHRlcigoZW50aXR5KSA9PiB1c2VMZWdhY3kgPyBlbnRpdHlbXCJpc19kZWZpbmluZ19vbnRvbG9neVwiXSA6IGVudGl0eVtcImlzRGVmaW5pbmdPbnRvbG9neVwiXSk7XG4gIGlmIChkZWZpbmluZ09udG9sb2d5QXJyLmxlbmd0aCA+IDApIHJldHVybiBkZWZpbmluZ09udG9sb2d5QXJyWzBdO1xuICBlbHNlIGlmIChlbnRpdHlBcnJheVJlc3BvbnNlLmxlbmd0aCA+IDApIHJldHVybiBlbnRpdHlBcnJheVJlc3BvbnNlWzBdO1xuICBlbHNlIHRocm93IEVycm9yKFwiRW1wdHkgcmVzcG9uc2UuXCIpO1xufVxuIiwgImltcG9ydCB7RW50aXR5VHlwZU5hbWV9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHtIaWVyYXJjaHlCdWlsZGVyfSBmcm9tIFwiLi4vLi4vYXBpL0hpZXJhcmNoeUJ1aWxkZXJcIjtcbmltcG9ydCB7RW50aXR5RGF0YUZvckhpZXJhcmNoeX0gZnJvbSBcIi4uLy4uL2FwcC90eXBlc1wiO1xuXG5leHBvcnQgdHlwZSBQYXJlbnRDaGlsZFJlbGF0aW9uID0ge1xuICAgIGNoaWxkSXJpOiBzdHJpbmcsXG4gICAgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBUcmVlTm9kZSB7XG4gICAgZW50aXR5RGF0YTogRW50aXR5RGF0YUZvckhpZXJhcmNoeTtcbiAgICBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ/OiBzdHJpbmc7XG4gICAgbG9hZGVkQ2hpbGRyZW46IFRyZWVOb2RlW107XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgbG9hZGluZzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBlbnRpdHlEYXRhXG4gICAgICogQHBhcmFtIGNoaWxkUmVsYXRpb25Ub1BhcmVudFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGVudGl0eURhdGE6IEVudGl0eURhdGFGb3JIaWVyYXJjaHksIGNoaWxkUmVsYXRpb25Ub1BhcmVudD86IHN0cmluZykge1xuICAgICAgICB0aGlzLmVudGl0eURhdGEgPSBlbnRpdHlEYXRhO1xuICAgICAgICB0aGlzLmxvYWRlZENoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hpbGRSZWxhdGlvblRvUGFyZW50ID0gY2hpbGRSZWxhdGlvblRvUGFyZW50O1xuICAgIH1cblxuICAgIGFkZENoaWxkKGNoaWxkOiBUcmVlTm9kZSkge1xuICAgICAgICB0aGlzLmxvYWRlZENoaWxkcmVuLnB1c2goY2hpbGQpXG4gICAgfVxufVxuXG5jb25zdCBERUZBVUxUX0lOQ0xVREVfT0JTT0xFVEVfRU5USVRJRVM6IGJvb2xlYW4gPSBmYWxzZSBhcyBjb25zdDtcbmNvbnN0IERFRkFVTFRfS0VFUF9FWFBBTlNJT05fU1RBVEU6IGJvb2xlYW4gPSB0cnVlIGFzIGNvbnN0O1xuXG5leHBvcnQgY2xhc3MgSGllcmFyY2h5IHtcbiAgICBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPjtcbiAgICBlbnRpdGllc0RhdGE6IE1hcDxzdHJpbmcsIEVudGl0eURhdGFGb3JIaWVyYXJjaHk+O1xuICAgIGFsbENoaWxkcmVuUHJlc2VudDogU2V0PHN0cmluZz47XG4gICAgcm9vdHM6IFRyZWVOb2RlW107IC8vIHN0b3JlcyB0aGUgdHJlZSBoaWVyYXJjaHlcbiAgICBwcm90ZWN0ZWQgYXBpOiBIaWVyYXJjaHlCdWlsZGVyO1xuICAgIG9udG9sb2d5SWQ6IHN0cmluZztcblxuICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBib29sZWFuID0gREVGQVVMVF9JTkNMVURFX09CU09MRVRFX0VOVElUSUVTO1xuICAgIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZTtcbiAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBib29sZWFuID0gREVGQVVMVF9LRUVQX0VYUEFOU0lPTl9TVEFURTtcbiAgICBwcm90ZWN0ZWQgdXNlTGVnYWN5PzogYm9vbGVhbjtcblxuICAgIG1haW5FbnRpdHlJcmk/OiBzdHJpbmc7IC8vIHRvIGhpZ2hsaWdodCBpdCBpbiB0aGUgaGllcmFyY2h5XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wczoge1xuICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPixcbiAgICAgICAgZW50aXRpZXNEYXRhOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PixcbiAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBTZXQ8c3RyaW5nPixcbiAgICAgICAgcm9vdHM6IFRyZWVOb2RlW10sXG4gICAgICAgIGFwaTogSGllcmFyY2h5QnVpbGRlcixcbiAgICAgICAgb250b2xvZ3lJZDogc3RyaW5nLFxuICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcz86IGJvb2xlYW4sXG4gICAgICAgIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZSxcbiAgICAgICAgbWFpbkVudGl0eUlyaT86IHN0cmluZyxcbiAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcz86IGJvb2xlYW4sXG4gICAgICAgIHVzZUxlZ2FjeT86IGJvb2xlYW4sXG4gICAgfSkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgICAgICAgIGVudGl0aWVzRGF0YSxcbiAgICAgICAgICAgIGFsbENoaWxkcmVuUHJlc2VudCxcbiAgICAgICAgICAgIHJvb3RzLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgbWFpbkVudGl0eUlyaSxcbiAgICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgICAgdXNlTGVnYWN5LFxuICAgICAgICB9ID0gcHJvcHM7XG5cbiAgICAgICAgdGhpcy5wYXJlbnRDaGlsZFJlbGF0aW9ucyA9IHBhcmVudENoaWxkUmVsYXRpb25zO1xuICAgICAgICB0aGlzLmVudGl0aWVzRGF0YSA9IGVudGl0aWVzRGF0YTtcbiAgICAgICAgdGhpcy5hbGxDaGlsZHJlblByZXNlbnQgPSBhbGxDaGlsZHJlblByZXNlbnQ7XG4gICAgICAgIHRoaXMucm9vdHMgPSByb290cztcbiAgICAgICAgaWYoaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgIT0gdW5kZWZpbmVkKSB0aGlzLmluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gaW5jbHVkZU9ic29sZXRlRW50aXRpZXM7XG4gICAgICAgIGlmKGtlZXBFeHBhbnNpb25TdGF0ZXMgIT0gdW5kZWZpbmVkKSB0aGlzLmtlZXBFeHBhbnNpb25TdGF0ZXMgPSBrZWVwRXhwYW5zaW9uU3RhdGVzO1xuICAgICAgICB0aGlzLmFwaSA9IGFwaTtcbiAgICAgICAgdGhpcy5tYWluRW50aXR5SXJpID0gbWFpbkVudGl0eUlyaTtcbiAgICAgICAgdGhpcy5lbnRpdHlUeXBlID0gZW50aXR5VHlwZTtcbiAgICAgICAgdGhpcy5vbnRvbG9neUlkID0gb250b2xvZ3lJZDtcbiAgICAgICAgaWYodXNlTGVnYWN5ICE9IHVuZGVmaW5lZCkgdGhpcy51c2VMZWdhY3kgPSB1c2VMZWdhY3k7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVyZ2VzIHRoZSBlbnRyaWVzIG9mIGB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zKG5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSlgIGludG8gYG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbmAuIEhlcmUsXG4gICAgICogb25seSBub3QgYWxyZWFkeSBwcmVzZW50IGNoaWxkcmVuIGFyZSBhZGRlZCB0byBrZWVwIHRoZSBleHBhbnNpb24gc3RhdGUgb2YgdGhlIGFscmVhZHkgbG9hZGVkIGNoaWxkcmVuLlxuICAgICAqIGBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5gIGlzIHNvcnRlZCBhbHBoYWJldGljYWxseSBieSBkaXNwbGF5ZWQgbGFiZWxzIGFmdGVyd2FyZC5cbiAgICAgKlxuICAgICAqIEFTU1VNUFRJT05TOlxuICAgICAqIDEuIGB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLmdldChub2RlVG9FeHBhbmQpYCBpcyBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgYnkgZGlzcGxheWVkIGxhYmVsc1xuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVUb0V4cGFuZCB0aGUgbm9kZSBpbnNpZGUgdGhlIGhpZXJhcmNoeSAoYHRoaXMucm9vdHNgKSB0byBtZXJnZSB0aGUgY2hpbGRyZW4gaW50b1xuICAgICAqL1xuICAgIHByaXZhdGUgbWVyZ2VDaGlsZHJlbkludG9Mb2FkZWRDaGlsZHJlbihub2RlVG9FeHBhbmQ6IFRyZWVOb2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5wYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQobm9kZVRvRXhwYW5kLmVudGl0eURhdGEuaXJpKTtcbiAgICAgICAgaWYoY2hpbGRyZW4gPT0gdW5kZWZpbmVkKSB0aHJvdyBFcnJvcihgcGFyZW50Q2hpbGRSZWxhdGlvbnMgaGFzIG5vIGVudHJ5IGZvciBrZXkgXCIke25vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaX1cIiBhbHRob3VnaCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4uYCk7XG5cbiAgICAgICAgbGV0IGlMb2FkZWRDaGlsZHJlbiA9IDA7XG4gICAgICAgIGNvbnN0IG51bUxvYWRlZENoaWxkcmVuID0gbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuLmxlbmd0aDsgLy8gaW5pdGlhbCBsZW5ndGhcbiAgICAgICAgbGV0IGlDaGlsZHJlbiA9IDA7XG5cbiAgICAgICAgd2hpbGUoaUNoaWxkcmVuIDwgY2hpbGRyZW4ubGVuZ3RoICYmIGlMb2FkZWRDaGlsZHJlbiA8IG51bUxvYWRlZENoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZihub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5baUxvYWRlZENoaWxkcmVuXS5lbnRpdHlEYXRhLmlyaSA9PSBjaGlsZHJlbltpQ2hpbGRyZW5dLmNoaWxkSXJpKSB7XG4gICAgICAgICAgICAgICAgaUxvYWRlZENoaWxkcmVuKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgIG5vZGVUb0V4cGFuZC5hZGRDaGlsZChuZXcgVHJlZU5vZGUodGhpcy5lbnRpdGllc0RhdGEuZ2V0KGNoaWxkcmVuW2lDaGlsZHJlbl0uY2hpbGRJcmkpISwgY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZFJlbGF0aW9uVG9QYXJlbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlDaGlsZHJlbisrO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlKGlDaGlsZHJlbiA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIG5vZGVUb0V4cGFuZC5hZGRDaGlsZChuZXcgVHJlZU5vZGUodGhpcy5lbnRpdGllc0RhdGEuZ2V0KGNoaWxkcmVuW2lDaGlsZHJlbl0uY2hpbGRJcmkpISwgY2hpbGRyZW5baUNoaWxkcmVuXS5jaGlsZFJlbGF0aW9uVG9QYXJlbnQpKTtcbiAgICAgICAgICAgIGlDaGlsZHJlbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc29ydCBhbHJlYWR5IGxvYWRlZCBjaGlsZHJlbiBpbiBjb3JyZWN0bHlcbiAgICAgICAgZm9yKGxldCBpTG9hZGVkQ2hpbGRyZW4gPSBudW1Mb2FkZWRDaGlsZHJlbiAtIDE7IGlMb2FkZWRDaGlsZHJlbiA+PSAwOyBpTG9hZGVkQ2hpbGRyZW4tLSkge1xuICAgICAgICAgICAgZm9yKGxldCBjdXJySWR4ID0gaUxvYWRlZENoaWxkcmVuICsgMTsgY3VycklkeCA8IG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbi5sZW5ndGg7IGN1cnJJZHgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJOb2RlID0gbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuW2N1cnJJZHhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZOb2RlID0gbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuW2N1cnJJZHggLSAxXTtcblxuICAgICAgICAgICAgICAgIGlmKChjdXJyTm9kZS5lbnRpdHlEYXRhLmxhYmVsIHx8IGN1cnJOb2RlLmVudGl0eURhdGEuaXJpKS5sb2NhbGVDb21wYXJlKHByZXZOb2RlLmVudGl0eURhdGEubGFiZWwgfHwgcHJldk5vZGUuZW50aXR5RGF0YS5pcmkpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlVG9FeHBhbmQubG9hZGVkQ2hpbGRyZW5bY3VycklkeF0gPSBwcmV2Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVRvRXhwYW5kLmxvYWRlZENoaWxkcmVuW2N1cnJJZHggLSAxXSA9IGN1cnJOb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvc2VOb2RlKG5vZGVUb0Nsb3NlOiBUcmVlTm9kZSkge1xuICAgICAgICBpZighdGhpcy5rZWVwRXhwYW5zaW9uU3RhdGVzKSB7XG4gICAgICAgICAgICBub2RlVG9DbG9zZS5sb2FkZWRDaGlsZHJlbiA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIGZvciBleHBhbnNpb24gb2YgYG5vZGVUb0V4cGFuZGAgaXMgYXZhaWxhYmxlIChpLmUuIHRoZXJlIGFyZSBhbHJlYWR5IGNoaWxkcmVuIGxvYWRlZCkgYW5kIGZldGNoZXMgaXQgaWYgbm90LlxuICAgICAqIEByZXR1cm4gYm9vbGVhbiBgdHJ1ZWAgaWYgaW5mb3JtYXRpb24gaGFkIHRvIGJlIGZldGNoZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAgICovXG4gICAgYXN5bmMgZmV0Y2hJbmZvcm1hdGlvbkZvckV4cGFuc2lvbihub2RlVG9FeHBhbmQ6IFRyZWVOb2RlKSB7XG4gICAgICAgIGlmKCFub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5oYXNDaGlsZHJlbikgdGhyb3cgRXJyb3IoYE5vZGUgY29udGFpbmluZyBpcmk9XCIke25vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaX1cIiBjb3VsZCBub3QgYmUgZXhwYW5kZWQ6IEVudGl0eSBpcyBub3QgZXhwYW5kYWJsZS5gKVxuXG4gICAgICAgIGNvbnN0IGFsbENoaWxkcmVuUHJlc2VudCA9IHRoaXMuYWxsQ2hpbGRyZW5QcmVzZW50Lmhhcyhub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICBjb25zdCBub2RlUGFyZW50Q2hpbGRSZWxhdGlvbnMgPSB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLmdldChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpIHx8IFtdO1xuICAgICAgICBpZighYWxsQ2hpbGRyZW5QcmVzZW50IHx8IG5vZGVUb0V4cGFuZC5sb2FkZWRDaGlsZHJlbi5sZW5ndGggPD0gbm9kZVBhcmVudENoaWxkUmVsYXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYoIWFsbENoaWxkcmVuUHJlc2VudCkge1xuICAgICAgICAgICAgICAgIC8vIGR5bmFtaWNhbGx5IGxvYWQgY2hpbGRyZW4gZnJvbSBhcGlcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbjogRW50aXR5RGF0YUZvckhpZXJhcmNoeVtdID0gKGF3YWl0IHRoaXMuYXBpLmxvYWRIaWVyYXJjaHlDaGlsZHJlbih7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVUb0V4cGFuZDogbm9kZVRvRXhwYW5kLFxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlOiB0aGlzLmVudGl0eVR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ6IHRoaXMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHRoaXMuaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeTogdGhpcy51c2VMZWdhY3ksXG4gICAgICAgICAgICAgICAgfSkpLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgIChhLCBiKSA9PiAoYS5sYWJlbCB8fCBhLmlyaSkubG9jYWxlQ29tcGFyZShiLmxhYmVsIHx8IGIuaXJpKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAvLyBhZGQgY2hpbGRyZW4gdG8gcGFyZW50Q2hpbGRSZWxhdGlvbnMgZm9yIGlyaSBvZiBub2RlVG9FeHBhbmRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJDaGlsZFJlbDogUGFyZW50Q2hpbGRSZWxhdGlvbltdID0gW107XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRpdGllc0RhdGEuc2V0KGNoaWxkLmlyaSwgY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJSZWxhdGlvbiA9IGNoaWxkLnBhcmVudHMuZmlsdGVyKChwYXIpID0+IHBhci52YWx1ZSA9PSBub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpOyAvLyBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIHBhckNoaWxkUmVsLnB1c2goe2NoaWxkSXJpOiBjaGlsZC5pcmksIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogcGFyUmVsYXRpb24ubGVuZ3RoID4gMCAmJiBwYXJSZWxhdGlvblswXS5nZXRNZXRhZGF0YSgpID8gcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXSA6IHVuZGVmaW5lZH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudENoaWxkUmVsYXRpb25zLnNldChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmksIHBhckNoaWxkUmVsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5tZXJnZUNoaWxkcmVuSW50b0xvYWRlZENoaWxkcmVuKG5vZGVUb0V4cGFuZCk7XG5cbiAgICAgICAgICAgIHRoaXMuYWxsQ2hpbGRyZW5QcmVzZW50LmFkZChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gICAgfVxufSIsICJpbXBvcnQgeyBTZWxlY3QgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZWxlY3RcIjtcbmltcG9ydCB7IFNlbGVjdFJlc3VsdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlbGVjdFJlc3VsdFwiO1xuXG5leHBvcnQgY2xhc3MgT0xTU2VsZWN0IGltcGxlbWVudHMgU2VsZWN0IHtcbiAgcHJvcGVydGllczogU2VsZWN0UmVzdWx0W107XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogU2VsZWN0UmVzdWx0W10pIHtcbiAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gIGdldFRvdGFsU2VhcmNoUmVzdWx0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG5cblxuICB9IiwgImltcG9ydCB7IFNlbGVjdFJlc3VsdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1NlbGVjdFJlc3VsdFwiO1xuaW1wb3J0IHsgVGhpbmdUeXBlTmFtZSB9IGZyb20gXCIuLi9Nb2RlbFR5cGVDaGVja1wiO1xuXG5leHBvcnQgY2xhc3MgT0xTU2VsZWN0UmVzdWx0IGltcGxlbWVudHMgU2VsZWN0UmVzdWx0IHtcbiAgcHJvcGVydGllczogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5wcm9wZXJ0aWVzW1wiZGVzY3JpcHRpb25cIl07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdGlvbi5qb2luKFwiIFwiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZXNjcmlwdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cblxuICBnZXRJcmkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaXJpXCJdO1xuICB9XG5cbiAgZ2V0TGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl07XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X25hbWVcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ0eXBlXCJdO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcInRlcm1zXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICAgICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgICAgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRTaG9ydEZvcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG4gIGdldEFwaVNvdXJjZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldEFwaVNvdXJjZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiXCJcbiAgfVxufSIsICJpbXBvcnQgeyBTZWxlY3RSZXN1bHQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZWxlY3RSZXN1bHRcIjtcbmltcG9ydCB7IFRoaW5nVHlwZU5hbWUgfSBmcm9tIFwiLi4vTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNsYXNzIFRzNG5mZGlTZWFyY2hSZXN1bHQgaW1wbGVtZW50cyBTZWxlY3RSZXN1bHQge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uLmpvaW4oXCIgXCIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGdldElyaSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpcmlcIl07XG4gIH1cblxuICBnZXRMYWJlbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJsYWJlbFwiXTtcbiAgfVxuXG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lcIl07XG4gIH1cblxuICBnZXRUeXBlKCk6IFRoaW5nVHlwZU5hbWUge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJ0eXBlXCJdO1xuICB9XG5cbiAgZ2V0VHlwZVBsdXJhbCgpOiBcIm9udG9sb2dpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCIgfCBcInRlcm1zXCIge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmdldFR5cGUoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIm9udG9sb2d5XCI6XG4gICAgICAgIHJldHVybiBcIm9udG9sb2dpZXNcIjtcbiAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICByZXR1cm4gXCJjbGFzc2VzXCI7XG4gICAgICBjYXNlIFwicHJvcGVydHlcIjpcbiAgICAgICAgcmV0dXJuIFwicHJvcGVydGllc1wiO1xuICAgICAgY2FzZSBcImluZGl2aWR1YWxcIjpcbiAgICAgICAgcmV0dXJuIFwiaW5kaXZpZHVhbHNcIjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRTaG9ydEZvcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic2hvcnRfZm9ybVwiXTtcbiAgfVxuXG4gIGdldEFwaVNvdXJjZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wic291cmNlX25hbWVcIl07XG4gIH1cblxuICBnZXRBcGlTb3VyY2VFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzb3VyY2VcIl07XG4gIH1cbn0iLCAiaW1wb3J0IGF4aW9zLCB7IEF4aW9zSW5zdGFuY2UsIEF4aW9zUmVxdWVzdENvbmZpZyB9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHsgYXNBcnJheSwgZ2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeCwgZ2V0VXNlTGVnYWN5LCBwbHVyYWxpemVUeXBlIH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgeyBjcmVhdGVNb2RlbE9iamVjdCB9IGZyb20gXCIuLi9tb2RlbC9Nb2RlbE9iamVjdENyZWF0b3JcIjtcbmltcG9ydCB7IE9udG9sb2d5LCBPbnRvbG9naWVzLCBFbnRpdHksIFRoaW5nLCBJbmRpdmlkdWFsIH0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IE9MUzNPbnRvbG9naWVzLCBPTFMzT250b2xvZ3kgfSBmcm9tIFwiLi4vbW9kZWwvb2xzMy1tb2RlbFwiO1xuaW1wb3J0IHtcbiAgY2xhc3NUeXBlTmFtZXMsIGVudGl0eVR5cGVOYW1lcywgb250b2xvZ3lUeXBlTmFtZXMsIHRoaW5nVHlwZU5hbWVzLFxuICBFbnRpdHlUeXBlTmFtZSwgVGhpbmdUeXBlTmFtZSxcbiAgaXNDbGFzc1R5cGVOYW1lLCBpc0VudGl0eVR5cGVOYW1lLCBpc0luZGl2aWR1YWxUeXBlTmFtZSwgaXNPbnRvbG9neVR5cGVOYW1lXG59IGZyb20gXCIuLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgRW50aXR5RGF0YUZvckhpZXJhcmNoeSwgSGllcmFyY2h5LCBQYXJlbnRDaGlsZFJlbGF0aW9uLCBUcmVlTm9kZSB9IGZyb20gXCIuLi9tb2RlbC9pbnRlcmZhY2VzL0hpZXJhcmNoeVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4uL21vZGVsL1JlaWZpZWRcIjtcbmltcG9ydCB7IEJ1aWxkSGllcmFyY2h5UHJvcHMsIEhpZXJhcmNoeUJ1aWxkZXIsIEhpZXJhcmNoeUlyaVByb3AsIExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzIH0gZnJvbSBcIi4vSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHsgT0xTU2VsZWN0IH0gZnJvbSBcIi4uL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RcIjtcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gXCIuLi9tb2RlbC9pbnRlcmZhY2VzL1NlbGVjdFwiO1xuaW1wb3J0IHsgT0xTU2VsZWN0UmVzdWx0IH0gZnJvbSBcIi4uL21vZGVsL29scy1tb2RlbC9PTFNTZWxlY3RSZXN1bHRcIjtcbmltcG9ydCB7IFRzNG5mZGlTZWFyY2hSZXN1bHQgfSBmcm9tIFwiLi4vbW9kZWwvdHM0bmZkaS1tb2RlbC9UczRuZmRpU2VhcmNoUmVzdWx0XCI7XG5cbi8vIHVzZWQgdG8gZmlsdGVyIGVudGl0aWVzIG5vdCBiZSBzaG93biBpbiBoaWVyYXJjaHlcbmZ1bmN0aW9uIGlzVG9wKGlyaTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpcmkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVGhpbmdcIiB8fCBpcmkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVG9wT2JqZWN0UHJvcGVydHlcIjtcbn1cblxuaW50ZXJmYWNlIFBhZ2luYXRpb25QYXJhbXMge1xuICBzaXplPzogc3RyaW5nO1xuICBwYWdlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU29ydGluZ1BhcmFtcyB7XG4gIHNvcnRGaWVsZDogc3RyaW5nIHwgbnVtYmVyO1xuICBzb3J0RGlyPzogXCJhc2NcIiB8IFwiZGVzY1wiO1xufVxuXG5pbnRlcmZhY2UgQ29udGVudFBhcmFtcyB7XG4gIG9udG9sb2d5SWQ/OiBzdHJpbmc7XG4gIHRlcm1Jcmk/OiBzdHJpbmc7XG4gIHByb3BlcnR5SXJpPzogc3RyaW5nO1xuICBpbmRpdmlkdWFsSXJpPzogc3RyaW5nO1xuICBxdWVyeVN0cmluZz86IHN0cmluZztcblxufVxuXG5leHBvcnQgdHlwZSBhcGlDYWxsRm4gPSAocGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPGFueT47XG5cbmludGVyZmFjZSBTZWFyY2hRdWVyeVBhcmFtcyB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIGV4YWN0TWF0Y2g/OiBib29sZWFuO1xuICBzaG93T2Jzb2xldGVUZXJtcz86IGJvb2xlYW47XG4gIHR5cGVzPzogc3RyaW5nO1xuICBvbnRvbG9neT86IHN0cmluZztcbiAgZ3JvdXBCeUlyaT86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBTZWxlY3RRdWVyeVBhcmFtcyB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTdWdnZXN0UXVlcnlQYXJhbXMge1xuICBxdWVyeTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSnNUcmVlUGFyYW1zIHtcbiAgdmlld01vZGU/OiBzdHJpbmc7XG4gIHNpYmxpbmdzPzogYm9vbGVhbjtcbiAgY2hpbGQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEpTVHJlZU5vZGUgPSB7XG4gIGlkOiBzdHJpbmdcbiAgcGFyZW50OiBzdHJpbmdcbiAgaXJpOiBzdHJpbmdcbiAgdGV4dDogc3RyaW5nXG4gIHN0YXRlOiB7XG4gICAgb3BlbmVkOiBib29sZWFuXG4gIH1cbiAgY2hpbGRyZW46IGJvb2xlYW5cbiAgYV9hdHRyOiB7XG4gICAgaXJpOiBzdHJpbmdcbiAgICBvbnRvbG9neV9uYW1lOiBzdHJpbmdcbiAgICB0aXRsZTogc3RyaW5nXG4gICAgY2xhc3M6IHN0cmluZ1xuICB9XG4gIG9udG9sb2d5X25hbWU6IHN0cmluZ1xufVxuXG5jb25zdCBERUZBVUxUX1NFQVJDSF9SRVNVTFRTX1BFUl9QQUdFID0gMTA7XG5cbmV4cG9ydCBjbGFzcyBPbHNBcGkgaW1wbGVtZW50cyBIaWVyYXJjaHlCdWlsZGVyIHtcbiAgcHJpdmF0ZSBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuXG4gIGNvbnN0cnVjdG9yKGFwaTogc3RyaW5nKSB7XG4gICAgdGhpcy5heGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IGFwaSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQ29udGVudF9UeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zPzogU29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZykge1xuICAgIGlmIChzb3J0aW5nUGFyYW1zKSB7XG4gICAgICByZXR1cm4geyAuLi5wYWdpbmF0aW9uUGFyYW1zLCBzb3J0OiBgJHtzb3J0aW5nUGFyYW1zLnNvcnRGaWVsZH0sJHtzb3J0aW5nUGFyYW1zLnNvcnREaXJ9YCwgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcikgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgLi4ucGFnaW5hdGlvblBhcmFtcywgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcikgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICByb3dzOiBwYWdpbmF0aW9uUGFyYW1zPy5zaXplLFxuICAgIH07XG5cbiAgICBpZiAocGFnaW5hdGlvblBhcmFtcz8ucGFnZSkge1xuICAgICAgaWYgKHBhZ2luYXRpb25QYXJhbXMuc2l6ZSkge1xuICAgICAgICBwYXJhbXMuc3RhcnQgPSAoK3BhZ2luYXRpb25QYXJhbXMucGFnZSAqICtwYWdpbmF0aW9uUGFyYW1zLnNpemUpLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbXMuc3RhcnQgPSAoK3BhZ2luYXRpb25QYXJhbXMucGFnZSAqIERFRkFVTFRfU0VBUkNIX1JFU1VMVFNfUEVSX1BBR0UpLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYXJhbXNGb3JTZWFyY2gocXVlcnlQYXJhbXM6IFNlYXJjaFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgdHM0bmZkaUdhdGV3YXk/OiBib29sZWFuKSB7XG5cbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIGV4YWN0OiBxdWVyeVBhcmFtcy5leGFjdE1hdGNoLFxuICAgICAgb2Jzb2xldGVzOiBxdWVyeVBhcmFtcy5zaG93T2Jzb2xldGVUZXJtcyxcbiAgICB9O1xuXG4gICAgaWYgKHRzNG5mZGlHYXRld2F5KSB7XG4gICAgICBwYXJhbXMucXVlcnkgPSBxdWVyeVBhcmFtcy5xdWVyeVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMucSA9IHF1ZXJ5UGFyYW1zLnF1ZXJ5XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLmdyb3VwQnlJcmkpIHtcbiAgICAgIHBhcmFtcy5ncm91cEZpZWxkID0gcXVlcnlQYXJhbXMuZ3JvdXBCeUlyaTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnlQYXJhbXMudHlwZXMpIHtcbiAgICAgIHBhcmFtcy50eXBlID0gcXVlcnlQYXJhbXMudHlwZXM7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLm9udG9sb2d5KSB7XG4gICAgICBwYXJhbXMub250b2xvZ3kgPSBxdWVyeVBhcmFtcy5vbnRvbG9neTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIC4uLnRoaXMuYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXMpLCAuLi5jb250ZW50UGFyYW1zLCAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIGZvciBjcmVhdGluZyBhbiBvYmplY3QgZnJvbSBzdHJpbmcgb2YgcGFyYW1ldGVycyBmb3IgYXhpb3MgaW5wdXQgcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXI/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmIChwYXJhbWV0ZXIpIHtcbiAgICAgIGNvbnN0IHBhcmFtc1NwbGl0dGVkID0gcGFyYW1ldGVyLnNwbGl0KFwiJlwiKVxuXG4gICAgICBwYXJhbXNTcGxpdHRlZC5mb3JFYWNoKChwYXJhbTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gcGFyYW0uc3BsaXQoXCI9XCIpWzBdXG4gICAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgPSBwYXJhbS5zcGxpdChcIj1cIilbMV1cbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclNlbGVjdChxdWVyeVBhcmFtczogU3VnZ2VzdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcnM/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIHE6IHF1ZXJ5UGFyYW1zLnF1ZXJ5LFxuICAgIH07XG5cbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIC4uLnRoaXMuYnVpbGRQYWdpbmF0aW9uUGFyYW1zKHBhZ2luYXRpb25QYXJhbXMpLCAuLi5jb250ZW50UGFyYW1zLCAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVycykgfTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBidWlsZFBhcmFtc0ZvclN1Z2dlc3QocXVlcnlQYXJhbXM6IFN1Z2dlc3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXJzPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBxOiBxdWVyeVBhcmFtcy5xdWVyeSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgLi4ucGFyYW1zLCAuLi50aGlzLmJ1aWxkUGFnaW5hdGlvblBhcmFtcyhwYWdpbmF0aW9uUGFyYW1zKSwgLi4uY29udGVudFBhcmFtcywgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcnMpIH07XG4gIH1cblxuICAvLyBUT0RPOiBJcyB0aGlzIHRoZSBiZWhhdmlvciB3ZSB3YW50IChlc3BlY2lhbGx5IHRocm93aW5nIGVycm9yIGZvciBlbXB0eSByZXNwb25zZSk/XG4gIHByaXZhdGUgY2hlY2tfZm9yX2Vycm9ycyhyZXNwb25zZTogYW55KTogYW55IHtcbiAgICAvLyByZXNvdXJjZSBub3QgZm91bmQvaWxsZWdhbCBhcmd1bWVudCBleGNlcHRpb24gaW4gc2VtYW50aWNsb29rdXBcbiAgICBpZiAocmVzcG9uc2VbXCJlcnJvclwiXSkge1xuICAgICAgdGhyb3cgRXJyb3IocmVzcG9uc2VbXCJzdGF0dXNcIl0gKyBcIiBcIiArIHJlc3BvbnNlW1wiZXJyb3JcIl0gKyBcIiAtIFwiICsgcmVzcG9uc2VbXCJtZXNzYWdlXCJdICsgXCIgLSBcIiArIHJlc3BvbnNlW1wiZXhjZXB0aW9uXCJdICsgXCIgYXQgXCIgKyByZXNwb25zZVtcInBhdGhcIl0pO1xuICAgIH1cbiAgICAvLyBlbXB0eSByZXNwb25zZSAtIGNhbiBiZSBjYXVnaHQgaWYgdGhpcyBpcyBleHBlY3RlZCwgZS5nLiBmb3IgZmV0Y2hpbmcgaW5zdGFuY2VzXG4gICAgaWYgKHJlc3BvbnNlW1wicGFnZVwiXSAhPT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlW1wicGFnZVwiXVtcInRvdGFsRWxlbWVudHNcIl0gPT09IDApIHtcbiAgICAgIHRocm93IEVycm9yKFwiUmVzcG9uc2UgY29udGFpbnMgMCBlbGVtZW50c1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBtYWtlQ2FsbCh1cmw6IHN0cmluZywgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiB8IHVuZGVmaW5lZCwgdXNlTGVnYWN5OiBib29sZWFuKSB7XG4gICAgY29uc3QgYXBpVmVyc2lvblByZWZpeCA9IGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpID8gXCJcIiA6IFwidjIvXCI7XG4gICAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldChhcGlWZXJzaW9uUHJlZml4ICsgdXJsLCBjb25maWcpKS5kYXRhO1xuICAgIHJldHVybiB0aGlzLmNoZWNrX2Zvcl9lcnJvcnMocmVzcG9uc2UpO1xuICB9XG5cbiAgcHVibGljIGdldE9udG9sb2dpZXM6IGFwaUNhbGxGbiA9IGFzeW5jIChwYWdpbmF0aW9uUGFyYW1zLCBzb3J0aW5nUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcIm9udG9sb2dpZXNcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyKSB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbGwgb250b2xvZ2llcy4gQ3VycmVudGx5IG9ubHkgYXZhaWxhYmxlIGZvciB1c2VMZWdhY3kgc2luY2UgcGFyYW1ldGVycyBhcmVuJ3QgYWxsb3dlZCBpbiB0aGUgT0xTIHYyIEFQSSBvbnRvbG9naWVzIGVuZHBvaW50XG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRPbnRvbG9naWVzRGF0YShwYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPE9udG9sb2dpZXM+IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgbGV0IG9udG9sb2dpZXNEYXRhOiBPTFMzT250b2xvZ3lbXSA9IFtdO1xuXG4gICAgbGV0IHBhZ2VOdW0gPSAwO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gNTAwO1xuXG4gICAgZG8ge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2dpZXMoeyBzaXplOiBwYWdlU2l6ZS50b1N0cmluZygpLCBwYWdlOiBwYWdlTnVtLnRvU3RyaW5nKCkgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHBhcmFtZXRlcik7IC8vIGFzc3VtaW5nIHRoZXJlIGFyZSBubyBtb3JlIHRoYW4gNTAwIG9udG9sb2dpZXNcbiAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlW1wiX2VtYmVkZGVkXCJdIHx8ICFyZXNwb25zZVtcIl9lbWJlZGRlZFwiXVtcIm9udG9sb2dpZXNcIl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT250b2xvZ2llcyBkYXRhIG5vdCBmb3VuZFwiKTsgLy9UT0RPIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmdcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgb250b2xvZ2llc0RhdGEgPSBvbnRvbG9naWVzRGF0YS5jb25jYXQocmVzcG9uc2VbXCJfZW1iZWRkZWRcIl1bXCJvbnRvbG9naWVzXCJdLm1hcCgob250b2xvZ3lEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3Qob250b2xvZ3lEYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBwYWdlTnVtICs9IDE7XG4gICAgfSB3aGlsZSAocGFnZU51bSA8IHJlc3BvbnNlW1wicGFnZVwiXVtcInRvdGFsUGFnZXNcIl0pO1xuXG4gICAgcmV0dXJuIG5ldyBPTFMzT250b2xvZ2llcyhvbnRvbG9naWVzRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhbGwgdGVybXMgZnJvbSB0aGUgYXBpXG4gICAqIEBwYXJhbSBwYWdpbmF0aW9uUGFyYW1zXG4gICAqIEBwYXJhbSBzb3J0aW5nUGFyYW1zXG4gICAqIEBwYXJhbSBjb250ZW50UGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIGB1c2VMZWdhY3lgIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYHVzZUxlZ2FjeWAsIGBcInRlcm1zXCJgIChgdXNlTGVnYWN5ID09IHRydWVgKSBvciBgXCJjbGFzc2VzXCJgIChgdXNlTGVnYWN5ID09IGZhbHNlYCkgd2lsbCBiZSB1c2VkIGluIHRoZSBxdWVyeSB1cmxcbiAgICovXG4gIHB1YmxpYyBnZXRUZXJtczogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHR5cGVQcmVmaXggPSBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSA/IFwidGVybXNcIiA6IFwiY2xhc3Nlc1wiO1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKHR5cGVQcmVmaXgsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMpIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcm9wZXJ0aWVzOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJwcm9wZXJ0aWVzXCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yR2V0KHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMpIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbmRpdmlkdWFsczogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwiaW5kaXZpZHVhbHNcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JHZXQocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcykgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgcHVibGljIGdldE9udG9sb2d5OiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgLi4udGhpcy5idWlsZE90aGVyUGFyYW1zKHBhcmFtZXRlcilcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwib250b2xvZ2llcy9cIiArIGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQsIHBhcmFtcywgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYW4gZW50aXR5IGZyb20gdGhlIC9lbnRpdGllcyBlbmRwb2ludCBpbiB0aGUgYXBpIGluIG9sczQuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldEVudGl0eTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIiArIGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgKyBcIi9cIiA6IFwiXCJcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LnRlcm1JcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwocXVlcnlQcmVmaXggKyBcImVudGl0aWVzXCIsIHsgcGFyYW1zOiBwYXJhbXMgfSwgZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIHVzZWQgdG8gZmV0Y2ggYSB0ZXJtIGZyb20gdGhlIGFwaVxuICAgKiBAcGFyYW0gcGFnaW5hdGlvblBhcmFtc1xuICAgKiBAcGFyYW0gc29ydGluZ1BhcmFtc1xuICAgKiBAcGFyYW0gYGNvbnRlbnRQYXJhbXNgIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGBjb250ZW50UGFyYW1zYCB0byBiZSBzZXQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3kuXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIGB1c2VMZWdhY3lgIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgYHVzZUxlZ2FjeWAsIGBcInRlcm1zXCJgIChgdXNlTGVnYWN5ID09IHRydWVgKSBvciBgXCJjbGFzc2VzXCJgIChgdXNlTGVnYWN5ID09IGZhbHNlYCkgd2lsbCBiZSB1c2VkIGluIHRoZSBxdWVyeSB1cmxcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybTogYXBpQ2FsbEZuID0gYXN5bmMgKHBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdXNlTGVnYWN5PzogYm9vbGVhbiwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4ge1xuICAgIGNvbnN0IG9udG9sb2d5UHJlZml4ID0gY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCA/IFwib250b2xvZ2llcy9cIiArIGNvbnRlbnRQYXJhbXM/Lm9udG9sb2d5SWQgKyBcIi9cIiA6IFwiXCJcbiAgICBjb25zdCB0eXBlUHJlZml4ID0gZ2V0VXNlTGVnYWN5KHVzZUxlZ2FjeSkgPyBcInRlcm1zXCIgOiBcImNsYXNzZXNcIjtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBpcmk6IGNvbnRlbnRQYXJhbXM/LnRlcm1JcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwob250b2xvZ3lQcmVmaXggKyB0eXBlUHJlZml4LCB7IHBhcmFtczogcGFyYW1zLCBzaWduYWw6IGFib3J0U2lnbmFsIH0sIGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyB1c2VkIHRvIGZldGNoIGEgcHJvcGVydHkgZnJvbSB0aGUgYXBpIGluIG9sczMuXG4gICAqIEFsd2F5cyByZXF1aXJlcyB0aGUgcmVzcGVjdGl2ZSBvYmplY3QgSVJJIGluIGNvbnRlbnRQYXJhbXMgdG8gYmUgc2V0XG4gICAqIElmIG9udG9sb2d5SWQgaXMgdW5kZWZpbmVkIGluIGNvbnRlbnRQYXJhbXMsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkIGZyb20gYWxsIG9udG9sb2dpZXMsIGNvbnRhaW5pbmcgYSBsaXN0IG9mIHJlc3VsdHNcbiAgICogSWYgYW4gb250b2xvZ3lJZCBpcyBwcm92aWRlZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgcmV0dXJuZWQgbGlzdCB3aWxsIG9ubHkgY29udGFpbiB0aGUgb2JqZWN0IGZyb20gdGhhdCBzcGVjaWZpYyBvbnRvbG9neVxuICAgKi9cbiAgcHVibGljIGdldFByb3BlcnR5OiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiB7XG4gICAgY29uc3QgcXVlcnlQcmVmaXggPSBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkID8gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL1wiIDogXCJcIlxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGlyaTogY29udGVudFBhcmFtcz8ucHJvcGVydHlJcmksXG4gICAgICAuLi50aGlzLmJ1aWxkT3RoZXJQYXJhbXMocGFyYW1ldGVyKVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwocXVlcnlQcmVmaXggKyBcInByb3BlcnRpZXNcIiwgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICAvKipcbiAgICogSXMgdXNlZCB0byBmZXRjaCBhbiBpbmRpdmlkdWFsIGZyb20gdGhlIGFwaSBpbiBvbHMzLlxuICAgKiBBbHdheXMgcmVxdWlyZXMgdGhlIHJlc3BlY3RpdmUgb2JqZWN0IElSSSBpbiBjb250ZW50UGFyYW1zIHRvIGJlIHNldFxuICAgKiBJZiBvbnRvbG9neUlkIGlzIHVuZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb2JqZWN0IHdpbGwgYmUgcXVlcmllZCBmcm9tIGFsbCBvbnRvbG9naWVzLCBjb250YWluaW5nIGEgbGlzdCBvZiByZXN1bHRzXG4gICAqIElmIGFuIG9udG9sb2d5SWQgaXMgcHJvdmlkZWQgaW4gY29udGVudFBhcmFtcywgdGhlIHJldHVybmVkIGxpc3Qgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG9iamVjdCBmcm9tIHRoYXQgc3BlY2lmaWMgb250b2xvZ3lcbiAgICovXG4gIHB1YmxpYyBnZXRJbmRpdmlkdWFsOiBhcGlDYWxsRm4gPSBhc3luYyAocGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcywgY29udGVudFBhcmFtcywgcGFyYW1ldGVyLCB1c2VMZWdhY3k/OiBib29sZWFuLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiB7XG4gICAgY29uc3QgcXVlcnlQcmVmaXggPSBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkID8gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL1wiIDogXCJcIlxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGlyaTogY29udGVudFBhcmFtcz8uaW5kaXZpZHVhbElyaSxcbiAgICAgIC4uLnRoaXMuYnVpbGRPdGhlclBhcmFtcyhwYXJhbWV0ZXIpXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChxdWVyeVByZWZpeCArIFwiaW5kaXZpZHVhbHNcIiwgeyBwYXJhbXM6IHBhcmFtcywgc2lnbmFsOiBhYm9ydFNpZ25hbCB9LCBnZXRVc2VMZWdhY3kodXNlTGVnYWN5KSk7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoID0gYXN5bmMgKHF1ZXJ5UGFyYW1zOiBTZWFyY2hRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtczogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJzZWFyY2hcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTZWFyY2gocXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciksIHNpZ25hbDogYWJvcnRTaWduYWwgfSwgdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0ID0gYXN5bmMgKHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiB0aGlzLm1ha2VDYWxsKFwic2VsZWN0XCIsIHsgcGFyYW1zOiB0aGlzLmJ1aWxkUGFyYW1zRm9yU2VsZWN0KHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpIH0sIHRydWUpO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaFRzNG5mZGlHYXRld2F5ID0gYXN5bmMgKHF1ZXJ5UGFyYW1zOiBTZWxlY3RRdWVyeVBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXM/OiBDb250ZW50UGFyYW1zLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHRzNG5mZGlHYXRld2F5PzogYm9vbGVhbik6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZUNhbGwoXCJzZWFyY2hcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTZWFyY2gocXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXMsIGNvbnRlbnRQYXJhbXMsIHBhcmFtZXRlciwgdHM0bmZkaUdhdGV3YXkpIH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHNlbGVjdCBkYXRhLlxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXNcbiAgICogQHBhcmFtIHBhZ2luYXRpb25QYXJhbXNcbiAgICogQHBhcmFtIGNvbnRlbnRQYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFNlbGVjdERhdGEocXVlcnlQYXJhbXM6IFNlbGVjdFF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgY29udGVudFBhcmFtcz86IENvbnRlbnRQYXJhbXMsIHBhcmFtZXRlcj86IHN0cmluZywgdHM0bmZkaUdhdGV3YXk/OiBib29sZWFuKTogUHJvbWlzZTxTZWxlY3Q+IHtcbiAgICBsZXQgcmVzcG9uc2U7XG4gICAgbGV0IHNlbGVjdERhdGE6IE9MU1NlbGVjdFJlc3VsdFtdID0gW107XG4gICAgbGV0IHJlc3VsdE51bSA9IDA7XG5cbiAgICBpZiAodHM0bmZkaUdhdGV3YXkpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZWFyY2hUczRuZmRpR2F0ZXdheShcbiAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgIHBhZ2luYXRpb25QYXJhbXMsXG4gICAgICAgIGNvbnRlbnRQYXJhbXMsXG4gICAgICAgIHBhcmFtZXRlcixcbiAgICAgICAgdHM0bmZkaUdhdGV3YXlcbiAgICAgICk7XG4gICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNlbGVjdCBkYXRhIG5vdCBmb3VuZFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdERhdGEgPSBzZWxlY3REYXRhLmNvbmNhdChyZXNwb25zZS5tYXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgVHM0bmZkaVNlYXJjaFJlc3VsdChkYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZWxlY3QoXG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICBwYWdpbmF0aW9uUGFyYW1zLFxuICAgICAgICBjb250ZW50UGFyYW1zLFxuICAgICAgICBwYXJhbWV0ZXJcbiAgICAgICk7XG4gICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZVtcInJlc3BvbnNlXCJdW1wiZG9jc1wiXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZWxlY3QgZGF0YSBub3QgZm91bmRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxlY3REYXRhID0gc2VsZWN0RGF0YS5jb25jYXQocmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcImRvY3NcIl0ubWFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9MU1NlbGVjdFJlc3VsdChkYXRhKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT0xTU2VsZWN0KHNlbGVjdERhdGEpO1xuICB9XG5cblxuXG4gIHB1YmxpYyBzdWdnZXN0ID0gYXN5bmMgKHF1ZXJ5UGFyYW1zOiBTdWdnZXN0UXVlcnlQYXJhbXMsIHBhZ2luYXRpb25QYXJhbXM/OiBQYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zPzogQ29udGVudFBhcmFtcywgcGFyYW1ldGVyPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlQ2FsbChcInN1Z2dlc3RcIiwgeyBwYXJhbXM6IHRoaXMuYnVpbGRQYXJhbXNGb3JTdWdnZXN0KHF1ZXJ5UGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zLCBjb250ZW50UGFyYW1zLCBwYXJhbWV0ZXIpIH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldFRlcm1UcmVlOlxuICAgKiBUaGlzIG1ldGhvZCBhbHdheXMgcmVxdWlyZXMgYW4gb250b2xvZ3lJZCBpbiBjb250ZW50UGFyYW1zXG4gICAqIDEpIElmIG5vIHRlcm1JcmkgaXMgZGVmaW5lZCBpbiBjb250ZW50UGFyYW1zLCB0aGUgb250b2xvZ3kgcm9vdHMgd2lsbCBiZSBxdWVyaWVkXG4gICAqIDIpIElmIGEgdGVybUlyaSBpcyBkZWZpbmVkIGJ1dCBubyBjaGlsZCBpbiBqc1RyZWVQYXJhbXMsIHRoZSBoaWVyYXJjaHkgY29udGFpbmluZyB0aGF0IHRlcm0gd2lsbCBiZSBxdWVyaWVkXG4gICAqIDMpIElmIGEgdGVybUlyaSBpcyBkZWZpbmVkIGFuZCBhbHNvIGEgY2hpbGQgaW4ganNUcmVlUGFyYW1zLCB0aGUgc3ViaGllcmFyY2h5IG9mIHRoYXQgY2hpbGQgd2lsbCBiZSBxdWVyaWVkXG4gICAqL1xuICBwdWJsaWMgZ2V0VGVybVRyZWUgPSBhc3luYyAoY29udGVudFBhcmFtczogQ29udGVudFBhcmFtcywgdHJlZVBhcmFtczogSnNUcmVlUGFyYW1zLCBwYWdpbmF0aW9uUGFyYW1zPzogUGFnaW5hdGlvblBhcmFtcywgc29ydGluZ1BhcmFtcz86IFNvcnRpbmdQYXJhbXMpID0+IHtcbiAgICBsZXQgYmFzZVJlcXVlc3QgPSBcIm9udG9sb2dpZXMvXCIgKyBjb250ZW50UGFyYW1zPy5vbnRvbG9neUlkICsgXCIvdGVybXNcIlxuICAgIGlmICghY29udGVudFBhcmFtcy50ZXJtSXJpKSByZXR1cm4gKGF3YWl0IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoYmFzZVJlcXVlc3QgKyBcIi9yb290c1wiKSkuZGF0YTsgLy8xKVxuICAgIGJhc2VSZXF1ZXN0ID0gYmFzZVJlcXVlc3QgKyBcIi9cIiArIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoY29udGVudFBhcmFtcz8udGVybUlyaSkpICsgXCIvanN0cmVlXCJcbiAgICBpZiAodHJlZVBhcmFtcy5jaGlsZCkgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0ICsgXCIvY2hpbGRyZW4vXCIgKyB0cmVlUGFyYW1zLmNoaWxkKSkuZGF0YTsgLy8zKVxuICAgIGVsc2UgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0LCB7IHBhcmFtczogdHJlZVBhcmFtcyB9KSkuZGF0YTsgLy8yKVxuICB9XG5cbiAgcHVibGljIGdldFRlcm1SZWxhdGlvbnMgPSBhc3luYyAoY29udGVudFBhcmFtczogQ29udGVudFBhcmFtcywgcGFnaW5hdGlvblBhcmFtcz86IFBhZ2luYXRpb25QYXJhbXMsIHNvcnRpbmdQYXJhbXM/OiBTb3J0aW5nUGFyYW1zKSA9PiB7XG4gICAgbGV0IGJhc2VSZXF1ZXN0ID0gXCJvbnRvbG9naWVzL1wiICsgY29udGVudFBhcmFtcz8ub250b2xvZ3lJZCArIFwiL3Rlcm1zXCJcbiAgICBpZiAoIWNvbnRlbnRQYXJhbXMudGVybUlyaSkgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0ICsgXCIvcm9vdHNcIikpLmRhdGE7IC8vMSlcbiAgICBiYXNlUmVxdWVzdCA9IGJhc2VSZXF1ZXN0ICsgXCIvXCIgKyBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnRQYXJhbXM/LnRlcm1JcmkpKSArIFwiL2dyYXBoXCI7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KGJhc2VSZXF1ZXN0KSkuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3aG9sZSBlbnRpdHkgcmVzcG9uc2UganNvbiB3aXRoIGEgY29tZm9ydGFibGUgd3JhcHBlciBoYW5kbGluZyBlbnRpdHlUeXBlLCBvbnRvbG9neUlkIGFuZCB1c2VMZWdhY3lcbiAgICogQHBhcmFtIGlyaVxuICAgKiBAcGFyYW0gZW50aXR5VHlwZSBxdWVyaWVzIHNwZWNpZmljIHJvdXRlcyBpZiBwcm92aWRlZCBhbmQgaW5mZXJzIHR5cGUgaWYgbm90XG4gICAqIEBwYXJhbSBvbnRvbG9neUlkIHF1ZXJpZXMgb250b2xvZ3kgcm91dGVzIGlmIHByb3ZpZGVkLCBvdGhlcndpc2Ugbm90XG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIHVzZUxlZ2FjeSBhZmZlY3RzIGhvdyBlbnRpdHlUeXBlIGlzIGluZmVycmVkIGlmIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEVudGl0eVJlc3BvbnNlKGlyaTogc3RyaW5nLCBlbnRpdHlUeXBlPzogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIGlmICghaXJpKSB0aHJvdyBFcnJvcignTm8gSVJJIHByb3ZpZGVkJyk7XG5cbiAgICBpZiAoZW50aXR5VHlwZSkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldEVudGl0eVdpdGhFbnRpdHlUeXBlUHJvdmlkZWQoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGdldFVzZUxlZ2FjeSh1c2VMZWdhY3kpKSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRFbnRpdHlXaXRoSW5mZXJyZWRFbnRpdHlUeXBlKGlyaSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0RW50aXR5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaSB9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gRW50aXR5IG9iamVjdCAoaW1wbGVtZW50aW5nICdDbGFzcycsICdQcm9wZXJ0eScgb3IgJ0luZGl2aWR1YWwnKS5cbiAgICogSW5kaXJlY3RseSBmZXRjaGVzIHRoZSByZXNwb25zZSBKU09OIGZvciB0aGUgc3BlY2lmaWVkIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyIGFuZCBBUEkgdmVyc2lvbiAodXNlTGVnYWN5KS5cbiAgICpcbiAgICogQHBhcmFtIGVudGl0eVR5cGVcbiAgICogQHBhcmFtIGlyaVxuICAgKiBAcGFyYW0gb250b2xvZ3lJZFxuICAgKiBAcGFyYW0gcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB1c2VMZWdhY3lcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRFbnRpdHlPYmplY3QoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlTmFtZSwgb250b2xvZ3lJZD86IHN0cmluZywgcGFyYW1ldGVyPzogc3RyaW5nLCB1c2VMZWdhY3k/OiBib29sZWFuKTogUHJvbWlzZTxFbnRpdHk+IHtcbiAgICByZXR1cm4gY3JlYXRlTW9kZWxPYmplY3QoYXdhaXQgdGhpcy5nZXRFbnRpdHlSZXNwb25zZShpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KSkgYXMgRW50aXR5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gT250b2xvZ3kgb2JqZWN0LlxuICAgKiBJbmRpcmVjdGx5IGZldGNoZXMgdGhlIHJlc3BvbnNlIEpTT04gZm9yIHRoZSBzcGVjaWZpZWQgb250b2xvZ3lJZCwgcGFyYW1ldGVyIGFuZCBBUEkgdmVyc2lvbiAodXNlTGVnYWN5KS5cbiAgICpcbiAgICogQHBhcmFtIG9udG9sb2d5SWRcbiAgICogQHBhcmFtIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gdXNlTGVnYWN5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZDogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcsIHVzZUxlZ2FjeT86IGJvb2xlYW4pOiBQcm9taXNlPE9udG9sb2d5PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldE9udG9sb2d5KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQgfSwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuXG4gICAgcmV0dXJuIGNyZWF0ZU1vZGVsT2JqZWN0KHJlc3BvbnNlKSBhcyBPbnRvbG9neTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUaGluZ09iamVjdChpcmk/OiBzdHJpbmcsIHRoaW5nVHlwZT86IFRoaW5nVHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFByb21pc2U8VGhpbmc+IHtcbiAgICBpZiAodGhpbmdUeXBlKSB7XG4gICAgICBpZiAoaXNPbnRvbG9neVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYgKCFvbnRvbG9neUlkKSB0aHJvdyBuZXcgRXJyb3IoYG9udG9sb2d5SWQgaGFzIHRvIGJlIHByb3ZpZGVkIGlmIHRoaW5nVHlwZSBpbiB7XCIke29udG9sb2d5VHlwZU5hbWVzLmpvaW4oJ1wiLCBcIicpfVwifS5gKTtcbiAgICAgICAgZWxzZSByZXR1cm4gYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0VudGl0eVR5cGVOYW1lKHRoaW5nVHlwZSkpIHtcbiAgICAgICAgaWYgKCFpcmkpIHRocm93IG5ldyBFcnJvcihgaXJpIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaW4ge1wiJHtlbnRpdHlUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgICAgICBlbHNlIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHRoaW5nVHlwZSBcIiR7dGhpbmdUeXBlfVwiIHByb3ZpZGVkLiBNdXN0IGJlIGluIHtcIiR7dGhpbmdUeXBlTmFtZXMuam9pbignXCIsIFwiJyl9XCJ9LmApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmICghaXJpICYmIG9udG9sb2d5SWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0T250b2xvZ3lPYmplY3Qob250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXJpKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEVudGl0eU9iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgfVxuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYGlyaSBvciBvbnRvbG9neUlkIGhhcyB0byBiZSBwcm92aWRlZCBpZiB0aGluZ1R5cGUgaXMgbm90IHByb3ZpZGVkLmApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RW50aXR5V2l0aEVudGl0eVR5cGVQcm92aWRlZChpcmk6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ/OiBzdHJpbmcsIHBhcmFtZXRlcj86IHN0cmluZywgdXNlTGVnYWN5PzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG4gICAgc3dpdGNoIChlbnRpdHlUeXBlKSB7XG4gICAgICBjYXNlICd0ZXJtJzogY2FzZSAnY2xhc3MnOiAvLyBhbHNvIGFsbG93IFwiY2xhc3NcIiBldmVuIGlmIGl0IHNob3VsZCBhY3R1YWxseSBiZSBcInRlcm1cIlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRUZXJtKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsIHRlcm1Jcmk6IGlyaSB9LCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG5cbiAgICAgIGNhc2UgJ3Byb3BlcnR5JzogY2FzZSAnYW5ub3RhdGlvblByb3BlcnR5JzogY2FzZSAnZGF0YVByb3BlcnR5JzogY2FzZSAnb2JqZWN0UHJvcGVydHknOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRQcm9wZXJ0eSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgeyBvbnRvbG9neUlkOiBvbnRvbG9neUlkLCBwcm9wZXJ0eUlyaTogaXJpIH0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgICAgY2FzZSAnaW5kaXZpZHVhbCc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEluZGl2aWR1YWwodW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgaW5kaXZpZHVhbElyaTogaXJpIH0sIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgZW50aXR5IHR5cGUgXCInICsgZW50aXR5VHlwZSArIGBcIi4gTXVzdCBiZSBvbmUgb2YgeyR7ZW50aXR5VHlwZU5hbWVzLm1hcCgoZWxlbSkgPT4gYFwiJHtlbGVtfVwiYCkuam9pbihcIiwgXCIpfX0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlXaXRoSW5mZXJyZWRFbnRpdHlUeXBlKGlyaTogc3RyaW5nLCBvbnRvbG9neUlkPzogc3RyaW5nLCBwYXJhbWV0ZXI/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIC8qXG4gICAgICAgICAgICBUZXN0IGFsbCB0eXBlcyBvZiBlbnRpdGllcyAodGVybSwgcHJvcGVydHksIGluZGl2aWR1YWwpIG1hbnVhbGx5IHdpdGggc2VwYXJhdGUgcXVlcmllcyAoYXMgL2VudGl0aWVzIGRvZXMgbm90IGV4aXN0IGZvciBsZWdhY3kgQVBJKVxuICAgICAgICAgICAgLT4gcmV0dXJuIHRoZSByZXNwb25zZSBvYmplY3Qgd2hpY2ggcmVzb2x2ZXMgd2l0aCBhIGNvbnRhaW5lZCBlbnRpdHlcbiAgICAgICAgICAgIC0+IHRocm93IGVycm9yIGlmIG5vbmUgb2YgdGhlIHR5cGVzIGNvbnRhaW5zIGFuIGVudGl0eVxuICAgICAgICAgICovXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBzaWduYWwgPSBjb250cm9sbGVyLnNpZ25hbDtcblxuICAgIGxldCByZXNwb25zZTsgLy8gc3RvcmVzIHRoZSBlbnRpdHkgdG8gYmUgcmV0dXJuZWQgaW4gdGhlIGVuZFxuXG4gICAgZnVuY3Rpb24gc2V0QW5kU3RvcChyZXM6IGFueSkge1xuICAgICAgaWYgKHJlc1tcIl9lbWJlZGRlZFwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3BvbnNlID0gcmVzO1xuICAgICAgICBjb250cm9sbGVyLmFib3J0KCk7IC8vIGFib3J0IHF1ZXJpZXMgZm9yIG90aGVyIGVudGl0eVR5cGVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgW1xuICAgICAgICB0aGlzLmdldFRlcm0odW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogaXJpIH0sIHBhcmFtZXRlciwgdHJ1ZSwgc2lnbmFsKVxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4geyBzZXRBbmRTdG9wKHJlcykgfSksXG4gICAgICAgIHRoaXMuZ2V0UHJvcGVydHkodW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgcHJvcGVydHlJcmk6IGlyaSB9LCBwYXJhbWV0ZXIsIHRydWUsIHNpZ25hbClcbiAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHsgc2V0QW5kU3RvcChyZXMpIH0pLFxuICAgICAgICB0aGlzLmdldEluZGl2aWR1YWwodW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgaW5kaXZpZHVhbElyaTogaXJpIH0sIHBhcmFtZXRlciwgdHJ1ZSwgc2lnbmFsKVxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4geyBzZXRBbmRTdG9wKHJlcykgfSlcbiAgICAgIF1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHJldHVybiByZXNwb25zZTtcbiAgICBlbHNlIHRocm93IEVycm9yKFwiSXJpIFwiICsgaXJpICsgXCIgY291bGQgbm90IGJlIHJlc29sdmVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBbmNlc3RvcnMoaXJpOiBzdHJpbmcsIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBvbnRvbG9neUlkOiBzdHJpbmcsIHVzZUxlZ2FjeSA9IGZhbHNlLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyA9IGZhbHNlKTogUHJvbWlzZTxFbnRpdHlbXT4ge1xuICAgIGxldCBhbmNlc3RvcnM6IGFueTtcbiAgICBpZiAoaXNDbGFzc1R5cGVOYW1lKGVudGl0eVR5cGUpKSB7XG4gICAgICBhbmNlc3RvcnMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpLCB1c2VMZWdhY3kpfS9oaWVyYXJjaGljYWxBbmNlc3RvcnNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBhbmNlc3RvcnMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpLCB1c2VMZWdhY3kpfS9hbmNlc3RvcnNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgbGV0IGxpc3RPZkFuY2VzdG9yT2JqOiBBcnJheTxFbnRpdHk+ID0gW107XG4gICAgICBsZXQgZXh0cmFjdEtleSA9IFwiXCI7XG4gICAgICBzd2l0Y2ggKGVudGl0eVR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNsYXNzXCIgfHwgXCJ0ZXJtXCI6XG4gICAgICAgICAgZXh0cmFjdEtleSA9IFwidGVybXNcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICAgICAgZXh0cmFjdEtleSA9IFwicHJvcGVydGllc1wiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW5kaXZpZHVhbFwiOlxuICAgICAgICAgIGV4dHJhY3RLZXkgPSBcImluZGl2aWR1YWxzXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJFbnRpdHkgdHlwZSBjb3VsZCBub3QgYmUgY29ycmVjdGx5IGluZmVycmVkLlwiKTtcbiAgICAgIH1cbiAgICAgIGFuY2VzdG9yc1tcIl9lbWJlZGRlZFwiXVtleHRyYWN0S2V5XS5tYXAoKG9iajogYW55KSA9PiB7XG4gICAgICAgIGxpc3RPZkFuY2VzdG9yT2JqLnB1c2goY3JlYXRlTW9kZWxPYmplY3QoeyBfZW1iZWRkZWQ6IHsgW2V4dHJhY3RLZXldOiBbb2JqXSB9IH0pIGFzIEVudGl0eSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBsaXN0T2ZBbmNlc3Rvck9iajtcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9yc1tcImVsZW1lbnRzXCJdLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICBjcmVhdGVNb2RlbE9iamVjdCh7IGVsZW1lbnRzOiBbb2JqXSB9KSBhcyBFbnRpdHlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEpTVHJlZShpcmk6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ6IHN0cmluZyk6IFByb21pc2U8SlNUcmVlTm9kZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBpcmksIHRydWUpfS9qc3RyZWVgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiB9IH0sIHRydWUpO1xuICB9XG5cbiAgLy8gVE9ETzogRG8gd2Ugd2FudCB0aGUgc2FtZSBiZWhhdmlvciBhcyBFTUJMIEVCSSAoZS5nLiBub3QgZ2V0dGluZyBpbnN0YW5jZXMgZm9yIGNsYXNzZXMgaWYgZW50aXR5VHlwZSAhPSBcImluZGl2aWR1YWxcIik/XG4gIHB1YmxpYyBhc3luYyBnZXRDaGlsZHJlbihpcmk6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ6IHN0cmluZywgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBmYWxzZSwgdXNlTGVnYWN5ID0gZmFsc2UpOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgbGV0IGNoaWxkcmVuOiBhbnk7XG4gICAgaWYgKGlzQ2xhc3NUeXBlTmFtZShlbnRpdHlUeXBlKSkge1xuICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgY2xhc3NUeXBlTmFtZXNbMF0sIGlyaSwgdXNlTGVnYWN5KX0vaGllcmFyY2hpY2FsQ2hpbGRyZW5gLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNJbmRpdmlkdWFsVHlwZU5hbWUoZW50aXR5VHlwZSkpIHtcbiAgICAgIC8vIGVudGl0eVR5cGUgZG9lcyBOT1QgaW5kaWNhdGUgd2hpY2ggdHlwZSB0aGUgZW50aXR5IG9mIHRoZSBwcm92aWRlZCBpcmkgaGFzLCBidXQgd2hpY2ggdHlwZSBvZiBoaWVyYXJjaHkgaXMgZGVzaXJlZFxuICAgICAgLy8gLT4gXCJjbGFzc1wiIGhhcyB0byBiZSBwcm92aWRlZCBmb3IgaW5kaXZpZHVhbCBoaWVyYXJjaHkgYXMgd2VsbCwgYXMgaW5kaXZpZHVhbHMgYXJlIGFsd2F5cyBjaGlsZHJlbiBvZiBjbGFzc2VzXG4gICAgICBpZiAodXNlTGVnYWN5KSB7XG4gICAgICAgIC8vIFRPRE86IERvZXMgZGVzY2VuZGFudHMgYWx3YXlzIHdvcmsgZm9yIHRoaXMgKG9yIGFyZSB0aGVyZSBjbGFzc2VzIHdpdGggYm90aCBpbmRpdmlkdWFscyBhbmQgY2xhc3NlcyBhcyBkZXNjZW5kYW50cyk/XG4gICAgICAgIGNoaWxkcmVuID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGNsYXNzVHlwZU5hbWVzWzBdLCBpcmksIHVzZUxlZ2FjeSl9L2Rlc2NlbmRhbnRzYCwgeyBwYXJhbXM6IHsgc2l6ZTogXCIxMDAwXCIgfSB9LCB1c2VMZWdhY3kpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgY2xhc3NUeXBlTmFtZXNbMF0sIGlyaSwgdXNlTGVnYWN5KX0vaW5zdGFuY2VzYCwgeyBwYXJhbXM6IHsgc2l6ZTogXCIxMDAwXCIsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyB9IH0sIHVzZUxlZ2FjeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgaXJpLCB1c2VMZWdhY3kpfS9jaGlsZHJlbmAsIHsgcGFyYW1zOiB7IHNpemU6IFwiMTAwMFwiLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgfSB9LCB1c2VMZWdhY3kpO1xuICAgIH1cblxuICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgIHJldHVybiBjaGlsZHJlbltcIl9lbWJlZGRlZFwiXVtpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSA/IHBsdXJhbGl6ZVR5cGUoY2xhc3NUeXBlTmFtZXNbMF0sIHVzZUxlZ2FjeSkgOiBwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIHVzZUxlZ2FjeSldLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHsgW1wiX2VtYmVkZGVkXCJdOiB7IFtpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSA/IHBsdXJhbGl6ZVR5cGUoY2xhc3NUeXBlTmFtZXNbMF0sIHVzZUxlZ2FjeSkgOiBwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUpXTogW29ial0gfSB9KSBhcyBFbnRpdHlcbiAgICAgICk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuW1wiZWxlbWVudHNcIl0ubWFwKChvYmo6IGFueSkgPT5cbiAgICAgICAgY3JlYXRlTW9kZWxPYmplY3QoeyBlbGVtZW50czogW29ial0gfSkgYXMgRW50aXR5XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSb290RW50aXRpZXMoZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIG9udG9sb2d5SWQ6IHN0cmluZywgcHJlZmVycmVkUm9vdHMgPSBmYWxzZSwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMgPSBmYWxzZSwgdXNlTGVnYWN5ID0gZmFsc2UpOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgaWYgKHVzZUxlZ2FjeSkge1xuICAgICAgaWYgKGlzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUpKSB7XG4gICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBiZWhhdmlvdXIgZm9yIGluZGl2aWR1YWxzXG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiAvcHJlZmVycmVkUm9vdHMgcm91dGUgc2hvdWxkIGV4aXN0IGluIGxlZ2FjeSBhcGksIGJ1dCBkb2VzIG5vdCB3b3JrXG4gICAgICAgIGNvbnN0IHJvb3RzID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgJHtnZXRFbnRpdHlJbk9udG9sb2d5U3VmZml4KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHVuZGVmaW5lZCwgdXNlTGVnYWN5KX0vcm9vdHNgLCB7IHBhcmFtczogeyBzaXplOiBcIjEwMDBcIiwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzIH0gfSwgdXNlTGVnYWN5KTtcblxuICAgICAgICByZXR1cm4gcm9vdHNbXCJfZW1iZWRkZWRcIl1bcGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCB1c2VMZWdhY3kpXS5tYXAoKG9iajogYW55KSA9PlxuICAgICAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHsgW1wiX2VtYmVkZGVkXCJdOiB7IFtwbHVyYWxpemVUeXBlKGVudGl0eVR5cGUsIHVzZUxlZ2FjeSldOiBbb2JqXSB9IH0pIGFzIEVudGl0eVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChpc0luZGl2aWR1YWxUeXBlTmFtZShlbnRpdHlUeXBlKSkge1xuICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsc1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm9vdHMgPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAke2dldEVudGl0eUluT250b2xvZ3lTdWZmaXgob250b2xvZ3lJZCwgZW50aXR5VHlwZSwgdW5kZWZpbmVkLCB1c2VMZWdhY3kpfWAsIHsgcGFyYW1zOiB7IHNpemU6IFwiMTAwMFwiLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsIGhhc0RpcmVjdFBhcmVudHM6IHByZWZlcnJlZFJvb3RzID8gdW5kZWZpbmVkIDogXCJmYWxzZVwiLCBpc1ByZWZlcnJlZFJvb3Q6IHByZWZlcnJlZFJvb3RzID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQgfSB9LCB1c2VMZWdhY3kpO1xuXG4gICAgICAgIHJldHVybiByb290c1tcImVsZW1lbnRzXCJdLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICAgICAgY3JlYXRlTW9kZWxPYmplY3QoeyBlbGVtZW50czogW29ial0gfSkgYXMgRW50aXR5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENsYXNzSW5zdGFuY2VzKGlyaTogc3RyaW5nLCBvbnRvbG9neUlkOiBzdHJpbmcpOiBQcm9taXNlPEluZGl2aWR1YWxbXT4ge1xuICAgIGNvbnN0IGluc3RhbmNlcyA9IGF3YWl0IHRoaXMubWFrZUNhbGwoYCR7Z2V0RW50aXR5SW5PbnRvbG9neVN1ZmZpeChvbnRvbG9neUlkLCBjbGFzc1R5cGVOYW1lc1swXSwgaXJpLCBmYWxzZSl9L2luZGl2aWR1YWxzYCwgeyBwYXJhbXM6IHsgc2l6ZTogXCIxMDAwXCIgfSB9LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gaW5zdGFuY2VzW1wiZWxlbWVudHNcIl0ubWFwKChvYmo6IGFueSkgPT5cbiAgICAgIGNyZWF0ZU1vZGVsT2JqZWN0KHsgZWxlbWVudHM6IFtvYmpdIH0pIGFzIEluZGl2aWR1YWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkSGllcmFyY2h5V2l0aElyaShwcm9wczogQnVpbGRIaWVyYXJjaHlQcm9wcyAmIEhpZXJhcmNoeUlyaVByb3ApOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGlyaSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgcHJlZmVycmVkUm9vdHMgPSBmYWxzZSxcbiAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gZmFsc2UsXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzID0gdHJ1ZSxcbiAgICAgIHNob3dTaWJsaW5nc09uSW5pdCA9IGZhbHNlLFxuICAgICAgdXNlTGVnYWN5ID0gZmFsc2UsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgaWYgKGlyaSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgXCJcIiwgdXNlTGVnYWN5KS50aGVuKChlbnRpdHkpID0+IHRoaXMuYnVpbGRIaWVyYXJjaHlXaXRoRW50aXR5KHtcbiAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSB8fCBlbnRpdHkuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lLFxuICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neUlkIHx8IGVudGl0eS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgICAgcHJlZmVycmVkUm9vdHM6IHByZWZlcnJlZFJvb3RzLFxuICAgICAgICBtYWluRW50aXR5OiBlbnRpdHksXG4gICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgIHNob3dTaWJsaW5nc09uSW5pdDogc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAoZW50aXR5VHlwZSA9PSB1bmRlZmluZWQgfHwgb250b2xvZ3lJZCA9PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRWl0aGVyIGlyaSBvciBvbnRvbG9neUlkIGFuZCBlbnRpdHlUeXBlIGhhdmUgdG8gYmUgcHJvdmlkZWQuXCIpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYnVpbGRSb290SGllcmFyY2h5KHtcbiAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZSxcbiAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICBwcmVmZXJyZWRSb290czogcHJlZmVycmVkUm9vdHMsXG4gICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IGtlZXBFeHBhbnNpb25TdGF0ZXMsXG4gICAgICAgIHNob3dTaWJsaW5nc09uSW5pdDogc2hvd1NpYmxpbmdzT25Jbml0LFxuICAgICAgICB1c2VMZWdhY3k6IHVzZUxlZ2FjeSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBqc1RyZWVOb2RlVG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGpzVHJlZU5vZGU6IEpTVHJlZU5vZGUpOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXJpOiBqc1RyZWVOb2RlLmlyaSxcbiAgICAgIGxhYmVsOiBqc1RyZWVOb2RlLnRleHQsXG4gICAgICBoYXNDaGlsZHJlbjoganNUcmVlTm9kZS5jaGlsZHJlbiB8fCBqc1RyZWVOb2RlLnN0YXRlLm9wZW5lZCxcbiAgICAgIHBhcmVudHM6IFtdXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBlbnRpdHlUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoZW50aXR5OiBFbnRpdHkpOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXJpOiBlbnRpdHkuZ2V0SXJpKCksXG4gICAgICBsYWJlbDogYXNBcnJheShlbnRpdHkuZ2V0TGFiZWwoKSlbMF0sXG4gICAgICBkZWZpbmVkQnk6IGVudGl0eS5nZXREZWZpbmVkQnkoKSxcbiAgICAgIGhhc0NoaWxkcmVuOiBlbnRpdHkuaGFzQ2hpbGRyZW4oKSxcbiAgICAgIG51bURlc2NlbmRhbnRzOiBlbnRpdHkuZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKSB8fCBlbnRpdHkuZ2V0TnVtRGVzY2VuZGFudHMoKSxcbiAgICAgIHBhcmVudHM6IGVudGl0eS5nZXRQYXJlbnRzKClcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkUm9vdEhpZXJhcmNoeShcbiAgICBwcm9wczoge1xuICAgICAgb250b2xvZ3lJZDogc3RyaW5nLFxuICAgICAgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsXG4gICAgfSAmIEJ1aWxkSGllcmFyY2h5UHJvcHNcbiAgKTogUHJvbWlzZTxIaWVyYXJjaHk+IHtcblxuICAgIGNvbnN0IHtcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgcHJlZmVycmVkUm9vdHMsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIHVzZUxlZ2FjeVxuICAgIH0gPSBwcm9wcztcblxuICAgIC8qIFFVRVJZIHJvb3QgZW50aXRpZXMgKi9cbiAgICBjb25zdCByb290RW50aXRpZXNEYXRhID0gKGF3YWl0IHRoaXMuZ2V0Um9vdEVudGl0aWVzKGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHByZWZlcnJlZFJvb3RzLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcywgdXNlTGVnYWN5KSlcbiAgICAgIC5tYXAoKGVudGl0eSkgPT4gdGhpcy5lbnRpdHlUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoZW50aXR5KSlcbiAgICAgIC5maWx0ZXIoKHJvb3QpID0+ICFpc1RvcChyb290LmlyaSkpO1xuICAgIC8qIC0tLSAqL1xuXG4gICAgLyogSU5JVElBTElaRSBlbnRpdGllc0RhdGEsIHBhcmVudENoaWxkUmVsYXRpb25zICovXG4gICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPigpO1xuICAgIGNvbnN0IGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4gPSBuZXcgTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4oKTtcbiAgICBmb3IgKGNvbnN0IGVudGl0eURhdGEgb2Ygcm9vdEVudGl0aWVzRGF0YSkge1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGVudGl0eURhdGEuaXJpLCBbXSk7IC8vIGluaXRpYWxpemUgd2l0aCBlbXB0eSBhcnJheVxuICAgICAgZW50aXRpZXNEYXRhLnNldChlbnRpdHlEYXRhLmlyaSwgZW50aXR5RGF0YSk7XG4gICAgfVxuICAgIC8qIC0tLSAqL1xuXG4gICAgcmV0dXJuIG5ldyBIaWVyYXJjaHkoe1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IHBhcmVudENoaWxkUmVsYXRpb25zLFxuICAgICAgZW50aXRpZXNEYXRhOiBlbnRpdGllc0RhdGEsXG4gICAgICBhbGxDaGlsZHJlblByZXNlbnQ6IG5ldyBTZXQoKSxcbiAgICAgIHJvb3RzOiByb290RW50aXRpZXNEYXRhLm1hcCgocm9vdCkgPT4gbmV3IFRyZWVOb2RlKHJvb3QpKS5zb3J0KChhLCBiKSA9PiAoYS5lbnRpdHlEYXRhLmxhYmVsIHx8IGEuZW50aXR5RGF0YS5pcmkpLmxvY2FsZUNvbXBhcmUoYi5lbnRpdHlEYXRhLmxhYmVsIHx8IGIuZW50aXR5RGF0YS5pcmkpKSxcbiAgICAgIGFwaTogbmV3IE9sc0FwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCkpLFxuICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYnVpbGRIaWVyYXJjaHlXaXRoRW50aXR5KFxuICAgIHByb3BzOiB7XG4gICAgICBtYWluRW50aXR5OiBFbnRpdHksXG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmcsXG4gICAgICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlTmFtZSxcbiAgICB9ICYgQnVpbGRIaWVyYXJjaHlQcm9wc1xuICApOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuXG4gICAgY29uc3Qge1xuICAgICAgbWFpbkVudGl0eSxcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBlbnRpdHlUeXBlLFxuICAgICAgcHJlZmVycmVkUm9vdHMsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcyxcbiAgICAgIHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgIHVzZUxlZ2FjeVxuICAgIH0gPSBwcm9wcztcblxuICAgIC8qIExPQUQgYW5jZXN0b3JzICovXG4gICAgbGV0IGVudGl0aWVzOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5W10gPSBbXTtcblxuICAgIGlmICh1c2VMZWdhY3kpIHtcbiAgICAgIC8vIFRPRE86IEpTVHJlZSBzb21ldGltZXMgcmV0dXJucyBzbWFsbGVyIHRyZWVzIHRoYW4gd291bGQgYmUgcG9zc2libGUgdmlhIHF1ZXJ5aW5nIGhpZXJhcmNoaWNhbCBhbmNlc3RvcnMgYW5kIGFsbCBjaGlsZHJlbiBvZiB0aG9zZSAoZS5nLiBodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vVUJFUk9OXzIwMDE3NDcgLT4gc3RyYW5nZSBhbmQgbm90IHJlYWxseSB1c2VmdWwgaGllcmFyY2h5IGJlY2F1c2UgbWFueSBlbnRpdGllcyBhcmUgYm90aCBzaWJsaW5nIGFuZCBjaGlsZHJlbiBvZiBvdGhlciBlbnRpdGllcyAoaXMgaXQgd3JvbmcgdG8gdGFrZSBoaWVyYXJjaGljYWxQYXJlbnQgaW5zdGVhZCBvZiBkaXJlY3RQYXJlbnQgaW4gZW50aXR5VG9FbnRpdHlEYXRhVG9IaWVyYXJjaHk/IEVNQkwtRUJJIGRvZXMgaXQgbGlrZSB0aGF0IGFzIHdlbGwpKVxuICAgICAgLy8gICAgICAgUXVlc3Rpb246IFNob3VsZCB3ZSBwcmVmZXIgY29tcGxldGUgaGllcmFyY2hpZXMgKHF1ZXJ5IC9oaWVyYXJjaGljYWxBbmNlc3RvcnMgKyAvY2hpbGRyZW4gZm9yIGVhY2gpIG9yIHNsaW0gcXVlcmllcyAocXVlcnkgL2pzdHJlZSk/XG4gICAgICBjb25zdCBqc1RyZWUgPSBhd2FpdCB0aGlzLmdldEpTVHJlZShtYWluRW50aXR5LmdldElyaSgpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkKTtcbiAgICAgIGNvbnN0IGlkVG9Jcmk6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgY29uc3QgcGFyZW50czogTWFwPHN0cmluZywgU2V0PHN0cmluZz4+ID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuXG4gICAgICBmb3IgKGNvbnN0IGpzVHJlZU5vZGUgb2YganNUcmVlKSB7XG4gICAgICAgIGlkVG9Jcmkuc2V0KGpzVHJlZU5vZGUuaWQsIGpzVHJlZU5vZGUuaXJpKTtcbiAgICAgICAgcGFyZW50cy5zZXQoanNUcmVlTm9kZS5pcmksIG5ldyBTZXQ8c3RyaW5nPigpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBqc1RyZWVOb2RlIG9mIGpzVHJlZSkge1xuICAgICAgICBjb25zdCBwYXJBcnIgPSBwYXJlbnRzLmdldChqc1RyZWVOb2RlLmlyaSk7XG4gICAgICAgIGNvbnN0IHBhcklyaSA9IGlkVG9JcmkuZ2V0KGpzVHJlZU5vZGUucGFyZW50KTtcbiAgICAgICAgaWYgKHBhckFyciAhPSB1bmRlZmluZWQgJiYgcGFySXJpICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhckFyci5hZGQocGFySXJpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlbnRpdGllcyA9IFtdO1xuICAgICAgY29uc3QgaW5BcnIgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgZm9yIChjb25zdCBqc1RyZWVOb2RlIG9mIGpzVHJlZSkge1xuICAgICAgICBpZiAoIWluQXJyLmhhcyhqc1RyZWVOb2RlLmlyaSkpIHtcbiAgICAgICAgICBpbkFyci5hZGQoanNUcmVlTm9kZS5pcmkpO1xuXG4gICAgICAgICAgZW50aXRpZXMucHVzaCh0aGlzLmpzVHJlZU5vZGVUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoanNUcmVlTm9kZSkpO1xuICAgICAgICAgIGNvbnN0IHBhciA9IHBhcmVudHMuZ2V0KGpzVHJlZU5vZGUuaXJpKTtcbiAgICAgICAgICBpZiAocGFyICE9IHVuZGVmaW5lZCkgZW50aXRpZXNbZW50aXRpZXMubGVuZ3RoIC0gMV0ucGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb24oQXJyYXkuZnJvbShwYXIudmFsdWVzKCkpKSB8fCBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGFuY2VzdG9ycyA9IGF3YWl0IHRoaXMuZ2V0QW5jZXN0b3JzKG1haW5FbnRpdHkuZ2V0SXJpKCksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQgfHwgbWFpbkVudGl0eS5nZXRPbnRvbG9neUlkKCksIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzKTtcbiAgICAgIGVudGl0aWVzID0gW3RoaXMuZW50aXR5VG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KG1haW5FbnRpdHkpLCAuLi5hbmNlc3RvcnMubWFwKChlbnRpdHkpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGVudGl0eSkpXVxuICAgIH1cblxuICAgIC8vIGZpbHRlciB0b3AgZW50aXRpZXNcbiAgICBlbnRpdGllcyA9IGVudGl0aWVzLmZpbHRlcigoZSkgPT4gIWlzVG9wKGUuaXJpKSk7XG4gICAgLyogLS0tICovXG5cbiAgICAvKiBCVUlMRCBwYXJlbnRDaGlsZFJlbGF0aW9ucyAqL1xuICAgIGNvbnN0IHBhcmVudENoaWxkUmVsYXRpb25zOiBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+ID0gbmV3IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4oKTtcbiAgICBjb25zdCBhbGxDaGlsZHJlblByZXNlbnQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgZW50aXRpZXNEYXRhOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PiA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PigpO1xuXG4gICAgLy8gaW5pdGlhbGl6ZSBwYXJlbnRDaGlsZFJlbGF0aW9ucyAmIGVudGl0aWVzRGF0YVxuICAgIGZvciAoY29uc3QgZW50aXR5RGF0YSBvZiBlbnRpdGllcykge1xuICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGVudGl0eURhdGEuaXJpLCBbXSk7IC8vIGluaXRpYWxpemUgd2l0aCBlbXB0eSBhcnJheVxuICAgICAgZW50aXRpZXNEYXRhLnNldChlbnRpdHlEYXRhLmlyaSwgZW50aXR5RGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHNob3dTaWJsaW5nc09uSW5pdCkge1xuICAgICAgLy8gYWRkaXRpb25hbGx5IGxvYWQgc2libGluZ3MgZnJvbSBhcGlcbiAgICAgIGNvbnN0IHJlYWxFbnRpdHlUeXBlID0gKGVudGl0eVR5cGUgfHwgbWFpbkVudGl0eS5nZXRUeXBlKCkpO1xuICAgICAgY29uc3QgZW50aXR5VHlwZUZvclF1ZXJ5ID0gcmVhbEVudGl0eVR5cGUgPT0gXCJpbmRpdmlkdWFsXCIgPyBcImNsYXNzXCIgOiByZWFsRW50aXR5VHlwZTsgLy8gVE9ETzogb25seSByZWxldmFudCBmb3IgZW50aXR5VHlwZSA9PSBcImluZGl2aWR1YWxcIiAobWF5YmUgd2UgZG9uJ3QgZXZlbiBuZWVkIHRoaXMgYXMgYmVoYXZpb3VyIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzIGlzIG5vdCB5ZXQgZGV0ZXJtaW5lZClcblxuICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBlbnRpdHlEYXRhIG9mIGVudGl0aWVzKSB7XG4gICAgICAgIGlmIChlbnRpdHlEYXRhLmlyaSAhPSBtYWluRW50aXR5LmdldElyaSgpKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oZW50aXR5RGF0YS5pcmksIGVudGl0eVR5cGVGb3JRdWVyeSwgb250b2xvZ3lJZCwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsIHVzZUxlZ2FjeSkudGhlbigoY2hpbGRyZW4pID0+IGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGNoaWxkKSkpLnRoZW4oKGNoaWxkcmVuKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhckNoaWxkUmVsOiBQYXJlbnRDaGlsZFJlbGF0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGVudGl0aWVzRGF0YS5zZXQoY2hpbGQuaXJpLCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyUmVsYXRpb24gPSBjaGlsZC5wYXJlbnRzLmZpbHRlcigocGFyKSA9PiBwYXIudmFsdWUgPT0gZW50aXR5RGF0YS5pcmkpOyAvLyBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgcGFyQ2hpbGRSZWwucHVzaCh7IGNoaWxkSXJpOiBjaGlsZC5pcmksIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogcGFyUmVsYXRpb24ubGVuZ3RoID4gMCAmJiBwYXJSZWxhdGlvblswXS5nZXRNZXRhZGF0YSgpID8gcGFyUmVsYXRpb25bMF0uZ2V0TWV0YWRhdGEoKVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXSA6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChlbnRpdHlEYXRhLmlyaSwgcGFyQ2hpbGRSZWwpO1xuICAgICAgICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQuYWRkKGVudGl0eURhdGEuaXJpKTtcbiAgICAgICAgICAgIH0pLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgICApKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cbiAgICAgIC8vIFRPRE86IG9ubHkgcmVsZXZhbnQgZm9yIGVudGl0eVR5cGUgPT0gXCJpbmRpdmlkdWFsXCIgKG1heWJlIHdlIGRvbid0IGV2ZW4gbmVlZCB0aGlzIGFzIGJlaGF2aW91ciBmb3IgaW5kaXZpZHVhbCBoaWVyYXJjaGllcyBpcyBub3QgeWV0IGRldGVybWluZWQpXG4gICAgICBpZiAocmVhbEVudGl0eVR5cGUgPT0gXCJpbmRpdmlkdWFsXCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXJlbnRSZWlmaWVkIG9mIG1haW5FbnRpdHkuZ2V0UGFyZW50cygpKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSAoYXdhaXQgdGhpcy5nZXRDaGlsZHJlbihwYXJlbnRSZWlmaWVkLnZhbHVlLCByZWFsRW50aXR5VHlwZSwgb250b2xvZ3lJZCwgaW5jbHVkZU9ic29sZXRlRW50aXRpZXMpKVxuICAgICAgICAgICAgLm1hcCgoY2hpbGQpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGNoaWxkKSlcblxuICAgICAgICAgIGNvbnN0IHBhckNoaWxkUmVsOiBQYXJlbnRDaGlsZFJlbGF0aW9uW10gPSBbXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICBwYXJDaGlsZFJlbC5wdXNoKHsgY2hpbGRJcmk6IGNoaWxkLmlyaSwgY2hpbGRSZWxhdGlvblRvUGFyZW50OiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyN0eXBlXCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChwYXJlbnRSZWlmaWVkLnZhbHVlLCBwYXJDaGlsZFJlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGVudGl0eURhdGEgb2YgZW50aXRpZXMpIHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IGVudGl0eURhdGEucGFyZW50cy5maWx0ZXIoKHBhcmVudFJlaWZpZWQ6IFJlaWZpZWQ8c3RyaW5nPikgPT4gIWlzVG9wKHBhcmVudFJlaWZpZWQudmFsdWUpKTtcbiAgICAgICAgaWYgKGVudGl0eURhdGEuaXJpID09IG1haW5FbnRpdHk/LmdldElyaSgpICYmIGlzSW5kaXZpZHVhbFR5cGVOYW1lKGVudGl0eVR5cGUgfHwgbWFpbkVudGl0eS5nZXRUeXBlKCkpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwYXJlbnRSZWlmaWVkIG9mIHBhcmVudHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRDaGlsZFJlbGF0aW9ucy5oYXMocGFyZW50UmVpZmllZC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KHBhcmVudFJlaWZpZWQudmFsdWUpPy5wdXNoKHsgY2hpbGRJcmk6IGVudGl0eURhdGEuaXJpLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwYXJlbnRSZWlmaWVkIG9mIHBhcmVudHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRDaGlsZFJlbGF0aW9ucy5oYXMocGFyZW50UmVpZmllZC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KHBhcmVudFJlaWZpZWQudmFsdWUpPy5wdXNoKHsgY2hpbGRJcmk6IGVudGl0eURhdGEuaXJpLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ6IHBhcmVudFJlaWZpZWQuZ2V0TWV0YWRhdGEoKSA/IHBhcmVudFJlaWZpZWQuZ2V0TWV0YWRhdGEoKVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXSA6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzb3J0IHBhcmVudENoaWxkUmVsYXRpb25zXG4gICAgZm9yIChjb25zdCByZWwgb2YgcGFyZW50Q2hpbGRSZWxhdGlvbnMudmFsdWVzKCkpIHJlbC5zb3J0KChhLCBiKSA9PiAoZW50aXRpZXNEYXRhLmdldChhLmNoaWxkSXJpKT8ubGFiZWwgfHwgYS5jaGlsZElyaSkubG9jYWxlQ29tcGFyZShlbnRpdGllc0RhdGEuZ2V0KGIuY2hpbGRJcmkpPy5sYWJlbCB8fCBiLmNoaWxkSXJpKSk7XG4gICAgLyogLS0tICovXG5cbiAgICAvKiBCVUlMRCByb290RW50aXRpZXMgKi9cbiAgICBjb25zdCByb290RW50aXRpZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHByZWZlcnJlZFJvb3RzKSB7XG4gICAgICBjb25zdCBwcmVmZXJyZWRSb290RW50aXRpZXMgPSAoYXdhaXQgdGhpcy5nZXRPbnRvbG9neU9iamVjdChvbnRvbG9neUlkLCB1bmRlZmluZWQsIHVzZUxlZ2FjeSkpLmdldFByZWZlcnJlZFJvb3RzKCk7XG4gICAgICBmb3IgKGNvbnN0IGUgb2YgcHJlZmVycmVkUm9vdEVudGl0aWVzKSB7XG4gICAgICAgIGlmIChlbnRpdGllc0RhdGEuaGFzKGUpKSByb290RW50aXRpZXMucHVzaChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGVudGl0eURhdGEgb2YgZW50aXRpZXMpIHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IGVudGl0eURhdGEucGFyZW50cy5maWx0ZXIoKHBhcmVudFJlaWZpZWQ6IFJlaWZpZWQ8c3RyaW5nPikgPT4gIWlzVG9wKHBhcmVudFJlaWZpZWQudmFsdWUpKTtcbiAgICAgICAgaWYgKHBhcmVudHMubGVuZ3RoID09IDApIHJvb3RFbnRpdGllcy5wdXNoKGVudGl0eURhdGEuaXJpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogLS0tICovXG5cbiAgICBmdW5jdGlvbiBjcmVhdGVUcmVlTm9kZShlbnRpdHlEYXRhOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5LCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiwgY2hpbGRSZWxhdGlvblRvUGFyZW50Pzogc3RyaW5nKTogVHJlZU5vZGUge1xuICAgICAgY3ljbGVDaGVjay5hZGQoZW50aXR5RGF0YS5pcmkpOyAvLyBhZGQgY3VycmVudCBlbnRpdHkgdG8gY3ljbGUgY2hlY2sgc2V0XG5cbiAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJlZU5vZGUoZW50aXR5RGF0YSk7XG4gICAgICBub2RlLmNoaWxkUmVsYXRpb25Ub1BhcmVudCA9IGNoaWxkUmVsYXRpb25Ub1BhcmVudDtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50Q2hpbGRSZWxhdGlvbnMuZ2V0KGVudGl0eURhdGEuaXJpKSB8fCBbXTtcblxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICBpZiAoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBDeWNsaWMgdHJlZSBhdCBlbnRpdHkgXCIke2NoaWxkLmNoaWxkSXJpfVwiLmApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hpbGREYXRhID0gZW50aXRpZXNEYXRhLmdldChjaGlsZC5jaGlsZElyaSk7XG4gICAgICAgIGlmIChjaGlsZERhdGEgIT0gdW5kZWZpbmVkKSBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGNoaWxkRGF0YSwgY3ljbGVDaGVjaywgY2hpbGQuY2hpbGRSZWxhdGlvblRvUGFyZW50KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLmxvYWRlZENoaWxkcmVuLmxlbmd0aCA+IDApIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICBjeWNsZUNoZWNrLmRlbGV0ZShlbnRpdHlEYXRhLmlyaSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBDb250YWlucyBpcmlzIG9mIGFsbCBlbnRpdGllcyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBicmFuY2guIElzIHVzZWQgdG8gY2hlY2sgZm9yIGN5Y2xlcy5cblxuICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgcm9vdHM6IHJvb3RFbnRpdGllcy5tYXAoKHJvb3RFbnRpdHkpID0+IGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQocm9vdEVudGl0eSkhLCBjeWNsZUNoZWNrKSkuc29ydCgoYSwgYikgPT4gKGEuZW50aXR5RGF0YS5sYWJlbCB8fCBhLmVudGl0eURhdGEuaXJpKS5sb2NhbGVDb21wYXJlKGIuZW50aXR5RGF0YS5sYWJlbCB8fCBiLmVudGl0eURhdGEuaXJpKSksXG4gICAgICBhcGk6IG5ldyBPbHNBcGkodGhpcy5heGlvc0luc3RhbmNlLmdldFVyaSgpKSxcbiAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsXG4gICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsXG4gICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuICAgICAgbWFpbkVudGl0eUlyaTogbWFpbkVudGl0eT8uZ2V0SXJpKCksXG4gICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkSGllcmFyY2h5Q2hpbGRyZW4ocHJvcHM6IExvYWRIaWVyYXJjaHlDaGlsZHJlblByb3BzKTogUHJvbWlzZTxFbnRpdHlEYXRhRm9ySGllcmFyY2h5W10+IHtcbiAgICBpZiAocHJvcHMuZW50aXR5VHlwZSA9PSB1bmRlZmluZWQpIHRocm93IEVycm9yKFwiRW50aXR5VHlwZSBoYXMgdG8gYmUgcHJvdmlkZWQgdG8gbG9hZCBjaGlsZHJlbiBpbiBPTFMuXCIpO1xuXG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldENoaWxkcmVuKHByb3BzLm5vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaSwgcHJvcHMuZW50aXR5VHlwZSwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuaW5jbHVkZU9ic29sZXRlRW50aXRpZXMsIHByb3BzLnVzZUxlZ2FjeSkpXG4gICAgICAubWFwKChlbnRpdHkpID0+IHRoaXMuZW50aXR5VG9FbnRpdHlEYXRhRm9ySGllcmFyY2h5KGVudGl0eSkpXG4gIH1cbn1cbiIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL3NjcmVlbl9yZWFkZXJfb25seSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTY3JlZW5SZWFkZXJMaXZlID0gZnVuY3Rpb24gRXVpU2NyZWVuUmVhZGVyTGl2ZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJGlzQWN0aXZlID0gX3JlZi5pc0FjdGl2ZSxcbiAgICAgIGlzQWN0aXZlID0gX3JlZiRpc0FjdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkaXNBY3RpdmUsXG4gICAgICBfcmVmJHJvbGUgPSBfcmVmLnJvbGUsXG4gICAgICByb2xlID0gX3JlZiRyb2xlID09PSB2b2lkIDAgPyAnc3RhdHVzJyA6IF9yZWYkcm9sZSxcbiAgICAgIF9yZWYkYXJpYUxpdmUgPSBfcmVmWydhcmlhLWxpdmUnXSxcbiAgICAgIGFyaWFMaXZlID0gX3JlZiRhcmlhTGl2ZSA9PT0gdm9pZCAwID8gJ3BvbGl0ZScgOiBfcmVmJGFyaWFMaXZlLFxuICAgICAgX3JlZiRmb2N1c1JlZ2lvbk9uVGV4ID0gX3JlZi5mb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSxcbiAgICAgIGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID0gX3JlZiRmb2N1c1JlZ2lvbk9uVGV4ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkZm9jdXNSZWdpb25PblRleDtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICB0b2dnbGUgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0VG9nZ2xlID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgZm9jdXNSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgc2V0VG9nZ2xlKGZ1bmN0aW9uICh0b2dnbGUpIHtcbiAgICAgIHJldHVybiAhdG9nZ2xlO1xuICAgIH0pO1xuICB9LCBbY2hpbGRyZW5dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZm9jdXNSZWYuY3VycmVudCAhPT0gbnVsbCAmJiBmb2N1c1JlZ2lvbk9uVGV4dENoYW5nZSkge1xuICAgICAgZm9jdXNSZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW3RvZ2dsZSwgZm9jdXNSZWdpb25PblRleHRDaGFuZ2VdKTtcbiAgcmV0dXJuIChcbiAgICAvKipcbiAgICAgKiBJbnRlbnRpb25hbGx5IHVzZXMgdHdvIHBlcnNpc3RlbnQgbGl2ZSByZWdpb25zIHdpdGggb3NjaWxsYXRpbmcgY29udGVudCB1cGRhdGVzLlxuICAgICAqIFRoaXMgcmVzb2x2ZXMgdGhlIHByb2JsZW0gb2YgZHVwbGljYXRlIHNjcmVlbiByZWFkZXIgYW5ub3VuY2VtZW50cyBpbiByYXBpZCBzdWNjZXNzaW9uXG4gICAgICogY2F1c2VkIGJ5IFJlYWN0J3MgdmlydHVhbCBET00gYmVoYXZpb3VyIChodHRwczovL2dpdGh1Yi5jb20vbnZhY2Nlc3MvbnZkYS9pc3N1ZXMvNzk5NiNpc3N1ZWNvbW1lbnQtNDEzNjQxNzA5KVxuICAgICAqXG4gICAgICogQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hbHBoYWdvdi9hY2Nlc3NpYmxlLWF1dG9jb21wbGV0ZS9ibG9iL2E3MTA2ZjAzMTUwOTQxZmMxNWU2YzFjZWIwYTkwZTg4NzJmYTg2ZWYvc3JjL3N0YXR1cy5qc1xuICAgICAqIERlYm91bmNpbmcgd2FzIG5vdCBuZWVkZWQgZm9yIHRoaXMgY2FzZSwgYnV0IGNvdWxkIHByb3ZlIHRvIGJlIHVzZWZ1bCBmb3IgZnV0dXJlIHVzZSBjYXNlcy5cbiAgICAgKiBTZWUgYWxzbyBodHRwczovL2dpdGh1Yi5jb20vQWxtZXJvU3RleW4vcmVhY3QtYXJpYS1saXZlIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZGVxdWVsYWJzL25nQTExeVxuICAgICAqIGZvciBtb3JlIGV4YW1wbGVzIG9mIHRoZSBkb3VibGUgcmVnaW9uIGFwcHJvYWNoLlxuICAgICAqL1xuICAgIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICByZWY6IGZvY3VzUmVmLFxuICAgICAgdGFiSW5kZXg6IGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID8gLTEgOiB1bmRlZmluZWRcbiAgICB9LCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIHJvbGU6IHJvbGUsXG4gICAgICBcImFyaWEtYXRvbWljXCI6IFwidHJ1ZVwiIC8vIFNldHRpbmcgYGFyaWEtaGlkZGVuYCBhbmQgc2V0dGluZyBgYXJpYS1saXZlYCB0byBcIm9mZlwiIHByZXZlbnRzXG4gICAgICAvLyBkb3VibGUgYW5ub3VuY2VtZW50cyBmcm9tIFZPIHdoZW4gYGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlYCBpcyB0cnVlXG4gICAgICAsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRvZ2dsZSA/IHVuZGVmaW5lZCA6ICd0cnVlJyxcbiAgICAgIFwiYXJpYS1saXZlXCI6IGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlID8gJ29mZicgOiBhcmlhTGl2ZVxuICAgIH0sIGlzQWN0aXZlICYmIHRvZ2dsZSA/IGNoaWxkcmVuIDogJycpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIHJvbGU6IHJvbGUsXG4gICAgICBcImFyaWEtYXRvbWljXCI6IFwidHJ1ZVwiLFxuICAgICAgXCJhcmlhLWhpZGRlblwiOiAhdG9nZ2xlID8gdW5kZWZpbmVkIDogJ3RydWUnLFxuICAgICAgXCJhcmlhLWxpdmVcIjogZm9jdXNSZWdpb25PblRleHRDaGFuZ2UgPyAnb2ZmJyA6IGFyaWFMaXZlXG4gICAgfSwgaXNBY3RpdmUgJiYgIXRvZ2dsZSA/IGNoaWxkcmVuIDogJycpKSlcbiAgKTtcbn07XG5FdWlTY3JlZW5SZWFkZXJMaXZlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogV2hldGhlciB0byBtYWtlIHNjcmVlbiByZWFkZXJzIGF3YXJlIG9mIHRoZSBjb250ZW50XG4gICAgICovXG4gIGlzQWN0aXZlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBDb250ZW50IGZvciBzY3JlZW4gcmVhZGVycyB0byBhbm5vdW5jZVxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogYHJvbGVgIGF0dHJpYnV0ZSBmb3IgYm90aCBsaXZlIHJlZ2lvbnMuXG4gICAgICpcbiAgICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BY2Nlc3NpYmlsaXR5L0FSSUEvQVJJQV9MaXZlX1JlZ2lvbnMjcm9sZXNfd2l0aF9pbXBsaWNpdF9saXZlX3JlZ2lvbl9hdHRyaWJ1dGVzXG4gICAgICovXG4gIHJvbGU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogYGFyaWEtbGl2ZWAgYXR0cmlidXRlIGZvciBib3RoIGxpdmUgcmVnaW9uc1xuICAgICAqL1xuICBcImFyaWEtbGl2ZVwiOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9uIGBjaGlsZHJlbmAvdGV4dCBjaGFuZ2UsIHRoZSByZWdpb24gd2lsbCBhdXRvLWZvY3VzIGl0c2VsZiwgY2F1c2luZyBzY3JlZW4gcmVhZGVyc1xuICAgICAqIHRvIGF1dG9tYXRpY2FsbHkgcmVhZCBvdXQgdGhlIHRleHQgY29udGVudC4gVGhpcyBwcm9wIHNob3VsZCBwcmltYXJpbHkgYmUgdXNlZCBmb3JcbiAgICAgKiBuYXZpZ2F0aW9uIG9yIHBhZ2UgY2hhbmdlcywgd2hlcmUgcHJvZ3JhbW1hdGljYWxseSByZXNldHRpbmcgZm9jdXMgbG9jYXRpb24gYmFjayB0b1xuICAgICAqIGEgY2VydGFpbiBwYXJ0IG9mIHRoZSBwYWdlIGlzIGRlc2lyZWQuXG4gICAgICovXG4gIGZvY3VzUmVnaW9uT25UZXh0Q2hhbmdlOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY2xvbmVFbGVtZW50V2l0aENzcyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL2Nsb25lX2VsZW1lbnQnO1xuaW1wb3J0IHsgZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyB9IGZyb20gJy4vc2NyZWVuX3JlYWRlcl9vbmx5LnN0eWxlcyc7XG5leHBvcnQgdmFyIEV1aVNjcmVlblJlYWRlck9ubHkgPSBmdW5jdGlvbiBFdWlTY3JlZW5SZWFkZXJPbmx5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgc2hvd09uRm9jdXMgPSBfcmVmLnNob3dPbkZvY3VzO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCBjaGlsZHJlbi5wcm9wcy5jbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyhzaG93T25Gb2N1cyk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVNjcmVlblJlYWRlck9ubHldO1xuICB2YXIgcHJvcHMgPSB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLmxlbmd0aCA/IGNsYXNzZXMgOiB1bmRlZmluZWQsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfTtcbiAgcmV0dXJuIGNsb25lRWxlbWVudFdpdGhDc3MoY2hpbGRyZW4sIHByb3BzKTtcbn07XG5FdWlTY3JlZW5SZWFkZXJPbmx5LnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3RFbGVtZW50IHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogRm9yIGtleWJvYXJkIG5hdmlnYXRpb24sIGZvcmNlIGNvbnRlbnQgdG8gZGlzcGxheSB2aXN1YWxseSB1cG9uIGZvY3VzLlxuICAgICAqL1xuICBzaG93T25Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCwgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjcmVhdGVDYWNoZSBmcm9tICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgd2Vha01lbW9pemUgZnJvbSAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcbmltcG9ydCBob2lzdE5vblJlYWN0U3RhdGljcyBmcm9tICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG4vKiBpbXBvcnQgeyB0eXBlIEVtb3Rpb25DYWNoZSB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJyAqL1xudmFyIEVtb3Rpb25DYWNoZUNvbnRleHRcbi8qOiBSZWFjdC5Db250ZXh0PEVtb3Rpb25DYWNoZSB8IG51bGw+ICovXG49IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpXG4vKjogRW1vdGlvbkNhY2hlIHwgbnVsbCovXG57XG4gIHJldHVybiB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xufTtcblxudmFyIHdpdGhFbW90aW9uQ2FjaGUgPSBmdW5jdGlvbiB3aXRoRW1vdGlvbkNhY2hlXG4vKiA8UHJvcHMsIFJlZjogUmVhY3QuUmVmPCo+PiAqL1xuKGZ1bmNcbi8qOiAocHJvcHM6IFByb3BzLCBjYWNoZTogRW1vdGlvbkNhY2hlLCByZWY6IFJlZikgPT4gUmVhY3QuTm9kZSAqL1xuKVxuLyo6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PFByb3BzPiAqL1xue1xuICByZXR1cm4gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzXG4gIC8qOiBQcm9wcyAqL1xuICAsIHJlZlxuICAvKjogUmVmICovXG4gICkge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG52YXIgVGhlbWVDb250ZXh0ID0gLyogI19fUFVSRV9fICovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZVxuLyo6IE9iamVjdCAqL1xuLCB0aGVtZVxuLyo6IE9iamVjdCB8IChPYmplY3QgPT4gT2JqZWN0KSAqL1xuKSB7XG4gIGlmICh0eXBlb2YgdGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgbWVyZ2VkVGhlbWUgPSB0aGVtZShvdXRlclRoZW1lKTtcblxuICAgIHJldHVybiBtZXJnZWRUaGVtZTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgdGhlbWUpO1xufTtcblxudmFyIGNyZWF0ZUNhY2hlV2l0aFRoZW1lID0gLyogI19fUFVSRV9fICovd2Vha01lbW9pemUoZnVuY3Rpb24gKG91dGVyVGhlbWUpIHtcbiAgcmV0dXJuIHdlYWtNZW1vaXplKGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHJldHVybiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSk7XG4gIH0pO1xufSk7XG4vKlxudHlwZSBUaGVtZVByb3ZpZGVyUHJvcHMgPSB7XG4gIHRoZW1lOiBPYmplY3QgfCAoT2JqZWN0ID0+IE9iamVjdCksXG4gIGNoaWxkcmVuOiBSZWFjdC5Ob2RlXG59XG4qL1xuXG52YXIgVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHNcbi8qOiBUaGVtZVByb3ZpZGVyUHJvcHMgKi9cbikge1xuICB2YXIgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG5cbiAgaWYgKHByb3BzLnRoZW1lICE9PSB0aGVtZSkge1xuICAgIHRoZW1lID0gY3JlYXRlQ2FjaGVXaXRoVGhlbWUodGhlbWUpKHByb3BzLnRoZW1lKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdGhlbWVcbiAgfSwgcHJvcHMuY2hpbGRyZW4pO1xufTtcbmZ1bmN0aW9uIHdpdGhUaGVtZVxuLyogPENvbmZpZzoge30+ICovXG4oQ29tcG9uZW50XG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8Q29uZmlnPiAqL1xuKVxuLyo6IFJlYWN0LkFic3RyYWN0Q29tcG9uZW50PCREaWZmPENvbmZpZywgeyB0aGVtZTogT2JqZWN0IH0+PiAqL1xue1xuICB2YXIgY29tcG9uZW50TmFtZSA9IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcblxuICB2YXIgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHByb3BzLCByZWYpIHtcbiAgICB2YXIgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcykpO1xuICB9O1xuXG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihyZW5kZXIpO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgdHlwZVByb3BOYW1lID0gJ19fRU1PVElPTl9UWVBFX1BMRUFTRV9ET19OT1RfVVNFX18nO1xudmFyIGNyZWF0ZUVtb3Rpb25Qcm9wcyA9IGZ1bmN0aW9uIGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlXG4vKjogUmVhY3QuRWxlbWVudFR5cGUgKi9cbiwgcHJvcHNcbi8qOiBPYmplY3QgKi9cbikge1xuXG4gIHZhciBuZXdQcm9wc1xuICAvKjogYW55ICovXG4gID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKHByb3BzLCBrZXkpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wc1t0eXBlUHJvcE5hbWVdID0gdHlwZTsgLy8gUnVudGltZSBsYWJlbGluZyBpcyBhbiBvcHQtaW4gZmVhdHVyZSBiZWNhdXNlOlxuXG4gIHJldHVybiBuZXdQcm9wcztcbn07XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZCA9IF9yZWYuc2VyaWFsaXplZCxcbiAgICAgIGlzU3RyaW5nVGFnID0gX3JlZi5pc1N0cmluZ1RhZztcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBFbW90aW9uID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShcbi8qIDxhbnksIGFueT4gKi9cbmZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICB2YXIgY3NzUHJvcCA9IHByb3BzLmNzczsgLy8gc28gdGhhdCB1c2luZyBgY3NzYCBmcm9tIGBlbW90aW9uYCBhbmQgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHRoZSBjc3MgcHJvcCB3b3Jrc1xuICAvLyBub3QgcGFzc2luZyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBzZXJpYWxpemVTdHlsZXMgYmVjYXVzZSBpdCB3b3VsZFxuICAvLyBtYWtlIGNlcnRhaW4gYmFiZWwgb3B0aW1pc2F0aW9ucyBub3QgcG9zc2libGVcblxuICBpZiAodHlwZW9mIGNzc1Byb3AgPT09ICdzdHJpbmcnICYmIGNhY2hlLnJlZ2lzdGVyZWRbY3NzUHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgIGNzc1Byb3AgPSBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdO1xuICB9XG5cbiAgdmFyIFdyYXBwZWRDb21wb25lbnQgPSBwcm9wc1t0eXBlUHJvcE5hbWVdO1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtjc3NQcm9wXTtcbiAgdmFyIGNsYXNzTmFtZSA9ICcnO1xuXG4gIGlmICh0eXBlb2YgcHJvcHMuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGNsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMoY2FjaGUucmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgcHJvcHMuY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgIGNsYXNzTmFtZSA9IHByb3BzLmNsYXNzTmFtZSArIFwiIFwiO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMocmVnaXN0ZXJlZFN0eWxlcywgdW5kZWZpbmVkLCBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCkpO1xuXG4gIGNsYXNzTmFtZSArPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKHByb3BzLCBrZXkpICYmIGtleSAhPT0gJ2NzcycgJiYga2V5ICE9PSB0eXBlUHJvcE5hbWUgJiYgKCFpc0RldmVsb3BtZW50ICkpIHtcbiAgICAgIG5ld1Byb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcblxuICBpZiAocmVmKSB7XG4gICAgbmV3UHJvcHMucmVmID0gcmVmO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNEZXZlbG9wbWVudCBhcyBpLCB1c2VUaGVtZSBhcyB1LCB3aXRoRW1vdGlvbkNhY2hlIGFzIHcgfTtcbiIsICJ2YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG4vKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIFx1Mjc2NFx1RkUwRlxuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gdGhpcyB3ZWlyZG5lc3MgYnJvdWdodCB0byB5b3UgYnkgZmlyZWZveFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgfVxuICB9IC8vIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyByZXR1cm4gd2l0aCBhIHZhbHVlXG4gIC8vIFRTIGNhbid0IHVuZGVyc3RhbmQgaXQgdGhvdWdoIHNvIHdlIG1ha2UgaXQgc3RvcCBjb21wbGFpbmluZyBoZXJlXG5cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyAhaXNEZXZlbG9wbWVudCA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBfdGFnJHBhcmVudE5vZGU7XG5cbiAgICAgIHJldHVybiAoX3RhZyRwYXJlbnROb2RlID0gdGFnLnBhcmVudE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGFnJHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsICJleHBvcnQgdmFyIE1TID0gJy1tcy0nXG5leHBvcnQgdmFyIE1PWiA9ICctbW96LSdcbmV4cG9ydCB2YXIgV0VCS0lUID0gJy13ZWJraXQtJ1xuXG5leHBvcnQgdmFyIENPTU1FTlQgPSAnY29tbSdcbmV4cG9ydCB2YXIgUlVMRVNFVCA9ICdydWxlJ1xuZXhwb3J0IHZhciBERUNMQVJBVElPTiA9ICdkZWNsJ1xuXG5leHBvcnQgdmFyIFBBR0UgPSAnQHBhZ2UnXG5leHBvcnQgdmFyIE1FRElBID0gJ0BtZWRpYSdcbmV4cG9ydCB2YXIgSU1QT1JUID0gJ0BpbXBvcnQnXG5leHBvcnQgdmFyIENIQVJTRVQgPSAnQGNoYXJzZXQnXG5leHBvcnQgdmFyIFZJRVdQT1JUID0gJ0B2aWV3cG9ydCdcbmV4cG9ydCB2YXIgU1VQUE9SVFMgPSAnQHN1cHBvcnRzJ1xuZXhwb3J0IHZhciBET0NVTUVOVCA9ICdAZG9jdW1lbnQnXG5leHBvcnQgdmFyIE5BTUVTUEFDRSA9ICdAbmFtZXNwYWNlJ1xuZXhwb3J0IHZhciBLRVlGUkFNRVMgPSAnQGtleWZyYW1lcydcbmV4cG9ydCB2YXIgRk9OVF9GQUNFID0gJ0Bmb250LWZhY2UnXG5leHBvcnQgdmFyIENPVU5URVJfU1RZTEUgPSAnQGNvdW50ZXItc3R5bGUnXG5leHBvcnQgdmFyIEZPTlRfRkVBVFVSRV9WQUxVRVMgPSAnQGZvbnQtZmVhdHVyZS12YWx1ZXMnXG5leHBvcnQgdmFyIExBWUVSID0gJ0BsYXllcidcbiIsICIvKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgZnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHJldHVybiBjaGFyYXQodmFsdWUsIDApIF4gNDUgPyAoKCgoKCgobGVuZ3RoIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAwKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDEpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMikpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAzKSA6IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS50cmltKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmc/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2ggKHZhbHVlLCBwYXR0ZXJuKSB7XG5cdHJldHVybiAodmFsdWUgPSBwYXR0ZXJuLmV4ZWModmFsdWUpKSA/IHZhbHVlWzBdIDogdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UgKHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gpIHtcblx0cmV0dXJuIHZhbHVlLmluZGV4T2Yoc2VhcmNoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG4iLCAiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vZGUgKHZhbHVlLCByb290LCBwYXJlbnQsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHJldHVybiB7dmFsdWU6IHZhbHVlLCByb290OiByb290LCBwYXJlbnQ6IHBhcmVudCwgdHlwZTogdHlwZSwgcHJvcHM6IHByb3BzLCBjaGlsZHJlbjogY2hpbGRyZW4sIGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uLCBsZW5ndGg6IGxlbmd0aCwgcmV0dXJuOiAnJ31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChyb290LCBwcm9wcykge1xuXHRyZXR1cm4gYXNzaWduKG5vZGUoJycsIG51bGwsIG51bGwsICcnLCBudWxsLCBudWxsLCAwKSwgcm9vdCwge2xlbmd0aDogLXJvb3QubGVuZ3RofSwgcHJvcHMpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwgImltcG9ydCB7Q09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7YWJzLCBjaGFyYXQsIHRyaW0sIGZyb20sIHNpemVvZiwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgcmVwbGFjZSwgaW5kZXhvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtub2RlLCBjaGFyLCBwcmV2LCBuZXh0LCBwZWVrLCBjYXJldCwgYWxsb2MsIGRlYWxsb2MsIGRlbGltaXQsIHdoaXRlc3BhY2UsIGVzY2FwaW5nLCBpZGVudGlmaWVyLCBjb21tZW50ZXJ9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7b2JqZWN0W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyhwYXJzZSgnJywgbnVsbCwgbnVsbCwgbnVsbCwgWycnXSwgdmFsdWUgPSBhbGxvYyh2YWx1ZSksIDAsIFswXSwgdmFsdWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNldHNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBzZXVkb1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZWNsYXJhdGlvbnNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBydWxlLCBydWxlcywgcnVsZXNldHMsIHBzZXVkbywgcG9pbnRzLCBkZWNsYXJhdGlvbnMpIHtcblx0dmFyIGluZGV4ID0gMFxuXHR2YXIgb2Zmc2V0ID0gMFxuXHR2YXIgbGVuZ3RoID0gcHNldWRvXG5cdHZhciBhdHJ1bGUgPSAwXG5cdHZhciBwcm9wZXJ0eSA9IDBcblx0dmFyIHByZXZpb3VzID0gMFxuXHR2YXIgdmFyaWFibGUgPSAxXG5cdHZhciBzY2FubmluZyA9IDFcblx0dmFyIGFtcGVyc2FuZCA9IDFcblx0dmFyIGNoYXJhY3RlciA9IDBcblx0dmFyIHR5cGUgPSAnJ1xuXHR2YXIgcHJvcHMgPSBydWxlc1xuXHR2YXIgY2hpbGRyZW4gPSBydWxlc2V0c1xuXHR2YXIgcmVmZXJlbmNlID0gcnVsZVxuXHR2YXIgY2hhcmFjdGVycyA9IHR5cGVcblxuXHR3aGlsZSAoc2Nhbm5pbmcpXG5cdFx0c3dpdGNoIChwcmV2aW91cyA9IGNoYXJhY3RlciwgY2hhcmFjdGVyID0gbmV4dCgpKSB7XG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAocHJldmlvdXMgIT0gMTA4ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCBsZW5ndGggLSAxKSA9PSA1OCkge1xuXHRcdFx0XHRcdGlmIChpbmRleG9mKGNoYXJhY3RlcnMgKz0gcmVwbGFjZShkZWxpbWl0KGNoYXJhY3RlciksICcmJywgJyZcXGYnKSwgJyZcXGYnKSAhPSAtMSlcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IC0xXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0Ly8gXCIgJyBbXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDkxOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFx0IFxcbiBcXHIgXFxzXG5cdFx0XHRjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gd2hpdGVzcGFjZShwcmV2aW91cylcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGVzY2FwaW5nKGNhcmV0KCkgLSAxLCA3KVxuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0Ly8gL1xuXHRcdFx0Y2FzZSA0Nzpcblx0XHRcdFx0c3dpdGNoIChwZWVrKCkpIHtcblx0XHRcdFx0XHRjYXNlIDQyOiBjYXNlIDQ3OlxuXHRcdFx0XHRcdFx0YXBwZW5kKGNvbW1lbnQoY29tbWVudGVyKG5leHQoKSwgY2FyZXQoKSksIHJvb3QsIHBhcmVudCksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGgpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSkgOiBkZWNsYXJhdGlvbihyZXBsYWNlKGNoYXJhY3RlcnMsICcgJywgJycpICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDIpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEAgO1xuXHRcdFx0XHRcdGNhc2UgNTk6IGNoYXJhY3RlcnMgKz0gJzsnXG5cdFx0XHRcdFx0Ly8geyBydWxlL2F0LXJ1bGVcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YXBwZW5kKHJlZmVyZW5jZSA9IHJ1bGVzZXQoY2hhcmFjdGVycywgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcyA9IFtdLCBjaGlsZHJlbiA9IFtdLCBsZW5ndGgpLCBydWxlc2V0cylcblxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gMTIzKVxuXHRcdFx0XHRcdFx0XHRpZiAob2Zmc2V0ID09PSAwKVxuXHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJvb3QsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBwcm9wcywgcnVsZXNldHMsIGxlbmd0aCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoYXRydWxlID09PSA5OSAmJiBjaGFyYXQoY2hhcmFjdGVycywgMykgPT09IDExMCA/IDEwMCA6IGF0cnVsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZCBsIG0gc1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAxMDA6IGNhc2UgMTA4OiBjYXNlIDEwOTogY2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcnVsZSAmJiBhcHBlbmQocnVsZXNldCh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIDAsIDAsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHJ1bGVzLCBwcm9wcyA9IFtdLCBsZW5ndGgpLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNldCAodmFsdWUsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0dmFyIHBvc3QgPSBvZmZzZXQgLSAxXG5cdHZhciBydWxlID0gb2Zmc2V0ID09PSAwID8gcnVsZXMgOiBbJyddXG5cdHZhciBzaXplID0gc2l6ZW9mKHJ1bGUpXG5cblx0Zm9yICh2YXIgaSA9IDAsIGogPSAwLCBrID0gMDsgaSA8IGluZGV4OyArK2kpXG5cdFx0Zm9yICh2YXIgeCA9IDAsIHkgPSBzdWJzdHIodmFsdWUsIHBvc3QgKyAxLCBwb3N0ID0gYWJzKGogPSBwb2ludHNbaV0pKSwgeiA9IHZhbHVlOyB4IDwgc2l6ZTsgKyt4KVxuXHRcdFx0aWYgKHogPSB0cmltKGogPiAwID8gcnVsZVt4XSArICcgJyArIHkgOiByZXBsYWNlKHksIC8mXFxmL2csIHJ1bGVbeF0pKSlcblx0XHRcdFx0cHJvcHNbaysrXSA9IHpcblxuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBvZmZzZXQgPT09IDAgPyBSVUxFU0VUIDogdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnQgKHZhbHVlLCByb290LCBwYXJlbnQpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgQ09NTUVOVCwgZnJvbShjaGFyKCkpLCBzdWJzdHIodmFsdWUsIDIsIC0yKSwgMClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHZhbHVlLCByb290LCBwYXJlbnQsIGxlbmd0aCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBERUNMQVJBVElPTiwgc3Vic3RyKHZhbHVlLCAwLCBsZW5ndGgpLCBzdWJzdHIodmFsdWUsIGxlbmd0aCArIDEsIC0xKSwgbGVuZ3RoKVxufVxuIiwgImltcG9ydCB7SU1QT1JULCBMQVlFUiwgQ09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT04sIEtFWUZSQU1FU30gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtzdHJsZW4sIHNpemVvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplIChjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0dmFyIG91dHB1dCA9ICcnXG5cdHZhciBsZW5ndGggPSBzaXplb2YoY2hpbGRyZW4pXG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRvdXRwdXQgKz0gY2FsbGJhY2soY2hpbGRyZW5baV0sIGksIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRyZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIExBWUVSOiBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIGJyZWFrXG5cdFx0Y2FzZSBJTVBPUlQ6IGNhc2UgREVDTEFSQVRJT046IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQucmV0dXJuIHx8IGVsZW1lbnQudmFsdWVcblx0XHRjYXNlIENPTU1FTlQ6IHJldHVybiAnJ1xuXHRcdGNhc2UgS0VZRlJBTUVTOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSArICd9J1xuXHRcdGNhc2UgUlVMRVNFVDogZWxlbWVudC52YWx1ZSA9IGVsZW1lbnQucHJvcHMuam9pbignLCcpXG5cdH1cblxuXHRyZXR1cm4gc3RybGVuKGNoaWxkcmVuID0gc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSkgPyBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBjaGlsZHJlbiArICd9JyA6ICcnXG59XG4iLCAiaW1wb3J0IHtNUywgTU9aLCBXRUJLSVQsIFJVTEVTRVQsIEtFWUZSQU1FUywgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7bWF0Y2gsIGNoYXJhdCwgc3Vic3RyLCBzdHJsZW4sIHNpemVvZiwgcmVwbGFjZSwgY29tYmluZX0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtjb3B5LCB0b2tlbml6ZX0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5pbXBvcnQge3NlcmlhbGl6ZX0gZnJvbSAnLi9TZXJpYWxpemVyLmpzJ1xuaW1wb3J0IHtwcmVmaXh9IGZyb20gJy4vUHJlZml4ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbltdfSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pZGRsZXdhcmUgKGNvbGxlY3Rpb24pIHtcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjb2xsZWN0aW9uKVxuXG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRcdHZhciBvdXRwdXQgPSAnJ1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdG91dHB1dCArPSBjb2xsZWN0aW9uW2ldKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2hlZXQgKGNhbGxiYWNrKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGlmICghZWxlbWVudC5yb290KVxuXHRcdFx0aWYgKGVsZW1lbnQgPSBlbGVtZW50LnJldHVybilcblx0XHRcdFx0Y2FsbGJhY2soZWxlbWVudClcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ZXIgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0aWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpXG5cdFx0aWYgKCFlbGVtZW50LnJldHVybilcblx0XHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgREVDTEFSQVRJT046IGVsZW1lbnQucmV0dXJuID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoLCBjaGlsZHJlbilcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0Y2FzZSBLRVlGUkFNRVM6XG5cdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7dmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpfSldLCBjYWxsYmFjaylcblx0XHRcdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0XHRcdGlmIChlbGVtZW50Lmxlbmd0aClcblx0XHRcdFx0XHRcdHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzpyZWFkLW9ubHknOiBjYXNlICc6cmVhZC13cml0ZSc6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHRcdC8vIDpwbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV19KVxuXHRcdFx0XHRcdFx0XHRcdFx0XSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJydcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZSAoZWxlbWVudCkge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdGVsZW1lbnQucHJvcHMgPSBlbGVtZW50LnByb3BzLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIGNvbWJpbmUodG9rZW5pemUodmFsdWUpLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjaGlsZHJlbikge1xuXHRcdFx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCAwKSkge1xuXHRcdFx0XHRcdFx0Ly8gXFxmXG5cdFx0XHRcdFx0XHRjYXNlIDEyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc3Vic3RyKHZhbHVlLCAxLCBzdHJsZW4odmFsdWUpKVxuXHRcdFx0XHRcdFx0Ly8gXFwwICggKyA+IH5cblx0XHRcdFx0XHRcdGNhc2UgMDogY2FzZSA0MDogY2FzZSA0MzogY2FzZSA2MjogY2FzZSAxMjY6XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0Ly8gOlxuXHRcdFx0XHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0XHRcdFx0aWYgKGNoaWxkcmVuWysraW5kZXhdID09PSAnZ2xvYmFsJylcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbltpbmRleF0gPSAnJywgY2hpbGRyZW5bKytpbmRleF0gPSAnXFxmJyArIHN1YnN0cihjaGlsZHJlbltpbmRleF0sIGluZGV4ID0gMSwgLTEpXG5cdFx0XHRcdFx0XHQvLyBcXHNcblx0XHRcdFx0XHRcdGNhc2UgMzI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDA6IGVsZW1lbnQgPSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNpemVvZihjaGlsZHJlbikgPiAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgaW5kZXggPSBzaXplb2YoY2hpbGRyZW4pIC0gMTogY2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAyID8gdmFsdWUgKyBlbGVtZW50ICsgZWxlbWVudCA6IHZhbHVlICsgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0pXG5cdH1cbn1cbiIsICJmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59XG5cbmV4cG9ydCB7IG1lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCc7XG5pbXBvcnQgeyBkZWFsbG9jLCBhbGxvYywgbmV4dCwgdG9rZW4sIGZyb20sIHBlZWssIGRlbGltaXQsIHNsaWNlLCBwb3NpdGlvbiwgUlVMRVNFVCwgY29tYmluZSwgbWF0Y2gsIHNlcmlhbGl6ZSwgY29weSwgcmVwbGFjZSwgV0VCS0lULCBNT1osIE1TLCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OLCBoYXNoLCBjaGFyYXQsIHN0cmxlbiwgaW5kZXhvZiwgc3RyaW5naWZ5LCBydWxlc2hlZXQsIG1pZGRsZXdhcmUsIGNvbXBpbGUgfSBmcm9tICdzdHlsaXMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyA9IGZ1bmN0aW9uIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhiZWdpbiwgcG9pbnRzLCBpbmRleCkge1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHByZXZpb3VzID0gY2hhcmFjdGVyO1xuICAgIGNoYXJhY3RlciA9IHBlZWsoKTsgLy8gJlxcZlxuXG4gICAgaWYgKHByZXZpb3VzID09PSAzOCAmJiBjaGFyYWN0ZXIgPT09IDEyKSB7XG4gICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIHNsaWNlKGJlZ2luLCBwb3NpdGlvbik7XG59O1xuXG52YXIgdG9SdWxlcyA9IGZ1bmN0aW9uIHRvUnVsZXMocGFyc2VkLCBwb2ludHMpIHtcbiAgLy8gcHJldGVuZCB3ZSd2ZSBzdGFydGVkIHdpdGggYSBjb21tYVxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGNoYXJhY3RlciA9IDQ0O1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgLy8gJlxcZlxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAzOCAmJiBwZWVrKCkgPT09IDEyKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0LCB3ZSBkb24ndCBhY2NvdW50IGZvciBsaXRlcmFsIHNlcXVlbmNlcyBoZXJlIC0gbGlrZSBmb3IgZXhhbXBsZSBxdW90ZWQgc3RyaW5nc1xuICAgICAgICAgIC8vIHN0eWxpcyBpbnNlcnRzIFxcZiBhZnRlciAmIHRvIGtub3cgd2hlbiAmIHdoZXJlIGl0IHNob3VsZCByZXBsYWNlIHRoaXMgc2VxdWVuY2Ugd2l0aCB0aGUgY29udGV4dCBzZWxlY3RvclxuICAgICAgICAgIC8vIGFuZCB3aGVuIGl0IHNob3VsZCBqdXN0IGNvbmNhdGVuYXRlIHRoZSBvdXRlciBhbmQgaW5uZXIgc2VsZWN0b3JzXG4gICAgICAgICAgLy8gaXQncyB2ZXJ5IHVubGlrZWx5IGZvciB0aGlzIHNlcXVlbmNlIHRvIGFjdHVhbGx5IGFwcGVhciBpbiBhIGRpZmZlcmVudCBjb250ZXh0LCBzbyB3ZSBqdXN0IGxldmVyYWdlIHRoaXMgZmFjdCBoZXJlXG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhwb3NpdGlvbiAtIDEsIHBvaW50cywgaW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGRlbGltaXQoY2hhcmFjdGVyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgLy8gY29tbWFcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gNDQpIHtcbiAgICAgICAgICAvLyBjb2xvblxuICAgICAgICAgIHBhcnNlZFsrK2luZGV4XSA9IHBlZWsoKSA9PT0gNTggPyAnJlxcZicgOiAnJztcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gcGFyc2VkW2luZGV4XS5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgLy8gZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBmcm9tKGNoYXJhY3Rlcik7XG4gICAgfVxuICB9IHdoaWxlIChjaGFyYWN0ZXIgPSBuZXh0KCkpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG52YXIgZ2V0UnVsZXMgPSBmdW5jdGlvbiBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKSB7XG4gIHJldHVybiBkZWFsbG9jKHRvUnVsZXMoYWxsb2ModmFsdWUpLCBwb2ludHMpKTtcbn07IC8vIFdlYWtTZXQgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZSwgYnV0IG9ubHkgV2Vha01hcCBpcyBzdXBwb3J0ZWQgaW4gSUUxMVxuXG5cbnZhciBmaXhlZEVsZW1lbnRzID0gLyogI19fUFVSRV9fICovbmV3IFdlYWtNYXAoKTtcbnZhciBjb21wYXQgPSBmdW5jdGlvbiBjb21wYXQoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlICE9PSAncnVsZScgfHwgIWVsZW1lbnQucGFyZW50IHx8IC8vIHBvc2l0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGNvbnRhaW5zIHBzZXVkb1xuICAvLyBuZWdhdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBoYXMgYmVlbiBhbHJlYWR5IHByZWZpeGVkXG4gIGVsZW1lbnQubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWUsXG4gICAgICBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgdmFyIGlzSW1wbGljaXRSdWxlID0gZWxlbWVudC5jb2x1bW4gPT09IHBhcmVudC5jb2x1bW4gJiYgZWxlbWVudC5saW5lID09PSBwYXJlbnQubGluZTtcblxuICB3aGlsZSAocGFyZW50LnR5cGUgIT09ICdydWxlJykge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgfSAvLyBzaG9ydC1jaXJjdWl0IGZvciB0aGUgc2ltcGxlc3QgY2FzZVxuXG5cbiAgaWYgKGVsZW1lbnQucHJvcHMubGVuZ3RoID09PSAxICYmIHZhbHVlLmNoYXJDb2RlQXQoMCkgIT09IDU4XG4gIC8qIGNvbG9uICovXG4gICYmICFmaXhlZEVsZW1lbnRzLmdldChwYXJlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGlmIHRoaXMgaXMgYW4gaW1wbGljaXRseSBpbnNlcnRlZCBydWxlICh0aGUgb25lIGVhZ2VybHkgaW5zZXJ0ZWQgYXQgdGhlIGVhY2ggbmV3IG5lc3RlZCBsZXZlbClcbiAgLy8gdGhlbiB0aGUgcHJvcHMgaGFzIGFscmVhZHkgYmVlbiBtYW5pcHVsYXRlZCBiZWZvcmVoYW5kIGFzIHRoZXkgdGhhdCBhcnJheSBpcyBzaGFyZWQgYmV0d2VlbiBpdCBhbmQgaXRzIFwicnVsZSBwYXJlbnRcIlxuXG5cbiAgaWYgKGlzSW1wbGljaXRSdWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZml4ZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgdHJ1ZSk7XG4gIHZhciBwb2ludHMgPSBbXTtcbiAgdmFyIHJ1bGVzID0gZ2V0UnVsZXModmFsdWUsIHBvaW50cyk7XG4gIHZhciBwYXJlbnRSdWxlcyA9IHBhcmVudC5wcm9wcztcblxuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyZW50UnVsZXMubGVuZ3RoOyBqKyssIGsrKykge1xuICAgICAgZWxlbWVudC5wcm9wc1trXSA9IHBvaW50c1tpXSA/IHJ1bGVzW2ldLnJlcGxhY2UoLyZcXGYvZywgcGFyZW50UnVsZXNbal0pIDogcGFyZW50UnVsZXNbal0gKyBcIiBcIiArIHJ1bGVzW2ldO1xuICAgIH1cbiAgfVxufTtcbnZhciByZW1vdmVMYWJlbCA9IGZ1bmN0aW9uIHJlbW92ZUxhYmVsKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuICAgIGlmICggLy8gY2hhcmNvZGUgZm9yIGxcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDApID09PSAxMDggJiYgLy8gY2hhcmNvZGUgZm9yIGJcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgLy8gdGhpcyBpZ25vcmVzIGxhYmVsXG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gICAgICBlbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1mYWxsdGhyb3VnaCAqL1xuXG5mdW5jdGlvbiBwcmVmaXgodmFsdWUsIGxlbmd0aCkge1xuICBzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcbiAgICAvLyBjb2xvci1hZGp1c3RcbiAgICBjYXNlIDUxMDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXG4gICAgY2FzZSA1NzM3OlxuICAgIGNhc2UgNDIwMTpcbiAgICBjYXNlIDMxNzc6XG4gICAgY2FzZSAzNDMzOlxuICAgIGNhc2UgMTY0MTpcbiAgICBjYXNlIDQ0NTc6XG4gICAgY2FzZSAyOTIxOiAvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cbiAgICBjYXNlIDU1NzI6XG4gICAgY2FzZSA2MzU2OlxuICAgIGNhc2UgNTg0NDpcbiAgICBjYXNlIDMxOTE6XG4gICAgY2FzZSA2NjQ1OlxuICAgIGNhc2UgMzAwNTogLy8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUsXG5cbiAgICBjYXNlIDYzOTE6XG4gICAgY2FzZSA1ODc5OlxuICAgIGNhc2UgNTYyMzpcbiAgICBjYXNlIDYxMzU6XG4gICAgY2FzZSA0NTk5OlxuICAgIGNhc2UgNDg1NTogLy8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblxuICAgIGNhc2UgNDIxNTpcbiAgICBjYXNlIDYzODk6XG4gICAgY2FzZSA1MTA5OlxuICAgIGNhc2UgNTM2NTpcbiAgICBjYXNlIDU2MjE6XG4gICAgY2FzZSAzODI5OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXG4gICAgY2FzZSA1MzQ5OlxuICAgIGNhc2UgNDI0NjpcbiAgICBjYXNlIDQ4MTA6XG4gICAgY2FzZSA2OTY4OlxuICAgIGNhc2UgMjc1NjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uXG5cbiAgICBjYXNlIDY4Mjg6XG4gICAgY2FzZSA0MjY4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIG9yZGVyXG5cbiAgICBjYXNlIDYxNjU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWl0ZW1zXG5cbiAgICBjYXNlIDUxODc6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tc2VsZlxuXG4gICAgY2FzZSA1NDQzOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1jb250ZW50XG5cbiAgICBjYXNlIDQ2NzU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtc2hyaW5rXG5cbiAgICBjYXNlIDU1NDg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtYmFzaXNcblxuICAgIGNhc2UgNTI5MjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWdyb3dcblxuICAgIGNhc2UgNjA2MDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIHRyYW5zaXRpb25cblxuICAgIGNhc2UgNDU1NDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWU7XG4gICAgLy8gY3Vyc29yXG5cbiAgICBjYXNlIDYxODc6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cbiAgICBjYXNlIDU0OTU6XG4gICAgY2FzZSAzOTU5OlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oaW1hZ2Utc2V0XFwoW15dKikvLCBXRUJLSVQgKyAnJDEnICsgJyRgJDEnKTtcbiAgICAvLyBqdXN0aWZ5LWNvbnRlbnRcblxuICAgIGNhc2UgNDk2ODpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oLis6KShmbGV4LSk/KC4qKS8sIFdFQktJVCArICdib3gtcGFjazokMycgKyBNUyArICdmbGV4LXBhY2s6JDMnKSwgL3MuKy1iW147XSsvLCAnanVzdGlmeScpICsgV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyAobWFyZ2lufHBhZGRpbmcpLWlubGluZS0oc3RhcnR8ZW5kKVxuXG4gICAgY2FzZSA0MDk1OlxuICAgIGNhc2UgMzU4MzpcbiAgICBjYXNlIDQwNjg6XG4gICAgY2FzZSAyNTMyOlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWU7XG4gICAgLy8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcblxuICAgIGNhc2UgODExNjpcbiAgICBjYXNlIDcwNTk6XG4gICAgY2FzZSA1NzUzOlxuICAgIGNhc2UgNTUzNTpcbiAgICBjYXNlIDU0NDU6XG4gICAgY2FzZSA1NzAxOlxuICAgIGNhc2UgNDkzMzpcbiAgICBjYXNlIDQ2Nzc6XG4gICAgY2FzZSA1NTMzOlxuICAgIGNhc2UgNTc4OTpcbiAgICBjYXNlIDUwMjE6XG4gICAgY2FzZSA0NzY1OlxuICAgICAgLy8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuICAgICAgaWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNikgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG4gICAgICAgIC8vIChtKWF4LWNvbnRlbnQsIChtKWluLWNvbnRlbnRcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgLy8gLVxuICAgICAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDQpICE9PSA0NSkgYnJlYWs7XG4gICAgICAgIC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblxuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PSAxMDggPyAnJDMnIDogJyQyLSQzJykpICsgdmFsdWU7XG4gICAgICAgIC8vIChzKXRyZXRjaFxuXG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIHJldHVybiB+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSA/IHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgpICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIC8vIHBvc2l0aW9uOiBzdGlja3lcblxuICAgIGNhc2UgNDk0OTpcbiAgICAgIC8vIChzKXRpY2t5P1xuICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkgIT09IDExNSkgYnJlYWs7XG4gICAgLy8gZGlzcGxheTogKGZsZXh8aW5saW5lLWZsZXgpXG5cbiAgICBjYXNlIDY0NDQ6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAtIDMgLSAofmluZGV4b2YodmFsdWUsICchaW1wb3J0YW50JykgJiYgMTApKSkge1xuICAgICAgICAvLyBzdGljKGspeVxuICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBXRUJLSVQpICsgdmFsdWU7XG4gICAgICAgIC8vIChpbmxpbmUtKT9mbChlKXhcblxuICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKFteOyFdKykoO3whLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIC8vIHdyaXRpbmctbW9kZVxuXG4gICAgY2FzZSA1OTM2OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuICAgICAgICAvLyB2ZXJ0aWNhbC1sKHIpXG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlO1xuICAgICAgICAvLyB2ZXJ0aWNhbC1yKGwpXG5cbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWU7XG4gICAgICAgIC8vIGhvcml6b250YWwoLSl0YlxuXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIHByZWZpeGVyID0gZnVuY3Rpb24gcHJlZml4ZXIoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuICBpZiAoZWxlbWVudC5sZW5ndGggPiAtMSkgaWYgKCFlbGVtZW50W1wicmV0dXJuXCJdKSBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgREVDTEFSQVRJT046XG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBLRVlGUkFNRVM6XG4gICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgdmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpXG4gICAgICB9KV0sIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgUlVMRVNFVDpcbiAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCkgcmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG4gICAgICAgICAgLy8gOnJlYWQtKG9ubHl8d3JpdGUpXG4gICAgICAgICAgY2FzZSAnOnJlYWQtb25seSc6XG4gICAgICAgICAgY2FzZSAnOnJlYWQtd3JpdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgICAgLy8gOnBsYWNlaG9sZGVyXG5cbiAgICAgICAgICBjYXNlICc6OnBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0pO1xuICB9XG59O1xuXG52YXIgZGVmYXVsdFN0eWxpc1BsdWdpbnMgPSBbcHJlZml4ZXJdO1xuXG52YXIgY3JlYXRlQ2FjaGUgPSBmdW5jdGlvblxuICAvKjogRW1vdGlvbkNhY2hlICovXG5jcmVhdGVDYWNoZShvcHRpb25zXG4vKjogT3B0aW9ucyAqL1xuKSB7XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleTtcblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGVcbiAgICAvKjogSFRNTFN0eWxlRWxlbWVudCAqL1xuICAgICkge1xuICAgICAgLy8gd2Ugd2FudCB0byBvbmx5IG1vdmUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhIHNwYWNlIGluIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlIHZhbHVlXG4gICAgICAvLyBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHRoYXQgaXQgaXMgYW4gRW1vdGlvbiAxMSBzZXJ2ZXItc2lkZSByZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgICAgLy8gd2hpbGUgd2Ugd2lsbCBhbHJlYWR5IGlnbm9yZSBFbW90aW9uIDExIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBiZWNhdXNlIG9mIHRoZSA6bm90KFtkYXRhLXNdKSBwYXJ0IGluIHRoZSBzZWxlY3RvclxuICAgICAgLy8gRW1vdGlvbiAxMCBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgZGlkIG5vdCBoYXZlIGRhdGEtcyAoYnV0IGltcG9ydGFudGx5IGRpZCBub3QgaGF2ZSBhIHNwYWNlIGluIHRoZWlyIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGVzKVxuICAgICAgLy8gc28gY2hlY2tpbmcgZm9yIHRoZSBzcGFjZSBlbnN1cmVzIHRoYXQgbG9hZGluZyBFbW90aW9uIDExIGFmdGVyIEVtb3Rpb24gMTAgaGFzIGluc2VydGVkIHNvbWUgc3R5bGVzXG4gICAgICAvLyB3aWxsIG5vdCByZXN1bHQgaW4gdGhlIEVtb3Rpb24gMTAgc3R5bGVzIGJlaW5nIGRlc3Ryb3llZFxuICAgICAgdmFyIGRhdGFFbW90aW9uQXR0cmlidXRlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicpO1xuXG4gICAgICBpZiAoZGF0YUVtb3Rpb25BdHRyaWJ1dGUuaW5kZXhPZignICcpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIHN0eWxpc1BsdWdpbnMgPSBvcHRpb25zLnN0eWxpc1BsdWdpbnMgfHwgZGVmYXVsdFN0eWxpc1BsdWdpbnM7XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIC8qIDogTm9kZSAqL1xuXG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlXG4gICAgLyo6IEhUTUxTdHlsZUVsZW1lbnQgKi9cbiAgICApIHtcbiAgICAgIHZhciBhdHRyaWIgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvblwiKS5zcGxpdCgnICcpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuICAvKjogKFxuICBzZWxlY3Rvcjogc3RyaW5nLFxuICBzZXJpYWxpemVkOiBTZXJpYWxpemVkU3R5bGVzLFxuICBzaGVldDogU3R5bGVTaGVldCxcbiAgc2hvdWxkQ2FjaGU6IGJvb2xlYW5cbiAgKSA9PiBzdHJpbmcgfCB2b2lkICovXG5cblxuICB2YXIgb21uaXByZXNlbnRQbHVnaW5zID0gW2NvbXBhdCwgcmVtb3ZlTGFiZWxdO1xuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHJ1bGVzaGVldChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgY3VycmVudFNoZWV0Lmluc2VydChydWxlKTtcbiAgICB9KV07XG4gICAgdmFyIHNlcmlhbGl6ZXIgPSBtaWRkbGV3YXJlKG9tbmlwcmVzZW50UGx1Z2lucy5jb25jYXQoc3R5bGlzUGx1Z2lucywgZmluYWxpemluZ1BsdWdpbnMpKTtcblxuICAgIHZhciBzdHlsaXMgPSBmdW5jdGlvbiBzdHlsaXMoc3R5bGVzKSB7XG4gICAgICByZXR1cm4gc2VyaWFsaXplKGNvbXBpbGUoc3R5bGVzKSwgc2VyaWFsaXplcik7XG4gICAgfTtcblxuICAgIF9pbnNlcnQgPSBmdW5jdGlvblxuICAgICAgLyo6IHZvaWQgKi9cbiAgICBpbnNlcnQoc2VsZWN0b3JcbiAgICAvKjogc3RyaW5nICovXG4gICAgLCBzZXJpYWxpemVkXG4gICAgLyo6IFNlcmlhbGl6ZWRTdHlsZXMgKi9cbiAgICAsIHNoZWV0XG4gICAgLyo6IFN0eWxlU2hlZXQgKi9cbiAgICAsIHNob3VsZENhY2hlXG4gICAgLyo6IGJvb2xlYW4gKi9cbiAgICApIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBzdHlsaXMoc2VsZWN0b3IgPyBzZWxlY3RvciArIFwie1wiICsgc2VyaWFsaXplZC5zdHlsZXMgKyBcIn1cIiA6IHNlcmlhbGl6ZWQuc3R5bGVzKTtcblxuICAgICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB2YXIgY2FjaGVcbiAgLyo6IEVtb3Rpb25DYWNoZSAqL1xuICA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwgImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikge1xuICAgIGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgdCA9IGFyZ3VtZW50c1tlXTtcbiAgICAgIGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZXhwb3J0IHsgX2V4dGVuZHMgYXMgZGVmYXVsdCB9OyIsICJ2YXIgaXNCcm93c2VyID0gdHJ1ZTtcblxuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWVzKSB7XG4gIHZhciByYXdDbGFzc05hbWUgPSAnJztcbiAgY2xhc3NOYW1lcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgIGlmIChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVnaXN0ZXJlZFN0eWxlcy5wdXNoKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSArIFwiO1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmF3Q2xhc3NOYW1lICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByYXdDbGFzc05hbWU7XG59XG52YXIgcmVnaXN0ZXJTdHlsZXMgPSBmdW5jdGlvbiByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmICggLy8gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSByZWdpc3RlcmVkIGNhY2hlIGlmIHRoZVxuICAvLyBjbGFzcyBuYW1lIGNvdWxkIGJlIHVzZWQgZnVydGhlciBkb3duXG4gIC8vIHRoZSB0cmVlIGJ1dCBpZiBpdCdzIGEgc3RyaW5nIHRhZywgd2Uga25vdyBpdCB3b24ndFxuICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGFkZCBpdCB0byByZWdpc3RlcmVkIGNhY2hlLlxuICAvLyB0aGlzIGltcHJvdmVzIG1lbW9yeSB1c2FnZSBzaW5jZSB3ZSBjYW4gYXZvaWQgc3RvcmluZyB0aGUgd2hvbGUgc3R5bGUgc3RyaW5nXG4gIChpc1N0cmluZ1RhZyA9PT0gZmFsc2UgfHwgLy8gd2UgbmVlZCB0byBhbHdheXMgc3RvcmUgaXQgaWYgd2UncmUgaW4gY29tcGF0IG1vZGUgYW5kXG4gIC8vIGluIG5vZGUgc2luY2UgZW1vdGlvbi1zZXJ2ZXIgcmVsaWVzIG9uIHdoZXRoZXIgYSBzdHlsZSBpcyBpblxuICAvLyB0aGUgcmVnaXN0ZXJlZCBjYWNoZSB0byBrbm93IHdoZXRoZXIgYSBzdHlsZSBpcyBnbG9iYWwgb3Igbm90XG4gIC8vIGFsc28sIG5vdGUgdGhhdCB0aGlzIGNoZWNrIHdpbGwgYmUgZGVhZCBjb2RlIGVsaW1pbmF0ZWQgaW4gdGhlIGJyb3dzZXJcbiAgaXNCcm93c2VyID09PSBmYWxzZSApICYmIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gIH1cbn07XG52YXIgaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VyaWFsaXplZDtcblxuICAgIGRvIHtcbiAgICAgIGNhY2hlLmluc2VydChzZXJpYWxpemVkID09PSBjdXJyZW50ID8gXCIuXCIgKyBjbGFzc05hbWUgOiAnJywgY3VycmVudCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMgfTtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWFwcGxlYnkvc21oYXNoZXIvYmxvYi82MWEwNTMwZjI4Mjc3ZjJlODUwYmZjMzk2MDBjZTYxZDAyYjUxOGRlL3NyYy9NdXJtdXJIYXNoMi5jcHAjTDM3LUw4NlxuZnVuY3Rpb24gbXVybXVyMihzdHIpIHtcbiAgLy8gJ20nIGFuZCAncicgYXJlIG1peGluZyBjb25zdGFudHMgZ2VuZXJhdGVkIG9mZmxpbmUuXG4gIC8vIFRoZXkncmUgbm90IHJlYWxseSAnbWFnaWMnLCB0aGV5IGp1c3QgaGFwcGVuIHRvIHdvcmsgd2VsbC5cbiAgLy8gY29uc3QgbSA9IDB4NWJkMWU5OTU7XG4gIC8vIGNvbnN0IHIgPSAyNDtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaFxuICB2YXIgaCA9IDA7IC8vIE1peCA0IGJ5dGVzIGF0IGEgdGltZSBpbnRvIHRoZSBoYXNoXG5cbiAgdmFyIGssXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgZm9yICg7IGxlbiA+PSA0OyArK2ksIGxlbiAtPSA0KSB7XG4gICAgayA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0O1xuICAgIGsgPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICAgIGsgXj1cbiAgICAvKiBrID4+PiByOiAqL1xuICAgIGsgPj4+IDI0O1xuICAgIGggPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpIF5cbiAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBIYW5kbGUgdGhlIGxhc3QgZmV3IGJ5dGVzIG9mIHRoZSBpbnB1dCBhcnJheVxuXG5cbiAgc3dpdGNoIChsZW4pIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblxuICAgIGNhc2UgMjpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cbiAgICBjYXNlIDE6XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIGggPVxuICAgICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBEbyBhIGZldyBmaW5hbCBtaXhlcyBvZiB0aGUgaGFzaCB0byBlbnN1cmUgdGhlIGxhc3QgZmV3XG4gIC8vIGJ5dGVzIGFyZSB3ZWxsLWluY29ycG9yYXRlZC5cblxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPVxuICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIHJldHVybiAoKGggXiBoID4+PiAxNSkgPj4+IDApLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IHsgbXVybXVyMiBhcyBkZWZhdWx0IH07XG4iLCAidmFyIHVuaXRsZXNzS2V5cyA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IDEsXG4gIGFzcGVjdFJhdGlvOiAxLFxuICBib3JkZXJJbWFnZU91dHNldDogMSxcbiAgYm9yZGVySW1hZ2VTbGljZTogMSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMSxcbiAgYm94RmxleDogMSxcbiAgYm94RmxleEdyb3VwOiAxLFxuICBib3hPcmRpbmFsR3JvdXA6IDEsXG4gIGNvbHVtbkNvdW50OiAxLFxuICBjb2x1bW5zOiAxLFxuICBmbGV4OiAxLFxuICBmbGV4R3JvdzogMSxcbiAgZmxleFBvc2l0aXZlOiAxLFxuICBmbGV4U2hyaW5rOiAxLFxuICBmbGV4TmVnYXRpdmU6IDEsXG4gIGZsZXhPcmRlcjogMSxcbiAgZ3JpZFJvdzogMSxcbiAgZ3JpZFJvd0VuZDogMSxcbiAgZ3JpZFJvd1NwYW46IDEsXG4gIGdyaWRSb3dTdGFydDogMSxcbiAgZ3JpZENvbHVtbjogMSxcbiAgZ3JpZENvbHVtbkVuZDogMSxcbiAgZ3JpZENvbHVtblNwYW46IDEsXG4gIGdyaWRDb2x1bW5TdGFydDogMSxcbiAgbXNHcmlkUm93OiAxLFxuICBtc0dyaWRSb3dTcGFuOiAxLFxuICBtc0dyaWRDb2x1bW46IDEsXG4gIG1zR3JpZENvbHVtblNwYW46IDEsXG4gIGZvbnRXZWlnaHQ6IDEsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG9wYWNpdHk6IDEsXG4gIG9yZGVyOiAxLFxuICBvcnBoYW5zOiAxLFxuICBzY2FsZTogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlzRGV2ZWxvcG1lbnQgPSBmYWxzZTtcblxudmFyIGh5cGhlbmF0ZVJlZ2V4ID0gL1tBLVpdfF5tcy9nO1xudmFyIGFuaW1hdGlvblJlZ2V4ID0gL19FTU9fKFteX10rPylfKFteXSo/KV9FTU9fL2c7XG5cbnZhciBpc0N1c3RvbVByb3BlcnR5ID0gZnVuY3Rpb24gaXNDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICByZXR1cm4gcHJvcGVydHkuY2hhckNvZGVBdCgxKSA9PT0gNDU7XG59O1xuXG52YXIgaXNQcm9jZXNzYWJsZVZhbHVlID0gZnVuY3Rpb24gaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nO1xufTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSAvKiAjX19QVVJFX18gKi9tZW1vaXplKGZ1bmN0aW9uIChzdHlsZU5hbWUpIHtcbiAgcmV0dXJuIGlzQ3VzdG9tUHJvcGVydHkoc3R5bGVOYW1lKSA/IHN0eWxlTmFtZSA6IHN0eWxlTmFtZS5yZXBsYWNlKGh5cGhlbmF0ZVJlZ2V4LCAnLSQmJykudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG52YXIgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgbmFtZTogcDEsXG4gICAgICAgICAgICAgIHN0eWxlczogcDIsXG4gICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgaWYgKHVuaXRsZXNzW2tleV0gIT09IDEgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JztcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSA9ICdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCAnICsgJ0BlbW90aW9uL2JhYmVsLXBsdWdpbiwgdGhlIHN3YyBFbW90aW9uIHBsdWdpbiwgb3IgYW5vdGhlciBFbW90aW9uLWF3YXJlICcgKyAnY29tcGlsZXIgdHJhbnNmb3JtLic7XG5cbmZ1bmN0aW9uIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pIHtcbiAgaWYgKGludGVycG9sYXRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHZhciBjb21wb25lbnRTZWxlY3RvciA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKGNvbXBvbmVudFNlbGVjdG9yLl9fZW1vdGlvbl9zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudFNlbGVjdG9yO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICB2YXIga2V5ZnJhbWVzID0gaW50ZXJwb2xhdGlvbjtcblxuICAgICAgICBpZiAoa2V5ZnJhbWVzLmFuaW0gPT09IDEpIHtcbiAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICBuYW1lOiBrZXlmcmFtZXMubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczoga2V5ZnJhbWVzLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGtleWZyYW1lcy5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlcmlhbGl6ZWRTdHlsZXMgPSBpbnRlcnBvbGF0aW9uO1xuXG4gICAgICAgIGlmIChzZXJpYWxpemVkU3R5bGVzLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBzZXJpYWxpemVkU3R5bGVzLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gc2VyaWFsaXplZFN0eWxlcy5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIGlmIChtZXJnZWRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzKTtcbiAgICAgICAgICBjdXJzb3IgPSBwcmV2aW91c0N1cnNvcjtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIHZhciBhc1N0cmluZyA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKHJlZ2lzdGVyZWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBhc1N0cmluZztcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2FzU3RyaW5nXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogYXNTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9iaikge1xuICB2YXIgc3RyaW5nID0gJyc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHJpbmcgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqW2ldKSArIFwiO1wiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGFzU3RyaW5nID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW2FzU3RyaW5nXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgcmVnaXN0ZXJlZFthc1N0cmluZ10gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUoYXNTdHJpbmcpKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCBhc1N0cmluZykgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZVtfaV0pKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO1xcbntdKylcXHMqKDt8JCkvZztcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbmZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCByZWdpc3RlcmVkLCBtZXJnZWRQcm9wcykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXS5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIHN0cmluZ01vZGUgPSB0cnVlO1xuICB2YXIgc3R5bGVzID0gJyc7XG4gIGN1cnNvciA9IHVuZGVmaW5lZDtcbiAgdmFyIHN0cmluZ3MgPSBhcmdzWzBdO1xuXG4gIGlmIChzdHJpbmdzID09IG51bGwgfHwgc3RyaW5ncy5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgc3RyaW5ncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGFzVGVtcGxhdGVTdHJpbmdzQXJyID0gc3RyaW5ncztcblxuICAgIHN0eWxlcyArPSBhc1RlbXBsYXRlU3RyaW5nc0FyclswXTtcbiAgfSAvLyB3ZSBzdGFydCBhdCAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZmlyc3QgYXJnXG5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgYXJnc1tpXSk7XG5cbiAgICBpZiAoc3RyaW5nTW9kZSkge1xuICAgICAgdmFyIHRlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICAgIHN0eWxlcyArPSB0ZW1wbGF0ZVN0cmluZ3NBcnJbaV07XG4gICAgfVxuICB9XG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufVxuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbnZhciBzeW5jRmFsbGJhY2sgPSBmdW5jdGlvbiBzeW5jRmFsbGJhY2soY3JlYXRlKSB7XG4gIHJldHVybiBjcmVhdGUoKTtcbn07XG5cbnZhciB1c2VJbnNlcnRpb25FZmZlY3QgPSBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA/IFJlYWN0Wyd1c2VJbnNlcnRpb24nICsgJ0VmZmVjdCddIDogZmFsc2U7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBzeW5jRmFsbGJhY2s7XG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrID0gdXNlSW5zZXJ0aW9uRWZmZWN0IHx8IFJlYWN0LnVzZUxheW91dEVmZmVjdDtcblxuZXhwb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjaywgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrIH07XG4iLCAiaW1wb3J0IHsgaCBhcyBoYXNPd24sIEUgYXMgRW1vdGlvbiwgYyBhcyBjcmVhdGVFbW90aW9uUHJvcHMsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgVCBhcyBUaGVtZUNvbnRleHQsIGkgYXMgaXNEZXZlbG9wbWVudCB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTU0ODZjNTFjLmJyb3dzZXIuZXNtLmpzJztcbmV4cG9ydCB7IEMgYXMgQ2FjaGVQcm92aWRlciwgVCBhcyBUaGVtZUNvbnRleHQsIGEgYXMgVGhlbWVQcm92aWRlciwgXyBhcyBfX3Vuc2FmZV91c2VFbW90aW9uQ2FjaGUsIHUgYXMgdXNlVGhlbWUsIHcgYXMgd2l0aEVtb3Rpb25DYWNoZSwgYiBhcyB3aXRoVGhlbWUgfSBmcm9tICcuL2Vtb3Rpb24tZWxlbWVudC01NDg2YzUxYy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBnZXRSZWdpc3RlcmVkU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vdXRpbHMnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrLCB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICcuLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5cbnZhciBqc3hcbi8qOiB0eXBlb2YgUmVhY3QuY3JlYXRlRWxlbWVudCAqL1xuPSBmdW5jdGlvbiBqc3hcbi8qOiB0eXBlb2YgUmVhY3QuY3JlYXRlRWxlbWVudCAqL1xuKHR5cGVcbi8qOiBSZWFjdC5FbGVtZW50VHlwZSAqL1xuLCBwcm9wc1xuLyo6IE9iamVjdCAqL1xuKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuXG4gIGlmIChwcm9wcyA9PSBudWxsIHx8ICFoYXNPd24uY2FsbChwcm9wcywgJ2NzcycpKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkobnVsbCwgY3JlYXRlRWxlbWVudEFyZ0FycmF5KTtcbn07XG5cbi8vIGluaXRpYWwgcmVuZGVyIGZyb20gYnJvd3NlciwgaW5zZXJ0QmVmb3JlIGNvbnRleHQuc2hlZXQudGFnc1swXSBvciBpZiBhIHN0eWxlIGhhc24ndCBiZWVuIGluc2VydGVkIHRoZXJlIHlldCwgYXBwZW5kQ2hpbGRcbi8vIGluaXRpYWwgY2xpZW50LXNpZGUgcmVuZGVyIGZyb20gU1NSLCB1c2UgcGxhY2Ugb2YgaHlkcmF0aW5nIHRhZ1xuXG52YXIgR2xvYmFsXG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8XG5HbG9iYWxQcm9wc1xuPiAqL1xuPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wc1xuLyo6IEdsb2JhbFByb3BzICovXG4sIGNhY2hlKSB7XG5cbiAgdmFyIHN0eWxlcyA9IHByb3BzLnN0eWxlcztcbiAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoW3N0eWxlc10sIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcbiAgLy8gYnV0IGl0IGlzIGJhc2VkIG9uIGEgY29uc3RhbnQgdGhhdCB3aWxsIG5ldmVyIGNoYW5nZSBhdCBydW50aW1lXG4gIC8vIGl0J3MgZWZmZWN0aXZlbHkgbGlrZSBoYXZpbmcgdHdvIGltcGxlbWVudGF0aW9ucyBhbmQgc3dpdGNoaW5nIHRoZW0gb3V0XG4gIC8vIHNvIGl0J3Mgbm90IGFjdHVhbGx5IGJyZWFraW5nIGFueXRoaW5nXG5cblxuICB2YXIgc2hlZXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIga2V5ID0gY2FjaGUua2V5ICsgXCItZ2xvYmFsXCI7IC8vIHVzZSBjYXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW90aW9uLWpzL2Vtb3Rpb24vaXNzdWVzLzI2NzVcblxuICAgIHZhciBzaGVldCA9IG5ldyBjYWNoZS5zaGVldC5jb25zdHJ1Y3Rvcih7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIG5vbmNlOiBjYWNoZS5zaGVldC5ub25jZSxcbiAgICAgIGNvbnRhaW5lcjogY2FjaGUuc2hlZXQuY29udGFpbmVyLFxuICAgICAgc3BlZWR5OiBjYWNoZS5zaGVldC5pc1NwZWVkeVxuICAgIH0pO1xuICAgIHZhciByZWh5ZHJhdGluZyA9IGZhbHNlO1xuICAgIHZhciBub2RlXG4gICAgLyo6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsKi9cbiAgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLWVtb3Rpb249XFxcIlwiICsga2V5ICsgXCIgXCIgKyBzZXJpYWxpemVkLm5hbWUgKyBcIlxcXCJdXCIpO1xuXG4gICAgaWYgKGNhY2hlLnNoZWV0LnRhZ3MubGVuZ3RoKSB7XG4gICAgICBzaGVldC5iZWZvcmUgPSBjYWNoZS5zaGVldC50YWdzWzBdO1xuICAgIH1cblxuICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICByZWh5ZHJhdGluZyA9IHRydWU7IC8vIGNsZWFyIHRoZSBoYXNoIHNvIHRoaXMgbm9kZSB3b24ndCBiZSByZWNvZ25pemFibGUgYXMgcmVoeWRyYXRhYmxlIGJ5IG90aGVyIDxHbG9iYWwvPnNcblxuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIGtleSk7XG4gICAgICBzaGVldC5oeWRyYXRlKFtub2RlXSk7XG4gICAgfVxuXG4gICAgc2hlZXRSZWYuY3VycmVudCA9IFtzaGVldCwgcmVoeWRyYXRpbmddO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH07XG4gIH0sIFtjYWNoZV0pO1xuICB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaGVldFJlZkN1cnJlbnQgPSBzaGVldFJlZi5jdXJyZW50O1xuICAgIHZhciBzaGVldCA9IHNoZWV0UmVmQ3VycmVudFswXSxcbiAgICAgICAgcmVoeWRyYXRpbmcgPSBzaGVldFJlZkN1cnJlbnRbMV07XG5cbiAgICBpZiAocmVoeWRyYXRpbmcpIHtcbiAgICAgIHNoZWV0UmVmQ3VycmVudFsxXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXJpYWxpemVkLm5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gaW5zZXJ0IGtleWZyYW1lc1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLm5leHQsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChzaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgLy8gaWYgdGhpcyBkb2Vzbid0IGV4aXN0IHRoZW4gaXQgd2lsbCBiZSBudWxsIHNvIHRoZSBzdHlsZSBlbGVtZW50IHdpbGwgYmUgYXBwZW5kZWRcbiAgICAgIHZhciBlbGVtZW50ID0gc2hlZXQudGFnc1tzaGVldC50YWdzLmxlbmd0aCAtIDFdLm5leHRFbGVtZW50U2libGluZztcbiAgICAgIHNoZWV0LmJlZm9yZSA9IGVsZW1lbnQ7XG4gICAgICBzaGVldC5mbHVzaCgpO1xuICAgIH1cblxuICAgIGNhY2hlLmluc2VydChcIlwiLCBzZXJpYWxpemVkLCBzaGVldCwgZmFsc2UpO1xuICB9LCBbY2FjaGUsIHNlcmlhbGl6ZWQubmFtZV0pO1xuICByZXR1cm4gbnVsbDtcbn0pO1xuXG4vKiBpbXBvcnQgdHlwZSB7IEludGVycG9sYXRpb24sIFNlcmlhbGl6ZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscycgKi9cblxuZnVuY3Rpb24gY3NzKClcbi8qOiBTZXJpYWxpemVkU3R5bGVzICovXG57XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG4vKlxudHlwZSBLZXlmcmFtZXMgPSB7fFxuICBuYW1lOiBzdHJpbmcsXG4gIHN0eWxlczogc3RyaW5nLFxuICBhbmltOiAxLFxuICB0b1N0cmluZzogKCkgPT4gc3RyaW5nXG58fSAmIHN0cmluZ1xuKi9cblxudmFyIGtleWZyYW1lcyA9IGZ1bmN0aW9uXG4gIC8qOiBLZXlmcmFtZXMgKi9cbmtleWZyYW1lcygpIHtcbiAgdmFyIGluc2VydGFibGUgPSBjc3MuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB2YXIgbmFtZSA9IFwiYW5pbWF0aW9uLVwiICsgaW5zZXJ0YWJsZS5uYW1lO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxuLypcbnR5cGUgQ2xhc3NOYW1lQXJnID1cbiAgfCBzdHJpbmdcbiAgfCBib29sZWFuXG4gIHwgeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH1cbiAgfCBBcnJheTxDbGFzc05hbWVBcmc+XG4gIHwgbnVsbFxuICB8IHZvaWRcbiovXG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb25cbiAgLyo6IHN0cmluZyAqL1xuY2xhc3NuYW1lcyhhcmdzXG4vKjogQXJyYXk8Q2xhc3NOYW1lQXJnPiAqL1xuKSB7XG4gIHZhciBsZW4gPSBhcmdzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgPT0gbnVsbCkgY29udGludWU7XG4gICAgdmFyIHRvQWRkID0gdm9pZCAwO1xuXG4gICAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgICAgICB0b0FkZCA9IGNsYXNzbmFtZXMoYXJnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkXG4vKjogT2JqZWN0ICovXG4sIGNzc1xuLyo6ICguLi5hcmdzOiBBcnJheTxhbnk+KSA9PiBzdHJpbmcgKi9cbiwgY2xhc3NOYW1lXG4vKjogc3RyaW5nICovXG4pIHtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lKTtcblxuICBpZiAocmVnaXN0ZXJlZFN0eWxlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIHJldHVybiByYXdDbGFzc05hbWUgKyBjc3MocmVnaXN0ZXJlZFN0eWxlcyk7XG59XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZEFyciA9IF9yZWYuc2VyaWFsaXplZEFycjtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcmlhbGl6ZWRBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZEFycltpXSwgZmFsc2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuLypcbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiAoe1xuICAgIGNzczogKC4uLmFyZ3M6IGFueSkgPT4gc3RyaW5nLFxuICAgIGN4OiAoLi4uYXJnczogQXJyYXk8Q2xhc3NOYW1lQXJnPikgPT4gc3RyaW5nLFxuICAgIHRoZW1lOiBPYmplY3RcbiAgfSkgPT4gUmVhY3QuTm9kZVxufSAqL1xuXG5cbnZhciBDbGFzc05hbWVzXG4vKjogUmVhY3QuQWJzdHJhY3RDb21wb25lbnQ8UHJvcHM+Ki9cbj0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIGlzRGV2ZWxvcG1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5leHBvcnQgeyBDbGFzc05hbWVzLCBHbG9iYWwsIGpzeCBhcyBjcmVhdGVFbGVtZW50LCBjc3MsIGpzeCwga2V5ZnJhbWVzIH07XG4iLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuLyoqXG4gKiBSZWFjdC5jbG9uZUVsZW1lbnQgZG9lcyBub3Qgd29yayBpZiB0aGUgY2xvbmVkIGVsZW1lbnQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIHRoZVxuICogYGNzc2AgcHJvcCAtIGFzIGEgcmVzdWx0LCB3ZSBuZWVkIHRvIHVzZSBganN4KClgIHRvIG1hbnVhbGx5IGNsb25lIHRoZSBlbGVtZW50XG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9pc3N1ZXMvMTQwNFxuICpcbiAqIE5PVEU6IFdlJ3JlIHN0aWxsIHVzaW5nL3Rlc3RpbmcgdGhpcyB1dGlsaXR5IGludGVybmFsbHksIHNvIHRoaXMgaXMgbm90IHlldCBhIHB1YmxpYyBBUElcbiAqL1xuXG5leHBvcnQgdmFyIGNsb25lRWxlbWVudFdpdGhDc3MgPSBmdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBjbG9uZWRFbGVtZW50ID0gZWxlbWVudC5wcm9wcy5fX0VNT1RJT05fVFlQRV9QTEVBU0VfRE9fTk9UX1VTRV9fIHx8IGVsZW1lbnQudHlwZTsgLy8gRU1PVElPTl9UWVBFIGhhbmRsZXMgbm9uLVJlYWN0IGVsZW1lbnRzIChuYXRpdmUgSlNYL0hUTUwgbm9kZXMpXG5cbiAgdmFyIGNsb25lZFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICBrZXk6IGVsZW1lbnQua2V5LFxuICAgIHJlZjogZWxlbWVudC5yZWZcbiAgfSwgZWxlbWVudC5wcm9wcyksIHByb3BzKTtcblxuICBpZiAocHJvcHMuY3NzIHx8IGVsZW1lbnQucHJvcHMuY3NzKSB7XG4gICAgY2xvbmVkUHJvcHMuY3NzID0gW2VsZW1lbnQucHJvcHMuY3NzLCBwcm9wcy5jc3NdO1xuICB9XG5cbiAgcmV0dXJuIGpzeChjbG9uZWRFbGVtZW50LCBjbG9uZWRQcm9wcyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuLypcbiAqIE1peGluIHRoYXQgaGlkZXMgZWxlbWVudHMgb2Zmc2NyZWVuIHRvIG9ubHkgYmUgcmVhZCBieSBzY3JlZW4gcmVhZGVyXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNTEzMCBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvNTE1MiBmb3IgbW9yZSBpbmZvXG4gKi9cblxuZXhwb3J0IHZhciBldWlTY3JlZW5SZWFkZXJPbmx5ID0gZnVuY3Rpb24gZXVpU2NyZWVuUmVhZGVyT25seSgpIHtcbiAgcmV0dXJuIFwiXFxuICAvLyBUYWtlIHRoZSBlbGVtZW50IG91dCBvZiB0aGUgbGF5b3V0XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAvLyBLZWVwIGl0IHZlcnRpY2FsbHkgaW5saW5lXFxuICB0b3A6IGF1dG87XFxuICAvLyBDaHJvbWUgcmVxdWlyZXMgYSBsZWZ0IHZhbHVlLCBhbmQgU2VsZW5pdW0gKHVzZWQgYnkgS2liYW5hJ3MgRlRSKSByZXF1aXJlcyBhbiBvZmYtc2NyZWVuIHBvc2l0aW9uIGZvciBpdHMgLmdldFZpc2libGVUZXh0KCkgdG8gbm90IHJlZ2lzdGVyIFNSLW9ubHkgdGV4dFxcbiAgbGVmdDogLTEwMDAwcHg7XFxuICAvLyBUaGUgZWxlbWVudCBtdXN0IGhhdmUgYSBzaXplIChmb3Igc29tZSBzY3JlZW4gcmVhZGVycylcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIC8vIEJ1dCByZWR1Y2UgdGhlIHZpc2libGUgc2l6ZSB0byBub3RoaW5nXFxuICBjbGlwOiByZWN0KDAgMCAwIDApO1xcbiAgY2xpcC1wYXRoOiBpbnNldCg1MCUpO1xcbiAgLy8gQW5kIGVuc3VyZSBubyBvdmVyZmxvd3Mgb2NjdXJcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICAvLyBDaHJvbWUgcmVxdWlyZXMgdGhlIG5lZ2F0aXZlIG1hcmdpbiB0byBub3QgY2F1c2Ugb3ZlcmZsb3dzIG9mIHBhcmVudCBjb250YWluZXJzXFxuICBtYXJnaW46IC0xcHg7XFxuXCI7XG59O1xuLypcbiAqIFN0eWxlc1xuICovXG5cbmV4cG9ydCB2YXIgZXVpU2NyZWVuUmVhZGVyT25seVN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNjcmVlblJlYWRlck9ubHlTdHlsZXMoc2hvd09uRm9jdXMpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlTY3JlZW5SZWFkZXJPbmx5OiBzaG93T25Gb2N1cyA/IC8qI19fUFVSRV9fKi9jc3MoXCImOm5vdCg6Zm9jdXMpOm5vdCg6YWN0aXZlKXtcIiwgZXVpU2NyZWVuUmVhZGVyT25seSgpLCBcIjt9O2xhYmVsOmV1aVNjcmVlblJlYWRlck9ubHk7XCIpIDogLyojX19QVVJFX18qL2NzcyhldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO2xhYmVsOmV1aVNjcmVlblJlYWRlck9ubHk7XCIpXG4gIH07XG59OyIsICJjb25zdCBjYW5kaWRhdGVTZWxlY3RvcnMgPSBbXG4gICdpbnB1dCcsXG4gICdzZWxlY3QnLFxuICAndGV4dGFyZWEnLFxuICAnYVtocmVmXScsXG4gICdidXR0b24nLFxuICAnW3RhYmluZGV4XTpub3Qoc2xvdCknLFxuICAnYXVkaW9bY29udHJvbHNdJyxcbiAgJ3ZpZGVvW2NvbnRyb2xzXScsXG4gICdbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKScsXG4gICdkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZScsXG4gICdkZXRhaWxzJyxcbl07XG5jb25zdCBjYW5kaWRhdGVTZWxlY3RvciA9IC8qICNfX1BVUkVfXyAqLyBjYW5kaWRhdGVTZWxlY3RvcnMuam9pbignLCcpO1xuXG5jb25zdCBOb0VsZW1lbnQgPSB0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IG1hdGNoZXMgPSBOb0VsZW1lbnRcbiAgPyBmdW5jdGlvbiAoKSB7fVxuICA6IEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgfHxcbiAgICBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fFxuICAgIEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtcblxuY29uc3QgZ2V0Um9vdE5vZGUgPVxuICAhTm9FbGVtZW50ICYmIEVsZW1lbnQucHJvdG90eXBlLmdldFJvb3ROb2RlXG4gICAgPyAoZWxlbWVudCkgPT4gZWxlbWVudC5nZXRSb290Tm9kZSgpXG4gICAgOiAoZWxlbWVudCkgPT4gZWxlbWVudC5vd25lckRvY3VtZW50O1xuXG4vKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWwgY29udGFpbmVyIHRvIGNoZWNrIGluXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVDb250YWluZXIgYWRkIGNvbnRhaW5lciB0byBjaGVja1xuICogQHBhcmFtIHsobm9kZTogRWxlbWVudCkgPT4gYm9vbGVhbn0gZmlsdGVyIGZpbHRlciBjYW5kaWRhdGVzXG4gKiBAcmV0dXJucyB7RWxlbWVudFtdfVxuICovXG5jb25zdCBnZXRDYW5kaWRhdGVzID0gZnVuY3Rpb24gKGVsLCBpbmNsdWRlQ29udGFpbmVyLCBmaWx0ZXIpIHtcbiAgbGV0IGNhbmRpZGF0ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoXG4gICAgZWwucXVlcnlTZWxlY3RvckFsbChjYW5kaWRhdGVTZWxlY3RvcilcbiAgKTtcbiAgaWYgKGluY2x1ZGVDb250YWluZXIgJiYgbWF0Y2hlcy5jYWxsKGVsLCBjYW5kaWRhdGVTZWxlY3RvcikpIHtcbiAgICBjYW5kaWRhdGVzLnVuc2hpZnQoZWwpO1xuICB9XG4gIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLmZpbHRlcihmaWx0ZXIpO1xuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbi8qKlxuICogQGNhbGxiYWNrIEdldFNoYWRvd1Jvb3RcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCB0byBjaGVjayBmb3Igc2hhZG93IHJvb3RcbiAqIEByZXR1cm5zIHtTaGFkb3dSb290fGJvb2xlYW59IFNoYWRvd1Jvb3QgaWYgYXZhaWxhYmxlIG9yIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBhIHNoYWRvd1Jvb3QgaXMgYXR0YWNoZWQgYnV0IG5vdCBhdmFpbGFibGUuXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgU2hhZG93Um9vdEZpbHRlclxuICogQHBhcmFtIHtFbGVtZW50fSBzaGFkb3dIb3N0Tm9kZSB0aGUgZWxlbWVudCB3aGljaCBjb250YWlucyBzaGFkb3cgY29udGVudFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgYSBzaGFkb3cgcm9vdCBjb3VsZCBwb3RlbnRpYWxseSBjb250YWluIHZhbGlkIGNhbmRpZGF0ZXMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYW5kaWRhdGVzU2NvcGVcbiAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gc2NvcGUgY29udGFpbnMgaW5uZXIgY2FuZGlkYXRlc1xuICogQHByb3BlcnR5IHtFbGVtZW50W119IGNhbmRpZGF0ZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEl0ZXJhdGl2ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7R2V0U2hhZG93Um9vdHxib29sZWFufSBnZXRTaGFkb3dSb290IHRydWUgaWYgc2hhZG93IHN1cHBvcnQgaXMgZW5hYmxlZDsgZmFsc3kgaWYgbm90O1xuICogIGlmIGEgZnVuY3Rpb24sIGltcGxpZXMgc2hhZG93IHN1cHBvcnQgaXMgZW5hYmxlZCBhbmQgZWl0aGVyIHJldHVybnMgdGhlIHNoYWRvdyByb290IG9mIGFuIGVsZW1lbnRcbiAqICBvciBhIGJvb2xlYW4gc3RhdGluZyBpZiBpdCBoYXMgYW4gdW5kaXNjbG9zZWQgc2hhZG93IHJvb3RcbiAqIEBwcm9wZXJ0eSB7KG5vZGU6IEVsZW1lbnQpID0+IGJvb2xlYW59IGZpbHRlciBmaWx0ZXIgY2FuZGlkYXRlc1xuICogQHByb3BlcnR5IHtib29sZWFufSBmbGF0dGVuIGlmIHRydWUgdGhlbiByZXN1bHQgd2lsbCBmbGF0dGVuIGFueSBDYW5kaWRhdGVzU2NvcGUgaW50byB0aGUgcmV0dXJuZWQgbGlzdFxuICogQHByb3BlcnR5IHtTaGFkb3dSb290RmlsdGVyfSBzaGFkb3dSb290RmlsdGVyIGZpbHRlciBzaGFkb3cgcm9vdHM7XG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnRbXX0gZWxlbWVudHMgbGlzdCBvZiBlbGVtZW50IGNvbnRhaW5lcnMgdG8gbWF0Y2ggY2FuZGlkYXRlcyBmcm9tXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVDb250YWluZXIgYWRkIGNvbnRhaW5lciBsaXN0IHRvIGNoZWNrXG4gKiBAcGFyYW0ge0l0ZXJhdGl2ZU9wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtBcnJheS48RWxlbWVudHxDYW5kaWRhdGVzU2NvcGU+fVxuICovXG5jb25zdCBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkgPSBmdW5jdGlvbiAoXG4gIGVsZW1lbnRzLFxuICBpbmNsdWRlQ29udGFpbmVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtdO1xuICBjb25zdCBlbGVtZW50c1RvQ2hlY2sgPSBBcnJheS5mcm9tKGVsZW1lbnRzKTtcbiAgd2hpbGUgKGVsZW1lbnRzVG9DaGVjay5sZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNUb0NoZWNrLnNoaWZ0KCk7XG4gICAgaWYgKGVsZW1lbnQudGFnTmFtZSA9PT0gJ1NMT1QnKSB7XG4gICAgICAvLyBhZGQgc2hhZG93IGRvbSBzbG90IHNjb3BlIChzbG90IGl0c2VsZiBjYW5ub3QgYmUgZm9jdXNhYmxlKVxuICAgICAgY29uc3QgYXNzaWduZWQgPSBlbGVtZW50LmFzc2lnbmVkRWxlbWVudHMoKTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhc3NpZ25lZC5sZW5ndGggPyBhc3NpZ25lZCA6IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgICBjb25zdCBuZXN0ZWRDYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KGNvbnRlbnQsIHRydWUsIG9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMuZmxhdHRlbikge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goLi4ubmVzdGVkQ2FuZGlkYXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICAgIHNjb3BlOiBlbGVtZW50LFxuICAgICAgICAgIGNhbmRpZGF0ZXM6IG5lc3RlZENhbmRpZGF0ZXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjaGVjayBjYW5kaWRhdGUgZWxlbWVudFxuICAgICAgY29uc3QgdmFsaWRDYW5kaWRhdGUgPSBtYXRjaGVzLmNhbGwoZWxlbWVudCwgY2FuZGlkYXRlU2VsZWN0b3IpO1xuICAgICAgaWYgKFxuICAgICAgICB2YWxpZENhbmRpZGF0ZSAmJlxuICAgICAgICBvcHRpb25zLmZpbHRlcihlbGVtZW50KSAmJlxuICAgICAgICAoaW5jbHVkZUNvbnRhaW5lciB8fCAhZWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCkpXG4gICAgICApIHtcbiAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBpdGVyYXRlIG92ZXIgc2hhZG93IGNvbnRlbnQgaWYgcG9zc2libGVcbiAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPVxuICAgICAgICBlbGVtZW50LnNoYWRvd1Jvb3QgfHxcbiAgICAgICAgLy8gY2hlY2sgZm9yIGFuIHVuZGlzY2xvc2VkIHNoYWRvd1xuICAgICAgICAodHlwZW9mIG9wdGlvbnMuZ2V0U2hhZG93Um9vdCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgIG9wdGlvbnMuZ2V0U2hhZG93Um9vdChlbGVtZW50KSk7XG5cbiAgICAgIGNvbnN0IHZhbGlkU2hhZG93Um9vdCA9XG4gICAgICAgICFvcHRpb25zLnNoYWRvd1Jvb3RGaWx0ZXIgfHwgb3B0aW9ucy5zaGFkb3dSb290RmlsdGVyKGVsZW1lbnQpO1xuXG4gICAgICBpZiAoc2hhZG93Um9vdCAmJiB2YWxpZFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgLy8gYWRkIHNoYWRvdyBkb20gc2NvcGUgSUlGIGEgc2hhZG93IHJvb3Qgbm9kZSB3YXMgZ2l2ZW47IG90aGVyd2lzZSwgYW4gdW5kaXNjbG9zZWRcbiAgICAgICAgLy8gIHNoYWRvdyBleGlzdHMsIHNvIGxvb2sgYXQgbGlnaHQgZG9tIGNoaWxkcmVuIGFzIGZhbGxiYWNrIEJVVCBjcmVhdGUgYSBzY29wZSBmb3IgYW55XG4gICAgICAgIC8vICBjaGlsZCBjYW5kaWRhdGVzIGZvdW5kIGJlY2F1c2UgdGhleSdyZSBsaWtlbHkgc2xvdHRlZCBlbGVtZW50cyAoZWxlbWVudHMgdGhhdCBhcmVcbiAgICAgICAgLy8gIGNoaWxkcmVuIG9mIHRoZSB3ZWIgY29tcG9uZW50IGVsZW1lbnQgKHdoaWNoIGhhcyB0aGUgc2hhZG93KSwgaW4gdGhlIGxpZ2h0IGRvbSwgYnV0XG4gICAgICAgIC8vICBzbG90dGVkIHNvbWV3aGVyZSBfaW5zaWRlXyB0aGUgdW5kaXNjbG9zZWQgc2hhZG93KSAtLSB0aGUgc2NvcGUgaXMgY3JlYXRlZCBiZWxvdyxcbiAgICAgICAgLy8gIF9hZnRlcl8gd2UgcmV0dXJuIGZyb20gdGhpcyByZWN1cnNpdmUgY2FsbFxuICAgICAgICBjb25zdCBuZXN0ZWRDYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KFxuICAgICAgICAgIHNoYWRvd1Jvb3QgPT09IHRydWUgPyBlbGVtZW50LmNoaWxkcmVuIDogc2hhZG93Um9vdC5jaGlsZHJlbixcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5mbGF0dGVuKSB7XG4gICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKC4uLm5lc3RlZENhbmRpZGF0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgICAgICBzY29wZTogZWxlbWVudCxcbiAgICAgICAgICAgIGNhbmRpZGF0ZXM6IG5lc3RlZENhbmRpZGF0ZXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoZXJlJ3Mgbm90IHNoYWRvdyBzbyBqdXN0IGRpZyBpbnRvIHRoZSBlbGVtZW50J3MgKGxpZ2h0IGRvbSkgY2hpbGRyZW5cbiAgICAgICAgLy8gIF9fd2l0aG91dF9fIGdpdmluZyB0aGUgZWxlbWVudCBzcGVjaWFsIHNjb3BlIHRyZWF0bWVudFxuICAgICAgICBlbGVtZW50c1RvQ2hlY2sudW5zaGlmdCguLi5lbGVtZW50LmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbmRpZGF0ZXM7XG59O1xuXG5jb25zdCBnZXRUYWJpbmRleCA9IGZ1bmN0aW9uIChub2RlLCBpc1Njb3BlKSB7XG4gIGlmIChub2RlLnRhYkluZGV4IDwgMCkge1xuICAgIC8vIGluIENocm9tZSwgPGRldGFpbHMvPiwgPGF1ZGlvIGNvbnRyb2xzLz4gYW5kIDx2aWRlbyBjb250cm9scy8+IGVsZW1lbnRzIGdldCBhIGRlZmF1bHRcbiAgICAvLyBgdGFiSW5kZXhgIG9mIC0xIHdoZW4gdGhlICd0YWJpbmRleCcgYXR0cmlidXRlIGlzbid0IHNwZWNpZmllZCBpbiB0aGUgRE9NLFxuICAgIC8vIHlldCB0aGV5IGFyZSBzdGlsbCBwYXJ0IG9mIHRoZSByZWd1bGFyIHRhYiBvcmRlcjsgaW4gRkYsIHRoZXkgZ2V0IGEgZGVmYXVsdFxuICAgIC8vIGB0YWJJbmRleGAgb2YgMDsgc2luY2UgQ2hyb21lIHN0aWxsIHB1dHMgdGhvc2UgZWxlbWVudHMgaW4gdGhlIHJlZ3VsYXIgdGFiXG4gICAgLy8gb3JkZXIsIGNvbnNpZGVyIHRoZWlyIHRhYiBpbmRleCB0byBiZSAwLlxuICAgIC8vIEFsc28gYnJvd3NlcnMgZG8gbm90IHJldHVybiBgdGFiSW5kZXhgIGNvcnJlY3RseSBmb3IgY29udGVudEVkaXRhYmxlIG5vZGVzO1xuICAgIC8vIHNvIGlmIHRoZXkgZG9uJ3QgaGF2ZSBhIHRhYmluZGV4IGF0dHJpYnV0ZSBzcGVjaWZpY2FsbHkgc2V0LCBhc3N1bWUgaXQncyAwLlxuICAgIC8vXG4gICAgLy8gaXNTY29wZSBpcyBwb3NpdGl2ZSBmb3IgY3VzdG9tIGVsZW1lbnQgd2l0aCBzaGFkb3cgcm9vdCBvciBzbG90IHRoYXQgYnkgZGVmYXVsdFxuICAgIC8vIGhhdmUgdGFiSW5kZXggLTEsIGJ1dCBuZWVkIHRvIGJlIHNvcnRlZCBieSBkb2N1bWVudCBvcmRlciBpbiBvcmRlciBmb3IgdGhlaXJcbiAgICAvLyBjb250ZW50IHRvIGJlIGluc2VydGVkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uXG4gICAgaWYgKFxuICAgICAgKGlzU2NvcGUgfHxcbiAgICAgICAgL14oQVVESU98VklERU98REVUQUlMUykkLy50ZXN0KG5vZGUudGFnTmFtZSkgfHxcbiAgICAgICAgbm9kZS5pc0NvbnRlbnRFZGl0YWJsZSkgJiZcbiAgICAgIGlzTmFOKHBhcnNlSW50KG5vZGUuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpLCAxMCkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZS50YWJJbmRleDtcbn07XG5cbmNvbnN0IHNvcnRPcmRlcmVkVGFiYmFibGVzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgcmV0dXJuIGEudGFiSW5kZXggPT09IGIudGFiSW5kZXhcbiAgICA/IGEuZG9jdW1lbnRPcmRlciAtIGIuZG9jdW1lbnRPcmRlclxuICAgIDogYS50YWJJbmRleCAtIGIudGFiSW5kZXg7XG59O1xuXG5jb25zdCBpc0lucHV0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ0lOUFVUJztcbn07XG5cbmNvbnN0IGlzSGlkZGVuSW5wdXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICByZXR1cm4gaXNJbnB1dChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdoaWRkZW4nO1xufTtcblxuY29uc3QgaXNEZXRhaWxzV2l0aFN1bW1hcnkgPSBmdW5jdGlvbiAobm9kZSkge1xuICBjb25zdCByID1cbiAgICBub2RlLnRhZ05hbWUgPT09ICdERVRBSUxTJyAmJlxuICAgIEFycmF5LnByb3RvdHlwZS5zbGljZVxuICAgICAgLmFwcGx5KG5vZGUuY2hpbGRyZW4pXG4gICAgICAuc29tZSgoY2hpbGQpID0+IGNoaWxkLnRhZ05hbWUgPT09ICdTVU1NQVJZJyk7XG4gIHJldHVybiByO1xufTtcblxuY29uc3QgZ2V0Q2hlY2tlZFJhZGlvID0gZnVuY3Rpb24gKG5vZGVzLCBmb3JtKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobm9kZXNbaV0uY2hlY2tlZCAmJiBub2Rlc1tpXS5mb3JtID09PSBmb3JtKSB7XG4gICAgICByZXR1cm4gbm9kZXNbaV07XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBpc1RhYmJhYmxlUmFkaW8gPSBmdW5jdGlvbiAobm9kZSkge1xuICBpZiAoIW5vZGUubmFtZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IHJhZGlvU2NvcGUgPSBub2RlLmZvcm0gfHwgZ2V0Um9vdE5vZGUobm9kZSk7XG4gIGNvbnN0IHF1ZXJ5UmFkaW9zID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gcmFkaW9TY29wZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJyArIG5hbWUgKyAnXCJdJ1xuICAgICk7XG4gIH07XG5cbiAgbGV0IHJhZGlvU2V0O1xuICBpZiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2Ygd2luZG93LkNTUyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUgPT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmFkaW9TZXQgPSBxdWVyeVJhZGlvcyh3aW5kb3cuQ1NTLmVzY2FwZShub2RlLm5hbWUpKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgcmFkaW9TZXQgPSBxdWVyeVJhZGlvcyhub2RlLm5hbWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdMb29rcyBsaWtlIHlvdSBoYXZlIGEgcmFkaW8gYnV0dG9uIHdpdGggYSBuYW1lIGF0dHJpYnV0ZSBjb250YWluaW5nIGludmFsaWQgQ1NTIHNlbGVjdG9yIGNoYXJhY3RlcnMgYW5kIG5lZWQgdGhlIENTUy5lc2NhcGUgcG9seWZpbGw6ICVzJyxcbiAgICAgICAgZXJyLm1lc3NhZ2VcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2hlY2tlZCA9IGdldENoZWNrZWRSYWRpbyhyYWRpb1NldCwgbm9kZS5mb3JtKTtcbiAgcmV0dXJuICFjaGVja2VkIHx8IGNoZWNrZWQgPT09IG5vZGU7XG59O1xuXG5jb25zdCBpc1JhZGlvID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIGlzSW5wdXQobm9kZSkgJiYgbm9kZS50eXBlID09PSAncmFkaW8nO1xufTtcblxuY29uc3QgaXNOb25UYWJiYWJsZVJhZGlvID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgcmV0dXJuIGlzUmFkaW8obm9kZSkgJiYgIWlzVGFiYmFibGVSYWRpbyhub2RlKTtcbn07XG5cbmNvbnN0IGlzWmVyb0FyZWEgPSBmdW5jdGlvbiAobm9kZSkge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB3aWR0aCA9PT0gMCAmJiBoZWlnaHQgPT09IDA7XG59O1xuY29uc3QgaXNIaWRkZW4gPSBmdW5jdGlvbiAobm9kZSwgeyBkaXNwbGF5Q2hlY2ssIGdldFNoYWRvd1Jvb3QgfSkge1xuICAvLyBOT1RFOiB2aXNpYmlsaXR5IHdpbGwgYmUgYHVuZGVmaW5lZGAgaWYgbm9kZSBpcyBkZXRhY2hlZCBmcm9tIHRoZSBkb2N1bWVudFxuICAvLyAgKHNlZSBub3RlcyBhYm91dCB0aGlzIGZ1cnRoZXIgZG93biksIHdoaWNoIG1lYW5zIHdlIHdpbGwgY29uc2lkZXIgaXQgdmlzaWJsZVxuICAvLyAgKHRoaXMgaXMgbGVnYWN5IGJlaGF2aW9yIGZyb20gYSB2ZXJ5IGxvbmcgd2F5IGJhY2spXG4gIC8vIE5PVEU6IHdlIGNoZWNrIHRoaXMgcmVnYXJkbGVzcyBvZiBgZGlzcGxheUNoZWNrPVwibm9uZVwiYCBiZWNhdXNlIHRoaXMgaXMgYVxuICAvLyAgX3Zpc2liaWxpdHlfIGNoZWNrLCBub3QgYSBfZGlzcGxheV8gY2hlY2tcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUobm9kZSkudmlzaWJpbGl0eSA9PT0gJ2hpZGRlbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGlzRGlyZWN0U3VtbWFyeSA9IG1hdGNoZXMuY2FsbChub2RlLCAnZGV0YWlscz5zdW1tYXJ5OmZpcnN0LW9mLXR5cGUnKTtcbiAgY29uc3Qgbm9kZVVuZGVyRGV0YWlscyA9IGlzRGlyZWN0U3VtbWFyeSA/IG5vZGUucGFyZW50RWxlbWVudCA6IG5vZGU7XG4gIGlmIChtYXRjaGVzLmNhbGwobm9kZVVuZGVyRGV0YWlscywgJ2RldGFpbHM6bm90KFtvcGVuXSkgKicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBUaGUgcm9vdCBub2RlIGlzIHRoZSBzaGFkb3cgcm9vdCBpZiB0aGUgbm9kZSBpcyBpbiBhIHNoYWRvdyBET007IHNvbWUgZG9jdW1lbnQgb3RoZXJ3aXNlXG4gIC8vICAoYnV0IE5PVCBfdGhlXyBkb2N1bWVudDsgc2VlIHNlY29uZCAnSWYnIGNvbW1lbnQgYmVsb3cgZm9yIG1vcmUpLlxuICAvLyBJZiByb290Tm9kZSBpcyBzaGFkb3cgcm9vdCwgaXQnbGwgaGF2ZSBhIGhvc3QsIHdoaWNoIGlzIHRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBzaGFkb3dcbiAgLy8gIGlzIGF0dGFjaGVkLCBhbmQgdGhlIG9uZSB3ZSBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgaW4gdGhlIGRvY3VtZW50IG9yIG5vdCAoYmVjYXVzZSB0aGVcbiAgLy8gIHNoYWRvdywgYW5kIGFsbCBub2RlcyBpdCBjb250YWlucywgaXMgbmV2ZXIgY29uc2lkZXJlZCBpbiB0aGUgZG9jdW1lbnQgc2luY2Ugc2hhZG93c1xuICAvLyAgYmVoYXZlIGxpa2Ugc2VsZi1jb250YWluZWQgRE9NczsgYnV0IGlmIHRoZSBzaGFkb3cncyBIT1NULCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBkb2N1bWVudCxcbiAgLy8gIGlzIGhpZGRlbiwgb3IgaXMgbm90IGluIHRoZSBkb2N1bWVudCBpdHNlbGYgYnV0IGlzIGRldGFjaGVkLCBpdCB3aWxsIGFmZmVjdCB0aGUgc2hhZG93J3NcbiAgLy8gIHZpc2liaWxpdHksIGluY2x1ZGluZyBhbGwgdGhlIG5vZGVzIGl0IGNvbnRhaW5zKS4gVGhlIGhvc3QgY291bGQgYmUgYW55IG5vcm1hbCBub2RlLFxuICAvLyAgb3IgYSBjdXN0b20gZWxlbWVudCAoaS5lLiB3ZWIgY29tcG9uZW50KS4gRWl0aGVyIHdheSwgdGhhdCdzIHRoZSBvbmUgdGhhdCBpcyBjb25zaWRlcmVkXG4gIC8vICBwYXJ0IG9mIHRoZSBkb2N1bWVudCwgbm90IHRoZSBzaGFkb3cgcm9vdCwgbm9yIGFueSBvZiBpdHMgY2hpbGRyZW4gKGkuZS4gdGhlIG5vZGUgYmVpbmdcbiAgLy8gIHRlc3RlZCkuXG4gIC8vIElmIHJvb3ROb2RlIGlzIG5vdCBhIHNoYWRvdyByb290LCBpdCB3b24ndCBoYXZlIGEgaG9zdCwgYW5kIHNvIHJvb3ROb2RlIHNob3VsZCBiZSB0aGVcbiAgLy8gIGRvY3VtZW50IChwZXIgdGhlIGRvY3MpIGFuZCB3aGlsZSBpdCdzIGEgRG9jdW1lbnQtdHlwZSBvYmplY3QsIHRoYXQgZG9jdW1lbnQgZG9lcyBub3RcbiAgLy8gIGFwcGVhciB0byBiZSB0aGUgc2FtZSBhcyB0aGUgbm9kZSdzIGBvd25lckRvY3VtZW50YCBmb3Igc29tZSByZWFzb24sIHNvIGl0J3Mgc2FmZXJcbiAgLy8gIHRvIGlnbm9yZSB0aGUgcm9vdE5vZGUgYXQgdGhpcyBwb2ludCwgYW5kIHVzZSBgbm9kZS5vd25lckRvY3VtZW50YC4gT3RoZXJ3aXNlLFxuICAvLyAgdXNpbmcgYHJvb3ROb2RlLmNvbnRhaW5zKG5vZGUpYCB3aWxsIF9hbHdheXNfIGJlIHRydWUgd2UnbGwgZ2V0IGZhbHNlLXBvc2l0aXZlcyB3aGVuXG4gIC8vICBub2RlIGlzIGFjdHVhbGx5IGRldGFjaGVkLlxuICBjb25zdCBub2RlUm9vdEhvc3QgPSBnZXRSb290Tm9kZShub2RlKS5ob3N0O1xuICBjb25zdCBub2RlSXNBdHRhY2hlZCA9XG4gICAgbm9kZVJvb3RIb3N0Py5vd25lckRvY3VtZW50LmNvbnRhaW5zKG5vZGVSb290SG9zdCkgfHxcbiAgICBub2RlLm93bmVyRG9jdW1lbnQuY29udGFpbnMobm9kZSk7XG5cbiAgaWYgKCFkaXNwbGF5Q2hlY2sgfHwgZGlzcGxheUNoZWNrID09PSAnZnVsbCcpIHtcbiAgICBpZiAodHlwZW9mIGdldFNoYWRvd1Jvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBub2RlIHRvIGJlIGluIGFuIHVuZGlzY2xvc2VkIHNoYWRvdyBhbmQgdXNlIHRoZVxuICAgICAgLy8gICdub24temVyby1hcmVhJyBmYWxsYmFja1xuICAgICAgY29uc3Qgb3JpZ2luYWxOb2RlID0gbm9kZTtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJvb3ROb2RlID0gZ2V0Um9vdE5vZGUobm9kZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJlbnRFbGVtZW50ICYmXG4gICAgICAgICAgIXBhcmVudEVsZW1lbnQuc2hhZG93Um9vdCAmJlxuICAgICAgICAgIGdldFNoYWRvd1Jvb3QocGFyZW50RWxlbWVudCkgPT09IHRydWUgLy8gY2hlY2sgaWYgdGhlcmUncyBhbiB1bmRpc2Nsb3NlZCBzaGFkb3dcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gbm9kZSBoYXMgYW4gdW5kaXNjbG9zZWQgc2hhZG93IHdoaWNoIG1lYW5zIHdlIGNhbiBvbmx5IHRyZWF0IGl0IGFzIGEgYmxhY2sgYm94LCBzbyB3ZVxuICAgICAgICAgIC8vICBmYWxsIGJhY2sgdG8gYSBub24temVyby1hcmVhIHRlc3RcbiAgICAgICAgICByZXR1cm4gaXNaZXJvQXJlYShub2RlKTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmFzc2lnbmVkU2xvdCkge1xuICAgICAgICAgIC8vIGl0ZXJhdGUgdXAgc2xvdFxuICAgICAgICAgIG5vZGUgPSBub2RlLmFzc2lnbmVkU2xvdDtcbiAgICAgICAgfSBlbHNlIGlmICghcGFyZW50RWxlbWVudCAmJiByb290Tm9kZSAhPT0gbm9kZS5vd25lckRvY3VtZW50KSB7XG4gICAgICAgICAgLy8gY3Jvc3Mgc2hhZG93IGJvdW5kYXJ5XG4gICAgICAgICAgbm9kZSA9IHJvb3ROb2RlLmhvc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaXRlcmF0ZSB1cCBub3JtYWwgZG9tXG4gICAgICAgICAgbm9kZSA9IHBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG9yaWdpbmFsTm9kZTtcbiAgICB9XG4gICAgLy8gZWxzZSwgYGdldFNoYWRvd1Jvb3RgIG1pZ2h0IGJlIHRydWUsIGJ1dCBhbGwgdGhhdCBkb2VzIGlzIGVuYWJsZSBzaGFkb3cgRE9NIHN1cHBvcnRcbiAgICAvLyAgKGkuZS4gaXQgZG9lcyBub3QgYWxzbyBwcmVzdW1lIHRoYXQgYWxsIG5vZGVzIG1pZ2h0IGhhdmUgdW5kaXNjbG9zZWQgc2hhZG93cyk7IG9yXG4gICAgLy8gIGl0IG1pZ2h0IGJlIGEgZmFsc3kgdmFsdWUsIHdoaWNoIG1lYW5zIHNoYWRvdyBET00gc3VwcG9ydCBpcyBkaXNhYmxlZFxuXG4gICAgLy8gU2luY2Ugd2UgZGlkbid0IGZpbmQgaXQgc2l0dGluZyBpbiBhbiB1bmRpc2Nsb3NlZCBzaGFkb3cgKG9yIHNoYWRvd3MgYXJlIGRpc2FibGVkKVxuICAgIC8vICBub3cgd2UgY2FuIGp1c3QgdGVzdCB0byBzZWUgaWYgaXQgd291bGQgbm9ybWFsbHkgYmUgdmlzaWJsZSBvciBub3QsIHByb3ZpZGVkIGl0J3NcbiAgICAvLyAgYXR0YWNoZWQgdG8gdGhlIG1haW4gZG9jdW1lbnQuXG4gICAgLy8gTk9URTogV2UgbXVzdCBjb25zaWRlciBjYXNlIHdoZXJlIG5vZGUgaXMgaW5zaWRlIGEgc2hhZG93IERPTSBhbmQgZ2l2ZW4gZGlyZWN0bHkgdG9cbiAgICAvLyAgYGlzVGFiYmFibGUoKWAgb3IgYGlzRm9jdXNhYmxlKClgIC0tIHJlZ2FyZGxlc3Mgb2YgYGdldFNoYWRvd1Jvb3RgIG9wdGlvbiBzZXR0aW5nLlxuXG4gICAgaWYgKG5vZGVJc0F0dGFjaGVkKSB7XG4gICAgICAvLyB0aGlzIHdvcmtzIHdoZXJldmVyIHRoZSBub2RlIGlzOiBpZiB0aGVyZSdzIGF0IGxlYXN0IG9uZSBjbGllbnQgcmVjdCwgaXQnc1xuICAgICAgLy8gIHNvbWVob3cgZGlzcGxheWVkOyBpdCBhbHNvIGNvdmVycyB0aGUgQ1NTICdkaXNwbGF5OiBjb250ZW50cycgY2FzZSB3aGVyZSB0aGVcbiAgICAgIC8vICBub2RlIGl0c2VsZiBpcyBoaWRkZW4gaW4gcGxhY2Ugb2YgaXRzIGNvbnRlbnRzOyBhbmQgdGhlcmUncyBubyBuZWVkIHRvIHNlYXJjaFxuICAgICAgLy8gIHVwIHRoZSBoaWVyYXJjaHkgZWl0aGVyXG4gICAgICByZXR1cm4gIW5vZGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgdGhlIG5vZGUgaXNuJ3QgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50LCB3aGljaCBtZWFucyB0aGUgYGdldENsaWVudFJlY3RzKClgXG4gICAgLy8gIEFQSSB3aWxsIF9fYWx3YXlzX18gcmV0dXJuIHplcm8gcmVjdHMgKHRoaXMgY2FuIGhhcHBlbiwgZm9yIGV4YW1wbGUsIGlmIFJlYWN0XG4gICAgLy8gIGlzIHVzZWQgdG8gcmVuZGVyIG5vZGVzIG9udG8gYSBkZXRhY2hlZCB0cmVlLCBhcyBjb25maXJtZWQgaW4gdGhpcyB0aHJlYWQ6XG4gICAgLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvOTExNyNpc3N1ZWNvbW1lbnQtMjg0MjI4ODcwKVxuICAgIC8vXG4gICAgLy8gSXQgYWxzbyBtZWFucyB0aGF0IGV2ZW4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZGlzcGxheSB3aWxsIHJldHVybiBgdW5kZWZpbmVkYFxuICAgIC8vICBiZWNhdXNlIHN0eWxlcyBhcmUgb25seSBjb21wdXRlZCBmb3Igbm9kZXMgdGhhdCBhcmUgaW4gdGhlIGRvY3VtZW50LlxuICAgIC8vXG4gICAgLy8gTk9URTogVEhJUyBIQVMgQkVFTiBUSEUgQ0FTRSBGT1IgWUVBUlMuIEl0IGlzIG5vdCBuZXcsIG5vciBpcyBpdCBjYXVzZWQgYnkgdGFiYmFibGVcbiAgICAvLyAgc29tZWhvdy4gVGhvdWdoIGl0IHdhcyBuZXZlciBzdGF0ZWQgb2ZmaWNpYWxseSwgYW55b25lIHdobyBoYXMgZXZlciB1c2VkIHRhYmJhYmxlXG4gICAgLy8gIEFQSXMgb24gbm9kZXMgaW4gZGV0YWNoZWQgY29udGFpbmVycyBoYXMgYWN0dWFsbHkgaW1wbGljaXRseSB1c2VkIHRhYmJhYmxlIGluIHdoYXRcbiAgICAvLyAgd2FzIGxhdGVyIChhcyBvZiB2NS4yLjAgb24gQXByIDksIDIwMjEpIGNhbGxlZCBgZGlzcGxheUNoZWNrPVwibm9uZVwiYCBtb2RlIC0tIGVzc2VudGlhbGx5XG4gICAgLy8gIGNvbnNpZGVyaW5nIF9fZXZlcnl0aGluZ19fIHRvIGJlIHZpc2libGUgYmVjYXVzZSBvZiB0aGUgaW5uYWJpbGl0eSB0byBkZXRlcm1pbmUgc3R5bGVzLlxuICB9IGVsc2UgaWYgKGRpc3BsYXlDaGVjayA9PT0gJ25vbi16ZXJvLWFyZWEnKSB7XG4gICAgLy8gTk9URTogRXZlbiB0aG91Z2ggdGhpcyB0ZXN0cyB0aGF0IHRoZSBub2RlJ3MgY2xpZW50IHJlY3QgaXMgbm9uLXplcm8gdG8gZGV0ZXJtaW5lXG4gICAgLy8gIHdoZXRoZXIgaXQncyBkaXNwbGF5ZWQsIGFuZCB0aGF0IGEgZGV0YWNoZWQgbm9kZSB3aWxsIF9fYWx3YXlzX18gaGF2ZSBhIHplcm8tYXJlYVxuICAgIC8vICBjbGllbnQgcmVjdCwgd2UgZG9uJ3Qgc3BlY2lhbC1jYXNlIGZvciB3aGV0aGVyIHRoZSBub2RlIGlzIGF0dGFjaGVkIG9yIG5vdC4gSW5cbiAgICAvLyAgdGhpcyBtb2RlLCB3ZSBkbyB3YW50IHRvIGNvbnNpZGVyIG5vZGVzIHRoYXQgaGF2ZSBhIHplcm8gYXJlYSB0byBiZSBoaWRkZW4gYXQgYWxsXG4gICAgLy8gIHRpbWVzLCBhbmQgdGhhdCBpbmNsdWRlcyBhdHRhY2hlZCBvciBub3QuXG4gICAgcmV0dXJuIGlzWmVyb0FyZWEobm9kZSk7XG4gIH1cblxuICAvLyB2aXNpYmxlLCBhcyBmYXIgYXMgd2UgY2FuIHRlbGwsIG9yIHBlciBjdXJyZW50IGBkaXNwbGF5Q2hlY2tgIG1vZGVcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gZm9ybSBmaWVsZHMgKG5lc3RlZCkgaW5zaWRlIGEgZGlzYWJsZWQgZmllbGRzZXQgYXJlIG5vdCBmb2N1c2FibGUvdGFiYmFibGVcbi8vICB1bmxlc3MgdGhleSBhcmUgaW4gdGhlIF9maXJzdF8gPGxlZ2VuZD4gZWxlbWVudCBvZiB0aGUgdG9wLW1vc3QgZGlzYWJsZWRcbi8vICBmaWVsZHNldFxuY29uc3QgaXNEaXNhYmxlZEZyb21GaWVsZHNldCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gIGlmICgvXihJTlBVVHxCVVRUT058U0VMRUNUfFRFWFRBUkVBKSQvLnRlc3Qobm9kZS50YWdOYW1lKSkge1xuICAgIGxldCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnRFbGVtZW50O1xuICAgIC8vIGNoZWNrIGlmIGBub2RlYCBpcyBjb250YWluZWQgaW4gYSBkaXNhYmxlZCA8ZmllbGRzZXQ+XG4gICAgd2hpbGUgKHBhcmVudE5vZGUpIHtcbiAgICAgIGlmIChwYXJlbnROb2RlLnRhZ05hbWUgPT09ICdGSUVMRFNFVCcgJiYgcGFyZW50Tm9kZS5kaXNhYmxlZCkge1xuICAgICAgICAvLyBsb29rIGZvciB0aGUgZmlyc3QgPGxlZ2VuZD4gYW1vbmcgdGhlIGNoaWxkcmVuIG9mIHRoZSBkaXNhYmxlZCA8ZmllbGRzZXQ+XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNoaWxkID0gcGFyZW50Tm9kZS5jaGlsZHJlbi5pdGVtKGkpO1xuICAgICAgICAgIC8vIHdoZW4gdGhlIGZpcnN0IDxsZWdlbmQ+IChpbiBkb2N1bWVudCBvcmRlcikgaXMgZm91bmRcbiAgICAgICAgICBpZiAoY2hpbGQudGFnTmFtZSA9PT0gJ0xFR0VORCcpIHtcbiAgICAgICAgICAgIC8vIGlmIGl0cyBwYXJlbnQgPGZpZWxkc2V0PiBpcyBub3QgbmVzdGVkIGluIGFub3RoZXIgZGlzYWJsZWQgPGZpZWxkc2V0PixcbiAgICAgICAgICAgIC8vIHJldHVybiB3aGV0aGVyIGBub2RlYCBpcyBhIGRlc2NlbmRhbnQgb2YgaXRzIGZpcnN0IDxsZWdlbmQ+XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcy5jYWxsKHBhcmVudE5vZGUsICdmaWVsZHNldFtkaXNhYmxlZF0gKicpXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6ICFjaGlsZC5jb250YWlucyhub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhlIGRpc2FibGVkIDxmaWVsZHNldD4gY29udGFpbmluZyBgbm9kZWAgaGFzIG5vIDxsZWdlbmQ+XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50RWxlbWVudDtcbiAgICB9XG4gIH1cblxuICAvLyBlbHNlLCBub2RlJ3MgdGFiYmFibGUvZm9jdXNhYmxlIHN0YXRlIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQgYnkgYSBmaWVsZHNldCdzXG4gIC8vICBlbmFibGVkL2Rpc2FibGVkIHN0YXRlXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUgPSBmdW5jdGlvbiAob3B0aW9ucywgbm9kZSkge1xuICBpZiAoXG4gICAgbm9kZS5kaXNhYmxlZCB8fFxuICAgIGlzSGlkZGVuSW5wdXQobm9kZSkgfHxcbiAgICBpc0hpZGRlbihub2RlLCBvcHRpb25zKSB8fFxuICAgIC8vIEZvciBhIGRldGFpbHMgZWxlbWVudCB3aXRoIGEgc3VtbWFyeSwgdGhlIHN1bW1hcnkgZWxlbWVudCBnZXRzIHRoZSBmb2N1c1xuICAgIGlzRGV0YWlsc1dpdGhTdW1tYXJ5KG5vZGUpIHx8XG4gICAgaXNEaXNhYmxlZEZyb21GaWVsZHNldChub2RlKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUgPSBmdW5jdGlvbiAob3B0aW9ucywgbm9kZSkge1xuICBpZiAoXG4gICAgaXNOb25UYWJiYWJsZVJhZGlvKG5vZGUpIHx8XG4gICAgZ2V0VGFiaW5kZXgobm9kZSkgPCAwIHx8XG4gICAgIWlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUob3B0aW9ucywgbm9kZSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNWYWxpZFNoYWRvd1Jvb3RUYWJiYWJsZSA9IGZ1bmN0aW9uIChzaGFkb3dIb3N0Tm9kZSkge1xuICBjb25zdCB0YWJJbmRleCA9IHBhcnNlSW50KHNoYWRvd0hvc3ROb2RlLmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSwgMTApO1xuICBpZiAoaXNOYU4odGFiSW5kZXgpIHx8IHRhYkluZGV4ID49IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBJZiBhIGN1c3RvbSBlbGVtZW50IGhhcyBhbiBleHBsaWNpdCBuZWdhdGl2ZSB0YWJpbmRleCxcbiAgLy8gYnJvd3NlcnMgd2lsbCBub3QgYWxsb3cgdGFiIHRhcmdldGluZyBzYWlkIGVsZW1lbnQncyBjaGlsZHJlbi5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5LjxFbGVtZW50fENhbmRpZGF0ZXNTY29wZT59IGNhbmRpZGF0ZXNcbiAqIEByZXR1cm5zIEVsZW1lbnRbXVxuICovXG5jb25zdCBzb3J0QnlPcmRlciA9IGZ1bmN0aW9uIChjYW5kaWRhdGVzKSB7XG4gIGNvbnN0IHJlZ3VsYXJUYWJiYWJsZXMgPSBbXTtcbiAgY29uc3Qgb3JkZXJlZFRhYmJhYmxlcyA9IFtdO1xuICBjYW5kaWRhdGVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICBjb25zdCBpc1Njb3BlID0gISFpdGVtLnNjb3BlO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBpc1Njb3BlID8gaXRlbS5zY29wZSA6IGl0ZW07XG4gICAgY29uc3QgY2FuZGlkYXRlVGFiaW5kZXggPSBnZXRUYWJpbmRleChlbGVtZW50LCBpc1Njb3BlKTtcbiAgICBjb25zdCBlbGVtZW50cyA9IGlzU2NvcGUgPyBzb3J0QnlPcmRlcihpdGVtLmNhbmRpZGF0ZXMpIDogZWxlbWVudDtcbiAgICBpZiAoY2FuZGlkYXRlVGFiaW5kZXggPT09IDApIHtcbiAgICAgIGlzU2NvcGVcbiAgICAgICAgPyByZWd1bGFyVGFiYmFibGVzLnB1c2goLi4uZWxlbWVudHMpXG4gICAgICAgIDogcmVndWxhclRhYmJhYmxlcy5wdXNoKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcmRlcmVkVGFiYmFibGVzLnB1c2goe1xuICAgICAgICBkb2N1bWVudE9yZGVyOiBpLFxuICAgICAgICB0YWJJbmRleDogY2FuZGlkYXRlVGFiaW5kZXgsXG4gICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgIGlzU2NvcGU6IGlzU2NvcGUsXG4gICAgICAgIGNvbnRlbnQ6IGVsZW1lbnRzLFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3JkZXJlZFRhYmJhYmxlc1xuICAgIC5zb3J0KHNvcnRPcmRlcmVkVGFiYmFibGVzKVxuICAgIC5yZWR1Y2UoKGFjYywgc29ydGFibGUpID0+IHtcbiAgICAgIHNvcnRhYmxlLmlzU2NvcGVcbiAgICAgICAgPyBhY2MucHVzaCguLi5zb3J0YWJsZS5jb250ZW50KVxuICAgICAgICA6IGFjYy5wdXNoKHNvcnRhYmxlLmNvbnRlbnQpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSlcbiAgICAuY29uY2F0KHJlZ3VsYXJUYWJiYWJsZXMpO1xufTtcblxuY29uc3QgdGFiYmFibGUgPSBmdW5jdGlvbiAoZWwsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgbGV0IGNhbmRpZGF0ZXM7XG4gIGlmIChvcHRpb25zLmdldFNoYWRvd1Jvb3QpIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5KFtlbF0sIG9wdGlvbnMuaW5jbHVkZUNvbnRhaW5lciwge1xuICAgICAgZmlsdGVyOiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUuYmluZChudWxsLCBvcHRpb25zKSxcbiAgICAgIGZsYXR0ZW46IGZhbHNlLFxuICAgICAgZ2V0U2hhZG93Um9vdDogb3B0aW9ucy5nZXRTaGFkb3dSb290LFxuICAgICAgc2hhZG93Um9vdEZpbHRlcjogaXNWYWxpZFNoYWRvd1Jvb3RUYWJiYWJsZSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjYW5kaWRhdGVzID0gZ2V0Q2FuZGlkYXRlcyhcbiAgICAgIGVsLFxuICAgICAgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLFxuICAgICAgaXNOb2RlTWF0Y2hpbmdTZWxlY3RvclRhYmJhYmxlLmJpbmQobnVsbCwgb3B0aW9ucylcbiAgICApO1xuICB9XG4gIHJldHVybiBzb3J0QnlPcmRlcihjYW5kaWRhdGVzKTtcbn07XG5cbmNvbnN0IGZvY3VzYWJsZSA9IGZ1bmN0aW9uIChlbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBsZXQgY2FuZGlkYXRlcztcbiAgaWYgKG9wdGlvbnMuZ2V0U2hhZG93Um9vdCkge1xuICAgIGNhbmRpZGF0ZXMgPSBnZXRDYW5kaWRhdGVzSXRlcmF0aXZlbHkoW2VsXSwgb3B0aW9ucy5pbmNsdWRlQ29udGFpbmVyLCB7XG4gICAgICBmaWx0ZXI6IGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUuYmluZChudWxsLCBvcHRpb25zKSxcbiAgICAgIGZsYXR0ZW46IHRydWUsXG4gICAgICBnZXRTaGFkb3dSb290OiBvcHRpb25zLmdldFNoYWRvd1Jvb3QsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY2FuZGlkYXRlcyA9IGdldENhbmRpZGF0ZXMoXG4gICAgICBlbCxcbiAgICAgIG9wdGlvbnMuaW5jbHVkZUNvbnRhaW5lcixcbiAgICAgIGlzTm9kZU1hdGNoaW5nU2VsZWN0b3JGb2N1c2FibGUuYmluZChudWxsLCBvcHRpb25zKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY2FuZGlkYXRlcztcbn07XG5cbmNvbnN0IGlzVGFiYmFibGUgPSBmdW5jdGlvbiAobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKCFub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBub2RlIHByb3ZpZGVkJyk7XG4gIH1cbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlLCBjYW5kaWRhdGVTZWxlY3RvcikgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUob3B0aW9ucywgbm9kZSk7XG59O1xuXG5jb25zdCBmb2N1c2FibGVDYW5kaWRhdGVTZWxlY3RvciA9IC8qICNfX1BVUkVfXyAqLyBjYW5kaWRhdGVTZWxlY3RvcnNcbiAgLmNvbmNhdCgnaWZyYW1lJylcbiAgLmpvaW4oJywnKTtcblxuY29uc3QgaXNGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKCFub2RlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBub2RlIHByb3ZpZGVkJyk7XG4gIH1cbiAgaWYgKG1hdGNoZXMuY2FsbChub2RlLCBmb2N1c2FibGVDYW5kaWRhdGVTZWxlY3RvcikgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpc05vZGVNYXRjaGluZ1NlbGVjdG9yRm9jdXNhYmxlKG9wdGlvbnMsIG5vZGUpO1xufTtcblxuZXhwb3J0IHsgdGFiYmFibGUsIGZvY3VzYWJsZSwgaXNUYWJiYWJsZSwgaXNGb2N1c2FibGUgfTtcbiIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBFTlRFUiA9ICdFbnRlcic7XG5leHBvcnQgdmFyIFNQQUNFID0gJyAnO1xuZXhwb3J0IHZhciBFU0NBUEUgPSAnRXNjYXBlJztcbmV4cG9ydCB2YXIgVEFCID0gJ1RhYic7XG5leHBvcnQgdmFyIEJBQ0tTUEFDRSA9ICdCYWNrc3BhY2UnO1xuZXhwb3J0IHZhciBGMiA9ICdGMic7XG5leHBvcnQgdmFyIEFMVCA9ICdBbHQnO1xuZXhwb3J0IHZhciBTSElGVCA9ICdTaGlmdCc7XG5leHBvcnQgdmFyIENUUkwgPSAnQ29udHJvbCc7XG5leHBvcnQgdmFyIE1FVEEgPSAnTWV0YSc7IC8vIFdpbmRvd3MsIENvbW1hbmQsIE9wdGlvblxuXG5leHBvcnQgdmFyIEFSUk9XX0RPV04gPSAnQXJyb3dEb3duJztcbmV4cG9ydCB2YXIgQVJST1dfVVAgPSAnQXJyb3dVcCc7XG5leHBvcnQgdmFyIEFSUk9XX0xFRlQgPSAnQXJyb3dMZWZ0JztcbmV4cG9ydCB2YXIgQVJST1dfUklHSFQgPSAnQXJyb3dSaWdodCc7XG5leHBvcnQgdmFyIFBBR0VfVVAgPSAnUGFnZVVwJztcbmV4cG9ydCB2YXIgUEFHRV9ET1dOID0gJ1BhZ2VEb3duJztcbmV4cG9ydCB2YXIgRU5EID0gJ0VuZCc7XG5leHBvcnQgdmFyIEhPTUUgPSAnSG9tZSc7XG5leHBvcnQgdmFyIGtleXM7XG5cbihmdW5jdGlvbiAoa2V5cykge1xuICBrZXlzW1wiRU5URVJcIl0gPSBcIkVudGVyXCI7XG4gIGtleXNbXCJTUEFDRVwiXSA9IFwiIFwiO1xuICBrZXlzW1wiRVNDQVBFXCJdID0gXCJFc2NhcGVcIjtcbiAga2V5c1tcIlRBQlwiXSA9IFwiVGFiXCI7XG4gIGtleXNbXCJCQUNLU1BBQ0VcIl0gPSBcIkJhY2tzcGFjZVwiO1xuICBrZXlzW1wiRjJcIl0gPSBcIkYyXCI7XG4gIGtleXNbXCJBTFRcIl0gPSBcIkFsdFwiO1xuICBrZXlzW1wiU0hJRlRcIl0gPSBcIlNoaWZ0XCI7XG4gIGtleXNbXCJDVFJMXCJdID0gXCJDb250cm9sXCI7XG4gIGtleXNbXCJNRVRBXCJdID0gXCJNZXRhXCI7XG4gIGtleXNbXCJBUlJPV19ET1dOXCJdID0gXCJBcnJvd0Rvd25cIjtcbiAga2V5c1tcIkFSUk9XX1VQXCJdID0gXCJBcnJvd1VwXCI7XG4gIGtleXNbXCJBUlJPV19MRUZUXCJdID0gXCJBcnJvd0xlZnRcIjtcbiAga2V5c1tcIkFSUk9XX1JJR0hUXCJdID0gXCJBcnJvd1JpZ2h0XCI7XG4gIGtleXNbXCJQQUdFX1VQXCJdID0gXCJQYWdlVXBcIjtcbiAga2V5c1tcIlBBR0VfRE9XTlwiXSA9IFwiUGFnZURvd25cIjtcbiAga2V5c1tcIkVORFwiXSA9IFwiRW5kXCI7XG4gIGtleXNbXCJIT01FXCJdID0gXCJIb21lXCI7XG59KShrZXlzIHx8IChrZXlzID0ge30pKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBUaGVzZSBrZXlzIGFyZSB1c2VkIGZvciBuYXZpZ2F0aW5nIGNhc2NhZGluZyBtZW51IFVJIGNvbXBvbmVudHMuXG4gKlxuICogQVJST1dfRE9XTjogU2VsZWN0IHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gKiBBUlJPV19MRUZUOiBTaG93IHRoZSBwcmV2aW91cyBtZW51LlxuICogQVJST1dfUklHSFQ6IFNob3cgdGhlIG5leHQgbWVudSBmb3IgdGhlIHNlbGVjdGVkIGl0ZW0uXG4gKiBBUlJPV19VUDogU2VsZWN0IHRoZSBwcmV2aW91cyBpdGVtIGluIHRoZSBsaXN0LlxuICogRVNDOiBEZXNlbGVjdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gYW5kIGhpZGUgdGhlIGxpc3QuXG4gKiBUQUI6IE5vcm1hbCB0YWJiaW5nIG5hdmlnYXRpb24gaXMgc3RpbGwgc3VwcG9ydGVkLlxuICovXG5pbXBvcnQgeyBBUlJPV19ET1dOLCBBUlJPV19MRUZULCBBUlJPV19SSUdIVCwgQVJST1dfVVAsIEVTQ0FQRSwgVEFCIH0gZnJvbSAnLi4va2V5cyc7XG5leHBvcnQgdmFyIGNhc2NhZGluZ01lbnVLZXlzID0ge1xuICBBUlJPV19ET1dOOiBBUlJPV19ET1dOLFxuICBBUlJPV19MRUZUOiBBUlJPV19MRUZULFxuICBBUlJPV19SSUdIVDogQVJST1dfUklHSFQsXG4gIEFSUk9XX1VQOiBBUlJPV19VUCxcbiAgRVNDQVBFOiBFU0NBUEUsXG4gIFRBQjogVEFCXG59OyIsICIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbnZhciBnZXRSYW5kb21WYWx1ZXM7XG52YXIgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi4gQWxzbyxcbiAgICAvLyBmaW5kIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG8gKG1zQ3J5cHRvKSBvbiBJRTExLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0bykgfHwgdHlwZW9mIG1zQ3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzID09PSAnZnVuY3Rpb24nICYmIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKTtcblxuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59IiwgImV4cG9ydCBkZWZhdWx0IC9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTsiLCAiaW1wb3J0IFJFR0VYIGZyb20gJy4vcmVnZXguanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZSh1dWlkKSB7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgJiYgUkVHRVgudGVzdCh1dWlkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGU7IiwgImltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuXG52YXIgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIpIHtcbiAgdmFyIG9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHZhciB1dWlkID0gKGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dKS50b0xvd2VyQ2FzZSgpOyAvLyBDb25zaXN0ZW5jeSBjaGVjayBmb3IgdmFsaWQgVVVJRC4gIElmIHRoaXMgdGhyb3dzLCBpdCdzIGxpa2VseSBkdWUgdG8gb25lXG4gIC8vIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC8vIC0gT25lIG9yIG1vcmUgaW5wdXQgYXJyYXkgdmFsdWVzIGRvbid0IG1hcCB0byBhIGhleCBvY3RldCAobGVhZGluZyB0b1xuICAvLyBcInVuZGVmaW5lZFwiIGluIHRoZSB1dWlkKVxuICAvLyAtIEludmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgUkZDIGB2ZXJzaW9uYCBvciBgdmFyaWFudGAgZmllbGRzXG5cbiAgaWYgKCF2YWxpZGF0ZSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaW5naWZ5OyIsICJpbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCBzdHJpbmdpZnkgZnJvbSAnLi9zdHJpbmdpZnkuanMnOyAvLyAqKmB2MSgpYCAtIEdlbmVyYXRlIHRpbWUtYmFzZWQgVVVJRCoqXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcbi8vIGFuZCBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvdXVpZC5odG1sXG5cbnZhciBfbm9kZUlkO1xuXG52YXIgX2Nsb2Nrc2VxOyAvLyBQcmV2aW91cyB1dWlkIGNyZWF0aW9uIHRpbWVcblxuXG52YXIgX2xhc3RNU2VjcyA9IDA7XG52YXIgX2xhc3ROU2VjcyA9IDA7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQgZm9yIEFQSSBkZXRhaWxzXG5cbmZ1bmN0aW9uIHYxKG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuICB2YXIgYiA9IGJ1ZiB8fCBuZXcgQXJyYXkoMTYpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIG5vZGUgPSBvcHRpb25zLm5vZGUgfHwgX25vZGVJZDtcbiAgdmFyIGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTsgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XG4gIC8vIHNwZWNpZmllZC4gIFdlIGRvIHRoaXMgbGF6aWx5IHRvIG1pbmltaXplIGlzc3VlcyByZWxhdGVkIHRvIGluc3VmZmljaWVudFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XG5cbiAgaWYgKG5vZGUgPT0gbnVsbCB8fCBjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgdmFyIHNlZWRCeXRlcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7XG5cbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcbiAgICAgIG5vZGUgPSBfbm9kZUlkID0gW3NlZWRCeXRlc1swXSB8IDB4MDEsIHNlZWRCeXRlc1sxXSwgc2VlZEJ5dGVzWzJdLCBzZWVkQnl0ZXNbM10sIHNlZWRCeXRlc1s0XSwgc2VlZEJ5dGVzWzVdXTtcbiAgICB9XG5cbiAgICBpZiAoY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcbiAgICB9XG4gIH0gLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcbiAgLy8gKDE1ODItMTAtMTUgMDA6MDApLiAgSlNOdW1iZXJzIGFyZW4ndCBwcmVjaXNlIGVub3VnaCBmb3IgdGhpcywgc29cbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXG5cblxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogRGF0ZS5ub3coKTsgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuXG4gIHZhciBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTsgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuXG4gIHZhciBkdCA9IG1zZWNzIC0gX2xhc3RNU2VjcyArIChuc2VjcyAtIF9sYXN0TlNlY3MpIC8gMTAwMDA7IC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cblxuICBpZiAoZHQgPCAwICYmIG9wdGlvbnMuY2xvY2tzZXEgPT09IHVuZGVmaW5lZCkge1xuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xuICB9IC8vIFJlc2V0IG5zZWNzIGlmIGNsb2NrIHJlZ3Jlc3NlcyAobmV3IGNsb2Nrc2VxKSBvciB3ZSd2ZSBtb3ZlZCBvbnRvIGEgbmV3XG4gIC8vIHRpbWUgaW50ZXJ2YWxcblxuXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbnNlY3MgPSAwO1xuICB9IC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcblxuXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInV1aWQudjEoKTogQ2FuJ3QgY3JlYXRlIG1vcmUgdGhhbiAxME0gdXVpZHMvc2VjXCIpO1xuICB9XG5cbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xuICBfbGFzdE5TZWNzID0gbnNlY3M7XG4gIF9jbG9ja3NlcSA9IGNsb2Nrc2VxOyAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcblxuICBtc2VjcyArPSAxMjIxOTI5MjgwMDAwMDsgLy8gYHRpbWVfbG93YFxuXG4gIHZhciB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDE2ICYgMHhmZjtcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bCAmIDB4ZmY7IC8vIGB0aW1lX21pZGBcblxuICB2YXIgdG1oID0gbXNlY3MgLyAweDEwMDAwMDAwMCAqIDEwMDAwICYgMHhmZmZmZmZmO1xuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bWggJiAweGZmOyAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMjQgJiAweGYgfCAweDEwOyAvLyBpbmNsdWRlIHZlcnNpb25cblxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjsgLy8gYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgIChQZXIgNC4yLjIgLSBpbmNsdWRlIHZhcmlhbnQpXG5cbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwOyAvLyBgY2xvY2tfc2VxX2xvd2BcblxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7IC8vIGBub2RlYFxuXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgYltpICsgbl0gPSBub2RlW25dO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCBzdHJpbmdpZnkoYik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHYxOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdjEgYXMgdXVpZHYxIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBpZHMuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSwgYnV0IHByZWRpY3RhYmxlIGlkcyB0byBwYWlyIGxhYmVsc1xuICogd2l0aCB0aGVpciBpbnB1dHMuIEl0IHRha2VzIGFuIG9wdGlvbmFsIHByZWZpeCBhcyBhIHBhcmFtZXRlci4gSWYgeW91IGRvbid0XG4gKiBzcGVjaWZ5IGl0LCBpdCBnZW5lcmF0ZXMgYSByYW5kb20gaWQgcHJlZml4LiBJZiB5b3Ugc3BlY2lmeSBhIGN1c3RvbSBwcmVmaXhcbiAqIGl0IHNob3VsZCBiZWdpbiB3aXRoIGFuIGxldHRlciB0byBiZSBIVE1MNCBjb21wbGlhbnQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGh0bWxJZEdlbmVyYXRvcigpIHtcbiAgdmFyIGlkUHJlZml4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgdmFyIHN0YXRpY1V1aWQgPSB1dWlkdjEoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaWRTdWZmaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICAgIHZhciBwcmVmaXggPSBcIlwiLmNvbmNhdChpZFByZWZpeCkuY29uY2F0KGlkUHJlZml4ICE9PSAnJyA/ICdfJyA6ICdpJyk7XG4gICAgdmFyIHN1ZmZpeCA9IGlkU3VmZml4ID8gXCJfXCIuY29uY2F0KGlkU3VmZml4KSA6ICcnO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChwcmVmaXgpLmNvbmNhdChzdWZmaXggPyBzdGF0aWNVdWlkIDogdXVpZHYxKCkpLmNvbmNhdChzdWZmaXgpO1xuICB9O1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBtZW1vaXplZCBJRCB0aGF0IHJlbWFpbnMgc3RhdGljIHVudGlsIGNvbXBvbmVudCB1bm1vdW50LlxuICogVGhpcyBwcmV2ZW50cyBJRHMgZnJvbSBiZWluZyByZS1yYW5kb21pemVkIG9uIGV2ZXJ5IGNvbXBvbmVudCB1cGRhdGUuXG4gKi9cblxuZXhwb3J0IHZhciB1c2VHZW5lcmF0ZWRIdG1sSWQgPSBmdW5jdGlvbiB1c2VHZW5lcmF0ZWRIdG1sSWQoKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIHByZWZpeCA9IF9yZWYucHJlZml4LFxuICAgICAgc3VmZml4ID0gX3JlZi5zdWZmaXgsXG4gICAgICBjb25kaXRpb25hbElkID0gX3JlZi5jb25kaXRpb25hbElkO1xuXG4gIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29uZGl0aW9uYWxJZCB8fCBodG1sSWRHZW5lcmF0b3IocHJlZml4KShzdWZmaXgpO1xuICB9LCBbY29uZGl0aW9uYWxJZCwgcHJlZml4LCBzdWZmaXhdKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIExFRlRfQUxJR05NRU5UID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBSSUdIVF9BTElHTk1FTlQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBDRU5URVJfQUxJR05NRU5UID0gJ2NlbnRlcic7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGFzc2VydE5ldmVyID0gZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoeCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHZhbHVlIFwiLmNvbmNhdCh4KSk7XG59OyAvLyB1dGlsaXR5IHR5cGVzOlxuXG4vKipcbiAqIFhPUiBmb3Igc29tZSBwcm9wZXJ0aWVzIGFwcGxpZWQgdG8gYSB0eXBlXG4gKiAoWE9SIGlzIG9uZSBvZiB0aGVzZSBidXQgbm90IGJvdGggb3IgbmVpdGhlcilcbiAqXG4gKiBVc2FnZTogT25lT2Y8dHlwZVRvRXh0ZW5kLCBvbmUgfCBidXQgfCBub3QgfCBtdWx0aXBsZSB8IG9mIHwgdGhlc2UgfCBhcmUgfCByZXF1aXJlZD5cbiAqXG4gKiBUbyByZXF1aXJlIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IGJ1dCBub3QgYm90aFxuICogRXhhbXBsZTogT25lT2Y8VHlwZSwgJ2FyaWEtbGFiZWwnIHwgJ2FyaWEtbGFiZWxsZWRieSc+XG4gKi9cblxuLyoqXG4gKiBXcmFwcyBPYmplY3Qua2V5cyB3aXRoIHByb3BlciB0eXBlc2NyaXB0IGRlZmluaXRpb24gb2YgdGhlIHJlc3VsdGluZyBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24ga2V5c09mKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKTtcbn1cbi8qKlxuICogTGlrZSBga2V5b2YgdHlwZW9mYCwgYnV0IGZvciBnZXR0aW5nIHZhbHVlcyBpbnN0ZWFkIG9mIGtleXNcbiAqIFZhbHVlT2Y8dHlwZW9mIHtrZXkxOiAndmFsdWUxJywga2V5MjogJ3ZhbHVlMid9PlxuICogUmVzdWx0cyBpbiBgJ3ZhbHVlMScgfCAndmFsdWUyJ2BcbiAqLyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBicmVha3BvaW50ID0ge1xuICB4bDogMTIwMCxcbiAgbDogOTkyLFxuICBtOiA3NjgsXG4gIHM6IDU3NSxcbiAgeHM6IDBcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBicmVha3BvaW50IH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JyZWFrcG9pbnQnO1xuZXhwb3J0IHZhciBCUkVBS1BPSU5UUyA9IGJyZWFrcG9pbnQ7XG5leHBvcnQgdmFyIEJSRUFLUE9JTlRfS0VZUyA9IGtleXNPZihCUkVBS1BPSU5UUyk7XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGFuIG9iamVjdCBvZiBgRXVpQnJlYWtwb2ludHNgLFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdHJpbmcgdGhhdCBpcyB0aGUgbmFtZSBvZiB0aGUgYnJlYWtwb2ludCBrZXlcbiAqIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB3aWR0aFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBDYW4gZWl0aGVyIGJlIHRoZSBmdWxsIHdpbmRvdyB3aWR0aCBvciBhbnkgd2lkdGhcbiAqIEBwYXJhbSB7RXVpQnJlYWtwb2ludHN9IGJyZWFrcG9pbnRzIEFuIG9iamVjdCB3aXRoIGtleXMgZm9yIHNpemluZyBhbmQgdmFsdWVzIGZvciBtaW5pbXVtIHdpZHRoXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBOYW1lIG9mIHRoZSBicmVha3BvaW50IGtleSBvciBgdW5kZWZpbmVkYCBpZiBhIGtleSBkb2Vzbid0IGV4aXN0XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJyZWFrcG9pbnQod2lkdGgpIHtcbiAgdmFyIGJyZWFrcG9pbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBCUkVBS1BPSU5UUztcbiAgLy8gRmluZCB0aGUgYnJlYWtwb2ludCAoa2V5KSB3aG9zZSB2YWx1ZSBpcyA8PSB3aW5kb3dXaWR0aCBzdGFydGluZyB3aXRoIGxhcmdlc3QgZmlyc3RcbiAgcmV0dXJuIEJSRUFLUE9JTlRfS0VZUy5maW5kKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gYnJlYWtwb2ludHNba2V5XSA8PSB3aWR0aDtcbiAgfSk7XG59XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGEgbWF4IGJyZWFrcG9pbnQga2V5LFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIGB3aWR0aGAgZmFsbHMgd2l0aGluIHRoZSBtYXhcbiAqIGJyZWFrcG9pbnQgb3IgYW55IGJyZWFrcG9pbnRzIGJlbG93XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIENhbiBlaXRoZXIgYmUgdGhlIGZ1bGwgd2luZG93IHdpZHRoIG9yIGFueSB3aWR0aFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50U2l6ZSB8IG51bWJlcn0gbWF4IFRoZSBuYW1lZCBicmVha3BvaW50IG9yIGN1c3RvbSBudW1iZXIgdG8gY2hlY2sgYWdhaW5zdFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50c30gYnJlYWtwb2ludHMgQW4gb2JqZWN0IHdpdGgga2V5cyBmb3Igc2l6aW5nIGFuZCB2YWx1ZXMgZm9yIG1pbmltdW0gd2lkdGhcbiAqIEByZXR1cm5zIHtib29sZWFufSBXaWxsIHJldHVybiBgZmFsc2VgIGlmIGl0IGNhbid0IGZpbmQgYSB2YWx1ZSBmb3IgdGhlIGBtYXhgIGJyZWFrcG9pbnRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXRoaW5NYXhCcmVha3BvaW50KHdpZHRoLCBtYXgpIHtcbiAgdmFyIGJyZWFrcG9pbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBCUkVBS1BPSU5UUztcblxuICBpZiAodHlwZW9mIG1heCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gd2lkdGggPD0gbWF4O1xuICB9IGVsc2Uge1xuICAgIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IGdldEJyZWFrcG9pbnQod2lkdGgsIGJyZWFrcG9pbnRzKTtcbiAgICByZXR1cm4gY3VycmVudEJyZWFrcG9pbnQgPyBicmVha3BvaW50c1tjdXJyZW50QnJlYWtwb2ludF0gPD0gYnJlYWtwb2ludHNbbWF4XSA6IGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGEgbWluIGJyZWFrcG9pbnQga2V5LFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIGB3aWR0aGAgZmFsbHMgd2l0aGluIHRoZSBtaW5cbiAqIGJyZWFrcG9pbnQgb3IgYW55IGJyZWFrcG9pbnRzIGFib3ZlXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIENhbiBlaXRoZXIgYmUgdGhlIGZ1bGwgd2luZG93IHdpZHRoIG9yIGFueSB3aWR0aFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50U2l6ZSB8IG51bWJlcn0gbWluIFRoZSBuYW1lZCBicmVha3BvaW50IG9yIGN1c3RvbSBudW1iZXIgdG8gY2hlY2sgYWdhaW5zdFxuICogQHBhcmFtIHtFdWlCcmVha3BvaW50c30gYnJlYWtwb2ludHMgQW4gb2JqZWN0IHdpdGgga2V5cyBmb3Igc2l6aW5nIGFuZCB2YWx1ZXMgZm9yIG1pbmltdW0gd2lkdGhcbiAqIEByZXR1cm5zIHtib29sZWFufSBXaWxsIHJldHVybiBgZmFsc2VgIGlmIGl0IGNhbid0IGZpbmQgYSB2YWx1ZSBmb3IgdGhlIGBtaW5gIGJyZWFrcG9pbnRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNXaXRoaW5NaW5CcmVha3BvaW50KHdpZHRoLCBtaW4pIHtcbiAgdmFyIGJyZWFrcG9pbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBCUkVBS1BPSU5UUztcblxuICBpZiAodHlwZW9mIG1pbiA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gd2lkdGggPj0gbWluO1xuICB9IGVsc2Uge1xuICAgIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IGdldEJyZWFrcG9pbnQod2lkdGgsIGJyZWFrcG9pbnRzKTtcbiAgICByZXR1cm4gY3VycmVudEJyZWFrcG9pbnQgPyBicmVha3BvaW50c1tjdXJyZW50QnJlYWtwb2ludF0gPj0gYnJlYWtwb2ludHNbbWluXSA6IGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IGB3aWR0aGAgYW5kIGFuIGFycmF5IG9mIGJyZWFrcG9pbnQga2V5cyxcbiAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIG9yIGZhbHNlIGlmIHRoZSBgd2lkdGhgIGZhbGxzIHdpdGhpblxuICogYW55IG9mIHRoZSBuYW1lZCBicmVha3BvaW50c1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBDYW4gZWl0aGVyIGJlIHRoZSBmdWxsIHdpbmRvdyB3aWR0aCBvciBhbnkgd2lkdGhcbiAqIEBwYXJhbSB7RXVpQnJlYWtwb2ludFNpemVbXX0gc2l6ZXMgQW4gYXJyYXkgb2YgbmFtZWQgYnJlYWtwb2ludHNcbiAqIEBwYXJhbSB7RXVpQnJlYWtwb2ludHN9IGJyZWFrcG9pbnRzIEFuIG9iamVjdCB3aXRoIGtleXMgZm9yIHNpemluZyBhbmQgdmFsdWVzIGZvciBtaW5pbXVtIHdpZHRoXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgY3VycmVudCBicmVha3BvaW50IG5hbWUgaXMgaW5jbHVkZWQgaW4gYHNpemVzYFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpdGhpbkJyZWFrcG9pbnRzKHdpZHRoLCBzaXplcykge1xuICB2YXIgYnJlYWtwb2ludHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IEJSRUFLUE9JTlRTO1xuICB2YXIgY3VycmVudEJyZWFrcG9pbnQgPSBnZXRCcmVha3BvaW50KHdpZHRoLCBicmVha3BvaW50cyk7XG4gIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCA/IHNpemVzLmluY2x1ZGVzKGN1cnJlbnRCcmVha3BvaW50KSA6IGZhbHNlO1xufSIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vdGhlbWUnO1xuaW1wb3J0IHsgdGhyb3R0bGUgfSBmcm9tICcuLi90aHJvdHRsZSc7XG5pbXBvcnQgeyBnZXRCcmVha3BvaW50IH0gZnJvbSAnLi9icmVha3BvaW50JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEN1cnJlbnRFdWlCcmVha3BvaW50Q29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG4vKipcbiAqIFRvcCBsZXZlbCBwcm92aWRlciAobmVzdGVkIHdpdGhpbiBFdWlQcm92aWRlcikgd2hpY2ggcHJvdmlkZXMgYSBzaW5nbGVcbiAqIHJlc2l6ZSBsaXN0ZW5lciB0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBiYXNlZCBvbiB3aW5kb3cgd2lkdGhcbiAqL1xuXG5leHBvcnQgdmFyIEN1cnJlbnRFdWlCcmVha3BvaW50UHJvdmlkZXIgPSBmdW5jdGlvbiBDdXJyZW50RXVpQnJlYWtwb2ludFByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcblxuICB2YXIgX3VzZUV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKSxcbiAgICAgIGJyZWFrcG9pbnRzID0gX3VzZUV1aVRoZW1lLmV1aVRoZW1lLmJyZWFrcG9pbnQ7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gZ2V0QnJlYWtwb2ludCh3aW5kb3cuaW5uZXJXaWR0aCwgYnJlYWtwb2ludHMpIDogdW5kZWZpbmVkKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgY3VycmVudEJyZWFrcG9pbnQgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0Q3VycmVudEJyZWFrcG9pbnQgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9uV2luZG93UmVzaXplID0gdGhyb3R0bGUoZnVuY3Rpb24gKCkge1xuICAgICAgc2V0Q3VycmVudEJyZWFrcG9pbnQoZ2V0QnJlYWtwb2ludCh3aW5kb3cuaW5uZXJXaWR0aCwgYnJlYWtwb2ludHMpKTtcbiAgICB9LCA1MCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uV2luZG93UmVzaXplKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBvbldpbmRvd1Jlc2l6ZSk7XG4gICAgfTtcbiAgfSwgW2JyZWFrcG9pbnRzXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEN1cnJlbnRFdWlCcmVha3BvaW50Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjdXJyZW50QnJlYWtwb2ludFxuICB9LCBjaGlsZHJlbik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aVRoZW1lQW1zdGVyZGFtIH0gZnJvbSAnLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS90aGVtZSc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTE9SX01PREUsIGdldENvbXB1dGVkIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIEV1aVN5c3RlbUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChFdWlUaGVtZUFtc3RlcmRhbSk7XG5leHBvcnQgdmFyIEV1aU1vZGlmaWNhdGlvbnNDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe30pO1xuZXhwb3J0IHZhciBFdWlDb2xvck1vZGVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoREVGQVVMVF9DT0xPUl9NT0RFKTtcbmV4cG9ydCB2YXIgRXVpVGhlbWVDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoZ2V0Q29tcHV0ZWQoRXVpVGhlbWVBbXN0ZXJkYW0sIHt9LCBERUZBVUxUX0NPTE9SX01PREUpKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgQ09MT1JfTU9ERVNfU1RBTkRBUkQgPSB7XG4gIGxpZ2h0OiAnTElHSFQnLFxuICBkYXJrOiAnREFSSydcbn07XG5leHBvcnQgdmFyIENPTE9SX01PREVTX0lOVkVSU0UgPSAnSU5WRVJTRSc7IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENPTE9SX01PREVTX1NUQU5EQVJELCBDT0xPUl9NT0RFU19JTlZFUlNFIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgdmFyIERFRkFVTFRfQ09MT1JfTU9ERSA9IENPTE9SX01PREVTX1NUQU5EQVJELmxpZ2h0O1xuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHBhcmFtZXRlciBpcyBhbiBvYmplY3RcbiAqIEBwYXJhbSB7YW55fSBvYmogLSBBbnl0aGluZ1xuICovXG5cbnZhciBpc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICByZXR1cm4gb2JqICYmIF90eXBlb2Yob2JqKSA9PT0gJ29iamVjdCc7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGNvbG9yIG1vZGUgaXMgYGludmVyc2VgXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JNb2RlIC0gYGxpZ2h0YCwgYGRhcmtgLCBvciBgaW52ZXJzZWBcbiAqL1xuXG5cbmV4cG9ydCB2YXIgaXNJbnZlcnNlQ29sb3JNb2RlID0gZnVuY3Rpb24gaXNJbnZlcnNlQ29sb3JNb2RlKGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSBDT0xPUl9NT0RFU19JTlZFUlNFO1xufTtcbi8qKlxuICogUmV0dXJucyB0aGUgY29sb3IgbW9kZSBjb25maWd1cmVkIGluIHRoZSBjdXJyZW50IEV1aVRoZW1lUHJvdmlkZXIuXG4gKiBSZXR1cm5zIHRoZSBwYXJlbnQgY29sb3IgbW9kZSBpZiBub25lIGlzIGV4cGxpY2l0eSBzZXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb01vZGUgLSBgbGlnaHRgLCBgZGFya2AsIG9yIGBpbnZlcnNlYFxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudENvbG9yTW9kZSAtIGBMSUdIVGAgb3IgYERBUktgOyB1c2VkIGFzIHRoZSBmYWxsYmFja1xuICovXG5cbmV4cG9ydCB2YXIgZ2V0Q29sb3JNb2RlID0gZnVuY3Rpb24gZ2V0Q29sb3JNb2RlKGNvbG9yTW9kZSwgcGFyZW50Q29sb3JNb2RlKSB7XG4gIGlmIChjb2xvck1vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiBwYXJlbnRDb2xvck1vZGUgfHwgREVGQVVMVF9DT0xPUl9NT0RFO1xuICB9XG5cbiAgdmFyIG1vZGUgPSBjb2xvck1vZGUudG9VcHBlckNhc2UoKTtcblxuICBpZiAoaXNJbnZlcnNlQ29sb3JNb2RlKG1vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudENvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayB8fCBwYXJlbnRDb2xvck1vZGUgPT09IHVuZGVmaW5lZCA/IENPTE9SX01PREVTX1NUQU5EQVJELmxpZ2h0IDogQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyaztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbW9kZTtcbiAgfVxufTtcbi8qKlxuICogUmV0dXJucyBhIHZhbHVlIGF0IGEgZ2l2ZW4gcGF0aCBvbiBhbiBvYmplY3QuXG4gKiBJZiBgY29sb3JNb2RlYCBpcyBwcm92aWRlZCwgd2lsbCBzY29wZSB0aGUgdmFsdWUgdG8gdGhlIGFwcHJvcHJpYXRlIGNvbG9yIG1vZGUga2V5IChMSUdIVFxcREFSSylcbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IF9wYXRoIC0gRG90LW5vdGF0ZWQgc3RyaW5nIHRvIGEgcGF0aCBvbiB0aGUgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JNb2RlIC0gYGxpZ2h0YCBvciBgZGFya2BcbiAqL1xuXG5leHBvcnQgdmFyIGdldE9uID0gZnVuY3Rpb24gZ2V0T24obW9kZWwsIF9wYXRoLCBjb2xvck1vZGUpIHtcbiAgdmFyIHBhdGggPSBfcGF0aC5zcGxpdCgnLicpO1xuXG4gIHZhciBub2RlID0gbW9kZWw7XG5cbiAgd2hpbGUgKHBhdGgubGVuZ3RoKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBwYXRoLnNoaWZ0KCk7XG5cbiAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChjb2xvck1vZGUgJiYgbm9kZS5oYXNPd25Qcm9wZXJ0eShjb2xvck1vZGUpID09PSB0cnVlICYmIG5vZGVbY29sb3JNb2RlXS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAobm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdIGluc3RhbmNlb2YgQ29tcHV0ZWQpIHtcbiAgICAgICAgICBub2RlID0gbm9kZVtjb2xvck1vZGVdW3NlZ21lbnRdLmdldFZhbHVlKG51bGwsIG51bGwsIG5vZGUsIGNvbG9yTW9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGVbY29sb3JNb2RlXVtzZWdtZW50XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5vZGVbc2VnbWVudF0gaW5zdGFuY2VvZiBDb21wdXRlZCkge1xuICAgICAgICBub2RlID0gbm9kZVtzZWdtZW50XS5nZXRWYWx1ZShudWxsLCBudWxsLCBub2RlLCBjb2xvck1vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5vZGVbc2VnbWVudF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBTZXRzIGEgdmFsdWUgYXQgYSBnaXZlbiBwYXRoIG9uIGFuIG9iamVjdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IF9wYXRoIC0gRG90LW5vdGF0ZWQgc3RyaW5nIHRvIGEgcGF0aCBvbiB0aGUgb2JqZWN0XG4gKiBAcGFyYW0ge2FueX0gc3RyaW5nIC0gIFRoZSB2YWx1ZSB0byBzZXRcbiAqL1xuXG5leHBvcnQgdmFyIHNldE9uID0gZnVuY3Rpb24gc2V0T24obW9kZWwsIF9wYXRoLCB2YWx1ZSkge1xuICB2YXIgcGF0aCA9IF9wYXRoLnNwbGl0KCcuJyk7XG5cbiAgdmFyIHByb3BlcnR5TmFtZSA9IHBhdGgucG9wKCk7XG4gIHZhciBub2RlID0gbW9kZWw7XG5cbiAgd2hpbGUgKHBhdGgubGVuZ3RoKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBwYXRoLnNoaWZ0KCk7XG5cbiAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eShzZWdtZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIG5vZGVbc2VnbWVudF0gPSB7fTtcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZVtzZWdtZW50XTtcbiAgfVxuXG4gIG5vZGVbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICByZXR1cm4gdHJ1ZTtcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBjbGFzcyB0byBzdG9yZSB0aGUgYGNvbXB1dGVyYCBtZXRob2QgYW5kIGl0cyBldmVudHVhbCBwYXJhbWV0ZXJzLlxuICogQWxsb3dzIGZvciBvbi1kZW1hbmQgY29tcHV0YXRpb24gd2l0aCB1cC10by1kYXRlIHBhcmFtZXRlcnMgdmlhIGBnZXRWYWx1ZWAgbWV0aG9kLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wdXRlciAtIEZ1bmN0aW9uIHRvIGJlIGNvbXB1dGVkXG4gKiBAcGFyYW0ge3N0cmluZyB8IGFycmF5fSBkZXBlbmRlbmNpZXMgLSBEZXBlbmRlbmNpZXMgcGFzc2VkIHRvIHRoZSBgY29tcHV0ZXJgIGFzIHBhcmFtZXRlcnNcbiAqL1xuXG5leHBvcnQgdmFyIENvbXB1dGVkID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ29tcHV0ZWQoY29tcHV0ZXIpIHtcbiAgICB2YXIgZGVwZW5kZW5jaWVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb21wdXRlZCk7XG5cbiAgICB0aGlzLmNvbXB1dGVyID0gY29tcHV0ZXI7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXM7XG4gIH1cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBgY29tcHV0ZXJgIG1ldGhvZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0aGVtZVxuICAgKiBieSB0YWtpbmcgaW50byBhY2NvdW50IHByZXZpb3VzbHkgY29tcHV0ZWQgdmFsdWVzIGFuZCBtb2RpZmljYXRpb25zLlxuICAgKiBAcGFyYW0ge1Byb3h5IHwgb2JqZWN0fSBiYXNlIC0gQ29tcHV0ZWQgb3IgdW5jb21wdXRlZCB0aGVtZVxuICAgKiBAcGFyYW0ge1Byb3h5IHwgb2JqZWN0fSBtb2RpZmljYXRpb25zIC0gVGhlbWUgdmFsdWUgb3ZlcnJpZGVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB3b3JraW5nIC0gUGFydGlhbGx5IGNvbXB1dGVkIHRoZW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICAgKi9cblxuXG4gIF9jcmVhdGVDbGFzcyhDb21wdXRlZCwgW3tcbiAgICBrZXk6IFwiZ2V0VmFsdWVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoYmFzZSkge1xuICAgICAgdmFyIG1vZGlmaWNhdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdmFyIHdvcmtpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBjb2xvck1vZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCF0aGlzLmRlcGVuZGVuY2llcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZXIod29ya2luZyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmRlcGVuZGVuY2llcykpIHtcbiAgICAgICAgdmFyIF9yZWYsIF9nZXRPbjtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlcigoX3JlZiA9IChfZ2V0T24gPSBnZXRPbih3b3JraW5nLCB0aGlzLmRlcGVuZGVuY2llcykpICE9PSBudWxsICYmIF9nZXRPbiAhPT0gdm9pZCAwID8gX2dldE9uIDogZ2V0T24obW9kaWZpY2F0aW9ucywgdGhpcy5kZXBlbmRlbmNpZXMsIGNvbG9yTW9kZSkpICE9PSBudWxsICYmIF9yZWYgIT09IHZvaWQgMCA/IF9yZWYgOiBnZXRPbihiYXNlLCB0aGlzLmRlcGVuZGVuY2llcywgY29sb3JNb2RlKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXB1dGVyKHRoaXMuZGVwZW5kZW5jaWVzLm1hcChmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgICAgICB2YXIgX3JlZjIsIF9nZXRPbjI7XG5cbiAgICAgICAgcmV0dXJuIChfcmVmMiA9IChfZ2V0T24yID0gZ2V0T24od29ya2luZywgZGVwZW5kZW5jeSkpICE9PSBudWxsICYmIF9nZXRPbjIgIT09IHZvaWQgMCA/IF9nZXRPbjIgOiBnZXRPbihtb2RpZmljYXRpb25zLCBkZXBlbmRlbmN5LCBjb2xvck1vZGUpKSAhPT0gbnVsbCAmJiBfcmVmMiAhPT0gdm9pZCAwID8gX3JlZjIgOiBnZXRPbihiYXNlLCBkZXBlbmRlbmN5LCBjb2xvck1vZGUpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDb21wdXRlZDtcbn0oKTtcbi8qKlxuICogUmV0dXJucyBhIENsYXNzIChgQ29tcHV0ZWRgKSB0aGF0IHN0b3JlcyB0aGUgYXJiaXRyYXJ5IGNvbXB1dGVyIG1ldGhvZFxuICogYW5kIHJlZmVyZW5jZXMgdG8gaXRzIG9wdGlvbmFsIGRlcGVuZGVjaWVzLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcHV0ZXIgLSBBcmJpdHJhcnkgbWV0aG9kIHRvIGJlIGNhbGxlZCBhdCBjb21wdXRlIHRpbWUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IGFycmF5fSBkZXBlbmRlbmNpZXMgLSBWYWx1ZXMgdGhhdCB3aWxsIGJlIHByb3ZpZGVkIHRvIGBjb21wdXRlcmAgYXQgY29tcHV0ZSB0aW1lLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlZChjb21wLCBkZXApIHtcbiAgcmV0dXJuIG5ldyBDb21wdXRlZChjb21wLCBkZXApO1xufVxuLyoqXG4gKiBUYWtlcyBhbiB1bmNvbXB1dGVkIHRoZW1lLCBhbmQgY29tcHV0ZXMgYW5kIHJldHVybnMgYWxsIHZhbHVlcyB0YWtpbmdcbiAqIGludG8gY29uc2lkZXJhdGlvbiB2YWx1ZSBvdmVycmlkZXMgYW5kIGNvbmZpZ3VyZWQgY29sb3IgbW9kZS5cbiAqIE92ZXJyaWRlcyB0YWtlIHByZWNlZGVuY2UsIGFuZCBvbmx5IHZhbHVlcyBpbiB0aGUgY3VycmVudCBjb2xvciBtb2RlXG4gKiBhcmUgY29tcHV0ZWQgYW5kIHJldHVybmVkLlxuICogQHBhcmFtIHtQcm94eX0gYmFzZSAtIE9iamVjdCB0byB0cmFuc2Zvcm0gaW50byBQcm94eVxuICogQHBhcmFtIHtQcm94eSB8IG9iamVjdH0gb3ZlciAtIFVuaXF1ZSBpZGVudGlmaWVyIG9yIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvck1vZGUgLSBgbGlnaHRgIG9yIGBkYXJrYFxuICovXG5cbmV4cG9ydCB2YXIgZ2V0Q29tcHV0ZWQgPSBmdW5jdGlvbiBnZXRDb21wdXRlZChiYXNlLCBvdmVyLCBjb2xvck1vZGUpIHtcbiAgdmFyIG91dHB1dCA9IHtcbiAgICB0aGVtZU5hbWU6IGJhc2Uua2V5XG4gIH07XG5cbiAgZnVuY3Rpb24gbG9vcChiYXNlLCBvdmVyKSB7XG4gICAgdmFyIGNoZWNrRXhpc3RpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgIHZhciBwYXRoID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG4gICAgT2JqZWN0LmtleXMoYmFzZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbmV3UGF0aCA9IHBhdGggPyBcIlwiLmNvbmNhdChwYXRoLCBcIi5cIikuY29uY2F0KGtleSkgOiBcIlwiLmNvbmNhdChrZXkpOyAvLyBAdHMtZXhwZWN0LWVycm9yIGBrZXlgIGlzIG5vdCBuZWNlc3NhcmlseSBhIGNvbG9yTW9kZSBrZXlcblxuICAgICAgaWYgKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LnZhbHVlcyhDT0xPUl9NT0RFU19TVEFOREFSRCkpLCBbY29sb3JNb2RlXSkuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBpZiAoa2V5ICE9PSBjb2xvck1vZGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGNvbG9yTW9kZVNlZ21lbnQgPSBuZXcgUmVnRXhwKFwiKFxcXFwuXCIuY29uY2F0KGNvbG9yTW9kZSwgXCJcXFxcYil8KFxcXFxiXCIpLmNvbmNhdChjb2xvck1vZGUsIFwiXFxcXC4pXCIpKTtcbiAgICAgICAgICBuZXdQYXRoID0gbmV3UGF0aC5yZXBsYWNlKGNvbG9yTW9kZVNlZ21lbnQsICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZXhpc3RpbmcgPSBjaGVja0V4aXN0aW5nICYmIGdldE9uKG91dHB1dCwgbmV3UGF0aCk7XG5cbiAgICAgIGlmICghZXhpc3RpbmcgfHwgaXNPYmplY3QoZXhpc3RpbmcpKSB7XG4gICAgICAgIHZhciBiYXNlVmFsdWUgPSBiYXNlW2tleV0gaW5zdGFuY2VvZiBDb21wdXRlZCA/IGJhc2Vba2V5XS5nZXRWYWx1ZShiYXNlLnJvb3QsIG92ZXIucm9vdCwgb3V0cHV0LCBjb2xvck1vZGUpIDogYmFzZVtrZXldO1xuICAgICAgICB2YXIgb3ZlclZhbHVlID0gb3ZlcltrZXldIGluc3RhbmNlb2YgQ29tcHV0ZWQgPyBvdmVyW2tleV0uZ2V0VmFsdWUoYmFzZS5yb290LCBvdmVyLnJvb3QsIG91dHB1dCwgY29sb3JNb2RlKSA6IG92ZXJba2V5XTtcblxuICAgICAgICBpZiAoaXNPYmplY3QoYmFzZVZhbHVlKSAmJiAhQXJyYXkuaXNBcnJheShiYXNlVmFsdWUpKSB7XG4gICAgICAgICAgbG9vcChiYXNlVmFsdWUsIG92ZXJWYWx1ZSAhPT0gbnVsbCAmJiBvdmVyVmFsdWUgIT09IHZvaWQgMCA/IG92ZXJWYWx1ZSA6IHt9LCBjaGVja0V4aXN0aW5nLCBuZXdQYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRPbihvdXRwdXQsIG5ld1BhdGgsIG92ZXJWYWx1ZSAhPT0gbnVsbCAmJiBvdmVyVmFsdWUgIT09IHZvaWQgMCA/IG92ZXJWYWx1ZSA6IGJhc2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSAvLyBDb21wdXRlIHN0YW5kYXJkIHRoZW1lIHZhbHVlcyBhbmQgYXBwbHkgb3ZlcnJpZGVzXG5cblxuICBsb29wKGJhc2UsIG92ZXIpOyAvLyBDb21wdXRlIGFuZCBhcHBseSBleHRlbnNpb24gdmFsdWVzIG9ubHlcblxuICBsb29wKG92ZXIsIHt9LCB0cnVlKTtcbiAgcmV0dXJuIG91dHB1dDtcbn07XG4vKipcbiAqIEJ1aWxkcyBhIFByb3h5IHdpdGggYSBjdXN0b20gYGhhbmRsZXJgIGRlc2lnbmVkIHRvIHNlbGYtcmVmZXJlbmNlIHZhbHVlc1xuICogYW5kIHByZXZlbnQgYXJiaXRyYXJ5IHZhbHVlIG92ZXJyaWRlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbCAtIE9iamVjdCB0byB0cmFuc2Zvcm0gaW50byBQcm94eVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyIG9yIG5hbWVcbiAqL1xuXG5leHBvcnQgdmFyIGJ1aWxkVGhlbWUgPSBmdW5jdGlvbiBidWlsZFRoZW1lKG1vZGVsLCBrZXkpIHtcbiAgdmFyIGhhbmRsZXIgPSB7XG4gICAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0Lm1vZGVsKTtcbiAgICB9LFxuICAgIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkge1xuICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0Lm1vZGVsLCBwcm90b3R5cGUpO1xuICAgIH0sXG4gICAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KTtcbiAgICB9LFxuICAgIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldC5tb2RlbCk7XG4gICAgfSxcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldC5tb2RlbCwga2V5KTtcbiAgICB9LFxuICAgIGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCBhdHRyaWJ1dGVzKSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQubW9kZWwsIHByb3BlcnR5LCBhdHRyaWJ1dGVzKTtcbiAgICB9LFxuICAgIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0Lmhhcyh0YXJnZXQubW9kZWwsIHByb3BlcnR5KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KF90YXJnZXQsIHByb3BlcnR5KSB7XG4gICAgICBpZiAocHJvcGVydHkgPT09ICdrZXknKSB7XG4gICAgICAgIHJldHVybiBfdGFyZ2V0W3Byb3BlcnR5XTtcbiAgICAgIH0gLy8gcHJldmVudCBTYWZhcmkgZnJvbSBsb2NraW5nIHVwIHdoZW4gdGhlIHByb3h5IGlzIHVzZWQgaW4gZGV2IHRvb2xzXG4gICAgICAvLyBhcyBpdCBkb2Vzbid0IHN1cHBvcnQgZ2V0UHJvdG90eXBlT2ZcblxuXG4gICAgICBpZiAocHJvcGVydHkgPT09ICdfX3Byb3RvX18nKSByZXR1cm4ge307XG4gICAgICB2YXIgdGFyZ2V0ID0gcHJvcGVydHkgPT09ICdyb290JyA/IF90YXJnZXQgOiBfdGFyZ2V0Lm1vZGVsIHx8IF90YXJnZXQ7IC8vIEB0cy1pZ25vcmUgYHN0cmluZ2AgaW5kZXggc2lnbmF0dXJlXG5cbiAgICAgIHZhciB2YWx1ZSA9IHRhcmdldFtwcm9wZXJ0eV07XG5cbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkoe1xuICAgICAgICAgIG1vZGVsOiB2YWx1ZSxcbiAgICAgICAgICByb290OiBfdGFyZ2V0LnJvb3QsXG4gICAgICAgICAga2V5OiBcIl9cIi5jb25jYXQoX3RhcmdldC5rZXkpXG4gICAgICAgIH0sIGhhbmRsZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LFxuICAgIG93bktleXM6IGZ1bmN0aW9uIG93bktleXModGFyZ2V0KSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRhcmdldC5tb2RlbCk7XG4gICAgfSxcbiAgICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QodGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cbiAgfTtcbiAgdmFyIHRoZW1lUHJveHkgPSBuZXcgUHJveHkoe1xuICAgIG1vZGVsOiBtb2RlbCxcbiAgICByb290OiBtb2RlbCxcbiAgICBrZXk6IGtleVxuICB9LCBoYW5kbGVyKTtcbiAgcmV0dXJuIHRoZW1lUHJveHk7XG59O1xuLyoqXG4gKiBEZWVwbHkgbWVyZ2VzIHR3byBvYmplY3RzLCB1c2luZyBgc291cmNlYCB2YWx1ZXMgd2hlbmV2ZXIgcG9zc2libGUuXG4gKiBAcGFyYW0ge29iamVjdH0gX3RhcmdldCAtIE9iamVjdCB3aXRoIGZhbGxiYWNrIHZhbHVlc1xuICogQHBhcmFtIHtvYmplY3R9IHNvdXJjZSAtIE9iamVjdCB3aXRoIGRlc2lyZWQgdmFsdWVzXG4gKi9cblxuZXhwb3J0IHZhciBtZXJnZURlZXAgPSBmdW5jdGlvbiBtZXJnZURlZXAoX3RhcmdldCkge1xuICB2YXIgc291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICB2YXIgdGFyZ2V0ID0gX29iamVjdFNwcmVhZCh7fSwgX3RhcmdldCk7XG5cbiAgaWYgKCFpc09iamVjdCh0YXJnZXQpIHx8ICFpc09iamVjdChzb3VyY2UpKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHRhcmdldFZhbHVlID0gdGFyZ2V0W2tleV07XG4gICAgdmFyIHNvdXJjZVZhbHVlID0gc291cmNlW2tleV07XG5cbiAgICBpZiAoaXNPYmplY3QodGFyZ2V0VmFsdWUpICYmIGlzT2JqZWN0KHNvdXJjZVZhbHVlKSkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBtZXJnZURlZXAoX29iamVjdFNwcmVhZCh7fSwgdGFyZ2V0VmFsdWUpLCBfb2JqZWN0U3ByZWFkKHt9LCBzb3VyY2VWYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0YXJnZXQ7XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGlmIHRoZSBzcGVjaWZpZWQgY29sb3IgaXMgXCJkYXJrXCIsIHdoaWNoIHVzdWFsbHkgbWVhbnNcbiAqIHlvdSBuZWVkIGxpZ2h0IHRleHQgaWYgeW91IHVzZSBpdCBhcyBhIGJhY2tncm91bmQgY29sb3IgdG8gZnVsZmlsbCBXQ0FHIGNvbnRyYXN0XG4gKiByZXF1aXJlbWVudC5cbiAqIFRoZSBjb2xvciBtdXN0IGJlIHNwZWNpZmllZCB2aWEgaXRzIHJlZCwgZ3JlZW4gYW5kIGJsdWUgdmFsdWUgaW4gdGhlIHJhbmdlIG9mXG4gKiAwIHRvIDI1NS5cbiAqIFRoZSBmb3JtdWxhIGlzIGJhc2VkIG9uIHRoaXMgU3RhY2tvdmVyZmxvdyBhbnN3ZXI6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTQzMDIzXG4gKiB3aGljaCBpdHNlbGYgaXMgYmFzZWQgdXBvbiB0aGUgV0NBRyByZWNvbW1lbmRhdGlvbiBmb3IgY29sb3IgY29udHJhc3QuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJlZCBUaGUgcmVkIGNvbXBvbmVudCBpbiB0aGUgcmFuZ2UgMCB0byAyNTVcbiAqIEBwYXJhbSB7bnVtYmVyfSBncmVlbiBUaGUgZ3JlZW4gY29tcG9uZW50IGluIHRoZSByYW5nZSAwIHRvIDI1NVxuICogQHBhcmFtIHtudW1iZXJ9IGJsdWUgVGhlIGJsdWUgY29tcG9uZW50IGluIHRoZSByYW5nZSAwIHRvIDI1NVxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbG9yIGlzIGRhcmssIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29sb3JEYXJrKHJlZCwgZ3JlZW4sIGJsdWUpIHtcbiAgdmFyIF9tYXAkbWFwID0gW3JlZCwgZ3JlZW4sIGJsdWVdLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjIC8gMjU1LjA7XG4gIH0pLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjIDw9IDAuMDM5MjggPyBjIC8gMTIuOTIgOiBNYXRoLnBvdygoYyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICB9KSxcbiAgICAgIF9tYXAkbWFwMiA9IF9zbGljZWRUb0FycmF5KF9tYXAkbWFwLCAzKSxcbiAgICAgIHIgPSBfbWFwJG1hcDJbMF0sXG4gICAgICBnID0gX21hcCRtYXAyWzFdLFxuICAgICAgYiA9IF9tYXAkbWFwMlsyXTtcblxuICB2YXIgbHVtaW5hbmNlID0gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xuICByZXR1cm4gbHVtaW5hbmNlIDw9IDAuMTc5O1xufSIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRIZXgoaGV4KSB7XG4gIHJldHVybiAvKF4jWzAtOUEtRl17Nn0kKXwoXiNbMC05QS1GXXszfSQpL2kudGVzdChoZXgpO1xufSIsICJpbXBvcnQgeyBtaW4sIG1heCB9IGZyb20gJy4vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoeCwgbG93ID0gMCwgaGlnaCA9IDEpID0+IHtcbiAgICByZXR1cm4gbWluKG1heChsb3csIHgpLCBoaWdoKTtcbn07XG4iLCAiaW1wb3J0IGxpbWl0IGZyb20gJy4vbGltaXQuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAocmdiKSA9PiB7XG4gICAgcmdiLl9jbGlwcGVkID0gZmFsc2U7XG4gICAgcmdiLl91bmNsaXBwZWQgPSByZ2Iuc2xpY2UoMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzsgaSsrKSB7XG4gICAgICAgIGlmIChpIDwgMykge1xuICAgICAgICAgICAgaWYgKHJnYltpXSA8IDAgfHwgcmdiW2ldID4gMjU1KSByZ2IuX2NsaXBwZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmdiW2ldID0gbGltaXQocmdiW2ldLCAwLCAyNTUpO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDMpIHtcbiAgICAgICAgICAgIHJnYltpXSA9IGxpbWl0KHJnYltpXSwgMCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJnYjtcbn07XG4iLCAiLy8gcG9ydGVkIGZyb20galF1ZXJ5J3MgJC50eXBlXG5jb25zdCBjbGFzc1RvVHlwZSA9IHt9O1xuZm9yIChsZXQgbmFtZSBvZiBbXG4gICAgJ0Jvb2xlYW4nLFxuICAgICdOdW1iZXInLFxuICAgICdTdHJpbmcnLFxuICAgICdGdW5jdGlvbicsXG4gICAgJ0FycmF5JyxcbiAgICAnRGF0ZScsXG4gICAgJ1JlZ0V4cCcsXG4gICAgJ1VuZGVmaW5lZCcsXG4gICAgJ051bGwnXG5dKSB7XG4gICAgY2xhc3NUb1R5cGVbYFtvYmplY3QgJHtuYW1lfV1gXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gY2xhc3NUb1R5cGVbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaildIHx8ICdvYmplY3QnO1xufVxuIiwgImltcG9ydCB0eXBlIGZyb20gJy4vdHlwZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChhcmdzLCBrZXlPcmRlciA9IG51bGwpID0+IHtcbiAgICAvLyBpZiBjYWxsZWQgd2l0aCBtb3JlIHRoYW4gMyBhcmd1bWVudHMsIHdlIHJldHVybiB0aGUgYXJndW1lbnRzXG4gICAgaWYgKGFyZ3MubGVuZ3RoID49IDMpIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKTtcbiAgICAvLyB3aXRoIGxlc3MgdGhhbiAzIGFyZ3Mgd2UgY2hlY2sgaWYgZmlyc3QgYXJnIGlzIG9iamVjdFxuICAgIC8vIGFuZCB1c2UgdGhlIGtleU9yZGVyIHN0cmluZyB0byBleHRyYWN0IGFuZCBzb3J0IHByb3BlcnRpZXNcbiAgICBpZiAodHlwZShhcmdzWzBdKSA9PSAnb2JqZWN0JyAmJiBrZXlPcmRlcikge1xuICAgICAgICByZXR1cm4ga2V5T3JkZXJcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5maWx0ZXIoKGspID0+IGFyZ3NbMF1ba10gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIC5tYXAoKGspID0+IGFyZ3NbMF1ba10pO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2Ugd2UganVzdCByZXR1cm4gdGhlIGZpcnN0IGFyZ3VtZW50XG4gICAgLy8gKHdoaWNoIHdlIHN1cHBvc2UgaXMgYW4gYXJyYXkgb2YgYXJncylcbiAgICByZXR1cm4gYXJnc1swXTtcbn07XG4iLCAiaW1wb3J0IHR5cGUgZnJvbSAnLi90eXBlLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKGFyZ3MpID0+IHtcbiAgICBpZiAoYXJncy5sZW5ndGggPCAyKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBsID0gYXJncy5sZW5ndGggLSAxO1xuICAgIGlmICh0eXBlKGFyZ3NbbF0pID09ICdzdHJpbmcnKSByZXR1cm4gYXJnc1tsXS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBudWxsO1xufTtcbiIsICJjb25zdCB7IFBJLCBtaW4sIG1heCB9ID0gTWF0aDtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBjbGlwX3JnYiB9IGZyb20gJy4vY2xpcF9yZ2IuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsaW1pdCB9IGZyb20gJy4vbGltaXQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBlIH0gZnJvbSAnLi90eXBlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5wYWNrIH0gZnJvbSAnLi91bnBhY2suanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsYXN0IH0gZnJvbSAnLi9sYXN0LmpzJztcblxuY29uc3QgVFdPUEkgPSBQSSAqIDI7XG5jb25zdCBQSVRISVJEID0gUEkgLyAzO1xuY29uc3QgREVHMlJBRCA9IFBJIC8gMTgwO1xuY29uc3QgUkFEMkRFRyA9IDE4MCAvIFBJO1xuXG5leHBvcnQgeyBQSSwgVFdPUEksIFBJVEhJUkQsIERFRzJSQUQsIFJBRDJERUcsIG1pbiwgbWF4IH07XG4iLCAiZXhwb3J0IGRlZmF1bHQge1xuICAgIGZvcm1hdDoge30sXG4gICAgYXV0b2RldGVjdDogW11cbn07XG4iLCAiaW1wb3J0IHsgbGFzdCwgY2xpcF9yZ2IsIHR5cGUgfSBmcm9tICcuL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBfaW5wdXQgZnJvbSAnLi9pby9pbnB1dC5qcyc7XG5cbmNsYXNzIENvbG9yIHtcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZShhcmdzWzBdKSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0uY29uc3RydWN0b3IgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0uY29uc3RydWN0b3IgPT09IHRoaXMuY29uc3RydWN0b3JcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyB0aGUgYXJndW1lbnQgaXMgYWxyZWFkeSBhIENvbG9yIGluc3RhbmNlXG4gICAgICAgICAgICByZXR1cm4gYXJnc1swXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBsYXN0IGFyZ3VtZW50IGNvdWxkIGJlIHRoZSBtb2RlXG4gICAgICAgIGxldCBtb2RlID0gbGFzdChhcmdzKTtcbiAgICAgICAgbGV0IGF1dG9kZXRlY3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgICBhdXRvZGV0ZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghX2lucHV0LnNvcnRlZCkge1xuICAgICAgICAgICAgICAgIF9pbnB1dC5hdXRvZGV0ZWN0ID0gX2lucHV0LmF1dG9kZXRlY3Quc29ydCgoYSwgYikgPT4gYi5wIC0gYS5wKTtcbiAgICAgICAgICAgICAgICBfaW5wdXQuc29ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGF1dG8tZGV0ZWN0IGZvcm1hdFxuICAgICAgICAgICAgZm9yIChsZXQgY2hrIG9mIF9pbnB1dC5hdXRvZGV0ZWN0KSB7XG4gICAgICAgICAgICAgICAgbW9kZSA9IGNoay50ZXN0KC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlKSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoX2lucHV0LmZvcm1hdFttb2RlXSkge1xuICAgICAgICAgICAgY29uc3QgcmdiID0gX2lucHV0LmZvcm1hdFttb2RlXS5hcHBseShcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIGF1dG9kZXRlY3QgPyBhcmdzIDogYXJncy5zbGljZSgwLCAtMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtZS5fcmdiID0gY2xpcF9yZ2IocmdiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBmb3JtYXQ6ICcgKyBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgYWxwaGEgY2hhbm5lbFxuICAgICAgICBpZiAobWUuX3JnYi5sZW5ndGggPT09IDMpIG1lLl9yZ2IucHVzaCgxKTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGlmICh0eXBlKHRoaXMuaGV4KSA9PSAnZnVuY3Rpb24nKSByZXR1cm4gdGhpcy5oZXgoKTtcbiAgICAgICAgcmV0dXJuIGBbJHt0aGlzLl9yZ2Iuam9pbignLCcpfV1gO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IENvbG9yO1xuIiwgIi8vIHRoaXMgZ2V0cyB1cGRhdGVkIGF1dG9tYXRpY2FsbHlcbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzIuNi4wJztcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uLmpzJztcblxuY29uc3QgY2hyb21hID0gKC4uLmFyZ3MpID0+IHtcbiAgICByZXR1cm4gbmV3IGNocm9tYS5Db2xvciguLi5hcmdzKTtcbn07XG5cbmNocm9tYS5Db2xvciA9IENvbG9yO1xuY2hyb21hLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG5leHBvcnQgZGVmYXVsdCBjaHJvbWE7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCBjbXlrMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnY215aycpO1xuICAgIGNvbnN0IFtjLCBtLCB5LCBrXSA9IGFyZ3M7XG4gICAgY29uc3QgYWxwaGEgPSBhcmdzLmxlbmd0aCA+IDQgPyBhcmdzWzRdIDogMTtcbiAgICBpZiAoayA9PT0gMSkgcmV0dXJuIFswLCAwLCAwLCBhbHBoYV07XG4gICAgcmV0dXJuIFtcbiAgICAgICAgYyA+PSAxID8gMCA6IDI1NSAqICgxIC0gYykgKiAoMSAtIGspLCAvLyByXG4gICAgICAgIG0gPj0gMSA/IDAgOiAyNTUgKiAoMSAtIG0pICogKDEgLSBrKSwgLy8gZ1xuICAgICAgICB5ID49IDEgPyAwIDogMjU1ICogKDEgLSB5KSAqICgxIC0gayksIC8vIGJcbiAgICAgICAgYWxwaGFcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY215azJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBtYXggfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJjbXlrID0gKC4uLmFyZ3MpID0+IHtcbiAgICBsZXQgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICByID0gciAvIDI1NTtcbiAgICBnID0gZyAvIDI1NTtcbiAgICBiID0gYiAvIDI1NTtcbiAgICBjb25zdCBrID0gMSAtIG1heChyLCBtYXgoZywgYikpO1xuICAgIGNvbnN0IGYgPSBrIDwgMSA/IDEgLyAoMSAtIGspIDogMDtcbiAgICBjb25zdCBjID0gKDEgLSByIC0gaykgKiBmO1xuICAgIGNvbnN0IG0gPSAoMSAtIGcgLSBrKSAqIGY7XG4gICAgY29uc3QgeSA9ICgxIC0gYiAtIGspICogZjtcbiAgICByZXR1cm4gW2MsIG0sIHksIGtdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmNteWs7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY215azJyZ2IgZnJvbSAnLi9jbXlrMnJnYi5qcyc7XG5pbXBvcnQgcmdiMmNteWsgZnJvbSAnLi9yZ2IyY215ay5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5jbXlrID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IyY215ayh0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmNteWsgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdjbXlrJyk7XG5cbmlucHV0LmZvcm1hdC5jbXlrID0gY215azJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdjbXlrJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2NteWsnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3Qgcm5kID0gKGEpID0+IE1hdGgucm91bmQoYSAqIDEwMCkgLyAxMDA7XG5cbi8qXG4gKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICogLSBoc2wyY3NzKGgscyxsKVxuICogLSBoc2wyY3NzKGgscyxsLGEpXG4gKiAtIGhzbDJjc3MoW2gscyxsXSwgbW9kZSlcbiAqIC0gaHNsMmNzcyhbaCxzLGwsYV0sIG1vZGUpXG4gKiAtIGhzbDJjc3Moe2gscyxsLGF9LCBtb2RlKVxuICovXG5jb25zdCBoc2wyY3NzID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBoc2xhID0gdW5wYWNrKGFyZ3MsICdoc2xhJyk7XG4gICAgbGV0IG1vZGUgPSBsYXN0KGFyZ3MpIHx8ICdsc2EnO1xuICAgIGhzbGFbMF0gPSBybmQoaHNsYVswXSB8fCAwKTtcbiAgICBoc2xhWzFdID0gcm5kKGhzbGFbMV0gKiAxMDApICsgJyUnO1xuICAgIGhzbGFbMl0gPSBybmQoaHNsYVsyXSAqIDEwMCkgKyAnJSc7XG4gICAgaWYgKG1vZGUgPT09ICdoc2xhJyB8fCAoaHNsYS5sZW5ndGggPiAzICYmIGhzbGFbM10gPCAxKSkge1xuICAgICAgICBoc2xhWzNdID0gaHNsYS5sZW5ndGggPiAzID8gaHNsYVszXSA6IDE7XG4gICAgICAgIG1vZGUgPSAnaHNsYSc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaHNsYS5sZW5ndGggPSAzO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bW9kZX0oJHtoc2xhLmpvaW4oJywnKX0pYDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzbDJjc3M7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBtaW4sIG1heCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcblxuLypcbiAqIHN1cHBvcnRlZCBhcmd1bWVudHM6XG4gKiAtIHJnYjJoc2wocixnLGIpXG4gKiAtIHJnYjJoc2wocixnLGIsYSlcbiAqIC0gcmdiMmhzbChbcixnLGJdKVxuICogLSByZ2IyaHNsKFtyLGcsYixhXSlcbiAqIC0gcmdiMmhzbCh7cixnLGIsYX0pXG4gKi9cbmNvbnN0IHJnYjJoc2wgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ3JnYmEnKTtcbiAgICBsZXQgW3IsIGcsIGJdID0gYXJncztcblxuICAgIHIgLz0gMjU1O1xuICAgIGcgLz0gMjU1O1xuICAgIGIgLz0gMjU1O1xuXG4gICAgY29uc3QgbWluUmdiID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IG1heFJnYiA9IG1heChyLCBnLCBiKTtcblxuICAgIGNvbnN0IGwgPSAobWF4UmdiICsgbWluUmdiKSAvIDI7XG4gICAgbGV0IHMsIGg7XG5cbiAgICBpZiAobWF4UmdiID09PSBtaW5SZ2IpIHtcbiAgICAgICAgcyA9IDA7XG4gICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHMgPVxuICAgICAgICAgICAgbCA8IDAuNVxuICAgICAgICAgICAgICAgID8gKG1heFJnYiAtIG1pblJnYikgLyAobWF4UmdiICsgbWluUmdiKVxuICAgICAgICAgICAgICAgIDogKG1heFJnYiAtIG1pblJnYikgLyAoMiAtIG1heFJnYiAtIG1pblJnYik7XG4gICAgfVxuXG4gICAgaWYgKHIgPT0gbWF4UmdiKSBoID0gKGcgLSBiKSAvIChtYXhSZ2IgLSBtaW5SZ2IpO1xuICAgIGVsc2UgaWYgKGcgPT0gbWF4UmdiKSBoID0gMiArIChiIC0gcikgLyAobWF4UmdiIC0gbWluUmdiKTtcbiAgICBlbHNlIGlmIChiID09IG1heFJnYikgaCA9IDQgKyAociAtIGcpIC8gKG1heFJnYiAtIG1pblJnYik7XG5cbiAgICBoICo9IDYwO1xuICAgIGlmIChoIDwgMCkgaCArPSAzNjA7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMyAmJiBhcmdzWzNdICE9PSB1bmRlZmluZWQpIHJldHVybiBbaCwgcywgbCwgYXJnc1szXV07XG4gICAgcmV0dXJuIFtoLCBzLCBsXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoc2w7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGhzbDJjc3MgZnJvbSAnLi9oc2wyY3NzLmpzJztcbmltcG9ydCByZ2IyaHNsIGZyb20gJy4uL2hzbC9yZ2IyaHNsLmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbi8qXG4gKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICogLSByZ2IyY3NzKHIsZyxiKVxuICogLSByZ2IyY3NzKHIsZyxiLGEpXG4gKiAtIHJnYjJjc3MoW3IsZyxiXSwgbW9kZSlcbiAqIC0gcmdiMmNzcyhbcixnLGIsYV0sIG1vZGUpXG4gKiAtIHJnYjJjc3Moe3IsZyxiLGF9LCBtb2RlKVxuICovXG5jb25zdCByZ2IyY3NzID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCByZ2JhID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgbGV0IG1vZGUgPSBsYXN0KGFyZ3MpIHx8ICdyZ2InO1xuICAgIGlmIChtb2RlLnN1YnN0cigwLCAzKSA9PSAnaHNsJykge1xuICAgICAgICByZXR1cm4gaHNsMmNzcyhyZ2IyaHNsKHJnYmEpLCBtb2RlKTtcbiAgICB9XG4gICAgcmdiYVswXSA9IHJvdW5kKHJnYmFbMF0pO1xuICAgIHJnYmFbMV0gPSByb3VuZChyZ2JhWzFdKTtcbiAgICByZ2JhWzJdID0gcm91bmQocmdiYVsyXSk7XG4gICAgaWYgKG1vZGUgPT09ICdyZ2JhJyB8fCAocmdiYS5sZW5ndGggPiAzICYmIHJnYmFbM10gPCAxKSkge1xuICAgICAgICByZ2JhWzNdID0gcmdiYS5sZW5ndGggPiAzID8gcmdiYVszXSA6IDE7XG4gICAgICAgIG1vZGUgPSAncmdiYSc7XG4gICAgfVxuICAgIHJldHVybiBgJHttb2RlfSgke3JnYmEuc2xpY2UoMCwgbW9kZSA9PT0gJ3JnYicgPyAzIDogNCkuam9pbignLCcpfSlgO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmNzcztcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHJvdW5kIH0gPSBNYXRoO1xuXG5jb25zdCBoc2wycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2wnKTtcbiAgICBjb25zdCBbaCwgcywgbF0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IGwgKiAyNTU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdDMgPSBbMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IGMgPSBbMCwgMCwgMF07XG4gICAgICAgIGNvbnN0IHQyID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgICAgICAgY29uc3QgdDEgPSAyICogbCAtIHQyO1xuICAgICAgICBjb25zdCBoXyA9IGggLyAzNjA7XG4gICAgICAgIHQzWzBdID0gaF8gKyAxIC8gMztcbiAgICAgICAgdDNbMV0gPSBoXztcbiAgICAgICAgdDNbMl0gPSBoXyAtIDEgLyAzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgaWYgKHQzW2ldIDwgMCkgdDNbaV0gKz0gMTtcbiAgICAgICAgICAgIGlmICh0M1tpXSA+IDEpIHQzW2ldIC09IDE7XG4gICAgICAgICAgICBpZiAoNiAqIHQzW2ldIDwgMSkgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzW2ldO1xuICAgICAgICAgICAgZWxzZSBpZiAoMiAqIHQzW2ldIDwgMSkgY1tpXSA9IHQyO1xuICAgICAgICAgICAgZWxzZSBpZiAoMyAqIHQzW2ldIDwgMikgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDNbaV0pICogNjtcbiAgICAgICAgICAgIGVsc2UgY1tpXSA9IHQxO1xuICAgICAgICB9XG4gICAgICAgIFtyLCBnLCBiXSA9IFtyb3VuZChjWzBdICogMjU1KSwgcm91bmQoY1sxXSAqIDI1NSksIHJvdW5kKGNbMl0gKiAyNTUpXTtcbiAgICB9XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMykge1xuICAgICAgICAvLyBrZWVwIGFscGhhIGNoYW5uZWxcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzWzNdXTtcbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzbDJyZ2I7XG4iLCAiaW1wb3J0IGhzbDJyZ2IgZnJvbSAnLi4vaHNsL2hzbDJyZ2IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcblxuY29uc3QgUkVfUkdCID0gL15yZ2JcXChcXHMqKC0/XFxkKyksXFxzKigtP1xcZCspXFxzKixcXHMqKC0/XFxkKylcXHMqXFwpJC87XG5jb25zdCBSRV9SR0JBID1cbiAgICAvXnJnYmFcXChcXHMqKC0/XFxkKyksXFxzKigtP1xcZCspXFxzKixcXHMqKC0/XFxkKylcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5jb25zdCBSRV9SR0JfUENUID1cbiAgICAvXnJnYlxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSUsXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccypcXCkkLztcbmNvbnN0IFJFX1JHQkFfUENUID1cbiAgICAvXnJnYmFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG5jb25zdCBSRV9IU0wgPVxuICAgIC9eaHNsXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqXFwpJC87XG5jb25zdCBSRV9IU0xBID1cbiAgICAvXmhzbGFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyksXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcblxuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgY3NzMnJnYiA9IChjc3MpID0+IHtcbiAgICBjc3MgPSBjc3MudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgbGV0IG07XG5cbiAgICBpZiAoaW5wdXQuZm9ybWF0Lm5hbWVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuZm9ybWF0Lm5hbWVkKGNzcyk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG5cbiAgICAvLyByZ2IoMjUwLDIwLDApXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQikpKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IG0uc2xpY2UoMSwgNCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJnYlszXSA9IDE7IC8vIGRlZmF1bHQgYWxwaGFcbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9XG5cbiAgICAvLyByZ2JhKDI1MCwyMCwwLDAuNClcbiAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfUkdCQSkpKSB7XG4gICAgICAgIGNvbnN0IHJnYiA9IG0uc2xpY2UoMSwgNSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxuXG4gICAgLy8gcmdiKDEwMCUsMCUsMCUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQl9QQ1QpKSkge1xuICAgICAgICBjb25zdCByZ2IgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgcmdiW2ldID0gcm91bmQocmdiW2ldICogMi41NSk7XG4gICAgICAgIH1cbiAgICAgICAgcmdiWzNdID0gMTsgLy8gZGVmYXVsdCBhbHBoYVxuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIHJnYmEoMTAwJSwwJSwwJSwwLjQpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQkFfUENUKSkpIHtcbiAgICAgICAgY29uc3QgcmdiID0gbS5zbGljZSgxLCA1KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgIHJnYltpXSA9IHJvdW5kKHJnYltpXSAqIDIuNTUpO1xuICAgICAgICB9XG4gICAgICAgIHJnYlszXSA9ICtyZ2JbM107XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxuXG4gICAgLy8gaHNsKDAsMTAwJSw1MCUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTCkpKSB7XG4gICAgICAgIGNvbnN0IGhzbCA9IG0uc2xpY2UoMSwgNCk7XG4gICAgICAgIGhzbFsxXSAqPSAwLjAxO1xuICAgICAgICBoc2xbMl0gKj0gMC4wMTtcbiAgICAgICAgY29uc3QgcmdiID0gaHNsMnJnYihoc2wpO1xuICAgICAgICByZ2JbM10gPSAxO1xuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH1cblxuICAgIC8vIGhzbGEoMCwxMDAlLDUwJSwwLjUpXG4gICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTEEpKSkge1xuICAgICAgICBjb25zdCBoc2wgPSBtLnNsaWNlKDEsIDQpO1xuICAgICAgICBoc2xbMV0gKj0gMC4wMTtcbiAgICAgICAgaHNsWzJdICo9IDAuMDE7XG4gICAgICAgIGNvbnN0IHJnYiA9IGhzbDJyZ2IoaHNsKTtcbiAgICAgICAgcmdiWzNdID0gK21bNF07IC8vIGRlZmF1bHQgYWxwaGEgPSAxXG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfVxufTtcblxuY3NzMnJnYi50ZXN0ID0gKHMpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICBSRV9SR0IudGVzdChzKSB8fFxuICAgICAgICBSRV9SR0JBLnRlc3QocykgfHxcbiAgICAgICAgUkVfUkdCX1BDVC50ZXN0KHMpIHx8XG4gICAgICAgIFJFX1JHQkFfUENULnRlc3QocykgfHxcbiAgICAgICAgUkVfSFNMLnRlc3QocykgfHxcbiAgICAgICAgUkVfSFNMQS50ZXN0KHMpXG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNzczJyZ2I7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5pbXBvcnQgcmdiMmNzcyBmcm9tICcuL3JnYjJjc3MuanMnO1xuaW1wb3J0IGNzczJyZ2IgZnJvbSAnLi9jc3MycmdiLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmNzcyA9IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgcmV0dXJuIHJnYjJjc3ModGhpcy5fcmdiLCBtb2RlKTtcbn07XG5cbmNocm9tYS5jc3MgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdjc3MnKTtcblxuaW5wdXQuZm9ybWF0LmNzcyA9IGNzczJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogNSxcbiAgICB0ZXN0OiAoaCwgLi4ucmVzdCkgPT4ge1xuICAgICAgICBpZiAoIXJlc3QubGVuZ3RoICYmIHR5cGUoaCkgPT09ICdzdHJpbmcnICYmIGNzczJyZ2IudGVzdChoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdjc3MnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmlucHV0LmZvcm1hdC5nbCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcmdiID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgcmdiWzBdICo9IDI1NTtcbiAgICByZ2JbMV0gKj0gMjU1O1xuICAgIHJnYlsyXSAqPSAyNTU7XG4gICAgcmV0dXJuIHJnYjtcbn07XG5cbmNocm9tYS5nbCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2dsJyk7XG5cbkNvbG9yLnByb3RvdHlwZS5nbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgcmV0dXJuIFtyZ2JbMF0gLyAyNTUsIHJnYlsxXSAvIDI1NSwgcmdiWzJdIC8gMjU1LCByZ2JbM11dO1xufTtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGZsb29yIH0gPSBNYXRoO1xuXG4vKlxuICogdGhpcyBpcyBiYXNpY2FsbHkganVzdCBIU1Ygd2l0aCBzb21lIG1pbm9yIHR3ZWFrc1xuICpcbiAqIGh1ZS4uIFswLi4zNjBdXG4gKiBjaHJvbWEgLi4gWzAuLjFdXG4gKiBncmF5bmVzcyAuLiBbMC4uMV1cbiAqL1xuXG5jb25zdCBoY2cycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoY2cnKTtcbiAgICBsZXQgW2gsIGMsIF9nXSA9IGFyZ3M7XG4gICAgbGV0IHIsIGcsIGI7XG4gICAgX2cgPSBfZyAqIDI1NTtcbiAgICBjb25zdCBfYyA9IGMgKiAyNTU7XG4gICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgciA9IGcgPSBiID0gX2c7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGggPT09IDM2MCkgaCA9IDA7XG4gICAgICAgIGlmIChoID4gMzYwKSBoIC09IDM2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICAgICAgaCAvPSA2MDtcbiAgICAgICAgY29uc3QgaSA9IGZsb29yKGgpO1xuICAgICAgICBjb25zdCBmID0gaCAtIGk7XG4gICAgICAgIGNvbnN0IHAgPSBfZyAqICgxIC0gYyk7XG4gICAgICAgIGNvbnN0IHEgPSBwICsgX2MgKiAoMSAtIGYpO1xuICAgICAgICBjb25zdCB0ID0gcCArIF9jICogZjtcbiAgICAgICAgY29uc3QgdiA9IHAgKyBfYztcbiAgICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3YsIHQsIHBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtxLCB2LCBwXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcCwgdiwgdF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3AsIHEsIHZdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt0LCBwLCB2XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdiwgcCwgcV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoY2cycmdiO1xuIiwgImltcG9ydCB7IHVucGFjaywgbWF4LCBtaW4gfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmNvbnN0IHJnYjJoY2cgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgbWluUmdiID0gbWluKHIsIGcsIGIpO1xuICAgIGNvbnN0IG1heFJnYiA9IG1heChyLCBnLCBiKTtcbiAgICBjb25zdCBkZWx0YSA9IG1heFJnYiAtIG1pblJnYjtcbiAgICBjb25zdCBjID0gKGRlbHRhICogMTAwKSAvIDI1NTtcbiAgICBjb25zdCBfZyA9IChtaW5SZ2IgLyAoMjU1IC0gZGVsdGEpKSAqIDEwMDtcbiAgICBsZXQgaDtcbiAgICBpZiAoZGVsdGEgPT09IDApIHtcbiAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHIgPT09IG1heFJnYikgaCA9IChnIC0gYikgLyBkZWx0YTtcbiAgICAgICAgaWYgKGcgPT09IG1heFJnYikgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gICAgICAgIGlmIChiID09PSBtYXhSZ2IpIGggPSA0ICsgKHIgLSBnKSAvIGRlbHRhO1xuICAgICAgICBoICo9IDYwO1xuICAgICAgICBpZiAoaCA8IDApIGggKz0gMzYwO1xuICAgIH1cbiAgICByZXR1cm4gW2gsIGMsIF9nXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoY2c7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaGNnMnJnYiBmcm9tICcuL2hjZzJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoY2cgZnJvbSAnLi9yZ2IyaGNnLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhjZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhjZyh0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmhjZyA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hjZycpO1xuXG5pbnB1dC5mb3JtYXQuaGNnID0gaGNnMnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAxLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hjZycpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdoY2cnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiY29uc3QgUkVfSEVYID0gL14jPyhbQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfSkkLztcbmNvbnN0IFJFX0hFWEEgPSAvXiM/KFtBLUZhLWYwLTldezh9fFtBLUZhLWYwLTldezR9KSQvO1xuXG5jb25zdCBoZXgycmdiID0gKGhleCkgPT4ge1xuICAgIGlmIChoZXgubWF0Y2goUkVfSEVYKSkge1xuICAgICAgICAvLyByZW1vdmUgb3B0aW9uYWwgbGVhZGluZyAjXG4gICAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0IHx8IGhleC5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgICAgIGhleCA9IGhleC5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgc2l4LWRpZ2l0XG4gICAgICAgIGlmIChoZXgubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBoZXggPSBoZXguc3BsaXQoJycpO1xuICAgICAgICAgICAgaGV4ID0gaGV4WzBdICsgaGV4WzBdICsgaGV4WzFdICsgaGV4WzFdICsgaGV4WzJdICsgaGV4WzJdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHUgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgICAgY29uc3QgciA9IHUgPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAodSA+PiA4KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSB1ICYgMHhmZjtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbiAgICB9XG5cbiAgICAvLyBtYXRjaCByZ2JhIGhleCBmb3JtYXQsIGVnICNGRjAwMDA3N1xuICAgIGlmIChoZXgubWF0Y2goUkVfSEVYQSkpIHtcbiAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDUgfHwgaGV4Lmxlbmd0aCA9PT0gOSkge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIG9wdGlvbmFsIGxlYWRpbmcgI1xuICAgICAgICAgICAgaGV4ID0gaGV4LnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHBhbmQgc2hvcnQtbm90YXRpb24gdG8gZnVsbCBlaWdodC1kaWdpdFxuICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKTtcbiAgICAgICAgICAgIGhleCA9XG4gICAgICAgICAgICAgICAgaGV4WzBdICtcbiAgICAgICAgICAgICAgICBoZXhbMF0gK1xuICAgICAgICAgICAgICAgIGhleFsxXSArXG4gICAgICAgICAgICAgICAgaGV4WzFdICtcbiAgICAgICAgICAgICAgICBoZXhbMl0gK1xuICAgICAgICAgICAgICAgIGhleFsyXSArXG4gICAgICAgICAgICAgICAgaGV4WzNdICtcbiAgICAgICAgICAgICAgICBoZXhbM107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdSA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgICAgICBjb25zdCByID0gKHUgPj4gMjQpICYgMHhmZjtcbiAgICAgICAgY29uc3QgZyA9ICh1ID4+IDE2KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSAodSA+PiA4KSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGEgPSBNYXRoLnJvdW5kKCgodSAmIDB4ZmYpIC8gMHhmZikgKiAxMDApIC8gMTAwO1xuICAgICAgICByZXR1cm4gW3IsIGcsIGIsIGFdO1xuICAgIH1cblxuICAgIC8vIHdlIHVzZWQgdG8gY2hlY2sgZm9yIGNzcyBjb2xvcnMgaGVyZVxuICAgIC8vIGlmIF9pbnB1dC5jc3M/IGFuZCByZ2IgPSBfaW5wdXQuY3NzIGhleFxuICAgIC8vICAgICByZXR1cm4gcmdiXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gaGV4IGNvbG9yOiAke2hleH1gKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhleDJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBsYXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgcmdiMmhleCA9ICguLi5hcmdzKSA9PiB7XG4gICAgbGV0IFtyLCBnLCBiLCBhXSA9IHVucGFjayhhcmdzLCAncmdiYScpO1xuICAgIGxldCBtb2RlID0gbGFzdChhcmdzKSB8fCAnYXV0byc7XG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCkgYSA9IDE7XG4gICAgaWYgKG1vZGUgPT09ICdhdXRvJykge1xuICAgICAgICBtb2RlID0gYSA8IDEgPyAncmdiYScgOiAncmdiJztcbiAgICB9XG4gICAgciA9IHJvdW5kKHIpO1xuICAgIGcgPSByb3VuZChnKTtcbiAgICBiID0gcm91bmQoYik7XG4gICAgY29uc3QgdSA9IChyIDw8IDE2KSB8IChnIDw8IDgpIHwgYjtcbiAgICBsZXQgc3RyID0gJzAwMDAwMCcgKyB1LnRvU3RyaW5nKDE2KTsgLy8jLnRvVXBwZXJDYXNlKCk7XG4gICAgc3RyID0gc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gNik7XG4gICAgbGV0IGh4YSA9ICcwJyArIHJvdW5kKGEgKiAyNTUpLnRvU3RyaW5nKDE2KTtcbiAgICBoeGEgPSBoeGEuc3Vic3RyKGh4YS5sZW5ndGggLSAyKTtcbiAgICBzd2l0Y2ggKG1vZGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdyZ2JhJzpcbiAgICAgICAgICAgIHJldHVybiBgIyR7c3RyfSR7aHhhfWA7XG4gICAgICAgIGNhc2UgJ2FyZ2InOlxuICAgICAgICAgICAgcmV0dXJuIGAjJHtoeGF9JHtzdHJ9YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBgIyR7c3RyfWA7XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMmhleDtcbiIsICJpbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IHsgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaGV4MnJnYiBmcm9tICcuL2hleDJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoZXggZnJvbSAnLi9yZ2IyaGV4LmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhleCA9IGZ1bmN0aW9uIChtb2RlKSB7XG4gICAgcmV0dXJuIHJnYjJoZXgodGhpcy5fcmdiLCBtb2RlKTtcbn07XG5cbmNocm9tYS5oZXggPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoZXgnKTtcblxuaW5wdXQuZm9ybWF0LmhleCA9IGhleDJyZ2I7XG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDQsXG4gICAgdGVzdDogKGgsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXJlc3QubGVuZ3RoICYmXG4gICAgICAgICAgICB0eXBlKGgpID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgWzMsIDQsIDUsIDYsIDcsIDgsIDldLmluZGV4T2YoaC5sZW5ndGgpID49IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hleCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIGxpbWl0LCBUV09QSSwgUElUSElSRCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgY29zIH0gPSBNYXRoO1xuXG4vKlxuICogaHVlIFswLi4zNjBdXG4gKiBzYXR1cmF0aW9uIFswLi4xXVxuICogaW50ZW5zaXR5IFswLi4xXVxuICovXG5jb25zdCBoc2kycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvKlxuICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICBodHRwOi8vaHVtbWVyLnN0YW5mb3JkLmVkdS9tdXNlaW5mby9kb2MvZXhhbXBsZXMvaHVtZHJ1bS9rZXlzY2FwZTIvaHNpMnJnYi5jcHBcbiAgICAqL1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzaScpO1xuICAgIGxldCBbaCwgcywgaV0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuXG4gICAgaWYgKGlzTmFOKGgpKSBoID0gMDtcbiAgICBpZiAoaXNOYU4ocykpIHMgPSAwO1xuICAgIC8vIG5vcm1hbGl6ZSBodWVcbiAgICBpZiAoaCA+IDM2MCkgaCAtPSAzNjA7XG4gICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICBoIC89IDM2MDtcbiAgICBpZiAoaCA8IDEgLyAzKSB7XG4gICAgICAgIGIgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgciA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgZyA9IDEgLSAoYiArIHIpO1xuICAgIH0gZWxzZSBpZiAoaCA8IDIgLyAzKSB7XG4gICAgICAgIGggLT0gMSAvIDM7XG4gICAgICAgIHIgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgZyA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgYiA9IDEgLSAociArIGcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGggLT0gMiAvIDM7XG4gICAgICAgIGcgPSAoMSAtIHMpIC8gMztcbiAgICAgICAgYiA9ICgxICsgKHMgKiBjb3MoVFdPUEkgKiBoKSkgLyBjb3MoUElUSElSRCAtIFRXT1BJICogaCkpIC8gMztcbiAgICAgICAgciA9IDEgLSAoZyArIGIpO1xuICAgIH1cbiAgICByID0gbGltaXQoaSAqIHIgKiAzKTtcbiAgICBnID0gbGltaXQoaSAqIGcgKiAzKTtcbiAgICBiID0gbGltaXQoaSAqIGIgKiAzKTtcbiAgICByZXR1cm4gW3IgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhzaTJyZ2I7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCBUV09QSSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgbWluLCBzcXJ0LCBhY29zIH0gPSBNYXRoO1xuXG5jb25zdCByZ2IyaHNpID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvKlxuICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICBodHRwOi8vaHVtbWVyLnN0YW5mb3JkLmVkdS9tdXNlaW5mby9kb2MvZXhhbXBsZXMvaHVtZHJ1bS9rZXlzY2FwZTIvcmdiMmhzaS5jcHBcbiAgICAqL1xuICAgIGxldCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIHIgLz0gMjU1O1xuICAgIGcgLz0gMjU1O1xuICAgIGIgLz0gMjU1O1xuICAgIGxldCBoO1xuICAgIGNvbnN0IG1pbl8gPSBtaW4ociwgZywgYik7XG4gICAgY29uc3QgaSA9IChyICsgZyArIGIpIC8gMztcbiAgICBjb25zdCBzID0gaSA+IDAgPyAxIC0gbWluXyAvIGkgOiAwO1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIGggPSBOYU47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaCA9IChyIC0gZyArIChyIC0gYikpIC8gMjtcbiAgICAgICAgaCAvPSBzcXJ0KChyIC0gZykgKiAociAtIGcpICsgKHIgLSBiKSAqIChnIC0gYikpO1xuICAgICAgICBoID0gYWNvcyhoKTtcbiAgICAgICAgaWYgKGIgPiBnKSB7XG4gICAgICAgICAgICBoID0gVFdPUEkgLSBoO1xuICAgICAgICB9XG4gICAgICAgIGggLz0gVFdPUEk7XG4gICAgfVxuICAgIHJldHVybiBbaCAqIDM2MCwgcywgaV07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IyaHNpO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhzaTJyZ2IgZnJvbSAnLi9oc2kycmdiLmpzJztcbmltcG9ydCByZ2IyaHNpIGZyb20gJy4vcmdiMmhzaS5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oc2kgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoc2kodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oc2kgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoc2knKTtcblxuaW5wdXQuZm9ybWF0LmhzaSA9IGhzaTJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2knKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaHNpJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGhzbDJyZ2IgZnJvbSAnLi9oc2wycmdiLmpzJztcbmltcG9ydCByZ2IyaHNsIGZyb20gJy4vcmdiMmhzbC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5oc2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJoc2wodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5oc2wgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdoc2wnKTtcblxuaW5wdXQuZm9ybWF0LmhzbCA9IGhzbDJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdoc2wnKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnaHNsJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgZmxvb3IgfSA9IE1hdGg7XG5cbmNvbnN0IGhzdjJyZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzdicpO1xuICAgIGxldCBbaCwgcywgdl0gPSBhcmdzO1xuICAgIGxldCByLCBnLCBiO1xuICAgIHYgKj0gMjU1O1xuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIHIgPSBnID0gYiA9IHY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGggPT09IDM2MCkgaCA9IDA7XG4gICAgICAgIGlmIChoID4gMzYwKSBoIC09IDM2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICAgICAgaCAvPSA2MDtcblxuICAgICAgICBjb25zdCBpID0gZmxvb3IoaCk7XG4gICAgICAgIGNvbnN0IGYgPSBoIC0gaTtcbiAgICAgICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xuICAgICAgICBjb25zdCBxID0gdiAqICgxIC0gcyAqIGYpO1xuICAgICAgICBjb25zdCB0ID0gdiAqICgxIC0gcyAqICgxIC0gZikpO1xuXG4gICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFt2LCB0LCBwXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbcSwgdiwgcF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3AsIHYsIHRdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIFtyLCBnLCBiXSA9IFtwLCBxLCB2XTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICBbciwgZywgYl0gPSBbdCwgcCwgdl07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgW3IsIGcsIGJdID0gW3YsIHAsIHFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaHN2MnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IG1pbiwgbWF4IH0gPSBNYXRoO1xuXG4vKlxuICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAqIC0gcmdiMmhzdihyLGcsYilcbiAqIC0gcmdiMmhzdihbcixnLGJdKVxuICogLSByZ2IyaHN2KHtyLGcsYn0pXG4gKi9cbmNvbnN0IHJnYjJoc2wgPSAoLi4uYXJncykgPT4ge1xuICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGxldCBbciwgZywgYl0gPSBhcmdzO1xuICAgIGNvbnN0IG1pbl8gPSBtaW4ociwgZywgYik7XG4gICAgY29uc3QgbWF4XyA9IG1heChyLCBnLCBiKTtcbiAgICBjb25zdCBkZWx0YSA9IG1heF8gLSBtaW5fO1xuICAgIGxldCBoLCBzLCB2O1xuICAgIHYgPSBtYXhfIC8gMjU1LjA7XG4gICAgaWYgKG1heF8gPT09IDApIHtcbiAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgICAgIHMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHMgPSBkZWx0YSAvIG1heF87XG4gICAgICAgIGlmIChyID09PSBtYXhfKSBoID0gKGcgLSBiKSAvIGRlbHRhO1xuICAgICAgICBpZiAoZyA9PT0gbWF4XykgaCA9IDIgKyAoYiAtIHIpIC8gZGVsdGE7XG4gICAgICAgIGlmIChiID09PSBtYXhfKSBoID0gNCArIChyIC0gZykgLyBkZWx0YTtcbiAgICAgICAgaCAqPSA2MDtcbiAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDtcbiAgICB9XG4gICAgcmV0dXJuIFtoLCBzLCB2XTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJoc2w7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgaHN2MnJnYiBmcm9tICcuL2hzdjJyZ2IuanMnO1xuaW1wb3J0IHJnYjJoc3YgZnJvbSAnLi9yZ2IyaHN2LmpzJztcblxuQ29sb3IucHJvdG90eXBlLmhzdiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMmhzdih0aGlzLl9yZ2IpO1xufTtcblxuY2hyb21hLmhzdiA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hzdicpO1xuXG5pbnB1dC5mb3JtYXQuaHN2ID0gaHN2MnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAyLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ2hzdicpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdoc3YnO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCAiZXhwb3J0IGRlZmF1bHQge1xuICAgIC8vIENvcnJlc3BvbmRzIHJvdWdobHkgdG8gUkdCIGJyaWdodGVyL2RhcmtlclxuICAgIEtuOiAxOCxcblxuICAgIC8vIEQ2NSBzdGFuZGFyZCByZWZlcmVudFxuICAgIFhuOiAwLjk1MDQ3LFxuICAgIFluOiAxLFxuICAgIFpuOiAxLjA4ODgzLFxuXG4gICAgdDA6IDAuMTM3OTMxMDM0LCAvLyA0IC8gMjlcbiAgICB0MTogMC4yMDY4OTY1NTIsIC8vIDYgLyAyOVxuICAgIHQyOiAwLjEyODQxODU1LCAvLyAzICogdDEgKiB0MVxuICAgIHQzOiAwLjAwODg1NjQ1MiAvLyB0MSAqIHQxICogdDFcbn07XG4iLCAiaW1wb3J0IExBQl9DT05TVEFOVFMgZnJvbSAnLi9sYWItY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcG93IH0gPSBNYXRoO1xuXG4vKlxuICogTCogWzAuLjEwMF1cbiAqIGEgWy0xMDAuLjEwMF1cbiAqIGIgWy0xMDAuLjEwMF1cbiAqL1xuY29uc3QgbGFiMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGFiJyk7XG4gICAgY29uc3QgW2wsIGEsIGJdID0gYXJncztcbiAgICBsZXQgeCwgeSwgeiwgciwgZywgYl87XG5cbiAgICB5ID0gKGwgKyAxNikgLyAxMTY7XG4gICAgeCA9IGlzTmFOKGEpID8geSA6IHkgKyBhIC8gNTAwO1xuICAgIHogPSBpc05hTihiKSA/IHkgOiB5IC0gYiAvIDIwMDtcblxuICAgIHkgPSBMQUJfQ09OU1RBTlRTLlluICogbGFiX3h5eih5KTtcbiAgICB4ID0gTEFCX0NPTlNUQU5UUy5YbiAqIGxhYl94eXooeCk7XG4gICAgeiA9IExBQl9DT05TVEFOVFMuWm4gKiBsYWJfeHl6KHopO1xuXG4gICAgciA9IHh5el9yZ2IoMy4yNDA0NTQyICogeCAtIDEuNTM3MTM4NSAqIHkgLSAwLjQ5ODUzMTQgKiB6KTsgLy8gRDY1IC0+IHNSR0JcbiAgICBnID0geHl6X3JnYigtMC45NjkyNjYgKiB4ICsgMS44NzYwMTA4ICogeSArIDAuMDQxNTU2ICogeik7XG4gICAgYl8gPSB4eXpfcmdiKDAuMDU1NjQzNCAqIHggLSAwLjIwNDAyNTkgKiB5ICsgMS4wNTcyMjUyICogeik7XG5cbiAgICByZXR1cm4gW3IsIGcsIGJfLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG59O1xuXG5jb25zdCB4eXpfcmdiID0gKHIpID0+IHtcbiAgICByZXR1cm4gMjU1ICogKHIgPD0gMC4wMDMwNCA/IDEyLjkyICogciA6IDEuMDU1ICogcG93KHIsIDEgLyAyLjQpIC0gMC4wNTUpO1xufTtcblxuY29uc3QgbGFiX3h5eiA9ICh0KSA9PiB7XG4gICAgcmV0dXJuIHQgPiBMQUJfQ09OU1RBTlRTLnQxXG4gICAgICAgID8gdCAqIHQgKiB0XG4gICAgICAgIDogTEFCX0NPTlNUQU5UUy50MiAqICh0IC0gTEFCX0NPTlNUQU5UUy50MCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsYWIycmdiO1xuIiwgImltcG9ydCBMQUJfQ09OU1RBTlRTIGZyb20gJy4vbGFiLWNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHBvdyB9ID0gTWF0aDtcblxuY29uc3QgcmdiMmxhYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW3IsIGcsIGJdID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCBbeCwgeSwgel0gPSByZ2IyeHl6KHIsIGcsIGIpO1xuICAgIGNvbnN0IGwgPSAxMTYgKiB5IC0gMTY7XG4gICAgcmV0dXJuIFtsIDwgMCA/IDAgOiBsLCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopXTtcbn07XG5cbmNvbnN0IHJnYl94eXogPSAocikgPT4ge1xuICAgIGlmICgociAvPSAyNTUpIDw9IDAuMDQwNDUpIHJldHVybiByIC8gMTIuOTI7XG4gICAgcmV0dXJuIHBvdygociArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufTtcblxuY29uc3QgeHl6X2xhYiA9ICh0KSA9PiB7XG4gICAgaWYgKHQgPiBMQUJfQ09OU1RBTlRTLnQzKSByZXR1cm4gcG93KHQsIDEgLyAzKTtcbiAgICByZXR1cm4gdCAvIExBQl9DT05TVEFOVFMudDIgKyBMQUJfQ09OU1RBTlRTLnQwO1xufTtcblxuY29uc3QgcmdiMnh5eiA9IChyLCBnLCBiKSA9PiB7XG4gICAgciA9IHJnYl94eXoocik7XG4gICAgZyA9IHJnYl94eXooZyk7XG4gICAgYiA9IHJnYl94eXooYik7XG4gICAgY29uc3QgeCA9IHh5el9sYWIoXG4gICAgICAgICgwLjQxMjQ1NjQgKiByICsgMC4zNTc1NzYxICogZyArIDAuMTgwNDM3NSAqIGIpIC8gTEFCX0NPTlNUQU5UUy5YblxuICAgICk7XG4gICAgY29uc3QgeSA9IHh5el9sYWIoXG4gICAgICAgICgwLjIxMjY3MjkgKiByICsgMC43MTUxNTIyICogZyArIDAuMDcyMTc1ICogYikgLyBMQUJfQ09OU1RBTlRTLlluXG4gICAgKTtcbiAgICBjb25zdCB6ID0geHl6X2xhYihcbiAgICAgICAgKDAuMDE5MzMzOSAqIHIgKyAwLjExOTE5MiAqIGcgKyAwLjk1MDMwNDEgKiBiKSAvIExBQl9DT05TVEFOVFMuWm5cbiAgICApO1xuICAgIHJldHVybiBbeCwgeSwgel07XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IybGFiO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IGxhYjJyZ2IgZnJvbSAnLi9sYWIycmdiLmpzJztcbmltcG9ydCByZ2IybGFiIGZyb20gJy4vcmdiMmxhYi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5sYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJsYWIodGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5sYWIgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdsYWInKTtcblxuaW5wdXQuZm9ybWF0LmxhYiA9IGxhYjJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMixcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICAgICAgaWYgKHR5cGUoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAnbGFiJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCB7IHVucGFjaywgREVHMlJBRCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgc2luLCBjb3MgfSA9IE1hdGg7XG5cbmNvbnN0IGxjaDJsYWIgPSAoLi4uYXJncykgPT4ge1xuICAgIC8qXG4gICAgQ29udmVydCBmcm9tIGEgcXVhbGl0YXRpdmUgcGFyYW1ldGVyIGggYW5kIGEgcXVhbnRpdGF0aXZlIHBhcmFtZXRlciBsIHRvIGEgMjQtYml0IHBpeGVsLlxuICAgIFRoZXNlIGZvcm11bGFzIHdlcmUgaW52ZW50ZWQgYnkgRGF2aWQgRGFscnltcGxlIHRvIG9idGFpbiBtYXhpbXVtIGNvbnRyYXN0IHdpdGhvdXQgZ29pbmdcbiAgICBvdXQgb2YgZ2FtdXQgaWYgdGhlIHBhcmFtZXRlcnMgYXJlIGluIHRoZSByYW5nZSAwLTEuXG5cbiAgICBBIHNhdHVyYXRpb24gbXVsdGlwbGllciB3YXMgYWRkZWQgYnkgR3JlZ29yIEFpc2NoXG4gICAgKi9cbiAgICBsZXQgW2wsIGMsIGhdID0gdW5wYWNrKGFyZ3MsICdsY2gnKTtcbiAgICBpZiAoaXNOYU4oaCkpIGggPSAwO1xuICAgIGggPSBoICogREVHMlJBRDtcbiAgICByZXR1cm4gW2wsIGNvcyhoKSAqIGMsIHNpbihoKSAqIGNdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGNoMmxhYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMmxhYiBmcm9tICcuL2xjaDJsYWIuanMnO1xuaW1wb3J0IGxhYjJyZ2IgZnJvbSAnLi4vbGFiL2xhYjJyZ2IuanMnO1xuXG5jb25zdCBsY2gycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsY2gnKTtcbiAgICBjb25zdCBbbCwgYywgaF0gPSBhcmdzO1xuICAgIGNvbnN0IFtMLCBhLCBiX10gPSBsY2gybGFiKGwsIGMsIGgpO1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IGxhYjJyZ2IoTCwgYSwgYl8pO1xuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGNoMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMnJnYiBmcm9tICcuL2xjaDJyZ2IuanMnO1xuXG5jb25zdCBoY2wycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBoY2wgPSB1bnBhY2soYXJncywgJ2hjbCcpLnJldmVyc2UoKTtcbiAgICByZXR1cm4gbGNoMnJnYiguLi5oY2wpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaGNsMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2ssIFJBRDJERUcgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IHNxcnQsIGF0YW4yLCByb3VuZCB9ID0gTWF0aDtcblxuY29uc3QgbGFiMmxjaCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgW2wsIGEsIGJdID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICBjb25zdCBjID0gc3FydChhICogYSArIGIgKiBiKTtcbiAgICBsZXQgaCA9IChhdGFuMihiLCBhKSAqIFJBRDJERUcgKyAzNjApICUgMzYwO1xuICAgIGlmIChyb3VuZChjICogMTAwMDApID09PSAwKSBoID0gTnVtYmVyLk5hTjtcbiAgICByZXR1cm4gW2wsIGMsIGhdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbGFiMmxjaDtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgcmdiMmxhYiBmcm9tICcuLi9sYWIvcmdiMmxhYi5qcyc7XG5pbXBvcnQgbGFiMmxjaCBmcm9tICcuL2xhYjJsY2guanMnO1xuXG5jb25zdCByZ2IybGNoID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IFtsLCBhLCBiX10gPSByZ2IybGFiKHIsIGcsIGIpO1xuICAgIHJldHVybiBsYWIybGNoKGwsIGEsIGJfKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJsY2g7XG4iLCAiaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgbGNoMnJnYiBmcm9tICcuL2xjaDJyZ2IuanMnO1xuaW1wb3J0IGhjbDJyZ2IgZnJvbSAnLi9oY2wycmdiLmpzJztcbmltcG9ydCByZ2IybGNoIGZyb20gJy4vcmdiMmxjaC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5sY2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJsY2godGhpcy5fcmdiKTtcbn07XG5Db2xvci5wcm90b3R5cGUuaGNsID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2IybGNoKHRoaXMuX3JnYikucmV2ZXJzZSgpO1xufTtcblxuY2hyb21hLmxjaCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2xjaCcpO1xuY2hyb21hLmhjbCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ2hjbCcpO1xuXG5pbnB1dC5mb3JtYXQubGNoID0gbGNoMnJnYjtcbmlucHV0LmZvcm1hdC5oY2wgPSBoY2wycmdiO1xuWydsY2gnLCAnaGNsJ10uZm9yRWFjaCgobSkgPT5cbiAgICBpbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgYXJncyA9IHVucGFjayhhcmdzLCBtKTtcbiAgICAgICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuKTtcbiIsICIvKipcblx0WDExIGNvbG9yIG5hbWVzXG5cblx0aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8jc3ZnLWNvbG9yXG4qL1xuXG5jb25zdCB3M2N4MTEgPSB7XG4gICAgYWxpY2VibHVlOiAnI2YwZjhmZicsXG4gICAgYW50aXF1ZXdoaXRlOiAnI2ZhZWJkNycsXG4gICAgYXF1YTogJyMwMGZmZmYnLFxuICAgIGFxdWFtYXJpbmU6ICcjN2ZmZmQ0JyxcbiAgICBhenVyZTogJyNmMGZmZmYnLFxuICAgIGJlaWdlOiAnI2Y1ZjVkYycsXG4gICAgYmlzcXVlOiAnI2ZmZTRjNCcsXG4gICAgYmxhY2s6ICcjMDAwMDAwJyxcbiAgICBibGFuY2hlZGFsbW9uZDogJyNmZmViY2QnLFxuICAgIGJsdWU6ICcjMDAwMGZmJyxcbiAgICBibHVldmlvbGV0OiAnIzhhMmJlMicsXG4gICAgYnJvd246ICcjYTUyYTJhJyxcbiAgICBidXJseXdvb2Q6ICcjZGViODg3JyxcbiAgICBjYWRldGJsdWU6ICcjNWY5ZWEwJyxcbiAgICBjaGFydHJldXNlOiAnIzdmZmYwMCcsXG4gICAgY2hvY29sYXRlOiAnI2QyNjkxZScsXG4gICAgY29yYWw6ICcjZmY3ZjUwJyxcbiAgICBjb3JuZmxvd2VyYmx1ZTogJyM2NDk1ZWQnLFxuICAgIGNvcm5zaWxrOiAnI2ZmZjhkYycsXG4gICAgY3JpbXNvbjogJyNkYzE0M2MnLFxuICAgIGN5YW46ICcjMDBmZmZmJyxcbiAgICBkYXJrYmx1ZTogJyMwMDAwOGInLFxuICAgIGRhcmtjeWFuOiAnIzAwOGI4YicsXG4gICAgZGFya2dvbGRlbnJvZDogJyNiODg2MGInLFxuICAgIGRhcmtncmF5OiAnI2E5YTlhOScsXG4gICAgZGFya2dyZWVuOiAnIzAwNjQwMCcsXG4gICAgZGFya2dyZXk6ICcjYTlhOWE5JyxcbiAgICBkYXJra2hha2k6ICcjYmRiNzZiJyxcbiAgICBkYXJrbWFnZW50YTogJyM4YjAwOGInLFxuICAgIGRhcmtvbGl2ZWdyZWVuOiAnIzU1NmIyZicsXG4gICAgZGFya29yYW5nZTogJyNmZjhjMDAnLFxuICAgIGRhcmtvcmNoaWQ6ICcjOTkzMmNjJyxcbiAgICBkYXJrcmVkOiAnIzhiMDAwMCcsXG4gICAgZGFya3NhbG1vbjogJyNlOTk2N2EnLFxuICAgIGRhcmtzZWFncmVlbjogJyM4ZmJjOGYnLFxuICAgIGRhcmtzbGF0ZWJsdWU6ICcjNDgzZDhiJyxcbiAgICBkYXJrc2xhdGVncmF5OiAnIzJmNGY0ZicsXG4gICAgZGFya3NsYXRlZ3JleTogJyMyZjRmNGYnLFxuICAgIGRhcmt0dXJxdW9pc2U6ICcjMDBjZWQxJyxcbiAgICBkYXJrdmlvbGV0OiAnIzk0MDBkMycsXG4gICAgZGVlcHBpbms6ICcjZmYxNDkzJyxcbiAgICBkZWVwc2t5Ymx1ZTogJyMwMGJmZmYnLFxuICAgIGRpbWdyYXk6ICcjNjk2OTY5JyxcbiAgICBkaW1ncmV5OiAnIzY5Njk2OScsXG4gICAgZG9kZ2VyYmx1ZTogJyMxZTkwZmYnLFxuICAgIGZpcmVicmljazogJyNiMjIyMjInLFxuICAgIGZsb3JhbHdoaXRlOiAnI2ZmZmFmMCcsXG4gICAgZm9yZXN0Z3JlZW46ICcjMjI4YjIyJyxcbiAgICBmdWNoc2lhOiAnI2ZmMDBmZicsXG4gICAgZ2FpbnNib3JvOiAnI2RjZGNkYycsXG4gICAgZ2hvc3R3aGl0ZTogJyNmOGY4ZmYnLFxuICAgIGdvbGQ6ICcjZmZkNzAwJyxcbiAgICBnb2xkZW5yb2Q6ICcjZGFhNTIwJyxcbiAgICBncmF5OiAnIzgwODA4MCcsXG4gICAgZ3JlZW46ICcjMDA4MDAwJyxcbiAgICBncmVlbnllbGxvdzogJyNhZGZmMmYnLFxuICAgIGdyZXk6ICcjODA4MDgwJyxcbiAgICBob25leWRldzogJyNmMGZmZjAnLFxuICAgIGhvdHBpbms6ICcjZmY2OWI0JyxcbiAgICBpbmRpYW5yZWQ6ICcjY2Q1YzVjJyxcbiAgICBpbmRpZ286ICcjNGIwMDgyJyxcbiAgICBpdm9yeTogJyNmZmZmZjAnLFxuICAgIGtoYWtpOiAnI2YwZTY4YycsXG4gICAgbGFzZXJsZW1vbjogJyNmZmZmNTQnLFxuICAgIGxhdmVuZGVyOiAnI2U2ZTZmYScsXG4gICAgbGF2ZW5kZXJibHVzaDogJyNmZmYwZjUnLFxuICAgIGxhd25ncmVlbjogJyM3Y2ZjMDAnLFxuICAgIGxlbW9uY2hpZmZvbjogJyNmZmZhY2QnLFxuICAgIGxpZ2h0Ymx1ZTogJyNhZGQ4ZTYnLFxuICAgIGxpZ2h0Y29yYWw6ICcjZjA4MDgwJyxcbiAgICBsaWdodGN5YW46ICcjZTBmZmZmJyxcbiAgICBsaWdodGdvbGRlbnJvZDogJyNmYWZhZDInLFxuICAgIGxpZ2h0Z29sZGVucm9keWVsbG93OiAnI2ZhZmFkMicsXG4gICAgbGlnaHRncmF5OiAnI2QzZDNkMycsXG4gICAgbGlnaHRncmVlbjogJyM5MGVlOTAnLFxuICAgIGxpZ2h0Z3JleTogJyNkM2QzZDMnLFxuICAgIGxpZ2h0cGluazogJyNmZmI2YzEnLFxuICAgIGxpZ2h0c2FsbW9uOiAnI2ZmYTA3YScsXG4gICAgbGlnaHRzZWFncmVlbjogJyMyMGIyYWEnLFxuICAgIGxpZ2h0c2t5Ymx1ZTogJyM4N2NlZmEnLFxuICAgIGxpZ2h0c2xhdGVncmF5OiAnIzc3ODg5OScsXG4gICAgbGlnaHRzbGF0ZWdyZXk6ICcjNzc4ODk5JyxcbiAgICBsaWdodHN0ZWVsYmx1ZTogJyNiMGM0ZGUnLFxuICAgIGxpZ2h0eWVsbG93OiAnI2ZmZmZlMCcsXG4gICAgbGltZTogJyMwMGZmMDAnLFxuICAgIGxpbWVncmVlbjogJyMzMmNkMzInLFxuICAgIGxpbmVuOiAnI2ZhZjBlNicsXG4gICAgbWFnZW50YTogJyNmZjAwZmYnLFxuICAgIG1hcm9vbjogJyM4MDAwMDAnLFxuICAgIG1hcm9vbjI6ICcjN2YwMDAwJyxcbiAgICBtYXJvb24zOiAnI2IwMzA2MCcsXG4gICAgbWVkaXVtYXF1YW1hcmluZTogJyM2NmNkYWEnLFxuICAgIG1lZGl1bWJsdWU6ICcjMDAwMGNkJyxcbiAgICBtZWRpdW1vcmNoaWQ6ICcjYmE1NWQzJyxcbiAgICBtZWRpdW1wdXJwbGU6ICcjOTM3MGRiJyxcbiAgICBtZWRpdW1zZWFncmVlbjogJyMzY2IzNzEnLFxuICAgIG1lZGl1bXNsYXRlYmx1ZTogJyM3YjY4ZWUnLFxuICAgIG1lZGl1bXNwcmluZ2dyZWVuOiAnIzAwZmE5YScsXG4gICAgbWVkaXVtdHVycXVvaXNlOiAnIzQ4ZDFjYycsXG4gICAgbWVkaXVtdmlvbGV0cmVkOiAnI2M3MTU4NScsXG4gICAgbWlkbmlnaHRibHVlOiAnIzE5MTk3MCcsXG4gICAgbWludGNyZWFtOiAnI2Y1ZmZmYScsXG4gICAgbWlzdHlyb3NlOiAnI2ZmZTRlMScsXG4gICAgbW9jY2FzaW46ICcjZmZlNGI1JyxcbiAgICBuYXZham93aGl0ZTogJyNmZmRlYWQnLFxuICAgIG5hdnk6ICcjMDAwMDgwJyxcbiAgICBvbGRsYWNlOiAnI2ZkZjVlNicsXG4gICAgb2xpdmU6ICcjODA4MDAwJyxcbiAgICBvbGl2ZWRyYWI6ICcjNmI4ZTIzJyxcbiAgICBvcmFuZ2U6ICcjZmZhNTAwJyxcbiAgICBvcmFuZ2VyZWQ6ICcjZmY0NTAwJyxcbiAgICBvcmNoaWQ6ICcjZGE3MGQ2JyxcbiAgICBwYWxlZ29sZGVucm9kOiAnI2VlZThhYScsXG4gICAgcGFsZWdyZWVuOiAnIzk4ZmI5OCcsXG4gICAgcGFsZXR1cnF1b2lzZTogJyNhZmVlZWUnLFxuICAgIHBhbGV2aW9sZXRyZWQ6ICcjZGI3MDkzJyxcbiAgICBwYXBheWF3aGlwOiAnI2ZmZWZkNScsXG4gICAgcGVhY2hwdWZmOiAnI2ZmZGFiOScsXG4gICAgcGVydTogJyNjZDg1M2YnLFxuICAgIHBpbms6ICcjZmZjMGNiJyxcbiAgICBwbHVtOiAnI2RkYTBkZCcsXG4gICAgcG93ZGVyYmx1ZTogJyNiMGUwZTYnLFxuICAgIHB1cnBsZTogJyM4MDAwODAnLFxuICAgIHB1cnBsZTI6ICcjN2YwMDdmJyxcbiAgICBwdXJwbGUzOiAnI2EwMjBmMCcsXG4gICAgcmViZWNjYXB1cnBsZTogJyM2NjMzOTknLFxuICAgIHJlZDogJyNmZjAwMDAnLFxuICAgIHJvc3licm93bjogJyNiYzhmOGYnLFxuICAgIHJveWFsYmx1ZTogJyM0MTY5ZTEnLFxuICAgIHNhZGRsZWJyb3duOiAnIzhiNDUxMycsXG4gICAgc2FsbW9uOiAnI2ZhODA3MicsXG4gICAgc2FuZHlicm93bjogJyNmNGE0NjAnLFxuICAgIHNlYWdyZWVuOiAnIzJlOGI1NycsXG4gICAgc2Vhc2hlbGw6ICcjZmZmNWVlJyxcbiAgICBzaWVubmE6ICcjYTA1MjJkJyxcbiAgICBzaWx2ZXI6ICcjYzBjMGMwJyxcbiAgICBza3libHVlOiAnIzg3Y2VlYicsXG4gICAgc2xhdGVibHVlOiAnIzZhNWFjZCcsXG4gICAgc2xhdGVncmF5OiAnIzcwODA5MCcsXG4gICAgc2xhdGVncmV5OiAnIzcwODA5MCcsXG4gICAgc25vdzogJyNmZmZhZmEnLFxuICAgIHNwcmluZ2dyZWVuOiAnIzAwZmY3ZicsXG4gICAgc3RlZWxibHVlOiAnIzQ2ODJiNCcsXG4gICAgdGFuOiAnI2QyYjQ4YycsXG4gICAgdGVhbDogJyMwMDgwODAnLFxuICAgIHRoaXN0bGU6ICcjZDhiZmQ4JyxcbiAgICB0b21hdG86ICcjZmY2MzQ3JyxcbiAgICB0dXJxdW9pc2U6ICcjNDBlMGQwJyxcbiAgICB2aW9sZXQ6ICcjZWU4MmVlJyxcbiAgICB3aGVhdDogJyNmNWRlYjMnLFxuICAgIHdoaXRlOiAnI2ZmZmZmZicsXG4gICAgd2hpdGVzbW9rZTogJyNmNWY1ZjUnLFxuICAgIHllbGxvdzogJyNmZmZmMDAnLFxuICAgIHllbGxvd2dyZWVuOiAnIzlhY2QzMidcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHczY3gxMTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCB7IHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmltcG9ydCB3M2N4MTEgZnJvbSAnLi4vLi4vY29sb3JzL3czY3gxMS5qcyc7XG5pbXBvcnQgaGV4MnJnYiBmcm9tICcuLi9oZXgvaGV4MnJnYi5qcyc7XG5pbXBvcnQgcmdiMmhleCBmcm9tICcuLi9oZXgvcmdiMmhleC5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5uYW1lID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGhleCA9IHJnYjJoZXgodGhpcy5fcmdiLCAncmdiJyk7XG4gICAgZm9yIChsZXQgbiBvZiBPYmplY3Qua2V5cyh3M2N4MTEpKSB7XG4gICAgICAgIGlmICh3M2N4MTFbbl0gPT09IGhleCkgcmV0dXJuIG4udG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGhleDtcbn07XG5cbmlucHV0LmZvcm1hdC5uYW1lZCA9IChuYW1lKSA9PiB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodzNjeDExW25hbWVdKSByZXR1cm4gaGV4MnJnYih3M2N4MTFbbmFtZV0pO1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb2xvciBuYW1lOiAnICsgbmFtZSk7XG59O1xuXG5pbnB1dC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgIHA6IDUsXG4gICAgdGVzdDogKGgsIC4uLnJlc3QpID0+IHtcbiAgICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlKGgpID09PSAnc3RyaW5nJyAmJiB3M2N4MTFbaC50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgICAgcmV0dXJuICduYW1lZCc7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCBudW0ycmdiID0gKG51bSkgPT4ge1xuICAgIGlmICh0eXBlKG51bSkgPT0gJ251bWJlcicgJiYgbnVtID49IDAgJiYgbnVtIDw9IDB4ZmZmZmZmKSB7XG4gICAgICAgIGNvbnN0IHIgPSBudW0gPj4gMTY7XG4gICAgICAgIGNvbnN0IGcgPSAobnVtID4+IDgpICYgMHhmZjtcbiAgICAgICAgY29uc3QgYiA9IG51bSAmIDB4ZmY7XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgMV07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBudW0gY29sb3I6ICcgKyBudW0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbnVtMnJnYjtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5cbmNvbnN0IHJnYjJudW0gPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgcmV0dXJuIChyIDw8IDE2KSArIChnIDw8IDgpICsgYjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjJudW07XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IG51bTJyZ2IgZnJvbSAnLi9udW0ycmdiLmpzJztcbmltcG9ydCByZ2IybnVtIGZyb20gJy4vcmdiMm51bS5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5udW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJnYjJudW0odGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5udW0gPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdudW0nKTtcblxuaW5wdXQuZm9ybWF0Lm51bSA9IG51bTJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogNSxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBhcmdzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgdHlwZShhcmdzWzBdKSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0gPj0gMCAmJlxuICAgICAgICAgICAgYXJnc1swXSA8PSAweGZmZmZmZlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAnbnVtJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IHsgdW5wYWNrLCB0eXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyByb3VuZCB9ID0gTWF0aDtcblxuQ29sb3IucHJvdG90eXBlLnJnYiA9IGZ1bmN0aW9uIChybmQgPSB0cnVlKSB7XG4gICAgaWYgKHJuZCA9PT0gZmFsc2UpIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwgMyk7XG4gICAgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLCAzKS5tYXAocm91bmQpO1xufTtcblxuQ29sb3IucHJvdG90eXBlLnJnYmEgPSBmdW5jdGlvbiAocm5kID0gdHJ1ZSkge1xuICAgIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwgNCkubWFwKCh2LCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBpIDwgMyA/IChybmQgPT09IGZhbHNlID8gdiA6IHJvdW5kKHYpKSA6IHY7XG4gICAgfSk7XG59O1xuXG5jaHJvbWEucmdiID0gKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAncmdiJyk7XG5cbmlucHV0LmZvcm1hdC5yZ2IgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IHJnYmEgPSB1bnBhY2soYXJncywgJ3JnYmEnKTtcbiAgICBpZiAocmdiYVszXSA9PT0gdW5kZWZpbmVkKSByZ2JhWzNdID0gMTtcbiAgICByZXR1cm4gcmdiYTtcbn07XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMyxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGUoYXJncykgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgIChhcmdzLmxlbmd0aCA9PT0gMyB8fFxuICAgICAgICAgICAgICAgIChhcmdzLmxlbmd0aCA9PT0gNCAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlKGFyZ3NbM10pID09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbM10gPj0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBhcmdzWzNdIDw9IDEpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAncmdiJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgIi8qXG4gKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmVpbGJhcnRsZXR0L2NvbG9yLXRlbXBlcmF0dXJlXG4gKi9cblxuY29uc3QgeyBsb2cgfSA9IE1hdGg7XG5cbmNvbnN0IHRlbXBlcmF0dXJlMnJnYiA9IChrZWx2aW4pID0+IHtcbiAgICBjb25zdCB0ZW1wID0ga2VsdmluIC8gMTAwO1xuICAgIGxldCByLCBnLCBiO1xuICAgIGlmICh0ZW1wIDwgNjYpIHtcbiAgICAgICAgciA9IDI1NTtcbiAgICAgICAgZyA9XG4gICAgICAgICAgICB0ZW1wIDwgNlxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogLTE1NS4yNTQ4NTU2MjcwOTE3OSAtXG4gICAgICAgICAgICAgICAgICAwLjQ0NTk2OTUwNDY5NTc5MTMzICogKGcgPSB0ZW1wIC0gMikgK1xuICAgICAgICAgICAgICAgICAgMTA0LjQ5MjE2MTk5MzkzODg4ICogbG9nKGcpO1xuICAgICAgICBiID1cbiAgICAgICAgICAgIHRlbXAgPCAyMFxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogLTI1NC43NjkzNTE4NDEyMDkwMiArXG4gICAgICAgICAgICAgICAgICAwLjgyNzQwOTYwNjQwMDczOTUgKiAoYiA9IHRlbXAgLSAxMCkgK1xuICAgICAgICAgICAgICAgICAgMTE1LjY3OTk0NDAxMDY2MTQ3ICogbG9nKGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHIgPVxuICAgICAgICAgICAgMzUxLjk3NjkwNTY2ODA1NjkzICtcbiAgICAgICAgICAgIDAuMTE0MjA2NDUzNzg0MTY1ICogKHIgPSB0ZW1wIC0gNTUpIC1cbiAgICAgICAgICAgIDQwLjI1MzY2MzA5MzMyMTI3ICogbG9nKHIpO1xuICAgICAgICBnID1cbiAgICAgICAgICAgIDMyNS40NDk0MTI1NzExOTc0ICtcbiAgICAgICAgICAgIDAuMDc5NDM0NTY1MzY2NjIzNDIgKiAoZyA9IHRlbXAgLSA1MCkgLVxuICAgICAgICAgICAgMjguMDg1Mjk2MzUwNzk1NyAqIGxvZyhnKTtcbiAgICAgICAgYiA9IDI1NTtcbiAgICB9XG4gICAgcmV0dXJuIFtyLCBnLCBiLCAxXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBlcmF0dXJlMnJnYjtcbiIsICIvKlxuICogQmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgTmVpbCBCYXJ0bGV0dFxuICogaHR0cHM6Ly9naXRodWIuY29tL25laWxiYXJ0bGV0dC9jb2xvci10ZW1wZXJhdHVyZVxuICoqL1xuXG5pbXBvcnQgdGVtcGVyYXR1cmUycmdiIGZyb20gJy4vdGVtcGVyYXR1cmUycmdiLmpzJztcbmltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcm91bmQgfSA9IE1hdGg7XG5cbmNvbnN0IHJnYjJ0ZW1wZXJhdHVyZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3QgcmdiID0gdW5wYWNrKGFyZ3MsICdyZ2InKTtcbiAgICBjb25zdCByID0gcmdiWzBdLFxuICAgICAgICBiID0gcmdiWzJdO1xuICAgIGxldCBtaW5UZW1wID0gMTAwMDtcbiAgICBsZXQgbWF4VGVtcCA9IDQwMDAwO1xuICAgIGNvbnN0IGVwcyA9IDAuNDtcbiAgICBsZXQgdGVtcDtcbiAgICB3aGlsZSAobWF4VGVtcCAtIG1pblRlbXAgPiBlcHMpIHtcbiAgICAgICAgdGVtcCA9IChtYXhUZW1wICsgbWluVGVtcCkgKiAwLjU7XG4gICAgICAgIGNvbnN0IHJnYiA9IHRlbXBlcmF0dXJlMnJnYih0ZW1wKTtcbiAgICAgICAgaWYgKHJnYlsyXSAvIHJnYlswXSA+PSBiIC8gcikge1xuICAgICAgICAgICAgbWF4VGVtcCA9IHRlbXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5UZW1wID0gdGVtcDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm91bmQodGVtcCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZ2IydGVtcGVyYXR1cmU7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuLi8uLi9jaHJvbWEuanMnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uLy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuLi9pbnB1dC5qcyc7XG5pbXBvcnQgdGVtcGVyYXR1cmUycmdiIGZyb20gJy4vdGVtcGVyYXR1cmUycmdiLmpzJztcbmltcG9ydCByZ2IydGVtcGVyYXR1cmUgZnJvbSAnLi9yZ2IydGVtcGVyYXR1cmUuanMnO1xuXG5Db2xvci5wcm90b3R5cGUudGVtcCA9XG4gICAgQ29sb3IucHJvdG90eXBlLmtlbHZpbiA9XG4gICAgQ29sb3IucHJvdG90eXBlLnRlbXBlcmF0dXJlID1cbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJnYjJ0ZW1wZXJhdHVyZSh0aGlzLl9yZ2IpO1xuICAgICAgICB9O1xuXG5jaHJvbWEudGVtcCA9XG4gICAgY2hyb21hLmtlbHZpbiA9XG4gICAgY2hyb21hLnRlbXBlcmF0dXJlID1cbiAgICAgICAgKC4uLmFyZ3MpID0+IG5ldyBDb2xvciguLi5hcmdzLCAndGVtcCcpO1xuXG5pbnB1dC5mb3JtYXQudGVtcCA9XG4gICAgaW5wdXQuZm9ybWF0LmtlbHZpbiA9XG4gICAgaW5wdXQuZm9ybWF0LnRlbXBlcmF0dXJlID1cbiAgICAgICAgdGVtcGVyYXR1cmUycmdiO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IHsgcG93LCBzaWduIH0gPSBNYXRoO1xuXG4vKlxuICogTCogWzAuLjEwMF1cbiAqIGEgWy0xMDAuLjEwMF1cbiAqIGIgWy0xMDAuLjEwMF1cbiAqL1xuY29uc3Qgb2tsYWIycmdiID0gKC4uLmFyZ3MpID0+IHtcbiAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdsYWInKTtcbiAgICBjb25zdCBbTCwgYSwgYl0gPSBhcmdzO1xuXG4gICAgY29uc3QgbCA9IHBvdyhMICsgMC4zOTYzMzc3Nzc0ICogYSArIDAuMjE1ODAzNzU3MyAqIGIsIDMpO1xuICAgIGNvbnN0IG0gPSBwb3coTCAtIDAuMTA1NTYxMzQ1OCAqIGEgLSAwLjA2Mzg1NDE3MjggKiBiLCAzKTtcbiAgICBjb25zdCBzID0gcG93KEwgLSAwLjA4OTQ4NDE3NzUgKiBhIC0gMS4yOTE0ODU1NDggKiBiLCAzKTtcblxuICAgIHJldHVybiBbXG4gICAgICAgIDI1NSAqIGxyZ2IycmdiKCs0LjA3Njc0MTY2MjEgKiBsIC0gMy4zMDc3MTE1OTEzICogbSArIDAuMjMwOTY5OTI5MiAqIHMpLFxuICAgICAgICAyNTUgKiBscmdiMnJnYigtMS4yNjg0MzgwMDQ2ICogbCArIDIuNjA5NzU3NDAxMSAqIG0gLSAwLjM0MTMxOTM5NjUgKiBzKSxcbiAgICAgICAgMjU1ICogbHJnYjJyZ2IoLTAuMDA0MTk2MDg2MyAqIGwgLSAwLjcwMzQxODYxNDcgKiBtICsgMS43MDc2MTQ3MDEgKiBzKSxcbiAgICAgICAgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb2tsYWIycmdiO1xuXG5mdW5jdGlvbiBscmdiMnJnYihjKSB7XG4gICAgY29uc3QgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgaWYgKGFicyA+IDAuMDAzMTMwOCkge1xuICAgICAgICByZXR1cm4gKHNpZ24oYykgfHwgMSkgKiAoMS4wNTUgKiBwb3coYWJzLCAxIC8gMi40KSAtIDAuMDU1KTtcbiAgICB9XG4gICAgcmV0dXJuIGMgKiAxMi45Mjtcbn1cbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCB7IGNicnQsIHBvdywgc2lnbiB9ID0gTWF0aDtcblxuY29uc3QgcmdiMm9rbGFiID0gKC4uLmFyZ3MpID0+IHtcbiAgICAvLyBPS0xhYiBjb2xvciBzcGFjZSBpbXBsZW1lbnRhdGlvbiB0YWtlbiBmcm9tXG4gICAgLy8gaHR0cHM6Ly9ib3R0b3Nzb24uZ2l0aHViLmlvL3Bvc3RzL29rbGFiL1xuICAgIGNvbnN0IFtyLCBnLCBiXSA9IHVucGFjayhhcmdzLCAncmdiJyk7XG4gICAgY29uc3QgW2xyLCBsZywgbGJdID0gW1xuICAgICAgICByZ2IybHJnYihyIC8gMjU1KSxcbiAgICAgICAgcmdiMmxyZ2IoZyAvIDI1NSksXG4gICAgICAgIHJnYjJscmdiKGIgLyAyNTUpXG4gICAgXTtcbiAgICBjb25zdCBsID0gY2JydCgwLjQxMjIyMTQ3MDggKiBsciArIDAuNTM2MzMyNTM2MyAqIGxnICsgMC4wNTE0NDU5OTI5ICogbGIpO1xuICAgIGNvbnN0IG0gPSBjYnJ0KDAuMjExOTAzNDk4MiAqIGxyICsgMC42ODA2OTk1NDUxICogbGcgKyAwLjEwNzM5Njk1NjYgKiBsYik7XG4gICAgY29uc3QgcyA9IGNicnQoMC4wODgzMDI0NjE5ICogbHIgKyAwLjI4MTcxODgzNzYgKiBsZyArIDAuNjI5OTc4NzAwNSAqIGxiKTtcblxuICAgIHJldHVybiBbXG4gICAgICAgIDAuMjEwNDU0MjU1MyAqIGwgKyAwLjc5MzYxNzc4NSAqIG0gLSAwLjAwNDA3MjA0NjggKiBzLFxuICAgICAgICAxLjk3Nzk5ODQ5NTEgKiBsIC0gMi40Mjg1OTIyMDUgKiBtICsgMC40NTA1OTM3MDk5ICogcyxcbiAgICAgICAgMC4wMjU5MDQwMzcxICogbCArIDAuNzgyNzcxNzY2MiAqIG0gLSAwLjgwODY3NTc2NiAqIHNcbiAgICBdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMm9rbGFiO1xuXG5mdW5jdGlvbiByZ2IybHJnYihjKSB7XG4gICAgY29uc3QgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgaWYgKGFicyA8IDAuMDQwNDUpIHtcbiAgICAgICAgcmV0dXJuIGMgLyAxMi45MjtcbiAgICB9XG4gICAgcmV0dXJuIChzaWduKGMpIHx8IDEpICogcG93KChhYnMgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cbiIsICJpbXBvcnQgeyB1bnBhY2ssIHR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uLy4uL2Nocm9tYS5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vLi4vQ29sb3IuanMnO1xuaW1wb3J0IGlucHV0IGZyb20gJy4uL2lucHV0LmpzJztcbmltcG9ydCBva2xhYjJyZ2IgZnJvbSAnLi9va2xhYjJyZ2IuanMnO1xuaW1wb3J0IHJnYjJva2xhYiBmcm9tICcuL3JnYjJva2xhYi5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5va2xhYiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmdiMm9rbGFiKHRoaXMuX3JnYik7XG59O1xuXG5jaHJvbWEub2tsYWIgPSAoLi4uYXJncykgPT4gbmV3IENvbG9yKC4uLmFyZ3MsICdva2xhYicpO1xuXG5pbnB1dC5mb3JtYXQub2tsYWIgPSBva2xhYjJyZ2I7XG5cbmlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgcDogMyxcbiAgICB0ZXN0OiAoLi4uYXJncykgPT4ge1xuICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdva2xhYicpO1xuICAgICAgICBpZiAodHlwZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICdva2xhYic7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsICJpbXBvcnQgeyB1bnBhY2sgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgbGNoMmxhYiBmcm9tICcuLi9sY2gvbGNoMmxhYi5qcyc7XG5pbXBvcnQgb2tsYWIycmdiIGZyb20gJy4uL29rbGFiL29rbGFiMnJnYi5qcyc7XG5cbmNvbnN0IG9rbGNoMnJnYiA9ICguLi5hcmdzKSA9PiB7XG4gICAgYXJncyA9IHVucGFjayhhcmdzLCAnbGNoJyk7XG4gICAgY29uc3QgW2wsIGMsIGhdID0gYXJncztcbiAgICBjb25zdCBbTCwgYSwgYl9dID0gbGNoMmxhYihsLCBjLCBoKTtcbiAgICBjb25zdCBbciwgZywgYl0gPSBva2xhYjJyZ2IoTCwgYSwgYl8pO1xuICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgb2tsY2gycmdiO1xuIiwgImltcG9ydCB7IHVucGFjayB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCByZ2Iyb2tsYWIgZnJvbSAnLi4vb2tsYWIvcmdiMm9rbGFiLmpzJztcbmltcG9ydCBsYWIybGNoIGZyb20gJy4uL2xjaC9sYWIybGNoLmpzJztcblxuY29uc3QgcmdiMm9rbGNoID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBbciwgZywgYl0gPSB1bnBhY2soYXJncywgJ3JnYicpO1xuICAgIGNvbnN0IFtsLCBhLCBiX10gPSByZ2Iyb2tsYWIociwgZywgYik7XG4gICAgcmV0dXJuIGxhYjJsY2gobCwgYSwgYl8pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmdiMm9rbGNoO1xuIiwgImltcG9ydCB7IHVucGFjaywgdHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vLi4vY2hyb21hLmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi8uLi9Db2xvci5qcyc7XG5pbXBvcnQgaW5wdXQgZnJvbSAnLi4vaW5wdXQuanMnO1xuaW1wb3J0IG9rbGNoMnJnYiBmcm9tICcuL29rbGNoMnJnYi5qcyc7XG5pbXBvcnQgcmdiMm9rbGNoIGZyb20gJy4vcmdiMm9rbGNoLmpzJztcblxuQ29sb3IucHJvdG90eXBlLm9rbGNoID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiByZ2Iyb2tsY2godGhpcy5fcmdiKTtcbn07XG5cbmNocm9tYS5va2xjaCA9ICguLi5hcmdzKSA9PiBuZXcgQ29sb3IoLi4uYXJncywgJ29rbGNoJyk7XG5cbmlucHV0LmZvcm1hdC5va2xjaCA9IG9rbGNoMnJnYjtcblxuaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICBwOiAzLFxuICAgIHRlc3Q6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ29rbGNoJyk7XG4gICAgICAgIGlmICh0eXBlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ29rbGNoJztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUuYWxwaGEgPSBmdW5jdGlvbiAoYSwgbXV0YXRlID0gZmFsc2UpIHtcbiAgICBpZiAoYSAhPT0gdW5kZWZpbmVkICYmIHR5cGUoYSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChtdXRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3JnYlszXSA9IGE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFt0aGlzLl9yZ2JbMF0sIHRoaXMuX3JnYlsxXSwgdGhpcy5fcmdiWzJdLCBhXSwgJ3JnYicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcmdiWzNdO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuY2xpcHBlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmdiLl9jbGlwcGVkIHx8IGZhbHNlO1xufTtcbiIsICJpbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuaW1wb3J0IExBQl9DT05TVEFOVFMgZnJvbSAnLi4vaW8vbGFiL2xhYi1jb25zdGFudHMuanMnO1xuXG5Db2xvci5wcm90b3R5cGUuZGFya2VuID0gZnVuY3Rpb24gKGFtb3VudCA9IDEpIHtcbiAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgY29uc3QgbGFiID0gbWUubGFiKCk7XG4gICAgbGFiWzBdIC09IExBQl9DT05TVEFOVFMuS24gKiBhbW91bnQ7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKS5hbHBoYShtZS5hbHBoYSgpLCB0cnVlKTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5icmlnaHRlbiA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuZGFya2VuKC1hbW91bnQpO1xufTtcblxuQ29sb3IucHJvdG90eXBlLmRhcmtlciA9IENvbG9yLnByb3RvdHlwZS5kYXJrZW47XG5Db2xvci5wcm90b3R5cGUuYnJpZ2h0ZXIgPSBDb2xvci5wcm90b3R5cGUuYnJpZ2h0ZW47XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuQ29sb3IucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChtYykge1xuICAgIGNvbnN0IFttb2RlLCBjaGFubmVsXSA9IG1jLnNwbGl0KCcuJyk7XG4gICAgY29uc3Qgc3JjID0gdGhpc1ttb2RlXSgpO1xuICAgIGlmIChjaGFubmVsKSB7XG4gICAgICAgIGNvbnN0IGkgPSBtb2RlLmluZGV4T2YoY2hhbm5lbCkgLSAobW9kZS5zdWJzdHIoMCwgMikgPT09ICdvaycgPyAyIDogMCk7XG4gICAgICAgIGlmIChpID4gLTEpIHJldHVybiBzcmNbaV07XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjaGFubmVsICR7Y2hhbm5lbH0gaW4gbW9kZSAke21vZGV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuY29uc3QgeyBwb3cgfSA9IE1hdGg7XG5cbmNvbnN0IEVQUyA9IDFlLTc7XG5jb25zdCBNQVhfSVRFUiA9IDIwO1xuXG5Db2xvci5wcm90b3R5cGUubHVtaW5hbmNlID0gZnVuY3Rpb24gKGx1bSwgbW9kZSA9ICdyZ2InKSB7XG4gICAgaWYgKGx1bSAhPT0gdW5kZWZpbmVkICYmIHR5cGUobHVtKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGx1bSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIHB1cmUgYmxhY2tcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoWzAsIDAsIDAsIHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobHVtID09PSAxKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gcHVyZSB3aGl0ZVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbMjU1LCAyNTUsIDI1NSwgdGhpcy5fcmdiWzNdXSwgJ3JnYicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbXB1dGUgbmV3IGNvbG9yIHVzaW5nLi4uXG4gICAgICAgIGxldCBjdXJfbHVtID0gdGhpcy5sdW1pbmFuY2UoKTtcbiAgICAgICAgbGV0IG1heF9pdGVyID0gTUFYX0lURVI7XG5cbiAgICAgICAgY29uc3QgdGVzdCA9IChsb3csIGhpZ2gpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1pZCA9IGxvdy5pbnRlcnBvbGF0ZShoaWdoLCAwLjUsIG1vZGUpO1xuICAgICAgICAgICAgY29uc3QgbG0gPSBtaWQubHVtaW5hbmNlKCk7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobHVtIC0gbG0pIDwgRVBTIHx8ICFtYXhfaXRlci0tKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xvc2UgZW5vdWdoXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsbSA+IGx1bSA/IHRlc3QobG93LCBtaWQpIDogdGVzdChtaWQsIGhpZ2gpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJnYiA9IChcbiAgICAgICAgICAgIGN1cl9sdW0gPiBsdW1cbiAgICAgICAgICAgICAgICA/IHRlc3QobmV3IENvbG9yKFswLCAwLCAwXSksIHRoaXMpXG4gICAgICAgICAgICAgICAgOiB0ZXN0KHRoaXMsIG5ldyBDb2xvcihbMjU1LCAyNTUsIDI1NV0pKVxuICAgICAgICApLnJnYigpO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFsuLi5yZ2IsIHRoaXMuX3JnYlszXV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmdiMmx1bWluYW5jZSguLi50aGlzLl9yZ2Iuc2xpY2UoMCwgMykpO1xufTtcblxuY29uc3QgcmdiMmx1bWluYW5jZSA9IChyLCBnLCBiKSA9PiB7XG4gICAgLy8gcmVsYXRpdmUgbHVtaW5hbmNlXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICByID0gbHVtaW5hbmNlX3gocik7XG4gICAgZyA9IGx1bWluYW5jZV94KGcpO1xuICAgIGIgPSBsdW1pbmFuY2VfeChiKTtcbiAgICByZXR1cm4gMC4yMTI2ICogciArIDAuNzE1MiAqIGcgKyAwLjA3MjIgKiBiO1xufTtcblxuY29uc3QgbHVtaW5hbmNlX3ggPSAoeCkgPT4ge1xuICAgIHggLz0gMjU1O1xuICAgIHJldHVybiB4IDw9IDAuMDM5MjggPyB4IC8gMTIuOTIgOiBwb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn07XG4iLCAiZXhwb3J0IGRlZmF1bHQge307XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCB7IHR5cGUgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdG9yIGZyb20gJy4uL2ludGVycG9sYXRvci9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IChjb2wxLCBjb2wyLCBmID0gMC41LCAuLi5yZXN0KSA9PiB7XG4gICAgbGV0IG1vZGUgPSByZXN0WzBdIHx8ICdscmdiJztcbiAgICBpZiAoIWludGVycG9sYXRvclttb2RlXSAmJiAhcmVzdC5sZW5ndGgpIHtcbiAgICAgICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBzdXBwb3J0ZWQgbW9kZVxuICAgICAgICBtb2RlID0gT2JqZWN0LmtleXMoaW50ZXJwb2xhdG9yKVswXTtcbiAgICB9XG4gICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnRlcnBvbGF0aW9uIG1vZGUgJHttb2RlfSBpcyBub3QgZGVmaW5lZGApO1xuICAgIH1cbiAgICBpZiAodHlwZShjb2wxKSAhPT0gJ29iamVjdCcpIGNvbDEgPSBuZXcgQ29sb3IoY29sMSk7XG4gICAgaWYgKHR5cGUoY29sMikgIT09ICdvYmplY3QnKSBjb2wyID0gbmV3IENvbG9yKGNvbDIpO1xuICAgIHJldHVybiBpbnRlcnBvbGF0b3JbbW9kZV0oY29sMSwgY29sMiwgZikuYWxwaGEoXG4gICAgICAgIGNvbDEuYWxwaGEoKSArIGYgKiAoY29sMi5hbHBoYSgpIC0gY29sMS5hbHBoYSgpKVxuICAgICk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4uL2dlbmVyYXRvci9taXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUubWl4ID0gQ29sb3IucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVuY3Rpb24gKFxuICAgIGNvbDIsXG4gICAgZiA9IDAuNSxcbiAgICAuLi5yZXN0XG4pIHtcbiAgICByZXR1cm4gbWl4KHRoaXMsIGNvbDIsIGYsIC4uLnJlc3QpO1xufTtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5Db2xvci5wcm90b3R5cGUucHJlbXVsdGlwbHkgPSBmdW5jdGlvbiAobXV0YXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgY29uc3QgYSA9IHJnYlszXTtcbiAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JnYiA9IFtyZ2JbMF0gKiBhLCByZ2JbMV0gKiBhLCByZ2JbMl0gKiBhLCBhXTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbcmdiWzBdICogYSwgcmdiWzFdICogYSwgcmdiWzJdICogYSwgYV0sICdyZ2InKTtcbiAgICB9XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgTEFCX0NPTlNUQU5UUyBmcm9tICcuLi9pby9sYWIvbGFiLWNvbnN0YW50cy5qcyc7XG5cbkNvbG9yLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgY29uc3QgbWUgPSB0aGlzO1xuICAgIGNvbnN0IGxjaCA9IG1lLmxjaCgpO1xuICAgIGxjaFsxXSArPSBMQUJfQ09OU1RBTlRTLktuICogYW1vdW50O1xuICAgIGlmIChsY2hbMV0gPCAwKSBsY2hbMV0gPSAwO1xuICAgIHJldHVybiBuZXcgQ29sb3IobGNoLCAnbGNoJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG59O1xuXG5Db2xvci5wcm90b3R5cGUuZGVzYXR1cmF0ZSA9IGZ1bmN0aW9uIChhbW91bnQgPSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuc2F0dXJhdGUoLWFtb3VudCk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG1jLCB2YWx1ZSwgbXV0YXRlID0gZmFsc2UpIHtcbiAgICBjb25zdCBbbW9kZSwgY2hhbm5lbF0gPSBtYy5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHNyYyA9IHRoaXNbbW9kZV0oKTtcbiAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgICBjb25zdCBpID0gbW9kZS5pbmRleE9mKGNoYW5uZWwpIC0gKG1vZGUuc3Vic3RyKDAsIDIpID09PSAnb2snID8gMiA6IDApO1xuICAgICAgICBpZiAoaSA+IC0xKSB7XG4gICAgICAgICAgICBpZiAodHlwZSh2YWx1ZSkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLmNoYXJBdCgwKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSArPSArdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gKz0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldICo9ICt2YWx1ZS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gLz0gK3ZhbHVlLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldID0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSh2YWx1ZSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc3JjW2ldID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgdmFsdWUgZm9yIENvbG9yLnNldGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3V0ID0gbmV3IENvbG9yKHNyYywgbW9kZSk7XG4gICAgICAgICAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmdiID0gb3V0Ll9yZ2I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjaGFubmVsICR7Y2hhbm5lbH0gaW4gbW9kZSAke21vZGV9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNyYztcbiAgICB9XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGFiL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4uL2dlbmVyYXRvci9taXguanMnO1xuXG5Db2xvci5wcm90b3R5cGUudGludCA9IGZ1bmN0aW9uIChmID0gMC41LCAuLi5yZXN0KSB7XG4gICAgcmV0dXJuIG1peCh0aGlzLCAnd2hpdGUnLCBmLCAuLi5yZXN0KTtcbn07XG5cbkNvbG9yLnByb3RvdHlwZS5zaGFkZSA9IGZ1bmN0aW9uIChmID0gMC41LCAuLi5yZXN0KSB7XG4gICAgcmV0dXJuIG1peCh0aGlzLCAnYmxhY2snLCBmLCAuLi5yZXN0KTtcbn07XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgcmdiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCB4eXowID0gY29sMS5fcmdiO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLl9yZ2I7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXSAtIHh5ejBbMF0pLFxuICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdIC0geHl6MFsxXSksXG4gICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0gLSB4eXowWzJdKSxcbiAgICAgICAgJ3JnYidcbiAgICApO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5yZ2IgPSByZ2I7XG5cbmV4cG9ydCBkZWZhdWx0IHJnYjtcbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuY29uc3QgeyBzcXJ0LCBwb3cgfSA9IE1hdGg7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGxyZ2IgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IFt4MSwgeTEsIHoxXSA9IGNvbDEuX3JnYjtcbiAgICBjb25zdCBbeDIsIHkyLCB6Ml0gPSBjb2wyLl9yZ2I7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgc3FydChwb3coeDEsIDIpICogKDEgLSBmKSArIHBvdyh4MiwgMikgKiBmKSxcbiAgICAgICAgc3FydChwb3coeTEsIDIpICogKDEgLSBmKSArIHBvdyh5MiwgMikgKiBmKSxcbiAgICAgICAgc3FydChwb3coejEsIDIpICogKDEgLSBmKSArIHBvdyh6MiwgMikgKiBmKSxcbiAgICAgICAgJ3JnYidcbiAgICApO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5scmdiID0gbHJnYjtcblxuZXhwb3J0IGRlZmF1bHQgbHJnYjtcbiIsICJpbXBvcnQgJy4uL2lvL2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5jb25zdCBsYWIgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IHh5ejAgPSBjb2wxLmxhYigpO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLmxhYigpO1xuICAgIHJldHVybiBuZXcgQ29sb3IoXG4gICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0gLSB4eXowWzBdKSxcbiAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXSAtIHh5ejBbMV0pLFxuICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdIC0geHl6MFsyXSksXG4gICAgICAgICdsYWInXG4gICAgKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubGFiID0gbGFiO1xuXG5leHBvcnQgZGVmYXVsdCBsYWI7XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKGNvbDEsIGNvbDIsIGYsIG0pID0+IHtcbiAgICBsZXQgeHl6MCwgeHl6MTtcbiAgICBpZiAobSA9PT0gJ2hzbCcpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHNsKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzbCgpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzdicpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHN2KCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzdigpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hjZycpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaGNnKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhjZygpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzaScpIHtcbiAgICAgICAgeHl6MCA9IGNvbDEuaHNpKCk7XG4gICAgICAgIHh5ejEgPSBjb2wyLmhzaSgpO1xuICAgIH0gZWxzZSBpZiAobSA9PT0gJ2xjaCcgfHwgbSA9PT0gJ2hjbCcpIHtcbiAgICAgICAgbSA9ICdoY2wnO1xuICAgICAgICB4eXowID0gY29sMS5oY2woKTtcbiAgICAgICAgeHl6MSA9IGNvbDIuaGNsKCk7XG4gICAgfSBlbHNlIGlmIChtID09PSAnb2tsY2gnKSB7XG4gICAgICAgIHh5ejAgPSBjb2wxLm9rbGNoKCkucmV2ZXJzZSgpO1xuICAgICAgICB4eXoxID0gY29sMi5va2xjaCgpLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBsZXQgaHVlMCwgaHVlMSwgc2F0MCwgc2F0MSwgbGJ2MCwgbGJ2MTtcbiAgICBpZiAobS5zdWJzdHIoMCwgMSkgPT09ICdoJyB8fCBtID09PSAnb2tsY2gnKSB7XG4gICAgICAgIFtodWUwLCBzYXQwLCBsYnYwXSA9IHh5ejA7XG4gICAgICAgIFtodWUxLCBzYXQxLCBsYnYxXSA9IHh5ejE7XG4gICAgfVxuXG4gICAgbGV0IHNhdCwgaHVlLCBsYnYsIGRoO1xuXG4gICAgaWYgKCFpc05hTihodWUwKSAmJiAhaXNOYU4oaHVlMSkpIHtcbiAgICAgICAgLy8gYm90aCBjb2xvcnMgaGF2ZSBodWVcbiAgICAgICAgaWYgKGh1ZTEgPiBodWUwICYmIGh1ZTEgLSBodWUwID4gMTgwKSB7XG4gICAgICAgICAgICBkaCA9IGh1ZTEgLSAoaHVlMCArIDM2MCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaHVlMSA8IGh1ZTAgJiYgaHVlMCAtIGh1ZTEgPiAxODApIHtcbiAgICAgICAgICAgIGRoID0gaHVlMSArIDM2MCAtIGh1ZTA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaCA9IGh1ZTEgLSBodWUwO1xuICAgICAgICB9XG4gICAgICAgIGh1ZSA9IGh1ZTAgKyBmICogZGg7XG4gICAgfSBlbHNlIGlmICghaXNOYU4oaHVlMCkpIHtcbiAgICAgICAgaHVlID0gaHVlMDtcbiAgICAgICAgaWYgKChsYnYxID09IDEgfHwgbGJ2MSA9PSAwKSAmJiBtICE9ICdoc3YnKSBzYXQgPSBzYXQwO1xuICAgIH0gZWxzZSBpZiAoIWlzTmFOKGh1ZTEpKSB7XG4gICAgICAgIGh1ZSA9IGh1ZTE7XG4gICAgICAgIGlmICgobGJ2MCA9PSAxIHx8IGxidjAgPT0gMCkgJiYgbSAhPSAnaHN2Jykgc2F0ID0gc2F0MTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBodWUgPSBOdW1iZXIuTmFOO1xuICAgIH1cblxuICAgIGlmIChzYXQgPT09IHVuZGVmaW5lZCkgc2F0ID0gc2F0MCArIGYgKiAoc2F0MSAtIHNhdDApO1xuICAgIGxidiA9IGxidjAgKyBmICogKGxidjEgLSBsYnYwKTtcbiAgICByZXR1cm4gbSA9PT0gJ29rbGNoJ1xuICAgICAgICA/IG5ldyBDb2xvcihbbGJ2LCBzYXQsIGh1ZV0sIG0pXG4gICAgICAgIDogbmV3IENvbG9yKFtodWUsIHNhdCwgbGJ2XSwgbSk7XG59O1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgbGNoID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdsY2gnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubGNoID0gbGNoO1xuaW5kZXguaGNsID0gbGNoO1xuXG5leHBvcnQgZGVmYXVsdCBsY2g7XG4iLCAiaW1wb3J0ICcuLi9pby9udW0vaW5kZXguanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG5jb25zdCBudW0gPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIGNvbnN0IGMxID0gY29sMS5udW0oKTtcbiAgICBjb25zdCBjMiA9IGNvbDIubnVtKCk7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihjMSArIGYgKiAoYzIgLSBjMSksICdudW0nKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXgubnVtID0gbnVtO1xuXG5leHBvcnQgZGVmYXVsdCBudW07XG4iLCAiaW1wb3J0ICcuLi9pby9oY2cvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRlX2hzeCBmcm9tICcuL19oc3guanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBoY2cgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ2hjZycpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5oY2cgPSBoY2c7XG5cbmV4cG9ydCBkZWZhdWx0IGhjZztcbiIsICJpbXBvcnQgJy4uL2lvL2hzaS9pbmRleC5qcyc7XG5pbXBvcnQgaW50ZXJwb2xhdGVfaHN4IGZyb20gJy4vX2hzeC5qcyc7XG5pbXBvcnQgaW5kZXggZnJvbSAnLi9pbmRleC5qcyc7XG5cbmNvbnN0IGhzaSA9IChjb2wxLCBjb2wyLCBmKSA9PiB7XG4gICAgcmV0dXJuIGludGVycG9sYXRlX2hzeChjb2wxLCBjb2wyLCBmLCAnaHNpJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4LmhzaSA9IGhzaTtcblxuZXhwb3J0IGRlZmF1bHQgaHNpO1xuIiwgImltcG9ydCAnLi4vaW8vaHNsL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3QgaHNsID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGVfaHN4KGNvbDEsIGNvbDIsIGYsICdoc2wnKTtcbn07XG5cbi8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuaW5kZXguaHNsID0gaHNsO1xuXG5leHBvcnQgZGVmYXVsdCBoc2w7XG4iLCAiaW1wb3J0ICcuLi9pby9oc3YvaW5kZXguanMnO1xuaW1wb3J0IGludGVycG9sYXRlX2hzeCBmcm9tICcuL19oc3guanMnO1xuaW1wb3J0IGluZGV4IGZyb20gJy4vaW5kZXguanMnO1xuXG5jb25zdCBoc3YgPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ2hzdicpO1xufTtcblxuLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG5pbmRleC5oc3YgPSBoc3Y7XG5cbmV4cG9ydCBkZWZhdWx0IGhzdjtcbiIsICJpbXBvcnQgJy4uL2lvL29rbGFiL2luZGV4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5cbmNvbnN0IG9rbGFiID0gKGNvbDEsIGNvbDIsIGYpID0+IHtcbiAgICBjb25zdCB4eXowID0gY29sMS5va2xhYigpO1xuICAgIGNvbnN0IHh5ejEgPSBjb2wyLm9rbGFiKCk7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXSAtIHh5ejBbMF0pLFxuICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdIC0geHl6MFsxXSksXG4gICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0gLSB4eXowWzJdKSxcbiAgICAgICAgJ29rbGFiJ1xuICAgICk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4Lm9rbGFiID0gb2tsYWI7XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGFiO1xuIiwgImltcG9ydCAnLi4vaW8vbGNoL2luZGV4LmpzJztcbmltcG9ydCBpbnRlcnBvbGF0ZV9oc3ggZnJvbSAnLi9faHN4LmpzJztcbmltcG9ydCBpbmRleCBmcm9tICcuL2luZGV4LmpzJztcblxuY29uc3Qgb2tsY2ggPSAoY29sMSwgY29sMiwgZikgPT4ge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ29rbGNoJyk7XG59O1xuXG4vLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbmluZGV4Lm9rbGNoID0gb2tsY2g7XG5cbmV4cG9ydCBkZWZhdWx0IG9rbGNoO1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgeyBjbGlwX3JnYiB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcblxuY29uc3QgeyBwb3csIHNxcnQsIFBJLCBjb3MsIHNpbiwgYXRhbjIgfSA9IE1hdGg7XG5cbmV4cG9ydCBkZWZhdWx0IChjb2xvcnMsIG1vZGUgPSAnbHJnYicsIHdlaWdodHMgPSBudWxsKSA9PiB7XG4gICAgY29uc3QgbCA9IGNvbG9ycy5sZW5ndGg7XG4gICAgaWYgKCF3ZWlnaHRzKSB3ZWlnaHRzID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobCkpLm1hcCgoKSA9PiAxKTtcbiAgICAvLyBub3JtYWxpemUgd2VpZ2h0c1xuICAgIGNvbnN0IGsgPVxuICAgICAgICBsIC9cbiAgICAgICAgd2VpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhICsgYjtcbiAgICAgICAgfSk7XG4gICAgd2VpZ2h0cy5mb3JFYWNoKCh3LCBpKSA9PiB7XG4gICAgICAgIHdlaWdodHNbaV0gKj0gaztcbiAgICB9KTtcbiAgICAvLyBjb252ZXJ0IGNvbG9ycyB0byBDb2xvciBvYmplY3RzXG4gICAgY29sb3JzID0gY29sb3JzLm1hcCgoYykgPT4gbmV3IENvbG9yKGMpKTtcbiAgICBpZiAobW9kZSA9PT0gJ2xyZ2InKSB7XG4gICAgICAgIHJldHVybiBfYXZlcmFnZV9scmdiKGNvbG9ycywgd2VpZ2h0cyk7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0ID0gY29sb3JzLnNoaWZ0KCk7XG4gICAgY29uc3QgeHl6ID0gZmlyc3QuZ2V0KG1vZGUpO1xuICAgIGNvbnN0IGNudCA9IFtdO1xuICAgIGxldCBkeCA9IDA7XG4gICAgbGV0IGR5ID0gMDtcbiAgICAvLyBpbml0aWFsIGNvbG9yXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4eXoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgeHl6W2ldID0gKHh5eltpXSB8fCAwKSAqIHdlaWdodHNbMF07XG4gICAgICAgIGNudC5wdXNoKGlzTmFOKHh5eltpXSkgPyAwIDogd2VpZ2h0c1swXSk7XG4gICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnICYmICFpc05hTih4eXpbaV0pKSB7XG4gICAgICAgICAgICBjb25zdCBBID0gKHh5eltpXSAvIDE4MCkgKiBQSTtcbiAgICAgICAgICAgIGR4ICs9IGNvcyhBKSAqIHdlaWdodHNbMF07XG4gICAgICAgICAgICBkeSArPSBzaW4oQSkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGFscGhhID0gZmlyc3QuYWxwaGEoKSAqIHdlaWdodHNbMF07XG4gICAgY29sb3JzLmZvckVhY2goKGMsIGNpKSA9PiB7XG4gICAgICAgIGNvbnN0IHh5ejIgPSBjLmdldChtb2RlKTtcbiAgICAgICAgYWxwaGEgKz0gYy5hbHBoYSgpICogd2VpZ2h0c1tjaSArIDFdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHh5ei5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFpc05hTih4eXoyW2ldKSkge1xuICAgICAgICAgICAgICAgIGNudFtpXSArPSB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUuY2hhckF0KGkpID09PSAnaCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgQSA9ICh4eXoyW2ldIC8gMTgwKSAqIFBJO1xuICAgICAgICAgICAgICAgICAgICBkeCArPSBjb3MoQSkgKiB3ZWlnaHRzW2NpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIGR5ICs9IHNpbihBKSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB4eXpbaV0gKz0geHl6MltpXSAqIHdlaWdodHNbY2kgKyAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeHl6Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChtb2RlLmNoYXJBdChpKSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICBsZXQgQSA9IChhdGFuMihkeSAvIGNudFtpXSwgZHggLyBjbnRbaV0pIC8gUEkpICogMTgwO1xuICAgICAgICAgICAgd2hpbGUgKEEgPCAwKSBBICs9IDM2MDtcbiAgICAgICAgICAgIHdoaWxlIChBID49IDM2MCkgQSAtPSAzNjA7XG4gICAgICAgICAgICB4eXpbaV0gPSBBO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeHl6W2ldID0geHl6W2ldIC8gY250W2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFscGhhIC89IGw7XG4gICAgcmV0dXJuIG5ldyBDb2xvcih4eXosIG1vZGUpLmFscGhhKGFscGhhID4gMC45OTk5OSA/IDEgOiBhbHBoYSwgdHJ1ZSk7XG59O1xuXG5jb25zdCBfYXZlcmFnZV9scmdiID0gKGNvbG9ycywgd2VpZ2h0cykgPT4ge1xuICAgIGNvbnN0IGwgPSBjb2xvcnMubGVuZ3RoO1xuICAgIGNvbnN0IHh5eiA9IFswLCAwLCAwLCAwXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjb2wgPSBjb2xvcnNbaV07XG4gICAgICAgIGNvbnN0IGYgPSB3ZWlnaHRzW2ldIC8gbDtcbiAgICAgICAgY29uc3QgcmdiID0gY29sLl9yZ2I7XG4gICAgICAgIHh5elswXSArPSBwb3cocmdiWzBdLCAyKSAqIGY7XG4gICAgICAgIHh5elsxXSArPSBwb3cocmdiWzFdLCAyKSAqIGY7XG4gICAgICAgIHh5elsyXSArPSBwb3cocmdiWzJdLCAyKSAqIGY7XG4gICAgICAgIHh5elszXSArPSByZ2JbM10gKiBmO1xuICAgIH1cbiAgICB4eXpbMF0gPSBzcXJ0KHh5elswXSk7XG4gICAgeHl6WzFdID0gc3FydCh4eXpbMV0pO1xuICAgIHh5elsyXSA9IHNxcnQoeHl6WzJdKTtcbiAgICBpZiAoeHl6WzNdID4gMC45OTk5OTk5KSB4eXpbM10gPSAxO1xuICAgIHJldHVybiBuZXcgQ29sb3IoY2xpcF9yZ2IoeHl6KSk7XG59O1xuIiwgIi8vIG1pbmltYWwgbXVsdGktcHVycG9zZSBpbnRlcmZhY2VcblxuLy8gQHJlcXVpcmVzIHV0aWxzIGNvbG9yIGFuYWx5emVcbmltcG9ydCBjaHJvbWEgZnJvbSAnLi4vY2hyb21hLmpzJztcbmltcG9ydCB7IGxpbWl0LCB0eXBlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5jb25zdCB7IHBvdyB9ID0gTWF0aDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGNvbG9ycykge1xuICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgbGV0IF9tb2RlID0gJ3JnYic7XG4gICAgbGV0IF9uYWNvbCA9IGNocm9tYSgnI2NjYycpO1xuICAgIGxldCBfc3ByZWFkID0gMDtcbiAgICAvLyBjb25zdCBfZml4ZWQgPSBmYWxzZTtcbiAgICBsZXQgX2RvbWFpbiA9IFswLCAxXTtcbiAgICBsZXQgX3BvcyA9IFtdO1xuICAgIGxldCBfcGFkZGluZyA9IFswLCAwXTtcbiAgICBsZXQgX2NsYXNzZXMgPSBmYWxzZTtcbiAgICBsZXQgX2NvbG9ycyA9IFtdO1xuICAgIGxldCBfb3V0ID0gZmFsc2U7XG4gICAgbGV0IF9taW4gPSAwO1xuICAgIGxldCBfbWF4ID0gMTtcbiAgICBsZXQgX2NvcnJlY3RMaWdodG5lc3MgPSBmYWxzZTtcbiAgICBsZXQgX2NvbG9yQ2FjaGUgPSB7fTtcbiAgICBsZXQgX3VzZUNhY2hlID0gdHJ1ZTtcbiAgICBsZXQgX2dhbW1hID0gMTtcblxuICAgIC8vIHByaXZhdGUgbWV0aG9kc1xuXG4gICAgY29uc3Qgc2V0Q29sb3JzID0gZnVuY3Rpb24gKGNvbG9ycykge1xuICAgICAgICBjb2xvcnMgPSBjb2xvcnMgfHwgWycjZmZmJywgJyMwMDAnXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29sb3JzICYmXG4gICAgICAgICAgICB0eXBlKGNvbG9ycykgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICBjaHJvbWEuYnJld2VyICYmXG4gICAgICAgICAgICBjaHJvbWEuYnJld2VyW2NvbG9ycy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbG9ycyA9IGNocm9tYS5icmV3ZXJbY29sb3JzLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlKGNvbG9ycykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBzaW5nbGUgY29sb3JcbiAgICAgICAgICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY29sb3JzID0gW2NvbG9yc1swXSwgY29sb3JzWzBdXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG1ha2UgYSBjb3B5IG9mIHRoZSBjb2xvcnNcbiAgICAgICAgICAgIGNvbG9ycyA9IGNvbG9ycy5zbGljZSgwKTtcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gY2hyb21hIGNsYXNzZXNcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29sb3JzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgY29sb3JzW2NdID0gY2hyb21hKGNvbG9yc1tjXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhdXRvLWZpbGwgY29sb3IgcG9zaXRpb25cbiAgICAgICAgICAgIF9wb3MubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29sb3JzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgX3Bvcy5wdXNoKGMgLyAoY29sb3JzLmxlbmd0aCAtIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXNldENhY2hlKCk7XG4gICAgICAgIHJldHVybiAoX2NvbG9ycyA9IGNvbG9ycyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldENsYXNzID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmIChfY2xhc3NlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gX2NsYXNzZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIHdoaWxlIChpIDwgbiAmJiB2YWx1ZSA+PSBfY2xhc3Nlc1tpXSkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpIC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9O1xuXG4gICAgbGV0IHRNYXBMaWdodG5lc3MgPSAodCkgPT4gdDtcbiAgICBsZXQgdE1hcERvbWFpbiA9ICh0KSA9PiB0O1xuXG4gICAgLy8gY29uc3QgY2xhc3NpZnlWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgLy8gICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAvLyAgICAgaWYgKF9jbGFzc2VzLmxlbmd0aCA+IDIpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IG4gPSBfY2xhc3Nlcy5sZW5ndGgtMTtcbiAgICAvLyAgICAgICAgIGNvbnN0IGkgPSBnZXRDbGFzcyh2YWx1ZSk7XG4gICAgLy8gICAgICAgICBjb25zdCBtaW5jID0gX2NsYXNzZXNbMF0gKyAoKF9jbGFzc2VzWzFdLV9jbGFzc2VzWzBdKSAqICgwICsgKF9zcHJlYWQgKiAwLjUpKSk7ICAvLyBjZW50ZXIgb2YgMXN0IGNsYXNzXG4gICAgLy8gICAgICAgICBjb25zdCBtYXhjID0gX2NsYXNzZXNbbi0xXSArICgoX2NsYXNzZXNbbl0tX2NsYXNzZXNbbi0xXSkgKiAoMSAtIChfc3ByZWFkICogMC41KSkpOyAgLy8gY2VudGVyIG9mIGxhc3QgY2xhc3NcbiAgICAvLyAgICAgICAgIHZhbCA9IF9taW4gKyAoKCgoX2NsYXNzZXNbaV0gKyAoKF9jbGFzc2VzW2krMV0gLSBfY2xhc3Nlc1tpXSkgKiAwLjUpKSAtIG1pbmMpIC8gKG1heGMtbWluYykpICogKF9tYXggLSBfbWluKSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgcmV0dXJuIHZhbDtcbiAgICAvLyB9O1xuXG4gICAgY29uc3QgZ2V0Q29sb3IgPSBmdW5jdGlvbiAodmFsLCBieXBhc3NNYXApIHtcbiAgICAgICAgbGV0IGNvbCwgdDtcbiAgICAgICAgaWYgKGJ5cGFzc01hcCA9PSBudWxsKSB7XG4gICAgICAgICAgICBieXBhc3NNYXAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4odmFsKSB8fCB2YWwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBfbmFjb2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgIGlmIChfY2xhc3NlcyAmJiBfY2xhc3Nlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgY2xhc3NcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gZ2V0Q2xhc3ModmFsKTtcbiAgICAgICAgICAgICAgICB0ID0gYyAvIChfY2xhc3Nlcy5sZW5ndGggLSAyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX21heCAhPT0gX21pbikge1xuICAgICAgICAgICAgICAgIC8vIGp1c3QgaW50ZXJwb2xhdGUgYmV0d2VlbiBtaW4vbWF4XG4gICAgICAgICAgICAgICAgdCA9ICh2YWwgLSBfbWluKSAvIChfbWF4IC0gX21pbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHQgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdCA9IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbWFpbiBtYXBcbiAgICAgICAgdCA9IHRNYXBEb21haW4odCk7XG5cbiAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgIHQgPSB0TWFwTGlnaHRuZXNzKHQpOyAvLyBsaWdodG5lc3MgY29ycmVjdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9nYW1tYSAhPT0gMSkge1xuICAgICAgICAgICAgdCA9IHBvdyh0LCBfZ2FtbWEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdCA9IF9wYWRkaW5nWzBdICsgdCAqICgxIC0gX3BhZGRpbmdbMF0gLSBfcGFkZGluZ1sxXSk7XG5cbiAgICAgICAgdCA9IGxpbWl0KHQsIDAsIDEpO1xuXG4gICAgICAgIGNvbnN0IGsgPSBNYXRoLmZsb29yKHQgKiAxMDAwMCk7XG5cbiAgICAgICAgaWYgKF91c2VDYWNoZSAmJiBfY29sb3JDYWNoZVtrXSkge1xuICAgICAgICAgICAgY29sID0gX2NvbG9yQ2FjaGVba107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZShfY29sb3JzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIC8vZm9yIGkgaW4gWzAuLl9wb3MubGVuZ3RoLTFdXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfcG9zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBfcG9zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPj0gcCAmJiBpID09PSBfcG9zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCA+IHAgJiYgdCA8IF9wb3NbaSArIDFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHQgLSBwKSAvIChfcG9zW2kgKyAxXSAtIHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gY2hyb21hLmludGVycG9sYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xvcnNbaV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbG9yc1tpICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlKF9jb2xvcnMpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29sID0gX2NvbG9ycyh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfdXNlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICBfY29sb3JDYWNoZVtrXSA9IGNvbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sO1xuICAgIH07XG5cbiAgICB2YXIgcmVzZXRDYWNoZSA9ICgpID0+IChfY29sb3JDYWNoZSA9IHt9KTtcblxuICAgIHNldENvbG9ycyhjb2xvcnMpO1xuXG4gICAgLy8gcHVibGljIGludGVyZmFjZVxuXG4gICAgY29uc3QgZiA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjaHJvbWEoZ2V0Q29sb3IodikpO1xuICAgICAgICBpZiAoX291dCAmJiBjW19vdXRdKSB7XG4gICAgICAgICAgICByZXR1cm4gY1tfb3V0XSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5jbGFzc2VzID0gZnVuY3Rpb24gKGNsYXNzZXMpIHtcbiAgICAgICAgaWYgKGNsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUoY2xhc3NlcykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IGNsYXNzZXM7XG4gICAgICAgICAgICAgICAgX2RvbWFpbiA9IFtjbGFzc2VzWzBdLCBjbGFzc2VzW2NsYXNzZXMubGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkID0gY2hyb21hLmFuYWx5emUoX2RvbWFpbik7XG4gICAgICAgICAgICAgICAgaWYgKGNsYXNzZXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBbZC5taW4sIGQubWF4XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IGNocm9tYS5saW1pdHMoZCwgJ2UnLCBjbGFzc2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2NsYXNzZXM7XG4gICAgfTtcblxuICAgIGYuZG9tYWluID0gZnVuY3Rpb24gKGRvbWFpbikge1xuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBfZG9tYWluO1xuICAgICAgICB9XG4gICAgICAgIF9taW4gPSBkb21haW5bMF07XG4gICAgICAgIF9tYXggPSBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdO1xuICAgICAgICBfcG9zID0gW107XG4gICAgICAgIGNvbnN0IGsgPSBfY29sb3JzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPT09IGsgJiYgX21pbiAhPT0gX21heCkge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHBvc2l0aW9uc1xuICAgICAgICAgICAgZm9yIChsZXQgZCBvZiBBcnJheS5mcm9tKGRvbWFpbikpIHtcbiAgICAgICAgICAgICAgICBfcG9zLnB1c2goKGQgLSBfbWluKSAvIChfbWF4IC0gX21pbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBrOyBjKyspIHtcbiAgICAgICAgICAgICAgICBfcG9zLnB1c2goYyAvIChrIC0gMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRvbWFpbi5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGRvbWFpbiBtYXBcbiAgICAgICAgICAgICAgICBjb25zdCB0T3V0ID0gZG9tYWluLm1hcCgoZCwgaSkgPT4gaSAvIChkb21haW4ubGVuZ3RoIC0gMSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRCcmVha3MgPSBkb21haW4ubWFwKChkKSA9PiAoZCAtIF9taW4pIC8gKF9tYXggLSBfbWluKSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0QnJlYWtzLmV2ZXJ5KCh2YWwsIGkpID0+IHRPdXRbaV0gPT09IHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdE1hcERvbWFpbiA9ICh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA8PSAwIHx8IHQgPj0gMSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodCA+PSB0QnJlYWtzW2kgKyAxXSkgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQgLSB0QnJlYWtzW2ldKSAvICh0QnJlYWtzW2kgKyAxXSAtIHRCcmVha3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0ID0gdE91dFtpXSArIGYgKiAodE91dFtpICsgMV0gLSB0T3V0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9kb21haW4gPSBbX21pbiwgX21heF07XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLm1vZGUgPSBmdW5jdGlvbiAoX20pIHtcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gX21vZGU7XG4gICAgICAgIH1cbiAgICAgICAgX21vZGUgPSBfbTtcbiAgICAgICAgcmVzZXRDYWNoZSgpO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5yYW5nZSA9IGZ1bmN0aW9uIChjb2xvcnMsIF9wb3MpIHtcbiAgICAgICAgc2V0Q29sb3JzKGNvbG9ycywgX3Bvcyk7XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLm91dCA9IGZ1bmN0aW9uIChfbykge1xuICAgICAgICBfb3V0ID0gX287XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmLnNwcmVhZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3NwcmVhZDtcbiAgICAgICAgfVxuICAgICAgICBfc3ByZWFkID0gdmFsO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5jb3JyZWN0TGlnaHRuZXNzID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgaWYgKHYgPT0gbnVsbCkge1xuICAgICAgICAgICAgdiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgX2NvcnJlY3RMaWdodG5lc3MgPSB2O1xuICAgICAgICByZXNldENhY2hlKCk7XG4gICAgICAgIGlmIChfY29ycmVjdExpZ2h0bmVzcykge1xuICAgICAgICAgICAgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgTDAgPSBnZXRDb2xvcigwLCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBMMSA9IGdldENvbG9yKDEsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbCA9IEwwID4gTDE7XG4gICAgICAgICAgICAgICAgbGV0IExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgTF9pZGVhbCA9IEwwICsgKEwxIC0gTDApICogdDtcbiAgICAgICAgICAgICAgICBsZXQgTF9kaWZmID0gTF9hY3R1YWwgLSBMX2lkZWFsO1xuICAgICAgICAgICAgICAgIGxldCB0MCA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IHQxID0gMTtcbiAgICAgICAgICAgICAgICBsZXQgbWF4X2l0ZXIgPSAyMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoTWF0aC5hYnMoTF9kaWZmKSA+IDFlLTIgJiYgbWF4X2l0ZXItLSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMX2RpZmYgKj0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTF9kaWZmIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQwID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICs9ICh0MSAtIHQpICogMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAodDAgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKExfZGlmZiA9IExfYWN0dWFsIC0gTF9pZGVhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRNYXBMaWdodG5lc3MgPSAodCkgPT4gdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgZi5wYWRkaW5nID0gZnVuY3Rpb24gKHApIHtcbiAgICAgICAgaWYgKHAgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUocCkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcCA9IFtwLCBwXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9wYWRkaW5nID0gcDtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIF9wYWRkaW5nO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGYuY29sb3JzID0gZnVuY3Rpb24gKG51bUNvbG9ycywgb3V0KSB7XG4gICAgICAgIC8vIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHJldHVybiB0aGUgb3JpZ2luYWwgY29sb3JzIHRoYXQgd2VyZSBwcm92aWRlZFxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIG91dCA9ICdoZXgnO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gX2NvbG9ycy5zbGljZSgwKTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1Db2xvcnMgPT09IDEpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFtmKDAuNSldO1xuICAgICAgICB9IGVsc2UgaWYgKG51bUNvbG9ycyA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGRtID0gX2RvbWFpblswXTtcbiAgICAgICAgICAgIGNvbnN0IGRkID0gX2RvbWFpblsxXSAtIGRtO1xuICAgICAgICAgICAgcmVzdWx0ID0gX19yYW5nZV9fKDAsIG51bUNvbG9ycywgZmFsc2UpLm1hcCgoaSkgPT5cbiAgICAgICAgICAgICAgICBmKGRtICsgKGkgLyAobnVtQ29sb3JzIC0gMSkpICogZGQpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJucyBhbGwgY29sb3JzIGJhc2VkIG9uIHRoZSBkZWZpbmVkIGNsYXNzZXNcbiAgICAgICAgICAgIGNvbG9ycyA9IFtdO1xuICAgICAgICAgICAgbGV0IHNhbXBsZXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChfY2xhc3NlcyAmJiBfY2xhc3Nlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAxLCBlbmQgPSBfY2xhc3Nlcy5sZW5ndGgsIGFzYyA9IDEgPD0gZW5kO1xuICAgICAgICAgICAgICAgICAgICBhc2MgPyBpIDwgZW5kIDogaSA+IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgYXNjID8gaSsrIDogaS0tXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZXMucHVzaCgoX2NsYXNzZXNbaSAtIDFdICsgX2NsYXNzZXNbaV0pICogMC41KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNhbXBsZXMgPSBfZG9tYWluO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ID0gc2FtcGxlcy5tYXAoKHYpID0+IGYodikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNocm9tYVtvdXRdKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQubWFwKChjKSA9PiBjW291dF0oKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgZi5jYWNoZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChjICE9IG51bGwpIHtcbiAgICAgICAgICAgIF91c2VDYWNoZSA9IGM7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfdXNlQ2FjaGU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5nYW1tYSA9IGZ1bmN0aW9uIChnKSB7XG4gICAgICAgIGlmIChnICE9IG51bGwpIHtcbiAgICAgICAgICAgIF9nYW1tYSA9IGc7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfZ2FtbWE7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZi5ub2RhdGEgPSBmdW5jdGlvbiAoZCkge1xuICAgICAgICBpZiAoZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBfbmFjb2wgPSBjaHJvbWEoZCk7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfbmFjb2w7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGY7XG59XG5cbmZ1bmN0aW9uIF9fcmFuZ2VfXyhsZWZ0LCByaWdodCwgaW5jbHVzaXZlKSB7XG4gICAgbGV0IHJhbmdlID0gW107XG4gICAgbGV0IGFzY2VuZGluZyA9IGxlZnQgPCByaWdodDtcbiAgICBsZXQgZW5kID0gIWluY2x1c2l2ZSA/IHJpZ2h0IDogYXNjZW5kaW5nID8gcmlnaHQgKyAxIDogcmlnaHQgLSAxO1xuICAgIGZvciAobGV0IGkgPSBsZWZ0OyBhc2NlbmRpbmcgPyBpIDwgZW5kIDogaSA+IGVuZDsgYXNjZW5kaW5nID8gaSsrIDogaS0tKSB7XG4gICAgICAgIHJhbmdlLnB1c2goaSk7XG4gICAgfVxuICAgIHJldHVybiByYW5nZTtcbn1cbiIsICIvL1xuLy8gaW50ZXJwb2xhdGVzIGJldHdlZW4gYSBzZXQgb2YgY29sb3JzIHV6aW5nIGEgYmV6aWVyIHNwbGluZVxuLy9cblxuLy8gQHJlcXVpcmVzIHV0aWxzIGxhYlxuaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmltcG9ydCAnLi4vaW8vbGFiL2luZGV4LmpzJztcbmltcG9ydCBzY2FsZSBmcm9tICcuL3NjYWxlLmpzJztcblxuLy8gbnRoIHJvdyBvZiB0aGUgcGFzY2FsIHRyaWFuZ2xlXG5jb25zdCBiaW5vbV9yb3cgPSBmdW5jdGlvbiAobikge1xuICAgIGxldCByb3cgPSBbMSwgMV07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgbGV0IG5ld3JvdyA9IFsxXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBuZXdyb3dbal0gPSAocm93W2pdIHx8IDApICsgcm93W2ogLSAxXTtcbiAgICAgICAgfVxuICAgICAgICByb3cgPSBuZXdyb3c7XG4gICAgfVxuICAgIHJldHVybiByb3c7XG59O1xuXG5jb25zdCBiZXppZXIgPSBmdW5jdGlvbiAoY29sb3JzKSB7XG4gICAgbGV0IEksIGxhYjAsIGxhYjEsIGxhYjI7XG4gICAgY29sb3JzID0gY29sb3JzLm1hcCgoYykgPT4gbmV3IENvbG9yKGMpKTtcbiAgICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBbbGFiMCwgbGFiMV0gPSBjb2xvcnMubWFwKChjKSA9PiBjLmxhYigpKTtcbiAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBjb25zdCBsYWIgPSBbMCwgMSwgMl0ubWFwKChpKSA9PiBsYWIwW2ldICsgdCAqIChsYWIxW2ldIC0gbGFiMFtpXSkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgLy8gcXVhZHJhdGljIGJlemllciBpbnRlcnBvbGF0aW9uXG4gICAgICAgIFtsYWIwLCBsYWIxLCBsYWIyXSA9IGNvbG9ycy5tYXAoKGMpID0+IGMubGFiKCkpO1xuICAgICAgICBJID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYiA9IFswLCAxLCAyXS5tYXAoXG4gICAgICAgICAgICAgICAgKGkpID0+XG4gICAgICAgICAgICAgICAgICAgICgxIC0gdCkgKiAoMSAtIHQpICogbGFiMFtpXSArXG4gICAgICAgICAgICAgICAgICAgIDIgKiAoMSAtIHQpICogdCAqIGxhYjFbaV0gK1xuICAgICAgICAgICAgICAgICAgICB0ICogdCAqIGxhYjJbaV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGxhYiwgJ2xhYicpO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAvLyBjdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvblxuICAgICAgICBsZXQgbGFiMztcbiAgICAgICAgW2xhYjAsIGxhYjEsIGxhYjIsIGxhYjNdID0gY29sb3JzLm1hcCgoYykgPT4gYy5sYWIoKSk7XG4gICAgICAgIEkgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgY29uc3QgbGFiID0gWzAsIDEsIDJdLm1hcChcbiAgICAgICAgICAgICAgICAoaSkgPT5cbiAgICAgICAgICAgICAgICAgICAgKDEgLSB0KSAqICgxIC0gdCkgKiAoMSAtIHQpICogbGFiMFtpXSArXG4gICAgICAgICAgICAgICAgICAgIDMgKiAoMSAtIHQpICogKDEgLSB0KSAqIHQgKiBsYWIxW2ldICtcbiAgICAgICAgICAgICAgICAgICAgMyAqICgxIC0gdCkgKiB0ICogdCAqIGxhYjJbaV0gK1xuICAgICAgICAgICAgICAgICAgICB0ICogdCAqIHQgKiBsYWIzW2ldXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihsYWIsICdsYWInKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPj0gNSkge1xuICAgICAgICAvLyBnZW5lcmFsIGNhc2UgKGRlZ3JlZSBuIGJlemllcilcbiAgICAgICAgbGV0IGxhYnMsIHJvdywgbjtcbiAgICAgICAgbGFicyA9IGNvbG9ycy5tYXAoKGMpID0+IGMubGFiKCkpO1xuICAgICAgICBuID0gY29sb3JzLmxlbmd0aCAtIDE7XG4gICAgICAgIHJvdyA9IGJpbm9tX3JvdyhuKTtcbiAgICAgICAgSSA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBjb25zdCB1ID0gMSAtIHQ7XG4gICAgICAgICAgICBjb25zdCBsYWIgPSBbMCwgMSwgMl0ubWFwKChpKSA9PlxuICAgICAgICAgICAgICAgIGxhYnMucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAoc3VtLCBlbCwgaikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArIHJvd1tqXSAqIHUgKiogKG4gLSBqKSAqIHQgKiogaiAqIGVsW2ldLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IobGFiLCAnbGFiJyk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ05vIHBvaW50IGluIHJ1bm5pbmcgYmV6aWVyIHdpdGggb25seSBvbmUgY29sb3IuJyk7XG4gICAgfVxuICAgIHJldHVybiBJO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKGNvbG9ycykgPT4ge1xuICAgIGNvbnN0IGYgPSBiZXppZXIoY29sb3JzKTtcbiAgICBmLnNjYWxlID0gKCkgPT4gc2NhbGUoZik7XG4gICAgcmV0dXJuIGY7XG59O1xuIiwgIi8qXG4gKiBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBjb2xvcnMgdXppbmcgYSBiZXppZXIgc3BsaW5lXG4gKiBibGVuZCBtb2RlIGZvcm11bGFzIHRha2VuIGZyb20gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTgwMTEwMDE0OTQ2L2h0dHA6Ly93d3cudmVudHVyZS13YXJlLmNvbS9rZXZpbi9jb2RpbmcvbGV0cy1sZWFybi1tYXRoLXBob3Rvc2hvcC1ibGVuZC1tb2Rlcy9cbiAqL1xuXG5pbXBvcnQgJy4uL2lvL3JnYi9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uL2Nocm9tYS5qcyc7XG5cbmNvbnN0IGJsZW5kID0gKGJvdHRvbSwgdG9wLCBtb2RlKSA9PiB7XG4gICAgaWYgKCFibGVuZFttb2RlXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gYmxlbmQgbW9kZSAnICsgbW9kZSk7XG4gICAgfVxuICAgIHJldHVybiBibGVuZFttb2RlXShib3R0b20sIHRvcCk7XG59O1xuXG5jb25zdCBibGVuZF9mID0gKGYpID0+IChib3R0b20sIHRvcCkgPT4ge1xuICAgIGNvbnN0IGMwID0gY2hyb21hKHRvcCkucmdiKCk7XG4gICAgY29uc3QgYzEgPSBjaHJvbWEoYm90dG9tKS5yZ2IoKTtcbiAgICByZXR1cm4gY2hyb21hLnJnYihmKGMwLCBjMSkpO1xufTtcblxuY29uc3QgZWFjaCA9IChmKSA9PiAoYzAsIGMxKSA9PiB7XG4gICAgY29uc3Qgb3V0ID0gW107XG4gICAgb3V0WzBdID0gZihjMFswXSwgYzFbMF0pO1xuICAgIG91dFsxXSA9IGYoYzBbMV0sIGMxWzFdKTtcbiAgICBvdXRbMl0gPSBmKGMwWzJdLCBjMVsyXSk7XG4gICAgcmV0dXJuIG91dDtcbn07XG5cbmNvbnN0IG5vcm1hbCA9IChhKSA9PiBhO1xuY29uc3QgbXVsdGlwbHkgPSAoYSwgYikgPT4gKGEgKiBiKSAvIDI1NTtcbmNvbnN0IGRhcmtlbiA9IChhLCBiKSA9PiAoYSA+IGIgPyBiIDogYSk7XG5jb25zdCBsaWdodGVuID0gKGEsIGIpID0+IChhID4gYiA/IGEgOiBiKTtcbmNvbnN0IHNjcmVlbiA9IChhLCBiKSA9PiAyNTUgKiAoMSAtICgxIC0gYSAvIDI1NSkgKiAoMSAtIGIgLyAyNTUpKTtcbmNvbnN0IG92ZXJsYXkgPSAoYSwgYikgPT5cbiAgICBiIDwgMTI4ID8gKDIgKiBhICogYikgLyAyNTUgOiAyNTUgKiAoMSAtIDIgKiAoMSAtIGEgLyAyNTUpICogKDEgLSBiIC8gMjU1KSk7XG5jb25zdCBidXJuID0gKGEsIGIpID0+IDI1NSAqICgxIC0gKDEgLSBiIC8gMjU1KSAvIChhIC8gMjU1KSk7XG5jb25zdCBkb2RnZSA9IChhLCBiKSA9PiB7XG4gICAgaWYgKGEgPT09IDI1NSkgcmV0dXJuIDI1NTtcbiAgICBhID0gKDI1NSAqIChiIC8gMjU1KSkgLyAoMSAtIGEgLyAyNTUpO1xuICAgIHJldHVybiBhID4gMjU1ID8gMjU1IDogYTtcbn07XG5cbi8vICMgYWRkID0gKGEsYikgLT5cbi8vICMgICAgIGlmIChhICsgYiA+IDI1NSkgdGhlbiAyNTUgZWxzZSBhICsgYlxuXG5ibGVuZC5ub3JtYWwgPSBibGVuZF9mKGVhY2gobm9ybWFsKSk7XG5ibGVuZC5tdWx0aXBseSA9IGJsZW5kX2YoZWFjaChtdWx0aXBseSkpO1xuYmxlbmQuc2NyZWVuID0gYmxlbmRfZihlYWNoKHNjcmVlbikpO1xuYmxlbmQub3ZlcmxheSA9IGJsZW5kX2YoZWFjaChvdmVybGF5KSk7XG5ibGVuZC5kYXJrZW4gPSBibGVuZF9mKGVhY2goZGFya2VuKSk7XG5ibGVuZC5saWdodGVuID0gYmxlbmRfZihlYWNoKGxpZ2h0ZW4pKTtcbmJsZW5kLmRvZGdlID0gYmxlbmRfZihlYWNoKGRvZGdlKSk7XG5ibGVuZC5idXJuID0gYmxlbmRfZihlYWNoKGJ1cm4pKTtcbi8vIGJsZW5kLmFkZCA9IGJsZW5kX2YoZWFjaChhZGQpKTtcblxuZXhwb3J0IGRlZmF1bHQgYmxlbmQ7XG4iLCAiLy8gY3ViZWhlbGl4IGludGVycG9sYXRpb25cbi8vIGJhc2VkIG9uIEQuQS4gR3JlZW4gXCJBIGNvbG91ciBzY2hlbWUgZm9yIHRoZSBkaXNwbGF5IG9mIGFzdHJvbm9taWNhbCBpbnRlbnNpdHkgaW1hZ2VzXCJcbi8vIGh0dHA6Ly9hc3Ryb24tc29jLmluL2J1bGxldGluLzExSnVuZS8yODkzOTIwMTEucGRmXG5pbXBvcnQgeyB0eXBlLCBjbGlwX3JnYiwgVFdPUEkgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJy4uL2Nocm9tYS5qcyc7XG5jb25zdCB7IHBvdywgc2luLCBjb3MgfSA9IE1hdGg7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChcbiAgICBzdGFydCA9IDMwMCxcbiAgICByb3RhdGlvbnMgPSAtMS41LFxuICAgIGh1ZSA9IDEsXG4gICAgZ2FtbWEgPSAxLFxuICAgIGxpZ2h0bmVzcyA9IFswLCAxXVxuKSB7XG4gICAgbGV0IGRoID0gMCxcbiAgICAgICAgZGw7XG4gICAgaWYgKHR5cGUobGlnaHRuZXNzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICBkbCA9IGxpZ2h0bmVzc1sxXSAtIGxpZ2h0bmVzc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkbCA9IDA7XG4gICAgICAgIGxpZ2h0bmVzcyA9IFtsaWdodG5lc3MsIGxpZ2h0bmVzc107XG4gICAgfVxuICAgIGNvbnN0IGYgPSBmdW5jdGlvbiAoZnJhY3QpIHtcbiAgICAgICAgY29uc3QgYSA9IFRXT1BJICogKChzdGFydCArIDEyMCkgLyAzNjAgKyByb3RhdGlvbnMgKiBmcmFjdCk7XG4gICAgICAgIGNvbnN0IGwgPSBwb3cobGlnaHRuZXNzWzBdICsgZGwgKiBmcmFjdCwgZ2FtbWEpO1xuICAgICAgICBjb25zdCBoID0gZGggIT09IDAgPyBodWVbMF0gKyBmcmFjdCAqIGRoIDogaHVlO1xuICAgICAgICBjb25zdCBhbXAgPSAoaCAqIGwgKiAoMSAtIGwpKSAvIDI7XG4gICAgICAgIGNvbnN0IGNvc19hID0gY29zKGEpO1xuICAgICAgICBjb25zdCBzaW5fYSA9IHNpbihhKTtcbiAgICAgICAgY29uc3QgciA9IGwgKyBhbXAgKiAoLTAuMTQ4NjEgKiBjb3NfYSArIDEuNzgyNzcgKiBzaW5fYSk7XG4gICAgICAgIGNvbnN0IGcgPSBsICsgYW1wICogKC0wLjI5MjI3ICogY29zX2EgLSAwLjkwNjQ5ICogc2luX2EpO1xuICAgICAgICBjb25zdCBiID0gbCArIGFtcCAqICgrMS45NzI5NCAqIGNvc19hKTtcbiAgICAgICAgcmV0dXJuIGNocm9tYShjbGlwX3JnYihbciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NSwgMV0pKTtcbiAgICB9O1xuICAgIGYuc3RhcnQgPSBmdW5jdGlvbiAocykge1xuICAgICAgICBpZiAocyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnQgPSBzO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYucm90YXRpb25zID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdGF0aW9ucztcbiAgICAgICAgfVxuICAgICAgICByb3RhdGlvbnMgPSByO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYuZ2FtbWEgPSBmdW5jdGlvbiAoZykge1xuICAgICAgICBpZiAoZyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2FtbWE7XG4gICAgICAgIH1cbiAgICAgICAgZ2FtbWEgPSBnO1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYuaHVlID0gZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgaWYgKGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGh1ZTtcbiAgICAgICAgfVxuICAgICAgICBodWUgPSBoO1xuICAgICAgICBpZiAodHlwZShodWUpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBkaCA9IGh1ZVsxXSAtIGh1ZVswXTtcbiAgICAgICAgICAgIGlmIChkaCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGh1ZSA9IGh1ZVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRoID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuICAgIGYubGlnaHRuZXNzID0gZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgaWYgKGggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxpZ2h0bmVzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZShoKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgbGlnaHRuZXNzID0gaDtcbiAgICAgICAgICAgIGRsID0gaFsxXSAtIGhbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaWdodG5lc3MgPSBbaCwgaF07XG4gICAgICAgICAgICBkbCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcbiAgICBmLnNjYWxlID0gKCkgPT4gY2hyb21hLnNjYWxlKGYpO1xuICAgIGYuaHVlKGh1ZSk7XG4gICAgcmV0dXJuIGY7XG59XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcbmNvbnN0IGRpZ2l0cyA9ICcwMTIzNDU2Nzg5YWJjZGVmJztcblxuY29uc3QgeyBmbG9vciwgcmFuZG9tIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICAgbGV0IGNvZGUgPSAnIyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgY29kZSArPSBkaWdpdHMuY2hhckF0KGZsb29yKHJhbmRvbSgpICogMTYpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDb2xvcihjb2RlLCAnaGV4Jyk7XG59O1xuIiwgImltcG9ydCB0eXBlIGZyb20gJy4vdHlwZS5qcyc7XG5cbmNvbnN0IHsgbG9nLCBwb3csIGZsb29yLCBhYnMgfSA9IE1hdGg7XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXplKGRhdGEsIGtleSA9IG51bGwpIHtcbiAgICBjb25zdCByID0ge1xuICAgICAgICBtaW46IE51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgIG1heDogTnVtYmVyLk1BWF9WQUxVRSAqIC0xLFxuICAgICAgICBzdW06IDAsXG4gICAgICAgIHZhbHVlczogW10sXG4gICAgICAgIGNvdW50OiAwXG4gICAgfTtcbiAgICBpZiAodHlwZShkYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZGF0YSA9IE9iamVjdC52YWx1ZXMoZGF0YSk7XG4gICAgfVxuICAgIGRhdGEuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgIGlmIChrZXkgJiYgdHlwZSh2YWwpID09PSAnb2JqZWN0JykgdmFsID0gdmFsW2tleV07XG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgICAgIHIudmFsdWVzLnB1c2godmFsKTtcbiAgICAgICAgICAgIHIuc3VtICs9IHZhbDtcbiAgICAgICAgICAgIGlmICh2YWwgPCByLm1pbikgci5taW4gPSB2YWw7XG4gICAgICAgICAgICBpZiAodmFsID4gci5tYXgpIHIubWF4ID0gdmFsO1xuICAgICAgICAgICAgci5jb3VudCArPSAxO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByLmRvbWFpbiA9IFtyLm1pbiwgci5tYXhdO1xuXG4gICAgci5saW1pdHMgPSAobW9kZSwgbnVtKSA9PiBsaW1pdHMociwgbW9kZSwgbnVtKTtcblxuICAgIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGltaXRzKGRhdGEsIG1vZGUgPSAnZXF1YWwnLCBudW0gPSA3KSB7XG4gICAgaWYgKHR5cGUoZGF0YSkgPT0gJ2FycmF5Jykge1xuICAgICAgICBkYXRhID0gYW5hbHl6ZShkYXRhKTtcbiAgICB9XG4gICAgY29uc3QgeyBtaW4sIG1heCB9ID0gZGF0YTtcbiAgICBjb25zdCB2YWx1ZXMgPSBkYXRhLnZhbHVlcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG5cbiAgICBpZiAobnVtID09PSAxKSB7XG4gICAgICAgIHJldHVybiBbbWluLCBtYXhdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0cyA9IFtdO1xuXG4gICAgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAnYycpIHtcbiAgICAgICAgLy8gY29udGludW91c1xuICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH1cblxuICAgIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2UnKSB7XG4gICAgICAgIC8vIGVxdWFsIGludGVydmFsXG4gICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtOyBpKyspIHtcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbiArIChpIC8gbnVtKSAqIChtYXggLSBtaW4pKTtcbiAgICAgICAgfVxuICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgIH0gZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwgMSkgPT09ICdsJykge1xuICAgICAgICAvLyBsb2cgc2NhbGVcbiAgICAgICAgaWYgKG1pbiA8PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0xvZ2FyaXRobWljIHNjYWxlcyBhcmUgb25seSBwb3NzaWJsZSBmb3IgdmFsdWVzID4gMCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWluX2xvZyA9IE1hdGguTE9HMTBFICogbG9nKG1pbik7XG4gICAgICAgIGNvbnN0IG1heF9sb2cgPSBNYXRoLkxPRzEwRSAqIGxvZyhtYXgpO1xuICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgICAgICBsaW1pdHMucHVzaChwb3coMTAsIG1pbl9sb2cgKyAoaSAvIG51bSkgKiAobWF4X2xvZyAtIG1pbl9sb2cpKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICB9IGVsc2UgaWYgKG1vZGUuc3Vic3RyKDAsIDEpID09PSAncScpIHtcbiAgICAgICAgLy8gcXVhbnRpbGUgc2NhbGVcbiAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcCA9ICgodmFsdWVzLmxlbmd0aCAtIDEpICogaSkgLyBudW07XG4gICAgICAgICAgICBjb25zdCBwYiA9IGZsb29yKHApO1xuICAgICAgICAgICAgaWYgKHBiID09PSBwKSB7XG4gICAgICAgICAgICAgICAgbGltaXRzLnB1c2godmFsdWVzW3BiXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHAgPiBwYlxuICAgICAgICAgICAgICAgIGNvbnN0IHByID0gcCAtIHBiO1xuICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHZhbHVlc1twYl0gKiAoMSAtIHByKSArIHZhbHVlc1twYiArIDFdICogcHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgfSBlbHNlIGlmIChtb2RlLnN1YnN0cigwLCAxKSA9PT0gJ2snKSB7XG4gICAgICAgIC8vIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAvKlxuICAgICAgICBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvblxuICAgICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZmlndWUvc291cmNlL2Jyb3dzZS90cnVuay9maWd1ZS5qcyMzMzZcbiAgICAgICAgc2ltcGxpZmllZCBmb3IgMS1kIGlucHV0IHZhbHVlc1xuICAgICAgICAqL1xuICAgICAgICBsZXQgY2x1c3RlcjtcbiAgICAgICAgY29uc3QgbiA9IHZhbHVlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGFzc2lnbm1lbnRzID0gbmV3IEFycmF5KG4pO1xuICAgICAgICBjb25zdCBjbHVzdGVyU2l6ZXMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgbGV0IHJlcGVhdCA9IHRydWU7XG4gICAgICAgIGxldCBuYl9pdGVycyA9IDA7XG4gICAgICAgIGxldCBjZW50cm9pZHMgPSBudWxsO1xuXG4gICAgICAgIC8vIGdldCBzZWVkIHZhbHVlc1xuICAgICAgICBjZW50cm9pZHMgPSBbXTtcbiAgICAgICAgY2VudHJvaWRzLnB1c2gobWluKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgY2VudHJvaWRzLnB1c2gobWluICsgKGkgLyBudW0pICogKG1heCAtIG1pbikpO1xuICAgICAgICB9XG4gICAgICAgIGNlbnRyb2lkcy5wdXNoKG1heCk7XG5cbiAgICAgICAgd2hpbGUgKHJlcGVhdCkge1xuICAgICAgICAgICAgLy8gYXNzaWdubWVudCBzdGVwXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgY2x1c3RlclNpemVzW2pdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgbGV0IG1pbmRpc3QgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgIGxldCBiZXN0O1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdCA9IGFicyhjZW50cm9pZHNbal0gLSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXN0IDwgbWluZGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0ID0gajtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyU2l6ZXNbYmVzdF0rKztcbiAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHNbaV0gPSBiZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdXBkYXRlIGNlbnRyb2lkcyBzdGVwXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50cm9pZHMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbal0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaV07XG4gICAgICAgICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tjbHVzdGVyXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbY2x1c3Rlcl0gPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2NsdXN0ZXJdICs9IHZhbHVlc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2pdICo9IDEgLyBjbHVzdGVyU2l6ZXNbal07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIGNvbnZlcmdlbmNlXG4gICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3Q2VudHJvaWRzW2pdICE9PSBjZW50cm9pZHNbal0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjZW50cm9pZHMgPSBuZXdDZW50cm9pZHM7XG4gICAgICAgICAgICBuYl9pdGVycysrO1xuXG4gICAgICAgICAgICBpZiAobmJfaXRlcnMgPiAyMDApIHtcbiAgICAgICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZpbmlzaGVkIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAvLyB0aGUgbmV4dCBwYXJ0IGlzIGJvcnJvd2VkIGZyb20gZ2FicmllbGZsb3IuaXRcbiAgICAgICAgY29uc3Qga0NsdXN0ZXJzID0ge307XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtOyBqKyspIHtcbiAgICAgICAgICAgIGtDbHVzdGVyc1tqXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaV07XG4gICAgICAgICAgICBrQ2x1c3RlcnNbY2x1c3Rlcl0ucHVzaCh2YWx1ZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0bXBLTWVhbnNCcmVha3MgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW07IGorKykge1xuICAgICAgICAgICAgdG1wS01lYW5zQnJlYWtzLnB1c2goa0NsdXN0ZXJzW2pdWzBdKTtcbiAgICAgICAgICAgIHRtcEtNZWFuc0JyZWFrcy5wdXNoKGtDbHVzdGVyc1tqXVtrQ2x1c3RlcnNbal0ubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgICAgIHRtcEtNZWFuc0JyZWFrcyA9IHRtcEtNZWFuc0JyZWFrcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICAgIGxpbWl0cy5wdXNoKHRtcEtNZWFuc0JyZWFrc1swXSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdG1wS01lYW5zQnJlYWtzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdG1wS01lYW5zQnJlYWtzW2ldO1xuICAgICAgICAgICAgaWYgKCFpc05hTih2KSAmJiBsaW1pdHMuaW5kZXhPZih2KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsaW1pdHMucHVzaCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGltaXRzO1xufVxuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5pbXBvcnQgJy4uL29wcy9sdW1pbmFuY2UuanMnO1xuXG5leHBvcnQgZGVmYXVsdCAoYSwgYikgPT4ge1xuICAgIC8vIFdDQUcgY29udHJhc3QgcmF0aW9cbiAgICAvLyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMtV0NBRzIwLTIwMDgxMjExLyNjb250cmFzdC1yYXRpb2RlZlxuICAgIGEgPSBuZXcgQ29sb3IoYSk7XG4gICAgYiA9IG5ldyBDb2xvcihiKTtcbiAgICBjb25zdCBsMSA9IGEubHVtaW5hbmNlKCk7XG4gICAgY29uc3QgbDIgPSBiLmx1bWluYW5jZSgpO1xuICAgIHJldHVybiBsMSA+IGwyID8gKGwxICsgMC4wNSkgLyAobDIgKyAwLjA1KSA6IChsMiArIDAuMDUpIC8gKGwxICsgMC4wNSk7XG59O1xuIiwgImltcG9ydCBDb2xvciBmcm9tICcuLi9Db2xvci5qcyc7XG5jb25zdCB7IHNxcnQsIHBvdywgbWluLCBtYXgsIGF0YW4yLCBhYnMsIGNvcywgc2luLCBleHAsIFBJIH0gPSBNYXRoO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoYSwgYiwgS2wgPSAxLCBLYyA9IDEsIEtoID0gMSkge1xuICAgIC8vIERlbHRhIEUgKENJRSAyMDAwKVxuICAgIC8vIHNlZSBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9EZWx0YUVfQ0lFMjAwMC5odG1sXG4gICAgdmFyIHJhZDJkZWcgPSBmdW5jdGlvbiAocmFkKSB7XG4gICAgICAgIHJldHVybiAoMzYwICogcmFkKSAvICgyICogUEkpO1xuICAgIH07XG4gICAgdmFyIGRlZzJyYWQgPSBmdW5jdGlvbiAoZGVnKSB7XG4gICAgICAgIHJldHVybiAoMiAqIFBJICogZGVnKSAvIDM2MDtcbiAgICB9O1xuICAgIGEgPSBuZXcgQ29sb3IoYSk7XG4gICAgYiA9IG5ldyBDb2xvcihiKTtcbiAgICBjb25zdCBbTDEsIGExLCBiMV0gPSBBcnJheS5mcm9tKGEubGFiKCkpO1xuICAgIGNvbnN0IFtMMiwgYTIsIGIyXSA9IEFycmF5LmZyb20oYi5sYWIoKSk7XG4gICAgY29uc3QgYXZnTCA9IChMMSArIEwyKSAvIDI7XG4gICAgY29uc3QgQzEgPSBzcXJ0KHBvdyhhMSwgMikgKyBwb3coYjEsIDIpKTtcbiAgICBjb25zdCBDMiA9IHNxcnQocG93KGEyLCAyKSArIHBvdyhiMiwgMikpO1xuICAgIGNvbnN0IGF2Z0MgPSAoQzEgKyBDMikgLyAyO1xuICAgIGNvbnN0IEcgPSAwLjUgKiAoMSAtIHNxcnQocG93KGF2Z0MsIDcpIC8gKHBvdyhhdmdDLCA3KSArIHBvdygyNSwgNykpKSk7XG4gICAgY29uc3QgYTFwID0gYTEgKiAoMSArIEcpO1xuICAgIGNvbnN0IGEycCA9IGEyICogKDEgKyBHKTtcbiAgICBjb25zdCBDMXAgPSBzcXJ0KHBvdyhhMXAsIDIpICsgcG93KGIxLCAyKSk7XG4gICAgY29uc3QgQzJwID0gc3FydChwb3coYTJwLCAyKSArIHBvdyhiMiwgMikpO1xuICAgIGNvbnN0IGF2Z0NwID0gKEMxcCArIEMycCkgLyAyO1xuICAgIGNvbnN0IGFyY3RhbjEgPSByYWQyZGVnKGF0YW4yKGIxLCBhMXApKTtcbiAgICBjb25zdCBhcmN0YW4yID0gcmFkMmRlZyhhdGFuMihiMiwgYTJwKSk7XG4gICAgY29uc3QgaDFwID0gYXJjdGFuMSA+PSAwID8gYXJjdGFuMSA6IGFyY3RhbjEgKyAzNjA7XG4gICAgY29uc3QgaDJwID0gYXJjdGFuMiA+PSAwID8gYXJjdGFuMiA6IGFyY3RhbjIgKyAzNjA7XG4gICAgY29uc3QgYXZnSHAgPVxuICAgICAgICBhYnMoaDFwIC0gaDJwKSA+IDE4MCA/IChoMXAgKyBoMnAgKyAzNjApIC8gMiA6IChoMXAgKyBoMnApIC8gMjtcbiAgICBjb25zdCBUID1cbiAgICAgICAgMSAtXG4gICAgICAgIDAuMTcgKiBjb3MoZGVnMnJhZChhdmdIcCAtIDMwKSkgK1xuICAgICAgICAwLjI0ICogY29zKGRlZzJyYWQoMiAqIGF2Z0hwKSkgK1xuICAgICAgICAwLjMyICogY29zKGRlZzJyYWQoMyAqIGF2Z0hwICsgNikpIC1cbiAgICAgICAgMC4yICogY29zKGRlZzJyYWQoNCAqIGF2Z0hwIC0gNjMpKTtcbiAgICBsZXQgZGVsdGFIcCA9IGgycCAtIGgxcDtcbiAgICBkZWx0YUhwID1cbiAgICAgICAgYWJzKGRlbHRhSHApIDw9IDE4MFxuICAgICAgICAgICAgPyBkZWx0YUhwXG4gICAgICAgICAgICA6IGgycCA8PSBoMXBcbiAgICAgICAgICAgICAgPyBkZWx0YUhwICsgMzYwXG4gICAgICAgICAgICAgIDogZGVsdGFIcCAtIDM2MDtcbiAgICBkZWx0YUhwID0gMiAqIHNxcnQoQzFwICogQzJwKSAqIHNpbihkZWcycmFkKGRlbHRhSHApIC8gMik7XG4gICAgY29uc3QgZGVsdGFMID0gTDIgLSBMMTtcbiAgICBjb25zdCBkZWx0YUNwID0gQzJwIC0gQzFwO1xuICAgIGNvbnN0IHNsID0gMSArICgwLjAxNSAqIHBvdyhhdmdMIC0gNTAsIDIpKSAvIHNxcnQoMjAgKyBwb3coYXZnTCAtIDUwLCAyKSk7XG4gICAgY29uc3Qgc2MgPSAxICsgMC4wNDUgKiBhdmdDcDtcbiAgICBjb25zdCBzaCA9IDEgKyAwLjAxNSAqIGF2Z0NwICogVDtcbiAgICBjb25zdCBkZWx0YVRoZXRhID0gMzAgKiBleHAoLXBvdygoYXZnSHAgLSAyNzUpIC8gMjUsIDIpKTtcbiAgICBjb25zdCBSYyA9IDIgKiBzcXJ0KHBvdyhhdmdDcCwgNykgLyAocG93KGF2Z0NwLCA3KSArIHBvdygyNSwgNykpKTtcbiAgICBjb25zdCBSdCA9IC1SYyAqIHNpbigyICogZGVnMnJhZChkZWx0YVRoZXRhKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gc3FydChcbiAgICAgICAgcG93KGRlbHRhTCAvIChLbCAqIHNsKSwgMikgK1xuICAgICAgICAgICAgcG93KGRlbHRhQ3AgLyAoS2MgKiBzYyksIDIpICtcbiAgICAgICAgICAgIHBvdyhkZWx0YUhwIC8gKEtoICogc2gpLCAyKSArXG4gICAgICAgICAgICBSdCAqIChkZWx0YUNwIC8gKEtjICogc2MpKSAqIChkZWx0YUhwIC8gKEtoICogc2gpKVxuICAgICk7XG4gICAgcmV0dXJuIG1heCgwLCBtaW4oMTAwLCByZXN1bHQpKTtcbn1cbiIsICJpbXBvcnQgQ29sb3IgZnJvbSAnLi4vQ29sb3IuanMnO1xuXG4vLyBzaW1wbGUgRXVjbGlkZWFuIGRpc3RhbmNlXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoYSwgYiwgbW9kZSA9ICdsYWInKSB7XG4gICAgLy8gRGVsdGEgRSAoQ0lFIDE5NzYpXG4gICAgLy8gc2VlIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXF1YXRpb25zLmh0bWxcbiAgICBhID0gbmV3IENvbG9yKGEpO1xuICAgIGIgPSBuZXcgQ29sb3IoYik7XG4gICAgY29uc3QgbDEgPSBhLmdldChtb2RlKTtcbiAgICBjb25zdCBsMiA9IGIuZ2V0KG1vZGUpO1xuICAgIGxldCBzdW1fc3EgPSAwO1xuICAgIGZvciAobGV0IGkgaW4gbDEpIHtcbiAgICAgICAgY29uc3QgZCA9IChsMVtpXSB8fCAwKSAtIChsMltpXSB8fCAwKTtcbiAgICAgICAgc3VtX3NxICs9IGQgKiBkO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5zcXJ0KHN1bV9zcSk7XG59XG4iLCAiaW1wb3J0IENvbG9yIGZyb20gJy4uL0NvbG9yLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgICBuZXcgQ29sb3IoLi4uYXJncyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuIiwgIi8vIHNvbWUgcHJlLWRlZmluZWQgY29sb3Igc2NhbGVzOlxuaW1wb3J0IGNocm9tYSBmcm9tICcuLi9jaHJvbWEuanMnO1xuaW1wb3J0ICcuLi9pby9oc2wvaW5kZXguanMnO1xuaW1wb3J0IHNjYWxlIGZyb20gJy4uL2dlbmVyYXRvci9zY2FsZS5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBjb29sKCkge1xuICAgICAgICByZXR1cm4gc2NhbGUoW2Nocm9tYS5oc2woMTgwLCAxLCAwLjkpLCBjaHJvbWEuaHNsKDI1MCwgMC43LCAwLjQpXSk7XG4gICAgfSxcbiAgICBob3QoKSB7XG4gICAgICAgIHJldHVybiBzY2FsZShbJyMwMDAnLCAnI2YwMCcsICcjZmYwJywgJyNmZmYnXSwgWzAsIDAuMjUsIDAuNzUsIDFdKS5tb2RlKFxuICAgICAgICAgICAgJ3JnYidcbiAgICAgICAgKTtcbiAgICB9XG59O1xuIiwgIi8qKlxuICAgIENvbG9yQnJld2VyIGNvbG9ycyBmb3IgY2hyb21hLmpzXG5cbiAgICBDb3B5cmlnaHQgKGMpIDIwMDIgQ3ludGhpYSBCcmV3ZXIsIE1hcmsgSGFycm93ZXIsIGFuZCBUaGVcbiAgICBQZW5uc3lsdmFuaWEgU3RhdGUgVW5pdmVyc2l0eS5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZFxuICAgIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SXG4gICAgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuY29uc3QgY29sb3JicmV3ZXIgPSB7XG4gICAgLy8gc2VxdWVudGlhbFxuICAgIE9yUmQ6IFsnI2ZmZjdlYycsICcjZmVlOGM4JywgJyNmZGQ0OWUnLCAnI2ZkYmI4NCcsICcjZmM4ZDU5JywgJyNlZjY1NDgnLCAnI2Q3MzAxZicsICcjYjMwMDAwJywgJyM3ZjAwMDAnXSxcbiAgICBQdUJ1OiBbJyNmZmY3ZmInLCAnI2VjZTdmMicsICcjZDBkMWU2JywgJyNhNmJkZGInLCAnIzc0YTljZicsICcjMzY5MGMwJywgJyMwNTcwYjAnLCAnIzA0NWE4ZCcsICcjMDIzODU4J10sXG4gICAgQnVQdTogWycjZjdmY2ZkJywgJyNlMGVjZjQnLCAnI2JmZDNlNicsICcjOWViY2RhJywgJyM4Yzk2YzYnLCAnIzhjNmJiMScsICcjODg0MTlkJywgJyM4MTBmN2MnLCAnIzRkMDA0YiddLFxuICAgIE9yYW5nZXM6IFsnI2ZmZjVlYicsICcjZmVlNmNlJywgJyNmZGQwYTInLCAnI2ZkYWU2YicsICcjZmQ4ZDNjJywgJyNmMTY5MTMnLCAnI2Q5NDgwMScsICcjYTYzNjAzJywgJyM3ZjI3MDQnXSxcbiAgICBCdUduOiBbJyNmN2ZjZmQnLCAnI2U1ZjVmOScsICcjY2NlY2U2JywgJyM5OWQ4YzknLCAnIzY2YzJhNCcsICcjNDFhZTc2JywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgWWxPckJyOiBbJyNmZmZmZTUnLCAnI2ZmZjdiYycsICcjZmVlMzkxJywgJyNmZWM0NGYnLCAnI2ZlOTkyOScsICcjZWM3MDE0JywgJyNjYzRjMDInLCAnIzk5MzQwNCcsICcjNjYyNTA2J10sXG4gICAgWWxHbjogWycjZmZmZmU1JywgJyNmN2ZjYjknLCAnI2Q5ZjBhMycsICcjYWRkZDhlJywgJyM3OGM2NzknLCAnIzQxYWI1ZCcsICcjMjM4NDQzJywgJyMwMDY4MzcnLCAnIzAwNDUyOSddLFxuICAgIFJlZHM6IFsnI2ZmZjVmMCcsICcjZmVlMGQyJywgJyNmY2JiYTEnLCAnI2ZjOTI3MicsICcjZmI2YTRhJywgJyNlZjNiMmMnLCAnI2NiMTgxZCcsICcjYTUwZjE1JywgJyM2NzAwMGQnXSxcbiAgICBSZFB1OiBbJyNmZmY3ZjMnLCAnI2ZkZTBkZCcsICcjZmNjNWMwJywgJyNmYTlmYjUnLCAnI2Y3NjhhMScsICcjZGQzNDk3JywgJyNhZTAxN2UnLCAnIzdhMDE3NycsICcjNDkwMDZhJ10sXG4gICAgR3JlZW5zOiBbJyNmN2ZjZjUnLCAnI2U1ZjVlMCcsICcjYzdlOWMwJywgJyNhMWQ5OWInLCAnIzc0YzQ3NicsICcjNDFhYjVkJywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgWWxHbkJ1OiBbJyNmZmZmZDknLCAnI2VkZjhiMScsICcjYzdlOWI0JywgJyM3ZmNkYmInLCAnIzQxYjZjNCcsICcjMWQ5MWMwJywgJyMyMjVlYTgnLCAnIzI1MzQ5NCcsICcjMDgxZDU4J10sXG4gICAgUHVycGxlczogWycjZmNmYmZkJywgJyNlZmVkZjUnLCAnI2RhZGFlYicsICcjYmNiZGRjJywgJyM5ZTlhYzgnLCAnIzgwN2RiYScsICcjNmE1MWEzJywgJyM1NDI3OGYnLCAnIzNmMDA3ZCddLFxuICAgIEduQnU6IFsnI2Y3ZmNmMCcsICcjZTBmM2RiJywgJyNjY2ViYzUnLCAnI2E4ZGRiNScsICcjN2JjY2M0JywgJyM0ZWIzZDMnLCAnIzJiOGNiZScsICcjMDg2OGFjJywgJyMwODQwODEnXSxcbiAgICBHcmV5czogWycjZmZmZmZmJywgJyNmMGYwZjAnLCAnI2Q5ZDlkOScsICcjYmRiZGJkJywgJyM5Njk2OTYnLCAnIzczNzM3MycsICcjNTI1MjUyJywgJyMyNTI1MjUnLCAnIzAwMDAwMCddLFxuICAgIFlsT3JSZDogWycjZmZmZmNjJywgJyNmZmVkYTAnLCAnI2ZlZDk3NicsICcjZmViMjRjJywgJyNmZDhkM2MnLCAnI2ZjNGUyYScsICcjZTMxYTFjJywgJyNiZDAwMjYnLCAnIzgwMDAyNiddLFxuICAgIFB1UmQ6IFsnI2Y3ZjRmOScsICcjZTdlMWVmJywgJyNkNGI5ZGEnLCAnI2M5OTRjNycsICcjZGY2NWIwJywgJyNlNzI5OGEnLCAnI2NlMTI1NicsICcjOTgwMDQzJywgJyM2NzAwMWYnXSxcbiAgICBCbHVlczogWycjZjdmYmZmJywgJyNkZWViZjcnLCAnI2M2ZGJlZicsICcjOWVjYWUxJywgJyM2YmFlZDYnLCAnIzQyOTJjNicsICcjMjE3MWI1JywgJyMwODUxOWMnLCAnIzA4MzA2YiddLFxuICAgIFB1QnVHbjogWycjZmZmN2ZiJywgJyNlY2UyZjAnLCAnI2QwZDFlNicsICcjYTZiZGRiJywgJyM2N2E5Y2YnLCAnIzM2OTBjMCcsICcjMDI4MThhJywgJyMwMTZjNTknLCAnIzAxNDYzNiddLFxuICAgIFZpcmlkaXM6IFsnIzQ0MDE1NCcsICcjNDgyNzc3JywgJyMzZjRhOGEnLCAnIzMxNjc4ZScsICcjMjY4MzhmJywgJyMxZjlkOGEnLCAnIzZjY2U1YScsICcjYjZkZTJiJywgJyNmZWU4MjUnXSxcblxuICAgIC8vIGRpdmVyZ2luZ1xuICAgIFNwZWN0cmFsOiBbJyM5ZTAxNDInLCAnI2Q1M2U0ZicsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA4YicsICcjZmZmZmJmJywgJyNlNmY1OTgnLCAnI2FiZGRhNCcsICcjNjZjMmE1JywgJyMzMjg4YmQnLCAnIzVlNGZhMiddLFxuICAgIFJkWWxHbjogWycjYTUwMDI2JywgJyNkNzMwMjcnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOGInLCAnI2ZmZmZiZicsICcjZDllZjhiJywgJyNhNmQ5NmEnLCAnIzY2YmQ2MycsICcjMWE5ODUwJywgJyMwMDY4MzcnXSxcbiAgICBSZEJ1OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZjdmN2Y3JywgJyNkMWU1ZjAnLCAnIzkyYzVkZScsICcjNDM5M2MzJywgJyMyMTY2YWMnLCAnIzA1MzA2MSddLFxuICAgIFBpWUc6IFsnIzhlMDE1MicsICcjYzUxYjdkJywgJyNkZTc3YWUnLCAnI2YxYjZkYScsICcjZmRlMGVmJywgJyNmN2Y3ZjcnLCAnI2U2ZjVkMCcsICcjYjhlMTg2JywgJyM3ZmJjNDEnLCAnIzRkOTIyMScsICcjMjc2NDE5J10sXG4gICAgUFJHbjogWycjNDAwMDRiJywgJyM3NjJhODMnLCAnIzk5NzBhYicsICcjYzJhNWNmJywgJyNlN2Q0ZTgnLCAnI2Y3ZjdmNycsICcjZDlmMGQzJywgJyNhNmRiYTAnLCAnIzVhYWU2MScsICcjMWI3ODM3JywgJyMwMDQ0MWInXSxcbiAgICBSZFlsQnU6IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDkwJywgJyNmZmZmYmYnLCAnI2UwZjNmOCcsICcjYWJkOWU5JywgJyM3NGFkZDEnLCAnIzQ1NzViNCcsICcjMzEzNjk1J10sXG4gICAgQnJCRzogWycjNTQzMDA1JywgJyM4YzUxMGEnLCAnI2JmODEyZCcsICcjZGZjMjdkJywgJyNmNmU4YzMnLCAnI2Y1ZjVmNScsICcjYzdlYWU1JywgJyM4MGNkYzEnLCAnIzM1OTc4ZicsICcjMDE2NjVlJywgJyMwMDNjMzAnXSxcbiAgICBSZEd5OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZmZmZmZmJywgJyNlMGUwZTAnLCAnI2JhYmFiYScsICcjODc4Nzg3JywgJyM0ZDRkNGQnLCAnIzFhMWExYSddLFxuICAgIFB1T3I6IFsnIzdmM2IwOCcsICcjYjM1ODA2JywgJyNlMDgyMTQnLCAnI2ZkYjg2MycsICcjZmVlMGI2JywgJyNmN2Y3ZjcnLCAnI2Q4ZGFlYicsICcjYjJhYmQyJywgJyM4MDczYWMnLCAnIzU0Mjc4OCcsICcjMmQwMDRiJ10sXG5cbiAgICAvLyBxdWFsaXRhdGl2ZVxuICAgIFNldDI6IFsnIzY2YzJhNScsICcjZmM4ZDYyJywgJyM4ZGEwY2InLCAnI2U3OGFjMycsICcjYTZkODU0JywgJyNmZmQ5MmYnLCAnI2U1YzQ5NCcsICcjYjNiM2IzJ10sXG4gICAgQWNjZW50OiBbJyM3ZmM5N2YnLCAnI2JlYWVkNCcsICcjZmRjMDg2JywgJyNmZmZmOTknLCAnIzM4NmNiMCcsICcjZjAwMjdmJywgJyNiZjViMTcnLCAnIzY2NjY2NiddLFxuICAgIFNldDE6IFsnI2U0MWExYycsICcjMzc3ZWI4JywgJyM0ZGFmNGEnLCAnIzk4NGVhMycsICcjZmY3ZjAwJywgJyNmZmZmMzMnLCAnI2E2NTYyOCcsICcjZjc4MWJmJywgJyM5OTk5OTknXSxcbiAgICBTZXQzOiBbJyM4ZGQzYzcnLCAnI2ZmZmZiMycsICcjYmViYWRhJywgJyNmYjgwNzInLCAnIzgwYjFkMycsICcjZmRiNDYyJywgJyNiM2RlNjknLCAnI2ZjY2RlNScsICcjZDlkOWQ5JywgJyNiYzgwYmQnLCAnI2NjZWJjNScsICcjZmZlZDZmJ10sXG4gICAgRGFyazI6IFsnIzFiOWU3NycsICcjZDk1ZjAyJywgJyM3NTcwYjMnLCAnI2U3Mjk4YScsICcjNjZhNjFlJywgJyNlNmFiMDInLCAnI2E2NzYxZCcsICcjNjY2NjY2J10sXG4gICAgUGFpcmVkOiBbJyNhNmNlZTMnLCAnIzFmNzhiNCcsICcjYjJkZjhhJywgJyMzM2EwMmMnLCAnI2ZiOWE5OScsICcjZTMxYTFjJywgJyNmZGJmNmYnLCAnI2ZmN2YwMCcsICcjY2FiMmQ2JywgJyM2YTNkOWEnLCAnI2ZmZmY5OScsICcjYjE1OTI4J10sXG4gICAgUGFzdGVsMjogWycjYjNlMmNkJywgJyNmZGNkYWMnLCAnI2NiZDVlOCcsICcjZjRjYWU0JywgJyNlNmY1YzknLCAnI2ZmZjJhZScsICcjZjFlMmNjJywgJyNjY2NjY2MnXSxcbiAgICBQYXN0ZWwxOiBbJyNmYmI0YWUnLCAnI2IzY2RlMycsICcjY2NlYmM1JywgJyNkZWNiZTQnLCAnI2ZlZDlhNicsICcjZmZmZmNjJywgJyNlNWQ4YmQnLCAnI2ZkZGFlYycsICcjZjJmMmYyJ11cbn07XG5cbi8vIGFkZCBsb3dlcmNhc2UgYWxpYXNlcyBmb3IgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGVzXG5mb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoY29sb3JicmV3ZXIpKSB7XG4gICAgY29sb3JicmV3ZXJba2V5LnRvTG93ZXJDYXNlKCldID0gY29sb3JicmV3ZXJba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29sb3JicmV3ZXI7XG4iLCAiaW1wb3J0IGNocm9tYSBmcm9tICcuL3NyYy9jaHJvbWEuanMnO1xuXG4vLyBmZWVsIGZyZWUgdG8gY29tbWVudCBvdXQgYW55dGhpbmcgdG8gcm9sbHVwXG4vLyBhIHNtYWxsZXIgY2hyb21hLmpzIGJ1aWx0XG5cbi8vIGlvIC0tPiBjb252ZXJ0IGNvbG9yc1xuaW1wb3J0ICcuL3NyYy9pby9jbXlrL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vY3NzL2luZGV4LmpzJztcbmltcG9ydCAnLi9zcmMvaW8vZ2wvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oY2cvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oZXgvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc2kvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc2wvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9oc3YvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9sYWIvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9sY2gvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9uYW1lZC9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL251bS9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL3JnYi9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL3RlbXAvaW5kZXguanMnO1xuaW1wb3J0ICcuL3NyYy9pby9va2xhYi9pbmRleC5qcyc7XG5pbXBvcnQgJy4vc3JjL2lvL29rbGNoL2luZGV4LmpzJztcblxuLy8gb3BlcmF0b3JzIC0tPiBtb2RpZnkgZXhpc3RpbmcgQ29sb3JzXG5pbXBvcnQgJy4vc3JjL29wcy9hbHBoYS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9jbGlwcGVkLmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL2Rhcmtlbi5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9nZXQuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvbHVtaW5hbmNlLmpzJztcbmltcG9ydCAnLi9zcmMvb3BzL21peC5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9wcmVtdWx0aXBseS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9zYXR1cmF0ZS5qcyc7XG5pbXBvcnQgJy4vc3JjL29wcy9zZXQuanMnO1xuaW1wb3J0ICcuL3NyYy9vcHMvc2hhZGUuanMnO1xuXG4vLyBpbnRlcnBvbGF0b3JzXG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9yZ2IuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvbHJnYi5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9sYWIuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvbGNoLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL251bS5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9oY2cuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3IvaHNpLmpzJztcbmltcG9ydCAnLi9zcmMvaW50ZXJwb2xhdG9yL2hzbC5qcyc7XG5pbXBvcnQgJy4vc3JjL2ludGVycG9sYXRvci9oc3YuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3Ivb2tsYWIuanMnO1xuaW1wb3J0ICcuL3NyYy9pbnRlcnBvbGF0b3Ivb2tsY2guanMnO1xuXG4vLyBnZW5lcmF0b3JzIC0tID4gY3JlYXRlIG5ldyBjb2xvcnNcbmltcG9ydCBhdmVyYWdlIGZyb20gJy4vc3JjL2dlbmVyYXRvci9hdmVyYWdlLmpzJztcbmltcG9ydCBiZXppZXIgZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2Jlemllci5qcyc7XG5pbXBvcnQgYmxlbmQgZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2JsZW5kLmpzJztcbmltcG9ydCBjdWJlaGVsaXggZnJvbSAnLi9zcmMvZ2VuZXJhdG9yL2N1YmVoZWxpeC5qcyc7XG5pbXBvcnQgbWl4IGZyb20gJy4vc3JjL2dlbmVyYXRvci9taXguanMnO1xuaW1wb3J0IHJhbmRvbSBmcm9tICcuL3NyYy9nZW5lcmF0b3IvcmFuZG9tLmpzJztcbmltcG9ydCBzY2FsZSBmcm9tICcuL3NyYy9nZW5lcmF0b3Ivc2NhbGUuanMnO1xuXG4vLyBvdGhlciB1dGlsaXR5IG1ldGhvZHNcbmltcG9ydCB7IGFuYWx5emUgfSBmcm9tICcuL3NyYy91dGlscy9hbmFseXplLmpzJztcbmltcG9ydCBjb250cmFzdCBmcm9tICcuL3NyYy91dGlscy9jb250cmFzdC5qcyc7XG5pbXBvcnQgZGVsdGFFIGZyb20gJy4vc3JjL3V0aWxzL2RlbHRhLWUuanMnO1xuaW1wb3J0IGRpc3RhbmNlIGZyb20gJy4vc3JjL3V0aWxzL2Rpc3RhbmNlLmpzJztcbmltcG9ydCB7IGxpbWl0cyB9IGZyb20gJy4vc3JjL3V0aWxzL2FuYWx5emUuanMnO1xuaW1wb3J0IHZhbGlkIGZyb20gJy4vc3JjL3V0aWxzL3ZhbGlkLmpzJztcbmltcG9ydCBpbnB1dCBmcm9tICcuL3NyYy9pby9pbnB1dC5qcyc7XG5cbi8vIHNjYWxlXG5pbXBvcnQgc2NhbGVzIGZyb20gJy4vc3JjL3V0aWxzL3NjYWxlcy5qcyc7XG5cbi8vIGNvbG9yc1xuaW1wb3J0IGNvbG9ycyBmcm9tICcuL3NyYy9jb2xvcnMvdzNjeDExLmpzJztcbmltcG9ydCBicmV3ZXIgZnJvbSAnLi9zcmMvY29sb3JzL2NvbG9yYnJld2VyLmpzJztcblxuT2JqZWN0LmFzc2lnbihjaHJvbWEsIHtcbiAgICBhdmVyYWdlLFxuICAgIGJlemllcixcbiAgICBibGVuZCxcbiAgICBjdWJlaGVsaXgsXG4gICAgbWl4LFxuICAgIGludGVycG9sYXRlOiBtaXgsXG4gICAgcmFuZG9tLFxuICAgIHNjYWxlLFxuICAgIGFuYWx5emUsXG4gICAgY29udHJhc3QsXG4gICAgZGVsdGFFLFxuICAgIGRpc3RhbmNlLFxuICAgIGxpbWl0cyxcbiAgICB2YWxpZCxcbiAgICBzY2FsZXMsXG4gICAgaW5wdXQsXG4gICAgY29sb3JzLFxuICAgIGJyZXdlclxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGNocm9tYTtcbiIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuZXhwb3J0IHZhciBNSURfQ09MT1JfU1RPUCA9ICcjRUJFRkY1Jztcbi8qKlxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBhcnJheSBvZiBjb2xvcnMgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgaW50ZXJwb2xhdGVkXG4gKiBjb2xvcnMgYmFzZWQgb24gdGhlIG51bWJlciBvZiBzdGVwcy9sZW4gbmVlZGVkIGZvciB1c2UgaW4gVUkgZWxlbWVudHMgc3VjaCBhcyBjaGFydHMuXG4gKiBEZXJpdmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2drYS9wYWxldHRlcyAoVW5saWNlbnNlZClcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29sb3JQYWxldHRlKFxuLyoqXG4gKiBUaGUgbWFpbiBjb2xvciBjb2RlIG9yIGFycmF5IG9mIGNvZGVzXG4gKi9cbmNvbG9ycykge1xuICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxMDtcbiAgdmFyIGRpdmVyZ2luZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIHZhciBjYXRlZ29yaWNhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogZmFsc2U7XG4gIHZhciBoZXhTdGFydCA9IGNvbG9ycy5zbGljZSgpO1xuICB2YXIgaGV4RW5kID0gW107XG4gIHZhciBldmVuID0gbGVuICUgMiA9PT0gMDtcbiAgdmFyIG51bUNvbG9yc0xlZnQgPSBkaXZlcmdpbmcgPyBNYXRoLmNlaWwobGVuIC8gMikgKyAoZXZlbiA/IDEgOiAwKSA6IGxlbjtcbiAgdmFyIG51bUNvbG9yc1JpZ2h0ID0gZGl2ZXJnaW5nID8gTWF0aC5jZWlsKGxlbiAvIDIpICsgKGV2ZW4gPyAxIDogMCkgOiAwOyAvLyBJZiBvbmx5IGEgc2luZ2xlIGNvbG9yIGlzIHByb3ZpZGVkIHByZXBlbmQgdGhlIG1pZC1wb2ludCBjb2xvclxuXG4gIGlmIChoZXhTdGFydC5sZW5ndGggPT09IDEpIHtcbiAgICBoZXhTdGFydC51bnNoaWZ0KE1JRF9DT0xPUl9TVE9QKTtcbiAgfSAvLyBJZiBkaXZlcmdpbmcsIHNwbGl0IHRoZSBzdGFydCBhcnJheSBhbmQgZHVwbGljYXRlIHRoZSBtaWQgY29sb3JcblxuXG4gIGlmIChkaXZlcmdpbmcpIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIG1pZHBvaW50LCBjcmVhdGUgb25lXG4gICAgaWYgKGhleFN0YXJ0Lmxlbmd0aCA8IDMpIHtcbiAgICAgIGhleFN0YXJ0WzJdID0gaGV4U3RhcnRbMV07XG4gICAgICBoZXhTdGFydFsxXSA9IE1JRF9DT0xPUl9TVE9QO1xuICAgIH1cblxuICAgIHZhciBudW1Db2xvcnNIYWxmID0gTWF0aC5jZWlsKGhleFN0YXJ0Lmxlbmd0aCAvIDIpO1xuICAgIHZhciBjb2xvcnNMZWZ0ID0gaGV4U3RhcnQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKGluZGV4IDwgbnVtQ29sb3JzSGFsZikge1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8ga2VlcCBpdFxuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBjb2xvcnNSaWdodCA9IGhleFN0YXJ0LnJldmVyc2UoKS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPCBudW1Db2xvcnNIYWxmKSB7XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBrZWVwIGl0XG4gICAgICB9XG4gICAgfSkucmV2ZXJzZSgpO1xuICAgIGhleFN0YXJ0ID0gY29sb3JzTGVmdDtcbiAgICBoZXhFbmQgPSBjb2xvcnNSaWdodDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0ZXBzKGNvbG9ycywgc3RlcHMpIHtcbiAgICBpZiAoIWNvbG9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBjb2xvcnM7XG4gICAgfVxuXG4gICAgaWYgKCFjYXRlZ29yaWNhbCkge1xuICAgICAgcmV0dXJuIGNocm9tYS5iZXppZXIoY29sb3JzKS5zY2FsZSgpLmNvcnJlY3RMaWdodG5lc3MoKS5jb2xvcnMoc3RlcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2hyb21hLnNjYWxlKGNvbG9ycykuY29sb3JzKHN0ZXBzKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3RlcHNMZWZ0ID0gY3JlYXRlU3RlcHMoaGV4U3RhcnQsIG51bUNvbG9yc0xlZnQpO1xuICB2YXIgc3RlcHNSaWdodCA9IGNyZWF0ZVN0ZXBzKGhleEVuZCwgbnVtQ29sb3JzUmlnaHQpO1xuICByZXR1cm4gKGV2ZW4gJiYgZGl2ZXJnaW5nID8gc3RlcHNMZWZ0LnNsaWNlKDAsIHN0ZXBzTGVmdC5sZW5ndGggLSAxKSA6IHN0ZXBzTGVmdCkuY29uY2F0KHN0ZXBzUmlnaHQuc2xpY2UoMSkpO1xufSIsICJmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBjb2xvclBhbGV0dGUgfSBmcm9tICcuL2NvbG9yX3BhbGV0dGUnO1xuXG52YXIgZmxhdHRlbiA9IGZ1bmN0aW9uIGZsYXR0ZW4oYXJyKSB7XG4gIHZhciBfcmVmO1xuXG4gIHJldHVybiAoX3JlZiA9IFtdKS5jb25jYXQuYXBwbHkoX3JlZiwgX3RvQ29uc3VtYWJsZUFycmF5KGFycikpO1xufTtcblxudmFyIGV1aVBhbGV0dGUgPSBmdW5jdGlvbiBldWlQYWxldHRlKGNvbG9ycywgc3RlcHMpIHtcbiAgdmFyIGRpdmVyZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICB2YXIgY2F0ZWdvcmljYWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHRydWU7XG5cbiAgLy8gVGhpcyBmdW5jdGlvbiBhbHNvIHRyaW1zIHRoZSBmaXJzdCBjb2xvciBzbyB3aGl0ZS9ibGFjayBpcyBuZXZlciBhIGNvbG9yXG4gIGlmICghZGl2ZXJnZSAmJiBzdGVwcyA+IDEpIHtcbiAgICB2YXIgcGFsZXR0ZSA9IGNvbG9yUGFsZXR0ZShjb2xvcnMsIHN0ZXBzICsgMSk7XG4gICAgcGFsZXR0ZS5zaGlmdCgpO1xuICAgIHJldHVybiBwYWxldHRlO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9yUGFsZXR0ZShjb2xvcnMsIHN0ZXBzLCBkaXZlcmdlLCBjYXRlZ29yaWNhbCk7XG59O1xuXG5leHBvcnQgdmFyIGV1aVBhbGV0dGVDb2xvckJsaW5kID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKSB7XG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICBfcmVmMiRyb3RhdGlvbnMgPSBfcmVmMi5yb3RhdGlvbnMsXG4gICAgICByb3RhdGlvbnMgPSBfcmVmMiRyb3RhdGlvbnMgPT09IHZvaWQgMCA/IDEgOiBfcmVmMiRyb3RhdGlvbnMsXG4gICAgICBfcmVmMiRvcmRlciA9IF9yZWYyLm9yZGVyLFxuICAgICAgb3JkZXIgPSBfcmVmMiRvcmRlciA9PT0gdm9pZCAwID8gJ2FwcGVuZCcgOiBfcmVmMiRvcmRlcixcbiAgICAgIF9yZWYyJGRpcmVjdGlvbiA9IF9yZWYyLmRpcmVjdGlvbixcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWYyJGRpcmVjdGlvbiA9PT0gdm9pZCAwID8gJ2xpZ2h0ZXInIDogX3JlZjIkZGlyZWN0aW9uLFxuICAgICAgX3JlZjIkc29ydEJ5ID0gX3JlZjIuc29ydEJ5LFxuICAgICAgc29ydEJ5ID0gX3JlZjIkc29ydEJ5ID09PSB2b2lkIDAgPyAnZGVmYXVsdCcgOiBfcmVmMiRzb3J0QnksXG4gICAgICBfcmVmMiRzb3J0U2hpZnQgPSBfcmVmMi5zb3J0U2hpZnQsXG4gICAgICBzb3J0U2hpZnQgPSBfcmVmMiRzb3J0U2hpZnQgPT09IHZvaWQgMCA/ICctMTAwJyA6IF9yZWYyJHNvcnRTaGlmdDtcblxuICB2YXIgY29sb3JzID0gW107XG4gIHZhciBiYXNlID0gWycjNTRCMzk5JywgLy8gMCBncmVlblxuICAnIzYwOTJDMCcsIC8vIDEgYmx1ZVxuICAnI0QzNjA4NicsIC8vIDIgZGFyayBwaW5rXG4gICcjOTE3MEI4JywgLy8gMyBwdXJwbGVcbiAgJyNDQThFQUUnLCAvLyA0IGxpZ2h0IHBpbmtcbiAgJyNENkJGNTcnLCAvLyA1IHllbGxvd1xuICAnI0I5QTg4OCcsIC8vIDYgdGFuXG4gICcjREE4QjQ1JywgLy8gNyBvcmFuZ2VcbiAgJyNBQTY1NTYnLCAvLyA4IGJyb3duXG4gICcjRTc2NjRDJyAvLyA5IHJlZFxuICBdO1xuXG4gIGlmIChzb3J0QnkgPT09ICduYXR1cmFsJykge1xuICAgIC8vIFNvcnQgdGhlIGNvbG9ycyBiYXNlZCBvbiB0aGUgY29sb3Igd2hlZWwsIGJ1dCBzaGlmdGluZyB0aGUgdmFsdWVzIGJhc2VkIG9uIHNvcnRTaGlmdFxuICAgIGJhc2UgPSBfdG9Db25zdW1hYmxlQXJyYXkoYmFzZSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGNocm9tYShhKS5zZXQoJ2hzbC5oJywgc29ydFNoaWZ0KS5oc2woKVswXSAtIGNocm9tYShiKS5zZXQoJ2hzbC5oJywgc29ydFNoaWZ0KS5oc2woKVswXTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyb3RhdGlvbnMgPiAxKSB7XG4gICAgdmFyIHBhbGV0dGVzID0gYmFzZS5tYXAoZnVuY3Rpb24gKGNvbG9yKSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGRhcmtlc3QgYW5kIGxpZ2h0ZXN0IHZlcnNpb25zIG9mIGVhY2ggY29sb3IgdXNpbmcgYmxhY2sgYW5kIHdoaXRlXG4gICAgICB2YXIgcGFsZXR0ZSA9IGNvbG9yUGFsZXR0ZShbJ2JsYWNrJywgY29sb3IsICd3aGl0ZSddLCA1LCBmYWxzZSwgdHJ1ZSk7IC8vIFRoZW4gcmVtb3ZpbmcgdGhlIGV4dHJlbWVzXG5cbiAgICAgIHBhbGV0dGUucG9wKCk7XG4gICAgICBwYWxldHRlLnNoaWZ0KCk7XG5cbiAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2xpZ2h0ZXInOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUoW3BhbGV0dGVbMV0sIHBhbGV0dGVbMl1dLCByb3RhdGlvbnMsIGZhbHNlLCB0cnVlKTtcblxuICAgICAgICBjYXNlICdkYXJrZXInOlxuICAgICAgICAgIHJldHVybiBjb2xvclBhbGV0dGUoW3BhbGV0dGVbMV0sIHBhbGV0dGVbMF1dLCByb3RhdGlvbnMsIGZhbHNlLCB0cnVlKTtcblxuICAgICAgICBjYXNlICdib3RoJzpcbiAgICAgICAgICByZXR1cm4gY29sb3JQYWxldHRlKHBhbGV0dGUsIHJvdGF0aW9ucywgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG9yZGVyID09PSAnZ3JvdXAnKSB7XG4gICAgICBjb2xvcnMgPSBmbGF0dGVuKHBhbGV0dGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgX2NvbG9ycztcblxuICAgICAgICB2YXIgcm90YXRpb24gPSBwYWxldHRlcy5tYXAoZnVuY3Rpb24gKHBhbGV0dGUpIHtcbiAgICAgICAgICByZXR1cm4gcGFsZXR0ZVtpXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgKF9jb2xvcnMgPSBjb2xvcnMpLnB1c2guYXBwbHkoX2NvbG9ycywgX3RvQ29uc3VtYWJsZUFycmF5KHJvdGF0aW9uKSk7XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdGF0aW9uczsgaSsrKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb2xvcnMgPSBiYXNlO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9ycztcbn07XG4vKipcbiAqIENvbG9yIGJsaW5kIHBhbGV0dGUgd2l0aCB0ZXh0IGlzIG1lYW50IGZvciB1c2Ugd2hlbiB0ZXh0IGlzIGFwcGxpZWQgb24gdG9wIG9mIHRoZSBjb2xvci5cbiAqIEl0IGluY3JlYXNlcyB0aGUgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IgdG8gZ2l2ZSB0aGUgdGV4dCBtb3JlIGNvbnRyYXN0LlxuICovXG5cbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0ID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0KCkge1xuICB2YXIgcGFsZXR0ZVByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIG9yaWdpbmFsUGFsZXR0ZSA9IGV1aVBhbGV0dGVDb2xvckJsaW5kKHBhbGV0dGVQcm9wcyk7XG4gIHZhciBuZXdQYWxldHRlID0gb3JpZ2luYWxQYWxldHRlLm1hcChmdW5jdGlvbiAoY29sb3IpIHtcbiAgICByZXR1cm4gY2hyb21hKGNvbG9yKS5icmlnaHRlbigwLjUpLmhleCgpO1xuICB9KTtcbiAgcmV0dXJuIG5ld1BhbGV0dGU7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlRm9yTGlnaHRCYWNrZ3JvdW5kID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUZvckxpZ2h0QmFja2dyb3VuZCgpIHtcbiAgcmV0dXJuIFsnIzAwNkJCNCcsICcjMDE3RDczJywgJyNGNUE3MDAnLCAnI0JEMjcxRScsICcjREQwQTczJ107XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlRm9yRGFya0JhY2tncm91bmQgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yRGFya0JhY2tncm91bmQoKSB7XG4gIHJldHVybiBbJyMxQkE5RjUnLCAnIzdERTJEMScsICcjRjk5MEMwJywgJyNGNjYnLCAnI0ZGQ0U3QSddO1xufTtcbnZhciBwb3NpdGl2ZUNvbG9yID0gJyMyMDkyODAnO1xudmFyIG5lZ2F0aXZlQ29sb3IgPSAnI0NDNTY0Mic7XG52YXIgbGlnaHROZWdhdGl2ZUNvbG9yID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs5XTtcbnZhciBjb29sQXJyYXkgPSBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVsxXSwgJyM2MDkyQzAnXTtcbnZhciB3YXJtQXJyYXkgPSBbZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs3XSwgZXVpUGFsZXR0ZUNvbG9yQmxpbmQoKVs5XV07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JTdGF0dXMgPSBmdW5jdGlvbiBldWlQYWxldHRlRm9yU3RhdHVzKHN0ZXBzKSB7XG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbcG9zaXRpdmVDb2xvcl07XG4gIH1cblxuICBpZiAoc3RlcHMgPD0gMykge1xuICAgIHJldHVybiBldWlQYWxldHRlKFtwb3NpdGl2ZUNvbG9yLCBldWlQYWxldHRlQ29sb3JCbGluZCgpWzVdLCBuZWdhdGl2ZUNvbG9yXSwgc3RlcHMsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW3Bvc2l0aXZlQ29sb3IsIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbMF0sIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbNV0sIGxpZ2h0TmVnYXRpdmVDb2xvciwgbmVnYXRpdmVDb2xvcl0sIHN0ZXBzLCB0cnVlKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVGb3JUZW1wZXJhdHVyZSA9IGZ1bmN0aW9uIGV1aVBhbGV0dGVGb3JUZW1wZXJhdHVyZShzdGVwcykge1xuICB2YXIgY29vbHMgPSBjb2xvclBhbGV0dGUoW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjb29sQXJyYXkuc2xpY2UoKS5yZXZlcnNlKCkpLCBbJyNFQkVGRjUnXSksIDMpO1xuICB2YXIgd2FybXMgPSBjb2xvclBhbGV0dGUoWycjRjRGM0RCJ10uY29uY2F0KHdhcm1BcnJheSksIDMpO1xuXG4gIGlmIChzdGVwcyA9PT0gMSkge1xuICAgIHJldHVybiBbY29vbHNbMF1dO1xuICB9IGVsc2UgaWYgKHN0ZXBzIDw9IDMpIHtcbiAgICByZXR1cm4gZXVpUGFsZXR0ZShbY29vbHNbMF0sIGxpZ2h0TmVnYXRpdmVDb2xvcl0sIHN0ZXBzLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBldWlQYWxldHRlKFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoY29vbHMpLCBfdG9Db25zdW1hYmxlQXJyYXkod2FybXMpKSwgc3RlcHMsIHRydWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvbXBsaW1lbnRhcnkgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29tcGxpbWVudGFyeShzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMV1dO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoW2V1aVBhbGV0dGVDb2xvckJsaW5kKClbMV0sIGV1aVBhbGV0dGVDb2xvckJsaW5kKClbN11dLCBzdGVwcywgdHJ1ZSk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlTmVnYXRpdmUgPSBmdW5jdGlvbiBldWlQYWxldHRlTmVnYXRpdmUoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtsaWdodE5lZ2F0aXZlQ29sb3JdO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZScsIG5lZ2F0aXZlQ29sb3JdLCBzdGVwcyk7XG59O1xuZXhwb3J0IHZhciBldWlQYWxldHRlUG9zaXRpdmUgPSBmdW5jdGlvbiBldWlQYWxldHRlUG9zaXRpdmUoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtldWlQYWxldHRlQ29sb3JCbGluZCgpWzBdXTtcbiAgfVxuXG4gIHJldHVybiBldWlQYWxldHRlKFsnd2hpdGUnLCBwb3NpdGl2ZUNvbG9yXSwgc3RlcHMpO1xufTtcbmV4cG9ydCB2YXIgZXVpUGFsZXR0ZUNvb2wgPSBmdW5jdGlvbiBldWlQYWxldHRlQ29vbChzdGVwcykge1xuICBpZiAoc3RlcHMgPT09IDEpIHtcbiAgICByZXR1cm4gW2Nvb2xBcnJheVsxXV07XG4gIH1cblxuICByZXR1cm4gZXVpUGFsZXR0ZShbJ3doaXRlJ10uY29uY2F0KGNvb2xBcnJheSksIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVXYXJtID0gZnVuY3Rpb24gZXVpUGFsZXR0ZVdhcm0oc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFtsaWdodE5lZ2F0aXZlQ29sb3JdO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWycjRkJGQkRDJ10uY29uY2F0KHdhcm1BcnJheSksIHN0ZXBzKTtcbn07XG5leHBvcnQgdmFyIGV1aVBhbGV0dGVHcmF5ID0gZnVuY3Rpb24gZXVpUGFsZXR0ZUdyYXkoc3RlcHMpIHtcbiAgaWYgKHN0ZXBzID09PSAxKSB7XG4gICAgcmV0dXJuIFsnIzk4YTJiMyddO1xuICB9XG5cbiAgcmV0dXJuIGV1aVBhbGV0dGUoWyd3aGl0ZScsICcjZDNkYWU2JywgJyM5OGEyYjMnLCAnIzY5NzA3ZCcsICcjMzQzNzQxJ10sIHN0ZXBzLCBmYWxzZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNocm9tYSBmcm9tICdjaHJvbWEtanMnO1xuaW1wb3J0IHsgaXNWYWxpZEhleCB9IGZyb20gJy4vaXNfdmFsaWRfaGV4JztcblxudmFyIGluT3JpZ2luYWxGb3JtYXQgPSBmdW5jdGlvbiBpbk9yaWdpbmFsRm9ybWF0KG9yaWdpbmFsQ29sb3IsIG5ld0NvbG9yKSB7XG4gIHJldHVybiBpc1ZhbGlkSGV4KG9yaWdpbmFsQ29sb3IpID8gbmV3Q29sb3IuaGV4KCkgOiBuZXdDb2xvci5jc3MoKTtcbn07XG4vKipcbiAqIE1ha2VzIGEgY29sb3IgbW9yZSB0cmFuc3BhcmVudC5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbHBoYSAtIGFscGhhIGNoYW5uZWwgdmFsdWUuIEZyb20gMC0xLlxuICovXG5cblxuZXhwb3J0IHZhciB0cmFuc3BhcmVudGl6ZSA9IGZ1bmN0aW9uIHRyYW5zcGFyZW50aXplKGNvbG9yLCBhbHBoYSkge1xuICByZXR1cm4gY2hyb21hKGNvbG9yKS5hbHBoYShhbHBoYSkuY3NzKCk7XG59O1xuLyoqXG4gKiBNaXhlcyBhIHByb3ZpZGVkIGNvbG9yIHdpdGggd2hpdGUuXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCB3aGl0ZVxuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSB3aGl0ZS5cbiAqL1xuXG5leHBvcnQgdmFyIHRpbnQgPSBmdW5jdGlvbiB0aW50KGNvbG9yLCByYXRpbykge1xuICB2YXIgdGludCA9IGNocm9tYS5taXgoY29sb3IsICcjZmZmJywgcmF0aW8sICdyZ2InKTtcbiAgcmV0dXJuIGluT3JpZ2luYWxGb3JtYXQoY29sb3IsIHRpbnQpO1xufTtcbi8qKlxuICogTWl4ZXMgYSBwcm92aWRlZCBjb2xvciB3aXRoIGJsYWNrLlxuICogQHBhcmFtIGNvbG9yIC0gQ29sb3IgdG8gbWl4IHdpdGggYmxhY2tcbiAqIEBwYXJhbSByYXRpbyAtIE1peCB3ZWlnaHQuIEZyb20gMC0xLiBMYXJnZXIgdmFsdWUgaW5kaWNhdGVzIG1vcmUgYmxhY2suXG4gKi9cblxuZXhwb3J0IHZhciBzaGFkZSA9IGZ1bmN0aW9uIHNoYWRlKGNvbG9yLCByYXRpbykge1xuICB2YXIgc2hhZGUgPSBjaHJvbWEubWl4KGNvbG9yLCAnIzAwMCcsIHJhdGlvLCAncmdiJyk7XG4gIHJldHVybiBpbk9yaWdpbmFsRm9ybWF0KGNvbG9yLCBzaGFkZSk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSB0aW50ZWQgY29sb3IgZm9yIGxpZ2h0IG1vZGUgYW5kIHNoYWRlZCBjb2xvciBmb3IgZGFyayBtb2RlXG4gKiBAcGFyYW0gY29sb3IgLSBDb2xvciB0byBtaXggd2l0aCB3aGl0ZVxuICogQHBhcmFtIHJhdGlvIC0gTWl4IHdlaWdodC4gRnJvbSAwLTEuIExhcmdlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSB3aGl0ZS5cbiAqIEBwYXJhbSBjb2xvck1vZGUgLSBMaWdodCBvciBkYXJrIG9ubHlcbiAqL1xuXG5leHBvcnQgdmFyIHRpbnRPclNoYWRlID0gZnVuY3Rpb24gdGludE9yU2hhZGUoY29sb3IsIHJhdGlvLCBjb2xvck1vZGUpIHtcbiAgcmV0dXJuIGNvbG9yTW9kZSA9PT0gJ0RBUksnID8gc2hhZGUoY29sb3IsIHJhdGlvKSA6IHRpbnQoY29sb3IsIHJhdGlvKTtcbn07XG4vKipcbiAqIFJldHVybnMgdGhlIHNoYWRlZCBjb2xvciBmb3IgbGlnaHQgbW9kZSBhbmQgdGludGVkIGNvbG9yIGZvciBkYXJrIG1vZGVcbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1peCB3aXRoIHdoaXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBNaXggd2VpZ2h0LiBGcm9tIDAtMS4gTGFyZ2VyIHZhbHVlIGluZGljYXRlcyBtb3JlIHdoaXRlLlxuICogQHBhcmFtIGNvbG9yTW9kZSAtIExpZ2h0IG9yIGRhcmsgb25seVxuICovXG5cbmV4cG9ydCB2YXIgc2hhZGVPclRpbnQgPSBmdW5jdGlvbiBzaGFkZU9yVGludChjb2xvciwgcmF0aW8sIGNvbG9yTW9kZSkge1xuICByZXR1cm4gY29sb3JNb2RlID09PSAnREFSSycgPyB0aW50KGNvbG9yLCByYXRpbykgOiBzaGFkZShjb2xvciwgcmF0aW8pO1xufTtcbi8qKlxuICogSW5jcmVhc2VzIHRoZSBzYXR1cmF0aW9uIG9mIGEgY29sb3IgYnkgbWFuaXB1bGF0aW5nIHRoZSBoc2wgc2F0dXJhdGlvbi5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEuXG4gKi9cblxuZXhwb3J0IHZhciBzYXR1cmF0ZSA9IGZ1bmN0aW9uIHNhdHVyYXRlKGNvbG9yLCBhbW91bnQpIHtcbiAgdmFyIHNhdHVyYXRlID0gY2hyb21hKGNvbG9yKS5zZXQoJ2hzbC5zJywgXCIrXCIuY29uY2F0KGFtb3VudCkpO1xuICByZXR1cm4gaW5PcmlnaW5hbEZvcm1hdChjb2xvciwgc2F0dXJhdGUpO1xufTtcbi8qKlxuICogRGVjcmVhc2VzIHRoZSBzYXR1cmF0aW9uIG9mIGEgY29sb3IgYnkgbWFuaXB1bGF0aW5nIHRoZSBoc2wgc2F0dXJhdGlvbi5cbiAqIEBwYXJhbSBjb2xvciAtIENvbG9yIHRvIG1hbmlwdWxhdGVcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEuXG4gKi9cblxuZXhwb3J0IHZhciBkZXNhdHVyYXRlID0gZnVuY3Rpb24gZGVzYXR1cmF0ZShjb2xvciwgYW1vdW50KSB7XG4gIHZhciBkZXNhdHVyYXRlID0gY2hyb21hKGNvbG9yKS5zZXQoJ2hzbC5zJywgXCItXCIuY29uY2F0KGFtb3VudCkpO1xuICByZXR1cm4gaW5PcmlnaW5hbEZvcm1hdChjb2xvciwgZGVzYXR1cmF0ZSk7XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBsaWdodG5lc3MgdmFsdWUgb2YgYSBjb2xvci4gMC0xMDBcbiAqIEBwYXJhbSBjb2xvclxuICovXG5cbmV4cG9ydCB2YXIgbGlnaHRuZXNzID0gZnVuY3Rpb24gbGlnaHRuZXNzKGNvbG9yKSB7XG4gIHJldHVybiBjaHJvbWEoY29sb3IpLmdldCgnaHNsLmwnKSAqIDEwMDtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IHNoYWRlLCB0aW50LCBsaWdodG5lc3MgYXMgZ2V0TGlnaHRuZXNzIH0gZnJvbSAnLi9tYW5pcHVsYXRpb24nO1xuaW1wb3J0IHsgZ2V0T24gfSBmcm9tICcuLi90aGVtZS91dGlscyc7XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgY29sb3IgdGhhdCBtZWV0cyBvciBleGNlZWRzIFdDQUcgbGV2ZWwgQUFcbiAqIEBwYXJhbSBmb3JlZ3JvdW5kIC0gQ29sb3IgdG8gbWFuaXB1bGF0ZVxuICogQHBhcmFtIHJhdGlvIC0gQW1vdW50IHRvIGNoYW5nZSBpbiBhYnNvbHV0ZSB0ZXJtcy4gMC0xMC5cbiAqICpcbiAqIEBwYXJhbSB0aGVtZU9yQmFja2dyb3VuZCAtIENvbG9yIHRvIHVzZSBhcyB0aGUgY29udHJhc3QgYmFzaXMgb3IganVzdCBwYXNzIEV1aVRoZW1lXG4gKi9cblxuZXhwb3J0IHZhciBtYWtlSGlnaENvbnRyYXN0Q29sb3IgPSBmdW5jdGlvbiBtYWtlSGlnaENvbnRyYXN0Q29sb3IoX2ZvcmVncm91bmQpIHtcbiAgdmFyIHJhdGlvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiA0Ljg1O1xuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lT3JCYWNrZ3JvdW5kKSB7XG4gICAgdmFyIF9nZXRPbjtcblxuICAgIHZhciBmb3JlZ3JvdW5kID0gX3R5cGVvZih0aGVtZU9yQmFja2dyb3VuZCkgPT09ICdvYmplY3QnID8gKF9nZXRPbiA9IGdldE9uKHRoZW1lT3JCYWNrZ3JvdW5kLCBfZm9yZWdyb3VuZCkpICE9PSBudWxsICYmIF9nZXRPbiAhPT0gdm9pZCAwID8gX2dldE9uIDogX2ZvcmVncm91bmQgOiBfZm9yZWdyb3VuZDtcbiAgICB2YXIgYmFja2dyb3VuZCA9IF90eXBlb2YodGhlbWVPckJhY2tncm91bmQpID09PSAnb2JqZWN0JyA/IHRoZW1lT3JCYWNrZ3JvdW5kLmNvbG9ycy5ib2R5IDogdGhlbWVPckJhY2tncm91bmQ7XG5cbiAgICBpZiAoY2hyb21hKGZvcmVncm91bmQpLmFscGhhKCkgPCAxIHx8IGNocm9tYShiYWNrZ3JvdW5kKS5hbHBoYSgpIDwgMSkge1xuICAgICAgY29uc29sZS53YXJuKFwiQ29udHJhc3QgY2Fubm90IGJlIGFjY3VyYXRlbHkgY2FsY3VsYXRlZCB3aGVuIGNvbG9ycyBoYXZlIGFscGhhIGNoYW5uZWwgb3BhY2l0eS4gTWFrZSBzdXJlIHRoZSBwcm92aWRlZCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyBoYXZlIG5vIHRyYW5zcGFyZW5jeTpcXG5cXG5Gb3JlZ3JvdW5kOiBcIi5jb25jYXQoZm9yZWdyb3VuZCwgXCJcXG5CYWNrZ3JvdW5kOiBcIikuY29uY2F0KGJhY2tncm91bmQpKTtcbiAgICB9XG5cbiAgICB2YXIgY29udHJhc3QgPSBjaHJvbWEuY29udHJhc3QoZm9yZWdyb3VuZCwgYmFja2dyb3VuZCk7IC8vIERldGVybWluZSB0aGUgbGlnaHRuZXNzIGZhY3RvciBvZiB0aGUgYmFja2dyb3VuZCBjb2xvciBmaXJzdCB0b1xuICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRvIHNoYWRlIG9yIHRpbnQgdGhlIGZvcmVncm91bmQuXG5cbiAgICB2YXIgYnJpZ2h0bmVzcyA9IGdldExpZ2h0bmVzcyhiYWNrZ3JvdW5kKTtcbiAgICB2YXIgaGlnaENvbnRyYXN0VGV4dENvbG9yID0gZm9yZWdyb3VuZDtcblxuICAgIHdoaWxlIChjb250cmFzdCA8IHJhdGlvKSB7XG4gICAgICBpZiAoYnJpZ2h0bmVzcyA+IDUwKSB7XG4gICAgICAgIGhpZ2hDb250cmFzdFRleHRDb2xvciA9IHNoYWRlKGhpZ2hDb250cmFzdFRleHRDb2xvciwgMC4wNSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdoQ29udHJhc3RUZXh0Q29sb3IgPSB0aW50KGhpZ2hDb250cmFzdFRleHRDb2xvciwgMC4wNSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRyYXN0ID0gY2hyb21hLmNvbnRyYXN0KGhpZ2hDb250cmFzdFRleHRDb2xvciwgYmFja2dyb3VuZCk7XG4gICAgICB2YXIgbGlnaHRuZXNzID0gZ2V0TGlnaHRuZXNzKGhpZ2hDb250cmFzdFRleHRDb2xvcik7XG5cbiAgICAgIGlmIChsaWdodG5lc3MgPCA1KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSGlnaCBlbm91Z2ggY29udHJhc3QgY291bGQgbm90IGJlIGRldGVybWluZWQuIE1vc3QgbGlrZWx5IHlvdXIgYmFja2dyb3VuZCBjb2xvciBkb2VzIG5vdCBhZGp1c3QgZm9yIGxpZ2h0IG1vZGUuJyk7XG4gICAgICAgIHJldHVybiBoaWdoQ29udHJhc3RUZXh0Q29sb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChsaWdodG5lc3MgPiA5NSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0hpZ2ggZW5vdWdoIGNvbnRyYXN0IGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLiBNb3N0IGxpa2VseSB5b3VyIGJhY2tncm91bmQgY29sb3IgZG9lcyBub3QgYWRqdXN0IGZvciBkYXJrIG1vZGUuJyk7XG4gICAgICAgIHJldHVybiBoaWdoQ29udHJhc3RUZXh0Q29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNocm9tYShoaWdoQ29udHJhc3RUZXh0Q29sb3IpLmhleCgpO1xuICB9O1xufTtcbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBjb2xvciB3aXRoIGluY3JlYXNlZCBjb250cmFzdFxuICogRGlzYWJsZWQgY29udGVudCBvbmx5IG5lZWRzIGEgY29udHJhc3Qgb2YgYXQgbGVhc3QgMiBiZWNhdXNlIHRoZXJlIGlzIG5vIGludGVyYWN0aW9uIGF2YWlsYWJsZVxuICogQHBhcmFtIGZvcmVncm91bmQgLSBDb2xvciB0byBtYW5pcHVsYXRlXG4gKiBAcGFyYW0gcmF0aW8gLSBBbW91bnQgdG8gY2hhbmdlIGluIGFic29sdXRlIHRlcm1zLiAwLTEwLlxuICogKlxuICogQHBhcmFtIHRoZW1lT3JCYWNrZ3JvdW5kIC0gQ29sb3IgdG8gdXNlIGFzIHRoZSBjb250cmFzdCBiYXNpc1xuICovXG5cbmV4cG9ydCB2YXIgbWFrZURpc2FibGVkQ29udHJhc3RDb2xvciA9IGZ1bmN0aW9uIG1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IoY29sb3IpIHtcbiAgdmFyIHJhdGlvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAyO1xuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lT3JCYWNrZ3JvdW5kKSB7XG4gICAgcmV0dXJuIG1ha2VIaWdoQ29udHJhc3RDb2xvcihjb2xvciwgcmF0aW8pKHRoZW1lT3JCYWNrZ3JvdW5kKTtcbiAgfTtcbn07IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IG1ha2VIaWdoQ29udHJhc3RDb2xvciwgbWFrZURpc2FibGVkQ29udHJhc3RDb2xvciB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yL2NvbnRyYXN0JztcblxuLypcbiAqIExJR0hUIFRIRU1FXG4gKiBPbmx5IHNwbGl0IHVwIGluIHRoZSBsaWdodCB0aGVtZSB0byBhY2Nlc3MgdGhlIGtleXMgYnkgc2VjdGlvbiBpbiB0aGUgZG9jc1xuICovXG5leHBvcnQgdmFyIGJyYW5kX2NvbG9ycyA9IHtcbiAgcHJpbWFyeTogJyMwN0MnLFxuICBhY2NlbnQ6ICcjRjA0RTk4JyxcbiAgc3VjY2VzczogJyMwMEJGQjMnLFxuICB3YXJuaW5nOiAnI0ZFQzUxNCcsXG4gIGRhbmdlcjogJyNCRDI3MUUnXG59O1xuZXhwb3J0IHZhciBicmFuZF90ZXh0X2NvbG9ycyA9IHtcbiAgcHJpbWFyeVRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLnByaW1hcnknKSksXG4gIGFjY2VudFRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLmFjY2VudCcpKSxcbiAgc3VjY2Vzc1RleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLnN1Y2Nlc3MnKSksXG4gIHdhcm5pbmdUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy53YXJuaW5nJykpLFxuICBkYW5nZXJUZXh0OiBjb21wdXRlZChtYWtlSGlnaENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kYW5nZXInKSlcbn07XG5leHBvcnQgdmFyIHNoYWRlX2NvbG9ycyA9IHtcbiAgZW1wdHlTaGFkZTogJyNGRkYnLFxuICBsaWdodGVzdFNoYWRlOiAnI0YxRjRGQScsXG4gIGxpZ2h0U2hhZGU6ICcjRDNEQUU2JyxcbiAgbWVkaXVtU2hhZGU6ICcjOThBMkIzJyxcbiAgZGFya1NoYWRlOiAnIzY5NzA3RCcsXG4gIGRhcmtlc3RTaGFkZTogJyMzNDM3NDEnLFxuICBmdWxsU2hhZGU6ICcjMDAwJ1xufTtcbmV4cG9ydCB2YXIgc3BlY2lhbF9jb2xvcnMgPSB7XG4gIGJvZHk6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMSksXG4gICAgICAgIGxpZ2h0ZXN0U2hhZGUgPSBfcmVmMlswXTtcblxuICAgIHJldHVybiB0aW50KGxpZ2h0ZXN0U2hhZGUsIDAuNCk7XG4gIH0sIFsnY29sb3JzLmxpZ2h0ZXN0U2hhZGUnXSksXG4gIGhpZ2hsaWdodDogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgdmFyIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDEpLFxuICAgICAgICB3YXJuaW5nID0gX3JlZjRbMF07XG5cbiAgICByZXR1cm4gdGludCh3YXJuaW5nLCAwLjkpO1xuICB9LCBbJ2NvbG9ycy53YXJuaW5nJ10pLFxuICBkaXNhYmxlZDogJyNBQkI0QzQnLFxuICBkaXNhYmxlZFRleHQ6IGNvbXB1dGVkKG1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IoJ2NvbG9ycy5kaXNhYmxlZCcpKSxcbiAgc2hhZG93OiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICB2YXIgY29sb3JzID0gX3JlZjUuY29sb3JzO1xuICAgIHJldHVybiBjb2xvcnMuaW5rO1xuICB9KVxufTtcbmV4cG9ydCB2YXIgdGV4dF9jb2xvcnMgPSB7XG4gIHRleHQ6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNikge1xuICAgIHZhciBfcmVmNyA9IF9zbGljZWRUb0FycmF5KF9yZWY2LCAxKSxcbiAgICAgICAgZGFya2VzdFNoYWRlID0gX3JlZjdbMF07XG5cbiAgICByZXR1cm4gZGFya2VzdFNoYWRlO1xuICB9LCBbJ2NvbG9ycy5kYXJrZXN0U2hhZGUnXSksXG4gIHRpdGxlOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjgpIHtcbiAgICB2YXIgX3JlZjkgPSBfc2xpY2VkVG9BcnJheShfcmVmOCwgMSksXG4gICAgICAgIHRleHQgPSBfcmVmOVswXTtcblxuICAgIHJldHVybiBzaGFkZSh0ZXh0LCAwLjUpO1xuICB9LCBbJ2NvbG9ycy50ZXh0J10pLFxuICBzdWJkdWVkVGV4dDogY29tcHV0ZWQobWFrZUhpZ2hDb250cmFzdENvbG9yKCdjb2xvcnMuZGFya1NoYWRlJykpLFxuICBsaW5rOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjEwKSB7XG4gICAgdmFyIF9yZWYxMSA9IF9zbGljZWRUb0FycmF5KF9yZWYxMCwgMSksXG4gICAgICAgIHByaW1hcnlUZXh0ID0gX3JlZjExWzBdO1xuXG4gICAgcmV0dXJuIHByaW1hcnlUZXh0O1xuICB9LCBbJ2NvbG9ycy5wcmltYXJ5VGV4dCddKVxufTtcbmV4cG9ydCB2YXIgbGlnaHRfY29sb3JzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBicmFuZF9jb2xvcnMpLCBzaGFkZV9jb2xvcnMpLCBzcGVjaWFsX2NvbG9ycyksIGJyYW5kX3RleHRfY29sb3JzKSwgdGV4dF9jb2xvcnMpO1xuLypcbiAqIERBUksgVEhFTUVcbiAqL1xuXG5leHBvcnQgdmFyIGRhcmtfc2hhZGVzID0ge1xuICBlbXB0eVNoYWRlOiAnIzFEMUUyNCcsXG4gIGxpZ2h0ZXN0U2hhZGU6ICcjMjUyNjJFJyxcbiAgbGlnaHRTaGFkZTogJyMzNDM3NDEnLFxuICBtZWRpdW1TaGFkZTogJyM1MzU5NjYnLFxuICBkYXJrU2hhZGU6ICcjOThBMkIzJyxcbiAgZGFya2VzdFNoYWRlOiAnI0Q0REFFNScsXG4gIGZ1bGxTaGFkZTogJyNGRkYnXG59O1xuZXhwb3J0IHZhciBkYXJrX2NvbG9yc19hbXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gIC8vIEJyYW5kXG4gIHByaW1hcnk6ICcjMzZBMkVGJyxcbiAgYWNjZW50OiAnI0Y2OEZCRScsXG4gIHN1Y2Nlc3M6ICcjN0RERUQ4JyxcbiAgd2FybmluZzogJyNGM0QzNzEnLFxuICBkYW5nZXI6ICcjRjg2QjYzJ1xufSwgZGFya19zaGFkZXMpLCB7fSwge1xuICAvLyBTcGVjaWFsXG4gIGJvZHk6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgICB2YXIgX3JlZjEzID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEyLCAxKSxcbiAgICAgICAgbGlnaHRlc3RTaGFkZSA9IF9yZWYxM1swXTtcblxuICAgIHJldHVybiBzaGFkZShsaWdodGVzdFNoYWRlLCAwLjQ1KTtcbiAgfSwgWydjb2xvcnMubGlnaHRlc3RTaGFkZSddKSxcbiAgaGlnaGxpZ2h0OiAnIzJFMkQyNScsXG4gIGRpc2FibGVkOiAnIzUxNTc2MScsXG4gIGRpc2FibGVkVGV4dDogY29tcHV0ZWQobWFrZURpc2FibGVkQ29udHJhc3RDb2xvcignY29sb3JzLmRpc2FibGVkJykpLFxuICBzaGFkb3c6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmMTQpIHtcbiAgICB2YXIgY29sb3JzID0gX3JlZjE0LmNvbG9ycztcbiAgICByZXR1cm4gY29sb3JzLmluaztcbiAgfSlcbn0sIGJyYW5kX3RleHRfY29sb3JzKSwge30sIHtcbiAgLy8gVGV4dFxuICB0ZXh0OiAnI0RGRTVFRicsXG4gIHRpdGxlOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjE1KSB7XG4gICAgdmFyIF9yZWYxNiA9IF9zbGljZWRUb0FycmF5KF9yZWYxNSwgMSksXG4gICAgICAgIHRleHQgPSBfcmVmMTZbMF07XG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfSwgWydjb2xvcnMudGV4dCddKSxcbiAgc3ViZHVlZFRleHQ6IGNvbXB1dGVkKG1ha2VIaWdoQ29udHJhc3RDb2xvcignY29sb3JzLm1lZGl1bVNoYWRlJykpLFxuICBsaW5rOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjE3KSB7XG4gICAgdmFyIF9yZWYxOCA9IF9zbGljZWRUb0FycmF5KF9yZWYxNywgMSksXG4gICAgICAgIHByaW1hcnlUZXh0ID0gX3JlZjE4WzBdO1xuXG4gICAgcmV0dXJuIHByaW1hcnlUZXh0O1xuICB9LCBbJ2NvbG9ycy5wcmltYXJ5VGV4dCddKVxufSk7XG4vKlxuICogRlVMTFxuICovXG5cbmV4cG9ydCB2YXIgY29sb3JzID0ge1xuICBnaG9zdDogJyNGRkYnLFxuICBpbms6ICcjMDAwJyxcbiAgTElHSFQ6IGxpZ2h0X2NvbG9ycyxcbiAgREFSSzogZGFya19jb2xvcnNfYW1zXG59OyIsICJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGFuaW1hdGlvbl9zcGVlZCA9IHtcbiAgZXh0cmFGYXN0OiAnOTBtcycsXG4gIGZhc3Q6ICcxNTBtcycsXG4gIG5vcm1hbDogJzI1MG1zJyxcbiAgc2xvdzogJzM1MG1zJyxcbiAgZXh0cmFTbG93OiAnNTAwbXMnXG59O1xuZXhwb3J0IHZhciBhbmltYXRpb25fZWFzZSA9IHtcbiAgYm91bmNlOiAnY3ViaWMtYmV6aWVyKC4zNCwgMS42MSwgLjcsIDEpJyxcbiAgcmVzaXN0YW5jZTogJ2N1YmljLWJlemllciguNjk0LCAuMDQ4MiwgLjMzNSwgMSknXG59O1xuZXhwb3J0IHZhciBhbmltYXRpb24gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFuaW1hdGlvbl9zcGVlZCksIGFuaW1hdGlvbl9lYXNlKTsiLCAiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb21tb24nO1xuLyoqXG4gKiBFVUkgdXRpbGl6ZXMgbG9naWNhbCBDU1MgcHJvcGVydGllcyB0byBlbmFibGUgZGlyZWN0aW9uYWwgd3JpdGluZy1tb2Rlcy5cbiAqIFRvIGVuY291cmFnZSB1c2Ugb2YgbG9naWNhbCBwcm9wZXJ0aWVzLCB3ZSBwcm92aWRlIGEgZmV3IGhlbHBlciB1dGlsaXRpZXMgdG9cbiAqIGNvbnZlcnQgY2VydGFpbiBkaXJlY3Rpb25hbCBwcm9wZXJ0aWVzIHRvIGxvZ2ljYWwgcHJvcGVydGllcy5cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9DU1NfTG9naWNhbF9Qcm9wZXJ0aWVzXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsU2lkZSA9IHtcbiAgbGVmdDogJ2lubGluZS1zdGFydCcsXG4gIHJpZ2h0OiAnaW5saW5lLWVuZCcsXG4gIHRvcDogJ2Jsb2NrLXN0YXJ0JyxcbiAgYm90dG9tOiAnYmxvY2stZW5kJyxcbiAgaG9yaXpvbnRhbDogJ2lubGluZScsXG4gIHZlcnRpY2FsOiAnYmxvY2snXG59O1xuZXhwb3J0IHZhciBMT0dJQ0FMX1NJREVTID0ga2V5c09mKGxvZ2ljYWxTaWRlKTtcbnZhciBsb2dpY2FsTWFyZ2lucyA9IHtcbiAgJ21hcmdpbi1sZWZ0JzogJ21hcmdpbi1pbmxpbmUtc3RhcnQnLFxuICAnbWFyZ2luLXJpZ2h0JzogJ21hcmdpbi1pbmxpbmUtZW5kJyxcbiAgJ21hcmdpbi10b3AnOiAnbWFyZ2luLWJsb2NrLXN0YXJ0JyxcbiAgJ21hcmdpbi1ib3R0b20nOiAnbWFyZ2luLWJsb2NrLWVuZCcsXG4gICdtYXJnaW4taG9yaXpvbnRhbCc6ICdtYXJnaW4taW5saW5lJyxcbiAgJ21hcmdpbi12ZXJ0aWNhbCc6ICdtYXJnaW4tYmxvY2snXG59O1xudmFyIGxvZ2ljYWxQYWRkaW5ncyA9IHtcbiAgJ3BhZGRpbmctbGVmdCc6ICdwYWRkaW5nLWlubGluZS1zdGFydCcsXG4gICdwYWRkaW5nLXJpZ2h0JzogJ3BhZGRpbmctaW5saW5lLWVuZCcsXG4gICdwYWRkaW5nLXRvcCc6ICdwYWRkaW5nLWJsb2NrLXN0YXJ0JyxcbiAgJ3BhZGRpbmctYm90dG9tJzogJ3BhZGRpbmctYmxvY2stZW5kJyxcbiAgJ3BhZGRpbmctaG9yaXpvbnRhbCc6ICdwYWRkaW5nLWlubGluZScsXG4gICdwYWRkaW5nLXZlcnRpY2FsJzogJ3BhZGRpbmctYmxvY2snXG59O1xudmFyIGxvZ2ljYWxQb3NpdGlvbiA9IHtcbiAgdG9wOiAnaW5zZXQtYmxvY2stc3RhcnQnLFxuICByaWdodDogJ2luc2V0LWlubGluZS1lbmQnLFxuICBib3R0b206ICdpbnNldC1ibG9jay1lbmQnLFxuICBsZWZ0OiAnaW5zZXQtaW5saW5lLXN0YXJ0JyxcbiAgaG9yaXpvbnRhbDogJ2luc2V0LWJsb2NrJyxcbiAgdmVydGljYWw6ICdpbnNldC1pbmxpbmUnLFxuICBpbnNldDogJ2luc2V0J1xufTtcbnZhciBsb2dpY2FsU2l6ZSA9IHtcbiAgaGVpZ2h0OiAnYmxvY2stc2l6ZScsXG4gIHdpZHRoOiAnaW5saW5lLXNpemUnLFxuICAnbWF4LWhlaWdodCc6ICdtYXgtYmxvY2stc2l6ZScsXG4gICdtYXgtd2lkdGgnOiAnbWF4LWlubGluZS1zaXplJyxcbiAgJ21pbi1oZWlnaHQnOiAnbWluLWJsb2NrLXNpemUnLFxuICAnbWluLXdpZHRoJzogJ21pbi1pbmxpbmUtc2l6ZSdcbn07XG52YXIgbG9naWNhbE92ZXJmbG93ID0ge1xuICAnb3ZlcmZsb3cteCc6ICdvdmVyZmxvdy1ibG9jaycsXG4gICdvdmVyZmxvdy15JzogJ292ZXJmbG93LWlubGluZSdcbn07XG52YXIgbG9naWNhbEJvcmRlcnMgPSB7XG4gICdib3JkZXItaG9yaXpvbnRhbCc6ICdib3JkZXItaW5saW5lJyxcbiAgJ2JvcmRlci1ob3Jpem9udGFsLWNvbG9yJzogJ2JvcmRlci1pbmxpbmUtY29sb3InLFxuICAnYm9yZGVyLWhvcml6b250YWwtd2lkdGgnOiAnYm9yZGVyLWlubGluZS13aWR0aCcsXG4gICdib3JkZXItaG9yaXpvbnRhbC1zdHlsZSc6ICdib3JkZXItaW5saW5lLXN0eWxlJyxcbiAgJ2JvcmRlci12ZXJ0aWNhbCc6ICdib3JkZXItYmxvY2snLFxuICAnYm9yZGVyLXZlcnRpY2FsLWNvbG9yJzogJ2JvcmRlci1ibG9jay1jb2xvcicsXG4gICdib3JkZXItdmVydGljYWwtd2lkdGgnOiAnYm9yZGVyLWJsb2NrLXdpZHRoJyxcbiAgJ2JvcmRlci12ZXJ0aWNhbC1zdHlsZSc6ICdib3JkZXItYmxvY2stc3R5bGUnLFxuICAnYm9yZGVyLWJvdHRvbSc6ICdib3JkZXItYmxvY2stZW5kJyxcbiAgJ2JvcmRlci1ib3R0b20tY29sb3InOiAnYm9yZGVyLWJsb2NrLWVuZC1jb2xvcicsXG4gICdib3JkZXItYm90dG9tLXN0eWxlJzogJ2JvcmRlci1ibG9jay1lbmQtc3R5bGUnLFxuICAnYm9yZGVyLWJvdHRvbS13aWR0aCc6ICdib3JkZXItYmxvY2stZW5kLXdpZHRoJyxcbiAgJ2JvcmRlci10b3AnOiAnYm9yZGVyLWJsb2NrLXN0YXJ0JyxcbiAgJ2JvcmRlci10b3AtY29sb3InOiAnYm9yZGVyLWJsb2NrLXN0YXJ0LWNvbG9yJyxcbiAgJ2JvcmRlci10b3Atc3R5bGUnOiAnYm9yZGVyLWJsb2NrLXN0YXJ0LXN0eWxlJyxcbiAgJ2JvcmRlci10b3Atd2lkdGgnOiAnYm9yZGVyLWJsb2NrLXN0YXJ0LXdpZHRoJyxcbiAgJ2JvcmRlci1yaWdodCc6ICdib3JkZXItaW5saW5lLWVuZCcsXG4gICdib3JkZXItcmlnaHQtY29sb3InOiAnYm9yZGVyLWlubGluZS1lbmQtY29sb3InLFxuICAnYm9yZGVyLXJpZ2h0LXN0eWxlJzogJ2JvcmRlci1pbmxpbmUtZW5kLXN0eWxlJyxcbiAgJ2JvcmRlci1yaWdodC13aWR0aCc6ICdib3JkZXItaW5saW5lLWVuZC13aWR0aCcsXG4gICdib3JkZXItbGVmdCc6ICdib3JkZXItaW5saW5lLXN0YXJ0JyxcbiAgJ2JvcmRlci1sZWZ0LWNvbG9yJzogJ2JvcmRlci1pbmxpbmUtc3RhcnQtY29sb3InLFxuICAnYm9yZGVyLWxlZnQtc3R5bGUnOiAnYm9yZGVyLWlubGluZS1zdGFydC1zdHlsZScsXG4gICdib3JkZXItbGVmdC13aWR0aCc6ICdib3JkZXItaW5saW5lLXN0YXJ0LXdpZHRoJyxcbiAgJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnOiAnYm9yZGVyLXN0YXJ0LXN0YXJ0LXJhZGl1cycsXG4gICdib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyc6ICdib3JkZXItc3RhcnQtZW5kLXJhZGl1cycsXG4gICdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJzogJ2JvcmRlci1lbmQtc3RhcnQtcmFkaXVzJyxcbiAgJ2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzJzogJ2JvcmRlci1lbmQtZW5kLXJhZGl1cydcbn07XG5leHBvcnQgdmFyIGxvZ2ljYWxzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGxvZ2ljYWxNYXJnaW5zKSwgbG9naWNhbFBhZGRpbmdzKSwgbG9naWNhbFBvc2l0aW9uKSwgbG9naWNhbFNpemUpLCBsb2dpY2FsT3ZlcmZsb3cpLCBsb2dpY2FsQm9yZGVycyk7XG5leHBvcnQgdmFyIExPR0lDQUxfUFJPUEVSVElFUyA9IGtleXNPZihsb2dpY2Fscyk7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYHN0cmluZ2AgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsQ1NTID0gZnVuY3Rpb24gbG9naWNhbENTUyhwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KGxvZ2ljYWxzW3Byb3BlcnR5XSwgXCI6IFwiKS5jb25jYXQodmFsdWUsIFwiO1wiKTtcbn07XG4vKipcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIENTUyBsb2dpY2FsIHByb3BlcnR5XG4gKiBAcGFyYW0gdmFsdWUgU3RyaW5nIHRvIG91dHB1dCBhcyB0aGUgcHJvcGVydHkgdmFsdWVcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnR5IHZlcnNpb24gZm9yIHRoZSBnaXZlbiBgcHJvcGVydHk6IHZhbHVlYCBwYWlyXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsU3R5bGUocHJvcGVydHksIHZhbHVlKSB7XG4gIC8vIFN0cmlwIGh5cGhlbnMgYW5kIGNhbWVsQ2FzZSB0aGUgQ1NTIGxvZ2ljYWwgcHJvcGVydHkgc28gUmVhY3QgZG9lc24ndCB0aHJvdyBlcnJvcnNcbiAgdmFyIGNhbWVsQ2FzZWRQcm9wZXJ0eSA9IGxvZ2ljYWxzW3Byb3BlcnR5XS5yZXBsYWNlKC8tXFx3L2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbiAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwgY2FtZWxDYXNlZFByb3BlcnR5LCBcIlwiLmNvbmNhdCh2YWx1ZSkpO1xufTtcbi8qKlxuICpcbiAqIEBwYXJhbSB3aWR0aCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiB3aWR0aFxuICogQHBhcmFtIGhlaWdodCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiBoZWlnaHRcbiAqIEByZXR1cm5zIGBzdHJpbmdgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnRpZXMgZm9yIGhlaWdodCBhbmQgd2lkdGhcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxTaXplQ1NTID0gZnVuY3Rpb24gbG9naWNhbFNpemVDU1Mod2lkdGgsIGhlaWdodCkge1xuICByZXR1cm4gXCJcXG4gICAgXCIuY29uY2F0KGxvZ2ljYWxzLndpZHRoLCBcIjogXCIpLmNvbmNhdCh3aWR0aCwgXCI7XFxuICAgIFwiKS5jb25jYXQobG9naWNhbHMuaGVpZ2h0LCBcIjogXCIpLmNvbmNhdChoZWlnaHQsIFwiO1xcbiAgXCIpO1xufTtcbi8qKlxuICpcbiAqIEBwYXJhbSB3aWR0aCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiB3aWR0aFxuICogQHBhcmFtIGhlaWdodCBBIHN0cmluZyB2YWx1ZSBmb3IgdGhlIExUUiBoZWlnaHRcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnRpZXMgZm9yIGhlaWdodCBhbmQgd2lkdGhcbiAqL1xuXG5leHBvcnQgdmFyIGxvZ2ljYWxTaXplU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsU2l6ZVN0eWxlKHdpZHRoLCBoZWlnaHQpIHtcbiAgdmFyIF9yZWYyO1xuXG4gIHJldHVybiBfcmVmMiA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX3JlZjIsIGxvZ2ljYWxzLndpZHRoLCB3aWR0aCksIF9kZWZpbmVQcm9wZXJ0eShfcmVmMiwgbG9naWNhbHMuaGVpZ2h0LCBoZWlnaHQpLCBfcmVmMjtcbn07IC8vIFRleHQgYWxpZ25tZW50IGlzIHNlcGFyYXRlIGJlY2F1c2UgaXRzIHRoZSB2YWx1ZSB0aGF0IGNoYW5nZXMgbm90IHRoZSBwcm9wZXJ0eVxuXG5leHBvcnQgdmFyIGxvZ2ljYWxUZXh0ID0ge1xuICAndGV4dC1hbGlnbic6IHtcbiAgICBsZWZ0OiAnc3RhcnQnLFxuICAgIGNlbnRlcjogJ2NlbnRlcicsXG4gICAgcmlnaHQ6ICdlbmQnXG4gIH1cbn07XG5leHBvcnQgdmFyIExPR0lDQUxfVEVYVF9BTElHTk1FTlQgPSBrZXlzT2YobG9naWNhbFRleHRbJ3RleHQtYWxpZ24nXSk7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBBIHN0cmluZyB0aGF0IGlzIGEgdmFsaWQgQ1NTIGxvZ2ljYWwgcHJvcGVydHlcbiAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gb3V0cHV0IGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybnMgYHN0cmluZ2AgUmV0dXJucyB0aGUgbG9naWNhbCBDU1MgcHJvcGVydHkgdmVyc2lvbiBmb3IgdGhlIGdpdmVuIGBwcm9wZXJ0eTogdmFsdWVgIHBhaXJcbiAqL1xuZXhwb3J0IHZhciBsb2dpY2FsVGV4dEFsaWduQ1NTID0gZnVuY3Rpb24gbG9naWNhbFRleHRBbGlnbkNTUyh2YWx1ZSkge1xuICByZXR1cm4gXCJ0ZXh0LWFsaWduOiBcIi5jb25jYXQobG9naWNhbFRleHRbJ3RleHQtYWxpZ24nXVt2YWx1ZV0sIFwiO1wiKTtcbn07XG4vKipcbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgQSBzdHJpbmcgdGhhdCBpcyBhIHZhbGlkIENTUyBsb2dpY2FsIHByb3BlcnR5XG4gKiBAcGFyYW0gdmFsdWUgU3RyaW5nIHRvIG91dHB1dCBhcyB0aGUgcHJvcGVydHkgdmFsdWVcbiAqIEByZXR1cm5zIGBvYmplY3RgIFJldHVybnMgdGhlIGxvZ2ljYWwgQ1NTIHByb3BlcnR5IHZlcnNpb24gZm9yIHRoZSBnaXZlbiBgcHJvcGVydHk6IHZhbHVlYCBwYWlyXG4gKi9cblxuZXhwb3J0IHZhciBsb2dpY2FsVGV4dEFsaWduU3R5bGUgPSBmdW5jdGlvbiBsb2dpY2FsVGV4dEFsaWduU3R5bGUodmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0QWxpZ246IGxvZ2ljYWxUZXh0Wyd0ZXh0LWFsaWduJ11bdmFsdWVdXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgYHB4YCB2YWx1ZSBiYXNlZCBvbiBhIHNjYWxlIG11bHRpcGxpZXJcbiAqIEBwYXJhbSBzY2FsZSAtIFRoZSBmb250IHNjYWxlIG11bHRpcGxpZXJcbiAqICpcbiAqIEBwYXJhbSB0aGVtZU9yQmFzZSAtIFRoZW1lIGJhc2UgdmFsdWVcbiAqICpcbiAqIEByZXR1cm5zIHN0cmluZyAtIFJlbSB1bml0IGFsaWduZWQgdG8gYmFzZWxpbmVcbiAqL1xuZXhwb3J0IHZhciBzaXplVG9QaXhlbCA9IGZ1bmN0aW9uIHNpemVUb1BpeGVsKCkge1xuICB2YXIgc2NhbGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IDE7XG4gIHJldHVybiBmdW5jdGlvbiAodGhlbWVPckJhc2UpIHtcbiAgICB2YXIgYmFzZSA9IF90eXBlb2YodGhlbWVPckJhc2UpID09PSAnb2JqZWN0JyA/IHRoZW1lT3JCYXNlLmJhc2UgOiB0aGVtZU9yQmFzZTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQoYmFzZSAqIHNjYWxlLCBcInB4XCIpO1xuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBmb250LXNpemUgdmFsdWUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHNjYWxlIGtleVxuICogQHBhcmFtIHNjYWxlIC0gVGhlIGZvbnQgc2NhbGUga2V5XG4gKiBAcGFyYW0gdGhlbWUgLSBSZXF1aXJlcyB0aGUgYGJhc2VgIGFuZCBgZm9udGAga2V5c1xuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIC0gc2VlIF9Gb250U2NhbGVPcHRpb25zXG4gKlxuICogQHJldHVybnMgc3RyaW5nIC0gQ2FsY3VsYXRlZCBmb250LXNpemUgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV1aUZvbnRTaXplRnJvbVNjYWxlKHNjYWxlLCBfcmVmKSB7XG4gIHZhciBiYXNlID0gX3JlZi5iYXNlLFxuICAgICAgZm9udCA9IF9yZWYuZm9udDtcblxuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgICAgX3JlZjIkbWVhc3VyZW1lbnQgPSBfcmVmMi5tZWFzdXJlbWVudCxcbiAgICAgIG1lYXN1cmVtZW50ID0gX3JlZjIkbWVhc3VyZW1lbnQgPT09IHZvaWQgMCA/ICdyZW0nIDogX3JlZjIkbWVhc3VyZW1lbnQsXG4gICAgICBjdXN0b21TY2FsZSA9IF9yZWYyLmN1c3RvbVNjYWxlO1xuXG4gIGlmIChtZWFzdXJlbWVudCA9PT0gJ2VtJykge1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChmb250LnNjYWxlW3NjYWxlXSwgXCJlbVwiKTtcbiAgfVxuXG4gIHZhciBudW1lcmF0b3IgPSBiYXNlICogZm9udC5zY2FsZVtzY2FsZV07XG4gIGlmIChjdXN0b21TY2FsZSkgbnVtZXJhdG9yICo9IGZvbnQuc2NhbGVbY3VzdG9tU2NhbGVdO1xuICB2YXIgZGVub21pbmF0b3IgPSBiYXNlICogZm9udC5zY2FsZVtmb250LmJvZHkuc2NhbGVdO1xuICByZXR1cm4gbWVhc3VyZW1lbnQgPT09ICdweCcgPyBcIlwiLmNvbmNhdChudW1lcmF0b3IsIFwicHhcIikgOiBcIlwiLmNvbmNhdCgobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpLnRvRml4ZWQoNCksIFwicmVtXCIpO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBsaW5lLWhlaWdodCB0byB0aGUgY2xvc2VzdCBtdWx0aXBsZSBvZiB0aGUgYmFzZWxpbmVcbiAqIEVYOiBBIHByb3BlciBsaW5lLWhlaWdodCBmb3IgdGV4dCBpcyAxLjUgdGltZXMgdGhlIGZvbnQtc2l6ZS5cbiAqICAgICBJZiBvdXIgYmFzZSBmb250IHNpemUgKGV1aUZvbnRTaXplKSBpcyAxNiwgYW5kIG91ciBiYXNlbGluZSBpcyA0LiBUbyBlbnN1cmUgdGhlXG4gKiAgICAgdGV4dCBzdGF5cyBvbiB0aGUgYmFzZWxpbmUsIHdlIHBhc3MgYSBtdWx0aXBsaWVyIHRvIGNhbGN1bGF0ZSBhIGxpbmUtaGVpZ2h0LlxuICogQHBhcmFtIHNjYWxlIC0gVGhlIGZvbnQgc2NhbGUga2V5XG4gKiBAcGFyYW0gdGhlbWUgLSBSZXF1aXJlcyB0aGUgYGJhc2VgIGFuZCBgZm9udGAga2V5c1xuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIC0gc2VlIF9Gb250U2NhbGVPcHRpb25zXG4gKlxuICogQHJldHVybnMgc3RyaW5nIC0gQ2FsY3VsYXRlZCBsaW5lLWhlaWdodCB2YWx1ZSBhbGlnbmVkIHRvIGJhc2VsaW5lXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV1aUxpbmVIZWlnaHRGcm9tQmFzZWxpbmUoc2NhbGUsIF9yZWYzKSB7XG4gIHZhciBiYXNlID0gX3JlZjMuYmFzZSxcbiAgICAgIGZvbnQgPSBfcmVmMy5mb250O1xuXG4gIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgICBfcmVmNCRtZWFzdXJlbWVudCA9IF9yZWY0Lm1lYXN1cmVtZW50LFxuICAgICAgbWVhc3VyZW1lbnQgPSBfcmVmNCRtZWFzdXJlbWVudCA9PT0gdm9pZCAwID8gJ3JlbScgOiBfcmVmNCRtZWFzdXJlbWVudCxcbiAgICAgIGN1c3RvbVNjYWxlID0gX3JlZjQuY3VzdG9tU2NhbGU7XG5cbiAgdmFyIGJhc2VsaW5lID0gZm9udC5iYXNlbGluZSxcbiAgICAgIGxpbmVIZWlnaHRNdWx0aXBsaWVyID0gZm9udC5saW5lSGVpZ2h0TXVsdGlwbGllcjtcbiAgdmFyIG51bWVyYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW3NjYWxlXTtcbiAgaWYgKGN1c3RvbVNjYWxlKSBudW1lcmF0b3IgKj0gZm9udC5zY2FsZVtjdXN0b21TY2FsZV07XG4gIHZhciBkZW5vbWluYXRvciA9IGJhc2UgKiBmb250LnNjYWxlW2ZvbnQuYm9keS5zY2FsZV07XG5cbiAgdmFyIF9saW5lSGVpZ2h0TXVsdGlwbGllciA9IG51bWVyYXRvciA8PSBiYXNlID8gbGluZUhlaWdodE11bHRpcGxpZXIgOiBsaW5lSGVpZ2h0TXVsdGlwbGllciAqIDAuODMzO1xuXG4gIGlmIChtZWFzdXJlbWVudCA9PT0gJ2VtJykge1xuICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBsaW5lLWhlaWdodCB2aWEgYGVtYCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBhZ2FpbnN0IHRoZSBwaXhlbCBiYXNlbGluZSBncmlkO1xuICAgIC8vIHdlIHdpbGwgYXNzdW1lIHRoYXQgdHlwaWNhbGx5IGxhcmdlciBzY2FsZSBmb250LXNpemVzIHNob3VsZCBoYXZlIGEgc2hvcnRlciBsaW5lLWhlaWdodDtcbiAgICByZXR1cm4gX2xpbmVIZWlnaHRNdWx0aXBsaWVyLnRvRml4ZWQoNCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZhciBwaXhlbFZhbHVlID0gTWF0aC5mbG9vcihNYXRoLnJvdW5kKG51bWVyYXRvciAqIF9saW5lSGVpZ2h0TXVsdGlwbGllcikgLyBiYXNlbGluZSkgKiBiYXNlbGluZTtcbiAgcmV0dXJuIG1lYXN1cmVtZW50ID09PSAncHgnID8gXCJcIi5jb25jYXQocGl4ZWxWYWx1ZSwgXCJweFwiKSA6IFwiXCIuY29uY2F0KChwaXhlbFZhbHVlIC8gZGVub21pbmF0b3IpLnRvRml4ZWQoNCksIFwicmVtXCIpO1xufVxuLyoqXG4gKiBUZXh0IHdlaWdodCBzaGlmdGluZ1xuICpcbiAqIFdoZW4gY2hhbmdpbmcgdGhlIGZvbnQtd2VpZ2h0IGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LFxuICogdGhpcyBtaXhpbiB3aWxsIGVuc3VyZSB0aGF0IHRoZSBzaXppbmcgaXMgZGVwZW5kZW50IG9uIHRoZSBib2xkZXN0XG4gKiB3ZWlnaHQgc28gaXQgZG9lc24ndCBzaGlmdCBzaWJsaW5nIGNvbnRlbnQuXG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0U2hpZnQgPSBmdW5jdGlvbiBldWlUZXh0U2hpZnQoKSB7XG4gIHZhciBmb250V2VpZ2h0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnYm9sZCc7XG4gIHZhciBhdHRyaWJ1dGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdkYXRhLXRleHQnO1xuICB2YXIgZXVpVGhlbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIFwiXFxuICAmOjphZnRlciB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBjb250ZW50OiBhdHRyKFwiLmNvbmNhdChhdHRyaWJ1dGUsIFwiKTtcXG4gICAgZm9udC13ZWlnaHQ6IFwiKS5jb25jYXQoZXVpVGhlbWUuZm9udC53ZWlnaHRbZm9udFdlaWdodF0sIFwiO1xcbiAgICBoZWlnaHQ6IDA7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIH1cIik7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgc2l6ZVRvUGl4ZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5leHBvcnQgdmFyIGJhc2UgPSAxNjtcbmV4cG9ydCB2YXIgc2l6ZSA9IHtcbiAgeHhzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjEyNSkpLFxuICB4czogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4yNSkpLFxuICBzOiBjb21wdXRlZChzaXplVG9QaXhlbCgwLjUpKSxcbiAgbTogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC43NSkpLFxuICBiYXNlOiBjb21wdXRlZChzaXplVG9QaXhlbCgpKSxcbiAgbDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMS41KSksXG4gIHhsOiBjb21wdXRlZChzaXplVG9QaXhlbCgyKSksXG4gIHh4bDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMi41KSksXG4gIHh4eGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDMpKSxcbiAgeHh4eGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDQpKVxufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgc2l6ZVRvUGl4ZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9nbG9iYWxfc3R5bGluZy9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy90aGVtZS91dGlscyc7XG5leHBvcnQgdmFyIGJvcmRlciA9IHtcbiAgY29sb3I6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMSksXG4gICAgICAgIGxpZ2h0U2hhZGUgPSBfcmVmMlswXTtcblxuICAgIHJldHVybiBsaWdodFNoYWRlO1xuICB9LCBbJ2NvbG9ycy5saWdodFNoYWRlJ10pLFxuICB3aWR0aDoge1xuICAgIHRoaW46ICcxcHgnLFxuICAgIHRoaWNrOiAnMnB4J1xuICB9LFxuICByYWRpdXM6IHtcbiAgICBtZWRpdW06IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuMzc1KSksXG4gICAgc21hbGw6IGNvbXB1dGVkKHNpemVUb1BpeGVsKDAuMjUpKVxuICB9LFxuICB0aGluOiBjb21wdXRlZChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgICAgIHdpZHRoID0gX3JlZjRbMF0sXG4gICAgICAgIGNvbG9yID0gX3JlZjRbMV07XG5cbiAgICByZXR1cm4gXCJcIi5jb25jYXQod2lkdGgudGhpbiwgXCIgc29saWQgXCIpLmNvbmNhdChjb2xvcik7XG4gIH0sIFsnYm9yZGVyLndpZHRoJywgJ2JvcmRlci5jb2xvciddKSxcbiAgdGhpY2s6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgICAgd2lkdGggPSBfcmVmNlswXSxcbiAgICAgICAgY29sb3IgPSBfcmVmNlsxXTtcblxuICAgIHJldHVybiBcIlwiLmNvbmNhdCh3aWR0aC50aGljaywgXCIgc29saWQgXCIpLmNvbmNhdChjb2xvcik7XG4gIH0sIFsnYm9yZGVyLndpZHRoJywgJ2JvcmRlci5jb2xvciddKSxcbiAgZWRpdGFibGU6IGNvbXB1dGVkKGZ1bmN0aW9uIChfcmVmNykge1xuICAgIHZhciBfcmVmOCA9IF9zbGljZWRUb0FycmF5KF9yZWY3LCAyKSxcbiAgICAgICAgd2lkdGggPSBfcmVmOFswXSxcbiAgICAgICAgY29sb3IgPSBfcmVmOFsxXTtcblxuICAgIHJldHVybiBcIlwiLmNvbmNhdCh3aWR0aC50aGljaywgXCIgZG90dGVkIFwiKS5jb25jYXQoY29sb3IpO1xuICB9LCBbJ2JvcmRlci53aWR0aCcsICdib3JkZXIuY29sb3InXSlcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIGxldmVscyA9IHtcbiAgdG9hc3Q6IDkwMDAsXG4gIG1vZGFsOiA4MDAwLFxuICBtYXNrOiA2MDAwLFxuICBuYXZpZ2F0aW9uOiA2MDAwLFxuICBtZW51OiAyMDAwLFxuICBoZWFkZXI6IDEwMDAsXG4gIGZseW91dDogMTAwMCxcbiAgbWFza0JlbG93SGVhZGVyOiAxMDAwLFxuICBjb250ZW50OiAwXG59OyIsICJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdXRpbHMnO1xuLy8gVHlwb2dyYXBoaWMgc2NhbGUgLS0gbG9vc2VseSBiYXNlZCBvbiBNYWpvciBUaGlyZCAoMS4yNTApXG5leHBvcnQgdmFyIGZvbnRTY2FsZSA9IHtcbiAgeHh4czogMC41NjI1LFxuICB4eHM6IDAuNjg3NSxcbiAgeHM6IDAuNzUsXG4gIHM6IDAuODc1LFxuICBtOiAxLFxuICBsOiAxLjM3NSxcbiAgeGw6IDEuNjg3NSxcbiAgeHhsOiAyLjEyNVxufTsgLy8gRmFtaWxpZXMgJiBiYXNlIGZvbnQgc2V0dGluZ3NcblxuZXhwb3J0IHZhciBmb250QmFzZSA9IHtcbiAgZmFtaWx5OiBcIidJbnRlcicsIEJsaW5rTWFjU3lzdGVtRm9udCwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxuICBmYW1pbHlDb2RlOiBcIidSb2JvdG8gTW9ubycsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2VcIixcbiAgZmFtaWx5U2VyaWY6ICdHZW9yZ2lhLCBUaW1lcywgVGltZXMgTmV3IFJvbWFuLCBzZXJpZicsXG4gIC8vIENhcmVmdWwgdXNpbmcgbGlnYXR1cmVzLiBDb2RlIGVkaXRvcnMgbGlrZSBBQ0Ugd2lsbCBvZnRlbiBlcnJvciBiZWNhdXNlIG9mIHdpZHRoIGNhbGN1bGF0aW9uc1xuICBmZWF0dXJlU2V0dGluZ3M6IFwiJ2NhbHQnIDEsICdrZXJuJyAxLCAnbGlnYScgMVwiLFxuICBiYXNlbGluZTogY29tcHV0ZWQoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAxKSxcbiAgICAgICAgYmFzZSA9IF9yZWYyWzBdO1xuXG4gICAgcmV0dXJuIGJhc2UgLyA0O1xuICB9LCBbJ2Jhc2UnXSksXG4gIGxpbmVIZWlnaHRNdWx0aXBsaWVyOiAxLjVcbn07XG5leHBvcnQgdmFyIGZvbnRXZWlnaHQgPSB7XG4gIGxpZ2h0OiAzMDAsXG4gIHJlZ3VsYXI6IDQwMCxcbiAgbWVkaXVtOiA1MDAsXG4gIHNlbWlCb2xkOiA2MDAsXG4gIGJvbGQ6IDcwMFxufTtcbmV4cG9ydCB2YXIgZm9udCA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZm9udEJhc2UpLCB7fSwge1xuICBzY2FsZTogZm9udFNjYWxlLFxuICB3ZWlnaHQ6IGZvbnRXZWlnaHQsXG4gIGJvZHk6IHtcbiAgICBzY2FsZTogJ3MnLFxuICAgIHdlaWdodDogJ3JlZ3VsYXInXG4gIH0sXG4gIHRpdGxlOiB7XG4gICAgd2VpZ2h0OiAnYm9sZCdcbiAgfVxufSk7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogTk9URTogVGhlc2Ugd2VyZSBxdWljayBjb252ZXJzaW9ucyBvZiB0aGVpciBTYXNzIGNvdW50ZXJwYXJ0cy5cbiAqICAgICAgIFRoZSBjb21tZW50ZWQgb3V0IGtleXMgaGF2ZSBub3QgYmVlbiBlc3RhYmxpc2hlZCBhcyBuZWNlc3NhcnkgeWV0LlxuICovXG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IHNpemVUb1BpeGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vZ2xvYmFsX3N0eWxpbmcvZnVuY3Rpb25zL3NpemUnO1xuZXhwb3J0IHZhciBmb2N1cyA9IHtcbiAgY29sb3I6ICdjdXJyZW50Q29sb3InLFxuICB3aWR0aDogY29tcHV0ZWQoc2l6ZVRvUGl4ZWwoMC4xMjUpKSAvLyB0cmFuc3BhcmVuY3k6IHsgTElHSFQ6IDAuOSwgREFSSzogMC43IH0sXG4gIC8vIGJhY2tncm91bmRDb2xvcjogY29tcHV0ZWQoKHsgY29sb3JzLCBmb2N1cyB9KSA9PlxuICAvLyAgIHRyYW5zcGFyZW50aXplKGNvbG9ycy5wcmltYXJ5LCBmb2N1cyEudHJhbnNwYXJlbmN5KVxuICAvLyApLFxuICAvLyBPdXRsaW5lXG4gIC8vIG91dGxpbmU6IHtcbiAgLy8gICBvdXRsaW5lOiBjb21wdXRlZCgoeyBmb2N1cyB9KSA9PiBgJHtmb2N1cyEud2lkdGh9IHNvbGlkICR7Zm9jdXMhLmNvbG9yfWApLFxuICAvLyB9LFxuXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgYnVpbGRUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL3V0aWxzJztcbmltcG9ydCB7IGNvbG9ycyB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19jb2xvcnMnO1xuaW1wb3J0IHsgYW5pbWF0aW9uIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2FuaW1hdGlvbic7XG5pbXBvcnQgeyBicmVha3BvaW50IH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX2JyZWFrcG9pbnQnO1xuaW1wb3J0IHsgYmFzZSwgc2l6ZSB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19zaXplJztcbmltcG9ydCB7IGJvcmRlciB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19ib3JkZXJzJztcbmltcG9ydCB7IGxldmVscyB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL19sZXZlbHMnO1xuaW1wb3J0IHsgZm9udCB9IGZyb20gJy4vZ2xvYmFsX3N0eWxpbmcvdmFyaWFibGVzL190eXBvZ3JhcGh5JztcbmltcG9ydCB7IGZvY3VzIH0gZnJvbSAnLi9nbG9iYWxfc3R5bGluZy92YXJpYWJsZXMvX3N0YXRlcyc7XG5leHBvcnQgdmFyIEFNU1RFUkRBTV9OQU1FX0tFWSA9ICdFVUlfVEhFTUVfQU1TVEVSREFNJztcbmV4cG9ydCB2YXIgZXVpVGhlbWVBbXN0ZXJkYW0gPSB7XG4gIGNvbG9yczogY29sb3JzLFxuICBiYXNlOiBiYXNlLFxuICBzaXplOiBzaXplLFxuICBib3JkZXI6IGJvcmRlcixcbiAgZm9udDogZm9udCxcbiAgYW5pbWF0aW9uOiBhbmltYXRpb24sXG4gIGJyZWFrcG9pbnQ6IGJyZWFrcG9pbnQsXG4gIGxldmVsczogbGV2ZWxzLFxuICBmb2N1czogZm9jdXNcbn07XG5leHBvcnQgdmFyIEV1aVRoZW1lQW1zdGVyZGFtID0gYnVpbGRUaGVtZShldWlUaGVtZUFtc3RlcmRhbSwgQU1TVEVSREFNX05BTUVfS0VZKTsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpVGhlbWVDb250ZXh0LCBFdWlNb2RpZmljYXRpb25zQ29udGV4dCwgRXVpQ29sb3JNb2RlQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciB1c2VFdWlUaGVtZSA9IGZ1bmN0aW9uIHVzZUV1aVRoZW1lKCkge1xuICB2YXIgdGhlbWUgPSB1c2VDb250ZXh0KEV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBjb2xvck1vZGUgPSB1c2VDb250ZXh0KEV1aUNvbG9yTW9kZUNvbnRleHQpO1xuICB2YXIgbW9kaWZpY2F0aW9ucyA9IHVzZUNvbnRleHQoRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQpO1xuICByZXR1cm4ge1xuICAgIGV1aVRoZW1lOiB0aGVtZSxcbiAgICBjb2xvck1vZGU6IGNvbG9yTW9kZSxcbiAgICBtb2RpZmljYXRpb25zOiBtb2RpZmljYXRpb25zXG4gIH07XG59O1xuLy8gUHJvdmlkZSB0aGUgY29tcG9uZW50IHByb3BzIGludGVyZmFjZSBhcyB0aGUgZ2VuZXJpYyB0byBhbGxvdyB0aGUgZG9jcyBwcm9wcyB0YWJsZSB0byBwb3B1bGF0ZS5cbi8vIGUuZy4sIGBjb25zdCBFdWlDb21wb25lbnQgPSB3aXRoRXVpVGhlbWU8RXVpQ29tcG9uZW50UHJvcHM+KF9FdWlDb21wb25lbnQpYFxuZXhwb3J0IHZhciB3aXRoRXVpVGhlbWUgPSBmdW5jdGlvbiB3aXRoRXVpVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnRXaXRoVGhlbWUnO1xuXG4gIHZhciBSZW5kZXIgPSBmdW5jdGlvbiBSZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciBfdXNlRXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpLFxuICAgICAgICBldWlUaGVtZSA9IF91c2VFdWlUaGVtZS5ldWlUaGVtZSxcbiAgICAgICAgY29sb3JNb2RlID0gX3VzZUV1aVRoZW1lLmNvbG9yTW9kZSxcbiAgICAgICAgbW9kaWZpY2F0aW9ucyA9IF91c2VFdWlUaGVtZS5tb2RpZmljYXRpb25zO1xuXG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZToge1xuICAgICAgICBldWlUaGVtZTogZXVpVGhlbWUsXG4gICAgICAgIGNvbG9yTW9kZTogY29sb3JNb2RlLFxuICAgICAgICBtb2RpZmljYXRpb25zOiBtb2RpZmljYXRpb25zXG4gICAgICB9LFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBwcm9wcykpO1xuICB9O1xuXG4gIHZhciBXaXRoRXVpVGhlbWUgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihSZW5kZXIpO1xuICBXaXRoRXVpVGhlbWUuZGlzcGxheU5hbWUgPSBjb21wb25lbnROYW1lO1xuICByZXR1cm4gV2l0aEV1aVRoZW1lO1xufTsiLCAiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCB7IEV1aVN5c3RlbUNvbnRleHQsIEV1aVRoZW1lQ29udGV4dCwgRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQsIEV1aUNvbG9yTW9kZUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgYnVpbGRUaGVtZSwgZ2V0Q29sb3JNb2RlLCBnZXRDb21wdXRlZCwgbWVyZ2VEZWVwIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUaGVtZVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpVGhlbWVQcm92aWRlcihfcmVmKSB7XG4gIHZhciBfc3lzdGVtID0gX3JlZi50aGVtZSxcbiAgICAgIF9jb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZSxcbiAgICAgIF9tb2RpZmljYXRpb25zID0gX3JlZi5tb2RpZnksXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBwYXJlbnRTeXN0ZW0gPSB1c2VDb250ZXh0KEV1aVN5c3RlbUNvbnRleHQpO1xuICB2YXIgcGFyZW50TW9kaWZpY2F0aW9ucyA9IHVzZUNvbnRleHQoRXVpTW9kaWZpY2F0aW9uc0NvbnRleHQpO1xuICB2YXIgcGFyZW50Q29sb3JNb2RlID0gdXNlQ29udGV4dChFdWlDb2xvck1vZGVDb250ZXh0KTtcbiAgdmFyIHBhcmVudFRoZW1lID0gdXNlQ29udGV4dChFdWlUaGVtZUNvbnRleHQpO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShfc3lzdGVtIHx8IHBhcmVudFN5c3RlbSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHN5c3RlbSA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRTeXN0ZW0gPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciBwcmV2U3lzdGVtS2V5ID0gdXNlUmVmKHN5c3RlbS5rZXkpO1xuXG4gIHZhciBfdXNlU3RhdGUzID0gdXNlU3RhdGUobWVyZ2VEZWVwKHBhcmVudE1vZGlmaWNhdGlvbnMsIF9tb2RpZmljYXRpb25zKSksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBtb2RpZmljYXRpb25zID0gX3VzZVN0YXRlNFswXSxcbiAgICAgIHNldE1vZGlmaWNhdGlvbnMgPSBfdXNlU3RhdGU0WzFdO1xuXG4gIHZhciBwcmV2TW9kaWZpY2F0aW9ucyA9IHVzZVJlZihtb2RpZmljYXRpb25zKTtcblxuICB2YXIgX3VzZVN0YXRlNSA9IHVzZVN0YXRlKGdldENvbG9yTW9kZShfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGUpKSxcbiAgICAgIF91c2VTdGF0ZTYgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGU1LCAyKSxcbiAgICAgIGNvbG9yTW9kZSA9IF91c2VTdGF0ZTZbMF0sXG4gICAgICBzZXRDb2xvck1vZGUgPSBfdXNlU3RhdGU2WzFdO1xuXG4gIHZhciBwcmV2Q29sb3JNb2RlID0gdXNlUmVmKGNvbG9yTW9kZSk7XG4gIHZhciBpc1BhcmVudFRoZW1lID0gdXNlUmVmKHByZXZTeXN0ZW1LZXkuY3VycmVudCA9PT0gcGFyZW50U3lzdGVtLmtleSAmJiBjb2xvck1vZGUgPT09IHBhcmVudENvbG9yTW9kZSAmJiBpc0VxdWFsKHBhcmVudE1vZGlmaWNhdGlvbnMsIG1vZGlmaWNhdGlvbnMpKTtcblxuICB2YXIgX3VzZVN0YXRlNyA9IHVzZVN0YXRlKGlzUGFyZW50VGhlbWUuY3VycmVudCAmJiBPYmplY3Qua2V5cyhwYXJlbnRUaGVtZSkubGVuZ3RoID8gcGFyZW50VGhlbWUgOiBnZXRDb21wdXRlZChzeXN0ZW0sIGJ1aWxkVGhlbWUobW9kaWZpY2F0aW9ucywgXCJfXCIuY29uY2F0KHN5c3RlbS5rZXkpKSwgY29sb3JNb2RlKSksXG4gICAgICBfdXNlU3RhdGU4ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlNywgMiksXG4gICAgICB0aGVtZSA9IF91c2VTdGF0ZThbMF0sXG4gICAgICBzZXRUaGVtZSA9IF91c2VTdGF0ZThbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3U3lzdGVtID0gX3N5c3RlbSB8fCBwYXJlbnRTeXN0ZW07XG5cbiAgICBpZiAocHJldlN5c3RlbUtleS5jdXJyZW50ICE9PSBuZXdTeXN0ZW0ua2V5KSB7XG4gICAgICBzZXRTeXN0ZW0obmV3U3lzdGVtKTtcbiAgICAgIHByZXZTeXN0ZW1LZXkuY3VycmVudCA9IG5ld1N5c3RlbS5rZXk7XG4gICAgICBpc1BhcmVudFRoZW1lLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtfc3lzdGVtLCBwYXJlbnRTeXN0ZW1dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbmV3TW9kaWZpY2F0aW9ucyA9IG1lcmdlRGVlcChwYXJlbnRNb2RpZmljYXRpb25zLCBfbW9kaWZpY2F0aW9ucyk7XG5cbiAgICBpZiAoIWlzRXF1YWwocHJldk1vZGlmaWNhdGlvbnMuY3VycmVudCwgbmV3TW9kaWZpY2F0aW9ucykpIHtcbiAgICAgIHNldE1vZGlmaWNhdGlvbnMobmV3TW9kaWZpY2F0aW9ucyk7XG4gICAgICBwcmV2TW9kaWZpY2F0aW9ucy5jdXJyZW50ID0gbmV3TW9kaWZpY2F0aW9ucztcbiAgICAgIGlzUGFyZW50VGhlbWUuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSwgW19tb2RpZmljYXRpb25zLCBwYXJlbnRNb2RpZmljYXRpb25zXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5ld0NvbG9yTW9kZSA9IGdldENvbG9yTW9kZShfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGUpO1xuXG4gICAgaWYgKCFpc0VxdWFsKG5ld0NvbG9yTW9kZSwgcHJldkNvbG9yTW9kZS5jdXJyZW50KSkge1xuICAgICAgc2V0Q29sb3JNb2RlKG5ld0NvbG9yTW9kZSk7XG4gICAgICBwcmV2Q29sb3JNb2RlLmN1cnJlbnQgPSBuZXdDb2xvck1vZGU7XG4gICAgICBpc1BhcmVudFRoZW1lLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIFtfY29sb3JNb2RlLCBwYXJlbnRDb2xvck1vZGVdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWlzUGFyZW50VGhlbWUuY3VycmVudCkge1xuICAgICAgc2V0VGhlbWUoZ2V0Q29tcHV0ZWQoc3lzdGVtLCBidWlsZFRoZW1lKG1vZGlmaWNhdGlvbnMsIFwiX1wiLmNvbmNhdChzeXN0ZW0ua2V5KSksIGNvbG9yTW9kZSkpO1xuICAgIH1cbiAgfSwgW2NvbG9yTW9kZSwgc3lzdGVtLCBtb2RpZmljYXRpb25zXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbG9yTW9kZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29sb3JNb2RlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpU3lzdGVtQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBzeXN0ZW1cbiAgfSwgX19fRW1vdGlvbkpTWChFdWlNb2RpZmljYXRpb25zQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBtb2RpZmljYXRpb25zXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIGNoaWxkcmVuKSkpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIHRocm90dGxlID0gZnVuY3Rpb24gdGhyb3R0bGUoZm4pIHtcbiAgdmFyIHdhaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDUwO1xuICB2YXIgdGltZSA9IERhdGUubm93KCk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRpbWUgKyB3YWl0IC0gRGF0ZS5ub3coKSA8IDApIHtcbiAgICAgIGZuLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgIHRpbWUgPSBEYXRlLm5vdygpO1xuICAgIH1cbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0IH0gZnJvbSAnLi9jdXJyZW50X2JyZWFrcG9pbnQnO1xuLyoqXG4gKiBIb29rIHV0aWwgLyBzeW50YWN0aWNhbCBzdWdhciBmb3IgdXNlQ29udGV4dCgpXG4gKlxuICogVGhpcyBob29rIGlzIGluIGl0cyBvd24gc2VwYXJhdGUgZmlsZSB0byBtYWtlIG1vY2tpbmcgaXRcbiAqIGFzIGEgdGVzdGVudiBlYXN5IGZvciBKZXN0IHVuaXQgdGVzdHNcbiAqL1xuXG5leHBvcnQgdmFyIHVzZUN1cnJlbnRFdWlCcmVha3BvaW50ID0gZnVuY3Rpb24gdXNlQ3VycmVudEV1aUJyZWFrcG9pbnQoKSB7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUNvbnRleHQoQ3VycmVudEV1aUJyZWFrcG9pbnRDb250ZXh0KTtcbiAgcmV0dXJuIGN1cnJlbnRCcmVha3BvaW50O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50IH0gZnJvbSAnLi9jdXJyZW50X2JyZWFrcG9pbnRfaG9vayc7XG4vKipcbiAqIEdpdmVuIHRoZSBjdXJyZW50IHdpbmRvdy5pbm5lcldpZHRoIGFuZCBhbiBhcnJheSBvZiBicmVha3BvaW50IGtleXMsXG4gKiB0aGlzIGhvb2sgc3RvcmVzIHN0YXRlIGFuZCByZXR1cm5zIHRydWUgb3IgZmFsc2UgaWYgdGhlIHdpbmRvdy5pbm5lcldpZHRoXG4gKiBmYWxscyB3aXRoaW4gYW55IG9mIHRoZSBuYW1lZCBicmVha3BvaW50cy5cbiAqXG4gKiBAcGFyYW0ge19FdWlUaGVtZUJyZWFrcG9pbnRbXX0gc2l6ZXMgQW4gYXJyYXkgb2YgbmFtZWQgRVVJIGJyZWFrcG9pbnRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVzcG9uc2l2ZSBTb21lIGNvbXBvbmVudHMgaGF2ZSB0aGUgb3B0aW9uIHRvIHR1cm4gb2ZmIHJlc3BvbnNpdmUgYmVoYXZpb3IuXG4gKiAgIFNpbmNlIGhvb2tzIGNhbid0IGJlIGNhbGxlZCBjb25kaXRpb25hbGx5LCBpdCdzIGVhc2llciB0byBwYXNzIHRoZSBjb25kaXRpb24gaW50byB0aGUgaG9va1xuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGN1cnJlbnQgYnJlYWtwb2ludCBuYW1lIGlzIGluY2x1ZGVkIGluIGBzaXplc2BcbiAqL1xuXG5leHBvcnQgdmFyIHVzZUlzV2l0aGluQnJlYWtwb2ludHMgPSBmdW5jdGlvbiB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKHNpemVzKSB7XG4gIHZhciBpc1Jlc3BvbnNpdmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBjdXJyZW50QnJlYWtwb2ludCA9IHVzZUN1cnJlbnRFdWlCcmVha3BvaW50KCk7XG4gIHJldHVybiBjdXJyZW50QnJlYWtwb2ludCAmJiBpc1Jlc3BvbnNpdmUgPyBzaXplcy5pbmNsdWRlcyhjdXJyZW50QnJlYWtwb2ludCkgOiBmYWxzZTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogQSBET00gbm9kZSwgYSBzZWxlY3RvciBzdHJpbmcgKHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvXG4gKiBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigpYCB0byBmaW5kIHRoZSBET00gbm9kZSksIG9yIGEgZnVuY3Rpb24gdGhhdFxuICogcmV0dXJucyBhIERPTSBub2RlLlxuICovXG5leHBvcnQgdmFyIGZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmID0gZnVuY3Rpb24gZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYoZWxlbWVudFRhcmdldCkge1xuICB2YXIgbm9kZSA9IGVsZW1lbnRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGVsZW1lbnRUYXJnZXQgOiBudWxsO1xuXG4gIGlmICh0eXBlb2YgZWxlbWVudFRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50VGFyZ2V0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudFRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG5vZGUgPSBlbGVtZW50VGFyZ2V0KCk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5leHBvcnQgdmFyIGFsd2F5cyA9IGZ1bmN0aW9uIGFsd2F5cyhfdmFsdWUpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xuZXhwb3J0IHZhciBuZXZlciA9IGZ1bmN0aW9uIG5ldmVyKF92YWx1ZSkge1xuICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IHZhciBpc1VuZGVmaW5lZCA9IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufTtcbmV4cG9ydCB2YXIgaXNOdWxsID0gZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn07XG5leHBvcnQgdmFyIGlzTmlsID0gZnVuY3Rpb24gaXNOaWwodmFsdWUpIHtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSB8fCBpc051bGwodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNNb21lbnQgPSBmdW5jdGlvbiBpc01vbWVudCh2YWx1ZSkge1xuICByZXR1cm4gbW9tZW50LmlzTW9tZW50KHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzRGF0ZSA9IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gbW9tZW50LmlzRGF0ZSh2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0RhdGVMaWtlID0gZnVuY3Rpb24gaXNEYXRlTGlrZSh2YWx1ZSkge1xuICByZXR1cm4gaXNNb21lbnQodmFsdWUpIHx8IGlzRGF0ZSh2YWx1ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IF9pc0Z1bmN0aW9uIGZyb20gJ2xvZGFzaC9pc0Z1bmN0aW9uJztcbmltcG9ydCBfaXNBcnJheSBmcm9tICdsb2Rhc2gvaXNBcnJheSc7XG5pbXBvcnQgX2lzU3RyaW5nIGZyb20gJ2xvZGFzaC9pc1N0cmluZyc7XG5pbXBvcnQgX2lzQm9vbGVhbiBmcm9tICdsb2Rhc2gvaXNCb29sZWFuJztcbmltcG9ydCBfaXNOdW1iZXIgZnJvbSAnbG9kYXNoL2lzTnVtYmVyJztcbmltcG9ydCBfaXNOYU4gZnJvbSAnbG9kYXNoL2lzTmFOJztcbmltcG9ydCBfaXNPYmplY3QgZnJvbSAnbG9kYXNoL2lzT2JqZWN0JzsgLy8gd3JhcCB0aGUgbG9kYXNoIGZ1bmN0aW9ucyB0byBhdm9pZCBoYXZpbmcgbG9kYXNoJ3MgVFMgdHlwZSBkZWZpbml0aW9uIGZyb20gYmVpbmdcbi8vIGV4cG9ydGVkLCB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCB0aGUgbG9kYXNoIG5hbWVzcGFjZSBpZiBvdGhlciB2ZXJzaW9ucyBhcmUgdXNlZFxuXG5leHBvcnQgdmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBfaXNGdW5jdGlvbih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gX2lzQXJyYXkodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNTdHJpbmcgPSBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gX2lzU3RyaW5nKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzQm9vbGVhbiA9IGZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gX2lzQm9vbGVhbih2YWx1ZSk7XG59O1xuZXhwb3J0IHZhciBpc051bWJlciA9IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiBfaXNOdW1iZXIodmFsdWUpO1xufTtcbmV4cG9ydCB2YXIgaXNOYU4gPSBmdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICByZXR1cm4gX2lzTmFOKHZhbHVlKTtcbn07XG5leHBvcnQgdmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIF9pc09iamVjdCh2YWx1ZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuZXhwb3J0IHZhciBmb3JtYXRCb29sZWFuID0gZnVuY3Rpb24gZm9ybWF0Qm9vbGVhbih2YWx1ZSkge1xuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfcmVmJHllcyA9IF9yZWYueWVzLFxuICAgICAgeWVzID0gX3JlZiR5ZXMgPT09IHZvaWQgMCA/ICdZZXMnIDogX3JlZiR5ZXMsXG4gICAgICBfcmVmJG5vID0gX3JlZi5ubyxcbiAgICAgIG5vID0gX3JlZiRubyA9PT0gdm9pZCAwID8gJ05vJyA6IF9yZWYkbm8sXG4gICAgICBfcmVmJG5pbCA9IF9yZWYubmlsLFxuICAgICAgbmlsID0gX3JlZiRuaWwgPT09IHZvaWQgMCA/ICcnIDogX3JlZiRuaWw7XG5cbiAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgIHJldHVybiBuaWw7XG4gIH1cblxuICByZXR1cm4gdmFsdWUgPyB5ZXMgOiBubztcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgaXNOaWwsIGlzRnVuY3Rpb24sIGlzU3RyaW5nIH0gZnJvbSAnLi4vcHJlZGljYXRlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxudmFyIGNhbGVuZGFyID0gZnVuY3Rpb24gY2FsZW5kYXIodmFsdWUpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgcmVmVGltZSA9IG9wdGlvbnMucmVmVGltZTtcbiAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuY2FsZW5kYXIocmVmVGltZSwgb3B0aW9ucyk7XG59O1xuXG5leHBvcnQgdmFyIGRhdGVGb3JtYXRBbGlhc2VzID0ge1xuICBkYXRlOiAnRCBNTU0gWVlZWScsXG4gIGxvbmdEYXRlOiAnREQgTU1NTSBZWVlZJyxcbiAgc2hvcnREYXRlOiAnRCBNTU0gWVknLFxuICBkYXRlVGltZTogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICBsb25nRGF0ZVRpbWU6ICdERCBNTU1NIFlZWVkgSEg6bW06c3MnLFxuICBzaG9ydERhdGVUaW1lOiAnRCBNTU0gWVkgSEg6bW0nLFxuICBkb2JTaG9ydDogJ0RvIE1NTSBZWScsXG4gIGRvYkxvbmc6ICdEbyBNTU1NIFlZWVknLFxuICBpc284NjAxOiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaJyxcbiAgY2FsZW5kYXI6IGNhbGVuZGFyLFxuICBjYWxlbmRhckRhdGVUaW1lOiBmdW5jdGlvbiBjYWxlbmRhckRhdGVUaW1lKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNhbGVuZGFyKHZhbHVlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIEg6bW1BJyxcbiAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIEg6bW1BJyxcbiAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIEg6bW1BJyxcbiAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBIOm1tQScsXG4gICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gSDptbUEnLFxuICAgICAgc2FtZUVsc2U6ICdEbyBNTU0gWVlZWSBbYXRdIEg6bW1BJ1xuICAgIH0sIG9wdGlvbnMpKTtcbiAgfSxcbiAgY2FsZW5kYXJEYXRlOiBmdW5jdGlvbiBjYWxlbmRhckRhdGUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY2FsZW5kYXIodmFsdWUsIF9vYmplY3RTcHJlYWQoe1xuICAgICAgc2FtZURheTogJ1tUb2RheV0nLFxuICAgICAgbmV4dERheTogJ1tUb21vcnJvd10nLFxuICAgICAgbmV4dFdlZWs6ICdkZGRkJyxcbiAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5XScsXG4gICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkJyxcbiAgICAgIHNhbWVFbHNlOiAnRG8gTU1NIFlZWVknXG4gICAgfSwgb3B0aW9ucykpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZ0FEYXRlRm9ybWF0KHgpIHtcbiAgcmV0dXJuIGRhdGVGb3JtYXRBbGlhc2VzLmhhc093blByb3BlcnR5KHgpO1xufVxuXG5mdW5jdGlvbiBpbnN0YW5jZU9mRm9ybWF0RGF0ZUNvbmZpZyh4KSB7XG4gIHJldHVybiBfdHlwZW9mKHgpID09PSAnb2JqZWN0JyAmJiAoeC5oYXNPd25Qcm9wZXJ0eSgnZm9ybWF0JykgfHwgeC5oYXNPd25Qcm9wZXJ0eSgnbmlsJykgfHwgeC5oYXNPd25Qcm9wZXJ0eSgnb3B0aW9ucycpKTtcbn1cblxuZXhwb3J0IHZhciBmb3JtYXREYXRlID0gZnVuY3Rpb24gZm9ybWF0RGF0ZSh2YWx1ZSkge1xuICB2YXIgZGF0ZUZvcm1hdEtleU9yQ29uZmlnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnZGF0ZVRpbWUnO1xuXG4gIGlmIChpc1N0cmluZyhkYXRlRm9ybWF0S2V5T3JDb25maWcpKSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHZhciBkYXRlRm9ybWF0U3RyT3JGdW5jID0gaXNTdHJpbmdBRGF0ZUZvcm1hdChkYXRlRm9ybWF0S2V5T3JDb25maWcpID8gZGF0ZUZvcm1hdEFsaWFzZXNbZGF0ZUZvcm1hdEtleU9yQ29uZmlnXSA6IGRhdGVGb3JtYXRLZXlPckNvbmZpZztcblxuICAgIGlmIChpc0Z1bmN0aW9uKGRhdGVGb3JtYXRTdHJPckZ1bmMpKSB7XG4gICAgICByZXR1cm4gZGF0ZUZvcm1hdFN0ck9yRnVuYyh2YWx1ZSwge30pO1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhkYXRlRm9ybWF0U3RyT3JGdW5jKSkge1xuICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSkuZm9ybWF0KGRhdGVGb3JtYXRTdHJPckZ1bmMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbnN0YW5jZU9mRm9ybWF0RGF0ZUNvbmZpZyhkYXRlRm9ybWF0S2V5T3JDb25maWcpKSB7XG4gICAgdmFyIF9kYXRlRm9ybWF0S2V5T3JDb25maSA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5mb3JtYXQsXG4gICAgICAgIGZvcm1hdCA9IF9kYXRlRm9ybWF0S2V5T3JDb25maSA9PT0gdm9pZCAwID8gJ2RhdGVUaW1lJyA6IF9kYXRlRm9ybWF0S2V5T3JDb25maSxcbiAgICAgICAgX2RhdGVGb3JtYXRLZXlPckNvbmZpMiA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5uaWwsXG4gICAgICAgIG5pbCA9IF9kYXRlRm9ybWF0S2V5T3JDb25maTIgPT09IHZvaWQgMCA/ICcnIDogX2RhdGVGb3JtYXRLZXlPckNvbmZpMixcbiAgICAgICAgb3B0aW9ucyA9IGRhdGVGb3JtYXRLZXlPckNvbmZpZy5vcHRpb25zO1xuICAgIHZhciBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdEFsaWFzZXNbZm9ybWF0XSB8fCBmb3JtYXQ7XG5cbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbmlsO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGRhdGVGb3JtYXQpKSB7XG4gICAgICByZXR1cm4gZGF0ZUZvcm1hdCh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGRhdGVGb3JtYXQpKSB7XG4gICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGZvcm1hdCB2YWx1ZSB1c2luZyBkYXRlRm9ybWF0S2V5T3JDb25maWc6IFwiLmNvbmNhdChkYXRlRm9ybWF0S2V5T3JDb25maWcpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgbnVtZXJhbCBmcm9tICdudW1lcmFsJztcbmltcG9ydCB7IGlzTmlsLCBpc1N0cmluZyB9IGZyb20gJy4uL3ByZWRpY2F0ZSc7XG52YXIgbnVtYmVyRm9ybWF0QWxpYXNlcyA9IHtcbiAgZGVjaW1hbDE6ICcwLDAuMCcsXG4gIGRlY2ltYWwyOiAnMCwwLjAwJyxcbiAgZGVjaW1hbDM6ICcwLDAuMDAwJyxcbiAgb3JkaW5hbDogJzBvJyxcbiAgaW50ZWdlcjogJzAsMCdcbn07XG5leHBvcnQgdmFyIGZvcm1hdE51bWJlciA9IGZ1bmN0aW9uIGZvcm1hdE51bWJlcih2YWx1ZSkge1xuICB2YXIgbnVtYmVyRm9ybWF0T3JDb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgZm9ybWF0O1xuICB2YXIgbmlsID0gJyc7XG4gIHZhciByb3VuZDtcblxuICBpZiAoaXNTdHJpbmcobnVtYmVyRm9ybWF0T3JDb25maWcpKSB7XG4gICAgZm9ybWF0ID0gbnVtYmVyRm9ybWF0T3JDb25maWc7XG4gIH0gZWxzZSB7XG4gICAgZm9ybWF0ID0gbnVtYmVyRm9ybWF0T3JDb25maWcuZm9ybWF0O1xuICAgIG5pbCA9IG51bWJlckZvcm1hdE9yQ29uZmlnLm5pbCB8fCAnJztcbiAgICByb3VuZCA9IG51bWJlckZvcm1hdE9yQ29uZmlnLnJvdW5kO1xuICB9XG5cbiAgaWYgKCFmb3JtYXQpIHtcbiAgICByZXR1cm4gaXNOaWwodmFsdWUpID8gbmlsIDogdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHZhciByb3VuZGluZ0Z1bmMgPSByb3VuZCA/IE1hdGgucm91bmQgOiBNYXRoLmZsb29yO1xuICB2YXIgbnVtYmVyRm9ybWF0ID0gbnVtYmVyRm9ybWF0QWxpYXNlc1tmb3JtYXRdIHx8IGZvcm1hdDtcbiAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/IG5pbCA6IG51bWVyYWwodmFsdWUpLmZvcm1hdChudW1iZXJGb3JtYXQsIHJvdW5kaW5nRnVuYyk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuZXhwb3J0IHZhciBmb3JtYXRUZXh0ID0gZnVuY3Rpb24gZm9ybWF0VGV4dCh2YWx1ZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgIG5pbDogJydcbiAgfTtcbiAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/IG9wdGlvbnMubmlsIDogdmFsdWUudG9TdHJpbmcoKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBpc05pbCwgaXNBcnJheSwgaXNCb29sZWFuLCBpc0RhdGUsIGlzTmFOLCBpc051bWJlciwgaXNTdHJpbmcgfSBmcm9tICcuLi9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgZm9ybWF0Qm9vbGVhbiB9IGZyb20gJy4vZm9ybWF0X2Jvb2xlYW4nO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJy4vZm9ybWF0X2RhdGUnO1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSAnLi9mb3JtYXRfbnVtYmVyJztcbmltcG9ydCB7IGZvcm1hdFRleHQgfSBmcm9tICcuL2Zvcm1hdF90ZXh0JztcbmV4cG9ydCB2YXIgZm9ybWF0QXV0byA9IGZ1bmN0aW9uIGZvcm1hdEF1dG8odmFsdWUpIHtcbiAgaWYgKGlzTmlsKHZhbHVlKSB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdFRleHQodmFsdWUpO1xuICB9XG5cbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSk7XG4gIH1cblxuICBpZiAoaXNCb29sZWFuKHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXRCb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChpc051bWJlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEF1dG8oaXRlbSk7XG4gICAgfSkuam9pbignLCAnKSA6IGZvcm1hdEF1dG8odmFsdWUpO1xuICB9IC8vIFRPRE8gbm90IHN1cmUgaWYgd2Ugd2FudCB0aGF0Li4gdGhlICgrKSBpcyB0aGF0IHdlIHNob3cgc29tZXRoaW5nLCB0aGUgKC0pIGlzIHRoYXQgaXQncyB2ZXJ5IHRlY2huaWNhbFxuXG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG52YXIgaXNFbGFzdGljSG9zdCA9IC9eKFthLXpBLVowLTldK1xcLikqZWxhc3RpY1xcLmNvJC87IC8vIEluIG9yZGVyIGZvciB0aGUgZG9tYWluIHRvIGJlIHNlY3VyZSBpdCBuZWVkcyB0byBiZSBpbiBhIHBhcnNhYmxlIGZvcm1hdCxcbi8vIHdpdGggdGhlIHByb3RvY29sIG9mIGh0dHA6IG9yIGh0dHBzOiBhbmQgdGhlIGhvc3QgbWF0Y2hpbmcgZWxhc3RpYy5jbyBvclxuLy8gb2Ygb25lIGl0cyBzdWJkb21haW5zXG5cbmV4cG9ydCB2YXIgaXNEb21haW5TZWN1cmUgPSBmdW5jdGlvbiBpc0RvbWFpblNlY3VyZSgpIHtcbiAgdmFyIHVybCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XG5cbiAgdHJ5IHtcbiAgICB2YXIgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIHZhciBwcm90b2NvbE1hdGNoZXMgPSBwYXJzZWQucHJvdG9jb2wgPT09ICdodHRwOicgfHwgcGFyc2VkLnByb3RvY29sID09PSAnaHR0cHM6JztcbiAgICB2YXIgZG9tYWluTWF0Y2hlcyA9ICEhcGFyc2VkLmhvc3QubWF0Y2goaXNFbGFzdGljSG9zdCk7XG4gICAgcmV0dXJuIHByb3RvY29sTWF0Y2hlcyAmJiBkb21haW5NYXRjaGVzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIFNlY3VyZXMgb3V0Ym91bmQgbGlua3MuIEZvciBtb3JlIGluZm86XG4gKiBodHRwczovL3d3dy5qaXRiaXQuY29tL2FsZXhibG9nLzI1Ni10YXJnZXRibGFuay0tLXRoZS1tb3N0LXVuZGVyZXN0aW1hdGVkLXZ1bG5lcmFiaWxpdHktZXZlci9cbiAqL1xuaW1wb3J0IHsgaXNEb21haW5TZWN1cmUgfSBmcm9tICcuLi91cmwnO1xuZXhwb3J0IHZhciBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgPSBmdW5jdGlvbiBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoX3JlZikge1xuICB2YXIgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIF9yZWYkdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICB0YXJnZXQgPSBfcmVmJHRhcmdldCA9PT0gdm9pZCAwID8gJycgOiBfcmVmJHRhcmdldCxcbiAgICAgIHJlbCA9IF9yZWYucmVsO1xuICB2YXIgaXNFbGFzdGljSHJlZiA9ICEhaHJlZiAmJiBpc0RvbWFpblNlY3VyZShocmVmKTtcbiAgdmFyIHJlbFBhcnRzID0gISFyZWwgPyByZWwuc3BsaXQoJyAnKS5maWx0ZXIoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gISFwYXJ0Lmxlbmd0aCAmJiBwYXJ0ICE9PSAnbm9yZWZlcnJlcic7XG4gIH0pIDogW107XG5cbiAgaWYgKCFpc0VsYXN0aWNIcmVmKSB7XG4gICAgcmVsUGFydHMucHVzaCgnbm9yZWZlcnJlcicpO1xuICB9XG5cbiAgaWYgKHRhcmdldC5pbmNsdWRlcygnX2JsYW5rJykgJiYgcmVsUGFydHMuaW5kZXhPZignbm9vcGVuZXInKSA9PT0gLTEpIHtcbiAgICByZWxQYXJ0cy5wdXNoKCdub29wZW5lcicpO1xuICB9XG5cbiAgcmV0dXJuIHJlbFBhcnRzLnNvcnQoKS5qb2luKCcgJykudHJpbSgpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQVNDID0gJ2FzYyc7XG52YXIgREVTQyA9ICdkZXNjJztcbmV4cG9ydCB2YXIgU29ydERpcmVjdGlvbiA9IE9iamVjdC5mcmVlemUoe1xuICBBU0M6IEFTQyxcbiAgREVTQzogREVTQyxcbiAgaXNBc2M6IGZ1bmN0aW9uIGlzQXNjKGRpcmVjdGlvbikge1xuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IEFTQztcbiAgfSxcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZShkaXJlY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc0FzYyhkaXJlY3Rpb24pID8gREVTQyA6IEFTQztcbiAgfVxufSk7XG5leHBvcnQgdmFyIFNvcnREaXJlY3Rpb25UeXBlID0gUHJvcFR5cGVzLm9uZU9mKFtBU0MsIERFU0NdKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBfZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IF9vbWl0IGZyb20gJ2xvZGFzaC9vbWl0JzsgLy8gd3JhcCB0aGUgbG9kYXNoIGZ1bmN0aW9ucyB0byBhdm9pZCBoYXZpbmcgbG9kYXNoJ3MgVFMgdHlwZSBkZWZpbml0aW9uIGZyb20gYmVpbmdcbi8vIGV4cG9ydGVkLCB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCB0aGUgbG9kYXNoIG5hbWVzcGFjZSBpZiBvdGhlciB2ZXJzaW9ucyBhcmUgdXNlZFxuXG5leHBvcnQgdmFyIGdldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4gX2dldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSk7XG59O1xuZXhwb3J0IHZhciBvbWl0ID0gZnVuY3Rpb24gb21pdChvYmplY3QsIHBhdGhzKSB7XG4gIHJldHVybiBfb21pdChvYmplY3QsIHBhdGhzKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi9zb3J0X2RpcmVjdGlvbic7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICcuLi9vYmplY3RzJztcbmV4cG9ydCB2YXIgQ29tcGFyYXRvcnMgPSBPYmplY3QuZnJlZXplKHtcbiAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogU29ydERpcmVjdGlvbi5BU0M7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICAgIC8vIEphdmFTY3JpcHQncyBjb21wYXJpc29uIG9mIG51bGwvdW5kZWZpbmVkIChhbmQgc29tZSBvdGhlcnMgbm90IGhhbmRsZWQgaGVyZSkgdmFsdWVzIGFsd2F5cyByZXR1cm5zIGBmYWxzZWBcbiAgICAgIC8vIChodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLyNzZWMtYWJzdHJhY3QtcmVsYXRpb25hbC1jb21wYXJpc29uKVxuICAgICAgLy8gcmVzdWx0aW5nIGluIGNhc2VzIHdoZXJlIHYxIDwgdjIgYW5kIHYxID4gdjIgYXJlIGJvdGggZmFsc2UuXG4gICAgICAvLyBUaGlzIGxlYWRzIHRvIHVucHJlZGljdGFibGUgc29ydGluZyByZXN1bHRzIGluIG11bHRpcGxlIEpTIGVuZ2luZSBzb3J0aW5nIGFsZ29yaXRobXNcbiAgICAgIC8vIHdoaWNoIGNhdXNlcyB1bnByZWRpY3RhYmxlIHVzZXIgZXhwZXJpZW5jZXMuXG4gICAgICAvLyBJbnN0ZWFkOlxuICAgICAgLy8gKiAxLiBwdXNoIHVuZGVmaW5lZC9udWxsIHZhbHVlcyB0byB0aGUgZW5kIG9mIHRoZSBzb3J0ZWQgbGlzdCwgX3JlZ2FyZGxlc3Mgb2Ygc29ydCBkaXJlY3Rpb25fXG4gICAgICAvLyAgICAobm9uLXNvcnRhYmxlIHZhbHVlcyBhbHdheXMgYXBwZWFyIGF0IHRoZSBlbmQsIGFuZCBzb3J0YWJsZSB2YWx1ZXMgYXJlIHNvcnRlZCBhdCB0aGUgdG9wKVxuICAgICAgLy8gKiAyLiByZXBvcnQgdW5kZWZpbmVkL251bGwgdmFsdWVzIGFzIGVxdWFsXG4gICAgICAvLyAqIDMuIHdoZW4gYm90aCB2YWx1ZXMgYXJlIGNvbXBhcmFibGUgdGhleSBhcmUgc29ydGVkIG5vcm1hbGx5XG4gICAgICB2YXIgdjFJc0NvbXBhcmFibGUgPSB2MSAhPSBudWxsO1xuICAgICAgdmFyIHYySXNDb21wYXJhYmxlID0gdjIgIT0gbnVsbDsgLy8gKiAxLlxuXG4gICAgICBpZiAodjFJc0NvbXBhcmFibGUgJiYgIXYySXNDb21wYXJhYmxlKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF2MUlzQ29tcGFyYWJsZSAmJiB2MklzQ29tcGFyYWJsZSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gLy8gKiAyLlxuXG5cbiAgICAgIGlmICghdjFJc0NvbXBhcmFibGUgJiYgIXYySXNDb21wYXJhYmxlKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSAvLyAqIDMuXG5cblxuICAgICAgaWYgKHYxID09PSB2Mikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IHYxID4gdjIgPyAxIDogLTE7XG4gICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5pc0FzYyhkaXJlY3Rpb24pID8gcmVzdWx0IDogLTEgKiByZXN1bHQ7XG4gICAgfTtcbiAgfSxcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZShjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yKHYyLCB2MSk7XG4gICAgfTtcbiAgfSxcbiAgdmFsdWU6IGZ1bmN0aW9uIChfdmFsdWUpIHtcbiAgICBmdW5jdGlvbiB2YWx1ZShfeCwgX3gyKSB7XG4gICAgICByZXR1cm4gX3ZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgdmFsdWUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3ZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfTtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfShmdW5jdGlvbiAodmFsdWVDYWxsYmFjaywgY29tcGFyYXRvcikge1xuICAgIGlmICghY29tcGFyYXRvcikge1xuICAgICAgY29tcGFyYXRvciA9IHRoaXMuZGVmYXVsdChTb3J0RGlyZWN0aW9uLkFTQyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvMSwgbzIpIHtcbiAgICAgIHJldHVybiBjb21wYXJhdG9yKHZhbHVlQ2FsbGJhY2sobzEpLCB2YWx1ZUNhbGxiYWNrKG8yKSk7XG4gICAgfTtcbiAgfSksXG4gIHByb3BlcnR5OiBmdW5jdGlvbiBwcm9wZXJ0eShwcm9wLCBjb21wYXJhdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZ2V0KHZhbHVlLCBwcm9wKTtcbiAgICB9LCBjb21wYXJhdG9yKTtcbiAgfVxufSk7IiwgImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgUE9TSVRJT05TID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbnZhciByZWxhdGVkRGltZW5zaW9uID0ge1xuICB0b3A6ICdoZWlnaHQnLFxuICByaWdodDogJ3dpZHRoJyxcbiAgYm90dG9tOiAnaGVpZ2h0JyxcbiAgbGVmdDogJ3dpZHRoJ1xufTtcbnZhciBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZSA9IHtcbiAgaGVpZ2h0OiAndG9wJyxcbiAgd2lkdGg6ICdsZWZ0J1xufTtcbnZhciBwb3NpdGlvbkNvbXBsZW1lbnRzID0ge1xuICB0b3A6ICdib3R0b20nLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICBsZWZ0OiAncmlnaHQnXG59OyAvLyBhbHdheXMgcmVzb2x2aW5nIHRvIHRvcC9sZWZ0IGlzIHRha2VuIGFkdmFudGFnZSBvZiBieSBrbm93aW5nIHRoZXkgYXJlIHRoZVxuLy8gbWluaW11bSBlZGdlcyBvZiB0aGUgYm91bmRpbmcgYm94XG5cbnZhciBwb3NpdGlvblN1YnN0aXR1dGVzID0ge1xuICB0b3A6ICdsZWZ0JyxcbiAgcmlnaHQ6ICd0b3AnLFxuICBib3R0b206ICdsZWZ0JyxcbiAgbGVmdDogJ3RvcCdcbn07XG5cbnZhciBnZXRCdWZmZXJWYWx1ZXMgPSBmdW5jdGlvbiBnZXRCdWZmZXJWYWx1ZXMoYnVmZmVyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGJ1ZmZlcikpIHtcbiAgICB2YXIgX2J1ZmZlciA9IF9zbGljZWRUb0FycmF5KGJ1ZmZlciwgNCksXG4gICAgICAgIHRvcEJ1ZmZlciA9IF9idWZmZXJbMF0sXG4gICAgICAgIHJpZ2h0QnVmZmVyID0gX2J1ZmZlclsxXSxcbiAgICAgICAgYm90dG9tQnVmZmVyID0gX2J1ZmZlclsyXSxcbiAgICAgICAgbGVmdEJ1ZmZlciA9IF9idWZmZXJbM107XG5cbiAgICByZXR1cm4gW3RvcEJ1ZmZlciwgcmlnaHRCdWZmZXIsIGJvdHRvbUJ1ZmZlciwgbGVmdEJ1ZmZlcl07XG4gIH1cblxuICByZXR1cm4gW2J1ZmZlciwgYnVmZmVyLCBidWZmZXIsIGJ1ZmZlcl07XG59O1xuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbmluZyAocmVsYXRpdmUgdG8gZG9jdW1lbnQuYm9keSkgdG8gcGxhY2UgYSBwb3BvdmVyIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gYW5jaG9yIHtIVE1MRWxlbWVudH0gRWxlbWVudCB0byBhbmNob3IgdGhlIHBvcG92ZXIgdG9cbiAqIEBwYXJhbSBwb3BvdmVyIHtIVE1MRWxlbWVudH0gRWxlbWVudCBjb250YWluaW5nIHRoZSBwb3BvdmVyIGNvbnRlbnRcbiAqIEBwYXJhbSBwb3NpdGlvbiB7c3RyaW5nfSBQb3NpdGlvbiB0aGUgdXNlciB3YW50cy4gT25lIG9mIFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXVxuICogQHBhcmFtIFtmb3JjZVBvc2l0aW9uXSB7Ym9vbGVhbn0gSWYgdHJ1ZSwgdXNlIG9ubHkgdGhlIHByb3ZpZGVkIGBwb3NpdGlvbmAgdmFsdWUgYW5kIGRvbid0IHRyeSBhbnkgb3RoZXIgcG9zaXRpb25cbiAqIEBwYXJhbSBbYWxpZ25dIHtzdHJpbmd9IENyb3NzLWF4aXMgYWxpZ25tZW50LiBPbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gW2J1ZmZlcj0xNl0ge251bWJlcn0gTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyXG4gKiBAcGFyYW0gW29mZnNldD0wXSB7bnVtYmVyfSBEaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYW5jaG9yXG4gKiBAcGFyYW0gW2FsbG93Q3Jvc3NBeGlzPXRydWVdIHtib29sZWFufSBXaGV0aGVyIHRvIGFsbG93IHRoZSBwb3BvdmVyIHRvIGJlIHBvc2l0aW9uZWQgb24gdGhlIGNyb3NzLWF4aXNcbiAqIEBwYXJhbSBbY29udGFpbmVyXSB7SFRNTEVsZW1lbnR9IEVsZW1lbnQgdGhlIHBvcG92ZXIgbXVzdCBiZSBjb25zdHJhaW5lZCB0byBmaXQgd2l0aGluXG4gKiBAcGFyYW0gW2Fycm93Q29uZmlnXSB7e2Fycm93V2lkdGg6IG51bWJlciwgYXJyb3dCdWZmZXI6IG51bWJlcn19IElmXG4gKiAgcHJlc2VudCwgZGVzY3JpYmVzIHRoZSBzaXplICYgY29uc3RyYWludHMgZm9yIGFuIGFycm93IGVsZW1lbnQsIGFuZCB0aGVcbiAqICBmdW5jdGlvbiByZXR1cm4gdmFsdWUgd2lsbCBpbmNsdWRlIGFuIGBhcnJvd2AgcGFyYW0gd2l0aCBwb3NpdGlvbiBkZXRhaWxzXG4gKlxuICogQHJldHVybnMge0ZpbmRQb3BvdmVyUG9zaXRpb25SZXN1bHR9IGFic29sdXRlIHBhZ2UgY29vcmRpbmF0ZXMgZm9yIHRoZVxuICogcG9wb3ZlciwgYW5kIHRoZSBwbGFjZW1lbnQncyByZWxhdGlvbiB0byB0aGUgYW5jaG9yIG9yIHVuZGVmaW5lZFxuICogdGhlcmUncyBubyByb29tLlxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQb3BvdmVyUG9zaXRpb24oX3JlZikge1xuICB2YXIgYW5jaG9yID0gX3JlZi5hbmNob3IsXG4gICAgICBwb3BvdmVyID0gX3JlZi5wb3BvdmVyLFxuICAgICAgYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgICAgcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgICAgZm9yY2VQb3NpdGlvbiA9IF9yZWYuZm9yY2VQb3NpdGlvbixcbiAgICAgIF9yZWYkYnVmZmVyID0gX3JlZi5idWZmZXIsXG4gICAgICBidWZmZXIgPSBfcmVmJGJ1ZmZlciA9PT0gdm9pZCAwID8gMTYgOiBfcmVmJGJ1ZmZlcixcbiAgICAgIF9yZWYkb2Zmc2V0ID0gX3JlZi5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfcmVmJG9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkb2Zmc2V0LFxuICAgICAgX3JlZiRhbGxvd0Nyb3NzQXhpcyA9IF9yZWYuYWxsb3dDcm9zc0F4aXMsXG4gICAgICBhbGxvd0Nyb3NzQXhpcyA9IF9yZWYkYWxsb3dDcm9zc0F4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGFsbG93Q3Jvc3NBeGlzLFxuICAgICAgY29udGFpbmVyID0gX3JlZi5jb250YWluZXIsXG4gICAgICBhcnJvd0NvbmZpZyA9IF9yZWYuYXJyb3dDb25maWcsXG4gICAgICByZXR1cm5Cb3VuZGluZ0JveCA9IF9yZWYucmV0dXJuQm91bmRpbmdCb3g7XG4gIC8vIGZpbmQgdGhlIHNjcmVlbi1yZWxhdGl2ZSBib3VuZGluZyBib3hlcyBvZiB0aGUgYW5jaG9yLCBwb3BvdmVyLCBhbmQgY29udGFpbmVyXG4gIHZhciBhbmNob3JCb3VuZGluZ0JveCA9IGdldEVsZW1lbnRCb3VuZGluZ0JveChhbmNob3IpO1xuICB2YXIgcG9wb3ZlckJvdW5kaW5nQm94ID0gZ2V0RWxlbWVudEJvdW5kaW5nQm94KHBvcG92ZXIpOyAvLyBjYWxjdWxhdGUgdGhlIHdpbmRvdydzIGJvdW5kc1xuICAvLyB3aW5kb3cuKGlubmVyV2lkdGh8aW5uZXJIZWlnaHQpIGRvIG5vdCBhY2NvdW50IGZvciBzY3JvbGxiYXJzXG4gIC8vIHNvIHByZWZlciB0aGUgY2xpZW50V2lkdGgvY2xpZW50SGVpZ2h0IG9mIHRoZSBET00gaWYgYXZhaWxhYmxlXG5cbiAgdmFyIGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgd2luZG93LmlubmVyV2lkdGg7XG4gIHZhciBkb2N1bWVudEhlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgd2luZG93LmlubmVySGVpZ2h0O1xuICB2YXIgd2luZG93Qm91bmRpbmdCb3ggPSB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiBkb2N1bWVudFdpZHRoLFxuICAgIGJvdHRvbTogZG9jdW1lbnRIZWlnaHQsXG4gICAgbGVmdDogMCxcbiAgICBoZWlnaHQ6IGRvY3VtZW50SGVpZ2h0LFxuICAgIHdpZHRoOiBkb2N1bWVudFdpZHRoXG4gIH07IC8vIGlmIG5vIGNvbnRhaW5lciBlbGVtZW50IGlzIGdpdmVuIGZhbGwgYmFjayB0byB1c2luZyB0aGUgd2luZG93IHZpZXdwb3J0XG5cbiAgdmFyIGNvbnRhaW5lckJvdW5kaW5nQm94ID0gY29udGFpbmVyID8gZ2V0RWxlbWVudEJvdW5kaW5nQm94KGNvbnRhaW5lcikgOiB3aW5kb3dCb3VuZGluZ0JveDtcbiAgLyoqXG4gICAqIGBwb3NpdGlvbmAgd2FzIHNwZWNpZmllZCBieSB0aGUgZnVuY3Rpb24gY2FsbGVyIGFuZCBpcyBhIHN0cm9uZyBoaW50XG4gICAqIGFzIHRvIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24gb2YgdGhlIHBvcG92ZXIgcmVsYXRpdmUgdG8gdGhlIGFuY2hvci5cbiAgICogSG93ZXZlciwgd2Ugc3Ryb25nbHkgcHJlZmVyIHNob3dpbmcgYWxsIG9mIHRoZSBwb3BvdmVyIGNvbnRlbnQgd2l0aGluXG4gICAqIHRoZSB3aW5kb3crY29udGFpbmVyIGJvdW5kYXJ5IGFuZCB3aWxsIGl0ZXJhdGUgb3ZlciB0aGUgZm91clxuICAgKiBwb3NzaWJsZSBzaWRlcyB1bnRpbCBhIHBlcmZlY3QgZml0IGlzIGxvY2F0ZWQuIElmIG5vbmUgb2YgdGhlIGxvY2F0aW9uc1xuICAgKiBmdWxseSBjb250YWluIHBvcG92ZXIsIHRoZSBsb2NhdGlvbiB3aXRoIHRoZSBiZXN0IGZpdCBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogVGhpcyBhcHByb2FjaCBmaXJzdCBjaGVja3MgdGhlIHByZWZlcnJlZCBgcG9zaXRpb25gLCB0aGVuIGl0cyBvcHBvc2l0ZVxuICAgKiBhbG9uZyB0aGUgc2FtZSBheGlzLCBuZXh0IGEgbG9jYXRpb24gb24gdGhlIGNyb3NzLWF4aXMsIGFuZCBmaW5hbGx5IGl0XG4gICAqIHRlc3RzIHRoZSByZW1haW5pbmcgcG9zaXRpb24uXG4gICAqXG4gICAqIGUuZy5cbiAgICogaWYgcG9zaXRpb24gPSBcInRvcFwiIHRoZSBvcmRlciBpcyB0b3AsIGJvdHRvbSwgbGVmdCByaWdodFxuICAgKiBpZiBwb3NpdGlvbiA9IFwicmlnaHRcIiB0aGUgb3JkZXIgaXMgcmlnaHQsIGxlZnQsIHRvcCwgYm90dG9tXG4gICAqL1xuICAvLyBUcnkgdGhlIHVzZXItZGVzaXJlZCBwb3NpdGlvbiBmaXJzdC5cblxuICB2YXIgaXRlcmF0aW9uUG9zaXRpb25zID0gW3Bvc2l0aW9uXTsgLy8ga2VlcCB1c2VyLWRlZmluZWQgYWxpZ25tZW50IGluIHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMuXG5cbiAgdmFyIGl0ZXJhdGlvbkFsaWdubWVudHMgPSBbYWxpZ25dO1xuXG4gIGlmIChmb3JjZVBvc2l0aW9uICE9PSB0cnVlKSB7XG4gICAgaXRlcmF0aW9uUG9zaXRpb25zLnB1c2gocG9zaXRpb25Db21wbGVtZW50c1twb3NpdGlvbl0pOyAvLyBUcnkgdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24uXG5cbiAgICBpdGVyYXRpb25BbGlnbm1lbnRzLnB1c2goYWxpZ24pOyAvLyBrZWVwIHVzZXItZGVmaW5lZCBhbGlnbm1lbnQgaW4gdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24uXG5cbiAgICBpZiAoYWxsb3dDcm9zc0F4aXMpIHtcbiAgICAgIGl0ZXJhdGlvblBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dLCAvLyBTd2l0Y2ggdG8gdGhlIGNyb3NzIGF4aXMuXG4gICAgICBwb3NpdGlvbkNvbXBsZW1lbnRzW3Bvc2l0aW9uU3Vic3RpdHV0ZXNbcG9zaXRpb25dXSAvLyBUcnkgdGhlIGNvbXBsZW1lbnRhcnkgcG9zaXRpb24gb24gdGhlIGNyb3NzIGF4aXMuXG4gICAgICApO1xuICAgICAgaXRlcmF0aW9uQWxpZ25tZW50cy5wdXNoKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsgLy8gZGlzY2FyZCBkZXNpcmVkIGFsaWdubWVudCBvbiBjcm9zcy1heGlzXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHBvc2l0aW9uIGlzIGZvcmNlZCwgaWYgaXQgY29uZmxpY3RzIHdpdGggdGhlIGFsaWdubWVudCB0aGVuIHJlc2V0IGFsaWduIHRvIGBudWxsYFxuICAgIC8vIGUuZy4gb3JpZ2luYWwgcGxhY2VtZW50IHJlcXVlc3QgZm9yIGBkb3duTGVmdGAgaXMgbW92ZWQgdG8gdGhlIGBsZWZ0YCBzaWRlLCBmdXR1cmUgY2FsbHNcbiAgICAvLyB3aWxsIHBvc2l0aW9uIGFuZCBhbGlnbiBgbGVmdGAsIGFuZCBgbGVmdExlZnRgIGlzIG5vdCBhIHZhbGlkIHBsYWNlbWVudFxuICAgIGlmIChwb3NpdGlvbiA9PT0gYWxpZ24gfHwgYWxpZ24gIT09IHVuZGVmaW5lZCAmJiBwb3NpdGlvbiA9PT0gcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl0pIHtcbiAgICAgIGl0ZXJhdGlvbkFsaWdubWVudHNbMF0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJlc3RGaXQgPSB1bmRlZmluZWQ7XG4gIHZhciBiZXN0UG9zaXRpb24gPSBudWxsO1xuXG4gIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGl0ZXJhdGlvblBvc2l0aW9ucy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdmFyIGl0ZXJhdGlvblBvc2l0aW9uID0gaXRlcmF0aW9uUG9zaXRpb25zW2lkeF07IC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHBvc2l0aW9uIHdpdGggYSBiZXR0ZXIgZml0IHRoYW4gd2UndmUgZm91bmQgc28gZmFyLlxuXG4gICAgdmFyIHNjcmVlbkNvb3JkaW5hdGVzID0gZ2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzKHtcbiAgICAgIHBvc2l0aW9uOiBpdGVyYXRpb25Qb3NpdGlvbixcbiAgICAgIGFsaWduOiBpdGVyYXRpb25BbGlnbm1lbnRzW2lkeF0sXG4gICAgICBhbmNob3JCb3VuZGluZ0JveDogYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgICBwb3BvdmVyQm91bmRpbmdCb3g6IHBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIHdpbmRvd0JvdW5kaW5nQm94OiB3aW5kb3dCb3VuZGluZ0JveCxcbiAgICAgIGNvbnRhaW5lckJvdW5kaW5nQm94OiBjb250YWluZXJCb3VuZGluZ0JveCxcbiAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICBhcnJvd0NvbmZpZzogYXJyb3dDb25maWdcbiAgICB9KTtcblxuICAgIGlmIChiZXN0Rml0ID09PSB1bmRlZmluZWQgfHwgc2NyZWVuQ29vcmRpbmF0ZXMuZml0ID4gYmVzdEZpdCkge1xuICAgICAgYmVzdEZpdCA9IHNjcmVlbkNvb3JkaW5hdGVzLmZpdDtcbiAgICAgIGJlc3RQb3NpdGlvbiA9IHtcbiAgICAgICAgZml0OiBzY3JlZW5Db29yZGluYXRlcy5maXQsXG4gICAgICAgIHBvc2l0aW9uOiBpdGVyYXRpb25Qb3NpdGlvbixcbiAgICAgICAgdG9wOiBzY3JlZW5Db29yZGluYXRlcy50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQsXG4gICAgICAgIGxlZnQ6IHNjcmVlbkNvb3JkaW5hdGVzLmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgICAgIGFycm93OiBzY3JlZW5Db29yZGluYXRlcy5hcnJvd1xuICAgICAgfTsgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCB0aGUgaWRlYWwgZml0LCB1c2UgdGhhdCBwb3NpdGlvbi5cblxuICAgICAgaWYgKGJlc3RGaXQgPT09IDEpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSAvLyBJZiB3ZSBoYXZlbid0IGltcHJvdmVkIHRoZSBmaXQsIHRoZW4gY29udGludWUgb24gYW5kIHRyeSBhIG5ldyBwb3NpdGlvbi5cblxuICB9XG5cbiAgaWYgKGJlc3RQb3NpdGlvbiA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY2FsY3VsYXRlIGJlc3RQb3NpdGlvbicpO1xuICB9XG5cbiAgaWYgKHJldHVybkJvdW5kaW5nQm94KSB7XG4gICAgYmVzdFBvc2l0aW9uLmFuY2hvckJvdW5kaW5nQm94ID0gYW5jaG9yQm91bmRpbmdCb3g7XG4gIH1cblxuICByZXR1cm4gYmVzdFBvc2l0aW9uO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgdGFyZ2V0IHBvc2l0aW9uIGFuZCB0aGUgcG9wb3ZlcidzIHN1cnJvdW5kaW5nIGNvbnRleHQsIHJldHVybnMgZWl0aGVyIGFuXG4gKiBvYmplY3Qgd2l0aCB7dG9wLCBsZWZ0fSBzY3JlZW4gY29vcmRpbmF0ZXMgb3IgYG51bGxgIGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNob3dcbiAqIGNvbnRlbnQgaW4gdGhlIHRhcmdldCBwb3NpdGlvblxuICogQHBhcmFtIHBvc2l0aW9uIHtzdHJpbmd9IHRoZSB0YXJnZXQgcG9zaXRpb24sIG9uZSBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEBwYXJhbSBhbGlnbiB7c3RyaW5nfSB0YXJnZXQgYWxpZ25tZW50IG9uIHRoZSBjcm9zcy1heGlzLCBvbmUgb2YgW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdXG4gKiBAcGFyYW0gYW5jaG9yQm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSBhbmNob3IgZWxlbWVudFxuICogQHBhcmFtIHBvcG92ZXJCb3VuZGluZ0JveCB7T2JqZWN0fSBib3VuZGluZyBib3ggb2YgdGhlIHBvcG92ZXIgZWxlbWVudFxuICogQHBhcmFtIHdpbmRvd0JvdW5kaW5nQm94IHtPYmplY3R9IGJvdW5kaW5nIGJveCBvZiB0aGUgd2luZG93XG4gKiBAcGFyYW0gY29udGFpbmVyQm91bmRpbmdCb3gge09iamVjdH0gYm91bmRpbmcgYm94IG9mIHRoZSBjb250YWluZXJcbiAqIEBwYXJhbSBbYXJyb3dDb25maWddIHt7YXJyb3dXaWR0aDogbnVtYmVyLCBhcnJvd0J1ZmZlcjogbnVtYmVyfX0gSWYgcHJlc2VudCwgZGVzY3JpYmVzIHRoZSBzaXplICZcbiAqICBjb25zdHJhaW50cyBmb3IgYW4gYXJyb3cgZWxlbWVudCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUgd2lsbCBpbmNsdWRlIGFuIGBhcnJvd2AgcGFyYW1cbiAqICB3aXRoIHBvc2l0aW9uIGRldGFpbHNcbiAqIEBwYXJhbSBbb2Zmc2V0PTBdIHtudW1iZXJ9IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSBbYnVmZmVyPTBdIHtudW1iZXJ9IE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGUgcG9wb3ZlcidzXG4gKiAgcGxhY2VtZW50IGFuZCB0aGUgY29udGFpbmVyIGVkZ2VcbiAqXG4gKiBAcmV0dXJucyB7R2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzUmVzdWx0fVxuICogIG9iamVjdCB3aXRoIHRvcC9sZWZ0IGNvb3JkaW5hdGVzLCB0aGUgcG9wb3ZlcidzIHJlbGF0aXZlIHBvc2l0aW9uIHRvIHRoZSBhbmNob3IsIGFuZCBob3cgd2VsbCB0aGVcbiAqICBwb3BvdmVyIGZpdHMgaW4gdGhlIGxvY2F0aW9uICgwLjAgLT4gMS4wKSBjb29yZGluYXRlcyBhbmQgdGhlIHBvcG92ZXIncyByZWxhdGl2ZSBwb3NpdGlvbiwgaWZcbiAqICB0aGVyZSBpcyBubyByb29tIGluIHRoaXMgcGxhY2VtZW50IHRoZW4gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9wb3ZlclNjcmVlbkNvb3JkaW5hdGVzKF9yZWYyKSB7XG4gIHZhciBfcG9wb3ZlclBsYWNlbWVudCwgX3JlZjM7XG5cbiAgdmFyIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBhbGlnbiA9IF9yZWYyLmFsaWduLFxuICAgICAgYW5jaG9yQm91bmRpbmdCb3ggPSBfcmVmMi5hbmNob3JCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveCA9IF9yZWYyLnBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIHdpbmRvd0JvdW5kaW5nQm94ID0gX3JlZjIud2luZG93Qm91bmRpbmdCb3gsXG4gICAgICBjb250YWluZXJCb3VuZGluZ0JveCA9IF9yZWYyLmNvbnRhaW5lckJvdW5kaW5nQm94LFxuICAgICAgYXJyb3dDb25maWcgPSBfcmVmMi5hcnJvd0NvbmZpZyxcbiAgICAgIF9yZWYyJG9mZnNldCA9IF9yZWYyLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9yZWYyJG9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9yZWYyJG9mZnNldCxcbiAgICAgIF9yZWYyJGJ1ZmZlciA9IF9yZWYyLmJ1ZmZlcixcbiAgICAgIGJ1ZmZlciA9IF9yZWYyJGJ1ZmZlciA9PT0gdm9pZCAwID8gMCA6IF9yZWYyJGJ1ZmZlcjtcblxuICAvKipcbiAgICogVGhlIGdvYWwgaXMgdG8gZmluZCB0aGUgYmVzdCB3YXkgdG8gYWxpZ24gdGhlIHBvcG92ZXIgY29udGVudFxuICAgKiBvbiB0aGUgZ2l2ZW4gc2lkZSBvZiB0aGUgYW5jaG9yIGVsZW1lbnQuIFRoZSBwb3BvdmVyIHByZWZlcnNcbiAgICogY2VudGVyaW5nIG9uIHRoZSBhbmNob3IgYnV0IGNhbiBzaGlmdCBhbG9uZyB0aGUgY3Jvc3MtYXhpcyBhcyBuZWVkZWQuXG4gICAqXG4gICAqIFdlIHJldHVybiB0aGUgdG9wL2xlZnQgY29vcmRpbmF0ZXMgdGhhdCBiZXN0IGZpdCB0aGUgcG9wb3ZlciBpbnNpZGVcbiAgICogdGhlIGdpdmVuIGJvdW5kYXJpZXMsIGFuZCBhbHNvIHJldHVybiB0aGUgYGZpdGAgdmFsdWUgd2hpY2ggaW5kaWNhdGVzXG4gICAqIHdoYXQgcGVyY2VudGFnZSBvZiB0aGUgcG9wb3ZlciBpcyB3aXRoaW4gdGhlIGJvdW5kcy5cbiAgICpcbiAgICogZS5nLiBmaW5kaW5nIGEgbG9jYXRpb24gd2hlbiBwb3NpdGlvbj10b3BcbiAgICogdGhlIHByZWZlcnJlZCBsb2NhdGlvbiBpcyBkaXJlY3RseSBvdmVyIHRoZSBhbmNob3JcbiAgICpcbiAgICogICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgfCAgICAgICBwb3BvdmVyICAgICAgICB8XG4gICAqICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICAgICAgICAgdlxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgICB8ICAgIGFuY2hvciAgICB8XG4gICAqICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKlxuICAgKiBidXQgaWYgYW5jaG9yIGRvZXNuJ3QgaGF2ZSBtdWNoIChvciBhbnkpIHJvb20gb24gaXRzIHJpZGUgc2lkZVxuICAgKiB0aGUgcG9wb3ZlciB3aWxsIHNoaWZ0IHRvIHRoZSBsZWZ0XG4gICAqXG4gICAqICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICB8ICAgICAgIHBvcG92ZXIgICAgICAgIHxcbiAgICogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgICAgICAgIHZcbiAgICogICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rXG4gICAqICAgICAgICAgICAgfCAgICBhbmNob3IgICAgfFxuICAgKiAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICpcbiAgICovXG4gIHZhciBjcm9zc0F4aXNGaXJzdFNpZGUgPSBwb3NpdGlvblN1YnN0aXR1dGVzW3Bvc2l0aW9uXTsgLy8gXCJ0b3BcIiAtPiBcImxlZnRcIlxuXG4gIHZhciBjcm9zc0F4aXNTZWNvbmRTaWRlID0gcG9zaXRpb25Db21wbGVtZW50c1tjcm9zc0F4aXNGaXJzdFNpZGVdOyAvLyBcImxlZnRcIiAtPiBcInJpZ2h0XCJcblxuICB2YXIgY3Jvc3NBeGlzRGltZW5zaW9uID0gcmVsYXRlZERpbWVuc2lvbltjcm9zc0F4aXNGaXJzdFNpZGVdOyAvLyBcImxlZnRcIiAtPiBcIndpZHRoXCJcblxuICB2YXIgX2dldEJ1ZmZlclZhbHVlcyA9IGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpLFxuICAgICAgX2dldEJ1ZmZlclZhbHVlczIgPSBfc2xpY2VkVG9BcnJheShfZ2V0QnVmZmVyVmFsdWVzLCA0KSxcbiAgICAgIHRvcEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzBdLFxuICAgICAgcmlnaHRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzMlsxXSxcbiAgICAgIGJvdHRvbUJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzJdLFxuICAgICAgbGVmdEJ1ZmZlciA9IF9nZXRCdWZmZXJWYWx1ZXMyWzNdO1xuXG4gIHZhciBfZ2V0Q3Jvc3NBeGlzUG9zaXRpb24gPSBnZXRDcm9zc0F4aXNQb3NpdGlvbih7XG4gICAgY3Jvc3NBeGlzRmlyc3RTaWRlOiBjcm9zc0F4aXNGaXJzdFNpZGUsXG4gICAgY3Jvc3NBeGlzU2Vjb25kU2lkZTogY3Jvc3NBeGlzU2Vjb25kU2lkZSxcbiAgICBjcm9zc0F4aXNEaW1lbnNpb246IGNyb3NzQXhpc0RpbWVuc2lvbixcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgYWxpZ246IGFsaWduLFxuICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgIG9mZnNldDogb2Zmc2V0LFxuICAgIHdpbmRvd0JvdW5kaW5nQm94OiB3aW5kb3dCb3VuZGluZ0JveCxcbiAgICBjb250YWluZXJCb3VuZGluZ0JveDogY29udGFpbmVyQm91bmRpbmdCb3gsXG4gICAgcG9wb3ZlckJvdW5kaW5nQm94OiBwb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgYW5jaG9yQm91bmRpbmdCb3g6IGFuY2hvckJvdW5kaW5nQm94LFxuICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICB9KSxcbiAgICAgIGNyb3NzQXhpc1Bvc2l0aW9uID0gX2dldENyb3NzQXhpc1Bvc2l0aW9uLmNyb3NzQXhpc1Bvc2l0aW9uLFxuICAgICAgY3Jvc3NBeGlzQXJyb3dQb3NpdGlvbiA9IF9nZXRDcm9zc0F4aXNQb3NpdGlvbi5jcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuXG4gIHZhciBwcmltYXJ5QXhpc0RpbWVuc2lvbiA9IHJlbGF0ZWREaW1lbnNpb25bcG9zaXRpb25dOyAvLyBcInRvcFwiIC0+IFwiaGVpZ2h0XCJcblxuICB2YXIgcHJpbWFyeUF4aXNQb3NpdGlvbk5hbWUgPSBkaW1lbnNpb25Qb3NpdGlvbkF0dHJpYnV0ZVtwcmltYXJ5QXhpc0RpbWVuc2lvbl07IC8vIFwiaGVpZ2h0XCIgLT4gXCJ0b3BcIlxuXG4gIHZhciBfZ2V0UHJpbWFyeUF4aXNQb3NpdGkgPSBnZXRQcmltYXJ5QXhpc1Bvc2l0aW9uKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgcG9wb3ZlckJvdW5kaW5nQm94OiBwb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgYW5jaG9yQm91bmRpbmdCb3g6IGFuY2hvckJvdW5kaW5nQm94LFxuICAgIGFycm93Q29uZmlnOiBhcnJvd0NvbmZpZ1xuICB9KSxcbiAgICAgIHByaW1hcnlBeGlzUG9zaXRpb24gPSBfZ2V0UHJpbWFyeUF4aXNQb3NpdGkucHJpbWFyeUF4aXNQb3NpdGlvbixcbiAgICAgIHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvbiA9IF9nZXRQcmltYXJ5QXhpc1Bvc2l0aS5wcmltYXJ5QXhpc0Fycm93UG9zaXRpb247XG5cbiAgdmFyIHBvcG92ZXJQbGFjZW1lbnQgPSAoX3BvcG92ZXJQbGFjZW1lbnQgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9wb3BvdmVyUGxhY2VtZW50LCBjcm9zc0F4aXNGaXJzdFNpZGUsIGNyb3NzQXhpc1Bvc2l0aW9uKSwgX2RlZmluZVByb3BlcnR5KF9wb3BvdmVyUGxhY2VtZW50LCBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSwgcHJpbWFyeUF4aXNQb3NpdGlvbiksIF9wb3BvdmVyUGxhY2VtZW50KTsgLy8gY2FsY3VsYXRlIHRoZSBmaXQgb2YgdGhlIHBvcG92ZXIgaW4gdGhpcyBsb2NhdGlvblxuICAvLyBmaXQgaXMgaW4gcmFuZ2UgMC4wIC0+IDEuMCBhbmQgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcG92ZXIgd2hpY2ggaXMgdmlzaWJsZSBpbiB0aGlzIGxvY2F0aW9uXG5cbiAgdmFyIGNvbWJpbmVkQm91bmRpbmdCb3ggPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKHdpbmRvd0JvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7IC8vIHNocmluayB0aGUgdmlzaWJsZSBib3VuZGluZyBib3ggYnkgYGJ1ZmZlcmBcbiAgLy8gdG8gY29tcHV0ZSBhIGZpdCB2YWx1ZVxuXG4gIGNvbWJpbmVkQm91bmRpbmdCb3gudG9wICs9IHRvcEJ1ZmZlcjtcbiAgY29tYmluZWRCb3VuZGluZ0JveC5yaWdodCAtPSByaWdodEJ1ZmZlcjtcbiAgY29tYmluZWRCb3VuZGluZ0JveC5ib3R0b20gLT0gYm90dG9tQnVmZmVyO1xuICBjb21iaW5lZEJvdW5kaW5nQm94LmxlZnQgKz0gbGVmdEJ1ZmZlcjtcbiAgdmFyIGZpdCA9IGdldFZpc2libGVGaXQoe1xuICAgIHRvcDogcG9wb3ZlclBsYWNlbWVudC50b3AsXG4gICAgcmlnaHQ6IHBvcG92ZXJQbGFjZW1lbnQubGVmdCArIHBvcG92ZXJCb3VuZGluZ0JveC53aWR0aCxcbiAgICBib3R0b206IHBvcG92ZXJQbGFjZW1lbnQudG9wICsgcG9wb3ZlckJvdW5kaW5nQm94LmhlaWdodCxcbiAgICBsZWZ0OiBwb3BvdmVyUGxhY2VtZW50LmxlZnQsXG4gICAgd2lkdGg6IHBvcG92ZXJCb3VuZGluZ0JveC53aWR0aCxcbiAgICBoZWlnaHQ6IHBvcG92ZXJCb3VuZGluZ0JveC5oZWlnaHRcbiAgfSwgY29tYmluZWRCb3VuZGluZ0JveCk7XG4gIHZhciBhcnJvdyA9IGFycm93Q29uZmlnID8gKF9yZWYzID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfcmVmMywgY3Jvc3NBeGlzRmlyc3RTaWRlLCBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uIC0gcG9wb3ZlclBsYWNlbWVudFtjcm9zc0F4aXNGaXJzdFNpZGVdKSwgX2RlZmluZVByb3BlcnR5KF9yZWYzLCBwcmltYXJ5QXhpc1Bvc2l0aW9uTmFtZSwgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uKSwgX3JlZjMpIDogdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGZpdDogZml0LFxuICAgIHRvcDogcG9wb3ZlclBsYWNlbWVudC50b3AsXG4gICAgbGVmdDogcG9wb3ZlclBsYWNlbWVudC5sZWZ0LFxuICAgIGFycm93OiBhcnJvdyA/IHtcbiAgICAgIGxlZnQ6IGFycm93LmxlZnQsXG4gICAgICB0b3A6IGFycm93LnRvcFxuICAgIH0gOiB1bmRlZmluZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3Jvc3NBeGlzUG9zaXRpb24oX3JlZjQpIHtcbiAgdmFyIGNyb3NzQXhpc0ZpcnN0U2lkZSA9IF9yZWY0LmNyb3NzQXhpc0ZpcnN0U2lkZSxcbiAgICAgIGNyb3NzQXhpc1NlY29uZFNpZGUgPSBfcmVmNC5jcm9zc0F4aXNTZWNvbmRTaWRlLFxuICAgICAgY3Jvc3NBeGlzRGltZW5zaW9uID0gX3JlZjQuY3Jvc3NBeGlzRGltZW5zaW9uLFxuICAgICAgcG9zaXRpb24gPSBfcmVmNC5wb3NpdGlvbixcbiAgICAgIGFsaWduID0gX3JlZjQuYWxpZ24sXG4gICAgICBidWZmZXIgPSBfcmVmNC5idWZmZXIsXG4gICAgICBvZmZzZXQgPSBfcmVmNC5vZmZzZXQsXG4gICAgICB3aW5kb3dCb3VuZGluZ0JveCA9IF9yZWY0LndpbmRvd0JvdW5kaW5nQm94LFxuICAgICAgY29udGFpbmVyQm91bmRpbmdCb3ggPSBfcmVmNC5jb250YWluZXJCb3VuZGluZ0JveCxcbiAgICAgIHBvcG92ZXJCb3VuZGluZ0JveCA9IF9yZWY0LnBvcG92ZXJCb3VuZGluZ0JveCxcbiAgICAgIGFuY2hvckJvdW5kaW5nQm94ID0gX3JlZjQuYW5jaG9yQm91bmRpbmdCb3gsXG4gICAgICBhcnJvd0NvbmZpZyA9IF9yZWY0LmFycm93Q29uZmlnO1xuICAvLyBob3cgbXVjaCBvZiB0aGUgcG9wb3ZlciBvdmVyZmxvd3MgcGFzdCBlaXRoZXIgc2lkZSBvZiB0aGUgYW5jaG9yIGlmIGl0cyBjZW50ZXJlZFxuICB2YXIgcG9wb3ZlclNpemVPbkNyb3NzQXhpcyA9IHBvcG92ZXJCb3VuZGluZ0JveFtjcm9zc0F4aXNEaW1lbnNpb25dO1xuICB2YXIgYW5jaG9yU2l6ZU9uQ3Jvc3NBeGlzID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRGltZW5zaW9uXTtcbiAgdmFyIGFuY2hvckhhbGZTaXplID0gYW5jaG9yU2l6ZU9uQ3Jvc3NBeGlzIC8gMjsgLy8gdGhlIHBvcG92ZXIncyBvcmlnaW5hbCBwb3NpdGlvbiBvbiB0aGUgY3Jvc3MtYXhpcyBpcyBkZXRlcm1pbmVkIGJ5OlxuXG4gIHZhciBjcm9zc0F4aXNQb3NpdGlvbk9yaWdpbmFsID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRmlyc3RTaWRlXSArIC8vIHdoZXJlIHRoZSBhbmNob3IgaXMgbG9jYXRlZFxuICBhbmNob3JIYWxmU2l6ZSAtIC8vIHBsdXMgaGFsZiBhbmNob3IgZGltZW5zaW9uXG4gIHBvcG92ZXJTaXplT25Dcm9zc0F4aXMgLyAyOyAvLyBsZXNzIGhhbGYgdGhlIHBvcG92ZXIgZGltZW5zaW9uXG4gIC8vIFRvIGZpdCB0aGUgY29udGVudCB3aXRoaW4gYm90aCB0aGUgd2luZG93IGFuZCBjb250YWluZXIsXG4gIC8vIGNvbXB1dGUgdGhlIHNtYWxsZXIgb2YgdGhlIHR3byBzcGFjZXMgYWxvbmcgZWFjaCBlZGdlXG5cbiAgdmFyIGNvbWJpbmVkQm91bmRpbmdCb3ggPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKHdpbmRvd0JvdW5kaW5nQm94LCBjb250YWluZXJCb3VuZGluZ0JveCk7XG4gIHZhciBhdmFpbGFibGVTcGFjZSA9IGdldEF2YWlsYWJsZVNwYWNlKGFuY2hvckJvdW5kaW5nQm94LCBjb21iaW5lZEJvdW5kaW5nQm94LCBidWZmZXIsIG9mZnNldCwgcG9zaXRpb24pO1xuICB2YXIgbWluaW11bVNwYWNlID0gYXJyb3dDb25maWcgPyBhcnJvd0NvbmZpZy5hcnJvd0J1ZmZlciA6IDA7XG4gIHZhciBjb250ZW50T3ZlcmZsb3dTaXplID0gKHBvcG92ZXJTaXplT25Dcm9zc0F4aXMgLSBhbmNob3JTaXplT25Dcm9zc0F4aXMpIC8gMjtcbiAgdmFyIGFsaWduQW1vdW50ID0gMDtcbiAgdmFyIGFsaWduRGlyZWN0aW9uID0gMTtcbiAgdmFyIGFtb3VudE9mU2hpZnROZWVkZWQgPSAwO1xuICB2YXIgc2hpZnREaXJlY3Rpb24gPSAxO1xuXG4gIGlmIChhbGlnbiAhPSBudWxsKSB7XG4gICAgLy8gbm8gYWxpZ25tZW50LCBmaW5kIGhvdyBtdWNoIHRoZSBjb250YWluZXIgYm91bmRhcnkgcmVxdWlyZXMgdGhlIGNvbnRlbnQgdG8gc2hpZnRcbiAgICBhbGlnbkRpcmVjdGlvbiA9IGFsaWduID09PSAndG9wJyB8fCBhbGlnbiA9PT0gJ2xlZnQnID8gMSA6IC0xO1xuICAgIGFsaWduQW1vdW50ID0gY29udGVudE92ZXJmbG93U2l6ZTtcbiAgICB2YXIgYWxpZ25lZE92ZXJmbG93QW1vdW50ID0gY29udGVudE92ZXJmbG93U2l6ZSArIGFsaWduQW1vdW50O1xuICAgIHZhciBuZWVkc1NoaWZ0ID0gYWxpZ25lZE92ZXJmbG93QW1vdW50ID4gYXZhaWxhYmxlU3BhY2VbcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl1dO1xuICAgIGFtb3VudE9mU2hpZnROZWVkZWQgPSBuZWVkc1NoaWZ0ID8gYWxpZ25lZE92ZXJmbG93QW1vdW50IC0gYXZhaWxhYmxlU3BhY2VbcG9zaXRpb25Db21wbGVtZW50c1thbGlnbl1dIDogMDtcbiAgICBzaGlmdERpcmVjdGlvbiA9IC0xICogYWxpZ25EaXJlY3Rpb247XG4gIH0gZWxzZSB7XG4gICAgLy8gc2hpZnRpbmcgdGhlIHBvcG92ZXIgdG8gb25lIHNpZGUgbWF5IHlpZWxkIGEgYmV0dGVyIGZpdFxuICAgIHZhciBzcGFjZUF2YWlsYWJsZU9uRmlyc3RTaWRlID0gYXZhaWxhYmxlU3BhY2VbY3Jvc3NBeGlzRmlyc3RTaWRlXTtcbiAgICB2YXIgc3BhY2VBdmFpbGFibGVPblNlY29uZFNpZGUgPSBhdmFpbGFibGVTcGFjZVtjcm9zc0F4aXNTZWNvbmRTaWRlXTtcbiAgICB2YXIgaXNTaGlmdFRvd2FyZEZpcnN0U2lkZSA9IHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUgPiBzcGFjZUF2YWlsYWJsZU9uU2Vjb25kU2lkZTtcbiAgICBzaGlmdERpcmVjdGlvbiA9IGlzU2hpZnRUb3dhcmRGaXJzdFNpZGUgPyAtMSA6IDE7IC8vIGRldGVybWluZSB3aGljaCBkaXJlY3Rpb24gaGFzIG1vcmUgcm9vbSBhbmQgdGhlIHBvcG92ZXIgc2hvdWxkIHNoaWZ0IHRvXG5cbiAgICB2YXIgbGVhc3RBdmFpbGFibGVTcGFjZSA9IE1hdGgubWluKHNwYWNlQXZhaWxhYmxlT25GaXJzdFNpZGUsIHNwYWNlQXZhaWxhYmxlT25TZWNvbmRTaWRlKTtcblxuICAgIHZhciBfbmVlZHNTaGlmdCA9IGNvbnRlbnRPdmVyZmxvd1NpemUgPiBsZWFzdEF2YWlsYWJsZVNwYWNlO1xuXG4gICAgYW1vdW50T2ZTaGlmdE5lZWRlZCA9IF9uZWVkc1NoaWZ0ID8gY29udGVudE92ZXJmbG93U2l6ZSAtIGxlYXN0QXZhaWxhYmxlU3BhY2UgOiAwO1xuICB9IC8vIHNoaWZ0IG92ZXIgdGhlIHBvcG92ZXIgaWYgbmVjZXNzYXJ5XG5cblxuICB2YXIgc2hpZnRBbW91bnQgPSBhbW91bnRPZlNoaWZ0TmVlZGVkICogc2hpZnREaXJlY3Rpb247XG4gIHZhciBjcm9zc0F4aXNQb3NpdGlvbiA9IGNyb3NzQXhpc1Bvc2l0aW9uT3JpZ2luYWwgKyBzaGlmdEFtb3VudCArIGFsaWduQW1vdW50ICogYWxpZ25EaXJlY3Rpb247IC8vIGlmIGFuIGBhcnJvd0NvbmZpZ2AgaXMgc3BlY2lmaWVkLCBmaW5kIHdoZXJlIHRvIHBvc2l0aW9uIHRoZSBhcnJvd1xuXG4gIHZhciBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuXG4gIGlmIChhcnJvd0NvbmZpZykge1xuICAgIHZhciBhcnJvd1dpZHRoID0gYXJyb3dDb25maWcuYXJyb3dXaWR0aDtcbiAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uID0gYW5jaG9yQm91bmRpbmdCb3hbY3Jvc3NBeGlzRmlyc3RTaWRlXSArIGFuY2hvckhhbGZTaXplIC0gYXJyb3dXaWR0aCAvIDI7IC8vIG1ha2Ugc3VyZSB0aGVyZSdzIGVub3VnaCBidWZmZXIgYXJvdW5kIHRoZSBhcnJvd1xuICAgIC8vIGJ5IGNhbGN1bGF0aW5nIGhvdyBob3cgbXVjaCB0aGUgYXJyb3cgd291bGQgbmVlZCB0byBtb3ZlXG4gICAgLy8gYnV0IGluc3RlYWQgb2YgbW92aW5nIHRoZSBhcnJvdywgc2hpZnQgdGhlIHBvcG92ZXIgY29udGVudFxuXG4gICAgaWYgKGNyb3NzQXhpc0Fycm93UG9zaXRpb24gPCBjcm9zc0F4aXNQb3NpdGlvbiArIG1pbmltdW1TcGFjZSkge1xuICAgICAgLy8gYXJyb3cgaXMgdG9vIGNsb3NlIHRvIHRoZSBtaW5pbXVtIHNpZGVcbiAgICAgIHZhciBkaWZmZXJlbmNlID0gY3Jvc3NBeGlzUG9zaXRpb24gKyBtaW5pbXVtU3BhY2UgLSBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uO1xuICAgICAgY3Jvc3NBeGlzUG9zaXRpb24gLT0gZGlmZmVyZW5jZTtcbiAgICB9IGVsc2UgaWYgKGNyb3NzQXhpc0Fycm93UG9zaXRpb24gKyBtaW5pbXVtU3BhY2UgKyBhcnJvd1dpZHRoID4gY3Jvc3NBeGlzUG9zaXRpb24gKyBwb3BvdmVyU2l6ZU9uQ3Jvc3NBeGlzKSB7XG4gICAgICAvLyBhcnJvdyBpcyB0b28gY2xvc2UgdG8gdGhlIG1heGltdW0gc2lkZVxuICAgICAgdmFyIGVkZ2UgPSBjcm9zc0F4aXNQb3NpdGlvbiArIHBvcG92ZXJTaXplT25Dcm9zc0F4aXM7XG5cbiAgICAgIHZhciBfZGlmZmVyZW5jZSA9IGNyb3NzQXhpc0Fycm93UG9zaXRpb24gLSAoZWRnZSAtIG1pbmltdW1TcGFjZSAtIGFycm93V2lkdGgpO1xuXG4gICAgICBjcm9zc0F4aXNQb3NpdGlvbiArPSBfZGlmZmVyZW5jZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyb3NzQXhpc1Bvc2l0aW9uOiBjcm9zc0F4aXNQb3NpdGlvbixcbiAgICBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uOiBjcm9zc0F4aXNBcnJvd1Bvc2l0aW9uXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFByaW1hcnlBeGlzUG9zaXRpb24oX3JlZjUpIHtcbiAgdmFyIHBvc2l0aW9uID0gX3JlZjUucG9zaXRpb24sXG4gICAgICBvZmZzZXQgPSBfcmVmNS5vZmZzZXQsXG4gICAgICBwb3BvdmVyQm91bmRpbmdCb3ggPSBfcmVmNS5wb3BvdmVyQm91bmRpbmdCb3gsXG4gICAgICBhbmNob3JCb3VuZGluZ0JveCA9IF9yZWY1LmFuY2hvckJvdW5kaW5nQm94LFxuICAgICAgYXJyb3dDb25maWcgPSBfcmVmNS5hcnJvd0NvbmZpZztcbiAgLy8gaWYgcG9zaXRpb25pbmcgdG8gdGhlIHRvcCBvciBsZWZ0LCB0aGUgdGFyZ2V0IHBvc2l0aW9uIGRlY3JlYXNlc1xuICAvLyBmcm9tIHRoZSBhbmNob3IncyB0b3Agb3IgbGVmdCwgb3RoZXJ3aXNlIHRoZSBwb3NpdGlvbiBhZGRzIHRvIHRoZSBhbmNob3Inc1xuICB2YXIgaXNPZmZzZXREZWNyZWFzaW5nID0gcG9zaXRpb24gPT09ICd0b3AnIHx8IHBvc2l0aW9uID09PSAnbGVmdCc7XG4gIHZhciBwcmltYXJ5QXhpc0RpbWVuc2lvbiA9IHJlbGF0ZWREaW1lbnNpb25bcG9zaXRpb25dOyAvLyBcInRvcFwiIC0+IFwiaGVpZ2h0XCJcblxuICB2YXIgcG9wb3ZlclNpemVPblByaW1hcnlBeGlzID0gcG9wb3ZlckJvdW5kaW5nQm94W3ByaW1hcnlBeGlzRGltZW5zaW9uXTsgLy8gc3RhcnQgYXQgdGhlIHRvcCBvciBsZWZ0IGVkZ2Ugb2YgdGhlIGFuY2hvciBlbGVtZW50XG5cbiAgdmFyIHByaW1hcnlBeGlzUG9zaXRpb25OYW1lID0gZGltZW5zaW9uUG9zaXRpb25BdHRyaWJ1dGVbcHJpbWFyeUF4aXNEaW1lbnNpb25dOyAvLyBcImhlaWdodFwiIC0+IFwidG9wXCJcblxuICB2YXIgYW5jaG9yRWRnZU9yaWdpbiA9IGFuY2hvckJvdW5kaW5nQm94W3ByaW1hcnlBeGlzUG9zaXRpb25OYW1lXTsgLy8gZmluZCB0aGUgcG9wb3ZlciBwb3NpdGlvbiBvbiB0aGUgcHJpbWFyeSBheGlzXG5cbiAgdmFyIGFuY2hvclNpemVPblByaW1hcnlBeGlzID0gYW5jaG9yQm91bmRpbmdCb3hbcHJpbWFyeUF4aXNEaW1lbnNpb25dO1xuICB2YXIgcHJpbWFyeUF4aXNPZmZzZXQgPSBpc09mZnNldERlY3JlYXNpbmcgPyBwb3BvdmVyU2l6ZU9uUHJpbWFyeUF4aXMgOiBhbmNob3JTaXplT25QcmltYXJ5QXhpcztcbiAgdmFyIGNvbnRlbnRPZmZzZXQgPSAob2Zmc2V0ICsgcHJpbWFyeUF4aXNPZmZzZXQpICogKGlzT2Zmc2V0RGVjcmVhc2luZyA/IC0xIDogMSk7XG4gIHZhciBwcmltYXJ5QXhpc1Bvc2l0aW9uID0gYW5jaG9yRWRnZU9yaWdpbiArIGNvbnRlbnRPZmZzZXQ7XG4gIHZhciBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb247XG5cbiAgaWYgKGFycm93Q29uZmlnKSB7XG4gICAgcHJpbWFyeUF4aXNBcnJvd1Bvc2l0aW9uID0gaXNPZmZzZXREZWNyZWFzaW5nID8gcG9wb3ZlclNpemVPblByaW1hcnlBeGlzIDogMDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcHJpbWFyeUF4aXNQb3NpdGlvbjogcHJpbWFyeUF4aXNQb3NpdGlvbixcbiAgICBwcmltYXJ5QXhpc0Fycm93UG9zaXRpb246IHByaW1hcnlBeGlzQXJyb3dQb3NpdGlvblxuICB9O1xufVxuLyoqXG4gKiBGaW5kcyB0aGUgY2xpZW50IHBpeGVsIGNvb3JkaW5hdGUgb2YgZWFjaCBlZGdlIGZvciB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIGJveCxcbiAqIGFuZCB0aGUgYm91bmRpbmcgYm94J3Mgd2lkdGggJiBoZWlnaHRcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7e3RvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlcn19XG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEJvdW5kaW5nQm94KGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge1xuICAgIHRvcDogcmVjdC50b3AsXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICB3aWR0aDogcmVjdC53aWR0aFxuICB9O1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBhdmFpbGFibGUgY29udGVudCBzcGFjZSBiZXR3ZWVuIGFuY2hvciBhbmQgY29udGFpbmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGFuY2hvckJvdW5kaW5nQm94IENsaWVudCBib3VuZGluZyBib3ggb2YgdGhlIGFuY2hvciBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gY29udGFpbmVyQm91bmRpbmdCb3ggQ2xpZW50IGJvdW5kaW5nIGJveCBvZiB0aGUgY29udGFpbmVyIGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBidWZmZXIgTWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBwb3BvdmVyIGFuZCB0aGUgYm91bmRpbmcgY29udGFpbmVyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBhbmNob3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBvZmZzZXRTaWRlIFNpZGUgdGhlIG9mZnNldCBuZWVkcyB0byBiZSBhcHBsaWVkIHRvLCBvbmVcbiAqICBvZiBbXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl1cbiAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGJvdHRvbTogbnVtYmVyLCBsZWZ0OiBudW1iZXJ9fVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdmFpbGFibGVTcGFjZShhbmNob3JCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gsIGJ1ZmZlciwgb2Zmc2V0LCBvZmZzZXRTaWRlKSB7XG4gIHZhciBfZ2V0QnVmZmVyVmFsdWVzMyA9IGdldEJ1ZmZlclZhbHVlcyhidWZmZXIpLFxuICAgICAgX2dldEJ1ZmZlclZhbHVlczQgPSBfc2xpY2VkVG9BcnJheShfZ2V0QnVmZmVyVmFsdWVzMywgNCksXG4gICAgICB0b3BCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFswXSxcbiAgICAgIHJpZ2h0QnVmZmVyID0gX2dldEJ1ZmZlclZhbHVlczRbMV0sXG4gICAgICBib3R0b21CdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFsyXSxcbiAgICAgIGxlZnRCdWZmZXIgPSBfZ2V0QnVmZmVyVmFsdWVzNFszXTtcblxuICByZXR1cm4ge1xuICAgIHRvcDogYW5jaG9yQm91bmRpbmdCb3gudG9wIC0gY29udGFpbmVyQm91bmRpbmdCb3gudG9wIC0gdG9wQnVmZmVyIC0gKG9mZnNldFNpZGUgPT09ICd0b3AnID8gb2Zmc2V0IDogMCksXG4gICAgcmlnaHQ6IGNvbnRhaW5lckJvdW5kaW5nQm94LnJpZ2h0IC0gYW5jaG9yQm91bmRpbmdCb3gucmlnaHQgLSByaWdodEJ1ZmZlciAtIChvZmZzZXRTaWRlID09PSAncmlnaHQnID8gb2Zmc2V0IDogMCksXG4gICAgYm90dG9tOiBjb250YWluZXJCb3VuZGluZ0JveC5ib3R0b20gLSBhbmNob3JCb3VuZGluZ0JveC5ib3R0b20gLSBib3R0b21CdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ2JvdHRvbScgPyBvZmZzZXQgOiAwKSxcbiAgICBsZWZ0OiBhbmNob3JCb3VuZGluZ0JveC5sZWZ0IC0gY29udGFpbmVyQm91bmRpbmdCb3gubGVmdCAtIGxlZnRCdWZmZXIgLSAob2Zmc2V0U2lkZSA9PT0gJ2xlZnQnID8gb2Zmc2V0IDogMClcbiAgfTtcbn1cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGZpdCAob3ZlcmxhcCkgb2YgdGhlIGNvbnRlbnQgd2l0aGluIHRoZSBjb250YWluZXIsIGZpdCBpcyBpbiByYW5nZSAwLjAgPT4gMS4wXG4gKiBAcGFyYW0gY29udGVudEJvdW5kaW5nQm94IGJvdW5kaW5nIGJveCBvZiBjb250ZW50IHRvIGNhbGN1bGF0ZSBmaXQgZm9yXG4gKiBAcGFyYW0gY29udGFpbmVyQm91bmRpbmdCb3ggYm91bmRpbmcgYm94IG9mIGNvbnRhaW5lclxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzaWJsZUZpdChjb250ZW50Qm91bmRpbmdCb3gsIGNvbnRhaW5lckJvdW5kaW5nQm94KSB7XG4gIHZhciBpbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3RCb3VuZGluZ0JveGVzKGNvbnRlbnRCb3VuZGluZ0JveCwgY29udGFpbmVyQm91bmRpbmdCb3gpO1xuXG4gIGlmIChpbnRlcnNlY3Rpb24ubGVmdCA+IGludGVyc2VjdGlvbi5yaWdodCB8fCBpbnRlcnNlY3Rpb24udG9wID4gaW50ZXJzZWN0aW9uLnRvcCkge1xuICAgIC8vIHRoZXJlIGlzIG5vIGludGVyc2VjdGlvbiwgdGhlIGJveGVzIGFyZSBjb21wbGV0ZWx5IHNlcGFyYXRlZCBvbiBhdCBsZWFzdCBvbmUgYXhpc1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIGludGVyc2VjdGlvbkFyZWEgPSAoaW50ZXJzZWN0aW9uLnJpZ2h0IC0gaW50ZXJzZWN0aW9uLmxlZnQpICogKGludGVyc2VjdGlvbi5ib3R0b20gLSBpbnRlcnNlY3Rpb24udG9wKTtcbiAgdmFyIGNvbnRlbnRBcmVhID0gKGNvbnRlbnRCb3VuZGluZ0JveC5yaWdodCAtIGNvbnRlbnRCb3VuZGluZ0JveC5sZWZ0KSAqIChjb250ZW50Qm91bmRpbmdCb3guYm90dG9tIC0gY29udGVudEJvdW5kaW5nQm94LnRvcCk7XG4gIHJldHVybiBpbnRlcnNlY3Rpb25BcmVhIC8gY29udGVudEFyZWE7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGludGVyc2VjdGlvbiBzcGFjZSBiZXR3ZWVuIHR3byBib3VuZGluZyBib3hlc1xuICpcbiAqIEBwYXJhbSBmaXJzdEJveFxuICogQHBhcmFtIHNlY29uZEJveFxuICogQHJldHVybnMge0V1aUNsaWVudFJlY3R9XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdEJvdW5kaW5nQm94ZXMoZmlyc3RCb3gsIHNlY29uZEJveCkge1xuICB2YXIgdG9wID0gTWF0aC5tYXgoZmlyc3RCb3gudG9wLCBzZWNvbmRCb3gudG9wKTtcbiAgdmFyIHJpZ2h0ID0gTWF0aC5taW4oZmlyc3RCb3gucmlnaHQsIHNlY29uZEJveC5yaWdodCk7XG4gIHZhciBib3R0b20gPSBNYXRoLm1pbihmaXJzdEJveC5ib3R0b20sIHNlY29uZEJveC5ib3R0b20pO1xuICB2YXIgbGVmdCA9IE1hdGgubWF4KGZpcnN0Qm94LmxlZnQsIHNlY29uZEJveC5sZWZ0KTtcbiAgdmFyIGhlaWdodCA9IE1hdGgubWF4KGJvdHRvbSAtIHRvcCwgMCk7XG4gIHZhciB3aWR0aCA9IE1hdGgubWF4KHJpZ2h0IC0gbGVmdCwgMCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiB0b3AsXG4gICAgcmlnaHQ6IHJpZ2h0LFxuICAgIGJvdHRvbTogYm90dG9tLFxuICAgIGxlZnQ6IGxlZnQsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgd2lkdGg6IHdpZHRoXG4gIH07XG59XG4vKipcbiAqIFJldHVybnMgdGhlIHRvcC1tb3N0IGRlZmluZWQgei1pbmRleCBpbiB0aGUgZWxlbWVudCdzIGFuY2VzdG9yIGhpZXJhcmNoeVxuICogcmVsYXRpdmUgdG8gdGhlIGB0YXJnZXRgIGVsZW1lbnQ7IGlmIG5vIHotaW5kZXggaXMgZGVmaW5lZCwgcmV0dXJucyAwXG4gKiBAcGFyYW0gZWxlbWVudCB7SFRNTEVsZW1lbnR9XG4gKiBAcGFyYW0gY291c2luIHtIVE1MRWxlbWVudH1cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRaSW5kZXgoZWxlbWVudCwgY291c2luKSB7XG4gIC8qKlxuICAgKiBmaW5kaW5nIHRoZSB6LWluZGV4IG9mIGBlbGVtZW50YCBpcyBub3QgdGhlIGZ1bGwgc3RvcnlcbiAgICogaXRzIHRoZSBDU1Mgc3RhY2tpbmcgY29udGV4dCB0aGF0IGlzIGltcG9ydGFudFxuICAgKiB0YWtlIHRoaXMgRE9NIGZvciBleGFtcGxlOlxuICAgKiBib2R5XG4gICAqICAgc2VjdGlvblt6LWluZGV4OiAxMDAwXVxuICAgKiAgICAgcFt6LWluZGV4OiA1MDBdXG4gICAqICAgICAgIGJ1dHRvblxuICAgKiAgIGRpdlxuICAgKlxuICAgKiB3aGF0IHotaW5kZXggZG9lcyB0aGUgYGRpdmAgbmVlZCB0byBkaXNwbGF5IG5leHQgdG8gYGJ1dHRvbmA/XG4gICAqIHRoZSBgZGl2YCBhbmQgYHNlY3Rpb25gIGFyZSB3aGVyZSB0aGUgc3RhY2tpbmcgY29udGV4dCBzcGxpdHNcbiAgICogc28gYGRpdmAgbmVlZHMgdG8gY29weSBgc2VjdGlvbmAncyB6LWluZGV4IGluIG9yZGVyIHRvXG4gICAqIGFwcGVhciBuZXh0IHRvIC8gb3ZlciBgYnV0dG9uYFxuICAgKlxuICAgKiBjYWxjdWxhdGUgdGhpcyBieSBzdGFydGluZyBhdCBgYnV0dG9uYCBhbmQgZmluZGluZyBpdHMgb2Zmc2V0UGFyZW50c1xuICAgKiB0aGVuIHdhbGsgdGhlIHBhcmVudHMgZnJvbSB0b3AgLT4gZG93biB1bnRpbCB0aGUgc3RhY2tpbmcgY29udGV4dFxuICAgKiBzcGxpdCBpcyBmb3VuZCwgb3IgaWYgdGhlcmUgaXMgbm8gc3BsaXQgdGhlbiBhIHNwZWNpZmljIHotaW5kZXggaXMgdW5pbXBvcnRhbnRcbiAgICovXG4gIC8vIGJ1aWxkIHRoZSBhcnJheSBvZiB0aGUgZWxlbWVudCArIGl0cyBvZmZzZXQgcGFyZW50c1xuICB2YXIgbm9kZXNUb0luc3BlY3QgPSBbXTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIG5vZGVzVG9JbnNwZWN0LnB1c2goZWxlbWVudCk7IC8vIEFGQUlDVCB0aGlzIGlzIGEgdmFsaWQgY2FzdCAtIHRoZSBsaWJkZWZzIGFwcGVhciB3cm9uZ1xuXG4gICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OyAvLyBzdG9wIGlmIHRoZXJlIGlzIG5vIHBhcmVudFxuXG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfSAvLyBzdG9wIGlmIHRoZSBwYXJlbnQgY29udGFpbnMgdGhlIHJlbGF0ZWQgZWxlbWVudFxuICAgIC8vIGFzIHRoaXMgaXMgdGhlIHotaW5kZXggYW5jZXN0b3JcblxuXG4gICAgaWYgKGVsZW1lbnQuY29udGFpbnMoY291c2luKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9IC8vIHJldmVyc2UgdGhlIG5vZGVzIHRvIHdhbGsgZnJvbSB0b3AgLT4gZWxlbWVudFxuXG5cbiAgbm9kZXNUb0luc3BlY3QucmV2ZXJzZSgpO1xuXG4gIGZvciAodmFyIF9pMiA9IDAsIF9ub2Rlc1RvSW5zcGVjdCA9IG5vZGVzVG9JbnNwZWN0OyBfaTIgPCBfbm9kZXNUb0luc3BlY3QubGVuZ3RoOyBfaTIrKykge1xuICAgIHZhciBub2RlID0gX25vZGVzVG9JbnNwZWN0W19pMl07XG4gICAgLy8gZ2V0IHRoaXMgbm9kZSdzIHotaW5kZXggY3NzIHZhbHVlXG4gICAgdmFyIHpJbmRleCA9IHdpbmRvdy5kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKG5vZGUpLmdldFByb3BlcnR5VmFsdWUoJ3otaW5kZXgnKTsgLy8gaWYgdGhlIHotaW5kZXggaXMgbm90IGEgbnVtYmVyIChlLmcuIFwiYXV0b1wiKSByZXR1cm4gbnVsbCwgZWxzZSB0aGUgdmFsdWVcblxuICAgIHZhciBwYXJzZWRaSW5kZXggPSBwYXJzZUludCh6SW5kZXgsIDEwKTtcblxuICAgIGlmICghaXNOYU4ocGFyc2VkWkluZGV4KSkge1xuICAgICAgcmV0dXJuIHBhcnNlZFpJbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbnZhciBHUk9VUF9OVU1FUklDID0gL14oW1xcZC5dKykoc3xtcykvO1xuXG5mdW5jdGlvbiBnZXRNaWxsaXNlY29uZHModmFsdWUsIHVuaXQpIHtcbiAgLy8gR2l2ZW4gdGhlIHJlZ2V4IG1hdGNoIGFuZCBjYXB0dXJlIGdyb3Vwcywgd2UgY2FuIGFzc3VtZSBgdW5pdGAgdG8gYmUgZWl0aGVyICdzJyBvciAnbXMnXG4gIHZhciBtdWx0aXBsaWVyID0gdW5pdCA9PT0gJ3MnID8gMTAwMCA6IDE7XG4gIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKSAqIG11bHRpcGxpZXI7XG59IC8vIEZpbmQgQ1NTIGB0cmFuc2l0aW9uLWR1cmF0aW9uYCBhbmQgYHRyYW5zaXRpb24tZGVsYXlgIGludGVydmFsc1xuLy8gYW5kIHJldHVybiB0aGUgdmFsdWUgb2YgZWFjaCBjb21wdXRlZCBwcm9wZXJ0eSBpbiAnbXMnXG5cblxuZXhwb3J0IHZhciBnZXRUcmFuc2l0aW9uVGltaW5ncyA9IGZ1bmN0aW9uIGdldFRyYW5zaXRpb25UaW1pbmdzKGVsZW1lbnQpIHtcbiAgdmFyIGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgdmFyIGNvbXB1dGVkRHVyYXRpb24gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zaXRpb24tZHVyYXRpb24nKTtcbiAgdmFyIGR1cmF0aW9uTWF0Y2hBcnJheSA9IGNvbXB1dGVkRHVyYXRpb24ubWF0Y2goR1JPVVBfTlVNRVJJQyk7XG4gIHZhciBkdXJhdGlvbk1hdGNoID0gZHVyYXRpb25NYXRjaEFycmF5ID8gZ2V0TWlsbGlzZWNvbmRzKGR1cmF0aW9uTWF0Y2hBcnJheVsxXSwgZHVyYXRpb25NYXRjaEFycmF5WzJdKSA6IDA7XG4gIHZhciBjb21wdXRlZERlbGF5ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCd0cmFuc2l0aW9uLWRlbGF5Jyk7XG4gIHZhciBkZWxheU1hdGNoQXJyYXkgPSBjb21wdXRlZERlbGF5Lm1hdGNoKEdST1VQX05VTUVSSUMpO1xuICB2YXIgZGVsYXlNYXRjaCA9IGRlbGF5TWF0Y2hBcnJheSA/IGdldE1pbGxpc2Vjb25kcyhkZWxheU1hdGNoQXJyYXlbMV0sIGRlbGF5TWF0Y2hBcnJheVsyXSkgOiAwO1xuICByZXR1cm4ge1xuICAgIGR1cmF0aW9uTWF0Y2g6IGR1cmF0aW9uTWF0Y2gsXG4gICAgZGVsYXlNYXRjaDogZGVsYXlNYXRjaFxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNFbGVtZW50Tm9kZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50Lm5vZGVUeXBlID09PSBkb2N1bWVudC5FTEVNRU5UX05PREU7XG59IC8vIFVzZXMgYGdldFRyYW5zaXRpb25UaW1pbmdzYCB0byBmaW5kIHRoZSB0b3RhbCB0cmFuc2l0aW9uIHRpbWUgZm9yXG4vLyBhbGwgZWxlbWVudHMgdGFyZ2V0ZWQgYnkgYSBNdXRhdGlvbk9ic2VydmVyIGNhbGxiYWNrXG5cblxuZXhwb3J0IHZhciBnZXRXYWl0RHVyYXRpb24gPSBmdW5jdGlvbiBnZXRXYWl0RHVyYXRpb24ocmVjb3Jkcykge1xuICByZXR1cm4gcmVjb3Jkcy5yZWR1Y2UoZnVuY3Rpb24gKHdhaXREdXJhdGlvbiwgcmVjb3JkKSB7XG4gICAgLy8gb25seSBjaGVjayBmb3IgQ1NTIHRyYW5zaXRpb24gdmFsdWVzIGZvciBFTEVNRU5UIG5vZGVzXG4gICAgaWYgKGlzRWxlbWVudE5vZGUocmVjb3JkLnRhcmdldCkpIHtcbiAgICAgIHZhciBfZ2V0VHJhbnNpdGlvblRpbWluZ3MgPSBnZXRUcmFuc2l0aW9uVGltaW5ncyhyZWNvcmQudGFyZ2V0KSxcbiAgICAgICAgICBkdXJhdGlvbk1hdGNoID0gX2dldFRyYW5zaXRpb25UaW1pbmdzLmR1cmF0aW9uTWF0Y2gsXG4gICAgICAgICAgZGVsYXlNYXRjaCA9IF9nZXRUcmFuc2l0aW9uVGltaW5ncy5kZWxheU1hdGNoO1xuXG4gICAgICB3YWl0RHVyYXRpb24gPSBNYXRoLm1heCh3YWl0RHVyYXRpb24sIGR1cmF0aW9uTWF0Y2ggKyBkZWxheU1hdGNoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2FpdER1cmF0aW9uO1xuICB9LCAwKTtcbn07IC8vIFVzZXMgYHJlcXVlc3RBbmltYXRpb25GcmFtZWAgdG8gcGVyZm9ybSBhIGdpdmVuIGNhbGxiYWNrIGFmdGVyIGEgc3BlY2lmaWVkIHdhaXRpbmcgcGVyaW9kXG5cbmV4cG9ydCB2YXIgcGVyZm9ybU9uRnJhbWUgPSBmdW5jdGlvbiBwZXJmb3JtT25GcmFtZSh3YWl0RHVyYXRpb24sIHRvUGVyZm9ybSkge1xuICBpZiAod2FpdER1cmF0aW9uID4gMCkge1xuICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHZhciBlbmRUaW1lID0gc3RhcnRUaW1lICsgd2FpdER1cmF0aW9uO1xuXG4gICAgdmFyIG9uRnJhbWUgPSBmdW5jdGlvbiBvbkZyYW1lKCkge1xuICAgICAgdG9QZXJmb3JtKCk7XG5cbiAgICAgIGlmIChlbmRUaW1lID4gRGF0ZS5ub3coKSkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcbiAgfVxufTsgLy8gQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjb21iaW5pbmcgdGhlIHJlc3VsdCBvZiAnZ2V0V2FpdER1cmF0aW9uJyBkaXJlY3RseSB3aXRoICdwZXJmb3JtT25GcmFtZSdcblxuZXhwb3J0IHZhciBnZXREdXJhdGlvbkFuZFBlcmZvcm1PbkZyYW1lID0gZnVuY3Rpb24gZ2V0RHVyYXRpb25BbmRQZXJmb3JtT25GcmFtZShyZWNvcmRzLCB0b1BlcmZvcm0pIHtcbiAgcGVyZm9ybU9uRnJhbWUoZ2V0V2FpdER1cmF0aW9uKHJlY29yZHMpLCB0b1BlcmZvcm0pO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuLypcbiAqIEZvciB1c2Ugd2hlbiBhIGNvbXBvbmVudCBuZWVkcyB0byBzZXQgYHJlZmAgb2JqZWN0cyBmcm9tIG11bHRpcGxlIHNvdXJjZXMuXG4gKiBGb3IgaW5zdGFuY2UsIGlmIGEgY29tcG9uZW50IGFjY2VwdHMgYSBgcmVmYCBwcm9wIGJ1dCBhbHNvIG5lZWRzIGl0cyBvd25cbiAqIGxvY2FsIHJlZmVyZW5jZSBmb3IgY2FsY3VsYXRpb25zLCBldGMuXG4gKiBUaGlzIGhvb2sgaGFuZGxlcyBzZXR0aW5nIG11bHRpcGxlIGByZWZgcyBvZiBhbnkgYXZhaWxhYmxlIGByZWZgIHR5cGVcbiAqIGluIGEgc2luZ2xlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5cbmV4cG9ydCB2YXIgdXNlQ29tYmluZWRSZWZzID0gZnVuY3Rpb24gdXNlQ29tYmluZWRSZWZzKHJlZnMpIHtcbiAgcmV0dXJuIHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIHJlZnMuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgICBpZiAoIXJlZikgcmV0dXJuO1xuXG4gICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZWYobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWYuY3VycmVudCA9IG5vZGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtyZWZzXSk7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInR5cGVcIiwgXCJidXR0b25SZWZcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImVsZW1lbnRcIiwgXCJiYXNlQ2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaWRlXCIsIFwiY29sb3JcIiwgXCJzaXplXCIsIFwiZmlsbFwiLCBcImlzRGlzYWJsZWRcIiwgXCJpc0xvYWRpbmdcIiwgXCJpc1NlbGVjdGVkXCIsIFwiY29udGVudFByb3BzXCIsIFwidGV4dFByb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwibWluV2lkdGhcIiwgXCJzdHlsZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZCBhcyBFdWlCdXR0b25Db250ZW50IH0gZnJvbSAnLi9fYnV0dG9uX2NvbnRlbnRfZGVwcmVjYXRlZCc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBjb2xvclRvQ2xhc3NOYW1lTWFwID0ge1xuICBwcmltYXJ5OiAnLS1wcmltYXJ5JyxcbiAgYWNjZW50OiAnLS1hY2NlbnQnLFxuICBzdWNjZXNzOiAnLS1zdWNjZXNzJyxcbiAgd2FybmluZzogJy0td2FybmluZycsXG4gIGRhbmdlcjogJy0tZGFuZ2VyJyxcbiAgZ2hvc3Q6ICctLWdob3N0JyxcbiAgdGV4dDogJy0tdGV4dCdcbn07XG5leHBvcnQgdmFyIENPTE9SUyA9IGtleXNPZihjb2xvclRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgc2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBzOiAnLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG4vKipcbiAqIEV4dGVuZHMgRXVpQnV0dG9uQ29udGVudFByb3BzIHdoaWNoIHByb3ZpZGVzXG4gKiBgaWNvblR5cGVgLCBgaWNvblNpZGVgLCBhbmQgYHRleHRQcm9wc2BcbiAqL1xuXG4vKipcbiAqIEV1aUJ1dHRvbiBpcyBsYXJnZWx5IHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgcmVsZXZhbnQgcHJvcHNcbiAqIGFuZCB0aGUgbG9naWMgZm9yIGVsZW1lbnQtc3BlY2lmaWMgYXR0cmlidXRlc1xuICovXG5leHBvcnQgdmFyIEV1aUJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUJ1dHRvbihfcmVmKSB7XG4gIHZhciBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIF9kaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGlzSHJlZlZhbGlkID0gIWhyZWYgfHwgdmFsaWRhdGVIcmVmKGhyZWYpO1xuICB2YXIgZGlzYWJsZWQgPSBfZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgaXNEaXNhYmxlZCA9IF9pc0Rpc2FibGVkIHx8ICFpc0hyZWZWYWxpZDtcbiAgdmFyIGJ1dHRvbklzRGlzYWJsZWQgPSByZXN0LmlzTG9hZGluZyB8fCBpc0Rpc2FibGVkIHx8IGRpc2FibGVkO1xuICB2YXIgZWxlbWVudCA9IGhyZWYgJiYgIWlzRGlzYWJsZWQgPyAnYScgOiAnYnV0dG9uJztcbiAgdmFyIGVsZW1lbnRQcm9wcyA9IHt9OyAvLyBQcm9wcyBmb3IgYWxsIGVsZW1lbnRzXG5cbiAgZWxlbWVudFByb3BzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBlbGVtZW50UHJvcHMpLCB7fSwge1xuICAgIGlzRGlzYWJsZWQ6IGJ1dHRvbklzRGlzYWJsZWRcbiAgfSk7IC8vIEVsZW1lbnQtc3BlY2lmaWMgYXR0cmlidXRlc1xuXG4gIGlmIChlbGVtZW50ID09PSAnYnV0dG9uJykge1xuICAgIGVsZW1lbnRQcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZWxlbWVudFByb3BzKSwge30sIHtcbiAgICAgIGRpc2FibGVkOiBidXR0b25Jc0Rpc2FibGVkXG4gICAgfSk7XG4gIH1cblxuICB2YXIgcmVsT2JqID0ge307XG5cbiAgaWYgKGhyZWYgJiYgIWJ1dHRvbklzRGlzYWJsZWQpIHtcbiAgICByZWxPYmouaHJlZiA9IGhyZWY7XG4gICAgcmVsT2JqLnJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICAgIHJlbE9iai50YXJnZXQgPSB0YXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgcmVsT2JqLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgcmV0dXJuICgvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXBhc2NhbC1jYXNlXG4gICAgX19fRW1vdGlvbkpTWChFdWlCdXR0b25EaXNwbGF5RGVwcmVjYXRlZCwgX2V4dGVuZHMoe1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIGJhc2VDbGFzc05hbWU6IFwiZXVpQnV0dG9uXCIsXG4gICAgICByZWY6IGJ1dHRvblJlZlxuICAgIH0sIGVsZW1lbnRQcm9wcywgcmVsT2JqLCByZXN0KSlcbiAgKTtcbn07XG5FdWlCdXR0b24ucHJvcFR5cGVzID0ge1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBNYWtlIGJ1dHRvbiBhIHNvbGlkIGNvbG9yIGZvciBwcm9taW5lbmNlXG4gICAgICovXG4gIGZpbGw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJhY2NlbnRcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiLCBcImRhbmdlclwiLCBcImdob3N0XCIsIFwidGV4dFwiXSksXG5cbiAgLyoqXG4gICAgICogVXNlIHNpemUgYHNgIGluIGNvbmZpbmVkIHNwYWNlc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFVzZSBzaXplIGBzYCBpbiBjb25maW5lZCBzcGFjZXNcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEV4dGVuZHMgdGhlIGJ1dHRvbiB0byAxMDAlIHdpZHRoXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRXh0ZW5kcyB0aGUgYnV0dG9uIHRvIDEwMCUgd2lkdGhcbiAgICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBtaW5pbXVtIHdpZHRoXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWluaW11bSB3aWR0aFxuICAgICAqL1xuICBtaW5XaWR0aDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBbnkgYHR5cGVgIGFjY2VwdGVkIGJ5IEV1aUljb25cbiAgICAgKi9cbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICovXG4gIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8c3Bhbi8+IHdyYXBwaW5nIHRoZSBjb250ZW50J3MgdGV4dCAob25seSBpZiB0aGUgY2hpbGRyZW4gaXMgYSBgc3RyaW5nYClcbiAgICAgKiBJdCBkb2Vzbid0IGFwcGx5IHRvIHRoZSBpY29uLlxuICAgICAqL1xuICB0ZXh0UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWY6IFByb3BUeXBlcy5hbnksXG4gICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICB9KSxcbiAgaWNvblNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55XG59O1xuRXVpQnV0dG9uLmRpc3BsYXlOYW1lID0gJ0V1aUJ1dHRvbic7XG5cbi8qKlxuICogKkRFUFJFQ0FURUQqXG4gKiBFdWlCdXR0b25EaXNwbGF5IGlzIGFuIGludGVybmFsLW9ubHkgY29tcG9uZW50IHVzZWQgZm9yIGRpc3BsYXlpbmdcbiAqIGFueSBlbGVtZW50IGFzIGEgYnV0dG9uLlxuICogTk9URTogVGhpcyBjb21wb25lbnQgKm11c3QqIGJlIGJlbG93IEV1aUJ1dHRvbiBpbiB0aGUgZmlsZSBhbmRcbiAqIEV1aUJ1dHRvbiBtdXN0IGFsc28gc2V0IGEgZGlzcGxheU5hbWUgZm9yIHJlYWN0LWRvY2dlbi10eXBlc2NyaXB0XG4gKiB0byBjb3JyZWN0bHkgc2V0IEV1aUJ1dHRvbidzIGRvY2dlbkluZm8gYW5kIGRpc3BsYXkgYSBwcm9wcyB0YWJsZS5cbiAqIFRoaXMgY29tcG9uZW50IGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlIG5ldyBFdWlCdXR0b25EaXNwbGF5XG4gKiB0aGF0IGNhbiBiZSBmb3VuZCBpbiBgc3JjL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbl9kaXNwbGF5L19idXR0b25fZGlzcGxheS50c3hgXG4gKi9cbmV4cG9ydCB2YXIgRXVpQnV0dG9uRGlzcGxheURlcHJlY2F0ZWQgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZjIsIHJlZikge1xuICB2YXIgX3JlZjIkZWxlbWVudCA9IF9yZWYyLmVsZW1lbnQsXG4gICAgICBlbGVtZW50ID0gX3JlZjIkZWxlbWVudCA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmMiRlbGVtZW50LFxuICAgICAgYmFzZUNsYXNzTmFtZSA9IF9yZWYyLmJhc2VDbGFzc05hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgaWNvblR5cGUgPSBfcmVmMi5pY29uVHlwZSxcbiAgICAgIF9yZWYyJGljb25TaWRlID0gX3JlZjIuaWNvblNpZGUsXG4gICAgICBpY29uU2lkZSA9IF9yZWYyJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmMiRpY29uU2lkZSxcbiAgICAgIF9yZWYyJGNvbG9yID0gX3JlZjIuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYyJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmMiRjb2xvcixcbiAgICAgIF9yZWYyJHNpemUgPSBfcmVmMi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYyJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYyJHNpemUsXG4gICAgICBfcmVmMiRmaWxsID0gX3JlZjIuZmlsbCxcbiAgICAgIGZpbGwgPSBfcmVmMiRmaWxsID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGZpbGwsXG4gICAgICBpc0Rpc2FibGVkID0gX3JlZjIuaXNEaXNhYmxlZCxcbiAgICAgIGlzTG9hZGluZyA9IF9yZWYyLmlzTG9hZGluZyxcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmMi5pc1NlbGVjdGVkLFxuICAgICAgY29udGVudFByb3BzID0gX3JlZjIuY29udGVudFByb3BzLFxuICAgICAgdGV4dFByb3BzID0gX3JlZjIudGV4dFByb3BzLFxuICAgICAgZnVsbFdpZHRoID0gX3JlZjIuZnVsbFdpZHRoLFxuICAgICAgbWluV2lkdGggPSBfcmVmMi5taW5XaWR0aCxcbiAgICAgIHN0eWxlID0gX3JlZjIuc3R5bGUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQyKTtcblxuICB2YXIgYnV0dG9uSXNEaXNhYmxlZCA9IGlzTG9hZGluZyB8fCBpc0Rpc2FibGVkO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoYmFzZUNsYXNzTmFtZSwgY29sb3IgJiYgY29sb3JUb0NsYXNzTmFtZU1hcFtjb2xvcl0gPyBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lKS5jb25jYXQoY29sb3JUb0NsYXNzTmFtZU1hcFtjb2xvcl0pIDogXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSkuY29uY2F0KGNvbG9yVG9DbGFzc05hbWVNYXAucHJpbWFyeSksIHNpemUgJiYgc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdID8gXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSkuY29uY2F0KHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSkgOiBudWxsLCBmaWxsICYmIFwiXCIuY29uY2F0KGJhc2VDbGFzc05hbWUsIFwiLS1maWxsXCIpLCBmdWxsV2lkdGggJiYgXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSwgXCItLWZ1bGxXaWR0aFwiKSwgYnV0dG9uSXNEaXNhYmxlZCAmJiBcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lLCBcIi1pc0Rpc2FibGVkXCIpLCBjbGFzc05hbWUpO1xuICAvKipcbiAgICogTm90IGNoYW5naW5nIHRoZSBjb250ZW50IG9yIHRleHQgY2xhc3MgbmFtZXMgdG8gbWF0Y2ggYmFzZUNsYXNzTmFtZSB5ZXQsXG4gICAqIGFzIGl0IGlzIGEgbWFqb3IgYnJlYWtpbmcgY2hhbmdlLlxuICAgKi9cblxuICB2YXIgY29udGVudENsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25fX2NvbnRlbnQnLCBjb250ZW50UHJvcHMgJiYgY29udGVudFByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciB0ZXh0Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbl9fdGV4dCcsIHRleHRQcm9wcyAmJiB0ZXh0UHJvcHMuY2xhc3NOYW1lKTtcblxuICB2YXIgaW5uZXJOb2RlID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25Db250ZW50LCBfZXh0ZW5kcyh7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgaWNvblR5cGU6IGljb25UeXBlLFxuICAgIGljb25TaWRlOiBpY29uU2lkZSxcbiAgICB0ZXh0UHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGV4dFByb3BzKSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogdGV4dENsYXNzTmFtZXNcbiAgICB9KVxuICB9LCBjb250ZW50UHJvcHMsIHtcbiAgICAvLyBjbGFzc05hbWUgaGFzIHRvIGNvbWUgbGFzdCB0byBvdmVycmlkZSBjb250ZW50UHJvcHMuY2xhc3NOYW1lXG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NOYW1lc1xuICB9KSwgY2hpbGRyZW4pO1xuXG4gIHZhciBjYWxjdWxhdGVkU3R5bGUgPSBzdHlsZTtcblxuICBpZiAobWluV2lkdGggIT09IHVuZGVmaW5lZCB8fCBtaW5XaWR0aCAhPT0gbnVsbCkge1xuICAgIGNhbGN1bGF0ZWRTdHlsZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY2FsY3VsYXRlZFN0eWxlKSwge30sIHtcbiAgICAgIG1pbldpZHRoOiBtaW5XaWR0aFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGVsZW1lbnQsIF9vYmplY3RTcHJlYWQoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBzdHlsZTogY2FsY3VsYXRlZFN0eWxlLFxuICAgIGRpc2FibGVkOiBlbGVtZW50ID09PSAnYnV0dG9uJyAmJiBidXR0b25Jc0Rpc2FibGVkLFxuICAgICdhcmlhLXByZXNzZWQnOiBlbGVtZW50ID09PSAnYnV0dG9uJyA/IGlzU2VsZWN0ZWQgOiB1bmRlZmluZWQsXG4gICAgcmVmOiByZWZcbiAgfSwgcmVzdCksIGlubmVyTm9kZSk7XG59KTtcbkV1aUJ1dHRvbkRpc3BsYXlEZXByZWNhdGVkLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIE1ha2UgYnV0dG9uIGEgc29saWQgY29sb3IgZm9yIHByb21pbmVuY2VcbiAgICAgKi9cbiAgZmlsbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKSxcblxuICAvKipcbiAgICAgKiBVc2Ugc2l6ZSBgc2AgaW4gY29uZmluZWQgc3BhY2VzXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBFeHRlbmRzIHRoZSBidXR0b24gdG8gMTAwJSB3aWR0aFxuICAgICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IG1pbmltdW0gd2lkdGhcbiAgICAgKi9cbiAgbWluV2lkdGg6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuICBzdHlsZTogUHJvcFR5cGVzLmFueSxcbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogUHJvdmlkZSBhIHZhbGlkIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSBlbGVtZW50IGFzXG4gICAgICAgKi9cbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImFcIiwgXCJidXR0b25cIiwgXCJzcGFuXCIsIFwibGFiZWxcIl0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBQcm92aWRlIHRoZSBjb21wb25lbnQncyBiYXNlIGNsYXNzIG5hbWUgdG8gYnVpbGQgdGhlIGNsYXNzIGxpc3Qgb25cbiAgICAgICAqL1xuICBiYXNlQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07XG5FdWlCdXR0b25EaXNwbGF5RGVwcmVjYXRlZC5kaXNwbGF5TmFtZSA9ICdFdWlCdXR0b25EaXNwbGF5JzsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwidGV4dFByb3BzXCIsIFwiaXNMb2FkaW5nXCIsIFwiaWNvblR5cGVcIiwgXCJpY29uU2l6ZVwiLCBcImljb25TaWRlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGljb25TaWRlVG9DbGFzc05hbWVNYXAgPSB7XG4gIGxlZnQ6IG51bGwsXG4gIHJpZ2h0OiAnZXVpQnV0dG9uQ29udGVudC0taWNvblJpZ2h0J1xufTtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IGtleXNPZihpY29uU2lkZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQnV0dG9uQ29udGVudERlcHJlY2F0ZWQgPSBmdW5jdGlvbiBFdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICB0ZXh0UHJvcHMgPSBfcmVmLnRleHRQcm9wcyxcbiAgICAgIF9yZWYkaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgICBpc0xvYWRpbmcgPSBfcmVmJGlzTG9hZGluZyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzTG9hZGluZyxcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIF9yZWYkaWNvblNpemUgPSBfcmVmLmljb25TaXplLFxuICAgICAgaWNvblNpemUgPSBfcmVmJGljb25TaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJGljb25TaXplLFxuICAgICAgX3JlZiRpY29uU2lkZSA9IF9yZWYuaWNvblNpZGUsXG4gICAgICBpY29uU2lkZSA9IF9yZWYkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkaWNvblNpZGUsXG4gICAgICBjb250ZW50UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICAvLyBBZGQgYW4gaWNvbiB0byB0aGUgYnV0dG9uIGlmIG9uZSBleGlzdHMuXG4gIHZhciBidXR0b25JY29uO1xuXG4gIGlmIChpc0xvYWRpbmcpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUJ1dHRvbkNvbnRlbnRfX3NwaW5uZXJcIixcbiAgICAgIHNpemU6IGljb25TaXplXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaWNvblR5cGUpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQnV0dG9uQ29udGVudF9faWNvblwiLFxuICAgICAgdHlwZTogaWNvblR5cGUsXG4gICAgICBzaXplOiBpY29uU2l6ZSxcbiAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG5cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBjb250ZW50Q2xhc3NOYW1lcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkNvbnRlbnQnLCBpY29uU2lkZSA/IGljb25TaWRlVG9DbGFzc05hbWVNYXBbaWNvblNpZGVdIDogbnVsbCwgY29udGVudFByb3BzICYmIGNvbnRlbnRQcm9wcy5jbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe30sIGNvbnRlbnRQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY29udGVudENsYXNzTmFtZXNcbiAgfSksIGJ1dHRvbkljb24sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHRleHRQcm9wcywgY2hpbGRyZW4pKTtcbn07XG5FdWlCdXR0b25Db250ZW50RGVwcmVjYXRlZC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAqIEl0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGljb24uXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BY2Nlc3NpYmlsaXR5ID0gZnVuY3Rpb24gRXVpSWNvbkFjY2Vzc2liaWxpdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDBhOCA4IDAgMTEwIDE2QTggOCAwIDAxOCAwem0wIDFhNyA3IDAgMTAwIDE0QTcgNyAwIDAwOCAxem0zLjk3NCA0LjM0MmEuNS41IDAgMDEtLjIzMy41OTZsLS4wODMuMDM2TDkgNi44NnYyLjU1OWwuOTc0IDIuOTIzYS41LjUgMCAwMS0uMjMzLjU5NmwtLjA4My4wMzZhLjUuNSAwIDAxLS41OTYtLjIzM2wtLjAzNi0uMDgzLTEtM0w4IDkuNWwtLjAyNi4xNTgtMSAzYS41LjUgMCAwMS0uOTctLjIyOGwuMDIyLS4wODhMNyA5LjQxNlY2Ljg2bC0yLjY1OC0uODg2YS41LjUgMCAwMS4yMjgtLjk3bC4wODguMDIyTDcuNTgzIDZoLjgzM2wyLjkyNi0uOTc0YS41LjUgMCAwMS42MzIuMzE2ek04IDNhMSAxIDAgMTEwIDIgMSAxIDAgMDEwLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFjY2Vzc2liaWxpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFnZ3JlZ2F0ZSA9IGZ1bmN0aW9uIEV1aUljb25BZ2dyZWdhdGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi41IDJhLjUuNSAwIDEwMCAxIC41LjUgMCAwMDAtMXptMC0xYTEuNSAxLjUgMCAwMTEuNDE1IDFoMS45MDhhMS41IDEuNSAwIDAxMS4zOTMuOTQzTDguODM5IDdIMTIuNWEuNS41IDAgMDEwIDFIOC44MzlsLTEuNjIzIDQuMDU3QTEuNSAxLjUgMCAwMTUuODIzIDEzSDMuOTE1YTEuNSAxLjUgMCAxMTAtMWgxLjkwOGEuNS41IDAgMDAuNDY0LS4zMTRMNy43NjEgOEgzLjkxNWExLjUgMS41IDAgMTEwLTFINy43Nkw2LjI4NyAzLjMxNEEuNS41IDAgMDA1LjgyMyAzSDMuOTE1QTEuNSAxLjUgMCAxMTIuNSAxem0wIDExYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6TTMgNy41YS41LjUgMCAxMC0xIDAgLjUuNSAwIDAwMSAwem05LjM1NC0zLjM1NGEuNS41IDAgMDAtLjcwOC43MDhMMTMuNzkzIDdhLjcwNy43MDcgMCAwMTAgMWwtMi4xNDcgMi4xNDZhLjUuNSAwIDAwLjcwOC43MDhMMTQuNSA4LjcwN2ExLjcwNyAxLjcwNyAwIDAwMC0yLjQxNGwtMi4xNDYtMi4xNDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFnZ3JlZ2F0ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQWxlcnQgPSBmdW5jdGlvbiBFdWlJY29uQWxlcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy41OSAxMC4wNTlMNy4zNSA1LjE4aDEuM0w4LjQgMTAuMDZoLS44MXptLjM5NCAxLjkwMWEuNjEuNjEgMCAwMS0uNDQ4LS4xODYuNjA2LjYwNiAwIDAxLS4xODYtLjQ0NGMwLS4xNzQuMDYyLS4zMjMuMTg2LS40NDZhLjYxNC42MTQgMCAwMS40NDgtLjE4NGMuMTY5IDAgLjMxNS4wNi40NC4xODIuMTI0LjEyMi4xODYuMjcuMTg2LjQ0OGEuNi42IDAgMDEtLjE4OS40NDYuNjA3LjYwNyAwIDAxLS40MzcuMTg0ek0yIDE0YTEgMSAwIDAxLS44NzgtMS40NzlsNi0xMWExIDEgMCAwMTEuNzU2IDBsNiAxMUExIDEgMCAwMTE0IDE0SDJ6bTAtMWgxMkw4IDIgMiAxM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQWxlcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFuYWx5emVFdmVudCA9IGZ1bmN0aW9uIEV1aUljb25BbmFseXplRXZlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggOS4xNjlMMiA1LjI1djYuMTdsNiAzLjQyOCA2LTMuNDI4VjUuMjVMOCA5LjE3ek0xNSA0djhsLTcgNC03LTRWNGw3LTQgNyA0em0tMS40MjguMzM2TDggMS4xNTIgMi40MjggNC4zMzYgOCA3Ljk3NGw1LjU3Mi0zLjYzOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQW5hbHl6ZUV2ZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BbmFseXplRXZlbnQgPSBmdW5jdGlvbiBFdWlJY29uQW5hbHl6ZUV2ZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNCxcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEzLjkyNCA0LjAxM2EuNjA1LjYwNSAwIDAwLS4yMjgtLjIzNkw3LjMwNC4wODJhLjYwNy42MDcgMCAwMC0uNjA4IDBMLjMwNCAzLjc3N0EuNjIuNjIgMCAwMDAgNC4zMDR2Ny4zOTJjMCAuMjE3LjExNi40MTguMzA0LjUyN2w2LjM5MiAzLjY5NWMuMTg4LjExLjQyLjExLjYwOCAwbDYuMzkyLTMuNjk1YS42MDkuNjA5IDAgMDAuMzA0LS41MjdWNC4zMDRhLjYwNy42MDcgMCAwMC0uMDc2LS4yOTF6TTEgNS4wNzl2Ni4zOTFsNiAzLjQ3IDYtMy40N1Y1LjA4TDcuMjUyIDguNDMyIDcgOC41NzlsLS4yNTItLjE0N0wxIDUuMDc5em0xMS40NzYtLjg1Mkw3IDEuMDYgMS41MjQgNC4yMjcgNyA3LjQybDUuNDc2LTMuMTk0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BbmFseXplRXZlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFubm90YXRpb24gPSBmdW5jdGlvbiBFdWlJY29uQW5ub3RhdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNi41YTQuNSA0LjUgMCAxMTUgNC40NzNWMTZIN3YtNS4wMjdBNC41IDQuNSAwIDAxMyA2LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFubm90YXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwbVRyYWNlID0gZnVuY3Rpb24gRXVpSWNvbkFwbVRyYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAwaDEyYTIgMiAwIDAxMiAydjEyYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjJhMSAxIDAgMDAtMS0xSDJ6bS41IDJoMTBhLjUuNSAwIDExMCAxaC0xMGEuNS41IDAgMDEwLTF6bTEgM2g2YS41LjUgMCAwMTAgMWgtNmEuNS41IDAgMDEwLTF6bTIgM2g0YS41LjUgMCAwMTAgMWgtNGEuNS41IDAgMDEwLTF6bTMgM2g1YS41LjUgMCAxMTAgMWgtNWEuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwbVRyYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBBZGREYXRhID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFkZERhdGEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMiAzMEgwVjNoMTIuNTdsMyA1SDMydjIyek0yIDI4aDI4VjEwSDE0LjQzbC0zLTVIMnYyM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEgMThoLTR2LTRoLTJ2NGgtNHYyaDR2NGgydi00aDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFkZERhdGE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3MgPSBmdW5jdGlvbiBFdWlJY29uQXBwQWR2YW5jZWRTZXR0aW5ncyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMi45MDkgMjYuMTgyaDEuOTM5djQuODQ4SDIuOTA5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC44NDggMTYuNjJWMEgyLjkxdjE2LjYyYTMuODc5IDMuODc5IDAgMTAxLjk0IDB6bS0uOTcgNS42ODNhMS45NCAxLjk0IDAgMTEwLTMuODc5IDEuOTQgMS45NCAwIDAxMCAzLjg3OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTQuNTQ1IDE2LjQ4NWgxLjkzOVYzMS4wM2gtMS45Mzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi40ODUgNi45MjRWMGgtMS45NHY2LjkyNGEzLjg3OSAzLjg3OSAwIDEwMS45NCAwem0tLjk3IDUuNjgyYTEuOTQgMS45NCAwIDExMC0zLjg3OSAxLjk0IDEuOTQgMCAwMTAgMy44OHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjYuMTgyIDI2LjE4MmgxLjkzOXY0Ljg0OGgtMS45Mzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOC4xMjEgMTYuNjJWMGgtMS45NHYxNi42MmEzLjg3OSAzLjg3OSAwIDEwMS45NCAwem0tLjk3IDUuNjgzYTEuOTQgMS45NCAwIDExMC0zLjg3OSAxLjk0IDEuOTQgMCAwMTAgMy44Nzl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFkdmFuY2VkU2V0dGluZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFnZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFnZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMSAyLjgyTDE2IC4wMzggMTEgMi44MnYyLjI4OWw1LTIuNzgyIDUgMi43ODJ2LTIuMjl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIxIDcuMjgyTDE2IDQuNWwtNSAyLjc4MlY5LjU3bDUtMi43ODEgNSAyLjc4MVY3LjI4MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgNS4wNDVMMiA3LjgyN3YxNS41NzdsMTQgNy43ODggMTQtNy43ODhWNy44MjdsLTUtMi43ODJ2Mi4yODlsMyAxLjY2OXYxMy4yMjVsLTEyIDYuNjc2LTEyLTYuNjc2VjkuMDAzbDMtMS42NjlWNS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMjIgMTIuNUwxNiA5bC02IDMuNXY3bDYgMy41IDYtMy41di03em0tOS45NzQgMS4yMDVMMTYgMTEuMzg3bDMuOTc0IDIuMzE4djQuNTlMMTYgMjAuNjEzbC0zLjk3NC0yLjMxOHYtNC41OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQWdlbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEFwbSA9IGZ1bmN0aW9uIEV1aUljb25BcHBBcG0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDEwaDR2MkgxVjFoMzB2NmgtMlYzSDN2N3ptMjYgMTl2LTZoMnY4SDE4di04aDJ2Nmg5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0zMSAxMEg5djExaDEyYzUuNTIzIDAgMTAtNC40NzcgMTAtMTB2LTF6bS0xMCA5SDExdi03aDE3LjkzOEE4LjAwMSA4LjAwMSAwIDAxMjEgMTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEFwbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQXBwU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkFwcEFwcFNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNS41IDExLjkxNUwyNyA1LjI3OSAxOS41LjkzOGE3LjAwMiA3LjAwMiAwIDAwLTcgMGwtOCA0LjYyQTcgNyAwIDAwMSAxMS42MnY5LjIzN2E3IDcgMCAwMDMuNSA2LjA2MWw3LjUgNC4zM1YxNy45OGE3IDcgMCAwMTMuNS02LjA2M3pNMTAgMjcuNzg1di05LjgwOGE5IDkgMCAwMTQuNS03Ljc5M2w4LjUwMy00LjkxTDE4LjUgMi42NzJhNS4wMDMgNS4wMDMgMCAwMC01IDBsLTggNC42MTlBNSA1IDAgMDAzIDExLjYydjkuMjM4YTUgNSAwIDAwMi41IDQuMzNsNC41IDIuNTk4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTguNDA5IDEzLjU1YTcuMDg5IDcuMDg5IDAgMDExLjAzNSAxLjcxMUE2LjkzIDYuOTMgMCAwMTIwIDE3Ljk4djEzLjI3bDcuNS00LjMzYTcgNyAwIDAwMy41LTYuMDYxdi05LjIzOWE2Ljk5MiA2Ljk5MiAwIDAwLTEuNTg3LTQuNDIxTDE4LjQwOSAxMy41NXptMi43NzcuNzA1QTguOTMzIDguOTMzIDAgMDEyMiAxNy45Nzl2OS44MDdsNC41LTIuNTk4YTUgNSAwIDAwMi41LTQuMzNWMTEuNjJjMC0uNTg4LS4xMDYtMS4xNjEtLjMwMy0xLjdsLTcuNTExIDQuMzM1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBBcHBTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEF1ZGl0YmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBBdWRpdGJlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE1IDBoMnYzMmgtMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgMzJoMTN2LTJIMlYyaDExVjBIMHpNMTkgMHYyaDExdjI4SDE5djJoMTNWMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQXVkaXRiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBDYW52YXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwQ2FudmFzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk03IDE3aDJ2N0g3ek0xMiAxNGgydjEwaC0yek0xNyAxNmgydjhoLTJ6TTIyIDE0aDN2MmgtM3pNMjIgMThoM3YyaC0zek0yMiAyMmgzdjJoLTN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC43MyAyNGE2LjQ3IDYuNDcgMCAwMS40NS0yLjE5Yy4zMzctLjkuNTItMS44NS41NC0yLjgxYTguNTUgOC41NSAwIDAwLS41NC0yLjgxIDYuNDcgNi40NyAwIDAxLS40NS0yLjE5IDkuMiA5LjIgMCAwMS42Mi0yLjQ5Yy41My0xLjU3IDEuMDgtMy4xOS4wOC00LjItMS0xLjAxLTIuNDEtLjQ0LTMuNTIuMDVhNS41OSA1LjU5IDAgMDEtMi4wOS42NCA1LjMgNS4zIDAgMDEtLjU5IDBMMTYgLjI4IDYuNzcgOGE1LjMgNS4zIDAgMDEtLjU5IDAgNS41OSA1LjU5IDAgMDEtMi4wOS0uNjVDMyA2Ljg3IDEuNiA2LjI1LjU3IDcuMzFjLTEuMDMgMS4wNi0uNDUgMi42My4wOCA0LjJBOS4yIDkuMiAwIDAxMS4yNyAxNGE2LjQ3IDYuNDcgMCAwMS0uNDUgMi4xOUE4LjU1IDguNTUgMCAwMC4yOCAxOWMuMDIuOTYuMjAzIDEuOTEuNTQgMi44MUE2LjQ3IDYuNDcgMCAwMTEuMjcgMjRhOS4yIDkuMiAwIDAxLS42MiAyLjQ5Yy0uNTMgMS41Ny0xLjA4IDMuMTktLjA4IDQuMi4zNTMuMzguODUyLjU5IDEuMzcuNThhNS42NyA1LjY3IDAgMDAyLjE1LS42M0E1LjU5IDUuNTkgMCAwMTYuMTggMzBhNy4xMyA3LjEzIDAgMDEyLjI5LjQ3IDggOCAwIDAwMi42Mi41MyA3LjM3IDcuMzcgMCAwMDIuNDctLjUxQTcuMTQgNy4xNCAwIDAxMTYgMzBhNi4yNCA2LjI0IDAgMDEyLjE0LjQ1IDggOCAwIDAwMi43Ny41NSA4LjA4IDguMDggMCAwMDIuNzctLjU1IDYuMjQgNi4yNCAwIDAxMi4xNC0uNDUgNS41OSA1LjU5IDAgMDEyLjA5LjY1YzEuMTEuNDkgMi40OSAxLjExIDMuNTIuMDUgMS4wMy0xLjA2LjQ1LTIuNjMtLjA4LTQuMmE5LjIgOS4yIDAgMDEtLjYyLTIuNXpNMjEuMTcgN2gtLjI2YTggOCAwIDAwLTIuNzcuNTVBNi4yNCA2LjI0IDAgMDExNiA4YTYuMjQgNi4yNCAwIDAxLTIuMTQtLjQ1QTggOCAwIDAwMTEuMDkgN2gtLjI2TDE2IDIuNzIgMjEuMTcgN3ptOC44OSAyMi4yN2E0LjQyIDQuNDIgMCAwMS0xLjM0LS40NiA3LjA4IDcuMDggMCAwMC0yLjktLjgyIDguMTQgOC4xNCAwIDAwLTIuNzguNTUgNi4xMyA2LjEzIDAgMDEtMi4xMy40NSA2LjI0IDYuMjQgMCAwMS0yLjE0LS40NUE4IDggMCAwMDE2IDI4YTkgOSAwIDAwLTMuMDguNiA1Ljc0IDUuNzQgMCAwMS0xLjgzLjQgNi4zNiA2LjM2IDAgMDEtMi0uNDNBOC43MiA4LjcyIDAgMDA2LjE4IDI4YTcuMDggNy4wOCAwIDAwLTIuOS44MiA5LjY1IDkuNjUgMCAwMS0xLjI4LjUyIDYuMDggNi4wOCAwIDAxLjUyLTIuMjFjLjQwMy0xIC42NS0yLjA1NS43My0zLjEzYTguNTUgOC41NSAwIDAwLS41NC0yLjgxQTYuNDcgNi40NyAwIDAxMi4yNyAxOWE2LjQ3IDYuNDcgMCAwMS40NC0yLjE5Yy4zMzctLjkuNTItMS44NS41NC0yLjgxYTEwLjQ4IDEwLjQ4IDAgMDAtLjcyLTMuMTMgOSA5IDAgMDEtLjU5LTIuMTZIMmMuNDQ3LjEuODguMjU1IDEuMjkuNDZhNy4wOCA3LjA4IDAgMDAyLjkuODJBOC4xNCA4LjE0IDAgMDA5IDkuNDQgNi4xMyA2LjEzIDAgMDExMS4wOSA5YTYuMTMgNi4xMyAwIDAxMi4xMy40NUE4LjE0IDguMTQgMCAwMDE2IDEwYTguMTQgOC4xNCAwIDAwMi43OC0uNTVBNi4xMyA2LjEzIDAgMDEyMC45MSA5YTYuMTMgNi4xMyAwIDAxMi4wOS40NCA4LjE0IDguMTQgMCAwMDIuNzguNTUgNy4wOCA3LjA4IDAgMDAyLjktLjgyQTkuNjUgOS42NSAwIDAxMzAgOC42NmE2LjA4IDYuMDggMCAwMS0uNTIgMi4yMWMtLjQwMyAxLS42NSAyLjA1NS0uNzMgMy4xMy4wMi45Ni4yMDMgMS45MS41NCAyLjgxYTYuNDcgNi40NyAwIDAxLjQ0IDIuMTkgNi40NyA2LjQ3IDAgMDEtLjQ0IDIuMTkgOC41NSA4LjU1IDAgMDAtLjU0IDIuODFjLjA3OCAxLjA3NC4zMiAyLjEzLjcyIDMuMTNhOSA5IDAgMDEuNTkgMi4xNnYtLjAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDYW52YXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcENhc2VzID0gZnVuY3Rpb24gRXVpSWNvbkFwcENhc2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIyLjUgMjRhNS41IDUuNSAwIDEwMC0xMSA1LjUgNS41IDAgMDAwIDExem0wIDJhNy41IDcuNSAwIDEwMC0xNSA3LjUgNy41IDAgMDAwIDE1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzAuMjkzIDI3LjcwN2wtNC00IDEuNDE0LTEuNDE0IDQgNC0xLjQxNCAxLjQxNHpNNiA0SDJ2MjdoMjV2LTNoLTJ2MUg0VjZoMlY0em0xOSA2aDJWNGgtNHYyaDJ2NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNi4zODEgMy4wMjRsLjUzOCAxLjE1OGgyLjI3NGwuNjM2IDIuNTQ1SDkuNjhsLjYzNy0yLjU0NWgyLjU1OGwuNTM4LTEuMTU4Yy4yOTItLjYzLjk1NS0xLjAyNCAxLjQ4NC0xLjAyNC41MyAwIDEuMTkzLjM5NCAxLjQ4NSAxLjAyNHptNi4wMSA1LjcwM2wtMS42MzYtNi41NDVoLTIuNTZDMTcuNi44OTggMTYuMjYyIDAgMTQuODk3IDBjLTEuMzY0IDAtMi43MDMuODk4LTMuMjk5IDIuMTgySDguNzU1TDcuMTE4IDguNzI3aDE1LjI3M3pNNyAxNWg2di0ySDd2MnptNiA1SDd2LTJoNnYyem0tNiA1aDZ2LTJIN3YyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBDYXNlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQ29kZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBDb2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMjc2IDI5bC41OTQgMkgwbDcuNjIxLTE0LjI5LjgxMSAyLjczTDMuMzMzIDI5aDcuOTQzek0yOC45MiAzMWwtNC45ODctMTYuNTk4QTE2IDE2IDAgMDA4LjY4OCAzbDEuOCA2SDguNEw2IDFoMi42MDdhMTggMTggMCAwMTE3LjI0MSAxMi44MjhMMzEgMzFoLTIuMDh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTEyLjAzNyAxNC4wMkwxNi40OTIgMjloNi44MjdsLTIuMzMzLTcuODQ5YTEwIDEwIDAgMDAtOC45NDktNy4xM3pNOS4zNSAxMmgyLjA1YTEyIDEyIDAgMDExMS41MDMgOC41ODFMMjYgMzFIMTVMOS4zNSAxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwQ29kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwQ29uc29sZSA9IGZ1bmN0aW9uIEV1aUljb25BcHBDb25zb2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgOUgzYTMgMyAwIDAxLTMtM1YzYTMgMyAwIDAxMy0zaDI2YTMgMyAwIDAxMyAzdjNhMyAzIDAgMDEtMyAzek0zIDJhMSAxIDAgMDAtMSAxdjNhMSAxIDAgMDAxIDFoMjZhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjkgMzJIM2EzIDMgMCAwMS0zLTNWMTRhMyAzIDAgMDEzLTNoMjZhMyAzIDAgMDEzIDN2MTVhMyAzIDAgMDEtMyAzek0zIDEzYTEgMSAwIDAwLTEgMXYxNWExIDEgMCAwMDEgMWgyNmExIDEgMCAwMDEtMVYxNGExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMjkgMTcuNzFsMy4zIDMuMjktMy4zIDMuMjkgMS40MiAxLjQyIDQuNy00LjcxLTQuNy00Ljcxek0xNSAyNGg5djJoLTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENvbnNvbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uID0gZnVuY3Rpb24gRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAwdjE2aDguN2w1LjMtNlYwSDB6bTIgMmgxMHY3SDd2NUgyVjJ6bTguNDUgOUw5IDEyLjY0VjExaDEuNDV6TTE4IDE2djE2aDguN2w1LjMtNlYxNkgxOHptMiAyaDEwdjdoLTV2NWgtNVYxOHptOC40NSA5TDI3IDI4LjY0VjI3aDEuNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTUgMThIM2MwIDYuMDc1IDQuOTI1IDExIDExIDExaDJ2LTJoLTJhOSA5IDAgMDEtOS05ek0xOCAzaC0ydjJoMmE5IDkgMCAwMTkgOWgyYzAtNi4wNzUtNC45MjUtMTEtMTEtMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcENyb3NzQ2x1c3RlclJlcGxpY2F0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBEYXNoYm9hcmQgPSBmdW5jdGlvbiBFdWlJY29uQXBwRGFzaGJvYXJkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgOUgzYTMgMyAwIDAxLTMtM1YzYTMgMyAwIDAxMy0zaDI2YTMgMyAwIDAxMyAzdjNhMyAzIDAgMDEtMyAzek0zIDJhMSAxIDAgMDAtMSAxdjNhMSAxIDAgMDAxIDFoMjZhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTIgMjBIM2EzIDMgMCAwMS0zLTN2LTNhMyAzIDAgMDEzLTNoOWEzIDMgMCAwMTMgM3YzYTMgMyAwIDAxLTMgM3ptLTktN2ExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDEgMWg5YTEgMSAwIDAwMS0xdi0zYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMzFIM2EzIDMgMCAwMS0zLTN2LTNhMyAzIDAgMDEzLTNoOWEzIDMgMCAwMTMgM3YzYTMgMyAwIDAxLTMgM3ptLTktN2ExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDEgMWg5YTEgMSAwIDAwMS0xdi0zYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOSAzMWgtOWEzIDMgMCAwMS0zLTNWMTRhMyAzIDAgMDEzLTNoOWEzIDMgMCAwMTMgM3YxNGEzIDMgMCAwMS0zIDN6bS05LTE4YTEgMSAwIDAwLTEgMXYxNGExIDEgMCAwMDEgMWg5YTEgMSAwIDAwMS0xVjE0YTEgMSAwIDAwLTEtMWgtOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRGFzaGJvYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBEZXZ0b29scyA9IGZ1bmN0aW9uIEV1aUljb25BcHBEZXZ0b29scyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDI4aC0ydi04LjQ5bC42LS4yNkE5IDkgMCAwMDIxIDMuNTJWMTFIMTFWMy41MmE5IDkgMCAwMDEuNCAxNS43M2wuNi4yNlYyOGgtMnYtNy4yMUExMSAxMSAwIDAxMTEuNi45MkwxMyAuMzFWOWg2Vi4zMWwxLjQuNjFhMTEgMTEgMCAwMS42IDE5Ljg3VjI4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMSAzMGgxMHYySDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBEZXZ0b29sczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwRGlzY292ZXIgPSBmdW5jdGlvbiBFdWlJY29uQXBwRGlzY292ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTguMzMgMjMuNjdsNC43OS0xMC41NSAxMC41NS00Ljc5LTQuNzkgMTAuNTUtMTAuNTUgNC43OXptNi4zLTlsLTIuMjggNSA1LTIuMjggMi4yOC01LTUgMi4yOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBDNy4xNjMgMCAwIDcuMTYzIDAgMTZzNy4xNjMgMTYgMTYgMTYgMTYtNy4xNjMgMTYtMTZBMTYgMTYgMCAwMDE2IDB6bTEgMjkuOTVWMjhoLTJ2MS45NUExNCAxNCAwIDAxMi4wNSAxN0g0di0ySDIuMDVBMTQgMTQgMCAwMTE1IDIuMDVWNGgyVjIuMDVBMTQgMTQgMCAwMTI5Ljk1IDE1SDI4djJoMS45NUExNCAxNCAwIDAxMTcgMjkuOTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcERpc2NvdmVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBFbXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwRW1zKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0zIDIyaDN2MkgxVjFoMjN2NWgtMlYzSDN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4yMjggMjljMS40OTItMS42NzggMS4zNTMtMi44NTkuMDA5LTUuNjU0LS4wNDktLjEtLjA0OS0uMS0uMDk3LS4yMDMtMS4zNjktMi44NTUtMS42MjYtNC40OTEtLjMyNS02LjU4MiAyLjc5Ni00LjQ5OCA5LjUxNC0yLjY0MiAxNC4xODUgMi4zMTdWMTBIMTB2MTloNS4yMjh6bTIuNDcgMEgyOXYtNi45ODNjLTMuODgtNS40MDYtMTAuMzc2LTcuNzk1LTEyLjQ4Ny00LjQtLjgzIDEuMzM2LS42NjkgMi4zNy40MyA0LjY2MmwuMDk3LjJjMS4zNTIgMi44MTQgMS43MzEgNC42My42NTkgNi41MjF6TTMxIDh2MjNIOFY4aDIzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBFbXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEZpbGViZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEZpbGViZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk04IDE4aDE2djJIOHpNOCAxM2g5djJIOHpNOCAyM2gxNnYySDh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS40MSAwSDVhMyAzIDAgMDAtMyAzdjI2YTMgMyAwIDAwMyAzaDIyYTMgMyAwIDAwMy0zVjguNTlMMjEuNDEgMHpNMjIgMy40MUwyNi41OSA4SDIyVjMuNDF6TTI3IDMwSDVhMSAxIDAgMDEtMS0xVjNhMSAxIDAgMDExLTFoMTV2OGg4djE5YTEgMSAwIDAxLTEgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwRmlsZWJlYXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEZsZWV0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEZsZWV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi45OTYgMTguNjM2TDAgMjAuNDM0djYuMTMybDYgMy42IDUtMyA1IDMgNS0zIDUgMyA2LTMuNnYtNi4xMzJsLTUtM3YtNWwtNS0zdi01bC02LTMuNi02IDMuNnYyLjgzMmwyIC4wMzNWNS41NjZsNC0yLjQgNCAyLjR2My44NjhsLTEuOTk2IDEuMTk3IDEgMS43MzNMMjEgMTEuMTY2bDQgMi40djMuODY4bC00IDIuNC0yLjI1Ny0xLjM1NC0uOTcxIDEuNzVMMjAgMjEuNTY1djMuODY4bC00IDIuNC00LTIuNHYtMS43bC0yLS4wMzN2MS43MzNsLTQgMi40LTQtMi40di0zLjg2OGwxLjk5Ni0xLjE5Ny0xLTEuNzMzek0yMiAyNS40MzR2LTMuODY4bDQtMi40IDQgMi40djMuODY4bC00IDIuNC00LTIuNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTEgMjIuMTY2bC02LTMuNnYtNi4xMzJsNi0zLjYgNiAzLjZ2Ni4xMzJsLTYgMy42em00LTQuNzMydi0zLjg2OGwtNC0yLjQtNCAyLjR2My44NjhsNCAyLjQgNC0yLjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEZsZWV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBHaXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwR2lzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOS4wMTQgMjMuODlsMi4yOTYgMS4xNDVMMTYgMzIuMTAxLjUzIDI0Ljk2MWwyLjQ5LTEuMDU2IDIuNDUzIDEuMTMyLS4wMDMuMDAyTDE2IDI5Ljg5OWwxMC42OS00LjkzNC0uMDAzLS4wMDEgMi4zMjctMS4wNzR6bS00Ljk3Mi03LjQ4Mmw3LjI2OCAzLjYyN0wxNiAyNy4xMDEuNTMgMTkuOTYxbDcuNjY4LTMuMjUyYy4zOTIuNDg2LjgzOCAxLjAyIDEuMzQgMS42MDRMNS40NyAyMC4wMzkgMTYgMjQuODk5bDEwLjY5LTQuOTM0LTMuOTU0LTEuOTczYy40OTMtLjU4LjkyOC0xLjEwNyAxLjMwNi0xLjU4NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDlhMiAyIDAgMTAtNCAwIDIgMiAwIDAwNCAwem0yIDBhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tMy4yNjggMTIuNjgxbC0uNzMyLjc4Ny0uNzMyLS43ODdjLTMuNTU3LTMuODI0LTUuODE3LTYuNDYyLTYuODEtNy45NkE4Ljc0NiA4Ljc0NiAwIDAxNyA4Ljg3NUM3IDMuOTcgMTEuMDMzIDAgMTYgMHM5IDMuOTcgOSA4Ljg3NWE4Ljc0NiA4Ljc0NiAwIDAxLTEuNDU5IDQuODQ2Yy0uOTkyIDEuNDk4LTMuMjUyIDQuMTM2LTYuODA5IDcuOTZ6bTUuMTQyLTkuMDY0QTYuNzQ3IDYuNzQ3IDAgMDAyMyA4Ljg3NUMyMyA1LjA4MSAxOS44NyAyIDE2IDJTOSA1LjA4MSA5IDguODc1YzAgMS4zNDkuMzk0IDIuNjM2IDEuMTI2IDMuNzQyLjg0NiAxLjI3NyAyLjgxMiAzLjU5MyA1Ljg3NCA2LjkxMiAzLjA2Mi0zLjMyIDUuMDI4LTUuNjM1IDUuODc0LTYuOTEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBHaXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcEdyYXBoID0gZnVuY3Rpb24gRXVpSWNvbkFwcEdyYXBoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNCAyMGE0IDQgMCAxMTAtOCA0IDQgMCAwMTAgOHptMC02YTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00em0tOC4yLTUuNjJBNCA0IDAgMTExOCAxLjA2YTQgNCAwIDAxLTIuMiA3LjMyem0wLTZhMiAyIDAgMTAuMDEgMGgtLjAxem0uMDEgMjkuMjRhNCA0IDAgMTEtLjA4My04IDQgNCAwIDAxLjA4MyA4em0wLTZhMiAyIDAgMTAuMzkgMCAyIDIgMCAwMC0uNCAwaC4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDE3di0yaC02LjE0YTQgNCAwIDAwLS44Ni0xLjY0bDIuMzEtMy40NC0xLjY4LTEuMTItMi4zMSAzLjQ0QTQgNCAwIDAwOCAxMmE0IDQgMCAxMDAgOCA0IDQgMCAwMDEuMzItLjI0bDIuMzEgMy40NCAxLjY2LTEuMTJMMTEgMTguNjRhNCA0IDAgMDAuODYtMS42NEgxOHpNNiAxNmEyIDIgMCAxMTQgMCAyIDIgMCAwMS00IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEdyYXBoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBHcm9rID0gZnVuY3Rpb24gRXVpSWNvbkFwcEdyb2soX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjcyNyAyLjkxVi45N2MtMS4zNTcgMC00LjE4IDAtNS44MTggMS45NC0uOTcgMS4xODItMS4zMjggMi45MDgtLjk3IDQuOTgzLjU2MyAzLjMwNy45NyA2LjMzMi4zMDEgNy4xNTctLjMuMzEtLjk3LjQ2NS0yLjI0LjQ2NXYxLjk0YzEuMjcgMCAxLjk0LjE1NSAyLjI1LjQ5NC42OTguODI0LjI2MiAzLjg3OS0uMyA3LjE1Ni0uMzUgMi4xMjQtLjAxIDMuODAyLjk2IDQuOTU2QzUuNTI3IDMyIDguMzUgMzIgOS43MjYgMzJ2LTEuOTRjLTEuMTQ0IDAtMy4yODcgMC00LjMxNS0xLjIyMWE0LjExMiA0LjExMiAwIDAxLS41MzMtMy40MTRjLjg0My01LjA0Mi45Ny03LjM3LS4xMzYtOC43MjctLjA2OC0uMDc3LS4xNDUtLjEzNi0uMjEzLS4yMDMtLjA2OC0uMDY4LjE0NS0uMTI3LjIxMy0uMjA0IDEuMTQ0LTEuMzY3Ljk3LTMuNjk1LjEzNi04LjcyN2E0LjExMiA0LjExMiAwIDAxLjU0My0zLjQxNEM2LjQ0IDIuOTEgOC41ODMgMi45MSA5LjcyNyAyLjkxek0zMi4wMyAxNy40NTR2LTEuOTRjLTEuMjcgMC0xLjk0LS4xNTUtMi4yNS0uNDk0LS42OTgtLjgyNS0uMjYxLTMuODguMzAxLTcuMTU3LjM1LTIuMTIzIDAtMy44MDEtLjk3LTQuOTg0QzI3LjQ5My45NCAyNC42NzIuOTQgMjMuMjk0Ljk0djEuOTdjMS4xNDUgMCAzLjI4OCAwIDQuMzE1IDEuMjJhNC4xMTIgNC4xMTIgMCAwMS41NDQgMy40MTRjLS44NDQgNS4wNDMtLjk3IDcuMzcuMTM1IDguNzI4LjA2OC4wNzcuMTQ2LjEzNS4yMTQuMjAzLjA2Ny4wNjgtLjE0Ni4xMjYtLjIxNC4yMDQtMS4xNDQgMS4zNjctLjk3IDMuNjk0LS4xMzUgOC43MjcuMzI5IDEuMTYyLjEzIDIuNDEtLjU0NCAzLjQxMy0xLjAxOCAxLjI0Mi0zLjE2IDEuMjQyLTQuMzA1IDEuMjQyVjMyYzEuMzU4IDAgNC4xOCAwIDUuODE4LTEuOTQuOTctMS4xODIgMS4zMjktMi45MDguOTctNC45ODQtLjU2My0zLjMwNi0uOTctNi4zMzItLjMtNy4xNTYuMy0uMzEuOTY5LS40NjUgMi4yNC0uNDY1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNi4yMTIgMTUuNTE1aC0yLjAwN2E3Ljc1OCA3Ljc1OCAwIDAwLTYuNzItNi43MlY2Ljc4OGgtMS45NHYyLjAwN2E3Ljc1OCA3Ljc1OCAwIDAwLTYuNzIgNi43Mkg2LjgxOHYxLjk0aDIuMDA3YTcuNzU4IDcuNzU4IDAgMDA2LjcyIDYuNzJ2Mi4wMDdoMS45NHYtMi4wMDdhNy43NTggNy43NTggMCAwMDYuNzItNi43MmgyLjAwN3YtMS45NHptLTguNzI3IDYuN3YtMS44NTFoLTEuOTR2MS44NTJhNS44MTggNS44MTggMCAwMS00Ljc2LTQuNzYxaDEuODUxdi0xLjk0aC0xLjg1MmE1LjgxOCA1LjgxOCAwIDAxNC43NjEtNC43NjF2MS44NTJoMS45NHYtMS44NTJhNS44MTggNS44MTggMCAwMTQuNzYxIDQuNzYxaC0xLjg1MnYxLjk0aDEuODUyYTUuODE4IDUuODE4IDAgMDEtNC43NjEgNC43NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwR3JvazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwSGVhcnRiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEhlYXJ0YmVhdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNC4xNCAxNS4zOWE4LjA1OCA4LjA1OCAwIDAxLTIuMi00LjA0M0E2Ljc4OCA2Ljc4OCAwIDAxNC4xOTggNS40N2E2LjczIDYuNzMgMCAwMTguNzI3LS4yMTNsMS4yNi0xLjQ2NGE4LjY1IDguNjUgMCAwMC0xMS4yNzcuMjMyQTguNzI3IDguNzI3IDAgMDAuMDY4IDExLjZhMTAuMTcyIDEwLjE3MiAwIDAwMi43OTMgNS4yNzVsMS4yOC0xLjQ4NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjUxNSAzMS4yNzRMNC41NDggMTguNDU0IDE1Ljg1NSA0Ljc2M2E4LjY3IDguNjcgMCAwMTEyLjI2Ni0uNzQ2IDguNzI3IDguNzI3IDAgMDEyLjkxIDcuMjA1Yy0uMjQzIDIuNjk1LTIuMDM3IDQuNzMyLTMuNDgyIDYuMzdMMTUuNTE1IDMxLjI3NXptLTguNDI3LTEyLjgybDguNDI3IDkuODYyIDEwLjU1LTExLjk5NWMxLjMyLTEuNTAzIDIuODIyLTMuMjEgMy4wMDctNS4yNjVhNi43ODggNi43ODggMCAwMC0yLjI0LTUuNTg2IDYuNzMgNi43MyAwIDAwLTkuNTA0LjU2M0w3LjA4OCAxOC40NTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEhlYXJ0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50ID0gZnVuY3Rpb24gRXVpSWNvbkFwcEluZGV4TWFuYWdlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDE4di0yaC0ydjJIM3Y2aDJ2LTRoMTB2NGgydi00aDEwdjRoMnYtNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAzMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC00YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0xMiA0YTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTRhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bTEyIDRhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6bTAtNGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnpNMjMgOFY2aC0yLjFhNSA1IDAgMDAtLjczLTEuNzVsMS40OS0xLjQ5LTEuNDItMS40Mi0xLjQ5IDEuNDlBNSA1IDAgMDAxNyAyLjFWMGgtMnYyLjFhNSA1IDAgMDAtMS43NS43M2wtMS40OS0xLjQ5LTEuNDIgMS40MiAxLjQ5IDEuNDlBNSA1IDAgMDAxMS4xIDZIOXYyaDIuMWE1IDUgMCAwMC43MyAxLjc1bC0xLjQ5IDEuNDkgMS40MSAxLjQxIDEuNDktMS40OWE1IDUgMCAwMDEuNzYuNzRWMTRoMnYtMi4xYTUgNSAwIDAwMS43NS0uNzNsMS40OSAxLjQ5IDEuNDEtMS40MS0xLjQ4LTEuNUE1IDUgMCAwMDIwLjkgOEgyM3ptLTcgMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDhhMSAxIDAgMDEtMS0xIDEuMzkgMS4zOSAwIDAxMC0uMi42NS42NSAwIDAxLjA2LS4xOC43NC43NCAwIDAxLjA5LS4xOCAxLjYxIDEuNjEgMCAwMS4xMi0uMTUuOTMuOTMgMCAwMS4zMy0uMjEgMSAxIDAgMDExLjA5LjIxbC4xMi4xNWEuNzguNzggMCAwMS4wOS4xOC42Mi42MiAwIDAxLjEuMTggMS4yNyAxLjI3IDAgMDEwIC4yIDEgMSAwIDAxLTEgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBJbmRleFBhdHRlcm4gPSBmdW5jdGlvbiBFdWlJY29uQXBwSW5kZXhQYXR0ZXJuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMTRoLThhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoOGEzIDMgMCAwMTMgM3Y4YTMgMyAwIDAxLTMgM3pNMTIgMmExIDEgMCAwMC0xIDF2OGExIDEgMCAwMDEgMWg4YTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xaC04ek0xNyAxOHYtMmgtMnYySDN2Nmgydi00aDEwdjRoMnYtNGgxMHY0aDJ2LTZ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTQgMzJhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6bTAtNGExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnptMTIgNGEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC00YTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0xMiA0YTMgMyAwIDExMC02IDMgMyAwIDAxMCA2em0wLTRhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6TTEzIDRoNnYyaC02ek0xMyA4aDZ2MmgtNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwSW5kZXhQYXR0ZXJuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBJbmRleFJvbGx1cCA9IGZ1bmN0aW9uIEV1aUljb25BcHBJbmRleFJvbGx1cChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMyIDI2di0yaC0yLjFhNSA1IDAgMDAtLjczLTEuNzVsMS40OS0xLjQ5LTEuNDEtMS40MS0xLjQ5IDEuNDlBNSA1IDAgMDAyNiAyMC4xVjE4aC0ydjIuMWE1IDUgMCAwMC0xLjc1LjczbC0xLjQ5LTEuNDktMS40MSAxLjQxIDEuNDkgMS40OUE1IDUgMCAwMDIwLjEgMjRIMTh2MmgyLjFhNSA1IDAgMDAuNzMgMS43NWwtMS40OSAxLjQ5IDEuNDEgMS40MSAxLjQ5LTEuNDlhNSA1IDAgMDAxLjc2Ljc0VjMyaDJ2LTIuMWE1IDUgMCAwMDEuNzUtLjczbDEuNDkgMS40OSAxLjQxLTEuNDEtMS40OS0xLjQ5QTUgNSAwIDAwMjkuOSAyNkgzMnptLTcgMmEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI1LjcxIDI0LjI5YTEgMSAwIDAwLTEuMDktLjIxIDEuMTUgMS4xNSAwIDAwLS4zMy4yMS45My45MyAwIDAwLS4yMS4zMyAxIDEgMCAwMDEuMyAxLjMgMS4xNSAxLjE1IDAgMDAuMzMtLjIxIDEgMSAwIDAwLjIxLTEuMDkuOTQuOTQgMCAwMC0uMjEtLjMzelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk01IDZoMTZ2Mkg1ek01IDEyaDE2djJINXpNNSAxOGgxMHYySDV6TTUgMjRoOHYySDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkgzYTMgMyAwIDAxLTMtM1YzYTMgMyAwIDAxMy0zaDIwYTMgMyAwIDAxMyAzdjEzaC0yVjNhMSAxIDAgMDAtMS0xSDNhMSAxIDAgMDAtMSAxdjI2YTEgMSAwIDAwMSAxaDEzdjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcEluZGV4Um9sbHVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBMZW5zID0gZnVuY3Rpb24gRXVpSWNvbkFwcExlbnMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTIzLjc5MyAxNC4yOTNsMS40MTQgMS40MTQtNi40MDggNi40MDktMy43NS0zLjI1LTQuMzQyIDQuMzQxLTEuNDE0LTEuNDE0IDUuNjU4LTUuNjU5IDMuNzUgMy4yNSA1LjA5Mi01LjA5MXpNMTIgMTF2NWwtMiAydi03aDJ6bTEwLTZ2OGwtMiAyVjVoMnptLTUgM3Y3bC0yLTJWOGgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgMGM4LjI4NCAwIDE1IDYuNzE2IDE1IDE1IDAgOC4yODQtNi43MTYgMTUtMTUgMTUtMy43ODIgMC03LjIzOC0xLjQtOS44NzYtMy43MWwtNS40MTcgNS40MTctMS40MTQtMS40MTQgNS40MTctNS40MTdBMTQuOTQzIDE0Ljk0MyAwIDAxMiAxNWMwLTEuMDUuMTA4LTIuMDc0LjMxMy0zLjA2MmwxLjkwNi42NzJDNC4wNzUgMTMuMzg1IDQgMTQuMTg0IDQgMTVjMCA3LjE4IDUuODIgMTMgMTMgMTNzMTMtNS44MiAxMy0xM1MyNC4xOCAyIDE3IDJjLTEuMDAyIDAtMS45NzguMTEzLTIuOTE1LjMyOGwtLjc1LTEuODc3QTE1LjAzMSAxNS4wMzEgMCAwMTE3IDB6TTkuNjIxIDEuOTM3bC43NSAxLjg3N2ExMy4wNjIgMTMuMDYyIDAgMDAtNC44MiA1LjAyNGwtMS45MDctLjY3M2ExNS4wNjggMTUuMDY4IDAgMDE1Ljk3Ny02LjIyOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwTGVuczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwTG9ncyA9IGZ1bmN0aW9uIEV1aUljb25BcHBMb2dzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSA4YzMuOTgzIDAgNy43MzIgMS4wMTMgMTEuMDAxIDIuNzk3djIuMzEyQTIwLjg4NyAyMC44ODcgMCAwMDIgMTAuMDIzdjExLjAyNWM0Ljg1LjQ2MiA5LjI3IDQuMTgzIDkuOTU1IDguNjkxbC4wMzUuMjYxSDEydjJoLTEuOTM4bC0uMDE4LTEuMjM2Yy0uMTE2LTQuMDE1LTQuMzM2LTcuNjMxLTguNzkzLTcuNzZMMCAyMi45ODZWOGgxem0xMy04aDFjOS4yOCAwIDE2LjgyNSA3LjQzNyAxNi45OTcgMTYuNjc3TDMyIDE3djE1aC0yVjE3YzAtNy44NC02LjAxNC0xNC4yNzQtMTMuNjgtMTQuOTQzTDE2IDIuMDMzdjcuNjgxbC0yLTEuMTQzVjBoMS0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yNi45OTcgMzAuNjM2TDI3LjAwOSAzMkgxNFYxMS4zMDVsMS40ODMuODJjNi45OTQgMy44NjEgMTEuMzgyIDEwLjczNSAxMS41MTQgMTguNTF6bS0yLjA0OC0xLjA0QzI0LjUwNSAyMy41NTYgMjEuMjA1IDE4LjIgMTYgMTQuNzcxVjMwaDguOTc0bC0uMDI1LS40MDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcExvZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE1hbmFnZW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwTWFuYWdlbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTYgMjFhNSA1IDAgMTEwLTEwIDUgNSAwIDAxMCAxMHptMC04YTMgMyAwIDEwMCA2IDMgMyAwIDAwMC02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMzJoLTh2LTQuMDZhMSAxIDAgMDAtMS42MS0uNjdsLTIuODggMi44Ny01LjY1LTUuNjUgMi44Ny0yLjg3YS45Mi45MiAwIDAwLjItMSAuOTMuOTMgMCAwMC0uODYtLjZIMFYxMmg0LjA2YS45Mi45MiAwIDAwLjg1LS41OC45NC45NCAwIDAwLS4xOS0xTDEuODYgNy41MWw1LjY1LTUuNjUgMi44NyAyLjg3QTEgMSAwIDAwMTIgNC4wNlYwaDh2NC4wNmExIDEgMCAwMDEuNjEuNjdsMi44Ny0yLjg3IDUuNjYgNS42Ni0yLjg3IDIuODdhLjkyLjkyIDAgMDAtLjIgMSAuOTMuOTMgMCAwMC44Ni42SDMydjhoLTQuMDZhLjkyLjkyIDAgMDAtLjg1LjU4Ljk0Ljk0IDAgMDAuMTkgMWwyLjg3IDIuODctNS42NiA1LjY2LTIuODctMi44N2ExIDEgMCAwMC0xLjYxLjY3TDIwIDMyem0tNi0yaDR2LTIuMDZhMyAzIDAgMDE1LTIuMDhsMS40NiAxLjQ2IDIuODMtMi44M0wyNS44NiAyM2EzIDMgMCAwMTIuMDgtNUgzMHYtNGgtMi4wNmEzIDMgMCAwMS0yLjA4LTVsMS40Ni0xLjQ2LTIuODMtMi44NUwyMyA2LjE0YTMgMyAwIDAxLTUtMi4wOFYyaC00djIuMDZhMyAzIDAgMDEtNSAyLjA4TDcuNTEgNC42OSA0LjY5IDcuNTEgNi4xNCA5YTMgMyAwIDAxLTIuMDggNUgydjRoMi4wNmEzIDMgMCAwMTIuMDggNWwtMS40NSAxLjQ5IDIuODMgMi44M0w5IDI1Ljg2YTMgMyAwIDAxNSAyLjA4VjMwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNYW5hZ2VtZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBNZXRyaWNiZWF0ID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1ldHJpY2JlYXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAxLTE2IDE2em0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMDAxNiAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yOCAxNmgtMmMwLTUuNTIzLTQuNDc3LTEwLTEwLTEwUzYgMTAuNDc3IDYgMTZINEM0IDkuMzczIDkuMzczIDQgMTYgNHMxMiA1LjM3MyAxMiAxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjcxIDExLjcxTDIwLjMgMTAuMyAxOCAxMi41N2E0IDQgMCAwMC0yLS41NyA0IDQgMCAxMDQgNCA0IDQgMCAwMC0uNTctMmwyLjI4LTIuMjl6TTE2IDE4YTIgMiAwIDExMC00IDIgMiAwIDAxMCA0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNZXRyaWNiZWF0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBNZXRyaWNzID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1ldHJpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMCAxOS4wOTJ2MTIuODhIMnYtNS4zODZsNi43NDctNi43NDcuNzA4LjcwOGMuMjM2LjIzNi40OC40NjMuNzMzLjY4TDQgMjcuNDE0djIuNTU4aDI0di04LjkxYy4xODYtLjE2Ni4zNjktLjMzOS41NDYtLjUxNkwzMCAxOS4wOTJ6bS0yMC44NS0zLjE5QTEwLjk1NSAxMC45NTUgMCAwMTggMTFDOCA0LjkyNSAxMi45MjUgMCAxOSAwczExIDQuOTI1IDExIDExYzAgMS43Ni0uNDE0IDMuNDI1LTEuMTUgNC45bC0xLjUxLTEuNTFBOC45NzMgOC45NzMgMCAwMDI4IDExYTkgOSAwIDEwLTE3LjM0IDMuMzkxbC0xLjUxIDEuNTF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE5IDIwYTguOTYgOC45NiAwIDAwNS42MTgtMS45NjhsLTQuMjAyLTQuMjA0YTIgMiAwIDAwLTIuODI4IDBsLTQuMjA1IDQuMjA1QTguOTYgOC45NiAwIDAwMTkgMjB6bS0yLjgyNi03LjU4NmE0IDQgMCAwMTUuNjU2IDBsNS42NTYgNS42NTctLjcwNy43MDdBMTAuOTY3IDEwLjk2NyAwIDAxMTkgMjJhMTAuOTY3IDEwLjk2NyAwIDAxLTcuNzc4LTMuMjIxbC0uNzA3LS43MDcgNS42NTktNS42NTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcE1ldHJpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcE1sID0gZnVuY3Rpb24gRXVpSWNvbkFwcE1sKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMCAxOHYuNTZhMSAxIDAgMDEtLjY4Ljk1TDMgMjEuNjFWMTBhMSAxIDAgMDEuNC0uOGwzLjItMi40LTEuMi0xLjYtMy4yIDIuNEEzIDMgMCAwMDEgMTB2MTJhMyAzIDAgMDAxLjIgMi40bDMuMiAyLjQgMS4yLTEuNi0yLjQ3LTEuODUgNS44Mi0xLjk1QTMgMyAwIDAwMTIgMTguNTZWMThoLTJ6TTI5LjggNy42bC0zLjItMi40LTEuMiAxLjYgMy4yIDIuNGExIDEgMCAwMS40Ljh2MTEuNjFsLTYuMzItMi4xMWExIDEgMCAwMS0uNjgtLjk1VjE4aC0ydi41NmEzIDMgMCAwMDIuMDUgMi44NWw1LjgyIDEuOTQtMi40NyAxLjg1IDEuMiAxLjYgMy4yLTIuNEEzIDMgMCAwMDMxIDIyVjEwYTMgMyAwIDAwLTEuMi0yLjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSA2QTMgMyAwIDAxOC44OC44OGEzLjA3IDMuMDcgMCAwMTQuMjQgMEEzIDMgMCAwMTExIDZ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAxMSAyem0wIDMwYTMgMyAwIDAxLTIuMTItNS4xMiAzLjA3IDMuMDcgMCAwMTQuMjQgMEEzIDMgMCAwMTExIDMyem0wLTRhMSAxIDAgMTAtLjAxMiAyQTEgMSAwIDAwMTEgMjh6bTAtMTJhMyAzIDAgMDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMTEgMTZ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAxMSAxMnptMTAtNkEzIDMgMCAwMTE4Ljg4Ljg4YTMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMjEgNnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDIxIDJ6bTAgMzBhMyAzIDAgMDEtMi4xMi01LjEyIDMuMDcgMy4wNyAwIDAxNC4yNCAwQTMgMyAwIDAxMjEgMzJ6bTAtNGExIDEgMCAxMC0uMDEyIDJBMSAxIDAgMDAyMSAyOHptMC0xMmEzIDMgMCAwMS0yLjEyLTUuMTIgMy4wNyAzLjA3IDAgMDE0LjI0IDBBMyAzIDAgMDEyMSAxNnptMC00YTEgMSAwIDEwLS4wMTIgMkExIDEgMCAwMDIxIDEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwTW9uaXRvcmluZyA9IGZ1bmN0aW9uIEV1aUljb25BcHBNb25pdG9yaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMS44MSAxNS4xOUE4Ljk0IDguOTQgMCAwMTE1LjYyIDMuODZsLjM4LjQyLjM4LS40MmE4Ljk0IDguOTQgMCAwMTE0LjI2IDEwLjY4bC0xLjctMS4wN2E2Ljk0IDYuOTQgMCAwMC0xMS4wNy04LjI4TDE2IDcuMjlsLTEuODctMi4xQTYuOTQgNi45NCAwIDAwMy40MSAxNGwtMS42IDEuMTl6TTE2IDMxLjE4bC03Ljc0LTguNTEgMS40OC0xLjM0TDE2IDI4LjIxbDYuMjYtNi44OCAxLjQ4IDEuMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTE2LjE2IDIzLjI5bC00LjEtNy4xN0wxMC42MiAxOUgwdi0yaDkuMzhsMi41Ni01LjEyIDMuOSA2LjgzIDQuMTMtMTAuMzJMMjMuNjYgMTdIMzJ2MmgtOS42NmwtMi4zMS01LjM5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBNb25pdG9yaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBOb3RlYm9vayA9IGZ1bmN0aW9uIEV1aUljb25BcHBOb3RlYm9vayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI1IDJoLTVWMGgtMnYyaC0zVjBoLTJ2MmgtM1YwSDh2MkgzdjI2aDIyVjJ6bS0yIDI0SDVWNGgzdjJoMlY0aDN2MmgyVjRoM3YyaDJWNGgzdjIyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgN3YyM0g4djJoMjFWN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOCAxMmgxMnYySDh6TTggMTdoMTJ2Mkg4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBOb3RlYm9vazsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUGFja2V0YmVhdCA9IGZ1bmN0aW9uIEV1aUljb25BcHBQYWNrZXRiZWF0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNiAyMGE0IDQgMCAxMTAtOCA0IDQgMCAwMTAgOHptMC02YTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0YTQgNCAwIDEwLTQgNCA0IDQgMCAwMDItLjU3bDUuMjcgNS4yNyAxLjQxLTEuNDFMNy40MyA2QTQgNCAwIDAwOCA0ek00IDZhMiAyIDAgMTEwLTQgMiAyIDAgMDEwIDR6bTE2LjcxIDYuNzFMMjYgNy40M0E0IDQgMCAwMDI4IDhhNCA0IDAgMTAtNC00IDQgNCAwIDAwLjU3IDJsLTUuMjcgNS4yNyAxLjQxIDEuNDR6TTI4IDJhMiAyIDAgMTEwIDQgMiAyIDAgMDEwLTR6TTExLjI5IDE5LjI5TDYgMjQuNTdBNCA0IDAgMDA0IDI0YTQgNCAwIDEwNCA0IDQgNCAwIDAwLS41Ny0ybDUuMjctNS4yNy0xLjQxLTEuNDR6TTQgMzBhMiAyIDAgMTEwLTQgMiAyIDAgMDEwIDR6bTI0LTZhNCA0IDAgMDAtMiAuNTdsLTUuMjctNS4yNy0xLjQxIDEuNDFMMjQuNTcgMjZhNCA0IDAgMDAtLjU3IDIgNCA0IDAgMTA0LTR6bTAgNmEyIDIgMCAxMTAtNCAyIDIgMCAwMTAgNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUGFja2V0YmVhdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUGlwZWxpbmUgPSBmdW5jdGlvbiBFdWlJY29uQXBwUGlwZWxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yOSAxMmEzIDMgMCAwMC0zIDNoLTRhMyAzIDAgMDAtMy0zaC02YTMgMyAwIDAwLTMgM0g2YTMgMyAwIDAwLTMtM0gwdjE0aDNhMyAzIDAgMDAzLTNoNGEzIDMgMCAwMDMgM2g2YTMgMyAwIDAwMy0zaDRhMyAzIDAgMDAzIDNoM1YxMmgtM3pNMyAyNEgyVjE0aDFhMSAxIDAgMDExIDF2OGExIDEgMCAwMS0xIDF6bTE3LTN2MmExIDEgMCAwMS0xIDFoLTZhMSAxIDAgMDEtMS0xdi0ySDZ2LTRoNnYtMmExIDEgMCAwMTEtMWg2YTEgMSAwIDAxMSAxdjJoNnY0aC02em0xMCAzaC0xYTEgMSAwIDAxLTEtMXYtOGExIDEgMCAwMTEtMWgxdjEwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMiA2SDEwdjJoNXYyaDJWOGg1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBQaXBlbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQgPSBmdW5jdGlvbiBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAxLTE2IDE2em0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMDAxNiAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNSA0aDJ2OS4xN0EzLjAwOSAzLjAwOSAwIDAxMTguODMgMTVIMjZ2MmgtNy4xN0EzLjAwMSAzLjAwMSAwIDExMTUgMTMuMTdWNHptMSAxM2ExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwUmVjZW50bHlWaWV3ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFJlcG9ydGluZyA9IGZ1bmN0aW9uIEV1aUljb25BcHBSZXBvcnRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNSA1aC0uMTd2MkgyNWExIDEgMCAwMTEgMXYyMGExIDEgMCAwMS0xIDFIN2ExIDEgMCAwMS0xLTFWOGExIDEgMCAwMTEtMWguMTdWNUg3YTMgMyAwIDAwLTMgM3YyMGEzIDMgMCAwMDMgM2gxOGEzIDMgMCAwMDMtM1Y4YTMgMyAwIDAwLTMtM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzIDNoLTNWMGgtOHYzSDl2NmgxNFYzem0tMiA0SDExVjVoM1YyaDR2M2gzdjJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTEwIDEzaDEydjJIMTB6TTEwIDE4aDEydjJIMTB6TTEwIDIzaDEydjJIMTB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFJlcG9ydGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwU2F2ZWRPYmplY3RzID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNhdmVkT2JqZWN0cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjAuMzggNy4wMDFMMTcgOS42MTlWMGgtMnY5LjYxOWwtMy4zNy0yLjYxOC0xLjI1IDEuNTEzTDE2IDEyLjg3OGw1LjYzLTQuMzY0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuMDYuMTY1bC0xLjExIDEuNjEgOS4yNSA1Ljk4M0wxNiAxNi4yOSAyLjggNy43NThsOS4yNS01Ljk4My0xLjEtMS42MUwwIDcuMjM0djEzLjY1M2wxNiAxMC4zMzcgMTYtMTAuMzM3VjcuMjM0TDIxLjA2LjE2NHpNMiA5LjU3bDEzIDguNDA3djEwLjI3OUwyIDE5Ljg0VjkuNTd6bTE1IDE4LjY3NlYxNy45NzhsMTMtOC40MDdWMTkuODVsLTEzIDguMzk3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBTYXZlZE9iamVjdHM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xMS42MyA4aDcuMzh2MmgtNy4zOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgOGgzLjE5djJIN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNyAxNmg3LjM4djJIN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjgxIDE2SDE5djJoLTMuMTl6TTcgMTJoOXYySDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAwQzUuODIgMCAwIDUuODIgMCAxM3M1LjgyIDEzIDEzIDEzIDEzLTUuODIgMTMtMTNBMTMgMTMgMCAwMDEzIDB6bTAgMjRDNi45MjUgMjQgMiAxOS4wNzUgMiAxM1M2LjkyNSAyIDEzIDJzMTEgNC45MjUgMTEgMTEtNC45MjUgMTEtMTEgMTF6TTIyLjU4MSAyMy45OTNsMS40MTQtMS40MTQgNy43MDggNy43MDgtMS40MTQgMS40MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlYXJjaFByb2ZpbGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTZWN1cml0eSA9IGZ1bmN0aW9uIEV1aUljb25BcHBTZWN1cml0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDMybC0uMzYtLjE0QTIxLjA3IDIxLjA3IDAgMDEwIDEyLjA3VjUuNDRMMTQgLjA2bDE0IDUuMzh2Ni42M2EyMS4wNyAyMS4wNyAwIDAxLTEzLjY0IDE5Ljc4TDE0IDMyek0yIDYuODJ2NS4yNWExOS4wOCAxOS4wOCAwIDAwMTIgMTcuNzcgMTkuMDggMTkuMDggMCAwMDEyLTE3Ljc3VjYuODJMMTQgMi4yIDIgNi44MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOSAxNy44M2gyVjIzSDl6TTExIDEwLjE4VjdIOXYzLjE4YTMgMyAwIDEwMiAwek0xMCAxNGExIDEgMCAxMTAtMiAxIDEgMCAwMTAgMnpNMTcgN2gydjUuMTdoLTJ6TTIxIDE3YTMgMyAwIDEwLTQgMi44MlYyM2gydi0zLjE4QTMgMyAwIDAwMjEgMTd6bS0zIDFhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlY3VyaXR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyA9IGZ1bmN0aW9uIEV1aUljb25BcHBTZWN1cml0eUFuYWx5dGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTBoNHYySDV2Ny45MjhjMCAxLjI5OS44MDggMi43OTUgMi44OCA0LjQ4IDEuODMgMS40ODkgNC41MjQgMy4wMiA4LjEyIDQuNTg0VjI2aDJ2NS45OTJsLTEuMzgtLjU2N2MtNC4zNzItMS43OTctNy43MjQtMy42MTMtMTAtNS40NjVDNC4zNTggMjQuMTIyIDMgMjIuMTE0IDMgMTkuOTI4VjEwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk05IDEwaDl2MTRsLTEuMjcyLS40NThjLTEuMzY3LS40OTQtMy4yMy0xLjMxNC00Ljc2OC0yLjM5QzEwLjQ4NCAyMC4xMTggOSAxOC42MzYgOSAxNi43NjFWMTB6bTEuODk1IDEuODc2djQuODg3YzAgLjg3Ny43NDQgMS44NjcgMi4xNTggMi44NTYuOTM3LjY1NiAyLjAzOCAxLjIxOSAzLjA1MiAxLjY1N3YtOS40aC01LjIxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkgMUg5djdoMlYyLjk2NmgxNlYxNi43M2MwIC41NTgtLjI0NSAxLjEyOC0uNzU2IDEuNzItLjUxNS41OTYtMS4yNTYgMS4xNTgtMi4xMiAxLjY2OC0xLjM4MS44MTgtMi45NjEgMS40MzQtNC4xMjQgMS44MTdWMjRjMS4yNi0uMzc4IDMuMzM0LTEuMTIgNS4xNTUtMi4xOTcuOTY1LS41NyAxLjkwNS0xLjI2MSAyLjYxMi0yLjA4LjcxMi0uODIyIDEuMjMzLTEuODI3IDEuMjMzLTIuOTkyVjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNlY3VyaXR5QW5hbHl0aWNzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBTcGFjZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwU3BhY2VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00IDRoNnYySDR6TTIyIDRoNnYyaC02ek00IDIyaDZ2Mkg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAxNGgxNFYwSDB2MTR6TTIgMmgxMHYxMEgyVjJ6bTE2LTJ2MTRoMTRWMEgxOHptMTIgMTJIMjBWMmgxMHYxMHpNMCAzMmgxNFYxOEgwdjE0em0yLTEyaDEwdjEwSDJWMjB6bTE2IDEyaDE0VjE4SDE4djE0em0yLTEyaDEwdjEwSDIwVjIwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMiAyMmg2djJoLTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNwYWNlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwU3FsID0gZnVuY3Rpb24gRXVpSWNvbkFwcFNxbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTggNmg5djJoLTl6TTUgNmg5djJINXpNNSAxMmg5djJINXpNMTggMTJoOXYyaC05ek01IDE4aDl2Mkg1ek0xOCAxOGg5djJoLTl6TTE4IDI0aDl2MmgtOXpNNSAyNGg5djJINXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI5IDMySDNhMyAzIDAgMDEtMy0zVjNhMyAzIDAgMDEzLTNoMjZhMyAzIDAgMDEzIDN2MjZhMyAzIDAgMDEtMyAzek0zIDJhMSAxIDAgMDAtMSAxdjI2YTEgMSAwIDAwMSAxaDI2YTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFNxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwVGltZWxpb24gPSBmdW5jdGlvbiBFdWlJY29uQXBwVGltZWxpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDR2MjAuMzRMMTYgMzJsMTItNy42NFY0SDR6bTIyIDJ2NGgtNGEzIDMgMCAwMC0zIDN2NWgtNnYtNWEzIDMgMCAwMC0zLTNINlY2aDIwem0tNy44NyAxNEwxNiAyMi41MiAxMy44NyAyMGg0LjI2ek02IDEyaDRhMSAxIDAgMDExIDF2Ni43bDMuNjkgNC4zNy0yLjU4IDMuMDZMNiAyMy4yNFYxMnptNy44MSAxNi4yMmwyLjE5LTIuNiAyLjE5IDIuNkwxNiAyOS42MWwtMi4xOS0xLjM5em02LjA4LTEuMDlsLTIuNTgtMy4wNkwyMSAxOS43VjEzYTEgMSAwIDAxMS0xaDR2MTEuMjRsLTYuMTEgMy44OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAwaDI0djJINHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVGltZWxpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFVwZ3JhZGVBc3Npc3RhbnQgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXBncmFkZUFzc2lzdGFudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMTYgMjFhNSA1IDAgMTEwLTEwIDUgNSAwIDAxMCAxMHptMC04YTMgMyAwIDEwMCA2IDMgMyAwIDAwMC02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcuNDIgMTkuNjlhMTIgMTIgMCAwMS0yMy4xMS0xbDIuMjctLjQ1LTQuMzItNC40N0wwIDE5LjU1bDIuMzktLjQ3YTE0IDE0IDAgMDAyNyAxLjIzbC0xLjk3LS42MnptMi4yMy02Ljc3YTE0IDE0IDAgMDAtMjctMS4yM2wxLjkuNjJhMTIgMTIgMCAwMTIzLjExIDFsLTIuMjcuNDUgNC4zMiA0LjQ2TDMyIDEyLjQ1bC0yLjM1LjQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBVcHRpbWUgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXB0aW1lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk00LjIxNiAxMi4zNzdBMTAuOTQ4IDEwLjk0OCAwIDAwMi4xODEgMTdILjE1M2ExMi45NDEgMTIuOTQxIDAgMDEyLjY5My02LjExOGwxLjM3IDEuNDk1em0yLjk0OC0yLjcwM2wtMS4zNy0xLjQ5NUExMi45NCAxMi45NCAwIDAxMTMgNnYyYy0yLjE0NCAwLTQuMTQ0LjYxMy01LjgzNiAxLjY3NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI2IDQuNDE0VjE5YzAgNy4xOC01LjgyIDEzLTEzIDEzQzYuNSAzMiAxLjExNSAyNy4yMy4xNTMgMjFIMi4xOGMuOTQgNS4xMiA1LjQyNyA5IDEwLjgxOSA5IDYuMDc1IDAgMTEtNC45MjUgMTEtMTFWNC40MTRsLTQuMjkzIDQuMjkzLTEuNDE0LTEuNDE0TDI1IC41ODZsNi43MDcgNi43MDctMS40MTQgMS40MTRMMjYgNC40MTR6bS03LjgzNiA5LjkwOWwxLjQ3MiAxLjM1NC03LjU3NyA4LjIzNS00LjgzNS00LjQ0MiAxLjM1My0xLjQ3MyAzLjM2NCAzLjA5IDYuMjIzLTYuNzY0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBVcHRpbWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFVzZXJzUm9sZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwVXNlcnNSb2xlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjMwNyAzLjIxYTIuOTEgMi45MSAwIDEwLS4yMjMgMS45NCAxMS42MzYgMTEuNjM2IDAgMDE4LjIzMiA3LjA0OWwxLjc3NS0uNjk4YTEzLjU3NiAxMy41NzYgMCAwMC05Ljc4NC04LjI5MXptLTIuODIyIDEuNjM4YS45Ny45NyAwIDExMC0xLjkzOS45Ny45NyAwIDAxMCAxLjk0em0tNC4yNjcuODA1bC0uNzE3LTEuNzc0YTEzLjU3NiAxMy41NzYgMCAwMC04LjI5MSA5Ljc4NCAyLjkxIDIuOTEgMCAxMDEuOTQuMjIzIDExLjYzNiAxMS42MzYgMCAwMTcuMDY4LTguMjMzem0tOC4zNCAxMS44MDJhLjk3Ljk3IDAgMTEwLTEuOTQuOTcuOTcgMCAwMTAgMS45NHptMTIuNjA3IDguNzI3YTIuOTEgMi45MSAwIDAwLTIuNTk5IDEuNjIgMTEuNjM2IDExLjYzNiAwIDAxLTguMjMzLTcuMDVsLTEuNzc0LjcxN2ExMy41NzYgMTMuNTc2IDAgMDA5LjgxMyA4LjI5MSAyLjkxIDIuOTEgMCAxMDIuNzkzLTMuNTc4em0wIDMuODc5YS45Ny45NyAwIDExMC0xLjk0Ljk3Ljk3IDAgMDEwIDEuOTR6TTMyIDE2LjQ4NWEyLjkxIDIuOTEgMCAxMC00LjE5OSAyLjU5OSAxMS42MzYgMTEuNjM2IDAgMDEtNy4wNSA4LjIzMmwuNzE4IDEuNzc1YTEzLjU3NiAxMy41NzYgMCAwMDguMjkxLTkuODEzQTIuOTEgMi45MSAwIDAwMzIgMTYuNDg1em0tMi45MS45N2EuOTcuOTcgMCAxMTAtMS45NC45Ny45NyAwIDAxMCAxLjk0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xOS4xOSAxNi4zNWEzLjg3OSAzLjg3OSAwIDEwLTUuNDIgMCA0Ljg0OCA0Ljg0OCAwIDAwLTIuMTM0IDQuMDE0djEuOTM5aDkuNjk3di0xLjk0YTQuODQ4IDQuODQ4IDAgMDAtMi4xNDMtNC4wMTR6bS00LjY0NS0yLjc3NGExLjk0IDEuOTQgMCAxMTMuODggMCAxLjk0IDEuOTQgMCAwMS0zLjg4IDB6bS0uOTcgNi43ODhhMi45MSAyLjkxIDAgMTE1LjgxOSAwaC01LjgxOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwVXNlcnNSb2xlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXBwVmlzdWFsaXplID0gZnVuY3Rpb24gRXVpSWNvbkFwcFZpc3VhbGl6ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMzIgMzJINGE0IDQgMCAwMS00LTRWMGgydjI4YTIgMiAwIDAwMiAyaDI4djJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDIwaDJ2N0g2ek0xNiAxMmgydjE1aC0yek0yNiAxN2gydjEwaC0yelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcgNmEzIDMgMCAwMC0yLjA4Ljg0TDIwIDQuMzZBMi4yIDIuMiAwIDAwMjAgNGEzIDMgMCAwMC02IDBjLjAwMS4zNDEuMDYyLjY4LjE4IDFsLTUuNiA0LjQ2QTMgMyAwIDAwNyA5YTMgMyAwIDEwMyAzIDIuOTMgMi45MyAwIDAwLS4xOC0xbDUuNi00LjQ4QTMgMyAwIDAwMTcgN2EzIDMgMCAwMDIuMDgtLjg0bDUgMi40OEEyLjIgMi4yIDAgMDAyNCA5YTMgMyAwIDEwMy0zek03IDEzYTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyem0xMC04YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyem0xMCA1YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcHBWaXN1YWxpemU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFdhdGNoZXMgPSBmdW5jdGlvbiBFdWlJY29uQXBwV2F0Y2hlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNzQgNy43M2wtMS41LTEuMzJhMTMgMTMgMCAwMDAgMTcuMTlsMS41LTEuMzJhMTEgMTEgMCAwMTAtMTQuNTR2LS4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTEgMy42Nkw1IDIuMzRjLTYuMzc3IDcuMjQtNi4zNzcgMTguMDkgMCAyNS4zM2wxLjUtMS4zMkMuNzkyIDE5Ljg2Ny43OTIgMTAuMTUzIDYuNSAzLjY3bC4wMS0uMDF6bTE3LjI1IDIuNzVsLTEuNSAxLjMyYTExIDExIDAgMDEwIDE0LjU0bDEuNSAxLjMyYTEzIDEzIDAgMDAwLTE3LjE5di4wMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI3IDIuMzRsLTEuNSAxLjMyYzUuNzA4IDYuNDgzIDUuNzA4IDE2LjE5NyAwIDIyLjY4bDEuNSAxLjMzYzYuMzc3LTcuMjQgNi4zNzctMTguMDkgMC0yNS4zM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEgMTVhNSA1IDAgMTAtNiA0LjlWMzFoMlYxOS45YTUgNSAwIDAwNC00Ljl6bS01IDNhMyAzIDAgMTEwLTYgMyAzIDAgMDEwIDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFwcFdhdGNoZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25BcHBXb3JrcGxhY2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy44MSAxSDJ2MzBoNS44MTVjMS43MDUgMCAzLjM0My0uNzgzIDQuMzgtMi4wOTRsMy4xODItNC4wMjMuMDA2LjAwNiAyLjYwNy0zLjEzNy4wMS0uMDE0YTkuNDIgOS40MiAwIDAwMS45NTMtNC44MjYgOS4xMTIgOS4xMTIgMCAwMC0xLjg5MS02LjUyMmwtLjAxLS4wMTItMi42MDMtMy4xNTZMMTIuMTk3IDMuMUMxMS4xNiAxLjc4NiA5LjUyIDEgNy44MSAxem02LjExOCA3LjUyM2wtMy4zMS00LjE5NUM5Ljk2OCAzLjUxMiA4LjkxNyAzIDcuODEgM0g0djI2aDMuODE1YzEuMSAwIDIuMTUtLjUwOCAyLjgtMS4zMmwzLjMzLTQuMjEtMS43OTYtMS43Ny0uMDI3LS4wMzNjLTIuODQtMy4zMTctMi44My04LjE5NS4wMjgtMTEuMjg3bC4wMDQtLjAwNGE5OC44OTMgOTguODkzIDAgMDExLjc3NC0xLjg1M3ptNC4wNDMgOC4wOTljLS4xMiAxLjI3OS0uNjE2IDIuNTM3LTEuNDkgMy42NGwtMS4yODggMS42My0xLjU3OC0xLjU1NmMtMi4xOS0yLjU5LTIuMTE4LTYuMy4wMDEtOC41OTYuNi0uNjQgMS4xMTktMS4xODMgMS41NjEtMS42MzVsMS4yOTMgMS42Mzh2LjAwMmwuMDE0LjAxNmMuOTQyIDEuMTkyIDEuNDQ2IDIuNTY0IDEuNTEgMy45NDlhNy4wOSA3LjA5IDAgMDEtLjAyMy45MTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMy44MDEgM2MtLjM4MiAwLTEuMDUyLjIzMS0xLjkyNS44MTItLjYzNi40MjItMS4yMjguOTI4LTEuNjc3IDEuMzU3bDEuNzcxIDIuMjQ1LjAwNS4wMDcuMDI0LjAzLjAwOC4wMWM0LjAwMyA1LjA5OSAzLjk5IDEyLjA1Ny0uMDM1IDE3LjE0NWwtMS43OTMgMi4yNjdhOC4yMDYgOC4yMDYgMCAwMDEuNzY5IDEuNDk4Yy42OTguNDI3IDEuMzM3LjYyOSAxLjg1Mi42MjlIMjhWM2gtNC4xOTl6bS02LjE0OCAyMy44NDJsLjc2NSAxLjA1My4wMjMuMDI3Yy43MTcuODUxIDEuNTY2IDEuNjA3IDIuNDY0IDIuMTU2Ljg5LjU0NCAxLjg5LjkyMiAyLjg5NS45MjJIMzBWMWgtNi4xOTljLS45ODcgMC0yLjA2Ni41MDUtMy4wMzIgMS4xNDZhMTQuOTM0IDE0LjkzNCAwIDAwLTIuMzUyIDEuOTc0bC0uMjc2LjI4OC0uNTk1LjYyOCAyLjg1NSAzLjYxOS4wMDYuMDA2YzMuNDU5IDQuMzc1IDMuNDU3IDEwLjMyOS0uMDA0IDE0LjcwNGwtMi43NSAzLjQ3N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwV29ya3BsYWNlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25BcHBzID0gZnVuY3Rpb24gRXVpSWNvbkFwcHMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDRWMmgydjJIMnptNSAwVjJoMnYySDd6bTUgMFYyaDJ2MmgtMnpNMiA5VjdoMnYySDJ6bTUgMFY3aDJ2Mkg3em01IDBWN2gydjJoLTJ6TTIgMTR2LTJoMnYySDJ6bTUgMHYtMmgydjJIN3ptNSAwdi0yaDJ2MmgtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXBwczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dFbmQgPSBmdW5jdGlvbiBFdWlJY29uQXJyb3dFbmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuODU3IDE0LjA0M2EuNzUuNzUgMCAwMS0uMDI1LTEuMDZsNC41OTEtNC44MWEuMjUuMjUgMCAwMDAtLjM0NmwtNC41OS00LjgxYS43NS43NSAwIDAxMS4wODUtMS4wMzVsNC41OSA0LjgxYTEuNzUgMS43NSAwIDAxMCAyLjQxNmwtNC41OSA0LjgxYS43NS43NSAwIDAxLTEuMDYuMDI0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNSAyLjc1YS43NS43NSAwIDAxMS41IDB2MTAuNWEuNzUuNzUgMCAwMS0xLjUgMFYyLjc1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd0VuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dTdGFydCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1N0YXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyLjc1YS43NS43NSAwIDAxMS41IDB2MTAuNWEuNzUuNzUgMCAwMS0xLjUgMFYyLjc1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy4xMzUgMTQuMDQzYS43NS43NSAwIDAwLjAyNS0xLjA2bC00LjU5LTQuODFhLjI1LjI1IDAgMDEwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDAwLTEuMDg1LTEuMDM1bC00LjU5IDQuODFhMS43NSAxLjc1IDAgMDAwIDIuNDE2bDQuNTkgNC44MWMuMjg2LjMuNzYuMzEgMS4wNi4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93U3RhcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFycm93RG93biA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0Rvd24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEuOTU3IDQuOTgyYS43NS43NSAwIDAxMS4wNi0uMDI1bDQuODEgNC41OTFhLjI1LjI1IDAgMDAuMzQ2IDBsNC44MS00LjU5YS43NS43NSAwIDAxMS4wMzUgMS4wODVsLTQuODEgNC41OWExLjc1IDEuNzUgMCAwMS0yLjQxNiAwbC00LjgxLTQuNTlhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd0Rvd247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkFycm93TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd0xlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjAxOCAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI0LTEuMDZsLTQuNTktNC44MWEuMjUuMjUgMCAwMTAtLjM0Nmw0LjU5LTQuODFhLjc1Ljc1IDAgMTAtMS4wODUtMS4wMzVsLTQuNTkgNC44MWExLjc1IDEuNzUgMCAwMDAgMi40MTZsNC41OSA0LjgxYy4yODYuMy43NjEuMzEgMS4wNi4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkFycm93TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1JpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljk4MiAxNC4wNDNhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMDAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwMTEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwMTAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwMS0xLjA2LjAyNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXJyb3dSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQXJyb3dVcCA9IGZ1bmN0aW9uIEV1aUljb25BcnJvd1VwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xLjk1NyAxMS4wMThjLjI4Ni4zLjc2MS4zMSAxLjA2LjAyNGw0LjgxLTQuNTlhLjI1LjI1IDAgMDEuMzQ2IDBsNC44MSA0LjU5YS43NS43NSAwIDAwMS4wMzUtMS4wODVsLTQuODEtNC41OWExLjc1IDEuNzUgMCAwMC0yLjQxNiAwbC00LjgxIDQuNTlhLjc1Ljc1IDAgMDAtLjAyNSAxLjA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25BcnJvd1VwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Bc3RlcmlzayA9IGZ1bmN0aW9uIEV1aUljb25Bc3RlcmlzayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuOTI4IDguNDY4TDQgNy42MThsLjQ0Ni0xLjQyN0w3LjM3NSA3LjI1IDcuMjg3IDRoMS40ODRsLS4wOTcgMy4yOTYgMi44OC0xLjAzOUwxMiA3LjY5M2wtMi45NzcuODYgMS45MiAyLjU2TDkuNzQxIDEyIDcuOTM3IDkuMjhsLTEuNzQ1IDIuNjU0LTEuMjEzLS44NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQXN0ZXJpc2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJlYWtlciA9IGZ1bmN0aW9uIEV1aUljb25CZWFrZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjI3NyAxMC4wODhjLjAyLjAxNC4wNC4wMy4wNTcuMDQ3LjU4Mi41NSAxLjEzNC44MTIgMS42NjYuODEyLjU4NiAwIDEuODQtLjI5MyAzLjcxMy0uODhMOSA2LjIxMlYySDd2NC4yMTJsLTEuNzIzIDMuODc2em0tLjQzOC45ODdMMy41MzkgMTRoOC45MjJsLTEuMzItMi45NjlDOS4wOTYgMTEuNjc3IDcuNzMzIDEyIDcgMTJjLS43NCAwLTEuNDYzLS4zMTUtMi4xNjEtLjkyNXpNNiAySDVWMWg2djFoLTF2NGwzLjM3NSA3LjU5NEExIDEgMCAwMTEyLjQ2MSAxNUgzLjU0YTEgMSAwIDAxLS45MTQtMS40MDZMNiA2VjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJlYWtlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQmVsbCA9IGZ1bmN0aW9uIEV1aUljb25CZWxsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIuMzE2IDEyaDEwLjM2OGMtLjE4OC0uNzA0LS4yOC0xLjY5MS0uMzQ4LTMuMDM3LS4wNy0xLjM4Mi0uMTAzLTEuODg4LS4xOS0yLjYxMi0uMDI4LS4yMzYtLjA2LS40NjItLjA5Ni0uNjgtLjMxLTEuODkyLTEuNTA2LTIuOTIzLTMuNzA4LTMuMTMxYTEgMSAwIDEwLTEuNjg0IDBjLTIuMjAyLjIwOC0zLjM5NyAxLjI0LTMuNzA4IDMuMTNhMTYuMDEgMTYuMDEgMCAwMC0uMDk2LjY4Yy0uMDg3LjcyNS0uMTIgMS4yMy0uMTkgMi42MTMtLjA2OCAxLjM0Ni0uMTYgMi4zMzMtLjM0OCAzLjAzN3ptMTAuODQzIDFIMS44NGMtLjMwOC4zNTMtLjczNy41LTEuMzQxLjVhLjUuNSAwIDExMC0xYy43ODYgMCAxLjAyNC0uNzgzIDEuMTY2LTMuNTg3LjA3LTEuNDA3LjEwNS0xLjkyNi4xOTYtMi42ODEuMDMtLjI1LjA2My0uNDkuMTAyLS43MjQuMzM0LTIuMDQxIDEuNTQ2LTMuMzEzIDMuNTU2LTMuNzkyYTIgMiAwIDAxMy45NiAwYzIuMDEuNDc5IDMuMjIyIDEuNzUgMy41NTcgMy43OTJhMTcgMTcgMCAwMS4xMDIuNzI0Yy4wOS43NTUuMTI1IDEuMjc0LjE5NiAyLjY4MS4xNCAyLjgwNC4zNzkgMy41ODcgMS4xNjUgMy41ODdhLjUuNSAwIDExMCAxYy0uNjA0IDAtMS4wMzMtLjE0Ny0xLjM0MS0uNXpNNS41IDE0aDRhMiAyIDAgMTEtNCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CZWxsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CZWxsU2xhc2ggPSBmdW5jdGlvbiBFdWlJY29uQmVsbFNsYXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDE0bC0uMDA1LjE1YTIgMiAwIDAxLTMuOTcyLjE1M2wtLjAxOC0uMTU0TDUuNSAxNGg0em01LjM4LTEyLjgyNWEuNS41IDAgMDEuMDA4LjY0bC0uMDYzLjA2NS0xNCAxMmEuNS41IDAgMDEtLjcxMy0uNjk1bC4wNjMtLjA2NSAxNC0xMmEuNS41IDAgMDEuNzA1LjA1NXpNMTMuMDM2IDUuNTFsLjA1NS4zNTMuMDQ4LjM2OGMuMDY2LjU1NC4xMDMuOTguMTQ1IDEuNzI0bC4wOCAxLjQ5MWMuMTQ2IDIuMzcxLjQwMiAzLjA1MyAxLjEzNiAzLjA1M2EuNS41IDAgMTEwIDFjLS42MDMgMC0xLjAzMS0uMTQ2LTEuMzQtLjQ5OUg0LjE4NWwxLjE4Mi0xaDcuMzE3Yy0uMTcyLS42NDQtLjI2NC0xLjUyOC0uMzMtMi43MDhsLS4wOS0xLjYzOGMtLjAzMy0uNTE0LS4wNjYtLjg3LS4xMTgtMS4zMDRsLS4wMTEtLjA3Ny45MDEtLjc2M3pNNy41IDBhMiAyIDAgMDExLjk4IDEuNzE3Yy40NzYuMTEzLjkwNy4yNyAxLjI5Mi40NzJsLS44MzguNzFhNS43MjggNS43MjggMCAwMC0xLjU5MS0uMzYgMSAxIDAgMTAtMS42ODQgMEM0LjQ1NSAyLjc1IDMuMjYgMy43OCAyLjk1IDUuNjcxbC0uMDUuMzM0LS4wNDYuMzQ3Yy0uMDguNjc2LS4xMTUgMS4xNjEtLjE3NiAyLjM0N2wtLjAxNC4yNjUtLjAwNS4wOS0xLjA1OC44OTdjLjAxOC0uMjM0LjAzNS0uNDg4LjA1LS43NjNsLjA3Ny0xLjQyN2MuMDM4LS42MjYuMDczLTEuMDI1LjEzNC0xLjUyOC4wMy0uMjUuMDYzLS40OS4xMDItLjcyNC4zMzQtMi4wNCAxLjU0Ni0zLjMxMyAzLjU1NS0zLjc5MmwuMDA0LS4wMTlBMiAyIDAgMDE3LjUgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQmVsbFNsYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Cb2x0ID0gZnVuY3Rpb24gRXVpSWNvbkJvbHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjA0IDEzLjI3NGEuNS41IDAgMTAuODkyLjQ1M2wzLjAxNC01LjkzMWEuNS41IDAgMDAtLjQ0NS0uNzI3SDUuMzE2TDguMDMgMS43MjdhLjUuNSAwIDEwLS44OTItLjQ1M0w0LjA1NSA3LjM0M2EuNS41IDAgMDAuNDQ2LjcyNmg1LjE4NUw3LjA0IDEzLjI3NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQm9sdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQm94ZXNIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkJveGVzSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgNmg0djRIMFY2em0xIDF2MmgyVjdIMXptNS0xaDR2NEg2VjZ6bTEgMXYyaDJWN0g3em01LTFoNHY0aC00VjZ6bTEgM2gyVjdoLTJ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQm94ZXNIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Cb3hlc1ZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkJveGVzVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDF2MmgyVjFIN3pNNiAwaDR2NEg2VjB6bTAgNmg0djRINlY2em0xIDF2MmgyVjdIN3ptLTEgNWg0djRINnYtNHptMSAxdjJoMnYtMkg3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Cb3hlc1ZlcnRpY2FsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CcmFuY2ggPSBmdW5jdGlvbiBFdWlJY29uQnJhbmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMC4wMzhhMy40OSAzLjQ5IDAgMDEyLjUtMS4wNWgyYTIuNSAyLjUgMCAwMDIuNDYyLTIuMDYxIDIgMiAwIDExMS4wMDguMDE3QTMuNSAzLjUgMCAwMTkuNSA5Ljk4N2gtMmEyLjUgMi41IDAgMDAtMi40NjYgMi4wODVBMiAyIDAgMTE0IDEyLjA2M1YzLjkzN2EyIDIgMCAxMTEgMHY2LjF6TTQuNSAzYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem0wIDEyYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem04LTlhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJyYW5jaDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQnJhbmNoVXNlciA9IGZ1bmN0aW9uIEV1aUljb25CcmFuY2hVc2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgNy45ODdhMy40OSAzLjQ5IDAgMDAtMi41IDEuMDV2LTQuMWEyIDIgMCAxMC0xIDB2Ni4xMjZhMiAyIDAgMTAxLjAzNC4wMUEyLjUgMi41IDAgMDE2IDguOTg2aDFhMy41IDMuNSAwIDAwMy40Ny0zLjA0MyAyIDIgMCAxMC0xLjAwOS0uMDE3QTIuNSAyLjUgMCAwMTcgNy45ODdINnpNNCAzYTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptMCAxMGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6bTctOWExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNSAxMC41YTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwek05IDE1Yy4yODQtMS4yMjMgMS41MTktMi4xNDMgMy0yLjE0M3MyLjcxNi45MiAzIDIuMTQzSDl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkJyYW5jaFVzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJyb29tID0gZnVuY3Rpb24gRXVpSWNvbkJyb29tKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy43MzIgMTMuMDk2bC0uMTk3LS4xOTcgMi44My0yLjgyOC43MDYuNzA3LTIuODI5IDIuODI4LjcwOC43MDggMi44MjgtMi44MjhhMSAxIDAgMDAwLTEuNDE0TDUuNjU4IDcuOTVhLjk5My45OTMgMCAwMC0uNzA4LS4yOTMuOTk0Ljk5NCAwIDAwLS43MDguMjkzbC0yLjgyOCAyLjgyOS43MDcuNzA3IDIuODI5LTIuODMuNzA3LjcwOC0yLjgyOSAyLjgyOS45MDQuOTAzem0xLjIxOC02LjQ0Yy41MTIgMCAxLjAyMy4xOTYgMS40MTQuNTg3bDIuMTIxIDIuMTJhMiAyIDAgMDEwIDIuODNMNC45NSAxNS43MjggMCAxMC43NzhsMy41MzUtMy41MzVhMS45OTMgMS45OTMgMCAwMTEuNDE1LS41ODZ6TTE0LjAyIDFsLjcwOC43MDctNi45NSA2Ljk1LS43MDctLjcwN0wxNC4wMjEgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJvb207IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJydXNoID0gZnVuY3Rpb24gRXVpSWNvbkJydXNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTkzIDguMTdjMCAuODMtLjY3MyAxLjUwNy0xLjQ5OSAxLjUwN0g1LjQ5OEExLjUwNSAxLjUwNSAwIDAxMy45OTkgOC4xN1Y2LjY2Mmg3Ljk5NFY4LjE3em0tMi45OTggNS45OThjMCAuNDU1LS40NDguODI3LS45OTkuODI3LS41NSAwLTEtLjM3Mi0xLS44Mjd2LTMuNDg2aDJ2My40ODZ6TTQgNS42NThWMS4wMDVoMS4yNjJ2NC42NTNINHptMi4yNjEgMFYxLjAwNWgxLjI0NHY0LjY1M0g2LjI2em0yLjI0NCAwVjEuMDA1aDEuMjM1djQuNjUzSDguNTA0em0yLjIzNCAwVjEuMDA1aDEuMjU0djQuNjUzaC0xLjI1NHpNMy4wMDggMEwzIDguMTdhMi41MDkgMi41MDkgMCAwMDIuNDk4IDIuNTEyaC41djMuNDg2YzAgMS4wMS44OTYgMS44MzIgMS45OTggMS44MzIgMS4xMDIgMCAxLjk5OC0uODIyIDEuOTk4LTEuODMydi0zLjQ4NmguNWEyLjUwOSAyLjUwOSAwIDAwMi40OTgtMi41MTJMMTMgMEgzLjAwOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnJ1c2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkJ1ZyA9IGZ1bmN0aW9uIEV1aUljb25CdWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC42NTEgNS4xMjZsLjkyMi0uNDU1Ljg4NC0yLjM0M2EuNS41IDAgMDEuOTM5LjM0NEwxMi4zNzQgNS4zOWwtMS40NS43MTdBNS4zIDUuMyAwIDAxMTEgN2gxLjA0M2wyLjMgMi4xOThhLjUuNSAwIDAxLS42OTIuNzIzTDExLjY0MiA4aC0uNzM3Yy0uMDkuNDY2LS4yNC44OTktLjQ0MSAxLjI4M2wuODkyLjQ5IDEuMjc4IDMuNTU0YS41LjUgMCAwMS0uOTQuMzQybC0xLjE1LTMuMi0uNjU1LS4zNkM5LjM3MyAxMC42NjUgOC43MTYgMTEgOCAxMXMtMS4zNzQtLjMzNS0xLjg5LS44OTNsLS42NTguMzYxLTEuMTUgMy4yMDFhLjUuNSAwIDExLS45NC0uMzQybDEuMjc5LTMuNTU0Ljg5NS0uNDkxQTQuNyA0LjcgMCAwMTUuMDk1IDhoLS43NGwtMi4wMSAxLjkyYS41LjUgMCAwMS0uNjktLjcyMkwzLjk1MiA3SDVhNS4zIDUuMyAwIDAxLjA3NS0uODkyTDMuNjIzIDUuMzkgMi42IDIuNjcyYS41LjUgMCAxMS45MzktLjM0NGwuODg0IDIuMzQzLjkyNC40NTdjLjE3LS40MjguMzk3LS44MS42NjgtMS4xMjhoLjU3YTEuNSAxLjUgMCAxMTIuODMgMGguNTY4Yy4yNy4zMTguNDk3LjY5OS42NjcgMS4xMjZ6TTggNGEuNS41IDAgMTAwLTEgLjUuNSAwIDAwMCAxem0xLjc1MSAxLjU3MUEzLjMyNiAzLjMyNiAwIDAwOS40NzYgNUg2LjUyNGMtLjEwNy4xNzUtLjIuMzY3LS4yNzYuNTczLS4xMS4yOTUtLjE4Ni42MTgtLjIyMy45NTdhNC4zNTQgNC4zNTQgMCAwMC4wOSAxLjQ2NWMuMDcxLjI5NC4xNzIuNTY1LjI5NS44MDYuMTY4LjMyOC4zOC42MDEuNjE2LjgwMy4yOTUuMjUzLjYzMS4zOTYuOTc0LjM5Ni4zNDIgMCAuNjc4LS4xNDIuOTczLS4zOTQuMjM3LS4yMDMuNDQ4LS40NzYuNjE2LS44MDNhMy42MiAzLjYyIDAgMDAuMjk2LS44MDcgNC4yNjMgNC4yNjMgMCAwMC4wOS0xLjQ2NiAzLjk4OCAzLjk4OCAwIDAwLS4yMjQtLjk1OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQnVnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25CdWxsc2V5ZSA9IGZ1bmN0aW9uIEV1aUljb25CdWxsc2V5ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRBNiA2IDAgMTA4IDJhNiA2IDAgMDAwIDEyem0wIDFBNyA3IDAgMTE4IDFhNyA3IDAgMDEwIDE0em0wLTNhNCA0IDAgMTAwLTggNCA0IDAgMDAwIDh6bTAtMWEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC0yYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25CdWxsc2V5ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2FsZW5kYXIgPSBmdW5jdGlvbiBFdWlJY29uQ2FsZW5kYXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCA0di0uOTk0QzE0IDIuNDUgMTMuNTUgMiAxMi45OTQgMkgxMXYxaC0xVjJINnYxSDVWMkgzLjAwNkMyLjQ1IDIgMiAyLjQ1IDIgMy4wMDZ2OS45ODhDMiAxMy41NSAyLjQ1IDE0IDMuMDA2IDE0aDkuOTg4QzEzLjU1IDE0IDE0IDEzLjU1IDE0IDEyLjk5NFY1SDJWNGgxMnptLTMtM2gxLjk5NEMxNC4xMDIgMSAxNSAxLjg5NyAxNSAzLjAwNnY5Ljk4OEEyLjAwNSAyLjAwNSAwIDAxMTIuOTk0IDE1SDMuMDA2QTIuMDA1IDIuMDA1IDAgMDExIDEyLjk5NFYzLjAwNkMxIDEuODk4IDEuODk3IDEgMy4wMDYgMUg1VjBoMXYxaDRWMGgxdjF6TTQgN2gydjFINFY3em0zIDBoMnYxSDdWN3ptMyAwaDJ2MWgtMlY3ek00IDloMnYxSDRWOXptMyAwaDJ2MUg3Vjl6bTMgMGgydjFoLTJWOXptLTYgMmgydjFINHYtMXptMyAwaDJ2MUg3di0xem0zIDBoMnYxaC0ydi0xelwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2FsZW5kYXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNoZWNrID0gZnVuY3Rpb24gRXVpSWNvbkNoZWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNSAxMmEuNTAyLjUwMiAwIDAxLS4zNTQtLjE0NmwtNC00YS41MDIuNTAyIDAgMDEuNzA4LS43MDhMNi41IDEwLjc5M2w2LjY0Ni02LjY0N2EuNTAyLjUwMiAwIDAxLjcwOC43MDhsLTcgN0EuNTAyLjUwMiAwIDAxNi41IDEyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DaGVja0luQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6bTMuNjUtMTAuODU3TDYuOTEgOS44IDQuMzUgNy4yODZhLjUuNSAwIDAwLS43LjcxNGwyLjkwOSAyLjg1N2EuNS41IDAgMDAuNyAwbDUuMDkxLTVhLjUuNSAwIDEwLS43LS43MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNoZWVyID0gZnVuY3Rpb24gRXVpSWNvbkNoZWVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC45MzQgMy4wNjNhMS41IDEuNSAwIDAxLjU0Ny4zMjFsLjExMi4xMTUgNi4wNyA2LjkxNWExLjUgMS41IDAgMDEtLjY0NiAyLjQxbC0uMTQyLjA0LTkuMDMxIDIuMDk3QTEuNSAxLjUgMCAwMS4wMzcgMTMuMTlsLjA0My0uMTU5TDMuMDQgNC4wMmExLjUgMS41IDAgMDExLjg5My0uOTU3ek00LjAyNyA0LjI1bC0uMDM2LjA4My0yLjk2MSA5LjAxMWEuNS41IDAgMDAuNDk4LjY1NmwuMDktLjAxMyAyLjkzNy0uNjgxLTEuMzk5LTEuNTA4YS41LjUgMCAwMS42NjYtLjc0bC4wNjcuMDYgMS43ODggMS45MjcgMi42MzQtLjYxMS0zLjE5OC0zLjYwMWEuNS41IDAgMDEuNjgyLS43MjZsLjA2Ni4wNjIgMy41NTkgNC4wMDcgMS4yMjktLjI4NGEuNS41IDAgMDAuMTUtLjA2M2wuMDY3LS4wNDlhLjUuNSAwIDAwLjA5OS0uNjMybC0uMDUzLS4wNzMtNi4wNy02LjkxNmEuNS41IDAgMDAtLjEzOC0uMTFsLS4wODItLjAzNS0uMDg4LS4wMmEuNS41IDAgMDAtLjUwNy4yNTZ6bTExLjY2IDUuMDM5YTIuNSAyLjUgMCAwMS0uOTc1IDMuMzk5LjUuNSAwIDAxLS40ODUtLjg3NSAxLjUgMS41IDAgMDAtMS40NTQtMi42MjQuNS41IDAgMDEtLjQ4NS0uODc1IDIuNSAyLjUgMCAwMTMuMzk5Ljk3NXptLTUuMDMtNi4yMDZhLjUuNSAwIDAxLjMzOC41NDRsLS4wMi4wODgtLjY3NyAyLjAzNSAyLjA2OC0uNzIxYS41LjUgMCAwMS42LjIyNWwuMDM2LjA4MmEuNS41IDAgMDEtLjIyNS42bC0uMDgyLjAzN0w5LjY3IDcuMDI4YS41LjUgMCAwMS0uNjU5LS41NWwuMDItLjA4Ljk5NS0zYS41LjUgMCAwMS42MzItLjMxNnpNMTQuNSA0YS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6TTcuODYyLjQwM2EyLjUgMi41IDAgMDEuNzM1IDMuNDU5LjUuNSAwIDAxLS44MzktLjU0NSAxLjUgMS41IDAgMTAtMi41MTYtMS42MzQuNS41IDAgMDEtLjgzOS0uNTQ1QTIuNSAyLjUgMCAwMTcuODYyLjQwM3pNMTMuNSAyYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0zLTFhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptNC0xYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNoZWVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DbG9jayA9IGZ1bmN0aW9uIEV1aUljb25DbG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMTNBNS41MDYgNS41MDYgMCAwMTIgNy41QzIgNC40NjcgNC40NjcgMiA3LjUgMlMxMyA0LjQ2NyAxMyA3LjUgMTAuNTMzIDEzIDcuNSAxM20wLTEyYTYuNSA2LjUgMCAxMDAgMTMgNi41IDYuNSAwIDAwMC0xM20zIDZIOFYzLjVhLjUuNSAwIDAwLTEgMHY0YS41LjUgMCAwMC41LjVoM2EuNS41IDAgMDAwLTFcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNsb3VkRHJpenpsZSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZERyaXp6bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjM0OCAzLjc2MUEzLjk5NSAzLjk5NSAwIDAxOCA3YS41LjUgMCAwMS0xIDAgMyAzIDAgMTAtNC44NzggMi4zNC41LjUgMCAwMS0uNjI3Ljc3OSA0IDQgMCAwMTMuOTczLTYuODQgNS41MDIgNS41MDIgMCAwMTEwLjA5NiA0LjM3LjUuNSAwIDExLS45Mi0uMzkgNC41IDQuNSAwIDEwLTguMjk2LTMuNDk3em0tMS42MSA0LjkzNWEuNS41IDAgMTEuNzc1LjYzM2wtMS40NjYgMS43OTJhLjUuNSAwIDExLS43NzQtLjYzM2wxLjQ2Ni0xLjc5MnptLTMuMTIgMy42NDdhLjUuNSAwIDAxLjc3NC42MzRsLTEuNTA1IDEuODRhLjUuNSAwIDAxLS43NzQtLjYzNGwxLjUwNS0xLjg0em03LjYyLTMuNjQ3YS41LjUgMCAwMS43NzUuNjMzbC0xLjQ2NiAxLjc5MmEuNS41IDAgMTEtLjc3NC0uNjMzbDEuNDY2LTEuNzkyem0tMy4xMiAzLjY0N2EuNS41IDAgMDEuNzc0LjYzNGwtMS41MDUgMS44NGEuNS41IDAgMDEtLjc3NC0uNjM0bDEuNTA1LTEuODR6bTcuNjItMy42NDdhLjUuNSAwIDExLjc3NS42MzNsLTEuNDY2IDEuNzkyYS41LjUgMCAxMS0uNzc0LS42MzNsMS40NjYtMS43OTJ6bS0zLjEyIDMuNjQ3YS41LjUgMCAwMS43NzQuNjM0bC0xLjUwNSAxLjg0YS41LjUgMCAwMS0uNzc0LS42MzRsMS41MDUtMS44NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvdWREcml6emxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DbG91ZFN0b3JteSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZFN0b3JteShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNDIxIDQuOTNhLjUuNSAwIDExLS44Ny40OSAzIDMgMCAxMC00LjQzIDMuOTE4LjUuNSAwIDAxLS42MjYuNzggNCA0IDAgMDEzLjk3My02Ljg0bC4wMzIuMDE4VjMuMjhhNS41IDUuNSAwIDExNy4wMDMgNy4zNTcuNS41IDAgMTEtLjM2LS45MzQgNC41IDQuNSAwIDEwLTUuNzctNS45MjNjLjQyLjMxLjc3OC43MDEgMS4wNSAxLjE1aC0uMDAyek05LjYgMTFjLjY2OS4wMDIuNzk0LjY3LjM2IDEuMDAzbC00LjY4IDMuODgyYy0uNDU3LjM3OC0xLjA1My0uMjYtLjY0My0uNjg5bDMuMDgtMy4xOTNBNTQxMS43IDU0MTEuNyAwIDAxNS4xMTMgMTJjLS42NjgtLjAwMS0uNzkzLS42NjktLjM2LTEuMDAzbDQuNjgtMy44ODFjLjQ1OC0uMzc5IDEuMDUzLjI2LjY0My42ODhsLTMuMDggMy4xOTNMOS42IDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25DbG91ZFN0b3JteTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2xvdWRTdW5ueSA9IGZ1bmN0aW9uIEV1aUljb25DbG91ZFN1bm55KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNzQ2IDUuMDA1QTUuNSA1LjUgMCAwMTEwLjUgMTZINGE0IDQgMCAwMS0xLjYxLTcuNjYzQTQuNDczIDQuNDczIDAgMDEyLjAyOSA3SC41YS41LjUgMCAwMTAtMWgxLjUyN2E0LjQ3OSA0LjQ3OSAwIDAxLjk1Ny0yLjMwOUwxLjY0NiAyLjM1NGEuNS41IDAgMTEuNzA4LS43MDhMMy42OSAyLjk4NEE0LjQ3OSA0LjQ3OSAwIDAxNiAyLjAyN1YuNWEuNS41IDAgMDExIDB2MS41MjhhNC40OTMgNC40OTMgMCAwMTIuMzA5Ljk1NmwxLjMzNy0xLjMzOGEuNS41IDAgMDEuNzA4LjcwOEwxMC4wMTYgMy42OWMuMzExLjM4OC41Ni44MzEuNzMgMS4zMTR6TTQgMTVoNi41YTQuNSA0LjUgMCAxMC00LjE1Mi02LjIzOUEzLjk5NSAzLjk5NSAwIDAxOCAxMmEuNS41IDAgMTEtMSAwIDMgMyAwIDEwLTMgM3ptNS42OTEtOS45NGEzLjUgMy41IDAgMTAtNi4zMyAyLjk5MSA0LjAyOSA0LjAyOSAwIDAxMi4xMDYuMjI3IDUuNTA1IDUuNTA1IDAgMDE0LjIyNC0zLjIxOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2xvdWRTdW5ueTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ2x1c3RlciA9IGZ1bmN0aW9uIEV1aUljb25DbHVzdGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjUgN2EyLjUgMi41IDAgMTAwLTUgMi41IDIuNSAwIDAwMCA1em0wLTZhMy41IDMuNSAwIDAxMy40NjUgM2gzLjEyYTEuNSAxLjUgMCAxMTAgMWgtMy4xMmEzLjQ4MiAzLjQ4MiAwIDAxLS42NjIgMS41OTZsMi4xIDIuMUEzLjUgMy41IDAgMTE4LjAzNiAxMmgtMy4xMmExLjUgMS41IDAgMTEwLS45OTloMy4xMmEzLjQ4MiAzLjQ4MiAwIDAxLjY2Mi0xLjU5NmwtMi4xLTIuMUEzLjUgMy41IDAgMTE0LjUgMXpNMTIgNC41YS41LjUgMCAxMDEgMCAuNS41IDAgMDAtMSAwem0tLjUgOS41YTIuNSAyLjUgMCAxMTAtNSAyLjUgMi41IDAgMDEwIDV6TTQgMTEuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ2x1c3RlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29sb3IgPSBmdW5jdGlvbiBFdWlJY29uQ29sb3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAxMWMxLjMzNCAxLjM5MyAyIDIuNDM1IDIgMy4xMjVDMTUgMTUuMTYxIDE0LjEwNSAxNiAxMyAxNmMtMS4xMDQgMC0yLS44NC0yLTEuODc1IDAtLjY5LjY2Ny0xLjczMiAyLTMuMTI1ek01Ljg1Ny4xNWw2LjM0IDYuNDUuMDE2LjAyLjMyNC4zMjFhMS41IDEuNSAwIDAxLjExIDIuMDA2bC0uMTAzLjExNC00LjQ3NCA0LjUxM2ExLjUgMS41IDAgMDEtMi4xMjMuMDA4TDEuNDY0IDkuMDZhMS41IDEuNSAwIDAxLjAwNy0yLjEybDQuNDcyLTQuNDVjLjE0NS0uMTQ2LjMxMy0uMjU0LjQ5Mi0uMzI3TDUuMTQ0Ljg1YS41LjUgMCAwMS43MTMtLjd6bTEuNDk2IDMuMDQ5YS41LjUgMCAwMC0uNzA1IDBMMi4xNzcgNy42NWEuNDk4LjQ5OCAwIDAwLS4xNDguMzVoOS45NWEuNDk4LjQ5OCAwIDAwLS4xNDgtLjM1TDcuMzUzIDMuMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29sb3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbXB1dGUgPSBmdW5jdGlvbiBFdWlJY29uQ29tcHV0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgM2ExIDEgMCAwMC0xIDF2OGExIDEgMCAwMDEgMWg4YTEgMSAwIDAwMS0xVjRhMSAxIDAgMDAtMS0xSDR6bTEwIDh2MWEyIDIgMCAwMS0yIDJoLTF2MmgtMXYtMkg4LjV2MmgtMXYtMkg2djJINXYtMkg0YTIgMiAwIDAxLTItMnYtMUgwdi0xaDJWOC41SDB2LTFoMlY2SDBWNWgyVjRhMiAyIDAgMDEyLTJoMVYwaDF2MmgxLjVWMGgxdjJIMTBWMGgxdjJoMWEyIDIgMCAwMTIgMnYxaDJ2MWgtMnYxLjVoMnYxaC0yVjEwaDJ2MWgtMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiA2LFxuICAgIGhlaWdodDogNixcbiAgICB4OiA1LFxuICAgIHk6IDUsXG4gICAgcng6IDFcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbXB1dGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnNvbGUgPSBmdW5jdGlvbiBFdWlJY29uQ29uc29sZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMTU3IDEyLjIyNEw1Ljc2OCA4LjMyYS40MDQuNDA0IDAgMDAwLS42NGwtNC42MS0zLjkwNGEuNDA3LjQwNyAwIDAxMC0uNjQzLjYwOC42MDggMCAwMS43NTkgMGw0LjYxIDMuOTA0Yy42MzEuNTM0LjYzIDEuMzkzIDAgMS45MjZsLTQuNjEgMy45MDRhLjYwOC42MDggMCAwMS0uNzYgMCAuNDA3LjQwNyAwIDAxMC0uNjQzek05IDEyaDZ2MUg5di0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Db25zb2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250YWluZXIgPSBmdW5jdGlvbiBFdWlJY29uQ29udGFpbmVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0wIDIuNUEuNS41IDAgMDEuNSAyaDE1YS41LjUgMCAwMTAgMUgxNXYxMGguNWEuNS41IDAgMDEwIDFILjVhLjUuNSAwIDAxMC0xSDFWM0guNWEuNS41IDAgMDEtLjUtLjV6TTIgM2gxMnYxMEgyVjN6bTMgMmEuNS41IDAgMDAtLjUuNXY1YS41LjUgMCAwMDEgMHYtNUEuNS41IDAgMDA1IDV6bTUuNS41YS41LjUgMCAwMTEgMHY1YS41LjUgMCAwMS0xIDB2LTV6TTggNWEuNS41IDAgMDAtLjUuNXY1YS41LjUgMCAwMDEgMHYtNUEuNS41IDAgMDA4IDV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvbnRhaW5lcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29udGludWl0eUFib3ZlID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlBYm92ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNSAzYS41LjUgMCAwMC0uNS41djlhLjUuNSAwIDAwMSAwdi05YS41LjUgMCAwMC0uNS0uNXptMyAwYS41LjUgMCAwMC0uNS41djlhLjUuNSAwIDAwMSAwVjloNnYxLjVhLjUuNSAwIDAwLjgyLjM4NGwzLTIuNWEuNS41IDAgMDAwLS43NjhsLTMtMi41QS41LjUgMCAwMDExIDUuNVY3SDVWMy41YS41LjUgMCAwMC0uNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUFib3ZlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyA9IGZ1bmN0aW9uIEV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSAzYS41LjUgMCAwMS41LjV2OWEuNS41IDAgMDEtMSAwVjlINHYxLjVhLjUuNSAwIDAxLS44Mi4zODRsLTMtMi41YS41LjUgMCAwMTAtLjc2OGwzLTIuNUEuNS41IDAgMDE0IDUuNVY3aDJWMy41YS41LjUgMCAwMS41LS41em0zIDBhLjUuNSAwIDAwLS41LjV2OWEuNS41IDAgMDAxIDBWOWgydjEuNWEuNS41IDAgMDAuODIuMzg0bDMtMi41YS41LjUgMCAwMDAtLjc2OGwtMy0yLjVBLjUuNSAwIDAwMTIgNS41VjdoLTJWMy41YS41LjUgMCAwMC0uNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUFib3ZlQmVsb3c7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvbnRpbnVpdHlCZWxvdyA9IGZ1bmN0aW9uIEV1aUljb25Db250aW51aXR5QmVsb3coX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS41IDNhLjUuNSAwIDAxLjUuNXY5YS41LjUgMCAwMS0xIDBWOUg1djEuNWEuNS41IDAgMDEtLjgyLjM4NGwtMy0yLjVhLjUuNSAwIDAxMC0uNzY4bDMtMi41QS41LjUgMCAwMTUgNS41VjdoNlYzLjVhLjUuNSAwIDAxLjUtLjV6bTMgMGEuNS41IDAgMDEuNS41djlhLjUuNSAwIDAxLTEgMHYtOWEuNS41IDAgMDEuNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eUJlbG93OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250aW51aXR5V2l0aGluID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRpbnVpdHlXaXRoaW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAzYS41LjUgMCAwMC0uNS41djlhLjUuNSAwIDAwMSAwdi05QS41LjUgMCAwMC41IDN6bTE0LjUuNWEuNS41IDAgMDExIDB2OWEuNS41IDAgMDEtMSAwdi05em0tNC43MTIgMS41NDdhLjUuNSAwIDAxLjUzMi4wNjlsMyAyLjVhLjUuNSAwIDAxMCAuNzY4bC0zIDIuNUEuNS41IDAgMDExMCAxMC41VjlINnYxLjVhLjUuNSAwIDAxLS44Mi4zODRsLTMtMi41YS41LjUgMCAwMTAtLjc2OGwzLTIuNUEuNS41IDAgMDE2IDUuNVY3aDRWNS41YS41LjUgMCAwMS4yODgtLjQ1M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udGludWl0eVdpdGhpbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRyb2xzSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjA1IDEwYTIuNSAyLjUgMCAwMTQuOSAwaDEuNTVhLjUuNSAwIDExMCAxaC0xLjU1YTIuNSAyLjUgMCAwMS00LjkgMEgxLjVhLjUuNSAwIDExMC0xaDYuNTV6bS0uMS00YTIuNSAyLjUgMCAwMS00LjkgMEgxLjVhLjUuNSAwIDAxMC0xaDEuNTVhMi41IDIuNSAwIDAxNC45IDBoNi41NWEuNS41IDAgMTEwIDFINy45NXpNNCA1LjVhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6bTggNWExLjUgMS41IDAgMTAtMyAwIDEuNSAxLjUgMCAwMDMgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udHJvbHNIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Db250cm9sc1ZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkNvbnRyb2xzVmVydGljYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAgNy45NWEyLjUgMi41IDAgMDEwLTQuOVYxLjVhLjUuNSAwIDExMSAwdjEuNTVhMi41IDIuNSAwIDAxMCA0Ljl2Ni41NWEuNS41IDAgMTEtMSAwVjcuOTV6bS00IC4xYTIuNSAyLjUgMCAwMTAgNC45djEuNTVhLjUuNSAwIDExLTEgMHYtMS41NWEyLjUgMi41IDAgMDEwLTQuOVYxLjVhLjUuNSAwIDAxMSAwdjYuNTV6TTUuNSAxMmExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzem01LThhMS41IDEuNSAwIDEwMCAzIDEuNSAxLjUgMCAwMDAtM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29udHJvbHNWZXJ0aWNhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ29weSA9IGZ1bmN0aW9uIEV1aUljb25Db3B5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuNCAwYy4yMzUgMCAuNDYuMDk5LjYyMi4yNzNsMi43NDMgM2MuMTUxLjE2Mi4yMzUuMzc4LjIzNS42MDJ2OS4yNWEuODY3Ljg2NyAwIDAxLS44NTcuODc1SDMuODU3QS44NjcuODY3IDAgMDEzIDEzLjEyNVYuODc1QzMgLjM5MiAzLjM4NCAwIDMuODU3IDBIMTEuNHpNMTQgNGgtMi42YS40LjQgMCAwMS0uNC0uNFYxSDR2MTJoMTBWNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMUgyYTEgMSAwIDAwLTEgMXYxM2ExIDEgMCAwMDEgMWgxMGExIDEgMCAwMDEtMXYtMWgtMXYxSDJWMmgxVjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkNvcHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNvcHlDbGlwYm9hcmQgPSBmdW5jdGlvbiBFdWlJY29uQ29weUNsaXBib2FyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMi43MjlWMmExIDEgMCAwMTEtMWgydjFIM3YxMmg0djFIM2ExIDEgMCAwMS0xLTFWMi43Mjl6TTE0IDVWMmExIDEgMCAwMC0xLTFoLTJ2MWgydjNoMXptLTEgMWgydjlIOFY2aDVWNUg4YTEgMSAwIDAwLTEgMXY5YTEgMSAwIDAwMSAxaDdhMSAxIDAgMDAxLTFWNmExIDEgMCAwMC0xLTFoLTJ2MXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTBoNVY5SDl2MXptMC0yaDVWN0g5djF6bTAgNGg1di0xSDl2MXptMCAyaDV2LTFIOXYxem0yLTEyVjFhMSAxIDAgMDAtMS0xSDZhMSAxIDAgMDAtMSAxdjFoMVYxaDR2MWgxek01IDNoNlYySDV2MXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ29weUNsaXBib2FyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ3Jvc3MgPSBmdW5jdGlvbiBFdWlJY29uQ3Jvc3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjI5MyA4TDMuMTQ2IDMuODU0YS41LjUgMCAxMS43MDgtLjcwOEw4IDcuMjkzbDQuMTQ2LTQuMTQ3YS41LjUgMCAwMS43MDguNzA4TDguNzA3IDhsNC4xNDcgNC4xNDZhLjUuNSAwIDAxLS43MDguNzA4TDggOC43MDdsLTQuMTQ2IDQuMTQ3YS41LjUgMCAwMS0uNzA4LS43MDhMNy4yOTMgOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3Jvc3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkNyb3NzSW5BQ2lyY2xlRmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvbkNyb3NzSW5BQ2lyY2xlRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC43NDYgOGwzLjEtMy4xYS41MjcuNTI3IDAgMTAtLjc0Ni0uNzQ2TDggNy4yNTRsLTMuMS0zLjFhLjUyNy41MjcgMCAxMC0uNzQ2Ljc0NmwzLjEgMy4xLTMuMSAzLjFhLjUyNy41MjcgMCAxMC43NDYuNzQ2bDMuMS0zLjEgMy4xIDMuMWEuNTI3LjUyNyAwIDEwLjc0Ni0uNzQ2TDguNzQ2IDh6TTggMTZBOCA4IDAgMTE4IDBhOCA4IDAgMDEwIDE2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zc0luQUNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uQ3Jvc3NoYWlycyA9IGZ1bmN0aW9uIEV1aUljb25Dcm9zc2hhaXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS44MjIgMS44NzRhLjUuNSAwIDExLjMzNS45NDIgNS41MTcgNS41MTcgMCAwMC0zLjM0IDMuMzQxLjUuNSAwIDExLS45NDMtLjMzNSA2LjUxNyA2LjUxNyAwIDAxMy45NDgtMy45NDh6TTEuODY0IDEwLjE1YS41LjUgMCAxMS45NDQtLjMzIDUuNTE3IDUuNTE3IDAgMDAzLjM2NSAzLjM3LjUuNSAwIDAxLS4zMzMuOTQzIDYuNTE3IDYuNTE3IDAgMDEtMy45NzYtMy45ODN6bTguMzAyIDMuOTgxYS41LjUgMCAxMS0uMzMzLS45NDMgNS41MTcgNS41MTcgMCAwMDMuMzQ3LTMuMzMyLjUuNSAwIDExLjk0MS4zMzcgNi41MTcgNi41MTcgMCAwMS0zLjk1NSAzLjkzOHptMy45NjgtOC4yODVhLjUuNSAwIDExLS45NDMuMzMxQTUuNTE3IDUuNTE3IDAgMDA5Ljg1IDIuODJhLjUuNSAwIDAxLjMzNy0uOTQyIDYuNTE3IDYuNTE3IDAgMDEzLjk0NiAzLjk2OHpNOC41IDMuNWEuNS41IDAgMDEtMSAwVi45OTdhLjUuNSAwIDAxMSAwVjMuNXptLTQuOTk3IDRhLjUuNSAwIDAxMCAxSDFhLjUuNSAwIDAxMC0xaDIuNTAzek03LjUgMTIuNDk3YS41LjUgMCAwMTEgMFYxNWEuNS41IDAgMTEtMSAwdi0yLjUwM3pNMTIuNDk3IDguNWEuNS41IDAgMDEwLTFIMTVhLjUuNSAwIDExMCAxaC0yLjUwM3pNOCA5YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Dcm9zc2hhaXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25DdXJyZW5jeSA9IGZ1bmN0aW9uIEV1aUljb25DdXJyZW5jeShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjk1IDEuNjM2bDEuNDE0IDEuNDE0LTIuMTkyIDIuMTkzQzEyLjY5NSA2LjAzMyAxMyA2Ljk4IDEzIDhjMCAxLjAyLS4zMDUgMS45NjctLjgyOCAyLjc1N2wyLjE5MiAyLjE5My0xLjQxNCAxLjQxNC0yLjE5My0yLjE5MkE0Ljk3NyA0Ljk3NyAwIDAxOCAxM2E0Ljk3NyA0Ljk3NyAwIDAxLTIuNzU3LS44MjhMMy4wNSAxNC4zNjQgMS42MzYgMTIuOTVsMi4xOTItMi4xOTNBNC45NzcgNC45NzcgMCAwMTMgOGMwLTEuMDIuMzA1LTEuOTY3LjgyOC0yLjc1N0wxLjYzNiAzLjA1IDMuMDUgMS42MzZsMi4xOTMgMi4xOTJBNC45NzcgNC45NzcgMCAwMTggM2MxLjAyIDAgMS45NjcuMzA1IDIuNzU3LjgyOGwyLjE5My0yLjE5MnpNOCA1YTIuOTkgMi45OSAwIDAwLTEuMTY4LjIzNmwtLjEyNi4wNTctLjIxOC4xMTYtLjEzMi4wODEtLjA3My4wNWEzLjAxMyAzLjAxMyAwIDAwLS4yNDEuMTg3bC0uMTEzLjEwMy0uMTQ3LjE1Yy0uMDUuMDU0LS4wOTcuMTEtLjE0Mi4xNjhsLS4xLjEzNS0uMDUuMDczLS4wNi4wOTdjLS4wNS4wODItLjA5Ni4xNjYtLjEzNy4yNTNsLS4wNTcuMTI2QTIuOTkgMi45OSAwIDAwNSA4YzAgLjQxNC4wODQuODA5LjIzNiAxLjE2OGwuMDU3LjEyNi4xMTYuMjE4LjA4MS4xMzJjLjA1OS4wODkuMTIxLjE3NS4xODkuMjU3bC4xNS4xNy4xNTEuMTQ3Yy4wNTYuMDUxLjExNC4xLjE3NC4xNDdsLjE0Mi4xMDVjLjA1NC4wMzcuMTA5LjA3Mi4xNjUuMTA2bC0uMTI0LS4wNzkuMDkyLjA2LjA5NC4wNTVjLjQzNi4yNDcuOTQuMzg4IDEuNDc3LjM4OGEyLjk5IDIuOTkgMCAwMDEuMTY4LS4yMzZsLjEyNS0uMDU2LjIxMy0uMTEzLjE1MS0uMDk0LjA1LS4wMzRhMy4wMTEgMy4wMTEgMCAwMC4zMjMtLjI1OGwtLjE1LjEyOS4wOS0uMDc1LjE2OC0uMTU5LjA4LS4wODRjLjA1MS0uMDU2LjEtLjExNC4xNDctLjE3NGwuMTA1LS4xNDIuMTA2LS4xNjVjLjA0Ny0uMDguMDkxLS4xNjEuMTMxLS4yNDVsLjA1Ny0uMTI2QTIuOTkgMi45OSAwIDAwMTEgOGEyLjk5IDIuOTkgMCAwMC0uMjM2LTEuMTY4bC0uMDU2LS4xMjUtLjExMi0uMjExLS4wOTYtLjE1NS0uMDMzLS4wNDlhMy4wMTEgMy4wMTEgMCAwMC0uMjU4LS4zMjJsLjEyOS4xNS0uMDc1LS4wOS0uMTU5LS4xNjgtLjA4NC0uMDhhMy4wMTUgMy4wMTUgMCAwMC0uMTc0LS4xNDdsLS4xODMtLjEzMi0uMTI0LS4wNzlhMi45OTMgMi45OTMgMCAwMC0uMjQ1LS4xMzFsLS4xMjYtLjA1N0EyLjk5IDIuOTkgMCAwMDggNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3VycmVuY3k7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkN1dCA9IGZ1bmN0aW9uIEV1aUljb25DdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4xNDIgMTEuMDc0bC0xLjkxMi41NDhhMi41MzIgMi41MzIgMCAxMS0xLjM5NS00Ljg2N2wxLjk0Ny0uNTU5YTIuNTMyIDIuNTMyIDAgMDEyLjU1NS43MTNsMS41My01LjMzNWMuMTM5LS40ODUuNi0uODk3IDEuMTU5LTEuMjM4LjI3LS4xNjQuNTItLjI3OC43NzktLjMyLjgxNC0uMTMyIDEuNTAzLjU1OCAxLjI2MSAxLjQyMkw5LjU3NCA2LjY0M2w0Ljk4OC0xLjQzYy44NjQtLjI0MiAxLjU1NC40NDcgMS40MjIgMS4yNi0uMDQyLjI2LS4xNTYuNTEtLjMyLjc4LS4zNDEuNTYtLjc1MyAxLjAyLTEuMjM4IDEuMTZMOS41MjMgOS44MTdhMi41MyAyLjUzIDAgMDEuNTYgMi40bC0uNTYgMS45NDdhMi41MzIgMi41MzIgMCAxMS00Ljg2Ny0xLjM5NWwuNDg2LTEuNjk2em0uMzMtMS4xNDhsLjQ4LTEuNjczYTEuNTIgMS41MiAwIDAwLTEuODktMS4wODNsLTEuOTQ4LjU1OGExLjUyIDEuNTIgMCAwMC44MzcgMi45MmwyLjUyLS43MjJ6bTMuNzczLTIuMTM1bC0uMzMgMS4xNDggNS4yMzItMS41Yy4zMjQtLjA5MyAxLjE4Mi0xLjM5LjY5NC0xLjI1M0w5LjI0NSA3Ljc5MXpNNS42MyAxMy4wNDlhMS41MiAxLjUyIDAgMDAyLjkyLjgzN2wuNTU5LTEuOTQ3YTEuNTIgMS41MiAwIDAwLTEuNTUzLTEuOTM1bDIuNTM3LTguODQ1Yy4xMzYtLjQ4OC0xLjE2LjM3LTEuMjUzLjY5NEw1LjYzIDEzLjA1em0uOTczLjI3OWwuNTU5LTEuOTQ3YS41MDYuNTA2IDAgMTEuOTczLjI3OWwtLjU1OCAxLjk0N2EuNTA2LjUwNiAwIDExLS45NzQtLjI4em0tMy45My0zLjY1M2EuNTA2LjUwNiAwIDExLS4yOC0uOTczbDEuOTQ3LS41NThhLjUwNi41MDYgMCAwMS4yOC45NzNsLTEuOTQ4LjU1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uQ3V0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25EYXRhYmFzZSA9IGZ1bmN0aW9uIEV1aUljb25EYXRhYmFzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMTJoMTJ2LTEuOTdjLTEuMjI1LjU4Mi0zLjQ1NC45Ny02IC45N3MtNC43NzUtLjM4OC02LS45N1YxMnptLTEgMFYzYzAtMS4xMDUgMy4xMzQtMiA3LTJzNyAuODk1IDcgMnY5YzAgMS4xMDUtMy4xMzQgMi03IDJzLTctLjg5NS03LTJ6bTEtM2gxMlY3LjAzYy0xLjIyNS41ODItMy40NTQuOTctNiAuOTdzLTQuNzc1LS4zODgtNi0uOTdWOXptMC00Ljk3VjZoMTJWNC4wM2MtMS4yMjUuNTgyLTMuNDU0Ljk3LTYgLjk3cy00Ljc3NS0uMzg4LTYtLjk3em0xMC42NzUtMS40ODNDMTEuNDY3IDIuMjAyIDkuNzk1IDIgOCAyYy0xLjc5NCAwLTMuNDY3LjIwMi00LjY3NS41NDctLjQ5Mi4xNC0uODguMjk4LTEuMTM2LjQ1My4yNTYuMTU1LjY0NC4zMTIgMS4xMzYuNDUzQzQuNTMzIDMuNzk4IDYuMjA1IDQgOCA0YzEuNzk0IDAgMy40NjctLjIwMiA0LjY3NS0uNTQ3LjQ5Mi0uMTQuODgtLjI5OCAxLjEzNi0uNDUzLS4yNTYtLjE1NS0uNjQ0LS4zMTItMS4xMzYtLjQ1M3pNMiA2Yy4yNTcuMTU1LjgzMy4zMTIgMS4zMjUuNDUzQzQuNTMzIDYuNzk4IDYuMjA1IDcgOCA3YzEuNzk0IDAgMy40NjctLjIwMiA0LjY3NS0uNTQ3LjQ5Mi0uMTQgMS4wNy0uMjk4IDEuMzI3LS40NTNIMnptMCAzYy4yNTcuMTU1LjgzMy4zMTIgMS4zMjUuNDUzQzQuNTMzIDkuNzk4IDYuMjA1IDEwIDggMTBjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyem0wIDNjLjI1Ny4xNTUuODMzLjMxMiAxLjMyNS40NTNDNC41MzMgMTIuNzk4IDYuMjA1IDEzIDggMTNjMS43OTQgMCAzLjQ2Ny0uMjAyIDQuNjc1LS41NDcuNDkyLS4xNCAxLjA3LS4yOTggMS4zMjctLjQ1M0gyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25EYXRhYmFzZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRGVza3RvcCA9IGZ1bmN0aW9uIEV1aUljb25EZXNrdG9wKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTIgMmExIDEgMCAwMC0xIDF2N2ExIDEgMCAwMDEgMWg0bC0xIDNIMy41YS41LjUgMCAwMDAgMWg5YS41LjUgMCAwMDAtMUgxMWwtMS0zaDRhMSAxIDAgMDAxLTFWM2ExIDEgMCAwMC0xLTFIMnptMCA4VjNoMTJ2N0gyem01IDFoMmwxIDNINmwxLTN6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDZhLjUuNSAwIDAwMCAxaDFhLjUuNSAwIDAwMC0xaC0xem0zIDBhLjUuNSAwIDAwMCAxaDFhLjUuNSAwIDAwMC0xaC0xem0yLjUuNWEuNS41IDAgMDEuNS0uNWgxYS41LjUgMCAwMTAgMWgtMWEuNS41IDAgMDEtLjUtLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRlc2t0b3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRvY3VtZW50ID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuOCAwYy4yNzQgMCAuNTM3LjExMy43MjYuMzEybDMuMiAzLjQyOGMuMTc2LjE4Ni4yNzQuNDMzLjI3NC42ODlWMTVhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjFhMSAxIDAgMDExLTFoOC44ek0xNCA1aC0zLjVhLjUuNSAwIDAxLS41LS41VjFIMnYxNGgxMlY1em0tOC41IDdhLjUuNSAwIDExMC0xaDVhLjUuNSAwIDExMCAxaC01em0wLTNhLjUuNSAwIDAxMC0xaDVhLjUuNSAwIDExMCAxaC01elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG9jdW1lbnRFZGl0ID0gZnVuY3Rpb24gRXVpSWNvbkRvY3VtZW50RWRpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTA1IDguOTk1bDYuNDUzLTYuNDQtMS41LTEuNS02LjQ1MyA2LjQ0IDEuNSAxLjV6TTEyLjk2OC4xOWMuMjU4LS4yMzguNjU3LS4yNi45MSAwbDEuOTI4IDEuOTI5YS42NDIuNjQyIDAgMDEwIC45MDlsLTYuNzggNi43ODRBLjY0MS42NDEgMCAwMTguNTcgMTBINi42NDNBLjY0My42NDMgMCAwMTYgOS4zNTdWNy40M2MwLS4xNy4wNjctLjMzNS4xODgtLjQ1NUwxMi45NjguMTl6TTQuNSAxM2EuNS41IDAgMTEwLTFoN2EuNS41IDAgMTEwIDFoLTd6bTQtMTJhLjUuNSAwIDAxMCAxSDJ2MTNoMTJWNy41YS41LjUgMCAxMTEgMFYxNWExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg2LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50RWRpdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG9jdW1lbnRhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Eb2N1bWVudGF0aW9uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAzLjVhLjUuNSAwIDExLTEgMCAuNS41IDAgMDExIDB6TTkgNXYzaDF2MUg4VjZIN1Y1aDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy44NTUgMTQuMTQ3YTEuMzQgMS4zNCAwIDAxLS4xNTgtLjI0NkExLjk5OCAxLjk5OCAwIDAxMTMuNSAxM2MwLS40MTQuMTAzLS43MTMuMTk3LS45MDFhMS4zNCAxLjM0IDAgMDEuMTU4LS4yNDZsLjAwMy0uMDA1QS41LjUgMCAwMDE0IDExLjVWLjVhLjUuNSAwIDAwLS41LS41SDMuNDYxbC0uMDgzLjAwNWEyLjk1NyAyLjk1NyAwIDAwLTEuMTAyLjI5OCAyLjI1NyAyLjI1NyAwIDAwLS44OC43NjNDMS4xNDggMS40NCAxIDEuOTEzIDEgMi41VjEzYzAgLjQ2My4xMTcuODQzLjMxOCAxLjE0NS4yLjI5OC40NjIuNDkxLjcwOC42MTVhMi4zNDQgMi4zNDQgMCAwMC45NC4yNEgzdi0xYy0uMDA1IDAtLjAxNSAwLS4wMjktLjAwMmExLjM0NCAxLjM0NCAwIDAxLS40OTgtLjEzMy44MTcuODE3IDAgMDEtLjMyMy0uMjc1QzIuMDcgMTMuNDcgMiAxMy4yODcgMiAxM3MuMDctLjQ3LjE1LS41OWEuODE3LjgxNyAwIDAxLjMyNC0uMjc1QTEuMzQ0IDEuMzQ0IDAgMDEzIDEyaDkuNjU4Yy0uMDkxLjI3LS4xNTguNjA1LS4xNTggMXMuMDY3LjczLjE1OCAxSDh2MWg1LjVhLjUuNSAwIDAwLjM1OS0uODQ4bC0uMDA0LS4wMDV6bS0uMDAxIDBsLjAwMi4wMDItLjAwMi0uMDAyek0yLjcyNCAxLjE5N2MuMDkyLS4wNDYuMTg2LS4wODIuMjc2LS4xMUMzIDIuOTE4IDMuMDAxIDExIDIuOTk5IDExaC0uMDMzYTEuOTc3IDEuOTc3IDAgMDAtLjI4My4wMyAyLjM0NCAyLjM0NCAwIDAwLS42NTcuMjFMMiAxMS4yNTRWMi41YzAtLjQxMy4xMDItLjY4OS4yMjktLjg3OS4xMjgtLjE5My4zMDQtLjMyOC40OTUtLjQyNHpNNCAxMVYxaDl2MTBINHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTNINHYyLjVhLjUuNSAwIDAwLjg1NC4zNTRsLjY0Ni0uNjQ3LjY0Ni42NDdBLjUuNSAwIDAwNyAxNS41VjEzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Eb2N1bWVudGF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb2N1bWVudHMgPSBmdW5jdGlvbiBFdWlJY29uRG9jdW1lbnRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC44IDBjLjI3NCAwIC41MzcuMTEzLjcyNi4zMTJsMy4yIDMuNDI4Yy4xNzYuMTg2LjI3NC40MzMuMjc0LjY4OVYxM2ExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWMWExIDEgMCAwMTEtMWg2Ljh6TTEyIDVIOC41YS41LjUgMCAwMS0uNS0uNVYxSDJ2MTJoMTBWNXptLTcuNSA2YS41LjUgMCAxMTAtMWg1YS41LjUgMCAxMTAgMWgtNXptMC0zYS41LjUgMCAwMTAtMWg1YS41LjUgMCAxMTAgMWgtNXptMSA4YS41LjUgMCAxMTAtMUgxNFY2LjVhLjUuNSAwIDExMSAwVjE1YTEgMSAwIDAxLTEgMUg1LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvY3VtZW50czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG90ID0gZnVuY3Rpb24gRXVpSWNvbkRvdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImNpcmNsZVwiLCB7XG4gICAgY3g6IDgsXG4gICAgY3k6IDgsXG4gICAgcjogNFxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG90OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Eb3VibGVBcnJvd0xlZnQgPSBmdW5jdGlvbiBFdWlJY29uRG91YmxlQXJyb3dMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjEzNSAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI1LTEuMDZsLTQuNTkxLTQuODFhLjI1LjI1IDAgMDEwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDEwLTEuMDg0LTEuMDM1bC00LjU5MSA0LjgxYTEuNzUgMS43NSAwIDAwMCAyLjQxNmw0LjU5IDQuODFjLjI4Ny4zLjc2MS4zMSAxLjA2MS4wMjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0LjEzNSAxNC4wNDNhLjc1Ljc1IDAgMDAuMDI1LTEuMDZsLTQuNTkxLTQuODFhLjI1LjI1IDAgMDEwLS4zNDZsNC41OS00LjgxYS43NS43NSAwIDEwLTEuMDg0LTEuMDM1bC00LjU5MSA0LjgxYTEuNzUgMS43NSAwIDAwMCAyLjQxNmw0LjU5IDQuODFjLjI4Ny4zLjc2MS4zMSAxLjA2MS4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvdWJsZUFycm93TGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRG91YmxlQXJyb3dSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25Eb3VibGVBcnJvd1JpZ2h0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0yLjIzMiAxNC4wNDNhLjc1Ljc1IDAgMDEtLjAyNS0xLjA2bDQuNTkxLTQuODFhLjI1LjI1IDAgMDAwLS4zNDZsLTQuNTktNC44MWEuNzUuNzUgMCAwMTEuMDg1LTEuMDM1bDQuNTkgNC44MWExLjc1IDEuNzUgMCAwMTAgMi40MTZsLTQuNTkgNC44MWEuNzUuNzUgMCAwMS0xLjA2LjAyNHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4yMzIgMTQuMDQzYS43NS43NSAwIDAxLS4wMjUtMS4wNmw0LjU5MS00LjgxYS4yNS4yNSAwIDAwMC0uMzQ2bC00LjU5LTQuODFhLjc1Ljc1IDAgMDExLjA4NS0xLjAzNWw0LjU5IDQuODFhMS43NSAxLjc1IDAgMDEwIDIuNDE2bC00LjU5IDQuODFhLjc1Ljc1IDAgMDEtMS4wNi4wMjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkRvdWJsZUFycm93UmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkRvd25sb2FkID0gZnVuY3Rpb24gRXVpSWNvbkRvd25sb2FkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA5LjExNGwxLjg1LTEuOTQzYS41Mi41MiAwIDAxLjc3IDBjLjIxNC4yMjguMjE0LjYgMCAuODI5bC0xLjk1IDIuMDVhMS41NTIgMS41NTIgMCAwMS0yLjMxIDBMNS40MSA4YS42MTcuNjE3IDAgMDEwLS44MjkuNTIuNTIgMCAwMS43NyAwTDggOS4wODJWLjU1NkM4IC4yNDkgOC4yMjQgMCA4LjUgMHMuNS4yNDkuNS41NTZ2OC41NTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAxMy4wMDZWMTBoLTF2My4wMDZhLjk5NS45OTUgMCAwMS0uOTk0Ljk5NEgzLjAxYS45OTUuOTk1IDAgMDEtLjk5NC0uOTk0VjEwaC0xdjMuMDA2YzAgMS4xLjg5MiAxLjk5NCAxLjk5NCAxLjk5NGgxMC45OTZjMS4xIDAgMS45OTQtLjg5MyAxLjk5NC0xLjk5NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRG93bmxvYWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAyaDJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJIN2EyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnpNMS41IDFhLjUuNSAwIDAxLjUuNXYxM2EuNS41IDAgMTEtMSAwdi0xM2EuNS41IDAgMDEuNS0uNXptMTMgMGEuNS41IDAgMDEuNS41djEzYS41LjUgMCAxMS0xIDB2LTEzYS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNWg4YTIgMiAwIDAxMiAydjJhMiAyIDAgMDEtMiAySDRhMiAyIDAgMDEtMi0yVjdhMiAyIDAgMDEyLTJ6TTEuNSAxaDEzYS41LjUgMCAxMTAgMWgtMTNhLjUuNSAwIDAxMC0xem0wIDEzaDEzYS41LjUgMCAxMTAgMWgtMTNhLjUuNSAwIDExMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JEaXN0cmlidXRlVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b20oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDFoMmEyIDIgMCAwMTIgMnY4YTIgMiAwIDAxLTIgMkg3YTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yek0xLjUgMTRoMTNhLjUuNSAwIDExMCAxaC0xM2EuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkJvdHRvbTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNEg3VjEuNWEuNS41IDAgMDExIDBWNHptMCA4djIuNWEuNS41IDAgMTEtMSAwVjEyaDF6TTMgNWg5YTIgMiAwIDAxMiAydjJhMiAyIDAgMDEtMiAySDNhMiAyIDAgMDEtMi0yVjdhMiAyIDAgMDEyLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkNlbnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25MZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA1aDhhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJINWEyIDIgMCAwMS0yLTJWN2EyIDIgMCAwMTItMnpNMS41IDFhLjUuNSAwIDAxLjUuNXYxM2EuNS41IDAgMTEtMSAwdi0xM2EuNS41IDAgMDEuNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduTGVmdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnbk1pZGRsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgN3YxSDEuNWEuNS41IDAgMDEwLTFINHptOCAwaDIuNWEuNS41IDAgMTEwIDFIMTJWN3pNNyAxaDJhMiAyIDAgMDEyIDJ2OWEyIDIgMCAwMS0yIDJIN2EyIDIgMCAwMS0yLTJWM2EyIDIgMCAwMTItMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNWg4YTIgMiAwIDAxMiAydjJhMiAyIDAgMDEtMiAySDNhMiAyIDAgMDEtMi0yVjdhMiAyIDAgMDEyLTJ6bTExLjUtNGEuNS41IDAgMDEuNS41djEzYS41LjUgMCAxMS0xIDB2LTEzYS41LjUgMCAwMS41LS41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRlbUFsaWduVG9wID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgM2gyYTIgMiAwIDAxMiAydjhhMiAyIDAgMDEtMiAySDdhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJ6TTEuNSAxaDEzYS41LjUgMCAxMTAgMWgtMTNhLjUuNSAwIDAxMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JJdGVtQWxpZ25Ub3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDhoNWExIDEgMCAwMTEgMXY1SDNhMSAxIDAgMDEtMS0xVjh6bTEtN2gxMGEyIDIgMCAwMTIgMnYxMGEyIDIgMCAwMS0yIDJIM2EyIDIgMCAwMS0yLTJWM2EyIDIgMCAwMTItMnptMCAxYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAwMDEgMWgxMGExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgOGg1djVhMSAxIDAgMDEtMSAxSDhWOWExIDEgMCAwMTEtMXpNMyAxaDEwYTIgMiAwIDAxMiAydjEwYTIgMiAwIDAxLTIgMkgzYTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEwYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wTGVmdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDJoNXY1YTEgMSAwIDAxLTEgMUgyVjNhMSAxIDAgMDExLTF6bTAtMWgxMGEyIDIgMCAwMTIgMnYxMGEyIDIgMCAwMS0yIDJIM2EyIDIgMCAwMS0yLTJWM2EyIDIgMCAwMTItMnptMCAxYTEgMSAwIDAwLTEgMXYxMGExIDEgMCAwMDEgMWgxMGExIDEgMCAwMDEtMVYzYTEgMSAwIDAwLTEtMUgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMmg1YTEgMSAwIDAxMSAxdjVIOWExIDEgMCAwMS0xLTFWMnpNMyAxaDEwYTIgMiAwIDAxMiAydjEwYTIgMiAwIDAxLTIgMkgzYTIgMiAwIDAxLTItMlYzYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEwYTEgMSAwIDAwMSAxaDEwYTEgMSAwIDAwMS0xVjNhMSAxIDAgMDAtMS0xSDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclBvc2l0aW9uVG9wUmlnaHQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckFsaWduQ2VudGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA0VjNoNnYxSDV6TTMgN1Y2aDEwdjFIM3ptMiAzVjloNnYxSDV6bS0yIDN2LTFoMTB2MUgzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnbkNlbnRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQWxpZ25MZWZ0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckFsaWduTGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgNFYzaDZ2MUgyem0wIDNWNmgxMHYxSDJ6bTAgM1Y5aDZ2MUgyem0wIDN2LTFoMTB2MUgyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JBbGlnbkxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckFsaWduUmlnaHQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQWxpZ25SaWdodChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNFYzaDZ2MUg4ek00IDdWNmgxMHYxSDR6bTQgM1Y5aDZ2MUg4em0tNCAzdi0xaDEwdjFINHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yQWxpZ25SaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQm9sZCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JCb2xkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xOTMgMTNINFYzaDQuMTUxYzEuODE2IDAgMi45ODcuOTc3IDIuOTg3IDIuNDk1IDAgMS4wNzQtLjc5NyAyLjAxLTEuODIzIDIuMTc2di4wNTVjMS4zNTkuMTMyIDIuMzA4IDEuMTEgMi4zMDggMi40MzMgMCAxLjc2LTEuMjk2IDIuODQxLTMuNDMgMi44NDF6TTUuNzg4IDQuMzkzdjIuODJoMS42MzVjMS4yNDggMCAxLjk0OC0uNTI2IDEuOTQ4LTEuNDU1IDAtLjg3My0uNjAzLTEuMzY1LTEuNjctMS4zNjVINS43ODh6bTAgNy4yMTRoMS45OTZjMS4zMTYgMCAyLjAxNi0uNTQ3IDIuMDE2LTEuNTczIDAtMS4wMTktLjcyLTEuNTUyLTIuMDkyLTEuNTUyaC0xLjkydjMuMTI1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JCb2xkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JDaGVja2xpc3QgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ2hlY2tsaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41OTcgM2EuNDExLjQxMSAwIDAwLS4yOTkuMTMybC0xLjg1IDEuOTkzLS43NTYtLjdhLjQxMi40MTIgMCAwMC0uMjgtLjEyNC40Mi40MiAwIDAwLS4yOTIuMDk4LjMzMy4zMzMgMCAwMC0uMTIuMjU3LjMzNS4zMzUgMCAwMC4xMjcuMjU0bDEuMDY0Ljk4MkEuNDE4LjQxOCAwIDAwMi40ODggNmEuNDExLjQxMSAwIDAwLjI4OC0uMTI2TDQuOTA0IDMuNThhLjMyOC4zMjggMCAwMC4wOTUtLjI1LjMzNy4zMzcgMCAwMC0uMTI2LS4yMzhBLjQyMS40MjEgMCAwMDQuNTk3IDN6bS0uMjk5IDQuMTMyQS40MTEuNDExIDAgMDE0LjU5NyA3YS40MjEuNDIxIDAgMDEuMjc2LjA5M2MuMDc2LjA2Mi4xMi4xNDcuMTI2LjIzOGEuMzI4LjMyOCAwIDAxLS4wOTUuMjVMMi43NzYgOS44NzRhLjQxMS40MTEgMCAwMS0uMjg4LjEyNi40MTguNDE4IDAgMDEtLjI5Ny0uMTA4TDEuMTI3IDguOTFBLjMzNS4zMzUgMCAwMTEgOC42NTZhLjMzMy4zMzMgMCAwMS4xMi0uMjU3LjQyLjQyIDAgMDEuMjkyLS4wOThjLjEwOC4wMDUuMjEuMDUuMjguMTIzbC43NTcuNzAxIDEuODQ5LTEuOTkzek00LjU5NyAxMWEuNDExLjQxMSAwIDAwLS4yOTkuMTMybC0xLjg1IDEuOTkzLS43NTYtLjdhLjQxMi40MTIgMCAwMC0uMjgtLjEyNC40MjEuNDIxIDAgMDAtLjI5Mi4wOTguMzMzLjMzMyAwIDAwLS4xMi4yNTcuMzM1LjMzNSAwIDAwLjEyNy4yNTRsMS4wNjQuOTgyYS40MTguNDE4IDAgMDAuMjk3LjEwOC40MTEuNDExIDAgMDAuMjg4LS4xMjZsMi4xMjgtMi4yOTNhLjMyOC4zMjggMCAwMC4wOTUtLjI1LjMzNy4zMzcgMCAwMC0uMTI2LS4yMzguNDIxLjQyMSAwIDAwLS4yNzYtLjA5M3pNNi41IDRhLjUuNSAwIDAwMCAxaDdhLjUuNSAwIDAwMC0xaC03ek02IDguNWEuNS41IDAgMDEuNS0uNWg3YS41LjUgMCAwMTAgMWgtN2EuNS41IDAgMDEtLjUtLjV6bS41IDMuNWEuNS41IDAgMDAwIDFoN2EuNS41IDAgMDAwLTFoLTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckNoZWNrbGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yQ29kZUJsb2NrID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckNvZGVCbG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuNDE0IDguMDM2TDQuODkgMTAuNTFhLjUuNSAwIDAxLS43MDcuNzA4TDEuMzU0IDguMzg5YS41LjUgMCAwMTAtLjcwN2wyLjgyOC0yLjgyOGEuNS41IDAgMTEuNzA3LjcwN0wyLjQxNCA4LjAzNnptOC43NjggMi40NzRsMi40NzUtMi40NzQtMi40NzUtMi40NzVhLjUuNSAwIDAxLjcwNy0uNzA3bDIuODI5IDIuODI4YS41LjUgMCAwMTAgLjcwN2wtMi44MjkgMi44MjlhLjUuNSAwIDExLS43MDctLjcwOHpNOC41NTkgMi41MDZhLjUuNSAwIDAxLjk4MS4xOUw3LjQ0MSAxMy40OTRhLjUuNSAwIDAxLS45ODEtLjE5TDguNTU5IDIuNTA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JDb2RlQmxvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvckNvbW1lbnQgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yQ29tbWVudChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMTExIDEwSDEyYTEgMSAwIDAwMS0xVjVhMSAxIDAgMDAtMS0xSDRhMSAxIDAgMDAtMSAxdjRhMSAxIDAgMDAxIDFoMXYxLjI5N0w2LjExMSAxMHptLjQ2IDFMNCAxNHYtM2EyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMmg4YTIgMiAwIDAxMiAydjRhMiAyIDAgMDEtMiAySDYuNTcxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JDb21tZW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JIZWFkaW5nID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckhlYWRpbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDExYTEgMSAwIDAxMCAySDRhMSAxIDAgMDEwLTJWNWExIDEgMCAxMTAtMmgyYTEgMSAwIDExMCAydjJoNFY1YTEgMSAwIDExMC0yaDJhMSAxIDAgMDEwIDJ2NmExIDEgMCAwMTAgMmgtMmExIDEgMCAwMTAtMlY5SDZ2MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9ySGVhZGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9ySXRhbGljID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvckl0YWxpYyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMTYgMTJIOS41YS41LjUgMCAxMTAgMWgtNGEuNS41IDAgMTEwLTFoMS42MzlsMS43LThINy41YS41LjUgMCAwMTAtMWg0YS41LjUgMCAxMTAgMUg5Ljg2MWwtMS43IDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckl0YWxpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yTGluayA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JMaW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NTYgNS4wNTFhLjQ1LjQ1IDAgMDAuNjM3LjYzN2wxLjUwMy0xLjUwNGMuNDMyLS40MzEgMS4yNzgtLjM4MiAxLjg5LjIzLjYxMi42MTIuNjYyIDEuNDU4LjIzIDEuODlMOS41MTkgOC42Yy0uNDMyLjQzMi0xLjI3OC4zODMtMS44OS0uMjNhLjQ1LjQ1IDAgMTAtLjYzNi42MzdjLjkxNC45MTQgMi4zMyAxLjA2MyAzLjE2Mi4yM2wyLjI5Ny0yLjI5N2MuODMzLS44MzMuNjg0LTIuMjQ4LS4yMy0zLjE2Mi0uOTE0LS45MTUtMi4zMy0xLjA2My0zLjE2Mi0uMjNMNy41NTYgNS4wNTF6bS44ODggNS4yNjFhLjQ1LjQ1IDAgMDAtLjYzNyAwbC0xLjUwMyAxLjUwNGMtLjQzMi40MzEtMS4yNzguMzgyLTEuODktLjIzLS42MTItLjYxMi0uNjYxLTEuNDU4LS4yMy0xLjg5TDYuNDgxIDcuNGMuNDMyLS40MzIgMS4yNzgtLjM4MyAxLjg5LjIzYS40NS40NSAwIDAwLjYzNi0uNjM3Yy0uOTE0LS45MTQtMi4zMy0xLjA2My0zLjE2Mi0uMjNMMy41NDggOS4wNmMtLjgzMy44MzMtLjY4NSAyLjI0OC4yMyAzLjE2Mi45MTQuOTE1IDIuMzMgMS4wNjMgMy4xNjIuMjNsMS41MDQtMS41MDNhLjQ1LjQ1IDAgMDAwLS42Mzd6TTcuODc3IDUuNzZhLjM5LjM5IDAgMDAuMjc0LS4xMTRsMS41MDMtMS41MDQtMS41MDMgMS41MDRhLjM5LjM5IDAgMDEtLjI3NC4xMTR6bS45MTIgMy4xODNjLS40LjAwMy0uODQzLS4xNzItMS4yMDItLjUzLjM1OS4zNTguODAyLjUzMyAxLjIwMi41M3pNMTIuMTggMy44MmMtLjUwMi0uNTAzLTEuMTU1LS43NjYtMS43NzMtLjc2LjYxOC0uMDA2IDEuMjcuMjU3IDEuNzczLjc2Ljg5OC44OTggMS4wMzQgMi4yNzUuMjMgMy4wNzhsLTIuMjk3IDIuMjk3IDIuMjk3LTIuMjk3Yy44MDQtLjgwMy42NjgtMi4xOC0uMjMtMy4wNzh6bS00LjA2MiA2LjQyYS4zOS4zOSAwIDAxLjI4NC42NjdMNi44OTggMTIuNDFsMS41MDQtMS41MDNhLjM5LjM5IDAgMDAtLjI4NC0uNjY3em0tLjkyNi0zLjk2NWMuNjE4LS4wMDYgMS4yNy4yNTcgMS43NzMuNzYtLjUwMi0uNTAzLTEuMTU1LS43NjYtMS43NzMtLjc2ek01LjQxNCAxMi4xNWExLjc2MiAxLjc2MiAwIDAxLTEuMDQyLS41MjJjLS42MjYtLjYyNy0uNjkyLTEuNTExLS4yMy0xLjk3NEw2LjQ0IDcuMzU4IDQuMTQyIDkuNjU0Yy0uNDYyLjQ2My0uMzk2IDEuMzQ4LjIzIDEuOTc0LjMxMS4zMTEuNjg3LjQ4NCAxLjA0Mi41MjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvckxpbms7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA4djFoMXYxSDFWOWgxVjhIMVY3aDN2MUgzem0xIDR2Mkgxdi0xaDF2LTFIMXYtMWgzdjF6TTMgNWgxdjFIMVY1aDFWNEgxVjNoMnYyem0yLjUtMWg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6bTAgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6bTAgNGg4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JSZWRvID0gZnVuY3Rpb24gRXVpSWNvbkVkaXRvclJlZG8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA2SDVDMy4wNTcgNiAyIDcuMDU3IDIgOXMxLjA1NyAzIDMgM2gxLjV2LTFINWMtMS4zOSAwLTItLjYxLTItMiAwLTEuMzkuNjEtMiAyLTJoNXYzbDMuNS0zLjVMMTAgM3YzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JSZWRvOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FZGl0b3JTdHJpa2UgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yU3RyaWtlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMDIzIDEwaDEuMjc0Yy4wMDYuMDguMDEuMTY0LjAxLjI1YTIuNTU3IDIuNTU3IDAgMDEtLjg4MyAxLjk0OWMtLjI4NC4yNS0uNjI3LjQ0Ni0xLjAzLjU4OEE0LjA4NyA0LjA4NyAwIDAxOC4wMjggMTNhNC42MTYgNC42MTYgMCAwMS0zLjM4Mi0xLjQyNmMtLjE5My0uMjU5LS4xOTMtLjUgMC0uNzI0LjE5My0uMjIzLjQzOC0uMjY2LjczNS0uMTMuMzQzLjM2My43NDguNjU1IDEuMjEzLjg3Ni40NjYuMjIuOTQ5LjMzIDEuNDQ5LjMzLjYzNyAwIDEuMTMyLS4xNDQgMS40ODUtLjQzMy4zNTMtLjI5LjUzLS42Ny41My0xLjE0YTEuNzIgMS43MiAwIDAwLS4wMzQtLjM1M3pNNS41ODYgN2EyLjQ5IDIuNDkgMCAwMS0uMjk0LS41MDcgMi4zMTYgMi4zMTYgMCAwMS0uMTc3LS45MzRjMC0uMzYzLjA3Ni0uNzAxLjIyOC0xLjAxNS4xNTItLjMxNC4zNjMtLjU4Ni42MzMtLjgxNi4yNy0uMjMuNTg4LS40MS45NTUtLjUzN0EzLjY4MyAzLjY4MyAwIDAxOC4xNDUgM2MuNTc4IDAgMS4xMTIuMTEgMS42MDMuMzMuNDkuMjIxLjkwNy41MDggMS4yNS44NjEuMTYuMjgyLjE2LjUxMiAwIC42OTItLjE2LjE4LS4zOC4yMTQtLjY2Mi4xMDJhMy40MzggMy40MzggMCAwMC0uOTc4LS42NjkgMi45MTQgMi45MTQgMCAwMC0xLjIxMy0uMjQyYy0uNTQgMC0uOTczLjEyNS0xLjMwMi4zNzUtLjMyOC4yNS0uNDkyLjU5NS0uNDkyIDEuMDM2IDAgLjIzNi4wNDYuNDM0LjE0LjU5Ni4wOTIuMTYyLjIxNy4zMDQuMzc0LjQyNi4xNTcuMTIzLjMyOS4yMy41MTUuMzI0LjExOS4wNi4yNC4xMTYuMzYyLjE2OUg1LjU4NnpNMi41IDhoMTFhLjUuNSAwIDExMCAxaC0xMWEuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVkaXRvclN0cmlrZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yVGFibGUgPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVGFibGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAzdjJIMlYzdjEwaDEyVjN6TTIgMmgxMmMuNTUyIDAgMSAuNDEzIDEgLjkyM3YxMC4xNTRjMCAuNTEtLjQ0OC45MjMtMSAuOTIzSDJjLS41NTIgMC0xLS40MTMtMS0uOTIzVjIuOTIzQzEgMi40MTMgMS40NDggMiAyIDJ6bTAgNWgxMnYxSDJWN3ptMCAzaDEydjFIMnYtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVGFibGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclVuZGVybGluZSA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbmRlcmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDMuNTM2VjcuOGMwIDEuNjI4IDEuMjI0IDIuNiAzIDIuNiAxLjc4MyAwIDMtLjk3MiAzLTIuNlYzLjUzNmMwLS4zNTcuMTY3LS41MzYuNS0uNTM2LjMzMyAwIC41LjE3OS41LjUzNnY0LjMxOGMwIDIuMDkzLTEuNjY1IDMuNTQ2LTQgMy41NDZTNCA5Ljg5MyA0IDcuOFYzLjUzNkM0IDMuMTc5IDQuMTY3IDMgNC41IDNjLjMzMyAwIC41LjE3OS41LjUzNnpNMi41IDEzaDExYS41LjUgMCAxMTAgMWgtMTFhLjUuNSAwIDExMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FZGl0b3JVbmRlcmxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVkaXRvclVuZG8gPSBmdW5jdGlvbiBFdWlJY29uRWRpdG9yVW5kbyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNSA2aDVjMS45NDMgMCAzIDEuMDU3IDMgM3MtMS4wNTcgMy0zIDNIOXYtMWgxLjVjMS4zOSAwIDItLjYxIDItMiAwLTEuMzktLjYxLTItMi0yaC01djNMMiA2LjUgNS41IDN2M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVW5kbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdCA9IGZ1bmN0aW9uIEV1aUljb25FZGl0b3JVbm9yZGVyZWRMaXN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDRoOGEuNS41IDAgMTEwIDFoLThhLjUuNSAwIDAxMC0xem0wIDRoOGEuNS41IDAgMTEwIDFoLThhLjUuNSAwIDAxMC0xem0wIDRoOGEuNS41IDAgMTEwIDFoLThhLjUuNSAwIDExMC0xem0tMy03YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTAgNGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0wIDRhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRWRpdG9yVW5vcmRlcmVkTGlzdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRW1haWwgPSBmdW5jdGlvbiBFdWlJY29uRW1haWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuOTUgMy42ODRMOC42MzcgOC45MTJhMSAxIDAgMDEtMS4yNzYgMEwxLjA1MSAzLjY4NEEuOTk5Ljk5OSAwIDAwMSA0djhhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNGEuOTk5Ljk5OSAwIDAwLS4wNS0uMzE2ek0yIDJoMTJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnptLS4yMSAxbDUuNTc2IDQuNjAzYTEgMSAwIDAwMS4yNy4wMDNMMTQuMjY4IDNIMS43OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRW1haWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkVtcHR5ID0gZnVuY3Rpb24gRXVpSWNvbkVtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcykpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FcWwgPSBmdW5jdGlvbiBFdWlJY29uRXFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuODYyIDE0LjE4di4wMDFhLjQ4Mi40ODIgMCAwMS4xLjUyMS41LjUgMCAwMS0uNDQ3LjI5OWgtMy4xNDljLS4wNyAwLS4xMzYgMC0uMi0uMDAzYS42NjQuNjY0IDAgMDEtLjQxNC0uMTRjLS4zNS0uMzEtLjY4NC0uNjM3LTEuMDAxLS45ODFsLTEuNzcyLTEuNzM4YTUuOTQxIDUuOTQxIDAgMDEtMy44MDIuMTRsLS4wNDUtLjAxMmE1Ljg5IDUuODkgMCAwMS0yLjY4Mi0xLjcxMkE1LjcxNSA1LjcxNSAwIDAxMS4wOCA3LjcyYTUuNjYgNS42NiAwIDAxLjM0OC0zLjExOEE1Ljc4IDUuNzggMCAwMTMuMzkgMi4xMjRhNS45NzkgNS45NzkgMCAwMTYuMTM2LS41MDUgNS44MzYgNS44MzYgMCAwMTIuMzU2IDIuMTIzIDUuNjcgNS42NyAwIDAxLjg3MyAzLjAxN2wuMDAxLjAwM2MwIC4xMjgtLjA1MS4yNS0uMTQzLjM0YS40OTUuNDk1IDAgMDEtLjY5NCAwIC40NzYuNDc2IDAgMDEtLjE0My0uMzRjMC0uOTUtLjI4OC0xLjg3OC0uODI2LTIuNjY4YTQuODggNC44OCAwIDAwLTIuMTk4LTEuNzY5IDQuOTkgNC45OSAwIDAwLTIuODMtLjI3MyA0LjkzIDQuOTMgMCAwMC0yLjUwOSAxLjMxNCA0Ljc3NCA0Ljc3NCAwIDAwLTEuMzQgMi40NkE0LjcxNSA0LjcxNSAwIDAwMi4zNTIgOC42YTQuODIgNC44MiAwIDAwMS44MDQgMi4xNTVjLjgwNS41MjggMS43NTIuODEgMi43MjEuODFhNC44OTkgNC44OTkgMCAwMDEuMjk2LS4xOTRsLjAzMi0uMDA5LjcxNy0uMjExYS41MDYuNTA2IDAgMDEuNDgzLjExMWwxLjExIDEuMDI2IDEuNzg4IDEuNzUyaDIuMDNsLTMuNjU3LTMuNTgzYS40NzUuNDc1IDAgMDEuMDE0LS42NjYuNDk1LjQ5NSAwIDAxLjY3OS0uMDEzbDQuNDkzIDQuNDAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4wOTcgMy40NjhMOS42NzkgNC45M2EuNDMzLjQzMyAwIDAxLjIxOC4zN3YyLjkyNGEuNDIyLjQyMiAwIDAxLS4yMTguMzdsLTIuNTgyIDEuNDYxYS40MzguNDM4IDAgMDEtLjQzNyAwTDQuMDc3IDguNTk0YS40MzMuNDMzIDAgMDEtLjIxOC0uMzdWNS4zYS40MjIuNDIyIDAgMDEuMjE4LS4zN0w2LjY2IDMuNDY3YS40NDYuNDQ2IDAgMDEuNDM3IDB6bTEuODQ1IDQuMjdWNS43ODRhLjMyOC4zMjggMCAwMC0uMTctLjI4N0w3LjA0NyA0LjUyYS4zNDIuMzQyIDAgMDAtLjMzOCAwbC0xLjcyNi45NzdhLjMzNi4zMzYgMCAwMC0uMTY4LjI4N3YxLjk1M2EuMzI2LjMyNiAwIDAwLjE3LjI4N2wxLjcyNC45NzdhLjM0Mi4zNDIgMCAwMC4zMzggMGwxLjcyNi0uOTc4YS4zMzQuMzM0IDAgMDAuMTY5LS4yODd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkVxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXJhc2VyID0gZnVuY3Rpb24gRXVpSWNvbkVyYXNlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIuNjQ4IDkuOTM3bDcuMjktNy4yODhhMi4yMSAyLjIxIDAgMDEzLjEyNCAwbDIuMjkgMi4yODhhMi4yMSAyLjIxIDAgMDEwIDMuMTI2TDEwLjQxMyAxM0gxMi41YS41LjUgMCAwMTAgMUg0LjUwMWEyLjIxIDIuMjEgMCAwMS0xLjU2My0uNjQ3bC43MDctLjcwN2MuMjI3LjIyNi41MzUuMzU0Ljg1Ni4zNTRoNC4wMDVhMS4yMSAxLjIxIDAgMDAuODQ4LS4zNTRsMS4yOTItMS4yOTMtNC00LTMuMjkgMy4yOTFhMS4yMSAxLjIxIDAgMDAwIDEuNzEybC4yOS4yOS0uNzA4LjcwNy0uMjktLjI5YTIuMjEgMi4yMSAwIDAxMC0zLjEyNnpNOCA2aDYuODlhMS4yMDggMS4yMDggMCAwMC0uMjQ2LS4zNTZMMTQgNUg5TDggNnptMi0yaDNsLS42NDUtLjY0NGExLjIxIDEuMjEgMCAwMC0xLjcxIDBMMTAgNHptNC44OSAzSDcuNzA4bDEgMUgxNGwuNjQ0LS42NDRBMS4yMiAxLjIyIDAgMDAxNC44OTEgN3pNOS43MDggOWwxLjY0NiAxLjY0NkwxMyA5SDkuNzA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMTEuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHptMS41LS41YS41LjUgMCAxMDAtMSAuNS41IDAgMDAwIDF6bS0xIDJhLjUuNSAwIDAwMCAxaDFhLjUuNSAwIDAwMC0xaC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FcmFzZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkV4aXQgPSBmdW5jdGlvbiBFdWlJY29uRXhpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi41MzUgMTIuNDkzYS40Ny40NyAwIDAxLjQ2OC40Njh2Mi41NjRhLjQ3My40NzMgMCAwMS0uNDY2LjQ3NUgzVjBIMTIuNTk1YS40NS40NSAwIDAxLjM5OC40NjN2Mi41NjVhLjQ2OS40NjkgMCAwMS0uNDY4LjQ2N2gtLjA2NWEuNDY4LjQ2OCAwIDAxLS40NjctLjQ2N1YxSDR2MTRoOC4wMWwtLjAwNy0yLjA0YzAtLjI1Ny4yMS0uNDY3LjQ2Ny0uNDY3aC4wNjV6bS0xLjA5Ni03LjU5bDIuMTIxIDIuMTIyYTEuNSAxLjUgMCAwMTAgMi4xMjFsLTIuMTIgMi4xMjJhLjUuNSAwIDExLS43MDgtLjcwOGwyLjEyMS0yLjEyYS41LjUgMCAwMDAtLjcwOGwtMi4xMjEtMi4xMjFhLjUuNSAwIDAxLjcwNy0uNzA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25FeGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25FeHBhbmQgPSBmdW5jdGlvbiBFdWlJY29uRXhwYW5kKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuMzU0IDEyLjM1NGw4LThhLjUuNSAwIDAwLS43MDgtLjcwOGwtOCA4YS41LjUgMCAwMC43MDguNzA4ek0xIDEwLjVhLjUuNSAwIDExMSAwdjNhLjUuNSAwIDAwLjUuNWgzYS41LjUgMCAxMTAgMWgtM0ExLjUgMS41IDAgMDExIDEzLjV2LTN6bTE0LTVhLjUuNSAwIDExLTEgMHYtM2EuNS41IDAgMDAtLjUtLjVoLTNhLjUuNSAwIDExMC0xaDNBMS41IDEuNSAwIDAxMTUgMi41djN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4cGFuZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXhwYW5kTWluaSA9IGZ1bmN0aW9uIEV1aUljb25FeHBhbmRNaW5pKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNzA3IDEwTDEwIDYuNzA3QS41LjUgMCAwMDkuMjkzIDZMNiA5LjI5M2EuNS41IDAgMTAuNzA3LjcwN3pNNCA5LjVhLjUuNSAwIDAxMSAwdjFhLjUuNSAwIDAwLjUuNWgxYS41LjUgMCAxMTAgMWgtMUExLjUgMS41IDAgMDE0IDEwLjV2LTF6bTgtM2EuNS41IDAgMTEtMSAwdi0xYS41LjUgMCAwMC0uNS0uNWgtMWEuNS41IDAgMDEwLTFoMUExLjUgMS41IDAgMDExMiA1LjV2MXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRXhwYW5kTWluaTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXhwb3J0ID0gZnVuY3Rpb24gRXVpSWNvbkV4cG9ydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTA1IDFjLjQyMi0uMDAzLjg0NC4xNyAxLjE2Ni41MTZsMS45NSAyLjA1Yy4yMTMuMjI4LjIxMy42IDAgLjgyOGEuNTIuNTIgMCAwMS0uNzcxIDBMOSAyLjQ1MXY3Ljk5M2MwIC4zMDctLjIyNC41NTYtLjUuNTU2cy0uNS0uMjQ5LS41LS41NTZ2LTcuOTZsLTEuODIgMS45MWEuNTIuNTIgMCAwMS0uNzcgMCAuNjE3LjYxNyAwIDAxMC0uODI5bDEuOTUtMi4wNUExLjU3NSAxLjU3NSAwIDAxOC41IDFoLjAwNXpNNC4xOCA3Yy0uNDczIDAtLjg4LjI5NC0uOTcyLjcwM2wtMS4xODkgNS4yNWEuNzc2Ljc3NiAwIDAwLS4wMTkuMTcyYzAgLjQ4My40NDQuODc1Ljk5Ljg3NUgxNC4wMWMuMDY1IDAgLjEzLS4wMDYuMTk0LS4wMTcuNTM3LS4wOTUuODg1LS41NTYuNzc4LTEuMDNsLTEuMTktNS4yNUMxMy43IDcuMjk0IDEzLjI5MyA3IDEyLjgyMiA3SDQuMTh6TTYgNnYxaDVWNmgxLjgyNWMuOTQ2IDAgMS43Ni42MDYgMS45NDYgMS40NDdsMS4xOSA1LjRjLjIxNS45NzUtLjQ4MiAxLjkyMy0xLjU1NiAyLjExOGEyLjE4IDIuMTggMCAwMS0uMzkuMDM1SDIuOTg1QzEuODg4IDE1IDEgMTQuMTk0IDEgMTMuMmMwLS4xMTkuMDEzLS4yMzcuMDM5LS4zNTNsMS4xOS01LjRDMi40MTQgNi42MDYgMy4yMjkgNiA0LjE3NCA2SDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV4cG9ydDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXllID0gZnVuY3Rpb24gRXVpSWNvbkV5ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1Ljk4IDcuODczYy4wMTMuMDMuMDIuMDY0LjAyLjA5OHYuMDZhLjI0LjI0IDAgMDEtLjAyLjA5N0MxNS45NTIgOC4xODggMTMuMjkxIDE0IDggMTRTLjA0NyA4LjE4OC4wMiA4LjEyOEEuMjQuMjQgMCAwMTAgOC4wM3YtLjA1OWMwLS4wMzQuMDA3LS4wNjguMDItLjA5OEMuMDQ4IDcuODEzIDIuNzA5IDIgOCAyczcuOTUzIDUuODEzIDcuOTggNS44NzN6bS0xLjM3LS40MjRhMTIuMDk3IDEyLjA5NyAwIDAwLTEuMzg1LTEuODYyQzExLjczOSAzLjk1NiA5Ljk5OSAzIDggM2MtMiAwLTMuNzQuOTU2LTUuMjI1IDIuNTg3YTEyLjA5OCAxMi4wOTggMCAwMC0xLjcwMSAyLjQxNCAxMi4wOTUgMTIuMDk1IDAgMDAxLjcgMi40MTNDNC4yNiAxMi4wNDMgNi4wMDIgMTMgOCAxM3MzLjc0LS45NTYgNS4yMjUtMi41ODdBMTIuMDk3IDEyLjA5NyAwIDAwMTQuOTI2IDhjLS4wOC0uMTUtLjE4OS0uMzQzLS4zMTUtLjU1MXpNOCA0Ljc1QTMuMjUzIDMuMjUzIDAgMDExMS4yNSA4IDMuMjU0IDMuMjU0IDAgMDE4IDExLjI1IDMuMjUzIDMuMjUzIDAgMDE0Ljc1IDggMy4yNTIgMy4yNTIgMCAwMTggNC43NXptMCAxQzYuNzYgNS43NSA1Ljc1IDYuNzYgNS43NSA4UzYuNzYgMTAuMjUgOCAxMC4yNSAxMC4yNSA5LjI0IDEwLjI1IDggOS4yNCA1Ljc1IDggNS43NXptMCAxLjVhLjc1Ljc1IDAgMTAwIDEuNS43NS43NSAwIDAwMC0xLjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV5ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRXllQ2xvc2VkID0gZnVuY3Rpb24gRXVpSWNvbkV5ZUNsb3NlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMzE4IDEzLjQ3bC43NzYtLjc3NkE2LjA0IDYuMDQgMCAwMDggMTNjMS45OTkgMCAzLjc0LS45NTYgNS4yMjUtMi41ODdBMTIuMDk3IDEyLjA5NyAwIDAwMTQuOTI2IDhhMTIuMDk3IDEyLjA5NyAwIDAwLTEuNzAxLTIuNDEzbC0uMDExLS4wMTIuNzA3LS43MDhjMS4zNTkgMS40NzYgMi4wNDUgMi45NzYgMi4wNTggMy4wMDYuMDE0LjAzLjAyMS4wNjQuMDIxLjA5OHYuMDZhLjI0LjI0IDAgMDEtLjAyLjA5N0MxNS45NTIgOC4xODggMTMuMjkxIDE0IDggMTRhNy4wMyA3LjAzIDAgMDEtMi42ODItLjUzek0yLjA0IDExLjA5MkMuNzA3IDkuNjI5LjAzNCA4LjE1OC4wMiA4LjEyOEEuMjQuMjQgMCAwMTAgOC4wM3YtLjA1OWMwLS4wMzQuMDA3LS4wNjguMDItLjA5OEMuMDQ4IDcuODEzIDIuNzA5IDIgOCAyYy45NjIgMCAxLjgzNy4xOTIgMi42MjUuNTA3bC0uNzguNzhBNi4wMzkgNi4wMzkgMCAwMDggM2MtMiAwLTMuNzQuOTU2LTUuMjI1IDIuNTg3YTEyLjA5OCAxMi4wOTggMCAwMC0xLjcwMSAyLjQxNCAxMi4xMSAxMi4xMSAwIDAwMS42NzQgMi4zODNsLS43MDguNzA4ek04LjM2MiA0Ljc3TDcuMjU1IDUuODc3YTIuMjYyIDIuMjYyIDAgMDAtMS4zNzggMS4zNzhMNC43NyA4LjM2MkEzLjI1MiAzLjI1MiAwIDAxOC4zNjIgNC43N3ptMi44NiAyLjc5N2EzLjI1NCAzLjI1NCAwIDAxLTMuNjU0IDMuNjU0bDEuMDYtMS4wNmEyLjI2MiAyLjI2MiAwIDAwMS41MzMtMS41MzNsMS4wNi0xLjA2em0tOS4zNjggNy4yODdhLjUuNSAwIDAxLS43MDgtLjcwOGwxMy0xM2EuNS41IDAgMDEuNzA4LjcwOGwtMTMgMTN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkV5ZUNsb3NlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRmFjZUhhcHB5ID0gZnVuY3Rpb24gRXVpSWNvbkZhY2VIYXBweShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTZBOCA4IDAgMTE4IDBhOCA4IDAgMDEwIDE2em0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMTA4IDEuMDY3YTYuOTMzIDYuOTMzIDAgMDAwIDEzLjg2NnpNNS4zMzMgNi40YTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzem01LjMzNCAwYTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzek0yLjczOSA4LjgwMmEuNTMzLjUzMyAwIDAxLjkyMi0uNTM3QzQuODE1IDEwLjI0NSA2LjI0OSAxMS4yIDggMTEuMmMxLjc1IDAgMy4xODUtLjk1NiA0LjM0LTIuOTM1YS41MzMuNTMzIDAgMDEuOTIuNTM3Yy0xLjMzMyAyLjI4Ny0zLjEgMy40NjUtNS4yNiAzLjQ2NS0yLjE2IDAtMy45MjctMS4xNzgtNS4yNi0zLjQ2NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmFjZUhhcHB5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GYWNlTmV1dHJhbCA9IGZ1bmN0aW9uIEV1aUljb25GYWNlTmV1dHJhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTZBOCA4IDAgMTE4IDBhOCA4IDAgMDEwIDE2em0wLTEuMDY3QTYuOTMzIDYuOTMzIDAgMTA4IDEuMDY3YTYuOTMzIDYuOTMzIDAgMDAwIDEzLjg2NnpNNS4zMzMgNi40YTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzem01LjMzNCAwYTEuMDY3IDEuMDY3IDAgMTEwLTIuMTMzIDEuMDY3IDEuMDY3IDAgMDEwIDIuMTMzek0zLjIgMTAuNjY3YS41MzMuNTMzIDAgMDEwLTEuMDY3aDkuNmEuNTMzLjUzMyAwIDExMCAxLjA2N0gzLjJ6XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GYWNlTmV1dHJhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRmFjZVNhZCA9IGZ1bmN0aW9uIEV1aUljb25GYWNlU2FkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAxNkE4IDggMCAxMTggMGE4IDggMCAwMTAgMTZ6bTAtMS4wNjdBNi45MzMgNi45MzMgMCAxMDggMS4wNjdhNi45MzMgNi45MzMgMCAwMDAgMTMuODY2ek01LjMzMyA2LjRhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6bTUuMzM0IDBhMS4wNjcgMS4wNjcgMCAxMTAtMi4xMzMgMS4wNjcgMS4wNjcgMCAwMTAgMi4xMzN6bTIuNDg3IDMuODY4YS41MzMuNTMzIDAgMTEtLjcwOC43OTdDMTAuOTM2IDkuNzI1IDkuNDU4IDkuMDY3IDggOS4wNjdjLTEuNDU4IDAtMi45MzcuNjU3LTQuNDQ2IDEuOTk4YS41MzMuNTMzIDAgMTEtLjcwOC0uNzk3QzQuNTM2IDguNzY1IDYuMjU4IDggOCA4czMuNDYzLjc2NSA1LjE1NCAyLjI2OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmFjZVNhZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRmlsdGVyID0gZnVuY3Rpb24gRXVpSWNvbkZpbHRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03Ljk5OSAxNS45OTlhOCA4IDAgMTEwLTE2IDggOCAwIDAxMCAxNnpNOCAxNUE3IDcgMCAxMDggMWE3IDcgMCAwMDAgMTR6TTMuNSA1aDlhLjUuNSAwIDExMCAxaC05YS41LjUgMCAwMTAtMXptMiAzaDVhLjUuNSAwIDExMCAxaC01YS41LjUgMCAwMTAtMXptMiAzaDFhLjUuNSAwIDExMCAxaC0xYS41LjUgMCAxMTAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRmlsdGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GbGFnID0gZnVuY3Rpb24gRXVpSWNvbkZsYWcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjY4NiA4LjQ2NGMxLjU0Ny0uNjE5IDMuMDgtLjYxOSA0LjYyOCAwQS41LjUgMCAwMDEzIDhWMmEuNS41IDAgMDAtLjI3Ni0uNDQ3QzExLjI1OS44MiA5LjQ1OC44MiA3LjM0MiAxLjUyNmMtMS44ODQuNjI4LTMuNDE3LjYyOC00LjYxOC4wMjdBLjUuNSAwIDAwMiAydjEyLjVhLjUuNSAwIDEwMSAwVjguNTUzYzEuNDExLjYyNyAyLjk4My41OTIgNC42ODYtLjA4OXpNMyAyLjc0MWMxLjMyMi40MiAyLjg3OC4zMjcgNC42NTgtLjI2N0M5LjQgMS44OTQgMTAuODQzIDEuODUgMTIgMi4zMjJ2NC45NzVjLTEuNTYtLjQ2NC0zLjEyOC0uMzg0LTQuNjg2LjIzOS0xLjU0LjYxNi0yLjg5Mi42MTYtNC4wOS4wMTdBLjQ5OC40OTggMCAwMDMgNy41VjIuNzR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZsYWc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGQgPSBmdW5jdGlvbiBFdWlJY29uRm9sZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTQuMTkyTDcuNTMgMi40OWEuNjcuNjcgMCAwMC45NDIgMEwxMC44Ni4xOTJhLjY3Ny42NzcgMCAwMS45NDQgMCAuNjUuNjUgMCAwMTAgLjkzbC0yLjM4OCAyLjNhMi4wMiAyLjAyIDAgMDEtMi44MzIgMGwtMi4zODgtMi4zYS42NS42NSAwIDAxMC0uOTMuNjc3LjY3NyAwIDAxLjk0NCAwem0wIDE1LjYxNmwyLjM5LTIuMjk4YS42Ny42NyAwIDAxLjk0MiAwbDIuMzg5IDIuMjk4Yy4yNi4yNTYuNjg1LjI1Ni45NDQgMGEuNjUuNjUgMCAwMDAtLjkzbC0yLjM4OC0yLjNhMi4wMiAyLjAyIDAgMDAtMi44MzIgMGwtMi4zODggMi4zYS42NS42NSAwIDAwMCAuOTNjLjI2LjI1Ni42ODMuMjU2Ljk0NCAwek0xNiA2SDB2NGgxNlY2ek0xIDlWN2gxNHYySDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGRlckNoZWNrID0gZnVuY3Rpb24gRXVpSWNvbkZvbGRlckNoZWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMkgxdjExaDYuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMDExIDF2My40MTZhNC45NjIgNC45NjIgMCAwMC0xLS4zMTZWNEg3LjEyNUExLjEyNSAxLjEyNSAwIDAxNiAyLjg3NVYyem0xMCAxMGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMDEwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAxLS43MDggMGwtMS0xYS41LjUgMCAwMS43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMDEuNzA4IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZvbGRlckNoZWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Gb2xkZXJDbG9zZWQgPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyQ2xvc2VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAySDJ2MTFoMTJWNEg4LjEyNUExLjEyNSAxLjEyNSAwIDAxNyAyLjg3NVYyem0uMjUtMWEuNzUuNzUgMCAwMS43NS43NXYxLjEyNWMwIC4wNjkuMDU2LjEyNS4xMjUuMTI1SDE0YTEgMSAwIDAxMSAxdjlhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoNS4yNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyQ2xvc2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Gb2xkZXJFeGNsYW1hdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDkuNWwuODI2LTMuNzE3QTEgMSAwIDAxMi44MDIgNUgxM1Y0SDcuMTI1QTEuMTI1IDEuMTI1IDAgMDE2IDIuODc1VjJIMXY3LjV6bS4yNDcgMy41SDcuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMDExIDF2MWguNzUzYTEgMSAwIDAxLjk3NyAxLjIxN2wtLjQ0NyAyLjAxMWE1LjAxNSA1LjAxNSAwIDAwLS44ODctLjYxOEwxNC43NTMgNkgyLjgwM2wtMS41NTYgN3pNMTYgMTJhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tNCAuNWEuNTc3LjU3NyAwIDAxLS41Ny0uNDk1bC0uMjktMi4wMTVhLjg2Ny44NjcgMCAxMTEuNzE4IDBsLS4yODggMi4wMTVhLjU3Ny41NzcgMCAwMS0uNTcuNDk1em0wIDIuNWExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyRXhjbGFtYXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZvbGRlck9wZW4gPSBmdW5jdGlvbiBFdWlJY29uRm9sZGVyT3BlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgOS41bC44MjYtMy43MTdBMSAxIDAgMDEyLjgwMiA1SDEzVjRINy4xMjVBMS4xMjUgMS4xMjUgMCAwMTYgMi44NzVWMkgxdjcuNXptLjI0NyAzLjVoMTEuOTVsMS41NTYtN0gyLjgwM2wtMS41NTYgN3pNMTMgMTRIMWExIDEgMCAwMS0xLTFWMmExIDEgMCAwMTEtMWg1LjI1YS43NS43NSAwIDAxLjc1Ljc1djEuMTI1YzAgLjA2OS4wNTYuMTI1LjEyNS4xMjVIMTNhMSAxIDAgMDExIDF2MWguNzUzYTEgMSAwIDAxLjk3NyAxLjIxN2wtMS41NTYgN2ExIDEgMCAwMS0uOTc2Ljc4M0gxM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRm9sZGVyT3BlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRnJhbWVOZXh0ID0gZnVuY3Rpb24gRXVpSWNvbkZyYW1lTmV4dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMmExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMTAyIDBWM2ExIDEgMCAwMC0xLTF6bTUuMTQ2LjIybDcuMiA0LjU4MWExLjQyNSAxLjQyNSAwIDAxMCAyLjM5OGwtNy4yIDQuNTgxQzcuMjEgMTQuMzc1IDYgMTMuNjkyIDYgMTIuNTgxVjMuNDJjMC0xLjExMiAxLjIxLTEuNzk1IDIuMTQ2LTEuMnpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkZyYW1lTmV4dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uRnJhbWVQcmV2aW91cyA9IGZ1bmN0aW9uIEV1aUljb25GcmFtZVByZXZpb3VzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgMmExIDEgMCAwMTEgMXYxMGExIDEgMCAxMS0yIDBWM2ExIDEgMCAwMTEtMXptLTUuMTQ2LjIybC03LjIgNC41ODFhMS40MjUgMS40MjUgMCAwMDAgMi4zOThsNy4yIDQuNTgxYy45MzYuNTk1IDIuMTQ2LS4wODggMi4xNDYtMS4xOTlWMy40MmMwLTEuMTExLTEuMjEtMS43OTQtMi4xNDYtMS4xOTl6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GcmFtZVByZXZpb3VzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GdWxsU2NyZWVuRXhpdCA9IGZ1bmN0aW9uIEV1aUljb25GdWxsU2NyZWVuRXhpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgN1YzaDF2M2gzdjFIOXpNNyA3SDNWNmgzVjNoMXY0em0yIDJoNHYxaC0zdjNIOVY5ek03IDl2NEg2di0zSDNWOWg0ek0wIDEuOTk0QzAgLjg5My44OTUgMCAxLjk5NCAwaDEyLjAxMkMxNS4xMDcgMCAxNiAuODk1IDE2IDEuOTk0djEyLjAxMkExLjk5NSAxLjk5NSAwIDAxMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMDEwIDE0LjAwNlYxLjk5NHptMSAwdjEyLjAxMmMwIC41NDguNDQ2Ljk5NC45OTQuOTk0aDEyLjAxMmEuOTk1Ljk5NSAwIDAwLjk5NC0uOTk0VjEuOTk0QS45OTUuOTk1IDAgMDAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAwMSAxLjk5NHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnVsbFNjcmVlbkV4aXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBFdWlJY29uRnVsbFNjcmVlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDN2NGgtMVY0SDlWM2g0ek0zIDNoNHYxSDR2M0gzVjN6bTEwIDEwSDl2LTFoM1Y5aDF2NHpNMyAxM1Y5aDF2M2gzdjFIM3pNMCAxLjk5NEMwIC44OTMuODk1IDAgMS45OTQgMGgxMi4wMTJDMTUuMTA3IDAgMTYgLjg5NSAxNiAxLjk5NHYxMi4wMTJBMS45OTUgMS45OTUgMCAwMTE0LjAwNiAxNkgxLjk5NEExLjk5NSAxLjk5NSAwIDAxMCAxNC4wMDZWMS45OTR6bTEgMHYxMi4wMTJjMCAuNTQ4LjQ0Ni45OTQuOTk0Ljk5NGgxMi4wMTJhLjk5NS45OTUgMCAwMC45OTQtLjk5NFYxLjk5NEEuOTk1Ljk5NSAwIDAwMTQuMDA2IDFIMS45OTRBLjk5NS45OTUgMCAwMDEgMS45OTR6XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25GdWxsU2NyZWVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25GdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25GdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDIuMjI2djIuMjE4Yy0uMzU5LS4xNDMtLjg0NS0uMjE4LTEuMzE1LS4yMTgtMS4wNTkgMC0xLjYzMS41MTktMS44MDIgMS41NjVsLS4xNjguOTM3aDIuNzk4djIuMTU5SDkuNDFsLS4zMTMgMS42NzRDOC42OTYgMTIuOTg3IDcuMjYxIDE0IDQuNzg1IDE0Yy0uNzE4IDAtMS4zNS0uMDkyLTEuNzg1LS4yNTF2LTIuMjQzYy40MTguMTc2LjkwNS4yNjggMS4zODMuMjY4IDEuMDA4IDAgMS41NDYtLjQzNSAxLjcyNS0xLjUyM2wuMjQtMS4zNjRIMy43ODdWNi43MjhoMi44MTJsLjI4OC0xLjI2NEM3LjI4NiAzLjA3MSA4LjY2MiAyIDExLjM1MiAyYy41OTggMCAxLjMwNi4xIDEuNjQ4LjIyNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkdlYXIgPSBmdW5jdGlvbiBFdWlJY29uR2VhcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTS4xNjQgMTAuMzI5TDEuODcgOCAuMTYzIDUuNjdjLjE4LS42MDEuNDMtMS4xOS43NTgtMS43NTdhOC4xOTcgOC4xOTcgMCAwMTEuMTQyLTEuNTM1bDIuODcyLjMxM0w2LjA5OS4wNWE4LjE2NiA4LjE2NiAwIDAxMy44LS4wMDNsMS4xNjYgMi42NDQgMi44NzItLjMxM2E4LjE2NiA4LjE2NiAwIDAxMS44OTkgMy4yOTNMMTQuMTMgOGwxLjcwNiAyLjMzYy0uMTguNjAxLS40MyAxLjE5LS43NTggMS43NTdhOC4xOTcgOC4xOTcgMCAwMS0xLjE0MiAxLjUzNWwtMi44NzItLjMxMy0xLjE2NCAyLjY0MWE4LjE2NiA4LjE2NiAwIDAxLTMuOC4wMDNsLTEuMTY2LTIuNjQ0LTIuODcyLjMxM2E4LjE2NiA4LjE2NiAwIDAxLTEuODk5LTMuMjkzem00LjY2MyAxLjk4NmExIDEgMCAwMTEuMDIzLjU5MWwuOTU3IDIuMTdjLjc5LjEzNCAxLjU5Ny4xMzIgMi4zODctLjAwMWwuOTU2LTIuMTY5YTEgMSAwIDAxMS4wMjMtLjU5bDIuMzU4LjI1NmE3LjIzIDcuMjMgMCAwMDEuMTk0LTIuMDY4bC0xLjQwMS0xLjkxM2ExIDEgMCAwMTAtMS4xODJsMS40LTEuOTEyYTcuMTY1IDcuMTY1IDAgMDAtMS4xOTItMi4wNjlsLTIuMzU5LjI1N2ExIDEgMCAwMS0xLjAyMy0uNTkxTDkuMTkzLjkyNGE3LjE2NSA3LjE2NSAwIDAwLTIuMzg3LjAwMUw1Ljg1IDMuMDk0YTEgMSAwIDAxLTEuMDIzLjU5bC0yLjM1OC0uMjU2YTcuMjMgNy4yMyAwIDAwLTEuMTk0IDIuMDY4bDEuNDAxIDEuOTEzYTEgMSAwIDAxMCAxLjE4MmwtMS40IDEuOTEyYy4yOC43NTEuNjgxIDEuNDUgMS4xOTIgMi4wNjlsMi4zNTktLjI1N3pNOCAxMWEzIDMgMCAxMTAtNiAzIDMgMCAwMTAgNnptMC0xYTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HZWFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HbGFzc2VzID0gZnVuY3Rpb24gRXVpSWNvbkdsYXNzZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjAzNSA5QTMuNSAzLjUgMCAwMTE1IDcuMDVWNC41YzAtMS4wNzItLjY0OC0xLjcyLTIuMDk4LTIuMDFhLjUuNSAwIDAxLjE5Ni0uOThDMTQuOTgxIDEuODg2IDE2IDIuOTA1IDE2IDQuNXY0LjI1YzAgLjA3Mi0uMDE1LjE0LS4wNDMuMjAyQTMuNSAzLjUgMCAxMTkuMDM1IDEwaC0yLjA3QTMuNSAzLjUgMCAxMS4wNDMgOC45NTIuNDk4LjQ5OCAwIDAxMCA4Ljc1VjQuNWMwLTEuNTk1IDEuMDE5LTIuNjE0IDIuOTAyLTIuOTlhLjUuNSAwIDAxLjE5Ni45OEMxLjY0OCAyLjc4IDEgMy40MjggMSA0LjV2Mi41NUEzLjUgMy41IDAgMDE2Ljk2NSA5aDIuMDd6TTMuNSAxMmEyLjUgMi41IDAgMTAwLTUgMi41IDIuNSAwIDAwMCA1em05IDBhMi41IDIuNSAwIDEwMC01IDIuNSAyLjUgMCAwMDAgNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uR2xhc3NlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uR2xvYmUgPSBmdW5jdGlvbiBFdWlJY29uR2xvYmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjAxOSA4YTYuNDYyIDYuNDYyIDAgMDAxLjAwMyAzaDIuMzgyYTE0LjQ2OSAxNC40NjkgMCAwMS0uMzk2LTNoLTIuOTl6bTAtMWgyLjk4OWMuMDMzLTEuMDc4LjE3Mi0yLjA5NC4zOTYtM0gyLjAyMmE2LjQ2MiA2LjQ2MiAwIDAwLTEuMDAzIDN6TTEzLjk4IDhoLTIuOTg5YTE0LjQ2OSAxNC40NjkgMCAwMS0uMzk2IDNoMi4zODJhNi40NjIgNi40NjIgMCAwMDEuMDAzLTN6bTAtMWE2LjQ2MiA2LjQ2MiAwIDAwLTEuMDAzLTNoLTIuMzgyYy4yMjQuOTA2LjM2MyAxLjkyMi4zOTYgM2gyLjk5ek01LjAwOCA4Yy4wMzcgMS4xMDcuMTk1IDIuMTI3LjQyOSAzaDQuMTI2Yy4yMzQtLjg3My4zOTItMS44OTMuNDI5LTNINS4wMDh6bTAtMWg0Ljk4NGExMy40MjIgMTMuNDIyIDAgMDAtLjQyOS0zSDUuNDM3YTEzLjQyMiAxMy40MjIgMCAwMC0uNDI5IDN6TS4wMTYgOEgwVjdoLjAxNmE3LjUgNy41IDAgMDExNC45NjggMEgxNXYxaC0uMDE2QTcuNSA3LjUgMCAwMS4wMTYgOHptMi43OTQgNGE2LjUwMSA2LjUwMSAwIDAwMi43MTcgMS42OTVBNy4zMTUgNy4zMTUgMCAwMTQuNyAxMkgyLjgxem05LjM4IDBIMTAuM2MtLjIzLjY1Ny0uNTEgMS4yMy0uODI3IDEuNjk1QTYuNTAxIDYuNTAxIDAgMDAxMi4xOSAxMnptLTYuNDI4IDBjLjQ4NCAxLjI0IDEuMTMyIDIgMS43MzggMiAuNjA2IDAgMS4yNTQtLjc2IDEuNzM4LTJINS43NjJ6TTIuODEgM0g0LjdjLjIzLS42NTcuNTEtMS4yMy44MjctMS42OTVBNi41MDEgNi41MDEgMCAwMDIuODEgM3ptOS4zOCAwYTYuNTAxIDYuNTAxIDAgMDAtMi43MTctMS42OTVjLjMxNy40NjUuNTk3IDEuMDM4LjgyNyAxLjY5NWgxLjg5ek01Ljc2MiAzaDMuNDc2QzguNzU0IDEuNzYgOC4xMDYgMSA3LjUgMWMtLjYwNiAwLTEuMjU0Ljc2LTEuNzM4IDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdsb2JlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HcmFiID0gZnVuY3Rpb24gRXVpSWNvbkdyYWIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuNSA2Yy4yNzYgMCAuNS4yMzIuNS41IDAgLjI3Ni0uMjI5LjUtLjUuNWgtMTFhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNzYuMjI5LS41LjUtLjVoMTF6bTAgM2MuMjc2IDAgLjUuMjMyLjUuNSAwIC4yNzYtLjIyOS41LS41LjVoLTExYS41MDUuNTA1IDAgMDEtLjUtLjVjMC0uMjc2LjIyOS0uNS41LS41aDExelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25HcmFiOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HcmFiSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIEV1aUljb25HcmFiSG9yaXpvbnRhbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDIuNWMwLS4yNzYuMjMyLS41LjUtLjUuMjc2IDAgLjUuMjI5LjUuNXYxMWMwIC4yNzYtLjIzMi41LS41LjVhLjUwMy41MDMgMCAwMS0uNS0uNXYtMTF6bTMgMGMwLS4yNzYuMjMyLS41LjUtLjUuMjc2IDAgLjUuMjI5LjUuNXYxMWMwIC4yNzYtLjIzMi41LS41LjVhLjUwMy41MDMgMCAwMS0uNS0uNXYtMTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyYWJIb3Jpem9udGFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25HcmlkID0gZnVuY3Rpb24gRXVpSWNvbkdyaWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDVWMWg0djRIMXptMy0xVjJIMnYyaDJ6bTIgMVYxaDR2NEg2em0zLTFWMkg3djJoMnptMiAxVjFoNHY0aC00em0xLTFoMlYyaC0ydjJ6TTEgMTBWNmg0djRIMXptMy0xVjdIMnYyaDJ6bTIgMVY2aDR2NEg2em0zLTFWN0g3djJoMnptMiAxVjZoNHY0aC00em0zLTFWN2gtMnYyaDJ6TTEgMTV2LTRoNHY0SDF6bTEtMWgydi0ySDJ2MnptNCAxdi00aDR2NEg2em0xLTFoMnYtMkg3djJ6bTQgMXYtNGg0djRoLTR6bTEtMWgydi0yaC0ydjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkdyaWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkhlYXJ0ID0gZnVuY3Rpb24gRXVpSWNvbkhlYXJ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy40MDIgMy4wOThhMy43NSAzLjc1IDAgMDAtNS4zMDQgNS4zMDRsNS41NTggNS4yN0w4IDE0bDUuODkyLTUuNTg4YTMuNzUgMy43NSAwIDEwLTUuMjk0LTUuMzEzTDggMy42OTdsLS41OTgtLjU5OXpNMi43OTYgNy42ODVhMi43NDcgMi43NDcgMCAwMS4wMS0zLjg4IDIuNzUgMi43NSAwIDAxMy44ODkgMEw4IDUuMTExbDEuMzA1LTEuMzA2YTIuNzUgMi43NSAwIDExMy44OSAzLjg5TDggMTIuNjIgMi43OTYgNy42ODV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkhlYXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25IZWF0bWFwID0gZnVuY3Rpb24gRXVpSWNvbkhlYXRtYXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA5YTMgMyAwIDExMCA2IDMgMyAwIDAxMC02em0wIDFhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6TTQgMmEyIDIgMCAxMTAgNCAyIDIgMCAwMTAtNHptMCAxYTEgMSAwIDEwMCAyIDEgMSAwIDAwMC0yem0wIDVhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMWEzIDMgMCAxMDAgNiAzIDMgMCAwMDAtNnptOC05YTQgNCAwIDExMCA4IDQgNCAwIDAxMC04em0wIDFhMyAzIDAgMTAwIDYgMyAzIDAgMDAwLTZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkhlYXRtYXA7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkhlbHAgPSBmdW5jdGlvbiBFdWlJY29uSGVscChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy42IDEyLjE4NmwtMS4zNTctMS4zNThjLS4wMjUtLjAyNS0uMDU4LS4wMzQtLjA4NC0uMDU2LjUzLS43OTQuODQtMS43NDYuODQtMi43NzNhNC45NzcgNC45NzcgMCAwMC0uODQtMi43NzJjLjAyNi0uMDIuMDU5LS4wMy4wODQtLjA1NkwxMy42IDMuODEzYTYuOTYgNi45NiAwIDAxMCA4LjM3M3pNOCAxNUE2Ljk1NiA2Ljk1NiAwIDAxMy44MTQgMTMuNmwxLjM1OC0xLjM1OGMuMDI1LS4wMjUuMDM0LS4wNTcuMDU1LS4wODRDNi4wMiAxMi42ODggNi45NzQgMTMgOCAxM2E0Ljk3OCA0Ljk3OCAwIDAwMi43NzMtLjg0Yy4wMi4wMjYuMDMuMDU4LjA1Ni4wODNsMS4zNTcgMS4zNThBNi45NTYgNi45NTYgMCAwMTggMTV6bS01LjYwMS0yLjgxM2E2Ljk2MyA2Ljk2MyAwIDAxMC04LjM3M2wxLjM1OSAxLjM1OGMuMDI0LjAyNS4wNTcuMDM1LjA4NC4wNTZBNC45NyA0Ljk3IDAgMDAzIDhjMCAxLjAyNy4zMSAxLjk4Ljg0MiAyLjc3My0uMDI3LjAyMi0uMDYuMDMxLS4wODQuMDU2bC0xLjM2IDEuMzU4em01LjYtLjE4N0E0IDQgMCAxMTggNGE0IDQgMCAwMTAgOHpNOCAxYzEuNTczIDAgMy4wMTkuNTI1IDQuMTg3IDEuNGwtMS4zNTcgMS4zNThjLS4wMjUuMDI1LS4wMzUuMDU3LS4wNTYuMDg0QTQuOTc5IDQuOTc5IDAgMDA4IDNhNC45NzkgNC45NzkgMCAwMC0yLjc3My44NDJjLS4wMjEtLjAyNy0uMDMtLjA1OS0uMDU1LS4wODRMMy44MTQgMi40QTYuOTU3IDYuOTU3IDAgMDE4IDF6bTAtMWE4LjAwMSA4LjAwMSAwIDEwLjAwMyAxNi4wMDJBOC4wMDEgOC4wMDEgMCAwMDggMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSGVscDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSG9tZSA9IGZ1bmN0aW9uIEV1aUljb25Ib21lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC4xMyAxLjIyOWw1LjUgNC40N2ExIDEgMCAwMS4zNy43NzdWMTRhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xVjYuNDc2YTEgMSAwIDAxLjM3LS43NzZsNS41LTQuNDcxYTEgMSAwIDAxMS4yNiAwek0xMyA2LjQ3Nkw3LjUgMi4wMDUgMiA2LjQ3NVYxNGgxMVY2LjQ3NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSG9tZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSUluQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvbklJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMTEuNTA4TDcuNDY4IDhINi4yNVY3aDIuNDAxbC4wMyAzLjUwOEg5Ljh2MUg3LjV6bS0uMjUtNi4yMDJhLjgzLjgzIDAgMDEuMjA3LS41NzdjLjEzNy0uMTUzLjMzNC0uMjI5LjU5LS4yMjkuMjU2IDAgLjQ1NC4wNzYuNTk0LjIzLjE0LjE1Mi4yMDkuMzQ1LjIwOS41NzYgMCAuMjI4LS4wNy40MTctLjIxLjU2OC0uMTQuMTUtLjMzNy4yMjYtLjU5My4yMjYtLjI1NiAwLS40NTMtLjA3NS0uNTktLjIyNmEuODEuODEgMCAwMS0uMjA3LS41Njh6TTggMTNBNSA1IDAgMTA4IDNhNSA1IDAgMDAwIDEwem0wIDFBNiA2IDAgMTE4IDJhNiA2IDAgMDEwIDEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkltYWdlID0gZnVuY3Rpb24gRXVpSWNvbkltYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA1YTIgMiAwIDExLTQgMCAyIDIgMCAwMTQgMHptOS00YTEgMSAwIDAxMSAxdjEyYTEgMSAwIDAxLTEgMUgxYTEgMSAwIDAxLTEtMVYyYTEgMSAwIDAxMS0xem0tMy40NDggNi4xMzRsLTMuNzYgMi43NjlhLjUuNSAwIDAxLS40MzYuMDc3bC0uMDg3LS4wMzQtMS43MTMtLjg3TDEgMTEuOFYxNGgxNFY5Ljc1MWwtMy40NDgtMi42MTd6TTE1IDJIMXY4LjYzNWw0LjI4LTIuNTU4YS41LjUgMCAwMS4zODktLjA1NGwuMDk0LjAzNyAxLjY4NC44NTUgMy44MTMtMi44MDdhLjUuNSAwIDAxLjUyLS4wNDVsLjA3OS4wNUwxNSA4LjQ5NVYyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbWFnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW1wb3J0ID0gZnVuY3Rpb24gRXVpSWNvbkltcG9ydChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTAuMTE0bDEuODUtMS45NDNhLjUyLjUyIDAgMDEuNzcgMGMuMjE0LjIyOC4yMTQuNiAwIC44MjlsLTEuOTUgMi4wNWExLjU1MiAxLjU1MiAwIDAxLTIuMzEgMEw1LjQxIDlhLjYxNy42MTcgMCAwMTAtLjgyOS41Mi41MiAwIDAxLjc3IDBMOCAxMC4wODJWMS41NTZDOCAxLjI0OSA4LjIyNCAxIDguNSAxcy41LjI0OS41LjU1NnY4LjU1OHpNNC4xOCA2YS45OTMuOTkzIDAgMDAtLjk3Mi44MDRsLTEuMTg5IDZBLjk5NS45OTUgMCAwMDIuOTkxIDE0aDExLjAxOGExIDEgMCAwMC45NzItMS4xOTZsLTEuMTktNmEuOTkzLjk5MyAwIDAwLS45Ny0uODA0SDQuMTh6TTYgNXYxaDVWNWgxLjgyNWMuOTQ2IDAgMS43Ni42NzMgMS45NDYgMS42MDhsMS4xOSA2QTIgMiAwIDAxMTQuMDE2IDE1SDIuOTg0YTEuOTkyIDEuOTkyIDAgMDEtMS45NDUtMi4zOTJsMS4xOS02QzIuNDE0IDUuNjczIDMuMjI5IDUgNC4xNzQgNUg2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbXBvcnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkluZGV4Q2xvc2UgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhDbG9zZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjZoLTFWMnpNNSA1aDUuOTk5VjRINXYxek0zIDVWNGgxdjFIM3ptMiAzVjdoM3YxSDV6TTMgOFY3aDF2MUgzem0yIDN2LTFoMnYxSDV6bTUuNS0xLjIwN0w5LjA4NiA4LjM3OWwtLjcwNy43MDdMOS43OTMgMTAuNWwtMS40MTQgMS40MTQuNzA3LjcwNyAxLjQxNC0xLjQxNCAxLjQxNCAxLjQxNC43MDctLjcwNy0xLjQxNC0xLjQxNCAxLjQxNC0xLjQxNC0uNzA3LS43MDdMMTAuNSA5Ljc5M3pNMyAxMXYtMWgxdjFIM3ptNy41LTVhNC41IDQuNSAwIDExMCA5IDQuNSA0LjUgMCAwMTAtOXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhDbG9zZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhFZGl0ID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4RWRpdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg0djFIMVYxaDEydjVoLTFWMnpNNSA1aDUuOTk5VjRINXYxek0zIDVWNGgxdjFIM3ptMiAzVjdoNnYxSDV6TTMgOFY3aDF2MUgzem0yIDN2LTFoM3YxSDV6bS0yIDB2LTFoMXYxSDN6bTQuNTAyIDEuNDFMMTIuOTEzIDcgMTUgOS4wODdsLTUuNDEgNS40MUw3IDE1bC41MDItMi41OXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW5kZXhFZGl0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleEZsdXNoID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4Rmx1c2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTQuNTE2IDlIMTAuNWEuNS41IDAgMDEwLTFoNC4wMTZMMTMuMTEgNS45NDhjLS4xNzEtLjI1Mi0uMTM3LS42Mi4wNzktLjgyMS4yMTctLjIuNTMxLS4xNTkuNzAzLjA5MmwyIDIuOTE2YS42NDguNjQ4IDAgMDEuMTA4LjM5Ny42NDMuNjQzIDAgMDEtLjEwOC4zMzJsLTIgMi45MThBLjQ3OC40NzggMCAwMTEzLjUgMTJhLjQ1Ny40NTcgMCAwMS0uMzEyLS4xMjdjLS4yMTYtLjIwMi0uMjUtLjU3LS4wNzktLjgyTDE0LjUxNiA5ek0zIDE1SDFhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoNy44Yy4yNzQgMCAuNTM3LjExMy43MjYuMzEybDIuMiAyLjQyOGMuMTc2LjE4Ni4yNzQuNDMzLjI3NC42ODlWN2gtMVY1SDguNWEuNS41IDAgMDEtLjUtLjVWMkgzdjEyaDh2LTRoMXY0YTEgMSAwIDAxLTEgMUgzem0tMS0xVjJIMXYxMmgxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25JbmRleEZsdXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbmRleE1hcHBpbmcgPSBmdW5jdGlvbiBFdWlJY29uSW5kZXhNYXBwaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA4SDQuOTE1YTEuNSAxLjUgMCAxMTAtMUg4VjIuNUExLjUgMS41IDAgMDE5LjUgMWgyLjU4NWExLjUgMS41IDAgMTEwIDFIOS41YS41LjUgMCAwMC0uNS41djEwYS41LjUgMCAwMC41LjVoMi41ODVhMS41IDEuNSAwIDExMCAxSDkuNUExLjUgMS41IDAgMDE4IDEyLjVWOHpNMy41IDNhMS41IDEuNSAwIDExMC0zIDEuNSAxLjUgMCAwMTAgM3ptMCAxMmExLjUgMS41IDAgMTEwLTMgMS41IDEuNSAwIDAxMCAzem0xMC02YTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4TWFwcGluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhPcGVuID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4T3BlbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjZoLTFWMnpNNSA1aDUuOTk5VjRINXYxek0zIDVWNGgxdjFIM3ptMiAzVjdoM3YxSDV6TTMgOFY3aDF2MUgzem0yIDN2LTFoMnYxSDV6bTUtMUg4djFoMnYyaDF2LTJoMnYtMWgtMlY4aC0xdjJ6bS03IDF2LTFoMXYxSDN6bTcuNS01YTQuNSA0LjUgMCAxMTAgOSA0LjUgNC41IDAgMDEwLTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4T3BlbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhSdW50aW1lID0gZnVuY3Rpb24gRXVpSWNvbkluZGV4UnVudGltZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJIMnYxMWg2djFIMVYxaDEydjYuODM5bC0xLS43MDdWMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTF2LTFINXYxaDN6bTAtMy4wNTVjMC0uMzQyLjA4Mi0uNjY0LjIzLS45NDVINXYxaDN2LS4wNTV6TTUgNWg1Ljk5OVY0SDV2MXpNMyA0djFoMVY0SDN6bTAgM3YxaDFWN0gzem0wIDN2MWgxdi0xSDN6bTExLjYwNy4ybC00LjMyLTMuMDU1QzkuNzI3IDYuNzUgOSA3LjIwNCA5IDcuOTQ1djYuMTA4YzAgLjc0LjcyNiAxLjE5NiAxLjI4Ny44bDQuMzItMy4wNTVjLjUyNC0uMzcuNTI0LTEuMjI4IDAtMS41OTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4UnVudGltZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uSW5kZXhTZXR0aW5ncyA9IGZ1bmN0aW9uIEV1aUljb25JbmRleFNldHRpbmdzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA1aDUuOTk5VjRINXYxek0zIDVoMVY0SDN2MXptMCAzaDFWN0gzdjF6bTYuMDIyLTFsLS4xNS4zMzMtLjczNy0uMDc4LS40NjctLjA1LS4zMy4zNDJBNS4xMyA1LjEzIDAgMDA2Ljk0OCA4SDVWN2g0LjAyMnptLTMuMDA1IDNMNiAxMC4wNTZsLjMwNi40MTEuMzk5LjUzM0g1di0xaDEuMDE3ek0zIDExaDF2LTFIM3YxelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNy4wNWwtLjE2Mi0uMzU5LS4yLS40NDctLjQ3LS4xMUE1LjAxOSA1LjAxOSAwIDAwMTIgNi4wOThWMkgydjExaDQuMzZjLjE1Ny4zNTQuMzU1LjY5LjU5IDFIMVYxaDEydjYuMDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4wMDQgN2MuMzIyIDAgLjY0Ni4wMzYuOTY2LjEwOWwuNTk1IDEuMjkzIDEuNDY1LS4xNTJjLjQ1Ny40NjIuNzg2IDEuMDE2Ljk2OSAxLjYxbC0uODcgMS4xNC44NzEgMS4xNDFhMy45NCAzLjk0IDAgMDEtLjM4Ny44NTkgNC4wNTggNC4wNTggMCAwMS0uNTgzLjc1bC0xLjQ2NS0uMTUyLS41OTQgMS4yOTJhNC4zNyA0LjM3IDAgMDEtMS45NDEuMDAxbC0uNTk0LTEuMjkzLTEuNDY2LjE1MmEzLjk1NCAzLjk1NCAwIDAxLS45NjktMS42MWwuODctMS4xNEw3IDkuODZhMy45NDcgMy45NDcgMCAwMS45Ny0xLjYxbDEuNDY2LjE1Mi41OTMtMS4yOTJhNC4zNyA0LjM3IDAgMDEuOTc1LS4xMXpNMTEgMTJhMSAxIDAgMTAuMDAyLTEuOTk4QTEgMSAwIDAwMTEgMTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluZGV4U2V0dGluZ3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbklucHV0T3V0cHV0ID0gZnVuY3Rpb24gRXVpSWNvbklucHV0T3V0cHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgMTMuOTk5di0yLjk5aDFWMTVIMFYxaDExdjMuOTk5aC0xVjIuMDAxSDF2MTEuOTk4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC41IDEwVjlIMTF2MXpNMTMgOS41bDMtMy0zLTN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjUgNi41djZsLTMtM3pNNyA3VjZoNi41djF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklucHV0T3V0cHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JbnNwZWN0ID0gZnVuY3Rpb24gRXVpSWNvbkluc3BlY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4zNjMgMTQuNjU4YS41LjUgMCAxMS0uNzEzLjdsLTIuOTctMy4wMjNhLjUuNSAwIDAxLjAwMS0uN0EzLjkgMy45IDAgMTA4LjkgMTIuOGEuNS41IDAgMTEwIC45OTkgNC45IDQuOSAwIDExMy44MjEtMS44MzNsMi42NDIgMi42OTF6TTMuMDk0IDEzYS41LjUgMCAxMTAgMUgyLjVBMi41IDIuNSAwIDAxMCAxMS41di05QTIuNSAyLjUgMCAwMTIuNSAwaDlBMi41IDIuNSAwIDAxMTQgMi41di41OTlhLjUuNSAwIDExLTEgMFYyLjVBMS41IDEuNSAwIDAwMTEuNSAxaC05QTEuNSAxLjUgMCAwMDEgMi41djlBMS41IDEuNSAwIDAwMi41IDEzaC41OTR6TTIuNSAzYS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTIgMGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0yIDBhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptLTQgMmEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0yIDBhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptLTIgMWEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0wIDNhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptNi02YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6bTIgMGEuNS41IDAgMTEwLTEgLjUuNSAwIDAxMCAxem0tOCA4YS41LjUgMCAxMTAtMSAuNS41IDAgMDEwIDF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkluc3BlY3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkludmVydCA9IGZ1bmN0aW9uIEV1aUljb25JbnZlcnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDEzLjI1YTUuMjUgNS4yNSAwIDEwMC0xMC41IDUuMjUgNS4yNSAwIDAwMCAxMC41ek04IDE0QTYgNiAwIDExOCAyYTYgNiAwIDAxMCAxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMmE2IDYgMCAxMDAgMTJWMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uSW52ZXJ0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25JcCA9IGZ1bmN0aW9uIEV1aUljb25JcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMmg4em0tMiAzSDh2NmgxVjkuMDE0aDFjLjI5OC0uMDEzIDIgMCAyLTIuMDE4IDAtMS43NC0xLjMxNC0xLjk1Mi0xLjgyNS0xLjk4N0wxMCA1ek02IDVINXY2aDFWNXptNCAuOTg0Yy42NjcgMCAxIC4zMzYgMSAxLjAwOEMxMSA3LjY2NCAxMC42NjcgOCAxMCA4SDlWNS45ODR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbklwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LZXlib2FyZCA9IGZ1bmN0aW9uIEV1aUljb25LZXlib2FyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMCAzaDE2djExSDBWM3ptMTUgMTBWNEgxdjloMTR6TTIgNWgydjFIMlY1em0yIDd2LTFIMnYxaDJ6bTEwLTF2MWgtMnYtMWgyem0tMyAxdi0xSDV2MWg2ek01IDVoMXYxSDVWNXpNMyA3SDJ2MWgxVjd6bTMgMGgxdjFINlY3ek0zIDlIMnYxaDFWOXptMyAwaDF2MUg2Vjl6bTItNEg3djFoMVY1ek00IDdoMXYxSDRWN3ptNSAwSDh2MWgxVjd6bTEgMGgxdjFoLTFWN3pNNSA5SDR2MWgxVjl6bTMgMGgxdjFIOFY5em0zIDBoLTF2MWgxVjl6TTkgNWgxdjFIOVY1em0zIDBoLTF2MWgxVjV6bTEgMGgxdjFoLTFWNXptMSAyaC0ydjNoMlY3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LZXlib2FyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3FsRmllbGQgPSBmdW5jdGlvbiBFdWlJY29uS3FsRmllbGQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTAsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTBcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDlhNSA1IDAgMTEwLTggNSA1IDAgMTEwIDh6bS43NS0uNjkyYTQgNCAwIDEwMC02LjYxNUE0Ljk4MSA0Ljk4MSAwIDAxMTAgNWE0Ljk4MSA0Ljk4MSAwIDAxLTEuMjUgMy4zMDh6TTQuMTMzIDhWNS41NTloMi40OTZ2LS42MjVINC4xMzNWMi45OTZoMi43MTl2LS42MzNIMy40M1Y4aC43MDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbEZpZWxkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LcWxGdW5jdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25LcWxGdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgN0gzdjJoNHYybDMtMy0zLTN2MnpNNiA2VjVhMSAxIDAgMDExLjcwNy0uNzA3bDMgM2ExIDEgMCAwMTAgMS40MTRsLTMgM0ExIDEgMCAwMTYgMTF2LTFIM2ExIDEgMCAwMS0xLTFWN2ExIDEgMCAwMTEtMWgzem03LjUtM2EuNS41IDAgMDEuNS41djlhLjUuNSAwIDExLTEgMHYtOWEuNS41IDAgMDEuNS0uNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbE9wZXJhbmQgPSBmdW5jdGlvbiBFdWlJY29uS3FsT3BlcmFuZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjE5MiAxMC4xNDVsMi4yOTgtMS43OTJjLjI1OS0uMTk2LjI1OS0uNTA5IDAtLjcwNmwtMi4yOTgtMS43OTJjLS4yNTYtLjE5Ni0uMjU2LS41MTMgMC0uNzA4YS44MS44MSAwIDAxLjkzIDBsMi4zIDEuNzkxYy43NzIuNTkuNzcgMS41MzcgMCAyLjEyNGwtMi4zIDEuNzkxYS44MS44MSAwIDAxLS45MyAwYy0uMjU2LS4xOTUtLjI1Ni0uNTEyIDAtLjcwOHptLTYuMzg0LTQuMjlMMi41MSA3LjY0N2MtLjI1OS4xOTYtLjI1OS41MDkgMCAuNzA2bDIuMjk4IDEuNzkyYy4yNTYuMTk2LjI1Ni41MTMgMCAuNzA4YS44MS44MSAwIDAxLS45MyAwbC0yLjMtMS43OTFjLS43NzItLjU5LS43Ny0xLjUzNyAwLTIuMTI0bDIuMy0xLjc5MWEuODEuODEgMCAwMS45MyAwYy4yNTYuMTk1LjI1Ni41MTIgMCAuNzA4ek02LjUgNmgzYS41LjUgMCAwMTAgMWgtM2EuNS41IDAgMDEwLTF6bTAgM2gzYS41LjUgMCAwMTAgMWgtM2EuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbktxbE9wZXJhbmQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbFNlbGVjdG9yID0gZnVuY3Rpb24gRXVpSWNvbktxbFNlbGVjdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMmE0IDQgMCAxMDAtOCA0IDQgMCAwMDAgOHptMCAxQTUgNSAwIDExNSAzYTUgNSAwIDAxMCAxMHptNi0xYTQgNCAwIDEwMC04IDQgNCAwIDAwMCA4em0wIDFhNSA1IDAgMTEwLTEwIDUgNSAwIDAxMCAxMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uS3FsU2VsZWN0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbktxbFZhbHVlID0gZnVuY3Rpb24gRXVpSWNvbktxbFZhbHVlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0YTUgNSAwIDExMCA4IDUgNSAwIDExMC04em0tLjc1LjY5MmE0IDQgMCAxMDAgNi42MTVBNC45ODEgNC45ODEgMCAwMTYgOGMwLTEuMjY4LjQ3Mi0yLjQyNiAxLjI1LTMuMzA4ek0xMS4zNDggMTFsMi4wNzgtNS42MzdoLS43MzlsLTEuNjU2IDQuNzI3aC0uMDYyTDkuMzEzIDUuMzYzaC0uNzM5TDEwLjY1MiAxMWguNjk2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LcWxWYWx1ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uS3ViZXJuZXRlc05vZGUgPSBmdW5jdGlvbiBFdWlJY29uS3ViZXJuZXRlc05vZGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDExLjQyVjQuNThMOCAxLjE1MiAyIDQuNTh2Ni44NGw2IDMuNDI4IDYtMy40Mjh6TTggMTZsNy00VjRMOCAwIDEgNHY4bDcgNHpNOCA0LjYwN2wzIDEuNzE0VjkuNjhsLTMgMS43MTQtMy0xLjcxNFY2LjMybDMtMS43MTR6bTQgMS4xMzR2NC41MThsLTQgMi4yODYtNC0yLjI4NlY1Ljc0MWw0LTIuMjg2IDQgMi4yODZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkt1YmVybmV0ZXNOb2RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25LdWJlcm5ldGVzUG9kID0gZnVuY3Rpb24gRXVpSWNvbkt1YmVybmV0ZXNQb2QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE0IDUuMTUxdjYuMjY5bC01LjUgMy4xNDJWOC4yOUwxNCA1LjE1MXptLS41MDgtLjg2MUw4IDEuMTUyIDIuNTA4IDQuMjkgOCA3LjQyNGw1LjQ5Mi0zLjEzNHpNMiA1LjE1MWw1LjUgMy4xNHY2LjI3MkwyIDExLjQyVjUuMTV6TTE1IDEybC03IDQtNy00VjRsNy00IDcgNHY4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25LdWJlcm5ldGVzUG9kOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MYXllcnMgPSBmdW5jdGlvbiBFdWlJY29uTGF5ZXJzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yNzYgMS4wNTNhLjUuNSAwIDAxLjQ0OCAwbDYgM2EuNS41IDAgMDEwIC44OTRsLTYgM2EuNS41IDAgMDEtLjQ0OCAwbC02LTNhLjUuNSAwIDAxMC0uODk0bDYtM3pNMi42MTggNC41TDcuNSA2Ljk0MSAxMi4zODIgNC41IDcuNSAyLjA1OSAyLjYxOCA0LjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjA1MyA3LjI3NmEuNS41IDAgMDEuNjctLjIyM0w3LjUgOS45NGw1Ljc3Ni0yLjg4OGEuNS41IDAgMTEuNDQ4Ljg5NGwtNiAzYS41LjUgMCAwMS0uNDQ4IDBsLTYtM2EuNS41IDAgMDEtLjIyMy0uNjd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjcyNCAxMC4wNTNhLjUuNSAwIDEwLS40NDguODk0bDYgM2EuNS41IDAgMDAuNDQ4IDBsNi0zYS41LjUgMCAxMC0uNDQ4LS44OTRMNy41IDEyLjk0bC01Ljc3Ni0yLjg4OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTGF5ZXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MZXR0ZXJpbmcgPSBmdW5jdGlvbiBFdWlJY29uTGV0dGVyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUgM2wzIDlIN0w2IDlIM2wtMSAzSDFsMy05aDF6bS0uNSAxLjVMNS42NjcgOEgzLjMzM0w0LjUgNC41em03Ljk5IDEuNjQ3QzEyLjE2IDYuMDA1IDExLjc2IDYgMTEuNSA2Yy0uMzU5IDAtMS4wMjIuMTc1LTEuNjMyLjgzOGwtLjczNi0uNjc2QzkuOTI5IDUuMjk0IDEwLjg1OSA1IDExLjUgNWguMDE2Yy4yNSAwIC44MzYgMCAxLjM2OS4yMjguMjgxLjEyLjU2OC4zMTMuNzgyLjYxNy4yMTYuMzA3LjMzMy42OTMuMzMzIDEuMTU1djVoLTF2LS4zNTRhMi4xMDEgMi4xMDEgMCAwMS0uMDY0LjAzOGMtLjU1NC4zMTctMS4xNjYuMzE2LTEuNDIuMzE2aC0uMDMyYy0uMjUgMC0uODM2IDAtMS4zNjgtLjIyOGExLjgxIDEuODEgMCAwMS0uNzgzLS42MTdDOS4xMTcgMTAuODQ4IDkgMTAuNDYyIDkgMTBjMC0uNDYyLjExNy0uODQ4LjMzMy0xLjE1NS4yMTQtLjMwNC41LS40OTYuNzgzLS42MTdDMTAuNjQ4IDggMTEuMjMzIDggMTEuNDg0IDhoLjAxNmMuMjU4IDAgLjY5LS4wMDMgMS4wNS0uMTA2YS44ODkuODg5IDAgMDAuMzY0LS4xNzljLjA1My0uMDUuMDg2LS4xMDguMDg2LS4yMTVWN2MwLS4yODgtLjA3LS40NjUtLjE1MS0uNThhLjgxNC44MTQgMCAwMC0uMzU4LS4yNzN6TTEzIDguOGMtLjA2LjAyMi0uMTE4LjA0LS4xNzUuMDU3QzEyLjMyIDkgMTEuNzYyIDkgMTEuNTEzIDlIMTEuNWMtLjI1OSAwLS42Ni4wMDUtLjk5LjE0N2EuODE0LjgxNCAwIDAwLS4zNTkuMjc0Yy0uMDguMTE0LS4xNTEuMjkxLS4xNTEuNTc5cy4wNy40NjUuMTUxLjU4YS44MTMuODEzIDAgMDAuMzU4LjI3M2MuMzMxLjE0Mi43MzIuMTQ3Ljk5MS4xNDcuMjU3IDAgLjYzLS4wMDguOTQtLjE4NC4yNTUtLjE0Ni41Ni0uNDYzLjU2LTEuMzE2di0uNzAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MZXR0ZXJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpbmVEYXNoZWQgPSBmdW5jdGlvbiBFdWlJY29uTGluZURhc2hlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjcwNyA0LjcwN2ExIDEgMCAxMS0xLjQxNC0xLjQxNGwyLTJhMSAxIDAgMTExLjQxNCAxLjQxNGwtMiAyem0tNi40MTQgNWExIDEgMCAwMDEuNDE0IDBsMi0yYTEgMSAwIDEwLTEuNDE0LTEuNDE0bC0yIDJhMSAxIDAgMDAwIDEuNDE0em0tNSA1YTEgMSAwIDAwMS40MTQgMGwyLTJhMSAxIDAgMTAtMS40MTQtMS40MTRsLTIgMmExIDEgMCAwMDAgMS40MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVEYXNoZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpbmVEb3R0ZWQgPSBmdW5jdGlvbiBFdWlJY29uTGluZURvdHRlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjUgM2ExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzek0xMSA1LjVhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6TTUuNSAxMWExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzem0tNCA0YTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVEb3R0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpbmVTb2xpZCA9IGZ1bmN0aW9uIEV1aUljb25MaW5lU29saWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjI5MyAxNC43MDdhMSAxIDAgMDAxLjQxNCAwbDEyLTEyYTEgMSAwIDEwLTEuNDE0LTEuNDE0bC0xMiAxMmExIDEgMCAwMDAgMS40MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpbmVTb2xpZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTGluayA9IGZ1bmN0aW9uIEV1aUljb25MaW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy42NiAzLjgwM2EuNS41IDAgMTEtLjcwNi0uNzA3TDkuMjY4Ljc4YzEuMTg3LTEuMTg3IDMuMjQyLTEgNC41OTYuMzU0czEuNTQgMy40MDkuMzU0IDQuNTk2bC0zLjUzNiAzLjUzNmMtMS4xODcgMS4xODctMy4yNDIgMS00LjU5Ni0uMzU0YS41LjUgMCAxMS43MDctLjcwN2MuOTkuOTkgMi40MTcgMS4xMTkgMy4xODIuMzU0bDMuNTM2LTMuNTM2Yy43NjUtLjc2NS42MzUtMi4xOTMtLjM1NC0zLjE4Mi0uOTktLjk5LTIuNDE3LTEuMTE5LTMuMTgyLS4zNTRMNy42NjEgMy44MDN6bS0uMzIgNy4zOTJhLjUuNSAwIDExLjcwNy43MDdsLTIuMzE1IDIuMzE0Yy0xLjE4NyAxLjE4OC0zLjI0MiAxLTQuNTk2LS4zNTMtMS4zNTQtMS4zNTQtMS41NC0zLjQxLS4zNTMtNC41OTZMNC4zMTggNS43M2MxLjE4Ny0xLjE4NyAzLjI0Mi0xIDQuNTk2LjM1NGEuNS41IDAgMDEtLjcwNy43MDdjLS45ODktLjk5LTIuNDE2LTEuMTItMy4xODItLjM1NEwxLjQ5IDkuOTc0Yy0uNzY2Ljc2NS0uNjM2IDIuMTkzLjM1MyAzLjE4Mi45OS45ODkgMi40MTcgMS4xMTkgMy4xODIuMzUzbDIuMzE1LTIuMzE0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25MaW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25MaXN0ID0gZnVuY3Rpb24gRXVpSWNvbkxpc3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDRWM2gydjFIMnptNCAwVjNoOHYxSDZ6bTAgM1Y2aDh2MUg2em0wIDNWOWg4djFINnpNMiA3VjZoMnYxSDJ6bTAgM1Y5aDJ2MUgyem00IDN2LTFoOHYxSDZ6bS00IDB2LTFoMnYxSDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpc3Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxpc3RBZGQgPSBmdW5jdGlvbiBFdWlJY29uTGlzdEFkZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDExSDl2MWgydjJoMXYtMmgydi0xaC0yVjloLTF2MnpNNy43NTggOWE0LjUgNC41IDAgMTEtLjUwMiA0SDZ2LTFoMS4wMjdhNC41NDggNC41NDggMCAwMS4yMy0ySDZWOWgxLjc1OHpNMiA0VjNoMnYxSDJ6bTQgMFYzaDh2MUg2em0wIDNWNmg4djFINnpNMiA3VjZoMnYxSDJ6bTAgM1Y5aDJ2MUgyem0wIDN2LTFoMnYxSDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxpc3RBZGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvY2sgPSBmdW5jdGlvbiBFdWlJY29uTG9jayhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNXYtLjhDNCAxLjg4IDUuNzkgMCA4IDBzNCAxLjg4IDQgNC4yVjVoMS4xNDNjLjQ3MyAwIC44NTcuNDQ4Ljg1NyAxdjljMCAuNTUyLS4zODQgMS0uODU3IDFIMi44NTdDMi4zODQgMTYgMiAxNS41NTIgMiAxNVY2YzAtLjU1Mi4zODQtMSAuODU3LTFINHpNMyAxNWgxMFY2SDN2OXptNS45OTgtMy43MDZMOS41IDEyLjVoLTNsLjUwMi0xLjIwNkExLjY0NCAxLjY0NCAwIDAxNi41IDEwLjFjMC0uODgzLjY3Mi0xLjYgMS41LTEuNnMxLjUuNzE3IDEuNSAxLjZjMCAuNDc1LS4xOTQuOTAxLS41MDIgMS4xOTR6TTExIDQuMzZDMTEgMi41MDQgOS42NTcgMSA4IDFTNSAyLjUwNCA1IDQuMzZWNWg2di0uNjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvY2tPcGVuID0gZnVuY3Rpb24gRXVpSWNvbkxvY2tPcGVuKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuMTQzIDVjLjQ3MyAwIC44NTcuNDQ4Ljg1NyAxdjljMCAuNTUyLS4zODQgMS0uODU3IDFILjg1N0MuMzg0IDE2IDAgMTUuNTUyIDAgMTVWNmMwLS41NTIuMzg0LTEgLjg1Ny0xSDh2LS44QzggMS44OCA5Ljc5IDAgMTIgMHM0IDEuODggNCA0LjJWNWgtMXYtLjY0QzE1IDIuNTA0IDEzLjY1NyAxIDEyIDFTOSAyLjUwNCA5IDQuMzZWNWgyLjE0M3pNMSAxNWgxMFY2SDF2OXptNS45OTgtMy43MDZMNy41IDEyLjVoLTNsLjUwMi0xLjIwNkExLjY0NCAxLjY0NCAwIDAxNC41IDEwLjFjMC0uODgzLjY3Mi0xLjYgMS41LTEuNnMxLjUuNzE3IDEuNSAxLjZjMCAuNDc1LS4xOTQuOTAxLS41MDIgMS4xOTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvY2tPcGVuOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQWVyb3NwaWtlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BZXJvc3Bpa2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQzQzNzNBXCIsXG4gICAgZDogXCJNMCAzMS44MDZoMzJWLjc3NkgwelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTkuNDQ4IDEyLjUwOGwtOC45ODYgMy44NiA4Ljk4NiAzLjg4M3YtNy43NDN6bS0xMS4zMDQgNC43M2wtMi4wOTQtLjg2MyAyLjA5NC0uOTMxIDE3Ljc0OS03Ljc0MXYyLjA2MmwtNC42NTQgMS45OXY5LjI1bDQuNjU0IDIuMDF2MS45NjhMOC4xNDMgMTcuMjR6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQWVyb3NwaWtlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQXBhY2hlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29BcGFjaGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29fYXBhY2hlJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZGVmc1wiLCBudWxsLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgeDE6IFwiMjEuOTAyJVwiLFxuICAgIHgyOiBcIjE0MS44NzklXCIsXG4gICAgeTE6IFwiNjMuOTA1JVwiLFxuICAgIHkyOiBcIjIwLjIxMyVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNGNjk5MjNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMS4yMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0Y3OUEyM1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjgzLjgzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgeDE6IFwiLTIxNy42NTElXCIsXG4gICAgeDI6IFwiNzQuNzQzJVwiLFxuICAgIHkxOiBcIjE3Ny4xMjclXCIsXG4gICAgeTI6IFwiMzYuNjY1JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgeDE6IFwiLTgwLjA0NCVcIixcbiAgICB4MjogXCIxNDYuMjQlXCIsXG4gICAgeTE6IFwiNzMuNTc0JVwiLFxuICAgIHkyOiBcIjMxLjUzOSVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMyLjMzJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUUyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNjMuMDIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDOTIwMzdcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI3NS4xNCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjMzNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0U5NzgyNlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIHgxOiBcIi0xOC4zMTYlXCIsXG4gICAgeDI6IFwiMTY1LjAwMiVcIixcbiAgICB5MTogXCI1Mi40OTclXCIsXG4gICAgeTI6IFwiNDEuNjU2JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzI4MjY2MlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjkuNTQ4JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjYyRThEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzguODIlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RjIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5NC44NyVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0NEMjAzMlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZScpLFxuICAgIHgxOiBcIi0xMDkuNzAxJVwiLFxuICAgIHgyOiBcIjY0LjYxNyVcIixcbiAgICB5MTogXCI0NjMuNzE1JVwiLFxuICAgIHkyOiBcIjE3LjE5JVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzIuMzMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM5RTIwNjRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI2My4wMiVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0M5MjAzN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc1LjE0JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQ0QyMzM1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjRTk3ODI2XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgeDE6IFwiLTM0Ljg4JVwiLFxuICAgIHgyOiBcIjExMC41OTklXCIsXG4gICAgeTE6IFwiMTMwLjUyMiVcIixcbiAgICB5MjogXCItOS4xMTglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIzMi4zMyVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzlFMjA2NFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjYzLjAyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzkyMDM3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUuMTQlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIzMzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNFOTc4MjZcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2cnKSxcbiAgICB4MTogXCItMTMuNjczJVwiLFxuICAgIHgyOiBcIjExNy44NTglXCIsXG4gICAgeTE6IFwiMTkyLjU2NCVcIixcbiAgICB5MjogXCItMTM2LjkwNiVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyODI2NjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5LjU0OCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzY2MkU4RFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjc4LjgyJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjOUYyMDY0XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiOTQuODclXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDRDIwMzJcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNMTMuNjI4LjE4Yy0uNDk4LjI5My0xLjMzMiAxLjEzNC0yLjMyOCAyLjM0OHYuMDc0bC44NzEgMS42MTMuMDQ0LjAzYy42NDEtLjkxNCAxLjI4OS0xLjc0MiAxLjk0OC0yLjQ0Ni4wNS0uMDU2LjA3NS0uMDguMDc1LS4wOC0uMDI1LjAyNC0uMDUuMDU1LS4wNzUuMDgtLjIxMS4yMzctLjg1OS45ODQtMS44MyAyLjQ3OGwuMTEyLjAyNXMyLjI3My0uMjI0IDMuMzY4LS40MWwuMDYyLS4wNTdjLjM1LTEuOTU1LS4zNDItMi44NTEtLjM0Mi0yLjg1MVMxNC42NjEtLjQyMyAxMy42MjguMTh6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk05LjUyNSA4LjY5N2MuMjgtLjUxNi41Ni0xLjAyNy44NC0xLjUxOS4yOTMtLjUxLjU5Mi0xLjAwOC44OTctMS40ODhhLjM5Ny4zOTcgMCAwMC4wNS0uMDg3Yy4yOTktLjQ3My41OTgtLjkyMS45MDMtMS4zNTdMMTEuMyAyLjUyYy0uMDY5LjA4MS0uMTM3LjE2OC0uMjA2LjI1Ni0uMjYxLjMzLS41MzUuNjc4LS44MTUgMS4wNTJhNTEuNzgzIDUxLjc4MyAwIDAwLTEuODkzIDIuNzA4Yy0uMjYxLjQwNS0uNTMuODE2LS43OSAxLjI0NWwtLjAzMi4wNVY3LjlsMS4xNCAyLjI2LjA1LjAxOWMuMjU1LS40OTguNTEtLjk5Ni43NzEtMS40ODJ6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4KVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdjJyksIFwiKVwiKSxcbiAgICBkOiBcIk00LjU2MyAxOS43NmMuMjA2LS41MzUuNDI0LTEuMDc3LjY0Mi0xLjYyNS4yMTEtLjUyMy40MjMtMS4wNTIuNjQ3LTEuNTguMjE4LS41My40NDgtMS4wNi42NzktMS41OTUuMjM2LS41NDEuNDczLTEuMDgzLjcxNi0xLjYxOC4yNDItLjUzLjQ4NS0xLjA1OS43MzQtMS41ODIuMDg3LS4xODYuMTgtLjM4LjI3NC0uNTY2LjE1Ni0uMzI0LjMxOC0uNjQ4LjQ3My0uOTY1LjAwNy0uMDE5LjAyLS4wMzEuMDI1LS4wNUw3LjU2NCA3LjgzMmwtLjA1Ni4wOTNjLS4yNzQuNDU1LS41NTQuOTE1LS44MjIgMS4zODlhNTQuNTM1IDU0LjUzNSAwIDAwLTEuNDUgMi43MTRjLS4wNDQuMDg3LS4wODEuMTY4LS4xMjUuMjU1YTMyLjE1IDMyLjE1IDAgMDAtLjcwMyAxLjU0NGMtLjIzNy41Ni0uNDQ4IDEuMDk2LS42MzUgMS42MDYtLjEyNS4zMzctLjIzLjY1NC0uMzM2Ljk2NS0uMDgxLjI2Mi0uMTYyLjUzLS4yMzcuNzkxLS4xOC42MjMtLjMzIDEuMjM5LS40NTQgMS44NjJsLjAxOC4wNzQgMS4xNCAyLjI2Ni4wMzcuMDJjLjE1NS0uNDI0LjMxNy0uODQ4LjQ4NS0xLjI4My4wNDQtLjEyNS4wOTQtLjI0My4xMzctLjM2OHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTIuNzMzIDE5LjEzMmExOC44NCAxOC44NCAwIDAwLS4zMTEgMi4yNTNjMCAuMDI1LS4wMDYuMDUtLjAwNi4wODEtLjM3NC0uNTk4LTEuMzctMS4xNzctMS4zNy0xLjE3Ny43MTYgMS4wMzQgMS4yNTggMi4wNjEgMS4zMzggMy4wNy0uMzguMDgtLjkwMi0uMDM4LTEuNTEyLS4yNTUuNjI4LjU3OCAxLjEwMi43NCAxLjI4OC43ODQtLjU3OS4wMzctMS4xODMuNDM2LTEuNzkzLjg5Ljg5LS4zNiAxLjYwNy0uNTA0IDIuMTIzLS4zOTItLjgxNSAyLjMxLTEuNjMgNC44NjItMi40NTMgNy41NjQuMjUtLjA3NS4zOTktLjI0My40ODYtLjQ3My4xNDMtLjQ5MiAxLjExNC0zLjcwNCAyLjYyNy03LjkzMS4wNDQtLjExOS4wODctLjI0My4xMy0uMzYyLjAxMy0uMDMuMDI2LS4wNjguMDM4LS4xLjE2Mi0uNDQxLjMyNC0uODk2LjQ5OC0xLjM1Ni4wMzgtLjEwNi4wODEtLjIxMi4xMTktLjMxOHYtLjAwNmwtMS4xOS0yLjM1M2MwIC4wMy0uMDA2LjA1Ni0uMDEyLjA4elwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIiksXG4gICAgZDogXCJNMTIuMzMzIDQuMjgzYy0uMjY4LjQxMS0uNTYuODc4LS44NzggMS40MDctLjAxOC4wMjUtLjAzLjA1Ni0uMDUuMDgxYTYyLjUzOCA2Mi41MzggMCAwMC0xLjY4NyAzLjA1Yy0uMjQ5LjQ4LS41MDQuOTg0LS43NjUgMS41MjZsLjA1Ni4wMjUgMi44OTUtLjMxMS4wNjgtLjA1Yy44NzgtLjQwNSAxLjI3LS43NzIgMS42NS0xLjMwMS4xLS4xNDMuMjA1LS4zLjMwNS0uNDU1LjMxMS0uNDg1LjYxNi0xLjAxNS44ODQtMS41NDQuMjYxLS41MS40OTItMS4wMi42NzItMS40NzVhNi41NiA2LjU2IDAgMDAuMzk4LTEuMzk1Yy0xLjE3LjIwNi0yLjYwOC4zOTktMy41NDguNDQyelwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZicpLCBcIilcIiksXG4gICAgZDogXCJNOC44NCAxMC41OWMtLjEuMjEyLS4yMDUuNDMtLjMxLjY0Ny0uMTEzLjIzNy0uMjMxLjQ4Ni0uMzQzLjczNS0uMDU2LjEyNC0uMTE5LjI1NS0uMTc1LjM4LS4xOC4zODYtLjM1NC43ODQtLjU0MSAxLjE5NWExMDcuMDM1IDEwNy4wMzUgMCAwMC0xLjM1NyAzLjE5NGMtLjIxOC41MjktLjQzNiAxLjA3Ny0uNjU0IDEuNjM3LS4yLjUwNC0uMzk5IDEuMDE1LS41OTggMS41NS0uMDEyLjAyNS0uMDE4LjA1LS4wMy4wNzUtLjIuNTMtLjM5NCAxLjA2OC0uNiAxLjYyMi0uMDA2LjAxMi0uMDE3LjA0NS0uMDIzLjA1N2wuMDQzLjAxLjg2Ni0uMDk0LjA0OC0uMDJjLS4wMTgtLjAwNi0uMDMtLjAzLS4wNDgtLjAzNyAxLjE0NS0uMTQzIDIuNjctMS4wMDIgMy42Ni0yLjA2LjQ1NS0uNDg2Ljg2Ni0xLjA2NSAxLjI1Mi0xLjczOC4yODYtLjUwNC41NDctMS4wNTguODAzLTEuNjc1LjIyNC0uNTM1LjQzNS0xLjEyLjY0LTEuNzQ5YTMuNDU3IDMuNDU3IDAgMDEtLjg5Ni4zMTEgOC45NzcgOC45NzcgMCAwMS0uMTguMDM4Yy0uMDYyLjAxMi0uMTI1LjAxOC0uMTguMDMgMS4wNy0uNDEgMS43NDMtMS4yMDcgMi4yMzQtMi4xNzgtLjI4LjE5My0uNzQuNDQyLTEuMjg4LjU2NmEyLjUyIDIuNTIgMCAwMS0uMjMuMDQ0Yy0uMDIgMC0uMDM4LjAwNi0uMDU3LjAwNi4zNzQtLjE1NS42ODUtLjMzLjk1OS0uNTM1LjA1Ni0uMDQ0LjExMi0uMDg3LjE2OC0uMTM3LjA4MS0uMDc1LjE2Mi0uMTUuMjM3LS4yMjQuMDUtLjA1LjA5My0uMS4xNDMtLjE1Ni4xMDYtLjEyNC4yMDUtLjI2MS4yOTktLjQxLjAzLS4wNDQuMDU2LS4wOTQuMDg3LS4xMzguMDM3LS4wNjguMDY4LS4xMzcuMS0uMjA1LjE0OS0uMy4yNjctLjU2Ny4zNi0uODAzLjA1LS4xMTkuMDg4LS4yMjQuMTI1LS4zMy4wMTMtLjAzOC4wMjUtLjA4MS4wNDQtLjExOS4wMzctLjExMi4wNjgtLjIxMS4wOTMtLjMwNS4wMzctLjEzLjA1Ni0uMjM2LjA2OS0uMzExYTEuMDc3IDEuMDc3IDAgMDEtLjEyNS4wODdjLS4zMjQuMTkzLS44NzguMzY4LTEuMzI2LjQ0OGwuODg0LS4xLS44ODQuMWMtLjA2Mi4wMTMtLjEwNi4wMi0uMTU2LjAzMi4wMDQtLjAwNS0uOTk0LjEwMS0yLjk5NS4zMTZhMi4zMTMgMi4zMTMgMCAwMC0uMTE4LjI0NHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDgpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2cnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTQuMTE1IDIxLjkxNGMtLjE1NS40My0uMzE3Ljg3Mi0uNDczIDEuMzIgMCAuMDA2LS4wMDYuMDEzLS4wMDYuMDE5LS4wMjUuMDYyLS4wNDQuMTI0LS4wNjkuMTkzLS4xMDYuMzA1LS4xOTkuNTczLS40MSAxLjE5NS4zNDguMTYyLjYyOC41OC44OTYgMS4wNTlhMS44NzYgMS44NzYgMCAwMC0uNjIzLTEuMzE0YzEuNzI1LjA3NSAzLjIxMy0uMzYxIDMuOTc5LTEuNjE5LjA2OC0uMTEyLjEzLS4yMy4xODYtLjM1NS0uMzQ4LjQ0Mi0uNzg0LjYzLTEuNTkzLjU4NmgtLjAwNy4wMDdjMS4yMDEtLjUzNiAxLjc5OS0xLjA1MiAyLjMzNC0xLjkwNS4xMjUtLjIwNi4yNS0uNDI0LjM3NC0uNjY3LTEuMDUyIDEuMDc4LTIuMjY2IDEuMzgzLTMuNTQzIDEuMTUybC0uOTU4LjEwNmMtLjAzMi4wNjktLjA2My4xNS0uMDk0LjIzelwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoOClcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BcGFjaGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29BcHBTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb0FwcFNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwODBENVwiLFxuICAgIGQ6IFwiTTE5LjUuOTM4YTcuMDAyIDcuMDAyIDAgMDAtNyAwbC04IDQuNjE5QTcgNyAwIDAwMSAxMS42MnY5LjIzN2E3IDcgMCAwMDMuNSA2LjA2Mmw3LjUgNC4zM1YxNy45NzlhNyA3IDAgMDEzLjUtNi4wNjJMMjcgNS4yNzYgMTkuNS45Mzl6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTkuNS45MzhhNy4wMDIgNy4wMDIgMCAwMC03IDBMNSA1LjI3N2wxMSA2LjM1IDExLTYuMzUtNy41LTQuMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIk0yOC40MzUgNy43NmwtMTAuMDI2IDUuNzlhNi45OTQgNi45OTQgMCAwMTEuNTkgNC40Mjh2MTMuMjdsNy41LTQuMzNhNyA3IDAgMDAzLjUtNi4wNjF2LTkuMjM4YTYuOTkyIDYuOTkyIDAgMDAtMS41ODYtNC40MjJsLS45NzguNTY0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXBwU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQXdzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Bd3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk05LjAxOSAxMy44NzhjMCAuMzkuMDQyLjcwNS4xMTcuOTM2LjA4NS4yMzIuMTkxLjQ4NC4zNC43NThhLjQ1NC40NTQgMCAwMS4wNzUuMjQyYzAgLjEwNS0uMDY0LjIxLS4yMDIuMzE1bC0uNjcuNDQyYS41MTQuNTE0IDAgMDEtLjI3Ny4wOTVjLS4xMDcgMC0uMjEzLS4wNTMtLjMyLS4xNDhhMy4yNTggMy4yNTggMCAwMS0uMzgzLS40OTQgOC4xMDkgOC4xMDkgMCAwMS0uMzMtLjYyYy0uODMuOTY3LTEuODczIDEuNDUtMy4xMjggMS40NS0uODk0IDAtMS42MDctLjI1Mi0yLjEyOS0uNzU2LS41MjEtLjUwNS0uNzg3LTEuMTc4LS43ODctMi4wMiAwLS44OTQuMzE5LTEuNjIuOTY4LTIuMTY2LjY1LS41NDcgMS41MTEtLjgyIDIuNjA3LS44Mi4zNjIgMCAuNzM1LjAzIDEuMTI4LjA4My4zOTQuMDUzLjc5OS4xMzcgMS4yMjQuMjMydi0uNzY4YzAtLjgtLjE3LTEuMzU3LS41LTEuNjgzLS4zNC0uMzI2LS45MTUtLjQ4NC0xLjczNS0uNDg0LS4zNzIgMC0uNzU1LjA0My0xLjE0OS4xMzctLjM5NC4wOTUtLjc3Ny4yMS0xLjE1LjM1OC0uMTcuMDczLS4yOTcuMTE1LS4zNzIuMTM2YS42Ni42NiAwIDAxLS4xNy4wMzJjLS4xNDkgMC0uMjIzLS4xMDUtLjIyMy0uMzI2di0uNTE1YzAtLjE2OS4wMi0uMjk1LjA3NC0uMzY4YS43OTYuNzk2IDAgMDEuMjk4LS4yMjFjLjM3My0uMTkuODItLjM0NyAxLjM0LS40NzRhNi41MjQgNi41MjQgMCAwMTEuNjYxLS4yYzEuMjY2IDAgMi4xOTIuMjg1IDIuNzg4Ljg1Mi41ODYuNTY4Ljg4NCAxLjQzLjg4NCAyLjU4OHYzLjQwN2guMDJ6bS00LjMyIDEuNmMuMzUgMCAuNzEyLS4wNjQgMS4wOTUtLjE5YTIuMzczIDIuMzczIDAgMDAxLjAxMS0uNjczYy4xNy0uMi4yOTgtLjQyMS4zNjItLjY3My4wNjQtLjI1My4xMDctLjU1OC4xMDctLjkxNnYtLjQ0MWE4Ljk4MiA4Ljk4MiAwIDAwLS45OC0uMTc5IDguMTEzIDguMTEzIDAgMDAtMS0uMDYzYy0uNzEzIDAtMS4yMzQuMTM3LTEuNTg2LjQyLS4zNS4yODUtLjUyMS42ODQtLjUyMSAxLjIxIDAgLjQ5NC4xMjguODYyLjM5NCAxLjExNS4yNTUuMjYzLjYyOC4zOSAxLjExNy4zOXptOC41NDUgMS4xMzVjLS4xOTIgMC0uMzItLjAzMi0uNDA1LS4xMDUtLjA4NS0uMDYzLS4xNi0uMjEtLjIyMy0uNDFsLTIuNTAxLTguMTNjLS4wNjQtLjIxLS4wOTYtLjM0Ny0uMDk2LS40MjEgMC0uMTY4LjA4NS0uMjYzLjI1Ni0uMjYzaDEuMDQzYy4yMDIgMCAuMzQuMDMyLjQxNS4xMDUuMDg1LjA2My4xNDkuMjEuMjEyLjQxbDEuNzg4IDYuOTYzIDEuNjYtNi45NjNjLjA1NC0uMjEuMTE3LS4zNDcuMjAzLS40MS4wODUtLjA2My4yMzQtLjEwNS40MjUtLjEwNWguODUyYy4yMDIgMCAuMzQuMDMyLjQyNS4xMDUuMDg1LjA2My4xNi4yMS4yMDMuNDFsMS42ODEgNy4wNDcgMS44NDEtNy4wNDdjLjA2NC0uMjEuMTM4LS4zNDcuMjEzLS40MS4wODUtLjA2My4yMjMtLjEwNS40MTUtLjEwNWguOTljLjE3IDAgLjI2Ni4wODQuMjY2LjI2MyAwIC4wNTItLjAxMS4xMDUtLjAyMi4xNjgtLjAxLjA2My0uMDMyLjE0Ny0uMDc0LjI2M2wtMi41NjUgOC4xM2MtLjA2NC4yMS0uMTM4LjM0Ny0uMjIzLjQxLS4wODUuMDYzLS4yMjQuMTA1LS40MDUuMTA1aC0uOTE1Yy0uMjAyIDAtLjM0LS4wMzEtLjQyNi0uMTA1LS4wODUtLjA3My0uMTYtLjIxLS4yMDItLjQybC0xLjY1LTYuNzg0LTEuNjM4IDYuNzczYy0uMDUzLjIxLS4xMTcuMzQ3LS4yMDIuNDItLjA4Ni4wNzQtLjIzNS4xMDYtLjQyNi4xMDZoLS45MTV6bTEzLjY3NS4yODRhNy4xMjIgNy4xMjIgMCAwMS0xLjY0LS4xOWMtLjUzMS0uMTI2LS45NDYtLjI2Mi0xLjIyMy0uNDItLjE3LS4wOTUtLjI4Ny0uMi0uMzMtLjI5NWEuNzM1LjczNSAwIDAxLS4wNjQtLjI5NHYtLjUzNmMwLS4yMjEuMDg1LS4zMjcuMjQ1LS4zMjdhLjYxLjYxIDAgMDEuMTkyLjAzMmMuMDYzLjAyMS4xNi4wNjMuMjY2LjEwNS4zNjEuMTU4Ljc1NS4yODQgMS4xNy4zNjguNDI2LjA4NC44NC4xMjcgMS4yNjcuMTI3LjY3IDAgMS4xOTItLjExNiAxLjU1My0uMzQ4YTEuMTMgMS4xMyAwIDAwLjU1NC0uOTk5YzAtLjI5NC0uMDk2LS41MzYtLjI4OC0uNzM2LS4xOTEtLjItLjU1My0uMzc5LTEuMDc0LS41NDdsLTEuNTQ0LS40NzNjLS43NzYtLjI0Mi0xLjM1MS0uNi0xLjcwMi0xLjA3M2EyLjQ4NyAyLjQ4NyAwIDAxLS41MzItMS41MjVjMC0uNDQyLjA5NS0uODMuMjg3LTEuMTY3LjE5Mi0uMzM3LjQ0Ny0uNjMxLjc2Ni0uODYzLjMyLS4yNDIuNjgxLS40MiAxLjEwNy0uNTQ3YTQuNjkgNC42OSAwIDAxMS4zNC0uMTc4Yy4yMzUgMCAuNDguMDEuNzE0LjA0Mi4yNDUuMDMxLjQ2OC4wNzMuNjkyLjExNS4yMTIuMDUzLjQxNS4xMDUuNjA2LjE2OS4xOTIuMDYzLjM0LjEyNi40NDcuMTg5YS45MTguOTE4IDAgMDEuMzIuMjYzYy4wNjMuMDg0LjA5NS4yLjA5NS4zNDd2LjQ5NGMwIC4yMjEtLjA4NS4zMzctLjI0NS4zMzctLjA4NSAwLS4yMjMtLjA0Mi0uNDA0LS4xMjYtLjYwNy0uMjc0LTEuMjg4LS40MS0yLjA0My0uNDEtLjYwNyAwLTEuMDg2LjA5NC0xLjQxNi4yOTQtLjMzLjItLjUuNTA1LS41LjkzNiAwIC4yOTQuMTA3LjU0Ny4zMi43NDcuMjEyLjIuNjA2LjQgMS4xNy41NzhsMS41MTEuNDczYy43NjYuMjQyIDEuMzIuNTc5IDEuNjUgMS4wMS4zMy40MzEuNDkuOTI2LjQ5IDEuNDczIDAgLjQ1Mi0uMDk2Ljg2Mi0uMjc3IDEuMjJhMi44MzYgMi44MzYgMCAwMS0uNzc3LjkyNWMtLjMzLjI2My0uNzI0LjQ1Mi0xLjE4Mi41OS0uNDc4LjE0Ni0uOTc5LjIyLTEuNTIxLjIyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjRjkwXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjkzIDIyLjAwOWMtMy41MDEgMi41NTYtOC41ODggMy45MTItMTIuOTYyIDMuOTEyLTYuMTMgMC0xMS42NTMtMi4yNC0xNS44MjUtNS45NjMtLjMzLS4yOTUtLjAzMi0uNjk0LjM2Mi0uNDYzIDQuNTEyIDIuNTg3IDEwLjA3OCA0LjE1NSAxNS44MzYgNC4xNTUgMy44ODQgMCA4LjE1MS0uOCAxMi4wNzgtMi40NC41ODYtLjI2MyAxLjA4Ni4zNzguNTExLjc5OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjM4OCAyMC4zNjhjLS40NDctLjU2OC0yLjk1OC0uMjczLTQuMDk3LS4xMzctLjM0LjA0Mi0uMzk0LS4yNTItLjA4NS0uNDczIDItMS4zODggNS4yODktLjk4OSA1LjY3Mi0uNTI2LjM4My40NzQtLjEwNyAzLjcyMy0xLjk4IDUuMjgtLjI4Ny4yNDItLjU2NC4xMTYtLjQzNi0uMi40MjYtMS4wNDEgMS4zNzMtMy4zODYuOTI2LTMuOTQ0elwiXG4gIH0pKSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Bd3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Bd3NNb25vID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Bd3NNb25vKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNOS4wMTkgMTMuODc4YzAgLjM5LjA0Mi43MDUuMTE3LjkzNi4wODUuMjMyLjE5MS40ODQuMzQuNzU4YS40NTQuNDU0IDAgMDEuMDc1LjI0MmMwIC4xMDUtLjA2NC4yMS0uMjAyLjMxNWwtLjY3LjQ0MmEuNTE0LjUxNCAwIDAxLS4yNzcuMDk1Yy0uMTA3IDAtLjIxMy0uMDUzLS4zMi0uMTQ4YTMuMjU4IDMuMjU4IDAgMDEtLjM4My0uNDk0IDguMTA5IDguMTA5IDAgMDEtLjMzLS42MmMtLjgzLjk2Ny0xLjg3MyAxLjQ1LTMuMTI4IDEuNDUtLjg5NCAwLTEuNjA3LS4yNTItMi4xMjktLjc1Ni0uNTIxLS41MDUtLjc4Ny0xLjE3OC0uNzg3LTIuMDIgMC0uODk0LjMxOS0xLjYyLjk2OC0yLjE2Ni42NS0uNTQ3IDEuNTExLS44MiAyLjYwNy0uODIuMzYyIDAgLjczNS4wMyAxLjEyOC4wODMuMzk0LjA1My43OTkuMTM3IDEuMjI0LjIzMnYtLjc2OGMwLS44LS4xNy0xLjM1Ny0uNS0xLjY4My0uMzQtLjMyNi0uOTE1LS40ODQtMS43MzUtLjQ4NC0uMzcyIDAtLjc1NS4wNDMtMS4xNDkuMTM3LS4zOTQuMDk1LS43NzcuMjEtMS4xNS4zNTgtLjE3LjA3My0uMjk3LjExNS0uMzcyLjEzNmEuNjYuNjYgMCAwMS0uMTcuMDMyYy0uMTQ5IDAtLjIyMy0uMTA1LS4yMjMtLjMyNnYtLjUxNWMwLS4xNjkuMDItLjI5NS4wNzQtLjM2OGEuNzk2Ljc5NiAwIDAxLjI5OC0uMjIxYy4zNzMtLjE5LjgyLS4zNDcgMS4zNC0uNDc0YTYuNTI0IDYuNTI0IDAgMDExLjY2MS0uMmMxLjI2NiAwIDIuMTkyLjI4NSAyLjc4OC44NTIuNTg2LjU2OC44ODQgMS40My44ODQgMi41ODh2My40MDdoLjAyem0tNC4zMiAxLjZjLjM1IDAgLjcxMi0uMDY0IDEuMDk1LS4xOWEyLjM3MyAyLjM3MyAwIDAwMS4wMTEtLjY3M2MuMTctLjIuMjk4LS40MjEuMzYyLS42NzMuMDY0LS4yNTMuMTA3LS41NTguMTA3LS45MTZ2LS40NDFhOC45ODIgOC45ODIgMCAwMC0uOTgtLjE3OSA4LjExMyA4LjExMyAwIDAwLTEtLjA2M2MtLjcxMyAwLTEuMjM0LjEzNy0xLjU4Ni40Mi0uMzUuMjg1LS41MjEuNjg0LS41MjEgMS4yMSAwIC40OTQuMTI4Ljg2Mi4zOTQgMS4xMTUuMjU1LjI2My42MjguMzkgMS4xMTcuMzl6bTguNTQ1IDEuMTM1Yy0uMTkyIDAtLjMyLS4wMzItLjQwNS0uMTA1LS4wODUtLjA2My0uMTYtLjIxLS4yMjMtLjQxbC0yLjUwMS04LjEzYy0uMDY0LS4yMS0uMDk2LS4zNDctLjA5Ni0uNDIxIDAtLjE2OC4wODUtLjI2My4yNTYtLjI2M2gxLjA0M2MuMjAyIDAgLjM0LjAzMi40MTUuMTA1LjA4NS4wNjMuMTQ5LjIxLjIxMi40MWwxLjc4OCA2Ljk2MyAxLjY2LTYuOTYzYy4wNTQtLjIxLjExNy0uMzQ3LjIwMy0uNDEuMDg1LS4wNjMuMjM0LS4xMDUuNDI1LS4xMDVoLjg1MmMuMjAyIDAgLjM0LjAzMi40MjUuMTA1LjA4NS4wNjMuMTYuMjEuMjAzLjQxbDEuNjgxIDcuMDQ3IDEuODQxLTcuMDQ3Yy4wNjQtLjIxLjEzOC0uMzQ3LjIxMy0uNDEuMDg1LS4wNjMuMjIzLS4xMDUuNDE1LS4xMDVoLjk5Yy4xNyAwIC4yNjYuMDg0LjI2Ni4yNjMgMCAuMDUyLS4wMTEuMTA1LS4wMjIuMTY4LS4wMS4wNjMtLjAzMi4xNDctLjA3NC4yNjNsLTIuNTY1IDguMTNjLS4wNjQuMjEtLjEzOC4zNDctLjIyMy40MS0uMDg1LjA2My0uMjI0LjEwNS0uNDA1LjEwNWgtLjkxNWMtLjIwMiAwLS4zNC0uMDMxLS40MjYtLjEwNS0uMDg1LS4wNzMtLjE2LS4yMS0uMjAyLS40MmwtMS42NS02Ljc4NC0xLjYzOCA2Ljc3M2MtLjA1My4yMS0uMTE3LjM0Ny0uMjAyLjQyLS4wODYuMDc0LS4yMzUuMTA2LS40MjYuMTA2aC0uOTE1em0xMy42NzUuMjg0YTcuMTIyIDcuMTIyIDAgMDEtMS42NC0uMTljLS41MzEtLjEyNi0uOTQ2LS4yNjItMS4yMjMtLjQyLS4xNy0uMDk1LS4yODctLjItLjMzLS4yOTVhLjczNS43MzUgMCAwMS0uMDY0LS4yOTR2LS41MzZjMC0uMjIxLjA4NS0uMzI3LjI0NS0uMzI3YS42MS42MSAwIDAxLjE5Mi4wMzJjLjA2My4wMjEuMTYuMDYzLjI2Ni4xMDUuMzYxLjE1OC43NTUuMjg0IDEuMTcuMzY4LjQyNi4wODQuODQuMTI3IDEuMjY3LjEyNy42NyAwIDEuMTkyLS4xMTYgMS41NTMtLjM0OGExLjEzIDEuMTMgMCAwMC41NTQtLjk5OWMwLS4yOTQtLjA5Ni0uNTM2LS4yODgtLjczNi0uMTkxLS4yLS41NTMtLjM3OS0xLjA3NC0uNTQ3bC0xLjU0NC0uNDczYy0uNzc2LS4yNDItMS4zNTEtLjYtMS43MDItMS4wNzNhMi40ODcgMi40ODcgMCAwMS0uNTMyLTEuNTI1YzAtLjQ0Mi4wOTUtLjgzLjI4Ny0xLjE2Ny4xOTItLjMzNy40NDctLjYzMS43NjYtLjg2My4zMi0uMjQyLjY4MS0uNDIgMS4xMDctLjU0N2E0LjY5IDQuNjkgMCAwMTEuMzQtLjE3OGMuMjM1IDAgLjQ4LjAxLjcxNC4wNDIuMjQ1LjAzMS40NjguMDczLjY5Mi4xMTUuMjEyLjA1My40MTUuMTA1LjYwNi4xNjkuMTkyLjA2My4zNC4xMjYuNDQ3LjE4OWEuOTE4LjkxOCAwIDAxLjMyLjI2M2MuMDYzLjA4NC4wOTUuMi4wOTUuMzQ3di40OTRjMCAuMjIxLS4wODUuMzM3LS4yNDUuMzM3LS4wODUgMC0uMjIzLS4wNDItLjQwNC0uMTI2LS42MDctLjI3NC0xLjI4OC0uNDEtMi4wNDMtLjQxLS42MDcgMC0xLjA4Ni4wOTQtMS40MTYuMjk0LS4zMy4yLS41LjUwNS0uNS45MzYgMCAuMjk0LjEwNy41NDcuMzIuNzQ3LjIxMi4yLjYwNi40IDEuMTcuNTc4bDEuNTExLjQ3M2MuNzY2LjI0MiAxLjMyLjU3OSAxLjY1IDEuMDEuMzMuNDMxLjQ5LjkyNi40OSAxLjQ3MyAwIC40NTItLjA5Ni44NjItLjI3NyAxLjIyYTIuODM2IDIuODM2IDAgMDEtLjc3Ny45MjVjLS4zMy4yNjMtLjcyNC40NTItMS4xODIuNTktLjQ3OC4xNDYtLjk3OS4yMi0xLjUyMS4yMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI4LjkzIDIyLjAwOWMtMy41MDEgMi41NTYtOC41ODggMy45MTItMTIuOTYyIDMuOTEyLTYuMTMgMC0xMS42NTMtMi4yNC0xNS44MjUtNS45NjMtLjMzLS4yOTUtLjAzMi0uNjk0LjM2Mi0uNDYzIDQuNTEyIDIuNTg3IDEwLjA3OCA0LjE1NSAxNS44MzYgNC4xNTUgMy44ODQgMCA4LjE1MS0uOCAxMi4wNzgtMi40NC41ODYtLjI2MyAxLjA4Ni4zNzguNTExLjc5OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjM4OCAyMC4zNjhjLS40NDctLjU2OC0yLjk1OC0uMjczLTQuMDk3LS4xMzctLjM0LjA0Mi0uMzk0LS4yNTItLjA4NS0uNDczIDItMS4zODggNS4yODktLjk4OSA1LjY3Mi0uNTI2LjM4My40NzQtLjEwNyAzLjcyMy0xLjk4IDUuMjgtLjI4Ny4yNDItLjU2NC4xMTYtLjQzNi0uMi40MjYtMS4wNDEgMS4zNzMtMy4zODYuOTI2LTMuOTQ0elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0F3c01vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29BenVyZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXp1cmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDcyQzZcIixcbiAgICBkOiBcIk0xNy40NDggNGwtOS40MTQgOC4wMUwwIDI2LjE1N2g3LjI0M0wxNy40NDggNHpNMTguNyA1Ljg3NGwtNC4wMTggMTEuMTEgNy43MDQgOS40OTdMNy40NDEgMjloMjQuNDk0TDE4LjcgNS44NzR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29BenVyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0F6dXJlTW9ubyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQXp1cmVNb25vKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcuNDQ4IDRsLTkuNDE0IDguMDFMMCAyNi4xNTdoNy4yNDNMMTcuNDQ4IDR6TTE4LjcgNS44NzRsLTQuMDE4IDExLjExIDcuNzA0IDkuNDk3TDcuNDQxIDI5aDI0LjQ5NEwxOC43IDUuODc0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQXp1cmVNb25vOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQmVhdHMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0JlYXRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTUgMjBINFYwaDExYzUuNTIyIDAgMTAgNC40NzggMTAgMTBzLTQuNDc4IDEwLTEwIDEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEMyQjNcIixcbiAgICBkOiBcIk0yNi43MDIgMTUuNjI0QzI0LjYgMTkuOTc5IDIwLjE1MiAyMyAxNSAyM0g0djloMTVjNS41MjIgMCAxMC00LjQ3OCAxMC0xMGE5Ljk1MiA5Ljk1MiAwIDAwLTIuMjk4LTYuMzc2XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMjQuMzM4IDEzLjU1NEE5Ljk0MiA5Ljk0MiAwIDAwMTkgMTJINHY4aDExYzQuMjcgMCA3LjkwMy0yLjY4IDkuMzM4LTYuNDQ2XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29CZWF0czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0J1c2luZXNzQW5hbHl0aWNzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29CdXNpbmVzc0FuYWx5dGljcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZDogXCJNMCAyMmMwIDUuNTIyIDQuNDc4IDEwIDEwIDEwVjEyQzQuNDc4IDEyIDAgMTYuNDc4IDAgMjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xMCAxMnYxMGgxMGMwLTUuNTIyLTQuNDc4LTEwLTEwLTEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0xMCAwdjljNy4xNjggMCAxMyA1LjgzMiAxMyAxM2g5QzMyIDkuODUgMjIuMTUgMCAxMCAwXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQnVzaW5lc3NBbmFseXRpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29DZXBoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29DZXBoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjUuNDcxIDI3LjU2Yy0xLjA2LS41NjctMS42NzYtMS4yMDYtMS44MTEtMS45MDItLjEzLS42NzMuMTctMS40MjEuOTE4LTIuMjg4YTExLjI5IDExLjI5IDAgMDAyLjc3My03LjQyQTExLjMyNCAxMS4zMjQgMCAwMDE2LjA0MiA0LjY0bC0uMDUuMDAxaC0uMDVBMTEuMzI0IDExLjMyNCAwIDAwNC42MzIgMTUuOTQ5YTExLjI5MSAxMS4yOTEgMCAwMDIuNzc0IDcuNDIyYy43NTMuODcyIDEuMDQ3IDEuNTkxLjkyOCAyLjI1Ny0uMTMuNjk0LS43NCAxLjM0Mi0xLjgxNyAxLjkzLTEuNjU3LTEuMzc1LTMuMTE2LTMuMjEyLTQuMDEtNS4wNTZhMTQuOTQzIDE0Ljk0MyAwIDAxLTEuMTE3LTMuMTM5QTE0Ljk5NyAxNC45OTcgMCAwMTEgMTUuOTVhMTQuOTAxIDE0LjkwMSAwIDAxNC4zNzgtMTAuNTcgMTQuOTI0IDE0LjkyNCAwIDAxNC43NTItMy4yMDRDMTEuOTcgMS4zOTUgMTMuOTUuOTk2IDE1Ljk0OCAxaC4xMDFhMTQuODg4IDE0Ljg4OCAwIDAxMTAuNTcgNC4zNzggMTQuOTEyIDE0LjkxMiAwIDAxMy45ODIgMTMuOTg1IDE0Ljg3MSAxNC44NzEgMCAwMS0xLjExOCAzLjE0Yy0uOSAxLjg0My0yLjM1OCAzLjY4MS00LjAxIDUuMDU3aC0uMDAzem0tNS41MjMgMi43OThjLS4xNzMtLjExLS43NjctLjU1LTEuMzQ1LTEuMzUzYTYuMTIyIDYuMTIyIDAgMDEtMS4xNzQtMy43MzggOC4yNiA4LjI2IDAgMDEuNjExLTIuOTY0IDguNDIgOC40MiAwIDAxMS42MjctMi41NGwuMDA0LS4wMDguMTU0LS4xNzhjLjI2My0uMzA1LjUzNi0uNjIyLjc1My0uOTkuMjY4LS40NTQuNDYyLS45MzEuNTc4LTEuNDIuMTc4LS43NTguMTg4LTEuNTQ3LjAyOS0yLjMxYTUuMyA1LjMgMCAwMC0uODU4LTEuOTU2IDUuMjY0IDUuMjY0IDAgMDAtNC4yOS0yLjIxN2gtLjEwOGE1LjI1IDUuMjUgMCAwMC00LjI5IDIuMjE2IDUuMzEgNS4zMSAwIDAwLS44NTYgMS45NTZjLS4xNi43NjMtLjE1IDEuNTUyLjAzIDIuMzExLjExNS40ODguMzEuOTY1LjU3NiAxLjQxOS4yMTkuMzcuNDkuNjg0Ljc1My45OWwuMTU1LjE3OS4wMDMuMDA3YTguMzg0IDguMzg0IDAgMDExLjYyOCAyLjU0IDguMjQgOC4yNCAwIDAxLjYxIDIuOTY0IDYuMTIzIDYuMTIzIDAgMDEtMS4xNzMgMy43MzhjLS41OC43OTUtMS4xNzQgMS4yNDMtMS4zNDYgMS4zNTJsLS44NjctLjI2YTE1LjQzNCAxNS40MzQgMCAwMS0yLjQ5LTEuMDk4IDQuMjQ1IDQuMjQ1IDAgMDAyLjIzNC0zLjczNmMwLTEuMDM0LS40MDMtMi4wMjgtMS4xOTUtMi45NWwtLjAzNC0uMDM0LS4yMzctLjI2LS42MzYtLjc0NmE4LjkyNCA4LjkyNCAwIDAxLTEuNTI1LTMuMjYgOC45ODMgOC45ODMgMCAwMS0uMDUtMy45MDUgOC45MDYgOC45MDYgMCAwMTEuNDYtMy4zMTNBOC45OTMgOC45OTMgMCAwMTExLjIzIDguMzlhOC45MzcgOC45MzcgMCAwMTQuNzAyLTEuMzQ0aC4xMTJjLjQyIDAgLjg0LjAyOSAxLjI1NS4wODhhOC45MzggOC45MzggMCAwMTMuNDQ4IDEuMjU2IDkuMDAzIDkuMDAzIDAgMDEyLjU1NCAyLjQwNCA5LjA5MyA5LjA5MyAwIDAxMS40NTkgMy4zMTMgOS4wNDMgOS4wNDMgMCAwMS0uMDUgMy45MTIgOC45MjUgOC45MjUgMCAwMS0xLjUyNiAzLjI2Yy0uMi4yNjUtLjQwOS40OTUtLjYzNy43NDVsLS4yMy4yNTRjLS4wMTcuMDE2LS4wMy4wMjctLjA0LjA0My0uODA0Ljk2MS0xLjE5NSAxLjkyNy0xLjE5NSAyLjk0OGE0LjI1IDQuMjUgMCAwMDIuMjM3IDMuNzM1Yy0uNzk1LjQ0MS0xLjYzLjgwOS0yLjQ5MSAxLjA5OGwtLjg2Mi4yNi0uMDE4LS4wMDR6bS0zLjk1Ni0xMS4zMTRhMi45NTcgMi45NTcgMCAwMS0yLjk1Mi0yLjk1MiAyLjk1NyAyLjk1NyAwIDAxMi45NTItMi45NTIgMi45NTYgMi45NTYgMCAwMTIuOTUgMi45NTIgMi45NTcgMi45NTcgMCAwMS0yLjk1IDIuOTUyXCIsXG4gICAgZmlsbDogXCIjRjA1QzU2XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29DZXBoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQ2xvdWQgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Nsb3VkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTIuMzcgMTguMzUyYy4wMzItLjAxLjA2Ni0uMDE0LjEtLjAyM0E2IDYgMCAwMTE4IDEwVjBDOS4xNjMgMCAyIDcuMTY0IDIgMTZjMCAyLjc5My43MiA1LjQxNyAxLjk3NiA3LjcwMmExOC45NDcgMTguOTQ3IDAgMDE4LjM5My01LjM0OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMTggMEExNS45NTkgMTUuOTU5IDAgMDA1LjcxNyA1Ljc1YTE2LjAwNiAxNi4wMDYgMCAwMDcuNTQxIDUuMDMyYy43MS4yMiAxLjQ3Ny4xMzUgMi4xNDYtLjE4OEE1Ljk0IDUuOTQgMCAwMTE4IDEwYTUuOTQgNS45NCAwIDAxMi41OTYuNTk0Yy42NjkuMzIzIDEuNDM2LjQwOCAyLjE0Ni4xODhhMTYuMDEgMTYuMDEgMCAwMDcuNTQxLTUuMDMyQTE1Ljk1OSAxNS45NTkgMCAwMDE4IDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTIyLjc0MiAyMS4yMThjLS43MS0uMjItMS40NzgtLjEzNS0yLjE0Ni4xODhBNS45NDcgNS45NDcgMCAwMTE4IDIyYTUuOTQgNS45NCAwIDAxLTIuNTk2LS41OTRjLS42NjktLjMyMy0xLjQzNi0uNDA4LTIuMTQ2LS4xODhhMTYuMDA2IDE2LjAwNiAwIDAwLTcuNTQgNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAwMTggMzJjNC45MzYgMCA5LjM0OC0yLjIzNiAxMi4yODMtNS43NWExNi4wMTYgMTYuMDE2IDAgMDAtNy41NC01LjAzMlwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0Nsb3VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvQ2xvdWRFY2UgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0Nsb3VkRWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTE4IDB2MTBhNiA2IDAgMDAtNS41MyA4LjMzYy0uMDM0LjAwOS0uMDY4LjAxMi0uMS4wMjNBMTguOTQ3IDE4Ljk0NyAwIDAwMy45NzUgMjMuNyAxNS45MzQgMTUuOTM0IDAgMDEyIDE2QzIgNy4xNjQgOS4xNjMgMCAxOCAwem0wIDEzYTMgMyAwIDExMCA2IDMgMyAwIDAxMC02elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBBRUZBXCIsXG4gICAgZDogXCJNMjIuNzQyIDIxLjIxOGMtLjcxLS4yMi0xLjQ3OC0uMTM1LTIuMTQ2LjE4OEE1Ljk0NyA1Ljk0NyAwIDAxMTggMjJhNS45NCA1Ljk0IDAgMDEtMi41OTYtLjU5NGMtLjY2OS0uMzIzLTEuNDM2LS40MDgtMi4xNDYtLjE4OGExNi4wMDYgMTYuMDA2IDAgMDAtNy41NCA1LjAzMkExNS45NTkgMTUuOTU5IDAgMDAxOCAzMmM0LjkzNiAwIDkuMzQ4LTIuMjM2IDEyLjI4My01Ljc1YTE2LjAxNiAxNi4wMTYgMCAwMC03LjU0LTUuMDMyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xOCAwQTE1Ljk1OSAxNS45NTkgMCAwMDUuNzE3IDUuNzVhMTYuMDA2IDE2LjAwNiAwIDAwNy41NDEgNS4wMzJjLjcxLjIyIDEuNDc3LjEzNSAyLjE0Ni0uMTg4QTUuOTQgNS45NCAwIDAxMTggMTBhNS45NCA1Ljk0IDAgMDEyLjU5Ni41OTRjLjY2OS4zMjMgMS40MzYuNDA4IDIuMTQ2LjE4OGExNi4wMSAxNi4wMSAwIDAwNy41NDEtNS4wMzJBMTUuOTU5IDE1Ljk1OSAwIDAwMTggMFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ2xvdWRFY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Db2RlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Db2RlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTkuNzUgMTJMMTYgMzJoMTBsLTMuNC0xMC44OEExMyAxMyAwIDAwMTAuMTkgMTJoLS40NHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzIyQTdGM1wiLFxuICAgIGQ6IFwiTTI1LjcyNSAxMS45M0ExNyAxNyAwIDAwOS41IDBINmwzLjc1IDEyaC40NGExMyAxMyAwIDAxMTIuNDEgOS4xMkwyNiAzMmg2bC02LjI3NS0yMC4wN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAzNzdDQVwiLFxuICAgIGQ6IFwiTTcuOTEgMTYuMTc1TDAgMzJoMTIuODU1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvQ29kZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0NvZGVzYW5kYm94ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Db2Rlc2FuZGJveChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjczOCAyOC4wNDRWMTYuNjgxTDMuMTcyIDEwLjkxOXY2LjQ2bDUuMzIgMi42N3Y0Ljg4OWw2LjI0NiAzLjEwNnptMi4zNDQuMDY2bDYuMzU3LTMuMTd2LTUuMDAybDUuMzUzLTIuNjg2VjEwLjg3bC0xMS43MSA1Ljg1NFYyOC4xMXpNMjcuMzA2IDguOTkzbC02LjAwMy0zLjAxMi01LjI4NiAyLjY1Ni01LjMyNS0yLjY1OUw0LjYzNyA5LjAzbDExLjMxNyA1LjYzOCAxMS4zNTItNS42NzV6TS44MjggMjMuNzQ0VjguMzI0TDE1Ljk4MS42ODlsMTUuMTU1IDcuNjA0VjIzLjcyTDE1Ljk4IDMxLjI4LjgyOCAyMy43NDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Db2Rlc2FuZGJveDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0NvdWNoYmFzZSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvQ291Y2hiYXNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUQyMjI2XCIsXG4gICAgZDogXCJNMTYuMDcyLjAyNEM3LjI5LjAyNC4xNDQgNy4xNDYuMTQ0IDE1Ljk1MmMwIDguNzgyIDcuMTIyIDE1LjkyOCAxNS45MjggMTUuOTI4QzI0Ljg1NCAzMS44OCAzMiAyNC43NTggMzIgMTUuOTUyIDMyIDcuMTQ2IDI0Ljg1NC4wMjQgMTYuMDcyLjAyNHptMTAuNzU1IDE4LjcxOWMwIC45NjItLjU1MyAxLjgwNC0xLjYzNiAxLjk5Ny0xLjg3Ny4zMzYtNS44MjMuNTMtOS4xMTkuNTMtMy4yOTYgMC03LjI0Mi0uMTk0LTkuMTE5LS41My0xLjA4Mi0uMTkzLTEuNjM2LTEuMDM1LTEuNjM2LTEuOTk3di02LjIwOGMwLS45NjIuNzQ2LTEuODUyIDEuNjM2LTEuOTk3LjU1NC0uMDk2IDEuODUzLS4xOTIgMi44NjQtLjE5Mi4zODUgMCAuNjk3LjI4OS42OTcuNzQ2djQuMzU1bDUuNTgyLS4xMiA1LjU4Mi4xMnYtNC4zNTVjMC0uNDU3LjMxMy0uNzQ2LjY5OC0uNzQ2IDEuMDEgMCAyLjMxLjA5NiAyLjg2My4xOTIuOTE0LjE0NSAxLjYzNiAxLjAzNSAxLjYzNiAxLjk5Ny0uMDQ4IDIuMDQ1LS4wNDggNC4xMzktLjA0OCA2LjIwOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0NvdWNoYmFzZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0RvY2tlciA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRG9ja2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguMDk5IDE1LjEwOGgzLjMwNHYtMi45NzNIMTguMXYyLjk3M3ptLTMuOTA1IDBoMy4zMDR2LTIuOTczaC0zLjMwNHYyLjk3M3ptLTMuOTA1IDBoMy4zMDR2LTIuOTczSDEwLjI5djIuOTczem0tMy45MDUgMEg5LjY5di0yLjk3M0g2LjM4NHYyLjk3M3ptLTMuOTA0IDBoMy4zMDR2LTIuOTczSDIuNDh2Mi45NzN6bTMuOTA0LTMuNTY4SDkuNjlWOC41NjhINi4zODR2Mi45NzJ6bTMuOTA1IDBoMy4zMDRWOC41NjhIMTAuMjl2Mi45NzJ6bTMuOTA1IDBoMy4zMDRWOC41NjhoLTMuMzA0djIuOTcyem0wLTMuNTY3aDMuMzA0VjVoLTMuMzA0djIuOTczem0xNy4xMzkgNS40MDJjLS43MjItLjQ3OC0yLjM4LS42NTMtMy42NTYtLjQxNS0uMTY0LTEuMTktLjgzNC0yLjIyMS0yLjA1Mi0zLjE1M2wtLjctLjQ2My0uNDY4LjY5NGMtLjU5OC44OTMtLjg5NyAyLjEzLS44IDMuMzE3LjA0NS40MTguMTgzIDEuMTY0LjYxNyAxLjgyLS40MzMuMjMxLTEuMjkuNTQ5LTIuNDIuNTI4SC4xMjRsLS4wNDMuMjQ3Yy0uMjA0IDEuMTkzLS4yIDQuOTE0IDIuMjQgNy43NzRDNC4xNzggMjUuODk4IDYuOTYgMjcgMTAuNTkgMjdjNy44NyAwIDEzLjY5My0zLjU4NiAxNi40Mi0xMC4xMDQgMS4wNzMuMDIgMy4zODEuMDA2IDQuNTY3LTIuMjM3LjAzMS0uMDUxLjEwMi0uMTg2LjMxLS42MWwuMTEzLS4yMzQtLjY2Ny0uNDR6XCIsXG4gICAgZmlsbDogXCIjMTM2RUEzXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRG9ja2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRHJvcHdpemFyZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRHJvcHdpemFyZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19kcm9wd2l6YXJkJyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAyOS42MXM5LjU1IDQuNzQgMTYuODU2LS44OTNjLTEuOTA1LTUuMTE0LTUuMjUtMTkuODY3LTcuMjI2LTI2LjM4My0uNDIyLTEuMzg5LS40OS0xLjUyNy0uNjYzLTEuOTA5LS45NjQtMi4xMzQtMS45NzggNC4xNDItMy42MjggMTAuNDU5QzEyLjc0OSAxMy4xNDggOCAyOS42MSA4IDI5LjYxXCIsXG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuOTI2IDI4LjU2M3M4LjE3IDQuNzk0IDE0LjkzLjE1NGMtLjE4LS44MDctLjY0Mi0yLjEwMy0uOTU1LTMuMzExLTEuNjY0LTYuNDE2LTQuNjc2LTE3LjI0OC02LjE0NC0yMi42MjYtMS41OS01LjgyMi0yLjEwNS45ODYtMy45NjEgOC4yMy0uNTY0IDIuMjA0LTMuODcgMTcuNTUzLTMuODcgMTcuNTUzXCIsXG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKVxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjE0IDI0LjQxbC44NS0xLjQ2Ni43OTMgMS41NDQtLjkwOCAxLjk5LS43MzUtMi4wNjl6bTYuOTM0LTUuNTQ1bC44NS0xLjQ2NS43OTMgMS41NDMtLjkwOCAxLjk5LS43MzUtMi4wNjh6bS00Ljc0Ny01Ljg1MWwuODUtMS40NjUuNzkyIDEuNTQzLS45MDggMS45OS0uNzM0LTIuMDY4XCIsXG4gICAgZmlsbDogXCIjRjlBNzJCXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4xNCAyNC40MWwuODUtMS43MTYuNzkzIDEuNzk0LS45MDcgMS40NjgtLjczNi0xLjU0NnptNi45MzQtNS41NDVsLjg1MS0xLjcxNi43OTIgMS43OTQtLjkwNiAxLjQ2OC0uNzM3LTEuNTQ2em0tNC43NDctNS44NTFsLjg1LTEuNzE2Ljc5MiAxLjc5NC0uOTA2IDEuNDY4LS43MzYtMS41NDZcIixcbiAgICBmaWxsOiBcIiNGRkYyMDBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjk4NyAyOC40MjJzNi4wODIgMS4wMTUgMTAuMDg2LTEuNTQ5Yy0uNTAyIDEuNTUtNC45OTEgMy4zMTQtMTAuMDg2IDEuNTVcIixcbiAgICBmaWxsOiBcIiMyNDI2NURcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiAzMy40NzMsXG4gICAgeTE6IDcuNjc0LFxuICAgIHgyOiA3Ljc1MSxcbiAgICB5MjogMjEuMzMxLFxuICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgc3RvcENvbG9yOiBcIiMzODcxQzFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC41MTUsXG4gICAgc3RvcENvbG9yOiBcIiMyQzM3OTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMC44NjUsXG4gICAgc3RvcENvbG9yOiBcIiMyNDI2NURcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogMSxcbiAgICBzdG9wQ29sb3I6IFwiIzI1Mjc2MVwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiAyMS4wMjgsXG4gICAgeTE6IDE0LjkyOCxcbiAgICB4MjogNi4wMTcsXG4gICAgeTI6IDE4Ljg0NCxcbiAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIHN0b3BDb2xvcjogXCIjMzg3MUMxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuNTE1LFxuICAgIHN0b3BDb2xvcjogXCIjMkMzNzkyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDAuODY1LFxuICAgIHN0b3BDb2xvcjogXCIjMjQyNjVEXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IDEsXG4gICAgc3RvcENvbG9yOiBcIiMyNTI3NjFcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRHJvcHdpemFyZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0VsYXN0aWMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0VsYXN0aWMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS10eXBlXCI6IFwibG9nb0VsYXN0aWNcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcIm91dGxpbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTMwLjg2IDEzLjEyOUE2LjMzMyA2LjMzMyAwIDAxMzIgMTYuNzdhNi40MTkgNi40MTkgMCAwMS0xLjE2MiAzLjY1MiA2LjM4MiA2LjM4MiAwIDAxLTMuMDMyIDIuMzMxIDQuODMzIDQuODMzIDAgMDEtMS42NzIgNS41NDIgNC43ODkgNC43ODkgMCAwMS01Ljc3LS4wNzQgOS4wMTYgOS4wMTYgMCAwMS00LjUgMy4zMjIgOC45ODIgOC45ODIgMCAwMS01LjU4Ny4wMjMgOS4wMTQgOS4wMTQgMCAwMS00LjUyNi0zLjI4NyA5LjA2NyA5LjA2NyAwIDAxLTEuNzI3LTUuMzMzYzAtLjU3OS4wNTMtMS4xNTYuMTYtMS43MjVBNi4zMDUgNi4zMDUgMCAwMTEuMTQ1IDE4LjkgNi4zNDEgNi4zNDEgMCAwMTAgMTUuMjQyYTYuNDIgNi40MiAwIDAxMS4xNjMtMy42NTIgNi4zODQgNi4zODQgMCAwMTMuMDM1LTIuMzMgNC44MzMgNC44MzMgMCAwMTEuNjU4LTUuNTU3IDQuNzg5IDQuNzg5IDAgMDE1Ljc4LjA3IDkuMDM3IDkuMDM3IDAgMDE0LjkzLTMuNDQ2IDkuMDA3IDkuMDA3IDAgMDE1Ljk5NC40MTkgOS4wNSA5LjA1IDAgMDE0LjQwNyA0LjA5OCA5LjA5NyA5LjA5NyAwIDAxLjg3MyA1Ljk2NSA2LjI5OCA2LjI5OCAwIDAxMy4wMiAyLjMyem0tMTguMjguNjU4bDcuMDAyIDMuMjExIDcuMDY2LTYuMjEzYTcuODUgNy44NSAwIDAwLjE1Mi0xLjU1N2MwLTEuNjkyLS41MzktMy4zNC0xLjU0LTQuNzA0YTcuODk3IDcuODk3IDAgMDAtNC4wMi0yLjg2OSA3Ljg3IDcuODcgMCAwMC00LjkzMi4wODYgNy45IDcuOSAwIDAwLTMuOTIgMy4wMDdsLTEuMTc0IDYuMTE4IDEuMzY3IDIuOTItLjAwMS4wMDF6bS03LjI0NyA3LjQ0MUE3Ljk2NCA3Ljk2NCAwIDAwNi43MiAyNy41M2E3LjkxOCA3LjkxOCAwIDAwNC4wNCAyLjg3NCA3Ljg5IDcuODkgMCAwMDQuOTUtLjA5NyA3LjkyIDcuOTIgMCAwMDMuOTI2LTMuMDNsMS4xNjYtNi4xMDItMS41NTUtMi45ODUtNy4wMy0zLjIxMS02Ljg4NSA2LjI0OC4wMDEuMDAxem00Ljc1NS0xMS4wMjRsLTQuOC0xLjEzNy4wMDItLjAwMmEzLjgyIDMuODIgMCAwMTEuMzEyLTQuMzU4IDMuNzg1IDMuNzg1IDAgMDE0LjUzOC4wMjNsLTEuMDUyIDUuNDc0em0tNS4yMTYuMDFhNS4yOTQgNS4yOTQgMCAwMC0yLjU5NSAxLjg4MiA1LjMyNCA1LjMyNCAwIDAwLS4xNDIgNi4xMjQgNS4yODcgNS4yODcgMCAwMDIuNTA1IDJsNi43MzMtNi4xMDEtMS4yMzUtMi42NS01LjI2Ni0xLjI1NXptMTguMjg2IDE3Ljg0OGEzLjczNyAzLjczNyAwIDAxLTIuMjg1LS43ODVsMS4wMzctNS40NTQgNC44IDEuMTI1YTMuODEyIDMuODEyIDAgMDEtMS44MDEgNC42OGMtLjU0LjI4My0xLjE0LjQzMi0xLjc1MS40MzR6bS0xLjMxLTcuNDk5bDUuMjggMS4yMzhhNS4zNCA1LjM0IDAgMDAyLjYyMi0xLjkzOCA1LjM3IDUuMzcgMCAwMDEuMDEzLTMuMTA2IDUuMzExIDUuMzExIDAgMDAtLjkzNi0zLjAxIDUuMjgyIDUuMjgyIDAgMDAtMi40NzUtMS45NDRsLTYuOTA0IDYuMDcgMS40IDIuNjl6XCIsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi41OCAxMy43ODdsNy4wMDIgMy4yMTEgNy4wNjYtNi4yMTNhNy44NDkgNy44NDkgMCAwMC4xNTItMS41NTdjMC0xLjY5Mi0uNTM5LTMuMzQtMS41NC00LjcwNGE3Ljg5NyA3Ljg5NyAwIDAwLTQuMDItMi44NjkgNy44NyA3Ljg3IDAgMDAtNC45MzIuMDg2IDcuOSA3LjkgMCAwMC0zLjkyIDMuMDA3bC0xLjE3NCA2LjExOCAxLjM2NyAyLjkyLS4wMDEuMDAxelwiLFxuICAgIGZpbGw6IFwiI0ZFQzUxNFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4zMzMgMjEuMjI4QTcuOTY0IDcuOTY0IDAgMDA2LjcyIDI3LjUzYTcuOTE4IDcuOTE4IDAgMDA0LjA0IDIuODc0IDcuODkgNy44OSAwIDAwNC45NS0uMDk3IDcuOTIgNy45MiAwIDAwMy45MjYtMy4wM2wxLjE2Ni02LjEwMi0xLjU1NS0yLjk4NS03LjAzLTMuMjExLTYuODg1IDYuMjQ4LjAwMS4wMDF6XCIsXG4gICAgZmlsbDogXCIjMDBCRkIzXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjI4OCA5LjA2N2w0LjggMS4xMzdMMTEuMTQgNC43M2EzLjc4NSAzLjc4NSAwIDAwLTUuOTE0IDEuOTQgMy44MiAzLjgyIDAgMDAuMDY0IDIuMzk1XCIsXG4gICAgZmlsbDogXCIjRjA0RTk4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00Ljg3MiAxMC4yMTRhNS4yOTQgNS4yOTQgMCAwMC0yLjU5NSAxLjg4MiA1LjMyNCA1LjMyNCAwIDAwLS4xNDIgNi4xMjQgNS4yODcgNS4yODcgMCAwMDIuNTA1IDJsNi43MzMtNi4xMDEtMS4yMzUtMi42NS01LjI2Ni0xLjI1NXpcIixcbiAgICBmaWxsOiBcIiMxQkE5RjVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjg3MyAyNy4yNzdhMy43MzYgMy43MzYgMCAwMDIuMjg1Ljc4NSAzLjc4MyAzLjc4MyAwIDAwMy4xMDEtMS42MyAzLjgxMiAzLjgxMiAwIDAwLjQ1MS0zLjQ4NGwtNC44LTEuMTI1LTEuMDM3IDUuNDU0elwiLFxuICAgIGZpbGw6IFwiIzkzQzkwRVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuODQ4IDIwLjU2M2w1LjI4IDEuMjM4YTUuMzQgNS4zNCAwIDAwMi42MjItMS45MzggNS4zNyA1LjM3IDAgMDAxLjAxMy0zLjEwNiA1LjMxMiA1LjMxMiAwIDAwLS45MzYtMy4wMSA1LjI4MyA1LjI4MyAwIDAwLTIuNDc1LTEuOTQ0bC02LjkwNCA2LjA3IDEuNCAyLjY5elwiLFxuICAgIGZpbGw6IFwiIzA3Q1wiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRWxhc3RpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0VsYXN0aWNTdGFjayA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGMDRFOThcIixcbiAgICBkOiBcIk0zMiA5VjIuNUEyLjUgMi41IDAgMDAyOS41IDBoLTI3QTIuNSAyLjUgMCAwMDAgMi41VjloMzJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0wIDIwaDMydi04SDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDgwRDVcIixcbiAgICBkOiBcIk0xNC41IDIzSDB2Ni41QTIuNSAyLjUgMCAwMDIuNSAzMmgxMnYtOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFQzUxNFwiLFxuICAgIGQ6IFwiTTE3LjUgMjN2OWgxMmEyLjUgMi41IDAgMDAyLjUtMi41VjIzSDE3LjV6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRWxhc3RpY1N0YWNrOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvRWxhc3RpY3NlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiLFxuICAgIGQ6IFwiTTIgMTZjMCAxLjM4NC4xOTQgMi43Mi41MjQgNEgyMmE0IDQgMCAwMDAtOEgyLjUyNEExNS45ODQgMTUuOTg0IDAgMDAyIDE2XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk0yOC45MjQgNy42NjJBMTUuMzgxIDE1LjM4MSAwIDAwMzAuNDggNkMyNy41NDcgMi4zNDYgMjMuMDUgMCAxOCAwIDExLjY3OSAwIDYuMjM5IDMuNjc4IDMuNjQ0IDlIMjUuNTFhNS4wMzkgNS4wMzkgMCAwMDMuNDEzLTEuMzM4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0yNS41MSAyM0gzLjY0NUM2LjI0IDI4LjMyMyAxMS42NzkgMzIgMTggMzJjNS4wNSAwIDkuNTQ3LTIuMzQ2IDEyLjQ4LTZhMTUuMzgxIDE1LjM4MSAwIDAwLTEuNTU2LTEuNjYyQTUuMDM0IDUuMDM0IDAgMDAyNS41MSAyM1wiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VsYXN0aWNzZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDBCRkIzXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE2IDBjLTIuOTE4IDAtNS42NDUuNzk0LTggMi4xNTggNC43NzcgMi43NjggOCA3LjkyMyA4IDEzLjg0MiAwIDUuOTE5LTMuMjIzIDExLjA3NC04IDEzLjg0MkExNS45MDcgMTUuOTA3IDAgMDAxNiAzMmM4LjgzNyAwIDE2LTcuMTYzIDE2LTE2UzI0LjgzNyAwIDE2IDB6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMjRoMi4yMjJBMTIuOTk2IDEyLjk5NiAwIDAwMTMgMTZjMC0yLjkzNS0xLjAxMi01Ljc0NC0yLjc3OC04SDhhOCA4IDAgMDAwIDE2elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTYgOGgtMi4xNTJBMTUuODc3IDE1Ljg3NyAwIDAxMTYgMTZjMCAyLjkxOC0uNzg2IDUuNjQ3LTIuMTUyIDhIMTZhOCA4IDAgMDAwLTE2elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0VudGVycHJpc2VTZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29FdGNkID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29FdGNkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCIjNDE5RURBXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjY1IDE0LjE2NGMwIDEuMTg5LS45MzMgMi4xNS0yLjA4MyAyLjE1LTEuMTUyIDAtMi4wODItLjk2MS0yLjA4Mi0yLjE1IDAtMS4xODUuOTMtMi4xNSAyLjA4Mi0yLjE1IDEuMTUgMCAyLjA4My45NjUgMi4wODMgMi4xNXptMi42OTMgMGMwIDEuMTg5LjkzNCAyLjE1IDIuMDg0IDIuMTVzMi4wODMtLjk2MSAyLjA4My0yLjE1YzAtMS4xODUtLjkzMy0yLjE1LTIuMDgzLTIuMTUtMS4xNSAwLTIuMDg0Ljk2NS0yLjA4NCAyLjE1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzEuNTIyIDE2LjQ5NWE1Ljg0NSA1Ljg0NSAwIDAxLTMuMTA1LS42MThjLjI3Mi0xLjYwMy4zODctMy4yMTguMzU3LTQuODI3YTI0Ljg5NiAyNC44OTYgMCAwMC0zLjAyNy0zLjcwMyA2LjEzNyA2LjEzNyAwIDAxMi4xMzMtMi4zNmwuMzkxLS4yNS0uMzA0LS4zNTRjLTEuNTctMS44MjUtMy40NDQtMy4yMzUtNS41NjgtNC4xOTNMMjEuOTc1IDBsLS4xMDcuNDYyYTYuMjQ4IDYuMjQ4IDAgMDEtMS41MSAyLjgyOSAyMy43NyAyMy43NyAwIDAwLTQuMzYyLTEuODU1IDIzLjc5IDIzLjc5IDAgMDAtNC4zNTUgMS44NTFBNi4yNDYgNi4yNDYgMCAwMTEwLjEzNy40NjVsLS4xMDgtLjQ2Mi0uNDIzLjE4OWMtMi4wOTcuOTQzLTQuMDIyIDIuMzkyLTUuNTY2IDQuMTlsLS4zMDYuMzU1LjM5LjI1YTYuMTI1IDYuMTI1IDAgMDEyLjEyOSAyLjM0NyAyNS4wMDEgMjUuMDAxIDAgMDAtMy4wMjIgMy42ODkgMjYuMDY4IDI2LjA2OCAwIDAwLjM0NyA0Ljg2IDUuODMyIDUuODMyIDAgMDEtMy4wOS42MTJMLjAzIDE2LjQ2bC4wNDMuNDczYTE2LjcyMyAxNi43MjMgMCAwMDIuMTQgNi43NjVsLjIzNC40MS4zNS0uMzA4YTUuOTE0IDUuOTE0IDAgMDEyLjgzNy0xLjM3MiAyNS4yNTUgMjUuMjU1IDAgMDAyLjQyOSA0LjA4M2MxLjQ3NS41MzMgMy4wMTMuOTMgNC42MDEgMS4xNjdhNi4zNTkgNi4zNTkgMCAwMS0uMzgzIDMuMjQzbC0uMTc1LjQzOS40NS4xMDJjMS4xNS4yNjEgMi4zMS4zOTQgMy40NDcuMzk0bDMuNDQ3LS4zOTQuNDUtLjEwMi0uMTc1LS40NGE2LjM3NiA2LjM3NiAwIDAxLS4zODMtMy4yNDQgMjMuOTA1IDIzLjkwNSAwIDAwNC41ODUtMS4xNjUgMjUuMjg2IDI1LjI4NiAwIDAwMi40My00LjA4NiA1Ljk0IDUuOTQgMCAwMTIuODUxIDEuMzczbC4zNS4zMDYuMjMzLS40MDhhMTYuNjYxIDE2LjY2MSAwIDAwMi4xNC02Ljc2NGwuMDQyLS40NzItLjQ1LjAzNnpNMjAuOTMgMjIuMjc4Yy0xLjYzLjQ1OC0zLjI4Ny42ODktNC45MzMuNjg5LTEuNjUgMC0zLjMwNC0uMjMxLTQuOTM2LS42OWEyMC4wMjggMjAuMDI4IDAgMDEtMi4xMTMtNC41OTQgMjAuMDcyIDIwLjA3MiAwIDAxLS44OS01LjA0IDE5LjA3NiAxOS4wNzYgMCAwMTMuNTc2LTMuNTE2IDE4Ljg2NyAxOC44NjcgMCAwMTQuMzYzLTIuNDQ4IDE4Ljk0NCAxOC45NDQgMCAwMTQuMzU1IDIuNDQzIDE5LjE5IDE5LjE5IDAgMDEzLjU5MiAzLjUzOGMtLjA5IDEuNzMtLjM5IDMuNDEtLjg5OSA1LjAxOWExOS45NjUgMTkuOTY1IDAgMDEtMi4xMTUgNC41OTl6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvRXRjZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0djcCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR2NwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2djcCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNLjA4NS4xaDQuNTQ5djYuMjkxSC4wODV6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNEQjQ0MzdcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgZDogXCJNMjIuNTcgMjkuOTgyaC01Ljc0OWMuNTI3IDAgLjk4Ny0uMjgyIDEuMjMzLS43TDI1Ljg1NyAxNiAyMC45MyA3LjYxbDUuNzQ4LjAwMWMuNDkyIDAgLjk3LjI1MSAxLjIzMi43bDMuNjk4IDYuMjkxYy40OS44MzcuNTI2IDEuOSAwIDIuNzk3bC02LjU3MiAxMS4xODVhMi44NTMgMi44NTMgMCAwMS0yLjQ2NCAxLjM5OHptLS43MS0yLjc5NmMwIC4zODYuMzE4LjcuNzEuN2EuNzA1LjcwNSAwIDAwLjcxMi0uN2MwLS4zODYtLjMxOC0uNy0uNzExLS43YS43MDUuNzA1IDAgMDAtLjcxMi43em02LjkyNy0xMC41OGMuMzQuMTkzLjc3NS4wNzguOTcxLS4yNTZhLjY5Mi42OTIgMCAwMC0uMjYtLjk1NS43MTguNzE4IDAgMDAtLjk3Mi4yNTYuNjkyLjY5MiAwIDAwLjI2Ljk1NXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzQyODVGNFwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0yNS4wMzYgMy40MTZsMi44NzMgNC44OTRhMS40MjcgMS40MjcgMCAwMC0xLjIzMi0uNjk5SDExLjA3MWwtNC45MjggOC4zODgtMi44NzQtNC44OTJhMS4zNzcgMS4zNzcgMCAwMTAtMS4zOTlsMy42OTYtNi4yOTJhMi44NTMgMi44NTMgMCAwMTIuNDY0LTEuMzk4aDEzLjE0M2MuOTgyIDAgMS45MzcuNTAyIDIuNDY0IDEuMzk4ek0xMC4xNCA0LjgxNGMwLS4zODYtLjMxOC0uNy0uNzEtLjdhLjcwNS43MDUgMCAwMC0uNzEyLjdjMCAuMzg2LjMxOC43LjcxMS43YS43MDUuNzA1IDAgMDAuNzExLS43em0xMi43ODcuNjA2YS42OTIuNjkyIDAgMDAuMjYtLjk1NS43MTguNzE4IDAgMDAtLjk3MS0uMjU2LjY5Mi42OTIgMCAwMC0uMjYuOTU1LjcxOC43MTggMCAwMC45NzEuMjU2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjRCNDAwXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTS4zOTQgMTQuNjAxbDIuODc1LTQuODkzYy0uMjYzLjQ0OS0uMjQ1Ljk4IDAgMS4zOTlMMTEuMDcgMjQuMzloOS44NTdsLTIuODc0IDQuODkyYy0uMjQ2LjQxOC0uNzA2LjctMS4yMzMuN0g5LjQyOGEyLjg1NCAyLjg1NCAwIDAxLTIuNDY0LTEuMzk4TC4zOTQgMTcuMzk4YTIuNzU0IDIuNzU0IDAgMDEwLTIuNzk3em0yLjgyLjc5M2EuNzE4LjcxOCAwIDAwLS45NzIuMjU2LjY5My42OTMgMCAwMC4yNi45NTVjLjM0LjE5My43NzUuMDc4Ljk3MS0uMjU2YS42OTIuNjkyIDAgMDAtLjI2LS45NTV6TTkuMDcyIDI2LjU4YS42OTIuNjkyIDAgMDAtLjI2Ljk1NS43MTguNzE4IDAgMDAuOTcxLjI1Ni42OTIuNjkyIDAgMDAuMjYtLjk1NS43MTguNzE4IDAgMDAtLjk3MS0uMjU2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDAwXCIsXG4gICAgZDogXCJNMTguMDU0IDI5LjI4MmwyLjg3NS00Ljg5MkgxNy45NmwtMS4xMzggNS41OTFjLjUyNiAwIC45ODYtLjI4IDEuMjMyLS42OTlNMjYuNjc4IDcuNjExaC01Ljc0OWwxLjQ4NCAyLjUyN0wyNy45MSA4LjMxYTEuNDI3IDEuNDI3IDAgMDAtMS4yMzItLjdcIixcbiAgICBvcGFjaXR5OiAwLjFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBvcGFjaXR5OiAwLjEsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgyLjk5NCA5LjYwOSlcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTS4yNzUgMS40OThMMy4xNSA2LjM5MWwxLjQ4NS0yLjUyN0wuMjc1LjFjLS4yNjMuNDQ4LS4yNDUuOTggMCAxLjM5OFwiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIilcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQ0NDXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTExLjA3MSAyNC4zOUw2LjE0MyAxNmw0LjkyOC04LjM5aDkuODU4TDI1Ljg1NyAxNmwtNC45MjggOC4zOUgxMS4wN3pNMjAuMjY4IDE2YzAtMi4zMTctMS45MS00LjE5NC00LjI2OC00LjE5NC0yLjM1NyAwLTQuMjY4IDEuODc3LTQuMjY4IDQuMTk0IDAgMi4zMTYgMS45MSA0LjE5NCA0LjI2OCA0LjE5NCAyLjM1NyAwIDQuMjY4LTEuODc4IDQuMjY4LTQuMTk0elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0djcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0djcE1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0djcE1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4yNTYgMTUuOTgyYzAtMi4zMTYtMS45MS00LjE5NC00LjI2OC00LjE5NC0yLjM1NyAwLTQuMjY4IDEuODc4LTQuMjY4IDQuMTk0IDAgMi4zMTcgMS45MTEgNC4xOTUgNC4yNjggNC4xOTUgMi4zNTcgMCA0LjI2OC0xLjg3OCA0LjI2OC00LjE5NVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkuODcgMTYuNTQzYS44NjIuODYyIDAgMDEtMS4xNjcuMzA4LjgzMi44MzIgMCAwMS0uMzEyLTEuMTQ3Ljg2Mi44NjIgMCAwMTEuMTY3LS4zMDguODMyLjgzMiAwIDAxLjMxMiAxLjE0N00yMi41NiAyOC4xNWEuODQ3Ljg0NyAwIDAxLS44NTUtLjg0YzAtLjQ2NC4zODMtLjg0Ljg1NS0uODRzLjg1NC4zNzYuODU0Ljg0YzAgLjQ2NC0uMzgyLjg0LS44NTQuODRtLTEyLjcxNS0uMTEzYS44NjMuODYzIDAgMDEtMS4xNjctLjMwOC44MzIuODMyIDAgMDEuMzEyLTEuMTQ3Ljg2Mi44NjIgMCAwMTEuMTY3LjMwOC44MzIuODMyIDAgMDEtLjMxMiAxLjE0N00zLjU4NiAxNi41NDJhLjg2My44NjMgMCAwMS0xLjE2Ny4zMDguODMyLjgzMiAwIDAxLS4zMTMtMS4xNDcuODYyLjg2MiAwIDAxMS4xNjctLjMwOC44MzIuODMyIDAgMDEuMzEzIDEuMTQ3TTIyLjk4NyA1LjY2NWEuODYyLjg2MiAwIDAxLTEuMTY3LS4zMDguODMyLjgzMiAwIDAxLjMxMi0xLjE0Ny44NjMuODYzIDAgMDExLjE2OC4zMDguODMyLjgzMiAwIDAxLS4zMTMgMS4xNDdtLTEzLjU3LjExMmEuODQ3Ljg0NyAwIDAxLS44NTQtLjg0YzAtLjQ2NC4zODItLjg0Ljg1NC0uODRzLjg1NS4zNzYuODU1Ljg0YzAgLjQ2NC0uMzgzLjg0LS44NTUuODRtMjIuMTc4IDguNzk3bC0zLjY5Ny02LjI5MmMtLjAxNC0uMDIzLS4wMy0uMDQzLS4wNDUtLjA2NWwtMi44My00LjgxOEEyLjg1NCAyLjg1NCAwIDAwMjIuNTYgMkg5LjQxN2EyLjg1MyAyLjg1MyAwIDAwLTIuNDY0IDEuMzk4TDMuMjU3IDkuNjlsMy4yODQgNS41OSA0LjUxOS03LjY5aDE1LjYwNWMuNDkxIDAgLjk2OS4yNTEgMS4yMzIuNjk5aC02LjU2NWw0LjUxMyA3LjY4Mi00LjkzNSA4LjQtMi44NyA0Ljg4M2ExLjQyNiAxLjQyNiAwIDAxLTEuMjMuNjk5bDMuMjc5LTUuNTgyaC05LjAzbC00LjU0NC03LjczOC0uMzg0LS42NTMtMi44NzQtNC44OTNhMS4zNzcgMS4zNzcgMCAwMS0uMDAzLTEuMzkxTC4zODIgMTQuNTg0YTIuNzU0IDIuNzU0IDAgMDAwIDIuNzk2bDYuNTcgMTEuMTg2YTIuODU0IDIuODU0IDAgMDAyLjQ2NSAxLjM5OGg3LjM5MmMuMDU0IDAgLjEwNy0uMDA1LjE2LS4wMTFoNS41OWEyLjg1MyAyLjg1MyAwIDAwMi40NjQtMS4zOTdsNi41NzItMTEuMTg2Yy41MjYtLjg5Ni40OS0xLjk2IDAtMi43OTZcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0djcE1vbm87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29HaXRodWIgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0dpdGh1YihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBDNy4xNjQgMCAwIDcuMzQzIDAgMTYuNGMwIDcuMjQ4IDQuNTg0IDEzLjM5NCAxMC45NDIgMTUuNTYyLjguMTUgMS4wOTItLjM1NiAxLjA5Mi0uNzg5IDAtLjM5LS4wMTQtMS42ODQtLjAyMi0zLjA1My00LjQ1Ljk5MS01LjM5LTEuOTM0LTUuMzktMS45MzQtLjcyOC0xLjg5NC0xLjc3Ni0yLjM5OC0xLjc3Ni0yLjM5OC0xLjQ1NC0xLjAxNy4xMS0uOTk3LjExLS45OTcgMS42MDYuMTE0IDIuNDUyIDEuNjkgMi40NTIgMS42OSAxLjQyOCAyLjUwNiAzLjc0NiAxLjc4MSA0LjY1NiAxLjM2LjE0Ni0xLjA1Ni41Ni0xLjc4IDEuMDE2LTIuMTktMy41NTItLjQxNC03LjI4OC0xLjgyMS03LjI4OC04LjEwNSAwLTEuNzkyLjYyNC0zLjI1NCAxLjY0Ni00LjQwMi0uMTY0LS40MTYtLjcxNC0yLjA4NS4xNTgtNC4zNDIgMCAwIDEuMzQxLS40NCA0LjQgMS42ODFBMTQuODgyIDE0Ljg4MiAwIDAxMTYgNy45MzJjMS4zNi4wMDYgMi43MjguMTg4IDQuMDA2LjU1MyAzLjA1My0yLjEyNCA0LjM5Ni0xLjY4MSA0LjM5Ni0xLjY4MS44NzUgMi4yNTkuMzI1IDMuOTI2LjE2IDQuMzQgMS4wMjYgMS4xNDggMS42NDUgMi42MSAxLjY0NSA0LjQwMiAwIDYuMy0zLjc0MiA3LjY4Ny03LjMwNyA4LjA5NC41NzcuNTA4IDEuMDg2IDEuNTA1IDEuMDg2IDMuMDM1IDAgMi4xOTItLjAyMSAzLjk2LS4wMjEgNC41IDAgLjQzNy4yOS45NDcgMS4xMDEuNzg3QzI3LjQyIDI5Ljc5IDMyIDIzLjY0NCAzMiAxNi40IDMyIDcuMzQzIDI0LjgzNiAwIDE2IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HaXRodWI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29HbWFpbCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR21haWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTY1QTREXCIsXG4gICAgZDogXCJNMjkuMTYyIDQuMTQ5Yy4yOS0uMTc1LjU4OC0uMDc4Ljg3MyAwYTIuNjE2IDIuNjE2IDAgMDExLjkwNyAyLjQ3NmMuMDA2LjI5LS4wMDcuNTgxLS4wMDcuODY2LS4wODQgMC0uMTM1LjA1Mi0uMi4wOTctLjgxNS41ODItMS42NDIgMS4xNjQtMi40NSAxLjc1Mi0uMzMuMjM5LS42OTIuNDI2LS45Ny43My0uMTE2IDAtLjIuMDc4LS4yODQuMTM2LTIuNjkgMS44NTUtNS4zNzkgMy43MDQtOC4wNjIgNS41Ni0xLjMzMS45MTgtMi42NjMgMS44NDktMy45OTUgMi43NzNoLS4xMWMtLjA1OC0uMDQ1LS4xMS0uMTAzLS4xNjgtLjE0Mkw1Ljg2MyAxMS41NWMtLjY3Mi0uNDY2LTEuMzQ0LS45MzgtMi4wMTctMS40MDMtLjA3Ny0uMDUyLS4xNDgtLjE2Mi0uMjQ1LS4xMDQtLjA5LjA1Mi0uMDMzLjE3NS0uMDQ1LjI3Mi0uMDA3LjAzMiAwIC4wNjUgMCAuMDk3djE2LjE5NGMwIC4xMTYuMDA2LjI0LjAxMi4zNTUgMCAuMDY1LS4wMDYuMTIzLS4wMDYuMTg4LTEuMjI4LjE0OS0yLjM0Ny0uMDItMy4xMTYtMS4xMzFhMi4zODEgMi4zODEgMCAwMS0uNDQtMS4zNjRjMC02LjAzMi0uMDA2LTEyLjA1Ny4wMDctMTguMDg5IDAtMS4yMjguOTk1LTIuMzE0IDIuMjE3LTIuNDg4LjE5NC0uMDI2LjM4OC0uMDUyLjU1Ni4wNzcuMDQuMDM5LjA3MS4wNzguMTE3LjExIDQuMjczIDMuMTY4IDguNTQ2IDYuMzM1IDEyLjgxOSA5LjUxLjE2OC4xMjIuMjc4LjExNi40NDYtLjAwNyAzLjQxMy0yLjUyMSA2LjgzMy01LjAzNiAxMC4yNDctNy41NS45MDUtLjY5MiAxLjgyMy0xLjM4NCAyLjc0Ny0yLjA3elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRjZGNEVDXCIsXG4gICAgZDogXCJNMjkuMTYyIDQuMTQ5Yy0uOTI0LjY4NS0xLjg0MiAxLjM3Ny0yLjc2NyAyLjA2Mi0zLjQxMyAyLjUyMS02LjgzMyA1LjAzLTEwLjI0NiA3LjU1LS4xNjguMTIzLS4yNzIuMTMtLjQ0Ni4wMDctNC4yNjctMy4xNzQtOC41NC02LjMzNS0xMi44MTMtOS41MS0uMDQ2LS4wMzItLjA3OC0uMDctLjExNy0uMTEuMDc4LS4xMjkuMjE0LS4wODMuMzI0LS4wODNoMjUuNzQyYy4xMSAwIC4yMzktLjA0Ni4zMjMuMDg0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRTZFM0Q2XCIsXG4gICAgZDogXCJNMy41NTYgMjYuOTVhNi41MzMgNi41MzMgMCAwMS0uMDEzLS4zNTZWMTAuNGMwLS4wMzItLjAwNy0uMDY1IDAtLjA5Ny4wMTMtLjA5LS4wNDYtLjIxMy4wNDUtLjI3MS4wOTctLjA1OS4xNzQuMDUxLjI0Ni4xMDMuNjcyLjQ2NSAxLjM0NC45MzcgMi4wMTcgMS40MDNsOS44MzIgNi44NDZjLjA1OC4wNDUuMTE3LjA5Ny4xNjguMTQyLS4wMjYuMDI2LS4wNTguMDQ1LS4wODQuMDcxbC0uMDY0LjA2NWMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjRsLS4wNjQuMDY1Yy0uMDA3LjAxMy0uMDIuMDItLjAyNi4wMzIuMDEzLS4wMDYuMDItLjAxOS4wMzItLjAyNWwuMDY1LS4wNjVjLjA1MiAwIC4xMDMtLjAxMy4xMy0uMDY1LjAxOC0uMDIuMDQ0LS4wNDUuMDY0LS4wNjQuMDY0IDAgLjEyOS0uMDA3LjE5NC0uMDA3Ljg5OC42MjcgMS44MDMgMS4yNDggMi43MDIgMS44NzUgMi42NzYgMS44NTUgNS4zNTMgMy43MDQgOC4wMjMgNS41NzIuNDc4LjMzNyAxLjAwMi42MjggMS40MjggMS4wMzUtLjExNi4xMS0uMjU4LjAzOS0uMzg4LjA1OC4wMDctLjE0OS0uMTIyLS4xODgtLjIyLS4yNTItLjQ5LS4zNDMtLjk5NS0uNjcyLTEuNDczLTEuMDI4LS44MDItLjU4OC0xLjYxNy0xLjE1LTIuNDMxLTEuNzItLjY3OS0uNDcyLTEuMzUxLS45NjMtMi4wNS0xLjQwOS0uNjA3LS4zODgtMS4xNy0uODUzLTEuNzc3LTEuMjQ4LS42ODUtLjQ0LTEuMzMyLS45My0yLjAxLTEuMzc3LS41NjMtLjM2OC0xLjExMy0uNzYyLTEuNjYyLTEuMTUtLjExLS4wNzgtLjIwNy0uMTEtLjMyMy0uMDMzLS4yMzMuMTY4LS41My4yNzgtLjcyNC40Ni0uNTU2LjUxLTEuMjM1Ljg0LTEuODE3IDEuMzA1LS43NDMuNTg5LTEuNTQ1IDEuMTEyLTIuMzQgMS42MzYtMS4zMTkuODczLTIuNTk5IDEuODE2LTMuOTExIDIuNjk2YTQzLjY5NyA0My42OTcgMCAwMC0yLjMwOCAxLjYyOWMtLjIwNy4xNTUtLjQ4NS4yMjYtLjYxNC40ODUtLjEzLS4wMTMtLjI3Mi4wMzgtLjM5NS0uMDQ2IDIuMzE1LTEuNjE2IDQuNjMtMy4yMjYgNi45MzctNC44NDIuMzA0LS4yMTMuNjQ2LS4zODEuODk5LS42NjYuMDQ1LS4wMTMuMTAzLS4wMTkuMDk3LS4wODQgMC0uMDA2LS4wMTMtLjAyLS4wMi0uMDItLjA2NS0uMDA2LS4wNzcuMDQ2LS4wOS4wOTEtLjIzMy4wMTMtLjM3NS4xOTQtLjU1LjMxLTIuNDYzIDEuNy00LjkzMiAzLjM4OC03LjM5NSA1LjA3NXptMTEuMTE5LTcuNTY0bC4wNjQtLjA2NWMuMDUyIDAgLjEwNC0uMDEzLjEzLS4wNjRsLjA2NC0uMDY1Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMTktLjAyLjAyNS0uMDMyLS4wMTIuMDA2LS4wMTkuMDItLjAzMi4wMjYtLjA1MiAwLS4xMDMuMDEzLS4xMy4wNjRsLS4wNjQuMDY1Yy0uMDUxIDAtLjEwMy4wMTMtLjEzLjA2NS0uMDE4LjAyNi0uMDM4LjA0NS0uMDU3LjA3LS4wMTMuMDA3LS4wMjYuMDE0LS4wMzMuMDI3LjAxMy0uMDA3LjAyNi0uMDEzLjAzMy0uMDI2em0tLjg0LjU3NWMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjUtLjAzOS4wMDYtLjA5LjAwNi0uMDk3LjA2NSAwIC4wMTIuMDI2LjAzOC4wMzkuMDM4LjA1Mi0uMDA2LjA1OC0uMDUxLjA2NS0uMDkuMDUxLS4wMDcuMDk2LS4wMTMuMTIyLS4wNzhhLjMxMS4zMTEgMCAwMC4wNzEtLjA1OGMuMDUyIDAgLjEwNC0uMDEzLjEzLS4wNjVsLjA2NC0uMDY0Yy4wNTIgMCAuMTA0LS4wMTMuMTMtLjA2NS4wMDYtLjAxMy4wMi0uMDIuMDI2LS4wMzItLjAxMy4wMDYtLjAyLjAyLS4wMzMuMDI2LS4wNTEgMC0uMTAzLjAxMy0uMTMuMDY0LS4wMTguMDItLjA0NC4wNDYtLjA2NC4wNjUtLjA1MSAwLS4xMDMuMDEzLS4xMjkuMDY1bC0uMDY1LjA2NHptLS44NDEuNTg4Yy0uMDUyIDAtLjEwMy4wMTMtLjEzLjA2NS0uMDUxLjAwNy0uMTAzLjAxMy0uMDk2LjA4NCAwIC4wMDcuMDEzLjAyLjAyLjAyLjA3LjAwNi4wNzctLjA0Ni4wODMtLjA5Ny4wNTItLjAwNy4wOTctLjAyLjEyMy0uMDcyLjAyNi0uMDEyLjA0NS0uMDM4LjA3MS0uMDU4LjA1MiAwIC4xMDMtLjAxMy4xMy0uMDY0bC4wNjQtLjA2NWMuMDUyIDAgLjEwMy0uMDEzLjEzLS4wNjUuMDA2LS4wMTMuMDE5LS4wMTkuMDI1LS4wMzItLjAxMy4wMDctLjAyLjAyLS4wMzIuMDI2LS4wNTIgMC0uMTA0LjAxMy0uMTMuMDY1bC0uMDY0LjA2NGMtLjA1MiAwLS4xMDQuMDEzLS4xMy4wNjVhLjMwNi4zMDYgMCAwMC0uMDY0LjA2NHptLS42NDcuNDZjLjA1Mi0uMDA3LjEwNC0uMDEzLjA5Ny0uMDg1IDAtLjAwNi0uMDEyLS4wMTktLjAxOS0uMDE5LS4wNzEtLjAwNi0uMDc4LjA0NS0uMDg0LjA5Ny0uMDUyIDAtLjA5Ny4wMTMtLjEzLjA2NWEuMjIzLjIyMyAwIDAwLS4xOTMuMTI5Yy0uMDQ1LjAxMy0uMTA0LjAxMy0uMDk3LjA4NCAwIC4wMDYuMDEzLjAyLjAyLjAyLjA2NC4wMDYuMDc3LS4wNDYuMDgzLS4wOTguMDkgMCAuMTgxLS4wMDYuMTk0LS4xMjkuMDU4LS4wMDYuMTA0LS4wMi4xMy0uMDY1em0yLjEyOC0xLjUzM2MtLjAwOC4wMjctLjAyNS4wNTQtLjAzMy4wNzIuMDI1LjAwOS4wNS4wMzUuMDY3LjAyNy4wMTYtLjAxLjAyNS0uMDQ1LjAzMy0uMDcyYS41NS41NSAwIDAxLS4wNjctLjAyN3ptLTEuODEgMS4zNWMtLjAwOC0uMDI0LS4wMTUtLjA1Ni0uMDMtLjA1Ni0uMDE1LS4wMDgtLjA1Mi4wMDgtLjA2LjAyNC0uMDIyLjAzMy0uMDA3LjA3NC4wMy4wNzQuMDIyIDAgLjAzNy0uMDI1LjA2LS4wNDF6TTE1LjM1NSAxOWEuMTg1LjE4NSAwIDAxLjAzNC0uMDcyYy0uMDI1LS4wMDktLjA1LS4wMzUtLjA2Ny0uMDI2LS4wMTYuMDA4LS4wMjUuMDQ0LS4wMzMuMDcuMDE3LjAxLjA0Mi4wMTkuMDY3LjAyOHptLTMuNTI2IDIuNDAyYy0uMDE2LS4wMjQtLjAzMS0uMDUtLjA0LS4wNTctLjAxNSAwLS4wNTUuMDE2LS4wNTUuMDMzLS4wMTYuMDQuMDA4LjA3NC4wNDguMDY1LjAxNiAwIC4wMzEtLjAyNC4wNDctLjA0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQjZCNUFDXCIsXG4gICAgZDogXCJNMjguMTIxIDI3LjA4NWMtLjQyNi0uNDEzLS45NDQtLjY5OC0xLjQyOC0xLjAzNC0yLjY3LTEuODYyLTUuMzQ3LTMuNzE3LTguMDIzLTUuNTczLS44OTktLjYyNy0xLjgwNC0xLjI0Ny0yLjcwMi0xLjg3NCAwLS4wMi0uMDA3LS4wNDYtLjAwNy0uMDY1bDMuOTk1LTIuNzczYzIuNjktMS44NTYgNS4zNzktMy43MDUgOC4wNjItNS41Ni4wODQtLjA1OC4xNjgtLjEzNi4yODQtLjEzNnYxNy4wNzNjLS4wNTEtLjAxOS0uMTE2LS4wMzgtLjE4LS4wNTh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNkUzRDZcIixcbiAgICBkOiBcIk00LjA3MyAyNy4xNDNjLjEyMy0uMjU4LjQwNy0uMzMuNjE0LS40ODRhNDcuODQ1IDQ3Ljg0NSAwIDAxMi4zMDgtMS42M2MxLjMxMi0uODg1IDIuNTkyLTEuODIzIDMuOTEtMi42OTUuNzk2LS41MjQgMS41OTgtMS4wNDggMi4zNDEtMS42MzYuNTg4LS40NjUgMS4yNi0uNzk1IDEuODE3LTEuMzA2LjItLjE4LjQ5LS4yOS43MjQtLjQ1OS4xMS0uMDg0LjIwNy0uMDUxLjMyMy4wMzMuNTUuMzg4IDEuMDk5Ljc4MiAxLjY2MSAxLjE1LjY4LjQ0NiAxLjMyNi45NDQgMi4wMSAxLjM3Ny42MDguMzg4IDEuMTcuODU0IDEuNzc5IDEuMjQ4LjY5OC40NDYgMS4zNy45MzcgMi4wNDkgMS40MS44MTQuNTY4IDEuNjM1IDEuMTMgMi40MyAxLjcxOS40ODUuMzU1Ljk4My42ODUgMS40NzUgMS4wMjguMDkuMDY0LjIyNi4xMDMuMjIuMjUyLTcuODg4LS4wMDctMTUuNzc0LS4wMDctMjMuNjYxLS4wMDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCMTM5MkZcIixcbiAgICBkOiBcIk0yOC4zMTUgMjcuMTQzVjEwLjA3Yy4yNzgtLjMwNC42NC0uNDkxLjk3LS43My44MTQtLjU5NSAxLjYzNS0xLjE3IDIuNDUtMS43NTIuMDU4LS4wNDUuMTE2LS4wOTcuMi0uMDk3LjAwNy4xMS4wMTMuMjEzLjAxMy4zMjMgMCA1LjUwMiAwIDExLjAxLjAwNyAxNi41MSAwIC4zNzYtLjAxMy43NS0uMTA0IDEuMTI2LS4xNjEuNjkxLS41NzUgMS4xNy0xLjI0NyAxLjQwOS0uNzQ0LjI1OS0xLjUxMy4zMy0yLjI4OS4yODR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNCRUJEQjNcIixcbiAgICBkOiBcIk0xMS41MTQgMjEuNTljLS4yNTMuMjg1LS41OTUuNDUzLS45LjY2NmEyNjUwLjA3OCAyNjUwLjA3OCAwIDAxLTYuOTM2IDQuODQybC0uMTI5LjAzOWMwLS4wNjUuMDA3LS4xMjMuMDA3LS4xODggMi40Ny0xLjY4NyA0LjkzMi0zLjM3NCA3LjQwMi01LjA2MS4xNzQtLjExNy4zMS0uMzA0LjU1LS4zMWwuMDA2LjAxMnpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29HbWFpbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0dvbGFuZyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR29sYW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMTUgMTcuMzAxYy4wNDUuOTQ2IDEgLjUgMS40MTYuMjEuNDE1LS4yOS41LS4wNDUuNTYtLjZhOS4wNyA5LjA3IDAgMDAuMDQ1LTEuMDkgMi42NzYgMi42NzYgMCAwMC0xLjc4Ni40NTVjLS4yNi4xOS0uNzQ1Ljc5LS4yNCAxXCIsXG4gICAgZmlsbDogXCIjRjZEMkEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00LjgwNSAxNy45ODdhLjYuNiAwIDAxLS4yNy0uMDYuNjIuNjIgMCAwMS0uMzEtLjU1QS40MS40MSAwIDAxNCAxNy4wNWExLjE1IDEuMTUgMCAwMS41LS44MyAyLjc1MiAyLjc1MiAwIDAxMS44NDYtLjQ3aC4wNzV2LjA3NGMuMDEuMjg2LjAwMy41NzItLjAyNS44NTZ2LjI1Yy0uMDI1LjM5LS4xLjQ1LS4zLjVhMS4xMTggMS4xMTggMCAwMC0uMy4xNDVjLS4yODguMjIzLS42My4zNjQtLjk5LjQxem0xLjI3MS0yLjA2N2EyLjUwMiAyLjUwMiAwIDAwLTEuNDcuNDUgMSAxIDAgMDAtLjQyLjY3MS4yNS4yNSAwIDAwLjE3LjIwNWguMDV2LjA1NWEuNS41IDAgMDAuMjEuNDUgMS4zMSAxLjMxIDAgMDAxLjA2NS0uMzEgMS4yOSAxLjI5IDAgMDEuMzQtLjE3Yy4xMy0uMDQ1LjE2LS4wNTUuMTgtLjM2NXYtLjI1Yy4wMjQtLjI1LjAzNC0uNS4wMy0uNzVoLS4xNTV2LjAxNHpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuMzE1IDE3LjNhLjc0NS43NDUgMCAwMC4zNzYtLjIxelwiLFxuICAgIGZpbGw6IFwiI0M3QjE5OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMTUgMTcuMzkxYS4wOTIuMDkyIDAgMTEtLjA1NS0uMTc1aC4wNmEuNTQuNTQgMCAwMC4yNzUtLjE2LjA5Mi4wOTIgMCAwMS4wNi0uMDM1LjA5LjA5IDAgMDEuMDY4LjAxNy4wOS4wOSAwIDAxLjAzNS4wNi4wOTEuMDkxIDAgMDEtLjAxOC4wNjguNy43IDAgMDEtLjM2LjIyaC0uMDY1di4wMDV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjQ5NiA2LjA1QzIuODggNS4wNDkgNS41NzEuNDMgOC40OTggMi4zMjJMNi40OTYgNi4wNXpcIixcbiAgICBmaWxsOiBcIiM3NENERERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNTQxIDYuMTU0aC0uMDdjLTEuMDMtLjI5LTEuNjY2LS45LTEuNzg2LTEuNzE2YTIuMzk2IDIuMzk2IDAgMDExLjExNi0yLjI2IDIuNDIxIDIuNDIxIDAgMDEyLjcyMi4wOWwuMDcuMDQ0TDYuNTQgNi4xNTR6bS41LTQuMTkyYy0uNDEgMC0uODExLjEyLTEuMTU1LjM0NUEyLjIxMSAyLjIxMSAwIDAwNC44NSA0LjM5M2MuMTEuNzI2LjY3IDEuMjc2IDEuNTg2IDEuNTUxbDEuOTAxLTMuNTg3YTIuNTAxIDIuNTAxIDAgMDAtMS4yOC0uMzhsLS4wMTUtLjAxNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyLjU2NiAxLjk3N2MyLjg2Mi0yLjAwMSA1LjQ0OCAyLjUwMiAyLjEyMSAzLjY2N2wtMi4xMjEtMy42Njd6XCIsXG4gICAgZmlsbDogXCIjNzRDREREXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNC42NDcgNS43NTRsLTIuMjAxLTMuODAyLjA2NS0uMDQ1YTIuMzYyIDIuMzYyIDAgMDEyLjYyNi0uMjIgMi40MjcgMi40MjcgMCAwMTEuMTk2IDIuMjQxYy0uMDUuNS0uMzIgMS4zNTYtMS42MTYgMS44MDFsLS4wNy4wMjV6bS0xLjk2MS0zLjc1MmwyLjA0MSAzLjUzMmExLjk1NiAxLjk1NiAwIDAwMS40MjYtMS42MiAyLjI0IDIuMjQgMCAwMC0xLjEwNi0yLjA3NyAyLjEyNiAyLjEyNiAwIDAwLTIuMzYxLjE2NXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzLjE4MSAyOC45MjhjLjcyNi40NSAyLjA1NiAxLjgxMS45NjYgMi40NzEtMS4wNDYuOTYxLTEuNjM2LTEuMDU1LTIuNTU3LTEuMzNhMi41NDkgMi41NDkgMCAwMTEuNTkxLTEuMTQxelwiLFxuICAgIGZpbGw6IFwiI0Y2RDJBMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMuNTkyIDMxLjc0NWgtLjA0Yy0uNDE2LS4wMjUtLjc1Ni0uNDMtMS4wODYtLjgxNmEyLjMzIDIuMzMgMCAwMC0uOS0uNzc1bC0uMTItLjAzNS4wNzQtLjEyNWEyLjY1NiAyLjY1NiAwIDAxMS42NDYtMS4xNzZoLjA2NWMuNDY2LjI5IDEuNDI2IDEuMTMgMS40MjEgMS44OTFhLjgzNS44MzUgMCAwMS0uNDUuNzI1LjkwNS45MDUgMCAwMS0uNjEuMzF6bS0xLjg2MS0xLjcyMWMuMzM5LjIuNjMzLjQ2Ny44NjUuNzg1LjIxOS4zNi41Ni42MjguOTYuNzU1YS43MTYuNzE2IDAgMDAuNS0uMjM1LjY2MS42NjEgMCAwMC4zNzEtLjU4YzAtLjYxLS43Ny0xLjM3Ni0xLjMwNi0xLjcyMWEyLjM1MSAyLjM1MSAwIDAwLTEuMzg2Ljk5NmgtLjAwNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0LjE0NyAzMS40OTRhLjA5LjA5IDAgMDEtLjA4LS4wNWMtLjA1My0uMTEtLjEtLjIyNC0uMTQtLjM0YTEuNSAxLjUgMCAwMC0uMzMtLjYxLjA5MS4wOTEgMCAwMS0uMDIyLS4wOTguMDkuMDkgMCAwMS4xNDctLjAzMmMuMTcyLjE4OC4zLjQxNC4zNy42Ni4wMzkuMTEuMDg0LjIxNi4xMzUuMzJhLjA5LjA5IDAgMDEtLjA0LjEybC0uMDQuMDN6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4xODkgMzAuNDY0Yy0uODU2LjEzLTEuMzM2LjktMi4wNDYgMS4yOWEuNjIuNjIgMCAwMS0xLjAwMS0uMjM1LjMyNS4zMjUgMCAwMS0uMjYtLjEyYy0uNjItMSAuNjQ1LTEuNjk2IDEuMzEtMi4xODYuOTM2LS4xOCAxLjUxMS42MTUgMS45OTcgMS4yNXpcIixcbiAgICBmaWxsOiBcIiNGNkQyQTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuNjkyIDMxLjk5NWEuNjEzLjYxMyAwIDAxLS4xNiAwIC43NC43NCAwIDAxLS40MzUtLjM3NS4zMDEuMzAxIDAgMDEtLjI0NS0uMTNjLS42LS45NDYuNDItMS42NjIgMS4wOTYtMi4xMzdsLjIzNS0uMTdjLjk0NS0uMTkgMS41NDYuNTkgMi4wMjYgMS4yMmwuMTM1LjE4MWgtLjE1YTIuNTg2IDIuNTg2IDAgMDAtMS4yNjYuNzI1Yy0uMjMuMjEyLS40ODIuNC0uNzUuNTZhMS4wMDEgMS4wMDEgMCAwMS0uNDg2LjEyNnptLS42LS41OGEuMjQ1LjI0NSAwIDAxLjEwNSAwaC4wMjVsLjA0LjA4YS41OC41OCAwIDAwLjMzNS4zMDUuNjg2LjY4NiAwIDAwLjUtLjEyYy4yNi0uMTU1LjUwMy0uMzM3LjcyNi0uNTRhMyAzIDAgMDExLjIwNi0uNzM2Yy0uNDYtLjYtMS0xLjI1LTEuNzg2LTEuMWwtLjIyNS4xNmMtLjY5LjUtMS41NDYgMS4wOS0xLjA1MSAxLjg4NWEuMTQ2LjE0NiAwIDAwLjEwNS4wN2wuMDItLjAwNXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuMTU3IDMxLjYxNGEuMDkuMDkgMCAwMS0uMDktLjEyYy4wMzctLjI0LjEzNy0uNDY2LjI5LS42NTUuMDcyLS4xLjEzNi0uMjA1LjE5LS4zMTVhLjA5LjA5IDAgMTEuMTY1LjA3NWMtLjA1OC4xMi0uMTI3LjIzNi0uMjA1LjM0NS0uMTMyLjE3LS4yMTcuMzcyLS4yNDUuNTg1YS4wOS4wOSAwIDAxLS4wNjcuMDg0LjA5LjA5IDAgMDEtLjAzOC4wMDJ6TTYuNjQ3IDQuNzhjLS41LS4yNS0uODI2LS41OTYtLjUzNi0xLjE0Ni4yOS0uNTUuNzctLjQ1NSAxLjI1MS0uMjA1bC0uNzE1IDEuMzV6bTE3LjI4NS0uNDhjLjUtLjI1LjgyNS0uNTk2LjUzNS0xLjE0Ni0uMjktLjU1LS43Ny0uNDU2LTEuMjUtLjIwNWwuNzE1IDEuMzV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNy4yMTkgMTcuMTgxYy0uMDQ1Ljk0Ni0xLjAwMS41LTEuNDE2LjIxLS40MTYtLjI5LS41LS4wNDUtLjU2LS42YTkuMDY4IDkuMDY4IDAgMDEtLjA0Ni0xLjA5IDIuNjc3IDIuNjc3IDAgMDExLjc4Ny40NTRjLjI2LjE5Ljc0NS43OS4yNCAxLjAwMVwiLFxuICAgIGZpbGw6IFwiI0Y2RDJBMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYuNzI4IDE3Ljg0NmEyLjA0NiAyLjA0NiAwIDAxLS45NTUtLjM2IDEuMTE3IDEuMTE3IDAgMDAtLjMtLjE0NWMtLjItLjA3LS4yNzUtLjEzLS4zLS41di0uMjVhNi41MTYgNi41MTYgMCAwMS0uMDI2LS44NTZ2LS4xMmguMDc2YTIuNzUxIDIuNzUxIDAgMDExLjg0Ni40NyAxLjE1IDEuMTUgMCAwMS41LjgzLjQxMi40MTIgMCAwMS0uMjI1LjMyNi42Mi42MiAwIDAxLS4zMS41NS42MDUuNjA1IDAgMDEtLjMwNi4wNTV6bS0xLjQ1Ni0yLjA2Yy0uMDAzLjI1LjAwNy41LjAzLjc1di4yNWMwIC4zMDUuMDQ2LjMxNS4xOC4zNjUuMTIyLjA0LjIzNi4wOTcuMzQuMTdhMS4zMDcgMS4zMDcgMCAwMDEuMDY3LjMxLjUwMi41MDIgMCAwMC4yMS0uNDV2LS4wNmguMDVhLjI1LjI1IDAgMDAuMTctLjIwNSAxLjAwMiAxLjAwMiAwIDAwLS40Mi0uNjcgMi41NTIgMi41NTIgMCAwMC0xLjYyNy0uNDZ6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yNy4yMTggMTcuMTgxYS43NDYuNzQ2IDAgMDEtLjM3NS0uMTk1elwiLFxuICAgIGZpbGw6IFwiI0M3QjE5OVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjcuMjE5IDE3LjI3MWgtLjA5NWEuNy43IDAgMDEtLjM1LS4yNS4wOS4wOSAwIDAxLS4wMDctLjEwMS4wOTEuMDkxIDAgMDEuMTUyLS4wMS41NC41NCAwIDAwLjI3NS4xNmguMDZhLjEwMS4xMDEgMCAxMS0uMDM1LjIwMXpcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjQwNy4wNjZjMy42MjIgMCA3LjAwNC41IDguNzg1IDQuMDAyIDEuNTg2IDMuODk4IDEgOC4xMDUgMS4yNjYgMTIuMjIzLjIxIDMuNTM3LjY3IDcuNjI0LS45NyAxMC45MDYtMS43MTcgMy40NDItNi4wNSA0LjI5Ny05LjYwMSA0LjE4Mi0yLjc5Mi0uMS02LjE2NC0xLTcuNzQtMy41NjItMS44NTEtMy4wMDItLjk3Ni03LjQ0NC0uODQtMTAuNzcxLjE2LTMuOTQyLTEuMDcxLTcuOS4yMjUtMTEuNzYyQzcuODc3IDEuMjgyIDExLjUuMzc2IDE1LjQwMi4wNjZcIixcbiAgICBmaWxsOiBcIiM3NENERERcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1LjUwMiAzMS40OTRoLS42MmExMy4yMDIgMTMuMjAyIDAgMDEtNC4zNTgtLjg3IDYuOTY5IDYuOTY5IDAgMDEtMy40NTctMi43MzdjLTEuNTAxLTIuNDIxLTEuMjMtNS43NjMtMS04LjcxNS4wNi0uNzQuMTE0LTEuNDQ2LjE0LTIuMTA2LjAyNi0xLjQtLjAzNC0yLjgtLjE4LTQuMTkyLS4yMTEtMi41MDItLjQzMS01LjA4OS40MS03LjU5NWE2LjY0NCA2LjY0NCAwIDAxMy41MDEtNC4wNDdDMTEuMjkuNTcyIDEyLjk0LjE5IDE1LjM2NyAwYzMuNTcyLS4wMjUgNy4wOTQuNDc1IDguOTA1IDQuMDIyIDEuMTYgMi44NTIgMS4xNzYgNS45MTQgMS4xOTYgOC44NzYgMCAxLjExIDAgMi4yNTYuMDggMy4zNzcgMCAuMzQuMDQuNjg1LjA2NSAxLjAzLjIxIDMuMjQ3LjQ1IDYuOTM0LTEuMDQ2IDkuOTE2LTEuODcxIDMuNzMyLTYuNTc0IDQuMjcyLTkuMDY1IDQuMjcyek0xNS40MDcuMTU2Yy0zLjc2OC4zMi03LjQ0IDEuMTMtOC43OSA1LjE1OC0uODMxIDIuNDcxLS42MSA1LjAzOC0uNDA2IDcuNTA0LjE0NyAxLjQuMjA3IDIuODA2LjE4IDQuMjEzLS4wMjUuNjY1LS4wODUgMS4zNy0uMTQgMi4xMTYtLjIzIDIuOTIyLS41IDYuMjM5Ljk2NiA4LjYwNS42MTUgMSAyLjU5NiAzLjMzNyA3LjY3IDMuNTAyIDIuMTk2LjA4IDcuNTA0LS4xNyA5LjUwNS00LjE0MiAxLjQ3LTIuOTQyIDEuMjM2LTYuNTk5IDEuMDI2LTkuODI2IDAtLjM1LS4wNDUtLjY5NS0uMDY1LTEuMDNhNjcuNDUxIDY3LjQ1MSAwIDAxLS4wOC0zLjM1M2MwLTIuOTQxLS4wMy02LjAwMy0xLjE4MS04LjgwNUE2LjQzOCA2LjQzOCAwIDAwMjAuNDQ1Ljg0MWExNC45NiAxNC45NiAwIDAwLTUuMDM4LS42ODV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi4wNDIgNC45MjRjLjY1IDMuNzc3IDYuODI0IDIuNzgxIDUuOTM4LTEuMDMtLjc5NS0zLjQxOC02LjE1My0yLjQ3Mi01LjkzOCAxLjAzelwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguOTc5IDcuMzlhMy40NTcgMy40NTcgMCAwMS0xLjEzLS4xODUgMi43OTcgMi43OTcgMCAwMS0xLjg5Mi0yLjI2NiAyLjg4MiAyLjg4MiAwIDAxLjc4LTIuMjIyIDMuNDA3IDMuNDA3IDAgMDEyLjAwMi0xIDMuMjAyIDMuMjAyIDAgMDEyLjAzMS4zNSAyLjcyNyAyLjcyNyAwIDAxMS4yOTYgMS44MDYgMi42NDMgMi42NDMgMCAwMS0uNzcgMi42ODIgMy41MDIgMy41MDIgMCAwMS0yLjMxNy44MzV6bS0yLjg0Ny0yLjQ3NmEyLjYyNiAyLjYyNiAwIDAwMS43NzYgMi4xMjYgMy40MTcgMy40MTcgMCAwMDMuMjc3LS42MiAyLjUwMiAyLjUwMiAwIDAwLjcxNi0yLjUwMiAyLjY3MiAyLjY3MiAwIDAwLTMuMTMyLTIuMDMxIDIuODg3IDIuODg3IDAgMDAtMi42MzcgMy4wMjd6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjY2MyA1LjUzOWMuODQgMy4yODcgNi4xMDMgMi40NDEgNS45MDgtLjg1NS0uMjM1LTMuOTUzLTYuNzE0LTMuMjA3LTUuOTA4Ljg1NXpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjQ3NCA3LjcwNWEzLjIzMiAzLjIzMiAwIDAxLTEuNTM2LS4zNzUgMi43MjcgMi43MjcgMCAwMS0xLjM1NS0xLjc3NiAyLjc1NyAyLjc1NyAwIDAxLjk0LTIuODI3IDMuNTUyIDMuNTUyIDAgMDEzLjUzMi0uNDUgMi42NzIgMi42NzIgMCAwMTEuNjAxIDIuNDAyYy4xMDUgMS43NS0xLjI4NiAyLjc3MS0yLjYxNyAzLjAwMWEzLjY1NyAzLjY1NyAwIDAxLS41NjUuMDI1ek04Ljc2MyA1LjUyQTIuNzMyIDIuNzMyIDAgMDAxMi4wMyA3LjUyYzEuMjYtLjIgMi41NzYtMS4xNiAyLjQ3Ni0yLjgwNmEyLjUwMSAyLjUwMSAwIDAwLTEuNS0yLjI2MiAzLjM3NyAzLjM3NyAwIDAwLTMuMzU4LjQzIDIuNTk3IDIuNTk3IDAgMDAtLjg4NSAyLjYzN3pcIixcbiAgICBmaWxsOiBcIiMwMTAxMDFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2Ljc2NyA5LjQ4MWMuMDQ5LjUyMS4wNDkgMS4wNDYgMCAxLjU2NmExIDEgMCAwMS0uNTg1LjM2Ljg2MS44NjEgMCAwMS0uNjU1LS41Yy0uMDMyLS41OS0uMDE3LTEuMTgzLjA0NS0xLjc3bDEuMTk1LjM0NHpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjIzNyAxMS40ODNoLS4wMjVhLjk0NC45NDQgMCAwMS0uNzI1LS41NjYgNS45NSA1Ljk1IDAgMDEwLTEuMjE1YzAtLjE4NS4wMy0uMzguMDM1LS41N3YtLjE1bDEuMzUuNDE0di4wODVjMCAuMTYgMCAuMzMuMDI2LjUuMDQ1LjM1OC4wNDUuNzIgMCAxLjA3NnYuMDI1YS43NS43NSAwIDAxLS40NzYuMzRsLS4xNTUuMDZoLS4wM3ptLS41OC0uNjNhLjc2Ni43NjYgMCAwMC41Ni40NDVsLjE0LS4wNTZhLjYuNiAwIDAwLjM2Ni0uMjZjLjA0LS4zMzIuMDQtLjY2OCAwLTEgMC0uMTU1IDAtLjMwNS0uMDI2LS40NTVsLTEtLjMwNmMwIC4xNTUgMCAuMzEtLjAzLjQ2LS4wNDQuMzg4LS4wNS43NzgtLjAxNSAxLjE2NmwuMDA1LjAwNXpNMTAuMTE0IDUuOTY0Yy40OTEgMCAuODktLjQzMi44OS0uOTY1IDAtLjUzNC0uMzk5LS45NjYtLjg5LS45NjYtLjQ5MiAwLS44OS40MzItLjg5Ljk2NiAwIC41MzMuMzk4Ljk2NS44OS45NjV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC41MTkgNS40NjRjLjExNiAwIC4yMS0uMTEuMjEtLjI0NXMtLjA5NC0uMjQ1LS4yMS0uMjQ1Yy0uMTE2IDAtLjIxLjExLS4yMS4yNDVzLjA5NC4yNDUuMjEuMjQ1elwiLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcuNTY4IDUuNzI0Yy40ODMgMCAuODc1LS40MzIuODc1LS45NjUgMC0uNTMzLS4zOTItLjk2Ni0uODc1LS45NjYtLjQ4NCAwLS44NzYuNDMzLS44NzYuOTY2IDAgLjUzMy4zOTIuOTY1Ljg3Ni45NjV6XCIsXG4gICAgZmlsbDogXCIjMDEwMTAxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy45NjMgNS4yMjRjLjExNCAwIC4yMDYtLjExLjIwNi0uMjQ1IDAtLjEzNi0uMDkyLS4yNDUtLjIwNi0uMjQ1LS4xMTMgMC0uMjA1LjExLS4yMDUuMjQ1cy4wOTIuMjQ1LjIwNS4yNDV6TTE0LjI2NiA5LjQwNmMtLjM5Ljk0MS4yMTUgMi44MjIgMS4yNyAxLjQzNmExMS4xMiAxMS4xMiAwIDAxLjA0Ni0xLjc3bC0xLjMxNi4zMzR6XCIsXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC44MTIgMTEuNDI4YS41LjUgMCAwMS0uMjYtLjA3Yy0uNDI2LS4yNDYtLjY5MS0xLjI1MS0uMzktMi4wMDJ2LS4wNGwxLjUtLjM4di4xMmMwIC4xOTUgMCAuMzktLjAzNS41NzVhNS43MSA1LjcxIDAgMDAwIDEuMTgxdi4wNjVhMS4wNTYgMS4wNTYgMCAwMS0uODE1LjU1em0tLjQ5Ni0xLjk0N2MtLjIxNS41ODYtLjA0NSAxLjUwMS4zMyAxLjcxNi4yNy4xNTUuNTctLjExNS43OC0uMzg1YTYuMTI4IDYuMTI4IDAgMDEwLTEuMThjMC0uMTQ2IDAtLjMuMDMxLS40NWwtMS4xNC4zelwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuMzggNy41OTVhMS4xNDYgMS4xNDYgMCAwMC0uOTQgMS42MDFjLjUuOSAxLjYxMS0uMDggMi4zMDIgMCAuNzk1IDAgMS40NS44NCAyLjA5LjE1LjcxMS0uNzctLjMwNC0xLjUtMS4xLTEuODU2bC0yLjM1MS4xMDV6XCIsXG4gICAgZmlsbDogXCIjRjZEMkEyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy4yNjggOS43MjdhMiAyIDAgMDEtLjczLS4yMDYgMi4yMDcgMi4yMDcgMCAwMC0uNzkxLS4yMmMtLjI4NyAwLS41Ny4wNjItLjgzLjE4LS41NjEuMTk1LTEuMTk2LjQxNi0xLjU1Ny0uMjNhMS4wOCAxLjA4IDAgMDEwLTEuMDUgMS4yODEgMS4yODEgMCAwMTEuMDAxLS42ODZsMi40MDYtLjEwNWMuNTkuMjUgMS4yNjYuNzA2IDEuMzgxIDEuMjM2YS45NTUuOTU1IDAgMDEtLjg4IDEuMDh6bS0xLjUwMS0uNjA2Yy4yOTYuMDI0LjU4NC4xMDQuODUuMjM1LjQ1LjE5LjgwNi4zMzUgMS4xNjYtLjA1NWEuNjY0LjY2NCAwIDAwLjIwNS0uNjA1Yy0uMS0uNDYtLjczNS0uODgtMS4yNTYtMS4xbC0yLjMyNi4wOTRhMS4xMSAxLjExIDAgMDAtLjg1LjU5LjkwNi45MDYgMCAwMDAgLjg3NmMuMjg1LjUuNzk1LjMzNSAxLjM0LjE1LjI3NC0uMTIyLjU3LS4xODUuODctLjE4NXpcIixcbiAgICBmaWxsOiBcIiMyMzFGMjBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjI2NiA3LjU2Yy0uMDU1LTEuMjUgMi4zMzYtMS40MSAyLjYxNy0uMzYuMjggMS4wNS0yLjUwMiAxLjI5LTIuNjE3LjM2elwiLFxuICAgIGZpbGw6IFwiIzAxMDEwMVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR29sYW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvR29vZ2xlRyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvR29vZ2xlRyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19nb29nbGVfZycpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4bWxuc1hsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdhJyksXG4gICAgZDogXCJNMTUuMzE5IDMuMjc4YzAtMS4xMzEtLjEwMi0yLjIyLS4yOS0zLjI2NEgwdjYuMTcyaDguNTg3Yy0uMzcgMS45OTUtMS40OTQgMy42ODUtMy4xODQgNC44MTZ2NC4wMDRoNS4xNTdjMy4wMTctMi43NzggNC43NTgtNi44NjkgNC43NTgtMTEuNzI4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICBkOiBcIk0xNC4zNDMgMTIuOTU2YzQuMzA4IDAgNy45Mi0xLjQzIDEwLjU2LTMuODY2bC01LjE1Ny00LjAwNGMtMS40MjkuOTU4LTMuMjU2IDEuNTIzLTUuNDAzIDEuNTIzLTQuMTU2IDAtNy42NzQtMi44MDYtOC45MjgtNi41NzhILjA4NHY0LjEzNGMyLjYyNSA1LjIxNSA4LjAyMSA4Ljc5IDE0LjI1OSA4Ljc5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICBkOiBcIk03LjAyOCAxMC4yNWE5LjU5IDkuNTkgMCAwMS0uNS0zLjAzMiA5LjU5IDkuNTkgMCAwMS41LTMuMDMyVi4wNTJoLTUuMzNBMTUuOTUgMTUuOTUgMCAwMDAgNy4yMThjMCAyLjU3NS42MTcgNS4wMTIgMS42OTcgNy4xNjZsNS4zMzEtNC4xMzR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIGQ6IFwiTTE0LjM0MyA2LjM5MmMyLjM0MiAwIDQuNDQ2LjgwNSA2LjEgMi4zODZsNC41NzYtNC41NzZDMjIuMjU2IDEuNjI3IDE4LjY0NC4wNDYgMTQuMzQzLjA0NiA4LjEwNS4wNDYgMi43MDkgMy42MjIuMDgzIDguODM2bDUuMzMyIDQuMTM0YzEuMjU0LTMuNzcgNC43NzItNi41NzggOC45MjgtNi41Nzh6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDE1Ljk1NSAxMy4wODcpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdiJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0Mjg1RjRcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdiJyksIFwiKVwiKSxcbiAgICBkOiBcIk0uMDAxIDE1LjAwNmgxNS4zMThWLjAxNEguMDAxelwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMS42MTMgMTkuMDAzKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZCcpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMzRBODUzXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNLjA4NCAxMi45NTZoMjQuODE5Vi4wMzFILjA4NHpcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgOC43ODQpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdmJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQkJDMDRcIixcbiAgICBmaWxsUnVsZTogXCJub256ZXJvXCIsXG4gICAgbWFzazogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdmJyksIFwiKVwiKSxcbiAgICBkOiBcIk0wIDE0LjM4NGg3LjAyOFYuMDUySDB6XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxLjYxMylcIlxuICB9LCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2gnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdnJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0VBNDMzNVwiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2gnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTS4wODQgMTIuOTdoMjQuOTM1Vi4wNDZILjA4NHpcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvR29vZ2xlRzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0hhcHJveHkgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0hhcHJveHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGdlbmVyYXRlSWQgPSBodG1sSWRHZW5lcmF0b3IoJ2xvZ29faGFwcm94eScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGNsaXBQYXRoOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2NsaXAwJyksIFwiKVwiKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuMDUgMTMuMjM3bC0zLjExLTMuNjEyXCIsXG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VXaWR0aDogMC4xMixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMTE3IDEwLjUyOGwyLjUwOSAzLjUxMlwiLFxuICAgIHN0cm9rZTogXCIjMDU0ODZEXCIsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDYsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNi4wNSAxMy4yMzdsMy4xMS0zLjYxMk0xOS44NjMgMTcuMTVsMy43MTItMy4xMU0xOS44NjMgMTcuMTVsMy43MTIgMy4zMTFNMTkuMTYgMjQuNTc1bC0zLjExLTMuNTExTTEyLjk0IDI0LjU3NWwzLjExLTMuNTExTTguNjI1IDIwLjI2bDMuNTEyLTMuMTFNOC42MjUgMTQuMDRsMy41MTIgMy4xMU0xNi4wNSAxMy4yMzhsLTcuNDI1LjgwMk0xNi4wNSAxMy4yMzhsNy41MjUuODAyTTE5Ljg2MyAxNy4xNWwtLjcwMi03LjUyNU0xOS44NjMgMTcuMTVsLS43MDIgNy40MjVNMjMuNTc1IDIwLjQ2MWwtNy41MjUuNjAyTTguNjI1IDIwLjI2MWw3LjQyNS44MDNNMTIuOTQgMjQuNTc1bC0uODAzLTcuNDI1TTEyLjk0IDkuNjI1bC0uODAzIDcuNTI1XCIsXG4gICAgc3Ryb2tlOiBcIiMwNTQ4NkRcIixcbiAgICBzdHJva2VXaWR0aDogMC4xMixcbiAgICBzdHJva2VNaXRlcmxpbWl0OiAxMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuMTE0IDE1LjA0M2wzLjUxMS0xLjAwM005LjMyOCA3LjExN2wzLjYxMiAyLjUwOU0xMy43NDMgNS41MTJsLS44MDMgNC4xMTNNMTMuNzQzIDUuNTEybDUuNDE4IDQuMTEzTTE4LjM1OCA1LjUxMmwuODAzIDQuMTEzTTIyLjc3MyA3LjExN0wxOS4xNiA5LjYyNk0yNS45ODMgMTAuNTI4bC02LjgyMi0uOTAzTTIzLjU3NSAxNC4wNGwyLjQwOC0zLjUxMk0yMy41NzUgMTQuMDRsMy40MTIgMS4wMDNNMjMuNTc1IDE0LjA0bDMuNDEyIDUuMjE3TTE4LjM1OCA1LjUxMkwxMi45NCA5LjYyNU0yMy41NzYgMTQuMDRsLS44MDMtNi45MjNNMjMuNTc1IDIwLjQ2MmwzLjQxMi0xLjIwNE0yMy41NzUgMjAuNDYybDMuNDEyLTUuNDE4TTIzLjU3NSAyMC40NjFsMi40MDggMy4zMTJNMjMuNTc2IDIwLjQ2MWwtLjgwMyA2LjcyM00xOS4xNiAyNC41NzVsMy42MTMgMi42MDlNMTkuMTYgMjQuNTc1bDYuODIzLS44MDJNMTkuMTYgMjQuNTc1bC0uODAyIDQuMjE0TTE5LjE2IDI0LjU3NWwtNS40MTcgNC4yMTRNMTIuOTQgMjQuNTc1bC44MDMgNC4yMTRNMTIuOTQgMjQuNTc1bDUuNDE4IDQuMjE0TTEyLjk0IDI0LjU3NWwtMy42MTIgMi42MDlNMTIuOTQgMjQuNTc1bC02LjgyMy0uODAyTTguNjI2IDIwLjI2MWwtMi41MDkgMy41MTJNOC42MjUgMjAuMjYxbC43MDMgNi45MjNNOC42MjUgMjAuMjZsLTMuNTExLTEuMDAyTTguNjI1IDE0LjA0bC0zLjUxMSA1LjIxN004LjYyNSAyMC4yNmwtMy41MTEtNS4yMTdNOS4zMjggNy4xMTdsLS43MDMgNi45MjNNNi4xMTcgMTAuNTI4bDYuODIzLS45MDNcIixcbiAgICBzdHJva2U6IFwiIzA1NDg2RFwiLFxuICAgIHN0cm9rZVdpZHRoOiAwLjA2LFxuICAgIHN0cm9rZU1pdGVybGltaXQ6IDEwXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4zMjcgNy4xMTdMNi43MiA1LjgxM005LjMyOCA3LjExN2wtLjIwMS0yLjkxTTEzLjc0MiA1LjUxMkw5LjEyNyA0LjIwN00xMy43NDIgNS41MTJsLTIuMDA2LTIuNTA5TTEzLjc0MyA1LjUxMmwuODAyLTIuOTFNOS4zMjggNy4xMTdsMi40MDgtNC4xMTRNMTguMzU4IDUuNTEybC0zLjgxMy0yLjkxTTE4LjM1OCA1LjUxMmwtLjgwMy0zLjAxTTEzLjc0MyA1LjUxMmwzLjgxMi0zLjAxTTE4LjM1OCA1LjUxMmwyLjAwNy0yLjUwOU0yMi43NzMgNy4xMTdsLTIuNDA4LTQuMTE0TTIyLjc3MyA3LjExN2wuMzAxLTIuOTFNMTguMzU4IDUuNTEybDQuNzE2LTEuMzA1TTIyLjc3MyA3LjExN2wyLjcwOS0xLjQwNU0yMi43NzMgNy4xMTdsNC43MTYuNzAzTTI1Ljk4MyAxMC41MjhsMS41MDUtMi43MDlNMjUuOTg0IDEwLjUyOGwtLjUwMi00LjgxNk0yNS45ODMgMTAuNTI4bDMuMTEtLjNNMjUuOTgzIDEwLjUyOGw0LjIxNCAyLjMwOE0yNi45ODcgMTUuMDQ0bDIuMTA3LTQuODE3TTI2Ljk4NyAxNS4wNDNsMy4yMS0yLjIwN00yNi45ODcgMTUuMDQzbDMuNjEyLjcwM00yNi45ODcgMTkuMjU4bDMuNjEyLTMuNTEyTTI2Ljk4NyAxOS4yNThsMy43MTItLjcwM00yNi45ODcgMTUuMDQzbDMuNzEyIDMuNTEyTTI2Ljk4NyAxOS4yNThsMy4xMSAyLjEwN00yNS45ODMgMjMuNzczbDQuMTE0LTIuNDA5TTI1Ljk4MyAyMy43NzNsMy4xMS4zTTI2Ljk4NyAxOS4yNThsMi4xMDcgNC44MTZNMjUuOTgzIDIzLjc3M2wxLjUwNSAyLjcwOU0yNS45ODQgMjMuNzczbC0uNTAyIDQuNzE1TTI1LjQ4MiAyOC40ODhsLTIuNzEtMS4zMDRNMjIuNzczIDI3LjE4NGwuMiAyLjkxTTIyLjc3MyAyNy4xODRsNC43MTYtLjcwM00yMi43NzMgMjcuMTg0bC0yLjQwOCA0LjExNE0xOC4zNTggMjguNzlsMi4wMDcgMi41MDhNMTguMzU4IDI4Ljc5bDQuNjE1IDEuMzA0TTE4LjM1OCAyOC43OWwtLjgwMyAzLjAxTTE4LjM1OCAyOC43OWwtMy44MTMgMy4wMU0xMy43NDMgMjguNzlsLjgwMiAzLjAxTTEzLjc0MyAyOC43OWwzLjgxMiAzLjAxTTEzLjc0MiAyOC43OWwtMi4wMDYgMi41MDhNOS4zMjggMjcuMTg0bDIuNDA4IDQuMTE0TTEzLjc0MiAyOC43OWwtNC42MTUgMS40MDRNOS4zMjggMjcuMTg0bC0uMjAxIDMuMDFNOS4zMjggMjcuMTg0bC0yLjcxIDEuNDA0TTYuMTE3IDIzLjc3M2wuNTAyIDQuODE2TTkuMzI4IDI3LjE4NGwtNC43MTYtLjcwM002LjExNyAyMy43NzNsLTEuNTA1IDIuNzA5TTYuMTE3IDIzLjc3M2wtMy4xMS4zTTYuMTE3IDIzLjc3M2wtNC4yMTQtMi40MDlNNS4xMTQgMTkuMjU4bC0zLjIxIDIuMTA3TTUuMTE0IDE5LjI1OEwxLjQgMTguNTU1TTUuMTE0IDE5LjI1OGwtMi4xMDcgNC44MTZNNS4xMTQgMTUuMDQzTDEuNCAxOC41NTVNNS4xMTQgMTkuMjU4TDEuNCAxNS43NDZNNS4xMTQgMTUuMDQzbC0zLjExLTIuMTA2TTUuMTE0IDE1LjA0M2wtMy43MTMuNzAzTTUuMTE0IDE1LjA0NGwtMi4wMDctNC44MTdNNi4xMTcgMTAuNTI4bC0zLjAxLS4zTTYuMTE3IDEwLjUyOGwtNC4xMTQgMi40MDhNNi4xMTcgMTAuNTI4TDQuNzEyIDcuOTJNNi4xMTcgMTAuNTI4bC42MDItNC43MTVNOS4zMjggNy4xMTdsLTQuNjE2LjgwM1wiLFxuICAgIHN0cm9rZTogXCIjMDgzRDVGXCIsXG4gICAgc3Ryb2tlV2lkdGg6IDAuMDUsXG4gICAgc3Ryb2tlTWl0ZXJsaW1pdDogMTBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy45NDMgMTUuMjQ0aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJ6TTE3Ljc1NiAxMS4zMzFoLTMuNjEydjMuNTkyaDMuNjEydi0zLjU5MnpNMTcuNzU2IDE5LjE1N2gtMy42MTJ2My41OTJoMy42MTJ2LTMuNTkyek0yMS42NjkgMTUuMjQ0aC0zLjYxMnYzLjU5MmgzLjYxMnYtMy41OTJ6XCIsXG4gICAgZmlsbDogXCIjMDA2REE4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4zNjUgOC40MjFoLTIuNTA5VjEwLjloMi41MDlWOC40MnpNMTQuMTQ0IDguMzIxaC0yLjUwOXYyLjQ3OGgyLjUwOVY4LjMyMXpNOS44MyAxMi44MzZINy4zMnYyLjQ3OEg5Ljgzdi0yLjQ3OHpNOS44MyAxOC45NTZINy4zMnYyLjQ3OUg5Ljgzdi0yLjQ3OXpNMjQuNjc5IDE4Ljk1NkgyMi4xN3YyLjQ3OWgyLjUwOXYtMi40Nzl6TTI0LjY3OSAxMi43MzZIMjIuMTd2Mi40NzhoMi41MDl2LTIuNDc4elwiLFxuICAgIGZpbGw6IFwiIzJGNzdCQ1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi45MiA5LjYyNUg1LjMxNHYxLjY3Nkg2LjkyVjkuNjI1ek0xMC4xMyA2LjIxNEg4LjUyNnYxLjY3NWgxLjYwNlY2LjIxNHpNMTQuNDQ1IDQuNjA5aC0xLjYwNnYxLjY3NWgxLjYwNlY0LjYxek01LjkxNiAxNC4xNEg0LjMxMXYxLjY3NmgxLjYwNVYxNC4xNHpNMjYuNzg2IDkuODI2SDI1LjA4djEuNjQ2aDEuNzA2VjkuODI2ek0yMy41NzUgNi40MTVIMjEuODdWOC4wNmgxLjcwNVY2LjQxNXpNMTkuMjYgNC44MWgtMS43MDV2MS42NDVoMS43MDZWNC44MDl6TTI3LjY4OSAxNC40NDFoLTEuNjA1djEuNjQ2aDEuNjA1VjE0LjQ0elwiLFxuICAgIGZpbGw6IFwiIzEzOUJEN1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuMTQ0IDIzLjI3aC0yLjUwOXYyLjQ3OWgyLjUwOXYtMi40Nzh6TTIwLjI2NCAyMy4yN2gtMi41MDh2Mi40NzloMi41MDh2LTIuNDc4elwiLFxuICAgIGZpbGw6IFwiIzJGNzdCQ1wiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjYuNjg1IDIyLjc3SDI1LjA4djEuNjc1aDEuNjA1di0xLjY3NnpNMjMuMzc1IDI2LjA4SDIxLjc3djEuNjc2aDEuNjA1VjI2LjA4ek0xOS4wNiAyNy42ODZoLTEuNjA1djEuNjc1aDEuNjA1di0xLjY3NXpNMjcuNTg5IDE4LjI1NGgtMS42MDZ2MS42NzZoMS42MDZ2LTEuNjc2ek02LjkyIDIyLjk3SDUuMjE0djEuNjQ2SDYuOTJWMjIuOTd6TTEwLjAzIDI2LjM4MUg4LjMyNXYxLjY0NmgxLjcwNVYyNi4zOHpNMTQuNDQ1IDI3Ljk4N2gtMS43MDZ2MS42NDVoMS43MDZ2LTEuNjQ1ek01LjgxNiAxOC4zNTVINC4yMVYyMGgxLjYwNnYtMS42NDV6XCIsXG4gICAgZmlsbDogXCIjMTM5QkQ3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjEyIDUuMzExaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMS45MDMgMTUuMjQ0SDF2LjkzM2guOTAzdi0uOTMzek0yNS43ODIgNS4yMWgtLjkwM3YuOTM0aC45MDNWNS4yMXpNMi41MDUgMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNHpNMTIuMTM3IDIuNTAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMy41MDggOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzek01LjExMyA3LjMxOEg0LjIxdi45MzNoLjkwM3YtLjkzM3pNOS42MjkgMy44MDZoLS45MDN2LjkwM2guOTAzdi0uOTAzek0xNS4wNDcgMi4xaC0uOTAzdi45MDNoLjkwM1YyLjF6TTIzLjM3NCAzLjYwNWgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI5LjI5NSA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTMwLjQ5OCAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0ek0yNy42OSA3LjMxOGgtLjkwNHYuOTMzaC45MDN2LS45MzN6TTMwLjkgMTUuMTQ0aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMTcuODU2IDJoLS45MDN2LjkzM2guOTAzVjJ6TTIwLjY2NSAyLjYwMmgtLjkwM3YuOTMzaC45MDN2LS45MzN6XCIsXG4gICAgZmlsbDogXCIjMDNBOURBXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjEyIDUuMzExaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMS45MDMgMTUuMjQ0SDF2LjkzM2guOTAzdi0uOTMzek0yNS43ODIgNS4yMWgtLjkwM3YuOTM0aC45MDNWNS4yMXpNMi41MDUgMTIuMzM1aC0uOTAzdi45MzNoLjkwM3YtLjkzNHpNMTIuMTM3IDIuNTAyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMy41MDggOS43MjZoLS45MDN2LjkzM2guOTAzdi0uOTMzek01LjExMyA3LjMxOEg0LjIxdi45MzNoLjkwM3YtLjkzM3pNOS42MjkgMy44MDZoLS45MDN2LjkwM2guOTAzdi0uOTAzek0xNS4wNDcgMi4xaC0uOTAzdi45MDNoLjkwM1YyLjF6TTIzLjM3NCAzLjYwNWgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI5LjI5NSA5LjcyNmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTMwLjQ5OCAxMi4zMzVoLS45MDN2LjkzM2guOTAzdi0uOTM0ek0yNy42OSA3LjMxOGgtLjkwNHYuOTMzaC45MDN2LS45MzN6TTMwLjkgMTUuMTQ0aC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMTcuODU2IDJoLS45MDN2LjkzM2guOTAzVjJ6TTIwLjY2NSAyLjYwMmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI1LjY4MiAyNy44ODZoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zMSAxNy45NTNoLS45MDN2LjkzM0gzMXYtLjkzM3pNNy4xMiAyNy45ODdoLS45MDN2LjkzM2guOTAzdi0uOTMzek0zMC4zOTggMjAuNzYzaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMjAuNjY1IDMwLjU5NmgtLjkwM3YuOTMzaC45MDN2LS45MzN6TTI5LjI5NSAyMy4zNzFoLS45MDN2LjkzM2guOTAzdi0uOTMzek0yNy42OSAyNS43OGgtLjkwNHYuOTMyaC45MDN2LS45MzN6TTIzLjI3NCAyOS43OTNoLS45MDN2LjkwMmguOTAzdi0uOTAyek0xNy43NTYgMzEuNDk4aC0uOTAzdi45MDNoLjkwM3YtLjkwM3pNOS40MjggMjkuNDkyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMy41MDggMjMuNDcyaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNMi4zMDQgMjAuODYzaC0uOTAzdi45MzNoLjkwM3YtLjkzM3pNNS4wMTMgMjUuODhINC4xMXYuOTMzaC45MDN2LS45MzN6TTEuOTAzIDE3Ljk1M0gxdi45MzNoLjkwM3YtLjkzM3pNMTQuOTQ3IDMxLjQ5OGgtLjkwM3YuOTMzaC45MDJ2LS45MzN6TTEyLjEzNyAzMC41OTZoLS45MDN2LjkzM2guOTAzdi0uOTMzelwiLFxuICAgIGZpbGw6IFwiIzAzQTlEQVwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImNsaXBQYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnY2xpcDAnKVxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMCAwaDMydjMySDBWMHpcIixcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9KSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvSGFwcm94eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0libSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvSWJtKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX2libScpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIHgxOiBcIjguMDA1JVwiLFxuICAgIHgyOiBcIjUzLjMzJVwiLFxuICAgIHkxOiBcIjc5LjMyMyVcIixcbiAgICB5MjogXCI3OS4zMjQlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjM0JEQURFXCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMzAuNDc2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjMzZDRUUxXCIsXG4gICAgc3RvcE9wYWNpdHk6IDAuMzgzXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjEwMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiIzIxQTJFRlwiXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIHgxOiBcIjE5LjQ5NiVcIixcbiAgICB4MjogXCI3MS4zMDklXCIsXG4gICAgeTE6IFwiODMuMzQ0JVwiLFxuICAgIHkyOiBcIjE3LjYzOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyMDdGRkFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RUFGRjFcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2MnKSxcbiAgICB4MTogXCIyMS45MDklXCIsXG4gICAgeDI6IFwiMjEuOTA5JVwiLFxuICAgIHkxOiBcIjk2LjMxNCVcIixcbiAgICB5MjogXCIyOS40NTQlXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNDJDMUU2XCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNTcuMDc2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNkZCOUVGXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiODYuNzE2JVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNjBDQkU3XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjNUNDRkU1XCIsXG4gICAgc3RvcE9wYWNpdHk6IDBcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgeDE6IFwiOTYuMjA1JVwiLFxuICAgIHgyOiBcIi0xLjE3MiVcIixcbiAgICB5MTogXCIxMi42NjclXCIsXG4gICAgeTI6IFwiLTIyLjI1MiVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2RkI5RUZcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIyMi40MjclXCIsXG4gICAgc3RvcENvbG9yOiBcIiMzOEQyRTBcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCI5MS4yMDMlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM2QUJGRUNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1Q0NGRTVcIixcbiAgICBzdG9wT3BhY2l0eTogMFxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICB4MTogXCI5LjQwOCVcIixcbiAgICB4MjogXCI4MC41ODklXCIsXG4gICAgeTE6IFwiODcuNzY0JVwiLFxuICAgIHkyOiBcIjgzLjEzOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMxMjZDRkRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyMUExRUZcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzOEQyRTBcIixcbiAgICBkOiBcIk00LjI2MiAxMy4xMjJhLjYwNC42MDQgMCAwMS0uMy0uMDhsLTIuODQ0LTEuNjI1YS42MTcuNjE3IDAgMDEtLjI5NS0uNzM0LjYwOC42MDggMCAwMS44NjgtLjMxNWwyLjg0MyAxLjYyNWMuMjkuMTU5LjQwNS41MTQuMjYxLjgxYS42MDMuNjAzIDAgMDEtLjUzMy4zMnptNC45MTQtNC44NjRhLjYwMy42MDMgMCAwMS0uNTIyLS4yOThMNy4wMTIgNS4xNDRhLjYxNS42MTUgMCAwMS4xMTUtLjc4Mi42MDYuNjA2IDAgMDEuOTEuMTU3bDEuNjQgMi44MTNhLjYxNy42MTcgMCAwMS0uMTU4LjgxOWMtLjEuMDctLjIyLjEwNy0uMzQzLjEwN3ptNi4xMDctMi40MTZWMi42MzVhLjYyNC42MjQgMCAwMS41NzUtLjYzNC42MDUuNjA1IDAgMDEuNDQzLjE2NC41OTMuNTkzIDAgMDEuMTg2LjQzMXYzLjI4NWEuNTkzLjU5MyAwIDAxLS4xODYuNDMuNjA1LjYwNSAwIDAxLS40NDMuMTY1LjYyNC42MjQgMCAwMS0uNTc1LS42MzR6bTcuMzEyIDIuNDE2YS42MDQuNjA0IDAgMDEtLjM0My0uMTA3LjYxNy42MTcgMCAwMS0uMTU5LS44MmwxLjY0LTIuODEyYS42MDIuNjAyIDAgMDEuOTExLS4xNTdjLjIyMy4yLjI3MS41MjguMTE1Ljc4MkwyMy4xMTcgNy45NmEuNjAzLjYwMyAwIDAxLS41MjIuMjk4em00LjkxNCA0Ljg2NGEuNjAyLjYwMiAwIDAxLS41MzQtLjMxOS42MTYuNjE2IDAgMDEuMjYyLS44MWwyLjgxOC0xLjYxMWEuNjI2LjYyNiAwIDAxLjc4My4xMTIuNTkyLjU5MiAwIDAxLS4xNTYuOTA2bC0yLjg3MyAxLjY0M2EuNjA0LjYwNCAwIDAxLS4zLjA4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCJ1cmwoI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdhJyksIFwiKVwiKSxcbiAgICBkOiBcIk0xNi41MzYgMTkuNjQ1bC0xLjIwNC0uMDA5Yy4wMjYtMy4zNzcgMi4xNDYtNi4zOTEgNS4zMzctNy41ODVhOC4zMDggOC4zMDggMCAwMTkuMDY4IDIuMTk3bC0uODk3Ljc5NWE3LjA5NyA3LjA5NyAwIDAwLTcuNzQ1LTEuODc2Yy0yLjcyNiAxLjAxOS00LjUzNyAzLjU5My00LjU1OSA2LjQ3OHpcIixcbiAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDAgMilcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYicpLCBcIilcIiksXG4gICAgZDogXCJNLjAyOSAyMC45MDljLjAyMi0zLjM1NCAyLjQ3NS02LjIwOCA1LjgxNS02Ljc2NGwuMjAxIDEuMTc2Yy0yLjc2NC40Ni00Ljc5NCAyLjgyLTQuODEyIDUuNTk2TC4wMjkgMjAuOTF6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTguMjQ2IDI0LjczN2ExMC42MjUgMTAuNjI1IDAgMDEwLTE1LjEzMWM0LjIxOS00LjE3OCAxMS4wNi00LjE3OCAxNS4yNzkgMGExMC44OSAxMC44OSAwIDAxMS4zODQgMS42NzhsLTEuMDA0LjY1N2E5LjUxNyA5LjUxNyAwIDAwLTEuMjMxLTEuNDkyYy0zLjc1LTMuNzEzLTkuODI4LTMuNzEzLTEzLjU3NyAwYTkuNDQyIDkuNDQyIDAgMDAwIDEzLjQ0NWwtLjg1MS44NDN6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2QnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTUuODM2IDEzLjIzNGMuNDA0LTEuMzMyIDEuMzMtMi41NiAyLjQxLTMuNjI4IDQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwYTEwLjg5IDEwLjg5IDAgMDExLjM4NCAxLjY3OGwtMS4wMDQuNjU3YTkuNTE3IDkuNTE3IDAgMDAtMS4yMzEtMS40OTJjLTMuNzUtMy43MTMtOS44MjgtMy43MTMtMTMuNTc3IDBhOS40NzQgOS40NzQgMCAwMC0yLjA3NCAzLjA2Yy0xLjQ1MiAzLjQ1LTIuMzU4IDMuNTkzLTEuMTg3LS4yNzV6XCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2UnKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTIzLjUyNCAyNy44N0g2Ljk2YTcuMDEyIDcuMDEyIDAgMDEtNC45MjItMi4wNTlBNi44NzYgNi44NzYgMCAwMS4wMjkgMjAuOTFsMS4yMDQuMDA5YTUuNjkgNS42OSAwIDAwMS42NiA0LjA1NSA1LjgwMiA1LjgwMiAwIDAwNC4wNzEgMS43MDVoMTYuNjE4YzIuNzguMDAyIDUuMzAyLTEuNjE2IDYuNDM4LTQuMTNhNi45MjkgNi45MjkgMCAwMC0xLjE4LTcuNTA1bC44OTctLjc5NWE4LjExMiA4LjExMiAwIDAxMS4zODQgOC43ODVjLTEuMzI5IDIuOTQzLTQuMjc5IDQuODM3LTcuNTM0IDQuODM4aC0uMDYzelwiLFxuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMCAyKVwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0libTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0libU1vbm8gPSBmdW5jdGlvbiBFdWlJY29uTG9nb0libU1vbm8oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNLjA0NyAyMi45MDlsMS4xODYuMDA5YTUuNjkgNS42OSAwIDAwMS42NiA0LjA1NSA1LjgwMiA1LjgwMiAwIDAwNC4wNzEgMS43MDVoMTYuNjE4YzIuNzguMDAyIDUuMzAyLTEuNjE2IDYuNDM4LTQuMTNhNi45MjkgNi45MjkgMCAwMC0xLjE4LTcuNTA1bC44OTctLjc5NWE4LjExMiA4LjExMiAwIDAxMS4zODQgOC43ODVjLTEuMzI5IDIuOTQzLTQuMjc5IDQuODM3LTcuNTM0IDQuODM4SDYuOTZhNy4wMTIgNy4wMTIgMCAwMS00LjkyMi0yLjA2QTYuODc2IDYuODc2IDAgMDEuMDI5IDIyLjkxaC4wMTgtLjAxOGMuMDE3LTIuNzEgMS42Mi01LjA5MSAzLjk5Ny02LjIuMTE0LS4wNTQuMzIuMjkuNjE5IDEuMDNhNS43MSA1LjcxIDAgMDAtMy40MTIgNS4xOGwtMS4xODYtLjAxem00LjIxNS05Ljc4N2EuNjA0LjYwNCAwIDAxLS4zLS4wOGwtMi44NDQtMS42MjVhLjYxNy42MTcgMCAwMS0uMjk1LS43MzQuNjA4LjYwOCAwIDAxLjg2OC0uMzE1bDIuODQzIDEuNjI1Yy4yOS4xNTkuNDA1LjUxNC4yNjEuODFhLjYwMy42MDMgMCAwMS0uNTMzLjMyem00LjkxNC00Ljg2NGEuNjAzLjYwMyAwIDAxLS41MjItLjI5OEw3LjAxMiA1LjE0NGEuNjE1LjYxNSAwIDAxLjExNS0uNzgyLjYwNi42MDYgMCAwMS45MS4xNTdsMS42NCAyLjgxM2EuNjE3LjYxNyAwIDAxLS4xNTguODE5Yy0uMS4wNy0uMjIuMTA3LS4zNDMuMTA3em02LjEwNy0yLjQxNlYyLjYzNWEuNjI0LjYyNCAwIDAxLjU3NS0uNjM0LjYwNS42MDUgMCAwMS40NDMuMTY0LjU5My41OTMgMCAwMS4xODYuNDMxdjMuMjg1YS41OTMuNTkzIDAgMDEtLjE4Ni40My42MDUuNjA1IDAgMDEtLjQ0My4xNjUuNjI0LjYyNCAwIDAxLS41NzUtLjYzNHptNy4zMTIgMi40MTZhLjYwNC42MDQgMCAwMS0uMzQzLS4xMDcuNjE3LjYxNyAwIDAxLS4xNTktLjgybDEuNjQtMi44MTJhLjYwMi42MDIgMCAwMS45MTEtLjE1N2MuMjIzLjIuMjcxLjUyOC4xMTUuNzgyTDIzLjExNyA3Ljk2YS42MDMuNjAzIDAgMDEtLjUyMi4yOTh6bTQuOTE0IDQuODY0YS42MDIuNjAyIDAgMDEtLjUzNC0uMzE5LjYxNi42MTYgMCAwMS4yNjItLjgxbDIuODE4LTEuNjExYS42MjYuNjI2IDAgMDEuNzgzLjExMi41OTIuNTkyIDAgMDEtLjE1Ni45MDZsLTIuODczIDEuNjQzYS42MDQuNjA0IDAgMDEtLjMuMDh6TTE2LjM2NiAxOS43OEgxNmEyLjMyMiAyLjMyMiAwIDAxLS4zMDIgMGMtLjA5LS4wMTEtLjE1Mi4wNS0uMDg2LS4xOTZhOC4yMDQgOC4yMDQgMCAwMTUuMDU3LTUuNTMzIDguMzA4IDguMzA4IDAgMDE5LjA2OCAyLjE5N2wtLjg5Ny43OTVhNy4wOTcgNy4wOTcgMCAwMC03Ljc0NS0xLjg3NiA3LjAwOSA3LjAwOSAwIDAwLTQuMjg4IDQuNjEzYy0uMTE1LjM5OS0uMTE1LjM5OSAwIDBoLS40NHpNNi4xNTQgMjMuODI2YTEwLjYyNiAxMC42MjYgMCAwMTIuMDkyLTEyLjIyYzQuMjE5LTQuMTc4IDExLjA2LTQuMTc4IDE1LjI3OSAwbC0uODUxLjg0M2MtMy43NS0zLjcxMy05LjgyOC0zLjcxMy0xMy41NzcgMEE5LjQ0MiA5LjQ0MiAwIDAwNy4yNjQgMjMuMzZhNi45OSA2Ljk5IDAgMDAtLjQxOC4xNzJsLS4yMTIuMDk0LS4xNjIuMDc3LS4wOTQuMDMtLjA5LjAzOWMuNjQ4LS4yODIuOTY1LS40Mi45NS0uNDEyLS4wMjYuMDE1LTEuMDczLjQ4OS0xLjA4NC40NjZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29JYm1Nb25vOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvS2Fma2EgPSBmdW5jdGlvbiBFdWlJY29uTG9nb0thZmthKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuNTY1IDE3LjYyM2MtMS4xNzMgMC0yLjIyNS41Mi0yLjk0NSAxLjMzN2wtMS44NDUtMS4zMDZjLjE5Ni0uNTQuMzA5LTEuMTE4LjMwOS0xLjcyNCAwLS41OTYtLjEwOS0xLjE2NS0uMjk4LTEuNjk2bDEuODQtMS4yOTNhMy45MTQgMy45MTQgMCAwMDIuOTM5IDEuMzMxIDMuOTMgMy45MyAwIDAwMy45MjYtMy45MjYgMy45MyAzLjkzIDAgMDAtMy45MjYtMy45MjYgMy45MyAzLjkzIDAgMDAtMy45MjYgMy45MjZjMCAuMzg3LjA1OC43NjEuMTYzIDEuMTE1bC0xLjg0MiAxLjI5M2E1LjA2OCA1LjA2OCAwIDAwLTMuMTQtMS44MjVWOC43MWEzLjkzMiAzLjkzMiAwIDAwMy4xMTktMy44NDJBMy45MyAzLjkzIDAgMDAxMi4wMTIuOTQxYTMuOTMgMy45MyAwIDAwLTMuOTI2IDMuOTI2IDMuOTMgMy45MyAwIDAwMy4wNDggMy44MjR2Mi4yNDlhNS4wNzUgNS4wNzUgMCAwMC00LjE5MyA0Ljk5IDUuMDc1IDUuMDc1IDAgMDA0LjIyOSA0Ljk5NVYyMy4zYTMuOTMxIDMuOTMxIDAgMDAtMy4wODQgMy44MzMgMy45MyAzLjkzIDAgMDAzLjkyNiAzLjkyNiAzLjkzIDMuOTMgMCAwMDMuOTI3LTMuOTI2IDMuOTMxIDMuOTMxIDAgMDAtMy4wODQtMy44MzN2LTIuMzc1YTUuMDcgNS4wNyAwIDAwMy4wODctMS43OTVsMS44NTcgMS4zMTRjLS4xMDMuMzUxLS4xNi43MjEtLjE2IDEuMTA1YTMuOTMgMy45MyAwIDAwMy45MjYgMy45MjYgMy45MyAzLjkzIDAgMDAzLjkyNi0zLjkyNiAzLjkzIDMuOTMgMCAwMC0zLjkyNi0zLjkyNnptMC05LjE4YzEuMDUgMCAxLjkwMy44NTMgMS45MDMgMS45MDNzLS44NTQgMS45MDMtMS45MDMgMS45MDNhMS45MDYgMS45MDYgMCAwMS0xLjkwNC0xLjkwM2MwLTEuMDUuODU0LTEuOTA0IDEuOTA0LTEuOTA0ek0xMC4xMDkgNC44NjZjMC0xLjA1Ljg1NC0xLjkwMyAxLjkwMy0xLjkwMyAxLjA1IDAgMS45MDQuODU0IDEuOTA0IDEuOTAzIDAgMS4wNS0uODU0IDEuOTA0LTEuOTA0IDEuOTA0YTEuOTA2IDEuOTA2IDAgMDEtMS45MDMtMS45MDR6bTMuODA3IDIyLjI2NmMwIDEuMDUtLjg1NCAxLjkwMy0xLjkwNCAxLjkwM2ExLjkwNiAxLjkwNiAwIDAxLTEuOTAzLTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDMtMS45MDQgMS4wNSAwIDEuOTA0Ljg1NCAxLjkwNCAxLjkwNHptLTEuOTA0LTguNTQ4YTIuNjU4IDIuNjU4IDAgMDEtMi42NTUtMi42NTUgMi42NTggMi42NTggMCAwMTIuNjU1LTIuNjU1IDIuNjU4IDIuNjU4IDAgMDEyLjY1NSAyLjY1NSAyLjY1OCAyLjY1OCAwIDAxLTIuNjU1IDIuNjU1em05LjU1MyA0Ljg2N2ExLjkwNiAxLjkwNiAwIDAxLTEuOTA0LTEuOTAzYzAtMS4wNS44NTQtMS45MDQgMS45MDQtMS45MDQgMS4wNSAwIDEuOTAzLjg1NCAxLjkwMyAxLjkwNCAwIDEuMDUtLjg1NCAxLjkwMy0xLjkwMyAxLjkwM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0thZmthOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvS2liYW5hID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29LaWJhbmEoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTQgMHYyOC43ODlMMjguOTM1LjAxN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk00IDEydjE2Ljc4OWwxMS45MDYtMTMuNzM4QTI0LjcyMSAyNC43MjEgMCAwMDQgMTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTE4LjQ3OSAxNi42NjRMNi4yNjggMzAuNzU0bC0xLjA3MyAxLjIzN2gyMy4xOTFjLTEuMjUyLTYuMjkyLTQuODgzLTExLjcxOS05LjkwOC0xNS4zMjdcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29LaWJhbmE7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29LdWJlcm5ldGVzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29LdWJlcm5ldGVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuODkuMDAzYTIuMTQgMi4xNCAwIDAxMS4wMy4yMDZsMTEuMTI3IDUuMzA0YTIuMTEgMi4xMSAwIDAxMS4xNSAxLjQyOWwyLjc1IDExLjkyMWEyLjA5IDIuMDkgMCAwMS0uNDEyIDEuNzgzbC03LjY5NyA5LjU2Yy0uNDA0LjUtMS4wMTYuNzkyLTEuNjYzLjc5MUw5LjgyNyAzMWMtLjY0OCAwLTEuMjYtLjI5Mi0xLjY2NC0uNzkzbC03LjctOS41NThhMi4xMDcgMi4xMDcgMCAwMS0uNDEtMS43ODNMMi43OTggNi45NDVhMi4xMSAyLjExIDAgMDExLjE1MS0xLjQzTDE1LjA3NC4yMWMuMjU1LS4xMjIuNTMyLS4xOTIuODE1LS4yMDZ6TTE2IDQuMDZjLS4zNjggMC0uNjY3LjMzLS42NjcuNzM4bC4wMDIuMDE5YzAgLjA1NS0uMDAzLjEyMi0uMDAyLjE3LjAxLjIzNi4wNi40MTYuMDkxLjYzMi4wNTcuNDY0LjEwMy44NDkuMDc0IDEuMjA2LS4wMjguMTM1LS4xMjcuMjU4LS4yMTYuMzQ0bC0uMDE1LjI4MWE4LjU2OSA4LjU2OSAwIDAwLTUuNTU1IDIuNjY2IDkuOTggOS45OCAwIDAxLS4yNC0uMTdjLS4xMi4wMTYtLjI0LjA1My0uMzk2LS4wMzgtLjI5OC0uMi0uNTctLjQ3Ny0uODk4LS44MS0uMTUtLjE2LS4yNi0uMzEtLjQzOC0uNDY0LS4wNC0uMDM1LS4xMDMtLjA4Mi0uMTQ4LS4xMThhLjc5My43OTMgMCAwMC0uNDY0LS4xNzUuNjQyLjY0MiAwIDAwLS41My4yMzRjLS4yMy4yODgtLjE1Ni43MjYuMTYzLjk4bC4wMS4wMDhjLjA0NC4wMzUuMDk4LjA4LjEzOC4xMS4xOS4xNC4zNjMuMjEyLjU1Mi4zMjMuMzk4LjI0Ni43MjkuNDUuOTkuNjk1LjEwMy4xMDguMTIuMy4xMzQuMzgzbC4yMTQuMTlhOC41OTIgOC41OTIgMCAwMC0xLjM2IDUuOTk4bC0uMjc4LjA4Yy0uMDc0LjA5Ni0uMTc3LjI0NS0uMjg2LjI5LS4zNDMuMTA3LS43MjguMTQ3LTEuMTk0LjE5NS0uMjE4LjAxOC0uNDA3LjAwOC0uNjM5LjA1MS0uMDUuMDEtLjEyMi4wMjktLjE3Ny4wNDJsLS4wMDYuMDAxLS4wMS4wMDNjLS4zOTMuMDk1LS42NDUuNDU1LS41NjQuODEuMDgyLjM1NS40NjUuNTcuODYuNDg1bC4wMS0uMDAxLjAxMy0uMDA0Yy4wNTUtLjAxMi4xMjQtLjAyNi4xNzItLjAzOS4yMjgtLjA2LjM5My0uMTUuNTk3LS4yMjguNDQtLjE1OC44MDYtLjI5IDEuMTYxLS4zNDEuMTQ5LS4wMTIuMzA1LjA5MS4zODMuMTM1bC4yOS0uMDVhOC42NTQgOC42NTQgMCAwMDMuODQgNC43ODdsLS4xMi4yOWMuMDQzLjExMy4wOTEuMjY1LjA1OS4zNzYtLjEzLjMzNC0uMzUuNjg4LS42MDMgMS4wODEtLjEyMi4xODItLjI0Ny4zMjQtLjM1Ny41MzItLjAyNi4wNS0uMDYuMTI2LS4wODYuMTc5LS4xNy4zNjUtLjA0NS43ODYuMjg0Ljk0NC4zMy4xNi43NDEtLjAwOC45MTktLjM3NWwuMDAxLS4wMDF2LS4wMDJjLjAyNS0uMDUxLjA2MS0uMTIuMDgzLS4xNjkuMDk0LS4yMTUuMTI1LS40LjE5Mi0uNjA5LjE3Ni0uNDQyLjI3My0uOTA1LjUxNS0xLjE5NC4wNjctLjA4LjE3NS0uMTEuMjg3LS4xNGwuMTUxLS4yNzNhOC42MTYgOC42MTYgMCAwMDYuMTQ1LjAxNmwuMTQyLjI1NmMuMTE0LjAzNy4yMzkuMDU2LjM0LjIwNi4xODIuMzEuMzA2LjY3NS40NTcgMS4xMTguMDY2LjIwOC4xLjM5My4xOTQuNjEuMDIxLjA0OC4wNTcuMTE3LjA4Mi4xNy4xNzcuMzY3LjU5LjUzNS45Mi4zNzYuMzMtLjE1OC40NTUtLjU4LjI4NC0uOTQ1LS4wMjYtLjA1Mi0uMDYtLjEyOS0uMDg3LS4xNzktLjExLS4yMDgtLjIzNS0uMzQ4LS4zNTctLjUzLS4yNTItLjM5My0uNDYxLS43Mi0uNTktMS4wNTUtLjA1NS0uMTczLjAwOS0uMjguMDUtLjM5Mi0uMDI1LS4wMjktLjA3OS0uMTkyLS4xMS0uMjY4YTguNjU0IDguNjU0IDAgMDAzLjgzOC00LjgyMmMuMDg2LjAxNC4yMzYuMDQuMjg1LjA1LjEtLjA2Ni4xOTItLjE1Mi4zNzMtLjEzOC4zNTUuMDUyLjcyLjE4MyAxLjE2LjM0MS4yMDUuMDc4LjM3LjE3LjU5OC4yMy4wNDguMDEzLjExNy4wMjUuMTcyLjAzN2wuMDEzLjAwNC4wMS4wMDJjLjM5NS4wODUuNzc4LS4xMzEuODYtLjQ4Ni4wOC0uMzU1LS4xNzEtLjcxNS0uNTY0LS44MS0uMDU3LS4wMTMtLjEzOC0uMDM1LS4xOTMtLjA0NS0uMjMyLS4wNDQtLjQyLS4wMzMtLjY0LS4wNTEtLjQ2NS0uMDQ5LS44NS0uMDg5LTEuMTkzLS4xOTYtLjE0LS4wNTQtLjIzOS0uMjItLjI4Ny0uMjg5bC0uMjctLjA3OGE4LjU3MiA4LjU3MiAwIDAwLS4xMzktMy4xMDQgOC41OTkgOC41OTkgMCAwMC0xLjI0Ny0yLjg4Yy4wNjgtLjA2Mi4xOTktLjE3Ny4yMzYtLjIxLjAxLS4xMi4wMDEtLjI0NS4xMjUtLjM3Ny4yNjItLjI0Ni41OTItLjQ1Ljk5LS42OTUuMTktLjExLjM2NC0uMTgyLjU1NC0uMzIyLjA0My0uMDMyLjEwMS0uMDgyLjE0Ni0uMTE4LjMyLS4yNTUuMzkzLS42OTMuMTY0LS45OC0uMjMtLjI4Ny0uNjc0LS4zMTQtLjk5My0uMDYtLjA0Ni4wMzYtLjEwNy4wODMtLjE0OC4xMTgtLjE3OS4xNTMtLjI5LjMwNS0uNDQuNDY0LS4zMjguMzMzLS42LjYxMS0uODk4LjgxMi0uMTI5LjA3NS0uMzE4LjA0OS0uNDA0LjA0NGwtLjI1My4xOGE4LjczMiA4LjczMiAwIDAwLTUuNTI4LTIuNjY2IDE2LjAzNiAxNi4wMzYgMCAwMS0uMDE1LS4yOTdjLS4wODctLjA4My0uMTkyLS4xNTQtLjIxOC0uMzMzLS4wMjktLjM1Ny4wMi0uNzQyLjA3Ni0xLjIwNi4wMy0uMjE2LjA4Mi0uMzk2LjA5LS42MzIuMDAzLS4wNTMgMC0uMTMgMC0uMTg5IDAtLjQwOC0uMjk5LS43MzgtLjY2Ny0uNzM4em0tLjgzNCA1LjE1NmwtLjE5OCAzLjQ4OC0uMDE0LjAwN2EuNTg3LjU4NyAwIDAxLS45MzIuNDQ5bC0uMDA2LjAwMi0yLjg2NC0yLjAyN2E2Ljg2MiA2Ljg2MiAwIDAxNC4wMTQtMS45MTl6bTEuNjY4IDBhNi45MjIgNi45MjIgMCAwMTMuOTkgMS45MmwtMi44NDYgMi4wMTUtLjAxLS4wMDRhLjU4OC41ODggMCAwMS0uOTMzLS40NDhsLS4wMDMtLjAwMS0uMTk4LTMuNDgyem0tNi43MiAzLjIyMmwyLjYxNCAyLjMzNS0uMDAzLjAxNGEuNTg1LjU4NSAwIDAxLS4yMyAxLjAwOGwtLjAwMy4wMS0zLjM1Mi45NjdhNi44MzggNi44MzggMCAwMS45NzMtNC4zMzR6bTExLjc1My4wMDFjLjM4OC42My42ODMgMS4zMzEuODU4IDIuMDkzYTYuOTEgNi45MSAwIDAxLjE0NSAyLjIyOWwtMy4zNy0uOTctLjAwMi0uMDEzYS41ODYuNTg2IDAgMDEtLjIzLTEuMDA4bC0uMDAyLS4wMDcgMi42LTIuMzI0em0tNi40MDQgMi41MTVoMS4wNzFsLjY2Ni44My0uMjM5IDEuMDM4LS45NjIuNDYxLS45NjQtLjQ2My0uMjQtMS4wMzcuNjY4LS44M3ptMy40MzUgMi44NDRhLjU4NS41ODUgMCAwMS4xMzUuMDFsLjAwNS0uMDA4IDMuNDY4LjU4NmE2Ljg1OCA2Ljg1OCAwIDAxLTIuNzc2IDMuNDgxbC0xLjM0Ni0zLjI0Ni4wMDQtLjAwNWEuNTg2LjU4NiAwIDAxLjUxLS44MTh6bS01LjgyNC4wMTRhLjU4Ny41ODcgMCAwMS41My44MTdsLjAxLjAxMi0xLjMzMSAzLjIxNGE2Ljg4NiA2Ljg4NiAwIDAxLTIuNzY3LTMuNDU4bDMuNDM3LS41ODIuMDA2LjAwN2EuNTk1LjU5NSAwIDAxLjExNS0uMDF6bTIuOTA0IDEuNDA3YS41ODIuNTgyIDAgMDEuMjc1LjA1OS41ODMuNTgzIDAgMDEuMjYzLjI1aC4wMTNsMS42OTQgMy4wNTdjLS4yMi4wNzMtLjQ0Ni4xMzYtLjY3Ny4xODlhNi44OTYgNi44OTYgMCAwMS0zLjc1OC0uMTk0bDEuNjktMy4wNWguMDAzYS41ODguNTg4IDAgMDEuNDk3LS4zMXpcIixcbiAgICBmaWxsOiBcIiMzMjZDRTVcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0t1YmVybmV0ZXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Mb2dnaW5nID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Mb2dnaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDA4MEQ1XCIsXG4gICAgZDogXCJNMiAxMHYxM2E5IDkgMCAwMTkgOWgxM2MwLTEyLjE1LTkuODUtMjItMjItMjJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsTmVnYXRpdmVcIixcbiAgICBkOiBcIk0xNCAxMy41NjVWMzJoMTBjMC03LjcyMi0zLjk4MS0xNC41MS0xMC0xOC40MzZcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQkZCM1wiLFxuICAgIGQ6IFwiTTE0IDB2MTAuMjI2QzIxLjY2NiAxNC40NjggMjYuODY5IDIyLjYzNiAyNi44NjkgMzJIMzBWMTZjMC04LjgzNy03LjE2My0xNi0xNi0xNlwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTG9nZ2luZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb0xvZ3N0YXNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Mb2dzdGFzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzNFQkVCMFwiLFxuICAgIGQ6IFwiTTE5IDMyaDExVjIwSDE5elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkVDNTE0XCIsXG4gICAgZDogXCJNNCAwSDN2MjBoMTN2LThDMTYgNS4zNzMgMTAuNjI3IDAgNCAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMyAyMGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDFWMjBIM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb0xvZ3N0YXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvTWFwcyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWFwcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzIyQTdGM1wiLFxuICAgIGQ6IFwiTTI1LjUgOS41YzAgNi42NS05LjUgMTEuNDI1LTkuNSAxMS40MjVTNi41IDE2LjE1IDYuNSA5LjVBOS41IDkuNSAwIDAxMTYgMGE5LjUgOS41IDAgMDE5LjUgOS41XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTYgMjAuOTI1czQuMzI2LTIuMTgzIDcuMTQxLTUuNjQ1bC0yLjUwNS0xLjg3OGE3LjcyNSA3LjcyNSAwIDAwLTkuMjcyIDBMOC44NTkgMTUuMjhDMTEuNjc0IDE4Ljc0MiAxNiAyMC45MjUgMTYgMjAuOTI1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGQTc0NEVcIixcbiAgICBkOiBcIk0yNS41MyAxNy4wNzNhMjEuMTI0IDIxLjEyNCAwIDAxLTIuODM0IDIuOTE2Yy0yLjYyIDIuMjM1LTUuMjM5IDMuNTYxLTUuMzQ5IDMuNjE2TDE2IDI0LjI4MmwtMS4zNDgtLjY3N2MtLjEwOS0uMDU1LTIuNzI4LTEuMzgxLTUuMzQ5LTMuNjE2YTIxLjE4MiAyMS4xODIgMCAwMS0yLjgzNC0yLjkxNkwwIDIxLjkyNWwxMS4zNjQgOC41MjNhNy43MjQgNy43MjQgMCAwMDkuMjcxIDBMMzIgMjEuOTI1bC02LjQ3LTQuODUyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvTWFwczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb01lbWNhY2hlZCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTWVtY2FjaGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCdsb2dvX21lbWNhY2hlZCcpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImRlZnNcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYycpLFxuICAgIGN4OiBcIjQxLjQwNiVcIixcbiAgICBjeTogXCI0Mi43MDglXCIsXG4gICAgcjogXCIwJVwiLFxuICAgIGZ4OiBcIjQxLjQwNiVcIixcbiAgICBmeTogXCI0Mi43MDglXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjREI3QzdDXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMTAwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQzgzNzM3XCJcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwicmFkaWFsR3JhZGllbnRcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdkJyksXG4gICAgY3g6IFwiNDQuMjcxJVwiLFxuICAgIGN5OiBcIjQyLjcwOCVcIixcbiAgICByOiBcIjAlXCIsXG4gICAgZng6IFwiNDQuMjcxJVwiLFxuICAgIGZ5OiBcIjQyLjcwOCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNEQjdDN0NcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiNDODM3MzdcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2EnKSxcbiAgICB4MTogXCI1MCVcIixcbiAgICB4MjogXCI1MCVcIixcbiAgICB5MTogXCIxMDAlXCIsXG4gICAgeTI6IFwiMCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM1NzRDNEFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM4MDcxNkRcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2InKSxcbiAgICB4MTogXCI4OC43NzglXCIsXG4gICAgeDI6IFwiMzAuMTQ5JVwiLFxuICAgIHkxOiBcIjk4LjM0MiVcIixcbiAgICB5MjogXCItOC42OCVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyNjhEODNcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiMyRUExOUVcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpLCBcIilcIiksXG4gICAgZDogXCJNMCAyMS41NjdWMTAuMzUyQzAgMS4yOTQgMS4yOTMgMCAxMC4zNDIgMGgxMS4yMzZjOS4wNDkgMCAxMC4zNDEgMS4yOTQgMTAuMzQxIDEwLjM1MnYxMS4yMTVjMCA5LjA1OS0xLjI5MiAxMC4zNTItMTAuMzQxIDEwLjM1MkgxMC4zNDJDMS4yOTIgMzEuOTIgMCAzMC42MjYgMCAyMS41Njd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGQ6IFwiTTYuODg5IDYuMDE2QzUuMzIgMTUuOTYgNi4xNCAyNS4yNyA2LjE0IDI1LjI3aDQuOTA0Yy0uNDY2LTIuNDgzLTIuMTQtMTMuODI0LS43NDgtMTMuODYxLjc0Ni4xMTggNC4xNTYgOS42MjEgNC4xNTYgOS42MjFzLjc1MS0uMDkzIDEuNTA3LS4wOTNjLjc1NSAwIDEuNTA2LjA5MyAxLjUwNi4wOTNzMy40MS05LjUwMyA0LjE1Ny05LjYyMWMxLjM5Mi4wMzctLjI4MiAxMS4zNzgtLjc0OCAxMy44Nmg0LjkwNHMuODItOS4zMS0uNzQ4LTE5LjI1M2gtNC41NGMtLjg2NS4wMS00LjE1MyA1Ljc3Ny00LjUzMSA1Ljc3Ny0uMzc4IDAtMy42NjYtNS43NjctNC41My01Ljc3N0g2Ljg4OXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYycpLCBcIilcIiksXG4gICAgZDogXCJNMTQuOTkzIDI0LjEwOWExLjE2IDEuMTYgMCAxMS0yLjMyMiAwIDEuMTYgMS4xNiAwIDAxMi4zMjIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZCcpLCBcIilcIiksXG4gICAgZDogXCJNMTkuMjQ5IDI0LjEwOWExLjE2IDEuMTYgMCAxMS0yLjMyMiAwIDEuMTYgMS4xNiAwIDAxMi4zMjIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTI0LjggNi4zNDVjLjcwNyA0Ljc5Ljg3MyA5LjM4OC44NiAxMi44MTMtLjAxMyAzLjUwMy0uMjE0IDUuNzgtLjIxNCA1Ljc4aC00LjEyOGwtLjQ0My4zMzJoNC45MDRzLjgyLTkuMzEtLjc0OC0xOS4yNTRsLS4yMzIuMzI5em0tMTIuOTk2LS4xMjFjMS4yODggMS40MzMgMy41MTYgNS4yMzcgMy44MjMgNS4yMzctLjgxNy0xLjA0NS0yLjgyMy00LjM3OC0zLjgyMy01LjIzN3ptLTEuODQgNC44NTJjLTEuMzkyLjAzOC4yODIgMTEuMzc5Ljc0OSAxMy44NjFINi40M2wtLjI5LjMzM2g0LjkwNGMtLjQ2NC0yLjQ3LTIuMTIzLTEzLjcxLS43NjktMTMuODYxLS4xMjYtLjE5LS4yMzUtLjMyLS4zMTEtLjMzM3ptMTEuMzI2IDBjLS43NDYuMTE5LTQuMTU2IDkuNjIyLTQuMTU2IDkuNjIycy0uNzUxLS4wOTQtMS41MDctLjA5NGMtLjQ0NyAwLS44MzIuMDI4LTEuMDkyLjA1MmwtLjA4Mi4zNzRzLjc1MS0uMDkzIDEuNTA3LS4wOTNjLjc1NSAwIDEuNTA2LjA5MyAxLjUwNi4wOTNzMy4zODUtOS40NCA0LjE0Ni05LjYyMWMtLjA4Mi0uMjA4LS4xODMtLjMzLS4zMjItLjMzM3pcIixcbiAgICBvcGFjaXR5OiAwLjFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk02Ljg4OSA2LjAxNkM1LjMyIDE1Ljk2IDYuMTQgMjUuMjcgNi4xNCAyNS4yN2wuMjg5LS4zMjVjLS4xNDgtMi4xOTctLjU0My0xMC4xNC43OTEtMTguNTk3aDQuNTQxYy4wOTYuMDAyLjIyNS4wOC4zNzQuMjA4LS4yOTctLjMzLS41NDQtLjUzOC0uNzA2LS41NEg2Ljg4OXptMTMuNjAxIDBjLS44NjQuMDEtNC4xNTIgNS43NzctNC41MyA1Ljc3Ny4xNTQuMTk3LjI3OS4zMzMuMzMyLjMzMy4zNzggMCAzLjY2Ni01Ljc2NyA0LjUzLTUuNzc3aDQuMDA4bC4yLS4zMzNoLTQuNTR6bS05Ljg4MSA1LjcyNWMxLjEwMyAxLjY1NyAzLjg0NCA5LjI5IDMuODQ0IDkuMjlsLjA4LS4zNzNjLS42NzYtMS44NTYtMy4yNTYtOC44MTQtMy45MDMtOC45MTdoLS4wMjF6bTExLjM0NiAwYy43NCAxLjg4Ny0uNjYgMTEuMjk1LTEuMDggMTMuNTI5bC40NDQtLjM0OGMuNTY4LTMuMzMxIDEuOTM2LTEzLjE0Ni42MzYtMTMuMTh6XCIsXG4gICAgb3BhY2l0eTogMC4zXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01lbWNhY2hlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb01ldHJpY3MgPSBmdW5jdGlvbiBFdWlJY29uTG9nb01ldHJpY3MoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0YwNEU5OFwiLFxuICAgIGQ6IFwiTTIgMzJoMjhWMjBsLTYuNDY1LTYuNDY1YTUgNSAwIDAwLTcuMDcgMEwyIDI4djR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTYuNDY1IDEzLjUzNWwtMy41MzYgMy41MzZhOS45NjUgOS45NjUgMCAwMDcuMDcgMi45MyA5Ljk2NSA5Ljk2NSAwIDAwNy4wNzItMi45M2wtMy41MzYtMy41MzZhNSA1IDAgMDAtNy4wNyAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRUM1MTRcIixcbiAgICBkOiBcIk0xNC4zNDMgMTEuNDE0QTcuOTUxIDcuOTUxIDAgMDEyMCA5LjA3MWMyLjEzNyAwIDQuMTQ2LjgzMiA1LjY1NyAyLjM0M2wzLjIwNyAzLjIwN0E5Ljk1NSA5Ljk1NSAwIDAwMzAgMTAuMDAxYzAtNS41MjQtNC40NzctMTAtMTAtMTAtNS41MjIgMC0xMCA0LjQ3Ni0xMCAxMCAwIDEuNjY3LjQxNCAzLjIzNyAxLjEzNyA0LjYybDMuMjA2LTMuMjA3elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01ldHJpY3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Nb25nb2RiID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Nb25nb2RiKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE2Ljg0NCAzMS44NDdsLS44NDctLjI5cy4xMDQtNC4zMTUtMS40NDUtNC42MjVjLTEuMDMyLTEuMTk4LjE2NS01MC44IDMuODgyLS4xNjUgMCAwLTEuMjguNjQtMS41MDcgMS43MzUtLjI0OCAxLjA3NC0uMDgzIDMuMzQ1LS4wODMgMy4zNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNBNkEzODVcIixcbiAgICBkOiBcIk0xNi44NDQgMzEuODQ3bC0uODQ3LS4yOXMuMTA0LTQuMzE1LTEuNDQ1LTQuNjI1Yy0xLjAzMi0xLjE5OC4xNjUtNTAuOCAzLjg4Mi0uMTY1IDAgMC0xLjI4LjY0LTEuNTA3IDEuNzM1LS4yNDggMS4wNzQtLjA4MyAzLjM0NS0uMDgzIDMuMzQ1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZDogXCJNMTcuMjk5IDI3LjY3NnM3LjQxMy00Ljg3NCA1LjY3OC0xNS4wMTNjLTEuNjcyLTcuMzcyLTUuNjE2LTkuNzg4LTYuMDUtMTAuNzE4LS40NzUtLjY2LS45My0xLjgxNy0uOTMtMS44MTdsLjMxIDIwLjUwNmMwIC4wMi0uNjQgNi4yNzguOTkyIDcuMDQyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0OTlENEFcIixcbiAgICBkOiBcIk0xNy4yOTkgMjcuNjc2czcuNDEzLTQuODc0IDUuNjc4LTE1LjAxM2MtMS42NzItNy4zNzItNS42MTYtOS43ODgtNi4wNS0xMC43MTgtLjQ3NS0uNjYtLjkzLTEuODE3LS45My0xLjgxN2wuMzEgMjAuNTA2YzAgLjAyLS42NCA2LjI3OC45OTIgNy4wNDJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTE1LjU2NCAyNy45NDRzLTYuOTYtNC43NS02LjU0Ni0xMy4xMTNjLjM5Mi04LjM2MyA1LjMwNy0xMi40NzMgNi4yNTctMTMuMjE2LjYyLS42Ni42NC0uOTA5LjY4MS0xLjU3LjQzNC45My4zNTEgMTMuODk4LjQxMyAxNS40MjYuMTg2IDUuODg2LS4zMyAxMS4zNTgtLjgwNSAxMi40NzN6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM1OEFBNTBcIixcbiAgICBkOiBcIk0xNS41NjQgMjcuOTQ0cy02Ljk2LTQuNzUtNi41NDYtMTMuMTEzYy4zOTItOC4zNjMgNS4zMDctMTIuNDczIDYuMjU3LTEzLjIxNi42Mi0uNjYuNjQtLjkwOS42ODEtMS41Ny40MzQuOTMuMzUxIDEzLjg5OC40MTMgMTUuNDI2LjE4NiA1Ljg4Ni0uMzMgMTEuMzU4LS44MDUgMTIuNDczelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb01vbmdvZGI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29NeXNxbCA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvTXlzcWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIiMwMDU0NkJcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjkuNDU2IDI0LjI3NmMtMS43NC0uMDQzLTMuMDg4LjEzMS00LjIxOS42MS0uMzI2LjEzLS44NDguMTMtLjg5Mi41NDMuMTc0LjE3NC4xOTYuNDU3LjM0OC42OTYuMjYxLjQzNS43MTggMS4wMjIgMS4xMzEgMS4zMjcuNDU3LjM0OC45MTQuNjk2IDEuMzkyIDEgLjg0OC41MjIgMS44MDUuODI3IDIuNjMxIDEuMzQ5LjQ4LjMwNC45NTcuNjk1IDEuNDM2IDEuMDIyLjI0LjE3My4zOTEuNDU2LjY5Ni41NjV2LS4wNjVjLS4xNTMtLjE5Ni0uMTk2LS40NzktLjM0OC0uNjk2LS4yMTgtLjIxOC0uNDM1LS40MTMtLjY1My0uNjNhMTAuMzE2IDEwLjMxNiAwIDAwLTIuMjYxLTIuMTk3Yy0uNjk2LS40NzktMi4yMTktMS4xMzEtMi41MDEtMS45MzZsLS4wNDQtLjA0M2MuNDc5LS4wNDQgMS4wNDQtLjIxOCAxLjUtLjM0OC43NC0uMTk2IDEuNDE0LS4xNTMgMi4xNzUtLjM0OC4zNDgtLjA4Ny42OTYtLjE5NiAxLjA0NC0uMzA1di0uMTk1Yy0uMzkxLS4zOTItLjY3NC0uOTE0LTEuMDg3LTEuMjg0LTEuMTEtLjk1Ny0yLjMyNy0xLjg5Mi0zLjU4OC0yLjY3NC0uNjc1LS40MzUtMS41NDUtLjcxOC0yLjI2Mi0xLjA4OC0uMjYxLS4xMy0uNjk2LS4xOTYtLjg0OC0uNDEzLS4zOTItLjQ3OS0uNjEtMS4xMS0uODkyLTEuNjc1YTU0LjkyMiA1NC45MjIgMCAwMS0xLjc4My0zLjc4NGMtLjM5Mi0uODQ4LS42My0xLjY5Ni0xLjExLTIuNDc5LTIuMjQtMy42OTctNC42NzUtNS45MzctOC40MTYtOC4xMzQtLjgwNC0uNDU2LTEuNzYxLS42NTItMi43ODMtLjg5MS0uNTQ0LS4wMjItMS4wODgtLjA2NS0xLjYzMS0uMDg3LS4zNDgtLjE1Mi0uNjk2LS41NjYtMS0uNzYxLTEuMjQtLjc4My00LjQzNy0yLjQ4LTUuMzUtLjI0LS41ODggMS40MTQuODcgMi44MDYgMS4zNyAzLjUyNC4zNy41Ljg0OCAxLjA2NSAxLjEwOSAxLjYzLjE1Mi4zNy4xOTUuNzYyLjM0NyAxLjE1My4zNDguOTU3LjY3NSAyLjAyMyAxLjEzMSAyLjkxNC4yNC40NTcuNS45MzYuODA1IDEuMzQ5LjE3NC4yMzkuNDc4LjM0OC41NDQuNzQtLjMwNS40MzQtLjMyNyAxLjA4Ny0uNSAxLjYzLS43ODMgMi40NTgtLjQ3OSA1LjUwMi42MyA3LjMwNy4zNDguNTQ0IDEuMTc1IDEuNzQgMi4yODQgMS4yODQuOTc4LS4zOTIuNzYtMS42MzIgMS4wNDMtMi43MTkuMDY2LS4yNjEuMDIyLS40MzUuMTUzLS42MDl2LjA0NGMuMzA0LjYwOS42MDkgMS4xOTYuODkxIDEuODA1LjY3NSAxLjA2NSAxLjg0OSAyLjE3NCAyLjgyOCAyLjkxNC41MjIuMzkxLjkzNSAxLjA2NSAxLjU4NyAxLjMwNXYtLjA2NmgtLjA0M2MtLjEzLS4xOTUtLjMyNy0uMjgyLS41LS40MzUtLjM5Mi0uMzktLjgyNy0uODctMS4xMzEtMS4zMDQtLjkxNC0xLjIxOC0xLjcxOS0yLjU2Ny0yLjQzNi0zLjk1OC0uMzQ4LS42NzUtLjY1My0xLjQxNC0uOTM1LTIuMDg4LS4xMy0uMjYxLS4xMy0uNjUzLS4zNDgtLjc4My0uMzI3LjQ3OC0uODA1Ljg5Mi0xLjA0NCAxLjQ3OS0uNDEzLjkzNS0uNDU3IDIuMDg4LS42MSAzLjI4NC0uMDg2LjAyMS0uMDQzIDAtLjA4Ni4wNDMtLjY5Ni0uMTc0LS45MzUtLjg5MS0xLjE5Ni0xLjUtLjY1My0xLjU0NS0uNzYxLTQuMDI0LS4xOTYtNS44MDcuMTUyLS40NTcuODA1LTEuODkyLjU0NC0yLjMyNy0uMTMtLjQxMy0uNTY2LS42NTItLjgwNS0uOTc5YTguNzY0IDguNzY0IDAgMDEtLjc4My0xLjM5MmMtLjUyMi0xLjIxNy0uNzgzLTIuNTY2LTEuMzQ4LTMuNzg0LS4yNjEtLjU2NS0uNzE4LTEuMTUyLTEuMDg3LTEuNjc0LS40MTQtLjU4Ny0uODctMS0xLjE5Ny0xLjY5Ny0uMTA4LS4yMzktLjI2LS42My0uMDg3LS44OTEuMDQ0LS4xNzQuMTMtLjI0LjMwNS0uMjgzLjI4My0uMjQgMS4wODcuMDY1IDEuMzcuMTk2LjgwNS4zMjYgMS40NzkuNjMgMi4xNTMgMS4wODcuMzA0LjIxOC42My42MzEgMS4wMjIuNzRoLjQ1N2MuNjk2LjE1MiAxLjQ3OS4wNDMgMi4xMzEuMjM5IDEuMTUzLjM3IDIuMTk2LjkxMyAzLjEzMiAxLjVhMTkuMjk0IDE5LjI5NCAwIDAxNi43ODUgNy40MzhjLjI2MS41LjM3Ljk1Ny42MDkgMS40NzkuNDU3IDEuMDY2IDEuMDIyIDIuMTUzIDEuNDc5IDMuMTk3LjQ1NiAxLjAyMi44OTEgMi4wNjYgMS41NDQgMi45MTQuMzI2LjQ1NyAxLjYzLjY5NiAyLjIxOC45MzUuNDM1LjE5NiAxLjExLjM3IDEuNS42MS43NC40NTYgMS40OC45NzggMi4xNzUgMS40NzguMzQ4LjI2IDEuNDM2LjgwNSAxLjUwMSAxLjI0elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy4yNzMgNS4zNzhjLS4zNyAwLS42My4wNDMtLjg5MS4xMDl2LjA0M2guMDQzYy4xNzQuMzQ4LjQ3OS41ODcuNjk2Ljg5Mi4xNzQuMzQ4LjMyNi42OTYuNSAxLjA0NGwuMDQ0LS4wNDRjLjMwNC0uMjE3LjQ1Ny0uNTY1LjQ1Ny0xLjA4Ny0uMTMxLS4xNTItLjE1My0uMzA1LS4yNjEtLjQ1Ny0uMTMtLjIxOC0uNDE0LS4zMjYtLjU4OC0uNXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29NeXNxbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb05naW54ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29OZ2lueChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMTE5NjM5XCIsXG4gICAgZDogXCJNMTYgMGwxMy44NTYgOHYxNkwxNiAzMiAyLjE0NCAyNFY4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZGXCIsXG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIGQ6IFwiTTExLjE3IDEzLjUxMnY4LjM3NmExLjYwNyAxLjYwNyAwIDExLTMuMjE1IDBWOS42MzJjMC0xLjQzMiAxLjczMS0yLjE0OSAyLjc0NC0xLjEzNmw5LjUxIDkuNTEyVjkuNjMyYTEuNjA3IDEuNjA3IDAgMDEzLjIxNSAwdjEyLjI1NmMwIDEuNDMyLTEuNzMxIDIuMTQ5LTIuNzQ0IDEuMTM2bC05LjUxLTkuNTEyelwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb05naW54OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvT2JzZXJ2YWJpbGl0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDMySDcuMjM4QzMuNzkzIDMyIDEgMjguODY1IDEgMjQuOTk4VjE1aDl2MTd6XCIsXG4gICAgZmlsbDogXCIjRjA0RTk4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMTAgMzJoOVY4aC05elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMzEgMzJoLTlWMGwxLjk3My4wMjRDMjcuODY2LjA3MiAzMSAzLjczMSAzMSA4LjIyOFYzMnpcIixcbiAgICBmaWxsOiBcIiMwN0NcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb09ic2VydmFiaWxpdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29Pc3F1ZXJ5ID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Pc3F1ZXJ5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTTMxLjkwNy4wMzJ2Ny45NjlsLTcuOTUyIDcuOTUxVjcuOTY3TDMxLjkwNy4wMzJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzM1wiLFxuICAgIGQ6IFwiTTE2LjAwMy4wMzJ2Ny45NjlsNy45NTIgNy45NTFWNy45NjdMMTYuMDAzLjAzMlwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjQTU5NkZGXCIsXG4gICAgZDogXCJNMzEuOTIzIDMxLjg1NWgtNy45NjhsLTcuOTUyLTcuOTUxaDcuOTg1bDcuOTM1IDcuOTUxXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0zMS45MjMgMTUuOTUyaC03Ljk2OGwtNy45NTIgNy45NTJoNy45ODVsNy45MzUtNy45NTJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTS4xIDMxLjg3MnYtNy45NjhsNy45NTItNy45NTJ2Ny45ODVMLjEgMzEuODcyXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0xNi4wMDQgMzEuODcydi03Ljk2OGwtNy45NTItNy45NTJ2Ny45ODVsNy45NTIgNy45MzVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0E1OTZGRlwiLFxuICAgIGQ6IFwiTS4wODQuMDQ4aDcuOTY4TDE2LjAwNCA4SDguMDE5TC4wODQuMDQ4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMzMzNcIixcbiAgICBkOiBcIk0uMDg0IDE1Ljk1Mmg3Ljk2OEwxNi4wMDQgOEg4LjAxOUwuMDg0IDE1Ljk1MlwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb09zcXVlcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29QaHAgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1BocChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZ2VuZXJhdGVJZCA9IGh0bWxJZEdlbmVyYXRvcignbG9nb19waHAnKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgeG1sbnNYbGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJkZWZzXCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYScpLFxuICAgIGQ6IFwiTS4wMjggNy44NTRDLjAyOCAzLjUzNCA2LjY4OC4wMyAxNC45MDIuMDNzMTQuODc0IDMuNTAzIDE0Ljg3NCA3LjgyNGMwIDQuMzIyLTYuNjYgNy44MjUtMTQuODc0IDcuODI1LTguMjE1IDAtMTQuODc0LTMuNTAzLTE0Ljg3NC03LjgyNVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2QnKSxcbiAgICBkOiBcIk0wIDE3LjQzaDMwLjk4N1YwSDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZicpLFxuICAgIGQ6IFwiTTAgMTcuNDNoMzAuOTg3VjBIMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInJhZGlhbEdyYWRpZW50XCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnYicpLFxuICAgIGN4OiBcIjMwLjAyJVwiLFxuICAgIGN5OiBcIjgyLjQyMiVcIixcbiAgICByOiBcIjEyNC44MTQlXCIsXG4gICAgZng6IFwiMzAuMDIlXCIsXG4gICAgZnk6IFwiODIuNDIyJVwiLFxuICAgIGdyYWRpZW50VHJhbnNmb3JtOiBcIm1hdHJpeCguNTI2MDQgMCAwIDEgLjE0MiAwKVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiMCVcIixcbiAgICBzdG9wQ29sb3I6IFwiI0FFQjJENVwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwic3RvcFwiLCB7XG4gICAgb2Zmc2V0OiBcIjMwJVwiLFxuICAgIHN0b3BDb2xvcjogXCIjQUVCMkQ1XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJzdG9wXCIsIHtcbiAgICBvZmZzZXQ6IFwiNzUlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0ODRDODlcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInN0b3BcIiwge1xuICAgIG9mZnNldDogXCIxMDAlXCIsXG4gICAgc3RvcENvbG9yOiBcIiM0ODRDODlcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIHRyYW5zZm9ybTogXCJtYXRyaXgoMSAwIDAgLTEgLjAyNiAyNS40MTMpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoLjU5MiAuODYpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcIm1hc2tcIiwge1xuICAgIGlkOiBnZW5lcmF0ZUlkKCdjJyksXG4gICAgZmlsbDogXCIjZmZmXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInVzZVwiLCB7XG4gICAgeGxpbmtIcmVmOiBcIiNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnYScpKVxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2InKSwgXCIpXCIpLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBtYXNrOiBcInVybCgjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2MnKSwgXCIpXCIpXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uMDI4IDcuODU0Qy4wMjggMy41MzQgNi42ODguMDMgMTQuOTAyLjAzczE0Ljg3NCAzLjUwMyAxNC44NzQgNy44MjRjMCA0LjMyMi02LjY2IDcuODI1LTE0Ljg3NCA3LjgyNS04LjIxNSAwLTE0Ljg3NC0zLjUwMy0xNC44NzQtNy44MjVcIlxuICB9KSkpLCBfX19FbW90aW9uSlNYKFwibWFza1wiLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoJ2UnKSxcbiAgICBmaWxsOiBcIiNmZmZcIlxuICB9LCBfX19FbW90aW9uSlNYKFwidXNlXCIsIHtcbiAgICB4bGlua0hyZWY6IFwiI1wiLmNvbmNhdChnZW5lcmF0ZUlkKCdkJykpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZScpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzc3N0JCM1wiLFxuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0xNS40OTQgMS40NzJjNy44OTQgMCAxNC4yOTMgMy4yNDMgMTQuMjkzIDcuMjQzcy02LjQgNy4yNDQtMTQuMjkzIDcuMjQ0Yy03Ljg5NCAwLTE0LjI5My0zLjI0My0xNC4yOTMtNy4yNDQgMC00IDYuNC03LjI0MyAxNC4yOTMtNy4yNDNcIlxuICB9KSksIF9fX0Vtb3Rpb25KU1goXCJtYXNrXCIsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgnZycpLFxuICAgIGZpbGw6IFwiI2ZmZlwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJ1c2VcIiwge1xuICAgIHhsaW5rSHJlZjogXCIjXCIuY29uY2F0KGdlbmVyYXRlSWQoJ2YnKSlcbiAgfSkpLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbFJ1bGU6IFwibm9uemVyb1wiLFxuICAgIG1hc2s6IFwidXJsKCNcIi5jb25jYXQoZ2VuZXJhdGVJZCgnZycpLCBcIilcIilcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTguNzAxIDcuODE3Yy42NSAwIDEuMTM0LjEyIDEuNDQuMzU2LjMwNC4yMzMuNTEzLjYzOC42MjMgMS4yMDIuMTAzLjUyOC4wNjQuODk2LS4xMTYgMS4wOTUtLjE4My4yMDMtLjU4LjMwNi0xLjE3Ny4zMDZIOC40MzNsLS41NzUtMi45NTloLjg0M3pNNS4zMSA0LjE3MmEuMTYxLjE2MSAwIDAwLS4xNTkuMTkzbDEuNTI0IDcuODRjLjAxNS4wNzYuMDgyLjEzMS4xNTkuMTMxaDMuMjg0YzEuMDMzIDAgMS44MDEtLjI4IDIuMjg0LS44MzMuNDg1LS41NTYuNjM1LTEuMzMzLjQ0Ni0yLjMwOWEzLjY4NiAzLjY4NiAwIDAwLS4zOTUtMS4wOTggMy42NzYgMy42NzYgMCAwMC0uNzI3LS45MSAzLjE4OSAzLjE4OSAwIDAwLTEuMTk3LS43MThjLS40My0uMTQtLjk4My0uMjEtMS42NDMtLjIxaC0xLjMzbC0uMzgtMS45NTVhLjE2MS4xNjEgMCAwMC0uMTU4LS4xM0g1LjMwOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTguNTY2IDEwLjYxNWguOTA1Yy43MjIgMCAuOTcyLS4xNTggMS4wNTgtLjI1My4xNDEtLjE1Ny4xNjgtLjQ4Ny4wNzctLjk1Ni0uMTAyLS41MjQtLjI5MS0uODk2LS41NjMtMS4xMDUtLjI3Ny0uMjE0LS43MjktLjMyMi0xLjM0MS0uMzIyaC0uNjQ4bC41MTIgMi42MzZ6bTEuNTUxIDEuODgzSDYuODMzYS4zMjMuMzIzIDAgMDEtLjMxNy0uMjYxTDQuOTkyIDQuMzk2YS4zMjMuMzIzIDAgMDEuMzE3LS4zODVoMS43MDhjLjE1NSAwIC4yODcuMTEuMzE3LjI2MmwuMzU0IDEuODIzaDEuMTk3Yy42NzcgMCAxLjI0Ny4wNzQgMS42OTQuMjIuNDYuMTQ5Ljg4Mi40MDIgMS4yNTYuNzUyLjMxLjI4NC41NjQuNjA0Ljc1OC45NS4xOTMuMzQ1LjMzMS43MzEuNDEyIDEuMTQ2LjIgMS4wMjcuMDM4IDEuODUtLjQ4MiAyLjQ0Ni0uNTE1LjU5LTEuMzI1Ljg4OC0yLjQwNi44ODh6TTcuNjYzIDcuNjU2aDEuMDM5Yy42ODggMCAxLjIwMS4xMyAxLjUzOC4zOS4zMzcuMjU5LjU2NS42OTIuNjgzIDEuMjk5LjExMy41ODMuMDYxLjk5NC0uMTU1IDEuMjMzLS4yMTYuMjQtLjY0OC4zNi0xLjI5Ny4zNkg4LjNsLS42MzgtMy4yODJ6bTIuNDU0IDQuNTJjLjk4OSAwIDEuNzEtLjI2IDIuMTYyLS43NzkuNDUzLS41MTguNTktMS4yNDIuNDEtMi4xNzJhMy41MSAzLjUxIDAgMDAtLjM3OC0xLjA1IDMuNTAyIDMuNTAyIDAgMDAtLjY5NS0uODcgMy4wMTcgMy4wMTcgMCAwMC0xLjEzNy0uNjgzYy0uNDE3LS4xMzUtLjk0OC0uMjAzLTEuNTk0LS4yMDNINy40MjJsLS40MDUtMi4wODVINS4zMDlsMS41MjQgNy44NDFoMy4yODR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0xNi43NjMgNi4yNTdhLjE2MS4xNjEgMCAwMC0uMTU5LjE5MmwuNjc0IDMuNDdjLjA2NC4zMy4wNDkuNTY2LS4wNDQuNjY2LS4wNTcuMDYxLS4yMjguMTY0LS43MzIuMTY0SDE1LjI4bC0uODQ3LTQuMzYxYS4xNjEuMTYxIDAgMDAtLjE1OS0uMTMxSDEyLjU4YS4xNjEuMTYxIDAgMDAtLjE1OS4xOTJsMS41MjQgNy44NDFjLjAxNS4wNzYuMDgyLjEzLjE1OS4xM2gxLjY5NGEuMTYxLjE2MSAwIDAwLjE1OS0uMTkxbC0uMzY4LTEuODkzaDEuMzE0YzEgMCAxLjY4LS4xNzYgMi4wNzUtLjU0LjQwMy0uMzcuNTI5LS45NjIuMzc0LTEuNzZsLS43MS0zLjY0OGEuMTYxLjE2MSAwIDAwLS4xNTgtLjEzMWgtMS43MjF6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xNS43OTkgMTQuNTgyaC0xLjY5NWEuMzIzLjMyMyAwIDAxLS4zMTctLjI2MUwxMi4yNjMgNi40OGEuMzIzLjMyMyAwIDAxLjMxNy0uMzg1aDEuNjk1Yy4xNTQgMCAuMjg3LjExLjMxNy4yNjJsLjgyMiA0LjIzaDEuMDg4Yy41MDQgMCAuNjEtLjEwNy42MTQtLjExMi4wMy0uMDMzLjA3LS4xODUuMDA0LS41MjZsLS42NzQtMy40N2EuMzIzLjMyMyAwIDAxLjMxNy0uMzg0aDEuNzIxYy4xNTUgMCAuMjg4LjExLjMxNy4yNjJsLjcxIDMuNjQ4Yy4xNjYuODU3LjAyMyAxLjUtLjQyNCAxLjkxLS40MjYuMzkyLTEuMTQuNTgyLTIuMTg0LjU4MmgtMS4xMThsLjMzIDEuN2EuMzIzLjMyMyAwIDAxLS4zMTYuMzg1bTAtLjMyM2wtLjQwNi0yLjA4NGgxLjUxYy45NSAwIDEuNjA1LS4xNjYgMS45NjYtLjQ5Ny4zNi0uMzMyLjQ2OC0uODY5LjMyNC0xLjYxMWwtLjcwOS0zLjY0OWgtMS43MjFsLjY3NCAzLjQ3Yy4wNzcuMzk0LjA0OC42NjMtLjA4NS44MDctLjEzMy4xNDMtLjQxNi4yMTUtLjg1LjIxNWgtMS4zNTRsLS44NzMtNC40OTJIMTIuNThsMS41MjQgNy44NDFoMS42OTVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwMFwiLFxuICAgIGQ6IFwiTTIyLjAzMyA3LjgxN2MuNjUgMCAxLjEzNC4xMiAxLjQ0LjM1Ni4zMDQuMjMzLjUxMy42MzguNjIzIDEuMjAyLjEwMy41MjguMDY0Ljg5Ni0uMTE2IDEuMDk1LS4xODMuMjAzLS41OC4zMDYtMS4xNzcuMzA2aC0xLjAzOGwtLjU3NS0yLjk1OWguODQzem0tMy4zOTItMy42NDVhLjE2MS4xNjEgMCAwMC0uMTU5LjE5M2wxLjUyNCA3Ljg0Yy4wMTUuMDc2LjA4Mi4xMzEuMTU5LjEzMWgzLjI4NGMxLjAzMyAwIDEuODAxLS4yOCAyLjI4NC0uODMzLjQ4NS0uNTU2LjYzNS0xLjMzMy40NDYtMi4zMDlhMy42ODkgMy42ODkgMCAwMC0uMzk1LTEuMDk4IDMuNjc2IDMuNjc2IDAgMDAtLjcyNy0uOTEgMy4xODkgMy4xODkgMCAwMC0xLjE5Ny0uNzE4Yy0uNDMtLjE0LS45ODMtLjIxLTEuNjQzLS4yMWgtMS4zM2wtLjM4LTEuOTU1YS4xNjEuMTYxIDAgMDAtLjE1OC0uMTNIMTguNjR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0yMS44OTggMTAuNjE1aC45MDVjLjcyMiAwIC45NzItLjE1OCAxLjA1OC0uMjUzLjE0MS0uMTU3LjE2OC0uNDg3LjA3Ny0uOTU2LS4xMDItLjUyNC0uMjkyLS44OTYtLjU2My0xLjEwNS0uMjc3LS4yMTQtLjcyOS0uMzIyLTEuMzQxLS4zMjJoLS42NDhsLjUxMiAyLjYzNnptMS41NTEgMS44ODNoLTMuMjg0YS4zMjMuMzIzIDAgMDEtLjMxNy0uMjYxbC0xLjUyNC03Ljg0MWEuMzIzLjMyMyAwIDAxLjMxNy0uMzg1aDEuNzA4Yy4xNTUgMCAuMjg3LjExLjMxNy4yNjJsLjM1NCAxLjgyM2gxLjE5N2MuNjc3IDAgMS4yNDcuMDc0IDEuNjk0LjIyLjQ2LjE0OS44ODIuNDAyIDEuMjU2Ljc1Mi4zMS4yODQuNTY0LjYwNC43NTguOTUuMTkzLjM0NS4zMzEuNzMxLjQxMiAxLjE0Ni4yIDEuMDI3LjAzOCAxLjg1LS40ODIgMi40NDYtLjUxNS41OS0xLjMyNS44ODgtMi40MDYuODg4em0tMi40NTQtNC44NDJoMS4wMzljLjY4OCAwIDEuMjAxLjEzIDEuNTM4LjM5LjMzNy4yNTkuNTY1LjY5Mi42ODMgMS4yOTkuMTEzLjU4My4wNjEuOTk0LS4xNTUgMS4yMzMtLjIxNi4yNC0uNjQ4LjM2LTEuMjk3LjM2aC0xLjE3bC0uNjM4LTMuMjgyem0yLjQ1NCA0LjUyYy45ODkgMCAxLjcxLS4yNiAyLjE2Mi0uNzc5LjQ1NC0uNTE4LjU5LTEuMjQyLjQxLTIuMTcyYTMuNTEgMy41MSAwIDAwLS4zNzgtMS4wNSAzLjUwMiAzLjUwMiAwIDAwLS42OTUtLjg3IDMuMDE3IDMuMDE3IDAgMDAtMS4xMzctLjY4M2MtLjQxNy0uMTM1LS45NDgtLjIwMy0xLjU5NC0uMjAzaC0xLjQ2M2wtLjQwNS0yLjA4NWgtMS43MDhsMS41MjQgNy44NDFoMy4yODR6XCJcbiAgfSkpKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1BocDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1Bvc3RncmVzID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Qb3N0Z3JlcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMDBcIixcbiAgICBkOiBcIk0zMS44NzYgMTkuMTYyYy0uMTkyLS41NjQtLjY5NS0uOTU2LTEuMzQ1LTEuMDUtLjMwNi0uMDQ1LS42NTctLjAyNi0xLjA3Mi4wNTctLjcyNC4xNDUtMS4yNjEuMi0xLjY1NC4yMTEgMS40OC0yLjQyMiAyLjY4My01LjE4NSAzLjM3Ni03Ljc4NSAxLjEyLTQuMjA1LjUyMS02LjEyLS4xNzgtNi45ODctMS44NS0yLjI5My00LjU1MS0zLjUyNS03LjgwOS0zLjU2M2ExNC4yMzkgMTQuMjM5IDAgMDAtNC4wNi41NTEgMTUuNTczIDE1LjU3MyAwIDAwLTIuMzczLS4yMWMtMS41NjctLjAyNC0yLjk1Mi4zMDctNC4xMzUuOTg4YTE5LjMzNCAxOS4zMzQgMCAwMC0yLjkyLS43MTFDNi44NS4yMDggNC41NDkuNTYzIDIuODY2IDEuNzE2LjgyOCAzLjExMi0uMTE3IDUuNTM3LjA1OCA4LjkyNi4xMTMgMTAgLjczNCAxMy4yNzMgMS43MSAxNi4zNzZjLjU2MSAxLjc4NCAxLjE2IDMuMjY2IDEuNzggNC40MDQuODc4IDEuNjE0IDEuODE4IDIuNTY0IDIuODczIDIuOTA2LjU5MS4xOSAxLjY2Ni4zMjUgMi43OTYtLjU4OC4xNDMuMTY4LjMzNC4zMzUuNTg4LjQ5LjMyMi4xOTguNzE2LjM1OSAxLjEwOS40NTQgMS40MTguMzQ0IDIuNzQ1LjI1OCAzLjg3OC0uMjI0LjAwNy4xOTUuMDEzLjM4Mi4wMTcuNTQzLjAwOC4yNjIuMDE1LjUxOC4wMjUuNzU4LjA2NyAxLjYyLjE4MSAyLjg4MS41MTggMy43NjNsLjA3LjIwMWMuMTY4LjUuNDQ5IDEuMzM1IDEuMTY0IDEuOTkuNzQuNjc3IDEuNjM3Ljg4NSAyLjQ1Ny44ODUuNDEyIDAgLjgwNC0uMDUyIDEuMTQ5LS4xMjQgMS4yMjctLjI1NSAyLjYyMS0uNjQzIDMuNjMtMi4wMzYuOTUzLTEuMzE2IDEuNDE3LTMuMjk5IDEuNS02LjQyM2wuMDMxLS4yNTMuMDItLjE2NS4yMjUuMDE5LjA1OC4wMDRjMS4yNS4wNTUgMi43NzktLjIwMiAzLjcxOC0uNjI1Ljc0MS0uMzM0IDMuMTE5LTEuNTUgMi41NTktMy4xOTRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzMzNjc5MVwiLFxuICAgIGQ6IFwiTTI5LjczOCAxOS40ODFjLTMuNzE3Ljc0NC0zLjk3My0uNDc2LTMuOTczLS40NzYgMy45MjUtNS42NDggNS41NjYtMTIuODE3IDQuMTUtMTQuNTcxQzI2LjA1Mi0uMzUyIDE5LjM2NSAxLjkxIDE5LjI1NCAxLjk3bC0uMDM2LjAwNmExMy42NTcgMTMuNjU3IDAgMDAtMi40OC0uMjVjLTEuNjgyLS4wMjctMi45NTguNDI3LTMuOTI3IDEuMTQgMCAwLTExLjkyOC00Ljc2Ni0xMS4zNzQgNS45OTIuMTE4IDIuMjg5IDMuMzgzIDE3LjMxOCA3LjI3OCAxMi43NzlhNzAuNDQzIDcwLjQ0MyAwIDAxMi43OTgtMy4wNjRjLjY4My40NCAxLjUwMS42NjUgMi4zNTguNTg0bC4wNjctLjA1NWMtLjAyLjIwNi0uMDExLjQwOC4wMjcuNjQ3LTEuMDA0IDEuMDg3LS43MDkgMS4yNzctMi43MTQgMS42NzgtMi4wMy40MDUtLjgzNyAxLjEyNy0uMDYgMS4zMTYuOTQ0LjIyOSAzLjEyNy41NTMgNC42MDItMS40NWwtLjA1OC4yM2MuMzkzLjMwNC42NjkgMS45ODUuNjIzIDMuNTA4LS4wNDcgMS41MjQtLjA3OCAyLjU3LjIzMiAzLjM4Ny4zMS44MTcuNjE5IDIuNjU1IDMuMjU1IDIuMTA3IDIuMjAzLS40NTggMy4zNDUtMS42NDQgMy41MDMtMy42MjMuMTEzLTEuNDA3LjM2OC0xLjE5OS4zODQtMi40NTdsLjIwNS0uNTk1Yy4yMzYtMS45MDcuMDM3LTIuNTIyIDEuMzk0LTIuMjM2bC4zMy4wMjhjMSAuMDQ0IDIuMzA3LS4xNTYgMy4wNzQtLjUwMiAxLjY1Mi0uNzQzIDIuNjMyLTEuOTg1IDEuMDAzLTEuNjU5XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0xMy41MSA5Ljg4MmMtLjMzNS0uMDQ1LS42MzktLjAwNC0uNzkyLjExYS4yOC4yOCAwIDAwLS4xMi4xODdjLS4wMi4xMzMuMDc3LjI4Mi4xMzYuMzU4LjE2OS4yMTYuNDE0LjM2NS42NTguMzk4LjAzNS4wMDQuMDcuMDA3LjEwNS4wMDcuNDA1IDAgLjc3NC0uMzA3LjgwNy0uNTMzLjA0LS4yODMtLjM4My0uNDcyLS43OTUtLjUyN20xMS4wOTkuMDA5Yy0uMDMyLS4yMjItLjQ0LS4yODUtLjgyNi0uMjMzLS4zODYuMDUyLS43Ni4yMi0uNzMuNDQzLjAyNi4xNzMuMzQ4LjQ2OC43My40NjhhLjcxOC43MTggMCAwMC4wOTctLjAwNi45NDcuOTQ3IDAgMDAuNTMtLjI4MWMuMTM1LS4xMzguMjEzLS4yOTEuMTk5LS4zOTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGQ6IFwiTTMwLjk3NSAxOS4zOTdjLS4xNDItLjQxNi0uNTk4LS41NS0xLjM1Ni0uMzk4LTIuMjUuNDUtMy4wNTYuMTM5LTMuMzIxLS4wNSAxLjc1LTIuNTg0IDMuMTg5LTUuNzA4IDMuOTY1LTguNjIzLjM2OC0xLjM4LjU3LTIuNjYzLjU4Ny0zLjcwOC4wMTktMS4xNDctLjE4My0xLjk5LS41OTgtMi41MDUtMS42NzUtMi4wNzUtNC4xMzQtMy4xODktNy4xMS0zLjIyLTIuMDQ3LS4wMjItMy43NzUuNDg2LTQuMTEuNjI5YTEwLjU0OSAxMC41NDkgMCAwMC0yLjMxMy0uMjg4Yy0xLjUzNi0uMDI0LTIuODY0LjMzMi0zLjk2MyAxLjA2YTE4LjEzMSAxOC4xMzEgMCAwMC0zLjIyLS44MmMtMi42MS0uNDA3LTQuNjgzLS4wOTgtNi4xNjMuOTE4QzEuNjA4IDMuNjA1Ljc5MyA1Ljc3My45NTEgOC44MzZjLjA1MyAxLjAzLjY1OCA0LjIgMS42MTQgNy4yMzYgMS4yNTggMy45OTYgMi42MjUgNi4yNTcgNC4wNjMgNi43MjMuMTY5LjA1NC4zNjMuMDkyLjU3Ny4wOTIuNTI1IDAgMS4xNjgtLjIzIDEuODM4LTEuMDFhNjQuODk0IDY0Ljg5NCAwIDAxMi41MzItMi43NzggNC4xOCA0LjE4IDAgMDAxLjgyMi40NzVsLjAwNS4wNDhjLS4xMS4xMjctLjIxNy4yNTUtLjMyMS4zODUtLjQ0LjU0Mi0uNTMyLjY1NS0xLjk1LjkzOC0uNDAzLjA4LTEuNDczLjI5NC0xLjQ4OSAxLjAyMi0uMDE3Ljc5NSAxLjI2NiAxLjEzIDEuNDEyIDEuMTY1LjUwOS4xMjMgMSAuMTg0IDEuNDY3LjE4NCAxLjEzOCAwIDIuMTQtLjM2MyAyLjk0LTEuMDY0LS4wMjUgMi44MzQuMDk3IDUuNjI4LjQ0OCA2LjQ3OS4yODguNjk2Ljk5IDIuNCAzLjIwOCAyLjM5OWE1LjMgNS4zIDAgMDAxLjA3OC0uMTE5YzIuMzE1LS40OCAzLjMyLTEuNDczIDMuNzEtMy42Ni4yMDgtMS4xNy41NjUtMy45NjEuNzMzLTUuNDU5LjM1NC4xMDcuODEuMTU2IDEuMzA0LjE1NiAxLjAyOSAwIDIuMjE2LS4yMTIgMi45NjEtLjU0Ny44MzctLjM3NyAyLjM0Ni0xLjMgMi4wNzItMi4xMDR6TTI1LjQ2MiA5LjI3OGMtLjAwOC40NDItLjA3Ljg0NC0uMTM3IDEuMjYyLS4wNzIuNDUxLS4xNDUuOTE3LS4xNjQgMS40ODItLjAxOS41NS4wNTIgMS4xMjMuMTIgMS42NzYuMTQgMS4xMTguMjgyIDIuMjY4LS4yNjkgMy40MDNhNC4zNyA0LjM3IDAgMDEtLjI0My0uNDg1Yy0uMDY5LS4xNjEtLjIxNy0uNDItLjQyMy0uNzc3LS44LTEuMzktMi42NzMtNC42NDgtMS43MTQtNS45NzcuMjg2LS4zOTYgMS4wMS0uODAzIDIuODMtLjU4NHptLTIuMjA2LTcuNDljMi42NjcuMDU4IDQuNzc3IDEuMDI1IDYuMjcgMi44NzYgMS4xNDYgMS40Mi0uMTE2IDcuODc5LTMuNzY3IDEzLjQ1bC0uMTExLS4xMzUtLjA0Ni0uMDU2Yy45NDMtMS41MS43NTktMy4wMDYuNTk1LTQuMzMxLS4wNjgtLjU0NC0uMTMyLTEuMDU4LS4xMTUtMS41NDEuMDE2LS41MTEuMDg2LS45NS4xNTQtMS4zNzUuMDgyLS41MjIuMTY3LTEuMDYzLjE0NC0xLjcwMWEuNjg0LjY4NCAwIDAwLjAxNS0uMjRjLS4wNi0uNjExLS43OC0yLjQ0MS0yLjI0Ny00LjA5OGExMC4wOTQgMTAuMDk0IDAgMDAtMy41NzItMi42MDQgMTIuNDA3IDEyLjQwNyAwIDAxMi42OC0uMjQ0ek04LjMzNCAyMS4zMDdjLS43MzcuODYtMS4yNDYuNjk1LTEuNDE0LjY0MS0xLjA5MS0uMzUzLTIuMzU3LTIuNTktMy40NzQtNi4xMzYtLjk2Ni0zLjA2OS0xLjUzLTYuMTU1LTEuNTc1LTcuMDItLjE0MS0yLjczNy41NDMtNC42NDQgMi4wMzMtNS42NjkgMi40MjYtMS42NjggNi40MTQtLjY3IDguMDE2LS4xNjMtLjAyMy4wMjItLjA0Ny4wNDItLjA3LjA2NS0yLjYzIDIuNTc1LTIuNTY3IDYuOTc0LTIuNTYgNy4yNDMgMCAuMTA0LjAwOC4yNTEuMDIuNDUzLjA0Ni43NC4xMyAyLjExNy0uMDk1IDMuNjc3LS4yMDkgMS40NS4yNTIgMi44NjggMS4yNjQgMy44OTIuMTA0LjEwNS4yMTMuMjA1LjMyNy4zLS40NS40NjctMS40MyAxLjUwMi0yLjQ3MiAyLjcxN3ptMi44MS0zLjYzNWMtLjgxNi0uODI2LTEuMTg2LTEuOTc0LTEuMDE3LTMuMTUuMjM4LTEuNjQ4LjE1LTMuMDgzLjEwMy0zLjg1NGwtLjAxNi0uMjc3Yy4zODQtLjMzIDIuMTY1LTEuMjU1IDMuNDM0LS45NzMuNTguMTI5LjkzMi41MTEgMS4wOCAxLjE3Ljc1OSAzLjQwNi4xIDQuODI1LS40MyA1Ljk2Ni0uMTA5LjIzNS0uMjEyLjQ1OC0uMy42ODdsLS4wNjguMTc4Yy0uMTczLjQ1LS4zMzQuODY3LS40MzQgMS4yNjRhMy4zMjUgMy4zMjUgMCAwMS0yLjM1Mi0xLjAxMXptLjEzMyA0LjU5NGEyLjA3IDIuMDcgMCAwMS0uNjE0LS4yNTZjLjExMS0uMDUxLjMxLS4xMi42NTQtLjE5IDEuNjY4LS4zMzIgMS45MjUtLjU2NyAyLjQ4Ny0xLjI2LjEzLS4xNTguMjc1LS4zMzguNDc4LS41NTcuMzAxLS4zMjguNDQtLjI3Mi42OS0uMTcyLjIwMi4wODIuNC4zMjguNDguNTk5LjAzNy4xMjguMDguMzctLjA2LjU2LTEuMTc0IDEuNTk1LTIuODg2IDEuNTc0LTQuMTE1IDEuMjc2em04LjcyNSA3Ljg3M2MtMi4wNC40MjQtMi43NjEtLjU4Ni0zLjIzNy0xLjc0LS4zMDgtLjc0NC0uNDU5LTQuMTAyLS4zNTEtNy44MWEuNDM0LjQzNCAwIDAwLS4wMi0uMTQzIDEuODIzIDEuODIzIDAgMDAtLjA1Ny0uMjYyYy0uMTYtLjU0LS41NDgtLjk5LTEuMDEzLTEuMTc4LS4xODUtLjA3NC0uNTI1LS4yMS0uOTMzLS4xMS4wODctLjM0Ny4yMzgtLjc0LjQwMi0xLjE2NWwuMDY4LS4xNzhjLjA3OC0uMjAyLjE3NS0uNDEuMjc3LS42MzIuNTU0LTEuMTk0IDEuMzEzLTIuODI5LjQ5LTYuNTIyLS4zMDktMS4zODQtMS4zNC0yLjA2LTIuOTAxLTEuOTAzLS45MzYuMDk0LTEuNzkzLjQ2LTIuMjIuNjdhNy4yNTUgNy4yNTUgMCAwMC0uMjU1LjEzMmMuMTItMS4zOTQuNTctNCAyLjI1NS01LjY0NyAxLjA2Mi0xLjAzOCAyLjQ3NS0xLjU1IDQuMTk2LTEuNTIzIDMuMzkzLjA1NCA1LjU2OSAxLjc0MiA2Ljc5NiAzLjE1IDEuMDU4IDEuMjExIDEuNjMxIDIuNDMzIDEuODYgMy4wOTEtMS43Mi0uMTctMi44ODkuMTYtMy40ODIuOTgyLTEuMjkgMS43ODcuNzA2IDUuMjU3IDEuNjY1IDYuOTI0LjE3NS4zMDYuMzI3LjU3LjM3NS42ODIuMzEyLjczNC43MTYgMS4yMjQgMS4wMTIgMS41ODIuMDkuMTEuMTc4LjIxNS4yNDUuMzA4LS41MjEuMTQ2LTEuNDU2LjQ4Mi0xLjM3MSAyLjE2NC0uMDY5Ljg0My0uNTU4IDQuNzkzLS44MDYgNi4xODktLjMyOCAxLjg0My0xLjAyOCAyLjUzLTIuOTk1IDIuOTM5em04LjUxMy05LjQ0N2MtLjUzMi4yNC0xLjQyNC40Mi0yLjI3LjQ1OC0uOTM1LjA0My0xLjQxMS0uMTAxLTEuNTIzLS4xOS0uMDUzLTEuMDQ4LjM1LTEuMTU3Ljc3NS0xLjI3M2EzLjM1IDMuMzUgMCAwMC4xOTUtLjA1OGMuMDQuMDMxLjA4Mi4wNjIuMTMuMDkyLjc1LjQ4MSAyLjA5MS41MzMgMy45ODQuMTU0bC4wMi0uMDA0Yy0uMjU1LjIzMi0uNjkyLjU0Mi0xLjMxLjgyMXpcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29Qb3N0Z3JlczsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1Byb21ldGhldXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1Byb21ldGhldXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFNjUyMkNcIixcbiAgICBkOiBcIk0xNS45MDcuMTg3QzcuMTIyLjE4NyAwIDcuMzA4IDAgMTYuMDkzUzcuMTIyIDMyIDE1LjkwNyAzMmM4Ljc4NCAwIDE1LjkwNi03LjEyMSAxNS45MDYtMTUuOTA2UzI0LjY5LjE4NyAxNS45MDcuMTg3em0wIDI5Ljc3Yy0yLjUgMC00LjUyNi0xLjY3LTQuNTI2LTMuNzI5aDkuMDUxYzAgMi4wNi0yLjAyNiAzLjczLTQuNTI1IDMuNzN6bTcuNDc1LTQuOTYzSDguNDN2LTIuNzExaDE0Ljk1djIuNzF6bS0uMDU0LTQuMTA3SDguNDczYy0uMDUtLjA1Ny0uMS0uMTEzLS4xNDctLjE3LTEuNTMtMS44NTktMS44OTEtMi44MjktMi4yNDEtMy44MTgtLjAwNi0uMDMyIDEuODU1LjM4IDMuMTc2LjY3OCAwIDAgLjY3OS4xNTcgMS42NzIuMzM4LS45NTMtMS4xMTgtMS41Mi0yLjUzOS0xLjUyLTMuOTkxIDAtMy4xODkgMi40NDYtNS45NzUgMS41NjQtOC4yMjcuODU4LjA3IDEuNzc3IDEuODEyIDEuODM5IDQuNTM3LjkxMy0xLjI2MiAxLjI5NS0zLjU2NiAxLjI5NS00Ljk3OCAwLTEuNDYzLjk2My0zLjE2MSAxLjkyNy0zLjIyLS44NiAxLjQxNy4yMjMgMi42MyAxLjE4NCA1LjY0Mi4zNjEgMS4xMzIuMzE1IDMuMDM1LjU5NCA0LjI0My4wOTItMi41MDguNTIzLTYuMTY3IDIuMTE0LTcuNDMtLjcwMiAxLjU5MS4xMDQgMy41ODEuNjU1IDQuNTM4Ljg4OSAxLjU0NCAxLjQyOCAyLjcxNCAxLjQyOCA0LjkyNiAwIDEuNDgzLS41NDggMi44OC0xLjQ3MiAzLjk3MSAxLjA1LS4xOTcgMS43NzYtLjM3NCAxLjc3Ni0uMzc0bDMuNDExLS42NjZzLS40OTUgMi4wMzgtMi40IDQuMDAxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUHJvbWV0aGV1czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1JhYmJpdG1xID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29SYWJiaXRtcShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0Y2MFwiLFxuICAgIGQ6IFwiTTMwLjA4MyAxMy4xOTdoLTkuODc4Yy0uNzktLjA4OC0xLjM5MS0uNzQtMS4zOTEtMS41MDhWMS45N2MwLS44My0uNzE4LTEuNDk1LTEuNTk1LTEuNDk1aC0zLjQ1NmMtLjg4NSAwLTEuNTk1LjY3Mi0xLjU5NSAxLjQ5NXY5LjgyYy0uMDQzLjc0LS42OTYgMS4zMzgtMS40NzggMS40MDZIOC4xMDJjLS43Ni0uMDg4LTEuMzQ4LS42ODYtMS4zOTgtMS40MDZWMS45N2MwLS44My0uNzE4LTEuNDk1LTEuNTk1LTEuNDk1SDEuNjUyQy43NjguNDc2LjA1OCAxLjE0OC4wNTggMS45N3YyOC4zNThjMCAuODMuNzE3IDEuNDk1IDEuNTk0IDEuNDk1aDI4LjQzOWMuODg0IDAgMS41OTQtLjY3MyAxLjU5NC0xLjQ5NVYxNC42OTJjLS4wMDctLjgyOS0uNzE4LTEuNDk1LTEuNjAyLTEuNDk1em0tNC41NSAxMC43MjRjMCAuODI5LS43MTggMS40OTUtMS41OTUgMS40OTVIMjAuNDhjLS44ODQgMC0xLjU5NS0uNjczLTEuNTk1LTEuNDk1di0zLjA1OGMwLS44My43MTgtMS40OTUgMS41OTUtMS40OTVoMy40NTdjLjg4NCAwIDEuNTk0LjY3MiAxLjU5NCAxLjQ5NXYzLjA1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nb1JhYmJpdG1xOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvUmVkaXMgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1JlZGlzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDMpXCIsXG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCAyMC43OTFjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNi0xLjg2My45NjYtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS42OTktMTAuNzgyLTQuNDM3LTEyLjQ2LTUuMjM0LS44MzgtLjM5OS0xLjI3OC0uNzM1LTEuMjc4LTEuMDUydi0zLjE4czEyLjEyMS0yLjYyMyAxNC4wNzgtMy4zMmMxLjk1Ny0uNjk5IDIuNjM2LS43MjQgNC4zMDEtLjExOCAxLjY2Ni42MDcgMTEuNjIzIDIuMzkzIDEzLjI3IDIuOTkybC0uMDAxIDMuMTM1YzAgLjMxNC0uMzguNjU5LTEuMjQgMS4xMDR6XCIsXG4gICAgZmlsbDogXCIjQTQxRTExXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTcuNjFjLTEuNjg5Ljg3NS0xMC40MzggNC40NTEtMTIuMyA1LjQxNy0xLjg2My45NjUtMi44OTguOTU2LTQuMzcuMjU2LTEuNDcxLS42OTgtMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM0LTEuNjc2LS43OTctMS43MTItMS4zNDUtLjA2NC0xLjk4NyAxLjY0Ny0uNjQxIDEwLjkwNy00LjI1MiAxMi44NjQtNC45NSAxLjk1Ny0uNjk4IDIuNjM2LS43MjMgNC4zMDEtLjExNyAxLjY2Ni42MDcgMTAuMzYzIDQuMDQ4IDEyLjAwOSA0LjY0NyAxLjY0Ni42IDEuNzEgMS4wOTMuMDIgMS45Njh6XCIsXG4gICAgZmlsbDogXCIjRDgyQzIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTUuNjA2Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUtMTIuMyA1LjQxNi0xLjg2My45NjUtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS43LTEwLjc4Mi00LjQzOC0xMi40Ni01LjIzNS0uODM4LS4zOTgtMS4yNzgtLjczNC0xLjI3OC0xLjA1MXYtMy4xOFMxMi4zMDcgOS4xOSAxNC4yNjQgOC40OTJjMS45NTctLjY5OCAyLjYzNi0uNzIzIDQuMzAxLS4xMTcgMS42NjYuNjA2IDExLjYyMyAyLjM5MiAxMy4yNyAyLjk5MWwtLjAwMSAzLjEzNWMwIC4zMTUtLjM4LjY2LTEuMjQgMS4xMDV6XCIsXG4gICAgZmlsbDogXCIjQTQxRTExXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTIuNDI1Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUtMTIuMyA1LjQxNi0xLjg2My45NjYtMi44OTguOTU2LTQuMzcuMjU3LTEuNDcxLS42OTktMTAuNzgyLTQuNDM4LTEyLjQ2LTUuMjM1LTEuNjc2LS43OTYtMS43MTItMS4zNDUtLjA2NC0xLjk4NiAxLjY0Ny0uNjQxIDEwLjkwNy00LjI1MyAxMi44NjQtNC45NSAxLjk1Ny0uNjk4IDIuNjM2LS43MjQgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTAuMzYzIDQuMDQ3IDEyLjAwOSA0LjY0NiAxLjY0Ni42IDEuNzEgMS4wOTQuMDIgMS45Njl6XCIsXG4gICAgZmlsbDogXCIjRDgyQzIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zMC41OTQgMTAuMjI4Yy0xLjY4OS44NzUtMTAuNDM4IDQuNDUxLTEyLjMgNS40MTctMS44NjMuOTY1LTIuODk4Ljk1NS00LjM3LjI1Ni0xLjQ3MS0uNjk5LTEwLjc4Mi00LjQzOC0xMi40Ni01LjIzNEMuNjI3IDEwLjI2OC4xODcgOS45MzIuMTg3IDkuNjE1di0zLjE4czEyLjEyMS0yLjYyMyAxNC4wNzgtMy4zMmMxLjk1Ny0uNjk5IDIuNjM2LS43MjQgNC4zMDEtLjExNyAxLjY2Ni42MDYgMTEuNjIzIDIuMzkxIDEzLjI3IDIuOTlsLS4wMDEgMy4xMzZjMCAuMzE0LS4zOC42NTktMS4yNCAxLjEwNHpcIixcbiAgICBmaWxsOiBcIiNBNDFFMTFcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMwLjU5NCA3LjA0N2MtMS42ODkuODc1LTEwLjQzOCA0LjQ1MS0xMi4zIDUuNDE3LTEuODYzLjk2NS0yLjg5OC45NTUtNC4zNy4yNTYtMS40NzEtLjY5OS0xMC43ODItNC40MzctMTIuNDYtNS4yMzRDLS4yMTEgNi42ODktLjI0NyA2LjE0IDEuNCA1LjQ5OVMxMi4zMDcgMS4yNDcgMTQuMjY0LjU1YzEuOTU3LS43IDIuNjM2LS43MjQgNC4zMDEtLjExOCAxLjY2Ni42MDcgMTAuMzYzIDQuMDQ4IDEyLjAwOSA0LjY0NyAxLjY0Ni42IDEuNzEgMS4wOTMuMDIgMS45Njh6XCIsXG4gICAgZmlsbDogXCIjRDgyQzIwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkZcIixcbiAgICBkOiBcIk0yMC4xNTcgMy45ODVsLTIuNzQyLjI4My0uNjE0IDEuNDY4LS45OTItMS42MzgtMy4xNjYtLjI4MyAyLjM2Mi0uODQ3LS43MDgtMS4zIDIuMjEyLjg2IDIuMDg1LS42OC0uNTYzIDEuMzQ1em0tMy41MiA3LjEyM2wtNS4xMTgtMi4xMSA3LjMzNC0xLjExOXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcImVsbGlwc2VcIiwge1xuICAgIGZpbGw6IFwiI0ZGRlwiLFxuICAgIGN4OiA5LjU0MSxcbiAgICBjeTogNi4zMTEsXG4gICAgcng6IDMuOTIsXG4gICAgcnk6IDEuNTFcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM3QTBDMDBcIixcbiAgICBkOiBcIk0yMy4zOTggNC4zODZsNC4zNCAxLjcwNS00LjMzNiAxLjcwM3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0FEMjExNVwiLFxuICAgIGQ6IFwiTTE4LjU5NiA2LjI3NGw0LjgwMi0xLjg4OC4wMDQgMy40MDgtLjQ3MS4xODN6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvUmVkaXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29TZWN1cml0eSA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvU2VjdXJpdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDcuMDA4VjBoMjB2MTYuNzQ0YzAgMy45MTMtNi4zNzggNi40NzctOS4wMTUgNy4yNTZWNy4wMDhIOXpcIixcbiAgICBmaWxsOiBcIiNGQTc0NEVcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMjAuMDczVjEwaDE0djIyQzcuNjY3IDI3Ljk4IDMgMjQuMDA0IDMgMjAuMDczelwiLFxuICAgIGZpbGw6IFwiIzFEQkFCMFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMGg4djE0Yy0yLjk4My0xLjE0LTgtMy43NTYtOC03LjA0M1YxMHpcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29TZWN1cml0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nb1NpdGVTZWFyY2ggPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NpdGVTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZBNzQ0RVwiLFxuICAgIGQ6IFwiTTI3LjA1IDEwaC03LjM0bC0xMSAyMnMxNS42OTYtNC45NiAyMS44NTUtMTYuMDc2QzMyLjAzNyAxMy4yNjYgMzAuMDg4IDEwIDI3LjA1IDEwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiMwMEJGQjNcIixcbiAgICBkOiBcIk0yMS4zNTUgMEg3LjUzM0wuNDI3IDE0LjIxMUMtLjkwMyAxNi44NzEgMS4wMzIgMjAgNC4wMDQgMjBoNy4zNTFsMTAtMjB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMi41MzMgMTBMLjQyOCAxNC4yMTFDLS45MDMgMTYuODcxIDEuMDMyIDIwIDQuMDA1IDIwaDcuMzVsNS0xMEgyLjUzM3pcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29TaXRlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvU2tldGNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Ta2V0Y2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsOiBcIm5vbmVcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRkZBRTAwXCIsXG4gICAgZDogXCJNMTYgMzJMMCAxMS40NTRsNi45MzEtMTAuMzhMMTYgMGw5LjA2OSAxLjA3NEwzMiAxMS40NTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNFQzZDMDBcIixcbiAgICBkOiBcIk0xNiAzMkwwIDExLjQ1NGgzMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZGQUUwMFwiLFxuICAgIGQ6IFwiTTE2IDMyTDYuNDc3IDExLjQ1NGgxOS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkVGQjRcIixcbiAgICBkOiBcIk0xNiAwTDYuNDc3IDExLjQ1NGgxOS4wNDV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiNGRkFFMDBcIixcbiAgICBkOiBcIk02LjkzMiAxLjA3NEwzLjM2OSA2LjMuMDAxIDExLjQ1NGg2LjU0MnpNMjUuMDY5IDEuMDc0TDI4LjYzMiA2LjMgMzIgMTEuNDU0aC02LjU0MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0ZFRDMwNVwiLFxuICAgIGQ6IFwiTTYuOTMxIDEuMDc0bC0uNDUzIDEwLjM4TDE2IDB6TTI1LjA2OSAxLjA3NGwuNDUzIDEwLjM4TDE2IDB6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2tldGNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvU2xhY2sgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1NsYWNrKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0UwMUU1QVwiLFxuICAgIGQ6IFwiTTYuODEzIDIwLjE4YTMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMjgtMy4zMyAzLjMzNyAzLjMzNyAwIDAxMy4zMjktMy4zMjloMy4zMjl2My4zM3ptMS42NzcgMGEzLjMzNyAzLjMzNyAwIDAxMy4zMy0zLjMyOSAzLjMzNyAzLjMzNyAwIDAxMy4zMjggMy4zM3Y4LjMzNWEzLjMzNyAzLjMzNyAwIDAxLTMuMzI5IDMuMzI5IDMuMzM3IDMuMzM3IDAgMDEtMy4zMjktMy4zM1YyMC4xOHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzM2QzVGMFwiLFxuICAgIGQ6IFwiTTExLjgyIDYuODEzYTMuMzM3IDMuMzM3IDAgMDEtMy4zMy0zLjMzQTMuMzM3IDMuMzM3IDAgMDExMS44Mi4xNTZhMy4zMzcgMy4zMzcgMCAwMTMuMzI4IDMuMzI5djMuMzI5SDExLjgyem0wIDEuNjc3YTMuMzM3IDMuMzM3IDAgMDEzLjMyOCAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMjkgMy4zMjhIMy40ODRhMy4zMzcgMy4zMzcgMCAwMS0zLjMzLTMuMzI5IDMuMzM3IDMuMzM3IDAgMDEzLjMzLTMuMzI5aDguMzM1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMkVCNjdEXCIsXG4gICAgZDogXCJNMjUuMTg3IDExLjgyYTMuMzM3IDMuMzM3IDAgMDEzLjMyOS0zLjMzIDMuMzM3IDMuMzM3IDAgMDEzLjMyOSAzLjMzIDMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMyOGgtMy4zMjhWMTEuODJ6bS0xLjY3OCAwYTMuMzM3IDMuMzM3IDAgMDEtMy4zMjkgMy4zMjggMy4zMzcgMy4zMzcgMCAwMS0zLjMyOS0zLjMyOVYzLjQ4NGEzLjMzNyAzLjMzNyAwIDAxMy4zMy0zLjMzIDMuMzM3IDMuMzM3IDAgMDEzLjMyOCAzLjMzdjguMzM1elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjRUNCMjJFXCIsXG4gICAgZDogXCJNMjAuMTggMjUuMTg3YTMuMzM3IDMuMzM3IDAgMDEzLjMzIDMuMzI5IDMuMzM3IDMuMzM3IDAgMDEtMy4zMyAzLjMyOSAzLjMzNyAzLjMzNyAwIDAxLTMuMzI5LTMuMzN2LTMuMzI4aDMuMzN6bTAtMS42NzhhMy4zMzcgMy4zMzcgMCAwMS0zLjMyOS0zLjMyOSAzLjMzNyAzLjMzNyAwIDAxMy4zMy0zLjMyOWg4LjMzNWEzLjMzNyAzLjMzNyAwIDAxMy4zMjkgMy4zMyAzLjMzNyAzLjMzNyAwIDAxLTMuMzMgMy4zMjhIMjAuMTh6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvU2xhY2s7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29VcHRpbWUgPSBmdW5jdGlvbiBFdWlJY29uTG9nb1VwdGltZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzNFQkVCMFwiLFxuICAgIGQ6IFwiTTE5IDE1YzAgNy4wNjItNC44ODggMTIuOTY5LTExLjQ2IDE0LjU2M0ExNS45MTQgMTUuOTE0IDAgMDAxNiAzMmM4LjgzNiAwIDE2LTcuMTYzIDE2LTE2di0zbC02LjUtNi02LjUgNnYyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbDogXCIjMDdDXCIsXG4gICAgZDogXCJNNi44MzMgMjYuNjQ2YTExLjk1NCAxMS45NTQgMCAwMDguNTQ0LTcuODM0QTEyLjQzIDEyLjQzIDAgMDExMyAxMS41Vi4yOTJDNS42IDEuNjk2IDAgOC4xOSAwIDE2LjAwMmMwIDQuMzU4IDEuNzUgOC4zMDYgNC41NzcgMTEuMTkybDIuMjU2LS41NDd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbE5lZ2F0aXZlXCIsXG4gICAgZDogXCJNMzAuMzYyIDIzLjAyYy0xLjQ5NC42My0zLjEzNy45OC00Ljg2MS45OGExMi40NDMgMTIuNDQzIDAgMDEtNy44NTItMi43OCAxNS4wNDIgMTUuMDQyIDAgMDEtMTAuMTEgOC4zNDNBMTUuOTEgMTUuOTEgMCAwMDE2LjAwMiAzMmM2LjMxNCAwIDExLjc1OC0zLjY2OSAxNC4zNi04Ljk4XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29VcHRpbWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ29XZWJob29rID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29XZWJob29rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwiZ1wiLCB7XG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiI0M3M0E2M1wiLFxuICAgIGQ6IFwiTTE0Ljk0MyAxMy41NjNjLTEuMzI3IDIuMjMtMi41OTcgNC4zODgtMy44OTQgNi41MzEtLjMzNC41NS0uNDk4Ljk5OC0uMjMyIDEuNjk4LjczNCAxLjkzMS0uMzAyIDMuODExLTIuMjUgNC4zMjEtMS44MzcuNDgyLTMuNjI3LS43MjYtMy45OTItMi42OTItLjMyMy0xLjc0MSAxLjAyOC0zLjQ0OCAyLjk0OC0zLjcyLjE2LS4wMjMuMzI1LS4wMjYuNTk1LS4wNDZsMi45Mi00Ljg5NkM5LjIgMTIuOTMzIDguMTA4IDEwLjggOC4zNSA4LjE1NGMuMTcxLTEuODcuOTA3LTMuNDg2IDIuMjUtNC44MWE3LjYzOSA3LjYzOSAwIDAxOS41MzEtMWMyLjkxIDEuODcgNC4yNDQgNS41MTIgMy4xMDcgOC42MjlsLTIuNjY4LS43MjRjLjM1Ny0xLjczMy4wOTMtMy4yOS0xLjA3Ni00LjYyMy0uNzcyLS44OC0xLjc2My0xLjM0MS0yLjg5LTEuNTExLTIuMjU4LS4zNDEtNC40NzYgMS4xMS01LjEzNCAzLjMyNy0uNzQ4IDIuNTE2LjM4MyA0LjU3MiAzLjQ3MyA2LjEyMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzRCNEI0QlwiLFxuICAgIGQ6IFwiTTE4LjczIDEwLjkyNmwyLjgyMyA0Ljk4YzQuNzUzLTEuNDcgOC4zMzYgMS4xNiA5LjYyMiAzLjk3NyAxLjU1MiAzLjQwMi40OTEgNy40MzItMi41NTggOS41MzEtMy4xMyAyLjE1NS03LjA4OSAxLjc4Ny05Ljg2Mi0uOTgxbDIuMTc2LTEuODIxYzIuNzM5IDEuNzc0IDUuMTM1IDEuNjkgNi45MTMtLjQxYTQuNzY2IDQuNzY2IDAgMDAtLjA3Ny02LjIxOWMtMS44LTIuMDI1LTQuMjEzLTIuMDg2LTcuMTMtLjE0My0xLjIwOS0yLjE0Ni0yLjQ0LTQuMjc1LTMuNjEtNi40MzYtLjM5Ni0uNzI5LS44MzItMS4xNTItMS43MjItMS4zMDYtMS40ODctLjI1Ny0yLjQ0Ni0xLjUzNC0yLjUwNC0yLjk2NGEzLjI1OCAzLjI1OCAwIDAxMi4wOC0zLjE5MiAzLjI0MyAzLjI0MyAwIDAxMy42NzEgMS4wMDJjLjcxLjg5Ni45MzUgMS45MDUuNTYyIDMuMDEtLjEwNC4zMDktLjIzOC42MDctLjM4NC45NzJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsOiBcIiM0QTRBNEFcIixcbiAgICBkOiBcIk0yMC45NjMgMjQuNDAxaC01LjcyYy0uNTUgMi4yNTYtMS43MzQgNC4wNzctMy43NzUgNS4yMzUtMS41ODYuOS0zLjI5NiAxLjIwNS01LjExNi45MTFDMyAzMC4wMDcuMjYgMjYuOTkuMDE5IDIzLjU5M2MtLjI3My0zLjg0OCAyLjM3Mi03LjI2OCA1Ljg5OC04LjAzNmwuNzMyIDIuNjU4Yy0zLjIzNCAxLjY1LTQuMzUzIDMuNzMtMy40NDggNi4zMy43OTcgMi4yODcgMy4wNiAzLjU0MSA1LjUxOCAzLjA1NiAyLjUxLS40OTUgMy43NzYtMi41ODEgMy42MjEtNS45MjkgMi4zOCAwIDQuNzYxLS4wMjQgNy4xNC4wMTIuOTMuMDE1IDEuNjQ4LS4wODEgMi4zNDgtLjkgMS4xNTItMS4zNDkgMy4yNzMtMS4yMjcgNC41MTUuMDQ2IDEuMjY4IDEuMzAxIDEuMjA3IDMuMzk1LS4xMzUgNC42NDFhMy4yMzYgMy4yMzYgMCAwMS00LjU1My0uMTU3Yy0uMjQ5LS4yNjctLjQ0NS0uNTg1LS42OTItLjkxM3pcIlxuICB9KSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29XZWJob29rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvV2luZG93cyA9IGZ1bmN0aW9uIEV1aUljb25Mb2dvV2luZG93cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGw6IFwiIzAwQURFRlwiLFxuICAgIGQ6IFwiTTAgNC41MWwxMi45NzctMS43NjguMDA2IDEyLjUxOC0xMi45NzEuMDc0TDAgNC41MXptMTIuOTcgMTIuMTkybC4wMTEgMTIuNTI5LTEyLjk3LTEuNzg0LS4wMDItMTAuODI5IDEyLjk2Mi4wODR6bTEuNTc0LTE0LjE5TDMxLjc1MSAwdjE1LjFsLTE3LjIwNy4xMzdWMi41MTF6bTE3LjIxIDE0LjMwOGwtLjAwMyAxNS4wMzMtMTcuMjA3LTIuNDI5LS4wMjQtMTIuNjMyIDE3LjIzNS4wMjh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ29XaW5kb3dzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvbkxvZ29Xb3JrcGxhY2VTZWFyY2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy41NTcgNS4wNWMuMTctLjIwMi40NTctLjUxMi44Ni0uOTNDMTkuNDgzIDMuMDE3IDIxLjgyOCAxIDIzLjgwMSAxSDMwdjMwaC02LjJjLTEuOTcyIDAtMy45OTUtMS40NDktNS4zODMtMy4xMDZsLS43NjQtMS4wNTIgMi43NS0zLjQ3N2MzLjQ2Mi00LjM3NiAzLjQ2My0xMC4zMzIuMDAxLTE0LjcwN0wxNy41NTcgNS4wNXpcIixcbiAgICBmaWxsOiBcIiNGRUM1MTRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMzFWMWg1LjgxYzEuNzEgMCAzLjM1Ljc4NiA0LjM4NyAyLjFsNS44NTUgNy40MmMyLjU5OCAzLjI4MyAyLjU5OCA3LjY5OC0uMDAyIDEwLjk4M2wtNS44NTUgNy40MDNDMTEuMTU4IDMwLjIxNyA5LjUyIDMxIDcuODE1IDMxSDJ6XCIsXG4gICAgZmlsbDogXCIjRjA0RTk4XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4zODQgMjQuODlMMTIuMTUgMjEuN2MtMi44NjgtMy4zMTgtMi44NjgtOC4yMi4wMDItMTEuMzIyIDEuNTM1LTEuNjM5IDIuNjExLTIuNzE4IDMuMjMtMy4yMzhsMi42NyAzLjIzOGMyLjYzNyAzLjM4NSAyLjU3NSA3Ljk4Ny0uMDYyIDExLjM3NGwtMi42MDcgMy4xMzd6XCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxOZWdhdGl2ZVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dzdGFzaEZpbHRlciA9IGZ1bmN0aW9uIEV1aUljb25Mb2dzdGFzaEZpbHRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcuOTE0IDFjLTMuNiAwLTUuODk3IDEuMTExLTUuODk3IDEuODc2IDAgLjc2NiAyLjI5NyAxLjg3NyA1Ljg5NyAxLjg3N3M1Ljg5Ny0xLjExMSA1Ljg5Ny0xLjg3N0MxMy44MTEgMi4xMTEgMTEuNTE0IDEgNy45MTQgMW0zLjk4IDcuOTg4Yy0xLjE4Ny4zMzEtMi42MDEuNTAyLTMuOTguNTAyLTEuMzgzIDAtMi44MDEtLjE3Mi0zLjk5MS0uNTA1bDIuODYzIDMuMjQydjIuNTE1Yy4xMzYuMDguNTE1LjIxNCAxLjEyOC4yMTQuNjEgMCAuOTg5LS4xMzMgMS4xMjYtLjIxM3YtMi41MTVsMi44NTQtMy4yNHptMi4zOTQtMS4yMDZsLTQuMjQ4IDQuODIzdjIuMjQ2aC4wMDRjMCAuNzYzLTEuMDY5IDEuMTA1LTIuMTMgMS4xMDUtMS4wNiAwLTIuMTMtLjM0Mi0yLjEzLTEuMTA1aC4wMDJ2LTIuMjQ1TDEuMzIxIDcuNTVsLjAxLS4wMDhBMS41MyAxLjUzIDAgMDExIDYuNjA3VjIuNzhoLjAyQzEuMTQuOTczIDQuNjI3IDAgNy45MTMgMGMzLjI4NiAwIDYuNzc0Ljk3MyA2Ljg5NCAyLjc4aC4wMnYzLjgyN2MwIC4zNDMtLjEyLjY1Ny0uMzM1Ljk0MWwtLjAwMy4wMDRjLS4wNi4wNzktLjEyOC4xNTUtLjIwMi4yM3ptLS41NzgtLjg1NmEuNTYuNTYgMCAwMC4xMTgtLjMxOVY0LjQxMWMtMS4yODguODc5LTMuNjQ5IDEuMzQyLTUuOTE0IDEuMzQyQzUuNjUgNS43NTMgMy4yODggNS4yOSAyIDQuNDExdjIuMTk2QzIgNy4zNzUgNC4zMDQgOC40OSA3LjkxNCA4LjQ5YzIuODc5IDAgNC45MjctLjcwOSA1LjYzOS0xLjM4NWwuMTU3LS4xOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hGaWx0ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ3N0YXNoSWYgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hJZihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuOTE4IDkuNzk5bC00LjgyIDQuODE5IDIuODgtLjQzLjE0OC45ODdMMCAxNS45NDNsLjc2OC01LjEyNi45ODguMTQ4LS40NTMgMy4wMzMgNC45MzYtNC45MzVhMi4wMDMgMi4wMDMgMCAwMTEuMjY1LTIuODg1VjBoMXY2LjE3OGEyLjAwMyAyLjAwMyAwIDAxMS4yNjMgMi44ODRsNC44NjUgNC44NjYtLjQ0My0yLjk2My45ODgtLjE0Ny43NjggNS4xMjYtNS4xMjctLjc2OS4xNS0uOTg4IDIuOTUuNDQxLTQuODMtNC44M2MtLjMxMi4yMDMtLjY4NS4zMi0xLjA4NS4zMi0uNCAwLS43NzMtLjExNy0xLjA4NS0uMzJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoSWY7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbkxvZ3N0YXNoSW5wdXQgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hJbnB1dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNzQ3IDEwLjk5MmgxMy4xYS4xMjMuMTIzIDAgMDAuMTIyLS4xMjNWOC41MWEuMTIyLjEyMiAwIDAwLS4xMjItLjEyMkgxLjEyMkEuMTIyLjEyMiAwIDAwMSA4LjUxdjIuMzZjMCAuMDY2LjA1NS4xMjIuMTIyLjEyMmguNjI1em0xMi4wMTEgMUgyLjIxVjE2aC0xdi00LjAwOGgtLjA4OEExLjEyNCAxLjEyNCAwIDAxMCAxMC44N1Y4LjUxYzAtLjYyLjUwMy0xLjEyMiAxLjEyMi0xLjEyMmgxMy43MjVjLjYyIDAgMS4xMjIuNTAyIDEuMTIyIDEuMTIydjIuMzZjMCAuNjE4LS41MDMgMS4xMjItMS4xMjIgMS4xMjJoLS4wODlWMTZoLTF2LTQuMDA4em0tNi4yNy03LjQ4N1YwaDF2NC41MjlsMi40MDctMi4yNjIuNjg1LjczTDggNi4zNTYgNC40MiAyLjk5NWwuNjg1LS43MjkgMi4zODMgMi4yNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hJbnB1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTG9nc3Rhc2hPdXRwdXQgPSBmdW5jdGlvbiBFdWlJY29uTG9nc3Rhc2hPdXRwdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yLjIxIDQuMDA4SDEzLjc2VjBoMXY0LjAwOGguMDg4Yy42MTkgMCAxLjEyMi41MDQgMS4xMjIgMS4xMjNWNy40OWMwIC42Mi0uNTAzIDEuMTIyLTEuMTIyIDEuMTIySDEuMTIyQTEuMTIyIDEuMTIyIDAgMDEwIDcuNDlWNS4xM2MwLS42MTguNTAzLTEuMTIyIDEuMTIyLTEuMTIyaC4wODlWMGgxdjQuMDA4em0xMS41NDkgMUgxLjEyQS4xMjMuMTIzIDAgMDAxIDUuMTNWNy40OWMwIC4wNjguMDU1LjEyMi4xMjIuMTIyaDEzLjcyNWEuMTIyLjEyMiAwIDAwLjEyMi0uMTIyVjUuMTNhLjEyMy4xMjMgMCAwMC0uMTIyLS4xMjJoLTEuMDg4em0tNS4zMDEgOS4wOTdsMi40MDUtMi4yNi42ODYuNzI4LTMuNTggMy4zNjMtMy41OC0zLjM2My42ODYtLjcyOCAyLjM4MyAyLjI0VjkuNTc3aDF2NC41Mjh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbkxvZ3N0YXNoT3V0cHV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Mb2dzdGFzaFF1ZXVlID0gZnVuY3Rpb24gRXVpSWNvbkxvZ3N0YXNoUXVldWUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4zMzkgMTUuNDY0SDQuNzdhMy4yNDggMy4yNDggMCAwMS0zLjI0NS0zLjI0NFY0LjU0OUgwdi0xaDIuNTI2djguNjdhMi4yNDcgMi4yNDcgMCAwMDIuMjQ1IDIuMjQ1aDYuNTY4YTIuMjQ3IDIuMjQ3IDAgMDAyLjI0NC0yLjI0NFYzLjU0OWgyLjQ1NXYxaC0xLjQ1NXY3LjY3YTMuMjQ3IDMuMjQ3IDAgMDEtMy4yNDQgMy4yNDV6bS41MTMtNS45NjJ2MS4wOTVsLTMuODQ4IDEuNzItMy44NS0xLjcyVjkuNTAybDMuODUgMS43MiAzLjg0OC0xLjcyem0wLTQuMjUxdjEuMDk1bC0zLjg0OCAxLjcyLTMuODUtMS43MlY1LjI1bDMuODUgMS43MiAzLjg0OC0xLjcyem0wLTQuMjUxdjEuMDk1bC0zLjg0OCAxLjcyLTMuODUtMS43MlYxbDMuODUgMS43MkwxMS44NTIgMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTG9nc3Rhc2hRdWV1ZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWFnbmV0ID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25ldChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNTUyIDEwLjcxYTMuMDA4IDMuMDA4IDAgMDA0LjE5LjczOGwxLjY0Mi0xLjE1IDEuMTUgMS42NDItMS42NDMgMS4xNWE1LjAxMyA1LjAxMyAwIDExLTUuNzUtOC4yMTJsMS42NDItMS4xNSAxLjE1IDEuNjQzLTEuNjQyIDEuMTVhMy4wMDcgMy4wMDcgMCAwMC0uNzM5IDQuMTg5em04LjI5Ni0yLjEzN2wxLjE1IDEuNjQzLTEuNjQzIDEuMTQ5LTEuMTUtMS42NDIgMS42NDMtMS4xNXptLTQuNi02LjU3MWwxLjE1IDEuNjQzLTEuNjQzIDEuMTUtMS4xNS0xLjY0MiAxLjY0Mi0xLjE1MXptMS45NyAxLjA2OEw5LjA3IDEuNDI4YTEuMDAzIDEuMDAzIDAgMDAtMS4zOTctLjI0NkwzLjU2NiA0LjA1N0E1Ljk5NSA1Ljk5NSAwIDAwMS4wOTIgNy45NGE1Ljk5MyA1Ljk5MyAwIDAwLjk5NiA0LjQ5NSA1Ljk5IDUuOTkgMCAwMDMuODgzIDIuNDczIDUuOTkxIDUuOTkxIDAgMDA0LjQ5NS0uOTk2bDQuMTA3LTIuODc1Yy40NTQtLjMxOC41NjMtLjk0My4yNDYtMS4zOTZsLTEuMTUtMS42NDNhMS4wMDIgMS4wMDIgMCAwMC0xLjM5Ni0uMjQ2bC00LjEwNyAyLjg3NWEyLjAwMiAyLjAwMiAwIDAxLTEuNDk4LjMzMiAyIDIgMCAwMS0xLjYyNy0yLjMyM2MuMDktLjUwNS4zNzEtLjk3Ni44MjQtMS4yOTRsNC4xMDctMi44NzZjLjQ1NC0uMzE3LjU2NC0uOTQyLjI0Ni0xLjM5NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFnbmV0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25pZnlXaXRoRXhjbGFtYXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4xNDMgMTUuODVsLTMuODcyLTMuODcyYS41LjUgMCAwMS0uMDM0LS43MzggNi4wMSA2LjAxIDAgMDAwLTguNDg2IDYuMDA0IDYuMDA0IDAgMDAtOC40ODQgMCA2LjAxIDYuMDEgMCAwMDAgOC40ODYgNS45NiA1Ljk2IDAgMDA0LjI0MiAxLjc1Ny41LjUgMCAwMTAgMSA2Ljk1NSA2Ljk1NSAwIDAxLTQuOTQ5LTIuMDVjLTIuNzI4LTIuNzMtMi43MjgtNy4xNzEgMC05LjkgMi43MjgtMi43MyA3LjE2OC0yLjczIDkuODk4IDAgMi42MDkgMi42MSAyLjcyMyA2Ljc4NS4zNDIgOS41MzJsMy41NjUgMy41NjRhLjUwMi41MDIgMCAwMS0uNzA4LjcwOHpNNi4yNTQgM2wuMjc3IDUuMDYzaC45MzVMNy43NTQgM2gtMS41em0uMjIyIDcuNTQ4YS43MjcuNzI3IDAgMDAuNTMzLjIyMi43MTcuNzE3IDAgMDAuNTItLjIyLjcxNS43MTUgMCAwMC4yMjUtLjUzLjcxNi43MTYgMCAwMC0uMjIyLS41MzQuNzI0LjcyNCAwIDAwLS41MjMtLjIxNi43MzEuNzMxIDAgMDAtLjUzMy4yMTkuNzE5LjcxOSAwIDAwLS4yMjIuNTNjMCAuMjA1LjA3NC4zOC4yMjIuNTI5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduaWZ5V2l0aE1pbnVzID0gZnVuY3Rpb24gRXVpSWNvbk1hZ25pZnlXaXRoTWludXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjUgNmEuNS41IDAgMDEwIDFoLTZhLjUuNSAwIDAxMC0xaDZ6bS43NCA0Ljc0YzAtLjExNy4wNC0uMjI1LjEwNy0uMzFBNS40NzggNS40NzggMCAwMDEyIDYuNSA1LjUgNS41IDAgMTA2LjUgMTJhLjUuNSAwIDExMCAxIDYuNSA2LjUgMCAxMTQuOTM2LTIuMjdsNC40MTkgNC40MThhLjUuNSAwIDAxLS43MDcuNzA3bC00Ljc2OC00Ljc2OGEuNDk5LjQ5OSAwIDAxLS4xNC0uMzQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYWduaWZ5V2l0aE1pbnVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYWduaWZ5V2l0aFBsdXMgPSBmdW5jdGlvbiBFdWlJY29uTWFnbmlmeVdpdGhQbHVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyA2aDIuNWEuNS41IDAgMDEwIDFIN3YyLjVhLjUuNSAwIDAxLTEgMFY3SDMuNWEuNS41IDAgMDEwLTFINlYzLjVhLjUuNSAwIDAxMSAwVjZ6bTMuMjQgNC43NGMwLS4xMTcuMDQtLjIyNS4xMDctLjMxQTUuNDc4IDUuNDc4IDAgMDAxMiA2LjUgNS41IDUuNSAwIDEwNi41IDEyYS41LjUgMCAxMTAgMSA2LjUgNi41IDAgMTE0LjkzNi0yLjI3bDQuNDE5IDQuNDE4YS41LjUgMCAwMS0uNzA3LjcwN2wtNC43NjgtNC43NjhhLjQ5OS40OTkgMCAwMS0uMTQtLjM0N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWFnbmlmeVdpdGhQbHVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NYXBNYXJrZXIgPSBmdW5jdGlvbiBFdWlJY29uTWFwTWFya2VyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNy41NSAxNC4yMjRhLjUwMi41MDIgMCAwMC44OTcgMGw0LThhLjUuNSAwIDAwLjA1My0uMjM1IDQuNjcyIDQuNjcyIDAgMDAtLjA4NC0uNzA1IDUuNTM4IDUuNTM4IDAgMDAtLjUwNS0xLjUxMkMxMS4xODkgMi4zNjIgOS45MDYgMS41IDggMS41Yy0xLjkwNiAwLTMuMTkuODYyLTMuOTEgMi4yNzItLjI0OC40ODUtLjQxLjk5OC0uNTA2IDEuNTEyLS4wNTguMzEtLjA4LjU1NC0uMDg0LjcwNWEuNS41IDAgMDAuMDUzLjIzNWwzLjk5NyA4ek04IDVhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6bS0zLjQ5My44OTVjLjAwOS0uMTA2LjAyNy0uMjUzLjA2LS40MjkuMDc5LS40MjQuMjEzLS44NDguNDEzLTEuMjM4QzUuNTM3IDMuMTM4IDYuNDg3IDIuNSA4IDIuNWMxLjUxMyAwIDIuNDYzLjYzOCAzLjAyIDEuNzI4LjIuMzkuMzM0LjgxNC40MTMgMS4yMzguMDMzLjE3Ni4wNTEuMzIzLjA2LjQzTDggMTIuODgxIDQuNTA3IDUuODk1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NYXBNYXJrZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbW9yeSA9IGZ1bmN0aW9uIEV1aUljb25NZW1vcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDEwaDJWNkg3ek0zIDEwaDJWNkgzek0xMS4wMjUgMTBoMlY2aC0yek0zLjUgMTMuNzVoMXYtMi40aC0xek02LjE3NSAxMy43NWgxLjAwMXYtMi40SDYuMTc1ek04Ljg1IDEzLjc1aDF2LTIuNGgtMXpNMTEuNTI1IDEzLjc1aDF2LTIuNGgtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTAgM3Y3LjA1aDF2My42OThoMXYtMy42OTloMTJ2My42OTloMXYtMy42OTloMVYzSDB6bTEgNmgxNFY0SDF2NXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVtb3J5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NZW51ID0gZnVuY3Rpb24gRXVpSWNvbk1lbnUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDJoMTZ2MkgwVjJ6bTAgNWgxNnYySDBWN3ptMTYgNUgwdjJoMTZ2LTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbnVEb3duID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVEb3duKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiA3LjVjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwMS0uNDg3LS40MTJMMyA3LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMkw2IDcuNXpNMy41MSA0YS41MTMuNTEzIDAgMDEtLjUwMi0uNDEyTDMgMy41YzAtLjI3Ni4yMjgtLjUuNTEtLjVoOC45OGMuMjUgMCAuNDU5LjE4My41MDIuNDEyTDEzIDMuNWMwIC4yNzYtLjIyOC41LS41MS41SDguNDkzdjcuNzkybDIuMDYtMi4wNmEuNS41IDAgMTEuNzA3LjcwN0w5LjE0IDEyLjU2QTEuNDk2IDEuNDk2IDAgMDE4LjAyNiAxM0w3Ljk5MyAxM2EuNTAxLjUwMSAwIDAxLS4xMTgtLjAxNCAxLjQ5MyAxLjQ5MyAwIDAxLS44NTctLjQyNmwtMi4xMjItMi4xMmEuNS41IDAgMDEuNzA4LS43MDhsMS44ODkgMS44OVY0SDMuNTF6TTEzIDcuNWMwIC4yNzYtLjIxNi41LS40OTUuNWgtMi4wMWEuNTAzLjUwMyAwIDAxLS40ODctLjQxMkwxMCA3LjVjMC0uMjc2LjIxNi0uNS40OTUtLjVoMi4wMWMuMjQzIDAgLjQ0NS4xODMuNDg3LjQxMkwxMyA3LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVEb3duOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NZW51TGVmdCA9IGZ1bmN0aW9uIEV1aUljb25NZW51TGVmdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuMDE0IDcuMzgyYS41MDEuNTAxIDAgMDAtLjAxMy4xNTJjLS4wMTQuNC4xMzMuODA2LjQzOSAxLjExMmwyLjEyIDIuMTIyYS41LjUgMCAxMC43MDgtLjcwOEwyLjIwOCA4SDE0LjVhLjUuNSAwIDAwMC0xSDIuMzc5bDEuODg5LTEuODlhLjUuNSAwIDAwLS43MDctLjcwNkwxLjQ0IDYuNTI0Yy0uMjQxLjI0Mi0uMzgzLjU0NC0uNDI2Ljg1OHpNMTQuNSAzaC03YS41LjUgMCAwMDAgMWg3YS41LjUgMCAwMDAtMXptMCA4aC03YS41LjUgMCAxMDAgMWg3YS41LjUgMCAxMDAtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWVudUxlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1lbnVSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25NZW51UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC45ODYgNy4zODJhLjUwMS41MDEgMCAwMS4wMTMuMTUyYy4wMTQuNC0uMTMzLjgwNi0uNDM5IDEuMTEybC0yLjEyIDIuMTIyYS41LjUgMCAxMS0uNzA4LS43MDhMMTMuNzkyIDhIMS41YS41LjUgMCAwMTAtMWgxMi4xMjFsLTEuODg5LTEuODlhLjUuNSAwIDAxLjcwNy0uNzA2bDIuMTIxIDIuMTJjLjI0MS4yNDIuMzgzLjU0NC40MjYuODU4ek0xLjUgM2g3YS41LjUgMCAwMTAgMWgtN2EuNS41IDAgMDEwLTF6bTAgOGg3YS41LjUgMCAxMTAgMWgtN2EuNS41IDAgMTEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVudVVwID0gZnVuY3Rpb24gRXVpSWNvbk1lbnVVcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjAxIDguNWMwLS4yNzYuMjE2LS41LjQ5NS0uNWgyLjAxYy4yNDMgMCAuNDQ1LjE4My40ODcuNDEybC4wMDguMDg4YzAgLjI3Ni0uMjE2LjUtLjQ5NS41aC0yLjAxYS41MDMuNTAzIDAgMDEtLjQ4Ny0uNDEyTDEwLjAxIDguNXpNMTIuNSAxMmMuMjUgMCAuNDU5LjE4My41MDIuNDEybC4wMDguMDg4YzAgLjI3Ni0uMjI4LjUtLjUxLjVIMy41MmEuNTEzLjUxMyAwIDAxLS41MDItLjQxMkwzLjAxIDEyLjVjMC0uMjc2LjIyOC0uNS41MS0uNWgzLjk4N1Y0LjIwOGwtMi4wNiAyLjA2YS41LjUgMCAxMS0uNzA3LS43MDdMNi44NiAzLjQ0QTEuNDk2IDEuNDk2IDAgMDE3Ljk3NCAzTDguMDA3IDNjLjA0IDAgLjA4LjAwNS4xMTguMDE0LjMxNC4wNDMuNjE2LjE4NS44NTcuNDI2bDIuMTIyIDIuMTJhLjUuNSAwIDAxLS43MDguNzA4bC0xLjg4OS0xLjg5VjEySDEyLjV6TTMgOC41YzAtLjI3Ni4yMTYtLjUuNDk1LS41aDIuMDFjLjI0MyAwIC40NDUuMTgzLjQ4Ny40MTJMNiA4LjVjMCAuMjc2LS4yMTYuNS0uNDk1LjVoLTIuMDFhLjUwMy41MDMgMCAwMS0uNDg3LS40MTJMMyA4LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1lbnVVcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWVyZ2UgPSBmdW5jdGlvbiBFdWlJY29uTWVyZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjM1MiA2SDIuNWEuNS41IDAgMDEwLTFoNC44NTJMNS4xMiAyLjcyMWMtLjE4LS4xODMtLjE1NS0uNDYuMDU1LS42MTZhLjU1MS41NTEgMCAwMS43MDUuMDQ4bDMgMy4wNjJjLjE2LjE2NC4xNi40MDUgMCAuNTdsLTMgMy4wNjJBLjUzMi41MzIgMCAwMTUuNSA5YS41NC41NCAwIDAxLS4zMjUtLjEwNmMtLjIxLS4xNTctLjIzNS0uNDMzLS4wNTUtLjYxNkw3LjM1MiA2em0xLjI5NiA0SDEzLjVhLjUuNSAwIDAxMCAxSDguNjQ4bDIuMjMyIDIuMjc4Yy4xOC4xODMuMTU1LjQ2LS4wNTUuNjE3QS41NC41NCAwIDAxMTAuNSAxNGEuNTMyLjUzMiAwIDAxLS4zOC0uMTUzbC0zLTMuMDYzYS4zOTcuMzk3IDAgMDEwLS41NjhsMy0zLjA2M2EuNTUxLjU1MSAwIDAxLjcwNS0uMDQ3Yy4yMS4xNTYuMjM1LjQzMy4wNTUuNjE2TDguNjQ4IDEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NZXJnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWluaW1pemUgPSBmdW5jdGlvbiBFdWlJY29uTWluaW1pemUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjE0NiAxNC4xNDZsNC00YS41LjUgMCAwMS43NjUuNjM4bC0uMDU3LjA3LTQgNGEuNS41IDAgMDEtLjc2NS0uNjM4bC4wNTctLjA3IDQtNC00IDR6TTYuNSA4QTEuNSAxLjUgMCAwMTggOS41djNhLjUuNSAwIDExLTEgMHYtM2EuNS41IDAgMDAtLjUtLjVoLTNhLjUuNSAwIDAxMC0xaDN6bTItNWEuNS41IDAgMDEuNS41djNhLjUuNSAwIDAwLjUuNWgzYS41LjUgMCAxMTAgMWgtM0ExLjUgMS41IDAgMDE4IDYuNXYtM2EuNS41IDAgMDEuNS0uNXptMS42NTEgMi4xNDZsNC00YS41LjUgMCAwMS43NjUuNjM4bC0uMDU3LjA3LTQgNGEuNS41IDAgMDEtLjc2NS0uNjM4bC4wNTctLjA3IDQtNC00IDR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1pbmltaXplOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NaW51cyA9IGZ1bmN0aW9uIEV1aUljb25NaW51cyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiAxMCxcbiAgICBoZWlnaHQ6IDEuNSxcbiAgICB4OiAzLFxuICAgIHk6IDcuMjUsXG4gICAgcng6IDAuNVxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1pbnVzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uTWludXNJbkNpcmNsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMEMxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwem0wIC44ODJhNi42MTggNi42MTggMCAxMDAgMTMuMjM2QTYuNjE4IDYuNjE4IDAgMDA3LjUuODgyek0zLjUgN2g4YS41LjUgMCAxMTAgMWgtOGEuNS41IDAgMDEwLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1pbnVzSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1pbnVzSW5DaXJjbGVGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgMEMxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwem0tNCA3YS41LjUgMCAwMDAgMWg4YS41LjUgMCAxMDAtMWgtOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxNnY1aDIuMDM4YTEzLjE3OSAxMy4xNzkgMCAwMDAgMkg3djVINXYtNUgwdi0yaDV2LTVoMnpNNyAwdjVoNXYySDd2NUg1VjdIMFY1aDVWMGgyem0xNiAwdjVoNXYyaC01djIuMDM4YTEzLjE3OSAxMy4xNzkgMCAwMC0yIDBWN2gtNVY1aDVWMGgyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMiAxMGMzLjA3MyAwIDUuODc3IDEuMTU1IDggMy4wNTZ2My4yNTJBOS44MiA5LjgyIDAgMTAxNi4zMDcgMzBoLTMuMjUxQTExLjk1NSAxMS45NTUgMCAwMTEwIDIyYzAtNi42MjcgNS4zNzMtMTIgMTItMTJ6bTEgOHYzaDN2MmgtM3YzaC0ydi0zaC0zdi0yaDN2LTNoMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDbGFzc2lmaWNhdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVBZHZhbmNlZEpvYiA9IGZ1bmN0aW9uIEV1aUljb25NbENyZWF0ZUFkdmFuY2VkSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMzJDNy4xNjMgMzIgMCAyNC44MzcgMCAxNlM3LjE2MyAwIDE2IDBzMTYgNy4xNjMgMTYgMTZoLTJjMC03LjczMi02LjI2OC0xNC0xNC0xNFMyIDguMjY4IDIgMTZzNi4yNjggMTQgMTQgMTR2MnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjcgMjB2MTJoLTJWMjBoMnptLTUgNHY4aC0ydi04aDJ6bTEwLTJ2MTBoLTJWMjJoMnpNMTcgOXY2aDZ2MmgtNnY2aC0ydi02SDl2LTJoNlY5aDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk1sQ3JlYXRlTXVsdGlNZXRyaWNKb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNNCAyNGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMjQgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHpNNCAyNmEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHptMjQgMGEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHpNMTcgOXY2aDZ2MmgtNnY2aC0ydi02SDl2LTJoNlY5aDJ6TTQgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMjQgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMCAyYTIgMiAwIDEwMCA0IDIgMiAwIDAwMC00ek00IDJhMiAyIDAgMTAwIDQgMiAyIDAgMDAwLTR6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS4wNzggMjkuMDVjLjEwMi42NzcuMyAxLjMyMi41ODIgMS45MkExNS45NjMgMTUuOTYzIDAgMDExNiAzMmMtMS45OTMgMC0zLjktLjM2NC01LjY2LTEuMDMuMjgxLS41OTguNDgtMS4yNDMuNTgyLTEuOTIgMS41NzQuNjE0IDMuMjg3Ljk1IDUuMDc4Ljk1IDEuNzkxIDAgMy41MDQtLjMzNiA1LjA3OC0uOTV6bTkuODkyLTE4LjcxQTE1Ljk2MyAxNS45NjMgMCAwMTMyIDE2YzAgMS45OTMtLjM2NCAzLjktMS4wMyA1LjY2YTYuOTQ4IDYuOTQ4IDAgMDAtMS45Mi0uNTgyYy42MTQtMS41NzQuOTUtMy4yODcuOTUtNS4wNzggMC0xLjc5MS0uMzM2LTMuNTA0LS45NS01LjA3OGE2Ljk0OCA2Ljk0OCAwIDAwMS45Mi0uNTgyem0tMjkuOTQgMGMuNTk4LjI4MSAxLjI0My40OCAxLjkyLjU4MkExMy45NjUgMTMuOTY1IDAgMDAyIDE2YzAgMS43OTEuMzM2IDMuNTA0Ljk1IDUuMDc4LS42NzcuMTAyLTEuMzIyLjMtMS45Mi41ODJBMTUuOTY0IDE1Ljk2NCAwIDAxMCAxNmMwLTEuOTkzLjM2NC0zLjkgMS4wMy01LjY2ek0xNiAwYzEuOTkzIDAgMy45LjM2NCA1LjY2IDEuMDNhNi45NDggNi45NDggMCAwMC0uNTgyIDEuOTJBMTMuOTY1IDEzLjk2NSAwIDAwMTYgMmMtMS43OTEgMC0zLjUwNC4zMzYtNS4wNzguOTVhNi45NDggNi45NDggMCAwMC0uNTgyLTEuOTJBMTUuOTY0IDE1Ljk2NCAwIDAxMTYgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVQb3B1bGF0aW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDBjNS41MjMgMCAxMCA0LjQ3NyAxMCAxMHMtNC40NzcgMTAtMTAgMTBTNiAxNS41MjMgNiAxMCAxMC40NzcgMCAxNiAwem0wIDJhOCA4IDAgMTAwIDE2IDggOCAwIDAwMC0xNnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNOC40IDE5LjI4OGMuNDkyLjQwMiAxLjAxNS43NjYgMS41NjYgMS4wODdMNy4yNiAyMy42ODJhNCA0IDAgMTEtMS40MzctMS4yNDNsMi41NzgtMy4xNTF6bTE1LjIgMGwyLjU3NyAzLjE1YTQgNCAwIDExLTEuNDM3IDEuMjQzbC0yLjcwNi0zLjMwNmExMi4wMzIgMTIuMDMyIDAgMDAxLjU2NS0xLjA4N3pNNCAyNGEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHptMjQgMGEyIDIgMCAxMDAgNCAyIDIgMCAwMDAtNHpNMTcgNnYzaDN2MmgtM3YzaC0ydi0zaC0zVjloM1Y2aDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlUG9wdWxhdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzMkM3LjE2MyAzMiAwIDI0LjgzNyAwIDE2UzcuMTYzIDAgMTYgMHMxNiA3LjE2MyAxNiAxNmExNiAxNiAwIDAxLTE2IDE2em0wLTMwQzguMjY4IDIgMiA4LjI2OCAyIDE2czYuMjY4IDE0IDE0IDE0IDE0LTYuMjY4IDE0LTE0QTE0IDE0IDAgMDAxNiAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0yMyAxNWgtNlY5aC0ydjZIOXYyaDZ2Nmgydi02aDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sQ3JlYXRlU2luZ2xlTWV0cmljSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbERhdGFWaXN1YWxpemVyID0gZnVuY3Rpb24gRXVpSWNvbk1sRGF0YVZpc3VhbGl6ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDMyLFxuICAgIGhlaWdodDogMzIsXG4gICAgdmlld0JveDogXCIwIDAgMzIgMzJcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDIwdjEwaDEwdjJIMFYyMGgyem0zMCAwdjEySDIwdi0yaDEwVjIwaDJ6TTEyIDRhOCA4IDAgMTEwIDE2IDggOCAwIDAxMC0xNnptMCAyYTYgNiAwIDEwMCAxMiA2IDYgMCAwMDAtMTJ6bTAtNnYySDJ2MTBIMFYwaDEyem0yMCAwdjEyaC0yVjJIMjBWMGgxMnpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlJY29uX19maWxsU2Vjb25kYXJ5XCIsXG4gICAgZDogXCJNMjEuOTk3IDEyLjI1MWMtLjAxNy42ODktLjEwNCAxLjM2LS4yNTMgMi4wMDZhNiA2IDAgMTEtNy40ODcgNy40ODdjLS42NDYuMTUtMS4zMTcuMjM2LTIuMDA2LjI1M2E4IDggMCAxMDkuNzQ2LTkuNzQ2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25NbERhdGFWaXN1YWxpemVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25NbE91dGxpZXJEZXRlY3Rpb25Kb2IgPSBmdW5jdGlvbiBFdWlJY29uTWxPdXRsaWVyRGV0ZWN0aW9uSm9iKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAzMixcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHZpZXdCb3g6IFwiMCAwIDMyIDMyXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAxMnY2aDZ2Mkgwdi04aDJ6bTE4IDB2OGgtOHYtMmg2di02aDJ6TTggMHYySDJ2NkgwVjBoOHptMTIgMHY4aC0yVjJoLTZWMGg4elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUljb25fX2ZpbGxTZWNvbmRhcnlcIixcbiAgICBkOiBcIk0xNiAyNGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptMTIgMGE0IDQgMCAxMTAgOCA0IDQgMCAwMTAtOHptLTEyIDEuNzVhMi4yNSAyLjI1IDAgMTAwIDQuNSAyLjI1IDIuMjUgMCAwMDAtNC41em0xMiAwYTIuMjUgMi4yNSAwIDEwMCA0LjUgMi4yNSAyLjI1IDAgMDAwLTQuNXpNMjggMTJhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMS43NWEyLjI1IDIuMjUgMCAxMDAgNC41IDIuMjUgMi4yNSAwIDAwMC00LjV6TTEwIDZhNCA0IDAgMTEwIDggNCA0IDAgMDEwLTh6bTAgMS43NWEyLjI1IDIuMjUgMCAxMDAgNC41IDIuMjUgMi4yNSAwIDAwMC00LjV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1sT3V0bGllckRldGVjdGlvbkpvYjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTWxSZWdyZXNzaW9uSm9iID0gZnVuY3Rpb24gRXVpSWNvbk1sUmVncmVzc2lvbkpvYihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMzIsXG4gICAgaGVpZ2h0OiAzMixcbiAgICB2aWV3Qm94OiBcIjAgMCAzMiAzMlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTI0IDBhOCA4IDAgMTEtNC45MDYgMTQuMzJsLTQuNzc0IDQuNzc0YTggOCAwIDExLTEuNDE0LTEuNDE0bDQuNzc0LTQuNzc0QTggOCAwIDAxMjQgMHpNOCAxOGE2IDYgMCAxMDAgMTIgNiA2IDAgMDAwLTEyek0yNCAyYTYgNiAwIDEwMCAxMiA2IDYgMCAwMDAtMTJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpSWNvbl9fZmlsbFNlY29uZGFyeVwiLFxuICAgIGQ6IFwiTTMyIDIwdjEySDIwVjIwaDEyem0tMiAyaC04djhoOHYtOHpNMTIgMHYxMkgwVjBoMTJ6bS0yIDJIMnY4aDhWMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTWxSZWdyZXNzaW9uSm9iOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Nb2JpbGUgPSBmdW5jdGlvbiBFdWlJY29uTW9iaWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiAyLjVhLjUuNSAwIDAxLjUtLjVoM2EuNS41IDAgMDEwIDFoLTNhLjUuNSAwIDAxLS41LS41elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjUgMEExLjUgMS41IDAgMDAzIDEuNXYxM0ExLjUgMS41IDAgMDA0LjUgMTZoN2ExLjUgMS41IDAgMDAxLjUtMS41di0xM0ExLjUgMS41IDAgMDAxMS41IDBoLTd6TTQgMS41YS41LjUgMCAwMS41LS41aDdhLjUuNSAwIDAxLjUuNVY0SDRWMS41ek00IDEzdjEuNWEuNS41IDAgMDAuNS41aDdhLjUuNSAwIDAwLjUtLjVWMTNINHptMC0xaDhWNUg0djd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk1vYmlsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uTW9vbiA9IGZ1bmN0aW9uIEV1aUljb25Nb29uKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC43OTYgOS4wNDhjLTEuNTUyLTIuMjM4LTEuMTk5LTUuMzIzLjYxLTguMS0zLjQ3LS4xMi02LjYgMi4yMzItNy4yNjkgNS42NzItLjc0MiAzLjgyIDEuODMgNy41MzMgNS43NDkgOC4yOTRhNy4yMjYgNy4yMjYgMCAwMDcuNTI2LTMuMjE4Yy0yLjc5NC4xNzctNS4yNy0uNzExLTYuNjE2LTIuNjQ4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Nb29uOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25OYW1lc3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uTmFtZXNwYWNlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xIDFoMTR2MTRIMVYxem0xMyAxMnYxSDJWMmgxMnYxMXpNNiA2aDR2NEg2VjZ6bS0xIDVWNWg2djZINXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uTmFtZXNwYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25OZXN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uTmVzdGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS41IDFhLjUuNSAwIDAxMCAxSDMuMDA2QzIuNDUgMiAyIDIuNDUgMiAzLjAwNnY5Ljk4OEMyIDEzLjU1IDIuNDUgMTQgMy4wMDYgMTRINS41YS41LjUgMCAxMTAgMUgzLjAwNkEyLjAwNSAyLjAwNSAwIDAxMSAxMi45OTRWMy4wMDZDMSAxLjg5OCAxLjg5NyAxIDMuMDA2IDFINS41em03LjQ5NCAwYzEuMDU5IDAgMS45MjQuODE4IDIgMS44NTZsLjAwNi4xNXY5Ljk4OGEyLjAwNSAyLjAwNSAwIDAxLTEuODU2IDJsLS4xNS4wMDZIMTAuNWEuNS41IDAgMDEtLjA5LS45OTJMMTAuNSAxNGgyLjQ5NGMuNTE2IDAgLjk0MS0uMzg4IDEtLjg4OGwuMDA2LS4xMThWMy4wMDZjMC0uNTE2LS4zODgtLjk0MS0uODg4LTFMMTIuOTk0IDJIMTAuNWEuNS41IDAgMDEtLjA5LS45OTJMMTAuNSAxaDIuNDk0ek01IDdhMSAxIDAgMTEwIDIgMSAxIDAgMDEwLTJ6bTMgMGExIDEgMCAxMTAgMiAxIDEgMCAwMTAtMnptMyAwYTEgMSAwIDExMCAyIDEgMSAwIDAxMC0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25OZXN0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk5vZGUgPSBmdW5jdGlvbiBFdWlJY29uTm9kZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxLjQ0M2ExIDEgMCAwMC0xIDBMMi41NzIgNC4yOWExIDEgMCAwMC0uNS44NjZ2NS42OWExIDEgMCAwMC41Ljg2Nkw3LjUgMTQuNTU3YTEgMSAwIDAwMSAwbDQuOTI4LTIuODQ2YTEgMSAwIDAwLjUtLjg2NnYtNS42OWExIDEgMCAwMC0uNS0uODY2TDguNSAxLjQ0M3pNOSAuNTc3bDQuOTI4IDIuODQ2YTIgMiAwIDAxMSAxLjczMnY1LjY5YTIgMiAwIDAxLTEgMS43MzJMOSAxNS40MjNhMiAyIDAgMDEtMiAwbC00LjkyOC0yLjg0NmEyIDIgMCAwMS0xLTEuNzMydi01LjY5YTIgMiAwIDAxMS0xLjczMkw3IC41NzdhMiAyIDAgMDEyIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk5vZGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk51bWJlciA9IGZ1bmN0aW9uIEV1aUljb25OdW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjgwOCAxMC4xOTdINi43OTZMNS44NTkgMTNINC40ODVsLjkzNy0yLjgwM0gzLjk2NmwuMjE5LTEuMjVoMS42NDdsLjYwOC0xLjgwNUg0Ljk5MWwuMjI2LTEuMjUxaDEuNjRsLjk1LTIuODQ0aDEuMzY4bC0uOTUgMi44NDRoMS4wMThsLjk1LTIuODQ0aDEuMzc0bC0uOTUgMi44NDRoMS41MWwtLjIxOCAxLjI1aC0xLjcwMmwtLjYwOCAxLjgwNWgxLjQ5N2wtLjIxOSAxLjI1MUg5LjE4Mkw4LjI1MiAxM0g2Ljg3OGwuOTMtMi44MDN6bS0uNjAyLTEuMjVoMS4wMTJsLjYxNS0xLjgwNUg3LjgxNGwtLjYwOCAxLjgwNHpcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk51bWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uT2ZmbGluZSA9IGZ1bmN0aW9uIEV1aUljb25PZmZsaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41MTcgMTIuMjcxbDEuMjU0LTEuMjU0YTEuNSAxLjUgMCAxMS0xLjI1NCAxLjI1NHptMi45NDUtMi45NDRsLjc0LS43NGMuMzYxLjIwOC42OTQuNDY3Ljk4Ny43NzJhLjUuNSAwIDAxLS43MjEuNjkzIDMuNDI0IDMuNDI0IDAgMDAtMS4wMDYtLjcyNXptMi4xNjItMi4xNjNsLjcxNi0uNzE1Yy4zMDguMjMyLjU5OS40OS44Ny43NzJhLjUuNSAwIDExLS43MjIuNjkyIDYuMjYgNi4yNiAwIDAwLS44NjQtLjc0OXpNNy4wNjEgNi4wN0E2LjE5OCA2LjE5OCAwIDAwMy41NCA3Ljg4NWEuNS41IDAgMDEtLjcxNy0uNjk3IDcuMTk5IDcuMTk5IDAgMDE1LjMwOS0yLjE4N2wtMS4wNyAxLjA3em02LjY3Mi0xLjAxNGwuNzEtLjcxYy4yNzQuMjMuNTM2LjQ3Ni43ODYuNzM2YS41LjUgMCAwMS0uNzIxLjY5MiA5LjEgOS4xIDAgMDAtLjc3NS0uNzE4em0tMy44MDctMS44NUE5LjA2IDkuMDYgMCAwMDggM2E4Ljk5IDguOTkgMCAwMC02LjQ2OSAyLjczNC41LjUgMCAxMS0uNzE3LS42OTdBOS45OSA5Ljk5IDAgMDE4IDJjLjk0NCAwIDEuODY4LjEzMSAyLjc1LjM4MmwtLjgyNC44MjR6TTggMTNhLjUuNSAwIDEwMC0xIC41LjUgMCAwMDAgMXptLTUuNDI0IDFhLjUuNSAwIDAxLS43MDctLjcwN0wxNC4xNDYgMS4xNDZhLjUuNSAwIDAxLjcwOC43MDhMMi41NzYgMTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk9mZmxpbmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvbk9ubGluZSA9IGZ1bmN0aW9uIEV1aUljb25PbmxpbmUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE0YTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6bTAtMWEuNS41IDAgMTAwLTEgLjUuNSAwIDAwMCAxem0zLjE4OS0zLjY0YS41LjUgMCAwMS0uNzIxLjY5MkEzLjQwOCAzLjQwOCAwIDAwOCA5Yy0uOTM3IDAtMS44MTMuMzc4LTIuNDUzIDEuMDM3YS41LjUgMCAwMS0uNzE3LS42OTdBNC40MDggNC40MDggMCAwMTggOGMxLjIyIDAgMi4zNjEuNDk3IDMuMTg5IDEuMzZ6bTIuMDItMi4xNGEuNS41IDAgMTEtLjcyMS42OTNBNi4yIDYuMiAwIDAwOCA2YTYuMTk5IDYuMTk5IDAgMDAtNC40NiAxLjg4NS41LjUgMCAwMS0uNzE4LS42OTdBNy4xOTkgNy4xOTkgMCAwMTggNWE3LjIgNy4yIDAgMDE1LjIxIDIuMjJ6bTIuMDItMi4xMzhhLjUuNSAwIDAxLS43MjEuNjkyQTguOTkgOC45OSAwIDAwOCAzYTguOTkgOC45OSAwIDAwLTYuNDY5IDIuNzM0LjUuNSAwIDExLS43MTctLjY5N0E5Ljk5IDkuOTkgMCAwMTggMmE5Ljk5IDkuOTkgMCAwMTcuMjMgMy4wODJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvbk9ubGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFja2FnZSA9IGZ1bmN0aW9uIEV1aUljb25QYWNrYWdlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQuNDQ3IDMuNzI0bC02LTNhMSAxIDAgMDAtLjg5NCAwbC02IDNBMSAxIDAgMDAxIDQuNjE4djYuNzY0YTEgMSAwIDAwLjU1My44OTRsNiAzYTEgMSAwIDAwLjg5NCAwbDYtM2ExIDEgMCAwMC41NTMtLjg5NFY0LjYxOGExIDEgMCAwMC0uNTUzLS44OTR6TTUuODcxIDUuODk3bDUuMzQzLTIuNjcyIDIuMTU4IDEuMDc5TDggNi45NDN6TTggMS42MThsMi4wOTYgMS4wNDgtNS4zNTMgMi42NzctMi4xMTUtMS4wMzl6TTIgNS4xMWwyLjI1IDEuMTA1VjlhLjUuNSAwIDAwMSAwVjYuNzA2TDcuNSA3LjgxMXY2LjMyMUwyIDExLjM4MnptNi41IDkuMDIydi02LjMyTDE0IDUuMTF2Ni4yNzJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhY2thZ2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBhZ2VTZWxlY3QgPSBmdW5jdGlvbiBFdWlJY29uUGFnZVNlbGVjdChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zIDFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDVhNC45OTUgNC45OTUgMCAwMS0uNTg0LTFIM1YyaDd2MmExIDEgMCAwMDEgMWgydjIuMWMuMzQ4LjA3LjY4Mi4xNzcgMSAuMzE2VjRhMSAxIDAgMDAtLjI5My0uNzA3bC0yLTJBMSAxIDAgMDAxMSAxSDN6bTEzIDExYTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHptLTEuNjQ2LTEuMzU0YS41LjUgMCAwMTAgLjcwOGwtMi41IDIuNWEuNS41IDAgMDEtLjcwOCAwbC0xLTFhLjUuNSAwIDAxLjcwOC0uNzA4bC42NDYuNjQ3IDIuMTQ2LTIuMTQ3YS41LjUgMCAwMS43MDggMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGFnZVNlbGVjdDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFnZXNTZWxlY3QgPSBmdW5jdGlvbiBFdWlJY29uUGFnZXNTZWxlY3QoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyAxYTEgMSAwIDAxMS0xaDhhMSAxIDAgMDEuNzA3LjI5M2wyIDJBMSAxIDAgMDExNSAzdjVhNC45OTUgNC45OTUgMCAwMC0xLS41ODRWNGgtMmExIDEgMCAwMS0xLTFWMUg0djEyaDMuMWMuMDcuMzQ4LjE3Ny42ODIuMzE2IDFINGExIDEgMCAwMS0xLTFWMXptNSAxNEgyVjJhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDdhNS4wMjkgNS4wMjkgMCAwMS0xLTF6bTgtM2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0xLjY0Ni0xLjM1NGEuNS41IDAgMDEwIC43MDhsLTIuNSAyLjVhLjUuNSAwIDAxLS43MDggMGwtMS0xYS41LjUgMCAwMS43MDgtLjcwOGwuNjQ2LjY0NyAyLjE0Ni0yLjE0N2EuNS41IDAgMDEuNzA4IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhZ2VzU2VsZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYWludCA9IGZ1bmN0aW9uIEV1aUljb25QYWludChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjk5MyA4LjE3YzAgLjgzLS42NzMgMS41MDctMS40OTkgMS41MDdINS40OThBMS41MDUgMS41MDUgMCAwMTMuOTk5IDguMTdWNi42NjJoNy45OTRWOC4xN3ptLTIuOTk4IDUuOTk4YzAgLjQ1NS0uNDQ4LjgyNy0uOTk5LjgyNy0uNTUgMC0xLS4zNzItMS0uODI3di0zLjQ4NmgydjMuNDg2ek00IDUuNjU4aDEuMjYyVjEuMDA1SDR2NC42NTN6bTIuMjYxIDBoMS4yNDRWMS4wMDVINi4yNnY0LjY1M3ptMi4yNDQgMGgxLjIzNVYxLjAwNUg4LjUwNHY0LjY1M3ptMi4yMzQgMGgxLjI1NFYxLjAwNWgtMS4yNTR2NC42NTN6TTMuMDA4IDBMMyA4LjE3YTIuNTA5IDIuNTA5IDAgMDAyLjQ5OCAyLjUxMmguNXYzLjQ4NmMwIDEuMDEuODk2IDEuODMyIDEuOTk4IDEuODMyIDEuMTAyIDAgMS45OTgtLjgyMiAxLjk5OC0xLjgzMnYtMy40ODZoLjVhMi41MDkgMi41MDkgMCAwMDIuNDk4LTIuNTEyTDEzIDBIMy4wMDh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhaW50OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXBlckNsaXAgPSBmdW5jdGlvbiBFdWlJY29uUGFwZXJDbGlwKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44NCAyLjAxOUwzLjA0NiA4LjU3Yy0uOTg3Ljk1Mi0xLjEzMyAyLjUxNy0uMTk5IDMuNTE2Ljk1MSAxLjAyMSAyLjU4IDEuMTA2IDMuNjQuMTkuMDM0LS4wMy4wNjgtLjA2MS4xLS4wOTJsNS42NTUtNS40NTJhLjQ4NC40ODQgMCAwMDAtLjcwMy41My41MyAwIDAwLS43MjkgMEw1LjkyIDExLjQyMWMtLjU3Mi41NTEtMS41MDUuNjU3LTIuMTMxLjE2M2ExLjQ1NSAxLjQ1NSAwIDAxLS4xMTgtMi4yMTFsNi44OTktNi42NTFhMi42NDYgMi42NDYgMCAwMTMuNjQ0IDAgMi40MjIgMi40MjIgMCAwMTAgMy41MTNMNy4zIDEyLjkwMWMtMS4zMzMgMS4yODUtMy40OTcgMS40OTMtNC45NS4zMzYtMS41NC0xLjIyLTEuNzY0LTMuNDExLS41LTQuODk3YTMuMzMgMy4zMyAwIDAxLjIzOC0uMjUybDUuNzgtNS41NzJhLjQ4NC40ODQgMCAwMDAtLjcwMy41My41MyAwIDAwLS43MyAwbC01Ljc4IDUuNTcyYTQuMzYgNC4zNiAwIDAwMCA2LjMyNGMyLjE4OCAyLjEwOSA1LjIwMiAxLjMxIDYuNjYtLjA5NWw2LjkyNS02LjY3NmEzLjM5IDMuMzkgMCAwMDAtNC45MkMxMy41MzQuNjYgMTEuMjUuNjYgOS44NDEgMi4wMTl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhcGVyQ2xpcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGFydGlhbCA9IGZ1bmN0aW9uIEV1aUljb25QYXJ0aWFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi42NjQgMTQuODcxYTcgNyAwIDAxLTIuNDItMTIuNzc4LjUuNSAwIDAxLjYxMi4wNmMuNDU2LjQzMSA4LjIxNiA4LjIxMiA4Ljk4IDkuMDAyYS41LjUgMCAwMS4wNjMuNjE4IDcuMDAyIDcuMDAyIDAgMDEtNy4yMzUgMy4wOTh6bTYuMTY4LTMuMzEyYTE5NjEuNzMzIDE5NjEuNzMzIDAgMDAtOC4zNzctOC40IDYgNiAwIDEwOC4zNzggOC40em0yLjA5NS0yLjU0OGEuNS41IDAgMTEtLjk5LS4xNDRjLjAxLS4wNjYuMDEtLjA2Ni4wMTgtLjEzM2E2LjAwNyA2LjAwNyAwIDAwLS4wMzQtMS43MTQuNS41IDAgMTEuOTg3LS4xNjNjLjEwOC42NTUuMTIyIDEuMzI2LjA0IDEuOTk5bC0uMDIxLjE1NXptLTEuMjczLTUuMTM4YS41LjUgMCAxMS0uODA4LjU5IDYuMDI2IDYuMDI2IDAgMDAtMS4zMDQtMS4zMDguNS41IDAgMDEuNTktLjgwNiA3LjAyNiA3LjAyNiAwIDAxMS41MjIgMS41MjR6TTkuMTY5IDEuMDk4YS41LjUgMCAxMS0uMTY2Ljk4NiA2LjEwNSA2LjEwNSAwIDAwLTEuODQ5LS4wMjYuNS41IDAgMDEtLjE0LS45OSA3LjAyIDcuMDIgMCAwMTIuMTU1LjAzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QYXJ0aWFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXVzZSA9IGZ1bmN0aW9uIEV1aUljb25QYXVzZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMmExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMTAyIDBWM2ExIDEgMCAwMC0xLTF6bTYgMGExIDEgMCAwMC0xIDF2MTBhMSAxIDAgMTAyIDBWM2ExIDEgMCAwMC0xLTF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblBhdXNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QYXltZW50ID0gZnVuY3Rpb24gRXVpSWNvblBheW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNTg2IDIuNTg2QTIgMiAwIDAwMCA0aDFhMSAxIDAgMDExLTFWMmEyIDIgMCAwMC0xLjQxNC41ODZ6TTIgMmgxMC41YS41LjUgMCAwMTAgMUgyVjJ6TTAgNGgxdjYuNWEuNS41IDAgMDEtMSAwVjR6bTIuNTg2LjU4NkEyIDIgMCAwMDIgNmgxYTEgMSAwIDAxMS0xVjRhMiAyIDAgMDAtMS40MTQuNTg2em0wIDguODI4QTIgMiAwIDAxMiAxMmgxYTEgMSAwIDAwMSAxdjFhMiAyIDAgMDEtMS40MTQtLjU4NnptMTIuODI4LTguODI4QTIgMiAwIDAxMTYgNmgtMWExIDEgMCAwMC0xLTFWNGEyIDIgMCAwMTEuNDE0LjU4NnptMCA4LjgyOEEyIDIgMCAwMDE2IDEyaC0xYTEgMSAwIDAxLTEgMXYxYTIgMiAwIDAwMS40MTQtLjU4NnpNNCA0aDEwdjFINHpNMyA3aDEydjFIM3ptMSA2aDEwdjFINHpNMiA2aDF2Nkgyem0xMyAwaDF2NmgtMXptLTUuNSA0YS41LjUgMCAwMTAgMUg3LjQ5NmEuNS41IDAgMDEwLTFIOS41em00IDBhLjUuNSAwIDAxMCAxaC0yLjAwNGEuNS41IDAgMDEwLTFIMTMuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGF5bWVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGVuY2lsID0gZnVuY3Rpb24gRXVpSWNvblBlbmNpbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjE0OCAzLjE0OEwxMSAybC05IDl2M2gzbDktOS0xLjE0NC0xLjE0NC04LjAwMiA3Ljk5OGEuNTAyLjUwMiAwIDAxLS43MDggMCAuNTAyLjUwMiAwIDAxMC0uNzA4bDguMDAyLTcuOTk4ek0xMSAxYy4yNTYgMCAuNTEyLjA5OC43MDcuMjkzbDMgM2EuOTk5Ljk5OSAwIDAxMCAxLjQxNGwtOSA5QS45OTcuOTk3IDAgMDE1IDE1SDJhMSAxIDAgMDEtMS0xdi0zYzAtLjI2NS4xMDUtLjUyLjI5My0uNzA3bDktOUEuOTk3Ljk5NyAwIDAxMTEgMXpNNSAxNEgydi0zbDMgM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGVuY2lsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QZXJjZW50ID0gZnVuY3Rpb24gRXVpSWNvblBlcmNlbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNSA4YzEuMTA1IDAgMi0xLjEyIDItMi41UzYuMTA1IDMgNSAzIDMgNC4xMiAzIDUuNSAzLjg5NSA4IDUgOHptMC0xYy4zNTYgMCAxLS40NTIgMS0xLjVTNS4zNTYgNCA1IDRzLTEgLjQ1Mi0xIDEuNVM0LjY0NCA3IDUgN3pcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjUgM0gxMkw1LjUgMTNINGw2LjUtMTB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgMTAuNWMwIDEuMzgtLjg5NSAyLjUtMiAyLjVzLTItMS4xMi0yLTIuNVM5Ljg5NSA4IDExIDhzMiAxLjEyIDIgMi41em0tMSAwYzAgMS4wNDgtLjY0NCAxLjUtMSAxLjVzLTEtLjQ1Mi0xLTEuNS42NDQtMS41IDEtMS41IDEgLjQ1MiAxIDEuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGVyY2VudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uUGluID0gZnVuY3Rpb24gRXVpSWNvblBpbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDExaDQuNWEuNS41IDAgMTAwLTFoLTEwYS41LjUgMCAwMDAgMUg3djQuMjVjMCAuNDE0LjIyNC43NS41Ljc1cy41LS4zMzYuNS0uNzVWMTF6TTQgNGgxdjZINFY0em02IDBoMXY2aC0xVjR6TTQuMjg2IDJDNC4wOCAyIDQgMi4wNjMgNCAydjFjMC0uMDYzLjA4IDAgLjI4NiAwaDYuNDI4QzEwLjkyIDMgMTEgMi45MzcgMTEgM1YyYzAgLjA2My0uMDggMC0uMjg2IDBINC4yODZ6bTAtMWg2LjQyOEMxMS40MjQgMSAxMiAxLjQ0OCAxMiAydjFjMCAuNTUyLS41NzYgMS0xLjI4NiAxSDQuMjg2QzMuNTc2IDQgMyAzLjU1MiAzIDNWMmMwLS41NTIuNTc2LTEgMS4yODYtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uUGluOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QaW5GaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uUGluRmlsbGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxMWg0LjVhLjUuNSAwIDEwMC0xaC0xMGEuNS41IDAgMTAwIDFIOHY0LjI1YzAgLjQxNC4yMjQuNzUuNS43NXMuNS0uMzM2LjUtLjc1VjExek01IDRoN3Y2SDVWNHptLjI4Ni0zaDYuNDI4QzEyLjQyNCAxIDEzIDEuNDQ4IDEzIDJ2MWMwIC41NTItLjU3NiAxLTEuMjg2IDFINS4yODZDNC41NzYgNCA0IDMuNTUyIDQgM1YyYzAtLjU1Mi41NzYtMSAxLjI4Ni0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QaW5GaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsYXkgPSBmdW5jdGlvbiBFdWlJY29uUGxheShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNjA4IDMuMDYzQzQuMzQ1IDIuODk1IDQgMy4wODkgNCAzLjQxOHY5LjE2N2MwIC4zMjkuMzQ1LjUyMy42MDguMzU2bDcuMi00LjU4NGEuNDI2LjQyNiAwIDAwMC0uNzExbC03LjItNC41ODN6bS41MzgtLjg0NGw3LjIgNC41ODNhMS40MjYgMS40MjYgMCAwMTAgMi4zOTlsLTcuMiA0LjU4M0M0LjIxIDE0LjM4IDMgMTMuNjk2IDMgMTIuNTg1VjMuNDE4QzMgMi4zMDcgNC4yMSAxLjYyNCA1LjE0NiAyLjIyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbGF5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QbGF5RmlsbGVkID0gZnVuY3Rpb24gRXVpSWNvblBsYXlGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4zNDUgNi44MDFsLTcuMi00LjU4MUM0LjIxIDEuNjI1IDMgMi4zMDggMyAzLjQxOXY5LjE2MmMwIDEuMTExIDEuMjEgMS43OTQgMi4xNDYgMS4xOTlsNy4yLTQuNTgxYTEuNDI1IDEuNDI1IDAgMDAwLTIuMzk4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbGF5RmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QbHVzID0gZnVuY3Rpb24gRXVpSWNvblBsdXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjI1IDNhLjUuNSAwIDAxLjUuNXYzLjc1aDMuNzVhLjUuNSAwIDAxLjUuNXYuNWEuNS41IDAgMDEtLjUuNUg4Ljc1djMuNzVhLjUuNSAwIDAxLS41LjVoLS41YS41LjUgMCAwMS0uNS0uNVY4Ljc1SDMuNWEuNS41IDAgMDEtLjUtLjV2LS41YS41LjUgMCAwMS41LS41aDMuNzVWMy41YS41LjUgMCAwMS41LS41aC41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25QbHVzSW5DaXJjbGUgPSBmdW5jdGlvbiBFdWlJY29uUGx1c0luQ2lyY2xlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggN2gzLjVhLjUuNSAwIDExMCAxSDh2My41YS41LjUgMCAxMS0xIDBWOEgzLjVhLjUuNSAwIDAxMC0xSDdWMy41YS41LjUgMCAwMTEgMFY3em0tLjUtN0MxMS42MzYgMCAxNSAzLjM2NCAxNSA3LjVTMTEuNjM2IDE1IDcuNSAxNSAwIDExLjYzNiAwIDcuNSAzLjM2NCAwIDcuNSAwem0wIC44ODJhNi42MTggNi42MTggMCAxMDAgMTMuMjM2QTYuNjE4IDYuNjE4IDAgMDA3LjUuODgyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzSW5DaXJjbGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBsdXNJbkNpcmNsZUZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDdWMy41YS41LjUgMCAwMC0xIDBWN0gzLjVhLjUuNSAwIDAwMCAxSDd2My41YS41LjUgMCAxMDEgMFY4aDMuNWEuNS41IDAgMTAwLTFIOHptLS41IDhhNy41IDcuNSAwIDExMC0xNSA3LjUgNy41IDAgMDEwIDE1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QbHVzSW5DaXJjbGVGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblBvcG91dCA9IGZ1bmN0aW9uIEV1aUljb25Qb3BvdXQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA4LjVhLjUuNSAwIDExMSAwVjEyYTIgMiAwIDAxLTIgMkg0YTIgMiAwIDAxLTItMlY0YTIgMiAwIDAxMi0yaDMuNWEuNS41IDAgMDEwIDFINGExIDEgMCAwMC0xIDF2OGExIDEgMCAwMDEgMWg4YTEgMSAwIDAwMS0xVjguNXptLTUuMTIuMzM5YS41LjUgMCAxMS0uNzA2LS43MDdMMTMuMzA1IDJIMTAuNWEuNS41IDAgMTEwLTFIMTRhMSAxIDAgMDExIDF2My41YS41LjUgMCAxMS0xIDBWMi43Mkw3Ljg4IDguODM4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Qb3BvdXQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblB1c2ggPSBmdW5jdGlvbiBFdWlJY29uUHVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMTcxIDUuMTVMMTAuMTE0IDdIMS41NTZDMS4yNDkgNyAxIDcuMjI0IDEgNy41cy4yNDkuNS41NTYuNWg4LjUyNmwtMS45MSAxLjgyYS41Mi41MiAwIDAwMCAuNzdjLjIyNy4yMTMuNi4yMTMuODI4IDBsMi4wNS0xLjk1YTEuNTUyIDEuNTUyIDAgMDAwLTIuMzFMOSA0LjM4YS42MTcuNjE3IDAgMDAtLjgyOSAwIC41Mi41MiAwIDAwMCAuNzd6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjgwNCAxMi43OTJBLjk5My45OTMgMCAwMTYgMTEuODJWMTBINXYxLjgyNmMwIC45NDUuNjczIDEuNzYgMS42MDggMS45NDVsNiAxLjE5QTEuOTkyIDEuOTkyIDAgMDAxNSAxMy4wMTZWMS45ODRBMiAyIDAgMDAxMi42MDguMDRsLTYgMS4xOUM1LjY3MyAxLjQxNSA1IDIuMjMgNSAzLjE3NVY1aDFWMy4xOGMwLS40NzIuMzM2LS44NzkuODA0LS45NzJsNi0xLjE4OUExIDEgMCAwMTE0IDEuOTkxdjExLjAxOGEuOTk1Ljk5NSAwIDAxLTEuMTk2Ljk3MmwtNi0xLjE5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25QdXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25RdWVzdGlvbkluQ2lyY2xlID0gZnVuY3Rpb24gRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE0QTYgNiAwIDExOCAyYTYgNiAwIDAxMCAxMnptMC0xQTUgNSAwIDEwOCAzYTUgNSAwIDAwMCAxMHptLS4xODYtMS4wNjVBLjc4NS43ODUgMCAwMTcgMTEuMTJjMC0uNDguMzQtLjgyLjgxNC0uODIuNDc1IDAgLjgwOS4zNC44MDkuODIgMCAuNDc1LS4zMzQuODE1LS44MDkuODE1ek01LjkgNi4zMTdDNS45NiA1LjE2OCA2Ljc1NSA0LjQgOC4wNDggNC40YzEuMjE4IDAgMi4wOTEuNzU5IDIuMDkxIDEuOCAwIC43MzYtLjM2IDEuMzA0LTEuMDMgMS43MDctLjU2LjMzLS43MTcuNTYtLjcxNyAxLjAyMnYuMzA1bC0uMS4xSDcuNDdsLS4xLS4xdi0uNDMxYy0uMDA1LS42NDYuMzAyLTEuMTA0Ljk4Ny0xLjUxNC41MjctLjMyMi43MDgtLjU5LjcwOC0xLjA0NyAwLS41MzYtLjQxNi0uOTEtMS4wNS0uOTEtLjY1MiAwLTEuMDY0LjM3NC0xLjExMi45OThsLS4xLjA5Mkg2bC0uMS0uMTA1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25RdWVzdGlvbkluQ2lyY2xlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25RdW90ZSA9IGZ1bmN0aW9uIEV1aUljb25RdW90ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuODQ4IDIuNDdhMSAxIDAgMDEtLjMxOCAxLjM3OEE3LjI4NCA3LjI4NCAwIDAwMy43NSA3LjAxIDMgMyAwIDExMSAxMHYtLjAyN2EzLjUyMSAzLjUyMSAwIDAxLjAxLS4yMzJjLjAwOS0uMTUuMDI3LS4zNi4wNjItLjYxOC4wNy0uNTEzLjIwNy0xLjIyLjQ4NC0yLjAxNC41NTItMS41OSAxLjY3LTMuNTU1IDMuOTE0LTQuOTU3YTEgMSAwIDAxMS4zNzguMzE4em03IDBhMSAxIDAgMDEtLjMxOCAxLjM3OCA3LjI4MyA3LjI4MyAwIDAwLTIuNzggMy4xNjJBMyAzIDAgMTE4IDEwdi0uMDI3YTMuNTIxIDMuNTIxIDAgMDEuMDEtLjIzMmMuMDA5LS4xNS4wMjctLjM2LjA2Mi0uNjE4LjA3LS41MTMuMjA3LTEuMjIuNDg0LTIuMDE0LjU1Mi0xLjU5IDEuNjctMy41NTUgMy45MTQtNC45NTdhMSAxIDAgMDExLjM3OC4zMTh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblF1b3RlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25SZWZyZXNoID0gZnVuY3Rpb24gRXVpSWNvblJlZnJlc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS4yMjggMi45NDJhLjUuNSAwIDExLS41MzguODQyQTUgNSAwIDEwMTMgOGEuNS41IDAgMTExIDAgNiA2IDAgMTEtMi43NzItNS4wNTh6TTE0IDEuNXYzQTEuNSAxLjUgMCAwMTEyLjUgNmgtM2EuNS41IDAgMDEwLTFoM2EuNS41IDAgMDAuNS0uNXYtM2EuNS41IDAgMTExIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJlZnJlc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblJlcG9ydGVyID0gZnVuY3Rpb24gRXVpSWNvblJlcG9ydGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcuNjg0Ljg5NUw2LjA3NC4zNThhMSAxIDAgMDAtMS4yOTYuNzUzTDQuMiA0SDIuNWEuNS41IDAgMDAwIDFoMS42MjZhNC4wMDcgNC4wMDcgMCAwMC4xMSAyLjM1OWwtMi4wNzItLjM0NUExIDEgMCAwMDEgOHYxYy4zNjQgMCAuNzA2LjA5NyAxIC4yNjhWOGwxIC4xNjcgMS44NTkuMzEgMi4xNjMuMzYuNDc4LjA4djZMMiAxNHYtMS4yNjhBMS45OSAxLjk5IDAgMDExIDEzdjFhMSAxIDAgMDAuODM2Ljk4Nmw2IDFjLjEwOC4wMTguMjIuMDE4LjMyOCAwbDYtMUExIDEgMCAwMDE1IDE0di0xYTEuOTkgMS45OSAwIDAxLTEtLjI2OFYxNGwtNS41LjkxN3YtNmwuNDc4LS4wOCAyLjE2My0uMzZMMTMgOC4xNjYgMTQgOHYxLjI2OEExLjk5IDEuOTkgMCAwMTE1IDlWOGExIDEgMCAwMC0xLjE2NC0uOTg2bC0yLjA3My4zNDVBMy45OTEgMy45OTEgMCAwMDExLjg3NCA1SDEzLjVhLjUuNSAwIDAwMC0xaC0xLjdsLS41NzgtMi44OUExIDEgMCAwMDkuOTI1LjM1OUw4LjMxNi44OTVhMSAxIDAgMDEtLjYzMiAwem0yLjg4IDYuNjY0QTMuMDEzIDMuMDEzIDAgMDAxMC44MyA1SDUuMTdhMy4wMTMgMy4wMTMgMCAwMC4yNjYgMi41NTlMOCA3Ljk4NmwyLjU2NC0uNDI3ek0xMC44IDRIOS4yTDkgM2wxLjUtLjUuMyAxLjV6TTEgMTJhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTE0IDBhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJlcG9ydGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25SZXR1cm5LZXkgPSBmdW5jdGlvbiBFdWlJY29uUmV0dXJuS2V5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEuOTk0IDRjMS4wNTkgMCAxLjkyNC44MTggMiAxLjg1NmwuMDA2LjE1djEuOTg4YTIuMDA1IDIuMDA1IDAgMDEtMS44NTYgMkwxMiAxMEgzLjQ4NGwxLjkxIDEuODJhLjUyLjUyIDAgMDEwIC43Ny42MTYuNjE2IDAgMDEtLjgyOSAwbC0yLjA1LTEuOTVhMS41NTEgMS41NTEgMCAwMTAtMi4zMWwyLjA1LTEuOTVhLjYxNy42MTcgMCAwMS44MyAwIC41Mi41MiAwIDAxMCAuNzdMMy40NSA5SDEyYy41MTQtLjAwMy45MzUtLjM5Ljk5My0uODg4TDEzIDcuOTk0VjYuMDA2YzAtLjUxNi0uMzg4LS45NDEtLjg4OC0xTDExLjk5NCA1SDkuNWEuNS41IDAgMDEtLjA5LS45OTJMOS41IDRoMi40OTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblJldHVybktleTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2F2ZSA9IGZ1bmN0aW9uIEV1aUljb25TYXZlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4wMDggMkgyLjI4MmMtLjE4MSAwLS4yNDUuMDAyLS4yNzUuMDA3LS4wMDUuMDMtLjAwNy4wOTQtLjAwNy4yNzV2MTEuNDM2YzAgLjE4MS4wMDIuMjQ1LjAwNy4yNzUuMDMuMDA1LjA5NC4wMDcuMjc1LjAwN2gxMS40MzZjLjE4MSAwIC4yNDUtLjAwMi4yNzUtLjAwNy4wMDUtLjAzLjAwNy0uMDk0LjAwNy0uMjc1VjQuNjJjMC0uMTMtLjAwMS0uMTgtLjAwNC0uMjA0YTIuNjU0IDIuNjU0IDAgMDAtLjE0MS0uMTQ3TDExLjczIDIuMTQ1YTIuNjU0IDIuNjU0IDAgMDAtLjE0Ny0uMTQxQTIuNjU0IDIuNjU0IDAgMDAxMS4zOCAyaC0uMzg4Yy4wMDUuMDguMDA4LjE3Mi4wMDguMjgydjIuNDM2YzAgLjQ0Ni0uMDQ2LjYwNy0uMTM0Ljc3YS45MDkuOTA5IDAgMDEtLjM3OC4zNzhjLS4xNjMuMDg4LS4zMjQuMTM0LS43Ny4xMzRINi4yODJjLS40NDYgMC0uNjA3LS4wNDYtLjc3LS4xMzRhLjkwOS45MDkgMCAwMS0uMzc4LS4zNzhDNS4wNDYgNS4zMjUgNSA1LjE2NCA1IDQuNzE4VjIuMjgyYzAtLjExLjAwMy0uMjAyLjAwOC0uMjgyek0yLjI4MiAxaDkuMDk4Yy4yNTkgMCAuMzQ4LjAxLjQ0Ny4wMzJhLjg3Ljg3IDAgMDEuMjczLjExM2MuMDg2LjA1NC4xNTYuMTEuMzM4LjI5M2wyLjEyNCAyLjEyNGMuMTgyLjE4Mi4yMzkuMjUyLjI5My4zMzhhLjg3Ljg3IDAgMDEuMTEzLjI3M2MuMDIzLjEuMDMyLjE4OC4wMzIuNDQ3djkuMDk4YzAgLjQ0Ni0uMDQ2LjYwNy0uMTM0Ljc3YS45MDkuOTA5IDAgMDEtLjM3OC4zNzhjLS4xNjMuMDg4LS4zMjQuMTM0LS43Ny4xMzRIMi4yODJjLS40NDYgMC0uNjA3LS4wNDYtLjc3LS4xMzRhLjkwOS45MDkgMCAwMS0uMzc4LS4zNzhjLS4wODgtLjE2My0uMTM0LS4zMjQtLjEzNC0uNzdWMi4yODJjMC0uNDQ2LjA0Ni0uNjA3LjEzNC0uNzdhLjkwOS45MDkgMCAwMS4zNzgtLjM3OGMuMTYzLS4wODguMzI0LS4xMzQuNzctLjEzNHpNNiAyLjI4MnYyLjQzNmMwIC4xODEuMDAyLjI0NS4wMDcuMjc1LjAzLjAwNS4wOTQuMDA3LjI3NS4wMDdoMy40MzZjLjE4MSAwIC4yNDUtLjAwMi4yNzUtLjAwNy4wMDUtLjAzLjAwNy0uMDk0LjAwNy0uMjc1VjIuMjgyYzAtLjE4MS0uMDAyLS4yNDUtLjAwNy0uMjc1QTIuMjQ4IDIuMjQ4IDAgMDA5LjcxOCAySDYuMjgyYy0uMTgxIDAtLjI0NS4wMDItLjI3NS4wMDctLjAwNS4wMy0uMDA3LjA5NC0uMDA3LjI3NXpNOCAxMmEyIDIgMCAxMTAtNCAyIDIgMCAwMTAgNHptMC0xYTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TYXZlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TY2FsZSA9IGZ1bmN0aW9uIEV1aUljb25TY2FsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMi41IDEyYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0yIDBhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem00LTJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0yLTFhLjUuNSAwIDExMC0xIC41LjUgMCAwMTAgMXptMC0zYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bS0yIDJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMGEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0wIDJhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem0tMiAwYS41LjUgMCAxMTAgMSAuNS41IDAgMDEwLTF6bTItMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xem02LTZhLjUuNSAwIDExMCAxIC41LjUgMCAwMTAtMXptLTIgMmEuNS41IDAgMTEwIDEgLjUuNSAwIDAxMC0xelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TY2FsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2VhcmNoID0gZnVuY3Rpb24gRXVpSWNvblNlYXJjaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExLjI3MSAxMS45NzhsMy44NzIgMy44NzNhLjUwMi41MDIgMCAwMC43MDggMCAuNTAyLjUwMiAwIDAwMC0uNzA4bC0zLjU2NS0zLjU2NGMyLjM4LTIuNzQ3IDIuMjY3LTYuOTIzLS4zNDItOS41MzItMi43My0yLjczLTcuMTctMi43My05Ljg5OCAwLTIuNzI4IDIuNzI5LTIuNzI4IDcuMTcgMCA5LjlhNi45NTUgNi45NTUgMCAwMDQuOTQ5IDIuMDUuNS41IDAgMDAwLTEgNS45NiA1Ljk2IDAgMDEtNC4yNDItMS43NTcgNi4wMSA2LjAxIDAgMDEwLTguNDg2YzIuMzM3LTIuMzQgNi4xNDMtMi4zNCA4LjQ4NCAwYTYuMDEgNi4wMSAwIDAxMCA4LjQ4Ni41LjUgMCAwMC4wMzQuNzM4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWFyY2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjg3NSAzLjQxOGE2IDYgMCAxMC43MDcuNzA3bC0yLjQ2IDIuNDYtMS4xNTYgMS4xNTZhMSAxIDAgMTEtLjcwNy0uNzA3bC43NTctLjc1N2EyIDIgMCAwMC0yLjQzIDMuMTM3LjUuNSAwIDExLS43MDcuNzA3IDMgMyAwIDAxMy44Ni00LjU2N2wuNzE0LS43MTRBNCA0IDAgMTA4IDEyYS41LjUgMCAxMTAgMSA1IDUgMCAxMTMuMTY0LTguODcxbC43MS0uNzF6bS43MDktLjcwOWE3IDcgMCAxMC43MDcuNzA3bC4zNjYtLjM2NmEuNS41IDAgMTAtLjcwNy0uNzA3bC0uMzY2LjM2NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2VjdXJpdHlTaWduYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMy42NTcgMy4wNWEuNS41IDAgMDAtLjcwNy0uNzA3bC0uMzY2LjM2NkE3IDcgMCAxMDggMTVhNC45OTQgNC45OTQgMCAwMS0uNTk3LTEuMDMgNiA2IDAgMTE0LjQ3MS0xMC41NTJsLS43MS43MWE1IDUgMCAxMC00LjA4IDguNzg4IDUuMDI3IDUuMDI3IDAgMDEtLjA4Mi0xLjA0MkE0LjAwMiA0LjAwMiAwIDAxOCA0YTMuOTggMy45OCAwIDAxMi40NTMuODRsLS43MTUuNzE0YTMgMyAwIDAwLTMuODYgNC41NjcuNS41IDAgMTAuNzA4LS43MDcgMiAyIDAgMDEyLjQzLTMuMTM3bC0uNzU3Ljc1N2ExIDEgMCAxMC43MDcuNzA3bDEuMTU1LTEuMTU1IDIuNDYtMi40NmE1Ljk3MiA1Ljk3MiAwIDAxMS4zOSAzLjI3N2MuMzY3LjE1OC43MTMuMzYgMS4wMjkuNTk3IDAtMS42MzYtLjU3LTMuMjcxLTEuNzEtNC41ODRsLjM2Ny0uMzY2ek0xNiAxMmE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS00IC41YS41NzcuNTc3IDAgMDEtLjU3LS40OTVsLS4yOS0yLjAxNWEuODY3Ljg2NyAwIDExMS43MTggMGwtLjI4OCAyLjAxNWEuNTc3LjU3NyAwIDAxLS41Ny40OTV6bTAgMi41YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbERldGVjdGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkID0gZnVuY3Rpb24gRXVpSWNvblNlY3VyaXR5U2lnbmFsUmVzb2x2ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMuNjU3IDMuMDVhLjUuNSAwIDEwLS43MDctLjcwN2wtLjM2Ni4zNjZBNyA3IDAgMTA4IDE1YTQuOTk0IDQuOTk0IDAgMDEtLjU5Ny0xLjAzIDYgNiAwIDExNC40NzEtMTAuNTUybC0uNzEuNzFhNSA1IDAgMTAtNC4wOCA4Ljc4OCA1LjAyOCA1LjAyOCAwIDAxLS4wODItMS4wNDJBNC4wMDIgNC4wMDIgMCAwMTggNGEzLjk4IDMuOTggMCAwMTIuNDUzLjg0bC0uNzE1LjcxNGEzIDMgMCAwMC0zLjg2IDQuNTY3LjUuNSAwIDEwLjcwOC0uNzA3IDIgMiAwIDAxMi40My0zLjEzN2wtLjc1Ny43NTdhMSAxIDAgMTAuNzA3LjcwN2wxLjE1NS0xLjE1NSAyLjQ2LTIuNDZhNS45NzIgNS45NzIgMCAwMTEuMzkgMy4yNzdjLjM2Ny4xNTguNzEzLjM2IDEuMDI5LjU5NyAwLTEuNjM2LS41Ny0zLjI3MS0xLjcxLTQuNTg0bC4zNjctLjM2NnpNMTYgMTJhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwem0tMS42NDYtMS4zNTRhLjUuNSAwIDAxMCAuNzA3bC0yLjUgMi41YS41LjUgMCAwMS0uNzA4IDBsLTEtMWEuNS41IDAgMDEuNzA4LS43MDdsLjY0Ni42NDcgMi4xNDYtMi4xNDdhLjUuNSAwIDAxLjcwOCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TZXNzaW9uVmlld2VyID0gZnVuY3Rpb24gRXVpSWNvblNlc3Npb25WaWV3ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDZoMXYxSDRWNnptMiAySDVWN2gxdjF6bTAgMVY4aDF2MUg2em0tMSAxVjloMXYxSDV6bTAgMHYxSDR2LTFoMXptMiAwaDR2MUg3di0xelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEgM2ExIDEgMCAwMTEtMWgxMmExIDEgMCAwMTEgMXYxMGExIDEgMCAwMS0xIDFIMmExIDEgMCAwMS0xLTFWM3ptMSAxaDEydjlIMlY0elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU2Vzc2lvblZpZXdlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU2hhcmQgPSBmdW5jdGlvbiBFdWlJY29uU2hhcmQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjEzNCA3LjAzMUw4IDEyLjc2NGwyLjg2Ni01LjczM0w4IDIuMDE2IDUuMTM0IDcuMDN6TTggMGw0IDctNCA4LTQtOCA0LTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNoYXJkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TaGFyZSA9IGZ1bmN0aW9uIEV1aUljb25TaGFyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNi44MXY2LjM4YzAgLjQ5My40NDguOS45OTIuOWg3LjAxNmMuNTQzIDAgLjk5Mi0uNDA2Ljk5Mi0uOVY2LjgxYzAtLjQ5My0uNDQ4LS45LS45OTItLjlIMy45OTJjLS41NDMgMC0uOTkyLjQwNi0uOTkyLjl6TTYgNXYuOTFoM1Y1aDIuMDA4QzEyLjEwOCA1IDEzIDUuODE4IDEzIDYuODF2Ni4zOGMwIDEtLjkgMS44MS0xLjk5MiAxLjgxSDMuOTkyQzIuODkyIDE1IDIgMTQuMTgyIDIgMTMuMTlWNi44MUMyIDUuODEgMi45IDUgMy45OTIgNUg2em0xLjk5Ny0zLjU1MkEuNTA2LjUwNiAwIDAxOCAxLjV2OGEuNS41IDAgMDEtMSAwdi04YS41MS41MSAwIDAxMC0uMDE3TDUuMTggMy4zOTRhLjUyLjUyIDAgMDEtLjc3IDAgLjYxNy42MTcgMCAwMTAtLjgyOUw2LjM2LjUxNWExLjU1MiAxLjU1MiAwIDAxMi4zMSAwbDEuOTUgMi4wNWMuMjE0LjIyOS4yMTQuNjAxIDAgLjgzYS41Mi41MiAwIDAxLS43NyAwTDcuOTk3IDEuNDQ3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TaGFyZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU25vd2ZsYWtlID0gZnVuY3Rpb24gRXVpSWNvblNub3dmbGFrZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjAwNy41YS41LjUgMCAwMTEgMHYyLjAyNGEuOTk5Ljk5OSAwIDAwLjI2OC0uMjI3bDEuMDI3LTEuMjMzYS41LjUgMCAwMS43NjkuNjRMOC4yNzUgMy44NmEuOTk5Ljk5OSAwIDAxLS4yNjguMjI3djIuNTQ4bDIuMjA3LTEuMjc0YzAtLjExNC4wMi0uMjMxLjA2Mi0uMzQ2bC45NjgtMi42MzJhLjUuNSAwIDExLjkzOC4zNDVsLS41NTQgMS41MDZhLjk5OC45OTggMCAwMC0uMDYyLjM0NmwxLjc1My0xLjAxMmEuNS41IDAgMTEuNS44NjZsLTEuNzUzIDEuMDEyYy4xLjA1Ny4yMS4wOTguMzMuMTE5bDEuNTgyLjI3M2EuNS41IDAgMTEtLjE3Ljk4NmwtMi43NjQtLjQ3OGExIDEgMCAwMS0uMzMtLjEyTDguNTA2IDcuNWwyLjIwNyAxLjI3NGExIDEgMCAwMS4zMy0uMTE5bDIuNzY0LS40NzhhLjUuNSAwIDExLjE3Ljk4NmwtMS41ODIuMjczYS45OTkuOTk5IDAgMDAtLjMzLjEybDEuNzUzIDEuMDExYS41LjUgMCAxMS0uNS44NjZsLTEuNzUzLTEuMDEyYzAgLjExNS4wMi4yMzEuMDYyLjM0NmwuNTU0IDEuNTA2YS41LjUgMCAwMS0uOTM4LjM0NWwtLjk2OC0yLjYzMmEuOTk5Ljk5OSAwIDAxLS4wNjItLjM0Nkw4LjAwNyA4LjM2NnYyLjU0OGMuMDk4LjA1OC4xOS4xMzMuMjY4LjIyN2wxLjc5NiAyLjE1NWEuNS41IDAgMDEtLjc2OS42NGwtMS4wMjctMS4yMzNhLjk5OS45OTkgMCAwMC0uMjY4LS4yMjZWMTQuNWEuNS41IDAgMDEtMSAwdi0yLjAyNGEuOTk5Ljk5OSAwIDAwLS4yNjkuMjI3bC0xLjAyNyAxLjIzM2EuNS41IDAgMDEtLjc2OC0uNjRsMS43OTUtMi4xNTVhLjk5OS45OTkgMCAwMS4yNjktLjIyN1Y4LjM2Nkw0LjggOS42NGMwIC4xMTQtLjAyLjIzMS0uMDYyLjM0NmwtLjk2OSAyLjYzMmEuNS41IDAgMTEtLjkzOC0uMzQ1bC41NTQtMS41MDZhMSAxIDAgMDAuMDYyLS4zNDZsLTEuNzUzIDEuMDEyYS41LjUgMCAwMS0uNS0uODY2bDEuNzUzLTEuMDEyYS45OTkuOTk5IDAgMDAtLjMzLS4xMTlsLTEuNTgyLS4yNzNhLjUuNSAwIDAxLjE3LS45ODZsMi43NjQuNDc4Yy4xMi4wMi4yMzIuMDYyLjMzLjEyTDYuNTA4IDcuNSA0LjMgNi4yMjZhLjk5OS45OTkgMCAwMS0uMzMuMTE5bC0yLjc2NS40NzhhLjUuNSAwIDExLS4xNy0uOTg2bDEuNTgyLS4yNzNhLjk5OS45OTkgMCAwMC4zMy0uMTJMMS4xOTQgNC40MzRhLjUuNSAwIDExLjUtLjg2NmwxLjc1MyAxLjAxMmMwLS4xMTQtLjAyLS4yMzEtLjA2Mi0uMzQ2TDIuODMgMi43MjdhLjUuNSAwIDExLjkzOC0uMzQ1bC45NjkgMi42MzJhLjk5OS45OTkgMCAwMS4wNjIuMzQ2bDIuMjA3IDEuMjc0VjQuMDg2YTEgMSAwIDAxLS4yNjktLjIyN0w0Ljk0MyAxLjcwNGEuNS41IDAgMDEuNzY4LS42NGwxLjAyNyAxLjIzM2MuMDc5LjA5NC4xNy4xNy4yNjkuMjI3Vi41elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tbm93Zmxha2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNvcnRMZWZ0ID0gZnVuY3Rpb24gRXVpSWNvblNvcnRMZWZ0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC4zMDggN2g4LjEzNmMuMzA3IDAgLjU1Ni4yMjQuNTU2LjVzLS4yNDkuNS0uNTU2LjVINC4zMDhsNC4wOTYgNC4wOTZhLjUuNSAwIDAxLS43MDcuNzA3TDMuNDU0IDguNTYxYTEuNDk0IDEuNDk0IDAgMDEtLjQzMy0uOTI1LjQ1NC40NTQgMCAwMTAtLjI3MmMuMDMtLjMzOC4xNzUtLjY2Ni40MzMtLjkyNWw0LjI0My00LjI0MmEuNS41IDAgMTEuNzA3LjcwN0w0LjMwOCA3elwiLFxuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydExlZnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblNvcnRSaWdodCA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0UmlnaHQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMS42OTIgN0gzLjU1NkMzLjI0OSA3IDMgNy4yMjQgMyA3LjVzLjI0OS41LjU1Ni41aDguMTM2bC00LjA5NiA0LjA5NmEuNS41IDAgMDAuNzA3LjcwN2w0LjI0My00LjI0MmMuMjU4LS4yNTkuNDAzLS41ODcuNDMzLS45MjVhLjQ1NC40NTQgMCAwMDAtLjI3MiAxLjQ5NCAxLjQ5NCAwIDAwLS40MzMtLjkyNUw4LjMwMyAyLjE5N2EuNS41IDAgMTAtLjcwNy43MDdMMTEuNjkyIDd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRSaWdodDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU29ydERvd24gPSBmdW5jdGlvbiBFdWlJY29uU29ydERvd24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDExLjY5MlYzLjU1NkM3IDMuMjQ5IDcuMjI0IDMgNy41IDNzLjUuMjQ5LjUuNTU2djguMTM2bDQuMDk2LTQuMDk2YS41LjUgMCAwMS43MDcuNzA3bC00LjI0MiA0LjI0M2ExLjQ5NCAxLjQ5NCAwIDAxLS45MjUuNDMzLjQ1NC40NTQgMCAwMS0uMjcyIDAgMS40OTQgMS40OTQgMCAwMS0uOTI1LS40MzNMMi4xOTcgOC4zMDNhLjUuNSAwIDExLjcwNy0uNzA3TDcgMTEuNjkyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Tb3J0RG93bjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU29ydFVwID0gZnVuY3Rpb24gRXVpSWNvblNvcnRVcChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggNC4yMDd2OC4yMzdjMCAuMzA3LS4yMjQuNTU2LS41LjU1NnMtLjUtLjI0OS0uNS0uNTU2VjQuMjA3TDIuOTA0IDguMzAzYS41LjUgMCAwMS0uNzA3LS43MDdsNC4yNDItNC4yNDJhMS41IDEuNSAwIDAxMi4xMjIgMGw0LjI0MiA0LjI0MmEuNS41IDAgMTEtLjcwNy43MDdMOCA0LjIwN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU29ydFVwOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Tb3J0YWJsZSA9IGZ1bmN0aW9uIEV1aUljb25Tb3J0YWJsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTcgMTIuNzg2VjMuMkwzLjYwNCA2LjU5NmEuNS41IDAgMDEtLjcwOC0uNzA3bDMuNTM2LTMuNTM1YTEuNSAxLjUgMCAwMTIuMTIxIDBsMy41MzYgMy41MzVhLjUuNSAwIDAxLS43MDcuNzA3TDggMy4yMTR2OS41NTdsMy4zODItMy4zODJhLjUuNSAwIDAxLjcwNy43MDdsLTMuNTM2IDMuNTM2YTEuNSAxLjUgMCAwMS0yLjEyMSAwbC0zLjUzNi0zLjUzNmEuNS41IDAgMDEuNzA4LS43MDdMNyAxMi43ODZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblNvcnRhYmxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyUGx1c0VtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJQbHVzRW1wdHkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMm04IDhoMnYxaC0ydjJoLTF2LTJoLTJ2LTFoMlY4aDF2MnpNNiAzYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMDEtLjAyOS4xMjZMOC43NjIgOS4xMjFsLS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw2IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwMS0uMDU0LjAxNi4xMjcuMTI3IDAgMDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwMS4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyUGx1c0VtcHR5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyUGx1c0ZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyUGx1c0ZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xNCAxMGgydjFoLTJ2MmgtMXYtMmgtMnYtMWgyVjhoMXYyek02IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDIuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMNiAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwNiAyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJQbHVzRmlsbGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdGFyRW1wdHkgPSBmdW5jdGlvbiBFdWlJY29uU3RhckVtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMmEuODYuODYgMCAwMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAwNC44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw4IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwMC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMDA4IDJtMCAxYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMDEtLjAyOS4xMjZsLTIuMjAyIDIuMjI2LS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw4IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwMS0uMDU0LjAxNi4xMjcuMTI3IDAgMDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwMS4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM3LjkwNSAzLjA1IDcuOTI3IDMgOCAzXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJFbXB0eTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RhckVtcHR5U3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uU3RhckVtcHR5U3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMm0wIDFjLjA3MyAwIC4wOTUuMDQ5LjEwNC4wN2wxLjI2NyAyLjc4My4xNjIuMzU2LjM4Ny4wNTUgMi45NzguNDI1Yy4wMTcuMDAyLjA3MS4wMS4wOTUuMDhhLjExNi4xMTYgMCAwMS0uMDI5LjEyNkw4Ljc2MiA5LjEyMWwtLjI1OS4yNjEuMDYzLjM2Mi41MzUgMy4xMTJjLjAwNy4wNCAwIC4wNy0uMDIzLjA5OGEuMTI3LjEyNyAwIDAxLS4wOTEuMDQ2LjEwNi4xMDYgMCAwMS0uMDU1LS4wMTZsLTIuNTc4LTEuNDY5TDYgMTEuMzE0bC0uMzU0LjIwMS0yLjU3OSAxLjQ2OWEuMTAzLjEwMyAwIDAxLS4wNTQuMDE2LjEyNy4xMjcgMCAwMS0uMDkxLS4wNDZjLS4wMjMtLjAyOC0uMDMtLjA1OC0uMDI0LS4wOThsLjUzNi0zLjExMi4wNjMtLjM2Mi0uMjU5LS4yNjEtMi4yMDItMi4yMjZhLjExNi4xMTYgMCAwMS0uMDI5LS4xMjYuMTA4LjEwOCAwIDAxLjA5NC0uMDhsMi45OC0uNDI1LjM4Ni0uMDU1LjE2Mi0uMzU2IDEuMjY3LTIuNzg2QzUuOTA1IDMuMDUgNS45MjcgMyA2IDNcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RhckVtcHR5U3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uU3RhckZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04IDJhLjg2Ljg2IDAgMDAtLjc5Mi41MTFsLTEuMzMgMi45MjQtMy4xMjguNDQ2Yy0uNzEuMTAyLTEuMDAxLjk3Ni0uNDk2IDEuNDg3bDIuMzEzIDIuMzM2LS41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMDQuODY0IDE0Yy4xNDIgMCAuMjg5LS4wMzYuNDI5LS4xMTZMOCAxMi4zNDJsMi43MDcgMS41NDJjLjE0LjA4LjI4Ny4xMTYuNDMuMTE2YS44NzcuODc3IDAgMDAuODU5LTEuMDI3bC0uNTYzLTMuMjY5IDIuMzEzLTIuMzM2Yy41MDUtLjUxMS4yMTQtMS4zODUtLjQ5Ni0xLjQ4N2wtMy4xMjgtLjQ0Ni0xLjMzLTIuOTIzQS44Ni44NiAwIDAwOCAyXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0YXJGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJGaWxsZWRTcGFjZSA9IGZ1bmN0aW9uIEV1aUljb25TdGFyRmlsbGVkU3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAwLS43OTIuNTExbC0xLjMzIDIuOTI0LTMuMTI4LjQ0NmMtLjcxLjEwMi0xLjAwMS45NzYtLjQ5NiAxLjQ4N2wyLjMxMyAyLjMzNi0uNTYzIDMuMjY4QS44NzcuODc3IDAgMDAyLjg2NCAxNGMuMTQyIDAgLjI4OS0uMDM2LjQyOS0uMTE2TDYgMTIuMzQybDIuNzA3IDEuNTQyYy4xNC4wOC4yODcuMTE2LjQzLjExNmEuODc3Ljg3NyAwIDAwLjg1OS0xLjAyN2wtLjU2My0zLjI2OSAyLjMxMy0yLjMzNmMuNTA1LS41MTEuMjE0LTEuMzg1LS40OTYtMS40ODdsLTMuMTI4LS40NDYtMS4zMy0yLjkyM0EuODYuODYgMCAwMDYgMlwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyRmlsbGVkU3BhY2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJNaW51c0VtcHR5ID0gZnVuY3Rpb24gRXVpSWNvblN0YXJNaW51c0VtcHR5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYgMmEuODYuODYgMCAwMC0uNzkyLjUxMWwtMS4zMyAyLjkyNC0zLjEyOC40NDZjLS43MS4xMDItMS4wMDEuOTc2LS40OTYgMS40ODdsMi4zMTMgMi4zMzYtLjU2MyAzLjI2OEEuODc3Ljg3NyAwIDAwMi44NjQgMTRjLjE0MiAwIC4yODktLjAzNi40MjktLjExNkw2IDEyLjM0MmwyLjcwNyAxLjU0MmMuMTQuMDguMjg3LjExNi40My4xMTZhLjg3Ny44NzcgMCAwMC44NTktMS4wMjdsLS41NjMtMy4yNjkgMi4zMTMtMi4zMzZjLjUwNS0uNTExLjIxNC0xLjM4NS0uNDk2LTEuNDg3bC0zLjEyOC0uNDQ2LTEuMzMtMi45MjNBLjg2Ljg2IDAgMDA2IDJtMCAxYy4wNzMgMCAuMDk1LjA0OS4xMDQuMDdsMS4yNjcgMi43ODMuMTYyLjM1Ni4zODcuMDU1IDIuOTc4LjQyNWMuMDE3LjAwMi4wNzEuMDEuMDk1LjA4YS4xMTYuMTE2IDAgMDEtLjAyOS4xMjZMOC43NjIgOS4xMjFsLS4yNTkuMjYxLjA2My4zNjIuNTM1IDMuMTEyYy4wMDcuMDQgMCAuMDctLjAyMy4wOThhLjEyNy4xMjcgMCAwMS0uMDkxLjA0Ni4xMDYuMTA2IDAgMDEtLjA1NS0uMDE2bC0yLjU3OC0xLjQ2OUw2IDExLjMxNGwtLjM1NC4yMDEtMi41NzkgMS40NjlhLjEwMy4xMDMgMCAwMS0uMDU0LjAxNi4xMjcuMTI3IDAgMDEtLjA5MS0uMDQ2Yy0uMDIzLS4wMjgtLjAzLS4wNTgtLjAyNC0uMDk4bC41MzYtMy4xMTIuMDYzLS4zNjItLjI1OS0uMjYxLTIuMjAyLTIuMjI2YS4xMTYuMTE2IDAgMDEtLjAyOS0uMTI2LjEwOC4xMDggMCAwMS4wOTQtLjA4bDIuOTgtLjQyNS4zODYtLjA1NS4xNjItLjM1NiAxLjI2Ny0yLjc4NkM1LjkwNSAzLjA1IDUuOTI3IDMgNiAzem0xMCA3djFoLTV2LTFoNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3Rhck1pbnVzRW1wdHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXJNaW51c0ZpbGxlZCA9IGZ1bmN0aW9uIEV1aUljb25TdGFyTWludXNGaWxsZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNiAyYS44Ni44NiAwIDAxLjc5Mi41MTFsMS4zMyAyLjkyNCAzLjEyOC40NDZjLjcxLjEwMiAxLjAwMS45NzYuNDk2IDEuNDg3TDkuNDMzIDkuNzA0bC41NjMgMy4yNjhBLjg3Ny44NzcgMCAwMTkuMTM2IDE0YS44NjIuODYyIDAgMDEtLjQyOS0uMTE2TDYgMTIuMzQybC0yLjcwNyAxLjU0MmEuODYyLjg2MiAwIDAxLS40My4xMTYuODc3Ljg3NyAwIDAxLS44NTktMS4wMjdsLjU2My0zLjI2OUwuMjU0IDcuMzY4Qy0uMjUgNi44NTcuMDQgNS45ODMuNzUgNS44OGwzLjEyOC0uNDQ2IDEuMzMtMi45MjNBLjg2Ljg2IDAgMDE2IDJ6bTEwIDh2MWgtNXYtMWg1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGFyTWludXNGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0YXRzID0gZnVuY3Rpb24gRXVpSWNvblN0YXRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggMTR2LTRoMXY0aDVWNWgxdjlhMSAxIDAgMDEtMSAxSDJhMSAxIDAgMDEtMS0xdi0yaDF2Mmg2em00Ljg1My0xMC4xNDZsLTIuOTk5IDNhMS41IDEuNSAwIDAxLTIuNTM4IDEuNTY4bC0yLjcxNC45MDRMNCA5LjUyN2ExLjUgMS41IDAgMTEtLjMxNi0uOTQ4TDcgNy40NzNhMS41IDEuNSAwIDAxMi4xNDYtMS4zMjdsMy0zYTEuNSAxLjUgMCAxMS43MDcuNzA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdGF0czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3RvcCA9IGZ1bmN0aW9uIEV1aUljb25TdG9wKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyaDhhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnptMCAxYTEgMSAwIDAwLTEgMXY4YTEgMSAwIDAwMSAxaDhhMSAxIDAgMDAxLTFWNGExIDEgMCAwMC0xLTFINHpcIixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3A7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0b3BGaWxsZWQgPSBmdW5jdGlvbiBFdWlJY29uU3RvcEZpbGxlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInJlY3RcIiwge1xuICAgIHdpZHRoOiAxMixcbiAgICBoZWlnaHQ6IDEyLFxuICAgIHg6IDIsXG4gICAgeTogMixcbiAgICByeDogMixcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblN0b3BGaWxsZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN0b3BTbGFzaCA9IGZ1bmN0aW9uIEV1aUljb25TdG9wU2xhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMi4yNTkgMy4wMzRBMS4wMDEgMS4wMDEgMCAwMDEyIDNINGExIDEgMCAwMC0xIDF2OGMwIC4wOS4wMTIuMTc2LjAzNC4yNTlsOS4yMjUtOS4yMjV6bS43MDcuNzA3bC05LjIyNSA5LjIyNWMuMDgzLjAyMi4xNy4wMzQuMjU5LjAzNGg4YTEgMSAwIDAwMS0xVjRjMC0uMDktLjAxMi0uMTc2LS4wMzQtLjI1OXpNNCAyaDhhMiAyIDAgMDEyIDJ2OGEyIDIgMCAwMS0yIDJINGEyIDIgMCAwMS0yLTJWNGEyIDIgMCAwMTItMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RvcFNsYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdG9yYWdlID0gZnVuY3Rpb24gRXVpSWNvblN0b3JhZ2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgwIDIpXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcIm5vbnplcm9cIixcbiAgICBkOiBcIk0yIDZhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoMTJhMSAxIDAgMDExIDF2M2ExIDEgMCAwMS0xIDFIMnptMTMgMnYzYTEgMSAwIDAxLTEgMUgyYTEgMSAwIDAxLTEtMVY4YTEgMSAwIDAxMS0xaDEyYTEgMSAwIDAxMSAxem0xLTNWMmEyIDIgMCAwMC0yLTJIMmEyIDIgMCAwMC0yIDJ2M2MwIC42MDEuMjcxIDEuMTMzLjY5IDEuNUMuMjcxIDYuODY3IDAgNy4zOTkgMCA4djNhMiAyIDAgMDAyIDJoMTJhMiAyIDAgMDAyLTJWOGMwLS42MDEtLjI3MS0xLjEzMy0uNjg5LTEuNS40MTgtLjM2Ny42ODktLjg5OS42ODktMS41elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogNC41LFxuICAgIGN5OiA5LjUsXG4gICAgcjogMS41XG4gIH0pLCBfX19FbW90aW9uSlNYKFwiY2lyY2xlXCIsIHtcbiAgICBjeDogNC41LFxuICAgIGN5OiAzLjUsXG4gICAgcjogMS41XG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgOGgxdjNoLTF6TTEwIDhoMXYzaC0xek0xMiAyaDF2M2gtMXpNMTAgMmgxdjNoLTF6XCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdG9yYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdHJpbmcgPSBmdW5jdGlvbiBFdWlJY29uU3RyaW5nKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuMjk3IDNMOC45MyA1LjEwMmgxLjM1MWwtLjMyIDEuODI4SDguNjA5bC0uNjU2IDMuODgzYy0uMDM2LjI2NS0uMDIuNDY2LjA1LjYwMS4wNzEuMTM1LjI0Ny4yMDguNTI4LjIxOS4xMS4wMDUuMzM0LS4wMDguNjcyLS4wNEw5LjAxNiAxMy41YTQuMTYgNC4xNiAwIDAxLTEuMzgzLjE5NWMtLjc5Ny0uMDEtMS4zOTMtLjI0NC0xLjc5LS43MDMtLjM5NS0uNDU4LS41NTctMS4wOC0uNDg0LTEuODY3bC42ODgtNC4xOTVINWwuMzEzLTEuODI4aDEuMDQ2TDYuNzI3IDNoMi41N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uU3RyaW5nOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25TdWJtb2R1bGUgPSBmdW5jdGlvbiBFdWlJY29uU3VibW9kdWxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk02IDJIMXYxMmgzVjdhMSAxIDAgMDExLTFoNWExIDEgMCAwMTEgMXYxaDRWNEg3Yy0uNjIxIDAtMS0uMzc5LTEtMVYyem0xMCA2djZhMSAxIDAgMDEtMSAxSDFhMSAxIDAgMDEtMS0xVjJhMSAxIDAgMDExLTFoNS4yNWEuNzUuNzUgMCAwMS43NS43NWwtLjAwNC4yMDZDNi45OSAyLjMxNyA2Ljk3NCAzIDcgM2g4YTEgMSAwIDAxMSAxdjR6bS0xIDFoLTRhMSAxIDAgMDEtMS0xVjdINXY3aDEwVjl6TTIgNC41YS41LjUgMCAwMS41LS41aDJhLjUuNSAwIDAxMCAxaC0yYS41LjUgMCAwMS0uNS0uNXpNNi41IDlhLjUuNSAwIDAwMCAxaDJhLjUuNSAwIDAwMC0xaC0yelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdWJtb2R1bGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN1biA9IGZ1bmN0aW9uIEV1aUljb25TdW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA4YTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHpNNy4yNS43NWEuNzUuNzUgMCAwMTEuNSAwdjEuNWEuNzUuNzUgMCAxMS0xLjUgMFYuNzV6bTAgMTNhLjc1Ljc1IDAgMDExLjUgMHYxLjVhLjc1Ljc1IDAgMDEtMS41IDB2LTEuNXptNS4zNDYtMTEuNDA3YS43NS43NSAwIDAxMS4wNiAxLjA2bC0xLjA2IDEuMDYxYS43NS43NSAwIDAxLTEuMDYtMS4wNmwxLjA2LTEuMDZ6bS05LjE5MiA5LjE5M2EuNzUuNzUgMCAxMTEuMDYgMS4wNmwtMS4wNiAxLjA2YS43NS43NSAwIDAxLTEuMDYtMS4wNmwxLjA2LTEuMDZ6TS43NSA4Ljc1YS43NS43NSAwIDAxMC0xLjVoMS41YS43NS43NSAwIDExMCAxLjVILjc1em0xMyAwYS43NS43NSAwIDAxMC0xLjVoMS41YS43NS43NSAwIDAxMCAxLjVoLTEuNXpNMi4zNDMgMy40MDRhLjc1Ljc1IDAgMTExLjA2LTEuMDZsMS4wNjEgMS4wNmEuNzUuNzUgMCAwMS0xLjA2IDEuMDZsLTEuMDYtMS4wNnptOS4xOTMgOS4xOTJhLjc1Ljc1IDAgMDExLjA2LTEuMDZsMS4wNiAxLjA2YS43NS43NSAwIDAxLTEuMDYgMS4wNmwtMS4wNi0xLjA2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TdW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblN3YXRjaElucHV0ID0gZnVuY3Rpb24gRXVpSWNvblN3YXRjaElucHV0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgeDogMixcbiAgICB5OiAyLFxuICAgIHdpZHRoOiAxMixcbiAgICBoZWlnaHQ6IDEyLFxuICAgIHJ4OiAzXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicmVjdFwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVN3YXRjaElucHV0X19zdHJva2VcIixcbiAgICB4OiAyLjUsXG4gICAgeTogMi41LFxuICAgIHdpZHRoOiAxMSxcbiAgICBoZWlnaHQ6IDExLFxuICAgIHJ4OiAyXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Td2F0Y2hJbnB1dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uU3ltbGluayA9IGZ1bmN0aW9uIEV1aUljb25TeW1saW5rKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMC44IDBIMmExIDEgMCAwMC0xIDF2OGwxLTFWMWg4djMuNWEuNS41IDAgMDAuNS41SDE0djEwSDJ2LTFhMy41IDMuNSAwIDAxMy41LTMuNUg4VjEzbDMtMy0zLTN2Mi41SDUuNUE0LjUgNC41IDAgMDAxIDE0djFhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNC40MjljMC0uMjU2LS4wOTgtLjUwMy0uMjc0LS42ODlsLTMuMi0zLjQyOEExLjAwMiAxLjAwMiAwIDAwMTAuOCAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25TeW1saW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWJsZU9mQ29udGVudHMgPSBmdW5jdGlvbiBFdWlJY29uVGFibGVPZkNvbnRlbnRzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSAxdjE0aDE0VjFIMXpNMCAwaDE2djE2SDBWMHptOSAxdjE0aDFWMUg5ek0zIDMuNWg0di0xSDN2MXptMCAzaDR2LTFIM3Yxem0wIDNoNHYtMUgzdjF6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRhYmxlT2ZDb250ZW50czsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVGFibGVEZW5zaXR5Q29tcGFjdCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWMmEyIDIgMCAwMTItMmgxMmEyIDIgMCAwMTIgMnYxem0tMSAwVjJhMSAxIDAgMDAtMS0xSDJhMSAxIDAgMDAtMSAxdjFoMTR6bTAgMUgxdjEwYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjR6TTQuNDk2IDdhLjUuNSAwIDAxMCAxSDIuNDk1YS41LjUgMCAwMTAtMWgyLjAwMXptNS4yMTggMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggOCA2IDcuNzc2IDYgNy41cy4xMjgtLjUuMjg2LS41aDMuNDI4ek00LjQ5NiA1YS41LjUgMCAwMTAgMUgyLjQ5NWEuNS41IDAgMDEwLTFoMi4wMDF6bTUuMjE4IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDYgNiA1Ljc3NiA2IDUuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpNNC40OTYgOWEuNS41IDAgMDEwIDFIMi40OTVhLjUuNSAwIDAxMC0xaDIuMDAxem01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxMCA2IDkuNzc2IDYgOS41cy4xMjgtLjUuMjg2LS41aDMuNDI4em0tNS4yMTggMmEuNS41IDAgMDEwIDFIMi40OTVhLjUuNSAwIDAxMC0xaDIuMDAxem01LjIxOCAwYy4xNTggMCAuMjg2LjIyNC4yODYuNXMtLjEyOC41LS4yODYuNUg2LjI4NkM2LjEyOCAxMiA2IDExLjc3NiA2IDExLjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6bS01LjIxOCAyYS41LjUgMCAwMTAgMUgyLjQ5NWEuNS41IDAgMDEwLTFoMi4wMDF6bTktNmEuNS41IDAgMDEwIDFoLTIuMDAxYS41LjUgMCAwMTAtMWgyLjAwMXptMC0yYS41LjUgMCAwMTAgMWgtMi4wMDFhLjUuNSAwIDAxMC0xaDIuMDAxem0wIDRhLjUuNSAwIDAxMCAxaC0yLjAwMWEuNS41IDAgMDEwLTFoMi4wMDF6bTAgMmEuNS41IDAgMDEwIDFoLTIuMDAxYS41LjUgMCAwMTAtMWgyLjAwMXptMCAyYS41LjUgMCAwMTAgMWgtMi4wMDFhLjUuNSAwIDAxMC0xaDIuMDAxem0tMy43ODIgMGMuMTU4IDAgLjI4Ni4yMjQuMjg2LjVzLS4xMjguNS0uMjg2LjVINi4yODZDNi4xMjggMTQgNiAxMy43NzYgNiAxMy41cy4xMjgtLjUuMjg2LS41aDMuNDI4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlFeHBhbmRlZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDN2MTFhMiAyIDAgMDEtMiAySDJhMiAyIDAgMDEtMi0yVjJhMiAyIDAgMDEyLTJoMTJhMiAyIDAgMDEyIDJ2MXptLTEgMFYyYTEgMSAwIDAwLTEtMUgyYTEgMSAwIDAwLTEgMXYxaDE0em0wIDFIMXYxMGExIDEgMCAwMDEgMWgxMmExIDEgMCAwMDEtMVY0ek00LjUgN2EuNS41IDAgMDEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptOSAwYS41LjUgMCAxMTAgMWgtNmEuNS41IDAgMDEwLTFoNnptLTkgNGEuNS41IDAgMTEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptOSAwYS41LjUgMCAxMTAgMWgtNmEuNS41IDAgMTEwLTFoNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVEZW5zaXR5RXhwYW5kZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbCA9IGZ1bmN0aW9uIEV1aUljb25UYWJsZURlbnNpdHlOb3JtYWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAzdjExYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yaDEyYTIgMiAwIDAxMiAydjF6bS0xIDBWMmExIDEgMCAwMC0xLTFIMmExIDEgMCAwMC0xIDF2MWgxNHptMCAxSDF2MTBhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWNHpNNC41IDZhLjUuNSAwIDAxMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTUuMjE0IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDcgNiA2Ljc3NiA2IDYuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpNNC41IDlhLjUuNSAwIDAxMCAxSDIuNDk2YS41LjUgMCAxMTAtMUg0LjV6bTUuMjE0IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEwIDYgOS43NzYgNiA5LjVzLjEyOC0uNS4yODYtLjVoMy40Mjh6TTQuNSAxMmEuNS41IDAgMTEwIDFIMi40OTZhLjUuNSAwIDExMC0xSDQuNXptOS02YS41LjUgMCAxMTAgMWgtMi4wMDRhLjUuNSAwIDAxMC0xSDEzLjV6bTAgM2EuNS41IDAgMTEwIDFoLTIuMDA0YS41LjUgMCAwMTAtMUgxMy41em0wIDNhLjUuNSAwIDExMCAxaC0yLjAwNGEuNS41IDAgMDEwLTFIMTMuNXptLTMuNzg2IDBjLjE1OCAwIC4yODYuMjI0LjI4Ni41cy0uMTI4LjUtLjI4Ni41SDYuMjg2QzYuMTI4IDEzIDYgMTIuNzc2IDYgMTIuNXMuMTI4LS41LjI4Ni0uNWgzLjQyOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFibGVEZW5zaXR5Tm9ybWFsOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UYWcgPSBmdW5jdGlvbiBFdWlJY29uVGFnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4yNTQgMTQuOTdMLjk5NiA5LjcxMmMtLjMxNS0uMzE2LS4zOTctLjQ2My0uNDUtLjY0YS45MDkuOTA5IDAgMDEwLS41MzRjLjA1My0uMTc3LjEzNS0uMzI0LjQ1LS42NEw3LjQzIDEuNDY2Yy4xODItLjE4My4yNTItLjI0LjMzOC0uMjkzYS44Ny44NyAwIDAxLjI3My0uMTEzYy4wOTktLjAyMy4xODgtLjAzMi40NDYtLjAzMmg1LjE3M2MuNDQ1IDAgLjYwNy4wNDYuNzcuMTMzLjE2Mi4wODcuMjkuMjE0LjM3Ny4zNzcuMDg4LjE2Mi4xMzQuMzI0LjEzNi43NjlsLjAxNSA1LjE1YzAgLjI1OS0uMDA5LjM0OC0uMDMyLjQ0OGEuODcuODcgMCAwMS0uMTEyLjI3M2MtLjA1NC4wODctLjExMS4xNTctLjI5NC4zNEw4LjA2NyAxNC45N2MtLjMxNS4zMTUtLjQ2Mi4zOTYtLjYzOS40NWEuOTA5LjkwOSAwIDAxLS41MzUgMGMtLjE3Ni0uMDU0LS4zMjQtLjEzNS0uNjM5LS40NXptMS4xMDYtLjcwN2w2LjQ1My02LjQ1M2MuMDkyLS4wOTIuMTI2LS4xMjguMTQxLS4xNDcuMDAzLS4wMjUuMDA0LS4wNzQuMDA0LS4yMDRsLS4wMTUtNS4xNWMwLS4xODEtLjAwMy0uMjQ1LS4wMDktLjI3NWEyLjI0NyAyLjI0NyAwIDAwLS4yNzQtLjAwN0g4LjQ4N2MtLjEzIDAtLjE3OS4wMDEtLjIwMy4wMDQtLjAyLjAxNS0uMDU1LjA1LS4xNDcuMTQxTDEuNzAzIDguNjA2YTIuMjQ4IDIuMjQ4IDAgMDAtLjE4OS4yYy4wMTcuMDI0LjA2MS4wNy4xOS4xOThsNS4yNTcgNS4yNTljLjEyOC4xMjguMTc1LjE3MS4yLjE4OC4wMjQtLjAxNy4wNzEtLjA2LjItLjE4OHptNC45NzItMTAuNjA3YTIgMiAwIDExLTIuODI4IDIuODI4IDIgMiAwIDAxMi44MjgtMi44Mjh6bS0uNzA3LjcwN2ExIDEgMCAxMC0xLjQxNCAxLjQxNCAxIDEgMCAwMDEuNDE0LTEuNDE0ek02LjgwNyAxMS4yOEw0LjY4NiA5LjE1OWEuNS41IDAgMTEuNzA3LS43MDdsMi4xMjEgMi4xMmEuNS41IDAgMTEtLjcwNy43MDh6bTEuNDE0LTEuNDE0bC0yLjEyLTIuMTIyYS41LjUgMCAxMS43MDYtLjcwN0w4LjkyOCA5LjE2YS41LjUgMCAxMS0uNzA3LjcwN3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGFnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UZWFyID0gZnVuY3Rpb24gRXVpSWNvblRlYXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1MyAxLjc3NmEuNS41IDAgMDEuODk0IDBsNCA4YS41LjUgMCAwMS4wNTMuMjM1Yy0uMDA0LjE1LS4wMjYuMzk2LS4wODQuNzA1YTUuNTM4IDUuNTM4IDAgMDEtLjUwNSAxLjUxMkMxMS4xODkgMTMuNjM4IDkuOTA2IDE0LjUgOCAxNC41Yy0xLjkwNiAwLTMuMTktLjg2Mi0zLjkxLTIuMjcyYTUuNTM4IDUuNTM4IDAgMDEtLjUwNi0xLjUxMiA0LjY3MiA0LjY3MiAwIDAxLS4wODQtLjcwNS41LjUgMCAwMS4wNTMtLjIzNWw0LTh6bS0zLjA0NiA4LjMyOWMuMDA5LjEwNi4wMjcuMjUzLjA2LjQyOS4wNzkuNDI0LjIxMy44NDguNDEzIDEuMjM4QzUuNTM3IDEyLjg2MiA2LjQ4NyAxMy41IDggMTMuNWMxLjUxMyAwIDIuNDYzLS42MzggMy4wMi0xLjcyOC4yLS4zOS4zMzQtLjgxNC40MTMtMS4yMzguMDMzLS4xNzYuMDUxLS4zMjMuMDYtLjQzTDggMy4xMTlsLTMuNDkzIDYuOTg3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UZWFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UZW1wZXJhdHVyZSA9IGZ1bmN0aW9uIEV1aUljb25UZW1wZXJhdHVyZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSAxNWEzLjUgMy41IDAgMDEtMS43NS02LjUzMkw3IDguMzI0VjIuNUExLjQ5NiAxLjQ5NiAwIDAxOS45MDggMkg4LjV2MUgxMHYxSDguNXYxSDEwdjFIOC41djFIMTB2MS4zMjRsLjI1LjE0NEEzLjUgMy41IDAgMDE4LjUgMTVNMTEgNy43NThWMi41YTIuNSAyLjUgMCAxMC01IDB2NS4yNThhNC41IDQuNSAwIDEwNSAwXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgOWEyLjUgMi41IDAgMTEwIDUgMi41IDIuNSAwIDAxMC01XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRlbXBlcmF0dXJlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25UaW1lUmVmcmVzaCA9IGZ1bmN0aW9uIEV1aUljb25UaW1lUmVmcmVzaChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIuODA5IDguODA3YTQuNSA0LjUgMCAwMS01LjU3Mi01Ljc1QTUgNSAwIDAwMy4wNCA5LjMxYS41LjUgMCAwMS0uOTY2LjI1OSA2IDYgMCAwMTUuNjcyLTcuNTUzIDQuNSA0LjUgMCAxMTYuMTE3IDYuMzEzIDYuMDAyIDYuMDAyIDAgMDEtNy44MDMgNS40MDkuNS41IDAgMTEuMzAzLS45NTQgNS4wMDEgNS4wMDEgMCAwMDYuNDQ1LTMuOTc5ek0xMS44NTkgNUgxMy41YS41LjUgMCAwMDAtMUgxMlYxLjVhLjUuNSAwIDAwLTEgMHYzYS41LjUgMCAwMC41LjVoLjM2elwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy43NTcgMTUuODQ4bC0uNzc2LTIuODk3YTEuNSAxLjUgMCAwMTEuMDYtMS44MzhsMi44OTgtLjc3NmEuNS41IDAgMTEuMjU5Ljk2NmwtMi44OTguNzc2YS41LjUgMCAwMC0uMzUzLjYxM2wuNzc2IDIuODk4YS41LjUgMCAwMS0uOTY2LjI1OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGltZVJlZnJlc2g7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRpbWVsaW5lID0gZnVuY3Rpb24gRXVpSWNvblRpbWVsaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTcgNC41YS41LjUgMCAwMDEgMFY0aDFhMSAxIDAgMDAxLTFWMWExIDEgMCAwMC0xLTFINmExIDEgMCAwMC0xIDF2MmExIDEgMCAwMDEgMWgxdi41ek05IDFINnYyaDNWMXpNMiA3LjVhLjUuNSAwIDExMSAwIC41LjUgMCAwMS0xIDB6TTIuNSA5YTEuNSAxLjUgMCAwMS0xLjQxNS0xSC41YS41LjUgMCAwMTAtMWguNTg1YTEuNSAxLjUgMCAwMTIuODMgMGgyLjE3YTEuNSAxLjUgMCAwMTIuODMgMGgyLjE3YTEuNSAxLjUgMCAwMTIuODMgMGguNTg1YS41LjUgMCAwMTAgMWgtLjU4NWExLjUgMS41IDAgMDEtMi44MyAwaC0yLjE3YTEuNSAxLjUgMCAwMS0yLjgzIDBoLTIuMTdBMS41IDEuNSAwIDAxMi41IDl6TTEzIDcuNWEuNS41IDAgMTAtMSAwIC41LjUgMCAwMDEgMHptLTUgMGEuNS41IDAgMTAtMSAwIC41LjUgMCAwMDEgMHpNMi41IDEwYS41LjUgMCAwMC0uNS41di41SDFhMSAxIDAgMDAtMSAxdjJhMSAxIDAgMDAxIDFoM2ExIDEgMCAwMDEtMXYtMmExIDEgMCAwMC0xLTFIM3YtLjVhLjUuNSAwIDAwLS41LS41ek00IDE0di0ySDF2Mmgzem04LTMuNWEuNS41IDAgMDExIDB2LjVoMWExIDEgMCAwMTEgMXYyYTEgMSAwIDAxLTEgMWgtM2ExIDEgMCAwMS0xLTF2LTJhMSAxIDAgMDExLTFoMXYtLjV6bTIgMi41djFoLTN2LTJoM3YxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UaW1lbGluZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVGltZXNsaWRlciA9IGZ1bmN0aW9uIEV1aUljb25UaW1lc2xpZGVyKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuOTIzIDhBNS45MyA1LjkzIDAgMDA4IDIuMDc3IDUuOTMgNS45MyAwIDAwMi4wNzcgOGE1LjkzIDUuOTMgMCAwMDYuMjk2IDUuOTEyYy4zMjgtLjAyMS42MjUuMjI3LjYyNS41NTZhLjUwNC41MDQgMCAwMS0uNDU4LjUxMSA3IDcgMCAxMTYuNDMtNi4zMzNjLS4wMzYuMzk4LS40ODcuNTgtLjgxNy4zNTRhLjU5NS41OTUgMCAwMS0uMjQ4LS41NGMuMDEyLS4xNTIuMDE4LS4zMDUuMDE4LS40NnptMS42ODQgMy4ybC00LjMyLTMuMDU1Yy0uNTYtLjM5Ni0xLjI4Ny4wNTktMS4yODcuOHY2LjEwOGMwIC43NC43MjYgMS4xOTYgMS4yODcuOGw0LjMyLTMuMDU1Yy41MjQtLjM3LjUyNC0xLjIyOCAwLTEuNTk4ek03LjQ2MiA3LjQ2Mkg0Ljc2OWEuNTM5LjUzOSAwIDAwMCAxLjA3Nkg4QS41MzkuNTM5IDAgMDA4LjUzOCA4VjMuNjkyYS41MzkuNTM5IDAgMDAtMS4wNzYgMHYzLjc3elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVGltZXNsaWRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5BbGlhcyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFsaWFzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuMDc1IDYuOTUzYS41LjUgMCAxMS0uNzA3LjcwNyAxLjUgMS41IDAgMDAtMi4xMjIgMEw0LjEyNSA5Ljc4MmExLjUgMS41IDAgMTAyLjEyMSAyLjEyMWwxLjE0NS0xLjE0NGEuNS41IDAgMDEuNzA3LjcwN0w2Ljk1MyAxMi42MWEyLjUgMi41IDAgMTEtMy41MzUtMy41MzVsMi4xMjEtMi4xMjJhMi41IDIuNSAwIDAxMy41MzYgMHptMy41MzUtMy41MzVhMi41IDIuNSAwIDAxMCAzLjUzNUwxMC40OSA5LjA3NWEyLjUgMi41IDAgMDEtMy41MzYgMCAuNS41IDAgMTEuNzA3LS43MDggMS41IDEuNSAwIDAwMi4xMjIgMGwyLjEyMS0yLjEyYTEuNSAxLjUgMCAxMC0yLjEyMS0yLjEyMkw4LjYzNyA1LjI2OWEuNS41IDAgMTEtLjcwNy0uNzA3bDEuMTQ1LTEuMTQ0YTIuNSAyLjUgMCAwMTMuNTM1IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQWxpYXM7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQW5ub3RhdGlvbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkFubm90YXRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOC4xNSAzLjM5MmMyLjc5NyAwIDQuNTI0IDEuNjQ0IDQuNTE3IDQuMjg5LjAwNyAxLjgxNi0uNzA4IDIuODkzLTIuMjEgMy4wMDQtLjkwOC4wNzYtMS4wODEtLjI4Ny0xLjE1Ny0uNzI1aC0uMDQxYy0uMTYzLjQyLS45NjQuNzMyLTEuNzQ0LjY4My0xLjA1My0uMDY1LTIuMDgyLS44NDItMi4wOS0yLjU3Mi4wMDgtMS43MiAxLjA3MS0yLjQ0MSAxLjk1OS0yLjU4Ni44MDQtLjEzNSAxLjU5OC4xNTggMS43MjMuNDYyaC4wNTF2LS4zODZoMS4xOTV2My40NTJjLjAwNy4zLjEyOC40MjUuMzA0LjQyNS40IDAgLjY3Ny0uNTgzLjY3My0xLjg2MS4wMDQtMi4zNzYtMS43MDUtMi45MTQtMy4xODctMi45MTQtMi4zNCAwLTMuNDE1IDEuNTIyLTMuNDIyIDMuMzg3LjAwNyAyLjEyNyAxLjIyIDMuMjc3IDMuNDMzIDMuMjc3LjgwOCAwIDEuNTk4LS4xNzYgMi4wMDYtLjM0OWwuMzkzIDEuMTIyYy0uNDM1LjI3LTEuNDE5LjUwOC0yLjQ5My41MDgtMi45OCAwLTQuNzIzLTEuNjYtNC43MjctNC40OTYuMDA0LTIuODA0IDEuNzQ4LTQuNzIgNC44MTctNC43MnpNNy45NjQgNi43OWMtLjc2IDAtMS4xODUuNDU5LTEuMTg4IDEuMjQuMDAzLjY4My4zIDEuMzMyIDEuMjAyIDEuMzMyLjgyMSAwIDEuMDk0LS40NzMgMS4wNzctMS4zNDMtLjAwNC0uNzE4LS4yMDQtMS4yMy0xLjA5MS0xLjIzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkFubm90YXRpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQXJyYXkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5BcnJheShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00LjM5MiAxMlY0aDIuNzEzdjEuMTRoLTEuMjF2NS43MmgxLjIxVjEySDQuMzkyem03LjY5Mi04djhIOS4zN3YtMS4xNGgxLjIwOVY1LjE0SDkuMzdWNGgyLjcxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5BcnJheTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5CaW5hcnkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5CaW5hcnkoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTIgNEg0djhoOFY0ek04LjUgNS41aC0zdjVoM3YtNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5CaW5hcnk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQm9vbGVhbiA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkJvb2xlYW4oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCAxM0E1IDUgMCAxMTggM2E1IDUgMCAwMTAgMTB6bS0yLjgyOC0yLjE3MmE0IDQgMCAwMTUuNjU2LTUuNjU2Yy4wMDQuMDEzLTUuNjQ1IDUuNjc0LTUuNjU2IDUuNjU2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkJvb2xlYW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQ2xhc3MgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5DbGFzcyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4zMzMgNy4wMjdIOS4zNzVjLS4wNTYtLjcwOC0uNDgtMS4xODctMS4yMjItMS4xODctLjk3MiAwLTEuNS44MDYtMS41IDIuMTYgMCAxLjQzLjU0NSAyLjE2IDEuNDg2IDIuMTYuNzA4IDAgMS4xMzktLjQxNSAxLjIzNi0xLjA4bDEuOTU4LjAxNUMxMS4yMzYgMTAuNDE4IDEwLjE4MSAxMiA4LjA5NyAxMmMtMS45NTggMC0zLjQzLTEuNDEtMy40My00IDAtMi42IDEuNTE0LTQgMy40My00IDEuNzkyIDAgMy4wODQgMS4wOTUgMy4yMzYgMy4wMjd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQ2xhc3M7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMyA0YTEgMSAwIDAxMS0xaDhhMSAxIDAgMDExIDF2NS45OTZhMSAxIDAgMDEtMSAxaC0xLjY2MUw3LjQgMTMuMkEuMjUuMjUgMCAwMTcgMTN2LTIuMDA0SDRhMSAxIDAgMDEtMS0xVjR6bTEuNSAxYS41LjUgMCAwMS41LS41aDZhLjUuNSAwIDAxLjUuNXY0YS41LjUgMCAwMS0uNS41aC0uOUw4IDExVjkuNUg1YS41LjUgMCAwMS0uNS0uNVY1elwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNzUgNmExIDEgMCAxMDAgMiAxIDEgMCAwMDAtMnptMi41IDBhMSAxIDAgMTAwIDIgMSAxIDAgMDAwLTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuQ29tcGxldGlvblN1Z2dlc3RlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Db25zdGFudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkNvbnN0YW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuNDE0IDMuNzU3bDIuODI5IDIuODI5YTIgMiAwIDAxMCAyLjgyOGwtMi44MjkgMi44MjlhMiAyIDAgMDEtMi44MjggMEwzLjc1NyA5LjQxNGEyIDIgMCAwMTAtMi44MjhsMi44MjktMi44MjlhMiAyIDAgMDEyLjgyOCAwem0tMS43NDcgMi45MWExIDEgMCAwMC0xIDF2LjY2NmExIDEgMCAwMDEgMWguNjY2YTEgMSAwIDAwMS0xdi0uNjY2YTEgMSAwIDAwLTEtMWgtLjY2NnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5Db25zdGFudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5EYXRlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRGF0ZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMyAxMS41NjdDMTMgMTIuMzYgMTIuMzYgMTMgMTEuNTY3IDEzSDQuNDMzQzMuNjQgMTMgMyAxMi4zNiAzIDExLjU2N1Y0LjQzM0MzIDMuNjQgMy42NCAzIDQuNDMzIDNINnYtLjQ5NWEuNTEuNTEgMCAwMS40MTItLjQ5N0w2LjUgMmMuMjc2IDAgLjUuMjE0LjUuNTA1VjNoMnYtLjQ5NWEuNTEuNTEgMCAwMS40MTItLjQ5N0w5LjUgMmMuMjc2IDAgLjUuMjE0LjUuNTA1VjNoMS41NjdDMTIuMzYgMyAxMyAzLjY0IDEzIDQuNDMzdjcuMTM0ek00IDZ2NS4zM2MwIC4zNy4zLjY3LjY3LjY3aDYuNjZjLjM3IDAgLjY3LS4zLjY3LS42N1Y2SDR6bTEuNSA0Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiAxMC41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDUuNSAxMWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDUuNSAxMHpNOCAxMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEybC4wMDguMDg4YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDggMTFhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw4IDEwem0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDExIDEwLjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSAxMWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDEwLjUgMTB6bS01LTEuNWMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDYgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw1LjUgOS41QS41MDUuNTA1IDAgMDE1IDljMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMNS41IDguNXptMi41IDBjLjI0NSAwIC40NS4xODMuNDkyLjQxMkw4LjUgOWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw4IDkuNWEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDggOC41em0yLjUgMGMuMjQ1IDAgLjQ1LjE4My40OTIuNDEyTDExIDljMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMMTAuNSA5LjVBLjUwNS41MDUgMCAwMTEwIDljMC0uMjQ1LjE4My0uNDUuNDEyLS40OTJMMTAuNSA4LjV6TTUuNSA3Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMNiA3LjVjMCAuMjQ1LS4xODMuNDUtLjQxMi40OTJMNS41IDhhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw1LjUgN3pNOCA3Yy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMOC41IDcuNWMwIC4yNDUtLjE4My40NS0uNDEyLjQ5Mkw4IDhhLjUwNS41MDUgMCAwMS0uNS0uNWMwLS4yNDUuMTgzLS40NS40MTItLjQ5Mkw4IDd6bTIuNSAwYy4yNDUgMCAuNDUuMTgzLjQ5Mi40MTJMMTEgNy41YzAgLjI0NS0uMTgzLjQ1LS40MTIuNDkyTDEwLjUgOGEuNTA1LjUwNSAwIDAxLS41LS41YzAtLjI0NS4xODMtLjQ1LjQxMi0uNDkyTDEwLjUgN3pNNCA1aDh2LS4zM2MwLS4zNy0uMy0uNjctLjY3LS42N0g0LjY3QzQuMyA0IDQgNC4zIDQgNC42N1Y1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkRhdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRGVuc2VWZWN0b3IgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5EZW5zZVZlY3RvcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuMTU0IDEyVjRoMi43MTN2MS4xNEg1LjY1OHY1LjcyaDEuMjFWMTJINC4xNTN6bTcuNjkyLTh2OEg5LjEzM3YtMS4xNGgxLjIwOVY1LjE0aC0xLjIxVjRoMi43MTR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRGVuc2VWZWN0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRWxlbWVudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVsZW1lbnQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy4zOSA5LjczNmwtMS4wNDEuOTRMMy4yNTggOGwzLjA5LTIuNjc3IDEuMDQxLjk0LTIuMDMyIDEuNzIydi4wM2wyLjAzMiAxLjcyMXptMi43NzcuOTRsLTEuMDQtLjk0IDIuMDMyLTEuNzIxdi0uMDNMOS4xMjYgNi4yNjRsMS4wNC0uOTRMMTMuMjU5IDhsLTMuMDkxIDIuNjc3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkVsZW1lbnQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRW51bSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVudW0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNS4yMTEgMTJWNGg1LjU3OHYxLjU3SDcuMTQ1djEuNjQxaDMuMzU5djEuNTc0SDcuMTQ1djEuNjQ1aDMuNjQ0VjEyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkVudW07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRW51bU1lbWJlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkVudW1NZW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNy42ODIgMTJWOS4yNDdsMS4wMjMtLjg2MWEuNS41IDAgMDAtLjAwMy0uNzY4bC0xLjAyLS44NDRWNGg1LjU3OHYxLjU3SDkuNjE1djEuNjRoMy4zNnYxLjU3NWgtMy4zNnYxLjY0NWgzLjY0NVYxMkg3LjY4MnptLjc0My00LjEwM2EuMTM4LjEzOCAwIDAxMCAuMjA2TDYuMTU4IDkuOTdhLjEzMy4xMzMgMCAwMS0uMjE4LS4xMDN2LS45MzRIMi44NzNBLjEzMy4xMzMgMCAwMTIuNzQgOC44VjcuMmMwLS4wNzQuMDYtLjEzMy4xMzMtLjEzM0g1Ljk0di0uOTM0YS4xMzMuMTMzIDAgMDEuMjE4LS4xMDNsMi4yNjcgMS44Njd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRW51bU1lbWJlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FdmVudCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkV2ZW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTExLjIyNSA1LjY1NmMwIC40MjMtLjEwNi43OS0uMzE4IDEuMTAyLS4yMTEuMzExLS41MS41Ny0uODk4Ljc3NWE1LjQzNSA1LjQzNSAwIDAxLTEuMzkyLjQ4NWMtLjU0LjExNy0xLjE0LjE5My0xLjc5OC4yMjlhNi4wNDcgNi4wNDcgMCAwMC0uMDM1LjY3YzAgLjI1OC4wMi41MS4wNjIuNzU3LjA0LjI0Ny4xMTQuNDY0LjIyLjY1MnMuMjUuMzQuNDMyLjQ1OC40MTQuMTc2LjY5Ni4xNzZjLjIxMSAwIC40NjctLjA0NC43NjYtLjEzMi4zLS4wODguNjItLjI0NC45Ni0uNDY3LjEwNi0uMDcuMTkyLS4xMjkuMjU2LS4xNzZhLjM2NS4zNjUgMCAwMS4yMi0uMDdjLjExOCAwIC4xOTcuMDYxLjIzOC4xODVhLjk5Ljk5IDAgMDEuMDYyLjI1NSA3LjEgNy4xIDAgMDEtLjU3My40NjcgNC45MyA0LjkzIDAgMDEtLjc3NS40NjdjLS4yODguMTQxLS42LjI2MS0uOTM0LjM2MS0uMzM1LjEtLjY3OC4xNS0xLjAzLjE1LS41NDEgMC0uOTgyLS4wODgtMS4zMjItLjI2NGEyLjA3MiAyLjA3MiAwIDAxLS43OTMtLjY4OCAyLjYyNiAyLjYyNiAwIDAxLS4zODgtLjkzMyA0Ljk0OSA0Ljk0OSAwIDAxLS4xMDYtMS4wMDVjMC0uNjM0LjEwMy0xLjI1Ny4zMDktMS44NjguMjA1LS42MS40OTktMS4xNTcuODgtMS42MzguMzgzLS40ODIuODM4LS44NyAxLjM2Ni0xLjE2M0EzLjU2NyAzLjU2NyAwIDAxOS4wOTMgNGMuNTk5IDAgMS4xMDQuMTI2IDEuNTE1LjM3OS40MTEuMjUyLjYxNy42NzguNjE3IDEuMjc3em0tMi40NjctLjk1MWMtLjIyMyAwLS40MzUuMDgtLjYzNS4yMzgtLjIuMTU4LS4zODEuMzczLS41NDYuNjQzLS4xNjQuMjctLjMwNS41NzgtLjQyMy45MjVhNi40MiA2LjQyIDAgMDAtLjI2NCAxLjEwMWMuNDctLjA0Ny44NjMtLjEzNSAxLjE4LS4yNjQuMzE4LS4xMy41Ny0uMjg1Ljc1OC0uNDY3LjE4OC0uMTgyLjMyMy0uMzg4LjQwNS0uNjE3LjA4My0uMjI5LjEyNC0uNDY3LjEyNC0uNzEzIDAtLjI3LS4wNTYtLjQ3OS0uMTY4LS42MjZhLjUxOS41MTkgMCAwMC0uNDMxLS4yMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5FdmVudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5FeGNlcHRpb24gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5FeGNlcHRpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjQ2MSA3LjMxaDMuMDU1YS43NC43NCAwIDAxLjY2IDEuMDc0bC0yLjE0MSA0LjIxMWEuNzQuNzQgMCAxMS0xLjMxOS0uNjdMOS4zMSA4Ljc5SDYuMjU2YS43NC43NCAwIDAxLS42Ni0xLjA3NWwyLjE5LTQuMzFhLjc0Ljc0IDAgMDExLjMxOS42N0w3LjQ2MSA3LjMxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkV4Y2VwdGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5GaWVsZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZpZWxkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTUuMjcgMTJWNGg1LjQ2djEuNTdINy4yMDN2MS42NDFoMy4xOHYxLjU3NGgtMy4xOFYxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GaWVsZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5GaWxlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuRmlsZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODY3IDIuNjY3SDRhLjY2Ny42NjcgMCAwMC0uNjY3LjY2NnY5LjMzNGMwIC4zNjguMjk5LjY2Ni42NjcuNjY2aDhhLjY2Ny42NjcgMCAwMC42NjctLjY2NlY1LjYxOWEuNjY5LjY2OSAwIDAwLS4xODMtLjQ1OWwtMi4xMzMtMi4yODVhLjY2OC42NjggMCAwMC0uNDg0LS4yMDhtMS40NjYgNFYxMkg0LjY2N1Y0aDR2Mi4zMzNjMCAuMTg0LjE0OS4zMzQuMzMzLjMzNGgyLjMzM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GaWxlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkZsYXR0ZW5lZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkZsYXR0ZW5lZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMuMjUgM2EuMjUuMjUgMCAwMC0uMjUuMjV2MmMwIC4xMzguMTEyLjI1LjI1LjI1aDkuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTJhLjI1LjI1IDAgMDAtLjI1LS4yNWgtOS41em0wIDMuNzVBLjI1LjI1IDAgMDAzIDd2MmMwIC4xMzguMTEyLjI1LjI1LjI1SDUuNUEuMjUuMjUgMCAwMDUuNzUgOVY3YS4yNS4yNSAwIDAwLS4yNS0uMjVIMy4yNXptLS4yNSA0YS4yNS4yNSAwIDAxLjI1LS4yNUg1LjVhLjI1LjI1IDAgMDEuMjUuMjV2MmEuMjUuMjUgMCAwMS0uMjUuMjVIMy4yNWEuMjUuMjUgMCAwMS0uMjUtLjI1di0yem0zLjMxLS43MjdjLS4wODItLjA3My0uMDgyLS4yMjQgMC0uMjk2bDMuMDU0LTIuNjgzYS4xNy4xNyAwIDAxLjE5LS4wMjZjLjA2NC4wMzIuMTA0LjEuMTA0LjE3NHYxLjM0MWwzLjE2MS0uMDE2Yy4xIDAgLjE4LjA4Ni4xOC4xOTJ2Mi4zYzAgLjEwNS0uMDguMTkxLS4xOC4xOTFsLTMuMTYxLjAxN3YxLjM0MWMwIC4wNzQtLjA0LjE0Mi0uMTAzLjE3NGEuMTcuMTcgMCAwMS0uMTktLjAyNUw2LjMxIDEwLjAyM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5GbGF0dGVuZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuRnVuY3Rpb24gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5GdW5jdGlvbihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMS4yNjYgNC4xNVY1LjYzYTIuNDEgMi40MSAwIDAwLS44NTktLjE0NWMtLjY5MiAwLTEuMDY1LjM0Ni0xLjE3NyAxLjA0M2wtLjExLjYyNWgxLjgyOHYxLjQ0SDguOTIxbC0uMjA0IDEuMTE1QzguNDU1IDExLjMyNSA3LjUxNyAxMiA1LjkgMTJjLS40NjkgMC0uODgyLS4wNjEtMS4xNjYtLjE2N3YtMS40OTVjLjI3My4xMTcuNTkxLjE3OC45MDMuMTc4LjY1OSAwIDEuMDEtLjI5IDEuMTI3LTEuMDE1bC4xNTctLjkxSDUuMjQ3VjcuMTUyaDEuODM3bC4xODgtLjg0MkM3LjUzNCA0LjcxNCA4LjQzMiA0IDEwLjE5IDRjLjM5IDAgLjg1My4wNjcgMS4wNzYuMTV6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuRnVuY3Rpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuR2VvID0gZnVuY3Rpb24gRXVpSWNvblRva2VuR2VvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTggM2MxLjYzNiAwIDMuMDg4Ljc4NSA0IDIgLjYyOC44MzYgMSAxLjg3NSAxIDNhNC45NzggNC45NzggMCAwMS0uOTk5IDNIMTJhNC45OTIgNC45OTIgMCAwMS00IDIgNC45OTIgNC45OTIgMCAwMS00LTEuOTk5VjExYTUgNSAwIDAxNC04em0uOTQ4IDhINy4wNTJjLjI3Ny42MjYuNjIzIDEgLjk0OCAxIC4zMjUgMCAuNjctLjM3NC45NDgtMXpNNiAxMWwtLjY0NS4wMDFjLjI3NC4yNDIuNTgxLjQ0Ni45MTQuNjA2QTUuNDQ1IDUuNDQ1IDAgMDE2IDExLjAwMXptNC42NDUuMDAxSDEwYTUuNTEgNS41MSAwIDAxLS4yNjkuNjA2Yy4zMzMtLjE2LjY0LS4zNjQuOTE0LS42MDZ6bS01LjEzMy0yLjVINC4wMzFjLjA2OC41NC4yNDMgMS4wNDguNTA1IDEuNWgxLjE3MmE5LjE4NiA5LjE4NiAwIDAxLS4xOTYtMS41em0zLjk3NSAwSDYuNTEzYy4wMy41NDQuMTA0IDEuMDUuMjEgMS41aDIuNTUzYy4xMDctLjQ1LjE4Mi0uOTU2LjIxLTEuNXptMi40ODIgMGgtMS40ODFhOS4xODYgOS4xODYgMCAwMS0uMTk2IDEuNWgxLjE3MmMuMjYyLS40NTIuNDM3LS45Ni41MDUtMS41ek01LjcwOCA2TDQuNTM1IDZjLS4yNjEuNDUyLS40MzcuOTYtLjUwNCAxLjVoMS40ODFBOS4xODcgOS4xODcgMCAwMTUuNzA4IDZ6bTMuNTY4IDBINi43MjRjLS4xMDcuNDQ5LS4xODIuOTU1LS4yMSAxLjQ5OWgyLjk3M2E4LjQ3OSA4LjQ3OSAwIDAwLS4yMS0xLjV6TTExLjQ2NSA2aC0xLjE3M2MuMTAyLjQ2Ny4xNy45NzIuMTk2IDEuNWgxLjQ4MWEzLjk3NCAzLjk3NCAwIDAwLS41MDQtMS41ek02LjI2OSA0LjM5M2wtLjEyNC4wNjJjLS4yODYuMTUtLjU1MS4zMzMtLjc5LjU0NUg2YTUuNTEgNS41MSAwIDAxLjI2OS0uNjA3ek04IDRjLS4zMjYgMC0uNjcxLjM3NS0uOTQ4IDFoMS44OTZDOC42NzEgNC4zNzYgOC4zMjYgNCA4IDR6bTEuNzMuMzkzbC4wMzguMDcxYy4wODMuMTY4LjE2MS4zNDcuMjMyLjUzNmguNjQ2YTQuMDA2IDQuMDA2IDAgMDAtLjkxNS0uNjA3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkdlbzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5IaXN0b2dyYW0gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5IaXN0b2dyYW0oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDNoNHY1aDJWNS41aDRWMTNIMy4wMDF2LTFIM1Yzem0xIDloMlY0SDR2OHptMyAwaDJWOUg3djN6bTMgMGgyVjYuNWgtMlYxMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5IaXN0b2dyYW07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuSVAgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5JUChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0xMSAzYTIgMiAwIDAxMiAydjZhMiAyIDAgMDEtMiAySDVhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJoNnptLTEgMkg4djZoMVY5LjAxNGgxYy4yOTgtLjAxMyAyIDAgMi0yLjAxOCAwLTEuNzQtMS4zMTQtMS45NTItMS44MjUtMS45ODdMMTAgNXpNNiA1SDV2NmgxVjV6bTQgLjk4NGMuNjY3IDAgMSAuMzM2IDEgMS4wMDhDMTEgNy42NjQgMTAuNjY3IDggMTAgOEg5VjUuOTg0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbklQOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkludGVyZmFjZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbkludGVyZmFjZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04Ljk2NyAxMC42NTNoMS43MjdWMTJINS4zMDZ2LTEuMzQ3aDEuNzI3VjUuMzQ3SDUuMzA2VjRoNS4zODh2MS4zNDdIOC45Njd2NS4zMDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuSW50ZXJmYWNlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbkpvaW4gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Kb2luKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk03LjUgNC41djEuMDI1YzAgMS4yNjktMS4xODUgMS45MDgtMi4xMTIgMS43MzdhLjc1Ljc1IDAgMTAwIDEuNDc1Yy45MjctLjE3IDIuMTEyLjQ3IDIuMTEyIDEuNzM5djEuMDIzaDR2LTEuMDA1YTIuNSAyLjUgMCAwMTAtNC45ODhWNC41aC00ek0xMyA0YTEgMSAwIDAwLTEtMUg3YTEgMSAwIDAwLTEgMXYxLjUyNWMwIC4xNzItLjE3Mi4yOTMtLjM0MS4yNjJhMi4yNSAyLjI1IDAgMTAwIDQuNDI2Yy4xNy0uMDMxLjM0MS4wOS4zNDEuMjYyVjEyYTEgMSAwIDAwMSAxaDVhMSAxIDAgMDAxLTFWOS4wMDRhLjE2LjE2IDAgMDAtLjA0LS4xMDVjLS4xMDktLjEyNS0uNTk0LS4xNi0uNzMyLS4wNjhhMSAxIDAgMTEwLTEuNjYyYy4xMzguMDkyLjYyMy4wNTcuNzMyLS4wNjhhLjE2LjE2IDAgMDAuMDQtLjEwNVY0elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbkpvaW47IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuS2V5ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuS2V5KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEyLjY2NyA2LjU0MkEzLjIwOCAzLjIwOCAwIDAxOC44NiA5LjY5NGwtLjQzOC40OTJhLjQzNy40MzcgMCAwMS0uMzI3LjE0N2gtLjY3OHYuNzNhLjQzNy40MzcgMCAwMS0uNDM4LjQzN0g2LjI1di43M2EuNDM3LjQzNyAwIDAxLS40MzguNDM3SDMuNzcyYS40MzcuNDM3IDAgMDEtLjQzOC0uNDM4di0xLjQyM2MwLS4xMTYuMDQ2LS4yMjcuMTI4LS4zMWwyLjk1LTIuOTQ5YTMuMjA4IDMuMjA4IDAgMDEzLjA0Ny00LjIxNCAzLjIwMiAzLjIwMiAwIDAxMy4yMDkgMy4yMDl6bS0zLjIwOS0uODc1YS44NzUuODc1IDAgMTAxLjc1IDAgLjg3NS44NzUgMCAwMC0xLjc1IDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuS2V5OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbktleXdvcmQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5LZXl3b3JkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMzMgMTAuMjhjLS4xMi4wNC0uMjkuMDctLjQyLjA3LS4yMyAwLS40My0uMDgtLjUzLS4zbC0uNjMtMS4zNCAyLjMyLTIuODFIOS4zTDcuNzYgNy45M2gtLjA5TDguMjIgNEg2LjU5bC0xLjA1IDcuNWgxLjYzbC4yNy0xLjk0aC4xbC40MyAxLjEyYy4yNy43MS43NC45MiAxLjMzLjkyLjIzIDAgLjYtLjA0Ljg2LS4xMWwuMTctMS4yMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5LZXl3b3JkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk1ldGhvZCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1ldGhvZChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk0zLjMzMyAxMS4wMjdWNS4wNWgyLjA1OXYxLjEzNmguMDYzYy4yNS0uNzQ3Ljg5MS0xLjIxNCAxLjcyOC0xLjIxNC44NDggMCAxLjUyNC40ODMgMS42NSAxLjIxNGguMDYzYy4yMDQtLjczMS45MjctMS4yMTQgMS44MjItMS4yMTQgMS4xNTUgMCAxLjk0OS43OTggMS45NDkgMi4wMjN2NC4wM2gtMi4xNjlWNy41NDJjMC0uNTIxLS4yOS0uODQtLjczOC0uODRzLS43MjMuMzE5LS43MjMuODR2My40ODZINi45NjNWNy41NGMwLS41MjEtLjI5LS44NC0uNzM5LS44NC0uNDQ3IDAtLjcyMi4zMTktLjcyMi44NHYzLjQ4NkgzLjMzM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRob2Q7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuTWV0cmljQ291bnRlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk1ldHJpY0NvdW50ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAzYTEgMSAwIDAwLTEgMXYxSDlhMSAxIDAgMDAwIDJoMXYxYTEgMSAwIDEwMiAwVjdoMWExIDEgMCAxMDAtMmgtMVY0YTEgMSAwIDAwLTEtMXpNNSA3YTEgMSAwIDAwLTEgMXYxSDNhMSAxIDAgMDAwIDJoMXYxYTEgMSAwIDEwMiAwdi0xaDFhMSAxIDAgMTAwLTJINlY4YTEgMSAwIDAwLTEtMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRyaWNDb3VudGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk1ldHJpY0dhdWdlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuTWV0cmljR2F1Z2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDRoLS41YS41LjUgMCAwMTAtMWgxYS41LjUgMCAwMS41LjV2OWEuNS41IDAgMDEtLjUuNWgtMWEuNS41IDAgMDEwLTFINXYtMmgtLjVhLjUuNSAwIDAxMC0xSDVWN2gtLjVhLjUuNSAwIDAxMC0xSDVWNHptMyAxYTEgMSAwIDAwLTEgMXY2YTEgMSAwIDAwMSAxaDJhMSAxIDAgMDAxLTFWNmExIDEgMCAwMC0xLTFIOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5NZXRyaWNHYXVnZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5Nb2R1bGUgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Nb2R1bGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDJsNS4xOTYgM3YuMTc4bC0uODY2LjQ2OFY1LjVMOCAzIDMuNjcgNS41djVMOCAxM2w0LjMzLTIuNVY1Ljc3bC44NjYtLjQ3NFYxMUw4IDE0bC01LjE5Ni0zVjVMOCAyelwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4yNDMgNC40MjlMOS41OTcgNy4wNCA4IDcuOTI4IDMuNzQzIDUuNTYzYS41LjUgMCAxMC0uNDg2Ljg3NEw3LjUgOC43OTRWMTMuNWgxVjguNzk0bDQuMjQzLTIuMzU3YS41MDguNTA4IDAgMDAuMDYtLjA0bC4zOTItLjIwMlY1LjA0N2wtLjkxNy41MDVhLjU3My41NzMgMCAwMC0uMDIuMDFsLS4xMDYuMDYtLjE5MS4xMDUtMS4zNTUuNzUzLTQuODQ5LTIuOTA5LS41MTQuODU4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk1vZHVsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OYW1lc3BhY2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OYW1lc3BhY2UoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU1NiA4LjQxNmwtLjgwNC0xLjY4aC0uMDM2djUuNjRINVY0aDEuOTkybDIuMjkyIDMuOTYuODA0IDEuNjhoLjAzNlY0aDEuNzE2djguMzc2SDkuODQ4bC0yLjI5Mi0zLjk2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlbk5hbWVzcGFjZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OZXN0ZWQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OZXN0ZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTExIDNjMS4wNDQgMCAxLjkxMy43NTcgMS45OTQgMS43MzZsLjAwNi4xNDl2Ni4yM2MwIDEtLjgyIDEuODA1LTEuODQ1IDEuODhMMTEgMTNIOS41MDFhLjUuNSAwIDAxLS4wOS0uOTkybC4wOS0uMDA4SDExYy41MiAwIC45MzctLjM1Ljk5My0uNzgzbC4wMDctLjEwMnYtNi4yM2MwLS40NDUtLjM3OS0uODI3LS44ODItLjg3OUwxMSA0SDkuNWEuNS41IDAgMDEtLjA5LS45OTJMOS41IDNIMTF6TTYuNSAzYS41LjUgMCAwMS4wOS45OTJMNi41IDRINWMtLjUyIDAtLjkzNy4zNS0uOTkzLjc4M0w0IDQuODg1djYuMjNjMCAuNDQ1LjM3OS44MjcuODgyLjg3OUw1IDEyaDEuNWEuNS41IDAgMDEuMDkuOTkyTDYuNSAxM0g1Yy0xLjA0NCAwLTEuOTEzLS43NTctMS45OTQtMS43MzZMMyAxMS4xMTV2LTYuMjNjMC0xIC44Mi0xLjgwNSAxLjg0NS0xLjg4TDUgM2gxLjV6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01Ljg2NCA3LjI1YS43MTQuNzE0IDAgMTEwIDEuNDI5LjcxNC43MTQgMCAwMTAtMS40Mjl6bTIuMTQzIDBhLjcxNC43MTQgMCAxMTAgMS40MjkuNzE0LjcxNCAwIDAxMC0xLjQyOXptMi4xNDMgMGEuNzE0LjcxNCAwIDExMCAxLjQyOS43MTQuNzE0IDAgMDEwLTEuNDI5elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OZXN0ZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuTnVsbCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlbk51bGwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjAwMiAxMi40MTJsLS45NjIuOTYyYTEgMSAwIDAxLTEuNDE0LTEuNDE0bC45NjItLjk2MmE1LjMzMyA1LjMzMyAwIDAxNy40MS03LjQxbC45NjItLjk2MmExIDEgMCAxMTEuNDE0IDEuNDE0bC0uOTYyLjk2MmE1LjMzMyA1LjMzMyAwIDAxLTcuNDEgNy40MXptLjk2Ni0uOTY2YTQgNCAwIDAwNS40NzgtNS40NzhsLTUuNDc4IDUuNDc4em0tMS40MTQtMS40MTRsNS40NzgtNS40NzhhNCA0IDAgMDAtNS40NzggNS40Nzh6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuTnVsbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5OdW1iZXIgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5OdW1iZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjggOS44MTJoLS44NDJsLS43OCAyLjMzNUg1LjAzMWwuNzgtMi4zMzVINC42bC4xODItMS4wNDNoMS4zNzNsLjUwNy0xLjUwNEg1LjQ1NGwuMTg4LTEuMDQyaDEuMzY3bC43OTItMi4zN0g4Ljk0bC0uNzkyIDIuMzdoLjg0OWwuNzkyLTIuMzdoMS4xNDVsLS43OTIgMi4zN0gxMS40bC0uMTgyIDEuMDQySDkuOEw5LjI5MyA4Ljc3aDEuMjQ4bC0uMTgzIDEuMDQzSDguOTQ2bC0uNzc1IDIuMzM1SDcuMDI2TDcuOCA5LjgxMnptLS41LTEuMDQzaC44NDJsLjUxMy0xLjUwNGgtLjg0OUw3LjMgOC43N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5OdW1iZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuT2JqZWN0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuT2JqZWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNjMgMTJjLTEuMjk0IDAtMi4zODMtLjEwNS0yLjM4My0xLjgwMlY5LjZjMC0uNjM4LS4yNDctLjkxNC0uOTgtLjkxNHYtMS4zN2MuNzMzIDAgLjk4LS4yOC45OC0uOTE1di0uNkM0LjI0NyA0LjEwNSA1LjMzNiA0IDYuNjMxIDR2MS4xNGMtLjc1OSAwLS44ODYuMjcyLS44ODYuODQzdi44MTNjMCAuNDc5LS4yMjUuOTM2LTEuMjEyIDEuMTMzdi4xNDJjLjk4Ny4xOTcgMS4yMTIuNjU0IDEuMjEyIDEuMTMzdi44MTNjMCAuNTcuMTI3Ljg0NC44ODYuODQ0VjEyem0yLjI2Ni04YzEuMjk1IDAgMi4zODQuMTA1IDIuMzg0IDEuODAyVjYuNGMwIC42MzguMjQ3LjkxNC45OC45MTR2MS4zN2MtLjczMyAwLS45OC4yOC0uOTguOTE1di42QzExLjI4IDExLjg5NSAxMC4xOSAxMiA4Ljg5NiAxMnYtMS4xNGMuNzU5IDAgLjg4Ni0uMjcyLjg4Ni0uODQzdi0uODEzYzAtLjQ3OS4yMjUtLjkzNiAxLjIxMi0xLjEzM1Y3LjkzYy0uOTg3LS4xOTctMS4yMTItLjY1NC0xLjIxMi0xLjEzM3YtLjgxM2MwLS41Ny0uMTI3LS44NDQtLjg4Ni0uODQ0VjR6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuT2JqZWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlbk9wZXJhdG9yID0gZnVuY3Rpb24gRXVpSWNvblRva2VuT3BlcmF0b3IoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMi42NjcgOC4wMDJjMC0xLjUuMzk0LTIuNzQzIDEuMjQ4LTMuODIyaDEuNDM3Yy0uNjUyLjgtMS4xNCAyLjM4OC0xLjE0IDMuODIyIDAgMS40My40ODggMy4wMTggMS4xNCAzLjgxOEgzLjkxNWMtLjg1NC0xLjA4LTEuMjQ4LTIuMzIyLTEuMjQ4LTMuODE4ek02Ljc3IDkuOTk4bC0uODE4LS44MDMgMS4yMy0xLjE5Ny0xLjIzLTEuMjAzLjgzLS43OTMgMS4yMjEgMS4xOTNMOS4yMyA2LjAwMmwuODE4Ljc5My0xLjIyNyAxLjIgMS4yMjcgMS4yLS44MTguODAzTDggOC43OTUgNi43NyA5Ljk5OHptNi41NjMtMmMwIDEuNS0uMzk0IDIuNzQzLTEuMjQ4IDMuODIyaC0xLjQzN2MuNjUyLS44IDEuMTQtMi4zODggMS4xNC0zLjgyMiAwLTEuNDMtLjQ4OC0zLjAxOC0xLjE0LTMuODE4aDEuNDM3Yy44NTQgMS4wOCAxLjI0OCAyLjMyMiAxLjI0OCAzLjgxOHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5PcGVyYXRvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5QYWNrYWdlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUGFja2FnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk04LjA0OSAzLjc4NWwzLjg1MiAxLjAwNi00LjA0OSAxLjEwM0w0IDQuNzkxbDMuOTUxLTEuMDA2YS4xOS4xOSAwIDAxLjA5OCAwem0uMDczIDIuNjU0bDQuNTQ1LTEuMzA2djUuNDVsLS4xMzEuMTg0LTQuNDE0IDEuNDU1VjYuNDM5em0tNC43ODkgNC4xNDVWNS4xODhMNy40OTggNi40MXY1LjgxbC00LjAzNC0xLjQ1My0uMTMtLjE4M3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5QYWNrYWdlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblBhcmFtZXRlciA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblBhcmFtZXRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljg4OSAxMlY0aDMuMzA0YzEuNzk3IDAgMi45MjIgMS4xMTcgMi45MTggMi43Ny4wMDQgMS42NTItMS4xNDQgMi43NDYtMi45NzYgMi43NDZINi44MjJWMTJINC44OXptMS45MzMtNC4wMDhoLjk1M2MuODY4IDAgMS4zMzYtLjQ3MiAxLjMzMi0xLjIyMi4wMDQtLjczLS40NjQtMS4yMTEtMS4zMzItMS4yMTFoLS45NTN2Mi40MzN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUGFyYW1ldGVyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblBlcmNvbGF0b3IgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5QZXJjb2xhdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGNsaXBSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjUgN2ExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzem0wIDFhMi41IDIuNSAwIDEwMC01IDIuNSAyLjUgMCAwMDAgNXpNMTEgOWExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnptMCAxYTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0em0tMi41IDEuNWEuNS41IDAgMTEtMSAwIC41LjUgMCAwMTEgMHptMSAwYTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblBlcmNvbGF0b3I7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUHJvcGVydHkgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Qcm9wZXJ0eShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00Ljg4OSAxMlY0aDMuMzA0YzEuNzk3IDAgMi45MjIgMS4xMTcgMi45MTggMi43Ny4wMDQgMS42NTItMS4xNDQgMi43NDYtMi45NzYgMi43NDZINi44MjJWMTJINC44OXptMS45MzMtNC4wMDhoLjk1M2MuODY4IDAgMS4zMzYtLjQ3MiAxLjMzMi0xLjIyMi4wMDQtLjczLS40NjQtMS4yMTEtMS4zMzItMS4yMTFoLS45NTN2Mi40MzN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUHJvcGVydHk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUmFuZ2UgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SYW5nZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcImdcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIlxuICB9LCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS44MiA1LjExNmEuNS41IDAgMDAtLjcwNC43MDRsLjA2NC4wNjRMMTEuNzE5IDhsLTIuNTQgMi4xMTZhLjUuNSAwIDAwLS4xMTQuNjNsLjA1LjA3NGEuNS41IDAgMDAuNjMuMTE1bC4wNzUtLjA1IDMtMi41YS41LjUgMCAwMC4wNzEtLjY5N2wtLjA3LS4wNzItMy0yLjV6TTYuMTggNS4xMTZhLjUuNSAwIDAxLjcwNC43MDRsLS4wNjQuMDY0TDQuMjgxIDhsMi41NCAyLjExNmEuNS41IDAgMDEuMTE0LjYzbC0uMDUuMDc0YS41LjUgMCAwMS0uNjMuMTE1bC0uMDc1LS4wNS0zLTIuNWEuNS41IDAgMDEtLjA3MS0uNjk3bC4wNy0uMDcyIDMtMi41elwiXG4gIH0pKSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5SYW5nZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5SYW5rRmVhdHVyZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblJhbmtGZWF0dXJlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNHY4aC0yVjZIOXY0SDV2MkgzVjhoNFY0aDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmFua0ZlYXR1cmU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzID0gZnVuY3Rpb24gRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNHY4aC0yVjZIOXY0SDV2MkgzVjhoNFY0aDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblJlcG8gPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5SZXBvKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTguNTMzIDkuMDY3Yy0xLjc5MiAwLTIuMzc4LjcyLTIuNTcgMS4xOTRhMS42MDEgMS42MDEgMCAxMS0xLjE2My0uMDM3VjUuNzc2YTEuNTk1IDEuNTk1IDAgMDEtMS4wNjctMS41MWMwLS44ODUuNzE1LTEuNiAxLjYtMS42Ljg4NiAwIDEuNi43MTUgMS42IDEuNiAwIC43LS40NDIgMS4yOTEtMS4wNjYgMS41MXYyLjgyMUM2LjMzNiA4LjI1MSA3LjAxOSA4IDggOGMxLjQyNCAwIDEuODk5LS43MTUgMi4wNTMtMS4xOWExLjYwMyAxLjYwMyAwIDAxLS45ODYtMS40NzdjMC0uODg1LjcxNC0xLjYgMS42LTEuNi44ODUgMCAxLjYuNzE1IDEuNiAxLjZhMS41OSAxLjU5IDAgMDEtMS4xMTUgMS41MjZjLS4xMzkuNzYyLS42NTYgMi4yMDgtMi42MTkgMi4yMDh6bS0zLjIgMi4xMzNhLjUzNS41MzUgMCAwMC0uNTMzLjUzM2MwIC4yOTQuMjQuNTM0LjUzMy41MzRhLjUzNS41MzUgMCAwMDAtMS4wNjd6bTAtNy40NjdhLjUzNS41MzUgMCAwMC0uNTMzLjUzNGMwIC4yOTMuMjQuNTMzLjUzMy41MzMuMjk0IDAgLjUzNC0uMjQuNTM0LS41MzNhLjUzNS41MzUgMCAwMC0uNTM0LS41MzR6TTEwLjY2NyA0LjhhLjUzNS41MzUgMCAwMC0uNTM0LjUzMy41MzUuNTM1IDAgMDAxLjA2NyAwIC41MzUuNTM1IDAgMDAtLjUzMy0uNTMzelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblJlcG87IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU2VhcmNoVHlwZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblNlYXJjaFR5cGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjI3IDcuNWExIDEgMCAxMTIgMCAxIDEgMCAwMS0yIDB6TTguNzcgNy41YTEgMSAwIDExMiAwIDEgMSAwIDAxLTIgMHpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTEuNzAyIDEwLjY4MmE0LjUwMSA0LjUwMSAwIDAxLTUuNzk2LjQ4Mkw0LjI4IDEyLjc4OWEuNzUuNzUgMCAwMS0xLjA2LTEuMDZMNC44NDcgMTAuMWE0LjUwMSA0LjUwMSAwIDExNi44NTUuNTgxem0tNS4zMDQtMS4wNmEzIDMgMCAxMDQuMjQzLTQuMjQzQTMgMyAwIDAwNi4zOTggOS42MnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TZWFyY2hUeXBlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblNoYXBlID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU2hhcGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTMgMTB2M2gtM3YtMUg2djFIM3YtM2gxVjZIM1YzaDN2MWg0VjNoM3YzaC0xdjRoMXptLTggMUg0djFoMXYtMXptNyAwaC0xdjFoMXYtMXpNNSA0SDR2MWgxVjR6bTcgMGgtMXYxaDFWNHptLTEgMmgtMVY1SDZ2MUg1djRoMXYxaDR2LTFoMVY2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblNoYXBlOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblN0cmluZyA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblN0cmluZyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMTQ3IDQuMjk3bC0uMjU1IDEuNDU1aC45MzZsLS4yMjIgMS4yNjZoLS45MzVsLS40NTUgMi42ODhjLS4wMjUuMTg0LS4wMTMuMzIzLjAzNi40MTcuMDQ4LjA5My4xNy4xNDQuMzY1LjE1MS4wNzUuMDA0LjIzLS4wMDUuNDY1LS4wMjdsLS4xMyAxLjMyYy0uMy4wOTctLjYxOC4xNDItLjk1Ny4xMzUtLjU1Mi0uMDA3LS45NjUtLjE3LTEuMjM5LS40ODctLjI3NC0uMzE3LS4zODYtLjc0OC0uMzM1LTEuMjkzbC40NzYtMi45MDRoLS43MjVsLjIxNi0xLjI2NmguNzI1bC4yNTQtMS40NTVoMS43OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TdHJpbmc7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuU3RydWN0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuU3RydWN0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQuNjY3IDQuNjY3aDIuNjY2djIuNjY2SDQuNjY3VjQuNjY3em0wIDRoMi42NjZ2Mi42NjZINC42NjdWOC42Njd6bTQtNGgyLjY2NnYyLjY2Nkg4LjY2N1Y0LjY2N3ptMCA0aDIuNjY2djIuNjY2SDguNjY3VjguNjY3ek0zLjMzMyAzLjMzM3Y5LjMzNGg5LjMzNFYzLjMzM0gzLjMzM3ptMC0xLjMzM2g5LjMzNEMxMy40MDMgMiAxNCAyLjU5NyAxNCAzLjMzM3Y5LjMzNGMwIC43MzYtLjU5NyAxLjMzMy0xLjMzMyAxLjMzM0gzLjMzM0ExLjMzMyAxLjMzMyAwIDAxMiAxMi42NjdWMy4zMzNDMiAyLjU5NyAyLjU5NyAyIDMuMzMzIDJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuU3RydWN0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblN5bWJvbCA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblN5bWJvbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguMzE2IDE0YTYgNiAwIDExMC0xMiA2IDYgMCAwMTAgMTJ6bTAtMS4zMzNhNC42NjcgNC42NjcgMCAxMDAtOS4zMzQgNC42NjcgNC42NjcgMCAwMDAgOS4zMzR6bTIuMTktNS43MmgxLjE0M2MuMDE5IDEuNDQ4LS43OTMgMi4zMzgtMS45MjIgMi4zMzgtLjYzMiAwLTEuMTk0LS4yNjctMS43MDYtLjgxMS0uMzYtLjM5Ny0uNjM2LS41NzYtMS0uNTc2LS41MTcgMC0uODQ5LjM1NS0uODg1IDEuMDgzSDQuOTgzYy4wMTQtMS40Ny44NTgtMi4zMTQgMS45NS0yLjMxNC41OTUgMCAxLjEyNS4yNDkgMS42NzguODAyLjM5Mi4zODIuNjQxLjU5NSAxLjAzOC41OTUuNDg0IDAgLjg1Ny0uMzIzLjg1Ny0xLjExNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5TeW1ib2w7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblRva2VuVGFnID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVGFnKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgOGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNNCA0YTEgMSAwIDAwLTEgMXY2YTEgMSAwIDAwMSAxaDYuOTg5YTEgMSAwIDAwLjgyNS0uNDM2bDIuMDUtM2ExIDEgMCAwMDAtMS4xMjhsLTIuMDUtM0ExIDEgMCAwMDEwLjk5IDRINHptLjc1IDEuMjVhLjUuNSAwIDAwLS41LjV2NC41YS41LjUgMCAwMC41LjVoNS43NDVhLjUuNSAwIDAwLjQwNS0uMjA2bDEuNjM2LTIuMjVhLjUuNSAwIDAwMC0uNTg4TDEwLjkgNS40NTZhLjUuNSAwIDAwLS40MDUtLjIwNkg0Ljc1elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Ub2tlblRhZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5UZXh0ID0gZnVuY3Rpb24gRXVpSWNvblRva2VuVGV4dChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuMTQ3IDQuMjk3bC0uMjU1IDEuNDU1aC45MzZsLS4yMjIgMS4yNjZoLS45MzVsLS40NTUgMi42ODhjLS4wMjUuMTg0LS4wMTMuMzIzLjAzNi40MTcuMDQ4LjA5My4xNy4xNDQuMzY1LjE1MS4wNzUuMDA0LjIzLS4wMDUuNDY1LS4wMjdsLS4xMyAxLjMyYy0uMy4wOTctLjYxOC4xNDItLjk1Ny4xMzUtLjU1Mi0uMDA3LS45NjUtLjE3LTEuMjM5LS40ODctLjI3NC0uMzE3LS4zODYtLjc0OC0uMzM1LTEuMjkzbC40NzYtMi45MDRoLS43MjVsLjIxNi0xLjI2NmguNzI1bC4yNTQtMS40NTVoMS43OHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5UZXh0OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Ub2tlblRva2VuQ291bnQgPSBmdW5jdGlvbiBFdWlJY29uVG9rZW5Ub2tlbkNvdW50KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCA0SDN2M2g1VjR6TTEzIDlIOHYzaDVWOXpNMTAgNGgzdjNoLTNWNHpNNiA5SDN2M2gzVjl6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRva2VuVG9rZW5Db3VudDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVG9rZW5WYXJpYWJsZSA9IGZ1bmN0aW9uIEV1aUljb25Ub2tlblZhcmlhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTYuNjQ5IDQuNjY3bDEuMzI2IDQuN2guMDVsMS4zMjYtNC43aDEuOTgybC0yLjEzNCA2LjY2Nkg2LjgwMUw0LjY2NyA0LjY2N3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVG9rZW5WYXJpYWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVHJhaW5pbmcgPSBmdW5jdGlvbiBFdWlJY29uVHJhaW5pbmcoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4zODYgOS44MzZhMi41IDIuNSAwIDExMy42MTEuNjY3QzE1LjIxMiAxMS4xNzMgMTYgMTIuNDYgMTYgMTR2MS41YS41LjUgMCAxMS0xIDBWMTRjMC0xLjcyNC0xLjI3Ni0zLTMtMy0uOTEgMC0xLjI5OC0uMDItMS44MDUtLjEyMi0xLjI1LS4yNTQtMi4zMzMtMS0zLjU4NS0yLjU2NmEuNS41IDAgMTEuNzgtLjYyNGMuOSAxLjEyNCAxLjY1MyAxLjc0IDIuNDM0IDIuMDQzLjE1NS4wNTIuMzQ1LjA4My41NjIuMTA1em0xLjc4NS4xMjhjLjA4My4wMS4xNjcuMDIxLjI1MS4wMzRMMTIuNSAxMGExLjUgMS41IDAgMTAtLjMzLS4wMzZ6TTkuNzggMTEuOTdhLjUuNSAwIDAxLjUuNWMwIC4wNzYtLjA0Ny4yMjYtLjA1LjIzMS0uMTc5LjM4LS4yMy43NzQtLjIzIDEuMzAydjEuNWEuNS41IDAgMTEtMSAwdi0xLjVjMC0uNjU3LjA3Mi0xLjE4Ni4zMDctMS42OTZhLjUuNSAwIDAxLjQ3My0uMzM3ek01Ljk1OCA1Ljc3MmEuNS41IDAgMDEtLjc4LjYyNUwzLjExIDMuODEyYS41LjUgMCAxMS43OC0uNjI0bDIuMDY4IDIuNTg0ek0xIDExaDUuNWEuNS41IDAgMTEwIDFoLTZhLjUuNSAwIDAxLS41LS41Vi41QS41LjUgMCAwMS41IDBoMTJhLjUuNSAwIDAxLjUuNXYzYS41LjUgMCAxMS0xIDBWMUgxdjEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25UcmFpbmluZzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVHJhc2ggPSBmdW5jdGlvbiBFdWlJY29uVHJhc2goX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSAzaDV2MUgwVjNoNVYxYTEgMSAwIDAxMS0xaDRhMSAxIDAgMDExIDF2MnptLTcuMDU2IDhIN3YxSDQuMWwuMzkyIDIuNTE5Yy4wNDIuMjY5LjI1NC40NTguNDkzLjQ1OGg2LjAzYy4yMzkgMCAuNDUxLS4xODkuNDkzLS40NThsMS40OTgtOS41NzZIMTRsLTEuNTA0IDkuNzNjLS4xMTYuNzQ3LS43NCAxLjMwNC0xLjQ4MSAxLjMwNGgtNi4wM2MtLjc0MSAwLTEuMzY1LS41NTctMS40ODEtMS4zMDRsLTEuNTExLTkuNzNIOVY1Ljk1SDMuMTU3TDMuNDc2IDhIOHYxSDMuNjMybC4zMTIgMnpNNiAzaDRWMUg2djJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblRyYXNoOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25VbmZvbGQgPSBmdW5jdGlvbiBFdWlJY29uVW5mb2xkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS4xNCAzLjgwOEw3LjUzIDEuNTFhLjY3LjY3IDAgMDEuOTQyIDBsMi4zODkgMi4yOThjLjI2LjI1Ni42ODUuMjU2Ljk0NCAwYS42NS42NSAwIDAwMC0uOTNMOS40MTYuNTc4YTIuMDIgMi4wMiAwIDAwLTIuODMyIDBsLTIuMzg4IDIuM2EuNjUuNjUgMCAwMDAgLjkzYy4yNi4yNTYuNjgzLjI1Ni45NDQgMHptMCA4LjM4NGwyLjM5IDIuMjk4YS42Ny42NyAwIDAwLjk0MiAwbDIuMzg5LTIuMjk4YS42NzcuNjc3IDAgMDEuOTQ0IDAgLjY1LjY1IDAgMDEwIC45M2wtMi4zODggMi4zYTIuMDIgMi4wMiAwIDAxLTIuODMyIDBsLTIuMzg4LTIuM2EuNjUuNjUgMCAwMTAtLjkzLjY3Ny42NzcgMCAwMS45NDQgMHpNMTYgNkgwdjRoMTZWNnpNMSA5VjdoMTR2MkgxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25VbmZvbGQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblVubGluayA9IGZ1bmN0aW9uIEV1aUljb25VbmxpbmsoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjU2NSAxMC44M2EuNS41IDAgMTEuODE5LjU3M2wtMS44NzcgMi42OGMtLjk2MyAxLjM3Ni0zLjAyIDEuNTUtNC41ODguNDVDLjM1IDEzLjQzNi0uMTkxIDExLjQ0NS43NzMgMTAuMDdMMy42NCA1Ljk3M2MuOTYzLTEuMzc1IDMuMDE5LTEuNTQ4IDQuNTg3LS40NWEuNS41IDAgMTEtLjU3My44MkM2LjUwOSA1LjU0IDUuMDggNS42NiA0LjQ2IDYuNTQ2bC0yLjg2OCA0LjA5NWMtLjYyMS44ODctLjI0NSAyLjI3LjkgMy4wNzMgMS4xNDYuODAyIDIuNTc1LjY4MiAzLjE5Ni0uMjA1bDEuODc3LTIuNjh6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03Ljg5MiAzLjQzYS41LjUgMCAxMS0uNTc0LS44MTlMMTAgLjczNGMxLjM3Ni0uOTYzIDMuMzY3LS40MjIgNC40NjUgMS4xNDYgMS4wOTggMS41NjkuOTI2IDMuNjI1LS40NSA0LjU4OEw5LjkxOCA5LjMzNmMtMS4zNzUuOTYzLTMuMzY2LjQyMi00LjQ2NC0xLjE0NmEuNS41IDAgMTEuODE5LS41NzRjLjgwMiAxLjE0NiAyLjE4NSAxLjUyMiAzLjA3Mi45TDEzLjQ0IDUuNjVjLjg4Ni0uNjIxIDEuMDA2LTIuMDUuMjA0LTMuMTk1LS44MDItMS4xNDYtMi4xODYtMS41MjItMy4wNzItLjlMNy44OTIgMy40M3pNNiAuNXYzYS41LjUgMCAwMS0xIDB2LTNhLjUuNSAwIDAxMSAwek0xLjA1OCAyLjIzbDIuNDU4IDEuNzJhLjUuNSAwIDAxLS41NzQuODJMLjQ4NCAzLjA1YS41LjUgMCAxMS41NzQtLjgyem0xMiA3LjA5M2wyLjQ1NyAxLjcyYS41LjUgMCAxMS0uNTczLjgybC0yLjQ1Ny0xLjcyYS41LjUgMCAxMS41NzMtLjgyem0tMi4wOTkgMS4xODF2M2EuNS41IDAgMTEtMSAwdi0zYS41LjUgMCAxMTEgMHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVW5saW5rOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Vc2VyID0gZnVuY3Rpb24gRXVpSWNvblVzZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNOCA5YTQgNCAwIDEwMC04IDQgNCAwIDAwMCA4em0wLTFhMyAzIDAgMTAwLTYgMyAzIDAgMDAwIDZ6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG4gIH0pLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUgMTQuMjkxQTkuMDUzIDkuMDUzIDAgMDA4IDExYTkuMDUzIDkuMDUzIDAgMDAtNyAzLjI5MWwuNzE1LjcxQTguMDQ3IDguMDQ3IDAgMDE4IDExLjk5NiA4LjA0NyA4LjA0NyAwIDAxMTQuMjg2IDE1bC43MTQtLjcxelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vc2VyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Vc2VyQXZhdGFyID0gZnVuY3Rpb24gRXVpSWNvblVzZXJBdmF0YXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE4LFxuICAgIGhlaWdodDogMTgsXG4gICAgdmlld0JveDogXCIwIDAgMTggMThcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJnXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjY4OSAxMS4xMzJjMS4xNTUgMS4yMjIgMS45NTMgMi44NzkgMi4xODMgNC43NDhhMS4wMDcgMS4wMDcgMCAwMS0xIDEuMTJIMy4wMDdhMS4wMDUgMS4wMDUgMCAwMS0xLTEuMTJjLjIzLTEuODcgMS4wMjgtMy41MjYgMi4xODMtNC43NDguMjQ3LjIyOC41MDUuNDQyLjc4Mi42MzMtMS4wMzggMS4wNjktMS43NjUgMi41NS0xLjk3MiA0LjIzN0wxNC44NzIgMTZjLS4yMDQtMS42ODYtLjkzLTMuMTY2LTEuOTY2LTQuMjM1YTcuMDEgNy4wMSAwIDAwLjc4My0uNjMzek04LjkzOSAxYzEuOSAwIDMgMiA0LjM4IDIuNjMzYTIuNDgzIDIuNDgzIDAgMDEtMS44OC44NjdjLS4yOTggMC0uNTc5LS4wNi0uODQ0LS4xNTdBMy43MjYgMy43MjYgMCAwMTcuNjkgNS43NWMtMS4zOTUgMC0zLjc1LjI1LTMuMjQ1LTEuOTAzQzUuOTQgMyA2Ljk1MiAxIDguOTQgMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguOTQgMmMyLjIwNSAwIDQgMS43OTQgNCA0cy0xLjc5NSA0LTQgNGMtMi4yMDcgMC00LTEuNzk0LTQtNHMxLjc5My00IDQtNG0wIDlBNSA1IDAgMTA4LjkzNy45OTkgNSA1IDAgMDA4Ljk0IDExXCJcbiAgfSkpKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Vc2VyQXZhdGFyOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25Vc2VycyA9IGZ1bmN0aW9uIEV1aUljb25Vc2VycyhfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk01LjQ4MiA0LjM0NGEyIDIgMCAxMC0yLjk2MyAwYy0uMDguMDQyLS4xNTYuMDg3LS4yMy4xMzYtLjQ1Ny4zMDUtLjc1LjcwNC0uOTMzIDEuMDczQTMuNDU3IDMuNDU3IDAgMDAxIDYuOTc4VjlhMSAxIDAgMDAxIDFoMi41YTMuNjkgMy42OSAwIDAxLjY4NC0uOTYyTDUuMTcxIDlIMlY3czAtMiAyLTJjMS4wMDcgMCAxLjUwNy41MDcgMS43NTUgMS4wMS4yMjUtLjI1NC40OTMtLjQ3Ljc5My0uNjM2YTIuNzE3IDIuNzE3IDAgMDAtMS4wNjYtMS4wM3pNNCA0YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem0xMCA2aC0yLjVhMy42ODQgMy42ODQgMCAwMC0uNjg0LS45NjJMMTAuODI5IDlIMTRWN3MwLTItMi0yYy0xLjAwNyAwLTEuNTA3LjUwNy0xLjc1NSAxLjAxYTMuMDEyIDMuMDEyIDAgMDAtLjc5My0uNjM2IDIuNzE2IDIuNzE2IDAgMDExLjA2Ni0xLjAzIDIgMiAwIDExMi45NjMgMGMuMDguMDQyLjE1Ni4wODcuMjMuMTM2LjQ1Ny4zMDUuNzUuNzA0LjkzMyAxLjA3M0EzLjQ1MyAzLjQ1MyAwIDAxMTUgNi45NDRWOWExIDEgMCAwMS0xIDF6bS0yLTZhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6XCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTAgOGMwIC41MTctLjE5Ni45ODktLjUxOCAxLjM0NGEyLjc1NSAyLjc1NSAwIDAxMS4xNjMgMS4yMUEzLjQ1MyAzLjQ1MyAwIDAxMTEgMTEuOTc3VjE0YTEgMSAwIDAxLTEgMUg2YTEgMSAwIDAxLTEtMXYtMi4wMjJhMi4wMDUgMi4wMDUgMCAwMS4wMDYtLjEzNSAzLjQ1NiAzLjQ1NiAwIDAxLjM1LTEuMjkgMi43NTUgMi43NTUgMCAwMTEuMTYyLTEuMjFBMiAyIDAgMTExMCA4em0tNCA0djJoNHYtMnMwLTItMi0yLTIgMi0yIDJ6bTMtNGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblVzZXJzOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WZWN0b3IgPSBmdW5jdGlvbiBFdWlJY29uVmVjdG9yKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNSAxMVY1SDExVjMuNUg1VjVIMy41djZINXYxLjVoNlYxMWgxLjV6bTEgMEgxNXY0aC00di0xLjVINVYxNUgxdi00aDEuNVY1SDFWMWg0djEuNWg2VjFoNHY0aC0xLjV2NnpNNCA0VjJIMnYyaDJ6bTggMGgyVjJoLTJ2MnpNMiAxNGgydi0ySDJ2MnptMTAgMGgydi0yaC0ydjJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZlY3RvcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlkZW9QbGF5ZXIgPSBmdW5jdGlvbiBFdWlJY29uVmlkZW9QbGF5ZXIoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0wIDEuOTk0QzAgLjg5My44OTUgMCAxLjk5NCAwaDEyLjAxMkMxNS4xMDcgMCAxNiAuODk1IDE2IDEuOTk0djEyLjAxMkExLjk5NSAxLjk5NSAwIDAxMTQuMDA2IDE2SDEuOTk0QTEuOTk1IDEuOTk1IDAgMDEwIDE0LjAwNlYxLjk5NHptMSAwdjEyLjAxMmMwIC41NDguNDQ2Ljk5NC45OTQuOTk0aDEyLjAxMmEuOTk1Ljk5NSAwIDAwLjk5NC0uOTk0VjEuOTk0QS45OTUuOTk1IDAgMDAxNC4wMDYgMUgxLjk5NEEuOTk1Ljk5NSAwIDAwMSAxLjk5NHpNMSA0aDE0djFIMVY0em0xLjUtMWEuNS41IDAgMDEwLTFoMWEuNS41IDAgMDEwIDFoLTF6bTMgMGEuNS41IDAgMDEwLTFoMWEuNS41IDAgMDEwIDFoLTF6bTQuOTQ3IDYuMTA2YTEgMSAwIDAxMCAxLjc4OGwtMyAyQTEgMSAwIDAxNiAxMlY4YTEgMSAwIDAxMS40NDctLjg5NGwzIDJ6TTEwIDEwTDcgOHY0bDMtMnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlkZW9QbGF5ZXI7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0FyZWEgPSBmdW5jdGlvbiBFdWlJY29uVmlzQXJlYShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTNoMTBWOS45MTNsLTIuNTcxLTIuODI2TDguNTYgOC43NTNhLjUuNSAwIDAxLS43MjgtLjA2N0w0LjQ0OCA0LjMxNyAzIDYuMTkxVjEzem01LjI5NS01LjM1bDEuODM3LTEuNjRhLjUuNSAwIDAxLjcwMy4wMzdsMy4wMzUgMy4zMzZhLjUuNSAwIDAxLjEzLjMzN3YzLjc4YS41LjUgMCAwMS0uNS41aC0xMWEuNS41IDAgMDEtLjUtLjVWNi4wMmEuNS41IDAgMDEuMTA0LS4zMDVsMS45NDctMi41MmEuNS41IDAgMDEuNzkxLS4wMDFMOC4yOTUgNy42NXpNMSAxNWgxMy41YS41LjUgMCAxMTAgMUguNWEuNS41IDAgMDEtLjUtLjV2LTE0YS41LjUgMCAwMTEgMFYxNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQXJlYTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQXJlYVN0YWNrZWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzQXJlYVN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAxYS41LjUgMCAwMS41LjVWMTVoMTMuNWEuNS41IDAgMTEwIDFILjVhLjUuNSAwIDAxLS41LS41di0xNEEuNS41IDAgMDEuNSAxem00LjM0MiAyLjE5NEw4LjI5NSA3LjY1bDEuODM3LTEuNjRhLjUuNSAwIDAxLjcwMy4wMzdsMy4wMzUgMy4zMzZhLjUuNSAwIDAxLjEzLjMzN3YzLjc4YS41LjUgMCAwMS0uNS41aC0xMWEuNS41IDAgMDEtLjUtLjVWNi4wMmEuNS41IDAgMDEuMTA0LS4zMDVsMS45NDctMi41MmEuNS41IDAgMDEuNzkxLS4wMDF6bS0uMzk0IDEuMTIzTDMgNi4xOTF2NC4xMDFsMS4xNDYtMS4xNDZhLjUuNSAwIDAxLjQ5My0uMTI2bC4wODUuMDMzTDguNSAxMC45NGwxLjc3Ni0uODg4YS41LjUgMCAwMS4zNi0uMDM0bC4wODguMDM0TDEzIDExLjE5VjkuOTEzbC0yLjU3MS0yLjgyNkw4LjU2IDguNzUzYS41LjUgMCAwMS0uNzI4LS4wNjdMNC40NDggNC4zMTd6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc0FyZWFTdGFja2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNCYXJIb3Jpem9udGFsID0gZnVuY3Rpb24gRXVpSWNvblZpc0Jhckhvcml6b250YWwoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgMTBoLTZhLjUuNSAwIDAxMC0xSDhWNkgyLjVhLjUuNSAwIDAxMC0xSDEzVjJIMi41YS41LjUgMCAwMTAtMWgxMWEuNS41IDAgMDEuNS41djRhLjUuNSAwIDAxLS41LjVIOXYzaDIuNWEuNS41IDAgMDEuNS41djRhLjUuNSAwIDAxLS41LjVoLTlhLjUuNSAwIDExMC0xSDExdi0zSDguNXpNMCAuNWEuNS41IDAgMTExIDB2MTRhLjUuNSAwIDExLTEgMFYuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFySG9yaXpvbnRhbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0uNSAwYS41LjUgMCAwMS41LjV2MTRhLjUuNSAwIDExLTEgMFYuNUEuNS41IDAgMDEuNSAwem0xMyAxYS41LjUgMCAwMS41LjV2NGEuNS41IDAgMDEtLjUuNUg5djNoMi41YS41LjUgMCAwMS41LjV2NGEuNS41IDAgMDEtLjUuNWgtOWEuNS41IDAgMTEwLTFIOXYtM0gyLjVhLjUuNSAwIDAxMC0xSDZWNkgyLjVhLjUuNSAwIDAxMC0xSDEwVjJIMi41YS41LjUgMCAwMTAtMWgxMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFySG9yaXpvbnRhbFN0YWNrZWQ7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0JhclZlcnRpY2FsID0gZnVuY3Rpb24gRXVpSWNvblZpc0JhclZlcnRpY2FsKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAgNy41djZhLjUuNSAwIDExLTEgMFY4SDZ2NS41YS41LjUgMCAxMS0xIDBWM0gydjEwLjVhLjUuNSAwIDExLTEgMHYtMTFhLjUuNSAwIDAxLjUtLjVoNGEuNS41IDAgMDEuNS41VjdoM1Y0LjVhLjUuNSAwIDAxLjUtLjVoNGEuNS41IDAgMDEuNS41djlhLjUuNSAwIDExLTEgMFY1aC0zdjIuNXpNLjUgMTZhLjUuNSAwIDExMC0xaDE0YS41LjUgMCAxMTAgMUguNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFyVmVydGljYWw7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0JhclZlcnRpY2FsU3RhY2tlZCA9IGZ1bmN0aW9uIEV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC41IDE1YS41LjUgMCAxMTAgMUguNWEuNS41IDAgMTEwLTFoMTR6bS05LTEzYS41LjUgMCAwMS41LjVMNS45OTkgN0g5VjQuNWEuNS41IDAgMDEuNS0uNWg0YS41LjUgMCAwMS41LjV2OWEuNS41IDAgMTEtMSAwVjdoLTN2Ni41YS41LjUgMCAwMS0uNDEuNDkyTDkuNSAxNGEuNS41IDAgMDEtLjUtLjVWMTBINnYzLjVhLjUuNSAwIDAxLS45OTIuMDlMNSAxMy41VjZIMnY3LjVhLjUuNSAwIDExLTEgMHYtMTFhLjUuNSAwIDAxLjUtLjVoNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzQmFyVmVydGljYWxTdGFja2VkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNHYXVnZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNHYXVnZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyLjg3NyA1Ljg0N2wtMS4wMiAxLjAyYS41LjUgMCAwMS0uNzA4LS43MDdsMS4xLTEuMDk5Yy0uMDUtLjA1My0uMS0uMTA2LS4xNTItLjE1N0E2LjQ3MSA2LjQ3MSAwIDAwOCAzLjAxOVY0LjVhLjUuNSAwIDAxLTEgMFYzLjAxOWE2LjQ3IDYuNDcgMCAwMC00LjI2MSAyLjA1NWwxLjA3IDEuMDcxYS41LjUgMCAwMS0uNzA2LjcwN2wtLjk5LS45OUE2LjQ2IDYuNDYgMCAwMDEuMDE4IDEwSDIuNWEuNS41IDAgMTEwIDFIMS4xNzRjLjA4My4zNTMuMTk2LjY5Ny4zMzcgMS4wM2EuNS41IDAgMTEtLjkyMi4zOUE3LjQ4NyA3LjQ4NyAwIDAxMCA5LjVhNy40ODMgNy40ODMgMCAwMTIuMTk3LTUuMzA0QTcuNDg3IDcuNDg3IDAgMDE3LjUgMmE3LjQ4NyA3LjQ4NyAwIDAxNS4zMDQgMi4xOTdBNy40ODMgNy40ODMgMCAwMTE1IDkuNWE3LjQ4NyA3LjQ4NyAwIDAxLS41OSAyLjkyLjUuNSAwIDAxLS45Mi0uMzljLjE0LS4zMzMuMjUzLS42NzcuMzM2LTEuMDNIMTIuNWEuNS41IDAgMTEwLTFoMS40ODFhNi40ODMgNi40ODMgMCAwMC0xLjEwNC00LjE1M3ptLTYuMDQxIDUuMzE3YS45OTMuOTkzIDAgMDEtLjAxLTEuNDA0Yy4zODQtLjM4NSAyLjg4Mi0yLjAwMiAzLjE0OS0xLjczNS4yNjcuMjY3LTEuMzUgMi43NjUtMS43MzUgMy4xNWEuOTkzLjk5MyAwIDAxLTEuNDA0LS4wMXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzR2F1Z2U7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc0dvYWwgPSBmdW5jdGlvbiBFdWlJY29uVmlzR29hbChfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjcyNSAzLjY1M2E2IDYgMCAwMTIuODQ3IDcuNTc2LjUuNSAwIDAxLS45MjgtLjM3MiA1IDUgMCAxMC05LjI5My0uMDE0LjUuNSAwIDAxLS4yMTguNjE5TDEuMzkgMTIuNDdhLjUuNSAwIDAxLS43MDgtLjIzQTcuOTkgNy45OSAwIDAxMCA5YTggOCAwIDAxMTEuMjEyLTcuMzI5LjUuNSAwIDAxLjIzNC43MDRsLS43MjEgMS4yNzh6bS0uOTMzLS4zOGwuNS0uODg5YTcgNyAwIDAwLTguOTAyIDguOTNsLjg4Ni0uNTExYTYgNiAwIDAxNy41MTYtNy41M3pNNi43MyA5LjQ2N2ExLjc1IDEuNzUgMCAxMTIuNTM5IDAgMiAyIDAgMTEtMi41MzkgMHpNOCAxMi4wMTNhMSAxIDAgMTAwLTIgMSAxIDAgMDAwIDJ6bTAtM2EuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzR29hbDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzTGluZSA9IGZ1bmN0aW9uIEV1aUljb25WaXNMaW5lKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIuNjU0IDMuNDhjLjI0OC4yMjUuNTUyLjM4OS44ODguNDY3TDExLjI0IDkuNDNhMS45OSAxLjk5IDAgMDAtLjkxNS0uNDA0bDIuMzMtNS41NDd6TTkuMTQ2IDkuMTlhMi4wMDggMi4wMDggMCAwMC0uNzY5LjY0bC0xLjU3Mi0yYy4zMTEtLjEzNi41ODEtLjM1Ljc4NS0uNjE4bDEuNTU2IDEuOTc4ek01LjU4MSA3Ljk1NmwtMi4xMzQgNC4yNjhhLjUuNSAwIDAxLS44OTQtLjQ0OGwyLjEzNC00LjI2OGMuMjUuMjIuNTU3LjM3Ni44OTQuNDQ4ek0xIDE1aDEzLjVhLjUuNSAwIDExMCAxSC41YS41LjUgMCAwMS0uNS0uNXYtMTRhLjUuNSAwIDAxMSAwVjE1em01LThhMSAxIDAgMTEwLTIgMSAxIDAgMDEwIDJ6bTQgNWExIDEgMCAxMTAtMiAxIDEgMCAwMTAgMnptNC05YTEgMSAwIDExMC0yIDEgMSAwIDAxMCAyelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNMaW5lOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25WaXNNYXBDb29yZGluYXRlID0gZnVuY3Rpb24gRXVpSWNvblZpc01hcENvb3JkaW5hdGUoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03LjUgMTVDNS43NyAxNSAyIDkuOTcgMiA2LjU5NSAyIDMuNTA3IDQuNDYgMSA3LjUgMVMxMyAzLjUwNyAxMyA2LjU5NUMxMyA5Ljk3IDkuMjMgMTUgNy41IDE1em0wLTFjLjI4NiAwIDEuNDgtMS4wNDQgMi40NTktMi4zNUMxMS4yMTkgOS45NjkgMTIgOC4xNTMgMTIgNi41OTYgMTIgNC4wNTUgOS45ODMgMiA3LjUgMlMzIDQuMDU1IDMgNi41OTVjMCAxLjU1Ny43OCAzLjM3MyAyLjA0MSA1LjA1NkM2LjAyIDEyLjk1NiA3LjIxNCAxNCA3LjUgMTR6bTAtNC45OTZhMi41IDIuNSAwIDExMC01IDIuNSAyLjUgMCAwMTAgNXptMC0xYTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01hcENvb3JkaW5hdGU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc01hcFJlZ2lvbiA9IGZ1bmN0aW9uIEV1aUljb25WaXNNYXBSZWdpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUgMi4zMDl2OC42OWEuNDk5LjQ5OSAwIDAxLS4wMzIuMTc2TDkuNSAxMi42OTFWMy44MDlsLTMtMS41em0tMS0uMDRMMiAzLjgyNXY4LjkwNmwzLjUyNy0xLjU2OGEuNS41IDAgMDEtLjAyNy0uMTY0VjIuMjd6bS4yNzQtMS4yMTZhLjQ5OC40OTggMCAwMS40NzEuMDFsMy43NjggMS44ODQgNC4yODQtMS45MDRBLjUuNSAwIDAxMTUgMS41djEwYS41LjUgMCAwMS0uMjk3LjQ1N2wtNC41IDJhLjUuNSAwIDAxLS40MjctLjAxbC0zLjc4OS0xLjg5NC00LjI4MyAxLjkwNGEuNS41IDAgMDEtLjcwMy0uNDU3di0xMGEuNS41IDAgMDEuMjk3LS40NTdsNC40NzYtMS45OXpNMTAuNSAzLjgyNXY4LjkwNmwzLjUtMS41NTZWMi4yN2wtMy41IDEuNTU2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNNYXBSZWdpb247IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc01ldHJpYyA9IGZ1bmN0aW9uIEV1aUljb25WaXNNZXRyaWMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUzMiA3LjM0YTIuMTYxIDIuMTYxIDAgMTEyLjkzNiAwIDIuNzQ2IDIuNzQ2IDAgMTEtMi45MzYgMHpNMiAwaDEyYTIgMiAwIDAxMiAydjEyYTIgMiAwIDAxLTIgMkgyYTIgMiAwIDAxLTItMlYyYTIgMiAwIDAxMi0yem0wIDFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjJhMSAxIDAgMDAtMS0xSDJ6bTYgNS45MTVhMS4xNjEgMS4xNjEgMCAxMDAtMi4zMjIgMS4xNjEgMS4xNjEgMCAwMDAgMi4zMjJ6bTAgNC40OTJhMS43NDYgMS43NDYgMCAxMDAtMy40OTIgMS43NDYgMS43NDYgMCAwMDAgMy40OTJ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc01ldHJpYzsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzUGllID0gZnVuY3Rpb24gRXVpSWNvblZpc1BpZShfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuNSA5YS41LjUgMCAwMS0uNS0uNVYzLjAyM0E1LjUgNS41IDAgMTAxMS45NzggOUg2LjV6TTcgOGg1LjVhLjUuNSAwIDAxLjUuNUE2LjUgNi41IDAgMTE2LjUgMmEuNS41IDAgMDEuNS41Vjh6bTItNi45NzJWNmg0Ljk3MkMxMy42OTYgMy41NTIgMTEuNDQ4IDEuMzA0IDkgMS4wMjh6TTE0LjUgN2gtNmEuNS41IDAgMDEtLjUtLjV2LTZhLjUuNSAwIDAxLjUtLjVDMTEuODUzIDAgMTUgMy4xNDcgMTUgNi41YS41LjUgMCAwMS0uNS41ek02LjE0NiA4Ljg1NGEuNS41IDAgMTEuNzA4LS43MDhsNCA0YS41LjUgMCAwMS0uNzA4LjcwOGwtNC00elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNQaWU7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc1RhYmxlID0gZnVuY3Rpb24gRXVpSWNvblZpc1RhYmxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgM3YxMWEyIDIgMCAwMS0yIDJIMmEyIDIgMCAwMS0yLTJWMmEyIDIgMCAwMTItMmgxMmEyIDIgMCAwMTIgMnYxem0tMSAwVjJhMSAxIDAgMDAtMS0xSDJhMSAxIDAgMDAtMSAxdjFoMTR6bTAgMUgxdjEwYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjR6TTQuNSA2YS41LjUgMCAwMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAwMTAtMWg2em0tOSAzYS41LjUgMCAwMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAwMTAtMWg2em0tOSAzYS41LjUgMCAxMTAgMUgyLjQ5NmEuNS41IDAgMTEwLTFINC41em05IDBhLjUuNSAwIDExMCAxaC02YS41LjUgMCAxMTAtMWg2elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUYWJsZTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGFnQ2xvdWQgPSBmdW5jdGlvbiBFdWlJY29uVmlzVGFnQ2xvdWQoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjUgOS4wNDdhLjUuNSAwIDEwMCAxaDEzYS41LjUgMCAwMDAtMWgtMTN6bTAtMWgxM2ExLjUgMS41IDAgMDEwIDNoLTEzYTEuNSAxLjUgMCAwMTAtM3pNMTAgMTNhLjUuNSAwIDExMCAxSDRhLjUuNSAwIDExMC0xaDZ6TTguMDAxIDIuMDE1YS41LjUgMCAxMS0uMDAyIDFsLTUtLjAxNWEuNS41IDAgMTEuMDAzLTFsNSAuMDE1ek0xNCA1YS41LjUgMCAxMTAgMUg2YS41LjUgMCAwMTAtMWg4elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUYWdDbG91ZDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGV4dCA9IGZ1bmN0aW9uIEV1aUljb25WaXNUZXh0KF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41IDV2NmgyYS41LjUgMCAxMTAgMWgtNWEuNS41IDAgMTEwLTFoMlY1SDV2LjVhLjUuNSAwIDAxLTEgMHYtMWEuNS41IDAgMDEuNS0uNWg3YS41LjUgMCAwMS41LjUxbC0uMDIxIDFhLjUuNSAwIDExLTEtLjAybC4wMS0uNDlIOC41ek0xIDE1aDEuNWEuNS41IDAgMTEwIDFoLTJhLjUuNSAwIDAxLS41LS41di0xLjk5NmEuNS41IDAgMDExIDBWMTV6TTEgMXYxLjQ5N2EuNS41IDAgMTEtMSAwVi41QS41LjUgMCAwMS41IDBoMmEuNS41IDAgMDEwIDFIMXptMTQgMGgtMS40OTVhLjUuNSAwIDAxMC0xSDE1LjVhLjUuNSAwIDAxLjUuNXYyYS41LjUgMCAxMS0xIDBWMXptMCAxNHYtMS41YS41LjUgMCAxMTEgMHYyYS41LjUgMCAwMS0uNS41aC0yYS41LjUgMCAxMTAtMUgxNXpNMCA2LjVhLjUuNSAwIDAxMSAwdjNhLjUuNSAwIDAxLTEgMHYtM3pNOS41IDBhLjUuNSAwIDAxMCAxaC0zYS41LjUgMCAwMTAtMWgzek0xNSA2LjVhLjUuNSAwIDExMSAwdjNhLjUuNSAwIDExLTEgMHYtM3pNOS41IDE1YS41LjUgMCAxMTAgMWgtM2EuNS41IDAgMTEwLTFoM3pcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVGV4dDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVGltZWxpb24gPSBmdW5jdGlvbiBFdWlJY29uVmlzVGltZWxpb24oX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE2LFxuICAgIGhlaWdodDogMTYsXG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC44ODQgMS44MDJjMS4xNzEtLjMwOSAyLjIyLS4yNCAzLjEwMy4wNy4yOTUuMTA0LjUwNy4yMTIuNjMxLjI5MmwuMTY0LjEwNi4wNDguMTg4Yy4yNzggMS4wNjYuMiAyLjE3NS0uMDkxIDMuMjNhNi43MjggNi43MjggMCAwMS0uMTk0LjU5OGMuMDM1LjEyLjA3NC4yNzMuMTEyLjQ1NC4yMjcgMS4wNjUuMjQ3IDIuMTkzLS4wOCAzLjI2N2E0Ljg1NSA0Ljg1NSAwIDAxLS41MzQgMS4xNzVjLS4zMjQuNTE0LS43Ljk1NC0xLjExNyAxLjMyMy0uODA2LjcxMi0xLjYxNiAxLjA3MS0yLjIzNSAxLjIwNi0uMTQuMTc5LS4zNDYuMzgxLS42MjkuNTc4LS42NDMuNDQ3LTEuNDkzLjcxMS0yLjU2MS43MTEtMS4wNyAwLTEuOTItLjI2NC0yLjU2My0uNzExYTIuODc0IDIuODc0IDAgMDEtLjYyOS0uNTc4Yy0uNjE4LS4xMzQtMS40MjgtLjQ5My0yLjIzMi0xLjIwMy0uNDE5LS4zNy0uNzk2LS44MS0xLjEyLTEuMzI2YTQuODU1IDQuODU1IDAgMDEtLjUzNC0xLjE3NUMuMDk2IDguOTMzLjExNiA3LjgwNS4zNDMgNi43NGE2Ljc0IDYuNzQgMCAwMS4xMTItLjQ1NCA2LjcyOCA2LjcyOCAwIDAxLS4xOTQtLjU5OEMtLjAzIDQuNjMzLS4xMDggMy41MjQuMTcgMi40NThsLjA0OC0uMTg4LjE2NC0uMTA2Yy4xMjQtLjA4LjMzNi0uMTg4LjYzLS4yOTEuODg1LS4zMSAxLjkzMy0uMzggMy4xMDQtLjA3LjE4NC0uMTA4LjQzNC0uMjMuNzQ4LS4zNDhDNS42MTYgMS4xNyA2LjQ5NyAxIDcuNTAxIDFjMS4wMDIgMCAxLjg4My4xNyAyLjYzNC40NTUuMzE1LjExOS41NjUuMjQuNzUuMzQ3em0zLjAyNyAxLjExNmEzLjEzIDMuMTMgMCAwMC0uMjU1LS4xMDJjLS43NDktLjI2My0xLjY2LS4zMDktMi43MDguMDA3bC0uMjM4LjA3Mi0uMjAxLS4xNDdjLS4xMS0uMDgtLjM1NC0uMjE3LS43MjgtLjM1OEM5LjE0IDIuMTQ3IDguMzggMiA3LjUwMSAyYy0uODggMC0xLjY0MS4xNDctMi4yODMuMzktLjM3My4xNDEtLjYxNy4yNzgtLjcyNy4zNThsLS4yLjE0Ny0uMjQtLjA3MmMtMS4wNDgtLjMxNi0xLjk1OC0uMjctMi43MDctLjAwN2EzLjEzIDMuMTMgMCAwMC0uMjU1LjEwMmMtLjE2Ny44MTItLjA5NCAxLjY3NC4xMzYgMi41MDMuMDg0LjMwMy4xNjYuNTI0LjIxNy42MzdsLjA4Mi4xODItLjA2Ni4xOWMtLjAzMi4wOS0uMDg0LjI3LS4xMzcuNTE4LS4xOTUuOTE0LS4yMTIgMS44OC4wNTkgMi43NjcuMS4zMzMuMjQxLjY0NS40MjMuOTM1LjI3My40MzQuNTg4LjgwMS45MzYgMS4xMDguNDM0LjM4My44OTguNjU1IDEuMzYuODM0LjI3LjEwNS40NzQuMTU1LjU3NS4xN2wuMjQ4LjAzNC4xMi4yMmMuMDUxLjA5MS4xOTkuMjY2LjQ2Ni40NTIuNDc2LjMzIDEuMTI3LjUzMiAxLjk5My41MzIuODY1IDAgMS41MTYtLjIwMiAxLjk5LS41MzIuMjY4LS4xODYuNDE2LS4zNi40NjYtLjQ1MmwuMTIxLS4yMi4yNDgtLjAzNGMuMTAxLS4wMTUuMzA1LS4wNjUuNTc2LS4xNy40NjItLjE4LjkyNy0uNDUyIDEuMzYyLS44MzYuMzQ3LS4zMDcuNjYtLjY3NC45MzMtMS4xMDcuMTgyLS4yOS4zMjItLjYwMS40MjMtLjkzNC4yNzEtLjg4Ny4yNTQtMS44NTMuMDYtMi43NjdhNC41OTcgNC41OTcgMCAwMC0uMTM4LS41MTlsLS4wNjYtLjE4OS4wODItLjE4MmMuMDUtLjExMy4xMzMtLjMzNC4yMTctLjYzNy4yMy0uODI5LjMwMy0xLjY5MS4xMzYtMi41MDN6TTUgNS4wMDhjLjAwNC4xODEtLjA0OC4zNjQtLjI2NC42MTYtLjQyOC40OTgtLjk4NS40ODgtMS40MzEuMDQ5LS4zMjYtLjMyMS0uMzI1LS43MzItLjI5LTEuMDQ3LjA4NS0uNzYuNzQ4LS43MjIgMS4yNjItLjQ0LjQ4Ni4yNy43MTcuNjE2LjcyMy44MjN6bTUgMGMuMDA2LS4yMDYuMjM3LS41NTMuNzI0LS44MjEuNTE0LS4yODMgMS4xNzYtLjMyMSAxLjI2LjQ0LjAzNi4zMTQuMDM4LjcyNS0uMjg4IDEuMDQ2LS40NDYuNDQtMS4wMDUuNDQ5LTEuNDMzLS4wNS0uMjE3LS4yNS0uMjY3LS40MzQtLjI2My0uNjE0ek03LjUgOGMtLjUwMyAwLS45NzYtLjI0LTEuMzc1LS42NzItLjM5OC0uNDMyLS41OTItMS4xMjYgMC0xLjUyOC4zODQtLjI1OSAxLjA4Mi0uMyAxLjM3NS0uMy4yOTQgMCAuOTkxLjA0MSAxLjM3NS4zLjU5My40MDIuMzk3IDEuMDk2IDAgMS41MjhDOC40NzcgNy43NiA4LjAwMiA4IDcuNSA4em0wIDFjLjgwOCAwIDIuNjU2Ljk5NCAyLjQ5IDIuMDc0LS4xNTMuOTkzLTIuMTE0LjkyNS0yLjQ5LjkyNS0uMzc0IDAtMi4zMzYuMDY4LTIuNDktLjkyNUM0Ljg0NSA5Ljk5NCA2LjY5MyA5IDcuNSA5elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25WaXNUaW1lbGlvbjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uVmlzVmVnYSA9IGZ1bmN0aW9uIEV1aUljb25WaXNWZWdhKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMi40MTQgOC4wMzZMNC44OSAxMC41MWEuNS41IDAgMDEtLjcwNy43MDhMMS4zNTQgOC4zODlhLjUuNSAwIDAxMC0uNzA3bDIuODI4LTIuODI4YS41LjUgMCAxMS43MDcuNzA3TDIuNDE0IDguMDM2em04Ljc2OCAyLjQ3NGwyLjQ3NS0yLjQ3NC0yLjQ3NS0yLjQ3NWEuNS41IDAgMDEuNzA3LS43MDdsMi44MjkgMi44MjhhLjUuNSAwIDAxMCAuNzA3bC0yLjgyOSAyLjgyOWEuNS41IDAgMTEtLjcwNy0uNzA4ek04LjU1OSAyLjUwNmEuNS41IDAgMDEuOTgxLjE5TDcuNDQxIDEzLjQ5NGEuNS41IDAgMDEtLjk4MS0uMTlMOC41NTkgMi41MDZ6XCJcbiAgfSkpO1xufTtcblxuZXhwb3J0IHZhciBpY29uID0gRXVpSWNvblZpc1ZlZ2E7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ0aXRsZVwiLCBcInRpdGxlSWRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEUuIERPIE5PVCBNT0RJRlkgTUFOVUFMTFkuIEBzZWUgc2NyaXB0cy9jb21waWxlLWljb25zLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgRXVpSWNvblZpc1Zpc3VhbEJ1aWxkZXIgPSBmdW5jdGlvbiBFdWlJY29uVmlzVmlzdWFsQnVpbGRlcihfcmVmKSB7XG4gIHZhciB0aXRsZSA9IF9yZWYudGl0bGUsXG4gICAgICB0aXRsZUlkID0gX3JlZi50aXRsZUlkLFxuICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHRpdGxlSWRcbiAgfSwgcHJvcHMpLCB0aXRsZSA/IF9fX0Vtb3Rpb25KU1goXCJ0aXRsZVwiLCB7XG4gICAgaWQ6IHRpdGxlSWRcbiAgfSwgdGl0bGUpIDogbnVsbCwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuODM3IDdjLjExLjkzLjE2NSAxLjg4Ni4xNjUgMi44NjlWMTMuNWEuNS41IDAgMTEtMSAwVjkuODY5QTIzLjMgMjMuMyAwIDAwOC44MyA3SDcuMjljLS4xOTUgMS4wNC0uMjkyIDEuOTg1LS4yOTIgMi44MzVWMTMuNWEuNS41IDAgMTEtMSAwVjkuODM1YzAtLjg2NC4wOTItMS44MDkuMjc2LTIuODM1SDIuNWEuNS41IDAgMDEtLjQ5NS0uNTdjLjI4NS0yLjAyMyAxLjYyNi0zLjM1OCAzLjkzMS0zLjk2IDEuOTY3LS41MTQgNC4yMi0uNjA2IDYuNzU2LS4yNzhBMS41IDEuNSAwIDAxMTQgMy42NzlWNS41QTEuNSAxLjUgMCAwMTEyLjUgN0g5LjgzN3ptLS41NjktMUgxMi41YS41LjUgMCAwMC41LS41VjMuNjhhLjUuNSAwIDAwLS40MzYtLjQ5N2MtMi40MTYtLjMxMS00LjU0LS4yMjUtNi4zNzUuMjU0QzQuNDk0IDMuODggMy40OTEgNC43MjQgMy4xMTcgNkg5LjI2OHpNMiAxMHYzLjVhLjUuNSAwIDExLTEgMHYtNGEuNS41IDAgMDEuNS0uNWgzYS41LjUgMCAwMS41LjV2NGEuNS41IDAgMTEtMSAwVjEwSDJ6bTEwIDMuNWEuNS41IDAgMTEtMSAwdi0yYS41LjUgMCAwMS41LS41aDNhLjUuNSAwIDAxLjUuNXYyYS41LjUgMCAxMS0xIDBWMTJoLTJ2MS41ek0xLjAxNiAxNi4wMjZhLjUuNSAwIDAxMC0xSDE1YS41LjUgMCAxMTAgMUgxLjAxNnpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uVmlzVmlzdWFsQnVpbGRlcjsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uV29yZFdyYXAgPSBmdW5jdGlvbiBFdWlJY29uV29yZFdyYXAoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgdGl0bGVJZCA9IF9yZWYudGl0bGVJZCxcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICBcImFyaWEtbGFiZWxsZWRieVwiOiB0aXRsZUlkXG4gIH0sIHByb3BzKSwgdGl0bGUgPyBfX19FbW90aW9uSlNYKFwidGl0bGVcIiwge1xuICAgIGlkOiB0aXRsZUlkXG4gIH0sIHRpdGxlKSA6IG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDNoMTJ2MUgyVjN6bTAgOGg2djFIMnYtMXpcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgN2g5LjV2LjVWN2guMDM5bC4wODMuMDA1YTIuOTU4IDIuOTU4IDAgMDExLjEwMi4yOThjLjMwOS4xNTQuNjMzLjM5NC44OC43NjMuMjQ4LjM3My4zOTYuODQ3LjM5NiAxLjQzNCAwIC41ODgtLjE0OCAxLjA2MS0uMzk2IDEuNDM0YTIuMjU3IDIuMjU3IDAgMDEtLjg4Ljc2MyAyLjk1NyAyLjk1NyAwIDAxLTEuMTg1LjMwMmgtLjAyNWwtLjAwOS4wMDFoLS4wMDNzLS4wMDIgMC0uMDAyLS41di41SDExdjFsLTItMS41IDItMS41djFoLjUwNmwuMDQ0LS4wMDNhMS45NTkgMS45NTkgMCAwMC43MjYtLjE5NWMuMTkxLS4wOTUuMzY3LS4yMy40OTUtLjQyMy4xMjctLjE5LjIyOS0uNDY2LjIyOS0uODc5cy0uMTAyLS42ODktLjIyOS0uODc5YTEuMjU2IDEuMjU2IDAgMDAtLjQ5NS0uNDI0IDEuOTU4IDEuOTU4IDAgMDAtLjc3LS4xOTdIMlY3elwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Xb3JkV3JhcDsiLCAidmFyIF9leGNsdWRlZCA9IFtcInRpdGxlXCIsIFwidGl0bGVJZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbi8vIFRISVMgSVMgQSBHRU5FUkFURUQgRklMRS4gRE8gTk9UIE1PRElGWSBNQU5VQUxMWS4gQHNlZSBzY3JpcHRzL2NvbXBpbGUtaWNvbnMuanNcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBFdWlJY29uV29yZFdyYXBEaXNhYmxlZCA9IGZ1bmN0aW9uIEV1aUljb25Xb3JkV3JhcERpc2FibGVkKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB3aWR0aDogMTYsXG4gICAgaGVpZ2h0OiAxNixcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMy41TDEyIDJ2MUgydjFoMTB2MWwyLTEuNXpNMTIgOVY4SDJWN2gxMFY2bDIgMS41TDEyIDl6bTAgM3YxbDItMS41LTItMS41djFIMnYxaDEwelwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgaWNvbiA9IEV1aUljb25Xb3JkV3JhcERpc2FibGVkOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1widGl0bGVcIiwgXCJ0aXRsZUlkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gVEhJUyBJUyBBIEdFTkVSQVRFRCBGSUxFLiBETyBOT1QgTU9ESUZZIE1BTlVBTExZLiBAc2VlIHNjcmlwdHMvY29tcGlsZS1pY29ucy5qc1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxudmFyIEV1aUljb25XcmVuY2ggPSBmdW5jdGlvbiBFdWlJY29uV3JlbmNoKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIHRpdGxlSWQgPSBfcmVmLnRpdGxlSWQsXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2LFxuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogdGl0bGVJZFxuICB9LCBwcm9wcyksIHRpdGxlID8gX19fRW1vdGlvbkpTWChcInRpdGxlXCIsIHtcbiAgICBpZDogdGl0bGVJZFxuICB9LCB0aXRsZSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi45MTggOS43NDZsNC41MzcgNC41MzdhMiAyIDAgMTAyLjgyOC0yLjgyOWwtMy4xNTctMy4xNTZhLjUuNSAwIDAxLjcwOC0uNzA4bDMuMTU2IDMuMTU3YTMgMyAwIDExLTQuMjQzIDQuMjQzbC00Ljk0OS00Ljk1YTUuMDAxIDUuMDAxIDAgMDEtNS4yMi03LjEwNi41LjUgMCAwMS44MDUtLjEzOEwzLjY3NiA1LjA5YTEgMSAwIDEwMS40MTUtMS40MTRMMi43OTcgMS4zODJhLjUuNSAwIDAxLjEzOC0uODA1IDUuMDAxIDUuMDAxIDAgMTEzLjk4MyA5LjE2OXpNMS4yMjYgNC4wNTRhNC4wMDIgNC4wMDIgMCAwMDYuNjkzIDMuODY1IDQgNCAwIDAwLTMuODY1LTYuNjkzbDEuNzQ0IDEuNzQzYTIgMiAwIDExLTIuODI5IDIuODI4TDEuMjI2IDQuMDU0em0xMC4yMjkgOC44MTRhMSAxIDAgMTExLjQxNC0xLjQxNCAxIDEgMCAwMS0xLjQxNCAxLjQxNHpcIlxuICB9KSk7XG59O1xuXG5leHBvcnQgdmFyIGljb24gPSBFdWlJY29uV3JlbmNoOyIsICJpbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTAgZnJvbSAnLi9hc3NldHMvYWNjZXNzaWJpbGl0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEgZnJvbSAnLi9hc3NldHMvYWdncmVnYXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMiBmcm9tICcuL2Fzc2V0cy9hbGVydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZUV2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNCBmcm9tICcuL2Fzc2V0cy9hbmFseXplX2V2ZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNSBmcm9tICcuL2Fzc2V0cy9hbm5vdGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNiBmcm9tICcuL2Fzc2V0cy9hcG1fdHJhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3IGZyb20gJy4vYXNzZXRzL2FwcF9hZGRfZGF0YS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTggZnJvbSAnLi9hc3NldHMvYXBwX2FkdmFuY2VkX3NldHRpbmdzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOSBmcm9tICcuL2Fzc2V0cy9hcHBfYWdlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMCBmcm9tICcuL2Fzc2V0cy9hcHBfYXBtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTEgZnJvbSAnLi9hc3NldHMvYXBwX2FwcF9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMiBmcm9tICcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMgZnJvbSAnLi9hc3NldHMvYXBwX2NhbnZhcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0IGZyb20gJy4vYXNzZXRzL2FwcF9jYXNlcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1IGZyb20gJy4vYXNzZXRzL2FwcF9jb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTYgZnJvbSAnLi9hc3NldHMvYXBwX2NvbnNvbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNyBmcm9tICcuL2Fzc2V0cy9hcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4IGZyb20gJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOSBmcm9tICcuL2Fzc2V0cy9hcHBfZGV2dG9vbHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMCBmcm9tICcuL2Fzc2V0cy9hcHBfZGlzY292ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMSBmcm9tICcuL2Fzc2V0cy9hcHBfZW1zLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIgZnJvbSAnLi9hc3NldHMvYXBwX2ZpbGViZWF0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMgZnJvbSAnLi9hc3NldHMvYXBwX2ZsZWV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQgZnJvbSAnLi9hc3NldHMvYXBwX2dpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1IGZyb20gJy4vYXNzZXRzL2FwcF9ncmFwaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2IGZyb20gJy4vYXNzZXRzL2FwcF9ncm9rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcgZnJvbSAnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4IGZyb20gJy4vYXNzZXRzL2FwcF9pbmRleF9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkgZnJvbSAnLi9hc3NldHMvYXBwX2luZGV4X3BhdHRlcm4uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMCBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEgZnJvbSAnLi9hc3NldHMvYXBwX2xlbnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMiBmcm9tICcuL2Fzc2V0cy9hcHBfbG9ncy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzIGZyb20gJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQgZnJvbSAnLi9hc3NldHMvYXBwX21ldHJpY2JlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNSBmcm9tICcuL2Fzc2V0cy9hcHBfbWV0cmljcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2IGZyb20gJy4vYXNzZXRzL2FwcF9tbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM3IGZyb20gJy4vYXNzZXRzL2FwcF9tb25pdG9yaW5nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzggZnJvbSAnLi9hc3NldHMvYXBwX25vdGVib29rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkgZnJvbSAnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MCBmcm9tICcuL2Fzc2V0cy9hcHBfcGlwZWxpbmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MSBmcm9tICcuL2Fzc2V0cy9hcHBfcmVjZW50bHlfdmlld2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIgZnJvbSAnLi9hc3NldHMvYXBwX3JlcG9ydGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzIGZyb20gJy4vYXNzZXRzL2FwcF9zYXZlZF9vYmplY3RzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQgZnJvbSAnLi9hc3NldHMvYXBwX3NlYXJjaF9wcm9maWxlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eV9hbmFseXRpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NyBmcm9tICcuL2Fzc2V0cy9hcHBfc3BhY2VzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDggZnJvbSAnLi9hc3NldHMvYXBwX3NxbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5IGZyb20gJy4vYXNzZXRzL2FwcF90aW1lbGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwIGZyb20gJy4vYXNzZXRzL2FwcF91cGdyYWRlX2Fzc2lzdGFudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxIGZyb20gJy4vYXNzZXRzL2FwcF91cHRpbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MiBmcm9tICcuL2Fzc2V0cy9hcHBfdXNlcnNfcm9sZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MyBmcm9tICcuL2Fzc2V0cy9hcHBfdmlzdWFsaXplLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQgZnJvbSAnLi9hc3NldHMvYXBwX3dhdGNoZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NSBmcm9tICcuL2Fzc2V0cy9hcHBfd29ya3BsYWNlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2IGZyb20gJy4vYXNzZXRzL2FwcHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NyBmcm9tICcuL2Fzc2V0cy9hcnJvd0VuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4IGZyb20gJy4vYXNzZXRzL2Fycm93U3RhcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OSBmcm9tICcuL2Fzc2V0cy9hcnJvd19kb3duLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAgZnJvbSAnLi9hc3NldHMvYXJyb3dfbGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxIGZyb20gJy4vYXNzZXRzL2Fycm93X3JpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIgZnJvbSAnLi9hc3NldHMvYXJyb3dfdXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MyBmcm9tICcuL2Fzc2V0cy9hc3Rlcmlzay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0IGZyb20gJy4vYXNzZXRzL2JlYWtlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1IGZyb20gJy4vYXNzZXRzL2JlbGwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NiBmcm9tICcuL2Fzc2V0cy9iZWxsU2xhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NyBmcm9tICcuL2Fzc2V0cy9ib2x0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjggZnJvbSAnLi9hc3NldHMvYm94ZXNfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5IGZyb20gJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAgZnJvbSAnLi9hc3NldHMvYnJhbmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzEgZnJvbSAnLi9hc3NldHMvYnJhbmNoVXNlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyIGZyb20gJy4vYXNzZXRzL2Jyb29tLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMgZnJvbSAnLi9hc3NldHMvYnJ1c2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NCBmcm9tICcuL2Fzc2V0cy9idWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NSBmcm9tICcuL2Fzc2V0cy9idWxsc2V5ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2IGZyb20gJy4vYXNzZXRzL2NhbGVuZGFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcgZnJvbSAnLi9hc3NldHMvY2hlY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OCBmcm9tICcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkgZnJvbSAnLi9hc3NldHMvY2hlZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MCBmcm9tICcuL2Fzc2V0cy9jbG9jay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxIGZyb20gJy4vYXNzZXRzL2Nsb3VkRHJpenpsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyIGZyb20gJy4vYXNzZXRzL2Nsb3VkU3Rvcm15LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMgZnJvbSAnLi9hc3NldHMvY2xvdWRTdW5ueS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0IGZyb20gJy4vYXNzZXRzL2NsdXN0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NSBmcm9tICcuL2Fzc2V0cy9jb2xvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2IGZyb20gJy4vYXNzZXRzL2NvbXB1dGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NyBmcm9tICcuL2Fzc2V0cy9jb25zb2xlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODggZnJvbSAnLi9hc3NldHMvY29udGFpbmVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MSBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QmVsb3cuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MiBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5V2l0aGluLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTMgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk0IGZyb20gJy4vYXNzZXRzL2NvbnRyb2xzX3ZlcnRpY2FsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTUgZnJvbSAnLi9hc3NldHMvY29weS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk2IGZyb20gJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTcgZnJvbSAnLi9hc3NldHMvY3Jvc3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5OCBmcm9tICcuL2Fzc2V0cy9jcm9zc0luQUNpcmNsZUZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTk5IGZyb20gJy4vYXNzZXRzL2Nyb3NzaGFpcnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDAgZnJvbSAnLi9hc3NldHMvY3VycmVuY3kuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDEgZnJvbSAnLi9hc3NldHMvY3V0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAyIGZyb20gJy4vYXNzZXRzL2RhdGFiYXNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTAzIGZyb20gJy4vYXNzZXRzL2Rlc2t0b3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDQgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDUgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRFZGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA2IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50YXRpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMDcgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTA4IGZyb20gJy4vYXNzZXRzL2RvdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEwOSBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTAgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMSBmcm9tICcuL2Fzc2V0cy9kb3dubG9hZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExMyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMTQgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE1IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTE3IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExOCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTExOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjAgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIxIGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjIgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTIzIGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjQgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyNiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjcgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2JvbGQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMjggZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEyOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzMiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTMzIGZyb20gJy4vYXNzZXRzL2VkaXRvcl9saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTM0IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzUgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3JlZG8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzYgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3N0cmlrZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzNyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxMzggZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTEzOSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDEgZnJvbSAnLi9hc3NldHMvZW1haWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDIgZnJvbSAnLi9hc3NldHMvZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNDMgZnJvbSAnLi9hc3NldHMvZXFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ0IGZyb20gJy4vYXNzZXRzL2VyYXNlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NSBmcm9tICcuL2Fzc2V0cy9leGl0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ2IGZyb20gJy4vYXNzZXRzL2V4cGFuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0NyBmcm9tICcuL2Fzc2V0cy9leHBhbmRNaW5pLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTQ4IGZyb20gJy4vYXNzZXRzL2V4cG9ydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE0OSBmcm9tICcuL2Fzc2V0cy9leWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTAgZnJvbSAnLi9hc3NldHMvZXllX2Nsb3NlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MSBmcm9tICcuL2Fzc2V0cy9mYWNlX2hhcHB5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTUyIGZyb20gJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1MyBmcm9tICcuL2Fzc2V0cy9mYWNlX3NhZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NCBmcm9tICcuL2Fzc2V0cy9maWx0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNTUgZnJvbSAnLi9hc3NldHMvZmxhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1NiBmcm9tICcuL2Fzc2V0cy9mb2xkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU3IGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jaGVjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE1OCBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTU5IGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MCBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfb3Blbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MSBmcm9tICcuL2Fzc2V0cy9mcmFtZU5leHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjIgZnJvbSAnLi9hc3NldHMvZnJhbWVQcmV2aW91cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2MyBmcm9tICcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NCBmcm9tICcuL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NSBmcm9tICcuL2Fzc2V0cy9mdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE2NiBmcm9tICcuL2Fzc2V0cy9nZWFyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTY3IGZyb20gJy4vYXNzZXRzL2dsYXNzZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjggZnJvbSAnLi9hc3NldHMvZ2xvYmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNjkgZnJvbSAnLi9hc3NldHMvZ3JhYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MCBmcm9tICcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzEgZnJvbSAnLi9hc3NldHMvZ3JpZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MiBmcm9tICcuL2Fzc2V0cy9oZWFydC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3MyBmcm9tICcuL2Fzc2V0cy9oZWF0bWFwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc0IGZyb20gJy4vYXNzZXRzL2hlbHAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzUgZnJvbSAnLi9hc3NldHMvaG9tZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE3NiBmcm9tICcuL2Fzc2V0cy9pSW5DaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzcgZnJvbSAnLi9hc3NldHMvaW1hZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxNzggZnJvbSAnLi9hc3NldHMvaW1wb3J0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTc5IGZyb20gJy4vYXNzZXRzL2luZGV4X2Nsb3NlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTgwIGZyb20gJy4vYXNzZXRzL2luZGV4X2VkaXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODEgZnJvbSAnLi9hc3NldHMvaW5kZXhfZmx1c2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODIgZnJvbSAnLi9hc3NldHMvaW5kZXhfbWFwcGluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4MyBmcm9tICcuL2Fzc2V0cy9pbmRleF9vcGVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTg0IGZyb20gJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODUgZnJvbSAnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODYgZnJvbSAnLi9hc3NldHMvaW5wdXRPdXRwdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODcgZnJvbSAnLi9hc3NldHMvaW5zcGVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE4OCBmcm9tICcuL2Fzc2V0cy9pbnZlcnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxODkgZnJvbSAnLi9hc3NldHMvaXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTAgZnJvbSAnLi9hc3NldHMva2V5Ym9hcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTEgZnJvbSAnLi9hc3NldHMva3FsX2ZpZWxkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTkyIGZyb20gJy4vYXNzZXRzL2txbF9mdW5jdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5MyBmcm9tICcuL2Fzc2V0cy9rcWxfb3BlcmFuZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTE5NCBmcm9tICcuL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTUgZnJvbSAnLi9hc3NldHMva3FsX3ZhbHVlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk2IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk3IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUxOTggZnJvbSAnLi9hc3NldHMvbGF5ZXJzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMTk5IGZyb20gJy4vYXNzZXRzL2xldHRlcmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwMCBmcm9tICcuL2Fzc2V0cy9saW5lRGFzaGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAxIGZyb20gJy4vYXNzZXRzL2xpbmVEb3R0ZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDIgZnJvbSAnLi9hc3NldHMvbGluZVNvbGlkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjAzIGZyb20gJy4vYXNzZXRzL2xpbmsuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMDQgZnJvbSAnLi9hc3NldHMvbGlzdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNSBmcm9tICcuL2Fzc2V0cy9saXN0X2FkZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIwNiBmcm9tICcuL2Fzc2V0cy9sb2NrLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA3IGZyb20gJy4vYXNzZXRzL2xvY2tPcGVuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA4IGZyb20gJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjA5IGZyb20gJy4vYXNzZXRzL2xvZ29fYXBhY2hlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEwIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBwX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMSBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIxMiBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjEzIGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTQgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZV9tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE1IGZyb20gJy4vYXNzZXRzL2xvZ29fYmVhdHMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTYgZnJvbSAnLi9hc3NldHMvbG9nb19idXNpbmVzc19hbmFseXRpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTcgZnJvbSAnLi9hc3NldHMvbG9nb19jZXBoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjE4IGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMTkgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZF9lY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjAgZnJvbSAnLi9hc3NldHMvbG9nb19jb2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjIxIGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjIgZnJvbSAnLi9hc3NldHMvbG9nb19jb3VjaGJhc2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjMgZnJvbSAnLi9hc3NldHMvbG9nb19kb2NrZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjQgZnJvbSAnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI1IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpYy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIyNiBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjcgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjI4IGZyb20gJy4vYXNzZXRzL2xvZ29fZW50ZXJwcmlzZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMjkgZnJvbSAnLi9hc3NldHMvbG9nb19ldGNkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMwIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjMxIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwX21vbm8uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzIgZnJvbSAnLi9hc3NldHMvbG9nb19naXRodWIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyMzMgZnJvbSAnLi9hc3NldHMvbG9nb19nbWFpbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNCBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvbGFuZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNSBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM2IGZyb20gJy4vYXNzZXRzL2xvZ29faGFwcm94eS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzNyBmcm9tICcuL2Fzc2V0cy9sb2dvX2libS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTIzOCBmcm9tICcuL2Fzc2V0cy9sb2dvX2libV9tb25vLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjM5IGZyb20gJy4vYXNzZXRzL2xvZ29fa2Fma2EuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDAgZnJvbSAnLi9hc3NldHMvbG9nb19raWJhbmEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDEgZnJvbSAnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQyIGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0MyBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ3N0YXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ0IGZyb20gJy4vYXNzZXRzL2xvZ29fbWFwcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NSBmcm9tICcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI0NiBmcm9tICcuL2Fzc2V0cy9sb2dvX21ldHJpY3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDcgZnJvbSAnLi9hc3NldHMvbG9nb19tb25nb2RiLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjQ4IGZyb20gJy4vYXNzZXRzL2xvZ29fbXlzcWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNDkgZnJvbSAnLi9hc3NldHMvbG9nb19uZ2lueC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1MCBmcm9tICcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTEgZnJvbSAnLi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUyIGZyb20gJy4vYXNzZXRzL2xvZ29fcGhwLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjUzIGZyb20gJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTQgZnJvbSAnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU1IGZyb20gJy4vYXNzZXRzL2xvZ29fcmFiYml0bXEuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTYgZnJvbSAnLi9hc3NldHMvbG9nb19yZWRpcy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI1NyBmcm9tICcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjU4IGZyb20gJy4vYXNzZXRzL2xvZ29fc2l0ZV9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNTkgZnJvbSAnLi9hc3NldHMvbG9nb19za2V0Y2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjAgZnJvbSAnLi9hc3NldHMvbG9nb19zbGFjay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MSBmcm9tICcuL2Fzc2V0cy9sb2dvX3VwdGltZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2MiBmcm9tICcuL2Fzc2V0cy9sb2dvX3dlYmhvb2suanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjMgZnJvbSAnLi9hc3NldHMvbG9nb193aW5kb3dzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY0IGZyb20gJy4vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI2NSBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjYgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaWYuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjcgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNjggZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjY5IGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcwIGZyb20gJy4vYXNzZXRzL21hZ25ldC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI3MSBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjcyIGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzMgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc0IGZyb20gJy4vYXNzZXRzL21hcF9tYXJrZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzUgZnJvbSAnLi9hc3NldHMvbWVtb3J5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjc2IGZyb20gJy4vYXNzZXRzL21lbnUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzcgZnJvbSAnLi9hc3NldHMvbWVudURvd24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzggZnJvbSAnLi9hc3NldHMvbWVudUxlZnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyNzkgZnJvbSAnLi9hc3NldHMvbWVudVJpZ2h0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjgwIGZyb20gJy4vYXNzZXRzL21lbnVVcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MSBmcm9tICcuL2Fzc2V0cy9tZXJnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MiBmcm9tICcuL2Fzc2V0cy9taW5pbWl6ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4MyBmcm9tICcuL2Fzc2V0cy9taW51cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NCBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODUgZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4NiBmcm9tICcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyODcgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4OCBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI4OSBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTAgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjkxIGZyb20gJy4vYXNzZXRzL21sX2RhdGFfdmlzdWFsaXplci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5MiBmcm9tICcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTMgZnJvbSAnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTQgZnJvbSAnLi9hc3NldHMvbW9iaWxlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk1IGZyb20gJy4vYXNzZXRzL21vb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUyOTYgZnJvbSAnLi9hc3NldHMvbmFtZXNwYWNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk3IGZyb20gJy4vYXNzZXRzL25lc3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTI5OCBmcm9tICcuL2Fzc2V0cy9ub2RlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMjk5IGZyb20gJy4vYXNzZXRzL251bWJlci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwMCBmcm9tICcuL2Fzc2V0cy9vZmZsaW5lLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAxIGZyb20gJy4vYXNzZXRzL29ubGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwMiBmcm9tICcuL2Fzc2V0cy9wYWNrYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzAzIGZyb20gJy4vYXNzZXRzL3BhZ2VTZWxlY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDQgZnJvbSAnLi9hc3NldHMvcGFnZXNTZWxlY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDUgZnJvbSAnLi9hc3NldHMvcGFpbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMDYgZnJvbSAnLi9hc3NldHMvcGFwZXJfY2xpcC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMwNyBmcm9tICcuL2Fzc2V0cy9wYXJ0aWFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA4IGZyb20gJy4vYXNzZXRzL3BhdXNlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzA5IGZyb20gJy4vYXNzZXRzL3BheW1lbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTAgZnJvbSAnLi9hc3NldHMvcGVuY2lsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzExIGZyb20gJy4vYXNzZXRzL3BlcmNlbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTIgZnJvbSAnLi9hc3NldHMvcGluLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzEzIGZyb20gJy4vYXNzZXRzL3Bpbl9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTQgZnJvbSAnLi9hc3NldHMvcGxheS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMxNSBmcm9tICcuL2Fzc2V0cy9wbGF5RmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE2IGZyb20gJy4vYXNzZXRzL3BsdXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTcgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMTggZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzE5IGZyb20gJy4vYXNzZXRzL3BvcG91dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMCBmcm9tICcuL2Fzc2V0cy9wdXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzIxIGZyb20gJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMiBmcm9tICcuL2Fzc2V0cy9xdW90ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyMyBmcm9tICcuL2Fzc2V0cy9yZWZyZXNoLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI0IGZyb20gJy4vYXNzZXRzL3JlcG9ydGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzI1IGZyb20gJy4vYXNzZXRzL3JldHVybl9rZXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjYgZnJvbSAnLi9hc3NldHMvc2F2ZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyNyBmcm9tICcuL2Fzc2V0cy9zY2FsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMyOCBmcm9tICcuL2Fzc2V0cy9zZWFyY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMjkgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzAgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzMSBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzMyIGZyb20gJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzMgZnJvbSAnLi9hc3NldHMvc2hhcmQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzQgZnJvbSAnLi9hc3NldHMvc2hhcmUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzUgZnJvbSAnLi9hc3NldHMvc25vd2ZsYWtlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM2IGZyb20gJy4vYXNzZXRzL3NvcnRMZWZ0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzM3IGZyb20gJy4vYXNzZXRzL3NvcnRSaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTMzOCBmcm9tICcuL2Fzc2V0cy9zb3J0X2Rvd24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzMzkgZnJvbSAnLi9hc3NldHMvc29ydF91cC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0MCBmcm9tICcuL2Fzc2V0cy9zb3J0YWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0MSBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQyIGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQzIGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNDQgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NSBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NiBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM0NyBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ4IGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzQ5IGZyb20gJy4vYXNzZXRzL3N0YXRzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzUwIGZyb20gJy4vYXNzZXRzL3N0b3AuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTEgZnJvbSAnLi9hc3NldHMvc3RvcF9maWxsZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTIgZnJvbSAnLi9hc3NldHMvc3RvcF9zbGFzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1MyBmcm9tICcuL2Fzc2V0cy9zdG9yYWdlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU0IGZyb20gJy4vYXNzZXRzL3N0cmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1NSBmcm9tICcuL2Fzc2V0cy9zdWJtb2R1bGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNTYgZnJvbSAnLi9hc3NldHMvc3VuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU3IGZyb20gJy4vYXNzZXRzL3N3YXRjaF9pbnB1dC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM1OCBmcm9tICcuL2Fzc2V0cy9zeW1saW5rLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzU5IGZyb20gJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MCBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjEgZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MiBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2MyBmcm9tICcuL2Fzc2V0cy90YWcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNjQgZnJvbSAnLi9hc3NldHMvdGVhci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NSBmcm9tICcuL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NiBmcm9tICcuL2Fzc2V0cy90aW1lUmVmcmVzaC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2NyBmcm9tICcuL2Fzc2V0cy90aW1lbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM2OCBmcm9tICcuL2Fzc2V0cy90aW1lc2xpZGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzY5IGZyb20gJy4vYXNzZXRzL3Rva2VuQWxpYXMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzAgZnJvbSAnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzcxIGZyb20gJy4vYXNzZXRzL3Rva2VuQXJyYXkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzIgZnJvbSAnLi9hc3NldHMvdG9rZW5CaW5hcnkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzMgZnJvbSAnLi9hc3NldHMvdG9rZW5Cb29sZWFuLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc0IGZyb20gJy4vYXNzZXRzL3Rva2VuQ2xhc3MuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzUgZnJvbSAnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc2IGZyb20gJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzcgZnJvbSAnLi9hc3NldHMvdG9rZW5EYXRlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzc4IGZyb20gJy4vYXNzZXRzL3Rva2VuRGVuc2VWZWN0b3IuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzNzkgZnJvbSAnLi9hc3NldHMvdG9rZW5FbGVtZW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzgwIGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MSBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW1NZW1iZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzODIgZnJvbSAnLi9hc3NldHMvdG9rZW5FdmVudC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4MyBmcm9tICcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NCBmcm9tICcuL2Fzc2V0cy90b2tlbkZpZWxkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg1IGZyb20gJy4vYXNzZXRzL3Rva2VuRmlsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NiBmcm9tICcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM4NyBmcm9tICcuL2Fzc2V0cy90b2tlbkZ1bmN0aW9uLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg4IGZyb20gJy4vYXNzZXRzL3Rva2VuR2VvLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzg5IGZyb20gJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkwIGZyb20gJy4vYXNzZXRzL3Rva2VuSVAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTEgZnJvbSAnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTIgZnJvbSAnLi9hc3NldHMvdG9rZW5Kb2luLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzkzIGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlMzk0IGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5d29yZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NSBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5NiBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0NvdW50ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGUzOTcgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5OCBmcm9tICcuL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTM5OSBmcm9tICcuL2Fzc2V0cy90b2tlbk5hbWVzcGFjZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMCBmcm9tICcuL2Fzc2V0cy90b2tlbk5lc3RlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwMSBmcm9tICcuL2Fzc2V0cy90b2tlbk51bGwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDIgZnJvbSAnLi9hc3NldHMvdG9rZW5OdW1iZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDMgZnJvbSAnLi9hc3NldHMvdG9rZW5PYmplY3QuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDQgZnJvbSAnLi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQwNSBmcm9tICcuL2Fzc2V0cy90b2tlblBhY2thZ2UuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDYgZnJvbSAnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDcgZnJvbSAnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDA4IGZyb20gJy4vYXNzZXRzL3Rva2VuUHJvcGVydHkuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MDkgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5nZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMCBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDExIGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmVzLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDEyIGZyb20gJy4vYXNzZXRzL3Rva2VuUmVwby5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxMyBmcm9tICcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MTQgZnJvbSAnLi9hc3NldHMvdG9rZW5TaGFwZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNSBmcm9tICcuL2Fzc2V0cy90b2tlblN0cmluZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNiBmcm9tICcuL2Fzc2V0cy90b2tlblN0cnVjdC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxNyBmcm9tICcuL2Fzc2V0cy90b2tlblN5bWJvbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxOCBmcm9tICcuL2Fzc2V0cy90b2tlblRhZy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQxOSBmcm9tICcuL2Fzc2V0cy90b2tlblRleHQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjAgZnJvbSAnLi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDIxIGZyb20gJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjIgZnJvbSAnLi9hc3NldHMvdHJhaW5pbmcuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjMgZnJvbSAnLi9hc3NldHMvdHJhc2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjQgZnJvbSAnLi9hc3NldHMvdW5mb2xkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI1IGZyb20gJy4vYXNzZXRzL3VubGluay5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQyNiBmcm9tICcuL2Fzc2V0cy91c2VyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDI3IGZyb20gJy4vYXNzZXRzL3VzZXJBdmF0YXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjggZnJvbSAnLi9hc3NldHMvdXNlcnMuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MjkgZnJvbSAnLi9hc3NldHMvdmVjdG9yLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMwIGZyb20gJy4vYXNzZXRzL3ZpZGVvUGxheWVyLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMxIGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDMyIGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhX3N0YWNrZWQuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzMgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM0IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM1IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0MzYgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDM3IGZyb20gJy4vYXNzZXRzL3Zpc19nYXVnZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzOCBmcm9tICcuL2Fzc2V0cy92aXNfZ29hbC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQzOSBmcm9tICcuL2Fzc2V0cy92aXNfbGluZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MCBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDEgZnJvbSAnLi9hc3NldHMvdmlzX21hcF9yZWdpb24uanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NDIgZnJvbSAnLi9hc3NldHMvdmlzX21ldHJpYy5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MyBmcm9tICcuL2Fzc2V0cy92aXNfcGllLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ0IGZyb20gJy4vYXNzZXRzL3Zpc190YWJsZS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NSBmcm9tICcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkLmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ2IGZyb20gJy4vYXNzZXRzL3Zpc190ZXh0LmpzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDQ3IGZyb20gJy4vYXNzZXRzL3Zpc190aW1lbGlvbi5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0OCBmcm9tICcuL2Fzc2V0cy92aXNfdmVnYS5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ0OSBmcm9tICcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTAgZnJvbSAnLi9hc3NldHMvd29yZFdyYXAuanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTEgZnJvbSAnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZC5qcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MiBmcm9tICcuL2Fzc2V0cy93cmVuY2guanMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTMgZnJvbSAnLi9hc3NldHMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NCBmcm9tICcuL2Fzc2V0cy9hZ2dyZWdhdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTUgZnJvbSAnLi9hc3NldHMvYWxlcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTYgZnJvbSAnLi9hc3NldHMvYW5hbHl6ZUV2ZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDU3IGZyb20gJy4vYXNzZXRzL2FuYWx5emVfZXZlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NTggZnJvbSAnLi9hc3NldHMvYW5ub3RhdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ1OSBmcm9tICcuL2Fzc2V0cy9hcG1fdHJhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjAgZnJvbSAnLi9hc3NldHMvYXBwX2FkZF9kYXRhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDYxIGZyb20gJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2MiBmcm9tICcuL2Fzc2V0cy9hcHBfYWdlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjMgZnJvbSAnLi9hc3NldHMvYXBwX2FwbSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NCBmcm9tICcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NSBmcm9tICcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY2IGZyb20gJy4vYXNzZXRzL2FwcF9jYW52YXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NjcgZnJvbSAnLi9hc3NldHMvYXBwX2Nhc2VzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY4IGZyb20gJy4vYXNzZXRzL2FwcF9jb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDY5IGZyb20gJy4vYXNzZXRzL2FwcF9jb25zb2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDcwIGZyb20gJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDcxIGZyb20gJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzIgZnJvbSAnLi9hc3NldHMvYXBwX2RldnRvb2xzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDczIGZyb20gJy4vYXNzZXRzL2FwcF9kaXNjb3Zlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NCBmcm9tICcuL2Fzc2V0cy9hcHBfZW1zJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDc1IGZyb20gJy4vYXNzZXRzL2FwcF9maWxlYmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NiBmcm9tICcuL2Fzc2V0cy9hcHBfZmxlZXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzcgZnJvbSAnLi9hc3NldHMvYXBwX2dpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OCBmcm9tICcuL2Fzc2V0cy9hcHBfZ3JhcGgnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0NzkgZnJvbSAnLi9hc3NldHMvYXBwX2dyb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0ODAgZnJvbSAnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MSBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfbWFuYWdlbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MiBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MyBmcm9tICcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg0IGZyb20gJy4vYXNzZXRzL2FwcF9sZW5zJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg1IGZyb20gJy4vYXNzZXRzL2FwcF9sb2dzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg2IGZyb20gJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg3IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNiZWF0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg4IGZyb20gJy4vYXNzZXRzL2FwcF9tZXRyaWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDg5IGZyb20gJy4vYXNzZXRzL2FwcF9tbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MCBmcm9tICcuL2Fzc2V0cy9hcHBfbW9uaXRvcmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5MSBmcm9tICcuL2Fzc2V0cy9hcHBfbm90ZWJvb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTIgZnJvbSAnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTMgZnJvbSAnLi9hc3NldHMvYXBwX3BpcGVsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk0IGZyb20gJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU0OTUgZnJvbSAnLi9hc3NldHMvYXBwX3JlcG9ydGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NiBmcm9tICcuL2Fzc2V0cy9hcHBfc2F2ZWRfb2JqZWN0cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NyBmcm9tICcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNDk4IGZyb20gJy4vYXNzZXRzL2FwcF9zZWN1cml0eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OSBmcm9tICcuL2Fzc2V0cy9hcHBfc2VjdXJpdHlfYW5hbHl0aWNzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTAwIGZyb20gJy4vYXNzZXRzL2FwcF9zcGFjZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDEgZnJvbSAnLi9hc3NldHMvYXBwX3NxbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUwMiBmcm9tICcuL2Fzc2V0cy9hcHBfdGltZWxpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDMgZnJvbSAnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA0IGZyb20gJy4vYXNzZXRzL2FwcF91cHRpbWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDUgZnJvbSAnLi9hc3NldHMvYXBwX3VzZXJzX3JvbGVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTA2IGZyb20gJy4vYXNzZXRzL2FwcF92aXN1YWxpemUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDcgZnJvbSAnLi9hc3NldHMvYXBwX3dhdGNoZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDggZnJvbSAnLi9hc3NldHMvYXBwX3dvcmtwbGFjZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MDkgZnJvbSAnLi9hc3NldHMvYXBwcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMCBmcm9tICcuL2Fzc2V0cy9hcnJvd0VuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxMSBmcm9tICcuL2Fzc2V0cy9hcnJvd1N0YXJ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTEyIGZyb20gJy4vYXNzZXRzL2Fycm93X2Rvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTMgZnJvbSAnLi9hc3NldHMvYXJyb3dfbGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNCBmcm9tICcuL2Fzc2V0cy9hcnJvd19yaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNSBmcm9tICcuL2Fzc2V0cy9hcnJvd191cCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNiBmcm9tICcuL2Fzc2V0cy9hc3Rlcmlzayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxNyBmcm9tICcuL2Fzc2V0cy9iZWFrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MTggZnJvbSAnLi9hc3NldHMvYmVsbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUxOSBmcm9tICcuL2Fzc2V0cy9iZWxsU2xhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MjAgZnJvbSAnLi9hc3NldHMvYm9sdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyMSBmcm9tICcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIyIGZyb20gJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTIzIGZyb20gJy4vYXNzZXRzL2JyYW5jaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyNCBmcm9tICcuL2Fzc2V0cy9icmFuY2hVc2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI1IGZyb20gJy4vYXNzZXRzL2Jyb29tJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI2IGZyb20gJy4vYXNzZXRzL2JydXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTI3IGZyb20gJy4vYXNzZXRzL2J1Zyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyOCBmcm9tICcuL2Fzc2V0cy9idWxsc2V5ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUyOSBmcm9tICcuL2Fzc2V0cy9jYWxlbmRhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzMCBmcm9tICcuL2Fzc2V0cy9jaGVjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzMSBmcm9tICcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMyIGZyb20gJy4vYXNzZXRzL2NoZWVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTMzIGZyb20gJy4vYXNzZXRzL2Nsb2NrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM0IGZyb20gJy4vYXNzZXRzL2Nsb3VkRHJpenpsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzNSBmcm9tICcuL2Fzc2V0cy9jbG91ZFN0b3JteSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTUzNiBmcm9tICcuL2Fzc2V0cy9jbG91ZFN1bm55JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTM3IGZyb20gJy4vYXNzZXRzL2NsdXN0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzggZnJvbSAnLi9hc3NldHMvY29sb3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1MzkgZnJvbSAnLi9hc3NldHMvY29tcHV0ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MCBmcm9tICcuL2Fzc2V0cy9jb25zb2xlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQxIGZyb20gJy4vYXNzZXRzL2NvbnRhaW5lcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0MiBmcm9tICcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDMgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDQgZnJvbSAnLi9hc3NldHMvY29udGludWl0eUJlbG93JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ1IGZyb20gJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NDYgZnJvbSAnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0NyBmcm9tICcuL2Fzc2V0cy9jb250cm9sc192ZXJ0aWNhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU0OCBmcm9tICcuL2Fzc2V0cy9jb3B5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTQ5IGZyb20gJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUwIGZyb20gJy4vYXNzZXRzL2Nyb3NzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUxIGZyb20gJy4vYXNzZXRzL2Nyb3NzSW5BQ2lyY2xlRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTUyIGZyb20gJy4vYXNzZXRzL2Nyb3NzaGFpcnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTMgZnJvbSAnLi9hc3NldHMvY3VycmVuY3knO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTQgZnJvbSAnLi9hc3NldHMvY3V0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU1IGZyb20gJy4vYXNzZXRzL2RhdGFiYXNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU2IGZyb20gJy4vYXNzZXRzL2Rlc2t0b3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTcgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NTggZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRFZGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTU5IGZyb20gJy4vYXNzZXRzL2RvY3VtZW50YXRpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjAgZnJvbSAnLi9hc3NldHMvZG9jdW1lbnRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTYxIGZyb20gJy4vYXNzZXRzL2RvdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2MiBmcm9tICcuL2Fzc2V0cy9kb3VibGVBcnJvd0xlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjMgZnJvbSAnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NCBmcm9tICcuL2Fzc2V0cy9kb3dubG9hZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2NiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NjcgZnJvbSAnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduQm90dG9tJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTY4IGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbkNlbnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU2OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTcwIGZyb20gJy4vYXNzZXRzL2VkaXRvckl0ZW1BbGlnbk1pZGRsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25SaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzMgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc0IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uQm90dG9tUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzUgZnJvbSAnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTc2IGZyb20gJy4vYXNzZXRzL2VkaXRvclBvc2l0aW9uVG9wUmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1NzcgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2FsaWduX2NlbnRlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3OCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU3OSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fcmlnaHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODAgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2JvbGQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29kZV9ibG9jayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfY29tbWVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4NCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU4NSBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfaXRhbGljJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg2IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTg3IGZyb20gJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODggZnJvbSAnLi9hc3NldHMvZWRpdG9yX3JlZG8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1ODkgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3N0cmlrZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MCBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdGFibGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTEgZnJvbSAnLi9hc3NldHMvZWRpdG9yX3VuZGVybGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MiBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5kbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5MyBmcm9tICcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTQgZnJvbSAnLi9hc3NldHMvZW1haWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTUgZnJvbSAnLi9hc3NldHMvZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU1OTYgZnJvbSAnLi9hc3NldHMvZXFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk3IGZyb20gJy4vYXNzZXRzL2VyYXNlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTU5OCBmcm9tICcuL2Fzc2V0cy9leGl0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNTk5IGZyb20gJy4vYXNzZXRzL2V4cGFuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMCBmcm9tICcuL2Fzc2V0cy9leHBhbmRNaW5pJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjAxIGZyb20gJy4vYXNzZXRzL2V4cG9ydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwMiBmcm9tICcuL2Fzc2V0cy9leWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDMgZnJvbSAnLi9hc3NldHMvZXllX2Nsb3NlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNCBmcm9tICcuL2Fzc2V0cy9mYWNlX2hhcHB5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjA1IGZyb20gJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNiBmcm9tICcuL2Fzc2V0cy9mYWNlX3NhZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwNyBmcm9tICcuL2Fzc2V0cy9maWx0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MDggZnJvbSAnLi9hc3NldHMvZmxhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYwOSBmcm9tICcuL2Fzc2V0cy9mb2xkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEwIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9jaGVjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMSBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjEyIGZyb20gJy4vYXNzZXRzL2ZvbGRlcl9leGNsYW1hdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxMyBmcm9tICcuL2Fzc2V0cy9mb2xkZXJfb3Blbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNCBmcm9tICcuL2Fzc2V0cy9mcmFtZU5leHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MTUgZnJvbSAnLi9hc3NldHMvZnJhbWVQcmV2aW91cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNiBmcm9tICcuL2Fzc2V0cy9mdWxsU2NyZWVuRXhpdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxNyBmcm9tICcuL2Fzc2V0cy9mdWxsX3NjcmVlbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxOCBmcm9tICcuL2Fzc2V0cy9mdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYxOSBmcm9tICcuL2Fzc2V0cy9nZWFyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjIwIGZyb20gJy4vYXNzZXRzL2dsYXNzZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjEgZnJvbSAnLi9hc3NldHMvZ2xvYmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjIgZnJvbSAnLi9hc3NldHMvZ3JhYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyMyBmcm9tICcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjQgZnJvbSAnLi9hc3NldHMvZ3JpZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNSBmcm9tICcuL2Fzc2V0cy9oZWFydCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyNiBmcm9tICcuL2Fzc2V0cy9oZWF0bWFwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjI3IGZyb20gJy4vYXNzZXRzL2hlbHAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MjggZnJvbSAnLi9hc3NldHMvaG9tZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYyOSBmcm9tICcuL2Fzc2V0cy9pSW5DaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzAgZnJvbSAnLi9hc3NldHMvaW1hZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzEgZnJvbSAnLi9hc3NldHMvaW1wb3J0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMyIGZyb20gJy4vYXNzZXRzL2luZGV4X2Nsb3NlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjMzIGZyb20gJy4vYXNzZXRzL2luZGV4X2VkaXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzQgZnJvbSAnLi9hc3NldHMvaW5kZXhfZmx1c2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzUgZnJvbSAnLi9hc3NldHMvaW5kZXhfbWFwcGluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTYzNiBmcm9tICcuL2Fzc2V0cy9pbmRleF9vcGVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjM3IGZyb20gJy4vYXNzZXRzL2luZGV4X3J1bnRpbWUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzggZnJvbSAnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2MzkgZnJvbSAnLi9hc3NldHMvaW5wdXRPdXRwdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDAgZnJvbSAnLi9hc3NldHMvaW5zcGVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0MSBmcm9tICcuL2Fzc2V0cy9pbnZlcnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDIgZnJvbSAnLi9hc3NldHMvaXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDMgZnJvbSAnLi9hc3NldHMva2V5Ym9hcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDQgZnJvbSAnLi9hc3NldHMva3FsX2ZpZWxkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ1IGZyb20gJy4vYXNzZXRzL2txbF9mdW5jdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NiBmcm9tICcuL2Fzc2V0cy9rcWxfb3BlcmFuZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY0NyBmcm9tICcuL2Fzc2V0cy9rcWxfc2VsZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NDggZnJvbSAnLi9hc3NldHMva3FsX3ZhbHVlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjQ5IGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNOb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUwIGZyb20gJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTEgZnJvbSAnLi9hc3NldHMvbGF5ZXJzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjUyIGZyb20gJy4vYXNzZXRzL2xldHRlcmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1MyBmcm9tICcuL2Fzc2V0cy9saW5lRGFzaGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU0IGZyb20gJy4vYXNzZXRzL2xpbmVEb3R0ZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTUgZnJvbSAnLi9hc3NldHMvbGluZVNvbGlkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjU2IGZyb20gJy4vYXNzZXRzL2xpbmsnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NTcgZnJvbSAnLi9hc3NldHMvbGlzdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1OCBmcm9tICcuL2Fzc2V0cy9saXN0X2FkZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY1OSBmcm9tICcuL2Fzc2V0cy9sb2NrJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYwIGZyb20gJy4vYXNzZXRzL2xvY2tPcGVuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYxIGZyb20gJy4vYXNzZXRzL2xvZ29fYWVyb3NwaWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYyIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBhY2hlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjYzIGZyb20gJy4vYXNzZXRzL2xvZ29fYXBwX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NCBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY2NSBmcm9tICcuL2Fzc2V0cy9sb2dvX2F3c19tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY2IGZyb20gJy4vYXNzZXRzL2xvZ29fYXp1cmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjcgZnJvbSAnLi9hc3NldHMvbG9nb19henVyZV9tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjY4IGZyb20gJy4vYXNzZXRzL2xvZ29fYmVhdHMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NjkgZnJvbSAnLi9hc3NldHMvbG9nb19idXNpbmVzc19hbmFseXRpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzAgZnJvbSAnLi9hc3NldHMvbG9nb19jZXBoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjcxIGZyb20gJy4vYXNzZXRzL2xvZ29fY2xvdWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzIgZnJvbSAnLi9hc3NldHMvbG9nb19jbG91ZF9lY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzMgZnJvbSAnLi9hc3NldHMvbG9nb19jb2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc0IGZyb20gJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzUgZnJvbSAnLi9hc3NldHMvbG9nb19jb3VjaGJhc2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzYgZnJvbSAnLi9hc3NldHMvbG9nb19kb2NrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2NzcgZnJvbSAnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjc4IGZyb20gJy4vYXNzZXRzL2xvZ29fZWxhc3RpYyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY3OSBmcm9tICcuL2Fzc2V0cy9sb2dvX2VsYXN0aWNfc3RhY2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODAgZnJvbSAnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgxIGZyb20gJy4vYXNzZXRzL2xvZ29fZW50ZXJwcmlzZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODIgZnJvbSAnLi9hc3NldHMvbG9nb19ldGNkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjgzIGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg0IGZyb20gJy4vYXNzZXRzL2xvZ29fZ2NwX21vbm8nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODUgZnJvbSAnLi9hc3NldHMvbG9nb19naXRodWInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2ODYgZnJvbSAnLi9hc3NldHMvbG9nb19nbWFpbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4NyBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvbGFuZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY4OCBmcm9tICcuL2Fzc2V0cy9sb2dvX2dvb2dsZV9nJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjg5IGZyb20gJy4vYXNzZXRzL2xvZ29faGFwcm94eSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MCBmcm9tICcuL2Fzc2V0cy9sb2dvX2libSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5MSBmcm9tICcuL2Fzc2V0cy9sb2dvX2libV9tb25vJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjkyIGZyb20gJy4vYXNzZXRzL2xvZ29fa2Fma2EnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTMgZnJvbSAnLi9hc3NldHMvbG9nb19raWJhbmEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU2OTQgZnJvbSAnLi9hc3NldHMvbG9nb19rdWJlcm5ldGVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk1IGZyb20gJy4vYXNzZXRzL2xvZ29fbG9nZ2luZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5NiBmcm9tICcuL2Fzc2V0cy9sb2dvX2xvZ3N0YXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNjk3IGZyb20gJy4vYXNzZXRzL2xvZ29fbWFwcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5OCBmcm9tICcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTY5OSBmcm9tICcuL2Fzc2V0cy9sb2dvX21ldHJpY3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDAgZnJvbSAnLi9hc3NldHMvbG9nb19tb25nb2RiJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzAxIGZyb20gJy4vYXNzZXRzL2xvZ29fbXlzcWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDIgZnJvbSAnLi9hc3NldHMvbG9nb19uZ2lueCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcwMyBmcm9tICcuL2Fzc2V0cy9sb2dvX29ic2VydmFiaWxpdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDQgZnJvbSAnLi9hc3NldHMvbG9nb19vc3F1ZXJ5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA1IGZyb20gJy4vYXNzZXRzL2xvZ29fcGhwJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA2IGZyb20gJy4vYXNzZXRzL2xvZ29fcG9zdGdyZXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDcgZnJvbSAnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzA4IGZyb20gJy4vYXNzZXRzL2xvZ29fcmFiYml0bXEnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MDkgZnJvbSAnLi9hc3NldHMvbG9nb19yZWRpcyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxMCBmcm9tICcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzExIGZyb20gJy4vYXNzZXRzL2xvZ29fc2l0ZV9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTIgZnJvbSAnLi9hc3NldHMvbG9nb19za2V0Y2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTMgZnJvbSAnLi9hc3NldHMvbG9nb19zbGFjayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNCBmcm9tICcuL2Fzc2V0cy9sb2dvX3VwdGltZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxNSBmcm9tICcuL2Fzc2V0cy9sb2dvX3dlYmhvb2snO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTYgZnJvbSAnLi9hc3NldHMvbG9nb193aW5kb3dzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzE3IGZyb20gJy4vYXNzZXRzL2xvZ29fd29ya3BsYWNlX3NlYXJjaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcxOCBmcm9tICcuL2Fzc2V0cy9sb2dzdGFzaF9maWx0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MTkgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaWYnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjAgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfaW5wdXQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjEgZnJvbSAnLi9hc3NldHMvbG9nc3Rhc2hfb3V0cHV0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIyIGZyb20gJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzIzIGZyb20gJy4vYXNzZXRzL21hZ25ldCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTcyNCBmcm9tICcuL2Fzc2V0cy9tYWduaWZ5V2l0aEV4Y2xhbWF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI1IGZyb20gJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjYgZnJvbSAnLi9hc3NldHMvbWFnbmlmeVdpdGhQbHVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI3IGZyb20gJy4vYXNzZXRzL21hcF9tYXJrZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MjggZnJvbSAnLi9hc3NldHMvbWVtb3J5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzI5IGZyb20gJy4vYXNzZXRzL21lbnUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzAgZnJvbSAnLi9hc3NldHMvbWVudURvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzEgZnJvbSAnLi9hc3NldHMvbWVudUxlZnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzIgZnJvbSAnLi9hc3NldHMvbWVudVJpZ2h0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzMzIGZyb20gJy4vYXNzZXRzL21lbnVVcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNCBmcm9tICcuL2Fzc2V0cy9tZXJnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNSBmcm9tICcuL2Fzc2V0cy9taW5pbWl6ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNiBmcm9tICcuL2Fzc2V0cy9taW51cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczNyBmcm9tICcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3MzggZnJvbSAnLi9hc3NldHMvbWludXNfaW5fY2lyY2xlX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTczOSBmcm9tICcuL2Fzc2V0cy9tbF9jbGFzc2lmaWNhdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDAgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MSBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0MiBmcm9tICcuL2Fzc2V0cy9tbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDMgZnJvbSAnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ0IGZyb20gJy4vYXNzZXRzL21sX2RhdGFfdmlzdWFsaXplcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc0NSBmcm9tICcuL2Fzc2V0cy9tbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDYgZnJvbSAnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDcgZnJvbSAnLi9hc3NldHMvbW9iaWxlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzQ4IGZyb20gJy4vYXNzZXRzL21vb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NDkgZnJvbSAnLi9hc3NldHMvbmFtZXNwYWNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUwIGZyb20gJy4vYXNzZXRzL25lc3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MSBmcm9tICcuL2Fzc2V0cy9ub2RlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzUyIGZyb20gJy4vYXNzZXRzL251bWJlcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1MyBmcm9tICcuL2Fzc2V0cy9vZmZsaW5lJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU0IGZyb20gJy4vYXNzZXRzL29ubGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc1NSBmcm9tICcuL2Fzc2V0cy9wYWNrYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzU2IGZyb20gJy4vYXNzZXRzL3BhZ2VTZWxlY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTcgZnJvbSAnLi9hc3NldHMvcGFnZXNTZWxlY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTggZnJvbSAnLi9hc3NldHMvcGFpbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NTkgZnJvbSAnLi9hc3NldHMvcGFwZXJfY2xpcCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2MCBmcm9tICcuL2Fzc2V0cy9wYXJ0aWFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYxIGZyb20gJy4vYXNzZXRzL3BhdXNlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzYyIGZyb20gJy4vYXNzZXRzL3BheW1lbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjMgZnJvbSAnLi9hc3NldHMvcGVuY2lsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY0IGZyb20gJy4vYXNzZXRzL3BlcmNlbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjUgZnJvbSAnLi9hc3NldHMvcGluJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY2IGZyb20gJy4vYXNzZXRzL3Bpbl9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NjcgZnJvbSAnLi9hc3NldHMvcGxheSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc2OCBmcm9tICcuL2Fzc2V0cy9wbGF5RmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzY5IGZyb20gJy4vYXNzZXRzL3BsdXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzAgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzEgZnJvbSAnLi9hc3NldHMvcGx1c19pbl9jaXJjbGVfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzcyIGZyb20gJy4vYXNzZXRzL3BvcG91dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3MyBmcm9tICcuL2Fzc2V0cy9wdXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc0IGZyb20gJy4vYXNzZXRzL3F1ZXN0aW9uX2luX2NpcmNsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3NSBmcm9tICcuL2Fzc2V0cy9xdW90ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc3NiBmcm9tICcuL2Fzc2V0cy9yZWZyZXNoJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc3IGZyb20gJy4vYXNzZXRzL3JlcG9ydGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzc4IGZyb20gJy4vYXNzZXRzL3JldHVybl9rZXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3NzkgZnJvbSAnLi9hc3NldHMvc2F2ZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MCBmcm9tICcuL2Fzc2V0cy9zY2FsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4MSBmcm9tICcuL2Fzc2V0cy9zZWFyY2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODIgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODMgZnJvbSAnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxEZXRlY3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc4NCBmcm9tICcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbFJlc29sdmVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg1IGZyb20gJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODYgZnJvbSAnLi9hc3NldHMvc2hhcmQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODcgZnJvbSAnLi9hc3NldHMvc2hhcmUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3ODggZnJvbSAnLi9hc3NldHMvc25vd2ZsYWtlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzg5IGZyb20gJy4vYXNzZXRzL3NvcnRMZWZ0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzkwIGZyb20gJy4vYXNzZXRzL3NvcnRSaWdodCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MSBmcm9tICcuL2Fzc2V0cy9zb3J0X2Rvd24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTIgZnJvbSAnLi9hc3NldHMvc29ydF91cCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5MyBmcm9tICcuL2Fzc2V0cy9zb3J0YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5NCBmcm9tICcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk1IGZyb20gJy4vYXNzZXRzL3N0YXJQbHVzRmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlNzk2IGZyb20gJy4vYXNzZXRzL3N0YXJfZW1wdHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU3OTcgZnJvbSAnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5OCBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTc5OSBmcm9tICcuL2Fzc2V0cy9zdGFyX2ZpbGxlZF9zcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwMCBmcm9tICcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAxIGZyb20gJy4vYXNzZXRzL3N0YXJfbWludXNfZmlsbGVkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAyIGZyb20gJy4vYXNzZXRzL3N0YXRzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODAzIGZyb20gJy4vYXNzZXRzL3N0b3AnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDQgZnJvbSAnLi9hc3NldHMvc3RvcF9maWxsZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDUgZnJvbSAnLi9hc3NldHMvc3RvcF9zbGFzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwNiBmcm9tICcuL2Fzc2V0cy9zdG9yYWdlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODA3IGZyb20gJy4vYXNzZXRzL3N0cmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgwOCBmcm9tICcuL2Fzc2V0cy9zdWJtb2R1bGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MDkgZnJvbSAnLi9hc3NldHMvc3VuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEwIGZyb20gJy4vYXNzZXRzL3N3YXRjaF9pbnB1dCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxMSBmcm9tICcuL2Fzc2V0cy9zeW1saW5rJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODEyIGZyb20gJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxMyBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X2NvbXBhY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTQgZnJvbSAnLi9hc3NldHMvdGFibGVfZGVuc2l0eV9leHBhbmRlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNSBmcm9tICcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxNiBmcm9tICcuL2Fzc2V0cy90YWcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MTcgZnJvbSAnLi9hc3NldHMvdGVhcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxOCBmcm9tICcuL2Fzc2V0cy90ZW1wZXJhdHVyZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgxOSBmcm9tICcuL2Fzc2V0cy90aW1lUmVmcmVzaCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMCBmcm9tICcuL2Fzc2V0cy90aW1lbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgyMSBmcm9tICcuL2Fzc2V0cy90aW1lc2xpZGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODIyIGZyb20gJy4vYXNzZXRzL3Rva2VuQWxpYXMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjMgZnJvbSAnLi9hc3NldHMvdG9rZW5Bbm5vdGF0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI0IGZyb20gJy4vYXNzZXRzL3Rva2VuQXJyYXknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjUgZnJvbSAnLi9hc3NldHMvdG9rZW5CaW5hcnknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjYgZnJvbSAnLi9hc3NldHMvdG9rZW5Cb29sZWFuJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI3IGZyb20gJy4vYXNzZXRzL3Rva2VuQ2xhc3MnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MjggZnJvbSAnLi9hc3NldHMvdG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODI5IGZyb20gJy4vYXNzZXRzL3Rva2VuQ29uc3RhbnQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzAgZnJvbSAnLi9hc3NldHMvdG9rZW5EYXRlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMxIGZyb20gJy4vYXNzZXRzL3Rva2VuRGVuc2VWZWN0b3InO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzIgZnJvbSAnLi9hc3NldHMvdG9rZW5FbGVtZW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODMzIGZyb20gJy4vYXNzZXRzL3Rva2VuRW51bSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNCBmcm9tICcuL2Fzc2V0cy90b2tlbkVudW1NZW1iZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4MzUgZnJvbSAnLi9hc3NldHMvdG9rZW5FdmVudCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNiBmcm9tICcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzNyBmcm9tICcuL2Fzc2V0cy90b2tlbkZpZWxkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODM4IGZyb20gJy4vYXNzZXRzL3Rva2VuRmlsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTgzOSBmcm9tICcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0MCBmcm9tICcuL2Fzc2V0cy90b2tlbkZ1bmN0aW9uJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQxIGZyb20gJy4vYXNzZXRzL3Rva2VuR2VvJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQyIGZyb20gJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQzIGZyb20gJy4vYXNzZXRzL3Rva2VuSVAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDQgZnJvbSAnLi9hc3NldHMvdG9rZW5JbnRlcmZhY2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NDUgZnJvbSAnLi9hc3NldHMvdG9rZW5Kb2luJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ2IGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODQ3IGZyb20gJy4vYXNzZXRzL3Rva2VuS2V5d29yZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0OCBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldGhvZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg0OSBmcm9tICcuL2Fzc2V0cy90b2tlbk1ldHJpY0NvdW50ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTAgZnJvbSAnLi9hc3NldHMvdG9rZW5NZXRyaWNHYXVnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MSBmcm9tICcuL2Fzc2V0cy90b2tlbk1vZHVsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MiBmcm9tICcuL2Fzc2V0cy90b2tlbk5hbWVzcGFjZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1MyBmcm9tICcuL2Fzc2V0cy90b2tlbk5lc3RlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1NCBmcm9tICcuL2Fzc2V0cy90b2tlbk51bGwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTUgZnJvbSAnLi9hc3NldHMvdG9rZW5OdW1iZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTYgZnJvbSAnLi9hc3NldHMvdG9rZW5PYmplY3QnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTcgZnJvbSAnLi9hc3NldHMvdG9rZW5PcGVyYXRvcic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg1OCBmcm9tICcuL2Fzc2V0cy90b2tlblBhY2thZ2UnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NTkgZnJvbSAnLi9hc3NldHMvdG9rZW5QYXJhbWV0ZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjAgZnJvbSAnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODYxIGZyb20gJy4vYXNzZXRzL3Rva2VuUHJvcGVydHknO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjIgZnJvbSAnLi9hc3NldHMvdG9rZW5SYW5nZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2MyBmcm9tICcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY0IGZyb20gJy4vYXNzZXRzL3Rva2VuUmFua0ZlYXR1cmVzJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODY1IGZyb20gJy4vYXNzZXRzL3Rva2VuUmVwbyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2NiBmcm9tICcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NjcgZnJvbSAnLi9hc3NldHMvdG9rZW5TaGFwZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2OCBmcm9tICcuL2Fzc2V0cy90b2tlblN0cmluZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg2OSBmcm9tICcuL2Fzc2V0cy90b2tlblN0cnVjdCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MCBmcm9tICcuL2Fzc2V0cy90b2tlblN5bWJvbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MSBmcm9tICcuL2Fzc2V0cy90b2tlblRhZyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3MiBmcm9tICcuL2Fzc2V0cy90b2tlblRleHQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzMgZnJvbSAnLi9hc3NldHMvdG9rZW5Ub2tlbkNvdW50JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc0IGZyb20gJy4vYXNzZXRzL3Rva2VuVmFyaWFibGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzUgZnJvbSAnLi9hc3NldHMvdHJhaW5pbmcnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzYgZnJvbSAnLi9hc3NldHMvdHJhc2gnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4NzcgZnJvbSAnLi9hc3NldHMvdW5mb2xkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODc4IGZyb20gJy4vYXNzZXRzL3VubGluayc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg3OSBmcm9tICcuL2Fzc2V0cy91c2VyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODgwIGZyb20gJy4vYXNzZXRzL3VzZXJBdmF0YXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODEgZnJvbSAnLi9hc3NldHMvdXNlcnMnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODIgZnJvbSAnLi9hc3NldHMvdmVjdG9yJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODgzIGZyb20gJy4vYXNzZXRzL3ZpZGVvUGxheWVyJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg0IGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg1IGZyb20gJy4vYXNzZXRzL3Zpc19hcmVhX3N0YWNrZWQnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODYgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl9ob3Jpem9udGFsJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg3IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODg4IGZyb20gJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWwnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4ODkgZnJvbSAnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODkwIGZyb20gJy4vYXNzZXRzL3Zpc19nYXVnZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MSBmcm9tICcuL2Fzc2V0cy92aXNfZ29hbCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MiBmcm9tICcuL2Fzc2V0cy92aXNfbGluZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5MyBmcm9tICcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTQgZnJvbSAnLi9hc3NldHMvdmlzX21hcF9yZWdpb24nO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU4OTUgZnJvbSAnLi9hc3NldHMvdmlzX21ldHJpYyc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5NiBmcm9tICcuL2Fzc2V0cy92aXNfcGllJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk3IGZyb20gJy4vYXNzZXRzL3Zpc190YWJsZSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTg5OCBmcm9tICcuL2Fzc2V0cy92aXNfdGFnX2Nsb3VkJztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlODk5IGZyb20gJy4vYXNzZXRzL3Zpc190ZXh0JztcbmltcG9ydCAqIGFzIF9EeW5hbWljSW1wb3J0TW9kdWxlOTAwIGZyb20gJy4vYXNzZXRzL3Zpc190aW1lbGlvbic7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMSBmcm9tICcuL2Fzc2V0cy92aXNfdmVnYSc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwMiBmcm9tICcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXInO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDMgZnJvbSAnLi9hc3NldHMvd29yZFdyYXAnO1xuaW1wb3J0ICogYXMgX0R5bmFtaWNJbXBvcnRNb2R1bGU5MDQgZnJvbSAnLi9hc3NldHMvd29yZFdyYXBEaXNhYmxlZCc7XG5pbXBvcnQgKiBhcyBfRHluYW1pY0ltcG9ydE1vZHVsZTkwNSBmcm9tICcuL2Fzc2V0cy93cmVuY2gnO1xuY29uc3QgX0R5bmFtaWNJbXBvcnRNb2R1bGVNYXAgPSB7Jy4vYXNzZXRzL2FjY2Vzc2liaWxpdHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMCwnLi9hc3NldHMvYWdncmVnYXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEsJy4vYXNzZXRzL2FsZXJ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIsJy4vYXNzZXRzL2FuYWx5emVFdmVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzLCcuL2Fzc2V0cy9hbmFseXplX2V2ZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQsJy4vYXNzZXRzL2Fubm90YXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNSwnLi9hc3NldHMvYXBtX3RyYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYsJy4vYXNzZXRzL2FwcF9hZGRfZGF0YS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3LCcuL2Fzc2V0cy9hcHBfYWR2YW5jZWRfc2V0dGluZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOCwnLi9hc3NldHMvYXBwX2FnZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTksJy4vYXNzZXRzL2FwcF9hcG0uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAsJy4vYXNzZXRzL2FwcF9hcHBfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExLCcuL2Fzc2V0cy9hcHBfYXVkaXRiZWF0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyLCcuL2Fzc2V0cy9hcHBfY2FudmFzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzLCcuL2Fzc2V0cy9hcHBfY2FzZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQsJy4vYXNzZXRzL2FwcF9jb2RlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1LCcuL2Fzc2V0cy9hcHBfY29uc29sZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNiwnLi9hc3NldHMvYXBwX2Nyb3NzX2NsdXN0ZXJfcmVwbGljYXRpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcsJy4vYXNzZXRzL2FwcF9kYXNoYm9hcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgsJy4vYXNzZXRzL2FwcF9kZXZ0b29scy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOSwnLi9hc3NldHMvYXBwX2Rpc2NvdmVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwLCcuL2Fzc2V0cy9hcHBfZW1zLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxLCcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIsJy4vYXNzZXRzL2FwcF9mbGVldC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMywnLi9hc3NldHMvYXBwX2dpcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNCwnLi9hc3NldHMvYXBwX2dyYXBoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1LCcuL2Fzc2V0cy9hcHBfZ3Jvay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNiwnLi9hc3NldHMvYXBwX2hlYXJ0YmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNywnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgsJy4vYXNzZXRzL2FwcF9pbmRleF9wYXR0ZXJuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5LCcuL2Fzc2V0cy9hcHBfaW5kZXhfcm9sbHVwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwLCcuL2Fzc2V0cy9hcHBfbGVucy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMSwnLi9hc3NldHMvYXBwX2xvZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIsJy4vYXNzZXRzL2FwcF9tYW5hZ2VtZW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzLCcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNCwnLi9hc3NldHMvYXBwX21ldHJpY3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUsJy4vYXNzZXRzL2FwcF9tbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNiwnLi9hc3NldHMvYXBwX21vbml0b3JpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcsJy4vYXNzZXRzL2FwcF9ub3RlYm9vay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOCwnLi9hc3NldHMvYXBwX3BhY2tldGJlYXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzksJy4vYXNzZXRzL2FwcF9waXBlbGluZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MCwnLi9hc3NldHMvYXBwX3JlY2VudGx5X3ZpZXdlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MSwnLi9hc3NldHMvYXBwX3JlcG9ydGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MiwnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDMsJy4vYXNzZXRzL2FwcF9zZWFyY2hfcHJvZmlsZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQsJy4vYXNzZXRzL2FwcF9zZWN1cml0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NSwnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NiwnLi9hc3NldHMvYXBwX3NwYWNlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NywnLi9hc3NldHMvYXBwX3NxbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OCwnLi9hc3NldHMvYXBwX3RpbWVsaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5LCcuL2Fzc2V0cy9hcHBfdXBncmFkZV9hc3Npc3RhbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAsJy4vYXNzZXRzL2FwcF91cHRpbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEsJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MiwnLi9hc3NldHMvYXBwX3Zpc3VhbGl6ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MywnLi9hc3NldHMvYXBwX3dhdGNoZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQsJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1LCcuL2Fzc2V0cy9hcHBzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2LCcuL2Fzc2V0cy9hcnJvd0VuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NywnLi9hc3NldHMvYXJyb3dTdGFydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OCwnLi9hc3NldHMvYXJyb3dfZG93bi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OSwnLi9hc3NldHMvYXJyb3dfbGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MCwnLi9hc3NldHMvYXJyb3dfcmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEsJy4vYXNzZXRzL2Fycm93X3VwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyLCcuL2Fzc2V0cy9hc3Rlcmlzay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MywnLi9hc3NldHMvYmVha2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0LCcuL2Fzc2V0cy9iZWxsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1LCcuL2Fzc2V0cy9iZWxsU2xhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYsJy4vYXNzZXRzL2JvbHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjcsJy4vYXNzZXRzL2JveGVzX2hvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjgsJy4vYXNzZXRzL2JveGVzX3ZlcnRpY2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5LCcuL2Fzc2V0cy9icmFuY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAsJy4vYXNzZXRzL2JyYW5jaFVzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzEsJy4vYXNzZXRzL2Jyb29tLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyLCcuL2Fzc2V0cy9icnVzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MywnLi9hc3NldHMvYnVnLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0LCcuL2Fzc2V0cy9idWxsc2V5ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NSwnLi9hc3NldHMvY2FsZW5kYXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzYsJy4vYXNzZXRzL2NoZWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3LCcuL2Fzc2V0cy9jaGVja0luQ2lyY2xlRmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4LCcuL2Fzc2V0cy9jaGVlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OSwnLi9hc3NldHMvY2xvY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAsJy4vYXNzZXRzL2Nsb3VkRHJpenpsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MSwnLi9hc3NldHMvY2xvdWRTdG9ybXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODIsJy4vYXNzZXRzL2Nsb3VkU3VubnkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODMsJy4vYXNzZXRzL2NsdXN0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQsJy4vYXNzZXRzL2NvbG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1LCcuL2Fzc2V0cy9jb21wdXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2LCcuL2Fzc2V0cy9jb25zb2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3LCcuL2Fzc2V0cy9jb250YWluZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgsJy4vYXNzZXRzL2NvbnRpbnVpdHlBYm92ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OSwnLi9hc3NldHMvY29udGludWl0eUFib3ZlQmVsb3cuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAsJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MSwnLi9hc3NldHMvY29udGludWl0eVdpdGhpbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MiwnLi9hc3NldHMvY29udHJvbHNfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MywnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTQsJy4vYXNzZXRzL2NvcHkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTUsJy4vYXNzZXRzL2NvcHlfY2xpcGJvYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTk2LCcuL2Fzc2V0cy9jcm9zcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5NywnLi9hc3NldHMvY3Jvc3NJbkFDaXJjbGVGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTgsJy4vYXNzZXRzL2Nyb3NzaGFpcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTksJy4vYXNzZXRzL2N1cnJlbmN5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMCwnLi9hc3NldHMvY3V0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMSwnLi9hc3NldHMvZGF0YWJhc2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTAyLCcuL2Fzc2V0cy9kZXNrdG9wLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwMywnLi9hc3NldHMvZG9jdW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA0LCcuL2Fzc2V0cy9kb2N1bWVudEVkaXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTA1LCcuL2Fzc2V0cy9kb2N1bWVudGF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwNiwnLi9hc3NldHMvZG9jdW1lbnRzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwNywnLi9hc3NldHMvZG90LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwOCwnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEwOSwnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMTAsJy4vYXNzZXRzL2Rvd25sb2FkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExMSwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEyLCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTEzLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE0LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE1LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNiwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTExNywnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE4LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTE5LCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTIwLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMSwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyMiwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjMsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTI0LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjUsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjYsJy4vYXNzZXRzL2VkaXRvcl9ib2xkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyNywnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMjgsJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEyOSwnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMwLCcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzEsJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTMyLCcuL2Fzc2V0cy9lZGl0b3JfbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzMsJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM0LCcuL2Fzc2V0cy9lZGl0b3JfcmVkby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxMzUsJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM2LCcuL2Fzc2V0cy9lZGl0b3JfdGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM3LCcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTEzOCwnLi9hc3NldHMvZWRpdG9yX3VuZG8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTM5LCcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQwLCcuL2Fzc2V0cy9lbWFpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDEsJy4vYXNzZXRzL2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MiwnLi9hc3NldHMvZXFsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0MywnLi9hc3NldHMvZXJhc2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE0NCwnLi9hc3NldHMvZXhpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDUsJy4vYXNzZXRzL2V4cGFuZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNDYsJy4vYXNzZXRzL2V4cGFuZE1pbmkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ3LCcuL2Fzc2V0cy9leHBvcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ4LCcuL2Fzc2V0cy9leWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTQ5LCcuL2Fzc2V0cy9leWVfY2xvc2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MCwnLi9hc3NldHMvZmFjZV9oYXBweS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTEsJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTIsJy4vYXNzZXRzL2ZhY2Vfc2FkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1MywnLi9hc3NldHMvZmlsdGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1NCwnLi9hc3NldHMvZmxhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNTUsJy4vYXNzZXRzL2ZvbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU2LCcuL2Fzc2V0cy9mb2xkZXJfY2hlY2suanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTU3LCcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1OCwnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE1OSwnLi9hc3NldHMvZm9sZGVyX29wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYwLCcuL2Fzc2V0cy9mcmFtZU5leHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYxLCcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2MiwnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTYzLCcuL2Fzc2V0cy9mdWxsX3NjcmVlbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjQsJy4vYXNzZXRzL2Z1bmN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE2NSwnLi9hc3NldHMvZ2Vhci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjYsJy4vYXNzZXRzL2dsYXNzZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY3LCcuL2Fzc2V0cy9nbG9iZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNjgsJy4vYXNzZXRzL2dyYWIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTY5LCcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcwLCcuL2Fzc2V0cy9ncmlkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3MSwnLi9hc3NldHMvaGVhcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTcyLCcuL2Fzc2V0cy9oZWF0bWFwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3MywnLi9hc3NldHMvaGVscC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzQsJy4vYXNzZXRzL2hvbWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc1LCcuL2Fzc2V0cy9pSW5DaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTc2LCcuL2Fzc2V0cy9pbWFnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzcsJy4vYXNzZXRzL2ltcG9ydC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxNzgsJy4vYXNzZXRzL2luZGV4X2Nsb3NlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE3OSwnLi9hc3NldHMvaW5kZXhfZWRpdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODAsJy4vYXNzZXRzL2luZGV4X2ZsdXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4MSwnLi9hc3NldHMvaW5kZXhfbWFwcGluZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODIsJy4vYXNzZXRzL2luZGV4X29wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTgzLCcuL2Fzc2V0cy9pbmRleF9ydW50aW1lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE4NCwnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg1LCcuL2Fzc2V0cy9pbnB1dE91dHB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODYsJy4vYXNzZXRzL2luc3BlY3QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg3LCcuL2Fzc2V0cy9pbnZlcnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTg4LCcuL2Fzc2V0cy9pcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxODksJy4vYXNzZXRzL2tleWJvYXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MCwnLi9hc3NldHMva3FsX2ZpZWxkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MSwnLi9hc3NldHMva3FsX2Z1bmN0aW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTE5MiwnLi9hc3NldHMva3FsX29wZXJhbmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTkzLCcuL2Fzc2V0cy9rcWxfc2VsZWN0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk0LCcuL2Fzc2V0cy9rcWxfdmFsdWUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk1LCcuL2Fzc2V0cy9rdWJlcm5ldGVzTm9kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUxOTYsJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk3LCcuL2Fzc2V0cy9sYXllcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk4LCcuL2Fzc2V0cy9sZXR0ZXJpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMTk5LCcuL2Fzc2V0cy9saW5lRGFzaGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwMCwnLi9hc3NldHMvbGluZURvdHRlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDEsJy4vYXNzZXRzL2xpbmVTb2xpZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDIsJy4vYXNzZXRzL2xpbmsuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjAzLCcuL2Fzc2V0cy9saXN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwNCwnLi9hc3NldHMvbGlzdF9hZGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA1LCcuL2Fzc2V0cy9sb2NrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwNiwnLi9hc3NldHMvbG9ja09wZW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjA3LCcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMDgsJy4vYXNzZXRzL2xvZ29fYXBhY2hlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIwOSwnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMCwnLi9hc3NldHMvbG9nb19hd3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjExLCcuL2Fzc2V0cy9sb2dvX2F3c19tb25vLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIxMiwnLi9hc3NldHMvbG9nb19henVyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTMsJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTQsJy4vYXNzZXRzL2xvZ29fYmVhdHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE1LCcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTYsJy4vYXNzZXRzL2xvZ29fY2VwaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTcsJy4vYXNzZXRzL2xvZ29fY2xvdWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjE4LCcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMTksJy4vYXNzZXRzL2xvZ29fY29kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjAsJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjIxLCcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjIsJy4vYXNzZXRzL2xvZ29fZG9ja2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyMywnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNCwnLi9hc3NldHMvbG9nb19lbGFzdGljLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNSwnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNiwnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIyNywnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjgsJy4vYXNzZXRzL2xvZ29fZXRjZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMjksJy4vYXNzZXRzL2xvZ29fZ2NwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMCwnLi9hc3NldHMvbG9nb19nY3BfbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzEsJy4vYXNzZXRzL2xvZ29fZ2l0aHViLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzMiwnLi9hc3NldHMvbG9nb19nbWFpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzMsJy4vYXNzZXRzL2xvZ29fZ29sYW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNCwnLi9hc3NldHMvbG9nb19nb29nbGVfZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzUsJy4vYXNzZXRzL2xvZ29faGFwcm94eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzYsJy4vYXNzZXRzL2xvZ29faWJtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTIzNywnLi9hc3NldHMvbG9nb19pYm1fbW9uby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyMzgsJy4vYXNzZXRzL2xvZ29fa2Fma2EuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjM5LCcuL2Fzc2V0cy9sb2dvX2tpYmFuYS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDAsJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDEsJy4vYXNzZXRzL2xvZ29fbG9nZ2luZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDIsJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQzLCcuL2Fzc2V0cy9sb2dvX21hcHMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ0LCcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDUsJy4vYXNzZXRzL2xvZ29fbWV0cmljcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDYsJy4vYXNzZXRzL2xvZ29fbW9uZ29kYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNDcsJy4vYXNzZXRzL2xvZ29fbXlzcWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjQ4LCcuL2Fzc2V0cy9sb2dvX25naW54LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI0OSwnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MCwnLi9hc3NldHMvbG9nb19vc3F1ZXJ5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MSwnLi9hc3NldHMvbG9nb19waHAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjUyLCcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1MywnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NCwnLi9hc3NldHMvbG9nb19yYWJiaXRtcS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTUsJy4vYXNzZXRzL2xvZ29fcmVkaXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjU2LCcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1NywnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNTgsJy4vYXNzZXRzL2xvZ29fc2tldGNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI1OSwnLi9hc3NldHMvbG9nb19zbGFjay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjAsJy4vYXNzZXRzL2xvZ29fdXB0aW1lLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MSwnLi9hc3NldHMvbG9nb193ZWJob29rLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MiwnLi9hc3NldHMvbG9nb193aW5kb3dzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2MywnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NCwnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2NSwnLi9hc3NldHMvbG9nc3Rhc2hfaWYuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjY2LCcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjcsJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNjgsJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI2OSwnLi9hc3NldHMvbWFnbmV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3MCwnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzEsJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjcyLCcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjczLCcuL2Fzc2V0cy9tYXBfbWFya2VyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NCwnLi9hc3NldHMvbWVtb3J5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NSwnLi9hc3NldHMvbWVudS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyNzYsJy4vYXNzZXRzL21lbnVEb3duLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI3NywnLi9hc3NldHMvbWVudUxlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc4LCcuL2Fzc2V0cy9tZW51UmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjc5LCcuL2Fzc2V0cy9tZW51VXAuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgwLCcuL2Fzc2V0cy9tZXJnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODEsJy4vYXNzZXRzL21pbmltaXplLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4MiwnLi9hc3NldHMvbWludXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjgzLCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjg0LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NSwnLi9hc3NldHMvbWxfY2xhc3NpZmljYXRpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4NiwnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyODcsJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4OCwnLi9hc3NldHMvbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI4OSwnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MCwnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MSwnLi9hc3NldHMvbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5MiwnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjkzLCcuL2Fzc2V0cy9tb2JpbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMjk0LCcuL2Fzc2V0cy9tb29uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NSwnLi9hc3NldHMvbmFtZXNwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NiwnLi9hc3NldHMvbmVzdGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTI5NywnLi9hc3NldHMvbm9kZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTgsJy4vYXNzZXRzL251bWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUyOTksJy4vYXNzZXRzL29mZmxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAwLCcuL2Fzc2V0cy9vbmxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzAxLCcuL2Fzc2V0cy9wYWNrYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwMiwnLi9hc3NldHMvcGFnZVNlbGVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDMsJy4vYXNzZXRzL3BhZ2VzU2VsZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNCwnLi9hc3NldHMvcGFpbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzA1LCcuL2Fzc2V0cy9wYXBlcl9jbGlwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwNiwnLi9hc3NldHMvcGFydGlhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDcsJy4vYXNzZXRzL3BhdXNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMwOCwnLi9hc3NldHMvcGF5bWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMDksJy4vYXNzZXRzL3BlbmNpbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTAsJy4vYXNzZXRzL3BlcmNlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzExLCcuL2Fzc2V0cy9waW4uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzEyLCcuL2Fzc2V0cy9waW5fZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxMywnLi9hc3NldHMvcGxheS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMTQsJy4vYXNzZXRzL3BsYXlGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE1LCcuL2Fzc2V0cy9wbHVzLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMxNiwnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE3LCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE4LCcuL2Fzc2V0cy9wb3BvdXQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzE5LCcuL2Fzc2V0cy9wdXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMCwnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMSwnLi9hc3NldHMvcXVvdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzIyLCcuL2Fzc2V0cy9yZWZyZXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyMywnLi9hc3NldHMvcmVwb3J0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI0LCcuL2Fzc2V0cy9yZXR1cm5fa2V5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNSwnLi9hc3NldHMvc2F2ZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMjYsJy4vYXNzZXRzL3NjYWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyNywnLi9hc3NldHMvc2VhcmNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMyOCwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzI5LCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzMCwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxSZXNvbHZlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzEsJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzMyLCcuL2Fzc2V0cy9zaGFyZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzMzMsJy4vYXNzZXRzL3NoYXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNCwnLi9hc3NldHMvc25vd2ZsYWtlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzNSwnLi9hc3NldHMvc29ydExlZnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM2LCcuL2Fzc2V0cy9zb3J0UmlnaHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM3LCcuL2Fzc2V0cy9zb3J0X2Rvd24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzM4LCcuL2Fzc2V0cy9zb3J0X3VwLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTMzOSwnLi9hc3NldHMvc29ydGFibGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQwLCcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0MSwnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQyLCcuL2Fzc2V0cy9zdGFyX2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0MywnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDQsJy4vYXNzZXRzL3N0YXJfZmlsbGVkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NSwnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ2LCcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM0NywnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzQ4LCcuL2Fzc2V0cy9zdGF0cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNDksJy4vYXNzZXRzL3N0b3AuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUwLCcuL2Fzc2V0cy9zdG9wX2ZpbGxlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTEsJy4vYXNzZXRzL3N0b3Bfc2xhc2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzUyLCcuL2Fzc2V0cy9zdG9yYWdlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1MywnLi9hc3NldHMvc3RyaW5nLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NCwnLi9hc3NldHMvc3VibW9kdWxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NSwnLi9hc3NldHMvc3VuLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NiwnLi9hc3NldHMvc3dhdGNoX2lucHV0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM1NywnLi9hc3NldHMvc3ltbGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTgsJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNTksJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjAsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzYxLCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjIsJy4vYXNzZXRzL3RhZy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjMsJy4vYXNzZXRzL3RlYXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY0LCcuL2Fzc2V0cy90ZW1wZXJhdHVyZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjUsJy4vYXNzZXRzL3RpbWVSZWZyZXNoLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2NiwnLi9hc3NldHMvdGltZWxpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzY3LCcuL2Fzc2V0cy90aW1lc2xpZGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM2OCwnLi9hc3NldHMvdG9rZW5BbGlhcy5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNjksJy4vYXNzZXRzL3Rva2VuQW5ub3RhdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzAsJy4vYXNzZXRzL3Rva2VuQXJyYXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzcxLCcuL2Fzc2V0cy90b2tlbkJpbmFyeS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzIsJy4vYXNzZXRzL3Rva2VuQm9vbGVhbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzMsJy4vYXNzZXRzL3Rva2VuQ2xhc3MuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc0LCcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzc1LCcuL2Fzc2V0cy90b2tlbkNvbnN0YW50LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3NiwnLi9hc3NldHMvdG9rZW5EYXRlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM3NywnLi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzgsJy4vYXNzZXRzL3Rva2VuRWxlbWVudC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzNzksJy4vYXNzZXRzL3Rva2VuRW51bS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODAsJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODEsJy4vYXNzZXRzL3Rva2VuRXZlbnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzgyLCcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODMsJy4vYXNzZXRzL3Rva2VuRmllbGQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg0LCcuL2Fzc2V0cy90b2tlbkZpbGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg1LCcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODYsJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzg3LCcuL2Fzc2V0cy90b2tlbkdlby5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzODgsJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM4OSwnLi9hc3NldHMvdG9rZW5JUC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTAsJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MSwnLi9hc3NldHMvdG9rZW5Kb2luLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5MiwnLi9hc3NldHMvdG9rZW5LZXkuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzkzLCcuL2Fzc2V0cy90b2tlbktleXdvcmQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk0LCcuL2Fzc2V0cy90b2tlbk1ldGhvZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTUsJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTYsJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlMzk3LCcuL2Fzc2V0cy90b2tlbk1vZHVsZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGUzOTgsJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTM5OSwnLi9hc3NldHMvdG9rZW5OZXN0ZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAwLCcuL2Fzc2V0cy90b2tlbk51bGwuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDAxLCcuL2Fzc2V0cy90b2tlbk51bWJlci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDIsJy4vYXNzZXRzL3Rva2VuT2JqZWN0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwMywnLi9hc3NldHMvdG9rZW5PcGVyYXRvci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDQsJy4vYXNzZXRzL3Rva2VuUGFja2FnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDUsJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNiwnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQwNywnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MDgsJy4vYXNzZXRzL3Rva2VuUmFuZ2UuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDA5LCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxMCwnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDExLCcuL2Fzc2V0cy90b2tlblJlcG8uanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEyLCcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDEzLCcuL2Fzc2V0cy90b2tlblNoYXBlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNCwnLi9hc3NldHMvdG9rZW5TdHJpbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE1LCcuL2Fzc2V0cy90b2tlblN0cnVjdC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MTYsJy4vYXNzZXRzL3Rva2VuU3ltYm9sLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQxNywnLi9hc3NldHMvdG9rZW5UYWcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE4LCcuL2Fzc2V0cy90b2tlblRleHQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDE5LCcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIwLCcuL2Fzc2V0cy90b2tlblZhcmlhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyMSwnLi9hc3NldHMvdHJhaW5pbmcuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDIyLCcuL2Fzc2V0cy90cmFzaC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjMsJy4vYXNzZXRzL3VuZm9sZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjQsJy4vYXNzZXRzL3VubGluay5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MjUsJy4vYXNzZXRzL3VzZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI2LCcuL2Fzc2V0cy91c2VyQXZhdGFyLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQyNywnLi9hc3NldHMvdXNlcnMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI4LCcuL2Fzc2V0cy92ZWN0b3IuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDI5LCcuL2Fzc2V0cy92aWRlb1BsYXllci5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzAsJy4vYXNzZXRzL3Zpc19hcmVhLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzMSwnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzIsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzMsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzNCwnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzUsJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzYsJy4vYXNzZXRzL3Zpc19nYXVnZS5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0MzcsJy4vYXNzZXRzL3Zpc19nb2FsLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQzOCwnLi9hc3NldHMvdmlzX2xpbmUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDM5LCcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQwLCcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbi5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDEsJy4vYXNzZXRzL3Zpc19tZXRyaWMuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQyLCcuL2Fzc2V0cy92aXNfcGllLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0MywnLi9hc3NldHMvdmlzX3RhYmxlLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NCwnLi9hc3NldHMvdmlzX3RhZ19jbG91ZC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NDUsJy4vYXNzZXRzL3Zpc190ZXh0LmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NiwnLi9hc3NldHMvdmlzX3RpbWVsaW9uLmpzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ0NywnLi9hc3NldHMvdmlzX3ZlZ2EuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ4LCcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXIuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDQ5LCcuL2Fzc2V0cy93b3JkV3JhcC5qcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTAsJy4vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQuanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUxLCcuL2Fzc2V0cy93cmVuY2guanMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDUyLCcuL2Fzc2V0cy9hY2Nlc3NpYmlsaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1MywnLi9hc3NldHMvYWdncmVnYXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NCwnLi9hc3NldHMvYWxlcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU1LCcuL2Fzc2V0cy9hbmFseXplRXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDU2LCcuL2Fzc2V0cy9hbmFseXplX2V2ZW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ1NywnLi9hc3NldHMvYW5ub3RhdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTgsJy4vYXNzZXRzL2FwbV90cmFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NTksJy4vYXNzZXRzL2FwcF9hZGRfZGF0YSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjAsJy4vYXNzZXRzL2FwcF9hZHZhbmNlZF9zZXR0aW5ncyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjEsJy4vYXNzZXRzL2FwcF9hZ2VudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjIsJy4vYXNzZXRzL2FwcF9hcG0nOl9EeW5hbWljSW1wb3J0TW9kdWxlNDYzLCcuL2Fzc2V0cy9hcHBfYXBwX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjQsJy4vYXNzZXRzL2FwcF9hdWRpdGJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY1LCcuL2Fzc2V0cy9hcHBfY2FudmFzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NiwnLi9hc3NldHMvYXBwX2Nhc2VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ2NywnLi9hc3NldHMvYXBwX2NvZGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDY4LCcuL2Fzc2V0cy9hcHBfY29uc29sZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NjksJy4vYXNzZXRzL2FwcF9jcm9zc19jbHVzdGVyX3JlcGxpY2F0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3MCwnLi9hc3NldHMvYXBwX2Rhc2hib2FyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzEsJy4vYXNzZXRzL2FwcF9kZXZ0b29scyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzIsJy4vYXNzZXRzL2FwcF9kaXNjb3Zlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU0NzMsJy4vYXNzZXRzL2FwcF9lbXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc0LCcuL2Fzc2V0cy9hcHBfZmlsZWJlYXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc1LCcuL2Fzc2V0cy9hcHBfZmxlZXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc2LCcuL2Fzc2V0cy9hcHBfZ2lzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3NywnLi9hc3NldHMvYXBwX2dyYXBoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ3OCwnLi9hc3NldHMvYXBwX2dyb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNDc5LCcuL2Fzc2V0cy9hcHBfaGVhcnRiZWF0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4MCwnLi9hc3NldHMvYXBwX2luZGV4X21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgxLCcuL2Fzc2V0cy9hcHBfaW5kZXhfcGF0dGVybic6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODIsJy4vYXNzZXRzL2FwcF9pbmRleF9yb2xsdXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDgzLCcuL2Fzc2V0cy9hcHBfbGVucyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODQsJy4vYXNzZXRzL2FwcF9sb2dzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4NSwnLi9hc3NldHMvYXBwX21hbmFnZW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDg2LCcuL2Fzc2V0cy9hcHBfbWV0cmljYmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0ODcsJy4vYXNzZXRzL2FwcF9tZXRyaWNzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OCwnLi9hc3NldHMvYXBwX21sJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ4OSwnLi9hc3NldHMvYXBwX21vbml0b3JpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDkwLCcuL2Fzc2V0cy9hcHBfbm90ZWJvb2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNDkxLCcuL2Fzc2V0cy9hcHBfcGFja2V0YmVhdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTIsJy4vYXNzZXRzL2FwcF9waXBlbGluZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTMsJy4vYXNzZXRzL2FwcF9yZWNlbnRseV92aWV3ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk0LCcuL2Fzc2V0cy9hcHBfcmVwb3J0aW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NSwnLi9hc3NldHMvYXBwX3NhdmVkX29iamVjdHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNDk2LCcuL2Fzc2V0cy9hcHBfc2VhcmNoX3Byb2ZpbGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5NywnLi9hc3NldHMvYXBwX3NlY3VyaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTQ5OCwnLi9hc3NldHMvYXBwX3NlY3VyaXR5X2FuYWx5dGljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU0OTksJy4vYXNzZXRzL2FwcF9zcGFjZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTAwLCcuL2Fzc2V0cy9hcHBfc3FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMSwnLi9hc3NldHMvYXBwX3RpbWVsaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMiwnLi9hc3NldHMvYXBwX3VwZ3JhZGVfYXNzaXN0YW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwMywnLi9hc3NldHMvYXBwX3VwdGltZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDQsJy4vYXNzZXRzL2FwcF91c2Vyc19yb2xlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDUsJy4vYXNzZXRzL2FwcF92aXN1YWxpemUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTA2LCcuL2Fzc2V0cy9hcHBfd2F0Y2hlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDcsJy4vYXNzZXRzL2FwcF93b3JrcGxhY2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUwOCwnLi9hc3NldHMvYXBwcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MDksJy4vYXNzZXRzL2Fycm93RW5kJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMCwnLi9hc3NldHMvYXJyb3dTdGFydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTEsJy4vYXNzZXRzL2Fycm93X2Rvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTEyLCcuL2Fzc2V0cy9hcnJvd19sZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxMywnLi9hc3NldHMvYXJyb3dfcmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTE0LCcuL2Fzc2V0cy9hcnJvd191cCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTUsJy4vYXNzZXRzL2FzdGVyaXNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNiwnLi9hc3NldHMvYmVha2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUxNywnLi9hc3NldHMvYmVsbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTgsJy4vYXNzZXRzL2JlbGxTbGFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MTksJy4vYXNzZXRzL2JvbHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIwLCcuL2Fzc2V0cy9ib3hlc19ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyMSwnLi9hc3NldHMvYm94ZXNfdmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIyLCcuL2Fzc2V0cy9icmFuY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTIzLCcuL2Fzc2V0cy9icmFuY2hVc2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyNCwnLi9hc3NldHMvYnJvb20nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI1LCcuL2Fzc2V0cy9icnVzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjYsJy4vYXNzZXRzL2J1Zyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MjcsJy4vYXNzZXRzL2J1bGxzZXllJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUyOCwnLi9hc3NldHMvY2FsZW5kYXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTI5LCcuL2Fzc2V0cy9jaGVjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzAsJy4vYXNzZXRzL2NoZWNrSW5DaXJjbGVGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTMxLCcuL2Fzc2V0cy9jaGVlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzIsJy4vYXNzZXRzL2Nsb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzMywnLi9hc3NldHMvY2xvdWREcml6emxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNCwnLi9hc3NldHMvY2xvdWRTdG9ybXknOl9EeW5hbWljSW1wb3J0TW9kdWxlNTM1LCcuL2Fzc2V0cy9jbG91ZFN1bm55JzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzNiwnLi9hc3NldHMvY2x1c3Rlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzcsJy4vYXNzZXRzL2NvbG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTUzOCwnLi9hc3NldHMvY29tcHV0ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1MzksJy4vYXNzZXRzL2NvbnNvbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQwLCcuL2Fzc2V0cy9jb250YWluZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQxLCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQyLCcuL2Fzc2V0cy9jb250aW51aXR5QWJvdmVCZWxvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDMsJy4vYXNzZXRzL2NvbnRpbnVpdHlCZWxvdyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NDQsJy4vYXNzZXRzL2NvbnRpbnVpdHlXaXRoaW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ1LCcuL2Fzc2V0cy9jb250cm9sc19ob3Jpem9udGFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0NiwnLi9hc3NldHMvY29udHJvbHNfdmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ3LCcuL2Fzc2V0cy9jb3B5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU0OCwnLi9hc3NldHMvY29weV9jbGlwYm9hcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTQ5LCcuL2Fzc2V0cy9jcm9zcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTAsJy4vYXNzZXRzL2Nyb3NzSW5BQ2lyY2xlRmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MSwnLi9hc3NldHMvY3Jvc3NoYWlycyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NTIsJy4vYXNzZXRzL2N1cnJlbmN5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1MywnLi9hc3NldHMvY3V0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1NCwnLi9hc3NldHMvZGF0YWJhc2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU1LCcuL2Fzc2V0cy9kZXNrdG9wJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1NiwnLi9hc3NldHMvZG9jdW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU3LCcuL2Fzc2V0cy9kb2N1bWVudEVkaXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTU4LCcuL2Fzc2V0cy9kb2N1bWVudGF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU1OSwnLi9hc3NldHMvZG9jdW1lbnRzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MCwnLi9hc3NldHMvZG90JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MSwnLi9hc3NldHMvZG91YmxlQXJyb3dMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2MiwnLi9hc3NldHMvZG91YmxlQXJyb3dSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NjMsJy4vYXNzZXRzL2Rvd25sb2FkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2NCwnLi9hc3NldHMvZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY1LCcuL2Fzc2V0cy9lZGl0b3JEaXN0cmlidXRlVmVydGljYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY2LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Cb3R0b20nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY3LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25DZW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTY4LCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25MZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU2OSwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduTWlkZGxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3MCwnLi9hc3NldHMvZWRpdG9ySXRlbUFsaWduUmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcxLCcuL2Fzc2V0cy9lZGl0b3JJdGVtQWxpZ25Ub3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTcyLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTczLCcuL2Fzc2V0cy9lZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NCwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BMZWZ0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU3NSwnLi9hc3NldHMvZWRpdG9yUG9zaXRpb25Ub3BSaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzYsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9jZW50ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNTc3LCcuL2Fzc2V0cy9lZGl0b3JfYWxpZ25fbGVmdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzgsJy4vYXNzZXRzL2VkaXRvcl9hbGlnbl9yaWdodCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1NzksJy4vYXNzZXRzL2VkaXRvcl9ib2xkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MCwnLi9hc3NldHMvZWRpdG9yX2NoZWNrbGlzdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODEsJy4vYXNzZXRzL2VkaXRvcl9jb2RlX2Jsb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU4MiwnLi9hc3NldHMvZWRpdG9yX2NvbW1lbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTgzLCcuL2Fzc2V0cy9lZGl0b3JfaGVhZGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODQsJy4vYXNzZXRzL2VkaXRvcl9pdGFsaWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg1LCcuL2Fzc2V0cy9lZGl0b3JfbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODYsJy4vYXNzZXRzL2VkaXRvcl9vcmRlcmVkX2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg3LCcuL2Fzc2V0cy9lZGl0b3JfcmVkbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1ODgsJy4vYXNzZXRzL2VkaXRvcl9zdHJpa2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTg5LCcuL2Fzc2V0cy9lZGl0b3JfdGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkwLCcuL2Fzc2V0cy9lZGl0b3JfdW5kZXJsaW5lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5MSwnLi9hc3NldHMvZWRpdG9yX3VuZG8nOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkyLCcuL2Fzc2V0cy9lZGl0b3JfdW5vcmRlcmVkX2xpc3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNTkzLCcuL2Fzc2V0cy9lbWFpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTQsJy4vYXNzZXRzL2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NSwnLi9hc3NldHMvZXFsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NiwnLi9hc3NldHMvZXJhc2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTU5NywnLi9hc3NldHMvZXhpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTgsJy4vYXNzZXRzL2V4cGFuZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU1OTksJy4vYXNzZXRzL2V4cGFuZE1pbmknOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAwLCcuL2Fzc2V0cy9leHBvcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAxLCcuL2Fzc2V0cy9leWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjAyLCcuL2Fzc2V0cy9leWVfY2xvc2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwMywnLi9hc3NldHMvZmFjZV9oYXBweSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDQsJy4vYXNzZXRzL2ZhY2VfbmV1dHJhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDUsJy4vYXNzZXRzL2ZhY2Vfc2FkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNiwnLi9hc3NldHMvZmlsdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYwNywnLi9hc3NldHMvZmxhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MDgsJy4vYXNzZXRzL2ZvbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjA5LCcuL2Fzc2V0cy9mb2xkZXJfY2hlY2snOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEwLCcuL2Fzc2V0cy9mb2xkZXJfY2xvc2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxMSwnLi9hc3NldHMvZm9sZGVyX2V4Y2xhbWF0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxMiwnLi9hc3NldHMvZm9sZGVyX29wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjEzLCcuL2Fzc2V0cy9mcmFtZU5leHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE0LCcuL2Fzc2V0cy9mcmFtZVByZXZpb3VzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxNSwnLi9hc3NldHMvZnVsbFNjcmVlbkV4aXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjE2LCcuL2Fzc2V0cy9mdWxsX3NjcmVlbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTcsJy4vYXNzZXRzL2Z1bmN0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYxOCwnLi9hc3NldHMvZ2Vhcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MTksJy4vYXNzZXRzL2dsYXNzZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIwLCcuL2Fzc2V0cy9nbG9iZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjEsJy4vYXNzZXRzL2dyYWInOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIyLCcuL2Fzc2V0cy9ncmFiX2hvcml6b250YWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjIzLCcuL2Fzc2V0cy9ncmlkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNCwnLi9hc3NldHMvaGVhcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI1LCcuL2Fzc2V0cy9oZWF0bWFwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYyNiwnLi9hc3NldHMvaGVscCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MjcsJy4vYXNzZXRzL2hvbWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI4LCcuL2Fzc2V0cy9pSW5DaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjI5LCcuL2Fzc2V0cy9pbWFnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzAsJy4vYXNzZXRzL2ltcG9ydCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzEsJy4vYXNzZXRzL2luZGV4X2Nsb3NlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzMiwnLi9hc3NldHMvaW5kZXhfZWRpdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzMsJy4vYXNzZXRzL2luZGV4X2ZsdXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNCwnLi9hc3NldHMvaW5kZXhfbWFwcGluZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzUsJy4vYXNzZXRzL2luZGV4X29wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM2LCcuL2Fzc2V0cy9pbmRleF9ydW50aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTYzNywnLi9hc3NldHMvaW5kZXhfc2V0dGluZ3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjM4LCcuL2Fzc2V0cy9pbnB1dE91dHB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2MzksJy4vYXNzZXRzL2luc3BlY3QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQwLCcuL2Fzc2V0cy9pbnZlcnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQxLCcuL2Fzc2V0cy9pcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDIsJy4vYXNzZXRzL2tleWJvYXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0MywnLi9hc3NldHMva3FsX2ZpZWxkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NCwnLi9hc3NldHMva3FsX2Z1bmN0aW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY0NSwnLi9hc3NldHMva3FsX29wZXJhbmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ2LCcuL2Fzc2V0cy9rcWxfc2VsZWN0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ3LCcuL2Fzc2V0cy9rcWxfdmFsdWUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjQ4LCcuL2Fzc2V0cy9rdWJlcm5ldGVzTm9kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NDksJy4vYXNzZXRzL2t1YmVybmV0ZXNQb2QnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUwLCcuL2Fzc2V0cy9sYXllcnMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUxLCcuL2Fzc2V0cy9sZXR0ZXJpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjUyLCcuL2Fzc2V0cy9saW5lRGFzaGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1MywnLi9hc3NldHMvbGluZURvdHRlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTQsJy4vYXNzZXRzL2xpbmVTb2xpZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NTUsJy4vYXNzZXRzL2xpbmsnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU2LCcuL2Fzc2V0cy9saXN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1NywnLi9hc3NldHMvbGlzdF9hZGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjU4LCcuL2Fzc2V0cy9sb2NrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY1OSwnLi9hc3NldHMvbG9ja09wZW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNjYwLCcuL2Fzc2V0cy9sb2dvX2Flcm9zcGlrZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjEsJy4vYXNzZXRzL2xvZ29fYXBhY2hlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MiwnLi9hc3NldHMvbG9nb19hcHBfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2MywnLi9hc3NldHMvbG9nb19hd3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY0LCcuL2Fzc2V0cy9sb2dvX2F3c19tb25vJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY2NSwnLi9hc3NldHMvbG9nb19henVyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjYsJy4vYXNzZXRzL2xvZ29fYXp1cmVfbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjcsJy4vYXNzZXRzL2xvZ29fYmVhdHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjY4LCcuL2Fzc2V0cy9sb2dvX2J1c2luZXNzX2FuYWx5dGljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NjksJy4vYXNzZXRzL2xvZ29fY2VwaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzAsJy4vYXNzZXRzL2xvZ29fY2xvdWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjcxLCcuL2Fzc2V0cy9sb2dvX2Nsb3VkX2VjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzIsJy4vYXNzZXRzL2xvZ29fY29kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzMsJy4vYXNzZXRzL2xvZ29fY29kZXNhbmRib3gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjc0LCcuL2Fzc2V0cy9sb2dvX2NvdWNoYmFzZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2NzUsJy4vYXNzZXRzL2xvZ29fZG9ja2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NiwnLi9hc3NldHMvbG9nb19kcm9wd2l6YXJkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3NywnLi9hc3NldHMvbG9nb19lbGFzdGljJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3OCwnLi9hc3NldHMvbG9nb19lbGFzdGljX3N0YWNrJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY3OSwnLi9hc3NldHMvbG9nb19lbGFzdGljc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MCwnLi9hc3NldHMvbG9nb19lbnRlcnByaXNlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODEsJy4vYXNzZXRzL2xvZ29fZXRjZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODIsJy4vYXNzZXRzL2xvZ29fZ2NwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4MywnLi9hc3NldHMvbG9nb19nY3BfbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODQsJy4vYXNzZXRzL2xvZ29fZ2l0aHViJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NSwnLi9hc3NldHMvbG9nb19nbWFpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODYsJy4vYXNzZXRzL2xvZ29fZ29sYW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY4NywnLi9hc3NldHMvbG9nb19nb29nbGVfZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODgsJy4vYXNzZXRzL2xvZ29faGFwcm94eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2ODksJy4vYXNzZXRzL2xvZ29faWJtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTY5MCwnLi9hc3NldHMvbG9nb19pYm1fbW9ubyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTEsJy4vYXNzZXRzL2xvZ29fa2Fma2EnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjkyLCcuL2Fzc2V0cy9sb2dvX2tpYmFuYSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTMsJy4vYXNzZXRzL2xvZ29fa3ViZXJuZXRlcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTQsJy4vYXNzZXRzL2xvZ29fbG9nZ2luZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTUsJy4vYXNzZXRzL2xvZ29fbG9nc3Rhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk2LCcuL2Fzc2V0cy9sb2dvX21hcHMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNjk3LCcuL2Fzc2V0cy9sb2dvX21lbWNhY2hlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTgsJy4vYXNzZXRzL2xvZ29fbWV0cmljcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU2OTksJy4vYXNzZXRzL2xvZ29fbW9uZ29kYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDAsJy4vYXNzZXRzL2xvZ29fbXlzcWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzAxLCcuL2Fzc2V0cy9sb2dvX25naW54JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMiwnLi9hc3NldHMvbG9nb19vYnNlcnZhYmlsaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwMywnLi9hc3NldHMvbG9nb19vc3F1ZXJ5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNCwnLi9hc3NldHMvbG9nb19waHAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA1LCcuL2Fzc2V0cy9sb2dvX3Bvc3RncmVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNiwnLi9hc3NldHMvbG9nb19wcm9tZXRoZXVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcwNywnLi9hc3NldHMvbG9nb19yYWJiaXRtcSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MDgsJy4vYXNzZXRzL2xvZ29fcmVkaXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzA5LCcuL2Fzc2V0cy9sb2dvX3NlY3VyaXR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMCwnLi9hc3NldHMvbG9nb19zaXRlX3NlYXJjaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTEsJy4vYXNzZXRzL2xvZ29fc2tldGNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxMiwnLi9hc3NldHMvbG9nb19zbGFjayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MTMsJy4vYXNzZXRzL2xvZ29fdXB0aW1lJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNCwnLi9hc3NldHMvbG9nb193ZWJob29rJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNSwnLi9hc3NldHMvbG9nb193aW5kb3dzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNiwnLi9hc3NldHMvbG9nb193b3JrcGxhY2Vfc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxNywnLi9hc3NldHMvbG9nc3Rhc2hfZmlsdGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcxOCwnLi9hc3NldHMvbG9nc3Rhc2hfaWYnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzE5LCcuL2Fzc2V0cy9sb2dzdGFzaF9pbnB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjAsJy4vYXNzZXRzL2xvZ3N0YXNoX291dHB1dCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjEsJy4vYXNzZXRzL2xvZ3N0YXNoX3F1ZXVlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMiwnLi9hc3NldHMvbWFnbmV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyMywnLi9hc3NldHMvbWFnbmlmeVdpdGhFeGNsYW1hdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjQsJy4vYXNzZXRzL21hZ25pZnlXaXRoTWludXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI1LCcuL2Fzc2V0cy9tYWduaWZ5V2l0aFBsdXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzI2LCcuL2Fzc2V0cy9tYXBfbWFya2VyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyNywnLi9hc3NldHMvbWVtb3J5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTcyOCwnLi9hc3NldHMvbWVudSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MjksJy4vYXNzZXRzL21lbnVEb3duJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczMCwnLi9hc3NldHMvbWVudUxlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMxLCcuL2Fzc2V0cy9tZW51UmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMyLCcuL2Fzc2V0cy9tZW51VXAnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzMzLCcuL2Fzc2V0cy9tZXJnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3MzQsJy4vYXNzZXRzL21pbmltaXplJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczNSwnLi9hc3NldHMvbWludXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM2LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzM3LCcuL2Fzc2V0cy9taW51c19pbl9jaXJjbGVfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczOCwnLi9hc3NldHMvbWxfY2xhc3NpZmljYXRpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTczOSwnLi9hc3NldHMvbWxfY3JlYXRlX2FkdmFuY2VkX2pvYic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NDAsJy4vYXNzZXRzL21sX2NyZWF0ZV9tdWx0aV9tZXRyaWNfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MSwnLi9hc3NldHMvbWxfY3JlYXRlX3BvcHVsYXRpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MiwnLi9hc3NldHMvbWxfY3JlYXRlX3NpbmdsZV9tZXRyaWNfam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0MywnLi9hc3NldHMvbWxfZGF0YV92aXN1YWxpemVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0NCwnLi9hc3NldHMvbWxfb3V0bGllcl9kZXRlY3Rpb25fam9iJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0NSwnLi9hc3NldHMvbWxfcmVncmVzc2lvbl9qb2InOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ2LCcuL2Fzc2V0cy9tb2JpbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzQ3LCcuL2Fzc2V0cy9tb29uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0OCwnLi9hc3NldHMvbmFtZXNwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc0OSwnLi9hc3NldHMvbmVzdGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1MCwnLi9hc3NldHMvbm9kZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTEsJy4vYXNzZXRzL251bWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTIsJy4vYXNzZXRzL29mZmxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzUzLCcuL2Fzc2V0cy9vbmxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU0LCcuL2Fzc2V0cy9wYWNrYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NSwnLi9hc3NldHMvcGFnZVNlbGVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NTYsJy4vYXNzZXRzL3BhZ2VzU2VsZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1NywnLi9hc3NldHMvcGFpbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzU4LCcuL2Fzc2V0cy9wYXBlcl9jbGlwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc1OSwnLi9hc3NldHMvcGFydGlhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjAsJy4vYXNzZXRzL3BhdXNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2MSwnLi9hc3NldHMvcGF5bWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjIsJy4vYXNzZXRzL3BlbmNpbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjMsJy4vYXNzZXRzL3BlcmNlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY0LCcuL2Fzc2V0cy9waW4nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY1LCcuL2Fzc2V0cy9waW5fZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2NiwnLi9hc3NldHMvcGxheSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NjcsJy4vYXNzZXRzL3BsYXlGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzY4LCcuL2Fzc2V0cy9wbHVzJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc2OSwnLi9hc3NldHMvcGx1c19pbl9jaXJjbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcwLCcuL2Fzc2V0cy9wbHVzX2luX2NpcmNsZV9maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcxLCcuL2Fzc2V0cy9wb3BvdXQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzcyLCcuL2Fzc2V0cy9wdXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3MywnLi9hc3NldHMvcXVlc3Rpb25faW5fY2lyY2xlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NCwnLi9hc3NldHMvcXVvdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc1LCcuL2Fzc2V0cy9yZWZyZXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3NiwnLi9hc3NldHMvcmVwb3J0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzc3LCcuL2Fzc2V0cy9yZXR1cm5fa2V5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc3OCwnLi9hc3NldHMvc2F2ZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3NzksJy4vYXNzZXRzL3NjYWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MCwnLi9hc3NldHMvc2VhcmNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MSwnLi9hc3NldHMvc2VjdXJpdHlTaWduYWwnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzgyLCcuL2Fzc2V0cy9zZWN1cml0eVNpZ25hbERldGVjdGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4MywnLi9hc3NldHMvc2VjdXJpdHlTaWduYWxSZXNvbHZlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODQsJy4vYXNzZXRzL3Nlc3Npb25WaWV3ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg1LCcuL2Fzc2V0cy9zaGFyZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3ODYsJy4vYXNzZXRzL3NoYXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4NywnLi9hc3NldHMvc25vd2ZsYWtlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc4OCwnLi9hc3NldHMvc29ydExlZnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzg5LCcuL2Fzc2V0cy9zb3J0UmlnaHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkwLCcuL2Fzc2V0cy9zb3J0X2Rvd24nOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkxLCcuL2Fzc2V0cy9zb3J0X3VwJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5MiwnLi9hc3NldHMvc29ydGFibGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzkzLCcuL2Fzc2V0cy9zdGFyUGx1c0VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NCwnLi9hc3NldHMvc3RhclBsdXNGaWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk1LCcuL2Fzc2V0cy9zdGFyX2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5NiwnLi9hc3NldHMvc3Rhcl9lbXB0eV9zcGFjZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU3OTcsJy4vYXNzZXRzL3N0YXJfZmlsbGVkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTc5OCwnLi9hc3NldHMvc3Rhcl9maWxsZWRfc3BhY2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlNzk5LCcuL2Fzc2V0cy9zdGFyX21pbnVzX2VtcHR5JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwMCwnLi9hc3NldHMvc3Rhcl9taW51c19maWxsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAxLCcuL2Fzc2V0cy9zdGF0cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDIsJy4vYXNzZXRzL3N0b3AnOl9EeW5hbWljSW1wb3J0TW9kdWxlODAzLCcuL2Fzc2V0cy9zdG9wX2ZpbGxlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MDQsJy4vYXNzZXRzL3N0b3Bfc2xhc2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlODA1LCcuL2Fzc2V0cy9zdG9yYWdlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNiwnLi9hc3NldHMvc3RyaW5nJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwNywnLi9hc3NldHMvc3VibW9kdWxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwOCwnLi9hc3NldHMvc3VuJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgwOSwnLi9hc3NldHMvc3dhdGNoX2lucHV0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxMCwnLi9hc3NldHMvc3ltbGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTEsJy4vYXNzZXRzL3RhYmxlT2ZDb250ZW50cyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTIsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfY29tcGFjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTMsJy4vYXNzZXRzL3RhYmxlX2RlbnNpdHlfZXhwYW5kZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODE0LCcuL2Fzc2V0cy90YWJsZV9kZW5zaXR5X25vcm1hbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTUsJy4vYXNzZXRzL3RhZyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTYsJy4vYXNzZXRzL3RlYXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODE3LCcuL2Fzc2V0cy90ZW1wZXJhdHVyZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MTgsJy4vYXNzZXRzL3RpbWVSZWZyZXNoJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgxOSwnLi9hc3NldHMvdGltZWxpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODIwLCcuL2Fzc2V0cy90aW1lc2xpZGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyMSwnLi9hc3NldHMvdG9rZW5BbGlhcyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjIsJy4vYXNzZXRzL3Rva2VuQW5ub3RhdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjMsJy4vYXNzZXRzL3Rva2VuQXJyYXknOl9EeW5hbWljSW1wb3J0TW9kdWxlODI0LCcuL2Fzc2V0cy90b2tlbkJpbmFyeSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjUsJy4vYXNzZXRzL3Rva2VuQm9vbGVhbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MjYsJy4vYXNzZXRzL3Rva2VuQ2xhc3MnOl9EeW5hbWljSW1wb3J0TW9kdWxlODI3LCcuL2Fzc2V0cy90b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODI4LCcuL2Fzc2V0cy90b2tlbkNvbnN0YW50JzpfRHluYW1pY0ltcG9ydE1vZHVsZTgyOSwnLi9hc3NldHMvdG9rZW5EYXRlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTgzMCwnLi9hc3NldHMvdG9rZW5EZW5zZVZlY3Rvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzEsJy4vYXNzZXRzL3Rva2VuRWxlbWVudCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzIsJy4vYXNzZXRzL3Rva2VuRW51bSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzMsJy4vYXNzZXRzL3Rva2VuRW51bU1lbWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzQsJy4vYXNzZXRzL3Rva2VuRXZlbnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODM1LCcuL2Fzc2V0cy90b2tlbkV4Y2VwdGlvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzYsJy4vYXNzZXRzL3Rva2VuRmllbGQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODM3LCcuL2Fzc2V0cy90b2tlbkZpbGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODM4LCcuL2Fzc2V0cy90b2tlbkZsYXR0ZW5lZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4MzksJy4vYXNzZXRzL3Rva2VuRnVuY3Rpb24nOl9EeW5hbWljSW1wb3J0TW9kdWxlODQwLCcuL2Fzc2V0cy90b2tlbkdlbyc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDEsJy4vYXNzZXRzL3Rva2VuSGlzdG9ncmFtJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0MiwnLi9hc3NldHMvdG9rZW5JUCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDMsJy4vYXNzZXRzL3Rva2VuSW50ZXJmYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NCwnLi9hc3NldHMvdG9rZW5Kb2luJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg0NSwnLi9hc3NldHMvdG9rZW5LZXknOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ2LCcuL2Fzc2V0cy90b2tlbktleXdvcmQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODQ3LCcuL2Fzc2V0cy90b2tlbk1ldGhvZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDgsJy4vYXNzZXRzL3Rva2VuTWV0cmljQ291bnRlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NDksJy4vYXNzZXRzL3Rva2VuTWV0cmljR2F1Z2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUwLCcuL2Fzc2V0cy90b2tlbk1vZHVsZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTEsJy4vYXNzZXRzL3Rva2VuTmFtZXNwYWNlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1MiwnLi9hc3NldHMvdG9rZW5OZXN0ZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODUzLCcuL2Fzc2V0cy90b2tlbk51bGwnOl9EeW5hbWljSW1wb3J0TW9kdWxlODU0LCcuL2Fzc2V0cy90b2tlbk51bWJlcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTUsJy4vYXNzZXRzL3Rva2VuT2JqZWN0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1NiwnLi9hc3NldHMvdG9rZW5PcGVyYXRvcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTcsJy4vYXNzZXRzL3Rva2VuUGFja2FnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NTgsJy4vYXNzZXRzL3Rva2VuUGFyYW1ldGVyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg1OSwnLi9hc3NldHMvdG9rZW5QZXJjb2xhdG9yJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MCwnLi9hc3NldHMvdG9rZW5Qcm9wZXJ0eSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjEsJy4vYXNzZXRzL3Rva2VuUmFuZ2UnOl9EeW5hbWljSW1wb3J0TW9kdWxlODYyLCcuL2Fzc2V0cy90b2tlblJhbmtGZWF0dXJlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2MywnLi9hc3NldHMvdG9rZW5SYW5rRmVhdHVyZXMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY0LCcuL2Fzc2V0cy90b2tlblJlcG8nOl9EeW5hbWljSW1wb3J0TW9kdWxlODY1LCcuL2Fzc2V0cy90b2tlblNlYXJjaFR5cGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY2LCcuL2Fzc2V0cy90b2tlblNoYXBlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg2NywnLi9hc3NldHMvdG9rZW5TdHJpbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODY4LCcuL2Fzc2V0cy90b2tlblN0cnVjdCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NjksJy4vYXNzZXRzL3Rva2VuU3ltYm9sJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3MCwnLi9hc3NldHMvdG9rZW5UYWcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcxLCcuL2Fzc2V0cy90b2tlblRleHQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODcyLCcuL2Fzc2V0cy90b2tlblRva2VuQ291bnQnOl9EeW5hbWljSW1wb3J0TW9kdWxlODczLCcuL2Fzc2V0cy90b2tlblZhcmlhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg3NCwnLi9hc3NldHMvdHJhaW5pbmcnOl9EeW5hbWljSW1wb3J0TW9kdWxlODc1LCcuL2Fzc2V0cy90cmFzaCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzYsJy4vYXNzZXRzL3VuZm9sZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzcsJy4vYXNzZXRzL3VubGluayc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4NzgsJy4vYXNzZXRzL3VzZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlODc5LCcuL2Fzc2V0cy91c2VyQXZhdGFyJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4MCwnLi9hc3NldHMvdXNlcnMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODgxLCcuL2Fzc2V0cy92ZWN0b3InOl9EeW5hbWljSW1wb3J0TW9kdWxlODgyLCcuL2Fzc2V0cy92aWRlb1BsYXllcic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODMsJy4vYXNzZXRzL3Zpc19hcmVhJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NCwnLi9hc3NldHMvdmlzX2FyZWFfc3RhY2tlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODUsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODYsJy4vYXNzZXRzL3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg4NywnLi9hc3NldHMvdmlzX2Jhcl92ZXJ0aWNhbCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODgsJy4vYXNzZXRzL3Zpc19iYXJfdmVydGljYWxfc3RhY2tlZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4ODksJy4vYXNzZXRzL3Zpc19nYXVnZSc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTAsJy4vYXNzZXRzL3Zpc19nb2FsJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5MSwnLi9hc3NldHMvdmlzX2xpbmUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODkyLCcuL2Fzc2V0cy92aXNfbWFwX2Nvb3JkaW5hdGUnOl9EeW5hbWljSW1wb3J0TW9kdWxlODkzLCcuL2Fzc2V0cy92aXNfbWFwX3JlZ2lvbic6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTQsJy4vYXNzZXRzL3Zpc19tZXRyaWMnOl9EeW5hbWljSW1wb3J0TW9kdWxlODk1LCcuL2Fzc2V0cy92aXNfcGllJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NiwnLi9hc3NldHMvdmlzX3RhYmxlJzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5NywnLi9hc3NldHMvdmlzX3RhZ19jbG91ZCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU4OTgsJy4vYXNzZXRzL3Zpc190ZXh0JzpfRHluYW1pY0ltcG9ydE1vZHVsZTg5OSwnLi9hc3NldHMvdmlzX3RpbWVsaW9uJzpfRHluYW1pY0ltcG9ydE1vZHVsZTkwMCwnLi9hc3NldHMvdmlzX3ZlZ2EnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAxLCcuL2Fzc2V0cy92aXNfdmlzdWFsX2J1aWxkZXInOl9EeW5hbWljSW1wb3J0TW9kdWxlOTAyLCcuL2Fzc2V0cy93b3JkV3JhcCc6X0R5bmFtaWNJbXBvcnRNb2R1bGU5MDMsJy4vYXNzZXRzL3dvcmRXcmFwRGlzYWJsZWQnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA0LCcuL2Fzc2V0cy93cmVuY2gnOl9EeW5hbWljSW1wb3J0TW9kdWxlOTA1fTtcbmZ1bmN0aW9uIF9EeW5hbWljSW1wb3J0KHBhdGgpIHtjb25zdCBtb2Q9X0R5bmFtaWNJbXBvcnRNb2R1bGVNYXBbcGF0aF07bW9kW1N5bWJvbC50b1N0cmluZ1RhZ109J01vZHVsZSc7cmV0dXJuIFByb21pc2UucmVzb2x2ZShtb2QpOyB9XG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJ0eXBlXCIsIFwic2l6ZVwiLCBcImNvbG9yXCIsIFwiY2xhc3NOYW1lXCIsIFwidGFiSW5kZXhcIiwgXCJ0aXRsZVwiLCBcIm9uSWNvbkxvYWRcIiwgXCJ0aGVtZVwiLCBcInN0eWxlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB0eXBlVG9QYXRoTWFwIH0gZnJvbSAnLi9pY29uX21hcCc7XG5pbXBvcnQgeyBpY29uIGFzIGVtcHR5IH0gZnJvbSAnLi9hc3NldHMvZW1wdHknO1xuaW1wb3J0IHsgZW5xdWV1ZVN0YXRlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVhY3QnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yLCB3aXRoRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5leHBvcnQgeyBDT0xPUlMgfSBmcm9tICcuL25hbWVkX2NvbG9ycyc7XG5pbXBvcnQgeyBpc05hbWVkQ29sb3IgfSBmcm9tICcuL25hbWVkX2NvbG9ycyc7XG5pbXBvcnQgeyBldWlJY29uU3R5bGVzIH0gZnJvbSAnLi9pY29uLnN0eWxlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgZ2V0SXNBcHBJY29uID0gZnVuY3Rpb24gZ2V0SXNBcHBJY29uKGljb25UeXBlKSB7XG4gIGlmICh0eXBlb2YgaWNvblR5cGUgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gIGlmIChpY29uVHlwZSA9PT0gJ2RhdGFWaXN1YWxpemVyJykgcmV0dXJuIHRydWU7IC8vIFNwZWNpYWwgY2FzZVxuXG4gIGlmIChpY29uVHlwZS5pbmRleE9mKCdkYXRhOicpID09PSAwKSByZXR1cm4gZmFsc2U7IC8vIElubGluZSBkYXRhIFVSSXMgc2hvdWxkIGJlIHNob3J0LWNpcmN1aXRlZCBmb3IgcGVyZm9ybWFuY2VcblxuICByZXR1cm4gaWNvblR5cGUuZW5kc1dpdGgoJ0FwcCcpIHx8IGljb25UeXBlLmVuZHNXaXRoKCdKb2InKTtcbn07XG5cbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvUGF0aE1hcCk7XG5leHBvcnQgdmFyIFNJWkVTID0gWydvcmlnaW5hbCcsICdzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcblxuZnVuY3Rpb24gaXNFdWlJY29uVHlwZSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ3N0cmluZycgJiYgdHlwZVRvUGF0aE1hcC5oYXNPd25Qcm9wZXJ0eSh4KTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5pdGlhbEljb24oaWNvbikge1xuICBpZiAoaWNvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChpc0V1aUljb25UeXBlKGljb24pKSB7XG4gICAgaWYgKGljb25Db21wb25lbnRDYWNoZS5oYXNPd25Qcm9wZXJ0eShpY29uKSkge1xuICAgICAgcmV0dXJuIGljb25Db21wb25lbnRDYWNoZVtpY29uXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGljb247XG59XG5cbnZhciBnZW5lcmF0ZUlkID0gaHRtbElkR2VuZXJhdG9yKCk7XG52YXIgaWNvbkNvbXBvbmVudENhY2hlID0ge307XG5leHBvcnQgdmFyIGNsZWFySWNvbkNvbXBvbmVudENhY2hlID0gZnVuY3Rpb24gY2xlYXJJY29uQ29tcG9uZW50Q2FjaGUoaWNvblR5cGUpIHtcbiAgaWYgKGljb25UeXBlICE9IG51bGwpIHtcbiAgICBkZWxldGUgaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXTtcbiAgfSBlbHNlIHtcbiAgICBpY29uQ29tcG9uZW50Q2FjaGUgPSB7fTtcbiAgfVxufTtcbmV4cG9ydCB2YXIgYXBwZW5kSWNvbkNvbXBvbmVudENhY2hlID0gZnVuY3Rpb24gYXBwZW5kSWNvbkNvbXBvbmVudENhY2hlKGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwKSB7XG4gIGZvciAodmFyIF9pY29uVHlwZSBpbiBpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcCkge1xuICAgIGlmIChpY29uVHlwZVRvSWNvbkNvbXBvbmVudE1hcC5oYXNPd25Qcm9wZXJ0eShfaWNvblR5cGUpKSB7XG4gICAgICBpY29uQ29tcG9uZW50Q2FjaGVbX2ljb25UeXBlXSA9IGljb25UeXBlVG9JY29uQ29tcG9uZW50TWFwW19pY29uVHlwZV07XG4gICAgfVxuICB9XG59O1xuZXhwb3J0IHZhciBFdWlJY29uQ2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlJY29uQ2xhc3MsIF9QdXJlQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUljb25DbGFzcyk7XG5cbiAgZnVuY3Rpb24gRXVpSWNvbkNsYXNzKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUljb25DbGFzcyk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpc01vdW50ZWRcIiwgdHJ1ZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibG9hZEljb25Db21wb25lbnRcIiwgZnVuY3Rpb24gKGljb25UeXBlKSB7XG4gICAgICBpZiAoaWNvbkNvbXBvbmVudENhY2hlLmhhc093blByb3BlcnR5KGljb25UeXBlKSkge1xuICAgICAgICAvLyBleGlzdHMgaW4gY2FjaGVcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgbmVlZGVkTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgaWNvbjogaWNvbkNvbXBvbmVudENhY2hlW2ljb25UeXBlXVxuICAgICAgICB9KTtcblxuICAgICAgICBfdGhpcy5vbkljb25Mb2FkKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfRHluYW1pY0ltcG9ydChgLi9hc3NldHMvJHt0eXBlVG9QYXRoTWFwW2ljb25UeXBlXX1gKS50aGVuKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBpY29uID0gX3JlZi5pY29uO1xuICAgICAgICBpY29uQ29tcG9uZW50Q2FjaGVbaWNvblR5cGVdID0gaWNvbjtcbiAgICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuaXNNb3VudGVkICYmIF90aGlzLnByb3BzLnR5cGUgPT09IGljb25UeXBlKSB7XG4gICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGljb246IGljb24sXG4gICAgICAgICAgICAgIGljb25UaXRsZTogaWNvblR5cGUsXG4gICAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICAgIH0sIF90aGlzLm9uSWNvbkxvYWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkljb25Mb2FkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBvbkljb25Mb2FkID0gX3RoaXMucHJvcHMub25JY29uTG9hZDtcblxuICAgICAgaWYgKG9uSWNvbkxvYWQpIHtcbiAgICAgICAgb25JY29uTG9hZCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuICAgIHZhciBpbml0aWFsSWNvbiA9IGdldEluaXRpYWxJY29uKHR5cGUpO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgaWNvbjogaW5pdGlhbEljb24sXG4gICAgICBpY29uVGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBuZWVkZWRMb2FkaW5nOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUljb25DbGFzcywgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgdHlwZSA9IHRoaXMucHJvcHMudHlwZTtcblxuICAgICAgaWYgKGlzRXVpSWNvblR5cGUodHlwZSkgJiYgdGhpcy5zdGF0ZS5pY29uID09IG51bGwpIHtcbiAgICAgICAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLW1vdW50LXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBuZWVkZWRMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2FkSWNvbkNvbXBvbmVudCh0eXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25JY29uTG9hZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIHR5cGUgPSB0aGlzLnByb3BzLnR5cGU7XG5cbiAgICAgIGlmICh0eXBlICE9PSBwcmV2UHJvcHMudHlwZSkge1xuICAgICAgICBpZiAoaXNFdWlJY29uVHlwZSh0eXBlKSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgbmVlZGVkTG9hZGluZzogaWNvbkNvbXBvbmVudENhY2hlLmhhc093blByb3BlcnR5KHR5cGUpLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2FkSWNvbkNvbXBvbmVudCh0eXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tZGlkLXVwZGF0ZS1zZXQtc3RhdGVcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGljb246IHR5cGUsXG4gICAgICAgICAgICBuZWVkZWRMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgdHlwZSA9IF90aGlzJHByb3BzLnR5cGUsXG4gICAgICAgICAgX3RoaXMkcHJvcHMkc2l6ZSA9IF90aGlzJHByb3BzLnNpemUsXG4gICAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF90aGlzJHByb3BzJHNpemUsXG4gICAgICAgICAgY29sb3IgPSBfdGhpcyRwcm9wcy5jb2xvcixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgdGFiSW5kZXggPSBfdGhpcyRwcm9wcy50YWJJbmRleCxcbiAgICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzLnRpdGxlLFxuICAgICAgICAgIG9uSWNvbkxvYWQgPSBfdGhpcyRwcm9wcy5vbkljb25Mb2FkLFxuICAgICAgICAgIHRoZW1lID0gX3RoaXMkcHJvcHMudGhlbWUsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wcy5zdHlsZSxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHN0YXRlLmlzTG9hZGluZyxcbiAgICAgICAgICBuZWVkZWRMb2FkaW5nID0gX3RoaXMkc3RhdGUubmVlZGVkTG9hZGluZyxcbiAgICAgICAgICBpY29uVGl0bGUgPSBfdGhpcyRzdGF0ZS5pY29uVGl0bGU7XG4gICAgICB2YXIgaXNMb2FkZWQgPSAhaXNMb2FkaW5nICYmIG5lZWRlZExvYWRpbmc7XG4gICAgICB2YXIgaXNDdXN0b21Db2xvciA9IGNvbG9yICYmICFpc05hbWVkQ29sb3IoY29sb3IpO1xuICAgICAgdmFyIG9wdGlvbmFsQ3VzdG9tU3R5bGVzID0gaXNDdXN0b21Db2xvciA/IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0sIHN0eWxlKSA6IHN0eWxlOyAvLyBUaGVzZSBpY29ucyBhcmUgYSBsaXR0bGUgc3BlY2lhbCBhbmQgZ2V0IHNvbWUgZXh0cmEgQ1NTIGZsZXhpYmlsaXR5XG5cbiAgICAgIHZhciBpc0FwcEljb24gPSBnZXRJc0FwcEljb24odHlwZSk7IC8vIEFwcCBjb2xvciBzdHlsZXMgYXJlIG9ubHkgYXBwbGllZCBpZiBubyBjb2xvciBpcyBwYXNzZWQgb3IgaWYgY29sb3I9XCJkZWZhdWx0XCIgaXMgcGFzc2VkXG5cbiAgICAgIHZhciBhcHBJY29uSGFzQ29sb3IgPSBjb2xvciAmJiBjb2xvciAhPT0gJ2RlZmF1bHQnOyAvLyBUaGUgRWxhc3RpYyBsb2dvIHNob3VsZCBiZSBhbiBvdXRsaW5lIGluIHRleHQgYW5kIGdob3N0IG1vZGVcblxuICAgICAgdmFyIGlzRWxhc3RpY0xvZ29PdXRsaW5lID0gdHlwZSA9PT0gJ2xvZ29FbGFzdGljJyAmJiAoY29sb3IgPT09ICdnaG9zdCcgfHwgY29sb3IgPT09ICd0ZXh0Jyk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUljb24nLCBjbGFzc05hbWUpOyAvLyBFbW90aW9uIHN0eWxlc1xuXG4gICAgICB2YXIgc3R5bGVzID0gZXVpSWNvblN0eWxlcyh0aGVtZSk7XG4gICAgICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJY29uLCBzdHlsZXNbc2l6ZV0sIGNvbG9yICYmIGlzTmFtZWRDb2xvcihjb2xvcikgJiYgc3R5bGVzW2NvbG9yXSwgaXNDdXN0b21Db2xvciAmJiBzdHlsZXMuY3VzdG9tQ29sb3IsIGlzRWxhc3RpY0xvZ29PdXRsaW5lICYmIHN0eWxlcy5sb2dvRWxhc3RpY091dGxpbmUsIGlzQXBwSWNvbiAmJiAhYXBwSWNvbkhhc0NvbG9yICYmIHN0eWxlcy5hcHAsIGlzTG9hZGluZyAmJiBzdHlsZXMuaXNMb2FkaW5nLCAhaXNMb2FkaW5nICYmIG5lZWRlZExvYWRpbmcgJiYgc3R5bGVzLmlzTG9hZGVkXTtcbiAgICAgIHZhciBpY29uID0gdGhpcy5zdGF0ZS5pY29uIHx8IGVtcHR5OyAvLyBUaGlzIGlzIGEgZml4IGZvciBJRSBhbmQgRWRnZSwgd2hpY2ggaWdub3JlcyB0YWJpbmRleD1cIi0xXCIgb24gYW4gU1ZHLCBidXQgcmVzcGVjdHNcbiAgICAgIC8vIGZvY3VzYWJsZT1cImZhbHNlXCIuXG4gICAgICAvLyAgIC0gSWYgdGhlcmUncyBubyB0YWJpbmRleCBzcGVjaWZpZWQsIHdlJ2xsIGRlZmF1bHQgdGhlIGljb24gdG8gbm90IGJlIGZvY3VzYWJsZSxcbiAgICAgIC8vICAgICB3aGljaCBpcyBob3cgU1ZHcyBiZWhhdmUgaW4gQ2hyb21lLCBTYWZhcmksIGFuZCBGRi5cbiAgICAgIC8vICAgLSBJZiB0YWJpbmRleCBpcyAtMSwgdGhlbiB0aGUgY29uc3VtZXIgd2FudHMgdGhlIGljb24gdG8gYmUgZm9jdXNhYmxlIGJ5IEphdmFTY3JpcHQgb25seS5cbiAgICAgIC8vICAgLSBJZiB0aGUgdGFiaW5kZXggaXMgMCwgdGhlIGNvbnN1bWVyIHdhbnRzIHRoZSBpY29uIHRvIGJlIGtleWJvYXJkIGZvY3VzYWJsZS5cblxuICAgICAgdmFyIGZvY3VzYWJsZSA9IHRhYkluZGV4ID09IG51bGwgfHwgdGFiSW5kZXggPT09IC0xID8gJ2ZhbHNlJyA6ICd0cnVlJztcblxuICAgICAgaWYgKHR5cGVvZiBpY29uID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImltZ1wiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgYWx0OiB0aXRsZSA/IHRpdGxlIDogJycsXG4gICAgICAgICAgc3JjOiBpY29uLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXhcbiAgICAgICAgfSwgcmVzdCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIFN2ZyA9IGljb247IC8vIElmIGl0J3MgYW4gZW1wdHkgaWNvbiwgb3IgaWYgdGhlcmUgaXMgbm8gYXJpYS1sYWJlbCwgYXJpYS1sYWJlbGxlZGJ5LCBvciB0aXRsZSBpdCBnZXRzIGFyaWEtaGlkZGVuIHRydWVcblxuICAgICAgICB2YXIgaXNBcmlhSGlkZGVuID0gaWNvbiA9PT0gZW1wdHkgfHwgISh0aGlzLnByb3BzWydhcmlhLWxhYmVsJ10gfHwgdGhpcy5wcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10gfHwgdGhpcy5wcm9wcy50aXRsZSk7XG4gICAgICAgIHZhciBoaWRlSWNvbkVtcHR5ID0gaXNBcmlhSGlkZGVuICYmIHtcbiAgICAgICAgICAnYXJpYS1oaWRkZW4nOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHZhciB0aXRsZUlkOyAvLyBJZiBubyBhcmlhLWxhYmVsIG9yIGFyaWEtbGFiZWxsZWRieSBpcyBwcm92aWRlZCBidXQgdGhlcmUncyBhIHRpdGxlLCBhIHRpdGxlSWQgaXMgZ2VuZXJhdGVkXG4gICAgICAgIC8vICBUaGUgc3ZnIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgZ2V0cyB0aGlzIHRpdGxlSWRcbiAgICAgICAgLy8gIFRoZSBzdmcgdGl0bGUgZWxlbWVudCBnZXRzIHRoaXMgdGl0bGVJZCBhcyBhbiBpZFxuXG4gICAgICAgIGlmICghdGhpcy5wcm9wc1snYXJpYS1sYWJlbCddICYmICF0aGlzLnByb3BzWydhcmlhLWxhYmVsbGVkYnknXSAmJiB0aXRsZSkge1xuICAgICAgICAgIHRpdGxlSWQgPSB7XG4gICAgICAgICAgICB0aXRsZUlkOiBnZW5lcmF0ZUlkKClcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goU3ZnLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlcyxcbiAgICAgICAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICAgICAgZm9jdXNhYmxlOiBmb2N1c2FibGUsXG4gICAgICAgICAgcm9sZTogXCJpbWdcIixcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgXCJkYXRhLWljb24tdHlwZVwiOiBpY29uVGl0bGUsXG4gICAgICAgICAgXCJkYXRhLWlzLWxvYWRlZFwiOiBpc0xvYWRlZCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgXCJkYXRhLWlzLWxvYWRpbmdcIjogaXNMb2FkaW5nIHx8IHVuZGVmaW5lZFxuICAgICAgICB9LCB0aXRsZUlkLCByZXN0LCBoaWRlSWNvbkVtcHR5KSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUljb25DbGFzcztcbn0oUHVyZUNvbXBvbmVudCk7XG5FdWlJY29uQ2xhc3MucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBgRW51bWAgaXMgYW55IG9mIHRoZSBuYW1lZCBpY29ucyBsaXN0ZWQgaW4gdGhlIGRvY3MsIGBzdHJpbmdgIGlzIHVzdWFsbHkgYSBVUkwgdG8gYW4gU1ZHIGZpbGUsIGFuZCBgZWxlbWVudFR5cGVgIGlzIGFueSBSZWFjdCBTVkcgY29tcG9uZW50XG4gICAgICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIE9uZSBvZiBFVUkncyBjb2xvciBwYWxldHRlIG9yIGEgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9jb2xvcl92YWx1ZS5cbiAgICAgICAqIE5vdGUgdGhhdCBjb2xvcmluZyBvbmx5IHdvcmtzIGlmIHlvdXIgU1ZHIGlzIHJlbW92ZWQgb2YgZmlsbCBhdHRyaWJ1dGVzLlxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogTm90ZSB0aGF0IGV2ZXJ5IHNpemUgb3RoZXIgdGhhbiBgb3JpZ2luYWxgIGFzc3VtZXMgdGhlIHByb3ZpZGVkIFNWRyBzaXRzIG9uIGEgc3F1YXJlIHZpZXdib3guXG4gICAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIERlc2NyaXB0aXZlIHRpdGxlIGZvciBuYW1pbmcgdGhlIGljb24gYmFzZWQgb24gaXRzIHVzZVxuICAgICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHRpdGxlIGVsZW1lbnRcbiAgICAgICAqL1xuICB0aXRsZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogSXRzIHZhbHVlIHNob3VsZCBiZSBvbmUgb3IgbW9yZSBlbGVtZW50IElEc1xuICAgICAgICovXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBDYWxsYmFjayB3aGVuIHRoZSBpY29uIGhhcyBiZWVuIGxvYWRlZCAmIHJlbmRlcmVkXG4gICAgICAgKi9cbiAgb25JY29uTG9hZDogUHJvcFR5cGVzLmZ1bmNcbn07XG5leHBvcnQgdmFyIEV1aUljb24gPSB3aXRoRXVpVGhlbWUoRXVpSWNvbkNsYXNzKTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgdHlwZVRvUGF0aE1hcCA9IHtcbiAgYWNjZXNzaWJpbGl0eTogJ2FjY2Vzc2liaWxpdHknLFxuICBhZGREYXRhQXBwOiAnYXBwX2FkZF9kYXRhJyxcbiAgYWR2YW5jZWRTZXR0aW5nc0FwcDogJ2FwcF9hZHZhbmNlZF9zZXR0aW5ncycsXG4gIGFnZW50QXBwOiAnYXBwX2ZsZWV0JyxcbiAgYWdncmVnYXRlOiAnYWdncmVnYXRlJyxcbiAgYWxlcnQ6ICdhbGVydCcsXG4gIGFuYWx5emVFdmVudDogJ2FuYWx5emVFdmVudCcsXG4gIGFubm90YXRpb246ICdhbm5vdGF0aW9uJyxcbiAgYXBtQXBwOiAnYXBwX2FwbScsXG4gIGFwbVRyYWNlOiAnYXBtX3RyYWNlJyxcbiAgYXBwU2VhcmNoQXBwOiAnYXBwX2FwcF9zZWFyY2gnLFxuICBhcHBzOiAnYXBwcycsXG4gIGFycm93RG93bjogJ2Fycm93X2Rvd24nLFxuICBhcnJvd0xlZnQ6ICdhcnJvd19sZWZ0JyxcbiAgYXJyb3dSaWdodDogJ2Fycm93X3JpZ2h0JyxcbiAgYXJyb3dVcDogJ2Fycm93X3VwJyxcbiAgYXJyb3dTdGFydDogJ2Fycm93U3RhcnQnLFxuICBhcnJvd0VuZDogJ2Fycm93RW5kJyxcbiAgYXN0ZXJpc2s6ICdhc3RlcmlzaycsXG4gIGF1ZGl0YmVhdEFwcDogJ2FwcF9hdWRpdGJlYXQnLFxuICBiZWFrZXI6ICdiZWFrZXInLFxuICBiZWxsOiAnYmVsbCcsXG4gIGJlbGxTbGFzaDogJ2JlbGxTbGFzaCcsXG4gIGJvbHQ6ICdib2x0JyxcbiAgYm94ZXNIb3Jpem9udGFsOiAnYm94ZXNfaG9yaXpvbnRhbCcsXG4gIGJveGVzVmVydGljYWw6ICdib3hlc192ZXJ0aWNhbCcsXG4gIGJyYW5jaDogJ2JyYW5jaCcsXG4gIGJyYW5jaFVzZXI6ICdicmFuY2hVc2VyJyxcbiAgYnJvb206ICdicm9vbScsXG4gIGJydXNoOiAnYnJ1c2gnLFxuICBidWc6ICdidWcnLFxuICBidWxsc2V5ZTogJ2J1bGxzZXllJyxcbiAgY2FsZW5kYXI6ICdjYWxlbmRhcicsXG4gIGNhbnZhc0FwcDogJ2FwcF9jYW52YXMnLFxuICBjYXNlc0FwcDogJ2FwcF9jYXNlcycsXG4gIGNoZWNrOiAnY2hlY2snLFxuICBjaGVja0luQ2lyY2xlRmlsbGVkOiAnY2hlY2tJbkNpcmNsZUZpbGxlZCcsXG4gIGNoZWVyOiAnY2hlZXInLFxuICBjbGFzc2lmaWNhdGlvbkpvYjogJ21sX2NsYXNzaWZpY2F0aW9uX2pvYicsXG4gIGNsb2NrOiAnY2xvY2snLFxuICBjbG91ZERyaXp6bGU6ICdjbG91ZERyaXp6bGUnLFxuICBjbG91ZFN0b3JteTogJ2Nsb3VkU3Rvcm15JyxcbiAgY2xvdWRTdW5ueTogJ2Nsb3VkU3VubnknLFxuICBjbHVzdGVyOiAnY2x1c3RlcicsXG4gIGNvZGVBcHA6ICdhcHBfY29kZScsXG4gIGNvbG9yOiAnY29sb3InLFxuICBjb21wdXRlOiAnY29tcHV0ZScsXG4gIGNvbnNvbGU6ICdjb25zb2xlJyxcbiAgY29uc29sZUFwcDogJ2FwcF9jb25zb2xlJyxcbiAgY29udGFpbmVyOiAnY29udGFpbmVyJyxcbiAgY29udGludWl0eUFib3ZlOiAnY29udGludWl0eUFib3ZlJyxcbiAgY29udGludWl0eUFib3ZlQmVsb3c6ICdjb250aW51aXR5QWJvdmVCZWxvdycsXG4gIGNvbnRpbnVpdHlCZWxvdzogJ2NvbnRpbnVpdHlCZWxvdycsXG4gIGNvbnRpbnVpdHlXaXRoaW46ICdjb250aW51aXR5V2l0aGluJyxcbiAgY29udHJvbHNIb3Jpem9udGFsOiAnY29udHJvbHNfaG9yaXpvbnRhbCcsXG4gIGNvbnRyb2xzVmVydGljYWw6ICdjb250cm9sc192ZXJ0aWNhbCcsXG4gIGNvcHk6ICdjb3B5JyxcbiAgY29weUNsaXBib2FyZDogJ2NvcHlfY2xpcGJvYXJkJyxcbiAgY3JlYXRlQWR2YW5jZWRKb2I6ICdtbF9jcmVhdGVfYWR2YW5jZWRfam9iJyxcbiAgY3JlYXRlTXVsdGlNZXRyaWNKb2I6ICdtbF9jcmVhdGVfbXVsdGlfbWV0cmljX2pvYicsXG4gIGNyZWF0ZVBvcHVsYXRpb25Kb2I6ICdtbF9jcmVhdGVfcG9wdWxhdGlvbl9qb2InLFxuICBjcmVhdGVTaW5nbGVNZXRyaWNKb2I6ICdtbF9jcmVhdGVfc2luZ2xlX21ldHJpY19qb2InLFxuICBjcm9zczogJ2Nyb3NzJyxcbiAgY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHA6ICdhcHBfY3Jvc3NfY2x1c3Rlcl9yZXBsaWNhdGlvbicsXG4gIGNyb3NzSW5BQ2lyY2xlRmlsbGVkOiAnY3Jvc3NJbkFDaXJjbGVGaWxsZWQnLFxuICBjcm9zc2hhaXJzOiAnY3Jvc3NoYWlycycsXG4gIGN1cnJlbmN5OiAnY3VycmVuY3knLFxuICBjdXQ6ICdjdXQnLFxuICBkYXNoYm9hcmRBcHA6ICdhcHBfZGFzaGJvYXJkJyxcbiAgZGF0YVZpc3VhbGl6ZXI6ICdtbF9kYXRhX3Zpc3VhbGl6ZXInLFxuICBkYXRhYmFzZTogJ2RhdGFiYXNlJyxcbiAgZGVza3RvcDogJ2Rlc2t0b3AnLFxuICBkZXZUb29sc0FwcDogJ2FwcF9kZXZ0b29scycsXG4gIGRpc2NvdmVyQXBwOiAnYXBwX2Rpc2NvdmVyJyxcbiAgZG9jdW1lbnQ6ICdkb2N1bWVudCcsXG4gIGRvY3VtZW50RWRpdDogJ2RvY3VtZW50RWRpdCcsXG4gIGRvY3VtZW50YXRpb246ICdkb2N1bWVudGF0aW9uJyxcbiAgZG9jdW1lbnRzOiAnZG9jdW1lbnRzJyxcbiAgZG90OiAnZG90JyxcbiAgZG91YmxlQXJyb3dMZWZ0OiAnZG91YmxlQXJyb3dMZWZ0JyxcbiAgZG91YmxlQXJyb3dSaWdodDogJ2RvdWJsZUFycm93UmlnaHQnLFxuICBkb3dubG9hZDogJ2Rvd25sb2FkJyxcbiAgZWRpdG9yQWxpZ25DZW50ZXI6ICdlZGl0b3JfYWxpZ25fY2VudGVyJyxcbiAgZWRpdG9yQWxpZ25MZWZ0OiAnZWRpdG9yX2FsaWduX2xlZnQnLFxuICBlZGl0b3JBbGlnblJpZ2h0OiAnZWRpdG9yX2FsaWduX3JpZ2h0JyxcbiAgZWRpdG9yQm9sZDogJ2VkaXRvcl9ib2xkJyxcbiAgZWRpdG9yQ2hlY2tsaXN0OiAnZWRpdG9yX2NoZWNrbGlzdCcsXG4gIGVkaXRvckNvZGVCbG9jazogJ2VkaXRvcl9jb2RlX2Jsb2NrJyxcbiAgZWRpdG9yQ29tbWVudDogJ2VkaXRvcl9jb21tZW50JyxcbiAgZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWw6ICdlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbCcsXG4gIGVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbDogJ2VkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCcsXG4gIGVkaXRvckhlYWRpbmc6ICdlZGl0b3JfaGVhZGluZycsXG4gIGVkaXRvckl0YWxpYzogJ2VkaXRvcl9pdGFsaWMnLFxuICBlZGl0b3JJdGVtQWxpZ25Cb3R0b206ICdlZGl0b3JJdGVtQWxpZ25Cb3R0b20nLFxuICBlZGl0b3JJdGVtQWxpZ25DZW50ZXI6ICdlZGl0b3JJdGVtQWxpZ25DZW50ZXInLFxuICBlZGl0b3JJdGVtQWxpZ25MZWZ0OiAnZWRpdG9ySXRlbUFsaWduTGVmdCcsXG4gIGVkaXRvckl0ZW1BbGlnbk1pZGRsZTogJ2VkaXRvckl0ZW1BbGlnbk1pZGRsZScsXG4gIGVkaXRvckl0ZW1BbGlnblJpZ2h0OiAnZWRpdG9ySXRlbUFsaWduUmlnaHQnLFxuICBlZGl0b3JJdGVtQWxpZ25Ub3A6ICdlZGl0b3JJdGVtQWxpZ25Ub3AnLFxuICBlZGl0b3JMaW5rOiAnZWRpdG9yX2xpbmsnLFxuICBlZGl0b3JPcmRlcmVkTGlzdDogJ2VkaXRvcl9vcmRlcmVkX2xpc3QnLFxuICBlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQ6ICdlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQnLFxuICBlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0OiAnZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCcsXG4gIGVkaXRvclBvc2l0aW9uVG9wTGVmdDogJ2VkaXRvclBvc2l0aW9uVG9wTGVmdCcsXG4gIGVkaXRvclBvc2l0aW9uVG9wUmlnaHQ6ICdlZGl0b3JQb3NpdGlvblRvcFJpZ2h0JyxcbiAgZWRpdG9yUmVkbzogJ2VkaXRvcl9yZWRvJyxcbiAgZWRpdG9yU3RyaWtlOiAnZWRpdG9yX3N0cmlrZScsXG4gIGVkaXRvclRhYmxlOiAnZWRpdG9yX3RhYmxlJyxcbiAgZWRpdG9yVW5kZXJsaW5lOiAnZWRpdG9yX3VuZGVybGluZScsXG4gIGVkaXRvclVuZG86ICdlZGl0b3JfdW5kbycsXG4gIGVkaXRvclVub3JkZXJlZExpc3Q6ICdlZGl0b3JfdW5vcmRlcmVkX2xpc3QnLFxuICBlbWFpbDogJ2VtYWlsJyxcbiAgZW1wdHk6ICdlbXB0eScsXG4gIGVtc0FwcDogJ2FwcF9lbXMnLFxuICBlcWw6ICdlcWwnLFxuICBlcmFzZXI6ICdlcmFzZXInLFxuICBleGl0OiAnZXhpdCcsXG4gIGV4cGFuZDogJ2V4cGFuZCcsXG4gIGV4cGFuZE1pbmk6ICdleHBhbmRNaW5pJyxcbiAgZXhwb3J0QWN0aW9uOiAnZXhwb3J0JyxcbiAgZXllOiAnZXllJyxcbiAgZXllQ2xvc2VkOiAnZXllX2Nsb3NlZCcsXG4gIGZhY2VIYXBweTogJ2ZhY2VfaGFwcHknLFxuICBmYWNlTmV1dHJhbDogJ2ZhY2VfbmV1dHJhbCcsXG4gIGZhY2VTYWQ6ICdmYWNlX3NhZCcsXG4gIGZpbGViZWF0QXBwOiAnYXBwX2ZpbGViZWF0JyxcbiAgZmlsdGVyOiAnZmlsdGVyJyxcbiAgZmxhZzogJ2ZsYWcnLFxuICBmbGVldEFwcDogJ2FwcF9hZ2VudCcsXG4gIGZvbGQ6ICdmb2xkJyxcbiAgZm9sZGVyQ2hlY2s6ICdmb2xkZXJfY2hlY2snLFxuICBmb2xkZXJDbG9zZWQ6ICdmb2xkZXJfY2xvc2VkJyxcbiAgZm9sZGVyRXhjbGFtYXRpb246ICdmb2xkZXJfZXhjbGFtYXRpb24nLFxuICBmb2xkZXJPcGVuOiAnZm9sZGVyX29wZW4nLFxuICBmcmFtZU5leHQ6ICdmcmFtZU5leHQnLFxuICBmcmFtZVByZXZpb3VzOiAnZnJhbWVQcmV2aW91cycsXG4gIGZ1bGxTY3JlZW46ICdmdWxsX3NjcmVlbicsXG4gIGZ1bGxTY3JlZW5FeGl0OiAnZnVsbFNjcmVlbkV4aXQnLFxuICBmdW5jdGlvbjogJ2Z1bmN0aW9uJyxcbiAgZ2VhcjogJ2dlYXInLFxuICBnaXNBcHA6ICdhcHBfZ2lzJyxcbiAgZ2xhc3NlczogJ2dsYXNzZXMnLFxuICBnbG9iZTogJ2dsb2JlJyxcbiAgZ3JhYjogJ2dyYWInLFxuICBncmFiSG9yaXpvbnRhbDogJ2dyYWJfaG9yaXpvbnRhbCcsXG4gIGdyYXBoQXBwOiAnYXBwX2dyYXBoJyxcbiAgZ3JpZDogJ2dyaWQnLFxuICBncm9rQXBwOiAnYXBwX2dyb2snLFxuICBoZWFydDogJ2hlYXJ0JyxcbiAgaGVhcnRiZWF0QXBwOiAnYXBwX2hlYXJ0YmVhdCcsXG4gIGhlYXRtYXA6ICdoZWF0bWFwJyxcbiAgaGVscDogJ2hlbHAnLFxuICBob21lOiAnaG9tZScsXG4gIGlJbkNpcmNsZTogJ2lJbkNpcmNsZScsXG4gIGltYWdlOiAnaW1hZ2UnLFxuICBpbXBvcnRBY3Rpb246ICdpbXBvcnQnLFxuICBpbmRleENsb3NlOiAnaW5kZXhfY2xvc2UnLFxuICBpbmRleEVkaXQ6ICdpbmRleF9lZGl0JyxcbiAgaW5kZXhGbHVzaDogJ2luZGV4X2ZsdXNoJyxcbiAgaW5kZXhNYW5hZ2VtZW50QXBwOiAnYXBwX2luZGV4X21hbmFnZW1lbnQnLFxuICBpbmRleE1hcHBpbmc6ICdpbmRleF9tYXBwaW5nJyxcbiAgaW5kZXhPcGVuOiAnaW5kZXhfb3BlbicsXG4gIGluZGV4UGF0dGVybkFwcDogJ2FwcF9pbmRleF9wYXR0ZXJuJyxcbiAgaW5kZXhSb2xsdXBBcHA6ICdhcHBfaW5kZXhfcm9sbHVwJyxcbiAgaW5kZXhSdW50aW1lOiAnaW5kZXhfcnVudGltZScsXG4gIGluZGV4U2V0dGluZ3M6ICdpbmRleF9zZXR0aW5ncycsXG4gIGlucHV0T3V0cHV0OiAnaW5wdXRPdXRwdXQnLFxuICBpbnNwZWN0OiAnaW5zcGVjdCcsXG4gIGludmVydDogJ2ludmVydCcsXG4gIGlwOiAnaXAnLFxuICBrZXlib2FyZDogJ2tleWJvYXJkJyxcbiAga3FsRmllbGQ6ICdrcWxfZmllbGQnLFxuICBrcWxGdW5jdGlvbjogJ2txbF9mdW5jdGlvbicsXG4gIGtxbE9wZXJhbmQ6ICdrcWxfb3BlcmFuZCcsXG4gIGtxbFNlbGVjdG9yOiAna3FsX3NlbGVjdG9yJyxcbiAga3FsVmFsdWU6ICdrcWxfdmFsdWUnLFxuICBrdWJlcm5ldGVzTm9kZTogJ2t1YmVybmV0ZXNOb2RlJyxcbiAga3ViZXJuZXRlc1BvZDogJ2t1YmVybmV0ZXNQb2QnLFxuICBsYXllcnM6ICdsYXllcnMnLFxuICBsZW5zQXBwOiAnYXBwX2xlbnMnLFxuICBsZXR0ZXJpbmc6ICdsZXR0ZXJpbmcnLFxuICBsaW5lRGFzaGVkOiAnbGluZURhc2hlZCcsXG4gIGxpbmVEb3R0ZWQ6ICdsaW5lRG90dGVkJyxcbiAgbGluZVNvbGlkOiAnbGluZVNvbGlkJyxcbiAgbGluazogJ2xpbmsnLFxuICBsaXN0OiAnbGlzdCcsXG4gIGxpc3RBZGQ6ICdsaXN0X2FkZCcsXG4gIGxvY2s6ICdsb2NrJyxcbiAgbG9ja09wZW46ICdsb2NrT3BlbicsXG4gIGxvZ29BV1M6ICdsb2dvX2F3cycsXG4gIGxvZ29BV1NNb25vOiAnbG9nb19hd3NfbW9ubycsXG4gIGxvZ29BZXJvc3Bpa2U6ICdsb2dvX2Flcm9zcGlrZScsXG4gIGxvZ29BcGFjaGU6ICdsb2dvX2FwYWNoZScsXG4gIGxvZ29BcHBTZWFyY2g6ICdsb2dvX2FwcF9zZWFyY2gnLFxuICBsb2dvQXp1cmU6ICdsb2dvX2F6dXJlJyxcbiAgbG9nb0F6dXJlTW9ubzogJ2xvZ29fYXp1cmVfbW9ubycsXG4gIGxvZ29CZWF0czogJ2xvZ29fYmVhdHMnLFxuICBsb2dvQnVzaW5lc3NBbmFseXRpY3M6ICdsb2dvX2J1c2luZXNzX2FuYWx5dGljcycsXG4gIGxvZ29DZXBoOiAnbG9nb19jZXBoJyxcbiAgbG9nb0Nsb3VkOiAnbG9nb19jbG91ZCcsXG4gIGxvZ29DbG91ZEVudGVycHJpc2U6ICdsb2dvX2Nsb3VkX2VjZScsXG4gIGxvZ29Db2RlOiAnbG9nb19jb2RlJyxcbiAgbG9nb0NvZGVzYW5kYm94OiAnbG9nb19jb2Rlc2FuZGJveCcsXG4gIGxvZ29Db3VjaGJhc2U6ICdsb2dvX2NvdWNoYmFzZScsXG4gIGxvZ29Eb2NrZXI6ICdsb2dvX2RvY2tlcicsXG4gIGxvZ29Ecm9wd2l6YXJkOiAnbG9nb19kcm9wd2l6YXJkJyxcbiAgbG9nb0VsYXN0aWM6ICdsb2dvX2VsYXN0aWMnLFxuICBsb2dvRWxhc3RpY1N0YWNrOiAnbG9nb19lbGFzdGljX3N0YWNrJyxcbiAgbG9nb0VsYXN0aWNzZWFyY2g6ICdsb2dvX2VsYXN0aWNzZWFyY2gnLFxuICBsb2dvRW50ZXJwcmlzZVNlYXJjaDogJ2xvZ29fZW50ZXJwcmlzZV9zZWFyY2gnLFxuICBsb2dvRXRjZDogJ2xvZ29fZXRjZCcsXG4gIGxvZ29HQ1A6ICdsb2dvX2djcCcsXG4gIGxvZ29HQ1BNb25vOiAnbG9nb19nY3BfbW9ubycsXG4gIGxvZ29HaXRodWI6ICdsb2dvX2dpdGh1YicsXG4gIGxvZ29HbWFpbDogJ2xvZ29fZ21haWwnLFxuICBsb2dvR29sYW5nOiAnbG9nb19nb2xhbmcnLFxuICBsb2dvR29vZ2xlRzogJ2xvZ29fZ29vZ2xlX2cnLFxuICBsb2dvSEFwcm94eTogJ2xvZ29faGFwcm94eScsXG4gIGxvZ29JQk06ICdsb2dvX2libScsXG4gIGxvZ29JQk1Nb25vOiAnbG9nb19pYm1fbW9ubycsXG4gIGxvZ29LYWZrYTogJ2xvZ29fa2Fma2EnLFxuICBsb2dvS2liYW5hOiAnbG9nb19raWJhbmEnLFxuICBsb2dvS3ViZXJuZXRlczogJ2xvZ29fa3ViZXJuZXRlcycsXG4gIGxvZ29Mb2dnaW5nOiAnbG9nb19sb2dnaW5nJyxcbiAgbG9nb0xvZ3N0YXNoOiAnbG9nb19sb2dzdGFzaCcsXG4gIGxvZ29NYXBzOiAnbG9nb19tYXBzJyxcbiAgbG9nb01lbWNhY2hlZDogJ2xvZ29fbWVtY2FjaGVkJyxcbiAgbG9nb01ldHJpY3M6ICdsb2dvX21ldHJpY3MnLFxuICBsb2dvTW9uZ29kYjogJ2xvZ29fbW9uZ29kYicsXG4gIGxvZ29NeVNRTDogJ2xvZ29fbXlzcWwnLFxuICBsb2dvTmdpbng6ICdsb2dvX25naW54JyxcbiAgbG9nb09ic2VydmFiaWxpdHk6ICdsb2dvX29ic2VydmFiaWxpdHknLFxuICBsb2dvT3NxdWVyeTogJ2xvZ29fb3NxdWVyeScsXG4gIGxvZ29QaHA6ICdsb2dvX3BocCcsXG4gIGxvZ29Qb3N0Z3JlczogJ2xvZ29fcG9zdGdyZXMnLFxuICBsb2dvUHJvbWV0aGV1czogJ2xvZ29fcHJvbWV0aGV1cycsXG4gIGxvZ29SYWJiaXRtcTogJ2xvZ29fcmFiYml0bXEnLFxuICBsb2dvUmVkaXM6ICdsb2dvX3JlZGlzJyxcbiAgbG9nb1NlY3VyaXR5OiAnbG9nb19zZWN1cml0eScsXG4gIGxvZ29TaXRlU2VhcmNoOiAnbG9nb19zaXRlX3NlYXJjaCcsXG4gIGxvZ29Ta2V0Y2g6ICdsb2dvX3NrZXRjaCcsXG4gIGxvZ29TbGFjazogJ2xvZ29fc2xhY2snLFxuICBsb2dvVXB0aW1lOiAnbG9nb191cHRpbWUnLFxuICBsb2dvV2ViaG9vazogJ2xvZ29fd2ViaG9vaycsXG4gIGxvZ29XaW5kb3dzOiAnbG9nb193aW5kb3dzJyxcbiAgbG9nb1dvcmtwbGFjZVNlYXJjaDogJ2xvZ29fd29ya3BsYWNlX3NlYXJjaCcsXG4gIGxvZ3NBcHA6ICdhcHBfbG9ncycsXG4gIGxvZ3N0YXNoRmlsdGVyOiAnbG9nc3Rhc2hfZmlsdGVyJyxcbiAgbG9nc3Rhc2hJZjogJ2xvZ3N0YXNoX2lmJyxcbiAgbG9nc3Rhc2hJbnB1dDogJ2xvZ3N0YXNoX2lucHV0JyxcbiAgbG9nc3Rhc2hPdXRwdXQ6ICdsb2dzdGFzaF9vdXRwdXQnLFxuICBsb2dzdGFzaFF1ZXVlOiAnbG9nc3Rhc2hfcXVldWUnLFxuICBtYWNoaW5lTGVhcm5pbmdBcHA6ICdhcHBfbWwnLFxuICBtYWduZXQ6ICdtYWduZXQnLFxuICBtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uOiAnbWFnbmlmeVdpdGhFeGNsYW1hdGlvbicsXG4gIG1hZ25pZnlXaXRoTWludXM6ICdtYWduaWZ5V2l0aE1pbnVzJyxcbiAgbWFnbmlmeVdpdGhQbHVzOiAnbWFnbmlmeVdpdGhQbHVzJyxcbiAgbWFuYWdlbWVudEFwcDogJ2FwcF9tYW5hZ2VtZW50JyxcbiAgbWFwTWFya2VyOiAnbWFwX21hcmtlcicsXG4gIG1lbW9yeTogJ21lbW9yeScsXG4gIG1lbnU6ICdtZW51JyxcbiAgbWVudURvd246ICdtZW51RG93bicsXG4gIG1lbnVMZWZ0OiAnbWVudUxlZnQnLFxuICBtZW51UmlnaHQ6ICdtZW51UmlnaHQnLFxuICBtZW51VXA6ICdtZW51VXAnLFxuICBtZXJnZTogJ21lcmdlJyxcbiAgbWV0cmljYmVhdEFwcDogJ2FwcF9tZXRyaWNiZWF0JyxcbiAgbWV0cmljc0FwcDogJ2FwcF9tZXRyaWNzJyxcbiAgbWluaW1pemU6ICdtaW5pbWl6ZScsXG4gIG1pbnVzOiAnbWludXMnLFxuICBtaW51c0luQ2lyY2xlOiAnbWludXNfaW5fY2lyY2xlJyxcbiAgbWludXNJbkNpcmNsZUZpbGxlZDogJ21pbnVzX2luX2NpcmNsZV9maWxsZWQnLFxuICBtb2JpbGU6ICdtb2JpbGUnLFxuICBtb25pdG9yaW5nQXBwOiAnYXBwX21vbml0b3JpbmcnLFxuICBtb29uOiAnbW9vbicsXG4gIG5hbWVzcGFjZTogJ25hbWVzcGFjZScsXG4gIG5lc3RlZDogJ25lc3RlZCcsXG4gIG5vZGU6ICdub2RlJyxcbiAgbm90ZWJvb2tBcHA6ICdhcHBfbm90ZWJvb2snLFxuICBudW1iZXI6ICdudW1iZXInLFxuICBvZmZsaW5lOiAnb2ZmbGluZScsXG4gIG9ubGluZTogJ29ubGluZScsXG4gIG91dGxpZXJEZXRlY3Rpb25Kb2I6ICdtbF9vdXRsaWVyX2RldGVjdGlvbl9qb2InLFxuICBwYWNrYWdlOiAncGFja2FnZScsXG4gIHBhY2tldGJlYXRBcHA6ICdhcHBfcGFja2V0YmVhdCcsXG4gIHBhZ2VTZWxlY3Q6ICdwYWdlU2VsZWN0JyxcbiAgcGFnZXNTZWxlY3Q6ICdwYWdlc1NlbGVjdCcsXG4gIHBhcGVyQ2xpcDogJ3BhcGVyX2NsaXAnLFxuICBwYXJ0aWFsOiAncGFydGlhbCcsXG4gIHBhdXNlOiAncGF1c2UnLFxuICBwYXltZW50OiAncGF5bWVudCcsXG4gIHBlbmNpbDogJ3BlbmNpbCcsXG4gIHBlcmNlbnQ6ICdwZXJjZW50JyxcbiAgcGluOiAncGluJyxcbiAgcGluRmlsbGVkOiAncGluX2ZpbGxlZCcsXG4gIHBpcGVsaW5lQXBwOiAnYXBwX3BpcGVsaW5lJyxcbiAgcGxheTogJ3BsYXknLFxuICBwbGF5RmlsbGVkOiAncGxheUZpbGxlZCcsXG4gIHBsdXM6ICdwbHVzJyxcbiAgcGx1c0luQ2lyY2xlOiAncGx1c19pbl9jaXJjbGUnLFxuICBwbHVzSW5DaXJjbGVGaWxsZWQ6ICdwbHVzX2luX2NpcmNsZV9maWxsZWQnLFxuICBwb3BvdXQ6ICdwb3BvdXQnLFxuICBwdXNoOiAncHVzaCcsXG4gIHF1ZXN0aW9uSW5DaXJjbGU6ICdxdWVzdGlvbl9pbl9jaXJjbGUnLFxuICBxdW90ZTogJ3F1b3RlJyxcbiAgcmVjZW50bHlWaWV3ZWRBcHA6ICdhcHBfcmVjZW50bHlfdmlld2VkJyxcbiAgcmVmcmVzaDogJ3JlZnJlc2gnLFxuICByZWdyZXNzaW9uSm9iOiAnbWxfcmVncmVzc2lvbl9qb2InLFxuICByZXBvcnRlcjogJ3JlcG9ydGVyJyxcbiAgcmVwb3J0aW5nQXBwOiAnYXBwX3JlcG9ydGluZycsXG4gIHJldHVybktleTogJ3JldHVybl9rZXknLFxuICBzYXZlOiAnc2F2ZScsXG4gIHNhdmVkT2JqZWN0c0FwcDogJ2FwcF9zYXZlZF9vYmplY3RzJyxcbiAgc2NhbGU6ICdzY2FsZScsXG4gIHNlYXJjaDogJ3NlYXJjaCcsXG4gIHNlYXJjaFByb2ZpbGVyQXBwOiAnYXBwX3NlYXJjaF9wcm9maWxlcicsXG4gIHNlY3VyaXR5QW5hbHl0aWNzQXBwOiAnYXBwX3NlY3VyaXR5X2FuYWx5dGljcycsXG4gIHNlY3VyaXR5QXBwOiAnYXBwX3NlY3VyaXR5JyxcbiAgc2VjdXJpdHlTaWduYWw6ICdzZWN1cml0eVNpZ25hbCcsXG4gIHNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWQ6ICdzZWN1cml0eVNpZ25hbERldGVjdGVkJyxcbiAgc2VjdXJpdHlTaWduYWxSZXNvbHZlZDogJ3NlY3VyaXR5U2lnbmFsUmVzb2x2ZWQnLFxuICBzZXNzaW9uVmlld2VyOiAnc2Vzc2lvblZpZXdlcicsXG4gIHNoYXJkOiAnc2hhcmQnLFxuICBzaGFyZTogJ3NoYXJlJyxcbiAgc25vd2ZsYWtlOiAnc25vd2ZsYWtlJyxcbiAgc29ydERvd246ICdzb3J0X2Rvd24nLFxuICBzb3J0TGVmdDogJ3NvcnRMZWZ0JyxcbiAgc29ydFJpZ2h0OiAnc29ydFJpZ2h0JyxcbiAgc29ydFVwOiAnc29ydF91cCcsXG4gIHNvcnRhYmxlOiAnc29ydGFibGUnLFxuICBzcGFjZXNBcHA6ICdhcHBfc3BhY2VzJyxcbiAgc3FsQXBwOiAnYXBwX3NxbCcsXG4gIHN0YXJFbXB0eTogJ3N0YXJfZW1wdHknLFxuICBzdGFyRW1wdHlTcGFjZTogJ3N0YXJfZW1wdHlfc3BhY2UnLFxuICBzdGFyRmlsbGVkOiAnc3Rhcl9maWxsZWQnLFxuICBzdGFyRmlsbGVkU3BhY2U6ICdzdGFyX2ZpbGxlZF9zcGFjZScsXG4gIHN0YXJNaW51c0VtcHR5OiAnc3Rhcl9taW51c19lbXB0eScsXG4gIHN0YXJNaW51c0ZpbGxlZDogJ3N0YXJfbWludXNfZmlsbGVkJyxcbiAgc3RhclBsdXNFbXB0eTogJ3N0YXJQbHVzRW1wdHknLFxuICBzdGFyUGx1c0ZpbGxlZDogJ3N0YXJQbHVzRmlsbGVkJyxcbiAgc3RhdHM6ICdzdGF0cycsXG4gIHN0b3A6ICdzdG9wJyxcbiAgc3RvcEZpbGxlZDogJ3N0b3BfZmlsbGVkJyxcbiAgc3RvcFNsYXNoOiAnc3RvcF9zbGFzaCcsXG4gIHN0b3JhZ2U6ICdzdG9yYWdlJyxcbiAgc3RyaW5nOiAnc3RyaW5nJyxcbiAgc3VibW9kdWxlOiAnc3VibW9kdWxlJyxcbiAgc3VuOiAnc3VuJyxcbiAgc3dhdGNoSW5wdXQ6ICdzd2F0Y2hfaW5wdXQnLFxuICAvLyBVbmRvY3VtZW50ZWQgb24gcHVycG9zZS4gSGFzIGFuIGV4dHJhIHN0cm9rZSBmb3IgRXVpQ29sb3JQaWNrZXJcbiAgc3ltbGluazogJ3N5bWxpbmsnLFxuICB0YWJsZURlbnNpdHlDb21wYWN0OiAndGFibGVfZGVuc2l0eV9jb21wYWN0JyxcbiAgdGFibGVEZW5zaXR5RXhwYW5kZWQ6ICd0YWJsZV9kZW5zaXR5X2V4cGFuZGVkJyxcbiAgdGFibGVEZW5zaXR5Tm9ybWFsOiAndGFibGVfZGVuc2l0eV9ub3JtYWwnLFxuICB0YWJsZU9mQ29udGVudHM6ICd0YWJsZU9mQ29udGVudHMnLFxuICB0YWc6ICd0YWcnLFxuICB0ZWFyOiAndGVhcicsXG4gIHRlbXBlcmF0dXJlOiAndGVtcGVyYXR1cmUnLFxuICB0aW1lbGluZTogJ3RpbWVsaW5lJyxcbiAgdGltZWxpb25BcHA6ICdhcHBfdGltZWxpb24nLFxuICB0aW1lUmVmcmVzaDogJ3RpbWVSZWZyZXNoJyxcbiAgdGltZXNsaWRlcjogJ3RpbWVzbGlkZXInLFxuICB0cmFpbmluZzogJ3RyYWluaW5nJyxcbiAgdHJhc2g6ICd0cmFzaCcsXG4gIHVuZm9sZDogJ3VuZm9sZCcsXG4gIHVubGluazogJ3VubGluaycsXG4gIHVwZ3JhZGVBc3Npc3RhbnRBcHA6ICdhcHBfdXBncmFkZV9hc3Npc3RhbnQnLFxuICB1cHRpbWVBcHA6ICdhcHBfdXB0aW1lJyxcbiAgdXNlcjogJ3VzZXInLFxuICB1c2VyQXZhdGFyOiAndXNlckF2YXRhcicsXG4gIHVzZXJzOiAndXNlcnMnLFxuICB1c2Vyc1JvbGVzQXBwOiAnYXBwX3VzZXJzX3JvbGVzJyxcbiAgdmVjdG9yOiAndmVjdG9yJyxcbiAgdmlkZW9QbGF5ZXI6ICd2aWRlb1BsYXllcicsXG4gIHZpc0FyZWE6ICd2aXNfYXJlYScsXG4gIHZpc0FyZWFTdGFja2VkOiAndmlzX2FyZWFfc3RhY2tlZCcsXG4gIHZpc0Jhckhvcml6b250YWw6ICd2aXNfYmFyX2hvcml6b250YWwnLFxuICB2aXNCYXJIb3Jpem9udGFsU3RhY2tlZDogJ3Zpc19iYXJfaG9yaXpvbnRhbF9zdGFja2VkJyxcbiAgdmlzQmFyVmVydGljYWw6ICd2aXNfYmFyX3ZlcnRpY2FsJyxcbiAgdmlzQmFyVmVydGljYWxTdGFja2VkOiAndmlzX2Jhcl92ZXJ0aWNhbF9zdGFja2VkJyxcbiAgdmlzR2F1Z2U6ICd2aXNfZ2F1Z2UnLFxuICB2aXNHb2FsOiAndmlzX2dvYWwnLFxuICB2aXNMaW5lOiAndmlzX2xpbmUnLFxuICB2aXNNYXBDb29yZGluYXRlOiAndmlzX21hcF9jb29yZGluYXRlJyxcbiAgdmlzTWFwUmVnaW9uOiAndmlzX21hcF9yZWdpb24nLFxuICB2aXNNZXRyaWM6ICd2aXNfbWV0cmljJyxcbiAgdmlzUGllOiAndmlzX3BpZScsXG4gIHZpc1RhYmxlOiAndmlzX3RhYmxlJyxcbiAgdmlzVGFnQ2xvdWQ6ICd2aXNfdGFnX2Nsb3VkJyxcbiAgdmlzVGV4dDogJ3Zpc190ZXh0JyxcbiAgdmlzVGltZWxpb246ICd2aXNfdGltZWxpb24nLFxuICB2aXNWZWdhOiAndmlzX3ZlZ2EnLFxuICB2aXNWaXN1YWxCdWlsZGVyOiAndmlzX3Zpc3VhbF9idWlsZGVyJyxcbiAgdmlzdWFsaXplQXBwOiAnYXBwX3Zpc3VhbGl6ZScsXG4gIHdhdGNoZXNBcHA6ICdhcHBfd2F0Y2hlcycsXG4gIHdvcmRXcmFwOiAnd29yZFdyYXAnLFxuICB3b3JkV3JhcERpc2FibGVkOiAnd29yZFdyYXBEaXNhYmxlZCcsXG4gIHdvcmtwbGFjZVNlYXJjaEFwcDogJ2FwcF93b3JrcGxhY2Vfc2VhcmNoJyxcbiAgd3JlbmNoOiAnd3JlbmNoJyxcbiAgLy8gVG9rZW4gSWNvbiBJbXBvcnRzXG4gIHRva2VuQWxpYXM6ICd0b2tlbkFsaWFzJyxcbiAgdG9rZW5Bbm5vdGF0aW9uOiAndG9rZW5Bbm5vdGF0aW9uJyxcbiAgdG9rZW5BcnJheTogJ3Rva2VuQXJyYXknLFxuICB0b2tlbkJpbmFyeTogJ3Rva2VuQmluYXJ5JyxcbiAgdG9rZW5Cb29sZWFuOiAndG9rZW5Cb29sZWFuJyxcbiAgdG9rZW5DbGFzczogJ3Rva2VuQ2xhc3MnLFxuICB0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXI6ICd0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXInLFxuICB0b2tlbkNvbnN0YW50OiAndG9rZW5Db25zdGFudCcsXG4gIHRva2VuRGF0ZTogJ3Rva2VuRGF0ZScsXG4gIHRva2VuRGVuc2VWZWN0b3I6ICd0b2tlbkRlbnNlVmVjdG9yJyxcbiAgdG9rZW5FbGVtZW50OiAndG9rZW5FbGVtZW50JyxcbiAgdG9rZW5FbnVtOiAndG9rZW5FbnVtJyxcbiAgdG9rZW5FbnVtTWVtYmVyOiAndG9rZW5FbnVtTWVtYmVyJyxcbiAgdG9rZW5FdmVudDogJ3Rva2VuRXZlbnQnLFxuICB0b2tlbkV4Y2VwdGlvbjogJ3Rva2VuRXhjZXB0aW9uJyxcbiAgdG9rZW5GaWVsZDogJ3Rva2VuRmllbGQnLFxuICB0b2tlbkZpbGU6ICd0b2tlbkZpbGUnLFxuICB0b2tlbkZsYXR0ZW5lZDogJ3Rva2VuRmxhdHRlbmVkJyxcbiAgdG9rZW5GdW5jdGlvbjogJ3Rva2VuRnVuY3Rpb24nLFxuICB0b2tlbkdlbzogJ3Rva2VuR2VvJyxcbiAgdG9rZW5IaXN0b2dyYW06ICd0b2tlbkhpc3RvZ3JhbScsXG4gIHRva2VuSW50ZXJmYWNlOiAndG9rZW5JbnRlcmZhY2UnLFxuICB0b2tlbklQOiAndG9rZW5JUCcsXG4gIHRva2VuSm9pbjogJ3Rva2VuSm9pbicsXG4gIHRva2VuS2V5OiAndG9rZW5LZXknLFxuICB0b2tlbktleXdvcmQ6ICd0b2tlbktleXdvcmQnLFxuICB0b2tlbk1ldGhvZDogJ3Rva2VuTWV0aG9kJyxcbiAgdG9rZW5NZXRyaWNDb3VudGVyOiAndG9rZW5NZXRyaWNDb3VudGVyJyxcbiAgdG9rZW5NZXRyaWNHYXVnZTogJ3Rva2VuTWV0cmljR2F1Z2UnLFxuICB0b2tlbk1vZHVsZTogJ3Rva2VuTW9kdWxlJyxcbiAgdG9rZW5OYW1lc3BhY2U6ICd0b2tlbk5hbWVzcGFjZScsXG4gIHRva2VuTmVzdGVkOiAndG9rZW5OZXN0ZWQnLFxuICB0b2tlbk51bGw6ICd0b2tlbk51bGwnLFxuICB0b2tlbk51bWJlcjogJ3Rva2VuTnVtYmVyJyxcbiAgdG9rZW5PYmplY3Q6ICd0b2tlbk9iamVjdCcsXG4gIHRva2VuT3BlcmF0b3I6ICd0b2tlbk9wZXJhdG9yJyxcbiAgdG9rZW5QYWNrYWdlOiAndG9rZW5QYWNrYWdlJyxcbiAgdG9rZW5QYXJhbWV0ZXI6ICd0b2tlblBhcmFtZXRlcicsXG4gIHRva2VuUGVyY29sYXRvcjogJ3Rva2VuUGVyY29sYXRvcicsXG4gIHRva2VuUHJvcGVydHk6ICd0b2tlblByb3BlcnR5JyxcbiAgdG9rZW5SYW5nZTogJ3Rva2VuUmFuZ2UnLFxuICB0b2tlblJhbmtGZWF0dXJlOiAndG9rZW5SYW5rRmVhdHVyZScsXG4gIHRva2VuUmFua0ZlYXR1cmVzOiAndG9rZW5SYW5rRmVhdHVyZXMnLFxuICB0b2tlblJlcG86ICd0b2tlblJlcG8nLFxuICB0b2tlblNlYXJjaFR5cGU6ICd0b2tlblNlYXJjaFR5cGUnLFxuICB0b2tlblNoYXBlOiAndG9rZW5TaGFwZScsXG4gIHRva2VuU3RyaW5nOiAndG9rZW5TdHJpbmcnLFxuICB0b2tlblN0cnVjdDogJ3Rva2VuU3RydWN0JyxcbiAgdG9rZW5TeW1ib2w6ICd0b2tlblN5bWJvbCcsXG4gIHRva2VuVGFnOiAndG9rZW5UYWcnLFxuICB0b2tlblRleHQ6ICd0b2tlblRleHQnLFxuICB0b2tlblRva2VuQ291bnQ6ICd0b2tlblRva2VuQ291bnQnLFxuICB0b2tlblZhcmlhYmxlOiAndG9rZW5WYXJpYWJsZSdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJ3JlYWN0LWRvbSc7XG52YXIgX3F1ZXVlID0gW107XG5cbmZ1bmN0aW9uIHByb2Nlc3NRdWV1ZSgpIHtcbiAgLy8gdGhlIHF1ZXVlZCBmdW5jdGlvbnMgdHJpZ2dlciByZWFjdCBzZXRTdGF0ZXMgd2hpY2gsIGlmIHVuYmF0Y2hlZCxcbiAgLy8gZWFjaCBjYXVzZSBhIGZ1bGwgdXBkYXRlLT5yZW5kZXItPmRvbSBwYXNzIF9wZXIgZnVuY3Rpb25fXG4gIC8vIGluc3RlYWQsIHRlbGwgUmVhY3QgdG8gd2FpdCB1bnRpbCBhbGwgdXBkYXRlcyBhcmUgZmluaXNoZWQgYmVmb3JlIHJlLXJlbmRlcmluZ1xuICB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIF9xdWV1ZVtpXSgpO1xuICAgIH1cblxuICAgIF9xdWV1ZS5sZW5ndGggPSAwO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVucXVldWVTdGF0ZUNoYW5nZShmbikge1xuICBpZiAoX3F1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHNldFRpbWVvdXQocHJvY2Vzc1F1ZXVlKTtcbiAgfVxuXG4gIF9xdWV1ZS5wdXNoKGZuKTtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgQ09MT1JTID0gWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnd2FybmluZycsICdkYW5nZXInLCAndGV4dCcsICdzdWJkdWVkJywgJ2dob3N0JywgJ2luaGVyaXQnXTtcbmV4cG9ydCBmdW5jdGlvbiBpc05hbWVkQ29sb3IobmFtZSkge1xuICByZXR1cm4gQ09MT1JTLmluY2x1ZGVzKG5hbWUpO1xufSIsICJmdW5jdGlvbiBfb2JqZWN0RGVzdHJ1Y3R1cmluZ0VtcHR5KG9iaikgeyBpZiAob2JqID09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgZGVzdHJ1Y3R1cmUgdW5kZWZpbmVkXCIpOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgR2xvYmFsLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGV1aVNjcm9sbEJhclN0eWxlcyB9IGZyb20gJy4uL21peGlucyc7XG5pbXBvcnQgeyBzaGFkZSwgdGludCwgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2xvcic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IHJlc2V0U3R5bGVzIGFzIHJlc2V0IH0gZnJvbSAnLi9yZXNldCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlHbG9iYWxTdHlsZXMgPSBmdW5jdGlvbiBFdWlHbG9iYWxTdHlsZXMoX3JlZikge1xuICBfb2JqZWN0RGVzdHJ1Y3R1cmluZ0VtcHR5KF9yZWYpO1xuXG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgZXVpVGhlbWUgPSBldWlUaGVtZUNvbnRleHQuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBldWlUaGVtZUNvbnRleHQuY29sb3JNb2RlO1xuICB2YXIgYmFzZSA9IGV1aVRoZW1lLmJhc2UsXG4gICAgICBjb2xvcnMgPSBldWlUaGVtZS5jb2xvcnMsXG4gICAgICBmb250ID0gZXVpVGhlbWUuZm9udDtcbiAgLyoqXG4gICAqIERlY2xhcmluZyB0aGUgdG9wIGxldmVsIHNjcm9sbGJhciBjb2xvcnMgdG8gbWF0Y2ggdGhlIHRoZW1lIGFsc28gcmVxdWlyZXMgc2V0dGluZyB0aGUgc2l6ZXMgb24gQ2hyb21lXG4gICAqIHNvIHRoYXQgaXQga25vd3MgdG8gdXNlIGN1c3RvbSBzdHlsZXMuIFRoZXJlZm9yZSwgd2UganVzdCByZXVzZSB0aGUgc2FtZSBzY3JvbGxiYXIgbWl4aW4gd2l0aCB0aGljayBzaXplLlxuICAgKi9cblxuICB2YXIgc2Nyb2xsYmFyU3R5bGVzID0gZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lQ29udGV4dCwge1xuICAgIHRyYWNrQ29sb3I6IGNvbG9yTW9kZSA9PT0gJ0xJR0hUJyA/IHNoYWRlKGNvbG9ycy5ib2R5LCAwLjAzKSA6IHRpbnQoY29sb3JzLmJvZHksIDAuMDcpLFxuICAgIHdpZHRoOiAnYXV0bydcbiAgfSk7XG4gIC8qKlxuICAgKiBUaGlzIGZvbnQgcmVzZXQgc2V0cyBhbGwgb3VyIGJhc2UgZm9udC90eXBvZ3JhcGh5IHJlbGF0ZWQgcHJvcGVydGllc1xuICAgKiB0aGF0IGFyZSBuZWVkZWQgdG8gb3ZlcnJpZGUgYnJvd3Nlci1zcGVjaWZpYyBlbGVtZW50IHNldHRpbmdzLlxuICAgKi9cblxuICB2YXIgZm9udFJlc2V0ID0gXCJcXG4gICAgZm9udC1mYW1pbHk6IFwiLmNvbmNhdChmb250LmZhbWlseSwgXCI7XFxuICAgIGZvbnQtc2l6ZTogXCIsIFwiXCIuY29uY2F0KGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXSAqIGJhc2UsIFwicHhcIiksIFwiO1xcbiAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChiYXNlIC8gKGZvbnQuc2NhbGVbZm9udC5ib2R5LnNjYWxlXSAqIGJhc2UpLCBcIjtcXG4gICAgZm9udC13ZWlnaHQ6IFwiKS5jb25jYXQoZm9udC53ZWlnaHRbZm9udC5ib2R5LndlaWdodF0sIFwiO1xcbiAgXCIpO1xuICAvKipcbiAgICogRmluYWwgc3R5bGVzXG4gICAqL1xuXG4gIHZhciBzdHlsZXMgPSAvKiNfX1BVUkVfXyovY3NzKHJlc2V0LCBcIiBodG1se1wiLCBzY3JvbGxiYXJTdHlsZXMsIFwiIFwiLCBmb250UmVzZXQsIFwiIHRleHQtc2l6ZS1hZGp1c3Q6MTAwJTtmb250LWtlcm5pbmc6bm9ybWFsO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6XCIsIGNvbG9ycy5ib2R5LCBcIjtjb2xvcjpcIiwgY29sb3JzLnRleHQsIFwiO31jb2RlLHByZSxrYmQsc2FtcHtmb250LWZhbWlseTpcIiwgZm9udC5mYW1pbHlDb2RlLCBcIjt9aW5wdXQsdGV4dGFyZWEsc2VsZWN0e1wiLCBmb250UmVzZXQsIFwiO31idXR0b257Zm9udC1mYW1pbHk6XCIsIGZvbnQuZmFtaWx5LCBcIjt9ZW17Zm9udC1zdHlsZTppdGFsaWM7fXN0cm9uZ3tmb250LXdlaWdodDpcIiwgZm9udC53ZWlnaHQuYm9sZCwgXCI7fSo6Zm9jdXN7XCIsIGV1aUZvY3VzUmluZyhldWlUaGVtZSksIFwiO306OnNlbGVjdGlvbntiYWNrZ3JvdW5kOlwiLCB0cmFuc3BhcmVudGl6ZShjb2xvcnMucHJpbWFyeSwgY29sb3JNb2RlID09PSAnTElHSFQnID8gMC4xIDogMC4yKSwgXCI7fWF7Y29sb3I6XCIsIGNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7JiwmOmhvdmVyLCY6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fX0uZXVpQm9keS1oYXNQb3J0YWxDb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO307bGFiZWw6c3R5bGVzO1wiKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBzdHlsZXNcbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgc2hhZGUsIHRpbnQsIHRyYW5zcGFyZW50aXplLCB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmV4cG9ydCB2YXIgQkFDS0dST1VORF9DT0xPUlMgPSBbJ3RyYW5zcGFyZW50JywgJ3BsYWluJywgJ3N1YmR1ZWQnLCAnYWNjZW50JywgJ3ByaW1hcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJywgJ2RhbmdlciddO1xuZXhwb3J0IHZhciBldWlCYWNrZ3JvdW5kQ29sb3IgPSBmdW5jdGlvbiBldWlCYWNrZ3JvdW5kQ29sb3IoX3JlZiwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge30sXG4gICAgICBtZXRob2QgPSBfcmVmMi5tZXRob2Q7XG5cbiAgaWYgKGNvbG9yID09PSAndHJhbnNwYXJlbnQnKSByZXR1cm4gJ3RyYW5zcGFyZW50JztcblxuICBpZiAobWV0aG9kID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgaWYgKGNvbG9yID09PSAncGxhaW4nKSB7XG4gICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzLmdob3N0LCAwLjIpO1xuICAgIH0gZWxzZSBpZiAoY29sb3IgPT09ICdzdWJkdWVkJykge1xuICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKGV1aVRoZW1lLmNvbG9ycy5saWdodFNoYWRlLCAwLjIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoZXVpVGhlbWUuY29sb3JzW2NvbG9yXSwgMC4xKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRpbnRPclNoYWRlID0gZnVuY3Rpb24gdGludE9yU2hhZGUoY29sb3IpIHtcbiAgICAgIHJldHVybiBjb2xvck1vZGUgPT09ICdEQVJLJyA/IHNoYWRlKGNvbG9yLCAwLjgpIDogdGludChjb2xvciwgMC45KTtcbiAgICB9O1xuXG4gICAgc3dpdGNoIChjb2xvcikge1xuICAgICAgY2FzZSAncGxhaW4nOlxuICAgICAgICByZXR1cm4gZXVpVGhlbWUuY29sb3JzLmVtcHR5U2hhZGU7XG5cbiAgICAgIGNhc2UgJ3N1YmR1ZWQnOlxuICAgICAgICByZXR1cm4gZXVpVGhlbWUuY29sb3JzLmJvZHk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aW50T3JTaGFkZShldWlUaGVtZS5jb2xvcnNbY29sb3JdKTtcbiAgICB9XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aUJhY2tncm91bmRDb2xvciA9IGZ1bmN0aW9uIHVzZUV1aUJhY2tncm91bmRDb2xvcihjb2xvcikge1xuICB2YXIgX3JlZjMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgbWV0aG9kID0gX3JlZjMubWV0aG9kO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWUsIGNvbG9yLCB7XG4gICAgbWV0aG9kOiBtZXRob2RcbiAgfSk7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MgPSBmdW5jdGlvbiB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MoKSB7XG4gIHJldHVybiB7XG4gICAgdHJhbnNwYXJlbnQ6IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ3RyYW5zcGFyZW50JyksIFwiOztsYWJlbDp0cmFuc3BhcmVudDtcIiksXG4gICAgcGxhaW46IC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB1c2VFdWlCYWNrZ3JvdW5kQ29sb3IoJ3BsYWluJyksIFwiOztsYWJlbDpwbGFpbjtcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignc3ViZHVlZCcpLCBcIjs7bGFiZWw6c3ViZHVlZDtcIiksXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCdhY2NlbnQnKSwgXCI7O2xhYmVsOmFjY2VudDtcIiksXG4gICAgcHJpbWFyeTogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcigncHJpbWFyeScpLCBcIjs7bGFiZWw6cHJpbWFyeTtcIiksXG4gICAgc3VjY2VzczogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignc3VjY2VzcycpLCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgd2FybmluZzogLyojX19QVVJFX18qL2NzcyhcImJhY2tncm91bmQtY29sb3I6XCIsIHVzZUV1aUJhY2tncm91bmRDb2xvcignd2FybmluZycpLCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgZGFuZ2VyOiAvKiNfX1BVUkVfXyovY3NzKFwiYmFja2dyb3VuZC1jb2xvcjpcIiwgdXNlRXVpQmFja2dyb3VuZENvbG9yKCdkYW5nZXInKSwgXCI7O2xhYmVsOmRhbmdlcjtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29sb3InO1xuLyoqXG4gKiBTZXQgc2Nyb2xsIGJhciBhcHBlYXJhbmNlIG9uIENocm9tZSAoYW5kIGZpcmVmb3gpLlxuICogQWxsIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsIGFuZCBkZWZhdWx0IHRvIHNwZWNpZmljIGdsb2JhbCBzZXR0aW5ncy5cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNjcm9sbEJhclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVNjcm9sbEJhclN0eWxlcyhfcmVmKSB7XG4gIHZhciBfcmVmJGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZSxcbiAgICAgIGNvbG9ycyA9IF9yZWYkZXVpVGhlbWUuY29sb3JzLFxuICAgICAgc2l6ZSA9IF9yZWYkZXVpVGhlbWUuc2l6ZTtcblxuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX3RodW1iQ29sb3IgPSBfcmVmMi50aHVtYkNvbG9yLFxuICAgICAgX3JlZjIkdHJhY2tDb2xvciA9IF9yZWYyLnRyYWNrQ29sb3IsXG4gICAgICB0cmFja0NvbG9yID0gX3JlZjIkdHJhY2tDb2xvciA9PT0gdm9pZCAwID8gJ3RyYW5zcGFyZW50JyA6IF9yZWYyJHRyYWNrQ29sb3IsXG4gICAgICBfcmVmMiR3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgd2lkdGggPSBfcmVmMiR3aWR0aCA9PT0gdm9pZCAwID8gJ3RoaW4nIDogX3JlZjIkd2lkdGgsXG4gICAgICBfc2l6ZSA9IF9yZWYyLnNpemUsXG4gICAgICBfY29ybmVyID0gX3JlZjIuY29ybmVyO1xuXG4gIC8vIFNldCBkZWZhdWx0cyBmcm9tIHRoZW1lXG4gIHZhciB0aHVtYkNvbG9yID0gX3RodW1iQ29sb3IgfHwgdHJhbnNwYXJlbnRpemUoY29sb3JzLmRhcmtTaGFkZSwgMC41KTtcblxuICB2YXIgc2Nyb2xsQmFyU2l6ZSA9IF9zaXplIHx8IHNpemUuYmFzZTtcbiAgdmFyIHNjcm9sbEJhckNvcm5lciA9IF9jb3JuZXIgfHwgd2lkdGggPT09ICd0aGluJyA/IFwiY2FsYyhcIi5jb25jYXQoc2l6ZS5zLCBcIiAqIDAuNzUpXCIpIDogc2l6ZS54czsgLy8gRmlyZWZveCdzIHNjcm9sbGJhciBjb2xvcmluZyBjYXNjYWRlcywgYnV0IHRoZSBzaXppbmcgZG9lcyBub3QsXG4gIC8vIHNvIGl0J3MgYmVpbmcgYWRkZWQgdG8gdGhpcyBtaXhpbiBmb3IgYWxsb3dpbmcgc3VwcG9ydCB3aGVyZXZlciBjdXN0b20gc2Nyb2xsYmFycyBhcmVcblxuICB2YXIgZmlyZWZveFN1cHBvcnQgPSBcInNjcm9sbGJhci1jb2xvcjogXCIuY29uY2F0KHRodW1iQ29sb3IsIFwiIFwiKS5jb25jYXQodHJhY2tDb2xvciwgXCI7XCIpO1xuICByZXR1cm4gXCJzY3JvbGxiYXItd2lkdGg6IFwiLmNvbmNhdCh3aWR0aCwgXCI7XFxuXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gICAgICB3aWR0aDogXCIpLmNvbmNhdChzY3JvbGxCYXJTaXplLCBcIjtcXG4gICAgICBoZWlnaHQ6IFwiKS5jb25jYXQoc2Nyb2xsQmFyU2l6ZSwgXCI7XFxuICAgIH1cXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IFwiKS5jb25jYXQodGh1bWJDb2xvciwgXCI7XFxuICAgICAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveDtcXG4gICAgICBib3JkZXItcmFkaXVzOiBcIikuY29uY2F0KHNjcm9sbEJhclNpemUsIFwiO1xcbiAgICAgIGJvcmRlcjogXCIpLmNvbmNhdChzY3JvbGxCYXJDb3JuZXIsIFwiIHNvbGlkIFwiKS5jb25jYXQodHJhY2tDb2xvciwgXCI7XFxuICAgIH1cXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLFxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogXCIpLmNvbmNhdCh0cmFja0NvbG9yLCBcIjtcXG4gICAgfVxcblxcbiAgICBcIikuY29uY2F0KGZpcmVmb3hTdXBwb3J0LCBcIlxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2Nyb2xsQmFyID0gZnVuY3Rpb24gdXNlRXVpU2Nyb2xsQmFyKG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNjcm9sbEJhclN0eWxlcyhldWlUaGVtZSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiAqSU5URVJOQUwqXG4gKiBPdmVyZmxvdyBzaGFkb3cgbWFza3MgZm9yIHVzZSBpbiBZU2Nyb2xsIGFuZCBYU2Nyb2xsIGhlbHBlcnNcbiAqL1xuXG52YXIgZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMgPSBmdW5jdGlvbiBldWlPdmVyZmxvd1NoYWRvd1N0eWxlcyhfcmVmMykge1xuICB2YXIgc2l6ZSA9IF9yZWYzLmV1aVRoZW1lLnNpemU7XG5cbiAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9kaXJlY3Rpb24gPSBfcmVmNC5kaXJlY3Rpb24sXG4gICAgICBfc2lkZSA9IF9yZWY0LnNpZGU7XG5cbiAgdmFyIGRpcmVjdGlvbiA9IF9kaXJlY3Rpb24gfHwgJ3knO1xuICB2YXIgc2lkZSA9IF9zaWRlIHx8ICdib3RoJztcbiAgdmFyIGhpZGVIZWlnaHQgPSBcImNhbGMoXCIuY29uY2F0KHNpemUuYmFzZSwgXCIgKiAwLjc1ICogMS4yNSlcIik7XG4gIHZhciBncmFkaWVudFN0YXJ0ID0gXCJcXG4gIFwiLmNvbmNhdCh0cmFuc3BhcmVudGl6ZSgncmVkJywgMC4xKSwgXCIgMCUsXFxuICBcIikuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAxKSwgXCIgXCIpLmNvbmNhdChoaWRlSGVpZ2h0LCBcIlxcbiAgXCIpO1xuICB2YXIgZ3JhZGllbnRFbmQgPSBcIlxcbiAgXCIuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAxKSwgXCIgY2FsYygxMDAlIC0gXCIpLmNvbmNhdChoaWRlSGVpZ2h0LCBcIiksXFxuICBcIikuY29uY2F0KHRyYW5zcGFyZW50aXplKCdyZWQnLCAwLjEpLCBcIiAxMDAlXFxuICBcIik7XG4gIHZhciBncmFkaWVudCA9ICcnO1xuXG4gIGlmIChzaWRlKSB7XG4gICAgaWYgKHNpZGUgPT09ICdib3RoJykge1xuICAgICAgZ3JhZGllbnQgPSBcIlwiLmNvbmNhdChncmFkaWVudFN0YXJ0LCBcIiwgXCIpLmNvbmNhdChncmFkaWVudEVuZCk7XG4gICAgfSBlbHNlIGlmIChzaWRlID09PSAnc3RhcnQnKSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50U3RhcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBncmFkaWVudCA9IFwiXCIuY29uY2F0KGdyYWRpZW50RW5kKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGlyZWN0aW9uID09PSAneScpIHtcbiAgICByZXR1cm4gXCJtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCBcIi5jb25jYXQoZ3JhZGllbnQsIFwiKTtcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFwibWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQoZ3JhZGllbnQsIFwiKTtcIik7XG4gIH1cbn07XG4vKipcbiAqIDEuIEZvY3VzIHJpbmdzIHNob3VsZG4ndCBiZSB2aXNpYmxlIG9uIHNjcm9sbGFibGUgcmVnaW9ucywgYnV0IGExMXkgcmVxdWlyZXMgdGhlbSB0byBiZSBmb2N1c2FibGUuXG4gKiAgICBCcm93c2VyJ3Mgc3VwcG9ydGluZyBgOmZvY3VzLXZpc2libGVgIHdpbGwgc3RpbGwgc2hvdyBvdXRsaW5lIG9uIGtleWJvYXJkIGZvY3VzIG9ubHkuXG4gKiAgICBPdGhlcnMgbGlrZSBTYWZhcmksIHdvbid0IHNob3cgYW55dGhpbmcgYXQgYWxsLlxuICovXG4vLyBUT0RPOiBIb3cgZG8gd2UgdXNlIEVtb3Rpb24gdG8gb3V0cHV0IHRoZSBDU1MgY2xhc3MgdXRpbGl0aWVzIGluc3RlYWQ/XG5cblxuZXhwb3J0IHZhciBldWlZU2Nyb2xsID0gZnVuY3Rpb24gZXVpWVNjcm9sbChldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlTY3JvbGxCYXJTdHlsZXMoZXVpVGhlbWUpLCBcIlxcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gICY6Zm9jdXMge1xcbiAgICBvdXRsaW5lOiBub25lOyAvKiAxICovXFxuICB9XFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWVNjcm9sbCA9IGZ1bmN0aW9uIHVzZUV1aVlTY3JvbGwoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlZU2Nyb2xsKGV1aVRoZW1lKTtcbn07XG5leHBvcnQgdmFyIGV1aVlTY3JvbGxXaXRoU2hhZG93cyA9IGZ1bmN0aW9uIGV1aVlTY3JvbGxXaXRoU2hhZG93cyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gIFwiLmNvbmNhdChldWlZU2Nyb2xsKGV1aVRoZW1lKSwgXCJcXG4gIFwiKS5jb25jYXQoZXVpT3ZlcmZsb3dTaGFkb3dTdHlsZXMoZXVpVGhlbWUsIHtcbiAgICBkaXJlY3Rpb246ICd5J1xuICB9KSwgXCJcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlZU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiB1c2VFdWlZU2Nyb2xsV2l0aFNoYWRvd3MoKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpO1xufTtcbmV4cG9ydCB2YXIgZXVpWFNjcm9sbCA9IGZ1bmN0aW9uIGV1aVhTY3JvbGwoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpU2Nyb2xsQmFyU3R5bGVzKGV1aVRoZW1lKSwgXCJcXG4gIG92ZXJmbG93LXg6IGF1dG87XFxuICAmOmZvY3VzIHtcXG4gICAgb3V0bGluZTogbm9uZTsgLyogMSAqL1xcbiAgfVxcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVhTY3JvbGwgPSBmdW5jdGlvbiB1c2VFdWlYU2Nyb2xsKCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWFNjcm9sbChldWlUaGVtZSk7XG59O1xuZXhwb3J0IHZhciBldWlYU2Nyb2xsV2l0aFNoYWRvd3MgPSBmdW5jdGlvbiBldWlYU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIHtcbiAgcmV0dXJuIFwiXFxuICBcIi5jb25jYXQoZXVpWFNjcm9sbChldWlUaGVtZSksIFwiXFxuICBcIikuY29uY2F0KGV1aU92ZXJmbG93U2hhZG93U3R5bGVzKGV1aVRoZW1lLCB7XG4gICAgZGlyZWN0aW9uOiAneCdcbiAgfSksIFwiXFxuXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpWFNjcm9sbFdpdGhTaGFkb3dzID0gZnVuY3Rpb24gdXNlRXVpWFNjcm9sbFdpdGhTaGFkb3dzKCkge1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICByZXR1cm4gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKTtcbn07XG5leHBvcnQgdmFyIGV1aU92ZXJmbG93U2Nyb2xsID0gZnVuY3Rpb24gZXVpT3ZlcmZsb3dTY3JvbGwoZXVpVGhlbWUpIHtcbiAgdmFyIF9yZWY1ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWY1LmRpcmVjdGlvbixcbiAgICAgIF9yZWY1JG1hc2sgPSBfcmVmNS5tYXNrLFxuICAgICAgbWFzayA9IF9yZWY1JG1hc2sgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjUkbWFzaztcblxuICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG1hc2sgPyBldWlZU2Nyb2xsV2l0aFNoYWRvd3MoZXVpVGhlbWUpIDogZXVpWVNjcm9sbChldWlUaGVtZSk7XG5cbiAgICBjYXNlICd4JzpcbiAgICAgIHJldHVybiBtYXNrID8gZXVpWFNjcm9sbFdpdGhTaGFkb3dzKGV1aVRoZW1lKSA6IGV1aVhTY3JvbGwoZXVpVGhlbWUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUud2FybignUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBkaXJlY3Rpb24gb3B0aW9uIHRvIHVzZUV1aU92ZXJmbG93U2Nyb2xsJyk7XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5leHBvcnQgdmFyIHVzZUV1aU92ZXJmbG93U2Nyb2xsID0gZnVuY3Rpb24gdXNlRXVpT3ZlcmZsb3dTY3JvbGwoZGlyZWN0aW9uKSB7XG4gIHZhciBtYXNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aU92ZXJmbG93U2Nyb2xsKGV1aVRoZW1lLCB7XG4gICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgbWFzazogbWFza1xuICB9KTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IGxvZ2ljYWxTaWRlIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmV4cG9ydCB2YXIgUEFERElOR19TSVpFUyA9IFsnbm9uZScsICd4cycsICdzJywgJ20nLCAnbCcsICd4bCddO1xuZXhwb3J0IHZhciBldWlQYWRkaW5nU2l6ZSA9IGZ1bmN0aW9uIGV1aVBhZGRpbmdTaXplKF9yZWYsIHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcblxuICBzd2l0Y2ggKHNpemUpIHtcbiAgICBjYXNlICdub25lJzpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gZXVpVGhlbWUuc2l6ZS5iYXNlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBldWlUaGVtZS5zaXplW3NpemVdO1xuICB9XG59O1xuZXhwb3J0IHZhciB1c2VFdWlQYWRkaW5nU2l6ZSA9IGZ1bmN0aW9uIHVzZUV1aVBhZGRpbmdTaXplKHNpemUpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVBhZGRpbmdTaXplKGV1aVRoZW1lLCBzaXplKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVBhZGRpbmdDU1MgPSBmdW5jdGlvbiB1c2VFdWlQYWRkaW5nQ1NTKHNpZGUpIHtcbiAgdmFyIHByb3BlcnR5ID0gc2lkZSA/IFwicGFkZGluZy1cIi5jb25jYXQobG9naWNhbFNpZGVbc2lkZV0pIDogJ3BhZGRpbmcnO1xuICByZXR1cm4ge1xuICAgIG5vbmU6IG51bGwsXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MocHJvcGVydHksIFwiOlwiLCB1c2VFdWlQYWRkaW5nU2l6ZSgneHMnKSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKHByb3BlcnR5LCBcIjpcIiwgdXNlRXVpUGFkZGluZ1NpemUoJ3MnKSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MocHJvcGVydHksIFwiOlwiLCB1c2VFdWlQYWRkaW5nU2l6ZSgnbScpLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2Nzcyhwcm9wZXJ0eSwgXCI6XCIsIHVzZUV1aVBhZGRpbmdTaXplKCdsJyksIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2Nzcyhwcm9wZXJ0eSwgXCI6XCIsIHVzZUV1aVBhZGRpbmdTaXplKCd4bCcpLCBcIjs7bGFiZWw6eGw7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbi8qKlxuICogSXQgaXMgYmVzdCBwcmFjdGljZSB0byB1dGlsaXplIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBgb3V0bGluZWAgcHJvcGVydHkgZm9yIGhhbmRsaW5nIGZvY3VzIHJpbmdzLlxuICogSG93ZXZlciwgc29tZSBjb21wb25lbnRzIG5lZWQgdG8gYmUgZm9yY2VkIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IsIG9yIGFkanVzdCB0aGUgZGlzcGxheS5cbiAqIFRoaXMgZnVuY3Rpb24gcmUtYXBwbGllcyB0aGUgc2FtZSBkZWZhdWx0IG91dGxpbmUgd2l0aCBhIGNvdXBsZSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gZXVpVGhlbWUgVXNlRXVpVGhlbWUuZXVpVGhlbWVcbiAqIEBwYXJhbSBvZmZzZXQgQWNjZXB0cyBhIHNwZWNpZmljIG1lYXN1cmVtZW50IG9yICdpbnNldCcsICdvdXRzZXQnIG9yICdjZW50ZXInIHRvIGFkanVzdCBvdXRsaW5lIHBvc2l0aW9uXG4gKiBAcGFyYW0gY29sb3IgQWNjZXB0cyBhbnkgQ1NTIGNvbG9yLCAqKk5vdGU6IG9ubHkgd29ya3MgaW4gLXdlYmtpdC0qKlxuICovXG5leHBvcnQgdmFyIGV1aUZvY3VzUmluZyA9IGZ1bmN0aW9uIGV1aUZvY3VzUmluZyhldWlUaGVtZSkge1xuICB2YXIgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnY2VudGVyJztcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgLy8gV2lkdGggaXMgZW5mb3JjZWQgYXMgYSBjb25zdGFudCBhdCB0aGUgZ2xvYmFsIHRoZW1lIGxheWVyXG4gIHZhciBvdXRsaW5lV2lkdGggPSBldWlUaGVtZS5mb2N1cy53aWR0aDtcbiAgdmFyIG91dGxpbmVDb2xvciA9IChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY29sb3IpIHx8IGV1aVRoZW1lLmZvY3VzLmNvbG9yO1xuICB2YXIgb3V0bGluZU9mZnNldCA9IG9mZnNldDtcblxuICBpZiAob2Zmc2V0ID09PSAnaW5zZXQnKSB7XG4gICAgb3V0bGluZU9mZnNldCA9IFwiLVwiLmNvbmNhdChvdXRsaW5lV2lkdGgpO1xuICB9IGVsc2UgaWYgKG9mZnNldCA9PT0gJ291dHNldCcpIHtcbiAgICBvdXRsaW5lT2Zmc2V0ID0gXCJcIi5jb25jYXQob3V0bGluZVdpZHRoKTtcbiAgfSBlbHNlIGlmIChvZmZzZXQgPT09ICdjZW50ZXInKSB7XG4gICAgb3V0bGluZU9mZnNldCA9IFwiY2FsYyhcIi5jb25jYXQob3V0bGluZVdpZHRoLCBcIiAvIC0yKTtcIik7XG4gIH0gLy8gVGhpcyBmdW5jdGlvbiB1dGlsaXplcyBgZm9jdXMtdmlzaWJsZWAgdG8gdHVybiBvbiBmb2N1cyBvdXRsaW5lcy5cbiAgLy8gQnV0IHRoaXMgaXMgYnJvd3Nlci1kZXBlbmRlbmQ6XG4gIC8vIFx1RDgzRFx1REM0OSBTYWZhcmkgYW5kIEZpcmVmb3ggaW5uYXRlbHkgcmVzcGVjdCBvbmx5IHNob3dpbmcgdGhlIG91dGxpbmUgd2l0aCBrZXlib2FyZCBvbmx5XG4gIC8vIFx1RDgzRFx1REM5NCBCdXQgdGhleSBkb24ndCBhbGxvdyBjb2xvcmluZyBvZiB0aGUgJ2F1dG8nL2RlZmF1bHQgb3V0bGluZSwgc28gY29udHJhc3QgaXMgbm8gZ29vZCBpbiBkYXJrIG1vZGUuXG4gIC8vIFx1RDgzRFx1REM0OSBGb3IgdGhlc2UgYnJvd3NlcnMgd2UgdXNlIHRoZSBzb2xpZCB0eXBlIGluIG9yZGVyIHRvIG1hdGNoIHdpdGggYGN1cnJlbnRDb2xvci5cbiAgLy8gXHVEODNEXHVERTI2IFdoaWNoIGRvZXMgbWVhbnMgdGhlIG91dGxpbmUgd2lsbCBiZSBzcXVhcmVcblxuXG4gIHJldHVybiBcIlxcbiAgICBvdXRsaW5lOiBcIi5jb25jYXQob3V0bGluZVdpZHRoLCBcIiBzb2xpZCBcIikuY29uY2F0KG91dGxpbmVDb2xvciwgXCI7XFxuICAgIG91dGxpbmUtb2Zmc2V0OiBcIikuY29uY2F0KG91dGxpbmVPZmZzZXQsIFwiO1xcblxcbiAgICAvLyBcXHVEODNEXFx1REM0MCBDaHJvbWUgcmVzcGVjdHMgOmZvY3VzLXZpc2libGUgYW5kIGFsbG93cyBjb2xvcmluZyB0aGUgYGF1dG9gIHN0eWxlXFxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgb3V0bGluZS1zdHlsZTogYXV0bztcXG4gICAgfVxcblxcbiAgICAvLyBcXHVEODNEXFx1REU0NVxcdTIwMERcXHUyNjQwXFx1RkUwRiBCdXQgQ2hyb21lIGFsc28gbmVlZHMgdG8gaGF2ZSB0aGUgb3V0bGluZSBmb3JjZWZ1bGx5IHJlbW92ZWQgZnJvbSByZWd1bGFyIGA6Zm9jdXNgIHN0YXRlXFxuICAgICY6bm90KDpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgfVxcbiAgXCIpO1xufTtcbmV4cG9ydCB2YXIgdXNlRXVpRm9jdXNSaW5nID0gZnVuY3Rpb24gdXNlRXVpRm9jdXNSaW5nKG9mZnNldCwgY29sb3IpIHtcbiAgdmFyIF91c2VFdWlUaGVtZSA9IHVzZUV1aVRoZW1lKCksXG4gICAgICBldWlUaGVtZSA9IF91c2VFdWlUaGVtZS5ldWlUaGVtZTtcblxuICByZXR1cm4gZXVpRm9jdXNSaW5nKGV1aVRoZW1lLCBvZmZzZXQsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgZXVpTGluZUhlaWdodEZyb21CYXNlbGluZSwgZXVpRm9udFNpemVGcm9tU2NhbGUgfSBmcm9tICcuLi9mdW5jdGlvbnMvdHlwb2dyYXBoeSc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RoZW1lL2hvb2tzJztcblxuLyoqXG4gKiBSZXR1cm5zIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHRcbiAqL1xuZXhwb3J0IHZhciBldWlGb250U2l6ZSA9IGZ1bmN0aW9uIGV1aUZvbnRTaXplKF9yZWYsIHNjYWxlLCBvcHRpb25zKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZm9udFNpemU6IGV1aUZvbnRTaXplRnJvbVNjYWxlKHNjYWxlLCBldWlUaGVtZSwgb3B0aW9ucyksXG4gICAgbGluZUhlaWdodDogZXVpTGluZUhlaWdodEZyb21CYXNlbGluZShzY2FsZSwgZXVpVGhlbWUsIG9wdGlvbnMpXG4gIH07XG59O1xuZXhwb3J0IHZhciB1c2VFdWlGb250U2l6ZSA9IGZ1bmN0aW9uIHVzZUV1aUZvbnRTaXplKHNjYWxlLCBvcHRpb25zKSB7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlGb250U2l6ZShldWlUaGVtZSwgc2NhbGUsIG9wdGlvbnMpO1xufTtcbi8qKlxuICogRm9yY2UgdGV4dCB0byB3cmFwIG9uIG5hdHVyYWwgd29yZCBicmVha3MgKGUuZy4gc3BhY2VzICYgaHlwaGVucylcbiAqIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL3ByZXZlbnQtbG9uZy11cmxzLWZyb20tYnJlYWtpbmctb3V0LW9mLWNvbnRhaW5lci9cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRleHRCcmVha1dvcmQgPSBmdW5jdGlvbiBldWlUZXh0QnJlYWtXb3JkKCkge1xuICByZXR1cm4gXCJcXG4gIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQgIWltcG9ydGFudDsgLy8gbWFrZXMgc3VyZSB0aGUgbG9uZyBzdHJpbmcgd2lsbCB3cmFwIGFuZCBub3QgYnVzdCBvdXQgb2YgdGhlIGNvbnRhaW5lclxcbiAgd29yZC13cmFwOiBicmVhay13b3JkICFpbXBvcnRhbnQ7IC8vIHNwZWMgc2F5cywgdGhleSBhcmUgbGl0ZXJhbGx5IGp1c3QgYWx0ZXJuYXRlIG5hbWVzIGZvciBlYWNoIG90aGVyIGJ1dCBzb21lIGJyb3dzZXJzIHN1cHBvcnQgb25lIGFuZCBub3QgdGhlIG90aGVyXFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkOyAvLyBJRSBkb2Vzbid0IHVuZGVyc3RhbmQgYnV0IHRoYXQncyBva1xcblwiO1xufTtcbi8qKlxuICogUHJldmVudCB0ZXh0IGZyb20gd3JhcHBpbmcgb250byBtdWx0aXBsZSBsaW5lcywgYW5kIHRydW5jYXRlIHdpdGggYW4gZWxsaXBzaXMuXG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0VHJ1bmNhdGUgPSBmdW5jdGlvbiBldWlUZXh0VHJ1bmNhdGUoKSB7XG4gIHZhciBtYXhXaWR0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJzEwMCUnO1xuICByZXR1cm4gXCJcXG4gIG1heC13aWR0aDogXCIuY29uY2F0KG1heFdpZHRoLCBcIjsgLy8gRW5zdXJlIHRoYXQgdGhlIG5vZGUgaGFzIGEgbWF4aW11bSB3aWR0aCBhZnRlciB3aGljaCB0cnVuY2F0aW9uIGNhbiBvY2N1clxcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgIWltcG9ydGFudDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcXG5cIik7XG59O1xuLyoqXG4gKiBGaXhlZC13aWR0aCBudW1iZXJzIGZvciB0YWJ1bGFyIGRhdGFcbiAqL1xuXG5leHBvcnQgdmFyIGV1aU51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIGV1aU51bWJlckZvcm1hdChfcmVmMikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMi5ldWlUaGVtZTtcbiAgcmV0dXJuIFwiXFxuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IFwiLmNvbmNhdChldWlUaGVtZS5mb250LmZlYXR1cmVTZXR0aW5ncywgXCIsICd0bnVtJyAxO1xcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aU51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIHVzZUV1aU51bWJlckZvcm1hdCgpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aU51bWJlckZvcm1hdChldWlUaGVtZSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIEEgY29uc3RhbnQgc3RvcmluZyB0aGUgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIG1lZGlhIHF1ZXJ5XG4gKiBzbyB0aGF0IHdoZW4gaXQgaXMgdHVybmVkIG9mZiwgYW5pbWF0aW9ucyBhcmUgbm90IHJ1bi5cbiAqL1xuZXhwb3J0IHZhciBldWlDYW5BbmltYXRlID0gJ0BtZWRpYSBzY3JlZW4gYW5kIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSc7XG4vKipcbiAqIEEgY29uc3RhbnQgc3RvcmluZyB0aGUgYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gIG1lZGlhIHF1ZXJ5IHRoYXQgd2lsbFxuICogb25seSBhcHBseSB0aGUgY29udGVudCBpZiB0aGUgc2V0dGluZyBpcyBvZmYgKHJlZHVjZSkuXG4gKi9cblxuZXhwb3J0IHZhciBldWlDYW50QW5pbWF0ZSA9ICdAbWVkaWEgc2NyZWVuIGFuZCAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSc7XG4vKipcbiAqIFNwZWVkcyAvIER1cmF0aW9ucyAvIERlbGF5c1xuICovXG5cbmV4cG9ydCB2YXIgRXVpVGhlbWVBbmltYXRpb25TcGVlZHMgPSBbJ2V4dHJhRmFzdCcsICdmYXN0JywgJ25vcm1hbCcsICdzbG93JywgJ2V4dHJhU2xvdyddO1xuXG4vKipcbiAqIEVhc2luZ3MgLyBUaW1pbmcgZnVuY3Rpb25zXG4gKi9cbmV4cG9ydCB2YXIgRXVpVGhlbWVBbmltYXRpb25FYXNpbmdzID0gWydib3VuY2UnLCAncmVzaXN0YW5jZSddOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciByZXNldFN0eWxlcyA9IFwiXFxuLyogLy8gQWRhcHRlZCBmcm9tIEVyaWMgTWV5ZXIncyByZXNldCAoaHR0cDovL21leWVyd2ViLmNvbS9lcmljL3Rvb2xzL2Nzcy9yZXNldC8sIHYyLjAgfCAyMDExMDEyNikuICovXFxuXFxuXFxuKiwgKjpiZWZvcmUsICo6YWZ0ZXIge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBhcHBsZXQsIG9iamVjdCwgaWZyYW1lLFxcbmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSxcXG5hLCBhYmJyLCBhY3JvbnltLCBhZGRyZXNzLCBiaWcsIGNpdGUsIGNvZGUsXFxuZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzLCBzYW1wLFxcbnNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsXFxuYiwgdSwgaSwgY2VudGVyLFxcbmRsLCBkdCwgZGQsIG9sLCB1bCwgbGksXFxuZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsXFxudGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsXFxuYXJ0aWNsZSwgYXNpZGUsIGNhbnZhcywgZGV0YWlscywgZW1iZWQsXFxuZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLFxcbm1lbnUsIG5hdiwgb3V0cHV0LCBydWJ5LCBzZWN0aW9uLCBzdW1tYXJ5LFxcbnRpbWUsIG1hcmssIGF1ZGlvLCB2aWRlbyB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbn1cXG5cXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBwIHtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxufVxcblxcbi8qIEhUTUw1IGRpc3BsYXktcm9sZSByZXNldCBmb3Igb2xkZXIgYnJvd3NlcnMgKi9cXG5hcnRpY2xlLCBhc2lkZSwgZGV0YWlscywgZmlnY2FwdGlvbiwgZmlndXJlLFxcbmZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIG1lbnUsIG5hdiwgc2VjdGlvbiB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuYVtocmVmXSxcXG5idXR0b24sXFxuW3JvbGU9J2J1dHRvbiddIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuYnV0dG9uIHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBib3JkZXI6IG5vbmU7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBib3JkZXItcmFkaXVzOiAwO1xcbiAgZm9udC1zaXplOiBpbmhlcml0O1xcbn1cXG5cXG5pbnB1dCB7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG5pbnB1dDpkaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAxOyAvKiByZXF1aXJlZCBvbiBpT1MgKi9cXG59XFxuXFxub2wsXFxudWwge1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuXFxuYmxvY2txdW90ZSxcXG5xIHtcXG4gIHF1b3Rlczogbm9uZTtcXG59XFxuXFxuYmxvY2txdW90ZTpiZWZvcmUsXFxuYmxvY2txdW90ZTphZnRlcixcXG5xOmJlZm9yZSxcXG5xOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbn1cXG5cXG50YWJsZSB7XFxuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xcbiAgYm9yZGVyLXNwYWNpbmc6IDA7XFxufVxcblxcbmhyIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuZmllbGRzZXQge1xcbiAgbWluLWlubGluZS1zaXplOiBhdXRvO1xcbn1cXG5cXG4vKiBDaHJvbWUgaGFzIGFuIGlzc3VlIGFyb3VuZCBSVEwgbGFuZ3VhZ2VzIGluIFNWR3Mgd2hlbiBsZXR0ZXItc3BhY2luZyBpcyBuZWdhdGl2ZVxcbiAqIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTk2NjQ4MFxcbiAqL1xcbnN2ZyB0ZXh0IHtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWwgIWltcG9ydGFudDtcXG59XCI7IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7IGlmICghcmF3KSB7IHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7IH0gcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsgfVxuXG5mdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MsIGtleWZyYW1lcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxDU1MsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbnZhciBpY29uU2l6ZSA9IGZ1bmN0aW9uIGljb25TaXplKHNpemUpIHtcbiAgcmV0dXJuIFwiXFxuICAgIFwiLmNvbmNhdChsb2dpY2FsQ1NTKCd3aWR0aCcsIHNpemUpLCBcIjtcXG4gICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdoZWlnaHQnLCBzaXplKSwgXCI7XFxuICBcIik7XG59O1xuXG5leHBvcnQgdmFyIGljb25Mb2FkaW5nT3BhY2l0eSA9IDAuMDU7XG52YXIgaWNvbkxvYWRpbmcgPSBrZXlmcmFtZXMoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgMCUge1xcbiAgICBvcGFjaXR5OiBcIiwgXCI7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG5cIl0pKSwgaWNvbkxvYWRpbmdPcGFjaXR5KTtcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwibmpkNzQ5LWxvZ29FbGFzdGljT3V0bGluZVwiLFxuICBzdHlsZXM6IFwiKltmaWxsXXtmaWxsOm5vbmUhaW1wb3J0YW50O30ub3V0bGluZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDpsb2dvRWxhc3RpY091dGxpbmU7XCJcbn0gOiB7XG4gIG5hbWU6IFwibmpkNzQ5LWxvZ29FbGFzdGljT3V0bGluZVwiLFxuICBzdHlsZXM6IFwiKltmaWxsXXtmaWxsOm5vbmUhaW1wb3J0YW50O30ub3V0bGluZXtmaWxsOmN1cnJlbnRDb2xvciFpbXBvcnRhbnQ7fTtsYWJlbDpsb2dvRWxhc3RpY091dGxpbmU7XCIsXG4gIHRvU3RyaW5nOiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfX1xufTtcblxudmFyIF9yZWYyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInVhY2pjNS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJjb2xvcjppbmhlcml0O2xhYmVsOmluaGVyaXQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aUljb25TdHlsZXMgPSBmdW5jdGlvbiBldWlJY29uU3R5bGVzKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJY29uOiAvKiNfX1BVUkVfXyovY3NzKFwiZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDpjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLCAwKTsuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy5kYXJrZXN0U2hhZGUsIFwiO307bGFiZWw6ZXVpSWNvbjtcIiksXG4gICAgLy8gQ29sb3JzXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0LCBcIjs7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQsIFwiOztsYWJlbDpkYW5nZXI7XCIpLFxuICAgIGdob3N0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7KltmaWxsXSwuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOmdob3N0O1wiKSxcbiAgICBwcmltYXJ5OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5VGV4dCwgXCI7O2xhYmVsOnByaW1hcnk7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0LCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgc3ViZHVlZDogLyojX19QVVJFX18qL2NzcyhcImNvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQsIFwiOztsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICB0ZXh0OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50aXRsZSwgXCI7KltmaWxsXSwuZXVpSWNvbl9fZmlsbE5lZ2F0aXZle2ZpbGw6Y3VycmVudENvbG9yIWltcG9ydGFudDt9O2xhYmVsOnRleHQ7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLndhcm5pbmdUZXh0LCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgaW5oZXJpdDogX3JlZjIsXG4gICAgZGVmYXVsdDogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpkZWZhdWx0O1wiKSxcbiAgICBjdXN0b21Db2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpjdXN0b21Db2xvcjtcIiksXG4gICAgbG9nb0VsYXN0aWNPdXRsaW5lOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgb3JpZ2luYWw6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6b3JpZ2luYWw7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoaWNvblNpemUoZXVpVGhlbWUuc2l6ZS5tKSwgXCI7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhpY29uU2l6ZShldWlUaGVtZS5zaXplLmJhc2UpLCBcIjtsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUubCksIFwiO2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUueGwpLCBcIjtsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKGljb25TaXplKGV1aVRoZW1lLnNpemUueHhsKSwgXCI7bGFiZWw6eHhsO1wiKSxcbiAgICAvLyBWYXJpYW50c1xuICAgIC8vIEFwcCBpY29ucyBhcmUgdHdvLXRvbmVkLiBUaGlzIHByb3ZpZGVzIHRoZSBiYXNlIGNvbG9yLlxuICAgIGFwcDogLyojX19QVVJFX18qL2NzcyhcImZpbGw6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjsuZXVpSWNvbl9fZmlsbFNlY29uZGFyeXtmaWxsOlwiLCBldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQsIFwiO307bGFiZWw6YXBwO1wiKSxcbiAgICBsb2dvOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmxvZ287XCIpLFxuICAgIC8vIExvYWRpbmcgc3RhdGVzXG4gICAgaXNMb2FkaW5nOiAvKiNfX1BVUkVfXyovY3NzKFwib3BhY2l0eTpcIiwgaWNvbkxvYWRpbmdPcGFjaXR5LCBcIjtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjtib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLnNtYWxsLCBcIjs7bGFiZWw6aXNMb2FkaW5nO1wiKSxcbiAgICBpc0xvYWRlZDogLyojX19QVVJFX18qL2NzcyhldWlDYW5BbmltYXRlLCBcInthbmltYXRpb246XCIsIGljb25Mb2FkaW5nLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLm5vcm1hbCwgXCIgZWFzZS1pbiAwcyAxIGZvcndhcmRzO307bGFiZWw6aXNMb2FkZWQ7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlJMThuQ29uc3VtZXIgfSBmcm9tICcuLi9jb250ZXh0JztcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9jb250ZXh0JztcbmltcG9ydCB7IHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuIH0gZnJvbSAnLi9pMThuX3V0aWwnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxuZnVuY3Rpb24gZXJyb3JPbk1pc3NpbmdWYWx1ZXModG9rZW4pIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiSTE4biBtYXBwaW5nIGZvciB0b2tlbiBcXFwiXCIuY29uY2F0KHRva2VuLCBcIlxcXCIgaXMgYSBmb3JtYXR0aW5nIGZ1bmN0aW9uIGJ1dCBubyB2YWx1ZXMgd2VyZSBwcm92aWRlZC5cIikpO1xufVxuXG5mdW5jdGlvbiBsb29rdXBUb2tlbihvcHRpb25zKSB7XG4gIHZhciB0b2tlbiA9IG9wdGlvbnMudG9rZW4sXG4gICAgICBpMThuTWFwcGluZyA9IG9wdGlvbnMuaTE4bk1hcHBpbmcsXG4gICAgICB2YWx1ZURlZmF1bHQgPSBvcHRpb25zLnZhbHVlRGVmYXVsdCxcbiAgICAgIGkxOG5NYXBwaW5nRnVuYyA9IG9wdGlvbnMuaTE4bk1hcHBpbmdGdW5jLFxuICAgICAgdmFsdWVzID0gb3B0aW9ucy52YWx1ZXMsXG4gICAgICByZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgdmFyIHJlbmRlcmFibGUgPSBpMThuTWFwcGluZyAmJiBpMThuTWFwcGluZ1t0b2tlbl0gfHwgdmFsdWVEZWZhdWx0O1xuXG4gIGlmICh0eXBlb2YgcmVuZGVyYWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGVycm9yT25NaXNzaW5nVmFsdWVzKHRva2VuKTtcbiAgICB9IC8vIEB0cy1pZ25vcmUgVHlwZVNjcmlwdCBjb21wbGFpbnMgdGhhdCBgREVGQVVMVGAgZG9lc24ndCBoYXZlIGEgY2FsbCBzaWduYXR1cmUgYnV0IHdlIHZlcmlmaWVkIGByZW5kZXJhYmxlYCBpcyBhIGZ1bmN0aW9uXG5cblxuICAgIHZhciByZW5kZXJlZCA9IHJlbmRlcmFibGUodmFsdWVzKTtcbiAgICByZXR1cm4gaTE4bk1hcHBpbmdGdW5jICYmIHR5cGVvZiByZW5kZXJlZCA9PT0gJ3N0cmluZycgPyBpMThuTWFwcGluZ0Z1bmMocmVuZGVyZWQpIDogcmVuZGVyZWQ7XG4gIH0gZWxzZSBpZiAodmFsdWVzID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHJlbmRlcmFibGUgIT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGkxOG5NYXBwaW5nRnVuYyAmJiB0eXBlb2YgdmFsdWVEZWZhdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVuZGVyYWJsZSA9IGkxOG5NYXBwaW5nRnVuYyh2YWx1ZURlZmF1bHQpO1xuICAgIH0gLy8gdGhlcmUncyBhIGhvbGUgaW4gdGhlIHR5cGluZ3MgaGVyZSBhcyB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBpMThuTWFwcGluZ0Z1bmNcbiAgICAvLyByZXR1cm5lZCB0aGUgc2FtZSB0eXBlIG9mIHRoZSBkZWZhdWx0IHZhbHVlLCBidXQgd2UgbmVlZCB0byBrZWVwIHRoYXQgYXNzdW1wdGlvblxuXG5cbiAgICByZXR1cm4gcmVuZGVyYWJsZTtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IHByb2Nlc3NTdHJpbmdUb0NoaWxkcmVuKHJlbmRlcmFibGUsIHZhbHVlcywgaTE4bk1hcHBpbmdGdW5jKTtcblxuICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJykge1xuICAgIC8vIGxpa2V3aXNlLCBgcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW5gIHJldHVybnMgYSBzdHJpbmcgb3IgUmVhY3RDaGlsZFtdIGRlcGVuZGluZyBvblxuICAgIC8vIHRoZSB0eXBlIG9mIGB2YWx1ZXNgLCBzbyB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBjb3JyZWN0LlxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIHZhciBDb21wb25lbnQgPSByZW5kZXIgPyByZW5kZXIoY2hpbGRyZW4pIDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG4gIH07IC8vIHNhbWUgcmVhc29ucyBhcyBhYm92ZSwgd2UgY2FuJ3QgcHJvbWlzZSB0aGUgdHJhbnNmb3JtcyBtYXRjaCB0aGUgZGVmYXVsdCdzIHR5cGVcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCB2YWx1ZXMpO1xufVxuXG5mdW5jdGlvbiBpc0kxOG5Ub2tlbnNTaGFwZSh4KSB7XG4gIHJldHVybiB4LnRva2VucyAhPSBudWxsO1xufSAvLyBNdXN0IHVzZSB0aGUgZ2VuZXJpY3MgPFQgZXh0ZW5kcyB7fT5cbi8vIElmIGluc3RlYWQgdHlwZWQgd2l0aCBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudCB0aGVyZSBpc24ndCBmZWVkYmFjayBnaXZlbiBiYWNrIHRvIHRoZSBkZXZcbi8vIHdoZW4gdXNpbmcgYSBgdmFsdWVzYCBvYmplY3Qgd2l0aCBhIHJlbmRlcmVyIGNhbGxiYWNrLlxuXG5cbnZhciBFdWlJMThuID0gZnVuY3Rpb24gRXVpSTE4bihwcm9wcykge1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuQ29uc3VtZXIsIG51bGwsIGZ1bmN0aW9uIChpMThuQ29uZmlnKSB7XG4gICAgdmFyIG1hcHBpbmcgPSBpMThuQ29uZmlnLm1hcHBpbmcsXG4gICAgICAgIG1hcHBpbmdGdW5jID0gaTE4bkNvbmZpZy5tYXBwaW5nRnVuYyxcbiAgICAgICAgcmVuZGVyID0gaTE4bkNvbmZpZy5yZW5kZXI7XG5cbiAgICBpZiAoaXNJMThuVG9rZW5zU2hhcGUocHJvcHMpKSB7XG4gICAgICByZXR1cm4gcHJvcHMuY2hpbGRyZW4ocHJvcHMudG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4sIGlkeCkge1xuICAgICAgICByZXR1cm4gbG9va3VwVG9rZW4oe1xuICAgICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgICBpMThuTWFwcGluZzogbWFwcGluZyxcbiAgICAgICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgICAgIHZhbHVlRGVmYXVsdDogcHJvcHMuZGVmYXVsdHNbaWR4XSxcbiAgICAgICAgICByZW5kZXI6IHJlbmRlclxuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5WYWx1ZSA9IGxvb2t1cFRva2VuKHtcbiAgICAgIHRva2VuOiBwcm9wcy50b2tlbixcbiAgICAgIGkxOG5NYXBwaW5nOiBtYXBwaW5nLFxuICAgICAgdmFsdWVEZWZhdWx0OiBwcm9wcy5kZWZhdWx0LFxuICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgIHZhbHVlczogcHJvcHMudmFsdWVzLFxuICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIHByb3BzLmNoaWxkcmVuKHRva2VuVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdG9rZW5WYWx1ZTtcbiAgICB9XG4gIH0pO1xufTsgLy8gQSBzaW5nbGUgZGVmYXVsdCBjb3VsZCBiZSBhIHN0cmluZywgcmVhY3QgY2hpbGQsIG9yIHJlbmRlciBmdW5jdGlvblxuXG5cbmZ1bmN0aW9uIHVzZUV1aUkxOG4oKSB7XG4gIHZhciBpMThuQ29uZmlnID0gdXNlQ29udGV4dChJMThuQ29udGV4dCk7XG4gIHZhciBtYXBwaW5nID0gaTE4bkNvbmZpZy5tYXBwaW5nLFxuICAgICAgbWFwcGluZ0Z1bmMgPSBpMThuQ29uZmlnLm1hcHBpbmdGdW5jLFxuICAgICAgcmVuZGVyID0gaTE4bkNvbmZpZy5yZW5kZXI7XG5cbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHByb3BzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHByb3BzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwcm9wc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgX3Rva2VuID0gcHJvcHNbMF0sXG4gICAgICAgIF9kZWZhdWx0VmFsdWUgPSBwcm9wc1sxXSxcbiAgICAgICAgX3ZhbHVlcyA9IHByb3BzWzJdO1xuICAgIHJldHVybiBsb29rdXBUb2tlbih7XG4gICAgICB0b2tlbjogX3Rva2VuLFxuICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICB2YWx1ZURlZmF1bHQ6IF9kZWZhdWx0VmFsdWUsXG4gICAgICBpMThuTWFwcGluZ0Z1bmM6IG1hcHBpbmdGdW5jLFxuICAgICAgdmFsdWVzOiBfdmFsdWVzLFxuICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX3JlZiA9IHByb3BzLFxuICAgICAgICBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLFxuICAgICAgICBfdG9rZW5zID0gX3JlZjJbMF0sXG4gICAgICAgIF9kZWZhdWx0VmFsdWVzID0gX3JlZjJbMV07XG5cbiAgICByZXR1cm4gX3Rva2Vucy5tYXAoZnVuY3Rpb24gKHRva2VuLCBpZHgpIHtcbiAgICAgIHJldHVybiBsb29rdXBUb2tlbih7XG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgaTE4bk1hcHBpbmc6IG1hcHBpbmcsXG4gICAgICAgIHZhbHVlRGVmYXVsdDogX2RlZmF1bHRWYWx1ZXNbaWR4XSxcbiAgICAgICAgaTE4bk1hcHBpbmdGdW5jOiBtYXBwaW5nRnVuYyxcbiAgICAgICAgcmVuZGVyOiByZW5kZXJcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBJMThuQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHt9KTtcbnZhciBFdWlJMThuUHJvdmlkZXIgPSBJMThuQ29udGV4dC5Qcm92aWRlcixcbiAgICBFdWlJMThuQ29uc3VtZXIgPSBJMThuQ29udGV4dC5Db25zdW1lcjtcblxudmFyIEV1aUNvbnRleHQgPSBmdW5jdGlvbiBFdWlDb250ZXh0KF9yZWYpIHtcbiAgdmFyIF9yZWYkaTE4biA9IF9yZWYuaTE4bixcbiAgICAgIGkxOG4gPSBfcmVmJGkxOG4gPT09IHZvaWQgMCA/IHt9IDogX3JlZiRpMThuLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogaTE4blxuICB9LCBjaGlsZHJlbik7XG59O1xuXG5FdWlDb250ZXh0LnByb3BUeXBlcyA9IHtcbiAgaTE4bjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtYXBwaW5nOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuICAgIG1hcHBpbmdGdW5jOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogU29tZSBicm93c2VycycgdHJhbnNsYXRpb24gZmVhdHVyZXMgZG9uJ3Qgd29yayB3aXRoIGEgcmVuZGVyZWQgYDxGcmFnbWVudD5gIGNvbXBvbmVudC5cbiAgICAgICAqIFRoZSBgcmVuZGVyYCBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHBhc3MgaW4gYW5vdGhlciBjb21wb25lbnQgaW5zdGVhZCwgZS5nLiBgPGRpdj5gXG4gICAgICAgKi9cbiAgICByZW5kZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZvcm1hdE51bWJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9ybWF0RGF0ZVRpbWU6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxvY2FsZTogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59O1xuZXhwb3J0IHsgRXVpQ29udGV4dCwgRXVpSTE4bkNvbnN1bWVyLCBJMThuQ29udGV4dCB9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjbG9uZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0Jvb2xlYW4sIGlzU3RyaW5nLCBpc051bWJlciwgaXNVbmRlZmluZWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmVkaWNhdGUnO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICByZXR1cm4gaXNCb29sZWFuKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSkgfHwgaXNOdW1iZXIodmFsdWUpIHx8IGlzVW5kZWZpbmVkKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaGFzUHJvcE5hbWUoY2hpbGQpIHtcbiAgcmV0dXJuIGNoaWxkID8gX3R5cGVvZihjaGlsZCkgPT09ICdvYmplY3QnICYmIGNoaWxkLmhhc093blByb3BlcnR5KCdwcm9wTmFtZScpIDogZmFsc2U7XG59XG4vKipcbiAqIFJlcGxhY2VzIHBsYWNlaG9sZGVyIHZhbHVlcyBpbiBgaW5wdXRgIHdpdGggdGhlaXIgbWF0Y2hpbmcgdmFsdWUgaW4gYHZhbHVlc2BcbiAqIGUuZy4gaW5wdXQ6J0hlbGxvLCB7bmFtZX0nIHdpbGwgcmVwbGFjZSBge25hbWV9YCB3aXRoIGB2YWx1ZXNbbmFtZV1gXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7UmVuZGVyYWJsZVZhbHVlc30gdmFsdWVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpMThuTWFwcGluZ0Z1bmNcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBSZWFjdC5SZWFjdENoaWxkW119XG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1N0cmluZ1RvQ2hpbGRyZW4oaW5wdXQsIHZhbHVlcywgaTE4bk1hcHBpbmdGdW5jKSB7XG4gIHZhciBjaGlsZHJlbiA9IFtdO1xuICB2YXIgY2hpbGQ7XG5cbiAgZnVuY3Rpb24gYXBwZW5kQ2hhclRvQ2hpbGQoY2hhcikge1xuICAgIGlmIChjaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzdGFydGluZyBhIG5ldyBzdHJpbmcgbGl0ZXJhbFxuICAgICAgY2hpbGQgPSBjaGFyO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZXhpc3Rpbmcgc3RyaW5nIGxpdGVyYWxcbiAgICAgIGNoaWxkID0gY2hpbGQgKyBjaGFyO1xuICAgIH0gZWxzZSBpZiAoaGFzUHJvcE5hbWUoY2hpbGQpKSB7XG4gICAgICAvLyBhZGRpbmcgdG8gdGhlIHByb3BOYW1lIG9mIGEgdmFsdWVzIGxvb2t1cFxuICAgICAgY2hpbGQucHJvcE5hbWUgPSBjaGlsZC5wcm9wTmFtZSArIGNoYXI7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwZW5kVmFsdWVUb0NoaWxkcmVuKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgIC8vIGFuIGFycmF5IHdpdGggYW55IFJlYWN0RWxlbWVudHMgd2lsbCBiZSBrZXB0IGFzIGFuIGFycmF5XG4gICAgICAvLyBzbyB0aGV5IG5lZWQgdG8gYmUgYXNzaWduZWQgYSBrZXlcbiAgICAgIGNoaWxkcmVuLnB1c2goIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQodmFsdWUsIHtcbiAgICAgICAga2V5OiBjaGlsZHJlbi5sZW5ndGhcbiAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKGhhc1Byb3BOYW1lKHZhbHVlKSkgey8vIHRoaXMgd29uJ3QgYmUgY2FsbGVkLCBwcm9wTmFtZSBjaGlsZHJlbiBhcmUgY29udmVydGVkIHRvIGEgUmVhY3RDaGlsZCBiZWZvcmUgY2FsbGluZyB0aGlzXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBjYW4gZ28gc3RyYWlnaHQgaW5cbiAgICAgIGlmIChpMThuTWFwcGluZ0Z1bmMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlID0gaTE4bk1hcHBpbmdGdW5jKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGRyZW4ucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9IC8vIGlmIHdlIGRvbid0IGVuY291bnRlciBhIG5vbi1wcmltaXRpdmVcbiAgLy8gdGhlbiBgY2hpbGRyZW5gIGNhbiBiZSBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgYXQgdGhlIGVuZFxuXG5cbiAgdmFyIGVuY291bnRlcmVkTm9uUHJpbWl0aXZlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaGFyID0gaW5wdXRbaV07XG5cbiAgICBpZiAoY2hhciA9PT0gJ1xcXFwnKSB7XG4gICAgICAvLyBwZWVrIGF0IHRoZSBuZXh0IGNoYXJhY3RlciB0byBrbm93IGlmIHRoaXMgaXMgYW4gZXNjYXBlXG4gICAgICB2YXIgbmV4dENoYXIgPSBpbnB1dFtpICsgMV07XG4gICAgICB2YXIgY2hhclRvQWRkID0gY2hhcjsgLy8gaWYgdGhpcyBpc24ndCBhbiBlc2NhcGUgc2VxdWVuY2UgdGhlbiB3ZSB3aWxsIGFkZCB0aGUgYmFja3NsYXNoXG5cbiAgICAgIGlmIChuZXh0Q2hhciA9PT0gJ3snIHx8IG5leHRDaGFyID09PSAnfScpIHtcbiAgICAgICAgLy8gZXNjYXBpbmcgYSBicmFjZVxuICAgICAgICBpICs9IDE7IC8vIGFkdmFuY2UgcGFzc2VkIHRoZSBicmFjZVxuXG4gICAgICAgIGNoYXJUb0FkZCA9IGlucHV0W2ldO1xuICAgICAgfVxuXG4gICAgICBhcHBlbmRDaGFyVG9DaGlsZChjaGFyVG9BZGQpO1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJ3snKSB7XG4gICAgICBhcHBlbmRWYWx1ZVRvQ2hpbGRyZW4oY2hpbGQpO1xuICAgICAgY2hpbGQgPSB7XG4gICAgICAgIHByb3BOYW1lOiAnJ1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICd9Jykge1xuICAgICAgdmFyIHByb3BOYW1lID0gY2hpbGQucHJvcE5hbWU7XG5cbiAgICAgIGlmICghdmFsdWVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJLZXkgXFxcIlwiLmNvbmNhdChwcm9wTmFtZSwgXCJcXFwiIG5vdCBmb3VuZCBpbiBcIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KHZhbHVlcywgbnVsbCwgMikpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHZhbHVlc1twcm9wTmFtZV07XG4gICAgICBlbmNvdW50ZXJlZE5vblByaW1pdGl2ZSA9IGVuY291bnRlcmVkTm9uUHJpbWl0aXZlIHx8ICFpc1ByaW1pdGl2ZShwcm9wVmFsdWUpO1xuICAgICAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKHByb3BWYWx1ZSk7XG4gICAgICBjaGlsZCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hhclRvQ2hpbGQoY2hhcik7XG4gICAgfVxuICB9IC8vIGluY2x1ZGUgYW55IHJlbWFpbmluZyBjaGlsZCB2YWx1ZVxuXG5cbiAgYXBwZW5kVmFsdWVUb0NoaWxkcmVuKGNoaWxkKTtcbiAgcmV0dXJuIGVuY291bnRlcmVkTm9uUHJpbWl0aXZlID8gY2hpbGRyZW4gOiBjaGlsZHJlbi5qb2luKCcnKTtcbn0iLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmV4cG9ydCB2YXIgdXNlTG9hZGluZ0FyaWFMYWJlbCA9IGZ1bmN0aW9uIHVzZUxvYWRpbmdBcmlhTGFiZWwoKSB7XG4gIHJldHVybiB1c2VFdWlJMThuKCdldWlMb2FkaW5nU3RyaW5ncy5hcmlhTGFiZWwnLCAnTG9hZGluZycpO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInNpemVcIiwgXCJjbGFzc05hbWVcIiwgXCJhcmlhLWxhYmVsXCIsIFwiY29sb3JcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VMb2FkaW5nQXJpYUxhYmVsIH0gZnJvbSAnLi9fbG9hZGluZ19zdHJpbmdzJztcbmltcG9ydCB7IGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzIH0gZnJvbSAnLi9sb2FkaW5nX3NwaW5uZXIuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nLCAnbCcsICd4bCcsICd4eGwnXTtcbmV4cG9ydCB2YXIgRXVpTG9hZGluZ1NwaW5uZXIgPSBmdW5jdGlvbiBFdWlMb2FkaW5nU3Bpbm5lcihfcmVmKSB7XG4gIHZhciBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMoZXVpVGhlbWUsIGNvbG9yKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpTG9hZGluZ1NwaW5uZXIsIHN0eWxlc1tzaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpTG9hZGluZ1NwaW5uZXInLCBjbGFzc05hbWUpO1xuICB2YXIgZGVmYXVsdExhYmVsID0gdXNlTG9hZGluZ0FyaWFMYWJlbCgpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICByb2xlOiBcInByb2dyZXNzYmFyXCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCB8fCBkZWZhdWx0TGFiZWxcbiAgfSwgcmVzdCkpO1xufTtcbkV1aUxvYWRpbmdTcGlubmVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIGJvcmRlciBhbmQgaGlnaGxpZ2h0LlxuICAgICAgICogRWFjaCBrZXkgYWNjZXB0cyBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlIGFzIGEgYHN0cmluZ2BcbiAgICAgICAqIFNlZSAjRXVpTG9hZGluZ1NwaW5uZXJDb2xvclxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJvcmRlcjogUHJvcFR5cGVzLmFueSxcbiAgICBoaWdobGlnaHQ6IFByb3BUeXBlcy5hbnlcbiAgfSlcbn07IiwgInZhciBfdGVtcGxhdGVPYmplY3Q7XG5cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7IGlmICghcmF3KSB7IHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7IH0gcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgX2xvYWRpbmdTcGlubmVyID0ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIGZyb20ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG5cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcXG4gIH1cXG5cIl0pKSk7XG5cbnZhciBzcGlubmVyU2l6ZXMgPSB7XG4gIHM6ICdtJyxcbiAgbTogJ2Jhc2UnLFxuICBsOiAnbCcsXG4gIHhsOiAneGwnLFxuICB4eGw6ICd4eGwnXG59O1xuXG52YXIgc3Bpbm5lckNvbG9yc0NTUyA9IGZ1bmN0aW9uIHNwaW5uZXJDb2xvcnNDU1MoYm9yZGVyLCBoaWdobGlnaHQpIHtcbiAgcmV0dXJuIFwiXFxuICAgIGJvcmRlci1jb2xvcjogXCIuY29uY2F0KGhpZ2hsaWdodCwgXCIgXCIpLmNvbmNhdChib3JkZXIsIFwiIFwiKS5jb25jYXQoYm9yZGVyLCBcIiBcIikuY29uY2F0KGJvcmRlciwgXCI7XFxuICBcIik7XG59O1xuXG5leHBvcnQgdmFyIGV1aUxvYWRpbmdTcGlubmVyU3R5bGVzID0gZnVuY3Rpb24gZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMoX3JlZiwgY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlMb2FkaW5nU3Bpbm5lcjogLyojX19QVVJFX18qL2NzcyhcImZsZXgtc2hyaW5rOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOlwiLCBldWlUaGVtZS5ib3JkZXIudGhpY2ssIFwiO1wiLCBzcGlubmVyQ29sb3JzQ1NTKChjb2xvciA9PT0gbnVsbCB8fCBjb2xvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29sb3IuYm9yZGVyKSB8fCBldWlUaGVtZS5jb2xvcnMubGlnaHRTaGFkZSwgKGNvbG9yID09PSBudWxsIHx8IGNvbG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb2xvci5oaWdobGlnaHQpIHx8IGV1aVRoZW1lLmNvbG9ycy5wcmltYXJ5KSwgXCI7XCIsIGV1aUNhbkFuaW1hdGUsIFwie2FuaW1hdGlvbjpcIiwgX2xvYWRpbmdTcGlubmVyLCBcIiAwLjZzIGluZmluaXRlIGxpbmVhcjt9O2xhYmVsOmV1aUxvYWRpbmdTcGlubmVyO1wiKSxcbiAgICAvLyBTaXplc1xuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJ3aWR0aDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMuc10sIFwiO2hlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMuc10sIFwiO2JvcmRlci13aWR0aDpjYWxjKFwiLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiwgXCIgKiAxLjUpOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLm1dLCBcIjtoZWlnaHQ6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLm1dLCBcIjtib3JkZXItd2lkdGg6Y2FsYyhcIiwgZXVpVGhlbWUuYm9yZGVyLndpZHRoLnRoaW4sIFwiICogMS41KTs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2NzcyhcIndpZHRoOlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5sXSwgXCI7aGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy5sXSwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnhsXSwgXCI7aGVpZ2h0OlwiLCBldWlUaGVtZS5zaXplW3NwaW5uZXJTaXplcy54bF0sIFwiOztsYWJlbDp4bDtcIiksXG4gICAgeHhsOiAvKiNfX1BVUkVfXyovY3NzKFwid2lkdGg6XCIsIGV1aVRoZW1lLnNpemVbc3Bpbm5lclNpemVzLnh4bF0sIFwiO2hlaWdodDpcIiwgZXVpVGhlbWUuc2l6ZVtzcGlubmVyU2l6ZXMueHhsXSwgXCI7O2xhYmVsOnh4bDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgVVJMIGZyb20gJ3VybC1wYXJzZSc7XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVIcmVmKGhyZWYpIHtcbiAgLy8gY2hlY2sgaHJlZiBhbmQgdHJlYXQgaXQgYXMgaW52YWxpZCBpZiBpdCB1c2VzIHRoZSBqYXZhc2NyaXB0OiBwcm90b2NvbFxuICB2YXIgcGFydHMgPSBuZXcgVVJMKGhyZWYpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2NyaXB0LXVybFxuXG4gIHJldHVybiBwYXJ0cy5wcm90b2NvbCAhPT0gJ2phdmFzY3JpcHQ6Jztcbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFdWlPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyJztcbmV4cG9ydCB2YXIgaGFzUmVzaXplT2JzZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LlJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbmV4cG9ydCB2YXIgRXVpUmVzaXplT2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9FdWlPYnNlcnZlcikge1xuICBfaW5oZXJpdHMoRXVpUmVzaXplT2JzZXJ2ZXIsIF9FdWlPYnNlcnZlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlSZXNpemVPYnNlcnZlcik7XG5cbiAgZnVuY3Rpb24gRXVpUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVJlc2l6ZU9ic2VydmVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibmFtZVwiLCAnRXVpUmVzaXplT2JzZXJ2ZXInKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICB3aWR0aDogMFxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uUmVzaXplXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGBlbnRyeS5jb250ZW50UmVjdGAgcHJvdmlkZXMgaW5jb21wbGV0ZSBgaGVpZ2h0YCBhbmQgYHdpZHRoYCBkYXRhLlxuICAgICAgLy8gVXNlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgYW5kIGJvcmRlci5cbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01SZWN0UmVhZE9ubHlcbiAgICAgIGlmICghX3RoaXMuY2hpbGROb2RlKSByZXR1cm47XG5cbiAgICAgIHZhciBfdGhpcyRjaGlsZE5vZGUkZ2V0Qm8gPSBfdGhpcy5jaGlsZE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkY2hpbGROb2RlJGdldEJvLmhlaWdodCxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJGNoaWxkTm9kZSRnZXRCby53aWR0aDsgLy8gQ2hlY2sgZm9yIGFjdHVhbCByZXNpemUgZXZlbnRcblxuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUuaGVpZ2h0ID09PSBoZWlnaHQgJiYgX3RoaXMuc3RhdGUud2lkdGggPT09IHdpZHRoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMucHJvcHMub25SZXNpemUoe1xuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhlIHN1cGVyY2xhc3MgY2hlY2tzIHRoYXQgY2hpbGROb2RlIGlzIG5vdCBudWxsIGJlZm9yZSBpbnZva2luZ1xuICAgICAgLy8gYmVnaW5PYnNlcnZlKClcbiAgICAgIHZhciBjaGlsZE5vZGUgPSBfdGhpcy5jaGlsZE5vZGU7XG4gICAgICBfdGhpcy5vYnNlcnZlciA9IG1ha2VSZXNpemVPYnNlcnZlcihjaGlsZE5vZGUsIF90aGlzLm9uUmVzaXplKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBFdWlSZXNpemVPYnNlcnZlcjtcbn0oRXVpT2JzZXJ2ZXIpO1xuXG52YXIgbWFrZVJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gbWFrZVJlc2l6ZU9ic2VydmVyKG5vZGUsIGNhbGxiYWNrKSB7XG4gIHZhciBvYnNlcnZlcjtcblxuICBpZiAoaGFzUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICBvYnNlcnZlciA9IG5ldyB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIoY2FsbGJhY2spO1xuICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSk7XG4gIH1cblxuICByZXR1cm4gb2JzZXJ2ZXI7XG59O1xuXG5leHBvcnQgdmFyIHVzZVJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gdXNlUmVzaXplT2JzZXJ2ZXIoY29udGFpbmVyLCBkaW1lbnNpb24pIHtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKHtcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDBcbiAgfSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHNpemUgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgX3NldFNpemUgPSBfdXNlU3RhdGUyWzFdOyAvLyBfY3VycmVudERpbWVuc2lvbnMgYW5kIF9zZXRTaXplIGFyZSB1c2VkIHRvIG9ubHkgc3RvcmUgdGhlXG4gIC8vIG5ldyBzdGF0ZSAoYW5kIHRyaWdnZXIgYSByZS1yZW5kZXIpIHdoZW4gdGhlIG5ldyBkaW1lbnNpb25zIGFjdHVhbGx5IGRpZmZlclxuXG5cbiAgdmFyIF9jdXJyZW50RGltZW5zaW9ucyA9IHVzZVJlZihzaXplKTtcblxuICB2YXIgc2V0U2l6ZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChkaW1lbnNpb25zKSB7XG4gICAgdmFyIGRvZXNXaWR0aE1hdHRlciA9IGRpbWVuc2lvbiAhPT0gJ2hlaWdodCc7XG4gICAgdmFyIGRvZXNIZWlnaHRNYXR0ZXIgPSBkaW1lbnNpb24gIT09ICd3aWR0aCc7XG5cbiAgICBpZiAoZG9lc1dpZHRoTWF0dGVyICYmIF9jdXJyZW50RGltZW5zaW9ucy5jdXJyZW50LndpZHRoICE9PSBkaW1lbnNpb25zLndpZHRoIHx8IGRvZXNIZWlnaHRNYXR0ZXIgJiYgX2N1cnJlbnREaW1lbnNpb25zLmN1cnJlbnQuaGVpZ2h0ICE9PSBkaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgX2N1cnJlbnREaW1lbnNpb25zLmN1cnJlbnQgPSBkaW1lbnNpb25zO1xuXG4gICAgICBfc2V0U2l6ZShkaW1lbnNpb25zKTtcbiAgICB9XG4gIH0sIFtkaW1lbnNpb25dKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgIC8vIFJlc2l6ZU9ic2VydmVyJ3MgZmlyc3QgY2FsbCB0byB0aGUgb2JzZXJ2YXRpb24gY2FsbGJhY2sgaXMgc2NoZWR1bGVkIGluIHRoZSBmdXR1cmVcbiAgICAgIC8vIHNvIGZpbmQgdGhlIGNvbnRhaW5lcidzIGluaXRpYWwgZGltZW5zaW9ucyBub3dcbiAgICAgIHZhciBib3VuZGluZ1JlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBzZXRTaXplKHtcbiAgICAgICAgd2lkdGg6IGJvdW5kaW5nUmVjdC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBib3VuZGluZ1JlY3QuaGVpZ2h0XG4gICAgICB9KTtcbiAgICAgIHZhciBvYnNlcnZlciA9IG1ha2VSZXNpemVPYnNlcnZlcihjb250YWluZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gYGVudHJ5LmNvbnRlbnRSZWN0YCBwcm92aWRlcyBpbmNvbXBsZXRlIGBoZWlnaHRgIGFuZCBgd2lkdGhgIGRhdGEuXG4gICAgICAgIC8vIFVzZSBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGFuZCBib3JkZXIuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01SZWN0UmVhZE9ubHlcbiAgICAgICAgdmFyIF9jb250YWluZXIkZ2V0Qm91bmRpbiA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICAgIGhlaWdodCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi5oZWlnaHQsXG4gICAgICAgICAgICB3aWR0aCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi53aWR0aDtcblxuICAgICAgICBzZXRTaXplKHtcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZlciAmJiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTaXplKHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY29udGFpbmVyLCBzZXRTaXplXSk7XG4gIHJldHVybiBzaXplO1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgRXVpT2JzZXJ2ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aU9ic2VydmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aU9ic2VydmVyKTtcblxuICBmdW5jdGlvbiBFdWlPYnNlcnZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpT2JzZXJ2ZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJuYW1lXCIsICdFdWlPYnNlcnZlcicpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNoaWxkTm9kZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvYnNlcnZlclwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ1cGRhdGVDaGlsZE5vZGVcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgaWYgKF90aGlzLmNoaWxkTm9kZSA9PT0gcmVmKSByZXR1cm47IC8vIG5vZGUgaGFzbid0IGNoYW5nZWRcbiAgICAgIC8vIGlmIHRoZXJlJ3MgYW4gZXhpc3Rpbmcgb2JzZXJ2ZXIgZGlzY29ubmVjdCBpdFxuXG4gICAgICBpZiAoX3RoaXMub2JzZXJ2ZXIgIT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cbiAgICAgICAgX3RoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jaGlsZE5vZGUgPSByZWY7XG5cbiAgICAgIGlmIChfdGhpcy5jaGlsZE5vZGUgIT0gbnVsbCkge1xuICAgICAgICBfdGhpcy5iZWdpbk9ic2VydmUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdWlPYnNlcnZlciBoYXMgbm8gZGVmYXVsdCBvYnNlcnZhdGlvbiBtZXRob2QnKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlPYnNlcnZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5jaGlsZE5vZGUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIi5jb25jYXQodGhpcy5uYW1lLCBcIiBkaWQgbm90IHJlY2VpdmUgYSByZWZcIikpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLm9ic2VydmVyICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgICAgcmV0dXJuIHByb3BzLmNoaWxkcmVuKHRoaXMudXBkYXRlQ2hpbGROb2RlKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpT2JzZXJ2ZXI7XG59KENvbXBvbmVudCk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJzaXplXCIsIFwiY29sb3JcIiwgXCJncm93XCIsIFwidGV4dEFsaWduXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRleHRTdHlsZXMgfSBmcm9tICcuL3RleHQuc3R5bGVzJztcbmltcG9ydCB7IEV1aVRleHRDb2xvciB9IGZyb20gJy4vdGV4dF9jb2xvcic7XG5pbXBvcnQgeyBFdWlUZXh0QWxpZ24gfSBmcm9tICcuL3RleHRfYWxpZ24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgVEVYVF9TSVpFUyA9IFsneHMnLCAncycsICdtJywgJ3JlbGF0aXZlJ107XG5leHBvcnQgdmFyIEV1aVRleHQgPSBmdW5jdGlvbiBFdWlUZXh0KF9yZWYpIHtcbiAgdmFyIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIF9yZWYkZ3JvdyA9IF9yZWYuZ3JvdyxcbiAgICAgIGdyb3cgPSBfcmVmJGdyb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGdyb3csXG4gICAgICB0ZXh0QWxpZ24gPSBfcmVmLnRleHRBbGlnbixcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlUZXh0U3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dCwgIWdyb3cgPyBzdHlsZXMuY29uc3RyYWluZWRXaWR0aCA6IHVuZGVmaW5lZCwgc3R5bGVzW3NpemVdXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUZXh0JywgY2xhc3NOYW1lKTtcblxuICB2YXIgdGV4dCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNzczogY3NzU3R5bGVzLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuXG4gIGlmIChjb2xvcikge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aVRleHRDb2xvciwge1xuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgY2xvbmVFbGVtZW50OiB0cnVlXG4gICAgfSwgdGV4dCk7XG4gIH1cblxuICBpZiAodGV4dEFsaWduKSB7XG4gICAgdGV4dCA9IF9fX0Vtb3Rpb25KU1goRXVpVGV4dEFsaWduLCB7XG4gICAgICB0ZXh0QWxpZ246IHRleHRBbGlnbixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNsb25lRWxlbWVudDogdHJ1ZVxuICAgIH0sIHRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRleHQ7XG59O1xuRXVpVGV4dC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgdGV4dCBzaXplLiBDaG9vc2UgYHJlbGF0aXZlYCB0byBjb250cm9sIHRoZSBgZm9udC1zaXplYCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYSBwYXJlbnQgY29udGFpbmVyLlxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9ycyBvciBhIGBoZXhgLCBgcmdiYCBvciBgcmdiYWAgdmFsdWUuXG4gICAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gIGdyb3c6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGxvZ2ljYWxDU1MgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5cbnZhciBfY29sb3JDU1MgPSBmdW5jdGlvbiBfY29sb3JDU1MoY29sb3IpIHtcbiAgcmV0dXJuIFwiXFxuICAgIGNvbG9yOiBcIi5jb25jYXQoY29sb3IsIFwiO1xcblxcbiAgICAmOmhvdmVyLFxcbiAgICAmOmZvY3VzLFxcbiAgICAmOnRhcmdldCB7XFxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgIH1cXG5cXG4gICAgJjp0YXJnZXQge1xcbiAgICAgIGNvbG9yOiBkYXJrZW4oXCIpLmNvbmNhdChjb2xvciwgXCIsIDEwJSk7XFxuICAgIH1cXG4gIFwiKTtcbn07XG5cbmV4cG9ydCB2YXIgZXVpTGlua0hvdmVyQ1NTID0gZnVuY3Rpb24gZXVpTGlua0hvdmVyQ1NTKCkge1xuICByZXR1cm4gXCJcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICBcIjtcbn07XG5leHBvcnQgdmFyIGV1aUxpbmtGb2N1c0NTUyA9IGZ1bmN0aW9uIGV1aUxpbmtGb2N1c0NTUyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IFwiLmNvbmNhdChldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpY2ssIFwiICFpbXBvcnRhbnQ7XFxuICBcIik7XG59O1xuZXhwb3J0IHZhciBldWlMaW5rQ1NTID0gZnVuY3Rpb24gZXVpTGlua0NTUyhldWlUaGVtZSkge1xuICByZXR1cm4gXCJcXG4gICAgZm9udC13ZWlnaHQ6IFwiLmNvbmNhdChldWlUaGVtZS5mb250LndlaWdodC5tZWRpdW0sIFwiO1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBcIikuY29uY2F0KGV1aUxpbmtIb3ZlckNTUygpLCBcIlxcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMge1xcbiAgICAgIFwiKS5jb25jYXQoZXVpRm9jdXNSaW5nKGV1aVRoZW1lLCAnb3V0c2V0JyksIFwiXFxuICAgICAgXCIpLmNvbmNhdChldWlMaW5rRm9jdXNDU1MoZXVpVGhlbWUpLCBcIlxcbiAgICB9XFxuICBcIik7XG59O1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCI5bmpiaTUtZGlzYWJsZWRcIixcbiAgc3R5bGVzOiBcImZvbnQtd2VpZ2h0OmluaGVyaXQ7Jjpob3ZlcntjdXJzb3I6YXV0bzt9Jjpob3ZlciwmOmZvY3VzLCY6dGFyZ2V0e3RleHQtZGVjb3JhdGlvbjpub25lO307bGFiZWw6ZGlzYWJsZWQ7XCJcbn0gOiB7XG4gIG5hbWU6IFwiOW5qYmk1LWRpc2FibGVkXCIsXG4gIHN0eWxlczogXCJmb250LXdlaWdodDppbmhlcml0OyY6aG92ZXJ7Y3Vyc29yOmF1dG87fSY6aG92ZXIsJjpmb2N1cywmOnRhcmdldHt0ZXh0LWRlY29yYXRpb246bm9uZTt9O2xhYmVsOmRpc2FibGVkO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpTGlua1N0eWxlcyA9IGZ1bmN0aW9uIGV1aUxpbmtTdHlsZXMoX3JlZjIpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjIuZXVpVGhlbWU7XG4gIHJldHVybiB7XG4gICAgZXVpTGluazogLyojX19QVVJFX18qL2NzcyhldWlMaW5rQ1NTKGV1aVRoZW1lKSwgXCIgdXNlci1zZWxlY3Q6dGV4dDsmW3RhcmdldD0nX2JsYW5rJ117cG9zaXRpb246cmVsYXRpdmU7fTtsYWJlbDpldWlMaW5rO1wiKSxcbiAgICBkaXNhYmxlZDogX3JlZixcbiAgICAvLyBDb2xvciBzdHlsZXNcbiAgICBwcmltYXJ5OiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMucHJpbWFyeVRleHQpLCBcIjtsYWJlbDpwcmltYXJ5O1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuc3ViZHVlZFRleHQpLCBcIjtsYWJlbDpzdWJkdWVkO1wiKSxcbiAgICBzdWNjZXNzOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMuc3VjY2Vzc1RleHQpLCBcIjtsYWJlbDpzdWNjZXNzO1wiKSxcbiAgICBhY2NlbnQ6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0KSwgXCI7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy5kYW5nZXJUZXh0KSwgXCI7bGFiZWw6ZGFuZ2VyO1wiKSxcbiAgICB3YXJuaW5nOiAvKiNfX1BVUkVfXyovY3NzKF9jb2xvckNTUyhldWlUaGVtZS5jb2xvcnMud2FybmluZ1RleHQpLCBcIjtsYWJlbDp3YXJuaW5nO1wiKSxcbiAgICBnaG9zdDogLyojX19QVVJFX18qL2NzcyhfY29sb3JDU1MoZXVpVGhlbWUuY29sb3JzLmdob3N0KSwgXCI7bGFiZWw6Z2hvc3Q7XCIpLFxuICAgIHRleHQ6IC8qI19fUFVSRV9fKi9jc3MoX2NvbG9yQ1NTKGV1aVRoZW1lLmNvbG9ycy50ZXh0KSwgXCI7bGFiZWw6dGV4dDtcIiksXG4gICAgLy8gQ2hpbGRyZW5cbiAgICBldWlMaW5rX19zY3JlZW5SZWFkZXJUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ2xlZnQnLCAnMHB4JyksIFwiOztsYWJlbDpldWlMaW5rX19zY3JlZW5SZWFkZXJUZXh0O1wiKSxcbiAgICBldWlMaW5rX19leHRlcm5hbEljb246IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOmV1aUxpbmtfX2V4dGVybmFsSWNvbjtcIilcbiAgfTtcbn07IiwgImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18oKSB7IHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlUZXh0QnJlYWtXb3JkLCBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpVGl0bGUgPSBmdW5jdGlvbiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIHNjYWxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnbSc7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIHRpdGxlU2NhbGVUb0ZvbnRTaXplU2NhbGVNYXAgPSB7XG4gICAgeHh4czogJ3hzJyxcbiAgICB4eHM6ICdzJyxcbiAgICB4czogJ20nLFxuICAgIHM6ICdsJyxcbiAgICBtOiAneGwnLFxuICAgIGw6ICd4eGwnXG4gIH07XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgdGl0bGVTY2FsZVRvRm9udFNpemVTY2FsZU1hcFtzY2FsZV0sIG9wdGlvbnMpKSwge30sIHtcbiAgICBmb250V2VpZ2h0OiBldWlUaGVtZS5mb250LndlaWdodFtldWlUaGVtZS5mb250LnRpdGxlLndlaWdodF0sXG4gICAgY29sb3I6IGV1aVRoZW1lLmNvbG9ycy50aXRsZVxuICB9KTtcbn07IC8vIEhvb2sgdmVyc2lvblxuXG5leHBvcnQgdmFyIHVzZUV1aVRpdGxlID0gZnVuY3Rpb24gdXNlRXVpVGl0bGUoc2NhbGUsIG9wdGlvbnMpIHtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVRpdGxlKGV1aVRoZW1lLCBzY2FsZSwgb3B0aW9ucyk7XG59O1xuLyoqXG4gKiBTdHlsZXNcbiAqL1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxeDJxc2IxLXVwcGVyY2FzZVwiLFxuICBzdHlsZXM6IFwidGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xhYmVsOnVwcGVyY2FzZTtcIlxufSA6IHtcbiAgbmFtZTogXCIxeDJxc2IxLXVwcGVyY2FzZVwiLFxuICBzdHlsZXM6IFwidGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2xhYmVsOnVwcGVyY2FzZTtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aVRpdGxlU3R5bGVzID0gZnVuY3Rpb24gZXVpVGl0bGVTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHJldHVybiB7XG4gICAgZXVpVGl0bGU6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGV4dEJyZWFrV29yZCgpLCBcIiAmKyZ7bWFyZ2luLXRvcDpcIiwgZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lLnNpemUubCwgXCI7fTtsYWJlbDpldWlUaXRsZTtcIiksXG4gICAgdXBwZXJjYXNlOiBfcmVmLFxuICAgIC8vIFNpemVzXG4gICAgeHh4czogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksIFwiOztsYWJlbDp4eHhzO1wiKSxcbiAgICB4eHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJyksIFwiOztsYWJlbDp4eHM7XCIpLFxuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3hzJyksIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2NzcyhldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjs7bGFiZWw6bDtcIilcbiAgfTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBldWlGb250U2l6ZSwgZXVpQmFja2dyb3VuZENvbG9yIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsgZXVpTGlua0NTUyB9IGZyb20gJy4uL2xpbmsvbGluay5zdHlsZXMnO1xuaW1wb3J0IHsgZXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZS90aXRsZS5zdHlsZXMnO1xuLyoqXG4gKiBUT0RPOiBNYWtlIHRoaXMgYSBnbG9iYWwgdmFsdWUgc28gaXQgY2FuIGJlIHNldCBieSB0aGVtZT9cbiAqL1xuXG5leHBvcnQgdmFyIGV1aVRleHRDb25zdHJhaW5lZE1heFdpZHRoID0gJ21heCg2NGNoLCA3NSUpJztcbi8qKlxuICogTWl4aW5zXG4gKi9cblxuZXhwb3J0IHZhciBldWlUZXh0ID0gZnVuY3Rpb24gZXVpVGV4dChldWlUaGVtZSkge1xuICB2YXIgaW5oZXJpdENvbG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICBjb2xvcjogaW5oZXJpdENvbG9yID8gJ2luaGVyaXQnIDogZXVpVGhlbWUuY29sb3JzLnRleHQsXG4gICAgZm9udFdlaWdodDogZXVpVGhlbWUuZm9udC53ZWlnaHQucmVndWxhclxuICB9O1xufTsgLy8gSW50ZXJuYWwgdXRpbGl0eSBmb3IgRXVpVGV4dCBzY2FsZXMvc2l6ZXNcblxudmFyIGV1aVNjYWxlVGV4dCA9IGZ1bmN0aW9uIGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIG9wdGlvbnMpIHtcbiAgdmFyIF9ldWlGb250U2l6ZSA9IGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ20nLCBvcHRpb25zKSxcbiAgICAgIGZvbnRTaXplID0gX2V1aUZvbnRTaXplLmZvbnRTaXplLFxuICAgICAgbGluZUhlaWdodCA9IF9ldWlGb250U2l6ZS5saW5lSGVpZ2h0O1xuXG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgdmFyIG1lYXN1cmVtZW50ID0gb3B0aW9ucy5tZWFzdXJlbWVudCxcbiAgICAgIF9jdXN0b21TY2FsZSA9IG9wdGlvbnMuY3VzdG9tU2NhbGU7XG4gIHZhciBsaW5lSGVpZ2h0U2l6ZSA9IG1lYXN1cmVtZW50ID09PSAnZW0nID8gXCJcIi5jb25jYXQobGluZUhlaWdodCwgXCJlbVwiKSA6IGxpbmVIZWlnaHQ7XG4gIHZhciBoZWFkaW5ncyA9IHtcbiAgICBoMTogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcsIG9wdGlvbnMpLFxuICAgIGgyOiBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdtJywgb3B0aW9ucyksXG4gICAgaDM6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3MnLCBvcHRpb25zKSxcbiAgICBoNDogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHMnLCBvcHRpb25zKSxcbiAgICBoNTogZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHhzJywgb3B0aW9ucyksXG4gICAgaDY6IGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ3h4eHMnLCBvcHRpb25zKVxuICB9OyAvLyBHZW5lcmF0ZSBtYXJnaW5zIGZvciBoZWFkaW5ncyBiYXNlZCBvbiBjdXN0b21TY2FsZSAobm90IG9uIGhlYWRpbmcgbGV2ZWwpXG5cbiAgdmFyIGN1c3RvbVNjYWxlID0gX2N1c3RvbVNjYWxlID09PSAneHh4cycgPyAneHhzJyA6IF9jdXN0b21TY2FsZSB8fCAnbSc7XG4gIHZhciBoZWFkaW5nTWFyZ2luVG9wID0gXCJcIi5jb25jYXQocGFyc2VGbG9hdChldWlUaGVtZS5zaXplW2N1c3RvbVNjYWxlXSkgKiAyLCBcInB4XCIpO1xuICB2YXIgaGVhZGluZ01hcmdpbkJvdHRvbSA9IGV1aVRoZW1lLnNpemVbY3VzdG9tU2NhbGVdO1xuICByZXR1cm4gXCJcXG4gICAgZm9udC1zaXplOiBcIi5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChsaW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgaDEge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMS5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDEubGluZUhlaWdodCwgXCI7XFxuICAgIH1cXG4gICAgaDE6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgIH1cXG5cXG4gICAgaDIge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oMi5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDIubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoMyB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmgzLmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oMy5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGg0IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDQuZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGhlYWRpbmdzLmg0LmxpbmVIZWlnaHQsIFwiO1xcblxcbiAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgaGVhZGluZ01hcmdpblRvcCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBoZWFkaW5nTWFyZ2luQm90dG9tKSwgXCJcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaDUge1xcbiAgICAgIGZvbnQtc2l6ZTogXCIpLmNvbmNhdChoZWFkaW5ncy5oNS5mb250U2l6ZSwgXCI7XFxuICAgICAgbGluZS1oZWlnaHQ6IFwiKS5jb25jYXQoaGVhZGluZ3MuaDUubGluZUhlaWdodCwgXCI7XFxuXFxuICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBoZWFkaW5nTWFyZ2luVG9wKSwgXCJcXG4gICAgICB9XFxuXFxuICAgICAgJjpub3QoOmxhc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIGhlYWRpbmdNYXJnaW5Cb3R0b20pLCBcIlxcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoNiB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGhlYWRpbmdzLmg2LmZvbnRTaXplLCBcIjtcXG4gICAgICBsaW5lLWhlaWdodDogXCIpLmNvbmNhdChoZWFkaW5ncy5oNi5saW5lSGVpZ2h0LCBcIjtcXG5cXG4gICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbWFyZ2luLXRvcCcsIGhlYWRpbmdNYXJnaW5Ub3ApLCBcIlxcbiAgICAgIH1cXG5cXG4gICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtYXJnaW4tYm90dG9tJywgaGVhZGluZ01hcmdpbkJvdHRvbSksIFwiXFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHAsXFxuICAgIHVsLFxcbiAgICBvbCxcXG4gICAgZGwsXFxuICAgIGJsb2NrcXVvdGUsXFxuICAgIGltZyxcXG4gICAgcHJlIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCBsaW5lSGVpZ2h0U2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgdWwsXFxuICAgIG9sIHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi1sZWZ0JywgbGluZUhlaWdodFNpemUpLCBcIlxcbiAgICB9XFxuICBcXG4gICAgYmxvY2txdW90ZSB7XFxuICAgICAgZm9udC1zaXplOiBcIikuY29uY2F0KGZvbnRTaXplLCBcIjtcXG4gICAgICBwYWRkaW5nOiBcIikuY29uY2F0KGxpbmVIZWlnaHRTaXplLCBcIjtcXG4gICAgfVxcblxcbiAgICBkZCArIGR0IHtcXG4gICAgICBcIikuY29uY2F0KGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBmb250U2l6ZSksIFwiXFxuICAgIH1cXG5cXG4gICAgZHQsXFxuICAgIC5ldWktZGVmaW5pdGlvbkxpc3RSZXZlcnNlIGRkIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZm9udFNpemUsIFwiO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiBcIikuY29uY2F0KGxpbmVIZWlnaHQsIFwiO1xcbiAgICB9XFxuXFxuICAgIC5ldWktZGVmaW5pdGlvbkxpc3RSZXZlcnNlIGR0IHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAneHMnLCBvcHRpb25zKS5mb250U2l6ZSwgXCI7XFxuICAgICAgY29sb3I6IFwiKS5jb25jYXQoZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO1xcbiAgICB9XFxuXFxuICAgIHNtYWxsIHtcXG4gICAgICBmb250LXNpemU6IFwiKS5jb25jYXQoZXVpRm9udFNpemUoZXVpVGhlbWVDb250ZXh0LCAncycsIG9wdGlvbnMpLmZvbnRTaXplLCBcIjtcXG4gICAgfVxcblxcbiAgICBwcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSkge1xcbiAgICAgIHBhZGRpbmc6IFwiKS5jb25jYXQobGluZUhlaWdodFNpemUsIFwiO1xcbiAgICB9XFxuXFxuICAgIGNvZGU6bm90KC5ldWlDb2RlKTpub3QoLmV1aUNvZGVCbG9ja19fY29kZSkgIHtcXG4gICAgICBmb250LXNpemU6IC45ZW07IC8vIDkwJSBvZiBwYXJlbnQgZm9udCBzaXplXFxuICAgIH1cXG4gICAgXCIpLmNvbmNhdCggLy8gd2hlbiB0ZXh0U2l6ZSBpcyAnbScsIHRoZSAna2JkJyBlbGVtZW50IGdldHMgYSBsaW5lIGJldHdlZW4gdGhlIHRleHQgYW5kIHRoZSBib3JkZXItYm90dG9tXG4gIF9jdXN0b21TY2FsZSA9PT0gJ20nID8gXCJcXG4gICAga2JkIHtcXG4gICAgICBcIi5jb25jYXQobG9naWNhbENTUygncGFkZGluZy1ib3R0b20nLCBldWlUaGVtZS5zaXplLnhzKSwgXCJcXG4gICAgICAvLyBlbnN1cmVzIHdoZW4gb25seSBvbmUgY2hhcmFjdGVyIHRoZSBzaGFwZSBsb29rcyBsaWtlIGEgc3F1YXJlXFxuICAgICAgXCIpLmNvbmNhdChsb2dpY2FsQ1NTKCdtaW4td2lkdGgnLCBldWlUaGVtZS5zaXplLmwpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbFRleHRBbGlnbkNTUygnY2VudGVyJyksIFwiXFxuICAgIH1cXG4gICAgXFxuICAgIGtiZDo6YWZ0ZXIge1xcbiAgICAgIGNvbnRlbnQ6ICcnO1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnYm9yZGVyLWJvdHRvbScsIFwiXCIuY29uY2F0KGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIikuY29uY2F0KGV1aVRoZW1lLmNvbG9ycy50ZXh0KSksIFwiXFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnYm90dG9tJywgZXVpVGhlbWUuc2l6ZS54eHMpLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnbGVmdCcsIDApLCBcIlxcbiAgICAgIFwiKS5jb25jYXQobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIlxcbiAgICB9XCIpIDogJycsIFwiXFxuICBcIik7XG59O1xuLyoqXG4gKiBTdHlsZXNcbiAqL1xuXG5cbmV4cG9ydCB2YXIgZXVpVGV4dFN0eWxlcyA9IGZ1bmN0aW9uIGV1aVRleHRTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlUZXh0OiAvKiNfX1BVUkVfXyovY3NzKGV1aVRleHQoZXVpVGhlbWUsIHRydWUpLCBcIjtjbGVhcjpib3RoO2E6bm90KFtjbGFzc10pe1wiLCBldWlMaW5rQ1NTKGV1aVRoZW1lKSwgXCI7fWltZ3tkaXNwbGF5OmJsb2NrO1wiLCBsb2dpY2FsQ1NTKCdtYXgtd2lkdGgnLCAnMTAwJScpLCBcIjt9dWx7bGlzdC1zdHlsZTpkaXNjO31vbHtsaXN0LXN0eWxlOmRlY2ltYWw7fWJsb2NrcXVvdGU6bm90KC5ldWlNYXJrZG93bkZvcm1hdF9fYmxvY2txdW90ZSl7cG9zaXRpb246cmVsYXRpdmU7XCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLWhvcml6b250YWwnLCAnYXV0bycpLCBcIiBmb250LWZhbWlseTpcIiwgZXVpVGhlbWUuZm9udC5mYW1pbHlTZXJpZiwgXCI7Zm9udC1zdHlsZTppdGFsaWM7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3A6bGFzdC1jaGlsZHtcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsICcwJyksIFwiO30mOmJlZm9yZSwmOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6Jyc7XCIsIGxvZ2ljYWxDU1MoJ2hlaWdodCcsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGljayksIFwiIFwiLCBsb2dpY2FsQ1NTKCd3aWR0aCcsICc1MCUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ2xlZnQnLCAnMjUlJyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdyaWdodCcsICcyNSUnKSwgXCIgYmFja2dyb3VuZDpcIiwgZXVpVGhlbWUuY29sb3JzLmRhcmtTaGFkZSwgXCI7fSY6YmVmb3Jle1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCAnMCcpLCBcIjt9JjphZnRlcntcIiwgbG9naWNhbENTUygnYm90dG9tJywgJzAnKSwgXCI7fX1oMXtcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjt9aDJ7XCIsIGV1aVRpdGxlKGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7fWgze1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICdzJyksIFwiO31oNCxkdHtcIiwgZXVpVGl0bGUoZXVpVGhlbWVDb250ZXh0LCAneHMnKSwgXCI7fWg1e1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHMnKSwgXCI7fWg2e1wiLCBldWlUaXRsZShldWlUaGVtZUNvbnRleHQsICd4eHhzJyksIFwiIHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt9aDEsaDIsaDMsaDQsaDUsaDYsZHR7Y29sb3I6aW5oZXJpdDt9cHJlOm5vdCguZXVpQ29kZUJsb2NrX19wcmUpe3doaXRlLXNwYWNlOnByZS13cmFwO2JhY2tncm91bmQ6XCIsIGV1aUJhY2tncm91bmRDb2xvcihldWlUaGVtZUNvbnRleHQsICdzdWJkdWVkJyksIFwiO2NvbG9yOlwiLCBldWlUaGVtZS5jb2xvcnMudGV4dCwgXCI7fXByZTpub3QoLmV1aUNvZGVCbG9ja19fcHJlKSxwcmU6bm90KC5ldWlDb2RlQmxvY2tfX3ByZSkgY29kZXtkaXNwbGF5OmJsb2NrO30+Omxhc3QtY2hpbGR7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ib3R0b20nLCAnMCAhaW1wb3J0YW50JyksIFwiO31rYmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7XCIsIGxvZ2ljYWxDU1MoJ3BhZGRpbmctdmVydGljYWwnLCBldWlUaGVtZS5zaXplLnh4cyksIFwiIFwiLCBsb2dpY2FsQ1NTKCdwYWRkaW5nLWhvcml6b250YWwnLCBldWlUaGVtZS5zaXplLnhzKSwgXCIgbGluZS1oZWlnaHQ6MTtib3JkZXI6XCIsIGV1aVRoZW1lLmJvcmRlci53aWR0aC50aGluLCBcIiBzb2xpZCBcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiO2JvcmRlci1yYWRpdXM6Y2FsYyhcIiwgZXVpVGhlbWUuYm9yZGVyLnJhZGl1cy5zbWFsbCwgXCIgLyAyKTt9O2xhYmVsOmV1aVRleHQ7XCIpLFxuICAgIGNvbnN0cmFpbmVkV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnbWF4LXdpZHRoJywgZXVpVGV4dENvbnN0cmFpbmVkTWF4V2lkdGgpLCBcIjs7bGFiZWw6Y29uc3RyYWluZWRXaWR0aDtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNjYWxlVGV4dChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgIG1lYXN1cmVtZW50OiAncmVtJyxcbiAgICAgIGN1c3RvbVNjYWxlOiAnbSdcbiAgICB9KSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgbWVhc3VyZW1lbnQ6ICdyZW0nLFxuICAgICAgY3VzdG9tU2NhbGU6ICdzJ1xuICAgIH0pLCBcIjs7bGFiZWw6cztcIiksXG4gICAgeHM6IC8qI19fUFVSRV9fKi9jc3MoZXVpU2NhbGVUZXh0KGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgbWVhc3VyZW1lbnQ6ICdyZW0nLFxuICAgICAgY3VzdG9tU2NhbGU6ICd4cydcbiAgICB9KSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICByZWxhdGl2ZTogLyojX19QVVJFX18qL2NzcyhldWlTY2FsZVRleHQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICBtZWFzdXJlbWVudDogJ2VtJ1xuICAgIH0pLCBcIjs7bGFiZWw6cmVsYXRpdmU7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImNsb25lRWxlbWVudFwiLCBcInN0eWxlXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudCc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aVRleHRDb2xvclN0eWxlcyB9IGZyb20gJy4vdGV4dF9jb2xvci5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgQ09MT1JTID0gWydkZWZhdWx0JywgJ3N1YmR1ZWQnLCAnc3VjY2VzcycsICdhY2NlbnQnLCAnZGFuZ2VyJywgJ3dhcm5pbmcnLCAnZ2hvc3QnLCAnaW5oZXJpdCddO1xuZXhwb3J0IHZhciBFdWlUZXh0Q29sb3IgPSBmdW5jdGlvbiBFdWlUZXh0Q29sb3IoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJGNvbXBvbmVudCA9IF9yZWYuY29tcG9uZW50LFxuICAgICAgY29tcG9uZW50ID0gX3JlZiRjb21wb25lbnQgPT09IHZvaWQgMCA/ICdzcGFuJyA6IF9yZWYkY29tcG9uZW50LFxuICAgICAgX3JlZiRjbG9uZUVsZW1lbnQgPSBfcmVmLmNsb25lRWxlbWVudCxcbiAgICAgIGNsb25lRWxlbWVudCA9IF9yZWYkY2xvbmVFbGVtZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2xvbmVFbGVtZW50LFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc05hbWVkQ29sb3IgPSBDT0xPUlMuaW5jbHVkZXMoY29sb3IpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpVGV4dENvbG9yU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dENvbG9yLCBpc05hbWVkQ29sb3IgPyBzdHlsZXNbY29sb3JdIDogc3R5bGVzLmN1c3RvbUNvbG9yXTsgLy8gV2UncmUgY2hlY2tpbmcgaWYgaXMgYSBjdXN0b20gY29sb3IuXG4gIC8vIElmIGl0IGlzIGEgY3VzdG9tIGNvbG9yIHdlIHNldCB0aGUgYGNvbG9yYCBvZiB0aGUgYC5ldWlUZXh0Q29sb3JgIGRpdiB0byB0aGF0IGN1c3RvbSBjb2xvci5cbiAgLy8gVGhpcyB3YXkgdGhlIGNoaWxkcmVuIHRleHQgZWxlbWVudHMgY2FuIGBpbmhlcml0YCB0aGF0IGNvbG9yIGFuZCBib3JkZXIgYW5kIGJhY2tncm91bmRzIGNhbiBnZXQgdGhhdCBgY3VycmVudENvbG9yYC5cblxuICB2YXIgZXVpVGV4dFN0eWxlID0gIWlzTmFtZWRDb2xvciA/IF9vYmplY3RTcHJlYWQoe1xuICAgIGNvbG9yOiBjb2xvclxuICB9LCBzdHlsZSkgOiBfb2JqZWN0U3ByZWFkKHt9LCBzdHlsZSk7XG5cbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgc3R5bGU6IGV1aVRleHRTdHlsZVxuICB9LCByZXN0KTtcblxuICBpZiAoIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiYgY2xvbmVFbGVtZW50KSB7XG4gICAgdmFyIGNoaWxkcmVuU3R5bGUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNoaWxkcmVuLnByb3BzLnN0eWxlKSwgZXVpVGV4dFN0eWxlKTtcblxuICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIHN0eWxlOiBjaGlsZHJlblN0eWxlXG4gICAgfSkpO1xuICB9IGVsc2Uge1xuICAgIHZhciBDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpVGV4dENvbG9yLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnMgb3IgYSBgaGV4YCwgYHJnYmAgb3IgYHJnYmFgIHZhbHVlLlxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogRGV0ZXJtaW5lcyB0aGUgcm9vdCBlbGVtZW50XG4gICAgICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCIsIFwic3BhblwiXSksXG5cbiAgLyoqXG4gICAgICAgKiBBcHBsaWVzIHRleHQgc3R5bGluZyB0byB0aGUgY2hpbGQgZWxlbWVudCBpbnN0ZWFkIG9mIHJlbmRlcmluZyBhIHBhcmVudCB3cmFwcGVyIGBzcGFuYC9gZGl2YC5cbiAgICAgICAqIENhbiBvbmx5IGJlIHVzZWQgd2hlbiB3cmFwcGluZyBhICpzaW5nbGUqIGNoaWxkIGVsZW1lbnQvdGFnLCBhbmQgbm90IHJhdyB0ZXh0LlxuICAgICAgICovXG4gIGNsb25lRWxlbWVudDogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwidWFjamM1LWluaGVyaXRcIixcbiAgc3R5bGVzOiBcImNvbG9yOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIlxufSA6IHtcbiAgbmFtZTogXCJ1YWNqYzUtaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiY29sb3I6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpVGV4dENvbG9yU3R5bGVzID0gZnVuY3Rpb24gZXVpVGV4dENvbG9yU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVRleHRDb2xvcjogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpldWlUZXh0Q29sb3I7XCIpLFxuICAgIGRlZmF1bHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnRleHQsIFwiOztsYWJlbDpkZWZhdWx0O1wiKSxcbiAgICBzdWJkdWVkOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5zdWJkdWVkVGV4dCwgXCI7O2xhYmVsOnN1YmR1ZWQ7XCIpLFxuICAgIHN1Y2Nlc3M6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLnN1Y2Nlc3NUZXh0LCBcIjs7bGFiZWw6c3VjY2VzcztcIiksXG4gICAgYWNjZW50OiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5hY2NlbnRUZXh0LCBcIjs7bGFiZWw6YWNjZW50O1wiKSxcbiAgICBkYW5nZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmRhbmdlclRleHQsIFwiOztsYWJlbDpkYW5nZXI7XCIpLFxuICAgIHdhcm5pbmc6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLndhcm5pbmdUZXh0LCBcIjs7bGFiZWw6d2FybmluZztcIiksXG4gICAgZ2hvc3Q6IC8qI19fUFVSRV9fKi9jc3MoXCJjb2xvcjpcIiwgZXVpVGhlbWUuY29sb3JzLmdob3N0LCBcIiFpbXBvcnRhbnQ7O2xhYmVsOmdob3N0O1wiKSxcbiAgICBpbmhlcml0OiBfcmVmLFxuICAgIGN1c3RvbUNvbG9yOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmN1c3RvbUNvbG9yO1wiKSAvLyBIYW5kbGVkIGJ5IGBzdHlsZWAgdGFnIC0gdGhpcyBpcyBqdXN0IGhlcmUgZm9yIGEgY2xhc3NOYW1lIGhvb2tcblxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwidGV4dEFsaWduXCIsIFwiY2xvbmVFbGVtZW50XCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudCc7XG5pbXBvcnQgeyBldWlUZXh0QWxpZ25TdHlsZXMgfSBmcm9tICcuL3RleHRfYWxpZ24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEFMSUdOTUVOVFMgPSBbJ2xlZnQnLCAncmlnaHQnLCAnY2VudGVyJ107XG5leHBvcnQgdmFyIEV1aVRleHRBbGlnbiA9IGZ1bmN0aW9uIEV1aVRleHRBbGlnbihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJHRleHRBbGlnbiA9IF9yZWYudGV4dEFsaWduLFxuICAgICAgdGV4dEFsaWduID0gX3JlZiR0ZXh0QWxpZ24gPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkdGV4dEFsaWduLFxuICAgICAgX3JlZiRjbG9uZUVsZW1lbnQgPSBfcmVmLmNsb25lRWxlbWVudCxcbiAgICAgIGNsb25lRWxlbWVudCA9IF9yZWYkY2xvbmVFbGVtZW50ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY2xvbmVFbGVtZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBzdHlsZXMgPSBldWlUZXh0QWxpZ25TdHlsZXMoKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGV4dEFsaWduLCBzdHlsZXNbdGV4dEFsaWduXV07XG5cbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgcmVzdCk7XG5cbiAgaWYgKCAvKiNfX1BVUkVfXyovaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNsb25lRWxlbWVudCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBwcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgcHJvcHMsIGNoaWxkcmVuKTtcbiAgfVxufTtcbkV1aVRleHRBbGlnbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQXBwbGllcyB0ZXh0IHN0eWxpbmcgdG8gdGhlIGNoaWxkIGVsZW1lbnQgaW5zdGVhZCBvZiByZW5kZXJpbmcgYSBwYXJlbnQgd3JhcHBlciBgZGl2YC5cbiAgICAgICAqIENhbiBvbmx5IGJlIHVzZWQgd2hlbiB3cmFwcGluZyBhICpzaW5nbGUqIGNoaWxkIGVsZW1lbnQvdGFnLCBhbmQgbm90IHJhdyB0ZXh0LlxuICAgICAgICovXG4gIGNsb25lRWxlbWVudDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlUZXh0QWxpZ25TdHlsZXMgPSBmdW5jdGlvbiBldWlUZXh0QWxpZ25TdHlsZXMoKSB7XG4gIHJldHVybiB7XG4gICAgZXVpVGV4dEFsaWduOiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmV1aVRleHRBbGlnbjtcIiksXG4gICAgbGVmdDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdsZWZ0JyksIFwiOztsYWJlbDpsZWZ0O1wiKSxcbiAgICByaWdodDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdyaWdodCcpLCBcIjs7bGFiZWw6cmlnaHQ7XCIpLFxuICAgIGNlbnRlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCI7O2xhYmVsOmNlbnRlcjtcIilcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpZGVcIiwgXCJpY29uU2l6ZVwiLCBcImNvbG9yXCIsIFwic2l6ZVwiLCBcImZsdXNoXCIsIFwiaXNEaXNhYmxlZFwiLCBcImRpc2FibGVkXCIsIFwiaXNMb2FkaW5nXCIsIFwiaHJlZlwiLCBcInRhcmdldFwiLCBcInJlbFwiLCBcInR5cGVcIiwgXCJidXR0b25SZWZcIiwgXCJjb250ZW50UHJvcHNcIiwgXCJ0ZXh0UHJvcHNcIiwgXCJpc1NlbGVjdGVkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpQnV0dG9uQ29udGVudERlcHJlY2F0ZWQgYXMgRXVpQnV0dG9uQ29udGVudCB9IGZyb20gJy4uL19idXR0b25fY29udGVudF9kZXByZWNhdGVkJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgY29sb3JUb0NsYXNzTmFtZU1hcCA9IHtcbiAgcHJpbWFyeTogJ2V1aUJ1dHRvbkVtcHR5LS1wcmltYXJ5JyxcbiAgZGFuZ2VyOiAnZXVpQnV0dG9uRW1wdHktLWRhbmdlcicsXG4gIHRleHQ6ICdldWlCdXR0b25FbXB0eS0tdGV4dCcsXG4gIGdob3N0OiAnZXVpQnV0dG9uRW1wdHktLWdob3N0JyxcbiAgc3VjY2VzczogJ2V1aUJ1dHRvbkVtcHR5LS1zdWNjZXNzJyxcbiAgd2FybmluZzogJ2V1aUJ1dHRvbkVtcHR5LS13YXJuaW5nJ1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc05hbWVNYXApO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgeHM6ICdldWlCdXR0b25FbXB0eS0teFNtYWxsJyxcbiAgczogJ2V1aUJ1dHRvbkVtcHR5LS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG52YXIgZmx1c2hUeXBlVG9DbGFzc05hbWVNYXAgPSB7XG4gIGxlZnQ6ICdldWlCdXR0b25FbXB0eS0tZmx1c2hMZWZ0JyxcbiAgcmlnaHQ6ICdldWlCdXR0b25FbXB0eS0tZmx1c2hSaWdodCcsXG4gIGJvdGg6ICdldWlCdXR0b25FbXB0eS0tZmx1c2hCb3RoJ1xufTtcbmV4cG9ydCB2YXIgRkxVU0hfVFlQRVMgPSBrZXlzT2YoZmx1c2hUeXBlVG9DbGFzc05hbWVNYXApO1xuLyoqXG4gKiBFeHRlbmRzIEV1aUJ1dHRvbkNvbnRlbnRQcm9wcyB3aGljaCBwcm92aWRlc1xuICogYGljb25UeXBlYCwgYGljb25TaWRlYCwgYW5kIGB0ZXh0UHJvcHNgXG4gKi9cblxuZXhwb3J0IHZhciBFdWlCdXR0b25FbXB0eSA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkVtcHR5KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgaWNvblR5cGUgPSBfcmVmLmljb25UeXBlLFxuICAgICAgX3JlZiRpY29uU2lkZSA9IF9yZWYuaWNvblNpZGUsXG4gICAgICBpY29uU2lkZSA9IF9yZWYkaWNvblNpZGUgPT09IHZvaWQgMCA/ICdsZWZ0JyA6IF9yZWYkaWNvblNpZGUsXG4gICAgICBfcmVmJGljb25TaXplID0gX3JlZi5pY29uU2l6ZSxcbiAgICAgIGljb25TaXplID0gX3JlZiRpY29uU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRpY29uU2l6ZSxcbiAgICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgICAgZmx1c2ggPSBfcmVmLmZsdXNoLFxuICAgICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBfZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIF9yZWYkdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIHR5cGUgPSBfcmVmJHR5cGUgPT09IHZvaWQgMCA/ICdidXR0b24nIDogX3JlZiR0eXBlLFxuICAgICAgYnV0dG9uUmVmID0gX3JlZi5idXR0b25SZWYsXG4gICAgICBjb250ZW50UHJvcHMgPSBfcmVmLmNvbnRlbnRQcm9wcyxcbiAgICAgIHRleHRQcm9wcyA9IF9yZWYudGV4dFByb3BzLFxuICAgICAgaXNTZWxlY3RlZCA9IF9yZWYuaXNTZWxlY3RlZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkOyAvLyBJZiBpbiB0aGUgbG9hZGluZyBzdGF0ZSwgZm9yY2UgZGlzYWJsZWQgdG8gdHJ1ZVxuXG4gIHZhciBidXR0b25Jc0Rpc2FibGVkID0gaXNMb2FkaW5nIHx8IGlzRGlzYWJsZWQgfHwgZGlzYWJsZWQ7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uRW1wdHknLCBjb2xvclRvQ2xhc3NOYW1lTWFwW2NvbG9yXSwgc2l6ZSA/IHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSA6IG51bGwsIGZsdXNoID8gZmx1c2hUeXBlVG9DbGFzc05hbWVNYXBbZmx1c2hdIDogbnVsbCwge1xuICAgICdldWlCdXR0b25FbXB0eS1pc0Rpc2FibGVkJzogYnV0dG9uSXNEaXNhYmxlZFxuICB9LCBjbGFzc05hbWUpO1xuICB2YXIgY29udGVudENsYXNzTmFtZXMgPSBjbGFzc05hbWVzKCdldWlCdXR0b25FbXB0eV9fY29udGVudCcsIGNvbnRlbnRQcm9wcyAmJiBjb250ZW50UHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIHRleHRDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQnV0dG9uRW1wdHlfX3RleHQnLCB0ZXh0UHJvcHMgJiYgdGV4dFByb3BzLmNsYXNzTmFtZSk7XG5cbiAgdmFyIGlubmVyTm9kZSA9IF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uQ29udGVudCwgX2V4dGVuZHMoe1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIGljb25UeXBlOiBpY29uVHlwZSxcbiAgICBpY29uU2lkZTogaWNvblNpZGUsXG4gICAgaWNvblNpemU6IHNpemUgPT09ICd4cycgPyAncycgOiBpY29uU2l6ZSxcbiAgICB0ZXh0UHJvcHM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGV4dFByb3BzKSwge30sIHtcbiAgICAgIGNsYXNzTmFtZTogdGV4dENsYXNzTmFtZXNcbiAgICB9KVxuICB9LCBjb250ZW50UHJvcHMsIHtcbiAgICAvLyBjbGFzc05hbWUgaGFzIHRvIGNvbWUgbGFzdCB0byBvdmVycmlkZSBjb250ZW50UHJvcHMuY2xhc3NOYW1lXG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NOYW1lc1xuICB9KSwgY2hpbGRyZW4pOyAvLyA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuXG5cbiAgaWYgKGhyZWYgJiYgIWJ1dHRvbklzRGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgaW5uZXJOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICBkaXNhYmxlZDogYnV0dG9uSXNEaXNhYmxlZCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgdHlwZTogdHlwZSxcbiAgICByZWY6IGJ1dHRvblJlZixcbiAgICBcImFyaWEtcHJlc3NlZFwiOiBpc1NlbGVjdGVkXG4gIH0sIHJlc3QpLCBpbm5lck5vZGUpO1xufTtcbkV1aUJ1dHRvbkVtcHR5LnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJ4c1wiLCBcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICBmbHVzaDogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIl0pLFxuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIiwgXCJzdWJtaXRcIl0pLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQgKG9ubHkgaWYgdGhlIGNoaWxkcmVuIGlzIGEgYHN0cmluZ2ApXG4gICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpY29uVHlwZVwiLCBcImljb25TaXplXCIsIFwiY29sb3JcIiwgXCJpc0Rpc2FibGVkXCIsIFwiZGlzYWJsZWRcIiwgXCJocmVmXCIsIFwidHlwZVwiLCBcImRpc3BsYXlcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJzaXplXCIsIFwiYnV0dG9uUmVmXCIsIFwiaXNTZWxlY3RlZFwiLCBcImlzTG9hZGluZ1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlMb2FkaW5nU3Bpbm5lciB9IGZyb20gJy4uLy4uL2xvYWRpbmcnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBkaXNwbGF5VG9DbGFzc05hbWVNYXAgPSB7XG4gIGJhc2U6IG51bGwsXG4gIGVtcHR5OiAnZXVpQnV0dG9uSWNvbi0tZW1wdHknLFxuICBmaWxsOiAnZXVpQnV0dG9uSWNvbi0tZmlsbCdcbn07XG5leHBvcnQgdmFyIERJU1BMQVlTID0ga2V5c09mKGRpc3BsYXlUb0NsYXNzTmFtZU1hcCk7XG52YXIgY29sb3JUb0NsYXNzTmFtZU1hcCA9IHtcbiAgYWNjZW50OiAnZXVpQnV0dG9uSWNvbi0tYWNjZW50JyxcbiAgZGFuZ2VyOiAnZXVpQnV0dG9uSWNvbi0tZGFuZ2VyJyxcbiAgZ2hvc3Q6ICdldWlCdXR0b25JY29uLS1naG9zdCcsXG4gIHByaW1hcnk6ICdldWlCdXR0b25JY29uLS1wcmltYXJ5JyxcbiAgc3VjY2VzczogJ2V1aUJ1dHRvbkljb24tLXN1Y2Nlc3MnLFxuICB0ZXh0OiAnZXVpQnV0dG9uSWNvbi0tdGV4dCcsXG4gIHdhcm5pbmc6ICdldWlCdXR0b25JY29uLS13YXJuaW5nJ1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc05hbWVNYXApO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgeHM6ICdldWlCdXR0b25JY29uLS14U21hbGwnLFxuICBzOiAnZXVpQnV0dG9uSWNvbi0tc21hbGwnLFxuICBtOiAnZXVpQnV0dG9uSWNvbi0tbWVkaXVtJ1xufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQnV0dG9uSWNvbiA9IGZ1bmN0aW9uIEV1aUJ1dHRvbkljb24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBpY29uVHlwZSA9IF9yZWYuaWNvblR5cGUsXG4gICAgICBfcmVmJGljb25TaXplID0gX3JlZi5pY29uU2l6ZSxcbiAgICAgIGljb25TaXplID0gX3JlZiRpY29uU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRpY29uU2l6ZSxcbiAgICAgIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAncHJpbWFyeScgOiBfcmVmJGNvbG9yLFxuICAgICAgX2lzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBkaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgICBfcmVmJGRpc3BsYXkgPSBfcmVmLmRpc3BsYXksXG4gICAgICBkaXNwbGF5ID0gX3JlZiRkaXNwbGF5ID09PSB2b2lkIDAgPyAnZW1wdHknIDogX3JlZiRkaXNwbGF5LFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICd4cycgOiBfcmVmJHNpemUsXG4gICAgICBidXR0b25SZWYgPSBfcmVmLmJ1dHRvblJlZixcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBpc0xvYWRpbmcgPSBfcmVmLmlzTG9hZGluZyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgZGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkIHx8IGlzTG9hZGluZztcbiAgdmFyIGFyaWFIaWRkZW4gPSByZXN0WydhcmlhLWhpZGRlbiddO1xuICB2YXIgaXNBcmlhSGlkZGVuID0gYXJpYUhpZGRlbiA9PT0gJ3RydWUnIHx8IGFyaWFIaWRkZW4gPT09IHRydWU7XG5cbiAgaWYgKCFyZXN0WydhcmlhLWxhYmVsJ10gJiYgIXJlc3RbJ2FyaWEtbGFiZWxsZWRieSddICYmICFpc0FyaWFIaWRkZW4pIHtcbiAgICBjb25zb2xlLndhcm4oXCJFdWlCdXR0b25JY29uIHJlcXVpcmVzIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IHRvIGJlIHNwZWNpZmllZCBiZWNhdXNlIGljb24tb25seVxcbiAgICAgIGJ1dHRvbnMgYXJlIHNjcmVlbi1yZWFkZXItaW5hY2Nlc3NpYmxlIHdpdGhvdXQgdGhlbS5cIik7XG4gIH1cblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJ1dHRvbkljb24nLCB7XG4gICAgJ2V1aUJ1dHRvbkljb24taXNEaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgfSwgY29sb3JUb0NsYXNzTmFtZU1hcFtjb2xvcl0sIGRpc3BsYXkgJiYgZGlzcGxheVRvQ2xhc3NOYW1lTWFwW2Rpc3BsYXldLCBzaXplICYmIHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSwgY2xhc3NOYW1lKTsgLy8gQWRkIGFuIGljb24gdG8gdGhlIGJ1dHRvbiBpZiBvbmUgZXhpc3RzLlxuXG4gIHZhciBidXR0b25JY29uO1xuXG4gIGlmIChpY29uVHlwZSAmJiAhaXNMb2FkaW5nKSB7XG4gICAgYnV0dG9uSWNvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUJ1dHRvbkljb25fX2ljb25cIixcbiAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgc2l6ZTogaWNvblNpemUsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiLFxuICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICAgIH0pO1xuICB9IC8vIGBvcmlnaW5hbGAgc2l6ZSBkb2Vzbid0IGV4aXN0IGluIGBFdWlMb2FkaW5nU3Bpbm5lcmBcbiAgLy8gd2hlbiB0aGUgYGljb25TaXplYCBpcyBgb3JpZ2luYWxgIHdlIGRvbid0IHBhc3MgYW55IHNpemUgdG8gdGhlIGBFdWlMb2FkaW5nU3Bpbm5lcmBcbiAgLy8gc28gaXQgZ2V0cyB0aGUgZGVmYXVsdCBzaXplXG5cblxuICB2YXIgbG9hZGluZ1NpemUgPSBpY29uU2l6ZSA9PT0gJ29yaWdpbmFsJyA/IHVuZGVmaW5lZCA6IGljb25TaXplO1xuXG4gIGlmIChpY29uVHlwZSAmJiBpc0xvYWRpbmcpIHtcbiAgICBidXR0b25JY29uID0gX19fRW1vdGlvbkpTWChFdWlMb2FkaW5nU3Bpbm5lciwge1xuICAgICAgc2l6ZTogbG9hZGluZ1NpemVcbiAgICB9KTtcbiAgfSAvLyA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gdGhpcyBpcyBhIGJ1dHRvbiBhbmQgcGlnZ3liYWNrIG9mZiBpdHMgZGlzYWJsZWQgc3R5bGVzLlxuXG5cbiAgaWYgKGhyZWYgJiYgIWlzRGlzYWJsZWQpIHtcbiAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogcmVsXG4gICAgfSk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICAgIHRhYkluZGV4OiBpc0FyaWFIaWRkZW4gPyAtMSA6IHVuZGVmaW5lZCxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgIHJlbDogc2VjdXJlUmVsLFxuICAgICAgcmVmOiBidXR0b25SZWZcbiAgICB9LCByZXN0KSwgYnV0dG9uSWNvbik7XG4gIH1cblxuICB2YXIgYnV0dG9uVHlwZTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIHRhYkluZGV4OiBpc0FyaWFIaWRkZW4gPyAtMSA6IHVuZGVmaW5lZCxcbiAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgXCJhcmlhLXByZXNzZWRcIjogaXNTZWxlY3RlZCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIHJlZjogYnV0dG9uUmVmXG4gIH0sIHJlc3QpLCBidXR0b25JY29uKTtcbn07XG5FdWlCdXR0b25JY29uLnByb3BUeXBlcyA9IHtcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9uZU9mKFtcInN1Ym1pdFwiLCBcInJlc2V0XCIsIFwiYnV0dG9uXCJdKV0pLFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIHRoZSBuYW1lZCBjb2xvciBwYWxldHRlIG9wdGlvbnMuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKSxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIE92ZXJhbGwgc2l6ZSBvZiBidXR0b24uXG4gICAgICogTWF0Y2hlcyB0aGUgc2l6ZXMgb2Ygb3RoZXIgRXVpQnV0dG9uc1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIE92ZXJhbGwgc2l6ZSBvZiBidXR0b24uXG4gICAgICogTWF0Y2hlcyB0aGUgc2l6ZXMgb2Ygb3RoZXIgRXVpQnV0dG9uc1xuICAgICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogU2l6ZSBvZiB0aGUgaWNvbiBvbmx5LlxuICAgICAqIFRoaXMgd2lsbCBub3QgYWZmZWN0IHRoZSBvdmVyYWxsIHNpemUgb2YgdGhlIGJ1dHRvblxuICAgICAqL1xuICBpY29uU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXNwbGF5IHN0eWxlIGZvciBtYXRjaGluZyBvdGhlciBFdWlCdXR0b24gdHlwZXMuXG4gICAgICogYGJhc2VgIGlzIGVxdWl2YWxlbnQgdG8gYSB0eXBpY2FsIEV1aUJ1dHRvblxuICAgICAqIGBmaWxsYCBpcyBlcXVpdmFsZW50IHRvIGEgZmlsbGVkIEV1aUJ1dHRvblxuICAgICAqIGBlbXB0eWAgKGRlZmF1bHQpIGlzIGVxdWl2YWxlbnQgdG8gYW4gRXVpQnV0dG9uRW1wdHlcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBkaXNwbGF5IHN0eWxlIGZvciBtYXRjaGluZyBvdGhlciBFdWlCdXR0b24gdHlwZXMuXG4gICAgICogYGJhc2VgIGlzIGVxdWl2YWxlbnQgdG8gYSB0eXBpY2FsIEV1aUJ1dHRvblxuICAgICAqIGBmaWxsYCBpcyBlcXVpdmFsZW50IHRvIGEgZmlsbGVkIEV1aUJ1dHRvblxuICAgICAqIGBlbXB0eWAgKGRlZmF1bHQpIGlzIGVxdWl2YWxlbnQgdG8gYW4gRXVpQnV0dG9uRW1wdHlcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLm9uZU9mKFtcImJhc2VcIiwgXCJlbXB0eVwiLCBcImZpbGxcIl0pLFxuXG4gIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5leHBvcnQgZnVuY3Rpb24gdXNlSW5uZXJUZXh0KGlubmVyVGV4dEZhbGxiYWNrKSB7XG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShudWxsKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgcmVmID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldFJlZiA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShpbm5lclRleHRGYWxsYmFjayksXG4gICAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgICBpbm5lclRleHQgPSBfdXNlU3RhdGU0WzBdLFxuICAgICAgc2V0SW5uZXJUZXh0ID0gX3VzZVN0YXRlNFsxXTtcblxuICB2YXIgdXBkYXRlSW5uZXJUZXh0ID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUpIHJldHVybjtcbiAgICBzZXRJbm5lclRleHQoIC8vIENoZWNrIGZvciBgaW5uZXJUZXh0YCBpbXBsZW1lbnRhdGlvbiByYXRoZXIgdGhhbiBhIHNpbXBsZSBPUiBjaGVja1xuICAgIC8vIGJlY2F1c2UgaW4gcmVhbCBjYXNlcyB0aGUgcmVzdWx0IG9mIGBpbm5lclRleHRgIGNvdWxkIGNvcnJlY3RseSBiZSBgbnVsbGBcbiAgICAvLyB3aGlsZSB0aGUgcmVzdWx0IG9mIGB0ZXh0Q29udGVudGAgY291bGQgY29ycmVjdGx5IGJlIG5vbi1gbnVsbGAgZHVlIHRvXG4gICAgLy8gZGlmZmVyaW5nIHJlbGlhbmNlIG9uIGJyb3dzZXIgbGF5b3V0IGNhbGN1bGF0aW9ucy5cbiAgICAvLyBXZSBwcmVmZXIgdGhlIHJlc3VsdCBvZiBgaW5uZXJUZXh0YCwgaWYgYXZhaWxhYmxlLlxuICAgICdpbm5lclRleHQnIGluIG5vZGUgPyBub2RlLmlubmVyVGV4dCA6IG5vZGUudGV4dENvbnRlbnQgfHwgaW5uZXJUZXh0RmFsbGJhY2spO1xuICB9LCBbaW5uZXJUZXh0RmFsbGJhY2tdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zTGlzdCkge1xuICAgICAgaWYgKG11dGF0aW9uc0xpc3QubGVuZ3RoKSB1cGRhdGVJbm5lclRleHQocmVmKTtcbiAgICB9KTtcblxuICAgIGlmIChyZWYpIHtcbiAgICAgIHVwZGF0ZUlubmVyVGV4dChyZWYpO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShyZWYsIHtcbiAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH07XG4gIH0sIFtyZWYsIHVwZGF0ZUlubmVyVGV4dF0pO1xuICByZXR1cm4gW3NldFJlZiwgaW5uZXJUZXh0XTtcbn1cbmV4cG9ydCB2YXIgRXVpSW5uZXJUZXh0ID0gZnVuY3Rpb24gRXVpSW5uZXJUZXh0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGZhbGxiYWNrID0gX3JlZi5mYWxsYmFjaztcblxuICB2YXIgX3VzZUlubmVyVGV4dCA9IHVzZUlubmVyVGV4dChmYWxsYmFjayksXG4gICAgICBfdXNlSW5uZXJUZXh0MiA9IF9zbGljZWRUb0FycmF5KF91c2VJbm5lclRleHQsIDIpLFxuICAgICAgcmVmID0gX3VzZUlubmVyVGV4dDJbMF0sXG4gICAgICBpbm5lclRleHQgPSBfdXNlSW5uZXJUZXh0MlsxXTtcblxuICByZXR1cm4gY2hpbGRyZW4ocmVmLCBpbm5lclRleHQpO1xufTtcbkV1aUlubmVyVGV4dC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBmYWxsYmFjazogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIERldGVjdCBFbGVtZW50IFJlc2l6ZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zZGVjaW1hL2phdmFzY3JpcHQtZGV0ZWN0LWVsZW1lbnQtcmVzaXplXG4gKiBTZWJhc3RpYW4gRGVjaW1hXG4gKlxuICogRm9ya2VkIGZyb20gdmVyc2lvbiAwLjUuMzsgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zOlxuICogMSkgR3VhcmQgYWdhaW5zdCB1bnNhZmUgJ3dpbmRvdycgYW5kICdkb2N1bWVudCcgcmVmZXJlbmNlcyAodG8gc3VwcG9ydCBTU1IpLlxuICogMikgRGVmZXIgaW5pdGlhbGl6YXRpb24gY29kZSB2aWEgYSB0b3AtbGV2ZWwgZnVuY3Rpb24gd3JhcHBlciAodG8gc3VwcG9ydCBTU1IpLlxuICogMykgQXZvaWQgdW5uZWNlc3NhcnkgcmVmbG93cyBieSBub3QgbWVhc3VyaW5nIHNpemUgZm9yIHNjcm9sbCBldmVudHMgYnViYmxpbmcgZnJvbSBjaGlsZHJlbi5cbiAqIDQpIEFkZCBub25jZSBmb3Igc3R5bGUgZWxlbWVudC5cbiAqIDUpIFVzZSAnZXhwb3J0JyBzdGF0ZW1lbnQgb3ZlciAnbW9kdWxlLmV4cG9ydHMnIGFzc2lnbm1lbnRcbiAqKi9cblxuLy8gQ2hlY2sgYGRvY3VtZW50YCBhbmQgYHdpbmRvd2AgaW4gY2FzZSBvZiBzZXJ2ZXItc2lkZSByZW5kZXJpbmdcbmxldCB3aW5kb3dPYmplY3Q7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB3aW5kb3dPYmplY3QgPSB3aW5kb3c7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gIHdpbmRvd09iamVjdCA9IHNlbGY7XG59IGVsc2Uge1xuICB3aW5kb3dPYmplY3QgPSBnbG9iYWw7XG59XG5sZXQgY2FuY2VsRnJhbWUgPSBudWxsO1xubGV0IHJlcXVlc3RGcmFtZSA9IG51bGw7XG5jb25zdCBUSU1FT1VUX0RVUkFUSU9OID0gMjA7XG5jb25zdCBjbGVhclRpbWVvdXRGbiA9IHdpbmRvd09iamVjdC5jbGVhclRpbWVvdXQ7XG5jb25zdCBzZXRUaW1lb3V0Rm4gPSB3aW5kb3dPYmplY3Quc2V0VGltZW91dDtcbmNvbnN0IGNhbmNlbEFuaW1hdGlvbkZyYW1lRm4gPSB3aW5kb3dPYmplY3QuY2FuY2VsQW5pbWF0aW9uRnJhbWUgfHwgd2luZG93T2JqZWN0Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZTtcbmNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuID0gd2luZG93T2JqZWN0LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3dPYmplY3QubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvd09iamVjdC53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5pZiAoY2FuY2VsQW5pbWF0aW9uRnJhbWVGbiA9PSBudWxsIHx8IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuID09IG51bGwpIHtcbiAgLy8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvbid0IHN1cHBvcnQgYW5pbWF0aW9uIGZyYW1lLFxuICAvLyBmYWxsYmFjayB0byBhIHNldFRpbWVvdXQgYmFzZWQgYXBwcm9hY2guXG4gIGNhbmNlbEZyYW1lID0gY2xlYXJUaW1lb3V0Rm47XG4gIHJlcXVlc3RGcmFtZSA9IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZVZpYVNldFRpbWVvdXQoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gc2V0VGltZW91dEZuKGNhbGxiYWNrLCBUSU1FT1VUX0RVUkFUSU9OKTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIENvdW50ZXIgaW50dWl0aXZlbHksIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgYW5pbWF0aW9uIGZyYW1lcyBjYW4gYmUgdHJpY2tpZXIuXG4gIC8vIENocm9tZSdzIFwiVGhyb3R0bGUgbm9uLXZpc2libGUgY3Jvc3Mtb3JpZ2luIGlmcmFtZXNcIiBmbGFnIGNhbiBwcmV2ZW50IHJBRnMgZnJvbSBiZWluZyBjYWxsZWQuXG4gIC8vIEluIHRoaXMgY2FzZSwgd2Ugc2hvdWxkIGZhbGxiYWNrIHRvIGEgc2V0VGltZW91dCgpIGltcGxlbWVudGF0aW9uLlxuICBjYW5jZWxGcmFtZSA9IGZ1bmN0aW9uIGNhbmNlbEZyYW1lKFthbmltYXRpb25GcmFtZUlELCB0aW1lb3V0SURdKSB7XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbihhbmltYXRpb25GcmFtZUlEKTtcbiAgICBjbGVhclRpbWVvdXRGbih0aW1lb3V0SUQpO1xuICB9O1xuICByZXF1ZXN0RnJhbWUgPSBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVXaXRoU2V0VGltZW91dEZhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgYW5pbWF0aW9uRnJhbWVJRCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZUZuKGZ1bmN0aW9uIGFuaW1hdGlvbkZyYW1lQ2FsbGJhY2soKSB7XG4gICAgICBjbGVhclRpbWVvdXRGbih0aW1lb3V0SUQpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0Rm4oZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWVGbihhbmltYXRpb25GcmFtZUlEKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSwgVElNRU9VVF9EVVJBVElPTik7XG4gICAgcmV0dXJuIFthbmltYXRpb25GcmFtZUlELCB0aW1lb3V0SURdO1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlRGV0ZWN0RWxlbWVudFJlc2l6ZShub25jZSkge1xuICBsZXQgYW5pbWF0aW9uS2V5ZnJhbWVzO1xuICBsZXQgYW5pbWF0aW9uTmFtZTtcbiAgbGV0IGFuaW1hdGlvblN0YXJ0RXZlbnQ7XG4gIGxldCBhbmltYXRpb25TdHlsZTtcbiAgbGV0IGNoZWNrVHJpZ2dlcnM7XG4gIGxldCByZXNldFRyaWdnZXJzO1xuICBsZXQgc2Nyb2xsTGlzdGVuZXI7XG4gIGNvbnN0IGF0dGFjaEV2ZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmF0dGFjaEV2ZW50O1xuICBpZiAoIWF0dGFjaEV2ZW50KSB7XG4gICAgcmVzZXRUcmlnZ2VycyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBjb25zdCB0cmlnZ2VycyA9IGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLFxuICAgICAgICBleHBhbmQgPSB0cmlnZ2Vycy5maXJzdEVsZW1lbnRDaGlsZCxcbiAgICAgICAgY29udHJhY3QgPSB0cmlnZ2Vycy5sYXN0RWxlbWVudENoaWxkLFxuICAgICAgICBleHBhbmRDaGlsZCA9IGV4cGFuZC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgIGNvbnRyYWN0LnNjcm9sbExlZnQgPSBjb250cmFjdC5zY3JvbGxXaWR0aDtcbiAgICAgIGNvbnRyYWN0LnNjcm9sbFRvcCA9IGNvbnRyYWN0LnNjcm9sbEhlaWdodDtcbiAgICAgIGV4cGFuZENoaWxkLnN0eWxlLndpZHRoID0gZXhwYW5kLm9mZnNldFdpZHRoICsgMSArIFwicHhcIjtcbiAgICAgIGV4cGFuZENoaWxkLnN0eWxlLmhlaWdodCA9IGV4cGFuZC5vZmZzZXRIZWlnaHQgKyAxICsgXCJweFwiO1xuICAgICAgZXhwYW5kLnNjcm9sbExlZnQgPSBleHBhbmQuc2Nyb2xsV2lkdGg7XG4gICAgICBleHBhbmQuc2Nyb2xsVG9wID0gZXhwYW5kLnNjcm9sbEhlaWdodDtcbiAgICB9O1xuICAgIGNoZWNrVHJpZ2dlcnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0V2lkdGggIT09IGVsZW1lbnQuX19yZXNpemVMYXN0X18ud2lkdGggfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQgIT09IGVsZW1lbnQuX19yZXNpemVMYXN0X18uaGVpZ2h0O1xuICAgIH07XG4gICAgc2Nyb2xsTGlzdGVuZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgLy8gRG9uJ3QgbWVhc3VyZSAod2hpY2ggZm9yY2VzKSByZWZsb3cgZm9yIHNjcm9sbHMgdGhhdCBoYXBwZW4gaW5zaWRlIG9mIGNoaWxkcmVuIVxuICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSAmJiB0eXBlb2YgZS50YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YgPT09IFwiZnVuY3Rpb25cIiAmJiBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZihcImNvbnRyYWN0LXRyaWdnZXJcIikgPCAwICYmIGUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKFwiZXhwYW5kLXRyaWdnZXJcIikgPCAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzO1xuICAgICAgcmVzZXRUcmlnZ2Vycyh0aGlzKTtcbiAgICAgIGlmICh0aGlzLl9fcmVzaXplUkFGX18pIHtcbiAgICAgICAgY2FuY2VsRnJhbWUodGhpcy5fX3Jlc2l6ZVJBRl9fKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX19yZXNpemVSQUZfXyA9IHJlcXVlc3RGcmFtZShmdW5jdGlvbiBhbmltYXRpb25GcmFtZSgpIHtcbiAgICAgICAgaWYgKGNoZWNrVHJpZ2dlcnMoZWxlbWVudCkpIHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLndpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLmhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hSZXNpemVMaXN0ZW5lcihmbikge1xuICAgICAgICAgICAgZm4uY2FsbChlbGVtZW50LCBlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qIERldGVjdCBDU1MgQW5pbWF0aW9ucyBzdXBwb3J0IHRvIGRldGVjdCBlbGVtZW50IGRpc3BsYXkvcmUtYXR0YWNoICovXG4gICAgbGV0IGFuaW1hdGlvbiA9IGZhbHNlO1xuICAgIGxldCBrZXlmcmFtZXByZWZpeCA9IFwiXCI7XG4gICAgYW5pbWF0aW9uU3RhcnRFdmVudCA9IFwiYW5pbWF0aW9uc3RhcnRcIjtcbiAgICBjb25zdCBkb21QcmVmaXhlcyA9IFwiV2Via2l0IE1veiBPIG1zXCIuc3BsaXQoXCIgXCIpO1xuICAgIGxldCBzdGFydEV2ZW50cyA9IFwid2Via2l0QW5pbWF0aW9uU3RhcnQgYW5pbWF0aW9uc3RhcnQgb0FuaW1hdGlvblN0YXJ0IE1TQW5pbWF0aW9uU3RhcnRcIi5zcGxpdChcIiBcIik7XG4gICAgbGV0IHBmeCA9IFwiXCI7XG4gICAge1xuICAgICAgY29uc3QgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZha2VlbGVtZW50XCIpO1xuICAgICAgaWYgKGVsbS5zdHlsZS5hbmltYXRpb25OYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhbmltYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9tUHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZWxtLnN0eWxlW2RvbVByZWZpeGVzW2ldICsgXCJBbmltYXRpb25OYW1lXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBmeCA9IGRvbVByZWZpeGVzW2ldO1xuICAgICAgICAgICAga2V5ZnJhbWVwcmVmaXggPSBcIi1cIiArIHBmeC50b0xvd2VyQ2FzZSgpICsgXCItXCI7XG4gICAgICAgICAgICBhbmltYXRpb25TdGFydEV2ZW50ID0gc3RhcnRFdmVudHNbaV07XG4gICAgICAgICAgICBhbmltYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFuaW1hdGlvbk5hbWUgPSBcInJlc2l6ZWFuaW1cIjtcbiAgICBhbmltYXRpb25LZXlmcmFtZXMgPSBcIkBcIiArIGtleWZyYW1lcHJlZml4ICsgXCJrZXlmcmFtZXMgXCIgKyBhbmltYXRpb25OYW1lICsgXCIgeyBmcm9tIHsgb3BhY2l0eTogMDsgfSB0byB7IG9wYWNpdHk6IDA7IH0gfSBcIjtcbiAgICBhbmltYXRpb25TdHlsZSA9IGtleWZyYW1lcHJlZml4ICsgXCJhbmltYXRpb246IDFtcyBcIiArIGFuaW1hdGlvbk5hbWUgKyBcIjsgXCI7XG4gIH1cbiAgY29uc3QgY3JlYXRlU3R5bGVzID0gZnVuY3Rpb24gKGRvYykge1xuICAgIGlmICghZG9jLmdldEVsZW1lbnRCeUlkKFwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiKSkge1xuICAgICAgLy9vcGFjaXR5OjAgd29ya3MgYXJvdW5kIGEgY2hyb21lIGJ1ZyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mjg2MzYwXG4gICAgICBjb25zdCBjc3MgPSAoYW5pbWF0aW9uS2V5ZnJhbWVzID8gYW5pbWF0aW9uS2V5ZnJhbWVzIDogXCJcIikgKyBcIi5yZXNpemUtdHJpZ2dlcnMgeyBcIiArIChhbmltYXRpb25TdHlsZSA/IGFuaW1hdGlvblN0eWxlIDogXCJcIikgKyBcInZpc2liaWxpdHk6IGhpZGRlbjsgb3BhY2l0eTogMDsgfSBcIiArICcucmVzaXplLXRyaWdnZXJzLCAucmVzaXplLXRyaWdnZXJzID4gZGl2LCAuY29udHJhY3QtdHJpZ2dlcjpiZWZvcmUgeyBjb250ZW50OiBcIiBcIjsgZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuOyB6LWluZGV4OiAtMTsgfSAucmVzaXplLXRyaWdnZXJzID4gZGl2IHsgYmFja2dyb3VuZDogI2VlZTsgb3ZlcmZsb3c6IGF1dG87IH0gLmNvbnRyYWN0LXRyaWdnZXI6YmVmb3JlIHsgd2lkdGg6IDIwMCU7IGhlaWdodDogMjAwJTsgfScsXG4gICAgICAgIGhlYWQgPSBkb2MuaGVhZCB8fCBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLFxuICAgICAgICBzdHlsZSA9IGRvYy5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICBzdHlsZS5pZCA9IFwiZGV0ZWN0RWxlbWVudFJlc2l6ZVwiO1xuICAgICAgc3R5bGUudHlwZSA9IFwidGV4dC9jc3NcIjtcbiAgICAgIGlmIChub25jZSAhPSBudWxsKSB7XG4gICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICAgIH1cbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgYWRkUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgZm4pIHtcbiAgICBpZiAoYXR0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoXCJvbnJlc2l6ZVwiLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18pIHtcbiAgICAgICAgY29uc3QgZG9jID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICBjb25zdCBlbGVtZW50U3R5bGUgPSB3aW5kb3dPYmplY3QuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSAmJiBlbGVtZW50U3R5bGUucG9zaXRpb24gPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZVN0eWxlcyhkb2MpO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplTGFzdF9fID0ge307XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXyA9IFtdO1xuICAgICAgICAoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18gPSBkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuY2xhc3NOYW1lID0gXCJyZXNpemUtdHJpZ2dlcnNcIjtcbiAgICAgICAgY29uc3QgZXhwYW5kVHJpZ2dlciA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBleHBhbmRUcmlnZ2VyLmNsYXNzTmFtZSA9IFwiZXhwYW5kLXRyaWdnZXJcIjtcbiAgICAgICAgZXhwYW5kVHJpZ2dlci5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0VHJpZ2dlciA9IGRvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBjb250cmFjdFRyaWdnZXIuY2xhc3NOYW1lID0gXCJjb250cmFjdC10cmlnZ2VyXCI7XG4gICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFwcGVuZENoaWxkKGV4cGFuZFRyaWdnZXIpO1xuICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5hcHBlbmRDaGlsZChjb250cmFjdFRyaWdnZXIpO1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKTtcbiAgICAgICAgcmVzZXRUcmlnZ2VycyhlbGVtZW50KTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHNjcm9sbExpc3RlbmVyLCB0cnVlKTtcblxuICAgICAgICAvKiBMaXN0ZW4gZm9yIGEgY3NzIGFuaW1hdGlvbiB0byBkZXRlY3QgZWxlbWVudCBkaXNwbGF5L3JlLWF0dGFjaCAqL1xuICAgICAgICBpZiAoYW5pbWF0aW9uU3RhcnRFdmVudCkge1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyA9IGZ1bmN0aW9uIGFuaW1hdGlvbkxpc3RlbmVyKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmFuaW1hdGlvbk5hbWUgPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgcmVzZXRUcmlnZ2VycyhlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLmFkZEV2ZW50TGlzdGVuZXIoYW5pbWF0aW9uU3RhcnRFdmVudCwgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLnB1c2goZm4pO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcmVtb3ZlUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgZm4pIHtcbiAgICBpZiAoYXR0YWNoRXZlbnQpIHtcbiAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoXCJvbnJlc2l6ZVwiLCBmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5zcGxpY2UoZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmluZGV4T2YoZm4pLCAxKTtcbiAgICAgIGlmICghZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmxlbmd0aCkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2Nyb2xsTGlzdGVuZXIsIHRydWUpO1xuICAgICAgICBpZiAoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18uX19hbmltYXRpb25MaXN0ZW5lcl9fKSB7XG4gICAgICAgICAgZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJzX18ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhbmltYXRpb25TdGFydEV2ZW50LCBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXy5fX2FuaW1hdGlvbkxpc3RlbmVyX18pO1xuICAgICAgICAgIGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fLl9fYW5pbWF0aW9uTGlzdGVuZXJfXyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcnNfXyA9ICFlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuX19yZXNpemVUcmlnZ2Vyc19fKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIFByZWFjdCBjb21wYXQ7IHNlZSBkZXZlbG9waXQvcHJlYWN0LWNvbXBhdC9pc3N1ZXMvMjI4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiB7XG4gICAgYWRkUmVzaXplTGlzdGVuZXIsXG4gICAgcmVtb3ZlUmVzaXplTGlzdGVuZXJcbiAgfTtcbn1cblxuY2xhc3MgQXV0b1NpemVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBoZWlnaHQ6IHRoaXMucHJvcHMuZGVmYXVsdEhlaWdodCB8fCAwLFxuICAgICAgc2NhbGVkSGVpZ2h0OiB0aGlzLnByb3BzLmRlZmF1bHRIZWlnaHQgfHwgMCxcbiAgICAgIHNjYWxlZFdpZHRoOiB0aGlzLnByb3BzLmRlZmF1bHRXaWR0aCB8fCAwLFxuICAgICAgd2lkdGg6IHRoaXMucHJvcHMuZGVmYXVsdFdpZHRoIHx8IDBcbiAgICB9O1xuICAgIHRoaXMuX2F1dG9TaXplciA9IG51bGw7XG4gICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSA9IG51bGw7XG4gICAgdGhpcy5fcGFyZW50Tm9kZSA9IG51bGw7XG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICAgIHRoaXMuX3RpbWVvdXRJZCA9IG51bGw7XG4gICAgdGhpcy5fb25SZXNpemUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl90aW1lb3V0SWQgPSBudWxsO1xuICAgICAgY29uc3Qge1xuICAgICAgICBkaXNhYmxlSGVpZ2h0LFxuICAgICAgICBkaXNhYmxlV2lkdGgsXG4gICAgICAgIG9uUmVzaXplXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7XG4gICAgICAgIC8vIEd1YXJkIGFnYWluc3QgQXV0b1NpemVyIGNvbXBvbmVudCBiZWluZyByZW1vdmVkIGZyb20gdGhlIERPTSBpbW1lZGlhdGVseSBhZnRlciBiZWluZyBhZGRlZC5cbiAgICAgICAgLy8gVGhpcyBjYW4gcmVzdWx0IGluIGludmFsaWQgc3R5bGUgdmFsdWVzIHdoaWNoIGNhbiByZXN1bHQgaW4gTmFOIHZhbHVlcyBpZiB3ZSBkb24ndCBoYW5kbGUgdGhlbS5cbiAgICAgICAgLy8gU2VlIGlzc3VlICMxNTAgZm9yIG1vcmUgY29udGV4dC5cblxuICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX3BhcmVudE5vZGUpIHx8IHt9O1xuICAgICAgICBjb25zdCBwYWRkaW5nTGVmdCA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0xlZnQgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdSaWdodCB8fCBcIjBcIik7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdUb3AgfHwgXCIwXCIpO1xuICAgICAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nQm90dG9tIHx8IFwiMFwiKTtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuX3BhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHNjYWxlZEhlaWdodCA9IHJlY3QuaGVpZ2h0IC0gcGFkZGluZ1RvcCAtIHBhZGRpbmdCb3R0b207XG4gICAgICAgIGNvbnN0IHNjYWxlZFdpZHRoID0gcmVjdC53aWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0O1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9wYXJlbnROb2RlLm9mZnNldEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuX3BhcmVudE5vZGUub2Zmc2V0V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDtcbiAgICAgICAgaWYgKCFkaXNhYmxlSGVpZ2h0ICYmICh0aGlzLnN0YXRlLmhlaWdodCAhPT0gaGVpZ2h0IHx8IHRoaXMuc3RhdGUuc2NhbGVkSGVpZ2h0ICE9PSBzY2FsZWRIZWlnaHQpIHx8ICFkaXNhYmxlV2lkdGggJiYgKHRoaXMuc3RhdGUud2lkdGggIT09IHdpZHRoIHx8IHRoaXMuc3RhdGUuc2NhbGVkV2lkdGggIT09IHNjYWxlZFdpZHRoKSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBzY2FsZWRIZWlnaHQsXG4gICAgICAgICAgICBzY2FsZWRXaWR0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZXNpemUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgb25SZXNpemUoe1xuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHNjYWxlZEhlaWdodCxcbiAgICAgICAgICAgICAgc2NhbGVkV2lkdGgsXG4gICAgICAgICAgICAgIHdpZHRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX3NldFJlZiA9IGF1dG9TaXplciA9PiB7XG4gICAgICB0aGlzLl9hdXRvU2l6ZXIgPSBhdXRvU2l6ZXI7XG4gICAgfTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBub25jZVxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9hdXRvU2l6ZXIgPyB0aGlzLl9hdXRvU2l6ZXIucGFyZW50Tm9kZSA6IG51bGw7XG4gICAgaWYgKHBhcmVudE5vZGUgIT0gbnVsbCAmJiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQgJiYgcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIHBhcmVudE5vZGUgaW5zdGFuY2VvZiBwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuSFRNTEVsZW1lbnQpIHtcbiAgICAgIC8vIERlbGF5IGFjY2VzcyBvZiBwYXJlbnROb2RlIHVudGlsIG1vdW50LlxuICAgICAgLy8gVGhpcyBoYW5kbGVzIGVkZ2UtY2FzZXMgd2hlcmUgdGhlIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubW91bnRlZCBiZWZvcmUgaXRzIHJlZiBoYXMgYmVlbiBzZXQsXG4gICAgICAvLyBBcyB3ZWxsIGFzIGxpYnJhcmllcyBsaWtlIHJlYWN0LWxpdGUgd2hpY2ggaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBsaWZlY3ljbGUuXG4gICAgICB0aGlzLl9wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcblxuICAgICAgLy8gVXNlIFJlc2l6ZU9ic2VydmVyIGZyb20gdGhlIHNhbWUgY29udGV4dCB3aGVyZSBwYXJlbnROb2RlICh3aGljaCB3ZSB3aWxsIG9ic2VydmUpIHdhcyBkZWZpbmVkXG4gICAgICAvLyBVc2luZyBqdXN0IGdsb2JhbCBjYW4gcmVzdWx0IGludG8gb25SZXNpemUgZXZlbnRzIG5vdCBiZWluZyBlbWl0dGVkIGluIGNhc2VzIHdpdGggbXVsdGlwbGUgcmVhbG1zXG4gICAgICBjb25zdCBSZXNpemVPYnNlcnZlckluc3RhbmNlID0gcGFyZW50Tm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LlJlc2l6ZU9ic2VydmVyO1xuICAgICAgaWYgKFJlc2l6ZU9ic2VydmVySW5zdGFuY2UgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlckluc3RhbmNlKCgpID0+IHtcbiAgICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IFwiUmVzaXplT2JzZXJ2ZXIgbG9vcCBsaW1pdCBleGNlZWRlZFwiIGVycm9yO1xuICAgICAgICAgIC8vIGNvdWxkIGJlIHRyaWdnZXJlZCBpZiB0aGUgc3RhdGUgdXBkYXRlIGNhdXNlcyB0aGUgUmVzaXplT2JzZXJ2ZXIgaGFuZGxlciB0byBydW4gbG9uZy5cbiAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3QtdmlydHVhbGl6ZWQtYXV0by1zaXplci9pc3N1ZXMvNTVcbiAgICAgICAgICB0aGlzLl90aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHRoaXMuX29uUmVzaXplLCAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUocGFyZW50Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEZWZlciByZXF1aXJpbmcgcmVzaXplIGhhbmRsZXIgaW4gb3JkZXIgdG8gc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgICAgIC8vIFNlZSBpc3N1ZSAjNDFcbiAgICAgICAgdGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSA9IGNyZWF0ZURldGVjdEVsZW1lbnRSZXNpemUobm9uY2UpO1xuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLmFkZFJlc2l6ZUxpc3RlbmVyKHBhcmVudE5vZGUsIHRoaXMuX29uUmVzaXplKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX29uUmVzaXplKCk7XG4gICAgfVxuICB9XG4gIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGlmICh0aGlzLl9wYXJlbnROb2RlKSB7XG4gICAgICBpZiAodGhpcy5fZGV0ZWN0RWxlbWVudFJlc2l6ZSkge1xuICAgICAgICB0aGlzLl9kZXRlY3RFbGVtZW50UmVzaXplLnJlbW92ZVJlc2l6ZUxpc3RlbmVyKHRoaXMuX3BhcmVudE5vZGUsIHRoaXMuX29uUmVzaXplKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl90aW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fcmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBkZWZhdWx0SGVpZ2h0LFxuICAgICAgZGVmYXVsdFdpZHRoLFxuICAgICAgZGlzYWJsZUhlaWdodCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVdpZHRoID0gZmFsc2UsXG4gICAgICBkb05vdEJhaWxPdXRPbkVtcHR5Q2hpbGRyZW4gPSBmYWxzZSxcbiAgICAgIG5vbmNlLFxuICAgICAgb25SZXNpemUsXG4gICAgICBzdHlsZSA9IHt9LFxuICAgICAgdGFnTmFtZSA9IFwiZGl2XCIsXG4gICAgICAuLi5yZXN0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgaGVpZ2h0LFxuICAgICAgc2NhbGVkSGVpZ2h0LFxuICAgICAgc2NhbGVkV2lkdGgsXG4gICAgICB3aWR0aFxuICAgIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gT3V0ZXIgZGl2IHNob3VsZCBub3QgZm9yY2Ugd2lkdGgvaGVpZ2h0IHNpbmNlIHRoYXQgbWF5IHByZXZlbnQgY29udGFpbmVycyBmcm9tIHNocmlua2luZy5cbiAgICAvLyBJbm5lciBjb21wb25lbnQgc2hvdWxkIG92ZXJmbG93IGFuZCB1c2UgY2FsY3VsYXRlZCB3aWR0aC9oZWlnaHQuXG4gICAgLy8gU2VlIGlzc3VlICM2OCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICBjb25zdCBvdXRlclN0eWxlID0ge1xuICAgICAgb3ZlcmZsb3c6IFwidmlzaWJsZVwiXG4gICAgfTtcbiAgICBjb25zdCBjaGlsZFBhcmFtcyA9IHt9O1xuXG4gICAgLy8gQXZvaWQgcmVuZGVyaW5nIGNoaWxkcmVuIGJlZm9yZSB0aGUgaW5pdGlhbCBtZWFzdXJlbWVudHMgaGF2ZSBiZWVuIGNvbGxlY3RlZC5cbiAgICAvLyBBdCBiZXN0IHRoaXMgd291bGQganVzdCBiZSB3YXN0aW5nIGN5Y2xlcy5cbiAgICBsZXQgYmFpbG91dE9uQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICBpZiAoIWRpc2FibGVIZWlnaHQpIHtcbiAgICAgIGlmIChoZWlnaHQgPT09IDApIHtcbiAgICAgICAgYmFpbG91dE9uQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgb3V0ZXJTdHlsZS5oZWlnaHQgPSAwO1xuICAgICAgY2hpbGRQYXJhbXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgY2hpbGRQYXJhbXMuc2NhbGVkSGVpZ2h0ID0gc2NhbGVkSGVpZ2h0O1xuICAgIH1cbiAgICBpZiAoIWRpc2FibGVXaWR0aCkge1xuICAgICAgaWYgKHdpZHRoID09PSAwKSB7XG4gICAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG91dGVyU3R5bGUud2lkdGggPSAwO1xuICAgICAgY2hpbGRQYXJhbXMud2lkdGggPSB3aWR0aDtcbiAgICAgIGNoaWxkUGFyYW1zLnNjYWxlZFdpZHRoID0gc2NhbGVkV2lkdGg7XG4gICAgfVxuICAgIGlmIChkb05vdEJhaWxPdXRPbkVtcHR5Q2hpbGRyZW4pIHtcbiAgICAgIGJhaWxvdXRPbkNoaWxkcmVuID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIHtcbiAgICAgIHJlZjogdGhpcy5fc2V0UmVmLFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgLi4ub3V0ZXJTdHlsZSxcbiAgICAgICAgLi4uc3R5bGVcbiAgICAgIH0sXG4gICAgICAuLi5yZXN0XG4gICAgfSwgIWJhaWxvdXRPbkNoaWxkcmVuICYmIGNoaWxkcmVuKGNoaWxkUGFyYW1zKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWlnaHRBbmRXaWR0aFByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ICE9PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCAhPT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzSGVpZ2h0T25seVByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcyAmJiBwcm9wcy5kaXNhYmxlSGVpZ2h0ICE9PSB0cnVlICYmIHByb3BzLmRpc2FibGVXaWR0aCA9PT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzV2lkdGhPbmx5UHJvcHMocHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzICYmIHByb3BzLmRpc2FibGVIZWlnaHQgPT09IHRydWUgJiYgcHJvcHMuZGlzYWJsZVdpZHRoICE9PSB0cnVlO1xufVxuXG5leHBvcnQgeyBBdXRvU2l6ZXIgYXMgZGVmYXVsdCwgaXNIZWlnaHRBbmRXaWR0aFByb3BzLCBpc0hlaWdodE9ubHlQcm9wcywgaXNXaWR0aE9ubHlQcm9wcyB9O1xuIiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IEF1dG9TaXplciBmcm9tICdyZWFjdC12aXJ0dWFsaXplZC1hdXRvLXNpemVyJztcbmV4cG9ydCB2YXIgRXVpQXV0b1NpemVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQXV0b1NpemVyKSB7XG4gIF9pbmhlcml0cyhFdWlBdXRvU2l6ZXIsIF9BdXRvU2l6ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQXV0b1NpemVyKTtcblxuICBmdW5jdGlvbiBFdWlBdXRvU2l6ZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUF1dG9TaXplcik7XG5cbiAgICByZXR1cm4gX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICByZXR1cm4gRXVpQXV0b1NpemVyO1xufShBdXRvU2l6ZXIpOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjb2xvclwiLCBcImljb25UeXBlXCIsIFwiaWNvblNpZGVcIiwgXCJjbGFzc05hbWVcIiwgXCJpc0Rpc2FibGVkXCIsIFwib25DbGlja1wiLCBcImljb25PbkNsaWNrXCIsIFwib25DbGlja0FyaWFMYWJlbFwiLCBcImljb25PbkNsaWNrQXJpYUxhYmVsXCIsIFwiY2xvc2VCdXR0b25Qcm9wc1wiLCBcImhyZWZcIiwgXCJyZWxcIiwgXCJ0YXJnZXRcIiwgXCJzdHlsZVwiXTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0LCBnZXRTZWN1cmVSZWxGb3JUYXJnZXQsIGlzQ29sb3JEYXJrIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBjaHJvbWFWYWxpZCwgcGFyc2VDb2xvciB9IGZyb20gJy4uL2NvbG9yX3BpY2tlci91dGlscyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUhyZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWN1cml0eS9ocmVmX3ZhbGlkYXRvcic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuLy8gVE9ETyAtIHJlcGxhY2Ugd2l0aCB2YXJpYWJsZXMgb25jZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzI3MzEgaXMgY2xvc2VkXG52YXIgY29sb3JJbmsgPSAnIzAwMCc7XG52YXIgY29sb3JHaG9zdCA9ICcjZmZmJzsgLy8gVGhlIGNvbG9yIGJsaW5kIHBhbGV0dGUgaGFzIHNvbWUgc3RyaWN0ZXIgYWNjZXNzaWJpbGl0eSBuZWVkcyB3aXRoIHJlZ2FyZHMgdG9cbi8vIGNoYXJ0cyBhbmQgY29udHJhc3QuIFdlIHVzZSB0aGUgZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0IHZhcmlhbnQgaGVyZSBzaW5jZSBvdXJcbi8vIGFjY2Vzc2liaWxpdHkgY29uY2VybnMgcGVydGFpbiB0byBmb3JlZ3JvdW5kICh0ZXh0KSBhbmQgYmFja2dyb3VuZCBjb250cmFzdFxuXG52YXIgdmlzQ29sb3JzID0gZXVpUGFsZXR0ZUNvbG9yQmxpbmRCZWhpbmRUZXh0KCk7XG52YXIgY29sb3JUb0hleE1hcCA9IHtcbiAgLy8gVE9ETyAtIHJlcGxhY2Ugd2l0aCB2YXJpYWJsZSBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMjczMSBpcyBjbG9zZWRcbiAgZGVmYXVsdDogJyNkM2RhZTYnLFxuICBwcmltYXJ5OiB2aXNDb2xvcnNbMV0sXG4gIHN1Y2Nlc3M6IHZpc0NvbG9yc1swXSxcbiAgYWNjZW50OiB2aXNDb2xvcnNbMl0sXG4gIHdhcm5pbmc6IHZpc0NvbG9yc1s1XSxcbiAgZGFuZ2VyOiB2aXNDb2xvcnNbOV1cbn07XG5leHBvcnQgdmFyIENPTE9SUyA9IGtleXNPZihjb2xvclRvSGV4TWFwKTtcbnZhciBpY29uU2lkZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBsZWZ0OiAnZXVpQmFkZ2UtLWljb25MZWZ0JyxcbiAgcmlnaHQ6ICdldWlCYWRnZS0taWNvblJpZ2h0J1xufTtcbmV4cG9ydCB2YXIgSUNPTl9TSURFUyA9IGtleXNPZihpY29uU2lkZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQmFkZ2UgPSBmdW5jdGlvbiBFdWlCYWRnZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2RlZmF1bHQnIDogX3JlZiRjb2xvcixcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIF9yZWYkaWNvblNpZGUgPSBfcmVmLmljb25TaWRlLFxuICAgICAgaWNvblNpZGUgPSBfcmVmJGljb25TaWRlID09PSB2b2lkIDAgPyAnbGVmdCcgOiBfcmVmJGljb25TaWRlLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICBpY29uT25DbGljayA9IF9yZWYuaWNvbk9uQ2xpY2ssXG4gICAgICBvbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgaWNvbk9uQ2xpY2tBcmlhTGFiZWwgPSBfcmVmLmljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgY2xvc2VCdXR0b25Qcm9wcyA9IF9yZWYuY2xvc2VCdXR0b25Qcm9wcyxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgdmFyIGlzRGlzYWJsZWQgPSBfaXNEaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBvcHRpb25hbEN1c3RvbVN0eWxlcyA9IHN0eWxlO1xuICB2YXIgdGV4dENvbG9yID0gbnVsbDsgLy8gVE9ETyAtIHJlcGxhY2Ugd2l0aCB2YXJpYWJsZSBvbmNlIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMjczMSBpcyBjbG9zZWRcblxuICB2YXIgd2NhZ0NvbnRyYXN0QmFzZSA9IDQuNTsgLy8gV0NBRyBBQSBjb250cmFzdCBsZXZlbFxuXG4gIHZhciB3Y2FnQ29udHJhc3QgPSBudWxsO1xuICB2YXIgY29sb3JIZXggPSBudWxsOyAvLyBDaGVjayBpZiBhIHZhbGlkIGNvbG9yIG5hbWUgd2FzIHByb3ZpZGVkXG5cbiAgdHJ5IHtcbiAgICBpZiAoQ09MT1JTLmluZGV4T2YoY29sb3IpID4gLTEpIHtcbiAgICAgIC8vIEdldCB0aGUgaGV4IGVxdWl2YWxlbnQgZm9yIHRoZSBwcm92aWRlZCBjb2xvciBuYW1lXG4gICAgICBjb2xvckhleCA9IGNvbG9yVG9IZXhNYXBbY29sb3JdOyAvLyBTZXQgZGFyayBvciBsaWdodCB0ZXh0IGNvbG9yIGJhc2VkIHVwb24gYmVzdCBjb250cmFzdFxuXG4gICAgICB0ZXh0Q29sb3IgPSBzZXRUZXh0Q29sb3IoY29sb3JIZXgpO1xuICAgICAgb3B0aW9uYWxDdXN0b21TdHlsZXMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvckhleCxcbiAgICAgICAgY29sb3I6IHRleHRDb2xvclxuICAgICAgfSwgb3B0aW9uYWxDdXN0b21TdHlsZXMpO1xuICAgIH0gZWxzZSBpZiAoY29sb3IgIT09ICdob2xsb3cnKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgY3VzdG9tIGNvbG9yIHRoYXQgaXMgbmVpdGhlciBmcm9tIHRoZSBiYXNlIHBhbGV0dGUgbm9yIGhvbGxvd1xuICAgICAgLy8gTGV0J3MgZG8gb3VyIGJlc3QgdG8gZW5zdXJlIHRoYXQgaXQgcHJvdmlkZXMgc3VmZmljaWVudCBjb250cmFzdFxuICAgICAgLy8gU2V0IGRhcmsgb3IgbGlnaHQgdGV4dCBjb2xvciBiYXNlZCB1cG9uIGJlc3QgY29udHJhc3RcbiAgICAgIHRleHRDb2xvciA9IHNldFRleHRDb2xvcihjb2xvcik7IC8vIENoZWNrIHRoZSBjb250cmFzdFxuXG4gICAgICB3Y2FnQ29udHJhc3QgPSBnZXRDb2xvckNvbnRyYXN0KHRleHRDb2xvciwgY29sb3IpO1xuXG4gICAgICBpZiAod2NhZ0NvbnRyYXN0IDwgd2NhZ0NvbnRyYXN0QmFzZSkge1xuICAgICAgICAvLyBJdCdzIGxvdyBjb250cmFzdCwgc28gbGV0cyBzaG93IGEgd2FybmluZyBpbiB0aGUgY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6ICcsIGNvbG9yLCAnIGJhZGdlIGhhcyBsb3cgY29udHJhc3Qgb2YgJywgd2NhZ0NvbnRyYXN0LnRvRml4ZWQoMiksICcuIFNob3VsZCBiZSBhYm92ZSAnLCB3Y2FnQ29udHJhc3RCYXNlLCAnLicpO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25hbEN1c3RvbVN0eWxlcyA9IF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLFxuICAgICAgICBjb2xvcjogdGV4dENvbG9yXG4gICAgICB9LCBvcHRpb25hbEN1c3RvbVN0eWxlcyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBoYW5kbGVJbnZhbGlkQ29sb3IoY29sb3IpO1xuICB9XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlCYWRnZScsIHtcbiAgICAnZXVpQmFkZ2UtaXNDbGlja2FibGUnOiAob25DbGljayB8fCBocmVmKSAmJiAhaWNvbk9uQ2xpY2ssXG4gICAgJ2V1aUJhZGdlLWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkLFxuICAgICdldWlCYWRnZS0taG9sbG93JzogY29sb3IgPT09ICdob2xsb3cnXG4gIH0sIGljb25TaWRlVG9DbGFzc05hbWVNYXBbaWNvblNpZGVdLCBjbGFzc05hbWUpO1xuICB2YXIgY2xvc2VDbGFzc05hbWVzID0gY2xhc3NOYW1lcygnZXVpQmFkZ2VfX2ljb24nLCBjbG9zZUJ1dHRvblByb3BzICYmIGNsb3NlQnV0dG9uUHJvcHMuY2xhc3NOYW1lKTtcbiAgdmFyIEVsZW1lbnQgPSBocmVmICYmICFpc0Rpc2FibGVkID8gJ2EnIDogJ2J1dHRvbic7XG4gIHZhciByZWxPYmogPSB7fTtcblxuICBpZiAoaHJlZiAmJiAhaXNEaXNhYmxlZCkge1xuICAgIHJlbE9iai5ocmVmID0gaHJlZjtcbiAgICByZWxPYmoudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHJlbE9iai5yZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChvbkNsaWNrKSB7XG4gICAgcmVsT2JqLm9uQ2xpY2sgPSBvbkNsaWNrO1xuICB9XG5cbiAgdmFyIG9wdGlvbmFsSWNvbiA9IG51bGw7XG5cbiAgaWYgKGljb25UeXBlKSB7XG4gICAgaWYgKGljb25PbkNsaWNrKSB7XG4gICAgICBpZiAoIWljb25PbkNsaWNrQXJpYUxhYmVsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignV2hlbiBwYXNzaW5nIHRoZSBpY29uT25DbGljayBwcm9wcyB0byBFdWlCYWRnZSwgeW91IG11c3QgYWxzbyBwcm92aWRlIGljb25PbkNsaWNrQXJpYUxhYmVsJyk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbmFsSWNvbiA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2ljb25CdXR0b25cIixcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgdGl0bGU6IGljb25PbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICBvbkNsaWNrOiBpY29uT25DbGlja1xuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgICBzaXplOiBcInNcIixcbiAgICAgICAgY29sb3I6IFwiaW5oZXJpdFwiIC8vIGZvcmNlcyB0aGUgaWNvbiB0byBpbmhlcml0IGl0cyBwYXJlbnQgY29sb3JcblxuICAgICAgfSwgY2xvc2VCdXR0b25Qcm9wcywge1xuICAgICAgICBjbGFzc05hbWU6IGNsb3NlQ2xhc3NOYW1lc1xuICAgICAgfSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uYWxJY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgIHR5cGU6IGljb25UeXBlLFxuICAgICAgICBzaXplOiBjaGlsZHJlbiA/ICdzJyA6ICdtJyxcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUJhZGdlX19pY29uXCIsXG4gICAgICAgIGNvbG9yOiBcImluaGVyaXRcIiAvLyBmb3JjZXMgdGhlIGljb24gdG8gaW5oZXJpdCBpdHMgcGFyZW50IGNvbG9yXG5cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvbkNsaWNrICYmICFvbkNsaWNrQXJpYUxhYmVsKSB7XG4gICAgY29uc29sZS53YXJuKCdXaGVuIHBhc3Npbmcgb25DbGljayB0byBFdWlCYWRnZSwgeW91IG11c3QgYWxzbyBwcm92aWRlIG9uQ2xpY2tBcmlhTGFiZWwnKTtcbiAgfVxuXG4gIHZhciBjb250ZW50ID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fY29udGVudFwiXG4gIH0sIGNoaWxkcmVuICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX3RleHRcIlxuICB9LCBjaGlsZHJlbiksIG9wdGlvbmFsSWNvbik7XG5cbiAgaWYgKGljb25PbkNsaWNrKSB7XG4gICAgcmV0dXJuIG9uQ2xpY2sgfHwgaHJlZiA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlc1xuICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlCYWRnZV9fY29udGVudFwiXG4gICAgfSwgX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQmFkZ2VfX2NoaWxkQnV0dG9uXCIsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogb25DbGlja0FyaWFMYWJlbCxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlbE9iaiwgcmVzdCksIGNoaWxkcmVuKTtcbiAgICB9KSwgb3B0aW9uYWxJY29uKSkgOiBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHN0eWxlOiBvcHRpb25hbEN1c3RvbVN0eWxlcyxcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIHRpdGxlOiBpbm5lclRleHRcbiAgICAgIH0sIHJlc3QpLCBjb250ZW50KTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChvbkNsaWNrIHx8IGhyZWYpIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJbm5lclRleHQsIG51bGwsIGZ1bmN0aW9uIChyZWYsIGlubmVyVGV4dCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IG9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgc3R5bGU6IG9wdGlvbmFsQ3VzdG9tU3R5bGVzLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVsT2JqLCByZXN0KSwgY29udGVudCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCBudWxsLCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgc3R5bGU6IG9wdGlvbmFsQ3VzdG9tU3R5bGVzLFxuICAgICAgICByZWY6IHJlZixcbiAgICAgICAgdGl0bGU6IGlubmVyVGV4dFxuICAgICAgfSwgcmVzdCksIGNvbnRlbnQpO1xuICAgIH0pO1xuICB9XG59O1xuRXVpQmFkZ2UucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBBY2NlcHRzIGFueSBzdHJpbmcgZnJvbSBvdXIgaWNvbiBsaWJyYXJ5XG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBUaGUgc2lkZSBvZiB0aGUgYmFkZ2UgdGhlIGljb24gc2hvdWxkIHNpdFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogV2lsbCBvdmVycmlkZSBhbnkgY29sb3IgcGFzc2VkIHRocm91Z2ggdGhlIGBjb2xvcmAgcHJvcC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUHJvcHMgcGFzc2VkIHRvIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICovXG4gIGNsb3NlQnV0dG9uUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gaWNvbiB3aXRoaW4gdGhlIGJhZGdlXG4gICAgICovXG4gIGljb25PbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIGljb25PbkNsaWNrIGJ1dHRvblxuICAgICAqL1xuICBpY29uT25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICovXG4gIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5mdW5jdGlvbiBnZXRDb2xvckNvbnRyYXN0KHRleHRDb2xvciwgY29sb3IpIHtcbiAgdmFyIGNvbnRyYXN0VmFsdWUgPSBjaHJvbWEuY29udHJhc3QodGV4dENvbG9yLCBjb2xvcik7XG4gIHJldHVybiBjb250cmFzdFZhbHVlO1xufVxuXG5mdW5jdGlvbiBzZXRUZXh0Q29sb3IoYmdDb2xvcikge1xuICB2YXIgdGV4dENvbG9yID0gaXNDb2xvckRhcmsuYXBwbHkodm9pZCAwLCBfdG9Db25zdW1hYmxlQXJyYXkoY2hyb21hKGJnQ29sb3IpLnJnYigpKSkgPyBjb2xvckdob3N0IDogY29sb3JJbms7XG4gIHJldHVybiB0ZXh0Q29sb3I7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUludmFsaWRDb2xvcihjb2xvcikge1xuICB2YXIgaXNOYW1lZENvbG9yID0gY29sb3IgJiYgQ09MT1JTLmluY2x1ZGVzKGNvbG9yKSB8fCBjb2xvciA9PT0gJ2hvbGxvdyc7XG4gIHZhciBpc1ZhbGlkQ29sb3JTdHJpbmcgPSBjb2xvciAmJiBjaHJvbWFWYWxpZChwYXJzZUNvbG9yKGNvbG9yKSB8fCAnJyk7XG5cbiAgaWYgKCFpc05hbWVkQ29sb3IgJiYgIWlzVmFsaWRDb2xvclN0cmluZykge1xuICAgIGNvbnNvbGUud2FybignRXVpQmFkZ2UgZXhwZWN0cyBhIHZhbGlkIGNvbG9yLiBUaGlzIGNhbiBlaXRoZXIgYmUgYSB0aHJlZSBvciBzaXggJyArIFwiY2hhcmFjdGVyIGhleCB2YWx1ZSwgcmdiKGEpIHZhbHVlLCBoc3YgdmFsdWUsIGhvbGxvdywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmc6IFwiLmNvbmNhdChDT0xPUlMsIFwiLiBcIikgKyBcIkluc3RlYWQgZ290IFwiLmNvbmNhdChjb2xvciwgXCIuXCIpKTtcbiAgfVxufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgY2hyb21hIGZyb20gJ2Nocm9tYS1qcyc7XG5leHBvcnQgdmFyIGdldEV2ZW50UG9zaXRpb24gPSBmdW5jdGlvbiBnZXRFdmVudFBvc2l0aW9uKGxvY2F0aW9uLCBjb250YWluZXIpIHtcbiAgdmFyIHggPSBsb2NhdGlvbi54LFxuICAgICAgeSA9IGxvY2F0aW9uLnk7XG5cbiAgdmFyIF9jb250YWluZXIkZ2V0Qm91bmRpbiA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgIHdpZHRoID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLndpZHRoLFxuICAgICAgaGVpZ2h0ID0gX2NvbnRhaW5lciRnZXRCb3VuZGluLmhlaWdodCxcbiAgICAgIGxlZnQgPSBfY29udGFpbmVyJGdldEJvdW5kaW4ubGVmdCxcbiAgICAgIHRvcCA9IF9jb250YWluZXIkZ2V0Qm91bmRpbi50b3A7XG5cbiAgdmFyIGxlZnRQb3MgPSB4IC0gKGxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQpO1xuICB2YXIgdG9wUG9zID0geSAtICh0b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQpO1xuXG4gIGlmIChsZWZ0UG9zIDwgMCkge1xuICAgIGxlZnRQb3MgPSAwO1xuICB9IGVsc2UgaWYgKGxlZnRQb3MgPiB3aWR0aCkge1xuICAgIGxlZnRQb3MgPSB3aWR0aDtcbiAgfVxuXG4gIGlmICh0b3BQb3MgPCAwKSB7XG4gICAgdG9wUG9zID0gMDtcbiAgfSBlbHNlIGlmICh0b3BQb3MgPiBoZWlnaHQpIHtcbiAgICB0b3BQb3MgPSBoZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxlZnQ6IGxlZnRQb3MsXG4gICAgdG9wOiB0b3BQb3MsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59O1xuZXhwb3J0IHZhciBIRVhfRkFMTEJBQ0sgPSAnJztcbmV4cG9ydCB2YXIgSFNWX0ZBTExCQUNLID0gWzAsIDAsIDBdO1xuZXhwb3J0IHZhciBSR0JfRkFMTEJBQ0sgPSBbTmFOLCBOYU4sIE5hTiwgMV07XG5leHBvcnQgdmFyIFJHQl9KT0lOID0gJywgJzsgLy8gR2l2ZW4gYSBzdHJpbmcsIHRoaXMgYXR0ZW1wdHMgdG8gcmV0dXJuIGEgZm9ybWF0IHRoYXQgY2FuIGJlIGNvbnN1bWVkIGJ5IGNocm9tYS1qc1xuXG5leHBvcnQgdmFyIHBhcnNlQ29sb3IgPSBmdW5jdGlvbiBwYXJzZUNvbG9yKGlucHV0KSB7XG4gIHZhciBwYXJzZWQ7XG4gIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gIGlmIChpbnB1dC5pbmRleE9mKCcsJykgPiAwKSB7XG4gICAgaWYgKCEvXltcXHMsLjAtOV0qJC8udGVzdChpbnB1dCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciByZ2IgPSBpbnB1dC50cmltKCkuc3BsaXQoJywnKS5maWx0ZXIoZnVuY3Rpb24gKG4pIHtcbiAgICAgIHJldHVybiBuICE9PSAnJztcbiAgICB9KS5tYXAoTnVtYmVyKTtcbiAgICBwYXJzZWQgPSByZ2IubGVuZ3RoID4gMiAmJiByZ2IubGVuZ3RoIDwgNSA/IHJnYiA6IEhFWF9GQUxMQkFDSztcbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQgPSBpbnB1dDtcbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59OyAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGlucHV0IHdpbGwgcmV0dXJuIGEgdmFsaWQgY2hyb21hLWpzIG9iamVjdCB3aGVuIGRlc2lnbmF0ZWQgYXMgb25lIG9mXG4vLyB0aGUgYWNjZXB0YWJsZSBmb3JtYXRzOiBoZXgsIHJnYiwgcmdiYVxuXG5leHBvcnQgdmFyIGNocm9tYVZhbGlkID0gZnVuY3Rpb24gY2hyb21hVmFsaWQoY29sb3IpIHtcbiAgdmFyIHBhcnNlZCA9IGNvbG9yO1xuXG4gIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcGFyc2VkID0gcGFyc2VDb2xvcihjb2xvcik7XG4gIH1cblxuICBpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChfdHlwZW9mKHBhcnNlZCkgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGNocm9tYS52YWxpZChwYXJzZWQsICdyZ2InKSB8fCBjaHJvbWEudmFsaWQocGFyc2VkLCAncmdiYScpO1xuICB9XG5cbiAgcmV0dXJuIGNocm9tYS52YWxpZChjb2xvciwgJ2hleCcpO1xufTsgLy8gR2l2ZW4gYW4gaW5wdXQgYW5kIG9wYWNpdHkgY29uZmlndXJhdGlvbiwgdGhpcyByZXR1cm5zIGEgdmFsaWQgY2hyb21hLWpzIG9iamVjdFxuXG5leHBvcnQgdmFyIGdldENocm9tYUNvbG9yID0gZnVuY3Rpb24gZ2V0Q2hyb21hQ29sb3IoaW5wdXQpIHtcbiAgdmFyIGFsbG93T3BhY2l0eSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gIHZhciBwYXJzZWQgPSBwYXJzZUNvbG9yKGlucHV0KTtcblxuICBpZiAocGFyc2VkICYmIGNocm9tYVZhbGlkKHBhcnNlZCkpIHtcbiAgICAvLyB0eXBlIGd1YXJkIGZvciB0aGUgZnVuY3Rpb24gb3ZlcmxvYWRcbiAgICB2YXIgY2hyb21hQ29sb3IgPSBfdHlwZW9mKHBhcnNlZCkgPT09ICdvYmplY3QnID8gY2hyb21hKHBhcnNlZCkgOiBjaHJvbWEocGFyc2VkKTtcblxuICAgIGlmICghYWxsb3dPcGFjaXR5ICYmIGNocm9tYUNvbG9yLmFscGhhKCkgPCAxKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hyb21hQ29sb3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07IC8vIEdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBrZXkgdmFsdWUgcGFpcnMgc3RvcC9jb2xvciByZXR1cm5zIGEgY3NzIGxpbmVhci1ncmFkaWVudFxuLy8gT3IgZ2l2ZW4gYW4gYXJyYXkgb2YgaGV4IGNvbG9ycyByZXR1cm5zIGEgY3NzIGxpbmVhci1ncmFkaWVudFxuXG5leHBvcnQgdmFyIGdldExpbmVhckdyYWRpZW50ID0gZnVuY3Rpb24gZ2V0TGluZWFyR3JhZGllbnQocGFsZXR0ZSkge1xuICB2YXIgbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb24gPSBwYWxldHRlLmxlbmd0aCAtIDE7XG4gIHZhciBsaW5lYXJHcmFkaWVudDtcbiAgdmFyIHBhbGV0dGVIYXNTdG9wcyA9IHBhbGV0dGUuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBfdHlwZW9mKGl0ZW0pID09PSAnb2JqZWN0JztcbiAgfSk7XG5cbiAgaWYgKHBhbGV0dGVIYXNTdG9wcykge1xuICAgIHZhciBwYWxldHRlQ29sb3JTdG9wID0gcGFsZXR0ZTtcbiAgICBsaW5lYXJHcmFkaWVudCA9IFwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFswXS5jb2xvciwgXCIgMCUsXCIpO1xuICAgIHZhciBsYXN0Q29sb3JTdG9wRGVjaW1hbCA9IDEwMCAvIHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLnN0b3A7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uOyBpKyspIHtcbiAgICAgIGxpbmVhckdyYWRpZW50ID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZUNvbG9yU3RvcFtpXS5jb2xvciwgXCIgXCIpLmNvbmNhdChNYXRoLmZsb29yKHBhbGV0dGVDb2xvclN0b3BbaV0uc3RvcCAqIGxhc3RDb2xvclN0b3BEZWNpbWFsKSwgXCIlLFwiKTtcbiAgICB9XG5cbiAgICB2YXIgbGluZWFyR3JhZGllbnRTdHlsZSA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLmNvbG9yLCBcIiAxMDAlKVwiKTtcbiAgICByZXR1cm4gbGluZWFyR3JhZGllbnRTdHlsZTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lYXJHcmFkaWVudCA9IFwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBcIi5jb25jYXQocGFsZXR0ZVswXSwgXCIgMCUsXCIpO1xuXG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGxhc3RDb2xvclN0b3BBcnJheVBvc2l0aW9uOyBfaSsrKSB7XG4gICAgICBsaW5lYXJHcmFkaWVudCA9IFwiXCIuY29uY2F0KGxpbmVhckdyYWRpZW50LCBcIiBcIikuY29uY2F0KHBhbGV0dGVbX2ldLCBcIiBcIikuY29uY2F0KE1hdGguZmxvb3IoMTAwICogX2kgLyBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiksIFwiJSxcIik7XG4gICAgfVxuXG4gICAgdmFyIF9saW5lYXJHcmFkaWVudFN0eWxlID0gXCJcIi5jb25jYXQobGluZWFyR3JhZGllbnQsIFwiIFwiKS5jb25jYXQocGFsZXR0ZVtsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbl0sIFwiIDEwMCUpXCIpO1xuXG4gICAgcmV0dXJuIF9saW5lYXJHcmFkaWVudFN0eWxlO1xuICB9XG59OyAvLyBHaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGgga2V5IHZhbHVlIHBhaXJzIHN0b3AvY29sb3Igb3IgYW4gYXJyYXkgb2YgaGV4IGNvbG9yc1xuLy8gcmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGgga2V5IHZhbHVlIHBhaXJzIGNvbG9yL3dpZHRoXG5cbmV4cG9ydCB2YXIgZ2V0Rml4ZWRMaW5lYXJHcmFkaWVudCA9IGZ1bmN0aW9uIGdldEZpeGVkTGluZWFyR3JhZGllbnQocGFsZXR0ZSkge1xuICB2YXIgcGFsZXR0ZUhhc1N0b3BzID0gcGFsZXR0ZS5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIF90eXBlb2YoaXRlbSkgPT09ICdvYmplY3QnO1xuICB9KTtcblxuICBpZiAocGFsZXR0ZUhhc1N0b3BzKSB7XG4gICAgdmFyIHBhbGV0dGVDb2xvclN0b3AgPSBwYWxldHRlO1xuICAgIHZhciBmaXhlZExpbmVhckdyYWRpZW50V2l0aFN0b3BzID0gcGFsZXR0ZUNvbG9yU3RvcC5tYXAoZnVuY3Rpb24gKGNvbG9yU3RvcCwgaW5kZXgpIHtcbiAgICAgIHZhciBsYXN0Q29sb3JTdG9wQXJyYXlQb3NpdGlvbiA9IHBhbGV0dGUubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0Q29sb3JTdG9wRGVjaW1hbCA9IDEwMCAvIHBhbGV0dGVDb2xvclN0b3BbbGFzdENvbG9yU3RvcEFycmF5UG9zaXRpb25dLnN0b3A7XG4gICAgICB2YXIgaXNGaXJzdENvbG9yU3RvcCA9IGluZGV4ID09PSAwO1xuICAgICAgdmFyIHByZXZpb3VzQ29sb3JTdG9wV2lkdGg7XG5cbiAgICAgIGlmIChpc0ZpcnN0Q29sb3JTdG9wKSB7XG4gICAgICAgIHByZXZpb3VzQ29sb3JTdG9wV2lkdGggPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJldmlvdXNDb2xvclN0b3BXaWR0aCA9IE1hdGguZmxvb3IocGFsZXR0ZUNvbG9yU3RvcFtpbmRleCAtIDFdLnN0b3AgKiBsYXN0Q29sb3JTdG9wRGVjaW1hbCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjdXJyZW50Q29sb3JTdG9wV2lkdGggPSBNYXRoLmZsb29yKGNvbG9yU3RvcC5zdG9wICogbGFzdENvbG9yU3RvcERlY2ltYWwpO1xuICAgICAgdmFyIGNvbG9yU3RvcFdpZHRoID0gY3VycmVudENvbG9yU3RvcFdpZHRoIC0gcHJldmlvdXNDb2xvclN0b3BXaWR0aDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBjb2xvclN0b3AuY29sb3IsXG4gICAgICAgIHdpZHRoOiBcIlwiLmNvbmNhdChjb2xvclN0b3BXaWR0aCwgXCIlXCIpXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBmaXhlZExpbmVhckdyYWRpZW50V2l0aFN0b3BzO1xuICB9IGVsc2Uge1xuICAgIHZhciBfcGFsZXR0ZUNvbG9yU3RvcCA9IHBhbGV0dGU7XG4gICAgdmFyIHBhbGV0dGVXaWR0aCA9IDEwMCAvIHBhbGV0dGUubGVuZ3RoO1xuXG4gICAgdmFyIGZpeGVkTGluZWFyR3JhZGllbnRXaWR0aEF1dG8gPSBfcGFsZXR0ZUNvbG9yU3RvcC5tYXAoZnVuY3Rpb24gKGhleENvZGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBoZXhDb2RlLFxuICAgICAgICB3aWR0aDogXCJcIi5jb25jYXQocGFsZXR0ZVdpZHRoLCBcIiVcIilcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZml4ZWRMaW5lYXJHcmFkaWVudFdpZHRoQXV0bztcbiAgfVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImxhYmVsXCIsIFwiY29sb3JcIiwgXCJ0b29sdGlwQ29udGVudFwiLCBcInRvb2x0aXBQb3NpdGlvblwiLCBcInRpdGxlXCIsIFwiaWNvblR5cGVcIiwgXCJvbkNsaWNrXCIsIFwib25DbGlja0FyaWFMYWJlbFwiLCBcImhyZWZcIiwgXCJyZWxcIiwgXCJ0YXJnZXRcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWN1cmVSZWxGb3JUYXJnZXQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi4vLi4vdG9vbF90aXAnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBjb2xvclRvQ2xhc3NNYXAgPSB7XG4gIGFjY2VudDogJ2V1aUJldGFCYWRnZS0tYWNjZW50JyxcbiAgc3ViZHVlZDogJ2V1aUJldGFCYWRnZS0tc3ViZHVlZCcsXG4gIGhvbGxvdzogJ2V1aUJldGFCYWRnZS0taG9sbG93J1xufTtcbmV4cG9ydCB2YXIgQ09MT1JTID0ga2V5c09mKGNvbG9yVG9DbGFzc01hcCk7XG5leHBvcnQgdmFyIHNpemVUb0NsYXNzTWFwID0ge1xuICBzOiAnZXVpQmV0YUJhZGdlLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTWFwKTtcbmV4cG9ydCB2YXIgRXVpQmV0YUJhZGdlID0gZnVuY3Rpb24gRXVpQmV0YUJhZGdlKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgbGFiZWwgPSBfcmVmLmxhYmVsLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdob2xsb3cnIDogX3JlZiRjb2xvcixcbiAgICAgIHRvb2x0aXBDb250ZW50ID0gX3JlZi50b29sdGlwQ29udGVudCxcbiAgICAgIF9yZWYkdG9vbHRpcFBvc2l0aW9uID0gX3JlZi50b29sdGlwUG9zaXRpb24sXG4gICAgICB0b29sdGlwUG9zaXRpb24gPSBfcmVmJHRvb2x0aXBQb3NpdGlvbiA9PT0gdm9pZCAwID8gJ3RvcCcgOiBfcmVmJHRvb2x0aXBQb3NpdGlvbixcbiAgICAgIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIGljb25UeXBlID0gX3JlZi5pY29uVHlwZSxcbiAgICAgIG9uQ2xpY2sgPSBfcmVmLm9uQ2xpY2ssXG4gICAgICBvbkNsaWNrQXJpYUxhYmVsID0gX3JlZi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgaHJlZiA9IF9yZWYuaHJlZixcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHNpbmdsZUxldHRlciA9IGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgbGFiZWwgPT09ICdzdHJpbmcnICYmIGxhYmVsLmxlbmd0aCA9PT0gMSkge1xuICAgIHNpbmdsZUxldHRlciA9IHRydWU7XG4gIH1cblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJldGFCYWRnZScsIHtcbiAgICAnZXVpQmV0YUJhZGdlLS1pY29uT25seSc6IGljb25UeXBlLFxuICAgICdldWlCZXRhQmFkZ2UtLXNpbmdsZUxldHRlcic6IHNpbmdsZUxldHRlcixcbiAgICAnZXVpQmV0YUJhZGdlLWlzQ2xpY2thYmxlJzogb25DbGljayB8fCBocmVmXG4gIH0sIGNvbG9yVG9DbGFzc01hcFtjb2xvcl0sIHNpemVUb0NsYXNzTWFwW3NpemVdLCBjbGFzc05hbWUpO1xuICB2YXIgaWNvbjtcblxuICBpZiAoaWNvblR5cGUpIHtcbiAgICBpY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQmV0YUJhZGdlX19pY29uXCIsXG4gICAgICB0eXBlOiBpY29uVHlwZSxcbiAgICAgIHNpemU6IHNpemUgPT09ICdtJyA/ICdtJyA6ICdzJyxcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuXG4gICAgfSk7XG4gIH1cblxuICB2YXIgRWxlbWVudCA9IGhyZWYgPyAnYScgOiAnYnV0dG9uJztcbiAgdmFyIHJlbE9iaiA9IHt9O1xuXG4gIGlmIChocmVmKSB7XG4gICAgcmVsT2JqLmhyZWYgPSBocmVmO1xuICAgIHJlbE9iai50YXJnZXQgPSB0YXJnZXQ7XG4gICAgcmVsT2JqLnJlbCA9IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHJlbFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZWxPYmoub25DbGljayA9IG9uQ2xpY2s7XG4gIH1cblxuICB2YXIgY29udGVudDtcblxuICBpZiAob25DbGljayB8fCBocmVmKSB7XG4gICAgY29udGVudCA9IF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgXCJhcmlhLWxhYmVsXCI6IG9uQ2xpY2tBcmlhTGFiZWwsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICB0aXRsZTogdHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyA/IGxhYmVsIDogdGl0bGVcbiAgICB9LCByZWxPYmosIHJlc3QpLCBpY29uIHx8IGxhYmVsKTtcblxuICAgIGlmICh0b29sdGlwQ29udGVudCkge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgICAgICBwb3NpdGlvbjogdG9vbHRpcFBvc2l0aW9uLFxuICAgICAgICBjb250ZW50OiB0b29sdGlwQ29udGVudCxcbiAgICAgICAgdGl0bGU6IHRpdGxlIHx8IGxhYmVsXG4gICAgICB9LCBjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGNvbnRlbnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodG9vbHRpcENvbnRlbnQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXAsIHtcbiAgICAgICAgcG9zaXRpb246IHRvb2x0aXBQb3NpdGlvbixcbiAgICAgICAgY29udGVudDogdG9vbHRpcENvbnRlbnQsXG4gICAgICAgIHRpdGxlOiB0aXRsZSB8fCBsYWJlbFxuICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe1xuICAgICAgICB0YWJJbmRleDogMCxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICByb2xlOiBcImJ1dHRvblwiXG4gICAgICB9LCByZXN0KSwgaWNvbiB8fCBsYWJlbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3BhblRpdGxlID0gdGl0bGUgfHwgbGFiZWw7XG5cbiAgICAgIGlmIChzcGFuVGl0bGUgJiYgdHlwZW9mIHNwYW5UaXRsZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiT25seSBzdHJpbmcgdGl0bGVzIGFyZSBwZXJtaXR0ZWQgb24gYmFkZ2VzIHRoYXQgZG8gbm90IHVzZSB0b29sdGlwcy4gRm91bmQ6IFwiLmNvbmNhdChfdHlwZW9mKHNwYW5UaXRsZSkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICB0aXRsZTogc3BhblRpdGxlXG4gICAgICB9LCByZXN0KSwgaWNvbiB8fCBsYWJlbCk7XG4gICAgfVxuICB9XG59O1xuRXVpQmV0YUJhZGdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byB0aGUgYmFkZ2UgaXRzZWxmXG4gICAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgKi9cbiAgb25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogU3VwcGx5IGFuIGljb24gdHlwZSBpZiB0aGUgYmFkZ2Ugc2hvdWxkIGp1c3QgYmUgYW4gaWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogT25lIHdvcmQgbGFiZWwgbGlrZSBcIkJldGFcIiBvciBcIkxhYlwiXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogT25lIHdvcmQgbGFiZWwgbGlrZSBcIkJldGFcIiBvciBcIkxhYlwiXG4gICAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBDb250ZW50IGZvciB0aGUgdG9vbHRpcFxuICAgICAqL1xuICB0b29sdGlwQ29udGVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXSldKSxcblxuICAvKipcbiAgICAgKiBDdXN0b20gcG9zaXRpb24gb2YgdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgdG9vbHRpcFBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKSxcblxuICAvKipcbiAgICAgKiBPcHRpb25hbCB0aXRsZSB3aWxsIGJlIHN1cHBsaWVkIGFzIHRvb2x0aXAgdGl0bGUgb3IgdGl0bGUgYXR0cmlidXRlXG4gICAgICogb3RoZXJ3aXNlIHRoZSBsYWJlbCB3aWxsIGJlIHVzZWRcbiAgICAgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZ10pXSksXG5cbiAgLyoqXG4gICAgICogQWNjZXB0cyBhY2NlbnQsIHN1YmR1ZWQgYW5kIGhvbGxvdy5cbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJhY2NlbnRcIiwgXCJzdWJkdWVkXCIsIFwiaG9sbG93XCJdKSxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKVxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJhbmNob3JDbGFzc05hbWVcIiwgXCJjb250ZW50XCIsIFwidGl0bGVcIiwgXCJkZWxheVwiLCBcImRpc3BsYXlcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjbG9uZUVsZW1lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpUG9ydGFsIH0gZnJvbSAnLi4vcG9ydGFsJztcbmltcG9ydCB7IEV1aVRvb2xUaXBQb3BvdmVyIH0gZnJvbSAnLi90b29sX3RpcF9wb3BvdmVyJztcbmltcG9ydCB7IGVucXVldWVTdGF0ZUNoYW5nZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlYWN0JztcbmltcG9ydCB7IGZpbmRQb3BvdmVyUG9zaXRpb24sIGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXIvcmVzaXplX29ic2VydmVyJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgcG9zaXRpb25zVG9DbGFzc05hbWVNYXAgPSB7XG4gIHRvcDogJ2V1aVRvb2xUaXAtLXRvcCcsXG4gIHJpZ2h0OiAnZXVpVG9vbFRpcC0tcmlnaHQnLFxuICBib3R0b206ICdldWlUb29sVGlwLS1ib3R0b20nLFxuICBsZWZ0OiAnZXVpVG9vbFRpcC0tbGVmdCdcbn07XG5leHBvcnQgdmFyIFBPU0lUSU9OUyA9IGtleXNPZihwb3NpdGlvbnNUb0NsYXNzTmFtZU1hcCk7XG52YXIgZGVsYXlUb01zTWFwID0ge1xuICByZWd1bGFyOiAyNTAsXG4gIGxvbmc6IDI1MCAqIDVcbn07XG52YXIgZGlzcGxheVRvQ2xhc3NOYW1lTWFwID0ge1xuICBpbmxpbmVCbG9jazogdW5kZWZpbmVkLFxuICBibG9jazogJ2V1aVRvb2xUaXBBbmNob3ItLWRpc3BsYXlCbG9jaydcbn07XG52YXIgREVGQVVMVF9UT09MVElQX1NUWUxFUyA9IHtcbiAgLy8gcG9zaXRpb24gdGhlIHRvb2x0aXAgY29udGVudCBuZWFyIHRoZSB0b3AtbGVmdFxuICAvLyBjb3JuZXIgb2YgdGhlIHdpbmRvdyBzbyBpdCBjYW4ndCBjcmVhdGUgc2Nyb2xsYmFyc1xuICAvLyA1MCw1MCBiZWNhdXNlIHdobyBrbm93cyB3aGF0IG5lZ2F0aXZlIG1hcmdpbnMsIHBhZGRpbmcsIGV0Y1xuICB0b3A6IDUwLFxuICBsZWZ0OiA1MCxcbiAgLy8ganVzdCBpbiBjYXNlLCBhdm9pZCBhbnkgcG90ZW50aWFsIGZsaWNrZXIgYnkgaGlkaW5nXG4gIC8vIHRoZSB0b29sdGlwIGJlZm9yZSBpdCBpcyBwb3NpdGlvbmVkXG4gIG9wYWNpdHk6IDAsXG4gIC8vIHByZXZlbnQgYWNjaWRlbnRhbCBtb3VzZSBpbnRlcmFjdGlvbiB3aGlsZSBwb3NpdGlvbmluZ1xuICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xufTtcbmV4cG9ydCB2YXIgRXVpVG9vbFRpcCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVG9vbFRpcCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlUb29sVGlwKTtcblxuICBmdW5jdGlvbiBFdWlUb29sVGlwKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUb29sVGlwKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiX2lzTW91bnRlZFwiLCBmYWxzZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYW5jaG9yXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvcG92ZXJcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGltZW91dElkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgICBjYWxjdWxhdGVkUG9zaXRpb246IF90aGlzLnByb3BzLnBvc2l0aW9uLFxuICAgICAgdG9vbFRpcFN0eWxlczogREVGQVVMVF9UT09MVElQX1NUWUxFUyxcbiAgICAgIGFycm93U3R5bGVzOiB1bmRlZmluZWQsXG4gICAgICBpZDogX3RoaXMucHJvcHMuaWQgfHwgaHRtbElkR2VuZXJhdG9yKCkoKVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsZWFyQW5pbWF0aW9uVGltZW91dFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMudGltZW91dElkKSB7XG4gICAgICAgIF90aGlzLnRpbWVvdXRJZCA9IGNsZWFyVGltZW91dChfdGhpcy50aW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRlc3RBbmNob3JcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gd2hlbiB0aGUgdG9vbHRpcCBpcyB2aXNpYmxlLCB0aGlzIGNoZWNrcyBpZiB0aGUgYW5jaG9yIGlzIHN0aWxsIHBhcnQgb2YgZG9jdW1lbnRcbiAgICAgIC8vIHRoaXMgZml4ZXMgd2hlbiB0aGUgcmVhY3Qgcm9vdCBpcyByZW1vdmVkIGZyb20gdGhlIGRvbSB3aXRob3V0IHVubW91bnRpbmdcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2V1aS9pc3N1ZXMvMTEwNVxuICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnMoX3RoaXMuYW5jaG9yKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gdGhlIGFuY2hvciBpcyBubyBsb25nZXIgcGFydCBvZiBgZG9jdW1lbnRgXG4gICAgICAgIF90aGlzLmhpZGVUb29sVGlwKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoX3RoaXMuc3RhdGUudmlzaWJsZSkge1xuICAgICAgICAgIC8vIGlmIHN0aWxsIHZpc2libGUsIGtlZXAgY2hlY2tpbmdcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMudGVzdEFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRQb3BvdmVyUmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnBvcG92ZXIgPSByZWY7IC8vIGlmIHRoZSBwb3BvdmVyIGhhcyBiZWVuIHVubW91bnRlZCwgY2xlYXJcbiAgICAgIC8vIGFueSBwcmV2aW91cyBrbm93bGVkZ2UgYWJvdXQgaXRzIHNpemVcblxuICAgICAgaWYgKHJlZiA9PSBudWxsKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB0b29sVGlwU3R5bGVzOiBERUZBVUxUX1RPT0xUSVBfU1RZTEVTLFxuICAgICAgICAgIGFycm93U3R5bGVzOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2hvd1Rvb2xUaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFfdGhpcy50aW1lb3V0SWQpIHtcbiAgICAgICAgX3RoaXMudGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIHZpc2libGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBkZWxheVRvTXNNYXBbX3RoaXMucHJvcHMuZGVsYXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3NpdGlvblRvb2xUaXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlcXVlc3RlZFBvc2l0aW9uID0gX3RoaXMucHJvcHMucG9zaXRpb247XG5cbiAgICAgIGlmICghX3RoaXMuYW5jaG9yIHx8ICFfdGhpcy5wb3BvdmVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF9maW5kUG9wb3ZlclBvc2l0aW9uID0gZmluZFBvcG92ZXJQb3NpdGlvbih7XG4gICAgICAgIGFuY2hvcjogX3RoaXMuYW5jaG9yLFxuICAgICAgICBwb3BvdmVyOiBfdGhpcy5wb3BvdmVyLFxuICAgICAgICBwb3NpdGlvbjogcmVxdWVzdGVkUG9zaXRpb24sXG4gICAgICAgIG9mZnNldDogMTYsXG4gICAgICAgIC8vIG9mZnNldCBwb3BvdmVyIDE2cHggZnJvbSB0aGUgYW5jaG9yXG4gICAgICAgIGFycm93Q29uZmlnOiB7XG4gICAgICAgICAgYXJyb3dXaWR0aDogMTIsXG4gICAgICAgICAgYXJyb3dCdWZmZXI6IDRcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAgICAgcG9zaXRpb24gPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5wb3NpdGlvbixcbiAgICAgICAgICBsZWZ0ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24ubGVmdCxcbiAgICAgICAgICB0b3AgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi50b3AsXG4gICAgICAgICAgYXJyb3cgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5hcnJvdzsgLy8gSWYgZW5jcm9hY2hpbmcgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHdpbmRvdzpcbiAgICAgIC8vIFdoZW4gYHByb3BzLmNvbnRlbnRgIGNoYW5nZXMgYW5kIGlzIGxvbmdlciB0aGFuIGBwcmV2UHJvcHMuY29udGVudGAsIHRoZSB0b29sdGlwIHdpZHRoIHJlbWFpbnMgYW5kXG4gICAgICAvLyB0aGUgcmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgd2lsbCBmaXJlIHR3aWNlIChvbmNlIGZvciB2ZXJ0aWNhbCByZXNpemUgY2F1c2VkIGJ5IHRleHQgbGluZSB3cmFwcGluZyxcbiAgICAgIC8vIG9uY2UgZm9yIGEgc3Vic2VxdWVudCBwb3NpdGlvbiBjb3JyZWN0aW9uKSBhbmQgY2F1c2UgYSBmbGFzaCByZXJlbmRlciBhbmQgcmVwb3NpdGlvbi5cbiAgICAgIC8vIFRvIHByZXZlbnQgdGhpcywgd2UgY2FuIG9yaWVudCBmcm9tIHRoZSByaWdodCBzbyB0aGF0IHRleHQgbGluZSB3cmFwcGluZyBkb2VzIG5vdCBvY2N1ciwgbmVnYXRpbmdcbiAgICAgIC8vIHRoZSBzZWNvbmQgcmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgY2FsbC5cblxuXG4gICAgICB2YXIgd2luZG93V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgICB2YXIgdXNlUmlnaHRWYWx1ZSA9IHdpbmRvd1dpZHRoIC8gMiA8IGxlZnQ7XG4gICAgICB2YXIgdG9vbFRpcFN0eWxlcyA9IHtcbiAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgIGxlZnQ6IHVzZVJpZ2h0VmFsdWUgPyAnYXV0bycgOiBsZWZ0LFxuICAgICAgICByaWdodDogdXNlUmlnaHRWYWx1ZSA/IHdpbmRvd1dpZHRoIC0gbGVmdCAtIF90aGlzLnBvcG92ZXIub2Zmc2V0V2lkdGggOiAnYXV0bydcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgY2FsY3VsYXRlZFBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgdG9vbFRpcFN0eWxlczogdG9vbFRpcFN0eWxlcyxcbiAgICAgICAgYXJyb3dTdHlsZXM6IGFycm93XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoaWRlVG9vbFRpcFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5jbGVhckFuaW1hdGlvblRpbWVvdXQoKTtcblxuICAgICAgZW5xdWV1ZVN0YXRlQ2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl9pc01vdW50ZWQpIHtcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5zaG93VG9vbFRpcCgpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQmx1clwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLmhpZGVUb29sVGlwKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Nb3VzZU91dFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIFByZXZlbnQgbW91c2luZyBvdmVyIGNoaWxkcmVuIGZyb20gaGlkaW5nIHRoZSB0b29sdGlwIGJ5IHRlc3RpbmcgZm9yIHdoZXRoZXIgdGhlIG1vdXNlIGhhc1xuICAgICAgLy8gbGVmdCB0aGUgYW5jaG9yIGZvciBhIG5vbi1jaGlsZC5cbiAgICAgIGlmIChfdGhpcy5hbmNob3IgPT09IGV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgX3RoaXMuYW5jaG9yICE9IG51bGwgJiYgIV90aGlzLmFuY2hvci5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICBpZiAoIV90aGlzLnN0YXRlLmhhc0ZvY3VzKSB7XG4gICAgICAgICAgX3RoaXMuaGlkZVRvb2xUaXAoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25Nb3VzZU91dCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbk1vdXNlT3V0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUb29sVGlwLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhckFuaW1hdGlvblRpbWVvdXQoKTtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLnZpc2libGUgPT09IGZhbHNlICYmIHRoaXMuc3RhdGUudmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy50ZXN0QW5jaG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGFuY2hvckNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmFuY2hvckNsYXNzTmFtZSxcbiAgICAgICAgICBjb250ZW50ID0gX3RoaXMkcHJvcHMuY29udGVudCxcbiAgICAgICAgICB0aXRsZSA9IF90aGlzJHByb3BzLnRpdGxlLFxuICAgICAgICAgIGRlbGF5ID0gX3RoaXMkcHJvcHMuZGVsYXksXG4gICAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBhcnJvd1N0eWxlcyA9IF90aGlzJHN0YXRlLmFycm93U3R5bGVzLFxuICAgICAgICAgIGlkID0gX3RoaXMkc3RhdGUuaWQsXG4gICAgICAgICAgdG9vbFRpcFN0eWxlcyA9IF90aGlzJHN0YXRlLnRvb2xUaXBTdHlsZXMsXG4gICAgICAgICAgdmlzaWJsZSA9IF90aGlzJHN0YXRlLnZpc2libGU7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXAnLCBwb3NpdGlvbnNUb0NsYXNzTmFtZU1hcFt0aGlzLnN0YXRlLmNhbGN1bGF0ZWRQb3NpdGlvbl0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgYW5jaG9yQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXBBbmNob3InLCBkaXNwbGF5ID8gZGlzcGxheVRvQ2xhc3NOYW1lTWFwW2Rpc3BsYXldIDogbnVsbCwgYW5jaG9yQ2xhc3NOYW1lKTtcbiAgICAgIHZhciB0b29sdGlwO1xuXG4gICAgICBpZiAodmlzaWJsZSAmJiAoY29udGVudCB8fCB0aXRsZSkpIHtcbiAgICAgICAgdG9vbHRpcCA9IF9fX0Vtb3Rpb25KU1goRXVpUG9ydGFsLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRvb2xUaXBQb3BvdmVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIHN0eWxlOiB0b29sVGlwU3R5bGVzLFxuICAgICAgICAgIHBvc2l0aW9uVG9vbFRpcDogdGhpcy5wb3NpdGlvblRvb2xUaXAsXG4gICAgICAgICAgcG9wb3ZlclJlZjogdGhpcy5zZXRQb3BvdmVyUmVmLFxuICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgcm9sZTogXCJ0b29sdGlwXCJcbiAgICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIHN0eWxlOiBhcnJvd1N0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpVG9vbFRpcF9fYXJyb3dcIlxuICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlSZXNpemVPYnNlcnZlciwge1xuICAgICAgICAgIG9uUmVzaXplOiB0aGlzLnBvc2l0aW9uVG9vbFRpcFxuICAgICAgICB9LCBmdW5jdGlvbiAocmVzaXplUmVmKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgcmVmOiByZXNpemVSZWZcbiAgICAgICAgICB9LCBjb250ZW50KTtcbiAgICAgICAgfSkpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFuY2hvciA9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9tb3VzZS1ldmVudHMtaGF2ZS1rZXktZXZlbnRzXG4gICAgICBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKGFuY2hvcikge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuYW5jaG9yID0gYW5jaG9yO1xuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWU6IGFuY2hvckNsYXNzZXMsXG4gICAgICAgIG9uTW91c2VPdmVyOiB0aGlzLnNob3dUb29sVGlwLFxuICAgICAgICBvbk1vdXNlT3V0OiB0aGlzLm9uTW91c2VPdXRcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIF9vYmplY3RTcHJlYWQoe1xuICAgICAgICBvbkZvY3VzOiBmdW5jdGlvbiBvbkZvY3VzKGUpIHtcbiAgICAgICAgICBfdGhpczIub25Gb2N1cygpO1xuXG4gICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25Gb2N1cyAmJiBjaGlsZHJlbi5wcm9wcy5vbkZvY3VzKGUpO1xuICAgICAgICB9LFxuICAgICAgICBvbkJsdXI6IGZ1bmN0aW9uIG9uQmx1cihlKSB7XG4gICAgICAgICAgX3RoaXMyLm9uQmx1cigpO1xuXG4gICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25CbHVyICYmIGNoaWxkcmVuLnByb3BzLm9uQmx1cihlKTtcbiAgICAgICAgfVxuICAgICAgfSwgdmlzaWJsZSAmJiB7XG4gICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogdGhpcy5zdGF0ZS5pZFxuICAgICAgfSkpKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGFuY2hvciwgdG9vbHRpcCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVRvb2xUaXA7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlUb29sVGlwLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHBvc2l0aW9uOiAndG9wJyxcbiAgZGVsYXk6ICdyZWd1bGFyJyxcbiAgZGlzcGxheTogJ2lubGluZUJsb2NrJ1xufSk7XG5cbkV1aVRvb2xUaXAucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBQYXNzZXMgb250byB0aGUgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGFuY2hvckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBUaGUgaW4tdmlldyB0cmlnZ2VyIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIFBhc3NlcyBvbnRvIHRoZSB0b29sdGlwIGl0c2VsZiwgbm90IHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVGhlIG1haW4gY29udGVudCBvZiB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgICAqIENvbW1vbiBkaXNwbGF5IGFsdGVybmF0aXZlcyBmb3IgdGhlIGFuY2hvciB3cmFwcGVyXG4gICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5vbmVPZihbXCJpbmxpbmVCbG9ja1wiLCBcImJsb2NrXCJdKSxcblxuICAvKipcbiAgICAgKiBEZWxheSBiZWZvcmUgc2hvd2luZyB0b29sdGlwLiBHb29kIGZvciByZXBlYXRhYmxlIGl0ZW1zLlxuICAgICAqL1xuICBkZWxheTogUHJvcFR5cGVzLm9uZU9mKFtcInJlZ3VsYXJcIiwgXCJsb25nXCJdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBVbmxlc3MgeW91IHByb3ZpZGUgb25lLCB0aGlzIHdpbGwgYmUgcmFuZG9tbHkgZ2VuZXJhdGVkLlxuICAgICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBTdWdnZXN0ZWQgcG9zaXRpb24uIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSBmb3IgaXQgdGhpcyB3aWxsIGJlIGNoYW5nZWQuXG4gICAgICovXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCJdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIElmIHN1cHBsaWVkLCBjYWxsZWQgd2hlbiBtb3VzZSBtb3ZlbWVudCBjYXVzZXMgdGhlIHRvb2wgdGlwIHRvIGJlXG4gICAgICogaGlkZGVuLlxuICAgICAqL1xuICBvbk1vdXNlT3V0OiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBOT1RFOiBXZSBjYW4ndCB0ZXN0IHRoaXMgY29tcG9uZW50IGJlY2F1c2UgRW56eW1lIGRvZXNuJ3Qgc3VwcG9ydCByZW5kZXJpbmdcbiAqIGludG8gcG9ydGFscy5cbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5leHBvcnQgdmFyIGluc2VydFBvc2l0aW9ucyA9IHtcbiAgYWZ0ZXI6ICdhZnRlcmVuZCcsXG4gIGJlZm9yZTogJ2JlZm9yZWJlZ2luJ1xufTtcbmV4cG9ydCB2YXIgSU5TRVJUX1BPU0lUSU9OUyA9IGtleXNPZihpbnNlcnRQb3NpdGlvbnMpO1xuZXhwb3J0IHZhciBFdWlQb3J0YWwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVBvcnRhbCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlQb3J0YWwpO1xuXG4gIGZ1bmN0aW9uIEV1aVBvcnRhbChwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlQb3J0YWwpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9ydGFsTm9kZVwiLCBudWxsKTtcblxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzKTsgLy8gUHJldmVudCBTU1IgZXJyb3JzXG5cbiAgICB2YXIgaW5zZXJ0ID0gX3RoaXMucHJvcHMuaW5zZXJ0O1xuICAgIF90aGlzLnBvcnRhbE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBfdGhpcy5wb3J0YWxOb2RlLmRhdGFzZXQuZXVpcG9ydGFsID0gJ3RydWUnO1xuXG4gICAgaWYgKGluc2VydCA9PSBudWxsKSB7XG4gICAgICAvLyBubyBpbnNlcnRpb24gZGVmaW5lZCwgYXBwZW5kIHRvIGJvZHlcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoX3RoaXMucG9ydGFsTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluc2VydGluZyBiZWZvcmUgb3IgYWZ0ZXIgYW4gZWxlbWVudFxuICAgICAgdmFyIHNpYmxpbmcgPSBpbnNlcnQuc2libGluZyxcbiAgICAgICAgICBwb3NpdGlvbiA9IGluc2VydC5wb3NpdGlvbjtcbiAgICAgIHNpYmxpbmcuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KGluc2VydFBvc2l0aW9uc1twb3NpdGlvbl0sIF90aGlzLnBvcnRhbE5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlQb3J0YWwsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy51cGRhdGVQb3J0YWxSZWYodGhpcy5wb3J0YWxOb2RlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcG9ydGFsTm9kZTtcblxuICAgICAgaWYgKChfdGhpcyRwb3J0YWxOb2RlID0gdGhpcy5wb3J0YWxOb2RlKSAhPT0gbnVsbCAmJiBfdGhpcyRwb3J0YWxOb2RlICE9PSB2b2lkIDAgJiYgX3RoaXMkcG9ydGFsTm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIHRoaXMucG9ydGFsTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9ydGFsTm9kZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlUG9ydGFsUmVmKG51bGwpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVQb3J0YWxSZWZcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlUG9ydGFsUmVmKHJlZikge1xuICAgICAgaWYgKHRoaXMucHJvcHMucG9ydGFsUmVmKSB7XG4gICAgICAgIHRoaXMucHJvcHMucG9ydGFsUmVmKHJlZik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb3J0YWxOb2RlID8gLyojX19QVVJFX18qL2NyZWF0ZVBvcnRhbCh0aGlzLnByb3BzLmNoaWxkcmVuLCB0aGlzLnBvcnRhbE5vZGUpIDogbnVsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpUG9ydGFsO1xufShDb21wb25lbnQpO1xuRXVpUG9ydGFsLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIGluc2VydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzaWJsaW5nOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbXCJiZWZvcmVcIiwgXCJhZnRlclwiXSkuaXNSZXF1aXJlZFxuICB9KSxcbiAgcG9ydGFsUmVmOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJ0aXRsZVwiLCBcImNsYXNzTmFtZVwiLCBcInBvc2l0aW9uVG9vbFRpcFwiLCBcInBvcG92ZXJSZWZcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVG9vbFRpcFBvcG92ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVRvb2xUaXBQb3BvdmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVRvb2xUaXBQb3BvdmVyKTtcblxuICBmdW5jdGlvbiBFdWlUb29sVGlwUG9wb3ZlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVG9vbFRpcFBvcG92ZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwb3BvdmVyXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlRGltZW5zaW9uc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBCZWNhdXNlIG9mIHRoaXMgZGVsYXksIHNvbWV0aW1lcyBgcG9zaXRpb25Ub29sVGlwYCBiZWNvbWVzIHVuYXZhaWxhYmxlLlxuICAgICAgICBpZiAoX3RoaXMucG9wb3Zlcikge1xuICAgICAgICAgIF90aGlzLnByb3BzLnBvc2l0aW9uVG9vbFRpcCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRQb3BvdmVyUmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnBvcG92ZXIgPSByZWY7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5wb3BvdmVyUmVmKSB7XG4gICAgICAgIF90aGlzLnByb3BzLnBvcG92ZXJSZWYocmVmKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUb29sVGlwUG9wb3ZlciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2V1aUJvZHktaGFzUG9ydGFsQ29udGVudCcpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMudXBkYXRlRGltZW5zaW9ucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdldWlCb2R5LWhhc1BvcnRhbENvbnRlbnQnKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnVwZGF0ZURpbWVuc2lvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIHRpdGxlID0gX3RoaXMkcHJvcHMudGl0bGUsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIHBvc2l0aW9uVG9vbFRpcCA9IF90aGlzJHByb3BzLnBvc2l0aW9uVG9vbFRpcCxcbiAgICAgICAgICBwb3BvdmVyUmVmID0gX3RoaXMkcHJvcHMucG9wb3ZlclJlZixcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRvb2xUaXBQb3BvdmVyJywgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBvcHRpb25hbFRpdGxlO1xuXG4gICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgb3B0aW9uYWxUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlUb29sVGlwX190aXRsZVwiXG4gICAgICAgIH0sIHRpdGxlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHJlZjogdGhpcy5zZXRQb3BvdmVyUmVmXG4gICAgICB9LCByZXN0KSwgb3B0aW9uYWxUaXRsZSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUb29sVGlwUG9wb3Zlcjtcbn0oQ29tcG9uZW50KTtcbkV1aVRvb2xUaXBQb3BvdmVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwb3NpdGlvblRvb2xUaXA6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICBwb3BvdmVyUmVmOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJhcmlhLWxhYmVsXCIsIFwiY29sb3JcIiwgXCJzaXplXCIsIFwiaWNvblByb3BzXCIsIFwicG9zaXRpb25cIiwgXCJkZWxheVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlUb29sVGlwIH0gZnJvbSAnLi90b29sX3RpcCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlJY29uVGlwID0gZnVuY3Rpb24gRXVpSWNvblRpcChfcmVmKSB7XG4gIHZhciBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAncXVlc3Rpb25JbkNpcmNsZScgOiBfcmVmJHR5cGUsXG4gICAgICBfcmVmJGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXSxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWYkYXJpYUxhYmVsID09PSB2b2lkIDAgPyAnSW5mbycgOiBfcmVmJGFyaWFMYWJlbCxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBpY29uUHJvcHMgPSBfcmVmLmljb25Qcm9wcyxcbiAgICAgIF9yZWYkcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLFxuICAgICAgcG9zaXRpb24gPSBfcmVmJHBvc2l0aW9uID09PSB2b2lkIDAgPyAndG9wJyA6IF9yZWYkcG9zaXRpb24sXG4gICAgICBfcmVmJGRlbGF5ID0gX3JlZi5kZWxheSxcbiAgICAgIGRlbGF5ID0gX3JlZiRkZWxheSA9PT0gdm9pZCAwID8gJ3JlZ3VsYXInIDogX3JlZiRkZWxheSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIGRlbGF5OiBkZWxheVxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCBfZXh0ZW5kcyh7XG4gICAgdGFiSW5kZXg6IDAsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb2xvcjogY29sb3IsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsXG4gIH0sIGljb25Qcm9wcykpKTtcbn07XG5FdWlJY29uVGlwLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICBhbmNob3JDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUGFzc2VzIG9udG8gdGhlIHRvb2x0aXAgaXRzZWxmLCBub3QgdGhlIHRyaWdnZXIuXG4gICAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBUaGUgbWFpbiBjb250ZW50IG9mIHlvdXIgdG9vbHRpcC5cbiAgICAgKi9cbiAgY29udGVudDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogQ29tbW9uIGRpc3BsYXkgYWx0ZXJuYXRpdmVzIGZvciB0aGUgYW5jaG9yIHdyYXBwZXJcbiAgICAgKi9cbiAgZGlzcGxheTogUHJvcFR5cGVzLm9uZU9mKFtcImlubGluZUJsb2NrXCIsIFwiYmxvY2tcIl0pLFxuXG4gIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIHRpdGxlIGZvciB5b3VyIHRvb2x0aXAuXG4gICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBVbmxlc3MgeW91IHByb3ZpZGUgb25lLCB0aGlzIHdpbGwgYmUgcmFuZG9tbHkgZ2VuZXJhdGVkLlxuICAgICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBJZiBzdXBwbGllZCwgY2FsbGVkIHdoZW4gbW91c2UgbW92ZW1lbnQgY2F1c2VzIHRoZSB0b29sIHRpcCB0byBiZVxuICAgICAqIGhpZGRlbi5cbiAgICAgKi9cbiAgb25Nb3VzZU91dDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogVGhlIGljb24gY29sb3IuXG4gICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIHR5cGUuXG4gICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIFRoZSBpY29uIHNpemUuXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogRXhwbGFpbiB3aGF0IHRoaXMgaWNvbiBtZWFucyBmb3Igc2NyZWVuIHJlYWRlcnMuXG4gICAgICovXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFBhc3MgY2VydGFpbiBwcm9wcyBkb3duIHRvIGBFdWlJY29uYFxuICAgICAqL1xuICAvLyBFdWlJY29uVGlwJ3MgYHR5cGVgIGlzIHBhc3NlZCB0byBFdWlJY29uLCBzbyB3ZSB3YW50IHRvIGV4Y2x1ZGUgYHR5cGVgIGZyb21cbiAgLy8gaWNvblByb3BzOyBob3dldmVyLCBkdWUgdG8gVFMncyBiaXZhcmlhbnQgZnVuY3Rpb24gYXJndW1lbnRzIGB0eXBlYCBjb3VsZCBiZVxuICAvLyBwYXNzZWQgd2l0aG91dCBhbnkgZXJyb3IvZmVlZGJhY2sgc28gd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gYG5ldmVyYCB0eXBlXG4gIGljb25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgLy8gVGhpcyBhcmUgY29waWVkIGZyb20gRXVpVG9vbFRpcFByb3BzLCBidXQgbWFkZSBvcHRpb25hbC4gRGVmYXVsdHNcbiAgLy8gYXJlIGFwcGxpZWQgYmVsb3cuXG4gIGRlbGF5OiBQcm9wVHlwZXMuYW55LFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLmFueVxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjaHJvbWEgZnJvbSAnY2hyb21hLWpzJztcbmltcG9ydCB7IENPTE9SX01PREVTX1NUQU5EQVJEIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdGhlbWUvdHlwZXMnOyAvLyBDcmVhdGUgYSBDU1MgY29sb3IgdmFsdWUgdXNpbmcgd2hvc2Ugb3BhY2l0eSBpcyBkZXRlcm1pbmVkIGJhc2VkXG4vLyBvbiBlaXRoZXIgYSBsaWdodCBvciBkYXJrIHRoZW1lLiBXZSB1c2UgYSBtdWx0aXBsaWVyXG4vLyBvZiAxIGZvciBsaWdodCB0aGVtZXMgYW5kIDIuNSBmb3IgZGFyayB0aGVtZXNcblxuZXhwb3J0IHZhciBnZXRTaGFkb3dDb2xvciA9IGZ1bmN0aW9uIGdldFNoYWRvd0NvbG9yKGNvbG9yLCBvcGFjaXR5LCBjb2xvck1vZGUpIHtcbiAgdmFyIHRoZW1lT3BhY2l0eSA9IGNvbG9yTW9kZSA9PT0gQ09MT1JfTU9ERVNfU1RBTkRBUkQuZGFyayA/IG9wYWNpdHkgKiAzLjUgOiBvcGFjaXR5ICogMTtcbiAgcmV0dXJuIGNocm9tYShjb2xvcikuYWxwaGEodGhlbWVPcGFjaXR5KS5jc3MoKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RoZW1lJztcbmltcG9ydCB7IGdldFNoYWRvd0NvbG9yIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuLyoqXG4gKiBldWlTbGlnaHRTaGFkb3dcbiAqL1xuZXhwb3J0IHZhciBldWlTaGFkb3dYU21hbGwgPSBmdW5jdGlvbiBldWlTaGFkb3dYU21hbGwoX3JlZikge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmLmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZi5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWYyLmNvbG9yO1xuXG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAuOHB4IC44cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMi4zcHggMnB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDMsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG4vKipcbiAqIGJvdHRvbVNoYWRvd1NtYWxsXG4gKi9cblxuZXhwb3J0IHZhciBldWlTaGFkb3dTbWFsbCA9IGZ1bmN0aW9uIGV1aVNoYWRvd1NtYWxsKF9yZWYzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYzLmV1aVRoZW1lLFxuICAgICAgY29sb3JNb2RlID0gX3JlZjMuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfY29sb3IgPSBfcmVmNC5jb2xvcjtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgLjdweCAxLjRweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAxLjlweCA0cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDQuNXB4IDEwcHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbi8qKlxuICogYm90dG9tU2hhZG93TWVkaXVtXG4gKi9cblxuZXhwb3J0IHZhciBldWlTaGFkb3dNZWRpdW0gPSBmdW5jdGlvbiBldWlTaGFkb3dNZWRpdW0oX3JlZjUpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZjUuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmNS5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWY2ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWY2LmNvbG9yLFxuICAgICAgcHJvcGVydHkgPSBfcmVmNi5wcm9wZXJ0eTtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgdmFyIGFycmF5ID0gW1wiMCAuOXB4IDRweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDgsIGNvbG9yTW9kZSkpLCBcIjAgMi42cHggOHB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNiwgY29sb3JNb2RlKSksIFwiMCA1LjdweCAxMnB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSksIFwiMCAxNXB4IDE1cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpKV07XG5cbiAgaWYgKHByb3BlcnR5ID09PSAnZmlsdGVyJykge1xuICAgIHJldHVybiBcImZpbHRlcjogXCIuY29uY2F0KGFycmF5LnJlZHVjZShmdW5jdGlvbiAodiwgaSkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHYsIFwiIGRyb3Atc2hhZG93KFwiKS5jb25jYXQoaSwgXCIpXCIpO1xuICAgIH0sICcnKSwgXCI7XCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcImJveC1zaGFkb3c6IFwiLmNvbmNhdChhcnJheS5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiB2O1xuICAgIH0pLCBcIjtcIik7XG4gIH1cbn07XG4vKipcbiAqIGJvdHRvbVNoYWRvd1xuICovXG5cbmV4cG9ydCB2YXIgZXVpU2hhZG93TGFyZ2UgPSBmdW5jdGlvbiBldWlTaGFkb3dMYXJnZShfcmVmNykge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmNy5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWY3LmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2NvbG9yID0gX3JlZjguY29sb3I7XG5cbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDFweCA1cHggXCIuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjEsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAzLjZweCAxM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDcsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCA4LjRweCAyM3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAyM3B4IDM1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNSwgY29sb3JNb2RlKSwgXCI7XFxuXCIpO1xufTtcbi8qKlxuICogYm90dG9tU2hhZG93TGFyZ2VcbiAqL1xuXG5leHBvcnQgdmFyIGV1aVNoYWRvd1hMYXJnZSA9IGZ1bmN0aW9uIGV1aVNoYWRvd1hMYXJnZShfcmVmOSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmOS5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWY5LmNvbG9yTW9kZTtcblxuICB2YXIgX3JlZjEwID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9jb2xvciA9IF9yZWYxMC5jb2xvcixcbiAgICAgIHJldmVyc2UgPSBfcmVmMTAucmV2ZXJzZTtcblxuICB2YXIgY29sb3IgPSBfY29sb3IgfHwgZXVpVGhlbWUuY29sb3JzLnNoYWRvdztcbiAgcmV0dXJuIFwiXFxuYm94LXNoYWRvdzpcXG4gIDAgXCIuY29uY2F0KHJldmVyc2UgPyAnLScgOiAnJywgXCIyLjdweCA5cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4xMywgY29sb3JNb2RlKSwgXCIsXFxuICAwIFwiKS5jb25jYXQocmV2ZXJzZSA/ICctJyA6ICcnLCBcIjkuNHB4IDI0cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wOSwgY29sb3JNb2RlKSwgXCIsXFxuICAwIFwiKS5jb25jYXQocmV2ZXJzZSA/ICctJyA6ICcnLCBcIjIxLjhweCA0M3B4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDgsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG4vKipcbiAqIHNsaWdodFNoYWRvd0hvdmVyXG4gKiBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgb25seSB1c2VkIGJ5IHBhbmVscy9jYXJkcyBpbiB0aGUgQW1zdGVyZGFtIHRoZW1lLCBtb3ZlIHRoZXJlXG4gKi9cblxuZXhwb3J0IHZhciBldWlTbGlnaHRTaGFkb3dIb3ZlciA9IGZ1bmN0aW9uIGV1aVNsaWdodFNoYWRvd0hvdmVyKF9yZWYxMSkge1xuICB2YXIgZXVpVGhlbWUgPSBfcmVmMTEuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmMTEuY29sb3JNb2RlO1xuXG4gIHZhciBfcmVmMTIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX2NvbG9yID0gX3JlZjEyLmNvbG9yO1xuXG4gIHZhciBjb2xvciA9IF9jb2xvciB8fCBldWlUaGVtZS5jb2xvcnMuc2hhZG93O1xuICByZXR1cm4gXCJcXG5ib3gtc2hhZG93OlxcbiAgMCAxcHggNXB4IFwiLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4xLCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMy42cHggMTNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA3LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgOC40cHggMjNweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA2LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMjNweCAzNXB4IFwiKS5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDUsIGNvbG9yTW9kZSksIFwiO1xcblwiKTtcbn07XG5leHBvcnQgdmFyIHVzZUV1aVNsaWdodFNoYWRvd0hvdmVyID0gZnVuY3Rpb24gdXNlRXVpU2xpZ2h0U2hhZG93SG92ZXIoY29sb3IpIHtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTbGlnaHRTaGFkb3dIb3ZlcihldWlUaGVtZUNvbnRleHQsIHtcbiAgICBjb2xvcjogY29sb3JcbiAgfSk7XG59O1xuLyoqXG4gKiBib3R0b21TaGFkb3dGbGF0XG4gKlxuICogU2ltaWxhciB0byBzaGFkb3cgbWVkaXVtIGJ1dCB3aXRob3V0IHRoZSBib3R0b20gZGVwdGguXG4gKiBVc2VmdWwgZm9yIHBvcG92ZXJzIHRoYXQgZHJvcCBVUCByYXRoZXIgdGhhbiBET1dOLlxuICovXG5cbmV4cG9ydCB2YXIgZXVpU2hhZG93RmxhdCA9IGZ1bmN0aW9uIGV1aVNoYWRvd0ZsYXQoX3JlZjEzKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYxMy5ldWlUaGVtZSxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYxMy5jb2xvck1vZGU7XG5cbiAgdmFyIF9yZWYxNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBfY29sb3IgPSBfcmVmMTQuY29sb3I7XG5cbiAgdmFyIGNvbG9yID0gX2NvbG9yIHx8IGV1aVRoZW1lLmNvbG9ycy5zaGFkb3c7XG4gIHJldHVybiBcIlxcbmJveC1zaGFkb3c6XFxuICAwIDAgLjhweCBcIi5jb25jYXQoZ2V0U2hhZG93Q29sb3IoY29sb3IsIDAuMDYsIGNvbG9yTW9kZSksIFwiLFxcbiAgMCAwIDJweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjA0LCBjb2xvck1vZGUpLCBcIixcXG4gIDAgMCA1cHggXCIpLmNvbmNhdChnZXRTaGFkb3dDb2xvcihjb2xvciwgMC4wNCwgY29sb3JNb2RlKSwgXCIsXFxuICAwIDAgMTdweCBcIikuY29uY2F0KGdldFNoYWRvd0NvbG9yKGNvbG9yLCAwLjAzLCBjb2xvck1vZGUpLCBcIjtcXG5cIik7XG59O1xuZXhwb3J0IHZhciB1c2VFdWlTaGFkb3dGbGF0ID0gZnVuY3Rpb24gdXNlRXVpU2hhZG93RmxhdChjb2xvcikge1xuICB2YXIgZXVpVGhlbWVDb250ZXh0ID0gdXNlRXVpVGhlbWUoKTtcbiAgcmV0dXJuIGV1aVNoYWRvd0ZsYXQoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTtcbmV4cG9ydCB2YXIgZXVpU2hhZG93ID0gZnVuY3Rpb24gZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCkge1xuICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2wnO1xuXG4gIHZhciBfcmVmMTUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9LFxuICAgICAgY29sb3IgPSBfcmVmMTUuY29sb3I7XG5cbiAgc3dpdGNoIChzaXplKSB7XG4gICAgY2FzZSAneHMnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1hTbWFsbChldWlUaGVtZUNvbnRleHQsIHtcbiAgICAgICAgY29sb3I6IGNvbG9yXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIGV1aVNoYWRvd1NtYWxsKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93TWVkaXVtKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbCc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93TGFyZ2UoZXVpVGhlbWVDb250ZXh0LCB7XG4gICAgICAgIGNvbG9yOiBjb2xvclxuICAgICAgfSk7XG5cbiAgICBjYXNlICd4bCc6XG4gICAgICByZXR1cm4gZXVpU2hhZG93WExhcmdlKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgICBjb2xvcjogY29sb3JcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUud2FybignUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzaXplIG9wdGlvbiB0byB1c2VFdWlTaGFkb3cnKTtcbiAgICAgIHJldHVybiAnJztcbiAgfVxufTtcbmV4cG9ydCB2YXIgdXNlRXVpU2hhZG93ID0gZnVuY3Rpb24gdXNlRXVpU2hhZG93KCkge1xuICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ2wnO1xuICB2YXIgY29sb3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGV1aVRoZW1lQ29udGV4dCA9IHVzZUV1aVRoZW1lKCk7XG4gIHJldHVybiBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCBzaXplLCB7XG4gICAgY29sb3I6IGNvbG9yXG4gIH0pO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY29sb3JcIiwgXCJjbGFzc05hbWVcIiwgXCJocmVmXCIsIFwiZXh0ZXJuYWxcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJ0eXBlXCIsIFwib25DbGlja1wiLCBcImRpc2FibGVkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0LCB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUxpbmtTdHlsZXMgfSBmcm9tICcuL2xpbmsuc3R5bGVzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIENPTE9SUyA9IFsncHJpbWFyeScsICdzdWJkdWVkJywgJ3N1Y2Nlc3MnLCAnYWNjZW50JywgJ2RhbmdlcicsICd3YXJuaW5nJywgJ3RleHQnLCAnZ2hvc3QnXTtcbnZhciBFdWlMaW5rID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdwcmltYXJ5JyA6IF9yZWYkY29sb3IsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICBleHRlcm5hbCA9IF9yZWYuZXh0ZXJuYWwsXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIHJlbCA9IF9yZWYucmVsLFxuICAgICAgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2J1dHRvbicgOiBfcmVmJHR5cGUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgX2Rpc2FibGVkID0gX3JlZi5kaXNhYmxlZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpTGlua1N0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUxpbmtdO1xuICB2YXIgY3NzU2NyZWVuUmVhZGVyVGV4dFN0eWxlcyA9IFtzdHlsZXMuZXVpTGlua19fc2NyZWVuUmVhZGVyVGV4dF07XG4gIHZhciBjc3NFeHRlcm5hbExpbmtJY29uU3R5bGVzID0gW3N0eWxlcy5ldWlMaW5rX19leHRlcm5hbEljb25dO1xuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG5cbiAgdmFyIG5ld1RhcmdldFNjcmVlbnJlYWRlclRleHQgPSBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIHtcbiAgICBjc3M6IGNzc1NjcmVlblJlYWRlclRleHRTdHlsZXNcbiAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpTGluay5uZXdUYXJnZXQuc2NyZWVuUmVhZGVyT25seVRleHRcIixcbiAgICBkZWZhdWx0OiBcIihvcGVucyBpbiBhIG5ldyB0YWIgb3Igd2luZG93KVwiXG4gIH0pKSk7XG5cbiAgdmFyIGV4dGVybmFsTGlua0ljb24gPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICBcImFyaWEtbGFiZWxcIjogdXNlRXVpSTE4bignZXVpTGluay5leHRlcm5hbC5hcmlhTGFiZWwnLCAnRXh0ZXJuYWwgbGluaycpLFxuICAgIHNpemU6IFwic1wiLFxuICAgIGNzczogY3NzRXh0ZXJuYWxMaW5rSWNvblN0eWxlcyxcbiAgICB0eXBlOiBcInBvcG91dFwiXG4gIH0pO1xuXG4gIGlmIChocmVmID09PSB1bmRlZmluZWQgfHwgIWlzSHJlZlZhbGlkKSB7XG4gICAgdmFyIGJ1dHRvblByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aUxpbmsnLCBjbGFzc05hbWUpLFxuICAgICAgY3NzOiBbY3NzU3R5bGVzLCBkaXNhYmxlZCA/IFtzdHlsZXMuZGlzYWJsZWRdIDogc3R5bGVzW2NvbG9yXV0sXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuICAgIH0sIHJlc3QpO1xuXG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiByZWZcbiAgICB9LCBidXR0b25Qcm9wcyksIGNoaWxkcmVuKTtcbiAgfVxuXG4gIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgIGhyZWY6IGhyZWYsXG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgcmVsOiByZWxcbiAgfSk7XG5cbiAgdmFyIGFuY2hvclByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlMaW5rJywgY2xhc3NOYW1lKSxcbiAgICBjc3M6IFtjc3NTdHlsZXMsIHN0eWxlc1tjb2xvcl1dLFxuICAgIGhyZWY6IGhyZWYsXG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgb25DbGljazogb25DbGlja1xuICB9LCByZXN0KTtcblxuICB2YXIgc2hvd0V4dGVybmFsTGlua0ljb24gPSB0YXJnZXQgPT09ICdfYmxhbmsnICYmIGV4dGVybmFsICE9PSBmYWxzZSB8fCBleHRlcm5hbCA9PT0gdHJ1ZTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJhXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZlxuICB9LCBhbmNob3JQcm9wcyksIGNoaWxkcmVuLCBzaG93RXh0ZXJuYWxMaW5rSWNvbiAmJiBleHRlcm5hbExpbmtJY29uLCB0YXJnZXQgPT09ICdfYmxhbmsnICYmIG5ld1RhcmdldFNjcmVlbnJlYWRlclRleHQpO1xufSk7XG5FdWlMaW5rLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwicmVzZXRcIiwgXCJzdWJtaXRcIl0pLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzLlxuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gc2hvdyBhbiBpY29uIGluZGljYXRpbmcgdGhhdCBpdCBpcyBhbiBleHRlcm5hbCBsaW5rO1xuICAgICAqIERlZmF1bHRzIHRvIHRydWUgaWYgYHRhcmdldD1cIl9ibGFua1wiYFxuICAgICAqL1xuICBleHRlcm5hbDogUHJvcFR5cGVzLmJvb2xcbn07XG5FdWlMaW5rLmRpc3BsYXlOYW1lID0gJ0V1aUxpbmsnO1xuZXhwb3J0IHsgRXVpTGluayB9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsaWNrT3V0c2lkZURpc2FibGVzXCIsIFwiZGlzYWJsZWRcIiwgXCJyZXR1cm5Gb2N1c1wiLCBcIm5vSXNvbGF0aW9uXCIsIFwic2Nyb2xsTG9ja1wiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBGb2N1c09uIH0gZnJvbSAncmVhY3QtZm9jdXMtb24nO1xuaW1wb3J0IHsgZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb2N1c1RyYXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZvY3VzVHJhcCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGb2N1c1RyYXApO1xuXG4gIGZ1bmN0aW9uIEV1aUZvY3VzVHJhcCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRm9jdXNUcmFwKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsYXN0SW50ZXJjZXB0ZWRFdmVudFwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJwcmV2ZW50Rm9jdXNFeGl0XCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRJbml0aWFsRm9jdXNcIiwgZnVuY3Rpb24gKGluaXRpYWxGb2N1cykge1xuICAgICAgaWYgKCFpbml0aWFsRm9jdXMpIHJldHVybjtcbiAgICAgIHZhciBub2RlID0gZmluZEVsZW1lbnRCeVNlbGVjdG9yT3JSZWYoaW5pdGlhbEZvY3VzKTtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuOyAvLyBgZGF0YS1hdXRvZm9jdXNgIGlzIHBhcnQgb2YgdGhlICdyZWFjdC1mb2N1cy1vbicgQVBJXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWF1dG9mb2N1cycsICd0cnVlJyk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Nb3VzZXVwT3V0c2lkZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXMucmVtb3ZlTW91c2V1cExpc3RlbmVyKCk7IC8vIFRpbWVvdXQgZ2l2ZXMgcHJlY2VkZW5jZSB0byB0aGUgY29uc3VtZXIgdG8gaW5pdGlhdGUgY2xvc2UgaWYgaXQgaGFzIHRvZ2dsZSBiZWhhdmlvci5cbiAgICAgIC8vIE90aGVyd2lzZSB0aGlzIGV2ZW50IG1heSBvY2N1ciBmaXJzdCBhbmQgdGhlIGNvbnN1bWVyIHRvZ2dsZSB3aWxsIHJlb3BlbiB0aGUgZmx5b3V0LlxuXG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25DbGlja091LCBfdGhpcyRwcm9wcztcblxuICAgICAgICByZXR1cm4gKF90aGlzJHByb3BzJG9uQ2xpY2tPdSA9IChfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzKS5vbkNsaWNrT3V0c2lkZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkb25DbGlja091ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwcm9wcyRvbkNsaWNrT3UuY2FsbChfdGhpcyRwcm9wcywgZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhZGRNb3VzZXVwTGlzdGVuZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVNb3VzZXVwTGlzdGVuZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIF90aGlzLm9uTW91c2V1cE91dHNpZGUpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBfdGhpcy5vbk1vdXNldXBPdXRzaWRlKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYW5kbGVPdXRzaWRlQ2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DbGlja091dHNpZGUgPSBfdGhpcyRwcm9wczIub25DbGlja091dHNpZGUsXG4gICAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXMgPSBfdGhpcyRwcm9wczIuY2xpY2tPdXRzaWRlRGlzYWJsZXMsXG4gICAgICAgICAgY2xvc2VPbk1vdXNldXAgPSBfdGhpcyRwcm9wczIuY2xvc2VPbk1vdXNldXA7XG5cbiAgICAgIGlmIChjbGlja091dHNpZGVEaXNhYmxlcykge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzQmVlbkRpc2FibGVkQnlDbGljazogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9uQ2xpY2tPdXRzaWRlKSB7XG4gICAgICAgIGNsb3NlT25Nb3VzZXVwID8gX3RoaXMuYWRkTW91c2V1cExpc3RlbmVyKCkgOiBvbkNsaWNrT3V0c2lkZShldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRm9jdXNUcmFwLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbEZvY3VzKHRoaXMucHJvcHMuaW5pdGlhbEZvY3VzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMuZGlzYWJsZWQgPT09IHRydWUgJiYgdGhpcy5wcm9wcy5kaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRpZC11cGRhdGUtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0JlZW5EaXNhYmxlZEJ5Q2xpY2s6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMucmVtb3ZlTW91c2V1cExpc3RlbmVyKCk7XG4gICAgfSAvLyBQcm9ncmFtbWF0aWNhbGx5IHNldHMgZm9jdXMgb24gYSBuZXN0ZWQgRE9NIG5vZGU7IG9wdGlvbmFsXG5cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xpY2tPdXRzaWRlRGlzYWJsZXMgPSBfdGhpcyRwcm9wczMuY2xpY2tPdXRzaWRlRGlzYWJsZXMsXG4gICAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wczMuZGlzYWJsZWQsXG4gICAgICAgICAgcmV0dXJuRm9jdXMgPSBfdGhpcyRwcm9wczMucmV0dXJuRm9jdXMsXG4gICAgICAgICAgbm9Jc29sYXRpb24gPSBfdGhpcyRwcm9wczMubm9Jc29sYXRpb24sXG4gICAgICAgICAgc2Nyb2xsTG9jayA9IF90aGlzJHByb3BzMy5zY3JvbGxMb2NrLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgaXNEaXNhYmxlZCA9IGRpc2FibGVkIHx8IHRoaXMuc3RhdGUuaGFzQmVlbkRpc2FibGVkQnlDbGljaztcblxuICAgICAgdmFyIGZvY3VzT25Qcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7XG4gICAgICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyxcbiAgICAgICAgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLFxuICAgICAgICBzY3JvbGxMb2NrOiBzY3JvbGxMb2NrLFxuICAgICAgICBlbmFibGVkOiAhaXNEaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIHt9LCB7XG4gICAgICAgIG9uQ2xpY2tPdXRzaWRlOiB0aGlzLmhhbmRsZU91dHNpZGVDbGlja1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZvY3VzT24sIGZvY3VzT25Qcm9wcywgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGb2N1c1RyYXA7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGb2N1c1RyYXAsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY2xpY2tPdXRzaWRlRGlzYWJsZXM6IGZhbHNlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIHJldHVybkZvY3VzOiB0cnVlLFxuICBub0lzb2xhdGlvbjogdHJ1ZSxcbiAgc2Nyb2xsTG9jazogZmFsc2Vcbn0pO1xuXG5FdWlGb2N1c1RyYXAucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogV2hldGhlciBgb25DbGlja091dHNpZGVgIHNob3VsZCBiZSBjYWxsZWQgb24gbW91c2V1cCBpbnN0ZWFkIG9mIG1vdXNlZG93bi5cbiAgICAgKiBUaGlzIGZsYWcgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCBvdXRzaWRlIHRvZ2dsZSBidXR0b25zIGJ5IGRlbGF5aW5nIHRoZSBjbG9zaW5nIGNsaWNrIGNhbGxiYWNrLlxuICAgICAqL1xuICBjbG9zZU9uTW91c2V1cDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ2xpY2tpbmcgb3V0c2lkZSB0aGUgdHJhcCBhcmVhIHdpbGwgZGlzYWJsZSB0aGUgdHJhcFxuICAgICAqL1xuICBjbGlja091dHNpZGVEaXNhYmxlczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIGVsZW1lbnQgdGhhdCB3aWxsIGdldCBmb2N1cyB3aGVuIHRoZSB0cmFwIGlzIGluaXRpYXRlZFxuICAgICAqL1xuICBpbml0aWFsRm9jdXM6IFByb3BUeXBlcy5hbnksXG4gIHN0eWxlOiBQcm9wVHlwZXMuYW55LFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcbiAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcbiAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICB0W3BdID0gc1twXTtcbiAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICB9XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcbiAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XG4gIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XG4gIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xuICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcbiAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xuICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcbiAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xuICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XG4gICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xuICAgICAgfVxuICB9XG4gIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcbiAgZG9uZSA9IHRydWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xuICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcbiAgfVxuICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcbiAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gIG9bazJdID0gbVtrXTtcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcbiAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XG4gIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxuICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xuICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcbiAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgcltrXSA9IGFbal07XG4gIHJldHVybiByO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcbiAgdmFyIGksIHA7XG4gIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XG4gIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XG4gIHJldHVybiBjb29rZWQ7XG59O1xuXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2UsIGlubmVyO1xuICAgIGlmIChhc3luYykge1xuICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgICAgaWYgKGFzeW5jKSBpbm5lciA9IGRpc3Bvc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcbiAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsgdHJ5IHsgaW5uZXIuY2FsbCh0aGlzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IH0gfTtcbiAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xuICB9XG4gIGVsc2UgaWYgKGFzeW5jKSB7XG4gICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgdmFyIHIsIHMgPSAwO1xuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHdoaWxlIChyID0gZW52LnN0YWNrLnBvcCgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXIuYXN5bmMgJiYgcyA9PT0gMSkgcmV0dXJuIHMgPSAwLCBlbnYuc3RhY2sucHVzaChyKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0KTtcbiAgICAgICAgaWYgKHIuZGlzcG9zZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSByLmRpc3Bvc2UuY2FsbChyLnZhbHVlKTtcbiAgICAgICAgICBpZiAoci5hc3luYykgcmV0dXJuIHMgfD0gMiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgcyB8PSAxO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbn07XG4iLCAiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZvY3VzT24gYXMgUmVhY3RGb2N1c09uIH0gZnJvbSAnLi9VSSc7XG5pbXBvcnQgU2lkZUNhciBmcm9tICcuL3NpZGVjYXInO1xudmFyIFJlcXVpcmVTaWRlQ2FyID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgX19hc3NpZ24oe30sIHByb3BzKSk7XG59O1xuZXhwb3J0IHZhciBGb2N1c09uID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdEZvY3VzT24sIF9fYXNzaWduKHt9LCBwcm9wcywgeyByZWY6IHJlZiwgc2lkZUNhcjogUmVxdWlyZVNpZGVDYXIgfSkpOyB9KTtcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGwgfSBmcm9tICdyZWFjdC1yZW1vdmUtc2Nyb2xsL1VJJztcbmltcG9ydCBSZWFjdEZvY3VzTG9jayBmcm9tICdyZWFjdC1mb2N1cy1sb2NrL1VJJztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBQUkVWRU5UX1NDUk9MTCA9IHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9O1xuZXhwb3J0IHZhciBGb2N1c09uID0gUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHBhcmVudFJlZikge1xuICAgIHZhciBfYSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKSwgbG9ja1Byb3BzID0gX2FbMF0sIHNldExvY2tQcm9wcyA9IF9hWzFdO1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLCBhdXRvRm9jdXMgPSBwcm9wcy5hdXRvRm9jdXMsIHNoYXJkcyA9IHByb3BzLnNoYXJkcywgY3Jvc3NGcmFtZSA9IHByb3BzLmNyb3NzRnJhbWUsIF9iID0gcHJvcHMuZW5hYmxlZCwgZW5hYmxlZCA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2IsIF9jID0gcHJvcHMuc2Nyb2xsTG9jaywgc2Nyb2xsTG9jayA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2MsIF9kID0gcHJvcHMuZm9jdXNMb2NrLCBmb2N1c0xvY2sgPSBfZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9kLCBfZSA9IHByb3BzLnJldHVybkZvY3VzLCByZXR1cm5Gb2N1cyA9IF9lID09PSB2b2lkIDAgPyB0cnVlIDogX2UsIGluZXJ0ID0gcHJvcHMuaW5lcnQsIGFsbG93UGluY2hab29tID0gcHJvcHMuYWxsb3dQaW5jaFpvb20sIHNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUsIHNob3VsZElnbm9yZSA9IHByb3BzLnNob3VsZElnbm9yZSwgcHJldmVudFNjcm9sbE9uRm9jdXMgPSBwcm9wcy5wcmV2ZW50U2Nyb2xsT25Gb2N1cywgc3R5bGUgPSBwcm9wcy5zdHlsZSwgYXMgPSBwcm9wcy5hcywgZ2FwTW9kZSA9IHByb3BzLmdhcE1vZGUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiYXV0b0ZvY3VzXCIsIFwic2hhcmRzXCIsIFwiY3Jvc3NGcmFtZVwiLCBcImVuYWJsZWRcIiwgXCJzY3JvbGxMb2NrXCIsIFwiZm9jdXNMb2NrXCIsIFwicmV0dXJuRm9jdXNcIiwgXCJpbmVydFwiLCBcImFsbG93UGluY2hab29tXCIsIFwic2lkZUNhclwiLCBcImNsYXNzTmFtZVwiLCBcInNob3VsZElnbm9yZVwiLCBcInByZXZlbnRTY3JvbGxPbkZvY3VzXCIsIFwic3R5bGVcIiwgXCJhc1wiLCBcImdhcE1vZGVcIl0pO1xuICAgIHZhciBTaWRlQ2FyID0gc2lkZUNhcjtcbiAgICB2YXIgb25BY3RpdmF0aW9uID0gbG9ja1Byb3BzLm9uQWN0aXZhdGlvbiwgb25EZWFjdGl2YXRpb24gPSBsb2NrUHJvcHMub25EZWFjdGl2YXRpb24sIHJlc3RQcm9wcyA9IF9fcmVzdChsb2NrUHJvcHMsIFtcIm9uQWN0aXZhdGlvblwiLCBcIm9uRGVhY3RpdmF0aW9uXCJdKTtcbiAgICB2YXIgYXBwbGllZExvY2tQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0UHJvcHMpLCB7IGFzOiBhcyxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBzaWRlQ2FyOiBzaWRlQ2FyLFxuICAgICAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICAgICAgYWxsb3dQaW5jaFpvb206IGFsbG93UGluY2hab29tLFxuICAgICAgICBnYXBNb2RlOiBnYXBNb2RlLFxuICAgICAgICBpbmVydDogaW5lcnQsIGVuYWJsZWQ6IGVuYWJsZWQgJiYgc2Nyb2xsTG9jayB9KTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3RGb2N1c0xvY2ssIHsgcmVmOiBwYXJlbnRSZWYsIHNpZGVDYXI6IHNpZGVDYXIsIGRpc2FibGVkOiAhKGxvY2tQcm9wcyAmJiBlbmFibGVkICYmIGZvY3VzTG9jayksIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cywgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsIHNoYXJkczogc2hhcmRzLCBjcm9zc0ZyYW1lOiBjcm9zc0ZyYW1lLCBvbkFjdGl2YXRpb246IG9uQWN0aXZhdGlvbiwgb25EZWFjdGl2YXRpb246IG9uRGVhY3RpdmF0aW9uLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgd2hpdGVMaXN0OiBzaG91bGRJZ25vcmUsIGxvY2tQcm9wczogYXBwbGllZExvY2tQcm9wcywgZm9jdXNPcHRpb25zOiBwcmV2ZW50U2Nyb2xsT25Gb2N1cyA/IFBSRVZFTlRfU0NST0xMIDogdW5kZWZpbmVkLCBhczogUmVtb3ZlU2Nyb2xsIH0sIGNoaWxkcmVuKSxcbiAgICAgICAgZW5hYmxlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCBfX2Fzc2lnbih7fSwgcmVzdCwgeyBzaWRlQ2FyOiBlZmZlY3RDYXIsIHNldExvY2tQcm9wczogc2V0TG9ja1Byb3BzLCBzaGFyZHM6IHNoYXJkcyB9KSkpKSk7XG59KTtcbmV4cG9ydCAqIGZyb20gJy4vcmVFeHBvcnRzJztcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmdWxsV2lkdGhDbGFzc05hbWUsIHplcm9SaWdodENsYXNzTmFtZSB9IGZyb20gJ3JlYWN0LXJlbW92ZS1zY3JvbGwtYmFyL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB1c2VNZXJnZVJlZnMgfSBmcm9tICd1c2UtY2FsbGJhY2stcmVmJztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBub3RoaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybjtcbn07XG4vKipcbiAqIFJlbW92ZXMgc2Nyb2xsYmFyIGZyb20gdGhlIHBhZ2UgYW5kIGNvbnRhaW4gdGhlIHNjcm9sbCB3aXRoaW4gdGhlIExvY2tcbiAqL1xudmFyIFJlbW92ZVNjcm9sbCA9IFJlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCBwYXJlbnRSZWYpIHtcbiAgICB2YXIgcmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAgIHZhciBfYSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICAgICAgb25TY3JvbGxDYXB0dXJlOiBub3RoaW5nLFxuICAgICAgICBvbldoZWVsQ2FwdHVyZTogbm90aGluZyxcbiAgICAgICAgb25Ub3VjaE1vdmVDYXB0dXJlOiBub3RoaW5nLFxuICAgIH0pLCBjYWxsYmFja3MgPSBfYVswXSwgc2V0Q2FsbGJhY2tzID0gX2FbMV07XG4gICAgdmFyIGZvcndhcmRQcm9wcyA9IHByb3BzLmZvcndhcmRQcm9wcywgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiwgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLCByZW1vdmVTY3JvbGxCYXIgPSBwcm9wcy5yZW1vdmVTY3JvbGxCYXIsIGVuYWJsZWQgPSBwcm9wcy5lbmFibGVkLCBzaGFyZHMgPSBwcm9wcy5zaGFyZHMsIHNpZGVDYXIgPSBwcm9wcy5zaWRlQ2FyLCBub0lzb2xhdGlvbiA9IHByb3BzLm5vSXNvbGF0aW9uLCBpbmVydCA9IHByb3BzLmluZXJ0LCBhbGxvd1BpbmNoWm9vbSA9IHByb3BzLmFsbG93UGluY2hab29tLCBfYiA9IHByb3BzLmFzLCBDb250YWluZXIgPSBfYiA9PT0gdm9pZCAwID8gJ2RpdicgOiBfYiwgZ2FwTW9kZSA9IHByb3BzLmdhcE1vZGUsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImZvcndhcmRQcm9wc1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwicmVtb3ZlU2Nyb2xsQmFyXCIsIFwiZW5hYmxlZFwiLCBcInNoYXJkc1wiLCBcInNpZGVDYXJcIiwgXCJub0lzb2xhdGlvblwiLCBcImluZXJ0XCIsIFwiYWxsb3dQaW5jaFpvb21cIiwgXCJhc1wiLCBcImdhcE1vZGVcIl0pO1xuICAgIHZhciBTaWRlQ2FyID0gc2lkZUNhcjtcbiAgICB2YXIgY29udGFpbmVyUmVmID0gdXNlTWVyZ2VSZWZzKFtyZWYsIHBhcmVudFJlZl0pO1xuICAgIHZhciBjb250YWluZXJQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0KSwgY2FsbGJhY2tzKTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIGVuYWJsZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZUNhciwgeyBzaWRlQ2FyOiBlZmZlY3RDYXIsIHJlbW92ZVNjcm9sbEJhcjogcmVtb3ZlU2Nyb2xsQmFyLCBzaGFyZHM6IHNoYXJkcywgbm9Jc29sYXRpb246IG5vSXNvbGF0aW9uLCBpbmVydDogaW5lcnQsIHNldENhbGxiYWNrczogc2V0Q2FsbGJhY2tzLCBhbGxvd1BpbmNoWm9vbTogISFhbGxvd1BpbmNoWm9vbSwgbG9ja1JlZjogcmVmLCBnYXBNb2RlOiBnYXBNb2RlIH0pKSxcbiAgICAgICAgZm9yd2FyZFByb3BzID8gKFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSwgX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbnRhaW5lclByb3BzKSwgeyByZWY6IGNvbnRhaW5lclJlZiB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGFpbmVyLCBfX2Fzc2lnbih7fSwgY29udGFpbmVyUHJvcHMsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWUsIHJlZjogY29udGFpbmVyUmVmIH0pLCBjaGlsZHJlbikpKSk7XG59KTtcblJlbW92ZVNjcm9sbC5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICByZW1vdmVTY3JvbGxCYXI6IHRydWUsXG4gICAgaW5lcnQ6IGZhbHNlLFxufTtcblJlbW92ZVNjcm9sbC5jbGFzc05hbWVzID0ge1xuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoQ2xhc3NOYW1lLFxuICAgIHplcm9SaWdodDogemVyb1JpZ2h0Q2xhc3NOYW1lLFxufTtcbmV4cG9ydCB7IFJlbW92ZVNjcm9sbCB9O1xuIiwgImV4cG9ydCB2YXIgemVyb1JpZ2h0Q2xhc3NOYW1lID0gJ3JpZ2h0LXNjcm9sbC1iYXItcG9zaXRpb24nO1xuZXhwb3J0IHZhciBmdWxsV2lkdGhDbGFzc05hbWUgPSAnd2lkdGgtYmVmb3JlLXNjcm9sbC1iYXInO1xuZXhwb3J0IHZhciBub1Njcm9sbGJhcnNDbGFzc05hbWUgPSAnd2l0aC1zY3JvbGwtYmFycy1oaWRkZW4nO1xuLyoqXG4gKiBOYW1lIG9mIGEgQ1NTIHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIGFtb3VudCBvZiBcImhpZGRlblwiIHNjcm9sbGJhclxuICogISBtaWdodCBiZSB1bmRlZmluZWQgISB1c2Ugd2lsbCBmYWxsYmFjayFcbiAqL1xuZXhwb3J0IHZhciByZW1vdmVkQmFyU2l6ZVZhcmlhYmxlID0gJy0tcmVtb3ZlZC1ib2R5LXNjcm9sbC1iYXItc2l6ZSc7XG4iLCAiLyoqXG4gKiBBc3NpZ25zIGEgdmFsdWUgZm9yIGEgZ2l2ZW4gcmVmLCBubyBtYXR0ZXIgb2YgdGhlIHJlZiBmb3JtYXRcbiAqIEBwYXJhbSB7UmVmT2JqZWN0fSByZWYgLSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIHJlZiBvYmplY3RcbiAqIEBwYXJhbSB2YWx1ZSAtIGEgbmV3IHZhbHVlXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L3VzZS1jYWxsYmFjay1yZWYjYXNzaWducmVmXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmVmT2JqZWN0ID0gdXNlUmVmKCk7XG4gKiBjb25zdCByZWZGbiA9IChyZWYpID0+IHsuLi4ufVxuICpcbiAqIGFzc2lnblJlZihyZWZPYmplY3QsIFwicmVmVmFsdWVcIik7XG4gKiBhc3NpZ25SZWYocmVmRm4sIFwicmVmVmFsdWVcIik7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25SZWYocmVmLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlZih2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJlZikge1xuICAgICAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVmO1xufVxuIiwgImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBjcmVhdGVzIGEgTXV0YWJsZVJlZiB3aXRoIHJlZiBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBpbml0aWFsIHJlZiB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBhIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHZhbHVlIGNoYW5nZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcmVmID0gdXNlQ2FsbGJhY2tSZWYoMCwgKG5ld1ZhbHVlLCBvbGRWYWx1ZSkgPT4gY29uc29sZS5sb2cob2xkVmFsdWUsICctPicsIG5ld1ZhbHVlKTtcbiAqIHJlZi5jdXJyZW50ID0gMTtcbiAqIC8vIHByaW50cyAwIC0+IDFcbiAqXG4gKiBAc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VyZWZcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS91c2UtY2FsbGJhY2stcmVmI3VzZWNhbGxiYWNrcmVmLS0tdG8tcmVwbGFjZS1yZWFjdHVzZXJlZlxuICogQHJldHVybnMge011dGFibGVSZWZPYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDYWxsYmFja1JlZihpbml0aWFsVmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVN0YXRlKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgICAgIC8vIHZhbHVlXG4gICAgICAgIHZhbHVlOiBpbml0aWFsVmFsdWUsXG4gICAgICAgIC8vIGxhc3QgY2FsbGJhY2tcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICAvLyBcIm1lbW9pemVkXCIgcHVibGljIGludGVyZmFjZVxuICAgICAgICBmYWNhZGU6IHtcbiAgICAgICAgICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWYudmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0IGN1cnJlbnQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IHJlZi52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobGFzdCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5jYWxsYmFjayh2YWx1ZSwgbGFzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KTsgfSlbMF07XG4gICAgLy8gdXBkYXRlIGNhbGxiYWNrXG4gICAgcmVmLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgcmV0dXJuIHJlZi5mYWNhZGU7XG59XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgYXNzaWduUmVmIH0gZnJvbSAnLi9hc3NpZ25SZWYnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2tSZWYgfSBmcm9tICcuL3VzZVJlZic7XG52YXIgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0O1xudmFyIGN1cnJlbnRWYWx1ZXMgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBNZXJnZXMgdHdvIG9yIG1vcmUgcmVmcyB0b2dldGhlciBwcm92aWRpbmcgYSBzaW5nbGUgaW50ZXJmYWNlIHRvIHNldCB0aGVpciB2YWx1ZVxuICogQHBhcmFtIHtSZWZPYmplY3R8UmVmfSByZWZzXG4gKiBAcmV0dXJucyB7TXV0YWJsZVJlZk9iamVjdH0gLSBhIG5ldyByZWYsIHdoaWNoIHRyYW5zbGF0ZXMgYWxsIGNoYW5nZXMgdG8ge3JlZnN9XG4gKlxuICogQHNlZSB7QGxpbmsgbWVyZ2VSZWZzfSBhIHZlcnNpb24gd2l0aG91dCBidWl0LWluIG1lbW9pemF0aW9uXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvdXNlLWNhbGxiYWNrLXJlZiN1c2VtZXJnZXJlZnNcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBDb21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XG4gKiAgIGNvbnN0IG93blJlZiA9IHVzZVJlZigpO1xuICogICBjb25zdCBkb21SZWYgPSB1c2VNZXJnZVJlZnMoW3JlZiwgb3duUmVmXSk7IC8vIFx1RDgzRFx1REM0OCBtZXJnZSB0b2dldGhlclxuICogICByZXR1cm4gPGRpdiByZWY9e2RvbVJlZn0+Li4uPC9kaXY+XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZXJnZVJlZnMocmVmcywgZGVmYXVsdFZhbHVlKSB7XG4gICAgdmFyIGNhbGxiYWNrUmVmID0gdXNlQ2FsbGJhY2tSZWYoZGVmYXVsdFZhbHVlIHx8IG51bGwsIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICByZXR1cm4gcmVmcy5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHsgcmV0dXJuIGFzc2lnblJlZihyZWYsIG5ld1ZhbHVlKTsgfSk7XG4gICAgfSk7XG4gICAgLy8gaGFuZGxlIHJlZnMgY2hhbmdlcyAtIGFkZGVkIG9yIHJlbW92ZWRcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gY3VycmVudFZhbHVlcy5nZXQoY2FsbGJhY2tSZWYpO1xuICAgICAgICBpZiAob2xkVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBwcmV2UmVmc18xID0gbmV3IFNldChvbGRWYWx1ZSk7XG4gICAgICAgICAgICB2YXIgbmV4dFJlZnNfMSA9IG5ldyBTZXQocmVmcyk7XG4gICAgICAgICAgICB2YXIgY3VycmVudF8xID0gY2FsbGJhY2tSZWYuY3VycmVudDtcbiAgICAgICAgICAgIHByZXZSZWZzXzEuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0UmVmc18xLmhhcyhyZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblJlZihyZWYsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbmV4dFJlZnNfMS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZSZWZzXzEuaGFzKHJlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduUmVmKHJlZiwgY3VycmVudF8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50VmFsdWVzLnNldChjYWxsYmFja1JlZiwgcmVmcyk7XG4gICAgfSwgW3JlZnNdKTtcbiAgICByZXR1cm4gY2FsbGJhY2tSZWY7XG59XG4iLCAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgIHRbcF0gPSBzW3BdO1xuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgIH1cbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cbiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XG4gICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xuICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XG4gICAgICB9XG4gIH1cbiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xuICBkb25lID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XG4gIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xuICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xuICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XG4gIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xuICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkLlwiKTtcbiAgICB2YXIgZGlzcG9zZSwgaW5uZXI7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICBpZiAoIVN5bWJvbC5hc3luY0Rpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuYXN5bmNEaXNwb3NlXTtcbiAgICB9XG4gICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgIGRpc3Bvc2UgPSB2YWx1ZVtTeW1ib2wuZGlzcG9zZV07XG4gICAgICBpZiAoYXN5bmMpIGlubmVyID0gZGlzcG9zZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xuICAgIGlmIChpbm5lcikgZGlzcG9zZSA9IGZ1bmN0aW9uKCkgeyB0cnkgeyBpbm5lci5jYWxsKHRoaXMpOyB9IGNhdGNoIChlKSB7IHJldHVybiBQcm9taXNlLnJlamVjdChlKTsgfSB9O1xuICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XG4gIH1cbiAgZWxzZSBpZiAoYXN5bmMpIHtcbiAgICBlbnYuc3RhY2sucHVzaCh7IGFzeW5jOiB0cnVlIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIF9TdXBwcmVzc2VkRXJyb3IgPSB0eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xuICBmdW5jdGlvbiBmYWlsKGUpIHtcbiAgICBlbnYuZXJyb3IgPSBlbnYuaGFzRXJyb3IgPyBuZXcgX1N1cHByZXNzZWRFcnJvcihlLCBlbnYuZXJyb3IsIFwiQW4gZXJyb3Igd2FzIHN1cHByZXNzZWQgZHVyaW5nIGRpc3Bvc2FsLlwiKSA6IGU7XG4gICAgZW52Lmhhc0Vycm9yID0gdHJ1ZTtcbiAgfVxuICB2YXIgciwgcyA9IDA7XG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgd2hpbGUgKHIgPSBlbnYuc3RhY2sucG9wKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghci5hc3luYyAmJiBzID09PSAxKSByZXR1cm4gcyA9IDAsIGVudi5zdGFjay5wdXNoKHIpLCBQcm9taXNlLnJlc29sdmUoKS50aGVuKG5leHQpO1xuICAgICAgICBpZiAoci5kaXNwb3NlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IHIuZGlzcG9zZS5jYWxsKHIudmFsdWUpO1xuICAgICAgICAgIGlmIChyLmFzeW5jKSByZXR1cm4gcyB8PSAyLCBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKG5leHQsIGZ1bmN0aW9uKGUpIHsgZmFpbChlKTsgcmV0dXJuIG5leHQoKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBzIHw9IDE7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICBmYWlsKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocyA9PT0gMSkgcmV0dXJuIGVudi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudi5lcnJvcikgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxufTtcbiIsICJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gXCJ0c2xpYlwiO1xuZnVuY3Rpb24gSXRvSShhKSB7XG4gICAgcmV0dXJuIGE7XG59XG5mdW5jdGlvbiBpbm5lckNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSkge1xuICAgIGlmIChtaWRkbGV3YXJlID09PSB2b2lkIDApIHsgbWlkZGxld2FyZSA9IEl0b0k7IH1cbiAgICB2YXIgYnVmZmVyID0gW107XG4gICAgdmFyIGFzc2lnbmVkID0gZmFsc2U7XG4gICAgdmFyIG1lZGl1bSA9IHtcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGFzc2lnbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyOiBjb3VsZCBub3QgYHJlYWRgIGZyb20gYW4gYGFzc2lnbmVkYCBtZWRpdW0uIGByZWFkYCBjb3VsZCBiZSB1c2VkIG9ubHkgd2l0aCBgdXNlTWVkaXVtYC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgICAgIH0sXG4gICAgICAgIHVzZU1lZGl1bTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gbWlkZGxld2FyZShkYXRhLCBhc3NpZ25lZCk7XG4gICAgICAgICAgICBidWZmZXIucHVzaChpdGVtKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAhPT0gaXRlbTsgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBhc3NpZ25TeW5jTWVkaXVtOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGFzc2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHdoaWxlIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSB7XG4gICAgICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIGNiKHgpOyB9LFxuICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gYnVmZmVyOyB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgYXNzaWduTWVkaXVtOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGFzc2lnbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBwZW5kaW5nUXVldWUgPSBbXTtcbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNicyA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgICAgICBjYnMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICAgICAgcGVuZGluZ1F1ZXVlID0gYnVmZmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGV4ZWN1dGVRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2JzID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IFtdO1xuICAgICAgICAgICAgICAgIGNicy5mb3JFYWNoKGNiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgY3ljbGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGV4ZWN1dGVRdWV1ZSk7IH07XG4gICAgICAgICAgICBjeWNsZSgpO1xuICAgICAgICAgICAgYnVmZmVyID0ge1xuICAgICAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZS5wdXNoKHgpO1xuICAgICAgICAgICAgICAgICAgICBjeWNsZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IHBlbmRpbmdRdWV1ZS5maWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiBtZWRpdW07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVkaXVtKGRlZmF1bHRzLCBtaWRkbGV3YXJlKSB7XG4gICAgaWYgKG1pZGRsZXdhcmUgPT09IHZvaWQgMCkgeyBtaWRkbGV3YXJlID0gSXRvSTsgfVxuICAgIHJldHVybiBpbm5lckNyZWF0ZU1lZGl1bShkZWZhdWx0cywgbWlkZGxld2FyZSk7XG59XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpZGVjYXJNZWRpdW0ob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIG1lZGl1bSA9IGlubmVyQ3JlYXRlTWVkaXVtKG51bGwpO1xuICAgIG1lZGl1bS5vcHRpb25zID0gX19hc3NpZ24oeyBhc3luYzogdHJ1ZSwgc3NyOiBmYWxzZSB9LCBvcHRpb25zKTtcbiAgICByZXR1cm4gbWVkaXVtO1xufVxuIiwgImltcG9ydCB7IF9fYXNzaWduLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBTaWRlQ2FyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIHNpZGVDYXIgPSBfYS5zaWRlQ2FyLCByZXN0ID0gX19yZXN0KF9hLCBbXCJzaWRlQ2FyXCJdKTtcbiAgICBpZiAoIXNpZGVDYXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWRlY2FyOiBwbGVhc2UgcHJvdmlkZSBgc2lkZUNhcmAgcHJvcGVydHkgdG8gaW1wb3J0IHRoZSByaWdodCBjYXInKTtcbiAgICB9XG4gICAgdmFyIFRhcmdldCA9IHNpZGVDYXIucmVhZCgpO1xuICAgIGlmICghVGFyZ2V0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2lkZWNhciBtZWRpdW0gbm90IGZvdW5kJyk7XG4gICAgfVxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhcmdldCwgX19hc3NpZ24oe30sIHJlc3QpKTtcbn07XG5TaWRlQ2FyLmlzU2lkZUNhckV4cG9ydCA9IHRydWU7XG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0U2lkZWNhcihtZWRpdW0sIGV4cG9ydGVkKSB7XG4gICAgbWVkaXVtLnVzZU1lZGl1bShleHBvcnRlZCk7XG4gICAgcmV0dXJuIFNpZGVDYXI7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lkZWNhck1lZGl1bSB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmV4cG9ydCB2YXIgZWZmZWN0Q2FyID0gY3JlYXRlU2lkZWNhck1lZGl1bSgpO1xuIiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbm9kZSwgYm9vbCwgc3RyaW5nLCBhbnksIGFycmF5T2YsIG9uZU9mVHlwZSwgb2JqZWN0LCBmdW5jIH0gZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnZm9jdXMtbG9jay9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlTWVyZ2VSZWZzIH0gZnJvbSAndXNlLWNhbGxiYWNrLXJlZic7XG5pbXBvcnQgeyBoaWRkZW5HdWFyZCB9IGZyb20gJy4vRm9jdXNHdWFyZCc7XG5pbXBvcnQgeyBtZWRpdW1Gb2N1cywgbWVkaXVtQmx1ciwgbWVkaXVtU2lkZWNhciB9IGZyb20gJy4vbWVkaXVtJztcbmltcG9ydCB7IGZvY3VzU2NvcGUgfSBmcm9tICcuL3Njb3BlJztcbnZhciBlbXB0eUFycmF5ID0gW107XG52YXIgRm9jdXNMb2NrID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9jdXNMb2NrVUkocHJvcHMsIHBhcmVudFJlZikge1xuICB2YXIgX2V4dGVuZHMyO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoKSxcbiAgICByZWFsT2JzZXJ2ZWQgPSBfUmVhY3QkdXNlU3RhdGVbMF0sXG4gICAgc2V0T2JzZXJ2ZWQgPSBfUmVhY3QkdXNlU3RhdGVbMV07XG4gIHZhciBvYnNlcnZlZCA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgaXNBY3RpdmUgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICB2YXIgb3JpZ2luYWxGb2N1c2VkRWxlbWVudCA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZTIgPSBSZWFjdC51c2VTdGF0ZSh7fSksXG4gICAgdXBkYXRlID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgX3Byb3BzJGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQsXG4gICAgZGlzYWJsZWQgPSBfcHJvcHMkZGlzYWJsZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJGRpc2FibGVkLFxuICAgIF9wcm9wcyRub0ZvY3VzR3VhcmRzID0gcHJvcHMubm9Gb2N1c0d1YXJkcyxcbiAgICBub0ZvY3VzR3VhcmRzID0gX3Byb3BzJG5vRm9jdXNHdWFyZHMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJG5vRm9jdXNHdWFyZHMsXG4gICAgX3Byb3BzJHBlcnNpc3RlbnRGb2N1ID0gcHJvcHMucGVyc2lzdGVudEZvY3VzLFxuICAgIHBlcnNpc3RlbnRGb2N1cyA9IF9wcm9wcyRwZXJzaXN0ZW50Rm9jdSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcHJvcHMkcGVyc2lzdGVudEZvY3UsXG4gICAgX3Byb3BzJGNyb3NzRnJhbWUgPSBwcm9wcy5jcm9zc0ZyYW1lLFxuICAgIGNyb3NzRnJhbWUgPSBfcHJvcHMkY3Jvc3NGcmFtZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRjcm9zc0ZyYW1lLFxuICAgIF9wcm9wcyRhdXRvRm9jdXMgPSBwcm9wcy5hdXRvRm9jdXMsXG4gICAgYXV0b0ZvY3VzID0gX3Byb3BzJGF1dG9Gb2N1cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9wcm9wcyRhdXRvRm9jdXMsXG4gICAgYWxsb3dUZXh0U2VsZWN0aW9uID0gcHJvcHMuYWxsb3dUZXh0U2VsZWN0aW9uLFxuICAgIGdyb3VwID0gcHJvcHMuZ3JvdXAsXG4gICAgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lLFxuICAgIHdoaXRlTGlzdCA9IHByb3BzLndoaXRlTGlzdCxcbiAgICBoYXNQb3NpdGl2ZUluZGljZXMgPSBwcm9wcy5oYXNQb3NpdGl2ZUluZGljZXMsXG4gICAgX3Byb3BzJHNoYXJkcyA9IHByb3BzLnNoYXJkcyxcbiAgICBzaGFyZHMgPSBfcHJvcHMkc2hhcmRzID09PSB2b2lkIDAgPyBlbXB0eUFycmF5IDogX3Byb3BzJHNoYXJkcyxcbiAgICBfcHJvcHMkYXMgPSBwcm9wcy5hcyxcbiAgICBDb250YWluZXIgPSBfcHJvcHMkYXMgPT09IHZvaWQgMCA/ICdkaXYnIDogX3Byb3BzJGFzLFxuICAgIF9wcm9wcyRsb2NrUHJvcHMgPSBwcm9wcy5sb2NrUHJvcHMsXG4gICAgY29udGFpbmVyUHJvcHMgPSBfcHJvcHMkbG9ja1Byb3BzID09PSB2b2lkIDAgPyB7fSA6IF9wcm9wcyRsb2NrUHJvcHMsXG4gICAgU2lkZUNhciA9IHByb3BzLnNpZGVDYXIsXG4gICAgX3Byb3BzJHJldHVybkZvY3VzID0gcHJvcHMucmV0dXJuRm9jdXMsXG4gICAgc2hvdWxkUmV0dXJuRm9jdXMgPSBfcHJvcHMkcmV0dXJuRm9jdXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3Byb3BzJHJldHVybkZvY3VzLFxuICAgIGZvY3VzT3B0aW9ucyA9IHByb3BzLmZvY3VzT3B0aW9ucyxcbiAgICBvbkFjdGl2YXRpb25DYWxsYmFjayA9IHByb3BzLm9uQWN0aXZhdGlvbixcbiAgICBvbkRlYWN0aXZhdGlvbkNhbGxiYWNrID0gcHJvcHMub25EZWFjdGl2YXRpb247XG4gIHZhciBfUmVhY3QkdXNlU3RhdGUzID0gUmVhY3QudXNlU3RhdGUoe30pLFxuICAgIGlkID0gX1JlYWN0JHVzZVN0YXRlM1swXTtcbiAgdmFyIG9uQWN0aXZhdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIGNhcHR1cmVGb2N1c1Jlc3RvcmUgPSBfcmVmLmNhcHR1cmVGb2N1c1Jlc3RvcmU7XG4gICAgaWYgKCFvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQpIHtcbiAgICAgIHZhciBfZG9jdW1lbnQ7XG4gICAgICB2YXIgYWN0aXZlRWxlbWVudCA9IChfZG9jdW1lbnQgPSBkb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50ID0gYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmIChhY3RpdmVFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgIG9yaWdpbmFsRm9jdXNlZEVsZW1lbnQuY3VycmVudCA9IGNhcHR1cmVGb2N1c1Jlc3RvcmUoYWN0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvYnNlcnZlZC5jdXJyZW50ICYmIG9uQWN0aXZhdGlvbkNhbGxiYWNrKSB7XG4gICAgICBvbkFjdGl2YXRpb25DYWxsYmFjayhvYnNlcnZlZC5jdXJyZW50KTtcbiAgICB9XG4gICAgaXNBY3RpdmUuY3VycmVudCA9IHRydWU7XG4gICAgdXBkYXRlKCk7XG4gIH0sIFtvbkFjdGl2YXRpb25DYWxsYmFja10pO1xuICB2YXIgb25EZWFjdGl2YXRpb24gPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgaXNBY3RpdmUuY3VycmVudCA9IGZhbHNlO1xuICAgIGlmIChvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKSB7XG4gICAgICBvbkRlYWN0aXZhdGlvbkNhbGxiYWNrKG9ic2VydmVkLmN1cnJlbnQpO1xuICAgIH1cbiAgICB1cGRhdGUoKTtcbiAgfSwgW29uRGVhY3RpdmF0aW9uQ2FsbGJhY2tdKTtcbiAgdmFyIHJldHVybkZvY3VzID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGFsbG93RGVmZXIpIHtcbiAgICB2YXIgZm9jdXNSZXN0b3JlID0gb3JpZ2luYWxGb2N1c2VkRWxlbWVudC5jdXJyZW50O1xuICAgIGlmIChmb2N1c1Jlc3RvcmUpIHtcbiAgICAgIHZhciByZXR1cm5Gb2N1c1RvID0gKHR5cGVvZiBmb2N1c1Jlc3RvcmUgPT09ICdmdW5jdGlvbicgPyBmb2N1c1Jlc3RvcmUoKSA6IGZvY3VzUmVzdG9yZSkgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgIHZhciBob3dUb1JldHVybkZvY3VzID0gdHlwZW9mIHNob3VsZFJldHVybkZvY3VzID09PSAnZnVuY3Rpb24nID8gc2hvdWxkUmV0dXJuRm9jdXMocmV0dXJuRm9jdXNUbykgOiBzaG91bGRSZXR1cm5Gb2N1cztcbiAgICAgIGlmIChob3dUb1JldHVybkZvY3VzKSB7XG4gICAgICAgIHZhciByZXR1cm5Gb2N1c09wdGlvbnMgPSB0eXBlb2YgaG93VG9SZXR1cm5Gb2N1cyA9PT0gJ29iamVjdCcgPyBob3dUb1JldHVybkZvY3VzIDogdW5kZWZpbmVkO1xuICAgICAgICBvcmlnaW5hbEZvY3VzZWRFbGVtZW50LmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBpZiAoYWxsb3dEZWZlcikge1xuICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybkZvY3VzVG8uZm9jdXMocmV0dXJuRm9jdXNPcHRpb25zKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm5Gb2N1c1RvLmZvY3VzKHJldHVybkZvY3VzT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzaG91bGRSZXR1cm5Gb2N1c10pO1xuICB2YXIgb25Gb2N1cyA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChpc0FjdGl2ZS5jdXJyZW50KSB7XG4gICAgICBtZWRpdW1Gb2N1cy51c2VNZWRpdW0oZXZlbnQpO1xuICAgIH1cbiAgfSwgW10pO1xuICB2YXIgb25CbHVyID0gbWVkaXVtQmx1ci51c2VNZWRpdW07XG4gIHZhciBzZXRPYnNlcnZlTm9kZSA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdPYnNlcnZlZCkge1xuICAgIGlmIChvYnNlcnZlZC5jdXJyZW50ICE9PSBuZXdPYnNlcnZlZCkge1xuICAgICAgb2JzZXJ2ZWQuY3VycmVudCA9IG5ld09ic2VydmVkO1xuICAgICAgc2V0T2JzZXJ2ZWQobmV3T2JzZXJ2ZWQpO1xuICAgIH1cbiAgfSwgW10pO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2YgYWxsb3dUZXh0U2VsZWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS53YXJuKCdSZWFjdC1Gb2N1cy1Mb2NrOiBhbGxvd1RleHRTZWxlY3Rpb24gaXMgZGVwcmVjYXRlZCBhbmQgZW5hYmxlZCBieSBkZWZhdWx0Jyk7XG4gICAgfVxuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIW9ic2VydmVkLmN1cnJlbnQgJiYgdHlwZW9mIENvbnRhaW5lciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRm9jdXNMb2NrOiBjb3VsZCBub3Qgb2J0YWluIHJlZiB0byBpbnRlcm5hbCBub2RlJyk7XG4gICAgICB9XG4gICAgfSwgW10pO1xuICB9XG4gIHZhciBsb2NrUHJvcHMgPSBfZXh0ZW5kcygoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltjb25zdGFudHMuRk9DVVNfRElTQUJMRURdID0gZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgX2V4dGVuZHMyW2NvbnN0YW50cy5GT0NVU19HUk9VUF0gPSBncm91cCwgX2V4dGVuZHMyKSwgY29udGFpbmVyUHJvcHMpO1xuICB2YXIgaGFzTGVhZGluZ0d1YXJkcyA9IG5vRm9jdXNHdWFyZHMgIT09IHRydWU7XG4gIHZhciBoYXNUYWlsaW5nR3VhcmRzID0gaGFzTGVhZGluZ0d1YXJkcyAmJiBub0ZvY3VzR3VhcmRzICE9PSAndGFpbCc7XG4gIHZhciBtZXJnZWRSZWYgPSB1c2VNZXJnZVJlZnMoW3BhcmVudFJlZiwgc2V0T2JzZXJ2ZU5vZGVdKTtcbiAgdmFyIGZvY3VzU2NvcGVWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvYnNlcnZlZDogb2JzZXJ2ZWQsXG4gICAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICAgIGVuYWJsZWQ6ICFkaXNhYmxlZCxcbiAgICAgIGFjdGl2ZTogaXNBY3RpdmUuY3VycmVudFxuICAgIH07XG4gIH0sIFtkaXNhYmxlZCwgaXNBY3RpdmUuY3VycmVudCwgc2hhcmRzLCByZWFsT2JzZXJ2ZWRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBoYXNMZWFkaW5nR3VhcmRzICYmIFtcbiAgLyojX19QVVJFX18qL1xuICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBrZXk6IFwiZ3VhcmQtZmlyc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IDAsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pLCBoYXNQb3NpdGl2ZUluZGljZXMgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLW5lYXJlc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IDEsXG4gICAgc3R5bGU6IGhpZGRlbkd1YXJkXG4gIH0pIDogbnVsbF0sICFkaXNhYmxlZCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlQ2FyLCB7XG4gICAgaWQ6IGlkLFxuICAgIHNpZGVDYXI6IG1lZGl1bVNpZGVjYXIsXG4gICAgb2JzZXJ2ZWQ6IHJlYWxPYnNlcnZlZCxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgcGVyc2lzdGVudEZvY3VzOiBwZXJzaXN0ZW50Rm9jdXMsXG4gICAgY3Jvc3NGcmFtZTogY3Jvc3NGcmFtZSxcbiAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICB3aGl0ZUxpc3Q6IHdoaXRlTGlzdCxcbiAgICBzaGFyZHM6IHNoYXJkcyxcbiAgICBvbkFjdGl2YXRpb246IG9uQWN0aXZhdGlvbixcbiAgICBvbkRlYWN0aXZhdGlvbjogb25EZWFjdGl2YXRpb24sXG4gICAgcmV0dXJuRm9jdXM6IHJldHVybkZvY3VzLFxuICAgIGZvY3VzT3B0aW9uczogZm9jdXNPcHRpb25zLFxuICAgIG5vRm9jdXNHdWFyZHM6IG5vRm9jdXNHdWFyZHNcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRhaW5lciwgX2V4dGVuZHMoe1xuICAgIHJlZjogbWVyZ2VkUmVmXG4gIH0sIGxvY2tQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIG9uQmx1cjogb25CbHVyLFxuICAgIG9uRm9jdXM6IG9uRm9jdXNcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KGZvY3VzU2NvcGUuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogZm9jdXNTY29wZVZhbHVlXG4gIH0sIGNoaWxkcmVuKSksIGhhc1RhaWxpbmdHdWFyZHMgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIFwiZGF0YS1mb2N1cy1ndWFyZFwiOiB0cnVlLFxuICAgIHRhYkluZGV4OiBkaXNhYmxlZCA/IC0xIDogMCxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSkpO1xufSk7XG5Gb2N1c0xvY2sucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBjaGlsZHJlbjogbm9kZSxcbiAgZGlzYWJsZWQ6IGJvb2wsXG4gIHJldHVybkZvY3VzOiBvbmVPZlR5cGUoW2Jvb2wsIG9iamVjdCwgZnVuY10pLFxuICBmb2N1c09wdGlvbnM6IG9iamVjdCxcbiAgbm9Gb2N1c0d1YXJkczogYm9vbCxcbiAgaGFzUG9zaXRpdmVJbmRpY2VzOiBib29sLFxuICBhbGxvd1RleHRTZWxlY3Rpb246IGJvb2wsXG4gIGF1dG9Gb2N1czogYm9vbCxcbiAgcGVyc2lzdGVudEZvY3VzOiBib29sLFxuICBjcm9zc0ZyYW1lOiBib29sLFxuICBncm91cDogc3RyaW5nLFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgd2hpdGVMaXN0OiBmdW5jLFxuICBzaGFyZHM6IGFycmF5T2YoYW55KSxcbiAgYXM6IG9uZU9mVHlwZShbc3RyaW5nLCBmdW5jLCBvYmplY3RdKSxcbiAgbG9ja1Byb3BzOiBvYmplY3QsXG4gIG9uQWN0aXZhdGlvbjogZnVuYyxcbiAgb25EZWFjdGl2YXRpb246IGZ1bmMsXG4gIHNpZGVDYXI6IGFueS5pc1JlcXVpcmVkXG59IDoge307XG5leHBvcnQgZGVmYXVsdCBGb2N1c0xvY2s7IiwgIi8qKlxuICogZGVmaW5lcyBhIGZvY3VzIGdyb3VwXG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfR1JPVVAgPSAnZGF0YS1mb2N1cy1sb2NrJztcbi8qKlxuICogZGlzYWJsZXMgZWxlbWVudCBkaXNjb3ZlcnkgaW5zaWRlIGEgZ3JvdXAgbWFya2VkIGJ5IGtleVxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0RJU0FCTEVEID0gJ2RhdGEtZm9jdXMtbG9jay1kaXNhYmxlZCc7XG4vKipcbiAqIGFsbG93cyB1bmNvbnRyb2xsZWQgZm9jdXMgd2l0aGluIHRoZSBtYXJrZWQgYXJlYSwgZWZmZWN0aXZlbHkgZGlzYWJsaW5nIGZvY3VzIGxvY2sgZm9yIGl0J3MgY29udGVudFxuICovXG5leHBvcnQgdmFyIEZPQ1VTX0FMTE9XID0gJ2RhdGEtbm8tZm9jdXMtbG9jayc7XG4vKipcbiAqIGluc3RydWN0cyBhdXRvZm9jdXMgZW5naW5lIHRvIHBpY2sgZGVmYXVsdCBhdXRvZm9jdXMgaW5zaWRlIGEgZ2l2ZW4gbm9kZVxuICogY2FuIGJlIHNldCBvbiB0aGUgZWxlbWVudCBvciBjb250YWluZXJcbiAqL1xuZXhwb3J0IHZhciBGT0NVU19BVVRPID0gJ2RhdGEtYXV0b2ZvY3VzLWluc2lkZSc7XG4vKipcbiAqIGluc3RydWN0cyBhdXRvZm9jdXMgdG8gaWdub3JlIGVsZW1lbnRzIHdpdGhpbiBhIGdpdmVuIG5vZGVcbiAqIGNhbiBiZSBzZXQgb24gdGhlIGVsZW1lbnQgb3IgY29udGFpbmVyXG4gKi9cbmV4cG9ydCB2YXIgRk9DVVNfTk9fQVVUT0ZPQ1VTID0gJ2RhdGEtbm8tYXV0b2ZvY3VzJztcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuZXhwb3J0IHZhciBoaWRkZW5HdWFyZCA9IHtcbiAgd2lkdGg6ICcxcHgnLFxuICBoZWlnaHQ6ICcwcHgnLFxuICBwYWRkaW5nOiAwLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHBvc2l0aW9uOiAnZml4ZWQnLFxuICB0b3A6ICcxcHgnLFxuICBsZWZ0OiAnMXB4J1xufTtcbnZhciBJbkZvY3VzR3VhcmQgPSBmdW5jdGlvbiBJbkZvY3VzR3VhcmQoX3JlZikge1xuICB2YXIgX3JlZiRjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgY2hpbGRyZW4gPSBfcmVmJGNoaWxkcmVuID09PSB2b2lkIDAgPyBudWxsIDogX3JlZiRjaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLWZpcnN0XCIsXG4gICAgXCJkYXRhLWZvY3VzLWd1YXJkXCI6IHRydWUsXG4gICAgXCJkYXRhLWZvY3VzLWF1dG8tZ3VhcmRcIjogdHJ1ZSxcbiAgICBzdHlsZTogaGlkZGVuR3VhcmRcbiAgfSksIGNoaWxkcmVuLCBjaGlsZHJlbiAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAga2V5OiBcImd1YXJkLWxhc3RcIixcbiAgICBcImRhdGEtZm9jdXMtZ3VhcmRcIjogdHJ1ZSxcbiAgICBcImRhdGEtZm9jdXMtYXV0by1ndWFyZFwiOiB0cnVlLFxuICAgIHN0eWxlOiBoaWRkZW5HdWFyZFxuICB9KSk7XG59O1xuSW5Gb2N1c0d1YXJkLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59IDoge307XG5leHBvcnQgZGVmYXVsdCBJbkZvY3VzR3VhcmQ7IiwgImltcG9ydCB7IGNyZWF0ZU1lZGl1bSwgY3JlYXRlU2lkZWNhck1lZGl1bSB9IGZyb20gJ3VzZS1zaWRlY2FyJztcbmV4cG9ydCB2YXIgbWVkaXVtRm9jdXMgPSBjcmVhdGVNZWRpdW0oe30sIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICBjdXJyZW50VGFyZ2V0ID0gX3JlZi5jdXJyZW50VGFyZ2V0O1xuICByZXR1cm4ge1xuICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgfTtcbn0pO1xuZXhwb3J0IHZhciBtZWRpdW1CbHVyID0gY3JlYXRlTWVkaXVtKCk7XG5leHBvcnQgdmFyIG1lZGl1bUVmZmVjdCA9IGNyZWF0ZU1lZGl1bSgpO1xuZXhwb3J0IHZhciBtZWRpdW1TaWRlY2FyID0gY3JlYXRlU2lkZWNhck1lZGl1bSh7XG4gIGFzeW5jOiB0cnVlLFxuICBzc3I6IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbn0pOyIsICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBmb2N1c1Njb3BlID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTsiLCAiZXhwb3J0IGZ1bmN0aW9uIGRlZmVyQWN0aW9uKGFjdGlvbikge1xuICBzZXRUaW1lb3V0KGFjdGlvbiwgMSk7XG59XG5leHBvcnQgdmFyIGlubGluZVByb3AgPSBmdW5jdGlvbiBpbmxpbmVQcm9wKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBvYmogPSB7fTtcbiAgb2JqW25hbWVdID0gdmFsdWU7XG4gIHJldHVybiBvYmo7XG59O1xuZXhwb3J0IHZhciBleHRyYWN0UmVmID0gZnVuY3Rpb24gZXh0cmFjdFJlZihyZWYpIHtcbiAgcmV0dXJuIHJlZiAmJiAnY3VycmVudCcgaW4gcmVmID8gcmVmLmN1cnJlbnQgOiByZWY7XG59OyIsICJpbXBvcnQgRm9jdXNMb2NrVUkgZnJvbSAnLi9Mb2NrJztcbmltcG9ydCBBdXRvRm9jdXNJbnNpZGUgZnJvbSAnLi9BdXRvRm9jdXNJbnNpZGUnO1xuaW1wb3J0IE1vdmVGb2N1c0luc2lkZSwgeyB1c2VGb2N1c0luc2lkZSB9IGZyb20gJy4vTW92ZUZvY3VzSW5zaWRlJztcbmltcG9ydCBGcmVlRm9jdXNJbnNpZGUgZnJvbSAnLi9GcmVlRm9jdXNJbnNpZGUnO1xuaW1wb3J0IEluRm9jdXNHdWFyZCBmcm9tICcuL0ZvY3VzR3VhcmQnO1xuaW1wb3J0IHsgdXNlRm9jdXNDb250cm9sbGVyLCB1c2VGb2N1c1Njb3BlIH0gZnJvbSAnLi91c2UtZm9jdXMtc2NvcGUnO1xuaW1wb3J0IHsgdXNlRm9jdXNTdGF0ZSB9IGZyb20gJy4vdXNlLWZvY3VzLXN0YXRlJztcbmV4cG9ydCB7IEF1dG9Gb2N1c0luc2lkZSwgTW92ZUZvY3VzSW5zaWRlLCBGcmVlRm9jdXNJbnNpZGUsIEluRm9jdXNHdWFyZCwgRm9jdXNMb2NrVUksIHVzZUZvY3VzSW5zaWRlLCB1c2VGb2N1c0NvbnRyb2xsZXIsIHVzZUZvY3VzU2NvcGUsIHVzZUZvY3VzU3RhdGUgfTtcbmV4cG9ydCBkZWZhdWx0IEZvY3VzTG9ja1VJOyIsICJpbXBvcnQgeyBjcmVhdGVTaWRlY2FyTWVkaXVtIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuZXhwb3J0IHZhciBlZmZlY3RDYXIgPSBjcmVhdGVTaWRlY2FyTWVkaXVtKCk7XG5leHBvcnQgdmFyIGZvY3VzSGlkZGVuTWFya2VyID0gJ2RhdGEtZm9jdXMtb24taGlkZGVuJztcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHdpdGhTaWRlRWZmZWN0IGZyb20gJ3JlYWN0LWNsaWVudHNpZGUtZWZmZWN0JztcbmltcG9ydCB7IG1vdmVGb2N1c0luc2lkZSwgZm9jdXNJbnNpZGUsIGZvY3VzSXNIaWRkZW4sIGV4cGFuZEZvY3VzYWJsZU5vZGVzLCBnZXRGb2N1c2FibGVOb2RlcywgZm9jdXNOZXh0RWxlbWVudCwgZm9jdXNQcmV2RWxlbWVudCwgZm9jdXNGaXJzdEVsZW1lbnQsIGZvY3VzTGFzdEVsZW1lbnQsIGNhcHR1cmVGb2N1c1Jlc3RvcmUgfSBmcm9tICdmb2N1cy1sb2NrJztcbmltcG9ydCB7IGRlZmVyQWN0aW9uLCBleHRyYWN0UmVmIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IG1lZGl1bUZvY3VzLCBtZWRpdW1CbHVyLCBtZWRpdW1FZmZlY3QgfSBmcm9tICcuL21lZGl1bSc7XG52YXIgZm9jdXNPbkJvZHkgPSBmdW5jdGlvbiBmb2N1c09uQm9keSgpIHtcbiAgcmV0dXJuIGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHk7XG59O1xudmFyIGlzRnJlZUZvY3VzID0gZnVuY3Rpb24gaXNGcmVlRm9jdXMoKSB7XG4gIHJldHVybiBmb2N1c09uQm9keSgpIHx8IGZvY3VzSXNIaWRkZW4oKTtcbn07XG52YXIgbGFzdEFjdGl2ZVRyYXAgPSBudWxsO1xudmFyIGxhc3RBY3RpdmVGb2N1cyA9IG51bGw7XG52YXIgdHJ5UmVzdG9yZUZvY3VzID0gZnVuY3Rpb24gdHJ5UmVzdG9yZUZvY3VzKCkge1xuICByZXR1cm4gbnVsbDtcbn07XG52YXIgbGFzdFBvcnRhbGVkRWxlbWVudCA9IG51bGw7XG52YXIgZm9jdXNXYXNPdXRzaWRlV2luZG93ID0gZmFsc2U7XG52YXIgd2luZG93Rm9jdXNlZCA9IGZhbHNlO1xudmFyIGRlZmF1bHRXaGl0ZWxpc3QgPSBmdW5jdGlvbiBkZWZhdWx0V2hpdGVsaXN0KCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgZm9jdXNXaGl0ZWxpc3RlZCA9IGZ1bmN0aW9uIGZvY3VzV2hpdGVsaXN0ZWQoYWN0aXZlRWxlbWVudCkge1xuICByZXR1cm4gKGxhc3RBY3RpdmVUcmFwLndoaXRlTGlzdCB8fCBkZWZhdWx0V2hpdGVsaXN0KShhY3RpdmVFbGVtZW50KTtcbn07XG52YXIgcmVjb3JkUG9ydGFsID0gZnVuY3Rpb24gcmVjb3JkUG9ydGFsKG9ic2VydmVyTm9kZSwgcG9ydGFsZWRFbGVtZW50KSB7XG4gIGxhc3RQb3J0YWxlZEVsZW1lbnQgPSB7XG4gICAgb2JzZXJ2ZXJOb2RlOiBvYnNlcnZlck5vZGUsXG4gICAgcG9ydGFsZWRFbGVtZW50OiBwb3J0YWxlZEVsZW1lbnRcbiAgfTtcbn07XG52YXIgZm9jdXNJc1BvcnRhbGVkUGFpciA9IGZ1bmN0aW9uIGZvY3VzSXNQb3J0YWxlZFBhaXIoZWxlbWVudCkge1xuICByZXR1cm4gbGFzdFBvcnRhbGVkRWxlbWVudCAmJiBsYXN0UG9ydGFsZWRFbGVtZW50LnBvcnRhbGVkRWxlbWVudCA9PT0gZWxlbWVudDtcbn07XG5mdW5jdGlvbiBhdXRvR3VhcmQoc3RhcnRJbmRleCwgZW5kLCBzdGVwLCBhbGxOb2Rlcykge1xuICB2YXIgbGFzdEd1YXJkID0gbnVsbDtcbiAgdmFyIGkgPSBzdGFydEluZGV4O1xuICBkbyB7XG4gICAgdmFyIGl0ZW0gPSBhbGxOb2Rlc1tpXTtcbiAgICBpZiAoaXRlbS5ndWFyZCkge1xuICAgICAgaWYgKGl0ZW0ubm9kZS5kYXRhc2V0LmZvY3VzQXV0b0d1YXJkKSB7XG4gICAgICAgIGxhc3RHdWFyZCA9IGl0ZW07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpdGVtLmxvY2tJdGVtKSB7XG4gICAgICBpZiAoaSAhPT0gc3RhcnRJbmRleCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsYXN0R3VhcmQgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0gd2hpbGUgKChpICs9IHN0ZXApICE9PSBlbmQpO1xuICBpZiAobGFzdEd1YXJkKSB7XG4gICAgbGFzdEd1YXJkLm5vZGUudGFiSW5kZXggPSAwO1xuICB9XG59XG52YXIgZm9jdXNXYXNPdXRzaWRlID0gZnVuY3Rpb24gZm9jdXNXYXNPdXRzaWRlKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgaWYgKGNyb3NzRnJhbWVPcHRpb24pIHtcbiAgICByZXR1cm4gQm9vbGVhbihmb2N1c1dhc091dHNpZGVXaW5kb3cpO1xuICB9XG4gIHJldHVybiBmb2N1c1dhc091dHNpZGVXaW5kb3cgPT09ICdtZWFud2hpbGUnO1xufTtcbnZhciBjaGVja0luSG9zdCA9IGZ1bmN0aW9uIGNoZWNrSW5Ib3N0KGNoZWNrLCBlbCwgYm91bmRhcnkpIHtcbiAgcmV0dXJuIGVsICYmIChlbC5ob3N0ID09PSBjaGVjayAmJiAoIWVsLmFjdGl2ZUVsZW1lbnQgfHwgYm91bmRhcnkuY29udGFpbnMoZWwuYWN0aXZlRWxlbWVudCkpIHx8IGVsLnBhcmVudE5vZGUgJiYgY2hlY2tJbkhvc3QoY2hlY2ssIGVsLnBhcmVudE5vZGUsIGJvdW5kYXJ5KSk7XG59O1xudmFyIHdpdGhpbkhvc3QgPSBmdW5jdGlvbiB3aXRoaW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdBcmVhKSB7XG4gIHJldHVybiB3b3JraW5nQXJlYS5zb21lKGZ1bmN0aW9uIChhcmVhKSB7XG4gICAgcmV0dXJuIGNoZWNrSW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIGFyZWEsIGFyZWEpO1xuICB9KTtcbn07XG52YXIgZ2V0Tm9kZUZvY3VzYWJsZXMgPSBmdW5jdGlvbiBnZXROb2RlRm9jdXNhYmxlcyhub2Rlcykge1xuICByZXR1cm4gZ2V0Rm9jdXNhYmxlTm9kZXMobm9kZXMsIG5ldyBNYXAoKSk7XG59O1xudmFyIGlzTm90Rm9jdXNhYmxlID0gZnVuY3Rpb24gaXNOb3RGb2N1c2FibGUobm9kZSkge1xuICByZXR1cm4gIWdldE5vZGVGb2N1c2FibGVzKFtub2RlLnBhcmVudE5vZGVdKS5zb21lKGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBlbC5ub2RlID09PSBub2RlO1xuICB9KTtcbn07XG52YXIgYWN0aXZhdGVUcmFwID0gZnVuY3Rpb24gYWN0aXZhdGVUcmFwKCkge1xuICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gIGlmIChsYXN0QWN0aXZlVHJhcCkge1xuICAgIHZhciBfbGFzdEFjdGl2ZVRyYXAgPSBsYXN0QWN0aXZlVHJhcCxcbiAgICAgIG9ic2VydmVkID0gX2xhc3RBY3RpdmVUcmFwLm9ic2VydmVkLFxuICAgICAgcGVyc2lzdGVudEZvY3VzID0gX2xhc3RBY3RpdmVUcmFwLnBlcnNpc3RlbnRGb2N1cyxcbiAgICAgIGF1dG9Gb2N1cyA9IF9sYXN0QWN0aXZlVHJhcC5hdXRvRm9jdXMsXG4gICAgICBzaGFyZHMgPSBfbGFzdEFjdGl2ZVRyYXAuc2hhcmRzLFxuICAgICAgY3Jvc3NGcmFtZSA9IF9sYXN0QWN0aXZlVHJhcC5jcm9zc0ZyYW1lLFxuICAgICAgZm9jdXNPcHRpb25zID0gX2xhc3RBY3RpdmVUcmFwLmZvY3VzT3B0aW9ucyxcbiAgICAgIG5vRm9jdXNHdWFyZHMgPSBfbGFzdEFjdGl2ZVRyYXAubm9Gb2N1c0d1YXJkcztcbiAgICB2YXIgd29ya2luZ05vZGUgPSBvYnNlcnZlZCB8fCBsYXN0UG9ydGFsZWRFbGVtZW50ICYmIGxhc3RQb3J0YWxlZEVsZW1lbnQucG9ydGFsZWRFbGVtZW50O1xuICAgIGlmIChmb2N1c09uQm9keSgpICYmIGxhc3RBY3RpdmVGb2N1cykge1xuICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGxhc3RBY3RpdmVGb2N1cykgfHwgaXNOb3RGb2N1c2FibGUobGFzdEFjdGl2ZUZvY3VzKSkge1xuICAgICAgICBsYXN0QWN0aXZlRm9jdXMgPSBudWxsO1xuICAgICAgICB2YXIgbmV3VGFyZ2V0ID0gdHJ5UmVzdG9yZUZvY3VzKCk7XG4gICAgICAgIGlmIChuZXdUYXJnZXQpIHtcbiAgICAgICAgICBuZXdUYXJnZXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKHdvcmtpbmdOb2RlKSB7XG4gICAgICB2YXIgd29ya2luZ0FyZWEgPSBbd29ya2luZ05vZGVdLmNvbmNhdChzaGFyZHMubWFwKGV4dHJhY3RSZWYpLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICB2YXIgc2hvdWxkRm9yY2VSZXN0b3JlRm9jdXMgPSBmdW5jdGlvbiBzaG91bGRGb3JjZVJlc3RvcmVGb2N1cygpIHtcbiAgICAgICAgaWYgKCFmb2N1c1dhc091dHNpZGUoY3Jvc3NGcmFtZSkgfHwgIW5vRm9jdXNHdWFyZHMgfHwgIWxhc3RBY3RpdmVGb2N1cyB8fCB3aW5kb3dGb2N1c2VkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBub2RlcyA9IGdldE5vZGVGb2N1c2FibGVzKHdvcmtpbmdBcmVhKTtcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IG5vZGVzLmZpbmRJbmRleChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgIHZhciBub2RlID0gX3JlZi5ub2RlO1xuICAgICAgICAgIHJldHVybiBub2RlID09PSBsYXN0QWN0aXZlRm9jdXM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbGFzdEluZGV4ID09PSAwIHx8IGxhc3RJbmRleCA9PT0gbm9kZXMubGVuZ3RoIC0gMTtcbiAgICAgIH07XG4gICAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgZm9jdXNXaGl0ZWxpc3RlZChhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBpZiAocGVyc2lzdGVudEZvY3VzIHx8IHNob3VsZEZvcmNlUmVzdG9yZUZvY3VzKCkgfHwgIWlzRnJlZUZvY3VzKCkgfHwgIWxhc3RBY3RpdmVGb2N1cyAmJiBhdXRvRm9jdXMpIHtcbiAgICAgICAgICBpZiAod29ya2luZ05vZGUgJiYgIShmb2N1c0luc2lkZSh3b3JraW5nQXJlYSkgfHwgYWN0aXZlRWxlbWVudCAmJiB3aXRoaW5Ib3N0KGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdBcmVhKSB8fCBmb2N1c0lzUG9ydGFsZWRQYWlyKGFjdGl2ZUVsZW1lbnQsIHdvcmtpbmdOb2RlKSkpIHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudCAmJiAhbGFzdEFjdGl2ZUZvY3VzICYmIGFjdGl2ZUVsZW1lbnQgJiYgIWF1dG9Gb2N1cykge1xuICAgICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudC5ibHVyKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdWx0ID0gbW92ZUZvY3VzSW5zaWRlKHdvcmtpbmdBcmVhLCBsYXN0QWN0aXZlRm9jdXMsIHtcbiAgICAgICAgICAgICAgICBmb2N1c09wdGlvbnM6IGZvY3VzT3B0aW9uc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgbGFzdFBvcnRhbGVkRWxlbWVudCA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb2N1c1dhc091dHNpZGVXaW5kb3cgPSBmYWxzZTtcbiAgICAgICAgICBsYXN0QWN0aXZlRm9jdXMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgIHRyeVJlc3RvcmVGb2N1cyA9IGNhcHR1cmVGb2N1c1Jlc3RvcmUobGFzdEFjdGl2ZUZvY3VzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRvY3VtZW50ICYmIGFjdGl2ZUVsZW1lbnQgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtZm9jdXMtYXV0by1ndWFyZF0nKSkge1xuICAgICAgICB2YXIgbmV3QWN0aXZlRWxlbWVudCA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHZhciBhbGxOb2RlcyA9IGV4cGFuZEZvY3VzYWJsZU5vZGVzKHdvcmtpbmdBcmVhKTtcbiAgICAgICAgdmFyIGZvY3VzZWRJbmRleCA9IGFsbE5vZGVzLm1hcChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IF9yZWYyLm5vZGU7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0pLmluZGV4T2YobmV3QWN0aXZlRWxlbWVudCk7XG4gICAgICAgIGlmIChmb2N1c2VkSW5kZXggPiAtMSkge1xuICAgICAgICAgIGFsbE5vZGVzLmZpbHRlcihmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgICAgIHZhciBndWFyZCA9IF9yZWYzLmd1YXJkLFxuICAgICAgICAgICAgICBub2RlID0gX3JlZjMubm9kZTtcbiAgICAgICAgICAgIHJldHVybiBndWFyZCAmJiBub2RlLmRhdGFzZXQuZm9jdXNBdXRvR3VhcmQ7XG4gICAgICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gX3JlZjQubm9kZTtcbiAgICAgICAgICAgIHJldHVybiBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndGFiSW5kZXgnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhdXRvR3VhcmQoZm9jdXNlZEluZGV4LCBhbGxOb2Rlcy5sZW5ndGgsICsxLCBhbGxOb2Rlcyk7XG4gICAgICAgICAgYXV0b0d1YXJkKGZvY3VzZWRJbmRleCwgLTEsIC0xLCBhbGxOb2Rlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgb25UcmFwID0gZnVuY3Rpb24gb25UcmFwKGV2ZW50KSB7XG4gIGlmIChhY3RpdmF0ZVRyYXAoKSAmJiBldmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn07XG52YXIgb25CbHVyID0gZnVuY3Rpb24gb25CbHVyKCkge1xuICByZXR1cm4gZGVmZXJBY3Rpb24oYWN0aXZhdGVUcmFwKTtcbn07XG52YXIgb25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoZXZlbnQpIHtcbiAgdmFyIHNvdXJjZSA9IGV2ZW50LnRhcmdldDtcbiAgdmFyIGN1cnJlbnROb2RlID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgaWYgKCFjdXJyZW50Tm9kZS5jb250YWlucyhzb3VyY2UpKSB7XG4gICAgcmVjb3JkUG9ydGFsKGN1cnJlbnROb2RlLCBzb3VyY2UpO1xuICB9XG59O1xudmFyIEZvY3VzV2F0Y2hlciA9IGZ1bmN0aW9uIEZvY3VzV2F0Y2hlcigpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xudmFyIEZvY3VzVHJhcCA9IGZ1bmN0aW9uIEZvY3VzVHJhcChfcmVmNSkge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmNS5jaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBvbkJsdXI6IG9uQmx1cixcbiAgICBvbkZvY3VzOiBvbkZvY3VzXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5Gb2N1c1RyYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZFxufSA6IHt9O1xudmFyIG9uV2luZG93Rm9jdXMgPSBmdW5jdGlvbiBvbldpbmRvd0ZvY3VzKCkge1xuICB3aW5kb3dGb2N1c2VkID0gdHJ1ZTtcbn07XG52YXIgb25XaW5kb3dCbHVyID0gZnVuY3Rpb24gb25XaW5kb3dCbHVyKCkge1xuICB3aW5kb3dGb2N1c2VkID0gZmFsc2U7XG4gIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdqdXN0JztcbiAgZGVmZXJBY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgIGZvY3VzV2FzT3V0c2lkZVdpbmRvdyA9ICdtZWFud2hpbGUnO1xuICB9KTtcbn07XG52YXIgYXR0YWNoSGFuZGxlciA9IGZ1bmN0aW9uIGF0dGFjaEhhbmRsZXIoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBvblRyYXApO1xuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIG9uQmx1cik7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIG9uV2luZG93Rm9jdXMpO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uV2luZG93Qmx1cik7XG59O1xudmFyIGRldGFjaEhhbmRsZXIgPSBmdW5jdGlvbiBkZXRhY2hIYW5kbGVyKCkge1xuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJywgb25UcmFwKTtcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBvbkJsdXIpO1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBvbldpbmRvd0ZvY3VzKTtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbldpbmRvd0JsdXIpO1xufTtcbmZ1bmN0aW9uIHJlZHVjZVByb3BzVG9TdGF0ZShwcm9wc0xpc3QpIHtcbiAgcmV0dXJuIHByb3BzTGlzdC5maWx0ZXIoZnVuY3Rpb24gKF9yZWY2KSB7XG4gICAgdmFyIGRpc2FibGVkID0gX3JlZjYuZGlzYWJsZWQ7XG4gICAgcmV0dXJuICFkaXNhYmxlZDtcbiAgfSk7XG59XG52YXIgZm9jdXNMb2NrQVBJID0ge1xuICBtb3ZlRm9jdXNJbnNpZGU6IG1vdmVGb2N1c0luc2lkZSxcbiAgZm9jdXNJbnNpZGU6IGZvY3VzSW5zaWRlLFxuICBmb2N1c05leHRFbGVtZW50OiBmb2N1c05leHRFbGVtZW50LFxuICBmb2N1c1ByZXZFbGVtZW50OiBmb2N1c1ByZXZFbGVtZW50LFxuICBmb2N1c0ZpcnN0RWxlbWVudDogZm9jdXNGaXJzdEVsZW1lbnQsXG4gIGZvY3VzTGFzdEVsZW1lbnQ6IGZvY3VzTGFzdEVsZW1lbnQsXG4gIGNhcHR1cmVGb2N1c1Jlc3RvcmU6IGNhcHR1cmVGb2N1c1Jlc3RvcmVcbn07XG5mdW5jdGlvbiBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KHRyYXBzKSB7XG4gIHZhciB0cmFwID0gdHJhcHMuc2xpY2UoLTEpWzBdO1xuICBpZiAodHJhcCAmJiAhbGFzdEFjdGl2ZVRyYXApIHtcbiAgICBhdHRhY2hIYW5kbGVyKCk7XG4gIH1cbiAgdmFyIGxhc3RUcmFwID0gbGFzdEFjdGl2ZVRyYXA7XG4gIHZhciBzYW1lVHJhcCA9IGxhc3RUcmFwICYmIHRyYXAgJiYgdHJhcC5pZCA9PT0gbGFzdFRyYXAuaWQ7XG4gIGxhc3RBY3RpdmVUcmFwID0gdHJhcDtcbiAgaWYgKGxhc3RUcmFwICYmICFzYW1lVHJhcCkge1xuICAgIGxhc3RUcmFwLm9uRGVhY3RpdmF0aW9uKCk7XG4gICAgaWYgKCF0cmFwcy5maWx0ZXIoZnVuY3Rpb24gKF9yZWY3KSB7XG4gICAgICB2YXIgaWQgPSBfcmVmNy5pZDtcbiAgICAgIHJldHVybiBpZCA9PT0gbGFzdFRyYXAuaWQ7XG4gICAgfSkubGVuZ3RoKSB7XG4gICAgICBsYXN0VHJhcC5yZXR1cm5Gb2N1cyghdHJhcCk7XG4gICAgfVxuICB9XG4gIGlmICh0cmFwKSB7XG4gICAgbGFzdEFjdGl2ZUZvY3VzID0gbnVsbDtcbiAgICBpZiAoIXNhbWVUcmFwIHx8IGxhc3RUcmFwLm9ic2VydmVkICE9PSB0cmFwLm9ic2VydmVkKSB7XG4gICAgICB0cmFwLm9uQWN0aXZhdGlvbihmb2N1c0xvY2tBUEkpO1xuICAgIH1cbiAgICBhY3RpdmF0ZVRyYXAodHJ1ZSk7XG4gICAgZGVmZXJBY3Rpb24oYWN0aXZhdGVUcmFwKTtcbiAgfSBlbHNlIHtcbiAgICBkZXRhY2hIYW5kbGVyKCk7XG4gICAgbGFzdEFjdGl2ZUZvY3VzID0gbnVsbDtcbiAgfVxufVxubWVkaXVtRm9jdXMuYXNzaWduU3luY01lZGl1bShvbkZvY3VzKTtcbm1lZGl1bUJsdXIuYXNzaWduTWVkaXVtKG9uQmx1cik7XG5tZWRpdW1FZmZlY3QuYXNzaWduTWVkaXVtKGZ1bmN0aW9uIChjYikge1xuICByZXR1cm4gY2IoZm9jdXNMb2NrQVBJKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgd2l0aFNpZGVFZmZlY3QocmVkdWNlUHJvcHNUb1N0YXRlLCBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50KShGb2N1c1dhdGNoZXIpOyIsICJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkge1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX3NldFByb3RvdHlwZU9mIGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZSh0LCBvKSB7XG4gIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdCwgc2V0UHJvdG90eXBlT2YodCwgbyk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHNMb29zZSBhcyBkZWZhdWx0IH07IiwgImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxuZXhwb3J0IHsgdG9QcmltaXRpdmUgYXMgZGVmYXVsdCB9OyIsICJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlJztcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHknO1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIHdpdGhTaWRlRWZmZWN0KHJlZHVjZVByb3BzVG9TdGF0ZSwgaGFuZGxlU3RhdGVDaGFuZ2VPbkNsaWVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKHR5cGVvZiByZWR1Y2VQcm9wc1RvU3RhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcmVkdWNlUHJvcHNUb1N0YXRlIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShXcmFwcGVkQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoV3JhcHBlZENvbXBvbmVudCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlb2YgV3JhcHBlZENvbXBvbmVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFdyYXBwZWRDb21wb25lbnQgdG8gYmUgYSBSZWFjdCBjb21wb25lbnQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1vdW50ZWRJbnN0YW5jZXMgPSBbXTtcbiAgICB2YXIgc3RhdGU7XG5cbiAgICBmdW5jdGlvbiBlbWl0Q2hhbmdlKCkge1xuICAgICAgc3RhdGUgPSByZWR1Y2VQcm9wc1RvU3RhdGUobW91bnRlZEluc3RhbmNlcy5tYXAoZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5wcm9wcztcbiAgICAgIH0pKTtcbiAgICAgIGhhbmRsZVN0YXRlQ2hhbmdlT25DbGllbnQoc3RhdGUpO1xuICAgIH1cblxuICAgIHZhciBTaWRlRWZmZWN0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgICAgX2luaGVyaXRzTG9vc2UoU2lkZUVmZmVjdCwgX1B1cmVDb21wb25lbnQpO1xuXG4gICAgICBmdW5jdGlvbiBTaWRlRWZmZWN0KCkge1xuICAgICAgICByZXR1cm4gX1B1cmVDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgdG8gdXNlIGRpc3BsYXlOYW1lIG9mIHdyYXBwZWQgY29tcG9uZW50XG4gICAgICBTaWRlRWZmZWN0LnBlZWsgPSBmdW5jdGlvbiBwZWVrKCkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9O1xuXG4gICAgICB2YXIgX3Byb3RvID0gU2lkZUVmZmVjdC5wcm90b3R5cGU7XG5cbiAgICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBtb3VudGVkSW5zdGFuY2VzLnB1c2godGhpcyk7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAgIGVtaXRDaGFuZ2UoKTtcbiAgICAgIH07XG5cbiAgICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICB2YXIgaW5kZXggPSBtb3VudGVkSW5zdGFuY2VzLmluZGV4T2YodGhpcyk7XG4gICAgICAgIG1vdW50ZWRJbnN0YW5jZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgZW1pdENoYW5nZSgpO1xuICAgICAgfTtcblxuICAgICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIHRoaXMucHJvcHMpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFNpZGVFZmZlY3Q7XG4gICAgfShQdXJlQ29tcG9uZW50KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShTaWRlRWZmZWN0LCBcImRpc3BsYXlOYW1lXCIsIFwiU2lkZUVmZmVjdChcIiArIGdldERpc3BsYXlOYW1lKFdyYXBwZWRDb21wb25lbnQpICsgXCIpXCIpO1xuXG4gICAgcmV0dXJuIFNpZGVFZmZlY3Q7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTaWRlRWZmZWN0O1xuIiwgIi8qXG5JRTExIHN1cHBvcnRcbiAqL1xuZXhwb3J0IHZhciB0b0FycmF5ID0gZnVuY3Rpb24gKGEpIHtcbiAgICB2YXIgcmV0ID0gQXJyYXkoYS5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkge1xuICAgICAgICByZXRbaV0gPSBhW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufTtcbmV4cG9ydCB2YXIgYXNBcnJheSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAoQXJyYXkuaXNBcnJheShhKSA/IGEgOiBbYV0pOyB9O1xuZXhwb3J0IHZhciBnZXRGaXJzdCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiAoQXJyYXkuaXNBcnJheShhKSA/IGFbMF0gOiBhKTsgfTtcbiIsICJpbXBvcnQgeyBGT0NVU19OT19BVVRPRk9DVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xudmFyIGlzRWxlbWVudEhpZGRlbiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gd2UgY2FuIG1lYXN1cmUgb25seSBcImVsZW1lbnRzXCJcbiAgICAvLyBjb25zaWRlciBvdGhlcnMgYXMgXCJ2aXNpYmxlXCJcbiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpO1xuICAgIGlmICghY29tcHV0ZWRTdHlsZSB8fCAhY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2Rpc3BsYXknKSA9PT0gJ25vbmUnIHx8IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAnaGlkZGVuJyk7XG59O1xudmFyIGdldFBhcmVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgY2FuIGFsc28gcG9pbnQgb24gU2hhZG93Um9vdC4gSW4gdGhpcyBjYXNlIC5ob3N0IHdpbGwgcG9pbnQgb24gdGhlIG5leHQgbm9kZVxuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREVcbiAgICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLmhvc3RcbiAgICAgICAgOiBub2RlLnBhcmVudE5vZGU7XG59O1xudmFyIGlzVG9wTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBub2RlID09PSBkb2N1bWVudCB8fCAobm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpO1xufTtcbnZhciBpc0luZXJ0ID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuaGFzQXR0cmlidXRlKCdpbmVydCcpOyB9O1xuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvamVzdC1kb20vYmxvYi9tYWluL3NyYy90by1iZS12aXNpYmxlLmpzXG4gKi9cbnZhciBpc1Zpc2libGVVbmNhY2hlZCA9IGZ1bmN0aW9uIChub2RlLCBjaGVja1BhcmVudCkge1xuICAgIHJldHVybiAhbm9kZSB8fCBpc1RvcE5vZGUobm9kZSkgfHwgKCFpc0VsZW1lbnRIaWRkZW4obm9kZSkgJiYgIWlzSW5lcnQobm9kZSkgJiYgY2hlY2tQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSkpO1xufTtcbmV4cG9ydCB2YXIgaXNWaXNpYmxlQ2FjaGVkID0gZnVuY3Rpb24gKHZpc2liaWxpdHlDYWNoZSwgbm9kZSkge1xuICAgIHZhciBjYWNoZWQgPSB2aXNpYmlsaXR5Q2FjaGUuZ2V0KG5vZGUpO1xuICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gaXNWaXNpYmxlVW5jYWNoZWQobm9kZSwgaXNWaXNpYmxlQ2FjaGVkLmJpbmQodW5kZWZpbmVkLCB2aXNpYmlsaXR5Q2FjaGUpKTtcbiAgICB2aXNpYmlsaXR5Q2FjaGUuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgaXNBdXRvRm9jdXNBbGxvd2VkVW5jYWNoZWQgPSBmdW5jdGlvbiAobm9kZSwgY2hlY2tQYXJlbnQpIHtcbiAgICByZXR1cm4gbm9kZSAmJiAhaXNUb3BOb2RlKG5vZGUpID8gKGlzQXV0b0ZvY3VzQWxsb3dlZChub2RlKSA/IGNoZWNrUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpIDogZmFsc2UpIDogdHJ1ZTtcbn07XG5leHBvcnQgdmFyIGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZCA9IGZ1bmN0aW9uIChjYWNoZSwgbm9kZSkge1xuICAgIHZhciBjYWNoZWQgPSBjYWNoZS5nZXQobm9kZSk7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBpc0F1dG9Gb2N1c0FsbG93ZWRVbmNhY2hlZChub2RlLCBpc0F1dG9Gb2N1c0FsbG93ZWRDYWNoZWQuYmluZCh1bmRlZmluZWQsIGNhY2hlKSk7XG4gICAgY2FjaGUuc2V0KG5vZGUsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgdmFyIGdldERhdGFzZXQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbm9kZS5kYXRhc2V0O1xufTtcbmV4cG9ydCB2YXIgaXNIVE1MQnV0dG9uRWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBub2RlLnRhZ05hbWUgPT09ICdCVVRUT04nOyB9O1xuZXhwb3J0IHZhciBpc0hUTUxJbnB1dEVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZS50YWdOYW1lID09PSAnSU5QVVQnOyB9O1xuZXhwb3J0IHZhciBpc1JhZGlvRWxlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIGlzSFRNTElucHV0RWxlbWVudChub2RlKSAmJiBub2RlLnR5cGUgPT09ICdyYWRpbyc7XG59O1xuZXhwb3J0IHZhciBub3RIaWRkZW5JbnB1dCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuICEoKGlzSFRNTElucHV0RWxlbWVudChub2RlKSB8fCBpc0hUTUxCdXR0b25FbGVtZW50KG5vZGUpKSAmJiAobm9kZS50eXBlID09PSAnaGlkZGVuJyB8fCBub2RlLmRpc2FibGVkKSk7XG59O1xuZXhwb3J0IHZhciBpc0F1dG9Gb2N1c0FsbG93ZWQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBhdHRyaWJ1dGUgPSBub2RlLmdldEF0dHJpYnV0ZShGT0NVU19OT19BVVRPRk9DVVMpO1xuICAgIHJldHVybiAhW3RydWUsICd0cnVlJywgJyddLmluY2x1ZGVzKGF0dHJpYnV0ZSk7XG59O1xuZXhwb3J0IHZhciBpc0d1YXJkID0gZnVuY3Rpb24gKG5vZGUpIHsgdmFyIF9hOyByZXR1cm4gQm9vbGVhbihub2RlICYmICgoX2EgPSBnZXREYXRhc2V0KG5vZGUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXNHdWFyZCkpOyB9O1xuZXhwb3J0IHZhciBpc05vdEFHdWFyZCA9IGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiAhaXNHdWFyZChub2RlKTsgfTtcbmV4cG9ydCB2YXIgaXNEZWZpbmVkID0gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIEJvb2xlYW4oeCk7IH07XG4iLCAiaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuZXhwb3J0IHZhciB0YWJTb3J0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgYVRhYiA9IE1hdGgubWF4KDAsIGEudGFiSW5kZXgpO1xuICAgIHZhciBiVGFiID0gTWF0aC5tYXgoMCwgYi50YWJJbmRleCk7XG4gICAgdmFyIHRhYkRpZmYgPSBhVGFiIC0gYlRhYjtcbiAgICB2YXIgaW5kZXhEaWZmID0gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgaWYgKHRhYkRpZmYpIHtcbiAgICAgICAgaWYgKCFhVGFiKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJUYWIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFiRGlmZiB8fCBpbmRleERpZmY7XG59O1xudmFyIGdldFRhYkluZGV4ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAobm9kZS50YWJJbmRleCA8IDApIHtcbiAgICAgICAgLy8gYWxsIFwiZm9jdXNhYmxlXCIgZWxlbWVudHMgYXJlIGFscmVhZHkgcHJlc2VsZWN0ZWRcbiAgICAgICAgLy8gYnV0IHNvbWUgbWlnaHQgaGF2ZSBpbXBsaWNpdCBuZWdhdGl2ZSB0YWJJbmRleFxuICAgICAgICAvLyByZXR1cm4gMCBmb3IgPGF1ZGlvIHdpdGhvdXQgdGFiSW5kZXggYXR0cmlidXRlIC0gaXQgaXMgXCJ0YWJiYWJsZVwiXG4gICAgICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlLnRhYkluZGV4O1xufTtcbmV4cG9ydCB2YXIgb3JkZXJCeVRhYkluZGV4ID0gZnVuY3Rpb24gKG5vZGVzLCBmaWx0ZXJOZWdhdGl2ZSwga2VlcEd1YXJkcykge1xuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSBnZXRUYWJJbmRleChub2RlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICB0YWJJbmRleDoga2VlcEd1YXJkcyAmJiB0YWJJbmRleCA9PT0gLTEgPyAoKG5vZGUuZGF0YXNldCB8fCB7fSkuZm9jdXNHdWFyZCA/IDAgOiAtMSkgOiB0YWJJbmRleCxcbiAgICAgICAgfTtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7IHJldHVybiAhZmlsdGVyTmVnYXRpdmUgfHwgZGF0YS50YWJJbmRleCA+PSAwOyB9KVxuICAgICAgICAuc29ydCh0YWJTb3J0KTtcbn07XG4iLCAiLyoqXG4gKiBsaXN0IG9mIHRoZSBvYmplY3QgdG8gYmUgY29uc2lkZXJlZCBhcyBmb2N1c2FibGVcbiAqL1xuZXhwb3J0IHZhciB0YWJiYWJsZXMgPSBbXG4gICAgJ2J1dHRvbjplbmFibGVkJyxcbiAgICAnc2VsZWN0OmVuYWJsZWQnLFxuICAgICd0ZXh0YXJlYTplbmFibGVkJyxcbiAgICAnaW5wdXQ6ZW5hYmxlZCcsXG4gICAgLy8gZWxlbWVudHMgd2l0aCBleHBsaWNpdCByb2xlcyB3aWxsIGFsc28gdXNlIGV4cGxpY2l0IHRhYmluZGV4XG4gICAgLy8gJ1tyb2xlPVwiYnV0dG9uXCJdJyxcbiAgICAnYVtocmVmXScsXG4gICAgJ2FyZWFbaHJlZl0nLFxuICAgICdzdW1tYXJ5JyxcbiAgICAnaWZyYW1lJyxcbiAgICAnb2JqZWN0JyxcbiAgICAnZW1iZWQnLFxuICAgICdhdWRpb1tjb250cm9sc10nLFxuICAgICd2aWRlb1tjb250cm9sc10nLFxuICAgICdbdGFiaW5kZXhdJyxcbiAgICAnW2NvbnRlbnRlZGl0YWJsZV0nLFxuICAgICdbYXV0b2ZvY3VzXScsXG5dO1xuIiwgImltcG9ydCB7IEZPQ1VTX0FVVE8gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vYXJyYXknO1xuaW1wb3J0IHsgdGFiYmFibGVzIH0gZnJvbSAnLi90YWJiYWJsZXMnO1xudmFyIHF1ZXJ5VGFiYmFibGVzID0gdGFiYmFibGVzLmpvaW4oJywnKTtcbnZhciBxdWVyeUd1YXJkVGFiYmFibGVzID0gXCJcIi5jb25jYXQocXVlcnlUYWJiYWJsZXMsIFwiLCBbZGF0YS1mb2N1cy1ndWFyZF1cIik7XG52YXIgZ2V0Rm9jdXNhYmxlc1dpdGhTaGFkb3dEb20gPSBmdW5jdGlvbiAocGFyZW50LCB3aXRoR3VhcmRzKSB7XG4gICAgcmV0dXJuIHRvQXJyYXkoKHBhcmVudC5zaGFkb3dSb290IHx8IHBhcmVudCkuY2hpbGRyZW4pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBjaGlsZCkge1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChjaGlsZC5tYXRjaGVzKHdpdGhHdWFyZHMgPyBxdWVyeUd1YXJkVGFiYmFibGVzIDogcXVlcnlUYWJiYWJsZXMpID8gW2NoaWxkXSA6IFtdLCBnZXRGb2N1c2FibGVzV2l0aFNoYWRvd0RvbShjaGlsZCkpO1xuICAgIH0sIFtdKTtcbn07XG52YXIgZ2V0Rm9jdXNhYmxlc1dpdGhJRnJhbWUgPSBmdW5jdGlvbiAocGFyZW50LCB3aXRoR3VhcmRzKSB7XG4gICAgdmFyIF9hO1xuICAgIC8vIGNvbnRlbnREb2N1bWVudCBvZiBpZnJhbWUgd2lsbCBiZSBudWxsIGlmIGN1cnJlbnQgb3JpZ2luIGNhbm5vdCBhY2Nlc3MgaXRcbiAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgJiYgKChfYSA9IHBhcmVudC5jb250ZW50RG9jdW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5ib2R5KSkge1xuICAgICAgICByZXR1cm4gZ2V0Rm9jdXNhYmxlcyhbcGFyZW50LmNvbnRlbnREb2N1bWVudC5ib2R5XSwgd2l0aEd1YXJkcyk7XG4gICAgfVxuICAgIHJldHVybiBbcGFyZW50XTtcbn07XG5leHBvcnQgdmFyIGdldEZvY3VzYWJsZXMgPSBmdW5jdGlvbiAocGFyZW50cywgd2l0aEd1YXJkcykge1xuICAgIHJldHVybiBwYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgZm9jdXNhYmxlV2l0aFNoYWRvd0RvbSA9IGdldEZvY3VzYWJsZXNXaXRoU2hhZG93RG9tKHBhcmVudCwgd2l0aEd1YXJkcyk7XG4gICAgICAgIHZhciBmb2N1c2FibGVXaXRoSWZyYW1lcyA9IChfYSA9IFtdKS5jb25jYXQuYXBwbHkoX2EsIGZvY3VzYWJsZVdpdGhTaGFkb3dEb20ubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBnZXRGb2N1c2FibGVzV2l0aElGcmFtZShub2RlLCB3aXRoR3VhcmRzKTsgfSkpO1xuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChcbiAgICAgICAgLy8gYWRkIGFsbCB0YWJiYWJsZXMgaW5zaWRlIGFuZCB3aXRoaW4gc2hhZG93IERPTXMgaW4gRE9NIG9yZGVyXG4gICAgICAgIGZvY3VzYWJsZVdpdGhJZnJhbWVzLCBcbiAgICAgICAgLy8gYWRkIGlmIG5vZGUgaXMgdGFiYmFibGUgaXRzZWxmXG4gICAgICAgIHBhcmVudC5wYXJlbnROb2RlXG4gICAgICAgICAgICA/IHRvQXJyYXkocGFyZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeVRhYmJhYmxlcykpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm9kZSA9PT0gcGFyZW50OyB9KVxuICAgICAgICAgICAgOiBbXSk7XG4gICAgfSwgW10pO1xufTtcbi8qKlxuICogcmV0dXJuIGEgbGlzdCBvZiBmb2N1c2FibGUgbm9kZXMgd2l0aGluIGFuIGFyZWEgbWFya2VkIGFzIFwiYXV0by1mb2N1c2FibGVcIlxuICogQHBhcmFtIHBhcmVudFxuICovXG5leHBvcnQgdmFyIGdldFBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgIHZhciBwYXJlbnRGb2N1cyA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW1wiLmNvbmNhdChGT0NVU19BVVRPLCBcIl1cIikpO1xuICAgIHJldHVybiB0b0FycmF5KHBhcmVudEZvY3VzKVxuICAgICAgICAubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBnZXRGb2N1c2FibGVzKFtub2RlXSk7IH0pXG4gICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbm9kZXMpIHsgcmV0dXJuIGFjYy5jb25jYXQobm9kZXMpOyB9LCBbXSk7XG59O1xuIiwgImltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2FycmF5JztcbmltcG9ydCB7IGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZCwgaXNWaXNpYmxlQ2FjaGVkLCBub3RIaWRkZW5JbnB1dCB9IGZyb20gJy4vaXMnO1xuaW1wb3J0IHsgb3JkZXJCeVRhYkluZGV4IH0gZnJvbSAnLi90YWJPcmRlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVzLCBnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyB9IGZyb20gJy4vdGFiVXRpbHMnO1xuLyoqXG4gKiBnaXZlbiBsaXN0IG9mIGZvY3VzYWJsZSBlbGVtZW50cyBrZWVwcyB0aGUgb25lcyB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoXG4gKiBAcGFyYW0gbm9kZXNcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGVcbiAqL1xuZXhwb3J0IHZhciBmaWx0ZXJGb2N1c2FibGUgPSBmdW5jdGlvbiAobm9kZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiBpc1Zpc2libGVDYWNoZWQodmlzaWJpbGl0eUNhY2hlLCBub2RlKTsgfSlcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gbm90SGlkZGVuSW5wdXQobm9kZSk7IH0pO1xufTtcbmV4cG9ydCB2YXIgZmlsdGVyQXV0b0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2RlcywgY2FjaGUpIHtcbiAgICBpZiAoY2FjaGUgPT09IHZvaWQgMCkgeyBjYWNoZSA9IG5ldyBNYXAoKTsgfVxuICAgIHJldHVybiB0b0FycmF5KG5vZGVzKS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGlzQXV0b0ZvY3VzQWxsb3dlZENhY2hlZChjYWNoZSwgbm9kZSk7IH0pO1xufTtcbi8qKlxuICogIV9fV0FSTklOR19fISBMb3cgbGV2ZWwgQVBJLlxuICogQHJldHVybnMgYWxsIHRhYmJhYmxlIG5vZGVzXG4gKlxuICogQHNlZSB7QGxpbmsgZ2V0Rm9jdXNhYmxlTm9kZXN9IHRvIGdldCBhbnkgZm9jdXNhYmxlIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gdG9wTm9kZXMgLSBhcnJheSBvZiB0b3AgbGV2ZWwgSFRNTEVsZW1lbnRzIHRvIHNlYXJjaCBpbnNpZGVcbiAqIEBwYXJhbSB2aXNpYmlsaXR5Q2FjaGUgLSBhbiBjYWNoZSB0byBzdG9yZSBpbnRlcm1lZGlhdGUgbWVhc3VyZW1lbnRzLiBFeHBlY3RlZCB0byBiZSBhIGZyZXNoIGBuZXcgTWFwYCBvbiBldmVyeSBjYWxsXG4gKi9cbmV4cG9ydCB2YXIgZ2V0VGFiYmFibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlcywgdmlzaWJpbGl0eUNhY2hlLCB3aXRoR3VhcmRzKSB7XG4gICAgcmV0dXJuIG9yZGVyQnlUYWJJbmRleChmaWx0ZXJGb2N1c2FibGUoZ2V0Rm9jdXNhYmxlcyh0b3BOb2Rlcywgd2l0aEd1YXJkcyksIHZpc2liaWxpdHlDYWNoZSksIHRydWUsIHdpdGhHdWFyZHMpO1xufTtcbi8qKlxuICogIV9fV0FSTklOR19fISBMb3cgbGV2ZWwgQVBJLlxuICpcbiAqIEByZXR1cm5zIGFueXRoaW5nIFwiZm9jdXNhYmxlXCIsIG5vdCBvbmx5IHRhYmJhYmxlLiBUaGUgZGlmZmVyZW5jZSBpcyBpbiBgdGFiSW5kZXg9LTFgXG4gKiAod2l0aG91dCBndWFyZHMsIGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIGV2ZXIgZm9jdXNlZClcbiAqXG4gKiBAc2VlIHtAbGluayBnZXRUYWJiYWJsZU5vZGVzfSB0byBnZXQgb25seSB0YWJibGUgbm9kZXMgZWxlbWVudFxuICpcbiAqIEBwYXJhbSB0b3BOb2RlcyAtIGFycmF5IG9mIHRvcCBsZXZlbCBIVE1MRWxlbWVudHMgdG8gc2VhcmNoIGluc2lkZVxuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZSAtIGFuIGNhY2hlIHRvIHN0b3JlIGludGVybWVkaWF0ZSBtZWFzdXJlbWVudHMuIEV4cGVjdGVkIHRvIGJlIGEgZnJlc2ggYG5ldyBNYXBgIG9uIGV2ZXJ5IGNhbGxcbiAqL1xuZXhwb3J0IHZhciBnZXRGb2N1c2FibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlcywgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIG9yZGVyQnlUYWJJbmRleChmaWx0ZXJGb2N1c2FibGUoZ2V0Rm9jdXNhYmxlcyh0b3BOb2RlcyksIHZpc2liaWxpdHlDYWNoZSksIGZhbHNlKTtcbn07XG4vKipcbiAqIHJldHVybiBsaXN0IG9mIG5vZGVzIHdoaWNoIGFyZSBleHBlY3RlZCB0byBiZSBhdXRvLWZvY3VzZWRcbiAqIEBwYXJhbSB0b3BOb2RlXG4gKiBAcGFyYW0gdmlzaWJpbGl0eUNhY2hlXG4gKi9cbmV4cG9ydCB2YXIgcGFyZW50QXV0b2ZvY3VzYWJsZXMgPSBmdW5jdGlvbiAodG9wTm9kZSwgdmlzaWJpbGl0eUNhY2hlKSB7XG4gICAgcmV0dXJuIGZpbHRlckZvY3VzYWJsZShnZXRQYXJlbnRBdXRvZm9jdXNhYmxlcyh0b3BOb2RlKSwgdmlzaWJpbGl0eUNhY2hlKTtcbn07XG4vKlxuICogRGV0ZXJtaW5lcyBpZiBlbGVtZW50IGlzIGNvbnRhaW5lZCBpbiBzY29wZSwgaW5jbHVkaW5nIG5lc3RlZCBzaGFkb3cgRE9Nc1xuICovXG5leHBvcnQgdmFyIGNvbnRhaW5zID0gZnVuY3Rpb24gKHNjb3BlLCBlbGVtZW50KSB7XG4gICAgaWYgKHNjb3BlLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zKHNjb3BlLnNoYWRvd1Jvb3QsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzY29wZSkuY29udGFpbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNjb3BlKS5jb250YWlucy5jYWxsKHNjb3BlLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvQXJyYXkoc2NvcGUuY2hpbGRyZW4pLnNvbWUoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHZhciBpZnJhbWVCb2R5ID0gKF9hID0gY2hpbGQuY29udGVudERvY3VtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYm9keTtcbiAgICAgICAgICAgICAgICBpZiAoaWZyYW1lQm9keSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbnMoaWZyYW1lQm9keSwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWlucyhjaGlsZCwgZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHsgRk9DVVNfRElTQUJMRUQsIEZPQ1VTX0dST1VQIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFzQXJyYXksIHRvQXJyYXkgfSBmcm9tICcuL2FycmF5Jztcbi8qKlxuICogaW4gY2FzZSBvZiBtdWx0aXBsZSBub2RlcyBuZXN0ZWQgaW5zaWRlIGVhY2ggb3RoZXJcbiAqIGtlZXBzIG9ubHkgdG9wIG9uZXNcbiAqIHRoaXMgaXMgTyhubG9nbilcbiAqIEBwYXJhbSBub2Rlc1xuICogQHJldHVybnMgeyp9XG4gKi9cbnZhciBmaWx0ZXJOZXN0ZWQgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICB2YXIgY29udGFpbmVkID0gbmV3IFNldCgpO1xuICAgIHZhciBsID0gbm9kZXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSArPSAxKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IGw7IGogKz0gMSkge1xuICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gbm9kZXNbaV0uY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZXNbal0pO1xuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb250YWluZWQuYWRkKGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChwb3NpdGlvbiAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMpID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lZC5hZGQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoXywgaW5kZXgpIHsgcmV0dXJuICFjb250YWluZWQuaGFzKGluZGV4KTsgfSk7XG59O1xuLyoqXG4gKiBmaW5kcyB0b3AgbW9zdCBwYXJlbnQgZm9yIGEgbm9kZVxuICogQHBhcmFtIG5vZGVcbiAqIEByZXR1cm5zIHsqfVxuICovXG52YXIgZ2V0VG9wUGFyZW50ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlID8gZ2V0VG9wUGFyZW50KG5vZGUucGFyZW50Tm9kZSkgOiBub2RlO1xufTtcbi8qKlxuICogcmV0dXJucyBhbGwgXCJmb2N1cyBjb250YWluZXJzXCIgaW5zaWRlIGEgZ2l2ZW4gbm9kZVxuICogQHBhcmFtIG5vZGUgLSBub2RlIG9yIG5vZGVzIHRvIGxvb2sgaW5zaWRlXG4gKiBAcmV0dXJucyBFbGVtZW50W11cbiAqL1xuZXhwb3J0IHZhciBnZXRBbGxBZmZlY3RlZE5vZGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgbm9kZXMgPSBhc0FycmF5KG5vZGUpO1xuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoQm9vbGVhbikucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGN1cnJlbnROb2RlKSB7XG4gICAgICAgIHZhciBncm91cCA9IGN1cnJlbnROb2RlLmdldEF0dHJpYnV0ZShGT0NVU19HUk9VUCk7XG4gICAgICAgIGFjYy5wdXNoLmFwcGx5KGFjYywgKGdyb3VwXG4gICAgICAgICAgICA/IGZpbHRlck5lc3RlZCh0b0FycmF5KGdldFRvcFBhcmVudChjdXJyZW50Tm9kZSkucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfR1JPVVAsIFwiPVxcXCJcIikuY29uY2F0KGdyb3VwLCBcIlxcXCJdOm5vdChbXCIpLmNvbmNhdChGT0NVU19ESVNBQkxFRCwgXCI9XFxcImRpc2FibGVkXFxcIl0pXCIpKSkpXG4gICAgICAgICAgICA6IFtjdXJyZW50Tm9kZV0pKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG59O1xuIiwgImV4cG9ydCB2YXIgc2FmZVByb2JlID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufTtcbiIsICIvKipcbiAqIHJldHVybnMgYWN0aXZlIGVsZW1lbnQgZnJvbSBkb2N1bWVudCBvciBmcm9tIG5lc3RlZCBzaGFkb3dkb21zXG4gKi9cbmltcG9ydCB7IHNhZmVQcm9iZSB9IGZyb20gJy4vc2FmZSc7XG4vKipcbiAqIHJldHVybnMgY3VycmVudCBhY3RpdmUgZWxlbWVudC4gSWYgdGhlIGFjdGl2ZSBlbGVtZW50IGlzIGEgXCJjb250YWluZXJcIiBpdHNlbGYoc2hhZG93Um9vdCBvciBpZnJhbWUpIHJldHVybnMgYWN0aXZlIGVsZW1lbnQgaW5zaWRlIGl0XG4gKiBAcGFyYW0gW2luRG9jdW1lbnRdXG4gKi9cbmV4cG9ydCB2YXIgZ2V0QWN0aXZlRWxlbWVudCA9IGZ1bmN0aW9uIChpbkRvY3VtZW50KSB7XG4gICAgaWYgKGluRG9jdW1lbnQgPT09IHZvaWQgMCkgeyBpbkRvY3VtZW50ID0gZG9jdW1lbnQ7IH1cbiAgICBpZiAoIWluRG9jdW1lbnQgfHwgIWluRG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGluRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gKGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdFxuICAgICAgICA/IGdldEFjdGl2ZUVsZW1lbnQoYWN0aXZlRWxlbWVudC5zaGFkb3dSb290KVxuICAgICAgICA6IGFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCAmJiBzYWZlUHJvYmUoZnVuY3Rpb24gKCkgeyByZXR1cm4gYWN0aXZlRWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50OyB9KVxuICAgICAgICAgICAgPyBnZXRBY3RpdmVFbGVtZW50KGFjdGl2ZUVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudClcbiAgICAgICAgICAgIDogYWN0aXZlRWxlbWVudCk7XG59O1xuIiwgImltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi91dGlscy9ET011dGlscyc7XG5pbXBvcnQgeyBnZXRBbGxBZmZlY3RlZE5vZGVzIH0gZnJvbSAnLi91dGlscy9hbGwtYWZmZWN0ZWQnO1xuaW1wb3J0IHsgZ2V0Rmlyc3QsIHRvQXJyYXkgfSBmcm9tICcuL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xudmFyIGZvY3VzSW5GcmFtZSA9IGZ1bmN0aW9uIChmcmFtZSwgYWN0aXZlRWxlbWVudCkgeyByZXR1cm4gZnJhbWUgPT09IGFjdGl2ZUVsZW1lbnQ7IH07XG52YXIgZm9jdXNJbnNpZGVJZnJhbWUgPSBmdW5jdGlvbiAodG9wTm9kZSwgYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybiBCb29sZWFuKHRvQXJyYXkodG9wTm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKSkuc29tZShmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZm9jdXNJbkZyYW1lKG5vZGUsIGFjdGl2ZUVsZW1lbnQpOyB9KSk7XG59O1xuLyoqXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSwgaWYgdGhlIGN1cnJlbnQgZm9jdXMgaXMgaW5zaWRlIGdpdmVuIG5vZGUgb3Igbm9kZXMuXG4gKiBTdXBwb3J0cyBub2RlcyBoaWRkZW4gaW5zaWRlIHNoYWRvd0RvbVxuICovXG5leHBvcnQgdmFyIGZvY3VzSW5zaWRlID0gZnVuY3Rpb24gKHRvcE5vZGUsIGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAvLyBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQgJiYgZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIGlmIChhY3RpdmVFbGVtZW50ID09PSB2b2lkIDApIHsgYWN0aXZlRWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoZ2V0Rmlyc3QodG9wTm9kZSkub3duZXJEb2N1bWVudCk7IH1cbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgKGFjdGl2ZUVsZW1lbnQuZGF0YXNldCAmJiBhY3RpdmVFbGVtZW50LmRhdGFzZXQuZm9jdXNHdWFyZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5zb21lKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHJldHVybiBjb250YWlucyhub2RlLCBhY3RpdmVFbGVtZW50KSB8fCBmb2N1c0luc2lkZUlmcmFtZShub2RlLCBhY3RpdmVFbGVtZW50KTtcbiAgICB9KTtcbn07XG4iLCAiaW1wb3J0IHsgRk9DVVNfQUxMT1cgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb250YWlucyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgZ2V0QWN0aXZlRWxlbWVudCB9IGZyb20gJy4vdXRpbHMvZ2V0QWN0aXZlRWxlbWVudCc7XG4vKipcbiAqIGNoZWNrcyBpZiBmb2N1cyBpcyBoaWRkZW4gRlJPTSB0aGUgZm9jdXMtbG9ja1xuICogaWUgY29udGFpbmVkIGluc2lkZSBhIG5vZGUgZm9jdXMtbG9jayBzaGFsbCBpZ25vcmVcbiAqXG4gKiBUaGlzIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBjb3VwbGVkIHdpdGgge0BsaW5rIEZPQ1VTX0FMTE9XfSBjb25zdGFudFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBmb2N1cyBpcyBjdXJyZW50bHkgaXMgaW4gXCJhbGxvd1wiIGFyZWFcbiAqL1xuZXhwb3J0IHZhciBmb2N1c0lzSGlkZGVuID0gZnVuY3Rpb24gKGluRG9jdW1lbnQpIHtcbiAgICBpZiAoaW5Eb2N1bWVudCA9PT0gdm9pZCAwKSB7IGluRG9jdW1lbnQgPSBkb2N1bWVudDsgfVxuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChpbkRvY3VtZW50KTtcbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyB0aGlzIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBGT0NVU19BTExPVyB3aXRoaW4gc2hhZG93IGRvbVxuICAgIHJldHVybiB0b0FycmF5KGluRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltcIi5jb25jYXQoRk9DVVNfQUxMT1csIFwiXVwiKSkpLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGNvbnRhaW5zKG5vZGUsIGFjdGl2ZUVsZW1lbnQpOyB9KTtcbn07XG4iLCAiaW1wb3J0IHsgaXNSYWRpb0VsZW1lbnQgfSBmcm9tICcuL2lzJztcbnZhciBmaW5kU2VsZWN0ZWRSYWRpbyA9IGZ1bmN0aW9uIChub2RlLCBub2Rlcykge1xuICAgIHJldHVybiBub2Rlc1xuICAgICAgICAuZmlsdGVyKGlzUmFkaW9FbGVtZW50KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwubmFtZSA9PT0gbm9kZS5uYW1lOyB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2hlY2tlZDsgfSlbMF0gfHwgbm9kZTtcbn07XG5leHBvcnQgdmFyIGNvcnJlY3ROb2RlID0gZnVuY3Rpb24gKG5vZGUsIG5vZGVzKSB7XG4gICAgaWYgKGlzUmFkaW9FbGVtZW50KG5vZGUpICYmIG5vZGUubmFtZSkge1xuICAgICAgICByZXR1cm4gZmluZFNlbGVjdGVkUmFkaW8obm9kZSwgbm9kZXMpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn07XG4vKipcbiAqIGdpdmluZyBhIHNldCBvZiByYWRpbyBpbnB1dHMga2VlcHMgb25seSBzZWxlY3RlZCAodGFiYmFibGUpIG9uZXNcbiAqIEBwYXJhbSBub2Rlc1xuICovXG5leHBvcnQgdmFyIGNvcnJlY3ROb2RlcyA9IGZ1bmN0aW9uIChub2Rlcykge1xuICAgIC8vIElFMTEgaGFzIG5vIFNldChhcnJheSkgY29uc3RydWN0b3JcbiAgICB2YXIgcmVzdWx0U2V0ID0gbmV3IFNldCgpO1xuICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlc3VsdFNldC5hZGQoY29ycmVjdE5vZGUobm9kZSwgbm9kZXMpKTsgfSk7XG4gICAgLy8gdXNpbmcgZmlsdGVyIHRvIHN1cHBvcnQgSUUxMVxuICAgIHJldHVybiBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIHJlc3VsdFNldC5oYXMobm9kZSk7IH0pO1xufTtcbiIsICJpbXBvcnQgeyBjb3JyZWN0Tm9kZSB9IGZyb20gJy4vY29ycmVjdEZvY3VzJztcbmV4cG9ydCB2YXIgcGlja0ZpcnN0Rm9jdXMgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICBpZiAobm9kZXNbMF0gJiYgbm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gY29ycmVjdE5vZGUobm9kZXNbMF0sIG5vZGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzWzBdO1xufTtcbmV4cG9ydCB2YXIgcGlja0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChub2Rlcywgbm9kZSkge1xuICAgIHJldHVybiBub2Rlcy5pbmRleE9mKGNvcnJlY3ROb2RlKG5vZGUsIG5vZGVzKSk7XG59O1xuIiwgImltcG9ydCB7IGNvcnJlY3ROb2RlcyB9IGZyb20gJy4vdXRpbHMvY29ycmVjdEZvY3VzJztcbmltcG9ydCB7IHBpY2tGb2N1c2FibGUgfSBmcm9tICcuL3V0aWxzL2ZpcnN0Rm9jdXMnO1xuaW1wb3J0IHsgaXNHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuZXhwb3J0IHZhciBORVdfRk9DVVMgPSAnTkVXX0ZPQ1VTJztcbi8qKlxuICogTWFpbiBzb2x2ZXIgZm9yIHRoZSBcImZpbmQgbmV4dCBmb2N1c1wiIHF1ZXN0aW9uXG4gKiBAcGFyYW0gaW5uZXJOb2RlcyAtIHVzZWQgdG8gY29udHJvbCBcInJldHVybiBmb2N1c1wiXG4gKiBAcGFyYW0gaW5uZXJUYWJiYWJsZXMgLSB1c2VkIHRvIGNvbnRyb2wgXCJhdXRvZm9jdXNcIlxuICogQHBhcmFtIG91dGVyTm9kZXNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50XG4gKiBAcGFyYW0gbGFzdE5vZGVcbiAqIEByZXR1cm5zIHtudW1iZXJ8c3RyaW5nfHVuZGVmaW5lZHwqfVxuICovXG5leHBvcnQgdmFyIG5ld0ZvY3VzID0gZnVuY3Rpb24gKGlubmVyTm9kZXMsIGlubmVyVGFiYmFibGVzLCBvdXRlck5vZGVzLCBhY3RpdmVFbGVtZW50LCBsYXN0Tm9kZSkge1xuICAgIHZhciBjbnQgPSBpbm5lck5vZGVzLmxlbmd0aDtcbiAgICB2YXIgZmlyc3RGb2N1cyA9IGlubmVyTm9kZXNbMF07XG4gICAgdmFyIGxhc3RGb2N1cyA9IGlubmVyTm9kZXNbY250IC0gMV07XG4gICAgdmFyIGlzT25HdWFyZCA9IGlzR3VhcmQoYWN0aXZlRWxlbWVudCk7XG4gICAgLy8gZm9jdXMgaXMgaW5zaWRlXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgaW5uZXJOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpID49IDApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gYWN0aXZlRWxlbWVudCAhPT0gdW5kZWZpbmVkID8gb3V0ZXJOb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIGxhc3RJbmRleCA9IGxhc3ROb2RlID8gb3V0ZXJOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IGFjdGl2ZUluZGV4O1xuICAgIHZhciBsYXN0Tm9kZUluc2lkZSA9IGxhc3ROb2RlID8gaW5uZXJOb2Rlcy5pbmRleE9mKGxhc3ROb2RlKSA6IC0xO1xuICAgIC8vIG5vIGFjdGl2ZSBmb2N1cyAob3IgZm9jdXMgaXMgb24gdGhlIGJvZHkpXG4gICAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSkge1xuICAgICAgICAvLyBrbm93biBmYWxsYmFja1xuICAgICAgICBpZiAobGFzdE5vZGVJbnNpZGUgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5FV19GT0NVUztcbiAgICB9XG4gICAgLy8gbmV3IGZvY3VzLCBub3RoaW5nIHRvIGNhbGN1bGF0ZVxuICAgIGlmIChsYXN0Tm9kZUluc2lkZSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIE5FV19GT0NVUztcbiAgICB9XG4gICAgdmFyIGluZGV4RGlmZiA9IGFjdGl2ZUluZGV4IC0gbGFzdEluZGV4O1xuICAgIHZhciBmaXJzdE5vZGVJbmRleCA9IG91dGVyTm9kZXMuaW5kZXhPZihmaXJzdEZvY3VzKTtcbiAgICB2YXIgbGFzdE5vZGVJbmRleCA9IG91dGVyTm9kZXMuaW5kZXhPZihsYXN0Rm9jdXMpO1xuICAgIHZhciBjb3JyZWN0ZWROb2RlcyA9IGNvcnJlY3ROb2RlcyhvdXRlck5vZGVzKTtcbiAgICB2YXIgY29ycmVjdGVkSW5kZXggPSBhY3RpdmVFbGVtZW50ICE9PSB1bmRlZmluZWQgPyBjb3JyZWN0ZWROb2Rlcy5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpIDogLTE7XG4gICAgdmFyIGNvcnJlY3RlZEluZGV4RGlmZiA9IGNvcnJlY3RlZEluZGV4IC0gKGxhc3ROb2RlID8gY29ycmVjdGVkTm9kZXMuaW5kZXhPZihsYXN0Tm9kZSkgOiBhY3RpdmVJbmRleCk7XG4gICAgLy8gb2xkIGZvY3VzXG4gICAgaWYgKCFpbmRleERpZmYgJiYgbGFzdE5vZGVJbnNpZGUgPj0gMCkge1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIC8vIG5vIHRhYmJhYmxlIGVsZW1lbnRzLCBhdXRvZm9jdXMgaXMgbm90IHBvc3NpYmxlXG4gICAgaWYgKGlubmVyVGFiYmFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBhbiBlZGdlIGNhc2Ugd2l0aCBubyB0YWJiYWJsZSBlbGVtZW50c1xuICAgICAgICAvLyByZXR1cm4gdGhlIGxhc3QgZm9jdXNhYmxlIG9uZVxuICAgICAgICAvLyB3aXRoIHNvbWUgcHJvYmFiaWxpdHkgdGhpcyB3aWxsIHByZXZlbnQgZm9jdXMgZnJvbSBjeWNsaW5nIGFjcm9zcyB0aGUgbG9jaywgYnV0IHRoZXJlIGlzIG5vIHRhYmJhbGUgZWxlbWVudHMgdG8gY3ljbGUgdG9cbiAgICAgICAgcmV0dXJuIGxhc3ROb2RlSW5zaWRlO1xuICAgIH1cbiAgICB2YXIgcmV0dXJuRmlyc3ROb2RlID0gcGlja0ZvY3VzYWJsZShpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlc1swXSk7XG4gICAgdmFyIHJldHVybkxhc3ROb2RlID0gcGlja0ZvY3VzYWJsZShpbm5lck5vZGVzLCBpbm5lclRhYmJhYmxlc1tpbm5lclRhYmJhYmxlcy5sZW5ndGggLSAxXSk7XG4gICAgLy8gZmlyc3QgZWxlbWVudFxuICAgIGlmIChhY3RpdmVJbmRleCA8PSBmaXJzdE5vZGVJbmRleCAmJiBpc09uR3VhcmQgJiYgTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkxhc3ROb2RlO1xuICAgIH1cbiAgICAvLyBsYXN0IGVsZW1lbnRcbiAgICBpZiAoYWN0aXZlSW5kZXggPj0gbGFzdE5vZGVJbmRleCAmJiBpc09uR3VhcmQgJiYgTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkZpcnN0Tm9kZTtcbiAgICB9XG4gICAgLy8ganVtcCBvdXQsIGJ1dCBub3Qgb24gdGhlIGd1YXJkXG4gICAgaWYgKGluZGV4RGlmZiAmJiBNYXRoLmFicyhjb3JyZWN0ZWRJbmRleERpZmYpID4gMSkge1xuICAgICAgICByZXR1cm4gbGFzdE5vZGVJbnNpZGU7XG4gICAgfVxuICAgIC8vIGZvY3VzIGFib3ZlIGxvY2tcbiAgICBpZiAoYWN0aXZlSW5kZXggPD0gZmlyc3ROb2RlSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybkxhc3ROb2RlO1xuICAgIH1cbiAgICAvLyBmb2N1cyBiZWxvdyBsb2NrXG4gICAgaWYgKGFjdGl2ZUluZGV4ID4gbGFzdE5vZGVJbmRleCkge1xuICAgICAgICByZXR1cm4gcmV0dXJuRmlyc3ROb2RlO1xuICAgIH1cbiAgICAvLyBpbmRleCBpcyBpbnNpZGUgdGFiIG9yZGVyLCBidXQgb3V0c2lkZSBMb2NrXG4gICAgaWYgKGluZGV4RGlmZikge1xuICAgICAgICBpZiAoTWF0aC5hYnMoaW5kZXhEaWZmKSA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0Tm9kZUluc2lkZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGNudCArIGxhc3ROb2RlSW5zaWRlICsgaW5kZXhEaWZmKSAlIGNudDtcbiAgICB9XG4gICAgLy8gZG8gbm90aGluZ1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgImltcG9ydCB7IGZpbHRlckF1dG9Gb2N1c2FibGUgfSBmcm9tICcuL0RPTXV0aWxzJztcbmltcG9ydCB7IHBpY2tGaXJzdEZvY3VzIH0gZnJvbSAnLi9maXJzdEZvY3VzJztcbmltcG9ydCB7IGdldERhdGFzZXQgfSBmcm9tICcuL2lzJztcbnZhciBmaW5kQXV0b0ZvY3VzZWQgPSBmdW5jdGlvbiAoYXV0b0ZvY3VzYWJsZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgYXV0b2ZvY3VzID0gKF9hID0gZ2V0RGF0YXNldChub2RlKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmF1dG9mb2N1cztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBub2RlLmF1dG9mb2N1cyB8fFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIChhdXRvZm9jdXMgIT09IHVuZGVmaW5lZCAmJiBhdXRvZm9jdXMgIT09ICdmYWxzZScpIHx8XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgYXV0b0ZvY3VzYWJsZXMuaW5kZXhPZihub2RlKSA+PSAwKTtcbiAgICB9O1xufTtcbmV4cG9ydCB2YXIgcGlja0F1dG9mb2N1cyA9IGZ1bmN0aW9uIChub2Rlc0luZGV4ZXMsIG9yZGVyZWROb2RlcywgZ3JvdXBzKSB7XG4gICAgdmFyIG5vZGVzID0gbm9kZXNJbmRleGVzLm1hcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9KTtcbiAgICB2YXIgYXV0b0ZvY3VzYWJsZSA9IGZpbHRlckF1dG9Gb2N1c2FibGUobm9kZXMuZmlsdGVyKGZpbmRBdXRvRm9jdXNlZChncm91cHMpKSk7XG4gICAgaWYgKGF1dG9Gb2N1c2FibGUgJiYgYXV0b0ZvY3VzYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHBpY2tGaXJzdEZvY3VzKGF1dG9Gb2N1c2FibGUpO1xuICAgIH1cbiAgICByZXR1cm4gcGlja0ZpcnN0Rm9jdXMoZmlsdGVyQXV0b0ZvY3VzYWJsZShvcmRlcmVkTm9kZXMpKTtcbn07XG4iLCAiaW1wb3J0IHsgcGFyZW50QXV0b2ZvY3VzYWJsZXMgfSBmcm9tICcuL0RPTXV0aWxzJztcbmltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi9ET011dGlscyc7XG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnLi9hcnJheSc7XG52YXIgZ2V0UGFyZW50cyA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnRzKSB7XG4gICAgaWYgKHBhcmVudHMgPT09IHZvaWQgMCkgeyBwYXJlbnRzID0gW107IH1cbiAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBnZXRQYXJlbnRzKG5vZGUucGFyZW50Tm9kZS5ob3N0IHx8IG5vZGUucGFyZW50Tm9kZSwgcGFyZW50cyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xufTtcbi8qKlxuICogZmluZHMgYSBwYXJlbnQgZm9yIGJvdGggbm9kZUEgYW5kIG5vZGVCXG4gKiBAcGFyYW0gbm9kZUFcbiAqIEBwYXJhbSBub2RlQlxuICogQHJldHVybnMge2Jvb2xlYW58Kn1cbiAqL1xuZXhwb3J0IHZhciBnZXRDb21tb25QYXJlbnQgPSBmdW5jdGlvbiAobm9kZUEsIG5vZGVCKSB7XG4gICAgdmFyIHBhcmVudHNBID0gZ2V0UGFyZW50cyhub2RlQSk7XG4gICAgdmFyIHBhcmVudHNCID0gZ2V0UGFyZW50cyhub2RlQik7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHNBLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBjdXJyZW50UGFyZW50ID0gcGFyZW50c0FbaV07XG4gICAgICAgIGlmIChwYXJlbnRzQi5pbmRleE9mKGN1cnJlbnRQYXJlbnQpID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50UGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgdmFyIGdldFRvcENvbW1vblBhcmVudCA9IGZ1bmN0aW9uIChiYXNlQWN0aXZlRWxlbWVudCwgbGVmdEVudHJ5LCByaWdodEVudHJpZXMpIHtcbiAgICB2YXIgYWN0aXZlRWxlbWVudHMgPSBhc0FycmF5KGJhc2VBY3RpdmVFbGVtZW50KTtcbiAgICB2YXIgbGVmdEVudHJpZXMgPSBhc0FycmF5KGxlZnRFbnRyeSk7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBhY3RpdmVFbGVtZW50c1swXTtcbiAgICB2YXIgdG9wQ29tbW9uID0gZmFsc2U7XG4gICAgbGVmdEVudHJpZXMuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIHRvcENvbW1vbiA9IGdldENvbW1vblBhcmVudCh0b3BDb21tb24gfHwgZW50cnksIGVudHJ5KSB8fCB0b3BDb21tb247XG4gICAgICAgIHJpZ2h0RW50cmllcy5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoc3ViRW50cnkpIHtcbiAgICAgICAgICAgIHZhciBjb21tb24gPSBnZXRDb21tb25QYXJlbnQoYWN0aXZlRWxlbWVudCwgc3ViRW50cnkpO1xuICAgICAgICAgICAgaWYgKGNvbW1vbikge1xuICAgICAgICAgICAgICAgIGlmICghdG9wQ29tbW9uIHx8IGNvbnRhaW5zKGNvbW1vbiwgdG9wQ29tbW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0b3BDb21tb24gPSBjb21tb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b3BDb21tb24gPSBnZXRDb21tb25QYXJlbnQoY29tbW9uLCB0b3BDb21tb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gVE9ETzogYWRkIGFzc2VydCBoZXJlP1xuICAgIHJldHVybiB0b3BDb21tb247XG59O1xuLyoqXG4gKiByZXR1cm4gbGlzdCBvZiBub2RlcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gYmUgYXV0b2ZvY3VzZWQgaW5zaWRlIGEgZ2l2ZW4gdG9wIG5vZGVzXG4gKiBAcGFyYW0gZW50cmllc1xuICogQHBhcmFtIHZpc2liaWxpdHlDYWNoZVxuICovXG5leHBvcnQgdmFyIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzID0gZnVuY3Rpb24gKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkge1xuICAgIHJldHVybiBlbnRyaWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBub2RlKSB7IHJldHVybiBhY2MuY29uY2F0KHBhcmVudEF1dG9mb2N1c2FibGVzKG5vZGUsIHZpc2liaWxpdHlDYWNoZSkpOyB9LCBbXSk7XG59O1xuIiwgImltcG9ydCB7IE5FV19GT0NVUywgbmV3Rm9jdXMgfSBmcm9tICcuL3NvbHZlcic7XG5pbXBvcnQgeyBnZXRGb2N1c2FibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGFzQXJyYXksIGdldEZpcnN0IH0gZnJvbSAnLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBwaWNrQXV0b2ZvY3VzIH0gZnJvbSAnLi91dGlscy9hdXRvLWZvY3VzJztcbmltcG9ydCB7IGdldEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2dldEFjdGl2ZUVsZW1lbnQnO1xuaW1wb3J0IHsgaXNEZWZpbmVkLCBpc05vdEFHdWFyZCB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMsIGdldFRvcENvbW1vblBhcmVudCB9IGZyb20gJy4vdXRpbHMvcGFyZW50aW5nJztcbnZhciByZW9yZGVyTm9kZXMgPSBmdW5jdGlvbiAoc3JjTm9kZXMsIGRzdE5vZGVzKSB7XG4gICAgdmFyIHJlbWFwID0gbmV3IE1hcCgpO1xuICAgIC8vIG5vIFNldChkc3ROb2RlcykgZm9yIElFMTEgOihcbiAgICBkc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHkpIHsgcmV0dXJuIHJlbWFwLnNldChlbnRpdHkubm9kZSwgZW50aXR5KTsgfSk7XG4gICAgLy8gcmVtYXAgdG8gZHN0Tm9kZXNcbiAgICByZXR1cm4gc3JjTm9kZXMubWFwKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiByZW1hcC5nZXQobm9kZSk7IH0pLmZpbHRlcihpc0RlZmluZWQpO1xufTtcbi8qKlxuICogY29udGFpbnMgdGhlIG1haW4gbG9naWMgb2YgdGhlIGBmb2N1cy1sb2NrYCBwYWNrYWdlLlxuICpcbiAqICEgeW91IHByb2JhYmx5IGRvbnQgbmVlZCB0aGlzIGZ1bmN0aW9uICFcbiAqXG4gKiBnaXZlbiB0b3Agbm9kZShzKSBhbmQgdGhlIGxhc3QgYWN0aXZlIGVsZW1lbnQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBiZSBmb2N1c2VkIG5leHRcbiAqIEByZXR1cm5zIGVsZW1lbnQgd2hpY2ggc2hvdWxkIGJlIGZvY3VzZWQgdG8gbW92ZSBmb2N1cyBpbnNpZGVcbiAqIEBwYXJhbSB0b3BOb2RlXG4gKiBAcGFyYW0gbGFzdE5vZGVcbiAqL1xuZXhwb3J0IHZhciBmb2N1c1NvbHZlciA9IGZ1bmN0aW9uICh0b3BOb2RlLCBsYXN0Tm9kZSkge1xuICAgIHZhciBhY3RpdmVFbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChhc0FycmF5KHRvcE5vZGUpLmxlbmd0aCA+IDAgPyBkb2N1bWVudCA6IGdldEZpcnN0KHRvcE5vZGUpLm93bmVyRG9jdW1lbnQpO1xuICAgIHZhciBlbnRyaWVzID0gZ2V0QWxsQWZmZWN0ZWROb2Rlcyh0b3BOb2RlKS5maWx0ZXIoaXNOb3RBR3VhcmQpO1xuICAgIHZhciBjb21tb25QYXJlbnQgPSBnZXRUb3BDb21tb25QYXJlbnQoYWN0aXZlRWxlbWVudCB8fCB0b3BOb2RlLCB0b3BOb2RlLCBlbnRyaWVzKTtcbiAgICB2YXIgdmlzaWJpbGl0eUNhY2hlID0gbmV3IE1hcCgpO1xuICAgIHZhciBhbnlGb2N1c2FibGUgPSBnZXRGb2N1c2FibGVOb2RlcyhlbnRyaWVzLCB2aXNpYmlsaXR5Q2FjaGUpO1xuICAgIHZhciBpbm5lckVsZW1lbnRzID0gYW55Rm9jdXNhYmxlLmZpbHRlcihmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gaXNOb3RBR3VhcmQobm9kZSk7XG4gICAgfSk7XG4gICAgaWYgKCFpbm5lckVsZW1lbnRzWzBdKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBvdXRlck5vZGVzID0gZ2V0Rm9jdXNhYmxlTm9kZXMoW2NvbW1vblBhcmVudF0sIHZpc2liaWxpdHlDYWNoZSkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBvcmRlcmVkSW5uZXJFbGVtZW50cyA9IHJlb3JkZXJOb2RlcyhvdXRlck5vZGVzLCBpbm5lckVsZW1lbnRzKTtcbiAgICAvLyBjb2xsZWN0IGlubmVyIGZvY3VzYWJsZSBhbmQgc2VwYXJhdGVseSB0YWJiYWJsZXNcbiAgICB2YXIgaW5uZXJGb2N1c2FibGVzID0gb3JkZXJlZElubmVyRWxlbWVudHMubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBpbm5lclRhYmJhYmxlID0gb3JkZXJlZElubmVyRWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSBfYS50YWJJbmRleDtcbiAgICAgICAgcmV0dXJuIHRhYkluZGV4ID49IDA7XG4gICAgfSkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgbm9kZSA9IF9hLm5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH0pO1xuICAgIHZhciBuZXdJZCA9IG5ld0ZvY3VzKGlubmVyRm9jdXNhYmxlcywgaW5uZXJUYWJiYWJsZSwgb3V0ZXJOb2RlcywgYWN0aXZlRWxlbWVudCwgbGFzdE5vZGUpO1xuICAgIGlmIChuZXdJZCA9PT0gTkVXX0ZPQ1VTKSB7XG4gICAgICAgIHZhciBmb2N1c05vZGUgPSBcbiAgICAgICAgLy8gZmlyc3QgdHJ5IG9ubHkgdGFiYmFibGUsIGFuZCB0aGUgZmFsbGJhY2sgdG8gYWxsIGZvY3VzYWJsZSwgYXMgbG9uZyBhcyBhdCBsZWFzdCBvbmUgZWxlbWVudCBzaG91bGQgYmUgcGlja2VkIGZvciBmb2N1c1xuICAgICAgICBwaWNrQXV0b2ZvY3VzKGFueUZvY3VzYWJsZSwgaW5uZXJUYWJiYWJsZSwgYWxsUGFyZW50QXV0b2ZvY3VzYWJsZXMoZW50cmllcywgdmlzaWJpbGl0eUNhY2hlKSkgfHxcbiAgICAgICAgICAgIHBpY2tBdXRvZm9jdXMoYW55Rm9jdXNhYmxlLCBpbm5lckZvY3VzYWJsZXMsIGFsbFBhcmVudEF1dG9mb2N1c2FibGVzKGVudHJpZXMsIHZpc2liaWxpdHlDYWNoZSkpO1xuICAgICAgICBpZiAoZm9jdXNOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBmb2N1c05vZGUgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignZm9jdXMtbG9jazogY2Fubm90IGZpbmQgYW55IG5vZGUgdG8gbW92ZSBmb2N1cyBpbnRvJyk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChuZXdJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuZXdJZDtcbiAgICB9XG4gICAgcmV0dXJuIG9yZGVyZWRJbm5lckVsZW1lbnRzW25ld0lkXTtcbn07XG4iLCAiaW1wb3J0IHsgZ2V0QWxsQWZmZWN0ZWROb2RlcyB9IGZyb20gJy4vdXRpbHMvYWxsLWFmZmVjdGVkJztcbmltcG9ydCB7IGlzR3VhcmQsIGlzTm90QUd1YXJkIH0gZnJvbSAnLi91dGlscy9pcyc7XG5pbXBvcnQgeyBnZXRUb3BDb21tb25QYXJlbnQgfSBmcm9tICcuL3V0aWxzL3BhcmVudGluZyc7XG5pbXBvcnQgeyBvcmRlckJ5VGFiSW5kZXggfSBmcm9tICcuL3V0aWxzL3RhYk9yZGVyJztcbmltcG9ydCB7IGdldEZvY3VzYWJsZXMgfSBmcm9tICcuL3V0aWxzL3RhYlV0aWxzJztcbi8qKlxuICogdHJhdmVyc2VzIGFsbCByZWxhdGVkIG5vZGVzIChpbmNsdWRpbmcgZ3JvdXBzKSByZXR1cm5pbmcgYSBsaXN0IG9mIGFsbCBub2RlcyhvdXRlciBhbmQgaW50ZXJuYWwpIHdpdGggbWV0YSBpbmZvcm1hdGlvblxuICogVGhpcyBpcyBsb3ctbGV2ZWwgQVBJIVxuICogQHJldHVybnMgbGlzdCBvZiBmb2N1c2FibGUgZWxlbWVudHMgaW5zaWRlIGEgZ2l2ZW4gdG9wKCEpIG5vZGUuXG4gKiBAc2VlIHtAbGluayBnZXRGb2N1c2FibGVOb2Rlc30gcHJvdmlkaW5nIGEgc2ltcGxlciBBUElcbiAqL1xuZXhwb3J0IHZhciBleHBhbmRGb2N1c2FibGVOb2RlcyA9IGZ1bmN0aW9uICh0b3BOb2RlKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRBbGxBZmZlY3RlZE5vZGVzKHRvcE5vZGUpLmZpbHRlcihpc05vdEFHdWFyZCk7XG4gICAgdmFyIGNvbW1vblBhcmVudCA9IGdldFRvcENvbW1vblBhcmVudCh0b3BOb2RlLCB0b3BOb2RlLCBlbnRyaWVzKTtcbiAgICB2YXIgb3V0ZXJOb2RlcyA9IG9yZGVyQnlUYWJJbmRleChnZXRGb2N1c2FibGVzKFtjb21tb25QYXJlbnRdLCB0cnVlKSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgdmFyIGlubmVyRWxlbWVudHMgPSBnZXRGb2N1c2FibGVzKGVudHJpZXMsIGZhbHNlKTtcbiAgICByZXR1cm4gb3V0ZXJOb2Rlcy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBub2RlID0gX2Eubm9kZSwgaW5kZXggPSBfYS5pbmRleDtcbiAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgbG9ja0l0ZW06IGlubmVyRWxlbWVudHMuaW5kZXhPZihub2RlKSA+PSAwLFxuICAgICAgICAgICAgZ3VhcmQ6IGlzR3VhcmQobm9kZSksXG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcbiIsICJleHBvcnQgdmFyIGZvY3VzT24gPSBmdW5jdGlvbiAodGFyZ2V0LCBmb2N1c09wdGlvbnMpIHtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAvLyBub3QgY2xlYXIgaG93LCBidXQgaXMgcG9zc2libGUgaHR0cHM6Ly9naXRodWIuY29tL3RoZUthc2hleS9mb2N1cy1sb2NrL2lzc3Vlcy81M1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgnZm9jdXMnIGluIHRhcmdldCkge1xuICAgICAgICB0YXJnZXQuZm9jdXMoZm9jdXNPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKCdjb250ZW50V2luZG93JyBpbiB0YXJnZXQgJiYgdGFyZ2V0LmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgdGFyZ2V0LmNvbnRlbnRXaW5kb3cuZm9jdXMoKTtcbiAgICB9XG59O1xuIiwgImltcG9ydCB7IGZvY3VzT24gfSBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IGZvY3VzU29sdmVyIH0gZnJvbSAnLi9mb2N1c1NvbHZlcic7XG52YXIgZ3VhcmRDb3VudCA9IDA7XG52YXIgbG9ja0Rpc2FibGVkID0gZmFsc2U7XG4vKipcbiAqIFRoZSBtYWluIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGZvY3VzLWxvY2sgcGFja2FnZVxuICpcbiAqIENvbnRhaW5zIGZvY3VzIGF0IGEgZ2l2ZW4gbm9kZS5cbiAqIFRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudCB3aWxsIGhlbHAgdG8gZGV0ZXJtaW5lIHdoaWNoIGVsZW1lbnQoZmlyc3Qgb3IgbGFzdCkgc2hvdWxkIGJlIGZvY3VzZWQuXG4gKiBUaGUgZm91bmQgZWxlbWVudCB3aWxsIGJlIGZvY3VzZWQuXG4gKlxuICogVGhpcyBpcyBvbmUgdGltZSBhY3Rpb24gKG1vdmUpLCBub3QgYSBwZXJzaXN0ZW50IGZvY3VzLWxvY2tcbiAqXG4gKiBIVE1MIG1hcmtlcnMgKHNlZSB7QGxpbmsgaW1wb3J0KCcuL2NvbnN0YW50cycpLkZPQ1VTX0FVVE99IGNvbnN0YW50cykgY2FuIGNvbnRyb2wgYXV0b2ZvY3VzXG4gKiBAc2VlIHtAbGluayBmb2N1c1NvbHZlcn0gZm9yIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBhdXRvZm9jdXNcbiAqL1xuZXhwb3J0IHZhciBtb3ZlRm9jdXNJbnNpZGUgPSBmdW5jdGlvbiAodG9wTm9kZSwgbGFzdE5vZGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBmb2N1c2FibGUgPSBmb2N1c1NvbHZlcih0b3BOb2RlLCBsYXN0Tm9kZSk7XG4gICAgLy8gZ2xvYmFsIGxvY2FsIHNpZGUgZWZmZWN0IHRvIGNvdW50YWluIHJlY3Vyc2l2ZSBsb2NrIGFjdGl2YXRpb24gYW5kIHJlc29sdmUgZm9jdXMtZmlnaHRpbmdcbiAgICBpZiAobG9ja0Rpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZvY3VzYWJsZSkge1xuICAgICAgICAvKiogK0ZPQ1VTLUZJR0hUSU5HIHByZXZlbnRpb24gKiovXG4gICAgICAgIGlmIChndWFyZENvdW50ID4gMikge1xuICAgICAgICAgICAgLy8gd2UgaGF2ZSByZWN1cnNpdmUgZW50ZXJlZCBiYWNrIHRoZSBsb2NrIGFjdGl2YXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZvY3VzTG9jazogZm9jdXMtZmlnaHRpbmcgZGV0ZWN0ZWQuIE9ubHkgb25lIGZvY3VzIG1hbmFnZW1lbnQgc3lzdGVtIGNvdWxkIGJlIGFjdGl2ZS4gJyArXG4gICAgICAgICAgICAgICAgJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L2ZvY3VzLWxvY2svI2ZvY3VzLWZpZ2h0aW5nJyk7XG4gICAgICAgICAgICBsb2NrRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbG9ja0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBndWFyZENvdW50Kys7XG4gICAgICAgIGZvY3VzT24oZm9jdXNhYmxlLm5vZGUsIG9wdGlvbnMuZm9jdXNPcHRpb25zKTtcbiAgICAgICAgZ3VhcmRDb3VudC0tO1xuICAgIH1cbn07XG4iLCAiaW1wb3J0IHsgZ2V0VGFiYmFibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuZnVuY3Rpb24gd2Vha1JlZih2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICM2OCBTYWZhcmkgMTQuMSBkb250IGhhdmUgaXQgeWV0XG4gICAgLy8gRklYTUU6IHJlbW92ZSBpbiAyMDI1XG4gICAgaWYgKHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWUgfHwgbnVsbDsgfTtcbiAgICB9XG4gICAgdmFyIHcgPSB2YWx1ZSA/IG5ldyBXZWFrUmVmKHZhbHVlKSA6IG51bGw7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuICh3ID09PSBudWxsIHx8IHcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHcuZGVyZWYoKSkgfHwgbnVsbDsgfTtcbn1cbmV4cG9ydCB2YXIgcmVjb3JkRWxlbWVudExvY2F0aW9uID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgd2hpbGUgKGN1cnJlbnRFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgY3VycmVudDogd2Vha1JlZihjdXJyZW50RWxlbWVudCksXG4gICAgICAgICAgICBwYXJlbnQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudCksXG4gICAgICAgICAgICBsZWZ0OiB3ZWFrUmVmKGN1cnJlbnRFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpLFxuICAgICAgICAgICAgcmlnaHQ6IHdlYWtSZWYoY3VycmVudEVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudDogd2Vha1JlZihlbGVtZW50KSxcbiAgICAgICAgc3RhY2s6IHN0YWNrLFxuICAgICAgICBvd25lckRvY3VtZW50OiBlbGVtZW50Lm93bmVyRG9jdW1lbnQsXG4gICAgfTtcbn07XG52YXIgcmVzdG9yZUZvY3VzVG8gPSBmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIHN0YWNrID0gbG9jYXRpb24uc3RhY2ssIG93bmVyRG9jdW1lbnQgPSBsb2NhdGlvbi5vd25lckRvY3VtZW50O1xuICAgIHZhciB2aXNpYmlsaXR5Q2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgZm9yICh2YXIgX2kgPSAwLCBzdGFja18xID0gc3RhY2s7IF9pIDwgc3RhY2tfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIGxpbmUgPSBzdGFja18xW19pXTtcbiAgICAgICAgdmFyIHBhcmVudF8xID0gKF9hID0gbGluZS5wYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGxpbmUpO1xuICAgICAgICAvLyBpcyBpdCBzdGlsbCBoZXJlP1xuICAgICAgICBpZiAocGFyZW50XzEgJiYgb3duZXJEb2N1bWVudC5jb250YWlucyhwYXJlbnRfMSkpIHtcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gKF9iID0gbGluZS5sZWZ0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChsaW5lKTtcbiAgICAgICAgICAgIHZhciBzYXZlZEN1cnJlbnQgPSBsaW5lLmN1cnJlbnQoKTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gcGFyZW50XzEuY29udGFpbnMoc2F2ZWRDdXJyZW50KSA/IHNhdmVkQ3VycmVudCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHZhciByaWdodCA9IChfYyA9IGxpbmUucmlnaHQpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYWxsKGxpbmUpO1xuICAgICAgICAgICAgdmFyIGZvY3VzYWJsZXMgPSBnZXRUYWJiYWJsZU5vZGVzKFtwYXJlbnRfMV0sIHZpc2liaWxpdHlDYWNoZSk7XG4gICAgICAgICAgICB2YXIgYWltID0gXG4gICAgICAgICAgICAvLyB0aGF0IGlzIGVsZW1lbnQgaXRzZWxmXG4gICAgICAgICAgICAoX2UgPSAoX2QgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQgIT09IHZvaWQgMCA/IGN1cnJlbnQgOiBcbiAgICAgICAgICAgIC8vIG9yIHNvbWV0aGluZyBpbiBpdCdzIHBsYWNlXG4gICAgICAgICAgICBsZWZ0ID09PSBudWxsIHx8IGxlZnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxlZnQubmV4dEVsZW1lbnRTaWJsaW5nKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBcbiAgICAgICAgICAgIC8vIG9yIHNvbWVib2R5IHRvIHRoZSByaWdodCwgc3RpbGwgY2xvc2UgZW5vdWdoXG4gICAgICAgICAgICByaWdodCkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogXG4gICAgICAgICAgICAvLyBvciBzb21lYm9keSB0byB0aGUgbGVmdCwgc29tZXRoaW5nP1xuICAgICAgICAgICAgbGVmdDtcbiAgICAgICAgICAgIHdoaWxlIChhaW0pIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZiA9IDAsIGZvY3VzYWJsZXNfMSA9IGZvY3VzYWJsZXM7IF9mIDwgZm9jdXNhYmxlc18xLmxlbmd0aDsgX2YrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9jdXNhYmxlID0gZm9jdXNhYmxlc18xW19mXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFpbSA9PT0gbnVsbCB8fCBhaW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFpbS5jb250YWlucyhmb2N1c2FibGUubm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGUubm9kZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhaW0gPSBhaW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvY3VzYWJsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgcGFyZW50IGNvbnRhaW5zIGEgZm9jdXNhYmxlIC0gbW92ZSB0aGVyZVxuICAgICAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGVzWzBdLm5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbm90aGluZyBtYXRjaGVkXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4vKipcbiAqIENhcHR1cmVzIHRoZSBjdXJyZW50IGZvY3VzZWQgZWxlbWVudCB0byByZXN0b3JlIGZvY3VzIGFzIGNsb3NlIGFzIHBvc3NpYmxlIGluIHRoZSBmdXR1cmVcbiAqIEhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSB0aGUgZm9jdXNlZCBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIG5vIGxvbmdlciBmb2N1c2FibGVcbiAqIG1vdmluZyBmb2N1cyB0byB0aGUgY2xvc2VzdCBmb2N1c2FibGUgZWxlbWVudFxuICogQHBhcmFtIHRhcmdldEVsZW1lbnQgLSBlbGVtZW50IHdoZXJlIGZvY3VzIHNob3VsZCBiZSByZXN0b3JlZFxuICogQHJldHVybnMgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBuZXcgZWxlbWVudCB0byBmb2N1c1xuICovXG5leHBvcnQgdmFyIGNhcHR1cmVGb2N1c1Jlc3RvcmUgPSBmdW5jdGlvbiAodGFyZ2V0RWxlbWVudCkge1xuICAgIHZhciBsb2NhdGlvbiA9IHJlY29yZEVsZW1lbnRMb2NhdGlvbih0YXJnZXRFbGVtZW50KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVzdG9yZUZvY3VzVG8obG9jYXRpb24pO1xuICAgIH07XG59O1xuIiwgImltcG9ydCB7IGZvY3VzT24gfSBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IGdldFRhYmJhYmxlTm9kZXMsIGNvbnRhaW5zLCBnZXRGb2N1c2FibGVOb2RlcyB9IGZyb20gJy4vdXRpbHMvRE9NdXRpbHMnO1xuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJy4vdXRpbHMvYXJyYXknO1xuLyoqXG4gKiBmb3IgYSBnaXZlbiBgZWxlbWVudGAgaW4gYSBnaXZlbiBgc2NvcGVgIHJldHVybnMgZm9jdXNhYmxlIHNpYmxpbmdzXG4gKiBAcGFyYW0gZWxlbWVudCAtIGJhc2UgZWxlbWVudFxuICogQHBhcmFtIHNjb3BlIC0gY29tbW9uIHBhcmVudC4gQ2FuIGJlIGRvY3VtZW50LCBidXQgYmV0dGVyIHRvIG5hcnJvdyBpdCBkb3duIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gKiBAcmV0dXJucyB7cHJldixuZXh0fSAtIHJlZmVyZW5jZXMgdG8gYSBmb2N1c2FibGUgZWxlbWVudCBiZWZvcmUgYW5kIGFmdGVyXG4gKiBAcmV0dXJucyB1bmRlZmluZWQgLSBpZiBvcGVyYXRpb24gaXMgbm90IGFwcGxpY2FibGVcbiAqL1xuZXhwb3J0IHZhciBnZXRSZWxhdGl2ZUZvY3VzYWJsZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBzY29wZSwgdXNlVGFiYmFibGVzKSB7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFzY29wZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdubyBlbGVtZW50IG9yIHNjb3BlIGdpdmVuJyk7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgdmFyIHNoYXJkcyA9IGFzQXJyYXkoc2NvcGUpO1xuICAgIGlmIChzaGFyZHMuZXZlcnkoZnVuY3Rpb24gKHNoYXJkKSB7IHJldHVybiAhY29udGFpbnMoc2hhcmQsIGVsZW1lbnQpOyB9KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmUgZWxlbWVudCBpcyBub3QgY29udGFpbmVkIGluIHRoZSBzY29wZScpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHZhciBmb2N1c2FibGVzID0gdXNlVGFiYmFibGVzXG4gICAgICAgID8gZ2V0VGFiYmFibGVOb2RlcyhzaGFyZHMsIG5ldyBNYXAoKSlcbiAgICAgICAgOiBnZXRGb2N1c2FibGVOb2RlcyhzaGFyZHMsIG5ldyBNYXAoKSk7XG4gICAgdmFyIGN1cnJlbnQgPSBmb2N1c2FibGVzLmZpbmRJbmRleChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBfYS5ub2RlO1xuICAgICAgICByZXR1cm4gbm9kZSA9PT0gZWxlbWVudDtcbiAgICB9KTtcbiAgICBpZiAoY3VycmVudCA9PT0gLTEpIHtcbiAgICAgICAgLy8gYW4gZWRnZSBjYXNlLCB3aGVuIGFuY2hvciBlbGVtZW50IGlzIG5vdCBmb3VuZFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwcmV2OiBmb2N1c2FibGVzW2N1cnJlbnQgLSAxXSxcbiAgICAgICAgbmV4dDogZm9jdXNhYmxlc1tjdXJyZW50ICsgMV0sXG4gICAgICAgIGZpcnN0OiBmb2N1c2FibGVzWzBdLFxuICAgICAgICBsYXN0OiBmb2N1c2FibGVzW2ZvY3VzYWJsZXMubGVuZ3RoIC0gMV0sXG4gICAgfTtcbn07XG52YXIgZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbiAoc2hhcmRzLCB1c2VUYWJiYWJsZXMpIHtcbiAgICB2YXIgc2V0ID0gdXNlVGFiYmFibGVzXG4gICAgICAgID8gZ2V0VGFiYmFibGVOb2Rlcyhhc0FycmF5KHNoYXJkcyksIG5ldyBNYXAoKSlcbiAgICAgICAgOiBnZXRGb2N1c2FibGVOb2Rlcyhhc0FycmF5KHNoYXJkcyksIG5ldyBNYXAoKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmlyc3Q6IHNldFswXSxcbiAgICAgICAgbGFzdDogc2V0W3NldC5sZW5ndGggLSAxXSxcbiAgICB9O1xufTtcbnZhciBkZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBzY29wZTogZG9jdW1lbnQuYm9keSxcbiAgICAgICAgY3ljbGU6IHRydWUsXG4gICAgICAgIG9ubHlUYWJiYWJsZTogdHJ1ZSxcbiAgICB9LCBvcHRpb25zKTtcbn07XG52YXIgbW92ZUZvY3VzID0gZnVuY3Rpb24gKGZyb21FbGVtZW50LCBvcHRpb25zLCBjYikge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIG5ld09wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgc29sdXRpb24gPSBnZXRSZWxhdGl2ZUZvY3VzYWJsZShmcm9tRWxlbWVudCwgbmV3T3B0aW9ucy5zY29wZSwgbmV3T3B0aW9ucy5vbmx5VGFiYmFibGUpO1xuICAgIGlmICghc29sdXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGFyZ2V0ID0gY2Ioc29sdXRpb24sIG5ld09wdGlvbnMuY3ljbGUpO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgZm9jdXNPbih0YXJnZXQubm9kZSwgbmV3T3B0aW9ucy5mb2N1c09wdGlvbnMpO1xuICAgIH1cbn07XG4vKipcbiAqIGZvY3VzZXMgbmV4dCBlbGVtZW50IGluIHRoZSB0YWItb3JkZXJcbiAqIEBwYXJhbSBmcm9tRWxlbWVudCAtIGNvbW1vbiBwYXJlbnQgdG8gc2NvcGUgYWN0aXZlIGVsZW1lbnQgc2VhcmNoIG9yIHRhYiBjeWNsZSBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBbb3B0aW9uc10gLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNOZXh0RWxlbWVudCA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgbW92ZUZvY3VzKGZyb21FbGVtZW50LCBvcHRpb25zLCBmdW5jdGlvbiAoX2EsIGN5Y2xlKSB7XG4gICAgICAgIHZhciBuZXh0ID0gX2EubmV4dCwgZmlyc3QgPSBfYS5maXJzdDtcbiAgICAgICAgcmV0dXJuIG5leHQgfHwgKGN5Y2xlICYmIGZpcnN0KTtcbiAgICB9KTtcbn07XG4vKipcbiAqIGZvY3VzZXMgcHJldiBlbGVtZW50IGluIHRoZSB0YWIgb3JkZXJcbiAqIEBwYXJhbSBmcm9tRWxlbWVudCAtIGNvbW1vbiBwYXJlbnQgdG8gc2NvcGUgYWN0aXZlIGVsZW1lbnQgc2VhcmNoIG9yIHRhYiBjeWNsZSBvcmRlclxuICogQHBhcmFtIHtGb2N1c05leHRPcHRpb25zfSBbb3B0aW9uc10gLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNQcmV2RWxlbWVudCA9IGZ1bmN0aW9uIChmcm9tRWxlbWVudCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgbW92ZUZvY3VzKGZyb21FbGVtZW50LCBvcHRpb25zLCBmdW5jdGlvbiAoX2EsIGN5Y2xlKSB7XG4gICAgICAgIHZhciBwcmV2ID0gX2EucHJldiwgbGFzdCA9IF9hLmxhc3Q7XG4gICAgICAgIHJldHVybiBwcmV2IHx8IChjeWNsZSAmJiBsYXN0KTtcbiAgICB9KTtcbn07XG52YXIgcGlja0JvdW5kYXJ5ID0gZnVuY3Rpb24gKHNjb3BlLCBvcHRpb25zLCB3aGF0KSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciBib3VuZGFyeSA9IGdldEJvdW5kYXJ5KHNjb3BlLCAoX2EgPSBvcHRpb25zLm9ubHlUYWJiYWJsZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZSk7XG4gICAgdmFyIG5vZGUgPSBib3VuZGFyeVt3aGF0XTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgICBmb2N1c09uKG5vZGUubm9kZSwgb3B0aW9ucy5mb2N1c09wdGlvbnMpO1xuICAgIH1cbn07XG4vKipcbiAqIGZvY3VzZXMgZmlyc3QgZWxlbWVudCBpbiB0aGUgdGFiLW9yZGVyXG4gKiBAcGFyYW0ge0ZvY3VzTmV4dE9wdGlvbnN9IG9wdGlvbnMgLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNGaXJzdEVsZW1lbnQgPSBmdW5jdGlvbiAoc2NvcGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHBpY2tCb3VuZGFyeShzY29wZSwgb3B0aW9ucywgJ2ZpcnN0Jyk7XG59O1xuLyoqXG4gKiBmb2N1c2VzIGxhc3QgZWxlbWVudCBpbiB0aGUgdGFiIG9yZGVyXG4gKiBAcGFyYW0ge0ZvY3VzTmV4dE9wdGlvbnN9IG9wdGlvbnMgLSBmb2N1cyBvcHRpb25zXG4gKi9cbmV4cG9ydCB2YXIgZm9jdXNMYXN0RWxlbWVudCA9IGZ1bmN0aW9uIChzY29wZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcGlja0JvdW5kYXJ5KHNjb3BlLCBvcHRpb25zLCAnbGFzdCcpO1xufTtcbiIsICJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuL1RyYXAnO1xuaW1wb3J0IHsgbWVkaXVtU2lkZWNhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIobWVkaXVtU2lkZWNhciwgRm9jdXNUcmFwKTsiLCAiaW1wb3J0IHsgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUmVtb3ZlU2Nyb2xsQmFyIH0gZnJvbSAncmVhY3QtcmVtb3ZlLXNjcm9sbC1iYXInO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgbm9uUGFzc2l2ZSB9IGZyb20gJy4vYWdncmVzaXZlQ2FwdHVyZSc7XG5pbXBvcnQgeyBoYW5kbGVTY3JvbGwsIGxvY2F0aW9uQ291bGRCZVNjcm9sbGVkIH0gZnJvbSAnLi9oYW5kbGVTY3JvbGwnO1xuZXhwb3J0IHZhciBnZXRUb3VjaFhZID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdjaGFuZ2VkVG91Y2hlcycgaW4gZXZlbnQgPyBbZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCwgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WV0gOiBbMCwgMF07XG59O1xuZXhwb3J0IHZhciBnZXREZWx0YVhZID0gZnVuY3Rpb24gKGV2ZW50KSB7IHJldHVybiBbZXZlbnQuZGVsdGFYLCBldmVudC5kZWx0YVldOyB9O1xudmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgcmV0dXJuIHJlZiAmJiAnY3VycmVudCcgaW4gcmVmID8gcmVmLmN1cnJlbnQgOiByZWY7XG59O1xudmFyIGRlbHRhQ29tcGFyZSA9IGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiB4WzBdID09PSB5WzBdICYmIHhbMV0gPT09IHlbMV07IH07XG52YXIgZ2VuZXJhdGVTdHlsZSA9IGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gXCJcXG4gIC5ibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCwgXCIge3BvaW50ZXItZXZlbnRzOiBub25lO31cXG4gIC5hbGxvdy1pbnRlcmFjdGl2aXR5LVwiKS5jb25jYXQoaWQsIFwiIHtwb2ludGVyLWV2ZW50czogYWxsO31cXG5cIik7IH07XG52YXIgaWRDb3VudGVyID0gMDtcbnZhciBsb2NrU3RhY2sgPSBbXTtcbmV4cG9ydCBmdW5jdGlvbiBSZW1vdmVTY3JvbGxTaWRlQ2FyKHByb3BzKSB7XG4gICAgdmFyIHNob3VsZFByZXZlbnRRdWV1ZSA9IFJlYWN0LnVzZVJlZihbXSk7XG4gICAgdmFyIHRvdWNoU3RhcnRSZWYgPSBSZWFjdC51c2VSZWYoWzAsIDBdKTtcbiAgICB2YXIgYWN0aXZlQXhpcyA9IFJlYWN0LnVzZVJlZigpO1xuICAgIHZhciBpZCA9IFJlYWN0LnVzZVN0YXRlKGlkQ291bnRlcisrKVswXTtcbiAgICB2YXIgU3R5bGUgPSBSZWFjdC51c2VTdGF0ZShzdHlsZVNpbmdsZXRvbilbMF07XG4gICAgdmFyIGxhc3RQcm9wcyA9IFJlYWN0LnVzZVJlZihwcm9wcyk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGFzdFByb3BzLmN1cnJlbnQgPSBwcm9wcztcbiAgICB9LCBbcHJvcHNdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocHJvcHMuaW5lcnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImJsb2NrLWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7XG4gICAgICAgICAgICB2YXIgYWxsb3dfMSA9IF9fc3ByZWFkQXJyYXkoW3Byb3BzLmxvY2tSZWYuY3VycmVudF0sIChwcm9wcy5zaGFyZHMgfHwgW10pLm1hcChleHRyYWN0UmVmKSwgdHJ1ZSkuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICAgICAgYWxsb3dfMS5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwuY2xhc3NMaXN0LmFkZChcImFsbG93LWludGVyYWN0aXZpdHktXCIuY29uY2F0KGlkKSk7IH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJibG9jay1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpO1xuICAgICAgICAgICAgICAgIGFsbG93XzEuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoXCJhbGxvdy1pbnRlcmFjdGl2aXR5LVwiLmNvbmNhdChpZCkpOyB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH0sIFtwcm9wcy5pbmVydCwgcHJvcHMubG9ja1JlZi5jdXJyZW50LCBwcm9wcy5zaGFyZHNdKTtcbiAgICB2YXIgc2hvdWxkQ2FuY2VsRXZlbnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQsIHBhcmVudCkge1xuICAgICAgICBpZiAoJ3RvdWNoZXMnIGluIGV2ZW50ICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gIWxhc3RQcm9wcy5jdXJyZW50LmFsbG93UGluY2hab29tO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0b3VjaCA9IGdldFRvdWNoWFkoZXZlbnQpO1xuICAgICAgICB2YXIgdG91Y2hTdGFydCA9IHRvdWNoU3RhcnRSZWYuY3VycmVudDtcbiAgICAgICAgdmFyIGRlbHRhWCA9ICdkZWx0YVgnIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFYIDogdG91Y2hTdGFydFswXSAtIHRvdWNoWzBdO1xuICAgICAgICB2YXIgZGVsdGFZID0gJ2RlbHRhWScgaW4gZXZlbnQgPyBldmVudC5kZWx0YVkgOiB0b3VjaFN0YXJ0WzFdIC0gdG91Y2hbMV07XG4gICAgICAgIHZhciBjdXJyZW50QXhpcztcbiAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgdmFyIG1vdmVEaXJlY3Rpb24gPSBNYXRoLmFicyhkZWx0YVgpID4gTWF0aC5hYnMoZGVsdGFZKSA/ICdoJyA6ICd2JztcbiAgICAgICAgLy8gYWxsb3cgaG9yaXpvbnRhbCB0b3VjaCBtb3ZlIG9uIFJhbmdlIGlucHV0cy4gVGhleSB3aWxsIG5vdCBjYXVzZSBhbnkgc2Nyb2xsXG4gICAgICAgIGlmICgndG91Y2hlcycgaW4gZXZlbnQgJiYgbW92ZURpcmVjdGlvbiA9PT0gJ2gnICYmIHRhcmdldC50eXBlID09PSAncmFuZ2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24gPSBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZChtb3ZlRGlyZWN0aW9uLCB0YXJnZXQpO1xuICAgICAgICBpZiAoIWNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW5CZVNjcm9sbGVkSW5NYWluRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBjdXJyZW50QXhpcyA9IG1vdmVEaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50QXhpcyA9IG1vdmVEaXJlY3Rpb24gPT09ICd2JyA/ICdoJyA6ICd2JztcbiAgICAgICAgICAgIGNhbkJlU2Nyb2xsZWRJbk1haW5EaXJlY3Rpb24gPSBsb2NhdGlvbkNvdWxkQmVTY3JvbGxlZChtb3ZlRGlyZWN0aW9uLCB0YXJnZXQpO1xuICAgICAgICAgICAgLy8gb3RoZXIgYXhpcyBtaWdodCBiZSBub3Qgc2Nyb2xsYWJsZVxuICAgICAgICB9XG4gICAgICAgIGlmICghY2FuQmVTY3JvbGxlZEluTWFpbkRpcmVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYWN0aXZlQXhpcy5jdXJyZW50ICYmICdjaGFuZ2VkVG91Y2hlcycgaW4gZXZlbnQgJiYgKGRlbHRhWCB8fCBkZWx0YVkpKSB7XG4gICAgICAgICAgICBhY3RpdmVBeGlzLmN1cnJlbnQgPSBjdXJyZW50QXhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN1cnJlbnRBeGlzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FuY2VsaW5nQXhpcyA9IGFjdGl2ZUF4aXMuY3VycmVudCB8fCBjdXJyZW50QXhpcztcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNjcm9sbChjYW5jZWxpbmdBeGlzLCBwYXJlbnQsIGV2ZW50LCBjYW5jZWxpbmdBeGlzID09PSAnaCcgPyBkZWx0YVggOiBkZWx0YVksIHRydWUpO1xuICAgIH0sIFtdKTtcbiAgICB2YXIgc2hvdWxkUHJldmVudCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChfZXZlbnQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gX2V2ZW50O1xuICAgICAgICBpZiAoIWxvY2tTdGFjay5sZW5ndGggfHwgbG9ja1N0YWNrW2xvY2tTdGFjay5sZW5ndGggLSAxXSAhPT0gU3R5bGUpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbGFzdCBhY3RpdmVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsdGEgPSAnZGVsdGFZJyBpbiBldmVudCA/IGdldERlbHRhWFkoZXZlbnQpIDogZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIHZhciBzb3VyY2VFdmVudCA9IHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS5uYW1lID09PSBldmVudC50eXBlICYmIChlLnRhcmdldCA9PT0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnRhcmdldCA9PT0gZS5zaGFkb3dQYXJlbnQpICYmIGRlbHRhQ29tcGFyZShlLmRlbHRhLCBkZWx0YSk7IH0pWzBdO1xuICAgICAgICAvLyBzZWxmIGV2ZW50LCBhbmQgc2hvdWxkIGJlIGNhbmNlbGVkXG4gICAgICAgIGlmIChzb3VyY2VFdmVudCAmJiBzb3VyY2VFdmVudC5zaG91bGQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdXRzaWRlIG9yIHNoYXJkIGV2ZW50XG4gICAgICAgIGlmICghc291cmNlRXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBzaGFyZE5vZGVzID0gKGxhc3RQcm9wcy5jdXJyZW50LnNoYXJkcyB8fCBbXSlcbiAgICAgICAgICAgICAgICAubWFwKGV4dHJhY3RSZWYpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIG5vZGUuY29udGFpbnMoZXZlbnQudGFyZ2V0KTsgfSk7XG4gICAgICAgICAgICB2YXIgc2hvdWxkU3RvcCA9IHNoYXJkTm9kZXMubGVuZ3RoID4gMCA/IHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBzaGFyZE5vZGVzWzBdKSA6ICFsYXN0UHJvcHMuY3VycmVudC5ub0lzb2xhdGlvbjtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdG9wKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgdmFyIHNob3VsZENhbmNlbCA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuYW1lLCBkZWx0YSwgdGFyZ2V0LCBzaG91bGQpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0geyBuYW1lOiBuYW1lLCBkZWx0YTogZGVsdGEsIHRhcmdldDogdGFyZ2V0LCBzaG91bGQ6IHNob3VsZCwgc2hhZG93UGFyZW50OiBnZXRPdXRlcm1vc3RTaGFkb3dQYXJlbnQodGFyZ2V0KSB9O1xuICAgICAgICBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudC5wdXNoKGV2ZW50KTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzaG91bGRQcmV2ZW50UXVldWUuY3VycmVudCA9IHNob3VsZFByZXZlbnRRdWV1ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSAhPT0gZXZlbnQ7IH0pO1xuICAgICAgICB9LCAxKTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFRvdWNoU3RhcnQgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdG91Y2hTdGFydFJlZi5jdXJyZW50ID0gZ2V0VG91Y2hYWShldmVudCk7XG4gICAgICAgIGFjdGl2ZUF4aXMuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHNjcm9sbFdoZWVsID0gUmVhY3QudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHNob3VsZENhbmNlbChldmVudC50eXBlLCBnZXREZWx0YVhZKGV2ZW50KSwgZXZlbnQudGFyZ2V0LCBzaG91bGRDYW5jZWxFdmVudChldmVudCwgcHJvcHMubG9ja1JlZi5jdXJyZW50KSk7XG4gICAgfSwgW10pO1xuICAgIHZhciBzY3JvbGxUb3VjaE1vdmUgPSBSZWFjdC51c2VDYWxsYmFjayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgc2hvdWxkQ2FuY2VsKGV2ZW50LnR5cGUsIGdldFRvdWNoWFkoZXZlbnQpLCBldmVudC50YXJnZXQsIHNob3VsZENhbmNlbEV2ZW50KGV2ZW50LCBwcm9wcy5sb2NrUmVmLmN1cnJlbnQpKTtcbiAgICB9LCBbXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG9ja1N0YWNrLnB1c2goU3R5bGUpO1xuICAgICAgICBwcm9wcy5zZXRDYWxsYmFja3Moe1xuICAgICAgICAgICAgb25TY3JvbGxDYXB0dXJlOiBzY3JvbGxXaGVlbCxcbiAgICAgICAgICAgIG9uV2hlZWxDYXB0dXJlOiBzY3JvbGxXaGVlbCxcbiAgICAgICAgICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZTogc2Nyb2xsVG91Y2hNb3ZlLFxuICAgICAgICB9KTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBzY3JvbGxUb3VjaFN0YXJ0LCBub25QYXNzaXZlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvY2tTdGFjayA9IGxvY2tTdGFjay5maWx0ZXIoZnVuY3Rpb24gKGluc3QpIHsgcmV0dXJuIGluc3QgIT09IFN0eWxlOyB9KTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3doZWVsJywgc2hvdWxkUHJldmVudCwgbm9uUGFzc2l2ZSk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBzaG91bGRQcmV2ZW50LCBub25QYXNzaXZlKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBzY3JvbGxUb3VjaFN0YXJ0LCBub25QYXNzaXZlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIHJlbW92ZVNjcm9sbEJhciA9IHByb3BzLnJlbW92ZVNjcm9sbEJhciwgaW5lcnQgPSBwcm9wcy5pbmVydDtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXG4gICAgICAgIGluZXJ0ID8gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IGdlbmVyYXRlU3R5bGUoaWQpIH0pIDogbnVsbCxcbiAgICAgICAgcmVtb3ZlU2Nyb2xsQmFyID8gUmVhY3QuY3JlYXRlRWxlbWVudChSZW1vdmVTY3JvbGxCYXIsIHsgZ2FwTW9kZTogcHJvcHMuZ2FwTW9kZSB9KSA6IG51bGwpKTtcbn1cbmZ1bmN0aW9uIGdldE91dGVybW9zdFNoYWRvd1BhcmVudChub2RlKSB7XG4gICAgdmFyIHNoYWRvd1BhcmVudCA9IG51bGw7XG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBzaGFkb3dQYXJlbnQgPSBub2RlLmhvc3Q7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBzaGFkb3dQYXJlbnQ7XG59XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVTaW5nbGV0b24gfSBmcm9tICdyZWFjdC1zdHlsZS1zaW5nbGV0b24nO1xuaW1wb3J0IHsgZnVsbFdpZHRoQ2xhc3NOYW1lLCB6ZXJvUmlnaHRDbGFzc05hbWUsIG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgcmVtb3ZlZEJhclNpemVWYXJpYWJsZSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldEdhcFdpZHRoIH0gZnJvbSAnLi91dGlscyc7XG52YXIgU3R5bGUgPSBzdHlsZVNpbmdsZXRvbigpO1xuZXhwb3J0IHZhciBsb2NrQXR0cmlidXRlID0gJ2RhdGEtc2Nyb2xsLWxvY2tlZCc7XG4vLyBpbXBvcnRhbnQgdGlwIC0gb25jZSB3ZSBtZWFzdXJlIHNjcm9sbEJhciB3aWR0aCBhbmQgcmVtb3ZlIHRoZW1cbi8vIHdlIGNvdWxkIG5vdCByZXBlYXQgdGhpcyBvcGVyYXRpb25cbi8vIHRodXMgd2UgYXJlIHVzaW5nIHN0eWxlLXNpbmdsZXRvbiAtIG9ubHkgdGhlIGZpcnN0IFwieWV0IGNvcnJlY3RcIiBzdHlsZSB3aWxsIGJlIGFwcGxpZWQuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24gKF9hLCBhbGxvd1JlbGF0aXZlLCBnYXBNb2RlLCBpbXBvcnRhbnQpIHtcbiAgICB2YXIgbGVmdCA9IF9hLmxlZnQsIHRvcCA9IF9hLnRvcCwgcmlnaHQgPSBfYS5yaWdodCwgZ2FwID0gX2EuZ2FwO1xuICAgIGlmIChnYXBNb2RlID09PSB2b2lkIDApIHsgZ2FwTW9kZSA9ICdtYXJnaW4nOyB9XG4gICAgcmV0dXJuIFwiXFxuICAuXCIuY29uY2F0KG5vU2Nyb2xsYmFyc0NsYXNzTmFtZSwgXCIge1xcbiAgIG92ZXJmbG93OiBoaWRkZW4gXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgIHBhZGRpbmctcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIGJvZHlbXCIpLmNvbmNhdChsb2NrQXR0cmlidXRlLCBcIl0ge1xcbiAgICBvdmVyZmxvdzogaGlkZGVuIFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcXG4gICAgXCIpLmNvbmNhdChbXG4gICAgICAgIGFsbG93UmVsYXRpdmUgJiYgXCJwb3NpdGlvbjogcmVsYXRpdmUgXCIuY29uY2F0KGltcG9ydGFudCwgXCI7XCIpLFxuICAgICAgICBnYXBNb2RlID09PSAnbWFyZ2luJyAmJlxuICAgICAgICAgICAgXCJcXG4gICAgcGFkZGluZy1sZWZ0OiBcIi5jb25jYXQobGVmdCwgXCJweDtcXG4gICAgcGFkZGluZy10b3A6IFwiKS5jb25jYXQodG9wLCBcInB4O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiBcIikuY29uY2F0KHJpZ2h0LCBcInB4O1xcbiAgICBtYXJnaW4tbGVmdDowO1xcbiAgICBtYXJnaW4tdG9wOjA7XFxuICAgIG1hcmdpbi1yaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgICBcIiksXG4gICAgICAgIGdhcE1vZGUgPT09ICdwYWRkaW5nJyAmJiBcInBhZGRpbmctcmlnaHQ6IFwiLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1wiKSxcbiAgICBdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJycpLCBcIlxcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIHtcXG4gICAgcmlnaHQ6IFwiKS5jb25jYXQoZ2FwLCBcInB4IFwiKS5jb25jYXQoaW1wb3J0YW50LCBcIjtcXG4gIH1cXG4gIFxcbiAgLlwiKS5jb25jYXQoZnVsbFdpZHRoQ2xhc3NOYW1lLCBcIiB7XFxuICAgIG1hcmdpbi1yaWdodDogXCIpLmNvbmNhdChnYXAsIFwicHggXCIpLmNvbmNhdChpbXBvcnRhbnQsIFwiO1xcbiAgfVxcbiAgXFxuICAuXCIpLmNvbmNhdCh6ZXJvUmlnaHRDbGFzc05hbWUsIFwiIC5cIikuY29uY2F0KHplcm9SaWdodENsYXNzTmFtZSwgXCIge1xcbiAgICByaWdodDogMCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIC5cIikuY29uY2F0KGZ1bGxXaWR0aENsYXNzTmFtZSwgXCIgLlwiKS5jb25jYXQoZnVsbFdpZHRoQ2xhc3NOYW1lLCBcIiB7XFxuICAgIG1hcmdpbi1yaWdodDogMCBcIikuY29uY2F0KGltcG9ydGFudCwgXCI7XFxuICB9XFxuICBcXG4gIGJvZHlbXCIpLmNvbmNhdChsb2NrQXR0cmlidXRlLCBcIl0ge1xcbiAgICBcIikuY29uY2F0KHJlbW92ZWRCYXJTaXplVmFyaWFibGUsIFwiOiBcIikuY29uY2F0KGdhcCwgXCJweDtcXG4gIH1cXG5cIik7XG59O1xudmFyIGdldEN1cnJlbnRVc2VDb3VudGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb3VudGVyID0gcGFyc2VJbnQoZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSkgfHwgJzAnLCAxMCk7XG4gICAgcmV0dXJuIGlzRmluaXRlKGNvdW50ZXIpID8gY291bnRlciA6IDA7XG59O1xuZXhwb3J0IHZhciB1c2VMb2NrQXR0cmlidXRlID0gZnVuY3Rpb24gKCkge1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUsIChnZXRDdXJyZW50VXNlQ291bnRlcigpICsgMSkudG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbmV3Q291bnRlciA9IGdldEN1cnJlbnRVc2VDb3VudGVyKCkgLSAxO1xuICAgICAgICAgICAgaWYgKG5ld0NvdW50ZXIgPD0gMCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQXR0cmlidXRlKGxvY2tBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUobG9ja0F0dHJpYnV0ZSwgbmV3Q291bnRlci50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG59O1xuLyoqXG4gKiBSZW1vdmVzIHBhZ2Ugc2Nyb2xsYmFyIGFuZCBibG9ja3MgcGFnZSBzY3JvbGwgd2hlbiBtb3VudGVkXG4gKi9cbmV4cG9ydCB2YXIgUmVtb3ZlU2Nyb2xsQmFyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIG5vUmVsYXRpdmUgPSBfYS5ub1JlbGF0aXZlLCBub0ltcG9ydGFudCA9IF9hLm5vSW1wb3J0YW50LCBfYiA9IF9hLmdhcE1vZGUsIGdhcE1vZGUgPSBfYiA9PT0gdm9pZCAwID8gJ21hcmdpbicgOiBfYjtcbiAgICB1c2VMb2NrQXR0cmlidXRlKCk7XG4gICAgLypcbiAgICAgZ2FwIHdpbGwgYmUgbWVhc3VyZWQgb24gZXZlcnkgY29tcG9uZW50IG1vdW50XG4gICAgIGhvd2V2ZXIgaXQgd2lsbCBiZSB1c2VkIG9ubHkgYnkgdGhlIFwiZmlyc3RcIiBpbnZvY2F0aW9uXG4gICAgIGR1ZSB0byBzaW5nbGV0b24gbmF0dXJlIG9mIDxTdHlsZVxuICAgICAqL1xuICAgIHZhciBnYXAgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldEdhcFdpZHRoKGdhcE1vZGUpOyB9LCBbZ2FwTW9kZV0pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlLCB7IHN0eWxlczogZ2V0U3R5bGVzKGdhcCwgIW5vUmVsYXRpdmUsIGdhcE1vZGUsICFub0ltcG9ydGFudCA/ICchaW1wb3J0YW50JyA6ICcnKSB9KTtcbn07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgc3R5bGVzaGVldFNpbmdsZXRvbiB9IGZyb20gJy4vc2luZ2xldG9uJztcbi8qKlxuICogY3JlYXRlcyBhIGhvb2sgdG8gY29udHJvbCBzdHlsZSBzaW5nbGV0b25cbiAqIEBzZWUge0BsaW5rIHN0eWxlU2luZ2xldG9ufSBmb3IgYSBzYWZlciBjb21wb25lbnQgdmVyc2lvblxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogY29uc3QgdXNlU3R5bGUgPSBzdHlsZUhvb2tTaW5nbGV0b24oKTtcbiAqIC8vL1xuICogdXNlU3R5bGUoJ2JvZHkgeyBvdmVyZmxvdzogaGlkZGVufScpO1xuICovXG5leHBvcnQgdmFyIHN0eWxlSG9va1NpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXQgPSBzdHlsZXNoZWV0U2luZ2xldG9uKCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdHlsZXMsIGlzRHluYW1pYykge1xuICAgICAgICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2hlZXQuYWRkKHN0eWxlcyk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNoZWV0LnJlbW92ZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgW3N0eWxlcyAmJiBpc0R5bmFtaWNdKTtcbiAgICB9O1xufTtcbiIsICJ2YXIgY3VycmVudE5vbmNlO1xuZXhwb3J0IHZhciBzZXROb25jZSA9IGZ1bmN0aW9uIChub25jZSkge1xuICAgIGN1cnJlbnROb25jZSA9IG5vbmNlO1xufTtcbmV4cG9ydCB2YXIgZ2V0Tm9uY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGN1cnJlbnROb25jZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE5vbmNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gX193ZWJwYWNrX25vbmNlX187XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwgImltcG9ydCB7IGdldE5vbmNlIH0gZnJvbSAnZ2V0LW5vbmNlJztcbmZ1bmN0aW9uIG1ha2VTdHlsZVRhZygpIHtcbiAgICBpZiAoIWRvY3VtZW50KVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICB0YWcudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgdmFyIG5vbmNlID0gZ2V0Tm9uY2UoKTtcbiAgICBpZiAobm9uY2UpIHtcbiAgICAgICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBub25jZSk7XG4gICAgfVxuICAgIHJldHVybiB0YWc7XG59XG5mdW5jdGlvbiBpbmplY3RTdHlsZXModGFnLCBjc3MpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHRhZy5zdHlsZVNoZWV0KSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGFnLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnNlcnRTdHlsZVRhZyh0YWcpIHtcbiAgICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHRhZyk7XG59XG5leHBvcnQgdmFyIHN0eWxlc2hlZXRTaW5nbGV0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBzdHlsZXNoZWV0ID0gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBhZGQ6IGZ1bmN0aW9uIChzdHlsZSkge1xuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICgoc3R5bGVzaGVldCA9IG1ha2VTdHlsZVRhZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBpbmplY3RTdHlsZXMoc3R5bGVzaGVldCwgc3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnRTdHlsZVRhZyhzdHlsZXNoZWV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY291bnRlci0tO1xuICAgICAgICAgICAgaWYgKCFjb3VudGVyICYmIHN0eWxlc2hlZXQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZXNoZWV0LnBhcmVudE5vZGUgJiYgc3R5bGVzaGVldC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlc2hlZXQpO1xuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG59O1xuIiwgImltcG9ydCB7IHN0eWxlSG9va1NpbmdsZXRvbiB9IGZyb20gJy4vaG9vayc7XG4vKipcbiAqIGNyZWF0ZSBhIENvbXBvbmVudCB0byBhZGQgc3R5bGVzIG9uIGRlbWFuZFxuICogLSBzdHlsZXMgYXJlIGFkZGVkIHdoZW4gZmlyc3QgaW5zdGFuY2UgaXMgbW91bnRlZFxuICogLSBzdHlsZXMgYXJlIHJlbW92ZWQgd2hlbiB0aGUgbGFzdCBpbnN0YW5jZSBpcyB1bm1vdW50ZWRcbiAqIC0gY2hhbmdpbmcgc3R5bGVzIGluIHJ1bnRpbWUgZG9lcyBub3RoaW5nIHVubGVzcyBkeW5hbWljIGlzIHNldC4gQnV0IHdpdGggbXVsdGlwbGUgY29tcG9uZW50cyB0aGF0IGNhbiBsZWFkIHRvIHRoZSB1bmRlZmluZWQgYmVoYXZpb3JcbiAqL1xuZXhwb3J0IHZhciBzdHlsZVNpbmdsZXRvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXNlU3R5bGUgPSBzdHlsZUhvb2tTaW5nbGV0b24oKTtcbiAgICB2YXIgU2hlZXQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHN0eWxlcyA9IF9hLnN0eWxlcywgZHluYW1pYyA9IF9hLmR5bmFtaWM7XG4gICAgICAgIHVzZVN0eWxlKHN0eWxlcywgZHluYW1pYyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIFNoZWV0O1xufTtcbiIsICJleHBvcnQgdmFyIHplcm9HYXAgPSB7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgZ2FwOiAwLFxufTtcbnZhciBwYXJzZSA9IGZ1bmN0aW9uICh4KSB7IHJldHVybiBwYXJzZUludCh4IHx8ICcnLCAxMCkgfHwgMDsgfTtcbnZhciBnZXRPZmZzZXQgPSBmdW5jdGlvbiAoZ2FwTW9kZSkge1xuICAgIHZhciBjcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpO1xuICAgIHZhciBsZWZ0ID0gY3NbZ2FwTW9kZSA9PT0gJ3BhZGRpbmcnID8gJ3BhZGRpbmdMZWZ0JyA6ICdtYXJnaW5MZWZ0J107XG4gICAgdmFyIHRvcCA9IGNzW2dhcE1vZGUgPT09ICdwYWRkaW5nJyA/ICdwYWRkaW5nVG9wJyA6ICdtYXJnaW5Ub3AnXTtcbiAgICB2YXIgcmlnaHQgPSBjc1tnYXBNb2RlID09PSAncGFkZGluZycgPyAncGFkZGluZ1JpZ2h0JyA6ICdtYXJnaW5SaWdodCddO1xuICAgIHJldHVybiBbcGFyc2UobGVmdCksIHBhcnNlKHRvcCksIHBhcnNlKHJpZ2h0KV07XG59O1xuZXhwb3J0IHZhciBnZXRHYXBXaWR0aCA9IGZ1bmN0aW9uIChnYXBNb2RlKSB7XG4gICAgaWYgKGdhcE1vZGUgPT09IHZvaWQgMCkgeyBnYXBNb2RlID0gJ21hcmdpbic7IH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHplcm9HYXA7XG4gICAgfVxuICAgIHZhciBvZmZzZXRzID0gZ2V0T2Zmc2V0KGdhcE1vZGUpO1xuICAgIHZhciBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgIHZhciB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IG9mZnNldHNbMF0sXG4gICAgICAgIHRvcDogb2Zmc2V0c1sxXSxcbiAgICAgICAgcmlnaHQ6IG9mZnNldHNbMl0sXG4gICAgICAgIGdhcDogTWF0aC5tYXgoMCwgd2luZG93V2lkdGggLSBkb2N1bWVudFdpZHRoICsgb2Zmc2V0c1syXSAtIG9mZnNldHNbMF0pLFxuICAgIH07XG59O1xuIiwgInZhciBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0cnkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBwYXNzaXZlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IHZhciBub25QYXNzaXZlID0gcGFzc2l2ZVN1cHBvcnRlZCA/IHsgcGFzc2l2ZTogZmFsc2UgfSA6IGZhbHNlO1xuIiwgInZhciBhbHdheXNDb250YWluc1Njcm9sbCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gdGV4dGFyZWEgd2lsbCBhbHdheXMgX2NvbnRhaW5fIHNjcm9sbCBpbnNpZGUgc2VsZi4gSXQgb25seSBjYW4gYmUgaGlkZGVuXG4gICAgcmV0dXJuIG5vZGUudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJztcbn07XG52YXIgZWxlbWVudENhbkJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSwgb3ZlcmZsb3cpIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSk7XG4gICAgcmV0dXJuIChcbiAgICAvLyBub3Qtbm90LXNjcm9sbGFibGVcbiAgICBzdHlsZXNbb3ZlcmZsb3ddICE9PSAnaGlkZGVuJyAmJlxuICAgICAgICAvLyBjb250YWlucyBzY3JvbGwgaW5zaWRlIHNlbGZcbiAgICAgICAgIShzdHlsZXMub3ZlcmZsb3dZID09PSBzdHlsZXMub3ZlcmZsb3dYICYmICFhbHdheXNDb250YWluc1Njcm9sbChub2RlKSAmJiBzdHlsZXNbb3ZlcmZsb3ddID09PSAndmlzaWJsZScpKTtcbn07XG52YXIgZWxlbWVudENvdWxkQmVWU2Nyb2xsZWQgPSBmdW5jdGlvbiAobm9kZSkgeyByZXR1cm4gZWxlbWVudENhbkJlU2Nyb2xsZWQobm9kZSwgJ292ZXJmbG93WScpOyB9O1xudmFyIGVsZW1lbnRDb3VsZEJlSFNjcm9sbGVkID0gZnVuY3Rpb24gKG5vZGUpIHsgcmV0dXJuIGVsZW1lbnRDYW5CZVNjcm9sbGVkKG5vZGUsICdvdmVyZmxvd1gnKTsgfTtcbmV4cG9ydCB2YXIgbG9jYXRpb25Db3VsZEJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHZhciBjdXJyZW50ID0gbm9kZTtcbiAgICBkbyB7XG4gICAgICAgIC8vIFNraXAgb3ZlciBzaGFkb3cgcm9vdFxuICAgICAgICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgIT09ICd1bmRlZmluZWQnICYmIGN1cnJlbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBpc1Njcm9sbGFibGUgPSBlbGVtZW50Q291bGRCZVNjcm9sbGVkKGF4aXMsIGN1cnJlbnQpO1xuICAgICAgICBpZiAoaXNTY3JvbGxhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBnZXRTY3JvbGxWYXJpYWJsZXMoYXhpcywgY3VycmVudCksIHNjcm9sbEhlaWdodCA9IF9hWzFdLCBjbGllbnRIZWlnaHQgPSBfYVsyXTtcbiAgICAgICAgICAgIGlmIChzY3JvbGxIZWlnaHQgPiBjbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnROb2RlO1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPT0gb3duZXJEb2N1bWVudC5ib2R5KTtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xudmFyIGdldFZTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2Nyb2xsVG9wID0gX2Euc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgPSBfYS5zY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCA9IF9hLmNsaWVudEhlaWdodDtcbiAgICByZXR1cm4gW1xuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHNjcm9sbEhlaWdodCxcbiAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgIF07XG59O1xudmFyIGdldEhTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgc2Nyb2xsTGVmdCA9IF9hLnNjcm9sbExlZnQsIHNjcm9sbFdpZHRoID0gX2Euc2Nyb2xsV2lkdGgsIGNsaWVudFdpZHRoID0gX2EuY2xpZW50V2lkdGg7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsV2lkdGgsXG4gICAgICAgIGNsaWVudFdpZHRoLFxuICAgIF07XG59O1xudmFyIGVsZW1lbnRDb3VsZEJlU2Nyb2xsZWQgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHJldHVybiBheGlzID09PSAndicgPyBlbGVtZW50Q291bGRCZVZTY3JvbGxlZChub2RlKSA6IGVsZW1lbnRDb3VsZEJlSFNjcm9sbGVkKG5vZGUpO1xufTtcbnZhciBnZXRTY3JvbGxWYXJpYWJsZXMgPSBmdW5jdGlvbiAoYXhpcywgbm9kZSkge1xuICAgIHJldHVybiBheGlzID09PSAndicgPyBnZXRWU2Nyb2xsVmFyaWFibGVzKG5vZGUpIDogZ2V0SFNjcm9sbFZhcmlhYmxlcyhub2RlKTtcbn07XG52YXIgZ2V0RGlyZWN0aW9uRmFjdG9yID0gZnVuY3Rpb24gKGF4aXMsIGRpcmVjdGlvbikge1xuICAgIC8qKlxuICAgICAqIElmIHRoZSBlbGVtZW50J3MgZGlyZWN0aW9uIGlzIHJ0bCAocmlnaHQtdG8tbGVmdCksIHRoZW4gc2Nyb2xsTGVmdCBpcyAwIHdoZW4gdGhlIHNjcm9sbGJhciBpcyBhdCBpdHMgcmlnaHRtb3N0IHBvc2l0aW9uLFxuICAgICAqIGFuZCB0aGVuIGluY3JlYXNpbmdseSBuZWdhdGl2ZSBhcyB5b3Ugc2Nyb2xsIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgY29udGVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L3Njcm9sbExlZnRcbiAgICAgKi9cbiAgICByZXR1cm4gYXhpcyA9PT0gJ2gnICYmIGRpcmVjdGlvbiA9PT0gJ3J0bCcgPyAtMSA6IDE7XG59O1xuZXhwb3J0IHZhciBoYW5kbGVTY3JvbGwgPSBmdW5jdGlvbiAoYXhpcywgZW5kVGFyZ2V0LCBldmVudCwgc291cmNlRGVsdGEsIG5vT3ZlcnNjcm9sbCkge1xuICAgIHZhciBkaXJlY3Rpb25GYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3IoYXhpcywgd2luZG93LmdldENvbXB1dGVkU3R5bGUoZW5kVGFyZ2V0KS5kaXJlY3Rpb24pO1xuICAgIHZhciBkZWx0YSA9IGRpcmVjdGlvbkZhY3RvciAqIHNvdXJjZURlbHRhO1xuICAgIC8vIGZpbmQgc2Nyb2xsYWJsZSB0YXJnZXRcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHZhciB0YXJnZXRJbkxvY2sgPSBlbmRUYXJnZXQuY29udGFpbnModGFyZ2V0KTtcbiAgICB2YXIgc2hvdWxkQ2FuY2VsU2Nyb2xsID0gZmFsc2U7XG4gICAgdmFyIGlzRGVsdGFQb3NpdGl2ZSA9IGRlbHRhID4gMDtcbiAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsID0gMDtcbiAgICB2YXIgYXZhaWxhYmxlU2Nyb2xsVG9wID0gMDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBfYSA9IGdldFNjcm9sbFZhcmlhYmxlcyhheGlzLCB0YXJnZXQpLCBwb3NpdGlvbiA9IF9hWzBdLCBzY3JvbGxfMSA9IF9hWzFdLCBjYXBhY2l0eSA9IF9hWzJdO1xuICAgICAgICB2YXIgZWxlbWVudFNjcm9sbCA9IHNjcm9sbF8xIC0gY2FwYWNpdHkgLSBkaXJlY3Rpb25GYWN0b3IgKiBwb3NpdGlvbjtcbiAgICAgICAgaWYgKHBvc2l0aW9uIHx8IGVsZW1lbnRTY3JvbGwpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Q291bGRCZVNjcm9sbGVkKGF4aXMsIHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVTY3JvbGwgKz0gZWxlbWVudFNjcm9sbDtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVTY3JvbGxUb3AgKz0gcG9zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlIChcbiAgICAvLyBwb3J0YWxlZCBjb250ZW50XG4gICAgKCF0YXJnZXRJbkxvY2sgJiYgdGFyZ2V0ICE9PSBkb2N1bWVudC5ib2R5KSB8fFxuICAgICAgICAvLyBzZWxmIGNvbnRlbnRcbiAgICAgICAgKHRhcmdldEluTG9jayAmJiAoZW5kVGFyZ2V0LmNvbnRhaW5zKHRhcmdldCkgfHwgZW5kVGFyZ2V0ID09PSB0YXJnZXQpKSk7XG4gICAgLy8gaGFuZGxlIGVwc2lsb24gYXJvdW5kIDAgKG5vbiBzdGFuZGFyZCB6b29tIGxldmVscylcbiAgICBpZiAoaXNEZWx0YVBvc2l0aXZlICYmXG4gICAgICAgICgobm9PdmVyc2Nyb2xsICYmIE1hdGguYWJzKGF2YWlsYWJsZVNjcm9sbCkgPCAxKSB8fCAoIW5vT3ZlcnNjcm9sbCAmJiBkZWx0YSA+IGF2YWlsYWJsZVNjcm9sbCkpKSB7XG4gICAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpc0RlbHRhUG9zaXRpdmUgJiZcbiAgICAgICAgKChub092ZXJzY3JvbGwgJiYgTWF0aC5hYnMoYXZhaWxhYmxlU2Nyb2xsVG9wKSA8IDEpIHx8ICghbm9PdmVyc2Nyb2xsICYmIC1kZWx0YSA+IGF2YWlsYWJsZVNjcm9sbFRvcCkpKSB7XG4gICAgICAgIHNob3VsZENhbmNlbFNjcm9sbCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzaG91bGRDYW5jZWxTY3JvbGw7XG59O1xuIiwgImltcG9ydCB7IGV4cG9ydFNpZGVjYXIgfSBmcm9tICd1c2Utc2lkZWNhcic7XG5pbXBvcnQgeyBSZW1vdmVTY3JvbGxTaWRlQ2FyIH0gZnJvbSAnLi9TaWRlRWZmZWN0JztcbmltcG9ydCB7IGVmZmVjdENhciB9IGZyb20gJy4vbWVkaXVtJztcbmV4cG9ydCBkZWZhdWx0IGV4cG9ydFNpZGVjYXIoZWZmZWN0Q2FyLCBSZW1vdmVTY3JvbGxTaWRlQ2FyKTtcbiIsICJpbXBvcnQgeyBfX3NwcmVhZEFycmF5cyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaGlkZU90aGVycyB9IGZyb20gJ2FyaWEtaGlkZGVuJztcbmltcG9ydCB7IEludGVyYWN0aXZpdHlEaXNhYmxlciB9IGZyb20gJy4vSW50ZXJhY3Rpdml0eURpc2FibGVyJztcbmltcG9ydCB7IGZvY3VzSGlkZGVuTWFya2VyIH0gZnJvbSAnLi9tZWRpdW0nO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xudmFyIGV4dHJhY3RSZWYgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgcmV0dXJuICdjdXJyZW50JyBpbiByZWYgPyByZWYuY3VycmVudCA6IHJlZjtcbn07XG5leHBvcnQgZnVuY3Rpb24gRWZmZWN0KF9hKSB7XG4gICAgdmFyIHNldExvY2tQcm9wcyA9IF9hLnNldExvY2tQcm9wcywgb25Fc2NhcGVLZXkgPSBfYS5vbkVzY2FwZUtleSwgb25DbGlja091dHNpZGUgPSBfYS5vbkNsaWNrT3V0c2lkZSwgc2hhcmRzID0gX2Euc2hhcmRzLCBvbkFjdGl2YXRpb24gPSBfYS5vbkFjdGl2YXRpb24sIG9uRGVhY3RpdmF0aW9uID0gX2Eub25EZWFjdGl2YXRpb24sIG5vSXNvbGF0aW9uID0gX2Eubm9Jc29sYXRpb247XG4gICAgdmFyIF9iID0gdXNlU3RhdGUodW5kZWZpbmVkKSwgYWN0aXZlTm9kZSA9IF9iWzBdLCBzZXRBY3RpdmVOb2RlID0gX2JbMV07XG4gICAgdmFyIGxhc3RFdmVudFRhcmdldCA9IHVzZVJlZihudWxsKTtcbiAgICB2YXIgbW91c2VUb3VjaGVzID0gdXNlUmVmKDApO1xuICAgIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvbktleURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgIGlmICgoZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScgfHxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQua2V5ID09PSAnRXNjYXBlJyB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudC5rZXlDb2RlID09PSAyNykgJiZcbiAgICAgICAgICAgICAgICAgICAgb25Fc2NhcGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgb25Fc2NhcGVLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uTW91c2VEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fFxuICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9PT0gbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgfHxcbiAgICAgICAgICAgICAgICAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50ICYmIGV2ZW50LmJ1dHRvbiAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hhcmRzICYmXG4gICAgICAgICAgICAgICAgc2hhcmRzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoZXh0cmFjdFJlZilcbiAgICAgICAgICAgICAgICAgICAgLnNvbWUoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChub2RlICYmIG5vZGUuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPT09IGV2ZW50LnRhcmdldDtcbiAgICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbkNsaWNrT3V0c2lkZSkge1xuICAgICAgICAgICAgICAgIG9uQ2xpY2tPdXRzaWRlKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uVG91Y2hTdGFydCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgb25Nb3VzZURvd24oZXZlbnQpO1xuICAgICAgICAgICAgbW91c2VUb3VjaGVzLmN1cnJlbnQgPSBldmVudC50b3VjaGVzLmxlbmd0aDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIG1vdXNlVG91Y2hlcy5jdXJyZW50ID0gZXZlbnQudG91Y2hlcy5sZW5ndGg7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChhY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIG9uTW91c2VEb3duKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBvblRvdWNoRW5kKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Nb3VzZURvd24pO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBvblRvdWNoU3RhcnQpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgb25Ub3VjaEVuZCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSwgW2FjdGl2ZU5vZGUsIG9uQ2xpY2tPdXRzaWRlLCBvbkVzY2FwZUtleV0pO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChhY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICBpZiAob25BY3RpdmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgb25BY3RpdmF0aW9uKGFjdGl2ZU5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAob25EZWFjdGl2YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgb25EZWFjdGl2YXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSwgWyEhYWN0aXZlTm9kZV0pO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdW5kbyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH07XG4gICAgICAgIHZhciB1bm1vdW50ZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIG9uTm9kZUFjdGl2YXRpb24gPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKCFub0lzb2xhdGlvbikge1xuICAgICAgICAgICAgICAgIF91bmRvID0gaGlkZU90aGVycyhfX3NwcmVhZEFycmF5cyhbbm9kZV0sIChzaGFyZHMgfHwgW10pLm1hcChleHRyYWN0UmVmKSksIGRvY3VtZW50LmJvZHksIGZvY3VzSGlkZGVuTWFya2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEFjdGl2ZU5vZGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gbm9kZTsgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvbk5vZGVEZWFjdGl2YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdW5kbygpO1xuICAgICAgICAgICAgaWYgKCF1bm1vdW50ZWQpIHtcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVOb2RlKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRMb2NrUHJvcHMoe1xuICAgICAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblRvdWNoU3RhcnQ6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgbGFzdEV2ZW50VGFyZ2V0LmN1cnJlbnQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkFjdGl2YXRpb246IG9uTm9kZUFjdGl2YXRpb24sXG4gICAgICAgICAgICBvbkRlYWN0aXZhdGlvbjogb25Ob2RlRGVhY3RpdmF0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW5tb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldExvY2tQcm9wcyhmYWxzZSk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEludGVyYWN0aXZpdHlEaXNhYmxlciwgbnVsbCk7XG59XG4iLCAidmFyIGdldERlZmF1bHRQYXJlbnQgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIHNhbXBsZVRhcmdldCA9IEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXRbMF0gOiBvcmlnaW5hbFRhcmdldDtcbiAgICByZXR1cm4gc2FtcGxlVGFyZ2V0Lm93bmVyRG9jdW1lbnQuYm9keTtcbn07XG52YXIgY291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG52YXIgdW5jb250cm9sbGVkTm9kZXMgPSBuZXcgV2Vha01hcCgpO1xudmFyIG1hcmtlck1hcCA9IHt9O1xudmFyIGxvY2tDb3VudCA9IDA7XG52YXIgdW53cmFwSG9zdCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgKG5vZGUuaG9zdCB8fCB1bndyYXBIb3N0KG5vZGUucGFyZW50Tm9kZSkpO1xufTtcbnZhciBjb3JyZWN0VGFyZ2V0cyA9IGZ1bmN0aW9uIChwYXJlbnQsIHRhcmdldHMpIHtcbiAgICByZXR1cm4gdGFyZ2V0c1xuICAgICAgICAubWFwKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKHBhcmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb3JyZWN0ZWRUYXJnZXQgPSB1bndyYXBIb3N0KHRhcmdldCk7XG4gICAgICAgIGlmIChjb3JyZWN0ZWRUYXJnZXQgJiYgcGFyZW50LmNvbnRhaW5zKGNvcnJlY3RlZFRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JyZWN0ZWRUYXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcignYXJpYS1oaWRkZW4nLCB0YXJnZXQsICdpbiBub3QgY29udGFpbmVkIGluc2lkZScsIHBhcmVudCwgJy4gRG9pbmcgbm90aGluZycpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiBCb29sZWFuKHgpOyB9KTtcbn07XG4vKipcbiAqIE1hcmtzIGV2ZXJ5dGhpbmcgZXhjZXB0IGdpdmVuIG5vZGUob3Igbm9kZXMpIGFzIGFyaWEtaGlkZGVuXG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbY29udHJvbEF0dHJpYnV0ZV0gLSBodG1sIEF0dHJpYnV0ZSB0byBjb250cm9sXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xudmFyIGFwcGx5QXR0cmlidXRlVG9PdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUsIGNvbnRyb2xBdHRyaWJ1dGUpIHtcbiAgICB2YXIgdGFyZ2V0cyA9IGNvcnJlY3RUYXJnZXRzKHBhcmVudE5vZGUsIEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXQgOiBbb3JpZ2luYWxUYXJnZXRdKTtcbiAgICBpZiAoIW1hcmtlck1hcFttYXJrZXJOYW1lXSkge1xuICAgICAgICBtYXJrZXJNYXBbbWFya2VyTmFtZV0gPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cbiAgICB2YXIgbWFya2VyQ291bnRlciA9IG1hcmtlck1hcFttYXJrZXJOYW1lXTtcbiAgICB2YXIgaGlkZGVuTm9kZXMgPSBbXTtcbiAgICB2YXIgZWxlbWVudHNUb0tlZXAgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGVsZW1lbnRzVG9TdG9wID0gbmV3IFNldCh0YXJnZXRzKTtcbiAgICB2YXIga2VlcCA9IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICBpZiAoIWVsIHx8IGVsZW1lbnRzVG9LZWVwLmhhcyhlbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50c1RvS2VlcC5hZGQoZWwpO1xuICAgICAgICBrZWVwKGVsLnBhcmVudE5vZGUpO1xuICAgIH07XG4gICAgdGFyZ2V0cy5mb3JFYWNoKGtlZXApO1xuICAgIHZhciBkZWVwID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICBpZiAoIXBhcmVudCB8fCBlbGVtZW50c1RvU3RvcC5oYXMocGFyZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwocGFyZW50LmNoaWxkcmVuLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRzVG9LZWVwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgIGRlZXAobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IG5vZGUuZ2V0QXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWxyZWFkeUhpZGRlbiA9IGF0dHIgIT09IG51bGwgJiYgYXR0ciAhPT0gJ2ZhbHNlJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ZXJWYWx1ZSA9IChjb3VudGVyTWFwLmdldChub2RlKSB8fCAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXJWYWx1ZSA9IChtYXJrZXJDb3VudGVyLmdldChub2RlKSB8fCAwKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXJNYXAuc2V0KG5vZGUsIGNvdW50ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlckNvdW50ZXIuc2V0KG5vZGUsIG1hcmtlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuTm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXJWYWx1ZSA9PT0gMSAmJiBhbHJlYWR5SGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmNvbnRyb2xsZWROb2Rlcy5zZXQobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcmtlclZhbHVlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShtYXJrZXJOYW1lLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxyZWFkeUhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoY29udHJvbEF0dHJpYnV0ZSwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdhcmlhLWhpZGRlbjogY2Fubm90IG9wZXJhdGUgb24gJywgbm9kZSwgZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGRlZXAocGFyZW50Tm9kZSk7XG4gICAgZWxlbWVudHNUb0tlZXAuY2xlYXIoKTtcbiAgICBsb2NrQ291bnQrKztcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBoaWRkZW5Ob2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICB2YXIgY291bnRlclZhbHVlID0gY291bnRlck1hcC5nZXQobm9kZSkgLSAxO1xuICAgICAgICAgICAgdmFyIG1hcmtlclZhbHVlID0gbWFya2VyQ291bnRlci5nZXQobm9kZSkgLSAxO1xuICAgICAgICAgICAgY291bnRlck1hcC5zZXQobm9kZSwgY291bnRlclZhbHVlKTtcbiAgICAgICAgICAgIG1hcmtlckNvdW50ZXIuc2V0KG5vZGUsIG1hcmtlclZhbHVlKTtcbiAgICAgICAgICAgIGlmICghY291bnRlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1bmNvbnRyb2xsZWROb2Rlcy5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoY29udHJvbEF0dHJpYnV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHVuY29udHJvbGxlZE5vZGVzLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbWFya2VyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShtYXJrZXJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxvY2tDb3VudC0tO1xuICAgICAgICBpZiAoIWxvY2tDb3VudCkge1xuICAgICAgICAgICAgLy8gY2xlYXJcbiAgICAgICAgICAgIGNvdW50ZXJNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgY291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICB1bmNvbnRyb2xsZWROb2RlcyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgICBtYXJrZXJNYXAgPSB7fTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuLyoqXG4gKiBNYXJrcyBldmVyeXRoaW5nIGV4Y2VwdCBnaXZlbiBub2RlKG9yIG5vZGVzKSBhcyBhcmlhLWhpZGRlblxuICogQHBhcmFtIHtFbGVtZW50IHwgRWxlbWVudFtdfSBvcmlnaW5hbFRhcmdldCAtIGVsZW1lbnRzIHRvIGtlZXAgb24gdGhlIHBhZ2VcbiAqIEBwYXJhbSBbcGFyZW50Tm9kZV0gLSB0b3AgZWxlbWVudCwgZGVmYXVsdHMgdG8gZG9jdW1lbnQuYm9keVxuICogQHBhcmFtIHtTdHJpbmd9IFttYXJrZXJOYW1lXSAtIGEgc3BlY2lhbCBhdHRyaWJ1dGUgdG8gbWFyayBldmVyeSBub2RlXG4gKiBAcmV0dXJuIHtVbmRvfSB1bmRvIGNvbW1hbmRcbiAqL1xuZXhwb3J0IHZhciBoaWRlT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKSB7XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gJ2RhdGEtYXJpYS1oaWRkZW4nOyB9XG4gICAgdmFyIHRhcmdldHMgPSBBcnJheS5mcm9tKEFycmF5LmlzQXJyYXkob3JpZ2luYWxUYXJnZXQpID8gb3JpZ2luYWxUYXJnZXQgOiBbb3JpZ2luYWxUYXJnZXRdKTtcbiAgICB2YXIgYWN0aXZlUGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgZ2V0RGVmYXVsdFBhcmVudChvcmlnaW5hbFRhcmdldCk7XG4gICAgaWYgKCFhY3RpdmVQYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgIH1cbiAgICAvLyB3ZSBzaG91bGQgbm90IGhpZGUgYXJpYUxpdmUgZWxlbWVudHMgLSBodHRwczovL2dpdGh1Yi5jb20vdGhlS2FzaGV5L2FyaWEtaGlkZGVuL2lzc3Vlcy8xMFxuICAgIHRhcmdldHMucHVzaC5hcHBseSh0YXJnZXRzLCBBcnJheS5mcm9tKGFjdGl2ZVBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgnW2FyaWEtbGl2ZV0nKSkpO1xuICAgIHJldHVybiBhcHBseUF0dHJpYnV0ZVRvT3RoZXJzKHRhcmdldHMsIGFjdGl2ZVBhcmVudE5vZGUsIG1hcmtlck5hbWUsICdhcmlhLWhpZGRlbicpO1xufTtcbi8qKlxuICogTWFya3MgZXZlcnl0aGluZyBleGNlcHQgZ2l2ZW4gbm9kZShvciBub2RlcykgYXMgaW5lcnRcbiAqIEBwYXJhbSB7RWxlbWVudCB8IEVsZW1lbnRbXX0gb3JpZ2luYWxUYXJnZXQgLSBlbGVtZW50cyB0byBrZWVwIG9uIHRoZSBwYWdlXG4gKiBAcGFyYW0gW3BhcmVudE5vZGVdIC0gdG9wIGVsZW1lbnQsIGRlZmF1bHRzIHRvIGRvY3VtZW50LmJvZHlcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbWFya2VyTmFtZV0gLSBhIHNwZWNpYWwgYXR0cmlidXRlIHRvIG1hcmsgZXZlcnkgbm9kZVxuICogQHJldHVybiB7VW5kb30gdW5kbyBjb21tYW5kXG4gKi9cbmV4cG9ydCB2YXIgaW5lcnRPdGhlcnMgPSBmdW5jdGlvbiAob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpIHtcbiAgICBpZiAobWFya2VyTmFtZSA9PT0gdm9pZCAwKSB7IG1hcmtlck5hbWUgPSAnZGF0YS1pbmVydC1lZCc7IH1cbiAgICB2YXIgYWN0aXZlUGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgZ2V0RGVmYXVsdFBhcmVudChvcmlnaW5hbFRhcmdldCk7XG4gICAgaWYgKCFhY3RpdmVQYXJlbnROb2RlKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9O1xuICAgIH1cbiAgICByZXR1cm4gYXBwbHlBdHRyaWJ1dGVUb090aGVycyhvcmlnaW5hbFRhcmdldCwgYWN0aXZlUGFyZW50Tm9kZSwgbWFya2VyTmFtZSwgJ2luZXJ0Jyk7XG59O1xuLyoqXG4gKiBAcmV0dXJucyBpZiBjdXJyZW50IGJyb3dzZXIgc3VwcG9ydHMgaW5lcnRcbiAqL1xuZXhwb3J0IHZhciBzdXBwb3J0c0luZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIEhUTUxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnaW5lcnQnKTtcbn07XG4vKipcbiAqIEF1dG9tYXRpYyBmdW5jdGlvbiB0byBcInN1cHByZXNzXCIgRE9NIGVsZW1lbnRzIC0gX2hpZGVfIG9yIF9pbmVydF8gaW4gdGhlIGJlc3QgcG9zc2libGUgd2F5XG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBFbGVtZW50W119IG9yaWdpbmFsVGFyZ2V0IC0gZWxlbWVudHMgdG8ga2VlcCBvbiB0aGUgcGFnZVxuICogQHBhcmFtIFtwYXJlbnROb2RlXSAtIHRvcCBlbGVtZW50LCBkZWZhdWx0cyB0byBkb2N1bWVudC5ib2R5XG4gKiBAcGFyYW0ge1N0cmluZ30gW21hcmtlck5hbWVdIC0gYSBzcGVjaWFsIGF0dHJpYnV0ZSB0byBtYXJrIGV2ZXJ5IG5vZGVcbiAqIEByZXR1cm4ge1VuZG99IHVuZG8gY29tbWFuZFxuICovXG5leHBvcnQgdmFyIHN1cHByZXNzT3RoZXJzID0gZnVuY3Rpb24gKG9yaWdpbmFsVGFyZ2V0LCBwYXJlbnROb2RlLCBtYXJrZXJOYW1lKSB7XG4gICAgaWYgKG1hcmtlck5hbWUgPT09IHZvaWQgMCkgeyBtYXJrZXJOYW1lID0gJ2RhdGEtc3VwcHJlc3NlZCc7IH1cbiAgICByZXR1cm4gKHN1cHBvcnRzSW5lcnQoKSA/IGluZXJ0T3RoZXJzIDogaGlkZU90aGVycykob3JpZ2luYWxUYXJnZXQsIHBhcmVudE5vZGUsIG1hcmtlck5hbWUpO1xufTtcbiIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZVNpbmdsZXRvbiB9IGZyb20gJ3JlYWN0LXN0eWxlLXNpbmdsZXRvbic7XG5pbXBvcnQgeyBmb2N1c0hpZGRlbk1hcmtlciB9IGZyb20gJy4vbWVkaXVtJztcbnZhciBTdHlsZSA9IHN0eWxlU2luZ2xldG9uKCk7XG52YXIgc3R5bGVzID0gXCJcXG4gW1wiICsgZm9jdXNIaWRkZW5NYXJrZXIgKyBcIl0ge1xcbiAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XFxuIH1cXG5cIjtcbmV4cG9ydCB2YXIgSW50ZXJhY3Rpdml0eURpc2FibGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZSwgeyBzdHlsZXM6IHN0eWxlcyB9KTsgfTtcbiIsICJpbXBvcnQgeyBleHBvcnRTaWRlY2FyIH0gZnJvbSAndXNlLXNpZGVjYXInO1xuaW1wb3J0ICdyZWFjdC1mb2N1cy1sb2NrL3NpZGVjYXInO1xuaW1wb3J0ICdyZWFjdC1yZW1vdmUtc2Nyb2xsL3NpZGVjYXInO1xuaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnLi9FZmZlY3QnO1xuaW1wb3J0IHsgZWZmZWN0Q2FyIH0gZnJvbSAnLi9tZWRpdW0nO1xuZXhwb3J0IGRlZmF1bHQgZXhwb3J0U2lkZWNhcihlZmZlY3RDYXIsIEVmZmVjdCk7XG4iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5pbXBvcnQgeyBjc3MgYXMgX2NzcyB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIF9leGNsdWRlZCA9IFtcImFuY2hvckNsYXNzTmFtZVwiLCBcImFuY2hvclBvc2l0aW9uXCIsIFwiYnV0dG9uXCIsIFwiYnV0dG9uUmVmXCIsIFwiaW5zZXJ0XCIsIFwiaXNPcGVuXCIsIFwib3duRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNsb3NlUG9wb3ZlclwiLCBcInBhbmVsQ2xhc3NOYW1lXCIsIFwicGFuZWxQYWRkaW5nU2l6ZVwiLCBcInBhbmVsUHJvcHNcIiwgXCJwYW5lbFJlZlwiLCBcInBhbmVsU3R5bGVcIiwgXCJwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dFwiLCBcInBvcG92ZXJSZWZcIiwgXCJoYXNBcnJvd1wiLCBcImFycm93Q2hpbGRyZW5cIiwgXCJyZXBvc2l0aW9uT25TY3JvbGxcIiwgXCJ6SW5kZXhcIiwgXCJhdHRhY2hUb0FuY2hvclwiLCBcImRpc3BsYXlcIiwgXCJvZmZzZXRcIiwgXCJvblRyYXBEZWFjdGl2YXRpb25cIiwgXCJidWZmZXJcIiwgXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1sYWJlbGxlZGJ5XCIsIFwiY29udGFpbmVyXCIsIFwiZm9jdXNUcmFwUHJvcHNcIiwgXCJpbml0aWFsRm9jdXNcIiwgXCJ0YWJJbmRleFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBmb2N1c2FibGUgfSBmcm9tICd0YWJiYWJsZSc7XG5pbXBvcnQgeyBFdWlGb2N1c1RyYXAgfSBmcm9tICcuLi9mb2N1c190cmFwJztcbmltcG9ydCB7IGNhc2NhZGluZ01lbnVLZXlzLCBnZXRUcmFuc2l0aW9uVGltaW5ncywgZ2V0V2FpdER1cmF0aW9uLCBwZXJmb3JtT25GcmFtZSwgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpU2NyZWVuUmVhZGVyT25seSB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgRXVpUG9ydGFsIH0gZnJvbSAnLi4vcG9ydGFsJztcbmltcG9ydCB7IEV1aU11dGF0aW9uT2JzZXJ2ZXIgfSBmcm9tICcuLi9vYnNlcnZlci9tdXRhdGlvbl9vYnNlcnZlcic7XG5pbXBvcnQgeyBmaW5kUG9wb3ZlclBvc2l0aW9uLCBnZXRFbGVtZW50WkluZGV4IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciB9IGZyb20gJy4uL291dHNpZGVfY2xpY2tfZGV0ZWN0b3InO1xuaW1wb3J0IHsgRXVpUG9wb3ZlckFycm93IH0gZnJvbSAnLi9wb3BvdmVyX2Fycm93JztcbmltcG9ydCB7IGV1aVBvcG92ZXJTdHlsZXMgfSBmcm9tICcuL3BvcG92ZXIuc3R5bGVzJztcbmltcG9ydCB7IEV1aVBvcG92ZXJQYW5lbCB9IGZyb20gJy4vcG9wb3Zlcl9wYW5lbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBwb3BvdmVyQW5jaG9yUG9zaXRpb24gPSBbJ3VwQ2VudGVyJywgJ3VwTGVmdCcsICd1cFJpZ2h0JywgJ2Rvd25DZW50ZXInLCAnZG93bkxlZnQnLCAnZG93blJpZ2h0JywgJ2xlZnRDZW50ZXInLCAnbGVmdFVwJywgJ2xlZnREb3duJywgJ3JpZ2h0Q2VudGVyJywgJ3JpZ2h0VXAnLCAncmlnaHREb3duJ107XG52YXIgYW5jaG9yUG9zaXRpb25Ub1BvcG92ZXJQb3NpdGlvbk1hcCA9IHtcbiAgdXA6ICd0b3AnLFxuICByaWdodDogJ3JpZ2h0JyxcbiAgZG93bjogJ2JvdHRvbScsXG4gIGxlZnQ6ICdsZWZ0J1xufTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3BvdmVyUG9zaXRpb25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pIHtcbiAgLy8gbWFwcyB0aGUgYW5jaG9yIHBvc2l0aW9uIHRvIHRoZSBtYXRjaGluZyBwb3BvdmVyIHBvc2l0aW9uXG4gIC8vIGUuZy4gXCJ1cExlZnRcIiAtPiBcInRvcFwiLCBcImRvd25SaWdodFwiIC0+IFwiYm90dG9tXCJcbiAgLy8gZXh0cmFjdCB0aGUgZmlyc3QgcG9zaXRpb25hbCB3b3JkIGZyb20gYW5jaG9yUG9zaXRpb246XG4gIC8vIHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIChcIiBeIFwiKSBvZiBhbmNob3JQb3NpdGlvbiBhbmRcbiAgLy8gY2FwdHVyZXMgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIChcIiAoLio/KSBcIikgdW50aWwgdGhlXG4gIC8vIGZpcnN0IGNhcGl0YWwgbGV0dGVyIChcIiBbQS1aXSBcIikgaXMgZW5jb3VudGVyZWRcbiAgdmFyIF9yZWYgPSBhbmNob3JQb3NpdGlvbi5tYXRjaCgvXiguKj8pW0EtWl0vKSxcbiAgICAgIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMiksXG4gICAgICBwcmltYXJ5UG9zaXRpb24gPSBfcmVmMlsxXTtcblxuICByZXR1cm4gYW5jaG9yUG9zaXRpb25Ub1BvcG92ZXJQb3NpdGlvbk1hcFtwcmltYXJ5UG9zaXRpb25dO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcG92ZXJBbGlnbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbikge1xuICAvLyBtYXBzIHRoZSBncmF2aXR5IHRvIHRoZSBtYXRjaGluZyBwb3BvdmVyIHBvc2l0aW9uXG4gIC8vIGUuZy4gXCJ1cExlZnRcIiAtPiBcImxlZnRcIiwgXCJyaWdodERvd25cIiAtPiBcImJvdHRvbVwiXG4gIC8vIGV4dHJhY3QgdGhlIHNlY29uZCBwb3NpdGlvbmFsIHdvcmQgZnJvbSBhbmNob3JQb3NpdGlvbjpcbiAgLy8gc3RhcnRzIGEgY2FwdHVyZSBncm91cCBhdCB0aGUgZmlyc3QgY2FwaXRhbCBsZXR0ZXJcbiAgLy8gYW5kIGluY2x1ZGVzIGV2ZXJ5dGhpbmcgYWZ0ZXIgaXRcbiAgdmFyIF9yZWYzID0gYW5jaG9yUG9zaXRpb24ubWF0Y2goLyhbQS1aXS4qKS8pLFxuICAgICAgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMiksXG4gICAgICBhbGlnbiA9IF9yZWY0WzFdOyAvLyB0aGlzIHBlcmZvcm1zIHR3byB0YXNrczpcbiAgLy8gMS4gbm9ybWFsaXplcyB0aGUgYWxpZ24gcG9zaXRpb24gYnkgbG93ZXJjYXNpbmcgaXRcbiAgLy8gMi4gYGNlbnRlcmAgZG9lc24ndCBleGlzdCBpbiB0aGUgbG9va3VwIG1hcCB3aGljaCBjb252ZXJ0cyBpdCB0byBgdW5kZWZpbmVkYCBtZWFuaW5nIG5vIGFsaWduXG5cblxuICByZXR1cm4gYW5jaG9yUG9zaXRpb25Ub1BvcG92ZXJQb3NpdGlvbk1hcFthbGlnbi50b0xvd2VyQ2FzZSgpXTtcbn1cbnZhciBERUZBVUxUX1BPUE9WRVJfU1RZTEVTID0ge1xuICB0b3A6IDUwLFxuICBsZWZ0OiA1MFxufTtcbnZhciByZXR1cm5Gb2N1c0NvbmZpZyA9IHtcbiAgcHJldmVudFNjcm9sbDogdHJ1ZVxufTtcbnZhciBjbG9zaW5nVHJhbnNpdGlvblRpbWUgPSAyNTA7IC8vIFRPRE86IERSWSBvdXQgdmFyIHdoZW4gY29udmVydGluZyB0byBDU1MtaW4tSlNcblxuZXhwb3J0IHZhciBFdWlQb3BvdmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlQb3BvdmVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVBvcG92ZXIpO1xuXG4gIGZ1bmN0aW9uIEV1aVBvcG92ZXIocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpUG9wb3Zlcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZXNwb3NpdGlvblRpbWVvdXRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdHJhbmRlZEZvY3VzVGltZW91dFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsb3NpbmdUcmFuc2l0aW9uVGltZW91dFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWVcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJidXR0b25cIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicGFuZWxcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiZGVzY3JpcHRpb25JZFwiLCBodG1sSWRHZW5lcmF0b3IoKSgpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbG9zZVBvcG92ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmlzT3Blbikge1xuICAgICAgICBfdGhpcy5wcm9wcy5jbG9zZVBvcG92ZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkVzY2FwZUtleVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgX3RoaXMuY2xvc2VQb3BvdmVyKCk7XG5cbiAgICAgICAgX3RoaXMuaGFuZGxlU3RyYW5kZWRGb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImhhbmRsZVN0cmFuZGVkRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc3RyYW5kZWRGb2N1c1RpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIElmIGByZXR1cm5Gb2N1c2AgZmFpbGVkIGFuZCBmb2N1cyB3YXMgc3RyYW5kZWQgb24gdGhlIGJvZHksXG4gICAgICAgIC8vIGF0dGVtcHQgdG8gbWFudWFsbHkgcmVzdG9yZSBmb2N1cyB0byB0aGUgdG9nZ2xlIGJ1dHRvblxuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICAgIGlmICghX3RoaXMuYnV0dG9uKSByZXR1cm47XG4gICAgICAgICAgdmFyIGZvY3VzYWJsZUl0ZW1zID0gZm9jdXNhYmxlKF90aGlzLmJ1dHRvbik7XG4gICAgICAgICAgaWYgKCFmb2N1c2FibGVJdGVtcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICB2YXIgdG9nZ2xlQnV0dG9uID0gZm9jdXNhYmxlSXRlbXNbMF07XG4gICAgICAgICAgdG9nZ2xlQnV0dG9uLmZvY3VzKHJldHVybkZvY3VzQ29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgfSwgY2xvc2luZ1RyYW5zaXRpb25UaW1lKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSBjYXNjYWRpbmdNZW51S2V5cy5FU0NBUEUpIHtcbiAgICAgICAgX3RoaXMub25Fc2NhcGVLZXkoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xpY2tPdXRzaWRlXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gb25seSBjbG9zZSB0aGUgcG9wb3ZlciBpZiB0aGUgZXZlbnQgc291cmNlIGlzbid0IHRoZSBhbmNob3IgYnV0dG9uXG4gICAgICAvLyBvdGhlcndpc2UsIGl0IGlzIHVwIHRvIHRoZSBhbmNob3IgdG8gdG9nZ2xlIHRoZSBwb3BvdmVyJ3Mgb3BlbiBzdGF0dXNcbiAgICAgIGlmIChfdGhpcy5idXR0b24gJiYgX3RoaXMuYnV0dG9uLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgPT09IGZhbHNlKSB7XG4gICAgICAgIF90aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uT3BlblBvcG92ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KF90aGlzLnN0cmFuZGVkRm9jdXNUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dChfdGhpcy5jbG9zaW5nVHJhbnNpdGlvblRpbWVvdXQpO1xuXG4gICAgICBpZiAoX3RoaXMuY2xvc2luZ1RyYW5zaXRpb25BbmltYXRpb25GcmFtZSkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShfdGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lKTtcbiAgICAgIH0gLy8gV2UgbmVlZCB0byBzZXQgdGhpcyBzdGF0ZSBhIGJlYXQgYWZ0ZXIgdGhlIHJlbmRlciB0YWtlcyBwbGFjZSwgc28gdGhhdCB0aGUgQ1NTXG4gICAgICAvLyB0cmFuc2l0aW9uIGNhbiB0YWtlIGVmZmVjdC5cblxuXG4gICAgICBfdGhpcy5jbG9zaW5nVHJhbnNpdGlvbkFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc09wZW5pbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9KTsgLy8gZm9yIGVhY2ggY2hpbGQgZWxlbWVudCBvZiBgdGhpcy5wYW5lbGAsIGZpbmQgYW55IHRyYW5zaXRpb24gZHVyYXRpb24gd2Ugc2hvdWxkIHdhaXQgZm9yIGJlZm9yZSBzdGFiaWxpemluZ1xuXG4gICAgICB2YXIgX0FycmF5JHByb3RvdHlwZSRzbGljID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoX3RoaXMucGFuZWwgPyBbX3RoaXMucGFuZWxdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoQXJyYXkuZnJvbShfdGhpcy5wYW5lbC5jaGlsZHJlbikpKSA6IFtdKS5yZWR1Y2UoZnVuY3Rpb24gKF9yZWY1LCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBkdXJhdGlvbk1hdGNoID0gX3JlZjUuZHVyYXRpb25NYXRjaCxcbiAgICAgICAgICAgIGRlbGF5TWF0Y2ggPSBfcmVmNS5kZWxheU1hdGNoO1xuICAgICAgICB2YXIgdHJhbnNpdGlvblRpbWluZ3MgPSBnZXRUcmFuc2l0aW9uVGltaW5ncyhlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkdXJhdGlvbk1hdGNoOiBNYXRoLm1heChkdXJhdGlvbk1hdGNoLCB0cmFuc2l0aW9uVGltaW5ncy5kdXJhdGlvbk1hdGNoKSxcbiAgICAgICAgICBkZWxheU1hdGNoOiBNYXRoLm1heChkZWxheU1hdGNoLCB0cmFuc2l0aW9uVGltaW5ncy5kZWxheU1hdGNoKVxuICAgICAgICB9O1xuICAgICAgfSwge1xuICAgICAgICBkdXJhdGlvbk1hdGNoOiAwLFxuICAgICAgICBkZWxheU1hdGNoOiAwXG4gICAgICB9KSxcbiAgICAgICAgICBkdXJhdGlvbk1hdGNoID0gX0FycmF5JHByb3RvdHlwZSRzbGljLmR1cmF0aW9uTWF0Y2gsXG4gICAgICAgICAgZGVsYXlNYXRjaCA9IF9BcnJheSRwcm90b3R5cGUkc2xpYy5kZWxheU1hdGNoO1xuXG4gICAgICBjbGVhclRpbWVvdXQoX3RoaXMucmVzcG9zaXRpb25UaW1lb3V0KTtcbiAgICAgIF90aGlzLnJlc3Bvc2l0aW9uVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzT3BlblN0YWJsZTogdHJ1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBkdXJhdGlvbk1hdGNoICsgZGVsYXlNYXRjaCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25NdXRhdGlvblwiLCBmdW5jdGlvbiAocmVjb3Jkcykge1xuICAgICAgdmFyIHdhaXREdXJhdGlvbiA9IGdldFdhaXREdXJhdGlvbihyZWNvcmRzKTtcblxuICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQoKTtcblxuICAgICAgcGVyZm9ybU9uRnJhbWUod2FpdER1cmF0aW9uLCBfdGhpcy5wb3NpdGlvblBvcG92ZXJGaXhlZCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9zaXRpb25Qb3BvdmVyXCIsIGZ1bmN0aW9uIChhbGxvd0VuZm9yY2VQb3NpdGlvbikge1xuICAgICAgaWYgKF90aGlzLmJ1dHRvbiA9PSBudWxsIHx8IF90aGlzLnBhbmVsID09IG51bGwpIHJldHVybjtcbiAgICAgIHZhciBfcmVmNiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGFuY2hvclBvc2l0aW9uID0gX3JlZjYuYW5jaG9yUG9zaXRpb247XG4gICAgICB2YXIgcG9zaXRpb24gPSBnZXRQb3BvdmVyUG9zaXRpb25Gcm9tQW5jaG9yUG9zaXRpb24oYW5jaG9yUG9zaXRpb24pO1xuICAgICAgdmFyIGZvcmNlUG9zaXRpb24gPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChhbGxvd0VuZm9yY2VQb3NpdGlvbiAmJiBfdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgJiYgX3RoaXMuc3RhdGUub3BlblBvc2l0aW9uICE9IG51bGwpIHtcbiAgICAgICAgcG9zaXRpb24gPSBfdGhpcy5zdGF0ZS5vcGVuUG9zaXRpb247XG4gICAgICAgIGZvcmNlUG9zaXRpb24gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2ZpbmRQb3BvdmVyUG9zaXRpb24gPSBmaW5kUG9wb3ZlclBvc2l0aW9uKHtcbiAgICAgICAgY29udGFpbmVyOiBfdGhpcy5wcm9wcy5jb250YWluZXIsXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgZm9yY2VQb3NpdGlvbjogZm9yY2VQb3NpdGlvbixcbiAgICAgICAgYWxpZ246IGdldFBvcG92ZXJBbGlnbkZyb21BbmNob3JQb3NpdGlvbihhbmNob3JQb3NpdGlvbiksXG4gICAgICAgIGFuY2hvcjogX3RoaXMuYnV0dG9uLFxuICAgICAgICBwb3BvdmVyOiBfdGhpcy5wYW5lbCxcbiAgICAgICAgb2Zmc2V0OiAhX3RoaXMucHJvcHMuYXR0YWNoVG9BbmNob3IgJiYgX3RoaXMucHJvcHMuaGFzQXJyb3cgPyAxNiArIChfdGhpcy5wcm9wcy5vZmZzZXQgfHwgMCkgOiA4ICsgKF90aGlzLnByb3BzLm9mZnNldCB8fCAwKSxcbiAgICAgICAgYXJyb3dDb25maWc6IHtcbiAgICAgICAgICBhcnJvd1dpZHRoOiAyNCxcbiAgICAgICAgICBhcnJvd0J1ZmZlcjogMTBcbiAgICAgICAgfSxcbiAgICAgICAgcmV0dXJuQm91bmRpbmdCb3g6IF90aGlzLnByb3BzLmF0dGFjaFRvQW5jaG9yLFxuICAgICAgICBidWZmZXI6IF90aGlzLnByb3BzLmJ1ZmZlclxuICAgICAgfSksXG4gICAgICAgICAgdG9wID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24udG9wLFxuICAgICAgICAgIGxlZnQgPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5sZWZ0LFxuICAgICAgICAgIGZvdW5kUG9zaXRpb24gPSBfZmluZFBvcG92ZXJQb3NpdGlvbi5wb3NpdGlvbixcbiAgICAgICAgICBhcnJvdyA9IF9maW5kUG9wb3ZlclBvc2l0aW9uLmFycm93LFxuICAgICAgICAgIGFuY2hvckJvdW5kaW5nQm94ID0gX2ZpbmRQb3BvdmVyUG9zaXRpb24uYW5jaG9yQm91bmRpbmdCb3g7IC8vIHRoZSBwb3BvdmVyJ3Mgei1pbmRleCBtdXN0IGluaGVyaXQgZnJvbSB0aGUgYnV0dG9uXG4gICAgICAvLyB0aGlzIGtlZXBzIGEgYnV0dG9uJ3MgcG9wb3ZlciB1bmRlciBhIGZseW91dCB0aGF0IHdvdWxkIGNvdmVyIHRoZSBidXR0b25cbiAgICAgIC8vIGJ1dCBhIHBvcG92ZXIgdHJpZ2dlcmVkIGluc2lkZSBhIGZseW91dCB3aWxsIGFwcGVhciBvdmVyIHRoYXQgZmx5b3V0XG5cblxuICAgICAgdmFyIHpJbmRleFByb3AgPSBfdGhpcy5wcm9wcy56SW5kZXg7XG4gICAgICB2YXIgekluZGV4ID0gekluZGV4UHJvcCA9PSBudWxsID8gZ2V0RWxlbWVudFpJbmRleChfdGhpcy5idXR0b24sIF90aGlzLnBhbmVsKSArIDIwMDAgOiB6SW5kZXhQcm9wO1xuXG4gICAgICB2YXIgcG9wb3ZlclN0eWxlcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgX3RoaXMucHJvcHMucGFuZWxTdHlsZSksIHt9LCB7XG4gICAgICAgIHRvcDogdG9wLFxuICAgICAgICBsZWZ0OiBfdGhpcy5wcm9wcy5hdHRhY2hUb0FuY2hvciAmJiBhbmNob3JCb3VuZGluZ0JveCA/IGFuY2hvckJvdW5kaW5nQm94LmxlZnQgOiBsZWZ0LFxuICAgICAgICB6SW5kZXg6IHpJbmRleFxuICAgICAgfSk7XG5cbiAgICAgIHZhciB3aWxsUmVuZGVyQXJyb3cgPSAhX3RoaXMucHJvcHMuYXR0YWNoVG9BbmNob3IgJiYgX3RoaXMucHJvcHMuaGFzQXJyb3c7XG4gICAgICB2YXIgYXJyb3dTdHlsZXMgPSB3aWxsUmVuZGVyQXJyb3cgPyBhcnJvdyA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBhcnJvd1Bvc2l0aW9uID0gZm91bmRQb3NpdGlvbjtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwb3BvdmVyU3R5bGVzOiBwb3BvdmVyU3R5bGVzLFxuICAgICAgICBhcnJvd1N0eWxlczogYXJyb3dTdHlsZXMsXG4gICAgICAgIGFycm93UG9zaXRpb246IGFycm93UG9zaXRpb24sXG4gICAgICAgIG9wZW5Qb3NpdGlvbjogZm91bmRQb3NpdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9zaXRpb25Qb3BvdmVyRml4ZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyKHRydWUpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBvc2l0aW9uUG9wb3ZlckZsdWlkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnBvc2l0aW9uUG9wb3ZlcihmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicGFuZWxSZWZcIiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIF90aGlzLnBhbmVsID0gbm9kZTtcbiAgICAgIF90aGlzLnByb3BzLnBhbmVsUmVmICYmIF90aGlzLnByb3BzLnBhbmVsUmVmKG5vZGUpO1xuXG4gICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgIC8vIHBhbmVsIGhhcyB1bm1vdW50ZWQsIHJlc3RvcmUgdGhlIHN0YXRlIGRlZmF1bHRzXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBwb3BvdmVyU3R5bGVzOiBERUZBVUxUX1BPUE9WRVJfU1RZTEVTLFxuICAgICAgICAgIGFycm93U3R5bGVzOiB7fSxcbiAgICAgICAgICBhcnJvd1Bvc2l0aW9uOiBudWxsLFxuICAgICAgICAgIG9wZW5Qb3NpdGlvbjogbnVsbCxcbiAgICAgICAgICBpc09wZW5TdGFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBfdGhpcy5wb3NpdGlvblBvcG92ZXJGbHVpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwYW5lbCBpcyBjb21pbmcgaW50byBleGlzdGVuY2VcbiAgICAgICAgX3RoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQoKTtcblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgX3RoaXMucG9zaXRpb25Qb3BvdmVyRmx1aWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImJ1dHRvblJlZlwiLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgX3RoaXMuYnV0dG9uID0gbm9kZTtcbiAgICAgIF90aGlzLnByb3BzLmJ1dHRvblJlZiAmJiBfdGhpcy5wcm9wcy5idXR0b25SZWYobm9kZSk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHByZXZQcm9wczoge1xuICAgICAgICBpc09wZW46IHByb3BzLmlzT3BlblxuICAgICAgfSxcbiAgICAgIHN1cHByZXNzaW5nUG9wb3ZlcjogcHJvcHMuaXNPcGVuLFxuICAgICAgLy8gb25seSBzdXBwcmVzcyBpZiBjcmVhdGVkIHdpdGggaXNPcGVuPXRydWVcbiAgICAgIGlzQ2xvc2luZzogZmFsc2UsXG4gICAgICBpc09wZW5pbmc6IGZhbHNlLFxuICAgICAgcG9wb3ZlclN0eWxlczogREVGQVVMVF9QT1BPVkVSX1NUWUxFUyxcbiAgICAgIGFycm93U3R5bGVzOiB7fSxcbiAgICAgIGFycm93UG9zaXRpb246IG51bGwsXG4gICAgICBvcGVuUG9zaXRpb246IG51bGwsXG4gICAgICAvLyBvbmNlIGEgc3RhYmxlIHBvc2l0aW9uIGhhcyBiZWVuIGZvdW5kLCBrZWVwIHRoZSBjb250ZW50cyBvbiB0aGF0IHNpZGVcbiAgICAgIGlzT3BlblN0YWJsZTogZmFsc2UgLy8gd2FpdCBmb3IgYW55IGluaXRpYWwgb3BlbmluZyB0cmFuc2l0aW9ucyB0byBmaW5pc2ggYmVmb3JlIG1hcmtpbmcgYXMgc3RhYmxlXG5cbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlQb3BvdmVyLCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5zdGF0ZS5zdXBwcmVzc2luZ1BvcG92ZXIpIHtcbiAgICAgICAgLy8gY29tcG9uZW50IHdhcyBjcmVhdGVkIHdpdGggaXNPcGVuPXRydWU7IG5vdyB0aGF0IGl0J3MgbW91bnRlZFxuICAgICAgICAvLyBzdG9wIHN1cHByZXNzaW5nIGFuZCBzdGFydCBvcGVuaW5nXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtbW91bnQtc2V0LXN0YXRlXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHN1cHByZXNzaW5nUG9wb3ZlcjogZmFsc2UsXG4gICAgICAgICAgaXNPcGVuaW5nOiB0cnVlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIub25PcGVuUG9wb3ZlcigpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICAvLyBUaGUgcG9wb3ZlciBpcyBiZWluZyBvcGVuZWQuXG4gICAgICBpZiAoIXByZXZQcm9wcy5pc09wZW4gJiYgdGhpcy5wcm9wcy5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5vbk9wZW5Qb3BvdmVyKCk7XG4gICAgICB9IC8vIHVwZGF0ZSBzY3JvbGwgbGlzdGVuZXJcblxuXG4gICAgICBpZiAocHJldlByb3BzLnJlcG9zaXRpb25PblNjcm9sbCAhPT0gdGhpcy5wcm9wcy5yZXBvc2l0aW9uT25TY3JvbGwpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsKSB7XG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnBvc2l0aW9uUG9wb3ZlckZpeGVkLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUaGUgcG9wb3ZlciBpcyBiZWluZyBjbG9zZWQuXG5cblxuICAgICAgaWYgKHByZXZQcm9wcy5pc09wZW4gJiYgIXRoaXMucHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBqdXN0IGNsb3NlZCB0aGUgcG9wb3ZlciwgcXVldWUgdXAgdGhlIHJlbW92YWwgb2YgdGhlIGNvbnRlbnQgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIHRyYW5zaXRpb24gaXMgY29tcGxldGUuXG4gICAgICAgIHRoaXMuY2xvc2luZ1RyYW5zaXRpb25UaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBpc0Nsb3Npbmc6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGNsb3NpbmdUcmFuc2l0aW9uVGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucG9zaXRpb25Qb3BvdmVyRml4ZWQsIHRydWUpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVzcG9zaXRpb25UaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN0cmFuZGVkRm9jdXNUaW1lb3V0KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NpbmdUcmFuc2l0aW9uVGltZW91dCk7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmNsb3NpbmdUcmFuc2l0aW9uQW5pbWF0aW9uRnJhbWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYW5jaG9yQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuYW5jaG9yQ2xhc3NOYW1lLFxuICAgICAgICAgIGFuY2hvclBvc2l0aW9uID0gX3RoaXMkcHJvcHMuYW5jaG9yUG9zaXRpb24sXG4gICAgICAgICAgYnV0dG9uID0gX3RoaXMkcHJvcHMuYnV0dG9uLFxuICAgICAgICAgIGJ1dHRvblJlZiA9IF90aGlzJHByb3BzLmJ1dHRvblJlZixcbiAgICAgICAgICBpbnNlcnQgPSBfdGhpcyRwcm9wcy5pbnNlcnQsXG4gICAgICAgICAgaXNPcGVuID0gX3RoaXMkcHJvcHMuaXNPcGVuLFxuICAgICAgICAgIG93bkZvY3VzID0gX3RoaXMkcHJvcHMub3duRm9jdXMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgY2xvc2VQb3BvdmVyID0gX3RoaXMkcHJvcHMuY2xvc2VQb3BvdmVyLFxuICAgICAgICAgIHBhbmVsQ2xhc3NOYW1lID0gX3RoaXMkcHJvcHMucGFuZWxDbGFzc05hbWUsXG4gICAgICAgICAgcGFuZWxQYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzLnBhbmVsUGFkZGluZ1NpemUsXG4gICAgICAgICAgcGFuZWxQcm9wcyA9IF90aGlzJHByb3BzLnBhbmVsUHJvcHMsXG4gICAgICAgICAgcGFuZWxSZWYgPSBfdGhpcyRwcm9wcy5wYW5lbFJlZixcbiAgICAgICAgICBwYW5lbFN0eWxlID0gX3RoaXMkcHJvcHMucGFuZWxTdHlsZSxcbiAgICAgICAgICBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCA9IF90aGlzJHByb3BzLnBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0LFxuICAgICAgICAgIHBvcG92ZXJSZWYgPSBfdGhpcyRwcm9wcy5wb3BvdmVyUmVmLFxuICAgICAgICAgIGhhc0Fycm93ID0gX3RoaXMkcHJvcHMuaGFzQXJyb3csXG4gICAgICAgICAgYXJyb3dDaGlsZHJlbiA9IF90aGlzJHByb3BzLmFycm93Q2hpbGRyZW4sXG4gICAgICAgICAgcmVwb3NpdGlvbk9uU2Nyb2xsID0gX3RoaXMkcHJvcHMucmVwb3NpdGlvbk9uU2Nyb2xsLFxuICAgICAgICAgIHpJbmRleCA9IF90aGlzJHByb3BzLnpJbmRleCxcbiAgICAgICAgICBhdHRhY2hUb0FuY2hvciA9IF90aGlzJHByb3BzLmF0dGFjaFRvQW5jaG9yLFxuICAgICAgICAgIGRpc3BsYXkgPSBfdGhpcyRwcm9wcy5kaXNwbGF5LFxuICAgICAgICAgIG9mZnNldCA9IF90aGlzJHByb3BzLm9mZnNldCxcbiAgICAgICAgICBvblRyYXBEZWFjdGl2YXRpb24gPSBfdGhpcyRwcm9wcy5vblRyYXBEZWFjdGl2YXRpb24sXG4gICAgICAgICAgYnVmZmVyID0gX3RoaXMkcHJvcHMuYnVmZmVyLFxuICAgICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYUxhYmVsbGVkQnkgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgICAgY29udGFpbmVyID0gX3RoaXMkcHJvcHMuY29udGFpbmVyLFxuICAgICAgICAgIGZvY3VzVHJhcFByb3BzID0gX3RoaXMkcHJvcHMuZm9jdXNUcmFwUHJvcHMsXG4gICAgICAgICAgaW5pdGlhbEZvY3VzUHJvcCA9IF90aGlzJHByb3BzLmluaXRpYWxGb2N1cyxcbiAgICAgICAgICB0YWJJbmRleFByb3AgPSBfdGhpcyRwcm9wcy50YWJJbmRleCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgc3R5bGVzID0gZXVpUG9wb3ZlclN0eWxlcygpO1xuICAgICAgdmFyIHBvcG92ZXJTdHlsZXMgPSBbc3R5bGVzLmV1aVBvcG92ZXIsIHtcbiAgICAgICAgZGlzcGxheTogZGlzcGxheVxuICAgICAgfV07XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBvcG92ZXInLCB7XG4gICAgICAgICdldWlQb3BvdmVyLWlzT3Blbic6IHRoaXMuc3RhdGUuaXNPcGVuaW5nXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIGFuY2hvckNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQb3BvdmVyX19hbmNob3InLCBhbmNob3JDbGFzc05hbWUpO1xuICAgICAgdmFyIHNob3dBcnJvdyA9IGhhc0Fycm93ICYmICFhdHRhY2hUb0FuY2hvcjtcbiAgICAgIHZhciBwYW5lbDtcblxuICAgICAgaWYgKCF0aGlzLnN0YXRlLnN1cHByZXNzaW5nUG9wb3ZlciAmJiAoaXNPcGVuIHx8IHRoaXMuc3RhdGUuaXNDbG9zaW5nKSkge1xuICAgICAgICB2YXIgdGFiSW5kZXggPSB0YWJJbmRleFByb3A7XG4gICAgICAgIHZhciBpbml0aWFsRm9jdXMgPSBpbml0aWFsRm9jdXNQcm9wO1xuICAgICAgICB2YXIgYXJpYURlc2NyaWJlZGJ5O1xuICAgICAgICB2YXIgYXJpYUxpdmU7XG4gICAgICAgIHZhciBwYW5lbEFyaWFNb2RhbCA9IHBhbmVsUHJvcHMgIT09IG51bGwgJiYgcGFuZWxQcm9wcyAhPT0gdm9pZCAwICYmIHBhbmVsUHJvcHMuaGFzT3duUHJvcGVydHkoJ2FyaWEtbW9kYWwnKSA/IHBhbmVsUHJvcHNbJ2FyaWEtbW9kYWwnXSA6ICd0cnVlJztcbiAgICAgICAgdmFyIHBhbmVsUm9sZSA9IHBhbmVsUHJvcHMgIT09IG51bGwgJiYgcGFuZWxQcm9wcyAhPT0gdm9pZCAwICYmIHBhbmVsUHJvcHMuaGFzT3duUHJvcGVydHkoJ3JvbGUnKSA/IHBhbmVsUHJvcHMucm9sZSA6ICdkaWFsb2cnO1xuXG4gICAgICAgIGlmIChvd25Gb2N1cyB8fCBwYW5lbEFyaWFNb2RhbCAhPT0gJ3RydWUnKSB7XG4gICAgICAgICAgdGFiSW5kZXggPSB0YWJJbmRleFByb3AgIT09IG51bGwgJiYgdGFiSW5kZXhQcm9wICE9PSB2b2lkIDAgPyB0YWJJbmRleFByb3AgOiAwO1xuICAgICAgICAgIGFyaWFMaXZlID0gJ29mZic7XG5cbiAgICAgICAgICBpZiAoIWluaXRpYWxGb2N1cykge1xuICAgICAgICAgICAgaW5pdGlhbEZvY3VzID0gZnVuY3Rpb24gaW5pdGlhbEZvY3VzKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXM0LnBhbmVsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJpYUxpdmUgPSAnYXNzZXJ0aXZlJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmb2N1c1RyYXBTY3JlZW5SZWFkZXJUZXh0O1xuXG4gICAgICAgIGlmIChvd25Gb2N1cyB8fCBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCkge1xuICAgICAgICAgIGFyaWFEZXNjcmliZWRieSA9IHRoaXMuZGVzY3JpcHRpb25JZDtcbiAgICAgICAgICBmb2N1c1RyYXBTY3JlZW5SZWFkZXJUZXh0ID0gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgICBpZDogdGhpcy5kZXNjcmlwdGlvbklkXG4gICAgICAgICAgfSwgb3duRm9jdXMgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlQb3BvdmVyLnNjcmVlblJlYWRlckFubm91bmNlbWVudFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJZb3UgYXJlIGluIGEgZGlhbG9nLiBUbyBjbG9zZSB0aGlzIGRpYWxvZywgaGl0IGVzY2FwZS5cIlxuICAgICAgICAgIH0pLCBwb3BvdmVyU2NyZWVuUmVhZGVyVGV4dCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJldHVybkZvY3VzID0gdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgPyByZXR1cm5Gb2N1c0NvbmZpZyA6IGZhbHNlO1xuICAgICAgICBwYW5lbCA9IF9fX0Vtb3Rpb25KU1goRXVpUG9ydGFsLCB7XG4gICAgICAgICAgaW5zZXJ0OiBpbnNlcnRcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlGb2N1c1RyYXAsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGlja091dHNpZGVEaXNhYmxlczogdHJ1ZVxuICAgICAgICB9LCBmb2N1c1RyYXBQcm9wcywge1xuICAgICAgICAgIHJldHVybkZvY3VzOiByZXR1cm5Gb2N1cyAvLyBJZ25vcmUgdGVtcG9yYXJ5IHN0YXRlIG9mIGluZGVjaXNpdmUgZm9jdXNcbiAgICAgICAgICAsXG4gICAgICAgICAgaW5pdGlhbEZvY3VzOiBpbml0aWFsRm9jdXMsXG4gICAgICAgICAgb25EZWFjdGl2YXRpb246IG9uVHJhcERlYWN0aXZhdGlvbixcbiAgICAgICAgICBvbkNsaWNrT3V0c2lkZTogdGhpcy5vbkNsaWNrT3V0c2lkZSxcbiAgICAgICAgICBvbkVzY2FwZUtleTogdGhpcy5vbkVzY2FwZUtleSxcbiAgICAgICAgICBkaXNhYmxlZDogIW93bkZvY3VzIHx8ICF0aGlzLnN0YXRlLmlzT3BlblN0YWJsZSB8fCB0aGlzLnN0YXRlLmlzQ2xvc2luZ1xuICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyUGFuZWwsIF9leHRlbmRzKHt9LCBwYW5lbFByb3BzLCB7XG4gICAgICAgICAgcGFuZWxSZWY6IHRoaXMucGFuZWxSZWYsXG4gICAgICAgICAgaXNPcGVuOiB0aGlzLnN0YXRlLmlzT3BlbmluZyxcbiAgICAgICAgICBwb3NpdGlvbjogdGhpcy5zdGF0ZS5hcnJvd1Bvc2l0aW9uLFxuICAgICAgICAgIGlzQXR0YWNoZWQ6IGF0dGFjaFRvQW5jaG9yLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhwYW5lbENsYXNzTmFtZSwgcGFuZWxQcm9wcyA9PT0gbnVsbCB8fCBwYW5lbFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYW5lbFByb3BzLmNsYXNzTmFtZSksXG4gICAgICAgICAgaGFzU2hhZG93OiBmYWxzZSxcbiAgICAgICAgICBwYWRkaW5nU2l6ZTogcGFuZWxQYWRkaW5nU2l6ZSxcbiAgICAgICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICAgICAgXCJhcmlhLWxpdmVcIjogYXJpYUxpdmUsXG4gICAgICAgICAgcm9sZTogcGFuZWxSb2xlLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkQnksXG4gICAgICAgICAgXCJhcmlhLW1vZGFsXCI6IHBhbmVsQXJpYU1vZGFsLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAgICAgc3R5bGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGhpcy5zdGF0ZS5wb3BvdmVyU3R5bGVzKSwge30sIHtcbiAgICAgICAgICAgIC8vIEFkZGluZyBgd2lsbC1jaGFuZ2VgIHRvIHJlZHVjZSByaXNrIG9mIGEgYmx1cnJ5IGFuaW1hdGlvbiBpbiBDaHJvbWUgODYrXG4gICAgICAgICAgICB3aWxsQ2hhbmdlOiAhdGhpcy5zdGF0ZS5pc09wZW5TdGFibGUgPyAndHJhbnNmb3JtLCBvcGFjaXR5JyA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pLCBzaG93QXJyb3cgJiYgdGhpcy5zdGF0ZS5hcnJvd1Bvc2l0aW9uICYmIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlckFycm93LCB7XG4gICAgICAgICAgcG9zaXRpb246IHRoaXMuc3RhdGUuYXJyb3dQb3NpdGlvbixcbiAgICAgICAgICBzdHlsZTogdGhpcy5zdGF0ZS5hcnJvd1N0eWxlc1xuICAgICAgICB9LCBhcnJvd0NoaWxkcmVuKSwgZm9jdXNUcmFwU2NyZWVuUmVhZGVyVGV4dCwgX19fRW1vdGlvbkpTWChFdWlNdXRhdGlvbk9ic2VydmVyLCB7XG4gICAgICAgICAgb2JzZXJ2ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgLy8gZWxlbWVudCBhdHRyaWJ1dGUgY2hhbmdlc1xuICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgICAgLy8gYWRkZWQvcmVtb3ZlZCBlbGVtZW50c1xuICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIC8vIHRleHQgY2hhbmdlc1xuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSAvLyB3YXRjaCBhbGwgY2hpbGQgZWxlbWVudHNcblxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25NdXRhdGlvbjogdGhpcy5vbk11dGF0aW9uXG4gICAgICAgIH0sIGZ1bmN0aW9uIChtdXRhdGlvblJlZikge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIHJlZjogbXV0YXRpb25SZWZcbiAgICAgICAgICB9LCBjaGlsZHJlbik7XG4gICAgICAgIH0pKSkpO1xuICAgICAgfSAvLyByZWFjdC1mb2N1cy1vbiBhbmQgcmVsYXRlZCBkbyBub3QgcmVnaXN0ZXIgb3V0c2lkZSBjbGljayBkZXRlY3Rpb25cbiAgICAgIC8vIHdoZW4gZGlzYWJsZWQsIHNvIHdlIHN0aWxsIG5lZWQgdG8gY29uZGl0aW9uYWxseSBjaGVjayBmb3IgdGhhdCBvdXJzZWx2ZXNcblxuXG4gICAgICBpZiAob3duRm9jdXMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNzczogcG9wb3ZlclN0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgcmVmOiBwb3BvdmVyUmVmXG4gICAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICBjc3M6IC8qI19fUFVSRV9fKi9fY3NzKHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXlcbiAgICAgICAgICB9LCBcIjtsYWJlbDpyZW5kZXI7XCIpLFxuICAgICAgICAgIGNsYXNzTmFtZTogYW5jaG9yQ2xhc3NlcyxcbiAgICAgICAgICByZWY6IHRoaXMuYnV0dG9uUmVmXG4gICAgICAgIH0sIGJ1dHRvbiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gbnVsbCA6IGJ1dHRvbiksIHBhbmVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aU91dHNpZGVDbGlja0RldGVjdG9yLCB7XG4gICAgICAgICAgb25PdXRzaWRlQ2xpY2s6IHRoaXMuY2xvc2VQb3BvdmVyXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGNzczogcG9wb3ZlclN0eWxlcyxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgcmVmOiBwb3BvdmVyUmVmLFxuICAgICAgICAgIG9uS2V5RG93bjogdGhpcy5vbktleURvd25cbiAgICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNzczogLyojX19QVVJFX18qL19jc3Moe1xuICAgICAgICAgICAgZGlzcGxheTogZGlzcGxheVxuICAgICAgICAgIH0sIFwiO2xhYmVsOnJlbmRlcjtcIiksXG4gICAgICAgICAgY2xhc3NOYW1lOiBhbmNob3JDbGFzc2VzLFxuICAgICAgICAgIHJlZjogdGhpcy5idXR0b25SZWZcbiAgICAgICAgfSwgYnV0dG9uIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBudWxsIDogYnV0dG9uKSwgcGFuZWwpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAocHJldlN0YXRlLnByZXZQcm9wcy5pc09wZW4gJiYgIW5leHRQcm9wcy5pc09wZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcmV2UHJvcHM6IHtcbiAgICAgICAgICAgIGlzT3BlbjogbmV4dFByb3BzLmlzT3BlblxuICAgICAgICAgIH0sXG4gICAgICAgICAgaXNDbG9zaW5nOiB0cnVlLFxuICAgICAgICAgIGlzT3BlbmluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZTdGF0ZS5wcmV2UHJvcHMuaXNPcGVuICE9PSBuZXh0UHJvcHMuaXNPcGVuKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJldlByb3BzOiB7XG4gICAgICAgICAgICBpc09wZW46IG5leHRQcm9wcy5pc09wZW5cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlQb3BvdmVyO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpUG9wb3ZlciwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpc09wZW46IGZhbHNlLFxuICBvd25Gb2N1czogdHJ1ZSxcbiAgYW5jaG9yUG9zaXRpb246ICdkb3duQ2VudGVyJyxcbiAgcGFuZWxQYWRkaW5nU2l6ZTogJ20nLFxuICBoYXNBcnJvdzogdHJ1ZSxcbiAgZGlzcGxheTogJ2lubGluZS1ibG9jaydcbn0pO1xuXG5FdWlQb3BvdmVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogQ2xhc3MgbmFtZSBwYXNzZWQgdG8gdGhlIGRpcmVjdCBwYXJlbnQgb2YgdGhlIGJ1dHRvblxuICAgICAqL1xuICBhbmNob3JDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogQWxpZ25tZW50IG9mIHRoZSBwb3BvdmVyIGFuZCBhcnJvdyByZWxhdGl2ZSB0byB0aGUgYnV0dG9uXG4gICAgICovXG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFN0eWxlIGFuZCBwb3NpdGlvbiBhbHRlcmF0aW9uIGZvciBhcnJvdy1sZXNzLCBsZWZ0LWFsaWduZWRcbiAgICAgKiBhdHRhY2htZW50LiBJbnRlbmRlZCBmb3IgdXNlIHdpdGggaW5wdXRzIGFzIGFuY2hvcnMsIGUuZy5cbiAgICAgKiBFdWlJbnB1dFBvcG92ZXJcbiAgICAgKi9cbiAgYXR0YWNoVG9BbmNob3I6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFRyaWdnZXJpbmcgZWxlbWVudCBmb3Igd2hpY2ggdG8gYWxpZ24gdGhlIHBvcG92ZXIgdG9cbiAgICAgKi9cbiAgYnV0dG9uOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBoYW5kbGUgaGlkaW5nIG9mIHRoZSBwb3BvdmVyXG4gICAgICovXG4gIGNsb3NlUG9wb3ZlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBSZXN0cmljdCB0aGUgcG9wb3ZlcidzIHBvc2l0aW9uIHdpdGhpbiB0aGlzIGVsZW1lbnRcbiAgICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENTUyBkaXNwbGF5IHR5cGUgZm9yIGJvdGggdGhlIHBvcG92ZXIgYW5kIGFuY2hvclxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gRXVpRm9jdXNUcmFwXG4gICAgICovXG4gIGZvY3VzVHJhcFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFNob3cgYXJyb3cgaW5kaWNhdGluZyB0byBvcmlnaW5hdGluZyBidXR0b25cbiAgICAgKi9cbiAgaGFzQXJyb3c6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFNwZWNpZmllcyB3aGF0IGVsZW1lbnQgc2hvdWxkIGluaXRpYWxseSBoYXZlIGZvY3VzOyBDYW4gYmUgYSBET01cbiAgICAgKiBub2RlLCBvciBhIHNlbGVjdG9yIHN0cmluZyAod2hpY2ggd2lsbCBiZSBwYXNzZWQgdG9cbiAgICAgKiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCkgdG8gZmluZCB0aGUgRE9NIG5vZGUpLCBvciBhIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiByZXR1cm5zIGEgRE9NIG5vZGUuXG4gICAgICpcbiAgICAgKiBJZiBub3QgcGFzc2VkLCBpbml0aWFsIGZvY3VzIGRlZmF1bHRzIHRvIHRoZSBwb3BvdmVyIHBhbmVsLlxuICAgICAqL1xuICBpbml0aWFsRm9jdXM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogUGFzc2VkIGRpcmVjdGx5IHRvIEV1aVBvcnRhbCBmb3IgRE9NIHBvc2l0aW9uaW5nLiBCb3RoIHByb3BlcnRpZXMgYXJlXG4gICAgICogcmVxdWlyZWQgaWYgcHJvcCBpcyBzcGVjaWZpZWRcbiAgICAgKi9cbiAgaW5zZXJ0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHNpYmxpbmc6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcImJlZm9yZVwiLCBcImFmdGVyXCJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuXG4gIC8qKlxuICAgICAqIFZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIHBvcG92ZXJcbiAgICAgKi9cbiAgaXNPcGVuOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBUcmFwcyB0YWIgZm9jdXMgd2l0aGluIHRoZSBwb3BvdmVyIGNvbnRlbnRzXG4gICAgICovXG4gIG93bkZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBDdXN0b20gY2xhc3MgYWRkZWQgdG8gdGhlIEV1aVBhbmVsIGNvbnRhaW5pbmcgdGhlIHBvcG92ZXIgY29udGVudHNcbiAgICAgKi9cbiAgcGFuZWxDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRXVpUGFuZWwgcGFkZGluZyBvbiBhbGwgc2lkZXNcbiAgICAgKi9cbiAgcGFuZWxQYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBTdGFuZGFyZCBET00gYHN0eWxlYCBhdHRyaWJ1dGUuIFBhc3NlZCB0byB0aGUgRXVpUGFuZWxcbiAgICAgKi9cbiAgcGFuZWxTdHlsZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIEV1aVBhbmVsLiBTZWUgI0V1aVBvcG92ZXJQYW5lbFByb3BzXG4gICAgICovXG4gIHBhbmVsUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIHBhbmVsUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9wdGlvbmFsIHNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHRvIGFubm91bmNlIHVwb24gcG9wb3ZlciBvcGVuLFxuICAgICAqIGluIGFkZGl0aW9uIHRvIEVVSSdzIGRlZmF1bHQgcG9wb3ZlciBpbnN0cnVjdGlvbnMgZm9yIEVzY2FwZSBvbiBjbG9zZS5cbiAgICAgKiBVc2VmdWwgZm9yIHBvcG92ZXJzIHRoYXQgbWF5IGhhdmUgYWRkaXRpb25hbCBrZXlib2FyZCBjYXBhYmlsaXRpZXMgc3VjaCBhc1xuICAgICAqIGFycm93IG5hdmlnYXRpb24uXG4gICAgICovXG4gIHBvcG92ZXJTY3JlZW5SZWFkZXJUZXh0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWRdKSxcbiAgcG9wb3ZlclJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCwgdGhlIHBvcG92ZXIncyBwb3NpdGlvbiBpcyByZS1jYWxjdWxhdGVkIHdoZW4gdGhlIHVzZXJcbiAgICAgKiBzY3JvbGxzLCB0aGlzIHN1cHBvcnRzIGhhdmluZyBmaXhlZC1wb3NpdGlvbiBwb3BvdmVyIGFuY2hvcnMuIFdoZW4gbmVzdGluZ1xuICAgICAqIGFuIGBFdWlQb3BvdmVyYCBpbiBhIHNjcm9sbGFibGUgY29udGFpbmVyLCBgcmVwb3NpdGlvbk9uU2Nyb2xsYCBzaG91bGQgYmUgYHRydWVgXG4gICAgICovXG4gIHJlcG9zaXRpb25PblNjcm9sbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgcG9wb3ZlciBjb250ZW50IGluaGVyaXRzIHRoZSB6LWluZGV4IG9mIHRoZSBhbmNob3JcbiAgICAgKiBjb21wb25lbnQ7IHBhc3MgYHpJbmRleGAgdG8gb3ZlcnJpZGVcbiAgICAgKi9cbiAgekluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIEZ1bmN0aW9uIGNhbGxiYWNrIGZvciB3aGVuIHRoZSBmb2N1cyB0cmFwIGlzIGRlYWN0aXZhdGVkXG4gICAgICovXG4gIG9uVHJhcERlYWN0aXZhdGlvbjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBEaXN0YW5jZSBhd2F5IGZyb20gdGhlIGFuY2hvciB0aGF0IHRoZSBwb3BvdmVyIHdpbGwgcmVuZGVyXG4gICAgICovXG4gIG9mZnNldDogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHBvcG92ZXIgYW5kIHRoZSBib3VuZGluZyBjb250YWluZXI7XG4gICAgICogUGFzcyBhbiBhcnJheSBvZiA0IHZhbHVlcyB0byBhZGp1c3QgZWFjaCBzaWRlIGRpZmZlcmVudGx5OiBgW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF1gXG4gICAgICogRGVmYXVsdCBpcyAxNlxuICAgICAqL1xuICBidWZmZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogRWxlbWVudCB0byBwYXNzIGFzIHRoZSBjaGlsZCBlbGVtZW50IG9mIHRoZSBhcnJvdztcbiAgICAgKiBVc2UgY2FzZSBpcyB0eXBpY2FsbHkgbGltaXRlZCB0byBhbiBhY2NvbXBhbnlpbmcgYEV1aUJlYWNvbmBcbiAgICAgKi9cbiAgYXJyb3dDaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogUHJvdmlkZSBhIG5hbWUgdG8gdGhlIHBvcG92ZXIgcGFuZWxcbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogQWx0ZXJuYXRpdmUgb3B0aW9uIHRvIGBhcmlhLWxhYmVsYCB0aGF0IHRha2VzIGFuIGBpZGAuXG4gICAgICogVXN1YWxseSB0YWtlcyB0aGUgYGlkYCBvZiB0aGUgcG9wb3ZlciB0aXRsZVxuICAgICAqL1xuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aU9ic2VydmVyIH0gZnJvbSAnLi4vb2JzZXJ2ZXInO1xuZXhwb3J0IHZhciBFdWlNdXRhdGlvbk9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRXVpT2JzZXJ2ZXIpIHtcbiAgX2luaGVyaXRzKEV1aU11dGF0aW9uT2JzZXJ2ZXIsIF9FdWlPYnNlcnZlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlNdXRhdGlvbk9ic2VydmVyKTtcblxuICBmdW5jdGlvbiBFdWlNdXRhdGlvbk9ic2VydmVyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlNdXRhdGlvbk9ic2VydmVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibmFtZVwiLCAnRXVpTXV0YXRpb25PYnNlcnZlcicpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uTXV0YXRpb25cIiwgZnVuY3Rpb24gKHJlY29yZHMsIG9ic2VydmVyKSB7XG4gICAgICBfdGhpcy5wcm9wcy5vbk11dGF0aW9uKHJlY29yZHMsIG9ic2VydmVyKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiZWdpbk9ic2VydmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNoaWxkTm9kZSA9IF90aGlzLmNoaWxkTm9kZTtcbiAgICAgIF90aGlzLm9ic2VydmVyID0gbWFrZU11dGF0aW9uT2JzZXJ2ZXIoY2hpbGROb2RlLCBfdGhpcy5wcm9wcy5vYnNlcnZlck9wdGlvbnMsIF90aGlzLm9uTXV0YXRpb24pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEV1aU11dGF0aW9uT2JzZXJ2ZXI7XG59KEV1aU9ic2VydmVyKTtcblxudmFyIG1ha2VNdXRhdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gbWFrZU11dGF0aW9uT2JzZXJ2ZXIobm9kZSwgX29ic2VydmVyT3B0aW9ucywgY2FsbGJhY2spIHtcbiAgLy8gSUUxMSBhbmQgdGhlIE11dGF0aW9uT2JzZXJ2ZXIgcG9seWZpbGwgdXNlZCBpbiBLaWJhbmEgKGZvciBKZXN0KSBpbXBsZW1lbnRcbiAgLy8gYW4gb2xkZXIgc3BlYyBpbiB3aGljaCBzcGVjaWZ5aW5nIGBhdHRyaWJ1dGVPbGRWYWx1ZWAgb3IgYGF0dHJpYnV0ZUZpbHRlcmBcbiAgLy8gd2l0aG91dCBzcGVjaWZ5aW5nIGBhdHRyaWJ1dGVzYCByZXN1bHRzIGluIGEgYFN5bnRheEVycm9yYC5cbiAgLy8gVGhlIGZvbGxvd2luZyBsb2dpYyBwYXRjaGVzIHRoZSBuZXdlciBzcGVjIGluIHdoaWNoIGBhdHRyaWJ1dGVzOiB0cnVlYCBjYW4gYmVcbiAgLy8gaW1wbGllZCB3aGVuIGFwcHJvcHJpYXRlIChgYXR0cmlidXRlT2xkVmFsdWVgIG9yIGBhdHRyaWJ1dGVGaWx0ZXJgIGlzIHNwZWNpZmllZCkuXG4gIHZhciBvYnNlcnZlck9wdGlvbnMgPSBfb2JqZWN0U3ByZWFkKHt9LCBfb2JzZXJ2ZXJPcHRpb25zKTtcblxuICB2YXIgbmVlZHNBdHRyaWJ1dGVzID0gb2JzZXJ2ZXJPcHRpb25zLmhhc093blByb3BlcnR5KCdhdHRyaWJ1dGVPbGRWYWx1ZScpIHx8IG9ic2VydmVyT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRlRmlsdGVyJyk7XG5cbiAgaWYgKG5lZWRzQXR0cmlidXRlcyAmJiAhb2JzZXJ2ZXJPcHRpb25zLmhhc093blByb3BlcnR5KCdhdHRyaWJ1dGVzJykpIHtcbiAgICBvYnNlcnZlck9wdGlvbnMuYXR0cmlidXRlcyA9IHRydWU7XG4gIH1cblxuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG4gIG9ic2VydmVyLm9ic2VydmUobm9kZSwgb2JzZXJ2ZXJPcHRpb25zKTtcbiAgcmV0dXJuIG9ic2VydmVyO1xufTtcblxuZXhwb3J0IHZhciB1c2VNdXRhdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcihjb250YWluZXIsIGNhbGxiYWNrLCBvYnNlcnZlck9wdGlvbnMpIHtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IG1ha2VNdXRhdGlvbk9ic2VydmVyKGNvbnRhaW5lciwgb2JzZXJ2ZXJPcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIC8vIGlnbm9yZSBjaGFuZ2luZyBvYnNlcnZlck9wdGlvbnNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIFtjb250YWluZXIsIGNhbGxiYWNrXSk7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmV4cG9ydCB2YXIgRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aU91dHNpZGVDbGlja0RldGVjdG9yLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aU91dHNpZGVDbGlja0RldGVjdG9yKTtcblxuICAvLyBXZSBhcmUgd29ya2luZyB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSBjbGljayBldmVudCBpc1xuICAvLyBlcXVpdmFsZW50IHRvIGEgc2VxdWVudGlhbCwgY29tcG91bmQgcHJlc3MgYW5kIHJlbGVhc2Ugb2ZcbiAgLy8gdGhlIHBvaW50aW5nIGRldmljZSAobW91c2UsIGZpbmdlciwgc3R5bHVzLCBldGMuKS5cbiAgLy8gQSBjbGljayBldmVudCdzIHRhcmdldCBjYW4gYmUgaW1wcmVjaXNlLCBhcyB0aGUgdmFsdWUgd2lsbCBiZVxuICAvLyB0aGUgY2xvc2VzdCBjb21tb24gYW5jZXN0b3Igb2YgdGhlIHByZXNzIChtb3VzZWRvd24sIHRvdWNoc3RhcnQpXG4gIC8vIGFuZCByZWxlYXNlIChtb3VzZXVwLCB0b3VjaGVuZCkgZXZlbnRzIChvZnRlbiA8Ym9keSAvPikgaWZcbiAgLy8gdGhlIHRoZSB0YXJnZXQgb2YgZWFjaCBldmVudCBkaWZmZXJzLlxuICAvLyBXZSBuZWVkIHRoZSBhY3R1YWwgZXZlbnQgdGFyZ2V0cyB0byBtYWtlIHRoZSBjb3JyZWN0IGRlY2lzaW9uc1xuICAvLyBhYm91dCB1c2VyIGludGVudGlvbi4gU28sIGNvbnNpZGVyIHRoZSBkb3duL3N0YXJ0IGFuZCB1cC9lbmRcbiAgLy8gaXRlbXMgYmVsb3cgYXMgdGhlIGRlY29uc3RydWN0aW9uIG9mIGEgY2xpY2sgZXZlbnQuXG4gIGZ1bmN0aW9uIEV1aU91dHNpZGVDbGlja0RldGVjdG9yKHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aU91dHNpZGVDbGlja0RldGVjdG9yKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpOyAvLyB0aGUgaWQgaXMgdXNlZCB0byBpZGVudGlmeSB3aGljaCBFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvclxuICAgIC8vIGlzIHRoZSBzb3VyY2Ugb2YgYSBjbGljayBldmVudDsgYXMgdGhlIGNsaWNrIGV2ZW50IGJ1YmJsZXNcbiAgICAvLyB1cCBhbmQgcmVhY2hlcyB0aGUgY2xpY2sgZGV0ZWN0b3IncyBjaGlsZCBjb21wb25lbnQgdGhlXG4gICAgLy8gaWQgdmFsdWUgaXMgc3RhbXBlZCBvbiB0aGUgZXZlbnQuIFRoaXMgaWQgaXMgaW5zcGVjdGVkXG4gICAgLy8gaW4gdGhlIGRvY3VtZW50J3MgY2xpY2sgaGFuZGxlciwgYW5kIGlmIHRoZSBpZCBkb2Vzbid0XG4gICAgLy8gZXhpc3Qgb3IgZG9lc24ndCBtYXRjaCB0aGlzIGRldGVjdG9yJ3MgaWQsIHRoZW4gdHJpZ2dlclxuICAgIC8vIHRoZSBvdXRzaWRlQ2xpY2sgY2FsbGJhY2suXG4gICAgLy9cbiAgICAvLyBUYWtpbmcgdGhpcyBhcHByb2FjaCBpbnN0ZWFkIG9mIGNoZWNraW5nIGlmIHRoZSBldmVudCdzXG4gICAgLy8gdGFyZ2V0IGVsZW1lbnQgZXhpc3RzIGluIHRoaXMgY29tcG9uZW50J3MgRE9NIHN1Yi10cmVlIGlzXG4gICAgLy8gbmVjZXNzYXJ5IGZvciBoYW5kbGluZyBjbGlja3Mgb3JpZ2luYXRpbmcgZnJvbSBjaGlsZHJlblxuICAgIC8vIHJlbmRlcmVkIHRocm91Z2ggUmVhY3QncyBwb3J0YWxzIChFdWlQb3J0YWwpLiBUaGUgaWQgdHJhY2tpbmdcbiAgICAvLyB3b3JrcyBiZWNhdXNlIFJlYWN0IGd1YXJhbnRlZXMgdGhlIGV2ZW50IGJ1YmJsZXMgdGhyb3VnaCB0aGVcbiAgICAvLyB2aXJ0dWFsIERPTSBhbmQgZXhlY3V0ZXMgRXVpQ2xpY2tEZXRlY3RvcidzIG9uQ2xpY2sgaGFuZGxlcixcbiAgICAvLyBzdGFtcGluZyB0aGUgaWQgZXZlbiB0aG91Z2ggdGhlIGV2ZW50IG9yaWdpbmF0ZXMgb3V0c2lkZVxuICAgIC8vIHRoaXMgY29tcG9uZW50J3MgcmVpZmllZCBET00gdHJlZS5cblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpZFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNhcHR1cmVkRG93bklkc1wiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xpY2tPdXRzaWRlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgICBvbk91dHNpZGVDbGljayA9IF90aGlzJHByb3BzLm9uT3V0c2lkZUNsaWNrO1xuXG4gICAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgICBfdGhpcy5jYXB0dXJlZERvd25JZHMgPSBbXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXZlbnQgPSBlO1xuXG4gICAgICBpZiAoZXZlbnQuZXVpR2VuZXJhdGVkQnkgJiYgZXZlbnQuZXVpR2VuZXJhdGVkQnkuaW5jbHVkZXMoX3RoaXMuaWQpIHx8IF90aGlzLmNhcHR1cmVkRG93bklkcy5pbmNsdWRlcyhfdGhpcy5pZCkpIHtcbiAgICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuY2FwdHVyZWREb3duSWRzID0gW107XG4gICAgICByZXR1cm4gb25PdXRzaWRlQ2xpY2soZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2hpbGRDbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQsIGNiKSB7XG4gICAgICAvLyB0byBzdXBwb3J0IG5lc3RlZCBjbGljayBkZXRlY3RvcnMsIGJ1aWxkIGFuIGFycmF5XG4gICAgICAvLyBvZiBkZXRlY3RvciBpZHMgdGhhdCBoYXZlIGJlZW4gZW5jb3VudGVyZWQ7XG4gICAgICBpZiAoZXZlbnQubmF0aXZlRXZlbnQuaGFzT3duUHJvcGVydHkoJ2V1aUdlbmVyYXRlZEJ5JykpIHtcbiAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuZXVpR2VuZXJhdGVkQnkucHVzaChfdGhpcy5pZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5uYXRpdmVFdmVudC5ldWlHZW5lcmF0ZWRCeSA9IFtfdGhpcy5pZF07XG4gICAgICB9XG5cbiAgICAgIGlmIChjYikgY2IoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2hpbGRNb3VzZURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5vbkNoaWxkQ2xpY2soZXZlbnQsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBuYXRpdmVFdmVudCA9IGUubmF0aXZlRXZlbnQ7XG4gICAgICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IG5hdGl2ZUV2ZW50LmV1aUdlbmVyYXRlZEJ5O1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Nb3VzZURvd24pIF90aGlzLnByb3BzLm9uTW91c2VEb3duKGUpO1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Ub3VjaFN0YXJ0KSBfdGhpcy5wcm9wcy5vblRvdWNoU3RhcnQoZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNoaWxkTW91c2VVcFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLm9uQ2hpbGRDbGljayhldmVudCwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uTW91c2VVcCkgX3RoaXMucHJvcHMub25Nb3VzZVVwKGUpO1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Ub3VjaEVuZCkgX3RoaXMucHJvcHMub25Ub3VjaEVuZChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuaWQgPSBodG1sSWRHZW5lcmF0b3IoKSgpO1xuICAgIF90aGlzLmNhcHR1cmVkRG93bklkcyA9IFtdO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlPdXRzaWRlQ2xpY2tEZXRlY3RvciwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25DbGlja091dHNpZGUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uQ2xpY2tPdXRzaWRlKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vbkNsaWNrT3V0c2lkZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRoaXMucHJvcHMuY2hpbGRyZW4ucHJvcHMpLCB7XG4gICAgICAgIG9uTW91c2VEb3duOiB0aGlzLm9uQ2hpbGRNb3VzZURvd24sXG4gICAgICAgIG9uVG91Y2hTdGFydDogdGhpcy5vbkNoaWxkTW91c2VEb3duLFxuICAgICAgICBvbk1vdXNlVXA6IHRoaXMub25DaGlsZE1vdXNlVXAsXG4gICAgICAgIG9uVG91Y2hFbmQ6IHRoaXMub25DaGlsZE1vdXNlVXBcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY2hpbGQgPSBDaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoY2hpbGQsIHByb3BzKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpT3V0c2lkZUNsaWNrRGV0ZWN0b3I7XG59KENvbXBvbmVudCk7XG5FdWlPdXRzaWRlQ2xpY2tEZXRlY3Rvci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIFJlYWN0Tm9kZSB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBvbk91dHNpZGVDbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uTW91c2VEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb3VzZVVwOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Ub3VjaFN0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Ub3VjaEVuZDogUHJvcFR5cGVzLmZ1bmNcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcInBvc2l0aW9uXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGV1aVBvcG92ZXJBcnJvd1N0eWxlcyB9IGZyb20gJy4vX3BvcG92ZXJfYXJyb3cuc3R5bGVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgUE9TSVRJT05TID0gWyd0b3AnLCAnbGVmdCcsICdyaWdodCcsICdib3R0b20nXTtcbmV4cG9ydCB2YXIgRXVpUG9wb3ZlckFycm93ID0gZnVuY3Rpb24gRXVpUG9wb3ZlckFycm93KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpUG9wb3ZlckFycm93U3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpUG9wb3ZlckFycm93LCBzdHlsZXNbcG9zaXRpb25dXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS1wb3BvdmVyLWFycm93XCI6IHBvc2l0aW9uLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpUG9wb3ZlckFycm93LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwb3NpdGlvbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZXVpQmFja2dyb3VuZENvbG9yLCBsb2dpY2FscywgbG9naWNhbFNpemVDU1MgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5leHBvcnQgdmFyIHBvcG92ZXJBcnJvd1NpemUgPSAnbSc7XG5leHBvcnQgdmFyIGV1aVBvcG92ZXJBcnJvd1N0eWxlcyA9IGZ1bmN0aW9uIGV1aVBvcG92ZXJBcnJvd1N0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lOyAvLyBNYXRjaCB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiBwYW5lbHNcblxuICB2YXIgYm9yZGVyQ29sb3IgPSBldWlCYWNrZ3JvdW5kQ29sb3IoZXVpVGhlbWVDb250ZXh0LCAncGxhaW4nKTtcbiAgdmFyIGFycm93U2l6ZSA9IGV1aVRoZW1lLnNpemVbcG9wb3ZlckFycm93U2l6ZV07XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZVxuICAgIGV1aVBvcG92ZXJBcnJvdzogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsU2l6ZUNTUygwLCAwKSwgXCImOmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsU2l6ZUNTUygwLCAwKSwgXCI7fTtsYWJlbDpldWlQb3BvdmVyQXJyb3c7XCIpLFxuICAgIC8vIFBPU0lUSU9OU1xuICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhcIiY6YmVmb3Jle1wiLCBsb2dpY2Fscy5ib3R0b20sIFwiOi1cIiwgYXJyb3dTaXplLCBcIjtcIiwgbG9naWNhbHNbJ2JvcmRlci1sZWZ0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXJpZ2h0J10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLXRvcCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6dG9wO1wiKSxcbiAgICBib3R0b206IC8qI19fUFVSRV9fKi9jc3MoXCImOmJlZm9yZXtcIiwgbG9naWNhbHMudG9wLCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItbGVmdCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1yaWdodCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1ib3R0b20nXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcIiY6YmVmb3Jle1wiLCBsb2dpY2Fscy50b3AsIFwiOjUwJTtcIiwgbG9naWNhbHMucmlnaHQsIFwiOi1cIiwgYXJyb3dTaXplLCBcIjtcIiwgbG9naWNhbHNbJ2JvcmRlci10b3AnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgdHJhbnNwYXJlbnQ7XCIsIGxvZ2ljYWxzWydib3JkZXItYm90dG9tJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWxlZnQnXSwgXCI6XCIsIGFycm93U2l6ZSwgXCIgc29saWQgXCIsIGJvcmRlckNvbG9yLCBcIjt9O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwiJjpiZWZvcmV7XCIsIGxvZ2ljYWxzLnRvcCwgXCI6NTAlO1wiLCBsb2dpY2Fscy5sZWZ0LCBcIjotXCIsIGFycm93U2l6ZSwgXCI7XCIsIGxvZ2ljYWxzWydib3JkZXItdG9wJ10sIFwiOlwiLCBhcnJvd1NpemUsIFwiIHNvbGlkIHRyYW5zcGFyZW50O1wiLCBsb2dpY2Fsc1snYm9yZGVyLWJvdHRvbSddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCB0cmFuc3BhcmVudDtcIiwgbG9naWNhbHNbJ2JvcmRlci1yaWdodCddLCBcIjpcIiwgYXJyb3dTaXplLCBcIiBzb2xpZCBcIiwgYm9yZGVyQ29sb3IsIFwiO307bGFiZWw6cmlnaHQ7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpUG9wb3ZlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aVBvcG92ZXJTdHlsZXMoKSB7XG4gIHJldHVybiB7XG4gICAgLy8gQmFzZSBhbmNob3Igd3JhcHBlclxuICAgIGV1aVBvcG92ZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpldWlQb3BvdmVyO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaXNPcGVuXCIsIFwiaXNBdHRhY2hlZFwiLCBcInBvc2l0aW9uXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlQYW5lbCB9IGZyb20gJy4uLy4uL3BhbmVsL3BhbmVsJztcbmltcG9ydCB7IGV1aVBvcG92ZXJQYW5lbFN0eWxlcyB9IGZyb20gJy4vX3BvcG92ZXJfcGFuZWwuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVBvcG92ZXJQYW5lbENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dCh7XG4gIHBhZGRpbmdTaXplOiAnbCdcbn0pO1xuXG4vKipcbiAqICpJTlRFUk5BTCBPTkxZKlxuICogUHVyZWx5IGZvciByZS11c2Ugb2Ygc3R5bGluZ1xuICovXG5leHBvcnQgdmFyIEV1aVBvcG92ZXJQYW5lbCA9IGZ1bmN0aW9uIEV1aVBvcG92ZXJQYW5lbChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGlzT3BlbiA9IF9yZWYuaXNPcGVuLFxuICAgICAgaXNBdHRhY2hlZCA9IF9yZWYuaXNBdHRhY2hlZCxcbiAgICAgIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgcGFuZWxDb250ZXh0ID0gdXNlQ29udGV4dChFdWlQb3BvdmVyUGFuZWxDb250ZXh0KTtcbiAgaWYgKHJlc3QucGFkZGluZ1NpemUpIHBhbmVsQ29udGV4dC5wYWRkaW5nU2l6ZSA9IHJlc3QucGFkZGluZ1NpemU7XG4gIHZhciBldWlUaGVtZUNvbnRleHQgPSB1c2VFdWlUaGVtZSgpOyAvLyBVc2luZyBCRU0gY2hpbGQgY2xhc3MgZm9yIEJXQ1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUG9wb3Zlcl9fcGFuZWwnLCBjbGFzc05hbWUpO1xuICB2YXIgc3R5bGVzID0gZXVpUG9wb3ZlclBhbmVsU3R5bGVzKGV1aVRoZW1lQ29udGV4dCk7XG4gIHZhciBwYW5lbENTUyA9IFtzdHlsZXMuZXVpUG9wb3Zlcl9fcGFuZWwsIGlzT3BlbiAmJiBzdHlsZXMuaXNPcGVuLCBpc09wZW4gJiYgcG9zaXRpb24gJiYgc3R5bGVzW3Bvc2l0aW9uXV07XG5cbiAgaWYgKGlzQXR0YWNoZWQpIHtcbiAgICBwYW5lbENTUyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkocGFuZWxDU1MpLCBbaXNPcGVuICYmIHN0eWxlcy5hdHRhY2hlZC5pc09wZW4sIHBvc2l0aW9uICYmIHN0eWxlcy5hdHRhY2hlZFtwb3NpdGlvbl1dKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVBvcG92ZXJQYW5lbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcGFuZWxDb250ZXh0XG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpUGFuZWwsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBwYW5lbENTUyxcbiAgICBcImRhdGEtcG9wb3Zlci1wYW5lbFwiOiB0cnVlLFxuICAgIFwiZGF0YS1wb3BvdmVyLW9wZW5cIjogaXNPcGVuIHx8IHVuZGVmaW5lZFxuICB9LCByZXN0KSwgY2hpbGRyZW4pKTtcbn07XG5FdWlQb3BvdmVyUGFuZWwucHJvcFR5cGVzID0ge1xuICBlbGVtZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZGl2XCJdKSxcblxuICAvKipcbiAgICAgKiBBZGRzIGEgbWVkaXVtIHNoYWRvdyB0byB0aGUgcGFuZWw7XG4gICAgICogT25seSB3b3JrcyB3aGVuIGBjb2xvcj1cInBsYWluXCJgXG4gICAgICovXG4gIGhhc1NoYWRvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIHNsaWdodCAxcHggYm9yZGVyIG9uIGFsbCBlZGdlcy5cbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW4gfCB0cmFuc3BhcmVudFwiYFxuICAgICAqL1xuICBoYXNCb3JkZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFBhZGRpbmcgZm9yIGFsbCBmb3VyIHNpZGVzXG4gICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENvcm5lciBib3JkZXIgcmFkaXVzXG4gICAgICovXG4gIGJvcmRlclJhZGl1czogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBXaGVuIHRydWUgdGhlIHBhbmVsIHdpbGwgZ3JvdyBpbiBoZWlnaHQgdG8gbWF0Y2ggYEV1aUZsZXhJdGVtYFxuICAgICAqL1xuICBncm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFuZWxSZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWw7XG4gICAgICogVXN1YWxseSBhIGxpZ2h0ZW5lZCBmb3JtIG9mIHRoZSBicmFuZCBjb2xvcnNcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5hbnksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNPcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNBdHRhY2hlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInBhZGRpbmdTaXplXCIsIFwiYm9yZGVyUmFkaXVzXCIsIFwiY29sb3JcIiwgXCJoYXNTaGFkb3dcIiwgXCJoYXNCb3JkZXJcIiwgXCJncm93XCIsIFwicGFuZWxSZWZcIiwgXCJlbGVtZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VFdWlCYWNrZ3JvdW5kQ29sb3JDU1MsIHVzZUV1aVBhZGRpbmdDU1MsIEJBQ0tHUk9VTkRfQ09MT1JTLCBQQURESU5HX1NJWkVTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGV1aVBhbmVsU3R5bGVzIH0gZnJvbSAnLi9wYW5lbC5zdHlsZSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBTSVpFUyA9IFBBRERJTkdfU0laRVM7IC8vIEV4cG9ydGVkIHBhZGRpbmcgc2l6ZXMgYW5kIGNsYXNzIG5hbWVzIG5lY2Vzc2FyeSBmb3IgRXVpUG9wb3ZlciBhbmQgRXVpQ2FyZC5cbi8vIFdoaWNoIGN1cnJlbnRseSB3aWxsIG9ubHkgbWFpbnRhaW4gc3VwcG9ydCBmb3IgdGhlIG9yaWdpbmFsIHZhbHVlcyB1bnRpbCBjb252ZXJzaW9uLlxuXG52YXIgcGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbm9uZTogbnVsbCxcbiAgczogJ3BhZGRpbmdTbWFsbCcsXG4gIG06ICdwYWRkaW5nTWVkaXVtJyxcbiAgbDogJ3BhZGRpbmdMYXJnZSdcbn07XG5cbnZhciBfU0laRVMgPSBrZXlzT2YocGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCk7XG5cbmV4cG9ydCB2YXIgQk9SREVSX1JBRElJID0gWydub25lJywgJ20nXTtcbmV4cG9ydCB2YXIgQ09MT1JTID0gQkFDS0dST1VORF9DT0xPUlM7XG5leHBvcnQgdmFyIEV1aVBhbmVsID0gZnVuY3Rpb24gRXVpUGFuZWwoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJHBhZGRpbmdTaXplID0gX3JlZi5wYWRkaW5nU2l6ZSxcbiAgICAgIHBhZGRpbmdTaXplID0gX3JlZiRwYWRkaW5nU2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRwYWRkaW5nU2l6ZSxcbiAgICAgIF9yZWYkYm9yZGVyUmFkaXVzID0gX3JlZi5ib3JkZXJSYWRpdXMsXG4gICAgICBib3JkZXJSYWRpdXMgPSBfcmVmJGJvcmRlclJhZGl1cyA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRib3JkZXJSYWRpdXMsXG4gICAgICBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ3BsYWluJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJGhhc1NoYWRvdyA9IF9yZWYuaGFzU2hhZG93LFxuICAgICAgaGFzU2hhZG93ID0gX3JlZiRoYXNTaGFkb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGhhc1NoYWRvdyxcbiAgICAgIF9yZWYkaGFzQm9yZGVyID0gX3JlZi5oYXNCb3JkZXIsXG4gICAgICBoYXNCb3JkZXIgPSBfcmVmJGhhc0JvcmRlciA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGhhc0JvcmRlcixcbiAgICAgIF9yZWYkZ3JvdyA9IF9yZWYuZ3JvdyxcbiAgICAgIGdyb3cgPSBfcmVmJGdyb3cgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGdyb3csXG4gICAgICBwYW5lbFJlZiA9IF9yZWYucGFuZWxSZWYsXG4gICAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7IC8vIFNoYWRvd3MgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHRoZXJlJ3MgYSB3aGl0ZSBiYWNrZ3JvdW5kIChwbGFpbilcblxuICB2YXIgY2FuSGF2ZVNoYWRvdyA9ICFoYXNCb3JkZXIgJiYgY29sb3IgPT09ICdwbGFpbic7XG4gIHZhciBjYW5IYXZlQm9yZGVyID0gY29sb3IgPT09ICdwbGFpbicgfHwgY29sb3IgPT09ICd0cmFuc3BhcmVudCc7XG4gIHZhciBzdHlsZXMgPSBldWlQYW5lbFN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aVBhbmVsLCBncm93ICYmIHN0eWxlcy5ncm93LCBzdHlsZXMucmFkaXVzW2JvcmRlclJhZGl1c10sIHVzZUV1aVBhZGRpbmdDU1MoKVtwYWRkaW5nU2l6ZV0sIHVzZUV1aUJhY2tncm91bmRDb2xvckNTUygpW2NvbG9yXSwgY2FuSGF2ZVNoYWRvdyAmJiBoYXNTaGFkb3cgPT09IHRydWUgJiYgc3R5bGVzLmhhc1NoYWRvdywgY2FuSGF2ZUJvcmRlciAmJiBoYXNCb3JkZXIgPT09IHRydWUgJiYgc3R5bGVzLmhhc0JvcmRlciwgcmVzdC5vbkNsaWNrICYmIHN0eWxlcy5pc0NsaWNrYWJsZV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpUGFuZWwnLCBcImV1aVBhbmVsLS1cIi5jb25jYXQoY29sb3IpLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiZXVpUGFuZWwtLVwiLmNvbmNhdChwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwW3BhZGRpbmdTaXplXSksIHBhZGRpbmdTaXplVG9DbGFzc05hbWVNYXBbcGFkZGluZ1NpemVdKSwgY2xhc3NOYW1lKTtcblxuICBpZiAocmVzdC5vbkNsaWNrICYmIGVsZW1lbnQgIT09ICdkaXYnKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBwYW5lbFJlZixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIGNzczogY3NzU3R5bGVzXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHBhbmVsUmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc1N0eWxlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVBhbmVsLnByb3BUeXBlcyA9IHtcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImJ1dHRvblwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJkaXZcIl0pXSksXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIG1lZGl1bSBzaGFkb3cgdG8gdGhlIHBhbmVsO1xuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpblwiYFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFkZHMgYSBtZWRpdW0gc2hhZG93IHRvIHRoZSBwYW5lbDtcbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW5cImBcbiAgICAgKi9cbiAgaGFzU2hhZG93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBZGRzIGEgc2xpZ2h0IDFweCBib3JkZXIgb24gYWxsIGVkZ2VzLlxuICAgICAqIE9ubHkgd29ya3Mgd2hlbiBgY29sb3I9XCJwbGFpbiB8IHRyYW5zcGFyZW50XCJgXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQWRkcyBhIHNsaWdodCAxcHggYm9yZGVyIG9uIGFsbCBlZGdlcy5cbiAgICAgKiBPbmx5IHdvcmtzIHdoZW4gYGNvbG9yPVwicGxhaW4gfCB0cmFuc3BhcmVudFwiYFxuICAgICAqL1xuICBoYXNCb3JkZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFBhZGRpbmcgZm9yIGFsbCBmb3VyIHNpZGVzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUGFkZGluZyBmb3IgYWxsIGZvdXIgc2lkZXNcbiAgICAgKi9cbiAgcGFkZGluZ1NpemU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQ29ybmVyIGJvcmRlciByYWRpdXNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBDb3JuZXIgYm9yZGVyIHJhZGl1c1xuICAgICAqL1xuICBib3JkZXJSYWRpdXM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogV2hlbiB0cnVlIHRoZSBwYW5lbCB3aWxsIGdyb3cgaW4gaGVpZ2h0IHRvIG1hdGNoIGBFdWlGbGV4SXRlbWBcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBXaGVuIHRydWUgdGhlIHBhbmVsIHdpbGwgZ3JvdyBpbiBoZWlnaHQgdG8gbWF0Y2ggYEV1aUZsZXhJdGVtYFxuICAgICAqL1xuICBncm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFuZWxSZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgcGFuZWw7XG4gICAgICogVXN1YWxseSBhIGxpZ2h0ZW5lZCBmb3JtIG9mIHRoZSBicmFuZCBjb2xvcnNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwYW5lbDtcbiAgICAgKiBVc3VhbGx5IGEgbGlnaHRlbmVkIGZvcm0gb2YgdGhlIGJyYW5kIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLmFueSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlTaGFkb3cgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5pbXBvcnQgeyBldWlDYW5BbmltYXRlLCBsb2dpY2FsVGV4dEFsaWduQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxMjJsdzBlLWdyb3dcIixcbiAgc3R5bGVzOiBcImZsZXgtZ3JvdzoxO2xhYmVsOmdyb3c7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTIybHcwZS1ncm93XCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MTtsYWJlbDpncm93O1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbnZhciBfcmVmMiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxa2s3b2RpLWV1aVBhbmVsXCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MDtsYWJlbDpldWlQYW5lbDtcIlxufSA6IHtcbiAgbmFtZTogXCIxa2s3b2RpLWV1aVBhbmVsXCIsXG4gIHN0eWxlczogXCJmbGV4LWdyb3c6MDtsYWJlbDpldWlQYW5lbDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aVBhbmVsU3R5bGVzID0gZnVuY3Rpb24gZXVpUGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpUGFuZWw6IF9yZWYyLFxuICAgIGdyb3c6IF9yZWYsXG4gICAgaGFzU2hhZG93OiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdtJyksIFwiOztsYWJlbDpoYXNTaGFkb3c7XCIpLFxuICAgIGhhc0JvcmRlcjogLyojX19QVVJFX18qL2NzcyhcImJvcmRlcjpcIiwgZXVpVGhlbWUuYm9yZGVyLnRoaW4sIFwiOztsYWJlbDpoYXNCb3JkZXI7XCIpLFxuICAgIHJhZGl1czoge1xuICAgICAgbm9uZTogLyojX19QVVJFX18qL2NzcyhcIjtsYWJlbDpub25lO1wiKSxcbiAgICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJib3JkZXItcmFkaXVzOlwiLCBldWlUaGVtZS5ib3JkZXIucmFkaXVzLm1lZGl1bSwgXCI7O2xhYmVsOm07XCIpXG4gICAgfSxcbiAgICAvLyBTZXR1cCBpbnRlcmFjdGl2ZSBiZWhhdmlvclxuICAgIGlzQ2xpY2thYmxlOiAvKiNfX1BVUkVfXyovY3NzKGV1aUNhbkFuaW1hdGUsIFwie3RyYW5zaXRpb246Ym94LXNoYWRvdyBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmZhc3QsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24ucmVzaXN0YW5jZSwgXCIsdHJhbnNmb3JtIFwiLCBldWlUaGVtZS5hbmltYXRpb24uZmFzdCwgXCIgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5yZXNpc3RhbmNlLCBcIjt9JjplbmFibGVke2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtcIiwgbG9naWNhbFRleHRBbGlnbkNTUygnbGVmdCcpLCBcIjt9Jjpob3ZlciwmOmZvY3Vze1wiLCBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAnbCcpLCBcIjt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTtjdXJzb3I6cG9pbnRlcjt9O2xhYmVsOmlzQ2xpY2thYmxlO1wiKVxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGV1aVNoYWRvdywgZXVpU2hhZG93RmxhdCwgZXVpU2hhZG93TWVkaXVtIH0gZnJvbSAnLi4vLi4vLi4vdGhlbWVzL2Ftc3RlcmRhbS9nbG9iYWxfc3R5bGluZy9taXhpbnMnO1xuaW1wb3J0IHsgZXVpQ2FuQW5pbWF0ZSwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbnZhciB0cmFuc2xhdGVEaXN0YW5jZSA9ICdzJztcbi8qKlxuICogMS4gQ2FuIGV4cGFuZCBmdXJ0aGVyLCBidXQgaXQgbG9va3Mgd2VpcmQgaWYgaXQncyBzbWFsbGVyIHRoYW4gdGhlIG9yaWdpbmF0aW5nIGJ1dHRvbi5cbiAqIDIuIEFuaW1hdGlvbiBoYXBwZW5zIG9uIHRoZSBwYW5lbC4gQnV0IGRvbid0IGFuaW1hdGUgcG9zaXRpb24gd2hlbiB1c2luZyB0aGUgYXR0YWNoZWQgbW9kZSBsaWtlIGZvciBpbnB1dHNcbiAqIDMuIE1ha2Ugc3VyZSB0aGUgcGFuZWwgc3RheXMgd2l0aGluIHRoZSB3aW5kb3cuXG4gKi9cblxuZXhwb3J0IHZhciBldWlQb3BvdmVyUGFuZWxTdHlsZXMgPSBmdW5jdGlvbiBldWlQb3BvdmVyUGFuZWxTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpUG9wb3Zlcl9fcGFuZWw6IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjphYnNvbHV0ZTtcIiwgbG9naWNhbENTUygnbWluLXdpZHRoJywgXCJcIi5jb25jYXQoZXVpVGhlbWUuYmFzZSAqIDcsIFwicHhcIikpLCBcIjtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgXCJjYWxjKDEwMHZ3IC0gXCIuY29uY2F0KGV1aVRoZW1lLnNpemUueGwsIFwiKVwiKSksIFwiO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApIHRyYW5zbGF0ZVgoMCkgdHJhbnNsYXRlWigwKTtcIiwgZXVpU2hhZG93TWVkaXVtKGV1aVRoZW1lQ29udGV4dCwge1xuICAgICAgcHJvcGVydHk6ICdmaWx0ZXInXG4gICAgfSksIFwiICY6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6MDt9O2xhYmVsOmV1aVBvcG92ZXJfX3BhbmVsO1wiKSxcbiAgICAvLyBJcyB2aXNpYmxlIC8gb3BlblxuICAgIGlzT3BlbjogLyojX19QVVJFX18qL2NzcyhcIm9wYWNpdHk6MTtwb2ludGVyLWV2ZW50czphdXRvO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5ib3VuY2UsIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24uc2xvdywgXCIsdHJhbnNmb3JtIFwiLCBldWlUaGVtZS5hbmltYXRpb24uYm91bmNlLCBcIiBjYWxjKFwiLCBldWlUaGVtZS5hbmltYXRpb24uc2xvdywgXCIgKyAxMDBtcyk7fTtsYWJlbDppc09wZW47XCIpLFxuICAgIC8vIFBvc2l0aW9uc1xuICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVZKFwiLCBldWlUaGVtZS5zaXplW3RyYW5zbGF0ZURpc3RhbmNlXSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOnRvcDtcIiksXG4gICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVkoLVwiLCBldWlUaGVtZS5zaXplW3RyYW5zbGF0ZURpc3RhbmNlXSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOmJvdHRvbTtcIiksXG4gICAgbGVmdDogLyojX19QVVJFX18qL2NzcyhcInRyYW5zZm9ybTp0cmFuc2xhdGVYKFwiLCBldWlUaGVtZS5zaXplW3RyYW5zbGF0ZURpc3RhbmNlXSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOmxlZnQ7XCIpLFxuICAgIHJpZ2h0OiAvKiNfX1BVUkVfXyovY3NzKFwidHJhbnNmb3JtOnRyYW5zbGF0ZVgoLVwiLCBldWlUaGVtZS5zaXplW3RyYW5zbGF0ZURpc3RhbmNlXSwgXCIpIHRyYW5zbGF0ZVooMCk7O2xhYmVsOnJpZ2h0O1wiKSxcbiAgICAvLyBBdHRhY2hlZCB2ZXJzaW9uIG92ZXJyaWRlc1xuICAgIGF0dGFjaGVkOiB7XG4gICAgICBpc09wZW46IC8qI19fUFVSRV9fKi9jc3MoXCJmaWx0ZXI6bm9uZTtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7dHJhbnNpdGlvbjpvcGFjaXR5IFwiLCBldWlUaGVtZS5hbmltYXRpb24uYm91bmNlLCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnNsb3csIFwiO307bGFiZWw6aXNPcGVuO1wiKSxcbiAgICAgIHRvcDogLyojX19QVVJFX18qL2NzcyhldWlTaGFkb3dGbGF0KGV1aVRoZW1lQ29udGV4dCksIFwiOztsYWJlbDp0b3A7XCIpLFxuICAgICAgYm90dG9tOiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdtJyksIFwiOztsYWJlbDpib3R0b207XCIpLFxuICAgICAgLy8gU2F0aXNmaWVzIFRTXG4gICAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwiO2xhYmVsOmxlZnQ7XCIpLFxuICAgICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCI7bGFiZWw6cmlnaHQ7XCIpXG4gICAgfVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInNpemVcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInRleHRUcmFuc2Zvcm1cIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBjbG9uZUVsZW1lbnRXaXRoQ3NzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUvY2xvbmVfZWxlbWVudCc7XG5pbXBvcnQgeyBldWlUaXRsZVN0eWxlcyB9IGZyb20gJy4vdGl0bGUuc3R5bGVzJztcbmV4cG9ydCB2YXIgVElUTEVfU0laRVMgPSBbJ3h4eHMnLCAneHhzJywgJ3hzJywgJ3MnLCAnbScsICdsJ107XG5leHBvcnQgdmFyIFRFWFRfVFJBTlNGT1JNID0gWyd1cHBlcmNhc2UnXTtcbmV4cG9ydCB2YXIgRXVpVGl0bGUgPSBmdW5jdGlvbiBFdWlUaXRsZShfcmVmKSB7XG4gIHZhciBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbScgOiBfcmVmJHNpemUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHRleHRUcmFuc2Zvcm0gPSBfcmVmLnRleHRUcmFuc2Zvcm0sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVRpdGxlU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpVGl0bGUsIHRleHRUcmFuc2Zvcm0gPyBzdHlsZXNbdGV4dFRyYW5zZm9ybV0gOiB1bmRlZmluZWQsIHN0eWxlc1tzaXplXV07XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGl0bGUnLCBjbGFzc05hbWUsIGNoaWxkcmVuLnByb3BzLmNsYXNzTmFtZSk7XG5cbiAgdmFyIHByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpO1xuXG4gIHJldHVybiBjbG9uZUVsZW1lbnRXaXRoQ3NzKGNoaWxkcmVuLCBwcm9wcyk7XG59O1xuRXVpVGl0bGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUmVhY3RFbGVtZW50IHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gIHNpemU6IFByb3BUeXBlcy5hbnksXG4gIHRleHRUcmFuc2Zvcm06IFByb3BUeXBlcy5hbnksXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJpc0Rpc2FibGVkXCIsIFwidGl0bGVcIiwgXCJ0aXRsZUVsZW1lbnRcIiwgXCJ0aXRsZVNpemVcIiwgXCJpY29uXCIsIFwiaW1hZ2VcIiwgXCJjaGlsZHJlblwiLCBcImZvb3RlclwiLCBcIm9uQ2xpY2tcIiwgXCJocmVmXCIsIFwicmVsXCIsIFwidGFyZ2V0XCIsIFwidGV4dEFsaWduXCIsIFwiYmV0YUJhZGdlUHJvcHNcIiwgXCJsYXlvdXRcIiwgXCJzZWxlY3RhYmxlXCIsIFwiZGlzcGxheVwiLCBcInBhZGRpbmdTaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gJy4uL3RleHQnO1xuaW1wb3J0IHsgRXVpVGl0bGUgfSBmcm9tICcuLi90aXRsZSc7XG5pbXBvcnQgeyBFdWlCZXRhQmFkZ2UgfSBmcm9tICcuLi9iYWRnZS9iZXRhX2JhZGdlJztcbmltcG9ydCB7IEV1aUNhcmRTZWxlY3QsIGV1aUNhcmRTZWxlY3RhYmxlQ29sb3IgfSBmcm9tICcuL2NhcmRfc2VsZWN0JztcbmltcG9ydCB7IHVzZUdlbmVyYXRlZEh0bWxJZCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHknO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsgRXVpUGFuZWwgfSBmcm9tICcuLi9wYW5lbCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHRleHRBbGlnblRvQ2xhc3NOYW1lTWFwID0ge1xuICBsZWZ0OiAnZXVpQ2FyZC0tbGVmdEFsaWduZWQnLFxuICBjZW50ZXI6ICdldWlDYXJkLS1jZW50ZXJBbGlnbmVkJyxcbiAgcmlnaHQ6ICdldWlDYXJkLS1yaWdodEFsaWduZWQnXG59O1xuZXhwb3J0IHZhciBBTElHTk1FTlRTID0ga2V5c09mKHRleHRBbGlnblRvQ2xhc3NOYW1lTWFwKTtcbnZhciBsYXlvdXRUb0NsYXNzTmFtZU1hcCA9IHtcbiAgdmVydGljYWw6ICcnLFxuICBob3Jpem9udGFsOiAnZXVpQ2FyZC0taG9yaXpvbnRhbCdcbn07XG5leHBvcnQgdmFyIExBWU9VVF9BTElHTk1FTlRTID0ga2V5c09mKGxheW91dFRvQ2xhc3NOYW1lTWFwKTtcbi8qKlxuICogQ2VydGFpbiBwcm9wcyBhcmUgb25seSBhbGxvd2VkIHdoZW4gdGhlIGxheW91dCBpcyB2ZXJ0aWNhbFxuICovXG5cbmV4cG9ydCB2YXIgRXVpQ2FyZCA9IGZ1bmN0aW9uIEV1aUNhcmQoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBkZXNjcmlwdGlvbiA9IF9yZWYuZGVzY3JpcHRpb24sXG4gICAgICBfaXNEaXNhYmxlZCA9IF9yZWYuaXNEaXNhYmxlZCxcbiAgICAgIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIF9yZWYkdGl0bGVFbGVtZW50ID0gX3JlZi50aXRsZUVsZW1lbnQsXG4gICAgICB0aXRsZUVsZW1lbnQgPSBfcmVmJHRpdGxlRWxlbWVudCA9PT0gdm9pZCAwID8gJ3NwYW4nIDogX3JlZiR0aXRsZUVsZW1lbnQsXG4gICAgICBfcmVmJHRpdGxlU2l6ZSA9IF9yZWYudGl0bGVTaXplLFxuICAgICAgdGl0bGVTaXplID0gX3JlZiR0aXRsZVNpemUgPT09IHZvaWQgMCA/ICdzJyA6IF9yZWYkdGl0bGVTaXplLFxuICAgICAgaWNvbiA9IF9yZWYuaWNvbixcbiAgICAgIGltYWdlID0gX3JlZi5pbWFnZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGZvb3RlciA9IF9yZWYuZm9vdGVyLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIGhyZWYgPSBfcmVmLmhyZWYsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIHRhcmdldCA9IF9yZWYudGFyZ2V0LFxuICAgICAgX3JlZiR0ZXh0QWxpZ24gPSBfcmVmLnRleHRBbGlnbixcbiAgICAgIHRleHRBbGlnbiA9IF9yZWYkdGV4dEFsaWduID09PSB2b2lkIDAgPyAnY2VudGVyJyA6IF9yZWYkdGV4dEFsaWduLFxuICAgICAgYmV0YUJhZGdlUHJvcHMgPSBfcmVmLmJldGFCYWRnZVByb3BzLFxuICAgICAgX3JlZiRsYXlvdXQgPSBfcmVmLmxheW91dCxcbiAgICAgIGxheW91dCA9IF9yZWYkbGF5b3V0ID09PSB2b2lkIDAgPyAndmVydGljYWwnIDogX3JlZiRsYXlvdXQsXG4gICAgICBzZWxlY3RhYmxlID0gX3JlZi5zZWxlY3RhYmxlLFxuICAgICAgZGlzcGxheSA9IF9yZWYuZGlzcGxheSxcbiAgICAgIHBhZGRpbmdTaXplID0gX3JlZi5wYWRkaW5nU2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBpc0Rpc2FibGVkID0gX2lzRGlzYWJsZWQgfHwgIWlzSHJlZlZhbGlkO1xuICB2YXIgaXNDbGlja2FibGUgPSAhaXNEaXNhYmxlZCAmJiAob25DbGljayB8fCBocmVmIHx8IHNlbGVjdGFibGUgJiYgIXNlbGVjdGFibGUuaXNEaXNhYmxlZCk7XG4gIC8qKlxuICAgKiBGb3IgYTExeSwgd2Ugc2ltdWxhdGUgdGhlIHNhbWUgY2xpY2sgdGhhdCdzIHByb3ZpZGVkIG9uIHRoZSB0aXRsZSB3aGVuIGNsaWNraW5nIHRoZSB3aG9sZSBjYXJkXG4gICAqIHdpdGhvdXQgaGF2aW5nIHRvIG1ha2UgdGhlIHdob2xlIGNhcmQgYSBidXR0b24gb3IgYW5jaG9yIHRhZy5cbiAgICogKkNhcmQgQWNjZXNzaWJpbGl0eTogVGhlIHJlZHVuZGFudCBjbGljayBldmVudCBodHRwczovL2luY2x1c2l2ZS1jb21wb25lbnRzLmRlc2lnbi9jYXJkcy8qXG4gICAqL1xuXG4gIHZhciBsaW5rID0gbnVsbDtcblxuICB2YXIgb3V0ZXJPbkNsaWNrID0gZnVuY3Rpb24gb3V0ZXJPbkNsaWNrKGUpIHtcbiAgICBpZiAobGluayAmJiBsaW5rICE9PSBlLnRhcmdldCkge1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH1cbiAgfTtcblxuICBpZiAobGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICBpZiAoaW1hZ2UgfHwgZm9vdGVyIHx8IHRleHRBbGlnbiAhPT0gJ2NlbnRlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXVpQ2FyZDogYGxheW91dD1cImhvcml6b250YWxcImAgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgaW1hZ2VgLCBgZm9vdGVyYCwgb3IgYHRleHRBbGlnbmAuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHNlbGVjdGFibGVDb2xvckNsYXNzID0gc2VsZWN0YWJsZSA/IFwiZXVpQ2FyZC0taXNTZWxlY3RhYmxlLS1cIi5jb25jYXQoZXVpQ2FyZFNlbGVjdGFibGVDb2xvcihzZWxlY3RhYmxlLmNvbG9yLCBzZWxlY3RhYmxlLmlzU2VsZWN0ZWQpKSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDYXJkJywgdGV4dEFsaWduVG9DbGFzc05hbWVNYXBbdGV4dEFsaWduXSwgbGF5b3V0VG9DbGFzc05hbWVNYXBbbGF5b3V0XSwge1xuICAgICdldWlDYXJkLS1pc0NsaWNrYWJsZSc6IGlzQ2xpY2thYmxlLFxuICAgICdldWlDYXJkLS1oYXNCZXRhQmFkZ2UnOiBiZXRhQmFkZ2VQcm9wcyA9PT0gbnVsbCB8fCBiZXRhQmFkZ2VQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmV0YUJhZGdlUHJvcHMubGFiZWwsXG4gICAgJ2V1aUNhcmQtLWhhc0ljb24nOiBpY29uLFxuICAgICdldWlDYXJkLS1pc1NlbGVjdGFibGUnOiBzZWxlY3RhYmxlLFxuICAgICdldWlDYXJkLWlzU2VsZWN0ZWQnOiBzZWxlY3RhYmxlID09PSBudWxsIHx8IHNlbGVjdGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGFibGUuaXNTZWxlY3RlZCxcbiAgICAnZXVpQ2FyZC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZFxuICB9LCBzZWxlY3RhYmxlQ29sb3JDbGFzcywgY2xhc3NOYW1lKTtcbiAgdmFyIGFyaWFJZCA9IHVzZUdlbmVyYXRlZEh0bWxJZCgpO1xuICB2YXIgYXJpYURlc2MgPSBkZXNjcmlwdGlvbiA/IFwiXCIuY29uY2F0KGFyaWFJZCwgXCJEZXNjcmlwdGlvblwiKSA6ICcnO1xuICAvKipcbiAgICogVG9wIGFyZWEgY29udGFpbmluZyBpbWFnZSwgaWNvbiBvciBib3RoXG4gICAqL1xuXG4gIHZhciBpbWFnZU5vZGU7XG5cbiAgaWYgKGltYWdlICYmIGxheW91dCA9PT0gJ3ZlcnRpY2FsJykge1xuICAgIGlmICggLyojX19QVVJFX18qL2lzVmFsaWRFbGVtZW50KGltYWdlKSB8fCB0eXBlb2YgaW1hZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbWFnZU5vZGUgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2ltYWdlXCJcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9pc1ZhbGlkRWxlbWVudChpbWFnZSkgPyBpbWFnZSA6IF9fX0Vtb3Rpb25KU1goXCJpbWdcIiwge1xuICAgICAgICBzcmM6IGltYWdlLFxuICAgICAgICBhbHQ6IFwiXCJcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW1hZ2VOb2RlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgaWNvbk5vZGU7XG5cbiAgaWYgKGljb24pIHtcbiAgICBpY29uTm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGljb24ucHJvcHMuY2xhc3NOYW1lLCAnZXVpQ2FyZF9faWNvbicpXG4gICAgfSk7XG4gIH1cblxuICB2YXIgb3B0aW9uYWxDYXJkVG9wO1xuXG4gIGlmIChpbWFnZU5vZGUgfHwgaWNvbk5vZGUpIHtcbiAgICBvcHRpb25hbENhcmRUb3AgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX190b3BcIlxuICAgIH0sIGltYWdlTm9kZSwgaWNvbk5vZGUpO1xuICB9XG4gIC8qKlxuICAgKiBPcHRpb25hbCBFdWlCZXRhQmFkZ2VcbiAgICovXG5cblxuICB2YXIgb3B0aW9uYWxCZXRhQmFkZ2U7XG4gIHZhciBvcHRpb25hbEJldGFCYWRnZUlEID0gJyc7XG5cbiAgaWYgKGJldGFCYWRnZVByb3BzICE9PSBudWxsICYmIGJldGFCYWRnZVByb3BzICE9PSB2b2lkIDAgJiYgYmV0YUJhZGdlUHJvcHMubGFiZWwpIHtcbiAgICBvcHRpb25hbEJldGFCYWRnZUlEID0gXCJcIi5jb25jYXQoYXJpYUlkLCBcIkJldGFCYWRnZVwiKTtcbiAgICBvcHRpb25hbEJldGFCYWRnZSA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19iZXRhQmFkZ2VXcmFwcGVyXCJcbiAgICB9LCBfX19FbW90aW9uSlNYKEV1aUJldGFCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgaWQ6IG9wdGlvbmFsQmV0YUJhZGdlSURcbiAgICB9LCBiZXRhQmFkZ2VQcm9wcywge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdldWlDYXJkX19iZXRhQmFkZ2UnLCBiZXRhQmFkZ2VQcm9wcyA9PT0gbnVsbCB8fCBiZXRhQmFkZ2VQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmV0YUJhZGdlUHJvcHMuY2xhc3NOYW1lKVxuICAgIH0pKSk7IC8vIEluY3JlYXNlIHBhZGRpbmcgc2l6ZSB3aGVuIHRoZXJlIGlzIGEgYmV0YSBiYWRnZSB1bmxlc3MgaXQncyBhbHJlYWR5IGRldGVybWluZWRcblxuICAgIHBhZGRpbmdTaXplID0gcGFkZGluZ1NpemUgfHwgJ2wnO1xuICB9XG4gIC8qKlxuICAgKiBPcHRpb25hbCBzZWxlY3RhYmxlIGJ1dHRvblxuICAgKi9cblxuXG4gIGlmIChzZWxlY3RhYmxlICYmIGlzRGlzYWJsZWQgJiYgc2VsZWN0YWJsZS5pc0Rpc2FibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICBzZWxlY3RhYmxlLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgdmFyIG9wdGlvbmFsU2VsZWN0QnV0dG9uO1xuXG4gIGlmIChzZWxlY3RhYmxlKSB7XG4gICAgb3B0aW9uYWxTZWxlY3RCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aUNhcmRTZWxlY3QsIF9leHRlbmRzKHtcbiAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBcIlwiLmNvbmNhdChhcmlhSWQsIFwiVGl0bGUgXCIpLmNvbmNhdChhcmlhRGVzYylcbiAgICB9LCBzZWxlY3RhYmxlLCB7XG4gICAgICBidXR0b25SZWY6IGZ1bmN0aW9uIGJ1dHRvblJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuICAvKipcbiAgICogV3JhcHMgdGhlIHRpdGxlIHdpdGggdGhlIGxpbmsgKDxhPikgb3IgYnV0dG9uLlxuICAgKiBUaGlzIG1ha2VzIHRoZSB0aXRsZSBlbGVtZW50IGExMXkgZnJpZW5kbHkgYW5kIGdldHMgZGVzY3JpYmVkIGJ5IGl0cyBjb250ZW50IGlmIGl0cyBpbnRlcmFjdGFibGUuXG4gICAqL1xuXG5cbiAgdmFyIHRoZVRpdGxlO1xuXG4gIGlmICghaXNEaXNhYmxlZCAmJiBocmVmKSB7XG4gICAgdGhlVGl0bGUgPSBfX19FbW90aW9uSlNYKFwiYVwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpQ2FyZF9fdGl0bGVBbmNob3JcIixcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogYXJpYURlc2MsXG4gICAgICByZWw6IGdldFNlY3VyZVJlbEZvclRhcmdldCh7XG4gICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICByZWw6IHJlbFxuICAgICAgfSksXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0sIHRpdGxlKTtcbiAgfSBlbHNlIGlmIChpc0Rpc2FibGVkIHx8IG9uQ2xpY2spIHtcbiAgICB0aGVUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RpdGxlQnV0dG9uXCIsXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXG4gICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogXCJcIi5jb25jYXQob3B0aW9uYWxCZXRhQmFkZ2VJRCwgXCIgXCIpLmNvbmNhdChhcmlhRGVzYyksXG4gICAgICByZWY6IGZ1bmN0aW9uIHJlZihub2RlKSB7XG4gICAgICAgIGxpbmsgPSBub2RlO1xuICAgICAgfVxuICAgIH0sIHRpdGxlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGVUaXRsZSA9IHRpdGxlO1xuICB9XG4gIC8qKlxuICAgKiBDb252ZXJ0IHRpdGxlRWxlbWVudCB0byBhIGNhcGl0YWwgVGl0bGVFbGVtZW50XG4gICAqL1xuXG5cbiAgdmFyIFRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbWVudDtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUGFuZWwsIF9leHRlbmRzKHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBvbkNsaWNrOiBpc0NsaWNrYWJsZSA/IG91dGVyT25DbGljayA6IHVuZGVmaW5lZCxcbiAgICBjb2xvcjogaXNEaXNhYmxlZCA/ICdzdWJkdWVkJyA6IGRpc3BsYXksXG4gICAgaGFzU2hhZG93OiBpc0Rpc2FibGVkIHx8IGRpc3BsYXkgPyBmYWxzZSA6IHRydWUsXG4gICAgaGFzQm9yZGVyOiBkaXNwbGF5ID8gZmFsc2UgOiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplXG4gIH0sIHJlc3QpLCBvcHRpb25hbENhcmRUb3AsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlDYXJkX19jb250ZW50XCJcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlUaXRsZSwge1xuICAgIGlkOiBcIlwiLmNvbmNhdChhcmlhSWQsIFwiVGl0bGVcIiksXG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX3RpdGxlXCIsXG4gICAgc2l6ZTogdGl0bGVTaXplXG4gIH0sIF9fX0Vtb3Rpb25KU1goVGl0bGVFbGVtZW50LCBudWxsLCB0aGVUaXRsZSkpLCBkZXNjcmlwdGlvbiAmJiBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICBpZDogYXJpYURlc2MsXG4gICAgc2l6ZTogXCJzXCIsXG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2Rlc2NyaXB0aW9uXCJcbiAgfSwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgZGVzY3JpcHRpb24pKSwgY2hpbGRyZW4gJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2NoaWxkcmVuXCJcbiAgfSwgY2hpbGRyZW4pKSwgb3B0aW9uYWxCZXRhQmFkZ2UsIGxheW91dCA9PT0gJ3ZlcnRpY2FsJyAmJiBmb290ZXIgJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUNhcmRfX2Zvb3RlclwiXG4gIH0sIGZvb3RlciksIG9wdGlvbmFsU2VsZWN0QnV0dG9uKTtcbn07XG5FdWlDYXJkLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICAgKiBDaGFuZ2UgdG8gXCJob3Jpem9udGFsXCIgaWYgeW91IG5lZWQgdGhlIGljb24gdG8gYmUgbGVmdCBvZiB0aGUgY29udGVudC5cbiAgICAgICAqIEhvcml6b250YWwgbGF5b3V0cyBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBpbWFnZWAsIGBmb290ZXJgLCBvciBgdGV4dEFsaWduYC5cbiAgICAgICAqL1xuICBsYXlvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJ2ZXJ0aWNhbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJob3Jpem9udGFsXCJdKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDaGFuZ2VzIGFsaWdubWVudCBvZiB0aGUgdGl0bGUgYW5kIGRlc2NyaXB0aW9uXG4gICAgICAgKi9cbiAgdGV4dEFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcImNlbnRlclwiLCBcInJpZ2h0XCJdKSxcblxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IGNvbWJpbmF0aW9uIG9mIGVsZW1lbnRzXG4gICAgICAgKi9cbiAgZm9vdGVyOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgICAqIEFjY2VwdHMgYSB1cmwgaW4gc3RyaW5nIGZvcm0gb3IgUmVhY3RFbGVtZW50IGZvciBhIGN1c3RvbSBpbWFnZSBjb21wb25lbnRcbiAgICAgICAqL1xuICBpbWFnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDYXJkcyBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBhdCBsZWFzdCBhIHRpdGxlIGFuZCBhIGRlc2NyaXB0aW9uIGFuZC9vciBjaGlsZHJlblxuICAgICAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICAgKiBEZXRlcm1pbmVzIHRoZSB0aXRsZSdzIGhlYWRpbmcgZWxlbWVudFxuICAgICAgICovXG4gIHRpdGxlRWxlbWVudDogUHJvcFR5cGVzLm9uZU9mKFtcImgyXCIsIFwiaDNcIiwgXCJoNFwiLCBcImg1XCIsIFwiaDZcIiwgXCJzcGFuXCJdKSxcblxuICAvKipcbiAgICAgICAqIERldGVybWluZXMgdGhlIHRpdGxlJ3Mgc2l6ZSwgbWF0Y2hpbmcgdGhhdCBvZiBFdWlUaXRsZS5cbiAgICAgICAqIFRob3VnaCwgY2FyZCB0aXRsZXMgY2FuJ3QgYmUgdG9vIGxhcmdlIG9yIHNtYWxsIHJlbGF0aXZlIHRvIHRoZSBkZXNjcmlwdGlvbiB0ZXh0LlxuICAgICAgICovXG4gIHRpdGxlU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJ4c1wiXSksXG4gIC8vIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkIGlmIGNoaWxkcmVuIGlzIG9taXR0ZWRcbiAgLy8gZGVzY3JpcHRpb24gYmVjb21lcyBvcHRpb25hbCB3aGVuIGNoaWxkcmVuIGlzIHByZXNlbnRcblxuICAvKipcbiAgICAgICAqIFBsYWNlZCB3aXRoaW4gYSBzbWFsbCBFdWlUZXh0IGA8cD5gIHRhZ1xuICAgICAgICovXG4gIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQWNjZXB0cyBhbiBgPEV1aUljb24+YCBub2RlIG9yIGBudWxsYFxuICAgICAgICovXG4gIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSksXG5cbiAgLyoqXG4gICAgICAgKiBDdXN0b20gY2hpbGRyZW5cbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBVc2Ugb25seSBpZiB5b3Ugd2FudCB0byBmb3JlZ28gYSBidXR0b24gaW4gdGhlIGZvb3RlciBhbmQgbWFrZSB0aGUgd2hvbGUgY2FyZCBjbGlja2FibGVcbiAgICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIEFkZHMgYSBiYWRnZSB0byB0b3Agb2YgdGhlIGNhcmQgdG8gbGFiZWwgaXQgYXMgXCJCZXRhXCIgb3Igb3RoZXIgbm9uLUdBIHN0YXRlLlxuICAgICAgICogQWNjZXB0cyBhbGwgdGhlIHByb3BzIG9mIFtFdWlCZXRhQmFkZ2VdKCMvZGlzcGxheS9iYWRnZSNiZXRhLWJhZGdlLXR5cGUpLCB3aGVyZSBgbGFiZWxgIGlzIHJlcXVpcmVkLlxuICAgICAgICovXG4gIGJldGFCYWRnZVByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogTWF0Y2hlcyB0byB0aGUgY29sb3IgcHJvcGVydHkgb2YgRXVpUGFuZWwuIElmIGRlZmluZWQsIHJlbW92ZXMgYW55IGJvcmRlciAmIHNoYWRvdy5cbiAgICAgICAqIExlYXZlIGFzIGB1bmRlZmluZWRgIHRvIGRpc3BsYXkgYXMgYSBkZWZhdWx0IHBhbmVsLlxuICAgICAgICogU2VsZWN0YWJsZSBjYXJkcyB3aWxsIGFsd2F5cyBkaXNwbGF5IGFzIGEgZGVmYXVsdCBwYW5lbC5cbiAgICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogUGFkZGluZyBhcHBsaWVkIGFyb3VuZCB0aGUgY29udGVudCBvZiB0aGUgY2FyZFxuICAgICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQWRkcyBhIGJ1dHRvbiB0byB0aGUgYm90dG9tIG9mIHRoZSBjYXJkIHRvIGFsbG93IGZvciBpbi1wbGFjZSBzZWxlY3Rpb25cbiAgICAgICAqL1xuICBzZWxlY3RhYmxlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImRhbmdlclwiLCBcInRleHRcIiwgXCJnaG9zdFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCJdKSxcbiAgICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICAgKi9cbiAgICBmbHVzaDogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICAgKi9cbiAgICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAqL1xuICAgIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIElzIGluIHRoZSBzZWxlY3RlZCBzdGF0ZVxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAgICovXG4gICAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwic3VibWl0XCJdKSxcbiAgICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgICAvKipcbiAgICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgICAqL1xuICAgIGNvbnRlbnRQcm9wczogUHJvcFR5cGVzLmFueSxcblxuICAgIC8qKlxuICAgICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICAgKi9cbiAgICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIENhbiBvbmx5IGJlIG9uZSBzaWRlIGBsZWZ0YCBvciBgcmlnaHRgXG4gICAgICAgKi9cbiAgICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgICAqL1xuICAgIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgICAgXCJkYXRhLXRleHRcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLFxuICAgIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG5cbiAgLyoqXG4gICAgICAgKiBVc2UgYSBib3JkZXIgc3R5bGUgb2YgY2FyZCBpbnN0ZWFkIG9mIHNoYWRvd1xuICAgICAgICovXG4gIGhhc0JvcmRlcjogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpc1NlbGVjdGVkXCIsIFwiaXNEaXNhYmxlZFwiLCBcImNvbG9yXCIsIFwiY2hpbGRyZW5cIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uL2J1dHRvbi9idXR0b25fZW1wdHknO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ2FyZFNlbGVjdCA9IGZ1bmN0aW9uIEV1aUNhcmRTZWxlY3QoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBpc1NlbGVjdGVkID0gX3JlZiRpc1NlbGVjdGVkID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaXNTZWxlY3RlZCxcbiAgICAgIGlzRGlzYWJsZWQgPSBfcmVmLmlzRGlzYWJsZWQsXG4gICAgICBjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNoaWxkID0gZXVpQ2FyZFNlbGVjdGFibGVUZXh0KGlzU2VsZWN0ZWQsIGlzRGlzYWJsZWQsIGNoaWxkcmVuKTtcbiAgdmFyIHNlbGVjdENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDYXJkU2VsZWN0JywgXCJldWlDYXJkU2VsZWN0LS1cIi5jb25jYXQoZXVpQ2FyZFNlbGVjdGFibGVDb2xvcihjb2xvciwgaXNTZWxlY3RlZCkpLCBjbGFzc05hbWUpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogc2VsZWN0Q2xhc3NlcyxcbiAgICBjb2xvcjogY29sb3IgfHwgJ3RleHQnLFxuICAgIHNpemU6IFwieHNcIixcbiAgICBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgIGljb25UeXBlOiBpc1NlbGVjdGVkID8gJ2NoZWNrJyA6IHVuZGVmaW5lZCxcbiAgICByb2xlOiBcInN3aXRjaFwiLFxuICAgIFwiYXJpYS1jaGVja2VkXCI6IGlzU2VsZWN0ZWRcbiAgfSwgcmVzdCksIGNoaWxkKTtcbn07XG5FdWlDYXJkU2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBbnkgb2Ygb3VyIG5hbWVkIGNvbG9yc1xuICAgICAqL1xuICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJ4c1wiLCBcInNcIiwgXCJtXCJdKSxcblxuICAvKipcbiAgICAgKiBFbnN1cmUgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiBzaXRzIGZsdXNoIHRvIHRoZSBsZWZ0LCByaWdodCwgb3IgYm90aCBzaWRlcyBvZiBpdHMgY29udGFpbmVyXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuICBmbHVzaDogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdGhcIl0pLFxuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogYGRpc2FibGVkYCBpcyBhbHNvIGFsbG93ZWRcbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRm9yY2UgZGlzYWJsZXMgdGhlIGJ1dHRvbiBhbmQgY2hhbmdlcyB0aGUgaWNvbiB0byBhIGxvYWRpbmcgc3Bpbm5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJcyBpbiB0aGUgc2VsZWN0ZWQgc3RhdGVcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBib29sZWFuIHN0YXRlIGFzIHRoZSBgYXJpYS1wcmVzc2VkYCBwcm9wZXJ0eSB0byBjcmVhdGUgYSB0b2dnbGUgYnV0dG9uLlxuICAgICAqICpPbmx5IHVzZSB3aGVuIHRoZSByZWFkYWJsZSB0ZXh0IGRvZXMgbm90IGNoYW5nZSBiZXR3ZWVuIHN0YXRlcy4qXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIiwgXCJzdWJtaXRcIl0pLFxuICBidXR0b25SZWY6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgYnV0dG9uJ3MgY29udGVudFxuICAgICAqL1xuICBjb250ZW50UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQW55IGB0eXBlYCBhY2NlcHRlZCBieSBFdWlJY29uXG4gICAgICovXG4gIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDYW4gb25seSBiZSBvbmUgc2lkZSBgbGVmdGAgb3IgYHJpZ2h0YFxuICAgICAqL1xuICBpY29uU2lkZTogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiXSksXG5cbiAgLyoqXG4gICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgPHNwYW4vPiB3cmFwcGluZyB0aGUgY29udGVudCdzIHRleHQgKG9ubHkgaWYgdGhlIGNoaWxkcmVuIGlzIGEgYHN0cmluZ2ApXG4gICAgICogSXQgZG9lc24ndCBhcHBseSB0byB0aGUgaWNvbi5cbiAgICAgKi9cbiAgdGV4dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmOiBQcm9wVHlwZXMuYW55LFxuICAgIFwiZGF0YS10ZXh0XCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGljb25TaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIl0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmZ1bmN0aW9uIGV1aUNhcmRTZWxlY3RhYmxlVGV4dChpc1NlbGVjdGVkLCBpc0Rpc2FibGVkLCBjaGlsZHJlbikge1xuICBpZiAoY2hpbGRyZW4pIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgdGV4dDtcblxuICBpZiAoaXNTZWxlY3RlZCkge1xuICAgIHRleHQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgIHRva2VuOiBcImV1aUNhcmRTZWxlY3Quc2VsZWN0ZWRcIixcbiAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0ZWRcIlxuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnVuYXZhaWxhYmxlXCIsXG4gICAgICBkZWZhdWx0OiBcIlVuYXZhaWxhYmxlXCJcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0ZXh0ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICB0b2tlbjogXCJldWlDYXJkU2VsZWN0LnNlbGVjdFwiLFxuICAgICAgZGVmYXVsdDogXCJTZWxlY3RcIlxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldWlDYXJkU2VsZWN0YWJsZUNvbG9yKGNvbG9yLCBpc1NlbGVjdGVkKSB7XG4gIHZhciBjYWxjdWxhdGVkQ29sb3I7XG5cbiAgaWYgKGNvbG9yKSB7XG4gICAgY2FsY3VsYXRlZENvbG9yID0gY29sb3I7XG4gIH0gZWxzZSBpZiAoaXNTZWxlY3RlZCkge1xuICAgIGNhbGN1bGF0ZWRDb2xvciA9ICdzdWNjZXNzJztcbiAgfSBlbHNlIHtcbiAgICBjYWxjdWxhdGVkQ29sb3IgPSAndGV4dCc7XG4gIH1cblxuICByZXR1cm4gY2FsY3VsYXRlZENvbG9yO1xufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpZFwiLCBcImNoZWNrZWRcIiwgXCJsYWJlbFwiLCBcIm9uQ2hhbmdlXCIsIFwidHlwZVwiLCBcImRpc2FibGVkXCIsIFwiY29tcHJlc3NlZFwiLCBcImluZGV0ZXJtaW5hdGVcIiwgXCJpbnB1dFJlZlwiLCBcImxhYmVsUHJvcHNcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgdHlwZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBpbkxpc3Q6ICdldWlDaGVja2JveC0taW5MaXN0J1xufTtcbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpQ2hlY2tib3ggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNoZWNrYm94LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUNoZWNrYm94KTtcblxuICBmdW5jdGlvbiBFdWlDaGVja2JveCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ2hlY2tib3gpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnB1dFJlZlwiLCB1bmRlZmluZWQpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldElucHV0UmVmXCIsIGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgX3RoaXMuaW5wdXRSZWYgPSBpbnB1dDtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLmlucHV0UmVmKSB7XG4gICAgICAgIF90aGlzLnByb3BzLmlucHV0UmVmKGlucHV0KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuaW52YWxpZGF0ZUluZGV0ZXJtaW5hdGUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDaGVja2JveCwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLmludmFsaWRhdGVJbmRldGVybWluYXRlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB0aGlzLmludmFsaWRhdGVJbmRldGVybWluYXRlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzLmlkLFxuICAgICAgICAgIGNoZWNrZWQgPSBfdGhpcyRwcm9wcy5jaGVja2VkLFxuICAgICAgICAgIGxhYmVsID0gX3RoaXMkcHJvcHMubGFiZWwsXG4gICAgICAgICAgb25DaGFuZ2UgPSBfdGhpcyRwcm9wcy5vbkNoYW5nZSxcbiAgICAgICAgICB0eXBlID0gX3RoaXMkcHJvcHMudHlwZSxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wcy5jb21wcmVzc2VkLFxuICAgICAgICAgIGluZGV0ZXJtaW5hdGUgPSBfdGhpcyRwcm9wcy5pbmRldGVybWluYXRlLFxuICAgICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHMuaW5wdXRSZWYsXG4gICAgICAgICAgbGFiZWxQcm9wcyA9IF90aGlzJHByb3BzLmxhYmVsUHJvcHMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDaGVja2JveCcsIHR5cGUgJiYgdHlwZVRvQ2xhc3NOYW1lTWFwW3R5cGVdLCB7XG4gICAgICAgICdldWlDaGVja2JveC0tbm9MYWJlbCc6ICFsYWJlbCxcbiAgICAgICAgJ2V1aUNoZWNrYm94LS1jb21wcmVzc2VkJzogY29tcHJlc3NlZFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBsYWJlbENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDaGVja2JveF9fbGFiZWwnLCBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuY2xhc3NOYW1lKTtcbiAgICAgIHZhciBvcHRpb25hbExhYmVsO1xuXG4gICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgb3B0aW9uYWxMYWJlbCA9IF9fX0Vtb3Rpb25KU1goXCJsYWJlbFwiLCBfZXh0ZW5kcyh7fSwgbGFiZWxQcm9wcywge1xuICAgICAgICAgIGNsYXNzTmFtZTogbGFiZWxDbGFzc2VzLFxuICAgICAgICAgIGh0bWxGb3I6IGlkXG4gICAgICAgIH0pLCBsYWJlbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICB9LCBfX19FbW90aW9uSlNYKFwiaW5wdXRcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ2hlY2tib3hfX2lucHV0XCIsXG4gICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgcmVmOiB0aGlzLnNldElucHV0UmVmXG4gICAgICB9LCByZXN0KSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ2hlY2tib3hfX3NxdWFyZVwiXG4gICAgICB9KSwgb3B0aW9uYWxMYWJlbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImludmFsaWRhdGVJbmRldGVybWluYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGludmFsaWRhdGVJbmRldGVybWluYXRlKCkge1xuICAgICAgaWYgKHRoaXMuaW5wdXRSZWYpIHtcbiAgICAgICAgdGhpcy5pbnB1dFJlZi5pbmRldGVybWluYXRlID0gdGhpcy5wcm9wcy5pbmRldGVybWluYXRlO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDaGVja2JveDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUNoZWNrYm94LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGNoZWNrZWQ6IGZhbHNlLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGluZGV0ZXJtaW5hdGU6IGZhbHNlLFxuICBjb21wcmVzc2VkOiBmYWxzZVxufSk7XG5cbkV1aUNoZWNrYm94LnByb3BUeXBlcyA9IHtcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIC8vIG92ZXJyaWRpbmcgdG8gbWFrZSBpdCByZXF1aXJlZFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImluTGlzdFwiXSksXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiB3aGVuIGB0cnVlYCBjcmVhdGVzIGEgc2hvcnRlciBoZWlnaHQgY2hlY2tib3ggcm93XG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpbmRldGVybWluYXRlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBPYmplY3Qgb2YgcHJvcHMgcGFzc2VkIHRvIHRoZSA8bGFiZWwvPlxuICAgICAqL1xuICBsYWJlbFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZ3V0dGVyU2l6ZVwiLCBcImFsaWduSXRlbXNcIiwgXCJyZXNwb25zaXZlXCIsIFwianVzdGlmeUNvbnRlbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJ3cmFwXCIsIFwiY29tcG9uZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGd1dHRlclNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbm9uZTogbnVsbCxcbiAgeHM6ICdldWlGbGV4R3JvdXAtLWd1dHRlckV4dHJhU21hbGwnLFxuICBzOiAnZXVpRmxleEdyb3VwLS1ndXR0ZXJTbWFsbCcsXG4gIG06ICdldWlGbGV4R3JvdXAtLWd1dHRlck1lZGl1bScsXG4gIGw6ICdldWlGbGV4R3JvdXAtLWd1dHRlckxhcmdlJyxcbiAgeGw6ICdldWlGbGV4R3JvdXAtLWd1dHRlckV4dHJhTGFyZ2UnXG59O1xuZXhwb3J0IHZhciBHVVRURVJfU0laRVMgPSBrZXlzT2YoZ3V0dGVyU2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbnZhciBhbGlnbkl0ZW1zVG9DbGFzc05hbWVNYXAgPSB7XG4gIHN0cmV0Y2g6IG51bGwsXG4gIGZsZXhTdGFydDogJ2V1aUZsZXhHcm91cC0tYWxpZ25JdGVtc0ZsZXhTdGFydCcsXG4gIGZsZXhFbmQ6ICdldWlGbGV4R3JvdXAtLWFsaWduSXRlbXNGbGV4RW5kJyxcbiAgY2VudGVyOiAnZXVpRmxleEdyb3VwLS1hbGlnbkl0ZW1zQ2VudGVyJyxcbiAgYmFzZWxpbmU6ICdldWlGbGV4R3JvdXAtLWFsaWduSXRlbXNCYXNlbGluZSdcbn07XG5leHBvcnQgdmFyIEFMSUdOX0lURU1TID0ga2V5c09mKGFsaWduSXRlbXNUb0NsYXNzTmFtZU1hcCk7XG52YXIganVzdGlmeUNvbnRlbnRUb0NsYXNzTmFtZU1hcCA9IHtcbiAgZmxleFN0YXJ0OiBudWxsLFxuICBmbGV4RW5kOiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudEZsZXhFbmQnLFxuICBjZW50ZXI6ICdldWlGbGV4R3JvdXAtLWp1c3RpZnlDb250ZW50Q2VudGVyJyxcbiAgc3BhY2VCZXR3ZWVuOiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudFNwYWNlQmV0d2VlbicsXG4gIHNwYWNlQXJvdW5kOiAnZXVpRmxleEdyb3VwLS1qdXN0aWZ5Q29udGVudFNwYWNlQXJvdW5kJyxcbiAgc3BhY2VFdmVubHk6ICdldWlGbGV4R3JvdXAtLWp1c3RpZnlDb250ZW50U3BhY2VFdmVubHknXG59O1xuZXhwb3J0IHZhciBKVVNUSUZZX0NPTlRFTlRTID0ga2V5c09mKGp1c3RpZnlDb250ZW50VG9DbGFzc05hbWVNYXApO1xudmFyIGRpcmVjdGlvblRvQ2xhc3NOYW1lTWFwID0ge1xuICByb3c6ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvblJvdycsXG4gIHJvd1JldmVyc2U6ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvblJvd1JldmVyc2UnLFxuICBjb2x1bW46ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvbkNvbHVtbicsXG4gIGNvbHVtblJldmVyc2U6ICdldWlGbGV4R3JvdXAtLWRpcmVjdGlvbkNvbHVtblJldmVyc2UnXG59O1xuZXhwb3J0IHZhciBESVJFQ1RJT05TID0ga2V5c09mKGRpcmVjdGlvblRvQ2xhc3NOYW1lTWFwKTtcblxudmFyIGlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQoY29tcG9uZW50KSB7XG4gIHJldHVybiBbJ2RpdicsICdzcGFuJ10uaW5jbHVkZXMoY29tcG9uZW50KTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpRmxleEdyb3VwID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGd1dHRlclNpemUgPSBfcmVmLmd1dHRlclNpemUsXG4gICAgICBndXR0ZXJTaXplID0gX3JlZiRndXR0ZXJTaXplID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJGd1dHRlclNpemUsXG4gICAgICBfcmVmJGFsaWduSXRlbXMgPSBfcmVmLmFsaWduSXRlbXMsXG4gICAgICBhbGlnbkl0ZW1zID0gX3JlZiRhbGlnbkl0ZW1zID09PSB2b2lkIDAgPyAnc3RyZXRjaCcgOiBfcmVmJGFsaWduSXRlbXMsXG4gICAgICBfcmVmJHJlc3BvbnNpdmUgPSBfcmVmLnJlc3BvbnNpdmUsXG4gICAgICByZXNwb25zaXZlID0gX3JlZiRyZXNwb25zaXZlID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRyZXNwb25zaXZlLFxuICAgICAgX3JlZiRqdXN0aWZ5Q29udGVudCA9IF9yZWYuanVzdGlmeUNvbnRlbnQsXG4gICAgICBqdXN0aWZ5Q29udGVudCA9IF9yZWYkanVzdGlmeUNvbnRlbnQgPT09IHZvaWQgMCA/ICdmbGV4U3RhcnQnIDogX3JlZiRqdXN0aWZ5Q29udGVudCxcbiAgICAgIF9yZWYkZGlyZWN0aW9uID0gX3JlZi5kaXJlY3Rpb24sXG4gICAgICBkaXJlY3Rpb24gPSBfcmVmJGRpcmVjdGlvbiA9PT0gdm9pZCAwID8gJ3JvdycgOiBfcmVmJGRpcmVjdGlvbixcbiAgICAgIF9yZWYkd3JhcCA9IF9yZWYud3JhcCxcbiAgICAgIHdyYXAgPSBfcmVmJHdyYXAgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiR3cmFwLFxuICAgICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYkY29tcG9uZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRmxleEdyb3VwJywgZ3V0dGVyU2l6ZVRvQ2xhc3NOYW1lTWFwW2d1dHRlclNpemVdLCBhbGlnbkl0ZW1zVG9DbGFzc05hbWVNYXBbYWxpZ25JdGVtc10sIGp1c3RpZnlDb250ZW50VG9DbGFzc05hbWVNYXBbanVzdGlmeUNvbnRlbnRdLCBkaXJlY3Rpb25Ub0NsYXNzTmFtZU1hcFtkaXJlY3Rpb25dLCB7XG4gICAgJ2V1aUZsZXhHcm91cC0tcmVzcG9uc2l2ZSc6IHJlc3BvbnNpdmUsXG4gICAgJ2V1aUZsZXhHcm91cC0td3JhcCc6IHdyYXBcbiAgfSwgY2xhc3NOYW1lKTtcblxuICBpZiAoIWlzVmFsaWRFbGVtZW50KGNvbXBvbmVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50LCBcIiBpcyBub3QgYSB2YWxpZCBlbGVtZW50IHR5cGUuIFVzZSBgZGl2YCBvciBgc3BhbmAuXCIpKTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnQgPT09ICdzcGFuJyA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgcmVmOiByZWZcbiAgfSwgcmVzdCksIGNoaWxkcmVuKSA6IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICByZWY6IHJlZlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufSk7XG5FdWlGbGV4R3JvdXAucHJvcFR5cGVzID0ge1xuICBhbGlnbkl0ZW1zOiBQcm9wVHlwZXMub25lT2YoW1wic3RyZXRjaFwiLCBcImZsZXhTdGFydFwiLCBcImZsZXhFbmRcIiwgXCJjZW50ZXJcIiwgXCJiYXNlbGluZVwiXSksXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLm9uZU9mKFtcImRpdlwiLCBcInNwYW5cIl0pLFxuICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZihbXCJyb3dcIiwgXCJyb3dSZXZlcnNlXCIsIFwiY29sdW1uXCIsIFwiY29sdW1uUmV2ZXJzZVwiXSksXG4gIGd1dHRlclNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJub25lXCIsIFwieHNcIiwgXCJzXCIsIFwibVwiLCBcImxcIiwgXCJ4bFwiXSksXG4gIGp1c3RpZnlDb250ZW50OiBQcm9wVHlwZXMub25lT2YoW1wiZmxleFN0YXJ0XCIsIFwiZmxleEVuZFwiLCBcImNlbnRlclwiLCBcInNwYWNlQmV0d2VlblwiLCBcInNwYWNlQXJvdW5kXCIsIFwic3BhY2VFdmVubHlcIl0pLFxuICByZXNwb25zaXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgd3JhcDogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTtcbkV1aUZsZXhHcm91cC5kaXNwbGF5TmFtZSA9ICdFdWlGbGV4R3JvdXAnOyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJncm93XCIsIFwiY29tcG9uZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgR1JPV19TSVpFUyA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF07XG5leHBvcnQgdmFyIEV1aUZsZXhJdGVtID0gZnVuY3Rpb24gRXVpRmxleEl0ZW0oX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGdyb3cgPSBfcmVmLmdyb3csXG4gICAgICBncm93ID0gX3JlZiRncm93ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRncm93LFxuICAgICAgX3JlZiRjb21wb25lbnQgPSBfcmVmLmNvbXBvbmVudCxcbiAgICAgIENvbXBvbmVudCA9IF9yZWYkY29tcG9uZW50ID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYkY29tcG9uZW50LFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhbGlkYXRlR3Jvd1ZhbHVlKGdyb3cpO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZsZXhJdGVtJywgX2RlZmluZVByb3BlcnR5KHtcbiAgICAnZXVpRmxleEl0ZW0tLWZsZXhHcm93WmVybyc6ICFncm93XG4gIH0sIFwiZXVpRmxleEl0ZW0tLWZsZXhHcm93XCIuY29uY2F0KGdyb3cpLCB0eXBlb2YgZ3JvdyA9PT0gJ251bWJlcicgPyBHUk9XX1NJWkVTLmluZGV4T2YoZ3JvdykgPj0gMCA6IHVuZGVmaW5lZCksIGNsYXNzTmFtZSk7XG4gIHJldHVybiAoLy8gQHRzLWlnbm9yZSBkaWZmaWN1bHQgdG8gdmVyaWZ5IGByZXN0YCBhcHBsaWVzIHRvIGBDb21wb25lbnRgXG4gICAgX19fRW1vdGlvbkpTWChDb21wb25lbnQsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbilcbiAgKTtcbn07XG5FdWlGbGV4SXRlbS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgZ3JvdzogUHJvcFR5cGVzLm9uZU9mKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgdHJ1ZSwgZmFsc2UsIG51bGxdKSxcbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55XG59O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUdyb3dWYWx1ZSh2YWx1ZSkge1xuICB2YXIgdmFsaWRWYWx1ZXMgPSBbbnVsbCwgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZV0uY29uY2F0KEdST1dfU0laRVMpO1xuXG4gIGlmICh2YWxpZFZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9wIGBncm93YCBwYXNzZWQgdG8gYEV1aUZsZXhJdGVtYCBtdXN0IGJlIGEgYm9vbGVhbiBvciBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAsIHJlY2VpdmVkIGBcIi5jb25jYXQodmFsdWUsIFwiYFwiKSk7XG4gIH1cbn0iLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJpY29uXCIsIFwiY2xlYXJcIiwgXCJmdWxsV2lkdGhcIiwgXCJpc0xvYWRpbmdcIiwgXCJpc0Rpc2FibGVkXCIsIFwiY29tcHJlc3NlZFwiLCBcImNsYXNzTmFtZVwiLCBcInByZXBlbmRcIiwgXCJhcHBlbmRcIiwgXCJyZWFkT25seVwiLCBcImlzSW52YWxpZFwiLCBcImlzRHJvcGRvd25cIiwgXCJpbnB1dElkXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBjbG9uZUVsZW1lbnQsIENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9pY29ucyc7XG5pbXBvcnQgeyBFdWlGb3JtTGFiZWwgfSBmcm9tICcuLi9mb3JtX2xhYmVsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgeyBJQ09OX1NJREVTIH0gZnJvbSAnLi9mb3JtX2NvbnRyb2xfbGF5b3V0X2ljb25zJztcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZvcm1Db250cm9sTGF5b3V0LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZvcm1Db250cm9sTGF5b3V0KTtcblxuICBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRm9ybUNvbnRyb2xMYXlvdXQpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUZvcm1Db250cm9sTGF5b3V0LCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGljb24gPSBfdGhpcyRwcm9wcy5pY29uLFxuICAgICAgICAgIGNsZWFyID0gX3RoaXMkcHJvcHMuY2xlYXIsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMuZnVsbFdpZHRoLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzLmlzTG9hZGluZyxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHMuaXNEaXNhYmxlZCxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMuY29tcHJlc3NlZCxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzLnByZXBlbmQsXG4gICAgICAgICAgYXBwZW5kID0gX3RoaXMkcHJvcHMuYXBwZW5kLFxuICAgICAgICAgIHJlYWRPbmx5ID0gX3RoaXMkcHJvcHMucmVhZE9ubHksXG4gICAgICAgICAgaW52YWxpZCA9IF90aGlzJHByb3BzLmlzSW52YWxpZCxcbiAgICAgICAgICBpc0Ryb3Bkb3duID0gX3RoaXMkcHJvcHMuaXNEcm9wZG93bixcbiAgICAgICAgICBpbnB1dElkID0gX3RoaXMkcHJvcHMuaW5wdXRJZCxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0Jywge1xuICAgICAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAgICAgJ2V1aUZvcm1Db250cm9sTGF5b3V0LS1yZWFkT25seSc6IHJlYWRPbmx5LFxuICAgICAgICAnZXVpRm9ybUNvbnRyb2xMYXlvdXQtLWdyb3VwJzogcHJlcGVuZCB8fCBhcHBlbmQsXG4gICAgICAgICdldWlGb3JtQ29udHJvbExheW91dC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZFxuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBwcmVwZW5kTm9kZXMgPSB0aGlzLnJlbmRlclNpZGVOb2RlKCdwcmVwZW5kJywgcHJlcGVuZCwgaW5wdXRJZCk7XG4gICAgICB2YXIgYXBwZW5kTm9kZXMgPSB0aGlzLnJlbmRlclNpZGVOb2RlKCdhcHBlbmQnLCBhcHBlbmQsIGlucHV0SWQpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgIH0sIHJlc3QpLCBwcmVwZW5kTm9kZXMsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRfX2NoaWxkcmVuV3JhcHBlclwiXG4gICAgICB9LCBjaGlsZHJlbiwgX19fRW1vdGlvbkpTWChFdWlGb3JtQ29udHJvbExheW91dEljb25zLCB7XG4gICAgICAgIGljb246IGljb24sXG4gICAgICAgIGNsZWFyOiBjbGVhcixcbiAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgaXNMb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgIGlzSW52YWxpZDogaW52YWxpZCxcbiAgICAgICAgaXNEcm9wZG93bjogIXJlYWRPbmx5ICYmICFpc0Rpc2FibGVkICYmIGlzRHJvcGRvd25cbiAgICAgIH0pKSwgYXBwZW5kTm9kZXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJTaWRlTm9kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJTaWRlTm9kZShzaWRlLCBub2RlcywgaW5wdXRJZCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCFub2Rlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygbm9kZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZvcm1MYWJlbChzaWRlLCBub2RlcywgaW5wdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcHBlbmROb2RlcyA9IFJlYWN0LkNoaWxkcmVuLm1hcChub2RlcywgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgPyBfdGhpcy5jcmVhdGVGb3JtTGFiZWwoc2lkZSwgaXRlbSwgaW5wdXRJZCkgOiBfdGhpcy5jcmVhdGVTaWRlTm9kZShzaWRlLCBpdGVtLCBpbmRleCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhcHBlbmROb2RlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY3JlYXRlRm9ybUxhYmVsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZUZvcm1MYWJlbChzaWRlLCBzdHJpbmcsIGlucHV0SWQpIHtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1MYWJlbCwge1xuICAgICAgICBodG1sRm9yOiBpbnB1dElkLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRfX1wiLmNvbmNhdChzaWRlKVxuICAgICAgfSwgc3RyaW5nKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY3JlYXRlU2lkZU5vZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlU2lkZU5vZGUoc2lkZSwgbm9kZSwga2V5KSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChub2RlLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcImV1aUZvcm1Db250cm9sTGF5b3V0X19cIi5jb25jYXQoc2lkZSksIG5vZGUucHJvcHMuY2xhc3NOYW1lKSxcbiAgICAgICAga2V5OiBrZXlcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGb3JtQ29udHJvbExheW91dDtcbn0oQ29tcG9uZW50KTtcbkV1aUZvcm1Db250cm9sTGF5b3V0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQ3JlYXRlcyBhbiBpbnB1dCBncm91cCB3aXRoIGVsZW1lbnQocykgY29taW5nIGJlZm9yZSBjaGlsZHJlbi5cbiAgICAgICAqIGBzdHJpbmdgIHwgYFJlYWN0RWxlbWVudGAgb3IgYW4gYXJyYXkgb2YgdGhlc2VcbiAgICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYWZ0ZXIgY2hpbGRyZW4uXG4gICAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICAgKi9cbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgaWNvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICAgIHNpZGU6IFByb3BUeXBlcy5hbnksXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG4gICAgcmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICB9KS5pc1JlcXVpcmVkXSksXG4gIGNsZWFyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2l6ZTogUHJvcFR5cGVzLmFueVxuICB9KSxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBDb250cm9scyB0aGUgYWRkaW5nIG9mIGFuZCB2aXNpYmlsaXR5IG9mIGEgZG93biBhcnJvdyBpY29uXG4gICAgICAgKi9cbiAgaXNEcm9wZG93bjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBDb25uZWN0cyB0aGUgcHJlcGVuZCBhbmQgYXBwZW5kIGxhYmVscyB0byB0aGUgaW5wdXRcbiAgICAgICAqL1xuICBpbnB1dElkOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJyZWZcIiwgXCJzaWRlXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIgfSBmcm9tICcuLi8uLi9sb2FkaW5nJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24gfSBmcm9tICcuL2Zvcm1fY29udHJvbF9sYXlvdXRfY2xlYXJfYnV0dG9uJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiB9IGZyb20gJy4vZm9ybV9jb250cm9sX2xheW91dF9jdXN0b21faWNvbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBJQ09OX1NJREVTID0gWydsZWZ0JywgJ3JpZ2h0J107XG5cbmZ1bmN0aW9uIGlzSWNvblNoYXBlKGljb24pIHtcbiAgcmV0dXJuICEhaWNvbiAmJiBpY29uLmhhc093blByb3BlcnR5KCd0eXBlJyk7XG59XG5cbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucywgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGb3JtQ29udHJvbExheW91dEljb25zKTtcblxuICBmdW5jdGlvbiBFdWlGb3JtQ29udHJvbExheW91dEljb25zKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGb3JtQ29udHJvbExheW91dEljb25zKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlGb3JtQ29udHJvbExheW91dEljb25zLCBbe1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpY29uID0gX3RoaXMkcHJvcHMuaWNvbixcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wcy5pc0ludmFsaWQsXG4gICAgICAgICAgaXNEcm9wZG93biA9IF90aGlzJHByb3BzLmlzRHJvcGRvd247XG4gICAgICB2YXIgaWNvblNpZGUgPSBpc0ljb25TaGFwZShpY29uKSAmJiBpY29uLnNpZGUgPyBpY29uLnNpZGUgOiAnbGVmdCc7XG4gICAgICB2YXIgY3VzdG9tSWNvbiA9IHRoaXMucmVuZGVyQ3VzdG9tSWNvbigpO1xuICAgICAgdmFyIGxvYWRpbmdTcGlubmVyID0gdGhpcy5yZW5kZXJMb2FkaW5nU3Bpbm5lcigpO1xuICAgICAgdmFyIGNsZWFyQnV0dG9uID0gdGhpcy5yZW5kZXJDbGVhckJ1dHRvbigpO1xuICAgICAgdmFyIGludmFsaWRJY29uID0gdGhpcy5yZW5kZXJJbnZhbGlkSWNvbigpO1xuICAgICAgdmFyIGRyb3Bkb3duSWNvbiA9IHRoaXMucmVuZGVyRHJvcGRvd25JY29uKCk7XG4gICAgICB2YXIgbGVmdEljb25zO1xuXG4gICAgICBpZiAoY3VzdG9tSWNvbiAmJiBpY29uU2lkZSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGxlZnRJY29ucyA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEljb25zXCJcbiAgICAgICAgfSwgY3VzdG9tSWNvbik7XG4gICAgICB9XG5cbiAgICAgIHZhciByaWdodEljb25zOyAvLyBJZiB0aGUgaWNvbiBpcyBvbiB0aGUgcmlnaHQsIGl0IHNob3VsZCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIGNsZWFyIGJ1dHRvbiBpbiB0aGUgRE9NLlxuXG4gICAgICBpZiAoY2xlYXJCdXR0b24gfHwgbG9hZGluZ1NwaW5uZXIgfHwgaXNJbnZhbGlkIHx8IGlzRHJvcGRvd24gfHwgY3VzdG9tSWNvbiAmJiBpY29uU2lkZSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICByaWdodEljb25zID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMgZXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucy0tcmlnaHRcIlxuICAgICAgICB9LCBjbGVhckJ1dHRvbiwgbG9hZGluZ1NwaW5uZXIsIGludmFsaWRJY29uLCBpY29uU2lkZSA9PT0gJ3JpZ2h0JyA/IGN1c3RvbUljb24gOiB1bmRlZmluZWQsIGRyb3Bkb3duSWNvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBsZWZ0SWNvbnMsIHJpZ2h0SWNvbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDdXN0b21JY29uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckN1c3RvbUljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpY29uID0gX3RoaXMkcHJvcHMyLmljb24sXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMi5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWljb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vIE5vcm1hbGl6ZSB0aGUgaWNvbiB0byBhbiBvYmplY3QgaWYgaXQncyBhIHN0cmluZy5cblxuXG4gICAgICB2YXIgaWNvblByb3BzID0gaXNJY29uU2hhcGUoaWNvbikgPyBpY29uIDoge1xuICAgICAgICB0eXBlOiBpY29uXG4gICAgICB9O1xuXG4gICAgICB2YXIgaWNvblJlZiA9IGljb25Qcm9wcy5yZWYsXG4gICAgICAgICAgc2lkZSA9IGljb25Qcm9wcy5zaWRlLFxuICAgICAgICAgIGljb25SZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKGljb25Qcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLCBfZXh0ZW5kcyh7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbScsXG4gICAgICAgIGljb25SZWY6IGljb25SZWZcbiAgICAgIH0sIGljb25SZXN0KSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckRyb3Bkb3duSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJEcm9wZG93bkljb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0Ryb3Bkb3duID0gX3RoaXMkcHJvcHMzLmlzRHJvcGRvd24sXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMy5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWlzRHJvcGRvd24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbiwge1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICB0eXBlOiBcImFycm93RG93blwiXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyTG9hZGluZ1NwaW5uZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyTG9hZGluZ1NwaW5uZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczQuaXNMb2FkaW5nLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczQuY29tcHJlc3NlZDtcblxuICAgICAgaWYgKCFpc0xvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgIHNpemU6IGNvbXByZXNzZWQgPyAncycgOiAnbSdcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJDbGVhckJ1dHRvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJDbGVhckJ1dHRvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsZWFyID0gX3RoaXMkcHJvcHM1LmNsZWFyLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczUuY29tcHJlc3NlZDtcblxuICAgICAgaWYgKCFjbGVhcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiwgX2V4dGVuZHMoe1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nXG4gICAgICB9LCBjbGVhcikpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJbnZhbGlkSWNvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJbnZhbGlkSWNvbigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGlzSW52YWxpZCA9IF90aGlzJHByb3BzNi5pc0ludmFsaWQsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzNi5jb21wcmVzc2VkO1xuXG4gICAgICBpZiAoIWlzSW52YWxpZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICBzaXplOiBjb21wcmVzc2VkID8gJ3MnIDogJ20nLFxuICAgICAgICBjb2xvcjogXCJkYW5nZXJcIixcbiAgICAgICAgdHlwZTogXCJhbGVydFwiXG4gICAgICB9KTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpRm9ybUNvbnRyb2xMYXlvdXRJY29ucztcbn0oQ29tcG9uZW50KTtcbkV1aUZvcm1Db250cm9sTGF5b3V0SWNvbnMucHJvcFR5cGVzID0ge1xuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgc2lkZTogUHJvcFR5cGVzLmFueSxcbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWRdKSxcbiAgICByZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgY2xlYXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzaXplOiBQcm9wVHlwZXMuYW55XG4gIH0pLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0Ryb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJvbkNsaWNrXCIsIFwic2l6ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgczogJ2V1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24tLXNtYWxsJyxcbiAgbTogbnVsbFxufTtcbmV4cG9ydCB2YXIgU0laRVMgPSBrZXlzT2Yoc2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24oX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gJ20nIDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbicsIHNpemVUb0NsYXNzTmFtZU1hcFtzaXplXSwgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q2xlYXJCdXR0b24ubGFiZWxcIixcbiAgICBkZWZhdWx0OiBcIkNsZWFyIGlucHV0XCJcbiAgfSwgZnVuY3Rpb24gKGxhYmVsKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICBcImFyaWEtbGFiZWxcIjogbGFiZWxcbiAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbl9faWNvblwiLFxuICAgICAgdHlwZTogXCJjcm9zc1wiXG4gICAgfSkpO1xuICB9KTtcbn07XG5FdWlGb3JtQ29udHJvbExheW91dENsZWFyQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwib25DbGlja1wiLCBcInR5cGVcIiwgXCJpY29uUmVmXCIsIFwic2l6ZVwiLCBcImNvbG9yXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uLy4uL2ljb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uID0gZnVuY3Rpb24gRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgb25DbGljayA9IF9yZWYub25DbGljayxcbiAgICAgIHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICBpY29uUmVmID0gX3JlZi5pY29uUmVmLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbicsIGNsYXNzTmFtZSwge1xuICAgICdldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb24tLWNsaWNrYWJsZSc6IG9uQ2xpY2tcbiAgfSk7XG5cbiAgaWYgKG9uQ2xpY2spIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCBfZXh0ZW5kcyh7XG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgIHJlZjogaWNvblJlZlxuICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgIGNsYXNzTmFtZTogXCJldWlGb3JtQ29udHJvbExheW91dEN1c3RvbUljb25fX2ljb25cIixcbiAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICBzaXplOiBzaXplLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGNvbG9yOiBjb2xvclxuICAgIH0pKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHJlZjogaWNvblJlZlxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Db250cm9sTGF5b3V0Q3VzdG9tSWNvbl9faWNvblwiLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgc2l6ZTogc2l6ZSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbG9yOiBjb2xvclxuICB9KSk7XG59O1xuRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuICBzaXplOiBQcm9wVHlwZXMuYW55LFxuICBpY29uUmVmOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcInR5cGVcIiwgXCJpc0ZvY3VzZWRcIiwgXCJpc0ludmFsaWRcIiwgXCJpc0Rpc2FibGVkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlGb3JtTGFiZWwgPSBmdW5jdGlvbiBFdWlGb3JtTGFiZWwoX3JlZikge1xuICB2YXIgX3JlZiR0eXBlID0gX3JlZi50eXBlLFxuICAgICAgdHlwZSA9IF9yZWYkdHlwZSA9PT0gdm9pZCAwID8gJ2xhYmVsJyA6IF9yZWYkdHlwZSxcbiAgICAgIGlzRm9jdXNlZCA9IF9yZWYuaXNGb2N1c2VkLFxuICAgICAgaXNJbnZhbGlkID0gX3JlZi5pc0ludmFsaWQsXG4gICAgICBpc0Rpc2FibGVkID0gX3JlZi5pc0Rpc2FibGVkLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGb3JtTGFiZWwnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpRm9ybUxhYmVsLWlzRm9jdXNlZCc6IGlzRm9jdXNlZCxcbiAgICAnZXVpRm9ybUxhYmVsLWlzSW52YWxpZCc6IGlzSW52YWxpZCxcbiAgICAnZXVpRm9ybUxhYmVsLWlzRGlzYWJsZWQnOiBpc0Rpc2FibGVkXG4gIH0pO1xuXG4gIGlmICh0eXBlID09PSAnbGVnZW5kJykge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGVnZW5kXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsYWJlbFwiLCBfZXh0ZW5kcyh7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9XG59O1xuRXVpRm9ybUxhYmVsLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogRGVmYXVsdCB0eXBlIGlzIGEgYGxhYmVsYCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBgbGVnZW5kYFxuICAgICAqIGlmIHVzaW5nIGluc2lkZSBhIGBmaWVsZHNldGAuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogRGVmYXVsdCB0eXBlIGlzIGEgYGxhYmVsYCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYSBgbGVnZW5kYFxuICAgICAqIGlmIHVzaW5nIGluc2lkZSBhIGBmaWVsZHNldGAuXG4gICAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiXSksIFByb3BUeXBlcy5vbmVPZihbXCJsYWJlbFwiLCBcImxlZ2VuZFwiXSldKSwgUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImxlZ2VuZFwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImxhYmVsXCIsIFwibGVnZW5kXCJdKV0pXSksXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ2hhbmdlcyBgY3Vyc29yYCB0byBgZGVmYXVsdGAuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQ2hhbmdlcyBgY3Vyc29yYCB0byBgZGVmYXVsdGAuXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5cbmZ1bmN0aW9uIGlzTXV0YWJsZVJlZihyZWYpIHtcbiAgcmV0dXJuIHJlZiAhPSBudWxsICYmIHJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpO1xufVxuXG5leHBvcnQgdmFyIEV1aVZhbGlkYXRhYmxlQ29udHJvbCA9IGZ1bmN0aW9uIEV1aVZhbGlkYXRhYmxlQ29udHJvbChfcmVmKSB7XG4gIHZhciBpc0ludmFsaWQgPSBfcmVmLmlzSW52YWxpZCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIGNvbnRyb2wgPSB1c2VSZWYobnVsbCk7XG4gIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRSZWYgPSBjaGlsZC5yZWY7XG4gIHZhciByZXBsYWNlZFJlZiA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgY29udHJvbC5jdXJyZW50ID0gZWxlbWVudDsgLy8gQ2FsbCB0aGUgb3JpZ2luYWwgcmVmLCBpZiBhbnlcblxuICAgIGlmICh0eXBlb2YgY2hpbGRSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNoaWxkUmVmKGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAoaXNNdXRhYmxlUmVmKGNoaWxkUmVmKSkge1xuICAgICAgY2hpbGRSZWYuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICB9LCBbY2hpbGRSZWZdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29udHJvbC5jdXJyZW50ID09PSBudWxsIHx8IHR5cGVvZiBjb250cm9sLmN1cnJlbnQuc2V0Q3VzdG9tVmFsaWRpdHkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjsgLy8ganNkb20gZG9lc24ndCBwb2x5ZmlsbCB0aGlzIGZvciB0aGUgc2VydmVyLXNpZGVcbiAgICB9XG5cbiAgICBpZiAoaXNJbnZhbGlkKSB7XG4gICAgICBjb250cm9sLmN1cnJlbnQuc2V0Q3VzdG9tVmFsaWRpdHkoJ0ludmFsaWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbC5jdXJyZW50LnNldEN1c3RvbVZhbGlkaXR5KCcnKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZCwge1xuICAgIHJlZjogcmVwbGFjZWRSZWYsXG4gICAgJ2FyaWEtaW52YWxpZCc6IGlzSW52YWxpZFxuICB9KTtcbn07XG5FdWlWYWxpZGF0YWJsZUNvbnRyb2wucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzSW52YWxpZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVhY3ROb2RlIHRvIHJlbmRlciBhcyB0aGlzIGNvbXBvbmVudCdzIGNvbnRlbnRcbiAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcmVmOiBQcm9wVHlwZXMuYW55XG4gIH0pLmlzUmVxdWlyZWRcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5cbi8qKlxuICogVGhlIGBnZXRGb3JtQ29udHJvbENsYXNzTmFtZUZvckljb25Db3VudGAgZnVuY3Rpb24gaGVscHMgc2V0dXAgdGhlIGNsYXNzTmFtZSBhcHBlbmR1bVxuICogZGVwZW5kaW5nIG9uIHRoZSBmb3JtIGNvbnRyb2wncyBjdXJyZW50IHNldHRpbmdzL3N0YXRlLlxuICpcbiAqIEBwYXJhbSBpY29uIHtib29sZWFufSBEb2VzIGl0IGNvbnRhaW4gYSBzdGF0aWMgaWNvbiBsaWtlIGFycm93RG93blxuICogQHBhcmFtIGNsZWFyIHtib29sZWFufSBJcyBpdCBjdXJyZW50bHkgY2xlYXJhYmxlXG4gKiBAcGFyYW0gaXNMb2FkaW5nIHtib29sZWFufSBJcyBpcyBjdXJyZW50bHkgbG9hZGluZ1xuICogQHBhcmFtIGlzSW52YWxpZCB7Ym9vbGVhbn0gSXQgaXMgY3VycmVudGx5IGludmFsaWRcbiAqIEBwYXJhbSBpc0Ryb3Bkb3duIHtib29sZWFufSBJdCBpcyBhcyBkcm9wZG93blxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gUmV0dXJucyB0aGUgc3RyaW5nIHRvIGFwcGVuZCB0byB0aGUgYmFzZSBjbGFzc05hbWUgb2YgdGhlIGZvcm0gY29udHJvbDsgb3IgYHVuZGVmaW5lZGAgaWYgYWxsIGV2YWx1YXRlIHRvIGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtQ29udHJvbENsYXNzTmFtZUZvckljb25Db3VudChfcmVmKSB7XG4gIHZhciBpY29uID0gX3JlZi5pY29uLFxuICAgICAgY2xlYXIgPSBfcmVmLmNsZWFyLFxuICAgICAgaXNMb2FkaW5nID0gX3JlZi5pc0xvYWRpbmcsXG4gICAgICBpc0ludmFsaWQgPSBfcmVmLmlzSW52YWxpZCxcbiAgICAgIGlzRHJvcGRvd24gPSBfcmVmLmlzRHJvcGRvd247XG4gIHZhciBudW1JY29ucyA9IFtpY29uLCBjbGVhciwgaXNJbnZhbGlkLCBpc0xvYWRpbmcsIGlzRHJvcGRvd25dLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBpdGVtID09PSB0cnVlO1xuICB9KS5sZW5ndGg7IC8vIFRoaXMgY2xhc3NOYW1lIGlzIGFsc28gc3BlY2lmaWNhbGx5IHVzZWQgaW4gYHNyYy9nbG9iYWxfc3R5bGluZy9taXhpbnMvX2Zvcm0uc2Nzc2BcblxuICByZXR1cm4gbnVtSWNvbnMgPiAwID8gXCJldWlGb3JtQ29udHJvbExheW91dC0tXCIuY29uY2F0KG51bUljb25zLCBcImljb25zXCIpIDogdW5kZWZpbmVkO1xufSIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJpZFwiLCBcIm5hbWVcIiwgXCJwbGFjZWhvbGRlclwiLCBcImlzSW52YWxpZFwiLCBcImZ1bGxXaWR0aFwiLCBcImlzTG9hZGluZ1wiLCBcImlucHV0UmVmXCIsIFwiaW5jcmVtZW50YWxcIiwgXCJjb21wcmVzc2VkXCIsIFwib25TZWFyY2hcIiwgXCJpc0NsZWFyYWJsZVwiLCBcImFwcGVuZFwiLCBcInByZXBlbmRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgQnJvd3NlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Jyb3dzZXInO1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUZvcm1Db250cm9sTGF5b3V0IH0gZnJvbSAnLi4vZm9ybV9jb250cm9sX2xheW91dCc7XG5pbXBvcnQgeyBFdWlWYWxpZGF0YWJsZUNvbnRyb2wgfSBmcm9tICcuLi92YWxpZGF0YWJsZV9jb250cm9sJztcbmltcG9ydCB7IGdldEZvcm1Db250cm9sQ2xhc3NOYW1lRm9ySWNvbkNvdW50IH0gZnJvbSAnLi4vZm9ybV9jb250cm9sX2xheW91dC9fbnVtX2ljb25zJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaXNTZWFyY2hTdXBwb3J0ZWQgPSBmYWxzZTtcbmV4cG9ydCB2YXIgRXVpRmllbGRTZWFyY2ggPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUZpZWxkU2VhcmNoLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZpZWxkU2VhcmNoKTtcblxuICBmdW5jdGlvbiBFdWlGaWVsZFNlYXJjaCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpRmllbGRTZWFyY2gpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICB2YWx1ZTogX3RoaXMucHJvcHMudmFsdWUgfHwgU3RyaW5nKF90aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSB8fCAnJylcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnB1dEVsZW1lbnRcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYW51cHNcIiwgW10pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xlYXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gY2xlYXIgdGhlIGZpZWxkJ3MgdmFsdWVcbiAgICAgIC8vIDEuIFJlYWN0IGRvZXNuJ3QgbGlzdGVuIGZvciBgY2hhbmdlYCBldmVudHMsIGluc3RlYWQgaXQgbWFwcyBgaW5wdXRgIGV2ZW50cyB0byBgY2hhbmdlYFxuICAgICAgLy8gMi4gUmVhY3Qgb25seSBmaXJlcyB0aGUgbWFwcGVkIGBjaGFuZ2VgIGV2ZW50IGlmIHRoZSBlbGVtZW50J3MgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAgIC8vIDMuIEFuIGlucHV0J3MgdmFsdWUgaXMsIGluIGFkZGl0aW9uIHRvIG90aGVyIG1ldGhvZHMsIHRyYWNrZWQgYnkgaW50ZXJjZXB0aW5nIGVsZW1lbnQudmFsdWUgPSAnLi4uJ1xuICAgICAgLy9cbiAgICAgIC8vIFNvIHdlIGhhdmUgdG8gZ28gYmVsb3cgdGhlIGVsZW1lbnQncyB2YWx1ZSBzZXR0ZXIgdG8gYXZvaWQgUmVhY3QgaW50ZXJjZXB0aW5nIGl0LFxuICAgICAgLy8gb25seSB0aGVuIHdpbGwgUmVhY3QgdHJlYXQgdGhlIHZhbHVlIGFzIGRpZmZlcmVudCBhbmQgZmlyZSBpdHMgYGNoYW5nZWAgZXZlbnRcbiAgICAgIC8vXG4gICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMzg5MjU0Ny93aGF0LWlzLXRoZS1iZXN0LXdheS10by10cmlnZ2VyLW9uY2hhbmdlLWV2ZW50LWluLXJlYWN0LWpzXG4gICAgICB2YXIgbmF0aXZlSW5wdXRWYWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsICd2YWx1ZScpO1xuICAgICAgdmFyIG5hdGl2ZUlucHV0VmFsdWVTZXR0ZXIgPSBuYXRpdmVJbnB1dFZhbHVlID8gbmF0aXZlSW5wdXRWYWx1ZS5zZXQgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuYXRpdmVJbnB1dFZhbHVlU2V0dGVyKSB7XG4gICAgICAgIG5hdGl2ZUlucHV0VmFsdWVTZXR0ZXIuY2FsbChfdGhpcy5pbnB1dEVsZW1lbnQsICcnKTtcbiAgICAgIH0gLy8gZGlzcGF0Y2ggaW5wdXQgZXZlbnQsIHdpdGggSUUxMSBzdXBwb3J0L2ZhbGxiYWNrXG5cblxuICAgICAgdmFyIGV2ZW50O1xuXG4gICAgICBpZiAoJ0V2ZW50JyBpbiB3aW5kb3cgJiYgdHlwZW9mIEV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KCdpbnB1dCcsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSUUxMVxuICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgICAgICBldmVudC5pbml0RXZlbnQoJ2lucHV0JywgdHJ1ZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3RoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIF90aGlzLmlucHV0RWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgfSAvLyBzZXQgZm9jdXMgb24gdGhlIHNlYXJjaCBmaWVsZFxuXG5cbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtZW50LmZvY3VzKCk7XG5cbiAgICAgICAgX3RoaXMuaW5wdXRFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnKSk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9KTtcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgaW5jcmVtZW50YWwgPSBfdGhpcyRwcm9wcy5pbmNyZW1lbnRhbCxcbiAgICAgICAgICBvblNlYXJjaCA9IF90aGlzJHByb3BzLm9uU2VhcmNoO1xuXG4gICAgICBpZiAob25TZWFyY2ggJiYgaW5jcmVtZW50YWwpIHtcbiAgICAgICAgb25TZWFyY2goJycpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldFJlZlwiLCBmdW5jdGlvbiAoaW5wdXRFbGVtZW50KSB7XG4gICAgICBfdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW1lbnQ7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5pbnB1dFJlZikge1xuICAgICAgICBfdGhpcy5wcm9wcy5pbnB1dFJlZihpbnB1dEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uS2V5VXBcIiwgZnVuY3Rpb24gKGV2ZW50LCBpbmNyZW1lbnRhbCwgb25TZWFyY2gpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbktleVVwKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uS2V5VXAoZXZlbnQpO1xuXG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvblNlYXJjaCAmJiAoZXZlbnQua2V5ICE9PSBrZXlzLkVOVEVSICYmIGluY3JlbWVudGFsIHx8IGV2ZW50LmtleSA9PT0ga2V5cy5FTlRFUiAmJiAhaXNTZWFyY2hTdXBwb3J0ZWQpKSB7XG4gICAgICAgIG9uU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRmllbGRTZWFyY2gsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQpIHJldHVybjtcbiAgICAgIGlzU2VhcmNoU3VwcG9ydGVkID0gQnJvd3Nlci5pc0V2ZW50U3VwcG9ydGVkKCdzZWFyY2gnLCB0aGlzLmlucHV0RWxlbWVudCk7XG5cbiAgICAgIGlmIChpc1NlYXJjaFN1cHBvcnRlZCkge1xuICAgICAgICB2YXIgb25TZWFyY2ggPSBmdW5jdGlvbiBvblNlYXJjaChldmVudCkge1xuICAgICAgICAgIGlmIChfdGhpczIucHJvcHMub25TZWFyY2gpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIF90aGlzMi5wcm9wcy5vblNlYXJjaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWFyY2gnLCBvblNlYXJjaCk7XG4gICAgICAgIHRoaXMuY2xlYW51cHMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFfdGhpczIuaW5wdXRFbGVtZW50KSByZXR1cm47XG5cbiAgICAgICAgICBfdGhpczIuaW5wdXRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NlYXJjaCcsIG9uU2VhcmNoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LnZhbHVlICE9PSBfdGhpczIuc3RhdGUudmFsdWUpIHtcbiAgICAgICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKF90aGlzMi5wcm9wcy5vblNlYXJjaCkge1xuICAgICAgICAgICAgX3RoaXMyLnByb3BzLm9uU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNoYW5nZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5jbGVhbnVwcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGVhbnVwKSB7XG4gICAgICAgIHJldHVybiBjbGVhbnVwKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMyLmlkLFxuICAgICAgICAgIG5hbWUgPSBfdGhpcyRwcm9wczIubmFtZSxcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzMi5wbGFjZWhvbGRlcixcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wczIuaXNJbnZhbGlkLFxuICAgICAgICAgIGZ1bGxXaWR0aCA9IF90aGlzJHByb3BzMi5mdWxsV2lkdGgsXG4gICAgICAgICAgaXNMb2FkaW5nID0gX3RoaXMkcHJvcHMyLmlzTG9hZGluZyxcbiAgICAgICAgICBpbnB1dFJlZiA9IF90aGlzJHByb3BzMi5pbnB1dFJlZixcbiAgICAgICAgICBpbmNyZW1lbnRhbCA9IF90aGlzJHByb3BzMi5pbmNyZW1lbnRhbCxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQsXG4gICAgICAgICAgb25TZWFyY2ggPSBfdGhpcyRwcm9wczIub25TZWFyY2gsXG4gICAgICAgICAgX2lzQ2xlYXJhYmxlID0gX3RoaXMkcHJvcHMyLmlzQ2xlYXJhYmxlLFxuICAgICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzMi5hcHBlbmQsXG4gICAgICAgICAgcHJlcGVuZCA9IF90aGlzJHByb3BzMi5wcmVwZW5kLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLnZhbHVlICE9PSAnc3RyaW5nJykgdmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlOyAvLyBTZXQgYWN0dWFsIHZhbHVlIG9mIGlzQ2xlYXJhYmxlIGlmIHZhbHVlIGV4aXN0cyBhcyB3ZWxsXG5cbiAgICAgIHZhciBpc0NsZWFyYWJsZSA9IEJvb2xlYW4oX2lzQ2xlYXJhYmxlICYmIHZhbHVlICYmICFyZXN0LnJlYWRPbmx5ICYmICFyZXN0LmRpc2FibGVkKTtcbiAgICAgIHZhciBudW1JY29uc0NsYXNzID0gZ2V0Rm9ybUNvbnRyb2xDbGFzc05hbWVGb3JJY29uQ291bnQoe1xuICAgICAgICBjbGVhcjogaXNDbGVhcmFibGUsXG4gICAgICAgIGlzSW52YWxpZDogaXNJbnZhbGlkLFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ1xuICAgICAgfSk7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZpZWxkU2VhcmNoJywgbnVtSWNvbnNDbGFzcywge1xuICAgICAgICAnZXVpRmllbGRTZWFyY2gtLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAgICAgJ2V1aUZpZWxkU2VhcmNoLS1pbkdyb3VwJzogcHJlcGVuZCB8fCBhcHBlbmQsXG4gICAgICAgICdldWlGaWVsZFNlYXJjaC1pc0xvYWRpbmcnOiBpc0xvYWRpbmcsXG4gICAgICAgICdldWlGaWVsZFNlYXJjaC1pc0NsZWFyYWJsZSc6IGlzQ2xlYXJhYmxlLFxuICAgICAgICAnZXVpRmllbGRTZWFyY2gtaXNJbnZhbGlkJzogaXNJbnZhbGlkXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUNvbnRyb2xMYXlvdXQsIHtcbiAgICAgICAgaWNvbjogXCJzZWFyY2hcIixcbiAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZCxcbiAgICAgICAgY2xlYXI6IGlzQ2xlYXJhYmxlID8ge1xuICAgICAgICAgIG9uQ2xpY2s6IHRoaXMub25DbGVhcixcbiAgICAgICAgICAnZGF0YS10ZXN0LXN1YmonOiAnY2xlYXJTZWFyY2hCdXR0b24nXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXG4gICAgICAgIGFwcGVuZDogYXBwZW5kLFxuICAgICAgICBwcmVwZW5kOiBwcmVwZW5kXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVZhbGlkYXRhYmxlQ29udHJvbCwge1xuICAgICAgICBpc0ludmFsaWQ6IGlzSW52YWxpZFxuICAgICAgfSwgX19fRW1vdGlvbkpTWChcImlucHV0XCIsIF9leHRlbmRzKHtcbiAgICAgICAgdHlwZTogXCJzZWFyY2hcIixcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgb25LZXlVcDogZnVuY3Rpb24gb25LZXlVcChlKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMy5vbktleVVwKGUsIGluY3JlbWVudGFsLCBvblNlYXJjaCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZjogdGhpcy5zZXRSZWZcbiAgICAgIH0sIHJlc3QpKSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlGaWVsZFNlYXJjaDtcbn0oQ29tcG9uZW50KTtcblxuX2RlZmluZVByb3BlcnR5KEV1aUZpZWxkU2VhcmNoLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGZ1bGxXaWR0aDogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGluY3JlbWVudGFsOiBmYWxzZSxcbiAgY29tcHJlc3NlZDogZmFsc2UsXG4gIGlzQ2xlYXJhYmxlOiB0cnVlXG59KTtcblxuRXVpRmllbGRTZWFyY2gucHJvcFR5cGVzID0ge1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHByZXNzZXMgW0VudGVyXSBPUiBvbiBjaGFuZ2UgaWYgdGhlIGluY3JlbWVudGFsIHByb3AgaXMgYHRydWVgLlxuICAgICAqIElmIHlvdSBkb24ndCBuZWVkIHRoZSBvbltFbnRlcl0gZnVuY3Rpb25hbGl0eSwgcHJlZmVyIHVzaW5nIG9uQ2hhbmdlXG4gICAgICovXG4gIG9uU2VhcmNoOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCB0aGUgc2VhcmNoIHdpbGwgYmUgZXhlY3V0ZWQgKHRoYXQgaXMsIHRoZSBgb25TZWFyY2hgIHdpbGwgYmUgY2FsbGVkKSBhcyB0aGVcbiAgICAgKiB1c2VyIHR5cGVzLlxuICAgICAqL1xuICBpbmNyZW1lbnRhbDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogd2hlbiBgdHJ1ZWAgY3JlYXRlcyBhIHNob3J0ZXIgaGVpZ2h0IGlucHV0XG4gICAgICovXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpbnB1dFJlZjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogU2hvd3MgYSBidXR0b24gdGhhdCBxdWlja2x5IGNsZWFycyBhbnkgaW5wdXRcbiAgICAgKi9cbiAgaXNDbGVhcmFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgaW5wdXRcbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGlucHV0IGdyb3VwIHdpdGggZWxlbWVudChzKSBjb21pbmcgYWZ0ZXIgaW5wdXQuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuLy8gV2UgZG9uJ3Qgbm9ybWFsbHkgdXNlICdJJyBwcmVmaXhlcywgdGhpcyBmaWxlIGlzIGFuIGV4Y2VwdGlvblxudmFyIEJyb3dzZXJJbXBsID0ge1xuICBpc0V2ZW50U3VwcG9ydGVkOiBmdW5jdGlvbiBpc0V2ZW50U3VwcG9ydGVkKG5hbWUsIGVsZW1lbnQpIHtcbiAgICByZXR1cm4gXCJvblwiLmNvbmNhdChuYW1lKSBpbiBlbGVtZW50O1xuICB9XG59O1xuZXhwb3J0IHZhciBCcm93c2VyID0gT2JqZWN0LmZyZWV6ZShCcm93c2VySW1wbCk7IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1FcnJvclRleHQgPSBmdW5jdGlvbiBFdWlGb3JtRXJyb3JUZXh0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybUVycm9yVGV4dCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aUZvcm1FcnJvclRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUZvcm1IZWxwVGV4dCA9IGZ1bmN0aW9uIEV1aUZvcm1IZWxwVGV4dChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1IZWxwVGV4dCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlGb3JtSGVscFRleHQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiaGVscFRleHRcIiwgXCJpc0ludmFsaWRcIiwgXCJlcnJvclwiLCBcImxhYmVsXCIsIFwibGFiZWxUeXBlXCIsIFwibGFiZWxBcHBlbmRcIiwgXCJoYXNFbXB0eUxhYmVsU3BhY2VcIiwgXCJmdWxsV2lkdGhcIiwgXCJjbGFzc05hbWVcIiwgXCJkZXNjcmliZWRCeUlkc1wiLCBcImRpc3BsYXlcIiwgXCJoYXNDaGlsZExhYmVsXCIsIFwiaWRcIiwgXCJpc0Rpc2FibGVkXCJdO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgY2xvbmVFbGVtZW50LCBDb21wb25lbnQsIENoaWxkcmVuIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb2JqZWN0cyc7XG5pbXBvcnQgeyBFdWlGb3JtSGVscFRleHQgfSBmcm9tICcuLi9mb3JtX2hlbHBfdGV4dCc7XG5pbXBvcnQgeyBFdWlGb3JtRXJyb3JUZXh0IH0gZnJvbSAnLi4vZm9ybV9lcnJvcl90ZXh0JztcbmltcG9ydCB7IEV1aUZvcm1MYWJlbCB9IGZyb20gJy4uL2Zvcm1fbGFiZWwnO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIGRpc3BsYXlUb0NsYXNzTmFtZU1hcCA9IHtcbiAgcm93OiBudWxsLFxuICByb3dDb21wcmVzc2VkOiAnZXVpRm9ybVJvdy0tY29tcHJlc3NlZCcsXG4gIGNvbHVtbkNvbXByZXNzZWQ6ICdldWlGb3JtUm93LS1jb21wcmVzc2VkIGV1aUZvcm1Sb3ctLWhvcml6b250YWwnLFxuICBjZW50ZXI6IG51bGwsXG4gIGNlbnRlckNvbXByZXNzZWQ6ICdldWlGb3JtUm93LS1jb21wcmVzc2VkJyxcbiAgY29sdW1uQ29tcHJlc3NlZFN3aXRjaDogJ2V1aUZvcm1Sb3ctLWNvbXByZXNzZWQgZXVpRm9ybVJvdy0taG9yaXpvbnRhbCBldWlGb3JtUm93LS1oYXNTd2l0Y2gnXG59O1xuZXhwb3J0IHZhciBESVNQTEFZUyA9IGtleXNPZihkaXNwbGF5VG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlGb3JtUm93ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlGb3JtUm93LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUZvcm1Sb3cpO1xuXG4gIGZ1bmN0aW9uIEV1aUZvcm1Sb3coKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUZvcm1Sb3cpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF9hcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgX2FyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoX2FyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaWQ6IF90aGlzLnByb3BzLmlkIHx8IGh0bWxJZEdlbmVyYXRvcigpKClcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERvaW5nIHRoaXMgdG8gYWxsb3cgb25Gb2N1cyB0byBiZSBjYWxsZWQgY29ycmVjdGx5IGZyb20gdGhlIGNoaWxkIGlucHV0IGVsZW1lbnQgYXMgdGhpcyBjb21wb25lbnQgb3ZlcnJpZGVzIGl0XG4gICAgICB2YXIgb25DaGlsZEZvY3VzID0gZ2V0KF90aGlzLnByb3BzLCAnY2hpbGRyZW4ucHJvcHMub25Gb2N1cycpO1xuXG4gICAgICBpZiAob25DaGlsZEZvY3VzKSB7XG4gICAgICAgIG9uQ2hpbGRGb2N1cy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBpc0ZvY3VzZWQgPSBfcmVmLmlzRm9jdXNlZDtcblxuICAgICAgICBpZiAoIWlzRm9jdXNlZCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc0ZvY3VzZWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkJsdXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gRG9pbmcgdGhpcyB0byBhbGxvdyBvbkJsdXIgdG8gYmUgY2FsbGVkIGNvcnJlY3RseSBmcm9tIHRoZSBjaGlsZCBpbnB1dCBlbGVtZW50IGFzIHRoaXMgY29tcG9uZW50IG92ZXJyaWRlcyBpdFxuICAgICAgdmFyIG9uQ2hpbGRCbHVyID0gZ2V0KF90aGlzLnByb3BzLCAnY2hpbGRyZW4ucHJvcHMub25CbHVyJyk7XG5cbiAgICAgIGlmIChvbkNoaWxkQmx1cikge1xuICAgICAgICBvbkNoaWxkQmx1ci5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpRm9ybVJvdywgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfcmVmMiwgX2NoaWxkJHByb3BzJGRpc2FibGVkO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgaGVscFRleHQgPSBfdGhpcyRwcm9wcy5oZWxwVGV4dCxcbiAgICAgICAgICBpc0ludmFsaWQgPSBfdGhpcyRwcm9wcy5pc0ludmFsaWQsXG4gICAgICAgICAgZXJyb3IgPSBfdGhpcyRwcm9wcy5lcnJvcixcbiAgICAgICAgICBsYWJlbCA9IF90aGlzJHByb3BzLmxhYmVsLFxuICAgICAgICAgIGxhYmVsVHlwZSA9IF90aGlzJHByb3BzLmxhYmVsVHlwZSxcbiAgICAgICAgICBsYWJlbEFwcGVuZCA9IF90aGlzJHByb3BzLmxhYmVsQXBwZW5kLFxuICAgICAgICAgIGhhc0VtcHR5TGFiZWxTcGFjZSA9IF90aGlzJHByb3BzLmhhc0VtcHR5TGFiZWxTcGFjZSxcbiAgICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wcy5mdWxsV2lkdGgsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGRlc2NyaWJlZEJ5SWRzID0gX3RoaXMkcHJvcHMuZGVzY3JpYmVkQnlJZHMsXG4gICAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgICAgaGFzQ2hpbGRMYWJlbCA9IF90aGlzJHByb3BzLmhhc0NoaWxkTGFiZWwsXG4gICAgICAgICAgcHJvcHNJZCA9IF90aGlzJHByb3BzLmlkLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5pc0Rpc2FibGVkLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBpZCA9IHRoaXMuc3RhdGUuaWQ7XG4gICAgICB2YXIgaGFzTGFiZWwgPSBsYWJlbCB8fCBsYWJlbEFwcGVuZDtcbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpRm9ybVJvdycsIHtcbiAgICAgICAgJ2V1aUZvcm1Sb3ctLWhhc0VtcHR5TGFiZWxTcGFjZSc6IGhhc0VtcHR5TGFiZWxTcGFjZSxcbiAgICAgICAgJ2V1aUZvcm1Sb3ctLWZ1bGxXaWR0aCc6IGZ1bGxXaWR0aCxcbiAgICAgICAgJ2V1aUZvcm1Sb3ctLWhhc0xhYmVsJzogaGFzTGFiZWxcbiAgICAgIH0sIGRpc3BsYXlUb0NsYXNzTmFtZU1hcFtkaXNwbGF5XSwgLy8gU2FmZSB1c2Ugb2YgISBhcyBkZWZhdWx0IHByb3AgaXMgJ3JvdydcbiAgICAgIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgb3B0aW9uYWxIZWxwVGV4dHM7XG5cbiAgICAgIGlmIChoZWxwVGV4dCkge1xuICAgICAgICB2YXIgaGVscFRleHRzID0gQXJyYXkuaXNBcnJheShoZWxwVGV4dCkgPyBoZWxwVGV4dCA6IFtoZWxwVGV4dF07XG4gICAgICAgIG9wdGlvbmFsSGVscFRleHRzID0gaGVscFRleHRzLm1hcChmdW5jdGlvbiAoaGVscFRleHQsIGkpIHtcbiAgICAgICAgICB2YXIga2V5ID0gdHlwZW9mIGhlbHBUZXh0ID09PSAnc3RyaW5nJyA/IGhlbHBUZXh0IDogaTtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGb3JtSGVscFRleHQsIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1oZWxwLVwiKS5jb25jYXQoaSksXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fdGV4dFwiXG4gICAgICAgICAgfSwgaGVscFRleHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbmFsRXJyb3JzO1xuXG4gICAgICBpZiAoZXJyb3IgJiYgaXNJbnZhbGlkKSB7XG4gICAgICAgIHZhciBlcnJvclRleHRzID0gQXJyYXkuaXNBcnJheShlcnJvcikgPyBlcnJvciA6IFtlcnJvcl07XG4gICAgICAgIG9wdGlvbmFsRXJyb3JzID0gZXJyb3JUZXh0cy5tYXAoZnVuY3Rpb24gKGVycm9yLCBpKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycgPyBlcnJvciA6IGk7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUVycm9yVGV4dCwge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBpZDogXCJcIi5jb25jYXQoaWQsIFwiLWVycm9yLVwiKS5jb25jYXQoaSksXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpRm9ybVJvd19fdGV4dFwiXG4gICAgICAgICAgfSwgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbmFsTGFiZWw7XG4gICAgICB2YXIgaXNMZWdlbmQgPSBsYWJlbCAmJiBsYWJlbFR5cGUgPT09ICdsZWdlbmQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdmFyIGxhYmVsSWQgPSBcIlwiLmNvbmNhdChpZCwgXCItbGFiZWxcIik7XG5cbiAgICAgIGlmIChoYXNMYWJlbCkge1xuICAgICAgICB2YXIgbGFiZWxQcm9wcyA9IHt9O1xuXG4gICAgICAgIGlmIChpc0xlZ2VuZCkge1xuICAgICAgICAgIGxhYmVsUHJvcHMgPSB7XG4gICAgICAgICAgICB0eXBlOiBsYWJlbFR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhYmVsUHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgICAgaHRtbEZvcjogaGFzQ2hpbGRMYWJlbCA/IGlkIDogdW5kZWZpbmVkXG4gICAgICAgICAgfSwgIWlzRGlzYWJsZWQgJiYge1xuICAgICAgICAgICAgaXNGb2N1c2VkOiB0aGlzLnN0YXRlLmlzRm9jdXNlZFxuICAgICAgICAgIH0pLCB7fSwge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHJvdyBpcyBkaXNhYmxlZCwgZG9uJ3QgcGFzcyB0aGUgaXNGb2N1c2VkIHN0YXRlLlxuICAgICAgICAgICAgdHlwZTogbGFiZWxUeXBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25hbExhYmVsID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX2xhYmVsV3JhcHBlclwiXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRm9ybUxhYmVsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZvcm1Sb3dfX2xhYmVsXCIsXG4gICAgICAgICAgaXNJbnZhbGlkOiBpc0ludmFsaWQsXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBpc0ludmFsaWQsXG4gICAgICAgICAgaWQ6IGxhYmVsSWRcbiAgICAgICAgfSwgbGFiZWxQcm9wcyksIGxhYmVsKSwgbGFiZWxBcHBlbmQgJiYgJyAnLCBsYWJlbEFwcGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25hbFByb3BzID0ge307XG4gICAgICAvKipcbiAgICAgICAqIFNhZmUgdXNlIG9mICEgYXMgZGVmYXVsdCBwcm9wIGlzIFtdXG4gICAgICAgKi9cblxuICAgICAgdmFyIGRlc2NyaWJpbmdJZHMgPSBfdG9Db25zdW1hYmxlQXJyYXkoZGVzY3JpYmVkQnlJZHMpO1xuXG4gICAgICBpZiAob3B0aW9uYWxIZWxwVGV4dHMpIHtcbiAgICAgICAgb3B0aW9uYWxIZWxwVGV4dHMuZm9yRWFjaChmdW5jdGlvbiAob3B0aW9uYWxIZWxwVGV4dCkge1xuICAgICAgICAgIHJldHVybiBkZXNjcmliaW5nSWRzLnB1c2gob3B0aW9uYWxIZWxwVGV4dC5wcm9wcy5pZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9uYWxFcnJvcnMpIHtcbiAgICAgICAgb3B0aW9uYWxFcnJvcnMuZm9yRWFjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmluZ0lkcy5wdXNoKGVycm9yLnByb3BzLmlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXNjcmliaW5nSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0aW9uYWxQcm9wc1snYXJpYS1kZXNjcmliZWRieSddID0gZGVzY3JpYmluZ0lkcy5qb2luKCcgJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZCA9IENoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICAgICAgdmFyIGZpZWxkID0gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudChjaGlsZCwgX29iamVjdFNwcmVhZCh7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgLy8gQWxsb3cgdGhlIGNoaWxkJ3MgZGlzYWJsZWQgb3IgaXNEaXNhYmxlZCBwcm9wIHRvIHN1cGVyY2VkZSB0aGUgYGlzRGlzYWJsZWRgXG4gICAgICAgIGRpc2FibGVkOiAoX3JlZjIgPSAoX2NoaWxkJHByb3BzJGRpc2FibGVkID0gY2hpbGQucHJvcHMuZGlzYWJsZWQpICE9PSBudWxsICYmIF9jaGlsZCRwcm9wcyRkaXNhYmxlZCAhPT0gdm9pZCAwID8gX2NoaWxkJHByb3BzJGRpc2FibGVkIDogY2hpbGQucHJvcHMuaXNEaXNhYmxlZCkgIT09IG51bGwgJiYgX3JlZjIgIT09IHZvaWQgMCA/IF9yZWYyIDogaXNEaXNhYmxlZCxcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25CbHVyXG4gICAgICB9LCBvcHRpb25hbFByb3BzKSk7XG4gICAgICB2YXIgZmllbGRXcmFwcGVyQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUZvcm1Sb3dfX2ZpZWxkV3JhcHBlcicsIHtcbiAgICAgICAgZXVpRm9ybVJvd19fZmllbGRXcmFwcGVyRGlzcGxheU9ubHk6XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTYWZlIHVzZSBvZiAhIGFzIGRlZmF1bHQgcHJvcCBpcyAncm93J1xuICAgICAgICAgKi9cbiAgICAgICAgZGlzcGxheS5zdGFydHNXaXRoKCdjZW50ZXInKVxuICAgICAgfSk7XG4gICAgICB2YXIgc2hhcmVkUHJvcHMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgaWQ6IFwiXCIuY29uY2F0KGlkLCBcIi1yb3dcIilcbiAgICAgIH07XG5cbiAgICAgIHZhciBjb250ZW50cyA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIG9wdGlvbmFsTGFiZWwsIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICBjbGFzc05hbWU6IGZpZWxkV3JhcHBlckNsYXNzZXNcbiAgICAgIH0sIGZpZWxkLCBvcHRpb25hbEVycm9ycywgb3B0aW9uYWxIZWxwVGV4dHMpKTtcblxuICAgICAgcmV0dXJuIGxhYmVsVHlwZSA9PT0gJ2xlZ2VuZCcgPyBfX19FbW90aW9uSlNYKFwiZmllbGRzZXRcIiwgX2V4dGVuZHMoe30sIHNoYXJlZFByb3BzLCByZXN0KSwgY29udGVudHMpIDogX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7fSwgc2hhcmVkUHJvcHMsIHJlc3QpLCBjb250ZW50cyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUZvcm1Sb3c7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGb3JtUm93LCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIGRpc3BsYXk6ICdyb3cnLFxuICBoYXNFbXB0eUxhYmVsU3BhY2U6IGZhbHNlLFxuICBmdWxsV2lkdGg6IGZhbHNlLFxuICBkZXNjcmliZWRCeUlkczogW10sXG4gIGxhYmVsVHlwZTogJ2xhYmVsJyxcbiAgaGFzQ2hpbGRMYWJlbDogdHJ1ZVxufSk7XG5cbkV1aUZvcm1Sb3cucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBEZWZhdWx0cyB0byByZW5kZXJpbmcgYSBgPGxhYmVsPmAgYnV0IGlmIHBhc3NlZCBgJ2xlZ2VuZCdgIGZvciBsYWJlbFR5cGUsXG4gICAgICogd2lsbCByZW5kZXIgYm90aCBhIGA8bGVnZW5kPmAgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250YWluZXIgYXMgYSBgPGZpZWxkc2V0PmBcbiAgICAgKi9cbiAgbGFiZWxUeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wibGFiZWxcIl0pLCBQcm9wVHlwZXMub25lT2YoW1wibGVnZW5kXCJdKV0pLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogV2hlbiBgcm93Q29tcHJlc3NlZGAsIGp1c3QgdGlnaHRlbnMgdXAgdGhlIHNwYWNpbmc7XG4gICAgICogU2V0IHRvIGBjb2x1bW5Db21wcmVzc2VkYCBpZiBjb21wcmVzc2VkXG4gICAgICogYW5kIGhvcml6b250YWwgbGF5b3V0IGlzIG5lZWRlZC5cbiAgICAgKiBTZXQgdG8gYGNlbnRlcmAgb3IgYGNlbnRlckNvbXByZXNzZWRgIHRvIGFsaWduIG5vbi1pbnB1dFxuICAgICAqIGNvbnRlbnQgYmV0dGVyIHdpdGggaW5saW5lIHJvd3MuXG4gICAgICogU2V0IHRvIGBjb2x1bW5Db21wcmVzc2VkU3dpdGNoYCBpZiB0aGUgZm9ybSBjb250cm9sIGJlaW5nIHBhc3NlZFxuICAgICAqIGFzIHRoZSBjaGlsZCBpcyBhIHN3aXRjaC5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBXaGVuIGByb3dDb21wcmVzc2VkYCwganVzdCB0aWdodGVucyB1cCB0aGUgc3BhY2luZztcbiAgICAgKiBTZXQgdG8gYGNvbHVtbkNvbXByZXNzZWRgIGlmIGNvbXByZXNzZWRcbiAgICAgKiBhbmQgaG9yaXpvbnRhbCBsYXlvdXQgaXMgbmVlZGVkLlxuICAgICAqIFNldCB0byBgY2VudGVyYCBvciBgY2VudGVyQ29tcHJlc3NlZGAgdG8gYWxpZ24gbm9uLWlucHV0XG4gICAgICogY29udGVudCBiZXR0ZXIgd2l0aCBpbmxpbmUgcm93cy5cbiAgICAgKiBTZXQgdG8gYGNvbHVtbkNvbXByZXNzZWRTd2l0Y2hgIGlmIHRoZSBmb3JtIGNvbnRyb2wgYmVpbmcgcGFzc2VkXG4gICAgICogYXMgdGhlIGNoaWxkIGlzIGEgc3dpdGNoLlxuICAgICAqL1xuICBkaXNwbGF5OiBQcm9wVHlwZXMub25lT2YoW1wicm93XCIsIFwicm93Q29tcHJlc3NlZFwiLCBcImNvbHVtbkNvbXByZXNzZWRcIiwgXCJjZW50ZXJcIiwgXCJjZW50ZXJDb21wcmVzc2VkXCIsIFwiY29sdW1uQ29tcHJlc3NlZFN3aXRjaFwiXSksXG4gIGhhc0VtcHR5TGFiZWxTcGFjZTogUHJvcFR5cGVzLmJvb2wsXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSURzIG9mIGFkZGl0aW9uYWwgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgcGFydCBvZiBjaGlsZHJlbidzIGBhcmlhLWRlc2NyaWJlZGJ5YFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIElEcyBvZiBhZGRpdGlvbmFsIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIHBhcnQgb2YgY2hpbGRyZW4ncyBgYXJpYS1kZXNjcmliZWRieWBcbiAgICAgKi9cbiAgZGVzY3JpYmVkQnlJZHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCksXG5cbiAgLyoqXG4gICAgICogRXNjYXBlIGhhdGNoIHRvIG5vdCByZW5kZXIgZHVwbGljYXRlIGxhYmVscyBpZiB0aGUgY2hpbGQgYWxzbyByZW5kZXJzIGEgbGFiZWxcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBFc2NhcGUgaGF0Y2ggdG8gbm90IHJlbmRlciBkdXBsaWNhdGUgbGFiZWxzIGlmIHRoZSBjaGlsZCBhbHNvIHJlbmRlcnMgYSBsYWJlbFxuICAgICAqL1xuICBoYXNDaGlsZExhYmVsOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBSZWFjdEVsZW1lbnQgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIFJlYWN0RWxlbWVudCB0byByZW5kZXIgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogQWRkcyBhbiBleHRyYSBub2RlIHRvIHRoZSByaWdodCBvZiB0aGUgZm9ybSBsYWJlbCB3aXRob3V0XG4gICAgICogYmVpbmcgY29udGFpbmVkIGluc2lkZSB0aGUgZm9ybSBsYWJlbC4gR29vZCBmb3IgdGhpbmdzXG4gICAgICogbGlrZSBkb2N1bWVudGF0aW9uIGxpbmtzLlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFkZHMgYW4gZXh0cmEgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIGZvcm0gbGFiZWwgd2l0aG91dFxuICAgICAqIGJlaW5nIGNvbnRhaW5lZCBpbnNpZGUgdGhlIGZvcm0gbGFiZWwuIEdvb2QgZm9yIHRoaW5nc1xuICAgICAqIGxpa2UgZG9jdW1lbnRhdGlvbiBsaW5rcy5cbiAgICAgKi9cbiAgbGFiZWxBcHBlbmQ6IFByb3BUeXBlcy5hbnksXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0ludmFsaWQ6IFByb3BUeXBlcy5ib29sLFxuICBlcnJvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqICBBZGRzIGEgc2luZ2xlIG5vZGUvc3RyaW5nIG9yIGFuIGFycmF5IG9mIG5vZGVzL3N0cmluZ3MgYmVsb3cgdGhlIGlucHV0XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogIEFkZHMgYSBzaW5nbGUgbm9kZS9zdHJpbmcgb3IgYW4gYXJyYXkgb2Ygbm9kZXMvc3RyaW5ncyBiZWxvdyB0aGUgaW5wdXRcbiAgICAgKi9cbiAgaGVscFRleHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiAgUGFzc2VkIGFsb25nIHRvIHRoZSBsYWJlbCBlbGVtZW50OyBhbmQgdG8gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQgd2hlbiBgZGlzYWJsZWRgIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiB0aGUgY2hpbGQgZmllbGQgZWxlbWVudC5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiAgUGFzc2VkIGFsb25nIHRvIHRoZSBsYWJlbCBlbGVtZW50OyBhbmQgdG8gdGhlIGNoaWxkIGZpZWxkIGVsZW1lbnQgd2hlbiBgZGlzYWJsZWRgIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBvbiB0aGUgY2hpbGQgZmllbGQgZWxlbWVudC5cbiAgICAgKi9cbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwib25DbG9zZVwiLCBcInRpdGxlXCIsIFwib25IZWlnaHRDaGFuZ2VcIiwgXCJ0cmFuc2l0aW9uVHlwZVwiLCBcInRyYW5zaXRpb25EaXJlY3Rpb25cIiwgXCJvblRyYW5zaXRpb25Db21wbGV0ZVwiLCBcIm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlXCIsIFwiaXRlbXNcIiwgXCJpbml0aWFsRm9jdXNlZEl0ZW1JbmRleFwiLCBcInNob3dOZXh0UGFuZWxcIiwgXCJzaG93UHJldmlvdXNQYW5lbFwiLCBcInNpemVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB0YWJiYWJsZSB9IGZyb20gJ3RhYmJhYmxlJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlSZXNpemVPYnNlcnZlciB9IGZyb20gJy4uL29ic2VydmVyL3Jlc2l6ZV9vYnNlcnZlcic7XG5pbXBvcnQgeyBjYXNjYWRpbmdNZW51S2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSB9IGZyb20gJy4vY29udGV4dF9tZW51X2l0ZW0nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciB0aXRsZVNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgczogJ2V1aUNvbnRleHRNZW51UGFuZWxUaXRsZS0tc21hbGwnLFxuICBtOiBudWxsXG59O1xuZXhwb3J0IHZhciBTSVpFUyA9IGtleXNPZih0aXRsZVNpemVUb0NsYXNzTmFtZU1hcCk7XG52YXIgdHJhbnNpdGlvbkRpcmVjdGlvbkFuZFR5cGVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbmV4dDoge1xuICAgIGluOiAnZXVpQ29udGV4dE1lbnVQYW5lbC10eEluTGVmdCcsXG4gICAgb3V0OiAnZXVpQ29udGV4dE1lbnVQYW5lbC10eE91dExlZnQnXG4gIH0sXG4gIHByZXZpb3VzOiB7XG4gICAgaW46ICdldWlDb250ZXh0TWVudVBhbmVsLXR4SW5SaWdodCcsXG4gICAgb3V0OiAnZXVpQ29udGV4dE1lbnVQYW5lbC10eE91dFJpZ2h0J1xuICB9XG59O1xuZXhwb3J0IHZhciBFdWlDb250ZXh0TWVudVBhbmVsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb250ZXh0TWVudVBhbmVsLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUNvbnRleHRNZW51UGFuZWwpO1xuXG4gIGZ1bmN0aW9uIEV1aUNvbnRleHRNZW51UGFuZWwocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29udGV4dE1lbnVQYW5lbCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfaXNNb3VudGVkXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJiYWNrQnV0dG9uXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBhbmVsXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluaXRpYWxQb3BvdmVyUGFyZW50XCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImZpbmRNZW51SXRlbXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzJGl0ZW1zO1xuXG4gICAgICBpZiAoIV90aGlzLnBhbmVsKSByZXR1cm47XG4gICAgICBpZiAoISgoX3RoaXMkcHJvcHMkaXRlbXMgPSBfdGhpcy5wcm9wcy5pdGVtcykgIT09IG51bGwgJiYgX3RoaXMkcHJvcHMkaXRlbXMgIT09IHZvaWQgMCAmJiBfdGhpcyRwcm9wcyRpdGVtcy5sZW5ndGgpKSByZXR1cm47IC8vIFdlIG9ubHkgbmVlZCBtZW51IGl0ZW1zL2Fycm93IGtleSBuYXZpZ2F0aW9uIGZvciB0aGUgYGl0ZW1zYCBBUElcblxuICAgICAgaWYgKF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHJldHVybjsgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIG1lbnUgaXRlbXMsIG5vIG5lZWQgdG8gY29udGludWVcblxuICAgICAgdmFyIHRhYmJhYmxlSXRlbXMgPSB0YWJiYWJsZShfdGhpcy5wYW5lbCk7XG5cbiAgICAgIGlmICh0YWJiYWJsZUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgbWVudUl0ZW1zOiB0YWJiYWJsZUl0ZW1zXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImZvY3VzTWVudUl0ZW1cIiwgZnVuY3Rpb24gKGRpcmVjdGlvbikge1xuICAgICAgdmFyIF90aGlzJHN0YXRlJG1lbnVJdGVtcztcblxuICAgICAgdmFyIGluZGV4T2Zmc2V0ID0gZGlyZWN0aW9uID09PSAndXAnID8gLTEgOiAxO1xuICAgICAgdmFyIG5leHRGb2N1c2VkSXRlbUluZGV4O1xuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdXNlcidzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIG1lbnUsIHRoZW4gd2UnbGwgZm9jdXNcbiAgICAgICAgLy8gZWl0aGVyIHRoZSBmaXJzdCBvciBsYXN0IGl0ZW0uXG4gICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gZGlyZWN0aW9uID09PSAndXAnID8gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dEZvY3VzZWRJdGVtSW5kZXggPSBfdGhpcy5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ICsgaW5kZXhPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG5leHRGb2N1c2VkSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgIG5leHRGb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dEZvY3VzZWRJdGVtSW5kZXggPT09IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICBuZXh0Rm9jdXNlZEl0ZW1JbmRleCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmb2N1c2VkSXRlbUluZGV4OiBuZXh0Rm9jdXNlZEl0ZW1JbmRleFxuICAgICAgfSk7XG5cbiAgICAgIChfdGhpcyRzdGF0ZSRtZW51SXRlbXMgPSBfdGhpcy5zdGF0ZS5tZW51SXRlbXNbbmV4dEZvY3VzZWRJdGVtSW5kZXhdKSA9PT0gbnVsbCB8fCBfdGhpcyRzdGF0ZSRtZW51SXRlbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHN0YXRlJG1lbnVJdGVtcy5mb2N1cygpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uS2V5RG93blwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIElmIHRoaXMgcGFuZWwgY29udGFpbnMgaXRlbXMgeW91IGNhbiB1c2UgdGhlIGxlZnQgYXJyb3cga2V5IHRvIGdvIGJhY2sgYXQgYW55IHRpbWUuXG4gICAgICAvLyBCdXQgaWYgaXQgZG9lc24ndCBjb250YWluIGl0ZW1zLCB0aGVuIHlvdSBoYXZlIHRvIGZvY3VzIG9uIHRoZSBiYWNrIGJ1dHRvbiBzcGVjaWZpY2FsbHksXG4gICAgICAvLyBzaW5jZSB0aGVyZSBjb3VsZCBiZSBjb250ZW50IGluc2lkZSB0aGUgcGFuZWwgd2hpY2ggcmVxdWlyZXMgdXNlIG9mIHRoZSBsZWZ0IGFycm93IGtleSxcbiAgICAgIC8vIGUuZy4gdGV4dCBpbnB1dHMuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzLml0ZW1zLFxuICAgICAgICAgIG9uQ2xvc2UgPSBfdGhpcyRwcm9wcy5vbkNsb3NlLFxuICAgICAgICAgIHNob3dQcmV2aW91c1BhbmVsID0gX3RoaXMkcHJvcHMuc2hvd1ByZXZpb3VzUGFuZWw7XG5cbiAgICAgIGlmIChvbkNsb3NlICYmIChpdGVtcyAhPT0gbnVsbCAmJiBpdGVtcyAhPT0gdm9pZCAwICYmIGl0ZW1zLmxlbmd0aCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBfdGhpcy5iYWNrQnV0dG9uIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IF90aGlzLnBhbmVsKSkge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBjYXNjYWRpbmdNZW51S2V5cy5BUlJPV19MRUZUKSB7XG4gICAgICAgICAgaWYgKHNob3dQcmV2aW91c1BhbmVsKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBzaG93UHJldmlvdXNQYW5lbCgpO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1zICE9PSBudWxsICYmIGl0ZW1zICE9PSB2b2lkIDAgJiYgaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgY2FzZSBjYXNjYWRpbmdNZW51S2V5cy5UQUI6XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBOT1RFOiBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlzIHN0YWxlIGlmIG5vdCB3cmFwcGVkIGluIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgICAgICAgICAgICB2YXIgZm9jdXNlZEl0ZW1JbmRleCA9IF90aGlzLnN0YXRlLm1lbnVJdGVtcy5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpOyAvLyBXZSBuZWVkIHRvIHN5bmMgb3VyIGludGVybmFsIHN0YXRlIHdpdGggdGhlIHVzZXIgdGFiYmluZyB0aHJvdWdoIGl0ZW1zXG5cblxuICAgICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDogZm9jdXNlZEl0ZW1JbmRleCA+PSAwICYmIGZvY3VzZWRJdGVtSW5kZXggPCBfdGhpcy5zdGF0ZS5tZW51SXRlbXMubGVuZ3RoID8gZm9jdXNlZEl0ZW1JbmRleCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIGNhc2NhZGluZ01lbnVLZXlzLkFSUk9XX1VQOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgX3RoaXMuZm9jdXNNZW51SXRlbSgndXAnKTtcblxuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgIF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBjYXNjYWRpbmdNZW51S2V5cy5BUlJPV19ET1dOOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgX3RoaXMuZm9jdXNNZW51SXRlbSgnZG93bicpO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIGNhc2NhZGluZ01lbnVLZXlzLkFSUk9XX1JJR0hUOlxuICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLnNob3dOZXh0UGFuZWwpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICBfdGhpcy5wcm9wcy5zaG93TmV4dFBhbmVsKG9uQ2xvc2UgJiYgX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCA/IF90aGlzLnN0YXRlLmZvY3VzZWRJdGVtSW5kZXggLSAxIC8vIEFjY291bnQgZm9yIHBhbmVsIHRpdGxlIGJhY2sgYnV0dG9uXG4gICAgICAgICAgICAgIDogX3RoaXMuc3RhdGUuZm9jdXNlZEl0ZW1JbmRleCk7XG5cbiAgICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMucHJvcHMub25Vc2VLZXlib2FyZFRvTmF2aWdhdGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlY2xhaW1Qb3BvdmVyRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB3YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXI6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMudGFrZUluaXRpYWxGb2N1cygpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uVHJhbnNpdGlvbkNvbXBsZXRlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vblRyYW5zaXRpb25Db21wbGV0ZSkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vblRyYW5zaXRpb25Db21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInBhbmVsUmVmXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5wYW5lbCA9IG5vZGU7XG5cbiAgICAgIF90aGlzLnVwZGF0ZUhlaWdodCgpO1xuXG4gICAgICBfdGhpcy5nZXRJbml0aWFsUG9wb3ZlclBhcmVudCgpO1xuXG4gICAgICBfdGhpcy5maW5kTWVudUl0ZW1zKCk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHByZXZQcm9wczoge1xuICAgICAgICBpdGVtczogX3RoaXMucHJvcHMuaXRlbXNcbiAgICAgIH0sXG4gICAgICBtZW51SXRlbXM6IFtdLFxuICAgICAgZm9jdXNlZEl0ZW1JbmRleDogcHJvcHMub25DbG9zZSAmJiBwcm9wcy5pbml0aWFsRm9jdXNlZEl0ZW1JbmRleCAhPSBudWxsID8gcHJvcHMuaW5pdGlhbEZvY3VzZWRJdGVtSW5kZXggKyAxIC8vIEFjY291bnQgZm9yIHBhbmVsIHRpdGxlIGJhY2sgYnV0dG9uXG4gICAgICA6IHByb3BzLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4LFxuICAgICAgY3VycmVudEhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgd2FpdGluZ0ZvckluaXRpYWxQb3BvdmVyOiBmYWxzZSxcbiAgICAgIHRvb2tJbml0aWFsRm9jdXM6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH0gLy8gRmluZCBhbGwgdGFiYmFibGUgbWVudSBpdGVtcyBvbiBib3RoIHBhbmVsIGluaXQgYW5kXG4gIC8vIHdoZW5ldmVyIGBtZW51SXRlbXNgIHJlc2V0cyB3aGVuIGBwcm9wcy5pdGVtc2AgY2hhbmdlc1xuXG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUNvbnRleHRNZW51UGFuZWwsIFt7XG4gICAga2V5OiBcInRha2VJbml0aWFsRm9jdXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdGFrZUluaXRpYWxGb2N1cygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBHaXZlIHBvc2l0aW9uaW5nIHRpbWUgdG8gcmVuZGVyIGJlZm9yZSBmb2N1cyBpcyBhcHBsaWVkLiBPdGhlcndpc2UgcGFnZSBqdW1wcy5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMyLl9pc01vdW50ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gRG9uJ3QgdGFrZSBmb2N1cyB5ZXQgaWYgRXVpQ29udGV4dE1lbnUgaXMgaW4gYSBwb3BvdmVyXG4gICAgICAgIC8vIGFuZCB0aGUgcG9wb3ZlciBpcyBpbml0aWFsbHkgb3BlbmluZy90cmFuc2l0aW9uaW5nIGluXG5cblxuICAgICAgICBpZiAoX3RoaXMyLmluaXRpYWxQb3BvdmVyUGFyZW50ICYmIF90aGlzMi5zdGF0ZS53YWl0aW5nRm9ySW5pdGlhbFBvcG92ZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU2V0dGluZyBmb2N1cyB3aGlsZSB0cmFuc2l0aW9uaW5nIGNhdXNlcyB0aGUgYW5pbWF0aW9uIHRvIGdsaXRjaCwgc28gd2UgaGF2ZSB0byB3YWl0XG4gICAgICAgIC8vIHVudGlsIGl0J3MgZmluaXNoZWQgYmVmb3JlIHdlIGZvY3VzIGFueXRoaW5nLlxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5wcm9wcy50cmFuc2l0aW9uVHlwZSkge1xuICAgICAgICAgIHZhciBfdGhpczIkcGFuZWw7XG5cbiAgICAgICAgICAvLyBJZiB0aGUgcGFuZWwgaXMgdHJhbnNpdGlvbmluZywgc2V0IGZvY3VzIHRvIHRoZSBwYW5lbCBzbyB0aGF0IHVzZXJzIHVzaW5nXG4gICAgICAgICAgLy8gYXJyb3cga2V5cyB0aGF0IGFyZSBmYXN0IGNsaWNrZXJzIGRvbid0IGFjY2lkZW50YWxseSBnZXQgc3RyYW5kZWQgZm9jdXNcbiAgICAgICAgICAvLyBvciB0cmlnZ2VyIGtleXN0cm9rZXMgd2hlbiBpdCBzaG91bGRuJ3RcbiAgICAgICAgICAoX3RoaXMyJHBhbmVsID0gX3RoaXMyLnBhbmVsKSA9PT0gbnVsbCB8fCBfdGhpczIkcGFuZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzMiRwYW5lbC5mb2N1cyh7XG4gICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIEluaXRpYWwgZm9jdXMgaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLCBubyBuZWVkIHRvIGNvbnRpbnVlIGFuZCBwb3RlbnRpYWxseSBoaWphY2svZm9jdXMgZmlnaHRcblxuXG4gICAgICAgIGlmIChfdGhpczIuc3RhdGUudG9va0luaXRpYWxGb2N1cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBJZiBhbiBpdGVtIHNob3VsZCBiZSBmb2N1c2VkLCBmb2N1cyBpdCAoaWYgaXQgZXhpc3RzKVxuXG5cbiAgICAgICAgaWYgKF90aGlzMi5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4ICE9IG51bGwgJiYgX3RoaXMyLnN0YXRlLm1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZm9jdXNlZEl0ZW0gPSBfdGhpczIuc3RhdGUubWVudUl0ZW1zW190aGlzMi5zdGF0ZS5mb2N1c2VkSXRlbUluZGV4XTtcblxuICAgICAgICAgIGlmIChmb2N1c2VkSXRlbSkge1xuICAgICAgICAgICAgZm9jdXNlZEl0ZW0uZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gT3RoZXJ3aXNlLCBpZiB0aGUgYmFjayBidXR0b24gcGFuZWwgdGl0bGUgaXMgcHJlc2VudCwgZm9jdXMgaXRcblxuXG4gICAgICAgIGlmIChfdGhpczIuYmFja0J1dHRvbikge1xuICAgICAgICAgIC8vIEZvY3VzIHRoZSBiYWNrIGJ1dHRvbiBmb3IgYm90aCBgaXRlbXNgIGFuZCBgY2hpbGRyZW5gIEFQSXNcbiAgICAgICAgICBfdGhpczIuYmFja0J1dHRvbi5mb2N1cygpOyAvLyBJZiBgaXRlbXNgLCBlbnN1cmUgb3VyIGZvY3VzZWQgaXRlbSBpbmRleCBpcyBjb3JyZWN0XG5cblxuICAgICAgICAgIGlmIChfdGhpczIuc3RhdGUubWVudUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgZm9jdXNlZEl0ZW1JbmRleDogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gLy8gRm9jdXMgb24gdGhlIHBhbmVsIGFzIGEgbGFzdCByZXNvcnQuXG5cblxuICAgICAgICBpZiAoX3RoaXMyLnBhbmVsICYmICFfdGhpczIucGFuZWwuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICBfdGhpczIucGFuZWwuZm9jdXMoKTtcblxuICAgICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB0b29rSW5pdGlhbEZvY3VzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKF8sIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS5tZW51SXRlbXMgIT09IHRoaXMuc3RhdGUubWVudUl0ZW1zKSB7XG4gICAgICAgIHRoaXMuZmluZE1lbnVJdGVtcygpO1xuICAgICAgfSAvLyBGb2N1cyBpc24ndCBhbHdheXMgcmVhZHkgdG8gYmUgdGFrZW4gb24gbW91bnQsIHNvIHdlIG5lZWQgdG8gY2FsbCBpdFxuICAgICAgLy8gb24gdXBkYXRlIGFzIHdlbGwganVzdCBpbiBjYXNlXG5cblxuICAgICAgdGhpcy50YWtlSW5pdGlhbEZvY3VzKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgLy8gSWYgRXVpQ29udGV4dE1lbnUgaXMgdXNlZCB3aXRoaW4gYW4gRXVpUG9wb3Zlciwgd2UgbmVlZCB0byB3YWl0IGZvciBFdWlQb3BvdmVyIHRvOlxuICAgICAgLy8gMS4gQ29ycmVjdGx5IHNldCBpdHMgYHJldHVybkZvY3VzYCB0byB0aGUgdG9nZ2xpbmcgYnV0dG9uLFxuICAgICAgLy8gICAgc28gZm9jdXMgaXMgY29ycmVjdGx5IHJlc3RvcmVkIHRvIHRoZSBwb3BvdmVyIHRvZ2dsZSBvbiBjbG9zZVxuICAgICAgLy8gMi4gRmluaXNoIGl0cyByZWFjdC1mb2N1cy1vbiBgYXV0b0ZvY3VzYCBiZWhhdmlvciBhZnRlciB0cmFuc2l0aW9uaW5nIGluLFxuICAgICAgLy8gICAgc28gdGhlIHBhbmVsIGNhbiBoYW5kbGUgaXRzIG93biBmb2N1cyB3aXRob3V0IGZvY3VzIGZpZ2h0aW5nXG4gICAgICBpZiAodGhpcy5pbml0aWFsUG9wb3ZlclBhcmVudCkge1xuICAgICAgICB0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5yZWNsYWltUG9wb3ZlckZvY3VzLCB7XG4gICAgICAgICAgb25jZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFrZUluaXRpYWxGb2N1cygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRpbml0aWFsUG9wb3ZlclA7XG5cbiAgICAgIChfdGhpcyRpbml0aWFsUG9wb3ZlclAgPSB0aGlzLmluaXRpYWxQb3BvdmVyUGFyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyRpbml0aWFsUG9wb3ZlclAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGluaXRpYWxQb3BvdmVyUC5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMucmVjbGFpbVBvcG92ZXJGb2N1cyk7XG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidXBkYXRlSGVpZ2h0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZUhlaWdodCgpIHtcbiAgICAgIHZhciBjdXJyZW50SGVpZ2h0ID0gdGhpcy5wYW5lbCA/IHRoaXMucGFuZWwuY2xpZW50SGVpZ2h0IDogMDtcblxuICAgICAgaWYgKHRoaXMuc3RhdGUuaGVpZ2h0ICE9PSBjdXJyZW50SGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uSGVpZ2h0Q2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vbkhlaWdodENoYW5nZShjdXJyZW50SGVpZ2h0KTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGhlaWdodDogY3VycmVudEhlaWdodFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEluaXRpYWxQb3BvdmVyUGFyZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEluaXRpYWxQb3BvdmVyUGFyZW50KCkge1xuICAgICAgdmFyIF9wYXJlbnQkcGFyZW50Tm9kZTtcblxuICAgICAgLy8gSWYgYHRyYW5zaXRpb25UeXBlYCBleGlzdHMsIHRoYXQgbWVhbnMgd2UncmUgbmF2aWdhdGluZyBiZXR3ZWVuIHBhbmVsc1xuICAgICAgLy8gYW5kIHRoZSBpbml0aWFsIHBvcG92ZXIgaGFzIGFscmVhZHkgbG9hZGVkLCBzbyB3ZSBzaG91bGRuJ3QgbmVlZCB0aGlzIGxvZ2ljXG4gICAgICBpZiAodGhpcy5wcm9wcy50cmFuc2l0aW9uVHlwZSkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLnBhbmVsKSByZXR1cm47XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYW5lbC5wYXJlbnROb2RlO1xuICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgICAgIHZhciBoYXNFdWlDb250ZXh0TWVudVBhcmVudCA9IHBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aUNvbnRleHRNZW51Jyk7IC8vIEl0J3MgcG9zc2libGUgdG8gdXNlIGFuIEV1aUNvbnRleHRNZW51UGFuZWwgZGlyZWN0bHkgaW4gYSBwb3BvdmVyIHdpdGhvdXRcbiAgICAgIC8vIGFuIEV1aUNvbnRleHRNZW51LCBzbyB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQgd2hlbiBzZWFyY2hpbmcgcGFyZW50IG5vZGVzXG5cbiAgICAgIHZhciBwb3BvdmVyUGFyZW50ID0gaGFzRXVpQ29udGV4dE1lbnVQYXJlbnQgPyBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3BhcmVudCRwYXJlbnROb2RlID0gcGFyZW50LnBhcmVudE5vZGUpID09PSBudWxsIHx8IF9wYXJlbnQkcGFyZW50Tm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BhcmVudCRwYXJlbnROb2RlLnBhcmVudE5vZGUgOiBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgIGlmICghcG9wb3ZlclBhcmVudCkgcmV0dXJuO1xuICAgICAgdmFyIGhhc1BvcG92ZXJQYXJlbnQgPSAhIXBvcG92ZXJQYXJlbnQuZGF0YXNldC5wb3BvdmVyUGFuZWw7XG4gICAgICBpZiAoIWhhc1BvcG92ZXJQYXJlbnQpIHJldHVybjtcbiAgICAgIHRoaXMuaW5pdGlhbFBvcG92ZXJQYXJlbnQgPSBwb3BvdmVyUGFyZW50O1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHdhaXRpbmdGb3JJbml0aWFsUG9wb3ZlcjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczIuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgICBvbkNsb3NlID0gX3RoaXMkcHJvcHMyLm9uQ2xvc2UsXG4gICAgICAgICAgdGl0bGUgPSBfdGhpcyRwcm9wczIudGl0bGUsXG4gICAgICAgICAgb25IZWlnaHRDaGFuZ2UgPSBfdGhpcyRwcm9wczIub25IZWlnaHRDaGFuZ2UsXG4gICAgICAgICAgdHJhbnNpdGlvblR5cGUgPSBfdGhpcyRwcm9wczIudHJhbnNpdGlvblR5cGUsXG4gICAgICAgICAgdHJhbnNpdGlvbkRpcmVjdGlvbiA9IF90aGlzJHByb3BzMi50cmFuc2l0aW9uRGlyZWN0aW9uLFxuICAgICAgICAgIG9uVHJhbnNpdGlvbkNvbXBsZXRlID0gX3RoaXMkcHJvcHMyLm9uVHJhbnNpdGlvbkNvbXBsZXRlLFxuICAgICAgICAgIG9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlID0gX3RoaXMkcHJvcHMyLm9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMyLml0ZW1zLFxuICAgICAgICAgIGluaXRpYWxGb2N1c2VkSXRlbUluZGV4ID0gX3RoaXMkcHJvcHMyLmluaXRpYWxGb2N1c2VkSXRlbUluZGV4LFxuICAgICAgICAgIHNob3dOZXh0UGFuZWwgPSBfdGhpcyRwcm9wczIuc2hvd05leHRQYW5lbCxcbiAgICAgICAgICBzaG93UHJldmlvdXNQYW5lbCA9IF90aGlzJHByb3BzMi5zaG93UHJldmlvdXNQYW5lbCxcbiAgICAgICAgICBzaXplID0gX3RoaXMkcHJvcHMyLnNpemUsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBwYW5lbFRpdGxlO1xuXG4gICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgdmFyIHRpdGxlQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbnRleHRNZW51UGFuZWxUaXRsZScsIHNpemUgJiYgdGl0bGVTaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0pO1xuXG4gICAgICAgIGlmIChCb29sZWFuKG9uQ2xvc2UpKSB7XG4gICAgICAgICAgcGFuZWxUaXRsZSA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiB0aXRsZUNsYXNzZXMsXG4gICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgb25DbGljazogb25DbG9zZSxcbiAgICAgICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgICAgICAgICAgX3RoaXMzLmJhY2tCdXR0b24gPSBub2RlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjb250ZXh0TWVudVBhbmVsVGl0bGVCdXR0b25cIlxuICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9faXRlbUxheW91dFwiXG4gICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgICB0eXBlOiBcImFycm93TGVmdFwiLFxuICAgICAgICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX2ljb25cIlxuICAgICAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29udGV4dE1lbnVfX3RleHRcIlxuICAgICAgICAgIH0sIHRpdGxlKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhbmVsVGl0bGUgPSBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogdGl0bGVDbGFzc2VzXG4gICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19pdGVtTGF5b3V0XCJcbiAgICAgICAgICB9LCB0aXRsZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpQ29udGV4dE1lbnVQYW5lbCcsIGNsYXNzTmFtZSwgdHJhbnNpdGlvbkRpcmVjdGlvbiAmJiB0cmFuc2l0aW9uVHlwZSAmJiB0cmFuc2l0aW9uRGlyZWN0aW9uQW5kVHlwZVRvQ2xhc3NOYW1lTWFwW3RyYW5zaXRpb25EaXJlY3Rpb25dID8gdHJhbnNpdGlvbkRpcmVjdGlvbkFuZFR5cGVUb0NsYXNzTmFtZU1hcFt0cmFuc2l0aW9uRGlyZWN0aW9uXVt0cmFuc2l0aW9uVHlwZV0gOiB1bmRlZmluZWQpO1xuICAgICAgdmFyIGNvbnRlbnQgPSBpdGVtcyAmJiBpdGVtcy5sZW5ndGggPyBpdGVtcy5tYXAoZnVuY3Rpb24gKE1lbnVJdGVtKSB7XG4gICAgICAgIHZhciBjbG9uZVByb3BzID0ge307XG5cbiAgICAgICAgaWYgKHNpemUpIHtcbiAgICAgICAgICBjbG9uZVByb3BzLnNpemUgPSBzaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE1lbnVJdGVtLnR5cGUgPT09IEV1aUNvbnRleHRNZW51SXRlbSA/IC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoTWVudUl0ZW0sIGNsb25lUHJvcHMpIDogTWVudUl0ZW07XG4gICAgICB9KSA6IGNoaWxkcmVuO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgICAgICByZWY6IHRoaXMucGFuZWxSZWYsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICBvbkFuaW1hdGlvbkVuZDogdGhpcy5vblRyYW5zaXRpb25Db21wbGV0ZVxuICAgICAgfSwgcmVzdCksIHBhbmVsVGl0bGUsIF9fX0Vtb3Rpb25KU1goRXVpUmVzaXplT2JzZXJ2ZXIsIHtcbiAgICAgICAgb25SZXNpemU6IGZ1bmN0aW9uIG9uUmVzaXplKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczMudXBkYXRlSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGZ1bmN0aW9uIChyZXNpemVSZWYpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgIHJlZjogcmVzaXplUmVmXG4gICAgICAgIH0sIGNvbnRlbnQpO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhciBuZWVkc1VwZGF0ZSA9IGZhbHNlO1xuICAgICAgdmFyIG5leHRTdGF0ZSA9IHt9OyAvLyBDbGVhciByZWZzIHRvIG1lbnVJdGVtcyBpZiB3ZSdyZSBnZXR0aW5nIG5ldyBvbmVzLlxuXG4gICAgICBpZiAobmV4dFByb3BzLml0ZW1zICE9PSBwcmV2U3RhdGUucHJldlByb3BzLml0ZW1zKSB7XG4gICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgbmV4dFN0YXRlLm1lbnVJdGVtcyA9IFtdO1xuICAgICAgICBuZXh0U3RhdGUucHJldlByb3BzID0ge1xuICAgICAgICAgIGl0ZW1zOiBuZXh0UHJvcHMuaXRlbXNcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZWRzVXBkYXRlKSB7XG4gICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb250ZXh0TWVudVBhbmVsO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ29udGV4dE1lbnVQYW5lbCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBpdGVtczogW11cbn0pO1xuXG5FdWlDb250ZXh0TWVudVBhbmVsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpbml0aWFsRm9jdXNlZEl0ZW1JbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQpLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25IZWlnaHRDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblRyYW5zaXRpb25Db21wbGV0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uVXNlS2V5Ym9hcmRUb05hdmlnYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2hvd05leHRQYW5lbDogUHJvcFR5cGVzLmZ1bmMsXG4gIHNob3dQcmV2aW91c1BhbmVsOiBQcm9wVHlwZXMuZnVuYyxcbiAgdGl0bGU6IFByb3BUeXBlcy5ub2RlLFxuICB0cmFuc2l0aW9uRGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wibmV4dFwiLCBcInByZXZpb3VzXCJdKSxcbiAgdHJhbnNpdGlvblR5cGU6IFByb3BUeXBlcy5vbmVPZihbXCJpblwiLCBcIm91dFwiXSksXG5cbiAgLyoqXG4gICAgICogQWx0ZXJzIHRoZSBzaXplIG9mIHRoZSBpdGVtcyBhbmQgdGhlIHRpdGxlXG4gICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImhhc1BhbmVsXCIsIFwiaWNvblwiLCBcImJ1dHRvblJlZlwiLCBcImRpc2FibGVkXCIsIFwibGF5b3V0QWxpZ25cIiwgXCJ0b29sVGlwVGl0bGVcIiwgXCJ0b29sVGlwQ29udGVudFwiLCBcInRvb2xUaXBQb3NpdGlvblwiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGNsb25lRWxlbWVudCwgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzT2YgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgRXVpSWNvbiB9IGZyb20gJy4uL2ljb24nO1xuaW1wb3J0IHsgRXVpVG9vbFRpcCB9IGZyb20gJy4uL3Rvb2xfdGlwJztcbmltcG9ydCB7IGdldFNlY3VyZVJlbEZvclRhcmdldCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlSHJlZiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlY3VyaXR5L2hyZWZfdmFsaWRhdG9yJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgc2l6ZVRvQ2xhc3NOYW1lTWFwID0ge1xuICBzOiAnZXVpQ29udGV4dE1lbnVJdGVtLS1zbWFsbCcsXG4gIG06IG51bGxcbn07XG5leHBvcnQgdmFyIFNJWkVTID0ga2V5c09mKHNpemVUb0NsYXNzTmFtZU1hcCk7XG52YXIgbGF5b3V0QWxpZ25Ub0NsYXNzTmFtZXMgPSB7XG4gIGNlbnRlcjogbnVsbCxcbiAgdG9wOiAnZXVpQ29udGV4dE1lbnVfX2l0ZW1MYXlvdXQtLXRvcCcsXG4gIGJvdHRvbTogJ2V1aUNvbnRleHRNZW51X19pdGVtTGF5b3V0LS1ib3R0b20nXG59O1xuZXhwb3J0IHZhciBMQVlPVVRfQUxJR04gPSBrZXlzT2YobGF5b3V0QWxpZ25Ub0NsYXNzTmFtZXMpO1xuZXhwb3J0IHZhciBFdWlDb250ZXh0TWVudUl0ZW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbnRleHRNZW51SXRlbSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlDb250ZXh0TWVudUl0ZW0pO1xuXG4gIGZ1bmN0aW9uIEV1aUNvbnRleHRNZW51SXRlbSgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29udGV4dE1lbnVJdGVtKTtcblxuICAgIHJldHVybiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb250ZXh0TWVudUl0ZW0sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGhhc1BhbmVsID0gX3RoaXMkcHJvcHMuaGFzUGFuZWwsXG4gICAgICAgICAgaWNvbiA9IF90aGlzJHByb3BzLmljb24sXG4gICAgICAgICAgYnV0dG9uUmVmID0gX3RoaXMkcHJvcHMuYnV0dG9uUmVmLFxuICAgICAgICAgIF9kaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIF90aGlzJHByb3BzJGxheW91dEFsaSA9IF90aGlzJHByb3BzLmxheW91dEFsaWduLFxuICAgICAgICAgIGxheW91dEFsaWduID0gX3RoaXMkcHJvcHMkbGF5b3V0QWxpID09PSB2b2lkIDAgPyAnY2VudGVyJyA6IF90aGlzJHByb3BzJGxheW91dEFsaSxcbiAgICAgICAgICB0b29sVGlwVGl0bGUgPSBfdGhpcyRwcm9wcy50b29sVGlwVGl0bGUsXG4gICAgICAgICAgdG9vbFRpcENvbnRlbnQgPSBfdGhpcyRwcm9wcy50b29sVGlwQ29udGVudCxcbiAgICAgICAgICBfdGhpcyRwcm9wcyR0b29sVGlwUG8gPSBfdGhpcyRwcm9wcy50b29sVGlwUG9zaXRpb24sXG4gICAgICAgICAgdG9vbFRpcFBvc2l0aW9uID0gX3RoaXMkcHJvcHMkdG9vbFRpcFBvID09PSB2b2lkIDAgPyAncmlnaHQnIDogX3RoaXMkcHJvcHMkdG9vbFRpcFBvLFxuICAgICAgICAgIGhyZWYgPSBfdGhpcyRwcm9wcy5ocmVmLFxuICAgICAgICAgIHRhcmdldCA9IF90aGlzJHByb3BzLnRhcmdldCxcbiAgICAgICAgICByZWwgPSBfdGhpcyRwcm9wcy5yZWwsXG4gICAgICAgICAgc2l6ZSA9IF90aGlzJHByb3BzLnNpemUsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGljb25JbnN0YW5jZTtcbiAgICAgIHZhciBpc0hyZWZWYWxpZCA9ICFocmVmIHx8IHZhbGlkYXRlSHJlZihocmVmKTtcbiAgICAgIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG5cbiAgICAgIGlmIChpY29uKSB7XG4gICAgICAgIHN3aXRjaCAoX3R5cGVvZihpY29uKSkge1xuICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBpY29uSW5zdGFuY2UgPSBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICAgICAgdHlwZTogaWNvbixcbiAgICAgICAgICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb250ZXh0TWVudV9faWNvblwiLFxuICAgICAgICAgICAgICBjb2xvcjogXCJpbmhlcml0XCIgLy8gZm9yY2VzIHRoZSBpY29uIHRvIGluaGVyaXQgaXRzIHBhcmVudCBjb2xvclxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIEFzc3VtZSBpdCdzIGFscmVhZHkgYW4gaW5zdGFuY2Ugb2YgYW4gaWNvbi5cbiAgICAgICAgICAgIGljb25JbnN0YW5jZSA9IC8qI19fUFVSRV9fKi9jbG9uZUVsZW1lbnQoaWNvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdldWlDb250ZXh0TWVudV9faWNvbidcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBhcnJvdztcblxuICAgICAgaWYgKGhhc1BhbmVsKSB7XG4gICAgICAgIGFycm93ID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgdHlwZTogXCJhcnJvd1JpZ2h0XCIsXG4gICAgICAgICAgc2l6ZTogXCJtXCIsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51X19hcnJvd1wiXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbnRleHRNZW51SXRlbScsIHNpemUgJiYgc2l6ZVRvQ2xhc3NOYW1lTWFwW3NpemVdLCBjbGFzc05hbWUsIHtcbiAgICAgICAgJ2V1aUNvbnRleHRNZW51SXRlbS1pc0Rpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH0pO1xuICAgICAgdmFyIGxheW91dENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb250ZXh0TWVudV9faXRlbUxheW91dCcsIGxheW91dEFsaWduVG9DbGFzc05hbWVzW2xheW91dEFsaWduXSk7XG5cbiAgICAgIHZhciBidXR0b25Jbm5lciA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBsYXlvdXRDbGFzc2VzXG4gICAgICB9LCBpY29uSW5zdGFuY2UsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbnRleHRNZW51SXRlbV9fdGV4dFwiXG4gICAgICB9LCBjaGlsZHJlbiksIGFycm93KTtcblxuICAgICAgdmFyIGJ1dHRvbjsgLy8gPGE+IGVsZW1lbnRzIGRvbid0IHJlc3BlY3QgdGhlIGBkaXNhYmxlZGAgYXR0cmlidXRlLiBTbyBpZiB3ZSdyZSBkaXNhYmxlZCwgd2UnbGwganVzdCBwcmV0ZW5kXG4gICAgICAvLyB0aGlzIGlzIGEgYnV0dG9uIGFuZCBwaWdneWJhY2sgb2ZmIGl0cyBkaXNhYmxlZCBzdHlsZXMuXG5cbiAgICAgIGlmIChocmVmICYmICFkaXNhYmxlZCkge1xuICAgICAgICB2YXIgc2VjdXJlUmVsID0gZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0KHtcbiAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgIHJlbDogcmVsXG4gICAgICAgIH0pO1xuICAgICAgICBidXR0b24gPSBfX19FbW90aW9uSlNYKFwiYVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgcmVsOiBzZWN1cmVSZWwsXG4gICAgICAgICAgcmVmOiBidXR0b25SZWZcbiAgICAgICAgfSwgcmVzdCksIGJ1dHRvbklubmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICByZWY6IGJ1dHRvblJlZlxuICAgICAgICB9LCByZXN0KSwgYnV0dG9uSW5uZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9vbFRpcENvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgICAgICAgIHRpdGxlOiB0b29sVGlwVGl0bGUgPyB0b29sVGlwVGl0bGUgOiBudWxsLFxuICAgICAgICAgIGNvbnRlbnQ6IHRvb2xUaXBDb250ZW50LFxuICAgICAgICAgIGFuY2hvckNsYXNzTmFtZTogXCJldWktZGlzcGxheUJsb2NrXCIsXG4gICAgICAgICAgcG9zaXRpb246IHRvb2xUaXBQb3NpdGlvblxuICAgICAgICB9LCBidXR0b24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJ1dHRvbjtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpQ29udGV4dE1lbnVJdGVtO1xufShDb21wb25lbnQpO1xuRXVpQ29udGV4dE1lbnVJdGVtLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuICBoYXNQYW5lbDogUHJvcFR5cGVzLmJvb2wsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIGJ1dHRvblJlZjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBSZXF1aXJlZCBpZiB1c2luZyBhIHRvb2x0aXAuIEFkZCBhbiBvcHRpb25hbCB0b29sdGlwIG9uIGhvdmVyXG4gICAgICovXG4gIHRvb2xUaXBDb250ZW50OiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBPcHRpb25hbCB0aXRsZSBmb3IgdGhlIHRvb2x0aXBcbiAgICAgKi9cbiAgdG9vbFRpcFRpdGxlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBEaWN0YXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIHRvb2x0aXAuXG4gICAgICovXG4gIHRvb2xUaXBQb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFtcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSksXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEhvdyB0byBhbGlnbiBpY29uIHdpdGggY29udGVudCBvZiBidXR0b25cbiAgICAgKi9cbiAgbGF5b3V0QWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJjZW50ZXJcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0pLFxuXG4gIC8qKlxuICAgICAqIFJlZHVjZSB0aGUgc2l6ZSB0byBgc2Agd2hlbiBpbiBuZWVkIG9mIGEgbW9yZSBjb21wcmVzc2VkIG1lbnVcbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcInNpemVcIiwgXCJtYXJnaW5cIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aUhvcml6b250YWxSdWxlU3R5bGVzIH0gZnJvbSAnLi9ob3Jpem9udGFsX3J1bGUuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFNJWkVTID0gWydmdWxsJywgJ2hhbGYnLCAncXVhcnRlciddO1xuZXhwb3J0IHZhciBNQVJHSU5TID0gWydub25lJywgJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xudmFyIG1hcmdpblRvQ2xhc3NOYW1lTWFwID0ge1xuICBub25lOiBudWxsLFxuICB4czogJ21hcmdpblhTbWFsbCcsXG4gIHM6ICdtYXJnaW5TbWFsbCcsXG4gIG06ICdtYXJnaW5NZWRpdW0nLFxuICBsOiAnbWFyZ2luTGFyZ2UnLFxuICB4bDogJ21hcmdpblhMYXJnZScsXG4gIHh4bDogJ21hcmdpblhYTGFyZ2UnXG59O1xuZXhwb3J0IHZhciBFdWlIb3Jpem9udGFsUnVsZSA9IGZ1bmN0aW9uIEV1aUhvcml6b250YWxSdWxlKF9yZWYpIHtcbiAgdmFyIF9jbGFzc05hbWVzO1xuXG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdmdWxsJyA6IF9yZWYkc2l6ZSxcbiAgICAgIF9yZWYkbWFyZ2luID0gX3JlZi5tYXJnaW4sXG4gICAgICBtYXJnaW4gPSBfcmVmJG1hcmdpbiA9PT0gdm9pZCAwID8gJ2wnIDogX3JlZiRtYXJnaW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUhvcml6b250YWxSdWxlU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlIb3Jpem9udGFsUnVsZScsIChfY2xhc3NOYW1lcyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2NsYXNzTmFtZXMsIFwiZXVpSG9yaXpvbnRhbFJ1bGUtLVwiLmNvbmNhdChzaXplKSwgc2l6ZSksIF9kZWZpbmVQcm9wZXJ0eShfY2xhc3NOYW1lcywgXCJldWlIb3Jpem9udGFsUnVsZS0tXCIuY29uY2F0KG1hcmdpblRvQ2xhc3NOYW1lTWFwW21hcmdpbl0pLCBtYXJnaW4gJiYgbWFyZ2luICE9PSAnbm9uZScpLCBfY2xhc3NOYW1lcyksIGNsYXNzTmFtZSk7XG4gIHZhciBjc3NTdHlsZXMgPSBbc3R5bGVzLmV1aUhvcml6b250YWxSdWxlLCBzdHlsZXNbc2l6ZV0sIHN0eWxlc1ttYXJnaW5dXTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJoclwiLCBfZXh0ZW5kcyh7XG4gICAgY3NzOiBjc3NTdHlsZXMsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpKTtcbn07XG5FdWlIb3Jpem9udGFsUnVsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBIUi5cbiAgICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLmFueSxcbiAgbWFyZ2luOiBQcm9wVHlwZXMuYW55LFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuZXhwb3J0IHZhciBldWlIb3Jpem9udGFsUnVsZVN0eWxlcyA9IGZ1bmN0aW9uIGV1aUhvcml6b250YWxSdWxlU3R5bGVzKF9yZWYpIHtcbiAgdmFyIGV1aVRoZW1lID0gX3JlZi5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICBldWlIb3Jpem9udGFsUnVsZTogLyojX19QVVJFX18qL2NzcyhcImJvcmRlcjpub25lO1wiLCBsb2dpY2FsQ1NTKCdoZWlnaHQnLCBldWlUaGVtZS5ib3JkZXIud2lkdGgudGhpbiksIFwiIGJhY2tncm91bmQtY29sb3I6XCIsIGV1aVRoZW1lLmJvcmRlci5jb2xvciwgXCI7ZmxleC1zaHJpbms6MDtmbGV4LWdyb3c6MDs7bGFiZWw6ZXVpSG9yaXpvbnRhbFJ1bGU7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgZnVsbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsO1wiKSxcbiAgICBoYWxmOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzUwJScpLCBcIiBcIiwgbG9naWNhbENTUygnbWFyZ2luLWhvcml6b250YWwnLCAnYXV0bycpLCBcIjs7bGFiZWw6aGFsZjtcIiksXG4gICAgcXVhcnRlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcyNSUnKSwgXCIgXCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1ob3Jpem9udGFsJywgJ2F1dG8nKSwgXCI7O2xhYmVsOnF1YXJ0ZXI7XCIpLFxuICAgIC8vIE1hcmdpbnNcbiAgICBub25lOiAnJyxcbiAgICB4czogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS5zLCBcIjs7bGFiZWw6eHM7XCIpLFxuICAgIHM6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUubSwgXCI7O2xhYmVsOnM7XCIpLFxuICAgIG06IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MoXCJtYXJnaW4tYmxvY2s6XCIsIGV1aVRoZW1lLnNpemUubCwgXCI7O2xhYmVsOmw7XCIpLFxuICAgIHhsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luLWJsb2NrOlwiLCBldWlUaGVtZS5zaXplLnhsLCBcIjs7bGFiZWw6eGw7XCIpLFxuICAgIHh4bDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbi1ibG9jazpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wibGFiZWxcIiwgXCJpZFwiLCBcImNoZWNrZWRcIiwgXCJkaXNhYmxlZFwiLCBcImNvbXByZXNzZWRcIiwgXCJvbkNoYW5nZVwiLCBcImNsYXNzTmFtZVwiLCBcInNob3dMYWJlbFwiLCBcInR5cGVcIiwgXCJsYWJlbFByb3BzXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVN3aXRjaCA9IGZ1bmN0aW9uIEV1aVN3aXRjaChfcmVmKSB7XG4gIHZhciBsYWJlbCA9IF9yZWYubGFiZWwsXG4gICAgICBpZCA9IF9yZWYuaWQsXG4gICAgICBjaGVja2VkID0gX3JlZi5jaGVja2VkLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICAgIG9uQ2hhbmdlID0gX3JlZi5vbkNoYW5nZSxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRzaG93TGFiZWwgPSBfcmVmLnNob3dMYWJlbCxcbiAgICAgIHNob3dMYWJlbCA9IF9yZWYkc2hvd0xhYmVsID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzaG93TGFiZWwsXG4gICAgICBfcmVmJHR5cGUgPSBfcmVmLnR5cGUsXG4gICAgICB0eXBlID0gX3JlZiR0eXBlID09PSB2b2lkIDAgPyAnYnV0dG9uJyA6IF9yZWYkdHlwZSxcbiAgICAgIGxhYmVsUHJvcHMgPSBfcmVmLmxhYmVsUHJvcHMsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHN3aXRjaElkID0gdXNlR2VuZXJhdGVkSHRtbElkKHtcbiAgICBjb25kaXRpb25hbElkOiBpZFxuICB9KTtcbiAgdmFyIGxhYmVsSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoe1xuICAgIGNvbmRpdGlvbmFsSWQ6IGxhYmVsUHJvcHMgPT09IG51bGwgfHwgbGFiZWxQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGFiZWxQcm9wcy5pZFxuICB9KTtcbiAgdmFyIG9uQ2xpY2sgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoZSkge1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBldmVudCA9IGU7XG4gICAgZXZlbnQudGFyZ2V0LmNoZWNrZWQgPSAhY2hlY2tlZDtcbiAgICBvbkNoYW5nZShldmVudCk7XG4gIH0sIFtjaGVja2VkLCBkaXNhYmxlZCwgb25DaGFuZ2VdKTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTd2l0Y2gnLCB7XG4gICAgJ2V1aVN3aXRjaC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWRcbiAgfSwgY2xhc3NOYW1lKTtcbiAgdmFyIGxhYmVsQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVN3aXRjaF9fbGFiZWwnLCBsYWJlbFByb3BzID09PSBudWxsIHx8IGxhYmVsUHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxhYmVsUHJvcHMuY2xhc3NOYW1lKTtcblxuICBpZiAoc2hvd0xhYmVsID09PSBmYWxzZSAmJiB0eXBlb2YgbGFiZWwgIT09ICdzdHJpbmcnKSB7XG4gICAgY29uc29sZS53YXJuKCdFdWlTd2l0Y2ggYGxhYmVsYCBtdXN0IGJlIGEgc3RyaW5nIHdoZW4gYHNob3dMYWJlbGAgaXMgZmFsc2UuJyk7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIF9fX0Vtb3Rpb25KU1goXCJidXR0b25cIiwgX2V4dGVuZHMoe1xuICAgIGlkOiBzd2l0Y2hJZCxcbiAgICBcImFyaWEtY2hlY2tlZFwiOiBjaGVja2VkIHx8IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2J1dHRvblwiLFxuICAgIHJvbGU6IFwic3dpdGNoXCIsXG4gICAgdHlwZTogdHlwZSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBcImFyaWEtbGFiZWxcIjogc2hvd0xhYmVsID8gdW5kZWZpbmVkIDogbGFiZWwsXG4gICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogc2hvd0xhYmVsID8gbGFiZWxJZCA6IHVuZGVmaW5lZFxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2JvZHlcIlxuICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVN3aXRjaF9fdGh1bWJcIlxuICB9KSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX3RyYWNrXCJcbiAgfSwgIWNvbXByZXNzZWQgJiYgX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJjcm9zc1wiLFxuICAgIHNpemU6IFwibVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2ljb25cIlxuICB9KSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJjaGVja1wiLFxuICAgIHNpemU6IFwibVwiLFxuICAgIGNsYXNzTmFtZTogXCJldWlTd2l0Y2hfX2ljb24gZXVpU3dpdGNoX19pY29uLS1jaGVja2VkXCJcbiAgfSkpKSkpLCBzaG93TGFiZWwgJiYgLy8gPGJ1dHRvbj4gKyA8bGFiZWw+IGhhcyBwb29yIHNjcmVlbiByZWFkZXIgc3VwcG9ydC5cbiAgLy8gQ2xpY2sgaGFuZGxlciBhZGRlZCB0byBzaW11bGF0ZSBuYXR1cmFsLCBzZWNvbmRhcnkgPGxhYmVsPiBpbnRlcmFjdGl2aXR5LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvbm8tbm9uaW50ZXJhY3RpdmUtZWxlbWVudC1pbnRlcmFjdGlvbnNcbiAgX19fRW1vdGlvbkpTWChcInNwYW5cIiwgX2V4dGVuZHMoe30sIGxhYmVsUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGxhYmVsQ2xhc3NlcyxcbiAgICBpZDogbGFiZWxJZCxcbiAgICBvbkNsaWNrOiBvbkNsaWNrXG4gIH0pLCBsYWJlbCkpO1xufTtcbkV1aVN3aXRjaC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSByZW5kZXIgdGhlIHRleHQgbGFiZWxcbiAgICAgICAqL1xuICBzaG93TGFiZWw6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogTXVzdCBiZSBhIHN0cmluZyBpZiBgc2hvd0xhYmVsYCBwcm9wIGlzIGZhbHNlXG4gICAgICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wic3VibWl0XCIsIFwicmVzZXRcIiwgXCJidXR0b25cIl0pLFxuXG4gIC8qKlxuICAgICAgICogT2JqZWN0IG9mIHByb3BzIHBhc3NlZCB0byB0aGUgbGFiZWwncyA8c3Bhbi8+XG4gICAgICAgKi9cbiAgbGFiZWxQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pXG59OyIsICJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbmV4cG9ydCB7IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgYXMgZGVmYXVsdCB9OyIsICJ2YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBsYXN0VGhpcztcbiAgICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgICB2YXIgbGFzdFJlc3VsdDtcbiAgICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgICAgICB2YXIgbmV3QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3QXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsZWRPbmNlICYmIGxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgbGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhbGxlZE9uY2UgPSB0cnVlO1xuICAgICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICAgIGxhc3RBcmdzID0gbmV3QXJncztcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBtZW1vaXplZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZU9uZTtcbiIsICJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmIChlLmluY2x1ZGVzKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCAiLy8gQGZsb3dcblxuLy8gQW5pbWF0aW9uIGZyYW1lIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNldFRpbWVvdXQuXG4vLyBJbnNwaXJlZCBieSBKb2UgTGFtYmVydCwgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vam9lbGFtYmVydC8xMDAyMTE2I2ZpbGUtcmVxdWVzdHRpbWVvdXQtanNcblxuY29uc3QgaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3cgPVxuICB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmNvbnN0IG5vdyA9IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93XG4gID8gKCkgPT4gcGVyZm9ybWFuY2Uubm93KClcbiAgOiAoKSA9PiBEYXRlLm5vdygpO1xuXG5leHBvcnQgdHlwZSBUaW1lb3V0SUQgPSB7fFxuICBpZDogQW5pbWF0aW9uRnJhbWVJRCxcbnx9O1xuXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsVGltZW91dCh0aW1lb3V0SUQ6IFRpbWVvdXRJRCkge1xuICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lb3V0SUQuaWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQoY2FsbGJhY2s6IEZ1bmN0aW9uLCBkZWxheTogbnVtYmVyKTogVGltZW91dElEIHtcbiAgY29uc3Qgc3RhcnQgPSBub3coKTtcblxuICBmdW5jdGlvbiB0aWNrKCkge1xuICAgIGlmIChub3coKSAtIHN0YXJ0ID49IGRlbGF5KSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lb3V0SUQuaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGltZW91dElEOiBUaW1lb3V0SUQgPSB7XG4gICAgaWQ6IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKSxcbiAgfTtcblxuICByZXR1cm4gdGltZW91dElEO1xufVxuIiwgIi8vIEBmbG93XG5cbmxldCBzaXplOiBudW1iZXIgPSAtMTtcblxuLy8gVGhpcyB1dGlsaXR5IGNvcGllZCBmcm9tIFwiZG9tLWhlbHBlcnNcIiBwYWNrYWdlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcm9sbGJhclNpemUocmVjYWxjdWxhdGU/OiBib29sZWFuID0gZmFsc2UpOiBudW1iZXIge1xuICBpZiAoc2l6ZSA9PT0gLTEgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBzdHlsZSA9IGRpdi5zdHlsZTtcbiAgICBzdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBzdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5hcHBlbmRDaGlsZChkaXYpO1xuXG4gICAgc2l6ZSA9IGRpdi5vZmZzZXRXaWR0aCAtIGRpdi5jbGllbnRXaWR0aDtcblxuICAgICgoZG9jdW1lbnQuYm9keTogYW55KTogSFRNTEJvZHlFbGVtZW50KS5yZW1vdmVDaGlsZChkaXYpO1xuICB9XG5cbiAgcmV0dXJuIHNpemU7XG59XG5cbmV4cG9ydCB0eXBlIFJUTE9mZnNldFR5cGUgPVxuICB8ICduZWdhdGl2ZSdcbiAgfCAncG9zaXRpdmUtZGVzY2VuZGluZydcbiAgfCAncG9zaXRpdmUtYXNjZW5kaW5nJztcblxubGV0IGNhY2hlZFJUTFJlc3VsdDogUlRMT2Zmc2V0VHlwZSB8IG51bGwgPSBudWxsO1xuXG4vLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4vLyBDaHJvbWUgZG9lcyBub3Qgc2VlbSB0byBhZGhlcmU7IGl0cyBzY3JvbGxMZWZ0IHZhbHVlcyBhcmUgcG9zaXRpdmUgKG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbi8vIFNhZmFyaSdzIGVsYXN0aWMgYm91bmNlIG1ha2VzIGRldGVjdGluZyB0aGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCB3cnQgcG90ZW50aWFsIGZhbHNlIHBvc2l0aXZlcy5cbi8vIFRoZSBzYWZlc3Qgd2F5IHRvIGNoZWNrIHRoaXMgaXMgdG8gaW50ZW50aW9uYWxseSBzZXQgYSBuZWdhdGl2ZSBvZmZzZXQsXG4vLyBhbmQgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgc3Vic2VxdWVudCBcInNjcm9sbFwiIGV2ZW50IG1hdGNoZXMgdGhlIG5lZ2F0aXZlIG9mZnNldC5cbi8vIElmIGl0IGRvZXMgbm90IG1hdGNoLCB0aGVuIHdlIGNhbiBhc3N1bWUgYSBub24tc3RhbmRhcmQgUlRMIHNjcm9sbCBpbXBsZW1lbnRhdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSVExPZmZzZXRUeXBlKHJlY2FsY3VsYXRlPzogYm9vbGVhbiA9IGZhbHNlKTogUlRMT2Zmc2V0VHlwZSB7XG4gIGlmIChjYWNoZWRSVExSZXN1bHQgPT09IG51bGwgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICBjb25zdCBvdXRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IG91dGVyU3R5bGUgPSBvdXRlckRpdi5zdHlsZTtcbiAgICBvdXRlclN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBvdXRlclN0eWxlLmRpcmVjdGlvbiA9ICdydGwnO1xuXG4gICAgY29uc3QgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBpbm5lclN0eWxlID0gaW5uZXJEaXYuc3R5bGU7XG4gICAgaW5uZXJTdHlsZS53aWR0aCA9ICcxMDBweCc7XG4gICAgaW5uZXJTdHlsZS5oZWlnaHQgPSAnMTAwcHgnO1xuXG4gICAgb3V0ZXJEaXYuYXBwZW5kQ2hpbGQoaW5uZXJEaXYpO1xuXG4gICAgKChkb2N1bWVudC5ib2R5OiBhbnkpOiBIVE1MQm9keUVsZW1lbnQpLmFwcGVuZENoaWxkKG91dGVyRGl2KTtcblxuICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID4gMCkge1xuICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRlckRpdi5zY3JvbGxMZWZ0ID0gMTtcbiAgICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID09PSAwKSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICduZWdhdGl2ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtYXNjZW5kaW5nJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAoKGRvY3VtZW50LmJvZHk6IGFueSk6IEhUTUxCb2R5RWxlbWVudCkucmVtb3ZlQ2hpbGQob3V0ZXJEaXYpO1xuXG4gICAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG59XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNhbmNlbFRpbWVvdXQsIHJlcXVlc3RUaW1lb3V0IH0gZnJvbSAnLi90aW1lcic7XG5pbXBvcnQgeyBnZXRTY3JvbGxiYXJTaXplLCBnZXRSVExPZmZzZXRUeXBlIH0gZnJvbSAnLi9kb21IZWxwZXJzJztcblxuaW1wb3J0IHR5cGUgeyBUaW1lb3V0SUQgfSBmcm9tICcuL3RpbWVyJztcblxudHlwZSBEaXJlY3Rpb24gPSAnbHRyJyB8ICdydGwnO1xuZXhwb3J0IHR5cGUgU2Nyb2xsVG9BbGlnbiA9ICdhdXRvJyB8ICdzbWFydCcgfCAnY2VudGVyJyB8ICdzdGFydCcgfCAnZW5kJztcblxudHlwZSBpdGVtU2l6ZSA9IG51bWJlciB8ICgoaW5kZXg6IG51bWJlcikgPT4gbnVtYmVyKTtcblxudHlwZSBSZW5kZXJDb21wb25lbnRQcm9wczxUPiA9IHt8XG4gIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gIGRhdGE6IFQsXG4gIGlzU2Nyb2xsaW5nPzogYm9vbGVhbixcbiAgcm93SW5kZXg6IG51bWJlcixcbiAgc3R5bGU6IE9iamVjdCxcbnx9O1xuZXhwb3J0IHR5cGUgUmVuZGVyQ29tcG9uZW50PFQ+ID0gUmVhY3QkQ29tcG9uZW50VHlwZTxcbiAgJFNoYXBlPFJlbmRlckNvbXBvbmVudFByb3BzPFQ+PlxuPjtcblxudHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuXG50eXBlIE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrID0gKHtcbiAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICBvdmVyc2NhblJvd1N0b3BJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVSb3dTdGFydEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVSb3dTdG9wSW5kZXg6IG51bWJlcixcbn0pID0+IHZvaWQ7XG50eXBlIE9uU2Nyb2xsQ2FsbGJhY2sgPSAoe1xuICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbiAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbn0pID0+IHZvaWQ7XG5cbnR5cGUgU2Nyb2xsRXZlbnQgPSBTeW50aGV0aWNFdmVudDxIVE1MRGl2RWxlbWVudD47XG50eXBlIEl0ZW1TdHlsZUNhY2hlID0geyBba2V5OiBzdHJpbmddOiBPYmplY3QgfTtcblxudHlwZSBPdXRlclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIGNsYXNzTmFtZTogc3RyaW5nIHwgdm9pZCxcbiAgb25TY3JvbGw6IFNjcm9sbEV2ZW50ID0+IHZvaWQsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbnR5cGUgSW5uZXJQcm9wcyA9IHt8XG4gIGNoaWxkcmVuOiBSZWFjdCROb2RlLFxuICBzdHlsZToge1xuICAgIFtzdHJpbmddOiBtaXhlZCxcbiAgfSxcbnx9O1xuXG5leHBvcnQgdHlwZSBQcm9wczxUPiA9IHt8XG4gIGNoaWxkcmVuOiBSZW5kZXJDb21wb25lbnQ8VD4sXG4gIGNsYXNzTmFtZT86IHN0cmluZyxcbiAgY29sdW1uQ291bnQ6IG51bWJlcixcbiAgY29sdW1uV2lkdGg6IGl0ZW1TaXplLFxuICBkaXJlY3Rpb246IERpcmVjdGlvbixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGluaXRpYWxTY3JvbGxMZWZ0PzogbnVtYmVyLFxuICBpbml0aWFsU2Nyb2xsVG9wPzogbnVtYmVyLFxuICBpbm5lclJlZj86IGFueSxcbiAgaW5uZXJFbGVtZW50VHlwZT86IHN0cmluZyB8IFJlYWN0JEFic3RyYWN0Q29tcG9uZW50PElubmVyUHJvcHMsIGFueT4sXG4gIGlubmVyVGFnTmFtZT86IHN0cmluZywgLy8gZGVwcmVjYXRlZFxuICBpdGVtRGF0YTogVCxcbiAgaXRlbUtleT86IChwYXJhbXM6IHt8XG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBkYXRhOiBULFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gIHx9KSA9PiBhbnksXG4gIG9uSXRlbXNSZW5kZXJlZD86IE9uSXRlbXNSZW5kZXJlZENhbGxiYWNrLFxuICBvblNjcm9sbD86IE9uU2Nyb2xsQ2FsbGJhY2ssXG4gIG91dGVyUmVmPzogYW55LFxuICBvdXRlckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8T3V0ZXJQcm9wcywgYW55PixcbiAgb3V0ZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ29sdW1uQ291bnQ/OiBudW1iZXIsXG4gIG92ZXJzY2FuQ29sdW1uc0NvdW50PzogbnVtYmVyLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ291bnQ/OiBudW1iZXIsIC8vIGRlcHJlY2F0ZWRcbiAgb3ZlcnNjYW5Sb3dDb3VudD86IG51bWJlcixcbiAgb3ZlcnNjYW5Sb3dzQ291bnQ/OiBudW1iZXIsIC8vIGRlcHJlY2F0ZWRcbiAgcm93Q291bnQ6IG51bWJlcixcbiAgcm93SGVpZ2h0OiBpdGVtU2l6ZSxcbiAgc3R5bGU/OiBPYmplY3QsXG4gIHVzZUlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICB3aWR0aDogbnVtYmVyLFxufH07XG5cbnR5cGUgU3RhdGUgPSB7fFxuICBpbnN0YW5jZTogYW55LFxuICBpc1Njcm9sbGluZzogYm9vbGVhbixcbiAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG4gIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG58fTtcblxudHlwZSBnZXRJdGVtT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgZ2V0SXRlbVNpemUgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlUHJvcHM6IGFueSkgPT4gbnVtYmVyO1xudHlwZSBHZXRPZmZzZXRGb3JJdGVtQW5kQWxpZ25tZW50ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnksXG4gIHNjcm9sbGJhclNpemU6IG51bWJlclxuKSA9PiBudW1iZXI7XG50eXBlIEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBvZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIGluc3RhbmNlUHJvcHM6IGFueVxuKSA9PiBudW1iZXI7XG50eXBlIEluaXRJbnN0YW5jZVByb3BzID0gKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KSA9PiBhbnk7XG50eXBlIFZhbGlkYXRlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4pID0+IHZvaWQ7XG5cbmNvbnN0IElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxuY29uc3QgZGVmYXVsdEl0ZW1LZXkgPSAoeyBjb2x1bW5JbmRleCwgZGF0YSwgcm93SW5kZXggfSkgPT5cbiAgYCR7cm93SW5kZXh9OiR7Y29sdW1uSW5kZXh9YDtcblxuLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5sZXQgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbnVsbDtcbmxldCBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG5ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lID0gbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBnZXRDb2x1bW5XaWR0aCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50LFxuICBnZXRSb3dIZWlnaHQsXG4gIGdldFJvd09mZnNldCxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gIHZhbGlkYXRlUHJvcHMsXG59OiB7fFxuICBnZXRDb2x1bW5PZmZzZXQ6IGdldEl0ZW1PZmZzZXQsXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IEdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IEdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gIGdldENvbHVtbldpZHRoOiBnZXRJdGVtU2l6ZSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IEdldE9mZnNldEZvckl0ZW1BbmRBbGlnbm1lbnQsXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogR2V0T2Zmc2V0Rm9ySXRlbUFuZEFsaWdubWVudCxcbiAgZ2V0Um93T2Zmc2V0OiBnZXRJdGVtT2Zmc2V0LFxuICBnZXRSb3dIZWlnaHQ6IGdldEl0ZW1TaXplLFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBHZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wczogSW5pdEluc3RhbmNlUHJvcHMsXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGJvb2xlYW4sXG4gIHZhbGlkYXRlUHJvcHM6IFZhbGlkYXRlUHJvcHMsXG58fSkge1xuICByZXR1cm4gY2xhc3MgR3JpZDxUPiBleHRlbmRzIFB1cmVDb21wb25lbnQ8UHJvcHM8VD4sIFN0YXRlPiB7XG4gICAgX2luc3RhbmNlUHJvcHM6IGFueSA9IGluaXRJbnN0YW5jZVByb3BzKHRoaXMucHJvcHMsIHRoaXMpO1xuICAgIF9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkOiBUaW1lb3V0SUQgfCBudWxsID0gbnVsbDtcbiAgICBfb3V0ZXJSZWY6ID9IVE1MRGl2RWxlbWVudDtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgc3RhdGU6IFN0YXRlID0ge1xuICAgICAgaW5zdGFuY2U6IHRoaXMsXG4gICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICBzY3JvbGxMZWZ0OlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHRoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnRcbiAgICAgICAgICA6IDAsXG4gICAgICBzY3JvbGxUb3A6XG4gICAgICAgIHR5cGVvZiB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInXG4gICAgICAgICAgPyB0aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3BcbiAgICAgICAgICA6IDAsXG4gICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICB9O1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxUPikge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFByb3BzPFQ+LFxuICAgICAgcHJldlN0YXRlOiBTdGF0ZVxuICAgICk6ICRTaGFwZTxTdGF0ZT4gfCBudWxsIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG8oe1xuICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcCxcbiAgICB9OiB7XG4gICAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICB9KTogdm9pZCB7XG4gICAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzY3JvbGxUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gcHJldlN0YXRlLnNjcm9sbExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsVG9wID0gcHJldlN0YXRlLnNjcm9sbFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJlxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWUsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsVG9wIDwgc2Nyb2xsVG9wID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH1cblxuICAgIHNjcm9sbFRvSXRlbSh7XG4gICAgICBhbGlnbiA9ICdhdXRvJyxcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgcm93SW5kZXgsXG4gICAgfToge1xuICAgICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgICBjb2x1bW5JbmRleD86IG51bWJlcixcbiAgICAgIHJvd0luZGV4PzogbnVtYmVyLFxuICAgIH0pOiB2b2lkIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uQ291bnQsIGhlaWdodCwgcm93Q291bnQsIHdpZHRoIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gZ2V0U2Nyb2xsYmFyU2l6ZSgpO1xuXG4gICAgICBpZiAoY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb2x1bW5JbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkluZGV4LCBjb2x1bW5Db3VudCAtIDEpKTtcbiAgICAgIH1cbiAgICAgIGlmIChyb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvd0luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93SW5kZXgsIHJvd0NvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzXG4gICAgICApO1xuICAgICAgY29uc3QgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldyxcbiAgICAgIC8vIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuICAgICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbGJhclNpemUgPVxuICAgICAgICBlc3RpbWF0ZWRUb3RhbFdpZHRoID4gd2lkdGggPyBzY3JvbGxiYXJTaXplIDogMDtcbiAgICAgIGNvbnN0IHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgIGVzdGltYXRlZFRvdGFsSGVpZ2h0ID4gaGVpZ2h0ID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG8oe1xuICAgICAgICBzY3JvbGxMZWZ0OlxuICAgICAgICAgIGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KFxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgYWxpZ24sXG4gICAgICAgICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFRvcDpcbiAgICAgICAgICByb3dJbmRleCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgIGFsaWduLFxuICAgICAgICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVByb3BzLFxuICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJTaXplXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogc2Nyb2xsVG9wLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IGluaXRpYWxTY3JvbGxMZWZ0LCBpbml0aWFsU2Nyb2xsVG9wIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvdXRlclJlZiA9ICgodGhpcy5fb3V0ZXJSZWY6IGFueSk6IEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxUb3A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbExlZnQsIHNjcm9sbFRvcCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGgsIHNjcm9sbFdpZHRoIH0gPSBvdXRlclJlZjtcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHNjcm9sbExlZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBpbm5lclJlZixcbiAgICAgICAgaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgaW5uZXJUYWdOYW1lLFxuICAgICAgICBpdGVtRGF0YSxcbiAgICAgICAgaXRlbUtleSA9IGRlZmF1bHRJdGVtS2V5LFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICBvdXRlclRhZ05hbWUsXG4gICAgICAgIHJvd0NvdW50LFxuICAgICAgICBzdHlsZSxcbiAgICAgICAgdXNlSXNTY3JvbGxpbmcsXG4gICAgICAgIHdpZHRoLFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IGlzU2Nyb2xsaW5nIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBjb25zdCBbXG4gICAgICAgIGNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgIGNvbHVtblN0b3BJbmRleCxcbiAgICAgIF0gPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpO1xuICAgICAgY29uc3QgW3Jvd1N0YXJ0SW5kZXgsIHJvd1N0b3BJbmRleF0gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKTtcblxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgIGlmIChjb2x1bW5Db3VudCA+IDAgJiYgcm93Q291bnQpIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBsZXQgcm93SW5kZXggPSByb3dTdGFydEluZGV4O1xuICAgICAgICAgIHJvd0luZGV4IDw9IHJvd1N0b3BJbmRleDtcbiAgICAgICAgICByb3dJbmRleCsrXG4gICAgICAgICkge1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBsZXQgY29sdW1uSW5kZXggPSBjb2x1bW5TdGFydEluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXggPD0gY29sdW1uU3RvcEluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXgrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGtleTogaXRlbUtleSh7IGNvbHVtbkluZGV4LCBkYXRhOiBpdGVtRGF0YSwgcm93SW5kZXggfSksXG4gICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShyb3dJbmRleCwgY29sdW1uSW5kZXgpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cbiAgICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIG9uU2Nyb2xsOiB0aGlzLl9vblNjcm9sbCxcbiAgICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGhlaWdodDogZXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHdpZHRoOiBlc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkOiAoXG4gICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIHZpc2libGVSb3dTdG9wSW5kZXg6IG51bWJlclxuICAgICkgPT4gdm9pZDtcbiAgICBfY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoXG4gICAgICAoXG4gICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4OiBudW1iZXJcbiAgICAgICkgPT5cbiAgICAgICAgKCh0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZDogYW55KTogT25JdGVtc1JlbmRlcmVkQ2FsbGJhY2spKHtcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxPblNjcm9sbDogKFxuICAgICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBzY3JvbGxMZWZ0OiBudW1iZXIsXG4gICAgICAgIHNjcm9sbFRvcDogbnVtYmVyLFxuICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25TY3JvbGw6IGFueSk6IE9uU2Nyb2xsQ2FsbGJhY2spKHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uQ291bnQsIG9uSXRlbXNSZW5kZXJlZCwgb25TY3JvbGwsIHJvd0NvdW50IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIG9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50ID4gMCkge1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpO1xuICAgICAgICAgIGNvbnN0IFtcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4LFxuICAgICAgICAgIF0gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKFxuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoXG4gICAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIF9nZXRJdGVtU3R5bGU6IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiBPYmplY3Q7XG4gICAgX2dldEl0ZW1TdHlsZSA9IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKTogT2JqZWN0ID0+IHtcbiAgICAgIGNvbnN0IHsgY29sdW1uV2lkdGgsIGRpcmVjdGlvbiwgcm93SGVpZ2h0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBpdGVtU3R5bGVDYWNoZSA9IHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGNvbHVtbldpZHRoLFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbixcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiByb3dIZWlnaHRcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fToke2NvbHVtbkluZGV4fWA7XG5cbiAgICAgIGxldCBzdHlsZTtcbiAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGdldENvbHVtbk9mZnNldChcbiAgICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICBpdGVtU3R5bGVDYWNoZVtrZXldID0gc3R5bGUgPSB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBvZmZzZXQsXG4gICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0IDogdW5kZWZpbmVkLFxuICAgICAgICAgIHRvcDogZ2V0Um93T2Zmc2V0KHRoaXMucHJvcHMsIHJvd0luZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICBoZWlnaHQ6IGdldFJvd0hlaWdodCh0aGlzLnByb3BzLCByb3dJbmRleCwgdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgd2lkdGg6IGdldENvbHVtbldpZHRoKHRoaXMucHJvcHMsIGNvbHVtbkluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH07XG5cbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGU6IChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiBJdGVtU3R5bGVDYWNoZTtcbiAgICBfZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKChfOiBhbnksIF9fOiBhbnksIF9fXzogYW55KSA9PiAoe30pKTtcblxuICAgIF9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvbHVtbkNvdW50LFxuICAgICAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgICAgb3ZlcnNjYW5Db3VudCxcbiAgICAgICAgcm93Q291bnQsXG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiwgaXNTY3JvbGxpbmcsIHNjcm9sbExlZnQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQ291bnRSZXNvbHZlZDogbnVtYmVyID1cbiAgICAgICAgb3ZlcnNjYW5Db2x1bW5Db3VudCB8fCBvdmVyc2NhbkNvbHVtbnNDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChcbiAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHN0b3BJbmRleCA9IGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcbiAgICAgIGNvbnN0IG92ZXJzY2FuRm9yd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgc3RvcEluZGV4LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgIG92ZXJzY2FuQ291bnQsXG4gICAgICAgIG92ZXJzY2FuUm93Q291bnQsXG4gICAgICAgIG92ZXJzY2FuUm93c0NvdW50LFxuICAgICAgICByb3dDb3VudCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZywgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sIHNjcm9sbFRvcCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgY29uc3Qgb3ZlcnNjYW5Db3VudFJlc29sdmVkOiBudW1iZXIgPVxuICAgICAgICBvdmVyc2NhblJvd0NvdW50IHx8IG92ZXJzY2FuUm93c0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCdcbiAgICAgICAgICA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZClcbiAgICAgICAgICA6IDE7XG4gICAgICBjb25zdCBvdmVyc2NhbkZvcndhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKVxuICAgICAgICAgIDogMTtcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLFxuICAgICAgICBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzdG9wSW5kZXgsXG4gICAgICBdO1xuICAgIH1cblxuICAgIF9vblNjcm9sbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgICAgICBjbGllbnRXaWR0aCxcbiAgICAgICAgc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgfSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJlxuICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBkaXJlY3Rpb24gfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuICAgICAgICBsZXQgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oY2FsY3VsYXRlZFNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRTY3JvbGxUb3AgPSBNYXRoLm1heChcbiAgICAgICAgICAwLFxuICAgICAgICAgIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogY2FsY3VsYXRlZFNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBjYWxjdWxhdGVkU2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb3V0ZXJSZWZTZXR0ZXIgPSAocmVmOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgb3V0ZXJSZWYgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIHRoaXMuX291dGVyUmVmID0gKChyZWY6IGFueSk6IEhUTUxEaXZFbGVtZW50KTtcblxuICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgb3V0ZXJSZWYgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmXG4gICAgICAgIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JylcbiAgICAgICkge1xuICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChcbiAgICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZyxcbiAgICAgICAgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfcmVzZXRJc1Njcm9sbGluZyA9ICgpID0+IHtcbiAgICAgIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXNTY3JvbGxpbmc6IGZhbHNlIH0sICgpID0+IHtcbiAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICB0aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG5jb25zdCB2YWxpZGF0ZVNoYXJlZFByb3BzID0gKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgZGlyZWN0aW9uLFxuICAgIGhlaWdodCxcbiAgICBpbm5lclRhZ05hbWUsXG4gICAgb3V0ZXJUYWdOYW1lLFxuICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgIG92ZXJzY2FuQ291bnQsXG4gICAgb3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgd2lkdGgsXG4gIH06IFByb3BzPGFueT4sXG4gIHsgaW5zdGFuY2UgfTogU3RhdGVcbik6IHZvaWQgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2Ygb3ZlcnNjYW5Db3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1RoZSBvdmVyc2NhbkNvdW50IHByb3AgaGFzIGJlZW4gZGVwcmVjYXRlZC4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3ZlcnNjYW5Db2x1bW5zQ291bnQgPT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlb2Ygb3ZlcnNjYW5Sb3dzQ291bnQgPT09ICdudW1iZXInXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ICYmXG4gICAgICAgICFkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5oYXMoaW5zdGFuY2UpXG4gICAgICApIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdUaGUgb3ZlcnNjYW5Db2x1bW5zQ291bnQgYW5kIG92ZXJzY2FuUm93c0NvdW50IHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICtcbiAgICAgICAgICBgXCIke2NoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICtcbiAgICAgICAgICAgIGBcIiR7ZGlyZWN0aW9ufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArXG4gICAgICAgICAgYFwiJHt3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICtcbiAgICAgICAgICBgXCIke2hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH1cbiAgfVxufTtcbiIsICIvLyBAZmxvd1xuXG5pbXBvcnQgY3JlYXRlR3JpZENvbXBvbmVudCBmcm9tICcuL2NyZWF0ZUdyaWRDb21wb25lbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFByb3BzLCBTY3JvbGxUb0FsaWduIH0gZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuY29uc3QgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFID0gNTA7XG5cbnR5cGUgVmFyaWFibGVTaXplUHJvcHMgPSB7fFxuICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogbnVtYmVyLFxuICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IG51bWJlcixcbiAgLi4uUHJvcHM8YW55Pixcbnx9O1xuXG50eXBlIGl0ZW1TaXplR2V0dGVyID0gKGluZGV4OiBudW1iZXIpID0+IG51bWJlcjtcbnR5cGUgSXRlbVR5cGUgPSAnY29sdW1uJyB8ICdyb3cnO1xuXG50eXBlIEl0ZW1NZXRhZGF0YSA9IHt8XG4gIG9mZnNldDogbnVtYmVyLFxuICBzaXplOiBudW1iZXIsXG58fTtcbnR5cGUgSXRlbU1ldGFkYXRhTWFwID0geyBbaW5kZXg6IG51bWJlcl06IEl0ZW1NZXRhZGF0YSB9O1xudHlwZSBJbnN0YW5jZVByb3BzID0ge3xcbiAgY29sdW1uTWV0YWRhdGFNYXA6IEl0ZW1NZXRhZGF0YU1hcCxcbiAgZXN0aW1hdGVkQ29sdW1uV2lkdGg6IG51bWJlcixcbiAgZXN0aW1hdGVkUm93SGVpZ2h0OiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4OiBudW1iZXIsXG4gIGxhc3RNZWFzdXJlZFJvd0luZGV4OiBudW1iZXIsXG4gIHJvd01ldGFkYXRhTWFwOiBJdGVtTWV0YWRhdGFNYXAsXG58fTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQgPSAoXG4gIHsgcm93Q291bnQgfTogUHJvcHM8YW55PixcbiAgeyByb3dNZXRhZGF0YU1hcCwgZXN0aW1hdGVkUm93SGVpZ2h0LCBsYXN0TWVhc3VyZWRSb3dJbmRleCB9OiBJbnN0YW5jZVByb3BzXG4pID0+IHtcbiAgbGV0IHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDtcblxuICAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gcm93Q291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IHJvd0NvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSAwKSB7XG4gICAgY29uc3QgaXRlbU1ldGFkYXRhID0gcm93TWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkUm93SW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gcm93Q291bnQgLSBsYXN0TWVhc3VyZWRSb3dJbmRleCAtIDE7XG4gIGNvbnN0IHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkUm93SGVpZ2h0O1xuXG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxuY29uc3QgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCA9IChcbiAgeyBjb2x1bW5Db3VudCB9OiBQcm9wczxhbnk+LFxuICB7XG4gICAgY29sdW1uTWV0YWRhdGFNYXAsXG4gICAgZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgsXG4gIH06IEluc3RhbmNlUHJvcHNcbikgPT4ge1xuICBsZXQgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwO1xuXG4gIC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSBjb2x1bW5Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gY29sdW1uQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IDApIHtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBjb2x1bW5NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRDb2x1bW5JbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICBjb25zdCBudW1Vbm1lYXN1cmVkSXRlbXMgPSBjb2x1bW5Db3VudCAtIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4IC0gMTtcbiAgY29uc3QgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRDb2x1bW5XaWR0aDtcblxuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IGdldEl0ZW1NZXRhZGF0YSA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuKTogSXRlbU1ldGFkYXRhID0+IHtcbiAgbGV0IGl0ZW1NZXRhZGF0YU1hcCwgaXRlbVNpemUsIGxhc3RNZWFzdXJlZEluZGV4O1xuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9ICgocHJvcHMuY29sdW1uV2lkdGg6IGFueSk6IGl0ZW1TaXplR2V0dGVyKTtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9ICgocHJvcHMucm93SGVpZ2h0OiBhbnkpOiBpdGVtU2l6ZUdldHRlcik7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgY29uc3QgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIGxldCBzaXplID0gaXRlbVNpemUoaSk7XG5cbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBzaXplLFxuICAgICAgfTtcblxuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW0gPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIG9mZnNldDogbnVtYmVyXG4pID0+IHtcbiAgbGV0IGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXg7XG4gIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGNvbnN0IGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPVxuICAgIGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCxcbiAgICAgIDAsXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKFxuICAgICAgaXRlbVR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSAoXG4gIGl0ZW1UeXBlOiBJdGVtVHlwZSxcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gIGhpZ2g6IG51bWJlcixcbiAgbG93OiBudW1iZXIsXG4gIG9mZnNldDogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICBjb25zdCBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICBpdGVtVHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgbWlkZGxlLFxuICAgICAgaW5zdGFuY2VQcm9wc1xuICAgICkub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgaW5kZXg6IG51bWJlcixcbiAgb2Zmc2V0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IGl0ZW1Db3VudCA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLmNvbHVtbkNvdW50IDogcHJvcHMucm93Q291bnQ7XG4gIGxldCBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKFxuICAgIGluZGV4IDwgaXRlbUNvdW50ICYmXG4gICAgZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldFxuICApIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICBpdGVtVHlwZSxcbiAgICBwcm9wcyxcbiAgICBpbnN0YW5jZVByb3BzLFxuICAgIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSxcbiAgICBNYXRoLmZsb29yKGluZGV4IC8gMiksXG4gICAgb2Zmc2V0XG4gICk7XG59O1xuXG5jb25zdCBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IChcbiAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IHNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy53aWR0aCA6IHByb3BzLmhlaWdodDtcbiAgY29uc3QgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuXG4gIC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG4gIGNvbnN0IGVzdGltYXRlZFRvdGFsU2l6ZSA9XG4gICAgaXRlbVR5cGUgPT09ICdjb2x1bW4nXG4gICAgICA/IGdldEVzdGltYXRlZFRvdGFsV2lkdGgocHJvcHMsIGluc3RhbmNlUHJvcHMpXG4gICAgICA6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHByb3BzLCBpbnN0YW5jZVByb3BzKTtcblxuICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1heChcbiAgICAwLFxuICAgIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpXG4gICk7XG4gIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgIDAsXG4gICAgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBzY3JvbGxiYXJTaXplICsgaXRlbU1ldGFkYXRhLnNpemVcbiAgKTtcblxuICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAoYWxpZ24pIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgfVxuICB9XG59O1xuXG5jb25zdCBWYXJpYWJsZVNpemVHcmlkID0gY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCxcblxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGZpbmROZWFyZXN0SXRlbSgnY29sdW1uJywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbExlZnQpLFxuXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsTGVmdDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IGNvbHVtbkNvdW50LCB3aWR0aCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICAnY29sdW1uJyxcbiAgICAgIHByb3BzLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbExlZnQgKyB3aWR0aDtcblxuICAgIGxldCBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgbGV0IHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgY29sdW1uQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG5cbiAgZ2V0Q29sdW1uV2lkdGg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXBbaW5kZXhdLnNpemUsXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG5cbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhbGlnbjogU2Nyb2xsVG9BbGlnbixcbiAgICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChcbiAgICAgICdjb2x1bW4nLFxuICAgICAgcHJvcHMsXG4gICAgICBpbmRleCxcbiAgICAgIGFsaWduLFxuICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIHNjcm9sbGJhclNpemVcbiAgICApLFxuXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAncm93JyxcbiAgICAgIHByb3BzLFxuICAgICAgaW5kZXgsXG4gICAgICBhbGlnbixcbiAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBzY3JvbGxiYXJTaXplXG4gICAgKSxcblxuICBnZXRSb3dPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQsXG5cbiAgZ2V0Um93SGVpZ2h0OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwW2luZGV4XS5zaXplLFxuXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzY3JvbGxUb3A6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBmaW5kTmVhcmVzdEl0ZW0oJ3JvdycsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxUb3ApLFxuXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHsgcm93Q291bnQsIGhlaWdodCB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoXG4gICAgICAncm93JyxcbiAgICAgIHByb3BzLFxuICAgICAgc3RhcnRJbmRleCxcbiAgICAgIGluc3RhbmNlUHJvcHNcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbFRvcCArIGhlaWdodDtcblxuICAgIGxldCBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgbGV0IHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgcm93Q291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG5cbiAgaW5pdEluc3RhbmNlUHJvcHMocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpOiBJbnN0YW5jZVByb3BzIHtcbiAgICBjb25zdCB7XG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICAgIGVzdGltYXRlZFJvd0hlaWdodCxcbiAgICB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGNvbHVtbk1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoOiBlc3RpbWF0ZWRDb2x1bW5XaWR0aCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IGVzdGltYXRlZFJvd0hlaWdodCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogLTEsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleDogLTEsXG4gICAgICByb3dNZXRhZGF0YU1hcDoge30sXG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJDb2x1bW5JbmRleCA9IChcbiAgICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZT86IGJvb2xlYW4gPSB0cnVlXG4gICAgKSA9PiB7XG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7IGNvbHVtbkluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlclJvd0luZGV4ID0gKFxuICAgICAgcm93SW5kZXg6IG51bWJlcixcbiAgICAgIHNob3VsZEZvcmNlVXBkYXRlPzogYm9vbGVhbiA9IHRydWVcbiAgICApID0+IHtcbiAgICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzKHsgcm93SW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlIH0pO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyA9ICh7XG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlLFxuICAgIH06IHtcbiAgICAgIGNvbHVtbkluZGV4PzogbnVtYmVyLFxuICAgICAgcm93SW5kZXg/OiBudW1iZXIsXG4gICAgICBzaG91bGRGb3JjZVVwZGF0ZTogYm9vbGVhbixcbiAgICB9KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbkluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleCAtIDFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygcm93SW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBNYXRoLm1pbihcbiAgICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4LFxuICAgICAgICAgIHJvd0luZGV4IC0gMVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcblxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBjb2x1bW5XaWR0aCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7XG4gICAgICAgICAgICAgIGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoXG4gICAgICAgICAgICB9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgK1xuICAgICAgICAgICAgYFwiJHtyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBWYXJpYWJsZVNpemVHcmlkO1xuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjYW5jZWxUaW1lb3V0LCByZXF1ZXN0VGltZW91dCB9IGZyb20gJy4vdGltZXInO1xuaW1wb3J0IHsgZ2V0U2Nyb2xsYmFyU2l6ZSwgZ2V0UlRMT2Zmc2V0VHlwZSB9IGZyb20gJy4vZG9tSGVscGVycyc7XG5cbmltcG9ydCB0eXBlIHsgVGltZW91dElEIH0gZnJvbSAnLi90aW1lcic7XG5cbmV4cG9ydCB0eXBlIFNjcm9sbFRvQWxpZ24gPSAnYXV0bycgfCAnc21hcnQnIHwgJ2NlbnRlcicgfCAnc3RhcnQnIHwgJ2VuZCc7XG5cbnR5cGUgaXRlbVNpemUgPSBudW1iZXIgfCAoKGluZGV4OiBudW1iZXIpID0+IG51bWJlcik7XG4vLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb25zIFwiaG9yaXpvbnRhbFwiIGFuZCBcInZlcnRpY2FsXCJcbnR5cGUgRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJyB8ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG50eXBlIExheW91dCA9ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG5cbnR5cGUgUmVuZGVyQ29tcG9uZW50UHJvcHM8VD4gPSB7fFxuICBkYXRhOiBULFxuICBpbmRleDogbnVtYmVyLFxuICBpc1Njcm9sbGluZz86IGJvb2xlYW4sXG4gIHN0eWxlOiBPYmplY3QsXG58fTtcbnR5cGUgUmVuZGVyQ29tcG9uZW50PFQ+ID0gUmVhY3QkQ29tcG9uZW50VHlwZTwkU2hhcGU8UmVuZGVyQ29tcG9uZW50UHJvcHM8VD4+PjtcblxudHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnZm9yd2FyZCcgfCAnYmFja3dhcmQnO1xuXG50eXBlIG9uSXRlbXNSZW5kZXJlZENhbGxiYWNrID0gKHtcbiAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVTdGFydEluZGV4OiBudW1iZXIsXG4gIHZpc2libGVTdG9wSW5kZXg6IG51bWJlcixcbn0pID0+IHZvaWQ7XG50eXBlIG9uU2Nyb2xsQ2FsbGJhY2sgPSAoe1xuICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhbixcbn0pID0+IHZvaWQ7XG5cbnR5cGUgU2Nyb2xsRXZlbnQgPSBTeW50aGV0aWNFdmVudDxIVE1MRGl2RWxlbWVudD47XG50eXBlIEl0ZW1TdHlsZUNhY2hlID0geyBbaW5kZXg6IG51bWJlcl06IE9iamVjdCB9O1xuXG50eXBlIE91dGVyUHJvcHMgPSB7fFxuICBjaGlsZHJlbjogUmVhY3QkTm9kZSxcbiAgY2xhc3NOYW1lOiBzdHJpbmcgfCB2b2lkLFxuICBvblNjcm9sbDogU2Nyb2xsRXZlbnQgPT4gdm9pZCxcbiAgc3R5bGU6IHtcbiAgICBbc3RyaW5nXTogbWl4ZWQsXG4gIH0sXG58fTtcblxudHlwZSBJbm5lclByb3BzID0ge3xcbiAgY2hpbGRyZW46IFJlYWN0JE5vZGUsXG4gIHN0eWxlOiB7XG4gICAgW3N0cmluZ106IG1peGVkLFxuICB9LFxufH07XG5cbmV4cG9ydCB0eXBlIFByb3BzPFQ+ID0ge3xcbiAgY2hpbGRyZW46IFJlbmRlckNvbXBvbmVudDxUPixcbiAgY2xhc3NOYW1lPzogc3RyaW5nLFxuICBkaXJlY3Rpb246IERpcmVjdGlvbixcbiAgaGVpZ2h0OiBudW1iZXIgfCBzdHJpbmcsXG4gIGluaXRpYWxTY3JvbGxPZmZzZXQ/OiBudW1iZXIsXG4gIGlubmVyUmVmPzogYW55LFxuICBpbm5lckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8SW5uZXJQcm9wcywgYW55PixcbiAgaW5uZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIGl0ZW1Db3VudDogbnVtYmVyLFxuICBpdGVtRGF0YTogVCxcbiAgaXRlbUtleT86IChpbmRleDogbnVtYmVyLCBkYXRhOiBUKSA9PiBhbnksXG4gIGl0ZW1TaXplOiBpdGVtU2l6ZSxcbiAgbGF5b3V0OiBMYXlvdXQsXG4gIG9uSXRlbXNSZW5kZXJlZD86IG9uSXRlbXNSZW5kZXJlZENhbGxiYWNrLFxuICBvblNjcm9sbD86IG9uU2Nyb2xsQ2FsbGJhY2ssXG4gIG91dGVyUmVmPzogYW55LFxuICBvdXRlckVsZW1lbnRUeXBlPzogc3RyaW5nIHwgUmVhY3QkQWJzdHJhY3RDb21wb25lbnQ8T3V0ZXJQcm9wcywgYW55PixcbiAgb3V0ZXJUYWdOYW1lPzogc3RyaW5nLCAvLyBkZXByZWNhdGVkXG4gIG92ZXJzY2FuQ291bnQ6IG51bWJlcixcbiAgc3R5bGU/OiBPYmplY3QsXG4gIHVzZUlzU2Nyb2xsaW5nOiBib29sZWFuLFxuICB3aWR0aDogbnVtYmVyIHwgc3RyaW5nLFxufH07XG5cbnR5cGUgU3RhdGUgPSB7fFxuICBpbnN0YW5jZTogYW55LFxuICBpc1Njcm9sbGluZzogYm9vbGVhbixcbiAgc2Nyb2xsRGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sXG4gIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGJvb2xlYW4sXG58fTtcblxudHlwZSBHZXRJdGVtT2Zmc2V0ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgaW5kZXg6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0SXRlbVNpemUgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlUHJvcHM6IGFueSkgPT4gbnVtYmVyO1xudHlwZSBHZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgR2V0U3RhcnRJbmRleEZvck9mZnNldCA9IChcbiAgcHJvcHM6IFByb3BzPGFueT4sXG4gIG9mZnNldDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBhbnlcbikgPT4gbnVtYmVyO1xudHlwZSBHZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gKFxuICBwcm9wczogUHJvcHM8YW55PixcbiAgc3RhcnRJbmRleDogbnVtYmVyLFxuICBzY3JvbGxPZmZzZXQ6IG51bWJlcixcbiAgaW5zdGFuY2VQcm9wczogYW55XG4pID0+IG51bWJlcjtcbnR5cGUgSW5pdEluc3RhbmNlUHJvcHMgPSAocHJvcHM6IFByb3BzPGFueT4sIGluc3RhbmNlOiBhbnkpID0+IGFueTtcbnR5cGUgVmFsaWRhdGVQcm9wcyA9IChwcm9wczogUHJvcHM8YW55PikgPT4gdm9pZDtcblxuY29uc3QgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMID0gMTUwO1xuXG5jb25zdCBkZWZhdWx0SXRlbUtleSA9IChpbmRleDogbnVtYmVyLCBkYXRhOiBhbnkpID0+IGluZGV4O1xuXG4vLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cbmxldCBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IG51bGw7XG5sZXQgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSBuZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSA9IG5ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQsXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0SXRlbVNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICBpbml0SW5zdGFuY2VQcm9wcyxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSxcbiAgdmFsaWRhdGVQcm9wcyxcbn06IHt8XG4gIGdldEl0ZW1PZmZzZXQ6IEdldEl0ZW1PZmZzZXQsXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogR2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRJdGVtU2l6ZTogR2V0SXRlbVNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBHZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogR2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogR2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IEluaXRJbnN0YW5jZVByb3BzLFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBib29sZWFuLFxuICB2YWxpZGF0ZVByb3BzOiBWYWxpZGF0ZVByb3BzLFxufH0pIHtcbiAgcmV0dXJuIGNsYXNzIExpc3Q8VD4gZXh0ZW5kcyBQdXJlQ29tcG9uZW50PFByb3BzPFQ+LCBTdGF0ZT4ge1xuICAgIF9pbnN0YW5jZVByb3BzOiBhbnkgPSBpbml0SW5zdGFuY2VQcm9wcyh0aGlzLnByb3BzLCB0aGlzKTtcbiAgICBfb3V0ZXJSZWY6ID9IVE1MRGl2RWxlbWVudDtcbiAgICBfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZDogVGltZW91dElEIHwgbnVsbCA9IG51bGw7XG5cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgICBsYXlvdXQ6ICd2ZXJ0aWNhbCcsXG4gICAgICBvdmVyc2NhbkNvdW50OiAyLFxuICAgICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgIH07XG5cbiAgICBzdGF0ZTogU3RhdGUgPSB7XG4gICAgICBpbnN0YW5jZTogdGhpcyxcbiAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgIHNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgc2Nyb2xsT2Zmc2V0OlxuICAgICAgICB0eXBlb2YgdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0XG4gICAgICAgICAgOiAwLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wczxUPikge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICBuZXh0UHJvcHM6IFByb3BzPFQ+LFxuICAgICAgcHJldlN0YXRlOiBTdGF0ZVxuICAgICk6ICRTaGFwZTxTdGF0ZT4gfCBudWxsIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG8oc2Nyb2xsT2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIHNjcm9sbE9mZnNldCk7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOlxuICAgICAgICAgICAgcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9JdGVtKGluZGV4OiBudW1iZXIsIGFsaWduOiBTY3JvbGxUb0FsaWduID0gJ2F1dG8nKTogdm9pZCB7XG4gICAgICBjb25zdCB7IGl0ZW1Db3VudCwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBzY3JvbGxPZmZzZXQgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpKTtcblxuICAgICAgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LCB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cbiAgICAgIC8vIFRoaXMgaXMgYW4gZWRnZSBjYXNlIGZvciBsaXN0czsgbm9ybWFsbHkgdGhleSBvbmx5IHNjcm9sbCBpbiB0aGUgZG9taW5hbnQgZGlyZWN0aW9uLlxuICAgICAgbGV0IHNjcm9sbGJhclNpemUgPSAwO1xuICAgICAgaWYgKHRoaXMuX291dGVyUmVmKSB7XG4gICAgICAgIGNvbnN0IG91dGVyUmVmID0gKCh0aGlzLl9vdXRlclJlZjogYW55KTogSFRNTEVsZW1lbnQpO1xuICAgICAgICBpZiAobGF5b3V0ID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxXaWR0aCA+IG91dGVyUmVmLmNsaWVudFdpZHRoXG4gICAgICAgICAgICAgID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID1cbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbEhlaWdodCA+IG91dGVyUmVmLmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICA/IGdldFNjcm9sbGJhclNpemUoKVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUbyhcbiAgICAgICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoXG4gICAgICAgICAgdGhpcy5wcm9wcyxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBhbGlnbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgdGhpcy5faW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICBzY3JvbGxiYXJTaXplXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgaW5pdGlhbFNjcm9sbE9mZnNldCwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG4gICAgICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBsYXlvdXQgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7IHNjcm9sbE9mZnNldCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJSZWYgPSAoKHRoaXMuX291dGVyUmVmOiBhbnkpOiBIVE1MRWxlbWVudCk7XG5cbiAgICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoLCBzY3JvbGxXaWR0aCB9ID0gb3V0ZXJSZWY7XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaW5uZXJSZWYsXG4gICAgICAgIGlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgIGlubmVyVGFnTmFtZSxcbiAgICAgICAgaXRlbUNvdW50LFxuICAgICAgICBpdGVtRGF0YSxcbiAgICAgICAgaXRlbUtleSA9IGRlZmF1bHRJdGVtS2V5LFxuICAgICAgICBsYXlvdXQsXG4gICAgICAgIG91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgIG91dGVyVGFnTmFtZSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICB3aWR0aCxcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgeyBpc1Njcm9sbGluZyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgICBjb25zdCBpc0hvcml6b250YWwgPVxuICAgICAgICBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgICAgY29uc3Qgb25TY3JvbGwgPSBpc0hvcml6b250YWxcbiAgICAgICAgPyB0aGlzLl9vblNjcm9sbEhvcml6b250YWxcbiAgICAgICAgOiB0aGlzLl9vblNjcm9sbFZlcnRpY2FsO1xuXG4gICAgICBjb25zdCBbc3RhcnRJbmRleCwgc3RvcEluZGV4XSA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKTtcblxuICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnRJbmRleDsgaW5kZXggPD0gc3RvcEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgIGtleTogaXRlbUtleShpbmRleCwgaXRlbURhdGEpLFxuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoaW5kZXgpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG4gICAgICBjb25zdCBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoXG4gICAgICAgIHRoaXMucHJvcHMsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFxuICAgICAgICBvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2JyxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBvblNjcm9sbCxcbiAgICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICAuLi5zdHlsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGhlaWdodDogaXNIb3Jpem9udGFsID8gJzEwMCUnIDogZXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gZXN0aW1hdGVkVG90YWxTaXplIDogJzEwMCUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkOiAoXG4gICAgICBvdmVyc2NhblN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICB2aXNpYmxlU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgdmlzaWJsZVN0b3BJbmRleDogbnVtYmVyXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShcbiAgICAgIChcbiAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZpc2libGVTdG9wSW5kZXg6IG51bWJlclxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkOiBhbnkpOiBvbkl0ZW1zUmVuZGVyZWRDYWxsYmFjaykoe1xuICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4LFxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBfY2FsbE9uU2Nyb2xsOiAoXG4gICAgICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBib29sZWFuXG4gICAgKSA9PiB2b2lkO1xuICAgIF9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKFxuICAgICAgKFxuICAgICAgICBzY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogYm9vbGVhblxuICAgICAgKSA9PlxuICAgICAgICAoKHRoaXMucHJvcHMub25TY3JvbGw6IGFueSk6IG9uU2Nyb2xsQ2FsbGJhY2spKHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgeyBpdGVtQ291bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgY29uc3QgW1xuICAgICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdG9wSW5kZXgsXG4gICAgICAgICAgXSA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKFxuICAgICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTdG9wSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIF9nZXRJdGVtU3R5bGU6IChpbmRleDogbnVtYmVyKSA9PiBPYmplY3Q7XG4gICAgX2dldEl0ZW1TdHlsZSA9IChpbmRleDogbnVtYmVyKTogT2JqZWN0ID0+IHtcbiAgICAgIGNvbnN0IHsgZGlyZWN0aW9uLCBpdGVtU2l6ZSwgbGF5b3V0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBpdGVtU3R5bGVDYWNoZSA9IHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGl0ZW1TaXplLFxuICAgICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGxheW91dCxcbiAgICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb25cbiAgICAgICk7XG5cbiAgICAgIGxldCBzdHlsZTtcbiAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcbiAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtpbmRleF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRJdGVtT2Zmc2V0KHRoaXMucHJvcHMsIGluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGdldEl0ZW1TaXplKHRoaXMucHJvcHMsIGluZGV4LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcblxuICAgICAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID1cbiAgICAgICAgICBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgICAgICBjb25zdCBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgIGNvbnN0IG9mZnNldEhvcml6b250YWwgPSBpc0hvcml6b250YWwgPyBvZmZzZXQgOiAwO1xuICAgICAgICBpdGVtU3R5bGVDYWNoZVtpbmRleF0gPSBzdHlsZSA9IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IG9mZnNldEhvcml6b250YWwsXG4gICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0SG9yaXpvbnRhbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB0b3A6ICFpc0hvcml6b250YWwgPyBvZmZzZXQgOiAwLFxuICAgICAgICAgIGhlaWdodDogIWlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9O1xuXG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlOiAoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gSXRlbVN0eWxlQ2FjaGU7XG4gICAgX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZSgoXzogYW55LCBfXzogYW55LCBfX186IGFueSkgPT4gKHt9KSk7XG5cbiAgICBfZ2V0UmFuZ2VUb1JlbmRlcigpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgICBjb25zdCB7IGl0ZW1Db3VudCwgb3ZlcnNjYW5Db3VudCB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHsgaXNTY3JvbGxpbmcsIHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsT2Zmc2V0IH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG4gICAgICBjb25zdCBzdG9wSW5kZXggPSBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KFxuICAgICAgICB0aGlzLnByb3BzLFxuICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgIHRoaXMuX2luc3RhbmNlUHJvcHNcbiAgICAgICk7XG5cbiAgICAgIC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cbiAgICAgIGNvbnN0IG92ZXJzY2FuQmFja3dhcmQgPVxuICAgICAgICAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnXG4gICAgICAgICAgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KVxuICAgICAgICAgIDogMTtcbiAgICAgIGNvbnN0IG92ZXJzY2FuRm9yd2FyZCA9XG4gICAgICAgICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJ1xuICAgICAgICAgID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudClcbiAgICAgICAgICA6IDE7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSxcbiAgICAgICAgTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksXG4gICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgIHN0b3BJbmRleCxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgX29uU2Nyb2xsSG9yaXpvbnRhbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGgsIHNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIH0gPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgdGhpcy5zZXRTdGF0ZShwcmV2U3RhdGUgPT4ge1xuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRpcmVjdGlvbiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICBsZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxPZmZzZXQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246XG4gICAgICAgICAgICBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfb25TY3JvbGxWZXJ0aWNhbCA9IChldmVudDogU2Nyb2xsRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50SGVpZ2h0LCBzY3JvbGxIZWlnaHQsIHNjcm9sbFRvcCB9ID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+IHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cbiAgICAgICAgY29uc3Qgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAgICAgMCxcbiAgICAgICAgICBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjpcbiAgICAgICAgICAgIHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9vdXRlclJlZlNldHRlciA9IChyZWY6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyBvdXRlclJlZiB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgdGhpcy5fb3V0ZXJSZWYgPSAoKHJlZjogYW55KTogSFRNTERpdkVsZW1lbnQpO1xuXG4gICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBvdXRlclJlZiAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKVxuICAgICAgKSB7XG4gICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KFxuICAgICAgICB0aGlzLl9yZXNldElzU2Nyb2xsaW5nLFxuICAgICAgICBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF9yZXNldElzU2Nyb2xsaW5nID0gKCkgPT4ge1xuICAgICAgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc1Njcm9sbGluZzogZmFsc2UgfSwgKCkgPT4ge1xuICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgIHRoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xLCBudWxsKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG59XG5cbi8vIE5PVEU6IEkgY29uc2lkZXJlZCBmdXJ0aGVyIHdyYXBwaW5nIGluZGl2aWR1YWwgaXRlbXMgd2l0aCBhIHB1cmUgTGlzdEl0ZW0gY29tcG9uZW50LlxuLy8gVGhpcyB3b3VsZCBhdm9pZCBldmVyIGNhbGxpbmcgdGhlIHJlbmRlciBmdW5jdGlvbiBmb3IgdGhlIHNhbWUgaW5kZXggbW9yZSB0aGFuIG9uY2UsXG4vLyBCdXQgaXQgd291bGQgYWxzbyBhZGQgdGhlIG92ZXJoZWFkIG9mIGEgbG90IG9mIGNvbXBvbmVudHMvZmliZXJzLlxuLy8gSSBhc3N1bWUgcGVvcGxlIGFscmVhZHkgZG8gdGhpcyAocmVuZGVyIGZ1bmN0aW9uIHJldHVybmluZyBhIGNsYXNzIGNvbXBvbmVudCksXG4vLyBTbyBteSBkb2luZyBpdCB3b3VsZCBqdXN0IHVubmVjZXNzYXJpbHkgZG91YmxlIHRoZSB3cmFwcGVycy5cblxuY29uc3QgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IChcbiAge1xuICAgIGNoaWxkcmVuLFxuICAgIGRpcmVjdGlvbixcbiAgICBoZWlnaHQsXG4gICAgbGF5b3V0LFxuICAgIGlubmVyVGFnTmFtZSxcbiAgICBvdXRlclRhZ05hbWUsXG4gICAgd2lkdGgsXG4gIH06IFByb3BzPGFueT4sXG4gIHsgaW5zdGFuY2UgfTogU3RhdGVcbik6IHZvaWQgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICBpZiAoZGV2V2FybmluZ3NEaXJlY3Rpb24gJiYgIWRldldhcm5pbmdzRGlyZWN0aW9uLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbi5hZGQoaW5zdGFuY2UpO1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdUaGUgZGlyZWN0aW9uIHByb3Agc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIChkZWZhdWx0KSBvciBcInJ0bFwiLiAnICtcbiAgICAgICAgICAgICAgJ1BsZWFzZSB1c2UgdGhlIGxheW91dCBwcm9wIHRvIHNwZWNpZnkgXCJ2ZXJ0aWNhbFwiIChkZWZhdWx0KSBvciBcImhvcml6b250YWxcIiBvcmllbnRhdGlvbi4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArXG4gICAgICAgICAgICBgXCIke2RpcmVjdGlvbn1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGxheW91dCkge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwibGF5b3V0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJob3Jpem9udGFsXCIgb3IgXCJ2ZXJ0aWNhbFwiLiAnICtcbiAgICAgICAgICAgIGBcIiR7bGF5b3V0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICtcbiAgICAgICAgICBgXCIke2NoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVufVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsICYmIHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdIb3Jpem9udGFsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgK1xuICAgICAgICAgIGBcIiR7d2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGh9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRhbCAmJiB0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICdWZXJ0aWNhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArXG4gICAgICAgICAgYFwiJHtoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0fVwiIHdhcyBzcGVjaWZpZWQuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUxpc3RDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbmNvbnN0IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSA9IDUwO1xuXG50eXBlIFZhcmlhYmxlU2l6ZVByb3BzID0ge3xcbiAgZXN0aW1hdGVkSXRlbVNpemU6IG51bWJlcixcbiAgLi4uUHJvcHM8YW55Pixcbnx9O1xuXG50eXBlIGl0ZW1TaXplR2V0dGVyID0gKGluZGV4OiBudW1iZXIpID0+IG51bWJlcjtcblxudHlwZSBJdGVtTWV0YWRhdGEgPSB7fFxuICBvZmZzZXQ6IG51bWJlcixcbiAgc2l6ZTogbnVtYmVyLFxufH07XG50eXBlIEluc3RhbmNlUHJvcHMgPSB7fFxuICBpdGVtTWV0YWRhdGFNYXA6IHsgW2luZGV4OiBudW1iZXJdOiBJdGVtTWV0YWRhdGEgfSxcbiAgZXN0aW1hdGVkSXRlbVNpemU6IG51bWJlcixcbiAgbGFzdE1lYXN1cmVkSW5kZXg6IG51bWJlcixcbnx9O1xuXG5jb25zdCBnZXRJdGVtTWV0YWRhdGEgPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbmRleDogbnVtYmVyLFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4pOiBJdGVtTWV0YWRhdGEgPT4ge1xuICBjb25zdCB7IGl0ZW1TaXplIH0gPSAoKHByb3BzOiBhbnkpOiBWYXJpYWJsZVNpemVQcm9wcyk7XG4gIGNvbnN0IHsgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleCB9ID0gaW5zdGFuY2VQcm9wcztcblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgbGV0IHNpemUgPSAoKGl0ZW1TaXplOiBhbnkpOiBpdGVtU2l6ZUdldHRlcikoaSk7XG5cbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBzaXplLFxuICAgICAgfTtcblxuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW0gPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBvZmZzZXQ6IG51bWJlclxuKSA9PiB7XG4gIGNvbnN0IHsgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleCB9ID0gaW5zdGFuY2VQcm9wcztcblxuICBjb25zdCBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID1cbiAgICBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2VQcm9wcyxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4LFxuICAgICAgMCxcbiAgICAgIG9mZnNldFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlUHJvcHMsXG4gICAgICBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksXG4gICAgICBvZmZzZXRcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBoaWdoOiBudW1iZXIsXG4gIGxvdzogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICBjb25zdCBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxuY29uc3QgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSAoXG4gIHByb3BzOiBQcm9wczxhbnk+LFxuICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzLFxuICBpbmRleDogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgY29uc3QgeyBpdGVtQ291bnQgfSA9IHByb3BzO1xuICBsZXQgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChcbiAgICBpbmRleCA8IGl0ZW1Db3VudCAmJlxuICAgIGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldFxuICApIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChcbiAgICBwcm9wcyxcbiAgICBpbnN0YW5jZVByb3BzLFxuICAgIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSxcbiAgICBNYXRoLmZsb29yKGluZGV4IC8gMiksXG4gICAgb2Zmc2V0XG4gICk7XG59O1xuXG5jb25zdCBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSAoXG4gIHsgaXRlbUNvdW50IH06IFByb3BzPGFueT4sXG4gIHsgaXRlbU1ldGFkYXRhTWFwLCBlc3RpbWF0ZWRJdGVtU2l6ZSwgbGFzdE1lYXN1cmVkSW5kZXggfTogSW5zdGFuY2VQcm9wc1xuKSA9PiB7XG4gIGxldCB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSAwO1xuXG4gIC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSBpdGVtQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGl0ZW1Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgY29uc3QgbnVtVW5tZWFzdXJlZEl0ZW1zID0gaXRlbUNvdW50IC0gbGFzdE1lYXN1cmVkSW5kZXggLSAxO1xuICBjb25zdCB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZEl0ZW1TaXplO1xuXG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbmNvbnN0IFZhcmlhYmxlU2l6ZUxpc3QgPSBjcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wc1xuICApOiBudW1iZXIgPT4gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0LFxuXG4gIGdldEl0ZW1TaXplOiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiBJbnN0YW5jZVByb3BzXG4gICk6IG51bWJlciA9PiBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG5cbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IChcbiAgICBwcm9wczogUHJvcHM8YW55PixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHMsXG4gICAgc2Nyb2xsYmFyU2l6ZTogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgeyBkaXJlY3Rpb24sIGhlaWdodCwgbGF5b3V0LCB3aWR0aCB9ID0gcHJvcHM7XG5cbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuXG4gICAgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuICAgIGNvbnN0IGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZShwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG5cbiAgICBjb25zdCBtYXhPZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSArIHNjcm9sbGJhclNpemVcbiAgICApO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmXG4gICAgICAgIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplXG4gICAgICApIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogKFxuICAgIHByb3BzOiBQcm9wczxhbnk+LFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IGZpbmROZWFyZXN0SXRlbShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KSxcblxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiAoXG4gICAgcHJvcHM6IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyLFxuICAgIGluc3RhbmNlUHJvcHM6IEluc3RhbmNlUHJvcHNcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBpdGVtQ291bnQsIGxheW91dCwgd2lkdGggfSA9IHByb3BzO1xuXG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IHNjcm9sbE9mZnNldCArIHNpemU7XG5cbiAgICBsZXQgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIGxldCBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGl0ZW1Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+LCBpbnN0YW5jZTogYW55KTogSW5zdGFuY2VQcm9wcyB7XG4gICAgY29uc3QgeyBlc3RpbWF0ZWRJdGVtU2l6ZSB9ID0gKChwcm9wczogYW55KTogVmFyaWFibGVTaXplUHJvcHMpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZTogZXN0aW1hdGVkSXRlbVNpemUgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXg6IC0xLFxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kZXggPSAoXG4gICAgICBpbmRleDogbnVtYmVyLFxuICAgICAgc2hvdWxkRm9yY2VVcGRhdGU/OiBib29sZWFuID0gdHJ1ZVxuICAgICkgPT4ge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IE1hdGgubWluKFxuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4LFxuICAgICAgICBpbmRleCAtIDFcbiAgICAgICk7XG5cbiAgICAgIC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuXG4gIHZhbGlkYXRlUHJvcHM6ICh7IGl0ZW1TaXplIH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICtcbiAgICAgICAgICAgIGBcIiR7aXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemV9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IFZhcmlhYmxlU2l6ZUxpc3Q7XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUdyaWRDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVHcmlkQ29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlR3JpZENvbXBvbmVudCc7XG5cbmNvbnN0IEZpeGVkU2l6ZUdyaWQgPSBjcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiAoeyBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldENvbHVtbldpZHRoOiAoeyBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChjb2x1bW5XaWR0aDogYW55KTogbnVtYmVyKSxcblxuICBnZXRSb3dPZmZzZXQ6ICh7IHJvd0hlaWdodCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSxcblxuICBnZXRSb3dIZWlnaHQ6ICh7IHJvd0hlaWdodCB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlciksXG5cbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6ICh7IHJvd0NvdW50LCByb3dIZWlnaHQgfTogUHJvcHM8YW55PikgPT5cbiAgICAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAqIHJvd0NvdW50LFxuXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6ICh7IGNvbHVtbkNvdW50LCBjb2x1bW5XaWR0aCB9OiBQcm9wczxhbnk+KSA9PlxuICAgICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgKiBjb2x1bW5Db3VudCxcblxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IChcbiAgICB7IGNvbHVtbkNvdW50LCBjb2x1bW5XaWR0aCwgd2lkdGggfTogUHJvcHM8YW55PixcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIGFsaWduOiBTY3JvbGxUb0FsaWduLFxuICAgIHNjcm9sbExlZnQ6IG51bWJlcixcbiAgICBpbnN0YW5jZVByb3BzOiB0eXBlb2YgdW5kZWZpbmVkLFxuICAgIHNjcm9sbGJhclNpemU6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IGxhc3RDb2x1bW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBjb2x1bW5Db3VudCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgLSB3aWR0aFxuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICBsYXN0Q29sdW1uT2Zmc2V0LFxuICAgICAgY29sdW1uSW5kZXggKiAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICBjb25zdCBtaW5PZmZzZXQgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBjb2x1bW5JbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcikgLVxuICAgICAgICB3aWR0aCArXG4gICAgICAgIHNjcm9sbGJhclNpemUgK1xuICAgICAgICAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0IC0gd2lkdGggJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQgKyB3aWR0aCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgY29uc3QgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbCh3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RDb2x1bW5PZmZzZXQgKyBNYXRoLmZsb29yKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdENvbHVtbk9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsTGVmdDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IChcbiAgICB7IHJvd0hlaWdodCwgaGVpZ2h0LCByb3dDb3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogdHlwZW9mIHVuZGVmaW5lZCxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsYXN0Um93T2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgcm93Q291bnQgKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAtIGhlaWdodFxuICAgICk7XG4gICAgY29uc3QgbWF4T2Zmc2V0ID0gTWF0aC5taW4oXG4gICAgICBsYXN0Um93T2Zmc2V0LFxuICAgICAgcm93SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKVxuICAgICk7XG4gICAgY29uc3QgbWluT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgcm93SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKSAtXG4gICAgICAgIGhlaWdodCArXG4gICAgICAgIHNjcm9sbGJhclNpemUgK1xuICAgICAgICAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0IC0gaGVpZ2h0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQgKyBoZWlnaHQpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIGNvbnN0IG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgbWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdFJvd09mZnNldCArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdFJvd09mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsVG9wIDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IChcbiAgICB7IGNvbHVtbldpZHRoLCBjb2x1bW5Db3VudCB9OiBQcm9wczxhbnk+LFxuICAgIHNjcm9sbExlZnQ6IG51bWJlclxuICApOiBudW1iZXIgPT5cbiAgICBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgY29sdW1uQ291bnQgLSAxLFxuICAgICAgICBNYXRoLmZsb29yKHNjcm9sbExlZnQgLyAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpKVxuICAgICAgKVxuICAgICksXG5cbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogKFxuICAgIHsgY29sdW1uV2lkdGgsIGNvbHVtbkNvdW50LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxMZWZ0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICBjb25zdCBsZWZ0ID0gc3RhcnRJbmRleCAqICgoY29sdW1uV2lkdGg6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3QgbnVtVmlzaWJsZUNvbHVtbnMgPSBNYXRoLmNlaWwoXG4gICAgICAod2lkdGggKyBzY3JvbGxMZWZ0IC0gbGVmdCkgLyAoKGNvbHVtbldpZHRoOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGNvbHVtbkNvdW50IC0gMSxcbiAgICAgICAgc3RhcnRJbmRleCArIG51bVZpc2libGVDb2x1bW5zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgICApXG4gICAgKTtcbiAgfSxcblxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyByb3dIZWlnaHQsIHJvd0NvdW50IH06IFByb3BzPGFueT4sXG4gICAgc2Nyb2xsVG9wOiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4ocm93Q291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbFRvcCAvICgocm93SGVpZ2h0OiBhbnkpOiBudW1iZXIpKSlcbiAgICApLFxuXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IHJvd0hlaWdodCwgcm93Q291bnQsIGhlaWdodCB9OiBQcm9wczxhbnk+LFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBzY3JvbGxUb3A6IG51bWJlclxuICApOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHRvcCA9IHN0YXJ0SW5kZXggKiAoKHJvd0hlaWdodDogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBudW1WaXNpYmxlUm93cyA9IE1hdGguY2VpbChcbiAgICAgIChoZWlnaHQgKyBzY3JvbGxUb3AgLSB0b3ApIC8gKChyb3dIZWlnaHQ6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgcm93Q291bnQgLSAxLFxuICAgICAgICBzdGFydEluZGV4ICsgbnVtVmlzaWJsZVJvd3MgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICAgIClcbiAgICApO1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+KTogYW55IHtcbiAgICAvLyBOb29wXG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBjb2x1bW5XaWR0aCwgcm93SGVpZ2h0IH06IFByb3BzPGFueT4pOiB2b2lkID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICtcbiAgICAgICAgICAgICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgK1xuICAgICAgICAgICAgYFwiJHtcbiAgICAgICAgICAgICAgY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGhcbiAgICAgICAgICAgIH1cIiB3YXMgc3BlY2lmaWVkLmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgK1xuICAgICAgICAgICAgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArXG4gICAgICAgICAgICBgXCIke3Jvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHR9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpeGVkU2l6ZUdyaWQ7XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGNyZWF0ZUxpc3RDb21wb25lbnQgZnJvbSAnLi9jcmVhdGVMaXN0Q29tcG9uZW50JztcblxuaW1wb3J0IHR5cGUgeyBQcm9wcywgU2Nyb2xsVG9BbGlnbiB9IGZyb20gJy4vY3JlYXRlTGlzdENvbXBvbmVudCc7XG5cbnR5cGUgSW5zdGFuY2VQcm9wcyA9IGFueTtcblxuY29uc3QgRml4ZWRTaXplTGlzdCA9IGNyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgaW5kZXggKiAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpLFxuXG4gIGdldEl0ZW1TaXplOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+LCBpbmRleDogbnVtYmVyKTogbnVtYmVyID0+XG4gICAgKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSxcblxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6ICh7IGl0ZW1Db3VudCwgaXRlbVNpemUgfTogUHJvcHM8YW55PikgPT5cbiAgICAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpICogaXRlbUNvdW50LFxuXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiAoXG4gICAgeyBkaXJlY3Rpb24sIGhlaWdodCwgaXRlbUNvdW50LCBpdGVtU2l6ZSwgbGF5b3V0LCB3aWR0aCB9OiBQcm9wczxhbnk+LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgYWxpZ246IFNjcm9sbFRvQWxpZ24sXG4gICAgc2Nyb2xsT2Zmc2V0OiBudW1iZXIsXG4gICAgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VQcm9wcyxcbiAgICBzY3JvbGxiYXJTaXplOiBudW1iZXJcbiAgKTogbnVtYmVyID0+IHtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICBjb25zdCBzaXplID0gKCgoaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQpOiBhbnkpOiBudW1iZXIpO1xuICAgIGNvbnN0IGxhc3RJdGVtT2Zmc2V0ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgaXRlbUNvdW50ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAtIHNpemVcbiAgICApO1xuICAgIGNvbnN0IG1heE9mZnNldCA9IE1hdGgubWluKFxuICAgICAgbGFzdEl0ZW1PZmZzZXQsXG4gICAgICBpbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcilcbiAgICApO1xuICAgIGNvbnN0IG1pbk9mZnNldCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGluZGV4ICogKChpdGVtU2l6ZTogYW55KTogbnVtYmVyKSAtXG4gICAgICAgIHNpemUgK1xuICAgICAgICAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpICtcbiAgICAgICAgc2Nyb2xsYmFyU2l6ZVxuICAgICk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiZcbiAgICAgICAgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemVcbiAgICAgICkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIGNhc2UgJ2NlbnRlcic6IHtcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICBjb25zdCBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMlxuICAgICAgICApO1xuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHNpemUgLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0SXRlbU9mZnNldCArIE1hdGguZmxvb3Ioc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RJdGVtT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiAoXG4gICAgeyBpdGVtQ291bnQsIGl0ZW1TaXplIH06IFByb3BzPGFueT4sXG4gICAgb2Zmc2V0OiBudW1iZXJcbiAgKTogbnVtYmVyID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgTWF0aC5mbG9vcihvZmZzZXQgLyAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpKSlcbiAgICApLFxuXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IChcbiAgICB7IGRpcmVjdGlvbiwgaGVpZ2h0LCBpdGVtQ291bnQsIGl0ZW1TaXplLCBsYXlvdXQsIHdpZHRoIH06IFByb3BzPGFueT4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIHNjcm9sbE9mZnNldDogbnVtYmVyXG4gICk6IG51bWJlciA9PiB7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRJbmRleCAqICgoaXRlbVNpemU6IGFueSk6IG51bWJlcik7XG4gICAgY29uc3Qgc2l6ZSA9ICgoKGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0KTogYW55KTogbnVtYmVyKTtcbiAgICBjb25zdCBudW1WaXNpYmxlSXRlbXMgPSBNYXRoLmNlaWwoXG4gICAgICAoc2l6ZSArIHNjcm9sbE9mZnNldCAtIG9mZnNldCkgLyAoKGl0ZW1TaXplOiBhbnkpOiBudW1iZXIpXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oXG4gICAgICAgIGl0ZW1Db3VudCAtIDEsXG4gICAgICAgIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlSXRlbXMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICAgIClcbiAgICApO1xuICB9LFxuXG4gIGluaXRJbnN0YW5jZVByb3BzKHByb3BzOiBQcm9wczxhbnk+KTogYW55IHtcbiAgICAvLyBOb29wXG4gIH0sXG5cbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcblxuICB2YWxpZGF0ZVByb3BzOiAoeyBpdGVtU2l6ZSB9OiBQcm9wczxhbnk+KTogdm9pZCA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArXG4gICAgICAgICAgICAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICtcbiAgICAgICAgICAgIGBcIiR7aXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemV9XCIgd2FzIHNwZWNpZmllZC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZpeGVkU2l6ZUxpc3Q7XG4iLCAiLy8gQGZsb3dcblxuLy8gUHVsbGVkIGZyb20gcmVhY3QtY29tcGF0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvYmxvYi83YzVkZTAwZTdjODVlMmZmZDAxMWJmM2FmMDI4OTliNjNmNjk5ZDNhL3NyYy9pbmRleC5qcyNMMzQ5XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGFsbG93RGlmZmVycyhwcmV2OiBPYmplY3QsIG5leHQ6IE9iamVjdCk6IGJvb2xlYW4ge1xuICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gcHJldikge1xuICAgIGlmICghKGF0dHJpYnV0ZSBpbiBuZXh0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBuZXh0KSB7XG4gICAgaWYgKHByZXZbYXR0cmlidXRlXSAhPT0gbmV4dFthdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwgIi8vIEBmbG93XG5cbmltcG9ydCBzaGFsbG93RGlmZmVycyBmcm9tICcuL3NoYWxsb3dEaWZmZXJzJztcblxuLy8gQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW8oKS5cbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RtZW1vXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcmVFcXVhbChcbiAgcHJldlByb3BzOiBPYmplY3QsXG4gIG5leHRQcm9wczogT2JqZWN0XG4pOiBib29sZWFuIHtcbiAgY29uc3QgeyBzdHlsZTogcHJldlN0eWxlLCAuLi5wcmV2UmVzdCB9ID0gcHJldlByb3BzO1xuICBjb25zdCB7IHN0eWxlOiBuZXh0U3R5bGUsIC4uLm5leHRSZXN0IH0gPSBuZXh0UHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICAhc2hhbGxvd0RpZmZlcnMocHJldlN0eWxlLCBuZXh0U3R5bGUpICYmICFzaGFsbG93RGlmZmVycyhwcmV2UmVzdCwgbmV4dFJlc3QpXG4gICk7XG59XG4iLCAiLy8gQGZsb3dcblxuaW1wb3J0IGFyZUVxdWFsIGZyb20gJy4vYXJlRXF1YWwnO1xuaW1wb3J0IHNoYWxsb3dEaWZmZXJzIGZyb20gJy4vc2hhbGxvd0RpZmZlcnMnO1xuXG4vLyBDdXN0b20gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGZvciBjbGFzcyBjb21wb25lbnRzLlxuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1jb21wb25lbnQuaHRtbCNzaG91bGRjb21wb25lbnR1cGRhdGVcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgbmV4dFByb3BzOiBPYmplY3QsXG4gIG5leHRTdGF0ZTogT2JqZWN0XG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAhYXJlRXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBuZXh0U3RhdGUpXG4gICk7XG59XG4iLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCIsIFwib25DbGlja1wiLCBcImhlYWRlclppbmRleExvY2F0aW9uXCIsIFwibWFza1JlZlwiXTtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuXG4vKipcbiAqIE5PVEU6IFdlIGNhbid0IHRlc3QgdGhpcyBjb21wb25lbnQgYmVjYXVzZSBFbnp5bWUgZG9lc24ndCBzdXBwb3J0IHJlbmRlcmluZ1xuICogaW50byBwb3J0YWxzLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IHVzZUNvbWJpbmVkUmVmcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aU92ZXJsYXlNYXNrID0gZnVuY3Rpb24gRXVpT3ZlcmxheU1hc2soX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgX3JlZiRoZWFkZXJaaW5kZXhMb2NhID0gX3JlZi5oZWFkZXJaaW5kZXhMb2NhdGlvbixcbiAgICAgIGhlYWRlclppbmRleExvY2F0aW9uID0gX3JlZiRoZWFkZXJaaW5kZXhMb2NhID09PSB2b2lkIDAgPyAnYWJvdmUnIDogX3JlZiRoZWFkZXJaaW5kZXhMb2NhLFxuICAgICAgbWFza1JlZiA9IF9yZWYubWFza1JlZixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgb3ZlcmxheU1hc2tOb2RlID0gdXNlUmVmKCk7XG4gIHZhciBjb21iaW5lZE1hc2tSZWYgPSB1c2VDb21iaW5lZFJlZnMoW292ZXJsYXlNYXNrTm9kZSwgbWFza1JlZl0pO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIGlzUG9ydGFsVGFyZ2V0UmVhZHkgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0SXNQb3J0YWxUYXJnZXRSZWFkeSA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2V1aUJvZHktaGFzT3ZlcmxheU1hc2snKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdldWlCb2R5LWhhc092ZXJsYXlNYXNrJyk7XG4gICAgfTtcbiAgfSwgW10pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb21iaW5lZE1hc2tSZWYoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgIH1cbiAgfSwgW10pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvcnRhbFRhcmdldCA9IG92ZXJsYXlNYXNrTm9kZS5jdXJyZW50O1xuXG4gICAgaWYgKHBvcnRhbFRhcmdldCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwb3J0YWxUYXJnZXQpO1xuICAgIH1cblxuICAgIHNldElzUG9ydGFsVGFyZ2V0UmVhZHkodHJ1ZSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChwb3J0YWxUYXJnZXQpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChwb3J0YWxUYXJnZXQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIW92ZXJsYXlNYXNrTm9kZS5jdXJyZW50KSByZXR1cm47XG4gICAga2V5c09mKHJlc3QpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKHR5cGVvZiByZXN0W2tleV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBwcm9wZXJ0eSB0eXBlLiBFdWlPdmVybGF5TWFzayBwcm9wZXJ0eSBcIi5jb25jYXQoa2V5LCBcIiBpcyBub3QgYSBzdHJpbmcuXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG92ZXJsYXlNYXNrTm9kZS5jdXJyZW50KSB7XG4gICAgICAgIG92ZXJsYXlNYXNrTm9kZS5jdXJyZW50LnNldEF0dHJpYnV0ZShrZXksIHJlc3Rba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtdKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghb3ZlcmxheU1hc2tOb2RlLmN1cnJlbnQpIHJldHVybjtcbiAgICBvdmVybGF5TWFza05vZGUuY3VycmVudC5jbGFzc05hbWUgPSBjbGFzc05hbWVzKCdldWlPdmVybGF5TWFzaycsIFwiZXVpT3ZlcmxheU1hc2stLVwiLmNvbmNhdChoZWFkZXJaaW5kZXhMb2NhdGlvbiwgXCJIZWFkZXJcIiksIGNsYXNzTmFtZSk7XG4gIH0sIFtjbGFzc05hbWUsIGhlYWRlclppbmRleExvY2F0aW9uXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvcnRhbFRhcmdldCA9IG92ZXJsYXlNYXNrTm9kZS5jdXJyZW50O1xuICAgIGlmICghcG9ydGFsVGFyZ2V0IHx8ICFvbkNsaWNrKSByZXR1cm47XG5cbiAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcihlKSB7XG4gICAgICBpZiAoZS50YXJnZXQgPT09IHBvcnRhbFRhcmdldCkge1xuICAgICAgICBvbkNsaWNrKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHBvcnRhbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcG9ydGFsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbGlzdGVuZXIpO1xuICAgIH07XG4gIH0sIFtvbkNsaWNrXSk7XG4gIHJldHVybiBpc1BvcnRhbFRhcmdldFJlYWR5ID8gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL2NyZWF0ZVBvcnRhbChjaGlsZHJlbiwgb3ZlcmxheU1hc2tOb2RlLmN1cnJlbnQpKSA6IG51bGw7XG59O1xuRXVpT3ZlcmxheU1hc2sucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRnVuY3Rpb24gdGhhdCBhcHBsaWVzIHRvIGNsaWNraW5nIHRoZSBtYXNrIGl0c2VsZiBhbmQgbm90IHRoZSBjaGlsZHJlblxuICAgICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBtYXNrIHZpc3VhbGx5IHNpdCBhYm92ZSBvciBiZWxvdyB0aGUgRXVpSGVhZGVyIChjb250cm9sbGVkIGJ5IHotaW5kZXgpXG4gICAgICovXG4gIGhlYWRlclppbmRleExvY2F0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYWJvdmVcIiwgXCJiZWxvd1wiXSksXG5cbiAgLyoqXG4gICAgICogUmVhY3QgcmVmIHRvIGJlIHBhc3NlZCB0byB0aGUgd3JhcHBpbmcgY29udGFpbmVyXG4gICAgICovXG4gIG1hc2tSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlTcGFjZXJTdHlsZXMgfSBmcm9tICcuL3NwYWNlci5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgU0laRVMgPSBbJ3hzJywgJ3MnLCAnbScsICdsJywgJ3hsJywgJ3h4bCddO1xuZXhwb3J0IHZhciBFdWlTcGFjZXIgPSBmdW5jdGlvbiBFdWlTcGFjZXIoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnbCcgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aVNwYWNlclN0eWxlcyhldWlUaGVtZSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU3BhY2VyJywgX2RlZmluZVByb3BlcnR5KHt9LCBcImV1aVNwYWNlci0tXCIuY29uY2F0KHNpemUpLCBzaXplKSwgY2xhc3NOYW1lKTtcbiAgdmFyIGNzc1N0eWxlcyA9IFtzdHlsZXMuZXVpU3BhY2VyLCBzdHlsZXNbc2l6ZV1dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIGNzczogY3NzU3R5bGVzXG4gIH0sIHJlc3QpKTtcbn07XG5FdWlTcGFjZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fKCkgeyByZXR1cm4gXCJZb3UgaGF2ZSB0cmllZCB0byBzdHJpbmdpZnkgb2JqZWN0IHJldHVybmVkIGZyb20gYGNzc2AgZnVuY3Rpb24uIEl0IGlzbid0IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkgKGUuZy4gYXMgdmFsdWUgb2YgdGhlIGBjbGFzc05hbWVgIHByb3ApLCBidXQgcmF0aGVyIGhhbmRlZCB0byBlbW90aW9uIHNvIGl0IGNhbiBoYW5kbGUgaXQgKGUuZy4gYXMgdmFsdWUgb2YgYGNzc2AgcHJvcCkuXCI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGxvZ2ljYWxzIH0gZnJvbSAnLi4vLi4vZ2xvYmFsX3N0eWxpbmcnO1xuXG52YXIgX3JlZiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgbmFtZTogXCIxOTF4aTFuLWV1aVNwYWNlclwiLFxuICBzdHlsZXM6IFwiZmxleC1zaHJpbms6MDtsYWJlbDpldWlTcGFjZXI7XCJcbn0gOiB7XG4gIG5hbWU6IFwiMTkxeGkxbi1ldWlTcGFjZXJcIixcbiAgc3R5bGVzOiBcImZsZXgtc2hyaW5rOjA7bGFiZWw6ZXVpU3BhY2VyO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpU3BhY2VyU3R5bGVzID0gZnVuY3Rpb24gZXVpU3BhY2VyU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIGV1aVNwYWNlcjogX3JlZixcbiAgICAvLyBTaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUueHMsIFwiOztsYWJlbDp4cztcIiksXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2Fscy5oZWlnaHQsIFwiOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxzLmhlaWdodCwgXCI6XCIsIGV1aVRoZW1lLnNpemUuYmFzZSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS5sLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICB4eGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbHMuaGVpZ2h0LCBcIjpcIiwgZXVpVGhlbWUuc2l6ZS54eGwsIFwiOztsYWJlbDp4eGw7XCIpXG4gIH07XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJkYXRhLXRlc3Qtc3VialwiLCBcImFzeW5jXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcHJlc3NlZFwiLCBcImN1c3RvbU9wdGlvblRleHRcIiwgXCJmdWxsV2lkdGhcIiwgXCJpZFwiLCBcImlucHV0UmVmXCIsIFwiaXNDbGVhcmFibGVcIiwgXCJpc0Rpc2FibGVkXCIsIFwiaXNJbnZhbGlkXCIsIFwiaXNMb2FkaW5nXCIsIFwibm9TdWdnZXN0aW9uc1wiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25DcmVhdGVPcHRpb25cIiwgXCJvblNlYXJjaENoYW5nZVwiLCBcIm9wdGlvbnNcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlbmRlck9wdGlvblwiLCBcInJvd0hlaWdodFwiLCBcInNlbGVjdGVkT3B0aW9uc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcInByZXBlbmRcIiwgXCJzb3J0TWF0Y2hlc0J5XCIsIFwiZGVsaW1pdGVyXCIsIFwiYXBwZW5kXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cblxuLyoqXG4gKiBFbGVtZW50cyB3aXRoaW4gRXVpQ29tYm9Cb3ggd2hpY2ggd291bGQgbm9ybWFsbHkgYmUgdGFiYmFibGUgKGlucHV0cywgYnV0dG9ucykgaGF2ZSBiZWVuIHJlbW92ZWRcbiAqIGZyb20gdGhlIHRhYiBvcmRlciB3aXRoIHRhYmluZGV4PXstMX0gc28gdGhhdCB3ZSBjYW4gY29udHJvbCB0aGUga2V5Ym9hcmQgbmF2aWdhdGlvbiBpbnRlcmZhY2UuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGZpbmRQb3BvdmVyUG9zaXRpb24sIGh0bWxJZEdlbmVyYXRvciwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVBvcnRhbCB9IGZyb20gJy4uL3BvcnRhbCc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbnNMaXN0IH0gZnJvbSAnLi9jb21ib19ib3hfb3B0aW9uc19saXN0JztcbmltcG9ydCB7IGdldE1hdGNoaW5nT3B0aW9ucywgZmxhdHRlbk9wdGlvbkdyb3VwcywgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSB9IGZyb20gJy4vbWF0Y2hpbmdfb3B0aW9ucyc7XG5pbXBvcnQgeyBFdWlDb21ib0JveElucHV0IH0gZnJvbSAnLi9jb21ib19ib3hfaW5wdXQvY29tYm9fYm94X2lucHV0JztcbmltcG9ydCB7IGdldEVsZW1lbnRaSW5kZXggfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wb3BvdmVyJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgaW5pdGlhbFNlYXJjaFZhbHVlID0gJyc7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlDb21ib0JveCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3goKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94KTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IC0xLFxuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgICAgaXNMaXN0T3BlbjogZmFsc2UsXG4gICAgICBsaXN0RWxlbWVudDogbnVsbCxcbiAgICAgIGxpc3RQb3NpdGlvbjogJ2JvdHRvbScsXG4gICAgICBsaXN0WkluZGV4OiB1bmRlZmluZWQsXG4gICAgICBtYXRjaGluZ09wdGlvbnM6IGdldE1hdGNoaW5nT3B0aW9ucyhfdGhpcy5wcm9wcy5vcHRpb25zLCBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMsIGluaXRpYWxTZWFyY2hWYWx1ZSwgX3RoaXMucHJvcHMuYXN5bmMsIEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSwgX3RoaXMucHJvcHMuc29ydE1hdGNoZXNCeSksXG4gICAgICBzZWFyY2hWYWx1ZTogaW5pdGlhbFNlYXJjaFZhbHVlLFxuICAgICAgd2lkdGg6IDBcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJfaXNNb3VudGVkXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyb290SWRcIiwgaHRtbElkR2VuZXJhdG9yKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNvbWJvQm94UmVmSW5zdGFuY2VcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY29tYm9Cb3hSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAvLyBJRTExIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYHJlbGF0ZWRUYXJnZXRgIGV2ZW50IHByb3BlcnR5IGZvciBibHVyIGV2ZW50c1xuICAgICAgLy8gYnV0IGRvZXMgYWRkIGl0IGZvciBmb2N1c291dC4gUmVhY3QgZG9lc24ndCBzdXBwb3J0IGBvbkZvY3VzT3V0YCBzbyBoZXJlIHdlIGFyZS5cbiAgICAgIGlmIChfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBfdGhpcy5vbkNvbnRhaW5lckJsdXIpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlID0gcmVmO1xuXG4gICAgICBpZiAoX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSkge1xuICAgICAgICBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgX3RoaXMub25Db250YWluZXJCbHVyKTtcblxuICAgICAgICB2YXIgY29tYm9Cb3hCb3VuZHMgPSBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB3aWR0aDogY29tYm9Cb3hCb3VuZHMud2lkdGhcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYXV0b1NpemVJbnB1dFJlZkluc3RhbmNlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImF1dG9TaXplSW5wdXRSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5hdXRvU2l6ZUlucHV0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2VhcmNoSW5wdXRSZWZJbnN0YW5jZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZWFyY2hJbnB1dFJlZkNhbGxiYWNrXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaW5wdXRSZWYpIF90aGlzLnByb3BzLmlucHV0UmVmKHJlZik7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdFJlZkluc3RhbmNlXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBpZiAoX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSkge1xuICAgICAgICAvLyBmaW5kIHRoZSB6SW5kZXggb2YgdGhlIGNvbWJvYm94IHJlbGF0aXZlIHRvIHRoZSBwYWdlIGJvZHlcbiAgICAgICAgLy8gYW5kIHVzZSB0aGF0IHRvIGRlcHRoLXBvc2l0aW9uIHRoZSBsaXN0IGJveFxuICAgICAgICAvLyBhZGRzIGFuIGV4dHJhIGAxMDBgIHRvIHByb3ZpZGUgc29tZSBkZWZlbnNlIGFyb3VuZCBuZWlnaGJvcmluZyBlbGVtZW50cycgcG9zaXRpb25pbmdcbiAgICAgICAgdmFyIGxpc3RaSW5kZXggPSBnZXRFbGVtZW50WkluZGV4KF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UsIGRvY3VtZW50LmJvZHkpICsgMTAwO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBsaXN0WkluZGV4OiBsaXN0WkluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5saXN0UmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9nZ2xlQnV0dG9uUmVmSW5zdGFuY2VcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9nZ2xlQnV0dG9uUmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKHJlZikge1xuICAgICAgX3RoaXMudG9nZ2xlQnV0dG9uUmVmSW5zdGFuY2UgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3B0aW9uc1JlZkluc3RhbmNlc1wiLCBbXSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib3B0aW9uUmVmQ2FsbGJhY2tcIiwgZnVuY3Rpb24gKGluZGV4LCByZWYpIHtcbiAgICAgIF90aGlzLm9wdGlvbnNSZWZJbnN0YW5jZXNbaW5kZXhdID0gcmVmO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9wZW5MaXN0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNMaXN0T3BlbjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VMaXN0XCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhcmdldCA9PT0gX3RoaXMuc2VhcmNoSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICAvLyByZWFsbHkgbG9uZyBzZWFyY2ggdmFsdWVzIC8gY3VzdG9tIGVudHJpZXMgdHJpZ2dlcnMgYSBzY3JvbGwgZXZlbnQgb24gdGhlIGlucHV0XG4gICAgICAgIC8vIHdoaWNoIHRoZSBFdWlDb21ib0JveE9wdGlvbnNMaXN0IHBhc3NlcyB0aHJvdWdoIGhlcmVcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGxpc3RaSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNMaXN0T3BlbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZVBvc2l0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBsaXN0RWxlbWVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogX3RoaXMuc3RhdGUubGlzdEVsZW1lbnQ7XG5cbiAgICAgIGlmICghX3RoaXMuX2lzTW91bnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghbGlzdEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdXBkYXRlTGlzdFBvc2l0aW9uIGlzIGNhbGxlZCB3aGVuIGxpc3RFbGVtZW50IGlzIGJlY29taW5nIHZpc2libGUsIGJ1dCBpc24ndCB5ZXRcblxuXG4gICAgICB2YXIgbGlzdEVsZW1lbnRCb3VuZHMgPSBsaXN0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgaWYgKGxpc3RFbGVtZW50Qm91bmRzLndpZHRoID09PSAwIHx8IGxpc3RFbGVtZW50Qm91bmRzLmhlaWdodCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuY29tYm9Cb3hSZWZJbnN0YW5jZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21ib0JveEJvdW5kcyA9IF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIHZhciBfcmVmID0gZmluZFBvcG92ZXJQb3NpdGlvbih7XG4gICAgICAgIGFsbG93Q3Jvc3NBeGlzOiBmYWxzZSxcbiAgICAgICAgYW5jaG9yOiBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlLFxuICAgICAgICBwb3BvdmVyOiBsaXN0RWxlbWVudCxcbiAgICAgICAgcG9zaXRpb246ICdib3R0b20nXG4gICAgICB9KSxcbiAgICAgICAgICBwb3NpdGlvbiA9IF9yZWYucG9zaXRpb24sXG4gICAgICAgICAgdG9wID0gX3JlZi50b3A7XG5cbiAgICAgIGlmIChfdGhpcy5saXN0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgX3RoaXMubGlzdFJlZkluc3RhbmNlLnN0eWxlLnRvcCA9IFwiXCIuY29uY2F0KHRvcCwgXCJweFwiKTsgLy8gbGlzdEVsZW1lbnQgZG9lc24ndCBoYXZlIGl0cyB3aWR0aCBzZXQgdW50aWwgYWZ0ZXIgdXBkYXRpbmcgdGhlIHBvc2l0aW9uXG4gICAgICAgIC8vIHdoaWNoIG1lYW5zIHRoZSBwb3BvdmVyIHNlcnZpY2Ugd29uJ3Qga25vdyBhYm91dCB0aGUgY29ycmVjdCB3aWR0aFxuICAgICAgICAvLyBob3dldmVyLCB3ZSBhbHJlYWR5IGtub3cgd2hlcmUgdG8gcG9zaXRpb24gdGhlIGVsZW1lbnRcblxuICAgICAgICBfdGhpcy5saXN0UmVmSW5zdGFuY2Uuc3R5bGUubGVmdCA9IFwiXCIuY29uY2F0KGNvbWJvQm94Qm91bmRzLmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQsIFwicHhcIik7XG4gICAgICAgIF90aGlzLmxpc3RSZWZJbnN0YW5jZS5zdHlsZS53aWR0aCA9IFwiXCIuY29uY2F0KGNvbWJvQm94Qm91bmRzLndpZHRoLCBcInB4XCIpO1xuICAgICAgfSAvLyBDYWNoZSBmb3IgZnV0dXJlIGNhbGxzLlxuXG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbGlzdEVsZW1lbnQ6IGxpc3RFbGVtZW50LFxuICAgICAgICBsaXN0UG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgICB3aWR0aDogY29tYm9Cb3hCb3VuZHMud2lkdGhcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4XCIsIGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvcHRpb25zIGF2YWlsYWJsZSwgZG8gbm90aGluZy5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBfcmVmMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IF9yZWYyLm1hdGNoaW5nT3B0aW9ucztcbiAgICAgICAgdmFyIG5leHRBY3RpdmVPcHRpb25JbmRleDtcblxuICAgICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1c2VyJ3Mga2V5Ym9hcmQgbmF2aWdhdGlvbiBvZiB0aGUgbWVudSwgdGhlbiB3ZSdsbCBmb2N1c1xuICAgICAgICAgIC8vIGVpdGhlciB0aGUgZmlyc3Qgb3IgbGFzdCBpdGVtLlxuICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IGFtb3VudCA8IDAgPyBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYWN0aXZlT3B0aW9uSW5kZXggKyBhbW91bnQ7XG5cbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIEdyb3VwIHRpdGxlcyBhcmUgaW5jbHVkZWQgaW4gb3B0aW9uIGxpc3QgYnV0IGFyZSBub3Qgc2VsZWN0YWJsZVxuICAgICAgICAvLyBTa2lwIGdyb3VwIHRpdGxlIG9wdGlvbnNcblxuXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gMSA6IC0xO1xuXG4gICAgICAgIHdoaWxlIChtYXRjaGluZ09wdGlvbnNbbmV4dEFjdGl2ZU9wdGlvbkluZGV4XS5pc0dyb3VwTGFiZWxPcHRpb24pIHtcbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBuZXh0QWN0aXZlT3B0aW9uSW5kZXggKyBkaXJlY3Rpb247XG5cbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IG1hdGNoaW5nT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJoYXNBY3RpdmVPcHRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ID4gLTEgJiYgX3RoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggPCBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImNsZWFyQWN0aXZlT3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IC0xXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhclNlYXJjaFZhbHVlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLm9uU2VhcmNoQ2hhbmdlKCcnKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVMYXN0T3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIEJhY2tzcGFjZSB3aWxsIGJlIHVzZWQgdG8gZGVsZXRlIHRoZSBpbnB1dCwgbm90IGEgcGlsbC5cblxuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUuc2VhcmNoVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRGVsZXRlIGxhc3QgcGlsbC5cblxuXG4gICAgICBfdGhpcy5vblJlbW92ZU9wdGlvbihfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnNbX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAtIDFdKTtcblxuICAgICAgaWYgKEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSAmJiAhX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImFkZEN1c3RvbU9wdGlvblwiLCBmdW5jdGlvbiAoaXNDb250YWluZXJCbHVyLCBzZWFyY2hWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25DcmVhdGVPcHRpb24gPSBfdGhpcyRwcm9wcy5vbkNyZWF0ZU9wdGlvbixcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wcy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucztcblxuICAgICAgaWYgKF90aGlzLmRvZXNTZWFyY2hNYXRjaE9ubHlPcHRpb24oKSkge1xuICAgICAgICBfdGhpcy5vbkFkZE9wdGlvbihtYXRjaGluZ09wdGlvbnNbMF0sIGlzQ29udGFpbmVyQmx1cik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9uQ3JlYXRlT3B0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG9uJ3QgYm90aGVyIHRyeWluZyB0byBjcmVhdGUgYW4gb3B0aW9uIGlmIHRoZSB1c2VyIGhhc24ndCB0eXBlZCBhbnl0aGluZy5cblxuXG4gICAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG9uJ3QgY3JlYXRlIHRoZSB2YWx1ZSBpZiBpdCdzIGFscmVhZHkgYmVlbiBzZWxlY3RlZC5cblxuXG4gICAgICBpZiAoZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShzZWFyY2hWYWx1ZSwgc2VsZWN0ZWRPcHRpb25zKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIEFkZCBuZXcgY3VzdG9tIHBpbGwgaWYgdGhpcyBpcyBjdXN0b20gaW5wdXQsIGV2ZW4gaWYgaXQgcGFydGlhbGx5IG1hdGNoZXMgYW4gb3B0aW9uLlxuXG5cbiAgICAgIHZhciBpc09wdGlvbkNyZWF0ZWQgPSBvbkNyZWF0ZU9wdGlvbihzZWFyY2hWYWx1ZSwgZmxhdHRlbk9wdGlvbkdyb3VwcyhvcHRpb25zKSk7IC8vIEV4cGVjdCB0aGUgY29uc3VtZXIgdG8gYmUgZXhwbGljaXQgaW4gcmVqZWN0aW5nIGEgY3VzdG9tIG9wdGlvbi5cblxuICAgICAgaWYgKGlzT3B0aW9uQ3JlYXRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jbGVhclNlYXJjaFZhbHVlKCk7XG5cbiAgICAgIGlmIChCb29sZWFuKHNpbmdsZVNlbGVjdGlvbikpIHtcbiAgICAgICAgLy8gQWRkaW5nIGEgY3VzdG9tIG9wdGlvbiB0byBhIHNpbmdsZSBzZWxlY3QgdGhhdCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9uc1xuICAgICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJkb2VzU2VhcmNoTWF0Y2hPbmx5T3B0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IF90aGlzLnN0YXRlLnNlYXJjaFZhbHVlO1xuXG4gICAgICBpZiAoX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5tYXRjaGluZ09wdGlvbnNbMF0ubGFiZWwudG9Mb3dlckNhc2UoKSA9PT0gc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJhcmVBbGxPcHRpb25zU2VsZWN0ZWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczIub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIGFzeW5jID0gX3RoaXMkcHJvcHMyLmFzeW5jOyAvLyBBc3N1bWUgaWYgdGhpcyBpcyBhc3luYyB0aGVuIHRoZXJlIGNvdWxkIGJlIGluZmluaXRlIG9wdGlvbnMuXG5cbiAgICAgIGlmIChhc3luYykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBmbGF0dGVuT3B0aW9ucyA9IGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9ucykubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgb3B0aW9uKSwge30sIHtcbiAgICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB2YXIgbnVtYmVyT2ZTZWxlY3RlZE9wdGlvbnMgPSAwO1xuICAgICAgc2VsZWN0ZWRPcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciBsYWJlbCA9IF9yZWYzLmxhYmVsO1xuICAgICAgICB2YXIgdHJpbW1lZExhYmVsID0gbGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChmbGF0dGVuT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgIHJldHVybiBvcHRpb24ubGFiZWwgPT09IHRyaW1tZWRMYWJlbDtcbiAgICAgICAgfSkgIT09IC0xKSBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucyArPSAxO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmxhdHRlbk9wdGlvbnMubGVuZ3RoID09PSBudW1iZXJPZlNlbGVjdGVkT3B0aW9ucztcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNvbWJvQm94Rm9jdXNcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25Gb2N1cykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkZvY3VzKGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMub3Blbkxpc3QoKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0Q3VzdG9tT3B0aW9uc1wiLCBmdW5jdGlvbiAoaXNDb250YWluZXJCbHVyKSB7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWFyY2hWYWx1ZTtcbiAgICAgIHZhciBkZWxpbWl0ZXIgPSBfdGhpcy5wcm9wcy5kZWxpbWl0ZXI7XG5cbiAgICAgIGlmIChkZWxpbWl0ZXIpIHtcbiAgICAgICAgc2VhcmNoVmFsdWUuc3BsaXQoZGVsaW1pdGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICBpZiAob3B0aW9uLmxlbmd0aCA+IDApIF90aGlzLmFkZEN1c3RvbU9wdGlvbihpc0NvbnRhaW5lckJsdXIsIG9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMuYWRkQ3VzdG9tT3B0aW9uKGlzQ29udGFpbmVyQmx1ciwgc2VhcmNoVmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ29udGFpbmVyQmx1clwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIGNsb3NlIHRoZSBvcHRpb25zIGxpc3QsIHVubGVzcyB0aGUgdXNlciBjbGlja2VkIG9uIGFuIG9wdGlvblxuXG4gICAgICAvKipcbiAgICAgICAqIEZpcmVGb3ggcmV0dXJucyBgcmVsYXRlZFRhcmdldGAgYXMgYG51bGxgIGZvciBzZWN1cml0eSByZWFzb25zLCBidXQgcHJvdmlkZXMgYSBwcm9wcmlldGFyeSBgZXhwbGljaXRPcmlnaW5hbFRhcmdldGAuXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudC9leHBsaWNpdE9yaWdpbmFsVGFyZ2V0XG4gICAgICAgKi9cbiAgICAgIHZhciBmb2N1c0V2ZW50ID0gZXZlbnQ7XG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGZvY3VzRXZlbnQucmVsYXRlZFRhcmdldCB8fCBmb2N1c0V2ZW50LmV4cGxpY2l0T3JpZ2luYWxUYXJnZXQ7XG5cbiAgICAgIHZhciBmb2N1c2VkSW5PcHRpb25zTGlzdCA9IHJlbGF0ZWRUYXJnZXQgJiYgX3RoaXMubGlzdFJlZkluc3RhbmNlICYmIF90aGlzLmxpc3RSZWZJbnN0YW5jZS5jb250YWlucyhyZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgdmFyIGZvY3VzZWRJbklucHV0ID0gcmVsYXRlZFRhcmdldCAmJiBfdGhpcy5jb21ib0JveFJlZkluc3RhbmNlICYmIF90aGlzLmNvbWJvQm94UmVmSW5zdGFuY2UuY29udGFpbnMocmVsYXRlZFRhcmdldCk7XG5cbiAgICAgIGlmICghZm9jdXNlZEluT3B0aW9uc0xpc3QgJiYgIWZvY3VzZWRJbklucHV0KSB7XG4gICAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuXG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgICB9KTsgLy8gSWYgdGhlIHVzZXIgdGFicyBhd2F5IG9yIGNoYW5nZXMgZm9jdXMgdG8gYW5vdGhlciBlbGVtZW50LCB0YWtlIHdoYXRldmVyIGlucHV0IHRoZXkndmVcbiAgICAgICAgLy8gdHlwZWQgYW5kIGNvbnZlcnQgaXQgaW50byBhIHBpbGwsIHRvIHByZXZlbnQgdGhlIGNvbWJvIGJveCBmcm9tIGxvb2tpbmcgbGlrZSBhIHRleHQgaW5wdXQuXG5cblxuICAgICAgICBpZiAoIV90aGlzLmhhc0FjdGl2ZU9wdGlvbigpKSB7XG4gICAgICAgICAgX3RoaXMuc2V0Q3VzdG9tT3B0aW9ucyh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmb2N1c2VkSW5PcHRpb25zTGlzdCkge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzUxNzlcbiAgICAgICAgLy8gbmVlZCB0byByZXN0b3JlIGZvY3VzIHRvIHRoZSBpbnB1dCBib3ggd2hlbiBjbGlja2luZyBub24taW50ZXJhY3RpdmUgZWxlbWVudHNcbiAgICAgICAgLy8gZmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgY2FsbGluZyAuZm9jdXMoKSBkdXJpbmcgYSBibHVyIGV2ZW50XG4gICAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTc5XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJHNlYXJjaElucHV0UmVmSTtcblxuICAgICAgICAgIChfdGhpcyRzZWFyY2hJbnB1dFJlZkkgPSBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSA9PT0gbnVsbCB8fCBfdGhpcyRzZWFyY2hJbnB1dFJlZkkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHNlYXJjaElucHV0UmVmSS5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaXNEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfVVA6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgtMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0RPV046XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMub3Blbkxpc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuQkFDS1NQQUNFOlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgX3RoaXMucmVtb3ZlTGFzdE9wdGlvbigpO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBrZXlzLkVTQ0FQRTpcbiAgICAgICAgICBpZiAoX3RoaXMuc3RhdGUuaXNMaXN0T3Blbikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuRU5URVI6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5oYXNBY3RpdmVPcHRpb24oKSkge1xuICAgICAgICAgICAgX3RoaXMub25BZGRPcHRpb24oX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zW190aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLnNldEN1c3RvbU9wdGlvbnMoZmFsc2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Uga2V5cy5UQUI6XG4gICAgICAgICAgLy8gRGlzYWxsb3cgdGFiYmluZyB3aGVuIHRoZSB1c2VyIGlzIG5hdmlnYXRpbmcgdGhlIG9wdGlvbnMuXG4gICAgICAgICAgaWYgKF90aGlzLmhhc0FjdGl2ZU9wdGlvbigpICYmIF90aGlzLnN0YXRlLmlzTGlzdE9wZW4pIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5vbktleURvd24pIHtcbiAgICAgICAgICAgIF90aGlzLnByb3BzLm9uS2V5RG93bihldmVudCk7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcHRpb25FbnRlcktleVwiLCBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICBfdGhpcy5vbkFkZE9wdGlvbihvcHRpb24pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uT3B0aW9uQ2xpY2tcIiwgZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgX3RoaXMub25BZGRPcHRpb24ob3B0aW9uKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkFkZE9wdGlvblwiLCBmdW5jdGlvbiAoYWRkZWRPcHRpb24sIGlzQ29udGFpbmVyQmx1cikge1xuICAgICAgaWYgKGFkZGVkT3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMzLm9uQ2hhbmdlLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzMy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uUHJvcCA9IF90aGlzJHByb3BzMy5zaW5nbGVTZWxlY3Rpb247XG4gICAgICB2YXIgc2luZ2xlU2VsZWN0aW9uID0gQm9vbGVhbihzaW5nbGVTZWxlY3Rpb25Qcm9wKTtcbiAgICAgIHZhciBjaGFuZ2VPcHRpb25zID0gc2luZ2xlU2VsZWN0aW9uID8gW2FkZGVkT3B0aW9uXSA6IHNlbGVjdGVkT3B0aW9ucy5jb25jYXQoYWRkZWRPcHRpb24pO1xuXG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoY2hhbmdlT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNsZWFyU2VhcmNoVmFsdWUoKTtcblxuICAgICAgX3RoaXMuY2xlYXJBY3RpdmVPcHRpb24oKTtcblxuICAgICAgaWYgKCFpc0NvbnRhaW5lckJsdXIpIHtcbiAgICAgICAgaWYgKF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UpIHtcbiAgICAgICAgICBfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbikge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5jbG9zZUxpc3QoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5pbmRleE9mKGFkZGVkT3B0aW9uKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblJlbW92ZU9wdGlvblwiLCBmdW5jdGlvbiAocmVtb3ZlZE9wdGlvbikge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHM0Lm9uQ2hhbmdlLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNC5zZWxlY3RlZE9wdGlvbnM7XG5cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uICE9PSByZW1vdmVkT3B0aW9uO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xlYXJTZWxlY3RlZE9wdGlvbnNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9uQ2hhbmdlID0gX3RoaXMucHJvcHMub25DaGFuZ2U7XG5cbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZShbXSk7XG4gICAgICB9IC8vIENsaWNraW5nIHRoZSBjbGVhciBidXR0b24gd2lsbCBhbHNvIGNhdXNlIGl0IHRvIGRpc2FwcGVhci4gVGhpcyB3b3VsZCByZXN1bHQgaW4gZm9jdXNcbiAgICAgIC8vIHNoaWZ0aW5nIHVuZXhwZWN0ZWRseSB0byB0aGUgYm9keSBlbGVtZW50IHNvIHdlIHNldCBpdCB0byB0aGUgaW5wdXQgd2hpY2ggaXMgbW9yZSByZWFzb25hYmxlLFxuXG5cbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Db21ib0JveENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFdoZW4gdGhlIHVzZXIgY2xpY2tzIGFueXdoZXJlIG9uIHRoZSBib3gsIGVudGVyIHRoZSBpbnRlcmFjdGlvbiBzdGF0ZS5cbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH0gLy8gSWYgdGhlIHVzZXIgZG9lcyB0aGlzIGZyb20gYSBzdGF0ZSBpbiB3aGljaCBhbiBvcHRpb24gaGFzIGZvY3VzLCB0aGVuIHdlIG5lZWQgdG8gcmVzZXQgaXQgb3IgY2xlYXIgaXQuXG5cblxuICAgICAgaWYgKEJvb2xlYW4oX3RoaXMucHJvcHMuc2luZ2xlU2VsZWN0aW9uKSAmJiBfdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZE9wdGlvbkluZGV4ID0gX3RoaXMuc3RhdGUubWF0Y2hpbmdPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbi5sYWJlbCA9PT0gX3RoaXMucHJvcHMuc2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsICYmIG9wdGlvbi5rZXkgPT09IF90aGlzLnByb3BzLnNlbGVjdGVkT3B0aW9uc1swXS5rZXk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogc2VsZWN0ZWRPcHRpb25JbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLmNsZWFyQWN0aXZlT3B0aW9uKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcGVuTGlzdENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5pc0xpc3RPcGVuKSB7XG4gICAgICAgIF90aGlzLm9wZW5MaXN0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcHRpb25MaXN0U2Nyb2xsXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5zZWFyY2hJbnB1dFJlZkluc3RhbmNlKSB7XG4gICAgICAgIF90aGlzLnNlYXJjaElucHV0UmVmSW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsb3NlTGlzdENsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmNsb3NlTGlzdCgpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uU2VhcmNoQ2hhbmdlXCIsIGZ1bmN0aW9uIChzZWFyY2hWYWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uU2VhcmNoQ2hhbmdlID0gX3RoaXMkcHJvcHM1Lm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzNS5kZWxpbWl0ZXI7XG5cbiAgICAgIGlmIChvblNlYXJjaENoYW5nZSkge1xuICAgICAgICB2YXIgX2hhc01hdGNoaW5nT3B0aW9ucyA9IF90aGlzLnN0YXRlLm1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPiAwO1xuXG4gICAgICAgIG9uU2VhcmNoQ2hhbmdlKHNlYXJjaFZhbHVlLCBfaGFzTWF0Y2hpbmdPcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWVcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNlYXJjaFZhbHVlICYmIF90aGlzLnN0YXRlLmlzTGlzdE9wZW4gPT09IGZhbHNlKSBfdGhpcy5vcGVuTGlzdCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChkZWxpbWl0ZXIgJiYgc2VhcmNoVmFsdWUuZW5kc1dpdGgoZGVsaW1pdGVyKSkge1xuICAgICAgICBfdGhpcy5zZXRDdXN0b21PcHRpb25zKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ1cGRhdGVNYXRjaGluZ09wdGlvbnNJZkRpZmZlcmVudFwiLCBmdW5jdGlvbiAobmV3TWF0Y2hpbmdPcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSBfdGhpcy5zdGF0ZSxcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRzdGF0ZS5tYXRjaGluZ09wdGlvbnMsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRzdGF0ZS5hY3RpdmVPcHRpb25JbmRleDtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczYuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IF90aGlzJHByb3BzNi5zZWxlY3RlZE9wdGlvbnM7XG4gICAgICB2YXIgYXJlT3B0aW9uc0RpZmZlcmVudCA9IGZhbHNlO1xuXG4gICAgICBpZiAobWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAhPT0gbmV3TWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBhcmVPcHRpb25zRGlmZmVyZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF0Y2hpbmdPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nT3B0aW9uc1tpXS5sYWJlbCAhPT0gbmV3TWF0Y2hpbmdPcHRpb25zW2ldLmxhYmVsKSB7XG4gICAgICAgICAgICBhcmVPcHRpb25zRGlmZmVyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYXJlT3B0aW9uc0RpZmZlcmVudCkge1xuICAgICAgICBfdGhpcy5vcHRpb25zUmVmSW5zdGFuY2VzID0gW107XG4gICAgICAgIHZhciBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhY3RpdmVPcHRpb25JbmRleDsgLy8gZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzaW5nbGUgb3B0aW9uIGlzIGFjdGl2ZSBpZiBpdCBpcyBpbiB0aGUgbWF0Y2hpbmdPcHRpb25zXG5cbiAgICAgICAgaWYgKEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgaWYgKG5ld01hdGNoaW5nT3B0aW9ucy5pbmNsdWRlcyhzZWxlY3RlZE9wdGlvbnNbMF0pKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBuZXdNYXRjaGluZ09wdGlvbnMuaW5kZXhPZihzZWxlY3RlZE9wdGlvbnNbMF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnM6IG5ld01hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogbmV4dEFjdGl2ZU9wdGlvbkluZGV4XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghbmV3TWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW5kbGVzcyBzZXRTdGF0ZSAtPiBjb21wb25lbnRXaWxsVXBkYXRlIC0+IHNldFN0YXRlIGxvb3AuXG4gICAgICAgICAgaWYgKF90aGlzLmhhc0FjdGl2ZU9wdGlvbigpKSB7XG4gICAgICAgICAgICBfdGhpcy5jbGVhckFjdGl2ZU9wdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUNvbWJvQm94LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLl9pc01vdW50ZWQgPSB0cnVlOyAvLyBUT0RPOiBUaGlzIHdpbGwgbmVlZCB0byBiZSBjYWxsZWQgb25jZSB0aGUgYWN0dWFsIHN0eWxlc2hlZXQgbG9hZHMuXG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMyLmF1dG9TaXplSW5wdXRSZWZJbnN0YW5jZSkge1xuICAgICAgICAgIF90aGlzMi5hdXRvU2l6ZUlucHV0UmVmSW5zdGFuY2UuY29weUlucHV0U3R5bGVzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHM3Lm9wdGlvbnMsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM3LnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczcuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHNvcnRNYXRjaGVzQnkgPSBfdGhpcyRwcm9wczcuc29ydE1hdGNoZXNCeTtcbiAgICAgIHZhciBzZWFyY2hWYWx1ZSA9IHRoaXMuc3RhdGUuc2VhcmNoVmFsdWU7IC8vIFJlYWN0IDE2LjMgaGFzIGEgYnVnIChmaXhlZCBpbiAxNi40KSB3aGVyZSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcbiAgICAgIC8vIGlzbid0IGNhbGxlZCBhZnRlciBhIHN0YXRlIGNoYW5nZSwgYW5kIHdlIHRyYWNrIGBzZWFyY2hWYWx1ZWAgaW4gc3RhdGVcbiAgICAgIC8vIGluc3RlYWQgd2UgbmVlZCB0byByZWFjdCB0byBhIGNoYW5nZSBpbiBzZWFyY2hWYWx1ZSBoZXJlXG5cbiAgICAgIHRoaXMudXBkYXRlTWF0Y2hpbmdPcHRpb25zSWZEaWZmZXJlbnQoZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlbGVjdGVkT3B0aW9ucywgc2VhcmNoVmFsdWUsIHRoaXMucHJvcHMuYXN5bmMsIEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSwgc29ydE1hdGNoZXNCeSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRhdGFUZXN0U3ViaiA9IF90aGlzJHByb3BzOFsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgICAgICBhc3luYyA9IF90aGlzJHByb3BzOC5hc3luYyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczguY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczguY29tcHJlc3NlZCxcbiAgICAgICAgICBjdXN0b21PcHRpb25UZXh0ID0gX3RoaXMkcHJvcHM4LmN1c3RvbU9wdGlvblRleHQsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHM4LmZ1bGxXaWR0aCxcbiAgICAgICAgICBpZCA9IF90aGlzJHByb3BzOC5pZCxcbiAgICAgICAgICBpbnB1dFJlZiA9IF90aGlzJHByb3BzOC5pbnB1dFJlZixcbiAgICAgICAgICBpc0NsZWFyYWJsZSA9IF90aGlzJHByb3BzOC5pc0NsZWFyYWJsZSxcbiAgICAgICAgICBpc0Rpc2FibGVkID0gX3RoaXMkcHJvcHM4LmlzRGlzYWJsZWQsXG4gICAgICAgICAgaXNJbnZhbGlkID0gX3RoaXMkcHJvcHM4LmlzSW52YWxpZCxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczguaXNMb2FkaW5nLFxuICAgICAgICAgIG5vU3VnZ2VzdGlvbnMgPSBfdGhpcyRwcm9wczgubm9TdWdnZXN0aW9ucyxcbiAgICAgICAgICBvbkJsdXIgPSBfdGhpcyRwcm9wczgub25CbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHM4Lm9uQ2hhbmdlLFxuICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHM4Lm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgIG9uU2VhcmNoQ2hhbmdlID0gX3RoaXMkcHJvcHM4Lm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczgub3B0aW9ucyxcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IF90aGlzJHByb3BzOC5wbGFjZWhvbGRlcixcbiAgICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczgucmVuZGVyT3B0aW9uLFxuICAgICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzOC5yb3dIZWlnaHQsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHM4LnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczguc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wczgucHJlcGVuZCxcbiAgICAgICAgICBzb3J0TWF0Y2hlc0J5ID0gX3RoaXMkcHJvcHM4LnNvcnRNYXRjaGVzQnksXG4gICAgICAgICAgZGVsaW1pdGVyID0gX3RoaXMkcHJvcHM4LmRlbGltaXRlcixcbiAgICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczguYXBwZW5kLFxuICAgICAgICAgIGF1dG9Gb2N1cyA9IF90aGlzJHByb3BzOC5hdXRvRm9jdXMsXG4gICAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHM4WydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wczhbJ2FyaWEtbGFiZWxsZWRieSddLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHM4LCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHN0YXRlMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBoYXNGb2N1cyA9IF90aGlzJHN0YXRlMi5oYXNGb2N1cyxcbiAgICAgICAgICBpc0xpc3RPcGVuID0gX3RoaXMkc3RhdGUyLmlzTGlzdE9wZW4sXG4gICAgICAgICAgbGlzdFBvc2l0aW9uID0gX3RoaXMkc3RhdGUyLmxpc3RQb3NpdGlvbixcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHN0YXRlMi5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHN0YXRlMi53aWR0aCxcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRzdGF0ZTIubWF0Y2hpbmdPcHRpb25zOyAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIElEIGlmIHVzZXJzIGRvbid0IHBhc3Mgb25lIGFzIGEgcHJvcFxuXG4gICAgICB2YXIgaW5wdXRJZCA9IGlkICE9PSBudWxsICYmIGlkICE9PSB2b2lkIDAgPyBpZCA6IHRoaXMucm9vdElkKCdfZXVpLWNvbWJvYm94LWlkJyk7IC8vIFZpc3VhbGx5IGluZGljYXRlIHRoZSBjb21ib2JveCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlIGlmIGl0IGhhcyBsb3N0IGZvY3VzIGJ1dCB0aGVyZSBpcyB0ZXh0IGVudGVyZWQgaW4gdGhlIGlucHV0LlxuICAgICAgLy8gV2hlbiBjdXN0b20gb3B0aW9ucyBhcmUgZGlzYWJsZWQgYW5kIHRoZSB1c2VyIGxlYXZlcyB0aGUgY29tYm8gYm94IGFmdGVyIGVudGVyaW5nIHRleHQgdGhhdCBkb2VzIG5vdCBtYXRjaCBhbnlcbiAgICAgIC8vIG9wdGlvbnMsIHRoaXMgdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGV5J3ZlIGVudGVyZWQgaW52YWxpZCBpbnB1dC5cblxuICAgICAgdmFyIG1hcmtBc0ludmFsaWQgPSBpc0ludmFsaWQgfHwgKGhhc0ZvY3VzID09PSBmYWxzZSB8fCBpc0xpc3RPcGVuID09PSBmYWxzZSkgJiYgc2VhcmNoVmFsdWU7XG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94JywgY2xhc3NOYW1lLCB7XG4gICAgICAgICdldWlDb21ib0JveC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWQsXG4gICAgICAgICdldWlDb21ib0JveC0tZnVsbFdpZHRoJzogZnVsbFdpZHRoLFxuICAgICAgICAnZXVpQ29tYm9Cb3gtLXByZXBlbmRlZCc6IHByZXBlbmQsXG4gICAgICAgICdldWlDb21ib0JveC0tYXBwZW5kZWQnOiBhcHBlbmQsXG4gICAgICAgICdldWlDb21ib0JveC1pc0Rpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAgICAgICAgJ2V1aUNvbWJvQm94LWlzSW52YWxpZCc6IG1hcmtBc0ludmFsaWQsXG4gICAgICAgICdldWlDb21ib0JveC1pc09wZW4nOiBpc0xpc3RPcGVuXG4gICAgICB9KTtcbiAgICAgIHZhciB2YWx1ZSA9IHNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24gKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbi5sYWJlbDtcbiAgICAgIH0pLmpvaW4oJywgJyk7XG4gICAgICB2YXIgb3B0aW9uc0xpc3Q7XG5cbiAgICAgIGlmICghbm9TdWdnZXN0aW9ucyAmJiBpc0xpc3RPcGVuKSB7XG4gICAgICAgIHZhciBvcHRpb25zTGlzdERhdGFUZXN0U3ViaiA9IGRhdGFUZXN0U3ViaiA/IFwiXCIuY29uY2F0KGRhdGFUZXN0U3ViaiwgXCItb3B0aW9uc0xpc3RcIikgOiB1bmRlZmluZWQ7XG4gICAgICAgIG9wdGlvbnNMaXN0ID0gX19fRW1vdGlvbkpTWChFdWlQb3J0YWwsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aUNvbWJvQm94Lmxpc3Rib3hBcmlhTGFiZWxcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkNob29zZSBmcm9tIHRoZSBmb2xsb3dpbmcgb3B0aW9uc1wiXG4gICAgICAgIH0sIGZ1bmN0aW9uIChsaXN0Ym94QXJpYUxhYmVsKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwge1xuICAgICAgICAgICAgekluZGV4OiBfdGhpczMuc3RhdGUubGlzdFpJbmRleCxcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBfdGhpczMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgICBhcmVBbGxPcHRpb25zU2VsZWN0ZWQ6IF90aGlzMy5hcmVBbGxPcHRpb25zU2VsZWN0ZWQoKSxcbiAgICAgICAgICAgIGN1c3RvbU9wdGlvblRleHQ6IGN1c3RvbU9wdGlvblRleHQsXG4gICAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IG9wdGlvbnNMaXN0RGF0YVRlc3RTdWJqLFxuICAgICAgICAgICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICAgICAgICAgIGxpc3RSZWY6IF90aGlzMy5saXN0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgICBtYXRjaGluZ09wdGlvbnM6IG1hdGNoaW5nT3B0aW9ucyxcbiAgICAgICAgICAgIG9uQ2xvc2VMaXN0OiBfdGhpczMuY2xvc2VMaXN0LFxuICAgICAgICAgICAgb25DcmVhdGVPcHRpb246IG9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgICAgb25PcHRpb25DbGljazogX3RoaXMzLm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgICBvbk9wdGlvbkVudGVyS2V5OiBfdGhpczMub25PcHRpb25FbnRlcktleSxcbiAgICAgICAgICAgIG9uU2Nyb2xsOiBfdGhpczMub25PcHRpb25MaXN0U2Nyb2xsLFxuICAgICAgICAgICAgb3B0aW9uUmVmOiBfdGhpczMub3B0aW9uUmVmQ2FsbGJhY2ssXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgICAgcG9zaXRpb246IGxpc3RQb3NpdGlvbixcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbjogc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgICAgcmVuZGVyT3B0aW9uOiByZW5kZXJPcHRpb24sXG4gICAgICAgICAgICByb290SWQ6IF90aGlzMy5yb290SWQsXG4gICAgICAgICAgICByb3dIZWlnaHQ6IHJvd0hlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbFRvSW5kZXg6IGFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgICB1cGRhdGVQb3NpdGlvbjogX3RoaXMzLnVwZGF0ZVBvc2l0aW9uLFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgZGVsaW1pdGVyOiBkZWxpbWl0ZXIsXG4gICAgICAgICAgICBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlOiBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlLFxuICAgICAgICAgICAgbGlzdGJveEFyaWFMYWJlbDogbGlzdGJveEFyaWFMYWJlbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFdWlDb21ib0JveCBmb2xsb3dzIHRoZSBXQUktQVJJQSAxLjIgc3BlYyBmb3IgZWRpdGFibGUgY29tYm9ib3hlc1xuICAgICAgICAgKiB3aXRoIGxpc3QgYXV0b2NvbXBsZXRlLiBUaGlzIHBhdHRlcm4gaXMgYW4gaW1wcm92ZW1lbnQgb24gdGhlIHVzZXJcbiAgICAgICAgICogZXhwZXJpZW5jZSBmb3Igc2NyZWVuIHJlYWRlcnMgb3ZlciB0aGUgV0FJLUFSSUEgMS4xIHBhdHRlcm4uXG4gICAgICAgICAqXG4gICAgICAgICAqIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4yL2V4YW1wbGVzL2NvbWJvYm94L2NvbWJvYm94LWF1dG9jb21wbGV0ZS1saXN0Lmh0bWxcbiAgICAgICAgICovXG4gICAgICAgIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe30sIHJlc3QsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmosXG4gICAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgICByZWY6IHRoaXMuY29tYm9Cb3hSZWZDYWxsYmFja1xuICAgICAgICB9KSwgX19fRW1vdGlvbkpTWChFdWlDb21ib0JveElucHV0LCB7XG4gICAgICAgICAgYXV0b1NpemVJbnB1dFJlZjogdGhpcy5hdXRvU2l6ZUlucHV0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZCxcbiAgICAgICAgICBmb2N1c2VkT3B0aW9uSWQ6IHRoaXMuaGFzQWN0aXZlT3B0aW9uKCkgPyB0aGlzLnJvb3RJZChcIl9vcHRpb24tXCIuY29uY2F0KHRoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgpKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwLFxuICAgICAgICAgIGlkOiBpbnB1dElkLFxuICAgICAgICAgIGlucHV0UmVmOiB0aGlzLnNlYXJjaElucHV0UmVmQ2FsbGJhY2ssXG4gICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0xpc3RPcGVuOiBpc0xpc3RPcGVuLFxuICAgICAgICAgIG5vSWNvbjogISFub1N1Z2dlc3Rpb25zLFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uU2VhcmNoQ2hhbmdlLFxuICAgICAgICAgIG9uQ2xlYXI6IGlzQ2xlYXJhYmxlICYmICFpc0Rpc2FibGVkID8gdGhpcy5jbGVhclNlbGVjdGVkT3B0aW9ucyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQ29tYm9Cb3hDbGljayxcbiAgICAgICAgICBvbkNsb3NlTGlzdENsaWNrOiB0aGlzLm9uQ2xvc2VMaXN0Q2xpY2ssXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5vbkNvbWJvQm94Rm9jdXMsXG4gICAgICAgICAgb25PcGVuTGlzdENsaWNrOiB0aGlzLm9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgICBvblJlbW92ZU9wdGlvbjogdGhpcy5vblJlbW92ZU9wdGlvbixcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgcm9vdElkOiB0aGlzLnJvb3RJZCxcbiAgICAgICAgICBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgdG9nZ2xlQnV0dG9uUmVmOiB0aGlzLnRvZ2dsZUJ1dHRvblJlZkNhbGxiYWNrLFxuICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uOiB0aGlzLnVwZGF0ZVBvc2l0aW9uLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBhcHBlbmQ6IHNpbmdsZVNlbGVjdGlvbiA/IGFwcGVuZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwcmVwZW5kOiBzaW5nbGVTZWxlY3Rpb24gPyBwcmVwZW5kIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogYXJpYUxhYmVsbGVkYnlcbiAgICAgICAgfSksIG9wdGlvbnNMaXN0KVxuICAgICAgKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IG5leHRQcm9wcy5vcHRpb25zLFxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucyA9IG5leHRQcm9wcy5zZWxlY3RlZE9wdGlvbnMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gbmV4dFByb3BzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBzb3J0TWF0Y2hlc0J5ID0gbmV4dFByb3BzLnNvcnRNYXRjaGVzQnk7XG4gICAgICB2YXIgYWN0aXZlT3B0aW9uSW5kZXggPSBwcmV2U3RhdGUuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBwcmV2U3RhdGUuc2VhcmNoVmFsdWU7IC8vIENhbGN1bGF0ZSBhbmQgY2FjaGUgdGhlIG9wdGlvbnMgd2hpY2ggbWF0Y2ggdGhlIHNlYXJjaFZhbHVlLCBiZWNhdXNlIHdlIHVzZSB0aGlzIGluZm9ybWF0aW9uXG4gICAgICAvLyBpbiBtdWx0aXBsZSBwbGFjZXMgYW5kIGl0IHdvdWxkIGJlIGV4cGVuc2l2ZSB0byBjYWxjdWxhdGUgcmVwZWF0ZWRseS5cblxuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWxlY3RlZE9wdGlvbnMsIHNlYXJjaFZhbHVlLCBuZXh0UHJvcHMuYXN5bmMsIEJvb2xlYW4oc2luZ2xlU2VsZWN0aW9uKSwgc29ydE1hdGNoZXNCeSk7XG4gICAgICB2YXIgc3RhdGVVcGRhdGUgPSB7XG4gICAgICAgIG1hdGNoaW5nT3B0aW9uczogbWF0Y2hpbmdPcHRpb25zXG4gICAgICB9O1xuXG4gICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPj0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZVVwZGF0ZS5hY3RpdmVPcHRpb25JbmRleCA9IC0xO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhdGVVcGRhdGU7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUNvbWJvQm94O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3gsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgYXN5bmM6IGZhbHNlLFxuICBjb21wcmVzc2VkOiBmYWxzZSxcbiAgZnVsbFdpZHRoOiBmYWxzZSxcbiAgaXNDbGVhcmFibGU6IHRydWUsXG4gIG9wdGlvbnM6IFtdLFxuICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICBzaW5nbGVTZWxlY3Rpb246IGZhbHNlLFxuICBwcmVwZW5kOiB1bmRlZmluZWQsXG4gIGFwcGVuZDogdW5kZWZpbmVkLFxuICBzb3J0TWF0Y2hlc0J5OiAnbm9uZSdcbn0pO1xuXG5FdWlDb21ib0JveC5wcm9wVHlwZXMgPSB7XG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIG9wdGlvbnMgYXN5bmNocm9ub3VzbHlcbiAgICAgKi9cbiAgYXN5bmM6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCBjcmVhdGVzIGEgc2hvcnRlciBoZWlnaHQgaW5wdXRcbiAgICAgKi9cbiAgY29tcHJlc3NlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBXaGVuIGB0cnVlYCBleHBhbmRzIHRvIHRoZSBlbnRpcmUgd2lkdGggYXZhaWxhYmxlXG4gICAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIFNob3dzIGEgYnV0dG9uIHRoYXQgcXVpY2tseSBjbGVhcnMgYW55IGlucHV0XG4gICAgICovXG4gIGlzQ2xlYXJhYmxlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBpbnB1dFxuICAgICAqL1xuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNJbnZhbGlkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBTd2FwcyB0aGUgZHJvcGRvd24gb3B0aW9ucyBmb3IgYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBEb2Vzbid0IHNob3cgdGhlIHN1Z2dlc3Rpb25zIGxpc3QvZHJvcGRvd25cbiAgICAgKi9cbiAgbm9TdWdnZXN0aW9uczogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBDYWxsZWQgZXZlcnkgdGltZSB0aGUgcXVlcnkgaW4gdGhlIGNvbWJvIGJveCBpcyBwYXJzZWRcbiAgICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuYW55LFxuICBvbktleURvd246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogQ2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIHRleHQgcXVlcnkgaW4gdGhlIHNlYXJjaCBib3ggaXMgcGFyc2VkXG4gICAgICovXG4gIG9uU2VhcmNoQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSBwbGFjZWhvbGRlciBvZiB0aGUgaW5wdXRcbiAgICAgKi9cbiAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRXZlcnkgb3B0aW9uIG11c3QgYmUgdGhlIHNhbWUgaGVpZ2h0IGFuZCBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IGlmIHVzaW5nIGEgY3VzdG9tIHJlbmRlclxuICAgICAqL1xuICByb3dIZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAgb25seSBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGEgc2luZ2xlIG9wdGlvbi4gU2V0IHRvIGB7IGFzUGxhaW5UZXh0OiB0cnVlIH1gIHRvIG5vdCByZW5kZXIgaW5wdXQgc2VsZWN0aW9uIGFzIHBpbGxzXG4gICAgICovXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogRGlzcGxheSBtYXRjaGluZyBvcHRpb25zIGJ5OlxuICAgICAqIGBzdGFydHNXaXRoYDogbW92ZXMgaXRlbXMgdGhhdCBzdGFydCB3aXRoIHNlYXJjaCB2YWx1ZSB0byB0b3Agb2YgdGhlIGxpc3Q7XG4gICAgICogYG5vbmVgOiBkb24ndCBjaGFuZ2UgdGhlIHNvcnQgb3JkZXIgb2YgaW5pdGlhbCBvYmplY3RcbiAgICAgKi9cbiAgc29ydE1hdGNoZXNCeTogUHJvcFR5cGVzLm9uZU9mKFtcIm5vbmVcIiwgXCJzdGFydHNXaXRoXCJdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBiZWZvcmUgaW5wdXQuIEl0IHdvbid0IHNob3cgaWYgYHNpbmdsZVNlbGVjdGlvbmAgaXMgc2V0IHRvIGBmYWxzZWAuXG4gICAgICogYHN0cmluZ2AgfCBgUmVhY3RFbGVtZW50YCBvciBhbiBhcnJheSBvZiB0aGVzZVxuICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5wdXQgZ3JvdXAgd2l0aCBlbGVtZW50KHMpIGNvbWluZyBhZnRlciBpbnB1dC4gSXQgd29uJ3Qgc2hvdyBpZiBgc2luZ2xlU2VsZWN0aW9uYCBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKiBgc3RyaW5nYCB8IGBSZWFjdEVsZW1lbnRgIG9yIGFuIGFycmF5IG9mIHRoZXNlXG4gICAgICovXG4gIGFwcGVuZDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgKiBBIHNwZWNpYWwgY2hhcmFjdGVyIHRvIHVzZSBhcyBhIHZhbHVlIHNlcGFyYXRvci4gVHlwaWNhbGx5IGEgY29tbWEgYCxgXG4gICAgICovXG4gIGRlbGltaXRlcjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgaW5wdXQgc2hvdWxkIGhhdmUgZm9jdXMgd2hlbiB0aGUgY29tcG9uZW50IGxvYWRzXG4gICAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUmVxdWlyZWQgd2hlbiByZW5kZXJpbmcgd2l0aG91dCBhIHZpc2libGUgbGFiZWwgZnJvbSBbRXVpRm9ybVJvd10oLyMvZm9ybXMvZm9ybS1sYXlvdXRzKS5cbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogUmVmZXJlbmNlIElEIG9mIGEgdGV4dCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHZpc2libGUgbGFiZWwgZm9yIHRoZSBjb21ibyBib3ggd2hlbiBub3RcbiAgICAgKiBzdXBwbGllZCBieSBgYXJpYS1sYWJlbGAgb3IgZnJvbSBbRXVpRm9ybVJvd10oLyMvZm9ybXMvZm9ybS1sYXlvdXRzKS5cbiAgICAgKi9cbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wia2V5XCIsIFwiaXNHcm91cExhYmVsT3B0aW9uXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiZGF0YS10ZXN0LXN1YmpcIiwgXCJhY3RpdmVPcHRpb25JbmRleFwiLCBcImFyZUFsbE9wdGlvbnNTZWxlY3RlZFwiLCBcImN1c3RvbU9wdGlvblRleHRcIiwgXCJmdWxsV2lkdGhcIiwgXCJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlXCIsIFwiaXNMb2FkaW5nXCIsIFwibGlzdFJlZlwiLCBcIm1hdGNoaW5nT3B0aW9uc1wiLCBcIm9uQ2xvc2VMaXN0XCIsIFwib25DcmVhdGVPcHRpb25cIiwgXCJvbk9wdGlvbkNsaWNrXCIsIFwib25PcHRpb25FbnRlcktleVwiLCBcIm9uU2Nyb2xsXCIsIFwib3B0aW9uUmVmXCIsIFwib3B0aW9uc1wiLCBcInBvc2l0aW9uXCIsIFwicmVuZGVyT3B0aW9uXCIsIFwicm9vdElkXCIsIFwicm93SGVpZ2h0XCIsIFwic2Nyb2xsVG9JbmRleFwiLCBcInNlYXJjaFZhbHVlXCIsIFwic2VsZWN0ZWRPcHRpb25zXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwidXBkYXRlUG9zaXRpb25cIiwgXCJ3aWR0aFwiLCBcImRlbGltaXRlclwiLCBcInpJbmRleFwiLCBcInN0eWxlXCIsIFwibGlzdGJveEFyaWFMYWJlbFwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QgfSBmcm9tICdyZWFjdC13aW5kb3cnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uLy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpSGlnaGxpZ2h0IH0gZnJvbSAnLi4vLi4vaGlnaGxpZ2h0JztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi8uLi90ZXh0JztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlDb21ib0JveFRpdGxlIH0gZnJvbSAnLi9jb21ib19ib3hfdGl0bGUnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsgRXVpRmlsdGVyU2VsZWN0SXRlbSB9IGZyb20gJy4uLy4uL2ZpbHRlcl9ncm91cC9maWx0ZXJfc2VsZWN0X2l0ZW0nO1xuaW1wb3J0IHsgRXVpQmFkZ2UgfSBmcm9tICcuLi8uLi9iYWRnZS8nO1xuaW1wb3J0IHsgRXVpUG9wb3ZlclBhbmVsIH0gZnJvbSAnLi4vLi4vcG9wb3Zlci9wb3BvdmVyX3BhbmVsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgT1BUSU9OX0NPTlRFTlRfQ0xBU1NOQU1FID0gJ2V1aUNvbWJvQm94T3B0aW9uX19jb250ZW50JztcblxudmFyIGhpdEVudGVyQmFkZ2UgPSBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCB7XG4gIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW50ZXJCYWRnZVwiLFxuICBjb2xvcjogXCJob2xsb3dcIixcbiAgaWNvblR5cGU6IFwicmV0dXJuS2V5XCIsXG4gIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCJcbn0pO1xuXG5leHBvcnQgdmFyIEV1aUNvbWJvQm94T3B0aW9uc0xpc3QgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94T3B0aW9uc0xpc3QsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZJbnN0YW5jZVwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJsaXN0UmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RCb3hSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidXBkYXRlUG9zaXRpb25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gV2FpdCBhIGJlYXQgZm9yIHRoZSBET00gdG8gdXBkYXRlLCBzaW5jZSB3ZSBkZXBlbmQgb24gRE9NIGVsZW1lbnRzJyBib3VuZHMuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5wcm9wcy51cGRhdGVQb3NpdGlvbihfdGhpcy5saXN0UmVmSW5zdGFuY2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VMaXN0T25TY3JvbGxcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBDbG9zZSB0aGUgbGlzdCB3aGVuIGEgc2Nyb2xsIGV2ZW50IGhhcHBlbnMsIGJ1dCBub3QgaWYgdGhlIHNjcm9sbCBoYXBwZW5lZCBpbiB0aGUgb3B0aW9ucyBsaXN0LlxuICAgICAgLy8gVGhpcyBtaXJyb3JzIEZpcmVmb3gncyBhcHByb2FjaCBvZiBhdXRvLWNsb3NpbmcgYHNlbGVjdGAgZWxlbWVudHMgb25zY3JvbGwuXG4gICAgICBpZiAoX3RoaXMubGlzdFJlZkluc3RhbmNlICYmIGV2ZW50LnRhcmdldCAmJiBfdGhpcy5saXN0UmVmSW5zdGFuY2UuY29udGFpbnMoZXZlbnQudGFyZ2V0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25DbG9zZUxpc3QoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5wcm9wcy5saXN0UmVmKHJlZik7XG5cbiAgICAgIF90aGlzLmxpc3RSZWZJbnN0YW5jZSA9IHJlZjtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRMaXN0UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RSZWYgPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0TGlzdEJveFJlZlwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICBfdGhpcy5saXN0Qm94UmVmID0gcmVmO1xuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBfdGhpcy5wcm9wcy5saXN0Ym94QXJpYUxhYmVsKTtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnaWQnLCBfdGhpcy5wcm9wcy5yb290SWQoJ2xpc3Rib3gnKSk7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbGlzdGJveCcpO1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsICcwJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiTGlzdFJvd1wiLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIF9vcHRpb24ka2V5O1xuXG4gICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgICAgICBpbmRleCA9IF9yZWYuaW5kZXgsXG4gICAgICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlO1xuICAgICAgdmFyIG9wdGlvbiA9IGRhdGFbaW5kZXhdO1xuXG4gICAgICB2YXIga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgICBpc0dyb3VwTGFiZWxPcHRpb24gPSBvcHRpb24uaXNHcm91cExhYmVsT3B0aW9uLFxuICAgICAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICAgIHZhbHVlID0gb3B0aW9uLnZhbHVlLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wcy5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIG9wdGlvblJlZiA9IF90aGlzJHByb3BzLm9wdGlvblJlZixcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzLnJlbmRlck9wdGlvbixcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzLnNlYXJjaFZhbHVlLFxuICAgICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzLnJvb3RJZDtcblxuICAgICAgaWYgKGlzR3JvdXBMYWJlbE9wdGlvbikge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAga2V5OiBrZXkgIT09IG51bGwgJiYga2V5ICE9PSB2b2lkIDAgPyBrZXkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHN0eWxlOiBzdHlsZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94VGl0bGUsIG51bGwsIGxhYmVsKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjaGVja2VkID0gdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoc2luZ2xlU2VsZWN0aW9uICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggJiYgc2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsID09PSBsYWJlbCAmJiBzZWxlY3RlZE9wdGlvbnNbMF0ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgY2hlY2tlZCA9ICdvbic7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcHRpb25Jc0ZvY3VzZWQgPSBhY3RpdmVPcHRpb25JbmRleCA9PT0gaW5kZXg7XG4gICAgICB2YXIgb3B0aW9uSXNEaXNhYmxlZCA9IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSAmJiBvcHRpb24uZGlzYWJsZWQgPT09IHRydWU7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlGaWx0ZXJTZWxlY3RJdGVtLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAga2V5OiAoX29wdGlvbiRrZXkgPSBvcHRpb24ua2V5KSAhPT0gbnVsbCAmJiBfb3B0aW9uJGtleSAhPT0gdm9pZCAwID8gX29wdGlvbiRrZXkgOiBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgICAgICBpZiAob25PcHRpb25DbGljaykge1xuICAgICAgICAgICAgb25PcHRpb25DbGljayhvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiBvcHRpb25SZWYuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgaW5kZXgpLFxuICAgICAgICBpc0ZvY3VzZWQ6IG9wdGlvbklzRm9jdXNlZCxcbiAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgc2hvd0ljb25zOiBzaW5nbGVTZWxlY3Rpb24gPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIGlkOiByb290SWQoXCJfb3B0aW9uLVwiLmNvbmNhdChpbmRleCkpLFxuICAgICAgICB0aXRsZTogbGFiZWxcbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgfSwgcmVuZGVyT3B0aW9uID8gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IE9QVElPTl9DT05URU5UX0NMQVNTTkFNRVxuICAgICAgfSwgcmVuZGVyT3B0aW9uKG9wdGlvbiwgc2VhcmNoVmFsdWUsICdldWlDb21ib0JveE9wdGlvbl9fcmVuZGVyT3B0aW9uJykpIDogX19fRW1vdGlvbkpTWChFdWlIaWdobGlnaHQsIHtcbiAgICAgICAgc2VhcmNoOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBPUFRJT05fQ09OVEVOVF9DTEFTU05BTUVcbiAgICAgIH0sIGxhYmVsKSwgb3B0aW9uSXNGb2N1c2VkICYmICFvcHRpb25Jc0Rpc2FibGVkID8gaGl0RW50ZXJCYWRnZSA6IG51bGwpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveE9wdGlvbnNMaXN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBXYWl0IGEgZnJhbWUsIG90aGVyd2lzZSBtb3ZpbmcgZm9jdXMgZnJvbSBvbmUgY29tYm8gYm94IHRvIGFub3RoZXIgd2lsbCByZXN1bHQgaW4gdGhlIGNsYXNzXG4gICAgICAvLyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGJvZHkuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2V1aUJvZHktaGFzUG9ydGFsQ29udGVudCcpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVQb3NpdGlvbik7IC8vIEZpcmVmb3ggd2lsbCB0cmlnZ2VyIGEgc2Nyb2xsIGV2ZW50IGluIG1hbnkgY29tbW9uIHNpdHVhdGlvbnMgd2hlbiB0aGUgb3B0aW9ucyBsaXN0IGRpdiBpcyBhcHBlbmRlZFxuICAgICAgLy8gdG8gdGhlIERPTTsgaW4gdGVzdGluZyBpdCB3YXMgYWx3YXlzIHdpdGhpbiAxMDBtcywgYnV0IHNldHRpbmcgYSB0aW1lb3V0IGhlcmUgZm9yIDUwMG1zIHRvIGJlIHNhZmVcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBfdGhpczIuY2xvc2VMaXN0T25TY3JvbGwsIHtcbiAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICAgIC8vIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgYXMgd2Ugd29uJ3QgY2FsbCBwcmV2ZW50RGVmYXVsdFxuICAgICAgICAgIGNhcHR1cmU6IHRydWUgLy8gc2Nyb2xsIGV2ZW50cyBkb24ndCBidWJibGUsIHRoZXkgbXVzdCBiZSBjYXB0dXJlZCBpbnN0ZWFkXG5cbiAgICAgICAgfSk7XG4gICAgICB9LCA1MDApO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIG9wdGlvbnMgPSBwcmV2UHJvcHMub3B0aW9ucyxcbiAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMgPSBwcmV2UHJvcHMuc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gcHJldlByb3BzLnNlYXJjaFZhbHVlOyAvLyBXZSBkb24ndCBjb21wYXJlIG1hdGNoaW5nT3B0aW9ucyBiZWNhdXNlIHRoYXQgd2lsbCByZXN1bHQgaW4gYSBsb29wLlxuXG4gICAgICBpZiAoc2VhcmNoVmFsdWUgIT09IHRoaXMucHJvcHMuc2VhcmNoVmFsdWUgfHwgb3B0aW9ucyAhPT0gdGhpcy5wcm9wcy5vcHRpb25zIHx8IHNlbGVjdGVkT3B0aW9ucyAhPT0gdGhpcy5wcm9wcy5zZWxlY3RlZE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saXN0UmVmICYmIHR5cGVvZiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4ICE9PSBwcmV2UHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgdGhpcy5saXN0UmVmLnNjcm9sbFRvSXRlbSh0aGlzLnByb3BzLmFjdGl2ZU9wdGlvbkluZGV4LCAnYXV0bycpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnZXVpQm9keS1oYXNQb3J0YWxDb250ZW50Jyk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVQb3NpdGlvbik7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5jbG9zZUxpc3RPblNjcm9sbCwge1xuICAgICAgICBjYXB0dXJlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRhdGFUZXN0U3ViaiA9IF90aGlzJHByb3BzMlsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBhcmVBbGxPcHRpb25zU2VsZWN0ZWQgPSBfdGhpcyRwcm9wczIuYXJlQWxsT3B0aW9uc1NlbGVjdGVkLFxuICAgICAgICAgIGN1c3RvbU9wdGlvblRleHQgPSBfdGhpcyRwcm9wczIuY3VzdG9tT3B0aW9uVGV4dCxcbiAgICAgICAgICBmdWxsV2lkdGggPSBfdGhpcyRwcm9wczIuZnVsbFdpZHRoLFxuICAgICAgICAgIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSxcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczIuaXNMb2FkaW5nLFxuICAgICAgICAgIGxpc3RSZWYgPSBfdGhpcyRwcm9wczIubGlzdFJlZixcbiAgICAgICAgICBtYXRjaGluZ09wdGlvbnMgPSBfdGhpcyRwcm9wczIubWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICAgIG9uQ2xvc2VMaXN0ID0gX3RoaXMkcHJvcHMyLm9uQ2xvc2VMaXN0LFxuICAgICAgICAgIG9uQ3JlYXRlT3B0aW9uID0gX3RoaXMkcHJvcHMyLm9uQ3JlYXRlT3B0aW9uLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczIub25PcHRpb25DbGljayxcbiAgICAgICAgICBvbk9wdGlvbkVudGVyS2V5ID0gX3RoaXMkcHJvcHMyLm9uT3B0aW9uRW50ZXJLZXksXG4gICAgICAgICAgb25TY3JvbGwgPSBfdGhpcyRwcm9wczIub25TY3JvbGwsXG4gICAgICAgICAgb3B0aW9uUmVmID0gX3RoaXMkcHJvcHMyLm9wdGlvblJlZixcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMyLm9wdGlvbnMsXG4gICAgICAgICAgX3RoaXMkcHJvcHMyJHBvc2l0aW9uID0gX3RoaXMkcHJvcHMyLnBvc2l0aW9uLFxuICAgICAgICAgIHBvc2l0aW9uID0gX3RoaXMkcHJvcHMyJHBvc2l0aW9uID09PSB2b2lkIDAgPyAnYm90dG9tJyA6IF90aGlzJHByb3BzMiRwb3NpdGlvbixcbiAgICAgICAgICByZW5kZXJPcHRpb24gPSBfdGhpcyRwcm9wczIucmVuZGVyT3B0aW9uLFxuICAgICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzMi5yb290SWQsXG4gICAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMyLnJvd0hlaWdodCxcbiAgICAgICAgICBzY3JvbGxUb0luZGV4ID0gX3RoaXMkcHJvcHMyLnNjcm9sbFRvSW5kZXgsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczIuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uID0gX3RoaXMkcHJvcHMyLnVwZGF0ZVBvc2l0aW9uLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHMyLndpZHRoLFxuICAgICAgICAgIGRlbGltaXRlciA9IF90aGlzJHByb3BzMi5kZWxpbWl0ZXIsXG4gICAgICAgICAgekluZGV4ID0gX3RoaXMkcHJvcHMyLnpJbmRleCxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzMi5zdHlsZSxcbiAgICAgICAgICBsaXN0Ym94QXJpYUxhYmVsID0gX3RoaXMkcHJvcHMyLmxpc3Rib3hBcmlhTGFiZWwsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZDIpO1xuXG4gICAgICB2YXIgZW1wdHlTdGF0ZUNvbnRlbnQ7XG5cbiAgICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgICAgICAgIGd1dHRlclNpemU6IFwic1wiLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiXG4gICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgICBncm93OiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgICAgc2l6ZTogXCJtXCJcbiAgICAgICAgfSkpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5sb2FkaW5nT3B0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiTG9hZGluZyBvcHRpb25zXCJcbiAgICAgICAgfSkpKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVmFsdWUgJiYgbWF0Y2hpbmdPcHRpb25zICYmIG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKG9uQ3JlYXRlT3B0aW9uICYmIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICBpZiAoZGVsaW1pdGVyICYmIHNlYXJjaFZhbHVlLmluY2x1ZGVzKGRlbGltaXRlcikpIHtcbiAgICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgICAgICAgfSwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25fX2VtcHR5U3RhdGVUZXh0XCJcbiAgICAgICAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmRlbGltaXRlck1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgZGVmYXVsdDogXCJBZGQgZWFjaCBpdGVtIHNlcGFyYXRlZCBieSB7ZGVsaW1pdGVyfVwiLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICBkZWxpbWl0ZXI6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgZGVsaW1pdGVyKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSksIGhpdEVudGVyQmFkZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWRPcHRpb25Gb3JWYWx1ZSA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoc2VhcmNoVmFsdWUsIHNlbGVjdGVkT3B0aW9ucyk7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbkZvclZhbHVlKSB7XG4gICAgICAgICAgICAgIC8vIERpc2FsbG93IGR1cGxpY2F0ZSBjdXN0b20gb3B0aW9ucy5cbiAgICAgICAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmFscmVhZHlBZGRlZFwiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwie2xhYmVsfSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkXCIsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBsYWJlbDogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWxlY3RlZE9wdGlvbkZvclZhbHVlLmxhYmVsKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGhpZ2hsaWdodFNlYXJjaFZhbHVlID0gZnVuY3Rpb24gaGlnaGxpZ2h0U2VhcmNoVmFsdWUodGV4dCwgc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgvKFxce3NlYXJjaFZhbHVlfSkvLCAnZ2knKTtcbiAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSB0ZXh0LnNwbGl0KHJlZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJwXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgICAgIH0sIHBhcnRzLm1hcChmdW5jdGlvbiAocGFydCwgaWR4KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGFydC5tYXRjaChyZWcpID8gX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaWR4XG4gICAgICAgICAgICAgICAgICB9LCBzZWFyY2hWYWx1ZSkgOiBwYXJ0O1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBlbXB0eVN0YXRlQ29udGVudCA9IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fY29udGVudFdyYXBwZXJcIlxuICAgICAgICAgICAgICB9LCBjdXN0b21PcHRpb25UZXh0ID8gaGlnaGxpZ2h0U2VhcmNoVmFsdWUoY3VzdG9tT3B0aW9uVGV4dCwgc2VhcmNoVmFsdWUpIDogX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlDb21ib0JveE9wdGlvbl9fZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0LmNyZWF0ZUN1c3RvbU9wdGlvblwiLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFwiQWRkIHtzZWFyY2hWYWx1ZX0gYXMgYSBjdXN0b20gb3B0aW9uXCIsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICBzZWFyY2hWYWx1ZTogX19fRW1vdGlvbkpTWChcInN0cm9uZ1wiLCBudWxsLCBzZWFyY2hWYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKSwgaGl0RW50ZXJCYWRnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0Lm5vTWF0Y2hpbmdPcHRpb25zXCIsXG4gICAgICAgICAgICBkZWZhdWx0OiBcIntzZWFyY2hWYWx1ZX0gZG9lc24ndCBtYXRjaCBhbnkgb3B0aW9uc1wiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiBfX19FbW90aW9uSlNYKFwic3Ryb25nXCIsIG51bGwsIHNlYXJjaFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgZW1wdHlTdGF0ZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFwicFwiLCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveE9wdGlvbnNMaXN0Lm5vQXZhaWxhYmxlT3B0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVGhlcmUgYXJlbid0IGFueSBvcHRpb25zIGF2YWlsYWJsZVwiXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJlQWxsT3B0aW9uc1NlbGVjdGVkKSB7XG4gICAgICAgIGVtcHR5U3RhdGVDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgdG9rZW46IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdC5hbGxPcHRpb25zU2VsZWN0ZWRcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIllvdSd2ZSBzZWxlY3RlZCBhbGwgYXZhaWxhYmxlIG9wdGlvbnNcIlxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbXB0eVN0YXRlID0gZW1wdHlTdGF0ZUNvbnRlbnQgPyBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgICAgc2l6ZTogXCJ4c1wiLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hPcHRpb25zTGlzdF9fZW1wdHlcIlxuICAgICAgfSwgZW1wdHlTdGF0ZUNvbnRlbnQpIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIG51bVZpc2libGVPcHRpb25zID0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA8IDcgPyBtYXRjaGluZ09wdGlvbnMubGVuZ3RoIDogNztcbiAgICAgIHZhciBoZWlnaHQgPSBudW1WaXNpYmxlT3B0aW9ucyAqIChyb3dIZWlnaHQgKyAxKTsgLy8gQWRkIG9uZSBmb3IgdGhlIGJvcmRlclxuICAgICAgLy8gYm91bmRlZCBieSBtYXgtaGVpZ2h0IG9mIGV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX3Jvd1dyYXBcblxuICAgICAgdmFyIGJvdW5kZWRIZWlnaHQgPSBoZWlnaHQgPiAyMDAgPyAyMDAgOiBoZWlnaHQ7XG5cbiAgICAgIHZhciBvcHRpb25zTGlzdCA9IF9fX0Vtb3Rpb25KU1goRml4ZWRTaXplTGlzdCwge1xuICAgICAgICBoZWlnaHQ6IGJvdW5kZWRIZWlnaHQsXG4gICAgICAgIG9uU2Nyb2xsOiBvblNjcm9sbCxcbiAgICAgICAgaXRlbUNvdW50OiBtYXRjaGluZ09wdGlvbnMubGVuZ3RoLFxuICAgICAgICBpdGVtU2l6ZTogcm93SGVpZ2h0LFxuICAgICAgICBpdGVtRGF0YTogbWF0Y2hpbmdPcHRpb25zLFxuICAgICAgICByZWY6IHRoaXMuc2V0TGlzdFJlZixcbiAgICAgICAgaW5uZXJSZWY6IHRoaXMuc2V0TGlzdEJveFJlZixcbiAgICAgICAgd2lkdGg6IHdpZHRoXG4gICAgICB9LCB0aGlzLkxpc3RSb3cpO1xuICAgICAgLyoqXG4gICAgICAgKiBSZXVzaW5nIHRoZSBFdWlQb3BvdmVyX19wYW5lbCBjbGFzc2VzIHRvIGhlbHAgd2l0aCBjb25zaXN0ZW5jeS9tYWludGVuYW5jZS5cbiAgICAgICAqIEJ1dCB0aGlzIHNob3VsZCByZWFsbHkgYmUgY29udmVydGVkIHRvIHVzZXIgdGhlIHBvcG92ZXIgY29tcG9uZW50LlxuICAgICAgICovXG5cblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveE9wdGlvbnNMaXN0Jyk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyUGFuZWwsIF9leHRlbmRzKHtcbiAgICAgICAgcGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgICAgICBoYXNTaGFkb3c6IGZhbHNlLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIHBhbmVsUmVmOiB0aGlzLmxpc3RSZWZDYWxsYmFjayxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNvbWJvQm94T3B0aW9uc0xpc3QgXCIuY29uY2F0KGRhdGFUZXN0U3ViaiksXG4gICAgICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKSwge30sIHtcbiAgICAgICAgICB6SW5kZXg6IHpJbmRleFxuICAgICAgICB9KSxcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBpc0F0dGFjaGVkOiB0cnVlLFxuICAgICAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgICAgIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94T3B0aW9uc0xpc3RfX3Jvd1dyYXBcIlxuICAgICAgfSwgZW1wdHlTdGF0ZSB8fCBvcHRpb25zTGlzdCkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb21ib0JveE9wdGlvbnNMaXN0O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQ29tYm9Cb3hPcHRpb25zTGlzdCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICAnZGF0YS10ZXN0LXN1YmonOiAnJyxcbiAgcm93SGVpZ2h0OiAyOSAvLyByb3cgaGVpZ2h0IG9mIGRlZmF1bHQgb3B0aW9uIHJlbmRlcmVyXG5cbn0pO1xuXG5FdWlDb21ib0JveE9wdGlvbnNMaXN0LnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcbiAgYWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGFyZUFsbE9wdGlvbnNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGxpc3Rib3hBcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSBjdXN0b20gdGV4dCBvcHRpb24uIFlvdSBjYW4gdXNlIGB7c2VhcmNoVmFsdWV9YCBpbnNpZGUgeW91ciBzdHJpbmcgdG8gYmV0dGVyIGN1c3RvbWl6ZSB5b3VyIHRleHQuXG4gICAgICAgKiBJdCB3b24ndCBzaG93IGlmIHRoZXJlJ3Mgbm8gb25DcmVhdGVPcHRpb24uXG4gICAgICAgKi9cbiAgY3VzdG9tT3B0aW9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGxpc3RSZWY6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgbWF0Y2hpbmdPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIG9uQ2xvc2VMaXN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNyZWF0ZU9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uT3B0aW9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbk9wdGlvbkVudGVyS2V5OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25TY3JvbGw6IFByb3BUeXBlcy5hbnksXG4gIG9wdGlvblJlZjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIEFycmF5IG9mIEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uIG9iamVjdHMuIFNlZSAjRXVpQ29tYm9Cb3hPcHRpb25PcHRpb25cbiAgICAgICAqL1xuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG4gIHBvc2l0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9wXCIsIFwiYm90dG9tXCJdKSxcbiAgcmVuZGVyT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgcm9vdElkOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIHJvd0hlaWdodDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBzY3JvbGxUb0luZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBzZWFyY2hWYWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWxlY3RlZE9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgdXBkYXRlUG9zaXRpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHNpbmdsZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhc1BsYWluVGV4dDogUHJvcFR5cGVzLmJvb2xcbiAgfSkuaXNSZXF1aXJlZF0pLFxuICBkZWxpbWl0ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHpJbmRleDogUHJvcFR5cGVzLm51bWJlclxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic2VhcmNoXCIsIFwic3RyaWN0XCIsIFwiaGlnaGxpZ2h0QWxsXCIsIFwiaGFzU2NyZWVuUmVhZGVySGVscFRleHRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlNYXJrIH0gZnJvbSAnLi4vbWFyayc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgaGlnaGxpZ2h0ID0gZnVuY3Rpb24gaGlnaGxpZ2h0KHNlYXJjaFN1YmplY3QsIHNlYXJjaFZhbHVlLCBpc1N0cmljdCwgaGlnaGxpZ2h0QWxsLCBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCkge1xuICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHNlYXJjaFN1YmplY3Q7XG4gIH1cblxuICBpZiAoIXNlYXJjaFN1YmplY3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChoaWdobGlnaHRBbGwpIHtcbiAgICB2YXIgY2h1bmtzID0gZ2V0SGlnaHRsaWdodFdvcmRzKHNlYXJjaFN1YmplY3QsIHNlYXJjaFZhbHVlLCBpc1N0cmljdCk7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIG51bGwsIGNodW5rcy5tYXAoZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICB2YXIgZW5kID0gY2h1bmsuZW5kLFxuICAgICAgICAgIGhpZ2hsaWdodCA9IGNodW5rLmhpZ2hsaWdodCxcbiAgICAgICAgICBzdGFydCA9IGNodW5rLnN0YXJ0O1xuICAgICAgdmFyIHZhbHVlID0gc2VhcmNoU3ViamVjdC5zdWJzdHIoc3RhcnQsIGVuZCAtIHN0YXJ0KTtcblxuICAgICAgaWYgKGhpZ2hsaWdodCkge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlNYXJrLCB7XG4gICAgICAgICAga2V5OiBzdGFydCxcbiAgICAgICAgICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDogaGFzU2NyZWVuUmVhZGVySGVscFRleHRcbiAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSkpO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hTdWJqZWN0ID0gaXNTdHJpY3QgPyBzZWFyY2hTdWJqZWN0IDogc2VhcmNoU3ViamVjdC50b0xvd2VyQ2FzZSgpO1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gaXNTdHJpY3QgPyBzZWFyY2hWYWx1ZSA6IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBpbmRleE9mTWF0Y2ggPSBub3JtYWxpemVkU2VhcmNoU3ViamVjdC5pbmRleE9mKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSk7XG5cbiAgaWYgKGluZGV4T2ZNYXRjaCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc2VhcmNoU3ViamVjdDtcbiAgfVxuXG4gIHZhciBwcmVNYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyKDAsIGluZGV4T2ZNYXRjaCk7XG4gIHZhciBtYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyKGluZGV4T2ZNYXRjaCwgc2VhcmNoVmFsdWUubGVuZ3RoKTtcbiAgdmFyIHBvc3RNYXRjaCA9IHNlYXJjaFN1YmplY3Quc3Vic3RyKGluZGV4T2ZNYXRjaCArIHNlYXJjaFZhbHVlLmxlbmd0aCk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEZyYWdtZW50LCBudWxsLCBwcmVNYXRjaCwgX19fRW1vdGlvbkpTWChFdWlNYXJrLCB7XG4gICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IGhhc1NjcmVlblJlYWRlckhlbHBUZXh0XG4gIH0sIG1hdGNoKSwgcG9zdE1hdGNoKTtcbn07XG5cbnZhciBnZXRIaWdodGxpZ2h0V29yZHMgPSBmdW5jdGlvbiBnZXRIaWdodGxpZ2h0V29yZHMoc2VhcmNoU3ViamVjdCwgc2VhcmNoVmFsdWUsIGlzU3RyaWN0KSB7XG4gIHZhciByZWdleCA9IG5ldyBSZWdFeHAoc2VhcmNoVmFsdWUsIGlzU3RyaWN0ID8gJ2cnIDogJ2dpJyk7XG4gIHZhciBtYXRjaGVzID0gW107XG4gIHZhciBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhzZWFyY2hTdWJqZWN0KSkgIT09IG51bGwpIHtcbiAgICBtYXRjaGVzLnB1c2goe1xuICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4LFxuICAgICAgZW5kOiAobWF0Y2guaW5kZXggfHwgMCkgKyBtYXRjaFswXS5sZW5ndGhcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmaWxsSW5DaHVua3MobWF0Y2hlcywgc2VhcmNoU3ViamVjdC5sZW5ndGgpO1xufTtcblxudmFyIGZpbGxJbkNodW5rcyA9IGZ1bmN0aW9uIGZpbGxJbkNodW5rcyhjaHVua3NUb0hpZ2hsaWdodCwgdG90YWxMZW5ndGgpIHtcbiAgdmFyIGFsbENodW5rcyA9IFtdO1xuXG4gIHZhciBhcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQoc3RhcnQsIGVuZCwgaGlnaGxpZ2h0KSB7XG4gICAgaWYgKGVuZCAtIHN0YXJ0ID4gMCkge1xuICAgICAgYWxsQ2h1bmtzLnB1c2goe1xuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIGVuZDogZW5kLFxuICAgICAgICBoaWdobGlnaHQ6IGhpZ2hsaWdodFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGlmIChjaHVua3NUb0hpZ2hsaWdodC5sZW5ndGggPT09IDApIHtcbiAgICBhcHBlbmQoMCwgdG90YWxMZW5ndGgsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGFzdEluZGV4ID0gMDtcbiAgICBjaHVua3NUb0hpZ2hsaWdodC5mb3JFYWNoKGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgYXBwZW5kKGxhc3RJbmRleCwgY2h1bmsuc3RhcnQsIGZhbHNlKTtcbiAgICAgIGFwcGVuZChjaHVuay5zdGFydCwgY2h1bmsuZW5kLCB0cnVlKTtcbiAgICAgIGxhc3RJbmRleCA9IGNodW5rLmVuZDtcbiAgICB9KTtcbiAgICBhcHBlbmQobGFzdEluZGV4LCB0b3RhbExlbmd0aCwgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIGFsbENodW5rcztcbn07XG5cbmV4cG9ydCB2YXIgRXVpSGlnaGxpZ2h0ID0gZnVuY3Rpb24gRXVpSGlnaGxpZ2h0KF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgc2VhcmNoID0gX3JlZi5zZWFyY2gsXG4gICAgICBfcmVmJHN0cmljdCA9IF9yZWYuc3RyaWN0LFxuICAgICAgc3RyaWN0ID0gX3JlZiRzdHJpY3QgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRzdHJpY3QsXG4gICAgICBfcmVmJGhpZ2hsaWdodEFsbCA9IF9yZWYuaGlnaGxpZ2h0QWxsLFxuICAgICAgaGlnaGxpZ2h0QWxsID0gX3JlZiRoaWdobGlnaHRBbGwgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRoaWdobGlnaHRBbGwsXG4gICAgICBfcmVmJGhhc1NjcmVlblJlYWRlckggPSBfcmVmLmhhc1NjcmVlblJlYWRlckhlbHBUZXh0LFxuICAgICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQgPSBfcmVmJGhhc1NjcmVlblJlYWRlckggPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGhhc1NjcmVlblJlYWRlckgsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCByZXN0KSwgaGlnaGxpZ2h0KGNoaWxkcmVuLCBzZWFyY2gsIHN0cmljdCwgaGlnaGxpZ2h0QWxsLCBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCkpO1xufTtcbkV1aUhpZ2hsaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIHN0cmluZyB0byBoaWdobGlnaHQgYXMgdGhpcyBjb21wb25lbnQncyBjb250ZW50XG4gICAgICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIFdoYXQgdG8gc2VhcmNoIGZvclxuICAgICAgICovXG4gIHNlYXJjaDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogU2hvdWxkIHRoZSBzZWFyY2ggYmUgc3RyaWN0IG9yIG5vdFxuICAgICAgICovXG4gIHN0cmljdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBTaG91bGQgaGlnaGxpZ2h0IGFsbCBtYXRjaGVzXG4gICAgICAgKi9cbiAgaGlnaGxpZ2h0QWxsOiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGFzU2NyZWVuUmVhZGVySGVscFRleHRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IGV1aU1hcmtTdHlsZXMgfSBmcm9tICcuL21hcmsuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aU1hcmsgPSBmdW5jdGlvbiBFdWlNYXJrKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiRoYXNTY3JlZW5SZWFkZXJIID0gX3JlZi5oYXNTY3JlZW5SZWFkZXJIZWxwVGV4dCxcbiAgICAgIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ID0gX3JlZiRoYXNTY3JlZW5SZWFkZXJIID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRoYXNTY3JlZW5SZWFkZXJILFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciB1c2VUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBoaWdobGlnaHRTdGFydCA9IHVzZUV1aUkxOG4oJ2V1aU1hcmsuaGlnaGxpZ2h0U3RhcnQnLCAnaGlnaGxpZ2h0IHN0YXJ0Jyk7XG4gIHZhciBoaWdobGlnaHRFbmQgPSB1c2VFdWlJMThuKCdldWlNYXJrLmhpZ2hsaWdodEVuZCcsICdoaWdobGlnaHQgZW5kJyk7XG4gIHZhciBzdHlsZXMgPSBldWlNYXJrU3R5bGVzKHVzZVRoZW1lLCB7XG4gICAgaGFzU2NyZWVuUmVhZGVySGVscFRleHQ6IGhhc1NjcmVlblJlYWRlckhlbHBUZXh0LFxuICAgIGhpZ2hsaWdodFN0YXJ0OiBoaWdobGlnaHRTdGFydCxcbiAgICBoaWdobGlnaHRFbmQ6IGhpZ2hsaWdodEVuZFxuICB9KTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlNYXJrJywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJtYXJrXCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IFtzdHlsZXMsIFwiO2xhYmVsOkV1aU1hcms7XCJdLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aU1hcmsucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byByZW1vdmUgdGhlIENTUyA6YmVmb3JlIGFuZCA6YWZ0ZXJcbiAgICAgICAqIHNjcmVlbiByZWFkZXIgaGVscGVyIHRleHRcbiAgICAgICAqL1xuICBoYXNTY3JlZW5SZWFkZXJIZWxwVGV4dDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBSZWFjdE5vZGUgdG8gcmVuZGVyIGFzIHRoaXMgY29tcG9uZW50J3MgY29udGVudFxuICAgICAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkXG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5leHBvcnQgdmFyIGV1aU1hcmtTdHlsZXMgPSBmdW5jdGlvbiBldWlNYXJrU3R5bGVzKF9yZWYsIF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYuZXVpVGhlbWUsXG4gICAgICBjb2xvck1vZGUgPSBfcmVmLmNvbG9yTW9kZTtcbiAgdmFyIGhhc1NjcmVlblJlYWRlckhlbHBUZXh0ID0gX3JlZjIuaGFzU2NyZWVuUmVhZGVySGVscFRleHQsXG4gICAgICBoaWdobGlnaHRTdGFydCA9IF9yZWYyLmhpZ2hsaWdodFN0YXJ0LFxuICAgICAgaGlnaGxpZ2h0RW5kID0gX3JlZjIuaGlnaGxpZ2h0RW5kO1xuICAvLyBUT0RPOiBXYXMgJGV1aUZvY3VzQmFja2dyb3VuZENvbG9yXG4gIHZhciB0cmFuc3BhcmVuY3kgPSB7XG4gICAgTElHSFQ6IDAuMSxcbiAgICBEQVJLOiAwLjNcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yOlwiLCB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMucHJpbWFyeSwgdHJhbnNwYXJlbmN5W2NvbG9yTW9kZV0pLCBcIjtmb250LXdlaWdodDpcIiwgZXVpVGhlbWUuZm9udC53ZWlnaHQuYm9sZCwgXCI7Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy50ZXh0LCBcIjtcIiwgaGFzU2NyZWVuUmVhZGVySGVscFRleHQgPT09IHRydWUgJiYgXCJcXG4gICAgICAmOmJlZm9yZSxcXG4gICAgICAmOmFmdGVyIHtcXG4gICAgICAgIFwiLmNvbmNhdChldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiXFxuICAgICAgfVxcblxcbiAgICAgICY6YmVmb3JlIHtcXG4gICAgICAgIGNvbnRlbnQ6ICcgW1wiKS5jb25jYXQoaGlnaGxpZ2h0U3RhcnQsIFwiXSAnO1xcbiAgICAgIH1cXG5cXG4gICAgICAmOmFmdGVyIHtcXG4gICAgICAgIGNvbnRlbnQ6ICcgW1wiKS5jb25jYXQoaGlnaGxpZ2h0RW5kLCBcIl0gJztcXG4gICAgICB9XFxuICAgIFwiKSwgXCI7O2xhYmVsOmV1aU1hcmtTdHlsZXM7XCIpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDb21ib0JveFRpdGxlID0gZnVuY3Rpb24gRXVpQ29tYm9Cb3hUaXRsZShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hUaXRsZVwiXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5FdWlDb21ib0JveFRpdGxlLnByb3BUeXBlcyA9IHt9OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiY2hlY2tlZFwiLCBcImlzRm9jdXNlZFwiLCBcInNob3dJY29uc1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtIH0gZnJvbSAnLi4vZmxleCc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG52YXIgcmVzb2x2ZUljb25BbmRDb2xvciA9IGZ1bmN0aW9uIHJlc29sdmVJY29uQW5kQ29sb3IoY2hlY2tlZCkge1xuICBpZiAoIWNoZWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWNvbjogJ2VtcHR5J1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gY2hlY2tlZCA9PT0gJ29uJyA/IHtcbiAgICBpY29uOiAnY2hlY2snLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfSA6IHtcbiAgICBpY29uOiAnY3Jvc3MnLFxuICAgIGNvbG9yOiAndGV4dCdcbiAgfTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpRmlsdGVyU2VsZWN0SXRlbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpRmlsdGVyU2VsZWN0SXRlbSwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlGaWx0ZXJTZWxlY3RJdGVtKTtcblxuICBmdW5jdGlvbiBFdWlGaWx0ZXJTZWxlY3RJdGVtKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlGaWx0ZXJTZWxlY3RJdGVtKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYnV0dG9uUmVmXCIsIG51bGwpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5idXR0b25SZWYpIHtcbiAgICAgICAgX3RoaXMuYnV0dG9uUmVmLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFzRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmhhc0ZvY3VzO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUZpbHRlclNlbGVjdEl0ZW0sIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgICBkaXNhYmxlZCA9IF90aGlzJHByb3BzLmRpc2FibGVkLFxuICAgICAgICAgIGNoZWNrZWQgPSBfdGhpcyRwcm9wcy5jaGVja2VkLFxuICAgICAgICAgIGlzRm9jdXNlZCA9IF90aGlzJHByb3BzLmlzRm9jdXNlZCxcbiAgICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wcy5zaG93SWNvbnMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wcywgX2V4Y2x1ZGVkKTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlGaWx0ZXJTZWxlY3RJdGVtJywge1xuICAgICAgICAnZXVpRmlsdGVyU2VsZWN0SXRlbS1pc0ZvY3VzZWQnOiBpc0ZvY3VzZWRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgaWNvbk5vZGU7XG5cbiAgICAgIGlmIChzaG93SWNvbnMpIHtcbiAgICAgICAgdmFyIF9yZXNvbHZlSWNvbkFuZENvbG9yID0gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSxcbiAgICAgICAgICAgIGljb24gPSBfcmVzb2x2ZUljb25BbmRDb2xvci5pY29uLFxuICAgICAgICAgICAgY29sb3IgPSBfcmVzb2x2ZUljb25BbmRDb2xvci5jb2xvcjtcblxuICAgICAgICBpY29uTm9kZSA9IF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgICBncm93OiBmYWxzZVxuICAgICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgdHlwZTogaWNvblxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoX3JlZikge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuYnV0dG9uUmVmID0gX3JlZjtcbiAgICAgICAgfSxcbiAgICAgICAgcm9sZTogXCJvcHRpb25cIixcbiAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IGlzRm9jdXNlZCxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIGd1dHRlclNpemU6IFwic1wiLFxuICAgICAgICBjb21wb25lbnQ6IFwic3BhblwiLFxuICAgICAgICByZXNwb25zaXZlOiBmYWxzZVxuICAgICAgfSwgaWNvbk5vZGUsIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aUZpbHRlclNlbGVjdEl0ZW1fX2NvbnRlbnRcIixcbiAgICAgICAgY29tcG9uZW50OiBcInNwYW5cIlxuICAgICAgfSwgY2hpbGRyZW4pKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aUZpbHRlclNlbGVjdEl0ZW07XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlGaWx0ZXJTZWxlY3RJdGVtLCBcImRlZmF1bHRQcm9wc1wiLCB7XG4gIHNob3dJY29uczogdHJ1ZVxufSk7XG5cbkV1aUZpbHRlclNlbGVjdEl0ZW0ucHJvcFR5cGVzID0ge1xuICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIl0pLFxuICBzaG93SWNvbnM6IFByb3BUeXBlcy5ib29sLFxuICBpc0ZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgZmxhdHRlbk9wdGlvbkdyb3VwcyA9IGZ1bmN0aW9uIGZsYXR0ZW5PcHRpb25Hcm91cHMob3B0aW9uc09yR3JvdXBzKSB7XG4gIHJldHVybiBvcHRpb25zT3JHcm91cHMucmVkdWNlKGZ1bmN0aW9uIChvcHRpb25zLCBvcHRpb25Pckdyb3VwKSB7XG4gICAgaWYgKG9wdGlvbk9yR3JvdXAub3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuY29uY2F0KG9wdGlvbk9yR3JvdXAub3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucHVzaChvcHRpb25Pckdyb3VwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfSwgW10pO1xufTtcbmV4cG9ydCB2YXIgZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSA9IGZ1bmN0aW9uIGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoc2VhcmNoVmFsdWUsIHNlbGVjdGVkT3B0aW9ucywgb3B0aW9uS2V5KSB7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbmQoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKSA9PT0gbm9ybWFsaXplZFNlYXJjaFZhbHVlICYmICghb3B0aW9uS2V5IHx8IG9wdGlvbi5rZXkgPT09IG9wdGlvbktleSk7XG4gIH0pO1xufTtcblxudmFyIGNvbGxlY3RNYXRjaGluZ09wdGlvbiA9IGZ1bmN0aW9uIGNvbGxlY3RNYXRjaGluZ09wdGlvbihhY2N1bXVsYXRvciwgb3B0aW9uLCBzZWxlY3RlZE9wdGlvbnMsIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2hvd1ByZXZTZWxlY3RlZCkge1xuICAvLyBPbmx5IHNob3cgb3B0aW9ucyB3aGljaCBoYXZlbid0IHlldCBiZWVuIHNlbGVjdGVkIHVubGVzcyByZXF1ZXN0ZWQuXG4gIHZhciBzZWxlY3RlZE9wdGlvbiA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUob3B0aW9uLmxhYmVsLCBzZWxlY3RlZE9wdGlvbnMsIG9wdGlvbi5rZXkpO1xuXG4gIGlmIChzZWxlY3RlZE9wdGlvbiAmJiAhc2hvd1ByZXZTZWxlY3RlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiB0aGUgb3B0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBwcmUtZmlsdGVyZWQgdGhlbiB3ZSBjYW4gc2tpcCBmaWx0ZXJpbmcgYWdhaW5zdCB0aGUgc2VhcmNoIHZhbHVlLlxuXG5cbiAgaWYgKGlzUHJlRmlsdGVyZWQpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFub3JtYWxpemVkU2VhcmNoVmFsdWUpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5vcm1hbGl6ZWRPcHRpb24gPSBvcHRpb24ubGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKG5vcm1hbGl6ZWRPcHRpb24uaW5jbHVkZXMobm9ybWFsaXplZFNlYXJjaFZhbHVlKSkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgfVxufTtcblxuZXhwb3J0IHZhciBnZXRNYXRjaGluZ09wdGlvbnMgPSBmdW5jdGlvbiBnZXRNYXRjaGluZ09wdGlvbnMob3B0aW9ucywgc2VsZWN0ZWRPcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2hvd1ByZXZTZWxlY3RlZCwgc29ydE1hdGNoZXNCeSkge1xuICB2YXIgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBtYXRjaGluZ09wdGlvbnMgPSBbXTtcbiAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICBpZiAob3B0aW9uLm9wdGlvbnMpIHtcbiAgICAgIHZhciBtYXRjaGluZ09wdGlvbnNGb3JHcm91cCA9IFtdO1xuICAgICAgb3B0aW9uLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXBPcHRpb24pIHtcbiAgICAgICAgY29sbGVjdE1hdGNoaW5nT3B0aW9uKG1hdGNoaW5nT3B0aW9uc0Zvckdyb3VwLCBncm91cE9wdGlvbiwgc2VsZWN0ZWRPcHRpb25zLCBub3JtYWxpemVkU2VhcmNoVmFsdWUsIGlzUHJlRmlsdGVyZWQsIHNob3dQcmV2U2VsZWN0ZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChtYXRjaGluZ09wdGlvbnNGb3JHcm91cC5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEFkZCBvcHRpb24gZm9yIGdyb3VwIGxhYmVsXG4gICAgICAgIG1hdGNoaW5nT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICBrZXk6IG9wdGlvbi5rZXksXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi5sYWJlbCxcbiAgICAgICAgICBpc0dyb3VwTGFiZWxPcHRpb246IHRydWVcbiAgICAgICAgfSk7IC8vIEFkZCBtYXRjaGluZyBvcHRpb25zIGZvciBncm91cFxuICAgICAgICAvLyB1c2UgY29uY2F0IG92ZXIgc3ByZWFkaW5nIHRvIHN1cHBvcnQgbGFyZ2UgYXJyYXlzIC0gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL2RlbW8vamF2YXNjcmlwdC1hcmd1bWVudC1jb3VudFxuXG4gICAgICAgIG1hdGNoaW5nT3B0aW9ucyA9IG1hdGNoaW5nT3B0aW9ucy5jb25jYXQobWF0Y2hpbmdPcHRpb25zRm9yR3JvdXApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2xsZWN0TWF0Y2hpbmdPcHRpb24obWF0Y2hpbmdPcHRpb25zLCBvcHRpb24sIHNlbGVjdGVkT3B0aW9ucywgbm9ybWFsaXplZFNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzaG93UHJldlNlbGVjdGVkKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChzb3J0TWF0Y2hlc0J5ID09PSAnc3RhcnRzV2l0aCcpIHtcbiAgICB2YXIgcmVmT2JqID0ge1xuICAgICAgc3RhcnRXaXRoOiBbXSxcbiAgICAgIG90aGVyczogW11cbiAgICB9O1xuICAgIG1hdGNoaW5nT3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIGlmIChvYmplY3QubGFiZWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkpIHtcbiAgICAgICAgcmVmT2JqLnN0YXJ0V2l0aC5wdXNoKG9iamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZPYmoub3RoZXJzLnB1c2gob2JqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyZWZPYmouc3RhcnRXaXRoKSwgX3RvQ29uc3VtYWJsZUFycmF5KHJlZk9iai5vdGhlcnMpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGluZ09wdGlvbnM7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wia2V5XCIsIFwibGFiZWxcIiwgXCJjb2xvclwiLCBcIm9uQ2xpY2tcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQXV0b3NpemVJbnB1dCBmcm9tICdyZWFjdC1pbnB1dC1hdXRvc2l6ZSc7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlGb3JtQ29udHJvbExheW91dCB9IGZyb20gJy4uLy4uL2Zvcm0vZm9ybV9jb250cm9sX2xheW91dCc7XG5pbXBvcnQgeyBFdWlDb21ib0JveFBpbGwgfSBmcm9tICcuL2NvbWJvX2JveF9waWxsJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUNvbWJvQm94SW5wdXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aUNvbWJvQm94SW5wdXQsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29tYm9Cb3hJbnB1dCk7XG5cbiAgZnVuY3Rpb24gRXVpQ29tYm9Cb3hJbnB1dCgpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQ29tYm9Cb3hJbnB1dCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInVwZGF0ZVBvc2l0aW9uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFdhaXQgYSBiZWF0IGZvciB0aGUgRE9NIHRvIHVwZGF0ZSwgc2luY2Ugd2UgZGVwZW5kIG9uIERPTSBlbGVtZW50cycgYm91bmRzLlxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMucHJvcHMudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uRm9jdXNcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5wcm9wcy5vbkZvY3VzKGV2ZW50KTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBoYXNGb2N1czogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25CbHVyXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uQmx1cikge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhhc0ZvY3VzOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5wdXRPbkNoYW5nZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wcy5zZWFyY2hWYWx1ZTtcblxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5wdXRSZWZDYWxsYmFja1wiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICB2YXIgYXV0b1NpemVJbnB1dFJlZiA9IF90aGlzLnByb3BzLmF1dG9TaXplSW5wdXRSZWY7XG5cbiAgICAgIGlmIChhdXRvU2l6ZUlucHV0UmVmKSB7XG4gICAgICAgIGF1dG9TaXplSW5wdXRSZWYocmVmKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveElucHV0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgICAgdmFyIHNlYXJjaFZhbHVlID0gcHJldlByb3BzLnNlYXJjaFZhbHVlOyAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgcG9zaXRpb24gb2YgZXZlcnl0aGluZyBpZiB0aGUgdXNlciBlbnRlcnMgZW5vdWdoIGlucHV0IHRvIGNoYW5nZVxuICAgICAgLy8gdGhlIHNpemUgb2YgdGhlIGlucHV0LlxuXG4gICAgICBpZiAoc2VhcmNoVmFsdWUgIT09IHRoaXMucHJvcHMuc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29tcHJlc3NlZCA9IF90aGlzJHByb3BzMi5jb21wcmVzc2VkLFxuICAgICAgICAgIGZvY3VzZWRPcHRpb25JZCA9IF90aGlzJHByb3BzMi5mb2N1c2VkT3B0aW9uSWQsXG4gICAgICAgICAgZnVsbFdpZHRoID0gX3RoaXMkcHJvcHMyLmZ1bGxXaWR0aCxcbiAgICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnMgPSBfdGhpcyRwcm9wczIuaGFzU2VsZWN0ZWRPcHRpb25zLFxuICAgICAgICAgIGlkID0gX3RoaXMkcHJvcHMyLmlkLFxuICAgICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHMyLmlucHV0UmVmLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSBfdGhpcyRwcm9wczIuaXNEaXNhYmxlZCxcbiAgICAgICAgICBpc0xpc3RPcGVuID0gX3RoaXMkcHJvcHMyLmlzTGlzdE9wZW4sXG4gICAgICAgICAgbm9JY29uID0gX3RoaXMkcHJvcHMyLm5vSWNvbixcbiAgICAgICAgICBvbkNsZWFyID0gX3RoaXMkcHJvcHMyLm9uQ2xlYXIsXG4gICAgICAgICAgb25DbGljayA9IF90aGlzJHByb3BzMi5vbkNsaWNrLFxuICAgICAgICAgIG9uQ2xvc2VMaXN0Q2xpY2sgPSBfdGhpcyRwcm9wczIub25DbG9zZUxpc3RDbGljayxcbiAgICAgICAgICBvbk9wZW5MaXN0Q2xpY2sgPSBfdGhpcyRwcm9wczIub25PcGVuTGlzdENsaWNrLFxuICAgICAgICAgIG9uUmVtb3ZlT3B0aW9uID0gX3RoaXMkcHJvcHMyLm9uUmVtb3ZlT3B0aW9uLFxuICAgICAgICAgIHBsYWNlaG9sZGVyID0gX3RoaXMkcHJvcHMyLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIHJvb3RJZCA9IF90aGlzJHByb3BzMi5yb290SWQsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25zID0gX3RoaXMkcHJvcHMyLnNlbGVjdGVkT3B0aW9ucyxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb25Qcm9wID0gX3RoaXMkcHJvcHMyLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICB0b2dnbGVCdXR0b25SZWYgPSBfdGhpcyRwcm9wczIudG9nZ2xlQnV0dG9uUmVmLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcHJvcHMyLnZhbHVlLFxuICAgICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wczIucHJlcGVuZCxcbiAgICAgICAgICBhcHBlbmQgPSBfdGhpcyRwcm9wczIuYXBwZW5kLFxuICAgICAgICAgIGlzTG9hZGluZyA9IF90aGlzJHByb3BzMi5pc0xvYWRpbmcsXG4gICAgICAgICAgYXV0b0ZvY3VzID0gX3RoaXMkcHJvcHMyLmF1dG9Gb2N1cyxcbiAgICAgICAgICBhcmlhTGFiZWwgPSBfdGhpcyRwcm9wczJbJ2FyaWEtbGFiZWwnXSxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRieSA9IF90aGlzJHByb3BzMlsnYXJpYS1sYWJlbGxlZGJ5J107XG4gICAgICB2YXIgc2luZ2xlU2VsZWN0aW9uID0gQm9vbGVhbihzaW5nbGVTZWxlY3Rpb25Qcm9wKTtcbiAgICAgIHZhciBhc1BsYWluVGV4dCA9IHNpbmdsZVNlbGVjdGlvblByb3AgJiYgX3R5cGVvZihzaW5nbGVTZWxlY3Rpb25Qcm9wKSA9PT0gJ29iamVjdCcgJiYgc2luZ2xlU2VsZWN0aW9uUHJvcC5hc1BsYWluVGV4dCB8fCBmYWxzZTtcbiAgICAgIHZhciBwaWxscyA9IHNlbGVjdGVkT3B0aW9ucyA/IHNlbGVjdGVkT3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICB2YXIga2V5ID0gb3B0aW9uLmtleSxcbiAgICAgICAgICAgIGxhYmVsID0gb3B0aW9uLmxhYmVsLFxuICAgICAgICAgICAgY29sb3IgPSBvcHRpb24uY29sb3IsXG4gICAgICAgICAgICBvbkNsaWNrID0gb3B0aW9uLm9uQ2xpY2ssXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkKTtcblxuICAgICAgICB2YXIgcGlsbE9uQ2xvc2UgPSBpc0Rpc2FibGVkIHx8IHNpbmdsZVNlbGVjdGlvbiB8fCBvbkNsaWNrID8gdW5kZWZpbmVkIDogb25SZW1vdmVPcHRpb247XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNvbWJvQm94UGlsbCwgX2V4dGVuZHMoe1xuICAgICAgICAgIG9wdGlvbjogb3B0aW9uLFxuICAgICAgICAgIG9uQ2xvc2U6IHBpbGxPbkNsb3NlLFxuICAgICAgICAgIGtleToga2V5ICE9PSBudWxsICYmIGtleSAhPT0gdm9pZCAwID8ga2V5IDogbGFiZWwudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgICBvbkNsaWNrQXJpYUxhYmVsOiBvbkNsaWNrID8gJ0NoYW5nZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgYXNQbGFpblRleHQ6IGFzUGxhaW5UZXh0XG4gICAgICAgIH0sIHJlc3QpLCBsYWJlbCk7XG4gICAgICB9KSA6IG51bGw7XG4gICAgICB2YXIgcmVtb3ZlT3B0aW9uTWVzc2FnZTtcbiAgICAgIHZhciByZW1vdmVPcHRpb25NZXNzYWdlSWQ7XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlLmhhc0ZvY3VzKSB7XG4gICAgICAgIHZhciByZWFkUGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlciA/IFwiXCIuY29uY2F0KHBsYWNlaG9sZGVyLCBcIi5cIikgOiAnJztcbiAgICAgICAgdmFyIHJlbW92ZU9wdGlvbk1lc3NhZ2VDb250ZW50ID0gXCJDb21ibyBib3guIFNlbGVjdGVkLiBcIi5jb25jYXQoc2VhcmNoVmFsdWUgPyBcIlwiLmNvbmNhdChzZWFyY2hWYWx1ZSwgXCIuIFNlbGVjdGVkLiBcIikgOiAnJykuY29uY2F0KHNlbGVjdGVkT3B0aW9ucyAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCA/IFwiXCIuY29uY2F0KHZhbHVlLCBcIi4gUHJlc3MgQmFja3NwYWNlIHRvIGRlbGV0ZSBcIikuY29uY2F0KHNlbGVjdGVkT3B0aW9uc1tzZWxlY3RlZE9wdGlvbnMubGVuZ3RoIC0gMV0ubGFiZWwsIFwiLiBcIikgOiAnJywgXCJDb21ibyBib3ggaW5wdXQuIFwiKS5jb25jYXQocmVhZFBsYWNlaG9sZGVyLCBcIiBUeXBlIHNvbWUgdGV4dCBvciwgdG8gZGlzcGxheSBhIGxpc3Qgb2YgY2hvaWNlcywgcHJlc3MgRG93biBBcnJvdy4gXCIpICsgJ1RvIGV4aXQgdGhlIGxpc3Qgb2YgY2hvaWNlcywgcHJlc3MgRXNjYXBlLic7XG4gICAgICAgIHJlbW92ZU9wdGlvbk1lc3NhZ2VJZCA9IHJvb3RJZCgncmVtb3ZlT3B0aW9uTWVzc2FnZScpOyAvLyBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIiB3aWxsIHJlYWQgdGhpcyBtZXNzYWdlIGFsb3VkIGltbWVkaWF0ZWx5IG9uY2UgaXQgZW50ZXJzIHRoZSBET00uXG4gICAgICAgIC8vIFdlJ2xsIHJlbmRlciB0byB0aGUgRE9NIHdoZW4gdGhlIGlucHV0IGdhaW5zIGZvY3VzIGFuZCByZW1vdmUgaXQgd2hlbiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMuXG4gICAgICAgIC8vIFdlJ2xsIHVzZSBhcmlhLWhpZGRlbiB0byBwcmV2ZW50IGRlZmF1bHQgYXJpYSBpbmZvcm1hdGlvbiBmcm9tIGJlaW5nIHJlYWQgYnkgdGhlIHNjcmVlblxuICAgICAgICAvLyByZWFkZXIuXG5cbiAgICAgICAgcmVtb3ZlT3B0aW9uTWVzc2FnZSA9IF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgIFwiYXJpYS1saXZlXCI6IFwicG9saXRlXCIsXG4gICAgICAgICAgaWQ6IHJlbW92ZU9wdGlvbk1lc3NhZ2VJZFxuICAgICAgICB9LCByZW1vdmVPcHRpb25NZXNzYWdlQ29udGVudCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGxhY2Vob2xkZXJNZXNzYWdlO1xuXG4gICAgICBpZiAocGxhY2Vob2xkZXIgJiYgc2VsZWN0ZWRPcHRpb25zICYmICFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoICYmICFzZWFyY2hWYWx1ZSkge1xuICAgICAgICBwbGFjZWhvbGRlck1lc3NhZ2UgPSBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aUNvbWJvQm94UGxhY2Vob2xkZXJcIlxuICAgICAgICB9LCBwbGFjZWhvbGRlcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGlja1Byb3BzID0ge307XG5cbiAgICAgIGlmICghaXNEaXNhYmxlZCAmJiBvbkNsZWFyICYmIGhhc1NlbGVjdGVkT3B0aW9ucykge1xuICAgICAgICBjbGlja1Byb3BzLmNsZWFyID0ge1xuICAgICAgICAgICdkYXRhLXRlc3Qtc3Viaic6ICdjb21ib0JveENsZWFyQnV0dG9uJyxcbiAgICAgICAgICBvbkNsaWNrOiBvbkNsZWFyXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBpY29uO1xuXG4gICAgICBpZiAoIW5vSWNvbikge1xuICAgICAgICBpY29uID0ge1xuICAgICAgICAgICdhcmlhLWxhYmVsJzogaXNMaXN0T3BlbiA/ICdDbG9zZSBsaXN0IG9mIG9wdGlvbnMnIDogJ09wZW4gbGlzdCBvZiBvcHRpb25zJyxcbiAgICAgICAgICAnZGF0YS10ZXN0LXN1YmonOiAnY29tYm9Cb3hUb2dnbGVMaXN0QnV0dG9uJyxcbiAgICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICBvbkNsaWNrOiBpc0xpc3RPcGVuICYmICFpc0Rpc2FibGVkID8gb25DbG9zZUxpc3RDbGljayA6IG9uT3Blbkxpc3RDbGljayxcbiAgICAgICAgICByZWY6IHRvZ2dsZUJ1dHRvblJlZixcbiAgICAgICAgICBzaWRlOiAncmlnaHQnLFxuICAgICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgICB0eXBlOiAnYXJyb3dEb3duJ1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgd3JhcENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlDb21ib0JveF9faW5wdXRXcmFwJywge1xuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC0tY29tcHJlc3NlZCc6IGNvbXByZXNzZWQsXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLS1mdWxsV2lkdGgnOiBmdWxsV2lkdGgsXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLS1ub1dyYXAnOiBzaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICdldWlDb21ib0JveF9faW5wdXRXcmFwLWlzTG9hZGluZyc6IGlzTG9hZGluZyxcbiAgICAgICAgJ2V1aUNvbWJvQm94X19pbnB1dFdyYXAtaXNDbGVhcmFibGUnOiBvbkNsZWFyLFxuICAgICAgICAnZXVpQ29tYm9Cb3hfX2lucHV0V3JhcC0taW5Hcm91cCc6IHByZXBlbmQgfHwgYXBwZW5kXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZvcm1Db250cm9sTGF5b3V0LCBfZXh0ZW5kcyh7XG4gICAgICAgIGljb246IGljb25cbiAgICAgIH0sIGNsaWNrUHJvcHMsIHtcbiAgICAgICAgaW5wdXRJZDogaWQsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICBjb21wcmVzc2VkOiBjb21wcmVzc2VkLFxuICAgICAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICAgICAgcHJlcGVuZDogcHJlcGVuZCxcbiAgICAgICAgYXBwZW5kOiBhcHBlbmRcbiAgICAgIH0pLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiB3cmFwQ2xhc3NlcyxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNvbWJvQm94SW5wdXRcIixcbiAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgdGFiSW5kZXg6IC0xIC8vIGJlY29tZXMgb25CbHVyIGV2ZW50J3MgcmVsYXRlZFRhcmdldCwgb3RoZXJ3aXNlIHJlbGF0ZWRUYXJnZXQgaXMgbnVsbCB3aGVuIGNsaWNraW5nIG9uIHRoaXMgZGl2XG5cbiAgICAgIH0sICFzaW5nbGVTZWxlY3Rpb24gfHwgIXNlYXJjaFZhbHVlID8gcGlsbHMgOiBudWxsLCBwbGFjZWhvbGRlck1lc3NhZ2UsIF9fX0Vtb3Rpb25KU1goQXV0b3NpemVJbnB1dCwge1xuICAgICAgICBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOiBmb2N1c2VkT3B0aW9uSWQsXG4gICAgICAgIFwiYXJpYS1hdXRvY29tcGxldGVcIjogXCJsaXN0XCIsXG4gICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiBpc0xpc3RPcGVuID8gcm9vdElkKCdsaXN0Ym94JykgOiAnJyxcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IGlzTGlzdE9wZW4sXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IGFyaWFMYWJlbGxlZGJ5LFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpQ29tYm9Cb3hfX2lucHV0XCIsXG4gICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJjb21ib0JveFNlYXJjaElucHV0XCIsXG4gICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGlucHV0UmVmOiBpbnB1dFJlZixcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgb25DaGFuZ2U6IHRoaXMuaW5wdXRPbkNoYW5nZSxcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICByZWY6IHRoaXMuaW5wdXRSZWZDYWxsYmFjayxcbiAgICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGZvbnRTaXplOiAxNFxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogc2VhcmNoVmFsdWUsXG4gICAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzXG4gICAgICB9KSwgcmVtb3ZlT3B0aW9uTWVzc2FnZSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb21ib0JveElucHV0O1xufShDb21wb25lbnQpO1xuRXVpQ29tYm9Cb3hJbnB1dC5wcm9wVHlwZXMgPSB7XG4gIGF1dG9TaXplSW5wdXRSZWY6IFByb3BUeXBlcy5hbnksXG4gIGNvbXByZXNzZWQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGZvY3VzZWRPcHRpb25JZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGFzU2VsZWN0ZWRPcHRpb25zOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5wdXRSZWY6IFByb3BUeXBlcy5hbnksXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc0xpc3RPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBub0ljb246IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmFueSxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xvc2VMaXN0Q2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgb25PcGVuTGlzdENsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvblJlbW92ZU9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICByb290SWQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2VsZWN0ZWRPcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlzR3JvdXBMYWJlbE9wdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gICAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAga2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KS5pc1JlcXVpcmVkKSxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQpLFxuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWRdKSxcbiAgdG9nZ2xlQnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuICB1cGRhdGVQb3NpdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHByZXBlbmQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRdKSxcbiAgYXBwZW5kOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSksXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxsZWRieVwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiYXNQbGFpblRleHRcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwib25DbGlja1wiLCBcIm9uQ2xpY2tBcmlhTGFiZWxcIiwgXCJvbkNsb3NlXCIsIFwib3B0aW9uXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJhZGdlIH0gZnJvbSAnLi4vLi4vYmFkZ2UnO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpQ29tYm9Cb3hQaWxsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlDb21ib0JveFBpbGwsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpQ29tYm9Cb3hQaWxsKTtcblxuICBmdW5jdGlvbiBFdWlDb21ib0JveFBpbGwoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aUNvbWJvQm94UGlsbCk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbC5hcHBseShfc3VwZXIsIFt0aGlzXS5jb25jYXQoYXJncykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xvc2VCdXR0b25DbGlja1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNsb3NlID0gX3RoaXMkcHJvcHMub25DbG9zZSxcbiAgICAgICAgICBvcHRpb24gPSBfdGhpcyRwcm9wcy5vcHRpb247XG5cbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIG9uQ2xvc2Uob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlDb21ib0JveFBpbGwsIFt7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYXNQbGFpblRleHQgPSBfdGhpcyRwcm9wczIuYXNQbGFpblRleHQsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczIuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMyLmNsYXNzTmFtZSxcbiAgICAgICAgICBjb2xvciA9IF90aGlzJHByb3BzMi5jb2xvcixcbiAgICAgICAgICBvbkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uQ2xpY2ssXG4gICAgICAgICAgb25DbGlja0FyaWFMYWJlbCA9IF90aGlzJHByb3BzMi5vbkNsaWNrQXJpYUxhYmVsLFxuICAgICAgICAgIG9uQ2xvc2UgPSBfdGhpcyRwcm9wczIub25DbG9zZSxcbiAgICAgICAgICBvcHRpb24gPSBfdGhpcyRwcm9wczIub3B0aW9uLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUNvbWJvQm94UGlsbCcsIHtcbiAgICAgICAgJ2V1aUNvbWJvQm94UGlsbC0tcGxhaW5UZXh0JzogYXNQbGFpblRleHRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgb25DbGlja1Byb3BzID0gb25DbGljayAmJiBvbkNsaWNrQXJpYUxhYmVsID8ge1xuICAgICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgICBvbkNsaWNrQXJpYUxhYmVsOiBvbkNsaWNrQXJpYUxhYmVsXG4gICAgICB9IDoge307XG5cbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlDb21ib0JveFBpbGwucmVtb3ZlU2VsZWN0aW9uXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJSZW1vdmUge2NoaWxkcmVufSBmcm9tIHNlbGVjdGlvbiBpbiB0aGlzIGdyb3VwXCIsXG4gICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZW1vdmVTZWxlY3Rpb24pIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlCYWRnZSwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgICAgICAgaWNvbk9uQ2xpY2s6IF90aGlzMi5vbkNsb3NlQnV0dG9uQ2xpY2ssXG4gICAgICAgICAgICBpY29uT25DbGlja0FyaWFMYWJlbDogcmVtb3ZlU2VsZWN0aW9uLFxuICAgICAgICAgICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICAgICAgICAgIGljb25UeXBlOiBcImNyb3NzXCIsXG4gICAgICAgICAgICB0aXRsZTogY2hpbGRyZW5cbiAgICAgICAgICB9LCBvbkNsaWNrUHJvcHMsIHJlc3QpLCBjaGlsZHJlbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNQbGFpblRleHQpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIF9leHRlbmRzKHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgICAgICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQmFkZ2UsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgICBjb2xvcjogY29sb3IsXG4gICAgICAgIHRpdGxlOiBjaGlsZHJlblxuICAgICAgfSwgcmVzdCwgb25DbGlja1Byb3BzKSwgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlDb21ib0JveFBpbGw7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlDb21ib0JveFBpbGwsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgY29sb3I6ICdob2xsb3cnXG59KTtcblxuRXVpQ29tYm9Cb3hQaWxsLnByb3BUeXBlcyA9IHtcbiAgYXNQbGFpblRleHQ6IFByb3BUeXBlcy5ib29sLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICBvcHRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaXNHcm91cExhYmVsT3B0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuICAgICAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gICAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLmlzUmVxdWlyZWQpLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImFjdGl2ZVBhZ2VcIiwgXCJpdGVtc1BlclBhZ2VcIiwgXCJpdGVtc1BlclBhZ2VPcHRpb25zXCIsIFwic2hvd1BlclBhZ2VPcHRpb25zXCIsIFwib25DaGFuZ2VJdGVtc1BlclBhZ2VcIiwgXCJvbkNoYW5nZVBhZ2VcIiwgXCJwYWdlQ291bnRcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uLy4uL2J1dHRvbic7XG5pbXBvcnQgeyBFdWlDb250ZXh0TWVudUl0ZW0sIEV1aUNvbnRleHRNZW51UGFuZWwgfSBmcm9tICcuLi8uLi9jb250ZXh0X21lbnUnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uLy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpUGFnaW5hdGlvbiB9IGZyb20gJy4uLy4uL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4uLy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpSTE4biB9IGZyb20gJy4uLy4uL2kxOG4nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVQYWdpbmF0aW9uID0gZnVuY3Rpb24gRXVpVGFibGVQYWdpbmF0aW9uKF9yZWYpIHtcbiAgdmFyIGFjdGl2ZVBhZ2UgPSBfcmVmLmFjdGl2ZVBhZ2UsXG4gICAgICBfcmVmJGl0ZW1zUGVyUGFnZSA9IF9yZWYuaXRlbXNQZXJQYWdlLFxuICAgICAgaXRlbXNQZXJQYWdlID0gX3JlZiRpdGVtc1BlclBhZ2UgPT09IHZvaWQgMCA/IDUwIDogX3JlZiRpdGVtc1BlclBhZ2UsXG4gICAgICBfcmVmJGl0ZW1zUGVyUGFnZU9wdGkgPSBfcmVmLml0ZW1zUGVyUGFnZU9wdGlvbnMsXG4gICAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gX3JlZiRpdGVtc1BlclBhZ2VPcHRpID09PSB2b2lkIDAgPyBbMTAsIDIwLCA1MCwgMTAwXSA6IF9yZWYkaXRlbXNQZXJQYWdlT3B0aSxcbiAgICAgIF9yZWYkc2hvd1BlclBhZ2VPcHRpbyA9IF9yZWYuc2hvd1BlclBhZ2VPcHRpb25zLFxuICAgICAgc2hvd1BlclBhZ2VPcHRpb25zID0gX3JlZiRzaG93UGVyUGFnZU9wdGlvID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzaG93UGVyUGFnZU9wdGlvLFxuICAgICAgX3JlZiRvbkNoYW5nZUl0ZW1zUGVyID0gX3JlZi5vbkNoYW5nZUl0ZW1zUGVyUGFnZSxcbiAgICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlID0gX3JlZiRvbkNoYW5nZUl0ZW1zUGVyID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoKSB7fSA6IF9yZWYkb25DaGFuZ2VJdGVtc1BlcixcbiAgICAgIG9uQ2hhbmdlUGFnZSA9IF9yZWYub25DaGFuZ2VQYWdlLFxuICAgICAgcGFnZUNvdW50ID0gX3JlZi5wYWdlQ291bnQsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGZhbHNlKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgaXNQb3BvdmVyT3BlbiA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRJc1BvcG92ZXJPcGVuID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgdG9nZ2xlUG9wb3ZlciA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICBzZXRJc1BvcG92ZXJPcGVuKGZ1bmN0aW9uIChpc09wZW4pIHtcbiAgICAgIHJldHVybiAhaXNPcGVuO1xuICAgIH0pO1xuICB9LCBbXSk7XG4gIHZhciBjbG9zZVBvcG92ZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgc2V0SXNQb3BvdmVyT3BlbihmYWxzZSk7XG4gIH0sIFtdKTtcblxuICB2YXIgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgIHNpemU6IFwieHNcIixcbiAgICBjb2xvcjogXCJ0ZXh0XCIsXG4gICAgaWNvblR5cGU6IFwiYXJyb3dEb3duXCIsXG4gICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwidGFibGVQYWdpbmF0aW9uUG9wb3ZlckJ1dHRvblwiLFxuICAgIG9uQ2xpY2s6IHRvZ2dsZVBvcG92ZXJcbiAgfSwgaXRlbXNQZXJQYWdlID09PSAwID8gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLmFsbFJvd3NcIixcbiAgICBkZWZhdWx0OiBcIlNob3dpbmcgYWxsIHJvd3NcIlxuICB9KSA6IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5yb3dzUGVyUGFnZVwiLFxuICAgIGRlZmF1bHQ6IFwiUm93cyBwZXIgcGFnZVwiXG4gIH0pLCBcIjogXCIsIGl0ZW1zUGVyUGFnZSkpO1xuXG4gIHZhciBpdGVtcyA9IHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpdGVtc1BlclBhZ2VPcHRpb25zLm1hcChmdW5jdGlvbiAoaXRlbXNQZXJQYWdlT3B0aW9uKSB7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIHtcbiAgICAgICAga2V5OiBpdGVtc1BlclBhZ2VPcHRpb24sXG4gICAgICAgIGljb246IGl0ZW1zUGVyUGFnZU9wdGlvbiA9PT0gaXRlbXNQZXJQYWdlID8gJ2NoZWNrJyA6ICdlbXB0eScsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgICAgb25DaGFuZ2VJdGVtc1BlclBhZ2UoaXRlbXNQZXJQYWdlT3B0aW9uKTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlUGFnaW5hdGlvbi1cIi5jb25jYXQoaXRlbXNQZXJQYWdlT3B0aW9uLCBcIi1yb3dzXCIpXG4gICAgICB9LCBpdGVtc1BlclBhZ2VPcHRpb24gPT09IDAgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpVGFibGVQYWdpbmF0aW9uLnJvd3NQZXJQYWdlT3B0aW9uU2hvd0FsbFJvd3NcIixcbiAgICAgICAgZGVmYXVsdDogXCJTaG93IGFsbCByb3dzXCJcbiAgICAgIH0pIDogX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlUGFnaW5hdGlvbi5yb3dzUGVyUGFnZU9wdGlvblwiLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICByb3dzUGVyUGFnZTogaXRlbXNQZXJQYWdlT3B0aW9uXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IFwie3Jvd3NQZXJQYWdlfSByb3dzXCJcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfSwgW2l0ZW1zUGVyUGFnZU9wdGlvbnMsIGl0ZW1zUGVyUGFnZSwgb25DaGFuZ2VJdGVtc1BlclBhZ2UsIGNsb3NlUG9wb3Zlcl0pO1xuXG4gIHZhciBpdGVtc1BlclBhZ2VQb3BvdmVyID0gX19fRW1vdGlvbkpTWChFdWlQb3BvdmVyLCB7XG4gICAgYnV0dG9uOiBidXR0b24sXG4gICAgaXNPcGVuOiBpc1BvcG92ZXJPcGVuLFxuICAgIGNsb3NlUG9wb3ZlcjogY2xvc2VQb3BvdmVyLFxuICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgIGFuY2hvclBvc2l0aW9uOiBcInVwUmlnaHRcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51UGFuZWwsIHtcbiAgICBpdGVtczogaXRlbXNcbiAgfSkpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZsZXhHcm91cCwge1xuICAgIGp1c3RpZnlDb250ZW50OiBcInNwYWNlQmV0d2VlblwiLFxuICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgcmVzcG9uc2l2ZTogZmFsc2UsXG4gICAgd3JhcDogdHJ1ZSxcbiAgICBndXR0ZXJTaXplOiBcInNcIixcbiAgICBjbGFzc05hbWU6IFwiZXVpLXhTY3JvbGxcIlxuICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgc2hvd1BlclBhZ2VPcHRpb25zICYmIGl0ZW1zUGVyUGFnZVBvcG92ZXIpLCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgZ3JvdzogZmFsc2VcbiAgfSwgaXRlbXNQZXJQYWdlID4gMCAmJiBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb24sIF9leHRlbmRzKHtcbiAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudCxcbiAgICBhY3RpdmVQYWdlOiBhY3RpdmVQYWdlLFxuICAgIG9uUGFnZUNsaWNrOiBvbkNoYW5nZVBhZ2VcbiAgfSwgcmVzdCkpKSk7XG59O1xuRXVpVGFibGVQYWdpbmF0aW9uLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAgICogT3B0aW9uIHRvIGNvbXBsZXRlbHkgaGlkZSB0aGUgXCJSb3dzIHBlciBwYWdlXCIgc2VsZWN0b3IuXG4gICAgICovXG4gIHNob3dQZXJQYWdlT3B0aW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQ3VycmVudCBzZWxlY3Rpb24gZm9yIFwiUm93cyBwZXIgcGFnZVwiLlxuICAgICAqIFBhc3MgYDBgIHRvIGRpc3BsYXkgdGhlIHNlbGVjdGVkIFwiU2hvdyBhbGxcIiBvcHRpb24gYW5kIGhpZGUgdGhlIHBhZ2luYXRpb24uXG4gICAgICovXG4gIGl0ZW1zUGVyUGFnZTogUHJvcFR5cGVzLm51bWJlcixcblxuICAvKipcbiAgICAgKiBDdXN0b20gYXJyYXkgb2Ygb3B0aW9ucyBmb3IgXCJSb3dzIHBlciBwYWdlXCIuXG4gICAgICogUGFzcyBgMGAgYXMgb25lIG9mIHRoZSBvcHRpb25zIHRvIGNyZWF0ZSBhIFwiU2hvdyBhbGxcIiBvcHRpb24uXG4gICAgICovXG4gIGl0ZW1zUGVyUGFnZU9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCksXG5cbiAgLyoqXG4gICAgICogQ2xpY2sgaGFuZGxlciB0aGF0IHBhc3NlcyBiYWNrIHNlbGVjdGVkIGBwYWdlU2l6ZWAgbnVtYmVyXG4gICAgICovXG4gIG9uQ2hhbmdlSXRlbXNQZXJQYWdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DaGFuZ2VQYWdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBSZXF1aXJlcyB0aGUgYGlkYCBvZiB0aGUgdGFibGUgYmVpbmcgY29udHJvbGxlZFxuICAgICAqL1xuICBcImFyaWEtY29udHJvbHNcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJwYWdlQ291bnRcIiwgXCJhY3RpdmVQYWdlXCIsIFwib25QYWdlQ2xpY2tcIiwgXCJjb21wcmVzc2VkXCIsIFwiYXJpYS1jb250cm9sc1wiLCBcInJlc3BvbnNpdmVcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVBhZ2luYXRpb25CdXR0b24gfSBmcm9tICcuL3BhZ2luYXRpb25fYnV0dG9uJztcbmltcG9ydCB7IEV1aUkxOG4sIHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi90ZXh0JztcbmltcG9ydCB7IEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyB9IGZyb20gJy4vcGFnaW5hdGlvbl9idXR0b25fYXJyb3cnO1xuaW1wb3J0IHsgdXNlSXNXaXRoaW5CcmVha3BvaW50cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgTUFYX1ZJU0lCTEVfUEFHRVMgPSA1O1xudmFyIE5VTUJFUl9TVVJST1VORElOR19QQUdFUyA9IE1hdGguZmxvb3IoTUFYX1ZJU0lCTEVfUEFHRVMgKiAwLjUpO1xuZXhwb3J0IHZhciBFdWlQYWdpbmF0aW9uID0gZnVuY3Rpb24gRXVpUGFnaW5hdGlvbihfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkcGFnZUNvdW50ID0gX3JlZi5wYWdlQ291bnQsXG4gICAgICBwYWdlQ291bnQgPSBfcmVmJHBhZ2VDb3VudCA9PT0gdm9pZCAwID8gMSA6IF9yZWYkcGFnZUNvdW50LFxuICAgICAgX3JlZiRhY3RpdmVQYWdlID0gX3JlZi5hY3RpdmVQYWdlLFxuICAgICAgYWN0aXZlUGFnZSA9IF9yZWYkYWN0aXZlUGFnZSA9PT0gdm9pZCAwID8gMCA6IF9yZWYkYWN0aXZlUGFnZSxcbiAgICAgIF9yZWYkb25QYWdlQ2xpY2sgPSBfcmVmLm9uUGFnZUNsaWNrLFxuICAgICAgb25QYWdlQ2xpY2sgPSBfcmVmJG9uUGFnZUNsaWNrID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoKSB7fSA6IF9yZWYkb25QYWdlQ2xpY2ssXG4gICAgICBfY29tcHJlc3NlZCA9IF9yZWYuY29tcHJlc3NlZCxcbiAgICAgIGFyaWFDb250cm9scyA9IF9yZWZbJ2FyaWEtY29udHJvbHMnXSxcbiAgICAgIF9yZWYkcmVzcG9uc2l2ZSA9IF9yZWYucmVzcG9uc2l2ZSxcbiAgICAgIHJlc3BvbnNpdmUgPSBfcmVmJHJlc3BvbnNpdmUgPT09IHZvaWQgMCA/IFsneHMnLCAncyddIDogX3JlZiRyZXNwb25zaXZlLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBpc1Jlc3BvbnNpdmUgPSB1c2VJc1dpdGhpbkJyZWFrcG9pbnRzKHJlc3BvbnNpdmUsICEhcmVzcG9uc2l2ZSk7IC8vIEZvcmNlIHRvIGBjb21wcmVzc2VkYCB2ZXJzaW9uIGlmIHNwZWNpZmllZCBvciB3aXRoaW4gdGhlIHJlc3BvbnNpdmUgYnJlYWtwb2ludHNcblxuICB2YXIgY29tcHJlc3NlZCA9IF9jb21wcmVzc2VkIHx8IGlzUmVzcG9uc2l2ZTtcblxuICB2YXIgc2FmZUNsaWNrID0gZnVuY3Rpb24gc2FmZUNsaWNrKGUsIHBhZ2VJbmRleCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmIChhcmlhQ29udHJvbHMpIHtcbiAgICAgIHZhciBjb250cm9sbGVkRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyaWFDb250cm9scyk7XG5cbiAgICAgIGlmIChjb250cm9sbGVkRWxlbWVudCkge1xuICAgICAgICBjb250cm9sbGVkRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9uUGFnZUNsaWNrKHBhZ2VJbmRleCk7XG4gIH07XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlQYWdpbmF0aW9uJywgY2xhc3NOYW1lKTtcblxuICB2YXIgZmlyc3RCdXR0b24gPSAocGFnZUNvdW50IDwgMSB8fCBjb21wcmVzc2VkKSAmJiBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwiZmlyc3RcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgMCk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gMFxuICB9KTtcblxuICB2YXIgcHJldmlvdXNCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwicHJldmlvdXNcIixcbiAgICBhcmlhQ29udHJvbHM6IGFyaWFDb250cm9scyxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHJldHVybiBzYWZlQ2xpY2soZSwgYWN0aXZlUGFnZSAtIDEpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGFjdGl2ZVBhZ2UgPT09IDBcbiAgfSk7XG5cbiAgdmFyIG5leHRCdXR0b24gPSBfX19FbW90aW9uSlNYKEV1aVBhZ2luYXRpb25CdXR0b25BcnJvdywge1xuICAgIHR5cGU6IFwibmV4dFwiLFxuICAgIGFyaWFDb250cm9sczogYXJpYUNvbnRyb2xzLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBhY3RpdmVQYWdlICsgMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gLTEgfHwgYWN0aXZlUGFnZSA9PT0gcGFnZUNvdW50IC0gMVxuICB9KTtcblxuICB2YXIgbGFzdEJ1dHRvbiA9IChwYWdlQ291bnQgPCAxIHx8IGNvbXByZXNzZWQpICYmIF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LCB7XG4gICAgdHlwZTogXCJsYXN0XCIsXG4gICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICByZXR1cm4gc2FmZUNsaWNrKGUsIHBhZ2VDb3VudCA/IHBhZ2VDb3VudCAtIDEgOiAtMSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZDogYWN0aXZlUGFnZSA9PT0gLTEgfHwgYWN0aXZlUGFnZSA9PT0gcGFnZUNvdW50IC0gMVxuICB9KTtcblxuICB2YXIgY2VudGVyUGFnZUNvdW50O1xuXG4gIGlmIChwYWdlQ291bnQpIHtcbiAgICB2YXIgc2hhcmVkQnV0dG9uUHJvcHMgPSB7XG4gICAgICBhY3RpdmVQYWdlOiBhY3RpdmVQYWdlLFxuICAgICAgYXJpYUNvbnRyb2xzOiBhcmlhQ29udHJvbHMsXG4gICAgICBzYWZlQ2xpY2s6IHNhZmVDbGljayxcbiAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgfTtcblxuICAgIGlmIChjb21wcmVzc2VkKSB7XG4gICAgICBjZW50ZXJQYWdlQ291bnQgPSBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19jb21wcmVzc2VkVGV4dFwiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbi5wYWdlT2ZUb3RhbENvbXByZXNzZWRcIixcbiAgICAgICAgZGVmYXVsdDogXCJ7cGFnZX0gb2Yge3RvdGFsfVwiLFxuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICBwYWdlOiBfX19FbW90aW9uSlNYKFwic3BhblwiLCBudWxsLCBhY3RpdmVQYWdlICsgMSksXG4gICAgICAgICAgdG90YWw6IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIHBhZ2VDb3VudClcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcGFnZXMgPSBbXTtcbiAgICAgIHZhciBmaXJzdFBhZ2VJblJhbmdlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oYWN0aXZlUGFnZSAtIE5VTUJFUl9TVVJST1VORElOR19QQUdFUywgcGFnZUNvdW50IC0gTUFYX1ZJU0lCTEVfUEFHRVMpKTtcbiAgICAgIHZhciBsYXN0UGFnZUluUmFuZ2UgPSBNYXRoLm1pbihwYWdlQ291bnQsIGZpcnN0UGFnZUluUmFuZ2UgKyBNQVhfVklTSUJMRV9QQUdFUyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSBmaXJzdFBhZ2VJblJhbmdlLCBpbmRleCA9IDA7IGkgPCBsYXN0UGFnZUluUmFuZ2U7IGkrKywgaW5kZXgrKykge1xuICAgICAgICBwYWdlcy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBwYWdlSW5kZXg6IGksXG4gICAgICAgICAga2V5OiBpXG4gICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RQYWdlQnV0dG9ucyA9IFtdO1xuXG4gICAgICBpZiAoZmlyc3RQYWdlSW5SYW5nZSA+IDApIHtcbiAgICAgICAgZmlyc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goUGFnaW5hdGlvbkJ1dHRvbldyYXBwZXIsIF9leHRlbmRzKHtcbiAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAga2V5OiAwXG4gICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuXG4gICAgICAgIGlmIChmaXJzdFBhZ2VJblJhbmdlID4gMSAmJiBmaXJzdFBhZ2VJblJhbmdlICE9PSAyKSB7XG4gICAgICAgICAgZmlyc3RQYWdlQnV0dG9ucy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAga2V5OiBcInN0YXJ0aW5nRWxsaXBzZXNcIixcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVBhZ2luYXRpb24uZmlyc3RSYW5nZUFyaWFMYWJlbFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJTa2lwcGluZyBwYWdlcyAyIHRvIHtsYXN0UGFnZX1cIixcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBsYXN0UGFnZTogZmlyc3RQYWdlSW5SYW5nZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChmaXJzdFJhbmdlQXJpYUxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGZpcnN0UmFuZ2VBcmlhTGFiZWwsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uQnV0dG9uLWlzUGxhY2Vob2xkZXIgZXVpUGFnaW5hdGlvbl9faXRlbVwiXG4gICAgICAgICAgICB9LCBcIlxcdTIwMjZcIik7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0UGFnZUluUmFuZ2UgPT09IDIpIHtcbiAgICAgICAgICBmaXJzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgcGFnZUluZGV4OiAxLFxuICAgICAgICAgICAga2V5OiAxXG4gICAgICAgICAgfSwgc2hhcmVkQnV0dG9uUHJvcHMpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGxhc3RQYWdlQnV0dG9ucyA9IFtdO1xuXG4gICAgICBpZiAobGFzdFBhZ2VJblJhbmdlIDwgcGFnZUNvdW50KSB7XG4gICAgICAgIGlmIChsYXN0UGFnZUluUmFuZ2UgKyAxID09PSBwYWdlQ291bnQgLSAxKSB7XG4gICAgICAgICAgbGFzdFBhZ2VCdXR0b25zLnB1c2goX19fRW1vdGlvbkpTWChQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciwgX2V4dGVuZHMoe1xuICAgICAgICAgICAgcGFnZUluZGV4OiBsYXN0UGFnZUluUmFuZ2UsXG4gICAgICAgICAgICBrZXk6IGxhc3RQYWdlSW5SYW5nZVxuICAgICAgICAgIH0sIHNoYXJlZEJ1dHRvblByb3BzKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3RQYWdlSW5SYW5nZSA8IHBhZ2VDb3VudCAtIDEpIHtcbiAgICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIGtleTogXCJlbmRpbmdFbGxpcHNlc1wiLFxuICAgICAgICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbi5sYXN0UmFuZ2VBcmlhTGFiZWxcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiU2tpcHBpbmcgcGFnZXMge2ZpcnN0UGFnZX0gdG8ge2xhc3RQYWdlfVwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGZpcnN0UGFnZTogbGFzdFBhZ2VJblJhbmdlICsgMSxcbiAgICAgICAgICAgICAgbGFzdFBhZ2U6IHBhZ2VDb3VudCAtIDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBmdW5jdGlvbiAobGFzdFJhbmdlQXJpYUxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImxpXCIsIHtcbiAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGxhc3RSYW5nZUFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25CdXR0b24taXNQbGFjZWhvbGRlciBldWlQYWdpbmF0aW9uX19pdGVtXCJcbiAgICAgICAgICAgIH0sIFwiXFx1MjAyNlwiKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGFnZUJ1dHRvbnMucHVzaChfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CdXR0b25XcmFwcGVyLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgcGFnZUluZGV4OiBwYWdlQ291bnQgLSAxLFxuICAgICAgICAgIGtleTogcGFnZUNvdW50IC0gMVxuICAgICAgICB9LCBzaGFyZWRCdXR0b25Qcm9wcykpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlbGVjdGFibGVQYWdlcyA9IHBhZ2VzO1xuXG4gICAgICB2YXIgYWNjZXNzaWJsZU5hbWUgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RbJ2FyaWEtbGFiZWwnXSAmJiB7XG4gICAgICAgICdhcmlhLWxhYmVsJzogcmVzdFsnYXJpYS1sYWJlbCddXG4gICAgICB9KSwgcmVzdFsnYXJpYS1sYWJlbGxlZGJ5J10gJiYge1xuICAgICAgICAnYXJpYS1sYWJlbGxlZGJ5JzogcmVzdFsnYXJpYS1sYWJlbGxlZGJ5J11cbiAgICAgIH0pO1xuXG4gICAgICBjZW50ZXJQYWdlQ291bnQgPSBfX19FbW90aW9uSlNYKFwidWxcIiwgX2V4dGVuZHMoe30sIGFjY2Vzc2libGVOYW1lLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlQYWdpbmF0aW9uX19saXN0XCJcbiAgICAgIH0pLCBmaXJzdFBhZ2VCdXR0b25zLCBzZWxlY3RhYmxlUGFnZXMsIGxhc3RQYWdlQnV0dG9ucyk7XG4gICAgfVxuICB9IC8vIEFsbCB0aGUgaTE4biBzdHJpbmdzIHVzZWQgdG8gYnVpbGQgdGhlIHdob2xlIFNSLW9ubHkgdGV4dFxuXG5cbiAgdmFyIGxhc3RMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ubGFzdCcsICdMYXN0Jyk7XG4gIHZhciBwYWdlTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLnBhZ2UnLCAnUGFnZScpO1xuICB2YXIgb2ZMYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24ub2YnLCAnb2YnKTtcbiAgdmFyIGNvbGxlY3Rpb25MYWJlbCA9IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb24uY29sbGVjdGlvbicsICdjb2xsZWN0aW9uJyk7XG4gIHZhciBmcm9tRW5kTGFiZWwgPSB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uLmZyb21FbmRMYWJlbCcsICdmcm9tIGVuZCcpOyAvLyBCYXNlZCBvbiB0aGUgYGFjdGl2ZVBhZ2VgIGNvdW50LCBidWlsZCB0aGUgZnJvbnQgb2YgdGhlIFNSLW9ubHkgdGV4dFxuICAvLyBpLmUuIGBQYWdlIDFgLCBgUGFnZSAyIGZyb20gZW5kYCwgYExhc3QgUGFnZWBcblxuICB2YXIgYWNjZXNzaWJsZVBhZ2VTdHJpbmcgPSBmdW5jdGlvbiBhY2Nlc3NpYmxlUGFnZVN0cmluZygpIHtcbiAgICBpZiAoYWN0aXZlUGFnZSA8IC0xKSByZXR1cm4gXCJcIi5jb25jYXQocGFnZUxhYmVsLCBcIiBcIikuY29uY2F0KE1hdGguYWJzKGFjdGl2ZVBhZ2UpLCBcIiBcIikuY29uY2F0KGZyb21FbmRMYWJlbCk7XG4gICAgaWYgKGFjdGl2ZVBhZ2UgPT09IC0xKSByZXR1cm4gXCJcIi5jb25jYXQobGFzdExhYmVsLCBcIiBcIikuY29uY2F0KHBhZ2VMYWJlbCk7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHBhZ2VMYWJlbCwgXCIgXCIpLmNvbmNhdChhY3RpdmVQYWdlICsgMSk7XG4gIH07IC8vIElmIGBwYWdlQ291bnRgIGlzIHVua25vd24gY2FsbCBpdCBgY29sbGVjdGlvbmBcblxuXG4gIHZhciBhY2Nlc3NpYmxlQ29sbGVjdGlvblN0cmluZyA9IHBhZ2VDb3VudCA9PT0gMCA/IGNvbGxlY3Rpb25MYWJlbCA6IHBhZ2VDb3VudC50b1N0cmluZygpOyAvLyBDcmVhdGUgdGhlIHdob2xlIHN0cmluZyB3aXRoIHRvdGFsIHBhZ2VDb3VudCBvciBgY29sbGVjdGlvbmBcblxuICB2YXIgYWNjZXNzaWJsZVBhZ2VDb3VudCA9IFwiXCIuY29uY2F0KGFjY2Vzc2libGVQYWdlU3RyaW5nKCksIFwiIFwiKS5jb25jYXQob2ZMYWJlbCwgXCIgXCIpLmNvbmNhdChhY2Nlc3NpYmxlQ29sbGVjdGlvblN0cmluZyk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwibmF2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIFwiYXJpYS1hdG9taWNcIjogXCJ0cnVlXCIsXG4gICAgXCJhcmlhLXJlbGV2YW50XCI6IFwiYWRkaXRpb25zIHRleHRcIixcbiAgICByb2xlOiBcInN0YXR1c1wiXG4gIH0sIGFjY2Vzc2libGVQYWdlQ291bnQpKSwgZmlyc3RCdXR0b24sIHByZXZpb3VzQnV0dG9uLCBjZW50ZXJQYWdlQ291bnQsIG5leHRCdXR0b24sIGxhc3RCdXR0b24pO1xufTtcbkV1aVBhZ2luYXRpb24ucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcy5cbiAgICAgKiBQYXNzIGAwYCBpZiB0b3RhbCBjb3VudCBpcyB1bmtub3duLlxuICAgICAqL1xuICBwYWdlQ291bnQ6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgcGFnZSB1c2luZyBhIHplcm8gYmFzZWQgaW5kZXguXG4gICAgICogU28gaWYgeW91IHNldCB0aGUgYWN0aXZlUGFnZSB0byAxLCBpdCB3aWxsIGFjdGl2YXRlIHRoZSBzZWNvbmQgcGFnZS5cbiAgICAgKiBQYXNzIGAtMWAgZm9yIGZvcmNpbmcgdG8gbGFzdCBwYWdlLlxuICAgICAqL1xuICBhY3RpdmVQYWdlOiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIENsaWNrIGhhbmRsZXIgdGhhdCBwYXNzZXMgYmFjayB0aGUgaW50ZXJuYWxseSBjYWxjdWxhdGVkIGBhY3RpdmVQYWdlYCBpbmRleFxuICAgICAqL1xuICBvblBhZ2VDbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogSWYgdHJ1ZSwgd2lsbCBvbmx5IHNob3cgbmV4dC9wcmV2IGFycm93cyBhbmQgc2ltcGxpZmllZCBudW1iZXIgc2V0LlxuICAgICAqL1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJZiBwYXNzZWQgaW4sIHBhc3NlcyB2YWx1ZSB0aHJvdWdoIHRvIGVhY2ggYnV0dG9uIHRvIHNldCBhcmlhLWNvbnRyb2xzLlxuICAgICAqL1xuICBcImFyaWEtY29udHJvbHNcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBBdXRvbWF0aWNhbGx5IHJlZHVjZXMgdG8gdGhlIGBjb21wcmVzc2VkYCB2ZXJzaW9uIG9uIHNtYWxsZXIgc2NyZWVucy5cbiAgICAgKiBSZW1vdmUgY29tcGxldGVseSB3aXRoIGBmYWxzZWAgb3IgcHJvdmlkZSB5b3VyIG93biBsaXN0IG9mIHJlc3BvbnNpdmUgYnJlYWtwb2ludHMuXG4gICAgICovXG4gIHJlc3BvbnNpdmU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbZmFsc2VdKSwgUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkXSlcbn07XG5cbnZhciBQYWdpbmF0aW9uQnV0dG9uV3JhcHBlciA9IGZ1bmN0aW9uIFBhZ2luYXRpb25CdXR0b25XcmFwcGVyKF9yZWYyKSB7XG4gIHZhciBwYWdlSW5kZXggPSBfcmVmMi5wYWdlSW5kZXgsXG4gICAgICBfcmVmMiRpbkxpc3QgPSBfcmVmMi5pbkxpc3QsXG4gICAgICBpbkxpc3QgPSBfcmVmMiRpbkxpc3QgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRpbkxpc3QsXG4gICAgICBhY3RpdmVQYWdlID0gX3JlZjIuYWN0aXZlUGFnZSxcbiAgICAgIHBhZ2VDb3VudCA9IF9yZWYyLnBhZ2VDb3VudCxcbiAgICAgIGFyaWFDb250cm9scyA9IF9yZWYyLmFyaWFDb250cm9scyxcbiAgICAgIHNhZmVDbGljayA9IF9yZWYyLnNhZmVDbGljayxcbiAgICAgIGRpc2FibGVkID0gX3JlZjIuZGlzYWJsZWQ7XG5cbiAgdmFyIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpUGFnaW5hdGlvbkJ1dHRvbiwge1xuICAgIGlzQWN0aXZlOiBwYWdlSW5kZXggPT09IGFjdGl2ZVBhZ2UsXG4gICAgdG90YWxQYWdlczogcGFnZUNvdW50LFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIHNhZmVDbGljayhlLCBwYWdlSW5kZXgpO1xuICAgIH0sXG4gICAgcGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgXCJhcmlhLWNvbnRyb2xzXCI6IGFyaWFDb250cm9scyxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgfSk7XG5cbiAgaWYgKGluTGlzdCkge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVBhZ2luYXRpb25fX2l0ZW1cIlxuICAgIH0sIGJ1dHRvbik7XG4gIH1cblxuICByZXR1cm4gYnV0dG9uO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImlzQWN0aXZlXCIsIFwiaXNQbGFjZWhvbGRlclwiLCBcInBhZ2VJbmRleFwiLCBcInRvdGFsUGFnZXNcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVBhZ2luYXRpb25CdXR0b24gPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgaXNBY3RpdmUgPSBfcmVmLmlzQWN0aXZlLFxuICAgICAgaXNQbGFjZWhvbGRlciA9IF9yZWYuaXNQbGFjZWhvbGRlcixcbiAgICAgIHBhZ2VJbmRleCA9IF9yZWYucGFnZUluZGV4LFxuICAgICAgdG90YWxQYWdlcyA9IF9yZWYudG90YWxQYWdlcyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVBhZ2luYXRpb25CdXR0b24nLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpUGFnaW5hdGlvbkJ1dHRvbi1pc0FjdGl2ZSc6IGlzQWN0aXZlLFxuICAgICdldWlQYWdpbmF0aW9uQnV0dG9uLWlzUGxhY2Vob2xkZXInOiBpc1BsYWNlaG9sZGVyXG4gIH0pO1xuXG4gIHZhciBwcm9wcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc2l6ZTogJ3MnLFxuICAgIGNvbG9yOiAndGV4dCcsXG4gICAgJ2RhdGEtdGVzdC1zdWJqJzogXCJwYWdpbmF0aW9uLWJ1dHRvbi1cIi5jb25jYXQocGFnZUluZGV4KSxcbiAgICBpc0Rpc2FibGVkOiBpc1BsYWNlaG9sZGVyIHx8IGlzQWN0aXZlXG4gIH0sIGlzQWN0aXZlICYmIHtcbiAgICAnYXJpYS1jdXJyZW50JzogdHJ1ZVxuICB9KSwgcmVzdFsnYXJpYS1jb250cm9scyddICYmIHtcbiAgICBocmVmOiBcIiNcIi5jb25jYXQocmVzdFsnYXJpYS1jb250cm9scyddKVxuICB9KSwgcmVzdCk7XG5cbiAgdmFyIHBhZ2VOdW1iZXIgPSBwYWdlSW5kZXggKyAxO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbkJ1dHRvbi5sb25nUGFnZVN0cmluZ1wiLFxuICAgIGRlZmF1bHQ6IFwiUGFnZSB7cGFnZX0gb2Yge3RvdGFsUGFnZXN9XCIsXG4gICAgdmFsdWVzOiB7XG4gICAgICBwYWdlOiBwYWdlTnVtYmVyLFxuICAgICAgdG90YWxQYWdlczogdG90YWxQYWdlc1xuICAgIH1cbiAgfSwgZnVuY3Rpb24gKGxvbmdQYWdlU3RyaW5nKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpUGFnaW5hdGlvbkJ1dHRvbi5zaG9ydFBhZ2VTdHJpbmdcIixcbiAgICAgIGRlZmF1bHQ6IFwiUGFnZSB7cGFnZX1cIixcbiAgICAgIHZhbHVlczoge1xuICAgICAgICBwYWdlOiBwYWdlTnVtYmVyXG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHNob3J0UGFnZVN0cmluZykge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uRW1wdHksIF9leHRlbmRzKHtcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRvdGFsUGFnZXMgPyBsb25nUGFnZVN0cmluZyA6IHNob3J0UGFnZVN0cmluZ1xuICAgICAgfSwgcHJvcHMpLCBwYWdlTnVtYmVyKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuRXVpUGFnaW5hdGlvbkJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgICAqIEFueSBvZiBvdXIgbmFtZWQgY29sb3JzXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQW55IG9mIG91ciBuYW1lZCBjb2xvcnNcbiAgICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcy5vbmVPZihbXCJwcmltYXJ5XCIsIFwiZGFuZ2VyXCIsIFwidGV4dFwiLCBcImdob3N0XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIl0pLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wieHNcIiwgXCJzXCIsIFwibVwiXSksXG5cbiAgLyoqXG4gICAgICogRW5zdXJlIHRoZSB0ZXh0IG9mIHRoZSBidXR0b24gc2l0cyBmbHVzaCB0byB0aGUgbGVmdCwgcmlnaHQsIG9yIGJvdGggc2lkZXMgb2YgaXRzIGNvbnRhaW5lclxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEVuc3VyZSB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHNpdHMgZmx1c2ggdG8gdGhlIGxlZnQsIHJpZ2h0LCBvciBib3RoIHNpZGVzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgZmx1c2g6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJib3RoXCJdKSxcblxuICAvKipcbiAgICAgKiBgZGlzYWJsZWRgIGlzIGFsc28gYWxsb3dlZFxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIGBkaXNhYmxlZGAgaXMgYWxzbyBhbGxvd2VkXG4gICAgICovXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEZvcmNlIGRpc2FibGVzIHRoZSBidXR0b24gYW5kIGNoYW5nZXMgdGhlIGljb24gdG8gYSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBGb3JjZSBkaXNhYmxlcyB0aGUgYnV0dG9uIGFuZCBjaGFuZ2VzIHRoZSBpY29uIHRvIGEgbG9hZGluZyBzcGlubmVyXG4gICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgYm9vbGVhbiBzdGF0ZSBhcyB0aGUgYGFyaWEtcHJlc3NlZGAgcHJvcGVydHkgdG8gY3JlYXRlIGEgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKiAqT25seSB1c2Ugd2hlbiB0aGUgcmVhZGFibGUgdGV4dCBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBzdGF0ZXMuKlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGJvb2xlYW4gc3RhdGUgYXMgdGhlIGBhcmlhLXByZXNzZWRgIHByb3BlcnR5IHRvIGNyZWF0ZSBhIHRvZ2dsZSBidXR0b24uXG4gICAgICogKk9ubHkgdXNlIHdoZW4gdGhlIHJlYWRhYmxlIHRleHQgZG9lcyBub3QgY2hhbmdlIGJldHdlZW4gc3RhdGVzLipcbiAgICAgKi9cbiAgaXNTZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCIsIFwic3VibWl0XCJdKSxcbiAgYnV0dG9uUmVmOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGJ1dHRvbidzIGNvbnRlbnRcbiAgICAgKi9cbiAgY29udGVudFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAqIEFueSBgdHlwZWAgYWNjZXB0ZWQgYnkgRXVpSWNvblxuICAgICAqL1xuICBpY29uVHlwZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcImFjY2Vzc2liaWxpdHlcIiwgXCJhZGREYXRhQXBwXCIsIFwiYWR2YW5jZWRTZXR0aW5nc0FwcFwiLCBcImFnZW50QXBwXCIsIFwiYWdncmVnYXRlXCIsIFwiYWxlcnRcIiwgXCJhbmFseXplRXZlbnRcIiwgXCJhbm5vdGF0aW9uXCIsIFwiYXBtQXBwXCIsIFwiYXBtVHJhY2VcIiwgXCJhcHBTZWFyY2hBcHBcIiwgXCJhcHBzXCIsIFwiYXJyb3dEb3duXCIsIFwiYXJyb3dMZWZ0XCIsIFwiYXJyb3dSaWdodFwiLCBcImFycm93VXBcIiwgXCJhcnJvd1N0YXJ0XCIsIFwiYXJyb3dFbmRcIiwgXCJhc3Rlcmlza1wiLCBcImF1ZGl0YmVhdEFwcFwiLCBcImJlYWtlclwiLCBcImJlbGxcIiwgXCJiZWxsU2xhc2hcIiwgXCJib2x0XCIsIFwiYm94ZXNIb3Jpem9udGFsXCIsIFwiYm94ZXNWZXJ0aWNhbFwiLCBcImJyYW5jaFwiLCBcImJyYW5jaFVzZXJcIiwgXCJicm9vbVwiLCBcImJydXNoXCIsIFwiYnVnXCIsIFwiYnVsbHNleWVcIiwgXCJjYWxlbmRhclwiLCBcImNhbnZhc0FwcFwiLCBcImNhc2VzQXBwXCIsIFwiY2hlY2tcIiwgXCJjaGVja0luQ2lyY2xlRmlsbGVkXCIsIFwiY2hlZXJcIiwgXCJjbGFzc2lmaWNhdGlvbkpvYlwiLCBcImNsb2NrXCIsIFwiY2xvdWREcml6emxlXCIsIFwiY2xvdWRTdG9ybXlcIiwgXCJjbG91ZFN1bm55XCIsIFwiY2x1c3RlclwiLCBcImNvZGVBcHBcIiwgXCJjb2xvclwiLCBcImNvbXB1dGVcIiwgXCJjb25zb2xlXCIsIFwiY29uc29sZUFwcFwiLCBcImNvbnRhaW5lclwiLCBcImNvbnRpbnVpdHlBYm92ZVwiLCBcImNvbnRpbnVpdHlBYm92ZUJlbG93XCIsIFwiY29udGludWl0eUJlbG93XCIsIFwiY29udGludWl0eVdpdGhpblwiLCBcImNvbnRyb2xzSG9yaXpvbnRhbFwiLCBcImNvbnRyb2xzVmVydGljYWxcIiwgXCJjb3B5XCIsIFwiY29weUNsaXBib2FyZFwiLCBcImNyZWF0ZUFkdmFuY2VkSm9iXCIsIFwiY3JlYXRlTXVsdGlNZXRyaWNKb2JcIiwgXCJjcmVhdGVQb3B1bGF0aW9uSm9iXCIsIFwiY3JlYXRlU2luZ2xlTWV0cmljSm9iXCIsIFwiY3Jvc3NcIiwgXCJjcm9zc0NsdXN0ZXJSZXBsaWNhdGlvbkFwcFwiLCBcImNyb3NzSW5BQ2lyY2xlRmlsbGVkXCIsIFwiY3Jvc3NoYWlyc1wiLCBcImN1cnJlbmN5XCIsIFwiY3V0XCIsIFwiZGFzaGJvYXJkQXBwXCIsIFwiZGF0YVZpc3VhbGl6ZXJcIiwgXCJkYXRhYmFzZVwiLCBcImRlc2t0b3BcIiwgXCJkZXZUb29sc0FwcFwiLCBcImRpc2NvdmVyQXBwXCIsIFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVkaXRcIiwgXCJkb2N1bWVudGF0aW9uXCIsIFwiZG9jdW1lbnRzXCIsIFwiZG90XCIsIFwiZG91YmxlQXJyb3dMZWZ0XCIsIFwiZG91YmxlQXJyb3dSaWdodFwiLCBcImRvd25sb2FkXCIsIFwiZWRpdG9yQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JBbGlnbkxlZnRcIiwgXCJlZGl0b3JBbGlnblJpZ2h0XCIsIFwiZWRpdG9yQm9sZFwiLCBcImVkaXRvckNoZWNrbGlzdFwiLCBcImVkaXRvckNvZGVCbG9ja1wiLCBcImVkaXRvckNvbW1lbnRcIiwgXCJlZGl0b3JEaXN0cmlidXRlSG9yaXpvbnRhbFwiLCBcImVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbFwiLCBcImVkaXRvckhlYWRpbmdcIiwgXCJlZGl0b3JJdGFsaWNcIiwgXCJlZGl0b3JJdGVtQWxpZ25Cb3R0b21cIiwgXCJlZGl0b3JJdGVtQWxpZ25DZW50ZXJcIiwgXCJlZGl0b3JJdGVtQWxpZ25MZWZ0XCIsIFwiZWRpdG9ySXRlbUFsaWduTWlkZGxlXCIsIFwiZWRpdG9ySXRlbUFsaWduUmlnaHRcIiwgXCJlZGl0b3JJdGVtQWxpZ25Ub3BcIiwgXCJlZGl0b3JMaW5rXCIsIFwiZWRpdG9yT3JkZXJlZExpc3RcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnRcIiwgXCJlZGl0b3JQb3NpdGlvbkJvdHRvbVJpZ2h0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BMZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Ub3BSaWdodFwiLCBcImVkaXRvclJlZG9cIiwgXCJlZGl0b3JTdHJpa2VcIiwgXCJlZGl0b3JUYWJsZVwiLCBcImVkaXRvclVuZGVybGluZVwiLCBcImVkaXRvclVuZG9cIiwgXCJlZGl0b3JVbm9yZGVyZWRMaXN0XCIsIFwiZW1haWxcIiwgXCJlbXB0eVwiLCBcImVtc0FwcFwiLCBcImVxbFwiLCBcImVyYXNlclwiLCBcImV4aXRcIiwgXCJleHBhbmRcIiwgXCJleHBhbmRNaW5pXCIsIFwiZXhwb3J0QWN0aW9uXCIsIFwiZXllXCIsIFwiZXllQ2xvc2VkXCIsIFwiZmFjZUhhcHB5XCIsIFwiZmFjZU5ldXRyYWxcIiwgXCJmYWNlU2FkXCIsIFwiZmlsZWJlYXRBcHBcIiwgXCJmaWx0ZXJcIiwgXCJmbGFnXCIsIFwiZmxlZXRBcHBcIiwgXCJmb2xkXCIsIFwiZm9sZGVyQ2hlY2tcIiwgXCJmb2xkZXJDbG9zZWRcIiwgXCJmb2xkZXJFeGNsYW1hdGlvblwiLCBcImZvbGRlck9wZW5cIiwgXCJmcmFtZU5leHRcIiwgXCJmcmFtZVByZXZpb3VzXCIsIFwiZnVsbFNjcmVlblwiLCBcImZ1bGxTY3JlZW5FeGl0XCIsIFwiZnVuY3Rpb25cIiwgXCJnZWFyXCIsIFwiZ2lzQXBwXCIsIFwiZ2xhc3Nlc1wiLCBcImdsb2JlXCIsIFwiZ3JhYlwiLCBcImdyYWJIb3Jpem9udGFsXCIsIFwiZ3JhcGhBcHBcIiwgXCJncmlkXCIsIFwiZ3Jva0FwcFwiLCBcImhlYXJ0XCIsIFwiaGVhcnRiZWF0QXBwXCIsIFwiaGVhdG1hcFwiLCBcImhlbHBcIiwgXCJob21lXCIsIFwiaUluQ2lyY2xlXCIsIFwiaW1hZ2VcIiwgXCJpbXBvcnRBY3Rpb25cIiwgXCJpbmRleENsb3NlXCIsIFwiaW5kZXhFZGl0XCIsIFwiaW5kZXhGbHVzaFwiLCBcImluZGV4TWFuYWdlbWVudEFwcFwiLCBcImluZGV4TWFwcGluZ1wiLCBcImluZGV4T3BlblwiLCBcImluZGV4UGF0dGVybkFwcFwiLCBcImluZGV4Um9sbHVwQXBwXCIsIFwiaW5kZXhSdW50aW1lXCIsIFwiaW5kZXhTZXR0aW5nc1wiLCBcImlucHV0T3V0cHV0XCIsIFwiaW5zcGVjdFwiLCBcImludmVydFwiLCBcImlwXCIsIFwia2V5Ym9hcmRcIiwgXCJrcWxGaWVsZFwiLCBcImtxbEZ1bmN0aW9uXCIsIFwia3FsT3BlcmFuZFwiLCBcImtxbFNlbGVjdG9yXCIsIFwia3FsVmFsdWVcIiwgXCJrdWJlcm5ldGVzTm9kZVwiLCBcImt1YmVybmV0ZXNQb2RcIiwgXCJsYXllcnNcIiwgXCJsZW5zQXBwXCIsIFwibGV0dGVyaW5nXCIsIFwibGluZURhc2hlZFwiLCBcImxpbmVEb3R0ZWRcIiwgXCJsaW5lU29saWRcIiwgXCJsaW5rXCIsIFwibGlzdFwiLCBcImxpc3RBZGRcIiwgXCJsb2NrXCIsIFwibG9ja09wZW5cIiwgXCJsb2dvQVdTXCIsIFwibG9nb0FXU01vbm9cIiwgXCJsb2dvQWVyb3NwaWtlXCIsIFwibG9nb0FwYWNoZVwiLCBcImxvZ29BcHBTZWFyY2hcIiwgXCJsb2dvQXp1cmVcIiwgXCJsb2dvQXp1cmVNb25vXCIsIFwibG9nb0JlYXRzXCIsIFwibG9nb0J1c2luZXNzQW5hbHl0aWNzXCIsIFwibG9nb0NlcGhcIiwgXCJsb2dvQ2xvdWRcIiwgXCJsb2dvQ2xvdWRFbnRlcnByaXNlXCIsIFwibG9nb0NvZGVcIiwgXCJsb2dvQ29kZXNhbmRib3hcIiwgXCJsb2dvQ291Y2hiYXNlXCIsIFwibG9nb0RvY2tlclwiLCBcImxvZ29Ecm9wd2l6YXJkXCIsIFwibG9nb0VsYXN0aWNcIiwgXCJsb2dvRWxhc3RpY1N0YWNrXCIsIFwibG9nb0VsYXN0aWNzZWFyY2hcIiwgXCJsb2dvRW50ZXJwcmlzZVNlYXJjaFwiLCBcImxvZ29FdGNkXCIsIFwibG9nb0dDUFwiLCBcImxvZ29HQ1BNb25vXCIsIFwibG9nb0dpdGh1YlwiLCBcImxvZ29HbWFpbFwiLCBcImxvZ29Hb2xhbmdcIiwgXCJsb2dvR29vZ2xlR1wiLCBcImxvZ29IQXByb3h5XCIsIFwibG9nb0lCTVwiLCBcImxvZ29JQk1Nb25vXCIsIFwibG9nb0thZmthXCIsIFwibG9nb0tpYmFuYVwiLCBcImxvZ29LdWJlcm5ldGVzXCIsIFwibG9nb0xvZ2dpbmdcIiwgXCJsb2dvTG9nc3Rhc2hcIiwgXCJsb2dvTWFwc1wiLCBcImxvZ29NZW1jYWNoZWRcIiwgXCJsb2dvTWV0cmljc1wiLCBcImxvZ29Nb25nb2RiXCIsIFwibG9nb015U1FMXCIsIFwibG9nb05naW54XCIsIFwibG9nb09ic2VydmFiaWxpdHlcIiwgXCJsb2dvT3NxdWVyeVwiLCBcImxvZ29QaHBcIiwgXCJsb2dvUG9zdGdyZXNcIiwgXCJsb2dvUHJvbWV0aGV1c1wiLCBcImxvZ29SYWJiaXRtcVwiLCBcImxvZ29SZWRpc1wiLCBcImxvZ29TZWN1cml0eVwiLCBcImxvZ29TaXRlU2VhcmNoXCIsIFwibG9nb1NrZXRjaFwiLCBcImxvZ29TbGFja1wiLCBcImxvZ29VcHRpbWVcIiwgXCJsb2dvV2ViaG9va1wiLCBcImxvZ29XaW5kb3dzXCIsIFwibG9nb1dvcmtwbGFjZVNlYXJjaFwiLCBcImxvZ3NBcHBcIiwgXCJsb2dzdGFzaEZpbHRlclwiLCBcImxvZ3N0YXNoSWZcIiwgXCJsb2dzdGFzaElucHV0XCIsIFwibG9nc3Rhc2hPdXRwdXRcIiwgXCJsb2dzdGFzaFF1ZXVlXCIsIFwibWFjaGluZUxlYXJuaW5nQXBwXCIsIFwibWFnbmV0XCIsIFwibWFnbmlmeVdpdGhFeGNsYW1hdGlvblwiLCBcIm1hZ25pZnlXaXRoTWludXNcIiwgXCJtYWduaWZ5V2l0aFBsdXNcIiwgXCJtYW5hZ2VtZW50QXBwXCIsIFwibWFwTWFya2VyXCIsIFwibWVtb3J5XCIsIFwibWVudVwiLCBcIm1lbnVEb3duXCIsIFwibWVudUxlZnRcIiwgXCJtZW51UmlnaHRcIiwgXCJtZW51VXBcIiwgXCJtZXJnZVwiLCBcIm1ldHJpY2JlYXRBcHBcIiwgXCJtZXRyaWNzQXBwXCIsIFwibWluaW1pemVcIiwgXCJtaW51c1wiLCBcIm1pbnVzSW5DaXJjbGVcIiwgXCJtaW51c0luQ2lyY2xlRmlsbGVkXCIsIFwibW9iaWxlXCIsIFwibW9uaXRvcmluZ0FwcFwiLCBcIm1vb25cIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXN0ZWRcIiwgXCJub2RlXCIsIFwibm90ZWJvb2tBcHBcIiwgXCJudW1iZXJcIiwgXCJvZmZsaW5lXCIsIFwib25saW5lXCIsIFwib3V0bGllckRldGVjdGlvbkpvYlwiLCBcInBhY2thZ2VcIiwgXCJwYWNrZXRiZWF0QXBwXCIsIFwicGFnZVNlbGVjdFwiLCBcInBhZ2VzU2VsZWN0XCIsIFwicGFwZXJDbGlwXCIsIFwicGFydGlhbFwiLCBcInBhdXNlXCIsIFwicGF5bWVudFwiLCBcInBlbmNpbFwiLCBcInBlcmNlbnRcIiwgXCJwaW5cIiwgXCJwaW5GaWxsZWRcIiwgXCJwaXBlbGluZUFwcFwiLCBcInBsYXlcIiwgXCJwbGF5RmlsbGVkXCIsIFwicGx1c1wiLCBcInBsdXNJbkNpcmNsZVwiLCBcInBsdXNJbkNpcmNsZUZpbGxlZFwiLCBcInBvcG91dFwiLCBcInB1c2hcIiwgXCJxdWVzdGlvbkluQ2lyY2xlXCIsIFwicXVvdGVcIiwgXCJyZWNlbnRseVZpZXdlZEFwcFwiLCBcInJlZnJlc2hcIiwgXCJyZWdyZXNzaW9uSm9iXCIsIFwicmVwb3J0ZXJcIiwgXCJyZXBvcnRpbmdBcHBcIiwgXCJyZXR1cm5LZXlcIiwgXCJzYXZlXCIsIFwic2F2ZWRPYmplY3RzQXBwXCIsIFwic2NhbGVcIiwgXCJzZWFyY2hcIiwgXCJzZWFyY2hQcm9maWxlckFwcFwiLCBcInNlY3VyaXR5QW5hbHl0aWNzQXBwXCIsIFwic2VjdXJpdHlBcHBcIiwgXCJzZWN1cml0eVNpZ25hbFwiLCBcInNlY3VyaXR5U2lnbmFsRGV0ZWN0ZWRcIiwgXCJzZWN1cml0eVNpZ25hbFJlc29sdmVkXCIsIFwic2Vzc2lvblZpZXdlclwiLCBcInNoYXJkXCIsIFwic2hhcmVcIiwgXCJzbm93Zmxha2VcIiwgXCJzb3J0RG93blwiLCBcInNvcnRMZWZ0XCIsIFwic29ydFJpZ2h0XCIsIFwic29ydFVwXCIsIFwic29ydGFibGVcIiwgXCJzcGFjZXNBcHBcIiwgXCJzcWxBcHBcIiwgXCJzdGFyRW1wdHlcIiwgXCJzdGFyRW1wdHlTcGFjZVwiLCBcInN0YXJGaWxsZWRcIiwgXCJzdGFyRmlsbGVkU3BhY2VcIiwgXCJzdGFyTWludXNFbXB0eVwiLCBcInN0YXJNaW51c0ZpbGxlZFwiLCBcInN0YXJQbHVzRW1wdHlcIiwgXCJzdGFyUGx1c0ZpbGxlZFwiLCBcInN0YXRzXCIsIFwic3RvcFwiLCBcInN0b3BGaWxsZWRcIiwgXCJzdG9wU2xhc2hcIiwgXCJzdG9yYWdlXCIsIFwic3RyaW5nXCIsIFwic3VibW9kdWxlXCIsIFwic3VuXCIsIFwic3dhdGNoSW5wdXRcIiwgXCJzeW1saW5rXCIsIFwidGFibGVEZW5zaXR5Q29tcGFjdFwiLCBcInRhYmxlRGVuc2l0eUV4cGFuZGVkXCIsIFwidGFibGVEZW5zaXR5Tm9ybWFsXCIsIFwidGFibGVPZkNvbnRlbnRzXCIsIFwidGFnXCIsIFwidGVhclwiLCBcInRlbXBlcmF0dXJlXCIsIFwidGltZWxpbmVcIiwgXCJ0aW1lbGlvbkFwcFwiLCBcInRpbWVSZWZyZXNoXCIsIFwidGltZXNsaWRlclwiLCBcInRyYWluaW5nXCIsIFwidHJhc2hcIiwgXCJ1bmZvbGRcIiwgXCJ1bmxpbmtcIiwgXCJ1cGdyYWRlQXNzaXN0YW50QXBwXCIsIFwidXB0aW1lQXBwXCIsIFwidXNlclwiLCBcInVzZXJBdmF0YXJcIiwgXCJ1c2Vyc1wiLCBcInVzZXJzUm9sZXNBcHBcIiwgXCJ2ZWN0b3JcIiwgXCJ2aWRlb1BsYXllclwiLCBcInZpc0FyZWFcIiwgXCJ2aXNBcmVhU3RhY2tlZFwiLCBcInZpc0Jhckhvcml6b250YWxcIiwgXCJ2aXNCYXJIb3Jpem9udGFsU3RhY2tlZFwiLCBcInZpc0JhclZlcnRpY2FsXCIsIFwidmlzQmFyVmVydGljYWxTdGFja2VkXCIsIFwidmlzR2F1Z2VcIiwgXCJ2aXNHb2FsXCIsIFwidmlzTGluZVwiLCBcInZpc01hcENvb3JkaW5hdGVcIiwgXCJ2aXNNYXBSZWdpb25cIiwgXCJ2aXNNZXRyaWNcIiwgXCJ2aXNQaWVcIiwgXCJ2aXNUYWJsZVwiLCBcInZpc1RhZ0Nsb3VkXCIsIFwidmlzVGV4dFwiLCBcInZpc1RpbWVsaW9uXCIsIFwidmlzVmVnYVwiLCBcInZpc1Zpc3VhbEJ1aWxkZXJcIiwgXCJ2aXN1YWxpemVBcHBcIiwgXCJ3YXRjaGVzQXBwXCIsIFwid29yZFdyYXBcIiwgXCJ3b3JkV3JhcERpc2FibGVkXCIsIFwid29ya3BsYWNlU2VhcmNoQXBwXCIsIFwid3JlbmNoXCIsIFwidG9rZW5BbGlhc1wiLCBcInRva2VuQW5ub3RhdGlvblwiLCBcInRva2VuQXJyYXlcIiwgXCJ0b2tlbkJpbmFyeVwiLCBcInRva2VuQm9vbGVhblwiLCBcInRva2VuQ2xhc3NcIiwgXCJ0b2tlbkNvbXBsZXRpb25TdWdnZXN0ZXJcIiwgXCJ0b2tlbkNvbnN0YW50XCIsIFwidG9rZW5EYXRlXCIsIFwidG9rZW5EZW5zZVZlY3RvclwiLCBcInRva2VuRWxlbWVudFwiLCBcInRva2VuRW51bVwiLCBcInRva2VuRW51bU1lbWJlclwiLCBcInRva2VuRXZlbnRcIiwgXCJ0b2tlbkV4Y2VwdGlvblwiLCBcInRva2VuRmllbGRcIiwgXCJ0b2tlbkZpbGVcIiwgXCJ0b2tlbkZsYXR0ZW5lZFwiLCBcInRva2VuRnVuY3Rpb25cIiwgXCJ0b2tlbkdlb1wiLCBcInRva2VuSGlzdG9ncmFtXCIsIFwidG9rZW5JbnRlcmZhY2VcIiwgXCJ0b2tlbklQXCIsIFwidG9rZW5Kb2luXCIsIFwidG9rZW5LZXlcIiwgXCJ0b2tlbktleXdvcmRcIiwgXCJ0b2tlbk1ldGhvZFwiLCBcInRva2VuTWV0cmljQ291bnRlclwiLCBcInRva2VuTWV0cmljR2F1Z2VcIiwgXCJ0b2tlbk1vZHVsZVwiLCBcInRva2VuTmFtZXNwYWNlXCIsIFwidG9rZW5OZXN0ZWRcIiwgXCJ0b2tlbk51bGxcIiwgXCJ0b2tlbk51bWJlclwiLCBcInRva2VuT2JqZWN0XCIsIFwidG9rZW5PcGVyYXRvclwiLCBcInRva2VuUGFja2FnZVwiLCBcInRva2VuUGFyYW1ldGVyXCIsIFwidG9rZW5QZXJjb2xhdG9yXCIsIFwidG9rZW5Qcm9wZXJ0eVwiLCBcInRva2VuUmFuZ2VcIiwgXCJ0b2tlblJhbmtGZWF0dXJlXCIsIFwidG9rZW5SYW5rRmVhdHVyZXNcIiwgXCJ0b2tlblJlcG9cIiwgXCJ0b2tlblNlYXJjaFR5cGVcIiwgXCJ0b2tlblNoYXBlXCIsIFwidG9rZW5TdHJpbmdcIiwgXCJ0b2tlblN0cnVjdFwiLCBcInRva2VuU3ltYm9sXCIsIFwidG9rZW5UYWdcIiwgXCJ0b2tlblRleHRcIiwgXCJ0b2tlblRva2VuQ291bnRcIiwgXCJ0b2tlblZhcmlhYmxlXCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50VHlwZS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQ2FuIG9ubHkgYmUgb25lIHNpZGUgYGxlZnRgIG9yIGByaWdodGBcbiAgICAgKi9cbiAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gIC8qKlxuICAgICAqIE9iamVjdCBvZiBwcm9wcyBwYXNzZWQgdG8gdGhlIDxzcGFuLz4gd3JhcHBpbmcgdGhlIGNvbnRlbnQncyB0ZXh0IChvbmx5IGlmIHRoZSBjaGlsZHJlbiBpcyBhIGBzdHJpbmdgKVxuICAgICAqIEl0IGRvZXNuJ3QgYXBwbHkgdG8gdGhlIGljb24uXG4gICAgICovXG4gIHRleHRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlZjogUHJvcFR5cGVzLmFueSxcbiAgICBcImRhdGEtdGV4dFwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcInNcIiwgXCJtXCJdKSxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0FjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogRm9yIGVsbGlwc2lzIG9yIG90aGVyIG5vbi1jbGlja2FibGUgYnV0dG9ucy5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBGb3IgZWxsaXBzaXMgb3Igb3RoZXIgbm9uLWNsaWNrYWJsZSBidXR0b25zLlxuICAgICAqL1xuICBpc1BsYWNlaG9sZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgcGFnZUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHRvdGFsUGFnZXM6IFByb3BUeXBlcy5udW1iZXJcbn07IiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbl9pY29uJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB1c2VFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHR5cGVUb0ljb25UeXBlTWFwID0ge1xuICBmaXJzdDogJ2Fycm93U3RhcnQnLFxuICBwcmV2aW91czogJ2Fycm93TGVmdCcsXG4gIG5leHQ6ICdhcnJvd1JpZ2h0JyxcbiAgbGFzdDogJ2Fycm93RW5kJ1xufTtcbmV4cG9ydCB2YXIgVFlQRVMgPSBrZXlzT2YodHlwZVRvSWNvblR5cGVNYXApO1xuZXhwb3J0IHZhciBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cgPSBmdW5jdGlvbiBFdWlQYWdpbmF0aW9uQnV0dG9uQXJyb3coX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkLFxuICAgICAgYXJpYUNvbnRyb2xzID0gX3JlZi5hcmlhQ29udHJvbHMsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrO1xuICB2YXIgbGFiZWxzID0ge1xuICAgIGZpcnN0OiB1c2VFdWlJMThuKCdldWlQYWdpbmF0aW9uQnV0dG9uQXJyb3cuZmlyc3RQYWdlJywgJ0ZpcnN0IHBhZ2UnKSxcbiAgICBwcmV2aW91czogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93LnByZXZpb3VzUGFnZScsICdQcmV2aW91cyBwYWdlJyksXG4gICAgbmV4dDogdXNlRXVpSTE4bignZXVpUGFnaW5hdGlvbkJ1dHRvbkFycm93Lm5leHRQYWdlJywgJ05leHQgcGFnZScpLFxuICAgIGxhc3Q6IHVzZUV1aUkxOG4oJ2V1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5sYXN0UGFnZScsICdMYXN0IHBhZ2UnKVxuICB9O1xuICB2YXIgYnV0dG9uUHJvcHMgPSB7fTtcblxuICBpZiAoYXJpYUNvbnRyb2xzICYmICFkaXNhYmxlZCkge1xuICAgIGJ1dHRvblByb3BzLmhyZWYgPSBcIiNcIi5jb25jYXQoYXJpYUNvbnRyb2xzKTtcbiAgICBidXR0b25Qcm9wc1snYXJpYS1jb250cm9scyddID0gYXJpYUNvbnRyb2xzO1xuICB9XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZXVpUGFnaW5hdGlvbkFycm93QnV0dG9uJywgY2xhc3NOYW1lKSxcbiAgICBjb2xvcjogXCJ0ZXh0XCIsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGxhYmVsc1t0eXBlXSxcbiAgICB0aXRsZTogZGlzYWJsZWQgPyB1bmRlZmluZWQgOiBsYWJlbHNbdHlwZV0sXG4gICAgaXNEaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgb25DbGljazogb25DbGljayxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwicGFnaW5hdGlvbi1idXR0b24tXCIuY29uY2F0KHR5cGUpLFxuICAgIGljb25UeXBlOiB0eXBlVG9JY29uVHlwZU1hcFt0eXBlXVxuICB9LCBidXR0b25Qcm9wcykpO1xufTtcbkV1aVBhZ2luYXRpb25CdXR0b25BcnJvdy5wcm9wVHlwZXMgPSB7XG4gIHR5cGU6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBhcmlhQ29udHJvbHM6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJpc1NlbGVjdGVkXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJkaXNhYmxlZFwiLCBcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJyZWxcIiwgXCJwcmVwZW5kXCIsIFwiYXBwZW5kXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVIcmVmIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VjdXJpdHkvaHJlZl92YWxpZGF0b3InO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFiID0gZnVuY3Rpb24gRXVpVGFiKF9yZWYpIHtcbiAgdmFyIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9kaXNhYmxlZCA9IF9yZWYuZGlzYWJsZWQsXG4gICAgICBocmVmID0gX3JlZi5ocmVmLFxuICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICByZWwgPSBfcmVmLnJlbCxcbiAgICAgIHByZXBlbmQgPSBfcmVmLnByZXBlbmQsXG4gICAgICBhcHBlbmQgPSBfcmVmLmFwcGVuZCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgaXNIcmVmVmFsaWQgPSAhaHJlZiB8fCB2YWxpZGF0ZUhyZWYoaHJlZik7XG4gIHZhciBkaXNhYmxlZCA9IF9kaXNhYmxlZCB8fCAhaXNIcmVmVmFsaWQ7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFiJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYi1pc1NlbGVjdGVkJzogaXNTZWxlY3RlZCxcbiAgICAnZXVpVGFiLWlzRGlzYWJsZWQnOiBkaXNhYmxlZFxuICB9KTtcblxuICB2YXIgcHJlcGVuZE5vZGUgPSBwcmVwZW5kICYmIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFiX19wcmVwZW5kXCJcbiAgfSwgcHJlcGVuZCk7XG5cbiAgdmFyIGFwcGVuZE5vZGUgPSBhcHBlbmQgJiYgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2FwcGVuZFwiXG4gIH0sIGFwcGVuZCk7IC8vICA8YT4gZWxlbWVudHMgZG9uJ3QgcmVzcGVjdCB0aGUgYGRpc2FibGVkYCBhdHRyaWJ1dGUuIFNvIGlmIHdlJ3JlIGRpc2FibGVkLCB3ZSdsbCBqdXN0IHByZXRlbmRcbiAgLy8gIHRoaXMgaXMgYSBidXR0b24gYW5kIHBpZ2d5YmFjayBvZmYgaXRzIGRpc2FibGVkIHN0eWxlcy5cblxuXG4gIGlmIChocmVmICYmICFkaXNhYmxlZCkge1xuICAgIHZhciBzZWN1cmVSZWwgPSBnZXRTZWN1cmVSZWxGb3JUYXJnZXQoe1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcmVsOiByZWxcbiAgICB9KTtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImFcIiwgX2V4dGVuZHMoe1xuICAgICAgcm9sZTogXCJ0YWJcIixcbiAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhIWlzU2VsZWN0ZWQsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICBocmVmOiBocmVmLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByZWw6IHNlY3VyZVJlbFxuICAgIH0sIHJlc3QpLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYl9fY29udGVudFwiXG4gICAgfSwgY2hpbGRyZW4pLCBhcHBlbmROb2RlKTtcbiAgfVxuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcInRhYlwiLFxuICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAhIWlzU2VsZWN0ZWQsXG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gIH0sIHJlc3QpLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJfX2NvbnRlbnRcIlxuICB9LCBjaGlsZHJlbiksIGFwcGVuZE5vZGUpO1xufTtcbkV1aVRhYi5wcm9wVHlwZXMgPSB7XG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYmVmb3JlIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgKiBXaWxsIGJlIGV4Y2x1ZGVkIGZyb20gaW50ZXJhY3RpdmUgZWZmZWN0cy5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBiZWZvcmUgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBQbGFjZXMgY29udGVudCBhZnRlciB0aGUgdGFiIGNvbnRlbnQvY2hpbGRyZW4uXG4gICAgICogV2lsbCBiZSBleGNsdWRlZCBmcm9tIGludGVyYWN0aXZlIGVmZmVjdHMuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUGxhY2VzIGNvbnRlbnQgYWZ0ZXIgdGhlIHRhYiBjb250ZW50L2NoaWxkcmVuLlxuICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAqL1xuICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJib3R0b21Cb3JkZXJcIiwgXCJleHBhbmRcIiwgXCJzaXplXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGtleXNPZiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHNpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgczogJ2V1aVRhYnMtLXNtYWxsJyxcbiAgbTogbnVsbCxcbiAgbDogJ2V1aVRhYnMtLWxhcmdlJyxcbiAgeGw6ICdldWlUYWJzLS14bGFyZ2UnXG59O1xuZXhwb3J0IHZhciBTSVpFUyA9IGtleXNPZihzaXplVG9DbGFzc05hbWVNYXApO1xuZXhwb3J0IHZhciBFdWlUYWJzID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGJvdHRvbUJvcmRlciA9IF9yZWYuYm90dG9tQm9yZGVyLFxuICAgICAgYm90dG9tQm9yZGVyID0gX3JlZiRib3R0b21Cb3JkZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGJvdHRvbUJvcmRlcixcbiAgICAgIF9yZWYkZXhwYW5kID0gX3JlZi5leHBhbmQsXG4gICAgICBleHBhbmQgPSBfcmVmJGV4cGFuZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGV4cGFuZCxcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/ICdtJyA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYnMnLCBzaXplVG9DbGFzc05hbWVNYXBbc2l6ZV0sIHtcbiAgICAnZXVpVGFicy0tZXhwYW5kJzogZXhwYW5kLFxuICAgICdldWlUYWJzLS1ib3R0b21Cb3JkZXInOiBib3R0b21Cb3JkZXJcbiAgfSwgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCBjaGlsZHJlbiAmJiB7XG4gICAgcm9sZTogJ3RhYmxpc3QnXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59KTtcbkV1aVRhYnMuZGlzcGxheU5hbWUgPSAnRXVpVGFicyc7IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImV4cGFuZFwiLCBcImluaXRpYWxTZWxlY3RlZFRhYlwiLCBcIm9uVGFiQ2xpY2tcIiwgXCJzZWxlY3RlZFRhYlwiLCBcInNpemVcIiwgXCJ0YWJzXCIsIFwiYXV0b0ZvY3VzXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJpZFwiLCBcIm5hbWVcIiwgXCJjb250ZW50XCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgY3JlYXRlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgaHRtbElkR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXVpVGFicyB9IGZyb20gJy4uL3RhYnMnO1xuaW1wb3J0IHsgRXVpVGFiIH0gZnJvbSAnLi4vdGFiJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbi8qKlxuICogTWFya2VkIGFzIGNvbnN0IHNvIHR5cGUgaXMgYFsnaW5pdGlhbCcsICdzZWxlY3RlZCddYCBpbnN0ZWFkIG9mIGBzdHJpbmdbXWBcbiAqL1xuZXhwb3J0IHZhciBBVVRPRk9DVVMgPSBbJ2luaXRpYWwnLCAnc2VsZWN0ZWQnXTtcbmV4cG9ydCB2YXIgRXVpVGFiYmVkQ29udGVudCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVGFiYmVkQ29udGVudCwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihFdWlUYWJiZWRDb250ZW50KTtcblxuICBmdW5jdGlvbiBFdWlUYWJiZWRDb250ZW50KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVRhYmJlZENvbnRlbnQpO1xuXG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcyk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicm9vdElkXCIsIGh0bWxJZEdlbmVyYXRvcigpKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInRhYnNSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJmb2N1c1RhYlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGFyZ2V0VGFiID0gX3RoaXMudGFic1JlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCIjXCIuY29uY2F0KF90aGlzLnN0YXRlLnNlbGVjdGVkVGFiSWQpKTtcblxuICAgICAgdGFyZ2V0VGFiLmZvY3VzKCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaW5pdGlhbGl6ZUZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMuc3RhdGUuaW5Gb2N1cyAmJiBfdGhpcy5wcm9wcy5hdXRvRm9jdXMgPT09ICdzZWxlY3RlZCcpIHtcbiAgICAgICAgLy8gTXVzdCB3YWl0IGZvciBzZXRTdGF0ZSB0byBmaW5pc2ggYmVmb3JlIGNhbGxpbmcgYC5mb2N1cygpYFxuICAgICAgICAvLyBhcyB0aGUgZm9jdXMgY2FsbCB0cmlnZ2VycyBhIGJsdXIgb24gdGhlIGZpcnN0IHRhYlxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW5Gb2N1czogdHJ1ZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNUYWIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVtb3ZlRm9jdXNcIiwgZnVuY3Rpb24gKGJsdXJFdmVudCkge1xuICAgICAgLy8gb25seSBzZXQgaW5Gb2N1cyB0byBmYWxzZSBpZiB0aGUgd3JhcHBpbmcgZGl2IGRvZXNuJ3QgY29udGFpbiB0aGUgbm93LWZvY3VzaW5nIGVsZW1lbnRcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gYmx1ckV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGJsdXJFdmVudC5yZWxhdGVkVGFyZ2V0O1xuXG4gICAgICBpZiAoY3VycmVudFRhcmdldC5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGluRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uVGFiQ2xpY2tcIiwgZnVuY3Rpb24gKHNlbGVjdGVkVGFiKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvblRhYkNsaWNrID0gX3RoaXMkcHJvcHMub25UYWJDbGljayxcbiAgICAgICAgICBleHRlcm5hbFNlbGVjdGVkVGFiID0gX3RoaXMkcHJvcHMuc2VsZWN0ZWRUYWI7XG5cbiAgICAgIGlmIChvblRhYkNsaWNrKSB7XG4gICAgICAgIG9uVGFiQ2xpY2soc2VsZWN0ZWRUYWIpO1xuICAgICAgfSAvLyBPbmx5IHRyYWNrIHNlbGVjdGlvbiBzdGF0ZSBpZiBpdCdzIG5vdCBjb250cm9sbGVkIGV4dGVybmFsbHkuXG5cblxuICAgICAgaWYgKCFleHRlcm5hbFNlbGVjdGVkVGFiKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzZWxlY3RlZFRhYklkOiBzZWxlY3RlZFRhYi5pZFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuZm9jdXNUYWIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgaW5pdGlhbFNlbGVjdGVkVGFiID0gcHJvcHMuaW5pdGlhbFNlbGVjdGVkVGFiLFxuICAgICAgICBfc2VsZWN0ZWRUYWIgPSBwcm9wcy5zZWxlY3RlZFRhYixcbiAgICAgICAgdGFicyA9IHByb3BzLnRhYnM7IC8vIE9ubHkgdHJhY2sgc2VsZWN0aW9uIHN0YXRlIGlmIGl0J3Mgbm90IGNvbnRyb2xsZWQgZXh0ZXJuYWxseS5cblxuICAgIHZhciBzZWxlY3RlZFRhYklkO1xuXG4gICAgaWYgKCFfc2VsZWN0ZWRUYWIpIHtcbiAgICAgIHNlbGVjdGVkVGFiSWQgPSBpbml0aWFsU2VsZWN0ZWRUYWIgJiYgaW5pdGlhbFNlbGVjdGVkVGFiLmlkIHx8IHRhYnNbMF0uaWQ7XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzZWxlY3RlZFRhYklkOiBzZWxlY3RlZFRhYklkLFxuICAgICAgaW5Gb2N1czogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlUYWJiZWRDb250ZW50LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRNb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIC8vIElFMTEgZG9lc24ndCBzdXBwb3J0IHRoZSBgcmVsYXRlZFRhcmdldGAgZXZlbnQgcHJvcGVydHkgZm9yIGJsdXIgZXZlbnRzXG4gICAgICAvLyBidXQgZG9lcyBhZGQgaXQgZm9yIGZvY3Vzb3V0LiBSZWFjdCBkb2Vzbid0IHN1cHBvcnQgYG9uRm9jdXNPdXRgIHNvIGhlcmUgd2UgYXJlLlxuICAgICAgaWYgKHRoaXMudGFic1JlZi5jdXJyZW50KSB7XG4gICAgICAgIC8vIEN1cnJlbnQgc2hvcnQtdGVybSBzb2x1dGlvbiBmb3IgZXZlbnQgbGlzdGVuZXIgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvcHVsbC8yNzE3KVxuICAgICAgICB0aGlzLnRhYnNSZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIHRoaXMucmVtb3ZlRm9jdXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnRhYnNSZWYuY3VycmVudCkge1xuICAgICAgICAvLyBDdXJyZW50IHNob3J0LXRlcm0gc29sdXRpb24gZm9yIGV2ZW50IGxpc3RlbmVyIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvZXVpL3B1bGwvMjcxNylcbiAgICAgICAgdGhpcy50YWJzUmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCB0aGlzLnJlbW92ZUZvY3VzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczIuY2xhc3NOYW1lLFxuICAgICAgICAgIGV4cGFuZCA9IF90aGlzJHByb3BzMi5leHBhbmQsXG4gICAgICAgICAgaW5pdGlhbFNlbGVjdGVkVGFiID0gX3RoaXMkcHJvcHMyLmluaXRpYWxTZWxlY3RlZFRhYixcbiAgICAgICAgICBvblRhYkNsaWNrID0gX3RoaXMkcHJvcHMyLm9uVGFiQ2xpY2ssXG4gICAgICAgICAgZXh0ZXJuYWxTZWxlY3RlZFRhYiA9IF90aGlzJHByb3BzMi5zZWxlY3RlZFRhYixcbiAgICAgICAgICBzaXplID0gX3RoaXMkcHJvcHMyLnNpemUsXG4gICAgICAgICAgdGFicyA9IF90aGlzJHByb3BzMi50YWJzLFxuICAgICAgICAgIGF1dG9Gb2N1cyA9IF90aGlzJHByb3BzMi5hdXRvRm9jdXMsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczIsIF9leGNsdWRlZCk7IC8vIEFsbG93IHRoZSBjb25zdW1lciB0byBjb250cm9sIHRhYiBzZWxlY3Rpb24uXG5cblxuICAgICAgdmFyIHNlbGVjdGVkVGFiID0gZXh0ZXJuYWxTZWxlY3RlZFRhYiB8fCB0YWJzLmZpbmQoZnVuY3Rpb24gKHRhYikge1xuICAgICAgICByZXR1cm4gdGFiLmlkID09PSBfdGhpczIuc3RhdGUuc2VsZWN0ZWRUYWJJZDtcbiAgICAgIH0pO1xuICAgICAgdmFyIF9yZWYgPSBzZWxlY3RlZFRhYixcbiAgICAgICAgICBzZWxlY3RlZFRhYkNvbnRlbnQgPSBfcmVmLmNvbnRlbnQsXG4gICAgICAgICAgc2VsZWN0ZWRUYWJJZCA9IF9yZWYuaWQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlUYWJzLCB7XG4gICAgICAgIHJlZjogdGhpcy50YWJzUmVmLFxuICAgICAgICBleHBhbmQ6IGV4cGFuZCxcbiAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgb25Gb2N1czogdGhpcy5pbml0aWFsaXplRm9jdXNcbiAgICAgIH0sIHRhYnMubWFwKGZ1bmN0aW9uICh0YWIpIHtcbiAgICAgICAgdmFyIGlkID0gdGFiLmlkLFxuICAgICAgICAgICAgbmFtZSA9IHRhYi5uYW1lLFxuICAgICAgICAgICAgY29udGVudCA9IHRhYi5jb250ZW50LFxuICAgICAgICAgICAgdGFiUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXModGFiLCBfZXhjbHVkZWQyKTtcblxuICAgICAgICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe1xuICAgICAgICAgIGtleTogaWQsXG4gICAgICAgICAgaWQ6IGlkXG4gICAgICAgIH0sIHRhYlByb3BzKSwge30sIHtcbiAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vblRhYkNsaWNrKHRhYik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpc1NlbGVjdGVkOiB0YWIgPT09IHNlbGVjdGVkVGFiLFxuICAgICAgICAgICdhcmlhLWNvbnRyb2xzJzogXCJcIi5jb25jYXQoX3RoaXMyLnJvb3RJZClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFiLCBwcm9wcywgbmFtZSk7XG4gICAgICB9KSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICByb2xlOiBcInRhYnBhbmVsXCIsXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdCh0aGlzLnJvb3RJZCksXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHNlbGVjdGVkVGFiSWRcbiAgICAgIH0sIHNlbGVjdGVkVGFiQ29udGVudCkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUYWJiZWRDb250ZW50O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpVGFiYmVkQ29udGVudCwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBhdXRvRm9jdXM6ICdpbml0aWFsJ1xufSk7XG5cbkV1aVRhYmJlZENvbnRlbnQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBXaGVuIHRhYmJpbmcgaW50byB0aGUgdGFicywgc2V0IHRoZSBmb2N1cyBvbiBgaW5pdGlhbGAgZm9yIHRoZSBmaXJzdCB0YWIsXG4gICAgICAgKiBvciBgc2VsZWN0ZWRgIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhYi4gQmVzdCB1c2UgY2FzZSBpcyBmb3IgaW5zaWRlIG9mXG4gICAgICAgKiBvdmVybGF5IGNvbnRlbnQgbGlrZSBwb3BvdmVycyBvciBmbHlvdXRzLlxuICAgICAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLm9uZU9mKFtcImluaXRpYWxcIiwgXCJzZWxlY3RlZFwiXSksXG5cbiAgLyoqXG4gICAgICAgKiBFdmVubHkgc3RyZXRjaGVzIGVhY2ggdGFiIHRvIGZpbGwgdGhlIGhvcml6b250YWwgc3BhY2VcbiAgICAgICAqL1xuICBleHBhbmQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogVXNlIHRoaXMgcHJvcCB0byBzZXQgdGhlIGluaXRpYWxseSBzZWxlY3RlZCB0YWIgd2hpbGUgbGV0dGluZyB0aGUgdGFiYmVkIGNvbnRlbnQgY29tcG9uZW50XG4gICAgICAgKiBjb250cm9sIHNlbGVjdGlvbiBzdGF0ZSBpbnRlcm5hbGx5XG4gICAgICAgKi9cbiAgaW5pdGlhbFNlbGVjdGVkVGFiOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogUGxhY2VzIGNvbnRlbnQgYmVmb3JlIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAgICovXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG5cbiAgICAvKipcbiAgICAgICAqIFBsYWNlcyBjb250ZW50IGFmdGVyIHRoZSB0YWIgY29udGVudC9jaGlsZHJlbi5cbiAgICAgICAqIFdpbGwgYmUgZXhjbHVkZWQgZnJvbSBpbnRlcmFjdGl2ZSBlZmZlY3RzLlxuICAgICAgICovXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBvblRhYkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIFVzZSB0aGlzIHByb3AgaWYgeW91IHdhbnQgdG8gY29udHJvbCBzZWxlY3Rpb24gc3RhdGUgd2l0aGluIHRoZSBvd25lciBjb21wb25lbnRcbiAgICAgICAqL1xuICBzZWxlY3RlZFRhYjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gICAgY29udGVudDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBpc1NlbGVjdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wic1wiLCBcIm1cIiwgXCJsXCIsIFwieGxcIl0pLFxuXG4gIC8qKlxuICAgICAgICogRWFjaCB0YWIgbmVlZHMgaWQgYW5kIGNvbnRlbnQgcHJvcGVydGllcywgc28gd2UgY2FuIGFzc29jaWF0ZSBpdCB3aXRoIGl0cyBwYW5lbCBmb3IgYWNjZXNzaWJpbGl0eS5cbiAgICAgICAqIFRoZSBuYW1lIHByb3BlcnR5IChhIG5vZGUpIGlzIGFsc28gcmVxdWlyZWQgdG8gZGlzcGxheSB0byB0aGUgdXNlci5cbiAgICAgICAqL1xuICB0YWJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgICBjb250ZW50OiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZFxufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmV4cG9ydCB2YXIgRXVpRGVsYXlSZW5kZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aURlbGF5UmVuZGVyLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aURlbGF5UmVuZGVyKTtcblxuICBmdW5jdGlvbiBFdWlEZWxheVJlbmRlcihwcm9wcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlEZWxheVJlbmRlcik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJkZWxheUlEXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidG9CZURlbGF5ZWRcIiwgdHJ1ZSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhcnREZWxheWluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KF90aGlzLmRlbGF5SUQpO1xuICAgICAgX3RoaXMudG9CZURlbGF5ZWQgPSB0cnVlO1xuICAgICAgX3RoaXMuZGVsYXlJRCA9IHdpbmRvdy5zZXRUaW1lb3V0KF90aGlzLnN0b3BEZWxheWluZywgX3RoaXMucHJvcHMuZGVsYXkpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0b3BEZWxheWluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KF90aGlzLmRlbGF5SUQpO1xuICAgICAgX3RoaXMudG9CZURlbGF5ZWQgPSBmYWxzZTtcblxuICAgICAgX3RoaXMuc2hvdWxkVXBkYXRlKCk7XG4gICAgfSk7XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHRvZ2dsZTogZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdWlEZWxheVJlbmRlciwgW3tcbiAgICBrZXk6IFwic2hvdWxkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIHRvZ2dsZSA9IF9yZWYudG9nZ2xlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRvZ2dsZTogIXRvZ2dsZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5zdGFydERlbGF5aW5nKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNob3VsZENvbXBvbmVudFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XG4gICAgICBpZiAodGhpcy50b0JlRGVsYXllZCkge1xuICAgICAgICB0aGlzLnN0YXJ0RGVsYXlpbmcoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNvbXBvbmVudFdpbGxVbm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5zdG9wRGVsYXlpbmcoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMudG9CZURlbGF5ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgcmV0dXJuICF0aGlzLnRvQmVEZWxheWVkID8gdGhpcy5wcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aURlbGF5UmVuZGVyO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpRGVsYXlSZW5kZXIsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgZGVsYXk6IDUwMFxufSk7XG5cbkV1aURlbGF5UmVuZGVyLnByb3BUeXBlcyA9IHtcbiAgZGVsYXk6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJ0ZXh0U2l6ZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgZXVpSGVhbHRoU3R5bGVzIH0gZnJvbSAnLi9oZWFsdGguc3R5bGVzJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aUZsZXhHcm91cCwgRXVpRmxleEl0ZW0gfSBmcm9tICcuLi9mbGV4JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIFRFWFRfU0laRVMgPSBbJ3hzJywgJ3MnLCAnbScsICdpbmhlcml0J107XG5leHBvcnQgdmFyIEV1aUhlYWx0aCA9IGZ1bmN0aW9uIEV1aUhlYWx0aChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIF9yZWYkdGV4dFNpemUgPSBfcmVmLnRleHRTaXplLFxuICAgICAgdGV4dFNpemUgPSBfcmVmJHRleHRTaXplID09PSB2b2lkIDAgPyAncycgOiBfcmVmJHRleHRTaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlIZWFsdGhTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlIZWFsdGgsIHN0eWxlc1t0ZXh0U2l6ZV1dO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUhlYWx0aCcsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgZ3V0dGVyU2l6ZTogXCJ4c1wiLFxuICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgcmVzcG9uc2l2ZTogZmFsc2VcbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiZG90XCIsXG4gICAgY29sb3I6IGNvbG9yXG4gIH0pKSwgX19fRW1vdGlvbkpTWChFdWlGbGV4SXRlbSwge1xuICAgIGdyb3c6IGZhbHNlXG4gIH0sIGNoaWxkcmVuKSkpO1xufTtcbkV1aUhlYWx0aC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBkb3QgaWNvbi5cbiAgICAgICAqIEl0IGFjY2VwdHMgYW55IGBJY29uQ29sb3JgOiBgZGVmYXVsdGAsIGBwcmltYXJ5YCwgYHN1Y2Nlc3NgLCBgYWNjZW50YCwgYHdhcm5pbmdgLCBgZGFuZ2VyYCwgYHRleHRgLFxuICAgICAgICogYHN1YmR1ZWRgIG9yIGBnaG9zdGA7IG9yIGFueSB2YWxpZCBDU1MgY29sb3IgdmFsdWUgYXMgYSBgc3RyaW5nYFxuICAgICAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogTWF0Y2hlcyB0aGUgdGV4dCBzY2FsZXMgb2YgRXVpVGV4dC5cbiAgICAgICAqIFRoZSBgaW5oZXJpdGAgc3R5bGUgd2lsbCBnZXQgaXRzIGZvbnQgc2l6ZSBmcm9tIHRoZSBwYXJlbnQgZWxlbWVudFxuICAgICAgICovXG4gIHRleHRTaXplOiBQcm9wVHlwZXMuYW55XG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiMXFob2pyaS1pbmhlcml0XCIsXG4gIHN0eWxlczogXCJmb250LXNpemU6aW5oZXJpdDtsYWJlbDppbmhlcml0O1wiXG59IDoge1xuICBuYW1lOiBcIjFxaG9qcmktaW5oZXJpdFwiLFxuICBzdHlsZXM6IFwiZm9udC1zaXplOmluaGVyaXQ7bGFiZWw6aW5oZXJpdDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG52YXIgX3JlZjIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiajh1aGNrLWV1aUhlYWx0aFwiLFxuICBzdHlsZXM6IFwiZGlzcGxheTppbmxpbmUtYmxvY2s7bGFiZWw6ZXVpSGVhbHRoO1wiXG59IDoge1xuICBuYW1lOiBcImo4dWhjay1ldWlIZWFsdGhcIixcbiAgc3R5bGVzOiBcImRpc3BsYXk6aW5saW5lLWJsb2NrO2xhYmVsOmV1aUhlYWx0aDtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aUhlYWx0aFN0eWxlcyA9IGZ1bmN0aW9uIGV1aUhlYWx0aFN0eWxlcyhldWlUaGVtZSkge1xuICByZXR1cm4ge1xuICAgIGV1aUhlYWx0aDogX3JlZjIsXG4gICAgLy8gVGV4dCBzaXplc1xuICAgIHhzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAneHMnKSwgXCI7O2xhYmVsOnhzO1wiKSxcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lLCAncycpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2NzcyhldWlGb250U2l6ZShldWlUaGVtZSwgJ20nKSwgXCI7O2xhYmVsOm07XCIpLFxuICAgIGluaGVyaXQ6IF9yZWZcbiAgfTtcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJhbHRcIiwgXCJ1cmxcIiwgXCJzcmNcIiwgXCJzaXplXCIsIFwiaGFzU2hhZG93XCIsIFwic3R5bGVcIiwgXCJ3cmFwcGVyUHJvcHNcIiwgXCJmdWxsU2NyZWVuSWNvbkNvbG9yXCIsIFwiYWxsb3dGdWxsU2NyZWVuXCIsIFwiY2FwdGlvblwiLCBcImZsb2F0XCIsIFwibWFyZ2luXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZVdyYXBwZXIgfSBmcm9tICcuL2ltYWdlX3dyYXBwZXInO1xuaW1wb3J0IHsgZXVpSW1hZ2VTdHlsZXMgfSBmcm9tICcuL2ltYWdlLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyIH0gZnJvbSAnLi9pbWFnZV9mdWxsc2NyZWVuX3dyYXBwZXInO1xuaW1wb3J0IHsgU0laRVMgfSBmcm9tICcuL2ltYWdlX3R5cGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlID0gZnVuY3Rpb24gRXVpSW1hZ2UoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBhbHQgPSBfcmVmLmFsdCxcbiAgICAgIHVybCA9IF9yZWYudXJsLFxuICAgICAgc3JjID0gX3JlZi5zcmMsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAnb3JpZ2luYWwnIDogX3JlZiRzaXplLFxuICAgICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICB3cmFwcGVyUHJvcHMgPSBfcmVmLndyYXBwZXJQcm9wcyxcbiAgICAgIGZ1bGxTY3JlZW5JY29uQ29sb3IgPSBfcmVmLmZ1bGxTY3JlZW5JY29uQ29sb3IsXG4gICAgICBhbGxvd0Z1bGxTY3JlZW4gPSBfcmVmLmFsbG93RnVsbFNjcmVlbixcbiAgICAgIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgICBmbG9hdCA9IF9yZWYuZmxvYXQsXG4gICAgICBtYXJnaW4gPSBfcmVmLm1hcmdpbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoZmFsc2UpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBpc0Z1bGxTY3JlZW4gPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0SXNGdWxsU2NyZWVuID0gX3VzZVN0YXRlMlsxXTtcblxuICB2YXIgaXNOYW1lZFNpemUgPSB0eXBlb2Ygc2l6ZSA9PT0gJ3N0cmluZycgJiYgU0laRVMuaW5jbHVkZXMoc2l6ZSk7XG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpSW1hZ2UnLCBjbGFzc05hbWUpO1xuICB2YXIgZXVpVGhlbWUgPSB1c2VFdWlUaGVtZSgpO1xuICB2YXIgc3R5bGVzID0gZXVpSW1hZ2VTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZSwgaXNOYW1lZFNpemUgJiYgc3R5bGVzW3NpemVdLCAhaXNOYW1lZFNpemUgJiYgc3R5bGVzLmN1c3RvbVNpemUsIGhhc1NoYWRvdyAmJiBzdHlsZXMuaGFzU2hhZG93XTtcbiAgdmFyIGNzc0lzRnVsbFNjcmVlblN0eWxlcyA9IFtzdHlsZXMuZXVpSW1hZ2UsIHN0eWxlcy5pc0Z1bGxTY3JlZW5dO1xuICB2YXIgaXNDdXN0b21TaXplID0gIWlzTmFtZWRTaXplICYmIHNpemUgIT09ICdvcmlnaW5hbCc7XG4gIHZhciBjdXN0b21TaXplID0gdHlwZW9mIHNpemUgPT09ICdzdHJpbmcnID8gc2l6ZSA6IFwiXCIuY29uY2F0KHNpemUsIFwicHhcIik7XG4gIHZhciBpbWFnZVN0eWxlV2l0aEN1c3RvbVNpemUgPSBpc0N1c3RvbVNpemUgPyBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlKSwge30sIHtcbiAgICBtYXhXaWR0aDogY3VzdG9tU2l6ZSxcbiAgICBtYXhIZWlnaHQ6IGN1c3RvbVNpemVcbiAgfSkgOiBzdHlsZTtcbiAgdmFyIGlzRnVsbFdpZHRoID0gc2l6ZSA9PT0gJ2Z1bGxXaWR0aCc7XG4gIHZhciBjb21tb25XcmFwcGVyUHJvcHMgPSB7XG4gICAgaGFzU2hhZG93OiBoYXNTaGFkb3csXG4gICAgd3JhcHBlclByb3BzOiB3cmFwcGVyUHJvcHMsXG4gICAgc2V0SXNGdWxsU2NyZWVuOiBzZXRJc0Z1bGxTY3JlZW4sXG4gICAgZnVsbFNjcmVlbkljb25Db2xvcjogZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICBpc0Z1bGxXaWR0aDogaXNGdWxsV2lkdGgsXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBhbGxvd0Z1bGxTY3JlZW4sXG4gICAgYWx0OiBhbHQsXG4gICAgY2FwdGlvbjogY2FwdGlvbixcbiAgICBmbG9hdDogZmxvYXQsXG4gICAgbWFyZ2luOiBtYXJnaW5cbiAgfTtcblxuICB2YXIgY29tbW9uSW1nUHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgc3JjOiBzcmMgfHwgdXJsXG4gIH0sIHJlc3QpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUltYWdlV3JhcHBlciwgY29tbW9uV3JhcHBlclByb3BzLCBfX19FbW90aW9uSlNYKFwiaW1nXCIsIF9leHRlbmRzKHtcbiAgICBhbHQ6IGFsdCxcbiAgICBjc3M6IGNzc1N0eWxlcyxcbiAgICBzdHlsZTogaW1hZ2VTdHlsZVdpdGhDdXN0b21TaXplXG4gIH0sIGNvbW1vbkltZ1Byb3BzKSkpLCBhbGxvd0Z1bGxTY3JlZW4gJiYgaXNGdWxsU2NyZWVuICYmIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciwgY29tbW9uV3JhcHBlclByb3BzLCBfX19FbW90aW9uSlNYKFwiaW1nXCIsIF9leHRlbmRzKHtcbiAgICBhbHQ6IGFsdCxcbiAgICBjc3M6IGNzc0lzRnVsbFNjcmVlblN0eWxlcyxcbiAgICBzdHlsZTogc3R5bGVcbiAgfSwgY29tbW9uSW1nUHJvcHMpKSkpO1xufTtcbkV1aUltYWdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogUmVxdWlyZXMgZWl0aGVyIGBzcmNgIG9yIGB1cmxgIGJ1dCBkZWZhdWx0cyB0byB1c2luZyBgc3JjYCBpZiBib3RoIGFyZSBwcm92aWRlZFxuICAgICAgICovXG4gIHNyYzogUHJvcFR5cGVzLnN0cmluZyxcbiAgdXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogQWx0IHRleHQgc2hvdWxkIGRlc2NyaWJlIHRoZSBpbWFnZSB0byBhaWQgc2NyZWVuIHJlYWRlciB1c2Vycy4gU2VlXG4gICAgICAgKiBodHRwczovL3dlYmFpbS5vcmcvdGVjaG5pcXVlcy9hbHR0ZXh0LyBmb3IgYSBndWlkZSBvbiB3cml0aW5nXG4gICAgICAgKiBlZmZlY3RpdmUgYWx0IHRleHQuXG4gICAgICAgKlxuICAgICAgICogSWYgbm8gbWVhbmluZ2Z1bCBkZXNjcmlwdGlvbiBleGlzdHMsIG9yIGlmIHRoZSBpbWFnZSBpcyBhZGVxdWF0ZWx5XG4gICAgICAgKiBkZXNjcmliZWQgYnkgdGhlIHN1cnJvdW5kaW5nIHRleHQsIHBhc3MgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgICovXG4gIGFsdDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogUHJvdmlkZXMgYSB2aXNpYmxlIGNhcHRpb24gdG8gdGhlIGltYWdlXG4gICAgICAgKi9cbiAgY2FwdGlvbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGBzYCAvIGBtYCAvIGBsYCAvIGB4bGAgLyBgb3JpZ2luYWxgIC8gYGZ1bGxXaWR0aGAgLyBvciBhIENTUyBzaXplIG9mIGBudW1iZXJgIG9yIGBzdHJpbmdgLlxuICAgICAgICogYGZ1bGxXaWR0aGAgd2lsbCBzZXQgdGhlIGZpZ3VyZSB0byBzdHJldGNoIHRvIDEwMCUgb2YgaXRzIGNvbnRhaW5lci5cbiAgICAgICAqIGBzdHJpbmdgIGFuZCBgbnVtYmVyYCB0eXBlcyB3aWxsIG1heCBib3RoIHRoZSB3aWR0aCBvciBoZWlnaHQsIHdoaWNoZXZlciBpcyBncmVhdGVyLlxuICAgICAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIEZsb2F0IHRoZSBpbWFnZSB0byB0aGUgbGVmdCBvciByaWdodC4gVXNlZnVsIGluIGxhcmdlIHRleHQgYmxvY2tzLlxuICAgICAgICovXG4gIGZsb2F0OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogTWFyZ2luIGFyb3VuZCB0aGUgaW1hZ2UuXG4gICAgICAgKi9cbiAgbWFyZ2luOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogV2hlbiBzZXQgdG8gYHRydWVgIChkZWZhdWx0KSB3aWxsIGFwcGx5IGEgc2xpZ2h0IHNoYWRvdyB0byB0aGUgaW1hZ2VcbiAgICAgICAqL1xuICBoYXNTaGFkb3c6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogV2hlbiBzZXQgdG8gYHRydWVgIHdpbGwgbWFrZSB0aGUgaW1hZ2UgY2xpY2thYmxlIHRvIGEgbGFyZ2VyIHZlcnNpb25cbiAgICAgICAqL1xuICBhbGxvd0Z1bGxTY3JlZW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogQ2hhbmdlcyB0aGUgY29sb3Igb2YgdGhlIGljb24gdGhhdCBmbG9hdHMgYWJvdmUgdGhlIGltYWdlIHdoZW4gaXQgY2FuIGJlIGNsaWNrZWQgdG8gZnVsbHNjcmVlbi5cbiAgICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIGBsaWdodGAgaXMgZmluZSB1bmxlc3MgeW91ciBpbWFnZSBoYXMgYSB3aGl0ZSBiYWNrZ3JvdW5kLCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgY2hhbmdlIGl0IHRvIGBkYXJrYC5cbiAgICAgICAqL1xuICBmdWxsU2NyZWVuSWNvbkNvbG9yOiBQcm9wVHlwZXMub25lT2YoW1wibGlnaHRcIiwgXCJkYXJrXCJdKSxcblxuICAvKipcbiAgICAgICAqIFByb3BzIHRvIGFkZCB0byB0aGUgd3JhcHBpbmcgZmlndXJlIGVsZW1lbnRcbiAgICAgICAqL1xuICB3cmFwcGVyUHJvcHM6IFByb3BUeXBlcy5hbnlcbn07IiwgImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHVzZUV1aVRoZW1lIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgdXNlSW5uZXJUZXh0IH0gZnJvbSAnLi4vaW5uZXJfdGV4dCc7XG5pbXBvcnQgeyBldWlJbWFnZVdyYXBwZXJTdHlsZXMgfSBmcm9tICcuL2ltYWdlX3dyYXBwZXIuc3R5bGVzJztcbmltcG9ydCB7IEV1aUltYWdlQnV0dG9uIH0gZnJvbSAnLi9pbWFnZV9idXR0b24nO1xuaW1wb3J0IHsgRXVpSW1hZ2VDYXB0aW9uIH0gZnJvbSAnLi9pbWFnZV9jYXB0aW9uJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlV3JhcHBlciA9IGZ1bmN0aW9uIEV1aUltYWdlV3JhcHBlcihfcmVmKSB7XG4gIHZhciBhbHQgPSBfcmVmLmFsdCxcbiAgICAgIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgICBoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICAgIGFsbG93RnVsbFNjcmVlbiA9IF9yZWYuYWxsb3dGdWxsU2NyZWVuLFxuICAgICAgZmxvYXQgPSBfcmVmLmZsb2F0LFxuICAgICAgbWFyZ2luID0gX3JlZi5tYXJnaW4sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBzZXRJc0Z1bGxTY3JlZW4gPSBfcmVmLnNldElzRnVsbFNjcmVlbixcbiAgICAgIHdyYXBwZXJQcm9wcyA9IF9yZWYud3JhcHBlclByb3BzLFxuICAgICAgZnVsbFNjcmVlbkljb25Db2xvciA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICAgIGlzRnVsbFdpZHRoID0gX3JlZi5pc0Z1bGxXaWR0aDtcblxuICB2YXIgb3BlbkZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBvcGVuRnVsbFNjcmVlbigpIHtcbiAgICBzZXRJc0Z1bGxTY3JlZW4odHJ1ZSk7XG4gIH07XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlJbWFnZVdyYXBwZXInLCB3cmFwcGVyUHJvcHMgJiYgd3JhcHBlclByb3BzLmNsYXNzTmFtZSk7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlJbWFnZVdyYXBwZXJTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzRmlndXJlU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZVdyYXBwZXIsIGZsb2F0ICYmIHN0eWxlc1tmbG9hdF0sIG1hcmdpbiAmJiBzdHlsZXNbbWFyZ2luXSwgYWxsb3dGdWxsU2NyZWVuICYmIHN0eWxlcy5hbGxvd0Z1bGxTY3JlZW4sIGlzRnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGhdO1xuXG4gIHZhciBfdXNlSW5uZXJUZXh0ID0gdXNlSW5uZXJUZXh0KCksXG4gICAgICBfdXNlSW5uZXJUZXh0MiA9IF9zbGljZWRUb0FycmF5KF91c2VJbm5lclRleHQsIDIpLFxuICAgICAgb3B0aW9uYWxDYXB0aW9uUmVmID0gX3VzZUlubmVyVGV4dDJbMF0sXG4gICAgICBvcHRpb25hbENhcHRpb25UZXh0ID0gX3VzZUlubmVyVGV4dDJbMV07XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJmaWd1cmVcIiwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1sYWJlbFwiOiBvcHRpb25hbENhcHRpb25UZXh0XG4gIH0sIHdyYXBwZXJQcm9wcywge1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBjc3M6IGNzc0ZpZ3VyZVN0eWxlc1xuICB9KSwgYWxsb3dGdWxsU2NyZWVuID8gX19fRW1vdGlvbkpTWChSZWFjdC5GcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUJ1dHRvbiwge1xuICAgIGhhc0FsdDogISFhbHQsXG4gICAgaGFzU2hhZG93OiBoYXNTaGFkb3csXG4gICAgb25DbGljazogb3BlbkZ1bGxTY3JlZW4sXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImFjdGl2YXRlRnVsbFNjcmVlbkJ1dHRvblwiLFxuICAgIGlzRnVsbFdpZHRoOiBpc0Z1bGxXaWR0aCxcbiAgICBmdWxsU2NyZWVuSWNvbkNvbG9yOiBmdWxsU2NyZWVuSWNvbkNvbG9yXG4gIH0sIGNoaWxkcmVuKSkgOiBjaGlsZHJlbiwgX19fRW1vdGlvbkpTWChFdWlJbWFnZUNhcHRpb24sIHtcbiAgICByZWY6IG9wdGlvbmFsQ2FwdGlvblJlZixcbiAgICBjYXB0aW9uOiBjYXB0aW9uXG4gIH0pKTtcbn07XG5FdWlJbWFnZVdyYXBwZXIucHJvcFR5cGVzID0ge1xuICBpc0Z1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgc2V0SXNGdWxsU2NyZWVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBsb2dpY2FsQ1NTLCBsb2dpY2FsVGV4dEFsaWduQ1NTLCBsb2dpY2FsU2lkZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcblxudmFyIF9yZWYgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIG5hbWU6IFwiZ2Fjbm1jLWFsbG93RnVsbFNjcmVlblwiLFxuICBzdHlsZXM6IFwiJjpob3ZlciBbY2xhc3MqPSdldWlJbWFnZUNhcHRpb24nXXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO307bGFiZWw6YWxsb3dGdWxsU2NyZWVuO1wiXG59IDoge1xuICBuYW1lOiBcImdhY25tYy1hbGxvd0Z1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcIiY6aG92ZXIgW2NsYXNzKj0nZXVpSW1hZ2VDYXB0aW9uJ117dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmFsbG93RnVsbFNjcmVlbjtcIixcbiAgdG9TdHJpbmc6IF9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fXG59O1xuXG5leHBvcnQgdmFyIGV1aUltYWdlV3JhcHBlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlV3JhcHBlclN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgdmFyIGV1aVRoZW1lID0gZXVpVGhlbWVDb250ZXh0LmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJbWFnZVdyYXBwZXI6IC8qI19fUFVSRV9fKi9jc3MoXCJkaXNwbGF5OmlubGluZS1ibG9jaztcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCIgXCIsIGxvZ2ljYWxUZXh0QWxpZ25DU1MoJ2NlbnRlcicpLCBcIjtsaW5lLWhlaWdodDowO2ZsZXgtc2hyaW5rOjA7O2xhYmVsOmV1aUltYWdlV3JhcHBlcjtcIiksXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBfcmVmLFxuICAgIC8vIE1hcmdpbnNcbiAgICBzOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luOlwiLCBldWlUaGVtZS5zaXplLnMsIFwiOztsYWJlbDpzO1wiKSxcbiAgICBtOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luOlwiLCBldWlUaGVtZS5zaXplLmJhc2UsIFwiOztsYWJlbDptO1wiKSxcbiAgICBsOiAvKiNfX1BVUkVfXyovY3NzKFwibWFyZ2luOlwiLCBldWlUaGVtZS5zaXplLmwsIFwiOztsYWJlbDpsO1wiKSxcbiAgICB4bDogLyojX19QVVJFX18qL2NzcyhcIm1hcmdpbjpcIiwgZXVpVGhlbWUuc2l6ZS54bCwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICAvLyBGbG9hdHNcbiAgICAvLyAxOiBMb2dpY2FsIHByb3BlcnRpZXMvdmFsdWVzIGluIGBmbG9hdGAgaXMgY3VycmVudGx5IG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IGFsbCBicm93c2VycyB3L28gZmxhZ3NcbiAgICAvLyBAc2VlIGh0dHBzOi8vY2FuaXVzZS5jb20vbWRuLWNzc19wcm9wZXJ0aWVzX2Zsb2F0X2Zsb3dfcmVsYXRpdmVfdmFsdWVzIGZvciB3aGVuIHdlIGNhbiByZW1vdmUgbGVmdC9yaWdodCBmYWxsYmFja3NcbiAgICBsZWZ0OiAvKiNfX1BVUkVfXyovY3NzKFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiBcIiwgZXVpVGhlbWUuYnJlYWtwb2ludC5tLCBcInB4KXtmbG9hdDpsZWZ0O2Zsb2F0OlwiLCBsb2dpY2FsU2lkZS5sZWZ0LCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLWxlZnQnLCAnMCcpLCBcIjtcIiwgbG9naWNhbENTUygnbWFyZ2luLXRvcCcsICcwJyksIFwiO307bGFiZWw6bGVmdDtcIiksXG4gICAgcmlnaHQ6IC8qI19fUFVSRV9fKi9jc3MoXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IFwiLCBldWlUaGVtZS5icmVha3BvaW50Lm0sIFwicHgpe2Zsb2F0OnJpZ2h0O2Zsb2F0OlwiLCBsb2dpY2FsU2lkZS5yaWdodCwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi1yaWdodCcsICcwJyksIFwiO1wiLCBsb2dpY2FsQ1NTKCdtYXJnaW4tdG9wJywgJzAnKSwgXCI7fTtsYWJlbDpyaWdodDtcIiksXG4gICAgLy8gU2l6ZXNcbiAgICBmdWxsV2lkdGg6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnMTAwJScpLCBcIjs7bGFiZWw6ZnVsbFdpZHRoO1wiKVxuICB9O1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImhhc0FsdFwiLCBcImhhc1NoYWRvd1wiLCBcImNoaWxkcmVuXCIsIFwib25DbGlja1wiLCBcIm9uS2V5RG93blwiLCBcImlzRnVsbFNjcmVlblwiLCBcImlzRnVsbFdpZHRoXCIsIFwiZnVsbFNjcmVlbkljb25Db2xvclwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGV1aUltYWdlQnV0dG9uU3R5bGVzLCBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMgfSBmcm9tICcuL2ltYWdlX2J1dHRvbi5zdHlsZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbnZhciBmdWxsU2NyZWVuSWNvbkNvbG9yTWFwID0ge1xuICBsaWdodDogJ2dob3N0JyxcbiAgZGFyazogJ2RlZmF1bHQnXG59O1xuZXhwb3J0IHZhciBFdWlJbWFnZUJ1dHRvbiA9IGZ1bmN0aW9uIEV1aUltYWdlQnV0dG9uKF9yZWYpIHtcbiAgdmFyIGhhc0FsdCA9IF9yZWYuaGFzQWx0LFxuICAgICAgaGFzU2hhZG93ID0gX3JlZi5oYXNTaGFkb3csXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgb25LZXlEb3duID0gX3JlZi5vbktleURvd24sXG4gICAgICBpc0Z1bGxTY3JlZW4gPSBfcmVmLmlzRnVsbFNjcmVlbixcbiAgICAgIGlzRnVsbFdpZHRoID0gX3JlZi5pc0Z1bGxXaWR0aCxcbiAgICAgIF9yZWYkZnVsbFNjcmVlbkljb25DbyA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcixcbiAgICAgIGZ1bGxTY3JlZW5JY29uQ29sb3IgPSBfcmVmJGZ1bGxTY3JlZW5JY29uQ28gPT09IHZvaWQgMCA/ICdsaWdodCcgOiBfcmVmJGZ1bGxTY3JlZW5JY29uQ28sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIGJ1dHRvblN0eWxlcyA9IGV1aUltYWdlQnV0dG9uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0J1dHRvblN0eWxlcyA9IFtidXR0b25TdHlsZXMuZXVpSW1hZ2VCdXR0b24sIGhhc1NoYWRvdyA/IGJ1dHRvblN0eWxlcy5oYXNTaGFkb3dIb3ZlciA6IGJ1dHRvblN0eWxlcy5zaGFkb3dIb3ZlciwgIWlzRnVsbFNjcmVlbiAmJiBpc0Z1bGxXaWR0aCAmJiBidXR0b25TdHlsZXMuZnVsbFdpZHRoXTtcbiAgdmFyIGljb25TdHlsZXMgPSBldWlJbWFnZUJ1dHRvbkljb25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzSWNvblN0eWxlcyA9IFtpY29uU3R5bGVzLmV1aUltYWdlQnV0dG9uX19pY29uLCBpY29uU3R5bGVzLm9wZW5GdWxsU2NyZWVuXTtcbiAgdmFyIG9wZW5GdWxsU2NyZWVuSW5zdHJ1Y3Rpb25zID0gdXNlRXVpSTE4bignZXVpSW1hZ2VCdXR0b24ub3BlbkZ1bGxTY3JlZW4nLCAnQ2xpY2sgdG8gb3BlbiB0aGlzIGltYWdlIGluIGZ1bGxzY3JlZW4gbW9kZScpO1xuICB2YXIgY2xvc2VGdWxsU2NyZWVuSW5zdHJ1Y3Rpb25zID0gdXNlRXVpSTE4bignZXVpSW1hZ2VCdXR0b24uY2xvc2VGdWxsU2NyZWVuJywgJ1ByZXNzIEVzY2FwZSBvciBjbGljayB0byBjbG9zZSBpbWFnZSBmdWxsc2NyZWVuIG1vZGUnKTtcbiAgdmFyIGljb25Db2xvciA9IGZ1bGxTY3JlZW5JY29uQ29sb3JNYXBbZnVsbFNjcmVlbkljb25Db2xvcl07XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIF9leHRlbmRzKHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIGNzczogY3NzQnV0dG9uU3R5bGVzLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgb25LZXlEb3duOiBvbktleURvd25cbiAgfSwgcmVzdCksIGlzRnVsbFNjcmVlbiAmJiAvLyBJbiBmdWxsc2NyZWVuIG1vZGUsIGluc3RydWN0aW9ucyBzaG91bGQgY29tZSBmaXJzdCB0byBhbGxvdyBzY3JlZW4gcmVhZGVyXG4gIC8vIHVzZXJzIHRvIHF1aWNrbHkgZXhpdCB2cy4gcG90ZW50aWFsbHkgcmVhZGluZyBvdXQgbG9uZy91bnNraXBwYWJsZSBhbHQgdGV4dFxuICBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGNsb3NlRnVsbFNjcmVlbkluc3RydWN0aW9ucywgaGFzQWx0ICYmICcgXHUyMDE0ICcpKSwgY2hpbGRyZW4sICFpc0Z1bGxTY3JlZW4gJiYgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY3NzOiBjc3NJY29uU3R5bGVzXG4gIH0sIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgaGFzQWx0ICYmICcgXHUyMDE0ICcsIG9wZW5GdWxsU2NyZWVuSW5zdHJ1Y3Rpb25zKSksIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIHR5cGU6IFwiZnVsbFNjcmVlblwiLFxuICAgIGNvbG9yOiBpY29uQ29sb3JcbiAgfSkpKSk7XG59O1xuRXVpSW1hZ2VCdXR0b24ucHJvcFR5cGVzID0ge1xuICBoYXNBbHQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIGlzRnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpc0Z1bGxTY3JlZW46IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXygpIHsgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb2N1c1JpbmcsIGxvZ2ljYWxDU1MsIGV1aUNhbkFuaW1hdGUgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZyc7XG5pbXBvcnQgeyBldWlTaGFkb3cgfSBmcm9tICcuLi8uLi90aGVtZXMvYW1zdGVyZGFtL2dsb2JhbF9zdHlsaW5nL21peGlucyc7XG5leHBvcnQgdmFyIGV1aUltYWdlQnV0dG9uU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VCdXR0b25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VCdXR0b246IC8qI19fUFVSRV9fKi9jc3MoXCJwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOm1hdGNoLXBhcmVudDtsaW5lLWhlaWdodDowOyY6OmJlZm9yZXtvcGFjaXR5OjA7Y29udGVudDonJztwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5mYXN0LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO319Jjpob3ZlciwmOmZvY3VzeyY6OmJlZm9yZXtvcGFjaXR5OjE7fVtjbGFzcyo9J2V1aUltYWdlQnV0dG9uX19pY29uJ117b3BhY2l0eToxO319Jjpmb2N1c3tcIiwgZXVpRm9jdXNSaW5nKGV1aVRoZW1lLCAnb3V0c2V0JyksIFwiO307bGFiZWw6ZXVpSW1hZ2VCdXR0b247XCIpLFxuICAgIGZ1bGxXaWR0aDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDAlJyksIFwiOztsYWJlbDpmdWxsV2lkdGg7XCIpLFxuICAgIHNoYWRvd0hvdmVyOiAvKiNfX1BVUkVfXyovY3NzKFwiJjo6YmVmb3Jle1wiLCBldWlTaGFkb3coZXVpVGhlbWVDb250ZXh0LCAncycpLCBcIjt9O2xhYmVsOnNoYWRvd0hvdmVyO1wiKSxcbiAgICBoYXNTaGFkb3dIb3ZlcjogLyojX19QVVJFX18qL2NzcyhcIiY6OmJlZm9yZXtcIiwgZXVpU2hhZG93KGV1aVRoZW1lQ29udGV4dCwgJ20nKSwgXCI7fTtsYWJlbDpoYXNTaGFkb3dIb3ZlcjtcIilcbiAgfTtcbn07XG5cbnZhciBfcmVmID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8ge1xuICBuYW1lOiBcInhqNGRzYS1jbG9zZUZ1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcInBvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6Y2xvc2VGdWxsU2NyZWVuO1wiXG59IDoge1xuICBuYW1lOiBcInhqNGRzYS1jbG9zZUZ1bGxTY3JlZW5cIixcbiAgc3R5bGVzOiBcInBvaW50ZXItZXZlbnRzOm5vbmU7bGFiZWw6Y2xvc2VGdWxsU2NyZWVuO1wiLFxuICB0b1N0cmluZzogX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX19cbn07XG5cbmV4cG9ydCB2YXIgZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzID0gZnVuY3Rpb24gZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBldWlUaGVtZSA9IF9yZWYyLmV1aVRoZW1lO1xuICByZXR1cm4ge1xuICAgIC8vIEJhc2VcbiAgICBldWlJbWFnZUJ1dHRvbl9faWNvbjogLyojX19QVVJFX18qL2NzcyhcInBvc2l0aW9uOmFic29sdXRlO1wiLCBsb2dpY2FsQ1NTKCd0b3AnLCBldWlUaGVtZS5zaXplLmJhc2UpLCBcIjtcIiwgbG9naWNhbENTUygncmlnaHQnLCBldWlUaGVtZS5zaXplLmJhc2UpLCBcIjs7bGFiZWw6ZXVpSW1hZ2VCdXR0b25fX2ljb247XCIpLFxuICAgIG9wZW5GdWxsU2NyZWVuOiAvKiNfX1BVUkVfXyovY3NzKFwib3BhY2l0eTowO2N1cnNvcjpwb2ludGVyO1wiLCBldWlDYW5BbmltYXRlLCBcInt0cmFuc2l0aW9uOm9wYWNpdHkgXCIsIGV1aVRoZW1lLmFuaW1hdGlvbi5zbG93LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLnJlc2lzdGFuY2UsIFwiO307bGFiZWw6b3BlbkZ1bGxTY3JlZW47XCIpLFxuICAgIGNsb3NlRnVsbFNjcmVlbjogX3JlZlxuICB9O1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRXVpVGhlbWUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBldWlJbWFnZUNhcHRpb25TdHlsZXMgfSBmcm9tICcuL2ltYWdlX2NhcHRpb24uc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aUltYWdlQ2FwdGlvbiA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgICBfcmVmJGlzT25PdmVybGF5TWFzayA9IF9yZWYuaXNPbk92ZXJsYXlNYXNrLFxuICAgICAgaXNPbk92ZXJsYXlNYXNrID0gX3JlZiRpc09uT3ZlcmxheU1hc2sgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpc09uT3ZlcmxheU1hc2s7XG4gIHZhciBldWlUaGVtZSA9IHVzZUV1aVRoZW1lKCk7XG4gIHZhciBzdHlsZXMgPSBldWlJbWFnZUNhcHRpb25TdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZUNhcHRpb24sIGlzT25PdmVybGF5TWFzayAmJiBzdHlsZXMuaXNPbk92ZXJsYXlNYXNrXTtcbiAgcmV0dXJuIGNhcHRpb24gPyBfX19FbW90aW9uSlNYKFwiZmlnY2FwdGlvblwiLCB7XG4gICAgcmVmOiByZWYsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSwgY2FwdGlvbikgOiBudWxsO1xufSk7XG5FdWlJbWFnZUNhcHRpb24ucHJvcFR5cGVzID0ge1xuICBpc09uT3ZlcmxheU1hc2s6IFByb3BUeXBlcy5ib29sXG59O1xuRXVpSW1hZ2VDYXB0aW9uLmRpc3BsYXlOYW1lID0gJ0V1aUltYWdlQ2FwdGlvbic7IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlGb250U2l6ZSwgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuZXhwb3J0IHZhciBldWlJbWFnZUNhcHRpb25TdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZUNhcHRpb25TdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VDYXB0aW9uOiAvKiNfX1BVUkVfXyovY3NzKGV1aUZvbnRTaXplKGV1aVRoZW1lQ29udGV4dCwgJ3MnKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21hcmdpbi10b3AnLCBldWlUaGVtZS5zaXplLnhzKSwgXCI7O2xhYmVsOmV1aUltYWdlQ2FwdGlvbjtcIiksXG4gICAgaXNPbk92ZXJsYXlNYXNrOiAvKiNfX1BVUkVfXyovY3NzKFwiY29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7dGV4dC1zaGFkb3c6MCAxcHggMnB4IFwiLCB0cmFuc3BhcmVudGl6ZShldWlUaGVtZS5jb2xvcnMuaW5rLCAwLjYpLCBcIjtbY2xhc3MqPSdldWlMaW5rJ117Y29sb3I6XCIsIGV1aVRoZW1lLmNvbG9ycy5naG9zdCwgXCI7fTtsYWJlbDppc09uT3ZlcmxheU1hc2s7XCIpXG4gIH07XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmltcG9ydCB7IGV1aVNoYWRvdyB9IGZyb20gJy4uLy4uL3RoZW1lcy9hbXN0ZXJkYW0vZ2xvYmFsX3N0eWxpbmcvbWl4aW5zJztcbmV4cG9ydCB2YXIgZXVpSW1hZ2VTdHlsZXMgPSBmdW5jdGlvbiBldWlJbWFnZVN0eWxlcyhldWlUaGVtZUNvbnRleHQpIHtcbiAgcmV0dXJuIHtcbiAgICBldWlJbWFnZTogLyojX19QVVJFX18qL2NzcyhcInZlcnRpY2FsLWFsaWduOm1pZGRsZTtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzEwMCUnKSwgXCI7JixbY2xhc3MqPSdldWlUZXh0J10gJntcIiwgbG9naWNhbENTUygnbWFyZ2luLWJvdHRvbScsIDApLCBcIjt9O2xhYmVsOmV1aUltYWdlO1wiKSxcbiAgICAvLyBWYXJpYXRpb25zXG4gICAgaXNGdWxsU2NyZWVuOiAvKiNfX1BVUkVfXyovY3NzKFwicG9zaXRpb246cmVsYXRpdmU7XCIsIGxvZ2ljYWxDU1MoJ21heC1oZWlnaHQnLCAnODB2aCcpLCBcIjtcIiwgbG9naWNhbENTUygnbWF4LXdpZHRoJywgJzgwdncnKSwgXCI7O2xhYmVsOmlzRnVsbFNjcmVlbjtcIiksXG4gICAgaGFzU2hhZG93OiAvKiNfX1BVUkVfXyovY3NzKGV1aVNoYWRvdyhldWlUaGVtZUNvbnRleHQsICdzJyksIFwiOztsYWJlbDpoYXNTaGFkb3c7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgLy8gVGhlc2Ugc2l6ZXMgYXJlIG1vc3RseSBzdWdnZXN0aW9ucy4gRG9uJ3QgbG9vayB0b28gaGFyZCBmb3IgbWVhbmluZyBpbiB0aGVpciB2YWx1ZXMuXG4gICAgLy8gU2l6ZSBpcyBhcHBsaWVkIHRvIHRoZSBpbWFnZSwgcmF0aGVyIHRoYW4gdGhlIHdyYXBwZXIgZmlndXJlIHRvIHdvcmsgYmV0dGVyIHdpdGggZmxvYXRzXG4gICAgczogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcxMDBweCcpLCBcIjs7bGFiZWw6cztcIiksXG4gICAgbTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICcyMDBweCcpLCBcIjs7bGFiZWw6bTtcIiksXG4gICAgbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICczNjBweCcpLCBcIjs7bGFiZWw6bDtcIiksXG4gICAgeGw6IC8qI19fUFVSRV9fKi9jc3MobG9naWNhbENTUygnd2lkdGgnLCAnNjAwcHgnKSwgXCI7O2xhYmVsOnhsO1wiKSxcbiAgICBvcmlnaW5hbDogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICdhdXRvJyksIFwiOztsYWJlbDpvcmlnaW5hbDtcIiksXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIiksXG4gICAgY3VzdG9tU2l6ZTogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCd3aWR0aCcsICdhdXRvJyksIFwiOztsYWJlbDpjdXN0b21TaXplO1wiKVxuICB9O1xufTsiLCAiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRm9jdXNUcmFwIH0gZnJvbSAnLi4vZm9jdXNfdHJhcCc7XG5pbXBvcnQgeyBFdWlPdmVybGF5TWFzayB9IGZyb20gJy4uL292ZXJsYXlfbWFzayc7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyB1c2VFdWlUaGVtZSwga2V5cyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IHVzZUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlclN0eWxlcyB9IGZyb20gJy4vaW1hZ2VfZnVsbHNjcmVlbl93cmFwcGVyLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUJ1dHRvbiB9IGZyb20gJy4vaW1hZ2VfYnV0dG9uJztcbmltcG9ydCB7IGV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyB9IGZyb20gJy4vaW1hZ2VfYnV0dG9uLnN0eWxlcyc7XG5pbXBvcnQgeyBFdWlJbWFnZUNhcHRpb24gfSBmcm9tICcuL2ltYWdlX2NhcHRpb24nO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciA9IGZ1bmN0aW9uIEV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIoX3JlZikge1xuICB2YXIgYWx0ID0gX3JlZi5hbHQsXG4gICAgICBoYXNTaGFkb3cgPSBfcmVmLmhhc1NoYWRvdyxcbiAgICAgIGNhcHRpb24gPSBfcmVmLmNhcHRpb24sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBzZXRJc0Z1bGxTY3JlZW4gPSBfcmVmLnNldElzRnVsbFNjcmVlbixcbiAgICAgIHdyYXBwZXJQcm9wcyA9IF9yZWYud3JhcHBlclByb3BzLFxuICAgICAgaXNGdWxsV2lkdGggPSBfcmVmLmlzRnVsbFdpZHRoLFxuICAgICAgZnVsbFNjcmVlbkljb25Db2xvciA9IF9yZWYuZnVsbFNjcmVlbkljb25Db2xvcjtcbiAgdmFyIGV1aVRoZW1lID0gdXNlRXVpVGhlbWUoKTtcbiAgdmFyIHN0eWxlcyA9IGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMoZXVpVGhlbWUpO1xuICB2YXIgY3NzU3R5bGVzID0gW3N0eWxlcy5ldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyXTtcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlJbWFnZUZ1bGxTY3JlZW5XcmFwcGVyJywgd3JhcHBlclByb3BzICYmIHdyYXBwZXJQcm9wcy5jbGFzc05hbWUpO1xuXG4gIHZhciBvbktleURvd24gPSBmdW5jdGlvbiBvbktleURvd24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkVTQ0FQRSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY2xvc2VGdWxsU2NyZWVuKCk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBjbG9zZUZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBjbG9zZUZ1bGxTY3JlZW4oKSB7XG4gICAgc2V0SXNGdWxsU2NyZWVuKGZhbHNlKTtcbiAgfTtcblxuICB2YXIgX3VzZUlubmVyVGV4dCA9IHVzZUlubmVyVGV4dCgpLFxuICAgICAgX3VzZUlubmVyVGV4dDIgPSBfc2xpY2VkVG9BcnJheShfdXNlSW5uZXJUZXh0LCAyKSxcbiAgICAgIG9wdGlvbmFsQ2FwdGlvblJlZiA9IF91c2VJbm5lclRleHQyWzBdLFxuICAgICAgb3B0aW9uYWxDYXB0aW9uVGV4dCA9IF91c2VJbm5lclRleHQyWzFdO1xuXG4gIHZhciBpY29uU3R5bGVzID0gZXVpSW1hZ2VCdXR0b25JY29uU3R5bGVzKGV1aVRoZW1lKTtcbiAgdmFyIGNzc0ljb25TdHlsZXMgPSBbaWNvblN0eWxlcy5ldWlJbWFnZUJ1dHRvbl9faWNvbiwgaWNvblN0eWxlcy5jbG9zZUZ1bGxTY3JlZW5dO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlPdmVybGF5TWFzaywge1xuICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJmdWxsU2NyZWVuT3ZlcmxheU1hc2tcIixcbiAgICBvbkNsaWNrOiBjbG9zZUZ1bGxTY3JlZW5cbiAgfSwgX19fRW1vdGlvbkpTWChFdWlGb2N1c1RyYXAsIHtcbiAgICBjbGlja091dHNpZGVEaXNhYmxlczogdHJ1ZVxuICB9LCBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwiZmlndXJlXCIsIF9leHRlbmRzKHtcbiAgICBcImFyaWEtbGFiZWxcIjogb3B0aW9uYWxDYXB0aW9uVGV4dFxuICB9LCB3cmFwcGVyUHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgY3NzOiBjc3NTdHlsZXNcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpSW1hZ2VCdXR0b24sIHtcbiAgICBoYXNBbHQ6ICEhYWx0LFxuICAgIGhhc1NoYWRvdzogaGFzU2hhZG93LFxuICAgIG9uQ2xpY2s6IGNsb3NlRnVsbFNjcmVlbixcbiAgICBvbktleURvd246IG9uS2V5RG93bixcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZGVhY3RpdmF0ZUZ1bGxTY3JlZW5CdXR0b25cIixcbiAgICBpc0Z1bGxTY3JlZW46IHRydWUsXG4gICAgaXNGdWxsV2lkdGg6IGlzRnVsbFdpZHRoLFxuICAgIGZ1bGxTY3JlZW5JY29uQ29sb3I6IGZ1bGxTY3JlZW5JY29uQ29sb3JcbiAgfSwgY2hpbGRyZW4pLCBfX19FbW90aW9uSlNYKEV1aUltYWdlQ2FwdGlvbiwge1xuICAgIGNhcHRpb246IGNhcHRpb24sXG4gICAgcmVmOiBvcHRpb25hbENhcHRpb25SZWYsXG4gICAgaXNPbk92ZXJsYXlNYXNrOiB0cnVlXG4gIH0pKSwgX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgdHlwZTogXCJmdWxsU2NyZWVuRXhpdFwiLFxuICAgIGNvbG9yOiBcImdob3N0XCIsXG4gICAgY3NzOiBjc3NJY29uU3R5bGVzXG4gIH0pKSkpO1xufTtcbkV1aUltYWdlRnVsbFNjcmVlbldyYXBwZXIucHJvcFR5cGVzID0ge1xuICBpc0Z1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgc2V0SXNGdWxsU2NyZWVuOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59OyIsICJ2YXIgX3RlbXBsYXRlT2JqZWN0O1xuXG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKHN0cmluZ3MsIHJhdykgeyBpZiAoIXJhdykgeyByYXcgPSBzdHJpbmdzLnNsaWNlKDApOyB9IHJldHVybiBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0cmluZ3MsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHJhdykgfSB9KSk7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCB7IGNzcywga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgbG9naWNhbENTUywgbG9naWNhbFRleHRBbGlnbkNTUywgZXVpQ2FuQW5pbWF0ZSB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nJztcbmV4cG9ydCB2YXIgZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlclN0eWxlcyA9IGZ1bmN0aW9uIGV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXJTdHlsZXMoZXVpVGhlbWVDb250ZXh0KSB7XG4gIHZhciBldWlUaGVtZSA9IGV1aVRoZW1lQ29udGV4dC5ldWlUaGVtZTtcbiAgcmV0dXJuIHtcbiAgICAvLyBCYXNlXG4gICAgZXVpSW1hZ2VGdWxsc2NyZWVuV3JhcHBlcjogLyojX19QVVJFX18qL2Nzcyhsb2dpY2FsQ1NTKCdtYXgtaGVpZ2h0JywgJzgwdmgnKSwgXCI7XCIsIGxvZ2ljYWxDU1MoJ21heC13aWR0aCcsICc4MHZ3JyksIFwiO1wiLCBsb2dpY2FsVGV4dEFsaWduQ1NTKCdjZW50ZXInKSwgXCI7bGluZS1oZWlnaHQ6MDtcIiwgZXVpQ2FuQW5pbWF0ZSwgXCJ7YW5pbWF0aW9uOlwiLCBldWlJbWFnZUZ1bGxTY3JlZW4oZXVpVGhlbWUuc2l6ZS54eHh4bCksIFwiIFwiLCBldWlUaGVtZS5hbmltYXRpb24uZXh0cmFTbG93LCBcIiBcIiwgZXVpVGhlbWUuYW5pbWF0aW9uLmJvdW5jZSwgXCI7fSY6aG92ZXIgW2NsYXNzKj0nZXVpSW1hZ2VDYXB0aW9uJ117dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9O2xhYmVsOmV1aUltYWdlRnVsbHNjcmVlbldyYXBwZXI7XCIpLFxuICAgIC8vIFNpemVzXG4gICAgZnVsbFdpZHRoOiAvKiNfX1BVUkVfXyovY3NzKGxvZ2ljYWxDU1MoJ3dpZHRoJywgJzEwMCUnKSwgXCI7O2xhYmVsOmZ1bGxXaWR0aDtcIilcbiAgfTtcbn07XG5cbnZhciBldWlJbWFnZUZ1bGxTY3JlZW4gPSBmdW5jdGlvbiBldWlJbWFnZUZ1bGxTY3JlZW4oc2l6ZSkge1xuICByZXR1cm4ga2V5ZnJhbWVzKF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKFwiLCBcIik7XFxuICB9XFxuXFxuICAxMDAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgfVxcblwiXSkpLCBzaXplKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5leHBvcnQgdmFyIFNJWkVTID0gWydzJywgJ20nLCAnbCcsICd4bCcsICdmdWxsV2lkdGgnLCAnb3JpZ2luYWwnXTtcbnZhciBGTE9BVFMgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbnZhciBNQVJHSU5TID0gWydzJywgJ20nLCAnbCcsICd4bCddOyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEV1aUdsb2JhbFN0eWxlcyB9IGZyb20gJy4uLy4uL2dsb2JhbF9zdHlsaW5nL3Jlc2V0L2dsb2JhbF9zdHlsZXMnO1xuaW1wb3J0IHsgRXVpVXRpbGl0eUNsYXNzZXMgfSBmcm9tICcuLi8uLi9nbG9iYWxfc3R5bGluZy91dGlsaXR5L3V0aWxpdHknO1xuaW1wb3J0IHsgRXVpVGhlbWVQcm92aWRlciwgQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVRoZW1lQW1zdGVyZGFtIH0gZnJvbSAnLi4vLi4vdGhlbWVzJztcbmltcG9ydCB7IEV1aUNhY2hlUHJvdmlkZXIgfSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBpc0Vtb3Rpb25DYWNoZU9iamVjdCA9IGZ1bmN0aW9uIGlzRW1vdGlvbkNhY2hlT2JqZWN0KG9iaikge1xuICByZXR1cm4gb2JqLmhhc093blByb3BlcnR5KCdrZXknKTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpUHJvdmlkZXIgPSBmdW5jdGlvbiBFdWlQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBfcmVmJHRoZW1lID0gX3JlZi50aGVtZSxcbiAgICAgIHRoZW1lID0gX3JlZiR0aGVtZSA9PT0gdm9pZCAwID8gRXVpVGhlbWVBbXN0ZXJkYW0gOiBfcmVmJHRoZW1lLFxuICAgICAgX3JlZiRnbG9iYWxTdHlsZXMgPSBfcmVmLmdsb2JhbFN0eWxlcyxcbiAgICAgIEdsb2JhbHMgPSBfcmVmJGdsb2JhbFN0eWxlcyA9PT0gdm9pZCAwID8gRXVpR2xvYmFsU3R5bGVzIDogX3JlZiRnbG9iYWxTdHlsZXMsXG4gICAgICBfcmVmJHV0aWxpdHlDbGFzc2VzID0gX3JlZi51dGlsaXR5Q2xhc3NlcyxcbiAgICAgIFV0aWxpdGllcyA9IF9yZWYkdXRpbGl0eUNsYXNzZXMgPT09IHZvaWQgMCA/IEV1aVV0aWxpdHlDbGFzc2VzIDogX3JlZiR1dGlsaXR5Q2xhc3NlcyxcbiAgICAgIGNvbG9yTW9kZSA9IF9yZWYuY29sb3JNb2RlLFxuICAgICAgbW9kaWZ5ID0gX3JlZi5tb2RpZnksXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHZhciBkZWZhdWx0Q2FjaGU7XG4gIHZhciBnbG9iYWxDYWNoZTtcbiAgdmFyIHV0aWxpdHlDYWNoZTtcblxuICBpZiAoY2FjaGUpIHtcbiAgICBpZiAoaXNFbW90aW9uQ2FjaGVPYmplY3QoY2FjaGUpKSB7XG4gICAgICBkZWZhdWx0Q2FjaGUgPSBjYWNoZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmYXVsdENhY2hlID0gY2FjaGUuZGVmYXVsdDtcbiAgICAgIGdsb2JhbENhY2hlID0gY2FjaGUuZ2xvYmFsO1xuICAgICAgdXRpbGl0eUNhY2hlID0gY2FjaGUudXRpbGl0eTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDYWNoZVByb3ZpZGVyLCB7XG4gICAgY2FjaGU6IGRlZmF1bHRDYWNoZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aVRoZW1lUHJvdmlkZXIsIHtcbiAgICB0aGVtZTogdGhlbWUgIT09IG51bGwgJiYgdGhlbWUgIT09IHZvaWQgMCA/IHRoZW1lIDogdW5kZWZpbmVkLFxuICAgIGNvbG9yTW9kZTogY29sb3JNb2RlLFxuICAgIG1vZGlmeTogbW9kaWZ5XG4gIH0sIHRoZW1lICYmIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpQ2FjaGVQcm92aWRlciwge1xuICAgIGNhY2hlOiBnbG9iYWxDYWNoZSxcbiAgICBjaGlsZHJlbjogR2xvYmFscyAmJiBfX19FbW90aW9uSlNYKEdsb2JhbHMsIG51bGwpXG4gIH0pLCBfX19FbW90aW9uSlNYKEV1aUNhY2hlUHJvdmlkZXIsIHtcbiAgICBjYWNoZTogdXRpbGl0eUNhY2hlLFxuICAgIGNoaWxkcmVuOiBVdGlsaXRpZXMgJiYgX19fRW1vdGlvbkpTWChVdGlsaXRpZXMsIG51bGwpXG4gIH0pKSwgX19fRW1vdGlvbkpTWChDdXJyZW50RXVpQnJlYWtwb2ludFByb3ZpZGVyLCBudWxsLCBjaGlsZHJlbikpKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgR2xvYmFsLCBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBldWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hY2Nlc3NpYmlsaXR5L3NjcmVlbl9yZWFkZXJfb25seS9zY3JlZW5fcmVhZGVyX29ubHkuc3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZ2xvYmFsU3R5bGVzID0gLyojX19QVVJFX18qL2NzcyhcIi5ldWlTY3JlZW5SZWFkZXJPbmx5e1wiLCBldWlTY3JlZW5SZWFkZXJPbmx5KCksIFwiO307bGFiZWw6Z2xvYmFsU3R5bGVzO1wiKTtcbmV4cG9ydCB2YXIgRXVpVXRpbGl0eUNsYXNzZXMgPSBmdW5jdGlvbiBFdWlVdGlsaXR5Q2xhc3NlcygpIHtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXNcbiAgfSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENhY2hlUHJvdmlkZXIgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlDYWNoZVByb3ZpZGVyID0gZnVuY3Rpb24gRXVpQ2FjaGVQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiBjaGlsZHJlbiAmJiBjYWNoZSA/IF9fX0Vtb3Rpb25KU1goQ2FjaGVQcm92aWRlciwge1xuICAgIHZhbHVlOiBjYWNoZVxuICB9LCBjaGlsZHJlbikgOiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbik7XG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcIml0ZW1zXCIsIFwiZGlzcGxheVwiLCBcImV4cGFuZEJ5RGVmYXVsdFwiLCBcInNob3dFeHBhbnNpb25BcnJvd3NcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyBrZXlzLCBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBFdWlJbm5lclRleHQgfSBmcm9tICcuLi9pbm5lcl90ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgRXVpVHJlZVZpZXdDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoJycpO1xuXG5mdW5jdGlvbiBoYXNBcmlhTGFiZWwoeCkge1xuICByZXR1cm4geC5oYXNPd25Qcm9wZXJ0eSgnYXJpYS1sYWJlbCcpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmVlSWQocHJvcElkLCBjb250ZXh0SWQsIGlkR2VuZXJhdG9yKSB7XG4gIHJldHVybiBwcm9wSWQgIT09IG51bGwgJiYgcHJvcElkICE9PSB2b2lkIDAgPyBwcm9wSWQgOiBjb250ZXh0SWQgPT09ICcnID8gaWRHZW5lcmF0b3IoKSA6IGNvbnRleHRJZDtcbn1cblxudmFyIGRpc3BsYXlUb0NsYXNzTmFtZU1hcCA9IHtcbiAgZGVmYXVsdDogbnVsbCxcbiAgY29tcHJlc3NlZDogJ2V1aVRyZWVWaWV3LS1jb21wcmVzc2VkJ1xufTtcbmV4cG9ydCB2YXIgRXVpVHJlZVZpZXcgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVRyZWVWaWV3LCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVRyZWVWaWV3KTtcblxuICBmdW5jdGlvbiBFdWlUcmVlVmlldygpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpVHJlZVZpZXcpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0cmVlSWRHZW5lcmF0b3JcIiwgaHRtbElkR2VuZXJhdG9yKCdldWlUcmVlVmlldycpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpc05lc3RlZFwiLCAhIV90aGlzLmNvbnRleHQpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInN0YXRlXCIsIHtcbiAgICAgIG9wZW5JdGVtczogX3RoaXMucHJvcHMuZXhwYW5kQnlEZWZhdWx0ID8gX3RoaXMucHJvcHMuaXRlbXMubWFwKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBpZCA9IF9yZWYuaWQsXG4gICAgICAgICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gICAgICAgIHJldHVybiBjaGlsZHJlbiA/IGlkIDogbnVsbDtcbiAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPSBudWxsO1xuICAgICAgfSkgOiBfdGhpcy5wcm9wcy5pdGVtcy5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBpZCA9IF9yZWYyLmlkLFxuICAgICAgICAgICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICAgICAgICAgIGlzRXhwYW5kZWQgPSBfcmVmMi5pc0V4cGFuZGVkO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgaXNFeHBhbmRlZCA/IGlkIDogbnVsbDtcbiAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCAhPSBudWxsO1xuICAgICAgfSksXG4gICAgICBhY3RpdmVJdGVtOiAnJyxcbiAgICAgIHRyZWVJRDogZ2V0VHJlZUlkKF90aGlzLnByb3BzLmlkLCBfdGhpcy5jb250ZXh0LCBfdGhpcy50cmVlSWRHZW5lcmF0b3IpLFxuICAgICAgZXhwYW5kQ2hpbGROb2RlczogX3RoaXMucHJvcHMuZXhwYW5kQnlEZWZhdWx0IHx8IGZhbHNlXG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYnV0dG9uUmVmXCIsIFtdKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRCdXR0b25SZWZcIiwgZnVuY3Rpb24gKHJlZiwgaW5kZXgpIHtcbiAgICAgIF90aGlzLmJ1dHRvblJlZltpbmRleF0gPSByZWY7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFuZGxlTm9kZUNsaWNrXCIsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgaWdub3JlQ2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gICAgICB2YXIgaW5kZXggPSBfdGhpcy5zdGF0ZS5vcGVuSXRlbXMuaW5kZXhPZihub2RlLmlkKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBleHBhbmRDaGlsZE5vZGVzOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIG5vZGUuaXNFeHBhbmRlZCA9ICFub2RlLmlzRXhwYW5kZWQ7XG5cbiAgICAgIGlmICghaWdub3JlQ2FsbGJhY2sgJiYgbm9kZS5jYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuY2FsbGJhY2soKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGlzLmlzTm9kZU9wZW4obm9kZSkpIHtcbiAgICAgICAgLy8gaWYgdGhlIG5vZGUgaXMgcGFydCBvZiBvcGVuSXRlbXNbXSB0aGVuIHJlbW92ZSBpdFxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgb3Blbkl0ZW1zOiBfdGhpcy5zdGF0ZS5vcGVuSXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gaSAhPT0gaW5kZXg7XG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiB0aGUgbm9kZSBpc24ndCBwYXJ0IG9mIG9wZW5JdGVtc1tdIHRoZW4gYWRkIGl0XG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3Blbkl0ZW1zOiBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHByZXZTdGF0ZS5vcGVuSXRlbXMpLCBbbm9kZS5pZF0pLFxuICAgICAgICAgICAgYWN0aXZlSXRlbTogbm9kZS5pZFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImlzTm9kZU9wZW5cIiwgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zdGF0ZS5vcGVuSXRlbXMuaW5jbHVkZXMobm9kZS5pZCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25LZXlEb3duXCIsIGZ1bmN0aW9uIChldmVudCwgbm9kZSkge1xuICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0RPV046XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5vZGVCdXR0b25zID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtdGVzdC1zdWJqPVxcXCJldWlUcmVlVmlld0J1dHRvbi1cIi5jb25jYXQoX3RoaXMuc3RhdGUudHJlZUlELCBcIlxcXCJdXCIpKSk7XG4gICAgICAgICAgICB2YXIgY3VycmVudEluZGV4ID0gbm9kZUJ1dHRvbnMuaW5kZXhPZihldmVudC5jdXJyZW50VGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgIHZhciBuZXh0QnV0dG9uID0gbm9kZUJ1dHRvbnNbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgICAgICAgICAgaWYgKG5leHRCdXR0b24pIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIG5leHRCdXR0b24uZm9jdXMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX1VQOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbm9kZUJ1dHRvbnMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS10ZXN0LXN1Ymo9XFxcImV1aVRyZWVWaWV3QnV0dG9uLVwiLmNvbmNhdChfdGhpcy5zdGF0ZS50cmVlSUQsIFwiXFxcIl1cIikpKTtcblxuICAgICAgICAgICAgdmFyIF9jdXJyZW50SW5kZXggPSBfbm9kZUJ1dHRvbnMuaW5kZXhPZihldmVudC5jdXJyZW50VGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKF9jdXJyZW50SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICB2YXIgcHJldkJ1dHRvbiA9IF9ub2RlQnV0dG9uc1tfY3VycmVudEluZGV4ICsgLTFdO1xuXG4gICAgICAgICAgICAgIGlmIChwcmV2QnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBwcmV2QnV0dG9uLmZvY3VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19SSUdIVDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzTm9kZU9wZW4obm9kZSkpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgICAgX3RoaXMuaGFuZGxlTm9kZUNsaWNrKG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBrZXlzLkFSUk9XX0xFRlQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKF90aGlzLmlzTm9kZU9wZW4obm9kZSkpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgICAgX3RoaXMuaGFuZGxlTm9kZUNsaWNrKG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2hpbGRyZW5LZXlkb3duXCIsIGZ1bmN0aW9uIChldmVudCwgaW5kZXgpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuQVJST1dfTEVGVCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBfdGhpcy5idXR0b25SZWZbaW5kZXhdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpVHJlZVZpZXcsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZFVwZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5pZCAhPT0gcHJldlByb3BzLmlkKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1kaWQtdXBkYXRlLXNldC1zdGF0ZVxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICB0cmVlSUQ6IGdldFRyZWVJZCh0aGlzLnByb3BzLmlkLCB0aGlzLmNvbnRleHQsIHRoaXMudHJlZUlkR2VuZXJhdG9yKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMuaXRlbXMsXG4gICAgICAgICAgX3RoaXMkcHJvcHMkZGlzcGxheSA9IF90aGlzJHByb3BzLmRpc3BsYXksXG4gICAgICAgICAgZGlzcGxheSA9IF90aGlzJHByb3BzJGRpc3BsYXkgPT09IHZvaWQgMCA/ICdkZWZhdWx0JyA6IF90aGlzJHByb3BzJGRpc3BsYXksXG4gICAgICAgICAgZXhwYW5kQnlEZWZhdWx0ID0gX3RoaXMkcHJvcHMuZXhwYW5kQnlEZWZhdWx0LFxuICAgICAgICAgIHNob3dFeHBhbnNpb25BcnJvd3MgPSBfdGhpcyRwcm9wcy5zaG93RXhwYW5zaW9uQXJyb3dzLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7IC8vIENvbXB1dGVkIGNsYXNzTmFtZXNcblxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRyZWVWaWV3JywgZGlzcGxheSA/IGRpc3BsYXlUb0NsYXNzTmFtZU1hcFtkaXNwbGF5XSA6IG51bGwsIHtcbiAgICAgICAgJ2V1aVRyZWVWaWV3LS13aXRoQXJyb3dzJzogc2hvd0V4cGFuc2lvbkFycm93c1xuICAgICAgfSwgY2xhc3NOYW1lKTtcbiAgICAgIHZhciBpbnN0cnVjdGlvbnNJZCA9IFwiXCIuY29uY2F0KHRoaXMuc3RhdGUudHJlZUlELCBcIi0taW5zdHJ1Y3Rpb25cIik7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUcmVlVmlld0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IHRoaXMuc3RhdGUudHJlZUlEXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVRleHQsIHtcbiAgICAgICAgc2l6ZTogZGlzcGxheSA9PT0gJ2NvbXByZXNzZWQnID8gJ3MnIDogJ20nLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpVHJlZVZpZXdfX3dyYXBwZXJcIlxuICAgICAgfSwgIXRoaXMuaXNOZXN0ZWQgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRyZWVWaWV3Lmxpc3ROYXZpZ2F0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiWW91IGNhbiBxdWlja2x5IG5hdmlnYXRlIHRoaXMgbGlzdCB1c2luZyBhcnJvdyBrZXlzLlwiXG4gICAgICB9LCBmdW5jdGlvbiAobGlzdE5hdmlnYXRpb25JbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcInBcIiwge1xuICAgICAgICAgIGlkOiBpbnN0cnVjdGlvbnNJZFxuICAgICAgICB9LCBsaXN0TmF2aWdhdGlvbkluc3RydWN0aW9ucykpO1xuICAgICAgfSksIF9fX0Vtb3Rpb25KU1goXCJ1bFwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgaWQ6ICF0aGlzLmlzTmVzdGVkID8gdGhpcy5zdGF0ZS50cmVlSUQgOiB1bmRlZmluZWQsXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiAhdGhpcy5pc05lc3RlZCA/IGluc3RydWN0aW9uc0lkIDogdW5kZWZpbmVkXG4gICAgICB9LCByZXN0KSwgaXRlbXMubWFwKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICB2YXIgYnV0dG9uSWQgPSBub2RlLmlkO1xuXG4gICAgICAgIHZhciB3cmFwcGluZ0lkID0gX3RoaXMyLnRyZWVJZEdlbmVyYXRvcihidXR0b25JZCk7XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSW5uZXJUZXh0LCB7XG4gICAgICAgICAga2V5OiBub2RlLmlkICsgaW5kZXgsXG4gICAgICAgICAgZmFsbGJhY2s6IHR5cGVvZiBub2RlLmxhYmVsID09PSAnc3RyaW5nJyA/IG5vZGUubGFiZWwgOiAnJ1xuICAgICAgICB9LCBmdW5jdGlvbiAocmVmLCBpbm5lclRleHQpIHtcbiAgICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICBrZXk6IG5vZGUuaWQgKyBpbmRleCxcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVRyZWVWaWV3LmFyaWFMYWJlbFwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJ7bm9kZUxhYmVsfSBjaGlsZCBvZiB7YXJpYUxhYmVsfVwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIG5vZGVMYWJlbDogaW5uZXJUZXh0LFxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IGhhc0FyaWFMYWJlbChyZXN0KSA/IHJlc3RbJ2FyaWEtbGFiZWwnXSA6ICcnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZnVuY3Rpb24gKGFyaWFMYWJlbCkge1xuICAgICAgICAgICAgdmFyIGxhYmVsID0gaGFzQXJpYUxhYmVsKHJlc3QpID8ge1xuICAgICAgICAgICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbFxuICAgICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IFwiXCIuY29uY2F0KGJ1dHRvbklkLCBcIiBcIikuY29uY2F0KHJlc3RbJ2FyaWEtbGFiZWxsZWRieSddKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBub2RlQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRyZWVWaWV3X19ub2RlJywgZGlzcGxheSA/IGRpc3BsYXlUb0NsYXNzTmFtZU1hcFtkaXNwbGF5XSA6IG51bGwsIHtcbiAgICAgICAgICAgICAgJ2V1aVRyZWVWaWV3X19ub2RlLS1leHBhbmRlZCc6IF90aGlzMi5pc05vZGVPcGVuKG5vZGUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBub2RlQnV0dG9uQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRyZWVWaWV3X19ub2RlSW5uZXInLCBzaG93RXhwYW5zaW9uQXJyb3dzICYmIG5vZGUuY2hpbGRyZW4gPyAnZXVpVHJlZVZpZXdfX25vZGVJbm5lci0td2l0aEFycm93cycgOiBudWxsLCBfdGhpczIuc3RhdGUuYWN0aXZlSXRlbSA9PT0gbm9kZS5pZCA/ICdldWlUcmVlVmlld19fbm9kZS0tYWN0aXZlJyA6IG51bGwsIG5vZGUuY2xhc3NOYW1lID8gbm9kZS5jbGFzc05hbWUgOiBudWxsKTtcbiAgICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKFwibGlcIiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IG5vZGVDbGFzc2VzXG4gICAgICAgICAgICB9LCBfX19FbW90aW9uSlNYKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgaWQ6IGJ1dHRvbklkLFxuICAgICAgICAgICAgICBcImFyaWEtY29udHJvbHNcIjogd3JhcHBpbmdJZCxcbiAgICAgICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF90aGlzMi5pc05vZGVPcGVuKG5vZGUpLFxuICAgICAgICAgICAgICByZWY6IGZ1bmN0aW9uIHJlZihfcmVmMykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuc2V0QnV0dG9uUmVmKF9yZWYzLCBpbmRleCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiZGF0YS10ZXN0LXN1YmpcIjogXCJldWlUcmVlVmlld0J1dHRvbi1cIi5jb25jYXQoX3RoaXMyLnN0YXRlLnRyZWVJRCksXG4gICAgICAgICAgICAgIG9uS2V5RG93bjogZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5vbktleURvd24oZXZlbnQsIG5vZGUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlTm9kZUNsaWNrKG5vZGUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IG5vZGVCdXR0b25DbGFzc2VzXG4gICAgICAgICAgICB9LCBzaG93RXhwYW5zaW9uQXJyb3dzICYmIG5vZGUuY2hpbGRyZW4gPyBfX19FbW90aW9uSlNYKEV1aUljb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRyZWVWaWV3X19leHBhbnNpb25BcnJvd1wiLFxuICAgICAgICAgICAgICBzaXplOiBkaXNwbGF5ID09PSAnY29tcHJlc3NlZCcgPyAncycgOiAnbScsXG4gICAgICAgICAgICAgIHR5cGU6IF90aGlzMi5pc05vZGVPcGVuKG5vZGUpID8gJ2Fycm93RG93bicgOiAnYXJyb3dSaWdodCdcbiAgICAgICAgICAgIH0pIDogbnVsbCwgbm9kZS5pY29uICYmICFub2RlLnVzZUVtcHR5SWNvbiA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRyZWVWaWV3X19pY29uV3JhcHBlclwiXG4gICAgICAgICAgICB9LCBfdGhpczIuaXNOb2RlT3Blbihub2RlKSAmJiBub2RlLmljb25XaGVuRXhwYW5kZWQgPyBub2RlLmljb25XaGVuRXhwYW5kZWQgOiBub2RlLmljb24pIDogbnVsbCwgbm9kZS51c2VFbXB0eUljb24gJiYgIW5vZGUuaWNvbiA/IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVRyZWVWaWV3X19pY29uUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgfSkgOiBudWxsLCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgIHJlZjogcmVmLFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpVHJlZVZpZXdfX25vZGVMYWJlbFwiXG4gICAgICAgICAgICB9LCBub2RlLmxhYmVsKSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgICAgICAgICBpZDogd3JhcHBpbmdJZCxcbiAgICAgICAgICAgICAgb25LZXlEb3duOiBmdW5jdGlvbiBvbktleURvd24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLm9uQ2hpbGRyZW5LZXlkb3duKGV2ZW50LCBpbmRleCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG5vZGUuY2hpbGRyZW4gJiYgX3RoaXMyLmlzTm9kZU9wZW4obm9kZSkgPyBfX19FbW90aW9uSlNYKEV1aVRyZWVWaWV3LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICAgIGl0ZW1zOiBub2RlLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxuICAgICAgICAgICAgICBzaG93RXhwYW5zaW9uQXJyb3dzOiBzaG93RXhwYW5zaW9uQXJyb3dzLFxuICAgICAgICAgICAgICBleHBhbmRCeURlZmF1bHQ6IF90aGlzMi5zdGF0ZS5leHBhbmRDaGlsZE5vZGVzXG4gICAgICAgICAgICB9LCBsYWJlbCkpIDogbnVsbCkpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KSkpKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXVpVHJlZVZpZXc7XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlUcmVlVmlldywgXCJjb250ZXh0VHlwZVwiLCBFdWlUcmVlVmlld0NvbnRleHQpO1xuXG5FdWlUcmVlVmlldy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKiBBbiBhcnJheSBvZiBFdWlUcmVlVmlld05vZGVzXG4gICAgICAgKi9cbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIEFuIGFycmF5IG9mIEV1aVRyZWVWaWV3Tm9kZXMgdG8gcmVuZGVyIGFzIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkKSxcblxuICAgIC8qKiBUaGUgcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBpdGVtXG4gICAgICAgKi9cbiAgICBsYWJlbDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcblxuICAgIC8qKiBBIHVuaXF1ZSBJRFxuICAgICAgICovXG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAgIC8qKiBBbiBpY29uIHRvIHVzZSBvbiB0aGUgbGVmdCBvZiB0aGUgbGFiZWxcbiAgICAgICAqL1xuICAgIGljb246IFByb3BUeXBlcy5lbGVtZW50LFxuXG4gICAgLyoqIERpc3BsYXkgYSBkaWZmZXJlbnQgaWNvbiB3aGVuIHRoZSBpdGVtIGlzIGV4cGFuZGVkLlxuICAgICAgRm9yIGluc3RhbmNlLCBhbiBvcGVuIGZvbGRlciBvciBhIGRvd24gYXJyb3dcbiAgICAgICovXG4gICAgaWNvbldoZW5FeHBhbmRlZDogUHJvcFR5cGVzLmVsZW1lbnQsXG5cbiAgICAvKiogVXNlIGFuIGVtcHR5IGljb24gdG8ga2VlcCBpdGVtcyB3aXRob3V0IGFuIGljb25cbiAgICAgIGxpbmVkIHVwIHdpdGggdGhlaXIgc2libGluZ3NcbiAgICAgICovXG4gICAgdXNlRW1wdHlJY29uOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgaXRlbSBpcyBleHBhbmRlZC5cbiAgICAgICAqL1xuICAgIGlzRXhwYW5kZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqIE9wdGlvbmFsIGNsYXNzIHRvIHRocm93IG9uIHRoZSBub2RlXG4gICAgICAgKi9cbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKiogRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBpdGVtIGlzIGNsaWNrZWQuXG4gICAgICAgVGhlIG9wZW4gc3RhdGUgb2YgdGhlIGl0ZW0gd2lsbCBhbHdheXMgYmUgdG9nZ2xlZC5cbiAgICAgICAqL1xuICAgIGNhbGxiYWNrOiBQcm9wVHlwZXMuZnVuY1xuICB9KS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuXG4gIC8qKiBPcHRpb25hbGx5IHVzZSBhIHZhcmlhdGlvbiB3aXRoIHNtYWxsZXIgdGV4dCBhbmQgaWNvbiBzaXplc1xuICAgICAgICovXG4gIGRpc3BsYXk6IFByb3BUeXBlcy5vbmVPZihbXCJkZWZhdWx0XCIsIFwiY29tcHJlc3NlZFwiXSksXG5cbiAgLyoqIFNldCBhbGwgaXRlbXMgdG8gb3BlbiBvbiBpbml0aWFsIGxvYWRcbiAgICAgICAqL1xuICBleHBhbmRCeURlZmF1bHQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKiBEaXNwbGF5IGV4cGFuc2lvbiBhcnJvd3MgbmV4dCB0byBhbGwgaXRlbXNcbiAgICAgICAqIHRoYXQgY29udGFpbiBjaGlsZHJlblxuICAgICAgICovXG4gIHNob3dFeHBhbnNpb25BcnJvd3M6IFByb3BUeXBlcy5ib29sLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsbGVkYnlcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJvcHRpb25zXCIsIFwib25DaGFuZ2VcIiwgXCJvbkFjdGl2ZU9wdGlvbkNoYW5nZVwiLCBcInNlYXJjaGFibGVcIiwgXCJzZWFyY2hQcm9wc1wiLCBcInNpbmdsZVNlbGVjdGlvblwiLCBcImlzTG9hZGluZ1wiLCBcImxpc3RQcm9wc1wiLCBcInJlbmRlck9wdGlvblwiLCBcImhlaWdodFwiLCBcImFsbG93RXhjbHVzaW9uc1wiLCBcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwibG9hZGluZ01lc3NhZ2VcIiwgXCJub01hdGNoZXNNZXNzYWdlXCIsIFwiZW1wdHlNZXNzYWdlXCIsIFwiZXJyb3JNZXNzYWdlXCIsIFwiaXNQcmVGaWx0ZXJlZFwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJvbkNoYW5nZVwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcImlucHV0UmVmXCJdLFxuICAgIF9leGNsdWRlZDMgPSBbXCJhcmlhLWxhYmVsXCIsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBcImlzVmlydHVhbGl6ZWRcIiwgXCJyb3dIZWlnaHRcIl07XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIGNyZWF0ZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZVNlYXJjaCB9IGZyb20gJy4vc2VsZWN0YWJsZV9zZWFyY2gnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZU1lc3NhZ2UgfSBmcm9tICcuL3NlbGVjdGFibGVfbWVzc2FnZSc7XG5pbXBvcnQgeyBFdWlTZWxlY3RhYmxlTGlzdCB9IGZyb20gJy4vc2VsZWN0YWJsZV9saXN0JztcbmltcG9ydCB7IEV1aUxvYWRpbmdTcGlubmVyIH0gZnJvbSAnLi4vbG9hZGluZyc7XG5pbXBvcnQgeyBFdWlTcGFjZXIgfSBmcm9tICcuLi9zcGFjZXInO1xuaW1wb3J0IHsgZ2V0TWF0Y2hpbmdPcHRpb25zIH0gZnJvbSAnLi9tYXRjaGluZ19vcHRpb25zJztcbmltcG9ydCB7IGtleXMsIGh0bWxJZEdlbmVyYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlckxpdmUsIEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV1aVNlbGVjdGFibGUsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpU2VsZWN0YWJsZSk7XG5cbiAgZnVuY3Rpb24gRXVpU2VsZWN0YWJsZShwcm9wcykge1xuICAgIHZhciBfc2VhcmNoUHJvcHMkb25DaGFuZ2U7XG5cbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpU2VsZWN0YWJsZSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJpbnB1dFJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjb250YWluZXJSZWZcIiwgLyojX19QVVJFX18qL2NyZWF0ZVJlZigpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvcHRpb25zTGlzdFJlZlwiLCAvKiNfX1BVUkVfXyovY3JlYXRlUmVmKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInByZXZlbnRPbkZvY3VzXCIsIGZhbHNlKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyb290SWRcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJtZXNzYWdlQ29udGVudElkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdElkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Nb3VzZURvd25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQnlwYXNzIG9uRm9jdXMgd2hlbiBhIGNsaWNrIGV2ZW50IG9yaWdpbmF0ZXMgZnJvbSB0aGlzLmNvbnRhaW5lclJlZi5cbiAgICAgIC8vIFByZXZlbnRzIG9uRm9jdXMgZnJvbSBzY3JvbGxpbmcgYXdheSBmcm9tIGEgY2xpY2tlZCBvcHRpb24gYW5kIG5lZ2F0aW5nIHRoZSBzZWxlY3Rpb24gZXZlbnQuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9ldWkvaXNzdWVzLzQxNDdcbiAgICAgIF90aGlzLnByZXZlbnRPbkZvY3VzID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkZvY3VzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcmV2ZW50T25Gb2N1cykge1xuICAgICAgICBfdGhpcy5wcmV2ZW50T25Gb2N1cyA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMubGVuZ3RoIHx8IF90aGlzLnN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RTZWxlY3RlZCA9IF90aGlzLnN0YXRlLnZpc2libGVPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24uY2hlY2tlZCAmJiAhb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaXNHcm91cExhYmVsO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaXJzdFNlbGVjdGVkID4gLTEpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBmaXJzdFNlbGVjdGVkLFxuICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMuZmluZEluZGV4KGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiAhb3B0aW9uLmRpc2FibGVkICYmICFvcHRpb24uaXNHcm91cExhYmVsO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbktleURvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgb3B0aW9uc0xpc3QgPSBfdGhpcy5vcHRpb25zTGlzdFJlZi5jdXJyZW50O1xuXG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlIGtleXMuQVJST1dfVVA6XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIF90aGlzLmluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4KC0xKTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2Uga2V5cy5BUlJPV19ET1dOOlxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICBfdGhpcy5pbmNyZW1lbnRBY3RpdmVPcHRpb25JbmRleCgxKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBGb3Igbm9uLXNlYXJjaGFibGUgaW5zdGFuY2VzLCBTUEFDRSBpbnRlcmFjdGlvbiBzaG91bGQgYWxpZ24gd2l0aFxuICAgICAgICAvLyB0aGUgdXNlciBleHBlY3RhdGlvbiBvZiBzZWxlY3Rpb24gdG9nZ2xpbmcgKGUuZy4sIGlucHV0W3R5cGU9Y2hlY2tib3hdKS5cbiAgICAgICAgLy8gRU5URVIgaXMgYWxzbyBhIHZhbGlkIHNlbGVjdGlvbiBtZWNoYW5pc20gaW4gdGhpcyBjYXNlLlxuXG4gICAgICAgIGNhc2Uga2V5cy5FTlRFUjpcbiAgICAgICAgY2FzZSBrZXlzLlNQQUNFOlxuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5zZWFyY2hhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkb3B0aW9uc0xpc3RSZWYkLCBfdGhpcyRvcHRpb25zTGlzdFJlZiQyO1xuXG4gICAgICAgICAgICAvLyBGb3Igc2VhcmNoYWJsZSBpbnN0YW5jZXMsIFNQQUNFIGlzIHJlc2VydmVkIGFzIGEgY2hhcmFjdGVyIGZvciBmaWx0ZXJpbmdcbiAgICAgICAgICAgIC8vIHZpYSB0aGUgaW5wdXQgYm94LCBhbmQgYXMgc3VjaCBvbmx5IEVOVEVSIHdpbGwgdG9nZ2xlIHNlbGVjdGlvbi5cbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IF90aGlzLmlucHV0UmVmICYmIGV2ZW50LmtleSA9PT0ga2V5cy5TUEFDRSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IC8vIENoZWNrIGlmIHRoZSB1c2VyIGlzIGludGVyYWN0aW5nIHdpdGggc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlXG4gICAgICAgICAgICAvLyBzZWFyY2hib3ggb3Igc2VsZWN0aW9uIGxpc3QuIElmIG5vdCwgdGhlIHVzZXIgaXMgYXR0ZW1wdGluZyB0b1xuICAgICAgICAgICAgLy8gaW50ZXJhY3Qgd2l0aCBhbiBpbnRlcm5hbCBidXR0b24gc3VjaCBhcyB0aGUgY2xlYXIgYnV0dG9uLFxuICAgICAgICAgICAgLy8gYW5kIHRoZSBldmVudCBzaG91bGQgbm90IGJlIGFsdGVyZWQuXG5cblxuICAgICAgICAgICAgaWYgKCEoZXZlbnQudGFyZ2V0ID09PSBfdGhpcy5pbnB1dFJlZiB8fCBldmVudC50YXJnZXQgPT09ICgoX3RoaXMkb3B0aW9uc0xpc3RSZWYkID0gX3RoaXMub3B0aW9uc0xpc3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3RoaXMkb3B0aW9uc0xpc3RSZWYkMiA9IF90aGlzJG9wdGlvbnNMaXN0UmVmJC5saXN0Qm94UmVmKSA9PT0gbnVsbCB8fCBfdGhpcyRvcHRpb25zTGlzdFJlZiQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zTGlzdFJlZiQyLnBhcmVudEVsZW1lbnQpKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPSBudWxsICYmIG9wdGlvbnNMaXN0KSB7XG4gICAgICAgICAgICBldmVudC5wZXJzaXN0KCk7IC8vIE5PVEU6IFRoaXMgaXMgbmVlZGVkIGZvciBSZWFjdCB2MTYgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuICAgICAgICAgICAgb3B0aW9uc0xpc3Qub25BZGRPclJlbW92ZU9wdGlvbihfdGhpcy5zdGF0ZS52aXNpYmxlT3B0aW9uc1tfdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleF0sIGV2ZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGtleXMuQUxUOlxuICAgICAgICBjYXNlIGtleXMuU0hJRlQ6XG4gICAgICAgIGNhc2Uga2V5cy5DVFJMOlxuICAgICAgICBjYXNlIGtleXMuTUVUQTpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWRcbiAgICAgICAgICB9LCBfdGhpcy5vbkZvY3VzKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImluY3JlbWVudEFjdGl2ZU9wdGlvbkluZGV4XCIsIGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBvcHRpb25zIGF2YWlsYWJsZSwgZG8gbm90aGluZy5cbiAgICAgIGlmICghX3RoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3JlZi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICAgIHZpc2libGVPcHRpb25zID0gX3JlZi52aXNpYmxlT3B0aW9ucztcbiAgICAgICAgdmFyIG5leHRBY3RpdmVPcHRpb25JbmRleDtcblxuICAgICAgICBpZiAoYWN0aXZlT3B0aW9uSW5kZXggPT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdXNlcidzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIG1lbnUsIHRoZW4gd2UnbGwgZm9jdXNcbiAgICAgICAgICAvLyBlaXRoZXIgdGhlIGZpcnN0IG9yIGxhc3QgaXRlbS5cbiAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSBhbW91bnQgPCAwID8gdmlzaWJsZU9wdGlvbnMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gYWN0aXZlT3B0aW9uSW5kZXggKyBhbW91bnQ7XG5cbiAgICAgICAgICBpZiAobmV4dEFjdGl2ZU9wdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA9PT0gdmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXh0QWN0aXZlT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBHcm91cCB0aXRsZXMgYW5kIGRpc2FibGVkIG9wdGlvbnMgYXJlIGluY2x1ZGVkIGluIG9wdGlvbiBsaXN0IGJ1dCBhcmUgbm90IHNlbGVjdGFibGVcblxuXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gMSA6IC0xO1xuXG4gICAgICAgIHdoaWxlICh2aXNpYmxlT3B0aW9uc1tuZXh0QWN0aXZlT3B0aW9uSW5kZXhdLmlzR3JvdXBMYWJlbCB8fCB2aXNpYmxlT3B0aW9uc1tuZXh0QWN0aXZlT3B0aW9uSW5kZXhdLmRpc2FibGVkKSB7XG4gICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gbmV4dEFjdGl2ZU9wdGlvbkluZGV4ICsgZGlyZWN0aW9uO1xuXG4gICAgICAgICAgaWYgKG5leHRBY3RpdmVPcHRpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIG5leHRBY3RpdmVPcHRpb25JbmRleCA9IHZpc2libGVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aXZlT3B0aW9uSW5kZXggPT09IHZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbmV4dEFjdGl2ZU9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBuZXh0QWN0aXZlT3B0aW9uSW5kZXhcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uU2VhcmNoQ2hhbmdlXCIsIGZ1bmN0aW9uIChzZWFyY2hWYWx1ZSwgdmlzaWJsZU9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyRzZWFyY2hQcm8sIF90aGlzJHByb3BzJHNlYXJjaFBybzI7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2VhcmNoVmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICB2aXNpYmxlT3B0aW9uczogdmlzaWJsZU9wdGlvbnMsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiB1bmRlZmluZWRcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLnN0YXRlLmlzRm9jdXNlZCkge1xuICAgICAgICAgIF90aGlzLm9uRm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIChfdGhpcyRwcm9wcyRzZWFyY2hQcm8gPSBfdGhpcy5wcm9wcy5zZWFyY2hQcm9wcykgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkc2VhcmNoUHJvID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3RoaXMkcHJvcHMkc2VhcmNoUHJvMiA9IF90aGlzJHByb3BzJHNlYXJjaFByby5vbkNoYW5nZSkgPT09IG51bGwgfHwgX3RoaXMkcHJvcHMkc2VhcmNoUHJvMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcHJvcHMkc2VhcmNoUHJvMi5jYWxsKF90aGlzJHByb3BzJHNlYXJjaFBybywgc2VhcmNoVmFsdWUsIHZpc2libGVPcHRpb25zKTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNvbnRhaW5lckJsdXJcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBfZSRyZWxhdGVkVGFyZ2V0LCBfZSRyZWxhdGVkVGFyZ2V0JGZpcnM7XG5cbiAgICAgIC8vIElnbm9yZSBibHVyIGV2ZW50cyB3aGVuIG1vdmluZyBmcm9tIHNlYXJjaCB0byBvcHRpb24gdG8gYXZvaWQgYWN0aXZlT3B0aW9uSW5kZXggY29uZmxpY3RzXG4gICAgICBpZiAoKChfZSRyZWxhdGVkVGFyZ2V0ID0gZS5yZWxhdGVkVGFyZ2V0KSA9PT0gbnVsbCB8fCBfZSRyZWxhdGVkVGFyZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2UkcmVsYXRlZFRhcmdldCRmaXJzID0gX2UkcmVsYXRlZFRhcmdldC5maXJzdENoaWxkKSA9PT0gbnVsbCB8fCBfZSRyZWxhdGVkVGFyZ2V0JGZpcnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lJHJlbGF0ZWRUYXJnZXQkZmlycy5pZCkgPT09IF90aGlzLmxpc3RJZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNGb2N1c2VkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25PcHRpb25DbGlja1wiLCBmdW5jdGlvbiAob3B0aW9ucywgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGlzUHJlRmlsdGVyZWQgPSBfdGhpcyRwcm9wcy5pc1ByZUZpbHRlcmVkLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2U7XG4gICAgICB2YXIgc2VhcmNoVmFsdWUgPSBfdGhpcy5zdGF0ZS5zZWFyY2hWYWx1ZTtcbiAgICAgIHZhciB2aXNpYmxlT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnM6IHZpc2libGVPcHRpb25zXG4gICAgICB9KTtcblxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKG9wdGlvbnMsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzY3JvbGxUb0l0ZW1cIiwgZnVuY3Rpb24gKGluZGV4LCBhbGlnbikge1xuICAgICAgdmFyIF90aGlzJG9wdGlvbnNMaXN0UmVmJDMsIF90aGlzJG9wdGlvbnNMaXN0UmVmJDQ7XG5cbiAgICAgIChfdGhpcyRvcHRpb25zTGlzdFJlZiQzID0gX3RoaXMub3B0aW9uc0xpc3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX3RoaXMkb3B0aW9uc0xpc3RSZWYkMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF90aGlzJG9wdGlvbnNMaXN0UmVmJDQgPSBfdGhpcyRvcHRpb25zTGlzdFJlZiQzLmxpc3RSZWYpID09PSBudWxsIHx8IF90aGlzJG9wdGlvbnNMaXN0UmVmJDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnNMaXN0UmVmJDQuc2Nyb2xsVG9JdGVtKGluZGV4LCBhbGlnbik7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibWFrZU9wdGlvbklkXCIsIGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4ICE9IG51bGwgPyBcIlwiLmNvbmNhdChfdGhpcy5saXN0SWQsIFwiX29wdGlvbi1cIikuY29uY2F0KGluZGV4KSA6ICcnO1xuICAgIH0pO1xuXG4gICAgX3RoaXMucm9vdElkID0gcHJvcHMuaWQgPyBmdW5jdGlvbiAoc3VmZml4KSB7XG4gICAgICByZXR1cm4gXCJcIi5jb25jYXQocHJvcHMuaWQpLmNvbmNhdChzdWZmaXggPyBcIl9cIi5jb25jYXQoc3VmZml4KSA6ICcnKTtcbiAgICB9IDogaHRtbElkR2VuZXJhdG9yKCk7XG4gICAgX3RoaXMubGlzdElkID0gX3RoaXMucm9vdElkKCdsaXN0Ym94Jyk7XG4gICAgX3RoaXMubWVzc2FnZUNvbnRlbnRJZCA9IF90aGlzLnJvb3RJZCgnbWVzc2FnZUNvbnRlbnQnKTtcbiAgICB2YXIgX29wdGlvbnMgPSBwcm9wcy5vcHRpb25zLFxuICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBwcm9wcy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgIF9pc1ByZUZpbHRlcmVkID0gcHJvcHMuaXNQcmVGaWx0ZXJlZCxcbiAgICAgICAgc2VhcmNoUHJvcHMgPSBwcm9wcy5zZWFyY2hQcm9wcztcbiAgICB2YXIgaW5pdGlhbFNlYXJjaFZhbHVlID0gKHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWFyY2hQcm9wcy52YWx1ZSkgfHwgU3RyaW5nKChzZWFyY2hQcm9wcyA9PT0gbnVsbCB8fCBzZWFyY2hQcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VhcmNoUHJvcHMuZGVmYXVsdFZhbHVlKSB8fCAnJyk7XG5cbiAgICB2YXIgX3Zpc2libGVPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKF9vcHRpb25zLCBpbml0aWFsU2VhcmNoVmFsdWUsIF9pc1ByZUZpbHRlcmVkKTtcblxuICAgIHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3NlYXJjaFByb3BzJG9uQ2hhbmdlID0gc2VhcmNoUHJvcHMub25DaGFuZ2UpID09PSBudWxsIHx8IF9zZWFyY2hQcm9wcyRvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3NlYXJjaFByb3BzJG9uQ2hhbmdlLmNhbGwoc2VhcmNoUHJvcHMsIGluaXRpYWxTZWFyY2hWYWx1ZSwgX3Zpc2libGVPcHRpb25zKTsgLy8gZW5zdXJlIHRoYXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzaW5nbGUgb3B0aW9uIGlzIGFjdGl2ZSBpZiBpdCBpcyBpbiB0aGUgdmlzaWJsZU9wdGlvbnNcblxuICAgIHZhciBzZWxlY3RlZE9wdGlvbnMgPSBfb3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgcmV0dXJuIG9wdGlvbi5jaGVja2VkO1xuICAgIH0pO1xuXG4gICAgdmFyIF9hY3RpdmVPcHRpb25JbmRleDtcblxuICAgIGlmIChzaW5nbGVTZWxlY3Rpb24gJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKF92aXNpYmxlT3B0aW9ucy5pbmNsdWRlcyhzZWxlY3RlZE9wdGlvbnNbMF0pKSB7XG4gICAgICAgIF9hY3RpdmVPcHRpb25JbmRleCA9IF92aXNpYmxlT3B0aW9ucy5pbmRleE9mKHNlbGVjdGVkT3B0aW9uc1swXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBhY3RpdmVPcHRpb25JbmRleDogX2FjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgc2VhcmNoVmFsdWU6IGluaXRpYWxTZWFyY2hWYWx1ZSxcbiAgICAgIHZpc2libGVPcHRpb25zOiBfdmlzaWJsZU9wdGlvbnMsXG4gICAgICBpc0ZvY3VzZWQ6IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXVpU2VsZWN0YWJsZSwgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgaWYgKHByZXZTdGF0ZS5hY3RpdmVPcHRpb25JbmRleCAhPT0gdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMkb25BY3RpdmVPLCBfdGhpcyRwcm9wczI7XG5cbiAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbiA9IHRoaXMuc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbCA/IHRoaXMuc3RhdGUudmlzaWJsZU9wdGlvbnNbdGhpcy5zdGF0ZS5hY3RpdmVPcHRpb25JbmRleF0gOiBudWxsO1xuICAgICAgICAoX3RoaXMkcHJvcHMkb25BY3RpdmVPID0gKF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMpLm9uQWN0aXZlT3B0aW9uQ2hhbmdlKSA9PT0gbnVsbCB8fCBfdGhpcyRwcm9wcyRvbkFjdGl2ZU8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHByb3BzJG9uQWN0aXZlTy5jYWxsKF90aGlzJHByb3BzMiwgYWN0aXZlT3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzMy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczMuY2xhc3NOYW1lLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczMub3B0aW9ucyxcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMy5vbkNoYW5nZSxcbiAgICAgICAgICBvbkFjdGl2ZU9wdGlvbkNoYW5nZSA9IF90aGlzJHByb3BzMy5vbkFjdGl2ZU9wdGlvbkNoYW5nZSxcbiAgICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMzLnNlYXJjaGFibGUsXG4gICAgICAgICAgc2VhcmNoUHJvcHMgPSBfdGhpcyRwcm9wczMuc2VhcmNoUHJvcHMsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMzLnNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICBpc0xvYWRpbmcgPSBfdGhpcyRwcm9wczMuaXNMb2FkaW5nLFxuICAgICAgICAgIGxpc3RQcm9wcyA9IF90aGlzJHByb3BzMy5saXN0UHJvcHMsXG4gICAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHMzLnJlbmRlck9wdGlvbixcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczMuaGVpZ2h0LFxuICAgICAgICAgIGFsbG93RXhjbHVzaW9ucyA9IF90aGlzJHByb3BzMy5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgYXJpYUxhYmVsID0gX3RoaXMkcHJvcHMzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gX3RoaXMkcHJvcHMzWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgICAgbG9hZGluZ01lc3NhZ2UgPSBfdGhpcyRwcm9wczMubG9hZGluZ01lc3NhZ2UsXG4gICAgICAgICAgbm9NYXRjaGVzTWVzc2FnZSA9IF90aGlzJHByb3BzMy5ub01hdGNoZXNNZXNzYWdlLFxuICAgICAgICAgIGVtcHR5TWVzc2FnZSA9IF90aGlzJHByb3BzMy5lbXB0eU1lc3NhZ2UsXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gX3RoaXMkcHJvcHMzLmVycm9yTWVzc2FnZSxcbiAgICAgICAgICBpc1ByZUZpbHRlcmVkID0gX3RoaXMkcHJvcHMzLmlzUHJlRmlsdGVyZWQsXG4gICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpcyRwcm9wczMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRzdGF0ZS5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICB2aXNpYmxlT3B0aW9ucyA9IF90aGlzJHN0YXRlLnZpc2libGVPcHRpb25zLFxuICAgICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkc3RhdGUuYWN0aXZlT3B0aW9uSW5kZXg7IC8vIFNvbWUgbWVzc3kgZGVzdHJ1Y3R1cmluZyBoZXJlIHRvIHJlbW92ZSBhcmlhLWxhYmVsL2Rlc2NyaWJlZGJ5IGZyb20gc2VhcmNoUHJvcHMgYW5kIGxpc3RQcm9wc1xuICAgICAgLy8gTWFkZSBtZXNzaWVyIGJ5IHNvbWUgVFMgcmVxdWlyZW1lbnRzXG4gICAgICAvLyBUaGUgYXJpYSBhdHRyaWJ1dGVzIGFyZSB0aGVuIHVzZWQgaW4gZ2V0QWNjZXNzaWJsZU5hbWUoKSB0byBwbGFjZSB0aGVtIHdoZXJlIHRoZXkgbmVlZCB0byBnb1xuXG4gICAgICB2YXIgdW5rbm93bkFjY2Vzc2libGVOYW1lID0ge1xuICAgICAgICAnYXJpYS1sYWJlbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICAgIHZhciBfcmVmMiA9IHNlYXJjaFByb3BzIHx8IHVua25vd25BY2Nlc3NpYmxlTmFtZSxcbiAgICAgICAgICBzZWFyY2hBcmlhTGFiZWwgPSBfcmVmMlsnYXJpYS1sYWJlbCddLFxuICAgICAgICAgIHNlYXJjaEFyaWFEZXNjcmliZWRieSA9IF9yZWYyWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgICAgcHJvcHNPbkNoYW5nZSA9IF9yZWYyLm9uQ2hhbmdlLFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IF9yZWYyLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICBpbnB1dFJlZiA9IF9yZWYyLmlucHV0UmVmLFxuICAgICAgICAgIGNsZWFuZWRTZWFyY2hQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgX2V4Y2x1ZGVkMik7XG5cbiAgICAgIHZhciBfcmVmMyA9IGxpc3RQcm9wcyB8fCB1bmtub3duQWNjZXNzaWJsZU5hbWUsXG4gICAgICAgICAgbGlzdEFyaWFMYWJlbCA9IF9yZWYzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgbGlzdEFyaWFEZXNjcmliZWRieSA9IF9yZWYzWydhcmlhLWRlc2NyaWJlZGJ5J10sXG4gICAgICAgICAgaXNWaXJ0dWFsaXplZCA9IF9yZWYzLmlzVmlydHVhbGl6ZWQsXG4gICAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjMucm93SGVpZ2h0LFxuICAgICAgICAgIGNsZWFuZWRMaXN0UHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIF9leGNsdWRlZDMpO1xuXG4gICAgICB2YXIgdmlydHVhbGl6ZWRQcm9wcztcblxuICAgICAgaWYgKGlzVmlydHVhbGl6ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHZpcnR1YWxpemVkUHJvcHMgPSB7XG4gICAgICAgICAgaXNWaXJ0dWFsaXplZDogaXNWaXJ0dWFsaXplZFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChyb3dIZWlnaHQgIT0gbnVsbCkge1xuICAgICAgICB2aXJ0dWFsaXplZFByb3BzID0ge1xuICAgICAgICAgIHJvd0hlaWdodDogcm93SGVpZ2h0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZScsIHtcbiAgICAgICAgJ2V1aVNlbGVjdGFibGUtZnVsbEhlaWdodCc6IGhlaWdodCA9PT0gJ2Z1bGwnXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgLyoqIENyZWF0ZSBtZXNzYWdlIGNvbnRlbnQgdGhhdCByZXBsYWNlcyB0aGUgbGlzdCBpZiBubyBvcHRpb25zIGFyZSBhdmFpbGFibGUgKHlldCkgKi9cblxuICAgICAgdmFyIG1lc3NhZ2VDb250ZW50O1xuXG4gICAgICBpZiAoZXJyb3JNZXNzYWdlICE9IG51bGwpIHtcbiAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSB0eXBlb2YgZXJyb3JNZXNzYWdlID09PSAnc3RyaW5nJyA/IF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGVycm9yTWVzc2FnZSkgOiBlcnJvck1lc3NhZ2U7XG4gICAgICB9IGVsc2UgaWYgKGlzTG9hZGluZykge1xuICAgICAgICBpZiAobG9hZGluZ01lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgbG9hZGluZ01lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSBfX19FbW90aW9uSlNYKFJlYWN0LkZyYWdtZW50LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aUxvYWRpbmdTcGlubmVyLCB7XG4gICAgICAgICAgICBzaXplOiBcIm1cIlxuICAgICAgICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aVNwYWNlciwge1xuICAgICAgICAgICAgc2l6ZTogXCJ4c1wiXG4gICAgICAgICAgfSksIF9fX0Vtb3Rpb25KU1goXCJwXCIsIG51bGwsIGxvYWRpbmdNZXNzYWdlIHx8IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5sb2FkaW5nT3B0aW9uc1wiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJMb2FkaW5nIG9wdGlvbnNcIlxuICAgICAgICAgIH0pKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGxvYWRpbmdNZXNzYWdlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLm1lc3NhZ2VDb250ZW50SWRcbiAgICAgICAgICB9LCBsb2FkaW5nTWVzc2FnZS5wcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNlYXJjaFZhbHVlICYmIHZpc2libGVPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAobm9NYXRjaGVzTWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBub01hdGNoZXNNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgbm9NYXRjaGVzTWVzc2FnZSB8fCBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGUubm9NYXRjaGluZ09wdGlvbnNcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwie3NlYXJjaFZhbHVlfSBkb2Vzbid0IG1hdGNoIGFueSBvcHRpb25zXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgc2VhcmNoVmFsdWU6IF9fX0Vtb3Rpb25KU1goXCJzdHJvbmdcIiwgbnVsbCwgc2VhcmNoVmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChub01hdGNoZXNNZXNzYWdlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLm1lc3NhZ2VDb250ZW50SWRcbiAgICAgICAgICB9LCBub01hdGNoZXNNZXNzYWdlLnByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChlbXB0eU1lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgZW1wdHlNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50ID0gX19fRW1vdGlvbkpTWChcInBcIiwgbnVsbCwgZW1wdHlNZXNzYWdlIHx8IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5ub0F2YWlsYWJsZU9wdGlvbnNcIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwiTm8gb3B0aW9ucyBhdmFpbGFibGVcIlxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoZW1wdHlNZXNzYWdlLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLm1lc3NhZ2VDb250ZW50SWRcbiAgICAgICAgICB9LCBlbXB0eU1lc3NhZ2UucHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyoqXG4gICAgICAgKiBUaGVyZSBhcmUgbG90cyBvZiB3YXlzIHRvIGFkZCBhbiBhY2Nlc3NpYmxlIG5hbWVcbiAgICAgICAqIFVzdWFsbHkgd2Ugd2FudCB0aGUgc2FtZSBuYW1lIGZvciB0aGUgaW5wdXQgYW5kIHRoZSBsaXN0Ym94ICh3aGljaCBpcyBhZGRlZCBieSBhcmlhLWxhYmVsL2Rlc2NyaWJlZGJ5KVxuICAgICAgICogQnV0IHlvdSBjYW4gYWx3YXlzIG92ZXJyaWRlIGl0IHVzaW5nIHNlYXJjaFByb3BzIG9yIGxpc3RQcm9wc1xuICAgICAgICogVGhpcyBmaW5kcyB0aGUgY29ycmVjdCBuYW1lIHRvIHVzZVxuICAgICAgICpcbiAgICAgICAqIFRPRE86IFRoaXMgZG9lc24ndCBoYW5kbGUgYmVpbmcgbGFiZWxsZWQgKDxsYWJlbCBmb3I9XCJpZE9mSW5wdXRcIj4pXG4gICAgICAgKi9cblxuXG4gICAgICB2YXIgZ2V0QWNjZXNzaWJsZU5hbWUgPSBmdW5jdGlvbiBnZXRBY2Nlc3NpYmxlTmFtZShwcm9wcywgbWVzc2FnZUNvbnRlbnRJZCkge1xuICAgICAgICBpZiAocHJvcHMgJiYgcHJvcHNbJ2FyaWEtbGFiZWwnXSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6IHByb3BzWydhcmlhLWxhYmVsJ11cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1lc3NhZ2VDb250ZW50SWRTdHJpbmcgPSBtZXNzYWdlQ29udGVudElkID8gXCIgXCIuY29uY2F0KG1lc3NhZ2VDb250ZW50SWQpIDogJyc7XG5cbiAgICAgICAgaWYgKHByb3BzICYmIHByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J10pIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2FyaWEtZGVzY3JpYmVkYnknOiBcIlwiLmNvbmNhdChwcm9wc1snYXJpYS1kZXNjcmliZWRieSddKS5jb25jYXQobWVzc2FnZUNvbnRlbnRJZFN0cmluZylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyaWFMYWJlbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnYXJpYS1sYWJlbCc6IGFyaWFMYWJlbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJpYURlc2NyaWJlZGJ5KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogXCJcIi5jb25jYXQoYXJpYURlc2NyaWJlZGJ5KS5jb25jYXQobWVzc2FnZUNvbnRlbnRJZFN0cmluZylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfTtcblxuICAgICAgdmFyIHNlYXJjaEFjY2Vzc2libGVOYW1lID0gZ2V0QWNjZXNzaWJsZU5hbWUoc2VhcmNoUHJvcHMsIHRoaXMubWVzc2FnZUNvbnRlbnRJZCk7XG4gICAgICB2YXIgc2VhcmNoSGFzQWNjZXNzaWJsZU5hbWUgPSBCb29sZWFuKE9iamVjdC5rZXlzKHNlYXJjaEFjY2Vzc2libGVOYW1lKS5sZW5ndGgpO1xuICAgICAgdmFyIHNlYXJjaCA9IHNlYXJjaGFibGUgPyBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpU2VsZWN0YWJsZS5wbGFjZWhvbGRlck5hbWVcIixcbiAgICAgICAgZGVmYXVsdDogXCJGaWx0ZXIgb3B0aW9uc1wiXG4gICAgICB9LCBmdW5jdGlvbiAocGxhY2Vob2xkZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVTZWFyY2gsIF9leHRlbmRzKHtcbiAgICAgICAgICBrZXk6IFwibGlzdFNlYXJjaFwiLFxuICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgdmFsdWU6IHNlYXJjaFZhbHVlLFxuICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczIub25TZWFyY2hDaGFuZ2UsXG4gICAgICAgICAgbGlzdElkOiBfdGhpczIub3B0aW9uc0xpc3RSZWYuY3VycmVudCA/IF90aGlzMi5saXN0SWQgOiB1bmRlZmluZWQgLy8gT25seSBwYXNzIHRoZSBsaXN0SWQgaWYgaXQgZXhpc3RzIG9uIHRoZSBwYWdlXG4gICAgICAgICAgLFxuICAgICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IF90aGlzMi5tYWtlT3B0aW9uSWQoYWN0aXZlT3B0aW9uSW5kZXgpIC8vIHRoZSBjdXJyZW50IGZhdXgtZm9jdXNlZCBvcHRpb25cbiAgICAgICAgICAsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyTmFtZSxcbiAgICAgICAgICBpc1ByZUZpbHRlcmVkOiBpc1ByZUZpbHRlcmVkICE9PSBudWxsICYmIGlzUHJlRmlsdGVyZWQgIT09IHZvaWQgMCA/IGlzUHJlRmlsdGVyZWQgOiBmYWxzZSxcbiAgICAgICAgICBpbnB1dFJlZjogZnVuY3Rpb24gaW5wdXRSZWYobm9kZSkge1xuICAgICAgICAgICAgdmFyIF9zZWFyY2hQcm9wcyRpbnB1dFJlZjtcblxuICAgICAgICAgICAgX3RoaXMyLmlucHV0UmVmID0gbm9kZTtcbiAgICAgICAgICAgIHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3NlYXJjaFByb3BzJGlucHV0UmVmID0gc2VhcmNoUHJvcHMuaW5wdXRSZWYpID09PSBudWxsIHx8IF9zZWFyY2hQcm9wcyRpbnB1dFJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3NlYXJjaFByb3BzJGlucHV0UmVmLmNhbGwoc2VhcmNoUHJvcHMsIG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgc2VhcmNoSGFzQWNjZXNzaWJsZU5hbWUgPyBzZWFyY2hBY2Nlc3NpYmxlTmFtZSA6IHtcbiAgICAgICAgICAnYXJpYS1sYWJlbCc6IHBsYWNlaG9sZGVyTmFtZVxuICAgICAgICB9LCBjbGVhbmVkU2VhcmNoUHJvcHMpKTtcbiAgICAgIH0pIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIHJlc3VsdHNMZW5ndGggPSB2aXNpYmxlT3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gIW9wdGlvbi5kaXNhYmxlZDtcbiAgICAgIH0pLmxlbmd0aDtcblxuICAgICAgdmFyIGxpc3RTY3JlZW5SZWFkZXJTdGF0dXMgPSBzZWFyY2hhYmxlICYmIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlLnNlYXJjaFJlc3VsdHNcIixcbiAgICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoX3JlZjQpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0c0xlbmd0aCA9IF9yZWY0LnJlc3VsdHNMZW5ndGg7XG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHJlc3VsdHNMZW5ndGgsIFwiIHJlc3VsdFwiKS5jb25jYXQocmVzdWx0c0xlbmd0aCA9PT0gMSA/ICcnIDogJ3MnLCBcIiBhdmFpbGFibGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIHJlc3VsdHNMZW5ndGg6IHJlc3VsdHNMZW5ndGhcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHZhciBsaXN0QXJpYURlc2NyaWJlZGJ5SWQgPSB0aGlzLnJvb3RJZCgnaW5zdHJ1Y3Rpb25zJyk7XG4gICAgICB2YXIgbGlzdEFjY2Vzc2libGVOYW1lID0gZ2V0QWNjZXNzaWJsZU5hbWUobGlzdFByb3BzLCBsaXN0QXJpYURlc2NyaWJlZGJ5SWQpO1xuICAgICAgdmFyIGxpc3RIYXNBY2Nlc3NpYmxlTmFtZSA9IEJvb2xlYW4oT2JqZWN0LmtleXMobGlzdEFjY2Vzc2libGVOYW1lKS5sZW5ndGgpO1xuXG4gICAgICB2YXIgbGlzdCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbnM6IFsnZXVpU2VsZWN0YWJsZS5zY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMnLCAnZXVpU2VsZWN0YWJsZS5wbGFjZWhvbGRlck5hbWUnXSxcbiAgICAgICAgZGVmYXVsdHM6IFsnVXNlIHVwIGFuZCBkb3duIGFycm93cyB0byBtb3ZlIGZvY3VzIG92ZXIgb3B0aW9ucy4gRW50ZXIgdG8gc2VsZWN0LiBFc2NhcGUgdG8gY29sbGFwc2Ugb3B0aW9ucy4nLCAnRmlsdGVyIG9wdGlvbnMnXVxuICAgICAgfSwgZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyTmFtZSA9IF9yZWY2WzBdLFxuICAgICAgICAgICAgc2NyZWVuUmVhZGVySW5zdHJ1Y3Rpb25zID0gX3JlZjZbMV07XG5cbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIHNlYXJjaGFibGUgJiYgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJMaXZlLCB7XG4gICAgICAgICAgaXNBY3RpdmU6IG1lc3NhZ2VDb250ZW50ICE9IG51bGwgfHwgYWN0aXZlT3B0aW9uSW5kZXggIT0gbnVsbFxuICAgICAgICB9LCBtZXNzYWdlQ29udGVudCB8fCBsaXN0U2NyZWVuUmVhZGVyU3RhdHVzKSwgX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwicFwiLCB7XG4gICAgICAgICAgaWQ6IGxpc3RBcmlhRGVzY3JpYmVkYnlJZFxuICAgICAgICB9LCBzY3JlZW5SZWFkZXJJbnN0cnVjdGlvbnMpKSwgbWVzc2FnZUNvbnRlbnQgPyBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVNZXNzYWdlLCB7XG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImV1aVNlbGVjdGFibGVNZXNzYWdlXCIsXG4gICAgICAgICAgaWQ6IF90aGlzMi5tZXNzYWdlQ29udGVudElkLFxuICAgICAgICAgIGJvcmRlcmVkOiBsaXN0UHJvcHMgJiYgbGlzdFByb3BzLmJvcmRlcmVkXG4gICAgICAgIH0sIG1lc3NhZ2VDb250ZW50KSA6IF9fX0Vtb3Rpb25KU1goRXVpU2VsZWN0YWJsZUxpc3QsIF9leHRlbmRzKHtcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpU2VsZWN0YWJsZUxpc3RcIixcbiAgICAgICAgICBrZXk6IFwibGlzdFwiLFxuICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnM6IHZpc2libGVPcHRpb25zLFxuICAgICAgICAgIHNlYXJjaFZhbHVlOiBzZWFyY2hWYWx1ZSxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleDogYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXg6IGZ1bmN0aW9uIHNldEFjdGl2ZU9wdGlvbkluZGV4KGluZGV4LCBjYikge1xuICAgICAgICAgICAgX3RoaXMyLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXg6IGluZGV4XG4gICAgICAgICAgICB9LCBjYik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrOiBfdGhpczIub25PcHRpb25DbGljayxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb246IHNpbmdsZVNlbGVjdGlvbixcbiAgICAgICAgICByZWY6IF90aGlzMi5vcHRpb25zTGlzdFJlZixcbiAgICAgICAgICByZW5kZXJPcHRpb246IHJlbmRlck9wdGlvbixcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnM6IGFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBzZWFyY2hhYmxlOiBzZWFyY2hhYmxlLFxuICAgICAgICAgIG1ha2VPcHRpb25JZDogX3RoaXMyLm1ha2VPcHRpb25JZCxcbiAgICAgICAgICBsaXN0SWQ6IF90aGlzMi5saXN0SWRcbiAgICAgICAgfSwgbGlzdEhhc0FjY2Vzc2libGVOYW1lID8gbGlzdEFjY2Vzc2libGVOYW1lIDogc2VhcmNoYWJsZSAmJiB7XG4gICAgICAgICAgJ2FyaWEtbGFiZWwnOiBwbGFjZWhvbGRlck5hbWVcbiAgICAgICAgfSwgY2xlYW5lZExpc3RQcm9wcywgdmlydHVhbGl6ZWRQcm9wcykpKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJlZjogdGhpcy5jb250YWluZXJSZWYsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgb25LZXlEb3duOiB0aGlzLm9uS2V5RG93bixcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQ29udGFpbmVyQmx1cixcbiAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5vbk1vdXNlRG93blxuICAgICAgfSwgcmVzdCksIGNoaWxkcmVuICYmIGNoaWxkcmVuKGxpc3QsIHNlYXJjaCkpO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gbmV4dFByb3BzLm9wdGlvbnMsXG4gICAgICAgICAgaXNQcmVGaWx0ZXJlZCA9IG5leHRQcm9wcy5pc1ByZUZpbHRlcmVkLFxuICAgICAgICAgIHNlYXJjaFByb3BzID0gbmV4dFByb3BzLnNlYXJjaFByb3BzO1xuICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gcHJldlN0YXRlLmFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIHNlYXJjaFZhbHVlID0gcHJldlN0YXRlLnNlYXJjaFZhbHVlO1xuICAgICAgdmFyIG1hdGNoaW5nT3B0aW9ucyA9IGdldE1hdGNoaW5nT3B0aW9ucyhvcHRpb25zLCBzZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCk7XG4gICAgICB2YXIgc3RhdGVVcGRhdGUgPSB7XG4gICAgICAgIHZpc2libGVPcHRpb25zOiBtYXRjaGluZ09wdGlvbnMsXG4gICAgICAgIGFjdGl2ZU9wdGlvbkluZGV4OiBhY3RpdmVPcHRpb25JbmRleFxuICAgICAgfTtcblxuICAgICAgaWYgKGFjdGl2ZU9wdGlvbkluZGV4ICE9IG51bGwgJiYgYWN0aXZlT3B0aW9uSW5kZXggPj0gbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBzdGF0ZVVwZGF0ZS5hY3RpdmVPcHRpb25JbmRleCA9IC0xO1xuICAgICAgfVxuXG4gICAgICBpZiAoKHNlYXJjaFByb3BzID09PSBudWxsIHx8IHNlYXJjaFByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWFyY2hQcm9wcy52YWx1ZSkgIT0gbnVsbCAmJiBzZWFyY2hQcm9wcy52YWx1ZSAhPT0gc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUuc2VhcmNoVmFsdWUgPSBzZWFyY2hQcm9wcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0YXRlVXBkYXRlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlTZWxlY3RhYmxlO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpU2VsZWN0YWJsZSwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICBvcHRpb25zOiBbXSxcbiAgc2luZ2xlU2VsZWN0aW9uOiBmYWxzZSxcbiAgc2VhcmNoYWJsZTogZmFsc2UsXG4gIGlzUHJlRmlsdGVyZWQ6IGZhbHNlXG59KTtcblxuRXVpU2VsZWN0YWJsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgICAqIEhvb2tzIHVwIGEgc2VhcmNoIGJveCB0byBmaWx0ZXIgdGhlIGxpc3QgKGJvb2xlYW4pXG4gICAgICAgKi9cbiAgc2VhcmNoYWJsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtmYWxzZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgICAgICogUGFzc2VzIHByb3BzIGRvd24gdG8gdGhlIGBFdWlGaWVsZFNlYXJjaGAuXG4gICAgICAgKiBTZWUgI0V1aVNlbGVjdGFibGVTZWFyY2hQcm9wc1xuICAgICAgICovXG4gIHNlYXJjaFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogRnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgYGxpc3RgIG5vZGUgYW5kIHRoZW5cbiAgICAgICAqIHRoZSBgc2VhcmNoYCBub2RlIChpZiBgc2VhcmNoYWJsZWAgaXMgYXBwbGllZClcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICAgKiBBcnJheSBvZiBFdWlTZWxlY3RhYmxlT3B0aW9uIG9iamVjdHMuIFNlZSAjRXVpU2VsZWN0YWJsZU9wdGlvblByb3BzXG4gICAgICAgKi9cbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsIGBib29sZWFuYC5cbiAgICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gaW5kaWNhdGUgb2JqZWN0IGlzIGp1c3QgYSBncm91cGluZyBsYWJlbCwgbm90IGEgc2VsZWN0YWJsZSBpdGVtXG4gICAgICAgKi9cbiAgICBpc0dyb3VwTGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIFZpc2libGUgbGFiZWwgb2Ygb3B0aW9uLlxuICAgICAgICogTXVzdCBiZSB1bmlxdWUgYWNyb3NzIGl0ZW1zIGlmIGBrZXlgIGlzIG5vdCBzdXBwbGllZFxuICAgICAgICovXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIE9wdGlvbmFsbHkgY2hhbmdlIHRoZSBzZWFyY2hhYmxlIHRlcm0gYnkgcGFzc2luZyBhIGRpZmZlcmVudCBzdHJpbmcgb3RoZXIgdGhhbiB0aGUgYGxhYmVsYC5cbiAgICAgICAqIEJlc3QgdXNlZCB3aGVuIGNyZWF0aW5nIGEgY3VzdG9tIGBvcHRpb25SZW5kZXJgIHRvIHNlcGFyYXRlIHRoZSBsYWJlbCBmcm9tIG1ldGFkYXRhIGJ1dCBhbGxvd2luZyB0byBzZWFyY2ggb24gYm90aFxuICAgICAgICovXG4gICAgc2VhcmNoYWJsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBNdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgaXRlbXMuXG4gICAgICAgKiBXaWxsIGJlIHVzZWQgdG8gbWF0Y2ggb3B0aW9ucyBpbnN0ZWFkIG9mIGBsYWJlbGBcbiAgICAgICAqL1xuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogTGVhdmUgYHVuZGVmaW5lZGAgdG8gaW5kaWNhdGUgbm90IHNlbGVjdGVkLFxuICAgICAgICogJ29uJyB0byBpbmRpY2F0ZSBpbmNsdXNpb24gYW5kXG4gICAgICAgKiAnb2ZmJyB0byBpbmRpY2F0ZSBleGNsdXNpb25cbiAgICAgICAqL1xuICAgIGNoZWNrZWQ6IFByb3BUeXBlcy5vbmVPZihbXCJvblwiLCBcIm9mZlwiLCB1bmRlZmluZWRdKSxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIE5vZGUgdG8gYWRkIGJldHdlZW4gdGhlIHNlbGVjdGlvbiBpY29uIGFuZCB0aGUgbGFiZWxcbiAgICAgICAqL1xuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCB0byB0aGUgZmFyIHJpZ2h0IG9mIHRoZSBpdGVtXG4gICAgICAgKi9cbiAgICBhcHBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIHJlZjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIE9wdGlvbiBkYXRhIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgYHJlbmRlck9wdGlvbnNgIGVsZW1lbnQuXG4gICAgICAgKiBCeXBhc3MgYEV1aVNlbGVjdGFibGVJdGVtYCBhbmQgYXZvaWQgRE9NIGF0dHJpYnV0ZSB3YXJuaW5ncy5cbiAgICAgICAqL1xuICAgIGRhdGE6IFByb3BUeXBlcy5zaGFwZSh7fSlcbiAgfSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgICAqIFBhc3NlcyBiYWNrIHRoZSBhbHRlcmVkIGBvcHRpb25zYCBhcnJheSB3aXRoIHNlbGVjdGVkIG9wdGlvbnMgaGF2aW5nIGBjaGVja2VkOiAnb24nYC5cbiAgICAgICAqIEFsc28gcGFzc2VzIGJhY2sgdGhlIFJlYWN0IGNsaWNrL2tleWJvYXJkIGV2ZW50IGFzIGEgc2Vjb25kIGFyZ3VtZW50LlxuICAgICAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIFBhc3NlcyBiYWNrIHRoZSBjdXJyZW50IGFjdGl2ZSBvcHRpb24gd2hlbmV2ZXIgdGhlIHVzZXIgY2hhbmdlcyB0aGUgY3VycmVudGx5XG4gICAgICAgKiBoaWdobGlnaHRlZCBvcHRpb24gdmlhIGtleWJvYXJkIG5hdmlnYXRpb24gb3Igc2VhcmNoaW5nLlxuICAgICAgICovXG4gIG9uQWN0aXZlT3B0aW9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIFNldHMgdGhlIHNpbmdsZSBzZWxlY3Rpb24gcG9saWN5IG9mXG4gICAgICAgKiBgZmFsc2VgOiBhbGxvd3MgbXVsdGlwbGUgc2VsZWN0aW9uXG4gICAgICAgKiBgdHJ1ZWA6IG9ubHkgYWxsb3dzIG9uZSBzZWxlY3Rpb25cbiAgICAgICAqIGBhbHdheXNgOiBjYW4gYW5kIG11c3QgaGF2ZSBvbmx5IG9uZSBzZWxlY3Rpb25cbiAgICAgICAqL1xuICBzaW5nbGVTZWxlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhbHdheXNcIl0pLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBBbGxvd3MgbWFya2luZyBvcHRpb25zIGFzIGBjaGVja2VkPSdvZmYnYCBhcyB3ZWxsIGFzIGAnb24nYFxuICAgICAgICovXG4gIGFsbG93RXhjbHVzaW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBTaG93IGFuIGxvYWRpbmcgaW5kaWNhdG9yIHdoaWxlIHlvdSBsb2FkIGFuZCBob29rIHVwIHlvdXIgZGF0YVxuICAgICAgICovXG4gIGlzTG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBTZXRzIHRoZSBtYXggaGVpZ2h0IGluIHBpeGVscyBvciBwYXNzIGBmdWxsYCB0byBhbGxvd1xuICAgICAgICogdGhlIHdob2xlIGdyb3VwIHRvIGZpbGwgdGhlIGhlaWdodCBvZiBpdHMgY29udGFpbmVyIGFuZFxuICAgICAgICogYWxsb3dzIHRoZSBsaXN0IGdyb3cgYXMgd2VsbFxuICAgICAgICovXG4gIGhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW1wiZnVsbFwiXSldKSxcblxuICAvKipcbiAgICAgICAqIFNlZSAjRXVpU2VsZWN0YWJsZU9wdGlvbnNMaXN0XG4gICAgICAgKi9cbiAgbGlzdFByb3BzOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogQ3VzdG9tIHJlbmRlciBmdW5jdGlvbiBmb3IgZWFjaCBvcHRpb24uXG4gICAgICAgKiBSZXR1cm5zIGAob3B0aW9uLCBzZWFyY2hWYWx1ZSlgXG4gICAgICAgKi9cbiAgcmVuZGVyT3B0aW9uOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgICAqIEN1c3RvbWl6ZSB0aGUgbG9hZGluZyBtZXNzYWdlLiBQYXNzIGEgc3RyaW5nIHRvIHNpbXBseSBjaGFuZ2UgdGhlIHRleHQsXG4gICAgICAgKiBvciBhIG5vZGUgdG8gcmVwbGFjZSB0aGUgd2hvbGUgY29udGVudC5cbiAgICAgICAqL1xuICBsb2FkaW5nTWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDdXN0b21pemUgdGhlIG5vIG1hdGNoZXMgbWVzc2FnZS4gUGFzcyBhIHN0cmluZyB0byBzaW1wbHkgY2hhbmdlIHRoZSB0ZXh0LFxuICAgICAgICogb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKi9cbiAgbm9NYXRjaGVzTWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBDdXN0b21pemUgdGhlIGVtcHR5IG1lc3NhZ2UuIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCxcbiAgICAgICAqIG9yIGEgbm9kZSB0byByZXBsYWNlIHRoZSB3aG9sZSBjb250ZW50LlxuICAgICAgICovXG4gIGVtcHR5TWVzc2FnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBBZGQgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICAgICAqIFRoZSBtZXNzYWdlIHdpbGwgYmUgc2hvd24gd2hlbiB0aGUgdmFsdWUgaXMgbm90IGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAgICAgICAqIFBhc3MgYSBzdHJpbmcgdG8gc2ltcGx5IGNoYW5nZSB0aGUgdGV4dCwgb3IgYSBub2RlIHRvIHJlcGxhY2UgdGhlIHdob2xlIGNvbnRlbnQuXG4gICAgICAgKlxuICAgICAgICogYGVycm9yTWVzc2FnZT17aGFzRXJyb3JzID8gJ015IGVycm9yIG1lc3NhZ2UnIDogbnVsbH1gXG4gICAgICAgKi9cbiAgZXJyb3JNZXNzYWdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbbnVsbF0pXSksXG5cbiAgLyoqXG4gICAgICAgKiBDb250cm9sIHdoZXRoZXIgb3Igbm90IG9wdGlvbnMgZ2V0IGZpbHRlcmVkIGludGVybmFsbHkgb3IgaWYgY29uc3VtZXIgd2lsbCBmaWx0ZXJcbiAgICAgICAqIERlZmF1bHQ6IGZhbHNlXG4gICAgICAgKi9cbiAgaXNQcmVGaWx0ZXJlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJvbkNoYW5nZVwiLCBcIm9wdGlvbnNcIiwgXCJ2YWx1ZVwiLCBcInBsYWNlaG9sZGVyXCIsIFwiaXNQcmVGaWx0ZXJlZFwiLCBcImxpc3RJZFwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRXVpRmllbGRTZWFyY2ggfSBmcm9tICcuLi8uLi9mb3JtJztcbmltcG9ydCB7IGdldE1hdGNoaW5nT3B0aW9ucyB9IGZyb20gJy4uL21hdGNoaW5nX29wdGlvbnMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpU2VsZWN0YWJsZVNlYXJjaCA9IGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVTZWFyY2goX3JlZikge1xuICB2YXIgb25DaGFuZ2VDYWxsYmFjayA9IF9yZWYub25DaGFuZ2UsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgICAgcGxhY2Vob2xkZXIgPSBfcmVmLnBsYWNlaG9sZGVyLFxuICAgICAgaXNQcmVGaWx0ZXJlZCA9IF9yZWYuaXNQcmVGaWx0ZXJlZCxcbiAgICAgIGxpc3RJZCA9IF9yZWYubGlzdElkLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIG9uQ2hhbmdlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgc2VhcmNoVmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICB2YXIgbWF0Y2hpbmdPcHRpb25zID0gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkKTtcbiAgICBvbkNoYW5nZUNhbGxiYWNrKHNlYXJjaFZhbHVlLCBtYXRjaGluZ09wdGlvbnMpO1xuICB9LCBbb3B0aW9ucywgaXNQcmVGaWx0ZXJlZCwgb25DaGFuZ2VDYWxsYmFja10pO1xuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVTZWFyY2gnLCBjbGFzc05hbWUpO1xuICB2YXIgYXJpYVByb3BzSWZMaXN0SXNQcmVzZW50ID0gbGlzdElkID8ge1xuICAgIHJvbGU6ICdjb21ib2JveCcsXG4gICAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogJ2xpc3QnLFxuICAgICdhcmlhLWV4cGFuZGVkJzogdHJ1ZSxcbiAgICAnYXJpYS1jb250cm9scyc6IGxpc3RJZCxcbiAgICAnYXJpYS1vd25zJzogbGlzdElkIC8vIGxlZ2FjeSBhdHRyaWJ1dGUgYnV0IHNoaW1zIHN1cHBvcnQgZm9yIG5lYXJseSBldmVyeXRoaW5nIGF0bVxuXG4gIH0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUZpZWxkU2VhcmNoLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgIGluY3JlbWVudGFsOiB0cnVlLFxuICAgIGZ1bGxXaWR0aDogdHJ1ZSxcbiAgICBhdXRvQ29tcGxldGU6IFwib2ZmXCIsXG4gICAgXCJhcmlhLWhhc3BvcHVwXCI6IFwibGlzdGJveFwiXG4gIH0sIGFyaWFQcm9wc0lmTGlzdElzUHJlc2VudCwgcmVzdCkpO1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbnZhciBnZXRTZWFyY2hhYmxlTGFiZWwgPSBmdW5jdGlvbiBnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uKSB7XG4gIHZhciBub3JtYWxpemUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gIHZhciBzZWFyY2hhYmxlTGFiZWwgPSBvcHRpb24uc2VhcmNoYWJsZUxhYmVsIHx8IG9wdGlvbi5sYWJlbDtcbiAgcmV0dXJuIG5vcm1hbGl6ZSA/IHNlYXJjaGFibGVMYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSA6IHNlYXJjaGFibGVMYWJlbDtcbn07XG5cbnZhciBnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZShzZWFyY2hWYWx1ZSwgc2VsZWN0ZWRPcHRpb25zKSB7XG4gIHZhciBub3JtYWxpemVkU2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbmQoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgIHJldHVybiBnZXRTZWFyY2hhYmxlTGFiZWwob3B0aW9uKSA9PT0gbm9ybWFsaXplZFNlYXJjaFZhbHVlO1xuICB9KTtcbn07XG5cbnZhciBjb2xsZWN0TWF0Y2hpbmdPcHRpb24gPSBmdW5jdGlvbiBjb2xsZWN0TWF0Y2hpbmdPcHRpb24oYWNjdW11bGF0b3IsIG9wdGlvbiwgbm9ybWFsaXplZFNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzZWxlY3RlZE9wdGlvbnMpIHtcbiAgLy8gRG9uJ3Qgc2hvdyBvcHRpb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGlmXG4gIC8vIHRoZSBzZWxlY3RlZE9wdGlvbnMgbGlzdCBleGlzdHNcbiAgaWYgKHNlbGVjdGVkT3B0aW9ucykge1xuICAgIHZhciBzZWxlY3RlZE9wdGlvbiA9IGdldFNlbGVjdGVkT3B0aW9uRm9yU2VhcmNoVmFsdWUoZ2V0U2VhcmNoYWJsZUxhYmVsKG9wdGlvbiwgZmFsc2UpLCBzZWxlY3RlZE9wdGlvbnMpO1xuXG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IC8vIElmIHRoZSBvcHRpb25zIGhhdmUgYWxyZWFkeSBiZWVuIHByZWZpbHRlcmVkIHRoZW4gd2UgY2FuIHNraXAgZmlsdGVyaW5nIGFnYWluc3QgdGhlIHNlYXJjaCB2YWx1ZS5cbiAgLy8gVE9ETzogSSBzdGlsbCBkb24ndCBxdWl0ZSB1bmRlcnN0YW5kIGhvdyB0aGlzIHdvcmtzIHdoZW4gaG9va2VkIHVwIHRvIGFzeW5jXG5cblxuICBpZiAoaXNQcmVGaWx0ZXJlZCkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIW5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkge1xuICAgIGFjY3VtdWxhdG9yLnB1c2gob3B0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbm9ybWFsaXplZE9wdGlvbiA9IGdldFNlYXJjaGFibGVMYWJlbChvcHRpb24pO1xuXG4gIGlmIChub3JtYWxpemVkT3B0aW9uLmluY2x1ZGVzKG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkpIHtcbiAgICBhY2N1bXVsYXRvci5wdXNoKG9wdGlvbik7XG4gIH1cbn07XG5cbmV4cG9ydCB2YXIgZ2V0TWF0Y2hpbmdPcHRpb25zID0gZnVuY3Rpb24gZ2V0TWF0Y2hpbmdPcHRpb25zKG9wdGlvbnMsIHNlYXJjaFZhbHVlLCBpc1ByZUZpbHRlcmVkLCBzZWxlY3RlZE9wdGlvbnMpIHtcbiAgdmFyIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSA9IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBtYXRjaGluZ09wdGlvbnMgPSBbXTtcbiAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICBjb2xsZWN0TWF0Y2hpbmdPcHRpb24obWF0Y2hpbmdPcHRpb25zLCBvcHRpb24sIG5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSwgaXNQcmVGaWx0ZXJlZCwgc2VsZWN0ZWRPcHRpb25zKTtcbiAgfSk7XG4gIHJldHVybiBtYXRjaGluZ09wdGlvbnM7XG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJib3JkZXJlZFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVRleHQgfSBmcm9tICcuLi8uLi90ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGVNZXNzYWdlID0gZnVuY3Rpb24gRXVpU2VsZWN0YWJsZU1lc3NhZ2UoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGJvcmRlcmVkID0gX3JlZi5ib3JkZXJlZCxcbiAgICAgIGJvcmRlcmVkID0gX3JlZiRib3JkZXJlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGJvcmRlcmVkLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZU1lc3NhZ2UnLCB7XG4gICAgJ2V1aVNlbGVjdGFibGVNZXNzYWdlLS1ib3JkZXJlZCc6IGJvcmRlcmVkXG4gIH0sIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRleHQsIF9leHRlbmRzKHtcbiAgICBjb2xvcjogXCJzdWJkdWVkXCIsXG4gICAgc2l6ZTogXCJ4c1wiLFxuICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVNlbGVjdGFibGVNZXNzYWdlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAgICogTWF0Y2ggdGhpcyB0byB0aGUgYGxpc3RQcm9wcy5ib3JkZXJlZGAgcHJvcGVydHkgb2YgeW91ciBgRXVpU2VsZWN0YWJsZWAgaW5zdGFuY2VcbiAgICAgICAqL1xuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2xcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImRhdGFcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcImxhYmVsXCIsIFwiaXNHcm91cExhYmVsXCIsIFwiY2hlY2tlZFwiLCBcImRpc2FibGVkXCIsIFwicHJlcGVuZFwiLCBcImFwcGVuZFwiLCBcInJlZlwiLCBcImtleVwiLCBcInNlYXJjaGFibGVMYWJlbFwiLCBcImRhdGFcIl0sXG4gICAgX2V4Y2x1ZGVkMyA9IFtcImNsYXNzTmFtZVwiLCBcIm9wdGlvbnNcIiwgXCJzZWFyY2hWYWx1ZVwiLCBcIm9uT3B0aW9uQ2xpY2tcIiwgXCJyZW5kZXJPcHRpb25cIiwgXCJoZWlnaHRcIiwgXCJ3aW5kb3dQcm9wc1wiLCBcInJvd0hlaWdodFwiLCBcImFjdGl2ZU9wdGlvbkluZGV4XCIsIFwibWFrZU9wdGlvbklkXCIsIFwic2hvd0ljb25zXCIsIFwic2luZ2xlU2VsZWN0aW9uXCIsIFwidmlzaWJsZU9wdGlvbnNcIiwgXCJhbGxvd0V4Y2x1c2lvbnNcIiwgXCJib3JkZXJlZFwiLCBcInBhZGRpbmdTaXplXCIsIFwic2VhcmNoYWJsZVwiLCBcIm9uRm9jdXNCYWRnZVwiLCBcImxpc3RJZFwiLCBcInNldEFjdGl2ZU9wdGlvbkluZGV4XCIsIFwiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcImFyaWEtZGVzY3JpYmVkYnlcIiwgXCJyb2xlXCIsIFwiaXNWaXJ0dWFsaXplZFwiLCBcInRleHRXcmFwXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCwgbWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRml4ZWRTaXplTGlzdCwgYXJlRXF1YWwgfSBmcm9tICdyZWFjdC13aW5kb3cnO1xuaW1wb3J0IHsgRXVpQXV0b1NpemVyIH0gZnJvbSAnLi4vLi4vYXV0b19zaXplcic7XG5pbXBvcnQgeyBFdWlIaWdobGlnaHQgfSBmcm9tICcuLi8uLi9oaWdobGlnaHQnO1xuaW1wb3J0IHsgRXVpU2VsZWN0YWJsZUxpc3RJdGVtIH0gZnJvbSAnLi9zZWxlY3RhYmxlX2xpc3RfaXRlbSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlTZWxlY3RhYmxlTGlzdCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpU2VsZWN0YWJsZUxpc3QsIF9Db21wb25lbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoRXVpU2VsZWN0YWJsZUxpc3QpO1xuXG4gIGZ1bmN0aW9uIEV1aVNlbGVjdGFibGVMaXN0KHByb3BzKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVNlbGVjdGFibGVMaXN0KTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImxpc3RSZWZcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwibGlzdEJveFJlZlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRMaXN0UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RSZWYgPSByZWY7XG5cbiAgICAgIGlmIChyZWYgJiYgX3RoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgICAgcmVmLnNjcm9sbFRvSXRlbShfdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCwgJ2F1dG8nKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZW1vdmVTY3JvbGxhYmxlVGFiU3RvcFwiLCBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAvLyBGaXJlZm94IGFkZHMgYSB0YWIgc3RvcCBmb3Igc2Nyb2xsYWJsZSBjb250YWluZXJzXG4gICAgICAvLyBXZSBoYW5kbGUgdGhpcyBpbnNpZGUgc28gbmVlZCB0byBzdG9wIGZpcmVmb3ggZnJvbSBkb2luZyBpdHMgdGhpbmdcbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZXRMaXN0Qm94UmVmXCIsIGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgIF90aGlzLmxpc3RCb3hSZWYgPSByZWY7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBsaXN0SWQgPSBfdGhpcyRwcm9wcy5saXN0SWQsXG4gICAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzLnNlYXJjaGFibGUsXG4gICAgICAgICAgc2luZ2xlU2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzWydhcmlhLWxhYmVsJ10sXG4gICAgICAgICAgYXJpYUxhYmVsbGVkYnkgPSBfdGhpcyRwcm9wc1snYXJpYS1sYWJlbGxlZGJ5J10sXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5ID0gX3RoaXMkcHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXTtcblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdpZCcsIGxpc3RJZCk7XG4gICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbGlzdGJveCcpO1xuXG4gICAgICAgIGlmIChzZWFyY2hhYmxlICE9PSB0cnVlKSB7XG4gICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuXG4gICAgICAgICAgaWYgKHNpbmdsZVNlbGVjdGlvbiAhPT0gJ2Fsd2F5cycgJiYgc2luZ2xlU2VsZWN0aW9uICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKCdhcmlhLW11bHRpc2VsZWN0YWJsZScsICd0cnVlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmlhTGFiZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGFyaWFMYWJlbCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyaWFMYWJlbGxlZGJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGFyaWFMYWJlbGxlZGJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJpYURlc2NyaWJlZGJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGFyaWFEZXNjcmliZWRieSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJMaXN0Um93XCIsIC8qI19fUFVSRV9fKi9tZW1vKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgICAgICBpbmRleCA9IF9yZWYuaW5kZXgsXG4gICAgICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlO1xuICAgICAgdmFyIG9wdGlvbiA9IGRhdGFbaW5kZXhdO1xuXG4gICAgICB2YXIgb3B0aW9uRGF0YSA9IG9wdGlvbi5kYXRhLFxuICAgICAgICAgIF9vcHRpb24gPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob3B0aW9uLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgbGFiZWwgPSBvcHRpb24ubGFiZWwsXG4gICAgICAgICAgaXNHcm91cExhYmVsID0gb3B0aW9uLmlzR3JvdXBMYWJlbCxcbiAgICAgICAgICBjaGVja2VkID0gb3B0aW9uLmNoZWNrZWQsXG4gICAgICAgICAgZGlzYWJsZWQgPSBvcHRpb24uZGlzYWJsZWQsXG4gICAgICAgICAgcHJlcGVuZCA9IG9wdGlvbi5wcmVwZW5kLFxuICAgICAgICAgIGFwcGVuZCA9IG9wdGlvbi5hcHBlbmQsXG4gICAgICAgICAgcmVmID0gb3B0aW9uLnJlZixcbiAgICAgICAgICBrZXkgPSBvcHRpb24ua2V5LFxuICAgICAgICAgIHNlYXJjaGFibGVMYWJlbCA9IG9wdGlvbi5zZWFyY2hhYmxlTGFiZWwsXG4gICAgICAgICAgX2RhdGEgPSBvcHRpb24uZGF0YSxcbiAgICAgICAgICBvcHRpb25SZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9wdGlvbiwgX2V4Y2x1ZGVkMik7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBhY3RpdmVPcHRpb25JbmRleCA9IF90aGlzJHByb3BzMi5hY3RpdmVPcHRpb25JbmRleCxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wczIuYWxsb3dFeGNsdXNpb25zLFxuICAgICAgICAgIG9uRm9jdXNCYWRnZSA9IF90aGlzJHByb3BzMi5vbkZvY3VzQmFkZ2UsXG4gICAgICAgICAgcGFkZGluZ1NpemUgPSBfdGhpcyRwcm9wczIucGFkZGluZ1NpemUsXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPSBfdGhpcyRwcm9wczIuc2VhcmNoVmFsdWUsXG4gICAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHMyLnNob3dJY29ucyxcbiAgICAgICAgICBtYWtlT3B0aW9uSWQgPSBfdGhpcyRwcm9wczIubWFrZU9wdGlvbklkLFxuICAgICAgICAgIHJlbmRlck9wdGlvbiA9IF90aGlzJHByb3BzMi5yZW5kZXJPcHRpb24sXG4gICAgICAgICAgc2V0QWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczIuc2V0QWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgc2VhcmNoYWJsZSA9IF90aGlzJHByb3BzMi5zZWFyY2hhYmxlLFxuICAgICAgICAgIHRleHRXcmFwID0gX3RoaXMkcHJvcHMyLnRleHRXcmFwO1xuXG4gICAgICBpZiAoaXNHcm91cExhYmVsKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwibGlcIiwgX2V4dGVuZHMoe1xuICAgICAgICAgIHJvbGU6IFwicHJlc2VudGF0aW9uXCIsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0X19ncm91cExhYmVsXCIsXG4gICAgICAgICAgc3R5bGU6IHN0eWxlIC8vIEB0cy1pZ25vcmUgY29tcGxleFxuXG4gICAgICAgIH0sIG9wdGlvblJlc3QpLCBwcmVwZW5kLCBsYWJlbCwgYXBwZW5kKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxhYmVsQ291bnQgPSBkYXRhLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24uaXNHcm91cExhYmVsO1xuICAgICAgfSkubGVuZ3RoO1xuICAgICAgdmFyIGlkID0gbWFrZU9wdGlvbklkKGluZGV4KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVNlbGVjdGFibGVMaXN0SXRlbSwgX2V4dGVuZHMoe1xuICAgICAgICBrZXk6IGlkLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgb25Nb3VzZURvd246IGZ1bmN0aW9uIG9uTW91c2VEb3duKCkge1xuICAgICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4KGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgICAgICAgIGV2ZW50LnBlcnNpc3QoKTsgLy8gTk9URTogVGhpcyBpcyBuZWVkZWQgZm9yIFJlYWN0IHYxNiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXG4gICAgICAgICAgX3RoaXMub25BZGRPclJlbW92ZU9wdGlvbihvcHRpb24sIGV2ZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVmOiByZWYgPyByZWYuYmluZChudWxsLCBpbmRleCkgOiB1bmRlZmluZWQsXG4gICAgICAgIGlzRm9jdXNlZDogYWN0aXZlT3B0aW9uSW5kZXggPT09IGluZGV4LFxuICAgICAgICB0aXRsZTogc2VhcmNoYWJsZUxhYmVsIHx8IGxhYmVsLFxuICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgIHByZXBlbmQ6IHByZXBlbmQsXG4gICAgICAgIGFwcGVuZDogYXBwZW5kLFxuICAgICAgICBcImFyaWEtcG9zaW5zZXRcIjogaW5kZXggKyAxIC0gbGFiZWxDb3VudCxcbiAgICAgICAgXCJhcmlhLXNldHNpemVcIjogZGF0YS5sZW5ndGggLSBsYWJlbENvdW50LFxuICAgICAgICBvbkZvY3VzQmFkZ2U6IG9uRm9jdXNCYWRnZSxcbiAgICAgICAgYWxsb3dFeGNsdXNpb25zOiBhbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgIHNob3dJY29uczogc2hvd0ljb25zLFxuICAgICAgICBwYWRkaW5nU2l6ZTogcGFkZGluZ1NpemUsXG4gICAgICAgIHNlYXJjaGFibGU6IHNlYXJjaGFibGUsXG4gICAgICAgIHRleHRXcmFwOiB0ZXh0V3JhcFxuICAgICAgfSwgb3B0aW9uUmVzdCksIHJlbmRlck9wdGlvbiA/IHJlbmRlck9wdGlvbiggLy8gQHRzLWlnbm9yZSBjb21wbGV4XG4gICAgICBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIF9vcHRpb24pLCBvcHRpb25EYXRhKSwgX3RoaXMucHJvcHMuc2VhcmNoVmFsdWUpIDogX19fRW1vdGlvbkpTWChFdWlIaWdobGlnaHQsIHtcbiAgICAgICAgc2VhcmNoOiBzZWFyY2hWYWx1ZVxuICAgICAgfSwgbGFiZWwpKTtcbiAgICB9LCBhcmVFcXVhbCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQWRkT3JSZW1vdmVPcHRpb25cIiwgZnVuY3Rpb24gKG9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIGlmIChvcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHMzLmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBvcHRpb25zID0gX3RoaXMkcHJvcHMzLm9wdGlvbnMsXG4gICAgICAgICAgX3RoaXMkcHJvcHMzJHZpc2libGVPID0gX3RoaXMkcHJvcHMzLnZpc2libGVPcHRpb25zLFxuICAgICAgICAgIHZpc2libGVPcHRpb25zID0gX3RoaXMkcHJvcHMzJHZpc2libGVPID09PSB2b2lkIDAgPyBvcHRpb25zIDogX3RoaXMkcHJvcHMzJHZpc2libGVPO1xuXG4gICAgICBfdGhpcy5wcm9wcy5zZXRBY3RpdmVPcHRpb25JbmRleCh2aXNpYmxlT3B0aW9ucy5maW5kSW5kZXgoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBsYWJlbCA9IF9yZWYyLmxhYmVsO1xuICAgICAgICByZXR1cm4gbGFiZWwgPT09IG9wdGlvbi5sYWJlbDtcbiAgICAgIH0pLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChvcHRpb24uY2hlY2tlZCA9PT0gJ29uJyAmJiBhbGxvd0V4Y2x1c2lvbnMpIHtcbiAgICAgICAgICBfdGhpcy5vbkV4Y2x1ZGVPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmNoZWNrZWQgPT09ICdvbicgfHwgb3B0aW9uLmNoZWNrZWQgPT09ICdvZmYnKSB7XG4gICAgICAgICAgX3RoaXMub25SZW1vdmVPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMub25BZGRPcHRpb24ob3B0aW9uLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQWRkT3B0aW9uXCIsIGZ1bmN0aW9uIChhZGRlZE9wdGlvbiwgZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHM0Lm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgb3B0aW9ucyA9IF90aGlzJHByb3BzNC5vcHRpb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzNC5zaW5nbGVTZWxlY3Rpb247XG4gICAgICB2YXIgdXBkYXRlZE9wdGlvbnMgPSBvcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIC8vIGlmIHNpbmdsZVNlbGVjdGlvbiBpcyBlbmFibGVkLCB1bmNoZWNrIGFueSBzZWxlY3RlZCBvcHRpb24ocylcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuXG4gICAgICAgIGlmIChzaW5nbGVTZWxlY3Rpb24pIHtcbiAgICAgICAgICBkZWxldGUgdXBkYXRlZE9wdGlvbi5jaGVja2VkO1xuICAgICAgICB9IC8vIGlmIHRoaXMgaXMgdGhlIG5vdy1zZWxlY3RlZCBvcHRpb24sIGNoZWNrIGl0XG5cblxuICAgICAgICBpZiAob3B0aW9uID09PSBhZGRlZE9wdGlvbikge1xuICAgICAgICAgIHVwZGF0ZWRPcHRpb24uY2hlY2tlZCA9ICdvbic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZE9wdGlvbjtcbiAgICAgIH0pO1xuICAgICAgb25PcHRpb25DbGljayh1cGRhdGVkT3B0aW9ucywgZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uUmVtb3ZlT3B0aW9uXCIsIGZ1bmN0aW9uIChyZW1vdmVkT3B0aW9uLCBldmVudCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIG9uT3B0aW9uQ2xpY2sgPSBfdGhpcyRwcm9wczUub25PcHRpb25DbGljayxcbiAgICAgICAgICBzaW5nbGVTZWxlY3Rpb24gPSBfdGhpcyRwcm9wczUuc2luZ2xlU2VsZWN0aW9uLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczUub3B0aW9ucztcbiAgICAgIHZhciB1cGRhdGVkT3B0aW9ucyA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuXG4gICAgICAgIGlmIChvcHRpb24gPT09IHJlbW92ZWRPcHRpb24gJiYgc2luZ2xlU2VsZWN0aW9uICE9PSAnYWx3YXlzJykge1xuICAgICAgICAgIGRlbGV0ZSB1cGRhdGVkT3B0aW9uLmNoZWNrZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZE9wdGlvbjtcbiAgICAgIH0pO1xuICAgICAgb25PcHRpb25DbGljayh1cGRhdGVkT3B0aW9ucywgZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uRXhjbHVkZU9wdGlvblwiLCBmdW5jdGlvbiAoZXhjbHVkZWRPcHRpb24sIGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgb25PcHRpb25DbGljayA9IF90aGlzJHByb3BzNi5vbk9wdGlvbkNsaWNrLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczYub3B0aW9ucztcbiAgICAgIGV4Y2x1ZGVkT3B0aW9uLmNoZWNrZWQgPSAnb2ZmJztcbiAgICAgIHZhciB1cGRhdGVkT3B0aW9ucyA9IG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRPcHRpb24gPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRpb24pO1xuXG4gICAgICAgIGlmIChvcHRpb24gPT09IGV4Y2x1ZGVkT3B0aW9uKSB7XG4gICAgICAgICAgdXBkYXRlZE9wdGlvbi5jaGVja2VkID0gJ29mZic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZE9wdGlvbjtcbiAgICAgIH0pO1xuICAgICAgb25PcHRpb25DbGljayh1cGRhdGVkT3B0aW9ucywgZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVNlbGVjdGFibGVMaXN0LCBbe1xuICAgIGtleTogXCJjb21wb25lbnREaWRVcGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIGFjdGl2ZU9wdGlvbkluZGV4ID0gdGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleDtcblxuICAgICAgaWYgKHRoaXMubGlzdEJveFJlZiAmJiB0aGlzLnByb3BzLnNlYXJjaGFibGUgIT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5saXN0Qm94UmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgXCJcIi5jb25jYXQodGhpcy5wcm9wcy5tYWtlT3B0aW9uSWQoYWN0aXZlT3B0aW9uSW5kZXgpKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxpc3RSZWYgJiYgdHlwZW9mIHRoaXMucHJvcHMuYWN0aXZlT3B0aW9uSW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMubGlzdFJlZi5zY3JvbGxUb0l0ZW0odGhpcy5wcm9wcy5hY3RpdmVPcHRpb25JbmRleCwgJ2F1dG8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczcuY2xhc3NOYW1lLFxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpcyRwcm9wczcub3B0aW9ucyxcbiAgICAgICAgICBzZWFyY2hWYWx1ZSA9IF90aGlzJHByb3BzNy5zZWFyY2hWYWx1ZSxcbiAgICAgICAgICBvbk9wdGlvbkNsaWNrID0gX3RoaXMkcHJvcHM3Lm9uT3B0aW9uQ2xpY2ssXG4gICAgICAgICAgcmVuZGVyT3B0aW9uID0gX3RoaXMkcHJvcHM3LnJlbmRlck9wdGlvbixcbiAgICAgICAgICBmb3JjZWRIZWlnaHQgPSBfdGhpcyRwcm9wczcuaGVpZ2h0LFxuICAgICAgICAgIHdpbmRvd1Byb3BzID0gX3RoaXMkcHJvcHM3LndpbmRvd1Byb3BzLFxuICAgICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzNy5yb3dIZWlnaHQsXG4gICAgICAgICAgYWN0aXZlT3B0aW9uSW5kZXggPSBfdGhpcyRwcm9wczcuYWN0aXZlT3B0aW9uSW5kZXgsXG4gICAgICAgICAgbWFrZU9wdGlvbklkID0gX3RoaXMkcHJvcHM3Lm1ha2VPcHRpb25JZCxcbiAgICAgICAgICBzaG93SWNvbnMgPSBfdGhpcyRwcm9wczcuc2hvd0ljb25zLFxuICAgICAgICAgIHNpbmdsZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzNy5zaW5nbGVTZWxlY3Rpb24sXG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnMgPSBfdGhpcyRwcm9wczcudmlzaWJsZU9wdGlvbnMsXG4gICAgICAgICAgYWxsb3dFeGNsdXNpb25zID0gX3RoaXMkcHJvcHM3LmFsbG93RXhjbHVzaW9ucyxcbiAgICAgICAgICBib3JkZXJlZCA9IF90aGlzJHByb3BzNy5ib3JkZXJlZCxcbiAgICAgICAgICBwYWRkaW5nU2l6ZSA9IF90aGlzJHByb3BzNy5wYWRkaW5nU2l6ZSxcbiAgICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHM3LnNlYXJjaGFibGUsXG4gICAgICAgICAgb25Gb2N1c0JhZGdlID0gX3RoaXMkcHJvcHM3Lm9uRm9jdXNCYWRnZSxcbiAgICAgICAgICBsaXN0SWQgPSBfdGhpcyRwcm9wczcubGlzdElkLFxuICAgICAgICAgIHNldEFjdGl2ZU9wdGlvbkluZGV4ID0gX3RoaXMkcHJvcHM3LnNldEFjdGl2ZU9wdGlvbkluZGV4LFxuICAgICAgICAgIGFyaWFMYWJlbCA9IF90aGlzJHByb3BzN1snYXJpYS1sYWJlbCddLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZGJ5ID0gX3RoaXMkcHJvcHM3WydhcmlhLWxhYmVsbGVkYnknXSxcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkYnkgPSBfdGhpcyRwcm9wczdbJ2FyaWEtZGVzY3JpYmVkYnknXSxcbiAgICAgICAgICByb2xlID0gX3RoaXMkcHJvcHM3LnJvbGUsXG4gICAgICAgICAgaXNWaXJ0dWFsaXplZCA9IF90aGlzJHByb3BzNy5pc1ZpcnR1YWxpemVkLFxuICAgICAgICAgIHRleHRXcmFwID0gX3RoaXMkcHJvcHM3LnRleHRXcmFwLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHM3LCBfZXhjbHVkZWQzKTtcblxuICAgICAgdmFyIG9wdGlvbkFycmF5ID0gdmlzaWJsZU9wdGlvbnMgfHwgb3B0aW9ucztcbiAgICAgIHZhciBoZWlnaHRJc0Z1bGwgPSBmb3JjZWRIZWlnaHQgPT09ICdmdWxsJztcbiAgICAgIHZhciBjYWxjdWxhdGVkSGVpZ2h0ID0gaGVpZ2h0SXNGdWxsID8gZmFsc2UgOiBmb3JjZWRIZWlnaHQ7IC8vIElmIGNhbGN1bGF0ZWRIZWlnaHQgaXMgc3RpbGwgdW5kZWZpbmVkLCB0aGVuIGNhbGN1bGF0ZSBpdFxuXG4gICAgICBpZiAoY2FsY3VsYXRlZEhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBtYXhWaXNpYmxlT3B0aW9ucyA9IDc7XG4gICAgICAgIHZhciBudW1WaXNpYmxlT3B0aW9ucyA9IG9wdGlvbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgdmFyIG51bVZpc2libGVNb3JlVGhhbk1heCA9IG9wdGlvbkFycmF5Lmxlbmd0aCA+IG1heFZpc2libGVPcHRpb25zO1xuXG4gICAgICAgIGlmIChudW1WaXNpYmxlTW9yZVRoYW5NYXgpIHtcbiAgICAgICAgICAvLyBTaG93IG9ubHkgaGFsZiBvZiB0aGUgbGFzdCBvbmUgdG8gaW5kaWNhdGUgdGhlcmUncyBtb3JlIHRvIHNjcm9sbCB0b1xuICAgICAgICAgIGNhbGN1bGF0ZWRIZWlnaHQgPSAobWF4VmlzaWJsZU9wdGlvbnMgLSAwLjUpICogcm93SGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhbGN1bGF0ZWRIZWlnaHQgPSBudW1WaXNpYmxlT3B0aW9ucyAqIHJvd0hlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0Jywge1xuICAgICAgICAnZXVpU2VsZWN0YWJsZUxpc3QtZnVsbEhlaWdodCc6IGhlaWdodElzRnVsbCxcbiAgICAgICAgJ2V1aVNlbGVjdGFibGVMaXN0LWJvcmRlcmVkJzogYm9yZGVyZWRcbiAgICAgIH0sIGNsYXNzTmFtZSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgfSwgcmVzdCksIGlzVmlydHVhbGl6ZWQgPyBfX19FbW90aW9uSlNYKEV1aUF1dG9TaXplciwge1xuICAgICAgICBkaXNhYmxlSGVpZ2h0OiAhaGVpZ2h0SXNGdWxsXG4gICAgICB9LCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgdmFyIHdpZHRoID0gX3JlZjMud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQgPSBfcmVmMy5oZWlnaHQ7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEZpeGVkU2l6ZUxpc3QsIF9leHRlbmRzKHtcbiAgICAgICAgICByZWY6IF90aGlzMi5zZXRMaXN0UmVmLFxuICAgICAgICAgIG91dGVyUmVmOiBfdGhpczIucmVtb3ZlU2Nyb2xsYWJsZVRhYlN0b3AsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0X19saXN0XCIsXG4gICAgICAgICAgXCJkYXRhLXNraXAtYXhlXCI6IFwic2Nyb2xsYWJsZS1yZWdpb24tZm9jdXNhYmxlXCIsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIGhlaWdodDogY2FsY3VsYXRlZEhlaWdodCB8fCBoZWlnaHQsXG4gICAgICAgICAgaXRlbUNvdW50OiBvcHRpb25BcnJheS5sZW5ndGgsXG4gICAgICAgICAgaXRlbURhdGE6IG9wdGlvbkFycmF5LFxuICAgICAgICAgIGl0ZW1TaXplOiByb3dIZWlnaHQsXG4gICAgICAgICAgaW5uZXJFbGVtZW50VHlwZTogXCJ1bFwiLFxuICAgICAgICAgIGlubmVyUmVmOiBfdGhpczIuc2V0TGlzdEJveFJlZlxuICAgICAgICB9LCB3aW5kb3dQcm9wcyksIF90aGlzMi5MaXN0Um93KTtcbiAgICAgIH0pIDogX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlTZWxlY3RhYmxlTGlzdF9fbGlzdFwiLFxuICAgICAgICByZWY6IHRoaXMucmVtb3ZlU2Nyb2xsYWJsZVRhYlN0b3BcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goXCJ1bFwiLCB7XG4gICAgICAgIHJlZjogdGhpcy5zZXRMaXN0Qm94UmVmXG4gICAgICB9LCBvcHRpb25BcnJheS5tYXAoZnVuY3Rpb24gKF8sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChfdGhpczIuTGlzdFJvdywge1xuICAgICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgICAgZGF0YTogb3B0aW9uQXJyYXksXG4gICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH0sIG51bGwpO1xuICAgICAgfSkpKSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV1aVNlbGVjdGFibGVMaXN0O1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpU2VsZWN0YWJsZUxpc3QsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgcm93SGVpZ2h0OiAzMixcbiAgc2VhcmNoVmFsdWU6ICcnLFxuICBpc1ZpcnR1YWxpemVkOiB0cnVlXG59KTtcblxuRXVpU2VsZWN0YWJsZUxpc3QucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBUaGUgaW5kZXggb2YgdGhlIG9wdGlvbiB0byBiZSBoaWdobGlnaHRlZCBhcyBwc2V1ZG8tZm9jdXNlZDtcbiAgICAgICAqIEdvb2QgZm9yIHVzZSB3aGVuIG9ubHkgb25lIHNlbGVjdGlvbiBpcyBhbGxvd2VkIGFuZCBuZWVkaW5nIHRvIG9wZW5cbiAgICAgICAqIGRpcmVjdGx5IHRvIHRoYXQgb3B0aW9uXG4gICAgICAgKi9cbiAgYWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG5cbiAgLyoqXG4gICAgICAgKiBTaG93IHRoZSBjaGVjay9jcm9zcyBzZWxlY3Rpb24gaW5kaWNhdG9yIGljb25zXG4gICAgICAgKi9cbiAgc2hvd0ljb25zOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2luZ2xlU2VsZWN0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWx3YXlzXCJdKSwgUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAgICogQW55IHByb3BzIHRvIHNlbmQgc3BlY2lmaWNhbGx5IHRvIHRoZSByZWFjdC13aW5kb3cgYEZpeGVkU2l6ZUxpc3RgXG4gICAgICAgKi9cbiAgd2luZG93UHJvcHM6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBBZGRzIGEgYm9yZGVyIGFyb3VuZCB0aGUgbGlzdCB0byBpbmRpY2F0ZSB0aGUgYm91bmRzO1xuICAgICAgICogVXNlZnVsIHdoZW4gdGhlIGxpc3Qgc2Nyb2xscywgb3RoZXJ3aXNlIHVzZSB5b3VyIG93biBjb250YWluZXJcbiAgICAgICAqL1xuICBib3JkZXJlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBXaGVuIGVuYWJsZWQgYnkgc2V0dGluZyB0byBlaXRoZXIgYHRydWVgIG9yIHBhc3NpbmcgY3VzdG9tIHRleHQsXG4gICAgICAgKiBzaG93cyBhIGhvbGxvdyBiYWRnZSBhcyBhbiBhcHBlbmQgKGZhciByaWdodCkgd2hlbiB0aGUgaXRlbSBpcyBmb2N1c2VkLlxuICAgICAgICogVGhlIGRlZmF1bHQgY29udGVudCB3aGVuIGB0cnVlYCBpcyBgXHUyMUE5IHRvIHNlbGVjdC9kZXNlbGVjdC9pbmNsdWRlL2V4Y2x1ZGVgXG4gICAgICAgKi9cbiAgb25Gb2N1c0JhZGdlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBhbnkgc3RyaW5nIGZyb20gb3VyIGljb24gbGlicmFyeVxuICAgICAgICovXG4gICAgaWNvblR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudFR5cGUuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgc2lkZSBvZiB0aGUgYmFkZ2UgdGhlIGljb24gc2hvdWxkIHNpdFxuICAgICAgICovXG4gICAgaWNvblNpZGU6IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBBY2NlcHRzIGVpdGhlciBvdXIgcGFsZXR0ZSBjb2xvcnMgKHByaW1hcnksIHN1Y2Nlc3MgLi5ldGMpIG9yIGEgaGV4IHZhbHVlIGAjRkZGRkZGYCwgYCMwMDBgLlxuICAgICAgICovXG4gICAgY29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIFdpbGwgb3ZlcnJpZGUgYW55IGNvbG9yIHBhc3NlZCB0aHJvdWdoIHRoZSBgY29sb3JgIHByb3AuXG4gICAgICAgKi9cbiAgICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogUHJvcHMgcGFzc2VkIHRvIHRoZSBjbG9zZSBidXR0b24uXG4gICAgICAgKi9cbiAgICBjbG9zZUJ1dHRvblByb3BzOiBQcm9wVHlwZXMuYW55LFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIFdpbGwgYXBwbHkgYW4gb25jbGljayB0byBpY29uIHdpdGhpbiB0aGUgYmFkZ2VcbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQXJpYSBsYWJlbCBhcHBsaWVkIHRvIHRoZSBpY29uT25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIGljb25PbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gdGhlIGJhZGdlIGl0c2VsZlxuICAgICAgICovXG4gICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgb25DbGljayBidXR0b25cbiAgICAgICAqL1xuICAgIG9uQ2xpY2tBcmlhTGFiZWw6IFByb3BUeXBlcy5hbnksXG4gICAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVsOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgICAqIFBhZGRpbmcgZm9yIHRoZSBsaXN0IGl0ZW1zLlxuICAgICAgICovXG4gIHBhZGRpbmdTaXplOiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgICAgICogSG93IHRvIGhhbmRsZSBsb25nIHRleHQgd2l0aGluIHRoZSBpdGVtLlxuICAgICAgICogV3JhcHBpbmcgb25seSB3b3JrcyBpZiB2aXJ0dWFsaXphdGlvbiBpcyBvZmYuXG4gICAgICAgKi9cbiAgdGV4dFdyYXA6IFByb3BUeXBlcy5vbmVPZihbXCJ0cnVuY2F0ZVwiLCBcIndyYXBcIl0pLFxuXG4gIC8qKlxuICAgICAgICogVXNlIHZpcnR1YWxpemVkIHJlbmRlcmluZyBmb3IgbGlzdCBpdGVtcyB3aXRoIGByZWFjdC13aW5kb3dgLlxuICAgICAgICogU2V0cyBlYWNoIHJvdydzIGhlaWdodCB0byB0aGUgdmFsdWUgb2YgYHJvd0hlaWdodGAuXG4gICAgICAgKi9cbiAgaXNWaXJ0dWFsaXplZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFt0cnVlXSksIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiAgVGhlIGhlaWdodCBvZiBlYWNoIG9wdGlvbiBpbiBwaXhlbHMuIERlZmF1bHRzIHRvIGAzMmAuXG4gICAgICAgKiAgSGFzIG5vIGVmZmVjdCBpZiBgaXNWaXJ0dWFsaXplZD1mYWxzZWAuXG4gICAgICAgKi9cbiAgcm93SGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKlxuICAgICAqIEFsbCBwb3NzaWJsZSBvcHRpb25zXG4gICAgICovXG4gIG9wdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbCBgYm9vbGVhbmAuXG4gICAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGluZGljYXRlIG9iamVjdCBpcyBqdXN0IGEgZ3JvdXBpbmcgbGFiZWwsIG5vdCBhIHNlbGVjdGFibGUgaXRlbVxuICAgICAgICovXG4gICAgaXNHcm91cExhYmVsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW3RydWVdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMub25lT2YoW2ZhbHNlXSldKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBWaXNpYmxlIGxhYmVsIG9mIG9wdGlvbi5cbiAgICAgICAqIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBpdGVtcyBpZiBga2V5YCBpcyBub3Qgc3VwcGxpZWRcbiAgICAgICAqL1xuICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb25hbGx5IGNoYW5nZSB0aGUgc2VhcmNoYWJsZSB0ZXJtIGJ5IHBhc3NpbmcgYSBkaWZmZXJlbnQgc3RyaW5nIG90aGVyIHRoYW4gdGhlIGBsYWJlbGAuXG4gICAgICAgKiBCZXN0IHVzZWQgd2hlbiBjcmVhdGluZyBhIGN1c3RvbSBgb3B0aW9uUmVuZGVyYCB0byBzZXBhcmF0ZSB0aGUgbGFiZWwgZnJvbSBtZXRhZGF0YSBidXQgYWxsb3dpbmcgdG8gc2VhcmNoIG9uIGJvdGhcbiAgICAgICAqL1xuICAgIHNlYXJjaGFibGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogTXVzdCBiZSB1bmlxdWUgYWNyb3NzIGl0ZW1zLlxuICAgICAgICogV2lsbCBiZSB1c2VkIHRvIG1hdGNoIG9wdGlvbnMgaW5zdGVhZCBvZiBgbGFiZWxgXG4gICAgICAgKi9cbiAgICBrZXk6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIExlYXZlIGB1bmRlZmluZWRgIHRvIGluZGljYXRlIG5vdCBzZWxlY3RlZCxcbiAgICAgICAqICdvbicgdG8gaW5kaWNhdGUgaW5jbHVzaW9uIGFuZFxuICAgICAgICogJ29mZicgdG8gaW5kaWNhdGUgZXhjbHVzaW9uXG4gICAgICAgKi9cbiAgICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIiwgdW5kZWZpbmVkXSksXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBOb2RlIHRvIGFkZCBiZXR3ZWVuIHRoZSBzZWxlY3Rpb24gaWNvbiBhbmQgdGhlIGxhYmVsXG4gICAgICAgKi9cbiAgICBwcmVwZW5kOiBQcm9wVHlwZXMubm9kZSxcblxuICAgIC8qKlxuICAgICAgICogTm9kZSB0byBhZGQgdG8gdGhlIGZhciByaWdodCBvZiB0aGUgaXRlbVxuICAgICAgICovXG4gICAgYXBwZW5kOiBQcm9wVHlwZXMubm9kZSxcbiAgICByZWY6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBPcHRpb24gZGF0YSB0byBwYXNzIHRocm91Z2ggdG8gdGhlIGByZW5kZXJPcHRpb25zYCBlbGVtZW50LlxuICAgICAgICogQnlwYXNzIGBFdWlTZWxlY3RhYmxlSXRlbWAgYW5kIGF2b2lkIERPTSBhdHRyaWJ1dGUgd2FybmluZ3MuXG4gICAgICAgKi9cbiAgICBkYXRhOiBQcm9wVHlwZXMuc2hhcGUoe30pXG4gIH0pLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogRmlsdGVyZWQgb3B0aW9ucyBsaXN0IChpZiBhcHBsaWNhYmxlKVxuICAgICAqL1xuICB2aXNpYmxlT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpc0dyb3VwTGFiZWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdHJ1ZV0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5vbmVPZihbZmFsc2VdKV0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VhcmNoYWJsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjaGVja2VkOiBQcm9wVHlwZXMub25lT2YoW1wib25cIiwgXCJvZmZcIiwgdW5kZWZpbmVkXSksXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHByZXBlbmQ6IFByb3BUeXBlcy5ub2RlLFxuICAgIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gICAgcmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBkYXRhOiBQcm9wVHlwZXMuc2hhcGUoe30pXG4gIH0pLmlzUmVxdWlyZWQpLFxuXG4gIC8qKlxuICAgICAqIFNlYXJjaCB2YWx1ZSB0byBoaWdobGlnaHQgb24gdGhlIG9wdGlvbiByZW5kZXJcbiAgICAgKi9cbiAgc2VhcmNoVmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhcnJheSBvZiBvcHRpb25zIHdpdGggYWx0ZXJlZCBjaGVja2VkIHN0YXRlXG4gICAgICovXG4gIG9uT3B0aW9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAgICogQ3VzdG9tIHJlbmRlciBmb3IgdGhlIGxhYmVsIHBvcnRpb24gb2YgdGhlIG9wdGlvbjtcbiAgICAgKiBUYWtlcyAob3B0aW9uLCBzZWFyY2hWYWx1ZSksIHJldHVybnMgUmVhY3ROb2RlXG4gICAgICovXG4gIHJlbmRlck9wdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF4IGhlaWdodCBpbiBwaXhlbHMgb3IgcGFzcyBgZnVsbGAgdG8gYWxsb3dcbiAgICAgKiB0aGUgd2hvbGUgZ3JvdXAgdG8gZmlsbCB0aGUgaGVpZ2h0IG9mIGl0cyBjb250YWluZXIgYW5kXG4gICAgICogYWxsb3dzIHRoZSBsaXN0IGdyb3cgYXMgd2VsbFxuICAgICAqL1xuICBoZWlnaHQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm9uZU9mKFtcImZ1bGxcIl0pXSksXG5cbiAgLyoqXG4gICAgICogQWxsb3cgY3ljbGluZyB0aHJvdWdoIHRoZSBvbiwgb2ZmIGFuZCB1bmRlZmluZWQgc3RhdGUgb2Ygb3B0aW9uLmNoZWNrZWRcbiAgICAgKiBhbmQgbm90IGp1c3Qgb24gYW5kIHVuZGVmaW5lZFxuICAgICAqL1xuICBhbGxvd0V4Y2x1c2lvbnM6IFByb3BUeXBlcy5ib29sLFxuICBzZWFyY2hhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgbWFrZU9wdGlvbklkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBsaXN0SWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2V0QWN0aXZlT3B0aW9uSW5kZXg6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJjaGVja2VkXCIsIFwiaXNGb2N1c2VkXCIsIFwic2hvd0ljb25zXCIsIFwicHJlcGVuZFwiLCBcImFwcGVuZFwiLCBcImFsbG93RXhjbHVzaW9uc1wiLCBcIm9uRm9jdXNCYWRnZVwiLCBcInBhZGRpbmdTaXplXCIsIFwicm9sZVwiLCBcInNlYXJjaGFibGVcIiwgXCJ0ZXh0V3JhcFwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsga2V5c09mIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi8uLi9pY29uJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi8uLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUJhZGdlIH0gZnJvbSAnLi4vLi4vYmFkZ2UnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcblxuZnVuY3Rpb24gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSB7XG4gIGlmICghY2hlY2tlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpY29uOiAnZW1wdHknXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBjaGVja2VkID09PSAnb24nID8ge1xuICAgIGljb246ICdjaGVjaycsXG4gICAgY29sb3I6ICd0ZXh0J1xuICB9IDoge1xuICAgIGljb246ICdjcm9zcycsXG4gICAgY29sb3I6ICd0ZXh0J1xuICB9O1xufVxuXG52YXIgcGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCA9IHtcbiAgbm9uZTogbnVsbCxcbiAgczogJ2V1aVNlbGVjdGFibGVMaXN0SXRlbS0tcGFkZGluZ1NtYWxsJ1xufTtcbmV4cG9ydCB2YXIgUEFERElOR19TSVpFUyA9IGtleXNPZihwYWRkaW5nU2l6ZVRvQ2xhc3NOYW1lTWFwKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcmVmZXItc3RhdGVsZXNzLWZ1bmN0aW9uXG5leHBvcnQgdmFyIEV1aVNlbGVjdGFibGVMaXN0SXRlbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpU2VsZWN0YWJsZUxpc3RJdGVtLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVNlbGVjdGFibGVMaXN0SXRlbSk7XG5cbiAgZnVuY3Rpb24gRXVpU2VsZWN0YWJsZUxpc3RJdGVtKHByb3BzKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV1aVNlbGVjdGFibGVMaXN0SXRlbSk7XG5cbiAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVNlbGVjdGFibGVMaXN0SXRlbSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgZGlzYWJsZWQgPSBfdGhpcyRwcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgICBjaGVja2VkID0gX3RoaXMkcHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICBpc0ZvY3VzZWQgPSBfdGhpcyRwcm9wcy5pc0ZvY3VzZWQsXG4gICAgICAgICAgc2hvd0ljb25zID0gX3RoaXMkcHJvcHMuc2hvd0ljb25zLFxuICAgICAgICAgIHByZXBlbmQgPSBfdGhpcyRwcm9wcy5wcmVwZW5kLFxuICAgICAgICAgIGFwcGVuZCA9IF90aGlzJHByb3BzLmFwcGVuZCxcbiAgICAgICAgICBhbGxvd0V4Y2x1c2lvbnMgPSBfdGhpcyRwcm9wcy5hbGxvd0V4Y2x1c2lvbnMsXG4gICAgICAgICAgb25Gb2N1c0JhZGdlID0gX3RoaXMkcHJvcHMub25Gb2N1c0JhZGdlLFxuICAgICAgICAgIF90aGlzJHByb3BzJHBhZGRpbmdTaSA9IF90aGlzJHByb3BzLnBhZGRpbmdTaXplLFxuICAgICAgICAgIHBhZGRpbmdTaXplID0gX3RoaXMkcHJvcHMkcGFkZGluZ1NpID09PSB2b2lkIDAgPyAncycgOiBfdGhpcyRwcm9wcyRwYWRkaW5nU2ksXG4gICAgICAgICAgX3RoaXMkcHJvcHMkcm9sZSA9IF90aGlzJHByb3BzLnJvbGUsXG4gICAgICAgICAgcm9sZSA9IF90aGlzJHByb3BzJHJvbGUgPT09IHZvaWQgMCA/ICdvcHRpb24nIDogX3RoaXMkcHJvcHMkcm9sZSxcbiAgICAgICAgICBzZWFyY2hhYmxlID0gX3RoaXMkcHJvcHMuc2VhcmNoYWJsZSxcbiAgICAgICAgICB0ZXh0V3JhcCA9IF90aGlzJHByb3BzLnRleHRXcmFwLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpU2VsZWN0YWJsZUxpc3RJdGVtJywge1xuICAgICAgICAnZXVpU2VsZWN0YWJsZUxpc3RJdGVtLWlzRm9jdXNlZCc6IGlzRm9jdXNlZFxuICAgICAgfSwgcGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcFtwYWRkaW5nU2l6ZV0sIGNsYXNzTmFtZSk7XG4gICAgICB2YXIgdGV4dENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlTZWxlY3RhYmxlTGlzdEl0ZW1fX3RleHQnLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX190ZXh0LS1cIi5jb25jYXQodGV4dFdyYXApLCB0ZXh0V3JhcCkpO1xuICAgICAgdmFyIG9wdGlvbkljb247XG5cbiAgICAgIGlmIChzaG93SWNvbnMpIHtcbiAgICAgICAgdmFyIF9yZXNvbHZlSWNvbkFuZENvbG9yID0gcmVzb2x2ZUljb25BbmRDb2xvcihjaGVja2VkKSxcbiAgICAgICAgICAgIGljb24gPSBfcmVzb2x2ZUljb25BbmRDb2xvci5pY29uLFxuICAgICAgICAgICAgY29sb3IgPSBfcmVzb2x2ZUljb25BbmRDb2xvci5jb2xvcjtcblxuICAgICAgICBvcHRpb25JY29uID0gX19fRW1vdGlvbkpTWChFdWlJY29uLCB7XG4gICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9faWNvblwiLFxuICAgICAgICAgIGNvbG9yOiBjb2xvcixcbiAgICAgICAgICB0eXBlOiBpY29uXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhdGU7XG4gICAgICB2YXIgaW5zdHJ1Y3Rpb247XG5cbiAgICAgIGlmIChhbGxvd0V4Y2x1c2lvbnMgJiYgY2hlY2tlZCA9PT0gJ29uJykge1xuICAgICAgICBzdGF0ZSA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5pbmNsdWRlZE9wdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0ZWQgb3B0aW9uLlwiXG4gICAgICAgIH0pO1xuICAgICAgICBpbnN0cnVjdGlvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5pbmNsdWRlZE9wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gZXhjbHVkZSB0aGlzIG9wdGlvbiwgcHJlc3MgZW50ZXIuXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGFsbG93RXhjbHVzaW9ucyAmJiBjaGVja2VkID09PSAnb2ZmJykge1xuICAgICAgICBzdGF0ZSA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5leGNsdWRlZE9wdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiRXhjbHVkZWQgb3B0aW9uLlwiXG4gICAgICAgIH0pO1xuICAgICAgICBpbnN0cnVjdGlvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5leGNsdWRlZE9wdGlvbkluc3RydWN0aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiVG8gdW5jaGVjayB0aGlzIG9wdGlvbiwgcHJlc3MgZW50ZXIuXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGFsbG93RXhjbHVzaW9ucyAmJiAhY2hlY2tlZCkge1xuICAgICAgICBpbnN0cnVjdGlvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS51bmNrZWNrZWRPcHRpb25JbnN0cnVjdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIlRvIHNlbGVjdCB0aGlzIG9wdGlvbiwgcHJlc3MgZW50ZXIuXCJcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0NoZWNrZWQgPSAhZGlzYWJsZWQgJiYgdHlwZW9mIGNoZWNrZWQgPT09ICdzdHJpbmcnO1xuXG4gICAgICBpZiAoIWFsbG93RXhjbHVzaW9ucyAmJiBpc0NoZWNrZWQpIHtcbiAgICAgICAgc3RhdGUgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlTZWxlY3RhYmxlTGlzdEl0ZW0uY2hlY2tlZE9wdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiQ2hlY2tlZCBvcHRpb24uXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGluc3RydWN0aW9uID0gc2VhcmNoYWJsZSA/IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgIHRva2VuOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbS5jaGVja2VkT3B0aW9uSW5zdHJ1Y3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJUbyB1bmNoZWNrIHRoaXMgb3B0aW9uLCBwcmVzcyBlbnRlci5cIlxuICAgICAgICB9KSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgdmFyIHByZXBlbmROb2RlO1xuXG4gICAgICBpZiAocHJlcGVuZCkge1xuICAgICAgICBwcmVwZW5kTm9kZSA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19wcmVwZW5kXCJcbiAgICAgICAgfSwgcHJlcGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcHBlbmROb2RlO1xuXG4gICAgICBpZiAoYXBwZW5kIHx8ICEhb25Gb2N1c0JhZGdlKSB7XG4gICAgICAgIHZhciBvbkZvY3VzQmFkZ2VOb2RlO1xuICAgICAgICB2YXIgZGVmYXVsdE9uRm9jdXNCYWRnZVByb3BzID0ge1xuICAgICAgICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgICAgICAgaWNvblR5cGU6ICdyZXR1cm5LZXknLFxuICAgICAgICAgIGljb25TaWRlOiAnbGVmdCcsXG4gICAgICAgICAgY29sb3I6ICdob2xsb3cnXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG9uRm9jdXNCYWRnZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG9uRm9jdXNCYWRnZU5vZGUgPSBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiZXVpU2VsZWN0YWJsZUxpc3RJdGVtX19vbkZvY3VzQmFkZ2VcIlxuICAgICAgICAgIH0sIGRlZmF1bHRPbkZvY3VzQmFkZ2VQcm9wcykpO1xuICAgICAgICB9IGVsc2UgaWYgKCEhb25Gb2N1c0JhZGdlICYmIG9uRm9jdXNCYWRnZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICB2YXIgX2NoaWxkcmVuID0gb25Gb2N1c0JhZGdlLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBfY2xhc3NOYW1lID0gb25Gb2N1c0JhZGdlLmNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgcmVzdEJhZGdlUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob25Gb2N1c0JhZGdlLCBfZXhjbHVkZWQyKTtcblxuICAgICAgICAgIG9uRm9jdXNCYWRnZU5vZGUgPSBfX19FbW90aW9uSlNYKEV1aUJhZGdlLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2V1aVNlbGVjdGFibGVMaXN0SXRlbV9fb25Gb2N1c0JhZGdlJywgX2NsYXNzTmFtZSlcbiAgICAgICAgICB9LCBkZWZhdWx0T25Gb2N1c0JhZGdlUHJvcHMsIHJlc3RCYWRnZVByb3BzKSwgX2NoaWxkcmVuKTtcbiAgICAgICAgfSAvLyBPbmx5IGRpc3BsYXkgdGhlIGFwcGVuZCB3cmFwcGVyIGlmIGFwcGVuZCBleGlzdHMgb3IgaXNGb2N1c2VkXG5cblxuICAgICAgICBpZiAoYXBwZW5kIHx8IGlzRm9jdXNlZCAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgICBhcHBlbmROb2RlID0gX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fYXBwZW5kXCJcbiAgICAgICAgICB9LCBhcHBlbmQsIFwiIFwiLCBpc0ZvY3VzZWQgJiYgIWRpc2FibGVkID8gb25Gb2N1c0JhZGdlTm9kZSA6IG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnN0cnVjdGlvbnMgPSAoaW5zdHJ1Y3Rpb24gfHwgc3RhdGUpICYmIF9fX0Vtb3Rpb25KU1goRXVpU2NyZWVuUmVhZGVyT25seSwgbnVsbCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCBudWxsLCBzdGF0ZSB8fCBpbnN0cnVjdGlvbiA/ICcgLSAnIDogbnVsbCwgc3RhdGUsIHN0YXRlICYmIGluc3RydWN0aW9uID8gJyAnIDogbnVsbCwgaW5zdHJ1Y3Rpb24pKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJsaVwiLCBfZXh0ZW5kcyh7XG4gICAgICAgIHJvbGU6IHJvbGUsXG4gICAgICAgIFwiZGF0YS10ZXN0LXNlbGVjdGVkXCI6IGlzQ2hlY2tlZCAvLyBXaGV0aGVyIHRoZSBpdGVtIGlzIGNoZWNrZWQvc2VsZWN0ZWRcbiAgICAgICAgLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiByb2xlID09PSAnb3B0aW9uJyA/IGlzQ2hlY2tlZCA6IHVuZGVmaW5lZCAvLyBXaGV0aGVyIHRoZSBpdGVtIGlzIFwiY2hlY2tlZFwiXG4gICAgICAgICxcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6ICFkaXNhYmxlZCAmJiBpc0ZvY3VzZWQgLy8gV2hldGhlciB0aGUgaXRlbSBoYXMga2V5Ym9hcmQgZm9jdXMgcGVyIFczIHNwZWNcbiAgICAgICAgLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMsXG4gICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBkaXNhYmxlZFxuICAgICAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImV1aVNlbGVjdGFibGVMaXN0SXRlbV9fY29udGVudFwiXG4gICAgICB9LCBvcHRpb25JY29uLCBwcmVwZW5kTm9kZSwgX19fRW1vdGlvbkpTWChcInNwYW5cIiwge1xuICAgICAgICBjbGFzc05hbWU6IHRleHRDbGFzc2VzXG4gICAgICB9LCBjaGlsZHJlbiwgaW5zdHJ1Y3Rpb25zKSwgYXBwZW5kTm9kZSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlTZWxlY3RhYmxlTGlzdEl0ZW07XG59KENvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdWlTZWxlY3RhYmxlTGlzdEl0ZW0sIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgc2hvd0ljb25zOiB0cnVlLFxuICBvbkZvY3VzQmFkZ2U6IHRydWUsXG4gIHRleHRXcmFwOiAndHJ1bmNhdGUnXG59KTtcblxuRXVpU2VsZWN0YWJsZUxpc3RJdGVtLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBBcHBsaWVzIGFuIGljb24gYW5kIHZpc3VhbCBzdHlsaW5nIHRvIGFjdGl2YXRlZCBpdGVtc1xuICAgICAgICovXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5vbmVPZihbXCJvblwiLCBcIm9mZlwiLCB1bmRlZmluZWRdKSxcblxuICAvKipcbiAgICAgICAqIFNob3dzIGljb25zIGJhc2VkIG9uIGBjaGVja2VkYCB0eXBlXG4gICAgICAgKi9cbiAgc2hvd0ljb25zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgICAqIEhpZ2hsaWdodHMgdGhlIGl0ZW0gZm9yIHBzZXVkbyBmb2N1c1xuICAgICAgICovXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgcHJlcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gIGFwcGVuZDogUHJvcFR5cGVzLm5vZGUsXG4gIGFsbG93RXhjbHVzaW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBXaGVuIGVuYWJsZWQgYnkgc2V0dGluZyB0byBlaXRoZXIgYHRydWVgIG9yIHBhc3NpbmcgY3VzdG9tIGEgY3VzdG9tIGJhZGdlLFxuICAgICAgICogc2hvd3MgYSBob2xsb3cgYmFkZ2UgYXMgYW4gYXBwZW5kIChmYXIgcmlnaHQpIHdoZW4gdGhlIGl0ZW0gaXMgZm9jdXNlZC5cbiAgICAgICAqIFRoZSBkZWZhdWx0IGNvbnRlbnQgd2hlbiBgdHJ1ZWAgaXMgYFx1MjFBOSB0byBzZWxlY3QvZGVzZWxlY3QvaW5jbHVkZS9leGNsdWRlYFxuICAgICAgICovXG4gIG9uRm9jdXNCYWRnZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEFjY2VwdHMgYW55IHN0cmluZyBmcm9tIG91ciBpY29uIGxpYnJhcnlcbiAgICAgICAqL1xuICAgIGljb25UeXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWRdKSxcblxuICAgIC8qKlxuICAgICAgICogVGhlIHNpZGUgb2YgdGhlIGJhZGdlIHRoZSBpY29uIHNob3VsZCBzaXRcbiAgICAgICAqL1xuICAgIGljb25TaWRlOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCJdKSxcblxuICAgIC8qKlxuICAgICAgICogQWNjZXB0cyBlaXRoZXIgb3VyIHBhbGV0dGUgY29sb3JzIChwcmltYXJ5LCBzdWNjZXNzIC4uZXRjKSBvciBhIGhleCB2YWx1ZSBgI0ZGRkZGRmAsIGAjMDAwYC5cbiAgICAgICAqL1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIG92ZXJyaWRlIGFueSBjb2xvciBwYXNzZWQgdGhyb3VnaCB0aGUgYGNvbG9yYCBwcm9wLlxuICAgICAgICovXG4gICAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIFByb3BzIHBhc3NlZCB0byB0aGUgY2xvc2UgYnV0dG9uLlxuICAgICAgICovXG4gICAgY2xvc2VCdXR0b25Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBXaWxsIGFwcGx5IGFuIG9uY2xpY2sgdG8gaWNvbiB3aXRoaW4gdGhlIGJhZGdlXG4gICAgICAgKi9cbiAgICBpY29uT25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEFyaWEgbGFiZWwgYXBwbGllZCB0byB0aGUgaWNvbk9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBpY29uT25DbGlja0FyaWFMYWJlbDogUHJvcFR5cGVzLmFueSxcblxuICAgIC8qKlxuICAgICAgICogV2lsbCBhcHBseSBhbiBvbmNsaWNrIHRvIHRoZSBiYWRnZSBpdHNlbGZcbiAgICAgICAqL1xuICAgIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBcmlhIGxhYmVsIGFwcGxpZWQgdG8gdGhlIG9uQ2xpY2sgYnV0dG9uXG4gICAgICAgKi9cbiAgICBvbkNsaWNrQXJpYUxhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGFyZ2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHJlbDogUHJvcFR5cGVzLnN0cmluZ1xuICB9KS5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICAgKiBQYWRkaW5nIGZvciB0aGUgbGlzdCBpdGVtcy5cbiAgICAgICAqL1xuICBwYWRkaW5nU2l6ZTogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICAgICAqIFdoZXRoZXIgdGhlIGBFdWlTZWxlY3RhYmxlYCBpbnN0YW5jZSBpcyBzZWFyY2hhYmxlLlxuICAgICAgICogV2hlbiB0cnVlLCB0aGUgU3BhY2Uga2V5IHdpbGwgbm90IHRvZ2dsZSBzZWxlY3Rpb24sIGFzIGl0IHdpbGwgdHlwZSBpbnRvIHRoZSBzZWFyY2ggYm94IGluc3RlYWQuIFNjcmVlbiByZWFkZXIgaW5zdHJ1Y3Rpb25zIHdpbGwgYmUgYWRkZWQgaW5zdHJ1Y3RpbmcgdXNlcnMgdG8gdXNlIHRoZSBFbnRlciBrZXkgdG8gc2VsZWN0IGl0ZW1zLlxuICAgICAgICogV2hlbiBmYWxzZSwgdGhlIFNwYWNlIGtleSB3aWxsIHRvZ2dsZSBpdGVtIHNlbGVjdGlvbi4gTm8gZXh0cmEgc2NyZWVuIHJlYWRlciBpbnN0cnVjdGlvbnMgd2lsbCBiZSBhZGRlZCwgYXMgU3BhY2UgdG8gdG9nZ2xlIGlzIGEgZ2VuZXJhbGx5IHN0YW5kYXJkIGZvciBtb3N0IHNlbGVjdC9jaGVja2VkIGVsZW1lbnRzLlxuICAgICAgICovXG4gIHNlYXJjaGFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAgICogQXR0cmlidXRlIGFwcGxpZWQgdGhlIG9wdGlvbiBgPGxpPmAuXG4gICAgICAgKiBJZiBjb25maWd1cmVkIHRvIHNvbWV0aGluZyBiZXNpZGVzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBvcHRpb25gLFxuICAgICAgICogb3RoZXIgQVJJQSBhdHRyaWJ1dGVzIHN1Y2ggYXMgYGFyaWEtY2hlY2tlZGAgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBjb25maWd1cmVkLlxuICAgICAgICovXG4gIHJvbGU6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICAgKiBIb3cgdG8gaGFuZGxlIGxvbmcgdGV4dCB3aXRoaW4gdGhlIGl0ZW0uXG4gICAgICAgKiBXcmFwcGluZyBvbmx5IHdvcmtzIGlmIHZpcnR1YWxpemF0aW9uIGlzIG9mZi5cbiAgICAgICAqL1xuICB0ZXh0V3JhcDogUHJvcFR5cGVzLm9uZU9mKFtcInRydW5jYXRlXCIsIFwid3JhcFwiXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXByZXNzZWRcIiwgXCJ0YWJsZUxheW91dFwiLCBcInJlc3BvbnNpdmVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xudmFyIHRhYmxlTGF5b3V0VG9DbGFzc01hcCA9IHtcbiAgZml4ZWQ6IG51bGwsXG4gIGF1dG86ICdldWlUYWJsZS0tYXV0bydcbn07XG5leHBvcnQgdmFyIEV1aVRhYmxlID0gZnVuY3Rpb24gRXVpVGFibGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBjb21wcmVzc2VkID0gX3JlZi5jb21wcmVzc2VkLFxuICAgICAgX3JlZiR0YWJsZUxheW91dCA9IF9yZWYudGFibGVMYXlvdXQsXG4gICAgICB0YWJsZUxheW91dCA9IF9yZWYkdGFibGVMYXlvdXQgPT09IHZvaWQgMCA/ICdmaXhlZCcgOiBfcmVmJHRhYmxlTGF5b3V0LFxuICAgICAgX3JlZiRyZXNwb25zaXZlID0gX3JlZi5yZXNwb25zaXZlLFxuICAgICAgcmVzcG9uc2l2ZSA9IF9yZWYkcmVzcG9uc2l2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkcmVzcG9uc2l2ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlLS1jb21wcmVzc2VkJzogY29tcHJlc3NlZCxcbiAgICAnZXVpVGFibGUtLXJlc3BvbnNpdmUnOiByZXNwb25zaXZlXG4gIH0sIHRhYmxlTGF5b3V0VG9DbGFzc01hcFt0YWJsZUxheW91dF0pO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRhYmxlXCIsIF9leHRlbmRzKHtcbiAgICB0YWJJbmRleDogLTEsXG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBjaGlsZHJlbik7XG59O1xuRXVpVGFibGUucHJvcFR5cGVzID0ge1xuICBjb21wcmVzc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgcmVzcG9uc2l2ZTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eVxuICAgICAqL1xuICB0YWJsZUxheW91dDogUHJvcFR5cGVzLm9uZU9mKFtcImZpeGVkXCIsIFwiYXV0b1wiXSksXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiYm9keVJlZlwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUJvZHkgPSBmdW5jdGlvbiBFdWlUYWJsZUJvZHkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBib2R5UmVmID0gX3JlZi5ib2R5UmVmLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidGJvZHlcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIHJlZjogYm9keVJlZlxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlQm9keS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYm9keVJlZjogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlRm9vdGVyID0gZnVuY3Rpb24gRXVpVGFibGVGb290ZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0Zm9vdFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBudWxsLCBjaGlsZHJlbikpO1xufTtcbkV1aVRhYmxlRm9vdGVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJhbGlnblwiLCBcImNsYXNzTmFtZVwiLCBcIndpZHRoXCIsIFwic3R5bGVcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBMRUZUX0FMSUdOTUVOVCwgUklHSFRfQUxJR05NRU5ULCBDRU5URVJfQUxJR05NRU5UIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVGb290ZXJDZWxsID0gZnVuY3Rpb24gRXVpVGFibGVGb290ZXJDZWxsKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgICAgYWxpZ24gPSBfcmVmJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYkYWxpZ24sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlRm9vdGVyQ2VsbCcsIGNsYXNzTmFtZSk7XG4gIHZhciBjb250ZW50Q2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlQ2VsbENvbnRlbnQnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25SaWdodCc6IGFsaWduID09PSBSSUdIVF9BTElHTk1FTlQsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduQ2VudGVyJzogYWxpZ24gPT09IENFTlRFUl9BTElHTk1FTlRcbiAgfSk7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0ZFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHN0eWxlOiBzdHlsZU9ialxuICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3Nlc1xuICB9LCBfX19FbW90aW9uSlNYKFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlQ2VsbENvbnRlbnRfX3RleHRcIlxuICB9LCBjaGlsZHJlbikpKTtcbn07XG5FdWlUYWJsZUZvb3RlckNlbGwucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFsaWduOiBQcm9wVHlwZXMub25lT2YoW1wibGVmdFwiLCBcInJpZ2h0XCIsIFwiY2VudGVyXCJdKSxcbiAgd2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJ3aWR0aFwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuZXhwb3J0IHZhciBXQVJOSU5HX01FU1NBR0UgPSAnVHdvIGB3aWR0aGAgcHJvcGVydGllcyB3ZXJlIHByb3ZpZGVkLiBQcm92aWRlIG9ubHkgb25lIG9mIGBzdHlsZS53aWR0aGAgb3IgYHdpZHRoYCB0byBhdm9pZCBjb25mbGljdHMuJztcbmV4cG9ydCB2YXIgcmVzb2x2ZVdpZHRoQXNTdHlsZSA9IGZ1bmN0aW9uIHJlc29sdmVXaWR0aEFzU3R5bGUoKSB7XG4gIHZhciBzdHlsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciB3aWR0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuXG4gIHZhciBzdHlsZVdpZHRoID0gc3R5bGUud2lkdGgsXG4gICAgICBzdHlsZVJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc3R5bGUsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGF0dHJXaWR0aCA9IHdpZHRoO1xuXG4gIGlmIChhdHRyV2lkdGggIT0gbnVsbCAmJiAodHlwZW9mIGF0dHJXaWR0aCA9PT0gJ251bWJlcicgfHwgIWlzTmFOKE51bWJlcihhdHRyV2lkdGgpKSkgLy8gdHJhbnNmb3JtIHtudW1iZXJ9IG9yIHVuaXRsZXNzICdudW1iZXInIHRvIHB4IHN0cmluZ1xuICApIHtcbiAgICBhdHRyV2lkdGggPSBcIlwiLmNvbmNhdChhdHRyV2lkdGgsIFwicHhcIik7XG4gIH1cblxuICBpZiAoc3R5bGVXaWR0aCAmJiBhdHRyV2lkdGgpIHtcbiAgICBjb25zb2xlLndhcm4oV0FSTklOR19NRVNTQUdFKTtcbiAgfVxuXG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0eWxlUmVzdCksIHt9LCB7XG4gICAgd2lkdGg6IGF0dHJXaWR0aCB8fCBzdHlsZVdpZHRoXG4gIH0pO1xufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwid3JhcFdpdGhUYWJsZVJvd1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZUhlYWRlciA9IGZ1bmN0aW9uIEV1aVRhYmxlSGVhZGVyKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lLFxuICAgICAgX3JlZiR3cmFwV2l0aFRhYmxlUm93ID0gX3JlZi53cmFwV2l0aFRhYmxlUm93LFxuICAgICAgd3JhcFdpdGhUYWJsZVJvdyA9IF9yZWYkd3JhcFdpdGhUYWJsZVJvdyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkd3JhcFdpdGhUYWJsZVJvdyxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRoZWFkXCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCByZXN0KSwgd3JhcFdpdGhUYWJsZVJvdyA/IF9fX0Vtb3Rpb25KU1goXCJ0clwiLCBudWxsLCBjaGlsZHJlbikgOiBjaGlsZHJlbik7XG59O1xuRXVpVGFibGVIZWFkZXIucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBDaGlsZHJlbiBtdXN0IGJlIHZhbGlkIERPTSBzdHJ1Y3R1cmUgcmVzaWRpbmcgd2l0aGluIGA8dGhlYWQ+YC5cbiAgICAgICAqIFVzZSBgPHRkPiB8IDx0aD5gIGJ5IGRlZmF1bHQsIG9yIGA8dHI+PHRoLz48L3RyPmAgd2hlbiBgd3JhcFdpdGhUYWJsZVJvdz1mYWxzZWBcbiAgICAgICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAgICAgKiBBdXRvbWF0aWNhbGx5IGFkZHMgYSB3cmFwcGluZyBgPHRyPmAgZWxlbWVudCBhcm91bmQgdGhlIGNoaWxkcmVuXG4gICAgICAgKi9cbiAgd3JhcFdpdGhUYWJsZVJvdzogUHJvcFR5cGVzLmJvb2xcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImFsaWduXCIsIFwib25Tb3J0XCIsIFwiaXNTb3J0ZWRcIiwgXCJpc1NvcnRBc2NlbmRpbmdcIiwgXCJjbGFzc05hbWVcIiwgXCJzY29wZVwiLCBcIm1vYmlsZU9wdGlvbnNcIiwgXCJ3aWR0aFwiLCBcInN0eWxlXCIsIFwicmVhZE9ubHlcIiwgXCJkZXNjcmlwdGlvblwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aUljb24gfSBmcm9tICcuLi9pY29uJztcbmltcG9ydCB7IHJlc29sdmVXaWR0aEFzU3R5bGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEV1aUlubmVyVGV4dCB9IGZyb20gJy4uL2lubmVyX3RleHQnO1xuaW1wb3J0IHsgTEVGVF9BTElHTk1FTlQsIFJJR0hUX0FMSUdOTUVOVCwgQ0VOVEVSX0FMSUdOTUVOVCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV1aUkxOG4gfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5cbnZhciBDZWxsQ29udGVudHMgPSBmdW5jdGlvbiBDZWxsQ29udGVudHMoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBkZXNjcmlwdGlvbiA9IF9yZWYuZGVzY3JpcHRpb24sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBpc1NvcnRlZCA9IF9yZWYuaXNTb3J0ZWQsXG4gICAgICBpc1NvcnRBc2NlbmRpbmcgPSBfcmVmLmlzU29ydEFzY2VuZGluZyxcbiAgICAgIHNob3dTb3J0TXNnID0gX3JlZi5zaG93U29ydE1zZztcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCBfX19FbW90aW9uSlNYKEV1aUlubmVyVGV4dCwgbnVsbCwgZnVuY3Rpb24gKHJlZiwgaW5uZXJUZXh0KSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgdG9rZW46IFwiZXVpVGFibGVIZWFkZXJDZWxsLnRpdGxlVGV4dFdpdGhEZXNjXCIsXG4gICAgICBkZWZhdWx0OiBcIntpbm5lclRleHR9OyB7ZGVzY3JpcHRpb259XCIsXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgaW5uZXJUZXh0OiBpbm5lclRleHQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uICh0aXRsZVRleHRXaXRoRGVzYykge1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgdGl0bGU6IGRlc2NyaXB0aW9uID8gdGl0bGVUZXh0V2l0aERlc2MgOiBpbm5lclRleHQsXG4gICAgICAgIHJlZjogcmVmLFxuICAgICAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDZWxsQ29udGVudF9fdGV4dFwiXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfSk7XG4gIH0pLCBkZXNjcmlwdGlvbiAmJiBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIG51bGwsIGRlc2NyaXB0aW9uKSksIHNob3dTb3J0TXNnICYmIGlzU29ydGVkICYmIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZVNvcnRJY29uXCIsXG4gICAgdHlwZTogaXNTb3J0QXNjZW5kaW5nID8gJ3NvcnRVcCcgOiAnc29ydERvd24nLFxuICAgIHNpemU6IFwibVwiXG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJDZWxsID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXJDZWxsKF9yZWYyKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgX3JlZjIkYWxpZ24gPSBfcmVmMi5hbGlnbixcbiAgICAgIGFsaWduID0gX3JlZjIkYWxpZ24gPT09IHZvaWQgMCA/IExFRlRfQUxJR05NRU5UIDogX3JlZjIkYWxpZ24sXG4gICAgICBvblNvcnQgPSBfcmVmMi5vblNvcnQsXG4gICAgICBpc1NvcnRlZCA9IF9yZWYyLmlzU29ydGVkLFxuICAgICAgaXNTb3J0QXNjZW5kaW5nID0gX3JlZjIuaXNTb3J0QXNjZW5kaW5nLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZjIuY2xhc3NOYW1lLFxuICAgICAgc2NvcGUgPSBfcmVmMi5zY29wZSxcbiAgICAgIF9yZWYyJG1vYmlsZU9wdGlvbnMgPSBfcmVmMi5tb2JpbGVPcHRpb25zLFxuICAgICAgbW9iaWxlT3B0aW9ucyA9IF9yZWYyJG1vYmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHtcbiAgICBzaG93OiB0cnVlXG4gIH0gOiBfcmVmMiRtb2JpbGVPcHRpb25zLFxuICAgICAgd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICAgIHN0eWxlID0gX3JlZjIuc3R5bGUsXG4gICAgICByZWFkT25seSA9IF9yZWYyLnJlYWRPbmx5LFxuICAgICAgZGVzY3JpcHRpb24gPSBfcmVmMi5kZXNjcmlwdGlvbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlckNlbGwnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVIZWFkZXJDZWxsLS1oaWRlRm9yRGVza3RvcCc6IG1vYmlsZU9wdGlvbnMub25seSxcbiAgICAnZXVpVGFibGVIZWFkZXJDZWxsLS1oaWRlRm9yTW9iaWxlJzogIW1vYmlsZU9wdGlvbnMuc2hvd1xuICB9KTtcbiAgdmFyIGNvbnRlbnRDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVDZWxsQ29udGVudCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnblJpZ2h0JzogYWxpZ24gPT09IFJJR0hUX0FMSUdOTUVOVCxcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tYWxpZ25DZW50ZXInOiBhbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVFxuICB9KTtcbiAgdmFyIHN0eWxlT2JqID0gcmVzb2x2ZVdpZHRoQXNTdHlsZShzdHlsZSwgd2lkdGgpO1xuICB2YXIgQ2VsbENvbXBvbmVudCA9IGNoaWxkcmVuID8gJ3RoJyA6ICd0ZCc7XG4gIHZhciBjZWxsU2NvcGUgPSBDZWxsQ29tcG9uZW50ID09PSAndGgnID8gc2NvcGUgIT09IG51bGwgJiYgc2NvcGUgIT09IHZvaWQgMCA/IHNjb3BlIDogJ2NvbCcgOiB1bmRlZmluZWQ7IC8vIGBzY29wZWAgaXMgb25seSB2YWxpZCBvbiBgdGhgIGVsZW1lbnRzXG5cbiAgaWYgKG9uU29ydCB8fCBpc1NvcnRlZCkge1xuICAgIHZhciBidXR0b25DbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVIZWFkZXJCdXR0b24nLCB7XG4gICAgICAnZXVpVGFibGVIZWFkZXJCdXR0b24taXNTb3J0ZWQnOiBpc1NvcnRlZFxuICAgIH0pO1xuICAgIHZhciBhcmlhU29ydFZhbHVlID0gJ25vbmUnO1xuXG4gICAgaWYgKGlzU29ydGVkKSB7XG4gICAgICBhcmlhU29ydFZhbHVlID0gaXNTb3J0QXNjZW5kaW5nID8gJ2FzY2VuZGluZycgOiAnZGVzY2VuZGluZyc7XG4gICAgfVxuXG4gICAgdmFyIGNlbGxDb250ZW50cyA9IF9fX0Vtb3Rpb25KU1goQ2VsbENvbnRlbnRzLCB7XG4gICAgICBjbGFzc05hbWU6IGNvbnRlbnRDbGFzc2VzLFxuICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgc2hvd1NvcnRNc2c6IHRydWUsXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICBpc1NvcnRlZDogaXNTb3J0ZWQsXG4gICAgICBpc1NvcnRBc2NlbmRpbmc6IGlzU29ydEFzY2VuZGluZ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ2VsbENvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgICAgc2NvcGU6IGNlbGxTY29wZSxcbiAgICAgIHJvbGU6IFwiY29sdW1uaGVhZGVyXCIsXG4gICAgICBcImFyaWEtc29ydFwiOiBhcmlhU29ydFZhbHVlLFxuICAgICAgXCJhcmlhLWxpdmVcIjogXCJwb2xpdGVcIixcbiAgICAgIHN0eWxlOiBzdHlsZU9ialxuICAgIH0sIHJlc3QpLCBvblNvcnQgJiYgIXJlYWRPbmx5ID8gX19fRW1vdGlvbkpTWChcImJ1dHRvblwiLCB7XG4gICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgY2xhc3NOYW1lOiBidXR0b25DbGFzc2VzLFxuICAgICAgb25DbGljazogb25Tb3J0LFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyU29ydEJ1dHRvblwiXG4gICAgfSwgY2VsbENvbnRlbnRzKSA6IGNlbGxDb250ZW50cyk7XG4gIH1cblxuICByZXR1cm4gX19fRW1vdGlvbkpTWChDZWxsQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNjb3BlOiBjZWxsU2NvcGUsXG4gICAgcm9sZTogXCJjb2x1bW5oZWFkZXJcIixcbiAgICBzdHlsZTogc3R5bGVPYmpcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goQ2VsbENvbnRlbnRzLCB7XG4gICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3NlcyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgc2hvd1NvcnRNc2c6IGZhbHNlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBpc1NvcnRlZDogaXNTb3J0ZWQsXG4gICAgaXNTb3J0QXNjZW5kaW5nOiBpc1NvcnRBc2NlbmRpbmdcbiAgfSkpO1xufTtcbkV1aVRhYmxlSGVhZGVyQ2VsbC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuICBpc1NvcnRBc2NlbmRpbmc6IFByb3BUeXBlcy5ib29sLFxuICBpc1NvcnRlZDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICAgKiBNb2JpbGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyBkaWZmZXJlbnRseSBhdCBzbWFsbCBzY3JlZW5zXG4gICAgICAgKi9cbiAgbW9iaWxlT3B0aW9uczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAgICAgKiBJZiBmYWxzZSwgd2lsbCBub3QgcmVuZGVyIHRoZSBjb2x1bW4gYXQgYWxsIGZvciBtb2JpbGVcbiAgICAgICAgICAgKi9cbiAgICBzaG93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICAgICAqIE9ubHkgc2hvdyBmb3IgbW9iaWxlPyBJZiB0cnVlLCB3aWxsIG5vdCByZW5kZXIgdGhlIGNvbHVtbiBhdCBhbGxcbiAgICAgICAgICAgKiBmb3IgZGVza3RvcFxuICAgICAgICAgICAqL1xuICAgIG9ubHk6IFByb3BUeXBlcy5ib29sXG4gIH0pLFxuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBzY29wZTogUHJvcFR5cGVzLm9uZU9mKFtcImNvbFwiLCBcInJvd1wiLCBcImNvbGdyb3VwXCIsIFwicm93Z3JvdXBcIl0pLFxuICB3aWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWRdKSxcbiAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICAgKiBTaG93cyB0aGUgc29ydCBpbmRpY2F0b3IgYnV0IHJlbW92ZXMgdGhlIGJ1dHRvblxuICAgICAgICovXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbFxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic2NvcGVcIiwgXCJzdHlsZVwiLCBcIndpZHRoXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdpZHRoQXNTdHlsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVIZWFkZXJDZWxsQ2hlY2tib3ggPSBmdW5jdGlvbiBFdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIF9yZWYkc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgc2NvcGUgPSBfcmVmJHNjb3BlID09PSB2b2lkIDAgPyAnY29sJyA6IF9yZWYkc2NvcGUsXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlckNlbGxDaGVja2JveCcsIGNsYXNzTmFtZSk7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0aFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLFxuICAgIHNjb3BlOiBzY29wZSxcbiAgICBzdHlsZTogc3R5bGVPYmpcbiAgfSwgcmVzdCksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNlbGxDb250ZW50XCJcbiAgfSwgY2hpbGRyZW4pKTtcbn07XG5FdWlUYWJsZUhlYWRlckNlbGxDaGVja2JveC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgd2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSksXG4gIHNjb3BlOiBQcm9wVHlwZXMub25lT2YoW1wiY29sXCIsIFwicm93XCIsIFwiY29sZ3JvdXBcIiwgXCJyb3dncm91cFwiXSlcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlSGVhZGVyTW9iaWxlID0gZnVuY3Rpb24gRXVpVGFibGVIZWFkZXJNb2JpbGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIF9leGNsdWRlZCk7XG5cbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUhlYWRlck1vYmlsZScsIGNsYXNzTmFtZSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzZXNcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZUhlYWRlck1vYmlsZS5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZ1xufTsiLCAiZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiYW5jaG9yUG9zaXRpb25cIiwgXCJpdGVtc1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBFdWlCdXR0b25FbXB0eSB9IGZyb20gJy4uLy4uL2J1dHRvbi9idXR0b25fZW1wdHknO1xuaW1wb3J0IHsgRXVpUG9wb3ZlciB9IGZyb20gJy4uLy4uL3BvcG92ZXInO1xuaW1wb3J0IHsgRXVpQ29udGV4dE1lbnVQYW5lbCB9IGZyb20gJy4uLy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlUYWJsZVNvcnRNb2JpbGVJdGVtIH0gZnJvbSAnLi90YWJsZV9zb3J0X21vYmlsZV9pdGVtJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIEV1aVRhYmxlU29ydE1vYmlsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoRXVpVGFibGVTb3J0TW9iaWxlLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aVRhYmxlU29ydE1vYmlsZSk7XG5cbiAgZnVuY3Rpb24gRXVpVGFibGVTb3J0TW9iaWxlKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdWlUYWJsZVNvcnRNb2JpbGUpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBpc1BvcG92ZXJPcGVuOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQnV0dG9uQ2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc1BvcG92ZXJPcGVuOiAhX3RoaXMuc3RhdGUuaXNQb3BvdmVyT3BlblxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNQb3BvdmVyT3BlbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aVRhYmxlU29ydE1vYmlsZSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGFuY2hvclBvc2l0aW9uID0gX3RoaXMkcHJvcHMuYW5jaG9yUG9zaXRpb24sXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wcy5pdGVtcyxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF90aGlzJHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlU29ydE1vYmlsZScsIGNsYXNzTmFtZSk7XG5cbiAgICAgIHZhciBtb2JpbGVTb3J0QnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgICAgICBpY29uVHlwZTogXCJhcnJvd0Rvd25cIixcbiAgICAgICAgaWNvblNpZGU6IFwicmlnaHRcIixcbiAgICAgICAgb25DbGljazogdGhpcy5vbkJ1dHRvbkNsaWNrLmJpbmQodGhpcyksXG4gICAgICAgIGZsdXNoOiBcInJpZ2h0XCIsXG4gICAgICAgIHNpemU6IFwieHNcIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aVRhYmxlU29ydE1vYmlsZS5zb3J0aW5nXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU29ydGluZ1wiXG4gICAgICB9KSk7XG5cbiAgICAgIHZhciBtb2JpbGVTb3J0UG9wb3ZlciA9IF9fX0Vtb3Rpb25KU1goRXVpUG9wb3ZlciwgX2V4dGVuZHMoe1xuICAgICAgICBidXR0b246IG1vYmlsZVNvcnRCdXR0b24sXG4gICAgICAgIGlzT3BlbjogdGhpcy5zdGF0ZS5pc1BvcG92ZXJPcGVuLFxuICAgICAgICBjbG9zZVBvcG92ZXI6IHRoaXMuY2xvc2VQb3BvdmVyLFxuICAgICAgICBhbmNob3JQb3NpdGlvbjogYW5jaG9yUG9zaXRpb24gfHwgJ2Rvd25SaWdodCcsXG4gICAgICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiXG4gICAgICB9LCByZXN0KSwgX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudVBhbmVsLCB7XG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgbWluV2lkdGg6IDIwMFxuICAgICAgICB9LFxuICAgICAgICBpdGVtczogaXRlbXMgJiYgaXRlbXMubGVuZ3RoID8gaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVTb3J0TW9iaWxlSXRlbSwge1xuICAgICAgICAgICAga2V5OiBpdGVtLmtleSxcbiAgICAgICAgICAgIG9uU29ydDogaXRlbS5vblNvcnQsXG4gICAgICAgICAgICBpc1NvcnRlZDogaXRlbS5pc1NvcnRlZCxcbiAgICAgICAgICAgIGlzU29ydEFzY2VuZGluZzogaXRlbS5pc1NvcnRBc2NlbmRpbmdcbiAgICAgICAgICB9LCBpdGVtLm5hbWUpO1xuICAgICAgICB9KSA6IHVuZGVmaW5lZFxuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgICAgfSwgbW9iaWxlU29ydFBvcG92ZXIpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlUYWJsZVNvcnRNb2JpbGU7XG59KENvbXBvbmVudCk7XG5FdWlUYWJsZVNvcnRNb2JpbGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFuY2hvclBvc2l0aW9uOiBQcm9wVHlwZXMuYW55LFxuICBpdGVtczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBuYW1lOiBQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICAgIGtleTogUHJvcFR5cGVzLmFueSxcbiAgICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzU29ydGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc1NvcnRBc2NlbmRpbmc6IFByb3BUeXBlcy5ib29sXG4gIH0pLmlzUmVxdWlyZWQpXG59OyIsICJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJvblNvcnRcIiwgXCJpc1NvcnRlZFwiLCBcImlzU29ydEFzY2VuZGluZ1wiLCBcImNsYXNzTmFtZVwiLCBcImFyaWFMYWJlbFwiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSB9IGZyb20gJy4uLy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVNvcnRNb2JpbGVJdGVtID0gZnVuY3Rpb24gRXVpVGFibGVTb3J0TW9iaWxlSXRlbShfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBvblNvcnQgPSBfcmVmLm9uU29ydCxcbiAgICAgIGlzU29ydGVkID0gX3JlZi5pc1NvcnRlZCxcbiAgICAgIGlzU29ydEFzY2VuZGluZyA9IF9yZWYuaXNTb3J0QXNjZW5kaW5nLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBhcmlhTGFiZWwgPSBfcmVmLmFyaWFMYWJlbCxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgc29ydEljb24gPSAnZW1wdHknO1xuXG4gIGlmIChpc1NvcnRlZCkge1xuICAgIHNvcnRJY29uID0gaXNTb3J0QXNjZW5kaW5nID8gJ3NvcnRVcCcgOiAnc29ydERvd24nO1xuICB9XG5cbiAgdmFyIGJ1dHRvbkNsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZVNvcnRNb2JpbGVJdGVtJywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlU29ydE1vYmlsZUl0ZW0taXNTb3J0ZWQnOiBpc1NvcnRlZFxuICB9KTtcbiAgdmFyIGNvbHVtblRpdGxlID0gYXJpYUxhYmVsID8gYXJpYUxhYmVsIDogY2hpbGRyZW47XG4gIHZhciBzdGF0ZWZ1bEFyaWFMYWJlbCA9IFwiU29ydCBcIi5jb25jYXQoY29sdW1uVGl0bGUsIFwiIFwiKS5jb25jYXQoaXNTb3J0QXNjZW5kaW5nID8gJ2Rlc2NlbmRpbmcnIDogJ2FzY2VuZGluZycpO1xuICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDb250ZXh0TWVudUl0ZW0sIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGJ1dHRvbkNsYXNzZXMsXG4gICAgaWNvbjogc29ydEljb24sXG4gICAgb25DbGljazogb25Tb3J0LFxuICAgIFwiYXJpYS1sYWJlbFwiOiBzdGF0ZWZ1bEFyaWFMYWJlbFxuICB9LCByZXN0KSwgY2hpbGRyZW4pO1xufTtcbkV1aVRhYmxlU29ydE1vYmlsZUl0ZW0ucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBrbm93IHdoZW4gYW4gaXRlbSBoYXMgYmVlbiBjbGlja2VkXG4gICAgICovXG4gIG9uU29ydDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGN1cnJlbnQgb3B0aW9uIGlzIHRoZSBzb3J0ZWQgb24gY29sdW1uXG4gICAgICovXG4gIGlzU29ydGVkOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hpY2ggZGlyZWN0aW9uIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBzb3J0ZWQgb25cbiAgICAgKi9cbiAgaXNTb3J0QXNjZW5kaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgInZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImlzU2VsZWN0ZWRcIiwgXCJpc1NlbGVjdGFibGVcIiwgXCJoYXNBY3Rpb25zXCIsIFwiaXNFeHBhbmRlZFJvd1wiLCBcImlzRXhwYW5kYWJsZVwiLCBcIm9uQ2xpY2tcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVSb3cgPSBmdW5jdGlvbiBFdWlUYWJsZVJvdyhfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmLmlzU2VsZWN0ZWQsXG4gICAgICBpc1NlbGVjdGFibGUgPSBfcmVmLmlzU2VsZWN0YWJsZSxcbiAgICAgIGhhc0FjdGlvbnMgPSBfcmVmLmhhc0FjdGlvbnMsXG4gICAgICBpc0V4cGFuZGVkUm93ID0gX3JlZi5pc0V4cGFuZGVkUm93LFxuICAgICAgaXNFeHBhbmRhYmxlID0gX3JlZi5pc0V4cGFuZGFibGUsXG4gICAgICBvbkNsaWNrID0gX3JlZi5vbkNsaWNrLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVSb3cnLCBjbGFzc05hbWUsIHtcbiAgICAnZXVpVGFibGVSb3ctaXNTZWxlY3RhYmxlJzogaXNTZWxlY3RhYmxlLFxuICAgICdldWlUYWJsZVJvdy1pc1NlbGVjdGVkJzogaXNTZWxlY3RlZCxcbiAgICAnZXVpVGFibGVSb3ctaGFzQWN0aW9ucyc6IGhhc0FjdGlvbnMsXG4gICAgJ2V1aVRhYmxlUm93LWlzRXhwYW5kZWRSb3cnOiBpc0V4cGFuZGVkUm93LFxuICAgICdldWlUYWJsZVJvdy1pc0V4cGFuZGFibGUnOiBpc0V4cGFuZGFibGUsXG4gICAgJ2V1aVRhYmxlUm93LWlzQ2xpY2thYmxlJzogb25DbGlja1xuICB9KTtcblxuICBpZiAoIW9uQ2xpY2spIHtcbiAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcInRyXCIsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlc1xuICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gIH1cblxuICB2YXIgb25LZXlEb3duID0gZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50KSB7XG4gICAgLy8gUHJldmVudCBhIHNjcm9sbCBmcm9tIG9jY3VycmluZyBpZiB0aGUgdXNlciBoYXMgaGl0IHNwYWNlLlxuICAgIGlmIChldmVudC5rZXkgPT09IGtleXMuU1BBQ0UpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgdmFyIG9uS2V5VXAgPSBmdW5jdGlvbiBvbktleVVwKGV2ZW50KSB7XG4gICAgLy8gU3VwcG9ydCBrZXlib2FyZCBhY2Nlc3NpYmlsaXR5IGJ5IGVtdWxhdGluZyBtb3VzZSBjbGljayBvbiBFTlRFUiBvciBTUEFDRSBrZXlwcmVzcy5cbiAgICBpZiAoZXZlbnQua2V5ID09PSBrZXlzLkVOVEVSIHx8IGV2ZW50LmtleSA9PT0ga2V5cy5TUEFDRSkge1xuICAgICAgb25DbGljayhldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwidHJcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uS2V5RG93bjogb25LZXlEb3duLFxuICAgIG9uS2V5VXA6IG9uS2V5VXAsXG4gICAgdGFiSW5kZXg6IDBcbiAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbn07XG5FdWlUYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiZGF0YS10ZXN0LXN1YmpcIjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHRhYmxlIGhhcyBhIHNpbmdsZSBjb2x1bW4gb2YgY2hlY2tib3hlcyBmb3Igc2VsZWN0aW5nXG4gICAgICogcm93cyAoYWZmZWN0cyBtb2JpbGUgb25seSlcbiAgICAgKi9cbiAgaXNTZWxlY3RhYmxlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgcm93IGhhcyBiZWVuIHNlbGVjdGVkXG4gICAgICovXG4gIGlzU2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgdGFibGUgaGFzIGEgZGVkaWNhdGVkIGNvbHVtbiBmb3IgaWNvbi1vbmx5IGFjdGlvbnNcbiAgICAgKiAoYWZmZWN0cyBtb2JpbGUgb25seSlcbiAgICAgKi9cbiAgaGFzQWN0aW9uczogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSByb3cgd2lsbCBoYXZlIGFuIGV4cGFuZGVkIHJvd1xuICAgICAqL1xuICBpc0V4cGFuZGFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgcm93IHdpbGwgYmUgdGhlIGV4cGFuZGVkIHJvd1xuICAgICAqL1xuICBpc0V4cGFuZGVkUm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbGljazogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImFsaWduXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJ0cnVuY2F0ZVRleHRcIiwgXCJzZXRTY29wZVJvd1wiLCBcInNob3dPbkhvdmVyXCIsIFwidGV4dE9ubHlcIiwgXCJoYXNBY3Rpb25zXCIsIFwiaXNFeHBhbmRlclwiLCBcInN0eWxlXCIsIFwid2lkdGhcIiwgXCJ2YWxpZ25cIiwgXCJtb2JpbGVPcHRpb25zXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IExFRlRfQUxJR05NRU5ULCBSSUdIVF9BTElHTk1FTlQsIENFTlRFUl9BTElHTk1FTlQsIHVzZUlzV2l0aGluQnJlYWtwb2ludHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyByZXNvbHZlV2lkdGhBc1N0eWxlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFdWlUYWJsZVJvd0NlbGwgPSBmdW5jdGlvbiBFdWlUYWJsZVJvd0NlbGwoX3JlZikge1xuICB2YXIgX21vYmlsZU9wdGlvbnMkc2hvd09uLCBfbW9iaWxlT3B0aW9ucyR0cnVuY2E7XG5cbiAgdmFyIF9yZWYkYWxpZ24gPSBfcmVmLmFsaWduLFxuICAgICAgYWxpZ24gPSBfcmVmJGFsaWduID09PSB2b2lkIDAgPyBMRUZUX0FMSUdOTUVOVCA6IF9yZWYkYWxpZ24sXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHRydW5jYXRlVGV4dCA9IF9yZWYudHJ1bmNhdGVUZXh0LFxuICAgICAgc2V0U2NvcGVSb3cgPSBfcmVmLnNldFNjb3BlUm93LFxuICAgICAgc2hvd09uSG92ZXIgPSBfcmVmLnNob3dPbkhvdmVyLFxuICAgICAgX3JlZiR0ZXh0T25seSA9IF9yZWYudGV4dE9ubHksXG4gICAgICB0ZXh0T25seSA9IF9yZWYkdGV4dE9ubHkgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHRleHRPbmx5LFxuICAgICAgaGFzQWN0aW9ucyA9IF9yZWYuaGFzQWN0aW9ucyxcbiAgICAgIGlzRXhwYW5kZXIgPSBfcmVmLmlzRXhwYW5kZXIsXG4gICAgICBzdHlsZSA9IF9yZWYuc3R5bGUsXG4gICAgICB3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICBfcmVmJHZhbGlnbiA9IF9yZWYudmFsaWduLFxuICAgICAgdmFsaWduID0gX3JlZiR2YWxpZ24gPT09IHZvaWQgMCA/ICdtaWRkbGUnIDogX3JlZiR2YWxpZ24sXG4gICAgICBfcmVmJG1vYmlsZU9wdGlvbnMgPSBfcmVmLm1vYmlsZU9wdGlvbnMsXG4gICAgICBtb2JpbGVPcHRpb25zID0gX3JlZiRtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB7XG4gICAgc2hvdzogdHJ1ZVxuICB9IDogX3JlZiRtb2JpbGVPcHRpb25zLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjZWxsQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlUm93Q2VsbCcsIF9kZWZpbmVQcm9wZXJ0eSh7XG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taGFzQWN0aW9ucyc6IGhhc0FjdGlvbnMsXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taXNFeHBhbmRlcic6IGlzRXhwYW5kZXIsXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0taGlkZUZvckRlc2t0b3AnOiBtb2JpbGVPcHRpb25zLm9ubHksXG4gICAgJ2V1aVRhYmxlUm93Q2VsbC0tZW5sYXJnZUZvck1vYmlsZSc6IG1vYmlsZU9wdGlvbnMuZW5sYXJnZVxuICB9LCBcImV1aVRhYmxlUm93Q2VsbC0tXCIuY29uY2F0KHZhbGlnbiksIHZhbGlnbikpO1xuICB2YXIgY29udGVudENsYXNzZXMgPSBjbGFzc05hbWVzKCdldWlUYWJsZUNlbGxDb250ZW50JywgY2xhc3NOYW1lLCB7XG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduUmlnaHQnOiBhbGlnbiA9PT0gUklHSFRfQUxJR05NRU5ULFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnbkNlbnRlcic6IGFsaWduID09PSBDRU5URVJfQUxJR05NRU5ULFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1zaG93T25Ib3Zlcic6IHNob3dPbkhvdmVyLFxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS10cnVuY2F0ZVRleHQnOiB0cnVuY2F0ZVRleHQsXG4gICAgLy8gV2UncmUgZG9pbmcgdGhpcyByaWdhbWFyb2xlIGluc3RlYWQgb2YgY3JlYXRpbmcgYGV1aVRhYmxlQ2VsbENvbnRlbnQtLXRleHRPbmx5YCBmb3IgQldDXG4gICAgLy8gcHVycG9zZXMgZm9yIHRoZSB0aW1lLWJlaW5nLlxuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1vdmVyZmxvd2luZ0NvbnRlbnQnOiB0ZXh0T25seSAhPT0gdHJ1ZVxuICB9KTtcbiAgdmFyIG1vYmlsZUNvbnRlbnRDbGFzc2VzID0gY2xhc3NOYW1lcygnZXVpVGFibGVDZWxsQ29udGVudCcsIGNsYXNzTmFtZSwge1xuICAgICdldWlUYWJsZUNlbGxDb250ZW50LS1hbGlnblJpZ2h0JzogbW9iaWxlT3B0aW9ucy5hbGlnbiA9PT0gUklHSFRfQUxJR05NRU5UIHx8IGFsaWduID09PSBSSUdIVF9BTElHTk1FTlQsXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLWFsaWduQ2VudGVyJzogbW9iaWxlT3B0aW9ucy5hbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVCB8fCBhbGlnbiA9PT0gQ0VOVEVSX0FMSUdOTUVOVCxcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tc2hvd09uSG92ZXInOiAoX21vYmlsZU9wdGlvbnMkc2hvd09uID0gbW9iaWxlT3B0aW9ucy5zaG93T25Ib3ZlcikgIT09IG51bGwgJiYgX21vYmlsZU9wdGlvbnMkc2hvd09uICE9PSB2b2lkIDAgPyBfbW9iaWxlT3B0aW9ucyRzaG93T24gOiBzaG93T25Ib3ZlcixcbiAgICAnZXVpVGFibGVDZWxsQ29udGVudC0tdHJ1bmNhdGVUZXh0JzogKF9tb2JpbGVPcHRpb25zJHRydW5jYSA9IG1vYmlsZU9wdGlvbnMudHJ1bmNhdGVUZXh0KSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyR0cnVuY2EgIT09IHZvaWQgMCA/IF9tb2JpbGVPcHRpb25zJHRydW5jYSA6IHRydW5jYXRlVGV4dCxcbiAgICAvLyBXZSdyZSBkb2luZyB0aGlzIHJpZ2FtYXJvbGUgaW5zdGVhZCBvZiBjcmVhdGluZyBgZXVpVGFibGVDZWxsQ29udGVudC0tdGV4dE9ubHlgIGZvciBCV0NcbiAgICAvLyBwdXJwb3NlcyBmb3IgdGhlIHRpbWUtYmVpbmcuXG4gICAgJ2V1aVRhYmxlQ2VsbENvbnRlbnQtLW92ZXJmbG93aW5nQ29udGVudCc6IG1vYmlsZU9wdGlvbnMudGV4dE9ubHkgIT09IHRydWUgfHwgdGV4dE9ubHkgIT09IHRydWVcbiAgfSk7XG4gIHZhciBjaGlsZENsYXNzZXMgPSBjbGFzc05hbWVzKHtcbiAgICBldWlUYWJsZUNlbGxDb250ZW50X190ZXh0OiB0ZXh0T25seSA9PT0gdHJ1ZSxcbiAgICBldWlUYWJsZUNlbGxDb250ZW50X19ob3Zlckl0ZW06IHNob3dPbkhvdmVyXG4gIH0pO1xuICB2YXIgd2lkdGhWYWx1ZSA9IHVzZUlzV2l0aGluQnJlYWtwb2ludHMoWyd4cycsICdzJ10pICYmIG1vYmlsZU9wdGlvbnMud2lkdGggPyBtb2JpbGVPcHRpb25zLndpZHRoIDogd2lkdGg7XG4gIHZhciBzdHlsZU9iaiA9IHJlc29sdmVXaWR0aEFzU3R5bGUoc3R5bGUsIHdpZHRoVmFsdWUpO1xuXG4gIGZ1bmN0aW9uIG1vZGlmeUNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgdmFyIG1vZGlmaWVkQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgIGlmICh0ZXh0T25seSA9PT0gdHJ1ZSkge1xuICAgICAgbW9kaWZpZWRDaGlsZHJlbiA9IF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjaGlsZENsYXNzZXNcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9IGVsc2UgaWYgKCAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICBtb2RpZmllZENoaWxkcmVuID0gUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoY2hpbGQucHJvcHMuY2xhc3NOYW1lLCBjaGlsZENsYXNzZXMpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGlmaWVkQ2hpbGRyZW47XG4gIH1cblxuICB2YXIgY2hpbGRyZW5Ob2RlID0gbW9kaWZ5Q2hpbGRyZW4oY2hpbGRyZW4pO1xuICB2YXIgaGlkZUZvck1vYmlsZUNsYXNzZXMgPSAnZXVpVGFibGVSb3dDZWxsLS1oaWRlRm9yTW9iaWxlJztcbiAgdmFyIHNob3dGb3JNb2JpbGVDbGFzc2VzID0gJ2V1aVRhYmxlUm93Q2VsbC0taGlkZUZvckRlc2t0b3AnO1xuICB2YXIgRWxlbWVudCA9IHNldFNjb3BlUm93ID8gJ3RoJyA6ICd0ZCc7XG5cbiAgdmFyIHNoYXJlZFByb3BzID0gX29iamVjdFNwcmVhZCh7XG4gICAgc2NvcGU6IHNldFNjb3BlUm93ID8gJ3JvdycgOiB1bmRlZmluZWQsXG4gICAgc3R5bGU6IHN0eWxlT2JqXG4gIH0sIHJlc3QpO1xuXG4gIGlmIChtb2JpbGVPcHRpb25zLnNob3cgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRWxlbWVudCwgX2V4dGVuZHMoe1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChjZWxsQ2xhc3NlcywgXCIgXCIpLmNvbmNhdChoaWRlRm9yTW9iaWxlQ2xhc3NlcylcbiAgICB9LCBzaGFyZWRQcm9wcyksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3Nlc1xuICAgIH0sIGNoaWxkcmVuTm9kZSkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfX19FbW90aW9uSlNYKEVsZW1lbnQsIF9leHRlbmRzKHtcbiAgICAgIGNsYXNzTmFtZTogY2VsbENsYXNzZXNcbiAgICB9LCBzaGFyZWRQcm9wcyksIG1vYmlsZU9wdGlvbnMuaGVhZGVyICYmIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcImV1aVRhYmxlUm93Q2VsbF9fbW9iaWxlSGVhZGVyIFwiLmNvbmNhdChzaG93Rm9yTW9iaWxlQ2xhc3NlcylcbiAgICB9LCBtb2JpbGVPcHRpb25zLmhlYWRlciksIG1vYmlsZU9wdGlvbnMucmVuZGVyID8gX19fRW1vdGlvbkpTWChGcmFnbWVudCwgbnVsbCwgX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KG1vYmlsZUNvbnRlbnRDbGFzc2VzLCBcIiBcIikuY29uY2F0KHNob3dGb3JNb2JpbGVDbGFzc2VzKVxuICAgIH0sIG1vZGlmeUNoaWxkcmVuKG1vYmlsZU9wdGlvbnMucmVuZGVyKSksIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChjb250ZW50Q2xhc3NlcywgXCIgXCIpLmNvbmNhdChoaWRlRm9yTW9iaWxlQ2xhc3NlcylcbiAgICB9LCBjaGlsZHJlbk5vZGUpKSA6IF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwge1xuICAgICAgY2xhc3NOYW1lOiBjb250ZW50Q2xhc3Nlc1xuICAgIH0sIGNoaWxkcmVuTm9kZSkpO1xuICB9XG59O1xuRXVpVGFibGVSb3dDZWxsLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIFZlcnRpY2FsIGFsaWdubWVudCBvZiB0aGUgY29udGVudCBpbiB0aGUgY2VsbFxuICAgICAqL1xuICB2YWxpZ246IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNlbGwgc2hvdWxkIGJlIG1hcmtlZCBhcyB0aGUgaGVhZGluZyBmb3IgaXRzIHJvd1xuICAgICAqL1xuICBzZXRTY29wZVJvdzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gaXMgZGVkaWNhdGVkIHRvIGljb24tb25seSBhY3Rpb25zIChjdXJyZW50bHlcbiAgICAgKiBhZmZlY3RzIG1vYmlsZSBvbmx5KVxuICAgICAqL1xuICBoYXNBY3Rpb25zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiBpcyBkZWRpY2F0ZWQgYXMgdGhlIGV4cGFuZGFibGUgcm93IHRvZ2dsZVxuICAgICAqL1xuICBpc0V4cGFuZGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBNb2JpbGUgb3B0aW9ucyBmb3IgZGlzcGxheWluZyBkaWZmZXJlbnRseSBhdCBzbWFsbCBzY3JlZW5zO1xuICAgICAqIFNlZSAjRXVpVGFibGVSb3dDZWxsTW9iaWxlT3B0aW9uc1NoYXBlXG4gICAgICovXG4gIG1vYmlsZU9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBJZiBmYWxzZSwgd2lsbCBub3QgcmVuZGVyIHRoZSBjZWxsIGF0IGFsbCBmb3IgbW9iaWxlXG4gICAgICAgKi9cbiAgICBzaG93OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogT25seSBzaG93IGZvciBtb2JpbGU/IElmIHRydWUsIHdpbGwgbm90IHJlbmRlciB0aGUgY29sdW1uIGF0IGFsbCBmb3IgZGVza3RvcFxuICAgICAgICovXG4gICAgb25seTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIEN1c3RvbSByZW5kZXIvY2hpbGRyZW4gaWYgZGlmZmVyZW50IGZyb20gZGVza3RvcFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMubm9kZSxcblxuICAgIC8qKlxuICAgICAgICogVGhlIGNvbHVtbidzIGhlYWRlciBmb3IgdXNlIGluIG1vYmlsZSB2aWV3IChhdXRvbWF0aWNhbGx5IHBhc3NlZCBkb3duXG4gICAgICAgKiB3aGVuIHVzaW5nIGBFdWlCYXNpY1RhYmxlYCkuXG4gICAgICAgKiBPciBwYXNzIGBmYWxzZWAgdG8gbm90IHNob3cgYSBoZWFkZXIgYXQgYWxsLlxuICAgICAgICovXG4gICAgaGVhZGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIEluY3JlYXNlIHRleHQgc2l6ZSBjb21wYXJlZCB0byByZXN0IG9mIGNlbGxzXG4gICAgICAgKi9cbiAgICBlbmxhcmdlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogQXBwbGllcyB0aGUgdmFsdWUgdG8gdGhlIHdpZHRoIG9mIHRoZSBjZWxsIGluIG1vYmlsZSB2aWV3ICh0eXBpY2FsbHkgNTAlKVxuICAgICAgICovXG4gICAgd2lkdGg6IFByb3BUeXBlcy5hbnksXG5cbiAgICAvKipcbiAgICAgICAqIEhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSB0ZXh0IGluIHRoZSBjZWxsXG4gICAgICAgKi9cbiAgICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImNlbnRlclwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIF9TaG91bGQgb25seSBiZSB1c2VkIGZvciBhY3Rpb24gY2VsbHNfXG4gICAgICAgKi9cbiAgICBzaG93T25Ib3ZlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIFNldHRpbmcgYHRleHRPbmx5YCB0byBgZmFsc2VgIHdpbGwgYnJlYWsgd29yZHMgdW5uZWNlc3NhcmlseSBvbiBGRiBhbmRcbiAgICAgICAqIElFLiAgVG8gY29tYmF0IHRoaXMgcHJvYmxlbSBvbiBGRiwgd3JhcCBjb250ZW50cyB3aXRoIHRoZSBjc3MgdXRpbGl0eVxuICAgICAgICogYC5ldWktdGV4dEJyZWFrV29yZGAuXG4gICAgICAgKi9cbiAgICB0ZXh0T25seTogUHJvcFR5cGVzLmJvb2wsXG5cbiAgICAvKipcbiAgICAgICAqIERvbid0IGFsbG93IGxpbmUgYnJlYWtzIHdpdGhpbiBjZWxsc1xuICAgICAgICovXG4gICAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMuYm9vbFxuICB9KSxcblxuICAvKipcbiAgICAgKiBIb3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGUgdGV4dCBpbiB0aGUgY2VsbFxuICAgICAqL1xuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFtcImxlZnRcIiwgXCJyaWdodFwiLCBcImNlbnRlclwiXSksXG5cbiAgLyoqXG4gICAgICogX1Nob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGFjdGlvbiBjZWxsc19cbiAgICAgKi9cbiAgc2hvd09uSG92ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFNldHRpbmcgYHRleHRPbmx5YCB0byBgZmFsc2VgIHdpbGwgYnJlYWsgd29yZHMgdW5uZWNlc3NhcmlseSBvbiBGRiBhbmRcbiAgICAgKiBJRS4gIFRvIGNvbWJhdCB0aGlzIHByb2JsZW0gb24gRkYsIHdyYXAgY29udGVudHMgd2l0aCB0aGUgY3NzIHV0aWxpdHlcbiAgICAgKiBgLmV1aS10ZXh0QnJlYWtXb3JkYC5cbiAgICAgKi9cbiAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIERvbid0IGFsbG93IGxpbmUgYnJlYWtzIHdpdGhpbiBjZWxsc1xuICAgICAqL1xuICB0cnVuY2F0ZVRleHQ6IFByb3BUeXBlcy5ib29sLFxuICB3aWR0aDogUHJvcFR5cGVzLmFueVxufTsiLCAidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCJdO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsganN4IGFzIF9fX0Vtb3Rpb25KU1ggfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmV4cG9ydCB2YXIgRXVpVGFibGVSb3dDZWxsQ2hlY2tib3ggPSBmdW5jdGlvbiBFdWlUYWJsZVJvd0NlbGxDaGVja2JveChfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aVRhYmxlUm93Q2VsbENoZWNrYm94JywgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJ0ZFwiLCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gIH0sIHJlc3QpLCBfX19FbW90aW9uSlNYKFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiZXVpVGFibGVDZWxsQ29udGVudFwiXG4gIH0sIGNoaWxkcmVuKSk7XG59O1xuRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIFwiYXJpYS1sYWJlbFwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImxvYWRpbmdcIiwgXCJpdGVtc1wiLCBcIml0ZW1JZFwiLCBcImNvbHVtbnNcIiwgXCJwYWdpbmF0aW9uXCIsIFwic29ydGluZ1wiLCBcInNlbGVjdGlvblwiLCBcIm9uQ2hhbmdlXCIsIFwiZXJyb3JcIiwgXCJub0l0ZW1zTWVzc2FnZVwiLCBcImNvbXByZXNzZWRcIiwgXCJpdGVtSWRUb0V4cGFuZGVkUm93TWFwXCIsIFwicmVzcG9uc2l2ZVwiLCBcImlzU2VsZWN0YWJsZVwiLCBcImlzRXhwYW5kYWJsZVwiLCBcImhhc0FjdGlvbnNcIiwgXCJyb3dQcm9wc1wiLCBcImNlbGxQcm9wc1wiLCBcInRhYmxlQ2FwdGlvblwiLCBcInJvd0hlYWRlclwiLCBcInRhYmxlTGF5b3V0XCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJhbGlnblwiLCBcInJlbmRlclwiLCBcImRhdGFUeXBlXCIsIFwiaXNFeHBhbmRlclwiLCBcInRleHRPbmx5XCIsIFwibmFtZVwiLCBcImZpZWxkXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJzb3J0YWJsZVwiLCBcImZvb3RlclwiLCBcIm1vYmlsZU9wdGlvbnNcIl07XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBmb3JtYXRBdXRvLCBmb3JtYXRCb29sZWFuLCBmb3JtYXREYXRlLCBmb3JtYXROdW1iZXIsIGZvcm1hdFRleHQsIExFRlRfQUxJR05NRU5ULCBSSUdIVF9BTElHTk1FTlQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IGdldCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29iamVjdHMnO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSB9IGZyb20gJy4uL2ZsZXgnO1xuaW1wb3J0IHsgRXVpQ2hlY2tib3ggfSBmcm9tICcuLi9mb3JtJztcbmltcG9ydCB7IEV1aVRhYmxlLCBFdWlUYWJsZUJvZHksIEV1aVRhYmxlRm9vdGVyLCBFdWlUYWJsZUZvb3RlckNlbGwsIEV1aVRhYmxlSGVhZGVyLCBFdWlUYWJsZUhlYWRlckNlbGwsIEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LCBFdWlUYWJsZUhlYWRlck1vYmlsZSwgRXVpVGFibGVSb3csIEV1aVRhYmxlUm93Q2VsbCwgRXVpVGFibGVSb3dDZWxsQ2hlY2tib3gsIEV1aVRhYmxlU29ydE1vYmlsZSB9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7IENvbGxhcHNlZEl0ZW1BY3Rpb25zIH0gZnJvbSAnLi9jb2xsYXBzZWRfaXRlbV9hY3Rpb25zJztcbmltcG9ydCB7IEV4cGFuZGVkSXRlbUFjdGlvbnMgfSBmcm9tICcuL2V4cGFuZGVkX2l0ZW1fYWN0aW9ucyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQmFyIH0gZnJvbSAnLi9wYWdpbmF0aW9uX2Jhcic7XG5pbXBvcnQgeyBFdWlJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBFdWlTY3JlZW5SZWFkZXJPbmx5IH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBFdWlEZWxheVJlbmRlciB9IGZyb20gJy4uL2RlbGF5X3JlbmRlcic7XG5pbXBvcnQgeyBodG1sSWRHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG52YXIgZGF0YVR5cGVzUHJvZmlsZXMgPSB7XG4gIGF1dG86IHtcbiAgICBhbGlnbjogTEVGVF9BTElHTk1FTlQsXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBmb3JtYXRBdXRvKHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIHN0cmluZzoge1xuICAgIGFsaWduOiBMRUZUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFRleHQodmFsdWUpO1xuICAgIH1cbiAgfSxcbiAgbnVtYmVyOiB7XG4gICAgYWxpZ246IFJJR0hUX0FMSUdOTUVOVCxcbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBib29sZWFuOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0Qm9vbGVhbih2YWx1ZSk7XG4gICAgfVxuICB9LFxuICBkYXRlOiB7XG4gICAgYWxpZ246IExFRlRfQUxJR05NRU5ULFxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG59O1xudmFyIERBVEFfVFlQRVMgPSBPYmplY3Qua2V5cyhkYXRhVHlwZXNQcm9maWxlcyk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZCkge1xuICBpZiAoaXRlbUlkKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oaXRlbUlkKSkge1xuICAgICAgcmV0dXJuIGl0ZW1JZChpdGVtKTtcbiAgICB9IC8vIEB0cy1pZ25vcmUgbmV2ZXIgbWluZCBhYm91dCB0aGUgaW5kZXggc2lnbmF0dXJlXG5cblxuICAgIHJldHVybiBpdGVtW2l0ZW1JZF07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Um93UHJvcHMoaXRlbSwgcm93UHJvcHMpIHtcbiAgaWYgKHJvd1Byb3BzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24ocm93UHJvcHMpKSB7XG4gICAgICByZXR1cm4gcm93UHJvcHMoaXRlbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd1Byb3BzO1xuICB9XG5cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDZWxsUHJvcHMoaXRlbSwgY29sdW1uLCBjZWxsUHJvcHMpIHtcbiAgaWYgKGNlbGxQcm9wcykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNlbGxQcm9wcykpIHtcbiAgICAgIHJldHVybiBjZWxsUHJvcHMoaXRlbSwgY29sdW1uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbFByb3BzO1xuICB9XG5cbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBnZXRDb2x1bW5Gb290ZXIoY29sdW1uLCBfcmVmKSB7XG4gIHZhciBpdGVtcyA9IF9yZWYuaXRlbXMsXG4gICAgICBwYWdpbmF0aW9uID0gX3JlZi5wYWdpbmF0aW9uO1xuICB2YXIgX3JlZjIgPSBjb2x1bW4sXG4gICAgICBmb290ZXIgPSBfcmVmMi5mb290ZXI7XG5cbiAgaWYgKGZvb3Rlcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZvb3RlcikpIHtcbiAgICAgIHJldHVybiBmb290ZXIoe1xuICAgICAgICBpdGVtczogaXRlbXMsXG4gICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb25cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmb290ZXI7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNQYWdpbmF0aW9uKHgpIHtcbiAgcmV0dXJuIHguaGFzT3duUHJvcGVydHkoJ3BhZ2luYXRpb24nKSAmJiAhIXgucGFnaW5hdGlvbjtcbn1cblxuZXhwb3J0IHZhciBFdWlCYXNpY1RhYmxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhFdWlCYXNpY1RhYmxlLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEV1aUJhc2ljVGFibGUpO1xuXG4gIGZ1bmN0aW9uIEV1aUJhc2ljVGFibGUocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXVpQmFzaWNUYWJsZSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJjbGVhbnVwc1wiLCBbXSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGJvZHlcIiwgbnVsbCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0VGJvZHlcIiwgZnVuY3Rpb24gKHRib2R5KSB7XG4gICAgICAvLyByZW1vdmUgbGlzdGVuZXJzIGZyb20gYW4gZXhpc3RpbmcgZWxlbWVudFxuICAgICAgX3RoaXMucmVtb3ZlTG9hZGluZ0xpc3RlbmVycygpOyAvLyB1cGRhdGUgdGhlIHJlZlxuXG5cbiAgICAgIF90aGlzLnRib2R5ID0gdGJvZHk7IC8vIGlmIGxvYWRpbmcsIGFkZCBsaXN0ZW5lcnNcblxuICAgICAgaWYgKF90aGlzLnByb3BzLmxvYWRpbmcgPT09IHRydWUgJiYgdGJvZHkpIHtcbiAgICAgICAgX3RoaXMuYWRkTG9hZGluZ0xpc3RlbmVycyh0Ym9keSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiYWRkTG9hZGluZ0xpc3RlbmVyc1wiLCBmdW5jdGlvbiAodGJvZHkpIHtcbiAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfTtcblxuICAgICAgWydtb3VzZWRvd24nLCAnbW91c2V1cCcsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2VlbnRlcicsICdtb3VzZWxlYXZlJywgJ2NsaWNrJywgJ2RibGNsaWNrJywgJ2tleWRvd24nLCAna2V5dXAnLCAna2V5cHJlc3MnXS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB0Ym9keS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgdHJ1ZSk7XG5cbiAgICAgICAgX3RoaXMuY2xlYW51cHMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbW92ZUxvYWRpbmdMaXN0ZW5lcnNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuY2xlYW51cHMuZm9yRWFjaChmdW5jdGlvbiAoY2xlYW51cCkge1xuICAgICAgICByZXR1cm4gY2xlYW51cCgpO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLmNsZWFudXBzLmxlbmd0aCA9IDA7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwidGFibGVJZFwiLCBodG1sSWRHZW5lcmF0b3IoJ19fdGFibGUnKSgpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzZWxlY3RBbGxJZEdlbmVyYXRvclwiLCBodG1sSWRHZW5lcmF0b3IoJ19zZWxlY3Rpb25fY29sdW1uLWNoZWNrYm94JykpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlbmRlclNlbGVjdEFsbFwiLCBmdW5jdGlvbiAoaXNNb2JpbGUpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMuaXRlbXMsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHMuc2VsZWN0aW9uO1xuXG4gICAgICBpZiAoIXNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWxlY3RhYmxlSXRlbXMgPSBpdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuICFzZWxlY3Rpb24uc2VsZWN0YWJsZSB8fCBzZWxlY3Rpb24uc2VsZWN0YWJsZShpdGVtKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGNoZWNrZWQgPSBfdGhpcy5zdGF0ZS5zZWxlY3Rpb24gJiYgc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aCA+IDAgJiYgX3RoaXMuc3RhdGUuc2VsZWN0aW9uLmxlbmd0aCA9PT0gc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciBkaXNhYmxlZCA9IHNlbGVjdGFibGVJdGVtcy5sZW5ndGggPT09IDA7XG5cbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNlbGVjdGlvbihzZWxlY3RhYmxlSXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLmNoYW5nZVNlbGVjdGlvbihbXSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS5zZWxlY3RBbGxSb3dzXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiU2VsZWN0IGFsbCByb3dzXCJcbiAgICAgIH0sIGZ1bmN0aW9uIChzZWxlY3RBbGxSb3dzKSB7XG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUNoZWNrYm94LCB7XG4gICAgICAgICAgaWQ6IF90aGlzLnNlbGVjdEFsbElkR2VuZXJhdG9yKGlzTW9iaWxlID8gJ21vYmlsZScgOiAnZGVza3RvcCcpLFxuICAgICAgICAgIHR5cGU6IGlzTW9iaWxlID8gdW5kZWZpbmVkIDogJ2luTGlzdCcsXG4gICAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlIC8vIE9ubHkgYWRkIGRhdGEtdGVzdC1zdWJqIHRvIG9uZSBvZiB0aGUgY2hlY2tib3hlc1xuICAgICAgICAgICxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGlzTW9iaWxlID8gdW5kZWZpbmVkIDogJ2NoZWNrYm94U2VsZWN0QWxsJyxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogc2VsZWN0QWxsUm93cyxcbiAgICAgICAgICBsYWJlbDogaXNNb2JpbGUgPyBzZWxlY3RBbGxSb3dzIDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInJlc29sdmVDb2x1bW5Tb3J0RGlyZWN0aW9uXCIsIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBzb3J0aW5nID0gX3RoaXMucHJvcHMuc29ydGluZztcbiAgICAgIHZhciBfcmVmMyA9IGNvbHVtbixcbiAgICAgICAgICBzb3J0YWJsZSA9IF9yZWYzLnNvcnRhYmxlLFxuICAgICAgICAgIGZpZWxkID0gX3JlZjMuZmllbGQsXG4gICAgICAgICAgbmFtZSA9IF9yZWYzLm5hbWU7XG5cbiAgICAgIGlmICghc29ydGluZyB8fCAhc29ydGluZy5zb3J0IHx8ICFzb3J0YWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzb3J0aW5nLnNvcnQuZmllbGQgPT09IGZpZWxkIHx8IHNvcnRpbmcuc29ydC5maWVsZCA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gc29ydGluZy5zb3J0LmRpcmVjdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJyZXNvbHZlQ29sdW1uT25Tb3J0XCIsIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBzb3J0aW5nID0gX3RoaXMucHJvcHMuc29ydGluZztcbiAgICAgIHZhciBfcmVmNCA9IGNvbHVtbixcbiAgICAgICAgICBzb3J0YWJsZSA9IF9yZWY0LnNvcnRhYmxlLFxuICAgICAgICAgIG5hbWUgPSBfcmVmNC5uYW1lO1xuXG4gICAgICBpZiAoIXNvcnRpbmcgfHwgIXNvcnRhYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYXNpY1RhYmxlIGlzIGNvbmZpZ3VyZWQgdG8gYmUgc29ydGFibGUgb24gY29sdW1uIFtcIi5jb25jYXQobmFtZSwgXCJdIGJ1dFxcbiAgICAgICAgICBbb25DaGFuZ2VdIGlzIG5vdCBjb25maWd1cmVkLiBUaGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHRoZSBzb3J0IHJlcXVlc3RzXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9uQ29sdW1uU29ydENoYW5nZShjb2x1bW4pO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgLy8gdXNlZCBmb3IgY2hlY2tpbmcgaWYgIGluaXRpYWwgc2VsZWN0aW9uIGlzIHJlbmRlcmVkXG4gICAgICBpbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uOiBbXVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV1aUJhc2ljVGFibGUsIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMubG9hZGluZyAmJiB0aGlzLnRib2R5KSB0aGlzLmFkZExvYWRpbmdMaXN0ZW5lcnModGhpcy50Ym9keSk7XG4gICAgICB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMubG9hZGluZyAhPT0gdGhpcy5wcm9wcy5sb2FkaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmxvYWRpbmcgJiYgdGhpcy50Ym9keSkge1xuICAgICAgICAgIHRoaXMuYWRkTG9hZGluZ0xpc3RlbmVycyh0aGlzLnRib2R5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxvYWRpbmdMaXN0ZW5lcnMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmdldEluaXRpYWxTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLnJlbW92ZUxvYWRpbmdMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0SW5pdGlhbFNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbml0aWFsU2VsZWN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uICYmIHRoaXMucHJvcHMuc2VsZWN0aW9uLmluaXRpYWxTZWxlY3RlZCAmJiAhdGhpcy5zdGF0ZS5pbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQgJiYgdGhpcy5wcm9wcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5wcm9wcy5zZWxlY3Rpb24uaW5pdGlhbFNlbGVjdGVkXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpbml0aWFsU2VsZWN0aW9uUmVuZGVyZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJidWlsZENyaXRlcmlhXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGJ1aWxkQ3JpdGVyaWEocHJvcHMpIHtcbiAgICAgIHZhciBjcml0ZXJpYSA9IHt9O1xuXG4gICAgICBpZiAoaGFzUGFnaW5hdGlvbihwcm9wcykpIHtcbiAgICAgICAgY3JpdGVyaWEucGFnZSA9IHtcbiAgICAgICAgICBpbmRleDogcHJvcHMucGFnaW5hdGlvbi5wYWdlSW5kZXgsXG4gICAgICAgICAgc2l6ZTogcHJvcHMucGFnaW5hdGlvbi5wYWdlU2l6ZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcHMuc29ydGluZykge1xuICAgICAgICBjcml0ZXJpYS5zb3J0ID0gcHJvcHMuc29ydGluZy5zb3J0O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JpdGVyaWE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNoYW5nZVNlbGVjdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMuc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uLm9uU2VsZWN0aW9uQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMucHJvcHMuc2VsZWN0aW9uLm9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsZWFyU2VsZWN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oW10pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvblBhZ2VTaXplQ2hhbmdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uUGFnZVNpemVDaGFuZ2Uoc2l6ZSkge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgdmFyIGN1cnJlbnRDcml0ZXJpYSA9IHRoaXMuYnVpbGRDcml0ZXJpYSh0aGlzLnByb3BzKTtcblxuICAgICAgdmFyIGNyaXRlcmlhID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEpLCB7fSwge1xuICAgICAgICBwYWdlOiB7XG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgLy8gd2hlbiBwYWdlIHNpemUgY2hhbmdlcywgd2UgdGFrZSB0aGUgdXNlciBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlXG4gICAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShjcml0ZXJpYSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uUGFnZUNoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvblBhZ2VDaGFuZ2UoaW5kZXgpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHZhciBjdXJyZW50Q3JpdGVyaWEgPSB0aGlzLmJ1aWxkQ3JpdGVyaWEodGhpcy5wcm9wcyk7XG5cbiAgICAgIHZhciBjcml0ZXJpYSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhKSwge30sIHtcbiAgICAgICAgcGFnZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjdXJyZW50Q3JpdGVyaWEucGFnZSksIHt9LCB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH0pXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShjcml0ZXJpYSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ29sdW1uU29ydENoYW5nZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNvbHVtblNvcnRDaGFuZ2UoY29sdW1uKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB2YXIgY3VycmVudENyaXRlcmlhID0gdGhpcy5idWlsZENyaXRlcmlhKHRoaXMucHJvcHMpO1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IFNvcnREaXJlY3Rpb24uQVNDO1xuXG4gICAgICBpZiAoY3VycmVudENyaXRlcmlhICYmIGN1cnJlbnRDcml0ZXJpYS5zb3J0ICYmIChjdXJyZW50Q3JpdGVyaWEuc29ydC5maWVsZCA9PT0gY29sdW1uLmZpZWxkIHx8IGN1cnJlbnRDcml0ZXJpYS5zb3J0LmZpZWxkID09PSBjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gU29ydERpcmVjdGlvbi5yZXZlcnNlKGN1cnJlbnRDcml0ZXJpYS5zb3J0LmRpcmVjdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjcml0ZXJpYSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY3VycmVudENyaXRlcmlhKSwge30sIHtcbiAgICAgICAgLy8gcmVzZXR0aW5nIHRoZSBwYWdlIGlmIHRoZSBjcml0ZXJpYSBoYXMgb25lXG4gICAgICAgIHBhZ2U6ICFjdXJyZW50Q3JpdGVyaWEucGFnZSA/IHVuZGVmaW5lZCA6IHtcbiAgICAgICAgICBpbmRleDogMCxcbiAgICAgICAgICBzaXplOiBjdXJyZW50Q3JpdGVyaWEucGFnZS5zaXplXG4gICAgICAgIH0sXG4gICAgICAgIHNvcnQ6IHtcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkIHx8IGNvbHVtbi5uYW1lLFxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGNvbXBsZXggcmVsYXRpb25zaGlwIGJldHdlZW4gcGFnaW5hdGlvbidzIGV4aXN0ZW5jZSBhbmQgY3JpdGVyaWEsIHRoZSBjb2RlIGxvZ2ljIGVuc3VyZXMgdGhpcyBpcyBjb3JyZWN0bHkgbWFpbnRhaW5lZFxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGNyaXRlcmlhKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMi5jbGFzc05hbWUsXG4gICAgICAgICAgbG9hZGluZyA9IF90aGlzJHByb3BzMi5sb2FkaW5nLFxuICAgICAgICAgIGl0ZW1zID0gX3RoaXMkcHJvcHMyLml0ZW1zLFxuICAgICAgICAgIGl0ZW1JZCA9IF90aGlzJHByb3BzMi5pdGVtSWQsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzMi5jb2x1bW5zLFxuICAgICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczIucGFnaW5hdGlvbixcbiAgICAgICAgICBzb3J0aW5nID0gX3RoaXMkcHJvcHMyLnNvcnRpbmcsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHMyLnNlbGVjdGlvbixcbiAgICAgICAgICBvbkNoYW5nZSA9IF90aGlzJHByb3BzMi5vbkNoYW5nZSxcbiAgICAgICAgICBlcnJvciA9IF90aGlzJHByb3BzMi5lcnJvcixcbiAgICAgICAgICBub0l0ZW1zTWVzc2FnZSA9IF90aGlzJHByb3BzMi5ub0l0ZW1zTWVzc2FnZSxcbiAgICAgICAgICBjb21wcmVzc2VkID0gX3RoaXMkcHJvcHMyLmNvbXByZXNzZWQsXG4gICAgICAgICAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9IF90aGlzJHByb3BzMi5pdGVtSWRUb0V4cGFuZGVkUm93TWFwLFxuICAgICAgICAgIHJlc3BvbnNpdmUgPSBfdGhpcyRwcm9wczIucmVzcG9uc2l2ZSxcbiAgICAgICAgICBpc1NlbGVjdGFibGUgPSBfdGhpcyRwcm9wczIuaXNTZWxlY3RhYmxlLFxuICAgICAgICAgIGlzRXhwYW5kYWJsZSA9IF90aGlzJHByb3BzMi5pc0V4cGFuZGFibGUsXG4gICAgICAgICAgaGFzQWN0aW9ucyA9IF90aGlzJHByb3BzMi5oYXNBY3Rpb25zLFxuICAgICAgICAgIHJvd1Byb3BzID0gX3RoaXMkcHJvcHMyLnJvd1Byb3BzLFxuICAgICAgICAgIGNlbGxQcm9wcyA9IF90aGlzJHByb3BzMi5jZWxsUHJvcHMsXG4gICAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHMyLnRhYmxlQ2FwdGlvbixcbiAgICAgICAgICByb3dIZWFkZXIgPSBfdGhpcyRwcm9wczIucm93SGVhZGVyLFxuICAgICAgICAgIHRhYmxlTGF5b3V0ID0gX3RoaXMkcHJvcHMyLnRhYmxlTGF5b3V0LFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3RoaXMkcHJvcHMyLCBfZXhjbHVkZWQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IGNsYXNzTmFtZXMoJ2V1aUJhc2ljVGFibGUnLCB7XG4gICAgICAgICdldWlCYXNpY1RhYmxlLWxvYWRpbmcnOiBsb2FkaW5nXG4gICAgICB9LCBjbGFzc05hbWUpO1xuICAgICAgdmFyIHRhYmxlID0gdGhpcy5yZW5kZXJUYWJsZSgpO1xuICAgICAgdmFyIHBhZ2luYXRpb25CYXIgPSB0aGlzLnJlbmRlclBhZ2luYXRpb25CYXIoKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIF9leHRlbmRzKHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzXG4gICAgICB9LCByZXN0KSwgdGFibGUsIHBhZ2luYXRpb25CYXIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJUYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbXByZXNzZWQgPSBfdGhpcyRwcm9wczMuY29tcHJlc3NlZCxcbiAgICAgICAgICByZXNwb25zaXZlID0gX3RoaXMkcHJvcHMzLnJlc3BvbnNpdmUsXG4gICAgICAgICAgdGFibGVMYXlvdXQgPSBfdGhpcyRwcm9wczMudGFibGVMYXlvdXQ7XG4gICAgICB2YXIgbW9iaWxlSGVhZGVyID0gcmVzcG9uc2l2ZSA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJNb2JpbGUsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpRmxleEdyb3VwLCB7XG4gICAgICAgIHJlc3BvbnNpdmU6IGZhbHNlLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJzcGFjZUJldHdlZW5cIixcbiAgICAgICAgYWxpZ25JdGVtczogXCJiYXNlbGluZVwiXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aUZsZXhJdGVtLCB7XG4gICAgICAgIGdyb3c6IGZhbHNlXG4gICAgICB9LCB0aGlzLnJlbmRlclNlbGVjdEFsbCh0cnVlKSksIF9fX0Vtb3Rpb25KU1goRXVpRmxleEl0ZW0sIHtcbiAgICAgICAgZ3JvdzogZmFsc2VcbiAgICAgIH0sIHRoaXMucmVuZGVyVGFibGVNb2JpbGVTb3J0KCkpKSkgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgY2FwdGlvbiA9IHRoaXMucmVuZGVyVGFibGVDYXB0aW9uKCk7XG4gICAgICB2YXIgaGVhZCA9IHRoaXMucmVuZGVyVGFibGVIZWFkKCk7XG4gICAgICB2YXIgYm9keSA9IHRoaXMucmVuZGVyVGFibGVCb2R5KCk7XG4gICAgICB2YXIgZm9vdGVyID0gdGhpcy5yZW5kZXJUYWJsZUZvb3RlcigpO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goXCJkaXZcIiwgbnVsbCwgbW9iaWxlSGVhZGVyLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlLCB7XG4gICAgICAgIGlkOiB0aGlzLnRhYmxlSWQsXG4gICAgICAgIHRhYmxlTGF5b3V0OiB0YWJsZUxheW91dCxcbiAgICAgICAgcmVzcG9uc2l2ZTogcmVzcG9uc2l2ZSxcbiAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3NlZFxuICAgICAgfSwgY2FwdGlvbiwgaGVhZCwgYm9keSwgZm9vdGVyKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlTW9iaWxlU29ydFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZU1vYmlsZVNvcnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNC5jb2x1bW5zLFxuICAgICAgICAgIHNvcnRpbmcgPSBfdGhpcyRwcm9wczQuc29ydGluZztcbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoIXNvcnRpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uLCBpbmRleCkge1xuICAgICAgICB2YXIgX2NvbHVtbiwgX2NvbHVtbiRtb2JpbGVPcHRpb25zO1xuXG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgJiYgc29ydGluZy5zb3J0ICYmICEhc29ydGluZy5lbmFibGVBbGxDb2x1bW5zICYmIGNvbHVtbi5zb3J0YWJsZSA9PSBudWxsKSB7XG4gICAgICAgICAgY29sdW1uID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjb2x1bW4pLCB7fSwge1xuICAgICAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29sdW1uLnNvcnRhYmxlIHx8ICgoX2NvbHVtbiA9IGNvbHVtbikgPT09IG51bGwgfHwgX2NvbHVtbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9jb2x1bW4kbW9iaWxlT3B0aW9ucyA9IF9jb2x1bW4ubW9iaWxlT3B0aW9ucykgPT09IG51bGwgfHwgX2NvbHVtbiRtb2JpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY29sdW1uJG1vYmlsZU9wdGlvbnMuc2hvdykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNvcnREaXJlY3Rpb24gPSBfdGhpczIucmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb24oY29sdW1uKTtcblxuICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICBrZXk6IFwiX2RhdGFfc19cIi5jb25jYXQoY29sdW1uLmZpZWxkLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICBvblNvcnQ6IF90aGlzMi5yZXNvbHZlQ29sdW1uT25Tb3J0KGNvbHVtbiksXG4gICAgICAgICAgaXNTb3J0ZWQ6ICEhc29ydERpcmVjdGlvbixcbiAgICAgICAgICBpc1NvcnRBc2NlbmRpbmc6IHNvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKHNvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gaXRlbXMubGVuZ3RoID8gX19fRW1vdGlvbkpTWChFdWlUYWJsZVNvcnRNb2JpbGUsIHtcbiAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICB9KSA6IG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlQ2FwdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUNhcHRpb24oKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtcyA9IF90aGlzJHByb3BzNS5pdGVtcyxcbiAgICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHM1LnBhZ2luYXRpb24sXG4gICAgICAgICAgdGFibGVDYXB0aW9uID0gX3RoaXMkcHJvcHM1LnRhYmxlQ2FwdGlvbjtcbiAgICAgIHZhciBpdGVtQ291bnQgPSBpdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgdG90YWxJdGVtQ291bnQgPSBwYWdpbmF0aW9uID8gcGFnaW5hdGlvbi50b3RhbEl0ZW1Db3VudCA6IGl0ZW1Db3VudDtcbiAgICAgIHZhciBwYWdlID0gcGFnaW5hdGlvbiA/IHBhZ2luYXRpb24ucGFnZUluZGV4ICsgMSA6IDE7XG4gICAgICB2YXIgcGFnZUNvdW50ID0gcGFnaW5hdGlvbiAhPT0gbnVsbCAmJiBwYWdpbmF0aW9uICE9PSB2b2lkIDAgJiYgcGFnaW5hdGlvbi5wYWdlU2l6ZSA/IE1hdGguY2VpbChwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50IC8gcGFnaW5hdGlvbi5wYWdlU2l6ZSkgOiAxO1xuICAgICAgdmFyIGNhcHRpb25FbGVtZW50O1xuXG4gICAgICBpZiAodGFibGVDYXB0aW9uKSB7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUudGFibGVDYXB0aW9uV2l0aFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgIGRlZmF1bHQ6IFwie3RhYmxlQ2FwdGlvbn07IFBhZ2Uge3BhZ2V9IG9mIHtwYWdlQ291bnR9LlwiLFxuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIHRhYmxlQ2FwdGlvbjogdGFibGVDYXB0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICBwYWdlQ291bnQ6IHBhZ2VDb3VudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gdGFibGVDYXB0aW9uO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGFnaW5hdGlvbikge1xuICAgICAgICAgIGlmIChwYWdpbmF0aW9uLnRvdGFsSXRlbUNvdW50ID4gMCkge1xuICAgICAgICAgICAgY2FwdGlvbkVsZW1lbnQgPSBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICAgICAgdG9rZW46IFwiZXVpQmFzaWNUYWJsZS50YWJsZUF1dG9DYXB0aW9uV2l0aFBhZ2luYXRpb25cIixcbiAgICAgICAgICAgICAgZGVmYXVsdDogXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3Mgb3V0IG9mIHt0b3RhbEl0ZW1Db3VudH0gcm93czsgUGFnZSB7cGFnZX0gb2Yge3BhZ2VDb3VudH0uXCIsXG4gICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgIHRvdGFsSXRlbUNvdW50OiB0b3RhbEl0ZW1Db3VudCxcbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogcGFnZUNvdW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYXB0aW9uRWxlbWVudCA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlU2ltcGxlQXV0b0NhcHRpb25XaXRoUGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93czsgUGFnZSB7cGFnZX0gb2Yge3BhZ2VDb3VudH0uXCIsXG4gICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgIGl0ZW1Db3VudDogaXRlbUNvdW50LFxuICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZUNvdW50OiBwYWdlQ291bnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNhcHRpb25FbGVtZW50ID0gX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlQXV0b0NhcHRpb25XaXRob3V0UGFnaW5hdGlvblwiLFxuICAgICAgICAgICAgZGVmYXVsdDogXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3MuXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlTY3JlZW5SZWFkZXJPbmx5LCBudWxsLCBfX19FbW90aW9uSlNYKFwiY2FwdGlvblwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJldWlUYWJsZUNhcHRpb25cIlxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlEZWxheVJlbmRlciwgbnVsbCwgY2FwdGlvbkVsZW1lbnQpKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlSGVhZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJUYWJsZUhlYWQoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNi5jb2x1bW5zLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IF90aGlzJHByb3BzNi5zZWxlY3Rpb247XG4gICAgICB2YXIgaGVhZGVycyA9IFtdO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94LCB7XG4gICAgICAgICAga2V5OiBcIl9zZWxlY3Rpb25fY29sdW1uX2hcIlxuICAgICAgICB9LCB0aGlzLnJlbmRlclNlbGVjdEFsbChmYWxzZSkpKTtcbiAgICAgIH1cblxuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGluZGV4KSB7XG4gICAgICAgIHZhciBfcmVmNSA9IGNvbHVtbixcbiAgICAgICAgICAgIGZpZWxkID0gX3JlZjUuZmllbGQsXG4gICAgICAgICAgICB3aWR0aCA9IF9yZWY1LndpZHRoLFxuICAgICAgICAgICAgbmFtZSA9IF9yZWY1Lm5hbWUsXG4gICAgICAgICAgICBhbGlnbiA9IF9yZWY1LmFsaWduLFxuICAgICAgICAgICAgZGF0YVR5cGUgPSBfcmVmNS5kYXRhVHlwZSxcbiAgICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjUuc29ydGFibGUsXG4gICAgICAgICAgICBtb2JpbGVPcHRpb25zID0gX3JlZjUubW9iaWxlT3B0aW9ucyxcbiAgICAgICAgICAgIHJlYWRPbmx5ID0gX3JlZjUucmVhZE9ubHksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IF9yZWY1LmRlc2NyaXB0aW9uO1xuXG4gICAgICAgIHZhciBjb2x1bW5BbGlnbiA9IGFsaWduIHx8IF90aGlzMy5nZXRBbGlnbkZvckRhdGFUeXBlKGRhdGFUeXBlKTsgLy8gYWN0aW9ucyBjb2x1bW5cblxuXG4gICAgICAgIGlmIChjb2x1bW4uYWN0aW9ucykge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlSGVhZGVyQ2VsbCwge1xuICAgICAgICAgICAga2V5OiBcIl9hY3Rpb25zX2hfXCIuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICAgIGFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBtb2JpbGVPcHRpb25zOiBtb2JpbGVPcHRpb25zXG4gICAgICAgICAgfSwgbmFtZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBjb21wdXRlZCBjb2x1bW5cblxuXG4gICAgICAgIGlmICghY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgdmFyIF9zb3J0aW5nID0ge307IC8vIGNvbXB1dGVkIGNvbHVtbnMgYXJlIG9ubHkgc29ydGFibGUgaWYgdGhlaXIgYHNvcnRhYmxlYCBpcyBhIGZ1bmN0aW9uXG5cbiAgICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcgJiYgdHlwZW9mIHNvcnRhYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgc29ydERpcmVjdGlvbiA9IF90aGlzMy5yZXNvbHZlQ29sdW1uU29ydERpcmVjdGlvbihjb2x1bW4pO1xuXG4gICAgICAgICAgICBfc29ydGluZy5pc1NvcnRlZCA9ICEhc29ydERpcmVjdGlvbjtcbiAgICAgICAgICAgIF9zb3J0aW5nLmlzU29ydEFzY2VuZGluZyA9IHNvcnREaXJlY3Rpb24gPyBTb3J0RGlyZWN0aW9uLmlzQXNjKHNvcnREaXJlY3Rpb24pIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgX3NvcnRpbmcub25Tb3J0ID0gX3RoaXMzLnJlc29sdmVDb2x1bW5PblNvcnQoY29sdW1uKTtcbiAgICAgICAgICAgIF9zb3J0aW5nLnJlYWRPbmx5ID0gX3RoaXMzLnByb3BzLnNvcnRpbmcucmVhZE9ubHkgfHwgcmVhZE9ubHk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICBrZXk6IFwiX2NvbXB1dGVkX2NvbHVtbl9oX1wiLmNvbmNhdChpbmRleCksXG4gICAgICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBtb2JpbGVPcHRpb25zOiBtb2JpbGVPcHRpb25zLFxuICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyQ2VsbF9cIi5jb25jYXQodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnID8gbmFtZSA6ICcnLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgICAgIH0sIF9zb3J0aW5nKSwgbmFtZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBmaWVsZCBkYXRhIGNvbHVtblxuXG5cbiAgICAgICAgdmFyIHNvcnRpbmcgPSB7fTtcblxuICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcpIHtcbiAgICAgICAgICBpZiAoX3RoaXMzLnByb3BzLnNvcnRpbmcuc29ydCAmJiAhIV90aGlzMy5wcm9wcy5zb3J0aW5nLmVuYWJsZUFsbENvbHVtbnMgJiYgY29sdW1uLnNvcnRhYmxlID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29sdW1uKSwge30sIHtcbiAgICAgICAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfcmVmNiA9IGNvbHVtbixcbiAgICAgICAgICAgICAgX3NvcnRhYmxlID0gX3JlZjYuc29ydGFibGU7XG5cbiAgICAgICAgICBpZiAoX3NvcnRhYmxlKSB7XG4gICAgICAgICAgICB2YXIgX3NvcnREaXJlY3Rpb24gPSBfdGhpczMucmVzb2x2ZUNvbHVtblNvcnREaXJlY3Rpb24oY29sdW1uKTtcblxuICAgICAgICAgICAgc29ydGluZy5pc1NvcnRlZCA9ICEhX3NvcnREaXJlY3Rpb247XG4gICAgICAgICAgICBzb3J0aW5nLmlzU29ydEFzY2VuZGluZyA9IF9zb3J0RGlyZWN0aW9uID8gU29ydERpcmVjdGlvbi5pc0FzYyhfc29ydERpcmVjdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBzb3J0aW5nLm9uU29ydCA9IF90aGlzMy5yZXNvbHZlQ29sdW1uT25Tb3J0KGNvbHVtbik7XG4gICAgICAgICAgICBzb3J0aW5nLnJlYWRPbmx5ID0gX3RoaXMzLnByb3BzLnNvcnRpbmcucmVhZE9ubHkgfHwgcmVhZE9ubHk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaGVhZGVycy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpVGFibGVIZWFkZXJDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgICAga2V5OiBcIl9kYXRhX2hfXCIuY29uY2F0KGZpZWxkLCBcIl9cIikuY29uY2F0KGluZGV4KSxcbiAgICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIG1vYmlsZU9wdGlvbnM6IG1vYmlsZU9wdGlvbnMsXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcInRhYmxlSGVhZGVyQ2VsbF9cIi5jb25jYXQoZmllbGQsIFwiX1wiKS5jb25jYXQoaW5kZXgpLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICAgICAgICB9LCBzb3J0aW5nKSwgbmFtZSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUhlYWRlciwgbnVsbCwgaGVhZGVycyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclRhYmxlRm9vdGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlRm9vdGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbXMgPSBfdGhpcyRwcm9wczcuaXRlbXMsXG4gICAgICAgICAgY29sdW1ucyA9IF90aGlzJHByb3BzNy5jb2x1bW5zLFxuICAgICAgICAgIHBhZ2luYXRpb24gPSBfdGhpcyRwcm9wczcucGFnaW5hdGlvbixcbiAgICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczcuc2VsZWN0aW9uO1xuICAgICAgdmFyIGZvb3RlcnMgPSBbXTtcbiAgICAgIHZhciBoYXNEZWZpbmVkRm9vdGVyID0gZmFsc2U7XG5cbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGVtcHR5IGNlbGwgdG8gY29tcGVuc2F0ZSBmb3IgYWRkaXRpb25hbCBzZWxlY3Rpb24gY29sdW1uXG4gICAgICAgIGZvb3RlcnMucHVzaChfX19FbW90aW9uSlNYKEV1aVRhYmxlRm9vdGVyQ2VsbCwge1xuICAgICAgICAgIGtleTogXCJfc2VsZWN0aW9uX2NvbHVtbl9mXCJcbiAgICAgICAgfSwgdW5kZWZpbmVkKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHZhciBmb290ZXIgPSBnZXRDb2x1bW5Gb290ZXIoY29sdW1uLCB7XG4gICAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBfcmVmNyA9IGNvbHVtbixcbiAgICAgICAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmNy5tb2JpbGVPcHRpb25zLFxuICAgICAgICAgICAgZmllbGQgPSBfcmVmNy5maWVsZCxcbiAgICAgICAgICAgIGFsaWduID0gX3JlZjcuYWxpZ247XG5cbiAgICAgICAgaWYgKG1vYmlsZU9wdGlvbnMgIT09IG51bGwgJiYgbW9iaWxlT3B0aW9ucyAhPT0gdm9pZCAwICYmIG1vYmlsZU9wdGlvbnMub25seSkge1xuICAgICAgICAgIHJldHVybjsgLy8gZXhjbHVkZSBjb2x1bW5zIHRoYXQgb25seSBleGlzdCBmb3IgbW9iaWxlIGhlYWRlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb290ZXIpIHtcbiAgICAgICAgICBmb290ZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlckNlbGwsIHtcbiAgICAgICAgICAgIGtleTogXCJmb290ZXJfXCIuY29uY2F0KGZpZWxkLCBcIl9cIikuY29uY2F0KGZvb3RlcnMubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25cbiAgICAgICAgICB9LCBmb290ZXIpKTtcbiAgICAgICAgICBoYXNEZWZpbmVkRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb290ZXIgaXMgdW5kZWZpbmVkLCBzbyBjcmVhdGUgYW4gZW1wdHkgY2VsbCB0byBwcmVzZXJ2ZSBsYXlvdXRcbiAgICAgICAgICBmb290ZXJzLnB1c2goX19fRW1vdGlvbkpTWChFdWlUYWJsZUZvb3RlckNlbGwsIHtcbiAgICAgICAgICAgIGtleTogXCJmb290ZXJfZW1wdHlfXCIuY29uY2F0KGZvb3RlcnMubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICBhbGlnbjogYWxpZ25cbiAgICAgICAgICB9LCB1bmRlZmluZWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZm9vdGVycy5sZW5ndGggJiYgaGFzRGVmaW5lZEZvb3RlciA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVGb290ZXIsIG51bGwsIGZvb3RlcnMpIDogbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyVGFibGVCb2R5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclRhYmxlQm9keSgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5lcnJvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvckJvZHkodGhpcy5wcm9wcy5lcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVtcyA9IHRoaXMucHJvcHMuaXRlbXM7XG5cbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRW1wdHlCb2R5KCk7XG4gICAgICB9XG5cbiAgICAgIHZhciByb3dzID0gaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAvLyBpZiB0aGVyZSdzIHBhZ2luYXRpb24gdGhlIGl0ZW0ncyBpbmRleCBtdXN0IGJlIGFkanVzdGVkIHRvIHRoZSB3aGVyZSBpdCBpcyBpbiB0aGUgd2hvbGUgZGF0YXNldFxuICAgICAgICB2YXIgdGFibGVJdGVtSW5kZXggPSBoYXNQYWdpbmF0aW9uKF90aGlzNC5wcm9wcykgJiYgX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgPiAwID8gX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZUluZGV4ICogX3RoaXM0LnByb3BzLnBhZ2luYXRpb24ucGFnZVNpemUgKyBpbmRleCA6IGluZGV4O1xuICAgICAgICByZXR1cm4gX3RoaXM0LnJlbmRlckl0ZW1Sb3coaXRlbSwgdGFibGVJdGVtSW5kZXgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZUJvZHksIHtcbiAgICAgICAgYm9keVJlZjogdGhpcy5zZXRUYm9keVxuICAgICAgfSwgcm93cyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckVycm9yQm9keVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJFcnJvckJvZHkoZXJyb3IpIHtcbiAgICAgIHZhciBjb2xTcGFuID0gdGhpcy5wcm9wcy5jb2x1bW5zLmxlbmd0aCArICh0aGlzLnByb3BzLnNlbGVjdGlvbiA/IDEgOiAwKTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlQm9keSwgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvdywgbnVsbCwgX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGwsIHtcbiAgICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGNvbFNwYW46IGNvbFNwYW4sXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IHtcbiAgICAgICAgICB3aWR0aDogJzEwMCUnXG4gICAgICAgIH1cbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpSWNvbiwge1xuICAgICAgICB0eXBlOiBcIm1pbnVzSW5DaXJjbGVcIixcbiAgICAgICAgY29sb3I6IFwiZGFuZ2VyXCJcbiAgICAgIH0pLCBcIiBcIiwgZXJyb3IpKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckVtcHR5Qm9keVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJFbXB0eUJvZHkoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM4ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5zID0gX3RoaXMkcHJvcHM4LmNvbHVtbnMsXG4gICAgICAgICAgc2VsZWN0aW9uID0gX3RoaXMkcHJvcHM4LnNlbGVjdGlvbixcbiAgICAgICAgICBub0l0ZW1zTWVzc2FnZSA9IF90aGlzJHByb3BzOC5ub0l0ZW1zTWVzc2FnZTtcbiAgICAgIHZhciBjb2xTcGFuID0gY29sdW1ucy5sZW5ndGggKyAoc2VsZWN0aW9uID8gMSA6IDApO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVCb2R5LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93LCBudWxsLCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgY29sU3BhbjogY29sU3BhbixcbiAgICAgICAgbW9iaWxlT3B0aW9uczoge1xuICAgICAgICAgIHdpZHRoOiAnMTAwJSdcbiAgICAgICAgfVxuICAgICAgfSwgbm9JdGVtc01lc3NhZ2UpKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1Sb3dcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbVJvdyhpdGVtLCByb3dJbmRleCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczkgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbnMgPSBfdGhpcyRwcm9wczkuY29sdW1ucyxcbiAgICAgICAgICBzZWxlY3Rpb24gPSBfdGhpcyRwcm9wczkuc2VsZWN0aW9uLFxuICAgICAgICAgIGlzU2VsZWN0YWJsZSA9IF90aGlzJHByb3BzOS5pc1NlbGVjdGFibGUsXG4gICAgICAgICAgaGFzQWN0aW9ucyA9IF90aGlzJHByb3BzOS5oYXNBY3Rpb25zLFxuICAgICAgICAgIHJvd0hlYWRlciA9IF90aGlzJHByb3BzOS5yb3dIZWFkZXIsXG4gICAgICAgICAgX3RoaXMkcHJvcHM5JGl0ZW1JZFRvID0gX3RoaXMkcHJvcHM5Lml0ZW1JZFRvRXhwYW5kZWRSb3dNYXAsXG4gICAgICAgICAgaXRlbUlkVG9FeHBhbmRlZFJvd01hcCA9IF90aGlzJHByb3BzOSRpdGVtSWRUbyA9PT0gdm9pZCAwID8ge30gOiBfdGhpcyRwcm9wczkkaXRlbUlkVG8sXG4gICAgICAgICAgaXNFeHBhbmRhYmxlID0gX3RoaXMkcHJvcHM5LmlzRXhwYW5kYWJsZTtcbiAgICAgIHZhciBjZWxscyA9IFtdO1xuICAgICAgdmFyIGl0ZW1JZENhbGxiYWNrID0gdGhpcy5wcm9wcy5pdGVtSWQ7XG4gICAgICB2YXIgaXRlbUlkID0gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZENhbGxiYWNrKSAhPSBudWxsID8gZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JZENhbGxiYWNrKSA6IHJvd0luZGV4O1xuICAgICAgdmFyIHNlbGVjdGVkID0gIXNlbGVjdGlvbiA/IGZhbHNlIDogdGhpcy5zdGF0ZS5zZWxlY3Rpb24gJiYgISF0aGlzLnN0YXRlLnNlbGVjdGlvbi5maW5kKGZ1bmN0aW9uIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGdldEl0ZW1JZChzZWxlY3RlZEl0ZW0sIGl0ZW1JZENhbGxiYWNrKSA9PT0gaXRlbUlkO1xuICAgICAgfSk7XG4gICAgICB2YXIgY2FsY3VsYXRlZEhhc1NlbGVjdGlvbjtcblxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjZWxscy5wdXNoKHRoaXMucmVuZGVySXRlbVNlbGVjdGlvbkNlbGwoaXRlbUlkLCBpdGVtLCBzZWxlY3RlZCkpO1xuICAgICAgICBjYWxjdWxhdGVkSGFzU2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNhbGN1bGF0ZWRIYXNBY3Rpb25zO1xuICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGNvbHVtbkluZGV4KSB7XG4gICAgICAgIGlmIChjb2x1bW4uYWN0aW9ucykge1xuICAgICAgICAgIGNlbGxzLnB1c2goX3RoaXM1LnJlbmRlckl0ZW1BY3Rpb25zQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpKTtcbiAgICAgICAgICBjYWxjdWxhdGVkSGFzQWN0aW9ucyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgdmFyIGZpZWxkRGF0YUNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICBjZWxscy5wdXNoKF90aGlzNS5yZW5kZXJJdGVtRmllbGREYXRhQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIGZpZWxkRGF0YUNvbHVtbi5maWVsZCA9PT0gcm93SGVhZGVyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2VsbHMucHVzaChfdGhpczUucmVuZGVySXRlbUNvbXB1dGVkQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7IC8vIE9jY3VweSBmdWxsIHdpZHRoIG9mIHRhYmxlLCB0YWtpbmcgY2hlY2tib3ggJiBtb2JpbGUgb25seSBjb2x1bW5zIGludG8gYWNjb3VudC5cblxuICAgICAgdmFyIGV4cGFuZGVkUm93Q29sU3BhbiA9IHNlbGVjdGlvbiA/IGNvbHVtbnMubGVuZ3RoICsgMSA6IGNvbHVtbnMubGVuZ3RoO1xuICAgICAgdmFyIG1vYmlsZU9ubHlDb2xzID0gY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24gKG51bSwgY29sdW1uKSB7XG4gICAgICAgIHZhciBfbW9iaWxlT3B0aW9ucztcblxuICAgICAgICByZXR1cm4gY29sdW1uICE9PSBudWxsICYmIGNvbHVtbiAhPT0gdm9pZCAwICYmIChfbW9iaWxlT3B0aW9ucyA9IGNvbHVtbi5tb2JpbGVPcHRpb25zKSAhPT0gbnVsbCAmJiBfbW9iaWxlT3B0aW9ucyAhPT0gdm9pZCAwICYmIF9tb2JpbGVPcHRpb25zLm9ubHkgPyBudW0gKyAxIDogbnVtICsgMDsgLy8gQldDIG9ubHlcbiAgICAgIH0sIDApO1xuICAgICAgZXhwYW5kZWRSb3dDb2xTcGFuID0gZXhwYW5kZWRSb3dDb2xTcGFuIC0gbW9iaWxlT25seUNvbHM7IC8vIFdlJ2xsIHVzZSB0aGUgSUQgdG8gYXNzb2NpYXRlIHRoZSBleHBhbmRlZCByb3cgd2l0aCB0aGUgb3JpZ2luYWwuXG5cbiAgICAgIHZhciBoYXNFeHBhbmRlZFJvdyA9IGl0ZW1JZFRvRXhwYW5kZWRSb3dNYXAuaGFzT3duUHJvcGVydHkoaXRlbUlkKTtcbiAgICAgIHZhciBleHBhbmRlZFJvd0lkID0gaGFzRXhwYW5kZWRSb3cgPyBcInJvd19cIi5jb25jYXQoaXRlbUlkLCBcIl9leHBhbnNpb25cIikgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgZXhwYW5kZWRSb3cgPSBoYXNFeHBhbmRlZFJvdyA/IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIHtcbiAgICAgICAgaWQ6IGV4cGFuZGVkUm93SWQsXG4gICAgICAgIGlzRXhwYW5kZWRSb3c6IHRydWUsXG4gICAgICAgIGlzU2VsZWN0YWJsZTogaXNTZWxlY3RhYmxlXG4gICAgICB9LCBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBjb2xTcGFuOiBleHBhbmRlZFJvd0NvbFNwYW4sXG4gICAgICAgIHRleHRPbmx5OiBmYWxzZVxuICAgICAgfSwgaXRlbUlkVG9FeHBhbmRlZFJvd01hcFtpdGVtSWRdKSkgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgcm93UHJvcHNDYWxsYmFjayA9IHRoaXMucHJvcHMucm93UHJvcHM7XG4gICAgICB2YXIgcm93UHJvcHMgPSBnZXRSb3dQcm9wcyhpdGVtLCByb3dQcm9wc0NhbGxiYWNrKTtcblxuICAgICAgdmFyIHJvdyA9IF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3csIF9leHRlbmRzKHtcbiAgICAgICAgXCJhcmlhLW93bnNcIjogZXhwYW5kZWRSb3dJZCxcbiAgICAgICAgaXNTZWxlY3RhYmxlOiBpc1NlbGVjdGFibGUgPT0gbnVsbCA/IGNhbGN1bGF0ZWRIYXNTZWxlY3Rpb24gOiBpc1NlbGVjdGFibGUsXG4gICAgICAgIGlzU2VsZWN0ZWQ6IHNlbGVjdGVkLFxuICAgICAgICBoYXNBY3Rpb25zOiBoYXNBY3Rpb25zID09IG51bGwgPyBjYWxjdWxhdGVkSGFzQWN0aW9ucyA6IGhhc0FjdGlvbnMsXG4gICAgICAgIGlzRXhwYW5kYWJsZTogaXNFeHBhbmRhYmxlXG4gICAgICB9LCByb3dQcm9wcyksIGNlbGxzKTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRnJhZ21lbnQsIHtcbiAgICAgICAga2V5OiBcInJvd19cIi5jb25jYXQoaXRlbUlkKVxuICAgICAgfSwgcm93LCBleHBhbmRlZFJvdyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1TZWxlY3Rpb25DZWxsKGl0ZW1JZCwgaXRlbSwgc2VsZWN0ZWQpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5wcm9wcy5zZWxlY3Rpb247XG4gICAgICB2YXIga2V5ID0gXCJfc2VsZWN0aW9uX2NvbHVtbl9cIi5jb25jYXQoaXRlbUlkKTtcbiAgICAgIHZhciBjaGVja2VkID0gc2VsZWN0ZWQ7XG4gICAgICB2YXIgZGlzYWJsZWQgPSBzZWxlY3Rpb24uc2VsZWN0YWJsZSAmJiAhc2VsZWN0aW9uLnNlbGVjdGFibGUoaXRlbSk7XG4gICAgICB2YXIgdGl0bGUgPSBzZWxlY3Rpb24uc2VsZWN0YWJsZU1lc3NhZ2UgJiYgc2VsZWN0aW9uLnNlbGVjdGFibGVNZXNzYWdlKCFkaXNhYmxlZCwgaXRlbSk7XG5cbiAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICAgIF90aGlzNi5jaGFuZ2VTZWxlY3Rpb24oW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShfdGhpczYuc3RhdGUuc2VsZWN0aW9uKSwgW2l0ZW1dKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGl0ZW1JZENhbGxiYWNrID0gX3RoaXM2LnByb3BzLml0ZW1JZDtcblxuICAgICAgICAgIF90aGlzNi5jaGFuZ2VTZWxlY3Rpb24oX3RoaXM2LnN0YXRlLnNlbGVjdGlvbi5yZWR1Y2UoZnVuY3Rpb24gKHNlbGVjdGlvbiwgc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICBpZiAoZ2V0SXRlbUlkKHNlbGVjdGVkSXRlbSwgaXRlbUlkQ2FsbGJhY2spICE9PSBpdGVtSWQpIHtcbiAgICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2goc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICAgICAgICB9LCBbXSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUYWJsZVJvd0NlbGxDaGVja2JveCwge1xuICAgICAgICBrZXk6IGtleVxuICAgICAgfSwgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUuc2VsZWN0VGhpc1Jvd1wiLFxuICAgICAgICBkZWZhdWx0OiBcIlNlbGVjdCB0aGlzIHJvd1wiXG4gICAgICB9LCBmdW5jdGlvbiAoc2VsZWN0VGhpc1Jvdykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlDaGVja2JveCwge1xuICAgICAgICAgIGlkOiBcIlwiLmNvbmNhdChfdGhpczYudGFibGVJZCkuY29uY2F0KGtleSwgXCItY2hlY2tib3hcIiksXG4gICAgICAgICAgdHlwZTogXCJpbkxpc3RcIixcbiAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICAgICAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICAgICAgdGl0bGU6IHRpdGxlIHx8IHNlbGVjdFRoaXNSb3csXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRpdGxlIHx8IHNlbGVjdFRoaXNSb3csXG4gICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBcImNoZWNrYm94U2VsZWN0Um93LVwiLmNvbmNhdChpdGVtSWQpXG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQWN0aW9uc0NlbGxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVySXRlbUFjdGlvbnNDZWxsKGl0ZW1JZCwgaXRlbSwgY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIHZhciBhY3Rpb25FbmFibGVkID0gZnVuY3Rpb24gYWN0aW9uRW5hYmxlZChhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIF90aGlzNy5zdGF0ZS5zZWxlY3Rpb24ubGVuZ3RoID09PSAwICYmICghYWN0aW9uLmVuYWJsZWQgfHwgYWN0aW9uLmVuYWJsZWQoaXRlbSkpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGFjdHVhbEFjdGlvbnMgPSBjb2x1bW4uYWN0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICByZXR1cm4gIWFjdGlvbi5hdmFpbGFibGUgfHwgYWN0aW9uLmF2YWlsYWJsZShpdGVtKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYWN0dWFsQWN0aW9ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgIC8vIGlmIGFueSBvZiB0aGUgYWN0aW9ucyBgaXNQcmltYXJ5YCwgYWRkIHRoZW0gaW5saW5lIGFzIHdlbGwsIGJ1dCBvbmx5IHRoZSBmaXJzdCAyXG4gICAgICAgIHZhciBwcmltYXJ5QWN0aW9ucyA9IGFjdHVhbEFjdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgcmV0dXJuIG8uaXNQcmltYXJ5O1xuICAgICAgICB9KTtcbiAgICAgICAgYWN0dWFsQWN0aW9ucyA9IHByaW1hcnlBY3Rpb25zLnNsaWNlKDAsIDIpOyAvLyBpZiB3ZSBoYXZlIG1vcmUgdGhhbiAxIGFjdGlvbiwgd2UgZG9uJ3Qgc2hvdyB0aGVtIGFsbCBpbiB0aGUgY2VsbCwgaW5zdGVhZCB3ZVxuICAgICAgICAvLyBwdXQgdGhlbSBhbGwgaW4gYSBwb3BvdmVyIHRvb2wuIFRoaXMgZWZmZWN0aXZlbHkgbWVhbnMgd2UgY2FuIG9ubHkgaGF2ZSBhIG1heGltdW1cbiAgICAgICAgLy8gb2Ygb25lIHRvb2wgcGVyIHJvdyAoaXQncyBlaXRoZXIgYW5kIG5vcm1hbCBhY3Rpb24sIG9yIGl0J3MgYSBwb3BvdmVyIHRoYXQgc2hvd3MgbXVsdGlwbGUgYWN0aW9ucylcbiAgICAgICAgLy9cbiAgICAgICAgLy8gaGVyZSB3ZSBjcmVhdGUgYSBzaW5nbGUgY3VzdG9tIGFjdGlvbiB0aGF0IHRyaWdnZXJzIHRoZSBwb3BvdmVyIHdpdGggYWxsIHRoZSBjb25maWd1cmVkIGFjdGlvbnNcblxuICAgICAgICBhY3R1YWxBY3Rpb25zLnB1c2goe1xuICAgICAgICAgIG5hbWU6ICdBbGwgYWN0aW9ucycsXG4gICAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goQ29sbGFwc2VkSXRlbUFjdGlvbnMsIHtcbiAgICAgICAgICAgICAgYWN0aW9uczogY29sdW1uLmFjdGlvbnMsXG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICBhY3Rpb25FbmFibGVkOiBhY3Rpb25FbmFibGVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgdG9vbHMgPSBfX19FbW90aW9uSlNYKEV4cGFuZGVkSXRlbUFjdGlvbnMsIHtcbiAgICAgICAgYWN0aW9uczogYWN0dWFsQWN0aW9ucyxcbiAgICAgICAgaXRlbUlkOiBpdGVtSWQsXG4gICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgIGFjdGlvbkVuYWJsZWQ6IGFjdGlvbkVuYWJsZWRcbiAgICAgIH0pO1xuXG4gICAgICB2YXIga2V5ID0gXCJyZWNvcmRfYWN0aW9uc19cIi5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGNvbHVtbkluZGV4KTtcbiAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aVRhYmxlUm93Q2VsbCwge1xuICAgICAgICBzaG93T25Ib3ZlcjogdHJ1ZSxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGFsaWduOiBcInJpZ2h0XCIsXG4gICAgICAgIHRleHRPbmx5OiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uczogdHJ1ZVxuICAgICAgfSwgdG9vbHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtRmllbGREYXRhQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtRmllbGREYXRhQ2VsbChpdGVtSWQsIGl0ZW0sIGNvbHVtbiwgY29sdW1uSW5kZXgsIHNldFNjb3BlUm93KSB7XG4gICAgICB2YXIgZmllbGQgPSBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgcmVuZGVyID0gY29sdW1uLnJlbmRlcixcbiAgICAgICAgICBkYXRhVHlwZSA9IGNvbHVtbi5kYXRhVHlwZTtcbiAgICAgIHZhciBrZXkgPSBcIl9kYXRhX2NvbHVtbl9cIi5jb25jYXQoZmllbGQsIFwiX1wiKS5jb25jYXQoaXRlbUlkLCBcIl9cIikuY29uY2F0KGNvbHVtbkluZGV4KTtcbiAgICAgIHZhciBjb250ZW50UmVuZGVyZXIgPSByZW5kZXIgfHwgdGhpcy5nZXRSZW5kZXJlckZvckRhdGFUeXBlKGRhdGFUeXBlKTtcbiAgICAgIHZhciB2YWx1ZSA9IGdldChpdGVtLCBmaWVsZCk7XG4gICAgICB2YXIgY29udGVudCA9IGNvbnRlbnRSZW5kZXJlcih2YWx1ZSwgaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGtleSwgY29udGVudCwgc2V0U2NvcGVSb3cpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQ29tcHV0ZWRDZWxsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlckl0ZW1Db21wdXRlZENlbGwoaXRlbUlkLCBpdGVtLCBjb2x1bW4sIGNvbHVtbkluZGV4KSB7XG4gICAgICB2YXIgcmVuZGVyID0gY29sdW1uLnJlbmRlcjtcbiAgICAgIHZhciBrZXkgPSBcIl9jb21wdXRlZF9jb2x1bW5fXCIuY29uY2F0KGl0ZW1JZCwgXCJfXCIpLmNvbmNhdChjb2x1bW5JbmRleCk7XG4gICAgICB2YXIgY29udGVudFJlbmRlcmVyID0gcmVuZGVyIHx8IHRoaXMuZ2V0UmVuZGVyZXJGb3JEYXRhVHlwZSgpO1xuICAgICAgdmFyIGNvbnRlbnQgPSBjb250ZW50UmVuZGVyZXIoaXRlbSk7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGtleSwgY29udGVudCwgZmFsc2UpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJJdGVtQ2VsbFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXJJdGVtQ2VsbChpdGVtLCBjb2x1bW4sIGtleSwgY29udGVudCwgc2V0U2NvcGVSb3cpIHtcbiAgICAgIHZhciBfcmVmOCA9IGNvbHVtbixcbiAgICAgICAgICBhbGlnbiA9IF9yZWY4LmFsaWduLFxuICAgICAgICAgIHJlbmRlciA9IF9yZWY4LnJlbmRlcixcbiAgICAgICAgICBkYXRhVHlwZSA9IF9yZWY4LmRhdGFUeXBlLFxuICAgICAgICAgIGlzRXhwYW5kZXIgPSBfcmVmOC5pc0V4cGFuZGVyLFxuICAgICAgICAgIHRleHRPbmx5ID0gX3JlZjgudGV4dE9ubHksXG4gICAgICAgICAgbmFtZSA9IF9yZWY4Lm5hbWUsXG4gICAgICAgICAgZmllbGQgPSBfcmVmOC5maWVsZCxcbiAgICAgICAgICBkZXNjcmlwdGlvbiA9IF9yZWY4LmRlc2NyaXB0aW9uLFxuICAgICAgICAgIHNvcnRhYmxlID0gX3JlZjguc29ydGFibGUsXG4gICAgICAgICAgZm9vdGVyID0gX3JlZjguZm9vdGVyLFxuICAgICAgICAgIG1vYmlsZU9wdGlvbnMgPSBfcmVmOC5tb2JpbGVPcHRpb25zLFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjgsIF9leGNsdWRlZDIpO1xuXG4gICAgICB2YXIgY29sdW1uQWxpZ24gPSBhbGlnbiB8fCB0aGlzLmdldEFsaWduRm9yRGF0YVR5cGUoZGF0YVR5cGUpO1xuICAgICAgdmFyIGNlbGxQcm9wc0NhbGxiYWNrID0gdGhpcy5wcm9wcy5jZWxsUHJvcHM7XG4gICAgICB2YXIgY2VsbFByb3BzID0gZ2V0Q2VsbFByb3BzKGl0ZW0sIGNvbHVtbiwgY2VsbFByb3BzQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVSb3dDZWxsLCBfZXh0ZW5kcyh7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBhbGlnbjogY29sdW1uQWxpZ24sXG4gICAgICAgIGlzRXhwYW5kZXI6IGlzRXhwYW5kZXIsXG4gICAgICAgIHRleHRPbmx5OiB0ZXh0T25seSB8fCAhcmVuZGVyLFxuICAgICAgICBzZXRTY29wZVJvdzogc2V0U2NvcGVSb3csXG4gICAgICAgIG1vYmlsZU9wdGlvbnM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbW9iaWxlT3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgcmVuZGVyOiBtb2JpbGVPcHRpb25zICYmIG1vYmlsZU9wdGlvbnMucmVuZGVyICYmIG1vYmlsZU9wdGlvbnMucmVuZGVyKGl0ZW0pLFxuICAgICAgICAgIGhlYWRlcjogbW9iaWxlT3B0aW9ucyAmJiBtb2JpbGVPcHRpb25zLmhlYWRlciA9PT0gZmFsc2UgPyBmYWxzZSA6IG5hbWVcbiAgICAgICAgfSlcbiAgICAgIH0sIGNlbGxQcm9wcywgcmVzdCksIGNvbnRlbnQpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZW5kZXJlckZvckRhdGFUeXBlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVyRm9yRGF0YVR5cGUoKSB7XG4gICAgICB2YXIgZGF0YVR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdhdXRvJztcbiAgICAgIHZhciBwcm9maWxlID0gZGF0YVR5cGVzUHJvZmlsZXNbZGF0YVR5cGVdO1xuXG4gICAgICBpZiAoIXByb2ZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBkYXRhVHlwZSBbXCIuY29uY2F0KGRhdGFUeXBlLCBcIl0uIFRoZSBzdXBwb3J0ZWQgZGF0YSB0eXBlcyBhcmUgW1wiKS5jb25jYXQoREFUQV9UWVBFUy5qb2luKCcsICcpLCBcIl1cIikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvZmlsZS5yZW5kZXI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEFsaWduRm9yRGF0YVR5cGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWxpZ25Gb3JEYXRhVHlwZSgpIHtcbiAgICAgIHZhciBkYXRhVHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ2F1dG8nO1xuICAgICAgdmFyIHByb2ZpbGUgPSBkYXRhVHlwZXNQcm9maWxlc1tkYXRhVHlwZV07XG5cbiAgICAgIGlmICghcHJvZmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGRhdGFUeXBlIFtcIi5jb25jYXQoZGF0YVR5cGUsIFwiXS4gVGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzIGFyZSBbXCIpLmNvbmNhdChEQVRBX1RZUEVTLmpvaW4oJywgJyksIFwiXVwiKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9maWxlLmFsaWduO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJQYWdpbmF0aW9uQmFyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlclBhZ2luYXRpb25CYXIoKSB7XG4gICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgdmFyIF90aGlzJHByb3BzMTAgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGVycm9yID0gX3RoaXMkcHJvcHMxMC5lcnJvcixcbiAgICAgICAgICBwYWdpbmF0aW9uID0gX3RoaXMkcHJvcHMxMC5wYWdpbmF0aW9uLFxuICAgICAgICAgIHRhYmxlQ2FwdGlvbiA9IF90aGlzJHByb3BzMTAudGFibGVDYXB0aW9uLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMxMC5vbkNoYW5nZTtcblxuICAgICAgaWYgKCFlcnJvciAmJiBwYWdpbmF0aW9uICYmIHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGlmICghb25DaGFuZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgQmFzaWMgVGFibGUgaXMgY29uZmlndXJlZCB3aXRoIHBhZ2luYXRpb24gYnV0IFtvbkNoYW5nZV0gaXNcXG4gICAgICAgIG5vdCBjb25maWd1cmVkLiBUaGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHBhZ2luYXRpb24gY2hhbmdlc1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKEV1aUkxOG4sIHtcbiAgICAgICAgICB0b2tlbjogXCJldWlCYXNpY1RhYmxlLnRhYmxlUGFnaW5hdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiUGFnaW5hdGlvbiBmb3IgdGFibGU6IHt0YWJsZUNhcHRpb259XCIsXG4gICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICB0YWJsZUNhcHRpb246IHRhYmxlQ2FwdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKHRhYmxlUGFnaW5hdGlvbikge1xuICAgICAgICAgIHJldHVybiBfX19FbW90aW9uSlNYKFBhZ2luYXRpb25CYXIsIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb24sXG4gICAgICAgICAgICBvblBhZ2VTaXplQ2hhbmdlOiBfdGhpczgub25QYWdlU2l6ZUNoYW5nZS5iaW5kKF90aGlzOCksXG4gICAgICAgICAgICBvblBhZ2VDaGFuZ2U6IF90aGlzOC5vblBhZ2VDaGFuZ2UuYmluZChfdGhpczgpLFxuICAgICAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IF90aGlzOC50YWJsZUlkLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHRhYmxlUGFnaW5hdGlvblxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICBpZiAoIW5leHRQcm9wcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgLy8gbmV4dCBwcm9wcyBkb2Vzbid0IGhhdmUgYSBzZWxlY3Rpb24sIHJlc2V0IG91ciBzdGF0ZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlbGVjdGlvbjogW11cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZW1JZCA9IG5leHRQcm9wcy5pdGVtSWQ7XG4gICAgICB2YXIgc2VsZWN0aW9uID0gcHJldlN0YXRlLnNlbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICByZXR1cm4gbmV4dFByb3BzLml0ZW1zLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBnZXRJdGVtSWQoaXRlbSwgaXRlbUlkKSA9PT0gZ2V0SXRlbUlkKHNlbGVjdGVkSXRlbSwgaXRlbUlkKTtcbiAgICAgICAgfSkgIT09IC0xO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoICE9PSBwcmV2U3RhdGUuc2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICBpZiAobmV4dFByb3BzLnNlbGVjdGlvbi5vblNlbGVjdGlvbkNoYW5nZSkge1xuICAgICAgICAgIG5leHRQcm9wcy5zZWxlY3Rpb24ub25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb25cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyB1c2VkIGZvciBtb3ZpbmcgaW4gJiBvdXQgb2YgYGxvYWRpbmdgIHN0YXRlXG5cbiAgfV0pO1xuXG4gIHJldHVybiBFdWlCYXNpY1RhYmxlO1xufShDb21wb25lbnQpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXVpQmFzaWNUYWJsZSwgXCJkZWZhdWx0UHJvcHNcIiwge1xuICByZXNwb25zaXZlOiB0cnVlLFxuICB0YWJsZUxheW91dDogJ2ZpeGVkJyxcbiAgbm9JdGVtc01lc3NhZ2U6IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgIHRva2VuOiBcImV1aUJhc2ljVGFibGUubm9JdGVtc01lc3NhZ2VcIixcbiAgICBkZWZhdWx0OiBcIk5vIGl0ZW1zIGZvdW5kXCJcbiAgfSlcbn0pO1xuXG5FdWlCYXNpY1RhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyBob3cgdG8gZXh0cmFjdCBhIHVuaXF1ZSBJRCBmcm9tIGVhY2ggaXRlbSwgdXNlZCBmb3Igc2VsZWN0aW9ucyAmIGV4cGFuZGVkIHJvd3NcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBEZXNjcmliZXMgaG93IHRvIGV4dHJhY3QgYSB1bmlxdWUgSUQgZnJvbSBlYWNoIGl0ZW0sIHVzZWQgZm9yIHNlbGVjdGlvbnMgJiBleHBhbmRlZCByb3dzXG4gICAgICovXG4gIGl0ZW1JZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKSxcblxuICAvKipcbiAgICAgKiBSb3cgZXhwYW5zaW9uIHVzZXMgdGhlIGl0ZW1JZCBwcm9wIHRvIGlkZW50aWZ5IGVhY2ggcm93XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUm93IGV4cGFuc2lvbiB1c2VzIHRoZSBpdGVtSWQgcHJvcCB0byBpZGVudGlmeSBlYWNoIHJvd1xuICAgICAqL1xuICBpdGVtSWRUb0V4cGFuZGVkUm93TWFwOiBQcm9wVHlwZXMuc2hhcGUoe30pLFxuXG4gIC8qKlxuICAgICAqIEEgbGlzdCBvZiBvYmplY3RzIHRvIGFwcGVhciBpbiB0aGUgdGFibGUgLSBhbiBpdGVtIHBlciByb3dcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBIGxpc3Qgb2Ygb2JqZWN0cyB0byBhcHBlYXIgaW4gdGhlIHRhYmxlIC0gYW4gaXRlbSBwZXIgcm93XG4gICAgICovXG4gIGl0ZW1zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpLFxuXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gYEV1aVRhYmxlUm93Q2VsbGBcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd0NlbGxgXG4gICAgICovXG4gIGNlbGxQcm9wczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG5cbiAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRXVpVGFibGVGaWVsZERhdGFDb2x1bW5UeXBlLCAjRXVpVGFibGVDb21wdXRlZENvbHVtblR5cGUgb3IgI0V1aVRhYmxlQWN0aW9uc0NvbHVtblR5cGUuXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb25lIG9mIHRoZSBvYmplY3RzOiAjRXVpVGFibGVGaWVsZERhdGFDb2x1bW5UeXBlLCAjRXVpVGFibGVDb21wdXRlZENvbHVtblR5cGUgb3IgI0V1aVRhYmxlQWN0aW9uc0NvbHVtblR5cGUuXG4gICAgICovXG4gIGNvbHVtbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBIGZpZWxkIG9mIHRoZSBpdGVtIChtYXkgYmUgYSBuZXN0ZWQgZmllbGQpXG4gICAgICAgKi9cbiAgICAvLyB0eXBlIGhhY2sgdXNlZCBmb3IgYmV0dGVyIGF1dG9jb21wbGV0ZSBzdXBwb3J0XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yOTcyOVxuICAgIGZpZWxkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsIFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG4gICAgLy8gc3VwcG9ydHMgb3V0ZXIuaW5uZXIga2V5IHBhdGhzXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgY29sdW1uICh3aWxsIGJlIHByZXNlbnRlZCBhcyBhIHRpdGxlIG92ZXIgdGhlIGNvbHVtbiBoZWFkZXIpXG4gICAgICAgKi9cbiAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogRGVzY3JpYmVzIHRoZSBkYXRhIHR5cGVzIG9mIHRoZSBkaXNwbGF5ZWQgdmFsdWUgKHNlcnZlcyBhcyBhIHJlbmRlcmluZyBoaW50IGZvciB0aGUgdGFibGUpXG4gICAgICAgKi9cbiAgICBkYXRhVHlwZTogUHJvcFR5cGVzLm9uZU9mKFtcImF1dG9cIiwgXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJib29sZWFuXCIsIFwiZGF0ZVwiXSksXG5cbiAgICAvKipcbiAgICAgICAqIEEgQ1NTIHdpZHRoIHByb3BlcnR5LiBIaW50cyBmb3IgdGhlIHJlcXVpcmVkIHdpZHRoIG9mIHRoZSBjb2x1bW4gKGUuZy4gXCIzMCVcIiwgXCIxMDBweFwiLCBldGMuLilcbiAgICAgICAqL1xuICAgIHdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHVzZXIgY2FuIHNvcnQgb24gdGhpcyBjb2x1bW4uIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgdG8gc29ydCBhZ2FpbnN0XG4gICAgICAgKi9cbiAgICBzb3J0YWJsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuICAgIGlzRXhwYW5kZXI6IFByb3BUeXBlcy5ib29sLFxuICAgIHRleHRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRGVmaW5lcyB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb2YgdGhlIGNvbHVtblxuICAgICAgICovXG4gICAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNvbHVtbiBzaG91bGQgdHJ1bmNhdGUgaXRzIGNvbnRlbnQgd2hlbiBpdCBkb2Vzbid0IGZpdFxuICAgICAgICovXG4gICAgdHJ1bmNhdGVUZXh0OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBtb2JpbGVPcHRpb25zOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuY1xuICAgIH0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZXNjcmliZSBhIGN1c3RvbSByZW5kZXJlciBmdW5jdGlvbiBmb3IgdGhlIGNvbnRlbnRcbiAgICAgICAqL1xuICAgIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIENvbnRlbnQgdG8gZGlzcGxheSBpbiB0aGUgZm9vdGVyIGJlbmVhdGggdGhpcyBjb2x1bW5cbiAgICAgICAqL1xuICAgIGZvb3RlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSksXG5cbiAgICAvKipcbiAgICAgICAqIERpc2FibGVzIHRoZSB1c2VyJ3MgYWJpbGl0eSB0byBjaGFuZ2UgdGhlIHNvcnQgYnV0IHN0aWxsIHNob3dzIHRoZSBjdXJyZW50IGRpcmVjdGlvblxuICAgICAgICovXG4gICAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImFyaWEtbGFiZWxcIjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKipcbiAgICAgICAqIEEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyB0aGUgdmFsdWUgZm9yIGVhY2ggaXRlbSBhbmQgcmVuZGVycyBpdFxuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjb2x1bW4gKHdpbGwgYmUgcHJlc2VudGVkIGFzIGEgdGl0bGUgb3ZlciB0aGUgY29sdW1uIGhlYWRlclxuICAgICAgICovXG4gICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIElmIHByb3ZpZGVkLCBhbGxvd3MgdGhpcyBjb2x1bW4gdG8gYmUgc29ydGVkIG9uLiBNdXN0IHJldHVybiB0aGUgdmFsdWUgdG8gc29ydCBhZ2FpbnN0LlxuICAgICAgICovXG4gICAgc29ydGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIENTUyB3aWR0aCBwcm9wZXJ0eS4gSGludHMgZm9yIHRoZSByZXF1aXJlZCB3aWR0aCBvZiB0aGUgY29sdW1uXG4gICAgICAgKi9cbiAgICB3aWR0aDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjb2x1bW4gc2hvdWxkIHRydW5jYXRlIGl0cyBjb250ZW50IHdoZW4gaXQgZG9lc24ndCBmaXRcbiAgICAgICAqL1xuICAgIHRydW5jYXRlVGV4dDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNFeHBhbmRlcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihbXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJjZW50ZXJcIl0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBEaXNhYmxlcyB0aGUgdXNlcidzIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBzb3J0IGJ1dCBzdGlsbCBzaG93cyB0aGUgY3VycmVudCBkaXJlY3Rpb25cbiAgICAgICAqL1xuICAgIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJhcmlhLWxhYmVsXCI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBbiBhcnJheSBvZiBvbmUgb2YgdGhlIG9iamVjdHM6ICNEZWZhdWx0SXRlbUFjdGlvbiBvciAjQ3VzdG9tSXRlbUFjdGlvblxuICAgICAgICovXG4gICAgYWN0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdHlwZSBvZiBhY3Rpb25cbiAgICAgICAgICovXG4gICAgICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYnV0dG9uXCJdKSwgUHJvcFR5cGVzLm9uZU9mKFtcImljb25cIl0pLmlzUmVxdWlyZWRdKSxcblxuICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGNvbG9yIG9mIHRoZSBidXR0b25cbiAgICAgICAgICovXG4gICAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSldKSxcblxuICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGFjdGlvbiAod2lsbCBiZSB0aGUgYnV0dG9uIGNhcHRpb24pXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gY2FwdGlvbilcbiAgICAgICAgICovXG4gICAgICBuYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAgICAgLyoqXG4gICAgICAgICAqIERlc2NyaWJlcyB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gdGl0bGUpXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiB0aXRsZSlcbiAgICAgICAgICovXG4gICAgICBkZXNjcmlwdGlvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdGhlIGFjdGlvblxuICAgICAgICAgKi9cblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgaGFuZGxlciBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBhY3Rpb25cbiAgICAgICAgICovXG4gICAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGhyZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICB0YXJnZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgICAqL1xuXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICAgKi9cbiAgICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICAgKi9cblxuICAgICAgLyoqXG4gICAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgICAqL1xuICAgICAgZW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBpc1ByaW1hcnk6IFByb3BUeXBlcy5ib29sLFxuICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQXNzb2NpYXRlcyBhbiBpY29uIHdpdGggdGhlIGJ1dHRvblxuICAgICAgICAgKi9cbiAgICAgIGljb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJhY2Nlc3NpYmlsaXR5XCIsIFwiYWRkRGF0YUFwcFwiLCBcImFkdmFuY2VkU2V0dGluZ3NBcHBcIiwgXCJhZ2VudEFwcFwiLCBcImFnZ3JlZ2F0ZVwiLCBcImFsZXJ0XCIsIFwiYW5hbHl6ZUV2ZW50XCIsIFwiYW5ub3RhdGlvblwiLCBcImFwbUFwcFwiLCBcImFwbVRyYWNlXCIsIFwiYXBwU2VhcmNoQXBwXCIsIFwiYXBwc1wiLCBcImFycm93RG93blwiLCBcImFycm93TGVmdFwiLCBcImFycm93UmlnaHRcIiwgXCJhcnJvd1VwXCIsIFwiYXJyb3dTdGFydFwiLCBcImFycm93RW5kXCIsIFwiYXN0ZXJpc2tcIiwgXCJhdWRpdGJlYXRBcHBcIiwgXCJiZWFrZXJcIiwgXCJiZWxsXCIsIFwiYmVsbFNsYXNoXCIsIFwiYm9sdFwiLCBcImJveGVzSG9yaXpvbnRhbFwiLCBcImJveGVzVmVydGljYWxcIiwgXCJicmFuY2hcIiwgXCJicmFuY2hVc2VyXCIsIFwiYnJvb21cIiwgXCJicnVzaFwiLCBcImJ1Z1wiLCBcImJ1bGxzZXllXCIsIFwiY2FsZW5kYXJcIiwgXCJjYW52YXNBcHBcIiwgXCJjYXNlc0FwcFwiLCBcImNoZWNrXCIsIFwiY2hlY2tJbkNpcmNsZUZpbGxlZFwiLCBcImNoZWVyXCIsIFwiY2xhc3NpZmljYXRpb25Kb2JcIiwgXCJjbG9ja1wiLCBcImNsb3VkRHJpenpsZVwiLCBcImNsb3VkU3Rvcm15XCIsIFwiY2xvdWRTdW5ueVwiLCBcImNsdXN0ZXJcIiwgXCJjb2RlQXBwXCIsIFwiY29sb3JcIiwgXCJjb21wdXRlXCIsIFwiY29uc29sZVwiLCBcImNvbnNvbGVBcHBcIiwgXCJjb250YWluZXJcIiwgXCJjb250aW51aXR5QWJvdmVcIiwgXCJjb250aW51aXR5QWJvdmVCZWxvd1wiLCBcImNvbnRpbnVpdHlCZWxvd1wiLCBcImNvbnRpbnVpdHlXaXRoaW5cIiwgXCJjb250cm9sc0hvcml6b250YWxcIiwgXCJjb250cm9sc1ZlcnRpY2FsXCIsIFwiY29weVwiLCBcImNvcHlDbGlwYm9hcmRcIiwgXCJjcmVhdGVBZHZhbmNlZEpvYlwiLCBcImNyZWF0ZU11bHRpTWV0cmljSm9iXCIsIFwiY3JlYXRlUG9wdWxhdGlvbkpvYlwiLCBcImNyZWF0ZVNpbmdsZU1ldHJpY0pvYlwiLCBcImNyb3NzXCIsIFwiY3Jvc3NDbHVzdGVyUmVwbGljYXRpb25BcHBcIiwgXCJjcm9zc0luQUNpcmNsZUZpbGxlZFwiLCBcImNyb3NzaGFpcnNcIiwgXCJjdXJyZW5jeVwiLCBcImN1dFwiLCBcImRhc2hib2FyZEFwcFwiLCBcImRhdGFWaXN1YWxpemVyXCIsIFwiZGF0YWJhc2VcIiwgXCJkZXNrdG9wXCIsIFwiZGV2VG9vbHNBcHBcIiwgXCJkaXNjb3ZlckFwcFwiLCBcImRvY3VtZW50XCIsIFwiZG9jdW1lbnRFZGl0XCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImRvY3VtZW50c1wiLCBcImRvdFwiLCBcImRvdWJsZUFycm93TGVmdFwiLCBcImRvdWJsZUFycm93UmlnaHRcIiwgXCJkb3dubG9hZFwiLCBcImVkaXRvckFsaWduQ2VudGVyXCIsIFwiZWRpdG9yQWxpZ25MZWZ0XCIsIFwiZWRpdG9yQWxpZ25SaWdodFwiLCBcImVkaXRvckJvbGRcIiwgXCJlZGl0b3JDaGVja2xpc3RcIiwgXCJlZGl0b3JDb2RlQmxvY2tcIiwgXCJlZGl0b3JDb21tZW50XCIsIFwiZWRpdG9yRGlzdHJpYnV0ZUhvcml6b250YWxcIiwgXCJlZGl0b3JEaXN0cmlidXRlVmVydGljYWxcIiwgXCJlZGl0b3JIZWFkaW5nXCIsIFwiZWRpdG9ySXRhbGljXCIsIFwiZWRpdG9ySXRlbUFsaWduQm90dG9tXCIsIFwiZWRpdG9ySXRlbUFsaWduQ2VudGVyXCIsIFwiZWRpdG9ySXRlbUFsaWduTGVmdFwiLCBcImVkaXRvckl0ZW1BbGlnbk1pZGRsZVwiLCBcImVkaXRvckl0ZW1BbGlnblJpZ2h0XCIsIFwiZWRpdG9ySXRlbUFsaWduVG9wXCIsIFwiZWRpdG9yTGlua1wiLCBcImVkaXRvck9yZGVyZWRMaXN0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21MZWZ0XCIsIFwiZWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodFwiLCBcImVkaXRvclBvc2l0aW9uVG9wTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uVG9wUmlnaHRcIiwgXCJlZGl0b3JSZWRvXCIsIFwiZWRpdG9yU3RyaWtlXCIsIFwiZWRpdG9yVGFibGVcIiwgXCJlZGl0b3JVbmRlcmxpbmVcIiwgXCJlZGl0b3JVbmRvXCIsIFwiZWRpdG9yVW5vcmRlcmVkTGlzdFwiLCBcImVtYWlsXCIsIFwiZW1wdHlcIiwgXCJlbXNBcHBcIiwgXCJlcWxcIiwgXCJlcmFzZXJcIiwgXCJleGl0XCIsIFwiZXhwYW5kXCIsIFwiZXhwYW5kTWluaVwiLCBcImV4cG9ydEFjdGlvblwiLCBcImV5ZVwiLCBcImV5ZUNsb3NlZFwiLCBcImZhY2VIYXBweVwiLCBcImZhY2VOZXV0cmFsXCIsIFwiZmFjZVNhZFwiLCBcImZpbGViZWF0QXBwXCIsIFwiZmlsdGVyXCIsIFwiZmxhZ1wiLCBcImZsZWV0QXBwXCIsIFwiZm9sZFwiLCBcImZvbGRlckNoZWNrXCIsIFwiZm9sZGVyQ2xvc2VkXCIsIFwiZm9sZGVyRXhjbGFtYXRpb25cIiwgXCJmb2xkZXJPcGVuXCIsIFwiZnJhbWVOZXh0XCIsIFwiZnJhbWVQcmV2aW91c1wiLCBcImZ1bGxTY3JlZW5cIiwgXCJmdWxsU2NyZWVuRXhpdFwiLCBcImZ1bmN0aW9uXCIsIFwiZ2VhclwiLCBcImdpc0FwcFwiLCBcImdsYXNzZXNcIiwgXCJnbG9iZVwiLCBcImdyYWJcIiwgXCJncmFiSG9yaXpvbnRhbFwiLCBcImdyYXBoQXBwXCIsIFwiZ3JpZFwiLCBcImdyb2tBcHBcIiwgXCJoZWFydFwiLCBcImhlYXJ0YmVhdEFwcFwiLCBcImhlYXRtYXBcIiwgXCJoZWxwXCIsIFwiaG9tZVwiLCBcImlJbkNpcmNsZVwiLCBcImltYWdlXCIsIFwiaW1wb3J0QWN0aW9uXCIsIFwiaW5kZXhDbG9zZVwiLCBcImluZGV4RWRpdFwiLCBcImluZGV4Rmx1c2hcIiwgXCJpbmRleE1hbmFnZW1lbnRBcHBcIiwgXCJpbmRleE1hcHBpbmdcIiwgXCJpbmRleE9wZW5cIiwgXCJpbmRleFBhdHRlcm5BcHBcIiwgXCJpbmRleFJvbGx1cEFwcFwiLCBcImluZGV4UnVudGltZVwiLCBcImluZGV4U2V0dGluZ3NcIiwgXCJpbnB1dE91dHB1dFwiLCBcImluc3BlY3RcIiwgXCJpbnZlcnRcIiwgXCJpcFwiLCBcImtleWJvYXJkXCIsIFwia3FsRmllbGRcIiwgXCJrcWxGdW5jdGlvblwiLCBcImtxbE9wZXJhbmRcIiwgXCJrcWxTZWxlY3RvclwiLCBcImtxbFZhbHVlXCIsIFwia3ViZXJuZXRlc05vZGVcIiwgXCJrdWJlcm5ldGVzUG9kXCIsIFwibGF5ZXJzXCIsIFwibGVuc0FwcFwiLCBcImxldHRlcmluZ1wiLCBcImxpbmVEYXNoZWRcIiwgXCJsaW5lRG90dGVkXCIsIFwibGluZVNvbGlkXCIsIFwibGlua1wiLCBcImxpc3RcIiwgXCJsaXN0QWRkXCIsIFwibG9ja1wiLCBcImxvY2tPcGVuXCIsIFwibG9nb0FXU1wiLCBcImxvZ29BV1NNb25vXCIsIFwibG9nb0Flcm9zcGlrZVwiLCBcImxvZ29BcGFjaGVcIiwgXCJsb2dvQXBwU2VhcmNoXCIsIFwibG9nb0F6dXJlXCIsIFwibG9nb0F6dXJlTW9ub1wiLCBcImxvZ29CZWF0c1wiLCBcImxvZ29CdXNpbmVzc0FuYWx5dGljc1wiLCBcImxvZ29DZXBoXCIsIFwibG9nb0Nsb3VkXCIsIFwibG9nb0Nsb3VkRW50ZXJwcmlzZVwiLCBcImxvZ29Db2RlXCIsIFwibG9nb0NvZGVzYW5kYm94XCIsIFwibG9nb0NvdWNoYmFzZVwiLCBcImxvZ29Eb2NrZXJcIiwgXCJsb2dvRHJvcHdpemFyZFwiLCBcImxvZ29FbGFzdGljXCIsIFwibG9nb0VsYXN0aWNTdGFja1wiLCBcImxvZ29FbGFzdGljc2VhcmNoXCIsIFwibG9nb0VudGVycHJpc2VTZWFyY2hcIiwgXCJsb2dvRXRjZFwiLCBcImxvZ29HQ1BcIiwgXCJsb2dvR0NQTW9ub1wiLCBcImxvZ29HaXRodWJcIiwgXCJsb2dvR21haWxcIiwgXCJsb2dvR29sYW5nXCIsIFwibG9nb0dvb2dsZUdcIiwgXCJsb2dvSEFwcm94eVwiLCBcImxvZ29JQk1cIiwgXCJsb2dvSUJNTW9ub1wiLCBcImxvZ29LYWZrYVwiLCBcImxvZ29LaWJhbmFcIiwgXCJsb2dvS3ViZXJuZXRlc1wiLCBcImxvZ29Mb2dnaW5nXCIsIFwibG9nb0xvZ3N0YXNoXCIsIFwibG9nb01hcHNcIiwgXCJsb2dvTWVtY2FjaGVkXCIsIFwibG9nb01ldHJpY3NcIiwgXCJsb2dvTW9uZ29kYlwiLCBcImxvZ29NeVNRTFwiLCBcImxvZ29OZ2lueFwiLCBcImxvZ29PYnNlcnZhYmlsaXR5XCIsIFwibG9nb09zcXVlcnlcIiwgXCJsb2dvUGhwXCIsIFwibG9nb1Bvc3RncmVzXCIsIFwibG9nb1Byb21ldGhldXNcIiwgXCJsb2dvUmFiYml0bXFcIiwgXCJsb2dvUmVkaXNcIiwgXCJsb2dvU2VjdXJpdHlcIiwgXCJsb2dvU2l0ZVNlYXJjaFwiLCBcImxvZ29Ta2V0Y2hcIiwgXCJsb2dvU2xhY2tcIiwgXCJsb2dvVXB0aW1lXCIsIFwibG9nb1dlYmhvb2tcIiwgXCJsb2dvV2luZG93c1wiLCBcImxvZ29Xb3JrcGxhY2VTZWFyY2hcIiwgXCJsb2dzQXBwXCIsIFwibG9nc3Rhc2hGaWx0ZXJcIiwgXCJsb2dzdGFzaElmXCIsIFwibG9nc3Rhc2hJbnB1dFwiLCBcImxvZ3N0YXNoT3V0cHV0XCIsIFwibG9nc3Rhc2hRdWV1ZVwiLCBcIm1hY2hpbmVMZWFybmluZ0FwcFwiLCBcIm1hZ25ldFwiLCBcIm1hZ25pZnlXaXRoRXhjbGFtYXRpb25cIiwgXCJtYWduaWZ5V2l0aE1pbnVzXCIsIFwibWFnbmlmeVdpdGhQbHVzXCIsIFwibWFuYWdlbWVudEFwcFwiLCBcIm1hcE1hcmtlclwiLCBcIm1lbW9yeVwiLCBcIm1lbnVcIiwgXCJtZW51RG93blwiLCBcIm1lbnVMZWZ0XCIsIFwibWVudVJpZ2h0XCIsIFwibWVudVVwXCIsIFwibWVyZ2VcIiwgXCJtZXRyaWNiZWF0QXBwXCIsIFwibWV0cmljc0FwcFwiLCBcIm1pbmltaXplXCIsIFwibWludXNcIiwgXCJtaW51c0luQ2lyY2xlXCIsIFwibWludXNJbkNpcmNsZUZpbGxlZFwiLCBcIm1vYmlsZVwiLCBcIm1vbml0b3JpbmdBcHBcIiwgXCJtb29uXCIsIFwibmFtZXNwYWNlXCIsIFwibmVzdGVkXCIsIFwibm9kZVwiLCBcIm5vdGVib29rQXBwXCIsIFwibnVtYmVyXCIsIFwib2ZmbGluZVwiLCBcIm9ubGluZVwiLCBcIm91dGxpZXJEZXRlY3Rpb25Kb2JcIiwgXCJwYWNrYWdlXCIsIFwicGFja2V0YmVhdEFwcFwiLCBcInBhZ2VTZWxlY3RcIiwgXCJwYWdlc1NlbGVjdFwiLCBcInBhcGVyQ2xpcFwiLCBcInBhcnRpYWxcIiwgXCJwYXVzZVwiLCBcInBheW1lbnRcIiwgXCJwZW5jaWxcIiwgXCJwZXJjZW50XCIsIFwicGluXCIsIFwicGluRmlsbGVkXCIsIFwicGlwZWxpbmVBcHBcIiwgXCJwbGF5XCIsIFwicGxheUZpbGxlZFwiLCBcInBsdXNcIiwgXCJwbHVzSW5DaXJjbGVcIiwgXCJwbHVzSW5DaXJjbGVGaWxsZWRcIiwgXCJwb3BvdXRcIiwgXCJwdXNoXCIsIFwicXVlc3Rpb25JbkNpcmNsZVwiLCBcInF1b3RlXCIsIFwicmVjZW50bHlWaWV3ZWRBcHBcIiwgXCJyZWZyZXNoXCIsIFwicmVncmVzc2lvbkpvYlwiLCBcInJlcG9ydGVyXCIsIFwicmVwb3J0aW5nQXBwXCIsIFwicmV0dXJuS2V5XCIsIFwic2F2ZVwiLCBcInNhdmVkT2JqZWN0c0FwcFwiLCBcInNjYWxlXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUHJvZmlsZXJBcHBcIiwgXCJzZWN1cml0eUFuYWx5dGljc0FwcFwiLCBcInNlY3VyaXR5QXBwXCIsIFwic2VjdXJpdHlTaWduYWxcIiwgXCJzZWN1cml0eVNpZ25hbERldGVjdGVkXCIsIFwic2VjdXJpdHlTaWduYWxSZXNvbHZlZFwiLCBcInNlc3Npb25WaWV3ZXJcIiwgXCJzaGFyZFwiLCBcInNoYXJlXCIsIFwic25vd2ZsYWtlXCIsIFwic29ydERvd25cIiwgXCJzb3J0TGVmdFwiLCBcInNvcnRSaWdodFwiLCBcInNvcnRVcFwiLCBcInNvcnRhYmxlXCIsIFwic3BhY2VzQXBwXCIsIFwic3FsQXBwXCIsIFwic3RhckVtcHR5XCIsIFwic3RhckVtcHR5U3BhY2VcIiwgXCJzdGFyRmlsbGVkXCIsIFwic3RhckZpbGxlZFNwYWNlXCIsIFwic3Rhck1pbnVzRW1wdHlcIiwgXCJzdGFyTWludXNGaWxsZWRcIiwgXCJzdGFyUGx1c0VtcHR5XCIsIFwic3RhclBsdXNGaWxsZWRcIiwgXCJzdGF0c1wiLCBcInN0b3BcIiwgXCJzdG9wRmlsbGVkXCIsIFwic3RvcFNsYXNoXCIsIFwic3RvcmFnZVwiLCBcInN0cmluZ1wiLCBcInN1Ym1vZHVsZVwiLCBcInN1blwiLCBcInN3YXRjaElucHV0XCIsIFwic3ltbGlua1wiLCBcInRhYmxlRGVuc2l0eUNvbXBhY3RcIiwgXCJ0YWJsZURlbnNpdHlFeHBhbmRlZFwiLCBcInRhYmxlRGVuc2l0eU5vcm1hbFwiLCBcInRhYmxlT2ZDb250ZW50c1wiLCBcInRhZ1wiLCBcInRlYXJcIiwgXCJ0ZW1wZXJhdHVyZVwiLCBcInRpbWVsaW5lXCIsIFwidGltZWxpb25BcHBcIiwgXCJ0aW1lUmVmcmVzaFwiLCBcInRpbWVzbGlkZXJcIiwgXCJ0cmFpbmluZ1wiLCBcInRyYXNoXCIsIFwidW5mb2xkXCIsIFwidW5saW5rXCIsIFwidXBncmFkZUFzc2lzdGFudEFwcFwiLCBcInVwdGltZUFwcFwiLCBcInVzZXJcIiwgXCJ1c2VyQXZhdGFyXCIsIFwidXNlcnNcIiwgXCJ1c2Vyc1JvbGVzQXBwXCIsIFwidmVjdG9yXCIsIFwidmlkZW9QbGF5ZXJcIiwgXCJ2aXNBcmVhXCIsIFwidmlzQXJlYVN0YWNrZWRcIiwgXCJ2aXNCYXJIb3Jpem9udGFsXCIsIFwidmlzQmFySG9yaXpvbnRhbFN0YWNrZWRcIiwgXCJ2aXNCYXJWZXJ0aWNhbFwiLCBcInZpc0JhclZlcnRpY2FsU3RhY2tlZFwiLCBcInZpc0dhdWdlXCIsIFwidmlzR29hbFwiLCBcInZpc0xpbmVcIiwgXCJ2aXNNYXBDb29yZGluYXRlXCIsIFwidmlzTWFwUmVnaW9uXCIsIFwidmlzTWV0cmljXCIsIFwidmlzUGllXCIsIFwidmlzVGFibGVcIiwgXCJ2aXNUYWdDbG91ZFwiLCBcInZpc1RleHRcIiwgXCJ2aXNUaW1lbGlvblwiLCBcInZpc1ZlZ2FcIiwgXCJ2aXNWaXN1YWxCdWlsZGVyXCIsIFwidmlzdWFsaXplQXBwXCIsIFwid2F0Y2hlc0FwcFwiLCBcIndvcmRXcmFwXCIsIFwid29yZFdyYXBEaXNhYmxlZFwiLCBcIndvcmtwbGFjZVNlYXJjaEFwcFwiLCBcIndyZW5jaFwiLCBcInRva2VuQWxpYXNcIiwgXCJ0b2tlbkFubm90YXRpb25cIiwgXCJ0b2tlbkFycmF5XCIsIFwidG9rZW5CaW5hcnlcIiwgXCJ0b2tlbkJvb2xlYW5cIiwgXCJ0b2tlbkNsYXNzXCIsIFwidG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyXCIsIFwidG9rZW5Db25zdGFudFwiLCBcInRva2VuRGF0ZVwiLCBcInRva2VuRGVuc2VWZWN0b3JcIiwgXCJ0b2tlbkVsZW1lbnRcIiwgXCJ0b2tlbkVudW1cIiwgXCJ0b2tlbkVudW1NZW1iZXJcIiwgXCJ0b2tlbkV2ZW50XCIsIFwidG9rZW5FeGNlcHRpb25cIiwgXCJ0b2tlbkZpZWxkXCIsIFwidG9rZW5GaWxlXCIsIFwidG9rZW5GbGF0dGVuZWRcIiwgXCJ0b2tlbkZ1bmN0aW9uXCIsIFwidG9rZW5HZW9cIiwgXCJ0b2tlbkhpc3RvZ3JhbVwiLCBcInRva2VuSW50ZXJmYWNlXCIsIFwidG9rZW5JUFwiLCBcInRva2VuSm9pblwiLCBcInRva2VuS2V5XCIsIFwidG9rZW5LZXl3b3JkXCIsIFwidG9rZW5NZXRob2RcIiwgXCJ0b2tlbk1ldHJpY0NvdW50ZXJcIiwgXCJ0b2tlbk1ldHJpY0dhdWdlXCIsIFwidG9rZW5Nb2R1bGVcIiwgXCJ0b2tlbk5hbWVzcGFjZVwiLCBcInRva2VuTmVzdGVkXCIsIFwidG9rZW5OdWxsXCIsIFwidG9rZW5OdW1iZXJcIiwgXCJ0b2tlbk9iamVjdFwiLCBcInRva2VuT3BlcmF0b3JcIiwgXCJ0b2tlblBhY2thZ2VcIiwgXCJ0b2tlblBhcmFtZXRlclwiLCBcInRva2VuUGVyY29sYXRvclwiLCBcInRva2VuUHJvcGVydHlcIiwgXCJ0b2tlblJhbmdlXCIsIFwidG9rZW5SYW5rRmVhdHVyZVwiLCBcInRva2VuUmFua0ZlYXR1cmVzXCIsIFwidG9rZW5SZXBvXCIsIFwidG9rZW5TZWFyY2hUeXBlXCIsIFwidG9rZW5TaGFwZVwiLCBcInRva2VuU3RyaW5nXCIsIFwidG9rZW5TdHJ1Y3RcIiwgXCJ0b2tlblN5bWJvbFwiLCBcInRva2VuVGFnXCIsIFwidG9rZW5UZXh0XCIsIFwidG9rZW5Ub2tlbkNvdW50XCIsIFwidG9rZW5WYXJpYWJsZVwiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pXG4gICAgfSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZnVuY3Rpb24gdGhhdCByZW5kZXJzIHRoZSBhY3Rpb24uIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgbm9kZSBpcyBleHBlY3RlZCB0byBoYXZlIGBvbkZvY3VzYCBhbmQgYG9uQmx1cmAgZnVuY3Rpb25zXG4gICAgICAgICAqL1xuICAgICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gICAgICAvKipcbiAgICAgICAgICogQSBjYWxsYmFjayB0aGF0IGRlZmluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICAgKi9cbiAgICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAgIC8qKlxuICAgICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICAgKi9cbiAgICAgIGVuYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgaXNQcmltYXJ5OiBQcm9wVHlwZXMuYm9vbFxuICAgIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKS5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIG5hbWU6IFByb3BUeXBlcy5ub2RlLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBjb2x1bW4gKHdpbGwgYmUgcHJlc2VudGVkIGFzIGEgdGl0bGUgb3ZlciB0aGUgY29sdW1uIGhlYWRlclxuICAgICAgICovXG4gICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgICAvKipcbiAgICAgICAqIEEgQ1NTIHdpZHRoIHByb3BlcnR5LiBIaW50cyBmb3IgdGhlIHJlcXVpcmVkIHdpZHRoIG9mIHRoZSBjb2x1bW5cbiAgICAgICAqL1xuICAgIHdpZHRoOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkKSxcblxuICAvKipcbiAgICAgKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXlcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXlcbiAgICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5zdHJpbmcsXG5cbiAgLyoqXG4gICAgICogRGVzY3JpYmVzIHRoZSBjb250ZW50IG9mIHRoZSB0YWJsZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGNhcHRpb24gd2lsbCBiZSBcIlRoaXMgdGFibGUgY29udGFpbnMge2l0ZW1Db3VudH0gcm93cy5cIlxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIERlc2NyaWJlcyB0aGUgY29udGVudCBvZiB0aGUgdGFibGUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjYXB0aW9uIHdpbGwgYmUgXCJUaGlzIHRhYmxlIGNvbnRhaW5zIHtpdGVtQ291bnR9IHJvd3MuXCJcbiAgICAgKi9cbiAgdGFibGVDYXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGljaCBjb2x1bW4gc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGlkZW50aWZ5aW5nIGNlbGwgaW4gZWFjaCByb3cuIFNob3VsZCBtYXRjaCBhIFwiZmllbGRcIiBwcm9wIGluIEZpZWxkRGF0YUNvbHVtblxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGljaCBjb2x1bW4gc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGlkZW50aWZ5aW5nIGNlbGwgaW4gZWFjaCByb3cuIFNob3VsZCBtYXRjaCBhIFwiZmllbGRcIiBwcm9wIGluIEZpZWxkRGF0YUNvbHVtblxuICAgICAqL1xuICByb3dIZWFkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhhc0FjdGlvbnM6IFByb3BUeXBlcy5ib29sLFxuICBpc0V4cGFuZGFibGU6IFByb3BUeXBlcy5ib29sLFxuICBpc1NlbGVjdGFibGU6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgICAqIFByb3ZpZGVzIGFuIGluZmluaXRlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgICovXG5cbiAgLyoqXG4gICAgICogUHJvdmlkZXMgYW4gaW5maW5pdGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgKi9cbiAgbG9hZGluZzogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAgICogTWVzc2FnZSB0byBkaXNwbGF5IGlmIHRhYmxlIGlzIGVtcHR5XG4gICAgICovXG5cbiAgLyoqXG4gICAgICogTWVzc2FnZSB0byBkaXNwbGF5IGlmIHRhYmxlIGlzIGVtcHR5XG4gICAgICovXG4gIG5vSXRlbXNNZXNzYWdlOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbmV2ZXIgcGFnaW5hdGlvbiBvciBzb3J0aW5nIGNoYW5nZXMgKHRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgd2hlbiBlaXRoZXIgcGFnaW5hdGlvbiBvciBzb3J0aW5nIGlzIGNvbmZpZ3VyZWQpLiBTZWUgI0NyaXRlcmlhIG9yICNDcml0ZXJpYVdpdGhQYWdpbmF0aW9uXG4gICAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNQYWdpbmF0aW9uXG4gICAgICovXG4gIHBhZ2luYXRpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbdW5kZWZpbmVkXSksIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBUaGUgY3VycmVudCBwYWdlICh6ZXJvLWJhc2VkKSBpbmRleFxuICAgICAgICovXG4gICAgcGFnZUluZGV4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzaG93biBpbiBhIHNpbmdsZSBwYWdlLlxuICAgICAgICogUGFzcyBgMGAgdG8gZGlzcGxheSB0aGUgc2VsZWN0ZWQgXCJTaG93IGFsbFwiIG9wdGlvbiBhbmQgaGlkZSB0aGUgcGFnaW5hdGlvbi5cbiAgICAgICAqL1xuICAgIHBhZ2VTaXplOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgdGhlIHBhZ2UgaXMgXCJzbGljZWRcIiBvZlxuICAgICAgICovXG4gICAgdG90YWxJdGVtQ291bnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblxuICAgIC8qKlxuICAgICAgICogQ29uZmlndXJlcyB0aGUgcGFnZSBzaXplIGRyb3Bkb3duIG9wdGlvbnMuXG4gICAgICAgKiBQYXNzIGAwYCBhcyBvbmUgb2YgdGhlIG9wdGlvbnMgdG8gY3JlYXRlIGEgXCJTaG93IGFsbFwiIG9wdGlvbi5cbiAgICAgICAqL1xuICAgIHBhZ2VTaXplT3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkKSxcblxuICAgIC8qKlxuICAgICAgICogSGlkZXMgdGhlIHBhZ2Ugc2l6ZSBkcm9wZG93blxuICAgICAgICovXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zOiBQcm9wVHlwZXMuYm9vbFxuICB9KV0pLFxuXG4gIC8qKlxuICAgICAqIElmIHRydWUsIHdpbGwgY29udmVydCB0YWJsZSB0byBjYXJkcyBpbiBtb2JpbGUgdmlld1xuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIElmIHRydWUsIHdpbGwgY29udmVydCB0YWJsZSB0byBjYXJkcyBpbiBtb2JpbGUgdmlld1xuICAgICAqL1xuICByZXNwb25zaXZlOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd2BcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBBcHBsaWVkIHRvIGBFdWlUYWJsZVJvd2BcbiAgICAgKi9cbiAgcm93UHJvcHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLFxuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU2VsZWN0aW9uVHlwZVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU2VsZWN0aW9uVHlwZVxuICAgICAqL1xuICBzZWxlY3Rpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGl0ZW0gc2VsZWN0aW9uIGNoYW5nZXNcbiAgICAgICAqL1xuICAgIG9uU2VsZWN0aW9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCBwZXIgaXRlbSB0byBpbmRpY2F0ZSB3aGV0aGVyIGl0IGlzIHNlbGVjdGFibGVcbiAgICAgICAqL1xuICAgIHNlbGVjdGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIHBlciBpdGVtIHRvIHJldHJpZXZlIGEgbWVzc2FnZSBmb3IgaXRzIHNlbGVjdGFibGUgc3RhdGUuV2UgZGlzcGxheSB0aGVzZSBtZXNzYWdlcyBhcyBhIHRvb2x0aXAgb24gYW4gdW5zZWxlY3RhYmxlIGNoZWNrYm94XG4gICAgICAgKi9cbiAgICBzZWxlY3RhYmxlTWVzc2FnZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaW5pdGlhbFNlbGVjdGVkOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQpXG4gIH0pLFxuXG4gIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgI0V1aVRhYmxlU29ydGluZ1R5cGVcbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBDb25maWd1cmVzICNFdWlUYWJsZVNvcnRpbmdUeXBlXG4gICAgICovXG4gIHNvcnRpbmc6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBJbmRpY2F0ZXMgdGhlIHByb3BlcnR5L2ZpZWxkIHRvIHNvcnQgb25cbiAgICAgICAqL1xuICAgIHNvcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBmaWVsZDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgICAgZGlyZWN0aW9uOiBQcm9wVHlwZXMub25lT2YoW1wiYXNjXCIsIFwiZGVzY1wiXSkuaXNSZXF1aXJlZFxuICAgIH0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBFbmFibGVzL2Rpc2FibGVzIHVuc29ydGluZyBvZiB0YWJsZSBjb2x1bW5zLiBTdXBwb3J0ZWQgYnkgRXVpSW5NZW1vcnlUYWJsZS5cbiAgICAgICAqL1xuICAgIGFsbG93TmV1dHJhbFNvcnQ6IFByb3BUeXBlcy5ib29sLFxuXG4gICAgLyoqXG4gICAgICAgKiBFbmFibGVzIHRoZSBkZWZhdWx0IHNvcnRpbmcgYWJpbGl0eSBmb3IgZWFjaCBjb2x1bW4uXG4gICAgICAgKi9cbiAgICBlbmFibGVBbGxDb2x1bW5zOiBQcm9wVHlwZXMuYm9vbCxcblxuICAgIC8qKlxuICAgICAgICogRGlzYWJsZXMgdGhlIHVzZXIncyBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgc29ydCBidXQgc3RpbGwgc2hvd3MgdGhlIGN1cnJlbnQgZGlyZWN0aW9uXG4gICAgICAgKi9cbiAgICByZWFkT25seTogUHJvcFR5cGVzLmJvb2xcbiAgfSksXG5cbiAgLyoqXG4gICAgICogU2V0cyB0aGUgdGFibGUtbGF5b3V0IENTUyBwcm9wZXJ0eS4gTm90ZSB0aGF0IGF1dG8gdGFibGVMYXlvdXQgcHJldmVudHMgdHJ1bmNhdGVUZXh0IGZyb20gd29ya2luZyBwcm9wZXJseS5cbiAgICAgKi9cblxuICAvKipcbiAgICAgKiBTZXRzIHRoZSB0YWJsZS1sYXlvdXQgQ1NTIHByb3BlcnR5LiBOb3RlIHRoYXQgYXV0byB0YWJsZUxheW91dCBwcmV2ZW50cyB0cnVuY2F0ZVRleHQgZnJvbSB3b3JraW5nIHByb3Blcmx5LlxuICAgICAqL1xuICB0YWJsZUxheW91dDogUHJvcFR5cGVzLm9uZU9mKFtcImZpeGVkXCIsIFwiYXV0b1wiXSksXG5cbiAgLyoqXG4gICAgICogQXBwbGllZCB0byB0YWJsZSBjZWxscyA9PiBBbnkgY2VsbCB1c2luZyByZW5kZXIgZnVuY3Rpb24gd2lsbCBzZXQgdGhpcyB0byBiZSBmYWxzZSwgbGVhZGluZyB0byB1bm5lY2Vzc2FyeSB3b3JkIGJyZWFrcy4gQXBwbHkgdGV4dE9ubHk6IHRydWUgaW4gb3JkZXIgdG8gZW5zdXJlIGl0IGJyZWFrcyBwcm9wZXJseVxuICAgICAqL1xuXG4gIC8qKlxuICAgICAqIEFwcGxpZWQgdG8gdGFibGUgY2VsbHMgPT4gQW55IGNlbGwgdXNpbmcgcmVuZGVyIGZ1bmN0aW9uIHdpbGwgc2V0IHRoaXMgdG8gYmUgZmFsc2UsIGxlYWRpbmcgdG8gdW5uZWNlc3Nhcnkgd29yZCBicmVha3MuIEFwcGx5IHRleHRPbmx5OiB0cnVlIGluIG9yZGVyIHRvIGVuc3VyZSBpdCBicmVha3MgcHJvcGVybHlcbiAgICAgKi9cbiAgdGV4dE9ubHk6IFByb3BUeXBlcy5ib29sXG59OyIsICJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCk7IHJldHVybiBmdW5jdGlvbiBfY3JlYXRlU3VwZXJJbnRlcm5hbCgpIHsgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLCByZXN1bHQ7IGlmIChoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KSB7IHZhciBOZXdUYXJnZXQgPSBfZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3I7IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KFN1cGVyLCBhcmd1bWVudHMsIE5ld1RhcmdldCk7IH0gZWxzZSB7IHJlc3VsdCA9IFN1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0gcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIHJlc3VsdCk7IH07IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IEV1aUNvbnRleHRNZW51SXRlbSwgRXVpQ29udGV4dE1lbnVQYW5lbCB9IGZyb20gJy4uL2NvbnRleHRfbWVudSc7XG5pbXBvcnQgeyBFdWlQb3BvdmVyIH0gZnJvbSAnLi4vcG9wb3Zlcic7XG5pbXBvcnQgeyBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyBFdWlJMThuIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuXG5mdW5jdGlvbiBhY3Rpb25Jc0N1c3RvbUl0ZW1BY3Rpb24oYWN0aW9uKSB7XG4gIHJldHVybiBhY3Rpb24uaGFzT3duUHJvcGVydHkoJ3JlbmRlcicpO1xufVxuXG5leHBvcnQgdmFyIENvbGxhcHNlZEl0ZW1BY3Rpb25zID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhDb2xsYXBzZWRJdGVtQWN0aW9ucywgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihDb2xsYXBzZWRJdGVtQWN0aW9ucyk7XG5cbiAgZnVuY3Rpb24gQ29sbGFwc2VkSXRlbUFjdGlvbnMoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbGxhcHNlZEl0ZW1BY3Rpb25zKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsLmFwcGx5KF9zdXBlciwgW3RoaXNdLmNvbmNhdChhcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicG9wb3ZlckRpdlwiLCBudWxsKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7XG4gICAgICBwb3BvdmVyT3BlbjogZmFsc2VcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJ0b2dnbGVQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwb3BvdmVyT3BlbjogIXByZXZTdGF0ZS5wb3BvdmVyT3BlblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiY2xvc2VQb3BvdmVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcG9wb3Zlck9wZW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvblBvcG92ZXJCbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHlvdSBtdXN0IGJlIGFza2luZy4uLiBXVEY/IEkga25vdy4uLiBidXQgdGhpcyB0aW1lb3V0IGlzXG4gICAgICAvLyByZXF1aXJlZCB0byBtYWtlIHN1cmUgd2UgcHJvY2VzcyB0aGUgb25CbHVyIGV2ZW50cyBhZnRlciB0aGUgaW5pdGlhbFxuICAgICAgLy8gZXZlbnQgY3ljbGUuIFJlZmVyZW5jZTpcbiAgICAgIC8vIGh0dHBzOi8vbWVkaXVtLmNvbS9AamVzc2ViZWFjaC9kZWFsaW5nLXdpdGgtZm9jdXMtYW5kLWJsdXItaW4tYS1jb21wb3NpdGUtd2lkZ2V0LWluLXJlYWN0LTkwZDNjM2I0OWE5YlxuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMucG9wb3ZlckRpdi5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSAmJiBfdGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgICBfdGhpcy5wcm9wcy5vbkJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwicmVnaXN0ZXJQb3BvdmVyRGl2XCIsIGZ1bmN0aW9uIChwb3BvdmVyRGl2KSB7XG4gICAgICBpZiAoIV90aGlzLnBvcG92ZXJEaXYpIHtcbiAgICAgICAgX3RoaXMucG9wb3ZlckRpdiA9IHBvcG92ZXJEaXY7XG4gICAgICAgIF90aGlzLnBvcG92ZXJEaXYgJiYgX3RoaXMucG9wb3ZlckRpdi5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIF90aGlzLm9uUG9wb3ZlckJsdXIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcIm9uQ2xpY2tJdGVtXCIsIGZ1bmN0aW9uIChvbkNsaWNrQWN0aW9uKSB7XG4gICAgICBfdGhpcy5jbG9zZVBvcG92ZXIoKTtcblxuICAgICAgaWYgKG9uQ2xpY2tBY3Rpb24pIHtcbiAgICAgICAgb25DbGlja0FjdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKENvbGxhcHNlZEl0ZW1BY3Rpb25zLCBbe1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLnBvcG92ZXJEaXYpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgdGhpcy5vblBvcG92ZXJCbHVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGFjdGlvbnMgPSBfdGhpcyRwcm9wcy5hY3Rpb25zLFxuICAgICAgICAgIGl0ZW1JZCA9IF90aGlzJHByb3BzLml0ZW1JZCxcbiAgICAgICAgICBpdGVtID0gX3RoaXMkcHJvcHMuaXRlbSxcbiAgICAgICAgICBhY3Rpb25FbmFibGVkID0gX3RoaXMkcHJvcHMuYWN0aW9uRW5hYmxlZCxcbiAgICAgICAgICBvbkZvY3VzID0gX3RoaXMkcHJvcHMub25Gb2N1cyxcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wcy5jbGFzc05hbWU7XG4gICAgICB2YXIgaXNPcGVuID0gdGhpcy5zdGF0ZS5wb3BvdmVyT3BlbjtcbiAgICAgIHZhciBhbGxEaXNhYmxlZCA9IHRydWU7XG4gICAgICB2YXIgY29udHJvbHMgPSBhY3Rpb25zLnJlZHVjZShmdW5jdGlvbiAoY29udHJvbHMsIGFjdGlvbiwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IFwiYWN0aW9uX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoaW5kZXgpO1xuICAgICAgICB2YXIgYXZhaWxhYmxlID0gYWN0aW9uLmF2YWlsYWJsZSA/IGFjdGlvbi5hdmFpbGFibGUoaXRlbSkgOiB0cnVlO1xuXG4gICAgICAgIGlmICghYXZhaWxhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRyb2xzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVuYWJsZWQgPSBhY3Rpb25FbmFibGVkKGFjdGlvbik7XG4gICAgICAgIGFsbERpc2FibGVkID0gYWxsRGlzYWJsZWQgJiYgIWVuYWJsZWQ7XG5cbiAgICAgICAgaWYgKGFjdGlvbklzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pKSB7XG4gICAgICAgICAgdmFyIGN1c3RvbUFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgICB2YXIgYWN0aW9uQ29udHJvbCA9IGN1c3RvbUFjdGlvbi5yZW5kZXIoaXRlbSwgZW5hYmxlZCk7XG4gICAgICAgICAgdmFyIGFjdGlvbkNvbnRyb2xPbkNsaWNrID0gYWN0aW9uQ29udHJvbCAmJiBhY3Rpb25Db250cm9sLnByb3BzICYmIGFjdGlvbkNvbnRyb2wucHJvcHMub25DbGljaztcbiAgICAgICAgICBjb250cm9scy5wdXNoKF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVJdGVtLCB7XG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIub25DbGlja0l0ZW0oYWN0aW9uQ29udHJvbE9uQ2xpY2sgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbkNvbnRyb2xPbkNsaWNrKGl0ZW0pO1xuICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBhY3Rpb25Db250cm9sKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9vbkNsaWNrID0gYWN0aW9uLm9uQ2xpY2ssXG4gICAgICAgICAgICAgIG5hbWUgPSBhY3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgaHJlZiA9IGFjdGlvbi5ocmVmLFxuICAgICAgICAgICAgICB0YXJnZXQgPSBhY3Rpb24udGFyZ2V0LFxuICAgICAgICAgICAgICBkYXRhVGVzdFN1YmogPSBhY3Rpb25bJ2RhdGEtdGVzdC1zdWJqJ107XG4gICAgICAgICAgdmFyIGJ1dHRvbkljb24gPSBhY3Rpb24uaWNvbjtcbiAgICAgICAgICB2YXIgaWNvbjtcblxuICAgICAgICAgIGlmIChidXR0b25JY29uKSB7XG4gICAgICAgICAgICBpY29uID0gaXNTdHJpbmcoYnV0dG9uSWNvbikgPyBidXR0b25JY29uIDogYnV0dG9uSWNvbihpdGVtKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgYnV0dG9uQ29udGVudCA9IHR5cGVvZiBuYW1lID09PSAnZnVuY3Rpb24nID8gbmFtZShpdGVtKSA6IG5hbWU7XG4gICAgICAgICAgY29udHJvbHMucHVzaChfX19FbW90aW9uSlNYKEV1aUNvbnRleHRNZW51SXRlbSwge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBkaXNhYmxlZDogIWVuYWJsZWQsXG4gICAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBpY29uOiBpY29uLFxuICAgICAgICAgICAgXCJkYXRhLXRlc3Qtc3VialwiOiBkYXRhVGVzdFN1YmosXG4gICAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLm9uQ2xpY2tJdGVtKF9vbkNsaWNrID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfb25DbGljayhpdGVtKTtcbiAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgYnV0dG9uQ29udGVudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xzO1xuICAgICAgfSwgW10pO1xuXG4gICAgICB2YXIgcG9wb3ZlckJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goRXVpSTE4biwge1xuICAgICAgICB0b2tlbjogXCJldWlDb2xsYXBzZWRJdGVtQWN0aW9ucy5hbGxBY3Rpb25zXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiQWxsIGFjdGlvbnNcIlxuICAgICAgfSwgZnVuY3Rpb24gKGFsbEFjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwge1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhbGxBY3Rpb25zLFxuICAgICAgICAgIGljb25UeXBlOiBcImJveGVzSG9yaXpvbnRhbFwiLFxuICAgICAgICAgIGNvbG9yOiBcInRleHRcIixcbiAgICAgICAgICBpc0Rpc2FibGVkOiBhbGxEaXNhYmxlZCxcbiAgICAgICAgICBvbkNsaWNrOiBfdGhpczIudG9nZ2xlUG9wb3Zlci5iaW5kKF90aGlzMiksXG4gICAgICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IFwiZXVpQ29sbGFwc2VkSXRlbUFjdGlvbnNCdXR0b25cIlxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgd2l0aFRvb2x0aXAgPSAhYWxsRGlzYWJsZWQgJiYgX19fRW1vdGlvbkpTWChFdWlJMThuLCB7XG4gICAgICAgIHRva2VuOiBcImV1aUNvbGxhcHNlZEl0ZW1BY3Rpb25zLmFsbEFjdGlvbnNcIixcbiAgICAgICAgZGVmYXVsdDogXCJBbGwgYWN0aW9uc1wiXG4gICAgICB9LCBmdW5jdGlvbiAoYWxsQWN0aW9ucykge1xuICAgICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChFdWlUb29sVGlwLCB7XG4gICAgICAgICAgY29udGVudDogYWxsQWN0aW9ucyxcbiAgICAgICAgICBkZWxheTogXCJsb25nXCJcbiAgICAgICAgfSwgcG9wb3ZlckJ1dHRvbik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goRXVpUG9wb3Zlciwge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgcG9wb3ZlclJlZjogdGhpcy5yZWdpc3RlclBvcG92ZXJEaXYsXG4gICAgICAgIGlkOiBcIlwiLmNvbmNhdChpdGVtSWQsIFwiLWFjdGlvbnNcIiksXG4gICAgICAgIGlzT3BlbjogaXNPcGVuLFxuICAgICAgICBidXR0b246IHdpdGhUb29sdGlwIHx8IHBvcG92ZXJCdXR0b24sXG4gICAgICAgIGNsb3NlUG9wb3ZlcjogdGhpcy5jbG9zZVBvcG92ZXIsXG4gICAgICAgIHBhbmVsUGFkZGluZ1NpemU6IFwibm9uZVwiLFxuICAgICAgICBhbmNob3JQb3NpdGlvbjogXCJsZWZ0Q2VudGVyXCJcbiAgICAgIH0sIF9fX0Vtb3Rpb25KU1goRXVpQ29udGV4dE1lbnVQYW5lbCwge1xuICAgICAgICBpdGVtczogY29udHJvbHNcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ29sbGFwc2VkSXRlbUFjdGlvbnM7XG59KENvbXBvbmVudCk7XG5Db2xsYXBzZWRJdGVtQWN0aW9ucy5wcm9wVHlwZXMgPSB7XG4gIGFjdGlvbnM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqXG4gICAgICAgKiBUaGUgdHlwZSBvZiBhY3Rpb25cbiAgICAgICAqL1xuICAgIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbXCJidXR0b25cIl0pLCBQcm9wVHlwZXMub25lT2YoW1wiaWNvblwiXSkuaXNSZXF1aXJlZF0pLFxuXG4gICAgLyoqXG4gICAgICAgKiBEZWZpbmVzIHRoZSBjb2xvciBvZiB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFtcInByaW1hcnlcIiwgXCJkYW5nZXJcIiwgXCJ0ZXh0XCIsIFwiZ2hvc3RcIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiXSkuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLCBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wicHJpbWFyeVwiLCBcImFjY2VudFwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCIsIFwiZ2hvc3RcIiwgXCJ0ZXh0XCJdKS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXSldKSxcblxuICAgIC8qKlxuICAgICAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gY2FwdGlvbilcbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiBjYXB0aW9uKVxuICAgICAgICovXG4gICAgbmFtZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIERlc2NyaWJlcyB0aGUgYWN0aW9uICh3aWxsIGJlIHRoZSBidXR0b24gdGl0bGUpXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogRGVzY3JpYmVzIHRoZSBhY3Rpb24gKHdpbGwgYmUgdGhlIGJ1dHRvbiB0aXRsZSlcbiAgICAgICAqL1xuICAgIGRlc2NyaXB0aW9uOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cbiAgICAvKipcbiAgICAgICAqIEEgaGFuZGxlciBmdW5jdGlvbiB0byBleGVjdXRlIHRoZSBhY3Rpb25cbiAgICAgICAqL1xuXG4gICAgLyoqXG4gICAgICAgKiBBIGhhbmRsZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0aGUgYWN0aW9uXG4gICAgICAgKi9cbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGF2YWlsYWJsZVxuICAgICAgICovXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBhdmFpbGFibGVcbiAgICAgICAqL1xuICAgIGF2YWlsYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgICAvKipcbiAgICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjdGlvbiBpcyBlbmFibGVkXG4gICAgICAgKi9cblxuICAgIC8qKlxuICAgICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgYWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAqL1xuICAgIGVuYWJsZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzUHJpbWFyeTogUHJvcFR5cGVzLmJvb2wsXG4gICAgXCJkYXRhLXRlc3Qtc3VialwiOiBQcm9wVHlwZXMuc3RyaW5nLFxuXG4gICAgLyoqXG4gICAgICAgKiBBc3NvY2lhdGVzIGFuIGljb24gd2l0aCB0aGUgYnV0dG9uXG4gICAgICAgKi9cbiAgICBpY29uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoW1wiYWNjZXNzaWJpbGl0eVwiLCBcImFkZERhdGFBcHBcIiwgXCJhZHZhbmNlZFNldHRpbmdzQXBwXCIsIFwiYWdlbnRBcHBcIiwgXCJhZ2dyZWdhdGVcIiwgXCJhbGVydFwiLCBcImFuYWx5emVFdmVudFwiLCBcImFubm90YXRpb25cIiwgXCJhcG1BcHBcIiwgXCJhcG1UcmFjZVwiLCBcImFwcFNlYXJjaEFwcFwiLCBcImFwcHNcIiwgXCJhcnJvd0Rvd25cIiwgXCJhcnJvd0xlZnRcIiwgXCJhcnJvd1JpZ2h0XCIsIFwiYXJyb3dVcFwiLCBcImFycm93U3RhcnRcIiwgXCJhcnJvd0VuZFwiLCBcImFzdGVyaXNrXCIsIFwiYXVkaXRiZWF0QXBwXCIsIFwiYmVha2VyXCIsIFwiYmVsbFwiLCBcImJlbGxTbGFzaFwiLCBcImJvbHRcIiwgXCJib3hlc0hvcml6b250YWxcIiwgXCJib3hlc1ZlcnRpY2FsXCIsIFwiYnJhbmNoXCIsIFwiYnJhbmNoVXNlclwiLCBcImJyb29tXCIsIFwiYnJ1c2hcIiwgXCJidWdcIiwgXCJidWxsc2V5ZVwiLCBcImNhbGVuZGFyXCIsIFwiY2FudmFzQXBwXCIsIFwiY2FzZXNBcHBcIiwgXCJjaGVja1wiLCBcImNoZWNrSW5DaXJjbGVGaWxsZWRcIiwgXCJjaGVlclwiLCBcImNsYXNzaWZpY2F0aW9uSm9iXCIsIFwiY2xvY2tcIiwgXCJjbG91ZERyaXp6bGVcIiwgXCJjbG91ZFN0b3JteVwiLCBcImNsb3VkU3VubnlcIiwgXCJjbHVzdGVyXCIsIFwiY29kZUFwcFwiLCBcImNvbG9yXCIsIFwiY29tcHV0ZVwiLCBcImNvbnNvbGVcIiwgXCJjb25zb2xlQXBwXCIsIFwiY29udGFpbmVyXCIsIFwiY29udGludWl0eUFib3ZlXCIsIFwiY29udGludWl0eUFib3ZlQmVsb3dcIiwgXCJjb250aW51aXR5QmVsb3dcIiwgXCJjb250aW51aXR5V2l0aGluXCIsIFwiY29udHJvbHNIb3Jpem9udGFsXCIsIFwiY29udHJvbHNWZXJ0aWNhbFwiLCBcImNvcHlcIiwgXCJjb3B5Q2xpcGJvYXJkXCIsIFwiY3JlYXRlQWR2YW5jZWRKb2JcIiwgXCJjcmVhdGVNdWx0aU1ldHJpY0pvYlwiLCBcImNyZWF0ZVBvcHVsYXRpb25Kb2JcIiwgXCJjcmVhdGVTaW5nbGVNZXRyaWNKb2JcIiwgXCJjcm9zc1wiLCBcImNyb3NzQ2x1c3RlclJlcGxpY2F0aW9uQXBwXCIsIFwiY3Jvc3NJbkFDaXJjbGVGaWxsZWRcIiwgXCJjcm9zc2hhaXJzXCIsIFwiY3VycmVuY3lcIiwgXCJjdXRcIiwgXCJkYXNoYm9hcmRBcHBcIiwgXCJkYXRhVmlzdWFsaXplclwiLCBcImRhdGFiYXNlXCIsIFwiZGVza3RvcFwiLCBcImRldlRvb2xzQXBwXCIsIFwiZGlzY292ZXJBcHBcIiwgXCJkb2N1bWVudFwiLCBcImRvY3VtZW50RWRpdFwiLCBcImRvY3VtZW50YXRpb25cIiwgXCJkb2N1bWVudHNcIiwgXCJkb3RcIiwgXCJkb3VibGVBcnJvd0xlZnRcIiwgXCJkb3VibGVBcnJvd1JpZ2h0XCIsIFwiZG93bmxvYWRcIiwgXCJlZGl0b3JBbGlnbkNlbnRlclwiLCBcImVkaXRvckFsaWduTGVmdFwiLCBcImVkaXRvckFsaWduUmlnaHRcIiwgXCJlZGl0b3JCb2xkXCIsIFwiZWRpdG9yQ2hlY2tsaXN0XCIsIFwiZWRpdG9yQ29kZUJsb2NrXCIsIFwiZWRpdG9yQ29tbWVudFwiLCBcImVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsXCIsIFwiZWRpdG9yRGlzdHJpYnV0ZVZlcnRpY2FsXCIsIFwiZWRpdG9ySGVhZGluZ1wiLCBcImVkaXRvckl0YWxpY1wiLCBcImVkaXRvckl0ZW1BbGlnbkJvdHRvbVwiLCBcImVkaXRvckl0ZW1BbGlnbkNlbnRlclwiLCBcImVkaXRvckl0ZW1BbGlnbkxlZnRcIiwgXCJlZGl0b3JJdGVtQWxpZ25NaWRkbGVcIiwgXCJlZGl0b3JJdGVtQWxpZ25SaWdodFwiLCBcImVkaXRvckl0ZW1BbGlnblRvcFwiLCBcImVkaXRvckxpbmtcIiwgXCJlZGl0b3JPcmRlcmVkTGlzdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tTGVmdFwiLCBcImVkaXRvclBvc2l0aW9uQm90dG9tUmlnaHRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcExlZnRcIiwgXCJlZGl0b3JQb3NpdGlvblRvcFJpZ2h0XCIsIFwiZWRpdG9yUmVkb1wiLCBcImVkaXRvclN0cmlrZVwiLCBcImVkaXRvclRhYmxlXCIsIFwiZWRpdG9yVW5kZXJsaW5lXCIsIFwiZWRpdG9yVW5kb1wiLCBcImVkaXRvclVub3JkZXJlZExpc3RcIiwgXCJlbWFpbFwiLCBcImVtcHR5XCIsIFwiZW1zQXBwXCIsIFwiZXFsXCIsIFwiZXJhc2VyXCIsIFwiZXhpdFwiLCBcImV4cGFuZFwiLCBcImV4cGFuZE1pbmlcIiwgXCJleHBvcnRBY3Rpb25cIiwgXCJleWVcIiwgXCJleWVDbG9zZWRcIiwgXCJmYWNlSGFwcHlcIiwgXCJmYWNlTmV1dHJhbFwiLCBcImZhY2VTYWRcIiwgXCJmaWxlYmVhdEFwcFwiLCBcImZpbHRlclwiLCBcImZsYWdcIiwgXCJmbGVldEFwcFwiLCBcImZvbGRcIiwgXCJmb2xkZXJDaGVja1wiLCBcImZvbGRlckNsb3NlZFwiLCBcImZvbGRlckV4Y2xhbWF0aW9uXCIsIFwiZm9sZGVyT3BlblwiLCBcImZyYW1lTmV4dFwiLCBcImZyYW1lUHJldmlvdXNcIiwgXCJmdWxsU2NyZWVuXCIsIFwiZnVsbFNjcmVlbkV4aXRcIiwgXCJmdW5jdGlvblwiLCBcImdlYXJcIiwgXCJnaXNBcHBcIiwgXCJnbGFzc2VzXCIsIFwiZ2xvYmVcIiwgXCJncmFiXCIsIFwiZ3JhYkhvcml6b250YWxcIiwgXCJncmFwaEFwcFwiLCBcImdyaWRcIiwgXCJncm9rQXBwXCIsIFwiaGVhcnRcIiwgXCJoZWFydGJlYXRBcHBcIiwgXCJoZWF0bWFwXCIsIFwiaGVscFwiLCBcImhvbWVcIiwgXCJpSW5DaXJjbGVcIiwgXCJpbWFnZVwiLCBcImltcG9ydEFjdGlvblwiLCBcImluZGV4Q2xvc2VcIiwgXCJpbmRleEVkaXRcIiwgXCJpbmRleEZsdXNoXCIsIFwiaW5kZXhNYW5hZ2VtZW50QXBwXCIsIFwiaW5kZXhNYXBwaW5nXCIsIFwiaW5kZXhPcGVuXCIsIFwiaW5kZXhQYXR0ZXJuQXBwXCIsIFwiaW5kZXhSb2xsdXBBcHBcIiwgXCJpbmRleFJ1bnRpbWVcIiwgXCJpbmRleFNldHRpbmdzXCIsIFwiaW5wdXRPdXRwdXRcIiwgXCJpbnNwZWN0XCIsIFwiaW52ZXJ0XCIsIFwiaXBcIiwgXCJrZXlib2FyZFwiLCBcImtxbEZpZWxkXCIsIFwia3FsRnVuY3Rpb25cIiwgXCJrcWxPcGVyYW5kXCIsIFwia3FsU2VsZWN0b3JcIiwgXCJrcWxWYWx1ZVwiLCBcImt1YmVybmV0ZXNOb2RlXCIsIFwia3ViZXJuZXRlc1BvZFwiLCBcImxheWVyc1wiLCBcImxlbnNBcHBcIiwgXCJsZXR0ZXJpbmdcIiwgXCJsaW5lRGFzaGVkXCIsIFwibGluZURvdHRlZFwiLCBcImxpbmVTb2xpZFwiLCBcImxpbmtcIiwgXCJsaXN0XCIsIFwibGlzdEFkZFwiLCBcImxvY2tcIiwgXCJsb2NrT3BlblwiLCBcImxvZ29BV1NcIiwgXCJsb2dvQVdTTW9ub1wiLCBcImxvZ29BZXJvc3Bpa2VcIiwgXCJsb2dvQXBhY2hlXCIsIFwibG9nb0FwcFNlYXJjaFwiLCBcImxvZ29BenVyZVwiLCBcImxvZ29BenVyZU1vbm9cIiwgXCJsb2dvQmVhdHNcIiwgXCJsb2dvQnVzaW5lc3NBbmFseXRpY3NcIiwgXCJsb2dvQ2VwaFwiLCBcImxvZ29DbG91ZFwiLCBcImxvZ29DbG91ZEVudGVycHJpc2VcIiwgXCJsb2dvQ29kZVwiLCBcImxvZ29Db2Rlc2FuZGJveFwiLCBcImxvZ29Db3VjaGJhc2VcIiwgXCJsb2dvRG9ja2VyXCIsIFwibG9nb0Ryb3B3aXphcmRcIiwgXCJsb2dvRWxhc3RpY1wiLCBcImxvZ29FbGFzdGljU3RhY2tcIiwgXCJsb2dvRWxhc3RpY3NlYXJjaFwiLCBcImxvZ29FbnRlcnByaXNlU2VhcmNoXCIsIFwibG9nb0V0Y2RcIiwgXCJsb2dvR0NQXCIsIFwibG9nb0dDUE1vbm9cIiwgXCJsb2dvR2l0aHViXCIsIFwibG9nb0dtYWlsXCIsIFwibG9nb0dvbGFuZ1wiLCBcImxvZ29Hb29nbGVHXCIsIFwibG9nb0hBcHJveHlcIiwgXCJsb2dvSUJNXCIsIFwibG9nb0lCTU1vbm9cIiwgXCJsb2dvS2Fma2FcIiwgXCJsb2dvS2liYW5hXCIsIFwibG9nb0t1YmVybmV0ZXNcIiwgXCJsb2dvTG9nZ2luZ1wiLCBcImxvZ29Mb2dzdGFzaFwiLCBcImxvZ29NYXBzXCIsIFwibG9nb01lbWNhY2hlZFwiLCBcImxvZ29NZXRyaWNzXCIsIFwibG9nb01vbmdvZGJcIiwgXCJsb2dvTXlTUUxcIiwgXCJsb2dvTmdpbnhcIiwgXCJsb2dvT2JzZXJ2YWJpbGl0eVwiLCBcImxvZ29Pc3F1ZXJ5XCIsIFwibG9nb1BocFwiLCBcImxvZ29Qb3N0Z3Jlc1wiLCBcImxvZ29Qcm9tZXRoZXVzXCIsIFwibG9nb1JhYmJpdG1xXCIsIFwibG9nb1JlZGlzXCIsIFwibG9nb1NlY3VyaXR5XCIsIFwibG9nb1NpdGVTZWFyY2hcIiwgXCJsb2dvU2tldGNoXCIsIFwibG9nb1NsYWNrXCIsIFwibG9nb1VwdGltZVwiLCBcImxvZ29XZWJob29rXCIsIFwibG9nb1dpbmRvd3NcIiwgXCJsb2dvV29ya3BsYWNlU2VhcmNoXCIsIFwibG9nc0FwcFwiLCBcImxvZ3N0YXNoRmlsdGVyXCIsIFwibG9nc3Rhc2hJZlwiLCBcImxvZ3N0YXNoSW5wdXRcIiwgXCJsb2dzdGFzaE91dHB1dFwiLCBcImxvZ3N0YXNoUXVldWVcIiwgXCJtYWNoaW5lTGVhcm5pbmdBcHBcIiwgXCJtYWduZXRcIiwgXCJtYWduaWZ5V2l0aEV4Y2xhbWF0aW9uXCIsIFwibWFnbmlmeVdpdGhNaW51c1wiLCBcIm1hZ25pZnlXaXRoUGx1c1wiLCBcIm1hbmFnZW1lbnRBcHBcIiwgXCJtYXBNYXJrZXJcIiwgXCJtZW1vcnlcIiwgXCJtZW51XCIsIFwibWVudURvd25cIiwgXCJtZW51TGVmdFwiLCBcIm1lbnVSaWdodFwiLCBcIm1lbnVVcFwiLCBcIm1lcmdlXCIsIFwibWV0cmljYmVhdEFwcFwiLCBcIm1ldHJpY3NBcHBcIiwgXCJtaW5pbWl6ZVwiLCBcIm1pbnVzXCIsIFwibWludXNJbkNpcmNsZVwiLCBcIm1pbnVzSW5DaXJjbGVGaWxsZWRcIiwgXCJtb2JpbGVcIiwgXCJtb25pdG9yaW5nQXBwXCIsIFwibW9vblwiLCBcIm5hbWVzcGFjZVwiLCBcIm5lc3RlZFwiLCBcIm5vZGVcIiwgXCJub3RlYm9va0FwcFwiLCBcIm51bWJlclwiLCBcIm9mZmxpbmVcIiwgXCJvbmxpbmVcIiwgXCJvdXRsaWVyRGV0ZWN0aW9uSm9iXCIsIFwicGFja2FnZVwiLCBcInBhY2tldGJlYXRBcHBcIiwgXCJwYWdlU2VsZWN0XCIsIFwicGFnZXNTZWxlY3RcIiwgXCJwYXBlckNsaXBcIiwgXCJwYXJ0aWFsXCIsIFwicGF1c2VcIiwgXCJwYXltZW50XCIsIFwicGVuY2lsXCIsIFwicGVyY2VudFwiLCBcInBpblwiLCBcInBpbkZpbGxlZFwiLCBcInBpcGVsaW5lQXBwXCIsIFwicGxheVwiLCBcInBsYXlGaWxsZWRcIiwgXCJwbHVzXCIsIFwicGx1c0luQ2lyY2xlXCIsIFwicGx1c0luQ2lyY2xlRmlsbGVkXCIsIFwicG9wb3V0XCIsIFwicHVzaFwiLCBcInF1ZXN0aW9uSW5DaXJjbGVcIiwgXCJxdW90ZVwiLCBcInJlY2VudGx5Vmlld2VkQXBwXCIsIFwicmVmcmVzaFwiLCBcInJlZ3Jlc3Npb25Kb2JcIiwgXCJyZXBvcnRlclwiLCBcInJlcG9ydGluZ0FwcFwiLCBcInJldHVybktleVwiLCBcInNhdmVcIiwgXCJzYXZlZE9iamVjdHNBcHBcIiwgXCJzY2FsZVwiLCBcInNlYXJjaFwiLCBcInNlYXJjaFByb2ZpbGVyQXBwXCIsIFwic2VjdXJpdHlBbmFseXRpY3NBcHBcIiwgXCJzZWN1cml0eUFwcFwiLCBcInNlY3VyaXR5U2lnbmFsXCIsIFwic2VjdXJpdHlTaWduYWxEZXRlY3RlZFwiLCBcInNlY3VyaXR5U2lnbmFsUmVzb2x2ZWRcIiwgXCJzZXNzaW9uVmlld2VyXCIsIFwic2hhcmRcIiwgXCJzaGFyZVwiLCBcInNub3dmbGFrZVwiLCBcInNvcnREb3duXCIsIFwic29ydExlZnRcIiwgXCJzb3J0UmlnaHRcIiwgXCJzb3J0VXBcIiwgXCJzb3J0YWJsZVwiLCBcInNwYWNlc0FwcFwiLCBcInNxbEFwcFwiLCBcInN0YXJFbXB0eVwiLCBcInN0YXJFbXB0eVNwYWNlXCIsIFwic3RhckZpbGxlZFwiLCBcInN0YXJGaWxsZWRTcGFjZVwiLCBcInN0YXJNaW51c0VtcHR5XCIsIFwic3Rhck1pbnVzRmlsbGVkXCIsIFwic3RhclBsdXNFbXB0eVwiLCBcInN0YXJQbHVzRmlsbGVkXCIsIFwic3RhdHNcIiwgXCJzdG9wXCIsIFwic3RvcEZpbGxlZFwiLCBcInN0b3BTbGFzaFwiLCBcInN0b3JhZ2VcIiwgXCJzdHJpbmdcIiwgXCJzdWJtb2R1bGVcIiwgXCJzdW5cIiwgXCJzd2F0Y2hJbnB1dFwiLCBcInN5bWxpbmtcIiwgXCJ0YWJsZURlbnNpdHlDb21wYWN0XCIsIFwidGFibGVEZW5zaXR5RXhwYW5kZWRcIiwgXCJ0YWJsZURlbnNpdHlOb3JtYWxcIiwgXCJ0YWJsZU9mQ29udGVudHNcIiwgXCJ0YWdcIiwgXCJ0ZWFyXCIsIFwidGVtcGVyYXR1cmVcIiwgXCJ0aW1lbGluZVwiLCBcInRpbWVsaW9uQXBwXCIsIFwidGltZVJlZnJlc2hcIiwgXCJ0aW1lc2xpZGVyXCIsIFwidHJhaW5pbmdcIiwgXCJ0cmFzaFwiLCBcInVuZm9sZFwiLCBcInVubGlua1wiLCBcInVwZ3JhZGVBc3Npc3RhbnRBcHBcIiwgXCJ1cHRpbWVBcHBcIiwgXCJ1c2VyXCIsIFwidXNlckF2YXRhclwiLCBcInVzZXJzXCIsIFwidXNlcnNSb2xlc0FwcFwiLCBcInZlY3RvclwiLCBcInZpZGVvUGxheWVyXCIsIFwidmlzQXJlYVwiLCBcInZpc0FyZWFTdGFja2VkXCIsIFwidmlzQmFySG9yaXpvbnRhbFwiLCBcInZpc0Jhckhvcml6b250YWxTdGFja2VkXCIsIFwidmlzQmFyVmVydGljYWxcIiwgXCJ2aXNCYXJWZXJ0aWNhbFN0YWNrZWRcIiwgXCJ2aXNHYXVnZVwiLCBcInZpc0dvYWxcIiwgXCJ2aXNMaW5lXCIsIFwidmlzTWFwQ29vcmRpbmF0ZVwiLCBcInZpc01hcFJlZ2lvblwiLCBcInZpc01ldHJpY1wiLCBcInZpc1BpZVwiLCBcInZpc1RhYmxlXCIsIFwidmlzVGFnQ2xvdWRcIiwgXCJ2aXNUZXh0XCIsIFwidmlzVGltZWxpb25cIiwgXCJ2aXNWZWdhXCIsIFwidmlzVmlzdWFsQnVpbGRlclwiLCBcInZpc3VhbGl6ZUFwcFwiLCBcIndhdGNoZXNBcHBcIiwgXCJ3b3JkV3JhcFwiLCBcIndvcmRXcmFwRGlzYWJsZWRcIiwgXCJ3b3JrcGxhY2VTZWFyY2hBcHBcIiwgXCJ3cmVuY2hcIiwgXCJ0b2tlbkFsaWFzXCIsIFwidG9rZW5Bbm5vdGF0aW9uXCIsIFwidG9rZW5BcnJheVwiLCBcInRva2VuQmluYXJ5XCIsIFwidG9rZW5Cb29sZWFuXCIsIFwidG9rZW5DbGFzc1wiLCBcInRva2VuQ29tcGxldGlvblN1Z2dlc3RlclwiLCBcInRva2VuQ29uc3RhbnRcIiwgXCJ0b2tlbkRhdGVcIiwgXCJ0b2tlbkRlbnNlVmVjdG9yXCIsIFwidG9rZW5FbGVtZW50XCIsIFwidG9rZW5FbnVtXCIsIFwidG9rZW5FbnVtTWVtYmVyXCIsIFwidG9rZW5FdmVudFwiLCBcInRva2VuRXhjZXB0aW9uXCIsIFwidG9rZW5GaWVsZFwiLCBcInRva2VuRmlsZVwiLCBcInRva2VuRmxhdHRlbmVkXCIsIFwidG9rZW5GdW5jdGlvblwiLCBcInRva2VuR2VvXCIsIFwidG9rZW5IaXN0b2dyYW1cIiwgXCJ0b2tlbkludGVyZmFjZVwiLCBcInRva2VuSVBcIiwgXCJ0b2tlbkpvaW5cIiwgXCJ0b2tlbktleVwiLCBcInRva2VuS2V5d29yZFwiLCBcInRva2VuTWV0aG9kXCIsIFwidG9rZW5NZXRyaWNDb3VudGVyXCIsIFwidG9rZW5NZXRyaWNHYXVnZVwiLCBcInRva2VuTW9kdWxlXCIsIFwidG9rZW5OYW1lc3BhY2VcIiwgXCJ0b2tlbk5lc3RlZFwiLCBcInRva2VuTnVsbFwiLCBcInRva2VuTnVtYmVyXCIsIFwidG9rZW5PYmplY3RcIiwgXCJ0b2tlbk9wZXJhdG9yXCIsIFwidG9rZW5QYWNrYWdlXCIsIFwidG9rZW5QYXJhbWV0ZXJcIiwgXCJ0b2tlblBlcmNvbGF0b3JcIiwgXCJ0b2tlblByb3BlcnR5XCIsIFwidG9rZW5SYW5nZVwiLCBcInRva2VuUmFua0ZlYXR1cmVcIiwgXCJ0b2tlblJhbmtGZWF0dXJlc1wiLCBcInRva2VuUmVwb1wiLCBcInRva2VuU2VhcmNoVHlwZVwiLCBcInRva2VuU2hhcGVcIiwgXCJ0b2tlblN0cmluZ1wiLCBcInRva2VuU3RydWN0XCIsIFwidG9rZW5TeW1ib2xcIiwgXCJ0b2tlblRhZ1wiLCBcInRva2VuVGV4dFwiLCBcInRva2VuVG9rZW5Db3VudFwiLCBcInRva2VuVmFyaWFibGVcIl0pLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRdKVxuICB9KS5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKlxuICAgICAgICogVGhlIGZ1bmN0aW9uIHRoYXQgcmVuZGVycyB0aGUgYWN0aW9uLiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIG5vZGUgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBgb25Gb2N1c2AgYW5kIGBvbkJsdXJgIGZ1bmN0aW9uc1xuICAgICAgICovXG4gICAgcmVuZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgYXZhaWxhYmxlXG4gICAgICAgKi9cbiAgICBhdmFpbGFibGU6IFByb3BUeXBlcy5mdW5jLFxuXG4gICAgLyoqXG4gICAgICAgKiBBIGNhbGxiYWNrIHRoYXQgZGVmaW5lcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgICovXG4gICAgZW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNQcmltYXJ5OiBQcm9wVHlwZXMuYm9vbFxuICB9KS5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCkuaXNSZXF1aXJlZCxcbiAgaXRlbTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBpdGVtSWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcbiAgYWN0aW9uRW5hYmxlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuY1xufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IERlZmF1bHRJdGVtQWN0aW9uIH0gZnJvbSAnLi9kZWZhdWx0X2l0ZW1fYWN0aW9uJztcbmltcG9ydCB7IEN1c3RvbUl0ZW1BY3Rpb24gfSBmcm9tICcuL2N1c3RvbV9pdGVtX2FjdGlvbic7XG5pbXBvcnQgeyBpc0N1c3RvbUl0ZW1BY3Rpb24gfSBmcm9tICcuL2FjdGlvbl90eXBlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBFeHBhbmRlZEl0ZW1BY3Rpb25zID0gZnVuY3Rpb24gRXhwYW5kZWRJdGVtQWN0aW9ucyhfcmVmKSB7XG4gIHZhciBhY3Rpb25zID0gX3JlZi5hY3Rpb25zLFxuICAgICAgaXRlbUlkID0gX3JlZi5pdGVtSWQsXG4gICAgICBpdGVtID0gX3JlZi5pdGVtLFxuICAgICAgYWN0aW9uRW5hYmxlZCA9IF9yZWYuYWN0aW9uRW5hYmxlZCxcbiAgICAgIGNsYXNzTmFtZSA9IF9yZWYuY2xhc3NOYW1lO1xuICB2YXIgbW9yZVRoYW5UaHJlZSA9IGFjdGlvbnMubGVuZ3RoID4gMjtcbiAgcmV0dXJuIF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIGFjdGlvbnMucmVkdWNlKGZ1bmN0aW9uICh0b29scywgYWN0aW9uLCBpbmRleCkge1xuICAgIHZhciBhdmFpbGFibGUgPSBhY3Rpb24uYXZhaWxhYmxlID8gYWN0aW9uLmF2YWlsYWJsZShpdGVtKSA6IHRydWU7XG5cbiAgICBpZiAoIWF2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIHRvb2xzO1xuICAgIH1cblxuICAgIHZhciBlbmFibGVkID0gYWN0aW9uRW5hYmxlZChhY3Rpb24pO1xuICAgIHZhciBrZXkgPSBcIml0ZW1fYWN0aW9uX1wiLmNvbmNhdChpdGVtSWQsIFwiX1wiKS5jb25jYXQoaW5kZXgpO1xuICAgIHZhciBjbGFzc2VzID0gY2xhc3NOYW1lcyhjbGFzc05hbWUsIHtcbiAgICAgIGV4cGFuZGVkSXRlbUFjdGlvbnNfX2NvbXBsZXRlbHlIaWRlOiBtb3JlVGhhblRocmVlICYmIGluZGV4IDwgMlxuICAgIH0pO1xuXG4gICAgaWYgKGlzQ3VzdG9tSXRlbUFjdGlvbihhY3Rpb24pKSB7XG4gICAgICAvLyBjdXN0b20gYWN0aW9uIGhhcyBhIHJlbmRlciBmdW5jdGlvblxuICAgICAgdG9vbHMucHVzaChfX19FbW90aW9uSlNYKEN1c3RvbUl0ZW1BY3Rpb24sIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgZW5hYmxlZDogZW5hYmxlZCxcbiAgICAgICAgaXRlbTogaXRlbVxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b29scy5wdXNoKF9fX0Vtb3Rpb25KU1goRGVmYXVsdEl0ZW1BY3Rpb24sIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQsXG4gICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9vbHM7XG4gIH0sIFtdKSk7XG59OyIsICIvKlxuICogQ29weXJpZ2h0IEVsYXN0aWNzZWFyY2ggQi5WLiBhbmQvb3IgbGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuIExpY2Vuc2VkIHVuZGVyIHRoZSBFbGFzdGljIExpY2Vuc2VcbiAqIDIuMCBhbmQgdGhlIFNlcnZlciBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDE7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0XG4gKiBpbiBjb21wbGlhbmNlIHdpdGgsIGF0IHlvdXIgZWxlY3Rpb24sIHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wIG9yIHRoZSBTZXJ2ZXJcbiAqIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMS5cbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJlZGljYXRlJztcbmltcG9ydCB7IEV1aUJ1dHRvbkVtcHR5LCBFdWlCdXR0b25JY29uIH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IEV1aVRvb2xUaXAgfSBmcm9tICcuLi90b29sX3RpcCc7XG5pbXBvcnQgeyB1c2VHZW5lcmF0ZWRIdG1sSWQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IEV1aVNjcmVlblJlYWRlck9ubHkgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG4vLyBJbiBvcmRlciB0byB1c2UgZ2VuZXJpY3Mgd2l0aCBhbiBhcnJvdyBmdW5jdGlvbiBpbnNpZGUgYSAudHN4IGZpbGUsIGl0J3MgbmVjZXNzYXJ5IHRvIHVzZVxuLy8gdGhpcyBgZXh0ZW5kc2AgaGFjayBhbmQgZGVjbGFyZSB0aGUgdHlwZXMgYXMgc2hvd24sIGluc3RlYWQgb2YgZGVjbGFyaW5nIHRoZSBjb25zdCBhcyBhXG4vLyBGdW5jdGlvbkNvbXBvbmVudFxuZXhwb3J0IHZhciBEZWZhdWx0SXRlbUFjdGlvbiA9IGZ1bmN0aW9uIERlZmF1bHRJdGVtQWN0aW9uKF9yZWYpIHtcbiAgdmFyIGFjdGlvbiA9IF9yZWYuYWN0aW9uLFxuICAgICAgZW5hYmxlZCA9IF9yZWYuZW5hYmxlZCxcbiAgICAgIGl0ZW0gPSBfcmVmLml0ZW0sXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZTtcblxuICBpZiAoIWFjdGlvbi5vbkNsaWNrICYmICFhY3Rpb24uaHJlZikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZW5kZXIgaXRlbSBhY3Rpb24gW1wiLmNvbmNhdChhY3Rpb24ubmFtZSwgXCJdLiBNaXNzaW5nIHJlcXVpcmVkICdvbkNsaWNrJyBjYWxsYmFja1xcbiAgICAgIG9yICdocmVmJyBzdHJpbmcuIElmIHlvdSB3YW50IHRvIHByb3ZpZGUgYSBjdXN0b20gYWN0aW9uIGNvbnRyb2wsIG1ha2Ugc3VyZSB0byBkZWZpbmUgdGhlICdyZW5kZXInIGNhbGxiYWNrXCIpKTtcbiAgfVxuXG4gIHZhciBvbkNsaWNrID0gYWN0aW9uLm9uQ2xpY2sgPyBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGFjdGlvbi5vbkNsaWNrKGl0ZW0pO1xuICB9IDogdW5kZWZpbmVkO1xuICB2YXIgYnV0dG9uQ29sb3IgPSBhY3Rpb24uY29sb3I7XG4gIHZhciBjb2xvciA9ICdwcmltYXJ5JztcblxuICBpZiAoYnV0dG9uQ29sb3IpIHtcbiAgICBjb2xvciA9IGlzU3RyaW5nKGJ1dHRvbkNvbG9yKSA/IGJ1dHRvbkNvbG9yIDogYnV0dG9uQ29sb3IoaXRlbSk7XG4gIH1cblxuICB2YXIgYnV0dG9uSWNvbiA9IGFjdGlvbi5pY29uO1xuICB2YXIgaWNvbjtcblxuICBpZiAoYnV0dG9uSWNvbikge1xuICAgIGljb24gPSBpc1N0cmluZyhidXR0b25JY29uKSA/IGJ1dHRvbkljb24gOiBidXR0b25JY29uKGl0ZW0pO1xuICB9XG5cbiAgdmFyIGJ1dHRvbjtcbiAgdmFyIGFjdGlvbkNvbnRlbnQgPSB0eXBlb2YgYWN0aW9uLm5hbWUgPT09ICdmdW5jdGlvbicgPyBhY3Rpb24ubmFtZShpdGVtKSA6IGFjdGlvbi5uYW1lO1xuICB2YXIgYXJpYUxhYmVsSWQgPSB1c2VHZW5lcmF0ZWRIdG1sSWQoKTtcblxuICBpZiAoYWN0aW9uLnR5cGUgPT09ICdpY29uJykge1xuICAgIGlmICghaWNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHJlbmRlciBpdGVtIGFjdGlvbiBbXCIuY29uY2F0KGFjdGlvbi5uYW1lLCBcIl0uIEl0IGlzIGNvbmZpZ3VyZWQgdG8gcmVuZGVyIGFzIGFuIGljb24gYnV0IG5vXFxuICAgICAgaWNvbiBpcyBwcm92aWRlZC4gTWFrZSBzdXJlIHRvIHNldCB0aGUgJ2ljb24nIHByb3BlcnR5IG9mIHRoZSBhY3Rpb25cIikpO1xuICAgIH1cblxuICAgIGJ1dHRvbiA9IF9fX0Vtb3Rpb25KU1goUmVhY3QuRnJhZ21lbnQsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpQnV0dG9uSWNvbiwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBhcmlhTGFiZWxJZCxcbiAgICAgIGlzRGlzYWJsZWQ6ICFlbmFibGVkLFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgaWNvblR5cGU6IGljb24sXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgaHJlZjogYWN0aW9uLmhyZWYsXG4gICAgICB0YXJnZXQ6IGFjdGlvbi50YXJnZXQsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGFjdGlvblsnZGF0YS10ZXN0LXN1YmonXVxuICAgIH0pLCBfX19FbW90aW9uSlNYKEV1aVNjcmVlblJlYWRlck9ubHksIG51bGwsIF9fX0Vtb3Rpb25KU1goXCJzcGFuXCIsIHtcbiAgICAgIGlkOiBhcmlhTGFiZWxJZFxuICAgIH0sIGFjdGlvbkNvbnRlbnQpKSk7XG4gIH0gZWxzZSB7XG4gICAgYnV0dG9uID0gX19fRW1vdGlvbkpTWChFdWlCdXR0b25FbXB0eSwge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICBzaXplOiBcInNcIixcbiAgICAgIGlzRGlzYWJsZWQ6ICFlbmFibGVkLFxuICAgICAgY29sb3I6IGNvbG9yLFxuICAgICAgaWNvblR5cGU6IGljb24sXG4gICAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgICAgaHJlZjogYWN0aW9uLmhyZWYsXG4gICAgICB0YXJnZXQ6IGFjdGlvbi50YXJnZXQsXG4gICAgICBcImRhdGEtdGVzdC1zdWJqXCI6IGFjdGlvblsnZGF0YS10ZXN0LXN1YmonXSxcbiAgICAgIGZsdXNoOiBcInJpZ2h0XCJcbiAgICB9LCBhY3Rpb25Db250ZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbmFibGVkICYmIGFjdGlvbi5kZXNjcmlwdGlvbiA/IF9fX0Vtb3Rpb25KU1goRXVpVG9vbFRpcCwge1xuICAgIGNvbnRlbnQ6IGFjdGlvbi5kZXNjcmlwdGlvbixcbiAgICBkZWxheTogXCJsb25nXCJcbiAgfSwgYnV0dG9uKSA6IGJ1dHRvbjtcbn07IiwgImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50LCBjbG9uZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX19fRW1vdGlvbkpTWCB9IGZyb20gXCJAZW1vdGlvbi9yZWFjdFwiO1xuZXhwb3J0IHZhciBDdXN0b21JdGVtQWN0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhDdXN0b21JdGVtQWN0aW9uLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEN1c3RvbUl0ZW1BY3Rpb24pO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUl0ZW1BY3Rpb24ocHJvcHMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ3VzdG9tSXRlbUFjdGlvbik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJtb3VudGVkXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25Gb2N1c1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMubW91bnRlZCkge1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaGFzRm9jdXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25CbHVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5tb3VudGVkKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNGb2N1czogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwiaGFzRm9jdXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnN0YXRlLmhhc0ZvY3VzO1xuICAgIH0pO1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBoYXNGb2N1czogZmFsc2VcbiAgICB9OyAvLyB3aGlsZSBnZW5lcmFsbHkgY29uc2lkZXJlZCBhbiBhbnRpLXBhdHRlcm4sIGhlcmUgd2UgcmVxdWlyZVxuICAgIC8vIHRvIGRvIHRoYXQgYXMgdGhlIG9uRm9jdXMvb25CbHVyIGV2ZW50cyBvZiB0aGUgYWN0aW9uIGNvbnRyb2xzXG4gICAgLy8gbWF5IHRyaWdnZXIgd2hpbGUgdGhpcyBjb21wb25lbnQgaXMgdW5tb3VudGVkLiBBbiBhbHRlcm5hdGl2ZVxuICAgIC8vIChhdCBsZWFzdCB0aGUgd29ya2Fyb3VuZHMgc3VnZ2VzdGVkIGJ5IHJlYWN0IGlzIHRvIHVucmVnaXN0ZXJcbiAgICAvLyB0aGUgb25Gb2N1cy9vbkJsdXIgbGlzdGVuZXJzIGZyb20gdGhlIGFjdGlvbiBjb250cm9scy4uLiB0aGlzXG4gICAgLy8gdW5mb3J0dW5hdGVseSB3aWxsIGxlYWQgdG8gdW5uZWNlc3NhcmlseSBjb21wbGV4IGNvZGUuLi4gc28gd2UnbGxcbiAgICAvLyBzdGljayB0byB0aGlzIGFwcHJvYWNoIGZvciBub3cpXG5cbiAgICBfdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEN1c3RvbUl0ZW1BY3Rpb24sIFt7XG4gICAga2V5OiBcImNvbXBvbmVudERpZE1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50V2lsbFVubW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYWN0aW9uID0gX3RoaXMkcHJvcHMuYWN0aW9uLFxuICAgICAgICAgIGVuYWJsZWQgPSBfdGhpcyRwcm9wcy5lbmFibGVkLFxuICAgICAgICAgIGl0ZW0gPSBfdGhpcyRwcm9wcy5pdGVtLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzLmNsYXNzTmFtZTtcbiAgICAgIHZhciB0b29sID0gYWN0aW9uLnJlbmRlcihpdGVtLCBlbmFibGVkKTtcbiAgICAgIHZhciBjbG9uZWRUb29sID0gLyojX19QVVJFX18qL2Nsb25lRWxlbWVudCh0b29sLCB7XG4gICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgb25CbHVyOiB0aGlzLm9uQmx1clxuICAgICAgfSk7XG4gICAgICB2YXIgc3R5bGUgPSB0aGlzLmhhc0ZvY3VzKCkgPyB7XG4gICAgICAgIG9wYWNpdHk6IDFcbiAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gX19fRW1vdGlvbkpTWChcImRpdlwiLCB7XG4gICAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgICAgIH0sIGNsb25lZFRvb2wpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDdXN0b21JdGVtQWN0aW9uO1xufShDb21wb25lbnQpO1xuQ3VzdG9tSXRlbUFjdGlvbi5wcm9wVHlwZXMgPSB7XG4gIGFjdGlvbjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICBlbmFibGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpdGVtOiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpbmRleDogUHJvcFR5cGVzLm51bWJlclxufTsiLCAiLypcbiAqIENvcHlyaWdodCBFbGFzdGljc2VhcmNoIEIuVi4gYW5kL29yIGxpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBMaWNlbnNlZCB1bmRlciB0aGUgRWxhc3RpYyBMaWNlbnNlXG4gKiAyLjAgYW5kIHRoZSBTZXJ2ZXIgU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdFxuICogaW4gY29tcGxpYW5jZSB3aXRoLCBhdCB5b3VyIGVsZWN0aW9uLCB0aGUgRWxhc3RpYyBMaWNlbnNlIDIuMCBvciB0aGUgU2VydmVyXG4gKiBTaWRlIFB1YmxpYyBMaWNlbnNlLCB2IDEuXG4gKi9cbmV4cG9ydCB2YXIgaXNDdXN0b21JdGVtQWN0aW9uID0gZnVuY3Rpb24gaXNDdXN0b21JdGVtQWN0aW9uKGFjdGlvbikge1xuICByZXR1cm4gYWN0aW9uLmhhc093blByb3BlcnR5KCdyZW5kZXInKTtcbn07IiwgIi8qXG4gKiBDb3B5cmlnaHQgRWxhc3RpY3NlYXJjaCBCLlYuIGFuZC9vciBsaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gTGljZW5zZWQgdW5kZXIgdGhlIEVsYXN0aWMgTGljZW5zZVxuICogMi4wIGFuZCB0aGUgU2VydmVyIFNpZGUgUHVibGljIExpY2Vuc2UsIHYgMTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHRcbiAqIGluIGNvbXBsaWFuY2Ugd2l0aCwgYXQgeW91ciBlbGVjdGlvbiwgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjAgb3IgdGhlIFNlcnZlclxuICogU2lkZSBQdWJsaWMgTGljZW5zZSwgdiAxLlxuICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRXVpU3BhY2VyIH0gZnJvbSAnLi4vc3BhY2VyJztcbmltcG9ydCB7IEV1aVRhYmxlUGFnaW5hdGlvbiB9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7IGpzeCBhcyBfX19FbW90aW9uSlNYIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5leHBvcnQgdmFyIGRlZmF1bHRzID0ge1xuICBwYWdlU2l6ZU9wdGlvbnM6IFsxMCwgMjUsIDUwXVxufTtcbmV4cG9ydCB2YXIgUGFnaW5hdGlvbkJhciA9IGZ1bmN0aW9uIFBhZ2luYXRpb25CYXIoX3JlZikge1xuICB2YXIgcGFnaW5hdGlvbiA9IF9yZWYucGFnaW5hdGlvbixcbiAgICAgIG9uUGFnZVNpemVDaGFuZ2UgPSBfcmVmLm9uUGFnZVNpemVDaGFuZ2UsXG4gICAgICBvblBhZ2VDaGFuZ2UgPSBfcmVmLm9uUGFnZUNoYW5nZSxcbiAgICAgIGFyaWFDb250cm9scyA9IF9yZWZbJ2FyaWEtY29udHJvbHMnXSxcbiAgICAgIGFyaWFMYWJlbCA9IF9yZWZbJ2FyaWEtbGFiZWwnXTtcbiAgdmFyIHBhZ2VTaXplT3B0aW9ucyA9IHBhZ2luYXRpb24ucGFnZVNpemVPcHRpb25zID8gcGFnaW5hdGlvbi5wYWdlU2l6ZU9wdGlvbnMgOiBkZWZhdWx0cy5wYWdlU2l6ZU9wdGlvbnM7XG4gIHZhciBwYWdlQ291bnQgPSBwYWdpbmF0aW9uLnBhZ2VTaXplID8gTWF0aC5jZWlsKHBhZ2luYXRpb24udG90YWxJdGVtQ291bnQgLyBwYWdpbmF0aW9uLnBhZ2VTaXplKSA6IDE7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHBhZ2VDb3VudCA8IHBhZ2luYXRpb24ucGFnZUluZGV4ICsgMSkge1xuICAgICAgb25QYWdlQ2hhbmdlID09PSBudWxsIHx8IG9uUGFnZUNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25QYWdlQ2hhbmdlKHBhZ2VDb3VudCAtIDEpO1xuICAgIH1cbiAgfSwgW3BhZ2VDb3VudCwgb25QYWdlQ2hhbmdlLCBwYWdpbmF0aW9uXSk7XG4gIHJldHVybiBfX19FbW90aW9uSlNYKFwiZGl2XCIsIG51bGwsIF9fX0Vtb3Rpb25KU1goRXVpU3BhY2VyLCB7XG4gICAgc2l6ZTogXCJtXCJcbiAgfSksIF9fX0Vtb3Rpb25KU1goRXVpVGFibGVQYWdpbmF0aW9uLCB7XG4gICAgYWN0aXZlUGFnZTogcGFnaW5hdGlvbi5wYWdlSW5kZXgsXG4gICAgc2hvd1BlclBhZ2VPcHRpb25zOiBwYWdpbmF0aW9uLnNob3dQZXJQYWdlT3B0aW9ucyxcbiAgICBpdGVtc1BlclBhZ2U6IHBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgaXRlbXNQZXJQYWdlT3B0aW9uczogcGFnZVNpemVPcHRpb25zLFxuICAgIHBhZ2VDb3VudDogcGFnZUNvdW50LFxuICAgIG9uQ2hhbmdlSXRlbXNQZXJQYWdlOiBvblBhZ2VTaXplQ2hhbmdlLFxuICAgIG9uQ2hhbmdlUGFnZTogb25QYWdlQ2hhbmdlLFxuICAgIFwiYXJpYS1jb250cm9sc1wiOiBhcmlhQ29udHJvbHMsXG4gICAgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbFxuICB9KSk7XG59OyIsICJleHBvcnQgdmFyIFN1YnNjcmliYWJsZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN1YnNjcmliYWJsZSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN1YnNjcmliYWJsZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBsaXN0ZW5lciB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGNhbGxiYWNrKTtcbiAgICB0aGlzLm9uU3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmxpc3RlbmVycyA9IF90aGlzLmxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IGNhbGxiYWNrO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLm9uVW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5oYXNMaXN0ZW5lcnMgPSBmdW5jdGlvbiBoYXNMaXN0ZW5lcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXJzLmxlbmd0aCA+IDA7XG4gIH07XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7Ly8gRG8gbm90aGluZ1xuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHsvLyBEbyBub3RoaW5nXG4gIH07XG5cbiAgcmV0dXJuIFN1YnNjcmliYWJsZTtcbn0oKTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG4vLyBUWVBFU1xuLy8gVVRJTFNcbmV4cG9ydCB2YXIgaXNTZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJztcbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZ1bmN0aW9uYWxVcGRhdGUodXBkYXRlciwgaW5wdXQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1cGRhdGVyID09PSAnZnVuY3Rpb24nID8gdXBkYXRlcihpbnB1dCkgOiB1cGRhdGVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUaW1lb3V0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlID49IDAgJiYgdmFsdWUgIT09IEluZmluaXR5O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVF1ZXJ5S2V5QXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2UoYXJyYXkxLCBhcnJheTIpIHtcbiAgcmV0dXJuIGFycmF5MS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gYXJyYXkyLmluZGV4T2YoeCkgPT09IC0xO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQXQoYXJyYXksIGluZGV4LCB2YWx1ZSkge1xuICB2YXIgY29weSA9IGFycmF5LnNsaWNlKDApO1xuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xuICByZXR1cm4gY29weTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aW1lVW50aWxTdGFsZSh1cGRhdGVkQXQsIHN0YWxlVGltZSkge1xuICByZXR1cm4gTWF0aC5tYXgodXBkYXRlZEF0ICsgKHN0YWxlVGltZSB8fCAwKSAtIERhdGUubm93KCksIDApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKCFpc1F1ZXJ5S2V5KGFyZzEpKSB7XG4gICAgcmV0dXJuIGFyZzE7XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZzIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzMsIHtcbiAgICAgIHF1ZXJ5S2V5OiBhcmcxLFxuICAgICAgcXVlcnlGbjogYXJnMlxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgcXVlcnlLZXk6IGFyZzFcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdXRhdGlvbkFyZ3MoYXJnMSwgYXJnMiwgYXJnMykge1xuICBpZiAoaXNRdWVyeUtleShhcmcxKSkge1xuICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmczLCB7XG4gICAgICAgIG11dGF0aW9uS2V5OiBhcmcxLFxuICAgICAgICBtdXRhdGlvbkZuOiBhcmcyXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICAgIG11dGF0aW9uS2V5OiBhcmcxXG4gICAgfSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZzEgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICAgIG11dGF0aW9uRm46IGFyZzFcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgcmV0dXJuIGlzUXVlcnlLZXkoYXJnMSkgPyBbX2V4dGVuZHMoe30sIGFyZzIsIHtcbiAgICBxdWVyeUtleTogYXJnMVxuICB9KSwgYXJnM10gOiBbYXJnMSB8fCB7fSwgYXJnMl07XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNdXRhdGlvbkZpbHRlckFyZ3MoYXJnMSwgYXJnMikge1xuICByZXR1cm4gaXNRdWVyeUtleShhcmcxKSA/IF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgbXV0YXRpb25LZXk6IGFyZzFcbiAgfSkgOiBhcmcxO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hcFF1ZXJ5U3RhdHVzRmlsdGVyKGFjdGl2ZSwgaW5hY3RpdmUpIHtcbiAgaWYgKGFjdGl2ZSA9PT0gdHJ1ZSAmJiBpbmFjdGl2ZSA9PT0gdHJ1ZSB8fCBhY3RpdmUgPT0gbnVsbCAmJiBpbmFjdGl2ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICdhbGwnO1xuICB9IGVsc2UgaWYgKGFjdGl2ZSA9PT0gZmFsc2UgJiYgaW5hY3RpdmUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICdub25lJztcbiAgfSBlbHNlIHtcbiAgICAvLyBBdCB0aGlzIHBvaW50LCBhY3RpdmV8aW5hY3RpdmUgY2FuIG9ubHkgYmUgdHJ1ZXxmYWxzZSBvciBmYWxzZXx0cnVlXG4gICAgLy8gc28sIHdoZW4gb25seSBvbmUgdmFsdWUgaXMgcHJvdmlkZWQsIHRoZSBtaXNzaW5nIG9uZSBoYXMgdG8gYmUgdGhlIG5lZ2F0ZWQgdmFsdWVcbiAgICB2YXIgaXNBY3RpdmUgPSBhY3RpdmUgIT0gbnVsbCA/IGFjdGl2ZSA6ICFpbmFjdGl2ZTtcbiAgICByZXR1cm4gaXNBY3RpdmUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZSc7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KSB7XG4gIHZhciBhY3RpdmUgPSBmaWx0ZXJzLmFjdGl2ZSxcbiAgICAgIGV4YWN0ID0gZmlsdGVycy5leGFjdCxcbiAgICAgIGZldGNoaW5nID0gZmlsdGVycy5mZXRjaGluZyxcbiAgICAgIGluYWN0aXZlID0gZmlsdGVycy5pbmFjdGl2ZSxcbiAgICAgIHByZWRpY2F0ZSA9IGZpbHRlcnMucHJlZGljYXRlLFxuICAgICAgcXVlcnlLZXkgPSBmaWx0ZXJzLnF1ZXJ5S2V5LFxuICAgICAgc3RhbGUgPSBmaWx0ZXJzLnN0YWxlO1xuXG4gIGlmIChpc1F1ZXJ5S2V5KHF1ZXJ5S2V5KSkge1xuICAgIGlmIChleGFjdCkge1xuICAgICAgaWYgKHF1ZXJ5LnF1ZXJ5SGFzaCAhPT0gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBxdWVyeS5vcHRpb25zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KHF1ZXJ5LnF1ZXJ5S2V5LCBxdWVyeUtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgcXVlcnlTdGF0dXNGaWx0ZXIgPSBtYXBRdWVyeVN0YXR1c0ZpbHRlcihhY3RpdmUsIGluYWN0aXZlKTtcblxuICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdub25lJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChxdWVyeVN0YXR1c0ZpbHRlciAhPT0gJ2FsbCcpIHtcbiAgICB2YXIgaXNBY3RpdmUgPSBxdWVyeS5pc0FjdGl2ZSgpO1xuXG4gICAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnYWN0aXZlJyAmJiAhaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgPT09ICdpbmFjdGl2ZScgJiYgaXNBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHN0YWxlID09PSAnYm9vbGVhbicgJiYgcXVlcnkuaXNTdGFsZSgpICE9PSBzdGFsZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmV0Y2hpbmcgPT09ICdib29sZWFuJyAmJiBxdWVyeS5pc0ZldGNoaW5nKCkgIT09IGZldGNoaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKHF1ZXJ5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pIHtcbiAgdmFyIGV4YWN0ID0gZmlsdGVycy5leGFjdCxcbiAgICAgIGZldGNoaW5nID0gZmlsdGVycy5mZXRjaGluZyxcbiAgICAgIHByZWRpY2F0ZSA9IGZpbHRlcnMucHJlZGljYXRlLFxuICAgICAgbXV0YXRpb25LZXkgPSBmaWx0ZXJzLm11dGF0aW9uS2V5O1xuXG4gIGlmIChpc1F1ZXJ5S2V5KG11dGF0aW9uS2V5KSkge1xuICAgIGlmICghbXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChleGFjdCkge1xuICAgICAgaWYgKGhhc2hRdWVyeUtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5KSAhPT0gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcGFydGlhbE1hdGNoS2V5KG11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXksIG11dGF0aW9uS2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgZmV0Y2hpbmcgPT09ICdib29sZWFuJyAmJiBtdXRhdGlvbi5zdGF0ZS5zdGF0dXMgPT09ICdsb2FkaW5nJyAhPT0gZmV0Y2hpbmcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocHJlZGljYXRlICYmICFwcmVkaWNhdGUobXV0YXRpb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaGFzaFF1ZXJ5S2V5QnlPcHRpb25zKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gIHZhciBoYXNoRm4gPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5xdWVyeUtleUhhc2hGbikgfHwgaGFzaFF1ZXJ5S2V5O1xuICByZXR1cm4gaGFzaEZuKHF1ZXJ5S2V5KTtcbn1cbi8qKlxuICogRGVmYXVsdCBxdWVyeSBrZXlzIGhhc2ggZnVuY3Rpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hRdWVyeUtleShxdWVyeUtleSkge1xuICB2YXIgYXNBcnJheSA9IGVuc3VyZVF1ZXJ5S2V5QXJyYXkocXVlcnlLZXkpO1xuICByZXR1cm4gc3RhYmxlVmFsdWVIYXNoKGFzQXJyYXkpO1xufVxuLyoqXG4gKiBIYXNoZXMgdGhlIHZhbHVlIGludG8gYSBzdGFibGUgaGFzaC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RhYmxlVmFsdWVIYXNoKHZhbHVlKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgZnVuY3Rpb24gKF8sIHZhbCkge1xuICAgIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbCkgPyBPYmplY3Qua2V5cyh2YWwpLnNvcnQoKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbFtrZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSkgOiB2YWw7XG4gIH0pO1xufVxuLyoqXG4gKiBDaGVja3MgaWYga2V5IGBiYCBwYXJ0aWFsbHkgbWF0Y2hlcyB3aXRoIGtleSBgYWAuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWxNYXRjaEtleShhLCBiKSB7XG4gIHJldHVybiBwYXJ0aWFsRGVlcEVxdWFsKGVuc3VyZVF1ZXJ5S2V5QXJyYXkoYSksIGVuc3VyZVF1ZXJ5S2V5QXJyYXkoYikpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgYGJgIHBhcnRpYWxseSBtYXRjaGVzIHdpdGggYGFgLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsRGVlcEVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYSAmJiBiICYmIHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gIU9iamVjdC5rZXlzKGIpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuICFwYXJ0aWFsRGVlcEVxdWFsKGFba2V5XSwgYltrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGBhYCBpZiBgYmAgaXMgZGVlcGx5IGVxdWFsLlxuICogSWYgbm90LCBpdCB3aWxsIHJlcGxhY2UgYW55IGRlZXBseSBlcXVhbCBjaGlsZHJlbiBvZiBgYmAgd2l0aCB0aG9zZSBvZiBgYWAuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBzdHJ1Y3R1cmFsIHNoYXJpbmcgYmV0d2VlbiBKU09OIHZhbHVlcyBmb3IgZXhhbXBsZS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUVxdWFsRGVlcChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgYXJyYXkgPSBBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYik7XG5cbiAgaWYgKGFycmF5IHx8IGlzUGxhaW5PYmplY3QoYSkgJiYgaXNQbGFpbk9iamVjdChiKSkge1xuICAgIHZhciBhU2l6ZSA9IGFycmF5ID8gYS5sZW5ndGggOiBPYmplY3Qua2V5cyhhKS5sZW5ndGg7XG4gICAgdmFyIGJJdGVtcyA9IGFycmF5ID8gYiA6IE9iamVjdC5rZXlzKGIpO1xuICAgIHZhciBiU2l6ZSA9IGJJdGVtcy5sZW5ndGg7XG4gICAgdmFyIGNvcHkgPSBhcnJheSA/IFtdIDoge307XG4gICAgdmFyIGVxdWFsSXRlbXMgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiU2l6ZTsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gYXJyYXkgPyBpIDogYkl0ZW1zW2ldO1xuICAgICAgY29weVtrZXldID0gcmVwbGFjZUVxdWFsRGVlcChhW2tleV0sIGJba2V5XSk7XG5cbiAgICAgIGlmIChjb3B5W2tleV0gPT09IGFba2V5XSkge1xuICAgICAgICBlcXVhbEl0ZW1zKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFTaXplID09PSBiU2l6ZSAmJiBlcXVhbEl0ZW1zID09PSBhU2l6ZSA/IGEgOiBjb3B5O1xuICB9XG5cbiAgcmV0dXJuIGI7XG59XG4vKipcbiAqIFNoYWxsb3cgY29tcGFyZSBvYmplY3RzLiBPbmx5IHdvcmtzIHdpdGggb2JqZWN0cyB0aGF0IGFsd2F5cyBoYXZlIHRoZSBzYW1lIHByb3BlcnRpZXMuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbE9iamVjdHMoYSwgYikge1xuICBpZiAoYSAmJiAhYiB8fCBiICYmICFhKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIga2V5IGluIGEpIHtcbiAgICBpZiAoYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn0gLy8gQ29waWVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdFxuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvKSB7XG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKG8pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIGhhcyBtb2RpZmllZCBjb25zdHJ1Y3RvclxuXG5cbiAgdmFyIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuXG4gIGlmICh0eXBlb2YgY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBJZiBoYXMgbW9kaWZpZWQgcHJvdG90eXBlXG5cblxuICB2YXIgcHJvdCA9IGN0b3IucHJvdG90eXBlO1xuXG4gIGlmICghaGFzT2JqZWN0UHJvdG90eXBlKHByb3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIGNvbnN0cnVjdG9yIGRvZXMgbm90IGhhdmUgYW4gT2JqZWN0LXNwZWNpZmljIG1ldGhvZFxuXG5cbiAgaWYgKCFwcm90Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gTW9zdCBsaWtlbHkgYSBwbGFpbiBPYmplY3RcblxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYXNPYmplY3RQcm90b3R5cGUobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUXVlcnlLZXkodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFcnJvcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcCh0aW1lb3V0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCk7XG4gIH0pO1xufVxuLyoqXG4gKiBTY2hlZHVsZXMgYSBtaWNyb3Rhc2suXG4gKiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gc2NoZWR1bGUgc3RhdGUgdXBkYXRlcyBhZnRlciByZW5kZXJpbmcuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlTWljcm90YXNrKGNhbGxiYWNrKSB7XG4gIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oY2FsbGJhY2spLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBYm9ydENvbnRyb2xsZXIoKSB7XG4gIGlmICh0eXBlb2YgQWJvcnRDb250cm9sbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgfVxufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIEZvY3VzTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShGb2N1c01hbmFnZXIsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIEZvY3VzTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc2V0dXAgPSBmdW5jdGlvbiAob25Gb2N1cykge1xuICAgICAgdmFyIF93aW5kb3c7XG5cbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgKChfd2luZG93ID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHtcbiAgICAgICAgICByZXR1cm4gb25Gb2N1cygpO1xuICAgICAgICB9OyAvLyBMaXN0ZW4gdG8gdmlzaWJpbGxpdHljaGFuZ2UgYW5kIGZvY3VzXG5cblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byB1bnN1YnNjcmliZSBpZiBhIG5ldyBoYW5kbGVyIGlzIHNldFxuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgbGlzdGVuZXIpO1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IEZvY3VzTWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm9uU3Vic2NyaWJlID0gZnVuY3Rpb24gb25TdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmNsZWFudXApIHtcbiAgICAgIHRoaXMuc2V0RXZlbnRMaXN0ZW5lcih0aGlzLnNldHVwKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiBvblVuc3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoKSkge1xuICAgICAgdmFyIF90aGlzJGNsZWFudXA7XG5cbiAgICAgIChfdGhpcyRjbGVhbnVwID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cC5jYWxsKHRoaXMpO1xuICAgICAgdGhpcy5jbGVhbnVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHNldEV2ZW50TGlzdGVuZXIoc2V0dXApIHtcbiAgICB2YXIgX3RoaXMkY2xlYW51cDIsXG4gICAgICAgIF90aGlzMiA9IHRoaXM7XG5cbiAgICB0aGlzLnNldHVwID0gc2V0dXA7XG4gICAgKF90aGlzJGNsZWFudXAyID0gdGhpcy5jbGVhbnVwKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkY2xlYW51cDIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLmNsZWFudXAgPSBzZXR1cChmdW5jdGlvbiAoZm9jdXNlZCkge1xuICAgICAgaWYgKHR5cGVvZiBmb2N1c2VkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX3RoaXMyLnNldEZvY3VzZWQoZm9jdXNlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczIub25Gb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5zZXRGb2N1c2VkID0gZnVuY3Rpb24gc2V0Rm9jdXNlZChmb2N1c2VkKSB7XG4gICAgdGhpcy5mb2N1c2VkID0gZm9jdXNlZDtcblxuICAgIGlmIChmb2N1c2VkKSB7XG4gICAgICB0aGlzLm9uRm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc0ZvY3VzZWQgPSBmdW5jdGlvbiBpc0ZvY3VzZWQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmZvY3VzZWQgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcbiAgICB9IC8vIGRvY3VtZW50IGdsb2JhbCBjYW4gYmUgdW5hdmFpbGFibGUgaW4gcmVhY3QgbmF0aXZlXG5cblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3VuZGVmaW5lZCwgJ3Zpc2libGUnLCAncHJlcmVuZGVyJ10uaW5jbHVkZXMoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlKTtcbiAgfTtcblxuICByZXR1cm4gRm9jdXNNYW5hZ2VyO1xufShTdWJzY3JpYmFibGUpO1xuZXhwb3J0IHZhciBmb2N1c01hbmFnZXIgPSBuZXcgRm9jdXNNYW5hZ2VyKCk7IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnO1xuaW1wb3J0IHsgaXNTZXJ2ZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB2YXIgT25saW5lTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShPbmxpbmVNYW5hZ2VyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBPbmxpbmVNYW5hZ2VyKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5zZXR1cCA9IGZ1bmN0aW9uIChvbk9ubGluZSkge1xuICAgICAgdmFyIF93aW5kb3c7XG5cbiAgICAgIGlmICghaXNTZXJ2ZXIgJiYgKChfd2luZG93ID0gd2luZG93KSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHtcbiAgICAgICAgICByZXR1cm4gb25PbmxpbmUoKTtcbiAgICAgICAgfTsgLy8gTGlzdGVuIHRvIG9ubGluZVxuXG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBCZSBzdXJlIHRvIHVuc3Vic2NyaWJlIGlmIGEgbmV3IGhhbmRsZXIgaXMgc2V0XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE9ubGluZU1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy5zZXR1cCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHZhciBfdGhpcyRjbGVhbnVwO1xuXG4gICAgICAoX3RoaXMkY2xlYW51cCA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdmFyIF90aGlzJGNsZWFudXAyLFxuICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXR1cCA9IHNldHVwO1xuICAgIChfdGhpcyRjbGVhbnVwMiA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5jbGVhbnVwID0gc2V0dXAoZnVuY3Rpb24gKG9ubGluZSkge1xuICAgICAgaWYgKHR5cGVvZiBvbmxpbmUgPT09ICdib29sZWFuJykge1xuICAgICAgICBfdGhpczIuc2V0T25saW5lKG9ubGluZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpczIub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0T25saW5lID0gZnVuY3Rpb24gc2V0T25saW5lKG9ubGluZSkge1xuICAgIHRoaXMub25saW5lID0gb25saW5lO1xuXG4gICAgaWYgKG9ubGluZSkge1xuICAgICAgdGhpcy5vbk9ubGluZSgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNPbmxpbmUgPSBmdW5jdGlvbiBpc09ubGluZSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMub25saW5lID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ubGluZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIG5hdmlnYXRvci5vbkxpbmUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yLm9uTGluZTtcbiAgfTtcblxuICByZXR1cm4gT25saW5lTWFuYWdlcjtcbn0oU3Vic2NyaWJhYmxlKTtcbmV4cG9ydCB2YXIgb25saW5lTWFuYWdlciA9IG5ldyBPbmxpbmVNYW5hZ2VyKCk7IiwgImltcG9ydCB7IGZvY3VzTWFuYWdlciB9IGZyb20gJy4vZm9jdXNNYW5hZ2VyJztcbmltcG9ydCB7IG9ubGluZU1hbmFnZXIgfSBmcm9tICcuL29ubGluZU1hbmFnZXInO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuL3V0aWxzJztcblxuZnVuY3Rpb24gZGVmYXVsdFJldHJ5RGVsYXkoZmFpbHVyZUNvdW50KSB7XG4gIHJldHVybiBNYXRoLm1pbigxMDAwICogTWF0aC5wb3coMiwgZmFpbHVyZUNvdW50KSwgMzAwMDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDYW5jZWxhYmxlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgKHZhbHVlID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZS5jYW5jZWwpID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0IHZhciBDYW5jZWxsZWRFcnJvciA9IGZ1bmN0aW9uIENhbmNlbGxlZEVycm9yKG9wdGlvbnMpIHtcbiAgdGhpcy5yZXZlcnQgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJldmVydDtcbiAgdGhpcy5zaWxlbnQgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnNpbGVudDtcbn07XG5leHBvcnQgZnVuY3Rpb24gaXNDYW5jZWxsZWRFcnJvcih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBDYW5jZWxsZWRFcnJvcjtcbn0gLy8gQ0xBU1NcblxuZXhwb3J0IHZhciBSZXRyeWVyID0gZnVuY3Rpb24gUmV0cnllcihjb25maWcpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIgY2FuY2VsUmV0cnkgPSBmYWxzZTtcbiAgdmFyIGNhbmNlbEZuO1xuICB2YXIgY29udGludWVGbjtcbiAgdmFyIHByb21pc2VSZXNvbHZlO1xuICB2YXIgcHJvbWlzZVJlamVjdDtcbiAgdGhpcy5hYm9ydCA9IGNvbmZpZy5hYm9ydDtcblxuICB0aGlzLmNhbmNlbCA9IGZ1bmN0aW9uIChjYW5jZWxPcHRpb25zKSB7XG4gICAgcmV0dXJuIGNhbmNlbEZuID09IG51bGwgPyB2b2lkIDAgOiBjYW5jZWxGbihjYW5jZWxPcHRpb25zKTtcbiAgfTtcblxuICB0aGlzLmNhbmNlbFJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIGNhbmNlbFJldHJ5ID0gdHJ1ZTtcbiAgfTtcblxuICB0aGlzLmNvbnRpbnVlUmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2FuY2VsUmV0cnkgPSBmYWxzZTtcbiAgfTtcblxuICB0aGlzLmNvbnRpbnVlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gIH07XG5cbiAgdGhpcy5mYWlsdXJlQ291bnQgPSAwO1xuICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gIHRoaXMuaXNSZXNvbHZlZCA9IGZhbHNlO1xuICB0aGlzLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSA9IGZhbHNlO1xuICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAob3V0ZXJSZXNvbHZlLCBvdXRlclJlamVjdCkge1xuICAgIHByb21pc2VSZXNvbHZlID0gb3V0ZXJSZXNvbHZlO1xuICAgIHByb21pc2VSZWplY3QgPSBvdXRlclJlamVjdDtcbiAgfSk7XG5cbiAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKHZhbHVlKSB7XG4gICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICBfdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vblN1Y2Nlc3ModmFsdWUpO1xuICAgICAgY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICAgICAgcHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcmVqZWN0ID0gZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7XG4gICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICBfdGhpcy5pc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAgIGNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25FcnJvcih2YWx1ZSk7XG4gICAgICBjb250aW51ZUZuID09IG51bGwgPyB2b2lkIDAgOiBjb250aW51ZUZuKCk7XG4gICAgICBwcm9taXNlUmVqZWN0KHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBhdXNlID0gZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChjb250aW51ZVJlc29sdmUpIHtcbiAgICAgIGNvbnRpbnVlRm4gPSBjb250aW51ZVJlc29sdmU7XG4gICAgICBfdGhpcy5pc1BhdXNlZCA9IHRydWU7XG4gICAgICBjb25maWcub25QYXVzZSA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uUGF1c2UoKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnRpbnVlRm4gPSB1bmRlZmluZWQ7XG4gICAgICBfdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgY29uZmlnLm9uQ29udGludWUgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkNvbnRpbnVlKCk7XG4gICAgfSk7XG4gIH07IC8vIENyZWF0ZSBsb29wIGZ1bmN0aW9uXG5cblxuICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKCkge1xuICAgIC8vIERvIG5vdGhpbmcgaWYgYWxyZWFkeSByZXNvbHZlZFxuICAgIGlmIChfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb21pc2VPclZhbHVlOyAvLyBFeGVjdXRlIHF1ZXJ5XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBjb25maWcuZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJvbWlzZU9yVmFsdWUgPSBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSAvLyBDcmVhdGUgY2FsbGJhY2sgdG8gY2FuY2VsIHRoaXMgZmV0Y2hcblxuXG4gICAgY2FuY2VsRm4gPSBmdW5jdGlvbiBjYW5jZWxGbihjYW5jZWxPcHRpb25zKSB7XG4gICAgICBpZiAoIV90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBDYW5jZWxsZWRFcnJvcihjYW5jZWxPcHRpb25zKSk7XG4gICAgICAgIF90aGlzLmFib3J0ID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5hYm9ydCgpOyAvLyBDYW5jZWwgdHJhbnNwb3J0IGlmIHN1cHBvcnRlZFxuXG4gICAgICAgIGlmIChpc0NhbmNlbGFibGUocHJvbWlzZU9yVmFsdWUpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb21pc2VPclZhbHVlLmNhbmNlbCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKF91bnVzZWQpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9OyAvLyBDaGVjayBpZiB0aGUgdHJhbnNwb3J0IGxheWVyIHN1cHBvcnQgY2FuY2VsbGF0aW9uXG5cblxuICAgIF90aGlzLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSA9IGlzQ2FuY2VsYWJsZShwcm9taXNlT3JWYWx1ZSk7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHByb21pc2VPclZhbHVlKS50aGVuKHJlc29sdmUpLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgdmFyIF9jb25maWckcmV0cnksIF9jb25maWckcmV0cnlEZWxheTtcblxuICAgICAgLy8gU3RvcCBpZiB0aGUgZmV0Y2ggaXMgYWxyZWFkeSByZXNvbHZlZFxuICAgICAgaWYgKF90aGlzLmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBEbyB3ZSBuZWVkIHRvIHJldHJ5IHRoZSByZXF1ZXN0P1xuXG5cbiAgICAgIHZhciByZXRyeSA9IChfY29uZmlnJHJldHJ5ID0gY29uZmlnLnJldHJ5KSAhPSBudWxsID8gX2NvbmZpZyRyZXRyeSA6IDM7XG4gICAgICB2YXIgcmV0cnlEZWxheSA9IChfY29uZmlnJHJldHJ5RGVsYXkgPSBjb25maWcucmV0cnlEZWxheSkgIT0gbnVsbCA/IF9jb25maWckcmV0cnlEZWxheSA6IGRlZmF1bHRSZXRyeURlbGF5O1xuICAgICAgdmFyIGRlbGF5ID0gdHlwZW9mIHJldHJ5RGVsYXkgPT09ICdmdW5jdGlvbicgPyByZXRyeURlbGF5KF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpIDogcmV0cnlEZWxheTtcbiAgICAgIHZhciBzaG91bGRSZXRyeSA9IHJldHJ5ID09PSB0cnVlIHx8IHR5cGVvZiByZXRyeSA9PT0gJ251bWJlcicgJiYgX3RoaXMuZmFpbHVyZUNvdW50IDwgcmV0cnkgfHwgdHlwZW9mIHJldHJ5ID09PSAnZnVuY3Rpb24nICYmIHJldHJ5KF90aGlzLmZhaWx1cmVDb3VudCwgZXJyb3IpO1xuXG4gICAgICBpZiAoY2FuY2VsUmV0cnkgfHwgIXNob3VsZFJldHJ5KSB7XG4gICAgICAgIC8vIFdlIGFyZSBkb25lIGlmIHRoZSBxdWVyeSBkb2VzIG5vdCBuZWVkIHRvIGJlIHJldHJpZWRcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5mYWlsdXJlQ291bnQrKzsgLy8gTm90aWZ5IG9uIGZhaWxcblxuICAgICAgY29uZmlnLm9uRmFpbCA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uRmFpbChfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKTsgLy8gRGVsYXlcblxuICAgICAgc2xlZXAoZGVsYXkpIC8vIFBhdXNlIGlmIHRoZSBkb2N1bWVudCBpcyBub3QgdmlzaWJsZSBvciB3aGVuIHRoZSBkZXZpY2UgaXMgb2ZmbGluZVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSB8fCAhb25saW5lTWFuYWdlci5pc09ubGluZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY2FuY2VsUmV0cnkpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJ1bigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTsgLy8gU3RhcnQgbG9vcFxuXG5cbiAgcnVuKCk7XG59OyIsICJpbXBvcnQgeyBzY2hlZHVsZU1pY3JvdGFzayB9IGZyb20gJy4vdXRpbHMnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBOb3RpZnlNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTm90aWZ5TWFuYWdlcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy50cmFuc2FjdGlvbnMgPSAwO1xuXG4gICAgdGhpcy5ub3RpZnlGbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuXG4gICAgdGhpcy5iYXRjaE5vdGlmeUZuID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gIH1cblxuICB2YXIgX3Byb3RvID0gTm90aWZ5TWFuYWdlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJhdGNoID0gZnVuY3Rpb24gYmF0Y2goY2FsbGJhY2spIHtcbiAgICB2YXIgcmVzdWx0O1xuICAgIHRoaXMudHJhbnNhY3Rpb25zKys7XG5cbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbGJhY2soKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbnMtLTtcblxuICAgICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9ucykge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uc2NoZWR1bGUgPSBmdW5jdGlvbiBzY2hlZHVsZShjYWxsYmFjaykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbnMpIHtcbiAgICAgIHRoaXMucXVldWUucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMubm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBbGwgY2FsbHMgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24gd2lsbCBiZSBiYXRjaGVkLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5iYXRjaENhbGxzID0gZnVuY3Rpb24gYmF0Y2hDYWxscyhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWxsYmFjay5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBxdWV1ZSA9IHRoaXMucXVldWU7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuXG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMuYmF0Y2hOb3RpZnlGbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcXVldWUuZm9yRWFjaChmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIF90aGlzMy5ub3RpZnlGbihjYWxsYmFjayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIG5vdGlmeSBmdW5jdGlvbi5cbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBmb3IgZXhhbXBsZSB3cmFwIG5vdGlmaWNhdGlvbnMgd2l0aCBgUmVhY3QuYWN0YCB3aGlsZSBydW5uaW5nIHRlc3RzLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXROb3RpZnlGdW5jdGlvbiA9IGZ1bmN0aW9uIHNldE5vdGlmeUZ1bmN0aW9uKGZuKSB7XG4gICAgdGhpcy5ub3RpZnlGbiA9IGZuO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gc2V0IGEgY3VzdG9tIGZ1bmN0aW9uIHRvIGJhdGNoIG5vdGlmaWNhdGlvbnMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSB0aWNrLlxuICAgKiBCeSBkZWZhdWx0IFJlYWN0IFF1ZXJ5IHdpbGwgdXNlIHRoZSBiYXRjaCBmdW5jdGlvbiBwcm92aWRlZCBieSBSZWFjdERPTSBvciBSZWFjdCBOYXRpdmUuXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnNldEJhdGNoTm90aWZ5RnVuY3Rpb24gPSBmdW5jdGlvbiBzZXRCYXRjaE5vdGlmeUZ1bmN0aW9uKGZuKSB7XG4gICAgdGhpcy5iYXRjaE5vdGlmeUZuID0gZm47XG4gIH07XG5cbiAgcmV0dXJuIE5vdGlmeU1hbmFnZXI7XG59KCk7IC8vIFNJTkdMRVRPTlxuXG5leHBvcnQgdmFyIG5vdGlmeU1hbmFnZXIgPSBuZXcgTm90aWZ5TWFuYWdlcigpOyIsICIvLyBUWVBFU1xuLy8gRlVOQ1RJT05TXG52YXIgbG9nZ2VyID0gY29uc29sZTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2dnZXIoKSB7XG4gIHJldHVybiBsb2dnZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0TG9nZ2VyKG5ld0xvZ2dlcikge1xuICBsb2dnZXIgPSBuZXdMb2dnZXI7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2V0QWJvcnRDb250cm9sbGVyLCBmdW5jdGlvbmFsVXBkYXRlLCBpc1ZhbGlkVGltZW91dCwgbm9vcCwgcmVwbGFjZUVxdWFsRGVlcCwgdGltZVVudGlsU3RhbGUsIGVuc3VyZVF1ZXJ5S2V5QXJyYXkgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgUmV0cnllciwgaXNDYW5jZWxsZWRFcnJvciB9IGZyb20gJy4vcmV0cnllcic7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUXVlcnkoY29uZmlnKSB7XG4gICAgdGhpcy5hYm9ydFNpZ25hbENvbnN1bWVkID0gZmFsc2U7XG4gICAgdGhpcy5oYWRPYnNlcnZlcnMgPSBmYWxzZTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhjb25maWcub3B0aW9ucyk7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLmNhY2hlID0gY29uZmlnLmNhY2hlO1xuICAgIHRoaXMucXVlcnlLZXkgPSBjb25maWcucXVlcnlLZXk7XG4gICAgdGhpcy5xdWVyeUhhc2ggPSBjb25maWcucXVlcnlIYXNoO1xuICAgIHRoaXMuaW5pdGlhbFN0YXRlID0gY29uZmlnLnN0YXRlIHx8IHRoaXMuZ2V0RGVmYXVsdFN0YXRlKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMubWV0YSA9IGNvbmZpZy5tZXRhO1xuICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5LnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJGNhY2hlVGk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgdGhpcy5tZXRhID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5tZXRhOyAvLyBEZWZhdWx0IHRvIDUgbWludXRlcyBpZiBub3QgY2FjaGUgdGltZSBpcyBzZXRcblxuICAgIHRoaXMuY2FjaGVUaW1lID0gTWF0aC5tYXgodGhpcy5jYWNoZVRpbWUgfHwgMCwgKF90aGlzJG9wdGlvbnMkY2FjaGVUaSA9IHRoaXMub3B0aW9ucy5jYWNoZVRpbWUpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJGNhY2hlVGkgOiA1ICogNjAgKiAxMDAwKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNjaGVkdWxlR2MgPSBmdW5jdGlvbiBzY2hlZHVsZUdjKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG5cbiAgICBpZiAoaXNWYWxpZFRpbWVvdXQodGhpcy5jYWNoZVRpbWUpKSB7XG4gICAgICB0aGlzLmdjVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgfSwgdGhpcy5jYWNoZVRpbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXJHY1RpbWVvdXQgPSBmdW5jdGlvbiBjbGVhckdjVGltZW91dCgpIHtcbiAgICBpZiAodGhpcy5nY1RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmdjVGltZW91dCk7XG4gICAgICB0aGlzLmdjVGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9wdGlvbmFsUmVtb3ZlID0gZnVuY3Rpb24gb3B0aW9uYWxSZW1vdmUoKSB7XG4gICAgaWYgKCF0aGlzLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmlzRmV0Y2hpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFkT2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2V0RGF0YSA9IGZ1bmN0aW9uIHNldERhdGEodXBkYXRlciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJGlzRGF0YUUsIF90aGlzJG9wdGlvbnM7XG5cbiAgICB2YXIgcHJldkRhdGEgPSB0aGlzLnN0YXRlLmRhdGE7IC8vIEdldCB0aGUgbmV3IGRhdGFcblxuICAgIHZhciBkYXRhID0gZnVuY3Rpb25hbFVwZGF0ZSh1cGRhdGVyLCBwcmV2RGF0YSk7IC8vIFVzZSBwcmV2IGRhdGEgaWYgYW4gaXNEYXRhRXF1YWwgZnVuY3Rpb24gaXMgZGVmaW5lZCBhbmQgcmV0dXJucyBgdHJ1ZWBcblxuICAgIGlmICgoX3RoaXMkb3B0aW9ucyRpc0RhdGFFID0gKF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMpLmlzRGF0YUVxdWFsKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRpc0RhdGFFLmNhbGwoX3RoaXMkb3B0aW9ucywgcHJldkRhdGEsIGRhdGEpKSB7XG4gICAgICBkYXRhID0gcHJldkRhdGE7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc3RydWN0dXJhbFNoYXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICAvLyBTdHJ1Y3R1cmFsbHkgc2hhcmUgZGF0YSBiZXR3ZWVuIHByZXYgYW5kIG5ldyBkYXRhIGlmIG5lZWRlZFxuICAgICAgZGF0YSA9IHJlcGxhY2VFcXVhbERlZXAocHJldkRhdGEsIGRhdGEpO1xuICAgIH0gLy8gU2V0IGRhdGEgYW5kIG1hcmsgaXQgYXMgY2FjaGVkXG5cblxuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudXBkYXRlZEF0XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgX3Byb3RvLnNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUsIHNldFN0YXRlT3B0aW9ucykge1xuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ3NldFN0YXRlJyxcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldFN0YXRlT3B0aW9uczogc2V0U3RhdGVPcHRpb25zXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXI7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcbiAgICAoX3RoaXMkcmV0cnllciA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIuY2FuY2VsKG9wdGlvbnMpO1xuICAgIHJldHVybiBwcm9taXNlID8gcHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcbiAgICB0aGlzLmNhbmNlbCh7XG4gICAgICBzaWxlbnQ6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuaW5pdGlhbFN0YXRlKTtcbiAgfTtcblxuICBfcHJvdG8uaXNBY3RpdmUgPSBmdW5jdGlvbiBpc0FjdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMuc29tZShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlci5vcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc0ZldGNoaW5nID0gZnVuY3Rpb24gaXNGZXRjaGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ZldGNoaW5nO1xuICB9O1xuXG4gIF9wcm90by5pc1N0YWxlID0gZnVuY3Rpb24gaXNTdGFsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc0ludmFsaWRhdGVkIHx8ICF0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgfHwgdGhpcy5vYnNlcnZlcnMuc29tZShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBvYnNlcnZlci5nZXRDdXJyZW50UmVzdWx0KCkuaXNTdGFsZTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNTdGFsZUJ5VGltZSA9IGZ1bmN0aW9uIGlzU3RhbGVCeVRpbWUoc3RhbGVUaW1lKSB7XG4gICAgaWYgKHN0YWxlVGltZSA9PT0gdm9pZCAwKSB7XG4gICAgICBzdGFsZVRpbWUgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgIXRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCB8fCAhdGltZVVudGlsU3RhbGUodGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0LCBzdGFsZVRpbWUpO1xuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjI7XG5cbiAgICB2YXIgb2JzZXJ2ZXIgPSB0aGlzLm9ic2VydmVycy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geC5zaG91bGRGZXRjaE9uV2luZG93Rm9jdXMoKTtcbiAgICB9KTtcblxuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIucmVmZXRjaCgpO1xuICAgIH0gLy8gQ29udGludWUgZmV0Y2ggaWYgY3VycmVudGx5IHBhdXNlZFxuXG5cbiAgICAoX3RoaXMkcmV0cnllcjIgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyMi5jb250aW51ZSgpO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyMztcblxuICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnNob3VsZEZldGNoT25SZWNvbm5lY3QoKTtcbiAgICB9KTtcblxuICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgb2JzZXJ2ZXIucmVmZXRjaCgpO1xuICAgIH0gLy8gQ29udGludWUgZmV0Y2ggaWYgY3VycmVudGx5IHBhdXNlZFxuXG5cbiAgICAoX3RoaXMkcmV0cnllcjMgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyMy5jb250aW51ZSgpO1xuICB9O1xuXG4gIF9wcm90by5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpID09PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgICB0aGlzLmhhZE9ic2VydmVycyA9IHRydWU7IC8vIFN0b3AgdGhlIHF1ZXJ5IGZyb20gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWRcblxuICAgICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgICAgdGhpcy5jYWNoZS5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnb2JzZXJ2ZXJBZGRlZCcsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLFxuICAgICAgICBvYnNlcnZlcjogb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSAhPT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBvYnNlcnZlcjtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAvLyBJZiB0aGUgdHJhbnNwb3J0IGxheWVyIGRvZXMgbm90IHN1cHBvcnQgY2FuY2VsbGF0aW9uXG4gICAgICAgIC8vIHdlJ2xsIGxldCB0aGUgcXVlcnkgY29udGludWUgc28gdGhlIHJlc3VsdCBjYW4gYmUgY2FjaGVkXG4gICAgICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXRyeWVyLmlzVHJhbnNwb3J0Q2FuY2VsYWJsZSB8fCB0aGlzLmFib3J0U2lnbmFsQ29uc3VtZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmV0cnllci5jYW5jZWwoe1xuICAgICAgICAgICAgICByZXZlcnQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsUmV0cnkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWNoZVRpbWUpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNhY2hlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdvYnNlcnZlclJlbW92ZWQnLFxuICAgICAgICBxdWVyeTogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZXI6IG9ic2VydmVyXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE9ic2VydmVyc0NvdW50ID0gZnVuY3Rpb24gZ2V0T2JzZXJ2ZXJzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXJzLmxlbmd0aDtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZSA9IGZ1bmN0aW9uIGludmFsaWRhdGUoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnaW52YWxpZGF0ZSdcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZmV0Y2ggPSBmdW5jdGlvbiBmZXRjaChvcHRpb25zLCBmZXRjaE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcyxcbiAgICAgICAgX3RoaXMkb3B0aW9ucyRiZWhhdmlvLFxuICAgICAgICBfY29udGV4dCRmZXRjaE9wdGlvbnMsXG4gICAgICAgIF9hYm9ydENvbnRyb2xsZXIkYWJvcjtcblxuICAgIGlmICh0aGlzLnN0YXRlLmlzRmV0Y2hpbmcpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQgJiYgKGZldGNoT3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hPcHRpb25zLmNhbmNlbFJlZmV0Y2gpKSB7XG4gICAgICAgIC8vIFNpbGVudGx5IGNhbmNlbCBjdXJyZW50IGZldGNoIGlmIHRoZSB1c2VyIHdhbnRzIHRvIGNhbmNlbCByZWZldGNoZXNcbiAgICAgICAgdGhpcy5jYW5jZWwoe1xuICAgICAgICAgIHNpbGVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9taXNlKSB7XG4gICAgICAgIHZhciBfdGhpcyRyZXRyeWVyNDtcblxuICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCByZXRyaWVzIHRoYXQgd2VyZSBwb3RlbnRpYWxseSBjYW5jZWxsZWQgZHVlIHRvIHVubW91bnRzIGNhbiBjb250aW51ZVxuICAgICAgICAoX3RoaXMkcmV0cnllcjQgPSB0aGlzLnJldHJ5ZXIpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRyZXRyeWVyNC5jb250aW51ZVJldHJ5KCk7IC8vIFJldHVybiBjdXJyZW50IHByb21pc2UgaWYgd2UgYXJlIGFscmVhZHkgZmV0Y2hpbmdcblxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgICAgfVxuICAgIH0gLy8gVXBkYXRlIGNvbmZpZyBpZiBwYXNzZWQsIG90aGVyd2lzZSB0aGUgY29uZmlnIGZyb20gdGhlIGxhc3QgZXhlY3V0aW9uIGlzIHVzZWRcblxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9IC8vIFVzZSB0aGUgb3B0aW9ucyBmcm9tIHRoZSBmaXJzdCBvYnNlcnZlciB3aXRoIGEgcXVlcnkgZnVuY3Rpb24gaWYgbm8gZnVuY3Rpb24gaXMgZm91bmQuXG4gICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIHF1ZXJ5IGlzIGh5ZHJhdGVkIG9yIGNyZWF0ZWQgd2l0aCBzZXRRdWVyeURhdGEuXG5cblxuICAgIGlmICghdGhpcy5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHgub3B0aW9ucy5xdWVyeUZuO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICB0aGlzLnNldE9wdGlvbnMob2JzZXJ2ZXIub3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHF1ZXJ5S2V5ID0gZW5zdXJlUXVlcnlLZXlBcnJheSh0aGlzLnF1ZXJ5S2V5KTtcbiAgICB2YXIgYWJvcnRDb250cm9sbGVyID0gZ2V0QWJvcnRDb250cm9sbGVyKCk7IC8vIENyZWF0ZSBxdWVyeSBmdW5jdGlvbiBjb250ZXh0XG5cbiAgICB2YXIgcXVlcnlGbkNvbnRleHQgPSB7XG4gICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICBwYWdlUGFyYW06IHVuZGVmaW5lZCxcbiAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5Rm5Db250ZXh0LCAnc2lnbmFsJywge1xuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAgICAgX3RoaXMyLmFib3J0U2lnbmFsQ29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTsgLy8gQ3JlYXRlIGZldGNoIGZ1bmN0aW9uXG5cbiAgICB2YXIgZmV0Y2hGbiA9IGZ1bmN0aW9uIGZldGNoRm4oKSB7XG4gICAgICBpZiAoIV90aGlzMi5vcHRpb25zLnF1ZXJ5Rm4pIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHF1ZXJ5Rm4nKTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLmFib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5xdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICB9OyAvLyBUcmlnZ2VyIGJlaGF2aW9yIGhvb2tcblxuXG4gICAgdmFyIGNvbnRleHQgPSB7XG4gICAgICBmZXRjaE9wdGlvbnM6IGZldGNoT3B0aW9ucyxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgZmV0Y2hGbjogZmV0Y2hGbixcbiAgICAgIG1ldGE6IHRoaXMubWV0YVxuICAgIH07XG5cbiAgICBpZiAoKF90aGlzJG9wdGlvbnMkYmVoYXZpbyA9IHRoaXMub3B0aW9ucy5iZWhhdmlvcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkYmVoYXZpby5vbkZldGNoKSB7XG4gICAgICB2YXIgX3RoaXMkb3B0aW9ucyRiZWhhdmlvMjtcblxuICAgICAgKF90aGlzJG9wdGlvbnMkYmVoYXZpbzIgPSB0aGlzLm9wdGlvbnMuYmVoYXZpb3IpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGJlaGF2aW8yLm9uRmV0Y2goY29udGV4dCk7XG4gICAgfSAvLyBTdG9yZSBzdGF0ZSBpbiBjYXNlIHRoZSBjdXJyZW50IGZldGNoIG5lZWRzIHRvIGJlIHJldmVydGVkXG5cblxuICAgIHRoaXMucmV2ZXJ0U3RhdGUgPSB0aGlzLnN0YXRlOyAvLyBTZXQgdG8gZmV0Y2hpbmcgc3RhdGUgaWYgbm90IGFscmVhZHkgaW4gaXRcblxuICAgIGlmICghdGhpcy5zdGF0ZS5pc0ZldGNoaW5nIHx8IHRoaXMuc3RhdGUuZmV0Y2hNZXRhICE9PSAoKF9jb250ZXh0JGZldGNoT3B0aW9ucyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zLm1ldGEpKSB7XG4gICAgICB2YXIgX2NvbnRleHQkZmV0Y2hPcHRpb25zMjtcblxuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdmZXRjaCcsXG4gICAgICAgIG1ldGE6IChfY29udGV4dCRmZXRjaE9wdGlvbnMyID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMyLm1ldGFcbiAgICAgIH0pO1xuICAgIH0gLy8gVHJ5IHRvIGZldGNoIHRoZSBkYXRhXG5cblxuICAgIHRoaXMucmV0cnllciA9IG5ldyBSZXRyeWVyKHtcbiAgICAgIGZuOiBjb250ZXh0LmZldGNoRm4sXG4gICAgICBhYm9ydDogYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiAoX2Fib3J0Q29udHJvbGxlciRhYm9yID0gYWJvcnRDb250cm9sbGVyLmFib3J0KSA9PSBudWxsID8gdm9pZCAwIDogX2Fib3J0Q29udHJvbGxlciRhYm9yLmJpbmQoYWJvcnRDb250cm9sbGVyKSxcbiAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gb25TdWNjZXNzKGRhdGEpIHtcbiAgICAgICAgX3RoaXMyLnNldERhdGEoZGF0YSk7IC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuXG5cbiAgICAgICAgX3RoaXMyLmNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzMi5jYWNoZS5jb25maWcub25TdWNjZXNzKGRhdGEsIF90aGlzMik7IC8vIFJlbW92ZSBxdWVyeSBhZnRlciBmZXRjaGluZyBpZiBjYWNoZSB0aW1lIGlzIDBcblxuICAgICAgICBpZiAoX3RoaXMyLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgICAgIF90aGlzMi5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25FcnJvcjogZnVuY3Rpb24gb25FcnJvcihlcnJvcikge1xuICAgICAgICAvLyBPcHRpbWlzdGljYWxseSB1cGRhdGUgc3RhdGUgaWYgbmVlZGVkXG4gICAgICAgIGlmICghKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnNpbGVudCkpIHtcbiAgICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0NhbmNlbGxlZEVycm9yKGVycm9yKSkge1xuICAgICAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgICAgIF90aGlzMi5jYWNoZS5jb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMyLmNhY2hlLmNvbmZpZy5vbkVycm9yKGVycm9yLCBfdGhpczIpOyAvLyBMb2cgZXJyb3JcblxuICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKGVycm9yKTtcbiAgICAgICAgfSAvLyBSZW1vdmUgcXVlcnkgYWZ0ZXIgZmV0Y2hpbmcgaWYgY2FjaGUgdGltZSBpcyAwXG5cblxuICAgICAgICBpZiAoX3RoaXMyLmNhY2hlVGltZSA9PT0gMCkge1xuICAgICAgICAgIF90aGlzMi5vcHRpb25hbFJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25GYWlsOiBmdW5jdGlvbiBvbkZhaWwoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25QYXVzZTogZnVuY3Rpb24gb25QYXVzZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAncGF1c2UnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6IGZ1bmN0aW9uIG9uQ29udGludWUoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2NvbnRpbnVlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogY29udGV4dC5vcHRpb25zLnJldHJ5LFxuICAgICAgcmV0cnlEZWxheTogY29udGV4dC5vcHRpb25zLnJldHJ5RGVsYXlcbiAgICB9KTtcbiAgICB0aGlzLnByb21pc2UgPSB0aGlzLnJldHJ5ZXIucHJvbWlzZTtcbiAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucmVkdWNlcih0aGlzLnN0YXRlLCBhY3Rpb24pO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vblF1ZXJ5VXBkYXRlKGFjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHF1ZXJ5OiBfdGhpczMsXG4gICAgICAgIHR5cGU6ICdxdWVyeVVwZGF0ZWQnLFxuICAgICAgICBhY3Rpb246IGFjdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldERlZmF1bHRTdGF0ZSA9IGZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZShvcHRpb25zKSB7XG4gICAgdmFyIGRhdGEgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuaW5pdGlhbERhdGEoKSA6IG9wdGlvbnMuaW5pdGlhbERhdGE7XG4gICAgdmFyIGhhc0luaXRpYWxEYXRhID0gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGEgIT09ICd1bmRlZmluZWQnO1xuICAgIHZhciBpbml0aWFsRGF0YVVwZGF0ZWRBdCA9IGhhc0luaXRpYWxEYXRhID8gdHlwZW9mIG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0KCkgOiBvcHRpb25zLmluaXRpYWxEYXRhVXBkYXRlZEF0IDogMDtcbiAgICB2YXIgaGFzRGF0YSA9IHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJztcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIGRhdGFVcGRhdGVDb3VudDogMCxcbiAgICAgIGRhdGFVcGRhdGVkQXQ6IGhhc0RhdGEgPyBpbml0aWFsRGF0YVVwZGF0ZWRBdCAhPSBudWxsID8gaW5pdGlhbERhdGFVcGRhdGVkQXQgOiBEYXRlLm5vdygpIDogMCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgZXJyb3JVcGRhdGVDb3VudDogMCxcbiAgICAgIGVycm9yVXBkYXRlZEF0OiAwLFxuICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICBmZXRjaE1ldGE6IG51bGwsXG4gICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgc3RhdHVzOiBoYXNEYXRhID8gJ3N1Y2Nlc3MnIDogJ2lkbGUnXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8ucmVkdWNlciA9IGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgIHZhciBfYWN0aW9uJG1ldGEsIF9hY3Rpb24kZGF0YVVwZGF0ZWRBdDtcblxuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQgKyAxXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdwYXVzZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc1BhdXNlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnY29udGludWUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdmZXRjaCc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgICAgICBmZXRjaE1ldGE6IChfYWN0aW9uJG1ldGEgPSBhY3Rpb24ubWV0YSkgIT0gbnVsbCA/IF9hY3Rpb24kbWV0YSA6IG51bGwsXG4gICAgICAgICAgaXNGZXRjaGluZzogdHJ1ZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgfSwgIXN0YXRlLmRhdGFVcGRhdGVkQXQgJiYge1xuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIHN0YXR1czogJ2xvYWRpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICAgIGRhdGFVcGRhdGVDb3VudDogc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICBkYXRhVXBkYXRlZEF0OiAoX2FjdGlvbiRkYXRhVXBkYXRlZEF0ID0gYWN0aW9uLmRhdGFVcGRhdGVkQXQpICE9IG51bGwgPyBfYWN0aW9uJGRhdGFVcGRhdGVkQXQgOiBEYXRlLm5vdygpLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJ1xuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICB2YXIgZXJyb3IgPSBhY3Rpb24uZXJyb3I7XG5cbiAgICAgICAgaWYgKGlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpICYmIGVycm9yLnJldmVydCAmJiB0aGlzLnJldmVydFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLnJldmVydFN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgZXJyb3JVcGRhdGVDb3VudDogc3RhdGUuZXJyb3JVcGRhdGVDb3VudCArIDEsXG4gICAgICAgICAgZXJyb3JVcGRhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IHN0YXRlLmZldGNoRmFpbHVyZUNvdW50ICsgMSxcbiAgICAgICAgICBpc0ZldGNoaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiAnZXJyb3InXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdpbnZhbGlkYXRlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzSW52YWxpZGF0ZWQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3NldFN0YXRlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgYWN0aW9uLnN0YXRlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUXVlcnk7XG59KCk7IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgaGFzaFF1ZXJ5S2V5QnlPcHRpb25zLCBtYXRjaFF1ZXJ5LCBwYXJzZUZpbHRlckFyZ3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi9xdWVyeSc7XG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi9ub3RpZnlNYW5hZ2VyJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbi8vIENMQVNTXG5leHBvcnQgdmFyIFF1ZXJ5Q2FjaGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoUXVlcnlDYWNoZSwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gUXVlcnlDYWNoZShjb25maWcpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIF90aGlzLmNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICBfdGhpcy5xdWVyaWVzID0gW107XG4gICAgX3RoaXMucXVlcmllc01hcCA9IHt9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBRdWVyeUNhY2hlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGQgPSBmdW5jdGlvbiBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgdmFyIF9vcHRpb25zJHF1ZXJ5SGFzaDtcblxuICAgIHZhciBxdWVyeUtleSA9IG9wdGlvbnMucXVlcnlLZXk7XG4gICAgdmFyIHF1ZXJ5SGFzaCA9IChfb3B0aW9ucyRxdWVyeUhhc2ggPSBvcHRpb25zLnF1ZXJ5SGFzaCkgIT0gbnVsbCA/IF9vcHRpb25zJHF1ZXJ5SGFzaCA6IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucyk7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5nZXQocXVlcnlIYXNoKTtcblxuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHF1ZXJ5ID0gbmV3IFF1ZXJ5KHtcbiAgICAgICAgY2FjaGU6IHRoaXMsXG4gICAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgICAgcXVlcnlIYXNoOiBxdWVyeUhhc2gsXG4gICAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpLFxuICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBjbGllbnQuZ2V0UXVlcnlEZWZhdWx0cyhxdWVyeUtleSksXG4gICAgICAgIG1ldGE6IG9wdGlvbnMubWV0YVxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZChxdWVyeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9O1xuXG4gIF9wcm90by5hZGQgPSBmdW5jdGlvbiBhZGQocXVlcnkpIHtcbiAgICBpZiAoIXRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdKSB7XG4gICAgICB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXSA9IHF1ZXJ5O1xuICAgICAgdGhpcy5xdWVyaWVzLnB1c2gocXVlcnkpO1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAncXVlcnlBZGRlZCcsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUocXVlcnkpIHtcbiAgICB2YXIgcXVlcnlJbk1hcCA9IHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdO1xuXG4gICAgaWYgKHF1ZXJ5SW5NYXApIHtcbiAgICAgIHF1ZXJ5LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMucXVlcmllcyA9IHRoaXMucXVlcmllcy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IHF1ZXJ5O1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChxdWVyeUluTWFwID09PSBxdWVyeSkge1xuICAgICAgICBkZWxldGUgdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF07XG4gICAgICB9XG5cbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5UmVtb3ZlZCcsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBfdGhpczIucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXQgPSBmdW5jdGlvbiBnZXQocXVlcnlIYXNoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllc01hcFtxdWVyeUhhc2hdO1xuICB9O1xuXG4gIF9wcm90by5nZXRBbGwgPSBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllcztcbiAgfTtcblxuICBfcHJvdG8uZmluZCA9IGZ1bmN0aW9uIGZpbmQoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnc1swXTtcblxuICAgIGlmICh0eXBlb2YgZmlsdGVycy5leGFjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbHRlcnMuZXhhY3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1ZXJpZXMuZmluZChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHJldHVybiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmluZEFsbCA9IGZ1bmN0aW9uIGZpbmRBbGwoYXJnMSwgYXJnMikge1xuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzMiA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3MyWzBdO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA+IDAgPyB0aGlzLnF1ZXJpZXMuZmlsdGVyKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgcmV0dXJuIG1hdGNoUXVlcnkoZmlsdGVycywgcXVlcnkpO1xuICAgIH0pIDogdGhpcy5xdWVyaWVzO1xuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoZXZlbnQpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcihldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNC5xdWVyaWVzLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Lm9uRm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5vbk9ubGluZSA9IGZ1bmN0aW9uIG9uT25saW5lKCkge1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5vbk9ubGluZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2FjaGU7XG59KFN1YnNjcmliYWJsZSk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBSZXRyeWVyIH0gZnJvbSAnLi9yZXRyeWVyJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL3V0aWxzJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTXV0YXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNdXRhdGlvbihjb25maWcpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgY29uZmlnLmRlZmF1bHRPcHRpb25zLCBjb25maWcub3B0aW9ucyk7XG4gICAgdGhpcy5tdXRhdGlvbklkID0gY29uZmlnLm11dGF0aW9uSWQ7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGU7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLnN0YXRlID0gY29uZmlnLnN0YXRlIHx8IGdldERlZmF1bHRTdGF0ZSgpO1xuICAgIHRoaXMubWV0YSA9IGNvbmZpZy5tZXRhO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE11dGF0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xuICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ3NldFN0YXRlJyxcbiAgICAgIHN0YXRlOiBzdGF0ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5hZGRPYnNlcnZlciA9IGZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpID09PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICE9PSBvYnNlcnZlcjtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgIHRoaXMucmV0cnllci5jYW5jZWwoKTtcbiAgICAgIHJldHVybiB0aGlzLnJldHJ5ZXIucHJvbWlzZS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcblxuICBfcHJvdG8uY29udGludWUgPSBmdW5jdGlvbiBfY29udGludWUoKSB7XG4gICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgdGhpcy5yZXRyeWVyLmNvbnRpbnVlKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSgpO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlID0gZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGRhdGE7XG4gICAgdmFyIHJlc3RvcmVkID0gdGhpcy5zdGF0ZS5zdGF0dXMgPT09ICdsb2FkaW5nJztcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgaWYgKCFyZXN0b3JlZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgdmFyaWFibGVzOiB0aGlzLm9wdGlvbnMudmFyaWFibGVzXG4gICAgICB9KTtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25NdXRhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlKF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uTXV0YXRlID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uTXV0YXRlKF90aGlzLnN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ICE9PSBfdGhpcy5zdGF0ZS5jb250ZXh0KSB7XG4gICAgICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogJ2xvYWRpbmcnLFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgICAgIHZhcmlhYmxlczogX3RoaXMuc3RhdGUudmFyaWFibGVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLmV4ZWN1dGVNdXRhdGlvbigpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgZGF0YSA9IHJlc3VsdDsgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG5cbiAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25TdWNjZXNzKGRhdGEsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCwgX3RoaXMpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU3VjY2VzcyhkYXRhLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZChkYXRhLCBudWxsLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMubXV0YXRpb25DYWNoZS5jb25maWcub25FcnJvcihlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0LCBfdGhpcyk7IC8vIExvZyBlcnJvclxuXG4gICAgICBnZXRMb2dnZXIoKS5lcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25FcnJvcihlcnJvciwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm9wdGlvbnMub25TZXR0bGVkKHVuZGVmaW5lZCwgZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVNdXRhdGlvbiA9IGZ1bmN0aW9uIGV4ZWN1dGVNdXRhdGlvbigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcyxcbiAgICAgICAgX3RoaXMkb3B0aW9ucyRyZXRyeTtcblxuICAgIHRoaXMucmV0cnllciA9IG5ldyBSZXRyeWVyKHtcbiAgICAgIGZuOiBmdW5jdGlvbiBmbigpIHtcbiAgICAgICAgaWYgKCFfdGhpczIub3B0aW9ucy5tdXRhdGlvbkZuKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdObyBtdXRhdGlvbkZuIGZvdW5kJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMubXV0YXRpb25GbihfdGhpczIuc3RhdGUudmFyaWFibGVzKTtcbiAgICAgIH0sXG4gICAgICBvbkZhaWw6IGZ1bmN0aW9uIG9uRmFpbCgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiBmdW5jdGlvbiBvblBhdXNlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdwYXVzZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogZnVuY3Rpb24gb25Db250aW51ZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnY29udGludWUnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJldHJ5OiAoX3RoaXMkb3B0aW9ucyRyZXRyeSA9IHRoaXMub3B0aW9ucy5yZXRyeSkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkcmV0cnkgOiAwLFxuICAgICAgcmV0cnlEZWxheTogdGhpcy5vcHRpb25zLnJldHJ5RGVsYXlcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnN0YXRlID0gcmVkdWNlcih0aGlzLnN0YXRlLCBhY3Rpb24pO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICBvYnNlcnZlci5vbk11dGF0aW9uVXBkYXRlKGFjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMzLm11dGF0aW9uQ2FjaGUubm90aWZ5KF90aGlzMyk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE11dGF0aW9uO1xufSgpO1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRTdGF0ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0OiB1bmRlZmluZWQsXG4gICAgZGF0YTogdW5kZWZpbmVkLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGZhaWx1cmVDb3VudDogMCxcbiAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgc3RhdHVzOiAnaWRsZScsXG4gICAgdmFyaWFibGVzOiB1bmRlZmluZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZhaWx1cmVDb3VudCArIDFcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAncGF1c2UnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc1BhdXNlZDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdjb250aW51ZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdsb2FkaW5nJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgY29udGV4dDogYWN0aW9uLmNvbnRleHQsXG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhdHVzOiAnbG9hZGluZycsXG4gICAgICAgIHZhcmlhYmxlczogYWN0aW9uLnZhcmlhYmxlc1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgaXNQYXVzZWQ6IGZhbHNlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogYWN0aW9uLmVycm9yLFxuICAgICAgICBmYWlsdXJlQ291bnQ6IHN0YXRlLmZhaWx1cmVDb3VudCArIDEsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3NldFN0YXRlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIGFjdGlvbi5zdGF0ZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59IiwgImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBNdXRhdGlvbiB9IGZyb20gJy4vbXV0YXRpb24nO1xuaW1wb3J0IHsgbWF0Y2hNdXRhdGlvbiwgbm9vcCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaWJhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmFibGUnOyAvLyBUWVBFU1xuXG4vLyBDTEFTU1xuZXhwb3J0IHZhciBNdXRhdGlvbkNhY2hlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKE11dGF0aW9uQ2FjaGUsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIE11dGF0aW9uQ2FjaGUoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG4gICAgX3RoaXMubXV0YXRpb25zID0gW107XG4gICAgX3RoaXMubXV0YXRpb25JZCA9IDA7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE11dGF0aW9uQ2FjaGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5idWlsZCA9IGZ1bmN0aW9uIGJ1aWxkKGNsaWVudCwgb3B0aW9ucywgc3RhdGUpIHtcbiAgICB2YXIgbXV0YXRpb24gPSBuZXcgTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb25DYWNoZTogdGhpcyxcbiAgICAgIG11dGF0aW9uSWQ6ICsrdGhpcy5tdXRhdGlvbklkLFxuICAgICAgb3B0aW9uczogY2xpZW50LmRlZmF1bHRNdXRhdGlvbk9wdGlvbnMob3B0aW9ucyksXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBkZWZhdWx0T3B0aW9uczogb3B0aW9ucy5tdXRhdGlvbktleSA/IGNsaWVudC5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMubXV0YXRpb25LZXkpIDogdW5kZWZpbmVkLFxuICAgICAgbWV0YTogb3B0aW9ucy5tZXRhXG4gICAgfSk7XG4gICAgdGhpcy5hZGQobXV0YXRpb24pO1xuICAgIHJldHVybiBtdXRhdGlvbjtcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKG11dGF0aW9uKSB7XG4gICAgdGhpcy5tdXRhdGlvbnMucHVzaChtdXRhdGlvbik7XG4gICAgdGhpcy5ub3RpZnkobXV0YXRpb24pO1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUobXV0YXRpb24pIHtcbiAgICB0aGlzLm11dGF0aW9ucyA9IHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHggIT09IG11dGF0aW9uO1xuICAgIH0pO1xuICAgIG11dGF0aW9uLmNhbmNlbCgpO1xuICAgIHRoaXMubm90aWZ5KG11dGF0aW9uKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLm11dGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICBfdGhpczIucmVtb3ZlKG11dGF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5nZXRBbGwgPSBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zO1xuICB9O1xuXG4gIF9wcm90by5maW5kID0gZnVuY3Rpb24gZmluZChmaWx0ZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBmaWx0ZXJzLmV4YWN0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZmlsdGVycy5leGFjdCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zLmZpbmQoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICByZXR1cm4gbWF0Y2hNdXRhdGlvbihmaWx0ZXJzLCBtdXRhdGlvbik7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmRBbGwgPSBmdW5jdGlvbiBmaW5kQWxsKGZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkobXV0YXRpb24pIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcihtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25Gb2N1cyA9IGZ1bmN0aW9uIG9uRm9jdXMoKSB7XG4gICAgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB0aGlzLnJlc3VtZVBhdXNlZE11dGF0aW9ucygpO1xuICB9O1xuXG4gIF9wcm90by5yZXN1bWVQYXVzZWRNdXRhdGlvbnMgPSBmdW5jdGlvbiByZXN1bWVQYXVzZWRNdXRhdGlvbnMoKSB7XG4gICAgdmFyIHBhdXNlZE11dGF0aW9ucyA9IHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc3RhdGUuaXNQYXVzZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHBhdXNlZE11dGF0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHByb21pc2UsIG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBtdXRhdGlvbi5jb250aW51ZSgpLmNhdGNoKG5vb3ApO1xuICAgICAgICB9KTtcbiAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTXV0YXRpb25DYWNoZTtcbn0oU3Vic2NyaWJhYmxlKTsiLCAiaW1wb3J0IHsgaXNDYW5jZWxhYmxlIH0gZnJvbSAnLi9yZXRyeWVyJztcbmltcG9ydCB7IGdldEFib3J0Q29udHJvbGxlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGluZmluaXRlUXVlcnlCZWhhdmlvcigpIHtcbiAgcmV0dXJuIHtcbiAgICBvbkZldGNoOiBmdW5jdGlvbiBvbkZldGNoKGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuZmV0Y2hGbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9jb250ZXh0JGZldGNoT3B0aW9ucywgX2NvbnRleHQkZmV0Y2hPcHRpb25zMiwgX2NvbnRleHQkZmV0Y2hPcHRpb25zMywgX2NvbnRleHQkZmV0Y2hPcHRpb25zNCwgX2NvbnRleHQkc3RhdGUkZGF0YSwgX2NvbnRleHQkc3RhdGUkZGF0YTI7XG5cbiAgICAgICAgdmFyIHJlZmV0Y2hQYWdlID0gKF9jb250ZXh0JGZldGNoT3B0aW9ucyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF9jb250ZXh0JGZldGNoT3B0aW9uczIgPSBfY29udGV4dCRmZXRjaE9wdGlvbnMubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczIucmVmZXRjaFBhZ2U7XG4gICAgICAgIHZhciBmZXRjaE1vcmUgPSAoX2NvbnRleHQkZmV0Y2hPcHRpb25zMyA9IGNvbnRleHQuZmV0Y2hPcHRpb25zKSA9PSBudWxsID8gdm9pZCAwIDogKF9jb250ZXh0JGZldGNoT3B0aW9uczQgPSBfY29udGV4dCRmZXRjaE9wdGlvbnMzLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnM0LmZldGNoTW9yZTtcbiAgICAgICAgdmFyIHBhZ2VQYXJhbSA9IGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLnBhZ2VQYXJhbTtcbiAgICAgICAgdmFyIGlzRmV0Y2hpbmdOZXh0UGFnZSA9IChmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5kaXJlY3Rpb24pID09PSAnZm9yd2FyZCc7XG4gICAgICAgIHZhciBpc0ZldGNoaW5nUHJldmlvdXNQYWdlID0gKGZldGNoTW9yZSA9PSBudWxsID8gdm9pZCAwIDogZmV0Y2hNb3JlLmRpcmVjdGlvbikgPT09ICdiYWNrd2FyZCc7XG4gICAgICAgIHZhciBvbGRQYWdlcyA9ICgoX2NvbnRleHQkc3RhdGUkZGF0YSA9IGNvbnRleHQuc3RhdGUuZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JHN0YXRlJGRhdGEucGFnZXMpIHx8IFtdO1xuICAgICAgICB2YXIgb2xkUGFnZVBhcmFtcyA9ICgoX2NvbnRleHQkc3RhdGUkZGF0YTIgPSBjb250ZXh0LnN0YXRlLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRzdGF0ZSRkYXRhMi5wYWdlUGFyYW1zKSB8fCBbXTtcbiAgICAgICAgdmFyIGFib3J0Q29udHJvbGxlciA9IGdldEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICB2YXIgYWJvcnRTaWduYWwgPSBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgIHZhciBuZXdQYWdlUGFyYW1zID0gb2xkUGFnZVBhcmFtcztcbiAgICAgICAgdmFyIGNhbmNlbGxlZCA9IGZhbHNlOyAvLyBHZXQgcXVlcnkgZnVuY3Rpb25cblxuICAgICAgICB2YXIgcXVlcnlGbiA9IGNvbnRleHQub3B0aW9ucy5xdWVyeUZuIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcXVlcnlGbicpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBidWlsZE5ld1BhZ2VzID0gZnVuY3Rpb24gYnVpbGROZXdQYWdlcyhwYWdlcywgcGFyYW0sIHBhZ2UsIHByZXZpb3VzKSB7XG4gICAgICAgICAgbmV3UGFnZVBhcmFtcyA9IHByZXZpb3VzID8gW3BhcmFtXS5jb25jYXQobmV3UGFnZVBhcmFtcykgOiBbXS5jb25jYXQobmV3UGFnZVBhcmFtcywgW3BhcmFtXSk7XG4gICAgICAgICAgcmV0dXJuIHByZXZpb3VzID8gW3BhZ2VdLmNvbmNhdChwYWdlcykgOiBbXS5jb25jYXQocGFnZXMsIFtwYWdlXSk7XG4gICAgICAgIH07IC8vIENyZWF0ZSBmdW5jdGlvbiB0byBmZXRjaCBhIHBhZ2VcblxuXG4gICAgICAgIHZhciBmZXRjaFBhZ2UgPSBmdW5jdGlvbiBmZXRjaFBhZ2UocGFnZXMsIG1hbnVhbCwgcGFyYW0sIHByZXZpb3VzKSB7XG4gICAgICAgICAgaWYgKGNhbmNlbGxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdDYW5jZWxsZWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSAndW5kZWZpbmVkJyAmJiAhbWFudWFsICYmIHBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwYWdlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHF1ZXJ5Rm5Db250ZXh0ID0ge1xuICAgICAgICAgICAgcXVlcnlLZXk6IGNvbnRleHQucXVlcnlLZXksXG4gICAgICAgICAgICBzaWduYWw6IGFib3J0U2lnbmFsLFxuICAgICAgICAgICAgcGFnZVBhcmFtOiBwYXJhbSxcbiAgICAgICAgICAgIG1ldGE6IGNvbnRleHQubWV0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgdmFyIHF1ZXJ5Rm5SZXN1bHQgPSBxdWVyeUZuKHF1ZXJ5Rm5Db250ZXh0KTtcbiAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShxdWVyeUZuUmVzdWx0KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVpbGROZXdQYWdlcyhwYWdlcywgcGFyYW0sIHBhZ2UsIHByZXZpb3VzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpc0NhbmNlbGFibGUocXVlcnlGblJlc3VsdCkpIHtcbiAgICAgICAgICAgIHZhciBwcm9taXNlQXNBbnkgPSBwcm9taXNlO1xuICAgICAgICAgICAgcHJvbWlzZUFzQW55LmNhbmNlbCA9IHF1ZXJ5Rm5SZXN1bHQuY2FuY2VsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBwcm9taXNlOyAvLyBGZXRjaCBmaXJzdCBwYWdlP1xuXG4gICAgICAgIGlmICghb2xkUGFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShbXSk7XG4gICAgICAgIH0gLy8gRmV0Y2ggbmV4dCBwYWdlP1xuICAgICAgICBlbHNlIGlmIChpc0ZldGNoaW5nTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgIHZhciBtYW51YWwgPSB0eXBlb2YgcGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIHZhciBwYXJhbSA9IG1hbnVhbCA/IHBhZ2VQYXJhbSA6IGdldE5leHRQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBvbGRQYWdlcyk7XG4gICAgICAgICAgICBwcm9taXNlID0gZmV0Y2hQYWdlKG9sZFBhZ2VzLCBtYW51YWwsIHBhcmFtKTtcbiAgICAgICAgICB9IC8vIEZldGNoIHByZXZpb3VzIHBhZ2U/XG4gICAgICAgICAgZWxzZSBpZiAoaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSkge1xuICAgICAgICAgICAgICB2YXIgX21hbnVhbCA9IHR5cGVvZiBwYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnO1xuXG4gICAgICAgICAgICAgIHZhciBfcGFyYW0gPSBfbWFudWFsID8gcGFnZVBhcmFtIDogZ2V0UHJldmlvdXNQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBvbGRQYWdlcyk7XG5cbiAgICAgICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShvbGRQYWdlcywgX21hbnVhbCwgX3BhcmFtLCB0cnVlKTtcbiAgICAgICAgICAgIH0gLy8gUmVmZXRjaCBwYWdlc1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIG5ld1BhZ2VQYXJhbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgIHZhciBtYW51YWwgPSB0eXBlb2YgY29udGV4dC5vcHRpb25zLmdldE5leHRQYWdlUGFyYW0gPT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZEZldGNoRmlyc3RQYWdlID0gcmVmZXRjaFBhZ2UgJiYgb2xkUGFnZXNbMF0gPyByZWZldGNoUGFnZShvbGRQYWdlc1swXSwgMCwgb2xkUGFnZXMpIDogdHJ1ZTsgLy8gRmV0Y2ggZmlyc3QgcGFnZVxuXG4gICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2hvdWxkRmV0Y2hGaXJzdFBhZ2UgPyBmZXRjaFBhZ2UoW10sIG1hbnVhbCwgb2xkUGFnZVBhcmFtc1swXSkgOiBQcm9taXNlLnJlc29sdmUoYnVpbGROZXdQYWdlcyhbXSwgb2xkUGFnZVBhcmFtc1swXSwgb2xkUGFnZXNbMF0pKTsgLy8gRmV0Y2ggcmVtYWluaW5nIHBhZ2VzXG5cbiAgICAgICAgICAgICAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAocGFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hvdWxkRmV0Y2hOZXh0UGFnZSA9IHJlZmV0Y2hQYWdlICYmIG9sZFBhZ2VzW2ldID8gcmVmZXRjaFBhZ2Uob2xkUGFnZXNbaV0sIGksIG9sZFBhZ2VzKSA6IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRmV0Y2hOZXh0UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9wYXJhbTIgPSBtYW51YWwgPyBvbGRQYWdlUGFyYW1zW2ldIDogZ2V0TmV4dFBhZ2VQYXJhbShjb250ZXh0Lm9wdGlvbnMsIHBhZ2VzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoUGFnZShwYWdlcywgbWFudWFsLCBfcGFyYW0yKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJ1aWxkTmV3UGFnZXMocGFnZXMsIG9sZFBhZ2VQYXJhbXNbaV0sIG9sZFBhZ2VzW2ldKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBvbGRQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBfbG9vcChpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZpbmFsUHJvbWlzZSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAocGFnZXMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFnZXM6IHBhZ2VzLFxuICAgICAgICAgICAgcGFnZVBhcmFtczogbmV3UGFnZVBhcmFtc1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZmluYWxQcm9taXNlQXNBbnkgPSBmaW5hbFByb21pc2U7XG5cbiAgICAgICAgZmluYWxQcm9taXNlQXNBbnkuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcblxuICAgICAgICAgIGlmIChpc0NhbmNlbGFibGUocHJvbWlzZSkpIHtcbiAgICAgICAgICAgIHByb21pc2UuY2FuY2VsKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBmaW5hbFByb21pc2U7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIHJldHVybiBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0gPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZ2V0TmV4dFBhZ2VQYXJhbShwYWdlc1twYWdlcy5sZW5ndGggLSAxXSwgcGFnZXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIHJldHVybiBvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtKHBhZ2VzWzBdLCBwYWdlcyk7XG59XG4vKipcbiAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIG5leHQgcGFnZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc05leHRQYWdlKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIGlmIChvcHRpb25zLmdldE5leHRQYWdlUGFyYW0gJiYgQXJyYXkuaXNBcnJheShwYWdlcykpIHtcbiAgICB2YXIgbmV4dFBhZ2VQYXJhbSA9IGdldE5leHRQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpO1xuICAgIHJldHVybiB0eXBlb2YgbmV4dFBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmV4dFBhZ2VQYXJhbSAhPT0gbnVsbCAmJiBuZXh0UGFnZVBhcmFtICE9PSBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBwcmV2aW91cyBwYWdlLlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJldmlvdXNQYWdlKG9wdGlvbnMsIHBhZ2VzKSB7XG4gIGlmIChvcHRpb25zLmdldFByZXZpb3VzUGFnZVBhcmFtICYmIEFycmF5LmlzQXJyYXkocGFnZXMpKSB7XG4gICAgdmFyIHByZXZpb3VzUGFnZVBhcmFtID0gZ2V0UHJldmlvdXNQYWdlUGFyYW0ob3B0aW9ucywgcGFnZXMpO1xuICAgIHJldHVybiB0eXBlb2YgcHJldmlvdXNQYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnICYmIHByZXZpb3VzUGFnZVBhcmFtICE9PSBudWxsICYmIHByZXZpb3VzUGFnZVBhcmFtICE9PSBmYWxzZTtcbiAgfVxufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleSwgbm9vcCwgcGFyc2VGaWx0ZXJBcmdzLCBwYXJzZVF1ZXJ5QXJncywgcGFydGlhbE1hdGNoS2V5LCBoYXNoUXVlcnlLZXlCeU9wdGlvbnMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5Q2FjaGUgfSBmcm9tICcuL3F1ZXJ5Q2FjaGUnO1xuaW1wb3J0IHsgTXV0YXRpb25DYWNoZSB9IGZyb20gJy4vbXV0YXRpb25DYWNoZSc7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgaW5maW5pdGVRdWVyeUJlaGF2aW9yIH0gZnJvbSAnLi9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3InO1xuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeUNsaWVudChjb25maWcpIHtcbiAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHtcbiAgICAgIGNvbmZpZyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMucXVlcnlDYWNoZSA9IGNvbmZpZy5xdWVyeUNhY2hlIHx8IG5ldyBRdWVyeUNhY2hlKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGUgfHwgbmV3IE11dGF0aW9uQ2FjaGUoKTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zIHx8IHt9O1xuICAgIHRoaXMucXVlcnlEZWZhdWx0cyA9IFtdO1xuICAgIHRoaXMubXV0YXRpb25EZWZhdWx0cyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5Q2xpZW50LnByb3RvdHlwZTtcblxuICBfcHJvdG8ubW91bnQgPSBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZUZvY3VzID0gZm9jdXNNYW5hZ2VyLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpICYmIG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLm9uRm9jdXMoKTtcblxuICAgICAgICBfdGhpcy5xdWVyeUNhY2hlLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlT25saW5lID0gb25saW5lTWFuYWdlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5vbk9ubGluZSgpO1xuXG4gICAgICAgIF90aGlzLnF1ZXJ5Q2FjaGUub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udW5tb3VudCA9IGZ1bmN0aW9uIHVubW91bnQoKSB7XG4gICAgdmFyIF90aGlzJHVuc3Vic2NyaWJlRm9jdSwgX3RoaXMkdW5zdWJzY3JpYmVPbmxpO1xuXG4gICAgKF90aGlzJHVuc3Vic2NyaWJlRm9jdSA9IHRoaXMudW5zdWJzY3JpYmVGb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuc3Vic2NyaWJlRm9jdS5jYWxsKHRoaXMpO1xuICAgIChfdGhpcyR1bnN1YnNjcmliZU9ubGkgPSB0aGlzLnVuc3Vic2NyaWJlT25saW5lKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkdW5zdWJzY3JpYmVPbmxpLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBmaWx0ZXJzLmZldGNoaW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pc011dGF0aW5nID0gZnVuY3Rpb24gaXNNdXRhdGluZyhmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZS5maW5kQWxsKF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICBmZXRjaGluZzogdHJ1ZVxuICAgIH0pKS5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJ5RGF0YShxdWVyeUtleSwgZmlsdGVycykge1xuICAgIHZhciBfdGhpcyRxdWVyeUNhY2hlJGZpbmQ7XG5cbiAgICByZXR1cm4gKF90aGlzJHF1ZXJ5Q2FjaGUkZmluZCA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZC5zdGF0ZS5kYXRhO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlDYWNoZSgpLmZpbmRBbGwocXVlcnlLZXlPckZpbHRlcnMpLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHF1ZXJ5S2V5ID0gX3JlZi5xdWVyeUtleSxcbiAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gICAgICB2YXIgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBkYXRhXTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcnlEYXRhID0gZnVuY3Rpb24gc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhxdWVyeUtleSk7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMocGFyc2VkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKS5zZXREYXRhKHVwZGF0ZXIsIG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIHNldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzLCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLmdldFF1ZXJ5Q2FjaGUoKS5maW5kQWxsKHF1ZXJ5S2V5T3JGaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBxdWVyeUtleSA9IF9yZWYyLnF1ZXJ5S2V5O1xuICAgICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBfdGhpczIuc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKV07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlTdGF0ZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5U3RhdGUocXVlcnlLZXksIGZpbHRlcnMpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlDYWNoZSRmaW5kMjtcblxuICAgIHJldHVybiAoX3RoaXMkcXVlcnlDYWNoZSRmaW5kMiA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIuc3RhdGU7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZVF1ZXJpZXMgPSBmdW5jdGlvbiByZW1vdmVRdWVyaWVzKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Q2FjaGUucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldFF1ZXJpZXMgPSBmdW5jdGlvbiByZXNldFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczNbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzM1sxXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuXG4gICAgdmFyIHJlZmV0Y2hGaWx0ZXJzID0gX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIGFjdGl2ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LnJlc2V0KCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfdGhpczMucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxRdWVyaWVzID0gZnVuY3Rpb24gY2FuY2VsUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczQgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNFswXSxcbiAgICAgICAgX3BhcnNlRmlsdGVyQXJnczQkID0gX3BhcnNlRmlsdGVyQXJnczRbMV0sXG4gICAgICAgIGNhbmNlbE9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNCQgPT09IHZvaWQgMCA/IHt9IDogX3BhcnNlRmlsdGVyQXJnczQkO1xuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxPcHRpb25zLnJldmVydCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNhbmNlbE9wdGlvbnMucmV2ZXJ0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmNhbmNlbChjYW5jZWxPcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZVF1ZXJpZXMgPSBmdW5jdGlvbiBpbnZhbGlkYXRlUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF9yZWYzLFxuICAgICAgICBfZmlsdGVycyRyZWZldGNoQWN0aXYsXG4gICAgICAgIF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCxcbiAgICAgICAgX3RoaXM1ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNSA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M1WzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczVbMV07XG5cbiAgICB2YXIgcmVmZXRjaEZpbHRlcnMgPSBfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgLy8gaWYgZmlsdGVycy5yZWZldGNoQWN0aXZlIGlzIG5vdCBwcm92aWRlZCBhbmQgZmlsdGVycy5hY3RpdmUgaXMgZXhwbGljaXRseSBmYWxzZSxcbiAgICAgIC8vIGUuZy4gaW52YWxpZGF0ZVF1ZXJpZXMoeyBhY3RpdmU6IGZhbHNlIH0pLCB3ZSBkb24ndCB3YW50IHRvIHJlZmV0Y2ggYWN0aXZlIHF1ZXJpZXNcbiAgICAgIGFjdGl2ZTogKF9yZWYzID0gKF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA9IGZpbHRlcnMucmVmZXRjaEFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA6IGZpbHRlcnMuYWN0aXZlKSAhPSBudWxsID8gX3JlZjMgOiB0cnVlLFxuICAgICAgaW5hY3RpdmU6IChfZmlsdGVycyRyZWZldGNoSW5hY3QgPSBmaWx0ZXJzLnJlZmV0Y2hJbmFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCA6IGZhbHNlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LmludmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaFF1ZXJpZXMgPSBmdW5jdGlvbiByZWZldGNoUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczYgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNlswXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M2WzFdO1xuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM2LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5mZXRjaCh1bmRlZmluZWQsIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgcmVmZXRjaFBhZ2U6IGZpbHRlcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZpbHRlcnMucmVmZXRjaFBhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCk7XG5cbiAgICBpZiAoIShvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnRocm93T25FcnJvcikpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaFF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhwYXJzZWRPcHRpb25zKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rhbm5lcmxpbnNsZXkvcmVhY3QtcXVlcnkvaXNzdWVzLzY1MlxuXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSkgPyBxdWVyeS5mZXRjaChkZWZhdWx0ZWRPcHRpb25zKSA6IFByb21pc2UucmVzb2x2ZShxdWVyeS5zdGF0ZS5kYXRhKTtcbiAgfTtcblxuICBfcHJvdG8ucHJlZmV0Y2hRdWVyeSA9IGZ1bmN0aW9uIHByZWZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hJbmZpbml0ZVF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIHBhcnNlZE9wdGlvbnMuYmVoYXZpb3IgPSBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KHBhcnNlZE9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5wcmVmZXRjaEluZmluaXRlUXVlcnkgPSBmdW5jdGlvbiBwcmVmZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxNdXRhdGlvbnMgPSBmdW5jdGlvbiBjYW5jZWxNdXRhdGlvbnMoKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczcubXV0YXRpb25DYWNoZS5nZXRBbGwoKS5tYXAoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldE11dGF0aW9uQ2FjaGUoKS5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZU11dGF0aW9uID0gZnVuY3Rpb24gZXhlY3V0ZU11dGF0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlLmJ1aWxkKHRoaXMsIG9wdGlvbnMpLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlDYWNoZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5Q2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TXV0YXRpb25DYWNoZSA9IGZ1bmN0aW9uIGdldE11dGF0aW9uQ2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0T3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucXVlcnlEZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KHF1ZXJ5S2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgucXVlcnlLZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeURlZmF1bHRzLnB1c2goe1xuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5RGVmYXVsdHMkZjtcblxuICAgIHJldHVybiBxdWVyeUtleSA/IChfdGhpcyRxdWVyeURlZmF1bHRzJGYgPSB0aGlzLnF1ZXJ5RGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShxdWVyeUtleSwgeC5xdWVyeUtleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeURlZmF1bHRzJGYuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLnNldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMubXV0YXRpb25EZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgubXV0YXRpb25LZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXRhdGlvbkRlZmF1bHRzLnB1c2goe1xuICAgICAgICBtdXRhdGlvbktleTogbXV0YXRpb25LZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5KSB7XG4gICAgdmFyIF90aGlzJG11dGF0aW9uRGVmYXVsdDtcblxuICAgIHJldHVybiBtdXRhdGlvbktleSA/IChfdGhpcyRtdXRhdGlvbkRlZmF1bHQgPSB0aGlzLm11dGF0aW9uRGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShtdXRhdGlvbktleSwgeC5tdXRhdGlvbktleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRtdXRhdGlvbkRlZmF1bHQuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRRdWVyeU9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5fZGVmYXVsdGVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLnF1ZXJpZXMsIHRoaXMuZ2V0UXVlcnlEZWZhdWx0cyhvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5S2V5KSwgb3B0aW9ucywge1xuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCAmJiBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5KSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCA9IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdGVkT3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0TXV0YXRpb25PcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLm11dGF0aW9ucywgdGhpcy5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubXV0YXRpb25LZXkpLCBvcHRpb25zLCB7XG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGhpcy5xdWVyeUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlLmNsZWFyKCk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2xpZW50O1xufSgpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IHsgaXNTZXJ2ZXIsIGlzVmFsaWRUaW1lb3V0LCBub29wLCByZXBsYWNlRXF1YWxEZWVwLCBzaGFsbG93RXF1YWxPYmplY3RzLCB0aW1lVW50aWxTdGFsZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBpc0NhbmNlbGxlZEVycm9yIH0gZnJvbSAnLi9yZXRyeWVyJztcbmV4cG9ydCB2YXIgUXVlcnlPYnNlcnZlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShRdWVyeU9ic2VydmVyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBRdWVyeU9ic2VydmVyKGNsaWVudCwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIF90aGlzLnRyYWNrZWRQcm9wcyA9IFtdO1xuICAgIF90aGlzLnNlbGVjdEVycm9yID0gbnVsbDtcblxuICAgIF90aGlzLmJpbmRNZXRob2RzKCk7XG5cbiAgICBfdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5T2JzZXJ2ZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5iaW5kTWV0aG9kcyA9IGZ1bmN0aW9uIGJpbmRNZXRob2RzKCkge1xuICAgIHRoaXMucmVtb3ZlID0gdGhpcy5yZW1vdmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlZmV0Y2ggPSB0aGlzLnJlZmV0Y2guYmluZCh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVyeS5hZGRPYnNlcnZlcih0aGlzKTtcblxuICAgICAgaWYgKHNob3VsZEZldGNoT25Nb3VudCh0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLmV4ZWN1dGVGZXRjaCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVRpbWVycygpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmxpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2hvdWxkRmV0Y2hPblJlY29ubmVjdCA9IGZ1bmN0aW9uIHNob3VsZEZldGNoT25SZWNvbm5lY3QoKSB7XG4gICAgcmV0dXJuIHNob3VsZEZldGNoT24odGhpcy5jdXJyZW50UXVlcnksIHRoaXMub3B0aW9ucywgdGhpcy5vcHRpb25zLnJlZmV0Y2hPblJlY29ubmVjdCk7XG4gIH07XG5cbiAgX3Byb3RvLnNob3VsZEZldGNoT25XaW5kb3dGb2N1cyA9IGZ1bmN0aW9uIHNob3VsZEZldGNoT25XaW5kb3dGb2N1cygpIHtcbiAgICByZXR1cm4gc2hvdWxkRmV0Y2hPbih0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zLCB0aGlzLm9wdGlvbnMucmVmZXRjaE9uV2luZG93Rm9jdXMpO1xuICB9O1xuXG4gIF9wcm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuY2xlYXJUaW1lcnMoKTtcbiAgICB0aGlzLmN1cnJlbnRRdWVyeS5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucywgbm90aWZ5T3B0aW9ucykge1xuICAgIHZhciBwcmV2T3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5jbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuZW5hYmxlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZW5hYmxlZCB0byBiZSBhIGJvb2xlYW4nKTtcbiAgICB9IC8vIEtlZXAgcHJldmlvdXMgcXVlcnkga2V5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHN1cHBseSBvbmVcblxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlLZXkpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5xdWVyeUtleSA9IHByZXZPcHRpb25zLnF1ZXJ5S2V5O1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUXVlcnkoKTtcbiAgICB2YXIgbW91bnRlZCA9IHRoaXMuaGFzTGlzdGVuZXJzKCk7IC8vIEZldGNoIGlmIHRoZXJlIGFyZSBzdWJzY3JpYmVyc1xuXG4gICAgaWYgKG1vdW50ZWQgJiYgc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHRoaXMuY3VycmVudFF1ZXJ5LCBwcmV2UXVlcnksIHRoaXMub3B0aW9ucywgcHJldk9wdGlvbnMpKSB7XG4gICAgICB0aGlzLmV4ZWN1dGVGZXRjaCgpO1xuICAgIH0gLy8gVXBkYXRlIHJlc3VsdFxuXG5cbiAgICB0aGlzLnVwZGF0ZVJlc3VsdChub3RpZnlPcHRpb25zKTsgLy8gVXBkYXRlIHN0YWxlIGludGVydmFsIGlmIG5lZWRlZFxuXG4gICAgaWYgKG1vdW50ZWQgJiYgKHRoaXMuY3VycmVudFF1ZXJ5ICE9PSBwcmV2UXVlcnkgfHwgdGhpcy5vcHRpb25zLmVuYWJsZWQgIT09IHByZXZPcHRpb25zLmVuYWJsZWQgfHwgdGhpcy5vcHRpb25zLnN0YWxlVGltZSAhPT0gcHJldk9wdGlvbnMuc3RhbGVUaW1lKSkge1xuICAgICAgdGhpcy51cGRhdGVTdGFsZVRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFJlZmV0Y2hJbnRlcnZhbCA9IHRoaXMuY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpOyAvLyBVcGRhdGUgcmVmZXRjaCBpbnRlcnZhbCBpZiBuZWVkZWRcblxuICAgIGlmIChtb3VudGVkICYmICh0aGlzLmN1cnJlbnRRdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHRoaXMub3B0aW9ucy5lbmFibGVkICE9PSBwcmV2T3B0aW9ucy5lbmFibGVkIHx8IG5leHRSZWZldGNoSW50ZXJ2YWwgIT09IHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCkpIHtcbiAgICAgIHRoaXMudXBkYXRlUmVmZXRjaEludGVydmFsKG5leHRSZWZldGNoSW50ZXJ2YWwpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0T3B0aW1pc3RpY1Jlc3VsdCA9IGZ1bmN0aW9uIGdldE9wdGltaXN0aWNSZXN1bHQob3B0aW9ucykge1xuICAgIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gdGhpcy5jbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLmNsaWVudCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0Q3VycmVudFJlc3VsdCA9IGZ1bmN0aW9uIGdldEN1cnJlbnRSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8udHJhY2tSZXN1bHQgPSBmdW5jdGlvbiB0cmFja1Jlc3VsdChyZXN1bHQsIGRlZmF1bHRlZE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciB0cmFja2VkUmVzdWx0ID0ge307XG5cbiAgICB2YXIgdHJhY2tQcm9wID0gZnVuY3Rpb24gdHJhY2tQcm9wKGtleSkge1xuICAgICAgaWYgKCFfdGhpczIudHJhY2tlZFByb3BzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgX3RoaXMyLnRyYWNrZWRQcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHJhY2tlZFJlc3VsdCwga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHRyYWNrUHJvcChrZXkpO1xuICAgICAgICAgIHJldHVybiByZXN1bHRba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy51c2VFcnJvckJvdW5kYXJ5IHx8IGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UpIHtcbiAgICAgIHRyYWNrUHJvcCgnZXJyb3InKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhY2tlZFJlc3VsdDtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TmV4dFJlc3VsdCA9IGZ1bmN0aW9uIGdldE5leHRSZXN1bHQob3B0aW9ucykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciB1bnN1YnNjcmliZSA9IF90aGlzMy5zdWJzY3JpYmUoZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICBpZiAoIXJlc3VsdC5pc0ZldGNoaW5nKSB7XG4gICAgICAgICAgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgIGlmIChyZXN1bHQuaXNFcnJvciAmJiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICAgICAgICByZWplY3QocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmdldEN1cnJlbnRRdWVyeSA9IGZ1bmN0aW9uIGdldEN1cnJlbnRRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UXVlcnk7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICB0aGlzLmNsaWVudC5nZXRRdWVyeUNhY2hlKCkucmVtb3ZlKHRoaXMuY3VycmVudFF1ZXJ5KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaCA9IGZ1bmN0aW9uIHJlZmV0Y2gob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmZldGNoKF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICBtZXRhOiB7XG4gICAgICAgIHJlZmV0Y2hQYWdlOiBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJlZmV0Y2hQYWdlXG4gICAgICB9XG4gICAgfSkpO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaE9wdGltaXN0aWMgPSBmdW5jdGlvbiBmZXRjaE9wdGltaXN0aWMob3B0aW9ucykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmNsaWVudC5kZWZhdWx0UXVlcnlPYnNlcnZlck9wdGlvbnMob3B0aW9ucyk7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLmJ1aWxkKHRoaXMuY2xpZW50LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuZmV0Y2goKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQuY3JlYXRlUmVzdWx0KHF1ZXJ5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2ggPSBmdW5jdGlvbiBmZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVGZXRjaChmZXRjaE9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnVwZGF0ZVJlc3VsdCgpO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LmN1cnJlbnRSZXN1bHQ7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmV4ZWN1dGVGZXRjaCA9IGZ1bmN0aW9uIGV4ZWN1dGVGZXRjaChmZXRjaE9wdGlvbnMpIHtcbiAgICAvLyBNYWtlIHN1cmUgd2UgcmVmZXJlbmNlIHRoZSBsYXRlc3QgcXVlcnkgYXMgdGhlIGN1cnJlbnQgb25lIG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkXG4gICAgdGhpcy51cGRhdGVRdWVyeSgpOyAvLyBGZXRjaFxuXG4gICAgdmFyIHByb21pc2UgPSB0aGlzLmN1cnJlbnRRdWVyeS5mZXRjaCh0aGlzLm9wdGlvbnMsIGZldGNoT3B0aW9ucyk7XG5cbiAgICBpZiAoIShmZXRjaE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoT3B0aW9ucy50aHJvd09uRXJyb3IpKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlU3RhbGVUaW1lb3V0ID0gZnVuY3Rpb24gdXBkYXRlU3RhbGVUaW1lb3V0KCkge1xuICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgdGhpcy5jbGVhclN0YWxlVGltZW91dCgpO1xuXG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMuY3VycmVudFJlc3VsdC5pc1N0YWxlIHx8ICFpc1ZhbGlkVGltZW91dCh0aGlzLm9wdGlvbnMuc3RhbGVUaW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0aW1lID0gdGltZVVudGlsU3RhbGUodGhpcy5jdXJyZW50UmVzdWx0LmRhdGFVcGRhdGVkQXQsIHRoaXMub3B0aW9ucy5zdGFsZVRpbWUpOyAvLyBUaGUgdGltZW91dCBpcyBzb21ldGltZXMgdHJpZ2dlcmVkIDEgbXMgYmVmb3JlIHRoZSBzdGFsZSB0aW1lIGV4cGlyYXRpb24uXG4gICAgLy8gVG8gbWl0aWdhdGUgdGhpcyBpc3N1ZSB3ZSBhbHdheXMgYWRkIDEgbXMgdG8gdGhlIHRpbWVvdXQuXG5cbiAgICB2YXIgdGltZW91dCA9IHRpbWUgKyAxO1xuICAgIHRoaXMuc3RhbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXM2LmN1cnJlbnRSZXN1bHQuaXNTdGFsZSkge1xuICAgICAgICBfdGhpczYudXBkYXRlUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfSwgdGltZW91dCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXB1dGVSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiBjb21wdXRlUmVmZXRjaEludGVydmFsKCkge1xuICAgIHZhciBfdGhpcyRvcHRpb25zJHJlZmV0Y2g7XG5cbiAgICByZXR1cm4gdHlwZW9mIHRoaXMub3B0aW9ucy5yZWZldGNoSW50ZXJ2YWwgPT09ICdmdW5jdGlvbicgPyB0aGlzLm9wdGlvbnMucmVmZXRjaEludGVydmFsKHRoaXMuY3VycmVudFJlc3VsdC5kYXRhLCB0aGlzLmN1cnJlbnRRdWVyeSkgOiAoX3RoaXMkb3B0aW9ucyRyZWZldGNoID0gdGhpcy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbCkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkcmVmZXRjaCA6IGZhbHNlO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiB1cGRhdGVSZWZldGNoSW50ZXJ2YWwobmV4dEludGVydmFsKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB0aGlzLmNsZWFyUmVmZXRjaEludGVydmFsKCk7XG4gICAgdGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsID0gbmV4dEludGVydmFsO1xuXG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMub3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSB8fCAhaXNWYWxpZFRpbWVvdXQodGhpcy5jdXJyZW50UmVmZXRjaEludGVydmFsKSB8fCB0aGlzLmN1cnJlbnRSZWZldGNoSW50ZXJ2YWwgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlZmV0Y2hJbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzNy5vcHRpb25zLnJlZmV0Y2hJbnRlcnZhbEluQmFja2dyb3VuZCB8fCBmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkpIHtcbiAgICAgICAgX3RoaXM3LmV4ZWN1dGVGZXRjaCgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuY3VycmVudFJlZmV0Y2hJbnRlcnZhbCk7XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVRpbWVycyA9IGZ1bmN0aW9uIHVwZGF0ZVRpbWVycygpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YWxlVGltZW91dCgpO1xuICAgIHRoaXMudXBkYXRlUmVmZXRjaEludGVydmFsKHRoaXMuY29tcHV0ZVJlZmV0Y2hJbnRlcnZhbCgpKTtcbiAgfTtcblxuICBfcHJvdG8uY2xlYXJUaW1lcnMgPSBmdW5jdGlvbiBjbGVhclRpbWVycygpIHtcbiAgICB0aGlzLmNsZWFyU3RhbGVUaW1lb3V0KCk7XG4gICAgdGhpcy5jbGVhclJlZmV0Y2hJbnRlcnZhbCgpO1xuICB9O1xuXG4gIF9wcm90by5jbGVhclN0YWxlVGltZW91dCA9IGZ1bmN0aW9uIGNsZWFyU3RhbGVUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLnN0YWxlVGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGFsZVRpbWVvdXRJZCk7XG4gICAgICB0aGlzLnN0YWxlVGltZW91dElkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXJSZWZldGNoSW50ZXJ2YWwgPSBmdW5jdGlvbiBjbGVhclJlZmV0Y2hJbnRlcnZhbCgpIHtcbiAgICBpZiAodGhpcy5yZWZldGNoSW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlZmV0Y2hJbnRlcnZhbElkKTtcbiAgICAgIHRoaXMucmVmZXRjaEludGVydmFsSWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jcmVhdGVSZXN1bHQgPSBmdW5jdGlvbiBjcmVhdGVSZXN1bHQocXVlcnksIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdmFyIHByZXZPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHZhciBwcmV2UmVzdWx0ID0gdGhpcy5jdXJyZW50UmVzdWx0O1xuICAgIHZhciBwcmV2UmVzdWx0U3RhdGUgPSB0aGlzLmN1cnJlbnRSZXN1bHRTdGF0ZTtcbiAgICB2YXIgcHJldlJlc3VsdE9wdGlvbnMgPSB0aGlzLmN1cnJlbnRSZXN1bHRPcHRpb25zO1xuICAgIHZhciBxdWVyeUNoYW5nZSA9IHF1ZXJ5ICE9PSBwcmV2UXVlcnk7XG4gICAgdmFyIHF1ZXJ5SW5pdGlhbFN0YXRlID0gcXVlcnlDaGFuZ2UgPyBxdWVyeS5zdGF0ZSA6IHRoaXMuY3VycmVudFF1ZXJ5SW5pdGlhbFN0YXRlO1xuICAgIHZhciBwcmV2UXVlcnlSZXN1bHQgPSBxdWVyeUNoYW5nZSA/IHRoaXMuY3VycmVudFJlc3VsdCA6IHRoaXMucHJldmlvdXNRdWVyeVJlc3VsdDtcbiAgICB2YXIgc3RhdGUgPSBxdWVyeS5zdGF0ZTtcbiAgICB2YXIgZGF0YVVwZGF0ZWRBdCA9IHN0YXRlLmRhdGFVcGRhdGVkQXQsXG4gICAgICAgIGVycm9yID0gc3RhdGUuZXJyb3IsXG4gICAgICAgIGVycm9yVXBkYXRlZEF0ID0gc3RhdGUuZXJyb3JVcGRhdGVkQXQsXG4gICAgICAgIGlzRmV0Y2hpbmcgPSBzdGF0ZS5pc0ZldGNoaW5nLFxuICAgICAgICBzdGF0dXMgPSBzdGF0ZS5zdGF0dXM7XG4gICAgdmFyIGlzUHJldmlvdXNEYXRhID0gZmFsc2U7XG4gICAgdmFyIGlzUGxhY2Vob2xkZXJEYXRhID0gZmFsc2U7XG4gICAgdmFyIGRhdGE7IC8vIE9wdGltaXN0aWNhbGx5IHNldCByZXN1bHQgaW4gZmV0Y2hpbmcgc3RhdGUgaWYgbmVlZGVkXG5cbiAgICBpZiAob3B0aW9ucy5vcHRpbWlzdGljUmVzdWx0cykge1xuICAgICAgdmFyIG1vdW50ZWQgPSB0aGlzLmhhc0xpc3RlbmVycygpO1xuICAgICAgdmFyIGZldGNoT25Nb3VudCA9ICFtb3VudGVkICYmIHNob3VsZEZldGNoT25Nb3VudChxdWVyeSwgb3B0aW9ucyk7XG4gICAgICB2YXIgZmV0Y2hPcHRpb25hbGx5ID0gbW91bnRlZCAmJiBzaG91bGRGZXRjaE9wdGlvbmFsbHkocXVlcnksIHByZXZRdWVyeSwgb3B0aW9ucywgcHJldk9wdGlvbnMpO1xuXG4gICAgICBpZiAoZmV0Y2hPbk1vdW50IHx8IGZldGNoT3B0aW9uYWxseSkge1xuICAgICAgICBpc0ZldGNoaW5nID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIWRhdGFVcGRhdGVkQXQpIHtcbiAgICAgICAgICBzdGF0dXMgPSAnbG9hZGluZyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIEtlZXAgcHJldmlvdXMgZGF0YSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKG9wdGlvbnMua2VlcFByZXZpb3VzRGF0YSAmJiAhc3RhdGUuZGF0YVVwZGF0ZUNvdW50ICYmIChwcmV2UXVlcnlSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZRdWVyeVJlc3VsdC5pc1N1Y2Nlc3MpICYmIHN0YXR1cyAhPT0gJ2Vycm9yJykge1xuICAgICAgZGF0YSA9IHByZXZRdWVyeVJlc3VsdC5kYXRhO1xuICAgICAgZGF0YVVwZGF0ZWRBdCA9IHByZXZRdWVyeVJlc3VsdC5kYXRhVXBkYXRlZEF0O1xuICAgICAgc3RhdHVzID0gcHJldlF1ZXJ5UmVzdWx0LnN0YXR1cztcbiAgICAgIGlzUHJldmlvdXNEYXRhID0gdHJ1ZTtcbiAgICB9IC8vIFNlbGVjdCBkYXRhIGlmIG5lZWRlZFxuICAgIGVsc2UgaWYgKG9wdGlvbnMuc2VsZWN0ICYmIHR5cGVvZiBzdGF0ZS5kYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBNZW1vaXplIHNlbGVjdCByZXN1bHRcbiAgICAgICAgaWYgKHByZXZSZXN1bHQgJiYgc3RhdGUuZGF0YSA9PT0gKHByZXZSZXN1bHRTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdFN0YXRlLmRhdGEpICYmIG9wdGlvbnMuc2VsZWN0ID09PSB0aGlzLnNlbGVjdEZuKSB7XG4gICAgICAgICAgZGF0YSA9IHRoaXMuc2VsZWN0UmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEZuID0gb3B0aW9ucy5zZWxlY3Q7XG4gICAgICAgICAgICBkYXRhID0gb3B0aW9ucy5zZWxlY3Qoc3RhdGUuZGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBkYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2UmVzdWx0ID09IG51bGwgPyB2b2lkIDAgOiBwcmV2UmVzdWx0LmRhdGEsIGRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVycm9yID0gbnVsbDtcbiAgICAgICAgICB9IGNhdGNoIChzZWxlY3RFcnJvcikge1xuICAgICAgICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3Ioc2VsZWN0RXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IHNlbGVjdEVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBVc2UgcXVlcnkgZGF0YVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICAgIH0gLy8gU2hvdyBwbGFjZWhvbGRlciBkYXRhIGlmIG5lZWRlZFxuXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMucGxhY2Vob2xkZXJEYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYgKHN0YXR1cyA9PT0gJ2xvYWRpbmcnIHx8IHN0YXR1cyA9PT0gJ2lkbGUnKSkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyRGF0YTsgLy8gTWVtb2l6ZSBwbGFjZWhvbGRlciBkYXRhXG5cbiAgICAgIGlmICgocHJldlJlc3VsdCA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdC5pc1BsYWNlaG9sZGVyRGF0YSkgJiYgb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgPT09IChwcmV2UmVzdWx0T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogcHJldlJlc3VsdE9wdGlvbnMucGxhY2Vob2xkZXJEYXRhKSkge1xuICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSBwcmV2UmVzdWx0LmRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSB0eXBlb2Ygb3B0aW9ucy5wbGFjZWhvbGRlckRhdGEgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLnBsYWNlaG9sZGVyRGF0YSgpIDogb3B0aW9ucy5wbGFjZWhvbGRlckRhdGE7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc2VsZWN0ICYmIHR5cGVvZiBwbGFjZWhvbGRlckRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyRGF0YSA9IG9wdGlvbnMuc2VsZWN0KHBsYWNlaG9sZGVyRGF0YSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cnVjdHVyYWxTaGFyaW5nICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEgPSByZXBsYWNlRXF1YWxEZWVwKHByZXZSZXN1bHQgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZSZXN1bHQuZGF0YSwgcGxhY2Vob2xkZXJEYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RFcnJvciA9IG51bGw7XG4gICAgICAgICAgfSBjYXRjaCAoc2VsZWN0RXJyb3IpIHtcbiAgICAgICAgICAgIGdldExvZ2dlcigpLmVycm9yKHNlbGVjdEVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RXJyb3IgPSBzZWxlY3RFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBwbGFjZWhvbGRlckRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHN0YXR1cyA9ICdzdWNjZXNzJztcbiAgICAgICAgZGF0YSA9IHBsYWNlaG9sZGVyRGF0YTtcbiAgICAgICAgaXNQbGFjZWhvbGRlckRhdGEgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdEVycm9yKSB7XG4gICAgICBlcnJvciA9IHRoaXMuc2VsZWN0RXJyb3I7XG4gICAgICBkYXRhID0gdGhpcy5zZWxlY3RSZXN1bHQ7XG4gICAgICBlcnJvclVwZGF0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICBzdGF0dXMgPSAnZXJyb3InO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgIGlzTG9hZGluZzogc3RhdHVzID09PSAnbG9hZGluZycsXG4gICAgICBpc1N1Y2Nlc3M6IHN0YXR1cyA9PT0gJ3N1Y2Nlc3MnLFxuICAgICAgaXNFcnJvcjogc3RhdHVzID09PSAnZXJyb3InLFxuICAgICAgaXNJZGxlOiBzdGF0dXMgPT09ICdpZGxlJyxcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBkYXRhVXBkYXRlZEF0OiBkYXRhVXBkYXRlZEF0LFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgZXJyb3JVcGRhdGVkQXQ6IGVycm9yVXBkYXRlZEF0LFxuICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCxcbiAgICAgIGVycm9yVXBkYXRlQ291bnQ6IHN0YXRlLmVycm9yVXBkYXRlQ291bnQsXG4gICAgICBpc0ZldGNoZWQ6IHN0YXRlLmRhdGFVcGRhdGVDb3VudCA+IDAgfHwgc3RhdGUuZXJyb3JVcGRhdGVDb3VudCA+IDAsXG4gICAgICBpc0ZldGNoZWRBZnRlck1vdW50OiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgPiBxdWVyeUluaXRpYWxTdGF0ZS5kYXRhVXBkYXRlQ291bnQgfHwgc3RhdGUuZXJyb3JVcGRhdGVDb3VudCA+IHF1ZXJ5SW5pdGlhbFN0YXRlLmVycm9yVXBkYXRlQ291bnQsXG4gICAgICBpc0ZldGNoaW5nOiBpc0ZldGNoaW5nLFxuICAgICAgaXNSZWZldGNoaW5nOiBpc0ZldGNoaW5nICYmIHN0YXR1cyAhPT0gJ2xvYWRpbmcnLFxuICAgICAgaXNMb2FkaW5nRXJyb3I6IHN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBzdGF0ZS5kYXRhVXBkYXRlZEF0ID09PSAwLFxuICAgICAgaXNQbGFjZWhvbGRlckRhdGE6IGlzUGxhY2Vob2xkZXJEYXRhLFxuICAgICAgaXNQcmV2aW91c0RhdGE6IGlzUHJldmlvdXNEYXRhLFxuICAgICAgaXNSZWZldGNoRXJyb3I6IHN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBzdGF0ZS5kYXRhVXBkYXRlZEF0ICE9PSAwLFxuICAgICAgaXNTdGFsZTogaXNTdGFsZShxdWVyeSwgb3B0aW9ucyksXG4gICAgICByZWZldGNoOiB0aGlzLnJlZmV0Y2gsXG4gICAgICByZW1vdmU6IHRoaXMucmVtb3ZlXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIF9wcm90by5zaG91bGROb3RpZnlMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzaG91bGROb3RpZnlMaXN0ZW5lcnMocmVzdWx0LCBwcmV2UmVzdWx0KSB7XG4gICAgaWYgKCFwcmV2UmVzdWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgbm90aWZ5T25DaGFuZ2VQcm9wcyA9IF90aGlzJG9wdGlvbnMubm90aWZ5T25DaGFuZ2VQcm9wcyxcbiAgICAgICAgbm90aWZ5T25DaGFuZ2VQcm9wc0V4Y2x1c2lvbnMgPSBfdGhpcyRvcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zO1xuXG4gICAgaWYgKCFub3RpZnlPbkNoYW5nZVByb3BzICYmICFub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJyAmJiAhdGhpcy50cmFja2VkUHJvcHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgaW5jbHVkZWRQcm9wcyA9IG5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJyA/IHRoaXMudHJhY2tlZFByb3BzIDogbm90aWZ5T25DaGFuZ2VQcm9wcztcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocmVzdWx0KS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciB0eXBlZEtleSA9IGtleTtcbiAgICAgIHZhciBjaGFuZ2VkID0gcmVzdWx0W3R5cGVkS2V5XSAhPT0gcHJldlJlc3VsdFt0eXBlZEtleV07XG4gICAgICB2YXIgaXNJbmNsdWRlZCA9IGluY2x1ZGVkUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IGluY2x1ZGVkUHJvcHMuc29tZShmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geCA9PT0ga2V5O1xuICAgICAgfSk7XG4gICAgICB2YXIgaXNFeGNsdWRlZCA9IG5vdGlmeU9uQ2hhbmdlUHJvcHNFeGNsdXNpb25zID09IG51bGwgPyB2b2lkIDAgOiBub3RpZnlPbkNoYW5nZVByb3BzRXhjbHVzaW9ucy5zb21lKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ID09PSBrZXk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjaGFuZ2VkICYmICFpc0V4Y2x1ZGVkICYmICghaW5jbHVkZWRQcm9wcyB8fCBpc0luY2x1ZGVkKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlUmVzdWx0ID0gZnVuY3Rpb24gdXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpIHtcbiAgICB2YXIgcHJldlJlc3VsdCA9IHRoaXMuY3VycmVudFJlc3VsdDtcbiAgICB0aGlzLmN1cnJlbnRSZXN1bHQgPSB0aGlzLmNyZWF0ZVJlc3VsdCh0aGlzLmN1cnJlbnRRdWVyeSwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmN1cnJlbnRSZXN1bHRTdGF0ZSA9IHRoaXMuY3VycmVudFF1ZXJ5LnN0YXRlO1xuICAgIHRoaXMuY3VycmVudFJlc3VsdE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7IC8vIE9ubHkgbm90aWZ5IGlmIHNvbWV0aGluZyBoYXMgY2hhbmdlZFxuXG4gICAgaWYgKHNoYWxsb3dFcXVhbE9iamVjdHModGhpcy5jdXJyZW50UmVzdWx0LCBwcmV2UmVzdWx0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGV0ZXJtaW5lIHdoaWNoIGNhbGxiYWNrcyB0byB0cmlnZ2VyXG5cblxuICAgIHZhciBkZWZhdWx0Tm90aWZ5T3B0aW9ucyA9IHtcbiAgICAgIGNhY2hlOiB0cnVlXG4gICAgfTtcblxuICAgIGlmICgobm90aWZ5T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogbm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMpICE9PSBmYWxzZSAmJiB0aGlzLnNob3VsZE5vdGlmeUxpc3RlbmVycyh0aGlzLmN1cnJlbnRSZXN1bHQsIHByZXZSZXN1bHQpKSB7XG4gICAgICBkZWZhdWx0Tm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMubm90aWZ5KF9leHRlbmRzKHt9LCBkZWZhdWx0Tm90aWZ5T3B0aW9ucywgbm90aWZ5T3B0aW9ucykpO1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVRdWVyeSA9IGZ1bmN0aW9uIHVwZGF0ZVF1ZXJ5KCkge1xuICAgIHZhciBxdWVyeSA9IHRoaXMuY2xpZW50LmdldFF1ZXJ5Q2FjaGUoKS5idWlsZCh0aGlzLmNsaWVudCwgdGhpcy5vcHRpb25zKTtcblxuICAgIGlmIChxdWVyeSA9PT0gdGhpcy5jdXJyZW50UXVlcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJldlF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7XG4gICAgdGhpcy5jdXJyZW50UXVlcnkgPSBxdWVyeTtcbiAgICB0aGlzLmN1cnJlbnRRdWVyeUluaXRpYWxTdGF0ZSA9IHF1ZXJ5LnN0YXRlO1xuICAgIHRoaXMucHJldmlvdXNRdWVyeVJlc3VsdCA9IHRoaXMuY3VycmVudFJlc3VsdDtcblxuICAgIGlmICh0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICBwcmV2UXVlcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXZRdWVyeS5yZW1vdmVPYnNlcnZlcih0aGlzKTtcbiAgICAgIHF1ZXJ5LmFkZE9ic2VydmVyKHRoaXMpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25RdWVyeVVwZGF0ZSA9IGZ1bmN0aW9uIG9uUXVlcnlVcGRhdGUoYWN0aW9uKSB7XG4gICAgdmFyIG5vdGlmeU9wdGlvbnMgPSB7fTtcblxuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICBub3RpZnlPcHRpb25zLm9uU3VjY2VzcyA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gJ2Vycm9yJyAmJiAhaXNDYW5jZWxsZWRFcnJvcihhY3Rpb24uZXJyb3IpKSB7XG4gICAgICBub3RpZnlPcHRpb25zLm9uRXJyb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUmVzdWx0KG5vdGlmeU9wdGlvbnMpO1xuXG4gICAgaWYgKHRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlVGltZXJzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkobm90aWZ5T3B0aW9ucykge1xuICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBGaXJzdCB0cmlnZ2VyIHRoZSBjb25maWd1cmF0aW9uIGNhbGxiYWNrc1xuICAgICAgaWYgKG5vdGlmeU9wdGlvbnMub25TdWNjZXNzKSB7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXM4Lm9wdGlvbnMub25TdWNjZXNzKF90aGlzOC5jdXJyZW50UmVzdWx0LmRhdGEpO1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZChfdGhpczguY3VycmVudFJlc3VsdC5kYXRhLCBudWxsKTtcbiAgICAgIH0gZWxzZSBpZiAobm90aWZ5T3B0aW9ucy5vbkVycm9yKSB7XG4gICAgICAgIF90aGlzOC5vcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uRXJyb3IoX3RoaXM4LmN1cnJlbnRSZXN1bHQuZXJyb3IpO1xuICAgICAgICBfdGhpczgub3B0aW9ucy5vblNldHRsZWQgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzOC5vcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIF90aGlzOC5jdXJyZW50UmVzdWx0LmVycm9yKTtcbiAgICAgIH0gLy8gVGhlbiB0cmlnZ2VyIHRoZSBsaXN0ZW5lcnNcblxuXG4gICAgICBpZiAobm90aWZ5T3B0aW9ucy5saXN0ZW5lcnMpIHtcbiAgICAgICAgX3RoaXM4Lmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICAgIGxpc3RlbmVyKF90aGlzOC5jdXJyZW50UmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIFRoZW4gdGhlIGNhY2hlIGxpc3RlbmVyc1xuXG5cbiAgICAgIGlmIChub3RpZnlPcHRpb25zLmNhY2hlKSB7XG4gICAgICAgIF90aGlzOC5jbGllbnQuZ2V0UXVlcnlDYWNoZSgpLm5vdGlmeSh7XG4gICAgICAgICAgcXVlcnk6IF90aGlzOC5jdXJyZW50UXVlcnksXG4gICAgICAgICAgdHlwZTogJ29ic2VydmVyUmVzdWx0c1VwZGF0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeU9ic2VydmVyO1xufShTdWJzY3JpYmFibGUpO1xuXG5mdW5jdGlvbiBzaG91bGRMb2FkT25Nb3VudChxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZSAmJiAhcXVlcnkuc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiAhKHF1ZXJ5LnN0YXRlLnN0YXR1cyA9PT0gJ2Vycm9yJyAmJiBvcHRpb25zLnJldHJ5T25Nb3VudCA9PT0gZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRGZXRjaE9uTW91bnQocXVlcnksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHNob3VsZExvYWRPbk1vdW50KHF1ZXJ5LCBvcHRpb25zKSB8fCBxdWVyeS5zdGF0ZS5kYXRhVXBkYXRlZEF0ID4gMCAmJiBzaG91bGRGZXRjaE9uKHF1ZXJ5LCBvcHRpb25zLCBvcHRpb25zLnJlZmV0Y2hPbk1vdW50KTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPbihxdWVyeSwgb3B0aW9ucywgZmllbGQpIHtcbiAgaWYgKG9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICB2YXIgdmFsdWUgPSB0eXBlb2YgZmllbGQgPT09ICdmdW5jdGlvbicgPyBmaWVsZChxdWVyeSkgOiBmaWVsZDtcbiAgICByZXR1cm4gdmFsdWUgPT09ICdhbHdheXMnIHx8IHZhbHVlICE9PSBmYWxzZSAmJiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkRmV0Y2hPcHRpb25hbGx5KHF1ZXJ5LCBwcmV2UXVlcnksIG9wdGlvbnMsIHByZXZPcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlICYmIChxdWVyeSAhPT0gcHJldlF1ZXJ5IHx8IHByZXZPcHRpb25zLmVuYWJsZWQgPT09IGZhbHNlKSAmJiAoIW9wdGlvbnMuc3VzcGVuc2UgfHwgcXVlcnkuc3RhdGUuc3RhdHVzICE9PSAnZXJyb3InKSAmJiBpc1N0YWxlKHF1ZXJ5LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gaXNTdGFsZShxdWVyeSwgb3B0aW9ucykge1xuICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShvcHRpb25zLnN0YWxlVGltZSk7XG59IiwgImltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuZXhwb3J0IHZhciB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IFJlYWN0RE9NLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOyIsICJpbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJy4vcmVhY3RCYXRjaGVkVXBkYXRlcyc7XG5ub3RpZnlNYW5hZ2VyLnNldEJhdGNoTm90aWZ5RnVuY3Rpb24odW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMpOyIsICJleHBvcnQgdmFyIGxvZ2dlciA9IGNvbnNvbGU7IiwgImltcG9ydCB7IHNldExvZ2dlciB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuc2V0TG9nZ2VyKGxvZ2dlcik7IiwgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgZGVmYXVsdENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xudmFyIFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChmYWxzZSk7IC8vIGlmIGNvbnRleHRTaGFyaW5nIGlzIG9uLCB3ZSBzaGFyZSB0aGUgZmlyc3QgYW5kIGF0IGxlYXN0IG9uZVxuLy8gaW5zdGFuY2Ugb2YgdGhlIGNvbnRleHQgYWNyb3NzIHRoZSB3aW5kb3dcbi8vIHRvIGVuc3VyZSB0aGF0IGlmIFJlYWN0IFF1ZXJ5IGlzIHVzZWQgYWNyb3NzXG4vLyBkaWZmZXJlbnQgYnVuZGxlcyBvciBtaWNyb2Zyb250ZW5kcyB0aGV5IHdpbGxcbi8vIGFsbCB1c2UgdGhlIHNhbWUgKippbnN0YW5jZSoqIG9mIGNvbnRleHQsIHJlZ2FyZGxlc3Ncbi8vIG9mIG1vZHVsZSBzY29waW5nLlxuXG5mdW5jdGlvbiBnZXRRdWVyeUNsaWVudENvbnRleHQoY29udGV4dFNoYXJpbmcpIHtcbiAgaWYgKGNvbnRleHRTaGFyaW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKCF3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQpIHtcbiAgICAgIHdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dCA9IGRlZmF1bHRDb250ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiB3aW5kb3cuUmVhY3RRdWVyeUNsaWVudENvbnRleHQ7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdENvbnRleHQ7XG59XG5cbmV4cG9ydCB2YXIgdXNlUXVlcnlDbGllbnQgPSBmdW5jdGlvbiB1c2VRdWVyeUNsaWVudCgpIHtcbiAgdmFyIHF1ZXJ5Q2xpZW50ID0gUmVhY3QudXNlQ29udGV4dChnZXRRdWVyeUNsaWVudENvbnRleHQoUmVhY3QudXNlQ29udGV4dChRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0KSkpO1xuXG4gIGlmICghcXVlcnlDbGllbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFF1ZXJ5Q2xpZW50IHNldCwgdXNlIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgdG8gc2V0IG9uZScpO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5Q2xpZW50O1xufTtcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnRQcm92aWRlciA9IGZ1bmN0aW9uIFF1ZXJ5Q2xpZW50UHJvdmlkZXIoX3JlZikge1xuICB2YXIgY2xpZW50ID0gX3JlZi5jbGllbnQsXG4gICAgICBfcmVmJGNvbnRleHRTaGFyaW5nID0gX3JlZi5jb250ZXh0U2hhcmluZyxcbiAgICAgIGNvbnRleHRTaGFyaW5nID0gX3JlZiRjb250ZXh0U2hhcmluZyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGNvbnRleHRTaGFyaW5nLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGNsaWVudC5tb3VudCgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjbGllbnQudW5tb3VudCgpO1xuICAgIH07XG4gIH0sIFtjbGllbnRdKTtcbiAgdmFyIENvbnRleHQgPSBnZXRRdWVyeUNsaWVudENvbnRleHQoY29udGV4dFNoYXJpbmcpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0U2hhcmluZ1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNsaWVudFxuICB9LCBjaGlsZHJlbikpO1xufTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8gQ09OVEVYVFxuXG5mdW5jdGlvbiBjcmVhdGVWYWx1ZSgpIHtcbiAgdmFyIF9pc1Jlc2V0ID0gZmFsc2U7XG4gIHJldHVybiB7XG4gICAgY2xlYXJSZXNldDogZnVuY3Rpb24gY2xlYXJSZXNldCgpIHtcbiAgICAgIF9pc1Jlc2V0ID0gZmFsc2U7XG4gICAgfSxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICBfaXNSZXNldCA9IHRydWU7XG4gICAgfSxcbiAgICBpc1Jlc2V0OiBmdW5jdGlvbiBpc1Jlc2V0KCkge1xuICAgICAgcmV0dXJuIF9pc1Jlc2V0O1xuICAgIH1cbiAgfTtcbn1cblxudmFyIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KGNyZWF0ZVZhbHVlKCkpOyAvLyBIT09LXG5cbmV4cG9ydCB2YXIgdXNlUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkgPSBmdW5jdGlvbiB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0KTtcbn07IC8vIENPTVBPTkVOVFxuXG5leHBvcnQgdmFyIFF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gUXVlcnlFcnJvclJlc2V0Qm91bmRhcnkoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgdmFsdWUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY3JlYXRlVmFsdWUoKTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUXVlcnlFcnJvclJlc2V0Qm91bmRhcnlDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHZhbHVlXG4gIH0sIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHZhbHVlKSA6IGNoaWxkcmVuKTtcbn07IiwgImV4cG9ydCBmdW5jdGlvbiBzaG91bGRUaHJvd0Vycm9yKHN1c3BlbnNlLCBfdXNlRXJyb3JCb3VuZGFyeSwgcGFyYW1zKSB7XG4gIC8vIEFsbG93IHVzZUVycm9yQm91bmRhcnkgZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhyb3dpbmcgYmVoYXZpb3Igb24gYSBwZXItZXJyb3IgYmFzaXNcbiAgaWYgKHR5cGVvZiBfdXNlRXJyb3JCb3VuZGFyeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBfdXNlRXJyb3JCb3VuZGFyeS5hcHBseSh2b2lkIDAsIHBhcmFtcyk7XG4gIH0gLy8gQWxsb3cgdXNlRXJyb3JCb3VuZGFyeSB0byBvdmVycmlkZSBzdXNwZW5zZSdzIHRocm93aW5nIGJlaGF2aW9yXG5cblxuICBpZiAodHlwZW9mIF91c2VFcnJvckJvdW5kYXJ5ID09PSAnYm9vbGVhbicpIHJldHVybiBfdXNlRXJyb3JCb3VuZGFyeTsgLy8gSWYgc3VzcGVuc2UgaXMgZW5hYmxlZCBkZWZhdWx0IHRvIHRocm93aW5nIGVycm9yc1xuXG4gIHJldHVybiAhIXN1c3BlbnNlO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4uL2NvcmUvbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyB1c2VRdWVyeUVycm9yUmVzZXRCb3VuZGFyeSB9IGZyb20gJy4vUXVlcnlFcnJvclJlc2V0Qm91bmRhcnknO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tICcuL1F1ZXJ5Q2xpZW50UHJvdmlkZXInO1xuaW1wb3J0IHsgc2hvdWxkVGhyb3dFcnJvciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhc2VRdWVyeShvcHRpb25zLCBPYnNlcnZlcikge1xuICB2YXIgbW91bnRlZFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG5cbiAgdmFyIF9SZWFjdCR1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlKDApLFxuICAgICAgZm9yY2VVcGRhdGUgPSBfUmVhY3QkdXNlU3RhdGVbMV07XG5cbiAgdmFyIHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgdmFyIGVycm9yUmVzZXRCb3VuZGFyeSA9IHVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5KCk7XG4gIHZhciBkZWZhdWx0ZWRPcHRpb25zID0gcXVlcnlDbGllbnQuZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpOyAvLyBNYWtlIHN1cmUgcmVzdWx0cyBhcmUgb3B0aW1pc3RpY2FsbHkgc2V0IGluIGZldGNoaW5nIHN0YXRlIGJlZm9yZSBzdWJzY3JpYmluZyBvciB1cGRhdGluZyBvcHRpb25zXG5cbiAgZGVmYXVsdGVkT3B0aW9ucy5vcHRpbWlzdGljUmVzdWx0cyA9IHRydWU7IC8vIEluY2x1ZGUgY2FsbGJhY2tzIGluIGJhdGNoIHJlbmRlcnNcblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yKSB7XG4gICAgZGVmYXVsdGVkT3B0aW9ucy5vbkVycm9yID0gbm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKGRlZmF1bHRlZE9wdGlvbnMub25FcnJvcik7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vblN1Y2Nlc3MpIHtcbiAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2VzcyA9IG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2Vzcyk7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQpIHtcbiAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCA9IG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscyhkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCk7XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSkge1xuICAgIC8vIEFsd2F5cyBzZXQgc3RhbGUgdGltZSB3aGVuIHVzaW5nIHN1c3BlbnNlIHRvIHByZXZlbnRcbiAgICAvLyBmZXRjaGluZyBhZ2FpbiB3aGVuIGRpcmVjdGx5IG1vdW50aW5nIGFmdGVyIHN1c3BlbmRpbmdcbiAgICBpZiAodHlwZW9mIGRlZmF1bHRlZE9wdGlvbnMuc3RhbGVUaW1lICE9PSAnbnVtYmVyJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5zdGFsZVRpbWUgPSAxMDAwO1xuICAgIH0gLy8gU2V0IGNhY2hlIHRpbWUgdG8gMSBpZiB0aGUgb3B0aW9uIGhhcyBiZWVuIHNldCB0byAwXG4gICAgLy8gd2hlbiB1c2luZyBzdXNwZW5zZSB0byBwcmV2ZW50IGluZmluaXRlIGxvb3Agb2YgZmV0Y2hlc1xuXG5cbiAgICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5jYWNoZVRpbWUgPT09IDApIHtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMuY2FjaGVUaW1lID0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSB8fCBkZWZhdWx0ZWRPcHRpb25zLnVzZUVycm9yQm91bmRhcnkpIHtcbiAgICAvLyBQcmV2ZW50IHJldHJ5aW5nIGZhaWxlZCBxdWVyeSBpZiB0aGUgZXJyb3IgYm91bmRhcnkgaGFzIG5vdCBiZWVuIHJlc2V0IHlldFxuICAgIGlmICghZXJyb3JSZXNldEJvdW5kYXJ5LmlzUmVzZXQoKSkge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeU9uTW91bnQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YXIgX1JlYWN0JHVzZVN0YXRlMiA9IFJlYWN0LnVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmVyKHF1ZXJ5Q2xpZW50LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgfSksXG4gICAgICBvYnNlcnZlciA9IF9SZWFjdCR1c2VTdGF0ZTJbMF07XG5cbiAgdmFyIHJlc3VsdCA9IG9ic2VydmVyLmdldE9wdGltaXN0aWNSZXN1bHQoZGVmYXVsdGVkT3B0aW9ucyk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgbW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICBlcnJvclJlc2V0Qm91bmRhcnkuY2xlYXJSZXNldCgpO1xuICAgIHZhciB1bnN1YnNjcmliZSA9IG9ic2VydmVyLnN1YnNjcmliZShub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG1vdW50ZWRSZWYuY3VycmVudCkge1xuICAgICAgICBmb3JjZVVwZGF0ZShmdW5jdGlvbiAoeCkge1xuICAgICAgICAgIHJldHVybiB4ICsgMTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkpOyAvLyBVcGRhdGUgcmVzdWx0IHRvIG1ha2Ugc3VyZSB3ZSBkaWQgbm90IG1pc3MgYW55IHF1ZXJ5IHVwZGF0ZXNcbiAgICAvLyBiZXR3ZWVuIGNyZWF0aW5nIHRoZSBvYnNlcnZlciBhbmQgc3Vic2NyaWJpbmcgdG8gaXQuXG5cbiAgICBvYnNlcnZlci51cGRhdGVSZXN1bHQoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgbW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB1bnN1YnNjcmliZSgpO1xuICAgIH07XG4gIH0sIFtlcnJvclJlc2V0Qm91bmRhcnksIG9ic2VydmVyXSk7XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgLy8gRG8gbm90IG5vdGlmeSBvbiB1cGRhdGVzIGJlY2F1c2Ugb2YgY2hhbmdlcyBpbiB0aGUgb3B0aW9ucyBiZWNhdXNlXG4gICAgLy8gdGhlc2UgY2hhbmdlcyBzaG91bGQgYWxyZWFkeSBiZSByZWZsZWN0ZWQgaW4gdGhlIG9wdGltaXN0aWMgcmVzdWx0LlxuICAgIG9ic2VydmVyLnNldE9wdGlvbnMoZGVmYXVsdGVkT3B0aW9ucywge1xuICAgICAgbGlzdGVuZXJzOiBmYWxzZVxuICAgIH0pO1xuICB9LCBbZGVmYXVsdGVkT3B0aW9ucywgb2JzZXJ2ZXJdKTsgLy8gSGFuZGxlIHN1c3BlbnNlXG5cbiAgaWYgKGRlZmF1bHRlZE9wdGlvbnMuc3VzcGVuc2UgJiYgcmVzdWx0LmlzTG9hZGluZykge1xuICAgIHRocm93IG9ic2VydmVyLmZldGNoT3B0aW1pc3RpYyhkZWZhdWx0ZWRPcHRpb25zKS50aGVuKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uU3VjY2VzcyhkYXRhKTtcbiAgICAgIGRlZmF1bHRlZE9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZChkYXRhLCBudWxsKTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGVycm9yUmVzZXRCb3VuZGFyeS5jbGVhclJlc2V0KCk7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGRlZmF1bHRlZE9wdGlvbnMub25FcnJvcihlcnJvcik7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogZGVmYXVsdGVkT3B0aW9ucy5vblNldHRsZWQodW5kZWZpbmVkLCBlcnJvcik7XG4gICAgfSk7XG4gIH0gLy8gSGFuZGxlIGVycm9yIGJvdW5kYXJ5XG5cblxuICBpZiAocmVzdWx0LmlzRXJyb3IgJiYgIWVycm9yUmVzZXRCb3VuZGFyeS5pc1Jlc2V0KCkgJiYgIXJlc3VsdC5pc0ZldGNoaW5nICYmIHNob3VsZFRocm93RXJyb3IoZGVmYXVsdGVkT3B0aW9ucy5zdXNwZW5zZSwgZGVmYXVsdGVkT3B0aW9ucy51c2VFcnJvckJvdW5kYXJ5LCBbcmVzdWx0LmVycm9yLCBvYnNlcnZlci5nZXRDdXJyZW50UXVlcnkoKV0pKSB7XG4gICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICB9IC8vIEhhbmRsZSByZXN1bHQgcHJvcGVydHkgdXNhZ2UgdHJhY2tpbmdcblxuXG4gIGlmIChkZWZhdWx0ZWRPcHRpb25zLm5vdGlmeU9uQ2hhbmdlUHJvcHMgPT09ICd0cmFja2VkJykge1xuICAgIHJlc3VsdCA9IG9ic2VydmVyLnRyYWNrUmVzdWx0KHJlc3VsdCwgZGVmYXVsdGVkT3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufSIsICJpbXBvcnQgeyBRdWVyeU9ic2VydmVyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBwYXJzZVF1ZXJ5QXJncyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgdXNlQmFzZVF1ZXJ5IH0gZnJvbSAnLi91c2VCYXNlUXVlcnknOyAvLyBIT09LXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gIHZhciBwYXJzZWRPcHRpb25zID0gcGFyc2VRdWVyeUFyZ3MoYXJnMSwgYXJnMiwgYXJnMyk7XG4gIHJldHVybiB1c2VCYXNlUXVlcnkocGFyc2VkT3B0aW9ucywgUXVlcnlPYnNlcnZlcik7XG59IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQmFkZ2UsIEV1aUljb259IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7QnJlYWRjcnVtYlByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIEJyZWFkY3J1bWJQcmVzZW50YXRpb24ocHJvcHM6IEJyZWFkY3J1bWJQcmVzZW50YXRpb25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KHByb3BzLm9udG9sb2d5SWQgfHwgXCJcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQpfX0+XG4gICAgICAgICAgICAgICAgPEV1aUJhZGdlIGNsYXNzTmFtZT17cHJvcHMub250b2xvZ3lJZCA/IFwiYnJlYWRjcnVtYiBjbGlja2FibGUtYnJlYWRjcnVtYlwiIDogXCJicmVhZGNydW1iXCJ9IGNvbG9yPXtwcm9wcy5jb2xvckZpcnN0IHx8IFwicHJpbWFyeVwifT5cbiAgICAgICAgICAgICAgICAgICAge3Byb3BzLm9udG9sb2d5TmFtZSA/IHByb3BzLm9udG9sb2d5TmFtZS50b1VwcGVyQ2FzZSgpIDogXCJObyBvbnRvbG9neSBuYW1lIGF2YWlsYWJsZVwifVxuICAgICAgICAgICAgICAgIDwvRXVpQmFkZ2U+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICZuYnNwOzxFdWlJY29uIHR5cGU9XCJhcnJvd1JpZ2h0XCIvPiZuYnNwO1xuICAgICAgICAgICAgPEV1aUJhZGdlIGNsYXNzTmFtZT1cImJyZWFkY3J1bWJcIiBjb2xvcj17cHJvcHMuY29sb3JTZWNvbmQgfHwgXCJzdWNjZXNzXCJ9PlxuICAgICAgICAgICAgICAgIHtwcm9wcy5zaG9ydEZvcm0gPyBwcm9wcy5zaG9ydEZvcm0udG9VcHBlckNhc2UoKSA6IFwiTm8gc2hvcnQgZm9ybSBhdmFpbGFibGVcIn1cbiAgICAgICAgICAgIDwvRXVpQmFkZ2U+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQnJlYWRjcnVtYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpQ2FyZCwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtPbnRvbG9naWVzfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtEYXRhQ29udGVudFdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5mdW5jdGlvbiBEYXRhQ29udGVudFdpZGdldChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgcGFyYW1ldGVyLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBvbnRvbG9naWVzRGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNFcnJvcixcbiAgICBkYXRhVXBkYXRlZEF0XG4gIH0gPSB1c2VRdWVyeTxPbnRvbG9naWVzPihcbiAgICBbXCJvbnRvbG9naWVzRGF0YVwiLCBhcGksIHBhcmFtZXRlcl0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRPbnRvbG9naWVzRGF0YShcbiAgICAgICAgcHJvcHMucGFyYW1ldGVyXG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RXVpQ2FyZFxuICAgICAgICB0aXRsZT1cIkRhdGEgQ29udGVudFwiXG4gICAgICAgIGRlc2NyaXB0aW9uPXtkYXRhVXBkYXRlZEF0ID8gYFVwZGF0ZWQgJHtuZXcgRGF0ZShkYXRhVXBkYXRlZEF0KS50b0xvY2FsZVN0cmluZygpfWAgOiBcIlwifVxuICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgID5cbiAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgIHsoaXNFcnJvcikgJiYgPEV1aVRleHQ+Tm8gZGF0YSBjb250ZW50IGF2YWlsYWJsZTwvRXVpVGV4dD59XG4gICAgICAgICAge2lzTG9hZGluZ1xuICAgICAgICAgICAgPyA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgICAgOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICB7KG9udG9sb2dpZXNEYXRhPy5nZXRUb3RhbE9udG9sb2dpZXMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0VG90YWxPbnRvbG9naWVzKCkudG9Mb2NhbGVTdHJpbmcoKX0gb250b2xvZ2llcyBhbmQgdGVybWlub2xvZ2llczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19Pm9udG9sb2d5IG51bWJlciBub3QgYXZhaWxhYmxlPC9saT4pfVxuICAgICAgICAgICAgICB7KG9udG9sb2dpZXNEYXRhPy5nZXROdW1DbGFzc2VzKClcbiAgICAgICAgICAgICAgICA/IDxsaT57b250b2xvZ2llc0RhdGE/LmdldE51bUNsYXNzZXMoKS50b0xvY2FsZVN0cmluZygpfSB0ZXJtczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PnRlcm0gbnVtYmVyIG5vdCBhdmFpbGFibGU8L2xpPil9XG4gICAgICAgICAgICAgIHsob250b2xvZ2llc0RhdGE/LmdldE51bVByb3BlcnRpZXMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0TnVtUHJvcGVydGllcygpLnRvTG9jYWxlU3RyaW5nKCl9IHByb3BlcnRpZXM8L2xpPlxuICAgICAgICAgICAgICAgIDogPGxpIHN0eWxlPXt7IGZvbnRTdHlsZTogXCJpdGFsaWNcIiB9fT5wcm9wZXJ0eSBudW1iZXIgbm90IGF2YWlsYWJsZTwvbGk+KX1cbiAgICAgICAgICAgICAgeyhvbnRvbG9naWVzRGF0YT8uZ2V0TnVtSW5kaXZpZHVhbHMoKVxuICAgICAgICAgICAgICAgID8gPGxpPntvbnRvbG9naWVzRGF0YT8uZ2V0TnVtSW5kaXZpZHVhbHMoKS50b0xvY2FsZVN0cmluZygpfSBpbmRpdmlkdWFsczwvbGk+XG4gICAgICAgICAgICAgICAgOiA8bGkgc3R5bGU9e3sgZm9udFN0eWxlOiBcIml0YWxpY1wiIH19PmluZGl2aWR1YWwgbnVtYmVyIG5vdCBhdmFpbGFibGU8L2xpPil9XG4gICAgICAgICAgICAgIHsvKiA8bGk+VmVyc2lvbiB7Tk9UX0FWQUlMQUJMRX08L2xpPiAqL30gey8qIFRPRE8gaG93IHRvIGdldCBBUEkgdmVyc2lvbj8gKi99XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgPC9FdWlDYXJkPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEYXRhQ29udGVudChwcm9wczogRGF0YUNvbnRlbnRXaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWREYXRhQ29udGVudFdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRGF0YUNvbnRlbnRXaWRnZXQocHJvcHM6IERhdGFDb250ZW50V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8RGF0YUNvbnRlbnRXaWRnZXRcbiAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBEYXRhQ29udGVudFdpZGdldCwgY3JlYXRlRGF0YUNvbnRlbnQgfTtcbiIsICJpbXBvcnQgUmVhY3QsIHtSZWFjdEVsZW1lbnR9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlDYXJkLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlTcGFjZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gJ3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7YXNBcnJheSwgY2FwaXRhbGl6ZSwgZGVDYW1lbENhc2UsIGRlVW5kZXJzY29yZSwgZ2V0RW50aXR5VHlwZU5hbWUsIHJhbmRvbVN0cmluZywgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5fSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYLCBnZXRFbnRpdHlMaW5rSlNYLCBnZXRSZWlmaWVkSlNYLCBnZXRUb29sdGlwfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQge1Byb3BlcnR5LCBUaGluZywgQ2xhc3MsIEVudGl0eSwgSW5kaXZpZHVhbH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7aXNDbGFzcywgaXNQcm9wZXJ0eSwgaXNJbmRpdmlkdWFsfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7RW50aXR5SW5mb1dpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0hBU19USVRMRSA9IHRydWU7XG5cbmZ1bmN0aW9uIEVudGl0eUluZm9XaWRnZXQocHJvcHM6IEVudGl0eUluZm9XaWRnZXRQcm9wcykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7IGFwaSwgaXJpLCBvbnRvbG9neUlkLCBoYXNUaXRsZSA9IERFRkFVTFRfSEFTX1RJVExFLCBlbnRpdHlUeXBlLCBwYXJhbWV0ZXIsIHNob3dCYWRnZXMgLCB1c2VMZWdhY3ksIG9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSAsIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogZW50aXR5LFxuICAgICAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ0VudGl0eSxcbiAgICAgICAgaXNTdWNjZXNzOiBpc1N1Y2Nlc3NFbnRpdHksXG4gICAgICAgIGlzRXJyb3I6IGlzRXJyb3JFbnRpdHksXG4gICAgICAgIGVycm9yOiBlcnJvckVudGl0eSxcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICAgIFtcbiAgICAgICAgICAgIFwiZW50aXR5SW5mb1wiLFxuICAgICAgICAgICAgcHJvcHNcbiAgICAgICAgXSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gZ2V0TGFiZWxTZWN0aW9uKGVudGl0eTogRW50aXR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtlbnRpdHkuZ2V0TGFiZWwoKSAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkxhYmVsOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtlbnRpdHkuZ2V0TGFiZWwoKX1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48RXVpU3BhY2VyLz48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTeW5vbnltc1NlY3Rpb24oZW50aXR5OiBFbnRpdHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2VudGl0eS5nZXRTeW5vbnltcygpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5TeW5vbnltczo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZW50aXR5LmdldFN5bm9ueW1zKCkubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntlbnRpdHkuZ2V0U3lub255bXMoKS5tYXAoKHN5bm9ueW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17c3lub255bS52YWx1ZX0+e2dldFJlaWZpZWRKU1goZW50aXR5LCBzeW5vbnltLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBlbnRpdHkuZ2V0U3lub255bXMoKVswXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEhhc0tleVNlY3Rpb24odGVybTogQ2xhc3MpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHRlcm0uZ2V0SGFzS2V5KCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHtrZXlzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5IYXMgS2V5OjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtrZXlzLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57a2V5cy5tYXAoKGtleXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHRlcm0sIHRlcm0uZ2V0TGlua2VkRW50aXRpZXMoKSwga2V5cywgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldENsYXNzRXhwcmVzc2lvbkpTWCh0ZXJtLCB0ZXJtLmdldExpbmtlZEVudGl0aWVzKCksIGtleXNbMF0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTdWJzZXRzU2VjdGlvbih0ZXJtOiBDbGFzcykgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7IHRlcm0uZ2V0U3Vic2V0cygpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Yj5JbiBTdWJzZXRzOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0ZXJtLmdldFN1YnNldHMoKS5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e3Rlcm0uZ2V0U3Vic2V0cygpLm1hcCgoc3Vic2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gaWQ9e3N1YnNldCArIHJhbmRvbVN0cmluZygpfT57Z2V0RW50aXR5TGlua0pTWCh0ZXJtLCB0ZXJtLmdldExpbmtlZEVudGl0aWVzKCksIHN1YnNldCwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldEVudGl0eUxpbmtKU1godGVybSwgdGVybS5nZXRMaW5rZWRFbnRpdGllcygpLCB0ZXJtLmdldFN1YnNldHMoKVswXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFByb3BlcnR5Q2hhcmFjdGVyaXN0aWNzU2VjdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyaXN0aWNzID0gcHJvcGVydHkuZ2V0UmRmVHlwZXMoKS5tYXAodHlwZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHtcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjRnVuY3Rpb25hbFByb3BlcnR5JzogJ0Z1bmN0aW9uYWwnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNJbnZlcnNlRnVuY3Rpb25hbFByb3BlcnR5JzogJ0ludmVyc2UgRnVuY3Rpb25hbCcsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1RyYW5zaXRpdmVQcm9wZXJ0eSc6ICdUcmFuc2l0aXZlJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjU3ltbWV0cmljUHJvcGVydHknOiAnU3ltbWV0cmljJyxcbiAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjQXN5bW1ldHJpY1Byb3BlcnR5JzogJ0FzeW1tZXRyaWMnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNSZWZsZXhpdmVQcm9wZXJ0eSc6ICdSZWZsZXhpdmUnLFxuICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNJcnJlZmxleGl2ZVByb3BlcnR5JzogJ0lycmVmbGV4aXZlJyxcbiAgICAgICAgICAgIH0pW3R5cGVdO1xuICAgICAgICB9KS5maWx0ZXIoKHR5cGUpID0+ICEhdHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2NoYXJhY3RlcmlzdGljcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q2hhcmFjdGVyaXN0aWNzOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGFyYWN0ZXJpc3RpY3MubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntjaGFyYWN0ZXJpc3RpY3MubWFwKChjaGFyYWN0ZXJpc3RpYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntjaGFyYWN0ZXJpc3RpY308L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KCl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntjaGFyYWN0ZXJpc3RpY3NbMF19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERvbWFpblNlY3Rpb24ocHJvcGVydHk6IFByb3BlcnR5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRvbWFpbnMgPSBwcm9wZXJ0eS5nZXREb21haW4oKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge2RvbWFpbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICA8PjxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPkRvbWFpbjo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZG9tYWlucy5sZW5ndGggPiAxID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+e2RvbWFpbnMubWFwKChkb21haW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZG9tYWlucywgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX08L3VsPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZG9tYWluc1swXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFJhbmdlU2VjdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcmFuZ2VzID0gcHJvcGVydHkuZ2V0UmFuZ2UoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3Jhbmdlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPlJhbmdlOjwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtyYW5nZXMubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPntyYW5nZXMubWFwKChyYW5nZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCByYW5nZXMsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPntnZXRDbGFzc0V4cHJlc3Npb25KU1gocHJvcGVydHksIHByb3BlcnR5LmdldExpbmtlZEVudGl0aWVzKCksIHJhbmdlc1swXSwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEluZGl2aWR1YWxQcm9wZXJ0eUFzc2VydGlvbnNTZWN0aW9uKGluZGl2aWR1YWw6IEluZGl2aWR1YWwpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlJcmlzID0gT2JqZWN0LmtleXMoaW5kaXZpZHVhbC5wcm9wZXJ0aWVzKTtcbiAgICAgICAgY29uc3QgbmVnYXRpdmVQcm9wZXJ0aWVzID0gcHJvcGVydHlJcmlzLmZpbHRlcigoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aChcIm5lZ2F0aXZlUHJvcGVydHlBc3NlcnRpb24rXCIpKTtcbiAgICAgICAgY29uc3Qgb2JqZWN0UHJvcGVydGllcyA9IHByb3BlcnR5SXJpcy5maWx0ZXIoKGtleSkgPT4gaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLmdldChrZXkpICYmIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KT8udHlwZS5pbmRleE9mKFwib2JqZWN0UHJvcGVydHlcIikgIT09IC0xKVxuICAgICAgICBjb25zdCBkYXRhUHJvcGVydGllcyA9IHByb3BlcnR5SXJpcy5maWx0ZXIoKGtleSkgPT4gaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLmdldChrZXkpICYmIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoa2V5KT8udHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMSlcbiAgICAgICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25zOiBSZWFjdEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgICAgIGZvcihjb25zdCBpcmkgb2Ygb2JqZWN0UHJvcGVydGllcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gYXNBcnJheShpbmRpdmlkdWFsLnByb3BlcnRpZXNbaXJpXSk7XG4gICAgICAgICAgICBmb3IoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBpcmksIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAge3R5cGVvZiB2ID09PSBcInN0cmluZ1wiICYmIHYuaW5jbHVkZXMoXCJodHRwXCIpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3tmb250U2l6ZTogXCJtZWRpdW1cIiwgY29sb3I6IFwiZ3JheVwifX0+JiM5NjU2Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRFbnRpdHlMaW5rSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgdiwgc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRUb29sdGlwKCh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiA/IHYgOiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiB2LnZhbHVlID8gSlNPTi5zdHJpbmdpZnkodi52YWx1ZSkgOiBKU09OLnN0cmluZ2lmeSh2KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvcihjb25zdCBpcmkgb2YgZGF0YVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoaW5kaXZpZHVhbC5wcm9wZXJ0aWVzW2lyaV0pO1xuICAgICAgICAgICAgZm9yKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgaXJpLCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHs8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiYjOTY1Njs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB2LCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPn1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yKGNvbnN0IGtleSBvZiBuZWdhdGl2ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlyaSA9IGtleS5zbGljZShcIm5lZ2F0aXZlUHJvcGVydHlBc3NlcnRpb24rXCIubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtlZEVudGl0eSA9IGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQoaXJpKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RhdGFQcm9wZXJ0eSA9IGxpbmtlZEVudGl0eT8udHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMTtcbiAgICAgICAgICAgIGNvbnN0IGhhc09iamVjdFByb3BlcnR5ID0gbGlua2VkRW50aXR5Py50eXBlLmluZGV4T2YoXCJvYmplY3RQcm9wZXJ0eVwiKSAhPT0gLTE7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBhc0FycmF5KGluZGl2aWR1YWwucHJvcGVydGllc1trZXldKTtcblxuICAgICAgICAgICAgZm9yKGNvbnN0IHYgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+bm90PC9pPntcIiBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBpcmksIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAge3R5cGVvZiB2ID09PSBcInN0cmluZ1wiICYmIHYuaW5jbHVkZXMoXCJodHRwXCIpID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e2ZvbnRTaXplOiBcIm1lZGl1bVwiLCBjb2xvcjogXCJncmF5XCJ9fT4mIzk2NTY7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEVudGl0eUxpbmtKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB2LCBzaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT2JqZWN0UHJvcGVydHkgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VG9vbHRpcCgodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgPyB2IDogdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodikgJiYgdi52YWx1ZSA/IEpTT04uc3RyaW5naWZ5KHYudmFsdWUpIDogSlNPTi5zdHJpbmdpZnkodikpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNEYXRhUHJvcGVydHkgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiYjOTY1Njs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWChpbmRpdmlkdWFsLCBpbmRpdmlkdWFsLmdldExpbmtlZEVudGl0aWVzKCksIHYsIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3Byb3BlcnR5QXNzZXJ0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIDw+PEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+UHJvcGVydHkgYXNzZXJ0aW9uczo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cHJvcGVydHlBc3NlcnRpb25zLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD57cHJvcGVydHlBc3NlcnRpb25zLm1hcCgocGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57cGF9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgpfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57cHJvcGVydHlBc3NlcnRpb25zWzBdfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT48Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRBbm5vdGF0aW9uU2VjdGlvbih0aGluZzogVGhpbmcpIDogUmVhY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAge3RoaW5nLmdldEFubm90YXRpb25QcmVkaWNhdGVzKCkubWFwKChhbm5vS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFubm9zID0gdGhpbmcuZ2V0QW5ub3RhdGlvbkJ5SWQoYW5ub0tleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGFubm9zLmxlbmd0aCA9PSAwKSByZXR1cm4gPD48Lz47XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0ga2V5PXthbm5vS2V5fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPntjYXBpdGFsaXplKGRlVW5kZXJzY29yZShkZUNhbWVsQ2FzZSh0aGluZy5nZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGFubm9LZXkpKSkpfTo8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YW5ub3MubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPnthbm5vcy5tYXAoKGFubm90YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSBpZD17YW5ub3RhdGlvbi52YWx1ZX0+e2dldFJlaWZpZWRKU1godGhpbmcsIGFubm90YXRpb24sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UmVpZmllZEpTWCh0aGluZywgYW5ub3NbMF0sIHNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAgPEV1aUNhcmRcbiAgICAgICAgICAgICAgICB0aXRsZT17aGFzVGl0bGUgPyAoZW50aXR5VHlwZSA/IGNhcGl0YWxpemUoZ2V0RW50aXR5VHlwZU5hbWUoZW50aXR5VHlwZSkpIDogKGlzU3VjY2Vzc0VudGl0eSAmJiBlbnRpdHkpID8gY2FwaXRhbGl6ZShlbnRpdHkuZ2V0VHlwZSgpKSA6IFwiXCIpICArIFwiIEluZm9ybWF0aW9uXCIgOiBcIlwifVxuICAgICAgICAgICAgICAgIGxheW91dD1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAge2lzTG9hZGluZ0VudGl0eSAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17J3MnfS8+fVxuICAgICAgICAgICAgICAgIHtpc1N1Y2Nlc3NFbnRpdHkgJiYgZW50aXR5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2dldExhYmVsU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICAgICAge2dldFN5bm9ueW1zU2VjdGlvbihlbnRpdHkpfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNDbGFzcyhlbnRpdHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldFN1YnNldHNTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRIYXNLZXlTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1Byb3BlcnR5KGVudGl0eSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0UHJvcGVydHlDaGFyYWN0ZXJpc3RpY3NTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXREb21haW5TZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRSYW5nZVNlY3Rpb24oZW50aXR5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAge2lzSW5kaXZpZHVhbChlbnRpdHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2dldEluZGl2aWR1YWxQcm9wZXJ0eUFzc2VydGlvbnNTZWN0aW9uKGVudGl0eSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRBbm5vdGF0aW9uU2VjdGlvbihlbnRpdHkpfVxuICAgICAgICAgICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtpc0Vycm9yRW50aXR5ICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3JFbnRpdHksIFwiaW5mb3JtYXRpb25cIil9PC9FdWlUZXh0Pn1cbiAgICAgICAgICAgIDwvRXVpQ2FyZD5cbiAgICAgICAgPC8+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRW50aXR5SW5mbyhwcm9wczogRW50aXR5SW5mb1dpZGdldFByb3BzLCBjb250YWluZXI6IGFueSwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkRW50aXRpeUluZm9XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEVudGl0aXlJbmZvV2lkZ2V0KHByb3BzOiBFbnRpdHlJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEVudGl0eUluZm9XaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBoYXNUaXRsZT17cHJvcHMuaGFzVGl0bGV9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcz17cHJvcHMuc2hvd0JhZGdlc31cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IEVudGl0eUluZm9XaWRnZXQsIGNyZWF0ZUVudGl0eUluZm8gfTtcbiIsICJpbXBvcnQge1RoaW5nfSBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgUmVhY3QsIHtSZWFjdEVsZW1lbnR9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlJY29uVGlwLCBFdWlJY29ufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge2FzQXJyYXksIGluZmVyVHlwZUZyb21UeXBlQXJyYXksIHJhbmRvbVN0cmluZ30gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcbmltcG9ydCBcIi4uL3N0eWxlL3NlbWxvb2twLXN0eWxlcy5jc3NcIjtcbmltcG9ydCB7T25OYXZpZ2F0ZXN9IGZyb20gXCIuLi9hcHAvdHlwZXNcIjtcblxuY29uc3QgREVGQVVMVF9TSE9XX0JBREdFUyA9IHRydWU7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sdGlwKHRleHQ6IHN0cmluZykgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlJY29uVGlwIHR5cGU9e1wiaUluQ2lyY2xlXCJ9IGNvbG9yPXtcInN1YmR1ZWRcIn0gY29udGVudD17dGV4dH0vPlxuICAgICk7XG59XG5cbi8qKlxuICogT05MWSBVU0FCTEUgV0lUSCBWMi1BUEkgRU5USVRJRVNcbiAqXG4gKiBSZXR1cm5zIFJlaWZpZWQgYXhpb21zIGFzIEpTWCBlbGVtZW50IChzaW1pbGFyIHRvIE1ldGFkYXRhVG9vbHRpcCBjb21wb25lbnQgaW4gb2xzNCBwcm9qZWN0KVxuICogQHBhcmFtIHBhcmVudEVudGl0eSB0aGUgc3Vycm91bmRpbmcgZW50aXR5IG9mIHRoZSBheGlvbXMgYXJyYXkgKGZvciBldmVudHVhbCBsYWJlbCBmZXRjaGluZylcbiAqIEBwYXJhbSBheGlvbXNEaWN0IHRoZSBlbnRpdGllcyBheGlvbXMgaW4gdGhlIGZvcm1hdCByZXR1cm5lZCBieSBSZWlmaWVkOjpnZXRNZXRhZGF0YSgpXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGF4aW9tcyBpbiBKU1ggZm9ybWF0IHRvIGRpc3BsYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF4aW9tc0luZm9ybWF0aW9uSlNYKHBhcmVudEVudGl0eTogVGhpbmcsIGF4aW9tc0RpY3Q6IGFueSB8IG51bGwpIDogUmVhY3RFbGVtZW50IHtcbiAgICBjb25zdCBheGlvbXNUZXh0ID0gT2JqZWN0LmtleXMoYXhpb21zRGljdClcbiAgICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IHBhcmVudEVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLmdldExhYmVsRm9ySXJpKGtleSkgfHwga2V5O1xuICAgICAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgXCIqXCIgKyBheGlvbXNEaWN0W2tleV0gKyBcIiAoXCIgKyBsYWJlbCArIFwiKVwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIFwiXCI7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiXFxuXCIpXG5cbiAgICByZXR1cm4gZ2V0VG9vbHRpcChheGlvbXNUZXh0KTtcbn1cblxuLyoqXG4gKiBPTkxZIFVTQUJMRSBXSVRIIFYyLUFQSSBFTlRJVElFU1xuICpcbiAqIFJldHVybnMgYSBsYWJlbGVkIGVudGl0eSBsaW5rIGFzIEpTWCBlbGVtZW50XG4gKiBAcGFyYW0gcGFyZW50RW50aXR5IHRoZSBlbnRpdHkgb2JqZWN0IGluIHdoaWNoIHRoZSBsaW5rZWQgZW50aXR5IGV4aXN0c1xuICogQHBhcmFtIGxpbmtlZEVudGl0aWVzIHRoZSBsaW5rZWRFbnRpdGllcyBvYmplY3QgKGV4aXN0cyBhcyBwYXJhbSBiZWNhdXNlIGl0IGlzIG5lY2Vzc2FyeSB0aGF0IHRoZSBlbnRpdHkgaGFzIGEgbGlua2VkRW50aXRpZXMgYmxvY2sgaW4gcHJvcGVydGllcylcbiAqIEBwYXJhbSBpcmkgICB0aGUgZW50aXRpZXMnIGlyaVxuICogQHBhcmFtIHNob3dCYWRnZXMgICAgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKiBAcmV0dXJucyBSZWFjdEVsZW1lbnQgdGhlIGVudGl0eSBsaW5rIEpTWFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXR5TGlua0pTWChwYXJlbnRFbnRpdHk6IFRoaW5nLCBsaW5rZWRFbnRpdGllczogTGlua2VkRW50aXRpZXMsIGlyaTogc3RyaW5nLCBzaG93QmFkZ2VzIDogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgY29uc3QgbGFiZWwgPSBsaW5rZWRFbnRpdGllcy5nZXRMYWJlbEZvcklyaShpcmkpIHx8IGlyaS5zcGxpdChcIi9cIikucG9wKCkgfHwgaXJpO1xuICAgIGNvbnN0IGxpbmtlZEVudGl0eSA9IGxpbmtlZEVudGl0aWVzLmdldChpcmkpO1xuICAgIGNvbnN0IGxvY2FsT250b2xvZ3kgPSBwYXJlbnRFbnRpdHkuZ2V0T250b2xvZ3lJZCgpO1xuXG4gICAgLy8gcmVmZXJlbmNlIHRvIHNlbGY6IGp1c3QgZGlzcGxheSBsYWJlbCBiZWNhdXNlIHdlIGFyZSBhbHJlYWR5IG9uIHRoYXQgcGFnZVxuICAgIGlmIChwYXJlbnRFbnRpdHkuZ2V0VHlwZSgpICE9PSBcIm9udG9sb2d5XCIgJiYgaXJpID09PSBwYXJlbnRFbnRpdHk/LmdldElyaSgpKSB7XG4gICAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJoaWdobGlnaHRcIj57cGFyZW50RW50aXR5LmdldExhYmVsKCl9PC9zcGFuPlxuICAgIH1cblxuICAgIGlmICghbGlua2VkRW50aXR5KSB7XG4gICAgICAgIGlmKGlyaS5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e2lyaX0+e2xhYmVsfTwvYT47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBTbyBmYXIgb25seSBrbm93biBvY2N1cnJlbmNlIG9mIHRoaXMgYnJhbmNoIGlzIGZvciBvd2wjVGhpbmdcbiAgICAgICAgICAgIHJldHVybiA8c3Bhbj57bGFiZWx9PC9zcGFuPjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG90aGVyRGVmaW5lZEJ5ID0gbGlua2VkRW50aXR5W1wiZGVmaW5lZEJ5XCJdID8gbGlua2VkRW50aXR5W1wiZGVmaW5lZEJ5XCJdLmZpbHRlcigoZWxlbTogYW55KSA9PiB7cmV0dXJuIGVsZW0gIT09IGxvY2FsT250b2xvZ3l9KSA6IFtdO1xuICAgIGNvbnN0IGxpbmtlZEVudGl0eVR5cGUgPSBsaW5rZWRFbnRpdHlbXCJ0eXBlXCJdID8gaW5mZXJUeXBlRnJvbVR5cGVBcnJheShsaW5rZWRFbnRpdHlbXCJ0eXBlXCJdKSA6IHBhcmVudEVudGl0eS5nZXRUeXBlKCk7XG5cbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRsYWIuemJtZWQuZGUva20vc2VtbG9va3Avb2xzNC8tL2Jsb2IvZGV2L2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL0VudGl0eUxpbmsudHN4IGZvciBvcmlnaW5hbCByZWZlcmVuY2VcbiAgICBpZihvdGhlckRlZmluZWRCeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYobGlua2VkRW50aXR5W1wiaGFzTG9jYWxEZWZpbml0aW9uXCJdKSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQ+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhpcyBvbnRvbG9neSBhbmQgPG9udG9sb2d5SWQ+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoZSBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eShsb2NhbE9udG9sb2d5LCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+e2xhYmVsfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJuby1kZWNvcmF0aW9uXCIgb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neShvdGhlckRlZmluZWRCeVswXSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19Pns8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntvdGhlckRlZmluZWRCeVswXS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj59PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBzaG93IDxsYWJlbD4gPG9udG9sb2d5SWQ+IGxpbmtpbmcgdG8gdGhlIHRlcm0gaW4gdGhlIGRlZmluaW5nIG9udG9sb2d5XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KG90aGVyRGVmaW5lZEJ5WzBdLCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+e2xhYmVsfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJuby1kZWNvcmF0aW9uXCIgb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neShvdGhlckRlZmluZWRCeVswXSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19Pns8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntvdGhlckRlZmluZWRCeVswXS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj59PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZihvdGhlckRlZmluZWRCeS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmKGxpbmtlZEVudGl0eVtcImhhc0xvY2FsRGVmaW5pdGlvblwiXSkge1xuICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+IDxvbnRvbG9neUlkMT4gPG9udG9sb2d5SWQyPiAuLi4gPG9udG9sb2d5SWROPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoaXMgb250b2xvZ3kgYW5kIDxvbnRvbG9neUlkST4gbGlua3MgdG8gdGhlIHRlcm0gaW4gdGhhdCBkZWZpbmluZyBvbnRvbG9neVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eShsb2NhbE9udG9sb2d5LCBsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+e2xhYmVsfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge290aGVyRGVmaW5lZEJ5Lm1hcCgoZWxlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cIm5vLWRlY29yYXRpb25cIiBrZXk9e3JhbmRvbVN0cmluZygpfSBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5KGVsZW0sIGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT57PHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57ZWxlbS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj59PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz4gOlxuICAgICAgICAgICAgICAgICAgICAgICAgPD48Lz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+PElDT04+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm1zJyBpcmkgYW5kIDxJQ09OPiBsaW5rcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e2lyaX0+e2xhYmVsfTwvYT5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwibm8tZGVjb3JhdGlvblwiIGtleT17cmFuZG9tU3RyaW5nKCl9IG9uQ2xpY2s9eygpID0+IHtpZihvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUpIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZShsaW5rZWRFbnRpdHlUeXBlLCB7aXJpLCBsYWJlbH0pfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm9udG9sb2d5LWJhZGdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpSWNvbiB0eXBlPXtcInNlYXJjaFwifSBzaXplPXtcInNcIn0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7b3RoZXJEZWZpbmVkQnkubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XCJvbnRvbG9naWVzXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICA8PjwvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZihsaW5rZWRFbnRpdHlbXCJoYXNMb2NhbERlZmluaXRpb25cIl0pIHtcbiAgICAgICAgICAgIC8vIHNob3cgPGxhYmVsPiB3aGVyZSA8bGFiZWw+IGxpbmtzIHRvIHRoZSB0ZXJtIGluIHRoaXMgb250b2xvZ3lcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBvbkNsaWNrPXsoKSA9PiB7aWYob25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5KSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkobG9jYWxPbnRvbG9neSwgbGlua2VkRW50aXR5VHlwZSwge2lyaSwgbGFiZWx9KX19PntsYWJlbH08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmKHBhcnNlSW50KGxpbmtlZEVudGl0eVtcIm51bUFwcGVhcnNJblwiXSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gc2hvdyA8bGFiZWw+PElDT04+IHdoZXJlIDxsYWJlbD4gbGlua3MgdG8gdGhlIHRlcm1zJyBpcmkgYW5kIDxJQ09OPiBsaW5rcyB0byBkaXNhbWJpZ3VhdGlvbiBwYWdlXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzTmFtZT1cImNsaWNrYWJsZVwiIGhyZWY9e2lyaX0+e2xhYmVsfTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QmFkZ2VzID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJuby1kZWNvcmF0aW9uXCIga2V5PXtyYW5kb21TdHJpbmcoKX0gb25DbGljaz17KCkgPT4ge2lmKG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSkgb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlKGxpbmtlZEVudGl0eVR5cGUsIHtpcmksIGxhYmVsfSl9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpSWNvbiB0eXBlPXtcInNlYXJjaFwifSBzaXplPXtcInNcIn0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xpbmtlZEVudGl0eVtcIm51bUFwcGVhcnNJblwiXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwYXJzZUludChsaW5rZWRFbnRpdHlbXCJudW1BcHBlYXJzSW5cIl0pID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIm9udG9sb2dpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIm9udG9sb2d5XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+PC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHNob3cgcmF3IGlyaVxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9XCJjbGlja2FibGVcIiBocmVmPXtsaW5rZWRFbnRpdHlbXCJ1cmxcIl0gfHwgaXJpfT57bGFiZWx9PC9hPlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogT05MWSBVU0FCTEUgV0lUSCBWMi1BUEkgRU5USVRJRVNcbiAqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgb25lIGVsZW1lbnQgb2YgYSBzZWN0aW9ucycgbGlzdCwgcG9zc2libHkgaW4gYSByZWN1cnNpdmUgZmFzaGlvbiBieSBwYXJzaW5nIHRoZSByZXNwb25zZSBvYmplY3QgYXQgdGhlIGN1cnJlbnRSZXNwb25zZVBhdGggdG8gc2hvdyBNYW5jaGVzdGVyIHN5bnRheC5cbiAqIEBwYXJhbSBwYXJlbnRFbnRpdHkgdGhlIGVudGl0eSBvYmplY3QgcG9zc2Vzc2luZyB0aGUgd2hvbGUgcmVzcG9uc2Ugb2JqZWN0XG4gKiBAcGFyYW0gbGlua2VkRW50aXRpZXMgdGhlIGxpbmtlZEVudGl0aWVzIG9iamVjdCAoZXhpc3RzIGFzIHBhcmFtIGJlY2F1c2UgaXQgaXMgbmVjZXNzYXJ5IHRoYXQgdGhlIGVudGl0eSBoYXMgYSBsaW5rZWRFbnRpdGllcyBibG9jayBpbiBwcm9wZXJ0aWVzKVxuICogQHBhcmFtIGN1cnJlbnRSZXNwb25zZVBhdGggdGhlIGN1cnJlbnQgc3ViLW9iamVjdCBvZiB0aGUgcGFyZW50RW50aXRpZXMgcmVzcG9uc2Ugb2JqZWN0IHBhcnNlZCBhcyBjbGFzcyBleHByZXNzaW9uXG4gKiBAcGFyYW0gc2hvd0JhZGdlcyBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiBiYWRnZXMgc2hvdWxkIGJlIHNob3duXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMgZnVuY3Rpb25zIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBjbGlja2FibGUgaXRlbXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9FbnRpdHkgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIGVudGl0aWVzIG5hbWVcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9PbnRvbG9neSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gb250b2xvZ3kgYmFkZ2VcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGEgZGlzYW1iaWd1YXRpb24gYmFkZ2VcbiAqIEByZXR1cm5zIFJlYWN0RWxlbWVudCB0aGUgY2xhc3MgZXhwcmVzc2lvbiBKU1hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHk6IFRoaW5nLCBsaW5rZWRFbnRpdGllczogTGlua2VkRW50aXRpZXMsIGN1cnJlbnRSZXNwb25zZVBhdGg6IGFueSwgc2hvd0JhZGdlczogYm9vbGVhbiA9IERFRkFVTFRfU0hPV19CQURHRVMsIC8qVE9ETzogY2hhbmdlIHRvIHVzaW5nIChlbnRpdHkgOiBFbnRpdHlEYXRhKSBsYXRlciovIG9uTmF2aWdhdGVzOiBPbk5hdmlnYXRlcyk6IFJlYWN0RWxlbWVudCB7XG4gICAgbGV0IHJlc3VsdCA9IDw+PC8+O1xuXG4gICAgLy8gbWVyZ2UgbGlua2VkRW50aXRpZXMgb2YgY3VycmVudFJlc3BvbnNlUGF0aCBpZiBjdXJyZW50UmVzcG9uc2VQYXRoLmxpbmtlZEVudGl0aWVzIGlzIG5vdCB1bmRlZmluZWRcbiAgICBsaW5rZWRFbnRpdGllcyA9IGxpbmtlZEVudGl0aWVzLm1lcmdlV2l0aChjdXJyZW50UmVzcG9uc2VQYXRoLmxpbmtlZEVudGl0aWVzKTtcblxuICAgIGlmICh0eXBlb2YgY3VycmVudFJlc3BvbnNlUGF0aCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXN1bHQgPSBnZXRFbnRpdHlMaW5rSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGN1cnJlbnRSZXNwb25zZVBhdGgsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGN1cnJlbnRSZXNwb25zZVBhdGggPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoY3VycmVudFJlc3BvbnNlUGF0aCkgJiYgQXJyYXkuaXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoW1widHlwZVwiXSkgJiYgY3VycmVudFJlc3BvbnNlUGF0aFtcInR5cGVcIl0uaW5kZXhPZihcInJlaWZpY2F0aW9uXCIpICE9PSAtMSkgeyAvLyBUT0RPOiBDb25jYXQgd2l0aCBlbHNlIHBhcnQ/IFNlZSByZWxhdGVkRnJvbSAoTWFuY2hlc3RlciBzeW50YXggZG9lcyBub3QgZ2V0IGRpc3BsYXllZCwgYnV0IG5laXRoZXIgaW4gb2xzNClcbiAgICAgICAgLy8gY3VycmVudCByZXNwb25zZSBwYXRoIGlzIHJlaWZpY2F0aW9uXG4gICAgICAgIHJlc3VsdCA9IGdldFJlaWZpZWRKU1gocGFyZW50RW50aXR5LCBSZWlmaWVkLmZyb21Kc29uPGFueT4oY3VycmVudFJlc3BvbnNlUGF0aClbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICB9XG4gICAgZWxzZSB7IC8vIHR5cGUgPT09IFwib2JqZWN0XCJcbiAgICAgICAgY29uc3Qgc29tZVZhbHVlc0Zyb20gPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjc29tZVZhbHVlc0Zyb21cIl07XG4gICAgICAgIGNvbnN0IGFsbFZhbHVlc0Zyb20gPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjYWxsVmFsdWVzRnJvbVwiXTtcbiAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uT2YgPSBhc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNpbnRlcnNlY3Rpb25PZlwiXSk7XG4gICAgICAgIGNvbnN0IHVuaW9uT2YgPSBhc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN1bmlvbk9mXCJdKTtcbiAgICAgICAgY29uc3QgaGFzVmFsdWUgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzVmFsdWVcIl07XG4gICAgICAgIGNvbnN0IG1pbkNhcmRpbmFsaXR5ID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21pbkNhcmRpbmFsaXR5XCJdIHx8IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNtaW5RdWFsaWZpZWRDYXJkaW5hbGl0eVwiXTtcbiAgICAgICAgY29uc3QgbWF4Q2FyZGluYWxpdHkgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjbWF4Q2FyZGluYWxpdHlcIl0gfHwgY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI21heFF1YWxpZmllZENhcmRpbmFsaXR5XCJdO1xuICAgICAgICBjb25zdCBjYXJkaW5hbGl0eSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNjYXJkaW5hbGl0eVwiXSB8fCBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjcXVhbGlmaWVkQ2FyZGluYWxpdHlcIl07XG4gICAgICAgIGNvbnN0IGhhc1NlbGYgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzU2VsZlwiXTtcbiAgICAgICAgY29uc3QgY29tcGxlbWVudE9mID0gY3VycmVudFJlc3BvbnNlUGF0aFtcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2NvbXBsZW1lbnRPZlwiXTtcbiAgICAgICAgY29uc3Qgb25lT2YgPSBhc0FycmF5KGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNvbmVPZlwiXSk7XG4gICAgICAgIGNvbnN0IGludmVyc2VPZiA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNpbnZlcnNlT2ZcIl07XG4gICAgICAgIGNvbnN0IG9uUHJvcGVydHkgPSBjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjb25Qcm9wZXJ0eVwiXTtcbiAgICAgICAgY29uc3Qgb25EYXRhVHlwZSA9IGN1cnJlbnRSZXNwb25zZVBhdGhbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNvbkRhdGF0eXBlXCJdO1xuXG4gICAgICAgIGlmKG9uRGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBSZWFjdEVsZW1lbnRbXSA9IFtcbiAgICAgICAgICAgICAgICBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25EYXRhVHlwZSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICBjb25zdCB3aXRoUmVzdHJpY3Rpb25zID0gYXNBcnJheShjdXJyZW50UmVzcG9uc2VQYXRoW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjd2l0aFJlc3RyaWN0aW9uc1wiXSk7XG4gICAgICAgICAgICBpZih3aXRoUmVzdHJpY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKDw+WzwvPik7XG5cbiAgICAgICAgICAgICAgICBsZXQgaXNGaXJzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IHJlc3RyaWN0aW9uIG9mIHdpdGhSZXN0cmljdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNGaXJzdCkgaXNGaXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGVsZW1lbnRzLnB1c2goPD4sJm5ic3A7PC8+KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5FeGNsdXNpdmUgPSByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21pbkV4Y2x1c2l2ZVwiXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluSW5jbHVzaXZlID0gcmVzdHJpY3Rpb25bXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtaW5JbmNsdXNpdmVcIl07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heEV4Y2x1c2l2ZSA9IHJlc3RyaWN0aW9uW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjbWF4RXhjbHVzaXZlXCJdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhJbmNsdXNpdmUgPSByZXN0cmljdGlvbltcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI21heEluY2x1c2l2ZVwiXTtcblxuICAgICAgICAgICAgICAgICAgICBpZihtaW5FeGNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mZ3Q7IHttaW5FeGNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtaW5JbmNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mZ2U7IHttaW5JbmNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtYXhFeGNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mbHQ7IHttYXhFeGNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihtYXhJbmNsdXNpdmUpIGVsZW1lbnRzLnB1c2goPD4mbGU7IHttYXhJbmNsdXNpdmV9PC8+KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKDw+XTwvPik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdCA9IDw+e2VsZW1lbnRzLm1hcCgoZWxlbSkgPT4gPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+e2VsZW19PC9zcGFuPil9PC8+XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc29tZVZhbHVlc0Zyb20pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PiBzb21lIDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KHNvbWVWYWx1ZXNGcm9tKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhbGxWYWx1ZXNGcm9tKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gb25seSA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShhbGxWYWx1ZXNGcm9tKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpbnRlcnNlY3Rpb25PZi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiM0MDtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtIG9mIGludGVyc2VjdGlvbk9mKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpPiBhbmQgPC9pPlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgZWxlbSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiM0MTtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDxzcGFuPntlbGVtZW50cy5tYXAoKGVsZW0pID0+IDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9PntlbGVtfTwvc3Bhbj4pfTwvc3Bhbj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pb25PZi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiM0MDtcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtIG9mIHVuaW9uT2YpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGk+IG9yIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGVsZW0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICYjNDE7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8c3Bhbj57ZWxlbWVudHMubWFwKChlbGVtKSA9PiA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+KX08L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gdmFsdWUgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoaGFzVmFsdWUpWzBdLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1pbkNhcmRpbmFsaXR5KSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gbWluIDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KG1pbkNhcmRpbmFsaXR5KVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXhDYXJkaW5hbGl0eSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgb25Qcm9wZXJ0eSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgICAgICA8aSBzdHlsZT17e2NvbG9yOiBcInB1cnBsZVwifX0+IG1heCA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShtYXhDYXJkaW5hbGl0eSlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY2FyZGluYWxpdHkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIG9uUHJvcGVydHksIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX1cbiAgICAgICAgICAgICAgICAgICAgPGkgc3R5bGU9e3tjb2xvcjogXCJwdXJwbGVcIn19PiBleGFjdGx5IDwvaT5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBhc0FycmF5KGNhcmRpbmFsaXR5KVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChoYXNTZWxmKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIGxpbmtlZEVudGl0aWVzLCBvblByb3BlcnR5LCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT4gU2VsZiA8L2k+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgYXNBcnJheShoYXNTZWxmKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb21wbGVtZW50T2YpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8aT5ub3QgPC9pPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHBhcmVudEVudGl0eSwgbGlua2VkRW50aXRpZXMsIGFzQXJyYXkoY29tcGxlbWVudE9mKVswXSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvbmVPZi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3RFbGVtZW50W10gPSBbXG4gICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiMxMjM7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbSBvZiBvbmVPZikge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfSBjbGFzc05hbWU9XCJ0ZXh0LW5ldXRyYWwtZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAmIzQ0OyZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgZWxlbSwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgJiMxMjU7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICA8c3Bhbj57ZWxlbWVudHMubWFwKChlbGVtKSA9PiA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT57ZWxlbX08L3NwYW4+KX08L3NwYW4+XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGludmVyc2VPZikge1xuICAgICAgICAgICAgcmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxpIHN0eWxlPXt7Y29sb3I6IFwicHVycGxlXCJ9fT5pbnZlcnNlIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0gY2xhc3NOYW1lPVwidGV4dC1uZXV0cmFsLWRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAmIzQwO1xuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHtnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgaW52ZXJzZU9mLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9IGNsYXNzTmFtZT1cInRleHQtbmV1dHJhbC1kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJiM0MTtcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHNlY3Rpb24gbGlzdCBlbGVtZW50cyBzcGVjaWZpZWQgYXQgYGN1cnJlbnRSZXNwb25zZVBhdGhgXG4gKiBAcGFyYW0gcGFyZW50RW50aXR5XG4gKiBAcGFyYW0gbGlua2VkRW50aXRpZXNcbiAqIEBwYXJhbSBhcnJheVxuICogQHBhcmFtIHNob3dCYWRnZXNcbiAqIEBwYXJhbSBvbk5hdmlnYXRlcyBmdW5jdGlvbnMgZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIGNsaWNrYWJsZSBpdGVtc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gZW50aXRpZXMgbmFtZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBvbnRvbG9neSBiYWRnZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYSBkaXNhbWJpZ3VhdGlvbiBiYWRnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdGlvbkxpc3RKU1gocGFyZW50RW50aXR5OiBUaGluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzLCBhcnJheTogYW55W10sIHNob3dCYWRnZXM6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTLCAvKlRPRE86IGNoYW5nZSB0byB1c2luZyAoZW50aXR5IDogRW50aXR5RGF0YSkgbGF0ZXIqLyBvbk5hdmlnYXRlczogT25OYXZpZ2F0ZXMpOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICB7YXJyYXkubGVuZ3RoID09PSAxID8gKFxuICAgICAgICAgICAgICAgIDxwPntnZXRDbGFzc0V4cHJlc3Npb25KU1gocGFyZW50RW50aXR5LCBwYXJlbnRFbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgYXJyYXlbMF0sIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKX08L3A+XG4gICAgICAgICAgICApIDpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5Lm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfSA+e2dldENsYXNzRXhwcmVzc2lvbkpTWChwYXJlbnRFbnRpdHksIHBhcmVudEVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBpdGVtLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyl9PC9saT4pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdWw+fVxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG4vKipcbiAqIEluc2VydHMgbGlua3MgaW50byB0ZXh0IChwb3RlbnRpYWxseSB3aXRoIGxhYmVsIGluc3RlYWQgb2YgbGluayBkaXNwbGF5ZWQgaWYgbGluayBleGlzdHMgYXMga2V5IGluc2lkZSBsaW5rZWRFbnRpdGllcykgYW5kIHJldHVybnMgdGhlIHJlc3VsdGluZyBKU1ggZWxlbWVudFxuICogQHBhcmFtIHBhcmVudEVudGl0eSB0aGUgZW50aXR5IG9iamVjdCBwb3NzZXNzaW5nIHRoZSB3aG9sZSByZXNwb25zZSBvYmplY3RcbiAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IHRvIGluc2VydCBsaW5rcyBpbnRvXG4gKiBAcGFyYW0gbGlua2VkRW50aXRpZXMgdGhlIGxpbmtlZEVudGl0aWVzIG9iamVjdCAoaWYgdW5kZWZpbmVkLCBubyBsYWJlbHMgYXJlIGluZmVycmVkKVxuICogQHBhcmFtIHNob3dCYWRnZXMgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgYmFkZ2VzIHNob3VsZCBiZSBzaG93blxuICogQHBhcmFtIG9uTmF2aWdhdGVzIGZ1bmN0aW9ucyBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgY2xpY2thYmxlIGl0ZW1zXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRW50aXR5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBlbnRpdGllcyBuYW1lXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvT250b2xvZ3kgZnVuY3Rpb24gZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIG9uIGFuIG9udG9sb2d5IGJhZGdlXG4gKiBAcGFyYW0gb25OYXZpZ2F0ZXMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhIGRpc2FtYmlndWF0aW9uIGJhZGdlXG4gKi9cbmZ1bmN0aW9uIGFkZExpbmtzVG9UZXh0KHBhcmVudEVudGl0eTogVGhpbmcsIHRleHQ6IHN0cmluZywgbGlua2VkRW50aXRpZXM6IExpbmtlZEVudGl0aWVzIHwgdW5kZWZpbmVkLCBzaG93QmFkZ2VzOiBib29sZWFuID0gREVGQVVMVF9TSE9XX0JBREdFUywgLypUT0RPOiBjaGFuZ2UgdG8gdXNpbmcgKGVudGl0eSA6IEVudGl0eURhdGEpIGxhdGVyKi8gb25OYXZpZ2F0ZXM6IE9uTmF2aWdhdGVzKSB7XG4gICAgY29uc3QgbGlua3NUb1NwbGljZTogQXJyYXk8eyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlcjsgbGluazogUmVhY3RFbGVtZW50IH0+ID1cbiAgICAgICAgW107XG5cbiAgICBpZihsaW5rZWRFbnRpdGllcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIE9iamVjdC5rZXlzKGxpbmtlZEVudGl0aWVzLmxpbmtlZEVudGl0aWVzKSkge1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBsZXQgbiA9IHRleHQuaW5kZXhPZihlbnRpdHlJZCwgMCk7XG4gICAgICAgICAgICAgICAgbiAhPT0gLTE7XG4gICAgICAgICAgICAgICAgbiA9IHRleHQuaW5kZXhPZihlbnRpdHlJZCwgbilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxpbmtzVG9TcGxpY2UucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBuLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6IG4gKyBlbnRpdHlJZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGxpbms6IGdldEVudGl0eUxpbmtKU1gocGFyZW50RW50aXR5LCBsaW5rZWRFbnRpdGllcywgZW50aXR5SWQsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIG4gKz0gZW50aXR5SWQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXJsUmUgPSAvW0Etel0rOlxcL1xcL1teXFxzXSsvZztcbiAgICBmb3IgKGxldCBtYXRjaCA9IHVybFJlLmV4ZWModGV4dCk7IG1hdGNoOyBtYXRjaCA9IHVybFJlLmV4ZWModGV4dCkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gbWF0Y2hbMF07XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZm91bmQgbWF0Y2ggXCIgKyB1cmwpO1xuXG4gICAgICAgIGxpbmtzVG9TcGxpY2UucHVzaCh7XG4gICAgICAgICAgICBzdGFydDogbWF0Y2guaW5kZXgsXG4gICAgICAgICAgICBlbmQ6IG1hdGNoLmluZGV4ICsgdXJsLmxlbmd0aCxcbiAgICAgICAgICAgIGxpbms6IChcbiAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPVwiY2xpY2thYmxlXCIgaHJlZj17dXJsfT57dXJsfTwvYT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsaW5rc1RvU3BsaWNlLnNvcnQoKGEsYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpO1xuXG4gICAgcmVtb3ZlT3ZlcmxhcHBpbmc6IGZvciAobGV0IG4gPSAwOyBuIDwgbGlua3NUb1NwbGljZS5sZW5ndGg7ICkge1xuICAgICAgICBmb3IgKGxldCBuMiA9IG4gKyAxOyBuMiA8IGxpbmtzVG9TcGxpY2UubGVuZ3RoOyArK24yKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpY2VBID0gbGlua3NUb1NwbGljZVtuXTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGljZUIgPSBsaW5rc1RvU3BsaWNlW24yXTtcblxuICAgICAgICAgICAgaWYgKHNwbGljZUEgPT09IHNwbGljZUIpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBUaGUgc3BsaWNlcyBvdmVybGFwIGlmIG5laXRoZXIgZW5kcyBiZWZvcmUgdGhlIG90aGVyIHN0YXJ0c1xuICAgICAgICAgICAgaWYgKHNwbGljZUEuZW5kID49IHNwbGljZUIuc3RhcnQgJiYgc3BsaWNlQi5lbmQgPj0gc3BsaWNlQS5zdGFydCkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiUmVtb3Zpbmcgb3ZlcmxhcHBpbmdcIik7XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHNob3J0ZXIgbGluayBvZiBib3RoXG4gICAgICAgICAgICAgICAgaWYoc3BsaWNlQS5lbmQgLSBzcGxpY2VBLnN0YXJ0IDwgc3BsaWNlQi5lbmQgLSBzcGxpY2VCLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmtzVG9TcGxpY2Uuc3BsaWNlKG4sIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGlua3NUb1NwbGljZS5zcGxpY2UobjIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZSByZW1vdmVPdmVybGFwcGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICArK247XG4gICAgfVxuXG4gICAgaWYgKGxpbmtzVG9TcGxpY2UubGVuZ3RoID09PSAwKSByZXR1cm4gPD57dGV4dH08Lz47XG5cbiAgICBjb25zdCByZXM6IFJlYWN0RWxlbWVudFtdID0gW107XG4gICAgbGV0IG4gPSAwO1xuXG4gICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzVG9TcGxpY2UpIHtcbiAgICAgICAgcmVzLnB1c2goXG4gICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICB7dGV4dC5zdWJzdHJpbmcobiwgbGluay5zdGFydCl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICk7XG4gICAgICAgIHJlcy5wdXNoKGxpbmsubGluayk7XG4gICAgICAgIG4gPSBsaW5rLmVuZDtcbiAgICB9XG4gICAgcmVzLnB1c2goXG4gICAgICAgIDxzcGFuIGtleT17cmFuZG9tU3RyaW5nKCl9Pnt0ZXh0LnNsaWNlKG4pfTwvc3Bhbj5cbiAgICApO1xuXG4gICAgcmV0dXJuIDw+e3Jlc308Lz47XG59XG5cblxuLyoqXG4gKiBSZW5kZXJzIGEgZ2l2ZW4gUmVpZmllZFxuICogQHBhcmFtIGVudGl0eSB0aGUgZW50aXR5IHRoZSBSZWlmaWVkIGV4aXN0cyBpblxuICogQHBhcmFtIHJlaWZpZWQgdGhlIFJlaWZpZWRcbiAqIEBwYXJhbSBzaG93QmFkZ2VzIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIGlmIGJhZGdlcyBzaG91bGQgYmUgc2hvd25cbiAqIEBwYXJhbSBvbk5hdmlnYXRlcyBmdW5jdGlvbnMgZGVmaW5pbmcgdGhlIGFjdGlvbiB3aGVuIGNsaWNraW5nIGNsaWNrYWJsZSBpdGVtc1xuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0VudGl0eSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYW4gZW50aXRpZXMgbmFtZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb09udG9sb2d5IGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBhY3Rpb24gd2hlbiBjbGlja2luZyBvbiBhbiBvbnRvbG9neSBiYWRnZVxuICogQHBhcmFtIG9uTmF2aWdhdGVzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZSBmdW5jdGlvbiBkZWZpbmluZyB0aGUgYWN0aW9uIHdoZW4gY2xpY2tpbmcgb24gYSBkaXNhbWJpZ3VhdGlvbiBiYWRnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVpZmllZEpTWChlbnRpdHk6IFRoaW5nLCByZWlmaWVkOiBSZWlmaWVkPGFueT4sIHNob3dCYWRnZXM6IGJvb2xlYW4gPSBERUZBVUxUX1NIT1dfQkFER0VTLCAvKlRPRE86IGNoYW5nZSB0byB1c2luZyAoZW50aXR5IDogRW50aXR5RGF0YSkgbGF0ZXIqLyBvbk5hdmlnYXRlczogT25OYXZpZ2F0ZXMpOiBSZWFjdEVsZW1lbnQge1xuICAgIGZ1bmN0aW9uIGdldFZhbHVlSlNYKHZhbHVlOiBSZWlmaWVkPGFueT4pOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBsaW5rZWRFbnRpdGllcyA9IGVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpO1xuXG4gICAgICAgIC8vIGxpbmtlZEVudGl0aWVzIG5vdCBleGlzdGVudCBvbiBlbnRpdHkgKC0+IHByb2JhYmx5IGxlZ2FjeSBhcGkgdmVyc2lvbilcbiAgICAgICAgaWYoT2JqZWN0LmtleXMobGlua2VkRW50aXRpZXMubGlua2VkRW50aXRpZXMpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBpZih0eXBlb2YgdmFsdWUudmFsdWUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZGRMaW5rc1RvVGV4dChlbnRpdHksIHZhbHVlLnZhbHVlLnRvU3RyaW5nKCksIHVuZGVmaW5lZCwgc2hvd0JhZGdlcywgb25OYXZpZ2F0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogc2hvdWxkIG5vdCBoYXBwZW4sIHByb3ZlIHRoYXQgdGhpcyBpcyBuZXZlciB0aGUgY2FzZVxuICAgICAgICAgICAgICAgIHJldHVybiA8PntKU09OLnN0cmluZ2lmeSh2YWx1ZS52YWx1ZSl9PC8+O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGlua2VkRW50aXR5ID0gbGlua2VkRW50aXRpZXMuZ2V0KHZhbHVlLnZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKGxpbmtlZEVudGl0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRFbnRpdHlMaW5rSlNYKGVudGl0eSwgbGlua2VkRW50aXRpZXMsIHZhbHVlLnZhbHVlLCBzaG93QmFkZ2VzLCBvbk5hdmlnYXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGVudGl0eS5nZXRUeXBlKCkgPT0gXCJvbnRvbG9neVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPD57SlNPTi5zdHJpbmdpZnkodmFsdWUudmFsdWUpfTwvPjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRDbGFzc0V4cHJlc3Npb25KU1goZW50aXR5LCBsaW5rZWRFbnRpdGllcywgdmFsdWUudmFsdWUsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkZExpbmtzVG9UZXh0KGVudGl0eSwgdmFsdWUudmFsdWUudG9TdHJpbmcoKSwgbGlua2VkRW50aXRpZXMsIHNob3dCYWRnZXMsIG9uTmF2aWdhdGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgICAge2dldFZhbHVlSlNYKHJlaWZpZWQpfVxuICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICB7cmVpZmllZC5oYXNNZXRhZGF0YSgpICYmIGdldEF4aW9tc0luZm9ybWF0aW9uSlNYKGVudGl0eSwgcmVpZmllZC5nZXRNZXRhZGF0YSgpKX1cbiAgICAgICAgPC8+XG4gICAgKTtcbn0iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlCdXR0b24sIEV1aVByb3ZpZGVyfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0pzb25BcGlXaWRnZXRQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXJ9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuXG5mdW5jdGlvbiBKc29uQXBpV2lkZ2V0KHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGlRdWVyeSwgYnV0dG9uVGV4dCwgYnV0dG9uU2l6ZSB9ID0gcHJvcHM7XG5cbiAgcmV0dXJuIChcbiAgICA8RXVpQnV0dG9uIGhyZWY9e2FwaVF1ZXJ5fSB0YXJnZXQ9XCJfYmxhbmtcIiBzaXplPXtidXR0b25TaXplIHx8IFwibVwifT57YnV0dG9uVGV4dH08L0V1aUJ1dHRvbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSnNvbkFwaShwcm9wczogSnNvbkFwaVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRKc29uQXBpV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRKc29uQXBpV2lkZ2V0KHByb3BzOiBKc29uQXBpV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8SnNvbkFwaVdpZGdldFxuICAgICAgICAgICAgICBhcGlRdWVyeT17cHJvcHMuYXBpUXVlcnl9XG4gICAgICAgICAgICAgIGJ1dHRvblRleHQ9e3Byb3BzLmJ1dHRvblRleHR9XG4gICAgICAgICAgICAgIGJ1dHRvblNpemU9e3Byb3BzLmJ1dHRvblNpemV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBKc29uQXBpV2lkZ2V0LCBjcmVhdGVKc29uQXBpIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlCYWRnZSwgRXVpSWNvbiwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge09sc0FwaX0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtCcmVhZGNydW1iV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7aXNFbnRpdHl9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IHsgQnJlYWRjcnVtYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0JyZWFkY3J1bWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS9zZW1sb29rcC1zdHlsZXMuY3NzXCI7XG5cbmZ1bmN0aW9uIEJyZWFkY3J1bWJXaWRnZXQocHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgb250b2xvZ3lJZCwgaXJpLCBlbnRpdHlUeXBlLCBjb2xvckZpcnN0LCBjb2xvclNlY29uZCwgcGFyYW1ldGVyICwgdXNlTGVnYWN5LCBvbk5hdmlnYXRlVG9PbnRvbG9neX0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnkoXG4gICAgW1wiYnJlYWRjcnVtYlwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nICYmXG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHtpZihwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSAmJiBwcm9wcy5vbnRvbG9neUlkKSBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neShwcm9wcy5vbnRvbG9neUlkIHx8IFwiXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKX19PlxuICAgICAgICAgICAgICAgIDxFdWlCYWRnZSBjbGFzc05hbWU9e3Byb3BzLm9udG9sb2d5SWQgPyBcImJyZWFkY3J1bWIgY2xpY2thYmxlLWJyZWFkY3J1bWJcIiA6IFwiYnJlYWRjcnVtYlwifSBjb2xvcj17Y29sb3JGaXJzdCB8fCAoKHByb3BzLm9udG9sb2d5SWQpID8gXCJwcmltYXJ5XCIgOiBcIndhcm5pbmdcIil9Pntwcm9wcy5vbnRvbG9neUlkPy50b1VwcGVyQ2FzZSgpIHx8IDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXtcInNcIn0vPn08L0V1aUJhZGdlPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgJm5ic3A7PEV1aUljb24gdHlwZT1cImFycm93UmlnaHRcIi8+Jm5ic3A7XG4gICAgICAgICAgICA8RXVpQmFkZ2UgY2xhc3NOYW1lPVwiYnJlYWRjcnVtYlwiIGNvbG9yPXtjb2xvclNlY29uZCB8fCBcIndhcm5pbmdcIn0+ezxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPXtcInNcIn0vPn08L0V1aUJhZGdlPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBpc0VudGl0eShkYXRhKSAmJlxuICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgIG9udG9sb2d5TmFtZT17ZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgc2hvcnRGb3JtPXtkYXRhLmdldFNob3J0Rm9ybSgpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e29udG9sb2d5SWQgfHwgZGF0YS5nZXRPbnRvbG9neUlkKCl9XG4gICAgICAgICAgY29sb3JGaXJzdD17Y29sb3JGaXJzdH1cbiAgICAgICAgICBjb2xvclNlY29uZD17Y29sb3JTZWNvbmR9XG4gICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAvPlxuICAgICAgfVxuICAgICAge2lzRXJyb3IgJiZcbiAgICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgICAgICBvbnRvbG9neU5hbWU9e3Byb3BzLm9udG9sb2d5SWQ/LnRvVXBwZXJDYXNlKCkgfHwgKGRhdGEgJiYgZGF0YS5nZXRPbnRvbG9neUlkKCkudG9VcHBlckNhc2UoKSkgfHwgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcIm9udG9sb2d5XCIpfVxuICAgICAgICAgICAgICBzaG9ydEZvcm09eyhkYXRhICYmIGRhdGEuZ2V0U2hvcnRGb3JtKCkpID8gZGF0YS5nZXRTaG9ydEZvcm0oKS50b1VwcGVyQ2FzZSgpIDogXCJcIn1cbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17b250b2xvZ3lJZCB8fCAoZGF0YSA/IGRhdGEuZ2V0T250b2xvZ3lJZCgpIDogXCJcIil9XG4gICAgICAgICAgICAgIGNvbG9yRmlyc3Q9e2NvbG9yRmlyc3QgfHwgKChwcm9wcy5vbnRvbG9neUlkIHx8IChkYXRhICYmIGRhdGEuZ2V0T250b2xvZ3lJZCgpKSkgPyBcInByaW1hcnlcIiA6IFwiZGFuZ2VyXCIpfVxuICAgICAgICAgICAgICBjb2xvclNlY29uZD17Y29sb3JTZWNvbmQgfHwgKChkYXRhICYmIGRhdGEuZ2V0U2hvcnRGb3JtKCkpID8gXCJzdWNjZXNzXCIgOiBcImRhbmdlclwiKX1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIC8+XG4gICAgICB9XG4gICAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnJlYWRjcnVtYihwcm9wczogQnJlYWRjcnVtYldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzooKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEJyZWFkY3J1bWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEJyZWFkY3J1bWJXaWRnZXQocHJvcHM6IEJyZWFkY3J1bWJXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxCcmVhZGNydW1iV2lkZ2V0XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgY29sb3JGaXJzdD17cHJvcHMuY29sb3JGaXJzdH1cbiAgICAgICAgICAgICAgY29sb3JTZWNvbmQ9e3Byb3BzLmNvbG9yU2Vjb25kfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IEJyZWFkY3J1bWJXaWRnZXQsIGNyZWF0ZUJyZWFkY3J1bWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtEZXNjcmlwdGlvbldpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBUaGluZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBEZXNjcmlwdGlvblByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0Rlc2NyaXB0aW9uUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBOT19ERVNDUklQVElPTiA9IFwiTm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlLlwiO1xuXG5mdW5jdGlvbiBEZXNjcmlwdGlvbldpZGdldChwcm9wczogRGVzY3JpcHRpb25XaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGFwaSwgb250b2xvZ3lJZCwgaXJpLCBkZXNjVGV4dCwgdGhpbmdUeXBlLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PFRoaW5nPihcbiAgICBbXCJkZXNjcmlwdGlvblwiLCBhcGksIHBhcmFtZXRlciwgdGhpbmdUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+fVxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmXG4gICAgICAgIDxEZXNjcmlwdGlvblByZXNlbnRhdGlvbiBkZXNjcmlwdGlvbj17ZGF0YS5nZXREZXNjcmlwdGlvbigpIHx8IE5PX0RFU0NSSVBUSU9OfSBkZXNjVGV4dD17ZGVzY1RleHR9IHsuLi5yZXN0fS8+XG4gICAgICB9XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImRlc2NyaXB0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlc2NyaXB0aW9uKHByb3BzOiBEZXNjcmlwdGlvbldpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzooKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZERlc2NyaXB0aW9uV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWREZXNjcmlwdGlvbldpZGdldChwcm9wczogRGVzY3JpcHRpb25XaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxEZXNjcmlwdGlvbldpZGdldFxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgIGRlc2NUZXh0PXtwcm9wcy5kZXNjVGV4dH1cbiAgICAgICAgICAgICAgdGhpbmdUeXBlPXtwcm9wcy50aGluZ1R5cGV9XG4gICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICBjb2xvcj17cHJvcHMuY29sb3J9XG4gICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgRGVzY3JpcHRpb25XaWRnZXQsIGNyZWF0ZURlc2NyaXB0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7RGVzY3JpcHRpb25QcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBEZXNjcmlwdGlvblByZXNlbnRhdGlvbihwcm9wczogRGVzY3JpcHRpb25QcmVzZW50YXRpb25Qcm9wcykge1xuICBjb25zdCB7ZGVzY1RleHQsIGRlc2NyaXB0aW9uLCAuLi5yZXN0fSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT57ZGVzY1RleHQgfHwgZGVzY3JpcHRpb259PC9FdWlUZXh0PlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgeyBEZXNjcmlwdGlvblByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCwge3VzZVN0YXRlfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpRmxleEl0ZW0sIEV1aUxpbmssIEV1aVByb3ZpZGVyLCBFdWlCdXR0b25JY29ufSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0lyaVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge2lzRXVpTGlua0NvbG9yLCBpc0hleENvbG9yLCBpc1JnYkNvbG9yfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcblxuZnVuY3Rpb24gSXJpV2lkZ2V0KHByb3BzOiBJcmlXaWRnZXRQcm9wcykgeyAgICAgICBcbiAgY29uc3QgeyBpcmksIGlyaVRleHQsIGNvbG9yLCBleHRlcm5hbEljb24sIHVybFByZWZpeCwgY29weUJ1dHRvbiB9ID0gcHJvcHM7XG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHVybFByZWZpeEV4aXN0ID0gdHlwZW9mKHVybFByZWZpeCkgIT09IFwidW5kZWZpbmVkXCIgJiYgdXJsUHJlZml4ICE9PSBcIlwiID8gdHJ1ZSA6IGZhbHNlO1xuICBjb25zdCBpcmlVcmwgPSB1cmxQcmVmaXhFeGlzdCA/IHVybFByZWZpeCArIGVuY29kZVVSSUNvbXBvbmVudChpcmkpIDogaXJpO1xuXG4gIGNvbnN0IENvcHlMaW5rQnV0dG9uID0gKCkgPT4ge1xuICAgIGlmICghY29waWVkKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RXVpQnV0dG9uSWNvbiBcbiAgICAgICAgICBkaXNwbGF5PVwiYmFzZVwiXG4gICAgICAgICAgaWNvblR5cGU9XCJjb3B5XCIgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgIGtleT17XCJjb3B5LWJ0blwifVxuICAgICAgICAgIHN0eWxlPXt7bWFyZ2luTGVmdDogXCI1cHhcIiwgY29sb3I6IGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCJ9fSBcbiAgICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4geyAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaXJpVXJsKTtcbiAgICAgICAgICAgIHNldENvcGllZCh0cnVlKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3NldENvcGllZChmYWxzZSk7fSwgMjAwMCk7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgIH19XG4gICAgICAgICAgPiAgICAgICAgICAgIFxuICAgICAgICA8L0V1aUJ1dHRvbkljb24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPEV1aUJ1dHRvbkljb24gXG4gICAgICAgIHN0eWxlPXt7bWFyZ2luTGVmdDogXCI1cHhcIiwgY29sb3I6IGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCJ9fSAgIFxuICAgICAgICBkaXNwbGF5PVwiYmFzZVwiIFxuICAgICAgICBpY29uVHlwZT1cImNoZWNrXCIgXG4gICAgICAgIGtleT17XCJjb3B5LWJ0blwifVxuICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgID5cbiAgICAgIDwvRXVpQnV0dG9uSWNvbj5cbiAgICApOyAgICBcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICA8ZGl2PlxuICAgICAgICA8RXVpTGluayBcbiAgICAgICAgICBocmVmPXtpcmlVcmx9IFxuICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiIFxuICAgICAgICAgIHN0eWxlPXt7Y29sb3I6IGNvbG9yICYmIChpc0hleENvbG9yKGNvbG9yKSB8fCBpc1JnYkNvbG9yKGNvbG9yKSkgPyBjb2xvciA6IFwiXCJ9fSBcbiAgICAgICAgICBjb2xvcj17Y29sb3IgJiYgaXNFdWlMaW5rQ29sb3IoY29sb3IpID8gY29sb3IgOiB1bmRlZmluZWR9XG4gICAgICAgICAgZXh0ZXJuYWw9e2V4dGVybmFsSWNvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAge2lyaVRleHQgPyBpcmlUZXh0IDogaXJpfSAgICAgICAgICBcbiAgICAgICAgPC9FdWlMaW5rPlxuICAgICAgICB7Y29weUJ1dHRvbiAmJiA8Q29weUxpbmtCdXR0b24gLz59XG4gICAgICA8L2Rpdj5cbiAgICA8L0V1aUZsZXhJdGVtPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJcmkocHJvcHM6IElyaVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHsgICAgICAgXG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRJcmlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZElyaVdpZGdldChwcm9wczogSXJpV2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpOyAgICBcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxJcmlXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGlyaVRleHQ9e3Byb3BzLmlyaVRleHR9XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPXtwcm9wcy5jb2xvcn1cbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxJY29uPXtwcm9wcy5leHRlcm5hbEljb259XG4gICAgICAgICAgICAgICAgICAgIHVybFByZWZpeD17cHJvcHMudXJsUHJlZml4fVxuICAgICAgICAgICAgICAgICAgICBjb3B5QnV0dG9uPXtwcm9wcy5jb3B5QnV0dG9ufVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBJcmlXaWRnZXQsIGNyZWF0ZUlyaSB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge09sc0FwaX0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7VGFiV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9UYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlUeXBlTmFtZSwgaXNFbnRpdHl9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9Nb2RlbFR5cGVDaGVja1wiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuZnVuY3Rpb24gVGFiV2lkZ2V0KHByb3BzOiBUYWJXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSwgaGllcmFyY2h5VGFiLCBjcm9zc1JlZlRhYiwgdGVybWlub2xvZ3lJbmZvVGFiLCBhbHROYW1lc1RhYiwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PEVudGl0eT4oXG4gICAgW1widGFiZGF0YVwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuICBmdW5jdGlvbiByZW5kZXIoZGF0YTogRW50aXR5KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUYWJQcmVzZW50YXRpb24gey4uLnJlc3R9XG4gICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgIGlyaT17aXJpfVxuICAgICAgICBhcGk9e2FwaX1cbiAgICAgICAgdXNlTGVnYWN5PXt1c2VMZWdhY3l9XG4gICAgICAgIGVudGl0eVR5cGU9e2RhdGEuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lfVxuICAgICAgICBvbnRvbG9neUlkPXtvbnRvbG9neUlkID8gb250b2xvZ3lJZCA6IGRhdGEuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICBoaWVyYXJjaHlUYWI9e2hpZXJhcmNoeVRhYn1cbiAgICAgICAgY3Jvc3NSZWZUYWI9e2Nyb3NzUmVmVGFifVxuICAgICAgICB0ZXJtaW5vbG9neUluZm9UYWI9e3Rlcm1pbm9sb2d5SW5mb1RhYn1cbiAgICAgICAgYWx0TmFtZXNUYWI9e2FsdE5hbWVzVGFifVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImRlc2NyaXB0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPD5cbiAgICAgICAgICB7aXNFbnRpdHkoZGF0YSkgPyByZW5kZXIoZGF0YSkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgIH1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGFiKHByb3BzOiBUYWJXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkVGFiV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRUYWJXaWRnZXQocHJvcHM6IFRhYldpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPFRhYldpZGdldFxuICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgYWx0TmFtZXNUYWI9e3Byb3BzLmFsdE5hbWVzVGFifVxuICAgICAgICAgICAgICBoaWVyYXJjaHlUYWI9e3Byb3BzLmhpZXJhcmNoeVRhYn1cbiAgICAgICAgICAgICAgY3Jvc3NSZWZUYWI9e3Byb3BzLmNyb3NzUmVmVGFifVxuICAgICAgICAgICAgICB0ZXJtaW5vbG9neUluZm9UYWI9e3Byb3BzLnRlcm1pbm9sb2d5SW5mb1RhYn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IFRhYldpZGdldCwgY3JlYXRlVGFiIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGFiYmVkQ29udGVudCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IEhpZXJhcmNoeVdpZGdldE9MUyB9IGZyb20gXCIuL0hpZXJhcmNoeVdpZGdldFwiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IGlzRW50aXR5LCBpc0luZGl2aWR1YWwsIGlzUHJvcGVydHkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IEFsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0FsdGVybmF0aXZlTmFtZVRhYldpZGdldC9BbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IENyb3NzUmVmVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCB7IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQgfSBmcm9tIFwiLi9IaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IHtUYWJQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHsgT250b2xvZ3lJbmZvV2lkZ2V0IH0gZnJvbSBcIi4uLy4uL09udG9sb2d5SW5mb1dpZGdldFwiO1xuXG5mdW5jdGlvbiBUYWJQcmVzZW50YXRpb24ocHJvcHM6IFRhYlByZXNlbnRhdGlvblByb3BzKSB7XG4gIGZ1bmN0aW9uIHJlbmRlcihkYXRhOiBFbnRpdHkpIHtcbiAgICBjb25zdCB0YWJzID0gW107XG4gICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyB0byBzaG93IHRoZSB0YWJzLiBUaGVyZWZvcmUsIHVuZGVmaW5lZCBnZXRzIHRyZWF0ZWQgYXMgdHJ1dGh5LlxuICAgICAqL1xuICAgIGlmKHByb3BzLmFsdE5hbWVzVGFiID09PSB1bmRlZmluZWQgfHwgcHJvcHMuYWx0TmFtZXNUYWIpe1xuICAgICAgdGFicy5wdXNoKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb250ZW50OiAoXG4gICAgICAgICAgICAgICAgPEFsdGVybmF0aXZlTmFtZVRhYlByZXNlbnRhdGlvbiBzeW5vbnltcz17ZGF0YS5nZXRTeW5vbnltcygpLm1hcChzeW5vbnltID0+IHN5bm9ueW0udmFsdWUpfSAvPlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBpZDogXCJ0YWIxXCIsXG4gICAgICAgICAgICAgIG5hbWU6IFwiQWx0ZXJuYXRpdmUgTmFtZXNcIlxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5oaWVyYXJjaHlUYWIgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5oaWVyYXJjaHlUYWIpe1xuICAgICAgdGFicy5wdXNoKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAoXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG92ZXJmbG93OiBcImF1dG9cIn19PlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMudXNlTGVnYWN5ID09IHVuZGVmaW5lZCB8fCBwcm9wcy51c2VMZWdhY3lcbiAgICAgICAgICAgICAgICAgICAgICA/IDxIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkIHx8ICgoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKSAhPT0gdW5kZWZpbmVkKSA/IGRhdGEuZ2V0T250b2xvZ3lJZCgpIDogXCJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA6IDxIaWVyYXJjaHlXaWRnZXRPTFNcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkIHx8ICgoZGF0YSAmJiBkYXRhLmdldE9udG9sb2d5SWQoKSAhPT0gdW5kZWZpbmVkKSA/IGRhdGEuZ2V0T250b2xvZ3lJZCgpIDogXCJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGlkOiBcInRhYjJcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkhpZXJhcmNoeVwiXG4gICAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZihwcm9wcy5jcm9zc1JlZlRhYiA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmNyb3NzUmVmVGFiICl7XG4gICAgICB0YWJzLnB1c2goXG4gICAgICAgICAge1xuICAgICAgICAgICAgICBjb250ZW50OlxuICAgICAgICAgICAgICAgIDxDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiBjcm9zc3JlZnM9e1JlaWZpZWQuZnJvbUpzb24oZGF0YS5nZXRDcm9zc1JlZmVyZW5jZXMoKSkubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pfSAvPixcbiAgICAgICAgICAgICAgaWQ6IFwidGFiM1wiLFxuICAgICAgICAgICAgICBuYW1lOiBcIkNyb3NzIHJlZmVyZW5jZXNcIlxuICAgICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYocHJvcHMudGVybWlub2xvZ3lJbmZvVGFiID09PSB1bmRlZmluZWQgfHwgcHJvcHMudGVybWlub2xvZ3lJbmZvVGFiKXtcbiAgICAgIHRhYnMucHVzaChcbiAgICAgICAge1xuICAgICAgICAgICAgY29udGVudDpcbiAgICAgICAgICAgICAgPE9udG9sb2d5SW5mb1dpZGdldFxuICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtcIlwifVxuICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgIHNob3dCYWRnZXM9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGhhc1RpdGxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgICB3aWR0aD17NjAwfVxuICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgaWQ6IFwidGFiNFwiLFxuICAgICAgICAgICAgICBuYW1lOiBgQWJvdXQgJHtwcm9wcy5vbnRvbG9neUlkPy50b1VwcGVyQ2FzZSgpfWBcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cblxuICAgIGlmKHRhYnMubGVuZ3RoID09PSAwKXtcbiAgICAgIC8qKlxuICAgICAgICogRXVpVGFiYmVkQ29udGVudCBjb21wb25lbnQgcmFpc2VzIGV4Y2VwdGlvbiBpZiBubyB0YWIgaXMgcHJvdmlkZWQuXG4gICAgICAgKi9cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICAgIDxFdWlUYWJiZWRDb250ZW50IHNpemU9XCJzXCIgdGFicz17dGFic30gLz5cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNFbnRpdHkocHJvcHMuZGF0YSkgfHwgaXNQcm9wZXJ0eShwcm9wcy5kYXRhKSB8fCBpc0luZGl2aWR1YWwocHJvcHMuZGF0YSkgPyByZW5kZXIocHJvcHMuZGF0YSkgOiBudWxsfVxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgeyBUYWJQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQge0V1aVBhbmVsLCBFdWlQcm92aWRlcn0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFwiQHpibWVkL29scy10cmVldmlld1wiXG5pbXBvcnQgXCIuLi8uLi8uLi8uLi8uLi9zdHlsZS90cmVlc3R5bGVzLmNzc1wiO1xuaW1wb3J0IHtIaWVyYXJjaHlXaWRnZXRPTFNQcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXJ9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuY29uc3QgSGllcmFyY2h5V2lkZ2V0T0xTID0gKHByb3BzOiBIaWVyYXJjaHlXaWRnZXRPTFNQcm9wcykgPT4ge1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdHJlZUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN0cmVlX2NvbnRhaW5lcicpO1xuICAgICh3aW5kb3cgYXMgYW55KVtcIk9MU1dpZGdldHNcIl0uY3JlYXRlRW50aXR5VHJlZSh7XG4gICAgICBpcmk6IHByb3BzLmlyaSxcbiAgICAgIG9udG9sb2d5SWQ6IHByb3BzLm9udG9sb2d5SWQsXG4gICAgICBhcGlVcmw6IHByb3BzLmFwaS5zdWJzdHJpbmcoMCwgcHJvcHMuYXBpLmxhc3RJbmRleE9mKFwiYXBpXCIpKSxcbiAgICAgIGVudGl0eVR5cGU6IChwcm9wcy5lbnRpdHlUeXBlID8gcGx1cmFsaXplVHlwZShwcm9wcy5lbnRpdHlUeXBlLCBmYWxzZSkgOiB1bmRlZmluZWQpIHx8IFwiZW50aXRpZXNcIixcbiAgICAgIG9uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5ID8gcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5IDogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZTogc3RyaW5nLCBpcmk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgbmF2aWdhdGUgdG8gZW50aXR5IHdpdGggb250b2xvZ3lJZDogJHtvbnRvbG9neUlkfSwgZW50aXR5VHlwZTogJHtlbnRpdHlUeXBlfSwgaXJpOiAke2lyaX1gLCk7XG4gICAgICB9LFxuICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5ID8gcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kgOiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlOiBzdHJpbmcsIGlyaTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBuYXZpZ2F0ZSB0byBvbnRvbG9neSB3aXRoIG9udG9sb2d5SWQ6ICR7b250b2xvZ3lJZH0sIGVudGl0eVR5cGU6ICR7ZW50aXR5VHlwZX0sIGlyaTogJHtpcml9YCwpO1xuICAgICAgfVxuICAgIH0sIHRyZWVDb250YWluZXIpO1xuICB9LCBbcHJvcHMuYXBpLCBwcm9wcy5pcmksIHByb3BzLm9udG9sb2d5SWQsIHByb3BzLmVudGl0eVR5cGUsIHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIFwiSGllcmFyY2h5V2lkZ2V0T0xTXCJdKTtcblxuICByZXR1cm4gKFxuICAgIC8vbWluV2lkdGggcmVxdWlyZWQgd29ya2Fyb3VuZCB1bnRpbCBvdmVybGFwcGluZyBjaGVja2JveGVzIGFyZSBmaXhlZCBpbiBvbHM0LXdpZGdldHNcbiAgICA8RXVpUGFuZWwgc3R5bGU9e3ttaW5XaWR0aDogXCI2MDBweFwifX0+XG4gICAgICA8ZGl2IGlkPVwidHJlZV9jb250YWluZXJcIi8+XG4gICAgPC9FdWlQYW5lbD5cbiAgKTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZXJhcmNoeU9MUyhwcm9wczogSGllcmFyY2h5V2lkZ2V0T0xTUHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEhpZXJhcmNoeVdpZGdldE9MUyhwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkSGllcmFyY2h5V2lkZ2V0T0xTKHByb3BzOiBIaWVyYXJjaHlXaWRnZXRPTFNQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgIDxIaWVyYXJjaHlXaWRnZXRPTFNcbiAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgSGllcmFyY2h5V2lkZ2V0T0xTLCBjcmVhdGVIaWVyYXJjaHlPTFMgfTtcbiIsICIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGw9cmVxdWlyZShcIm9iamVjdC1hc3NpZ25cIiksbj02MDEwMyxwPTYwMTA2O2V4cG9ydHMuRnJhZ21lbnQ9NjAxMDc7ZXhwb3J0cy5TdHJpY3RNb2RlPTYwMTA4O2V4cG9ydHMuUHJvZmlsZXI9NjAxMTQ7dmFyIHE9NjAxMDkscj02MDExMCx0PTYwMTEyO2V4cG9ydHMuU3VzcGVuc2U9NjAxMTM7dmFyIHU9NjAxMTUsdj02MDExNjtcbmlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciB3PVN5bWJvbC5mb3I7bj13KFwicmVhY3QuZWxlbWVudFwiKTtwPXcoXCJyZWFjdC5wb3J0YWxcIik7ZXhwb3J0cy5GcmFnbWVudD13KFwicmVhY3QuZnJhZ21lbnRcIik7ZXhwb3J0cy5TdHJpY3RNb2RlPXcoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTtleHBvcnRzLlByb2ZpbGVyPXcoXCJyZWFjdC5wcm9maWxlclwiKTtxPXcoXCJyZWFjdC5wcm92aWRlclwiKTtyPXcoXCJyZWFjdC5jb250ZXh0XCIpO3Q9dyhcInJlYWN0LmZvcndhcmRfcmVmXCIpO2V4cG9ydHMuU3VzcGVuc2U9dyhcInJlYWN0LnN1c3BlbnNlXCIpO3U9dyhcInJlYWN0Lm1lbW9cIik7dj13KFwicmVhY3QubGF6eVwiKX12YXIgeD1cImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7XG5mdW5jdGlvbiB5KGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT14JiZhW3hdfHxhW1wiQEBpdGVyYXRvclwiXTtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYT9hOm51bGx9ZnVuY3Rpb24geihhKXtmb3IodmFyIGI9XCJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD1cIithLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWIrPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW2NdKTtyZXR1cm5cIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIithK1wiOyB2aXNpdCBcIitiK1wiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIn1cbnZhciBBPXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxCPXt9O2Z1bmN0aW9uIEMoYSxiLGMpe3RoaXMucHJvcHM9YTt0aGlzLmNvbnRleHQ9Yjt0aGlzLnJlZnM9Qjt0aGlzLnVwZGF0ZXI9Y3x8QX1DLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O0MucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGEsYil7aWYoXCJvYmplY3RcIiE9PXR5cGVvZiBhJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYSYmbnVsbCE9YSl0aHJvdyBFcnJvcih6KDg1KSk7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGEsYixcInNldFN0YXRlXCIpfTtDLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsYSxcImZvcmNlVXBkYXRlXCIpfTtcbmZ1bmN0aW9uIEQoKXt9RC5wcm90b3R5cGU9Qy5wcm90b3R5cGU7ZnVuY3Rpb24gRShhLGIsYyl7dGhpcy5wcm9wcz1hO3RoaXMuY29udGV4dD1iO3RoaXMucmVmcz1CO3RoaXMudXBkYXRlcj1jfHxBfXZhciBGPUUucHJvdG90eXBlPW5ldyBEO0YuY29uc3RydWN0b3I9RTtsKEYsQy5wcm90b3R5cGUpO0YuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIEc9e2N1cnJlbnQ6bnVsbH0sSD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEk9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtcbmZ1bmN0aW9uIEooYSxiLGMpe3ZhciBlLGQ9e30saz1udWxsLGg9bnVsbDtpZihudWxsIT1iKWZvcihlIGluIHZvaWQgMCE9PWIucmVmJiYoaD1iLnJlZiksdm9pZCAwIT09Yi5rZXkmJihrPVwiXCIrYi5rZXkpLGIpSC5jYWxsKGIsZSkmJiFJLmhhc093blByb3BlcnR5KGUpJiYoZFtlXT1iW2VdKTt2YXIgZz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWcpZC5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxnKXtmb3IodmFyIGY9QXJyYXkoZyksbT0wO208ZzttKyspZlttXT1hcmd1bWVudHNbbSsyXTtkLmNoaWxkcmVuPWZ9aWYoYSYmYS5kZWZhdWx0UHJvcHMpZm9yKGUgaW4gZz1hLmRlZmF1bHRQcm9wcyxnKXZvaWQgMD09PWRbZV0mJihkW2VdPWdbZV0pO3JldHVybnskJHR5cGVvZjpuLHR5cGU6YSxrZXk6ayxyZWY6aCxwcm9wczpkLF9vd25lcjpHLmN1cnJlbnR9fVxuZnVuY3Rpb24gSyhhLGIpe3JldHVybnskJHR5cGVvZjpuLHR5cGU6YS50eXBlLGtleTpiLHJlZjphLnJlZixwcm9wczphLnByb3BzLF9vd25lcjphLl9vd25lcn19ZnVuY3Rpb24gTChhKXtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiZhLiQkdHlwZW9mPT09bn1mdW5jdGlvbiBlc2NhcGUoYSl7dmFyIGI9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9O3JldHVyblwiJFwiK2EucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfSl9dmFyIE09L1xcLysvZztmdW5jdGlvbiBOKGEsYil7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmbnVsbCE9YS5rZXk/ZXNjYXBlKFwiXCIrYS5rZXkpOmIudG9TdHJpbmcoMzYpfVxuZnVuY3Rpb24gTyhhLGIsYyxlLGQpe3ZhciBrPXR5cGVvZiBhO2lmKFwidW5kZWZpbmVkXCI9PT1rfHxcImJvb2xlYW5cIj09PWspYT1udWxsO3ZhciBoPSExO2lmKG51bGw9PT1hKWg9ITA7ZWxzZSBzd2l0Y2goayl7Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJudW1iZXJcIjpoPSEwO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBuOmNhc2UgcDpoPSEwfX1pZihoKXJldHVybiBoPWEsZD1kKGgpLGE9XCJcIj09PWU/XCIuXCIrTihoLDApOmUsQXJyYXkuaXNBcnJheShkKT8oYz1cIlwiLG51bGwhPWEmJihjPWEucmVwbGFjZShNLFwiJCYvXCIpK1wiL1wiKSxPKGQsYixjLFwiXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGF9KSk6bnVsbCE9ZCYmKEwoZCkmJihkPUsoZCxjKyghZC5rZXl8fGgmJmgua2V5PT09ZC5rZXk/XCJcIjooXCJcIitkLmtleSkucmVwbGFjZShNLFwiJCYvXCIpK1wiL1wiKSthKSksYi5wdXNoKGQpKSwxO2g9MDtlPVwiXCI9PT1lP1wiLlwiOmUrXCI6XCI7aWYoQXJyYXkuaXNBcnJheShhKSlmb3IodmFyIGc9XG4wO2c8YS5sZW5ndGg7ZysrKXtrPWFbZ107dmFyIGY9ZStOKGssZyk7aCs9TyhrLGIsYyxmLGQpfWVsc2UgaWYoZj15KGEpLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBmKWZvcihhPWYuY2FsbChhKSxnPTA7IShrPWEubmV4dCgpKS5kb25lOylrPWsudmFsdWUsZj1lK04oayxnKyspLGgrPU8oayxiLGMsZixkKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1rKXRocm93IGI9XCJcIithLEVycm9yKHooMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PWI/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhhKS5qb2luKFwiLCBcIikrXCJ9XCI6YikpO3JldHVybiBofWZ1bmN0aW9uIFAoYSxiLGMpe2lmKG51bGw9PWEpcmV0dXJuIGE7dmFyIGU9W10sZD0wO08oYSxlLFwiXCIsXCJcIixmdW5jdGlvbihhKXtyZXR1cm4gYi5jYWxsKGMsYSxkKyspfSk7cmV0dXJuIGV9XG5mdW5jdGlvbiBRKGEpe2lmKC0xPT09YS5fc3RhdHVzKXt2YXIgYj1hLl9yZXN1bHQ7Yj1iKCk7YS5fc3RhdHVzPTA7YS5fcmVzdWx0PWI7Yi50aGVuKGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihiPWIuZGVmYXVsdCxhLl9zdGF0dXM9MSxhLl9yZXN1bHQ9Yil9LGZ1bmN0aW9uKGIpezA9PT1hLl9zdGF0dXMmJihhLl9zdGF0dXM9MixhLl9yZXN1bHQ9Yil9KX1pZigxPT09YS5fc3RhdHVzKXJldHVybiBhLl9yZXN1bHQ7dGhyb3cgYS5fcmVzdWx0O312YXIgUj17Y3VycmVudDpudWxsfTtmdW5jdGlvbiBTKCl7dmFyIGE9Ui5jdXJyZW50O2lmKG51bGw9PT1hKXRocm93IEVycm9yKHooMzIxKSk7cmV0dXJuIGF9dmFyIFQ9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6UixSZWFjdEN1cnJlbnRCYXRjaENvbmZpZzp7dHJhbnNpdGlvbjowfSxSZWFjdEN1cnJlbnRPd25lcjpHLElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxhc3NpZ246bH07XG5leHBvcnRzLkNoaWxkcmVuPXttYXA6UCxmb3JFYWNoOmZ1bmN0aW9uKGEsYixjKXtQKGEsZnVuY3Rpb24oKXtiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYyl9LGNvdW50OmZ1bmN0aW9uKGEpe3ZhciBiPTA7UChhLGZ1bmN0aW9uKCl7YisrfSk7cmV0dXJuIGJ9LHRvQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIFAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYX0pfHxbXX0sb25seTpmdW5jdGlvbihhKXtpZighTChhKSl0aHJvdyBFcnJvcih6KDE0MykpO3JldHVybiBhfX07ZXhwb3J0cy5Db21wb25lbnQ9QztleHBvcnRzLlB1cmVDb21wb25lbnQ9RTtleHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPVQ7XG5leHBvcnRzLmNsb25lRWxlbWVudD1mdW5jdGlvbihhLGIsYyl7aWYobnVsbD09PWF8fHZvaWQgMD09PWEpdGhyb3cgRXJyb3IoeigyNjcsYSkpO3ZhciBlPWwoe30sYS5wcm9wcyksZD1hLmtleSxrPWEucmVmLGg9YS5fb3duZXI7aWYobnVsbCE9Yil7dm9pZCAwIT09Yi5yZWYmJihrPWIucmVmLGg9Ry5jdXJyZW50KTt2b2lkIDAhPT1iLmtleSYmKGQ9XCJcIitiLmtleSk7aWYoYS50eXBlJiZhLnR5cGUuZGVmYXVsdFByb3BzKXZhciBnPWEudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKGYgaW4gYilILmNhbGwoYixmKSYmIUkuaGFzT3duUHJvcGVydHkoZikmJihlW2ZdPXZvaWQgMD09PWJbZl0mJnZvaWQgMCE9PWc/Z1tmXTpiW2ZdKX12YXIgZj1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWYpZS5jaGlsZHJlbj1jO2Vsc2UgaWYoMTxmKXtnPUFycmF5KGYpO2Zvcih2YXIgbT0wO208ZjttKyspZ1ttXT1hcmd1bWVudHNbbSsyXTtlLmNoaWxkcmVuPWd9cmV0dXJueyQkdHlwZW9mOm4sdHlwZTphLnR5cGUsXG5rZXk6ZCxyZWY6ayxwcm9wczplLF9vd25lcjpofX07ZXhwb3J0cy5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGEsYil7dm9pZCAwPT09YiYmKGI9bnVsbCk7YT17JCR0eXBlb2Y6cixfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6YixfY3VycmVudFZhbHVlOmEsX2N1cnJlbnRWYWx1ZTI6YSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9O2EuUHJvdmlkZXI9eyQkdHlwZW9mOnEsX2NvbnRleHQ6YX07cmV0dXJuIGEuQ29uc3VtZXI9YX07ZXhwb3J0cy5jcmVhdGVFbGVtZW50PUo7ZXhwb3J0cy5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGEpe3ZhciBiPUouYmluZChudWxsLGEpO2IudHlwZT1hO3JldHVybiBifTtleHBvcnRzLmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fTtleHBvcnRzLmZvcndhcmRSZWY9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnQscmVuZGVyOmF9fTtleHBvcnRzLmlzVmFsaWRFbGVtZW50PUw7XG5leHBvcnRzLmxhenk9ZnVuY3Rpb24oYSl7cmV0dXJueyQkdHlwZW9mOnYsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDphfSxfaW5pdDpRfX07ZXhwb3J0cy5tZW1vPWZ1bmN0aW9uKGEsYil7cmV0dXJueyQkdHlwZW9mOnUsdHlwZTphLGNvbXBhcmU6dm9pZCAwPT09Yj9udWxsOmJ9fTtleHBvcnRzLnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoKS51c2VDYWxsYmFjayhhLGIpfTtleHBvcnRzLnVzZUNvbnRleHQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUygpLnVzZUNvbnRleHQoYSxiKX07ZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVzZUVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlRWZmZWN0KGEsYil9O2V4cG9ydHMudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIFMoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGEsYixjKX07XG5leHBvcnRzLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlTGF5b3V0RWZmZWN0KGEsYil9O2V4cG9ydHMudXNlTWVtbz1mdW5jdGlvbihhLGIpe3JldHVybiBTKCkudXNlTWVtbyhhLGIpfTtleHBvcnRzLnVzZVJlZHVjZXI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBTKCkudXNlUmVkdWNlcihhLGIsYyl9O2V4cG9ydHMudXNlUmVmPWZ1bmN0aW9uKGEpe3JldHVybiBTKCkudXNlUmVmKGEpfTtleHBvcnRzLnVzZVN0YXRlPWZ1bmN0aW9uKGEpe3JldHVybiBTKCkudXNlU3RhdGUoYSl9O2V4cG9ydHMudmVyc2lvbj1cIjE3LjAuMlwiO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBmLGcsaCxrO2lmKFwib2JqZWN0XCI9PT10eXBlb2YgcGVyZm9ybWFuY2UmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBwZXJmb3JtYW5jZS5ub3cpe3ZhciBsPXBlcmZvcm1hbmNlO2V4cG9ydHMudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGwubm93KCl9fWVsc2V7dmFyIHA9RGF0ZSxxPXAubm93KCk7ZXhwb3J0cy51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gcC5ub3coKS1xfX1cbmlmKFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93fHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgTWVzc2FnZUNoYW5uZWwpe3ZhciB0PW51bGwsdT1udWxsLHc9ZnVuY3Rpb24oKXtpZihudWxsIT09dCl0cnl7dmFyIGE9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTt0KCEwLGEpO3Q9bnVsbH1jYXRjaChiKXt0aHJvdyBzZXRUaW1lb3V0KHcsMCksYjt9fTtmPWZ1bmN0aW9uKGEpe251bGwhPT10P3NldFRpbWVvdXQoZiwwLGEpOih0PWEsc2V0VGltZW91dCh3LDApKX07Zz1mdW5jdGlvbihhLGIpe3U9c2V0VGltZW91dChhLGIpfTtoPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHUpfTtleHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2s9ZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZT1mdW5jdGlvbigpe319ZWxzZXt2YXIgeD13aW5kb3cuc2V0VGltZW91dCx5PXdpbmRvdy5jbGVhclRpbWVvdXQ7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBjb25zb2xlKXt2YXIgej1cbndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZTtcImZ1bmN0aW9uXCIhPT10eXBlb2Ygd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSYmY29uc29sZS5lcnJvcihcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzXCIpO1wiZnVuY3Rpb25cIiE9PXR5cGVvZiB6JiZjb25zb2xlLmVycm9yKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBjYW5jZWxBbmltYXRpb25GcmFtZS4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSBwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxsc1wiKX12YXIgQT0hMSxCPW51bGwsQz0tMSxEPTUsRT0wO2V4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gZXhwb3J0cy51bnN0YWJsZV9ub3coKT49XG5FfTtrPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKGEpezA+YXx8MTI1PGE/Y29uc29sZS5lcnJvcihcImZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCBmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZFwiKTpEPTA8YT9NYXRoLmZsb29yKDFFMy9hKTo1fTt2YXIgRj1uZXcgTWVzc2FnZUNoYW5uZWwsRz1GLnBvcnQyO0YucG9ydDEub25tZXNzYWdlPWZ1bmN0aW9uKCl7aWYobnVsbCE9PUIpe3ZhciBhPWV4cG9ydHMudW5zdGFibGVfbm93KCk7RT1hK0Q7dHJ5e0IoITAsYSk/Ry5wb3N0TWVzc2FnZShudWxsKTooQT0hMSxCPW51bGwpfWNhdGNoKGIpe3Rocm93IEcucG9zdE1lc3NhZ2UobnVsbCksYjt9fWVsc2UgQT0hMX07Zj1mdW5jdGlvbihhKXtCPWE7QXx8KEE9ITAsRy5wb3N0TWVzc2FnZShudWxsKSl9O2c9ZnVuY3Rpb24oYSxiKXtDPVxueChmdW5jdGlvbigpe2EoZXhwb3J0cy51bnN0YWJsZV9ub3coKSl9LGIpfTtoPWZ1bmN0aW9uKCl7eShDKTtDPS0xfX1mdW5jdGlvbiBIKGEsYil7dmFyIGM9YS5sZW5ndGg7YS5wdXNoKGIpO2E6Zm9yKDs7KXt2YXIgZD1jLTE+Pj4xLGU9YVtkXTtpZih2b2lkIDAhPT1lJiYwPEkoZSxiKSlhW2RdPWIsYVtjXT1lLGM9ZDtlbHNlIGJyZWFrIGF9fWZ1bmN0aW9uIEooYSl7YT1hWzBdO3JldHVybiB2b2lkIDA9PT1hP251bGw6YX1cbmZ1bmN0aW9uIEsoYSl7dmFyIGI9YVswXTtpZih2b2lkIDAhPT1iKXt2YXIgYz1hLnBvcCgpO2lmKGMhPT1iKXthWzBdPWM7YTpmb3IodmFyIGQ9MCxlPWEubGVuZ3RoO2Q8ZTspe3ZhciBtPTIqKGQrMSktMSxuPWFbbV0sdj1tKzEscj1hW3ZdO2lmKHZvaWQgMCE9PW4mJjA+SShuLGMpKXZvaWQgMCE9PXImJjA+SShyLG4pPyhhW2RdPXIsYVt2XT1jLGQ9dik6KGFbZF09bixhW21dPWMsZD1tKTtlbHNlIGlmKHZvaWQgMCE9PXImJjA+SShyLGMpKWFbZF09cixhW3ZdPWMsZD12O2Vsc2UgYnJlYWsgYX19cmV0dXJuIGJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSShhLGIpe3ZhciBjPWEuc29ydEluZGV4LWIuc29ydEluZGV4O3JldHVybiAwIT09Yz9jOmEuaWQtYi5pZH12YXIgTD1bXSxNPVtdLE49MSxPPW51bGwsUD0zLFE9ITEsUj0hMSxTPSExO1xuZnVuY3Rpb24gVChhKXtmb3IodmFyIGI9SihNKTtudWxsIT09Yjspe2lmKG51bGw9PT1iLmNhbGxiYWNrKUsoTSk7ZWxzZSBpZihiLnN0YXJ0VGltZTw9YSlLKE0pLGIuc29ydEluZGV4PWIuZXhwaXJhdGlvblRpbWUsSChMLGIpO2Vsc2UgYnJlYWs7Yj1KKE0pfX1mdW5jdGlvbiBVKGEpe1M9ITE7VChhKTtpZighUilpZihudWxsIT09SihMKSlSPSEwLGYoVik7ZWxzZXt2YXIgYj1KKE0pO251bGwhPT1iJiZnKFUsYi5zdGFydFRpbWUtYSl9fVxuZnVuY3Rpb24gVihhLGIpe1I9ITE7UyYmKFM9ITEsaCgpKTtRPSEwO3ZhciBjPVA7dHJ5e1QoYik7Zm9yKE89SihMKTtudWxsIT09TyYmKCEoTy5leHBpcmF0aW9uVGltZT5iKXx8YSYmIWV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQoKSk7KXt2YXIgZD1PLmNhbGxiYWNrO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkKXtPLmNhbGxiYWNrPW51bGw7UD1PLnByaW9yaXR5TGV2ZWw7dmFyIGU9ZChPLmV4cGlyYXRpb25UaW1lPD1iKTtiPWV4cG9ydHMudW5zdGFibGVfbm93KCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGU/Ty5jYWxsYmFjaz1lOk89PT1KKEwpJiZLKEwpO1QoYil9ZWxzZSBLKEwpO089SihMKX1pZihudWxsIT09Tyl2YXIgbT0hMDtlbHNle3ZhciBuPUooTSk7bnVsbCE9PW4mJmcoVSxuLnN0YXJ0VGltZS1iKTttPSExfXJldHVybiBtfWZpbmFsbHl7Tz1udWxsLFA9YyxRPSExfX12YXIgVz1rO2V4cG9ydHMudW5zdGFibGVfSWRsZVByaW9yaXR5PTU7XG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5PTE7ZXhwb3J0cy51bnN0YWJsZV9Mb3dQcmlvcml0eT00O2V4cG9ydHMudW5zdGFibGVfTm9ybWFsUHJpb3JpdHk9MztleHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZz1udWxsO2V4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9MjtleHBvcnRzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKGEpe2EuY2FsbGJhY2s9bnVsbH07ZXhwb3J0cy51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe1J8fFF8fChSPSEwLGYoVikpfTtleHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIFB9O2V4cG9ydHMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gSihMKX07XG5leHBvcnRzLnVuc3RhYmxlX25leHQ9ZnVuY3Rpb24oYSl7c3dpdGNoKFApe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciBiPTM7YnJlYWs7ZGVmYXVsdDpiPVB9dmFyIGM9UDtQPWI7dHJ5e3JldHVybiBhKCl9ZmluYWxseXtQPWN9fTtleHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7fTtleHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludD1XO2V4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDphPTN9dmFyIGM9UDtQPWE7dHJ5e3JldHVybiBiKCl9ZmluYWxseXtQPWN9fTtcbmV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcIm9iamVjdFwiPT09dHlwZW9mIGMmJm51bGwhPT1jPyhjPWMuZGVsYXksYz1cIm51bWJlclwiPT09dHlwZW9mIGMmJjA8Yz9kK2M6ZCk6Yz1kO3N3aXRjaChhKXtjYXNlIDE6dmFyIGU9LTE7YnJlYWs7Y2FzZSAyOmU9MjUwO2JyZWFrO2Nhc2UgNTplPTEwNzM3NDE4MjM7YnJlYWs7Y2FzZSA0OmU9MUU0O2JyZWFrO2RlZmF1bHQ6ZT01RTN9ZT1jK2U7YT17aWQ6TisrLGNhbGxiYWNrOmIscHJpb3JpdHlMZXZlbDphLHN0YXJ0VGltZTpjLGV4cGlyYXRpb25UaW1lOmUsc29ydEluZGV4Oi0xfTtjPmQ/KGEuc29ydEluZGV4PWMsSChNLGEpLG51bGw9PT1KKEwpJiZhPT09SihNKSYmKFM/aCgpOlM9ITAsZyhVLGMtZCkpKTooYS5zb3J0SW5kZXg9ZSxIKEwsYSksUnx8UXx8KFI9ITAsZihWKSkpO3JldHVybiBhfTtcbmV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKGEpe3ZhciBiPVA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9UDtQPWI7dHJ5e3JldHVybiBhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e1A9Y319fTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuLypcbiBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiovXG4ndXNlIHN0cmljdCc7dmFyIGFhPXJlcXVpcmUoXCJyZWFjdFwiKSxtPXJlcXVpcmUoXCJvYmplY3QtYXNzaWduXCIpLHI9cmVxdWlyZShcInNjaGVkdWxlclwiKTtmdW5jdGlvbiB5KGEpe2Zvcih2YXIgYj1cImh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PVwiK2EsYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYis9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbY10pO3JldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2ErXCI7IHZpc2l0IFwiK2IrXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifWlmKCFhYSl0aHJvdyBFcnJvcih5KDIyNykpO3ZhciBiYT1uZXcgU2V0LGNhPXt9O2Z1bmN0aW9uIGRhKGEsYil7ZWEoYSxiKTtlYShhK1wiQ2FwdHVyZVwiLGIpfVxuZnVuY3Rpb24gZWEoYSxiKXtjYVthXT1iO2ZvcihhPTA7YTxiLmxlbmd0aDthKyspYmEuYWRkKGJbYV0pfVxudmFyIGZhPSEoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KSxoYT0vXls6QS1aX2EtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRF1bOkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRcXC0uMC05XFx1MDBCN1xcdTAzMDAtXFx1MDM2RlxcdTIwM0YtXFx1MjA0MF0qJC8saWE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbmphPXt9LGthPXt9O2Z1bmN0aW9uIGxhKGEpe2lmKGlhLmNhbGwoa2EsYSkpcmV0dXJuITA7aWYoaWEuY2FsbChqYSxhKSlyZXR1cm4hMTtpZihoYS50ZXN0KGEpKXJldHVybiBrYVthXT0hMDtqYVthXT0hMDtyZXR1cm4hMX1mdW5jdGlvbiBtYShhLGIsYyxkKXtpZihudWxsIT09YyYmMD09PWMudHlwZSlyZXR1cm4hMTtzd2l0Y2godHlwZW9mIGIpe2Nhc2UgXCJmdW5jdGlvblwiOmNhc2UgXCJzeW1ib2xcIjpyZXR1cm4hMDtjYXNlIFwiYm9vbGVhblwiOmlmKGQpcmV0dXJuITE7aWYobnVsbCE9PWMpcmV0dXJuIWMuYWNjZXB0c0Jvb2xlYW5zO2E9YS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSk7cmV0dXJuXCJkYXRhLVwiIT09YSYmXCJhcmlhLVwiIT09YTtkZWZhdWx0OnJldHVybiExfX1cbmZ1bmN0aW9uIG5hKGEsYixjLGQpe2lmKG51bGw9PT1ifHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIGJ8fG1hKGEsYixjLGQpKXJldHVybiEwO2lmKGQpcmV0dXJuITE7aWYobnVsbCE9PWMpc3dpdGNoKGMudHlwZSl7Y2FzZSAzOnJldHVybiFiO2Nhc2UgNDpyZXR1cm4hMT09PWI7Y2FzZSA1OnJldHVybiBpc05hTihiKTtjYXNlIDY6cmV0dXJuIGlzTmFOKGIpfHwxPmJ9cmV0dXJuITF9ZnVuY3Rpb24gQihhLGIsYyxkLGUsZixnKXt0aGlzLmFjY2VwdHNCb29sZWFucz0yPT09Ynx8Mz09PWJ8fDQ9PT1iO3RoaXMuYXR0cmlidXRlTmFtZT1kO3RoaXMuYXR0cmlidXRlTmFtZXNwYWNlPWU7dGhpcy5tdXN0VXNlUHJvcGVydHk9Yzt0aGlzLnByb3BlcnR5TmFtZT1hO3RoaXMudHlwZT1iO3RoaXMuc2FuaXRpemVVUkw9Zjt0aGlzLnJlbW92ZUVtcHR5U3RyaW5nPWd9dmFyIEQ9e307XG5cImNoaWxkcmVuIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGRlZmF1bHRWYWx1ZSBkZWZhdWx0Q2hlY2tlZCBpbm5lckhUTUwgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZyBzdHlsZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwwLCExLGEsbnVsbCwhMSwhMSl9KTtbW1wiYWNjZXB0Q2hhcnNldFwiLFwiYWNjZXB0LWNoYXJzZXRcIl0sW1wiY2xhc3NOYW1lXCIsXCJjbGFzc1wiXSxbXCJodG1sRm9yXCIsXCJmb3JcIl0sW1wiaHR0cEVxdWl2XCIsXCJodHRwLWVxdWl2XCJdXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWFbMF07RFtiXT1uZXcgQihiLDEsITEsYVsxXSxudWxsLCExLCExKX0pO1tcImNvbnRlbnRFZGl0YWJsZVwiLFwiZHJhZ2dhYmxlXCIsXCJzcGVsbENoZWNrXCIsXCJ2YWx1ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwyLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1xuW1wiYXV0b1JldmVyc2VcIixcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIixcImZvY3VzYWJsZVwiLFwicHJlc2VydmVBbHBoYVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwyLCExLGEsbnVsbCwhMSwhMSl9KTtcImFsbG93RnVsbFNjcmVlbiBhc3luYyBhdXRvRm9jdXMgYXV0b1BsYXkgY29udHJvbHMgZGVmYXVsdCBkZWZlciBkaXNhYmxlZCBkaXNhYmxlUGljdHVyZUluUGljdHVyZSBkaXNhYmxlUmVtb3RlUGxheWJhY2sgZm9ybU5vVmFsaWRhdGUgaGlkZGVuIGxvb3Agbm9Nb2R1bGUgbm9WYWxpZGF0ZSBvcGVuIHBsYXlzSW5saW5lIHJlYWRPbmx5IHJlcXVpcmVkIHJldmVyc2VkIHNjb3BlZCBzZWFtbGVzcyBpdGVtU2NvcGVcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMywhMSxhLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtcbltcImNoZWNrZWRcIixcIm11bHRpcGxlXCIsXCJtdXRlZFwiLFwic2VsZWN0ZWRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsMywhMCxhLG51bGwsITEsITEpfSk7W1wiY2FwdHVyZVwiLFwiZG93bmxvYWRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtEW2FdPW5ldyBCKGEsNCwhMSxhLG51bGwsITEsITEpfSk7W1wiY29sc1wiLFwicm93c1wiLFwic2l6ZVwiLFwic3BhblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSw2LCExLGEsbnVsbCwhMSwhMSl9KTtbXCJyb3dTcGFuXCIsXCJzdGFydFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSw1LCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO3ZhciBvYT0vW1xcLTpdKFthLXpdKS9nO2Z1bmN0aW9uIHBhKGEpe3JldHVybiBhWzFdLnRvVXBwZXJDYXNlKCl9XG5cImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0XCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKG9hLFxucGEpO0RbYl09bmV3IEIoYiwxLCExLGEsbnVsbCwhMSwhMSl9KTtcInhsaW5rOmFjdHVhdGUgeGxpbms6YXJjcm9sZSB4bGluazpyb2xlIHhsaW5rOnNob3cgeGxpbms6dGl0bGUgeGxpbms6dHlwZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShvYSxwYSk7RFtiXT1uZXcgQihiLDEsITEsYSxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiwhMSwhMSl9KTtbXCJ4bWw6YmFzZVwiLFwieG1sOmxhbmdcIixcInhtbDpzcGFjZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShvYSxwYSk7RFtiXT1uZXcgQihiLDEsITEsYSxcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLCExLCExKX0pO1tcInRhYkluZGV4XCIsXCJjcm9zc09yaWdpblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwxLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1xuRC54bGlua0hyZWY9bmV3IEIoXCJ4bGlua0hyZWZcIiwxLCExLFwieGxpbms6aHJlZlwiLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLCEwLCExKTtbXCJzcmNcIixcImhyZWZcIixcImFjdGlvblwiLFwiZm9ybUFjdGlvblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0RbYV09bmV3IEIoYSwxLCExLGEudG9Mb3dlckNhc2UoKSxudWxsLCEwLCEwKX0pO1xuZnVuY3Rpb24gcWEoYSxiLGMsZCl7dmFyIGU9RC5oYXNPd25Qcm9wZXJ0eShiKT9EW2JdOm51bGw7dmFyIGY9bnVsbCE9PWU/MD09PWUudHlwZTpkPyExOiEoMjxiLmxlbmd0aCl8fFwib1wiIT09YlswXSYmXCJPXCIhPT1iWzBdfHxcIm5cIiE9PWJbMV0mJlwiTlwiIT09YlsxXT8hMTohMDtmfHwobmEoYixjLGUsZCkmJihjPW51bGwpLGR8fG51bGw9PT1lP2xhKGIpJiYobnVsbD09PWM/YS5yZW1vdmVBdHRyaWJ1dGUoYik6YS5zZXRBdHRyaWJ1dGUoYixcIlwiK2MpKTplLm11c3RVc2VQcm9wZXJ0eT9hW2UucHJvcGVydHlOYW1lXT1udWxsPT09Yz8zPT09ZS50eXBlPyExOlwiXCI6YzooYj1lLmF0dHJpYnV0ZU5hbWUsZD1lLmF0dHJpYnV0ZU5hbWVzcGFjZSxudWxsPT09Yz9hLnJlbW92ZUF0dHJpYnV0ZShiKTooZT1lLnR5cGUsYz0zPT09ZXx8ND09PWUmJiEwPT09Yz9cIlwiOlwiXCIrYyxkP2Euc2V0QXR0cmlidXRlTlMoZCxiLGMpOmEuc2V0QXR0cmlidXRlKGIsYykpKSl9XG52YXIgcmE9YWEuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsc2E9NjAxMDMsdGE9NjAxMDYsdWE9NjAxMDcsd2E9NjAxMDgseGE9NjAxMTQseWE9NjAxMDksemE9NjAxMTAsQWE9NjAxMTIsQmE9NjAxMTMsQ2E9NjAxMjAsRGE9NjAxMTUsRWE9NjAxMTYsRmE9NjAxMjEsR2E9NjAxMjgsSGE9NjAxMjksSWE9NjAxMzAsSmE9NjAxMzE7XG5pZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yKXt2YXIgRT1TeW1ib2wuZm9yO3NhPUUoXCJyZWFjdC5lbGVtZW50XCIpO3RhPUUoXCJyZWFjdC5wb3J0YWxcIik7dWE9RShcInJlYWN0LmZyYWdtZW50XCIpO3dhPUUoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKTt4YT1FKFwicmVhY3QucHJvZmlsZXJcIik7eWE9RShcInJlYWN0LnByb3ZpZGVyXCIpO3phPUUoXCJyZWFjdC5jb250ZXh0XCIpO0FhPUUoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTtCYT1FKFwicmVhY3Quc3VzcGVuc2VcIik7Q2E9RShcInJlYWN0LnN1c3BlbnNlX2xpc3RcIik7RGE9RShcInJlYWN0Lm1lbW9cIik7RWE9RShcInJlYWN0LmxhenlcIik7RmE9RShcInJlYWN0LmJsb2NrXCIpO0UoXCJyZWFjdC5zY29wZVwiKTtHYT1FKFwicmVhY3Qub3BhcXVlLmlkXCIpO0hhPUUoXCJyZWFjdC5kZWJ1Z190cmFjZV9tb2RlXCIpO0lhPUUoXCJyZWFjdC5vZmZzY3JlZW5cIik7SmE9RShcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIil9XG52YXIgS2E9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIExhKGEpe2lmKG51bGw9PT1hfHxcIm9iamVjdFwiIT09dHlwZW9mIGEpcmV0dXJuIG51bGw7YT1LYSYmYVtLYV18fGFbXCJAQGl0ZXJhdG9yXCJdO3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBhP2E6bnVsbH12YXIgTWE7ZnVuY3Rpb24gTmEoYSl7aWYodm9pZCAwPT09TWEpdHJ5e3Rocm93IEVycm9yKCk7fWNhdGNoKGMpe3ZhciBiPWMuc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7TWE9YiYmYlsxXXx8XCJcIn1yZXR1cm5cIlxcblwiK01hK2F9dmFyIE9hPSExO1xuZnVuY3Rpb24gUGEoYSxiKXtpZighYXx8T2EpcmV0dXJuXCJcIjtPYT0hMDt2YXIgYz1FcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT12b2lkIDA7dHJ5e2lmKGIpaWYoYj1mdW5jdGlvbigpe3Rocm93IEVycm9yKCk7fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5wcm90b3R5cGUsXCJwcm9wc1wiLHtzZXQ6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpO319KSxcIm9iamVjdFwiPT09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QoYixbXSl9Y2F0Y2goayl7dmFyIGQ9a31SZWZsZWN0LmNvbnN0cnVjdChhLFtdLGIpfWVsc2V7dHJ5e2IuY2FsbCgpfWNhdGNoKGspe2Q9a31hLmNhbGwoYi5wcm90b3R5cGUpfWVsc2V7dHJ5e3Rocm93IEVycm9yKCk7fWNhdGNoKGspe2Q9a31hKCl9fWNhdGNoKGspe2lmKGsmJmQmJlwic3RyaW5nXCI9PT10eXBlb2Ygay5zdGFjayl7Zm9yKHZhciBlPWsuc3RhY2suc3BsaXQoXCJcXG5cIiksXG5mPWQuc3RhY2suc3BsaXQoXCJcXG5cIiksZz1lLmxlbmd0aC0xLGg9Zi5sZW5ndGgtMTsxPD1nJiYwPD1oJiZlW2ddIT09ZltoXTspaC0tO2Zvcig7MTw9ZyYmMDw9aDtnLS0saC0tKWlmKGVbZ10hPT1mW2hdKXtpZigxIT09Z3x8MSE9PWgpe2RvIGlmKGctLSxoLS0sMD5ofHxlW2ddIT09ZltoXSlyZXR1cm5cIlxcblwiK2VbZ10ucmVwbGFjZShcIiBhdCBuZXcgXCIsXCIgYXQgXCIpO3doaWxlKDE8PWcmJjA8PWgpfWJyZWFrfX19ZmluYWxseXtPYT0hMSxFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1jfXJldHVybihhPWE/YS5kaXNwbGF5TmFtZXx8YS5uYW1lOlwiXCIpP05hKGEpOlwiXCJ9XG5mdW5jdGlvbiBRYShhKXtzd2l0Y2goYS50YWcpe2Nhc2UgNTpyZXR1cm4gTmEoYS50eXBlKTtjYXNlIDE2OnJldHVybiBOYShcIkxhenlcIik7Y2FzZSAxMzpyZXR1cm4gTmEoXCJTdXNwZW5zZVwiKTtjYXNlIDE5OnJldHVybiBOYShcIlN1c3BlbnNlTGlzdFwiKTtjYXNlIDA6Y2FzZSAyOmNhc2UgMTU6cmV0dXJuIGE9UGEoYS50eXBlLCExKSxhO2Nhc2UgMTE6cmV0dXJuIGE9UGEoYS50eXBlLnJlbmRlciwhMSksYTtjYXNlIDIyOnJldHVybiBhPVBhKGEudHlwZS5fcmVuZGVyLCExKSxhO2Nhc2UgMTpyZXR1cm4gYT1QYShhLnR5cGUsITApLGE7ZGVmYXVsdDpyZXR1cm5cIlwifX1cbmZ1bmN0aW9uIFJhKGEpe2lmKG51bGw9PWEpcmV0dXJuIG51bGw7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGEpcmV0dXJuIGEuZGlzcGxheU5hbWV8fGEubmFtZXx8bnVsbDtpZihcInN0cmluZ1wiPT09dHlwZW9mIGEpcmV0dXJuIGE7c3dpdGNoKGEpe2Nhc2UgdWE6cmV0dXJuXCJGcmFnbWVudFwiO2Nhc2UgdGE6cmV0dXJuXCJQb3J0YWxcIjtjYXNlIHhhOnJldHVyblwiUHJvZmlsZXJcIjtjYXNlIHdhOnJldHVyblwiU3RyaWN0TW9kZVwiO2Nhc2UgQmE6cmV0dXJuXCJTdXNwZW5zZVwiO2Nhc2UgQ2E6cmV0dXJuXCJTdXNwZW5zZUxpc3RcIn1pZihcIm9iamVjdFwiPT09dHlwZW9mIGEpc3dpdGNoKGEuJCR0eXBlb2Ype2Nhc2UgemE6cmV0dXJuKGEuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Db25zdW1lclwiO2Nhc2UgeWE6cmV0dXJuKGEuX2NvbnRleHQuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Qcm92aWRlclwiO2Nhc2UgQWE6dmFyIGI9YS5yZW5kZXI7Yj1iLmRpc3BsYXlOYW1lfHxiLm5hbWV8fFwiXCI7XG5yZXR1cm4gYS5kaXNwbGF5TmFtZXx8KFwiXCIhPT1iP1wiRm9yd2FyZFJlZihcIitiK1wiKVwiOlwiRm9yd2FyZFJlZlwiKTtjYXNlIERhOnJldHVybiBSYShhLnR5cGUpO2Nhc2UgRmE6cmV0dXJuIFJhKGEuX3JlbmRlcik7Y2FzZSBFYTpiPWEuX3BheWxvYWQ7YT1hLl9pbml0O3RyeXtyZXR1cm4gUmEoYShiKSl9Y2F0Y2goYyl7fX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBTYShhKXtzd2l0Y2godHlwZW9mIGEpe2Nhc2UgXCJib29sZWFuXCI6Y2FzZSBcIm51bWJlclwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwic3RyaW5nXCI6Y2FzZSBcInVuZGVmaW5lZFwiOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuXCJcIn19ZnVuY3Rpb24gVGEoYSl7dmFyIGI9YS50eXBlO3JldHVybihhPWEubm9kZU5hbWUpJiZcImlucHV0XCI9PT1hLnRvTG93ZXJDYXNlKCkmJihcImNoZWNrYm94XCI9PT1ifHxcInJhZGlvXCI9PT1iKX1cbmZ1bmN0aW9uIFVhKGEpe3ZhciBiPVRhKGEpP1wiY2hlY2tlZFwiOlwidmFsdWVcIixjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsYiksZD1cIlwiK2FbYl07aWYoIWEuaGFzT3duUHJvcGVydHkoYikmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgYyYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGMuZ2V0JiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgYy5zZXQpe3ZhciBlPWMuZ2V0LGY9Yy5zZXQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmNhbGwodGhpcyl9LHNldDpmdW5jdGlvbihhKXtkPVwiXCIrYTtmLmNhbGwodGhpcyxhKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHtlbnVtZXJhYmxlOmMuZW51bWVyYWJsZX0pO3JldHVybntnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiBkfSxzZXRWYWx1ZTpmdW5jdGlvbihhKXtkPVwiXCIrYX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7YS5fdmFsdWVUcmFja2VyPVxubnVsbDtkZWxldGUgYVtiXX19fX1mdW5jdGlvbiBWYShhKXthLl92YWx1ZVRyYWNrZXJ8fChhLl92YWx1ZVRyYWNrZXI9VWEoYSkpfWZ1bmN0aW9uIFdhKGEpe2lmKCFhKXJldHVybiExO3ZhciBiPWEuX3ZhbHVlVHJhY2tlcjtpZighYilyZXR1cm4hMDt2YXIgYz1iLmdldFZhbHVlKCk7dmFyIGQ9XCJcIjthJiYoZD1UYShhKT9hLmNoZWNrZWQ/XCJ0cnVlXCI6XCJmYWxzZVwiOmEudmFsdWUpO2E9ZDtyZXR1cm4gYSE9PWM/KGIuc2V0VmFsdWUoYSksITApOiExfWZ1bmN0aW9uIFhhKGEpe2E9YXx8KFwidW5kZWZpbmVkXCIhPT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwKTtpZihcInVuZGVmaW5lZFwiPT09dHlwZW9mIGEpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBhLmFjdGl2ZUVsZW1lbnR8fGEuYm9keX1jYXRjaChiKXtyZXR1cm4gYS5ib2R5fX1cbmZ1bmN0aW9uIFlhKGEsYil7dmFyIGM9Yi5jaGVja2VkO3JldHVybiBtKHt9LGIse2RlZmF1bHRDaGVja2VkOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLHZhbHVlOnZvaWQgMCxjaGVja2VkOm51bGwhPWM/YzphLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWR9KX1mdW5jdGlvbiBaYShhLGIpe3ZhciBjPW51bGw9PWIuZGVmYXVsdFZhbHVlP1wiXCI6Yi5kZWZhdWx0VmFsdWUsZD1udWxsIT1iLmNoZWNrZWQ/Yi5jaGVja2VkOmIuZGVmYXVsdENoZWNrZWQ7Yz1TYShudWxsIT1iLnZhbHVlP2IudmFsdWU6Yyk7YS5fd3JhcHBlclN0YXRlPXtpbml0aWFsQ2hlY2tlZDpkLGluaXRpYWxWYWx1ZTpjLGNvbnRyb2xsZWQ6XCJjaGVja2JveFwiPT09Yi50eXBlfHxcInJhZGlvXCI9PT1iLnR5cGU/bnVsbCE9Yi5jaGVja2VkOm51bGwhPWIudmFsdWV9fWZ1bmN0aW9uICRhKGEsYil7Yj1iLmNoZWNrZWQ7bnVsbCE9YiYmcWEoYSxcImNoZWNrZWRcIixiLCExKX1cbmZ1bmN0aW9uIGFiKGEsYil7JGEoYSxiKTt2YXIgYz1TYShiLnZhbHVlKSxkPWIudHlwZTtpZihudWxsIT1jKWlmKFwibnVtYmVyXCI9PT1kKXtpZigwPT09YyYmXCJcIj09PWEudmFsdWV8fGEudmFsdWUhPWMpYS52YWx1ZT1cIlwiK2N9ZWxzZSBhLnZhbHVlIT09XCJcIitjJiYoYS52YWx1ZT1cIlwiK2MpO2Vsc2UgaWYoXCJzdWJtaXRcIj09PWR8fFwicmVzZXRcIj09PWQpe2EucmVtb3ZlQXR0cmlidXRlKFwidmFsdWVcIik7cmV0dXJufWIuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKT9iYihhLGIudHlwZSxjKTpiLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFZhbHVlXCIpJiZiYihhLGIudHlwZSxTYShiLmRlZmF1bHRWYWx1ZSkpO251bGw9PWIuY2hlY2tlZCYmbnVsbCE9Yi5kZWZhdWx0Q2hlY2tlZCYmKGEuZGVmYXVsdENoZWNrZWQ9ISFiLmRlZmF1bHRDaGVja2VkKX1cbmZ1bmN0aW9uIGNiKGEsYixjKXtpZihiLmhhc093blByb3BlcnR5KFwidmFsdWVcIil8fGIuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikpe3ZhciBkPWIudHlwZTtpZighKFwic3VibWl0XCIhPT1kJiZcInJlc2V0XCIhPT1kfHx2b2lkIDAhPT1iLnZhbHVlJiZudWxsIT09Yi52YWx1ZSkpcmV0dXJuO2I9XCJcIithLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlO2N8fGI9PT1hLnZhbHVlfHwoYS52YWx1ZT1iKTthLmRlZmF1bHRWYWx1ZT1ifWM9YS5uYW1lO1wiXCIhPT1jJiYoYS5uYW1lPVwiXCIpO2EuZGVmYXVsdENoZWNrZWQ9ISFhLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQ7XCJcIiE9PWMmJihhLm5hbWU9Yyl9XG5mdW5jdGlvbiBiYihhLGIsYyl7aWYoXCJudW1iZXJcIiE9PWJ8fFhhKGEub3duZXJEb2N1bWVudCkhPT1hKW51bGw9PWM/YS5kZWZhdWx0VmFsdWU9XCJcIithLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlOmEuZGVmYXVsdFZhbHVlIT09XCJcIitjJiYoYS5kZWZhdWx0VmFsdWU9XCJcIitjKX1mdW5jdGlvbiBkYihhKXt2YXIgYj1cIlwiO2FhLkNoaWxkcmVuLmZvckVhY2goYSxmdW5jdGlvbihhKXtudWxsIT1hJiYoYis9YSl9KTtyZXR1cm4gYn1mdW5jdGlvbiBlYihhLGIpe2E9bSh7Y2hpbGRyZW46dm9pZCAwfSxiKTtpZihiPWRiKGIuY2hpbGRyZW4pKWEuY2hpbGRyZW49YjtyZXR1cm4gYX1cbmZ1bmN0aW9uIGZiKGEsYixjLGQpe2E9YS5vcHRpb25zO2lmKGIpe2I9e307Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspYltcIiRcIitjW2VdXT0hMDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWU9Yi5oYXNPd25Qcm9wZXJ0eShcIiRcIithW2NdLnZhbHVlKSxhW2NdLnNlbGVjdGVkIT09ZSYmKGFbY10uc2VsZWN0ZWQ9ZSksZSYmZCYmKGFbY10uZGVmYXVsdFNlbGVjdGVkPSEwKX1lbHNle2M9XCJcIitTYShjKTtiPW51bGw7Zm9yKGU9MDtlPGEubGVuZ3RoO2UrKyl7aWYoYVtlXS52YWx1ZT09PWMpe2FbZV0uc2VsZWN0ZWQ9ITA7ZCYmKGFbZV0uZGVmYXVsdFNlbGVjdGVkPSEwKTtyZXR1cm59bnVsbCE9PWJ8fGFbZV0uZGlzYWJsZWR8fChiPWFbZV0pfW51bGwhPT1iJiYoYi5zZWxlY3RlZD0hMCl9fVxuZnVuY3Rpb24gZ2IoYSxiKXtpZihudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKXRocm93IEVycm9yKHkoOTEpKTtyZXR1cm4gbSh7fSxiLHt2YWx1ZTp2b2lkIDAsZGVmYXVsdFZhbHVlOnZvaWQgMCxjaGlsZHJlbjpcIlwiK2EuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWV9KX1mdW5jdGlvbiBoYihhLGIpe3ZhciBjPWIudmFsdWU7aWYobnVsbD09Yyl7Yz1iLmNoaWxkcmVuO2I9Yi5kZWZhdWx0VmFsdWU7aWYobnVsbCE9Yyl7aWYobnVsbCE9Yil0aHJvdyBFcnJvcih5KDkyKSk7aWYoQXJyYXkuaXNBcnJheShjKSl7aWYoISgxPj1jLmxlbmd0aCkpdGhyb3cgRXJyb3IoeSg5MykpO2M9Y1swXX1iPWN9bnVsbD09YiYmKGI9XCJcIik7Yz1ifWEuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOlNhKGMpfX1cbmZ1bmN0aW9uIGliKGEsYil7dmFyIGM9U2EoYi52YWx1ZSksZD1TYShiLmRlZmF1bHRWYWx1ZSk7bnVsbCE9YyYmKGM9XCJcIitjLGMhPT1hLnZhbHVlJiYoYS52YWx1ZT1jKSxudWxsPT1iLmRlZmF1bHRWYWx1ZSYmYS5kZWZhdWx0VmFsdWUhPT1jJiYoYS5kZWZhdWx0VmFsdWU9YykpO251bGwhPWQmJihhLmRlZmF1bHRWYWx1ZT1cIlwiK2QpfWZ1bmN0aW9uIGpiKGEpe3ZhciBiPWEudGV4dENvbnRlbnQ7Yj09PWEuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJlwiXCIhPT1iJiZudWxsIT09YiYmKGEudmFsdWU9Yil9dmFyIGtiPXtodG1sOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiLG1hdGhtbDpcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIixzdmc6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifTtcbmZ1bmN0aW9uIGxiKGEpe3N3aXRjaChhKXtjYXNlIFwic3ZnXCI6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO2Nhc2UgXCJtYXRoXCI6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI7ZGVmYXVsdDpyZXR1cm5cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIn19ZnVuY3Rpb24gbWIoYSxiKXtyZXR1cm4gbnVsbD09YXx8XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI9PT1hP2xiKGIpOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj09PWEmJlwiZm9yZWlnbk9iamVjdFwiPT09Yj9cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjphfVxudmFyIG5iLG9iPWZ1bmN0aW9uKGEpe3JldHVyblwidW5kZWZpbmVkXCIhPT10eXBlb2YgTVNBcHAmJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKGIsYyxkLGUpe01TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGEoYixjLGQsZSl9KX06YX0oZnVuY3Rpb24oYSxiKXtpZihhLm5hbWVzcGFjZVVSSSE9PWtiLnN2Z3x8XCJpbm5lckhUTUxcImluIGEpYS5pbm5lckhUTUw9YjtlbHNle25iPW5ifHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO25iLmlubmVySFRNTD1cIjxzdmc+XCIrYi52YWx1ZU9mKCkudG9TdHJpbmcoKStcIjwvc3ZnPlwiO2ZvcihiPW5iLmZpcnN0Q2hpbGQ7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7Zm9yKDtiLmZpcnN0Q2hpbGQ7KWEuYXBwZW5kQ2hpbGQoYi5maXJzdENoaWxkKX19KTtcbmZ1bmN0aW9uIHBiKGEsYil7aWYoYil7dmFyIGM9YS5maXJzdENoaWxkO2lmKGMmJmM9PT1hLmxhc3RDaGlsZCYmMz09PWMubm9kZVR5cGUpe2Mubm9kZVZhbHVlPWI7cmV0dXJufX1hLnRleHRDb250ZW50PWJ9XG52YXIgcWI9e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGJvcmRlckltYWdlT3V0c2V0OiEwLGJvcmRlckltYWdlU2xpY2U6ITAsYm9yZGVySW1hZ2VXaWR0aDohMCxib3hGbGV4OiEwLGJveEZsZXhHcm91cDohMCxib3hPcmRpbmFsR3JvdXA6ITAsY29sdW1uQ291bnQ6ITAsY29sdW1uczohMCxmbGV4OiEwLGZsZXhHcm93OiEwLGZsZXhQb3NpdGl2ZTohMCxmbGV4U2hyaW5rOiEwLGZsZXhOZWdhdGl2ZTohMCxmbGV4T3JkZXI6ITAsZ3JpZEFyZWE6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTcGFuOiEwLGdyaWRSb3dTdGFydDohMCxncmlkQ29sdW1uOiEwLGdyaWRDb2x1bW5FbmQ6ITAsZ3JpZENvbHVtblNwYW46ITAsZ3JpZENvbHVtblN0YXJ0OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUNsYW1wOiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHRhYlNpemU6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwLGZpbGxPcGFjaXR5OiEwLFxuZmxvb2RPcGFjaXR5OiEwLHN0b3BPcGFjaXR5OiEwLHN0cm9rZURhc2hhcnJheTohMCxzdHJva2VEYXNob2Zmc2V0OiEwLHN0cm9rZU1pdGVybGltaXQ6ITAsc3Ryb2tlT3BhY2l0eTohMCxzdHJva2VXaWR0aDohMH0scmI9W1wiV2Via2l0XCIsXCJtc1wiLFwiTW96XCIsXCJPXCJdO09iamVjdC5rZXlzKHFiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JiLmZvckVhY2goZnVuY3Rpb24oYil7Yj1iK2EuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zdWJzdHJpbmcoMSk7cWJbYl09cWJbYV19KX0pO2Z1bmN0aW9uIHNiKGEsYixjKXtyZXR1cm4gbnVsbD09Ynx8XCJib29sZWFuXCI9PT10eXBlb2YgYnx8XCJcIj09PWI/XCJcIjpjfHxcIm51bWJlclwiIT09dHlwZW9mIGJ8fDA9PT1ifHxxYi5oYXNPd25Qcm9wZXJ0eShhKSYmcWJbYV0/KFwiXCIrYikudHJpbSgpOmIrXCJweFwifVxuZnVuY3Rpb24gdGIoYSxiKXthPWEuc3R5bGU7Zm9yKHZhciBjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSl7dmFyIGQ9MD09PWMuaW5kZXhPZihcIi0tXCIpLGU9c2IoYyxiW2NdLGQpO1wiZmxvYXRcIj09PWMmJihjPVwiY3NzRmxvYXRcIik7ZD9hLnNldFByb3BlcnR5KGMsZSk6YVtjXT1lfX12YXIgdWI9bSh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtcbmZ1bmN0aW9uIHZiKGEsYil7aWYoYil7aWYodWJbYV0mJihudWxsIT1iLmNoaWxkcmVufHxudWxsIT1iLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSl0aHJvdyBFcnJvcih5KDEzNyxhKSk7aWYobnVsbCE9Yi5kYW5nZXJvdXNseVNldElubmVySFRNTCl7aWYobnVsbCE9Yi5jaGlsZHJlbil0aHJvdyBFcnJvcih5KDYwKSk7aWYoIShcIm9iamVjdFwiPT09dHlwZW9mIGIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJlwiX19odG1sXCJpbiBiLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSl0aHJvdyBFcnJvcih5KDYxKSk7fWlmKG51bGwhPWIuc3R5bGUmJlwib2JqZWN0XCIhPT10eXBlb2YgYi5zdHlsZSl0aHJvdyBFcnJvcih5KDYyKSk7fX1cbmZ1bmN0aW9uIHdiKGEsYil7aWYoLTE9PT1hLmluZGV4T2YoXCItXCIpKXJldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYi5pcztzd2l0Y2goYSl7Y2FzZSBcImFubm90YXRpb24teG1sXCI6Y2FzZSBcImNvbG9yLXByb2ZpbGVcIjpjYXNlIFwiZm9udC1mYWNlXCI6Y2FzZSBcImZvbnQtZmFjZS1zcmNcIjpjYXNlIFwiZm9udC1mYWNlLXVyaVwiOmNhc2UgXCJmb250LWZhY2UtZm9ybWF0XCI6Y2FzZSBcImZvbnQtZmFjZS1uYW1lXCI6Y2FzZSBcIm1pc3NpbmctZ2x5cGhcIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1mdW5jdGlvbiB4YihhKXthPWEudGFyZ2V0fHxhLnNyY0VsZW1lbnR8fHdpbmRvdzthLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoYT1hLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KTtyZXR1cm4gMz09PWEubm9kZVR5cGU/YS5wYXJlbnROb2RlOmF9dmFyIHliPW51bGwsemI9bnVsbCxBYj1udWxsO1xuZnVuY3Rpb24gQmIoYSl7aWYoYT1DYihhKSl7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIHliKXRocm93IEVycm9yKHkoMjgwKSk7dmFyIGI9YS5zdGF0ZU5vZGU7YiYmKGI9RGIoYikseWIoYS5zdGF0ZU5vZGUsYS50eXBlLGIpKX19ZnVuY3Rpb24gRWIoYSl7emI/QWI/QWIucHVzaChhKTpBYj1bYV06emI9YX1mdW5jdGlvbiBGYigpe2lmKHpiKXt2YXIgYT16YixiPUFiO0FiPXpiPW51bGw7QmIoYSk7aWYoYilmb3IoYT0wO2E8Yi5sZW5ndGg7YSsrKUJiKGJbYV0pfX1mdW5jdGlvbiBHYihhLGIpe3JldHVybiBhKGIpfWZ1bmN0aW9uIEhiKGEsYixjLGQsZSl7cmV0dXJuIGEoYixjLGQsZSl9ZnVuY3Rpb24gSWIoKXt9dmFyIEpiPUdiLEtiPSExLExiPSExO2Z1bmN0aW9uIE1iKCl7aWYobnVsbCE9PXpifHxudWxsIT09QWIpSWIoKSxGYigpfVxuZnVuY3Rpb24gTmIoYSxiLGMpe2lmKExiKXJldHVybiBhKGIsYyk7TGI9ITA7dHJ5e3JldHVybiBKYihhLGIsYyl9ZmluYWxseXtMYj0hMSxNYigpfX1cbmZ1bmN0aW9uIE9iKGEsYil7dmFyIGM9YS5zdGF0ZU5vZGU7aWYobnVsbD09PWMpcmV0dXJuIG51bGw7dmFyIGQ9RGIoYyk7aWYobnVsbD09PWQpcmV0dXJuIG51bGw7Yz1kW2JdO2E6c3dpdGNoKGIpe2Nhc2UgXCJvbkNsaWNrXCI6Y2FzZSBcIm9uQ2xpY2tDYXB0dXJlXCI6Y2FzZSBcIm9uRG91YmxlQ2xpY2tcIjpjYXNlIFwib25Eb3VibGVDbGlja0NhcHR1cmVcIjpjYXNlIFwib25Nb3VzZURvd25cIjpjYXNlIFwib25Nb3VzZURvd25DYXB0dXJlXCI6Y2FzZSBcIm9uTW91c2VNb3ZlXCI6Y2FzZSBcIm9uTW91c2VNb3ZlQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlVXBcIjpjYXNlIFwib25Nb3VzZVVwQ2FwdHVyZVwiOmNhc2UgXCJvbk1vdXNlRW50ZXJcIjooZD0hZC5kaXNhYmxlZCl8fChhPWEudHlwZSxkPSEoXCJidXR0b25cIj09PWF8fFwiaW5wdXRcIj09PWF8fFwic2VsZWN0XCI9PT1hfHxcInRleHRhcmVhXCI9PT1hKSk7YT0hZDticmVhayBhO2RlZmF1bHQ6YT0hMX1pZihhKXJldHVybiBudWxsO2lmKGMmJlwiZnVuY3Rpb25cIiE9PVxudHlwZW9mIGMpdGhyb3cgRXJyb3IoeSgyMzEsYix0eXBlb2YgYykpO3JldHVybiBjfXZhciBQYj0hMTtpZihmYSl0cnl7dmFyIFFiPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShRYixcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7UGI9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsUWIsUWIpO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLFFiLFFiKX1jYXRjaChhKXtQYj0hMX1mdW5jdGlvbiBSYihhLGIsYyxkLGUsZixnLGgsayl7dmFyIGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDMpO3RyeXtiLmFwcGx5KGMsbCl9Y2F0Y2gobil7dGhpcy5vbkVycm9yKG4pfX12YXIgU2I9ITEsVGI9bnVsbCxVYj0hMSxWYj1udWxsLFdiPXtvbkVycm9yOmZ1bmN0aW9uKGEpe1NiPSEwO1RiPWF9fTtmdW5jdGlvbiBYYihhLGIsYyxkLGUsZixnLGgsayl7U2I9ITE7VGI9bnVsbDtSYi5hcHBseShXYixhcmd1bWVudHMpfVxuZnVuY3Rpb24gWWIoYSxiLGMsZCxlLGYsZyxoLGspe1hiLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihTYil7aWYoU2Ipe3ZhciBsPVRiO1NiPSExO1RiPW51bGx9ZWxzZSB0aHJvdyBFcnJvcih5KDE5OCkpO1VifHwoVWI9ITAsVmI9bCl9fWZ1bmN0aW9uIFpiKGEpe3ZhciBiPWEsYz1hO2lmKGEuYWx0ZXJuYXRlKWZvcig7Yi5yZXR1cm47KWI9Yi5yZXR1cm47ZWxzZXthPWI7ZG8gYj1hLDAhPT0oYi5mbGFncyYxMDI2KSYmKGM9Yi5yZXR1cm4pLGE9Yi5yZXR1cm47d2hpbGUoYSl9cmV0dXJuIDM9PT1iLnRhZz9jOm51bGx9ZnVuY3Rpb24gJGIoYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9YS5tZW1vaXplZFN0YXRlO251bGw9PT1iJiYoYT1hLmFsdGVybmF0ZSxudWxsIT09YSYmKGI9YS5tZW1vaXplZFN0YXRlKSk7aWYobnVsbCE9PWIpcmV0dXJuIGIuZGVoeWRyYXRlZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBhYyhhKXtpZihaYihhKSE9PWEpdGhyb3cgRXJyb3IoeSgxODgpKTt9XG5mdW5jdGlvbiBiYyhhKXt2YXIgYj1hLmFsdGVybmF0ZTtpZighYil7Yj1aYihhKTtpZihudWxsPT09Yil0aHJvdyBFcnJvcih5KDE4OCkpO3JldHVybiBiIT09YT9udWxsOmF9Zm9yKHZhciBjPWEsZD1iOzspe3ZhciBlPWMucmV0dXJuO2lmKG51bGw9PT1lKWJyZWFrO3ZhciBmPWUuYWx0ZXJuYXRlO2lmKG51bGw9PT1mKXtkPWUucmV0dXJuO2lmKG51bGwhPT1kKXtjPWQ7Y29udGludWV9YnJlYWt9aWYoZS5jaGlsZD09PWYuY2hpbGQpe2ZvcihmPWUuY2hpbGQ7Zjspe2lmKGY9PT1jKXJldHVybiBhYyhlKSxhO2lmKGY9PT1kKXJldHVybiBhYyhlKSxiO2Y9Zi5zaWJsaW5nfXRocm93IEVycm9yKHkoMTg4KSk7fWlmKGMucmV0dXJuIT09ZC5yZXR1cm4pYz1lLGQ9ZjtlbHNle2Zvcih2YXIgZz0hMSxoPWUuY2hpbGQ7aDspe2lmKGg9PT1jKXtnPSEwO2M9ZTtkPWY7YnJlYWt9aWYoaD09PWQpe2c9ITA7ZD1lO2M9ZjticmVha31oPWguc2libGluZ31pZighZyl7Zm9yKGg9Zi5jaGlsZDtoOyl7aWYoaD09PVxuYyl7Zz0hMDtjPWY7ZD1lO2JyZWFrfWlmKGg9PT1kKXtnPSEwO2Q9ZjtjPWU7YnJlYWt9aD1oLnNpYmxpbmd9aWYoIWcpdGhyb3cgRXJyb3IoeSgxODkpKTt9fWlmKGMuYWx0ZXJuYXRlIT09ZCl0aHJvdyBFcnJvcih5KDE5MCkpO31pZigzIT09Yy50YWcpdGhyb3cgRXJyb3IoeSgxODgpKTtyZXR1cm4gYy5zdGF0ZU5vZGUuY3VycmVudD09PWM/YTpifWZ1bmN0aW9uIGNjKGEpe2E9YmMoYSk7aWYoIWEpcmV0dXJuIG51bGw7Zm9yKHZhciBiPWE7Oyl7aWYoNT09PWIudGFnfHw2PT09Yi50YWcpcmV0dXJuIGI7aWYoYi5jaGlsZCliLmNoaWxkLnJldHVybj1iLGI9Yi5jaGlsZDtlbHNle2lmKGI9PT1hKWJyZWFrO2Zvcig7IWIuc2libGluZzspe2lmKCFiLnJldHVybnx8Yi5yZXR1cm49PT1hKXJldHVybiBudWxsO2I9Yi5yZXR1cm59Yi5zaWJsaW5nLnJldHVybj1iLnJldHVybjtiPWIuc2libGluZ319cmV0dXJuIG51bGx9XG5mdW5jdGlvbiBkYyhhLGIpe2Zvcih2YXIgYz1hLmFsdGVybmF0ZTtudWxsIT09Yjspe2lmKGI9PT1hfHxiPT09YylyZXR1cm4hMDtiPWIucmV0dXJufXJldHVybiExfXZhciBlYyxmYyxnYyxoYyxpYz0hMSxqYz1bXSxrYz1udWxsLGxjPW51bGwsbWM9bnVsbCxuYz1uZXcgTWFwLG9jPW5ldyBNYXAscGM9W10scWM9XCJtb3VzZWRvd24gbW91c2V1cCB0b3VjaGNhbmNlbCB0b3VjaGVuZCB0b3VjaHN0YXJ0IGF1eGNsaWNrIGRibGNsaWNrIHBvaW50ZXJjYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlcnVwIGRyYWdlbmQgZHJhZ3N0YXJ0IGRyb3AgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IHRleHRJbnB1dCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXQgc3VibWl0XCIuc3BsaXQoXCIgXCIpO1xuZnVuY3Rpb24gcmMoYSxiLGMsZCxlKXtyZXR1cm57YmxvY2tlZE9uOmEsZG9tRXZlbnROYW1lOmIsZXZlbnRTeXN0ZW1GbGFnczpjfDE2LG5hdGl2ZUV2ZW50OmUsdGFyZ2V0Q29udGFpbmVyczpbZF19fWZ1bmN0aW9uIHNjKGEsYil7c3dpdGNoKGEpe2Nhc2UgXCJmb2N1c2luXCI6Y2FzZSBcImZvY3Vzb3V0XCI6a2M9bnVsbDticmVhaztjYXNlIFwiZHJhZ2VudGVyXCI6Y2FzZSBcImRyYWdsZWF2ZVwiOmxjPW51bGw7YnJlYWs7Y2FzZSBcIm1vdXNlb3ZlclwiOmNhc2UgXCJtb3VzZW91dFwiOm1jPW51bGw7YnJlYWs7Y2FzZSBcInBvaW50ZXJvdmVyXCI6Y2FzZSBcInBvaW50ZXJvdXRcIjpuYy5kZWxldGUoYi5wb2ludGVySWQpO2JyZWFrO2Nhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpvYy5kZWxldGUoYi5wb2ludGVySWQpfX1cbmZ1bmN0aW9uIHRjKGEsYixjLGQsZSxmKXtpZihudWxsPT09YXx8YS5uYXRpdmVFdmVudCE9PWYpcmV0dXJuIGE9cmMoYixjLGQsZSxmKSxudWxsIT09YiYmKGI9Q2IoYiksbnVsbCE9PWImJmZjKGIpKSxhO2EuZXZlbnRTeXN0ZW1GbGFnc3w9ZDtiPWEudGFyZ2V0Q29udGFpbmVycztudWxsIT09ZSYmLTE9PT1iLmluZGV4T2YoZSkmJmIucHVzaChlKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIHVjKGEsYixjLGQsZSl7c3dpdGNoKGIpe2Nhc2UgXCJmb2N1c2luXCI6cmV0dXJuIGtjPXRjKGtjLGEsYixjLGQsZSksITA7Y2FzZSBcImRyYWdlbnRlclwiOnJldHVybiBsYz10YyhsYyxhLGIsYyxkLGUpLCEwO2Nhc2UgXCJtb3VzZW92ZXJcIjpyZXR1cm4gbWM9dGMobWMsYSxiLGMsZCxlKSwhMDtjYXNlIFwicG9pbnRlcm92ZXJcIjp2YXIgZj1lLnBvaW50ZXJJZDtuYy5zZXQoZix0YyhuYy5nZXQoZil8fG51bGwsYSxiLGMsZCxlKSk7cmV0dXJuITA7Y2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6cmV0dXJuIGY9ZS5wb2ludGVySWQsb2Muc2V0KGYsdGMob2MuZ2V0KGYpfHxudWxsLGEsYixjLGQsZSkpLCEwfXJldHVybiExfVxuZnVuY3Rpb24gdmMoYSl7dmFyIGI9d2MoYS50YXJnZXQpO2lmKG51bGwhPT1iKXt2YXIgYz1aYihiKTtpZihudWxsIT09YylpZihiPWMudGFnLDEzPT09Yil7aWYoYj0kYihjKSxudWxsIT09Yil7YS5ibG9ja2VkT249YjtoYyhhLmxhbmVQcmlvcml0eSxmdW5jdGlvbigpe3IudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KGEucHJpb3JpdHksZnVuY3Rpb24oKXtnYyhjKX0pfSk7cmV0dXJufX1lbHNlIGlmKDM9PT1iJiZjLnN0YXRlTm9kZS5oeWRyYXRlKXthLmJsb2NrZWRPbj0zPT09Yy50YWc/Yy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3JldHVybn19YS5ibG9ja2VkT249bnVsbH1cbmZ1bmN0aW9uIHhjKGEpe2lmKG51bGwhPT1hLmJsb2NrZWRPbilyZXR1cm4hMTtmb3IodmFyIGI9YS50YXJnZXRDb250YWluZXJzOzA8Yi5sZW5ndGg7KXt2YXIgYz15YyhhLmRvbUV2ZW50TmFtZSxhLmV2ZW50U3lzdGVtRmxhZ3MsYlswXSxhLm5hdGl2ZUV2ZW50KTtpZihudWxsIT09YylyZXR1cm4gYj1DYihjKSxudWxsIT09YiYmZmMoYiksYS5ibG9ja2VkT249YywhMTtiLnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gemMoYSxiLGMpe3hjKGEpJiZjLmRlbGV0ZShiKX1cbmZ1bmN0aW9uIEFjKCl7Zm9yKGljPSExOzA8amMubGVuZ3RoOyl7dmFyIGE9amNbMF07aWYobnVsbCE9PWEuYmxvY2tlZE9uKXthPUNiKGEuYmxvY2tlZE9uKTtudWxsIT09YSYmZWMoYSk7YnJlYWt9Zm9yKHZhciBiPWEudGFyZ2V0Q29udGFpbmVyczswPGIubGVuZ3RoOyl7dmFyIGM9eWMoYS5kb21FdmVudE5hbWUsYS5ldmVudFN5c3RlbUZsYWdzLGJbMF0sYS5uYXRpdmVFdmVudCk7aWYobnVsbCE9PWMpe2EuYmxvY2tlZE9uPWM7YnJlYWt9Yi5zaGlmdCgpfW51bGw9PT1hLmJsb2NrZWRPbiYmamMuc2hpZnQoKX1udWxsIT09a2MmJnhjKGtjKSYmKGtjPW51bGwpO251bGwhPT1sYyYmeGMobGMpJiYobGM9bnVsbCk7bnVsbCE9PW1jJiZ4YyhtYykmJihtYz1udWxsKTtuYy5mb3JFYWNoKHpjKTtvYy5mb3JFYWNoKHpjKX1cbmZ1bmN0aW9uIEJjKGEsYil7YS5ibG9ja2VkT249PT1iJiYoYS5ibG9ja2VkT249bnVsbCxpY3x8KGljPSEwLHIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LEFjKSkpfVxuZnVuY3Rpb24gQ2MoYSl7ZnVuY3Rpb24gYihiKXtyZXR1cm4gQmMoYixhKX1pZigwPGpjLmxlbmd0aCl7QmMoamNbMF0sYSk7Zm9yKHZhciBjPTE7YzxqYy5sZW5ndGg7YysrKXt2YXIgZD1qY1tjXTtkLmJsb2NrZWRPbj09PWEmJihkLmJsb2NrZWRPbj1udWxsKX19bnVsbCE9PWtjJiZCYyhrYyxhKTtudWxsIT09bGMmJkJjKGxjLGEpO251bGwhPT1tYyYmQmMobWMsYSk7bmMuZm9yRWFjaChiKTtvYy5mb3JFYWNoKGIpO2ZvcihjPTA7YzxwYy5sZW5ndGg7YysrKWQ9cGNbY10sZC5ibG9ja2VkT249PT1hJiYoZC5ibG9ja2VkT249bnVsbCk7Zm9yKDswPHBjLmxlbmd0aCYmKGM9cGNbMF0sbnVsbD09PWMuYmxvY2tlZE9uKTspdmMoYyksbnVsbD09PWMuYmxvY2tlZE9uJiZwYy5zaGlmdCgpfVxuZnVuY3Rpb24gRGMoYSxiKXt2YXIgYz17fTtjW2EudG9Mb3dlckNhc2UoKV09Yi50b0xvd2VyQ2FzZSgpO2NbXCJXZWJraXRcIithXT1cIndlYmtpdFwiK2I7Y1tcIk1velwiK2FdPVwibW96XCIrYjtyZXR1cm4gY312YXIgRWM9e2FuaW1hdGlvbmVuZDpEYyhcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uRW5kXCIpLGFuaW1hdGlvbml0ZXJhdGlvbjpEYyhcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uSXRlcmF0aW9uXCIpLGFuaW1hdGlvbnN0YXJ0OkRjKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25TdGFydFwiKSx0cmFuc2l0aW9uZW5kOkRjKFwiVHJhbnNpdGlvblwiLFwiVHJhbnNpdGlvbkVuZFwiKX0sRmM9e30sR2M9e307XG5mYSYmKEdjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGUsXCJBbmltYXRpb25FdmVudFwiaW4gd2luZG93fHwoZGVsZXRlIEVjLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIEVjLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIEVjLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksXCJUcmFuc2l0aW9uRXZlbnRcImluIHdpbmRvd3x8ZGVsZXRlIEVjLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7ZnVuY3Rpb24gSGMoYSl7aWYoRmNbYV0pcmV0dXJuIEZjW2FdO2lmKCFFY1thXSlyZXR1cm4gYTt2YXIgYj1FY1thXSxjO2ZvcihjIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShjKSYmYyBpbiBHYylyZXR1cm4gRmNbYV09YltjXTtyZXR1cm4gYX1cbnZhciBJYz1IYyhcImFuaW1hdGlvbmVuZFwiKSxKYz1IYyhcImFuaW1hdGlvbml0ZXJhdGlvblwiKSxLYz1IYyhcImFuaW1hdGlvbnN0YXJ0XCIpLExjPUhjKFwidHJhbnNpdGlvbmVuZFwiKSxNYz1uZXcgTWFwLE5jPW5ldyBNYXAsT2M9W1wiYWJvcnRcIixcImFib3J0XCIsSWMsXCJhbmltYXRpb25FbmRcIixKYyxcImFuaW1hdGlvbkl0ZXJhdGlvblwiLEtjLFwiYW5pbWF0aW9uU3RhcnRcIixcImNhbnBsYXlcIixcImNhblBsYXlcIixcImNhbnBsYXl0aHJvdWdoXCIsXCJjYW5QbGF5VGhyb3VnaFwiLFwiZHVyYXRpb25jaGFuZ2VcIixcImR1cmF0aW9uQ2hhbmdlXCIsXCJlbXB0aWVkXCIsXCJlbXB0aWVkXCIsXCJlbmNyeXB0ZWRcIixcImVuY3J5cHRlZFwiLFwiZW5kZWRcIixcImVuZGVkXCIsXCJlcnJvclwiLFwiZXJyb3JcIixcImdvdHBvaW50ZXJjYXB0dXJlXCIsXCJnb3RQb2ludGVyQ2FwdHVyZVwiLFwibG9hZFwiLFwibG9hZFwiLFwibG9hZGVkZGF0YVwiLFwibG9hZGVkRGF0YVwiLFwibG9hZGVkbWV0YWRhdGFcIixcImxvYWRlZE1ldGFkYXRhXCIsXCJsb2Fkc3RhcnRcIixcImxvYWRTdGFydFwiLFxuXCJsb3N0cG9pbnRlcmNhcHR1cmVcIixcImxvc3RQb2ludGVyQ2FwdHVyZVwiLFwicGxheWluZ1wiLFwicGxheWluZ1wiLFwicHJvZ3Jlc3NcIixcInByb2dyZXNzXCIsXCJzZWVraW5nXCIsXCJzZWVraW5nXCIsXCJzdGFsbGVkXCIsXCJzdGFsbGVkXCIsXCJzdXNwZW5kXCIsXCJzdXNwZW5kXCIsXCJ0aW1ldXBkYXRlXCIsXCJ0aW1lVXBkYXRlXCIsTGMsXCJ0cmFuc2l0aW9uRW5kXCIsXCJ3YWl0aW5nXCIsXCJ3YWl0aW5nXCJdO2Z1bmN0aW9uIFBjKGEsYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKz0yKXt2YXIgZD1hW2NdLGU9YVtjKzFdO2U9XCJvblwiKyhlWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSk7TmMuc2V0KGQsYik7TWMuc2V0KGQsZSk7ZGEoZSxbZF0pfX12YXIgUWM9ci51bnN0YWJsZV9ub3c7UWMoKTt2YXIgRj04O1xuZnVuY3Rpb24gUmMoYSl7aWYoMCE9PSgxJmEpKXJldHVybiBGPTE1LDE7aWYoMCE9PSgyJmEpKXJldHVybiBGPTE0LDI7aWYoMCE9PSg0JmEpKXJldHVybiBGPTEzLDQ7dmFyIGI9MjQmYTtpZigwIT09YilyZXR1cm4gRj0xMixiO2lmKDAhPT0oYSYzMikpcmV0dXJuIEY9MTEsMzI7Yj0xOTImYTtpZigwIT09YilyZXR1cm4gRj0xMCxiO2lmKDAhPT0oYSYyNTYpKXJldHVybiBGPTksMjU2O2I9MzU4NCZhO2lmKDAhPT1iKXJldHVybiBGPTgsYjtpZigwIT09KGEmNDA5NikpcmV0dXJuIEY9Nyw0MDk2O2I9NDE4NjExMiZhO2lmKDAhPT1iKXJldHVybiBGPTYsYjtiPTYyOTE0NTYwJmE7aWYoMCE9PWIpcmV0dXJuIEY9NSxiO2lmKGEmNjcxMDg4NjQpcmV0dXJuIEY9NCw2NzEwODg2NDtpZigwIT09KGEmMTM0MjE3NzI4KSlyZXR1cm4gRj0zLDEzNDIxNzcyODtiPTgwNTMwNjM2OCZhO2lmKDAhPT1iKXJldHVybiBGPTIsYjtpZigwIT09KDEwNzM3NDE4MjQmYSkpcmV0dXJuIEY9MSwxMDczNzQxODI0O1xuRj04O3JldHVybiBhfWZ1bmN0aW9uIFNjKGEpe3N3aXRjaChhKXtjYXNlIDk5OnJldHVybiAxNTtjYXNlIDk4OnJldHVybiAxMDtjYXNlIDk3OmNhc2UgOTY6cmV0dXJuIDg7Y2FzZSA5NTpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBUYyhhKXtzd2l0Y2goYSl7Y2FzZSAxNTpjYXNlIDE0OnJldHVybiA5OTtjYXNlIDEzOmNhc2UgMTI6Y2FzZSAxMTpjYXNlIDEwOnJldHVybiA5ODtjYXNlIDk6Y2FzZSA4OmNhc2UgNzpjYXNlIDY6Y2FzZSA0OmNhc2UgNTpyZXR1cm4gOTc7Y2FzZSAzOmNhc2UgMjpjYXNlIDE6cmV0dXJuIDk1O2Nhc2UgMDpyZXR1cm4gOTA7ZGVmYXVsdDp0aHJvdyBFcnJvcih5KDM1OCxhKSk7fX1cbmZ1bmN0aW9uIFVjKGEsYil7dmFyIGM9YS5wZW5kaW5nTGFuZXM7aWYoMD09PWMpcmV0dXJuIEY9MDt2YXIgZD0wLGU9MCxmPWEuZXhwaXJlZExhbmVzLGc9YS5zdXNwZW5kZWRMYW5lcyxoPWEucGluZ2VkTGFuZXM7aWYoMCE9PWYpZD1mLGU9Rj0xNTtlbHNlIGlmKGY9YyYxMzQyMTc3MjcsMCE9PWYpe3ZhciBrPWYmfmc7MCE9PWs/KGQ9UmMoayksZT1GKTooaCY9ZiwwIT09aCYmKGQ9UmMoaCksZT1GKSl9ZWxzZSBmPWMmfmcsMCE9PWY/KGQ9UmMoZiksZT1GKTowIT09aCYmKGQ9UmMoaCksZT1GKTtpZigwPT09ZClyZXR1cm4gMDtkPTMxLVZjKGQpO2Q9YyYoKDA+ZD8wOjE8PGQpPDwxKS0xO2lmKDAhPT1iJiZiIT09ZCYmMD09PShiJmcpKXtSYyhiKTtpZihlPD1GKXJldHVybiBiO0Y9ZX1iPWEuZW50YW5nbGVkTGFuZXM7aWYoMCE9PWIpZm9yKGE9YS5lbnRhbmdsZW1lbnRzLGImPWQ7MDxiOyljPTMxLVZjKGIpLGU9MTw8YyxkfD1hW2NdLGImPX5lO3JldHVybiBkfVxuZnVuY3Rpb24gV2MoYSl7YT1hLnBlbmRpbmdMYW5lcyYtMTA3Mzc0MTgyNTtyZXR1cm4gMCE9PWE/YTphJjEwNzM3NDE4MjQ/MTA3Mzc0MTgyNDowfWZ1bmN0aW9uIFhjKGEsYil7c3dpdGNoKGEpe2Nhc2UgMTU6cmV0dXJuIDE7Y2FzZSAxNDpyZXR1cm4gMjtjYXNlIDEyOnJldHVybiBhPVljKDI0Jn5iKSwwPT09YT9YYygxMCxiKTphO2Nhc2UgMTA6cmV0dXJuIGE9WWMoMTkyJn5iKSwwPT09YT9YYyg4LGIpOmE7Y2FzZSA4OnJldHVybiBhPVljKDM1ODQmfmIpLDA9PT1hJiYoYT1ZYyg0MTg2MTEyJn5iKSwwPT09YSYmKGE9NTEyKSksYTtjYXNlIDI6cmV0dXJuIGI9WWMoODA1MzA2MzY4Jn5iKSwwPT09YiYmKGI9MjY4NDM1NDU2KSxifXRocm93IEVycm9yKHkoMzU4LGEpKTt9ZnVuY3Rpb24gWWMoYSl7cmV0dXJuIGEmLWF9ZnVuY3Rpb24gWmMoYSl7Zm9yKHZhciBiPVtdLGM9MDszMT5jO2MrKyliLnB1c2goYSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiAkYyhhLGIsYyl7YS5wZW5kaW5nTGFuZXN8PWI7dmFyIGQ9Yi0xO2Euc3VzcGVuZGVkTGFuZXMmPWQ7YS5waW5nZWRMYW5lcyY9ZDthPWEuZXZlbnRUaW1lcztiPTMxLVZjKGIpO2FbYl09Y312YXIgVmM9TWF0aC5jbHozMj9NYXRoLmNsejMyOmFkLGJkPU1hdGgubG9nLGNkPU1hdGguTE4yO2Z1bmN0aW9uIGFkKGEpe3JldHVybiAwPT09YT8zMjozMS0oYmQoYSkvY2R8MCl8MH12YXIgZGQ9ci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxlZD1yLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSxmZD0hMDtmdW5jdGlvbiBnZChhLGIsYyxkKXtLYnx8SWIoKTt2YXIgZT1oZCxmPUtiO0tiPSEwO3RyeXtIYihlLGEsYixjLGQpfWZpbmFsbHl7KEtiPWYpfHxNYigpfX1mdW5jdGlvbiBpZChhLGIsYyxkKXtlZChkZCxoZC5iaW5kKG51bGwsYSxiLGMsZCkpfVxuZnVuY3Rpb24gaGQoYSxiLGMsZCl7aWYoZmQpe3ZhciBlO2lmKChlPTA9PT0oYiY0KSkmJjA8amMubGVuZ3RoJiYtMTxxYy5pbmRleE9mKGEpKWE9cmMobnVsbCxhLGIsYyxkKSxqYy5wdXNoKGEpO2Vsc2V7dmFyIGY9eWMoYSxiLGMsZCk7aWYobnVsbD09PWYpZSYmc2MoYSxkKTtlbHNle2lmKGUpe2lmKC0xPHFjLmluZGV4T2YoYSkpe2E9cmMoZixhLGIsYyxkKTtqYy5wdXNoKGEpO3JldHVybn1pZih1YyhmLGEsYixjLGQpKXJldHVybjtzYyhhLGQpfWpkKGEsYixkLG51bGwsYyl9fX19XG5mdW5jdGlvbiB5YyhhLGIsYyxkKXt2YXIgZT14YihkKTtlPXdjKGUpO2lmKG51bGwhPT1lKXt2YXIgZj1aYihlKTtpZihudWxsPT09ZillPW51bGw7ZWxzZXt2YXIgZz1mLnRhZztpZigxMz09PWcpe2U9JGIoZik7aWYobnVsbCE9PWUpcmV0dXJuIGU7ZT1udWxsfWVsc2UgaWYoMz09PWcpe2lmKGYuc3RhdGVOb2RlLmh5ZHJhdGUpcmV0dXJuIDM9PT1mLnRhZz9mLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7ZT1udWxsfWVsc2UgZiE9PWUmJihlPW51bGwpfX1qZChhLGIsZCxlLGMpO3JldHVybiBudWxsfXZhciBrZD1udWxsLGxkPW51bGwsbWQ9bnVsbDtcbmZ1bmN0aW9uIG5kKCl7aWYobWQpcmV0dXJuIG1kO3ZhciBhLGI9bGQsYz1iLmxlbmd0aCxkLGU9XCJ2YWx1ZVwiaW4ga2Q/a2QudmFsdWU6a2QudGV4dENvbnRlbnQsZj1lLmxlbmd0aDtmb3IoYT0wO2E8YyYmYlthXT09PWVbYV07YSsrKTt2YXIgZz1jLWE7Zm9yKGQ9MTtkPD1nJiZiW2MtZF09PT1lW2YtZF07ZCsrKTtyZXR1cm4gbWQ9ZS5zbGljZShhLDE8ZD8xLWQ6dm9pZCAwKX1mdW5jdGlvbiBvZChhKXt2YXIgYj1hLmtleUNvZGU7XCJjaGFyQ29kZVwiaW4gYT8oYT1hLmNoYXJDb2RlLDA9PT1hJiYxMz09PWImJihhPTEzKSk6YT1iOzEwPT09YSYmKGE9MTMpO3JldHVybiAzMjw9YXx8MTM9PT1hP2E6MH1mdW5jdGlvbiBwZCgpe3JldHVybiEwfWZ1bmN0aW9uIHFkKCl7cmV0dXJuITF9XG5mdW5jdGlvbiByZChhKXtmdW5jdGlvbiBiKGIsZCxlLGYsZyl7dGhpcy5fcmVhY3ROYW1lPWI7dGhpcy5fdGFyZ2V0SW5zdD1lO3RoaXMudHlwZT1kO3RoaXMubmF0aXZlRXZlbnQ9Zjt0aGlzLnRhcmdldD1nO3RoaXMuY3VycmVudFRhcmdldD1udWxsO2Zvcih2YXIgYyBpbiBhKWEuaGFzT3duUHJvcGVydHkoYykmJihiPWFbY10sdGhpc1tjXT1iP2IoZik6ZltjXSk7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9KG51bGwhPWYuZGVmYXVsdFByZXZlbnRlZD9mLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1mLnJldHVyblZhbHVlKT9wZDpxZDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXFkO3JldHVybiB0aGlzfW0oYi5wcm90b3R5cGUse3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwO3ZhciBhPXRoaXMubmF0aXZlRXZlbnQ7YSYmKGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOlwidW5rbm93blwiIT09dHlwZW9mIGEucmV0dXJuVmFsdWUmJlxuKGEucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPXBkKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uYXRpdmVFdmVudDthJiYoYS5zdG9wUHJvcGFnYXRpb24/YS5zdG9wUHJvcGFnYXRpb24oKTpcInVua25vd25cIiE9PXR5cGVvZiBhLmNhbmNlbEJ1YmJsZSYmKGEuY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXBkKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OnBkfSk7cmV0dXJuIGJ9XG52YXIgc2Q9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihhKXtyZXR1cm4gYS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0sdGQ9cmQoc2QpLHVkPW0oe30sc2Qse3ZpZXc6MCxkZXRhaWw6MH0pLHZkPXJkKHVkKSx3ZCx4ZCx5ZCxBZD1tKHt9LHVkLHtzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MCxjbGllbnRZOjAscGFnZVg6MCxwYWdlWTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxnZXRNb2RpZmllclN0YXRlOnpkLGJ1dHRvbjowLGJ1dHRvbnM6MCxyZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hLnJlbGF0ZWRUYXJnZXQ/YS5mcm9tRWxlbWVudD09PWEuc3JjRWxlbWVudD9hLnRvRWxlbWVudDphLmZyb21FbGVtZW50OmEucmVsYXRlZFRhcmdldH0sbW92ZW1lbnRYOmZ1bmN0aW9uKGEpe2lmKFwibW92ZW1lbnRYXCJpblxuYSlyZXR1cm4gYS5tb3ZlbWVudFg7YSE9PXlkJiYoeWQmJlwibW91c2Vtb3ZlXCI9PT1hLnR5cGU/KHdkPWEuc2NyZWVuWC15ZC5zY3JlZW5YLHhkPWEuc2NyZWVuWS15ZC5zY3JlZW5ZKTp4ZD13ZD0wLHlkPWEpO3JldHVybiB3ZH0sbW92ZW1lbnRZOmZ1bmN0aW9uKGEpe3JldHVyblwibW92ZW1lbnRZXCJpbiBhP2EubW92ZW1lbnRZOnhkfX0pLEJkPXJkKEFkKSxDZD1tKHt9LEFkLHtkYXRhVHJhbnNmZXI6MH0pLERkPXJkKENkKSxFZD1tKHt9LHVkLHtyZWxhdGVkVGFyZ2V0OjB9KSxGZD1yZChFZCksR2Q9bSh7fSxzZCx7YW5pbWF0aW9uTmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksSGQ9cmQoR2QpLElkPW0oe30sc2Qse2NsaXBib2FyZERhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuXCJjbGlwYm9hcmREYXRhXCJpbiBhP2EuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxKZD1yZChJZCksS2Q9bSh7fSxzZCx7ZGF0YTowfSksTGQ9cmQoS2QpLE1kPXtFc2M6XCJFc2NhcGVcIixcblNwYWNlYmFyOlwiIFwiLExlZnQ6XCJBcnJvd0xlZnRcIixVcDpcIkFycm93VXBcIixSaWdodDpcIkFycm93UmlnaHRcIixEb3duOlwiQXJyb3dEb3duXCIsRGVsOlwiRGVsZXRlXCIsV2luOlwiT1NcIixNZW51OlwiQ29udGV4dE1lbnVcIixBcHBzOlwiQ29udGV4dE1lbnVcIixTY3JvbGw6XCJTY3JvbGxMb2NrXCIsTW96UHJpbnRhYmxlS2V5OlwiVW5pZGVudGlmaWVkXCJ9LE5kPXs4OlwiQmFja3NwYWNlXCIsOTpcIlRhYlwiLDEyOlwiQ2xlYXJcIiwxMzpcIkVudGVyXCIsMTY6XCJTaGlmdFwiLDE3OlwiQ29udHJvbFwiLDE4OlwiQWx0XCIsMTk6XCJQYXVzZVwiLDIwOlwiQ2Fwc0xvY2tcIiwyNzpcIkVzY2FwZVwiLDMyOlwiIFwiLDMzOlwiUGFnZVVwXCIsMzQ6XCJQYWdlRG93blwiLDM1OlwiRW5kXCIsMzY6XCJIb21lXCIsMzc6XCJBcnJvd0xlZnRcIiwzODpcIkFycm93VXBcIiwzOTpcIkFycm93UmlnaHRcIiw0MDpcIkFycm93RG93blwiLDQ1OlwiSW5zZXJ0XCIsNDY6XCJEZWxldGVcIiwxMTI6XCJGMVwiLDExMzpcIkYyXCIsMTE0OlwiRjNcIiwxMTU6XCJGNFwiLDExNjpcIkY1XCIsMTE3OlwiRjZcIiwxMTg6XCJGN1wiLFxuMTE5OlwiRjhcIiwxMjA6XCJGOVwiLDEyMTpcIkYxMFwiLDEyMjpcIkYxMVwiLDEyMzpcIkYxMlwiLDE0NDpcIk51bUxvY2tcIiwxNDU6XCJTY3JvbGxMb2NrXCIsMjI0OlwiTWV0YVwifSxPZD17QWx0OlwiYWx0S2V5XCIsQ29udHJvbDpcImN0cmxLZXlcIixNZXRhOlwibWV0YUtleVwiLFNoaWZ0Olwic2hpZnRLZXlcIn07ZnVuY3Rpb24gUGQoYSl7dmFyIGI9dGhpcy5uYXRpdmVFdmVudDtyZXR1cm4gYi5nZXRNb2RpZmllclN0YXRlP2IuZ2V0TW9kaWZpZXJTdGF0ZShhKTooYT1PZFthXSk/ISFiW2FdOiExfWZ1bmN0aW9uIHpkKCl7cmV0dXJuIFBkfVxudmFyIFFkPW0oe30sdWQse2tleTpmdW5jdGlvbihhKXtpZihhLmtleSl7dmFyIGI9TWRbYS5rZXldfHxhLmtleTtpZihcIlVuaWRlbnRpZmllZFwiIT09YilyZXR1cm4gYn1yZXR1cm5cImtleXByZXNzXCI9PT1hLnR5cGU/KGE9b2QoYSksMTM9PT1hP1wiRW50ZXJcIjpTdHJpbmcuZnJvbUNoYXJDb2RlKGEpKTpcImtleWRvd25cIj09PWEudHlwZXx8XCJrZXl1cFwiPT09YS50eXBlP05kW2Eua2V5Q29kZV18fFwiVW5pZGVudGlmaWVkXCI6XCJcIn0sY29kZTowLGxvY2F0aW9uOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLHJlcGVhdDowLGxvY2FsZTowLGdldE1vZGlmaWVyU3RhdGU6emQsY2hhckNvZGU6ZnVuY3Rpb24oYSl7cmV0dXJuXCJrZXlwcmVzc1wiPT09YS50eXBlP29kKGEpOjB9LGtleUNvZGU6ZnVuY3Rpb24oYSl7cmV0dXJuXCJrZXlkb3duXCI9PT1hLnR5cGV8fFwia2V5dXBcIj09PWEudHlwZT9hLmtleUNvZGU6MH0sd2hpY2g6ZnVuY3Rpb24oYSl7cmV0dXJuXCJrZXlwcmVzc1wiPT09XG5hLnR5cGU/b2QoYSk6XCJrZXlkb3duXCI9PT1hLnR5cGV8fFwia2V5dXBcIj09PWEudHlwZT9hLmtleUNvZGU6MH19KSxSZD1yZChRZCksU2Q9bSh7fSxBZCx7cG9pbnRlcklkOjAsd2lkdGg6MCxoZWlnaHQ6MCxwcmVzc3VyZTowLHRhbmdlbnRpYWxQcmVzc3VyZTowLHRpbHRYOjAsdGlsdFk6MCx0d2lzdDowLHBvaW50ZXJUeXBlOjAsaXNQcmltYXJ5OjB9KSxUZD1yZChTZCksVWQ9bSh7fSx1ZCx7dG91Y2hlczowLHRhcmdldFRvdWNoZXM6MCxjaGFuZ2VkVG91Y2hlczowLGFsdEtleTowLG1ldGFLZXk6MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxnZXRNb2RpZmllclN0YXRlOnpkfSksVmQ9cmQoVWQpLFdkPW0oe30sc2Qse3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksWGQ9cmQoV2QpLFlkPW0oe30sQWQse2RlbHRhWDpmdW5jdGlvbihhKXtyZXR1cm5cImRlbHRhWFwiaW4gYT9hLmRlbHRhWDpcIndoZWVsRGVsdGFYXCJpbiBhPy1hLndoZWVsRGVsdGFYOjB9LFxuZGVsdGFZOmZ1bmN0aW9uKGEpe3JldHVyblwiZGVsdGFZXCJpbiBhP2EuZGVsdGFZOlwid2hlZWxEZWx0YVlcImluIGE/LWEud2hlZWxEZWx0YVk6XCJ3aGVlbERlbHRhXCJpbiBhPy1hLndoZWVsRGVsdGE6MH0sZGVsdGFaOjAsZGVsdGFNb2RlOjB9KSxaZD1yZChZZCksJGQ9WzksMTMsMjcsMzJdLGFlPWZhJiZcIkNvbXBvc2l0aW9uRXZlbnRcImluIHdpbmRvdyxiZT1udWxsO2ZhJiZcImRvY3VtZW50TW9kZVwiaW4gZG9jdW1lbnQmJihiZT1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBjZT1mYSYmXCJUZXh0RXZlbnRcImluIHdpbmRvdyYmIWJlLGRlPWZhJiYoIWFlfHxiZSYmODxiZSYmMTE+PWJlKSxlZT1TdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSxmZT0hMTtcbmZ1bmN0aW9uIGdlKGEsYil7c3dpdGNoKGEpe2Nhc2UgXCJrZXl1cFwiOnJldHVybi0xIT09JGQuaW5kZXhPZihiLmtleUNvZGUpO2Nhc2UgXCJrZXlkb3duXCI6cmV0dXJuIDIyOSE9PWIua2V5Q29kZTtjYXNlIFwia2V5cHJlc3NcIjpjYXNlIFwibW91c2Vkb3duXCI6Y2FzZSBcImZvY3Vzb3V0XCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gaGUoYSl7YT1hLmRldGFpbDtyZXR1cm5cIm9iamVjdFwiPT09dHlwZW9mIGEmJlwiZGF0YVwiaW4gYT9hLmRhdGE6bnVsbH12YXIgaWU9ITE7ZnVuY3Rpb24gamUoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6cmV0dXJuIGhlKGIpO2Nhc2UgXCJrZXlwcmVzc1wiOmlmKDMyIT09Yi53aGljaClyZXR1cm4gbnVsbDtmZT0hMDtyZXR1cm4gZWU7Y2FzZSBcInRleHRJbnB1dFwiOnJldHVybiBhPWIuZGF0YSxhPT09ZWUmJmZlP251bGw6YTtkZWZhdWx0OnJldHVybiBudWxsfX1cbmZ1bmN0aW9uIGtlKGEsYil7aWYoaWUpcmV0dXJuXCJjb21wb3NpdGlvbmVuZFwiPT09YXx8IWFlJiZnZShhLGIpPyhhPW5kKCksbWQ9bGQ9a2Q9bnVsbCxpZT0hMSxhKTpudWxsO3N3aXRjaChhKXtjYXNlIFwicGFzdGVcIjpyZXR1cm4gbnVsbDtjYXNlIFwia2V5cHJlc3NcIjppZighKGIuY3RybEtleXx8Yi5hbHRLZXl8fGIubWV0YUtleSl8fGIuY3RybEtleSYmYi5hbHRLZXkpe2lmKGIuY2hhciYmMTxiLmNoYXIubGVuZ3RoKXJldHVybiBiLmNoYXI7aWYoYi53aGljaClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShiLndoaWNoKX1yZXR1cm4gbnVsbDtjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpyZXR1cm4gZGUmJlwia29cIiE9PWIubG9jYWxlP251bGw6Yi5kYXRhO2RlZmF1bHQ6cmV0dXJuIG51bGx9fVxudmFyIGxlPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLFwiZGF0ZXRpbWUtbG9jYWxcIjohMCxlbWFpbDohMCxtb250aDohMCxudW1iZXI6ITAscGFzc3dvcmQ6ITAscmFuZ2U6ITAsc2VhcmNoOiEwLHRlbDohMCx0ZXh0OiEwLHRpbWU6ITAsdXJsOiEwLHdlZWs6ITB9O2Z1bmN0aW9uIG1lKGEpe3ZhciBiPWEmJmEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT1iPyEhbGVbYS50eXBlXTpcInRleHRhcmVhXCI9PT1iPyEwOiExfWZ1bmN0aW9uIG5lKGEsYixjLGQpe0ViKGQpO2I9b2UoYixcIm9uQ2hhbmdlXCIpOzA8Yi5sZW5ndGgmJihjPW5ldyB0ZChcIm9uQ2hhbmdlXCIsXCJjaGFuZ2VcIixudWxsLGMsZCksYS5wdXNoKHtldmVudDpjLGxpc3RlbmVyczpifSkpfXZhciBwZT1udWxsLHFlPW51bGw7ZnVuY3Rpb24gcmUoYSl7c2UoYSwwKX1mdW5jdGlvbiB0ZShhKXt2YXIgYj11ZShhKTtpZihXYShiKSlyZXR1cm4gYX1cbmZ1bmN0aW9uIHZlKGEsYil7aWYoXCJjaGFuZ2VcIj09PWEpcmV0dXJuIGJ9dmFyIHdlPSExO2lmKGZhKXt2YXIgeGU7aWYoZmEpe3ZhciB5ZT1cIm9uaW5wdXRcImluIGRvY3VtZW50O2lmKCF5ZSl7dmFyIHplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7emUuc2V0QXR0cmlidXRlKFwib25pbnB1dFwiLFwicmV0dXJuO1wiKTt5ZT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgemUub25pbnB1dH14ZT15ZX1lbHNlIHhlPSExO3dlPXhlJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8OTxkb2N1bWVudC5kb2N1bWVudE1vZGUpfWZ1bmN0aW9uIEFlKCl7cGUmJihwZS5kZXRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIixCZSkscWU9cGU9bnVsbCl9ZnVuY3Rpb24gQmUoYSl7aWYoXCJ2YWx1ZVwiPT09YS5wcm9wZXJ0eU5hbWUmJnRlKHFlKSl7dmFyIGI9W107bmUoYixxZSxhLHhiKGEpKTthPXJlO2lmKEtiKWEoYik7ZWxzZXtLYj0hMDt0cnl7R2IoYSxiKX1maW5hbGx5e0tiPSExLE1iKCl9fX19XG5mdW5jdGlvbiBDZShhLGIsYyl7XCJmb2N1c2luXCI9PT1hPyhBZSgpLHBlPWIscWU9YyxwZS5hdHRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIixCZSkpOlwiZm9jdXNvdXRcIj09PWEmJkFlKCl9ZnVuY3Rpb24gRGUoYSl7aWYoXCJzZWxlY3Rpb25jaGFuZ2VcIj09PWF8fFwia2V5dXBcIj09PWF8fFwia2V5ZG93blwiPT09YSlyZXR1cm4gdGUocWUpfWZ1bmN0aW9uIEVlKGEsYil7aWYoXCJjbGlja1wiPT09YSlyZXR1cm4gdGUoYil9ZnVuY3Rpb24gRmUoYSxiKXtpZihcImlucHV0XCI9PT1hfHxcImNoYW5nZVwiPT09YSlyZXR1cm4gdGUoYil9ZnVuY3Rpb24gR2UoYSxiKXtyZXR1cm4gYT09PWImJigwIT09YXx8MS9hPT09MS9iKXx8YSE9PWEmJmIhPT1ifXZhciBIZT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpHZSxJZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gSmUoYSxiKXtpZihIZShhLGIpKXJldHVybiEwO2lmKFwib2JqZWN0XCIhPT10eXBlb2YgYXx8bnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYnx8bnVsbD09PWIpcmV0dXJuITE7dmFyIGM9T2JqZWN0LmtleXMoYSksZD1PYmplY3Qua2V5cyhiKTtpZihjLmxlbmd0aCE9PWQubGVuZ3RoKXJldHVybiExO2ZvcihkPTA7ZDxjLmxlbmd0aDtkKyspaWYoIUllLmNhbGwoYixjW2RdKXx8IUhlKGFbY1tkXV0sYltjW2RdXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gS2UoYSl7Zm9yKDthJiZhLmZpcnN0Q2hpbGQ7KWE9YS5maXJzdENoaWxkO3JldHVybiBhfVxuZnVuY3Rpb24gTGUoYSxiKXt2YXIgYz1LZShhKTthPTA7Zm9yKHZhciBkO2M7KXtpZigzPT09Yy5ub2RlVHlwZSl7ZD1hK2MudGV4dENvbnRlbnQubGVuZ3RoO2lmKGE8PWImJmQ+PWIpcmV0dXJue25vZGU6YyxvZmZzZXQ6Yi1hfTthPWR9YTp7Zm9yKDtjOyl7aWYoYy5uZXh0U2libGluZyl7Yz1jLm5leHRTaWJsaW5nO2JyZWFrIGF9Yz1jLnBhcmVudE5vZGV9Yz12b2lkIDB9Yz1LZShjKX19ZnVuY3Rpb24gTWUoYSxiKXtyZXR1cm4gYSYmYj9hPT09Yj8hMDphJiYzPT09YS5ub2RlVHlwZT8hMTpiJiYzPT09Yi5ub2RlVHlwZT9NZShhLGIucGFyZW50Tm9kZSk6XCJjb250YWluc1wiaW4gYT9hLmNvbnRhaW5zKGIpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSYxNik6ITE6ITF9XG5mdW5jdGlvbiBOZSgpe2Zvcih2YXIgYT13aW5kb3csYj1YYSgpO2IgaW5zdGFuY2VvZiBhLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBjPVwic3RyaW5nXCI9PT10eXBlb2YgYi5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWZ9Y2F0Y2goZCl7Yz0hMX1pZihjKWE9Yi5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7Yj1YYShhLmRvY3VtZW50KX1yZXR1cm4gYn1mdW5jdGlvbiBPZShhKXt2YXIgYj1hJiZhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGImJihcImlucHV0XCI9PT1iJiYoXCJ0ZXh0XCI9PT1hLnR5cGV8fFwic2VhcmNoXCI9PT1hLnR5cGV8fFwidGVsXCI9PT1hLnR5cGV8fFwidXJsXCI9PT1hLnR5cGV8fFwicGFzc3dvcmRcIj09PWEudHlwZSl8fFwidGV4dGFyZWFcIj09PWJ8fFwidHJ1ZVwiPT09YS5jb250ZW50RWRpdGFibGUpfVxudmFyIFBlPWZhJiZcImRvY3VtZW50TW9kZVwiaW4gZG9jdW1lbnQmJjExPj1kb2N1bWVudC5kb2N1bWVudE1vZGUsUWU9bnVsbCxSZT1udWxsLFNlPW51bGwsVGU9ITE7XG5mdW5jdGlvbiBVZShhLGIsYyl7dmFyIGQ9Yy53aW5kb3c9PT1jP2MuZG9jdW1lbnQ6OT09PWMubm9kZVR5cGU/YzpjLm93bmVyRG9jdW1lbnQ7VGV8fG51bGw9PVFlfHxRZSE9PVhhKGQpfHwoZD1RZSxcInNlbGVjdGlvblN0YXJ0XCJpbiBkJiZPZShkKT9kPXtzdGFydDpkLnNlbGVjdGlvblN0YXJ0LGVuZDpkLnNlbGVjdGlvbkVuZH06KGQ9KGQub3duZXJEb2N1bWVudCYmZC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpLGQ9e2FuY2hvck5vZGU6ZC5hbmNob3JOb2RlLGFuY2hvck9mZnNldDpkLmFuY2hvck9mZnNldCxmb2N1c05vZGU6ZC5mb2N1c05vZGUsZm9jdXNPZmZzZXQ6ZC5mb2N1c09mZnNldH0pLFNlJiZKZShTZSxkKXx8KFNlPWQsZD1vZShSZSxcIm9uU2VsZWN0XCIpLDA8ZC5sZW5ndGgmJihiPW5ldyB0ZChcIm9uU2VsZWN0XCIsXCJzZWxlY3RcIixudWxsLGIsYyksYS5wdXNoKHtldmVudDpiLGxpc3RlbmVyczpkfSksYi50YXJnZXQ9UWUpKSl9XG5QYyhcImNhbmNlbCBjYW5jZWwgY2xpY2sgY2xpY2sgY2xvc2UgY2xvc2UgY29udGV4dG1lbnUgY29udGV4dE1lbnUgY29weSBjb3B5IGN1dCBjdXQgYXV4Y2xpY2sgYXV4Q2xpY2sgZGJsY2xpY2sgZG91YmxlQ2xpY2sgZHJhZ2VuZCBkcmFnRW5kIGRyYWdzdGFydCBkcmFnU3RhcnQgZHJvcCBkcm9wIGZvY3VzaW4gZm9jdXMgZm9jdXNvdXQgYmx1ciBpbnB1dCBpbnB1dCBpbnZhbGlkIGludmFsaWQga2V5ZG93biBrZXlEb3duIGtleXByZXNzIGtleVByZXNzIGtleXVwIGtleVVwIG1vdXNlZG93biBtb3VzZURvd24gbW91c2V1cCBtb3VzZVVwIHBhc3RlIHBhc3RlIHBhdXNlIHBhdXNlIHBsYXkgcGxheSBwb2ludGVyY2FuY2VsIHBvaW50ZXJDYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlckRvd24gcG9pbnRlcnVwIHBvaW50ZXJVcCByYXRlY2hhbmdlIHJhdGVDaGFuZ2UgcmVzZXQgcmVzZXQgc2Vla2VkIHNlZWtlZCBzdWJtaXQgc3VibWl0IHRvdWNoY2FuY2VsIHRvdWNoQ2FuY2VsIHRvdWNoZW5kIHRvdWNoRW5kIHRvdWNoc3RhcnQgdG91Y2hTdGFydCB2b2x1bWVjaGFuZ2Ugdm9sdW1lQ2hhbmdlXCIuc3BsaXQoXCIgXCIpLFxuMCk7UGMoXCJkcmFnIGRyYWcgZHJhZ2VudGVyIGRyYWdFbnRlciBkcmFnZXhpdCBkcmFnRXhpdCBkcmFnbGVhdmUgZHJhZ0xlYXZlIGRyYWdvdmVyIGRyYWdPdmVyIG1vdXNlbW92ZSBtb3VzZU1vdmUgbW91c2VvdXQgbW91c2VPdXQgbW91c2VvdmVyIG1vdXNlT3ZlciBwb2ludGVybW92ZSBwb2ludGVyTW92ZSBwb2ludGVyb3V0IHBvaW50ZXJPdXQgcG9pbnRlcm92ZXIgcG9pbnRlck92ZXIgc2Nyb2xsIHNjcm9sbCB0b2dnbGUgdG9nZ2xlIHRvdWNobW92ZSB0b3VjaE1vdmUgd2hlZWwgd2hlZWxcIi5zcGxpdChcIiBcIiksMSk7UGMoT2MsMik7Zm9yKHZhciBWZT1cImNoYW5nZSBzZWxlY3Rpb25jaGFuZ2UgdGV4dElucHV0IGNvbXBvc2l0aW9uc3RhcnQgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb251cGRhdGVcIi5zcGxpdChcIiBcIiksV2U9MDtXZTxWZS5sZW5ndGg7V2UrKylOYy5zZXQoVmVbV2VdLDApO2VhKFwib25Nb3VzZUVudGVyXCIsW1wibW91c2VvdXRcIixcIm1vdXNlb3ZlclwiXSk7XG5lYShcIm9uTW91c2VMZWF2ZVwiLFtcIm1vdXNlb3V0XCIsXCJtb3VzZW92ZXJcIl0pO2VhKFwib25Qb2ludGVyRW50ZXJcIixbXCJwb2ludGVyb3V0XCIsXCJwb2ludGVyb3ZlclwiXSk7ZWEoXCJvblBvaW50ZXJMZWF2ZVwiLFtcInBvaW50ZXJvdXRcIixcInBvaW50ZXJvdmVyXCJdKTtkYShcIm9uQ2hhbmdlXCIsXCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKSk7ZGEoXCJvblNlbGVjdFwiLFwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlXCIuc3BsaXQoXCIgXCIpKTtkYShcIm9uQmVmb3JlSW5wdXRcIixbXCJjb21wb3NpdGlvbmVuZFwiLFwia2V5cHJlc3NcIixcInRleHRJbnB1dFwiLFwicGFzdGVcIl0pO2RhKFwib25Db21wb3NpdGlvbkVuZFwiLFwiY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO1xuZGEoXCJvbkNvbXBvc2l0aW9uU3RhcnRcIixcImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO2RhKFwib25Db21wb3NpdGlvblVwZGF0ZVwiLFwiY29tcG9zaXRpb251cGRhdGUgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO3ZhciBYZT1cImFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2Ugc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmdcIi5zcGxpdChcIiBcIiksWWU9bmV3IFNldChcImNhbmNlbCBjbG9zZSBpbnZhbGlkIGxvYWQgc2Nyb2xsIHRvZ2dsZVwiLnNwbGl0KFwiIFwiKS5jb25jYXQoWGUpKTtcbmZ1bmN0aW9uIFplKGEsYixjKXt2YXIgZD1hLnR5cGV8fFwidW5rbm93bi1ldmVudFwiO2EuY3VycmVudFRhcmdldD1jO1liKGQsYix2b2lkIDAsYSk7YS5jdXJyZW50VGFyZ2V0PW51bGx9XG5mdW5jdGlvbiBzZShhLGIpe2I9MCE9PShiJjQpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgZD1hW2NdLGU9ZC5ldmVudDtkPWQubGlzdGVuZXJzO2E6e3ZhciBmPXZvaWQgMDtpZihiKWZvcih2YXIgZz1kLmxlbmd0aC0xOzA8PWc7Zy0tKXt2YXIgaD1kW2ddLGs9aC5pbnN0YW5jZSxsPWguY3VycmVudFRhcmdldDtoPWgubGlzdGVuZXI7aWYoayE9PWYmJmUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBhO1plKGUsaCxsKTtmPWt9ZWxzZSBmb3IoZz0wO2c8ZC5sZW5ndGg7ZysrKXtoPWRbZ107az1oLmluc3RhbmNlO2w9aC5jdXJyZW50VGFyZ2V0O2g9aC5saXN0ZW5lcjtpZihrIT09ZiYmZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGE7WmUoZSxoLGwpO2Y9a319fWlmKFViKXRocm93IGE9VmIsVWI9ITEsVmI9bnVsbCxhO31cbmZ1bmN0aW9uIEcoYSxiKXt2YXIgYz0kZShiKSxkPWErXCJfX2J1YmJsZVwiO2MuaGFzKGQpfHwoYWYoYixhLDIsITEpLGMuYWRkKGQpKX12YXIgYmY9XCJfcmVhY3RMaXN0ZW5pbmdcIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtmdW5jdGlvbiBjZihhKXthW2JmXXx8KGFbYmZdPSEwLGJhLmZvckVhY2goZnVuY3Rpb24oYil7WWUuaGFzKGIpfHxkZihiLCExLGEsbnVsbCk7ZGYoYiwhMCxhLG51bGwpfSkpfVxuZnVuY3Rpb24gZGYoYSxiLGMsZCl7dmFyIGU9NDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOjAsZj1jO1wic2VsZWN0aW9uY2hhbmdlXCI9PT1hJiY5IT09Yy5ub2RlVHlwZSYmKGY9Yy5vd25lckRvY3VtZW50KTtpZihudWxsIT09ZCYmIWImJlllLmhhcyhhKSl7aWYoXCJzY3JvbGxcIiE9PWEpcmV0dXJuO2V8PTI7Zj1kfXZhciBnPSRlKGYpLGg9YStcIl9fXCIrKGI/XCJjYXB0dXJlXCI6XCJidWJibGVcIik7Zy5oYXMoaCl8fChiJiYoZXw9NCksYWYoZixhLGUsYiksZy5hZGQoaCkpfVxuZnVuY3Rpb24gYWYoYSxiLGMsZCl7dmFyIGU9TmMuZ2V0KGIpO3N3aXRjaCh2b2lkIDA9PT1lPzI6ZSl7Y2FzZSAwOmU9Z2Q7YnJlYWs7Y2FzZSAxOmU9aWQ7YnJlYWs7ZGVmYXVsdDplPWhkfWM9ZS5iaW5kKG51bGwsYixjLGEpO2U9dm9pZCAwOyFQYnx8XCJ0b3VjaHN0YXJ0XCIhPT1iJiZcInRvdWNobW92ZVwiIT09YiYmXCJ3aGVlbFwiIT09Ynx8KGU9ITApO2Q/dm9pZCAwIT09ZT9hLmFkZEV2ZW50TGlzdGVuZXIoYixjLHtjYXB0dXJlOiEwLHBhc3NpdmU6ZX0pOmEuYWRkRXZlbnRMaXN0ZW5lcihiLGMsITApOnZvaWQgMCE9PWU/YS5hZGRFdmVudExpc3RlbmVyKGIsYyx7cGFzc2l2ZTplfSk6YS5hZGRFdmVudExpc3RlbmVyKGIsYywhMSl9XG5mdW5jdGlvbiBqZChhLGIsYyxkLGUpe3ZhciBmPWQ7aWYoMD09PShiJjEpJiYwPT09KGImMikmJm51bGwhPT1kKWE6Zm9yKDs7KXtpZihudWxsPT09ZClyZXR1cm47dmFyIGc9ZC50YWc7aWYoMz09PWd8fDQ9PT1nKXt2YXIgaD1kLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2lmKGg9PT1lfHw4PT09aC5ub2RlVHlwZSYmaC5wYXJlbnROb2RlPT09ZSlicmVhaztpZig0PT09Zylmb3IoZz1kLnJldHVybjtudWxsIT09Zzspe3ZhciBrPWcudGFnO2lmKDM9PT1rfHw0PT09aylpZihrPWcuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8saz09PWV8fDg9PT1rLm5vZGVUeXBlJiZrLnBhcmVudE5vZGU9PT1lKXJldHVybjtnPWcucmV0dXJufWZvcig7bnVsbCE9PWg7KXtnPXdjKGgpO2lmKG51bGw9PT1nKXJldHVybjtrPWcudGFnO2lmKDU9PT1rfHw2PT09ayl7ZD1mPWc7Y29udGludWUgYX1oPWgucGFyZW50Tm9kZX19ZD1kLnJldHVybn1OYihmdW5jdGlvbigpe3ZhciBkPWYsZT14YihjKSxnPVtdO1xuYTp7dmFyIGg9TWMuZ2V0KGEpO2lmKHZvaWQgMCE9PWgpe3ZhciBrPXRkLHg9YTtzd2l0Y2goYSl7Y2FzZSBcImtleXByZXNzXCI6aWYoMD09PW9kKGMpKWJyZWFrIGE7Y2FzZSBcImtleWRvd25cIjpjYXNlIFwia2V5dXBcIjprPVJkO2JyZWFrO2Nhc2UgXCJmb2N1c2luXCI6eD1cImZvY3VzXCI7az1GZDticmVhaztjYXNlIFwiZm9jdXNvdXRcIjp4PVwiYmx1clwiO2s9RmQ7YnJlYWs7Y2FzZSBcImJlZm9yZWJsdXJcIjpjYXNlIFwiYWZ0ZXJibHVyXCI6az1GZDticmVhaztjYXNlIFwiY2xpY2tcIjppZigyPT09Yy5idXR0b24pYnJlYWsgYTtjYXNlIFwiYXV4Y2xpY2tcIjpjYXNlIFwiZGJsY2xpY2tcIjpjYXNlIFwibW91c2Vkb3duXCI6Y2FzZSBcIm1vdXNlbW92ZVwiOmNhc2UgXCJtb3VzZXVwXCI6Y2FzZSBcIm1vdXNlb3V0XCI6Y2FzZSBcIm1vdXNlb3ZlclwiOmNhc2UgXCJjb250ZXh0bWVudVwiOms9QmQ7YnJlYWs7Y2FzZSBcImRyYWdcIjpjYXNlIFwiZHJhZ2VuZFwiOmNhc2UgXCJkcmFnZW50ZXJcIjpjYXNlIFwiZHJhZ2V4aXRcIjpjYXNlIFwiZHJhZ2xlYXZlXCI6Y2FzZSBcImRyYWdvdmVyXCI6Y2FzZSBcImRyYWdzdGFydFwiOmNhc2UgXCJkcm9wXCI6az1cbkRkO2JyZWFrO2Nhc2UgXCJ0b3VjaGNhbmNlbFwiOmNhc2UgXCJ0b3VjaGVuZFwiOmNhc2UgXCJ0b3VjaG1vdmVcIjpjYXNlIFwidG91Y2hzdGFydFwiOms9VmQ7YnJlYWs7Y2FzZSBJYzpjYXNlIEpjOmNhc2UgS2M6az1IZDticmVhaztjYXNlIExjOms9WGQ7YnJlYWs7Y2FzZSBcInNjcm9sbFwiOms9dmQ7YnJlYWs7Y2FzZSBcIndoZWVsXCI6az1aZDticmVhaztjYXNlIFwiY29weVwiOmNhc2UgXCJjdXRcIjpjYXNlIFwicGFzdGVcIjprPUpkO2JyZWFrO2Nhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpjYXNlIFwicG9pbnRlcmNhbmNlbFwiOmNhc2UgXCJwb2ludGVyZG93blwiOmNhc2UgXCJwb2ludGVybW92ZVwiOmNhc2UgXCJwb2ludGVyb3V0XCI6Y2FzZSBcInBvaW50ZXJvdmVyXCI6Y2FzZSBcInBvaW50ZXJ1cFwiOms9VGR9dmFyIHc9MCE9PShiJjQpLHo9IXcmJlwic2Nyb2xsXCI9PT1hLHU9dz9udWxsIT09aD9oK1wiQ2FwdHVyZVwiOm51bGw6aDt3PVtdO2Zvcih2YXIgdD1kLHE7bnVsbCE9PVxudDspe3E9dDt2YXIgdj1xLnN0YXRlTm9kZTs1PT09cS50YWcmJm51bGwhPT12JiYocT12LG51bGwhPT11JiYodj1PYih0LHUpLG51bGwhPXYmJncucHVzaChlZih0LHYscSkpKSk7aWYoeilicmVhazt0PXQucmV0dXJufTA8dy5sZW5ndGgmJihoPW5ldyBrKGgseCxudWxsLGMsZSksZy5wdXNoKHtldmVudDpoLGxpc3RlbmVyczp3fSkpfX1pZigwPT09KGImNykpe2E6e2g9XCJtb3VzZW92ZXJcIj09PWF8fFwicG9pbnRlcm92ZXJcIj09PWE7az1cIm1vdXNlb3V0XCI9PT1hfHxcInBvaW50ZXJvdXRcIj09PWE7aWYoaCYmMD09PShiJjE2KSYmKHg9Yy5yZWxhdGVkVGFyZ2V0fHxjLmZyb21FbGVtZW50KSYmKHdjKHgpfHx4W2ZmXSkpYnJlYWsgYTtpZihrfHxoKXtoPWUud2luZG93PT09ZT9lOihoPWUub3duZXJEb2N1bWVudCk/aC5kZWZhdWx0Vmlld3x8aC5wYXJlbnRXaW5kb3c6d2luZG93O2lmKGspe2lmKHg9Yy5yZWxhdGVkVGFyZ2V0fHxjLnRvRWxlbWVudCxrPWQseD14P3djKHgpOm51bGwsbnVsbCE9PVxueCYmKHo9WmIoeCkseCE9PXp8fDUhPT14LnRhZyYmNiE9PXgudGFnKSl4PW51bGx9ZWxzZSBrPW51bGwseD1kO2lmKGshPT14KXt3PUJkO3Y9XCJvbk1vdXNlTGVhdmVcIjt1PVwib25Nb3VzZUVudGVyXCI7dD1cIm1vdXNlXCI7aWYoXCJwb2ludGVyb3V0XCI9PT1hfHxcInBvaW50ZXJvdmVyXCI9PT1hKXc9VGQsdj1cIm9uUG9pbnRlckxlYXZlXCIsdT1cIm9uUG9pbnRlckVudGVyXCIsdD1cInBvaW50ZXJcIjt6PW51bGw9PWs/aDp1ZShrKTtxPW51bGw9PXg/aDp1ZSh4KTtoPW5ldyB3KHYsdCtcImxlYXZlXCIsayxjLGUpO2gudGFyZ2V0PXo7aC5yZWxhdGVkVGFyZ2V0PXE7dj1udWxsO3djKGUpPT09ZCYmKHc9bmV3IHcodSx0K1wiZW50ZXJcIix4LGMsZSksdy50YXJnZXQ9cSx3LnJlbGF0ZWRUYXJnZXQ9eix2PXcpO3o9djtpZihrJiZ4KWI6e3c9azt1PXg7dD0wO2ZvcihxPXc7cTtxPWdmKHEpKXQrKztxPTA7Zm9yKHY9dTt2O3Y9Z2YodikpcSsrO2Zvcig7MDx0LXE7KXc9Z2YodyksdC0tO2Zvcig7MDxxLXQ7KXU9XG5nZih1KSxxLS07Zm9yKDt0LS07KXtpZih3PT09dXx8bnVsbCE9PXUmJnc9PT11LmFsdGVybmF0ZSlicmVhayBiO3c9Z2Yodyk7dT1nZih1KX13PW51bGx9ZWxzZSB3PW51bGw7bnVsbCE9PWsmJmhmKGcsaCxrLHcsITEpO251bGwhPT14JiZudWxsIT09eiYmaGYoZyx6LHgsdywhMCl9fX1hOntoPWQ/dWUoZCk6d2luZG93O2s9aC5ub2RlTmFtZSYmaC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKFwic2VsZWN0XCI9PT1rfHxcImlucHV0XCI9PT1rJiZcImZpbGVcIj09PWgudHlwZSl2YXIgSj12ZTtlbHNlIGlmKG1lKGgpKWlmKHdlKUo9RmU7ZWxzZXtKPURlO3ZhciBLPUNlfWVsc2Uoaz1oLm5vZGVOYW1lKSYmXCJpbnB1dFwiPT09ay50b0xvd2VyQ2FzZSgpJiYoXCJjaGVja2JveFwiPT09aC50eXBlfHxcInJhZGlvXCI9PT1oLnR5cGUpJiYoSj1FZSk7aWYoSiYmKEo9SihhLGQpKSl7bmUoZyxKLGMsZSk7YnJlYWsgYX1LJiZLKGEsaCxkKTtcImZvY3Vzb3V0XCI9PT1hJiYoSz1oLl93cmFwcGVyU3RhdGUpJiZcbksuY29udHJvbGxlZCYmXCJudW1iZXJcIj09PWgudHlwZSYmYmIoaCxcIm51bWJlclwiLGgudmFsdWUpfUs9ZD91ZShkKTp3aW5kb3c7c3dpdGNoKGEpe2Nhc2UgXCJmb2N1c2luXCI6aWYobWUoSyl8fFwidHJ1ZVwiPT09Sy5jb250ZW50RWRpdGFibGUpUWU9SyxSZT1kLFNlPW51bGw7YnJlYWs7Y2FzZSBcImZvY3Vzb3V0XCI6U2U9UmU9UWU9bnVsbDticmVhaztjYXNlIFwibW91c2Vkb3duXCI6VGU9ITA7YnJlYWs7Y2FzZSBcImNvbnRleHRtZW51XCI6Y2FzZSBcIm1vdXNldXBcIjpjYXNlIFwiZHJhZ2VuZFwiOlRlPSExO1VlKGcsYyxlKTticmVhaztjYXNlIFwic2VsZWN0aW9uY2hhbmdlXCI6aWYoUGUpYnJlYWs7Y2FzZSBcImtleWRvd25cIjpjYXNlIFwia2V5dXBcIjpVZShnLGMsZSl9dmFyIFE7aWYoYWUpYjp7c3dpdGNoKGEpe2Nhc2UgXCJjb21wb3NpdGlvbnN0YXJ0XCI6dmFyIEw9XCJvbkNvbXBvc2l0aW9uU3RhcnRcIjticmVhayBiO2Nhc2UgXCJjb21wb3NpdGlvbmVuZFwiOkw9XCJvbkNvbXBvc2l0aW9uRW5kXCI7YnJlYWsgYjtcbmNhc2UgXCJjb21wb3NpdGlvbnVwZGF0ZVwiOkw9XCJvbkNvbXBvc2l0aW9uVXBkYXRlXCI7YnJlYWsgYn1MPXZvaWQgMH1lbHNlIGllP2dlKGEsYykmJihMPVwib25Db21wb3NpdGlvbkVuZFwiKTpcImtleWRvd25cIj09PWEmJjIyOT09PWMua2V5Q29kZSYmKEw9XCJvbkNvbXBvc2l0aW9uU3RhcnRcIik7TCYmKGRlJiZcImtvXCIhPT1jLmxvY2FsZSYmKGllfHxcIm9uQ29tcG9zaXRpb25TdGFydFwiIT09TD9cIm9uQ29tcG9zaXRpb25FbmRcIj09PUwmJmllJiYoUT1uZCgpKTooa2Q9ZSxsZD1cInZhbHVlXCJpbiBrZD9rZC52YWx1ZTprZC50ZXh0Q29udGVudCxpZT0hMCkpLEs9b2UoZCxMKSwwPEsubGVuZ3RoJiYoTD1uZXcgTGQoTCxhLG51bGwsYyxlKSxnLnB1c2goe2V2ZW50OkwsbGlzdGVuZXJzOkt9KSxRP0wuZGF0YT1ROihRPWhlKGMpLG51bGwhPT1RJiYoTC5kYXRhPVEpKSkpO2lmKFE9Y2U/amUoYSxjKTprZShhLGMpKWQ9b2UoZCxcIm9uQmVmb3JlSW5wdXRcIiksMDxkLmxlbmd0aCYmKGU9bmV3IExkKFwib25CZWZvcmVJbnB1dFwiLFxuXCJiZWZvcmVpbnB1dFwiLG51bGwsYyxlKSxnLnB1c2goe2V2ZW50OmUsbGlzdGVuZXJzOmR9KSxlLmRhdGE9USl9c2UoZyxiKX0pfWZ1bmN0aW9uIGVmKGEsYixjKXtyZXR1cm57aW5zdGFuY2U6YSxsaXN0ZW5lcjpiLGN1cnJlbnRUYXJnZXQ6Y319ZnVuY3Rpb24gb2UoYSxiKXtmb3IodmFyIGM9YitcIkNhcHR1cmVcIixkPVtdO251bGwhPT1hOyl7dmFyIGU9YSxmPWUuc3RhdGVOb2RlOzU9PT1lLnRhZyYmbnVsbCE9PWYmJihlPWYsZj1PYihhLGMpLG51bGwhPWYmJmQudW5zaGlmdChlZihhLGYsZSkpLGY9T2IoYSxiKSxudWxsIT1mJiZkLnB1c2goZWYoYSxmLGUpKSk7YT1hLnJldHVybn1yZXR1cm4gZH1mdW5jdGlvbiBnZihhKXtpZihudWxsPT09YSlyZXR1cm4gbnVsbDtkbyBhPWEucmV0dXJuO3doaWxlKGEmJjUhPT1hLnRhZyk7cmV0dXJuIGE/YTpudWxsfVxuZnVuY3Rpb24gaGYoYSxiLGMsZCxlKXtmb3IodmFyIGY9Yi5fcmVhY3ROYW1lLGc9W107bnVsbCE9PWMmJmMhPT1kOyl7dmFyIGg9YyxrPWguYWx0ZXJuYXRlLGw9aC5zdGF0ZU5vZGU7aWYobnVsbCE9PWsmJms9PT1kKWJyZWFrOzU9PT1oLnRhZyYmbnVsbCE9PWwmJihoPWwsZT8oaz1PYihjLGYpLG51bGwhPWsmJmcudW5zaGlmdChlZihjLGssaCkpKTplfHwoaz1PYihjLGYpLG51bGwhPWsmJmcucHVzaChlZihjLGssaCkpKSk7Yz1jLnJldHVybn0wIT09Zy5sZW5ndGgmJmEucHVzaCh7ZXZlbnQ6YixsaXN0ZW5lcnM6Z30pfWZ1bmN0aW9uIGpmKCl7fXZhciBrZj1udWxsLGxmPW51bGw7ZnVuY3Rpb24gbWYoYSxiKXtzd2l0Y2goYSl7Y2FzZSBcImJ1dHRvblwiOmNhc2UgXCJpbnB1dFwiOmNhc2UgXCJzZWxlY3RcIjpjYXNlIFwidGV4dGFyZWFcIjpyZXR1cm4hIWIuYXV0b0ZvY3VzfXJldHVybiExfVxuZnVuY3Rpb24gbmYoYSxiKXtyZXR1cm5cInRleHRhcmVhXCI9PT1hfHxcIm9wdGlvblwiPT09YXx8XCJub3NjcmlwdFwiPT09YXx8XCJzdHJpbmdcIj09PXR5cGVvZiBiLmNoaWxkcmVufHxcIm51bWJlclwiPT09dHlwZW9mIGIuY2hpbGRyZW58fFwib2JqZWN0XCI9PT10eXBlb2YgYi5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9PWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPWIuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sfXZhciBvZj1cImZ1bmN0aW9uXCI9PT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OnZvaWQgMCxwZj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDp2b2lkIDA7ZnVuY3Rpb24gcWYoYSl7MT09PWEubm9kZVR5cGU/YS50ZXh0Q29udGVudD1cIlwiOjk9PT1hLm5vZGVUeXBlJiYoYT1hLmJvZHksbnVsbCE9YSYmKGEudGV4dENvbnRlbnQ9XCJcIikpfVxuZnVuY3Rpb24gcmYoYSl7Zm9yKDtudWxsIT1hO2E9YS5uZXh0U2libGluZyl7dmFyIGI9YS5ub2RlVHlwZTtpZigxPT09Ynx8Mz09PWIpYnJlYWt9cmV0dXJuIGF9ZnVuY3Rpb24gc2YoYSl7YT1hLnByZXZpb3VzU2libGluZztmb3IodmFyIGI9MDthOyl7aWYoOD09PWEubm9kZVR5cGUpe3ZhciBjPWEuZGF0YTtpZihcIiRcIj09PWN8fFwiJCFcIj09PWN8fFwiJD9cIj09PWMpe2lmKDA9PT1iKXJldHVybiBhO2ItLX1lbHNlXCIvJFwiPT09YyYmYisrfWE9YS5wcmV2aW91c1NpYmxpbmd9cmV0dXJuIG51bGx9dmFyIHRmPTA7ZnVuY3Rpb24gdWYoYSl7cmV0dXJueyQkdHlwZW9mOkdhLHRvU3RyaW5nOmEsdmFsdWVPZjphfX12YXIgdmY9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksd2Y9XCJfX3JlYWN0RmliZXIkXCIrdmYseGY9XCJfX3JlYWN0UHJvcHMkXCIrdmYsZmY9XCJfX3JlYWN0Q29udGFpbmVyJFwiK3ZmLHlmPVwiX19yZWFjdEV2ZW50cyRcIit2ZjtcbmZ1bmN0aW9uIHdjKGEpe3ZhciBiPWFbd2ZdO2lmKGIpcmV0dXJuIGI7Zm9yKHZhciBjPWEucGFyZW50Tm9kZTtjOyl7aWYoYj1jW2ZmXXx8Y1t3Zl0pe2M9Yi5hbHRlcm5hdGU7aWYobnVsbCE9PWIuY2hpbGR8fG51bGwhPT1jJiZudWxsIT09Yy5jaGlsZClmb3IoYT1zZihhKTtudWxsIT09YTspe2lmKGM9YVt3Zl0pcmV0dXJuIGM7YT1zZihhKX1yZXR1cm4gYn1hPWM7Yz1hLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2IoYSl7YT1hW3dmXXx8YVtmZl07cmV0dXJuIWF8fDUhPT1hLnRhZyYmNiE9PWEudGFnJiYxMyE9PWEudGFnJiYzIT09YS50YWc/bnVsbDphfWZ1bmN0aW9uIHVlKGEpe2lmKDU9PT1hLnRhZ3x8Nj09PWEudGFnKXJldHVybiBhLnN0YXRlTm9kZTt0aHJvdyBFcnJvcih5KDMzKSk7fWZ1bmN0aW9uIERiKGEpe3JldHVybiBhW3hmXXx8bnVsbH1cbmZ1bmN0aW9uICRlKGEpe3ZhciBiPWFbeWZdO3ZvaWQgMD09PWImJihiPWFbeWZdPW5ldyBTZXQpO3JldHVybiBifXZhciB6Zj1bXSxBZj0tMTtmdW5jdGlvbiBCZihhKXtyZXR1cm57Y3VycmVudDphfX1mdW5jdGlvbiBIKGEpezA+QWZ8fChhLmN1cnJlbnQ9emZbQWZdLHpmW0FmXT1udWxsLEFmLS0pfWZ1bmN0aW9uIEkoYSxiKXtBZisrO3pmW0FmXT1hLmN1cnJlbnQ7YS5jdXJyZW50PWJ9dmFyIENmPXt9LE09QmYoQ2YpLE49QmYoITEpLERmPUNmO1xuZnVuY3Rpb24gRWYoYSxiKXt2YXIgYz1hLnR5cGUuY29udGV4dFR5cGVzO2lmKCFjKXJldHVybiBDZjt2YXIgZD1hLnN0YXRlTm9kZTtpZihkJiZkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9PT1iKXJldHVybiBkLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O3ZhciBlPXt9LGY7Zm9yKGYgaW4gYyllW2ZdPWJbZl07ZCYmKGE9YS5zdGF0ZU5vZGUsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PWIsYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1lKTtyZXR1cm4gZX1mdW5jdGlvbiBGZihhKXthPWEuY2hpbGRDb250ZXh0VHlwZXM7cmV0dXJuIG51bGwhPT1hJiZ2b2lkIDAhPT1hfWZ1bmN0aW9uIEdmKCl7SChOKTtIKE0pfWZ1bmN0aW9uIEhmKGEsYixjKXtpZihNLmN1cnJlbnQhPT1DZil0aHJvdyBFcnJvcih5KDE2OCkpO0koTSxiKTtJKE4sYyl9XG5mdW5jdGlvbiBJZihhLGIsYyl7dmFyIGQ9YS5zdGF0ZU5vZGU7YT1iLmNoaWxkQ29udGV4dFR5cGVzO2lmKFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBkLmdldENoaWxkQ29udGV4dClyZXR1cm4gYztkPWQuZ2V0Q2hpbGRDb250ZXh0KCk7Zm9yKHZhciBlIGluIGQpaWYoIShlIGluIGEpKXRocm93IEVycm9yKHkoMTA4LFJhKGIpfHxcIlVua25vd25cIixlKSk7cmV0dXJuIG0oe30sYyxkKX1mdW5jdGlvbiBKZihhKXthPShhPWEuc3RhdGVOb2RlKSYmYS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dHx8Q2Y7RGY9TS5jdXJyZW50O0koTSxhKTtJKE4sTi5jdXJyZW50KTtyZXR1cm4hMH1mdW5jdGlvbiBLZihhLGIsYyl7dmFyIGQ9YS5zdGF0ZU5vZGU7aWYoIWQpdGhyb3cgRXJyb3IoeSgxNjkpKTtjPyhhPUlmKGEsYixEZiksZC5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dD1hLEgoTiksSChNKSxJKE0sYSkpOkgoTik7SShOLGMpfVxudmFyIExmPW51bGwsTWY9bnVsbCxOZj1yLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSxPZj1yLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssUGY9ci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxRZj1yLnVuc3RhYmxlX3Nob3VsZFlpZWxkLFJmPXIudW5zdGFibGVfcmVxdWVzdFBhaW50LFNmPXIudW5zdGFibGVfbm93LFRmPXIudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsVWY9ci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxWZj1yLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFdmPXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksWGY9ci51bnN0YWJsZV9Mb3dQcmlvcml0eSxZZj1yLnVuc3RhYmxlX0lkbGVQcmlvcml0eSxaZj17fSwkZj12b2lkIDAhPT1SZj9SZjpmdW5jdGlvbigpe30sYWc9bnVsbCxiZz1udWxsLGNnPSExLGRnPVNmKCksTz0xRTQ+ZGc/U2Y6ZnVuY3Rpb24oKXtyZXR1cm4gU2YoKS1kZ307XG5mdW5jdGlvbiBlZygpe3N3aXRjaChUZigpKXtjYXNlIFVmOnJldHVybiA5OTtjYXNlIFZmOnJldHVybiA5ODtjYXNlIFdmOnJldHVybiA5NztjYXNlIFhmOnJldHVybiA5NjtjYXNlIFlmOnJldHVybiA5NTtkZWZhdWx0OnRocm93IEVycm9yKHkoMzMyKSk7fX1mdW5jdGlvbiBmZyhhKXtzd2l0Y2goYSl7Y2FzZSA5OTpyZXR1cm4gVWY7Y2FzZSA5ODpyZXR1cm4gVmY7Y2FzZSA5NzpyZXR1cm4gV2Y7Y2FzZSA5NjpyZXR1cm4gWGY7Y2FzZSA5NTpyZXR1cm4gWWY7ZGVmYXVsdDp0aHJvdyBFcnJvcih5KDMzMikpO319ZnVuY3Rpb24gZ2coYSxiKXthPWZnKGEpO3JldHVybiBOZihhLGIpfWZ1bmN0aW9uIGhnKGEsYixjKXthPWZnKGEpO3JldHVybiBPZihhLGIsYyl9ZnVuY3Rpb24gaWcoKXtpZihudWxsIT09Ymcpe3ZhciBhPWJnO2JnPW51bGw7UGYoYSl9amcoKX1cbmZ1bmN0aW9uIGpnKCl7aWYoIWNnJiZudWxsIT09YWcpe2NnPSEwO3ZhciBhPTA7dHJ5e3ZhciBiPWFnO2dnKDk5LGZ1bmN0aW9uKCl7Zm9yKDthPGIubGVuZ3RoO2ErKyl7dmFyIGM9YlthXTtkbyBjPWMoITApO3doaWxlKG51bGwhPT1jKX19KTthZz1udWxsfWNhdGNoKGMpe3Rocm93IG51bGwhPT1hZyYmKGFnPWFnLnNsaWNlKGErMSkpLE9mKFVmLGlnKSxjO31maW5hbGx5e2NnPSExfX19dmFyIGtnPXJhLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO2Z1bmN0aW9uIGxnKGEsYil7aWYoYSYmYS5kZWZhdWx0UHJvcHMpe2I9bSh7fSxiKTthPWEuZGVmYXVsdFByb3BzO2Zvcih2YXIgYyBpbiBhKXZvaWQgMD09PWJbY10mJihiW2NdPWFbY10pO3JldHVybiBifXJldHVybiBifXZhciBtZz1CZihudWxsKSxuZz1udWxsLG9nPW51bGwscGc9bnVsbDtmdW5jdGlvbiBxZygpe3BnPW9nPW5nPW51bGx9XG5mdW5jdGlvbiByZyhhKXt2YXIgYj1tZy5jdXJyZW50O0gobWcpO2EudHlwZS5fY29udGV4dC5fY3VycmVudFZhbHVlPWJ9ZnVuY3Rpb24gc2coYSxiKXtmb3IoO251bGwhPT1hOyl7dmFyIGM9YS5hbHRlcm5hdGU7aWYoKGEuY2hpbGRMYW5lcyZiKT09PWIpaWYobnVsbD09PWN8fChjLmNoaWxkTGFuZXMmYik9PT1iKWJyZWFrO2Vsc2UgYy5jaGlsZExhbmVzfD1iO2Vsc2UgYS5jaGlsZExhbmVzfD1iLG51bGwhPT1jJiYoYy5jaGlsZExhbmVzfD1iKTthPWEucmV0dXJufX1mdW5jdGlvbiB0ZyhhLGIpe25nPWE7cGc9b2c9bnVsbDthPWEuZGVwZW5kZW5jaWVzO251bGwhPT1hJiZudWxsIT09YS5maXJzdENvbnRleHQmJigwIT09KGEubGFuZXMmYikmJih1Zz0hMCksYS5maXJzdENvbnRleHQ9bnVsbCl9XG5mdW5jdGlvbiB2ZyhhLGIpe2lmKHBnIT09YSYmITEhPT1iJiYwIT09Yil7aWYoXCJudW1iZXJcIiE9PXR5cGVvZiBifHwxMDczNzQxODIzPT09YilwZz1hLGI9MTA3Mzc0MTgyMztiPXtjb250ZXh0OmEsb2JzZXJ2ZWRCaXRzOmIsbmV4dDpudWxsfTtpZihudWxsPT09b2cpe2lmKG51bGw9PT1uZyl0aHJvdyBFcnJvcih5KDMwOCkpO29nPWI7bmcuZGVwZW5kZW5jaWVzPXtsYW5lczowLGZpcnN0Q29udGV4dDpiLHJlc3BvbmRlcnM6bnVsbH19ZWxzZSBvZz1vZy5uZXh0PWJ9cmV0dXJuIGEuX2N1cnJlbnRWYWx1ZX12YXIgd2c9ITE7ZnVuY3Rpb24geGcoYSl7YS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmEubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsfSxlZmZlY3RzOm51bGx9fVxuZnVuY3Rpb24geWcoYSxiKXthPWEudXBkYXRlUXVldWU7Yi51cGRhdGVRdWV1ZT09PWEmJihiLnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6YS5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmEuZmlyc3RCYXNlVXBkYXRlLGxhc3RCYXNlVXBkYXRlOmEubGFzdEJhc2VVcGRhdGUsc2hhcmVkOmEuc2hhcmVkLGVmZmVjdHM6YS5lZmZlY3RzfSl9ZnVuY3Rpb24gemcoYSxiKXtyZXR1cm57ZXZlbnRUaW1lOmEsbGFuZTpiLHRhZzowLHBheWxvYWQ6bnVsbCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH19ZnVuY3Rpb24gQWcoYSxiKXthPWEudXBkYXRlUXVldWU7aWYobnVsbCE9PWEpe2E9YS5zaGFyZWQ7dmFyIGM9YS5wZW5kaW5nO251bGw9PT1jP2IubmV4dD1iOihiLm5leHQ9Yy5uZXh0LGMubmV4dD1iKTthLnBlbmRpbmc9Yn19XG5mdW5jdGlvbiBCZyhhLGIpe3ZhciBjPWEudXBkYXRlUXVldWUsZD1hLmFsdGVybmF0ZTtpZihudWxsIT09ZCYmKGQ9ZC51cGRhdGVRdWV1ZSxjPT09ZCkpe3ZhciBlPW51bGwsZj1udWxsO2M9Yy5maXJzdEJhc2VVcGRhdGU7aWYobnVsbCE9PWMpe2Rve3ZhciBnPXtldmVudFRpbWU6Yy5ldmVudFRpbWUsbGFuZTpjLmxhbmUsdGFnOmMudGFnLHBheWxvYWQ6Yy5wYXlsb2FkLGNhbGxiYWNrOmMuY2FsbGJhY2ssbmV4dDpudWxsfTtudWxsPT09Zj9lPWY9ZzpmPWYubmV4dD1nO2M9Yy5uZXh0fXdoaWxlKG51bGwhPT1jKTtudWxsPT09Zj9lPWY9YjpmPWYubmV4dD1ifWVsc2UgZT1mPWI7Yz17YmFzZVN0YXRlOmQuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTplLGxhc3RCYXNlVXBkYXRlOmYsc2hhcmVkOmQuc2hhcmVkLGVmZmVjdHM6ZC5lZmZlY3RzfTthLnVwZGF0ZVF1ZXVlPWM7cmV0dXJufWE9Yy5sYXN0QmFzZVVwZGF0ZTtudWxsPT09YT9jLmZpcnN0QmFzZVVwZGF0ZT1iOmEubmV4dD1cbmI7Yy5sYXN0QmFzZVVwZGF0ZT1ifVxuZnVuY3Rpb24gQ2coYSxiLGMsZCl7dmFyIGU9YS51cGRhdGVRdWV1ZTt3Zz0hMTt2YXIgZj1lLmZpcnN0QmFzZVVwZGF0ZSxnPWUubGFzdEJhc2VVcGRhdGUsaD1lLnNoYXJlZC5wZW5kaW5nO2lmKG51bGwhPT1oKXtlLnNoYXJlZC5wZW5kaW5nPW51bGw7dmFyIGs9aCxsPWsubmV4dDtrLm5leHQ9bnVsbDtudWxsPT09Zz9mPWw6Zy5uZXh0PWw7Zz1rO3ZhciBuPWEuYWx0ZXJuYXRlO2lmKG51bGwhPT1uKXtuPW4udXBkYXRlUXVldWU7dmFyIEE9bi5sYXN0QmFzZVVwZGF0ZTtBIT09ZyYmKG51bGw9PT1BP24uZmlyc3RCYXNlVXBkYXRlPWw6QS5uZXh0PWwsbi5sYXN0QmFzZVVwZGF0ZT1rKX19aWYobnVsbCE9PWYpe0E9ZS5iYXNlU3RhdGU7Zz0wO249bD1rPW51bGw7ZG97aD1mLmxhbmU7dmFyIHA9Zi5ldmVudFRpbWU7aWYoKGQmaCk9PT1oKXtudWxsIT09biYmKG49bi5uZXh0PXtldmVudFRpbWU6cCxsYW5lOjAsdGFnOmYudGFnLHBheWxvYWQ6Zi5wYXlsb2FkLGNhbGxiYWNrOmYuY2FsbGJhY2ssXG5uZXh0Om51bGx9KTthOnt2YXIgQz1hLHg9ZjtoPWI7cD1jO3N3aXRjaCh4LnRhZyl7Y2FzZSAxOkM9eC5wYXlsb2FkO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBDKXtBPUMuY2FsbChwLEEsaCk7YnJlYWsgYX1BPUM7YnJlYWsgYTtjYXNlIDM6Qy5mbGFncz1DLmZsYWdzJi00MDk3fDY0O2Nhc2UgMDpDPXgucGF5bG9hZDtoPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBDP0MuY2FsbChwLEEsaCk6QztpZihudWxsPT09aHx8dm9pZCAwPT09aClicmVhayBhO0E9bSh7fSxBLGgpO2JyZWFrIGE7Y2FzZSAyOndnPSEwfX1udWxsIT09Zi5jYWxsYmFjayYmKGEuZmxhZ3N8PTMyLGg9ZS5lZmZlY3RzLG51bGw9PT1oP2UuZWZmZWN0cz1bZl06aC5wdXNoKGYpKX1lbHNlIHA9e2V2ZW50VGltZTpwLGxhbmU6aCx0YWc6Zi50YWcscGF5bG9hZDpmLnBheWxvYWQsY2FsbGJhY2s6Zi5jYWxsYmFjayxuZXh0Om51bGx9LG51bGw9PT1uPyhsPW49cCxrPUEpOm49bi5uZXh0PXAsZ3w9aDtmPWYubmV4dDtpZihudWxsPT09XG5mKWlmKGg9ZS5zaGFyZWQucGVuZGluZyxudWxsPT09aClicmVhaztlbHNlIGY9aC5uZXh0LGgubmV4dD1udWxsLGUubGFzdEJhc2VVcGRhdGU9aCxlLnNoYXJlZC5wZW5kaW5nPW51bGx9d2hpbGUoMSk7bnVsbD09PW4mJihrPUEpO2UuYmFzZVN0YXRlPWs7ZS5maXJzdEJhc2VVcGRhdGU9bDtlLmxhc3RCYXNlVXBkYXRlPW47RGd8PWc7YS5sYW5lcz1nO2EubWVtb2l6ZWRTdGF0ZT1BfX1mdW5jdGlvbiBFZyhhLGIsYyl7YT1iLmVmZmVjdHM7Yi5lZmZlY3RzPW51bGw7aWYobnVsbCE9PWEpZm9yKGI9MDtiPGEubGVuZ3RoO2IrKyl7dmFyIGQ9YVtiXSxlPWQuY2FsbGJhY2s7aWYobnVsbCE9PWUpe2QuY2FsbGJhY2s9bnVsbDtkPWM7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIGUpdGhyb3cgRXJyb3IoeSgxOTEsZSkpO2UuY2FsbChkKX19fXZhciBGZz0obmV3IGFhLkNvbXBvbmVudCkucmVmcztcbmZ1bmN0aW9uIEdnKGEsYixjLGQpe2I9YS5tZW1vaXplZFN0YXRlO2M9YyhkLGIpO2M9bnVsbD09PWN8fHZvaWQgMD09PWM/YjptKHt9LGIsYyk7YS5tZW1vaXplZFN0YXRlPWM7MD09PWEubGFuZXMmJihhLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1jKX1cbnZhciBLZz17aXNNb3VudGVkOmZ1bmN0aW9uKGEpe3JldHVybihhPWEuX3JlYWN0SW50ZXJuYWxzKT9aYihhKT09PWE6ITF9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihhLGIsYyl7YT1hLl9yZWFjdEludGVybmFsczt2YXIgZD1IZygpLGU9SWcoYSksZj16ZyhkLGUpO2YucGF5bG9hZD1iO3ZvaWQgMCE9PWMmJm51bGwhPT1jJiYoZi5jYWxsYmFjaz1jKTtBZyhhLGYpO0pnKGEsZSxkKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihhLGIsYyl7YT1hLl9yZWFjdEludGVybmFsczt2YXIgZD1IZygpLGU9SWcoYSksZj16ZyhkLGUpO2YudGFnPTE7Zi5wYXlsb2FkPWI7dm9pZCAwIT09YyYmbnVsbCE9PWMmJihmLmNhbGxiYWNrPWMpO0FnKGEsZik7SmcoYSxlLGQpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oYSxiKXthPWEuX3JlYWN0SW50ZXJuYWxzO3ZhciBjPUhnKCksZD1JZyhhKSxlPXpnKGMsZCk7ZS50YWc9Mjt2b2lkIDAhPT1iJiZudWxsIT09YiYmKGUuY2FsbGJhY2s9XG5iKTtBZyhhLGUpO0pnKGEsZCxjKX19O2Z1bmN0aW9uIExnKGEsYixjLGQsZSxmLGcpe2E9YS5zdGF0ZU5vZGU7cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGEuc2hvdWxkQ29tcG9uZW50VXBkYXRlP2Euc2hvdWxkQ29tcG9uZW50VXBkYXRlKGQsZixnKTpiLnByb3RvdHlwZSYmYi5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQ/IUplKGMsZCl8fCFKZShlLGYpOiEwfVxuZnVuY3Rpb24gTWcoYSxiLGMpe3ZhciBkPSExLGU9Q2Y7dmFyIGY9Yi5jb250ZXh0VHlwZTtcIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mP2Y9dmcoZik6KGU9RmYoYik/RGY6TS5jdXJyZW50LGQ9Yi5jb250ZXh0VHlwZXMsZj0oZD1udWxsIT09ZCYmdm9pZCAwIT09ZCk/RWYoYSxlKTpDZik7Yj1uZXcgYihjLGYpO2EubWVtb2l6ZWRTdGF0ZT1udWxsIT09Yi5zdGF0ZSYmdm9pZCAwIT09Yi5zdGF0ZT9iLnN0YXRlOm51bGw7Yi51cGRhdGVyPUtnO2Euc3RhdGVOb2RlPWI7Yi5fcmVhY3RJbnRlcm5hbHM9YTtkJiYoYT1hLnN0YXRlTm9kZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9ZSxhLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWYpO3JldHVybiBifVxuZnVuY3Rpb24gTmcoYSxiLGMsZCl7YT1iLnN0YXRlO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJmIuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhjLGQpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBiLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZiLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGMsZCk7Yi5zdGF0ZSE9PWEmJktnLmVucXVldWVSZXBsYWNlU3RhdGUoYixiLnN0YXRlLG51bGwpfVxuZnVuY3Rpb24gT2coYSxiLGMsZCl7dmFyIGU9YS5zdGF0ZU5vZGU7ZS5wcm9wcz1jO2Uuc3RhdGU9YS5tZW1vaXplZFN0YXRlO2UucmVmcz1GZzt4ZyhhKTt2YXIgZj1iLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWY/ZS5jb250ZXh0PXZnKGYpOihmPUZmKGIpP0RmOk0uY3VycmVudCxlLmNvbnRleHQ9RWYoYSxmKSk7Q2coYSxjLGUsZCk7ZS5zdGF0ZT1hLm1lbW9pemVkU3RhdGU7Zj1iLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcImZ1bmN0aW9uXCI9PT10eXBlb2YgZiYmKEdnKGEsYixmLGMpLGUuc3RhdGU9YS5tZW1vaXplZFN0YXRlKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgYi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHN8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgZS5jb21wb25lbnRXaWxsTW91bnR8fFxuKGI9ZS5zdGF0ZSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5jb21wb25lbnRXaWxsTW91bnQmJmUuY29tcG9uZW50V2lsbE1vdW50KCksXCJmdW5jdGlvblwiPT09dHlwZW9mIGUuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksYiE9PWUuc3RhdGUmJktnLmVucXVldWVSZXBsYWNlU3RhdGUoZSxlLnN0YXRlLG51bGwpLENnKGEsYyxlLGQpLGUuc3RhdGU9YS5tZW1vaXplZFN0YXRlKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZS5jb21wb25lbnREaWRNb3VudCYmKGEuZmxhZ3N8PTQpfXZhciBQZz1BcnJheS5pc0FycmF5O1xuZnVuY3Rpb24gUWcoYSxiLGMpe2E9Yy5yZWY7aWYobnVsbCE9PWEmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBhJiZcIm9iamVjdFwiIT09dHlwZW9mIGEpe2lmKGMuX293bmVyKXtjPWMuX293bmVyO2lmKGMpe2lmKDEhPT1jLnRhZyl0aHJvdyBFcnJvcih5KDMwOSkpO3ZhciBkPWMuc3RhdGVOb2RlfWlmKCFkKXRocm93IEVycm9yKHkoMTQ3LGEpKTt2YXIgZT1cIlwiK2E7aWYobnVsbCE9PWImJm51bGwhPT1iLnJlZiYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGIucmVmJiZiLnJlZi5fc3RyaW5nUmVmPT09ZSlyZXR1cm4gYi5yZWY7Yj1mdW5jdGlvbihhKXt2YXIgYj1kLnJlZnM7Yj09PUZnJiYoYj1kLnJlZnM9e30pO251bGw9PT1hP2RlbGV0ZSBiW2VdOmJbZV09YX07Yi5fc3RyaW5nUmVmPWU7cmV0dXJuIGJ9aWYoXCJzdHJpbmdcIiE9PXR5cGVvZiBhKXRocm93IEVycm9yKHkoMjg0KSk7aWYoIWMuX293bmVyKXRocm93IEVycm9yKHkoMjkwLGEpKTt9cmV0dXJuIGF9XG5mdW5jdGlvbiBSZyhhLGIpe2lmKFwidGV4dGFyZWFcIiE9PWEudHlwZSl0aHJvdyBFcnJvcih5KDMxLFwiW29iamVjdCBPYmplY3RdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYik/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhiKS5qb2luKFwiLCBcIikrXCJ9XCI6YikpO31cbmZ1bmN0aW9uIFNnKGEpe2Z1bmN0aW9uIGIoYixjKXtpZihhKXt2YXIgZD1iLmxhc3RFZmZlY3Q7bnVsbCE9PWQ/KGQubmV4dEVmZmVjdD1jLGIubGFzdEVmZmVjdD1jKTpiLmZpcnN0RWZmZWN0PWIubGFzdEVmZmVjdD1jO2MubmV4dEVmZmVjdD1udWxsO2MuZmxhZ3M9OH19ZnVuY3Rpb24gYyhjLGQpe2lmKCFhKXJldHVybiBudWxsO2Zvcig7bnVsbCE9PWQ7KWIoYyxkKSxkPWQuc2libGluZztyZXR1cm4gbnVsbH1mdW5jdGlvbiBkKGEsYil7Zm9yKGE9bmV3IE1hcDtudWxsIT09YjspbnVsbCE9PWIua2V5P2Euc2V0KGIua2V5LGIpOmEuc2V0KGIuaW5kZXgsYiksYj1iLnNpYmxpbmc7cmV0dXJuIGF9ZnVuY3Rpb24gZShhLGIpe2E9VGcoYSxiKTthLmluZGV4PTA7YS5zaWJsaW5nPW51bGw7cmV0dXJuIGF9ZnVuY3Rpb24gZihiLGMsZCl7Yi5pbmRleD1kO2lmKCFhKXJldHVybiBjO2Q9Yi5hbHRlcm5hdGU7aWYobnVsbCE9PWQpcmV0dXJuIGQ9ZC5pbmRleCxkPGM/KGIuZmxhZ3M9MixcbmMpOmQ7Yi5mbGFncz0yO3JldHVybiBjfWZ1bmN0aW9uIGcoYil7YSYmbnVsbD09PWIuYWx0ZXJuYXRlJiYoYi5mbGFncz0yKTtyZXR1cm4gYn1mdW5jdGlvbiBoKGEsYixjLGQpe2lmKG51bGw9PT1ifHw2IT09Yi50YWcpcmV0dXJuIGI9VWcoYyxhLm1vZGUsZCksYi5yZXR1cm49YSxiO2I9ZShiLGMpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gayhhLGIsYyxkKXtpZihudWxsIT09YiYmYi5lbGVtZW50VHlwZT09PWMudHlwZSlyZXR1cm4gZD1lKGIsYy5wcm9wcyksZC5yZWY9UWcoYSxiLGMpLGQucmV0dXJuPWEsZDtkPVZnKGMudHlwZSxjLmtleSxjLnByb3BzLG51bGwsYS5tb2RlLGQpO2QucmVmPVFnKGEsYixjKTtkLnJldHVybj1hO3JldHVybiBkfWZ1bmN0aW9uIGwoYSxiLGMsZCl7aWYobnVsbD09PWJ8fDQhPT1iLnRhZ3x8Yi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PWMuY29udGFpbmVySW5mb3x8Yi5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1jLmltcGxlbWVudGF0aW9uKXJldHVybiBiPVxuV2coYyxhLm1vZGUsZCksYi5yZXR1cm49YSxiO2I9ZShiLGMuY2hpbGRyZW58fFtdKTtiLnJldHVybj1hO3JldHVybiBifWZ1bmN0aW9uIG4oYSxiLGMsZCxmKXtpZihudWxsPT09Ynx8NyE9PWIudGFnKXJldHVybiBiPVhnKGMsYS5tb2RlLGQsZiksYi5yZXR1cm49YSxiO2I9ZShiLGMpO2IucmV0dXJuPWE7cmV0dXJuIGJ9ZnVuY3Rpb24gQShhLGIsYyl7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBifHxcIm51bWJlclwiPT09dHlwZW9mIGIpcmV0dXJuIGI9VWcoXCJcIitiLGEubW9kZSxjKSxiLnJldHVybj1hLGI7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBiJiZudWxsIT09Yil7c3dpdGNoKGIuJCR0eXBlb2Ype2Nhc2Ugc2E6cmV0dXJuIGM9VmcoYi50eXBlLGIua2V5LGIucHJvcHMsbnVsbCxhLm1vZGUsYyksYy5yZWY9UWcoYSxudWxsLGIpLGMucmV0dXJuPWEsYztjYXNlIHRhOnJldHVybiBiPVdnKGIsYS5tb2RlLGMpLGIucmV0dXJuPWEsYn1pZihQZyhiKXx8TGEoYikpcmV0dXJuIGI9WGcoYixcbmEubW9kZSxjLG51bGwpLGIucmV0dXJuPWEsYjtSZyhhLGIpfXJldHVybiBudWxsfWZ1bmN0aW9uIHAoYSxiLGMsZCl7dmFyIGU9bnVsbCE9PWI/Yi5rZXk6bnVsbDtpZihcInN0cmluZ1wiPT09dHlwZW9mIGN8fFwibnVtYmVyXCI9PT10eXBlb2YgYylyZXR1cm4gbnVsbCE9PWU/bnVsbDpoKGEsYixcIlwiK2MsZCk7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBjJiZudWxsIT09Yyl7c3dpdGNoKGMuJCR0eXBlb2Ype2Nhc2Ugc2E6cmV0dXJuIGMua2V5PT09ZT9jLnR5cGU9PT11YT9uKGEsYixjLnByb3BzLmNoaWxkcmVuLGQsZSk6ayhhLGIsYyxkKTpudWxsO2Nhc2UgdGE6cmV0dXJuIGMua2V5PT09ZT9sKGEsYixjLGQpOm51bGx9aWYoUGcoYyl8fExhKGMpKXJldHVybiBudWxsIT09ZT9udWxsOm4oYSxiLGMsZCxudWxsKTtSZyhhLGMpfXJldHVybiBudWxsfWZ1bmN0aW9uIEMoYSxiLGMsZCxlKXtpZihcInN0cmluZ1wiPT09dHlwZW9mIGR8fFwibnVtYmVyXCI9PT10eXBlb2YgZClyZXR1cm4gYT1hLmdldChjKXx8XG5udWxsLGgoYixhLFwiXCIrZCxlKTtpZihcIm9iamVjdFwiPT09dHlwZW9mIGQmJm51bGwhPT1kKXtzd2l0Y2goZC4kJHR5cGVvZil7Y2FzZSBzYTpyZXR1cm4gYT1hLmdldChudWxsPT09ZC5rZXk/YzpkLmtleSl8fG51bGwsZC50eXBlPT09dWE/bihiLGEsZC5wcm9wcy5jaGlsZHJlbixlLGQua2V5KTprKGIsYSxkLGUpO2Nhc2UgdGE6cmV0dXJuIGE9YS5nZXQobnVsbD09PWQua2V5P2M6ZC5rZXkpfHxudWxsLGwoYixhLGQsZSl9aWYoUGcoZCl8fExhKGQpKXJldHVybiBhPWEuZ2V0KGMpfHxudWxsLG4oYixhLGQsZSxudWxsKTtSZyhiLGQpfXJldHVybiBudWxsfWZ1bmN0aW9uIHgoZSxnLGgsayl7Zm9yKHZhciBsPW51bGwsdD1udWxsLHU9Zyx6PWc9MCxxPW51bGw7bnVsbCE9PXUmJno8aC5sZW5ndGg7eisrKXt1LmluZGV4Pno/KHE9dSx1PW51bGwpOnE9dS5zaWJsaW5nO3ZhciBuPXAoZSx1LGhbel0sayk7aWYobnVsbD09PW4pe251bGw9PT11JiYodT1xKTticmVha31hJiZ1JiZudWxsPT09XG5uLmFsdGVybmF0ZSYmYihlLHUpO2c9ZihuLGcseik7bnVsbD09PXQ/bD1uOnQuc2libGluZz1uO3Q9bjt1PXF9aWYoej09PWgubGVuZ3RoKXJldHVybiBjKGUsdSksbDtpZihudWxsPT09dSl7Zm9yKDt6PGgubGVuZ3RoO3orKyl1PUEoZSxoW3pdLGspLG51bGwhPT11JiYoZz1mKHUsZyx6KSxudWxsPT09dD9sPXU6dC5zaWJsaW5nPXUsdD11KTtyZXR1cm4gbH1mb3IodT1kKGUsdSk7ejxoLmxlbmd0aDt6KyspcT1DKHUsZSx6LGhbel0sayksbnVsbCE9PXEmJihhJiZudWxsIT09cS5hbHRlcm5hdGUmJnUuZGVsZXRlKG51bGw9PT1xLmtleT96OnEua2V5KSxnPWYocSxnLHopLG51bGw9PT10P2w9cTp0LnNpYmxpbmc9cSx0PXEpO2EmJnUuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYihlLGEpfSk7cmV0dXJuIGx9ZnVuY3Rpb24gdyhlLGcsaCxrKXt2YXIgbD1MYShoKTtpZihcImZ1bmN0aW9uXCIhPT10eXBlb2YgbCl0aHJvdyBFcnJvcih5KDE1MCkpO2g9bC5jYWxsKGgpO2lmKG51bGw9PVxuaCl0aHJvdyBFcnJvcih5KDE1MSkpO2Zvcih2YXIgdD1sPW51bGwsdT1nLHo9Zz0wLHE9bnVsbCxuPWgubmV4dCgpO251bGwhPT11JiYhbi5kb25lO3orKyxuPWgubmV4dCgpKXt1LmluZGV4Pno/KHE9dSx1PW51bGwpOnE9dS5zaWJsaW5nO3ZhciB3PXAoZSx1LG4udmFsdWUsayk7aWYobnVsbD09PXcpe251bGw9PT11JiYodT1xKTticmVha31hJiZ1JiZudWxsPT09dy5hbHRlcm5hdGUmJmIoZSx1KTtnPWYodyxnLHopO251bGw9PT10P2w9dzp0LnNpYmxpbmc9dzt0PXc7dT1xfWlmKG4uZG9uZSlyZXR1cm4gYyhlLHUpLGw7aWYobnVsbD09PXUpe2Zvcig7IW4uZG9uZTt6Kyssbj1oLm5leHQoKSluPUEoZSxuLnZhbHVlLGspLG51bGwhPT1uJiYoZz1mKG4sZyx6KSxudWxsPT09dD9sPW46dC5zaWJsaW5nPW4sdD1uKTtyZXR1cm4gbH1mb3IodT1kKGUsdSk7IW4uZG9uZTt6Kyssbj1oLm5leHQoKSluPUModSxlLHosbi52YWx1ZSxrKSxudWxsIT09biYmKGEmJm51bGwhPT1uLmFsdGVybmF0ZSYmXG51LmRlbGV0ZShudWxsPT09bi5rZXk/ejpuLmtleSksZz1mKG4sZyx6KSxudWxsPT09dD9sPW46dC5zaWJsaW5nPW4sdD1uKTthJiZ1LmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGIoZSxhKX0pO3JldHVybiBsfXJldHVybiBmdW5jdGlvbihhLGQsZixoKXt2YXIgaz1cIm9iamVjdFwiPT09dHlwZW9mIGYmJm51bGwhPT1mJiZmLnR5cGU9PT11YSYmbnVsbD09PWYua2V5O2smJihmPWYucHJvcHMuY2hpbGRyZW4pO3ZhciBsPVwib2JqZWN0XCI9PT10eXBlb2YgZiYmbnVsbCE9PWY7aWYobClzd2l0Y2goZi4kJHR5cGVvZil7Y2FzZSBzYTphOntsPWYua2V5O2ZvcihrPWQ7bnVsbCE9PWs7KXtpZihrLmtleT09PWwpe3N3aXRjaChrLnRhZyl7Y2FzZSA3OmlmKGYudHlwZT09PXVhKXtjKGEsay5zaWJsaW5nKTtkPWUoayxmLnByb3BzLmNoaWxkcmVuKTtkLnJldHVybj1hO2E9ZDticmVhayBhfWJyZWFrO2RlZmF1bHQ6aWYoay5lbGVtZW50VHlwZT09PWYudHlwZSl7YyhhLGsuc2libGluZyk7XG5kPWUoayxmLnByb3BzKTtkLnJlZj1RZyhhLGssZik7ZC5yZXR1cm49YTthPWQ7YnJlYWsgYX19YyhhLGspO2JyZWFrfWVsc2UgYihhLGspO2s9ay5zaWJsaW5nfWYudHlwZT09PXVhPyhkPVhnKGYucHJvcHMuY2hpbGRyZW4sYS5tb2RlLGgsZi5rZXkpLGQucmV0dXJuPWEsYT1kKTooaD1WZyhmLnR5cGUsZi5rZXksZi5wcm9wcyxudWxsLGEubW9kZSxoKSxoLnJlZj1RZyhhLGQsZiksaC5yZXR1cm49YSxhPWgpfXJldHVybiBnKGEpO2Nhc2UgdGE6YTp7Zm9yKGs9Zi5rZXk7bnVsbCE9PWQ7KXtpZihkLmtleT09PWspaWYoND09PWQudGFnJiZkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvPT09Zi5jb250YWluZXJJbmZvJiZkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbj09PWYuaW1wbGVtZW50YXRpb24pe2MoYSxkLnNpYmxpbmcpO2Q9ZShkLGYuY2hpbGRyZW58fFtdKTtkLnJldHVybj1hO2E9ZDticmVhayBhfWVsc2V7YyhhLGQpO2JyZWFrfWVsc2UgYihhLGQpO2Q9ZC5zaWJsaW5nfWQ9XG5XZyhmLGEubW9kZSxoKTtkLnJldHVybj1hO2E9ZH1yZXR1cm4gZyhhKX1pZihcInN0cmluZ1wiPT09dHlwZW9mIGZ8fFwibnVtYmVyXCI9PT10eXBlb2YgZilyZXR1cm4gZj1cIlwiK2YsbnVsbCE9PWQmJjY9PT1kLnRhZz8oYyhhLGQuc2libGluZyksZD1lKGQsZiksZC5yZXR1cm49YSxhPWQpOihjKGEsZCksZD1VZyhmLGEubW9kZSxoKSxkLnJldHVybj1hLGE9ZCksZyhhKTtpZihQZyhmKSlyZXR1cm4geChhLGQsZixoKTtpZihMYShmKSlyZXR1cm4gdyhhLGQsZixoKTtsJiZSZyhhLGYpO2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgZiYmIWspc3dpdGNoKGEudGFnKXtjYXNlIDE6Y2FzZSAyMjpjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnRocm93IEVycm9yKHkoMTUyLFJhKGEudHlwZSl8fFwiQ29tcG9uZW50XCIpKTt9cmV0dXJuIGMoYSxkKX19dmFyIFlnPVNnKCEwKSxaZz1TZyghMSksJGc9e30sYWg9QmYoJGcpLGJoPUJmKCRnKSxjaD1CZigkZyk7XG5mdW5jdGlvbiBkaChhKXtpZihhPT09JGcpdGhyb3cgRXJyb3IoeSgxNzQpKTtyZXR1cm4gYX1mdW5jdGlvbiBlaChhLGIpe0koY2gsYik7SShiaCxhKTtJKGFoLCRnKTthPWIubm9kZVR5cGU7c3dpdGNoKGEpe2Nhc2UgOTpjYXNlIDExOmI9KGI9Yi5kb2N1bWVudEVsZW1lbnQpP2IubmFtZXNwYWNlVVJJOm1iKG51bGwsXCJcIik7YnJlYWs7ZGVmYXVsdDphPTg9PT1hP2IucGFyZW50Tm9kZTpiLGI9YS5uYW1lc3BhY2VVUkl8fG51bGwsYT1hLnRhZ05hbWUsYj1tYihiLGEpfUgoYWgpO0koYWgsYil9ZnVuY3Rpb24gZmgoKXtIKGFoKTtIKGJoKTtIKGNoKX1mdW5jdGlvbiBnaChhKXtkaChjaC5jdXJyZW50KTt2YXIgYj1kaChhaC5jdXJyZW50KTt2YXIgYz1tYihiLGEudHlwZSk7YiE9PWMmJihJKGJoLGEpLEkoYWgsYykpfWZ1bmN0aW9uIGhoKGEpe2JoLmN1cnJlbnQ9PT1hJiYoSChhaCksSChiaCkpfXZhciBQPUJmKDApO1xuZnVuY3Rpb24gaWgoYSl7Zm9yKHZhciBiPWE7bnVsbCE9PWI7KXtpZigxMz09PWIudGFnKXt2YXIgYz1iLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWMmJihjPWMuZGVoeWRyYXRlZCxudWxsPT09Y3x8XCIkP1wiPT09Yy5kYXRhfHxcIiQhXCI9PT1jLmRhdGEpKXJldHVybiBifWVsc2UgaWYoMTk9PT1iLnRhZyYmdm9pZCAwIT09Yi5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyKXtpZigwIT09KGIuZmxhZ3MmNjQpKXJldHVybiBifWVsc2UgaWYobnVsbCE9PWIuY2hpbGQpe2IuY2hpbGQucmV0dXJuPWI7Yj1iLmNoaWxkO2NvbnRpbnVlfWlmKGI9PT1hKWJyZWFrO2Zvcig7bnVsbD09PWIuc2libGluZzspe2lmKG51bGw9PT1iLnJldHVybnx8Yi5yZXR1cm49PT1hKXJldHVybiBudWxsO2I9Yi5yZXR1cm59Yi5zaWJsaW5nLnJldHVybj1iLnJldHVybjtiPWIuc2libGluZ31yZXR1cm4gbnVsbH12YXIgamg9bnVsbCxraD1udWxsLGxoPSExO1xuZnVuY3Rpb24gbWgoYSxiKXt2YXIgYz1uaCg1LG51bGwsbnVsbCwwKTtjLmVsZW1lbnRUeXBlPVwiREVMRVRFRFwiO2MudHlwZT1cIkRFTEVURURcIjtjLnN0YXRlTm9kZT1iO2MucmV0dXJuPWE7Yy5mbGFncz04O251bGwhPT1hLmxhc3RFZmZlY3Q/KGEubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWMsYS5sYXN0RWZmZWN0PWMpOmEuZmlyc3RFZmZlY3Q9YS5sYXN0RWZmZWN0PWN9ZnVuY3Rpb24gb2goYSxiKXtzd2l0Y2goYS50YWcpe2Nhc2UgNTp2YXIgYz1hLnR5cGU7Yj0xIT09Yi5ub2RlVHlwZXx8Yy50b0xvd2VyQ2FzZSgpIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP251bGw6YjtyZXR1cm4gbnVsbCE9PWI/KGEuc3RhdGVOb2RlPWIsITApOiExO2Nhc2UgNjpyZXR1cm4gYj1cIlwiPT09YS5wZW5kaW5nUHJvcHN8fDMhPT1iLm5vZGVUeXBlP251bGw6YixudWxsIT09Yj8oYS5zdGF0ZU5vZGU9YiwhMCk6ITE7Y2FzZSAxMzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiExfX1cbmZ1bmN0aW9uIHBoKGEpe2lmKGxoKXt2YXIgYj1raDtpZihiKXt2YXIgYz1iO2lmKCFvaChhLGIpKXtiPXJmKGMubmV4dFNpYmxpbmcpO2lmKCFifHwhb2goYSxiKSl7YS5mbGFncz1hLmZsYWdzJi0xMDI1fDI7bGg9ITE7amg9YTtyZXR1cm59bWgoamgsYyl9amg9YTtraD1yZihiLmZpcnN0Q2hpbGQpfWVsc2UgYS5mbGFncz1hLmZsYWdzJi0xMDI1fDIsbGg9ITEsamg9YX19ZnVuY3Rpb24gcWgoYSl7Zm9yKGE9YS5yZXR1cm47bnVsbCE9PWEmJjUhPT1hLnRhZyYmMyE9PWEudGFnJiYxMyE9PWEudGFnOylhPWEucmV0dXJuO2poPWF9XG5mdW5jdGlvbiByaChhKXtpZihhIT09amgpcmV0dXJuITE7aWYoIWxoKXJldHVybiBxaChhKSxsaD0hMCwhMTt2YXIgYj1hLnR5cGU7aWYoNSE9PWEudGFnfHxcImhlYWRcIiE9PWImJlwiYm9keVwiIT09YiYmIW5mKGIsYS5tZW1vaXplZFByb3BzKSlmb3IoYj1raDtiOyltaChhLGIpLGI9cmYoYi5uZXh0U2libGluZyk7cWgoYSk7aWYoMTM9PT1hLnRhZyl7YT1hLm1lbW9pemVkU3RhdGU7YT1udWxsIT09YT9hLmRlaHlkcmF0ZWQ6bnVsbDtpZighYSl0aHJvdyBFcnJvcih5KDMxNykpO2E6e2E9YS5uZXh0U2libGluZztmb3IoYj0wO2E7KXtpZig4PT09YS5ub2RlVHlwZSl7dmFyIGM9YS5kYXRhO2lmKFwiLyRcIj09PWMpe2lmKDA9PT1iKXtraD1yZihhLm5leHRTaWJsaW5nKTticmVhayBhfWItLX1lbHNlXCIkXCIhPT1jJiZcIiQhXCIhPT1jJiZcIiQ/XCIhPT1jfHxiKyt9YT1hLm5leHRTaWJsaW5nfWtoPW51bGx9fWVsc2Uga2g9amg/cmYoYS5zdGF0ZU5vZGUubmV4dFNpYmxpbmcpOm51bGw7cmV0dXJuITB9XG5mdW5jdGlvbiBzaCgpe2toPWpoPW51bGw7bGg9ITF9dmFyIHRoPVtdO2Z1bmN0aW9uIHVoKCl7Zm9yKHZhciBhPTA7YTx0aC5sZW5ndGg7YSsrKXRoW2FdLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PW51bGw7dGgubGVuZ3RoPTB9dmFyIHZoPXJhLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsd2g9cmEuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcseGg9MCxSPW51bGwsUz1udWxsLFQ9bnVsbCx5aD0hMSx6aD0hMTtmdW5jdGlvbiBBaCgpe3Rocm93IEVycm9yKHkoMzIxKSk7fWZ1bmN0aW9uIEJoKGEsYil7aWYobnVsbD09PWIpcmV0dXJuITE7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aCYmYzxhLmxlbmd0aDtjKyspaWYoIUhlKGFbY10sYltjXSkpcmV0dXJuITE7cmV0dXJuITB9XG5mdW5jdGlvbiBDaChhLGIsYyxkLGUsZil7eGg9ZjtSPWI7Yi5tZW1vaXplZFN0YXRlPW51bGw7Yi51cGRhdGVRdWV1ZT1udWxsO2IubGFuZXM9MDt2aC5jdXJyZW50PW51bGw9PT1hfHxudWxsPT09YS5tZW1vaXplZFN0YXRlP0RoOkVoO2E9YyhkLGUpO2lmKHpoKXtmPTA7ZG97emg9ITE7aWYoISgyNT5mKSl0aHJvdyBFcnJvcih5KDMwMSkpO2YrPTE7VD1TPW51bGw7Yi51cGRhdGVRdWV1ZT1udWxsO3ZoLmN1cnJlbnQ9Rmg7YT1jKGQsZSl9d2hpbGUoemgpfXZoLmN1cnJlbnQ9R2g7Yj1udWxsIT09UyYmbnVsbCE9PVMubmV4dDt4aD0wO1Q9Uz1SPW51bGw7eWg9ITE7aWYoYil0aHJvdyBFcnJvcih5KDMwMCkpO3JldHVybiBhfWZ1bmN0aW9uIEhoKCl7dmFyIGE9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxiYXNlUXVldWU6bnVsbCxxdWV1ZTpudWxsLG5leHQ6bnVsbH07bnVsbD09PVQ/Ui5tZW1vaXplZFN0YXRlPVQ9YTpUPVQubmV4dD1hO3JldHVybiBUfVxuZnVuY3Rpb24gSWgoKXtpZihudWxsPT09Uyl7dmFyIGE9Ui5hbHRlcm5hdGU7YT1udWxsIT09YT9hLm1lbW9pemVkU3RhdGU6bnVsbH1lbHNlIGE9Uy5uZXh0O3ZhciBiPW51bGw9PT1UP1IubWVtb2l6ZWRTdGF0ZTpULm5leHQ7aWYobnVsbCE9PWIpVD1iLFM9YTtlbHNle2lmKG51bGw9PT1hKXRocm93IEVycm9yKHkoMzEwKSk7Uz1hO2E9e21lbW9pemVkU3RhdGU6Uy5tZW1vaXplZFN0YXRlLGJhc2VTdGF0ZTpTLmJhc2VTdGF0ZSxiYXNlUXVldWU6Uy5iYXNlUXVldWUscXVldWU6Uy5xdWV1ZSxuZXh0Om51bGx9O251bGw9PT1UP1IubWVtb2l6ZWRTdGF0ZT1UPWE6VD1ULm5leHQ9YX1yZXR1cm4gVH1mdW5jdGlvbiBKaChhLGIpe3JldHVyblwiZnVuY3Rpb25cIj09PXR5cGVvZiBiP2IoYSk6Yn1cbmZ1bmN0aW9uIEtoKGEpe3ZhciBiPUloKCksYz1iLnF1ZXVlO2lmKG51bGw9PT1jKXRocm93IEVycm9yKHkoMzExKSk7Yy5sYXN0UmVuZGVyZWRSZWR1Y2VyPWE7dmFyIGQ9UyxlPWQuYmFzZVF1ZXVlLGY9Yy5wZW5kaW5nO2lmKG51bGwhPT1mKXtpZihudWxsIT09ZSl7dmFyIGc9ZS5uZXh0O2UubmV4dD1mLm5leHQ7Zi5uZXh0PWd9ZC5iYXNlUXVldWU9ZT1mO2MucGVuZGluZz1udWxsfWlmKG51bGwhPT1lKXtlPWUubmV4dDtkPWQuYmFzZVN0YXRlO3ZhciBoPWc9Zj1udWxsLGs9ZTtkb3t2YXIgbD1rLmxhbmU7aWYoKHhoJmwpPT09bCludWxsIT09aCYmKGg9aC5uZXh0PXtsYW5lOjAsYWN0aW9uOmsuYWN0aW9uLGVhZ2VyUmVkdWNlcjprLmVhZ2VyUmVkdWNlcixlYWdlclN0YXRlOmsuZWFnZXJTdGF0ZSxuZXh0Om51bGx9KSxkPWsuZWFnZXJSZWR1Y2VyPT09YT9rLmVhZ2VyU3RhdGU6YShkLGsuYWN0aW9uKTtlbHNle3ZhciBuPXtsYW5lOmwsYWN0aW9uOmsuYWN0aW9uLGVhZ2VyUmVkdWNlcjprLmVhZ2VyUmVkdWNlcixcbmVhZ2VyU3RhdGU6ay5lYWdlclN0YXRlLG5leHQ6bnVsbH07bnVsbD09PWg/KGc9aD1uLGY9ZCk6aD1oLm5leHQ9bjtSLmxhbmVzfD1sO0RnfD1sfWs9ay5uZXh0fXdoaWxlKG51bGwhPT1rJiZrIT09ZSk7bnVsbD09PWg/Zj1kOmgubmV4dD1nO0hlKGQsYi5tZW1vaXplZFN0YXRlKXx8KHVnPSEwKTtiLm1lbW9pemVkU3RhdGU9ZDtiLmJhc2VTdGF0ZT1mO2IuYmFzZVF1ZXVlPWg7Yy5sYXN0UmVuZGVyZWRTdGF0ZT1kfXJldHVybltiLm1lbW9pemVkU3RhdGUsYy5kaXNwYXRjaF19XG5mdW5jdGlvbiBMaChhKXt2YXIgYj1JaCgpLGM9Yi5xdWV1ZTtpZihudWxsPT09Yyl0aHJvdyBFcnJvcih5KDMxMSkpO2MubGFzdFJlbmRlcmVkUmVkdWNlcj1hO3ZhciBkPWMuZGlzcGF0Y2gsZT1jLnBlbmRpbmcsZj1iLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWUpe2MucGVuZGluZz1udWxsO3ZhciBnPWU9ZS5uZXh0O2RvIGY9YShmLGcuYWN0aW9uKSxnPWcubmV4dDt3aGlsZShnIT09ZSk7SGUoZixiLm1lbW9pemVkU3RhdGUpfHwodWc9ITApO2IubWVtb2l6ZWRTdGF0ZT1mO251bGw9PT1iLmJhc2VRdWV1ZSYmKGIuYmFzZVN0YXRlPWYpO2MubGFzdFJlbmRlcmVkU3RhdGU9Zn1yZXR1cm5bZixkXX1cbmZ1bmN0aW9uIE1oKGEsYixjKXt2YXIgZD1iLl9nZXRWZXJzaW9uO2Q9ZChiLl9zb3VyY2UpO3ZhciBlPWIuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk7aWYobnVsbCE9PWUpYT1lPT09ZDtlbHNlIGlmKGE9YS5tdXRhYmxlUmVhZExhbmVzLGE9KHhoJmEpPT09YSliLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PWQsdGgucHVzaChiKTtpZihhKXJldHVybiBjKGIuX3NvdXJjZSk7dGgucHVzaChiKTt0aHJvdyBFcnJvcih5KDM1MCkpO31cbmZ1bmN0aW9uIE5oKGEsYixjLGQpe3ZhciBlPVU7aWYobnVsbD09PWUpdGhyb3cgRXJyb3IoeSgzNDkpKTt2YXIgZj1iLl9nZXRWZXJzaW9uLGc9ZihiLl9zb3VyY2UpLGg9dmguY3VycmVudCxrPWgudXNlU3RhdGUoZnVuY3Rpb24oKXtyZXR1cm4gTWgoZSxiLGMpfSksbD1rWzFdLG49a1swXTtrPVQ7dmFyIEE9YS5tZW1vaXplZFN0YXRlLHA9QS5yZWZzLEM9cC5nZXRTbmFwc2hvdCx4PUEuc291cmNlO0E9QS5zdWJzY3JpYmU7dmFyIHc9UjthLm1lbW9pemVkU3RhdGU9e3JlZnM6cCxzb3VyY2U6YixzdWJzY3JpYmU6ZH07aC51c2VFZmZlY3QoZnVuY3Rpb24oKXtwLmdldFNuYXBzaG90PWM7cC5zZXRTbmFwc2hvdD1sO3ZhciBhPWYoYi5fc291cmNlKTtpZighSGUoZyxhKSl7YT1jKGIuX3NvdXJjZSk7SGUobixhKXx8KGwoYSksYT1JZyh3KSxlLm11dGFibGVSZWFkTGFuZXN8PWEmZS5wZW5kaW5nTGFuZXMpO2E9ZS5tdXRhYmxlUmVhZExhbmVzO2UuZW50YW5nbGVkTGFuZXN8PWE7Zm9yKHZhciBkPVxuZS5lbnRhbmdsZW1lbnRzLGg9YTswPGg7KXt2YXIgaz0zMS1WYyhoKSx2PTE8PGs7ZFtrXXw9YTtoJj1+dn19fSxbYyxiLGRdKTtoLnVzZUVmZmVjdChmdW5jdGlvbigpe3JldHVybiBkKGIuX3NvdXJjZSxmdW5jdGlvbigpe3ZhciBhPXAuZ2V0U25hcHNob3QsYz1wLnNldFNuYXBzaG90O3RyeXtjKGEoYi5fc291cmNlKSk7dmFyIGQ9SWcodyk7ZS5tdXRhYmxlUmVhZExhbmVzfD1kJmUucGVuZGluZ0xhbmVzfWNhdGNoKHEpe2MoZnVuY3Rpb24oKXt0aHJvdyBxO30pfX0pfSxbYixkXSk7SGUoQyxjKSYmSGUoeCxiKSYmSGUoQSxkKXx8KGE9e3BlbmRpbmc6bnVsbCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6SmgsbGFzdFJlbmRlcmVkU3RhdGU6bn0sYS5kaXNwYXRjaD1sPU9oLmJpbmQobnVsbCxSLGEpLGsucXVldWU9YSxrLmJhc2VRdWV1ZT1udWxsLG49TWgoZSxiLGMpLGsubWVtb2l6ZWRTdGF0ZT1rLmJhc2VTdGF0ZT1uKTtyZXR1cm4gbn1cbmZ1bmN0aW9uIFBoKGEsYixjKXt2YXIgZD1JaCgpO3JldHVybiBOaChkLGEsYixjKX1mdW5jdGlvbiBRaChhKXt2YXIgYj1IaCgpO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBhJiYoYT1hKCkpO2IubWVtb2l6ZWRTdGF0ZT1iLmJhc2VTdGF0ZT1hO2E9Yi5xdWV1ZT17cGVuZGluZzpudWxsLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpKaCxsYXN0UmVuZGVyZWRTdGF0ZTphfTthPWEuZGlzcGF0Y2g9T2guYmluZChudWxsLFIsYSk7cmV0dXJuW2IubWVtb2l6ZWRTdGF0ZSxhXX1cbmZ1bmN0aW9uIFJoKGEsYixjLGQpe2E9e3RhZzphLGNyZWF0ZTpiLGRlc3Ryb3k6YyxkZXBzOmQsbmV4dDpudWxsfTtiPVIudXBkYXRlUXVldWU7bnVsbD09PWI/KGI9e2xhc3RFZmZlY3Q6bnVsbH0sUi51cGRhdGVRdWV1ZT1iLGIubGFzdEVmZmVjdD1hLm5leHQ9YSk6KGM9Yi5sYXN0RWZmZWN0LG51bGw9PT1jP2IubGFzdEVmZmVjdD1hLm5leHQ9YTooZD1jLm5leHQsYy5uZXh0PWEsYS5uZXh0PWQsYi5sYXN0RWZmZWN0PWEpKTtyZXR1cm4gYX1mdW5jdGlvbiBTaChhKXt2YXIgYj1IaCgpO2E9e2N1cnJlbnQ6YX07cmV0dXJuIGIubWVtb2l6ZWRTdGF0ZT1hfWZ1bmN0aW9uIFRoKCl7cmV0dXJuIEloKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBVaChhLGIsYyxkKXt2YXIgZT1IaCgpO1IuZmxhZ3N8PWE7ZS5tZW1vaXplZFN0YXRlPVJoKDF8YixjLHZvaWQgMCx2b2lkIDA9PT1kP251bGw6ZCl9XG5mdW5jdGlvbiBWaChhLGIsYyxkKXt2YXIgZT1JaCgpO2Q9dm9pZCAwPT09ZD9udWxsOmQ7dmFyIGY9dm9pZCAwO2lmKG51bGwhPT1TKXt2YXIgZz1TLm1lbW9pemVkU3RhdGU7Zj1nLmRlc3Ryb3k7aWYobnVsbCE9PWQmJkJoKGQsZy5kZXBzKSl7UmgoYixjLGYsZCk7cmV0dXJufX1SLmZsYWdzfD1hO2UubWVtb2l6ZWRTdGF0ZT1SaCgxfGIsYyxmLGQpfWZ1bmN0aW9uIFdoKGEsYil7cmV0dXJuIFVoKDUxNiw0LGEsYil9ZnVuY3Rpb24gWGgoYSxiKXtyZXR1cm4gVmgoNTE2LDQsYSxiKX1mdW5jdGlvbiBZaChhLGIpe3JldHVybiBWaCg0LDIsYSxiKX1mdW5jdGlvbiBaaChhLGIpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBiKXJldHVybiBhPWEoKSxiKGEpLGZ1bmN0aW9uKCl7YihudWxsKX07aWYobnVsbCE9PWImJnZvaWQgMCE9PWIpcmV0dXJuIGE9YSgpLGIuY3VycmVudD1hLGZ1bmN0aW9uKCl7Yi5jdXJyZW50PW51bGx9fVxuZnVuY3Rpb24gJGgoYSxiLGMpe2M9bnVsbCE9PWMmJnZvaWQgMCE9PWM/Yy5jb25jYXQoW2FdKTpudWxsO3JldHVybiBWaCg0LDIsWmguYmluZChudWxsLGIsYSksYyl9ZnVuY3Rpb24gYWkoKXt9ZnVuY3Rpb24gYmkoYSxiKXt2YXIgYz1JaCgpO2I9dm9pZCAwPT09Yj9udWxsOmI7dmFyIGQ9Yy5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1kJiZudWxsIT09YiYmQmgoYixkWzFdKSlyZXR1cm4gZFswXTtjLm1lbW9pemVkU3RhdGU9W2EsYl07cmV0dXJuIGF9ZnVuY3Rpb24gY2koYSxiKXt2YXIgYz1JaCgpO2I9dm9pZCAwPT09Yj9udWxsOmI7dmFyIGQ9Yy5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1kJiZudWxsIT09YiYmQmgoYixkWzFdKSlyZXR1cm4gZFswXTthPWEoKTtjLm1lbW9pemVkU3RhdGU9W2EsYl07cmV0dXJuIGF9XG5mdW5jdGlvbiBkaShhLGIpe3ZhciBjPWVnKCk7Z2coOTg+Yz85ODpjLGZ1bmN0aW9uKCl7YSghMCl9KTtnZyg5NzxjPzk3OmMsZnVuY3Rpb24oKXt2YXIgYz13aC50cmFuc2l0aW9uO3doLnRyYW5zaXRpb249MTt0cnl7YSghMSksYigpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1jfX0pfVxuZnVuY3Rpb24gT2goYSxiLGMpe3ZhciBkPUhnKCksZT1JZyhhKSxmPXtsYW5lOmUsYWN0aW9uOmMsZWFnZXJSZWR1Y2VyOm51bGwsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sZz1iLnBlbmRpbmc7bnVsbD09PWc/Zi5uZXh0PWY6KGYubmV4dD1nLm5leHQsZy5uZXh0PWYpO2IucGVuZGluZz1mO2c9YS5hbHRlcm5hdGU7aWYoYT09PVJ8fG51bGwhPT1nJiZnPT09Uil6aD15aD0hMDtlbHNle2lmKDA9PT1hLmxhbmVzJiYobnVsbD09PWd8fDA9PT1nLmxhbmVzKSYmKGc9Yi5sYXN0UmVuZGVyZWRSZWR1Y2VyLG51bGwhPT1nKSl0cnl7dmFyIGg9Yi5sYXN0UmVuZGVyZWRTdGF0ZSxrPWcoaCxjKTtmLmVhZ2VyUmVkdWNlcj1nO2YuZWFnZXJTdGF0ZT1rO2lmKEhlKGssaCkpcmV0dXJufWNhdGNoKGwpe31maW5hbGx5e31KZyhhLGUsZCl9fVxudmFyIEdoPXtyZWFkQ29udGV4dDp2Zyx1c2VDYWxsYmFjazpBaCx1c2VDb250ZXh0OkFoLHVzZUVmZmVjdDpBaCx1c2VJbXBlcmF0aXZlSGFuZGxlOkFoLHVzZUxheW91dEVmZmVjdDpBaCx1c2VNZW1vOkFoLHVzZVJlZHVjZXI6QWgsdXNlUmVmOkFoLHVzZVN0YXRlOkFoLHVzZURlYnVnVmFsdWU6QWgsdXNlRGVmZXJyZWRWYWx1ZTpBaCx1c2VUcmFuc2l0aW9uOkFoLHVzZU11dGFibGVTb3VyY2U6QWgsdXNlT3BhcXVlSWRlbnRpZmllcjpBaCx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LERoPXtyZWFkQ29udGV4dDp2Zyx1c2VDYWxsYmFjazpmdW5jdGlvbihhLGIpe0hoKCkubWVtb2l6ZWRTdGF0ZT1bYSx2b2lkIDA9PT1iP251bGw6Yl07cmV0dXJuIGF9LHVzZUNvbnRleHQ6dmcsdXNlRWZmZWN0OldoLHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oYSxiLGMpe2M9bnVsbCE9PWMmJnZvaWQgMCE9PWM/Yy5jb25jYXQoW2FdKTpudWxsO3JldHVybiBVaCg0LDIsWmguYmluZChudWxsLFxuYixhKSxjKX0sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIFVoKDQsMixhLGIpfSx1c2VNZW1vOmZ1bmN0aW9uKGEsYil7dmFyIGM9SGgoKTtiPXZvaWQgMD09PWI/bnVsbDpiO2E9YSgpO2MubWVtb2l6ZWRTdGF0ZT1bYSxiXTtyZXR1cm4gYX0sdXNlUmVkdWNlcjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9SGgoKTtiPXZvaWQgMCE9PWM/YyhiKTpiO2QubWVtb2l6ZWRTdGF0ZT1kLmJhc2VTdGF0ZT1iO2E9ZC5xdWV1ZT17cGVuZGluZzpudWxsLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphLGxhc3RSZW5kZXJlZFN0YXRlOmJ9O2E9YS5kaXNwYXRjaD1PaC5iaW5kKG51bGwsUixhKTtyZXR1cm5bZC5tZW1vaXplZFN0YXRlLGFdfSx1c2VSZWY6U2gsdXNlU3RhdGU6UWgsdXNlRGVidWdWYWx1ZTphaSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPVFoKGEpLGM9YlswXSxkPWJbMV07V2goZnVuY3Rpb24oKXt2YXIgYj13aC50cmFuc2l0aW9uO1xud2gudHJhbnNpdGlvbj0xO3RyeXtkKGEpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1ifX0sW2FdKTtyZXR1cm4gY30sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPVFoKCExKSxiPWFbMF07YT1kaS5iaW5kKG51bGwsYVsxXSk7U2goYSk7cmV0dXJuW2EsYl19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUhoKCk7ZC5tZW1vaXplZFN0YXRlPXtyZWZzOntnZXRTbmFwc2hvdDpiLHNldFNuYXBzaG90Om51bGx9LHNvdXJjZTphLHN1YnNjcmliZTpjfTtyZXR1cm4gTmgoZCxhLGIsYyl9LHVzZU9wYXF1ZUlkZW50aWZpZXI6ZnVuY3Rpb24oKXtpZihsaCl7dmFyIGE9ITEsYj11ZihmdW5jdGlvbigpe2F8fChhPSEwLGMoXCJyOlwiKyh0ZisrKS50b1N0cmluZygzNikpKTt0aHJvdyBFcnJvcih5KDM1NSkpO30pLGM9UWgoYilbMV07MD09PShSLm1vZGUmMikmJihSLmZsYWdzfD01MTYsUmgoNSxmdW5jdGlvbigpe2MoXCJyOlwiKyh0ZisrKS50b1N0cmluZygzNikpfSxcbnZvaWQgMCxudWxsKSk7cmV0dXJuIGJ9Yj1cInI6XCIrKHRmKyspLnRvU3RyaW5nKDM2KTtRaChiKTtyZXR1cm4gYn0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxFaD17cmVhZENvbnRleHQ6dmcsdXNlQ2FsbGJhY2s6YmksdXNlQ29udGV4dDp2Zyx1c2VFZmZlY3Q6WGgsdXNlSW1wZXJhdGl2ZUhhbmRsZTokaCx1c2VMYXlvdXRFZmZlY3Q6WWgsdXNlTWVtbzpjaSx1c2VSZWR1Y2VyOktoLHVzZVJlZjpUaCx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBLaChKaCl9LHVzZURlYnVnVmFsdWU6YWksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihhKXt2YXIgYj1LaChKaCksYz1iWzBdLGQ9YlsxXTtYaChmdW5jdGlvbigpe3ZhciBiPXdoLnRyYW5zaXRpb247d2gudHJhbnNpdGlvbj0xO3RyeXtkKGEpfWZpbmFsbHl7d2gudHJhbnNpdGlvbj1ifX0sW2FdKTtyZXR1cm4gY30sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBhPUtoKEpoKVswXTtyZXR1cm5bVGgoKS5jdXJyZW50LFxuYV19LHVzZU11dGFibGVTb3VyY2U6UGgsdXNlT3BhcXVlSWRlbnRpZmllcjpmdW5jdGlvbigpe3JldHVybiBLaChKaClbMF19LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sRmg9e3JlYWRDb250ZXh0OnZnLHVzZUNhbGxiYWNrOmJpLHVzZUNvbnRleHQ6dmcsdXNlRWZmZWN0OlhoLHVzZUltcGVyYXRpdmVIYW5kbGU6JGgsdXNlTGF5b3V0RWZmZWN0OlloLHVzZU1lbW86Y2ksdXNlUmVkdWNlcjpMaCx1c2VSZWY6VGgsdXNlU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gTGgoSmgpfSx1c2VEZWJ1Z1ZhbHVlOmFpLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9TGgoSmgpLGM9YlswXSxkPWJbMV07WGgoZnVuY3Rpb24oKXt2YXIgYj13aC50cmFuc2l0aW9uO3doLnRyYW5zaXRpb249MTt0cnl7ZChhKX1maW5hbGx5e3doLnRyYW5zaXRpb249Yn19LFthXSk7cmV0dXJuIGN9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgYT1MaChKaClbMF07cmV0dXJuW1RoKCkuY3VycmVudCxcbmFdfSx1c2VNdXRhYmxlU291cmNlOlBoLHVzZU9wYXF1ZUlkZW50aWZpZXI6ZnVuY3Rpb24oKXtyZXR1cm4gTGgoSmgpWzBdfSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LGVpPXJhLlJlYWN0Q3VycmVudE93bmVyLHVnPSExO2Z1bmN0aW9uIGZpKGEsYixjLGQpe2IuY2hpbGQ9bnVsbD09PWE/WmcoYixudWxsLGMsZCk6WWcoYixhLmNoaWxkLGMsZCl9ZnVuY3Rpb24gZ2koYSxiLGMsZCxlKXtjPWMucmVuZGVyO3ZhciBmPWIucmVmO3RnKGIsZSk7ZD1DaChhLGIsYyxkLGYsZSk7aWYobnVsbCE9PWEmJiF1ZylyZXR1cm4gYi51cGRhdGVRdWV1ZT1hLnVwZGF0ZVF1ZXVlLGIuZmxhZ3MmPS01MTcsYS5sYW5lcyY9fmUsaGkoYSxiLGUpO2IuZmxhZ3N8PTE7ZmkoYSxiLGQsZSk7cmV0dXJuIGIuY2hpbGR9XG5mdW5jdGlvbiBpaShhLGIsYyxkLGUsZil7aWYobnVsbD09PWEpe3ZhciBnPWMudHlwZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZyYmIWppKGcpJiZ2b2lkIDA9PT1nLmRlZmF1bHRQcm9wcyYmbnVsbD09PWMuY29tcGFyZSYmdm9pZCAwPT09Yy5kZWZhdWx0UHJvcHMpcmV0dXJuIGIudGFnPTE1LGIudHlwZT1nLGtpKGEsYixnLGQsZSxmKTthPVZnKGMudHlwZSxudWxsLGQsYixiLm1vZGUsZik7YS5yZWY9Yi5yZWY7YS5yZXR1cm49YjtyZXR1cm4gYi5jaGlsZD1hfWc9YS5jaGlsZDtpZigwPT09KGUmZikmJihlPWcubWVtb2l6ZWRQcm9wcyxjPWMuY29tcGFyZSxjPW51bGwhPT1jP2M6SmUsYyhlLGQpJiZhLnJlZj09PWIucmVmKSlyZXR1cm4gaGkoYSxiLGYpO2IuZmxhZ3N8PTE7YT1UZyhnLGQpO2EucmVmPWIucmVmO2EucmV0dXJuPWI7cmV0dXJuIGIuY2hpbGQ9YX1cbmZ1bmN0aW9uIGtpKGEsYixjLGQsZSxmKXtpZihudWxsIT09YSYmSmUoYS5tZW1vaXplZFByb3BzLGQpJiZhLnJlZj09PWIucmVmKWlmKHVnPSExLDAhPT0oZiZlKSkwIT09KGEuZmxhZ3MmMTYzODQpJiYodWc9ITApO2Vsc2UgcmV0dXJuIGIubGFuZXM9YS5sYW5lcyxoaShhLGIsZik7cmV0dXJuIGxpKGEsYixjLGQsZil9XG5mdW5jdGlvbiBtaShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1kLmNoaWxkcmVuLGY9bnVsbCE9PWE/YS5tZW1vaXplZFN0YXRlOm51bGw7aWYoXCJoaWRkZW5cIj09PWQubW9kZXx8XCJ1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZ1wiPT09ZC5tb2RlKWlmKDA9PT0oYi5tb2RlJjQpKWIubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjB9LG5pKGIsYyk7ZWxzZSBpZigwIT09KGMmMTA3Mzc0MTgyNCkpYi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MH0sbmkoYixudWxsIT09Zj9mLmJhc2VMYW5lczpjKTtlbHNlIHJldHVybiBhPW51bGwhPT1mP2YuYmFzZUxhbmVzfGM6YyxiLmxhbmVzPWIuY2hpbGRMYW5lcz0xMDczNzQxODI0LGIubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOmF9LG5pKGIsYSksbnVsbDtlbHNlIG51bGwhPT1mPyhkPWYuYmFzZUxhbmVzfGMsYi5tZW1vaXplZFN0YXRlPW51bGwpOmQ9YyxuaShiLGQpO2ZpKGEsYixlLGMpO3JldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gb2koYSxiKXt2YXIgYz1iLnJlZjtpZihudWxsPT09YSYmbnVsbCE9PWN8fG51bGwhPT1hJiZhLnJlZiE9PWMpYi5mbGFnc3w9MTI4fWZ1bmN0aW9uIGxpKGEsYixjLGQsZSl7dmFyIGY9RmYoYyk/RGY6TS5jdXJyZW50O2Y9RWYoYixmKTt0ZyhiLGUpO2M9Q2goYSxiLGMsZCxmLGUpO2lmKG51bGwhPT1hJiYhdWcpcmV0dXJuIGIudXBkYXRlUXVldWU9YS51cGRhdGVRdWV1ZSxiLmZsYWdzJj0tNTE3LGEubGFuZXMmPX5lLGhpKGEsYixlKTtiLmZsYWdzfD0xO2ZpKGEsYixjLGUpO3JldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gcGkoYSxiLGMsZCxlKXtpZihGZihjKSl7dmFyIGY9ITA7SmYoYil9ZWxzZSBmPSExO3RnKGIsZSk7aWYobnVsbD09PWIuc3RhdGVOb2RlKW51bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZmxhZ3N8PTIpLE1nKGIsYyxkKSxPZyhiLGMsZCxlKSxkPSEwO2Vsc2UgaWYobnVsbD09PWEpe3ZhciBnPWIuc3RhdGVOb2RlLGg9Yi5tZW1vaXplZFByb3BzO2cucHJvcHM9aDt2YXIgaz1nLmNvbnRleHQsbD1jLmNvbnRleHRUeXBlO1wib2JqZWN0XCI9PT10eXBlb2YgbCYmbnVsbCE9PWw/bD12ZyhsKToobD1GZihjKT9EZjpNLmN1cnJlbnQsbD1FZihiLGwpKTt2YXIgbj1jLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxBPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBufHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtBfHxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmXG5cImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwoaCE9PWR8fGshPT1sKSYmTmcoYixnLGQsbCk7d2c9ITE7dmFyIHA9Yi5tZW1vaXplZFN0YXRlO2cuc3RhdGU9cDtDZyhiLGQsZyxlKTtrPWIubWVtb2l6ZWRTdGF0ZTtoIT09ZHx8cCE9PWt8fE4uY3VycmVudHx8d2c/KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBuJiYoR2coYixjLG4sZCksaz1iLm1lbW9pemVkU3RhdGUpLChoPXdnfHxMZyhiLGMsaCxkLHAsayxsKSk/KEF8fFwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxNb3VudHx8KFwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxNb3VudCYmZy5jb21wb25lbnRXaWxsTW91bnQoKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZnLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksXCJmdW5jdGlvblwiPT09XG50eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZmxhZ3N8PTQpKTooXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuY29tcG9uZW50RGlkTW91bnQmJihiLmZsYWdzfD00KSxiLm1lbW9pemVkUHJvcHM9ZCxiLm1lbW9pemVkU3RhdGU9ayksZy5wcm9wcz1kLGcuc3RhdGU9ayxnLmNvbnRleHQ9bCxkPWgpOihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRNb3VudCYmKGIuZmxhZ3N8PTQpLGQ9ITEpfWVsc2V7Zz1iLnN0YXRlTm9kZTt5ZyhhLGIpO2g9Yi5tZW1vaXplZFByb3BzO2w9Yi50eXBlPT09Yi5lbGVtZW50VHlwZT9oOmxnKGIudHlwZSxoKTtnLnByb3BzPWw7QT1iLnBlbmRpbmdQcm9wcztwPWcuY29udGV4dDtrPWMuY29udGV4dFR5cGU7XCJvYmplY3RcIj09PXR5cGVvZiBrJiZudWxsIT09az9rPXZnKGspOihrPUZmKGMpP0RmOk0uY3VycmVudCxrPUVmKGIsaykpO3ZhciBDPWMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyhuPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBDfHxcblwiZnVuY3Rpb25cIj09PXR5cGVvZiBnLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKXx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChoIT09QXx8cCE9PWspJiZOZyhiLGcsZCxrKTt3Zz0hMTtwPWIubWVtb2l6ZWRTdGF0ZTtnLnN0YXRlPXA7Q2coYixkLGcsZSk7dmFyIHg9Yi5tZW1vaXplZFN0YXRlO2ghPT1BfHxwIT09eHx8Ti5jdXJyZW50fHx3Zz8oXCJmdW5jdGlvblwiPT09dHlwZW9mIEMmJihHZyhiLGMsQyxkKSx4PWIubWVtb2l6ZWRTdGF0ZSksKGw9d2d8fExnKGIsYyxsLGQscCx4LGspKT8obnx8XCJmdW5jdGlvblwiIT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBnLmNvbXBvbmVudFdpbGxVcGRhdGV8fChcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnRXaWxsVXBkYXRlJiZnLmNvbXBvbmVudFdpbGxVcGRhdGUoZCxcbngsayksXCJmdW5jdGlvblwiPT09dHlwZW9mIGcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJmcuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUoZCx4LGspKSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGUmJihiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSYmKGIuZmxhZ3N8PTI1NikpOihcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5jb21wb25lbnREaWRVcGRhdGV8fGg9PT1hLm1lbW9pemVkUHJvcHMmJnA9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTI1NiksYi5tZW1vaXplZFByb3BzPWQsYi5tZW1vaXplZFN0YXRlPXgpLGcucHJvcHM9ZCxnLnN0YXRlPXgsZy5jb250ZXh0PWssZD1sKTooXCJmdW5jdGlvblwiIT09dHlwZW9mIGcuY29tcG9uZW50RGlkVXBkYXRlfHxcbmg9PT1hLm1lbW9pemVkUHJvcHMmJnA9PT1hLm1lbW9pemVkU3RhdGV8fChiLmZsYWdzfD00KSxcImZ1bmN0aW9uXCIhPT10eXBlb2YgZy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aD09PWEubWVtb2l6ZWRQcm9wcyYmcD09PWEubWVtb2l6ZWRTdGF0ZXx8KGIuZmxhZ3N8PTI1NiksZD0hMSl9cmV0dXJuIHFpKGEsYixjLGQsZixlKX1cbmZ1bmN0aW9uIHFpKGEsYixjLGQsZSxmKXtvaShhLGIpO3ZhciBnPTAhPT0oYi5mbGFncyY2NCk7aWYoIWQmJiFnKXJldHVybiBlJiZLZihiLGMsITEpLGhpKGEsYixmKTtkPWIuc3RhdGVOb2RlO2VpLmN1cnJlbnQ9Yjt2YXIgaD1nJiZcImZ1bmN0aW9uXCIhPT10eXBlb2YgYy5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I/bnVsbDpkLnJlbmRlcigpO2IuZmxhZ3N8PTE7bnVsbCE9PWEmJmc/KGIuY2hpbGQ9WWcoYixhLmNoaWxkLG51bGwsZiksYi5jaGlsZD1ZZyhiLG51bGwsaCxmKSk6ZmkoYSxiLGgsZik7Yi5tZW1vaXplZFN0YXRlPWQuc3RhdGU7ZSYmS2YoYixjLCEwKTtyZXR1cm4gYi5jaGlsZH1mdW5jdGlvbiByaShhKXt2YXIgYj1hLnN0YXRlTm9kZTtiLnBlbmRpbmdDb250ZXh0P0hmKGEsYi5wZW5kaW5nQ29udGV4dCxiLnBlbmRpbmdDb250ZXh0IT09Yi5jb250ZXh0KTpiLmNvbnRleHQmJkhmKGEsYi5jb250ZXh0LCExKTtlaChhLGIuY29udGFpbmVySW5mbyl9XG52YXIgc2k9e2RlaHlkcmF0ZWQ6bnVsbCxyZXRyeUxhbmU6MH07XG5mdW5jdGlvbiB0aShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1QLmN1cnJlbnQsZj0hMSxnOyhnPTAhPT0oYi5mbGFncyY2NCkpfHwoZz1udWxsIT09YSYmbnVsbD09PWEubWVtb2l6ZWRTdGF0ZT8hMTowIT09KGUmMikpO2c/KGY9ITAsYi5mbGFncyY9LTY1KTpudWxsIT09YSYmbnVsbD09PWEubWVtb2l6ZWRTdGF0ZXx8dm9pZCAwPT09ZC5mYWxsYmFja3x8ITA9PT1kLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrfHwoZXw9MSk7SShQLGUmMSk7aWYobnVsbD09PWEpe3ZvaWQgMCE9PWQuZmFsbGJhY2smJnBoKGIpO2E9ZC5jaGlsZHJlbjtlPWQuZmFsbGJhY2s7aWYoZilyZXR1cm4gYT11aShiLGEsZSxjKSxiLmNoaWxkLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczpjfSxiLm1lbW9pemVkU3RhdGU9c2ksYTtpZihcIm51bWJlclwiPT09dHlwZW9mIGQudW5zdGFibGVfZXhwZWN0ZWRMb2FkVGltZSlyZXR1cm4gYT11aShiLGEsZSxjKSxiLmNoaWxkLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczpjfSxcbmIubWVtb2l6ZWRTdGF0ZT1zaSxiLmxhbmVzPTMzNTU0NDMyLGE7Yz12aSh7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjphfSxiLm1vZGUsYyxudWxsKTtjLnJldHVybj1iO3JldHVybiBiLmNoaWxkPWN9aWYobnVsbCE9PWEubWVtb2l6ZWRTdGF0ZSl7aWYoZilyZXR1cm4gZD13aShhLGIsZC5jaGlsZHJlbixkLmZhbGxiYWNrLGMpLGY9Yi5jaGlsZCxlPWEuY2hpbGQubWVtb2l6ZWRTdGF0ZSxmLm1lbW9pemVkU3RhdGU9bnVsbD09PWU/e2Jhc2VMYW5lczpjfTp7YmFzZUxhbmVzOmUuYmFzZUxhbmVzfGN9LGYuY2hpbGRMYW5lcz1hLmNoaWxkTGFuZXMmfmMsYi5tZW1vaXplZFN0YXRlPXNpLGQ7Yz14aShhLGIsZC5jaGlsZHJlbixjKTtiLm1lbW9pemVkU3RhdGU9bnVsbDtyZXR1cm4gY31pZihmKXJldHVybiBkPXdpKGEsYixkLmNoaWxkcmVuLGQuZmFsbGJhY2ssYyksZj1iLmNoaWxkLGU9YS5jaGlsZC5tZW1vaXplZFN0YXRlLGYubWVtb2l6ZWRTdGF0ZT1udWxsPT09ZT97YmFzZUxhbmVzOmN9Olxue2Jhc2VMYW5lczplLmJhc2VMYW5lc3xjfSxmLmNoaWxkTGFuZXM9YS5jaGlsZExhbmVzJn5jLGIubWVtb2l6ZWRTdGF0ZT1zaSxkO2M9eGkoYSxiLGQuY2hpbGRyZW4sYyk7Yi5tZW1vaXplZFN0YXRlPW51bGw7cmV0dXJuIGN9ZnVuY3Rpb24gdWkoYSxiLGMsZCl7dmFyIGU9YS5tb2RlLGY9YS5jaGlsZDtiPXttb2RlOlwiaGlkZGVuXCIsY2hpbGRyZW46Yn07MD09PShlJjIpJiZudWxsIT09Zj8oZi5jaGlsZExhbmVzPTAsZi5wZW5kaW5nUHJvcHM9Yik6Zj12aShiLGUsMCxudWxsKTtjPVhnKGMsZSxkLG51bGwpO2YucmV0dXJuPWE7Yy5yZXR1cm49YTtmLnNpYmxpbmc9YzthLmNoaWxkPWY7cmV0dXJuIGN9XG5mdW5jdGlvbiB4aShhLGIsYyxkKXt2YXIgZT1hLmNoaWxkO2E9ZS5zaWJsaW5nO2M9VGcoZSx7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjpjfSk7MD09PShiLm1vZGUmMikmJihjLmxhbmVzPWQpO2MucmV0dXJuPWI7Yy5zaWJsaW5nPW51bGw7bnVsbCE9PWEmJihhLm5leHRFZmZlY3Q9bnVsbCxhLmZsYWdzPTgsYi5maXJzdEVmZmVjdD1iLmxhc3RFZmZlY3Q9YSk7cmV0dXJuIGIuY2hpbGQ9Y31cbmZ1bmN0aW9uIHdpKGEsYixjLGQsZSl7dmFyIGY9Yi5tb2RlLGc9YS5jaGlsZDthPWcuc2libGluZzt2YXIgaD17bW9kZTpcImhpZGRlblwiLGNoaWxkcmVuOmN9OzA9PT0oZiYyKSYmYi5jaGlsZCE9PWc/KGM9Yi5jaGlsZCxjLmNoaWxkTGFuZXM9MCxjLnBlbmRpbmdQcm9wcz1oLGc9Yy5sYXN0RWZmZWN0LG51bGwhPT1nPyhiLmZpcnN0RWZmZWN0PWMuZmlyc3RFZmZlY3QsYi5sYXN0RWZmZWN0PWcsZy5uZXh0RWZmZWN0PW51bGwpOmIuZmlyc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0PW51bGwpOmM9VGcoZyxoKTtudWxsIT09YT9kPVRnKGEsZCk6KGQ9WGcoZCxmLGUsbnVsbCksZC5mbGFnc3w9Mik7ZC5yZXR1cm49YjtjLnJldHVybj1iO2Muc2libGluZz1kO2IuY2hpbGQ9YztyZXR1cm4gZH1mdW5jdGlvbiB5aShhLGIpe2EubGFuZXN8PWI7dmFyIGM9YS5hbHRlcm5hdGU7bnVsbCE9PWMmJihjLmxhbmVzfD1iKTtzZyhhLnJldHVybixiKX1cbmZ1bmN0aW9uIHppKGEsYixjLGQsZSxmKXt2YXIgZz1hLm1lbW9pemVkU3RhdGU7bnVsbD09PWc/YS5tZW1vaXplZFN0YXRlPXtpc0JhY2t3YXJkczpiLHJlbmRlcmluZzpudWxsLHJlbmRlcmluZ1N0YXJ0VGltZTowLGxhc3Q6ZCx0YWlsOmMsdGFpbE1vZGU6ZSxsYXN0RWZmZWN0OmZ9OihnLmlzQmFja3dhcmRzPWIsZy5yZW5kZXJpbmc9bnVsbCxnLnJlbmRlcmluZ1N0YXJ0VGltZT0wLGcubGFzdD1kLGcudGFpbD1jLGcudGFpbE1vZGU9ZSxnLmxhc3RFZmZlY3Q9Zil9XG5mdW5jdGlvbiBBaShhLGIsYyl7dmFyIGQ9Yi5wZW5kaW5nUHJvcHMsZT1kLnJldmVhbE9yZGVyLGY9ZC50YWlsO2ZpKGEsYixkLmNoaWxkcmVuLGMpO2Q9UC5jdXJyZW50O2lmKDAhPT0oZCYyKSlkPWQmMXwyLGIuZmxhZ3N8PTY0O2Vsc2V7aWYobnVsbCE9PWEmJjAhPT0oYS5mbGFncyY2NCkpYTpmb3IoYT1iLmNoaWxkO251bGwhPT1hOyl7aWYoMTM9PT1hLnRhZyludWxsIT09YS5tZW1vaXplZFN0YXRlJiZ5aShhLGMpO2Vsc2UgaWYoMTk9PT1hLnRhZyl5aShhLGMpO2Vsc2UgaWYobnVsbCE9PWEuY2hpbGQpe2EuY2hpbGQucmV0dXJuPWE7YT1hLmNoaWxkO2NvbnRpbnVlfWlmKGE9PT1iKWJyZWFrIGE7Zm9yKDtudWxsPT09YS5zaWJsaW5nOyl7aWYobnVsbD09PWEucmV0dXJufHxhLnJldHVybj09PWIpYnJlYWsgYTthPWEucmV0dXJufWEuc2libGluZy5yZXR1cm49YS5yZXR1cm47YT1hLnNpYmxpbmd9ZCY9MX1JKFAsZCk7aWYoMD09PShiLm1vZGUmMikpYi5tZW1vaXplZFN0YXRlPVxubnVsbDtlbHNlIHN3aXRjaChlKXtjYXNlIFwiZm9yd2FyZHNcIjpjPWIuY2hpbGQ7Zm9yKGU9bnVsbDtudWxsIT09YzspYT1jLmFsdGVybmF0ZSxudWxsIT09YSYmbnVsbD09PWloKGEpJiYoZT1jKSxjPWMuc2libGluZztjPWU7bnVsbD09PWM/KGU9Yi5jaGlsZCxiLmNoaWxkPW51bGwpOihlPWMuc2libGluZyxjLnNpYmxpbmc9bnVsbCk7emkoYiwhMSxlLGMsZixiLmxhc3RFZmZlY3QpO2JyZWFrO2Nhc2UgXCJiYWNrd2FyZHNcIjpjPW51bGw7ZT1iLmNoaWxkO2ZvcihiLmNoaWxkPW51bGw7bnVsbCE9PWU7KXthPWUuYWx0ZXJuYXRlO2lmKG51bGwhPT1hJiZudWxsPT09aWgoYSkpe2IuY2hpbGQ9ZTticmVha31hPWUuc2libGluZztlLnNpYmxpbmc9YztjPWU7ZT1hfXppKGIsITAsYyxudWxsLGYsYi5sYXN0RWZmZWN0KTticmVhaztjYXNlIFwidG9nZXRoZXJcIjp6aShiLCExLG51bGwsbnVsbCx2b2lkIDAsYi5sYXN0RWZmZWN0KTticmVhaztkZWZhdWx0OmIubWVtb2l6ZWRTdGF0ZT1udWxsfXJldHVybiBiLmNoaWxkfVxuZnVuY3Rpb24gaGkoYSxiLGMpe251bGwhPT1hJiYoYi5kZXBlbmRlbmNpZXM9YS5kZXBlbmRlbmNpZXMpO0RnfD1iLmxhbmVzO2lmKDAhPT0oYyZiLmNoaWxkTGFuZXMpKXtpZihudWxsIT09YSYmYi5jaGlsZCE9PWEuY2hpbGQpdGhyb3cgRXJyb3IoeSgxNTMpKTtpZihudWxsIT09Yi5jaGlsZCl7YT1iLmNoaWxkO2M9VGcoYSxhLnBlbmRpbmdQcm9wcyk7Yi5jaGlsZD1jO2ZvcihjLnJldHVybj1iO251bGwhPT1hLnNpYmxpbmc7KWE9YS5zaWJsaW5nLGM9Yy5zaWJsaW5nPVRnKGEsYS5wZW5kaW5nUHJvcHMpLGMucmV0dXJuPWI7Yy5zaWJsaW5nPW51bGx9cmV0dXJuIGIuY2hpbGR9cmV0dXJuIG51bGx9dmFyIEJpLENpLERpLEVpO1xuQmk9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yi5jaGlsZDtudWxsIT09Yzspe2lmKDU9PT1jLnRhZ3x8Nj09PWMudGFnKWEuYXBwZW5kQ2hpbGQoYy5zdGF0ZU5vZGUpO2Vsc2UgaWYoNCE9PWMudGFnJiZudWxsIT09Yy5jaGlsZCl7Yy5jaGlsZC5yZXR1cm49YztjPWMuY2hpbGQ7Y29udGludWV9aWYoYz09PWIpYnJlYWs7Zm9yKDtudWxsPT09Yy5zaWJsaW5nOyl7aWYobnVsbD09PWMucmV0dXJufHxjLnJldHVybj09PWIpcmV0dXJuO2M9Yy5yZXR1cm59Yy5zaWJsaW5nLnJldHVybj1jLnJldHVybjtjPWMuc2libGluZ319O0NpPWZ1bmN0aW9uKCl7fTtcbkRpPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWEubWVtb2l6ZWRQcm9wcztpZihlIT09ZCl7YT1iLnN0YXRlTm9kZTtkaChhaC5jdXJyZW50KTt2YXIgZj1udWxsO3N3aXRjaChjKXtjYXNlIFwiaW5wdXRcIjplPVlhKGEsZSk7ZD1ZYShhLGQpO2Y9W107YnJlYWs7Y2FzZSBcIm9wdGlvblwiOmU9ZWIoYSxlKTtkPWViKGEsZCk7Zj1bXTticmVhaztjYXNlIFwic2VsZWN0XCI6ZT1tKHt9LGUse3ZhbHVlOnZvaWQgMH0pO2Q9bSh7fSxkLHt2YWx1ZTp2b2lkIDB9KTtmPVtdO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmU9Z2IoYSxlKTtkPWdiKGEsZCk7Zj1bXTticmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIiE9PXR5cGVvZiBlLm9uQ2xpY2smJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLm9uQ2xpY2smJihhLm9uY2xpY2s9amYpfXZiKGMsZCk7dmFyIGc7Yz1udWxsO2ZvcihsIGluIGUpaWYoIWQuaGFzT3duUHJvcGVydHkobCkmJmUuaGFzT3duUHJvcGVydHkobCkmJm51bGwhPWVbbF0paWYoXCJzdHlsZVwiPT09XG5sKXt2YXIgaD1lW2xdO2ZvcihnIGluIGgpaC5oYXNPd25Qcm9wZXJ0eShnKSYmKGN8fChjPXt9KSxjW2ddPVwiXCIpfWVsc2VcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCIhPT1sJiZcImNoaWxkcmVuXCIhPT1sJiZcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiIT09bCYmXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIiE9PWwmJlwiYXV0b0ZvY3VzXCIhPT1sJiYoY2EuaGFzT3duUHJvcGVydHkobCk/Znx8KGY9W10pOihmPWZ8fFtdKS5wdXNoKGwsbnVsbCkpO2ZvcihsIGluIGQpe3ZhciBrPWRbbF07aD1udWxsIT1lP2VbbF06dm9pZCAwO2lmKGQuaGFzT3duUHJvcGVydHkobCkmJmshPT1oJiYobnVsbCE9a3x8bnVsbCE9aCkpaWYoXCJzdHlsZVwiPT09bClpZihoKXtmb3IoZyBpbiBoKSFoLmhhc093blByb3BlcnR5KGcpfHxrJiZrLmhhc093blByb3BlcnR5KGcpfHwoY3x8KGM9e30pLGNbZ109XCJcIik7Zm9yKGcgaW4gaylrLmhhc093blByb3BlcnR5KGcpJiZoW2ddIT09a1tnXSYmKGN8fFxuKGM9e30pLGNbZ109a1tnXSl9ZWxzZSBjfHwoZnx8KGY9W10pLGYucHVzaChsLGMpKSxjPWs7ZWxzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09PWw/KGs9az9rLl9faHRtbDp2b2lkIDAsaD1oP2guX19odG1sOnZvaWQgMCxudWxsIT1rJiZoIT09ayYmKGY9Znx8W10pLnB1c2gobCxrKSk6XCJjaGlsZHJlblwiPT09bD9cInN0cmluZ1wiIT09dHlwZW9mIGsmJlwibnVtYmVyXCIhPT10eXBlb2Yga3x8KGY9Znx8W10pLnB1c2gobCxcIlwiK2spOlwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCIhPT1sJiZcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiIT09bCYmKGNhLmhhc093blByb3BlcnR5KGwpPyhudWxsIT1rJiZcIm9uU2Nyb2xsXCI9PT1sJiZHKFwic2Nyb2xsXCIsYSksZnx8aD09PWt8fChmPVtdKSk6XCJvYmplY3RcIj09PXR5cGVvZiBrJiZudWxsIT09ayYmay4kJHR5cGVvZj09PUdhP2sudG9TdHJpbmcoKTooZj1mfHxbXSkucHVzaChsLGspKX1jJiYoZj1mfHxbXSkucHVzaChcInN0eWxlXCIsXG5jKTt2YXIgbD1mO2lmKGIudXBkYXRlUXVldWU9bCliLmZsYWdzfD00fX07RWk9ZnVuY3Rpb24oYSxiLGMsZCl7YyE9PWQmJihiLmZsYWdzfD00KX07ZnVuY3Rpb24gRmkoYSxiKXtpZighbGgpc3dpdGNoKGEudGFpbE1vZGUpe2Nhc2UgXCJoaWRkZW5cIjpiPWEudGFpbDtmb3IodmFyIGM9bnVsbDtudWxsIT09YjspbnVsbCE9PWIuYWx0ZXJuYXRlJiYoYz1iKSxiPWIuc2libGluZztudWxsPT09Yz9hLnRhaWw9bnVsbDpjLnNpYmxpbmc9bnVsbDticmVhaztjYXNlIFwiY29sbGFwc2VkXCI6Yz1hLnRhaWw7Zm9yKHZhciBkPW51bGw7bnVsbCE9PWM7KW51bGwhPT1jLmFsdGVybmF0ZSYmKGQ9YyksYz1jLnNpYmxpbmc7bnVsbD09PWQ/Ynx8bnVsbD09PWEudGFpbD9hLnRhaWw9bnVsbDphLnRhaWwuc2libGluZz1udWxsOmQuc2libGluZz1udWxsfX1cbmZ1bmN0aW9uIEdpKGEsYixjKXt2YXIgZD1iLnBlbmRpbmdQcm9wcztzd2l0Y2goYi50YWcpe2Nhc2UgMjpjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gRmYoYi50eXBlKSYmR2YoKSxudWxsO2Nhc2UgMzpmaCgpO0goTik7SChNKTt1aCgpO2Q9Yi5zdGF0ZU5vZGU7ZC5wZW5kaW5nQ29udGV4dCYmKGQuY29udGV4dD1kLnBlbmRpbmdDb250ZXh0LGQucGVuZGluZ0NvbnRleHQ9bnVsbCk7aWYobnVsbD09PWF8fG51bGw9PT1hLmNoaWxkKXJoKGIpP2IuZmxhZ3N8PTQ6ZC5oeWRyYXRlfHwoYi5mbGFnc3w9MjU2KTtDaShiKTtyZXR1cm4gbnVsbDtjYXNlIDU6aGgoYik7dmFyIGU9ZGgoY2guY3VycmVudCk7Yz1iLnR5cGU7aWYobnVsbCE9PWEmJm51bGwhPWIuc3RhdGVOb2RlKURpKGEsYixjLGQsZSksYS5yZWYhPT1iLnJlZiYmKGIuZmxhZ3N8PTEyOCk7ZWxzZXtpZighZCl7aWYobnVsbD09PVxuYi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoeSgxNjYpKTtyZXR1cm4gbnVsbH1hPWRoKGFoLmN1cnJlbnQpO2lmKHJoKGIpKXtkPWIuc3RhdGVOb2RlO2M9Yi50eXBlO3ZhciBmPWIubWVtb2l6ZWRQcm9wcztkW3dmXT1iO2RbeGZdPWY7c3dpdGNoKGMpe2Nhc2UgXCJkaWFsb2dcIjpHKFwiY2FuY2VsXCIsZCk7RyhcImNsb3NlXCIsZCk7YnJlYWs7Y2FzZSBcImlmcmFtZVwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwiZW1iZWRcIjpHKFwibG9hZFwiLGQpO2JyZWFrO2Nhc2UgXCJ2aWRlb1wiOmNhc2UgXCJhdWRpb1wiOmZvcihhPTA7YTxYZS5sZW5ndGg7YSsrKUcoWGVbYV0sZCk7YnJlYWs7Y2FzZSBcInNvdXJjZVwiOkcoXCJlcnJvclwiLGQpO2JyZWFrO2Nhc2UgXCJpbWdcIjpjYXNlIFwiaW1hZ2VcIjpjYXNlIFwibGlua1wiOkcoXCJlcnJvclwiLGQpO0coXCJsb2FkXCIsZCk7YnJlYWs7Y2FzZSBcImRldGFpbHNcIjpHKFwidG9nZ2xlXCIsZCk7YnJlYWs7Y2FzZSBcImlucHV0XCI6WmEoZCxmKTtHKFwiaW52YWxpZFwiLGQpO2JyZWFrO2Nhc2UgXCJzZWxlY3RcIjpkLl93cmFwcGVyU3RhdGU9XG57d2FzTXVsdGlwbGU6ISFmLm11bHRpcGxlfTtHKFwiaW52YWxpZFwiLGQpO2JyZWFrO2Nhc2UgXCJ0ZXh0YXJlYVwiOmhiKGQsZiksRyhcImludmFsaWRcIixkKX12YihjLGYpO2E9bnVsbDtmb3IodmFyIGcgaW4gZilmLmhhc093blByb3BlcnR5KGcpJiYoZT1mW2ddLFwiY2hpbGRyZW5cIj09PWc/XCJzdHJpbmdcIj09PXR5cGVvZiBlP2QudGV4dENvbnRlbnQhPT1lJiYoYT1bXCJjaGlsZHJlblwiLGVdKTpcIm51bWJlclwiPT09dHlwZW9mIGUmJmQudGV4dENvbnRlbnQhPT1cIlwiK2UmJihhPVtcImNoaWxkcmVuXCIsXCJcIitlXSk6Y2EuaGFzT3duUHJvcGVydHkoZykmJm51bGwhPWUmJlwib25TY3JvbGxcIj09PWcmJkcoXCJzY3JvbGxcIixkKSk7c3dpdGNoKGMpe2Nhc2UgXCJpbnB1dFwiOlZhKGQpO2NiKGQsZiwhMCk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6VmEoZCk7amIoZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmNhc2UgXCJvcHRpb25cIjpicmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIj09PXR5cGVvZiBmLm9uQ2xpY2smJihkLm9uY2xpY2s9XG5qZil9ZD1hO2IudXBkYXRlUXVldWU9ZDtudWxsIT09ZCYmKGIuZmxhZ3N8PTQpfWVsc2V7Zz05PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudDthPT09a2IuaHRtbCYmKGE9bGIoYykpO2E9PT1rYi5odG1sP1wic2NyaXB0XCI9PT1jPyhhPWcuY3JlYXRlRWxlbWVudChcImRpdlwiKSxhLmlubmVySFRNTD1cIjxzY3JpcHQ+XFx4M2Mvc2NyaXB0PlwiLGE9YS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpKTpcInN0cmluZ1wiPT09dHlwZW9mIGQuaXM/YT1nLmNyZWF0ZUVsZW1lbnQoYyx7aXM6ZC5pc30pOihhPWcuY3JlYXRlRWxlbWVudChjKSxcInNlbGVjdFwiPT09YyYmKGc9YSxkLm11bHRpcGxlP2cubXVsdGlwbGU9ITA6ZC5zaXplJiYoZy5zaXplPWQuc2l6ZSkpKTphPWcuY3JlYXRlRWxlbWVudE5TKGEsYyk7YVt3Zl09YjthW3hmXT1kO0JpKGEsYiwhMSwhMSk7Yi5zdGF0ZU5vZGU9YTtnPXdiKGMsZCk7c3dpdGNoKGMpe2Nhc2UgXCJkaWFsb2dcIjpHKFwiY2FuY2VsXCIsYSk7RyhcImNsb3NlXCIsYSk7XG5lPWQ7YnJlYWs7Y2FzZSBcImlmcmFtZVwiOmNhc2UgXCJvYmplY3RcIjpjYXNlIFwiZW1iZWRcIjpHKFwibG9hZFwiLGEpO2U9ZDticmVhaztjYXNlIFwidmlkZW9cIjpjYXNlIFwiYXVkaW9cIjpmb3IoZT0wO2U8WGUubGVuZ3RoO2UrKylHKFhlW2VdLGEpO2U9ZDticmVhaztjYXNlIFwic291cmNlXCI6RyhcImVycm9yXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJpbWdcIjpjYXNlIFwiaW1hZ2VcIjpjYXNlIFwibGlua1wiOkcoXCJlcnJvclwiLGEpO0coXCJsb2FkXCIsYSk7ZT1kO2JyZWFrO2Nhc2UgXCJkZXRhaWxzXCI6RyhcInRvZ2dsZVwiLGEpO2U9ZDticmVhaztjYXNlIFwiaW5wdXRcIjpaYShhLGQpO2U9WWEoYSxkKTtHKFwiaW52YWxpZFwiLGEpO2JyZWFrO2Nhc2UgXCJvcHRpb25cIjplPWViKGEsZCk7YnJlYWs7Y2FzZSBcInNlbGVjdFwiOmEuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFkLm11bHRpcGxlfTtlPW0oe30sZCx7dmFsdWU6dm9pZCAwfSk7RyhcImludmFsaWRcIixhKTticmVhaztjYXNlIFwidGV4dGFyZWFcIjpoYihhLGQpO2U9XG5nYihhLGQpO0coXCJpbnZhbGlkXCIsYSk7YnJlYWs7ZGVmYXVsdDplPWR9dmIoYyxlKTt2YXIgaD1lO2ZvcihmIGluIGgpaWYoaC5oYXNPd25Qcm9wZXJ0eShmKSl7dmFyIGs9aFtmXTtcInN0eWxlXCI9PT1mP3RiKGEsayk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT09Zj8oaz1rP2suX19odG1sOnZvaWQgMCxudWxsIT1rJiZvYihhLGspKTpcImNoaWxkcmVuXCI9PT1mP1wic3RyaW5nXCI9PT10eXBlb2Ygaz8oXCJ0ZXh0YXJlYVwiIT09Y3x8XCJcIiE9PWspJiZwYihhLGspOlwibnVtYmVyXCI9PT10eXBlb2YgayYmcGIoYSxcIlwiK2spOlwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCIhPT1mJiZcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiIT09ZiYmXCJhdXRvRm9jdXNcIiE9PWYmJihjYS5oYXNPd25Qcm9wZXJ0eShmKT9udWxsIT1rJiZcIm9uU2Nyb2xsXCI9PT1mJiZHKFwic2Nyb2xsXCIsYSk6bnVsbCE9ayYmcWEoYSxmLGssZykpfXN3aXRjaChjKXtjYXNlIFwiaW5wdXRcIjpWYShhKTtjYihhLGQsITEpO1xuYnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6VmEoYSk7amIoYSk7YnJlYWs7Y2FzZSBcIm9wdGlvblwiOm51bGwhPWQudmFsdWUmJmEuc2V0QXR0cmlidXRlKFwidmFsdWVcIixcIlwiK1NhKGQudmFsdWUpKTticmVhaztjYXNlIFwic2VsZWN0XCI6YS5tdWx0aXBsZT0hIWQubXVsdGlwbGU7Zj1kLnZhbHVlO251bGwhPWY/ZmIoYSwhIWQubXVsdGlwbGUsZiwhMSk6bnVsbCE9ZC5kZWZhdWx0VmFsdWUmJmZiKGEsISFkLm11bHRpcGxlLGQuZGVmYXVsdFZhbHVlLCEwKTticmVhaztkZWZhdWx0OlwiZnVuY3Rpb25cIj09PXR5cGVvZiBlLm9uQ2xpY2smJihhLm9uY2xpY2s9amYpfW1mKGMsZCkmJihiLmZsYWdzfD00KX1udWxsIT09Yi5yZWYmJihiLmZsYWdzfD0xMjgpfXJldHVybiBudWxsO2Nhc2UgNjppZihhJiZudWxsIT1iLnN0YXRlTm9kZSlFaShhLGIsYS5tZW1vaXplZFByb3BzLGQpO2Vsc2V7aWYoXCJzdHJpbmdcIiE9PXR5cGVvZiBkJiZudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoeSgxNjYpKTtcbmM9ZGgoY2guY3VycmVudCk7ZGgoYWguY3VycmVudCk7cmgoYik/KGQ9Yi5zdGF0ZU5vZGUsYz1iLm1lbW9pemVkUHJvcHMsZFt3Zl09YixkLm5vZGVWYWx1ZSE9PWMmJihiLmZsYWdzfD00KSk6KGQ9KDk9PT1jLm5vZGVUeXBlP2M6Yy5vd25lckRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZShkKSxkW3dmXT1iLGIuc3RhdGVOb2RlPWQpfXJldHVybiBudWxsO2Nhc2UgMTM6SChQKTtkPWIubWVtb2l6ZWRTdGF0ZTtpZigwIT09KGIuZmxhZ3MmNjQpKXJldHVybiBiLmxhbmVzPWMsYjtkPW51bGwhPT1kO2M9ITE7bnVsbD09PWE/dm9pZCAwIT09Yi5tZW1vaXplZFByb3BzLmZhbGxiYWNrJiZyaChiKTpjPW51bGwhPT1hLm1lbW9pemVkU3RhdGU7aWYoZCYmIWMmJjAhPT0oYi5tb2RlJjIpKWlmKG51bGw9PT1hJiYhMCE9PWIubWVtb2l6ZWRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFja3x8MCE9PShQLmN1cnJlbnQmMSkpMD09PVYmJihWPTMpO2Vsc2V7aWYoMD09PVZ8fDM9PT1WKVY9XG40O251bGw9PT1VfHwwPT09KERnJjEzNDIxNzcyNykmJjA9PT0oSGkmMTM0MjE3NzI3KXx8SWkoVSxXKX1pZihkfHxjKWIuZmxhZ3N8PTQ7cmV0dXJuIG51bGw7Y2FzZSA0OnJldHVybiBmaCgpLENpKGIpLG51bGw9PT1hJiZjZihiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxudWxsO2Nhc2UgMTA6cmV0dXJuIHJnKGIpLG51bGw7Y2FzZSAxNzpyZXR1cm4gRmYoYi50eXBlKSYmR2YoKSxudWxsO2Nhc2UgMTk6SChQKTtkPWIubWVtb2l6ZWRTdGF0ZTtpZihudWxsPT09ZClyZXR1cm4gbnVsbDtmPTAhPT0oYi5mbGFncyY2NCk7Zz1kLnJlbmRlcmluZztpZihudWxsPT09ZylpZihmKUZpKGQsITEpO2Vsc2V7aWYoMCE9PVZ8fG51bGwhPT1hJiYwIT09KGEuZmxhZ3MmNjQpKWZvcihhPWIuY2hpbGQ7bnVsbCE9PWE7KXtnPWloKGEpO2lmKG51bGwhPT1nKXtiLmZsYWdzfD02NDtGaShkLCExKTtmPWcudXBkYXRlUXVldWU7bnVsbCE9PWYmJihiLnVwZGF0ZVF1ZXVlPWYsYi5mbGFnc3w9NCk7XG5udWxsPT09ZC5sYXN0RWZmZWN0JiYoYi5maXJzdEVmZmVjdD1udWxsKTtiLmxhc3RFZmZlY3Q9ZC5sYXN0RWZmZWN0O2Q9Yztmb3IoYz1iLmNoaWxkO251bGwhPT1jOylmPWMsYT1kLGYuZmxhZ3MmPTIsZi5uZXh0RWZmZWN0PW51bGwsZi5maXJzdEVmZmVjdD1udWxsLGYubGFzdEVmZmVjdD1udWxsLGc9Zi5hbHRlcm5hdGUsbnVsbD09PWc/KGYuY2hpbGRMYW5lcz0wLGYubGFuZXM9YSxmLmNoaWxkPW51bGwsZi5tZW1vaXplZFByb3BzPW51bGwsZi5tZW1vaXplZFN0YXRlPW51bGwsZi51cGRhdGVRdWV1ZT1udWxsLGYuZGVwZW5kZW5jaWVzPW51bGwsZi5zdGF0ZU5vZGU9bnVsbCk6KGYuY2hpbGRMYW5lcz1nLmNoaWxkTGFuZXMsZi5sYW5lcz1nLmxhbmVzLGYuY2hpbGQ9Zy5jaGlsZCxmLm1lbW9pemVkUHJvcHM9Zy5tZW1vaXplZFByb3BzLGYubWVtb2l6ZWRTdGF0ZT1nLm1lbW9pemVkU3RhdGUsZi51cGRhdGVRdWV1ZT1nLnVwZGF0ZVF1ZXVlLGYudHlwZT1nLnR5cGUsYT1nLmRlcGVuZGVuY2llcyxcbmYuZGVwZW5kZW5jaWVzPW51bGw9PT1hP251bGw6e2xhbmVzOmEubGFuZXMsZmlyc3RDb250ZXh0OmEuZmlyc3RDb250ZXh0fSksYz1jLnNpYmxpbmc7SShQLFAuY3VycmVudCYxfDIpO3JldHVybiBiLmNoaWxkfWE9YS5zaWJsaW5nfW51bGwhPT1kLnRhaWwmJk8oKT5KaSYmKGIuZmxhZ3N8PTY0LGY9ITAsRmkoZCwhMSksYi5sYW5lcz0zMzU1NDQzMil9ZWxzZXtpZighZilpZihhPWloKGcpLG51bGwhPT1hKXtpZihiLmZsYWdzfD02NCxmPSEwLGM9YS51cGRhdGVRdWV1ZSxudWxsIT09YyYmKGIudXBkYXRlUXVldWU9YyxiLmZsYWdzfD00KSxGaShkLCEwKSxudWxsPT09ZC50YWlsJiZcImhpZGRlblwiPT09ZC50YWlsTW9kZSYmIWcuYWx0ZXJuYXRlJiYhbGgpcmV0dXJuIGI9Yi5sYXN0RWZmZWN0PWQubGFzdEVmZmVjdCxudWxsIT09YiYmKGIubmV4dEVmZmVjdD1udWxsKSxudWxsfWVsc2UgMipPKCktZC5yZW5kZXJpbmdTdGFydFRpbWU+SmkmJjEwNzM3NDE4MjQhPT1jJiYoYi5mbGFnc3w9XG42NCxmPSEwLEZpKGQsITEpLGIubGFuZXM9MzM1NTQ0MzIpO2QuaXNCYWNrd2FyZHM/KGcuc2libGluZz1iLmNoaWxkLGIuY2hpbGQ9Zyk6KGM9ZC5sYXN0LG51bGwhPT1jP2Muc2libGluZz1nOmIuY2hpbGQ9ZyxkLmxhc3Q9Zyl9cmV0dXJuIG51bGwhPT1kLnRhaWw/KGM9ZC50YWlsLGQucmVuZGVyaW5nPWMsZC50YWlsPWMuc2libGluZyxkLmxhc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0LGQucmVuZGVyaW5nU3RhcnRUaW1lPU8oKSxjLnNpYmxpbmc9bnVsbCxiPVAuY3VycmVudCxJKFAsZj9iJjF8MjpiJjEpLGMpOm51bGw7Y2FzZSAyMzpjYXNlIDI0OnJldHVybiBLaSgpLG51bGwhPT1hJiZudWxsIT09YS5tZW1vaXplZFN0YXRlIT09KG51bGwhPT1iLm1lbW9pemVkU3RhdGUpJiZcInVuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nXCIhPT1kLm1vZGUmJihiLmZsYWdzfD00KSxudWxsfXRocm93IEVycm9yKHkoMTU2LGIudGFnKSk7fVxuZnVuY3Rpb24gTGkoYSl7c3dpdGNoKGEudGFnKXtjYXNlIDE6RmYoYS50eXBlKSYmR2YoKTt2YXIgYj1hLmZsYWdzO3JldHVybiBiJjQwOTY/KGEuZmxhZ3M9YiYtNDA5N3w2NCxhKTpudWxsO2Nhc2UgMzpmaCgpO0goTik7SChNKTt1aCgpO2I9YS5mbGFncztpZigwIT09KGImNjQpKXRocm93IEVycm9yKHkoMjg1KSk7YS5mbGFncz1iJi00MDk3fDY0O3JldHVybiBhO2Nhc2UgNTpyZXR1cm4gaGgoYSksbnVsbDtjYXNlIDEzOnJldHVybiBIKFApLGI9YS5mbGFncyxiJjQwOTY/KGEuZmxhZ3M9YiYtNDA5N3w2NCxhKTpudWxsO2Nhc2UgMTk6cmV0dXJuIEgoUCksbnVsbDtjYXNlIDQ6cmV0dXJuIGZoKCksbnVsbDtjYXNlIDEwOnJldHVybiByZyhhKSxudWxsO2Nhc2UgMjM6Y2FzZSAyNDpyZXR1cm4gS2koKSxudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fVxuZnVuY3Rpb24gTWkoYSxiKXt0cnl7dmFyIGM9XCJcIixkPWI7ZG8gYys9UWEoZCksZD1kLnJldHVybjt3aGlsZShkKTt2YXIgZT1jfWNhdGNoKGYpe2U9XCJcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBcIitmLm1lc3NhZ2UrXCJcXG5cIitmLnN0YWNrfXJldHVybnt2YWx1ZTphLHNvdXJjZTpiLHN0YWNrOmV9fWZ1bmN0aW9uIE5pKGEsYil7dHJ5e2NvbnNvbGUuZXJyb3IoYi52YWx1ZSl9Y2F0Y2goYyl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGM7fSl9fXZhciBPaT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgV2Vha01hcD9XZWFrTWFwOk1hcDtmdW5jdGlvbiBQaShhLGIsYyl7Yz16ZygtMSxjKTtjLnRhZz0zO2MucGF5bG9hZD17ZWxlbWVudDpudWxsfTt2YXIgZD1iLnZhbHVlO2MuY2FsbGJhY2s9ZnVuY3Rpb24oKXtRaXx8KFFpPSEwLFJpPWQpO05pKGEsYil9O3JldHVybiBjfVxuZnVuY3Rpb24gU2koYSxiLGMpe2M9emcoLTEsYyk7Yy50YWc9Mzt2YXIgZD1hLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkKXt2YXIgZT1iLnZhbHVlO2MucGF5bG9hZD1mdW5jdGlvbigpe05pKGEsYik7cmV0dXJuIGQoZSl9fXZhciBmPWEuc3RhdGVOb2RlO251bGwhPT1mJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgZi5jb21wb25lbnREaWRDYXRjaCYmKGMuY2FsbGJhY2s9ZnVuY3Rpb24oKXtcImZ1bmN0aW9uXCIhPT10eXBlb2YgZCYmKG51bGw9PT1UaT9UaT1uZXcgU2V0KFt0aGlzXSk6VGkuYWRkKHRoaXMpLE5pKGEsYikpO3ZhciBjPWIuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaChiLnZhbHVlLHtjb21wb25lbnRTdGFjazpudWxsIT09Yz9jOlwiXCJ9KX0pO3JldHVybiBjfXZhciBVaT1cImZ1bmN0aW9uXCI9PT10eXBlb2YgV2Vha1NldD9XZWFrU2V0OlNldDtcbmZ1bmN0aW9uIFZpKGEpe3ZhciBiPWEucmVmO2lmKG51bGwhPT1iKWlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBiKXRyeXtiKG51bGwpfWNhdGNoKGMpe1dpKGEsYyl9ZWxzZSBiLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBYaShhLGIpe3N3aXRjaChiLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpjYXNlIDIyOnJldHVybjtjYXNlIDE6aWYoYi5mbGFncyYyNTYmJm51bGwhPT1hKXt2YXIgYz1hLm1lbW9pemVkUHJvcHMsZD1hLm1lbW9pemVkU3RhdGU7YT1iLnN0YXRlTm9kZTtiPWEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoYi5lbGVtZW50VHlwZT09PWIudHlwZT9jOmxnKGIudHlwZSxjKSxkKTthLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlPWJ9cmV0dXJuO2Nhc2UgMzpiLmZsYWdzJjI1NiYmcWYoYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7cmV0dXJuO2Nhc2UgNTpjYXNlIDY6Y2FzZSA0OmNhc2UgMTc6cmV0dXJufXRocm93IEVycm9yKHkoMTYzKSk7fVxuZnVuY3Rpb24gWWkoYSxiLGMpe3N3aXRjaChjLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpjYXNlIDIyOmI9Yy51cGRhdGVRdWV1ZTtiPW51bGwhPT1iP2IubGFzdEVmZmVjdDpudWxsO2lmKG51bGwhPT1iKXthPWI9Yi5uZXh0O2Rve2lmKDM9PT0oYS50YWcmMykpe3ZhciBkPWEuY3JlYXRlO2EuZGVzdHJveT1kKCl9YT1hLm5leHR9d2hpbGUoYSE9PWIpfWI9Yy51cGRhdGVRdWV1ZTtiPW51bGwhPT1iP2IubGFzdEVmZmVjdDpudWxsO2lmKG51bGwhPT1iKXthPWI9Yi5uZXh0O2Rve3ZhciBlPWE7ZD1lLm5leHQ7ZT1lLnRhZzswIT09KGUmNCkmJjAhPT0oZSYxKSYmKFppKGMsYSksJGkoYyxhKSk7YT1kfXdoaWxlKGEhPT1iKX1yZXR1cm47Y2FzZSAxOmE9Yy5zdGF0ZU5vZGU7Yy5mbGFncyY0JiYobnVsbD09PWI/YS5jb21wb25lbnREaWRNb3VudCgpOihkPWMuZWxlbWVudFR5cGU9PT1jLnR5cGU/Yi5tZW1vaXplZFByb3BzOmxnKGMudHlwZSxiLm1lbW9pemVkUHJvcHMpLGEuY29tcG9uZW50RGlkVXBkYXRlKGQsXG5iLm1lbW9pemVkU3RhdGUsYS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSkpKTtiPWMudXBkYXRlUXVldWU7bnVsbCE9PWImJkVnKGMsYixhKTtyZXR1cm47Y2FzZSAzOmI9Yy51cGRhdGVRdWV1ZTtpZihudWxsIT09Yil7YT1udWxsO2lmKG51bGwhPT1jLmNoaWxkKXN3aXRjaChjLmNoaWxkLnRhZyl7Y2FzZSA1OmE9Yy5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOmE9Yy5jaGlsZC5zdGF0ZU5vZGV9RWcoYyxiLGEpfXJldHVybjtjYXNlIDU6YT1jLnN0YXRlTm9kZTtudWxsPT09YiYmYy5mbGFncyY0JiZtZihjLnR5cGUsYy5tZW1vaXplZFByb3BzKSYmYS5mb2N1cygpO3JldHVybjtjYXNlIDY6cmV0dXJuO2Nhc2UgNDpyZXR1cm47Y2FzZSAxMjpyZXR1cm47Y2FzZSAxMzpudWxsPT09Yy5tZW1vaXplZFN0YXRlJiYoYz1jLmFsdGVybmF0ZSxudWxsIT09YyYmKGM9Yy5tZW1vaXplZFN0YXRlLG51bGwhPT1jJiYoYz1jLmRlaHlkcmF0ZWQsbnVsbCE9PWMmJkNjKGMpKSkpO1xucmV0dXJuO2Nhc2UgMTk6Y2FzZSAxNzpjYXNlIDIwOmNhc2UgMjE6Y2FzZSAyMzpjYXNlIDI0OnJldHVybn10aHJvdyBFcnJvcih5KDE2MykpO31cbmZ1bmN0aW9uIGFqKGEsYil7Zm9yKHZhciBjPWE7Oyl7aWYoNT09PWMudGFnKXt2YXIgZD1jLnN0YXRlTm9kZTtpZihiKWQ9ZC5zdHlsZSxcImZ1bmN0aW9uXCI9PT10eXBlb2YgZC5zZXRQcm9wZXJ0eT9kLnNldFByb3BlcnR5KFwiZGlzcGxheVwiLFwibm9uZVwiLFwiaW1wb3J0YW50XCIpOmQuZGlzcGxheT1cIm5vbmVcIjtlbHNle2Q9Yy5zdGF0ZU5vZGU7dmFyIGU9Yy5tZW1vaXplZFByb3BzLnN0eWxlO2U9dm9pZCAwIT09ZSYmbnVsbCE9PWUmJmUuaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5XCIpP2UuZGlzcGxheTpudWxsO2Quc3R5bGUuZGlzcGxheT1zYihcImRpc3BsYXlcIixlKX19ZWxzZSBpZig2PT09Yy50YWcpYy5zdGF0ZU5vZGUubm9kZVZhbHVlPWI/XCJcIjpjLm1lbW9pemVkUHJvcHM7ZWxzZSBpZigoMjMhPT1jLnRhZyYmMjQhPT1jLnRhZ3x8bnVsbD09PWMubWVtb2l6ZWRTdGF0ZXx8Yz09PWEpJiZudWxsIT09Yy5jaGlsZCl7Yy5jaGlsZC5yZXR1cm49YztjPWMuY2hpbGQ7Y29udGludWV9aWYoYz09PVxuYSlicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YSlyZXR1cm47Yz1jLnJldHVybn1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9Yy5zaWJsaW5nfX1cbmZ1bmN0aW9uIGJqKGEsYil7aWYoTWYmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBNZi5vbkNvbW1pdEZpYmVyVW5tb3VudCl0cnl7TWYub25Db21taXRGaWJlclVubW91bnQoTGYsYil9Y2F0Y2goZil7fXN3aXRjaChiLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMjI6YT1iLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1hJiYoYT1hLmxhc3RFZmZlY3QsbnVsbCE9PWEpKXt2YXIgYz1hPWEubmV4dDtkb3t2YXIgZD1jLGU9ZC5kZXN0cm95O2Q9ZC50YWc7aWYodm9pZCAwIT09ZSlpZigwIT09KGQmNCkpWmkoYixjKTtlbHNle2Q9Yjt0cnl7ZSgpfWNhdGNoKGYpe1dpKGQsZil9fWM9Yy5uZXh0fXdoaWxlKGMhPT1hKX1icmVhaztjYXNlIDE6VmkoYik7YT1iLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYS5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7YS5wcm9wcz1iLm1lbW9pemVkUHJvcHMsYS5zdGF0ZT1iLm1lbW9pemVkU3RhdGUsYS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKGYpe1dpKGIsXG5mKX1icmVhaztjYXNlIDU6VmkoYik7YnJlYWs7Y2FzZSA0OmNqKGEsYil9fWZ1bmN0aW9uIGRqKGEpe2EuYWx0ZXJuYXRlPW51bGw7YS5jaGlsZD1udWxsO2EuZGVwZW5kZW5jaWVzPW51bGw7YS5maXJzdEVmZmVjdD1udWxsO2EubGFzdEVmZmVjdD1udWxsO2EubWVtb2l6ZWRQcm9wcz1udWxsO2EubWVtb2l6ZWRTdGF0ZT1udWxsO2EucGVuZGluZ1Byb3BzPW51bGw7YS5yZXR1cm49bnVsbDthLnVwZGF0ZVF1ZXVlPW51bGx9ZnVuY3Rpb24gZWooYSl7cmV0dXJuIDU9PT1hLnRhZ3x8Mz09PWEudGFnfHw0PT09YS50YWd9XG5mdW5jdGlvbiBmaihhKXthOntmb3IodmFyIGI9YS5yZXR1cm47bnVsbCE9PWI7KXtpZihlaihiKSlicmVhayBhO2I9Yi5yZXR1cm59dGhyb3cgRXJyb3IoeSgxNjApKTt9dmFyIGM9YjtiPWMuc3RhdGVOb2RlO3N3aXRjaChjLnRhZyl7Y2FzZSA1OnZhciBkPSExO2JyZWFrO2Nhc2UgMzpiPWIuY29udGFpbmVySW5mbztkPSEwO2JyZWFrO2Nhc2UgNDpiPWIuY29udGFpbmVySW5mbztkPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoeSgxNjEpKTt9Yy5mbGFncyYxNiYmKHBiKGIsXCJcIiksYy5mbGFncyY9LTE3KTthOmI6Zm9yKGM9YTs7KXtmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGVqKGMucmV0dXJuKSl7Yz1udWxsO2JyZWFrIGF9Yz1jLnJldHVybn1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2ZvcihjPWMuc2libGluZzs1IT09Yy50YWcmJjYhPT1jLnRhZyYmMTghPT1jLnRhZzspe2lmKGMuZmxhZ3MmMiljb250aW51ZSBiO2lmKG51bGw9PT1cbmMuY2hpbGR8fDQ9PT1jLnRhZyljb250aW51ZSBiO2Vsc2UgYy5jaGlsZC5yZXR1cm49YyxjPWMuY2hpbGR9aWYoIShjLmZsYWdzJjIpKXtjPWMuc3RhdGVOb2RlO2JyZWFrIGF9fWQ/Z2ooYSxjLGIpOmhqKGEsYyxiKX1cbmZ1bmN0aW9uIGdqKGEsYixjKXt2YXIgZD1hLnRhZyxlPTU9PT1kfHw2PT09ZDtpZihlKWE9ZT9hLnN0YXRlTm9kZTphLnN0YXRlTm9kZS5pbnN0YW5jZSxiPzg9PT1jLm5vZGVUeXBlP2MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxiKTpjLmluc2VydEJlZm9yZShhLGIpOig4PT09Yy5ub2RlVHlwZT8oYj1jLnBhcmVudE5vZGUsYi5pbnNlcnRCZWZvcmUoYSxjKSk6KGI9YyxiLmFwcGVuZENoaWxkKGEpKSxjPWMuX3JlYWN0Um9vdENvbnRhaW5lcixudWxsIT09YyYmdm9pZCAwIT09Y3x8bnVsbCE9PWIub25jbGlja3x8KGIub25jbGljaz1qZikpO2Vsc2UgaWYoNCE9PWQmJihhPWEuY2hpbGQsbnVsbCE9PWEpKWZvcihnaihhLGIsYyksYT1hLnNpYmxpbmc7bnVsbCE9PWE7KWdqKGEsYixjKSxhPWEuc2libGluZ31cbmZ1bmN0aW9uIGhqKGEsYixjKXt2YXIgZD1hLnRhZyxlPTU9PT1kfHw2PT09ZDtpZihlKWE9ZT9hLnN0YXRlTm9kZTphLnN0YXRlTm9kZS5pbnN0YW5jZSxiP2MuaW5zZXJ0QmVmb3JlKGEsYik6Yy5hcHBlbmRDaGlsZChhKTtlbHNlIGlmKDQhPT1kJiYoYT1hLmNoaWxkLG51bGwhPT1hKSlmb3IoaGooYSxiLGMpLGE9YS5zaWJsaW5nO251bGwhPT1hOyloaihhLGIsYyksYT1hLnNpYmxpbmd9XG5mdW5jdGlvbiBjaihhLGIpe2Zvcih2YXIgYz1iLGQ9ITEsZSxmOzspe2lmKCFkKXtkPWMucmV0dXJuO2E6Zm9yKDs7KXtpZihudWxsPT09ZCl0aHJvdyBFcnJvcih5KDE2MCkpO2U9ZC5zdGF0ZU5vZGU7c3dpdGNoKGQudGFnKXtjYXNlIDU6Zj0hMTticmVhayBhO2Nhc2UgMzplPWUuY29udGFpbmVySW5mbztmPSEwO2JyZWFrIGE7Y2FzZSA0OmU9ZS5jb250YWluZXJJbmZvO2Y9ITA7YnJlYWsgYX1kPWQucmV0dXJufWQ9ITB9aWYoNT09PWMudGFnfHw2PT09Yy50YWcpe2E6Zm9yKHZhciBnPWEsaD1jLGs9aDs7KWlmKGJqKGcsayksbnVsbCE9PWsuY2hpbGQmJjQhPT1rLnRhZylrLmNoaWxkLnJldHVybj1rLGs9ay5jaGlsZDtlbHNle2lmKGs9PT1oKWJyZWFrIGE7Zm9yKDtudWxsPT09ay5zaWJsaW5nOyl7aWYobnVsbD09PWsucmV0dXJufHxrLnJldHVybj09PWgpYnJlYWsgYTtrPWsucmV0dXJufWsuc2libGluZy5yZXR1cm49ay5yZXR1cm47az1rLnNpYmxpbmd9Zj8oZz1lLGg9Yy5zdGF0ZU5vZGUsXG44PT09Zy5ub2RlVHlwZT9nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCk6Zy5yZW1vdmVDaGlsZChoKSk6ZS5yZW1vdmVDaGlsZChjLnN0YXRlTm9kZSl9ZWxzZSBpZig0PT09Yy50YWcpe2lmKG51bGwhPT1jLmNoaWxkKXtlPWMuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87Zj0hMDtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX19ZWxzZSBpZihiaihhLGMpLG51bGwhPT1jLmNoaWxkKXtjLmNoaWxkLnJldHVybj1jO2M9Yy5jaGlsZDtjb250aW51ZX1pZihjPT09YilicmVhaztmb3IoO251bGw9PT1jLnNpYmxpbmc7KXtpZihudWxsPT09Yy5yZXR1cm58fGMucmV0dXJuPT09YilyZXR1cm47Yz1jLnJldHVybjs0PT09Yy50YWcmJihkPSExKX1jLnNpYmxpbmcucmV0dXJuPWMucmV0dXJuO2M9Yy5zaWJsaW5nfX1cbmZ1bmN0aW9uIGlqKGEsYil7c3dpdGNoKGIudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAyMjp2YXIgYz1iLnVwZGF0ZVF1ZXVlO2M9bnVsbCE9PWM/Yy5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PWMpe3ZhciBkPWM9Yy5uZXh0O2RvIDM9PT0oZC50YWcmMykmJihhPWQuZGVzdHJveSxkLmRlc3Ryb3k9dm9pZCAwLHZvaWQgMCE9PWEmJmEoKSksZD1kLm5leHQ7d2hpbGUoZCE9PWMpfXJldHVybjtjYXNlIDE6cmV0dXJuO2Nhc2UgNTpjPWIuc3RhdGVOb2RlO2lmKG51bGwhPWMpe2Q9Yi5tZW1vaXplZFByb3BzO3ZhciBlPW51bGwhPT1hP2EubWVtb2l6ZWRQcm9wczpkO2E9Yi50eXBlO3ZhciBmPWIudXBkYXRlUXVldWU7Yi51cGRhdGVRdWV1ZT1udWxsO2lmKG51bGwhPT1mKXtjW3hmXT1kO1wiaW5wdXRcIj09PWEmJlwicmFkaW9cIj09PWQudHlwZSYmbnVsbCE9ZC5uYW1lJiYkYShjLGQpO3diKGEsZSk7Yj13YihhLGQpO2ZvcihlPTA7ZTxmLmxlbmd0aDtlKz1cbjIpe3ZhciBnPWZbZV0saD1mW2UrMV07XCJzdHlsZVwiPT09Zz90YihjLGgpOlwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09PWc/b2IoYyxoKTpcImNoaWxkcmVuXCI9PT1nP3BiKGMsaCk6cWEoYyxnLGgsYil9c3dpdGNoKGEpe2Nhc2UgXCJpbnB1dFwiOmFiKGMsZCk7YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6aWIoYyxkKTticmVhaztjYXNlIFwic2VsZWN0XCI6YT1jLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUsYy5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPSEhZC5tdWx0aXBsZSxmPWQudmFsdWUsbnVsbCE9Zj9mYihjLCEhZC5tdWx0aXBsZSxmLCExKTphIT09ISFkLm11bHRpcGxlJiYobnVsbCE9ZC5kZWZhdWx0VmFsdWU/ZmIoYywhIWQubXVsdGlwbGUsZC5kZWZhdWx0VmFsdWUsITApOmZiKGMsISFkLm11bHRpcGxlLGQubXVsdGlwbGU/W106XCJcIiwhMSkpfX19cmV0dXJuO2Nhc2UgNjppZihudWxsPT09Yi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IoeSgxNjIpKTtiLnN0YXRlTm9kZS5ub2RlVmFsdWU9XG5iLm1lbW9pemVkUHJvcHM7cmV0dXJuO2Nhc2UgMzpjPWIuc3RhdGVOb2RlO2MuaHlkcmF0ZSYmKGMuaHlkcmF0ZT0hMSxDYyhjLmNvbnRhaW5lckluZm8pKTtyZXR1cm47Y2FzZSAxMjpyZXR1cm47Y2FzZSAxMzpudWxsIT09Yi5tZW1vaXplZFN0YXRlJiYoamo9TygpLGFqKGIuY2hpbGQsITApKTtraihiKTtyZXR1cm47Y2FzZSAxOTpraihiKTtyZXR1cm47Y2FzZSAxNzpyZXR1cm47Y2FzZSAyMzpjYXNlIDI0OmFqKGIsbnVsbCE9PWIubWVtb2l6ZWRTdGF0ZSk7cmV0dXJufXRocm93IEVycm9yKHkoMTYzKSk7fWZ1bmN0aW9uIGtqKGEpe3ZhciBiPWEudXBkYXRlUXVldWU7aWYobnVsbCE9PWIpe2EudXBkYXRlUXVldWU9bnVsbDt2YXIgYz1hLnN0YXRlTm9kZTtudWxsPT09YyYmKGM9YS5zdGF0ZU5vZGU9bmV3IFVpKTtiLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGQ9bGouYmluZChudWxsLGEsYik7Yy5oYXMoYil8fChjLmFkZChiKSxiLnRoZW4oZCxkKSl9KX19XG5mdW5jdGlvbiBtaihhLGIpe3JldHVybiBudWxsIT09YSYmKGE9YS5tZW1vaXplZFN0YXRlLG51bGw9PT1hfHxudWxsIT09YS5kZWh5ZHJhdGVkKT8oYj1iLm1lbW9pemVkU3RhdGUsbnVsbCE9PWImJm51bGw9PT1iLmRlaHlkcmF0ZWQpOiExfXZhciBuaj1NYXRoLmNlaWwsb2o9cmEuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixwaj1yYS5SZWFjdEN1cnJlbnRPd25lcixYPTAsVT1udWxsLFk9bnVsbCxXPTAscWo9MCxyaj1CZigwKSxWPTAsc2o9bnVsbCx0aj0wLERnPTAsSGk9MCx1aj0wLHZqPW51bGwsamo9MCxKaT1JbmZpbml0eTtmdW5jdGlvbiB3aigpe0ppPU8oKSs1MDB9dmFyIFo9bnVsbCxRaT0hMSxSaT1udWxsLFRpPW51bGwseGo9ITEseWo9bnVsbCx6aj05MCxBaj1bXSxCaj1bXSxDaj1udWxsLERqPTAsRWo9bnVsbCxGaj0tMSxHaj0wLEhqPTAsSWo9bnVsbCxKaj0hMTtmdW5jdGlvbiBIZygpe3JldHVybiAwIT09KFgmNDgpP08oKTotMSE9PUZqP0ZqOkZqPU8oKX1cbmZ1bmN0aW9uIElnKGEpe2E9YS5tb2RlO2lmKDA9PT0oYSYyKSlyZXR1cm4gMTtpZigwPT09KGEmNCkpcmV0dXJuIDk5PT09ZWcoKT8xOjI7MD09PUdqJiYoR2o9dGopO2lmKDAhPT1rZy50cmFuc2l0aW9uKXswIT09SGomJihIaj1udWxsIT09dmo/dmoucGVuZGluZ0xhbmVzOjApO2E9R2o7dmFyIGI9NDE4NjExMiZ+SGo7YiY9LWI7MD09PWImJihhPTQxODYxMTImfmEsYj1hJi1hLDA9PT1iJiYoYj04MTkyKSk7cmV0dXJuIGJ9YT1lZygpOzAhPT0oWCY0KSYmOTg9PT1hP2E9WGMoMTIsR2opOihhPVNjKGEpLGE9WGMoYSxHaikpO3JldHVybiBhfVxuZnVuY3Rpb24gSmcoYSxiLGMpe2lmKDUwPERqKXRocm93IERqPTAsRWo9bnVsbCxFcnJvcih5KDE4NSkpO2E9S2ooYSxiKTtpZihudWxsPT09YSlyZXR1cm4gbnVsbDskYyhhLGIsYyk7YT09PVUmJihIaXw9Yiw0PT09ViYmSWkoYSxXKSk7dmFyIGQ9ZWcoKTsxPT09Yj8wIT09KFgmOCkmJjA9PT0oWCY0OCk/TGooYSk6KE1qKGEsYyksMD09PVgmJih3aigpLGlnKCkpKTooMD09PShYJjQpfHw5OCE9PWQmJjk5IT09ZHx8KG51bGw9PT1Daj9Daj1uZXcgU2V0KFthXSk6Q2ouYWRkKGEpKSxNaihhLGMpKTt2aj1hfWZ1bmN0aW9uIEtqKGEsYil7YS5sYW5lc3w9Yjt2YXIgYz1hLmFsdGVybmF0ZTtudWxsIT09YyYmKGMubGFuZXN8PWIpO2M9YTtmb3IoYT1hLnJldHVybjtudWxsIT09YTspYS5jaGlsZExhbmVzfD1iLGM9YS5hbHRlcm5hdGUsbnVsbCE9PWMmJihjLmNoaWxkTGFuZXN8PWIpLGM9YSxhPWEucmV0dXJuO3JldHVybiAzPT09Yy50YWc/Yy5zdGF0ZU5vZGU6bnVsbH1cbmZ1bmN0aW9uIE1qKGEsYil7Zm9yKHZhciBjPWEuY2FsbGJhY2tOb2RlLGQ9YS5zdXNwZW5kZWRMYW5lcyxlPWEucGluZ2VkTGFuZXMsZj1hLmV4cGlyYXRpb25UaW1lcyxnPWEucGVuZGluZ0xhbmVzOzA8Zzspe3ZhciBoPTMxLVZjKGcpLGs9MTw8aCxsPWZbaF07aWYoLTE9PT1sKXtpZigwPT09KGsmZCl8fDAhPT0oayZlKSl7bD1iO1JjKGspO3ZhciBuPUY7ZltoXT0xMDw9bj9sKzI1MDo2PD1uP2wrNUUzOi0xfX1lbHNlIGw8PWImJihhLmV4cGlyZWRMYW5lc3w9ayk7ZyY9fmt9ZD1VYyhhLGE9PT1VP1c6MCk7Yj1GO2lmKDA9PT1kKW51bGwhPT1jJiYoYyE9PVpmJiZQZihjKSxhLmNhbGxiYWNrTm9kZT1udWxsLGEuY2FsbGJhY2tQcmlvcml0eT0wKTtlbHNle2lmKG51bGwhPT1jKXtpZihhLmNhbGxiYWNrUHJpb3JpdHk9PT1iKXJldHVybjtjIT09WmYmJlBmKGMpfTE1PT09Yj8oYz1Mai5iaW5kKG51bGwsYSksbnVsbD09PWFnPyhhZz1bY10sYmc9T2YoVWYsamcpKTphZy5wdXNoKGMpLFxuYz1aZik6MTQ9PT1iP2M9aGcoOTksTGouYmluZChudWxsLGEpKTooYz1UYyhiKSxjPWhnKGMsTmouYmluZChudWxsLGEpKSk7YS5jYWxsYmFja1ByaW9yaXR5PWI7YS5jYWxsYmFja05vZGU9Y319XG5mdW5jdGlvbiBOaihhKXtGaj0tMTtIaj1Haj0wO2lmKDAhPT0oWCY0OCkpdGhyb3cgRXJyb3IoeSgzMjcpKTt2YXIgYj1hLmNhbGxiYWNrTm9kZTtpZihPaigpJiZhLmNhbGxiYWNrTm9kZSE9PWIpcmV0dXJuIG51bGw7dmFyIGM9VWMoYSxhPT09VT9XOjApO2lmKDA9PT1jKXJldHVybiBudWxsO3ZhciBkPWM7dmFyIGU9WDtYfD0xNjt2YXIgZj1QaigpO2lmKFUhPT1hfHxXIT09ZCl3aigpLFFqKGEsZCk7ZG8gdHJ5e1JqKCk7YnJlYWt9Y2F0Y2goaCl7U2ooYSxoKX13aGlsZSgxKTtxZygpO29qLmN1cnJlbnQ9ZjtYPWU7bnVsbCE9PVk/ZD0wOihVPW51bGwsVz0wLGQ9Vik7aWYoMCE9PSh0aiZIaSkpUWooYSwwKTtlbHNlIGlmKDAhPT1kKXsyPT09ZCYmKFh8PTY0LGEuaHlkcmF0ZSYmKGEuaHlkcmF0ZT0hMSxxZihhLmNvbnRhaW5lckluZm8pKSxjPVdjKGEpLDAhPT1jJiYoZD1UaihhLGMpKSk7aWYoMT09PWQpdGhyb3cgYj1zaixRaihhLDApLElpKGEsYyksTWooYSxPKCkpLGI7YS5maW5pc2hlZFdvcms9XG5hLmN1cnJlbnQuYWx0ZXJuYXRlO2EuZmluaXNoZWRMYW5lcz1jO3N3aXRjaChkKXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKHkoMzQ1KSk7Y2FzZSAyOlVqKGEpO2JyZWFrO2Nhc2UgMzpJaShhLGMpO2lmKChjJjYyOTE0NTYwKT09PWMmJihkPWpqKzUwMC1PKCksMTA8ZCkpe2lmKDAhPT1VYyhhLDApKWJyZWFrO2U9YS5zdXNwZW5kZWRMYW5lcztpZigoZSZjKSE9PWMpe0hnKCk7YS5waW5nZWRMYW5lc3w9YS5zdXNwZW5kZWRMYW5lcyZlO2JyZWFrfWEudGltZW91dEhhbmRsZT1vZihVai5iaW5kKG51bGwsYSksZCk7YnJlYWt9VWooYSk7YnJlYWs7Y2FzZSA0OklpKGEsYyk7aWYoKGMmNDE4NjExMik9PT1jKWJyZWFrO2Q9YS5ldmVudFRpbWVzO2ZvcihlPS0xOzA8Yzspe3ZhciBnPTMxLVZjKGMpO2Y9MTw8ZztnPWRbZ107Zz5lJiYoZT1nKTtjJj1+Zn1jPWU7Yz1PKCktYztjPSgxMjA+Yz8xMjA6NDgwPmM/NDgwOjEwODA+Yz8xMDgwOjE5MjA+Yz8xOTIwOjNFMz5jPzNFMzo0MzIwPlxuYz80MzIwOjE5NjAqbmooYy8xOTYwKSktYztpZigxMDxjKXthLnRpbWVvdXRIYW5kbGU9b2YoVWouYmluZChudWxsLGEpLGMpO2JyZWFrfVVqKGEpO2JyZWFrO2Nhc2UgNTpVaihhKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKHkoMzI5KSk7fX1NaihhLE8oKSk7cmV0dXJuIGEuY2FsbGJhY2tOb2RlPT09Yj9Oai5iaW5kKG51bGwsYSk6bnVsbH1mdW5jdGlvbiBJaShhLGIpe2ImPX51ajtiJj1+SGk7YS5zdXNwZW5kZWRMYW5lc3w9YjthLnBpbmdlZExhbmVzJj1+Yjtmb3IoYT1hLmV4cGlyYXRpb25UaW1lczswPGI7KXt2YXIgYz0zMS1WYyhiKSxkPTE8PGM7YVtjXT0tMTtiJj1+ZH19XG5mdW5jdGlvbiBMaihhKXtpZigwIT09KFgmNDgpKXRocm93IEVycm9yKHkoMzI3KSk7T2ooKTtpZihhPT09VSYmMCE9PShhLmV4cGlyZWRMYW5lcyZXKSl7dmFyIGI9Vzt2YXIgYz1UaihhLGIpOzAhPT0odGomSGkpJiYoYj1VYyhhLGIpLGM9VGooYSxiKSl9ZWxzZSBiPVVjKGEsMCksYz1UaihhLGIpOzAhPT1hLnRhZyYmMj09PWMmJihYfD02NCxhLmh5ZHJhdGUmJihhLmh5ZHJhdGU9ITEscWYoYS5jb250YWluZXJJbmZvKSksYj1XYyhhKSwwIT09YiYmKGM9VGooYSxiKSkpO2lmKDE9PT1jKXRocm93IGM9c2osUWooYSwwKSxJaShhLGIpLE1qKGEsTygpKSxjO2EuZmluaXNoZWRXb3JrPWEuY3VycmVudC5hbHRlcm5hdGU7YS5maW5pc2hlZExhbmVzPWI7VWooYSk7TWooYSxPKCkpO3JldHVybiBudWxsfVxuZnVuY3Rpb24gVmooKXtpZihudWxsIT09Q2ope3ZhciBhPUNqO0NqPW51bGw7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuZXhwaXJlZExhbmVzfD0yNCZhLnBlbmRpbmdMYW5lcztNaihhLE8oKSl9KX1pZygpfWZ1bmN0aW9uIFdqKGEsYil7dmFyIGM9WDtYfD0xO3RyeXtyZXR1cm4gYShiKX1maW5hbGx5e1g9YywwPT09WCYmKHdqKCksaWcoKSl9fWZ1bmN0aW9uIFhqKGEsYil7dmFyIGM9WDtYJj0tMjtYfD04O3RyeXtyZXR1cm4gYShiKX1maW5hbGx5e1g9YywwPT09WCYmKHdqKCksaWcoKSl9fWZ1bmN0aW9uIG5pKGEsYil7SShyaixxaik7cWp8PWI7dGp8PWJ9ZnVuY3Rpb24gS2koKXtxaj1yai5jdXJyZW50O0gocmopfVxuZnVuY3Rpb24gUWooYSxiKXthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRMYW5lcz0wO3ZhciBjPWEudGltZW91dEhhbmRsZTstMSE9PWMmJihhLnRpbWVvdXRIYW5kbGU9LTEscGYoYykpO2lmKG51bGwhPT1ZKWZvcihjPVkucmV0dXJuO251bGwhPT1jOyl7dmFyIGQ9Yztzd2l0Y2goZC50YWcpe2Nhc2UgMTpkPWQudHlwZS5jaGlsZENvbnRleHRUeXBlcztudWxsIT09ZCYmdm9pZCAwIT09ZCYmR2YoKTticmVhaztjYXNlIDM6ZmgoKTtIKE4pO0goTSk7dWgoKTticmVhaztjYXNlIDU6aGgoZCk7YnJlYWs7Y2FzZSA0OmZoKCk7YnJlYWs7Y2FzZSAxMzpIKFApO2JyZWFrO2Nhc2UgMTk6SChQKTticmVhaztjYXNlIDEwOnJnKGQpO2JyZWFrO2Nhc2UgMjM6Y2FzZSAyNDpLaSgpfWM9Yy5yZXR1cm59VT1hO1k9VGcoYS5jdXJyZW50LG51bGwpO1c9cWo9dGo9YjtWPTA7c2o9bnVsbDt1aj1IaT1EZz0wfVxuZnVuY3Rpb24gU2ooYSxiKXtkb3t2YXIgYz1ZO3RyeXtxZygpO3ZoLmN1cnJlbnQ9R2g7aWYoeWgpe2Zvcih2YXIgZD1SLm1lbW9pemVkU3RhdGU7bnVsbCE9PWQ7KXt2YXIgZT1kLnF1ZXVlO251bGwhPT1lJiYoZS5wZW5kaW5nPW51bGwpO2Q9ZC5uZXh0fXloPSExfXhoPTA7VD1TPVI9bnVsbDt6aD0hMTtwai5jdXJyZW50PW51bGw7aWYobnVsbD09PWN8fG51bGw9PT1jLnJldHVybil7Vj0xO3NqPWI7WT1udWxsO2JyZWFrfWE6e3ZhciBmPWEsZz1jLnJldHVybixoPWMsaz1iO2I9VztoLmZsYWdzfD0yMDQ4O2guZmlyc3RFZmZlY3Q9aC5sYXN0RWZmZWN0PW51bGw7aWYobnVsbCE9PWsmJlwib2JqZWN0XCI9PT10eXBlb2YgayYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGsudGhlbil7dmFyIGw9aztpZigwPT09KGgubW9kZSYyKSl7dmFyIG49aC5hbHRlcm5hdGU7bj8oaC51cGRhdGVRdWV1ZT1uLnVwZGF0ZVF1ZXVlLGgubWVtb2l6ZWRTdGF0ZT1uLm1lbW9pemVkU3RhdGUsaC5sYW5lcz1uLmxhbmVzKTpcbihoLnVwZGF0ZVF1ZXVlPW51bGwsaC5tZW1vaXplZFN0YXRlPW51bGwpfXZhciBBPTAhPT0oUC5jdXJyZW50JjEpLHA9Zztkb3t2YXIgQztpZihDPTEzPT09cC50YWcpe3ZhciB4PXAubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09eClDPW51bGwhPT14LmRlaHlkcmF0ZWQ/ITA6ITE7ZWxzZXt2YXIgdz1wLm1lbW9pemVkUHJvcHM7Qz12b2lkIDA9PT13LmZhbGxiYWNrPyExOiEwIT09dy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjaz8hMDpBPyExOiEwfX1pZihDKXt2YXIgej1wLnVwZGF0ZVF1ZXVlO2lmKG51bGw9PT16KXt2YXIgdT1uZXcgU2V0O3UuYWRkKGwpO3AudXBkYXRlUXVldWU9dX1lbHNlIHouYWRkKGwpO2lmKDA9PT0ocC5tb2RlJjIpKXtwLmZsYWdzfD02NDtoLmZsYWdzfD0xNjM4NDtoLmZsYWdzJj0tMjk4MTtpZigxPT09aC50YWcpaWYobnVsbD09PWguYWx0ZXJuYXRlKWgudGFnPTE3O2Vsc2V7dmFyIHQ9emcoLTEsMSk7dC50YWc9MjtBZyhoLHQpfWgubGFuZXN8PTE7YnJlYWsgYX1rPVxudm9pZCAwO2g9Yjt2YXIgcT1mLnBpbmdDYWNoZTtudWxsPT09cT8ocT1mLnBpbmdDYWNoZT1uZXcgT2ksaz1uZXcgU2V0LHEuc2V0KGwsaykpOihrPXEuZ2V0KGwpLHZvaWQgMD09PWsmJihrPW5ldyBTZXQscS5zZXQobCxrKSkpO2lmKCFrLmhhcyhoKSl7ay5hZGQoaCk7dmFyIHY9WWouYmluZChudWxsLGYsbCxoKTtsLnRoZW4odix2KX1wLmZsYWdzfD00MDk2O3AubGFuZXM9YjticmVhayBhfXA9cC5yZXR1cm59d2hpbGUobnVsbCE9PXApO2s9RXJyb3IoKFJhKGgudHlwZSl8fFwiQSBSZWFjdCBjb21wb25lbnRcIikrXCIgc3VzcGVuZGVkIHdoaWxlIHJlbmRlcmluZywgYnV0IG5vIGZhbGxiYWNrIFVJIHdhcyBzcGVjaWZpZWQuXFxuXFxuQWRkIGEgPFN1c3BlbnNlIGZhbGxiYWNrPS4uLj4gY29tcG9uZW50IGhpZ2hlciBpbiB0aGUgdHJlZSB0byBwcm92aWRlIGEgbG9hZGluZyBpbmRpY2F0b3Igb3IgcGxhY2Vob2xkZXIgdG8gZGlzcGxheS5cIil9NSE9PVYmJihWPTIpO2s9TWkoayxoKTtwPVxuZztkb3tzd2l0Y2gocC50YWcpe2Nhc2UgMzpmPWs7cC5mbGFnc3w9NDA5NjtiJj0tYjtwLmxhbmVzfD1iO3ZhciBKPVBpKHAsZixiKTtCZyhwLEopO2JyZWFrIGE7Y2FzZSAxOmY9azt2YXIgSz1wLnR5cGUsUT1wLnN0YXRlTm9kZTtpZigwPT09KHAuZmxhZ3MmNjQpJiYoXCJmdW5jdGlvblwiPT09dHlwZW9mIEsuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxudWxsIT09USYmXCJmdW5jdGlvblwiPT09dHlwZW9mIFEuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09VGl8fCFUaS5oYXMoUSkpKSl7cC5mbGFnc3w9NDA5NjtiJj0tYjtwLmxhbmVzfD1iO3ZhciBMPVNpKHAsZixiKTtCZyhwLEwpO2JyZWFrIGF9fXA9cC5yZXR1cm59d2hpbGUobnVsbCE9PXApfVpqKGMpfWNhdGNoKHZhKXtiPXZhO1k9PT1jJiZudWxsIT09YyYmKFk9Yz1jLnJldHVybik7Y29udGludWV9YnJlYWt9d2hpbGUoMSl9XG5mdW5jdGlvbiBQaigpe3ZhciBhPW9qLmN1cnJlbnQ7b2ouY3VycmVudD1HaDtyZXR1cm4gbnVsbD09PWE/R2g6YX1mdW5jdGlvbiBUaihhLGIpe3ZhciBjPVg7WHw9MTY7dmFyIGQ9UGooKTtVPT09YSYmVz09PWJ8fFFqKGEsYik7ZG8gdHJ5e2FrKCk7YnJlYWt9Y2F0Y2goZSl7U2ooYSxlKX13aGlsZSgxKTtxZygpO1g9Yztvai5jdXJyZW50PWQ7aWYobnVsbCE9PVkpdGhyb3cgRXJyb3IoeSgyNjEpKTtVPW51bGw7Vz0wO3JldHVybiBWfWZ1bmN0aW9uIGFrKCl7Zm9yKDtudWxsIT09WTspYmsoWSl9ZnVuY3Rpb24gUmooKXtmb3IoO251bGwhPT1ZJiYhUWYoKTspYmsoWSl9ZnVuY3Rpb24gYmsoYSl7dmFyIGI9Y2soYS5hbHRlcm5hdGUsYSxxaik7YS5tZW1vaXplZFByb3BzPWEucGVuZGluZ1Byb3BzO251bGw9PT1iP1pqKGEpOlk9Yjtwai5jdXJyZW50PW51bGx9XG5mdW5jdGlvbiBaaihhKXt2YXIgYj1hO2Rve3ZhciBjPWIuYWx0ZXJuYXRlO2E9Yi5yZXR1cm47aWYoMD09PShiLmZsYWdzJjIwNDgpKXtjPUdpKGMsYixxaik7aWYobnVsbCE9PWMpe1k9YztyZXR1cm59Yz1iO2lmKDI0IT09Yy50YWcmJjIzIT09Yy50YWd8fG51bGw9PT1jLm1lbW9pemVkU3RhdGV8fDAhPT0ocWomMTA3Mzc0MTgyNCl8fDA9PT0oYy5tb2RlJjQpKXtmb3IodmFyIGQ9MCxlPWMuY2hpbGQ7bnVsbCE9PWU7KWR8PWUubGFuZXN8ZS5jaGlsZExhbmVzLGU9ZS5zaWJsaW5nO2MuY2hpbGRMYW5lcz1kfW51bGwhPT1hJiYwPT09KGEuZmxhZ3MmMjA0OCkmJihudWxsPT09YS5maXJzdEVmZmVjdCYmKGEuZmlyc3RFZmZlY3Q9Yi5maXJzdEVmZmVjdCksbnVsbCE9PWIubGFzdEVmZmVjdCYmKG51bGwhPT1hLmxhc3RFZmZlY3QmJihhLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1iLmZpcnN0RWZmZWN0KSxhLmxhc3RFZmZlY3Q9Yi5sYXN0RWZmZWN0KSwxPGIuZmxhZ3MmJihudWxsIT09XG5hLmxhc3RFZmZlY3Q/YS5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9YjphLmZpcnN0RWZmZWN0PWIsYS5sYXN0RWZmZWN0PWIpKX1lbHNle2M9TGkoYik7aWYobnVsbCE9PWMpe2MuZmxhZ3MmPTIwNDc7WT1jO3JldHVybn1udWxsIT09YSYmKGEuZmlyc3RFZmZlY3Q9YS5sYXN0RWZmZWN0PW51bGwsYS5mbGFnc3w9MjA0OCl9Yj1iLnNpYmxpbmc7aWYobnVsbCE9PWIpe1k9YjtyZXR1cm59WT1iPWF9d2hpbGUobnVsbCE9PWIpOzA9PT1WJiYoVj01KX1mdW5jdGlvbiBVaihhKXt2YXIgYj1lZygpO2dnKDk5LGRrLmJpbmQobnVsbCxhLGIpKTtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIGRrKGEsYil7ZG8gT2ooKTt3aGlsZShudWxsIT09eWopO2lmKDAhPT0oWCY0OCkpdGhyb3cgRXJyb3IoeSgzMjcpKTt2YXIgYz1hLmZpbmlzaGVkV29yaztpZihudWxsPT09YylyZXR1cm4gbnVsbDthLmZpbmlzaGVkV29yaz1udWxsO2EuZmluaXNoZWRMYW5lcz0wO2lmKGM9PT1hLmN1cnJlbnQpdGhyb3cgRXJyb3IoeSgxNzcpKTthLmNhbGxiYWNrTm9kZT1udWxsO3ZhciBkPWMubGFuZXN8Yy5jaGlsZExhbmVzLGU9ZCxmPWEucGVuZGluZ0xhbmVzJn5lO2EucGVuZGluZ0xhbmVzPWU7YS5zdXNwZW5kZWRMYW5lcz0wO2EucGluZ2VkTGFuZXM9MDthLmV4cGlyZWRMYW5lcyY9ZTthLm11dGFibGVSZWFkTGFuZXMmPWU7YS5lbnRhbmdsZWRMYW5lcyY9ZTtlPWEuZW50YW5nbGVtZW50cztmb3IodmFyIGc9YS5ldmVudFRpbWVzLGg9YS5leHBpcmF0aW9uVGltZXM7MDxmOyl7dmFyIGs9MzEtVmMoZiksbD0xPDxrO2Vba109MDtnW2tdPS0xO2hba109LTE7ZiY9fmx9bnVsbCE9PVxuQ2omJjA9PT0oZCYyNCkmJkNqLmhhcyhhKSYmQ2ouZGVsZXRlKGEpO2E9PT1VJiYoWT1VPW51bGwsVz0wKTsxPGMuZmxhZ3M/bnVsbCE9PWMubGFzdEVmZmVjdD8oYy5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9YyxkPWMuZmlyc3RFZmZlY3QpOmQ9YzpkPWMuZmlyc3RFZmZlY3Q7aWYobnVsbCE9PWQpe2U9WDtYfD0zMjtwai5jdXJyZW50PW51bGw7a2Y9ZmQ7Zz1OZSgpO2lmKE9lKGcpKXtpZihcInNlbGVjdGlvblN0YXJ0XCJpbiBnKWg9e3N0YXJ0Omcuc2VsZWN0aW9uU3RhcnQsZW5kOmcuc2VsZWN0aW9uRW5kfTtlbHNlIGE6aWYoaD0oaD1nLm93bmVyRG9jdW1lbnQpJiZoLmRlZmF1bHRWaWV3fHx3aW5kb3csKGw9aC5nZXRTZWxlY3Rpb24mJmguZ2V0U2VsZWN0aW9uKCkpJiYwIT09bC5yYW5nZUNvdW50KXtoPWwuYW5jaG9yTm9kZTtmPWwuYW5jaG9yT2Zmc2V0O2s9bC5mb2N1c05vZGU7bD1sLmZvY3VzT2Zmc2V0O3RyeXtoLm5vZGVUeXBlLGsubm9kZVR5cGV9Y2F0Y2godmEpe2g9bnVsbDtcbmJyZWFrIGF9dmFyIG49MCxBPS0xLHA9LTEsQz0wLHg9MCx3PWcsej1udWxsO2I6Zm9yKDs7KXtmb3IodmFyIHU7Oyl7dyE9PWh8fDAhPT1mJiYzIT09dy5ub2RlVHlwZXx8KEE9bitmKTt3IT09a3x8MCE9PWwmJjMhPT13Lm5vZGVUeXBlfHwocD1uK2wpOzM9PT13Lm5vZGVUeXBlJiYobis9dy5ub2RlVmFsdWUubGVuZ3RoKTtpZihudWxsPT09KHU9dy5maXJzdENoaWxkKSlicmVhazt6PXc7dz11fWZvcig7Oyl7aWYodz09PWcpYnJlYWsgYjt6PT09aCYmKytDPT09ZiYmKEE9bik7ej09PWsmJisreD09PWwmJihwPW4pO2lmKG51bGwhPT0odT13Lm5leHRTaWJsaW5nKSlicmVhazt3PXo7ej13LnBhcmVudE5vZGV9dz11fWg9LTE9PT1BfHwtMT09PXA/bnVsbDp7c3RhcnQ6QSxlbmQ6cH19ZWxzZSBoPW51bGw7aD1ofHx7c3RhcnQ6MCxlbmQ6MH19ZWxzZSBoPW51bGw7bGY9e2ZvY3VzZWRFbGVtOmcsc2VsZWN0aW9uUmFuZ2U6aH07ZmQ9ITE7SWo9bnVsbDtKaj0hMTtaPWQ7ZG8gdHJ5e2VrKCl9Y2F0Y2godmEpe2lmKG51bGw9PT1cblopdGhyb3cgRXJyb3IoeSgzMzApKTtXaShaLHZhKTtaPVoubmV4dEVmZmVjdH13aGlsZShudWxsIT09Wik7SWo9bnVsbDtaPWQ7ZG8gdHJ5e2ZvcihnPWE7bnVsbCE9PVo7KXt2YXIgdD1aLmZsYWdzO3QmMTYmJnBiKFouc3RhdGVOb2RlLFwiXCIpO2lmKHQmMTI4KXt2YXIgcT1aLmFsdGVybmF0ZTtpZihudWxsIT09cSl7dmFyIHY9cS5yZWY7bnVsbCE9PXYmJihcImZ1bmN0aW9uXCI9PT10eXBlb2Ygdj92KG51bGwpOnYuY3VycmVudD1udWxsKX19c3dpdGNoKHQmMTAzOCl7Y2FzZSAyOmZqKFopO1ouZmxhZ3MmPS0zO2JyZWFrO2Nhc2UgNjpmaihaKTtaLmZsYWdzJj0tMztpaihaLmFsdGVybmF0ZSxaKTticmVhaztjYXNlIDEwMjQ6Wi5mbGFncyY9LTEwMjU7YnJlYWs7Y2FzZSAxMDI4OlouZmxhZ3MmPS0xMDI1O2lqKFouYWx0ZXJuYXRlLFopO2JyZWFrO2Nhc2UgNDppaihaLmFsdGVybmF0ZSxaKTticmVhaztjYXNlIDg6aD1aO2NqKGcsaCk7dmFyIEo9aC5hbHRlcm5hdGU7ZGooaCk7bnVsbCE9PVxuSiYmZGooSil9Wj1aLm5leHRFZmZlY3R9fWNhdGNoKHZhKXtpZihudWxsPT09Wil0aHJvdyBFcnJvcih5KDMzMCkpO1dpKFosdmEpO1o9Wi5uZXh0RWZmZWN0fXdoaWxlKG51bGwhPT1aKTt2PWxmO3E9TmUoKTt0PXYuZm9jdXNlZEVsZW07Zz12LnNlbGVjdGlvblJhbmdlO2lmKHEhPT10JiZ0JiZ0Lm93bmVyRG9jdW1lbnQmJk1lKHQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdCkpe251bGwhPT1nJiZPZSh0KSYmKHE9Zy5zdGFydCx2PWcuZW5kLHZvaWQgMD09PXYmJih2PXEpLFwic2VsZWN0aW9uU3RhcnRcImluIHQ/KHQuc2VsZWN0aW9uU3RhcnQ9cSx0LnNlbGVjdGlvbkVuZD1NYXRoLm1pbih2LHQudmFsdWUubGVuZ3RoKSk6KHY9KHE9dC5vd25lckRvY3VtZW50fHxkb2N1bWVudCkmJnEuZGVmYXVsdFZpZXd8fHdpbmRvdyx2LmdldFNlbGVjdGlvbiYmKHY9di5nZXRTZWxlY3Rpb24oKSxoPXQudGV4dENvbnRlbnQubGVuZ3RoLEo9TWF0aC5taW4oZy5zdGFydCxoKSxnPXZvaWQgMD09PVxuZy5lbmQ/SjpNYXRoLm1pbihnLmVuZCxoKSwhdi5leHRlbmQmJko+ZyYmKGg9ZyxnPUosSj1oKSxoPUxlKHQsSiksZj1MZSh0LGcpLGgmJmYmJigxIT09di5yYW5nZUNvdW50fHx2LmFuY2hvck5vZGUhPT1oLm5vZGV8fHYuYW5jaG9yT2Zmc2V0IT09aC5vZmZzZXR8fHYuZm9jdXNOb2RlIT09Zi5ub2RlfHx2LmZvY3VzT2Zmc2V0IT09Zi5vZmZzZXQpJiYocT1xLmNyZWF0ZVJhbmdlKCkscS5zZXRTdGFydChoLm5vZGUsaC5vZmZzZXQpLHYucmVtb3ZlQWxsUmFuZ2VzKCksSj5nPyh2LmFkZFJhbmdlKHEpLHYuZXh0ZW5kKGYubm9kZSxmLm9mZnNldCkpOihxLnNldEVuZChmLm5vZGUsZi5vZmZzZXQpLHYuYWRkUmFuZ2UocSkpKSkpKTtxPVtdO2Zvcih2PXQ7dj12LnBhcmVudE5vZGU7KTE9PT12Lm5vZGVUeXBlJiZxLnB1c2goe2VsZW1lbnQ6dixsZWZ0OnYuc2Nyb2xsTGVmdCx0b3A6di5zY3JvbGxUb3B9KTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgdC5mb2N1cyYmdC5mb2N1cygpO2Zvcih0PVxuMDt0PHEubGVuZ3RoO3QrKyl2PXFbdF0sdi5lbGVtZW50LnNjcm9sbExlZnQ9di5sZWZ0LHYuZWxlbWVudC5zY3JvbGxUb3A9di50b3B9ZmQ9ISFrZjtsZj1rZj1udWxsO2EuY3VycmVudD1jO1o9ZDtkbyB0cnl7Zm9yKHQ9YTtudWxsIT09Wjspe3ZhciBLPVouZmxhZ3M7SyYzNiYmWWkodCxaLmFsdGVybmF0ZSxaKTtpZihLJjEyOCl7cT12b2lkIDA7dmFyIFE9Wi5yZWY7aWYobnVsbCE9PVEpe3ZhciBMPVouc3RhdGVOb2RlO3N3aXRjaChaLnRhZyl7Y2FzZSA1OnE9TDticmVhaztkZWZhdWx0OnE9TH1cImZ1bmN0aW9uXCI9PT10eXBlb2YgUT9RKHEpOlEuY3VycmVudD1xfX1aPVoubmV4dEVmZmVjdH19Y2F0Y2godmEpe2lmKG51bGw9PT1aKXRocm93IEVycm9yKHkoMzMwKSk7V2koWix2YSk7Wj1aLm5leHRFZmZlY3R9d2hpbGUobnVsbCE9PVopO1o9bnVsbDskZigpO1g9ZX1lbHNlIGEuY3VycmVudD1jO2lmKHhqKXhqPSExLHlqPWEsemo9YjtlbHNlIGZvcihaPWQ7bnVsbCE9PVo7KWI9XG5aLm5leHRFZmZlY3QsWi5uZXh0RWZmZWN0PW51bGwsWi5mbGFncyY4JiYoSz1aLEsuc2libGluZz1udWxsLEsuc3RhdGVOb2RlPW51bGwpLFo9YjtkPWEucGVuZGluZ0xhbmVzOzA9PT1kJiYoVGk9bnVsbCk7MT09PWQ/YT09PUVqP0RqKys6KERqPTAsRWo9YSk6RGo9MDtjPWMuc3RhdGVOb2RlO2lmKE1mJiZcImZ1bmN0aW9uXCI9PT10eXBlb2YgTWYub25Db21taXRGaWJlclJvb3QpdHJ5e01mLm9uQ29tbWl0RmliZXJSb290KExmLGMsdm9pZCAwLDY0PT09KGMuY3VycmVudC5mbGFncyY2NCkpfWNhdGNoKHZhKXt9TWooYSxPKCkpO2lmKFFpKXRocm93IFFpPSExLGE9UmksUmk9bnVsbCxhO2lmKDAhPT0oWCY4KSlyZXR1cm4gbnVsbDtpZygpO3JldHVybiBudWxsfVxuZnVuY3Rpb24gZWsoKXtmb3IoO251bGwhPT1aOyl7dmFyIGE9Wi5hbHRlcm5hdGU7Smp8fG51bGw9PT1Janx8KDAhPT0oWi5mbGFncyY4KT9kYyhaLElqKSYmKEpqPSEwKToxMz09PVoudGFnJiZtaihhLFopJiZkYyhaLElqKSYmKEpqPSEwKSk7dmFyIGI9Wi5mbGFnczswIT09KGImMjU2KSYmWGkoYSxaKTswPT09KGImNTEyKXx8eGp8fCh4aj0hMCxoZyg5NyxmdW5jdGlvbigpe09qKCk7cmV0dXJuIG51bGx9KSk7Wj1aLm5leHRFZmZlY3R9fWZ1bmN0aW9uIE9qKCl7aWYoOTAhPT16ail7dmFyIGE9OTc8emo/OTc6emo7emo9OTA7cmV0dXJuIGdnKGEsZmspfXJldHVybiExfWZ1bmN0aW9uICRpKGEsYil7QWoucHVzaChiLGEpO3hqfHwoeGo9ITAsaGcoOTcsZnVuY3Rpb24oKXtPaigpO3JldHVybiBudWxsfSkpfWZ1bmN0aW9uIFppKGEsYil7QmoucHVzaChiLGEpO3hqfHwoeGo9ITAsaGcoOTcsZnVuY3Rpb24oKXtPaigpO3JldHVybiBudWxsfSkpfVxuZnVuY3Rpb24gZmsoKXtpZihudWxsPT09eWopcmV0dXJuITE7dmFyIGE9eWo7eWo9bnVsbDtpZigwIT09KFgmNDgpKXRocm93IEVycm9yKHkoMzMxKSk7dmFyIGI9WDtYfD0zMjt2YXIgYz1CajtCaj1bXTtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrPTIpe3ZhciBlPWNbZF0sZj1jW2QrMV0sZz1lLmRlc3Ryb3k7ZS5kZXN0cm95PXZvaWQgMDtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZyl0cnl7ZygpfWNhdGNoKGspe2lmKG51bGw9PT1mKXRocm93IEVycm9yKHkoMzMwKSk7V2koZixrKX19Yz1BajtBaj1bXTtmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCs9Mil7ZT1jW2RdO2Y9Y1tkKzFdO3RyeXt2YXIgaD1lLmNyZWF0ZTtlLmRlc3Ryb3k9aCgpfWNhdGNoKGspe2lmKG51bGw9PT1mKXRocm93IEVycm9yKHkoMzMwKSk7V2koZixrKX19Zm9yKGg9YS5jdXJyZW50LmZpcnN0RWZmZWN0O251bGwhPT1oOylhPWgubmV4dEVmZmVjdCxoLm5leHRFZmZlY3Q9bnVsbCxoLmZsYWdzJjgmJihoLnNpYmxpbmc9XG5udWxsLGguc3RhdGVOb2RlPW51bGwpLGg9YTtYPWI7aWcoKTtyZXR1cm4hMH1mdW5jdGlvbiBnayhhLGIsYyl7Yj1NaShjLGIpO2I9UGkoYSxiLDEpO0FnKGEsYik7Yj1IZygpO2E9S2ooYSwxKTtudWxsIT09YSYmKCRjKGEsMSxiKSxNaihhLGIpKX1cbmZ1bmN0aW9uIFdpKGEsYil7aWYoMz09PWEudGFnKWdrKGEsYSxiKTtlbHNlIGZvcih2YXIgYz1hLnJldHVybjtudWxsIT09Yzspe2lmKDM9PT1jLnRhZyl7Z2soYyxhLGIpO2JyZWFrfWVsc2UgaWYoMT09PWMudGFnKXt2YXIgZD1jLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYy50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGQuY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09VGl8fCFUaS5oYXMoZCkpKXthPU1pKGIsYSk7dmFyIGU9U2koYyxhLDEpO0FnKGMsZSk7ZT1IZygpO2M9S2ooYywxKTtpZihudWxsIT09YykkYyhjLDEsZSksTWooYyxlKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBkLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PVRpfHwhVGkuaGFzKGQpKSl0cnl7ZC5jb21wb25lbnREaWRDYXRjaChiLGEpfWNhdGNoKGYpe31icmVha319Yz1jLnJldHVybn19XG5mdW5jdGlvbiBZaihhLGIsYyl7dmFyIGQ9YS5waW5nQ2FjaGU7bnVsbCE9PWQmJmQuZGVsZXRlKGIpO2I9SGcoKTthLnBpbmdlZExhbmVzfD1hLnN1c3BlbmRlZExhbmVzJmM7VT09PWEmJihXJmMpPT09YyYmKDQ9PT1WfHwzPT09ViYmKFcmNjI5MTQ1NjApPT09VyYmNTAwPk8oKS1qaj9RaihhLDApOnVqfD1jKTtNaihhLGIpfWZ1bmN0aW9uIGxqKGEsYil7dmFyIGM9YS5zdGF0ZU5vZGU7bnVsbCE9PWMmJmMuZGVsZXRlKGIpO2I9MDswPT09YiYmKGI9YS5tb2RlLDA9PT0oYiYyKT9iPTE6MD09PShiJjQpP2I9OTk9PT1lZygpPzE6MjooMD09PUdqJiYoR2o9dGopLGI9WWMoNjI5MTQ1NjAmfkdqKSwwPT09YiYmKGI9NDE5NDMwNCkpKTtjPUhnKCk7YT1LaihhLGIpO251bGwhPT1hJiYoJGMoYSxiLGMpLE1qKGEsYykpfXZhciBjaztcbmNrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1iLmxhbmVzO2lmKG51bGwhPT1hKWlmKGEubWVtb2l6ZWRQcm9wcyE9PWIucGVuZGluZ1Byb3BzfHxOLmN1cnJlbnQpdWc9ITA7ZWxzZSBpZigwIT09KGMmZCkpdWc9MCE9PShhLmZsYWdzJjE2Mzg0KT8hMDohMTtlbHNle3VnPSExO3N3aXRjaChiLnRhZyl7Y2FzZSAzOnJpKGIpO3NoKCk7YnJlYWs7Y2FzZSA1OmdoKGIpO2JyZWFrO2Nhc2UgMTpGZihiLnR5cGUpJiZKZihiKTticmVhaztjYXNlIDQ6ZWgoYixiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTticmVhaztjYXNlIDEwOmQ9Yi5tZW1vaXplZFByb3BzLnZhbHVlO3ZhciBlPWIudHlwZS5fY29udGV4dDtJKG1nLGUuX2N1cnJlbnRWYWx1ZSk7ZS5fY3VycmVudFZhbHVlPWQ7YnJlYWs7Y2FzZSAxMzppZihudWxsIT09Yi5tZW1vaXplZFN0YXRlKXtpZigwIT09KGMmYi5jaGlsZC5jaGlsZExhbmVzKSlyZXR1cm4gdGkoYSxiLGMpO0koUCxQLmN1cnJlbnQmMSk7Yj1oaShhLGIsYyk7cmV0dXJuIG51bGwhPT1cbmI/Yi5zaWJsaW5nOm51bGx9SShQLFAuY3VycmVudCYxKTticmVhaztjYXNlIDE5OmQ9MCE9PShjJmIuY2hpbGRMYW5lcyk7aWYoMCE9PShhLmZsYWdzJjY0KSl7aWYoZClyZXR1cm4gQWkoYSxiLGMpO2IuZmxhZ3N8PTY0fWU9Yi5tZW1vaXplZFN0YXRlO251bGwhPT1lJiYoZS5yZW5kZXJpbmc9bnVsbCxlLnRhaWw9bnVsbCxlLmxhc3RFZmZlY3Q9bnVsbCk7SShQLFAuY3VycmVudCk7aWYoZClicmVhaztlbHNlIHJldHVybiBudWxsO2Nhc2UgMjM6Y2FzZSAyNDpyZXR1cm4gYi5sYW5lcz0wLG1pKGEsYixjKX1yZXR1cm4gaGkoYSxiLGMpfWVsc2UgdWc9ITE7Yi5sYW5lcz0wO3N3aXRjaChiLnRhZyl7Y2FzZSAyOmQ9Yi50eXBlO251bGwhPT1hJiYoYS5hbHRlcm5hdGU9bnVsbCxiLmFsdGVybmF0ZT1udWxsLGIuZmxhZ3N8PTIpO2E9Yi5wZW5kaW5nUHJvcHM7ZT1FZihiLE0uY3VycmVudCk7dGcoYixjKTtlPUNoKG51bGwsYixkLGEsZSxjKTtiLmZsYWdzfD0xO2lmKFwib2JqZWN0XCI9PT1cbnR5cGVvZiBlJiZudWxsIT09ZSYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGUucmVuZGVyJiZ2b2lkIDA9PT1lLiQkdHlwZW9mKXtiLnRhZz0xO2IubWVtb2l6ZWRTdGF0ZT1udWxsO2IudXBkYXRlUXVldWU9bnVsbDtpZihGZihkKSl7dmFyIGY9ITA7SmYoYil9ZWxzZSBmPSExO2IubWVtb2l6ZWRTdGF0ZT1udWxsIT09ZS5zdGF0ZSYmdm9pZCAwIT09ZS5zdGF0ZT9lLnN0YXRlOm51bGw7eGcoYik7dmFyIGc9ZC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XCJmdW5jdGlvblwiPT09dHlwZW9mIGcmJkdnKGIsZCxnLGEpO2UudXBkYXRlcj1LZztiLnN0YXRlTm9kZT1lO2UuX3JlYWN0SW50ZXJuYWxzPWI7T2coYixkLGEsYyk7Yj1xaShudWxsLGIsZCwhMCxmLGMpfWVsc2UgYi50YWc9MCxmaShudWxsLGIsZSxjKSxiPWIuY2hpbGQ7cmV0dXJuIGI7Y2FzZSAxNjplPWIuZWxlbWVudFR5cGU7YTp7bnVsbCE9PWEmJihhLmFsdGVybmF0ZT1udWxsLGIuYWx0ZXJuYXRlPW51bGwsYi5mbGFnc3w9Mik7XG5hPWIucGVuZGluZ1Byb3BzO2Y9ZS5faW5pdDtlPWYoZS5fcGF5bG9hZCk7Yi50eXBlPWU7Zj1iLnRhZz1oayhlKTthPWxnKGUsYSk7c3dpdGNoKGYpe2Nhc2UgMDpiPWxpKG51bGwsYixlLGEsYyk7YnJlYWsgYTtjYXNlIDE6Yj1waShudWxsLGIsZSxhLGMpO2JyZWFrIGE7Y2FzZSAxMTpiPWdpKG51bGwsYixlLGEsYyk7YnJlYWsgYTtjYXNlIDE0OmI9aWkobnVsbCxiLGUsbGcoZS50eXBlLGEpLGQsYyk7YnJlYWsgYX10aHJvdyBFcnJvcih5KDMwNixlLFwiXCIpKTt9cmV0dXJuIGI7Y2FzZSAwOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLGxpKGEsYixkLGUsYyk7Y2FzZSAxOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLHBpKGEsYixkLGUsYyk7Y2FzZSAzOnJpKGIpO2Q9Yi51cGRhdGVRdWV1ZTtpZihudWxsPT09YXx8bnVsbD09PWQpdGhyb3cgRXJyb3IoeSgyODIpKTtcbmQ9Yi5wZW5kaW5nUHJvcHM7ZT1iLm1lbW9pemVkU3RhdGU7ZT1udWxsIT09ZT9lLmVsZW1lbnQ6bnVsbDt5ZyhhLGIpO0NnKGIsZCxudWxsLGMpO2Q9Yi5tZW1vaXplZFN0YXRlLmVsZW1lbnQ7aWYoZD09PWUpc2goKSxiPWhpKGEsYixjKTtlbHNle2U9Yi5zdGF0ZU5vZGU7aWYoZj1lLmh5ZHJhdGUpa2g9cmYoYi5zdGF0ZU5vZGUuY29udGFpbmVySW5mby5maXJzdENoaWxkKSxqaD1iLGY9bGg9ITA7aWYoZil7YT1lLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE7aWYobnVsbCE9YSlmb3IoZT0wO2U8YS5sZW5ndGg7ZSs9MilmPWFbZV0sZi5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeT1hW2UrMV0sdGgucHVzaChmKTtjPVpnKGIsbnVsbCxkLGMpO2ZvcihiLmNoaWxkPWM7YzspYy5mbGFncz1jLmZsYWdzJi0zfDEwMjQsYz1jLnNpYmxpbmd9ZWxzZSBmaShhLGIsZCxjKSxzaCgpO2I9Yi5jaGlsZH1yZXR1cm4gYjtjYXNlIDU6cmV0dXJuIGdoKGIpLG51bGw9PT1hJiZcbnBoKGIpLGQ9Yi50eXBlLGU9Yi5wZW5kaW5nUHJvcHMsZj1udWxsIT09YT9hLm1lbW9pemVkUHJvcHM6bnVsbCxnPWUuY2hpbGRyZW4sbmYoZCxlKT9nPW51bGw6bnVsbCE9PWYmJm5mKGQsZikmJihiLmZsYWdzfD0xNiksb2koYSxiKSxmaShhLGIsZyxjKSxiLmNoaWxkO2Nhc2UgNjpyZXR1cm4gbnVsbD09PWEmJnBoKGIpLG51bGw7Y2FzZSAxMzpyZXR1cm4gdGkoYSxiLGMpO2Nhc2UgNDpyZXR1cm4gZWgoYixiLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxkPWIucGVuZGluZ1Byb3BzLG51bGw9PT1hP2IuY2hpbGQ9WWcoYixudWxsLGQsYyk6ZmkoYSxiLGQsYyksYi5jaGlsZDtjYXNlIDExOnJldHVybiBkPWIudHlwZSxlPWIucGVuZGluZ1Byb3BzLGU9Yi5lbGVtZW50VHlwZT09PWQ/ZTpsZyhkLGUpLGdpKGEsYixkLGUsYyk7Y2FzZSA3OnJldHVybiBmaShhLGIsYi5wZW5kaW5nUHJvcHMsYyksYi5jaGlsZDtjYXNlIDg6cmV0dXJuIGZpKGEsYixiLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbmMpLGIuY2hpbGQ7Y2FzZSAxMjpyZXR1cm4gZmkoYSxiLGIucGVuZGluZ1Byb3BzLmNoaWxkcmVuLGMpLGIuY2hpbGQ7Y2FzZSAxMDphOntkPWIudHlwZS5fY29udGV4dDtlPWIucGVuZGluZ1Byb3BzO2c9Yi5tZW1vaXplZFByb3BzO2Y9ZS52YWx1ZTt2YXIgaD1iLnR5cGUuX2NvbnRleHQ7SShtZyxoLl9jdXJyZW50VmFsdWUpO2guX2N1cnJlbnRWYWx1ZT1mO2lmKG51bGwhPT1nKWlmKGg9Zy52YWx1ZSxmPUhlKGgsZik/MDooXCJmdW5jdGlvblwiPT09dHlwZW9mIGQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzP2QuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzKGgsZik6MTA3Mzc0MTgyMyl8MCwwPT09Zil7aWYoZy5jaGlsZHJlbj09PWUuY2hpbGRyZW4mJiFOLmN1cnJlbnQpe2I9aGkoYSxiLGMpO2JyZWFrIGF9fWVsc2UgZm9yKGg9Yi5jaGlsZCxudWxsIT09aCYmKGgucmV0dXJuPWIpO251bGwhPT1oOyl7dmFyIGs9aC5kZXBlbmRlbmNpZXM7aWYobnVsbCE9PWspe2c9aC5jaGlsZDtmb3IodmFyIGw9XG5rLmZpcnN0Q29udGV4dDtudWxsIT09bDspe2lmKGwuY29udGV4dD09PWQmJjAhPT0obC5vYnNlcnZlZEJpdHMmZikpezE9PT1oLnRhZyYmKGw9emcoLTEsYyYtYyksbC50YWc9MixBZyhoLGwpKTtoLmxhbmVzfD1jO2w9aC5hbHRlcm5hdGU7bnVsbCE9PWwmJihsLmxhbmVzfD1jKTtzZyhoLnJldHVybixjKTtrLmxhbmVzfD1jO2JyZWFrfWw9bC5uZXh0fX1lbHNlIGc9MTA9PT1oLnRhZz9oLnR5cGU9PT1iLnR5cGU/bnVsbDpoLmNoaWxkOmguY2hpbGQ7aWYobnVsbCE9PWcpZy5yZXR1cm49aDtlbHNlIGZvcihnPWg7bnVsbCE9PWc7KXtpZihnPT09Yil7Zz1udWxsO2JyZWFrfWg9Zy5zaWJsaW5nO2lmKG51bGwhPT1oKXtoLnJldHVybj1nLnJldHVybjtnPWg7YnJlYWt9Zz1nLnJldHVybn1oPWd9ZmkoYSxiLGUuY2hpbGRyZW4sYyk7Yj1iLmNoaWxkfXJldHVybiBiO2Nhc2UgOTpyZXR1cm4gZT1iLnR5cGUsZj1iLnBlbmRpbmdQcm9wcyxkPWYuY2hpbGRyZW4sdGcoYixjKSxlPXZnKGUsXG5mLnVuc3RhYmxlX29ic2VydmVkQml0cyksZD1kKGUpLGIuZmxhZ3N8PTEsZmkoYSxiLGQsYyksYi5jaGlsZDtjYXNlIDE0OnJldHVybiBlPWIudHlwZSxmPWxnKGUsYi5wZW5kaW5nUHJvcHMpLGY9bGcoZS50eXBlLGYpLGlpKGEsYixlLGYsZCxjKTtjYXNlIDE1OnJldHVybiBraShhLGIsYi50eXBlLGIucGVuZGluZ1Byb3BzLGQsYyk7Y2FzZSAxNzpyZXR1cm4gZD1iLnR5cGUsZT1iLnBlbmRpbmdQcm9wcyxlPWIuZWxlbWVudFR5cGU9PT1kP2U6bGcoZCxlKSxudWxsIT09YSYmKGEuYWx0ZXJuYXRlPW51bGwsYi5hbHRlcm5hdGU9bnVsbCxiLmZsYWdzfD0yKSxiLnRhZz0xLEZmKGQpPyhhPSEwLEpmKGIpKTphPSExLHRnKGIsYyksTWcoYixkLGUpLE9nKGIsZCxlLGMpLHFpKG51bGwsYixkLCEwLGEsYyk7Y2FzZSAxOTpyZXR1cm4gQWkoYSxiLGMpO2Nhc2UgMjM6cmV0dXJuIG1pKGEsYixjKTtjYXNlIDI0OnJldHVybiBtaShhLGIsYyl9dGhyb3cgRXJyb3IoeSgxNTYsYi50YWcpKTtcbn07ZnVuY3Rpb24gaWsoYSxiLGMsZCl7dGhpcy50YWc9YTt0aGlzLmtleT1jO3RoaXMuc2libGluZz10aGlzLmNoaWxkPXRoaXMucmV0dXJuPXRoaXMuc3RhdGVOb2RlPXRoaXMudHlwZT10aGlzLmVsZW1lbnRUeXBlPW51bGw7dGhpcy5pbmRleD0wO3RoaXMucmVmPW51bGw7dGhpcy5wZW5kaW5nUHJvcHM9Yjt0aGlzLmRlcGVuZGVuY2llcz10aGlzLm1lbW9pemVkU3RhdGU9dGhpcy51cGRhdGVRdWV1ZT10aGlzLm1lbW9pemVkUHJvcHM9bnVsbDt0aGlzLm1vZGU9ZDt0aGlzLmZsYWdzPTA7dGhpcy5sYXN0RWZmZWN0PXRoaXMuZmlyc3RFZmZlY3Q9dGhpcy5uZXh0RWZmZWN0PW51bGw7dGhpcy5jaGlsZExhbmVzPXRoaXMubGFuZXM9MDt0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uIG5oKGEsYixjLGQpe3JldHVybiBuZXcgaWsoYSxiLGMsZCl9ZnVuY3Rpb24gamkoYSl7YT1hLnByb3RvdHlwZTtyZXR1cm4hKCFhfHwhYS5pc1JlYWN0Q29tcG9uZW50KX1cbmZ1bmN0aW9uIGhrKGEpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXJldHVybiBqaShhKT8xOjA7aWYodm9pZCAwIT09YSYmbnVsbCE9PWEpe2E9YS4kJHR5cGVvZjtpZihhPT09QWEpcmV0dXJuIDExO2lmKGE9PT1EYSlyZXR1cm4gMTR9cmV0dXJuIDJ9XG5mdW5jdGlvbiBUZyhhLGIpe3ZhciBjPWEuYWx0ZXJuYXRlO251bGw9PT1jPyhjPW5oKGEudGFnLGIsYS5rZXksYS5tb2RlKSxjLmVsZW1lbnRUeXBlPWEuZWxlbWVudFR5cGUsYy50eXBlPWEudHlwZSxjLnN0YXRlTm9kZT1hLnN0YXRlTm9kZSxjLmFsdGVybmF0ZT1hLGEuYWx0ZXJuYXRlPWMpOihjLnBlbmRpbmdQcm9wcz1iLGMudHlwZT1hLnR5cGUsYy5mbGFncz0wLGMubmV4dEVmZmVjdD1udWxsLGMuZmlyc3RFZmZlY3Q9bnVsbCxjLmxhc3RFZmZlY3Q9bnVsbCk7Yy5jaGlsZExhbmVzPWEuY2hpbGRMYW5lcztjLmxhbmVzPWEubGFuZXM7Yy5jaGlsZD1hLmNoaWxkO2MubWVtb2l6ZWRQcm9wcz1hLm1lbW9pemVkUHJvcHM7Yy5tZW1vaXplZFN0YXRlPWEubWVtb2l6ZWRTdGF0ZTtjLnVwZGF0ZVF1ZXVlPWEudXBkYXRlUXVldWU7Yj1hLmRlcGVuZGVuY2llcztjLmRlcGVuZGVuY2llcz1udWxsPT09Yj9udWxsOntsYW5lczpiLmxhbmVzLGZpcnN0Q29udGV4dDpiLmZpcnN0Q29udGV4dH07XG5jLnNpYmxpbmc9YS5zaWJsaW5nO2MuaW5kZXg9YS5pbmRleDtjLnJlZj1hLnJlZjtyZXR1cm4gY31cbmZ1bmN0aW9uIFZnKGEsYixjLGQsZSxmKXt2YXIgZz0yO2Q9YTtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgYSlqaShhKSYmKGc9MSk7ZWxzZSBpZihcInN0cmluZ1wiPT09dHlwZW9mIGEpZz01O2Vsc2UgYTpzd2l0Y2goYSl7Y2FzZSB1YTpyZXR1cm4gWGcoYy5jaGlsZHJlbixlLGYsYik7Y2FzZSBIYTpnPTg7ZXw9MTY7YnJlYWs7Y2FzZSB3YTpnPTg7ZXw9MTticmVhaztjYXNlIHhhOnJldHVybiBhPW5oKDEyLGMsYixlfDgpLGEuZWxlbWVudFR5cGU9eGEsYS50eXBlPXhhLGEubGFuZXM9ZixhO2Nhc2UgQmE6cmV0dXJuIGE9bmgoMTMsYyxiLGUpLGEudHlwZT1CYSxhLmVsZW1lbnRUeXBlPUJhLGEubGFuZXM9ZixhO2Nhc2UgQ2E6cmV0dXJuIGE9bmgoMTksYyxiLGUpLGEuZWxlbWVudFR5cGU9Q2EsYS5sYW5lcz1mLGE7Y2FzZSBJYTpyZXR1cm4gdmkoYyxlLGYsYik7Y2FzZSBKYTpyZXR1cm4gYT1uaCgyNCxjLGIsZSksYS5lbGVtZW50VHlwZT1KYSxhLmxhbmVzPWYsYTtkZWZhdWx0OmlmKFwib2JqZWN0XCI9PT1cbnR5cGVvZiBhJiZudWxsIT09YSlzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSB5YTpnPTEwO2JyZWFrIGE7Y2FzZSB6YTpnPTk7YnJlYWsgYTtjYXNlIEFhOmc9MTE7YnJlYWsgYTtjYXNlIERhOmc9MTQ7YnJlYWsgYTtjYXNlIEVhOmc9MTY7ZD1udWxsO2JyZWFrIGE7Y2FzZSBGYTpnPTIyO2JyZWFrIGF9dGhyb3cgRXJyb3IoeSgxMzAsbnVsbD09YT9hOnR5cGVvZiBhLFwiXCIpKTt9Yj1uaChnLGMsYixlKTtiLmVsZW1lbnRUeXBlPWE7Yi50eXBlPWQ7Yi5sYW5lcz1mO3JldHVybiBifWZ1bmN0aW9uIFhnKGEsYixjLGQpe2E9bmgoNyxhLGQsYik7YS5sYW5lcz1jO3JldHVybiBhfWZ1bmN0aW9uIHZpKGEsYixjLGQpe2E9bmgoMjMsYSxkLGIpO2EuZWxlbWVudFR5cGU9SWE7YS5sYW5lcz1jO3JldHVybiBhfWZ1bmN0aW9uIFVnKGEsYixjKXthPW5oKDYsYSxudWxsLGIpO2EubGFuZXM9YztyZXR1cm4gYX1cbmZ1bmN0aW9uIFdnKGEsYixjKXtiPW5oKDQsbnVsbCE9PWEuY2hpbGRyZW4/YS5jaGlsZHJlbjpbXSxhLmtleSxiKTtiLmxhbmVzPWM7Yi5zdGF0ZU5vZGU9e2NvbnRhaW5lckluZm86YS5jb250YWluZXJJbmZvLHBlbmRpbmdDaGlsZHJlbjpudWxsLGltcGxlbWVudGF0aW9uOmEuaW1wbGVtZW50YXRpb259O3JldHVybiBifVxuZnVuY3Rpb24gamsoYSxiLGMpe3RoaXMudGFnPWI7dGhpcy5jb250YWluZXJJbmZvPWE7dGhpcy5maW5pc2hlZFdvcms9dGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGw7dGhpcy50aW1lb3V0SGFuZGxlPS0xO3RoaXMucGVuZGluZ0NvbnRleHQ9dGhpcy5jb250ZXh0PW51bGw7dGhpcy5oeWRyYXRlPWM7dGhpcy5jYWxsYmFja05vZGU9bnVsbDt0aGlzLmNhbGxiYWNrUHJpb3JpdHk9MDt0aGlzLmV2ZW50VGltZXM9WmMoMCk7dGhpcy5leHBpcmF0aW9uVGltZXM9WmMoLTEpO3RoaXMuZW50YW5nbGVkTGFuZXM9dGhpcy5maW5pc2hlZExhbmVzPXRoaXMubXV0YWJsZVJlYWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MDt0aGlzLmVudGFuZ2xlbWVudHM9WmMoMCk7dGhpcy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPW51bGx9XG5mdW5jdGlvbiBrayhhLGIsYyl7dmFyIGQ9Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOnRhLGtleTpudWxsPT1kP251bGw6XCJcIitkLGNoaWxkcmVuOmEsY29udGFpbmVySW5mbzpiLGltcGxlbWVudGF0aW9uOmN9fVxuZnVuY3Rpb24gbGsoYSxiLGMsZCl7dmFyIGU9Yi5jdXJyZW50LGY9SGcoKSxnPUlnKGUpO2E6aWYoYyl7Yz1jLl9yZWFjdEludGVybmFscztiOntpZihaYihjKSE9PWN8fDEhPT1jLnRhZyl0aHJvdyBFcnJvcih5KDE3MCkpO3ZhciBoPWM7ZG97c3dpdGNoKGgudGFnKXtjYXNlIDM6aD1oLnN0YXRlTm9kZS5jb250ZXh0O2JyZWFrIGI7Y2FzZSAxOmlmKEZmKGgudHlwZSkpe2g9aC5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7YnJlYWsgYn19aD1oLnJldHVybn13aGlsZShudWxsIT09aCk7dGhyb3cgRXJyb3IoeSgxNzEpKTt9aWYoMT09PWMudGFnKXt2YXIgaz1jLnR5cGU7aWYoRmYoaykpe2M9SWYoYyxrLGgpO2JyZWFrIGF9fWM9aH1lbHNlIGM9Q2Y7bnVsbD09PWIuY29udGV4dD9iLmNvbnRleHQ9YzpiLnBlbmRpbmdDb250ZXh0PWM7Yj16ZyhmLGcpO2IucGF5bG9hZD17ZWxlbWVudDphfTtkPXZvaWQgMD09PWQ/bnVsbDpkO251bGwhPT1cbmQmJihiLmNhbGxiYWNrPWQpO0FnKGUsYik7SmcoZSxnLGYpO3JldHVybiBnfWZ1bmN0aW9uIG1rKGEpe2E9YS5jdXJyZW50O2lmKCFhLmNoaWxkKXJldHVybiBudWxsO3N3aXRjaChhLmNoaWxkLnRhZyl7Y2FzZSA1OnJldHVybiBhLmNoaWxkLnN0YXRlTm9kZTtkZWZhdWx0OnJldHVybiBhLmNoaWxkLnN0YXRlTm9kZX19ZnVuY3Rpb24gbmsoYSxiKXthPWEubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09YSYmbnVsbCE9PWEuZGVoeWRyYXRlZCl7dmFyIGM9YS5yZXRyeUxhbmU7YS5yZXRyeUxhbmU9MCE9PWMmJmM8Yj9jOmJ9fWZ1bmN0aW9uIG9rKGEsYil7bmsoYSxiKTsoYT1hLmFsdGVybmF0ZSkmJm5rKGEsYil9ZnVuY3Rpb24gcGsoKXtyZXR1cm4gbnVsbH1cbmZ1bmN0aW9uIHFrKGEsYixjKXt2YXIgZD1udWxsIT1jJiZudWxsIT1jLmh5ZHJhdGlvbk9wdGlvbnMmJmMuaHlkcmF0aW9uT3B0aW9ucy5tdXRhYmxlU291cmNlc3x8bnVsbDtjPW5ldyBqayhhLGIsbnVsbCE9YyYmITA9PT1jLmh5ZHJhdGUpO2I9bmgoMyxudWxsLG51bGwsMj09PWI/NzoxPT09Yj8zOjApO2MuY3VycmVudD1iO2Iuc3RhdGVOb2RlPWM7eGcoYik7YVtmZl09Yy5jdXJyZW50O2NmKDg9PT1hLm5vZGVUeXBlP2EucGFyZW50Tm9kZTphKTtpZihkKWZvcihhPTA7YTxkLmxlbmd0aDthKyspe2I9ZFthXTt2YXIgZT1iLl9nZXRWZXJzaW9uO2U9ZShiLl9zb3VyY2UpO251bGw9PWMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT9jLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9W2IsZV06Yy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLnB1c2goYixlKX10aGlzLl9pbnRlcm5hbFJvb3Q9Y31cbnFrLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oYSl7bGsoYSx0aGlzLl9pbnRlcm5hbFJvb3QsbnVsbCxudWxsKX07cWsucHJvdG90eXBlLnVubW91bnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pbnRlcm5hbFJvb3QsYj1hLmNvbnRhaW5lckluZm87bGsobnVsbCxhLG51bGwsZnVuY3Rpb24oKXtiW2ZmXT1udWxsfSl9O2Z1bmN0aW9uIHJrKGEpe3JldHVybiEoIWF8fDEhPT1hLm5vZGVUeXBlJiY5IT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlJiYoOCE9PWEubm9kZVR5cGV8fFwiIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlIFwiIT09YS5ub2RlVmFsdWUpKX1cbmZ1bmN0aW9uIHNrKGEsYil7Ynx8KGI9YT85PT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVudDphLmZpcnN0Q2hpbGQ6bnVsbCxiPSEoIWJ8fDEhPT1iLm5vZGVUeXBlfHwhYi5oYXNBdHRyaWJ1dGUoXCJkYXRhLXJlYWN0cm9vdFwiKSkpO2lmKCFiKWZvcih2YXIgYztjPWEubGFzdENoaWxkOylhLnJlbW92ZUNoaWxkKGMpO3JldHVybiBuZXcgcWsoYSwwLGI/e2h5ZHJhdGU6ITB9OnZvaWQgMCl9XG5mdW5jdGlvbiB0ayhhLGIsYyxkLGUpe3ZhciBmPWMuX3JlYWN0Um9vdENvbnRhaW5lcjtpZihmKXt2YXIgZz1mLl9pbnRlcm5hbFJvb3Q7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIGUpe3ZhciBoPWU7ZT1mdW5jdGlvbigpe3ZhciBhPW1rKGcpO2guY2FsbChhKX19bGsoYixnLGEsZSl9ZWxzZXtmPWMuX3JlYWN0Um9vdENvbnRhaW5lcj1zayhjLGQpO2c9Zi5faW50ZXJuYWxSb290O2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlKXt2YXIgaz1lO2U9ZnVuY3Rpb24oKXt2YXIgYT1tayhnKTtrLmNhbGwoYSl9fVhqKGZ1bmN0aW9uKCl7bGsoYixnLGEsZSl9KX1yZXR1cm4gbWsoZyl9ZWM9ZnVuY3Rpb24oYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9SGcoKTtKZyhhLDQsYik7b2soYSw0KX19O2ZjPWZ1bmN0aW9uKGEpe2lmKDEzPT09YS50YWcpe3ZhciBiPUhnKCk7SmcoYSw2NzEwODg2NCxiKTtvayhhLDY3MTA4ODY0KX19O1xuZ2M9ZnVuY3Rpb24oYSl7aWYoMTM9PT1hLnRhZyl7dmFyIGI9SGcoKSxjPUlnKGEpO0pnKGEsYyxiKTtvayhhLGMpfX07aGM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYigpfTtcbnliPWZ1bmN0aW9uKGEsYixjKXtzd2l0Y2goYil7Y2FzZSBcImlucHV0XCI6YWIoYSxjKTtiPWMubmFtZTtpZihcInJhZGlvXCI9PT1jLnR5cGUmJm51bGwhPWIpe2ZvcihjPWE7Yy5wYXJlbnROb2RlOyljPWMucGFyZW50Tm9kZTtjPWMucXVlcnlTZWxlY3RvckFsbChcImlucHV0W25hbWU9XCIrSlNPTi5zdHJpbmdpZnkoXCJcIitiKSsnXVt0eXBlPVwicmFkaW9cIl0nKTtmb3IoYj0wO2I8Yy5sZW5ndGg7YisrKXt2YXIgZD1jW2JdO2lmKGQhPT1hJiZkLmZvcm09PT1hLmZvcm0pe3ZhciBlPURiKGQpO2lmKCFlKXRocm93IEVycm9yKHkoOTApKTtXYShkKTthYihkLGUpfX19YnJlYWs7Y2FzZSBcInRleHRhcmVhXCI6aWIoYSxjKTticmVhaztjYXNlIFwic2VsZWN0XCI6Yj1jLnZhbHVlLG51bGwhPWImJmZiKGEsISFjLm11bHRpcGxlLGIsITEpfX07R2I9V2o7XG5IYj1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPVg7WHw9NDt0cnl7cmV0dXJuIGdnKDk4LGEuYmluZChudWxsLGIsYyxkLGUpKX1maW5hbGx5e1g9ZiwwPT09WCYmKHdqKCksaWcoKSl9fTtJYj1mdW5jdGlvbigpezA9PT0oWCY0OSkmJihWaigpLE9qKCkpfTtKYj1mdW5jdGlvbihhLGIpe3ZhciBjPVg7WHw9Mjt0cnl7cmV0dXJuIGEoYil9ZmluYWxseXtYPWMsMD09PVgmJih3aigpLGlnKCkpfX07ZnVuY3Rpb24gdWsoYSxiKXt2YXIgYz0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZighcmsoYikpdGhyb3cgRXJyb3IoeSgyMDApKTtyZXR1cm4ga2soYSxiLG51bGwsYyl9dmFyIHZrPXtFdmVudHM6W0NiLHVlLERiLEViLEZiLE9qLHtjdXJyZW50OiExfV19LHdrPXtmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTp3YyxidW5kbGVUeXBlOjAsdmVyc2lvbjpcIjE3LjAuMlwiLHJlbmRlcmVyUGFja2FnZU5hbWU6XCJyZWFjdC1kb21cIn07XG52YXIgeGs9e2J1bmRsZVR5cGU6d2suYnVuZGxlVHlwZSx2ZXJzaW9uOndrLnZlcnNpb24scmVuZGVyZXJQYWNrYWdlTmFtZTp3ay5yZW5kZXJlclBhY2thZ2VOYW1lLHJlbmRlcmVyQ29uZmlnOndrLnJlbmRlcmVyQ29uZmlnLG92ZXJyaWRlSG9va1N0YXRlOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wczpudWxsLG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6bnVsbCxzZXRTdXNwZW5zZUhhbmRsZXI6bnVsbCxzY2hlZHVsZVVwZGF0ZTpudWxsLGN1cnJlbnREaXNwYXRjaGVyUmVmOnJhLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6ZnVuY3Rpb24oYSl7YT1jYyhhKTtyZXR1cm4gbnVsbD09PWE/bnVsbDphLnN0YXRlTm9kZX0sZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6d2suZmluZEZpYmVyQnlIb3N0SW5zdGFuY2V8fFxucGssZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOm51bGwsc2NoZWR1bGVSZWZyZXNoOm51bGwsc2NoZWR1bGVSb290Om51bGwsc2V0UmVmcmVzaEhhbmRsZXI6bnVsbCxnZXRDdXJyZW50RmliZXI6bnVsbH07aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pe3ZhciB5az1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYoIXlrLmlzRGlzYWJsZWQmJnlrLnN1cHBvcnRzRmliZXIpdHJ5e0xmPXlrLmluamVjdCh4ayksTWY9eWt9Y2F0Y2goYSl7fX1leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPXZrO2V4cG9ydHMuY3JlYXRlUG9ydGFsPXVrO1xuZXhwb3J0cy5maW5kRE9NTm9kZT1mdW5jdGlvbihhKXtpZihudWxsPT1hKXJldHVybiBudWxsO2lmKDE9PT1hLm5vZGVUeXBlKXJldHVybiBhO3ZhciBiPWEuX3JlYWN0SW50ZXJuYWxzO2lmKHZvaWQgMD09PWIpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhLnJlbmRlcil0aHJvdyBFcnJvcih5KDE4OCkpO3Rocm93IEVycm9yKHkoMjY4LE9iamVjdC5rZXlzKGEpKSk7fWE9Y2MoYik7YT1udWxsPT09YT9udWxsOmEuc3RhdGVOb2RlO3JldHVybiBhfTtleHBvcnRzLmZsdXNoU3luYz1mdW5jdGlvbihhLGIpe3ZhciBjPVg7aWYoMCE9PShjJjQ4KSlyZXR1cm4gYShiKTtYfD0xO3RyeXtpZihhKXJldHVybiBnZyg5OSxhLmJpbmQobnVsbCxiKSl9ZmluYWxseXtYPWMsaWcoKX19O2V4cG9ydHMuaHlkcmF0ZT1mdW5jdGlvbihhLGIsYyl7aWYoIXJrKGIpKXRocm93IEVycm9yKHkoMjAwKSk7cmV0dXJuIHRrKG51bGwsYSxiLCEwLGMpfTtcbmV4cG9ydHMucmVuZGVyPWZ1bmN0aW9uKGEsYixjKXtpZighcmsoYikpdGhyb3cgRXJyb3IoeSgyMDApKTtyZXR1cm4gdGsobnVsbCxhLGIsITEsYyl9O2V4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZT1mdW5jdGlvbihhKXtpZighcmsoYSkpdGhyb3cgRXJyb3IoeSg0MCkpO3JldHVybiBhLl9yZWFjdFJvb3RDb250YWluZXI/KFhqKGZ1bmN0aW9uKCl7dGsobnVsbCxudWxsLGEsITEsZnVuY3Rpb24oKXthLl9yZWFjdFJvb3RDb250YWluZXI9bnVsbDthW2ZmXT1udWxsfSl9KSwhMCk6ITF9O2V4cG9ydHMudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM9V2o7ZXhwb3J0cy51bnN0YWJsZV9jcmVhdGVQb3J0YWw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdWsoYSxiLDI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsKX07XG5leHBvcnRzLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyPWZ1bmN0aW9uKGEsYixjLGQpe2lmKCFyayhjKSl0aHJvdyBFcnJvcih5KDIwMCkpO2lmKG51bGw9PWF8fHZvaWQgMD09PWEuX3JlYWN0SW50ZXJuYWxzKXRocm93IEVycm9yKHkoMzgpKTtyZXR1cm4gdGsoYSxiLGMsITEsZCl9O2V4cG9ydHMudmVyc2lvbj1cIjE3LjAuMlwiO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsICIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZT1yZXF1aXJlKFwicmVhY3RcIik7ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIGs9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6aCxsPWUudXNlU3RhdGUsbT1lLnVzZUVmZmVjdCxuPWUudXNlTGF5b3V0RWZmZWN0LHA9ZS51c2VEZWJ1Z1ZhbHVlO2Z1bmN0aW9uIHEoYSxiKXt2YXIgZD1iKCksZj1sKHtpbnN0Ont2YWx1ZTpkLGdldFNuYXBzaG90OmJ9fSksYz1mWzBdLmluc3QsZz1mWzFdO24oZnVuY3Rpb24oKXtjLnZhbHVlPWQ7Yy5nZXRTbmFwc2hvdD1iO3IoYykmJmcoe2luc3Q6Y30pfSxbYSxkLGJdKTttKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSk7cmV0dXJuIGEoZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KX0pfSxbYV0pO3AoZCk7cmV0dXJuIGR9XG5mdW5jdGlvbiByKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgZD1iKCk7cmV0dXJuIWsoYSxkKX1jYXRjaChmKXtyZXR1cm4hMH19ZnVuY3Rpb24gdChhLGIpe3JldHVybiBiKCl9dmFyIHU9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P3Q6cTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPXZvaWQgMCE9PWUudXNlU3luY0V4dGVybmFsU3RvcmU/ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZTp1O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHVzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGg9cmVxdWlyZShcInJlYWN0XCIpLG49cmVxdWlyZShcInVzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW1cIik7ZnVuY3Rpb24gcChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIHE9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6cCxyPW4udXNlU3luY0V4dGVybmFsU3RvcmUsdD1oLnVzZVJlZix1PWgudXNlRWZmZWN0LHY9aC51c2VNZW1vLHc9aC51c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3Rvcj1mdW5jdGlvbihhLGIsZSxsLGcpe3ZhciBjPXQobnVsbCk7aWYobnVsbD09PWMuY3VycmVudCl7dmFyIGY9e2hhc1ZhbHVlOiExLHZhbHVlOm51bGx9O2MuY3VycmVudD1mfWVsc2UgZj1jLmN1cnJlbnQ7Yz12KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtpZighYyl7Yz0hMDtkPWE7YT1sKGEpO2lmKHZvaWQgMCE9PWcmJmYuaGFzVmFsdWUpe3ZhciBiPWYudmFsdWU7aWYoZyhiLGEpKXJldHVybiBrPWJ9cmV0dXJuIGs9YX1iPWs7aWYocShkLGEpKXJldHVybiBiO3ZhciBlPWwoYSk7aWYodm9pZCAwIT09ZyYmZyhiLGUpKXJldHVybiBiO2Q9YTtyZXR1cm4gaz1lfXZhciBjPSExLGQsayxtPXZvaWQgMD09PWU/bnVsbDplO3JldHVybltmdW5jdGlvbigpe3JldHVybiBhKGIoKSl9LG51bGw9PT1tP3ZvaWQgMDpmdW5jdGlvbigpe3JldHVybiBhKG0oKSl9XX0sW2IsZSxsLGddKTt2YXIgZD1yKGEsY1swXSxjWzFdKTtcbnUoZnVuY3Rpb24oKXtmLmhhc1ZhbHVlPSEwO2YudmFsdWU9ZH0sW2RdKTt3KGQpO3JldHVybiBkfTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwgIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7dmFyIGI9XCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcixjPWI/U3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIik6NjAxMDMsZD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIik6NjAxMDYsZT1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKTo2MDEwNyxmPWI/U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpOjYwMTA4LGc9Yj9TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik6NjAxMTQsaD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKTo2MDEwOSxrPWI/U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIik6NjAxMTAsbD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5hc3luY19tb2RlXCIpOjYwMTExLG09Yj9TeW1ib2wuZm9yKFwicmVhY3QuY29uY3VycmVudF9tb2RlXCIpOjYwMTExLG49Yj9TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIik6NjAxMTIscD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKTo2MDExMyxxPWI/XG5TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKTo2MDEyMCxyPWI/U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIik6NjAxMTUsdD1iP1N5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpOjYwMTE2LHY9Yj9TeW1ib2wuZm9yKFwicmVhY3QuYmxvY2tcIik6NjAxMjEsdz1iP1N5bWJvbC5mb3IoXCJyZWFjdC5mdW5kYW1lbnRhbFwiKTo2MDExNyx4PWI/U3ltYm9sLmZvcihcInJlYWN0LnJlc3BvbmRlclwiKTo2MDExOCx5PWI/U3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpOjYwMTE5O1xuZnVuY3Rpb24geihhKXtpZihcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hKXt2YXIgdT1hLiQkdHlwZW9mO3N3aXRjaCh1KXtjYXNlIGM6c3dpdGNoKGE9YS50eXBlLGEpe2Nhc2UgbDpjYXNlIG06Y2FzZSBlOmNhc2UgZzpjYXNlIGY6Y2FzZSBwOnJldHVybiBhO2RlZmF1bHQ6c3dpdGNoKGE9YSYmYS4kJHR5cGVvZixhKXtjYXNlIGs6Y2FzZSBuOmNhc2UgdDpjYXNlIHI6Y2FzZSBoOnJldHVybiBhO2RlZmF1bHQ6cmV0dXJuIHV9fWNhc2UgZDpyZXR1cm4gdX19fWZ1bmN0aW9uIEEoYSl7cmV0dXJuIHooYSk9PT1tfWV4cG9ydHMuQXN5bmNNb2RlPWw7ZXhwb3J0cy5Db25jdXJyZW50TW9kZT1tO2V4cG9ydHMuQ29udGV4dENvbnN1bWVyPWs7ZXhwb3J0cy5Db250ZXh0UHJvdmlkZXI9aDtleHBvcnRzLkVsZW1lbnQ9YztleHBvcnRzLkZvcndhcmRSZWY9bjtleHBvcnRzLkZyYWdtZW50PWU7ZXhwb3J0cy5MYXp5PXQ7ZXhwb3J0cy5NZW1vPXI7ZXhwb3J0cy5Qb3J0YWw9ZDtcbmV4cG9ydHMuUHJvZmlsZXI9ZztleHBvcnRzLlN0cmljdE1vZGU9ZjtleHBvcnRzLlN1c3BlbnNlPXA7ZXhwb3J0cy5pc0FzeW5jTW9kZT1mdW5jdGlvbihhKXtyZXR1cm4gQShhKXx8eihhKT09PWx9O2V4cG9ydHMuaXNDb25jdXJyZW50TW9kZT1BO2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT1rfTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09aH07ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWN9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09bn07ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09ZX07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHooYSk9PT10fTtcbmV4cG9ydHMuaXNNZW1vPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cn07ZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWR9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4geihhKT09PWd9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09Zn07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB6KGEpPT09cH07XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZT1mdW5jdGlvbihhKXtyZXR1cm5cInN0cmluZ1wiPT09dHlwZW9mIGF8fFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhfHxhPT09ZXx8YT09PW18fGE9PT1nfHxhPT09Znx8YT09PXB8fGE9PT1xfHxcIm9iamVjdFwiPT09dHlwZW9mIGEmJm51bGwhPT1hJiYoYS4kJHR5cGVvZj09PXR8fGEuJCR0eXBlb2Y9PT1yfHxhLiQkdHlwZW9mPT09aHx8YS4kJHR5cGVvZj09PWt8fGEuJCR0eXBlb2Y9PT1ufHxhLiQkdHlwZW9mPT09d3x8YS4kJHR5cGVvZj09PXh8fGEuJCR0eXBlb2Y9PT15fHxhLiQkdHlwZW9mPT09dil9O2V4cG9ydHMudHlwZU9mPXo7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbnZhciBSRUFDVF9TVEFUSUNTID0ge1xuICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgY29udGV4dFR5cGU6IHRydWUsXG4gIGNvbnRleHRUeXBlczogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgZ2V0RGVmYXVsdFByb3BzOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogdHJ1ZSxcbiAgbWl4aW5zOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgS05PV05fU1RBVElDUyA9IHtcbiAgbmFtZTogdHJ1ZSxcbiAgbGVuZ3RoOiB0cnVlLFxuICBwcm90b3R5cGU6IHRydWUsXG4gIGNhbGxlcjogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBhcmd1bWVudHM6IHRydWUsXG4gIGFyaXR5OiB0cnVlXG59O1xudmFyIEZPUldBUkRfUkVGX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIHJlbmRlcjogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlXG59O1xudmFyIE1FTU9fU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgY29tcGFyZTogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIFRZUEVfU1RBVElDUyA9IHt9O1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuRm9yd2FyZFJlZl0gPSBGT1JXQVJEX1JFRl9TVEFUSUNTO1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuTWVtb10gPSBNRU1PX1NUQVRJQ1M7XG5cbmZ1bmN0aW9uIGdldFN0YXRpY3MoY29tcG9uZW50KSB7XG4gIC8vIFJlYWN0IHYxNi4xMSBhbmQgYmVsb3dcbiAgaWYgKHJlYWN0SXMuaXNNZW1vKGNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gTUVNT19TVEFUSUNTO1xuICB9IC8vIFJlYWN0IHYxNi4xMiBhbmQgYWJvdmVcblxuXG4gIHJldHVybiBUWVBFX1NUQVRJQ1NbY29tcG9uZW50WyckJHR5cGVvZiddXSB8fCBSRUFDVF9TVEFUSUNTO1xufVxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBvYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuZnVuY3Rpb24gaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21wb25lbnQsIGJsYWNrbGlzdCkge1xuICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xuICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgICBpZiAoaW5oZXJpdGVkQ29tcG9uZW50ICYmIGluaGVyaXRlZENvbXBvbmVudCAhPT0gb2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICAgIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgaW5oZXJpdGVkQ29tcG9uZW50LCBibGFja2xpc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0U3RhdGljcyA9IGdldFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50KTtcbiAgICB2YXIgc291cmNlU3RhdGljcyA9IGdldFN0YXRpY3Moc291cmNlQ29tcG9uZW50KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghS05PV05fU1RBVElDU1trZXldICYmICEoYmxhY2tsaXN0ICYmIGJsYWNrbGlzdFtrZXldKSAmJiAhKHNvdXJjZVN0YXRpY3MgJiYgc291cmNlU3RhdGljc1trZXldKSAmJiAhKHRhcmdldFN0YXRpY3MgJiYgdGFyZ2V0U3RhdGljc1trZXldKSkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBBdm9pZCBmYWlsdXJlcyBmcm9tIHJlYWQtb25seSBwcm9wZXJ0aWVzXG4gICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaG9pc3ROb25SZWFjdFN0YXRpY3M7XG4iLCAiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBzdHJpY3QnO3ZhciBiPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLGM9U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxkPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxlPVN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxmPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSxnPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm92aWRlclwiKSxoPVN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLGs9U3ltYm9sLmZvcihcInJlYWN0LnNlcnZlcl9jb250ZXh0XCIpLGw9U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLG09U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLG49U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIikscD1TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxxPVN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLHQ9U3ltYm9sLmZvcihcInJlYWN0Lm9mZnNjcmVlblwiKSx1O3U9U3ltYm9sLmZvcihcInJlYWN0Lm1vZHVsZS5yZWZlcmVuY2VcIik7XG5mdW5jdGlvbiB2KGEpe2lmKFwib2JqZWN0XCI9PT10eXBlb2YgYSYmbnVsbCE9PWEpe3ZhciByPWEuJCR0eXBlb2Y7c3dpdGNoKHIpe2Nhc2UgYjpzd2l0Y2goYT1hLnR5cGUsYSl7Y2FzZSBkOmNhc2UgZjpjYXNlIGU6Y2FzZSBtOmNhc2UgbjpyZXR1cm4gYTtkZWZhdWx0OnN3aXRjaChhPWEmJmEuJCR0eXBlb2YsYSl7Y2FzZSBrOmNhc2UgaDpjYXNlIGw6Y2FzZSBxOmNhc2UgcDpjYXNlIGc6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gcn19Y2FzZSBjOnJldHVybiByfX19ZXhwb3J0cy5Db250ZXh0Q29uc3VtZXI9aDtleHBvcnRzLkNvbnRleHRQcm92aWRlcj1nO2V4cG9ydHMuRWxlbWVudD1iO2V4cG9ydHMuRm9yd2FyZFJlZj1sO2V4cG9ydHMuRnJhZ21lbnQ9ZDtleHBvcnRzLkxhenk9cTtleHBvcnRzLk1lbW89cDtleHBvcnRzLlBvcnRhbD1jO2V4cG9ydHMuUHJvZmlsZXI9ZjtleHBvcnRzLlN0cmljdE1vZGU9ZTtleHBvcnRzLlN1c3BlbnNlPW07XG5leHBvcnRzLlN1c3BlbnNlTGlzdD1uO2V4cG9ydHMuaXNBc3luY01vZGU9ZnVuY3Rpb24oKXtyZXR1cm4hMX07ZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2V4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1ofTtleHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09Z307ZXhwb3J0cy5pc0VsZW1lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PWJ9O2V4cG9ydHMuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bH07ZXhwb3J0cy5pc0ZyYWdtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09ZH07ZXhwb3J0cy5pc0xhenk9ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYSk9PT1xfTtleHBvcnRzLmlzTWVtbz1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PXB9O1xuZXhwb3J0cy5pc1BvcnRhbD1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWN9O2V4cG9ydHMuaXNQcm9maWxlcj1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PWZ9O2V4cG9ydHMuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09ZX07ZXhwb3J0cy5pc1N1c3BlbnNlPWZ1bmN0aW9uKGEpe3JldHVybiB2KGEpPT09bX07ZXhwb3J0cy5pc1N1c3BlbnNlTGlzdD1mdW5jdGlvbihhKXtyZXR1cm4gdihhKT09PW59O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhfHxcImZ1bmN0aW9uXCI9PT10eXBlb2YgYXx8YT09PWR8fGE9PT1mfHxhPT09ZXx8YT09PW18fGE9PT1ufHxhPT09dHx8XCJvYmplY3RcIj09PXR5cGVvZiBhJiZudWxsIT09YSYmKGEuJCR0eXBlb2Y9PT1xfHxhLiQkdHlwZW9mPT09cHx8YS4kJHR5cGVvZj09PWd8fGEuJCR0eXBlb2Y9PT1ofHxhLiQkdHlwZW9mPT09bHx8YS4kJHR5cGVvZj09PXV8fHZvaWQgMCE9PWEuZ2V0TW9kdWxlSWQpPyEwOiExfTtleHBvcnRzLnR5cGVPZj12O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG4vKiBnbG9iYWwgbW9kdWxlLCBkZWZpbmUgKi9cblxuZnVuY3Rpb24gbWFwRWFjaChtYXAsIG9wZXJhdGlvbil7XG4gIHZhciBrZXlzID0gbWFwLmtleXMoKTtcbiAgdmFyIG5leHQ7XG4gIHdoaWxlKCEobmV4dCA9IGtleXMubmV4dCgpKS5kb25lKSB7XG4gICAgb3BlcmF0aW9uKG1hcC5nZXQobmV4dC52YWx1ZSksIG5leHQudmFsdWUsIG1hcCk7XG4gIH1cbn1cblxudmFyIE11bHRpbWFwID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgbWFwQ3RvcjtcbiAgaWYgKHR5cGVvZiBNYXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbWFwQ3RvciA9IE1hcDtcblxuICAgIGlmICghTWFwLnByb3RvdHlwZS5rZXlzKSB7XG4gICAgICBNYXAucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0sIGtleSkge1xuICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIE11bHRpbWFwKGl0ZXJhYmxlKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgc2VsZi5fbWFwID0gbWFwQ3RvcjtcblxuICAgIGlmIChNdWx0aW1hcC5NYXApIHtcbiAgICAgIHNlbGYuX21hcCA9IE11bHRpbWFwLk1hcDtcbiAgICB9XG5cbiAgICBzZWxmLl8gPSBzZWxmLl9tYXAgPyBuZXcgc2VsZi5fbWFwKCkgOiB7fTtcblxuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgaXRlcmFibGUuZm9yRWFjaChmdW5jdGlvbihpKSB7XG4gICAgICAgIHNlbGYuc2V0KGlbMF0sIGlbMV0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBrZXlcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHZhbHVlcywgdW5kZWZpbmVkIGlmIG5vIHN1Y2ggYSBrZXk7XG4gICAqL1xuICBNdWx0aW1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcCA/IHRoaXMuXy5nZXQoa2V5KSA6IHRoaXMuX1trZXldO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWwuLi5cbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICAgIGtleSA9IGFyZ3Muc2hpZnQoKTtcblxuICAgIHZhciBlbnRyeSA9IHRoaXMuZ2V0KGtleSk7XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgZW50cnkgPSBbXTtcbiAgICAgIGlmICh0aGlzLl9tYXApXG4gICAgICAgIHRoaXMuXy5zZXQoa2V5LCBlbnRyeSk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMuX1trZXldID0gZW50cnk7XG4gICAgfVxuXG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZW50cnksIGFyZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5XG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gdmFsXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgYW55IHRoaW5nIGNoYW5nZWRcbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgIGlmICghdGhpcy5oYXMoa2V5KSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAgIHRoaXMuX21hcCA/ICh0aGlzLl8uZGVsZXRlKGtleSkpIDogKGRlbGV0ZSB0aGlzLl9ba2V5XSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVudHJ5ID0gdGhpcy5nZXQoa2V5KTtcbiAgICAgIHZhciBpZHggPSBlbnRyeS5pbmRleE9mKHZhbCk7XG4gICAgICBpZiAoaWR4ICE9IC0xKSB7XG4gICAgICAgIGVudHJ5LnNwbGljZShpZHgsIDEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBrZXlcbiAgICogQHBhcmFtIHtPYmplY3Q9fSB2YWxcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGUgbWFwIGNvbnRhaW5zICdrZXknIG9yICdrZXk9PnZhbCcgcGFpclxuICAgKi9cbiAgTXVsdGltYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKGtleSwgdmFsKSB7XG4gICAgdmFyIGhhc0tleSA9IHRoaXMuX21hcCA/IHRoaXMuXy5oYXMoa2V5KSA6IHRoaXMuXy5oYXNPd25Qcm9wZXJ0eShrZXkpO1xuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSB8fCAhaGFzS2V5KVxuICAgICAgcmV0dXJuIGhhc0tleTtcblxuICAgIHZhciBlbnRyeSA9IHRoaXMuZ2V0KGtleSkgfHwgW107XG4gICAgcmV0dXJuIGVudHJ5LmluZGV4T2YodmFsKSAhPSAtMTtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtBcnJheX0gYWxsIHRoZSBrZXlzIGluIHRoZSBtYXBcbiAgICovXG4gIE11bHRpbWFwLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX21hcClcbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcy5fLmtleXMoKSk7XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKE9iamVjdC5rZXlzKHRoaXMuXykpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtBcnJheX0gYWxsIHRoZSB2YWx1ZXMgaW4gdGhlIG1hcFxuICAgKi9cbiAgTXVsdGltYXAucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWxzID0gW107XG4gICAgdGhpcy5mb3JFYWNoRW50cnkoZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHZhbHMsIGVudHJ5KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IodmFscyk7XG4gIH07XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBNdWx0aW1hcC5wcm90b3R5cGUuZm9yRWFjaEVudHJ5ID0gZnVuY3Rpb24oaXRlcikge1xuICAgIG1hcEVhY2godGhpcywgaXRlcik7XG4gIH07XG5cbiAgTXVsdGltYXAucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihpdGVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuZm9yRWFjaEVudHJ5KGZ1bmN0aW9uKGVudHJ5LCBrZXkpIHtcbiAgICAgIGVudHJ5LmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICBpdGVyKGl0ZW0sIGtleSwgc2VsZik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuXG4gIE11bHRpbWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgIHRoaXMuXy5jbGVhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl8gPSB7fTtcbiAgICB9XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgIE11bHRpbWFwLnByb3RvdHlwZSxcbiAgICBcInNpemVcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdG90YWwgPSAwO1xuXG4gICAgICAgIG1hcEVhY2godGhpcywgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgICAgIHRvdGFsICs9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRvdGFsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICBNdWx0aW1hcC5wcm90b3R5cGUsXG4gICAgXCJjb3VudFwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl8uc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB2YXIgc2FmYXJpTmV4dDtcblxuICB0cnl7XG4gICAgc2FmYXJpTmV4dCA9IG5ldyBGdW5jdGlvbignaXRlcmF0b3InLCAnbWFrZUl0ZXJhdG9yJywgJ3ZhciBrZXlzQXJyYXkgPSBbXTsgZm9yKHZhciBrZXkgb2YgaXRlcmF0b3Ipe2tleXNBcnJheS5wdXNoKGtleSk7fSByZXR1cm4gbWFrZUl0ZXJhdG9yKGtleXNBcnJheSkubmV4dDsnKTtcbiAgfWNhdGNoKGVycm9yKXtcbiAgICAvLyBmb3Igb2Ygbm90IGltcGxlbWVudGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFrZUl0ZXJhdG9yKGl0ZXJhdG9yKXtcbiAgICBpZihBcnJheS5pc0FycmF5KGl0ZXJhdG9yKSl7XG4gICAgICB2YXIgbmV4dEluZGV4ID0gMDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oKXtcbiAgICAgICAgICByZXR1cm4gbmV4dEluZGV4IDwgaXRlcmF0b3IubGVuZ3RoID9cbiAgICAgICAgICAgIHt2YWx1ZTogaXRlcmF0b3JbbmV4dEluZGV4KytdLCBkb25lOiBmYWxzZX0gOlxuICAgICAgICAgIHtkb25lOiB0cnVlfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IGFuIGlzc3VlIGluIHNhZmFyaVxuICAgIGlmKCFpdGVyYXRvci5uZXh0ICYmIHNhZmFyaU5leHQpe1xuICAgICAgaXRlcmF0b3IubmV4dCA9IHNhZmFyaU5leHQoaXRlcmF0b3IsIG1ha2VJdGVyYXRvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIE11bHRpbWFwO1xufSkoKTtcblxuXG5pZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgbW9kdWxlICYmIG1vZHVsZS5leHBvcnRzKVxuICBtb2R1bGUuZXhwb3J0cyA9IE11bHRpbWFwO1xuZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG4gIGRlZmluZShmdW5jdGlvbigpIHsgcmV0dXJuIE11bHRpbWFwOyB9KTtcbiIsICIvKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIFx1Mjc2NFx1RkUwRlxuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuLy8gJEZsb3dGaXhNZVxuZnVuY3Rpb24gc2hlZXRGb3JUYWcodGFnKSB7XG4gIGlmICh0YWcuc2hlZXQpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIHRhZy5zaGVldDtcbiAgfSAvLyB0aGlzIHdlaXJkbmVzcyBicm91Z2h0IHRvIHlvdSBieSBmaXJlZm94XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0ub3duZXJOb2RlID09PSB0YWcpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHJldHVybiBkb2N1bWVudC5zdHlsZVNoZWV0c1tpXTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIG9wdGlvbnMua2V5KTtcblxuICBpZiAob3B0aW9ucy5ub25jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBvcHRpb25zLm5vbmNlKTtcbiAgfVxuXG4gIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gIHJldHVybiB0YWc7XG59XG5cbnZhciBTdHlsZVNoZWV0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgLy8gVXNpbmcgTm9kZSBpbnN0ZWFkIG9mIEhUTUxFbGVtZW50IHNpbmNlIGNvbnRhaW5lciBtYXkgYmUgYSBTaGFkb3dSb290XG4gIGZ1bmN0aW9uIFN0eWxlU2hlZXQob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9pbnNlcnRUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gICAgICB2YXIgYmVmb3JlO1xuXG4gICAgICBpZiAoX3RoaXMudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKF90aGlzLmluc2VydGlvblBvaW50KSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuaW5zZXJ0aW9uUG9pbnQubmV4dFNpYmxpbmc7XG4gICAgICAgIH0gZWxzZSBpZiAoX3RoaXMucHJlcGVuZCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmJlZm9yZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVmb3JlID0gX3RoaXMudGFnc1tfdGhpcy50YWdzLmxlbmd0aCAtIDFdLm5leHRTaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKHRhZywgYmVmb3JlKTtcblxuICAgICAgX3RoaXMudGFncy5wdXNoKHRhZyk7XG4gICAgfTtcblxuICAgIHRoaXMuaXNTcGVlZHkgPSBvcHRpb25zLnNwZWVkeSA9PT0gdW5kZWZpbmVkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgaXNJbXBvcnRSdWxlID0gcnVsZS5jaGFyQ29kZUF0KDApID09PSA2NCAmJiBydWxlLmNoYXJDb2RlQXQoMSkgPT09IDEwNTtcblxuICAgICAgaWYgKGlzSW1wb3J0UnVsZSAmJiB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSkge1xuICAgICAgICAvLyB0aGlzIHdvdWxkIG9ubHkgY2F1c2UgcHJvYmxlbSBpbiBzcGVlZHkgbW9kZVxuICAgICAgICAvLyBidXQgd2UgZG9uJ3Qgd2FudCBlbmFibGluZyBzcGVlZHkgdG8gYWZmZWN0IHRoZSBvYnNlcnZhYmxlIGJlaGF2aW9yXG4gICAgICAgIC8vIHNvIHdlIHJlcG9ydCB0aGlzIGVycm9yIGF0IGFsbCB0aW1lc1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiWW91J3JlIGF0dGVtcHRpbmcgdG8gaW5zZXJ0IHRoZSBmb2xsb3dpbmcgcnVsZTpcXG5cIiArIHJ1bGUgKyAnXFxuXFxuYEBpbXBvcnRgIHJ1bGVzIG11c3QgYmUgYmVmb3JlIGFsbCBvdGhlciB0eXBlcyBvZiBydWxlcyBpbiBhIHN0eWxlc2hlZXQgYnV0IG90aGVyIHJ1bGVzIGhhdmUgYWxyZWFkeSBiZWVuIGluc2VydGVkLiBQbGVhc2UgZW5zdXJlIHRoYXQgYEBpbXBvcnRgIHJ1bGVzIGFyZSBiZWZvcmUgYWxsIG90aGVyIHJ1bGVzLicpO1xuICAgICAgfVxuICAgICAgdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUgPSB0aGlzLl9hbHJlYWR5SW5zZXJ0ZWRPcmRlckluc2Vuc2l0aXZlUnVsZSB8fCAhaXNJbXBvcnRSdWxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIS86KC1tb3otcGxhY2Vob2xkZXJ8LW1vei1mb2N1cy1pbm5lcnwtbW96LWZvY3VzcmluZ3wtbXMtaW5wdXQtcGxhY2Vob2xkZXJ8LW1vei1yZWFkLXdyaXRlfC1tb3otcmVhZC1vbmx5fC1tcy1jbGVhcnwtbXMtZXhwYW5kfC1tcy1yZXZlYWwpey8udGVzdChydWxlKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGVyZSB3YXMgYSBwcm9ibGVtIGluc2VydGluZyB0aGUgZm9sbG93aW5nIHJ1bGU6IFxcXCJcIiArIHJ1bGUgKyBcIlxcXCJcIiwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICB0aGlzLnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnKSB7XG4gICAgICByZXR1cm4gdGFnLnBhcmVudE5vZGUgJiYgdGFnLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhpcy5fYWxyZWFkeUluc2VydGVkT3JkZXJJbnNlbnNpdGl2ZVJ1bGUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsICJleHBvcnQgdmFyIE1TID0gJy1tcy0nXG5leHBvcnQgdmFyIE1PWiA9ICctbW96LSdcbmV4cG9ydCB2YXIgV0VCS0lUID0gJy13ZWJraXQtJ1xuXG5leHBvcnQgdmFyIENPTU1FTlQgPSAnY29tbSdcbmV4cG9ydCB2YXIgUlVMRVNFVCA9ICdydWxlJ1xuZXhwb3J0IHZhciBERUNMQVJBVElPTiA9ICdkZWNsJ1xuXG5leHBvcnQgdmFyIFBBR0UgPSAnQHBhZ2UnXG5leHBvcnQgdmFyIE1FRElBID0gJ0BtZWRpYSdcbmV4cG9ydCB2YXIgSU1QT1JUID0gJ0BpbXBvcnQnXG5leHBvcnQgdmFyIENIQVJTRVQgPSAnQGNoYXJzZXQnXG5leHBvcnQgdmFyIFZJRVdQT1JUID0gJ0B2aWV3cG9ydCdcbmV4cG9ydCB2YXIgU1VQUE9SVFMgPSAnQHN1cHBvcnRzJ1xuZXhwb3J0IHZhciBET0NVTUVOVCA9ICdAZG9jdW1lbnQnXG5leHBvcnQgdmFyIE5BTUVTUEFDRSA9ICdAbmFtZXNwYWNlJ1xuZXhwb3J0IHZhciBLRVlGUkFNRVMgPSAnQGtleWZyYW1lcydcbmV4cG9ydCB2YXIgRk9OVF9GQUNFID0gJ0Bmb250LWZhY2UnXG5leHBvcnQgdmFyIENPVU5URVJfU1RZTEUgPSAnQGNvdW50ZXItc3R5bGUnXG5leHBvcnQgdmFyIEZPTlRfRkVBVFVSRV9WQUxVRVMgPSAnQGZvbnQtZmVhdHVyZS12YWx1ZXMnXG5leHBvcnQgdmFyIExBWUVSID0gJ0BsYXllcidcbiIsICIvKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgZnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHJldHVybiBjaGFyYXQodmFsdWUsIDApIF4gNDUgPyAoKCgoKCgobGVuZ3RoIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAwKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDEpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMikpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAzKSA6IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS50cmltKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmc/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2ggKHZhbHVlLCBwYXR0ZXJuKSB7XG5cdHJldHVybiAodmFsdWUgPSBwYXR0ZXJuLmV4ZWModmFsdWUpKSA/IHZhbHVlWzBdIDogdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UgKHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gpIHtcblx0cmV0dXJuIHZhbHVlLmluZGV4T2Yoc2VhcmNoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG4iLCAiaW1wb3J0IHtmcm9tLCB0cmltLCBjaGFyYXQsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIGFzc2lnbn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG5leHBvcnQgdmFyIGxpbmUgPSAxXG5leHBvcnQgdmFyIGNvbHVtbiA9IDFcbmV4cG9ydCB2YXIgbGVuZ3RoID0gMFxuZXhwb3J0IHZhciBwb3NpdGlvbiA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVyID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXJzID0gJydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3RbXSB8IHN0cmluZ30gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vZGUgKHZhbHVlLCByb290LCBwYXJlbnQsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHJldHVybiB7dmFsdWU6IHZhbHVlLCByb290OiByb290LCBwYXJlbnQ6IHBhcmVudCwgdHlwZTogdHlwZSwgcHJvcHM6IHByb3BzLCBjaGlsZHJlbjogY2hpbGRyZW4sIGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uLCBsZW5ndGg6IGxlbmd0aCwgcmV0dXJuOiAnJ31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChyb290LCBwcm9wcykge1xuXHRyZXR1cm4gYXNzaWduKG5vZGUoJycsIG51bGwsIG51bGwsICcnLCBudWxsLCBudWxsLCAwKSwgcm9vdCwge2xlbmd0aDogLXJvb3QubGVuZ3RofSwgcHJvcHMpXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhciAoKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPiAwID8gY2hhcmF0KGNoYXJhY3RlcnMsIC0tcG9zaXRpb24pIDogMFxuXG5cdGlmIChjb2x1bW4tLSwgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lLS1cblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV4dCAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uIDwgbGVuZ3RoID8gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKyspIDogMFxuXG5cdGlmIChjb2x1bW4rKywgY2hhcmFjdGVyID09PSAxMClcblx0XHRjb2x1bW4gPSAxLCBsaW5lKytcblxuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVlayAoKSB7XG5cdHJldHVybiBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24pXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FyZXQgKCkge1xuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlIChiZWdpbiwgZW5kKSB7XG5cdHJldHVybiBzdWJzdHIoY2hhcmFjdGVycywgYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW4gKHR5cGUpIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Ly8gXFwwIFxcdCBcXG4gXFxyIFxccyB3aGl0ZXNwYWNlIHRva2VuXG5cdFx0Y2FzZSAwOiBjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRyZXR1cm4gNVxuXHRcdC8vICEgKyAsIC8gPiBAIH4gaXNvbGF0ZSB0b2tlblxuXHRcdGNhc2UgMzM6IGNhc2UgNDM6IGNhc2UgNDQ6IGNhc2UgNDc6IGNhc2UgNjI6IGNhc2UgNjQ6IGNhc2UgMTI2OlxuXHRcdC8vIDsgeyB9IGJyZWFrcG9pbnQgdG9rZW5cblx0XHRjYXNlIDU5OiBjYXNlIDEyMzogY2FzZSAxMjU6XG5cdFx0XHRyZXR1cm4gNFxuXHRcdC8vIDogYWNjb21wYW5pZWQgdG9rZW5cblx0XHRjYXNlIDU4OlxuXHRcdFx0cmV0dXJuIDNcblx0XHQvLyBcIiAnICggWyBvcGVuaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDQwOiBjYXNlIDkxOlxuXHRcdFx0cmV0dXJuIDJcblx0XHQvLyApIF0gY2xvc2luZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSA0MTogY2FzZSA5Mzpcblx0XHRcdHJldHVybiAxXG5cdH1cblxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGxpbmUgPSBjb2x1bW4gPSAxLCBsZW5ndGggPSBzdHJsZW4oY2hhcmFjdGVycyA9IHZhbHVlKSwgcG9zaXRpb24gPSAwLCBbXVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhbGxvYyAodmFsdWUpIHtcblx0cmV0dXJuIGNoYXJhY3RlcnMgPSAnJywgdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdCAodHlwZSkge1xuXHRyZXR1cm4gdHJpbShzbGljZShwb3NpdGlvbiAtIDEsIGRlbGltaXRlcih0eXBlID09PSA5MSA/IHR5cGUgKyAyIDogdHlwZSA9PT0gNDAgPyB0eXBlICsgMSA6IHR5cGUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKHZhbHVlKSB7XG5cdHJldHVybiBkZWFsbG9jKHRva2VuaXplcihhbGxvYyh2YWx1ZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZXNwYWNlICh0eXBlKSB7XG5cdHdoaWxlIChjaGFyYWN0ZXIgPSBwZWVrKCkpXG5cdFx0aWYgKGNoYXJhY3RlciA8IDMzKVxuXHRcdFx0bmV4dCgpXG5cdFx0ZWxzZVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gdG9rZW4odHlwZSkgPiAyIHx8IHRva2VuKGNoYXJhY3RlcikgPiAzID8gJycgOiAnICdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZXIgKGNoaWxkcmVuKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoICh0b2tlbihjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjYXNlIDA6IGFwcGVuZChpZGVudGlmaWVyKHBvc2l0aW9uIC0gMSksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAyOiBhcHBlbmQoZGVsaW1pdChjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6IGFwcGVuZChmcm9tKGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdH1cblxuXHRyZXR1cm4gY2hpbGRyZW5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBpbmcgKGluZGV4LCBjb3VudCkge1xuXHR3aGlsZSAoLS1jb3VudCAmJiBuZXh0KCkpXG5cdFx0Ly8gbm90IDAtOSBBLUYgYS1mXG5cdFx0aWYgKGNoYXJhY3RlciA8IDQ4IHx8IGNoYXJhY3RlciA+IDEwMiB8fCAoY2hhcmFjdGVyID4gNTcgJiYgY2hhcmFjdGVyIDwgNjUpIHx8IChjaGFyYWN0ZXIgPiA3MCAmJiBjaGFyYWN0ZXIgPCA5NykpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiBzbGljZShpbmRleCwgY2FyZXQoKSArIChjb3VudCA8IDYgJiYgcGVlaygpID09IDMyICYmIG5leHQoKSA9PSAzMikpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXRlciAodHlwZSkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAoY2hhcmFjdGVyKSB7XG5cdFx0XHQvLyBdICkgXCIgJ1xuXHRcdFx0Y2FzZSB0eXBlOlxuXHRcdFx0XHRyZXR1cm4gcG9zaXRpb25cblx0XHRcdC8vIFwiICdcblx0XHRcdGNhc2UgMzQ6IGNhc2UgMzk6XG5cdFx0XHRcdGlmICh0eXBlICE9PSAzNCAmJiB0eXBlICE9PSAzOSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHR5cGUgPT09IDQxKVxuXHRcdFx0XHRcdGRlbGltaXRlcih0eXBlKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFxcblx0XHRcdGNhc2UgOTI6XG5cdFx0XHRcdG5leHQoKVxuXHRcdFx0XHRicmVha1xuXHRcdH1cblxuXHRyZXR1cm4gcG9zaXRpb25cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ZXIgKHR5cGUsIGluZGV4KSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0Ly8gLy9cblx0XHRpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDcgKyAxMClcblx0XHRcdGJyZWFrXG5cdFx0Ly8gLypcblx0XHRlbHNlIGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0MiArIDQyICYmIHBlZWsoKSA9PT0gNDcpXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiAnLyonICsgc2xpY2UoaW5kZXgsIHBvc2l0aW9uIC0gMSkgKyAnKicgKyBmcm9tKHR5cGUgPT09IDQ3ID8gdHlwZSA6IG5leHQoKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZpZXIgKGluZGV4KSB7XG5cdHdoaWxlICghdG9rZW4ocGVlaygpKSlcblx0XHRuZXh0KClcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIHBvc2l0aW9uKVxufVxuIiwgImltcG9ydCB7Q09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7YWJzLCBjaGFyYXQsIHRyaW0sIGZyb20sIHNpemVvZiwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgcmVwbGFjZSwgaW5kZXhvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtub2RlLCBjaGFyLCBwcmV2LCBuZXh0LCBwZWVrLCBjYXJldCwgYWxsb2MsIGRlYWxsb2MsIGRlbGltaXQsIHdoaXRlc3BhY2UsIGVzY2FwaW5nLCBpZGVudGlmaWVyLCBjb21tZW50ZXJ9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7b2JqZWN0W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyhwYXJzZSgnJywgbnVsbCwgbnVsbCwgbnVsbCwgWycnXSwgdmFsdWUgPSBhbGxvYyh2YWx1ZSksIDAsIFswXSwgdmFsdWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNldHNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBzZXVkb1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZWNsYXJhdGlvbnNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBydWxlLCBydWxlcywgcnVsZXNldHMsIHBzZXVkbywgcG9pbnRzLCBkZWNsYXJhdGlvbnMpIHtcblx0dmFyIGluZGV4ID0gMFxuXHR2YXIgb2Zmc2V0ID0gMFxuXHR2YXIgbGVuZ3RoID0gcHNldWRvXG5cdHZhciBhdHJ1bGUgPSAwXG5cdHZhciBwcm9wZXJ0eSA9IDBcblx0dmFyIHByZXZpb3VzID0gMFxuXHR2YXIgdmFyaWFibGUgPSAxXG5cdHZhciBzY2FubmluZyA9IDFcblx0dmFyIGFtcGVyc2FuZCA9IDFcblx0dmFyIGNoYXJhY3RlciA9IDBcblx0dmFyIHR5cGUgPSAnJ1xuXHR2YXIgcHJvcHMgPSBydWxlc1xuXHR2YXIgY2hpbGRyZW4gPSBydWxlc2V0c1xuXHR2YXIgcmVmZXJlbmNlID0gcnVsZVxuXHR2YXIgY2hhcmFjdGVycyA9IHR5cGVcblxuXHR3aGlsZSAoc2Nhbm5pbmcpXG5cdFx0c3dpdGNoIChwcmV2aW91cyA9IGNoYXJhY3RlciwgY2hhcmFjdGVyID0gbmV4dCgpKSB7XG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAocHJldmlvdXMgIT0gMTA4ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCBsZW5ndGggLSAxKSA9PSA1OCkge1xuXHRcdFx0XHRcdGlmIChpbmRleG9mKGNoYXJhY3RlcnMgKz0gcmVwbGFjZShkZWxpbWl0KGNoYXJhY3RlciksICcmJywgJyZcXGYnKSwgJyZcXGYnKSAhPSAtMSlcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IC0xXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0Ly8gXCIgJyBbXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDkxOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFx0IFxcbiBcXHIgXFxzXG5cdFx0XHRjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gd2hpdGVzcGFjZShwcmV2aW91cylcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGVzY2FwaW5nKGNhcmV0KCkgLSAxLCA3KVxuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0Ly8gL1xuXHRcdFx0Y2FzZSA0Nzpcblx0XHRcdFx0c3dpdGNoIChwZWVrKCkpIHtcblx0XHRcdFx0XHRjYXNlIDQyOiBjYXNlIDQ3OlxuXHRcdFx0XHRcdFx0YXBwZW5kKGNvbW1lbnQoY29tbWVudGVyKG5leHQoKSwgY2FyZXQoKSksIHJvb3QsIHBhcmVudCksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGgpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSkgOiBkZWNsYXJhdGlvbihyZXBsYWNlKGNoYXJhY3RlcnMsICcgJywgJycpICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDIpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEAgO1xuXHRcdFx0XHRcdGNhc2UgNTk6IGNoYXJhY3RlcnMgKz0gJzsnXG5cdFx0XHRcdFx0Ly8geyBydWxlL2F0LXJ1bGVcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YXBwZW5kKHJlZmVyZW5jZSA9IHJ1bGVzZXQoY2hhcmFjdGVycywgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcyA9IFtdLCBjaGlsZHJlbiA9IFtdLCBsZW5ndGgpLCBydWxlc2V0cylcblxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gMTIzKVxuXHRcdFx0XHRcdFx0XHRpZiAob2Zmc2V0ID09PSAwKVxuXHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJvb3QsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBwcm9wcywgcnVsZXNldHMsIGxlbmd0aCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoYXRydWxlID09PSA5OSAmJiBjaGFyYXQoY2hhcmFjdGVycywgMykgPT09IDExMCA/IDEwMCA6IGF0cnVsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZCBsIG0gc1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAxMDA6IGNhc2UgMTA4OiBjYXNlIDEwOTogY2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcnVsZSAmJiBhcHBlbmQocnVsZXNldCh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIDAsIDAsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHJ1bGVzLCBwcm9wcyA9IFtdLCBsZW5ndGgpLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNldCAodmFsdWUsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0dmFyIHBvc3QgPSBvZmZzZXQgLSAxXG5cdHZhciBydWxlID0gb2Zmc2V0ID09PSAwID8gcnVsZXMgOiBbJyddXG5cdHZhciBzaXplID0gc2l6ZW9mKHJ1bGUpXG5cblx0Zm9yICh2YXIgaSA9IDAsIGogPSAwLCBrID0gMDsgaSA8IGluZGV4OyArK2kpXG5cdFx0Zm9yICh2YXIgeCA9IDAsIHkgPSBzdWJzdHIodmFsdWUsIHBvc3QgKyAxLCBwb3N0ID0gYWJzKGogPSBwb2ludHNbaV0pKSwgeiA9IHZhbHVlOyB4IDwgc2l6ZTsgKyt4KVxuXHRcdFx0aWYgKHogPSB0cmltKGogPiAwID8gcnVsZVt4XSArICcgJyArIHkgOiByZXBsYWNlKHksIC8mXFxmL2csIHJ1bGVbeF0pKSlcblx0XHRcdFx0cHJvcHNbaysrXSA9IHpcblxuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBvZmZzZXQgPT09IDAgPyBSVUxFU0VUIDogdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnQgKHZhbHVlLCByb290LCBwYXJlbnQpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgQ09NTUVOVCwgZnJvbShjaGFyKCkpLCBzdWJzdHIodmFsdWUsIDIsIC0yKSwgMClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHZhbHVlLCByb290LCBwYXJlbnQsIGxlbmd0aCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBERUNMQVJBVElPTiwgc3Vic3RyKHZhbHVlLCAwLCBsZW5ndGgpLCBzdWJzdHIodmFsdWUsIGxlbmd0aCArIDEsIC0xKSwgbGVuZ3RoKVxufVxuIiwgImltcG9ydCB7TVMsIE1PWiwgV0VCS0lUfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2hhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCByZXBsYWNlLCBzdWJzdHIsIG1hdGNofSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ICh2YWx1ZSwgbGVuZ3RoLCBjaGlsZHJlbikge1xuXHRzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcblx0XHQvLyBjb2xvci1hZGp1c3Rcblx0XHRjYXNlIDUxMDM6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cdFx0Y2FzZSA1NzM3OiBjYXNlIDQyMDE6IGNhc2UgMzE3NzogY2FzZSAzNDMzOiBjYXNlIDE2NDE6IGNhc2UgNDQ1NzogY2FzZSAyOTIxOlxuXHRcdC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblx0XHRjYXNlIDU1NzI6IGNhc2UgNjM1NjogY2FzZSA1ODQ0OiBjYXNlIDMxOTE6IGNhc2UgNjY0NTogY2FzZSAzMDA1OlxuXHRcdC8vIG1hc2ssIG1hc2staW1hZ2UsIG1hc2stKG1vZGV8Y2xpcHxzaXplKSwgbWFzay0ocmVwZWF0fG9yaWdpbiksIG1hc2stcG9zaXRpb24sIG1hc2stY29tcG9zaXRlLFxuXHRcdGNhc2UgNjM5MTogY2FzZSA1ODc5OiBjYXNlIDU2MjM6IGNhc2UgNjEzNTogY2FzZSA0NTk5OiBjYXNlIDQ4NTU6XG5cdFx0Ly8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblx0XHRjYXNlIDQyMTU6IGNhc2UgNjM4OTogY2FzZSA1MTA5OiBjYXNlIDUzNjU6IGNhc2UgNTYyMTogY2FzZSAzODI5OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWVcblx0XHQvLyB0YWItc2l6ZVxuXHRcdGNhc2UgNDc4OTpcblx0XHRcdHJldHVybiBNT1ogKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXHRcdGNhc2UgNTM0OTogY2FzZSA0MjQ2OiBjYXNlIDQ4MTA6IGNhc2UgNjk2ODogY2FzZSAyNzU2OlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWVcblx0XHQvLyB3cml0aW5nLW1vZGVcblx0XHRjYXNlIDU5MzY6XG5cdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG5cdFx0XHRcdC8vIHZlcnRpY2FsLWwocilcblx0XHRcdFx0Y2FzZSAxMTQ6XG5cdFx0XHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWVcblx0XHRcdFx0Ly8gdmVydGljYWwtcihsKVxuXHRcdFx0XHRjYXNlIDEwODpcblx0XHRcdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyBob3Jpem9udGFsKC0pdGJcblx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyBkZWZhdWx0OiBmYWxsdGhyb3VnaCB0byBiZWxvd1xuXHRcdFx0fVxuXHRcdC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uLCBzY3JvbGwtc25hcC10eXBlLCB3cml0aW5nLW1vZGVcblx0XHRjYXNlIDY4Mjg6IGNhc2UgNDI2ODogY2FzZSAyOTAzOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gb3JkZXJcblx0XHRjYXNlIDYxNjU6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlXG5cdFx0Ly8gYWxpZ24taXRlbXNcblx0XHRjYXNlIDUxODc6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWVcblx0XHQvLyBhbGlnbi1zZWxmXG5cdFx0Y2FzZSA1NDQzOlxuXHRcdFx0cmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvZywgJycpICsgKCFtYXRjaCh2YWx1ZSwgL2ZsZXgtfGJhc2VsaW5lLykgPyBNUyArICdncmlkLXJvdy0nICsgcmVwbGFjZSh2YWx1ZSwgL2ZsZXgtfC1zZWxmL2csICcnKSA6ICcnKSArIHZhbHVlXG5cdFx0Ly8gYWxpZ24tY29udGVudFxuXHRcdGNhc2UgNDY3NTpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmL2csICcnKSArIHZhbHVlXG5cdFx0Ly8gZmxleC1zaHJpbmtcblx0XHRjYXNlIDU1NDg6XG5cdFx0XHRyZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlXG5cdFx0Ly8gZmxleC1iYXNpc1xuXHRcdGNhc2UgNTI5Mjpcblx0XHRcdHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZVxuXHRcdC8vIGZsZXgtZ3Jvd1xuXHRcdGNhc2UgNjA2MDpcblx0XHRcdHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlXG5cdFx0Ly8gdHJhbnNpdGlvblxuXHRcdGNhc2UgNDU1NDpcblx0XHRcdHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWVcblx0XHQvLyBjdXJzb3Jcblx0XHRjYXNlIDYxODc6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2Vcblx0XHRjYXNlIDU0OTU6IGNhc2UgMzk1OTpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKGltYWdlLXNldFxcKFteXSopLywgV0VCS0lUICsgJyQxJyArICckYCQxJylcblx0XHQvLyBqdXN0aWZ5LWNvbnRlbnRcblx0XHRjYXNlIDQ5Njg6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZShyZXBsYWNlKHZhbHVlLCAvKC4rOikoZmxleC0pPyguKikvLCBXRUJLSVQgKyAnYm94LXBhY2s6JDMnICsgTVMgKyAnZmxleC1wYWNrOiQzJyksIC9zListYlteO10rLywgJ2p1c3RpZnknKSArIFdFQktJVCArIHZhbHVlICsgdmFsdWVcblx0XHQvLyBqdXN0aWZ5LXNlbGZcblx0XHRjYXNlIDQyMDA6XG5cdFx0XHRpZiAoIW1hdGNoKHZhbHVlLCAvZmxleC18YmFzZWxpbmUvKSkgcmV0dXJuIE1TICsgJ2dyaWQtY29sdW1uLWFsaWduJyArIHN1YnN0cih2YWx1ZSwgbGVuZ3RoKSArIHZhbHVlXG5cdFx0XHRicmVha1xuXHRcdC8vIGdyaWQtdGVtcGxhdGUtKGNvbHVtbnN8cm93cylcblx0XHRjYXNlIDI1OTI6IGNhc2UgMzM2MDpcblx0XHRcdHJldHVybiBNUyArIHJlcGxhY2UodmFsdWUsICd0ZW1wbGF0ZS0nLCAnJykgKyB2YWx1ZVxuXHRcdC8vIGdyaWQtKHJvd3xjb2x1bW4pLXN0YXJ0XG5cdFx0Y2FzZSA0Mzg0OiBjYXNlIDM2MTY6XG5cdFx0XHRpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4uc29tZShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgpIHsgcmV0dXJuIGxlbmd0aCA9IGluZGV4LCBtYXRjaChlbGVtZW50LnByb3BzLCAvZ3JpZC1cXHcrLWVuZC8pIH0pKSB7XG5cdFx0XHRcdHJldHVybiB+aW5kZXhvZih2YWx1ZSArIChjaGlsZHJlbiA9IGNoaWxkcmVuW2xlbmd0aF0udmFsdWUpLCAnc3BhbicpID8gdmFsdWUgOiAoTVMgKyByZXBsYWNlKHZhbHVlLCAnLXN0YXJ0JywgJycpICsgdmFsdWUgKyBNUyArICdncmlkLXJvdy1zcGFuOicgKyAofmluZGV4b2YoY2hpbGRyZW4sICdzcGFuJykgPyBtYXRjaChjaGlsZHJlbiwgL1xcZCsvKSA6ICttYXRjaChjaGlsZHJlbiwgL1xcZCsvKSAtICttYXRjaCh2YWx1ZSwgL1xcZCsvKSkgKyAnOycpXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gTVMgKyByZXBsYWNlKHZhbHVlLCAnLXN0YXJ0JywgJycpICsgdmFsdWVcblx0XHQvLyBncmlkLShyb3d8Y29sdW1uKS1lbmRcblx0XHRjYXNlIDQ4OTY6IGNhc2UgNDEyODpcblx0XHRcdHJldHVybiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4uc29tZShmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gbWF0Y2goZWxlbWVudC5wcm9wcywgL2dyaWQtXFx3Ky1zdGFydC8pIH0pKSA/IHZhbHVlIDogTVMgKyByZXBsYWNlKHJlcGxhY2UodmFsdWUsICctZW5kJywgJy1zcGFuJyksICdzcGFuICcsICcnKSArIHZhbHVlXG5cdFx0Ly8gKG1hcmdpbnxwYWRkaW5nKS1pbmxpbmUtKHN0YXJ0fGVuZClcblx0XHRjYXNlIDQwOTU6IGNhc2UgMzU4MzogY2FzZSA0MDY4OiBjYXNlIDI1MzI6XG5cdFx0XHRyZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZVxuXHRcdC8vIChtaW58bWF4KT8od2lkdGh8aGVpZ2h0fGlubGluZS1zaXplfGJsb2NrLXNpemUpXG5cdFx0Y2FzZSA4MTE2OiBjYXNlIDcwNTk6IGNhc2UgNTc1MzogY2FzZSA1NTM1OlxuXHRcdGNhc2UgNTQ0NTogY2FzZSA1NzAxOiBjYXNlIDQ5MzM6IGNhc2UgNDY3Nzpcblx0XHRjYXNlIDU1MzM6IGNhc2UgNTc4OTogY2FzZSA1MDIxOiBjYXNlIDQ3NjU6XG5cdFx0XHQvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG5cdFx0XHRpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KVxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcblx0XHRcdFx0XHQvLyAobSlheC1jb250ZW50LCAobSlpbi1jb250ZW50XG5cdFx0XHRcdFx0Y2FzZSAxMDk6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyA0KSAhPT0gNDUpXG5cdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXHRcdFx0XHRcdGNhc2UgMTAyOlxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KSguKyktKFteXSspLywgJyQxJyArIFdFQktJVCArICckMi0kMycgKyAnJDEnICsgTU9aICsgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMykgPT0gMTA4ID8gJyQzJyA6ICckMi0kMycpKSArIHZhbHVlXG5cdFx0XHRcdFx0Ly8gKHMpdHJldGNoXG5cdFx0XHRcdFx0Y2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRyZXR1cm4gfmluZGV4b2YodmFsdWUsICdzdHJldGNoJykgPyBwcmVmaXgocmVwbGFjZSh2YWx1ZSwgJ3N0cmV0Y2gnLCAnZmlsbC1hdmFpbGFibGUnKSwgbGVuZ3RoLCBjaGlsZHJlbikgKyB2YWx1ZSA6IHZhbHVlXG5cdFx0XHRcdH1cblx0XHRcdGJyZWFrXG5cdFx0Ly8gZ3JpZC0oY29sdW1ufHJvdylcblx0XHRjYXNlIDUxNTI6IGNhc2UgNTkyMDpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rPyk6KFxcZCspKFxccypcXC9cXHMqKHNwYW4pP1xccyooXFxkKykpPyguKikvLCBmdW5jdGlvbiAoXywgYSwgYiwgYywgZCwgZSwgZikgeyByZXR1cm4gKE1TICsgYSArICc6JyArIGIgKyBmKSArIChjID8gKE1TICsgYSArICctc3BhbjonICsgKGQgPyBlIDogK2UgLSArYikpICsgZiA6ICcnKSArIHZhbHVlIH0pXG5cdFx0Ly8gcG9zaXRpb246IHN0aWNreVxuXHRcdGNhc2UgNDk0OTpcblx0XHRcdC8vIHN0aWNrKHkpP1xuXHRcdFx0aWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNikgPT09IDEyMSlcblx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsICc6JywgJzonICsgV0VCS0lUKSArIHZhbHVlXG5cdFx0XHRicmVha1xuXHRcdC8vIGRpc3BsYXk6IChmbGV4fGlubGluZS1mbGV4fGdyaWR8aW5saW5lLWdyaWQpXG5cdFx0Y2FzZSA2NDQ0OlxuXHRcdFx0c3dpdGNoIChjaGFyYXQodmFsdWUsIGNoYXJhdCh2YWx1ZSwgMTQpID09PSA0NSA/IDE4IDogMTEpKSB7XG5cdFx0XHRcdC8vIChpbmxpbmUtKT9mbGUoeClcblx0XHRcdFx0Y2FzZSAxMjA6XG5cdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLis6KShbXjtcXHMhXSspKDt8KFxccyspPyEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZVxuXHRcdFx0XHQvLyAoaW5saW5lLSk/Z3JpKGQpXG5cdFx0XHRcdGNhc2UgMTAwOlxuXHRcdFx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIE1TKSArIHZhbHVlXG5cdFx0XHR9XG5cdFx0XHRicmVha1xuXHRcdC8vIHNjcm9sbC1tYXJnaW4sIHNjcm9sbC1tYXJnaW4tKHRvcHxyaWdodHxib3R0b218bGVmdClcblx0XHRjYXNlIDU3MTk6IGNhc2UgMjY0NzogY2FzZSAyMTM1OiBjYXNlIDM5Mjc6IGNhc2UgMjM5MTpcblx0XHRcdHJldHVybiByZXBsYWNlKHZhbHVlLCAnc2Nyb2xsLScsICdzY3JvbGwtc25hcC0nKSArIHZhbHVlXG5cdH1cblxuXHRyZXR1cm4gdmFsdWVcbn1cbiIsICJpbXBvcnQge0lNUE9SVCwgTEFZRVIsIENPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OLCBLRVlGUkFNRVN9IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7c3RybGVuLCBzaXplb2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZSAoY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHZhciBvdXRwdXQgPSAnJ1xuXHR2YXIgbGVuZ3RoID0gc2l6ZW9mKGNoaWxkcmVuKVxuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0b3V0cHV0ICs9IGNhbGxiYWNrKGNoaWxkcmVuW2ldLCBpLCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0cmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5IChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0Y2FzZSBMQVlFUjogaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSBicmVha1xuXHRcdGNhc2UgSU1QT1JUOiBjYXNlIERFQ0xBUkFUSU9OOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnJldHVybiB8fCBlbGVtZW50LnZhbHVlXG5cdFx0Y2FzZSBDT01NRU5UOiByZXR1cm4gJydcblx0XHRjYXNlIEtFWUZSQU1FUzogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykgKyAnfSdcblx0XHRjYXNlIFJVTEVTRVQ6IGVsZW1lbnQudmFsdWUgPSBlbGVtZW50LnByb3BzLmpvaW4oJywnKVxuXHR9XG5cblx0cmV0dXJuIHN0cmxlbihjaGlsZHJlbiA9IHNlcmlhbGl6ZShlbGVtZW50LmNoaWxkcmVuLCBjYWxsYmFjaykpID8gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgY2hpbGRyZW4gKyAnfScgOiAnJ1xufVxuIiwgImltcG9ydCB7TVMsIE1PWiwgV0VCS0lULCBSVUxFU0VULCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge21hdGNoLCBjaGFyYXQsIHN1YnN0ciwgc3RybGVuLCBzaXplb2YsIHJlcGxhY2UsIGNvbWJpbmV9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7Y29weSwgdG9rZW5pemV9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuaW1wb3J0IHtzZXJpYWxpemV9IGZyb20gJy4vU2VyaWFsaXplci5qcydcbmltcG9ydCB7cHJlZml4fSBmcm9tICcuL1ByZWZpeGVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb25bXX0gY29sbGVjdGlvblxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWRkbGV3YXJlIChjb2xsZWN0aW9uKSB7XG5cdHZhciBsZW5ndGggPSBzaXplb2YoY29sbGVjdGlvbilcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0XHR2YXIgb3V0cHV0ID0gJydcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRvdXRwdXQgKz0gY29sbGVjdGlvbltpXShlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdFx0cmV0dXJuIG91dHB1dFxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNoZWV0IChjYWxsYmFjaykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRpZiAoIWVsZW1lbnQucm9vdClcblx0XHRcdGlmIChlbGVtZW50ID0gZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRcdGNhbGxiYWNrKGVsZW1lbnQpXG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVyIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKVxuXHRcdGlmICghZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0XHRjYXNlIERFQ0xBUkFUSU9OOiBlbGVtZW50LnJldHVybiA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCwgY2hpbGRyZW4pXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGNhc2UgS0VZRlJBTUVTOlxuXHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3ZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdFx0XHRpZiAoZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyA6cmVhZC0ob25seXx3cml0ZSlcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6cmVhZC1vbmx5JzogY2FzZSAnOnJlYWQtd3JpdGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldfSldLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0XHQvLyA6cGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6OnBsYWNlaG9sZGVyJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldfSlcblx0XHRcdFx0XHRcdFx0XHRcdF0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2UgKGVsZW1lbnQpIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRlbGVtZW50LnByb3BzID0gZWxlbWVudC5wcm9wcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBjb21iaW5lKHRva2VuaXplKHZhbHVlKSwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgMCkpIHtcblx0XHRcdFx0XHRcdC8vIFxcZlxuXHRcdFx0XHRcdFx0Y2FzZSAxMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YnN0cih2YWx1ZSwgMSwgc3RybGVuKHZhbHVlKSlcblx0XHRcdFx0XHRcdC8vIFxcMCAoICsgPiB+XG5cdFx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgNDA6IGNhc2UgNDM6IGNhc2UgNjI6IGNhc2UgMTI2OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdC8vIDpcblx0XHRcdFx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdFx0XHRcdGlmIChjaGlsZHJlblsrK2luZGV4XSA9PT0gJ2dsb2JhbCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW5baW5kZXhdID0gJycsIGNoaWxkcmVuWysraW5kZXhdID0gJ1xcZicgKyBzdWJzdHIoY2hpbGRyZW5baW5kZXhdLCBpbmRleCA9IDEsIC0xKVxuXHRcdFx0XHRcdFx0Ly8gXFxzXG5cdFx0XHRcdFx0XHRjYXNlIDMyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAwOiBlbGVtZW50ID0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaXplb2YoY2hpbGRyZW4pID4gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRjYXNlIGluZGV4ID0gc2l6ZW9mKGNoaWxkcmVuKSAtIDE6IGNhc2UgMjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMiA/IHZhbHVlICsgZWxlbWVudCArIGVsZW1lbnQgOiB2YWx1ZSArIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXHR9XG59XG4iLCAiZXhwb3J0ICogZnJvbSAnLi9zcmMvRW51bS5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1V0aWxpdHkuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9QYXJzZXIuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9QcmVmaXhlci5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1Rva2VuaXplci5qcydcbmV4cG9ydCAqIGZyb20gJy4vc3JjL1NlcmlhbGl6ZXIuanMnXG5leHBvcnQgKiBmcm9tICcuL3NyYy9NaWRkbGV3YXJlLmpzJ1xuIiwgInZhciB3ZWFrTWVtb2l6ZSA9IGZ1bmN0aW9uIHdlYWtNZW1vaXplKGZ1bmMpIHtcbiAgLy8gJEZsb3dGaXhNZSBmbG93IGRvZXNuJ3QgaW5jbHVkZSBhbGwgbm9uLXByaW1pdGl2ZSB0eXBlcyBhcyBhbGxvd2VkIGZvciB3ZWFrbWFwc1xuICB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChjYWNoZS5oYXMoYXJnKSkge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGNhY2hlLmdldChhcmcpO1xuICAgIH1cblxuICAgIHZhciByZXQgPSBmdW5jKGFyZyk7XG4gICAgY2FjaGUuc2V0KGFyZywgcmV0KTtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xufTtcblxuZXhwb3J0IHsgd2Vha01lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwgImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgbWVtb2l6ZSBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBSVUxFU0VULCBjb21iaW5lLCBtYXRjaCwgc2VyaWFsaXplLCBjb3B5LCByZXBsYWNlLCBXRUJLSVQsIE1PWiwgTVMsIEtFWUZSQU1FUywgREVDTEFSQVRJT04sIGhhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCBzdHJpbmdpZnksIENPTU1FTlQsIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nID0gZnVuY3Rpb24gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKGJlZ2luLCBwb2ludHMsIGluZGV4KSB7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcHJldmlvdXMgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gcGVlaygpOyAvLyAmXFxmXG5cbiAgICBpZiAocHJldmlvdXMgPT09IDM4ICYmIGNoYXJhY3RlciA9PT0gMTIpIHtcbiAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgIH1cblxuICAgIGlmICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2UoYmVnaW4sIHBvc2l0aW9uKTtcbn07XG5cbnZhciB0b1J1bGVzID0gZnVuY3Rpb24gdG9SdWxlcyhwYXJzZWQsIHBvaW50cykge1xuICAvLyBwcmV0ZW5kIHdlJ3ZlIHN0YXJ0ZWQgd2l0aCBhIGNvbW1hXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgY2hhcmFjdGVyID0gNDQ7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAmXFxmXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDM4ICYmIHBlZWsoKSA9PT0gMTIpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIHdlIGRvbid0IGFjY291bnQgZm9yIGxpdGVyYWwgc2VxdWVuY2VzIGhlcmUgLSBsaWtlIGZvciBleGFtcGxlIHF1b3RlZCBzdHJpbmdzXG4gICAgICAgICAgLy8gc3R5bGlzIGluc2VydHMgXFxmIGFmdGVyICYgdG8ga25vdyB3aGVuICYgd2hlcmUgaXQgc2hvdWxkIHJlcGxhY2UgdGhpcyBzZXF1ZW5jZSB3aXRoIHRoZSBjb250ZXh0IHNlbGVjdG9yXG4gICAgICAgICAgLy8gYW5kIHdoZW4gaXQgc2hvdWxkIGp1c3QgY29uY2F0ZW5hdGUgdGhlIG91dGVyIGFuZCBpbm5lciBzZWxlY3RvcnNcbiAgICAgICAgICAvLyBpdCdzIHZlcnkgdW5saWtlbHkgZm9yIHRoaXMgc2VxdWVuY2UgdG8gYWN0dWFsbHkgYXBwZWFyIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIHNvIHdlIGp1c3QgbGV2ZXJhZ2UgdGhpcyBmYWN0IGhlcmVcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKHBvc2l0aW9uIC0gMSwgcG9pbnRzLCBpbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZGVsaW1pdChjaGFyYWN0ZXIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICAvLyBjb21tYVxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSA0NCkge1xuICAgICAgICAgIC8vIGNvbG9uXG4gICAgICAgICAgcGFyc2VkWysraW5kZXhdID0gcGVlaygpID09PSA1OCA/ICcmXFxmJyA6ICcnO1xuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSBwYXJzZWRbaW5kZXhdLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGZyb20oY2hhcmFjdGVyKTtcbiAgICB9XG4gIH0gd2hpbGUgKGNoYXJhY3RlciA9IG5leHQoKSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbnZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpIHtcbiAgcmV0dXJuIGRlYWxsb2ModG9SdWxlcyhhbGxvYyh2YWx1ZSksIHBvaW50cykpO1xufTsgLy8gV2Vha1NldCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBidXQgb25seSBXZWFrTWFwIGlzIHN1cHBvcnRlZCBpbiBJRTExXG5cblxudmFyIGZpeGVkRWxlbWVudHMgPSAvKiAjX19QVVJFX18gKi9uZXcgV2Vha01hcCgpO1xudmFyIGNvbXBhdCA9IGZ1bmN0aW9uIGNvbXBhdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCAhZWxlbWVudC5wYXJlbnQgfHwgLy8gcG9zaXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgY29udGFpbnMgcHNldWRvXG4gIC8vIG5lZ2F0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGhhcyBiZWVuIGFscmVhZHkgcHJlZml4ZWRcbiAgZWxlbWVudC5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZSxcbiAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICB2YXIgaXNJbXBsaWNpdFJ1bGUgPSBlbGVtZW50LmNvbHVtbiA9PT0gcGFyZW50LmNvbHVtbiAmJiBlbGVtZW50LmxpbmUgPT09IHBhcmVudC5saW5lO1xuXG4gIHdoaWxlIChwYXJlbnQudHlwZSAhPT0gJ3J1bGUnKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICB9IC8vIHNob3J0LWNpcmN1aXQgZm9yIHRoZSBzaW1wbGVzdCBjYXNlXG5cblxuICBpZiAoZWxlbWVudC5wcm9wcy5sZW5ndGggPT09IDEgJiYgdmFsdWUuY2hhckNvZGVBdCgwKSAhPT0gNThcbiAgLyogY29sb24gKi9cbiAgJiYgIWZpeGVkRWxlbWVudHMuZ2V0KHBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBpbXBsaWNpdGx5IGluc2VydGVkIHJ1bGUgKHRoZSBvbmUgZWFnZXJseSBpbnNlcnRlZCBhdCB0aGUgZWFjaCBuZXcgbmVzdGVkIGxldmVsKVxuICAvLyB0aGVuIHRoZSBwcm9wcyBoYXMgYWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkIGJlZm9yZWhhbmQgYXMgdGhleSB0aGF0IGFycmF5IGlzIHNoYXJlZCBiZXR3ZWVuIGl0IGFuZCBpdHMgXCJydWxlIHBhcmVudFwiXG5cblxuICBpZiAoaXNJbXBsaWNpdFJ1bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaXhlZEVsZW1lbnRzLnNldChlbGVtZW50LCB0cnVlKTtcbiAgdmFyIHBvaW50cyA9IFtdO1xuICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKTtcbiAgdmFyIHBhcmVudFJ1bGVzID0gcGFyZW50LnByb3BzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJlbnRSdWxlcy5sZW5ndGg7IGorKywgaysrKSB7XG4gICAgICBlbGVtZW50LnByb3BzW2tdID0gcG9pbnRzW2ldID8gcnVsZXNbaV0ucmVwbGFjZSgvJlxcZi9nLCBwYXJlbnRSdWxlc1tqXSkgOiBwYXJlbnRSdWxlc1tqXSArIFwiIFwiICsgcnVsZXNbaV07XG4gICAgfVxuICB9XG59O1xudmFyIHJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnZGVjbCcpIHtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCAvLyBjaGFyY29kZSBmb3IgbFxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDEwOCAmJiAvLyBjaGFyY29kZSBmb3IgYlxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMikgPT09IDk4KSB7XG4gICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cbn07XG52YXIgaWdub3JlRmxhZyA9ICdlbW90aW9uLWRpc2FibGUtc2VydmVyLXJlbmRlcmluZy11bnNhZmUtc2VsZWN0b3Itd2FybmluZy1wbGVhc2UtZG8tbm90LXVzZS10aGlzLXRoZS13YXJuaW5nLWV4aXN0cy1mb3ItYS1yZWFzb24nO1xuXG52YXIgaXNJZ25vcmluZ0NvbW1lbnQgPSBmdW5jdGlvbiBpc0lnbm9yaW5nQ29tbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnR5cGUgPT09ICdjb21tJyAmJiBlbGVtZW50LmNoaWxkcmVuLmluZGV4T2YoaWdub3JlRmxhZykgPiAtMTtcbn07XG5cbnZhciBjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSA9IGZ1bmN0aW9uIGNyZWF0ZVVuc2FmZVNlbGVjdG9yc0FsYXJtKGNhY2hlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuKSB7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ3J1bGUnIHx8IGNhY2hlLmNvbXBhdCkgcmV0dXJuO1xuICAgIHZhciB1bnNhZmVQc2V1ZG9DbGFzc2VzID0gZWxlbWVudC52YWx1ZS5tYXRjaCgvKDpmaXJzdHw6bnRofDpudGgtbGFzdCktY2hpbGQvZyk7XG5cbiAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3Nlcykge1xuICAgICAgdmFyIGlzTmVzdGVkID0gISFlbGVtZW50LnBhcmVudDsgLy8gaW4gbmVzdGVkIHJ1bGVzIGNvbW1lbnRzIGJlY29tZSBjaGlsZHJlbiBvZiB0aGUgXCJhdXRvLWluc2VydGVkXCIgcnVsZSBhbmQgdGhhdCdzIGFsd2F5cyB0aGUgYGVsZW1lbnQucGFyZW50YFxuICAgICAgLy9cbiAgICAgIC8vIGNvbnNpZGVyaW5nIHRoaXMgaW5wdXQ6XG4gICAgICAvLyAuYSB7XG4gICAgICAvLyAgIC5iIC8qIGNvbW0gKi8ge31cbiAgICAgIC8vICAgY29sb3I6IGhvdHBpbms7XG4gICAgICAvLyB9XG4gICAgICAvLyB3ZSBnZXQgb3V0cHV0IGNvcnJlc3BvbmRpbmcgdG8gdGhpczpcbiAgICAgIC8vIC5hIHtcbiAgICAgIC8vICAgJiB7XG4gICAgICAvLyAgICAgLyogY29tbSAqL1xuICAgICAgLy8gICAgIGNvbG9yOiBob3RwaW5rO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIC5iIHt9XG4gICAgICAvLyB9XG5cbiAgICAgIHZhciBjb21tZW50Q29udGFpbmVyID0gaXNOZXN0ZWQgPyBlbGVtZW50LnBhcmVudC5jaGlsZHJlbiA6IC8vIGdsb2JhbCBydWxlIGF0IHRoZSByb290IGxldmVsXG4gICAgICBjaGlsZHJlbjtcblxuICAgICAgZm9yICh2YXIgaSA9IGNvbW1lbnRDb250YWluZXIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIG5vZGUgPSBjb21tZW50Q29udGFpbmVyW2ldO1xuXG4gICAgICAgIGlmIChub2RlLmxpbmUgPCBlbGVtZW50LmxpbmUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBpdCBpcyBxdWl0ZSB3ZWlyZCBidXQgY29tbWVudHMgYXJlICp1c3VhbGx5KiBwdXQgYXQgYGNvbHVtbjogZWxlbWVudC5jb2x1bW4gLSAxYFxuICAgICAgICAvLyBzbyB3ZSBzZWVrICpmcm9tIHRoZSBlbmQqIGZvciB0aGUgbm9kZSB0aGF0IGlzIGVhcmxpZXIgdGhhbiB0aGUgcnVsZSdzIGBlbGVtZW50YCBhbmQgY2hlY2sgdGhhdFxuICAgICAgICAvLyB0aGlzIHdpbGwgYWxzbyBtYXRjaCBpbnB1dHMgbGlrZSB0aGlzOlxuICAgICAgICAvLyAuYSB7XG4gICAgICAgIC8vICAgLyogY29tbSAqL1xuICAgICAgICAvLyAgIC5iIHt9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gYnV0IHRoYXQgaXMgZmluZVxuICAgICAgICAvL1xuICAgICAgICAvLyBpdCB3b3VsZCBiZSB0aGUgZWFzaWVzdCB0byBjaGFuZ2UgdGhlIHBsYWNlbWVudCBvZiB0aGUgY29tbWVudCB0byBiZSB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJ1bGU6XG4gICAgICAgIC8vIC5hIHtcbiAgICAgICAgLy8gICAuYiB7IC8qIGNvbW0gKi8gfVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHdpdGggc3VjaCBpbnB1dHMgd2Ugd291bGRuJ3QgaGF2ZSB0byBzZWFyY2ggZm9yIHRoZSBjb21tZW50IGF0IGFsbFxuICAgICAgICAvLyBUT0RPOiBjb25zaWRlciBjaGFuZ2luZyB0aGlzIGNvbW1lbnQgcGxhY2VtZW50IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cblxuXG4gICAgICAgIGlmIChub2RlLmNvbHVtbiA8IGVsZW1lbnQuY29sdW1uKSB7XG4gICAgICAgICAgaWYgKGlzSWdub3JpbmdDb21tZW50KG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdW5zYWZlUHNldWRvQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uICh1bnNhZmVQc2V1ZG9DbGFzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIHBzZXVkbyBjbGFzcyBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcyArIFwiXFxcIiBpcyBwb3RlbnRpYWxseSB1bnNhZmUgd2hlbiBkb2luZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIFRyeSBjaGFuZ2luZyBpdCB0byBcXFwiXCIgKyB1bnNhZmVQc2V1ZG9DbGFzcy5zcGxpdCgnLWNoaWxkJylbMF0gKyBcIi1vZi10eXBlXFxcIi5cIik7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgaXNJbXBvcnRSdWxlID0gZnVuY3Rpb24gaXNJbXBvcnRSdWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQudHlwZS5jaGFyQ29kZUF0KDEpID09PSAxMDUgJiYgZWxlbWVudC50eXBlLmNoYXJDb2RlQXQoMCkgPT09IDY0O1xufTtcblxudmFyIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyA9IGZ1bmN0aW9uIGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pIHtcbiAgZm9yICh2YXIgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoIWlzSW1wb3J0UnVsZShjaGlsZHJlbltpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07IC8vIHVzZSB0aGlzIHRvIHJlbW92ZSBpbmNvcnJlY3QgZWxlbWVudHMgZnJvbSBmdXJ0aGVyIHByb2Nlc3Npbmdcbi8vIHNvIHRoZXkgZG9uJ3QgZ2V0IGhhbmRlZCB0byB0aGUgYHNoZWV0YCAob3IgYW55dGhpbmcgZWxzZSlcbi8vIGFzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBhZGRpdGlvbmFsIGxvZ3Mgd2hpY2ggaW4gdHVybiBjb3VsZCBiZSBvdmVyaGVsbWluZyB0byB0aGUgdXNlclxuXG5cbnZhciBudWxsaWZ5RWxlbWVudCA9IGZ1bmN0aW9uIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpIHtcbiAgZWxlbWVudC50eXBlID0gJyc7XG4gIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgZWxlbWVudFtcInJldHVyblwiXSA9ICcnO1xuICBlbGVtZW50LmNoaWxkcmVuID0gJyc7XG4gIGVsZW1lbnQucHJvcHMgPSAnJztcbn07XG5cbnZhciBpbmNvcnJlY3RJbXBvcnRBbGFybSA9IGZ1bmN0aW9uIGluY29ycmVjdEltcG9ydEFsYXJtKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbikge1xuICBpZiAoIWlzSW1wb3J0UnVsZShlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChlbGVtZW50LnBhcmVudCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJgQGltcG9ydGAgcnVsZXMgY2FuJ3QgYmUgbmVzdGVkIGluc2lkZSBvdGhlciBydWxlcy4gUGxlYXNlIG1vdmUgaXQgdG8gdGhlIHRvcCBsZXZlbCBhbmQgcHV0IGl0IGJlZm9yZSByZWd1bGFyIHJ1bGVzLiBLZWVwIGluIG1pbmQgdGhhdCB0aGV5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGdsb2JhbCBzdHlsZXMuXCIpO1xuICAgIG51bGxpZnlFbGVtZW50KGVsZW1lbnQpO1xuICB9IGVsc2UgaWYgKGlzUHJlcGVuZGVkV2l0aFJlZ3VsYXJSdWxlcyhpbmRleCwgY2hpbGRyZW4pKSB7XG4gICAgY29uc29sZS5lcnJvcihcImBAaW1wb3J0YCBydWxlcyBjYW4ndCBiZSBhZnRlciBvdGhlciBydWxlcy4gUGxlYXNlIHB1dCB5b3VyIGBAaW1wb3J0YCBydWxlcyBiZWZvcmUgeW91ciBvdGhlciBydWxlcy5cIik7XG4gICAgbnVsbGlmeUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoICovXG5cbmZ1bmN0aW9uIHByZWZpeCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuICAgIC8vIGNvbG9yLWFkanVzdFxuICAgIGNhc2UgNTEwMzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cbiAgICBjYXNlIDU3Mzc6XG4gICAgY2FzZSA0MjAxOlxuICAgIGNhc2UgMzE3NzpcbiAgICBjYXNlIDM0MzM6XG4gICAgY2FzZSAxNjQxOlxuICAgIGNhc2UgNDQ1NzpcbiAgICBjYXNlIDI5MjE6IC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblxuICAgIGNhc2UgNTU3MjpcbiAgICBjYXNlIDYzNTY6XG4gICAgY2FzZSA1ODQ0OlxuICAgIGNhc2UgMzE5MTpcbiAgICBjYXNlIDY2NDU6XG4gICAgY2FzZSAzMDA1OiAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OiAvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXG4gICAgY2FzZSA0MjE1OlxuICAgIGNhc2UgNjM4OTpcbiAgICBjYXNlIDUxMDk6XG4gICAgY2FzZSA1MzY1OlxuICAgIGNhc2UgNTYyMTpcbiAgICBjYXNlIDM4Mjk6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cbiAgICBjYXNlIDUzNDk6XG4gICAgY2FzZSA0MjQ2OlxuICAgIGNhc2UgNDgxMDpcbiAgICBjYXNlIDY5Njg6XG4gICAgY2FzZSAyNzU2OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gZmxleCwgZmxleC1kaXJlY3Rpb25cblxuICAgIGNhc2UgNjgyODpcbiAgICBjYXNlIDQyNjg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gb3JkZXJcblxuICAgIGNhc2UgNjE2NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYWxpZ24taXRlbXNcblxuICAgIGNhc2UgNTE4NzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1zZWxmXG5cbiAgICBjYXNlIDU0NDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWNvbnRlbnRcblxuICAgIGNhc2UgNDY3NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gZmxleC1zaHJpbmtcblxuICAgIGNhc2UgNTU0ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1iYXNpc1xuXG4gICAgY2FzZSA1MjkyOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtZ3Jvd1xuXG4gICAgY2FzZSA2MDYwOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gdHJhbnNpdGlvblxuXG4gICAgY2FzZSA0NTU0OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZTtcbiAgICAvLyBjdXJzb3JcblxuICAgIGNhc2UgNjE4NzpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlO1xuICAgIC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2VcblxuICAgIGNhc2UgNTQ5NTpcbiAgICBjYXNlIDM5NTk6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpO1xuICAgIC8vIGp1c3RpZnktY29udGVudFxuXG4gICAgY2FzZSA0OTY4OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cbiAgICBjYXNlIDQwOTU6XG4gICAgY2FzZSAzNTgzOlxuICAgIGNhc2UgNDA2ODpcbiAgICBjYXNlIDI1MzI6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZTtcbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXG4gICAgY2FzZSA4MTE2OlxuICAgIGNhc2UgNzA1OTpcbiAgICBjYXNlIDU3NTM6XG4gICAgY2FzZSA1NTM1OlxuICAgIGNhc2UgNTQ0NTpcbiAgICBjYXNlIDU3MDE6XG4gICAgY2FzZSA0OTMzOlxuICAgIGNhc2UgNDY3NzpcbiAgICBjYXNlIDU1MzM6XG4gICAgY2FzZSA1Nzg5OlxuICAgIGNhc2UgNTAyMTpcbiAgICBjYXNlIDQ3NjU6XG4gICAgICAvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG4gICAgICBpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KSBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcbiAgICAgICAgLy8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAvLyAtXG4gICAgICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KSBicmVhaztcbiAgICAgICAgLy8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKHMpdHJldGNoXG5cbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gcG9zaXRpb246IHN0aWNreVxuXG4gICAgY2FzZSA0OTQ5OlxuICAgICAgLy8gKHMpdGlja3k/XG4gICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSAhPT0gMTE1KSBicmVhaztcbiAgICAvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleClcblxuICAgIGNhc2UgNjQ0NDpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBzdHJsZW4odmFsdWUpIC0gMyAtICh+aW5kZXhvZih2YWx1ZSwgJyFpbXBvcnRhbnQnKSAmJiAxMCkpKSB7XG4gICAgICAgIC8vIHN0aWMoayl5XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKGlubGluZS0pP2ZsKGUpeFxuXG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147IV0rKSg7fCEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgLy8gd3JpdGluZy1tb2RlXG5cbiAgICBjYXNlIDU5MzY6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG4gICAgICAgIC8vIHZlcnRpY2FsLWwocilcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWU7XG4gICAgICAgIC8vIHZlcnRpY2FsLXIobClcblxuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCgtKXRiXG5cbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgcHJlZml4ZXIgPSBmdW5jdGlvbiBwcmVmaXhlcihlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnRbXCJyZXR1cm5cIl0pIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBERUNMQVJBVElPTjpcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEtFWUZSQU1FUzpcbiAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICB2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVClcbiAgICAgIH0pXSwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSBSVUxFU0VUOlxuICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoKSByZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcbiAgICAgICAgICAvLyA6cmVhZC0ob25seXx3cml0ZSlcbiAgICAgICAgICBjYXNlICc6cmVhZC1vbmx5JzpcbiAgICAgICAgICBjYXNlICc6cmVhZC13cml0ZSc6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAvLyA6cGxhY2Vob2xkZXJcblxuICAgICAgICAgIGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSk7XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0U3R5bGlzUGx1Z2lucyA9IFtwcmVmaXhlcl07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKG9wdGlvbnMpIHtcbiAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFrZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgaGF2ZSB0byBjb25maWd1cmUgYGtleWAgZm9yIHlvdXIgY2FjaGUuIFBsZWFzZSBtYWtlIHN1cmUgaXQncyB1bmlxdWUgKGFuZCBub3QgZXF1YWwgdG8gJ2NzcycpIGFzIGl0J3MgdXNlZCBmb3IgbGlua2luZyBzdHlsZXMgdG8geW91ciBjYWNoZS5cXG5cIiArIFwiSWYgbXVsdGlwbGUgY2FjaGVzIHNoYXJlIHRoZSBzYW1lIGtleSB0aGV5IG1pZ2h0IFxcXCJmaWdodFxcXCIgZm9yIGVhY2ggb3RoZXIncyBzdHlsZSBlbGVtZW50cy5cIik7XG4gIH1cblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgc3R5bGlzUGx1Z2lucyA9IG9wdGlvbnMuc3R5bGlzUGx1Z2lucyB8fCBkZWZhdWx0U3R5bGlzUGx1Z2lucztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBpZiAoL1teYS16LV0vLnRlc3Qoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1vdGlvbiBrZXkgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXIgY2FzZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyBhbmQgLSBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwYXNzZWRcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb25cIikuc3BsaXQoJyAnKTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGF0dHJpYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnNlcnRlZFthdHRyaWJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZXNUb0h5ZHJhdGUucHVzaChub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBfaW5zZXJ0O1xuXG4gIHZhciBvbW5pcHJlc2VudFBsdWdpbnMgPSBbY29tcGF0LCByZW1vdmVMYWJlbF07XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBvbW5pcHJlc2VudFBsdWdpbnMucHVzaChjcmVhdGVVbnNhZmVTZWxlY3RvcnNBbGFybSh7XG4gICAgICBnZXQgY29tcGF0KCkge1xuICAgICAgICByZXR1cm4gY2FjaGUuY29tcGF0O1xuICAgICAgfVxuXG4gICAgfSksIGluY29ycmVjdEltcG9ydEFsYXJtKTtcbiAgfVxuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgaWYgKCFlbGVtZW50LnJvb3QpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICBjdXJyZW50U2hlZXQuaW5zZXJ0KGVsZW1lbnRbXCJyZXR1cm5cIl0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudmFsdWUgJiYgZWxlbWVudC50eXBlICE9PSBDT01NRU5UKSB7XG4gICAgICAgICAgLy8gaW5zZXJ0IGVtcHR5IHJ1bGUgaW4gbm9uLXByb2R1Y3Rpb24gZW52aXJvbm1lbnRzXG4gICAgICAgICAgLy8gc28gQGVtb3Rpb24vamVzdCBjYW4gZ3JhYiBga2V5YCBmcm9tIHRoZSAoSlMpRE9NIGZvciBjYWNoZXMgd2l0aG91dCBhbnkgcnVsZXMgaW5zZXJ0ZWQgeWV0XG4gICAgICAgICAgY3VycmVudFNoZWV0Lmluc2VydChlbGVtZW50LnZhbHVlICsgXCJ7fVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gOiBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN1cnJlbnRTaGVldCA9IHtcbiAgICAgICAgICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgICAgICAgICBzaGVldC5pbnNlcnQocnVsZSArIHNlcmlhbGl6ZWQubWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCBob2lzdE5vblJlYWN0U3RhdGljcyQxIGZyb20gJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcblxuLy8gdGhpcyBmaWxlIGlzb2xhdGVzIHRoaXMgcGFja2FnZSB0aGF0IGlzIG5vdCB0cmVlLXNoYWtlYWJsZVxuLy8gYW5kIGlmIHRoaXMgbW9kdWxlIGRvZXNuJ3QgYWN0dWFsbHkgY29udGFpbiBhbnkgbG9naWMgb2YgaXRzIG93blxuLy8gdGhlbiBSb2xsdXAganVzdCB1c2UgJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJyBkaXJlY3RseSBpbiBvdGhlciBjaHVua3NcblxudmFyIGhvaXN0Tm9uUmVhY3RTdGF0aWNzID0gKGZ1bmN0aW9uICh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCkge1xuICByZXR1cm4gaG9pc3ROb25SZWFjdFN0YXRpY3MkMSh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCk7XG59KTtcblxuZXhwb3J0IHsgaG9pc3ROb25SZWFjdFN0YXRpY3MgYXMgZGVmYXVsdCB9O1xuIiwgInZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gKyBcIjtcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhd0NsYXNzTmFtZSArPSBjbGFzc05hbWUgKyBcIiBcIjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmF3Q2xhc3NOYW1lO1xufVxudmFyIHJlZ2lzdGVyU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgKSAmJiBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICB9XG59O1xudmFyIGluc2VydFN0eWxlcyA9IGZ1bmN0aW9uIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmIChjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgY3VycmVudCA9IHNlcmlhbGl6ZWQ7XG5cbiAgICBkbyB7XG4gICAgICBjYWNoZS5pbnNlcnQoc2VyaWFsaXplZCA9PT0gY3VycmVudCA/IFwiLlwiICsgY2xhc3NOYW1lIDogJycsIGN1cnJlbnQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcblxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICB9IHdoaWxlIChjdXJyZW50ICE9PSB1bmRlZmluZWQpO1xuICB9XG59O1xuXG5leHBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzIH07XG4iLCAiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FhcHBsZWJ5L3NtaGFzaGVyL2Jsb2IvNjFhMDUzMGYyODI3N2YyZTg1MGJmYzM5NjAwY2U2MWQwMmI1MThkZS9zcmMvTXVybXVySGFzaDIuY3BwI0wzNy1MODZcbmZ1bmN0aW9uIG11cm11cjIoc3RyKSB7XG4gIC8vICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3RhbnRzIGdlbmVyYXRlZCBvZmZsaW5lLlxuICAvLyBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywgdGhleSBqdXN0IGhhcHBlbiB0byB3b3JrIHdlbGwuXG4gIC8vIGNvbnN0IG0gPSAweDViZDFlOTk1O1xuICAvLyBjb25zdCByID0gMjQ7XG4gIC8vIEluaXRpYWxpemUgdGhlIGhhc2hcbiAgdmFyIGggPSAwOyAvLyBNaXggNCBieXRlcyBhdCBhIHRpbWUgaW50byB0aGUgaGFzaFxuXG4gIHZhciBrLFxuICAgICAgaSA9IDAsXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGZvciAoOyBsZW4gPj0gNDsgKytpLCBsZW4gLT0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgICBrIF49XG4gICAgLyogayA+Pj4gcjogKi9cbiAgICBrID4+PiAyNDtcbiAgICBoID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KSBeXG4gICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gSGFuZGxlIHRoZSBsYXN0IGZldyBieXRlcyBvZiB0aGUgaW5wdXQgYXJyYXlcblxuXG4gIHN3aXRjaCAobGVuKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID1cbiAgICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gRG8gYSBmZXcgZmluYWwgbWl4ZXMgb2YgdGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZld1xuICAvLyBieXRlcyBhcmUgd2VsbC1pbmNvcnBvcmF0ZWQuXG5cblxuICBoIF49IGggPj4+IDEzO1xuICBoID1cbiAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICByZXR1cm4gKChoIF4gaCA+Pj4gMTUpID4+PiAwKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCB7IG11cm11cjIgYXMgZGVmYXVsdCB9O1xuIiwgInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBhc3BlY3RSYXRpbzogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IHsgdW5pdGxlc3NLZXlzIGFzIGRlZmF1bHQgfTtcbiIsICJpbXBvcnQgaGFzaFN0cmluZyBmcm9tICdAZW1vdGlvbi9oYXNoJztcbmltcG9ydCB1bml0bGVzcyBmcm9tICdAZW1vdGlvbi91bml0bGVzcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SID0gXCJZb3UgaGF2ZSBpbGxlZ2FsIGVzY2FwZSBzZXF1ZW5jZSBpbiB5b3VyIHRlbXBsYXRlIGxpdGVyYWwsIG1vc3QgbGlrZWx5IGluc2lkZSBjb250ZW50J3MgcHJvcGVydHkgdmFsdWUuXFxuQmVjYXVzZSB5b3Ugd3JpdGUgeW91ciBDU1MgaW5zaWRlIGEgSmF2YVNjcmlwdCBzdHJpbmcgeW91IGFjdHVhbGx5IGhhdmUgdG8gZG8gZG91YmxlIGVzY2FwaW5nLCBzbyBmb3IgZXhhbXBsZSBcXFwiY29udGVudDogJ1xcXFwwMGQ3JztcXFwiIHNob3VsZCBiZWNvbWUgXFxcImNvbnRlbnQ6ICdcXFxcXFxcXDAwZDcnO1xcXCIuXFxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxcbmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1RlbXBsYXRlX2xpdGVyYWxzI0VTMjAxOF9yZXZpc2lvbl9vZl9pbGxlZ2FsX2VzY2FwZV9zZXF1ZW5jZXNcIjtcbnZhciBVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUiA9IFwiWW91IGhhdmUgcGFzc2VkIGluIGZhbHN5IHZhbHVlIGFzIHN0eWxlIG9iamVjdCdzIGtleSAoY2FuIGhhcHBlbiB3aGVuIGluIGV4YW1wbGUgeW91IHBhc3MgdW5leHBvcnRlZCBjb21wb25lbnQgYXMgY29tcHV0ZWQga2V5KS5cIjtcbnZhciBoeXBoZW5hdGVSZWdleCA9IC9bQS1aXXxebXMvZztcbnZhciBhbmltYXRpb25SZWdleCA9IC9fRU1PXyhbXl9dKz8pXyhbXl0qPylfRU1PXy9nO1xuXG52YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIGlzQ3VzdG9tUHJvcGVydHkocHJvcGVydHkpIHtcbiAgcmV0dXJuIHByb3BlcnR5LmNoYXJDb2RlQXQoMSkgPT09IDQ1O1xufTtcblxudmFyIGlzUHJvY2Vzc2FibGVWYWx1ZSA9IGZ1bmN0aW9uIGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbn07XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBpc0N1c3RvbVByb3BlcnR5KHN0eWxlTmFtZSkgPyBzdHlsZU5hbWUgOiBzdHlsZU5hbWUucmVwbGFjZShoeXBoZW5hdGVSZWdleCwgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG59KTtcblxudmFyIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHAxLFxuICAgICAgICAgICAgICBzdHlsZXM6IHAyLFxuICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGlmICh1bml0bGVzc1trZXldICE9PSAxICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgY29udGVudFZhbHVlUGF0dGVybiA9IC8odmFyfGF0dHJ8Y291bnRlcnM/fHVybHxlbGVtZW50fCgoKHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsKSl8Y29uaWMpLWdyYWRpZW50KVxcKHwobm8tKT8ob3BlbnxjbG9zZSktcXVvdGUvO1xuICB2YXIgY29udGVudFZhbHVlcyA9IFsnbm9ybWFsJywgJ25vbmUnLCAnaW5pdGlhbCcsICdpbmhlcml0JywgJ3Vuc2V0J107XG4gIHZhciBvbGRQcm9jZXNzU3R5bGVWYWx1ZSA9IHByb2Nlc3NTdHlsZVZhbHVlO1xuICB2YXIgbXNQYXR0ZXJuID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuICB2YXIgaHlwaGVuYXRlZENhY2hlID0ge307XG5cbiAgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCBjb250ZW50VmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSAmJiAhY29udGVudFZhbHVlUGF0dGVybi50ZXN0KHZhbHVlKSAmJiAodmFsdWUuY2hhckF0KDApICE9PSB2YWx1ZS5jaGFyQXQodmFsdWUubGVuZ3RoIC0gMSkgfHwgdmFsdWUuY2hhckF0KDApICE9PSAnXCInICYmIHZhbHVlLmNoYXJBdCgwKSAhPT0gXCInXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBzZWVtIHRvIGJlIHVzaW5nIGEgdmFsdWUgZm9yICdjb250ZW50JyB3aXRob3V0IHF1b3RlcywgdHJ5IHJlcGxhY2luZyBpdCB3aXRoIGBjb250ZW50OiAnXFxcIlwiICsgdmFsdWUgKyBcIlxcXCInYFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvY2Vzc2VkID0gb2xkUHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSk7XG5cbiAgICBpZiAocHJvY2Vzc2VkICE9PSAnJyAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIGtleS5pbmRleE9mKCctJykgIT09IC0xICYmIGh5cGhlbmF0ZWRDYWNoZVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGh5cGhlbmF0ZWRDYWNoZVtrZXldID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJVc2luZyBrZWJhYi1jYXNlIGZvciBjc3MgcHJvcGVydGllcyBpbiBvYmplY3RzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiBcIiArIGtleS5yZXBsYWNlKG1zUGF0dGVybiwgJ21zLScpLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKHN0ciwgX2NoYXIpIHtcbiAgICAgICAgcmV0dXJuIF9jaGFyLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9KSArIFwiP1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9O1xufVxuXG52YXIgbm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UgPSAnQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJyArICdAZW1vdGlvbi9iYWJlbC1wbHVnaW4sIHRoZSBzd2MgRW1vdGlvbiBwbHVnaW4sIG9yIGFub3RoZXIgRW1vdGlvbi1hd2FyZSAnICsgJ2NvbXBpbGVyIHRyYW5zZm9ybS4nO1xuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKSB7XG4gIGlmIChpbnRlcnBvbGF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaW50ZXJwb2xhdGlvbi5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLnRvU3RyaW5nKCkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnBvbGF0aW9uO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5hbmltID09PSAxKSB7XG4gICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgbmFtZTogaW50ZXJwb2xhdGlvbi5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBpbnRlcnBvbGF0aW9uLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVycG9sYXRpb24ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBpbnRlcnBvbGF0aW9uLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gaW50ZXJwb2xhdGlvbi5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGludGVycG9sYXRpb24ubWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0eWxlcyArPSBpbnRlcnBvbGF0aW9uLm1hcDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICBpZiAobWVyZ2VkUHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0N1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgY3Vyc29yID0gcHJldmlvdXNDdXJzb3I7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Z1bmN0aW9ucyB0aGF0IGFyZSBpbnRlcnBvbGF0ZWQgaW4gY3NzIGNhbGxzIHdpbGwgYmUgc3RyaW5naWZpZWQuXFxuJyArICdJZiB5b3Ugd2FudCB0byBoYXZlIGEgY3NzIGNhbGwgYmFzZWQgb24gcHJvcHMsIGNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNzcyBjYWxsIGxpa2UgdGhpc1xcbicgKyAnbGV0IGR5bmFtaWNTdHlsZSA9IChwcm9wcykgPT4gY3NzYGNvbG9yOiAke3Byb3BzLmNvbG9yfWBcXG4nICsgJ0l0IGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgd2l0aCBwcm9wcyBvciBpbnRlcnBvbGF0ZWQgaW4gYSBzdHlsZWQgY2FsbCBsaWtlIHRoaXNcXG4nICsgXCJsZXQgU29tZUNvbXBvbmVudCA9IHN0eWxlZCgnZGl2JylgJHtkeW5hbWljU3R5bGV9YFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gW107XG4gICAgICAgIHZhciByZXBsYWNlZCA9IGludGVycG9sYXRpb24ucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICB2YXIgZmFrZVZhck5hbWUgPSBcImFuaW1hdGlvblwiICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgICAgbWF0Y2hlZC5wdXNoKFwiY29uc3QgXCIgKyBmYWtlVmFyTmFtZSArIFwiID0ga2V5ZnJhbWVzYFwiICsgcDIucmVwbGFjZSgvXkBrZXlmcmFtZXMgYW5pbWF0aW9uLVxcdysvLCAnJykgKyBcImBcIik7XG4gICAgICAgICAgcmV0dXJuIFwiJHtcIiArIGZha2VWYXJOYW1lICsgXCJ9XCI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2BrZXlmcmFtZXNgIG91dHB1dCBnb3QgaW50ZXJwb2xhdGVkIGludG8gcGxhaW4gc3RyaW5nLCBwbGVhc2Ugd3JhcCBpdCB3aXRoIGBjc3NgLlxcblxcbicgKyAnSW5zdGVhZCBvZiBkb2luZyB0aGlzOlxcblxcbicgKyBbXS5jb25jYXQobWF0Y2hlZCwgW1wiYFwiICsgcmVwbGFjZWQgKyBcImBcIl0pLmpvaW4oJ1xcbicpICsgJ1xcblxcbllvdSBzaG91bGQgd3JhcCBpdCB3aXRoIGBjc3NgIGxpa2UgdGhpczpcXG5cXG4nICsgKFwiY3NzYFwiICsgcmVwbGFjZWQgKyBcImBcIikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIGlmIChyZWdpc3RlcmVkID09IG51bGwpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2ludGVycG9sYXRpb25dO1xuICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgPyBjYWNoZWQgOiBpbnRlcnBvbGF0aW9uO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmopIHtcbiAgdmFyIHN0cmluZyA9ICcnO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9ialtpXSkgKyBcIjtcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2tleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtfa2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIHJlZ2lzdGVyZWRbdmFsdWVdICsgXCJ9XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShfa2V5LCB2YWx1ZSkgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF9rZXkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ3N0cmluZycgJiYgKHJlZ2lzdGVyZWQgPT0gbnVsbCB8fCByZWdpc3RlcmVkW3ZhbHVlWzBdXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB2YWx1ZS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWVbX2ldKSkge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChfa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgaW50ZXJwb2xhdGVkICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIF9rZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFVOREVGSU5FRF9BU19PQkpFQ1RfS0VZX0VSUk9SKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgaW50ZXJwb2xhdGVkICsgXCJ9XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgbGFiZWxQYXR0ZXJuID0gL2xhYmVsOlxccyooW15cXHM7XFxue10rKVxccyooO3wkKS9nO1xudmFyIHNvdXJjZU1hcFBhdHRlcm47XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHNvdXJjZU1hcFBhdHRlcm4gPSAvXFwvXFwqI1xcc3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblxcL2pzb247XFxTK1xccytcXCpcXC8vZztcbn0gLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cblxudmFyIGN1cnNvcjtcbnZhciBzZXJpYWxpemVTdHlsZXMgPSBmdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgfVxuXG4gICAgc3R5bGVzICs9IHN0cmluZ3NbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0pO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzICs9IHN0cmluZ3NbaV07XG4gICAgfVxuICB9XG5cbiAgdmFyIHNvdXJjZU1hcDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHN0eWxlcyA9IHN0eWxlcy5yZXBsYWNlKHNvdXJjZU1hcFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgc291cmNlTWFwID0gbWF0Y2g7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gIH0gLy8gdXNpbmcgYSBnbG9iYWwgcmVnZXggd2l0aCAuZXhlYyBpcyBzdGF0ZWZ1bCBzbyBsYXN0SW5kZXggaGFzIHRvIGJlIHJlc2V0IGVhY2ggdGltZVxuXG5cbiAgbGFiZWxQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHZhciBpZGVudGlmaWVyTmFtZSA9ICcnO1xuICB2YXIgbWF0Y2g7IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWI4MDljMmNmMjk0OTgwMGEwZjYxZmI1XG5cbiAgd2hpbGUgKChtYXRjaCA9IGxhYmVsUGF0dGVybi5leGVjKHN0eWxlcykpICE9PSBudWxsKSB7XG4gICAgaWRlbnRpZmllck5hbWUgKz0gJy0nICsgLy8gJEZsb3dGaXhNZSB3ZSBrbm93IGl0J3Mgbm90IG51bGxcbiAgICBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFNlcmlhbGl6ZWRTdHlsZXMgdHlwZSBkb2Vzbid0IGhhdmUgdG9TdHJpbmcgcHJvcGVydHkgKGFuZCB3ZSBkb24ndCB3YW50IHRvIGFkZCBpdClcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHN0eWxlczogc3R5bGVzLFxuICAgICAgbWFwOiBzb3VyY2VNYXAsXG4gICAgICBuZXh0OiBjdXJzb3IsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufTtcblxuZXhwb3J0IHsgc2VyaWFsaXplU3R5bGVzIH07XG4iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG52YXIgc3luY0ZhbGxiYWNrID0gZnVuY3Rpb24gc3luY0ZhbGxiYWNrKGNyZWF0ZSkge1xuICByZXR1cm4gY3JlYXRlKCk7XG59O1xuXG52YXIgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbJ3VzZUluc2VydGlvbicgKyAnRWZmZWN0J10gPyBSZWFjdFsndXNlSW5zZXJ0aW9uJyArICdFZmZlY3QnXSA6IGZhbHNlO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgPSB1c2VJbnNlcnRpb25FZmZlY3QgfHwgc3luY0ZhbGxiYWNrO1xudmFyIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayA9IHVzZUluc2VydGlvbkVmZmVjdCB8fCBSZWFjdC51c2VMYXlvdXRFZmZlY3Q7XG5cbmV4cG9ydCB7IHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayB9O1xuIiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IHdlYWtNZW1vaXplIGZyb20gJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgaG9pc3ROb25SZWFjdFN0YXRpY3MgZnJvbSAnLi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0IHsgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayB9IGZyb20gJ0BlbW90aW9uL3VzZS1pbnNlcnRpb24tZWZmZWN0LXdpdGgtZmFsbGJhY2tzJztcblxudmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnO1xudmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG52YXIgRW1vdGlvbkNhY2hlQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoIC8vIHdlJ3JlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcHJlY29uc3RydWN0J3MgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGluIHRoaXMgb25lIGNhc2Vcbi8vIGJlY2F1c2UgdGhpcyBtb2R1bGUgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB0aGUgYnJvd3NlciBhbmQgbm9kZVxuLy8gYnV0IGl0J3MgYWxzbyByZXF1aXJlZCBpbiByZWFjdCBuYXRpdmUgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzIHNvbWV0aW1lc1xuLy8gYW5kIHdlIGNvdWxkIGhhdmUgYSBzcGVjaWFsIGJ1aWxkIGp1c3QgZm9yIHRoYXRcbi8vIGJ1dCB0aGlzIGlzIG11Y2ggZWFzaWVyIGFuZCB0aGUgbmF0aXZlIHBhY2thZ2VzXG4vLyBtaWdodCB1c2UgYSBkaWZmZXJlbnQgdGhlbWUgY29udGV4dCBpbiB0aGUgZnV0dXJlIGFueXdheVxudHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IC8qICNfX1BVUkVfXyAqL2NyZWF0ZUNhY2hlKHtcbiAga2V5OiAnY3NzJ1xufSkgOiBudWxsKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRW1vdGlvbkNhY2hlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdFbW90aW9uQ2FjaGVDb250ZXh0Jztcbn1cblxudmFyIENhY2hlUHJvdmlkZXIgPSBFbW90aW9uQ2FjaGVDb250ZXh0LlByb3ZpZGVyO1xudmFyIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHVzZUVtb3Rpb25DYWNoZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoRW1vdGlvbkNhY2hlQ29udGV4dCk7XG59O1xuXG52YXIgd2l0aEVtb3Rpb25DYWNoZSA9IGZ1bmN0aW9uIHdpdGhFbW90aW9uQ2FjaGUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lXG4gIHJldHVybiAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICAgIC8vIHRoZSBjYWNoZSB3aWxsIG5ldmVyIGJlIG51bGwgaW4gdGhlIGJyb3dzZXJcbiAgICB2YXIgY2FjaGUgPSB1c2VDb250ZXh0KEVtb3Rpb25DYWNoZUNvbnRleHQpO1xuICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSwgcmVmKTtcbiAgfSk7XG59O1xuXG5pZiAoIWlzQnJvd3Nlcikge1xuICB3aXRoRW1vdGlvbkNhY2hlID0gZnVuY3Rpb24gd2l0aEVtb3Rpb25DYWNoZShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgdmFyIGNhY2hlID0gdXNlQ29udGV4dChFbW90aW9uQ2FjaGVDb250ZXh0KTtcblxuICAgICAgaWYgKGNhY2hlID09PSBudWxsKSB7XG4gICAgICAgIC8vIHllcywgd2UncmUgcG90ZW50aWFsbHkgY3JlYXRpbmcgdGhpcyBvbiBldmVyeSByZW5kZXJcbiAgICAgICAgLy8gaXQgZG9lc24ndCBhY3R1YWxseSBtYXR0ZXIgdGhvdWdoIHNpbmNlIGl0J3Mgb25seSBvbiB0aGUgc2VydmVyXG4gICAgICAgIC8vIHNvIHRoZXJlIHdpbGwgb25seSBldmVyeSBiZSBhIHNpbmdsZSByZW5kZXJcbiAgICAgICAgLy8gdGhhdCBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBiZWNhdXNlIG9mIHN1c3BlbnNlIGFuZCBldGMuIGJ1dCBmb3Igbm93LFxuICAgICAgICAvLyB0aGlzIHdvcmtzIGFuZCBpIGRvbid0IHdhbnQgdG8gb3B0aW1pc2UgZm9yIGEgZnV0dXJlIHRoaW5nIHRoYXQgd2UgYXJlbid0IHN1cmUgYWJvdXRcbiAgICAgICAgY2FjaGUgPSBjcmVhdGVDYWNoZSh7XG4gICAgICAgICAga2V5OiAnY3NzJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVtb3Rpb25DYWNoZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICB2YWx1ZTogY2FjaGVcbiAgICAgICAgfSwgZnVuYyhwcm9wcywgY2FjaGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmdW5jKHByb3BzLCBjYWNoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cblxudmFyIFRoZW1lQ29udGV4dCA9IC8qICNfX1BVUkVfXyAqL1JlYWN0LmNyZWF0ZUNvbnRleHQoe30pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUaGVtZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnRW1vdGlvblRoZW1lQ29udGV4dCc7XG59XG5cbnZhciB1c2VUaGVtZSA9IGZ1bmN0aW9uIHVzZVRoZW1lKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xufTtcblxudmFyIGdldFRoZW1lID0gZnVuY3Rpb24gZ2V0VGhlbWUob3V0ZXJUaGVtZSwgdGhlbWUpIHtcbiAgaWYgKHR5cGVvZiB0aGVtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBtZXJnZWRUaGVtZSA9IHRoZW1lKG91dGVyVGhlbWUpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKG1lcmdlZFRoZW1lID09IG51bGwgfHwgdHlwZW9mIG1lcmdlZFRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG1lcmdlZFRoZW1lKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW1RoZW1lUHJvdmlkZXJdIFBsZWFzZSByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLiB0aGVtZT17KCkgPT4gKHt9KX0hJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZFRoZW1lO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgKHRoZW1lID09IG51bGwgfHwgdHlwZW9mIHRoZW1lICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHRoZW1lKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1tUaGVtZVByb3ZpZGVyXSBQbGVhc2UgbWFrZSB5b3VyIHRoZW1lIHByb3AgYSBwbGFpbiBvYmplY3QnKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3V0ZXJUaGVtZSwgdGhlbWUpO1xufTtcblxudmFyIGNyZWF0ZUNhY2hlV2l0aFRoZW1lID0gLyogI19fUFVSRV9fICovd2Vha01lbW9pemUoZnVuY3Rpb24gKG91dGVyVGhlbWUpIHtcbiAgcmV0dXJuIHdlYWtNZW1vaXplKGZ1bmN0aW9uICh0aGVtZSkge1xuICAgIHJldHVybiBnZXRUaGVtZShvdXRlclRoZW1lLCB0aGVtZSk7XG4gIH0pO1xufSk7XG52YXIgVGhlbWVQcm92aWRlciA9IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgdmFyIHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuXG4gIGlmIChwcm9wcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICB0aGVtZSA9IGNyZWF0ZUNhY2hlV2l0aFRoZW1lKHRoZW1lKShwcm9wcy50aGVtZSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5mdW5jdGlvbiB3aXRoVGhlbWUoQ29tcG9uZW50KSB7XG4gIHZhciBjb21wb25lbnROYW1lID0gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gIHZhciByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIocHJvcHMsIHJlZikge1xuICAgIHZhciB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgICB0aGVtZTogdGhlbWUsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIHByb3BzKSk7XG4gIH07IC8vICRGbG93Rml4TWVcblxuXG4gIHZhciBXaXRoVGhlbWUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihyZW5kZXIpO1xuICBXaXRoVGhlbWUuZGlzcGxheU5hbWUgPSBcIldpdGhUaGVtZShcIiArIGNvbXBvbmVudE5hbWUgKyBcIilcIjtcbiAgcmV0dXJuIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhUaGVtZSwgQ29tcG9uZW50KTtcbn1cblxudmFyIGdldExhc3RQYXJ0ID0gZnVuY3Rpb24gZ2V0TGFzdFBhcnQoZnVuY3Rpb25OYW1lKSB7XG4gIC8vIFRoZSBtYXRjaCBtYXkgYmUgc29tZXRoaW5nIGxpa2UgJ09iamVjdC5jcmVhdGVFbW90aW9uUHJvcHMnIG9yXG4gIC8vICdMb2FkZXIucHJvdG90eXBlLnJlbmRlcidcbiAgdmFyIHBhcnRzID0gZnVuY3Rpb25OYW1lLnNwbGl0KCcuJyk7XG4gIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbn07XG5cbnZhciBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUgPSBmdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWVGcm9tU3RhY2tUcmFjZUxpbmUobGluZSkge1xuICAvLyBWOFxuICB2YXIgbWF0Y2ggPSAvXlxccythdFxccysoW0EtWmEtejAtOSQuXSspXFxzLy5leGVjKGxpbmUpO1xuICBpZiAobWF0Y2gpIHJldHVybiBnZXRMYXN0UGFydChtYXRjaFsxXSk7IC8vIFNhZmFyaSAvIEZpcmVmb3hcblxuICBtYXRjaCA9IC9eKFtBLVphLXowLTkkLl0rKUAvLmV4ZWMobGluZSk7XG4gIGlmIChtYXRjaCkgcmV0dXJuIGdldExhc3RQYXJ0KG1hdGNoWzFdKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciBpbnRlcm5hbFJlYWN0RnVuY3Rpb25OYW1lcyA9IC8qICNfX1BVUkVfXyAqL25ldyBTZXQoWydyZW5kZXJXaXRoSG9va3MnLCAncHJvY2Vzc0NoaWxkJywgJ2ZpbmlzaENsYXNzQ29tcG9uZW50JywgJ3JlbmRlclRvU3RyaW5nJ10pOyAvLyBUaGVzZSBpZGVudGlmaWVycyBjb21lIGZyb20gZXJyb3Igc3RhY2tzLCBzbyB0aGV5IGhhdmUgdG8gYmUgdmFsaWQgSlNcbi8vIGlkZW50aWZpZXJzLCB0aHVzIHdlIG9ubHkgbmVlZCB0byByZXBsYWNlIHdoYXQgaXMgYSB2YWxpZCBjaGFyYWN0ZXIgZm9yIEpTLFxuLy8gYnV0IG5vdCBmb3IgQ1NTLlxuXG52YXIgc2FuaXRpemVJZGVudGlmaWVyID0gZnVuY3Rpb24gc2FuaXRpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgcmV0dXJuIGlkZW50aWZpZXIucmVwbGFjZSgvXFwkL2csICctJyk7XG59O1xuXG52YXIgZ2V0TGFiZWxGcm9tU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIGdldExhYmVsRnJvbVN0YWNrVHJhY2Uoc3RhY2tUcmFjZSkge1xuICBpZiAoIXN0YWNrVHJhY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciBsaW5lcyA9IHN0YWNrVHJhY2Uuc3BsaXQoJ1xcbicpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZnVuY3Rpb25OYW1lID0gZ2V0RnVuY3Rpb25OYW1lRnJvbVN0YWNrVHJhY2VMaW5lKGxpbmVzW2ldKTsgLy8gVGhlIGZpcnN0IGxpbmUgb2YgVjggc3RhY2sgdHJhY2VzIGlzIGp1c3QgXCJFcnJvclwiXG5cbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgY29udGludWU7IC8vIElmIHdlIHJlYWNoIG9uZSBvZiB0aGVzZSwgd2UgaGF2ZSBnb25lIHRvbyBmYXIgYW5kIHNob3VsZCBxdWl0XG5cbiAgICBpZiAoaW50ZXJuYWxSZWFjdEZ1bmN0aW9uTmFtZXMuaGFzKGZ1bmN0aW9uTmFtZSkpIGJyZWFrOyAvLyBUaGUgY29tcG9uZW50IG5hbWUgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBzdGFjayB0aGF0IHN0YXJ0cyB3aXRoIGFuXG4gICAgLy8gdXBwZXJjYXNlIGxldHRlclxuXG4gICAgaWYgKC9eW0EtWl0vLnRlc3QoZnVuY3Rpb25OYW1lKSkgcmV0dXJuIHNhbml0aXplSWRlbnRpZmllcihmdW5jdGlvbk5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbnZhciB0eXBlUHJvcE5hbWUgPSAnX19FTU9USU9OX1RZUEVfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgbGFiZWxQcm9wTmFtZSA9ICdfX0VNT1RJT05fTEFCRUxfUExFQVNFX0RPX05PVF9VU0VfXyc7XG52YXIgY3JlYXRlRW1vdGlvblByb3BzID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvblByb3BzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBwcm9wcy5jc3MgPT09ICdzdHJpbmcnICYmIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgY3NzIGRlY2xhcmF0aW9uXG4gIHByb3BzLmNzcy5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3RyaW5ncyBhcmUgbm90IGFsbG93ZWQgYXMgY3NzIHByb3AgdmFsdWVzLCBwbGVhc2Ugd3JhcCBpdCBpbiBhIGNzcyB0ZW1wbGF0ZSBsaXRlcmFsIGZyb20gJ0BlbW90aW9uL3JlYWN0JyBsaWtlIHRoaXM6IGNzc2BcIiArIHByb3BzLmNzcyArIFwiYFwiKTtcbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIGlmIChoYXNPd24uY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgbmV3UHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxuICB9XG5cbiAgbmV3UHJvcHNbdHlwZVByb3BOYW1lXSA9IHR5cGU7IC8vIEZvciBwZXJmb3JtYW5jZSwgb25seSBjYWxsIGdldExhYmVsRnJvbVN0YWNrVHJhY2UgaW4gZGV2ZWxvcG1lbnQgYW5kIHdoZW5cbiAgLy8gdGhlIGxhYmVsIGhhc24ndCBhbHJlYWR5IGJlZW4gY29tcHV0ZWRcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhIXByb3BzLmNzcyAmJiAodHlwZW9mIHByb3BzLmNzcyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHByb3BzLmNzcy5uYW1lICE9PSAnc3RyaW5nJyB8fCBwcm9wcy5jc3MubmFtZS5pbmRleE9mKCctJykgPT09IC0xKSkge1xuICAgIHZhciBsYWJlbCA9IGdldExhYmVsRnJvbVN0YWNrVHJhY2UobmV3IEVycm9yKCkuc3RhY2spO1xuICAgIGlmIChsYWJlbCkgbmV3UHJvcHNbbGFiZWxQcm9wTmFtZV0gPSBsYWJlbDtcbiAgfVxuXG4gIHJldHVybiBuZXdQcm9wcztcbn07XG5cbnZhciBJbnNlcnRpb24gPSBmdW5jdGlvbiBJbnNlcnRpb24oX3JlZikge1xuICB2YXIgY2FjaGUgPSBfcmVmLmNhY2hlLFxuICAgICAgc2VyaWFsaXplZCA9IF9yZWYuc2VyaWFsaXplZCxcbiAgICAgIGlzU3RyaW5nVGFnID0gX3JlZi5pc1N0cmluZ1RhZztcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0QWx3YXlzV2l0aFN5bmNGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBFbW90aW9uID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlLCByZWYpIHtcbiAgdmFyIGNzc1Byb3AgPSBwcm9wcy5jc3M7IC8vIHNvIHRoYXQgdXNpbmcgYGNzc2AgZnJvbSBgZW1vdGlvbmAgYW5kIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgY3NzIHByb3Agd29ya3NcbiAgLy8gbm90IHBhc3NpbmcgdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8gc2VyaWFsaXplU3R5bGVzIGJlY2F1c2UgaXQgd291bGRcbiAgLy8gbWFrZSBjZXJ0YWluIGJhYmVsIG9wdGltaXNhdGlvbnMgbm90IHBvc3NpYmxlXG5cbiAgaWYgKHR5cGVvZiBjc3NQcm9wID09PSAnc3RyaW5nJyAmJiBjYWNoZS5yZWdpc3RlcmVkW2Nzc1Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICBjc3NQcm9wID0gY2FjaGUucmVnaXN0ZXJlZFtjc3NQcm9wXTtcbiAgfVxuXG4gIHZhciBXcmFwcGVkQ29tcG9uZW50ID0gcHJvcHNbdHlwZVByb3BOYW1lXTtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbY3NzUHJvcF07XG4gIHZhciBjbGFzc05hbWUgPSAnJztcblxuICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBnZXRSZWdpc3RlcmVkU3R5bGVzKGNhY2hlLnJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIHByb3BzLmNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuY2xhc3NOYW1lICE9IG51bGwpIHtcbiAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKHJlZ2lzdGVyZWRTdHlsZXMsIHVuZGVmaW5lZCwgUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBzZXJpYWxpemVkLm5hbWUuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgIHZhciBsYWJlbEZyb21TdGFjayA9IHByb3BzW2xhYmVsUHJvcE5hbWVdO1xuXG4gICAgaWYgKGxhYmVsRnJvbVN0YWNrKSB7XG4gICAgICBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzZXJpYWxpemVkLCAnbGFiZWw6JyArIGxhYmVsRnJvbVN0YWNrICsgJzsnXSk7XG4gICAgfVxuICB9XG5cbiAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuICB2YXIgbmV3UHJvcHMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoaGFzT3duLmNhbGwocHJvcHMsIGtleSkgJiYga2V5ICE9PSAnY3NzJyAmJiBrZXkgIT09IHR5cGVQcm9wTmFtZSAmJiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyB8fCBrZXkgIT09IGxhYmVsUHJvcE5hbWUpKSB7XG4gICAgICBuZXdQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9XG4gIH1cblxuICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZDogc2VyaWFsaXplZCxcbiAgICBpc1N0cmluZ1RhZzogdHlwZW9mIFdyYXBwZWRDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBuZXdQcm9wcykpO1xufSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEVtb3Rpb24uZGlzcGxheU5hbWUgPSAnRW1vdGlvbkNzc1Byb3BJbnRlcm5hbCc7XG59XG5cbnZhciBFbW90aW9uJDEgPSBFbW90aW9uO1xuXG5leHBvcnQgeyBDYWNoZVByb3ZpZGVyIGFzIEMsIEVtb3Rpb24kMSBhcyBFLCBUaGVtZUNvbnRleHQgYXMgVCwgX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIGFzIF8sIFRoZW1lUHJvdmlkZXIgYXMgYSwgd2l0aFRoZW1lIGFzIGIsIGNyZWF0ZUVtb3Rpb25Qcm9wcyBhcyBjLCBoYXNPd24gYXMgaCwgaXNCcm93c2VyIGFzIGksIHVzZVRoZW1lIGFzIHUsIHdpdGhFbW90aW9uQ2FjaGUgYXMgdyB9O1xuIiwgImltcG9ydCB7IGggYXMgaGFzT3duLCBFIGFzIEVtb3Rpb24sIGMgYXMgY3JlYXRlRW1vdGlvblByb3BzLCB3IGFzIHdpdGhFbW90aW9uQ2FjaGUsIFQgYXMgVGhlbWVDb250ZXh0LCBpIGFzIGlzQnJvd3NlciQxIH0gZnJvbSAnLi9lbW90aW9uLWVsZW1lbnQtNDNjNmZlYTAuYnJvd3Nlci5lc20uanMnO1xuZXhwb3J0IHsgQyBhcyBDYWNoZVByb3ZpZGVyLCBUIGFzIFRoZW1lQ29udGV4dCwgYSBhcyBUaGVtZVByb3ZpZGVyLCBfIGFzIF9fdW5zYWZlX3VzZUVtb3Rpb25DYWNoZSwgdSBhcyB1c2VUaGVtZSwgdyBhcyB3aXRoRW1vdGlvbkNhY2hlLCBiIGFzIHdpdGhUaGVtZSB9IGZyb20gJy4vZW1vdGlvbi1lbGVtZW50LTQzYzZmZWEwLmJyb3dzZXIuZXNtLmpzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGluc2VydFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGdldFJlZ2lzdGVyZWRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RXaXRoTGF5b3V0RmFsbGJhY2ssIHVzZUluc2VydGlvbkVmZmVjdEFsd2F5c1dpdGhTeW5jRmFsbGJhY2sgfSBmcm9tICdAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrcyc7XG5pbXBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi9zZXJpYWxpemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJy4uL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qcyc7XG5pbXBvcnQgJ2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzJztcblxudmFyIHBrZyA9IHtcblx0bmFtZTogXCJAZW1vdGlvbi9yZWFjdFwiLFxuXHR2ZXJzaW9uOiBcIjExLjExLjRcIixcblx0bWFpbjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCIsXG5cdG1vZHVsZTogXCJkaXN0L2Vtb3Rpb24tcmVhY3QuZXNtLmpzXCIsXG5cdGJyb3dzZXI6IHtcblx0XHRcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmVzbS5qc1wiOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0LmJyb3dzZXIuZXNtLmpzXCJcblx0fSxcblx0ZXhwb3J0czoge1xuXHRcdFwiLlwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vZGlzdC9lbW90aW9uLXJlYWN0Lndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2Rpc3QvZW1vdGlvbi1yZWFjdC5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9kaXN0L2Vtb3Rpb24tcmVhY3QuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtcnVudGltZVwiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vanN4LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL2pzeC1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtcnVudGltZS5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LXJ1bnRpbWUuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9faXNvbGF0ZWQtaG5yc1wiOiB7XG5cdFx0XHRtb2R1bGU6IHtcblx0XHRcdFx0d29ya2VyOiBcIi4vX2lzb2xhdGVkLWhucnMvZGlzdC9lbW90aW9uLXJlYWN0LV9pc29sYXRlZC1obnJzLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5icm93c2VyLmVzbS5qc1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL19pc29sYXRlZC1obnJzL2Rpc3QvZW1vdGlvbi1yZWFjdC1faXNvbGF0ZWQtaG5ycy5lc20uanNcIlxuXHRcdFx0fSxcblx0XHRcdFwiaW1wb3J0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9faXNvbGF0ZWQtaG5ycy9kaXN0L2Vtb3Rpb24tcmVhY3QtX2lzb2xhdGVkLWhucnMuY2pzLmpzXCJcblx0XHR9LFxuXHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWVcIjoge1xuXHRcdFx0bW9kdWxlOiB7XG5cdFx0XHRcdHdvcmtlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLndvcmtlci5lc20uanNcIixcblx0XHRcdFx0YnJvd3NlcjogXCIuL2pzeC1kZXYtcnVudGltZS9kaXN0L2Vtb3Rpb24tcmVhY3QtanN4LWRldi1ydW50aW1lLmJyb3dzZXIuZXNtLmpzXCIsXG5cdFx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZXNtLmpzXCJcblx0XHRcdH0sXG5cdFx0XHRcImltcG9ydFwiOiBcIi4vanN4LWRldi1ydW50aW1lL2Rpc3QvZW1vdGlvbi1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuY2pzLm1qc1wiLFxuXHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9qc3gtZGV2LXJ1bnRpbWUvZGlzdC9lbW90aW9uLXJlYWN0LWpzeC1kZXYtcnVudGltZS5janMuanNcIlxuXHRcdH0sXG5cdFx0XCIuL3BhY2thZ2UuanNvblwiOiBcIi4vcGFja2FnZS5qc29uXCIsXG5cdFx0XCIuL3R5cGVzL2Nzcy1wcm9wXCI6IFwiLi90eXBlcy9jc3MtcHJvcC5kLnRzXCIsXG5cdFx0XCIuL21hY3JvXCI6IHtcblx0XHRcdHR5cGVzOiB7XG5cdFx0XHRcdFwiaW1wb3J0XCI6IFwiLi9tYWNyby5kLm10c1wiLFxuXHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmQudHNcIlxuXHRcdFx0fSxcblx0XHRcdFwiZGVmYXVsdFwiOiBcIi4vbWFjcm8uanNcIlxuXHRcdH1cblx0fSxcblx0dHlwZXM6IFwidHlwZXMvaW5kZXguZC50c1wiLFxuXHRmaWxlczogW1xuXHRcdFwic3JjXCIsXG5cdFx0XCJkaXN0XCIsXG5cdFx0XCJqc3gtcnVudGltZVwiLFxuXHRcdFwianN4LWRldi1ydW50aW1lXCIsXG5cdFx0XCJfaXNvbGF0ZWQtaG5yc1wiLFxuXHRcdFwidHlwZXMvKi5kLnRzXCIsXG5cdFx0XCJtYWNyby4qXCJcblx0XSxcblx0c2lkZUVmZmVjdHM6IGZhbHNlLFxuXHRhdXRob3I6IFwiRW1vdGlvbiBDb250cmlidXRvcnNcIixcblx0bGljZW5zZTogXCJNSVRcIixcblx0c2NyaXB0czoge1xuXHRcdFwidGVzdDp0eXBlc2NyaXB0XCI6IFwiZHRzbGludCB0eXBlc1wiXG5cdH0sXG5cdGRlcGVuZGVuY2llczoge1xuXHRcdFwiQGJhYmVsL3J1bnRpbWVcIjogXCJeNy4xOC4zXCIsXG5cdFx0XCJAZW1vdGlvbi9iYWJlbC1wbHVnaW5cIjogXCJeMTEuMTEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vY2FjaGVcIjogXCJeMTEuMTEuMFwiLFxuXHRcdFwiQGVtb3Rpb24vc2VyaWFsaXplXCI6IFwiXjEuMS4zXCIsXG5cdFx0XCJAZW1vdGlvbi91c2UtaW5zZXJ0aW9uLWVmZmVjdC13aXRoLWZhbGxiYWNrc1wiOiBcIl4xLjAuMVwiLFxuXHRcdFwiQGVtb3Rpb24vdXRpbHNcIjogXCJeMS4yLjFcIixcblx0XHRcIkBlbW90aW9uL3dlYWstbWVtb2l6ZVwiOiBcIl4wLjMuMVwiLFxuXHRcdFwiaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3NcIjogXCJeMy4zLjFcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzOiB7XG5cdFx0cmVhY3Q6IFwiPj0xNi44LjBcIlxuXHR9LFxuXHRwZWVyRGVwZW5kZW5jaWVzTWV0YToge1xuXHRcdFwiQHR5cGVzL3JlYWN0XCI6IHtcblx0XHRcdG9wdGlvbmFsOiB0cnVlXG5cdFx0fVxuXHR9LFxuXHRkZXZEZXBlbmRlbmNpZXM6IHtcblx0XHRcIkBkZWZpbml0ZWx5dHlwZWQvZHRzbGludFwiOiBcIjAuMC4xMTJcIixcblx0XHRcIkBlbW90aW9uL2Nzc1wiOiBcIjExLjExLjJcIixcblx0XHRcIkBlbW90aW9uL2Nzcy1wcmV0dGlmaWVyXCI6IFwiMS4xLjNcIixcblx0XHRcIkBlbW90aW9uL3NlcnZlclwiOiBcIjExLjExLjBcIixcblx0XHRcIkBlbW90aW9uL3N0eWxlZFwiOiBcIjExLjExLjBcIixcblx0XHRcImh0bWwtdGFnLW5hbWVzXCI6IFwiXjEuMS4yXCIsXG5cdFx0cmVhY3Q6IFwiMTYuMTQuMFwiLFxuXHRcdFwic3ZnLXRhZy1uYW1lc1wiOiBcIl4xLjEuMVwiLFxuXHRcdHR5cGVzY3JpcHQ6IFwiXjQuNS41XCJcblx0fSxcblx0cmVwb3NpdG9yeTogXCJodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL3RyZWUvbWFpbi9wYWNrYWdlcy9yZWFjdFwiLFxuXHRwdWJsaXNoQ29uZmlnOiB7XG5cdFx0YWNjZXNzOiBcInB1YmxpY1wiXG5cdH0sXG5cdFwidW1kOm1haW5cIjogXCJkaXN0L2Vtb3Rpb24tcmVhY3QudW1kLm1pbi5qc1wiLFxuXHRwcmVjb25zdHJ1Y3Q6IHtcblx0XHRlbnRyeXBvaW50czogW1xuXHRcdFx0XCIuL2luZGV4LmpzXCIsXG5cdFx0XHRcIi4vanN4LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9qc3gtZGV2LXJ1bnRpbWUuanNcIixcblx0XHRcdFwiLi9faXNvbGF0ZWQtaG5ycy5qc1wiXG5cdFx0XSxcblx0XHR1bWROYW1lOiBcImVtb3Rpb25SZWFjdFwiLFxuXHRcdGV4cG9ydHM6IHtcblx0XHRcdGVudkNvbmRpdGlvbnM6IFtcblx0XHRcdFx0XCJicm93c2VyXCIsXG5cdFx0XHRcdFwid29ya2VyXCJcblx0XHRcdF0sXG5cdFx0XHRleHRyYToge1xuXHRcdFx0XHRcIi4vdHlwZXMvY3NzLXByb3BcIjogXCIuL3R5cGVzL2Nzcy1wcm9wLmQudHNcIixcblx0XHRcdFx0XCIuL21hY3JvXCI6IHtcblx0XHRcdFx0XHR0eXBlczoge1xuXHRcdFx0XHRcdFx0XCJpbXBvcnRcIjogXCIuL21hY3JvLmQubXRzXCIsXG5cdFx0XHRcdFx0XHRcImRlZmF1bHRcIjogXCIuL21hY3JvLmQudHNcIlxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJkZWZhdWx0XCI6IFwiLi9tYWNyby5qc1wiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbnZhciBqc3ggPSBmdW5jdGlvbiBqc3godHlwZSwgcHJvcHMpIHtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cbiAgaWYgKHByb3BzID09IG51bGwgfHwgIWhhc093bi5jYWxsKHByb3BzLCAnY3NzJykpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbiAgfVxuXG4gIHZhciBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gIHZhciBjcmVhdGVFbGVtZW50QXJnQXJyYXkgPSBuZXcgQXJyYXkoYXJnc0xlbmd0aCk7XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IEVtb3Rpb247XG4gIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVsxXSA9IGNyZWF0ZUVtb3Rpb25Qcm9wcyh0eXBlLCBwcm9wcyk7XG5cbiAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIHtcbiAgICBjcmVhdGVFbGVtZW50QXJnQXJyYXlbaV0gPSBhcmdzW2ldO1xuICB9IC8vICRGbG93Rml4TWVcblxuXG4gIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50LmFwcGx5KG51bGwsIGNyZWF0ZUVsZW1lbnRBcmdBcnJheSk7XG59O1xuXG52YXIgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gZmFsc2U7IC8vIG1haW50YWluIHBsYWNlIG92ZXIgcmVyZW5kZXJzLlxuLy8gaW5pdGlhbCByZW5kZXIgZnJvbSBicm93c2VyLCBpbnNlcnRCZWZvcmUgY29udGV4dC5zaGVldC50YWdzWzBdIG9yIGlmIGEgc3R5bGUgaGFzbid0IGJlZW4gaW5zZXJ0ZWQgdGhlcmUgeWV0LCBhcHBlbmRDaGlsZFxuLy8gaW5pdGlhbCBjbGllbnQtc2lkZSByZW5kZXIgZnJvbSBTU1IsIHVzZSBwbGFjZSBvZiBoeWRyYXRpbmcgdGFnXG5cbnZhciBHbG9iYWwgPSAvKiAjX19QVVJFX18gKi93aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXdhcm5lZEFib3V0Q3NzUHJvcEZvckdsb2JhbCAmJiAoIC8vIGNoZWNrIGZvciBjbGFzc05hbWUgYXMgd2VsbCBzaW5jZSB0aGUgdXNlciBpc1xuICAvLyBwcm9iYWJseSB1c2luZyB0aGUgY3VzdG9tIGNyZWF0ZUVsZW1lbnQgd2hpY2hcbiAgLy8gbWVhbnMgaXQgd2lsbCBiZSB0dXJuZWQgaW50byBhIGNsYXNzTmFtZSBwcm9wXG4gIC8vICRGbG93Rml4TWUgSSBkb24ndCByZWFsbHkgd2FudCB0byBhZGQgaXQgdG8gdGhlIHR5cGUgc2luY2UgaXQgc2hvdWxkbid0IGJlIHVzZWRcbiAgcHJvcHMuY2xhc3NOYW1lIHx8IHByb3BzLmNzcykpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgdGhlIGNzcyBwcm9wIG9uIEdsb2JhbCwgZGlkIHlvdSBtZWFuIHRvIHVzZSB0aGUgc3R5bGVzIHByb3AgaW5zdGVhZD9cIik7XG4gICAgd2FybmVkQWJvdXRDc3NQcm9wRm9yR2xvYmFsID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBzdHlsZXMgPSBwcm9wcy5zdHlsZXM7XG4gIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKFtzdHlsZXNdLCB1bmRlZmluZWQsIFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KSk7XG5cbiAgaWYgKCFpc0Jyb3dzZXIkMSkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIHNlcmlhbGl6ZWROYW1lcyA9IHNlcmlhbGl6ZWQubmFtZTtcbiAgICB2YXIgc2VyaWFsaXplZFN0eWxlcyA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICAgIHZhciBuZXh0ID0gc2VyaWFsaXplZC5uZXh0O1xuXG4gICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VyaWFsaXplZE5hbWVzICs9ICcgJyArIG5leHQubmFtZTtcbiAgICAgIHNlcmlhbGl6ZWRTdHlsZXMgKz0gbmV4dC5zdHlsZXM7XG4gICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgIH1cblxuICAgIHZhciBzaG91bGRDYWNoZSA9IGNhY2hlLmNvbXBhdCA9PT0gdHJ1ZTtcbiAgICB2YXIgcnVsZXMgPSBjYWNoZS5pbnNlcnQoXCJcIiwge1xuICAgICAgbmFtZTogc2VyaWFsaXplZE5hbWVzLFxuICAgICAgc3R5bGVzOiBzZXJpYWxpemVkU3R5bGVzXG4gICAgfSwgY2FjaGUuc2hlZXQsIHNob3VsZENhY2hlKTtcblxuICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgKF9yZWYgPSB7fSwgX3JlZltcImRhdGEtZW1vdGlvblwiXSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbCBcIiArIHNlcmlhbGl6ZWROYW1lcywgX3JlZi5kYW5nZXJvdXNseVNldElubmVySFRNTCA9IHtcbiAgICAgIF9faHRtbDogcnVsZXNcbiAgICB9LCBfcmVmLm5vbmNlID0gY2FjaGUuc2hlZXQubm9uY2UsIF9yZWYpKTtcbiAgfSAvLyB5ZXMsIGkga25vdyB0aGVzZSBob29rcyBhcmUgdXNlZCBjb25kaXRpb25hbGx5XG4gIC8vIGJ1dCBpdCBpcyBiYXNlZCBvbiBhIGNvbnN0YW50IHRoYXQgd2lsbCBuZXZlciBjaGFuZ2UgYXQgcnVudGltZVxuICAvLyBpdCdzIGVmZmVjdGl2ZWx5IGxpa2UgaGF2aW5nIHR3byBpbXBsZW1lbnRhdGlvbnMgYW5kIHN3aXRjaGluZyB0aGVtIG91dFxuICAvLyBzbyBpdCdzIG5vdCBhY3R1YWxseSBicmVha2luZyBhbnl0aGluZ1xuXG5cbiAgdmFyIHNoZWV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIHVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGtleSA9IGNhY2hlLmtleSArIFwiLWdsb2JhbFwiOyAvLyB1c2UgY2FzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2lzc3Vlcy8yNjc1XG5cbiAgICB2YXIgc2hlZXQgPSBuZXcgY2FjaGUuc2hlZXQuY29uc3RydWN0b3Ioe1xuICAgICAga2V5OiBrZXksXG4gICAgICBub25jZTogY2FjaGUuc2hlZXQubm9uY2UsXG4gICAgICBjb250YWluZXI6IGNhY2hlLnNoZWV0LmNvbnRhaW5lcixcbiAgICAgIHNwZWVkeTogY2FjaGUuc2hlZXQuaXNTcGVlZHlcbiAgICB9KTtcbiAgICB2YXIgcmVoeWRyYXRpbmcgPSBmYWxzZTsgLy8gJEZsb3dGaXhNZVxuXG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic3R5bGVbZGF0YS1lbW90aW9uPVxcXCJcIiArIGtleSArIFwiIFwiICsgc2VyaWFsaXplZC5uYW1lICsgXCJcXFwiXVwiKTtcblxuICAgIGlmIChjYWNoZS5zaGVldC50YWdzLmxlbmd0aCkge1xuICAgICAgc2hlZXQuYmVmb3JlID0gY2FjaGUuc2hlZXQudGFnc1swXTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmVoeWRyYXRpbmcgPSB0cnVlOyAvLyBjbGVhciB0aGUgaGFzaCBzbyB0aGlzIG5vZGUgd29uJ3QgYmUgcmVjb2duaXphYmxlIGFzIHJlaHlkcmF0YWJsZSBieSBvdGhlciA8R2xvYmFsLz5zXG5cbiAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBrZXkpO1xuICAgICAgc2hlZXQuaHlkcmF0ZShbbm9kZV0pO1xuICAgIH1cblxuICAgIHNoZWV0UmVmLmN1cnJlbnQgPSBbc2hlZXQsIHJlaHlkcmF0aW5nXTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9O1xuICB9LCBbY2FjaGVdKTtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0V2l0aExheW91dEZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2hlZXRSZWZDdXJyZW50ID0gc2hlZXRSZWYuY3VycmVudDtcbiAgICB2YXIgc2hlZXQgPSBzaGVldFJlZkN1cnJlbnRbMF0sXG4gICAgICAgIHJlaHlkcmF0aW5nID0gc2hlZXRSZWZDdXJyZW50WzFdO1xuXG4gICAgaWYgKHJlaHlkcmF0aW5nKSB7XG4gICAgICBzaGVldFJlZkN1cnJlbnRbMV0gPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZC5uZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGluc2VydCBrZXlmcmFtZXNcbiAgICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZC5uZXh0LCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hlZXQudGFncy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIHRoaXMgZG9lc24ndCBleGlzdCB0aGVuIGl0IHdpbGwgYmUgbnVsbCBzbyB0aGUgc3R5bGUgZWxlbWVudCB3aWxsIGJlIGFwcGVuZGVkXG4gICAgICB2YXIgZWxlbWVudCA9IHNoZWV0LnRhZ3Nbc2hlZXQudGFncy5sZW5ndGggLSAxXS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICBzaGVldC5iZWZvcmUgPSBlbGVtZW50O1xuICAgICAgc2hlZXQuZmx1c2goKTtcbiAgICB9XG5cbiAgICBjYWNoZS5pbnNlcnQoXCJcIiwgc2VyaWFsaXplZCwgc2hlZXQsIGZhbHNlKTtcbiAgfSwgW2NhY2hlLCBzZXJpYWxpemVkLm5hbWVdKTtcbiAgcmV0dXJuIG51bGw7XG59KTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgR2xvYmFsLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25HbG9iYWwnO1xufVxuXG5mdW5jdGlvbiBjc3MoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplU3R5bGVzKGFyZ3MpO1xufVxuXG52YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICB2YXIgaW5zZXJ0YWJsZSA9IGNzcy5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIHZhciBuYW1lID0gXCJhbmltYXRpb24tXCIgKyBpbnNlcnRhYmxlLm5hbWU7IC8vICRGbG93Rml4TWVcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBuYW1lICsgXCJ7XCIgKyBpbnNlcnRhYmxlLnN0eWxlcyArIFwifVwiLFxuICAgIGFuaW06IDEsXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIFwiX0VNT19cIiArIHRoaXMubmFtZSArIFwiX1wiICsgdGhpcy5zdHlsZXMgKyBcIl9FTU9fXCI7XG4gICAgfVxuICB9O1xufTtcblxudmFyIGNsYXNzbmFtZXMgPSBmdW5jdGlvbiBjbGFzc25hbWVzKGFyZ3MpIHtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PSBudWxsKSBjb250aW51ZTtcbiAgICB2YXIgdG9BZGQgPSB2b2lkIDA7XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhcmcuc3R5bGVzICE9PSB1bmRlZmluZWQgJiYgYXJnLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdZb3UgaGF2ZSBwYXNzZWQgc3R5bGVzIGNyZWF0ZWQgd2l0aCBgY3NzYCBmcm9tIGBAZW1vdGlvbi9yZWFjdGAgcGFja2FnZSB0byB0aGUgYGN4YC5cXG4nICsgJ2BjeGAgaXMgbWVhbnQgdG8gY29tcG9zZSBjbGFzcyBuYW1lcyAoc3RyaW5ncykgc28geW91IHNob3VsZCBjb252ZXJ0IHRob3NlIHN0eWxlcyB0byBhIGNsYXNzIG5hbWUgYnkgcGFzc2luZyB0aGVtIHRvIHRoZSBgY3NzYCByZWNlaXZlZCBmcm9tIDxDbGFzc05hbWVzLz4gY29tcG9uZW50LicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkQXJyID0gX3JlZi5zZXJpYWxpemVkQXJyO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VyaWFsaXplZEFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkQXJyW2ldLCBmYWxzZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBDbGFzc05hbWVzID0gLyogI19fUFVSRV9fICovd2l0aEVtb3Rpb25DYWNoZShmdW5jdGlvbiAocHJvcHMsIGNhY2hlKSB7XG4gIHZhciBoYXNSZW5kZXJlZCA9IGZhbHNlO1xuICB2YXIgc2VyaWFsaXplZEFyciA9IFtdO1xuXG4gIHZhciBjc3MgPSBmdW5jdGlvbiBjc3MoKSB7XG4gICAgaWYgKGhhc1JlbmRlcmVkICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3NzIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIHJlbmRlcicpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICBzZXJpYWxpemVkQXJyLnB1c2goc2VyaWFsaXplZCk7IC8vIHJlZ2lzdHJhdGlvbiBoYXMgdG8gaGFwcGVuIGhlcmUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIG1pZ2h0IGdldCBjb25zdW1lZCBieSBgY3hgXG5cbiAgICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBpZiAoaGFzUmVuZGVyZWQgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjeCBjYW4gb25seSBiZSB1c2VkIGR1cmluZyByZW5kZXInKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICB2YXIgY29udGVudCA9IHtcbiAgICBjc3M6IGNzcyxcbiAgICBjeDogY3gsXG4gICAgdGhlbWU6IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KVxuICB9O1xuICB2YXIgZWxlID0gcHJvcHMuY2hpbGRyZW4oY29udGVudCk7XG4gIGhhc1JlbmRlcmVkID0gdHJ1ZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnNlcnRpb24sIHtcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgc2VyaWFsaXplZEFycjogc2VyaWFsaXplZEFyclxuICB9KSwgZWxlKTtcbn0pO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBDbGFzc05hbWVzLmRpc3BsYXlOYW1lID0gJ0Vtb3Rpb25DbGFzc05hbWVzJztcbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGlzQnJvd3NlciA9IFwib2JqZWN0XCIgIT09ICd1bmRlZmluZWQnOyAvLyAjMTcyNywgIzI5MDUgZm9yIHNvbWUgcmVhc29uIEplc3QgYW5kIFZpdGVzdCBldmFsdWF0ZSBtb2R1bGVzIHR3aWNlIGlmIHNvbWUgY29uc3VtaW5nIG1vZHVsZSBnZXRzIG1vY2tlZFxuXG4gIHZhciBpc1Rlc3RFbnYgPSB0eXBlb2YgamVzdCAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHZpICE9PSAndW5kZWZpbmVkJztcblxuICBpZiAoaXNCcm93c2VyICYmICFpc1Rlc3RFbnYpIHtcbiAgICAvLyBnbG9iYWxUaGlzIGhhcyB3aWRlIGJyb3dzZXIgc3VwcG9ydCAtIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1nbG9iYWxUaGlzLCBOb2RlLmpzIDEyIGFuZCBsYXRlclxuICAgIHZhciBnbG9iYWxDb250ZXh0ID0gLy8gJEZsb3dJZ25vcmVcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICA6IGlzQnJvd3NlciA/IHdpbmRvdyA6IGdsb2JhbDtcbiAgICB2YXIgZ2xvYmFsS2V5ID0gXCJfX0VNT1RJT05fUkVBQ1RfXCIgKyBwa2cudmVyc2lvbi5zcGxpdCgnLicpWzBdICsgXCJfX1wiO1xuXG4gICAgaWYgKGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSkge1xuICAgICAgY29uc29sZS53YXJuKCdZb3UgYXJlIGxvYWRpbmcgQGVtb3Rpb24vcmVhY3Qgd2hlbiBpdCBpcyBhbHJlYWR5IGxvYWRlZC4gUnVubmluZyAnICsgJ211bHRpcGxlIGluc3RhbmNlcyBtYXkgY2F1c2UgcHJvYmxlbXMuIFRoaXMgY2FuIGhhcHBlbiBpZiBtdWx0aXBsZSAnICsgJ3ZlcnNpb25zIGFyZSB1c2VkLCBvciBpZiBtdWx0aXBsZSBidWlsZHMgb2YgdGhlIHNhbWUgdmVyc2lvbiBhcmUgJyArICd1c2VkLicpO1xuICAgIH1cblxuICAgIGdsb2JhbENvbnRleHRbZ2xvYmFsS2V5XSA9IHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ2xhc3NOYW1lcywgR2xvYmFsLCBqc3ggYXMgY3JlYXRlRWxlbWVudCwgY3NzLCBqc3gsIGtleWZyYW1lcyB9O1xuIiwgImZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgXCJkZWZhdWx0XCI6IG9ialxuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gZm9ybWF0TXVpRXJyb3JNZXNzYWdlO1xuLyoqXG4gKiBXQVJOSU5HOiBEb24ndCBpbXBvcnQgdGhpcyBkaXJlY3RseS5cbiAqIFVzZSBgTXVpRXJyb3JgIGZyb20gYEBtdWkvaW50ZXJuYWwtYmFiZWwtbWFjcm9zL011aUVycm9yLm1hY3JvYCBpbnN0ZWFkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0TXVpRXJyb3JNZXNzYWdlKGNvZGUpIHtcbiAgLy8gQXBwbHkgYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS10ZW1wbGF0ZS1saXRlcmFscyBpbiBsb29zZSBtb2RlXG4gIC8vIGxvb3NlIG1vZGUgaXMgc2FmZSBpZiB3ZSdyZSBjb25jYXRlbmF0aW5nIHByaW1pdGl2ZXNcbiAgLy8gc2VlIGh0dHBzOi8vYmFiZWxqcy5pby9kb2NzL2VuL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tdGVtcGxhdGUtbGl0ZXJhbHMjbG9vc2VcbiAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLXRlbXBsYXRlICovXG4gIGxldCB1cmwgPSAnaHR0cHM6Ly9tdWkuY29tL3Byb2R1Y3Rpb24tZXJyb3IvP2NvZGU9JyArIGNvZGU7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgLy8gcmVzdCBwYXJhbXMgb3Zlci10cmFuc3BpbGUgZm9yIHRoaXMgY2FzZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICB1cmwgKz0gJyZhcmdzW109JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbaV0pO1xuICB9XG4gIHJldHVybiAnTWluaWZpZWQgTVVJIGVycm9yICMnICsgY29kZSArICc7IHZpc2l0ICcgKyB1cmwgKyAnIGZvciB0aGUgZnVsbCBtZXNzYWdlLic7XG4gIC8qIGVzbGludC1lbmFibGUgcHJlZmVyLXRlbXBsYXRlICovXG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCIpKTsiLCAiaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciByZWFjdFByb3BzUmVnZXggPSAvXigoY2hpbGRyZW58ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUx8a2V5fHJlZnxhdXRvRm9jdXN8ZGVmYXVsdFZhbHVlfGRlZmF1bHRDaGVja2VkfGlubmVySFRNTHxzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmd8c3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHZhbHVlTGlua3xhYmJyfGFjY2VwdHxhY2NlcHRDaGFyc2V0fGFjY2Vzc0tleXxhY3Rpb258YWxsb3d8YWxsb3dVc2VyTWVkaWF8YWxsb3dQYXltZW50UmVxdWVzdHxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlY29kaW5nfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlfGRpc2FibGVSZW1vdGVQbGF5YmFja3xkb3dubG9hZHxkcmFnZ2FibGV8ZW5jVHlwZXxlbnRlcktleUhpbnR8Zm9ybXxmb3JtQWN0aW9ufGZvcm1FbmNUeXBlfGZvcm1NZXRob2R8Zm9ybU5vVmFsaWRhdGV8Zm9ybVRhcmdldHxmcmFtZUJvcmRlcnxoZWFkZXJzfGhlaWdodHxoaWRkZW58aGlnaHxocmVmfGhyZWZMYW5nfGh0bWxGb3J8aHR0cEVxdWl2fGlkfGlucHV0TW9kZXxpbnRlZ3JpdHl8aXN8a2V5UGFyYW1zfGtleVR5cGV8a2luZHxsYWJlbHxsYW5nfGxpc3R8bG9hZGluZ3xsb29wfGxvd3xtYXJnaW5IZWlnaHR8bWFyZ2luV2lkdGh8bWF4fG1heExlbmd0aHxtZWRpYXxtZWRpYUdyb3VwfG1ldGhvZHxtaW58bWluTGVuZ3RofG11bHRpcGxlfG11dGVkfG5hbWV8bm9uY2V8bm9WYWxpZGF0ZXxvcGVufG9wdGltdW18cGF0dGVybnxwbGFjZWhvbGRlcnxwbGF5c0lubGluZXxwb3N0ZXJ8cHJlbG9hZHxwcm9maWxlfHJhZGlvR3JvdXB8cmVhZE9ubHl8cmVmZXJyZXJQb2xpY3l8cmVsfHJlcXVpcmVkfHJldmVyc2VkfHJvbGV8cm93c3xyb3dTcGFufHNhbmRib3h8c2NvcGV8c2NvcGVkfHNjcm9sbGluZ3xzZWFtbGVzc3xzZWxlY3RlZHxzaGFwZXxzaXplfHNpemVzfHNsb3R8c3BhbnxzcGVsbENoZWNrfHNyY3xzcmNEb2N8c3JjTGFuZ3xzcmNTZXR8c3RhcnR8c3RlcHxzdHlsZXxzdW1tYXJ5fHRhYkluZGV4fHRhcmdldHx0aXRsZXx0cmFuc2xhdGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmNyZW1lbnRhbHxmYWxsYmFja3xpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258b3B0aW9ufHJlc3VsdHN8c2VjdXJpdHl8dW5zZWxlY3RhYmxlfGFjY2VudEhlaWdodHxhY2N1bXVsYXRlfGFkZGl0aXZlfGFsaWdubWVudEJhc2VsaW5lfGFsbG93UmVvcmRlcnxhbHBoYWJldGljfGFtcGxpdHVkZXxhcmFiaWNGb3JtfGFzY2VudHxhdHRyaWJ1dGVOYW1lfGF0dHJpYnV0ZVR5cGV8YXV0b1JldmVyc2V8YXppbXV0aHxiYXNlRnJlcXVlbmN5fGJhc2VsaW5lU2hpZnR8YmFzZVByb2ZpbGV8YmJveHxiZWdpbnxiaWFzfGJ5fGNhbGNNb2RlfGNhcEhlaWdodHxjbGlwfGNsaXBQYXRoVW5pdHN8Y2xpcFBhdGh8Y2xpcFJ1bGV8Y29sb3JJbnRlcnBvbGF0aW9ufGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnN8Y29sb3JQcm9maWxlfGNvbG9yUmVuZGVyaW5nfGNvbnRlbnRTY3JpcHRUeXBlfGNvbnRlbnRTdHlsZVR5cGV8Y3Vyc29yfGN4fGN5fGR8ZGVjZWxlcmF0ZXxkZXNjZW50fGRpZmZ1c2VDb25zdGFudHxkaXJlY3Rpb258ZGlzcGxheXxkaXZpc29yfGRvbWluYW50QmFzZWxpbmV8ZHVyfGR4fGR5fGVkZ2VNb2RlfGVsZXZhdGlvbnxlbmFibGVCYWNrZ3JvdW5kfGVuZHxleHBvbmVudHxleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkfGZpbGx8ZmlsbE9wYWNpdHl8ZmlsbFJ1bGV8ZmlsdGVyfGZpbHRlclJlc3xmaWx0ZXJVbml0c3xmbG9vZENvbG9yfGZsb29kT3BhY2l0eXxmb2N1c2FibGV8Zm9udEZhbWlseXxmb250U2l6ZXxmb250U2l6ZUFkanVzdHxmb250U3RyZXRjaHxmb250U3R5bGV8Zm9udFZhcmlhbnR8Zm9udFdlaWdodHxmb3JtYXR8ZnJvbXxmcnxmeHxmeXxnMXxnMnxnbHlwaE5hbWV8Z2x5cGhPcmllbnRhdGlvbkhvcml6b250YWx8Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsfGdseXBoUmVmfGdyYWRpZW50VHJhbnNmb3JtfGdyYWRpZW50VW5pdHN8aGFuZ2luZ3xob3JpekFkdlh8aG9yaXpPcmlnaW5YfGlkZW9ncmFwaGljfGltYWdlUmVuZGVyaW5nfGlufGluMnxpbnRlcmNlcHR8a3xrMXxrMnxrM3xrNHxrZXJuZWxNYXRyaXh8a2VybmVsVW5pdExlbmd0aHxrZXJuaW5nfGtleVBvaW50c3xrZXlTcGxpbmVzfGtleVRpbWVzfGxlbmd0aEFkanVzdHxsZXR0ZXJTcGFjaW5nfGxpZ2h0aW5nQ29sb3J8bGltaXRpbmdDb25lQW5nbGV8bG9jYWx8bWFya2VyRW5kfG1hcmtlck1pZHxtYXJrZXJTdGFydHxtYXJrZXJIZWlnaHR8bWFya2VyVW5pdHN8bWFya2VyV2lkdGh8bWFza3xtYXNrQ29udGVudFVuaXRzfG1hc2tVbml0c3xtYXRoZW1hdGljYWx8bW9kZXxudW1PY3RhdmVzfG9mZnNldHxvcGFjaXR5fG9wZXJhdG9yfG9yZGVyfG9yaWVudHxvcmllbnRhdGlvbnxvcmlnaW58b3ZlcmZsb3d8b3ZlcmxpbmVQb3NpdGlvbnxvdmVybGluZVRoaWNrbmVzc3xwYW5vc2UxfHBhaW50T3JkZXJ8cGF0aExlbmd0aHxwYXR0ZXJuQ29udGVudFVuaXRzfHBhdHRlcm5UcmFuc2Zvcm18cGF0dGVyblVuaXRzfHBvaW50ZXJFdmVudHN8cG9pbnRzfHBvaW50c0F0WHxwb2ludHNBdFl8cG9pbnRzQXRafHByZXNlcnZlQWxwaGF8cHJlc2VydmVBc3BlY3RSYXRpb3xwcmltaXRpdmVVbml0c3xyfHJhZGl1c3xyZWZYfHJlZll8cmVuZGVyaW5nSW50ZW50fHJlcGVhdENvdW50fHJlcGVhdER1cnxyZXF1aXJlZEV4dGVuc2lvbnN8cmVxdWlyZWRGZWF0dXJlc3xyZXN0YXJ0fHJlc3VsdHxyb3RhdGV8cnh8cnl8c2NhbGV8c2VlZHxzaGFwZVJlbmRlcmluZ3xzbG9wZXxzcGFjaW5nfHNwZWN1bGFyQ29uc3RhbnR8c3BlY3VsYXJFeHBvbmVudHxzcGVlZHxzcHJlYWRNZXRob2R8c3RhcnRPZmZzZXR8c3RkRGV2aWF0aW9ufHN0ZW1ofHN0ZW12fHN0aXRjaFRpbGVzfHN0b3BDb2xvcnxzdG9wT3BhY2l0eXxzdHJpa2V0aHJvdWdoUG9zaXRpb258c3RyaWtldGhyb3VnaFRoaWNrbmVzc3xzdHJpbmd8c3Ryb2tlfHN0cm9rZURhc2hhcnJheXxzdHJva2VEYXNob2Zmc2V0fHN0cm9rZUxpbmVjYXB8c3Ryb2tlTGluZWpvaW58c3Ryb2tlTWl0ZXJsaW1pdHxzdHJva2VPcGFjaXR5fHN0cm9rZVdpZHRofHN1cmZhY2VTY2FsZXxzeXN0ZW1MYW5ndWFnZXx0YWJsZVZhbHVlc3x0YXJnZXRYfHRhcmdldFl8dGV4dEFuY2hvcnx0ZXh0RGVjb3JhdGlvbnx0ZXh0UmVuZGVyaW5nfHRleHRMZW5ndGh8dG98dHJhbnNmb3JtfHUxfHUyfHVuZGVybGluZVBvc2l0aW9ufHVuZGVybGluZVRoaWNrbmVzc3x1bmljb2RlfHVuaWNvZGVCaWRpfHVuaWNvZGVSYW5nZXx1bml0c1BlckVtfHZBbHBoYWJldGljfHZIYW5naW5nfHZJZGVvZ3JhcGhpY3x2TWF0aGVtYXRpY2FsfHZhbHVlc3x2ZWN0b3JFZmZlY3R8dmVyc2lvbnx2ZXJ0QWR2WXx2ZXJ0T3JpZ2luWHx2ZXJ0T3JpZ2luWXx2aWV3Qm94fHZpZXdUYXJnZXR8dmlzaWJpbGl0eXx3aWR0aHN8d29yZFNwYWNpbmd8d3JpdGluZ01vZGV8eHx4SGVpZ2h0fHgxfHgyfHhDaGFubmVsU2VsZWN0b3J8eGxpbmtBY3R1YXRlfHhsaW5rQXJjcm9sZXx4bGlua0hyZWZ8eGxpbmtSb2xlfHhsaW5rU2hvd3x4bGlua1RpdGxlfHhsaW5rVHlwZXx4bWxCYXNlfHhtbG5zfHhtbG5zWGxpbmt8eG1sTGFuZ3x4bWxTcGFjZXx5fHkxfHkyfHlDaGFubmVsU2VsZWN0b3J8enx6b29tQW5kUGFufGZvcnxjbGFzc3xhdXRvZm9jdXMpfCgoW0RkXVtBYV1bVHRdW0FhXXxbQWFdW1JyXVtJaV1bQWFdfHgpLS4qKSkkLzsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YmZlZTY4YTRjZDdlNjAwOWVmNjFkMjNcblxudmFyIGlzUHJvcFZhbGlkID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAocHJvcCkge1xuICByZXR1cm4gcmVhY3RQcm9wc1JlZ2V4LnRlc3QocHJvcCkgfHwgcHJvcC5jaGFyQ29kZUF0KDApID09PSAxMTFcbiAgLyogbyAqL1xuICAmJiBwcm9wLmNoYXJDb2RlQXQoMSkgPT09IDExMFxuICAvKiBuICovXG4gICYmIHByb3AuY2hhckNvZGVBdCgyKSA8IDkxO1xufVxuLyogWisxICovXG4pO1xuXG5leHBvcnQgeyBpc1Byb3BWYWxpZCBhcyBkZWZhdWx0IH07XG4iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGlzUHJvcFZhbGlkIGZyb20gJ0BlbW90aW9uL2lzLXByb3AtdmFsaWQnO1xuaW1wb3J0IHsgd2l0aEVtb3Rpb25DYWNoZSwgVGhlbWVDb250ZXh0IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgcmVnaXN0ZXJTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIH0gZnJvbSAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgdGVzdE9taXRQcm9wc09uU3RyaW5nVGFnID0gaXNQcm9wVmFsaWQ7XG5cbnZhciB0ZXN0T21pdFByb3BzT25Db21wb25lbnQgPSBmdW5jdGlvbiB0ZXN0T21pdFByb3BzT25Db21wb25lbnQoa2V5KSB7XG4gIHJldHVybiBrZXkgIT09ICd0aGVtZSc7XG59O1xuXG52YXIgZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wID0gZnVuY3Rpb24gZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiYgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5NiA/IHRlc3RPbWl0UHJvcHNPblN0cmluZ1RhZyA6IHRlc3RPbWl0UHJvcHNPbkNvbXBvbmVudDtcbn07XG52YXIgY29tcG9zZVNob3VsZEZvcndhcmRQcm9wcyA9IGZ1bmN0aW9uIGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHModGFnLCBvcHRpb25zLCBpc1JlYWwpIHtcbiAgdmFyIHNob3VsZEZvcndhcmRQcm9wO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgdmFyIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcCA9IG9wdGlvbnMuc2hvdWxkRm9yd2FyZFByb3A7XG4gICAgc2hvdWxkRm9yd2FyZFByb3AgPSB0YWcuX19lbW90aW9uX2ZvcndhcmRQcm9wICYmIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcCA/IGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgICAgcmV0dXJuIHRhZy5fX2Vtb3Rpb25fZm9yd2FyZFByb3AocHJvcE5hbWUpICYmIG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcChwcm9wTmFtZSk7XG4gICAgfSA6IG9wdGlvbnNTaG91bGRGb3J3YXJkUHJvcDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2hvdWxkRm9yd2FyZFByb3AgIT09ICdmdW5jdGlvbicgJiYgaXNSZWFsKSB7XG4gICAgc2hvdWxkRm9yd2FyZFByb3AgPSB0YWcuX19lbW90aW9uX2ZvcndhcmRQcm9wO1xuICB9XG5cbiAgcmV0dXJuIHNob3VsZEZvcndhcmRQcm9wO1xufTtcblxudmFyIElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SID0gXCJZb3UgaGF2ZSBpbGxlZ2FsIGVzY2FwZSBzZXF1ZW5jZSBpbiB5b3VyIHRlbXBsYXRlIGxpdGVyYWwsIG1vc3QgbGlrZWx5IGluc2lkZSBjb250ZW50J3MgcHJvcGVydHkgdmFsdWUuXFxuQmVjYXVzZSB5b3Ugd3JpdGUgeW91ciBDU1MgaW5zaWRlIGEgSmF2YVNjcmlwdCBzdHJpbmcgeW91IGFjdHVhbGx5IGhhdmUgdG8gZG8gZG91YmxlIGVzY2FwaW5nLCBzbyBmb3IgZXhhbXBsZSBcXFwiY29udGVudDogJ1xcXFwwMGQ3JztcXFwiIHNob3VsZCBiZWNvbWUgXFxcImNvbnRlbnQ6ICdcXFxcXFxcXDAwZDcnO1xcXCIuXFxuWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxcbmh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1RlbXBsYXRlX2xpdGVyYWxzI0VTMjAxOF9yZXZpc2lvbl9vZl9pbGxlZ2FsX2VzY2FwZV9zZXF1ZW5jZXNcIjtcblxudmFyIEluc2VydGlvbiA9IGZ1bmN0aW9uIEluc2VydGlvbihfcmVmKSB7XG4gIHZhciBjYWNoZSA9IF9yZWYuY2FjaGUsXG4gICAgICBzZXJpYWxpemVkID0gX3JlZi5zZXJpYWxpemVkLFxuICAgICAgaXNTdHJpbmdUYWcgPSBfcmVmLmlzU3RyaW5nVGFnO1xuICByZWdpc3RlclN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpO1xuICB1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIH0pO1xuXG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIGNyZWF0ZVN0eWxlZCA9IGZ1bmN0aW9uIGNyZWF0ZVN0eWxlZCh0YWcsIG9wdGlvbnMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodGFnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGFyZSB0cnlpbmcgdG8gY3JlYXRlIGEgc3R5bGVkIGVsZW1lbnQgd2l0aCBhbiB1bmRlZmluZWQgY29tcG9uZW50LlxcbllvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gaW1wb3J0IGl0LicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpc1JlYWwgPSB0YWcuX19lbW90aW9uX3JlYWwgPT09IHRhZztcbiAgdmFyIGJhc2VUYWcgPSBpc1JlYWwgJiYgdGFnLl9fZW1vdGlvbl9iYXNlIHx8IHRhZztcbiAgdmFyIGlkZW50aWZpZXJOYW1lO1xuICB2YXIgdGFyZ2V0Q2xhc3NOYW1lO1xuXG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZGVudGlmaWVyTmFtZSA9IG9wdGlvbnMubGFiZWw7XG4gICAgdGFyZ2V0Q2xhc3NOYW1lID0gb3B0aW9ucy50YXJnZXQ7XG4gIH1cblxuICB2YXIgc2hvdWxkRm9yd2FyZFByb3AgPSBjb21wb3NlU2hvdWxkRm9yd2FyZFByb3BzKHRhZywgb3B0aW9ucywgaXNSZWFsKTtcbiAgdmFyIGRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wIHx8IGdldERlZmF1bHRTaG91bGRGb3J3YXJkUHJvcChiYXNlVGFnKTtcbiAgdmFyIHNob3VsZFVzZUFzID0gIWRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCgnYXMnKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3R5bGVzID0gaXNSZWFsICYmIHRhZy5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQgPyB0YWcuX19lbW90aW9uX3N0eWxlcy5zbGljZSgwKSA6IFtdO1xuXG4gICAgaWYgKGlkZW50aWZpZXJOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0eWxlcy5wdXNoKFwibGFiZWw6XCIgKyBpZGVudGlmaWVyTmFtZSArIFwiO1wiKTtcbiAgICB9XG5cbiAgICBpZiAoYXJnc1swXSA9PSBudWxsIHx8IGFyZ3NbMF0ucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0eWxlcy5wdXNoLmFwcGx5KHN0eWxlcywgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFyZ3NbMF1bMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzLnB1c2goYXJnc1swXVswXSk7XG4gICAgICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gICAgICB2YXIgaSA9IDE7XG5cbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgYXJnc1swXVtpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZXMucHVzaChhcmdzW2ldLCBhcmdzWzBdW2ldKTtcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWU6IHdlIG5lZWQgdG8gY2FzdCBTdGF0ZWxlc3NGdW5jdGlvbmFsQ29tcG9uZW50IHRvIG91ciBQcml2YXRlU3R5bGVkQ29tcG9uZW50IGNsYXNzXG5cblxuICAgIHZhciBTdHlsZWQgPSB3aXRoRW1vdGlvbkNhY2hlKGZ1bmN0aW9uIChwcm9wcywgY2FjaGUsIHJlZikge1xuICAgICAgdmFyIEZpbmFsVGFnID0gc2hvdWxkVXNlQXMgJiYgcHJvcHMuYXMgfHwgYmFzZVRhZztcbiAgICAgIHZhciBjbGFzc05hbWUgPSAnJztcbiAgICAgIHZhciBjbGFzc0ludGVycG9sYXRpb25zID0gW107XG4gICAgICB2YXIgbWVyZ2VkUHJvcHMgPSBwcm9wcztcblxuICAgICAgaWYgKHByb3BzLnRoZW1lID09IG51bGwpIHtcbiAgICAgICAgbWVyZ2VkUHJvcHMgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICBtZXJnZWRQcm9wc1trZXldID0gcHJvcHNba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lcmdlZFByb3BzLnRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHByb3BzLmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhjYWNoZS5yZWdpc3RlcmVkLCBjbGFzc0ludGVycG9sYXRpb25zLCBwcm9wcy5jbGFzc05hbWUpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wcy5jbGFzc05hbWUgIT0gbnVsbCkge1xuICAgICAgICBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgKyBcIiBcIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoc3R5bGVzLmNvbmNhdChjbGFzc0ludGVycG9sYXRpb25zKSwgY2FjaGUucmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgY2xhc3NOYW1lICs9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gICAgICBpZiAodGFyZ2V0Q2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgdGFyZ2V0Q2xhc3NOYW1lO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmluYWxTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZFVzZUFzICYmIHNob3VsZEZvcndhcmRQcm9wID09PSB1bmRlZmluZWQgPyBnZXREZWZhdWx0U2hvdWxkRm9yd2FyZFByb3AoRmluYWxUYWcpIDogZGVmYXVsdFNob3VsZEZvcndhcmRQcm9wO1xuICAgICAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgICAgIGZvciAodmFyIF9rZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgaWYgKHNob3VsZFVzZUFzICYmIF9rZXkgPT09ICdhcycpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICggLy8gJEZsb3dGaXhNZVxuICAgICAgICBmaW5hbFNob3VsZEZvcndhcmRQcm9wKF9rZXkpKSB7XG4gICAgICAgICAgbmV3UHJvcHNbX2tleV0gPSBwcm9wc1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBuZXdQcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICBuZXdQcm9wcy5yZWYgPSByZWY7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluc2VydGlvbiwge1xuICAgICAgICBjYWNoZTogY2FjaGUsXG4gICAgICAgIHNlcmlhbGl6ZWQ6IHNlcmlhbGl6ZWQsXG4gICAgICAgIGlzU3RyaW5nVGFnOiB0eXBlb2YgRmluYWxUYWcgPT09ICdzdHJpbmcnXG4gICAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRmluYWxUYWcsIG5ld1Byb3BzKSk7XG4gICAgfSk7XG4gICAgU3R5bGVkLmRpc3BsYXlOYW1lID0gaWRlbnRpZmllck5hbWUgIT09IHVuZGVmaW5lZCA/IGlkZW50aWZpZXJOYW1lIDogXCJTdHlsZWQoXCIgKyAodHlwZW9mIGJhc2VUYWcgPT09ICdzdHJpbmcnID8gYmFzZVRhZyA6IGJhc2VUYWcuZGlzcGxheU5hbWUgfHwgYmFzZVRhZy5uYW1lIHx8ICdDb21wb25lbnQnKSArIFwiKVwiO1xuICAgIFN0eWxlZC5kZWZhdWx0UHJvcHMgPSB0YWcuZGVmYXVsdFByb3BzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fcmVhbCA9IFN0eWxlZDtcbiAgICBTdHlsZWQuX19lbW90aW9uX2Jhc2UgPSBiYXNlVGFnO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fc3R5bGVzID0gc3R5bGVzO1xuICAgIFN0eWxlZC5fX2Vtb3Rpb25fZm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3R5bGVkLCAndG9TdHJpbmcnLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoKSB7XG4gICAgICAgIGlmICh0YXJnZXRDbGFzc05hbWUgPT09IHVuZGVmaW5lZCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuICdOT19DT01QT05FTlRfU0VMRUNUT1InO1xuICAgICAgICB9IC8vICRGbG93Rml4TWU6IGNvZXJjZSB1bmRlZmluZWQgdG8gc3RyaW5nXG5cblxuICAgICAgICByZXR1cm4gXCIuXCIgKyB0YXJnZXRDbGFzc05hbWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBTdHlsZWQud2l0aENvbXBvbmVudCA9IGZ1bmN0aW9uIChuZXh0VGFnLCBuZXh0T3B0aW9ucykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVN0eWxlZChuZXh0VGFnLCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywgbmV4dE9wdGlvbnMsIHtcbiAgICAgICAgc2hvdWxkRm9yd2FyZFByb3A6IGNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHMoU3R5bGVkLCBuZXh0T3B0aW9ucywgdHJ1ZSlcbiAgICAgIH0pKS5hcHBseSh2b2lkIDAsIHN0eWxlcyk7XG4gICAgfTtcblxuICAgIHJldHVybiBTdHlsZWQ7XG4gIH07XG59O1xuXG5leHBvcnQgeyBjcmVhdGVTdHlsZWQgYXMgZGVmYXVsdCB9O1xuIiwgImltcG9ydCBjcmVhdGVTdHlsZWQgZnJvbSAnLi4vYmFzZS9kaXN0L2Vtb3Rpb24tc3R5bGVkLWJhc2UuYnJvd3Nlci5lc20uanMnO1xuaW1wb3J0ICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnO1xuaW1wb3J0ICdyZWFjdCc7XG5pbXBvcnQgJ0BlbW90aW9uL2lzLXByb3AtdmFsaWQnO1xuaW1wb3J0ICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgJ0BlbW90aW9uL3V0aWxzJztcbmltcG9ydCAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vdXNlLWluc2VydGlvbi1lZmZlY3Qtd2l0aC1mYWxsYmFja3MnO1xuXG52YXIgdGFncyA9IFsnYScsICdhYmJyJywgJ2FkZHJlc3MnLCAnYXJlYScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2F1ZGlvJywgJ2InLCAnYmFzZScsICdiZGknLCAnYmRvJywgJ2JpZycsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJywgJ2NhbnZhcycsICdjYXB0aW9uJywgJ2NpdGUnLCAnY29kZScsICdjb2wnLCAnY29sZ3JvdXAnLCAnZGF0YScsICdkYXRhbGlzdCcsICdkZCcsICdkZWwnLCAnZGV0YWlscycsICdkZm4nLCAnZGlhbG9nJywgJ2RpdicsICdkbCcsICdkdCcsICdlbScsICdlbWJlZCcsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsICdpJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaW5zJywgJ2tiZCcsICdrZXlnZW4nLCAnbGFiZWwnLCAnbGVnZW5kJywgJ2xpJywgJ2xpbmsnLCAnbWFpbicsICdtYXAnLCAnbWFyaycsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0YScsICdtZXRlcicsICduYXYnLCAnbm9zY3JpcHQnLCAnb2JqZWN0JywgJ29sJywgJ29wdGdyb3VwJywgJ29wdGlvbicsICdvdXRwdXQnLCAncCcsICdwYXJhbScsICdwaWN0dXJlJywgJ3ByZScsICdwcm9ncmVzcycsICdxJywgJ3JwJywgJ3J0JywgJ3J1YnknLCAncycsICdzYW1wJywgJ3NjcmlwdCcsICdzZWN0aW9uJywgJ3NlbGVjdCcsICdzbWFsbCcsICdzb3VyY2UnLCAnc3BhbicsICdzdHJvbmcnLCAnc3R5bGUnLCAnc3ViJywgJ3N1bW1hcnknLCAnc3VwJywgJ3RhYmxlJywgJ3Rib2R5JywgJ3RkJywgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpbWUnLCAndGl0bGUnLCAndHInLCAndHJhY2snLCAndScsICd1bCcsICd2YXInLCAndmlkZW8nLCAnd2JyJywgLy8gU1ZHXG4nY2lyY2xlJywgJ2NsaXBQYXRoJywgJ2RlZnMnLCAnZWxsaXBzZScsICdmb3JlaWduT2JqZWN0JywgJ2cnLCAnaW1hZ2UnLCAnbGluZScsICdsaW5lYXJHcmFkaWVudCcsICdtYXNrJywgJ3BhdGgnLCAncGF0dGVybicsICdwb2x5Z29uJywgJ3BvbHlsaW5lJywgJ3JhZGlhbEdyYWRpZW50JywgJ3JlY3QnLCAnc3RvcCcsICdzdmcnLCAndGV4dCcsICd0c3BhbiddO1xuXG52YXIgbmV3U3R5bGVkID0gY3JlYXRlU3R5bGVkLmJpbmQoKTtcbnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnTmFtZSkge1xuICAvLyAkRmxvd0ZpeE1lOiB3ZSBjYW4gaWdub3JlIHRoaXMgYmVjYXVzZSBpdHMgZXhwb3NlZCB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIENyZWF0ZVN0eWxlZCB0eXBlXG4gIG5ld1N0eWxlZFt0YWdOYW1lXSA9IG5ld1N0eWxlZCh0YWdOYW1lKTtcbn0pO1xuXG5leHBvcnQgeyBuZXdTdHlsZWQgYXMgZGVmYXVsdCB9O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQoKSB7fVxuZW1wdHlGdW5jdGlvbldpdGhSZXNldC5yZXNldFdhcm5pbmdDYWNoZSA9IGVtcHR5RnVuY3Rpb247XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICBpZiAoc2VjcmV0ID09PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgJ1VzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgKTtcbiAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB0aHJvdyBlcnI7XG4gIH07XG4gIHNoaW0uaXNSZXF1aXJlZCA9IHNoaW07XG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XG4gICAgcmV0dXJuIHNoaW07XG4gIH07XG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogc2hpbSxcbiAgICBiaWdpbnQ6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgZWxlbWVudFR5cGU6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbSxcbiAgICBleGFjdDogZ2V0U2hpbSxcblxuICAgIGNoZWNrUHJvcFR5cGVzOiBlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LFxuICAgIHJlc2V0V2FybmluZ0NhY2hlOiBlbXB0eUZ1bmN0aW9uXG4gIH07XG5cbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCAiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0JztyZXF1aXJlKFwib2JqZWN0LWFzc2lnblwiKTt2YXIgZj1yZXF1aXJlKFwicmVhY3RcIiksZz02MDEwMztleHBvcnRzLkZyYWdtZW50PTYwMTA3O2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Ipe3ZhciBoPVN5bWJvbC5mb3I7Zz1oKFwicmVhY3QuZWxlbWVudFwiKTtleHBvcnRzLkZyYWdtZW50PWgoXCJyZWFjdC5mcmFnbWVudFwiKX12YXIgbT1mLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxwPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07XG5mdW5jdGlvbiBxKGMsYSxrKXt2YXIgYixkPXt9LGU9bnVsbCxsPW51bGw7dm9pZCAwIT09ayYmKGU9XCJcIitrKTt2b2lkIDAhPT1hLmtleSYmKGU9XCJcIithLmtleSk7dm9pZCAwIT09YS5yZWYmJihsPWEucmVmKTtmb3IoYiBpbiBhKW4uY2FsbChhLGIpJiYhcC5oYXNPd25Qcm9wZXJ0eShiKSYmKGRbYl09YVtiXSk7aWYoYyYmYy5kZWZhdWx0UHJvcHMpZm9yKGIgaW4gYT1jLmRlZmF1bHRQcm9wcyxhKXZvaWQgMD09PWRbYl0mJihkW2JdPWFbYl0pO3JldHVybnskJHR5cGVvZjpnLHR5cGU6YyxrZXk6ZSxyZWY6bCxwcm9wczpkLF9vd25lcjptLmN1cnJlbnR9fWV4cG9ydHMuanN4PXE7ZXhwb3J0cy5qc3hzPXE7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IFN0eWxlZEVuZ2luZVByb3ZpZGVyO1xudmFyIFJlYWN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgX3JlYWN0MiA9IHJlcXVpcmUoXCJAZW1vdGlvbi9yZWFjdFwiKTtcbnZhciBfY2FjaGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAZW1vdGlvbi9jYWNoZVwiKSk7XG52YXIgX2pzeFJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbi8vIHByZXBlbmQ6IHRydWUgbW92ZXMgTVVJIHN0eWxlcyB0byB0aGUgdG9wIG9mIHRoZSA8aGVhZD4gc28gdGhleSdyZSBsb2FkZWQgZmlyc3QuXG4vLyBJdCBhbGxvd3MgZGV2ZWxvcGVycyB0byBlYXNpbHkgb3ZlcnJpZGUgTVVJIHN0eWxlcyB3aXRoIG90aGVyIHN0eWxpbmcgc29sdXRpb25zLCBsaWtlIENTUyBtb2R1bGVzLlxubGV0IGNhY2hlO1xuaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ29iamVjdCcpIHtcbiAgY2FjaGUgPSAoMCwgX2NhY2hlLmRlZmF1bHQpKHtcbiAgICBrZXk6ICdjc3MnLFxuICAgIHByZXBlbmQ6IHRydWVcbiAgfSk7XG59XG5mdW5jdGlvbiBTdHlsZWRFbmdpbmVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgaW5qZWN0Rmlyc3QsXG4gICAgY2hpbGRyZW5cbiAgfSA9IHByb3BzO1xuICByZXR1cm4gaW5qZWN0Rmlyc3QgJiYgY2FjaGUgPyAvKiNfX1BVUkVfXyovKDAsIF9qc3hSdW50aW1lLmpzeCkoX3JlYWN0Mi5DYWNoZVByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNhY2hlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KSA6IGNoaWxkcmVuO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3R5bGVkRW5naW5lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBfcHJvcFR5cGVzLmRlZmF1bHQubm9kZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBzdHlsZXMgYXJlIGluamVjdGVkIGxhc3QgaW4gdGhlIDxoZWFkPiBlbGVtZW50IG9mIHRoZSBwYWdlLlxuICAgKiBBcyBhIHJlc3VsdCwgdGhleSBnYWluIG1vcmUgc3BlY2lmaWNpdHkgdGhhbiBhbnkgb3RoZXIgc3R5bGUgc2hlZXQuXG4gICAqIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIE1VSSdzIHN0eWxlcywgc2V0IHRoaXMgcHJvcC5cbiAgICovXG4gIGluamVjdEZpcnN0OiBfcHJvcFR5cGVzLmRlZmF1bHQuYm9vbFxufSA6IHZvaWQgMDsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX1N0eWxlZEVuZ2luZVByb3ZpZGVyLmRlZmF1bHQ7XG4gIH1cbn0pO1xudmFyIF9TdHlsZWRFbmdpbmVQcm92aWRlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vU3R5bGVkRW5naW5lUHJvdmlkZXJcIikpOyIsICJcInVzZSBzdHJpY3RcIjtcbid1c2UgY2xpZW50JztcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gR2xvYmFsU3R5bGVzO1xudmFyIFJlYWN0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG52YXIgX3JlYWN0MiA9IHJlcXVpcmUoXCJAZW1vdGlvbi9yZWFjdFwiKTtcbnZhciBfanN4UnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgcmV0dXJuIG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmZ1bmN0aW9uIEdsb2JhbFN0eWxlcyhwcm9wcykge1xuICBjb25zdCB7XG4gICAgc3R5bGVzLFxuICAgIGRlZmF1bHRUaGVtZSA9IHt9XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgZ2xvYmFsU3R5bGVzID0gdHlwZW9mIHN0eWxlcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoZW1lSW5wdXQgPT4gc3R5bGVzKGlzRW1wdHkodGhlbWVJbnB1dCkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZUlucHV0KSA6IHN0eWxlcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi8oMCwgX2pzeFJ1bnRpbWUuanN4KShfcmVhY3QyLkdsb2JhbCwge1xuICAgIHN0eWxlczogZ2xvYmFsU3R5bGVzXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR2xvYmFsU3R5bGVzLnByb3BUeXBlcyA9IHtcbiAgZGVmYXVsdFRoZW1lOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICBzdHlsZXM6IF9wcm9wVHlwZXMuZGVmYXVsdC5vbmVPZlR5cGUoW19wcm9wVHlwZXMuZGVmYXVsdC5hcnJheSwgX3Byb3BUeXBlcy5kZWZhdWx0LnN0cmluZywgX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCwgX3Byb3BUeXBlcy5kZWZhdWx0LmZ1bmNdKVxufSA6IHZvaWQgMDsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG4ndXNlIGNsaWVudCc7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX0dsb2JhbFN0eWxlcy5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfR2xvYmFsU3R5bGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9HbG9iYWxTdHlsZXNcIikpOyIsICIvKipcbiAqIEBtdWkvc3R5bGVkLWVuZ2luZSB2NS4xNS4xMVxuICpcbiAqIEBsaWNlbnNlIE1JVFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblwidXNlIHN0cmljdFwiO1xuJ3VzZSBjbGllbnQnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiR2xvYmFsU3R5bGVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9HbG9iYWxTdHlsZXMuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTdHlsZWRFbmdpbmVQcm92aWRlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfU3R5bGVkRW5naW5lUHJvdmlkZXIuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUaGVtZUNvbnRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3JlYWN0LlRoZW1lQ29udGV4dDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3JlYWN0LmNzcztcbiAgfVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBzdHlsZWQ7XG5leHBvcnRzLmludGVybmFsX3Byb2Nlc3NTdHlsZXMgPSB2b2lkIDA7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJrZXlmcmFtZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3JlYWN0LmtleWZyYW1lcztcbiAgfVxufSk7XG52YXIgX3N0eWxlZCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBlbW90aW9uL3N0eWxlZFwiKSk7XG52YXIgX3JlYWN0ID0gcmVxdWlyZShcIkBlbW90aW9uL3JlYWN0XCIpO1xudmFyIF9TdHlsZWRFbmdpbmVQcm92aWRlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vU3R5bGVkRW5naW5lUHJvdmlkZXJcIikpO1xudmFyIF9HbG9iYWxTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL0dsb2JhbFN0eWxlc1wiKSk7XG5mdW5jdGlvbiBzdHlsZWQodGFnLCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0eWxlc0ZhY3RvcnkgPSAoMCwgX3N0eWxlZC5kZWZhdWx0KSh0YWcsIG9wdGlvbnMpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiAoLi4uc3R5bGVzKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyA/IGBcIiR7dGFnfVwiYCA6ICdjb21wb25lbnQnO1xuICAgICAgaWYgKHN0eWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogU2VlbXMgbGlrZSB5b3UgY2FsbGVkIFxcYHN0eWxlZCgke2NvbXBvbmVudH0pKClcXGAgd2l0aG91dCBhIFxcYHN0eWxlXFxgIGFyZ3VtZW50LmAsICdZb3UgbXVzdCBwcm92aWRlIGEgYHN0eWxlc2AgYXJndW1lbnQ6IGBzdHlsZWQoXCJkaXZcIikoc3R5bGVZb3VGb3Jnb3RUb1Bhc3MpYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlcy5zb21lKHN0eWxlID0+IHN0eWxlID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogdGhlIHN0eWxlZCgke2NvbXBvbmVudH0pKC4uLmFyZ3MpIEFQSSByZXF1aXJlcyBhbGwgaXRzIGFyZ3MgdG8gYmUgZGVmaW5lZC5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZXNGYWN0b3J5KC4uLnN0eWxlcyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gc3R5bGVzRmFjdG9yeTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuY29uc3QgaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcyA9ICh0YWcsIHByb2Nlc3NvcikgPT4ge1xuICAvLyBFbW90aW9uIGF0dGFjaGVzIGFsbCB0aGUgc3R5bGVzIGFzIGBfX2Vtb3Rpb25fc3R5bGVzYC5cbiAgLy8gUmVmOiBodHRwczovL2dpdGh1Yi5jb20vZW1vdGlvbi1qcy9lbW90aW9uL2Jsb2IvMTZkOTcxZDBkYTIyOTU5NmQ2YmNjMzlkMjgyYmE5NzUzYzllZTdjZi9wYWNrYWdlcy9zdHlsZWQvc3JjL2Jhc2UuanMjTDE4NlxuICBpZiAoQXJyYXkuaXNBcnJheSh0YWcuX19lbW90aW9uX3N0eWxlcykpIHtcbiAgICB0YWcuX19lbW90aW9uX3N0eWxlcyA9IHByb2Nlc3Nvcih0YWcuX19lbW90aW9uX3N0eWxlcyk7XG4gIH1cbn07XG5leHBvcnRzLmludGVybmFsX3Byb2Nlc3NTdHlsZXMgPSBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzOyIsICJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9leHRlbmRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBkZWVwbWVyZ2U7XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2lzLXBsYWluLW9iai9ibG9iL21haW4vaW5kZXguanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QoaXRlbSkge1xuICBpZiAodHlwZW9mIGl0ZW0gIT09ICdvYmplY3QnIHx8IGl0ZW0gPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGl0ZW0pO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGl0ZW0pICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIGl0ZW0pO1xufVxuZnVuY3Rpb24gZGVlcENsb25lKHNvdXJjZSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0ge307XG4gIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgIG91dHB1dFtrZXldID0gZGVlcENsb25lKHNvdXJjZVtrZXldKTtcbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5mdW5jdGlvbiBkZWVwbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMgPSB7XG4gIGNsb25lOiB0cnVlXG59KSB7XG4gIGNvbnN0IG91dHB1dCA9IG9wdGlvbnMuY2xvbmUgPyAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCB0YXJnZXQpIDogdGFyZ2V0O1xuICBpZiAoaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIGlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgLy8gQXZvaWQgcHJvdG90eXBlIHBvbGx1dGlvblxuICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzUGxhaW5PYmplY3Qoc291cmNlW2tleV0pICYmIGtleSBpbiB0YXJnZXQgJiYgaXNQbGFpbk9iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgLy8gU2luY2UgYG91dHB1dGAgaXMgYSBjbG9uZSBvZiBgdGFyZ2V0YCBhbmQgd2UgaGF2ZSBuYXJyb3dlZCBgdGFyZ2V0YCBpbiB0aGlzIGJsb2NrIHdlIGNhbiBjYXN0IHRvIHRoZSBzYW1lIHR5cGUuXG4gICAgICAgIG91dHB1dFtrZXldID0gZGVlcG1lcmdlKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2xvbmUpIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSBpc1BsYWluT2JqZWN0KHNvdXJjZVtrZXldKSA/IGRlZXBDbG9uZShzb3VyY2Vba2V5XSkgOiBzb3VyY2Vba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG52YXIgX2V4cG9ydE5hbWVzID0ge307XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kZWVwbWVyZ2UuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2RlZXBtZXJnZSA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL2RlZXBtZXJnZVwiKSk7XG5PYmplY3Qua2V5cyhfZGVlcG1lcmdlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfZGVlcG1lcmdlW2tleV0pIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX2RlZXBtZXJnZVtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gY2FwaXRhbGl6ZTtcbnZhciBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCIpKTtcbi8vIEl0IHNob3VsZCB0byBiZSBub3RlZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXF1aXZhbGVudCB0byBgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemVgLlxuLy9cbi8vIEEgc3RyaWN0IGNhcGl0YWxpemF0aW9uIHNob3VsZCB1cHBlcmNhc2UgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgaW4gdGhlIHNlbnRlbmNlLlxuLy8gV2Ugb25seSBoYW5kbGUgdGhlIGZpcnN0IHdvcmQuXG5mdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogXFxgY2FwaXRhbGl6ZShzdHJpbmcpXFxgIGV4cGVjdHMgYSBzdHJpbmcgYXJndW1lbnQuYCA6ICgwLCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMi5kZWZhdWx0KSg3KSk7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2NhcGl0YWxpemUuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2NhcGl0YWxpemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NhcGl0YWxpemVcIikpOyIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGdldERpc3BsYXlOYW1lO1xuZXhwb3J0cy5nZXRGdW5jdGlvbk5hbWUgPSBnZXRGdW5jdGlvbk5hbWU7XG52YXIgX3JlYWN0SXMgPSByZXF1aXJlKFwicmVhY3QtaXNcIik7XG4vLyBTaW1wbGlmaWVkIHBvbHlmaWxsIGZvciBJRTExIHN1cHBvcnRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KYW1lc01HcmVlbmUvRnVuY3Rpb24ubmFtZS9ibG9iLzU4YjMxNGQ0YTk4MzExMGMzNjgyZjEyMjhmODQ1ZDM5Y2NjYTE4MTcvRnVuY3Rpb24ubmFtZS5qcyNMM1xuY29uc3QgZm5OYW1lTWF0Y2hSZWdleCA9IC9eXFxzKmZ1bmN0aW9uKD86XFxzfFxccypcXC9cXCouKlxcKlxcL1xccyopKyhbXihcXHMvXSopXFxzKi87XG5mdW5jdGlvbiBnZXRGdW5jdGlvbk5hbWUoZm4pIHtcbiAgY29uc3QgbWF0Y2ggPSBgJHtmbn1gLm1hdGNoKGZuTmFtZU1hdGNoUmVnZXgpO1xuICBjb25zdCBuYW1lID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG4gIHJldHVybiBuYW1lIHx8ICcnO1xufVxuZnVuY3Rpb24gZ2V0RnVuY3Rpb25Db21wb25lbnROYW1lKENvbXBvbmVudCwgZmFsbGJhY2sgPSAnJykge1xuICByZXR1cm4gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8IGdldEZ1bmN0aW9uTmFtZShDb21wb25lbnQpIHx8IGZhbGxiYWNrO1xufVxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGdldEZ1bmN0aW9uQ29tcG9uZW50TmFtZShpbm5lclR5cGUpO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gYCR7d3JhcHBlck5hbWV9KCR7ZnVuY3Rpb25OYW1lfSlgIDogd3JhcHBlck5hbWUpO1xufVxuXG4vKipcbiAqIGNoZXJyeS1waWNrIGZyb21cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzc2OWIxZjI3MGUxMjUxZDlkYmRjZTBmY2JkOWU5MmU1MDJkMDU5YjgvcGFja2FnZXMvc2hhcmVkL2dldENvbXBvbmVudE5hbWUuanNcbiAqIG9yaWdpbmFsbHkgZm9ya2VkIGZyb20gcmVjb21wb3NlL2dldERpc3BsYXlOYW1lIHdpdGggYWRkZWQgSUUxMSBzdXBwb3J0XG4gKi9cbmZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKENvbXBvbmVudCkge1xuICBpZiAoQ29tcG9uZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBDb21wb25lbnQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2V0RnVuY3Rpb25Db21wb25lbnROYW1lKENvbXBvbmVudCwgJ0NvbXBvbmVudCcpO1xuICB9XG5cbiAgLy8gVHlwZVNjcmlwdCBjYW4ndCBoYXZlIGNvbXBvbmVudHMgYXMgb2JqZWN0cyBidXQgdGhleSBleGlzdCBpbiB0aGUgZm9ybSBvZiBgbWVtb2Agb3IgYFN1c3BlbnNlYFxuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKENvbXBvbmVudC4kJHR5cGVvZikge1xuICAgICAgY2FzZSBfcmVhY3RJcy5Gb3J3YXJkUmVmOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUoQ29tcG9uZW50LCBDb21wb25lbnQucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuICAgICAgY2FzZSBfcmVhY3RJcy5NZW1vOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUoQ29tcG9uZW50LCBDb21wb25lbnQudHlwZSwgJ21lbW8nKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIF9leHBvcnROYW1lcyA9IHt9O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZ2V0RGlzcGxheU5hbWUuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX2dldERpc3BsYXlOYW1lID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vZ2V0RGlzcGxheU5hbWVcIikpO1xuT2JqZWN0LmtleXMoX2dldERpc3BsYXlOYW1lKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfZ2V0RGlzcGxheU5hbWVba2V5XSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfZ2V0RGlzcGxheU5hbWVba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5mdW5jdGlvbiBjbGFtcCh2YWwsIG1pbiA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLCBtYXggPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xuICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbih2YWwsIG1heCkpO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gY2xhbXA7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9jbGFtcC5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfY2xhbXAgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NsYW1wXCIpKTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZGVlcG1lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9kZWVwbWVyZ2VcIikpO1xuZnVuY3Rpb24gbWVyZ2UoYWNjLCBpdGVtKSB7XG4gIGlmICghaXRlbSkge1xuICAgIHJldHVybiBhY2M7XG4gIH1cbiAgcmV0dXJuICgwLCBfZGVlcG1lcmdlLmRlZmF1bHQpKGFjYywgaXRlbSwge1xuICAgIGNsb25lOiBmYWxzZSAvLyBObyBuZWVkIHRvIGNsb25lIGRlZXAsIGl0J3Mgd2F5IGZhc3Rlci5cbiAgfSk7XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBtZXJnZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfcHJvcFR5cGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlc1wiKSk7XG5jb25zdCByZXNwb25zaXZlUHJvcFR5cGUgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX3Byb3BUeXBlcy5kZWZhdWx0Lm9uZU9mVHlwZShbX3Byb3BUeXBlcy5kZWZhdWx0Lm51bWJlciwgX3Byb3BUeXBlcy5kZWZhdWx0LnN0cmluZywgX3Byb3BUeXBlcy5kZWZhdWx0Lm9iamVjdCwgX3Byb3BUeXBlcy5kZWZhdWx0LmFycmF5XSkgOiB7fTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHJlc3BvbnNpdmVQcm9wVHlwZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcHV0ZUJyZWFrcG9pbnRzQmFzZSA9IGNvbXB1dGVCcmVha3BvaW50c0Jhc2U7XG5leHBvcnRzLmNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdDtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMuaGFuZGxlQnJlYWtwb2ludHMgPSBoYW5kbGVCcmVha3BvaW50cztcbmV4cG9ydHMubWVyZ2VCcmVha3BvaW50c0luT3JkZXIgPSBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcjtcbmV4cG9ydHMucmVtb3ZlVW51c2VkQnJlYWtwb2ludHMgPSByZW1vdmVVbnVzZWRCcmVha3BvaW50cztcbmV4cG9ydHMucmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcztcbmV4cG9ydHMudmFsdWVzID0gdm9pZCAwO1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG52YXIgX3Byb3BUeXBlcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXNcIikpO1xudmFyIF9kZWVwbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKSk7XG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZXJnZVwiKSk7XG4vLyBUaGUgYnJlYWtwb2ludCAqKnN0YXJ0KiogYXQgdGhpcyB2YWx1ZS5cbi8vIEZvciBpbnN0YW5jZSB3aXRoIHRoZSBmaXJzdCBicmVha3BvaW50IHhzOiBbeHMsIHNtWy5cbmNvbnN0IHZhbHVlcyA9IGV4cG9ydHMudmFsdWVzID0ge1xuICB4czogMCxcbiAgLy8gcGhvbmVcbiAgc206IDYwMCxcbiAgLy8gdGFibGV0XG4gIG1kOiA5MDAsXG4gIC8vIHNtYWxsIGxhcHRvcFxuICBsZzogMTIwMCxcbiAgLy8gZGVza3RvcFxuICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbn07XG5jb25zdCBkZWZhdWx0QnJlYWtwb2ludHMgPSB7XG4gIC8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbiAgLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuICBrZXlzOiBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ10sXG4gIHVwOiBrZXkgPT4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWVzW2tleV19cHgpYFxufTtcbmZ1bmN0aW9uIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSkge1xuICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lIHx8IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICByZXR1cm4gcHJvcFZhbHVlLnJlZHVjZSgoYWNjLCBpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgYWNjW3RoZW1lQnJlYWtwb2ludHMudXAodGhlbWVCcmVha3BvaW50cy5rZXlzW2luZGV4XSldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVtpbmRleF0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgdGhlbWVCcmVha3BvaW50cyA9IHRoZW1lLmJyZWFrcG9pbnRzIHx8IGRlZmF1bHRCcmVha3BvaW50cztcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcFZhbHVlKS5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCkgPT4ge1xuICAgICAgLy8ga2V5IGlzIGJyZWFrcG9pbnRcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGVtZUJyZWFrcG9pbnRzLnZhbHVlcyB8fCB2YWx1ZXMpLmluZGV4T2YoYnJlYWtwb2ludCkgIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG1lZGlhS2V5ID0gdGhlbWVCcmVha3BvaW50cy51cChicmVha3BvaW50KTtcbiAgICAgICAgYWNjW21lZGlhS2V5XSA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWVbYnJlYWtwb2ludF0sIGJyZWFrcG9pbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3NzS2V5ID0gYnJlYWtwb2ludDtcbiAgICAgICAgYWNjW2Nzc0tleV0gPSBwcm9wVmFsdWVbY3NzS2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9XG4gIGNvbnN0IG91dHB1dCA9IHN0eWxlRnJvbVByb3BWYWx1ZShwcm9wVmFsdWUpO1xuICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gYnJlYWtwb2ludHMoc3R5bGVGdW5jdGlvbikge1xuICAvLyBmYWxzZSBwb3NpdGl2ZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbiAgY29uc3QgbmV3U3R5bGVGdW5jdGlvbiA9IHByb3BzID0+IHtcbiAgICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lIHx8IHt9O1xuICAgIGNvbnN0IGJhc2UgPSBzdHlsZUZ1bmN0aW9uKHByb3BzKTtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIGNvbnN0IGV4dGVuZGVkID0gdGhlbWVCcmVha3BvaW50cy5rZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGlmIChwcm9wc1trZXldKSB7XG4gICAgICAgIGFjYyA9IGFjYyB8fCB7fTtcbiAgICAgICAgYWNjW3RoZW1lQnJlYWtwb2ludHMudXAoa2V5KV0gPSBzdHlsZUZ1bmN0aW9uKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgICAgIHRoZW1lXG4gICAgICAgIH0sIHByb3BzW2tleV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbnVsbCk7XG4gICAgcmV0dXJuICgwLCBfbWVyZ2UuZGVmYXVsdCkoYmFzZSwgZXh0ZW5kZWQpO1xuICB9O1xuICBuZXdTdHlsZUZ1bmN0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBzdHlsZUZ1bmN0aW9uLnByb3BUeXBlcywge1xuICAgIHhzOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIHNtOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIG1kOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIGxnOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0LFxuICAgIHhsOiBfcHJvcFR5cGVzLmRlZmF1bHQub2JqZWN0XG4gIH0pIDoge307XG4gIG5ld1N0eWxlRnVuY3Rpb24uZmlsdGVyUHJvcHMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgLi4uc3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wc107XG4gIHJldHVybiBuZXdTdHlsZUZ1bmN0aW9uO1xufVxuZnVuY3Rpb24gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQgPSB7fSkge1xuICB2YXIgX2JyZWFrcG9pbnRzSW5wdXQka2V5O1xuICBjb25zdCBicmVha3BvaW50c0luT3JkZXIgPSAoX2JyZWFrcG9pbnRzSW5wdXQka2V5ID0gYnJlYWtwb2ludHNJbnB1dC5rZXlzKSA9PSBudWxsID8gdm9pZCAwIDogX2JyZWFrcG9pbnRzSW5wdXQka2V5LnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50U3R5bGVLZXkgPSBicmVha3BvaW50c0lucHV0LnVwKGtleSk7XG4gICAgYWNjW2JyZWFrcG9pbnRTdHlsZUtleV0gPSB7fTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBicmVha3BvaW50c0luT3JkZXIgfHwge307XG59XG5mdW5jdGlvbiByZW1vdmVVbnVzZWRCcmVha3BvaW50cyhicmVha3BvaW50S2V5cywgc3R5bGUpIHtcbiAgcmV0dXJuIGJyZWFrcG9pbnRLZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50T3V0cHV0ID0gYWNjW2tleV07XG4gICAgY29uc3QgaXNCcmVha3BvaW50VW51c2VkID0gIWJyZWFrcG9pbnRPdXRwdXQgfHwgT2JqZWN0LmtleXMoYnJlYWtwb2ludE91dHB1dCkubGVuZ3RoID09PSAwO1xuICAgIGlmIChpc0JyZWFrcG9pbnRVbnVzZWQpIHtcbiAgICAgIGRlbGV0ZSBhY2Nba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgc3R5bGUpO1xufVxuZnVuY3Rpb24gbWVyZ2VCcmVha3BvaW50c0luT3JkZXIoYnJlYWtwb2ludHNJbnB1dCwgLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGVtcHR5QnJlYWtwb2ludHMgPSBjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QoYnJlYWtwb2ludHNJbnB1dCk7XG4gIGNvbnN0IG1lcmdlZE91dHB1dCA9IFtlbXB0eUJyZWFrcG9pbnRzLCAuLi5zdHlsZXNdLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gKDAsIF9kZWVwbWVyZ2UuZGVmYXVsdCkocHJldiwgbmV4dCksIHt9KTtcbiAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpLCBtZXJnZWRPdXRwdXQpO1xufVxuXG4vLyBjb21wdXRlIGJhc2UgZm9yIHJlc3BvbnNpdmUgdmFsdWVzOyBlLmcuLFxuLy8gWzEsMiwzXSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbi8vIHt4czogMSwgc206IDIsIG1kOiAzfSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbmZ1bmN0aW9uIGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cykge1xuICAvLyBmaXhlZCB2YWx1ZVxuICBpZiAodHlwZW9mIGJyZWFrcG9pbnRWYWx1ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IGJhc2UgPSB7fTtcbiAgY29uc3QgYnJlYWtwb2ludHNLZXlzID0gT2JqZWN0LmtleXModGhlbWVCcmVha3BvaW50cyk7XG4gIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goKGJyZWFrcG9pbnQsIGkpID0+IHtcbiAgICAgIGlmIChpIDwgYnJlYWtwb2ludFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgYmFzZVticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYnJlYWtwb2ludHNLZXlzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgICBpZiAoYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBiYXNlO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICB2YWx1ZXM6IGJyZWFrcG9pbnRWYWx1ZXMsXG4gIGJyZWFrcG9pbnRzOiB0aGVtZUJyZWFrcG9pbnRzLFxuICBiYXNlOiBjdXN0b21CYXNlXG59KSB7XG4gIGNvbnN0IGJhc2UgPSBjdXN0b21CYXNlIHx8IGNvbXB1dGVCcmVha3BvaW50c0Jhc2UoYnJlYWtwb2ludFZhbHVlcywgdGhlbWVCcmVha3BvaW50cyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhiYXNlKTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJyZWFrcG9pbnRWYWx1ZXM7XG4gIH1cbiAgbGV0IHByZXZpb3VzO1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoKGFjYywgYnJlYWtwb2ludCwgaSkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGJyZWFrcG9pbnRWYWx1ZXMpKSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzW2ldICE9IG51bGwgPyBicmVha3BvaW50VmFsdWVzW2ldIDogYnJlYWtwb2ludFZhbHVlc1twcmV2aW91c107XG4gICAgICBwcmV2aW91cyA9IGk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYnJlYWtwb2ludFZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gYnJlYWtwb2ludDtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlcztcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gYnJlYWtwb2ludHM7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5leHBvcnRzLmdldFBhdGggPSBnZXRQYXRoO1xuZXhwb3J0cy5nZXRTdHlsZVZhbHVlID0gZ2V0U3R5bGVWYWx1ZTtcbnZhciBfY2FwaXRhbGl6ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2FwaXRhbGl6ZVwiKSk7XG52YXIgX3Jlc3BvbnNpdmVQcm9wVHlwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcmVzcG9uc2l2ZVByb3BUeXBlXCIpKTtcbnZhciBfYnJlYWtwb2ludHMgPSByZXF1aXJlKFwiLi9icmVha3BvaW50c1wiKTtcbmZ1bmN0aW9uIGdldFBhdGgob2JqLCBwYXRoLCBjaGVja1ZhcnMgPSB0cnVlKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIENTUyB2YXJpYWJsZXMgYXJlIHVzZWRcbiAgaWYgKG9iaiAmJiBvYmoudmFycyAmJiBjaGVja1ZhcnMpIHtcbiAgICBjb25zdCB2YWwgPSBgdmFycy4ke3BhdGh9YC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiBhY2MgJiYgYWNjW2l0ZW1dID8gYWNjW2l0ZW1dIDogbnVsbCwgb2JqKTtcbiAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICBpZiAoYWNjICYmIGFjY1tpdGVtXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gYWNjW2l0ZW1dO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSwgb2JqKTtcbn1cbmZ1bmN0aW9uIGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsLCB1c2VyVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCkge1xuICBsZXQgdmFsdWU7XG4gIGlmICh0eXBlb2YgdGhlbWVNYXBwaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmcocHJvcFZhbHVlRmluYWwpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhlbWVNYXBwaW5nKSkge1xuICAgIHZhbHVlID0gdGhlbWVNYXBwaW5nW3Byb3BWYWx1ZUZpbmFsXSB8fCB1c2VyVmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBnZXRQYXRoKHRoZW1lTWFwcGluZywgcHJvcFZhbHVlRmluYWwpIHx8IHVzZXJWYWx1ZTtcbiAgfVxuICBpZiAodHJhbnNmb3JtKSB7XG4gICAgdmFsdWUgPSB0cmFuc2Zvcm0odmFsdWUsIHVzZXJWYWx1ZSwgdGhlbWVNYXBwaW5nKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBzdHlsZShvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBwcm9wLFxuICAgIGNzc1Byb3BlcnR5ID0gb3B0aW9ucy5wcm9wLFxuICAgIHRoZW1lS2V5LFxuICAgIHRyYW5zZm9ybVxuICB9ID0gb3B0aW9ucztcblxuICAvLyBmYWxzZSBwb3NpdGl2ZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbiAgY29uc3QgZm4gPSBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzW3Byb3BdID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1twcm9wXTtcbiAgICBjb25zdCB0aGVtZSA9IHByb3BzLnRoZW1lO1xuICAgIGNvbnN0IHRoZW1lTWFwcGluZyA9IGdldFBhdGgodGhlbWUsIHRoZW1lS2V5KSB8fCB7fTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBnZXRTdHlsZVZhbHVlKHRoZW1lTWFwcGluZywgdHJhbnNmb3JtLCBwcm9wVmFsdWVGaW5hbCk7XG4gICAgICBpZiAocHJvcFZhbHVlRmluYWwgPT09IHZhbHVlICYmIHR5cGVvZiBwcm9wVmFsdWVGaW5hbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGF2ZW4ndCBmb3VuZCB2YWx1ZVxuICAgICAgICB2YWx1ZSA9IGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIGAke3Byb3B9JHtwcm9wVmFsdWVGaW5hbCA9PT0gJ2RlZmF1bHQnID8gJycgOiAoMCwgX2NhcGl0YWxpemUuZGVmYXVsdCkocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfTtcbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgICBbcHJvcF06IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxuICB9IDoge307XG4gIGZuLmZpbHRlclByb3BzID0gW3Byb3BdO1xuICByZXR1cm4gZm47XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzdHlsZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBtZW1vaXplO1xuZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICBjb25zdCBjYWNoZSA9IHt9O1xuICByZXR1cm4gYXJnID0+IHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuYXJ5U3BhY2luZyA9IGNyZWF0ZVVuYXJ5U3BhY2luZztcbmV4cG9ydHMuY3JlYXRlVW5hcnlVbml0ID0gY3JlYXRlVW5hcnlVbml0O1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuZXhwb3J0cy5nZXRTdHlsZUZyb21Qcm9wVmFsdWUgPSBnZXRTdHlsZUZyb21Qcm9wVmFsdWU7XG5leHBvcnRzLmdldFZhbHVlID0gZ2V0VmFsdWU7XG5leHBvcnRzLm1hcmdpbiA9IG1hcmdpbjtcbmV4cG9ydHMubWFyZ2luS2V5cyA9IHZvaWQgMDtcbmV4cG9ydHMucGFkZGluZyA9IHBhZGRpbmc7XG5leHBvcnRzLnBhZGRpbmdLZXlzID0gdm9pZCAwO1xudmFyIF9yZXNwb25zaXZlUHJvcFR5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Jlc3BvbnNpdmVQcm9wVHlwZVwiKSk7XG52YXIgX2JyZWFrcG9pbnRzID0gcmVxdWlyZShcIi4vYnJlYWtwb2ludHNcIik7XG52YXIgX3N0eWxlID0gcmVxdWlyZShcIi4vc3R5bGVcIik7XG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZXJnZVwiKSk7XG52YXIgX21lbW9pemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21lbW9pemVcIikpO1xuY29uc3QgcHJvcGVydGllcyA9IHtcbiAgbTogJ21hcmdpbicsXG4gIHA6ICdwYWRkaW5nJ1xufTtcbmNvbnN0IGRpcmVjdGlvbnMgPSB7XG4gIHQ6ICdUb3AnLFxuICByOiAnUmlnaHQnLFxuICBiOiAnQm90dG9tJyxcbiAgbDogJ0xlZnQnLFxuICB4OiBbJ0xlZnQnLCAnUmlnaHQnXSxcbiAgeTogWydUb3AnLCAnQm90dG9tJ11cbn07XG5jb25zdCBhbGlhc2VzID0ge1xuICBtYXJnaW5YOiAnbXgnLFxuICBtYXJnaW5ZOiAnbXknLFxuICBwYWRkaW5nWDogJ3B4JyxcbiAgcGFkZGluZ1k6ICdweSdcbn07XG5cbi8vIG1lbW9pemUoKSBpbXBhY3Q6XG4vLyBGcm9tIDMwMCwwMDAgb3BzL3NlY1xuLy8gVG8gMzUwLDAwMCBvcHMvc2VjXG5jb25zdCBnZXRDc3NQcm9wZXJ0aWVzID0gKDAsIF9tZW1vaXplLmRlZmF1bHQpKHByb3AgPT4ge1xuICAvLyBJdCdzIG5vdCBhIHNob3J0aGFuZCBub3RhdGlvbi5cbiAgaWYgKHByb3AubGVuZ3RoID4gMikge1xuICAgIGlmIChhbGlhc2VzW3Byb3BdKSB7XG4gICAgICBwcm9wID0gYWxpYXNlc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtwcm9wXTtcbiAgICB9XG4gIH1cbiAgY29uc3QgW2EsIGJdID0gcHJvcC5zcGxpdCgnJyk7XG4gIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1thXTtcbiAgY29uc3QgZGlyZWN0aW9uID0gZGlyZWN0aW9uc1tiXSB8fCAnJztcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGlyZWN0aW9uKSA/IGRpcmVjdGlvbi5tYXAoZGlyID0+IHByb3BlcnR5ICsgZGlyKSA6IFtwcm9wZXJ0eSArIGRpcmVjdGlvbl07XG59KTtcbmNvbnN0IG1hcmdpbktleXMgPSBleHBvcnRzLm1hcmdpbktleXMgPSBbJ20nLCAnbXQnLCAnbXInLCAnbWInLCAnbWwnLCAnbXgnLCAnbXknLCAnbWFyZ2luJywgJ21hcmdpblRvcCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5YJywgJ21hcmdpblknLCAnbWFyZ2luSW5saW5lJywgJ21hcmdpbklubGluZVN0YXJ0JywgJ21hcmdpbklubGluZUVuZCcsICdtYXJnaW5CbG9jaycsICdtYXJnaW5CbG9ja1N0YXJ0JywgJ21hcmdpbkJsb2NrRW5kJ107XG5jb25zdCBwYWRkaW5nS2V5cyA9IGV4cG9ydHMucGFkZGluZ0tleXMgPSBbJ3AnLCAncHQnLCAncHInLCAncGInLCAncGwnLCAncHgnLCAncHknLCAncGFkZGluZycsICdwYWRkaW5nVG9wJywgJ3BhZGRpbmdSaWdodCcsICdwYWRkaW5nQm90dG9tJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdYJywgJ3BhZGRpbmdZJywgJ3BhZGRpbmdJbmxpbmUnLCAncGFkZGluZ0lubGluZVN0YXJ0JywgJ3BhZGRpbmdJbmxpbmVFbmQnLCAncGFkZGluZ0Jsb2NrJywgJ3BhZGRpbmdCbG9ja1N0YXJ0JywgJ3BhZGRpbmdCbG9ja0VuZCddO1xuY29uc3Qgc3BhY2luZ0tleXMgPSBbLi4ubWFyZ2luS2V5cywgLi4ucGFkZGluZ0tleXNdO1xuZnVuY3Rpb24gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCB0aGVtZUtleSwgZGVmYXVsdFZhbHVlLCBwcm9wTmFtZSkge1xuICB2YXIgX2dldFBhdGg7XG4gIGNvbnN0IHRoZW1lU3BhY2luZyA9IChfZ2V0UGF0aCA9ICgwLCBfc3R5bGUuZ2V0UGF0aCkodGhlbWUsIHRoZW1lS2V5LCBmYWxzZSkpICE9IG51bGwgPyBfZ2V0UGF0aCA6IGRlZmF1bHRWYWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWJzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogRXhwZWN0ZWQgJHtwcm9wTmFtZX0gYXJndW1lbnQgdG8gYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcsIGdvdCAke2Fic30uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGVtZVNwYWNpbmcgKiBhYnM7XG4gICAgfTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZVNwYWNpbmcpKSB7XG4gICAgcmV0dXJuIGFicyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFicyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFicztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhYnMpKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFycmF5IHR5cGUgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggbm9uIGludGVnZXIgdmFsdWVzLmAgKyBgWW91IHNob3VsZCBlaXRoZXIgdXNlIGFuIGludGVnZXIgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbmRleCwgb3IgZGVmaW5lIHRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCBhcyBhIG51bWJlci5gXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWJzID4gdGhlbWVTcGFjaW5nLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgdmFsdWUgcHJvdmlkZWQgKCR7YWJzfSkgb3ZlcmZsb3dzLmAsIGBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmU6ICR7SlNPTi5zdHJpbmdpZnkodGhlbWVTcGFjaW5nKX0uYCwgYCR7YWJzfSA+ICR7dGhlbWVTcGFjaW5nLmxlbmd0aCAtIDF9LCB5b3UgbmVlZCB0byBhZGQgdGhlIG1pc3NpbmcgdmFsdWVzLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZ1thYnNdO1xuICAgIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB0aGVtZVNwYWNpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdGhlbWVTcGFjaW5nO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIHZhbHVlICgke3RoZW1lU3BhY2luZ30pIGlzIGludmFsaWQuYCwgJ0l0IHNob3VsZCBiZSBhIG51bWJlciwgYW4gYXJyYXkgb3IgYSBmdW5jdGlvbi4nXS5qb2luKCdcXG4nKSk7XG4gIH1cbiAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVVuYXJ5U3BhY2luZyh0aGVtZSkge1xuICByZXR1cm4gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCAnc3BhY2luZycsIDgsICdzcGFjaW5nJyk7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyB8fCBwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9wVmFsdWU7XG4gIH1cbiAgY29uc3QgYWJzID0gTWF0aC5hYnMocHJvcFZhbHVlKTtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1lcihhYnMpO1xuICBpZiAocHJvcFZhbHVlID49IDApIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lZCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gLXRyYW5zZm9ybWVkO1xuICB9XG4gIHJldHVybiBgLSR7dHJhbnNmb3JtZWR9YDtcbn1cbmZ1bmN0aW9uIGdldFN0eWxlRnJvbVByb3BWYWx1ZShjc3NQcm9wZXJ0aWVzLCB0cmFuc2Zvcm1lcikge1xuICByZXR1cm4gcHJvcFZhbHVlID0+IGNzc1Byb3BlcnRpZXMucmVkdWNlKChhY2MsIGNzc1Byb3BlcnR5KSA9PiB7XG4gICAgYWNjW2Nzc1Byb3BlcnR5XSA9IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpIHtcbiAgLy8gVXNpbmcgYSBoYXNoIGNvbXB1dGF0aW9uIG92ZXIgYW4gYXJyYXkgaXRlcmF0aW9uIGNvdWxkIGJlIGZhc3RlciwgYnV0IHdpdGggb25seSAyOCBpdGVtcyxcbiAgLy8gaXQncyBkb2Vzbid0IHdvcnRoIHRoZSBidW5kbGUgc2l6ZS5cbiAgaWYgKGtleXMuaW5kZXhPZihwcm9wKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBjc3NQcm9wZXJ0aWVzID0gZ2V0Q3NzUHJvcGVydGllcyhwcm9wKTtcbiAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKTtcbiAgY29uc3QgcHJvcFZhbHVlID0gcHJvcHNbcHJvcF07XG4gIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcFZhbHVlLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xufVxuZnVuY3Rpb24gc3R5bGUocHJvcHMsIGtleXMpIHtcbiAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcocHJvcHMudGhlbWUpO1xuICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLm1hcChwcm9wID0+IHJlc29sdmVDc3NQcm9wZXJ0eShwcm9wcywga2V5cywgcHJvcCwgdHJhbnNmb3JtZXIpKS5yZWR1Y2UoX21lcmdlLmRlZmF1bHQsIHt9KTtcbn1cbmZ1bmN0aW9uIG1hcmdpbihwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIG1hcmdpbktleXMpO1xufVxubWFyZ2luLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBtYXJnaW5LZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHQ7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbm1hcmdpbi5maWx0ZXJQcm9wcyA9IG1hcmdpbktleXM7XG5mdW5jdGlvbiBwYWRkaW5nKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgcGFkZGluZ0tleXMpO1xufVxucGFkZGluZy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcGFkZGluZ0tleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdDtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xucGFkZGluZy5maWx0ZXJQcm9wcyA9IHBhZGRpbmdLZXlzO1xuZnVuY3Rpb24gc3BhY2luZyhwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIHNwYWNpbmdLZXlzKTtcbn1cbnNwYWNpbmcucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHNwYWNpbmdLZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSBfcmVzcG9uc2l2ZVByb3BUeXBlLmRlZmF1bHQ7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbnNwYWNpbmcuZmlsdGVyUHJvcHMgPSBzcGFjaW5nS2V5cztcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHNwYWNpbmc7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZXJnZVwiKSk7XG5mdW5jdGlvbiBjb21wb3NlKC4uLnN0eWxlcykge1xuICBjb25zdCBoYW5kbGVycyA9IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IHtcbiAgICBzdHlsZS5maWx0ZXJQcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgYWNjW3Byb3BdID0gc3R5bGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICBpZiAoaGFuZGxlcnNbcHJvcF0pIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbWVyZ2UuZGVmYXVsdCkoYWNjLCBoYW5kbGVyc1twcm9wXShwcm9wcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH07XG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc3R5bGUucHJvcFR5cGVzKSwge30pIDoge307XG4gIGZuLmZpbHRlclByb3BzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gYWNjLmNvbmNhdChzdHlsZS5maWx0ZXJQcm9wcyksIFtdKTtcbiAgcmV0dXJuIGZuO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gY29tcG9zZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9yZGVyVG9wQ29sb3IgPSBleHBvcnRzLmJvcmRlclRvcCA9IGV4cG9ydHMuYm9yZGVyUmlnaHRDb2xvciA9IGV4cG9ydHMuYm9yZGVyUmlnaHQgPSBleHBvcnRzLmJvcmRlclJhZGl1cyA9IGV4cG9ydHMuYm9yZGVyTGVmdENvbG9yID0gZXhwb3J0cy5ib3JkZXJMZWZ0ID0gZXhwb3J0cy5ib3JkZXJDb2xvciA9IGV4cG9ydHMuYm9yZGVyQm90dG9tQ29sb3IgPSBleHBvcnRzLmJvcmRlckJvdHRvbSA9IGV4cG9ydHMuYm9yZGVyID0gdm9pZCAwO1xuZXhwb3J0cy5ib3JkZXJUcmFuc2Zvcm0gPSBib3JkZXJUcmFuc2Zvcm07XG5leHBvcnRzLm91dGxpbmVDb2xvciA9IGV4cG9ydHMub3V0bGluZSA9IGV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfcmVzcG9uc2l2ZVByb3BUeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXNwb25zaXZlUHJvcFR5cGVcIikpO1xudmFyIF9zdHlsZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVcIikpO1xudmFyIF9jb21wb3NlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb3NlXCIpKTtcbnZhciBfc3BhY2luZyA9IHJlcXVpcmUoXCIuL3NwYWNpbmdcIik7XG52YXIgX2JyZWFrcG9pbnRzID0gcmVxdWlyZShcIi4vYnJlYWtwb2ludHNcIik7XG5mdW5jdGlvbiBib3JkZXJUcmFuc2Zvcm0odmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGAke3ZhbHVlfXB4IHNvbGlkYDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUJvcmRlclN0eWxlKHByb3AsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gICAgcHJvcCxcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybVxuICB9KTtcbn1cbmNvbnN0IGJvcmRlciA9IGV4cG9ydHMuYm9yZGVyID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlcicsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBib3JkZXJUb3AgPSBleHBvcnRzLmJvcmRlclRvcCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJUb3AnLCBib3JkZXJUcmFuc2Zvcm0pO1xuY29uc3QgYm9yZGVyUmlnaHQgPSBleHBvcnRzLmJvcmRlclJpZ2h0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclJpZ2h0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmNvbnN0IGJvcmRlckJvdHRvbSA9IGV4cG9ydHMuYm9yZGVyQm90dG9tID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbScsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBib3JkZXJMZWZ0ID0gZXhwb3J0cy5ib3JkZXJMZWZ0ID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckxlZnQnLCBib3JkZXJUcmFuc2Zvcm0pO1xuY29uc3QgYm9yZGVyQ29sb3IgPSBleHBvcnRzLmJvcmRlckNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckNvbG9yJyk7XG5jb25zdCBib3JkZXJUb3BDb2xvciA9IGV4cG9ydHMuYm9yZGVyVG9wQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wQ29sb3InKTtcbmNvbnN0IGJvcmRlclJpZ2h0Q29sb3IgPSBleHBvcnRzLmJvcmRlclJpZ2h0Q29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyUmlnaHRDb2xvcicpO1xuY29uc3QgYm9yZGVyQm90dG9tQ29sb3IgPSBleHBvcnRzLmJvcmRlckJvdHRvbUNvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbUNvbG9yJyk7XG5jb25zdCBib3JkZXJMZWZ0Q29sb3IgPSBleHBvcnRzLmJvcmRlckxlZnRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0Q29sb3InKTtcbmNvbnN0IG91dGxpbmUgPSBleHBvcnRzLm91dGxpbmUgPSBjcmVhdGVCb3JkZXJTdHlsZSgnb3V0bGluZScsIGJvcmRlclRyYW5zZm9ybSk7XG5jb25zdCBvdXRsaW5lQ29sb3IgPSBleHBvcnRzLm91dGxpbmVDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lQ29sb3InKTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3QgYm9yZGVyUmFkaXVzID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuYm9yZGVyUmFkaXVzICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuYm9yZGVyUmFkaXVzICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NoYXBlLmJvcmRlclJhZGl1cycsIDQsICdib3JkZXJSYWRpdXMnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGJvcmRlclJhZGl1czogKDAsIF9zcGFjaW5nLmdldFZhbHVlKSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcHMuYm9yZGVyUmFkaXVzLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmV4cG9ydHMuYm9yZGVyUmFkaXVzID0gYm9yZGVyUmFkaXVzO1xuYm9yZGVyUmFkaXVzLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGJvcmRlclJhZGl1czogX3Jlc3BvbnNpdmVQcm9wVHlwZS5kZWZhdWx0XG59IDoge307XG5ib3JkZXJSYWRpdXMuZmlsdGVyUHJvcHMgPSBbJ2JvcmRlclJhZGl1cyddO1xuY29uc3QgYm9yZGVycyA9ICgwLCBfY29tcG9zZS5kZWZhdWx0KShib3JkZXIsIGJvcmRlclRvcCwgYm9yZGVyUmlnaHQsIGJvcmRlckJvdHRvbSwgYm9yZGVyTGVmdCwgYm9yZGVyQ29sb3IsIGJvcmRlclRvcENvbG9yLCBib3JkZXJSaWdodENvbG9yLCBib3JkZXJCb3R0b21Db2xvciwgYm9yZGVyTGVmdENvbG9yLCBib3JkZXJSYWRpdXMsIG91dGxpbmUsIG91dGxpbmVDb2xvcik7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBib3JkZXJzOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dHYXAgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZVJvd3MgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZUFyZWFzID0gZXhwb3J0cy5ncmlkUm93ID0gZXhwb3J0cy5ncmlkQ29sdW1uID0gZXhwb3J0cy5ncmlkQXV0b1Jvd3MgPSBleHBvcnRzLmdyaWRBdXRvRmxvdyA9IGV4cG9ydHMuZ3JpZEF1dG9Db2x1bW5zID0gZXhwb3J0cy5ncmlkQXJlYSA9IGV4cG9ydHMuZ2FwID0gZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5jb2x1bW5HYXAgPSB2b2lkIDA7XG52YXIgX3N0eWxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHlsZVwiKSk7XG52YXIgX2NvbXBvc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvc2VcIikpO1xudmFyIF9zcGFjaW5nID0gcmVxdWlyZShcIi4vc3BhY2luZ1wiKTtcbnZhciBfYnJlYWtwb2ludHMgPSByZXF1aXJlKFwiLi9icmVha3BvaW50c1wiKTtcbnZhciBfcmVzcG9uc2l2ZVByb3BUeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXNwb25zaXZlUHJvcFR5cGVcIikpO1xuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3QgZ2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuZ2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZ2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnZ2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBnYXA6ICgwLCBfc3BhY2luZy5nZXRWYWx1ZSkodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLmdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLmdhcCA9IGdhcDtcbmdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBnYXA6IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxufSA6IHt9O1xuZ2FwLmZpbHRlclByb3BzID0gWydnYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3QgY29sdW1uR2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuY29sdW1uR2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuY29sdW1uR2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnY29sdW1uR2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBjb2x1bW5HYXA6ICgwLCBfc3BhY2luZy5nZXRWYWx1ZSkodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLmNvbHVtbkdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLmNvbHVtbkdhcCA9IGNvbHVtbkdhcDtcbmNvbHVtbkdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBjb2x1bW5HYXA6IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxufSA6IHt9O1xuY29sdW1uR2FwLmZpbHRlclByb3BzID0gWydjb2x1bW5HYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuY29uc3Qgcm93R2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMucm93R2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMucm93R2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoMCwgX3NwYWNpbmcuY3JlYXRlVW5hcnlVbml0KShwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAncm93R2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICByb3dHYXA6ICgwLCBfc3BhY2luZy5nZXRWYWx1ZSkodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5oYW5kbGVCcmVha3BvaW50cykocHJvcHMsIHByb3BzLnJvd0dhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5leHBvcnRzLnJvd0dhcCA9IHJvd0dhcDtcbnJvd0dhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICByb3dHYXA6IF9yZXNwb25zaXZlUHJvcFR5cGUuZGVmYXVsdFxufSA6IHt9O1xucm93R2FwLmZpbHRlclByb3BzID0gWydyb3dHYXAnXTtcbmNvbnN0IGdyaWRDb2x1bW4gPSBleHBvcnRzLmdyaWRDb2x1bW4gPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRDb2x1bW4nXG59KTtcbmNvbnN0IGdyaWRSb3cgPSBleHBvcnRzLmdyaWRSb3cgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRSb3cnXG59KTtcbmNvbnN0IGdyaWRBdXRvRmxvdyA9IGV4cG9ydHMuZ3JpZEF1dG9GbG93ID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQXV0b0Zsb3cnXG59KTtcbmNvbnN0IGdyaWRBdXRvQ29sdW1ucyA9IGV4cG9ydHMuZ3JpZEF1dG9Db2x1bW5zID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQXV0b0NvbHVtbnMnXG59KTtcbmNvbnN0IGdyaWRBdXRvUm93cyA9IGV4cG9ydHMuZ3JpZEF1dG9Sb3dzID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdncmlkQXV0b1Jvd3MnXG59KTtcbmNvbnN0IGdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZUNvbHVtbnMgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnXG59KTtcbmNvbnN0IGdyaWRUZW1wbGF0ZVJvd3MgPSBleHBvcnRzLmdyaWRUZW1wbGF0ZVJvd3MgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZVJvd3MnXG59KTtcbmNvbnN0IGdyaWRUZW1wbGF0ZUFyZWFzID0gZXhwb3J0cy5ncmlkVGVtcGxhdGVBcmVhcyA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlQXJlYXMnXG59KTtcbmNvbnN0IGdyaWRBcmVhID0gZXhwb3J0cy5ncmlkQXJlYSA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnZ3JpZEFyZWEnXG59KTtcbmNvbnN0IGdyaWQgPSAoMCwgX2NvbXBvc2UuZGVmYXVsdCkoZ2FwLCBjb2x1bW5HYXAsIHJvd0dhcCwgZ3JpZENvbHVtbiwgZ3JpZFJvdywgZ3JpZEF1dG9GbG93LCBncmlkQXV0b0NvbHVtbnMsIGdyaWRBdXRvUm93cywgZ3JpZFRlbXBsYXRlQ29sdW1ucywgZ3JpZFRlbXBsYXRlUm93cywgZ3JpZFRlbXBsYXRlQXJlYXMsIGdyaWRBcmVhKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGdyaWQ7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLmNvbG9yID0gZXhwb3J0cy5iZ2NvbG9yID0gZXhwb3J0cy5iYWNrZ3JvdW5kQ29sb3IgPSB2b2lkIDA7XG5leHBvcnRzLnBhbGV0dGVUcmFuc2Zvcm0gPSBwYWxldHRlVHJhbnNmb3JtO1xudmFyIF9zdHlsZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVcIikpO1xudmFyIF9jb21wb3NlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb3NlXCIpKTtcbmZ1bmN0aW9uIHBhbGV0dGVUcmFuc2Zvcm0odmFsdWUsIHVzZXJWYWx1ZSkge1xuICBpZiAodXNlclZhbHVlID09PSAnZ3JleScpIHtcbiAgICByZXR1cm4gdXNlclZhbHVlO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmNvbnN0IGNvbG9yID0gZXhwb3J0cy5jb2xvciA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnY29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuY29uc3QgYmdjb2xvciA9IGV4cG9ydHMuYmdjb2xvciA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnYmdjb2xvcicsXG4gIGNzc1Byb3BlcnR5OiAnYmFja2dyb3VuZENvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG59KTtcbmNvbnN0IGJhY2tncm91bmRDb2xvciA9IGV4cG9ydHMuYmFja2dyb3VuZENvbG9yID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuY29uc3QgcGFsZXR0ZSA9ICgwLCBfY29tcG9zZS5kZWZhdWx0KShjb2xvciwgYmdjb2xvciwgYmFja2dyb3VuZENvbG9yKTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHBhbGV0dGU7IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVXaWR0aCA9IGV4cG9ydHMuc2l6ZUhlaWdodCA9IGV4cG9ydHMubWluV2lkdGggPSBleHBvcnRzLm1pbkhlaWdodCA9IGV4cG9ydHMubWF4V2lkdGggPSBleHBvcnRzLm1heEhlaWdodCA9IGV4cG9ydHMuaGVpZ2h0ID0gZXhwb3J0cy5kZWZhdWx0ID0gZXhwb3J0cy5ib3hTaXppbmcgPSB2b2lkIDA7XG5leHBvcnRzLnNpemluZ1RyYW5zZm9ybSA9IHNpemluZ1RyYW5zZm9ybTtcbmV4cG9ydHMud2lkdGggPSB2b2lkIDA7XG52YXIgX3N0eWxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHlsZVwiKSk7XG52YXIgX2NvbXBvc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvc2VcIikpO1xudmFyIF9icmVha3BvaW50cyA9IHJlcXVpcmUoXCIuL2JyZWFrcG9pbnRzXCIpO1xuZnVuY3Rpb24gc2l6aW5nVHJhbnNmb3JtKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA8PSAxICYmIHZhbHVlICE9PSAwID8gYCR7dmFsdWUgKiAxMDB9JWAgOiB2YWx1ZTtcbn1cbmNvbnN0IHdpZHRoID0gZXhwb3J0cy53aWR0aCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnd2lkdGgnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5jb25zdCBtYXhXaWR0aCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLm1heFdpZHRoICE9PSB1bmRlZmluZWQgJiYgcHJvcHMubWF4V2lkdGggIT09IG51bGwpIHtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4ge1xuICAgICAgdmFyIF9wcm9wcyR0aGVtZSwgX3Byb3BzJHRoZW1lMjtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSAoKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBfcHJvcHMkdGhlbWUuYnJlYWtwb2ludHMpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IF9wcm9wcyR0aGVtZS52YWx1ZXMpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvcHMkdGhlbWVbcHJvcFZhbHVlXSkgfHwgX2JyZWFrcG9pbnRzLnZhbHVlc1twcm9wVmFsdWVdO1xuICAgICAgaWYgKCFicmVha3BvaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IHNpemluZ1RyYW5zZm9ybShwcm9wVmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKChfcHJvcHMkdGhlbWUyID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZTIgPSBfcHJvcHMkdGhlbWUyLmJyZWFrcG9pbnRzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lMi51bml0KSAhPT0gJ3B4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1heFdpZHRoOiBgJHticmVha3BvaW50fSR7cHJvcHMudGhlbWUuYnJlYWtwb2ludHMudW5pdH1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXhXaWR0aDogYnJlYWtwb2ludFxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgcHJvcHMubWF4V2lkdGgsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZXhwb3J0cy5tYXhXaWR0aCA9IG1heFdpZHRoO1xubWF4V2lkdGguZmlsdGVyUHJvcHMgPSBbJ21heFdpZHRoJ107XG5jb25zdCBtaW5XaWR0aCA9IGV4cG9ydHMubWluV2lkdGggPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ21pbldpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3QgaGVpZ2h0ID0gZXhwb3J0cy5oZWlnaHQgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2hlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmNvbnN0IG1heEhlaWdodCA9IGV4cG9ydHMubWF4SGVpZ2h0ID0gKDAsIF9zdHlsZS5kZWZhdWx0KSh7XG4gIHByb3A6ICdtYXhIZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5jb25zdCBtaW5IZWlnaHQgPSBleHBvcnRzLm1pbkhlaWdodCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnbWluSGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3Qgc2l6ZVdpZHRoID0gZXhwb3J0cy5zaXplV2lkdGggPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ3NpemUnLFxuICBjc3NQcm9wZXJ0eTogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3Qgc2l6ZUhlaWdodCA9IGV4cG9ydHMuc2l6ZUhlaWdodCA9ICgwLCBfc3R5bGUuZGVmYXVsdCkoe1xuICBwcm9wOiAnc2l6ZScsXG4gIGNzc1Byb3BlcnR5OiAnaGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuY29uc3QgYm94U2l6aW5nID0gZXhwb3J0cy5ib3hTaXppbmcgPSAoMCwgX3N0eWxlLmRlZmF1bHQpKHtcbiAgcHJvcDogJ2JveFNpemluZydcbn0pO1xuY29uc3Qgc2l6aW5nID0gKDAsIF9jb21wb3NlLmRlZmF1bHQpKHdpZHRoLCBtYXhXaWR0aCwgbWluV2lkdGgsIGhlaWdodCwgbWF4SGVpZ2h0LCBtaW5IZWlnaHQsIGJveFNpemluZyk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzaXppbmc7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9zcGFjaW5nID0gcmVxdWlyZShcIi4uL3NwYWNpbmdcIik7XG52YXIgX2JvcmRlcnMgPSByZXF1aXJlKFwiLi4vYm9yZGVyc1wiKTtcbnZhciBfY3NzR3JpZCA9IHJlcXVpcmUoXCIuLi9jc3NHcmlkXCIpO1xudmFyIF9wYWxldHRlID0gcmVxdWlyZShcIi4uL3BhbGV0dGVcIik7XG52YXIgX3NpemluZyA9IHJlcXVpcmUoXCIuLi9zaXppbmdcIik7XG5jb25zdCBkZWZhdWx0U3hDb25maWcgPSB7XG4gIC8vIGJvcmRlcnNcbiAgYm9yZGVyOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IF9ib3JkZXJzLmJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJUb3A6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlclJpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IF9ib3JkZXJzLmJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJCb3R0b206IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckxlZnQ6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogX2JvcmRlcnMuYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJUb3BDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyUmlnaHRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyQm90dG9tQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlckxlZnRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgb3V0bGluZToge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBfYm9yZGVycy5ib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgb3V0bGluZUNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJSYWRpdXM6IHtcbiAgICB0aGVtZUtleTogJ3NoYXBlLmJvcmRlclJhZGl1cycsXG4gICAgc3R5bGU6IF9ib3JkZXJzLmJvcmRlclJhZGl1c1xuICB9LFxuICAvLyBwYWxldHRlXG4gIGNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICB0cmFuc2Zvcm06IF9wYWxldHRlLnBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgYmdjb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICAgIHRyYW5zZm9ybTogX3BhbGV0dGUucGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICBiYWNrZ3JvdW5kQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIHRyYW5zZm9ybTogX3BhbGV0dGUucGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICAvLyBzcGFjaW5nXG4gIHA6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwdDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHByOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGI6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwbDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHB4OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcHk6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1RvcDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdSaWdodDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCb3R0b206IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nTGVmdDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdYOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1k6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcucGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZUVuZDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9jazoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5wYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9ja1N0YXJ0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrRW5kOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLnBhZGRpbmdcbiAgfSxcbiAgbToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbXQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1yOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYjoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWw6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG14OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBteToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5Ub3A6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpblJpZ2h0OiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICBtYXJnaW5Cb3R0b206IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkxlZnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpblg6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpblk6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZToge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lU3RhcnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZUVuZDoge1xuICAgIHN0eWxlOiBfc3BhY2luZy5tYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2s6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrU3RhcnQ6IHtcbiAgICBzdHlsZTogX3NwYWNpbmcubWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrRW5kOiB7XG4gICAgc3R5bGU6IF9zcGFjaW5nLm1hcmdpblxuICB9LFxuICAvLyBkaXNwbGF5XG4gIGRpc3BsYXlQcmludDoge1xuICAgIGNzc1Byb3BlcnR5OiBmYWxzZSxcbiAgICB0cmFuc2Zvcm06IHZhbHVlID0+ICh7XG4gICAgICAnQG1lZGlhIHByaW50Jzoge1xuICAgICAgICBkaXNwbGF5OiB2YWx1ZVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG4gIGRpc3BsYXk6IHt9LFxuICBvdmVyZmxvdzoge30sXG4gIHRleHRPdmVyZmxvdzoge30sXG4gIHZpc2liaWxpdHk6IHt9LFxuICB3aGl0ZVNwYWNlOiB7fSxcbiAgLy8gZmxleGJveFxuICBmbGV4QmFzaXM6IHt9LFxuICBmbGV4RGlyZWN0aW9uOiB7fSxcbiAgZmxleFdyYXA6IHt9LFxuICBqdXN0aWZ5Q29udGVudDoge30sXG4gIGFsaWduSXRlbXM6IHt9LFxuICBhbGlnbkNvbnRlbnQ6IHt9LFxuICBvcmRlcjoge30sXG4gIGZsZXg6IHt9LFxuICBmbGV4R3Jvdzoge30sXG4gIGZsZXhTaHJpbms6IHt9LFxuICBhbGlnblNlbGY6IHt9LFxuICBqdXN0aWZ5SXRlbXM6IHt9LFxuICBqdXN0aWZ5U2VsZjoge30sXG4gIC8vIGdyaWRcbiAgZ2FwOiB7XG4gICAgc3R5bGU6IF9jc3NHcmlkLmdhcFxuICB9LFxuICByb3dHYXA6IHtcbiAgICBzdHlsZTogX2Nzc0dyaWQucm93R2FwXG4gIH0sXG4gIGNvbHVtbkdhcDoge1xuICAgIHN0eWxlOiBfY3NzR3JpZC5jb2x1bW5HYXBcbiAgfSxcbiAgZ3JpZENvbHVtbjoge30sXG4gIGdyaWRSb3c6IHt9LFxuICBncmlkQXV0b0Zsb3c6IHt9LFxuICBncmlkQXV0b0NvbHVtbnM6IHt9LFxuICBncmlkQXV0b1Jvd3M6IHt9LFxuICBncmlkVGVtcGxhdGVDb2x1bW5zOiB7fSxcbiAgZ3JpZFRlbXBsYXRlUm93czoge30sXG4gIGdyaWRUZW1wbGF0ZUFyZWFzOiB7fSxcbiAgZ3JpZEFyZWE6IHt9LFxuICAvLyBwb3NpdGlvbnNcbiAgcG9zaXRpb246IHt9LFxuICB6SW5kZXg6IHtcbiAgICB0aGVtZUtleTogJ3pJbmRleCdcbiAgfSxcbiAgdG9wOiB7fSxcbiAgcmlnaHQ6IHt9LFxuICBib3R0b206IHt9LFxuICBsZWZ0OiB7fSxcbiAgLy8gc2hhZG93c1xuICBib3hTaGFkb3c6IHtcbiAgICB0aGVtZUtleTogJ3NoYWRvd3MnXG4gIH0sXG4gIC8vIHNpemluZ1xuICB3aWR0aDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWF4V2lkdGg6IHtcbiAgICBzdHlsZTogX3NpemluZy5tYXhXaWR0aFxuICB9LFxuICBtaW5XaWR0aDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgaGVpZ2h0OiB7XG4gICAgdHJhbnNmb3JtOiBfc2l6aW5nLnNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtYXhIZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IF9zaXppbmcuc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1pbkhlaWdodDoge1xuICAgIHRyYW5zZm9ybTogX3NpemluZy5zaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgYm94U2l6aW5nOiB7fSxcbiAgLy8gdHlwb2dyYXBoeVxuICBmb250RmFtaWx5OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250U2l6ZToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFN0eWxlOiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250V2VpZ2h0OiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBsZXR0ZXJTcGFjaW5nOiB7fSxcbiAgdGV4dFRyYW5zZm9ybToge30sXG4gIGxpbmVIZWlnaHQ6IHt9LFxuICB0ZXh0QWxpZ246IHt9LFxuICB0eXBvZ3JhcGh5OiB7XG4gICAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfVxufTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGRlZmF1bHRTeENvbmZpZzsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMudW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4O1xudmFyIF9jYXBpdGFsaXplID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9jYXBpdGFsaXplXCIpKTtcbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9tZXJnZVwiKSk7XG52YXIgX3N0eWxlID0gcmVxdWlyZShcIi4uL3N0eWxlXCIpO1xudmFyIF9icmVha3BvaW50cyA9IHJlcXVpcmUoXCIuLi9icmVha3BvaW50c1wiKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kZWZhdWx0U3hDb25maWdcIikpO1xuZnVuY3Rpb24gb2JqZWN0c0hhdmVTYW1lS2V5cyguLi5vYmplY3RzKSB7XG4gIGNvbnN0IGFsbEtleXMgPSBvYmplY3RzLnJlZHVjZSgoa2V5cywgb2JqZWN0KSA9PiBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpKSwgW10pO1xuICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoYWxsS2V5cyk7XG4gIHJldHVybiBvYmplY3RzLmV2ZXJ5KG9iamVjdCA9PiB1bmlvbi5zaXplID09PSBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBjYWxsSWZGbihtYXliZUZuLCBhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nID8gbWF5YmVGbihhcmcpIDogbWF5YmVGbjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZnVuY3Rpb24gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCkge1xuICBmdW5jdGlvbiBnZXRUaGVtZVZhbHVlKHByb3AsIHZhbCwgdGhlbWUsIGNvbmZpZykge1xuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgW3Byb3BdOiB2YWwsXG4gICAgICB0aGVtZVxuICAgIH07XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbmZpZ1twcm9wXTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICBjc3NQcm9wZXJ0eSA9IHByb3AsXG4gICAgICB0aGVtZUtleSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHN0eWxlXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPIHY2OiByZW1vdmUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzgxMjNcbiAgICBpZiAodGhlbWVLZXkgPT09ICd0eXBvZ3JhcGh5JyAmJiB2YWwgPT09ICdpbmhlcml0Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW3Byb3BdOiB2YWxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHRoZW1lTWFwcGluZyA9ICgwLCBfc3R5bGUuZ2V0UGF0aCkodGhlbWUsIHRoZW1lS2V5KSB8fCB7fTtcbiAgICBpZiAoc3R5bGUpIHtcbiAgICAgIHJldHVybiBzdHlsZShwcm9wcyk7XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9ICgwLCBfc3R5bGUuZ2V0U3R5bGVWYWx1ZSkodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gKDAsIF9zdHlsZS5nZXRTdHlsZVZhbHVlKSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6ICgwLCBfY2FwaXRhbGl6ZS5kZWZhdWx0KShwcm9wVmFsdWVGaW5hbCl9YCwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgfVxuICAgICAgaWYgKGNzc1Byb3BlcnR5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbY3NzUHJvcGVydHldOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKShwcm9wcywgdmFsLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIGZ1bmN0aW9uIHN0eWxlRnVuY3Rpb25TeChwcm9wcykge1xuICAgIHZhciBfdGhlbWUkdW5zdGFibGVfc3hDb247XG4gICAgY29uc3Qge1xuICAgICAgc3gsXG4gICAgICB0aGVtZSA9IHt9XG4gICAgfSA9IHByb3BzIHx8IHt9O1xuICAgIGlmICghc3gpIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBFbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMgd2lsbCBuZWdsZWN0IG51bGxcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gKF90aGVtZSR1bnN0YWJsZV9zeENvbiA9IHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3RoZW1lJHVuc3RhYmxlX3N4Q29uIDogX2RlZmF1bHRTeENvbmZpZy5kZWZhdWx0O1xuXG4gICAgLypcbiAgICAgKiBSZWNlaXZlIGBzeElucHV0YCBhcyBvYmplY3Qgb3IgY2FsbGJhY2tcbiAgICAgKiBhbmQgdGhlbiByZWN1cnNpdmVseSBjaGVjayBrZXlzICYgdmFsdWVzIHRvIGNyZWF0ZSBtZWRpYSBxdWVyeSBvYmplY3Qgc3R5bGVzLlxuICAgICAqICh0aGUgcmVzdWx0IHdpbGwgYmUgdXNlZCBpbiBgc3R5bGVkYClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmF2ZXJzZShzeElucHV0KSB7XG4gICAgICBsZXQgc3hPYmplY3QgPSBzeElucHV0O1xuICAgICAgaWYgKHR5cGVvZiBzeElucHV0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHN4T2JqZWN0ID0gc3hJbnB1dCh0aGVtZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzeElucHV0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyB2YWx1ZVxuICAgICAgICByZXR1cm4gc3hJbnB1dDtcbiAgICAgIH1cbiAgICAgIGlmICghc3hPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBlbXB0eUJyZWFrcG9pbnRzID0gKDAsIF9icmVha3BvaW50cy5jcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QpKHRoZW1lLmJyZWFrcG9pbnRzKTtcbiAgICAgIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpO1xuICAgICAgbGV0IGNzcyA9IGVtcHR5QnJlYWtwb2ludHM7XG4gICAgICBPYmplY3Qua2V5cyhzeE9iamVjdCkuZm9yRWFjaChzdHlsZUtleSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2FsbElmRm4oc3hPYmplY3Rbc3R5bGVLZXldLCB0aGVtZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChjb25maWdbc3R5bGVLZXldKSB7XG4gICAgICAgICAgICAgIGNzcyA9ICgwLCBfbWVyZ2UuZGVmYXVsdCkoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludHNWYWx1ZXMgPSAoMCwgX2JyZWFrcG9pbnRzLmhhbmRsZUJyZWFrcG9pbnRzKSh7XG4gICAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgICAgfSwgdmFsdWUsIHggPT4gKHtcbiAgICAgICAgICAgICAgICBbc3R5bGVLZXldOiB4XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgaWYgKG9iamVjdHNIYXZlU2FtZUtleXMoYnJlYWtwb2ludHNWYWx1ZXMsIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNzc1tzdHlsZUtleV0gPSBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgICAgICAgICAgICAgc3g6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjc3MgPSAoMCwgX21lcmdlLmRlZmF1bHQpKGNzcywgYnJlYWtwb2ludHNWYWx1ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNzcyA9ICgwLCBfbWVyZ2UuZGVmYXVsdCkoY3NzLCBnZXRUaGVtZVZhbHVlKHN0eWxlS2V5LCB2YWx1ZSwgdGhlbWUsIGNvbmZpZykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKDAsIF9icmVha3BvaW50cy5yZW1vdmVVbnVzZWRCcmVha3BvaW50cykoYnJlYWtwb2ludHNLZXlzLCBjc3MpO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShzeCkgPyBzeC5tYXAodHJhdmVyc2UpIDogdHJhdmVyc2Uoc3gpO1xuICB9XG4gIHJldHVybiBzdHlsZUZ1bmN0aW9uU3g7XG59XG5jb25zdCBzdHlsZUZ1bmN0aW9uU3ggPSB1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3goKTtcbnN0eWxlRnVuY3Rpb25TeC5maWx0ZXJQcm9wcyA9IFsnc3gnXTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHN0eWxlRnVuY3Rpb25TeDsiLCAiZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGV4dGVuZFN4UHJvcDtcbnZhciBfZXh0ZW5kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIikpO1xudmFyIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiKSk7XG52YXIgX2RlZXBtZXJnZSA9IHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kZWZhdWx0U3hDb25maWdcIikpO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wic3hcIl07XG5jb25zdCBzcGxpdFByb3BzID0gcHJvcHMgPT4ge1xuICB2YXIgX3Byb3BzJHRoZW1lJHVuc3RhYmxlLCBfcHJvcHMkdGhlbWU7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBzeXN0ZW1Qcm9wczoge30sXG4gICAgb3RoZXJQcm9wczoge31cbiAgfTtcbiAgY29uc3QgY29uZmlnID0gKF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA9IHByb3BzID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IHByb3BzLnRoZW1lKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnKSAhPSBudWxsID8gX3Byb3BzJHRoZW1lJHVuc3RhYmxlIDogX2RlZmF1bHRTeENvbmZpZy5kZWZhdWx0O1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICBpZiAoY29uZmlnW3Byb3BdKSB7XG4gICAgICByZXN1bHQuc3lzdGVtUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0Lm90aGVyUHJvcHNbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbmZ1bmN0aW9uIGV4dGVuZFN4UHJvcChwcm9wcykge1xuICBjb25zdCB7XG4gICAgICBzeDogaW5TeFxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHtcbiAgICBzeXN0ZW1Qcm9wcyxcbiAgICBvdGhlclByb3BzXG4gIH0gPSBzcGxpdFByb3BzKG90aGVyKTtcbiAgbGV0IGZpbmFsU3g7XG4gIGlmIChBcnJheS5pc0FycmF5KGluU3gpKSB7XG4gICAgZmluYWxTeCA9IFtzeXN0ZW1Qcm9wcywgLi4uaW5TeF07XG4gIH0gZWxzZSBpZiAodHlwZW9mIGluU3ggPT09ICdmdW5jdGlvbicpIHtcbiAgICBmaW5hbFN4ID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGluU3goLi4uYXJncyk7XG4gICAgICBpZiAoISgwLCBfZGVlcG1lcmdlLmlzUGxhaW5PYmplY3QpKHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHN5c3RlbVByb3BzO1xuICAgICAgfVxuICAgICAgcmV0dXJuICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHN5c3RlbVByb3BzLCByZXN1bHQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZmluYWxTeCA9ICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHN5c3RlbVByb3BzLCBpblN4KTtcbiAgfVxuICByZXR1cm4gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgb3RoZXJQcm9wcywge1xuICAgIHN4OiBmaW5hbFN4XG4gIH0pO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfc3R5bGVGdW5jdGlvblN4LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXh0ZW5kU3hQcm9wXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9leHRlbmRTeFByb3AuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3hcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3N0eWxlRnVuY3Rpb25TeC51bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kZWZhdWx0U3hDb25maWcuZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX3N0eWxlRnVuY3Rpb25TeCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL3N0eWxlRnVuY3Rpb25TeFwiKSk7XG52YXIgX2V4dGVuZFN4UHJvcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZXh0ZW5kU3hQcm9wXCIpKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kZWZhdWx0U3hDb25maWdcIikpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJyZWFrcG9pbnRLZXlzID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0ID0gY3JlYXRlQnJlYWtwb2ludHM7XG52YXIgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpKTtcbnZhciBfZXh0ZW5kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIikpO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1widmFsdWVzXCIsIFwidW5pdFwiLCBcInN0ZXBcIl07XG4vLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4vLyBJdCBjYW4ndCBiZSBjb25maWd1cmVkIGFzIGl0J3MgdXNlZCBzdGF0aWNhbGx5IGZvciBwcm9wVHlwZXMuXG5jb25zdCBicmVha3BvaW50S2V5cyA9IGV4cG9ydHMuYnJlYWtwb2ludEtleXMgPSBbJ3hzJywgJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ107XG5jb25zdCBzb3J0QnJlYWtwb2ludHNWYWx1ZXMgPSB2YWx1ZXMgPT4ge1xuICBjb25zdCBicmVha3BvaW50c0FzQXJyYXkgPSBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcChrZXkgPT4gKHtcbiAgICBrZXksXG4gICAgdmFsOiB2YWx1ZXNba2V5XVxuICB9KSkgfHwgW107XG4gIC8vIFNvcnQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gIGJyZWFrcG9pbnRzQXNBcnJheS5zb3J0KChicmVha3BvaW50MSwgYnJlYWtwb2ludDIpID0+IGJyZWFrcG9pbnQxLnZhbCAtIGJyZWFrcG9pbnQyLnZhbCk7XG4gIHJldHVybiBicmVha3BvaW50c0FzQXJyYXkucmVkdWNlKChhY2MsIG9iaikgPT4ge1xuICAgIHJldHVybiAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBhY2MsIHtcbiAgICAgIFtvYmoua2V5XTogb2JqLnZhbFxuICAgIH0pO1xuICB9LCB7fSk7XG59O1xuXG4vLyBLZWVwIGluIG1pbmQgdGhhdCBAbWVkaWEgaXMgaW5jbHVzaXZlIGJ5IHRoZSBDU1Mgc3BlY2lmaWNhdGlvbi5cbmZ1bmN0aW9uIGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzKSB7XG4gIGNvbnN0IHtcbiAgICAgIC8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuICAgICAgLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc20pLlxuICAgICAgdmFsdWVzID0ge1xuICAgICAgICB4czogMCxcbiAgICAgICAgLy8gcGhvbmVcbiAgICAgICAgc206IDYwMCxcbiAgICAgICAgLy8gdGFibGV0XG4gICAgICAgIG1kOiA5MDAsXG4gICAgICAgIC8vIHNtYWxsIGxhcHRvcFxuICAgICAgICBsZzogMTIwMCxcbiAgICAgICAgLy8gZGVza3RvcFxuICAgICAgICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbiAgICAgIH0sXG4gICAgICB1bml0ID0gJ3B4JyxcbiAgICAgIHN0ZXAgPSA1XG4gICAgfSA9IGJyZWFrcG9pbnRzLFxuICAgIG90aGVyID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShicmVha3BvaW50cywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgc29ydGVkVmFsdWVzID0gc29ydEJyZWFrcG9pbnRzVmFsdWVzKHZhbHVlcyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzb3J0ZWRWYWx1ZXMpO1xuICBmdW5jdGlvbiB1cChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5XSA6IGtleTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWV9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIGRvd24oa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1heC13aWR0aDoke3ZhbHVlIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gYmV0d2VlbihzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgZW5kSW5kZXggPSBrZXlzLmluZGV4T2YoZW5kKTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dHlwZW9mIHZhbHVlc1tzdGFydF0gPT09ICdudW1iZXInID8gdmFsdWVzW3N0YXJ0XSA6IHN0YXJ0fSR7dW5pdH0pIGFuZCBgICsgYChtYXgtd2lkdGg6JHsoZW5kSW5kZXggIT09IC0xICYmIHR5cGVvZiB2YWx1ZXNba2V5c1tlbmRJbmRleF1dID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXlzW2VuZEluZGV4XV0gOiBlbmQpIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gb25seShrZXkpIHtcbiAgICBpZiAoa2V5cy5pbmRleE9mKGtleSkgKyAxIDwga2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKTtcbiAgICB9XG4gICAgcmV0dXJuIHVwKGtleSk7XG4gIH1cbiAgZnVuY3Rpb24gbm90KGtleSkge1xuICAgIC8vIGhhbmRsZSBmaXJzdCBhbmQgbGFzdCBrZXkgc2VwYXJhdGVseSwgZm9yIGJldHRlciByZWFkYWJpbGl0eVxuICAgIGNvbnN0IGtleUluZGV4ID0ga2V5cy5pbmRleE9mKGtleSk7XG4gICAgaWYgKGtleUluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdXAoa2V5c1sxXSk7XG4gICAgfVxuICAgIGlmIChrZXlJbmRleCA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gZG93bihrZXlzW2tleUluZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKS5yZXBsYWNlKCdAbWVkaWEnLCAnQG1lZGlhIG5vdCBhbGwgYW5kJyk7XG4gIH1cbiAgcmV0dXJuICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgIGtleXMsXG4gICAgdmFsdWVzOiBzb3J0ZWRWYWx1ZXMsXG4gICAgdXAsXG4gICAgZG93bixcbiAgICBiZXR3ZWVuLFxuICAgIG9ubHksXG4gICAgbm90LFxuICAgIHVuaXRcbiAgfSwgb3RoZXIpO1xufSIsICJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmNvbnN0IHNoYXBlID0ge1xuICBib3JkZXJSYWRpdXM6IDRcbn07XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBzaGFwZTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVTcGFjaW5nO1xudmFyIF9zcGFjaW5nID0gcmVxdWlyZShcIi4uL3NwYWNpbmdcIik7XG4vLyBUaGUgZGlmZmVyZW50IHNpZ25hdHVyZXMgaW1wbHkgZGlmZmVyZW50IG1lYW5pbmcgZm9yIHRoZWlyIGFyZ3VtZW50cyB0aGF0IGNhbid0IGJlIGV4cHJlc3NlZCBzdHJ1Y3R1cmFsbHkuXG4vLyBXZSBleHByZXNzIHRoZSBkaWZmZXJlbmNlIHdpdGggdmFyaWFibGUgbmFtZXMuXG5cbmZ1bmN0aW9uIGNyZWF0ZVNwYWNpbmcoc3BhY2luZ0lucHV0ID0gOCkge1xuICAvLyBBbHJlYWR5IHRyYW5zZm9ybWVkLlxuICBpZiAoc3BhY2luZ0lucHV0Lm11aSkge1xuICAgIHJldHVybiBzcGFjaW5nSW5wdXQ7XG4gIH1cblxuICAvLyBNYXRlcmlhbCBEZXNpZ24gbGF5b3V0cyBhcmUgdmlzdWFsbHkgYmFsYW5jZWQuIE1vc3QgbWVhc3VyZW1lbnRzIGFsaWduIHRvIGFuIDhkcCBncmlkLCB3aGljaCBhbGlnbnMgYm90aCBzcGFjaW5nIGFuZCB0aGUgb3ZlcmFsbCBsYXlvdXQuXG4gIC8vIFNtYWxsZXIgY29tcG9uZW50cywgc3VjaCBhcyBpY29ucywgY2FuIGFsaWduIHRvIGEgNGRwIGdyaWQuXG4gIC8vIGh0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL2xheW91dC91bmRlcnN0YW5kaW5nLWxheW91dC5odG1sXG4gIGNvbnN0IHRyYW5zZm9ybSA9ICgwLCBfc3BhY2luZy5jcmVhdGVVbmFyeVNwYWNpbmcpKHtcbiAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXRcbiAgfSk7XG4gIGNvbnN0IHNwYWNpbmcgPSAoLi4uYXJnc0lucHV0KSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghKGFyZ3NJbnB1dC5sZW5ndGggPD0gNCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUb28gbWFueSBhcmd1bWVudHMgcHJvdmlkZWQsIGV4cGVjdGVkIGJldHdlZW4gMCBhbmQgNCwgZ290ICR7YXJnc0lucHV0Lmxlbmd0aH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYXJncyA9IGFyZ3NJbnB1dC5sZW5ndGggPT09IDAgPyBbMV0gOiBhcmdzSW5wdXQ7XG4gICAgcmV0dXJuIGFyZ3MubWFwKGFyZ3VtZW50ID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHRyYW5zZm9ybShhcmd1bWVudCk7XG4gICAgICByZXR1cm4gdHlwZW9mIG91dHB1dCA9PT0gJ251bWJlcicgPyBgJHtvdXRwdXR9cHhgIDogb3V0cHV0O1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfTtcbiAgc3BhY2luZy5tdWkgPSB0cnVlO1xuICByZXR1cm4gc3BhY2luZztcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBhcHBseVN0eWxlcztcbi8qKlxuICogQSB1bml2ZXJzYWwgdXRpbGl0eSB0byBzdHlsZSBjb21wb25lbnRzIHdpdGggbXVsdGlwbGUgY29sb3IgbW9kZXMuIEFsd2F5cyB1c2UgaXQgZnJvbSB0aGUgdGhlbWUgb2JqZWN0LlxuICogSXQgd29ya3Mgd2l0aDpcbiAqICAtIFtCYXNpYyB0aGVtZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vZGFyay1tb2RlLylcbiAqICAtIFtDU1MgdGhlbWUgdmFyaWFibGVzXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvZXhwZXJpbWVudGFsLWFwaS9jc3MtdGhlbWUtdmFyaWFibGVzL292ZXJ2aWV3LylcbiAqICAtIFplcm8tcnVudGltZSBlbmdpbmVcbiAqXG4gKiBUaXBzOiBVc2UgYW4gYXJyYXkgb3ZlciBvYmplY3Qgc3ByZWFkIGFuZCBwbGFjZSBgdGhlbWUuYXBwbHlTdHlsZXMoKWAgbGFzdC5cbiAqXG4gKiBcdTI3MDUgW3sgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywgeyBiYWNrZ3JvdW5kOiAnIzFjMWMxYycgfSldXG4gKlxuICogXHVEODNEXHVERUFCIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnLCAuLi50aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pfVxuICpcbiAqIEBleGFtcGxlXG4gKiAxLiB1c2luZyB3aXRoIGBzdHlsZWRgOlxuICogYGBganN4XG4gKiAgIGNvbnN0IENvbXBvbmVudCA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gW1xuICogICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgIH0pLFxuICogICBdKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAyLiB1c2luZyB3aXRoIGBzeGAgcHJvcDpcbiAqIGBgYGpzeFxuICogICA8Qm94IHN4PXt0aGVtZSA9PiBbXG4gKiAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgfSksXG4gKiAgICAgXX1cbiAqICAgLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAzLiB0aGVtaW5nIGEgY29tcG9uZW50OlxuICogYGBganN4XG4gKiAgIGV4dGVuZFRoZW1lKHtcbiAqICAgICBjb21wb25lbnRzOiB7XG4gKiAgICAgICBNdWlCdXR0b246IHtcbiAqICAgICAgICAgc3R5bGVPdmVycmlkZXM6IHtcbiAqICAgICAgICAgICByb290OiAoeyB0aGVtZSB9KSA9PiBbXG4gKiAgICAgICAgICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgICAgICAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgICAgICAgIH0pLFxuICogICAgICAgICAgIF0sXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogICB9KVxuICpgYGBcbiAqL1xuZnVuY3Rpb24gYXBwbHlTdHlsZXMoa2V5LCBzdHlsZXMpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzICdhbnknIHR5cGVcbiAgY29uc3QgdGhlbWUgPSB0aGlzO1xuICBpZiAodGhlbWUudmFycyAmJiB0eXBlb2YgdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIENzc1ZhcnNQcm92aWRlciBpcyB1c2VkIGFzIGEgcHJvdmlkZXIsXG4gICAgLy8gcmV0dXJucyAnKiA6d2hlcmUoW2RhdGEtbXVpLWNvbG9yLXNjaGVtZT1cImxpZ2h0fGRhcmtcIl0pICYnXG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKGtleSkucmVwbGFjZSgvKFxcW1teXFxdXStcXF0pLywgJyo6d2hlcmUoJDEpJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtzZWxlY3Rvcl06IHN0eWxlc1xuICAgIH07XG4gIH1cbiAgaWYgKHRoZW1lLnBhbGV0dGUubW9kZSA9PT0ga2V5KSB7XG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxuICByZXR1cm4ge307XG59IiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2V4dGVuZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpKTtcbnZhciBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIikpO1xudmFyIF9kZWVwbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKSk7XG52YXIgX2NyZWF0ZUJyZWFrcG9pbnRzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVCcmVha3BvaW50c1wiKSk7XG52YXIgX3NoYXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zaGFwZVwiKSk7XG52YXIgX2NyZWF0ZVNwYWNpbmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZVNwYWNpbmdcIikpO1xudmFyIF9zdHlsZUZ1bmN0aW9uU3ggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9zdHlsZUZ1bmN0aW9uU3gvc3R5bGVGdW5jdGlvblN4XCIpKTtcbnZhciBfZGVmYXVsdFN4Q29uZmlnID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZ1wiKSk7XG52YXIgX2FwcGx5U3R5bGVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hcHBseVN0eWxlc1wiKSk7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcInBhbGV0dGVcIiwgXCJzcGFjaW5nXCIsIFwic2hhcGVcIl07XG5mdW5jdGlvbiBjcmVhdGVUaGVtZShvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgY29uc3Qge1xuICAgICAgYnJlYWtwb2ludHM6IGJyZWFrcG9pbnRzSW5wdXQgPSB7fSxcbiAgICAgIHBhbGV0dGU6IHBhbGV0dGVJbnB1dCA9IHt9LFxuICAgICAgc3BhY2luZzogc3BhY2luZ0lucHV0LFxuICAgICAgc2hhcGU6IHNoYXBlSW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICBjb25zdCBicmVha3BvaW50cyA9ICgwLCBfY3JlYXRlQnJlYWtwb2ludHMuZGVmYXVsdCkoYnJlYWtwb2ludHNJbnB1dCk7XG4gIGNvbnN0IHNwYWNpbmcgPSAoMCwgX2NyZWF0ZVNwYWNpbmcuZGVmYXVsdCkoc3BhY2luZ0lucHV0KTtcbiAgbGV0IG11aVRoZW1lID0gKDAsIF9kZWVwbWVyZ2UuZGVmYXVsdCkoe1xuICAgIGJyZWFrcG9pbnRzLFxuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgLy8gSW5qZWN0IGNvbXBvbmVudCBkZWZpbml0aW9ucy5cbiAgICBwYWxldHRlOiAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIG1vZGU6ICdsaWdodCdcbiAgICB9LCBwYWxldHRlSW5wdXQpLFxuICAgIHNwYWNpbmcsXG4gICAgc2hhcGU6ICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIF9zaGFwZS5kZWZhdWx0LCBzaGFwZUlucHV0KVxuICB9LCBvdGhlcik7XG4gIG11aVRoZW1lLmFwcGx5U3R5bGVzID0gX2FwcGx5U3R5bGVzLmRlZmF1bHQ7XG4gIG11aVRoZW1lID0gYXJncy5yZWR1Y2UoKGFjYywgYXJndW1lbnQpID0+ICgwLCBfZGVlcG1lcmdlLmRlZmF1bHQpKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnID0gKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgX2RlZmF1bHRTeENvbmZpZy5kZWZhdWx0LCBvdGhlciA9PSBudWxsID8gdm9pZCAwIDogb3RoZXIudW5zdGFibGVfc3hDb25maWcpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeCA9IGZ1bmN0aW9uIHN4KHByb3BzKSB7XG4gICAgcmV0dXJuICgwLCBfc3R5bGVGdW5jdGlvblN4LmRlZmF1bHQpKHtcbiAgICAgIHN4OiBwcm9wcyxcbiAgICAgIHRoZW1lOiB0aGlzXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBtdWlUaGVtZTtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVRoZW1lOyIsICJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfY3JlYXRlVGhlbWUuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcml2YXRlX2NyZWF0ZUJyZWFrcG9pbnRzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9jcmVhdGVCcmVha3BvaW50cy5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuc3RhYmxlX2FwcGx5U3R5bGVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcHBseVN0eWxlcy5kZWZhdWx0O1xuICB9XG59KTtcbnZhciBfY3JlYXRlVGhlbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZVRoZW1lXCIpKTtcbnZhciBfY3JlYXRlQnJlYWtwb2ludHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NyZWF0ZUJyZWFrcG9pbnRzXCIpKTtcbnZhciBfYXBwbHlTdHlsZXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FwcGx5U3R5bGVzXCIpKTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWxwaGEgPSBhbHBoYTtcbmV4cG9ydHMuYmxlbmQgPSBibGVuZDtcbmV4cG9ydHMuY29sb3JDaGFubmVsID0gdm9pZCAwO1xuZXhwb3J0cy5kYXJrZW4gPSBkYXJrZW47XG5leHBvcnRzLmRlY29tcG9zZUNvbG9yID0gZGVjb21wb3NlQ29sb3I7XG5leHBvcnRzLmVtcGhhc2l6ZSA9IGVtcGhhc2l6ZTtcbmV4cG9ydHMuZ2V0Q29udHJhc3RSYXRpbyA9IGdldENvbnRyYXN0UmF0aW87XG5leHBvcnRzLmdldEx1bWluYW5jZSA9IGdldEx1bWluYW5jZTtcbmV4cG9ydHMuaGV4VG9SZ2IgPSBoZXhUb1JnYjtcbmV4cG9ydHMuaHNsVG9SZ2IgPSBoc2xUb1JnYjtcbmV4cG9ydHMubGlnaHRlbiA9IGxpZ2h0ZW47XG5leHBvcnRzLnByaXZhdGVfc2FmZUFscGhhID0gcHJpdmF0ZV9zYWZlQWxwaGE7XG5leHBvcnRzLnByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IHZvaWQgMDtcbmV4cG9ydHMucHJpdmF0ZV9zYWZlRGFya2VuID0gcHJpdmF0ZV9zYWZlRGFya2VuO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVFbXBoYXNpemUgPSBwcml2YXRlX3NhZmVFbXBoYXNpemU7XG5leHBvcnRzLnByaXZhdGVfc2FmZUxpZ2h0ZW4gPSBwcml2YXRlX3NhZmVMaWdodGVuO1xuZXhwb3J0cy5yZWNvbXBvc2VDb2xvciA9IHJlY29tcG9zZUNvbG9yO1xuZXhwb3J0cy5yZ2JUb0hleCA9IHJnYlRvSGV4O1xudmFyIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIikpO1xudmFyIF9jbGFtcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2xhbXBcIikpO1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5cbi8qKlxuICogUmV0dXJucyBhIG51bWJlciB3aG9zZSB2YWx1ZSBpcyBsaW1pdGVkIHRvIHRoZSBnaXZlbiByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgY2xhbXBlZFxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiBUaGUgbG93ZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHBhcmFtIHtudW1iZXJ9IG1heCBUaGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIG91dHB1dCByYW5nZVxuICogQHJldHVybnMge251bWJlcn0gQSBudW1iZXIgaW4gdGhlIHJhbmdlIFttaW4sIG1heF1cbiAqL1xuZnVuY3Rpb24gY2xhbXBXcmFwcGVyKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRoZSB2YWx1ZSBwcm92aWRlZCAke3ZhbHVlfSBpcyBvdXQgb2YgcmFuZ2UgWyR7bWlufSwgJHttYXh9XS5gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICgwLCBfY2xhbXAuZGVmYXVsdCkodmFsdWUsIG1pbiwgbWF4KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIGZyb20gQ1NTIGhleCBmb3JtYXQgdG8gQ1NTIHJnYiBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBIZXggY29sb3IsIGkuZS4gI25ubiBvciAjbm5ubm5uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyByZ2IgY29sb3Igc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGhleFRvUmdiKGNvbG9yKSB7XG4gIGNvbG9yID0gY29sb3Iuc2xpY2UoMSk7XG4gIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgLnsxLCR7Y29sb3IubGVuZ3RoID49IDYgPyAyIDogMX19YCwgJ2cnKTtcbiAgbGV0IGNvbG9ycyA9IGNvbG9yLm1hdGNoKHJlKTtcbiAgaWYgKGNvbG9ycyAmJiBjb2xvcnNbMF0ubGVuZ3RoID09PSAxKSB7XG4gICAgY29sb3JzID0gY29sb3JzLm1hcChuID0+IG4gKyBuKTtcbiAgfVxuICByZXR1cm4gY29sb3JzID8gYHJnYiR7Y29sb3JzLmxlbmd0aCA9PT0gNCA/ICdhJyA6ICcnfSgke2NvbG9ycy5tYXAoKG4sIGluZGV4KSA9PiB7XG4gICAgcmV0dXJuIGluZGV4IDwgMyA/IHBhcnNlSW50KG4sIDE2KSA6IE1hdGgucm91bmQocGFyc2VJbnQobiwgMTYpIC8gMjU1ICogMTAwMCkgLyAxMDAwO1xuICB9KS5qb2luKCcsICcpfSlgIDogJyc7XG59XG5mdW5jdGlvbiBpbnRUb0hleChpbnQpIHtcbiAgY29uc3QgaGV4ID0gaW50LnRvU3RyaW5nKDE2KTtcbiAgcmV0dXJuIGhleC5sZW5ndGggPT09IDEgPyBgMCR7aGV4fWAgOiBoZXg7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgdHlwZSBhbmQgdmFsdWVzIG9mIGEgY29sb3IuXG4gKlxuICogTm90ZTogRG9lcyBub3Qgc3VwcG9ydCByZ2IgJSB2YWx1ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIEEgTVVJIGNvbG9yIG9iamVjdDoge3R5cGU6IHN0cmluZywgdmFsdWVzOiBudW1iZXJbXX1cbiAqL1xuZnVuY3Rpb24gZGVjb21wb3NlQ29sb3IoY29sb3IpIHtcbiAgLy8gSWRlbXBvdGVudFxuICBpZiAoY29sb3IudHlwZSkge1xuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuICBpZiAoY29sb3IuY2hhckF0KDApID09PSAnIycpIHtcbiAgICByZXR1cm4gZGVjb21wb3NlQ29sb3IoaGV4VG9SZ2IoY29sb3IpKTtcbiAgfVxuICBjb25zdCBtYXJrZXIgPSBjb2xvci5pbmRleE9mKCcoJyk7XG4gIGNvbnN0IHR5cGUgPSBjb2xvci5zdWJzdHJpbmcoMCwgbWFya2VyKTtcbiAgaWYgKFsncmdiJywgJ3JnYmEnLCAnaHNsJywgJ2hzbGEnLCAnY29sb3InXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBVbnN1cHBvcnRlZCBcXGAke2NvbG9yfVxcYCBjb2xvci5cblRoZSBmb2xsb3dpbmcgZm9ybWF0cyBhcmUgc3VwcG9ydGVkOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpLmAgOiAoMCwgX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIuZGVmYXVsdCkoOSwgY29sb3IpKTtcbiAgfVxuICBsZXQgdmFsdWVzID0gY29sb3Iuc3Vic3RyaW5nKG1hcmtlciArIDEsIGNvbG9yLmxlbmd0aCAtIDEpO1xuICBsZXQgY29sb3JTcGFjZTtcbiAgaWYgKHR5cGUgPT09ICdjb2xvcicpIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJyAnKTtcbiAgICBjb2xvclNwYWNlID0gdmFsdWVzLnNoaWZ0KCk7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDQgJiYgdmFsdWVzWzNdLmNoYXJBdCgwKSA9PT0gJy8nKSB7XG4gICAgICB2YWx1ZXNbM10gPSB2YWx1ZXNbM10uc2xpY2UoMSk7XG4gICAgfVxuICAgIGlmIChbJ3NyZ2InLCAnZGlzcGxheS1wMycsICdhOTgtcmdiJywgJ3Byb3Bob3RvLXJnYicsICdyZWMtMjAyMCddLmluZGV4T2YoY29sb3JTcGFjZSkgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogdW5zdXBwb3J0ZWQgXFxgJHtjb2xvclNwYWNlfVxcYCBjb2xvciBzcGFjZS5cblRoZSBmb2xsb3dpbmcgY29sb3Igc3BhY2VzIGFyZSBzdXBwb3J0ZWQ6IHNyZ2IsIGRpc3BsYXktcDMsIGE5OC1yZ2IsIHByb3Bob3RvLXJnYiwgcmVjLTIwMjAuYCA6ICgwLCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMi5kZWZhdWx0KSgxMCwgY29sb3JTcGFjZSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMuc3BsaXQoJywnKTtcbiAgfVxuICB2YWx1ZXMgPSB2YWx1ZXMubWFwKHZhbHVlID0+IHBhcnNlRmxvYXQodmFsdWUpKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlLFxuICAgIHZhbHVlcyxcbiAgICBjb2xvclNwYWNlXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNoYW5uZWwgY3JlYXRlZCBmcm9tIHRoZSBpbnB1dCBjb2xvci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBjaGFubmVsIGZvciB0aGUgY29sb3IsIHRoYXQgY2FuIGJlIHVzZWQgaW4gcmdiYSBvciBoc2xhIGNvbG9yc1xuICovXG5jb25zdCBjb2xvckNoYW5uZWwgPSBjb2xvciA9PiB7XG4gIGNvbnN0IGRlY29tcG9zZWRDb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGRlY29tcG9zZWRDb2xvci52YWx1ZXMuc2xpY2UoMCwgMykubWFwKCh2YWwsIGlkeCkgPT4gZGVjb21wb3NlZENvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xICYmIGlkeCAhPT0gMCA/IGAke3ZhbH0lYCA6IHZhbCkuam9pbignICcpO1xufTtcbmV4cG9ydHMuY29sb3JDaGFubmVsID0gY29sb3JDaGFubmVsO1xuY29uc3QgcHJpdmF0ZV9zYWZlQ29sb3JDaGFubmVsID0gKGNvbG9yLCB3YXJuaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbG9yQ2hhbm5lbChjb2xvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBvYmplY3Qgd2l0aCB0eXBlIGFuZCB2YWx1ZXMgdG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0ge29iamVjdH0gY29sb3IgLSBEZWNvbXBvc2VkIGNvbG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IudHlwZSAtIE9uZSBvZjogJ3JnYicsICdyZ2JhJywgJ2hzbCcsICdoc2xhJywgJ2NvbG9yJ1xuICogQHBhcmFtIHthcnJheX0gY29sb3IudmFsdWVzIC0gW24sbixuXSBvciBbbixuLG4sbl1cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZ1xuICovXG5leHBvcnRzLnByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IHByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbDtcbmZ1bmN0aW9uIHJlY29tcG9zZUNvbG9yKGNvbG9yKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIGNvbG9yU3BhY2VcbiAgfSA9IGNvbG9yO1xuICBsZXQge1xuICAgIHZhbHVlc1xuICB9ID0gY29sb3I7XG4gIGlmICh0eXBlLmluZGV4T2YoJ3JnYicpICE9PSAtMSkge1xuICAgIC8vIE9ubHkgY29udmVydCB0aGUgZmlyc3QgMyB2YWx1ZXMgdG8gaW50IChpLmUuIG5vdCBhbHBoYSlcbiAgICB2YWx1ZXMgPSB2YWx1ZXMubWFwKChuLCBpKSA9PiBpIDwgMyA/IHBhcnNlSW50KG4sIDEwKSA6IG4pO1xuICB9IGVsc2UgaWYgKHR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgdmFsdWVzWzFdID0gYCR7dmFsdWVzWzFdfSVgO1xuICAgIHZhbHVlc1syXSA9IGAke3ZhbHVlc1syXX0lYDtcbiAgfVxuICBpZiAodHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIHZhbHVlcyA9IGAke2NvbG9yU3BhY2V9ICR7dmFsdWVzLmpvaW4oJyAnKX1gO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlcyA9IGAke3ZhbHVlcy5qb2luKCcsICcpfWA7XG4gIH1cbiAgcmV0dXJuIGAke3R5cGV9KCR7dmFsdWVzfSlgO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3IgZnJvbSBDU1MgcmdiIGZvcm1hdCB0byBDU1MgaGV4IGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIFJHQiBjb2xvciwgaS5lLiByZ2IobiwgbiwgbilcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIHJnYiBjb2xvciBzdHJpbmcsIGkuZS4gI25ubm5ublxuICovXG5mdW5jdGlvbiByZ2JUb0hleChjb2xvcikge1xuICAvLyBJZGVtcG90ZW50XG4gIGlmIChjb2xvci5pbmRleE9mKCcjJykgPT09IDApIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbiAgY29uc3Qge1xuICAgIHZhbHVlc1xuICB9ID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICByZXR1cm4gYCMke3ZhbHVlcy5tYXAoKG4sIGkpID0+IGludFRvSGV4KGkgPT09IDMgPyBNYXRoLnJvdW5kKDI1NSAqIG4pIDogbikpLmpvaW4oJycpfWA7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBmcm9tIGhzbCBmb3JtYXQgdG8gcmdiIGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIEhTTCBjb2xvciB2YWx1ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHJnYiBjb2xvciB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gaHNsVG9SZ2IoY29sb3IpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvbnN0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGNvbG9yO1xuICBjb25zdCBoID0gdmFsdWVzWzBdO1xuICBjb25zdCBzID0gdmFsdWVzWzFdIC8gMTAwO1xuICBjb25zdCBsID0gdmFsdWVzWzJdIC8gMTAwO1xuICBjb25zdCBhID0gcyAqIE1hdGgubWluKGwsIDEgLSBsKTtcbiAgY29uc3QgZiA9IChuLCBrID0gKG4gKyBoIC8gMzApICUgMTIpID0+IGwgLSBhICogTWF0aC5tYXgoTWF0aC5taW4oayAtIDMsIDkgLSBrLCAxKSwgLTEpO1xuICBsZXQgdHlwZSA9ICdyZ2InO1xuICBjb25zdCByZ2IgPSBbTWF0aC5yb3VuZChmKDApICogMjU1KSwgTWF0aC5yb3VuZChmKDgpICogMjU1KSwgTWF0aC5yb3VuZChmKDQpICogMjU1KV07XG4gIGlmIChjb2xvci50eXBlID09PSAnaHNsYScpIHtcbiAgICB0eXBlICs9ICdhJztcbiAgICByZ2IucHVzaCh2YWx1ZXNbM10pO1xuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcih7XG4gICAgdHlwZSxcbiAgICB2YWx1ZXM6IHJnYlxuICB9KTtcbn1cbi8qKlxuICogVGhlIHJlbGF0aXZlIGJyaWdodG5lc3Mgb2YgYW55IHBvaW50IGluIGEgY29sb3Igc3BhY2UsXG4gKiBub3JtYWxpemVkIHRvIDAgZm9yIGRhcmtlc3QgYmxhY2sgYW5kIDEgZm9yIGxpZ2h0ZXN0IHdoaXRlLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgcmVsYXRpdmUgYnJpZ2h0bmVzcyBvZiB0aGUgY29sb3IgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKi9cbmZ1bmN0aW9uIGdldEx1bWluYW5jZShjb2xvcikge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgbGV0IHJnYiA9IGNvbG9yLnR5cGUgPT09ICdoc2wnIHx8IGNvbG9yLnR5cGUgPT09ICdoc2xhJyA/IGRlY29tcG9zZUNvbG9yKGhzbFRvUmdiKGNvbG9yKSkudmFsdWVzIDogY29sb3IudmFsdWVzO1xuICByZ2IgPSByZ2IubWFwKHZhbCA9PiB7XG4gICAgaWYgKGNvbG9yLnR5cGUgIT09ICdjb2xvcicpIHtcbiAgICAgIHZhbCAvPSAyNTU7IC8vIG5vcm1hbGl6ZWRcbiAgICB9XG4gICAgcmV0dXJuIHZhbCA8PSAwLjAzOTI4ID8gdmFsIC8gMTIuOTIgOiAoKHZhbCArIDAuMDU1KSAvIDEuMDU1KSAqKiAyLjQ7XG4gIH0pO1xuXG4gIC8vIFRydW5jYXRlIGF0IDMgZGlnaXRzXG4gIHJldHVybiBOdW1iZXIoKDAuMjEyNiAqIHJnYlswXSArIDAuNzE1MiAqIHJnYlsxXSArIDAuMDcyMiAqIHJnYlsyXSkudG9GaXhlZCgzKSk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgY29udHJhc3QgcmF0aW8gYmV0d2VlbiB0d28gY29sb3JzLlxuICpcbiAqIEZvcm11bGE6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAtVEVDSFMvRzE3Lmh0bWwjRzE3LXRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9yZWdyb3VuZCAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKClcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYWNrZ3JvdW5kIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKVxuICogQHJldHVybnMge251bWJlcn0gQSBjb250cmFzdCByYXRpbyB2YWx1ZSBpbiB0aGUgcmFuZ2UgMCAtIDIxLlxuICovXG5mdW5jdGlvbiBnZXRDb250cmFzdFJhdGlvKGZvcmVncm91bmQsIGJhY2tncm91bmQpIHtcbiAgY29uc3QgbHVtQSA9IGdldEx1bWluYW5jZShmb3JlZ3JvdW5kKTtcbiAgY29uc3QgbHVtQiA9IGdldEx1bWluYW5jZShiYWNrZ3JvdW5kKTtcbiAgcmV0dXJuIChNYXRoLm1heChsdW1BLCBsdW1CKSArIDAuMDUpIC8gKE1hdGgubWluKGx1bUEsIGx1bUIpICsgMC4wNSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgYWJzb2x1dGUgdHJhbnNwYXJlbmN5IG9mIGEgY29sb3IuXG4gKiBBbnkgZXhpc3RpbmcgYWxwaGEgdmFsdWVzIGFyZSBvdmVyd3JpdHRlbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIHZhbHVlIHRvIHNldCB0aGUgYWxwaGEgY2hhbm5lbCB0byBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cbmZ1bmN0aW9uIGFscGhhKGNvbG9yLCB2YWx1ZSkge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgdmFsdWUgPSBjbGFtcFdyYXBwZXIodmFsdWUpO1xuICBpZiAoY29sb3IudHlwZSA9PT0gJ3JnYicgfHwgY29sb3IudHlwZSA9PT0gJ2hzbCcpIHtcbiAgICBjb2xvci50eXBlICs9ICdhJztcbiAgfVxuICBpZiAoY29sb3IudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IGAvJHt2YWx1ZX1gO1xuICB9IGVsc2Uge1xuICAgIGNvbG9yLnZhbHVlc1szXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcihjb2xvcik7XG59XG5mdW5jdGlvbiBwcml2YXRlX3NhZmVBbHBoYShjb2xvciwgdmFsdWUsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYWxwaGEoY29sb3IsIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIERhcmtlbnMgYSBjb2xvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2VmZmljaWVudCAtIG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5mdW5jdGlvbiBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb2VmZmljaWVudCA9IGNsYW1wV3JhcHBlcihjb2VmZmljaWVudCk7XG4gIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIGNvbG9yLnZhbHVlc1syXSAqPSAxIC0gY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEgfHwgY29sb3IudHlwZS5pbmRleE9mKCdjb2xvcicpICE9PSAtMSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICBjb2xvci52YWx1ZXNbaV0gKj0gMSAtIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlRGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCwgd2FybmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIExpZ2h0ZW5zIGEgY29sb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gY29lZmZpY2llbnQgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGNvZWZmaWNpZW50ID0gY2xhbXBXcmFwcGVyKGNvZWZmaWNpZW50KTtcbiAgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgY29sb3IudmFsdWVzWzJdICs9ICgxMDAgLSBjb2xvci52YWx1ZXNbMl0pICogY29lZmZpY2llbnQ7XG4gIH0gZWxzZSBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgyNTUgLSBjb2xvci52YWx1ZXNbaV0pICogY29lZmZpY2llbnQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICs9ICgxIC0gY29sb3IudmFsdWVzW2ldKSAqIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlTGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbGlnaHRlbihjb2xvciwgY29lZmZpY2llbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59XG5cbi8qKlxuICogRGFya2VuIG9yIGxpZ2h0ZW4gYSBjb2xvciwgZGVwZW5kaW5nIG9uIGl0cyBsdW1pbmFuY2UuXG4gKiBMaWdodCBjb2xvcnMgYXJlIGRhcmtlbmVkLCBkYXJrIGNvbG9ycyBhcmUgbGlnaHRlbmVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZWZmaWNpZW50PTAuMTUgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gZW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCA9IDAuMTUpIHtcbiAgcmV0dXJuIGdldEx1bWluYW5jZShjb2xvcikgPiAwLjUgPyBkYXJrZW4oY29sb3IsIGNvZWZmaWNpZW50KSA6IGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbn1cbmZ1bmN0aW9uIHByaXZhdGVfc2FmZUVtcGhhc2l6ZShjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJpdmF0ZV9zYWZlRW1waGFzaXplKGNvbG9yLCBjb2VmZmljaWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBCbGVuZCBhIHRyYW5zcGFyZW50IG92ZXJsYXkgY29sb3Igd2l0aCBhIGJhY2tncm91bmQgY29sb3IsIHJlc3VsdGluZyBpbiBhIHNpbmdsZVxuICogUkdCIGNvbG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGJhY2tncm91bmQgLSBDU1MgY29sb3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBvdmVybGF5IC0gQ1NTIGNvbG9yXG4gKiBAcGFyYW0ge251bWJlcn0gb3BhY2l0eSAtIE9wYWNpdHkgbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZ2FtbWE9MS4wXSAtIEdhbW1hIGNvcnJlY3Rpb24gZmFjdG9yLiBGb3IgZ2FtbWEtY29ycmVjdCBibGVuZGluZywgMi4yIGlzIHVzdWFsLlxuICovXG5mdW5jdGlvbiBibGVuZChiYWNrZ3JvdW5kLCBvdmVybGF5LCBvcGFjaXR5LCBnYW1tYSA9IDEuMCkge1xuICBjb25zdCBibGVuZENoYW5uZWwgPSAoYiwgbykgPT4gTWF0aC5yb3VuZCgoYiAqKiAoMSAvIGdhbW1hKSAqICgxIC0gb3BhY2l0eSkgKyBvICoqICgxIC8gZ2FtbWEpICogb3BhY2l0eSkgKiogZ2FtbWEpO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBkZWNvbXBvc2VDb2xvcihiYWNrZ3JvdW5kKTtcbiAgY29uc3Qgb3ZlcmxheUNvbG9yID0gZGVjb21wb3NlQ29sb3Iob3ZlcmxheSk7XG4gIGNvbnN0IHJnYiA9IFtibGVuZENoYW5uZWwoYmFja2dyb3VuZENvbG9yLnZhbHVlc1swXSwgb3ZlcmxheUNvbG9yLnZhbHVlc1swXSksIGJsZW5kQ2hhbm5lbChiYWNrZ3JvdW5kQ29sb3IudmFsdWVzWzFdLCBvdmVybGF5Q29sb3IudmFsdWVzWzFdKSwgYmxlbmRDaGFubmVsKGJhY2tncm91bmRDb2xvci52YWx1ZXNbMl0sIG92ZXJsYXlDb2xvci52YWx1ZXNbMl0pXTtcbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKHtcbiAgICB0eXBlOiAncmdiJyxcbiAgICB2YWx1ZXM6IHJnYlxuICB9KTtcbn0iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVN0eWxlZDtcbmV4cG9ydHMuc2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbmV4cG9ydHMuc3lzdGVtRGVmYXVsdFRoZW1lID0gdm9pZCAwO1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG52YXIgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpKTtcbnZhciBfc3R5bGVkRW5naW5lID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIkBtdWkvc3R5bGVkLWVuZ2luZVwiKSk7XG52YXIgX2RlZXBtZXJnZSA9IHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKTtcbnZhciBfY2FwaXRhbGl6ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2FwaXRhbGl6ZVwiKSk7XG52YXIgX2dldERpc3BsYXlOYW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9nZXREaXNwbGF5TmFtZVwiKSk7XG52YXIgX2NyZWF0ZVRoZW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVUaGVtZVwiKSk7XG52YXIgX3N0eWxlRnVuY3Rpb25TeCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVGdW5jdGlvblN4XCIpKTtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm93bmVyU3RhdGVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJ2YXJpYW50c1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcIm5hbWVcIiwgXCJzbG90XCIsIFwic2tpcFZhcmlhbnRzUmVzb2x2ZXJcIiwgXCJza2lwU3hcIiwgXCJvdmVycmlkZXNSZXNvbHZlclwiXTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzI2ZGVkNjEwOWZjZDhjYTk4NzVjYzJjZTQ1NjRmZWU2NzhhM2YzYzUvcGFja2FnZXMvc3R5bGVkL3NyYy91dGlscy5qcyNMNDBcbmZ1bmN0aW9uIGlzU3RyaW5nVGFnKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiZcbiAgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5Njtcbn1cblxuLy8gVXBkYXRlIC9zeXN0ZW0vc3R5bGVkLyNhcGkgaW4gY2FzZSBpZiB0aGlzIGNoYW5nZXNcbmZ1bmN0aW9uIHNob3VsZEZvcndhcmRQcm9wKHByb3ApIHtcbiAgcmV0dXJuIHByb3AgIT09ICdvd25lclN0YXRlJyAmJiBwcm9wICE9PSAndGhlbWUnICYmIHByb3AgIT09ICdzeCcgJiYgcHJvcCAhPT0gJ2FzJztcbn1cbmNvbnN0IHN5c3RlbURlZmF1bHRUaGVtZSA9IGV4cG9ydHMuc3lzdGVtRGVmYXVsdFRoZW1lID0gKDAsIF9jcmVhdGVUaGVtZS5kZWZhdWx0KSgpO1xuY29uc3QgbG93ZXJjYXNlRmlyc3RMZXR0ZXIgPSBzdHJpbmcgPT4ge1xuICBpZiAoIXN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn07XG5mdW5jdGlvbiByZXNvbHZlVGhlbWUoe1xuICBkZWZhdWx0VGhlbWUsXG4gIHRoZW1lLFxuICB0aGVtZUlkXG59KSB7XG4gIHJldHVybiBpc0VtcHR5KHRoZW1lKSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lW3RoZW1lSWRdIHx8IHRoZW1lO1xufVxuZnVuY3Rpb24gZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyKHNsb3QpIHtcbiAgaWYgKCFzbG90KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXNbc2xvdF07XG59XG5mdW5jdGlvbiBwcm9jZXNzU3R5bGVBcmcoY2FsbGFibGVTdHlsZSwgX3JlZikge1xuICBsZXQge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBfcmVmLFxuICAgIHByb3BzID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShfcmVmLCBfZXhjbHVkZWQpO1xuICBjb25zdCByZXNvbHZlZFN0eWxlc0FyZyA9IHR5cGVvZiBjYWxsYWJsZVN0eWxlID09PSAnZnVuY3Rpb24nID8gY2FsbGFibGVTdHlsZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHByb3BzKSkgOiBjYWxsYWJsZVN0eWxlO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZykpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmcuZmxhdE1hcChyZXNvbHZlZFN0eWxlID0+IHByb2Nlc3NTdHlsZUFyZyhyZXNvbHZlZFN0eWxlLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9LCBwcm9wcykpKTtcbiAgfVxuICBpZiAoISFyZXNvbHZlZFN0eWxlc0FyZyAmJiB0eXBlb2YgcmVzb2x2ZWRTdHlsZXNBcmcgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkocmVzb2x2ZWRTdHlsZXNBcmcudmFyaWFudHMpKSB7XG4gICAgY29uc3Qge1xuICAgICAgICB2YXJpYW50cyA9IFtdXG4gICAgICB9ID0gcmVzb2x2ZWRTdHlsZXNBcmcsXG4gICAgICBvdGhlclN0eWxlcyA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkocmVzb2x2ZWRTdHlsZXNBcmcsIF9leGNsdWRlZDIpO1xuICAgIGxldCByZXN1bHQgPSBvdGhlclN0eWxlcztcbiAgICB2YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xuICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiB2YXJpYW50LnByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlzTWF0Y2ggPSB2YXJpYW50LnByb3BzKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhbnQucHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoKG93bmVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG93bmVyU3RhdGVba2V5XSkgIT09IHZhcmlhbnQucHJvcHNba2V5XSAmJiBwcm9wc1trZXldICE9PSB2YXJpYW50LnByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh0eXBlb2YgdmFyaWFudC5zdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhcmlhbnQuc3R5bGUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgICB9LCBwcm9wcywgb3duZXJTdGF0ZSkpIDogdmFyaWFudC5zdHlsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmc7XG59XG5mdW5jdGlvbiBjcmVhdGVTdHlsZWQoaW5wdXQgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGhlbWVJZCxcbiAgICBkZWZhdWx0VGhlbWUgPSBzeXN0ZW1EZWZhdWx0VGhlbWUsXG4gICAgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3AsXG4gICAgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3BcbiAgfSA9IGlucHV0O1xuICBjb25zdCBzeXN0ZW1TeCA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gKDAsIF9zdHlsZUZ1bmN0aW9uU3guZGVmYXVsdCkoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICB0aGVtZUlkXG4gICAgICB9KSlcbiAgICB9KSk7XG4gIH07XG4gIHN5c3RlbVN4Ll9fbXVpX3N5c3RlbVN4ID0gdHJ1ZTtcbiAgcmV0dXJuICh0YWcsIGlucHV0T3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgLy8gRmlsdGVyIG91dCB0aGUgYHN4YCBzdHlsZSBmdW5jdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdHlsZWQgY29tcG9uZW50IHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkgc3R5bGVzIGdlbmVyYXRlZCBieSB0aGUgY29tcG9zaXRlIGNvbXBvbmVudHMuXG4gICAgKDAsIF9zdHlsZWRFbmdpbmUuaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcykodGFnLCBzdHlsZXMgPT4gc3R5bGVzLmZpbHRlcihzdHlsZSA9PiAhKHN0eWxlICE9IG51bGwgJiYgc3R5bGUuX19tdWlfc3lzdGVtU3gpKSk7XG4gICAgY29uc3Qge1xuICAgICAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICBzbG90OiBjb21wb25lbnRTbG90LFxuICAgICAgICBza2lwVmFyaWFudHNSZXNvbHZlcjogaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlcixcbiAgICAgICAgc2tpcFN4OiBpbnB1dFNraXBTeCxcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBvdmVycmlkZXNSZXNvbHZlciA9IGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90KSlcbiAgICAgIH0gPSBpbnB1dE9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShpbnB1dE9wdGlvbnMsIF9leGNsdWRlZDMpO1xuXG4gICAgLy8gaWYgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgb3B0aW9uIGlzIGRlZmluZWQsIHRha2UgdGhlIHZhbHVlLCBvdGhlcndpc2UsIHRydWUgZm9yIHJvb3QgYW5kIGZhbHNlIGZvciBvdGhlciBzbG90cy5cbiAgICBjb25zdCBza2lwVmFyaWFudHNSZXNvbHZlciA9IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgIT09IHVuZGVmaW5lZCA/IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgOlxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGNvbXBvbmVudFNsb3QgJiYgY29tcG9uZW50U2xvdCAhPT0gJ1Jvb3QnICYmIGNvbXBvbmVudFNsb3QgIT09ICdyb290JyB8fCBmYWxzZTtcbiAgICBjb25zdCBza2lwU3ggPSBpbnB1dFNraXBTeCB8fCBmYWxzZTtcbiAgICBsZXQgbGFiZWw7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgbG93ZXJjYXNlRmlyc3RMZXR0ZXIoKWAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgICAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICAgICAgbGFiZWwgPSBgJHtjb21wb25lbnROYW1lfS0ke2xvd2VyY2FzZUZpcnN0TGV0dGVyKGNvbXBvbmVudFNsb3QgfHwgJ1Jvb3QnKX1gO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzaG91bGRGb3J3YXJkUHJvcDtcblxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGlmIChjb21wb25lbnRTbG90ID09PSAnUm9vdCcgfHwgY29tcG9uZW50U2xvdCA9PT0gJ3Jvb3QnKSB7XG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHJvb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGNvbXBvbmVudFNsb3QpIHtcbiAgICAgIC8vIGFueSBvdGhlciBzbG90IHNwZWNpZmllZFxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzbG90U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZ1RhZyh0YWcpKSB7XG4gICAgICAvLyBmb3Igc3RyaW5nIChodG1sKSB0YWcsIHByZXNlcnZlIHRoZSBiZWhhdmlvciBpbiBlbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMuXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFN0eWxlZFJlc29sdmVyID0gKDAsIF9zdHlsZWRFbmdpbmUuZGVmYXVsdCkodGFnLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbixcbiAgICAgIGxhYmVsXG4gICAgfSwgb3B0aW9ucykpO1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0eWxlQXJnID0gc3R5bGVzQXJnID0+IHtcbiAgICAgIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgIGlmICh0eXBlb2Ygc3R5bGVzQXJnID09PSAnZnVuY3Rpb24nICYmIHN0eWxlc0FyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVzQXJnIHx8ICgwLCBfZGVlcG1lcmdlLmlzUGxhaW5PYmplY3QpKHN0eWxlc0FyZykpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzID0+IHByb2Nlc3NTdHlsZUFyZyhzdHlsZXNBcmcsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSh7XG4gICAgICAgICAgICB0aGVtZTogcHJvcHMudGhlbWUsXG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0FyZztcbiAgICB9O1xuICAgIGNvbnN0IG11aVN0eWxlZFJlc29sdmVyID0gKHN0eWxlQXJnLCAuLi5leHByZXNzaW9ucykgPT4ge1xuICAgICAgbGV0IHRyYW5zZm9ybWVkU3R5bGVBcmcgPSB0cmFuc2Zvcm1TdHlsZUFyZyhzdHlsZUFyZyk7XG4gICAgICBjb25zdCBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUgPSBleHByZXNzaW9ucyA/IGV4cHJlc3Npb25zLm1hcCh0cmFuc2Zvcm1TdHlsZUFyZykgOiBbXTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmIG92ZXJyaWRlc1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBpZiAoIXRoZW1lLmNvbXBvbmVudHMgfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0gfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IHRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXM7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyA9IHt9O1xuICAgICAgICAgIC8vIFRPRE86IHY3IHJlbW92ZSBpdGVyYXRpb24gYW5kIHVzZSBgcmVzb2x2ZVN0eWxlQXJnKHN0eWxlT3ZlcnJpZGVzW3Nsb3RdKWAgZGlyZWN0bHlcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhzdHlsZU92ZXJyaWRlcykuZm9yRWFjaCgoW3Nsb3RLZXksIHNsb3RTdHlsZV0pID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVkU3R5bGVPdmVycmlkZXNbc2xvdEtleV0gPSBwcm9jZXNzU3R5bGVBcmcoc2xvdFN0eWxlLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBvdmVycmlkZXNSZXNvbHZlcihwcm9wcywgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgIXNraXBWYXJpYW50c1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICB2YXIgX3RoZW1lJGNvbXBvbmVudHM7XG4gICAgICAgICAgY29uc3QgdGhlbWUgPSByZXNvbHZlVGhlbWUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgY29uc3QgdGhlbWVWYXJpYW50cyA9IHRoZW1lID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50c1tjb21wb25lbnROYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnZhcmlhbnRzO1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzU3R5bGVBcmcoe1xuICAgICAgICAgICAgdmFyaWFudHM6IHRoZW1lVmFyaWFudHNcbiAgICAgICAgICB9LCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFza2lwU3gpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2goc3lzdGVtU3gpO1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID0gZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLmxlbmd0aCAtIGV4cHJlc3Npb25zLmxlbmd0aDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN0eWxlQXJnKSAmJiBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IG5ldyBBcnJheShudW1PZkN1c3RvbUZuc0FwcGxpZWQpLmZpbGwoJycpO1xuICAgICAgICAvLyBJZiB0aGUgdHlwZSBpcyBhcnJheSwgdGhhbiB3ZSBuZWVkIHRvIGFkZCBwbGFjZWhvbGRlcnMgaW4gdGhlIHRlbXBsYXRlIGZvciB0aGUgb3ZlcnJpZGVzLCB2YXJpYW50cyBhbmQgdGhlIHN4IHN0eWxlcy5cbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IFsuLi5zdHlsZUFyZywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZy5yYXcgPSBbLi4uc3R5bGVBcmcucmF3LCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgfVxuICAgICAgY29uc3QgQ29tcG9uZW50ID0gZGVmYXVsdFN0eWxlZFJlc29sdmVyKHRyYW5zZm9ybWVkU3R5bGVBcmcsIC4uLmV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBsZXQgZGlzcGxheU5hbWU7XG4gICAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSBgJHtjb21wb25lbnROYW1lfSR7KDAsIF9jYXBpdGFsaXplLmRlZmF1bHQpKGNvbXBvbmVudFNsb3QgfHwgJycpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpc3BsYXlOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGBTdHlsZWQoJHsoMCwgX2dldERpc3BsYXlOYW1lLmRlZmF1bHQpKHRhZyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodGFnLm11aU5hbWUpIHtcbiAgICAgICAgQ29tcG9uZW50Lm11aU5hbWUgPSB0YWcubXVpTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgfTtcbiAgICBpZiAoZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWcpIHtcbiAgICAgIG11aVN0eWxlZFJlc29sdmVyLndpdGhDb25maWcgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIG11aVN0eWxlZFJlc29sdmVyO1xuICB9O1xufSIsICJpbXBvcnQgeyBGcmFnbWVudCwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcbmltcG9ydCB7IHVzZUFwcERpc3BhdGNoLCB1c2VBcHBTZWxlY3RvciB9IGZyb20gXCIuLi9hcHAvaG9va3NcIjtcbmltcG9ydCB7IHN0b3JlIH0gZnJvbSBcIi4uL2FwcC9zdG9yZVwiO1xuaW1wb3J0IEVudGl0eVRyZWUgZnJvbSBcIi4uL3BhZ2VzL29udG9sb2dpZXMvZW50aXRpZXMvRW50aXR5VHJlZVwiO1xuaW1wb3J0IHsgZ2V0Q2xhc3NJbnN0YW5jZXMsIGdldEVudGl0eSwgZ2V0RW50aXR5V2l0aFR5cGUsIGdldE9udG9sb2d5IH0gZnJvbSBcIi4uL3BhZ2VzL29udG9sb2dpZXMvb250b2xvZ2llc1NsaWNlXCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IE9udG9sb2d5IGZyb20gJy4uL21vZGVsL09udG9sb2d5J1xuaW1wb3J0IEVudGl0eSBmcm9tICcuLi9tb2RlbC9FbnRpdHknXG5pbXBvcnQgeyBDaXJjdWxhclByb2dyZXNzIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUcmVlV2lkZ2V0UHJvcHMge1xuICAgIGlyaT86IHN0cmluZztcbiAgICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gICAgYXBpVXJsOiBzdHJpbmc7XG4gICAgZW50aXR5VHlwZT86IFwiZW50aXRpZXNcIiB8IFwiY2xhc3Nlc1wiIHwgXCJwcm9wZXJ0aWVzXCIgfCBcImluZGl2aWR1YWxzXCI7XG4gICAgbGFuZz86IHN0cmluZztcbiAgICBvbk5hdmlnYXRlVG9FbnRpdHk/OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlOiBzdHJpbmcsIGlyaTogc3RyaW5nKSA9PiB2b2lkO1xuICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PzogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZTogc3RyaW5nLCBpcmk6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudGl0eVRyZWUoXG4gICAgcHJvcHM6IEVudGl0eVRyZWVXaWRnZXRQcm9wcyxcbiAgICBjb250YWluZXI6IGFueSxcbiAgICBjYWxsYmFjaz86ICgpID0+IHZvaWRcbikge1xuICAgIFJlYWN0RE9NLnJlbmRlcihFbnRpdHlUcmVlV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIEVudGl0eVRyZWVXaWRnZXQocHJvcHM6IEVudGl0eVRyZWVXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlfT5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxFbnRpdHlUcmVlV2lkZ2V0SW5uZXJcbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIGFwaVVybD17cHJvcHMuYXBpVXJsfVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9FbnRpdHk9e3Byb3BzLm9uTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e3Byb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG5cbiAgICAgICAgPC9Qcm92aWRlcj5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBFbnRpdHlUcmVlV2lkZ2V0SW5uZXIocHJvcHM6IEVudGl0eVRyZWVXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgbGFuZyA9IFwiZW5cIixcbiAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5ID0gKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neSA9ICgpID0+IHtcbiAgICAgICAgfSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBvbnRvbG9neSA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5vbnRvbG9neSk7XG4gICAgY29uc3QgbG9hZGluZ09udG9sb2d5ID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmxvYWRpbmdPbnRvbG9neSk7XG5cbiAgICBjb25zdCBlbnRpdHkgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuZW50aXR5KTtcbiAgICBjb25zdCBsb2FkaW5nRW50aXR5ID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmxvYWRpbmdFbnRpdHkpO1xuXG4gICAgLy9jb25zdCBjbGFzc0luc3RhbmNlcyA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5jbGFzc0luc3RhbmNlcyk7XG4gICAgY29uc3QgbG9hZGluZ0NsYXNzSW5zdGFuY2VzID0gdXNlQXBwU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmxvYWRpbmdDbGFzc0luc3RhbmNlcyk7XG5cblxuICAgIGNvbnN0IGRpc3BhdGNoID0gdXNlQXBwRGlzcGF0Y2goKTtcblxuICAgIGNvbnN0IGhhbmRsZU5hdmlnYXRlVG9FbnRpdHkgPSAob250b2xvZ3k6IE9udG9sb2d5LCBlbnRpdHk6IEVudGl0eSkgPT4ge1xuICAgICAgICBjb25zdCBvbnRvbG9neUlkID0gb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpO1xuICAgICAgICBjb25zdCBlbnRpdHlUeXBlID0gZW50aXR5LmdldFR5cGVQbHVyYWwoKTtcbiAgICAgICAgY29uc3QgaXJpID0gZW50aXR5LmdldElyaSgpO1xuXG4gICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eShvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBpcmkpO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVOYXZpZ2F0ZVRvT250b2xvZ3kgPSAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHk6IEVudGl0eSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHlUeXBlID0gZW50aXR5LmdldFR5cGVQbHVyYWwoKTtcbiAgICAgICAgY29uc3QgaXJpID0gZW50aXR5LmdldElyaSgpO1xuXG4gICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5KG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIGlyaSk7XG4gICAgfTtcblxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgICBnZXRPbnRvbG9neSh7XG4gICAgICAgICAgICAgICAgb250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICBsYW5nOiBcImVuXCIsXG4gICAgICAgICAgICAgICAgYXBpVXJsOiBwcm9wcy5hcGlVcmwsXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH0sIFtkaXNwYXRjaCwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuYXBpVXJsXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAob250b2xvZ3kgJiYgcHJvcHMuaXJpKSB7XG4gICAgICAgICAgICBpZiAocHJvcHMuZW50aXR5VHlwZSAmJiBwcm9wcy5lbnRpdHlUeXBlICE9PSBcImVudGl0aWVzXCIpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZ2V0RW50aXR5V2l0aFR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlOiBwcm9wcy5lbnRpdHlUeXBlIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlJcmk6IHByb3BzLmlyaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYXJhbXM6IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlIGRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIGdldEVudGl0eShcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZDogcHJvcHMub250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eUlyaTogcHJvcHMuaXJpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgIH0sIFtkaXNwYXRjaCwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuZW50aXR5VHlwZSwgcHJvcHMuaXJpLCBvbnRvbG9neV0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGVudGl0eSAmJiBwcm9wcy5lbnRpdHlUeXBlID09PSBcImNsYXNzZXNcIikge1xuICAgICAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgZ2V0Q2xhc3NJbnN0YW5jZXMoe1xuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkOiBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc0lyaTogZW50aXR5LmdldElyaSgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYXJhbXM6IG5ldyBVUkxTZWFyY2hQYXJhbXMoKSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0sIFtkaXNwYXRjaCwgcHJvcHMub250b2xvZ3lJZCwgcHJvcHMuZW50aXR5VHlwZSwgcHJvcHMuaXJpLCBlbnRpdHldKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgIHsobG9hZGluZ0VudGl0eSB8fCBsb2FkaW5nT250b2xvZ3kgfHwgbG9hZGluZ0NsYXNzSW5zdGFuY2VzKSAmJlxuICAgICAgICAgICAgICAgIDxDaXJjdWxhclByb2dyZXNzLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHshbG9hZGluZ0VudGl0eSAmJiAhbG9hZGluZ09udG9sb2d5ICYmICFsb2FkaW5nQ2xhc3NJbnN0YW5jZXMgJiYgb250b2xvZ3kgJiYgKFxuICAgICAgICAgICAgICAgIDxFbnRpdHlUcmVlXG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5PXtvbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17ZW50aXR5VHlwZSA/IGVudGl0eVR5cGUgOiBcImVudGl0aWVzXCJ9XG4gICAgICAgICAgICAgICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRW50aXR5PXtlbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17aGFuZGxlTmF2aWdhdGVUb0VudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvT250b2xvZ3k9e2hhbmRsZU5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgYXBpVXJsPXtwcm9wcy5hcGlVcmx9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgKTtcbn1cbiIsICIvLyBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludCBhc3N1bWVzIHdlJ3JlIHdvcmtpbmcgd2l0aCBzdGFuZGFyZCBSZWFjdERPTS9STiwgYnV0XG4vLyBvbGRlciB2ZXJzaW9ucyB0aGF0IGRvIG5vdCBpbmNsdWRlIGB1c2VTeW5jRXh0ZXJuYWxTdG9yZWAgKFJlYWN0IDE2LjkgLSAxNy54KS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhlIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGNvbXBhdCBzaGltIGlzIG5lZWRlZC5cbmltcG9ydCB7IHVzZVN5bmNFeHRlcm5hbFN0b3JlIH0gZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbSc7XG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vd2l0aC1zZWxlY3Rvcic7XG5pbXBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyBhcyBiYXRjaCB9IGZyb20gJy4vdXRpbHMvcmVhY3RCYXRjaGVkVXBkYXRlcyc7XG5pbXBvcnQgeyBzZXRCYXRjaCB9IGZyb20gJy4vdXRpbHMvYmF0Y2gnO1xuaW1wb3J0IHsgaW5pdGlhbGl6ZVVzZVNlbGVjdG9yIH0gZnJvbSAnLi9ob29rcy91c2VTZWxlY3Rvcic7XG5pbXBvcnQgeyBpbml0aWFsaXplQ29ubmVjdCB9IGZyb20gJy4vY29tcG9uZW50cy9jb25uZWN0JztcbmluaXRpYWxpemVVc2VTZWxlY3Rvcih1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3Rvcik7XG5pbml0aWFsaXplQ29ubmVjdCh1c2VTeW5jRXh0ZXJuYWxTdG9yZSk7IC8vIEVuYWJsZSBiYXRjaGVkIHVwZGF0ZXMgaW4gb3VyIHN1YnNjcmlwdGlvbnMgZm9yIHVzZVxuLy8gd2l0aCBzdGFuZGFyZCBSZWFjdCByZW5kZXJlcnMgKFJlYWN0RE9NLCBSZWFjdCBOYXRpdmUpXG5cbnNldEJhdGNoKGJhdGNoKTtcbmV4cG9ydCB7IGJhdGNoIH07XG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydHMnOyIsICJleHBvcnQgeyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyB9IGZyb20gJ3JlYWN0LWRvbSc7IiwgIi8vIERlZmF1bHQgdG8gYSBkdW1teSBcImJhdGNoXCIgaW1wbGVtZW50YXRpb24gdGhhdCBqdXN0IHJ1bnMgdGhlIGNhbGxiYWNrXG5mdW5jdGlvbiBkZWZhdWx0Tm9vcEJhdGNoKGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKCk7XG59XG5cbmxldCBiYXRjaCA9IGRlZmF1bHROb29wQmF0Y2g7IC8vIEFsbG93IGluamVjdGluZyBhbm90aGVyIGJhdGNoaW5nIGZ1bmN0aW9uIGxhdGVyXG5cbmV4cG9ydCBjb25zdCBzZXRCYXRjaCA9IG5ld0JhdGNoID0+IGJhdGNoID0gbmV3QmF0Y2g7IC8vIFN1cHBseSBhIGdldHRlciBqdXN0IHRvIHNraXAgZGVhbGluZyB3aXRoIEVTTSBiaW5kaW5nc1xuXG5leHBvcnQgY29uc3QgZ2V0QmF0Y2ggPSAoKSA9PiBiYXRjaDsiLCAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZURlYnVnVmFsdWUsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVJlZHV4Q29udGV4dEhvb2ssIHVzZVJlZHV4Q29udGV4dCBhcyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi91c2VSZWR1eENvbnRleHQnO1xuaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IHsgbm90SW5pdGlhbGl6ZWQgfSBmcm9tICcuLi91dGlscy91c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG5sZXQgdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IgPSBub3RJbml0aWFsaXplZDtcbmV4cG9ydCBjb25zdCBpbml0aWFsaXplVXNlU2VsZWN0b3IgPSBmbiA9PiB7XG4gIHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yID0gZm47XG59O1xuXG5jb25zdCByZWZFcXVhbGl0eSA9IChhLCBiKSA9PiBhID09PSBiO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VTZWxlY3RvcmAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZVNlbGVjdG9yYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9ySG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgY29uc3QgdXNlUmVkdXhDb250ZXh0ID0gY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IDogY3JlYXRlUmVkdXhDb250ZXh0SG9vayhjb250ZXh0KTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVNlbGVjdG9yKHNlbGVjdG9yLCBlcXVhbGl0eUZuT3JPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBlcXVhbGl0eUZuID0gcmVmRXF1YWxpdHksXG4gICAgICBzdGFiaWxpdHlDaGVjayA9IHVuZGVmaW5lZCxcbiAgICAgIG5vb3BDaGVjayA9IHVuZGVmaW5lZFxuICAgIH0gPSB0eXBlb2YgZXF1YWxpdHlGbk9yT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJyA/IHtcbiAgICAgIGVxdWFsaXR5Rm46IGVxdWFsaXR5Rm5Pck9wdGlvbnNcbiAgICB9IDogZXF1YWxpdHlGbk9yT3B0aW9ucztcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIHNlbGVjdG9yIHRvIHVzZVNlbGVjdG9yYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgYSBzZWxlY3RvciB0byB1c2VTZWxlY3RvcmApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGVxdWFsaXR5Rm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBZb3UgbXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgYW4gZXF1YWxpdHkgZnVuY3Rpb24gdG8gdXNlU2VsZWN0b3JgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBzdG9yZSxcbiAgICAgIHN1YnNjcmlwdGlvbixcbiAgICAgIGdldFNlcnZlclN0YXRlLFxuICAgICAgc3RhYmlsaXR5Q2hlY2s6IGdsb2JhbFN0YWJpbGl0eUNoZWNrLFxuICAgICAgbm9vcENoZWNrOiBnbG9iYWxOb29wQ2hlY2tcbiAgICB9ID0gdXNlUmVkdXhDb250ZXh0KCk7XG4gICAgY29uc3QgZmlyc3RSdW4gPSB1c2VSZWYodHJ1ZSk7XG4gICAgY29uc3Qgd3JhcHBlZFNlbGVjdG9yID0gdXNlQ2FsbGJhY2soe1xuICAgICAgW3NlbGVjdG9yLm5hbWVdKHN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0b3Ioc3RhdGUpO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgZmluYWxTdGFiaWxpdHlDaGVjayA9IHR5cGVvZiBzdGFiaWxpdHlDaGVjayA9PT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxTdGFiaWxpdHlDaGVjayA6IHN0YWJpbGl0eUNoZWNrO1xuXG4gICAgICAgICAgaWYgKGZpbmFsU3RhYmlsaXR5Q2hlY2sgPT09ICdhbHdheXMnIHx8IGZpbmFsU3RhYmlsaXR5Q2hlY2sgPT09ICdvbmNlJyAmJiBmaXJzdFJ1bi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjb25zdCB0b0NvbXBhcmUgPSBzZWxlY3RvcihzdGF0ZSk7XG5cbiAgICAgICAgICAgIGlmICghZXF1YWxpdHlGbihzZWxlY3RlZCwgdG9Db21wYXJlKSkge1xuICAgICAgICAgICAgICBsZXQgc3RhY2sgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgICAgICAgICB9ID0gZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1NlbGVjdG9yICcgKyAoc2VsZWN0b3IubmFtZSB8fCAndW5rbm93bicpICsgJyByZXR1cm5lZCBhIGRpZmZlcmVudCByZXN1bHQgd2hlbiBjYWxsZWQgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHJlcmVuZGVycy4nICsgJ1xcblNlbGVjdG9ycyB0aGF0IHJldHVybiBhIG5ldyByZWZlcmVuY2UgKHN1Y2ggYXMgYW4gb2JqZWN0IG9yIGFuIGFycmF5KSBzaG91bGQgYmUgbWVtb2l6ZWQ6IGh0dHBzOi8vcmVkdXguanMub3JnL3VzYWdlL2Rlcml2aW5nLWRhdGEtc2VsZWN0b3JzI29wdGltaXppbmctc2VsZWN0b3JzLXdpdGgtbWVtb2l6YXRpb24nLCB7XG4gICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQyOiB0b0NvbXBhcmUsXG4gICAgICAgICAgICAgICAgc3RhY2tcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZmluYWxOb29wQ2hlY2sgPSB0eXBlb2Ygbm9vcENoZWNrID09PSAndW5kZWZpbmVkJyA/IGdsb2JhbE5vb3BDaGVjayA6IG5vb3BDaGVjaztcblxuICAgICAgICAgIGlmIChmaW5hbE5vb3BDaGVjayA9PT0gJ2Fsd2F5cycgfHwgZmluYWxOb29wQ2hlY2sgPT09ICdvbmNlJyAmJiBmaXJzdFJ1bi5jdXJyZW50KSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHN0YXRlKSB7XG4gICAgICAgICAgICAgIGxldCBzdGFjayA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICAgIH0gPSBlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignU2VsZWN0b3IgJyArIChzZWxlY3Rvci5uYW1lIHx8ICd1bmtub3duJykgKyAnIHJldHVybmVkIHRoZSByb290IHN0YXRlIHdoZW4gY2FsbGVkLiBUaGlzIGNhbiBsZWFkIHRvIHVubmVjZXNzYXJ5IHJlcmVuZGVycy4nICsgJ1xcblNlbGVjdG9ycyB0aGF0IHJldHVybiB0aGUgZW50aXJlIHN0YXRlIGFyZSBhbG1vc3QgY2VydGFpbmx5IGEgbWlzdGFrZSwgYXMgdGhleSB3aWxsIGNhdXNlIGEgcmVyZW5kZXIgd2hlbmV2ZXIgKmFueXRoaW5nKiBpbiBzdGF0ZSBjaGFuZ2VzLicsIHtcbiAgICAgICAgICAgICAgICBzdGFja1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmlyc3RSdW4uY3VycmVudCkgZmlyc3RSdW4uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkO1xuICAgICAgfVxuXG4gICAgfVtzZWxlY3Rvci5uYW1lXSwgW3NlbGVjdG9yLCBnbG9iYWxTdGFiaWxpdHlDaGVjaywgc3RhYmlsaXR5Q2hlY2tdKTtcbiAgICBjb25zdCBzZWxlY3RlZFN0YXRlID0gdXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3Ioc3Vic2NyaXB0aW9uLmFkZE5lc3RlZFN1Yiwgc3RvcmUuZ2V0U3RhdGUsIGdldFNlcnZlclN0YXRlIHx8IHN0b3JlLmdldFN0YXRlLCB3cmFwcGVkU2VsZWN0b3IsIGVxdWFsaXR5Rm4pO1xuICAgIHVzZURlYnVnVmFsdWUoc2VsZWN0ZWRTdGF0ZSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkU3RhdGU7XG4gIH07XG59XG4vKipcclxuICogQSBob29rIHRvIGFjY2VzcyB0aGUgcmVkdXggc3RvcmUncyBzdGF0ZS4gVGhpcyBob29rIHRha2VzIGEgc2VsZWN0b3IgZnVuY3Rpb25cclxuICogYXMgYW4gYXJndW1lbnQuIFRoZSBzZWxlY3RvciBpcyBjYWxsZWQgd2l0aCB0aGUgc3RvcmUgc3RhdGUuXHJcbiAqXHJcbiAqIFRoaXMgaG9vayB0YWtlcyBhbiBvcHRpb25hbCBlcXVhbGl0eSBjb21wYXJpc29uIGZ1bmN0aW9uIGFzIHRoZSBzZWNvbmQgcGFyYW1ldGVyXHJcbiAqIHRoYXQgYWxsb3dzIHlvdSB0byBjdXN0b21pemUgdGhlIHdheSB0aGUgc2VsZWN0ZWQgc3RhdGUgaXMgY29tcGFyZWQgdG8gZGV0ZXJtaW5lXHJcbiAqIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBuZWVkcyB0byBiZSByZS1yZW5kZXJlZC5cclxuICpcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2VsZWN0b3IgdGhlIHNlbGVjdG9yIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBlcXVhbGl0eUZuIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgZXF1YWxpdHlcclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHNlbGVjdGVkIHN0YXRlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IENvdW50ZXJDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgY29uc3QgY291bnRlciA9IHVzZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLmNvdW50ZXIpXHJcbiAqICAgcmV0dXJuIDxkaXY+e2NvdW50ZXJ9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VTZWxlY3RvciA9IC8qI19fUFVSRV9fKi9jcmVhdGVTZWxlY3Rvckhvb2soKTsiLCAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcblxuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VSZWR1eENvbnRleHRgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LiBUaGlzIGlzIGEgbG93LWxldmVsXHJcbiAqIGhvb2sgdGhhdCB5b3Ugc2hvdWxkIHVzdWFsbHkgbm90IG5lZWQgdG8gY2FsbCBkaXJlY3RseS5cclxuICpcclxuICogQHBhcmFtIHtSZWFjdC5Db250ZXh0fSBbY29udGV4dD1SZWFjdFJlZHV4Q29udGV4dF0gQ29udGV4dCBwYXNzZWQgdG8geW91ciBgPFByb3ZpZGVyPmAuXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBgdXNlUmVkdXhDb250ZXh0YCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkdXhDb250ZXh0SG9vayhjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVzZVJlZHV4Q29udGV4dCgpIHtcbiAgICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VDb250ZXh0KGNvbnRleHQpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWNvbnRleHRWYWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCByZWFjdC1yZWR1eCBjb250ZXh0IHZhbHVlOyBwbGVhc2UgZW5zdXJlIHRoZSBjb21wb25lbnQgaXMgd3JhcHBlZCBpbiBhIDxQcm92aWRlcj4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dFZhbHVlO1xuICB9O1xufVxuLyoqXHJcbiAqIEEgaG9vayB0byBhY2Nlc3MgdGhlIHZhbHVlIG9mIHRoZSBgUmVhY3RSZWR1eENvbnRleHRgLiBUaGlzIGlzIGEgbG93LWxldmVsXHJcbiAqIGhvb2sgdGhhdCB5b3Ugc2hvdWxkIHVzdWFsbHkgbm90IG5lZWQgdG8gY2FsbCBkaXJlY3RseS5cclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHZhbHVlIG9mIHRoZSBgUmVhY3RSZWR1eENvbnRleHRgXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlUmVkdXhDb250ZXh0IH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyQ29tcG9uZW50ID0gKCkgPT4ge1xyXG4gKiAgIGNvbnN0IHsgc3RvcmUgfSA9IHVzZVJlZHV4Q29udGV4dCgpXHJcbiAqICAgcmV0dXJuIDxkaXY+e3N0b3JlLmdldFN0YXRlKCl9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VSZWR1eENvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlUmVkdXhDb250ZXh0SG9vaygpOyIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCBDb250ZXh0S2V5ID0gU3ltYm9sLmZvcihgcmVhY3QtcmVkdXgtY29udGV4dGApO1xuY29uc3QgZ1QgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFRoaXMgOlxuLyogZmFsbCBiYWNrIHRvIGEgcGVyLW1vZHVsZSBzY29wZSAocHJlLTguMSBiZWhhdmlvdXIpIGlmIGBnbG9iYWxUaGlzYCBpcyBub3QgYXZhaWxhYmxlICovXG57fTtcblxuZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgdmFyIF9nVCRDb250ZXh0S2V5O1xuXG4gIGlmICghUmVhY3QuY3JlYXRlQ29udGV4dCkgcmV0dXJuIHt9O1xuICBjb25zdCBjb250ZXh0TWFwID0gKF9nVCRDb250ZXh0S2V5ID0gZ1RbQ29udGV4dEtleV0pICE9IG51bGwgPyBfZ1QkQ29udGV4dEtleSA6IGdUW0NvbnRleHRLZXldID0gbmV3IE1hcCgpO1xuICBsZXQgcmVhbENvbnRleHQgPSBjb250ZXh0TWFwLmdldChSZWFjdC5jcmVhdGVDb250ZXh0KTtcblxuICBpZiAoIXJlYWxDb250ZXh0KSB7XG4gICAgcmVhbENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJlYWxDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1JlYWN0UmVkdXgnO1xuICAgIH1cblxuICAgIGNvbnRleHRNYXAuc2V0KFJlYWN0LmNyZWF0ZUNvbnRleHQsIHJlYWxDb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiByZWFsQ29udGV4dDtcbn1cblxuZXhwb3J0IGNvbnN0IFJlYWN0UmVkdXhDb250ZXh0ID0gLyojX19QVVJFX18qL2dldENvbnRleHQoKTtcbmV4cG9ydCBkZWZhdWx0IFJlYWN0UmVkdXhDb250ZXh0OyIsICJleHBvcnQgY29uc3Qgbm90SW5pdGlhbGl6ZWQgPSAoKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcigndVNFUyBub3QgaW5pdGlhbGl6ZWQhJyk7XG59OyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wicmVhY3RSZWR1eEZvcndhcmRlZFJlZlwiXTtcblxuLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IGhvaXN0U3RhdGljcyBmcm9tICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc1ZhbGlkRWxlbWVudFR5cGUsIGlzQ29udGV4dENvbnN1bWVyIH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IGRlZmF1bHRTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi4vY29ubmVjdC9zZWxlY3RvckZhY3RvcnknO1xuaW1wb3J0IHsgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yeSB9IGZyb20gJy4uL2Nvbm5lY3QvbWFwRGlzcGF0Y2hUb1Byb3BzJztcbmltcG9ydCB7IG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcnkgfSBmcm9tICcuLi9jb25uZWN0L21hcFN0YXRlVG9Qcm9wcyc7XG5pbXBvcnQgeyBtZXJnZVByb3BzRmFjdG9yeSB9IGZyb20gJy4uL2Nvbm5lY3QvbWVyZ2VQcm9wcyc7XG5pbXBvcnQgeyBjcmVhdGVTdWJzY3JpcHRpb24gfSBmcm9tICcuLi91dGlscy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4uL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QnO1xuaW1wb3J0IHNoYWxsb3dFcXVhbCBmcm9tICcuLi91dGlscy9zaGFsbG93RXF1YWwnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnLi4vdXRpbHMvd2FybmluZyc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vQ29udGV4dCc7XG5pbXBvcnQgeyBub3RJbml0aWFsaXplZCB9IGZyb20gJy4uL3V0aWxzL3VzZVN5bmNFeHRlcm5hbFN0b3JlJztcbmxldCB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IG5vdEluaXRpYWxpemVkO1xuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVDb25uZWN0ID0gZm4gPT4ge1xuICB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IGZuO1xufTsgLy8gRGVmaW5lIHNvbWUgY29uc3RhbnQgYXJyYXlzIGp1c3QgdG8gYXZvaWQgcmUtY3JlYXRpbmcgdGhlc2VcblxuY29uc3QgRU1QVFlfQVJSQVkgPSBbbnVsbCwgMF07XG5jb25zdCBOT19TVUJTQ1JJUFRJT05fQVJSQVkgPSBbbnVsbCwgbnVsbF07IC8vIEF0dGVtcHRzIHRvIHN0cmluZ2lmeSB3aGF0ZXZlciBub3QtcmVhbGx5LWEtY29tcG9uZW50IHZhbHVlIHdlIHdlcmUgZ2l2ZW5cbi8vIGZvciBsb2dnaW5nIGluIGFuIGVycm9yIG1lc3NhZ2VcblxuY29uc3Qgc3RyaW5naWZ5Q29tcG9uZW50ID0gQ29tcCA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KENvbXApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gU3RyaW5nKENvbXApO1xuICB9XG59O1xuXG4vLyBUaGlzIGlzIFwianVzdFwiIGEgYHVzZUxheW91dEVmZmVjdGAsIGJ1dCB3aXRoIHR3byBtb2RpZmljYXRpb25zOlxuLy8gLSB3ZSBuZWVkIHRvIGZhbGwgYmFjayB0byBgdXNlRWZmZWN0YCBpbiBTU1IgdG8gYXZvaWQgYW5ub3lpbmcgd2FybmluZ3Ncbi8vIC0gd2UgZXh0cmFjdCB0aGlzIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYXZvaWQgY2xvc2luZyBvdmVyIHZhbHVlc1xuLy8gICBhbmQgY2F1c2luZyBtZW1vcnkgbGVha3NcbmZ1bmN0aW9uIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3RXaXRoQXJncyhlZmZlY3RGdW5jLCBlZmZlY3RBcmdzLCBkZXBlbmRlbmNpZXMpIHtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiBlZmZlY3RGdW5jKC4uLmVmZmVjdEFyZ3MpLCBkZXBlbmRlbmNpZXMpO1xufSAvLyBFZmZlY3QgY2FsbGJhY2ssIGV4dHJhY3RlZDogYXNzaWduIHRoZSBsYXRlc3QgcHJvcHMgdmFsdWVzIHRvIHJlZnMgZm9yIGxhdGVyIHVzYWdlXG5cblxuZnVuY3Rpb24gY2FwdHVyZVdyYXBwZXJQcm9wcyhsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIHdyYXBwZXJQcm9wcywgLy8gYWN0dWFsQ2hpbGRQcm9wczogdW5rbm93bixcbmNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnMpIHtcbiAgLy8gV2Ugd2FudCB0byBjYXB0dXJlIHRoZSB3cmFwcGVyIHByb3BzIGFuZCBjaGlsZCBwcm9wcyB3ZSB1c2VkIGZvciBsYXRlciBjb21wYXJpc29uc1xuICBsYXN0V3JhcHBlclByb3BzLmN1cnJlbnQgPSB3cmFwcGVyUHJvcHM7XG4gIHJlbmRlcklzU2NoZWR1bGVkLmN1cnJlbnQgPSBmYWxzZTsgLy8gSWYgdGhlIHJlbmRlciB3YXMgZnJvbSBhIHN0b3JlIHVwZGF0ZSwgY2xlYXIgb3V0IHRoYXQgcmVmZXJlbmNlIGFuZCBjYXNjYWRlIHRoZSBzdWJzY3JpYmVyIHVwZGF0ZVxuXG4gIGlmIChjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQpIHtcbiAgICBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLmN1cnJlbnQgPSBudWxsO1xuICAgIG5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgfVxufSAvLyBFZmZlY3QgY2FsbGJhY2ssIGV4dHJhY3RlZDogc3Vic2NyaWJlIHRvIHRoZSBSZWR1eCBzdG9yZSBvciBuZWFyZXN0IGNvbm5lY3RlZCBhbmNlc3Rvcixcbi8vIGNoZWNrIGZvciB1cGRhdGVzIGFmdGVyIGRpc3BhdGNoZWQgYWN0aW9ucywgYW5kIHRyaWdnZXIgcmUtcmVuZGVycy5cblxuXG5mdW5jdGlvbiBzdWJzY3JpYmVVcGRhdGVzKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcywgc3RvcmUsIHN1YnNjcmlwdGlvbiwgY2hpbGRQcm9wc1NlbGVjdG9yLCBsYXN0V3JhcHBlclByb3BzLCBsYXN0Q2hpbGRQcm9wcywgcmVuZGVySXNTY2hlZHVsZWQsIGlzTW91bnRlZCwgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZSwgbm90aWZ5TmVzdGVkU3VicywgLy8gZm9yY2VDb21wb25lbnRVcGRhdGVEaXNwYXRjaDogUmVhY3QuRGlzcGF0Y2g8YW55PixcbmFkZGl0aW9uYWxTdWJzY3JpYmVMaXN0ZW5lcikge1xuICAvLyBJZiB3ZSdyZSBub3Qgc3Vic2NyaWJlZCB0byB0aGUgc3RvcmUsIG5vdGhpbmcgdG8gZG8gaGVyZVxuICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuICgpID0+IHt9OyAvLyBDYXB0dXJlIHZhbHVlcyBmb3IgY2hlY2tpbmcgaWYgYW5kIHdoZW4gdGhpcyBjb21wb25lbnQgdW5tb3VudHNcblxuICBsZXQgZGlkVW5zdWJzY3JpYmUgPSBmYWxzZTtcbiAgbGV0IGxhc3RUaHJvd25FcnJvciA9IG51bGw7IC8vIFdlJ2xsIHJ1biB0aGlzIGNhbGxiYWNrIGV2ZXJ5IHRpbWUgYSBzdG9yZSBzdWJzY3JpcHRpb24gdXBkYXRlIHByb3BhZ2F0ZXMgdG8gdGhpcyBjb21wb25lbnRcblxuICBjb25zdCBjaGVja0ZvclVwZGF0ZXMgPSAoKSA9PiB7XG4gICAgaWYgKGRpZFVuc3Vic2NyaWJlIHx8ICFpc01vdW50ZWQuY3VycmVudCkge1xuICAgICAgLy8gRG9uJ3QgcnVuIHN0YWxlIGxpc3RlbmVycy5cbiAgICAgIC8vIFJlZHV4IGRvZXNuJ3QgZ3VhcmFudGVlIHVuc3Vic2NyaXB0aW9ucyBoYXBwZW4gdW50aWwgbmV4dCBkaXNwYXRjaC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFRPRE8gV2UncmUgY3VycmVudGx5IGNhbGxpbmcgZ2V0U3RhdGUgb3Vyc2VsdmVzIGhlcmUsIHJhdGhlciB0aGFuIGxldHRpbmcgYHVTRVNgIGRvIGl0XG5cblxuICAgIGNvbnN0IGxhdGVzdFN0b3JlU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGxldCBuZXdDaGlsZFByb3BzLCBlcnJvcjtcblxuICAgIHRyeSB7XG4gICAgICAvLyBBY3R1YWxseSBydW4gdGhlIHNlbGVjdG9yIHdpdGggdGhlIG1vc3QgcmVjZW50IHN0b3JlIHN0YXRlIGFuZCB3cmFwcGVyIHByb3BzXG4gICAgICAvLyB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY2hpbGQgcHJvcHMgc2hvdWxkIGJlXG4gICAgICBuZXdDaGlsZFByb3BzID0gY2hpbGRQcm9wc1NlbGVjdG9yKGxhdGVzdFN0b3JlU3RhdGUsIGxhc3RXcmFwcGVyUHJvcHMuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3IgPSBlO1xuICAgICAgbGFzdFRocm93bkVycm9yID0gZTtcbiAgICB9XG5cbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICBsYXN0VGhyb3duRXJyb3IgPSBudWxsO1xuICAgIH0gLy8gSWYgdGhlIGNoaWxkIHByb3BzIGhhdmVuJ3QgY2hhbmdlZCwgbm90aGluZyB0byBkbyBoZXJlIC0gY2FzY2FkZSB0aGUgc3Vic2NyaXB0aW9uIHVwZGF0ZVxuXG5cbiAgICBpZiAobmV3Q2hpbGRQcm9wcyA9PT0gbGFzdENoaWxkUHJvcHMuY3VycmVudCkge1xuICAgICAgaWYgKCFyZW5kZXJJc1NjaGVkdWxlZC5jdXJyZW50KSB7XG4gICAgICAgIG5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2F2ZSByZWZlcmVuY2VzIHRvIHRoZSBuZXcgY2hpbGQgcHJvcHMuICBOb3RlIHRoYXQgd2UgdHJhY2sgdGhlIFwiY2hpbGQgcHJvcHMgZnJvbSBzdG9yZSB1cGRhdGVcIlxuICAgICAgLy8gYXMgYSByZWYgaW5zdGVhZCBvZiBhIHVzZVN0YXRlL3VzZVJlZHVjZXIgYmVjYXVzZSB3ZSBuZWVkIGEgd2F5IHRvIGRldGVybWluZSBpZiB0aGF0IHZhbHVlIGhhc1xuICAgICAgLy8gYmVlbiBwcm9jZXNzZWQuICBJZiB0aGlzIHdlbnQgaW50byB1c2VTdGF0ZS91c2VSZWR1Y2VyLCB3ZSBjb3VsZG4ndCBjbGVhciBvdXQgdGhlIHZhbHVlIHdpdGhvdXRcbiAgICAgIC8vIGZvcmNpbmcgYW5vdGhlciByZS1yZW5kZXIsIHdoaWNoIHdlIGRvbid0IHdhbnQuXG4gICAgICBsYXN0Q2hpbGRQcm9wcy5jdXJyZW50ID0gbmV3Q2hpbGRQcm9wcztcbiAgICAgIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUuY3VycmVudCA9IG5ld0NoaWxkUHJvcHM7XG4gICAgICByZW5kZXJJc1NjaGVkdWxlZC5jdXJyZW50ID0gdHJ1ZTsgLy8gVE9ETyBUaGlzIGlzIGhhY2t5IGFuZCBub3QgaG93IGB1U0VTYCBpcyBtZWFudCB0byBiZSB1c2VkXG4gICAgICAvLyBUcmlnZ2VyIHRoZSBSZWFjdCBgdXNlU3luY0V4dGVybmFsU3RvcmVgIHN1YnNjcmliZXJcblxuICAgICAgYWRkaXRpb25hbFN1YnNjcmliZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9OyAvLyBBY3R1YWxseSBzdWJzY3JpYmUgdG8gdGhlIG5lYXJlc3QgY29ubmVjdGVkIGFuY2VzdG9yIChvciBzdG9yZSlcblxuXG4gIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gY2hlY2tGb3JVcGRhdGVzO1xuICBzdWJzY3JpcHRpb24udHJ5U3Vic2NyaWJlKCk7IC8vIFB1bGwgZGF0YSBmcm9tIHRoZSBzdG9yZSBhZnRlciBmaXJzdCByZW5kZXIgaW4gY2FzZSB0aGUgc3RvcmUgaGFzXG4gIC8vIGNoYW5nZWQgc2luY2Ugd2UgYmVnYW4uXG5cbiAgY2hlY2tGb3JVcGRhdGVzKCk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVXcmFwcGVyID0gKCkgPT4ge1xuICAgIGRpZFVuc3Vic2NyaWJlID0gdHJ1ZTtcbiAgICBzdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcbiAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IG51bGw7XG5cbiAgICBpZiAobGFzdFRocm93bkVycm9yKSB7XG4gICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgY2F1Z2h0IGFuIGVycm9yIGR1ZSB0byBhIGJhZCBtYXBTdGF0ZSBmdW5jdGlvbiwgYnV0IHRoZVxuICAgICAgLy8gcGFyZW50IHJlLXJlbmRlcmVkIHdpdGhvdXQgdGhpcyBjb21wb25lbnQgYW5kIHdlJ3JlIGFib3V0IHRvIHVubW91bnQuXG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYXMgbG9uZyBhcyB3ZSBkbyB0b3AtZG93biBzdWJzY3JpcHRpb25zIGNvcnJlY3RseSwgYnV0XG4gICAgICAvLyBpZiB3ZSBldmVyIGRvIHRob3NlIHdyb25nLCB0aGlzIHRocm93IHdpbGwgc3VyZmFjZSB0aGUgZXJyb3IgaW4gb3VyIHRlc3RzLlxuICAgICAgLy8gSW4gdGhhdCBjYXNlLCB0aHJvdyB0aGUgZXJyb3IgZnJvbSBoZXJlIHNvIGl0IGRvZXNuJ3QgZ2V0IGxvc3QuXG4gICAgICB0aHJvdyBsYXN0VGhyb3duRXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1bnN1YnNjcmliZVdyYXBwZXI7XG59IC8vIFJlZHVjZXIgaW5pdGlhbCBzdGF0ZSBjcmVhdGlvbiBmb3Igb3VyIHVwZGF0ZSByZWR1Y2VyXG5cblxuY29uc3QgaW5pdFN0YXRlVXBkYXRlcyA9ICgpID0+IEVNUFRZX0FSUkFZO1xuXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufVxuLyoqXHJcbiAqIEluZmVycyB0aGUgdHlwZSBvZiBwcm9wcyB0aGF0IGEgY29ubmVjdG9yIHdpbGwgaW5qZWN0IGludG8gYSBjb21wb25lbnQuXHJcbiAqL1xuXG5cbmxldCBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRQdXJlT3B0aW9uID0gZmFsc2U7XG4vKipcclxuICogQ29ubmVjdHMgYSBSZWFjdCBjb21wb25lbnQgdG8gYSBSZWR1eCBzdG9yZS5cclxuICpcclxuICogLSBXaXRob3V0IGFyZ3VtZW50cywganVzdCB3cmFwcyB0aGUgY29tcG9uZW50LCB3aXRob3V0IGNoYW5naW5nIHRoZSBiZWhhdmlvciAvIHByb3BzXHJcbiAqXHJcbiAqIC0gSWYgMiBwYXJhbXMgYXJlIHBhc3NlZCAoM3JkIHBhcmFtLCBtZXJnZVByb3BzLCBpcyBza2lwcGVkKSwgZGVmYXVsdCBiZWhhdmlvclxyXG4gKiBpcyB0byBvdmVycmlkZSBvd25Qcm9wcyAoYXMgc3RhdGVkIGluIHRoZSBkb2NzKSwgc28gd2hhdCByZW1haW5zIGlzIGV2ZXJ5dGhpbmcgdGhhdCdzXHJcbiAqIG5vdCBhIHN0YXRlIG9yIGRpc3BhdGNoIHByb3BcclxuICpcclxuICogLSBXaGVuIDNyZCBwYXJhbSBpcyBwYXNzZWQsIHdlIGRvbid0IGtub3cgaWYgb3duUHJvcHMgcHJvcGFnYXRlIGFuZCB3aGV0aGVyIHRoZXlcclxuICogc2hvdWxkIGJlIHZhbGlkIGNvbXBvbmVudCBwcm9wcywgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIG1lcmdlUHJvcHMgaW1wbGVtZW50YXRpb24uXHJcbiAqIEFzIHN1Y2gsIGl0IGlzIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZXh0ZW5kIG93blByb3BzIGludGVyZmFjZSBmcm9tIHN0YXRlIG9yXHJcbiAqIGRpc3BhdGNoIHByb3BzIG9yIGJvdGggd2hlbiBhcHBsaWNhYmxlXHJcbiAqXHJcbiAqIEBwYXJhbSBtYXBTdGF0ZVRvUHJvcHMgQSBmdW5jdGlvbiB0aGF0IGV4dHJhY3RzIHZhbHVlcyBmcm9tIHN0YXRlXHJcbiAqIEBwYXJhbSBtYXBEaXNwYXRjaFRvUHJvcHMgU2V0dXAgZm9yIGRpc3BhdGNoaW5nIGFjdGlvbnNcclxuICogQHBhcmFtIG1lcmdlUHJvcHMgT3B0aW9uYWwgY2FsbGJhY2sgdG8gbWVyZ2Ugc3RhdGUgYW5kIGRpc3BhdGNoIHByb3BzIHRvZ2V0aGVyXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBjb25uZWN0aW9uXHJcbiAqXHJcbiAqL1xuXG5mdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCB7XG4gIC8vIFRoZSBgcHVyZWAgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQsIHNvIFRTIGRvZXNuJ3QgbGlrZSB1cyBkZXN0cnVjdHVyaW5nIHRoaXMgdG8gY2hlY2sgaXRzIGV4aXN0ZW5jZS5cbiAgLy8gQHRzLWlnbm9yZVxuICBwdXJlLFxuICBhcmVTdGF0ZXNFcXVhbCA9IHN0cmljdEVxdWFsLFxuICBhcmVPd25Qcm9wc0VxdWFsID0gc2hhbGxvd0VxdWFsLFxuICBhcmVTdGF0ZVByb3BzRXF1YWwgPSBzaGFsbG93RXF1YWwsXG4gIGFyZU1lcmdlZFByb3BzRXF1YWwgPSBzaGFsbG93RXF1YWwsXG4gIC8vIHVzZSBSZWFjdCdzIGZvcndhcmRSZWYgdG8gZXhwb3NlIGEgcmVmIG9mIHRoZSB3cmFwcGVkIGNvbXBvbmVudFxuICBmb3J3YXJkUmVmID0gZmFsc2UsXG4gIC8vIHRoZSBjb250ZXh0IGNvbnN1bWVyIHRvIHVzZVxuICBjb250ZXh0ID0gUmVhY3RSZWR1eENvbnRleHRcbn0gPSB7fSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChwdXJlICE9PSB1bmRlZmluZWQgJiYgIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZFB1cmVPcHRpb24pIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZFB1cmVPcHRpb24gPSB0cnVlO1xuICAgICAgd2FybmluZygnVGhlIGBwdXJlYCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZC4gYGNvbm5lY3RgIGlzIG5vdyBhbHdheXMgYSBcInB1cmUvbWVtb2l6ZWRcIiBjb21wb25lbnQnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBDb250ZXh0ID0gY29udGV4dDtcbiAgY29uc3QgaW5pdE1hcFN0YXRlVG9Qcm9wcyA9IG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcnkobWFwU3RhdGVUb1Byb3BzKTtcbiAgY29uc3QgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcnkobWFwRGlzcGF0Y2hUb1Byb3BzKTtcbiAgY29uc3QgaW5pdE1lcmdlUHJvcHMgPSBtZXJnZVByb3BzRmFjdG9yeShtZXJnZVByb3BzKTtcbiAgY29uc3Qgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzID0gQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpO1xuXG4gIGNvbnN0IHdyYXBXaXRoQ29ubmVjdCA9IFdyYXBwZWRDb21wb25lbnQgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFpc1ZhbGlkRWxlbWVudFR5cGUoV3JhcHBlZENvbXBvbmVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IG11c3QgcGFzcyBhIGNvbXBvbmVudCB0byB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgY29ubmVjdC4gSW5zdGVhZCByZWNlaXZlZCAke3N0cmluZ2lmeUNvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB3cmFwcGVkQ29tcG9uZW50TmFtZSA9IFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gYENvbm5lY3QoJHt3cmFwcGVkQ29tcG9uZW50TmFtZX0pYDtcbiAgICBjb25zdCBzZWxlY3RvckZhY3RvcnlPcHRpb25zID0ge1xuICAgICAgc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxuICAgICAgZGlzcGxheU5hbWUsXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZSxcbiAgICAgIFdyYXBwZWRDb21wb25lbnQsXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpbml0TWFwU3RhdGVUb1Byb3BzLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcbiAgICAgIGluaXRNZXJnZVByb3BzLFxuICAgICAgYXJlU3RhdGVzRXF1YWwsXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWwsXG4gICAgICBhcmVPd25Qcm9wc0VxdWFsLFxuICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBDb25uZWN0RnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgIGNvbnN0IFtwcm9wc0NvbnRleHQsIHJlYWN0UmVkdXhGb3J3YXJkZWRSZWYsIHdyYXBwZXJQcm9wc10gPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gRGlzdGluZ3Vpc2ggYmV0d2VlbiBhY3R1YWwgXCJkYXRhXCIgcHJvcHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGUgd3JhcHBlciBjb21wb25lbnQsXG4gICAgICAgIC8vIGFuZCB2YWx1ZXMgbmVlZGVkIHRvIGNvbnRyb2wgYmVoYXZpb3IgKGZvcndhcmRlZCByZWZzLCBhbHRlcm5hdGUgY29udGV4dCBpbnN0YW5jZXMpLlxuICAgICAgICAvLyBUbyBtYWludGFpbiB0aGUgd3JhcHBlclByb3BzIG9iamVjdCByZWZlcmVuY2UsIG1lbW9pemUgdGhpcyBkZXN0cnVjdHVyaW5nLlxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcmVhY3RSZWR1eEZvcndhcmRlZFJlZlxuICAgICAgICB9ID0gcHJvcHMsXG4gICAgICAgICAgICAgIHdyYXBwZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gICAgICAgIHJldHVybiBbcHJvcHMuY29udGV4dCwgcmVhY3RSZWR1eEZvcndhcmRlZFJlZiwgd3JhcHBlclByb3BzXTtcbiAgICAgIH0sIFtwcm9wc10pO1xuICAgICAgY29uc3QgQ29udGV4dFRvVXNlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIC8vIFVzZXJzIG1heSBvcHRpb25hbGx5IHBhc3MgaW4gYSBjdXN0b20gY29udGV4dCBpbnN0YW5jZSB0byB1c2UgaW5zdGVhZCBvZiBvdXIgUmVhY3RSZWR1eENvbnRleHQuXG4gICAgICAgIC8vIE1lbW9pemUgdGhlIGNoZWNrIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBjb250ZXh0IGluc3RhbmNlIHdlIHNob3VsZCB1c2UuXG4gICAgICAgIHJldHVybiBwcm9wc0NvbnRleHQgJiYgcHJvcHNDb250ZXh0LkNvbnN1bWVyICYmIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaXNDb250ZXh0Q29uc3VtZXIoIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KHByb3BzQ29udGV4dC5Db25zdW1lciwgbnVsbCkpID8gcHJvcHNDb250ZXh0IDogQ29udGV4dDtcbiAgICAgIH0sIFtwcm9wc0NvbnRleHQsIENvbnRleHRdKTsgLy8gUmV0cmlldmUgdGhlIHN0b3JlIGFuZCBhbmNlc3RvciBzdWJzY3JpcHRpb24gdmlhIGNvbnRleHQsIGlmIGF2YWlsYWJsZVxuXG4gICAgICBjb25zdCBjb250ZXh0VmFsdWUgPSBSZWFjdC51c2VDb250ZXh0KENvbnRleHRUb1VzZSk7IC8vIFRoZSBzdG9yZSBfbXVzdF8gZXhpc3QgYXMgZWl0aGVyIGEgcHJvcCBvciBpbiBjb250ZXh0LlxuICAgICAgLy8gV2UnbGwgY2hlY2sgdG8gc2VlIGlmIGl0IF9sb29rc18gbGlrZSBhIFJlZHV4IHN0b3JlIGZpcnN0LlxuICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcGFzcyB0aHJvdWdoIGEgYHN0b3JlYCBwcm9wIHRoYXQgaXMganVzdCBhIHBsYWluIHZhbHVlLlxuXG4gICAgICBjb25zdCBkaWRTdG9yZUNvbWVGcm9tUHJvcHMgPSBCb29sZWFuKHByb3BzLnN0b3JlKSAmJiBCb29sZWFuKHByb3BzLnN0b3JlLmdldFN0YXRlKSAmJiBCb29sZWFuKHByb3BzLnN0b3JlLmRpc3BhdGNoKTtcbiAgICAgIGNvbnN0IGRpZFN0b3JlQ29tZUZyb21Db250ZXh0ID0gQm9vbGVhbihjb250ZXh0VmFsdWUpICYmIEJvb2xlYW4oY29udGV4dFZhbHVlLnN0b3JlKTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIWRpZFN0b3JlQ29tZUZyb21Qcm9wcyAmJiAhZGlkU3RvcmVDb21lRnJvbUNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBcInN0b3JlXCIgaW4gdGhlIGNvbnRleHQgb2YgYCArIGBcIiR7ZGlzcGxheU5hbWV9XCIuIEVpdGhlciB3cmFwIHRoZSByb290IGNvbXBvbmVudCBpbiBhIDxQcm92aWRlcj4sIGAgKyBgb3IgcGFzcyBhIGN1c3RvbSBSZWFjdCBjb250ZXh0IHByb3ZpZGVyIHRvIDxQcm92aWRlcj4gYW5kIHRoZSBjb3JyZXNwb25kaW5nIGAgKyBgUmVhY3QgY29udGV4dCBjb25zdW1lciB0byAke2Rpc3BsYXlOYW1lfSBpbiBjb25uZWN0IG9wdGlvbnMuYCk7XG4gICAgICB9IC8vIEJhc2VkIG9uIHRoZSBwcmV2aW91cyBjaGVjaywgb25lIG9mIHRoZXNlIG11c3QgYmUgdHJ1ZVxuXG5cbiAgICAgIGNvbnN0IHN0b3JlID0gZGlkU3RvcmVDb21lRnJvbVByb3BzID8gcHJvcHMuc3RvcmUgOiBjb250ZXh0VmFsdWUuc3RvcmU7XG4gICAgICBjb25zdCBnZXRTZXJ2ZXJTdGF0ZSA9IGRpZFN0b3JlQ29tZUZyb21Db250ZXh0ID8gY29udGV4dFZhbHVlLmdldFNlcnZlclN0YXRlIDogc3RvcmUuZ2V0U3RhdGU7XG4gICAgICBjb25zdCBjaGlsZFByb3BzU2VsZWN0b3IgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICAgICAgLy8gVGhlIGNoaWxkIHByb3BzIHNlbGVjdG9yIG5lZWRzIHRoZSBzdG9yZSByZWZlcmVuY2UgYXMgYW4gaW5wdXQuXG4gICAgICAgIC8vIFJlLWNyZWF0ZSB0aGlzIHNlbGVjdG9yIHdoZW5ldmVyIHRoZSBzdG9yZSBjaGFuZ2VzLlxuICAgICAgICByZXR1cm4gZGVmYXVsdFNlbGVjdG9yRmFjdG9yeShzdG9yZS5kaXNwYXRjaCwgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyk7XG4gICAgICB9LCBbc3RvcmVdKTtcbiAgICAgIGNvbnN0IFtzdWJzY3JpcHRpb24sIG5vdGlmeU5lc3RlZFN1YnNdID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm4gTk9fU1VCU0NSSVBUSU9OX0FSUkFZOyAvLyBUaGlzIFN1YnNjcmlwdGlvbidzIHNvdXJjZSBzaG91bGQgbWF0Y2ggd2hlcmUgc3RvcmUgY2FtZSBmcm9tOiBwcm9wcyB2cy4gY29udGV4dC4gQSBjb21wb25lbnRcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMgc2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxuXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNyZWF0ZVN1YnNjcmlwdGlvbihzdG9yZSwgZGlkU3RvcmVDb21lRnJvbVByb3BzID8gdW5kZWZpbmVkIDogY29udGV4dFZhbHVlLnN1YnNjcmlwdGlvbik7IC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBsaWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzIHVubW91bnRlZCBpblxuICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcCwgd2hlcmUgYHN1YnNjcmlwdGlvbmAgd2lsbCB0aGVuIGJlIG51bGwuIFRoaXMgY2FuXG4gICAgICAgIC8vIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYgU3Vic2NyaXB0aW9uJ3MgbGlzdGVuZXJzIGxvZ2ljIGlzIGNoYW5nZWQgdG8gbm90IGNhbGwgbGlzdGVuZXJzXG4gICAgICAgIC8vIHRoYXQgaGF2ZSBiZWVuIHVuc3Vic2NyaWJlZCBpbiB0aGUgIG1pZGRsZSBvZiB0aGUgbm90aWZpY2F0aW9uIGxvb3AuXG5cbiAgICAgICAgY29uc3Qgbm90aWZ5TmVzdGVkU3VicyA9IHN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzLmJpbmQoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgcmV0dXJuIFtzdWJzY3JpcHRpb24sIG5vdGlmeU5lc3RlZFN1YnNdO1xuICAgICAgfSwgW3N0b3JlLCBkaWRTdG9yZUNvbWVGcm9tUHJvcHMsIGNvbnRleHRWYWx1ZV0pOyAvLyBEZXRlcm1pbmUgd2hhdCB7c3RvcmUsIHN1YnNjcmlwdGlvbn0gdmFsdWUgc2hvdWxkIGJlIHB1dCBpbnRvIG5lc3RlZCBjb250ZXh0LCBpZiBuZWNlc3NhcnksXG4gICAgICAvLyBhbmQgbWVtb2l6ZSB0aGF0IHZhbHVlIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvbnRleHQgdXBkYXRlcy5cblxuICAgICAgY29uc3Qgb3ZlcnJpZGRlbkNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoZGlkU3RvcmVDb21lRnJvbVByb3BzKSB7XG4gICAgICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgZGlyZWN0bHkgc3Vic2NyaWJlZCB0byBhIHN0b3JlIGZyb20gcHJvcHMuXG4gICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBkZXNjZW5kYW50cyByZWFkaW5nIGZyb20gdGhpcyBzdG9yZSAtIHBhc3MgZG93biB3aGF0ZXZlclxuICAgICAgICAgIC8vIHRoZSBleGlzdGluZyBjb250ZXh0IHZhbHVlIGlzIGZyb20gdGhlIG5lYXJlc3QgY29ubmVjdGVkIGFuY2VzdG9yLlxuICAgICAgICAgIHJldHVybiBjb250ZXh0VmFsdWU7XG4gICAgICAgIH0gLy8gT3RoZXJ3aXNlLCBwdXQgdGhpcyBjb21wb25lbnQncyBzdWJzY3JpcHRpb24gaW5zdGFuY2UgaW50byBjb250ZXh0LCBzbyB0aGF0XG4gICAgICAgIC8vIGNvbm5lY3RlZCBkZXNjZW5kYW50cyB3b24ndCB1cGRhdGUgdW50aWwgYWZ0ZXIgdGhpcyBjb21wb25lbnQgaXMgZG9uZVxuXG5cbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBjb250ZXh0VmFsdWUsIHtcbiAgICAgICAgICBzdWJzY3JpcHRpb25cbiAgICAgICAgfSk7XG4gICAgICB9LCBbZGlkU3RvcmVDb21lRnJvbVByb3BzLCBjb250ZXh0VmFsdWUsIHN1YnNjcmlwdGlvbl0pOyAvLyBTZXQgdXAgcmVmcyB0byBjb29yZGluYXRlIHZhbHVlcyBiZXR3ZWVuIHRoZSBzdWJzY3JpcHRpb24gZWZmZWN0IGFuZCB0aGUgcmVuZGVyIGxvZ2ljXG5cbiAgICAgIGNvbnN0IGxhc3RDaGlsZFByb3BzID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICBjb25zdCBsYXN0V3JhcHBlclByb3BzID0gUmVhY3QudXNlUmVmKHdyYXBwZXJQcm9wcyk7XG4gICAgICBjb25zdCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlID0gUmVhY3QudXNlUmVmKCk7XG4gICAgICBjb25zdCByZW5kZXJJc1NjaGVkdWxlZCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgICBjb25zdCBpc1Byb2Nlc3NpbmdEaXNwYXRjaCA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gICAgICBjb25zdCBpc01vdW50ZWQgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgICAgY29uc3QgbGF0ZXN0U3Vic2NyaXB0aW9uQ2FsbGJhY2tFcnJvciA9IFJlYWN0LnVzZVJlZigpO1xuICAgICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlzTW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBpc01vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgfSwgW10pO1xuICAgICAgY29uc3QgYWN0dWFsQ2hpbGRQcm9wc1NlbGVjdG9yID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFRyaWNreSBsb2dpYyBoZXJlOlxuICAgICAgICAgIC8vIC0gVGhpcyByZW5kZXIgbWF5IGhhdmUgYmVlbiB0cmlnZ2VyZWQgYnkgYSBSZWR1eCBzdG9yZSB1cGRhdGUgdGhhdCBwcm9kdWNlZCBuZXcgY2hpbGQgcHJvcHNcbiAgICAgICAgICAvLyAtIEhvd2V2ZXIsIHdlIG1heSBoYXZlIGdvdHRlbiBuZXcgd3JhcHBlciBwcm9wcyBhZnRlciB0aGF0XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBuZXcgY2hpbGQgcHJvcHMsIGFuZCB0aGUgc2FtZSB3cmFwcGVyIHByb3BzLCB3ZSBrbm93IHdlIHNob3VsZCB1c2UgdGhlIG5ldyBjaGlsZCBwcm9wcyBhcy1pcy5cbiAgICAgICAgICAvLyBCdXQsIGlmIHdlIGhhdmUgbmV3IHdyYXBwZXIgcHJvcHMsIHRob3NlIG1pZ2h0IGNoYW5nZSB0aGUgY2hpbGQgcHJvcHMsIHNvIHdlIGhhdmUgdG8gcmVjYWxjdWxhdGUgdGhpbmdzLlxuICAgICAgICAgIC8vIFNvLCB3ZSdsbCB1c2UgdGhlIGNoaWxkIHByb3BzIGZyb20gc3RvcmUgdXBkYXRlIG9ubHkgaWYgdGhlIHdyYXBwZXIgcHJvcHMgYXJlIHRoZSBzYW1lIGFzIGxhc3QgdGltZS5cbiAgICAgICAgICBpZiAoY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ICYmIHdyYXBwZXJQcm9wcyA9PT0gbGFzdFdyYXBwZXJQcm9wcy5jdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50O1xuICAgICAgICAgIH0gLy8gVE9ETyBXZSdyZSByZWFkaW5nIHRoZSBzdG9yZSBkaXJlY3RseSBpbiByZW5kZXIoKSBoZXJlLiBCYWQgaWRlYT9cbiAgICAgICAgICAvLyBUaGlzIHdpbGwgbGlrZWx5IGNhdXNlIEJhZCBUaGluZ3MgKFRNKSB0byBoYXBwZW4gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyB0aGlzIGJlY2F1c2Ugb24gcmVuZGVycyBfbm90XyBjYXVzZWQgYnkgc3RvcmUgdXBkYXRlcywgd2UgbmVlZCB0aGUgbGF0ZXN0IHN0b3JlIHN0YXRlXG4gICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNoaWxkIHByb3BzIHNob3VsZCBiZS5cblxuXG4gICAgICAgICAgcmV0dXJuIGNoaWxkUHJvcHNTZWxlY3RvcihzdG9yZS5nZXRTdGF0ZSgpLCB3cmFwcGVyUHJvcHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICAgIH0sIFtzdG9yZSwgd3JhcHBlclByb3BzXSk7IC8vIFdlIG5lZWQgdGhpcyB0byBleGVjdXRlIHN5bmNocm9ub3VzbHkgZXZlcnkgdGltZSB3ZSByZS1yZW5kZXIuIEhvd2V2ZXIsIFJlYWN0IHdhcm5zXG4gICAgICAvLyBhYm91dCB1c2VMYXlvdXRFZmZlY3QgaW4gU1NSLCBzbyB3ZSB0cnkgdG8gZGV0ZWN0IGVudmlyb25tZW50IGFuZCBmYWxsIGJhY2sgdG9cbiAgICAgIC8vIGp1c3QgdXNlRWZmZWN0IGluc3RlYWQgdG8gYXZvaWQgdGhlIHdhcm5pbmcsIHNpbmNlIG5laXRoZXIgd2lsbCBydW4gYW55d2F5LlxuXG4gICAgICBjb25zdCBzdWJzY3JpYmVGb3JSZWFjdCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpYmUgPSByZWFjdExpc3RlbmVyID0+IHtcbiAgICAgICAgICBpZiAoIXN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdWJzY3JpYmVVcGRhdGVzKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcywgc3RvcmUsIHN1YnNjcmlwdGlvbiwgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGNoaWxkUHJvcHNTZWxlY3RvciwgbGFzdFdyYXBwZXJQcm9wcywgbGFzdENoaWxkUHJvcHMsIHJlbmRlcklzU2NoZWR1bGVkLCBpc01vdW50ZWQsIGNoaWxkUHJvcHNGcm9tU3RvcmVVcGRhdGUsIG5vdGlmeU5lc3RlZFN1YnMsIHJlYWN0TGlzdGVuZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzdWJzY3JpYmU7XG4gICAgICB9LCBbc3Vic2NyaXB0aW9uXSk7XG4gICAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0V2l0aEFyZ3MoY2FwdHVyZVdyYXBwZXJQcm9wcywgW2xhc3RXcmFwcGVyUHJvcHMsIGxhc3RDaGlsZFByb3BzLCByZW5kZXJJc1NjaGVkdWxlZCwgd3JhcHBlclByb3BzLCBjaGlsZFByb3BzRnJvbVN0b3JlVXBkYXRlLCBub3RpZnlOZXN0ZWRTdWJzXSk7XG4gICAgICBsZXQgYWN0dWFsQ2hpbGRQcm9wcztcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYWN0dWFsQ2hpbGRQcm9wcyA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlKCAvLyBUT0RPIFdlJ3JlIHBhc3NpbmcgdGhyb3VnaCBhIGJpZyB3cmFwcGVyIHRoYXQgZG9lcyBhIGJ1bmNoIG9mIGV4dHJhIHNpZGUgZWZmZWN0cyBiZXNpZGVzIHN1YnNjcmliaW5nXG4gICAgICAgIHN1YnNjcmliZUZvclJlYWN0LCAvLyBUT0RPIFRoaXMgaXMgaW5jcmVkaWJseSBoYWNreS4gV2UndmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhlIHN0b3JlIHVwZGF0ZSBhbmQgY2FsY3VsYXRlZCBuZXcgY2hpbGQgcHJvcHMsXG4gICAgICAgIC8vIFRPRE8gYW5kIHdlJ3JlIGp1c3QgcGFzc2luZyB0aGF0IHRocm91Z2ggc28gaXQgdHJpZ2dlcnMgYSByZS1yZW5kZXIgZm9yIHVzIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gYHVTRVNgLlxuICAgICAgICBhY3R1YWxDaGlsZFByb3BzU2VsZWN0b3IsIGdldFNlcnZlclN0YXRlID8gKCkgPT4gY2hpbGRQcm9wc1NlbGVjdG9yKGdldFNlcnZlclN0YXRlKCksIHdyYXBwZXJQcm9wcykgOiBhY3R1YWxDaGlsZFByb3BzU2VsZWN0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yLmN1cnJlbnQpIHtcbiAgICAgICAgICA7XG4gICAgICAgICAgZXJyLm1lc3NhZ2UgKz0gYFxcblRoZSBlcnJvciBtYXkgYmUgY29ycmVsYXRlZCB3aXRoIHRoaXMgcHJldmlvdXMgZXJyb3I6XFxuJHtsYXRlc3RTdWJzY3JpcHRpb25DYWxsYmFja0Vycm9yLmN1cnJlbnQuc3RhY2t9XFxuXFxuYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxhdGVzdFN1YnNjcmlwdGlvbkNhbGxiYWNrRXJyb3IuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY2hpbGRQcm9wc0Zyb21TdG9yZVVwZGF0ZS5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICBsYXN0Q2hpbGRQcm9wcy5jdXJyZW50ID0gYWN0dWFsQ2hpbGRQcm9wcztcbiAgICAgIH0pOyAvLyBOb3cgdGhhdCBhbGwgdGhhdCdzIGRvbmUsIHdlIGNhbiBmaW5hbGx5IHRyeSB0byBhY3R1YWxseSByZW5kZXIgdGhlIGNoaWxkIGNvbXBvbmVudC5cbiAgICAgIC8vIFdlIG1lbW9pemUgdGhlIGVsZW1lbnRzIGZvciB0aGUgcmVuZGVyZWQgY2hpbGQgY29tcG9uZW50IGFzIGFuIG9wdGltaXphdGlvbi5cblxuICAgICAgY29uc3QgcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIF9leHRlbmRzKHt9LCBhY3R1YWxDaGlsZFByb3BzLCB7XG4gICAgICAgICAgICByZWY6IHJlYWN0UmVkdXhGb3J3YXJkZWRSZWZcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcbiAgICAgIH0sIFtyZWFjdFJlZHV4Rm9yd2FyZGVkUmVmLCBXcmFwcGVkQ29tcG9uZW50LCBhY3R1YWxDaGlsZFByb3BzXSk7IC8vIElmIFJlYWN0IHNlZXMgdGhlIGV4YWN0IHNhbWUgZWxlbWVudCByZWZlcmVuY2UgYXMgbGFzdCB0aW1lLCBpdCBiYWlscyBvdXQgb2YgcmUtcmVuZGVyaW5nXG4gICAgICAvLyB0aGF0IGNoaWxkLCBzYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIFJlYWN0Lm1lbW8oKSBvciByZXR1cm5lZCBmYWxzZSBmcm9tIHNob3VsZENvbXBvbmVudFVwZGF0ZS5cblxuICAgICAgY29uc3QgcmVuZGVyZWRDaGlsZCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBjb21wb25lbnQgaXMgc3Vic2NyaWJlZCB0byBzdG9yZSB1cGRhdGVzLCB3ZSBuZWVkIHRvIHBhc3MgaXRzIG93blxuICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbiBpbnN0YW5jZSBkb3duIHRvIG91ciBkZXNjZW5kYW50cy4gVGhhdCBtZWFucyByZW5kZXJpbmcgdGhlIHNhbWVcbiAgICAgICAgICAvLyBDb250ZXh0IGluc3RhbmNlLCBhbmQgcHV0dGluZyBhIGRpZmZlcmVudCB2YWx1ZSBpbnRvIHRoZSBjb250ZXh0LlxuICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZXh0VG9Vc2UuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgIHZhbHVlOiBvdmVycmlkZGVuQ29udGV4dFZhbHVlXG4gICAgICAgICAgfSwgcmVuZGVyZWRXcmFwcGVkQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQ7XG4gICAgICB9LCBbQ29udGV4dFRvVXNlLCByZW5kZXJlZFdyYXBwZWRDb21wb25lbnQsIG92ZXJyaWRkZW5Db250ZXh0VmFsdWVdKTtcbiAgICAgIHJldHVybiByZW5kZXJlZENoaWxkO1xuICAgIH1cblxuICAgIGNvbnN0IF9Db25uZWN0ID0gUmVhY3QubWVtbyhDb25uZWN0RnVuY3Rpb24pO1xuXG4gICAgLy8gQWRkIGEgaGFja3kgY2FzdCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCB0eXBlXG4gICAgY29uc3QgQ29ubmVjdCA9IF9Db25uZWN0O1xuICAgIENvbm5lY3QuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XG4gICAgQ29ubmVjdC5kaXNwbGF5TmFtZSA9IENvbm5lY3RGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuXG4gICAgaWYgKGZvcndhcmRSZWYpIHtcbiAgICAgIGNvbnN0IF9mb3J3YXJkZWQgPSBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIGZvcndhcmRDb25uZWN0UmVmKHByb3BzLCByZWYpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29ubmVjdCwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgcmVhY3RSZWR1eEZvcndhcmRlZFJlZjogcmVmXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmb3J3YXJkZWQgPSBfZm9yd2FyZGVkO1xuICAgICAgZm9yd2FyZGVkLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICBmb3J3YXJkZWQuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XG4gICAgICByZXR1cm4gaG9pc3RTdGF0aWNzKGZvcndhcmRlZCwgV3JhcHBlZENvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvaXN0U3RhdGljcyhDb25uZWN0LCBXcmFwcGVkQ29tcG9uZW50KTtcbiAgfTtcblxuICByZXR1cm4gd3JhcFdpdGhDb25uZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB2ZXJpZnlQbGFpbk9iamVjdCBmcm9tICcuLi91dGlscy92ZXJpZnlQbGFpbk9iamVjdCc7XG5pbXBvcnQgeyBjcmVhdGVJbnZhbGlkQXJnRmFjdG9yeSB9IGZyb20gJy4vaW52YWxpZEFyZ0ZhY3RvcnknO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvd25Qcm9wcywgc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRNZXJnZVByb3BzUHJveHkoZGlzcGF0Y2gsIHtcbiAgICBkaXNwbGF5TmFtZSxcbiAgICBhcmVNZXJnZWRQcm9wc0VxdWFsXG4gIH0pIHtcbiAgICBsZXQgaGFzUnVuT25jZSA9IGZhbHNlO1xuICAgIGxldCBtZXJnZWRQcm9wcztcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gICAgICBjb25zdCBuZXh0TWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcblxuICAgICAgaWYgKGhhc1J1bk9uY2UpIHtcbiAgICAgICAgaWYgKCFhcmVNZXJnZWRQcm9wc0VxdWFsKG5leHRNZXJnZWRQcm9wcywgbWVyZ2VkUHJvcHMpKSBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhc1J1bk9uY2UgPSB0cnVlO1xuICAgICAgICBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHZlcmlmeVBsYWluT2JqZWN0KG1lcmdlZFByb3BzLCBkaXNwbGF5TmFtZSwgJ21lcmdlUHJvcHMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lcmdlZFByb3BzO1xuICAgIH07XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VQcm9wc0ZhY3RvcnkobWVyZ2VQcm9wcykge1xuICByZXR1cm4gIW1lcmdlUHJvcHMgPyAoKSA9PiBkZWZhdWx0TWVyZ2VQcm9wcyA6IHR5cGVvZiBtZXJnZVByb3BzID09PSAnZnVuY3Rpb24nID8gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIDogY3JlYXRlSW52YWxpZEFyZ0ZhY3RvcnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnKTtcbn0iLCAiaW1wb3J0IHsgZ2V0QmF0Y2ggfSBmcm9tICcuL2JhdGNoJzsgLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xuLy8gd2VsbCBhcyBuZXN0aW5nIHN1YnNjcmlwdGlvbnMgb2YgZGVzY2VuZGFudCBjb21wb25lbnRzLCBzbyB0aGF0IHdlIGNhbiBlbnN1cmUgdGhlXG4vLyBhbmNlc3RvciBjb21wb25lbnRzIHJlLXJlbmRlciBiZWZvcmUgZGVzY2VuZGFudHNcblxuZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCkge1xuICBjb25zdCBiYXRjaCA9IGdldEJhdGNoKCk7XG4gIGxldCBmaXJzdCA9IG51bGw7XG4gIGxldCBsYXN0ID0gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBjbGVhcigpIHtcbiAgICAgIGZpcnN0ID0gbnVsbDtcbiAgICAgIGxhc3QgPSBudWxsO1xuICAgIH0sXG5cbiAgICBub3RpZnkoKSB7XG4gICAgICBiYXRjaCgoKSA9PiB7XG4gICAgICAgIGxldCBsaXN0ZW5lciA9IGZpcnN0O1xuXG4gICAgICAgIHdoaWxlIChsaXN0ZW5lcikge1xuICAgICAgICAgIGxpc3RlbmVyLmNhbGxiYWNrKCk7XG4gICAgICAgICAgbGlzdGVuZXIgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgZ2V0KCkge1xuICAgICAgbGV0IGxpc3RlbmVycyA9IFtdO1xuICAgICAgbGV0IGxpc3RlbmVyID0gZmlyc3Q7XG5cbiAgICAgIHdoaWxlIChsaXN0ZW5lcikge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIGxpc3RlbmVyID0gbGlzdGVuZXIubmV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpc3RlbmVycztcbiAgICB9LFxuXG4gICAgc3Vic2NyaWJlKGNhbGxiYWNrKSB7XG4gICAgICBsZXQgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgICAgIGxldCBsaXN0ZW5lciA9IGxhc3QgPSB7XG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICBwcmV2OiBsYXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAobGlzdGVuZXIucHJldikge1xuICAgICAgICBsaXN0ZW5lci5wcmV2Lm5leHQgPSBsaXN0ZW5lcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpcnN0ID0gbGlzdGVuZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQgfHwgZmlyc3QgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyLm5leHQpIHtcbiAgICAgICAgICBsaXN0ZW5lci5uZXh0LnByZXYgPSBsaXN0ZW5lci5wcmV2O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3QgPSBsaXN0ZW5lci5wcmV2O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyLnByZXYpIHtcbiAgICAgICAgICBsaXN0ZW5lci5wcmV2Lm5leHQgPSBsaXN0ZW5lci5uZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpcnN0ID0gbGlzdGVuZXIubmV4dDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgfTtcbn1cblxuY29uc3QgbnVsbExpc3RlbmVycyA9IHtcbiAgbm90aWZ5KCkge30sXG5cbiAgZ2V0OiAoKSA9PiBbXVxufTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yikge1xuICBsZXQgdW5zdWJzY3JpYmU7XG4gIGxldCBsaXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzOyAvLyBSZWFzb25zIHRvIGtlZXAgdGhlIHN1YnNjcmlwdGlvbiBhY3RpdmVcblxuICBsZXQgc3Vic2NyaXB0aW9uc0Ftb3VudCA9IDA7IC8vIElzIHRoaXMgc3BlY2lmaWMgc3Vic2NyaXB0aW9uIHN1YnNjcmliZWQgKG9yIG9ubHkgbmVzdGVkIG9uZXM/KVxuXG4gIGxldCBzZWxmU3Vic2NyaWJlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGFkZE5lc3RlZFN1YihsaXN0ZW5lcikge1xuICAgIHRyeVN1YnNjcmliZSgpO1xuICAgIGNvbnN0IGNsZWFudXBMaXN0ZW5lciA9IGxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpOyAvLyBjbGVhbnVwIG5lc3RlZCBzdWJcblxuICAgIGxldCByZW1vdmVkID0gZmFsc2U7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICghcmVtb3ZlZCkge1xuICAgICAgICByZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cExpc3RlbmVyKCk7XG4gICAgICAgIHRyeVVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XG4gICAgbGlzdGVuZXJzLm5vdGlmeSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2hhbmdlV3JhcHBlcigpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uLm9uU3RhdGVDaGFuZ2UpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xuICAgIHJldHVybiBzZWxmU3Vic2NyaWJlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcbiAgICBzdWJzY3JpcHRpb25zQW1vdW50Kys7XG5cbiAgICBpZiAoIXVuc3Vic2NyaWJlKSB7XG4gICAgICB1bnN1YnNjcmliZSA9IHBhcmVudFN1YiA/IHBhcmVudFN1Yi5hZGROZXN0ZWRTdWIoaGFuZGxlQ2hhbmdlV3JhcHBlcikgOiBzdG9yZS5zdWJzY3JpYmUoaGFuZGxlQ2hhbmdlV3JhcHBlcik7XG4gICAgICBsaXN0ZW5lcnMgPSBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cnlVbnN1YnNjcmliZSgpIHtcbiAgICBzdWJzY3JpcHRpb25zQW1vdW50LS07XG5cbiAgICBpZiAodW5zdWJzY3JpYmUgJiYgc3Vic2NyaXB0aW9uc0Ftb3VudCA9PT0gMCkge1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIHVuc3Vic2NyaWJlID0gdW5kZWZpbmVkO1xuICAgICAgbGlzdGVuZXJzLmNsZWFyKCk7XG4gICAgICBsaXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVN1YnNjcmliZVNlbGYoKSB7XG4gICAgaWYgKCFzZWxmU3Vic2NyaWJlZCkge1xuICAgICAgc2VsZlN1YnNjcmliZWQgPSB0cnVlO1xuICAgICAgdHJ5U3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmVTZWxmKCkge1xuICAgIGlmIChzZWxmU3Vic2NyaWJlZCkge1xuICAgICAgc2VsZlN1YnNjcmliZWQgPSBmYWxzZTtcbiAgICAgIHRyeVVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0ge1xuICAgIGFkZE5lc3RlZFN1YixcbiAgICBub3RpZnlOZXN0ZWRTdWJzLFxuICAgIGhhbmRsZUNoYW5nZVdyYXBwZXIsXG4gICAgaXNTdWJzY3JpYmVkLFxuICAgIHRyeVN1YnNjcmliZTogdHJ5U3Vic2NyaWJlU2VsZixcbiAgICB0cnlVbnN1YnNjcmliZTogdHJ5VW5zdWJzY3JpYmVTZWxmLFxuICAgIGdldExpc3RlbmVyczogKCkgPT4gbGlzdGVuZXJzXG4gIH07XG4gIHJldHVybiBzdWJzY3JpcHRpb247XG59IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8gUmVhY3QgY3VycmVudGx5IHRocm93cyBhIHdhcm5pbmcgd2hlbiB1c2luZyB1c2VMYXlvdXRFZmZlY3Qgb24gdGhlIHNlcnZlci5cbi8vIFRvIGdldCBhcm91bmQgaXQsIHdlIGNhbiBjb25kaXRpb25hbGx5IHVzZUVmZmVjdCBvbiB0aGUgc2VydmVyIChuby1vcCkgYW5kXG4vLyB1c2VMYXlvdXRFZmZlY3QgaW4gdGhlIGJyb3dzZXIuIFdlIG5lZWQgdXNlTGF5b3V0RWZmZWN0IHRvIGVuc3VyZSB0aGUgc3RvcmVcbi8vIHN1YnNjcmlwdGlvbiBjYWxsYmFjayBhbHdheXMgaGFzIHRoZSBzZWxlY3RvciBmcm9tIHRoZSBsYXRlc3QgcmVuZGVyIGNvbW1pdFxuLy8gYXZhaWxhYmxlLCBvdGhlcndpc2UgYSBzdG9yZSB1cGRhdGUgbWF5IGhhcHBlbiBiZXR3ZWVuIHJlbmRlciBhbmQgdGhlIGVmZmVjdCxcbi8vIHdoaWNoIG1heSBjYXVzZSBtaXNzZWQgdXBkYXRlczsgd2UgYWxzbyBtdXN0IGVuc3VyZSB0aGUgc3RvcmUgc3Vic2NyaXB0aW9uXG4vLyBpcyBjcmVhdGVkIHN5bmNocm9ub3VzbHksIG90aGVyd2lzZSBhIHN0b3JlIHVwZGF0ZSBtYXkgb2NjdXIgYmVmb3JlIHRoZVxuLy8gc3Vic2NyaXB0aW9uIGlzIGNyZWF0ZWQgYW5kIGFuIGluY29uc2lzdGVudCBzdGF0ZSBtYXkgYmUgb2JzZXJ2ZWRcbi8vIE1hdGNoZXMgbG9naWMgaW4gUmVhY3QncyBgc2hhcmVkL0V4ZWN1dGlvbkVudmlyb25tZW50YCBmaWxlXG5cbmV4cG9ydCBjb25zdCBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKTtcbmV4cG9ydCBjb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gY2FuVXNlRE9NID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0OyIsICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSZWFjdFJlZHV4Q29udGV4dCB9IGZyb20gJy4vQ29udGV4dCc7XG5pbXBvcnQgeyBjcmVhdGVTdWJzY3JpcHRpb24gfSBmcm9tICcuLi91dGlscy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4uL3V0aWxzL3VzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QnO1xuXG5mdW5jdGlvbiBQcm92aWRlcih7XG4gIHN0b3JlLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgc2VydmVyU3RhdGUsXG4gIHN0YWJpbGl0eUNoZWNrID0gJ29uY2UnLFxuICBub29wQ2hlY2sgPSAnb25jZSdcbn0pIHtcbiAgY29uc3QgY29udGV4dFZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY3JlYXRlU3Vic2NyaXB0aW9uKHN0b3JlKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcmUsXG4gICAgICBzdWJzY3JpcHRpb24sXG4gICAgICBnZXRTZXJ2ZXJTdGF0ZTogc2VydmVyU3RhdGUgPyAoKSA9PiBzZXJ2ZXJTdGF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0YWJpbGl0eUNoZWNrLFxuICAgICAgbm9vcENoZWNrXG4gICAgfTtcbiAgfSwgW3N0b3JlLCBzZXJ2ZXJTdGF0ZSwgc3RhYmlsaXR5Q2hlY2ssIG5vb3BDaGVja10pO1xuICBjb25zdCBwcmV2aW91c1N0YXRlID0gUmVhY3QudXNlTWVtbygoKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLCBbc3RvcmVdKTtcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc3Vic2NyaXB0aW9uXG4gICAgfSA9IGNvbnRleHRWYWx1ZTtcbiAgICBzdWJzY3JpcHRpb24ub25TdGF0ZUNoYW5nZSA9IHN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzO1xuICAgIHN1YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKTtcblxuICAgIGlmIChwcmV2aW91c1N0YXRlICE9PSBzdG9yZS5nZXRTdGF0ZSgpKSB7XG4gICAgICBzdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3VicygpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcbiAgICAgIHN1YnNjcmlwdGlvbi5vblN0YXRlQ2hhbmdlID0gdW5kZWZpbmVkO1xuICAgIH07XG4gIH0sIFtjb250ZXh0VmFsdWUsIHByZXZpb3VzU3RhdGVdKTtcbiAgY29uc3QgQ29udGV4dCA9IGNvbnRleHQgfHwgUmVhY3RSZWR1eENvbnRleHQ7IC8vIEB0cy1pZ25vcmUgJ0FueUFjdGlvbicgaXMgYXNzaWduYWJsZSB0byB0aGUgY29uc3RyYWludCBvZiB0eXBlICdBJywgYnV0ICdBJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlXG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gIH0sIGNoaWxkcmVuKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJvdmlkZXI7IiwgImltcG9ydCB7IFJlYWN0UmVkdXhDb250ZXh0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9Db250ZXh0JztcbmltcG9ydCB7IHVzZVJlZHV4Q29udGV4dCBhcyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0LCBjcmVhdGVSZWR1eENvbnRleHRIb29rIH0gZnJvbSAnLi91c2VSZWR1eENvbnRleHQnO1xuLyoqXHJcbiAqIEhvb2sgZmFjdG9yeSwgd2hpY2ggY3JlYXRlcyBhIGB1c2VTdG9yZWAgaG9vayBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7UmVhY3QuQ29udGV4dH0gW2NvbnRleHQ9UmVhY3RSZWR1eENvbnRleHRdIENvbnRleHQgcGFzc2VkIHRvIHlvdXIgYDxQcm92aWRlcj5gLlxyXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgYHVzZVN0b3JlYCBob29rIGJvdW5kIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdG9yZUhvb2soY29udGV4dCA9IFJlYWN0UmVkdXhDb250ZXh0KSB7XG4gIGNvbnN0IHVzZVJlZHV4Q29udGV4dCA9IC8vIEB0cy1pZ25vcmVcbiAgY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0UmVkdXhDb250ZXh0IDogLy8gQHRzLWlnbm9yZVxuICBjcmVhdGVSZWR1eENvbnRleHRIb29rKGNvbnRleHQpO1xuICByZXR1cm4gZnVuY3Rpb24gdXNlU3RvcmUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RvcmVcbiAgICB9ID0gdXNlUmVkdXhDb250ZXh0KCk7IC8vIEB0cy1pZ25vcmVcblxuICAgIHJldHVybiBzdG9yZTtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBzdG9yZS5cclxuICpcclxuICogQHJldHVybnMge2FueX0gdGhlIHJlZHV4IHN0b3JlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIGltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuICogaW1wb3J0IHsgdXNlU3RvcmUgfSBmcm9tICdyZWFjdC1yZWR1eCdcclxuICpcclxuICogZXhwb3J0IGNvbnN0IEV4YW1wbGVDb21wb25lbnQgPSAoKSA9PiB7XHJcbiAqICAgY29uc3Qgc3RvcmUgPSB1c2VTdG9yZSgpXHJcbiAqICAgcmV0dXJuIDxkaXY+e3N0b3JlLmdldFN0YXRlKCl9PC9kaXY+XHJcbiAqIH1cclxuICovXG5cbmV4cG9ydCBjb25zdCB1c2VTdG9yZSA9IC8qI19fUFVSRV9fKi9jcmVhdGVTdG9yZUhvb2soKTsiLCAiaW1wb3J0IHsgUmVhY3RSZWR1eENvbnRleHQgfSBmcm9tICcuLi9jb21wb25lbnRzL0NvbnRleHQnO1xuaW1wb3J0IHsgdXNlU3RvcmUgYXMgdXNlRGVmYXVsdFN0b3JlLCBjcmVhdGVTdG9yZUhvb2sgfSBmcm9tICcuL3VzZVN0b3JlJztcbi8qKlxyXG4gKiBIb29rIGZhY3RvcnksIHdoaWNoIGNyZWF0ZXMgYSBgdXNlRGlzcGF0Y2hgIGhvb2sgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge1JlYWN0LkNvbnRleHR9IFtjb250ZXh0PVJlYWN0UmVkdXhDb250ZXh0XSBDb250ZXh0IHBhc3NlZCB0byB5b3VyIGA8UHJvdmlkZXI+YC5cclxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGB1c2VEaXNwYXRjaGAgaG9vayBib3VuZCB0byB0aGUgc3BlY2lmaWVkIGNvbnRleHQuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hIb29rKGNvbnRleHQgPSBSZWFjdFJlZHV4Q29udGV4dCkge1xuICBjb25zdCB1c2VTdG9yZSA9IC8vIEB0cy1pZ25vcmVcbiAgY29udGV4dCA9PT0gUmVhY3RSZWR1eENvbnRleHQgPyB1c2VEZWZhdWx0U3RvcmUgOiBjcmVhdGVTdG9yZUhvb2soY29udGV4dCk7XG4gIHJldHVybiBmdW5jdGlvbiB1c2VEaXNwYXRjaCgpIHtcbiAgICBjb25zdCBzdG9yZSA9IHVzZVN0b3JlKCk7IC8vIEB0cy1pZ25vcmVcblxuICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaDtcbiAgfTtcbn1cbi8qKlxyXG4gKiBBIGhvb2sgdG8gYWNjZXNzIHRoZSByZWR1eCBgZGlzcGF0Y2hgIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7YW55fGZ1bmN0aW9ufSByZWR1eCBzdG9yZSdzIGBkaXNwYXRjaGAgZnVuY3Rpb25cclxuICpcclxuICogQGV4YW1wbGVcclxuICpcclxuICogaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXHJcbiAqIGltcG9ydCB7IHVzZURpc3BhdGNoIH0gZnJvbSAncmVhY3QtcmVkdXgnXHJcbiAqXHJcbiAqIGV4cG9ydCBjb25zdCBDb3VudGVyQ29tcG9uZW50ID0gKHsgdmFsdWUgfSkgPT4ge1xyXG4gKiAgIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKVxyXG4gKiAgIGNvbnN0IGluY3JlYXNlQ291bnRlciA9IHVzZUNhbGxiYWNrKCgpID0+IGRpc3BhdGNoKHsgdHlwZTogJ2luY3JlYXNlLWNvdW50ZXInIH0pLCBbXSlcclxuICogICByZXR1cm4gKFxyXG4gKiAgICAgPGRpdj5cclxuICogICAgICAgPHNwYW4+e3ZhbHVlfTwvc3Bhbj5cclxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtpbmNyZWFzZUNvdW50ZXJ9PkluY3JlYXNlIGNvdW50ZXI8L2J1dHRvbj5cclxuICogICAgIDwvZGl2PlxyXG4gKiAgIClcclxuICogfVxyXG4gKi9cblxuZXhwb3J0IGNvbnN0IHVzZURpc3BhdGNoID0gLyojX19QVVJFX18qL2NyZWF0ZURpc3BhdGNoSG9vaygpOyIsICJpbXBvcnQgeyBUeXBlZFVzZVNlbGVjdG9ySG9vaywgdXNlU2VsZWN0b3IsIHVzZURpc3BhdGNoIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5pbXBvcnQgdHlwZSB7IFJvb3RTdGF0ZSwgQXBwRGlzcGF0Y2ggfSBmcm9tIFwiLi9zdG9yZVwiO1xuXG5leHBvcnQgY29uc3QgdXNlQXBwRGlzcGF0Y2ggPSAoKSA9PiB1c2VEaXNwYXRjaDxBcHBEaXNwYXRjaD4oKTtcbmV4cG9ydCBjb25zdCB1c2VBcHBTZWxlY3RvcjogVHlwZWRVc2VTZWxlY3Rvckhvb2s8Um9vdFN0YXRlPiA9IHVzZVNlbGVjdG9yO1xuIiwgImNvbnN0IGVycm9ycyA9IHtcblx0MDogXCJJbGxlZ2FsIHN0YXRlXCIsXG5cdDE6IFwiSW1tZXIgZHJhZnRzIGNhbm5vdCBoYXZlIGNvbXB1dGVkIHByb3BlcnRpZXNcIixcblx0MjogXCJUaGlzIG9iamVjdCBoYXMgYmVlbiBmcm96ZW4gYW5kIHNob3VsZCBub3QgYmUgbXV0YXRlZFwiLFxuXHQzKGRhdGE6IGFueSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHRcIkNhbm5vdCB1c2UgYSBwcm94eSB0aGF0IGhhcyBiZWVuIHJldm9rZWQuIERpZCB5b3UgcGFzcyBhbiBvYmplY3QgZnJvbSBpbnNpZGUgYW4gaW1tZXIgZnVuY3Rpb24gdG8gYW4gYXN5bmMgcHJvY2Vzcz8gXCIgK1xuXHRcdFx0ZGF0YVxuXHRcdClcblx0fSxcblx0NDogXCJBbiBpbW1lciBwcm9kdWNlciByZXR1cm5lZCBhIG5ldyB2YWx1ZSAqYW5kKiBtb2RpZmllZCBpdHMgZHJhZnQuIEVpdGhlciByZXR1cm4gYSBuZXcgdmFsdWUgKm9yKiBtb2RpZnkgdGhlIGRyYWZ0LlwiLFxuXHQ1OiBcIkltbWVyIGZvcmJpZHMgY2lyY3VsYXIgcmVmZXJlbmNlc1wiLFxuXHQ2OiBcIlRoZSBmaXJzdCBvciBzZWNvbmQgYXJndW1lbnQgdG8gYHByb2R1Y2VgIG11c3QgYmUgYSBmdW5jdGlvblwiLFxuXHQ3OiBcIlRoZSB0aGlyZCBhcmd1bWVudCB0byBgcHJvZHVjZWAgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIHVuZGVmaW5lZFwiLFxuXHQ4OiBcIkZpcnN0IGFyZ3VtZW50IHRvIGBjcmVhdGVEcmFmdGAgbXVzdCBiZSBhIHBsYWluIG9iamVjdCwgYW4gYXJyYXksIG9yIGFuIGltbWVyYWJsZSBvYmplY3RcIixcblx0OTogXCJGaXJzdCBhcmd1bWVudCB0byBgZmluaXNoRHJhZnRgIG11c3QgYmUgYSBkcmFmdCByZXR1cm5lZCBieSBgY3JlYXRlRHJhZnRgXCIsXG5cdDEwOiBcIlRoZSBnaXZlbiBkcmFmdCBpcyBhbHJlYWR5IGZpbmFsaXplZFwiLFxuXHQxMTogXCJPYmplY3QuZGVmaW5lUHJvcGVydHkoKSBjYW5ub3QgYmUgdXNlZCBvbiBhbiBJbW1lciBkcmFmdFwiLFxuXHQxMjogXCJPYmplY3Quc2V0UHJvdG90eXBlT2YoKSBjYW5ub3QgYmUgdXNlZCBvbiBhbiBJbW1lciBkcmFmdFwiLFxuXHQxMzogXCJJbW1lciBvbmx5IHN1cHBvcnRzIGRlbGV0aW5nIGFycmF5IGluZGljZXNcIixcblx0MTQ6IFwiSW1tZXIgb25seSBzdXBwb3J0cyBzZXR0aW5nIGFycmF5IGluZGljZXMgYW5kIHRoZSAnbGVuZ3RoJyBwcm9wZXJ0eVwiLFxuXHQxNShwYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gXCJDYW5ub3QgYXBwbHkgcGF0Y2gsIHBhdGggZG9lc24ndCByZXNvbHZlOiBcIiArIHBhdGhcblx0fSxcblx0MTY6ICdTZXRzIGNhbm5vdCBoYXZlIFwicmVwbGFjZVwiIHBhdGNoZXMuJyxcblx0MTcob3A6IHN0cmluZykge1xuXHRcdHJldHVybiBcIlVuc3VwcG9ydGVkIHBhdGNoIG9wZXJhdGlvbjogXCIgKyBvcFxuXHR9LFxuXHQxOChwbHVnaW46IHN0cmluZykge1xuXHRcdHJldHVybiBgVGhlIHBsdWdpbiBmb3IgJyR7cGx1Z2lufScgaGFzIG5vdCBiZWVuIGxvYWRlZCBpbnRvIEltbWVyLiBUbyBlbmFibGUgdGhlIHBsdWdpbiwgaW1wb3J0IGFuZCBjYWxsIFxcYGVuYWJsZSR7cGx1Z2lufSgpXFxgIHdoZW4gaW5pdGlhbGl6aW5nIHlvdXIgYXBwbGljYXRpb24uYFxuXHR9LFxuXHQyMDogXCJDYW5ub3QgdXNlIHByb3hpZXMgaWYgUHJveHksIFByb3h5LnJldm9jYWJsZSBvciBSZWZsZWN0IGFyZSBub3QgYXZhaWxhYmxlXCIsXG5cdDIxKHRoaW5nOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYHByb2R1Y2UgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIHRoaW5ncyB0aGF0IGFyZSBkcmFmdGFibGU6IHBsYWluIG9iamVjdHMsIGFycmF5cywgTWFwLCBTZXQgb3IgY2xhc3NlcyB0aGF0IGFyZSBtYXJrZWQgd2l0aCAnW2ltbWVyYWJsZV06IHRydWUnLiBHb3QgJyR7dGhpbmd9J2Bcblx0fSxcblx0MjIodGhpbmc6IHN0cmluZykge1xuXHRcdHJldHVybiBgJ2N1cnJlbnQnIGV4cGVjdHMgYSBkcmFmdCwgZ290OiAke3RoaW5nfWBcblx0fSxcblx0MjModGhpbmc6IHN0cmluZykge1xuXHRcdHJldHVybiBgJ29yaWdpbmFsJyBleHBlY3RzIGEgZHJhZnQsIGdvdDogJHt0aGluZ31gXG5cdH0sXG5cdDI0OiBcIlBhdGNoaW5nIHJlc2VydmVkIGF0dHJpYnV0ZXMgbGlrZSBfX3Byb3RvX18sIHByb3RvdHlwZSBhbmQgY29uc3RydWN0b3IgaXMgbm90IGFsbG93ZWRcIlxufSBhcyBjb25zdFxuXG5leHBvcnQgZnVuY3Rpb24gZGllKGVycm9yOiBrZXlvZiB0eXBlb2YgZXJyb3JzLCAuLi5hcmdzOiBhbnlbXSk6IG5ldmVyIHtcblx0aWYgKF9fREVWX18pIHtcblx0XHRjb25zdCBlID0gZXJyb3JzW2Vycm9yXVxuXHRcdGNvbnN0IG1zZyA9ICFlXG5cdFx0XHQ/IFwidW5rbm93biBlcnJvciBucjogXCIgKyBlcnJvclxuXHRcdFx0OiB0eXBlb2YgZSA9PT0gXCJmdW5jdGlvblwiXG5cdFx0XHQ/IGUuYXBwbHkobnVsbCwgYXJncyBhcyBhbnkpXG5cdFx0XHQ6IGVcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFtJbW1lcl0gJHttc2d9YClcblx0fVxuXHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0YFtJbW1lcl0gbWluaWZpZWQgZXJyb3IgbnI6ICR7ZXJyb3J9JHtcblx0XHRcdGFyZ3MubGVuZ3RoID8gXCIgXCIgKyBhcmdzLm1hcChzID0+IGAnJHtzfSdgKS5qb2luKFwiLFwiKSA6IFwiXCJcblx0XHR9LiBGaW5kIHRoZSBmdWxsIGVycm9yIGF0OiBodHRwczovL2JpdC5seS8zY1hFS1dmYFxuXHQpXG59XG4iLCAiaW1wb3J0IHtcblx0RFJBRlRfU1RBVEUsXG5cdERSQUZUQUJMRSxcblx0aGFzU2V0LFxuXHRPYmplY3Rpc2gsXG5cdERyYWZ0ZWQsXG5cdEFueU9iamVjdCxcblx0QW55TWFwLFxuXHRBbnlTZXQsXG5cdEltbWVyU3RhdGUsXG5cdGhhc01hcCxcblx0QXJjaHR5cGUsXG5cdGRpZVxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhbiBJbW1lciBkcmFmdCAqL1xuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISF2YWx1ZSAmJiAhIXZhbHVlW0RSQUZUX1NUQVRFXVxufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB2YWx1ZSBjYW4gYmUgZHJhZnRlZCBieSBJbW1lciAqL1xuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnRhYmxlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0aWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlXG5cdHJldHVybiAoXG5cdFx0aXNQbGFpbk9iamVjdCh2YWx1ZSkgfHxcblx0XHRBcnJheS5pc0FycmF5KHZhbHVlKSB8fFxuXHRcdCEhdmFsdWVbRFJBRlRBQkxFXSB8fFxuXHRcdCEhdmFsdWUuY29uc3RydWN0b3I/LltEUkFGVEFCTEVdIHx8XG5cdFx0aXNNYXAodmFsdWUpIHx8XG5cdFx0aXNTZXQodmFsdWUpXG5cdClcbn1cblxuY29uc3Qgb2JqZWN0Q3RvclN0cmluZyA9IE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IudG9TdHJpbmcoKVxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlXG5cdGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxuXHRpZiAocHJvdG8gPT09IG51bGwpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cdGNvbnN0IEN0b3IgPVxuXHRcdE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yXG5cblx0aWYgKEN0b3IgPT09IE9iamVjdCkgcmV0dXJuIHRydWVcblxuXHRyZXR1cm4gKFxuXHRcdHR5cGVvZiBDdG9yID09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoQ3RvcikgPT09IG9iamVjdEN0b3JTdHJpbmdcblx0KVxufVxuXG4vKiogR2V0IHRoZSB1bmRlcmx5aW5nIG9iamVjdCB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBkcmFmdCAqL1xuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIG9yaWdpbmFsPFQ+KHZhbHVlOiBUKTogVCB8IHVuZGVmaW5lZFxuZXhwb3J0IGZ1bmN0aW9uIG9yaWdpbmFsKHZhbHVlOiBEcmFmdGVkPGFueT4pOiBhbnkge1xuXHRpZiAoIWlzRHJhZnQodmFsdWUpKSBkaWUoMjMsIHZhbHVlKVxuXHRyZXR1cm4gdmFsdWVbRFJBRlRfU1RBVEVdLmJhc2VfXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBjb25zdCBvd25LZXlzOiAodGFyZ2V0OiBBbnlPYmplY3QpID0+IFByb3BlcnR5S2V5W10gPVxuXHR0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0Lm93bktleXNcblx0XHQ/IFJlZmxlY3Qub3duS2V5c1xuXHRcdDogdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09IFwidW5kZWZpbmVkXCJcblx0XHQ/IG9iaiA9PlxuXHRcdFx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmNvbmNhdChcblx0XHRcdFx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikgYXMgYW55XG5cdFx0XHRcdClcblx0XHQ6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG5cbmV4cG9ydCBjb25zdCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID1cblx0T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgfHxcblx0ZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0YXJnZXQ6IGFueSkge1xuXHRcdC8vIFBvbHlmaWxsIG5lZWRlZCBmb3IgSGVybWVzIGFuZCBJRSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9oZXJtZXMvaXNzdWVzLzI3NFxuXHRcdGNvbnN0IHJlczogYW55ID0ge31cblx0XHRvd25LZXlzKHRhcmdldCkuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0cmVzW2tleV0gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KVxuXHRcdH0pXG5cdFx0cmV0dXJuIHJlc1xuXHR9XG5cbmV4cG9ydCBmdW5jdGlvbiBlYWNoPFQgZXh0ZW5kcyBPYmplY3Rpc2g+KFxuXHRvYmo6IFQsXG5cdGl0ZXI6IChrZXk6IHN0cmluZyB8IG51bWJlciwgdmFsdWU6IGFueSwgc291cmNlOiBUKSA9PiB2b2lkLFxuXHRlbnVtZXJhYmxlT25seT86IGJvb2xlYW5cbik6IHZvaWRcbmV4cG9ydCBmdW5jdGlvbiBlYWNoKG9iajogYW55LCBpdGVyOiBhbnksIGVudW1lcmFibGVPbmx5ID0gZmFsc2UpIHtcblx0aWYgKGdldEFyY2h0eXBlKG9iaikgPT09IEFyY2h0eXBlLk9iamVjdCkge1xuXHRcdDsoZW51bWVyYWJsZU9ubHkgPyBPYmplY3Qua2V5cyA6IG93bktleXMpKG9iaikuZm9yRWFjaChrZXkgPT4ge1xuXHRcdFx0aWYgKCFlbnVtZXJhYmxlT25seSB8fCB0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSBpdGVyKGtleSwgb2JqW2tleV0sIG9iailcblx0XHR9KVxuXHR9IGVsc2Uge1xuXHRcdG9iai5mb3JFYWNoKChlbnRyeTogYW55LCBpbmRleDogYW55KSA9PiBpdGVyKGluZGV4LCBlbnRyeSwgb2JqKSlcblx0fVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXJjaHR5cGUodGhpbmc6IGFueSk6IEFyY2h0eXBlIHtcblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0Y29uc3Qgc3RhdGU6IHVuZGVmaW5lZCB8IEltbWVyU3RhdGUgPSB0aGluZ1tEUkFGVF9TVEFURV1cblx0cmV0dXJuIHN0YXRlXG5cdFx0PyBzdGF0ZS50eXBlXyA+IDNcblx0XHRcdD8gc3RhdGUudHlwZV8gLSA0IC8vIGNhdXNlIE9iamVjdCBhbmQgQXJyYXkgbWFwIGJhY2sgZnJvbSA0IGFuZCA1XG5cdFx0XHQ6IChzdGF0ZS50eXBlXyBhcyBhbnkpIC8vIG90aGVycyBhcmUgdGhlIHNhbWVcblx0XHQ6IEFycmF5LmlzQXJyYXkodGhpbmcpXG5cdFx0PyBBcmNodHlwZS5BcnJheVxuXHRcdDogaXNNYXAodGhpbmcpXG5cdFx0PyBBcmNodHlwZS5NYXBcblx0XHQ6IGlzU2V0KHRoaW5nKVxuXHRcdD8gQXJjaHR5cGUuU2V0XG5cdFx0OiBBcmNodHlwZS5PYmplY3Rcbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGhhcyh0aGluZzogYW55LCBwcm9wOiBQcm9wZXJ0eUtleSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZ2V0QXJjaHR5cGUodGhpbmcpID09PSBBcmNodHlwZS5NYXBcblx0XHQ/IHRoaW5nLmhhcyhwcm9wKVxuXHRcdDogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaW5nLCBwcm9wKVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gZ2V0KHRoaW5nOiBBbnlNYXAgfCBBbnlPYmplY3QsIHByb3A6IFByb3BlcnR5S2V5KTogYW55IHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRyZXR1cm4gZ2V0QXJjaHR5cGUodGhpbmcpID09PSBBcmNodHlwZS5NYXAgPyB0aGluZy5nZXQocHJvcCkgOiB0aGluZ1twcm9wXVxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gc2V0KHRoaW5nOiBhbnksIHByb3BPck9sZFZhbHVlOiBQcm9wZXJ0eUtleSwgdmFsdWU6IGFueSkge1xuXHRjb25zdCB0ID0gZ2V0QXJjaHR5cGUodGhpbmcpXG5cdGlmICh0ID09PSBBcmNodHlwZS5NYXApIHRoaW5nLnNldChwcm9wT3JPbGRWYWx1ZSwgdmFsdWUpXG5cdGVsc2UgaWYgKHQgPT09IEFyY2h0eXBlLlNldCkge1xuXHRcdHRoaW5nLmFkZCh2YWx1ZSlcblx0fSBlbHNlIHRoaW5nW3Byb3BPck9sZFZhbHVlXSA9IHZhbHVlXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpcyh4OiBhbnksIHk6IGFueSk6IGJvb2xlYW4ge1xuXHQvLyBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmJqcy9ibG9iL2M2OTkwNGE1MTFiOTAwMjY2OTM1MTY4MjIzMDYzZGQ4NzcyZGZjNDAvcGFja2FnZXMvZmJqcy9zcmMvY29yZS9zaGFsbG93RXF1YWwuanNcblx0aWYgKHggPT09IHkpIHtcblx0XHRyZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHlcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5XG5cdH1cbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWFwKHRhcmdldDogYW55KTogdGFyZ2V0IGlzIEFueU1hcCB7XG5cdHJldHVybiBoYXNNYXAgJiYgdGFyZ2V0IGluc3RhbmNlb2YgTWFwXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NldCh0YXJnZXQ6IGFueSk6IHRhcmdldCBpcyBBbnlTZXQge1xuXHRyZXR1cm4gaGFzU2V0ICYmIHRhcmdldCBpbnN0YW5jZW9mIFNldFxufVxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdChzdGF0ZTogSW1tZXJTdGF0ZSk6IGFueSB7XG5cdHJldHVybiBzdGF0ZS5jb3B5XyB8fCBzdGF0ZS5iYXNlX1xufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gc2hhbGxvd0NvcHkoYmFzZTogYW55KSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGJhc2UpKSByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYmFzZSlcblx0Y29uc3QgZGVzY3JpcHRvcnMgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGJhc2UpXG5cdGRlbGV0ZSBkZXNjcmlwdG9yc1tEUkFGVF9TVEFURSBhcyBhbnldXG5cdGxldCBrZXlzID0gb3duS2V5cyhkZXNjcmlwdG9ycylcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qga2V5OiBhbnkgPSBrZXlzW2ldXG5cdFx0Y29uc3QgZGVzYyA9IGRlc2NyaXB0b3JzW2tleV1cblx0XHRpZiAoZGVzYy53cml0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdGRlc2Mud3JpdGFibGUgPSB0cnVlXG5cdFx0XHRkZXNjLmNvbmZpZ3VyYWJsZSA9IHRydWVcblx0XHR9XG5cdFx0Ly8gbGlrZSBvYmplY3QuYXNzaWduLCB3ZSB3aWxsIHJlYWQgYW55IF9vd25fLCBnZXQvc2V0IGFjY2Vzc29ycy4gVGhpcyBoZWxwcyBpbiBkZWFsaW5nXG5cdFx0Ly8gd2l0aCBsaWJyYXJpZXMgdGhhdCB0cmFwIHZhbHVlcywgbGlrZSBtb2J4IG9yIHZ1ZVxuXHRcdC8vIHVubGlrZSBvYmplY3QuYXNzaWduLCBub24tZW51bWVyYWJsZXMgd2lsbCBiZSBjb3BpZWQgYXMgd2VsbFxuXHRcdGlmIChkZXNjLmdldCB8fCBkZXNjLnNldClcblx0XHRcdGRlc2NyaXB0b3JzW2tleV0gPSB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsIC8vIGNvdWxkIGxpdmUgd2l0aCAhIWRlc2Muc2V0IGFzIHdlbGwgaGVyZS4uLlxuXHRcdFx0XHRlbnVtZXJhYmxlOiBkZXNjLmVudW1lcmFibGUsXG5cdFx0XHRcdHZhbHVlOiBiYXNlW2tleV1cblx0XHRcdH1cblx0fVxuXHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZSksIGRlc2NyaXB0b3JzKVxufVxuXG4vKipcbiAqIEZyZWV6ZXMgZHJhZnRhYmxlIG9iamVjdHMuIFJldHVybnMgdGhlIG9yaWdpbmFsIG9iamVjdC5cbiAqIEJ5IGRlZmF1bHQgZnJlZXplcyBzaGFsbG93bHksIGJ1dCBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGB0cnVlYCBpdCB3aWxsIGZyZWV6ZSByZWN1cnNpdmVseS5cbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcGFyYW0gZGVlcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJlZXplPFQ+KG9iajogVCwgZGVlcD86IGJvb2xlYW4pOiBUXG5leHBvcnQgZnVuY3Rpb24gZnJlZXplPFQ+KG9iajogYW55LCBkZWVwOiBib29sZWFuID0gZmFsc2UpOiBUIHtcblx0aWYgKGlzRnJvemVuKG9iaikgfHwgaXNEcmFmdChvYmopIHx8ICFpc0RyYWZ0YWJsZShvYmopKSByZXR1cm4gb2JqXG5cdGlmIChnZXRBcmNodHlwZShvYmopID4gMSAvKiBNYXAgb3IgU2V0ICovKSB7XG5cdFx0b2JqLnNldCA9IG9iai5hZGQgPSBvYmouY2xlYXIgPSBvYmouZGVsZXRlID0gZG9udE11dGF0ZUZyb3plbkNvbGxlY3Rpb25zIGFzIGFueVxuXHR9XG5cdE9iamVjdC5mcmVlemUob2JqKVxuXHRpZiAoZGVlcCkgZWFjaChvYmosIChrZXksIHZhbHVlKSA9PiBmcmVlemUodmFsdWUsIHRydWUpLCB0cnVlKVxuXHRyZXR1cm4gb2JqXG59XG5cbmZ1bmN0aW9uIGRvbnRNdXRhdGVGcm96ZW5Db2xsZWN0aW9ucygpIHtcblx0ZGllKDIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb3plbihvYmo6IGFueSk6IGJvb2xlYW4ge1xuXHRpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHRydWVcblx0Ly8gU2VlICM2MDAsIElFIGRpZXMgb24gbm9uLW9iamVjdHMgaW4gT2JqZWN0LmlzRnJvemVuXG5cdHJldHVybiBPYmplY3QuaXNGcm96ZW4ob2JqKVxufVxuIiwgImltcG9ydCB7XG5cdEltbWVyU3RhdGUsXG5cdFBhdGNoLFxuXHRJbW1lclNjb3BlLFxuXHREcmFmdGVkLFxuXHRBbnlPYmplY3QsXG5cdEltbWVyQmFzZVN0YXRlLFxuXHRBbnlNYXAsXG5cdEFueVNldCxcblx0UHJveHlUeXBlLFxuXHRkaWVcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuLyoqIFBsdWdpbiB1dGlsaXRpZXMgKi9cbmNvbnN0IHBsdWdpbnM6IHtcblx0UGF0Y2hlcz86IHtcblx0XHRnZW5lcmF0ZVBhdGNoZXNfKFxuXHRcdFx0c3RhdGU6IEltbWVyU3RhdGUsXG5cdFx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdFx0KTogdm9pZFxuXHRcdGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhcblx0XHRcdGJhc2U6IGFueSxcblx0XHRcdHJlcGxhY2VtZW50OiBhbnksXG5cdFx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0XHQpOiB2b2lkXG5cdFx0YXBwbHlQYXRjaGVzXzxUPihkcmFmdDogVCwgcGF0Y2hlczogUGF0Y2hbXSk6IFRcblx0fVxuXHRFUzU/OiB7XG5cdFx0d2lsbEZpbmFsaXplRVM1XyhzY29wZTogSW1tZXJTY29wZSwgcmVzdWx0OiBhbnksIGlzUmVwbGFjZWQ6IGJvb2xlYW4pOiB2b2lkXG5cdFx0Y3JlYXRlRVM1UHJveHlfPFQ+KFxuXHRcdFx0YmFzZTogVCxcblx0XHRcdHBhcmVudD86IEltbWVyU3RhdGVcblx0XHQpOiBEcmFmdGVkPFQsIEVTNU9iamVjdFN0YXRlIHwgRVM1QXJyYXlTdGF0ZT5cblx0XHRoYXNDaGFuZ2VzXyhzdGF0ZTogRVM1QXJyYXlTdGF0ZSB8IEVTNU9iamVjdFN0YXRlKTogYm9vbGVhblxuXHR9XG5cdE1hcFNldD86IHtcblx0XHRwcm94eU1hcF88VCBleHRlbmRzIEFueU1hcD4odGFyZ2V0OiBULCBwYXJlbnQ/OiBJbW1lclN0YXRlKTogVFxuXHRcdHByb3h5U2V0XzxUIGV4dGVuZHMgQW55U2V0Pih0YXJnZXQ6IFQsIHBhcmVudD86IEltbWVyU3RhdGUpOiBUXG5cdH1cbn0gPSB7fVxuXG50eXBlIFBsdWdpbnMgPSB0eXBlb2YgcGx1Z2luc1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luPEsgZXh0ZW5kcyBrZXlvZiBQbHVnaW5zPihcblx0cGx1Z2luS2V5OiBLXG4pOiBFeGNsdWRlPFBsdWdpbnNbS10sIHVuZGVmaW5lZD4ge1xuXHRjb25zdCBwbHVnaW4gPSBwbHVnaW5zW3BsdWdpbktleV1cblx0aWYgKCFwbHVnaW4pIHtcblx0XHRkaWUoMTgsIHBsdWdpbktleSlcblx0fVxuXHQvLyBAdHMtaWdub3JlXG5cdHJldHVybiBwbHVnaW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQbHVnaW48SyBleHRlbmRzIGtleW9mIFBsdWdpbnM+KFxuXHRwbHVnaW5LZXk6IEssXG5cdGltcGxlbWVudGF0aW9uOiBQbHVnaW5zW0tdXG4pOiB2b2lkIHtcblx0aWYgKCFwbHVnaW5zW3BsdWdpbktleV0pIHBsdWdpbnNbcGx1Z2luS2V5XSA9IGltcGxlbWVudGF0aW9uXG59XG5cbi8qKiBFUzUgUGx1Z2luICovXG5cbmludGVyZmFjZSBFUzVCYXNlU3RhdGUgZXh0ZW5kcyBJbW1lckJhc2VTdGF0ZSB7XG5cdGFzc2lnbmVkXzoge1trZXk6IHN0cmluZ106IGFueX1cblx0cGFyZW50Xz86IEltbWVyU3RhdGVcblx0cmV2b2tlZF86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFUzVPYmplY3RTdGF0ZSBleHRlbmRzIEVTNUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuRVM1T2JqZWN0XG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlPYmplY3QsIEVTNU9iamVjdFN0YXRlPlxuXHRiYXNlXzogQW55T2JqZWN0XG5cdGNvcHlfOiBBbnlPYmplY3QgfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRVM1QXJyYXlTdGF0ZSBleHRlbmRzIEVTNUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuRVM1QXJyYXlcblx0ZHJhZnRfOiBEcmFmdGVkPEFueU9iamVjdCwgRVM1QXJyYXlTdGF0ZT5cblx0YmFzZV86IGFueVxuXHRjb3B5XzogYW55XG59XG5cbi8qKiBNYXAgLyBTZXQgcGx1Z2luICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwU3RhdGUgZXh0ZW5kcyBJbW1lckJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuTWFwXG5cdGNvcHlfOiBBbnlNYXAgfCB1bmRlZmluZWRcblx0YXNzaWduZWRfOiBNYXA8YW55LCBib29sZWFuPiB8IHVuZGVmaW5lZFxuXHRiYXNlXzogQW55TWFwXG5cdHJldm9rZWRfOiBib29sZWFuXG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlNYXAsIE1hcFN0YXRlPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldFN0YXRlIGV4dGVuZHMgSW1tZXJCYXNlU3RhdGUge1xuXHR0eXBlXzogUHJveHlUeXBlLlNldFxuXHRjb3B5XzogQW55U2V0IHwgdW5kZWZpbmVkXG5cdGJhc2VfOiBBbnlTZXRcblx0ZHJhZnRzXzogTWFwPGFueSwgRHJhZnRlZD4gLy8gbWFwcyB0aGUgb3JpZ2luYWwgdmFsdWUgdG8gdGhlIGRyYWZ0IHZhbHVlIGluIHRoZSBuZXcgc2V0XG5cdHJldm9rZWRfOiBib29sZWFuXG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlTZXQsIFNldFN0YXRlPlxufVxuXG4vKiogUGF0Y2hlcyBwbHVnaW4gKi9cblxuZXhwb3J0IHR5cGUgUGF0Y2hQYXRoID0gKHN0cmluZyB8IG51bWJlcilbXVxuIiwgImltcG9ydCB7XG5cdFBhdGNoLFxuXHRQYXRjaExpc3RlbmVyLFxuXHREcmFmdGVkLFxuXHRJbW1lcixcblx0RFJBRlRfU1RBVEUsXG5cdEltbWVyU3RhdGUsXG5cdFByb3h5VHlwZSxcblx0Z2V0UGx1Z2luXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5pbXBvcnQge2RpZX0gZnJvbSBcIi4uL3V0aWxzL2Vycm9yc1wiXG5cbi8qKiBFYWNoIHNjb3BlIHJlcHJlc2VudHMgYSBgcHJvZHVjZWAgY2FsbC4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBJbW1lclNjb3BlIHtcblx0cGF0Y2hlc18/OiBQYXRjaFtdXG5cdGludmVyc2VQYXRjaGVzXz86IFBhdGNoW11cblx0Y2FuQXV0b0ZyZWV6ZV86IGJvb2xlYW5cblx0ZHJhZnRzXzogYW55W11cblx0cGFyZW50Xz86IEltbWVyU2NvcGVcblx0cGF0Y2hMaXN0ZW5lcl8/OiBQYXRjaExpc3RlbmVyXG5cdGltbWVyXzogSW1tZXJcblx0dW5maW5hbGl6ZWREcmFmdHNfOiBudW1iZXJcbn1cblxubGV0IGN1cnJlbnRTY29wZTogSW1tZXJTY29wZSB8IHVuZGVmaW5lZFxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkge1xuXHRpZiAoX19ERVZfXyAmJiAhY3VycmVudFNjb3BlKSBkaWUoMClcblx0cmV0dXJuIGN1cnJlbnRTY29wZSFcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2NvcGUoXG5cdHBhcmVudF86IEltbWVyU2NvcGUgfCB1bmRlZmluZWQsXG5cdGltbWVyXzogSW1tZXJcbik6IEltbWVyU2NvcGUge1xuXHRyZXR1cm4ge1xuXHRcdGRyYWZ0c186IFtdLFxuXHRcdHBhcmVudF8sXG5cdFx0aW1tZXJfLFxuXHRcdC8vIFdoZW5ldmVyIHRoZSBtb2RpZmllZCBkcmFmdCBjb250YWlucyBhIGRyYWZ0IGZyb20gYW5vdGhlciBzY29wZSwgd2Vcblx0XHQvLyBuZWVkIHRvIHByZXZlbnQgYXV0by1mcmVlemluZyBzbyB0aGUgdW5vd25lZCBkcmFmdCBjYW4gYmUgZmluYWxpemVkLlxuXHRcdGNhbkF1dG9GcmVlemVfOiB0cnVlLFxuXHRcdHVuZmluYWxpemVkRHJhZnRzXzogMFxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQYXRjaGVzSW5TY29wZShcblx0c2NvcGU6IEltbWVyU2NvcGUsXG5cdHBhdGNoTGlzdGVuZXI/OiBQYXRjaExpc3RlbmVyXG4pIHtcblx0aWYgKHBhdGNoTGlzdGVuZXIpIHtcblx0XHRnZXRQbHVnaW4oXCJQYXRjaGVzXCIpIC8vIGFzc2VydCB3ZSBoYXZlIHRoZSBwbHVnaW5cblx0XHRzY29wZS5wYXRjaGVzXyA9IFtdXG5cdFx0c2NvcGUuaW52ZXJzZVBhdGNoZXNfID0gW11cblx0XHRzY29wZS5wYXRjaExpc3RlbmVyXyA9IHBhdGNoTGlzdGVuZXJcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2b2tlU2NvcGUoc2NvcGU6IEltbWVyU2NvcGUpIHtcblx0bGVhdmVTY29wZShzY29wZSlcblx0c2NvcGUuZHJhZnRzXy5mb3JFYWNoKHJldm9rZURyYWZ0KVxuXHQvLyBAdHMtaWdub3JlXG5cdHNjb3BlLmRyYWZ0c18gPSBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWF2ZVNjb3BlKHNjb3BlOiBJbW1lclNjb3BlKSB7XG5cdGlmIChzY29wZSA9PT0gY3VycmVudFNjb3BlKSB7XG5cdFx0Y3VycmVudFNjb3BlID0gc2NvcGUucGFyZW50X1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnRlclNjb3BlKGltbWVyOiBJbW1lcikge1xuXHRyZXR1cm4gKGN1cnJlbnRTY29wZSA9IGNyZWF0ZVNjb3BlKGN1cnJlbnRTY29wZSwgaW1tZXIpKVxufVxuXG5mdW5jdGlvbiByZXZva2VEcmFmdChkcmFmdDogRHJhZnRlZCkge1xuXHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IGRyYWZ0W0RSQUZUX1NUQVRFXVxuXHRpZiAoXG5cdFx0c3RhdGUudHlwZV8gPT09IFByb3h5VHlwZS5Qcm94eU9iamVjdCB8fFxuXHRcdHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuUHJveHlBcnJheVxuXHQpXG5cdFx0c3RhdGUucmV2b2tlXygpXG5cdGVsc2Ugc3RhdGUucmV2b2tlZF8gPSB0cnVlXG59XG4iLCAiaW1wb3J0IHtcblx0SW1tZXJTY29wZSxcblx0RFJBRlRfU1RBVEUsXG5cdGlzRHJhZnRhYmxlLFxuXHROT1RISU5HLFxuXHRQYXRjaFBhdGgsXG5cdGVhY2gsXG5cdGhhcyxcblx0ZnJlZXplLFxuXHRJbW1lclN0YXRlLFxuXHRpc0RyYWZ0LFxuXHRTZXRTdGF0ZSxcblx0c2V0LFxuXHRQcm94eVR5cGUsXG5cdGdldFBsdWdpbixcblx0ZGllLFxuXHRyZXZva2VTY29wZSxcblx0aXNGcm96ZW4sXG5cdHNoYWxsb3dDb3B5XG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzUmVzdWx0KHJlc3VsdDogYW55LCBzY29wZTogSW1tZXJTY29wZSkge1xuXHRzY29wZS51bmZpbmFsaXplZERyYWZ0c18gPSBzY29wZS5kcmFmdHNfLmxlbmd0aFxuXHRjb25zdCBiYXNlRHJhZnQgPSBzY29wZS5kcmFmdHNfIVswXVxuXHRjb25zdCBpc1JlcGxhY2VkID0gcmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0ICE9PSBiYXNlRHJhZnRcblx0aWYgKCFzY29wZS5pbW1lcl8udXNlUHJveGllc18pXG5cdFx0Z2V0UGx1Z2luKFwiRVM1XCIpLndpbGxGaW5hbGl6ZUVTNV8oc2NvcGUsIHJlc3VsdCwgaXNSZXBsYWNlZClcblx0aWYgKGlzUmVwbGFjZWQpIHtcblx0XHRpZiAoYmFzZURyYWZ0W0RSQUZUX1NUQVRFXS5tb2RpZmllZF8pIHtcblx0XHRcdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0ZGllKDQpXG5cdFx0fVxuXHRcdGlmIChpc0RyYWZ0YWJsZShyZXN1bHQpKSB7XG5cdFx0XHQvLyBGaW5hbGl6ZSB0aGUgcmVzdWx0IGluIGNhc2UgaXQgY29udGFpbnMgKG9yIGlzKSBhIHN1YnNldCBvZiB0aGUgZHJhZnQuXG5cdFx0XHRyZXN1bHQgPSBmaW5hbGl6ZShzY29wZSwgcmVzdWx0KVxuXHRcdFx0aWYgKCFzY29wZS5wYXJlbnRfKSBtYXliZUZyZWV6ZShzY29wZSwgcmVzdWx0KVxuXHRcdH1cblx0XHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRcdGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKFxuXHRcdFx0XHRiYXNlRHJhZnRbRFJBRlRfU1RBVEVdLmJhc2VfLFxuXHRcdFx0XHRyZXN1bHQsXG5cdFx0XHRcdHNjb3BlLnBhdGNoZXNfLFxuXHRcdFx0XHRzY29wZS5pbnZlcnNlUGF0Y2hlc18hXG5cdFx0XHQpXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIEZpbmFsaXplIHRoZSBiYXNlIGRyYWZ0LlxuXHRcdHJlc3VsdCA9IGZpbmFsaXplKHNjb3BlLCBiYXNlRHJhZnQsIFtdKVxuXHR9XG5cdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRzY29wZS5wYXRjaExpc3RlbmVyXyEoc2NvcGUucGF0Y2hlc18sIHNjb3BlLmludmVyc2VQYXRjaGVzXyEpXG5cdH1cblx0cmV0dXJuIHJlc3VsdCAhPT0gTk9USElORyA/IHJlc3VsdCA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBmaW5hbGl6ZShyb290U2NvcGU6IEltbWVyU2NvcGUsIHZhbHVlOiBhbnksIHBhdGg/OiBQYXRjaFBhdGgpIHtcblx0Ly8gRG9uJ3QgcmVjdXJzZSBpbiB0aG8gcmVjdXJzaXZlIGRhdGEgc3RydWN0dXJlc1xuXHRpZiAoaXNGcm96ZW4odmFsdWUpKSByZXR1cm4gdmFsdWVcblxuXHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IHZhbHVlW0RSQUZUX1NUQVRFXVxuXHQvLyBBIHBsYWluIG9iamVjdCwgbWlnaHQgbmVlZCBmcmVlemluZywgbWlnaHQgY29udGFpbiBkcmFmdHNcblx0aWYgKCFzdGF0ZSkge1xuXHRcdGVhY2goXG5cdFx0XHR2YWx1ZSxcblx0XHRcdChrZXksIGNoaWxkVmFsdWUpID0+XG5cdFx0XHRcdGZpbmFsaXplUHJvcGVydHkocm9vdFNjb3BlLCBzdGF0ZSwgdmFsdWUsIGtleSwgY2hpbGRWYWx1ZSwgcGF0aCksXG5cdFx0XHR0cnVlIC8vIFNlZSAjNTkwLCBkb24ndCByZWN1cnNlIGludG8gbm9uLWVudW1lcmFibGUgb2Ygbm9uIGRyYWZ0ZWQgb2JqZWN0c1xuXHRcdClcblx0XHRyZXR1cm4gdmFsdWVcblx0fVxuXHQvLyBOZXZlciBmaW5hbGl6ZSBkcmFmdHMgb3duZWQgYnkgYW5vdGhlciBzY29wZS5cblx0aWYgKHN0YXRlLnNjb3BlXyAhPT0gcm9vdFNjb3BlKSByZXR1cm4gdmFsdWVcblx0Ly8gVW5tb2RpZmllZCBkcmFmdCwgcmV0dXJuIHRoZSAoZnJvemVuKSBvcmlnaW5hbFxuXHRpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuXHRcdG1heWJlRnJlZXplKHJvb3RTY29wZSwgc3RhdGUuYmFzZV8sIHRydWUpXG5cdFx0cmV0dXJuIHN0YXRlLmJhc2VfXG5cdH1cblx0Ly8gTm90IGZpbmFsaXplZCB5ZXQsIGxldCdzIGRvIHRoYXQgbm93XG5cdGlmICghc3RhdGUuZmluYWxpemVkXykge1xuXHRcdHN0YXRlLmZpbmFsaXplZF8gPSB0cnVlXG5cdFx0c3RhdGUuc2NvcGVfLnVuZmluYWxpemVkRHJhZnRzXy0tXG5cdFx0Y29uc3QgcmVzdWx0ID1cblx0XHRcdC8vIEZvciBFUzUsIGNyZWF0ZSBhIGdvb2QgY29weSBmcm9tIHRoZSBkcmFmdCBmaXJzdCwgd2l0aCBhZGRlZCBrZXlzIGFuZCB3aXRob3V0IGRlbGV0ZWQga2V5cy5cblx0XHRcdHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1T2JqZWN0IHx8IHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1QXJyYXlcblx0XHRcdFx0PyAoc3RhdGUuY29weV8gPSBzaGFsbG93Q29weShzdGF0ZS5kcmFmdF8pKVxuXHRcdFx0XHQ6IHN0YXRlLmNvcHlfXG5cdFx0Ly8gRmluYWxpemUgYWxsIGNoaWxkcmVuIG9mIHRoZSBjb3B5XG5cdFx0Ly8gRm9yIHNldHMgd2UgY2xvbmUgYmVmb3JlIGl0ZXJhdGluZywgb3RoZXJ3aXNlIHdlIGNhbiBnZXQgaW4gZW5kbGVzcyBsb29wIGR1ZSB0byBtb2RpZnlpbmcgZHVyaW5nIGl0ZXJhdGlvbiwgc2VlICM2Mjhcblx0XHQvLyBUbyBwcmVzZXJ2ZSBpbnNlcnRpb24gb3JkZXIgaW4gYWxsIGNhc2VzIHdlIHRoZW4gY2xlYXIgdGhlIHNldFxuXHRcdC8vIEFuZCB3ZSBsZXQgZmluYWxpemVQcm9wZXJ0eSBrbm93IGl0IG5lZWRzIHRvIHJlLWFkZCBub24tZHJhZnQgY2hpbGRyZW4gYmFjayB0byB0aGUgdGFyZ2V0XG5cdFx0bGV0IHJlc3VsdEVhY2ggPSByZXN1bHRcblx0XHRsZXQgaXNTZXQgPSBmYWxzZVxuXHRcdGlmIChzdGF0ZS50eXBlXyA9PT0gUHJveHlUeXBlLlNldCkge1xuXHRcdFx0cmVzdWx0RWFjaCA9IG5ldyBTZXQocmVzdWx0KVxuXHRcdFx0cmVzdWx0LmNsZWFyKClcblx0XHRcdGlzU2V0ID0gdHJ1ZVxuXHRcdH1cblx0XHRlYWNoKHJlc3VsdEVhY2gsIChrZXksIGNoaWxkVmFsdWUpID0+XG5cdFx0XHRmaW5hbGl6ZVByb3BlcnR5KHJvb3RTY29wZSwgc3RhdGUsIHJlc3VsdCwga2V5LCBjaGlsZFZhbHVlLCBwYXRoLCBpc1NldClcblx0XHQpXG5cdFx0Ly8gZXZlcnl0aGluZyBpbnNpZGUgaXMgZnJvemVuLCB3ZSBjYW4gZnJlZXplIGhlcmVcblx0XHRtYXliZUZyZWV6ZShyb290U2NvcGUsIHJlc3VsdCwgZmFsc2UpXG5cdFx0Ly8gZmlyc3QgdGltZSBmaW5hbGl6aW5nLCBsZXQncyBjcmVhdGUgdGhvc2UgcGF0Y2hlc1xuXHRcdGlmIChwYXRoICYmIHJvb3RTY29wZS5wYXRjaGVzXykge1xuXHRcdFx0Z2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5nZW5lcmF0ZVBhdGNoZXNfKFxuXHRcdFx0XHRzdGF0ZSxcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0cm9vdFNjb3BlLnBhdGNoZXNfLFxuXHRcdFx0XHRyb290U2NvcGUuaW52ZXJzZVBhdGNoZXNfIVxuXHRcdFx0KVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gc3RhdGUuY29weV9cbn1cblxuZnVuY3Rpb24gZmluYWxpemVQcm9wZXJ0eShcblx0cm9vdFNjb3BlOiBJbW1lclNjb3BlLFxuXHRwYXJlbnRTdGF0ZTogdW5kZWZpbmVkIHwgSW1tZXJTdGF0ZSxcblx0dGFyZ2V0T2JqZWN0OiBhbnksXG5cdHByb3A6IHN0cmluZyB8IG51bWJlcixcblx0Y2hpbGRWYWx1ZTogYW55LFxuXHRyb290UGF0aD86IFBhdGNoUGF0aCxcblx0dGFyZ2V0SXNTZXQ/OiBib29sZWFuXG4pIHtcblx0aWYgKF9fREVWX18gJiYgY2hpbGRWYWx1ZSA9PT0gdGFyZ2V0T2JqZWN0KSBkaWUoNSlcblx0aWYgKGlzRHJhZnQoY2hpbGRWYWx1ZSkpIHtcblx0XHRjb25zdCBwYXRoID1cblx0XHRcdHJvb3RQYXRoICYmXG5cdFx0XHRwYXJlbnRTdGF0ZSAmJlxuXHRcdFx0cGFyZW50U3RhdGUhLnR5cGVfICE9PSBQcm94eVR5cGUuU2V0ICYmIC8vIFNldCBvYmplY3RzIGFyZSBhdG9taWMgc2luY2UgdGhleSBoYXZlIG5vIGtleXMuXG5cdFx0XHQhaGFzKChwYXJlbnRTdGF0ZSBhcyBFeGNsdWRlPEltbWVyU3RhdGUsIFNldFN0YXRlPikuYXNzaWduZWRfISwgcHJvcCkgLy8gU2tpcCBkZWVwIHBhdGNoZXMgZm9yIGFzc2lnbmVkIGtleXMuXG5cdFx0XHRcdD8gcm9vdFBhdGghLmNvbmNhdChwcm9wKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdC8vIERyYWZ0cyBvd25lZCBieSBgc2NvcGVgIGFyZSBmaW5hbGl6ZWQgaGVyZS5cblx0XHRjb25zdCByZXMgPSBmaW5hbGl6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUsIHBhdGgpXG5cdFx0c2V0KHRhcmdldE9iamVjdCwgcHJvcCwgcmVzKVxuXHRcdC8vIERyYWZ0cyBmcm9tIGFub3RoZXIgc2NvcGUgbXVzdCBwcmV2ZW50ZWQgdG8gYmUgZnJvemVuXG5cdFx0Ly8gaWYgd2UgZ290IGEgZHJhZnQgYmFjayBmcm9tIGZpbmFsaXplLCB3ZSdyZSBpbiBhIG5lc3RlZCBwcm9kdWNlIGFuZCBzaG91bGRuJ3QgZnJlZXplXG5cdFx0aWYgKGlzRHJhZnQocmVzKSkge1xuXHRcdFx0cm9vdFNjb3BlLmNhbkF1dG9GcmVlemVfID0gZmFsc2Vcblx0XHR9IGVsc2UgcmV0dXJuXG5cdH0gZWxzZSBpZiAodGFyZ2V0SXNTZXQpIHtcblx0XHR0YXJnZXRPYmplY3QuYWRkKGNoaWxkVmFsdWUpXG5cdH1cblx0Ly8gU2VhcmNoIG5ldyBvYmplY3RzIGZvciB1bmZpbmFsaXplZCBkcmFmdHMuIEZyb3plbiBvYmplY3RzIHNob3VsZCBuZXZlciBjb250YWluIGRyYWZ0cy5cblx0aWYgKGlzRHJhZnRhYmxlKGNoaWxkVmFsdWUpICYmICFpc0Zyb3plbihjaGlsZFZhbHVlKSkge1xuXHRcdGlmICghcm9vdFNjb3BlLmltbWVyXy5hdXRvRnJlZXplXyAmJiByb290U2NvcGUudW5maW5hbGl6ZWREcmFmdHNfIDwgMSkge1xuXHRcdFx0Ly8gb3B0aW1pemF0aW9uOiBpZiBhbiBvYmplY3QgaXMgbm90IGEgZHJhZnQsIGFuZCB3ZSBkb24ndCBoYXZlIHRvXG5cdFx0XHQvLyBkZWVwZnJlZXplIGV2ZXJ5dGhpbmcsIGFuZCB3ZSBhcmUgc3VyZSB0aGF0IG5vIGRyYWZ0cyBhcmUgbGVmdCBpbiB0aGUgcmVtYWluaW5nIG9iamVjdFxuXHRcdFx0Ly8gY2F1c2Ugd2Ugc2F3IGFuZCBmaW5hbGl6ZWQgYWxsIGRyYWZ0cyBhbHJlYWR5OyB3ZSBjYW4gc3RvcCB2aXNpdGluZyB0aGUgcmVzdCBvZiB0aGUgdHJlZS5cblx0XHRcdC8vIFRoaXMgYmVuZWZpdHMgZXNwZWNpYWxseSBhZGRpbmcgbGFyZ2UgZGF0YSB0cmVlJ3Mgd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuXG5cdFx0XHQvLyBTZWUgYWRkLWRhdGEuanMgcGVyZiB0ZXN0XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0ZmluYWxpemUocm9vdFNjb3BlLCBjaGlsZFZhbHVlKVxuXHRcdC8vIGltbWVyIGRlZXAgZnJlZXplcyBwbGFpbiBvYmplY3RzLCBzbyBpZiB0aGVyZSBpcyBubyBwYXJlbnQgc3RhdGUsIHdlIGZyZWV6ZSBhcyB3ZWxsXG5cdFx0aWYgKCFwYXJlbnRTdGF0ZSB8fCAhcGFyZW50U3RhdGUuc2NvcGVfLnBhcmVudF8pXG5cdFx0XHRtYXliZUZyZWV6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUpXG5cdH1cbn1cblxuZnVuY3Rpb24gbWF5YmVGcmVlemUoc2NvcGU6IEltbWVyU2NvcGUsIHZhbHVlOiBhbnksIGRlZXAgPSBmYWxzZSkge1xuXHQvLyB3ZSBuZXZlciBmcmVlemUgZm9yIGEgbm9uLXJvb3Qgc2NvcGU7IGFzIGl0IHdvdWxkIHByZXZlbnQgcHJ1bmluZyBmb3IgZHJhZnRzIGluc2lkZSB3cmFwcGluZyBvYmplY3RzXG5cdGlmICghc2NvcGUucGFyZW50XyAmJiBzY29wZS5pbW1lcl8uYXV0b0ZyZWV6ZV8gJiYgc2NvcGUuY2FuQXV0b0ZyZWV6ZV8pIHtcblx0XHRmcmVlemUodmFsdWUsIGRlZXApXG5cdH1cbn1cbiIsICJpbXBvcnQge1xuXHRlYWNoLFxuXHRoYXMsXG5cdGlzLFxuXHRpc0RyYWZ0YWJsZSxcblx0c2hhbGxvd0NvcHksXG5cdGxhdGVzdCxcblx0SW1tZXJCYXNlU3RhdGUsXG5cdEltbWVyU3RhdGUsXG5cdERyYWZ0ZWQsXG5cdEFueU9iamVjdCxcblx0QW55QXJyYXksXG5cdE9iamVjdGlzaCxcblx0Z2V0Q3VycmVudFNjb3BlLFxuXHREUkFGVF9TVEFURSxcblx0ZGllLFxuXHRjcmVhdGVQcm94eSxcblx0UHJveHlUeXBlXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmludGVyZmFjZSBQcm94eUJhc2VTdGF0ZSBleHRlbmRzIEltbWVyQmFzZVN0YXRlIHtcblx0YXNzaWduZWRfOiB7XG5cdFx0W3Byb3BlcnR5OiBzdHJpbmddOiBib29sZWFuXG5cdH1cblx0cGFyZW50Xz86IEltbWVyU3RhdGVcblx0cmV2b2tlXygpOiB2b2lkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJveHlPYmplY3RTdGF0ZSBleHRlbmRzIFByb3h5QmFzZVN0YXRlIHtcblx0dHlwZV86IFByb3h5VHlwZS5Qcm94eU9iamVjdFxuXHRiYXNlXzogYW55XG5cdGNvcHlfOiBhbnlcblx0ZHJhZnRfOiBEcmFmdGVkPEFueU9iamVjdCwgUHJveHlPYmplY3RTdGF0ZT5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm94eUFycmF5U3RhdGUgZXh0ZW5kcyBQcm94eUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuUHJveHlBcnJheVxuXHRiYXNlXzogQW55QXJyYXlcblx0Y29weV86IEFueUFycmF5IHwgbnVsbFxuXHRkcmFmdF86IERyYWZ0ZWQ8QW55QXJyYXksIFByb3h5QXJyYXlTdGF0ZT5cbn1cblxudHlwZSBQcm94eVN0YXRlID0gUHJveHlPYmplY3RTdGF0ZSB8IFByb3h5QXJyYXlTdGF0ZVxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgZHJhZnQgb2YgdGhlIGBiYXNlYCBvYmplY3QuXG4gKlxuICogVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgcGFyZW50IGRyYWZ0LXN0YXRlICh1c2VkIGludGVybmFsbHkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJveHlQcm94eTxUIGV4dGVuZHMgT2JqZWN0aXNoPihcblx0YmFzZTogVCxcblx0cGFyZW50PzogSW1tZXJTdGF0ZVxuKTogRHJhZnRlZDxULCBQcm94eVN0YXRlPiB7XG5cdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGJhc2UpXG5cdGNvbnN0IHN0YXRlOiBQcm94eVN0YXRlID0ge1xuXHRcdHR5cGVfOiBpc0FycmF5ID8gUHJveHlUeXBlLlByb3h5QXJyYXkgOiAoUHJveHlUeXBlLlByb3h5T2JqZWN0IGFzIGFueSksXG5cdFx0Ly8gVHJhY2sgd2hpY2ggcHJvZHVjZSBjYWxsIHRoaXMgaXMgYXNzb2NpYXRlZCB3aXRoLlxuXHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpISxcblx0XHQvLyBUcnVlIGZvciBib3RoIHNoYWxsb3cgYW5kIGRlZXAgY2hhbmdlcy5cblx0XHRtb2RpZmllZF86IGZhbHNlLFxuXHRcdC8vIFVzZWQgZHVyaW5nIGZpbmFsaXphdGlvbi5cblx0XHRmaW5hbGl6ZWRfOiBmYWxzZSxcblx0XHQvLyBUcmFjayB3aGljaCBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBhc3NpZ25lZCAodHJ1ZSkgb3IgZGVsZXRlZCAoZmFsc2UpLlxuXHRcdGFzc2lnbmVkXzoge30sXG5cdFx0Ly8gVGhlIHBhcmVudCBkcmFmdCBzdGF0ZS5cblx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0Ly8gVGhlIGJhc2Ugc3RhdGUuXG5cdFx0YmFzZV86IGJhc2UsXG5cdFx0Ly8gVGhlIGJhc2UgcHJveHkuXG5cdFx0ZHJhZnRfOiBudWxsIGFzIGFueSwgLy8gc2V0IGJlbG93XG5cdFx0Ly8gVGhlIGJhc2UgY29weSB3aXRoIGFueSB1cGRhdGVkIHZhbHVlcy5cblx0XHRjb3B5XzogbnVsbCxcblx0XHQvLyBDYWxsZWQgYnkgdGhlIGBwcm9kdWNlYCBmdW5jdGlvbi5cblx0XHRyZXZva2VfOiBudWxsIGFzIGFueSxcblx0XHRpc01hbnVhbF86IGZhbHNlXG5cdH1cblxuXHQvLyB0aGUgdHJhcHMgbXVzdCB0YXJnZXQgc29tZXRoaW5nLCBhIGJpdCBsaWtlIHRoZSAncmVhbCcgYmFzZS5cblx0Ly8gYnV0IGFsc28sIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkZXRlcm1pbmUgZnJvbSB0aGUgdGFyZ2V0IHdoYXQgdGhlIHJlbGV2YW50IHN0YXRlIGlzXG5cdC8vICh0byBhdm9pZCBjcmVhdGluZyB0cmFwcyBwZXIgaW5zdGFuY2UgdG8gY2FwdHVyZSB0aGUgc3RhdGUgaW4gY2xvc3VyZSxcblx0Ly8gYW5kIHRvIGF2b2lkIGNyZWF0aW5nIHdlaXJkIGhpZGRlbiBwcm9wZXJ0aWVzIGFzIHdlbGwpXG5cdC8vIFNvIHRoZSB0cmljayBpcyB0byB1c2UgJ3N0YXRlJyBhcyB0aGUgYWN0dWFsICd0YXJnZXQnISAoYW5kIG1ha2Ugc3VyZSB3ZSBpbnRlcmNlcHQgZXZlcnl0aGluZylcblx0Ly8gTm90ZSB0aGF0IGluIHRoZSBjYXNlIG9mIGFuIGFycmF5LCB3ZSBwdXQgdGhlIHN0YXRlIGluIGFuIGFycmF5IHRvIGhhdmUgYmV0dGVyIFJlZmxlY3QgZGVmYXVsdHMgb290YlxuXHRsZXQgdGFyZ2V0OiBUID0gc3RhdGUgYXMgYW55XG5cdGxldCB0cmFwczogUHJveHlIYW5kbGVyPG9iamVjdCB8IEFycmF5PGFueT4+ID0gb2JqZWN0VHJhcHNcblx0aWYgKGlzQXJyYXkpIHtcblx0XHR0YXJnZXQgPSBbc3RhdGVdIGFzIGFueVxuXHRcdHRyYXBzID0gYXJyYXlUcmFwc1xuXHR9XG5cblx0Y29uc3Qge3Jldm9rZSwgcHJveHl9ID0gUHJveHkucmV2b2NhYmxlKHRhcmdldCwgdHJhcHMpXG5cdHN0YXRlLmRyYWZ0XyA9IHByb3h5IGFzIGFueVxuXHRzdGF0ZS5yZXZva2VfID0gcmV2b2tlXG5cdHJldHVybiBwcm94eSBhcyBhbnlcbn1cblxuLyoqXG4gKiBPYmplY3QgZHJhZnRzXG4gKi9cbmV4cG9ydCBjb25zdCBvYmplY3RUcmFwczogUHJveHlIYW5kbGVyPFByb3h5U3RhdGU+ID0ge1xuXHRnZXQoc3RhdGUsIHByb3ApIHtcblx0XHRpZiAocHJvcCA9PT0gRFJBRlRfU1RBVEUpIHJldHVybiBzdGF0ZVxuXG5cdFx0Y29uc3Qgc291cmNlID0gbGF0ZXN0KHN0YXRlKVxuXHRcdGlmICghaGFzKHNvdXJjZSwgcHJvcCkpIHtcblx0XHRcdC8vIG5vbi1leGlzdGluZyBvciBub24tb3duIHByb3BlcnR5Li4uXG5cdFx0XHRyZXR1cm4gcmVhZFByb3BGcm9tUHJvdG8oc3RhdGUsIHNvdXJjZSwgcHJvcClcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWUgPSBzb3VyY2VbcHJvcF1cblx0XHRpZiAoc3RhdGUuZmluYWxpemVkXyB8fCAhaXNEcmFmdGFibGUodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWVcblx0XHR9XG5cdFx0Ly8gQ2hlY2sgZm9yIGV4aXN0aW5nIGRyYWZ0IGluIG1vZGlmaWVkIHN0YXRlLlxuXHRcdC8vIEFzc2lnbmVkIHZhbHVlcyBhcmUgbmV2ZXIgZHJhZnRlZC4gVGhpcyBjYXRjaGVzIGFueSBkcmFmdHMgd2UgY3JlYXRlZCwgdG9vLlxuXHRcdGlmICh2YWx1ZSA9PT0gcGVlayhzdGF0ZS5iYXNlXywgcHJvcCkpIHtcblx0XHRcdHByZXBhcmVDb3B5KHN0YXRlKVxuXHRcdFx0cmV0dXJuIChzdGF0ZS5jb3B5XyFbcHJvcCBhcyBhbnldID0gY3JlYXRlUHJveHkoXG5cdFx0XHRcdHN0YXRlLnNjb3BlXy5pbW1lcl8sXG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRzdGF0ZVxuXHRcdFx0KSlcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlXG5cdH0sXG5cdGhhcyhzdGF0ZSwgcHJvcCkge1xuXHRcdHJldHVybiBwcm9wIGluIGxhdGVzdChzdGF0ZSlcblx0fSxcblx0b3duS2V5cyhzdGF0ZSkge1xuXHRcdHJldHVybiBSZWZsZWN0Lm93bktleXMobGF0ZXN0KHN0YXRlKSlcblx0fSxcblx0c2V0KFxuXHRcdHN0YXRlOiBQcm94eU9iamVjdFN0YXRlLFxuXHRcdHByb3A6IHN0cmluZyAvKiBzdHJpY3RseSBub3QsIGJ1dCBoZWxwcyBUUyAqLyxcblx0XHR2YWx1ZVxuXHQpIHtcblx0XHRjb25zdCBkZXNjID0gZ2V0RGVzY3JpcHRvckZyb21Qcm90byhsYXRlc3Qoc3RhdGUpLCBwcm9wKVxuXHRcdGlmIChkZXNjPy5zZXQpIHtcblx0XHRcdC8vIHNwZWNpYWwgY2FzZTogaWYgdGhpcyB3cml0ZSBpcyBjYXB0dXJlZCBieSBhIHNldHRlciwgd2UgaGF2ZVxuXHRcdFx0Ly8gdG8gdHJpZ2dlciBpdCB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcblx0XHRcdGRlc2Muc2V0LmNhbGwoc3RhdGUuZHJhZnRfLCB2YWx1ZSlcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXHRcdGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG5cdFx0XHQvLyB0aGUgbGFzdCBjaGVjayBpcyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBzZXR0aW5nIGEgbm9uLWV4aXN0aW5nIHRvIHVuZGVmaW5lZCAod2hpY2ggaXMgYSBjaGFuZ2UpXG5cdFx0XHQvLyBmcm9tIHNldHRpbmcgYW4gZXhpc3RpbmcgcHJvcGVydHkgd2l0aCB2YWx1ZSB1bmRlZmluZWQgdG8gdW5kZWZpbmVkICh3aGljaCBpcyBub3QgYSBjaGFuZ2UpXG5cdFx0XHRjb25zdCBjdXJyZW50ID0gcGVlayhsYXRlc3Qoc3RhdGUpLCBwcm9wKVxuXHRcdFx0Ly8gc3BlY2lhbCBjYXNlLCBpZiB3ZSBhc3NpZ25pbmcgdGhlIG9yaWdpbmFsIHZhbHVlIHRvIGEgZHJhZnQsIHdlIGNhbiBpZ25vcmUgdGhlIGFzc2lnbm1lbnRcblx0XHRcdGNvbnN0IGN1cnJlbnRTdGF0ZTogUHJveHlPYmplY3RTdGF0ZSA9IGN1cnJlbnQ/LltEUkFGVF9TVEFURV1cblx0XHRcdGlmIChjdXJyZW50U3RhdGUgJiYgY3VycmVudFN0YXRlLmJhc2VfID09PSB2YWx1ZSkge1xuXHRcdFx0XHRzdGF0ZS5jb3B5XyFbcHJvcF0gPSB2YWx1ZVxuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF9bcHJvcF0gPSBmYWxzZVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0fVxuXHRcdFx0aWYgKGlzKHZhbHVlLCBjdXJyZW50KSAmJiAodmFsdWUgIT09IHVuZGVmaW5lZCB8fCBoYXMoc3RhdGUuYmFzZV8sIHByb3ApKSlcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdHByZXBhcmVDb3B5KHN0YXRlKVxuXHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0KHN0YXRlLmNvcHlfIVtwcm9wXSA9PT0gdmFsdWUgJiZcblx0XHRcdFx0Ly8gc3BlY2lhbCBjYXNlOiBoYW5kbGUgbmV3IHByb3BzIHdpdGggdmFsdWUgJ3VuZGVmaW5lZCdcblx0XHRcdFx0KHZhbHVlICE9PSB1bmRlZmluZWQgfHwgcHJvcCBpbiBzdGF0ZS5jb3B5XykpIHx8XG5cdFx0XHQvLyBzcGVjaWFsIGNhc2U6IE5hTlxuXHRcdFx0KE51bWJlci5pc05hTih2YWx1ZSkgJiYgTnVtYmVyLmlzTmFOKHN0YXRlLmNvcHlfIVtwcm9wXSkpXG5cdFx0KVxuXHRcdFx0cmV0dXJuIHRydWVcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdGF0ZS5jb3B5XyFbcHJvcF0gPSB2YWx1ZVxuXHRcdHN0YXRlLmFzc2lnbmVkX1twcm9wXSA9IHRydWVcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9LFxuXHRkZWxldGVQcm9wZXJ0eShzdGF0ZSwgcHJvcDogc3RyaW5nKSB7XG5cdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRpZiAocGVlayhzdGF0ZS5iYXNlXywgcHJvcCkgIT09IHVuZGVmaW5lZCB8fCBwcm9wIGluIHN0YXRlLmJhc2VfKSB7XG5cdFx0XHRzdGF0ZS5hc3NpZ25lZF9bcHJvcF0gPSBmYWxzZVxuXHRcdFx0cHJlcGFyZUNvcHkoc3RhdGUpXG5cdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgYW4gb3JpZ2luYWxseSBub3QgYXNzaWduZWQgcHJvcGVydHkgd2FzIGRlbGV0ZWRcblx0XHRcdGRlbGV0ZSBzdGF0ZS5hc3NpZ25lZF9bcHJvcF1cblx0XHR9XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGlmIChzdGF0ZS5jb3B5XykgZGVsZXRlIHN0YXRlLmNvcHlfW3Byb3BdXG5cdFx0cmV0dXJuIHRydWVcblx0fSxcblx0Ly8gTm90ZTogV2UgbmV2ZXIgY29lcmNlIGBkZXNjLnZhbHVlYCBpbnRvIGFuIEltbWVyIGRyYWZ0LCBiZWNhdXNlIHdlIGNhbid0IG1ha2Vcblx0Ly8gdGhlIHNhbWUgZ3VhcmFudGVlIGluIEVTNSBtb2RlLlxuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc3RhdGUsIHByb3ApIHtcblx0XHRjb25zdCBvd25lciA9IGxhdGVzdChzdGF0ZSlcblx0XHRjb25zdCBkZXNjID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob3duZXIsIHByb3ApXG5cdFx0aWYgKCFkZXNjKSByZXR1cm4gZGVzY1xuXHRcdHJldHVybiB7XG5cdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogc3RhdGUudHlwZV8gIT09IFByb3h5VHlwZS5Qcm94eUFycmF5IHx8IHByb3AgIT09IFwibGVuZ3RoXCIsXG5cdFx0XHRlbnVtZXJhYmxlOiBkZXNjLmVudW1lcmFibGUsXG5cdFx0XHR2YWx1ZTogb3duZXJbcHJvcF1cblx0XHR9XG5cdH0sXG5cdGRlZmluZVByb3BlcnR5KCkge1xuXHRcdGRpZSgxMSlcblx0fSxcblx0Z2V0UHJvdG90eXBlT2Yoc3RhdGUpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHN0YXRlLmJhc2VfKVxuXHR9LFxuXHRzZXRQcm90b3R5cGVPZigpIHtcblx0XHRkaWUoMTIpXG5cdH1cbn1cblxuLyoqXG4gKiBBcnJheSBkcmFmdHNcbiAqL1xuXG5jb25zdCBhcnJheVRyYXBzOiBQcm94eUhhbmRsZXI8W1Byb3h5QXJyYXlTdGF0ZV0+ID0ge31cbmVhY2gob2JqZWN0VHJhcHMsIChrZXksIGZuKSA9PiB7XG5cdC8vIEB0cy1pZ25vcmVcblx0YXJyYXlUcmFwc1trZXldID0gZnVuY3Rpb24oKSB7XG5cdFx0YXJndW1lbnRzWzBdID0gYXJndW1lbnRzWzBdWzBdXG5cdFx0cmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcblx0fVxufSlcbmFycmF5VHJhcHMuZGVsZXRlUHJvcGVydHkgPSBmdW5jdGlvbihzdGF0ZSwgcHJvcCkge1xuXHRpZiAoX19ERVZfXyAmJiBpc05hTihwYXJzZUludChwcm9wIGFzIGFueSkpKSBkaWUoMTMpXG5cdC8vIEB0cy1pZ25vcmVcblx0cmV0dXJuIGFycmF5VHJhcHMuc2V0IS5jYWxsKHRoaXMsIHN0YXRlLCBwcm9wLCB1bmRlZmluZWQpXG59XG5hcnJheVRyYXBzLnNldCA9IGZ1bmN0aW9uKHN0YXRlLCBwcm9wLCB2YWx1ZSkge1xuXHRpZiAoX19ERVZfXyAmJiBwcm9wICE9PSBcImxlbmd0aFwiICYmIGlzTmFOKHBhcnNlSW50KHByb3AgYXMgYW55KSkpIGRpZSgxNClcblx0cmV0dXJuIG9iamVjdFRyYXBzLnNldCEuY2FsbCh0aGlzLCBzdGF0ZVswXSwgcHJvcCwgdmFsdWUsIHN0YXRlWzBdKVxufVxuXG4vLyBBY2Nlc3MgYSBwcm9wZXJ0eSB3aXRob3V0IGNyZWF0aW5nIGFuIEltbWVyIGRyYWZ0LlxuZnVuY3Rpb24gcGVlayhkcmFmdDogRHJhZnRlZCwgcHJvcDogUHJvcGVydHlLZXkpIHtcblx0Y29uc3Qgc3RhdGUgPSBkcmFmdFtEUkFGVF9TVEFURV1cblx0Y29uc3Qgc291cmNlID0gc3RhdGUgPyBsYXRlc3Qoc3RhdGUpIDogZHJhZnRcblx0cmV0dXJuIHNvdXJjZVtwcm9wXVxufVxuXG5mdW5jdGlvbiByZWFkUHJvcEZyb21Qcm90byhzdGF0ZTogSW1tZXJTdGF0ZSwgc291cmNlOiBhbnksIHByb3A6IFByb3BlcnR5S2V5KSB7XG5cdGNvbnN0IGRlc2MgPSBnZXREZXNjcmlwdG9yRnJvbVByb3RvKHNvdXJjZSwgcHJvcClcblx0cmV0dXJuIGRlc2Ncblx0XHQ/IGB2YWx1ZWAgaW4gZGVzY1xuXHRcdFx0PyBkZXNjLnZhbHVlXG5cdFx0XHQ6IC8vIFRoaXMgaXMgYSB2ZXJ5IHNwZWNpYWwgY2FzZSwgaWYgdGhlIHByb3AgaXMgYSBnZXR0ZXIgZGVmaW5lZCBieSB0aGVcblx0XHRcdCAgLy8gcHJvdG90eXBlLCB3ZSBzaG91bGQgaW52b2tlIGl0IHdpdGggdGhlIGRyYWZ0IGFzIGNvbnRleHQhXG5cdFx0XHQgIGRlc2MuZ2V0Py5jYWxsKHN0YXRlLmRyYWZ0Xylcblx0XHQ6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBnZXREZXNjcmlwdG9yRnJvbVByb3RvKFxuXHRzb3VyY2U6IGFueSxcblx0cHJvcDogUHJvcGVydHlLZXlcbik6IFByb3BlcnR5RGVzY3JpcHRvciB8IHVuZGVmaW5lZCB7XG5cdC8vICdpbicgY2hlY2tzIHByb3RvIVxuXHRpZiAoIShwcm9wIGluIHNvdXJjZSkpIHJldHVybiB1bmRlZmluZWRcblx0bGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSlcblx0d2hpbGUgKHByb3RvKSB7XG5cdFx0Y29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIHByb3ApXG5cdFx0aWYgKGRlc2MpIHJldHVybiBkZXNjXG5cdFx0cHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pXG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFya0NoYW5nZWQoc3RhdGU6IEltbWVyU3RhdGUpIHtcblx0aWYgKCFzdGF0ZS5tb2RpZmllZF8pIHtcblx0XHRzdGF0ZS5tb2RpZmllZF8gPSB0cnVlXG5cdFx0aWYgKHN0YXRlLnBhcmVudF8pIHtcblx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlLnBhcmVudF8pXG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlQ29weShzdGF0ZToge2Jhc2VfOiBhbnk7IGNvcHlfOiBhbnl9KSB7XG5cdGlmICghc3RhdGUuY29weV8pIHtcblx0XHRzdGF0ZS5jb3B5XyA9IHNoYWxsb3dDb3B5KHN0YXRlLmJhc2VfKVxuXHR9XG59XG4iLCAiaW1wb3J0IHtcblx0SVByb2R1Y2VXaXRoUGF0Y2hlcyxcblx0SVByb2R1Y2UsXG5cdEltbWVyU3RhdGUsXG5cdERyYWZ0ZWQsXG5cdGlzRHJhZnRhYmxlLFxuXHRwcm9jZXNzUmVzdWx0LFxuXHRQYXRjaCxcblx0T2JqZWN0aXNoLFxuXHREUkFGVF9TVEFURSxcblx0RHJhZnQsXG5cdFBhdGNoTGlzdGVuZXIsXG5cdGlzRHJhZnQsXG5cdGlzTWFwLFxuXHRpc1NldCxcblx0Y3JlYXRlUHJveHlQcm94eSxcblx0Z2V0UGx1Z2luLFxuXHRkaWUsXG5cdGhhc1Byb3hpZXMsXG5cdGVudGVyU2NvcGUsXG5cdHJldm9rZVNjb3BlLFxuXHRsZWF2ZVNjb3BlLFxuXHR1c2VQYXRjaGVzSW5TY29wZSxcblx0Z2V0Q3VycmVudFNjb3BlLFxuXHROT1RISU5HLFxuXHRmcmVlemUsXG5cdGN1cnJlbnRcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuaW50ZXJmYWNlIFByb2R1Y2Vyc0ZucyB7XG5cdHByb2R1Y2U6IElQcm9kdWNlXG5cdHByb2R1Y2VXaXRoUGF0Y2hlczogSVByb2R1Y2VXaXRoUGF0Y2hlc1xufVxuXG5leHBvcnQgY2xhc3MgSW1tZXIgaW1wbGVtZW50cyBQcm9kdWNlcnNGbnMge1xuXHR1c2VQcm94aWVzXzogYm9vbGVhbiA9IGhhc1Byb3hpZXNcblxuXHRhdXRvRnJlZXplXzogYm9vbGVhbiA9IHRydWVcblxuXHRjb25zdHJ1Y3Rvcihjb25maWc/OiB7dXNlUHJveGllcz86IGJvb2xlYW47IGF1dG9GcmVlemU/OiBib29sZWFufSkge1xuXHRcdGlmICh0eXBlb2YgY29uZmlnPy51c2VQcm94aWVzID09PSBcImJvb2xlYW5cIilcblx0XHRcdHRoaXMuc2V0VXNlUHJveGllcyhjb25maWchLnVzZVByb3hpZXMpXG5cdFx0aWYgKHR5cGVvZiBjb25maWc/LmF1dG9GcmVlemUgPT09IFwiYm9vbGVhblwiKVxuXHRcdFx0dGhpcy5zZXRBdXRvRnJlZXplKGNvbmZpZyEuYXV0b0ZyZWV6ZSlcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYHByb2R1Y2VgIGZ1bmN0aW9uIHRha2VzIGEgdmFsdWUgYW5kIGEgXCJyZWNpcGUgZnVuY3Rpb25cIiAod2hvc2Vcblx0ICogcmV0dXJuIHZhbHVlIG9mdGVuIGRlcGVuZHMgb24gdGhlIGJhc2Ugc3RhdGUpLiBUaGUgcmVjaXBlIGZ1bmN0aW9uIGlzXG5cdCAqIGZyZWUgdG8gbXV0YXRlIGl0cyBmaXJzdCBhcmd1bWVudCBob3dldmVyIGl0IHdhbnRzLiBBbGwgbXV0YXRpb25zIGFyZVxuXHQgKiBvbmx5IGV2ZXIgYXBwbGllZCB0byBhIF9fY29weV9fIG9mIHRoZSBiYXNlIHN0YXRlLlxuXHQgKlxuXHQgKiBQYXNzIG9ubHkgYSBmdW5jdGlvbiB0byBjcmVhdGUgYSBcImN1cnJpZWQgcHJvZHVjZXJcIiB3aGljaCByZWxpZXZlcyB5b3Vcblx0ICogZnJvbSBwYXNzaW5nIHRoZSByZWNpcGUgZnVuY3Rpb24gZXZlcnkgdGltZS5cblx0ICpcblx0ICogT25seSBwbGFpbiBvYmplY3RzIGFuZCBhcnJheXMgYXJlIG1hZGUgbXV0YWJsZS4gQWxsIG90aGVyIG9iamVjdHMgYXJlXG5cdCAqIGNvbnNpZGVyZWQgdW5jb3B5YWJsZS5cblx0ICpcblx0ICogTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBfX2JvdW5kX18gdG8gaXRzIGBJbW1lcmAgaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7YW55fSBiYXNlIC0gdGhlIGluaXRpYWwgc3RhdGVcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gcmVjaXBlIC0gZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIHByb3h5IG9mIHRoZSBiYXNlIHN0YXRlIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCB3aGljaCBjYW4gYmUgZnJlZWx5IG1vZGlmaWVkXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHBhdGNoTGlzdGVuZXIgLSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggYWxsIHRoZSBwYXRjaGVzIHByb2R1Y2VkIGhlcmVcblx0ICogQHJldHVybnMge2FueX0gYSBuZXcgc3RhdGUsIG9yIHRoZSBpbml0aWFsIHN0YXRlIGlmIG5vdGhpbmcgd2FzIG1vZGlmaWVkXG5cdCAqL1xuXHRwcm9kdWNlOiBJUHJvZHVjZSA9IChiYXNlOiBhbnksIHJlY2lwZT86IGFueSwgcGF0Y2hMaXN0ZW5lcj86IGFueSkgPT4ge1xuXHRcdC8vIGN1cnJpZWQgaW52b2NhdGlvblxuXHRcdGlmICh0eXBlb2YgYmFzZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEJhc2UgPSByZWNpcGVcblx0XHRcdHJlY2lwZSA9IGJhc2VcblxuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXNcblx0XHRcdHJldHVybiBmdW5jdGlvbiBjdXJyaWVkUHJvZHVjZShcblx0XHRcdFx0dGhpczogYW55LFxuXHRcdFx0XHRiYXNlID0gZGVmYXVsdEJhc2UsXG5cdFx0XHRcdC4uLmFyZ3M6IGFueVtdXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGYucHJvZHVjZShiYXNlLCAoZHJhZnQ6IERyYWZ0ZWQpID0+IHJlY2lwZS5jYWxsKHRoaXMsIGRyYWZ0LCAuLi5hcmdzKSkgLy8gcHJldHRpZXItaWdub3JlXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIikgZGllKDYpXG5cdFx0aWYgKHBhdGNoTGlzdGVuZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcGF0Y2hMaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiKVxuXHRcdFx0ZGllKDcpXG5cblx0XHRsZXQgcmVzdWx0XG5cblx0XHQvLyBPbmx5IHBsYWluIG9iamVjdHMsIGFycmF5cywgYW5kIFwiaW1tZXJhYmxlIGNsYXNzZXNcIiBhcmUgZHJhZnRlZC5cblx0XHRpZiAoaXNEcmFmdGFibGUoYmFzZSkpIHtcblx0XHRcdGNvbnN0IHNjb3BlID0gZW50ZXJTY29wZSh0aGlzKVxuXHRcdFx0Y29uc3QgcHJveHkgPSBjcmVhdGVQcm94eSh0aGlzLCBiYXNlLCB1bmRlZmluZWQpXG5cdFx0XHRsZXQgaGFzRXJyb3IgPSB0cnVlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXN1bHQgPSByZWNpcGUocHJveHkpXG5cdFx0XHRcdGhhc0Vycm9yID0gZmFsc2Vcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdC8vIGZpbmFsbHkgaW5zdGVhZCBvZiBjYXRjaCArIHJldGhyb3cgYmV0dGVyIHByZXNlcnZlcyBvcmlnaW5hbCBzdGFja1xuXHRcdFx0XHRpZiAoaGFzRXJyb3IpIHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0XHRlbHNlIGxlYXZlU2NvcGUoc2NvcGUpXG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0LnRoZW4oXG5cdFx0XHRcdFx0cmVzdWx0ID0+IHtcblx0XHRcdFx0XHRcdHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKVxuXHRcdFx0XHRcdFx0cmV0dXJuIHByb2Nlc3NSZXN1bHQocmVzdWx0LCBzY29wZSlcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHRcdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3Jcblx0XHRcdFx0XHR9XG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHRcdHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKVxuXHRcdFx0cmV0dXJuIHByb2Nlc3NSZXN1bHQocmVzdWx0LCBzY29wZSlcblx0XHR9IGVsc2UgaWYgKCFiYXNlIHx8IHR5cGVvZiBiYXNlICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRyZXN1bHQgPSByZWNpcGUoYmFzZSlcblx0XHRcdGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkgcmVzdWx0ID0gYmFzZVxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gTk9USElORykgcmVzdWx0ID0gdW5kZWZpbmVkXG5cdFx0XHRpZiAodGhpcy5hdXRvRnJlZXplXykgZnJlZXplKHJlc3VsdCwgdHJ1ZSlcblx0XHRcdGlmIChwYXRjaExpc3RlbmVyKSB7XG5cdFx0XHRcdGNvbnN0IHA6IFBhdGNoW10gPSBbXVxuXHRcdFx0XHRjb25zdCBpcDogUGF0Y2hbXSA9IFtdXG5cdFx0XHRcdGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKGJhc2UsIHJlc3VsdCwgcCwgaXApXG5cdFx0XHRcdHBhdGNoTGlzdGVuZXIocCwgaXApXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0XG5cdFx0fSBlbHNlIGRpZSgyMSwgYmFzZSlcblx0fVxuXG5cdHByb2R1Y2VXaXRoUGF0Y2hlczogSVByb2R1Y2VXaXRoUGF0Y2hlcyA9IChiYXNlOiBhbnksIHJlY2lwZT86IGFueSk6IGFueSA9PiB7XG5cdFx0Ly8gY3VycmllZCBpbnZvY2F0aW9uXG5cdFx0aWYgKHR5cGVvZiBiYXNlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybiAoc3RhdGU6IGFueSwgLi4uYXJnczogYW55W10pID0+XG5cdFx0XHRcdHRoaXMucHJvZHVjZVdpdGhQYXRjaGVzKHN0YXRlLCAoZHJhZnQ6IGFueSkgPT4gYmFzZShkcmFmdCwgLi4uYXJncykpXG5cdFx0fVxuXG5cdFx0bGV0IHBhdGNoZXM6IFBhdGNoW10sIGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5wcm9kdWNlKGJhc2UsIHJlY2lwZSwgKHA6IFBhdGNoW10sIGlwOiBQYXRjaFtdKSA9PiB7XG5cdFx0XHRwYXRjaGVzID0gcFxuXHRcdFx0aW52ZXJzZVBhdGNoZXMgPSBpcFxuXHRcdH0pXG5cblx0XHRpZiAodHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0cmV0dXJuIHJlc3VsdC50aGVuKG5leHRTdGF0ZSA9PiBbbmV4dFN0YXRlLCBwYXRjaGVzISwgaW52ZXJzZVBhdGNoZXMhXSlcblx0XHR9XG5cdFx0cmV0dXJuIFtyZXN1bHQsIHBhdGNoZXMhLCBpbnZlcnNlUGF0Y2hlcyFdXG5cdH1cblxuXHRjcmVhdGVEcmFmdDxUIGV4dGVuZHMgT2JqZWN0aXNoPihiYXNlOiBUKTogRHJhZnQ8VD4ge1xuXHRcdGlmICghaXNEcmFmdGFibGUoYmFzZSkpIGRpZSg4KVxuXHRcdGlmIChpc0RyYWZ0KGJhc2UpKSBiYXNlID0gY3VycmVudChiYXNlKVxuXHRcdGNvbnN0IHNjb3BlID0gZW50ZXJTY29wZSh0aGlzKVxuXHRcdGNvbnN0IHByb3h5ID0gY3JlYXRlUHJveHkodGhpcywgYmFzZSwgdW5kZWZpbmVkKVxuXHRcdHByb3h5W0RSQUZUX1NUQVRFXS5pc01hbnVhbF8gPSB0cnVlXG5cdFx0bGVhdmVTY29wZShzY29wZSlcblx0XHRyZXR1cm4gcHJveHkgYXMgYW55XG5cdH1cblxuXHRmaW5pc2hEcmFmdDxEIGV4dGVuZHMgRHJhZnQ8YW55Pj4oXG5cdFx0ZHJhZnQ6IEQsXG5cdFx0cGF0Y2hMaXN0ZW5lcj86IFBhdGNoTGlzdGVuZXJcblx0KTogRCBleHRlbmRzIERyYWZ0PGluZmVyIFQ+ID8gVCA6IG5ldmVyIHtcblx0XHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IGRyYWZ0ICYmIChkcmFmdCBhcyBhbnkpW0RSQUZUX1NUQVRFXVxuXHRcdGlmIChfX0RFVl9fKSB7XG5cdFx0XHRpZiAoIXN0YXRlIHx8ICFzdGF0ZS5pc01hbnVhbF8pIGRpZSg5KVxuXHRcdFx0aWYgKHN0YXRlLmZpbmFsaXplZF8pIGRpZSgxMClcblx0XHR9XG5cdFx0Y29uc3Qge3Njb3BlXzogc2NvcGV9ID0gc3RhdGVcblx0XHR1c2VQYXRjaGVzSW5TY29wZShzY29wZSwgcGF0Y2hMaXN0ZW5lcilcblx0XHRyZXR1cm4gcHJvY2Vzc1Jlc3VsdCh1bmRlZmluZWQsIHNjb3BlKVxuXHR9XG5cblx0LyoqXG5cdCAqIFBhc3MgdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IGZyZWV6ZSBhbGwgY29waWVzIGNyZWF0ZWQgYnkgSW1tZXIuXG5cdCAqXG5cdCAqIEJ5IGRlZmF1bHQsIGF1dG8tZnJlZXppbmcgaXMgZW5hYmxlZC5cblx0ICovXG5cdHNldEF1dG9GcmVlemUodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmF1dG9GcmVlemVfID0gdmFsdWVcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXNzIHRydWUgdG8gdXNlIHRoZSBFUzIwMTUgYFByb3h5YCBjbGFzcyB3aGVuIGNyZWF0aW5nIGRyYWZ0cywgd2hpY2ggaXNcblx0ICogYWx3YXlzIGZhc3RlciB0aGFuIHVzaW5nIEVTNSBwcm94aWVzLlxuXHQgKlxuXHQgKiBCeSBkZWZhdWx0LCBmZWF0dXJlIGRldGVjdGlvbiBpcyB1c2VkLCBzbyBjYWxsaW5nIHRoaXMgaXMgcmFyZWx5IG5lY2Vzc2FyeS5cblx0ICovXG5cdHNldFVzZVByb3hpZXModmFsdWU6IGJvb2xlYW4pIHtcblx0XHRpZiAodmFsdWUgJiYgIWhhc1Byb3hpZXMpIHtcblx0XHRcdGRpZSgyMClcblx0XHR9XG5cdFx0dGhpcy51c2VQcm94aWVzXyA9IHZhbHVlXG5cdH1cblxuXHRhcHBseVBhdGNoZXM8VCBleHRlbmRzIE9iamVjdGlzaD4oYmFzZTogVCwgcGF0Y2hlczogUGF0Y2hbXSk6IFQge1xuXHRcdC8vIElmIGEgcGF0Y2ggcmVwbGFjZXMgdGhlIGVudGlyZSBzdGF0ZSwgdGFrZSB0aGF0IHJlcGxhY2VtZW50IGFzIGJhc2Vcblx0XHQvLyBiZWZvcmUgYXBwbHlpbmcgcGF0Y2hlc1xuXHRcdGxldCBpOiBudW1iZXJcblx0XHRmb3IgKGkgPSBwYXRjaGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBwYXRjaCA9IHBhdGNoZXNbaV1cblx0XHRcdGlmIChwYXRjaC5wYXRoLmxlbmd0aCA9PT0gMCAmJiBwYXRjaC5vcCA9PT0gXCJyZXBsYWNlXCIpIHtcblx0XHRcdFx0YmFzZSA9IHBhdGNoLnZhbHVlXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIElmIHRoZXJlIHdhcyBhIHBhdGNoIHRoYXQgcmVwbGFjZWQgdGhlIGVudGlyZSBzdGF0ZSwgc3RhcnQgZnJvbSB0aGVcblx0XHQvLyBwYXRjaCBhZnRlciB0aGF0LlxuXHRcdGlmIChpID4gLTEpIHtcblx0XHRcdHBhdGNoZXMgPSBwYXRjaGVzLnNsaWNlKGkgKyAxKVxuXHRcdH1cblxuXHRcdGNvbnN0IGFwcGx5UGF0Y2hlc0ltcGwgPSBnZXRQbHVnaW4oXCJQYXRjaGVzXCIpLmFwcGx5UGF0Y2hlc19cblx0XHRpZiAoaXNEcmFmdChiYXNlKSkge1xuXHRcdFx0Ly8gTi5COiBuZXZlciBoaXRzIGlmIHNvbWUgcGF0Y2ggYSByZXBsYWNlbWVudCwgcGF0Y2hlcyBhcmUgbmV2ZXIgZHJhZnRzXG5cdFx0XHRyZXR1cm4gYXBwbHlQYXRjaGVzSW1wbChiYXNlLCBwYXRjaGVzKVxuXHRcdH1cblx0XHQvLyBPdGhlcndpc2UsIHByb2R1Y2UgYSBjb3B5IG9mIHRoZSBiYXNlIHN0YXRlLlxuXHRcdHJldHVybiB0aGlzLnByb2R1Y2UoYmFzZSwgKGRyYWZ0OiBEcmFmdGVkKSA9PlxuXHRcdFx0YXBwbHlQYXRjaGVzSW1wbChkcmFmdCwgcGF0Y2hlcylcblx0XHQpXG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3h5PFQgZXh0ZW5kcyBPYmplY3Rpc2g+KFxuXHRpbW1lcjogSW1tZXIsXG5cdHZhbHVlOiBULFxuXHRwYXJlbnQ/OiBJbW1lclN0YXRlXG4pOiBEcmFmdGVkPFQsIEltbWVyU3RhdGU+IHtcblx0Ly8gcHJlY29uZGl0aW9uOiBjcmVhdGVQcm94eSBzaG91bGQgYmUgZ3VhcmRlZCBieSBpc0RyYWZ0YWJsZSwgc28gd2Uga25vdyB3ZSBjYW4gc2FmZWx5IGRyYWZ0XG5cdGNvbnN0IGRyYWZ0OiBEcmFmdGVkID0gaXNNYXAodmFsdWUpXG5cdFx0PyBnZXRQbHVnaW4oXCJNYXBTZXRcIikucHJveHlNYXBfKHZhbHVlLCBwYXJlbnQpXG5cdFx0OiBpc1NldCh2YWx1ZSlcblx0XHQ/IGdldFBsdWdpbihcIk1hcFNldFwiKS5wcm94eVNldF8odmFsdWUsIHBhcmVudClcblx0XHQ6IGltbWVyLnVzZVByb3hpZXNfXG5cdFx0PyBjcmVhdGVQcm94eVByb3h5KHZhbHVlLCBwYXJlbnQpXG5cdFx0OiBnZXRQbHVnaW4oXCJFUzVcIikuY3JlYXRlRVM1UHJveHlfKHZhbHVlLCBwYXJlbnQpXG5cblx0Y29uc3Qgc2NvcGUgPSBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKClcblx0c2NvcGUuZHJhZnRzXy5wdXNoKGRyYWZ0KVxuXHRyZXR1cm4gZHJhZnRcbn1cbiIsICJpbXBvcnQge1xuXHRkaWUsXG5cdGlzRHJhZnQsXG5cdHNoYWxsb3dDb3B5LFxuXHRlYWNoLFxuXHREUkFGVF9TVEFURSxcblx0Z2V0LFxuXHRzZXQsXG5cdEltbWVyU3RhdGUsXG5cdGlzRHJhZnRhYmxlLFxuXHRBcmNodHlwZSxcblx0Z2V0QXJjaHR5cGUsXG5cdGdldFBsdWdpblxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG4vKiogVGFrZXMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhIGRyYWZ0IGFuZCBmaW5hbGl6ZXMgaXQgKGJ1dCB3aXRob3V0IGZyZWV6aW5nKS4gVGhpcyBpcyBhIGdyZWF0IHV0aWxpdHkgdG8gcHJpbnQgdGhlIGN1cnJlbnQgc3RhdGUgZHVyaW5nIGRlYnVnZ2luZyAobm8gUHJveGllcyBpbiB0aGUgd2F5KS4gVGhlIG91dHB1dCBvZiBjdXJyZW50IGNhbiBhbHNvIGJlIHNhZmVseSBsZWFrZWQgb3V0c2lkZSB0aGUgcHJvZHVjZXIuICovXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudDxUPih2YWx1ZTogVCk6IFRcbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50KHZhbHVlOiBhbnkpOiBhbnkge1xuXHRpZiAoIWlzRHJhZnQodmFsdWUpKSBkaWUoMjIsIHZhbHVlKVxuXHRyZXR1cm4gY3VycmVudEltcGwodmFsdWUpXG59XG5cbmZ1bmN0aW9uIGN1cnJlbnRJbXBsKHZhbHVlOiBhbnkpOiBhbnkge1xuXHRpZiAoIWlzRHJhZnRhYmxlKHZhbHVlKSkgcmV0dXJuIHZhbHVlXG5cdGNvbnN0IHN0YXRlOiBJbW1lclN0YXRlIHwgdW5kZWZpbmVkID0gdmFsdWVbRFJBRlRfU1RBVEVdXG5cdGxldCBjb3B5OiBhbnlcblx0Y29uc3QgYXJjaFR5cGUgPSBnZXRBcmNodHlwZSh2YWx1ZSlcblx0aWYgKHN0YXRlKSB7XG5cdFx0aWYgKFxuXHRcdFx0IXN0YXRlLm1vZGlmaWVkXyAmJlxuXHRcdFx0KHN0YXRlLnR5cGVfIDwgNCB8fCAhZ2V0UGx1Z2luKFwiRVM1XCIpLmhhc0NoYW5nZXNfKHN0YXRlIGFzIGFueSkpXG5cdFx0KVxuXHRcdFx0cmV0dXJuIHN0YXRlLmJhc2VfXG5cdFx0Ly8gT3B0aW1pemF0aW9uOiBhdm9pZCBnZW5lcmF0aW5nIG5ldyBkcmFmdHMgZHVyaW5nIGNvcHlpbmdcblx0XHRzdGF0ZS5maW5hbGl6ZWRfID0gdHJ1ZVxuXHRcdGNvcHkgPSBjb3B5SGVscGVyKHZhbHVlLCBhcmNoVHlwZSlcblx0XHRzdGF0ZS5maW5hbGl6ZWRfID0gZmFsc2Vcblx0fSBlbHNlIHtcblx0XHRjb3B5ID0gY29weUhlbHBlcih2YWx1ZSwgYXJjaFR5cGUpXG5cdH1cblxuXHRlYWNoKGNvcHksIChrZXksIGNoaWxkVmFsdWUpID0+IHtcblx0XHRpZiAoc3RhdGUgJiYgZ2V0KHN0YXRlLmJhc2VfLCBrZXkpID09PSBjaGlsZFZhbHVlKSByZXR1cm4gLy8gbm8gbmVlZCB0byBjb3B5IG9yIHNlYXJjaCBpbiBzb21ldGhpbmcgdGhhdCBkaWRuJ3QgY2hhbmdlXG5cdFx0c2V0KGNvcHksIGtleSwgY3VycmVudEltcGwoY2hpbGRWYWx1ZSkpXG5cdH0pXG5cdC8vIEluIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IGNvbnNpZGVyIGZyZWV6aW5nIGhlcmUsIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNldHRpbmdzXG5cdHJldHVybiBhcmNoVHlwZSA9PT0gQXJjaHR5cGUuU2V0ID8gbmV3IFNldChjb3B5KSA6IGNvcHlcbn1cblxuZnVuY3Rpb24gY29weUhlbHBlcih2YWx1ZTogYW55LCBhcmNoVHlwZTogbnVtYmVyKTogYW55IHtcblx0Ly8gY3JlYXRlcyBhIHNoYWxsb3cgY29weSwgZXZlbiBpZiBpdCBpcyBhIG1hcCBvciBzZXRcblx0c3dpdGNoIChhcmNoVHlwZSkge1xuXHRcdGNhc2UgQXJjaHR5cGUuTWFwOlxuXHRcdFx0cmV0dXJuIG5ldyBNYXAodmFsdWUpXG5cdFx0Y2FzZSBBcmNodHlwZS5TZXQ6XG5cdFx0XHQvLyBTZXQgd2lsbCBiZSBjbG9uZWQgYXMgYXJyYXkgdGVtcG9yYXJpbHksIHNvIHRoYXQgd2UgY2FuIHJlcGxhY2UgaW5kaXZpZHVhbCBpdGVtc1xuXHRcdFx0cmV0dXJuIEFycmF5LmZyb20odmFsdWUpXG5cdH1cblx0cmV0dXJuIHNoYWxsb3dDb3B5KHZhbHVlKVxufVxuIiwgImltcG9ydCB7XG5cdEltbWVyU3RhdGUsXG5cdERyYWZ0ZWQsXG5cdEVTNUFycmF5U3RhdGUsXG5cdEVTNU9iamVjdFN0YXRlLFxuXHRlYWNoLFxuXHRoYXMsXG5cdGlzRHJhZnQsXG5cdGxhdGVzdCxcblx0RFJBRlRfU1RBVEUsXG5cdGlzLFxuXHRsb2FkUGx1Z2luLFxuXHRJbW1lclNjb3BlLFxuXHRQcm94eVR5cGUsXG5cdGdldEN1cnJlbnRTY29wZSxcblx0ZGllLFxuXHRtYXJrQ2hhbmdlZCxcblx0b2JqZWN0VHJhcHMsXG5cdG93bktleXMsXG5cdGdldE93blByb3BlcnR5RGVzY3JpcHRvcnNcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxudHlwZSBFUzVTdGF0ZSA9IEVTNUFycmF5U3RhdGUgfCBFUzVPYmplY3RTdGF0ZVxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlRVM1KCkge1xuXHRmdW5jdGlvbiB3aWxsRmluYWxpemVFUzVfKFxuXHRcdHNjb3BlOiBJbW1lclNjb3BlLFxuXHRcdHJlc3VsdDogYW55LFxuXHRcdGlzUmVwbGFjZWQ6IGJvb2xlYW5cblx0KSB7XG5cdFx0aWYgKCFpc1JlcGxhY2VkKSB7XG5cdFx0XHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRcdFx0bWFya0NoYW5nZXNSZWN1cnNpdmVseShzY29wZS5kcmFmdHNfIVswXSlcblx0XHRcdH1cblx0XHRcdC8vIFRoaXMgaXMgZmFzdGVyIHdoZW4gd2UgZG9uJ3QgY2FyZSBhYm91dCB3aGljaCBhdHRyaWJ1dGVzIGNoYW5nZWQuXG5cdFx0XHRtYXJrQ2hhbmdlc1N3ZWVwKHNjb3BlLmRyYWZ0c18pXG5cdFx0fVxuXHRcdC8vIFdoZW4gYSBjaGlsZCBkcmFmdCBpcyByZXR1cm5lZCwgbG9vayBmb3IgY2hhbmdlcy5cblx0XHRlbHNlIGlmIChcblx0XHRcdGlzRHJhZnQocmVzdWx0KSAmJlxuXHRcdFx0KHJlc3VsdFtEUkFGVF9TVEFURV0gYXMgRVM1U3RhdGUpLnNjb3BlXyA9PT0gc2NvcGVcblx0XHQpIHtcblx0XHRcdG1hcmtDaGFuZ2VzU3dlZXAoc2NvcGUuZHJhZnRzXylcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBjcmVhdGVFUzVEcmFmdChpc0FycmF5OiBib29sZWFuLCBiYXNlOiBhbnkpIHtcblx0XHRpZiAoaXNBcnJheSkge1xuXHRcdFx0Y29uc3QgZHJhZnQgPSBuZXcgQXJyYXkoYmFzZS5sZW5ndGgpXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGJhc2UubGVuZ3RoOyBpKyspXG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkcmFmdCwgXCJcIiArIGksIHByb3h5UHJvcGVydHkoaSwgdHJ1ZSkpXG5cdFx0XHRyZXR1cm4gZHJhZnRcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvcnMgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGJhc2UpXG5cdFx0XHRkZWxldGUgZGVzY3JpcHRvcnNbRFJBRlRfU1RBVEUgYXMgYW55XVxuXHRcdFx0Y29uc3Qga2V5cyA9IG93bktleXMoZGVzY3JpcHRvcnMpXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qga2V5OiBhbnkgPSBrZXlzW2ldXG5cdFx0XHRcdGRlc2NyaXB0b3JzW2tleV0gPSBwcm94eVByb3BlcnR5KFxuXHRcdFx0XHRcdGtleSxcblx0XHRcdFx0XHRpc0FycmF5IHx8ICEhZGVzY3JpcHRvcnNba2V5XS5lbnVtZXJhYmxlXG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHRcdHJldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlKSwgZGVzY3JpcHRvcnMpXG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlRVM1UHJveHlfPFQ+KFxuXHRcdGJhc2U6IFQsXG5cdFx0cGFyZW50PzogSW1tZXJTdGF0ZVxuXHQpOiBEcmFmdGVkPFQsIEVTNU9iamVjdFN0YXRlIHwgRVM1QXJyYXlTdGF0ZT4ge1xuXHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGJhc2UpXG5cdFx0Y29uc3QgZHJhZnQgPSBjcmVhdGVFUzVEcmFmdChpc0FycmF5LCBiYXNlKVxuXG5cdFx0Y29uc3Qgc3RhdGU6IEVTNU9iamVjdFN0YXRlIHwgRVM1QXJyYXlTdGF0ZSA9IHtcblx0XHRcdHR5cGVfOiBpc0FycmF5ID8gUHJveHlUeXBlLkVTNUFycmF5IDogKFByb3h5VHlwZS5FUzVPYmplY3QgYXMgYW55KSxcblx0XHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpLFxuXHRcdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHRcdGZpbmFsaXplZF86IGZhbHNlLFxuXHRcdFx0YXNzaWduZWRfOiB7fSxcblx0XHRcdHBhcmVudF86IHBhcmVudCxcblx0XHRcdC8vIGJhc2UgaXMgdGhlIG9iamVjdCB3ZSBhcmUgZHJhZnRpbmdcblx0XHRcdGJhc2VfOiBiYXNlLFxuXHRcdFx0Ly8gZHJhZnQgaXMgdGhlIGRyYWZ0IG9iamVjdCBpdHNlbGYsIHRoYXQgdHJhcHMgYWxsIHJlYWRzIGFuZCByZWFkcyBmcm9tIGVpdGhlciB0aGUgYmFzZSAoaWYgdW5tb2RpZmllZCkgb3IgY29weSAoaWYgbW9kaWZpZWQpXG5cdFx0XHRkcmFmdF86IGRyYWZ0LFxuXHRcdFx0Y29weV86IG51bGwsXG5cdFx0XHRyZXZva2VkXzogZmFsc2UsXG5cdFx0XHRpc01hbnVhbF86IGZhbHNlXG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRyYWZ0LCBEUkFGVF9TVEFURSwge1xuXHRcdFx0dmFsdWU6IHN0YXRlLFxuXHRcdFx0Ly8gZW51bWVyYWJsZTogZmFsc2UgPC0gdGhlIGRlZmF1bHRcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSlcblx0XHRyZXR1cm4gZHJhZnRcblx0fVxuXG5cdC8vIHByb3BlcnR5IGRlc2NyaXB0b3JzIGFyZSByZWN5Y2xlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgY3JlYXRlIGEgZ2V0IGFuZCBzZXQgY2xvc3VyZSBwZXIgcHJvcGVydHksXG5cdC8vIGJ1dCBzaGFyZSB0aGVtIGFsbCBpbnN0ZWFkXG5cdGNvbnN0IGRlc2NyaXB0b3JzOiB7W3Byb3A6IHN0cmluZ106IFByb3BlcnR5RGVzY3JpcHRvcn0gPSB7fVxuXG5cdGZ1bmN0aW9uIHByb3h5UHJvcGVydHkoXG5cdFx0cHJvcDogc3RyaW5nIHwgbnVtYmVyLFxuXHRcdGVudW1lcmFibGU6IGJvb2xlYW5cblx0KTogUHJvcGVydHlEZXNjcmlwdG9yIHtcblx0XHRsZXQgZGVzYyA9IGRlc2NyaXB0b3JzW3Byb3BdXG5cdFx0aWYgKGRlc2MpIHtcblx0XHRcdGRlc2MuZW51bWVyYWJsZSA9IGVudW1lcmFibGVcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVzY3JpcHRvcnNbcHJvcF0gPSBkZXNjID0ge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGVudW1lcmFibGUsXG5cdFx0XHRcdGdldCh0aGlzOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRcdFx0aWYgKF9fREVWX18pIGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0cmV0dXJuIG9iamVjdFRyYXBzLmdldChzdGF0ZSwgcHJvcClcblx0XHRcdFx0fSxcblx0XHRcdFx0c2V0KHRoaXM6IGFueSwgdmFsdWUpIHtcblx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRcdFx0aWYgKF9fREVWX18pIGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdFx0b2JqZWN0VHJhcHMuc2V0KHN0YXRlLCBwcm9wLCB2YWx1ZSlcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZGVzY1xuXHR9XG5cblx0Ly8gVGhpcyBsb29rcyBleHBlbnNpdmUsIGJ1dCBvbmx5IHByb3hpZXMgYXJlIHZpc2l0ZWQsIGFuZCBvbmx5IG9iamVjdHMgd2l0aG91dCBrbm93biBjaGFuZ2VzIGFyZSBzY2FubmVkLlxuXHRmdW5jdGlvbiBtYXJrQ2hhbmdlc1N3ZWVwKGRyYWZ0czogRHJhZnRlZDxhbnksIEltbWVyU3RhdGU+W10pIHtcblx0XHQvLyBUaGUgbmF0dXJhbCBvcmRlciBvZiBkcmFmdHMgaW4gdGhlIGBzY29wZWAgYXJyYXkgaXMgYmFzZWQgb24gd2hlbiB0aGV5XG5cdFx0Ly8gd2VyZSBhY2Nlc3NlZC4gQnkgcHJvY2Vzc2luZyBkcmFmdHMgaW4gcmV2ZXJzZSBuYXR1cmFsIG9yZGVyLCB3ZSBoYXZlIGFcblx0XHQvLyBiZXR0ZXIgY2hhbmNlIG9mIHByb2Nlc3NpbmcgbGVhZiBub2RlcyBmaXJzdC4gV2hlbiBhIGxlYWYgbm9kZSBpcyBrbm93biB0b1xuXHRcdC8vIGhhdmUgY2hhbmdlZCwgd2UgY2FuIGF2b2lkIGFueSB0cmF2ZXJzYWwgb2YgaXRzIGFuY2VzdG9yIG5vZGVzLlxuXHRcdGZvciAobGV0IGkgPSBkcmFmdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBFUzVTdGF0ZSA9IGRyYWZ0c1tpXVtEUkFGVF9TVEFURV1cblx0XHRcdGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG5cdFx0XHRcdHN3aXRjaCAoc3RhdGUudHlwZV8pIHtcblx0XHRcdFx0XHRjYXNlIFByb3h5VHlwZS5FUzVBcnJheTpcblx0XHRcdFx0XHRcdGlmIChoYXNBcnJheUNoYW5nZXMoc3RhdGUpKSBtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Y2FzZSBQcm94eVR5cGUuRVM1T2JqZWN0OlxuXHRcdFx0XHRcdFx0aWYgKGhhc09iamVjdENoYW5nZXMoc3RhdGUpKSBtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBtYXJrQ2hhbmdlc1JlY3Vyc2l2ZWx5KG9iamVjdDogYW55KSB7XG5cdFx0aWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gXCJvYmplY3RcIikgcmV0dXJuXG5cdFx0Y29uc3Qgc3RhdGU6IEVTNVN0YXRlIHwgdW5kZWZpbmVkID0gb2JqZWN0W0RSQUZUX1NUQVRFXVxuXHRcdGlmICghc3RhdGUpIHJldHVyblxuXHRcdGNvbnN0IHtiYXNlXywgZHJhZnRfLCBhc3NpZ25lZF8sIHR5cGVffSA9IHN0YXRlXG5cdFx0aWYgKHR5cGVfID09PSBQcm94eVR5cGUuRVM1T2JqZWN0KSB7XG5cdFx0XHQvLyBMb29rIGZvciBhZGRlZCBrZXlzLlxuXHRcdFx0Ly8gcHJvYmFibHkgdGhlcmUgaXMgYSBmYXN0ZXIgd2F5IHRvIGRldGVjdCBjaGFuZ2VzLCBhcyBzd2VlcCArIHJlY3Vyc2Ugc2VlbXMgdG8gZG8gc29tZVxuXHRcdFx0Ly8gdW5uZWNlc3Nhcnkgd29yay5cblx0XHRcdC8vIGFsc286IHByb2JhYmx5IHdlIGNhbiBzdG9yZSB0aGUgaW5mb3JtYXRpb24gd2UgZGV0ZWN0IGhlcmUsIHRvIHNwZWVkIHVwIHRyZWUgZmluYWxpemF0aW9uIVxuXHRcdFx0ZWFjaChkcmFmdF8sIGtleSA9PiB7XG5cdFx0XHRcdGlmICgoa2V5IGFzIGFueSkgPT09IERSQUZUX1NUQVRFKSByZXR1cm5cblx0XHRcdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRcdFx0aWYgKChiYXNlXyBhcyBhbnkpW2tleV0gPT09IHVuZGVmaW5lZCAmJiAhaGFzKGJhc2VfLCBrZXkpKSB7XG5cdFx0XHRcdFx0YXNzaWduZWRfW2tleV0gPSB0cnVlXG5cdFx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdH0gZWxzZSBpZiAoIWFzc2lnbmVkX1trZXldKSB7XG5cdFx0XHRcdFx0Ly8gT25seSB1bnRvdWNoZWQgcHJvcGVydGllcyB0cmlnZ2VyIHJlY3Vyc2lvbi5cblx0XHRcdFx0XHRtYXJrQ2hhbmdlc1JlY3Vyc2l2ZWx5KGRyYWZ0X1trZXldKVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Ly8gTG9vayBmb3IgcmVtb3ZlZCBrZXlzLlxuXHRcdFx0ZWFjaChiYXNlXywga2V5ID0+IHtcblx0XHRcdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRcdFx0aWYgKGRyYWZ0X1trZXldID09PSB1bmRlZmluZWQgJiYgIWhhcyhkcmFmdF8sIGtleSkpIHtcblx0XHRcdFx0XHRhc3NpZ25lZF9ba2V5XSA9IGZhbHNlXG5cdFx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fSBlbHNlIGlmICh0eXBlXyA9PT0gUHJveHlUeXBlLkVTNUFycmF5KSB7XG5cdFx0XHRpZiAoaGFzQXJyYXlDaGFuZ2VzKHN0YXRlIGFzIEVTNUFycmF5U3RhdGUpKSB7XG5cdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHRhc3NpZ25lZF8ubGVuZ3RoID0gdHJ1ZVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZHJhZnRfLmxlbmd0aCA8IGJhc2VfLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gZHJhZnRfLmxlbmd0aDsgaSA8IGJhc2VfLmxlbmd0aDsgaSsrKSBhc3NpZ25lZF9baV0gPSBmYWxzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IGJhc2VfLmxlbmd0aDsgaSA8IGRyYWZ0Xy5sZW5ndGg7IGkrKykgYXNzaWduZWRfW2ldID0gdHJ1ZVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBNaW5pbXVtIGNvdW50IGlzIGVub3VnaCwgdGhlIG90aGVyIHBhcnRzIGhhcyBiZWVuIHByb2Nlc3NlZC5cblx0XHRcdGNvbnN0IG1pbiA9IE1hdGgubWluKGRyYWZ0Xy5sZW5ndGgsIGJhc2VfLmxlbmd0aClcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtaW47IGkrKykge1xuXHRcdFx0XHQvLyBPbmx5IHVudG91Y2hlZCBpbmRpY2VzIHRyaWdnZXIgcmVjdXJzaW9uLlxuXHRcdFx0XHRpZiAoIWRyYWZ0Xy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHRcdGFzc2lnbmVkX1tpXSA9IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoYXNzaWduZWRfW2ldID09PSB1bmRlZmluZWQpIG1hcmtDaGFuZ2VzUmVjdXJzaXZlbHkoZHJhZnRfW2ldKVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGhhc09iamVjdENoYW5nZXMoc3RhdGU6IEVTNU9iamVjdFN0YXRlKSB7XG5cdFx0Y29uc3Qge2Jhc2VfLCBkcmFmdF99ID0gc3RhdGVcblxuXHRcdC8vIFNlYXJjaCBmb3IgYWRkZWQga2V5cyBhbmQgY2hhbmdlZCBrZXlzLiBTdGFydCBhdCB0aGUgYmFjaywgYmVjYXVzZVxuXHRcdC8vIG5vbi1udW1lcmljIGtleXMgYXJlIG9yZGVyZWQgYnkgdGltZSBvZiBkZWZpbml0aW9uIG9uIHRoZSBvYmplY3QuXG5cdFx0Y29uc3Qga2V5cyA9IG93bktleXMoZHJhZnRfKVxuXHRcdGZvciAobGV0IGkgPSBrZXlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBrZXk6IGFueSA9IGtleXNbaV1cblx0XHRcdGlmIChrZXkgPT09IERSQUZUX1NUQVRFKSBjb250aW51ZVxuXHRcdFx0Y29uc3QgYmFzZVZhbHVlID0gYmFzZV9ba2V5XVxuXHRcdFx0Ly8gVGhlIGB1bmRlZmluZWRgIGNoZWNrIGlzIGEgZmFzdCBwYXRoIGZvciBwcmUtZXhpc3Rpbmcga2V5cy5cblx0XHRcdGlmIChiYXNlVmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhaGFzKGJhc2VfLCBrZXkpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHR9XG5cdFx0XHQvLyBPbmNlIGEgYmFzZSBrZXkgaXMgZGVsZXRlZCwgZnV0dXJlIGNoYW5nZXMgZ28gdW5kZXRlY3RlZCwgYmVjYXVzZSBpdHNcblx0XHRcdC8vIGRlc2NyaXB0b3IgaXMgZXJhc2VkLiBUaGlzIGJyYW5jaCBkZXRlY3RzIGFueSBtaXNzZWQgY2hhbmdlcy5cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGRyYWZ0X1trZXldXG5cdFx0XHRcdGNvbnN0IHN0YXRlOiBJbW1lclN0YXRlID0gdmFsdWUgJiYgdmFsdWVbRFJBRlRfU1RBVEVdXG5cdFx0XHRcdGlmIChzdGF0ZSA/IHN0YXRlLmJhc2VfICE9PSBiYXNlVmFsdWUgOiAhaXModmFsdWUsIGJhc2VWYWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQXQgdGhpcyBwb2ludCwgbm8ga2V5cyB3ZXJlIGFkZGVkIG9yIGNoYW5nZWQuXG5cdFx0Ly8gQ29tcGFyZSBrZXkgY291bnQgdG8gZGV0ZXJtaW5lIGlmIGtleXMgd2VyZSBkZWxldGVkLlxuXHRcdGNvbnN0IGJhc2VJc0RyYWZ0ID0gISFiYXNlX1tEUkFGVF9TVEFURSBhcyBhbnldXG5cdFx0cmV0dXJuIGtleXMubGVuZ3RoICE9PSBvd25LZXlzKGJhc2VfKS5sZW5ndGggKyAoYmFzZUlzRHJhZnQgPyAwIDogMSkgLy8gKyAxIHRvIGNvcnJlY3QgZm9yIERSQUZUX1NUQVRFXG5cdH1cblxuXHRmdW5jdGlvbiBoYXNBcnJheUNoYW5nZXMoc3RhdGU6IEVTNUFycmF5U3RhdGUpIHtcblx0XHRjb25zdCB7ZHJhZnRffSA9IHN0YXRlXG5cdFx0aWYgKGRyYWZ0Xy5sZW5ndGggIT09IHN0YXRlLmJhc2VfLmxlbmd0aCkgcmV0dXJuIHRydWVcblx0XHQvLyBTZWUgIzExNlxuXHRcdC8vIElmIHdlIGZpcnN0IHNob3J0ZW4gdGhlIGxlbmd0aCwgb3VyIGFycmF5IGludGVyY2VwdG9ycyB3aWxsIGJlIHJlbW92ZWQuXG5cdFx0Ly8gSWYgYWZ0ZXIgdGhhdCBuZXcgaXRlbXMgYXJlIGFkZGVkLCByZXN1bHQgaW4gdGhlIHNhbWUgb3JpZ2luYWwgbGVuZ3RoLFxuXHRcdC8vIHRob3NlIGxhc3QgaXRlbXMgd2lsbCBoYXZlIG5vIGludGVyY2VwdGluZyBwcm9wZXJ0eS5cblx0XHQvLyBTbyBpZiB0aGVyZSBpcyBubyBvd24gZGVzY3JpcHRvciBvbiB0aGUgbGFzdCBwb3NpdGlvbiwgd2Uga25vdyB0aGF0IGl0ZW1zIHdlcmUgcmVtb3ZlZCBhbmQgYWRkZWRcblx0XHQvLyBOLkIuOiBzcGxpY2UsIHVuc2hpZnQsIGV0YyBvbmx5IHNoaWZ0IHZhbHVlcyBhcm91bmQsIGJ1dCBub3QgcHJvcCBkZXNjcmlwdG9ycywgc28gd2Ugb25seSBoYXZlIHRvIGNoZWNrXG5cdFx0Ly8gdGhlIGxhc3Qgb25lXG5cdFx0Ly8gbGFzdCBkZXNjcmlwdG9yIGNhbiBiZSBub3QgYSB0cmFwLCBpZiB0aGUgYXJyYXkgd2FzIGV4dGVuZGVkXG5cdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG5cdFx0XHRkcmFmdF8sXG5cdFx0XHRkcmFmdF8ubGVuZ3RoIC0gMVxuXHRcdClcblx0XHQvLyBkZXNjcmlwdG9yIGNhbiBiZSBudWxsLCBidXQgb25seSBmb3IgbmV3bHkgY3JlYXRlZCBzcGFyc2UgYXJyYXlzLCBlZy4gbmV3IEFycmF5KDEwKVxuXHRcdGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmdldCkgcmV0dXJuIHRydWVcblx0XHQvLyBpZiB3ZSBtaXNzIGEgcHJvcGVydHksIGl0IGhhcyBiZWVuIGRlbGV0ZWQsIHNvIGFycmF5IHByb2JvYmFseSBjaGFuZ2VkXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkcmFmdF8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICghZHJhZnRfLmhhc093blByb3BlcnR5KGkpKSByZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHQvLyBGb3IgYWxsIG90aGVyIGNhc2VzLCB3ZSBkb24ndCBoYXZlIHRvIGNvbXBhcmUsIGFzIHRoZXkgd291bGQgaGF2ZSBiZWVuIHBpY2tlZCB1cCBieSB0aGUgaW5kZXggc2V0dGVyc1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG5cblx0ZnVuY3Rpb24gaGFzQ2hhbmdlc18oc3RhdGU6IEVTNVN0YXRlKSB7XG5cdFx0cmV0dXJuIHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1T2JqZWN0XG5cdFx0XHQ/IGhhc09iamVjdENoYW5nZXMoc3RhdGUpXG5cdFx0XHQ6IGhhc0FycmF5Q2hhbmdlcyhzdGF0ZSlcblx0fVxuXG5cdGZ1bmN0aW9uIGFzc2VydFVucmV2b2tlZChzdGF0ZTogYW55IC8qRVM1U3RhdGUgfCBNYXBTdGF0ZSB8IFNldFN0YXRlKi8pIHtcblx0XHRpZiAoc3RhdGUucmV2b2tlZF8pIGRpZSgzLCBKU09OLnN0cmluZ2lmeShsYXRlc3Qoc3RhdGUpKSlcblx0fVxuXG5cdGxvYWRQbHVnaW4oXCJFUzVcIiwge1xuXHRcdGNyZWF0ZUVTNVByb3h5Xyxcblx0XHR3aWxsRmluYWxpemVFUzVfLFxuXHRcdGhhc0NoYW5nZXNfXG5cdH0pXG59XG4iLCAiaW1wb3J0IHtpbW1lcmFibGV9IGZyb20gXCIuLi9pbW1lclwiXG5pbXBvcnQge1xuXHRJbW1lclN0YXRlLFxuXHRQYXRjaCxcblx0U2V0U3RhdGUsXG5cdEVTNUFycmF5U3RhdGUsXG5cdFByb3h5QXJyYXlTdGF0ZSxcblx0TWFwU3RhdGUsXG5cdEVTNU9iamVjdFN0YXRlLFxuXHRQcm94eU9iamVjdFN0YXRlLFxuXHRQYXRjaFBhdGgsXG5cdGdldCxcblx0ZWFjaCxcblx0aGFzLFxuXHRnZXRBcmNodHlwZSxcblx0aXNTZXQsXG5cdGlzTWFwLFxuXHRsb2FkUGx1Z2luLFxuXHRQcm94eVR5cGUsXG5cdEFyY2h0eXBlLFxuXHRkaWUsXG5cdGlzRHJhZnQsXG5cdGlzRHJhZnRhYmxlLFxuXHROT1RISU5HXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVQYXRjaGVzKCkge1xuXHRjb25zdCBSRVBMQUNFID0gXCJyZXBsYWNlXCJcblx0Y29uc3QgQUREID0gXCJhZGRcIlxuXHRjb25zdCBSRU1PVkUgPSBcInJlbW92ZVwiXG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVQYXRjaGVzXyhcblx0XHRzdGF0ZTogSW1tZXJTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KTogdm9pZCB7XG5cdFx0c3dpdGNoIChzdGF0ZS50eXBlXykge1xuXHRcdFx0Y2FzZSBQcm94eVR5cGUuUHJveHlPYmplY3Q6XG5cdFx0XHRjYXNlIFByb3h5VHlwZS5FUzVPYmplY3Q6XG5cdFx0XHRjYXNlIFByb3h5VHlwZS5NYXA6XG5cdFx0XHRcdHJldHVybiBnZW5lcmF0ZVBhdGNoZXNGcm9tQXNzaWduZWQoXG5cdFx0XHRcdFx0c3RhdGUsXG5cdFx0XHRcdFx0YmFzZVBhdGgsXG5cdFx0XHRcdFx0cGF0Y2hlcyxcblx0XHRcdFx0XHRpbnZlcnNlUGF0Y2hlc1xuXHRcdFx0XHQpXG5cdFx0XHRjYXNlIFByb3h5VHlwZS5FUzVBcnJheTpcblx0XHRcdGNhc2UgUHJveHlUeXBlLlByb3h5QXJyYXk6XG5cdFx0XHRcdHJldHVybiBnZW5lcmF0ZUFycmF5UGF0Y2hlcyhzdGF0ZSwgYmFzZVBhdGgsIHBhdGNoZXMsIGludmVyc2VQYXRjaGVzKVxuXHRcdFx0Y2FzZSBQcm94eVR5cGUuU2V0OlxuXHRcdFx0XHRyZXR1cm4gZ2VuZXJhdGVTZXRQYXRjaGVzKFxuXHRcdFx0XHRcdChzdGF0ZSBhcyBhbnkpIGFzIFNldFN0YXRlLFxuXHRcdFx0XHRcdGJhc2VQYXRoLFxuXHRcdFx0XHRcdHBhdGNoZXMsXG5cdFx0XHRcdFx0aW52ZXJzZVBhdGNoZXNcblx0XHRcdFx0KVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlQXJyYXlQYXRjaGVzKFxuXHRcdHN0YXRlOiBFUzVBcnJheVN0YXRlIHwgUHJveHlBcnJheVN0YXRlLFxuXHRcdGJhc2VQYXRoOiBQYXRjaFBhdGgsXG5cdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRpbnZlcnNlUGF0Y2hlczogUGF0Y2hbXVxuXHQpIHtcblx0XHRsZXQge2Jhc2VfLCBhc3NpZ25lZF99ID0gc3RhdGVcblx0XHRsZXQgY29weV8gPSBzdGF0ZS5jb3B5XyFcblxuXHRcdC8vIFJlZHVjZSBjb21wbGV4aXR5IGJ5IGVuc3VyaW5nIGBiYXNlYCBpcyBuZXZlciBsb25nZXIuXG5cdFx0aWYgKGNvcHlfLmxlbmd0aCA8IGJhc2VfLmxlbmd0aCkge1xuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0O1tiYXNlXywgY29weV9dID0gW2NvcHlfLCBiYXNlX11cblx0XHRcdDtbcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXNdID0gW2ludmVyc2VQYXRjaGVzLCBwYXRjaGVzXVxuXHRcdH1cblxuXHRcdC8vIFByb2Nlc3MgcmVwbGFjZWQgaW5kaWNlcy5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGJhc2VfLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoYXNzaWduZWRfW2ldICYmIGNvcHlfW2ldICE9PSBiYXNlX1tpXSkge1xuXHRcdFx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KFtpXSlcblx0XHRcdFx0cGF0Y2hlcy5wdXNoKHtcblx0XHRcdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdC8vIE5lZWQgdG8gbWF5YmUgY2xvbmUgaXQsIGFzIGl0IGNhbiBpbiBmYWN0IGJlIHRoZSBvcmlnaW5hbCB2YWx1ZVxuXHRcdFx0XHRcdC8vIGR1ZSB0byB0aGUgYmFzZS9jb3B5IGludmVyc2lvbiBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmdW5jdGlvblxuXHRcdFx0XHRcdHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChjb3B5X1tpXSlcblx0XHRcdFx0fSlcblx0XHRcdFx0aW52ZXJzZVBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IFJFUExBQ0UsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQoYmFzZV9baV0pXG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJvY2VzcyBhZGRlZCBpbmRpY2VzLlxuXHRcdGZvciAobGV0IGkgPSBiYXNlXy5sZW5ndGg7IGkgPCBjb3B5Xy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRwYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRvcDogQURELFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHQvLyBOZWVkIHRvIG1heWJlIGNsb25lIGl0LCBhcyBpdCBjYW4gaW4gZmFjdCBiZSB0aGUgb3JpZ2luYWwgdmFsdWVcblx0XHRcdFx0Ly8gZHVlIHRvIHRoZSBiYXNlL2NvcHkgaW52ZXJzaW9uIGF0IHRoZSBzdGFydCBvZiB0aGlzIGZ1bmN0aW9uXG5cdFx0XHRcdHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChjb3B5X1tpXSlcblx0XHRcdH0pXG5cdFx0fVxuXHRcdGlmIChiYXNlXy5sZW5ndGggPCBjb3B5Xy5sZW5ndGgpIHtcblx0XHRcdGludmVyc2VQYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdFx0cGF0aDogYmFzZVBhdGguY29uY2F0KFtcImxlbmd0aFwiXSksXG5cdFx0XHRcdHZhbHVlOiBiYXNlXy5sZW5ndGhcblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBpcyB1c2VkIGZvciBib3RoIE1hcCBvYmplY3RzIGFuZCBub3JtYWwgb2JqZWN0cy5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVQYXRjaGVzRnJvbUFzc2lnbmVkKFxuXHRcdHN0YXRlOiBNYXBTdGF0ZSB8IEVTNU9iamVjdFN0YXRlIHwgUHJveHlPYmplY3RTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KSB7XG5cdFx0Y29uc3Qge2Jhc2VfLCBjb3B5X30gPSBzdGF0ZVxuXHRcdGVhY2goc3RhdGUuYXNzaWduZWRfISwgKGtleSwgYXNzaWduZWRWYWx1ZSkgPT4ge1xuXHRcdFx0Y29uc3Qgb3JpZ1ZhbHVlID0gZ2V0KGJhc2VfLCBrZXkpXG5cdFx0XHRjb25zdCB2YWx1ZSA9IGdldChjb3B5XyEsIGtleSlcblx0XHRcdGNvbnN0IG9wID0gIWFzc2lnbmVkVmFsdWUgPyBSRU1PVkUgOiBoYXMoYmFzZV8sIGtleSkgPyBSRVBMQUNFIDogQUREXG5cdFx0XHRpZiAob3JpZ1ZhbHVlID09PSB2YWx1ZSAmJiBvcCA9PT0gUkVQTEFDRSkgcmV0dXJuXG5cdFx0XHRjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KGtleSBhcyBhbnkpXG5cdFx0XHRwYXRjaGVzLnB1c2gob3AgPT09IFJFTU9WRSA/IHtvcCwgcGF0aH0gOiB7b3AsIHBhdGgsIHZhbHVlfSlcblx0XHRcdGludmVyc2VQYXRjaGVzLnB1c2goXG5cdFx0XHRcdG9wID09PSBBRERcblx0XHRcdFx0XHQ/IHtvcDogUkVNT1ZFLCBwYXRofVxuXHRcdFx0XHRcdDogb3AgPT09IFJFTU9WRVxuXHRcdFx0XHRcdD8ge29wOiBBREQsIHBhdGgsIHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChvcmlnVmFsdWUpfVxuXHRcdFx0XHRcdDoge29wOiBSRVBMQUNFLCBwYXRoLCB2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQob3JpZ1ZhbHVlKX1cblx0XHRcdClcblx0XHR9KVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2VuZXJhdGVTZXRQYXRjaGVzKFxuXHRcdHN0YXRlOiBTZXRTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KSB7XG5cdFx0bGV0IHtiYXNlXywgY29weV99ID0gc3RhdGVcblxuXHRcdGxldCBpID0gMFxuXHRcdGJhc2VfLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcblx0XHRcdGlmICghY29weV8hLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRcdHBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IFJFTU9WRSxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdHZhbHVlXG5cdFx0XHRcdH0pXG5cdFx0XHRcdGludmVyc2VQYXRjaGVzLnVuc2hpZnQoe1xuXHRcdFx0XHRcdG9wOiBBREQsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0fVxuXHRcdFx0aSsrXG5cdFx0fSlcblx0XHRpID0gMFxuXHRcdGNvcHlfIS5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XG5cdFx0XHRpZiAoIWJhc2VfLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRcdHBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IEFERCxcblx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdHZhbHVlXG5cdFx0XHRcdH0pXG5cdFx0XHRcdGludmVyc2VQYXRjaGVzLnVuc2hpZnQoe1xuXHRcdFx0XHRcdG9wOiBSRU1PVkUsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0fVxuXHRcdFx0aSsrXG5cdFx0fSlcblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhcblx0XHRiYXNlVmFsdWU6IGFueSxcblx0XHRyZXBsYWNlbWVudDogYW55LFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KTogdm9pZCB7XG5cdFx0cGF0Y2hlcy5wdXNoKHtcblx0XHRcdG9wOiBSRVBMQUNFLFxuXHRcdFx0cGF0aDogW10sXG5cdFx0XHR2YWx1ZTogcmVwbGFjZW1lbnQgPT09IE5PVEhJTkcgPyB1bmRlZmluZWQgOiByZXBsYWNlbWVudFxuXHRcdH0pXG5cdFx0aW52ZXJzZVBhdGNoZXMucHVzaCh7XG5cdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdHBhdGg6IFtdLFxuXHRcdFx0dmFsdWU6IGJhc2VWYWx1ZVxuXHRcdH0pXG5cdH1cblxuXHRmdW5jdGlvbiBhcHBseVBhdGNoZXNfPFQ+KGRyYWZ0OiBULCBwYXRjaGVzOiBQYXRjaFtdKTogVCB7XG5cdFx0cGF0Y2hlcy5mb3JFYWNoKHBhdGNoID0+IHtcblx0XHRcdGNvbnN0IHtwYXRoLCBvcH0gPSBwYXRjaFxuXG5cdFx0XHRsZXQgYmFzZTogYW55ID0gZHJhZnRcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0Y29uc3QgcGFyZW50VHlwZSA9IGdldEFyY2h0eXBlKGJhc2UpXG5cdFx0XHRcdGxldCBwID0gcGF0aFtpXVxuXHRcdFx0XHRpZiAodHlwZW9mIHAgIT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHAgIT09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRwID0gXCJcIiArIHBcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNlZSAjNzM4LCBhdm9pZCBwcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQocGFyZW50VHlwZSA9PT0gQXJjaHR5cGUuT2JqZWN0IHx8IHBhcmVudFR5cGUgPT09IEFyY2h0eXBlLkFycmF5KSAmJlxuXHRcdFx0XHRcdChwID09PSBcIl9fcHJvdG9fX1wiIHx8IHAgPT09IFwiY29uc3RydWN0b3JcIilcblx0XHRcdFx0KVxuXHRcdFx0XHRcdGRpZSgyNClcblx0XHRcdFx0aWYgKHR5cGVvZiBiYXNlID09PSBcImZ1bmN0aW9uXCIgJiYgcCA9PT0gXCJwcm90b3R5cGVcIikgZGllKDI0KVxuXHRcdFx0XHRiYXNlID0gZ2V0KGJhc2UsIHApXG5cdFx0XHRcdGlmICh0eXBlb2YgYmFzZSAhPT0gXCJvYmplY3RcIikgZGllKDE1LCBwYXRoLmpvaW4oXCIvXCIpKVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB0eXBlID0gZ2V0QXJjaHR5cGUoYmFzZSlcblx0XHRcdGNvbnN0IHZhbHVlID0gZGVlcENsb25lUGF0Y2hWYWx1ZShwYXRjaC52YWx1ZSkgLy8gdXNlZCB0byBjbG9uZSBwYXRjaCB0byBlbnN1cmUgb3JpZ2luYWwgcGF0Y2ggaXMgbm90IG1vZGlmaWVkLCBzZWUgIzQxMVxuXHRcdFx0Y29uc3Qga2V5ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdXG5cdFx0XHRzd2l0Y2ggKG9wKSB7XG5cdFx0XHRcdGNhc2UgUkVQTEFDRTpcblx0XHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuTWFwOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYmFzZS5zZXQoa2V5LCB2YWx1ZSlcblx0XHRcdFx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLlNldDpcblx0XHRcdFx0XHRcdFx0ZGllKDE2KVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0Ly8gaWYgdmFsdWUgaXMgYW4gb2JqZWN0LCB0aGVuIGl0J3MgYXNzaWduZWQgYnkgcmVmZXJlbmNlXG5cdFx0XHRcdFx0XHRcdC8vIGluIHRoZSBmb2xsb3dpbmcgYWRkIG9yIHJlbW92ZSBvcHMsIHRoZSB2YWx1ZSBmaWVsZCBpbnNpZGUgdGhlIHBhdGNoIHdpbGwgYWxzbyBiZSBtb2RpZnllZFxuXHRcdFx0XHRcdFx0XHQvLyBzbyB3ZSB1c2UgdmFsdWUgZnJvbSB0aGUgY2xvbmVkIHBhdGNoXG5cdFx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChiYXNlW2tleV0gPSB2YWx1ZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgQUREOlxuXHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5BcnJheTpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleSA9PT0gXCItXCJcblx0XHRcdFx0XHRcdFx0XHQ/IGJhc2UucHVzaCh2YWx1ZSlcblx0XHRcdFx0XHRcdFx0XHQ6IGJhc2Uuc3BsaWNlKGtleSBhcyBhbnksIDAsIHZhbHVlKVxuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5NYXA6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLnNldChrZXksIHZhbHVlKVxuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5TZXQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLmFkZCh2YWx1ZSlcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiAoYmFzZVtrZXldID0gdmFsdWUpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIFJFTU9WRTpcblx0XHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuQXJyYXk6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLnNwbGljZShrZXkgYXMgYW55LCAxKVxuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5NYXA6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLmRlbGV0ZShrZXkpXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLlNldDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2UuZGVsZXRlKHBhdGNoLnZhbHVlKVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGRlbGV0ZSBiYXNlW2tleV1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0ZGllKDE3LCBvcClcblx0XHRcdH1cblx0XHR9KVxuXG5cdFx0cmV0dXJuIGRyYWZ0XG5cdH1cblxuXHQvLyBvcHRpbWl6ZTogdGhpcyBpcyBxdWl0ZSBhIHBlcmZvcm1hbmNlIGhpdCwgY2FuIHdlIGRldGVjdCBpbnRlbGxpZ2VudGx5IHdoZW4gaXQgaXMgbmVlZGVkP1xuXHQvLyBFLmcuIGF1dG8tZHJhZnQgd2hlbiBuZXcgb2JqZWN0cyBmcm9tIG91dHNpZGUgYXJlIGFzc2lnbmVkIGFuZCBtb2RpZmllZD9cblx0Ly8gKFNlZSBmYWlsaW5nIHRlc3Qgd2hlbiBkZWVwQ2xvbmUganVzdCByZXR1cm5zIG9iailcblx0ZnVuY3Rpb24gZGVlcENsb25lUGF0Y2hWYWx1ZTxUPihvYmo6IFQpOiBUXG5cdGZ1bmN0aW9uIGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqOiBhbnkpIHtcblx0XHRpZiAoIWlzRHJhZnRhYmxlKG9iaikpIHJldHVybiBvYmpcblx0XHRpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLm1hcChkZWVwQ2xvbmVQYXRjaFZhbHVlKVxuXHRcdGlmIChpc01hcChvYmopKVxuXHRcdFx0cmV0dXJuIG5ldyBNYXAoXG5cdFx0XHRcdEFycmF5LmZyb20ob2JqLmVudHJpZXMoKSkubWFwKChbaywgdl0pID0+IFtrLCBkZWVwQ2xvbmVQYXRjaFZhbHVlKHYpXSlcblx0XHRcdClcblx0XHRpZiAoaXNTZXQob2JqKSkgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbShvYmopLm1hcChkZWVwQ2xvbmVQYXRjaFZhbHVlKSlcblx0XHRjb25zdCBjbG9uZWQgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopKVxuXHRcdGZvciAoY29uc3Qga2V5IGluIG9iaikgY2xvbmVkW2tleV0gPSBkZWVwQ2xvbmVQYXRjaFZhbHVlKG9ialtrZXldKVxuXHRcdGlmIChoYXMob2JqLCBpbW1lcmFibGUpKSBjbG9uZWRbaW1tZXJhYmxlXSA9IG9ialtpbW1lcmFibGVdXG5cdFx0cmV0dXJuIGNsb25lZFxuXHR9XG5cblx0ZnVuY3Rpb24gY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQ8VD4ob2JqOiBUKTogVCB7XG5cdFx0aWYgKGlzRHJhZnQob2JqKSkge1xuXHRcdFx0cmV0dXJuIGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqKVxuXHRcdH0gZWxzZSByZXR1cm4gb2JqXG5cdH1cblxuXHRsb2FkUGx1Z2luKFwiUGF0Y2hlc1wiLCB7XG5cdFx0YXBwbHlQYXRjaGVzXyxcblx0XHRnZW5lcmF0ZVBhdGNoZXNfLFxuXHRcdGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzX1xuXHR9KVxufVxuIiwgIi8vIHR5cGVzIG9ubHkhXG5pbXBvcnQge1xuXHRJbW1lclN0YXRlLFxuXHRBbnlNYXAsXG5cdEFueVNldCxcblx0TWFwU3RhdGUsXG5cdFNldFN0YXRlLFxuXHREUkFGVF9TVEFURSxcblx0Z2V0Q3VycmVudFNjb3BlLFxuXHRsYXRlc3QsXG5cdGl0ZXJhdG9yU3ltYm9sLFxuXHRpc0RyYWZ0YWJsZSxcblx0Y3JlYXRlUHJveHksXG5cdGxvYWRQbHVnaW4sXG5cdG1hcmtDaGFuZ2VkLFxuXHRQcm94eVR5cGUsXG5cdGRpZSxcblx0ZWFjaFxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlTWFwU2V0KCkge1xuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHR2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQ6IGFueSwgYjogYW55KTogYW55IHtcblx0XHRleHRlbmRTdGF0aWNzID1cblx0XHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuXHRcdFx0KHtfX3Byb3RvX186IFtdfSBpbnN0YW5jZW9mIEFycmF5ICYmXG5cdFx0XHRcdGZ1bmN0aW9uKGQsIGIpIHtcblx0XHRcdFx0XHRkLl9fcHJvdG9fXyA9IGJcblx0XHRcdFx0fSkgfHxcblx0XHRcdGZ1bmN0aW9uKGQsIGIpIHtcblx0XHRcdFx0Zm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF1cblx0XHRcdH1cblx0XHRyZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKVxuXHR9XG5cblx0Ly8gVWdseSBoYWNrIHRvIHJlc29sdmUgIzUwMiBhbmQgaW5oZXJpdCBidWlsdCBpbiBNYXAgLyBTZXRcblx0ZnVuY3Rpb24gX19leHRlbmRzKGQ6IGFueSwgYjogYW55KTogYW55IHtcblx0XHRleHRlbmRTdGF0aWNzKGQsIGIpXG5cdFx0ZnVuY3Rpb24gX18odGhpczogYW55KTogYW55IHtcblx0XHRcdHRoaXMuY29uc3RydWN0b3IgPSBkXG5cdFx0fVxuXHRcdGQucHJvdG90eXBlID1cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdCgoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUpLCBuZXcgX18oKSlcblx0fVxuXG5cdGNvbnN0IERyYWZ0TWFwID0gKGZ1bmN0aW9uKF9zdXBlcikge1xuXHRcdF9fZXh0ZW5kcyhEcmFmdE1hcCwgX3N1cGVyKVxuXHRcdC8vIENyZWF0ZSBjbGFzcyBtYW51YWxseSwgY2F1c2UgIzUwMlxuXHRcdGZ1bmN0aW9uIERyYWZ0TWFwKHRoaXM6IGFueSwgdGFyZ2V0OiBBbnlNYXAsIHBhcmVudD86IEltbWVyU3RhdGUpOiBhbnkge1xuXHRcdFx0dGhpc1tEUkFGVF9TVEFURV0gPSB7XG5cdFx0XHRcdHR5cGVfOiBQcm94eVR5cGUuTWFwLFxuXHRcdFx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0XHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpISxcblx0XHRcdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHRcdFx0ZmluYWxpemVkXzogZmFsc2UsXG5cdFx0XHRcdGNvcHlfOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFzc2lnbmVkXzogdW5kZWZpbmVkLFxuXHRcdFx0XHRiYXNlXzogdGFyZ2V0LFxuXHRcdFx0XHRkcmFmdF86IHRoaXMgYXMgYW55LFxuXHRcdFx0XHRpc01hbnVhbF86IGZhbHNlLFxuXHRcdFx0XHRyZXZva2VkXzogZmFsc2Vcblx0XHRcdH0gYXMgTWFwU3RhdGVcblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXHRcdGNvbnN0IHAgPSBEcmFmdE1hcC5wcm90b3R5cGVcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCBcInNpemVcIiwge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuc2l6ZVxuXHRcdFx0fVxuXHRcdFx0Ly8gZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHQvLyBjb25maWd1cmFibGU6IHRydWVcblx0XHR9KVxuXG5cdFx0cC5oYXMgPSBmdW5jdGlvbihrZXk6IGFueSk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuaGFzKGtleSlcblx0XHR9XG5cblx0XHRwLnNldCA9IGZ1bmN0aW9uKGtleTogYW55LCB2YWx1ZTogYW55KSB7XG5cdFx0XHRjb25zdCBzdGF0ZTogTWFwU3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0aWYgKCFsYXRlc3Qoc3RhdGUpLmhhcyhrZXkpIHx8IGxhdGVzdChzdGF0ZSkuZ2V0KGtleSkgIT09IHZhbHVlKSB7XG5cdFx0XHRcdHByZXBhcmVNYXBDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5zZXQoa2V5LCB0cnVlKVxuXHRcdFx0XHRzdGF0ZS5jb3B5XyEuc2V0KGtleSwgdmFsdWUpXG5cdFx0XHRcdHN0YXRlLmFzc2lnbmVkXyEuc2V0KGtleSwgdHJ1ZSlcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXG5cdFx0cC5kZWxldGUgPSBmdW5jdGlvbihrZXk6IGFueSk6IGJvb2xlYW4ge1xuXHRcdFx0aWYgKCF0aGlzLmhhcyhrZXkpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzdGF0ZTogTWFwU3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0cHJlcGFyZU1hcENvcHkoc3RhdGUpXG5cdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdGlmIChzdGF0ZS5iYXNlXy5oYXMoa2V5KSkge1xuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF8hLnNldChrZXksIGZhbHNlKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5kZWxldGUoa2V5KVxuXHRcdFx0fVxuXHRcdFx0c3RhdGUuY29weV8hLmRlbGV0ZShrZXkpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblxuXHRcdHAuY2xlYXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAobGF0ZXN0KHN0YXRlKS5zaXplKSB7XG5cdFx0XHRcdHByZXBhcmVNYXBDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfID0gbmV3IE1hcCgpXG5cdFx0XHRcdGVhY2goc3RhdGUuYmFzZV8sIGtleSA9PiB7XG5cdFx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5zZXQoa2V5LCBmYWxzZSlcblx0XHRcdFx0fSlcblx0XHRcdFx0c3RhdGUuY29weV8hLmNsZWFyKClcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwLmZvckVhY2ggPSBmdW5jdGlvbihcblx0XHRcdGNiOiAodmFsdWU6IGFueSwga2V5OiBhbnksIHNlbGY6IGFueSkgPT4gdm9pZCxcblx0XHRcdHRoaXNBcmc/OiBhbnlcblx0XHQpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRsYXRlc3Qoc3RhdGUpLmZvckVhY2goKF92YWx1ZTogYW55LCBrZXk6IGFueSwgX21hcDogYW55KSA9PiB7XG5cdFx0XHRcdGNiLmNhbGwodGhpc0FyZywgdGhpcy5nZXQoa2V5KSwga2V5LCB0aGlzKVxuXHRcdFx0fSlcblx0XHR9XG5cblx0XHRwLmdldCA9IGZ1bmN0aW9uKGtleTogYW55KTogYW55IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRjb25zdCB2YWx1ZSA9IGxhdGVzdChzdGF0ZSkuZ2V0KGtleSlcblx0XHRcdGlmIChzdGF0ZS5maW5hbGl6ZWRfIHx8ICFpc0RyYWZ0YWJsZSh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHR9XG5cdFx0XHRpZiAodmFsdWUgIT09IHN0YXRlLmJhc2VfLmdldChrZXkpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSAvLyBlaXRoZXIgYWxyZWFkeSBkcmFmdGVkIG9yIHJlYXNzaWduZWRcblx0XHRcdH1cblx0XHRcdC8vIGRlc3BpdGUgd2hhdCBpdCBsb29rcywgdGhpcyBjcmVhdGVzIGEgZHJhZnQgb25seSBvbmNlLCBzZWUgYWJvdmUgY29uZGl0aW9uXG5cdFx0XHRjb25zdCBkcmFmdCA9IGNyZWF0ZVByb3h5KHN0YXRlLnNjb3BlXy5pbW1lcl8sIHZhbHVlLCBzdGF0ZSlcblx0XHRcdHByZXBhcmVNYXBDb3B5KHN0YXRlKVxuXHRcdFx0c3RhdGUuY29weV8hLnNldChrZXksIGRyYWZ0KVxuXHRcdFx0cmV0dXJuIGRyYWZ0XG5cdFx0fVxuXG5cdFx0cC5rZXlzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdHJldHVybiBsYXRlc3QodGhpc1tEUkFGVF9TVEFURV0pLmtleXMoKVxuXHRcdH1cblxuXHRcdHAudmFsdWVzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5rZXlzKClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFtpdGVyYXRvclN5bWJvbF06ICgpID0+IHRoaXMudmFsdWVzKCksXG5cdFx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCByID0gaXRlcmF0b3IubmV4dCgpXG5cdFx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0XHRcdFx0XHRpZiAoci5kb25lKSByZXR1cm4gclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoci52YWx1ZSlcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0ZG9uZTogZmFsc2UsXG5cdFx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBhcyBhbnlcblx0XHR9XG5cblx0XHRwLmVudHJpZXMgPSBmdW5jdGlvbigpOiBJdGVyYWJsZUl0ZXJhdG9yPFthbnksIGFueV0+IHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5rZXlzKClcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFtpdGVyYXRvclN5bWJvbF06ICgpID0+IHRoaXMuZW50cmllcygpLFxuXHRcdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgciA9IGl0ZXJhdG9yLm5leHQoKVxuXHRcdFx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdFx0XHRcdFx0aWYgKHIuZG9uZSkgcmV0dXJuIHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KHIudmFsdWUpXG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGRvbmU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0dmFsdWU6IFtyLnZhbHVlLCB2YWx1ZV1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gYXMgYW55XG5cdFx0fVxuXG5cdFx0cFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmVudHJpZXMoKVxuXHRcdH1cblxuXHRcdHJldHVybiBEcmFmdE1hcFxuXHR9KShNYXApXG5cblx0ZnVuY3Rpb24gcHJveHlNYXBfPFQgZXh0ZW5kcyBBbnlNYXA+KHRhcmdldDogVCwgcGFyZW50PzogSW1tZXJTdGF0ZSk6IFQge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRyZXR1cm4gbmV3IERyYWZ0TWFwKHRhcmdldCwgcGFyZW50KVxuXHR9XG5cblx0ZnVuY3Rpb24gcHJlcGFyZU1hcENvcHkoc3RhdGU6IE1hcFN0YXRlKSB7XG5cdFx0aWYgKCFzdGF0ZS5jb3B5Xykge1xuXHRcdFx0c3RhdGUuYXNzaWduZWRfID0gbmV3IE1hcCgpXG5cdFx0XHRzdGF0ZS5jb3B5XyA9IG5ldyBNYXAoc3RhdGUuYmFzZV8pXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgRHJhZnRTZXQgPSAoZnVuY3Rpb24oX3N1cGVyKSB7XG5cdFx0X19leHRlbmRzKERyYWZ0U2V0LCBfc3VwZXIpXG5cdFx0Ly8gQ3JlYXRlIGNsYXNzIG1hbnVhbGx5LCBjYXVzZSAjNTAyXG5cdFx0ZnVuY3Rpb24gRHJhZnRTZXQodGhpczogYW55LCB0YXJnZXQ6IEFueVNldCwgcGFyZW50PzogSW1tZXJTdGF0ZSkge1xuXHRcdFx0dGhpc1tEUkFGVF9TVEFURV0gPSB7XG5cdFx0XHRcdHR5cGVfOiBQcm94eVR5cGUuU2V0LFxuXHRcdFx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0XHRcdHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpISxcblx0XHRcdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHRcdFx0ZmluYWxpemVkXzogZmFsc2UsXG5cdFx0XHRcdGNvcHlfOiB1bmRlZmluZWQsXG5cdFx0XHRcdGJhc2VfOiB0YXJnZXQsXG5cdFx0XHRcdGRyYWZ0XzogdGhpcyxcblx0XHRcdFx0ZHJhZnRzXzogbmV3IE1hcCgpLFxuXHRcdFx0XHRyZXZva2VkXzogZmFsc2UsXG5cdFx0XHRcdGlzTWFudWFsXzogZmFsc2Vcblx0XHRcdH0gYXMgU2V0U3RhdGVcblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXHRcdGNvbnN0IHAgPSBEcmFmdFNldC5wcm90b3R5cGVcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCBcInNpemVcIiwge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkuc2l6ZVxuXHRcdFx0fVxuXHRcdFx0Ly8gZW51bWVyYWJsZTogdHJ1ZSxcblx0XHR9KVxuXG5cdFx0cC5oYXMgPSBmdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdFx0XHRjb25zdCBzdGF0ZTogU2V0U3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0Ly8gYml0IG9mIHRyaWNrZXJ5IGhlcmUsIHRvIGJlIGFibGUgdG8gcmVjb2duaXplIGJvdGggdGhlIHZhbHVlLCBhbmQgdGhlIGRyYWZ0IG9mIGl0cyB2YWx1ZVxuXHRcdFx0aWYgKCFzdGF0ZS5jb3B5Xykge1xuXHRcdFx0XHRyZXR1cm4gc3RhdGUuYmFzZV8uaGFzKHZhbHVlKVxuXHRcdFx0fVxuXHRcdFx0aWYgKHN0YXRlLmNvcHlfLmhhcyh2YWx1ZSkpIHJldHVybiB0cnVlXG5cdFx0XHRpZiAoc3RhdGUuZHJhZnRzXy5oYXModmFsdWUpICYmIHN0YXRlLmNvcHlfLmhhcyhzdGF0ZS5kcmFmdHNfLmdldCh2YWx1ZSkpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0fVxuXG5cdFx0cC5hZGQgPSBmdW5jdGlvbih2YWx1ZTogYW55KTogYW55IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRwcmVwYXJlU2V0Q29weShzdGF0ZSlcblx0XHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdHN0YXRlLmNvcHlfIS5hZGQodmFsdWUpXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpc1xuXHRcdH1cblxuXHRcdHAuZGVsZXRlID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7XG5cdFx0XHRpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc3RhdGU6IFNldFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdHByZXBhcmVTZXRDb3B5KHN0YXRlKVxuXHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRzdGF0ZS5jb3B5XyEuZGVsZXRlKHZhbHVlKSB8fFxuXHRcdFx0XHQoc3RhdGUuZHJhZnRzXy5oYXModmFsdWUpXG5cdFx0XHRcdFx0PyBzdGF0ZS5jb3B5XyEuZGVsZXRlKHN0YXRlLmRyYWZ0c18uZ2V0KHZhbHVlKSlcblx0XHRcdFx0XHQ6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZhbHNlKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdHAuY2xlYXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAobGF0ZXN0KHN0YXRlKS5zaXplKSB7XG5cdFx0XHRcdHByZXBhcmVTZXRDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuY29weV8hLmNsZWFyKClcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwLnZhbHVlcyA9IGZ1bmN0aW9uKCk6IEl0ZXJhYmxlSXRlcmF0b3I8YW55PiB7XG5cdFx0XHRjb25zdCBzdGF0ZTogU2V0U3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0cHJlcGFyZVNldENvcHkoc3RhdGUpXG5cdFx0XHRyZXR1cm4gc3RhdGUuY29weV8hLnZhbHVlcygpXG5cdFx0fVxuXG5cdFx0cC5lbnRyaWVzID0gZnVuY3Rpb24gZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFthbnksIGFueV0+IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRwcmVwYXJlU2V0Q29weShzdGF0ZSlcblx0XHRcdHJldHVybiBzdGF0ZS5jb3B5XyEuZW50cmllcygpXG5cdFx0fVxuXG5cdFx0cC5rZXlzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdHJldHVybiB0aGlzLnZhbHVlcygpXG5cdFx0fVxuXG5cdFx0cFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLnZhbHVlcygpXG5cdFx0fVxuXG5cdFx0cC5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChjYjogYW55LCB0aGlzQXJnPzogYW55KSB7XG5cdFx0XHRjb25zdCBpdGVyYXRvciA9IHRoaXMudmFsdWVzKClcblx0XHRcdGxldCByZXN1bHQgPSBpdGVyYXRvci5uZXh0KClcblx0XHRcdHdoaWxlICghcmVzdWx0LmRvbmUpIHtcblx0XHRcdFx0Y2IuY2FsbCh0aGlzQXJnLCByZXN1bHQudmFsdWUsIHJlc3VsdC52YWx1ZSwgdGhpcylcblx0XHRcdFx0cmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIERyYWZ0U2V0XG5cdH0pKFNldClcblxuXHRmdW5jdGlvbiBwcm94eVNldF88VCBleHRlbmRzIEFueVNldD4odGFyZ2V0OiBULCBwYXJlbnQ/OiBJbW1lclN0YXRlKTogVCB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHJldHVybiBuZXcgRHJhZnRTZXQodGFyZ2V0LCBwYXJlbnQpXG5cdH1cblxuXHRmdW5jdGlvbiBwcmVwYXJlU2V0Q29weShzdGF0ZTogU2V0U3RhdGUpIHtcblx0XHRpZiAoIXN0YXRlLmNvcHlfKSB7XG5cdFx0XHQvLyBjcmVhdGUgZHJhZnRzIGZvciBhbGwgZW50cmllcyB0byBwcmVzZXJ2ZSBpbnNlcnRpb24gb3JkZXJcblx0XHRcdHN0YXRlLmNvcHlfID0gbmV3IFNldCgpXG5cdFx0XHRzdGF0ZS5iYXNlXy5mb3JFYWNoKHZhbHVlID0+IHtcblx0XHRcdFx0aWYgKGlzRHJhZnRhYmxlKHZhbHVlKSkge1xuXHRcdFx0XHRcdGNvbnN0IGRyYWZ0ID0gY3JlYXRlUHJveHkoc3RhdGUuc2NvcGVfLmltbWVyXywgdmFsdWUsIHN0YXRlKVxuXHRcdFx0XHRcdHN0YXRlLmRyYWZ0c18uc2V0KHZhbHVlLCBkcmFmdClcblx0XHRcdFx0XHRzdGF0ZS5jb3B5XyEuYWRkKGRyYWZ0KVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXRlLmNvcHlfIS5hZGQodmFsdWUpXG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYXNzZXJ0VW5yZXZva2VkKHN0YXRlOiBhbnkgLypFUzVTdGF0ZSB8IE1hcFN0YXRlIHwgU2V0U3RhdGUqLykge1xuXHRcdGlmIChzdGF0ZS5yZXZva2VkXykgZGllKDMsIEpTT04uc3RyaW5naWZ5KGxhdGVzdChzdGF0ZSkpKVxuXHR9XG5cblx0bG9hZFBsdWdpbihcIk1hcFNldFwiLCB7cHJveHlNYXBfLCBwcm94eVNldF99KVxufVxuIiwgImltcG9ydCB7ZW5hYmxlRVM1fSBmcm9tIFwiLi9lczVcIlxuaW1wb3J0IHtlbmFibGVNYXBTZXR9IGZyb20gXCIuL21hcHNldFwiXG5pbXBvcnQge2VuYWJsZVBhdGNoZXN9IGZyb20gXCIuL3BhdGNoZXNcIlxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlQWxsUGx1Z2lucygpIHtcblx0ZW5hYmxlRVM1KClcblx0ZW5hYmxlTWFwU2V0KClcblx0ZW5hYmxlUGF0Y2hlcygpXG59XG4iLCAiaW1wb3J0IHtcblx0SVByb2R1Y2UsXG5cdElQcm9kdWNlV2l0aFBhdGNoZXMsXG5cdEltbWVyLFxuXHREcmFmdCxcblx0SW1tdXRhYmxlXG59IGZyb20gXCIuL2ludGVybmFsXCJcblxuZXhwb3J0IHtcblx0RHJhZnQsXG5cdEltbXV0YWJsZSxcblx0UGF0Y2gsXG5cdFBhdGNoTGlzdGVuZXIsXG5cdG9yaWdpbmFsLFxuXHRjdXJyZW50LFxuXHRpc0RyYWZ0LFxuXHRpc0RyYWZ0YWJsZSxcblx0Tk9USElORyBhcyBub3RoaW5nLFxuXHREUkFGVEFCTEUgYXMgaW1tZXJhYmxlLFxuXHRmcmVlemVcbn0gZnJvbSBcIi4vaW50ZXJuYWxcIlxuXG5jb25zdCBpbW1lciA9IG5ldyBJbW1lcigpXG5cbi8qKlxuICogVGhlIGBwcm9kdWNlYCBmdW5jdGlvbiB0YWtlcyBhIHZhbHVlIGFuZCBhIFwicmVjaXBlIGZ1bmN0aW9uXCIgKHdob3NlXG4gKiByZXR1cm4gdmFsdWUgb2Z0ZW4gZGVwZW5kcyBvbiB0aGUgYmFzZSBzdGF0ZSkuIFRoZSByZWNpcGUgZnVuY3Rpb24gaXNcbiAqIGZyZWUgdG8gbXV0YXRlIGl0cyBmaXJzdCBhcmd1bWVudCBob3dldmVyIGl0IHdhbnRzLiBBbGwgbXV0YXRpb25zIGFyZVxuICogb25seSBldmVyIGFwcGxpZWQgdG8gYSBfX2NvcHlfXyBvZiB0aGUgYmFzZSBzdGF0ZS5cbiAqXG4gKiBQYXNzIG9ubHkgYSBmdW5jdGlvbiB0byBjcmVhdGUgYSBcImN1cnJpZWQgcHJvZHVjZXJcIiB3aGljaCByZWxpZXZlcyB5b3VcbiAqIGZyb20gcGFzc2luZyB0aGUgcmVjaXBlIGZ1bmN0aW9uIGV2ZXJ5IHRpbWUuXG4gKlxuICogT25seSBwbGFpbiBvYmplY3RzIGFuZCBhcnJheXMgYXJlIG1hZGUgbXV0YWJsZS4gQWxsIG90aGVyIG9iamVjdHMgYXJlXG4gKiBjb25zaWRlcmVkIHVuY29weWFibGUuXG4gKlxuICogTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBfX2JvdW5kX18gdG8gaXRzIGBJbW1lcmAgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHthbnl9IGJhc2UgLSB0aGUgaW5pdGlhbCBzdGF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJvZHVjZXIgLSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgcHJveHkgb2YgdGhlIGJhc2Ugc3RhdGUgYXMgZmlyc3QgYXJndW1lbnQgYW5kIHdoaWNoIGNhbiBiZSBmcmVlbHkgbW9kaWZpZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhdGNoTGlzdGVuZXIgLSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggYWxsIHRoZSBwYXRjaGVzIHByb2R1Y2VkIGhlcmVcbiAqIEByZXR1cm5zIHthbnl9IGEgbmV3IHN0YXRlLCBvciB0aGUgaW5pdGlhbCBzdGF0ZSBpZiBub3RoaW5nIHdhcyBtb2RpZmllZFxuICovXG5leHBvcnQgY29uc3QgcHJvZHVjZTogSVByb2R1Y2UgPSBpbW1lci5wcm9kdWNlXG5leHBvcnQgZGVmYXVsdCBwcm9kdWNlXG5cbi8qKlxuICogTGlrZSBgcHJvZHVjZWAsIGJ1dCBgcHJvZHVjZVdpdGhQYXRjaGVzYCBhbHdheXMgcmV0dXJucyBhIHR1cGxlXG4gKiBbbmV4dFN0YXRlLCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlc10gKGluc3RlYWQgb2YganVzdCB0aGUgbmV4dCBzdGF0ZSlcbiAqL1xuZXhwb3J0IGNvbnN0IHByb2R1Y2VXaXRoUGF0Y2hlczogSVByb2R1Y2VXaXRoUGF0Y2hlcyA9IGltbWVyLnByb2R1Y2VXaXRoUGF0Y2hlcy5iaW5kKFxuXHRpbW1lclxuKVxuXG4vKipcbiAqIFBhc3MgdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IGZyZWV6ZSBhbGwgY29waWVzIGNyZWF0ZWQgYnkgSW1tZXIuXG4gKlxuICogQWx3YXlzIGZyZWV6ZSBieSBkZWZhdWx0LCBldmVuIGluIHByb2R1Y3Rpb24gbW9kZVxuICovXG5leHBvcnQgY29uc3Qgc2V0QXV0b0ZyZWV6ZSA9IGltbWVyLnNldEF1dG9GcmVlemUuYmluZChpbW1lcilcblxuLyoqXG4gKiBQYXNzIHRydWUgdG8gdXNlIHRoZSBFUzIwMTUgYFByb3h5YCBjbGFzcyB3aGVuIGNyZWF0aW5nIGRyYWZ0cywgd2hpY2ggaXNcbiAqIGFsd2F5cyBmYXN0ZXIgdGhhbiB1c2luZyBFUzUgcHJveGllcy5cbiAqXG4gKiBCeSBkZWZhdWx0LCBmZWF0dXJlIGRldGVjdGlvbiBpcyB1c2VkLCBzbyBjYWxsaW5nIHRoaXMgaXMgcmFyZWx5IG5lY2Vzc2FyeS5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldFVzZVByb3hpZXMgPSBpbW1lci5zZXRVc2VQcm94aWVzLmJpbmQoaW1tZXIpXG5cbi8qKlxuICogQXBwbHkgYW4gYXJyYXkgb2YgSW1tZXIgcGF0Y2hlcyB0byB0aGUgZmlyc3QgYXJndW1lbnQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhIHByb2R1Y2VyLCB3aGljaCBtZWFucyBjb3B5LW9uLXdyaXRlIGlzIGluIGVmZmVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5UGF0Y2hlcyA9IGltbWVyLmFwcGx5UGF0Y2hlcy5iaW5kKGltbWVyKVxuXG4vKipcbiAqIENyZWF0ZSBhbiBJbW1lciBkcmFmdCBmcm9tIHRoZSBnaXZlbiBiYXNlIHN0YXRlLCB3aGljaCBtYXkgYmUgYSBkcmFmdCBpdHNlbGYuXG4gKiBUaGUgZHJhZnQgY2FuIGJlIG1vZGlmaWVkIHVudGlsIHlvdSBmaW5hbGl6ZSBpdCB3aXRoIHRoZSBgZmluaXNoRHJhZnRgIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlRHJhZnQgPSBpbW1lci5jcmVhdGVEcmFmdC5iaW5kKGltbWVyKVxuXG4vKipcbiAqIEZpbmFsaXplIGFuIEltbWVyIGRyYWZ0IGZyb20gYSBgY3JlYXRlRHJhZnRgIGNhbGwsIHJldHVybmluZyB0aGUgYmFzZSBzdGF0ZVxuICogKGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlKSBvciBhIG1vZGlmaWVkIGNvcHkuIFRoZSBkcmFmdCBtdXN0ICpub3QqIGJlXG4gKiBtdXRhdGVkIGFmdGVyd2FyZHMuXG4gKlxuICogUGFzcyBhIGZ1bmN0aW9uIGFzIHRoZSAybmQgYXJndW1lbnQgdG8gZ2VuZXJhdGUgSW1tZXIgcGF0Y2hlcyBiYXNlZCBvbiB0aGVcbiAqIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBmaW5pc2hEcmFmdCA9IGltbWVyLmZpbmlzaERyYWZ0LmJpbmQoaW1tZXIpXG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBhIG5vLW9wLCBidXQgY2FuIGJlIHVzZWQgdG8gY2FzdCBhbiBpbW11dGFibGUgdHlwZVxuICogdG8gYW4gZHJhZnQgdHlwZSBhbmQgbWFrZSBUeXBlU2NyaXB0IGhhcHB5XG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXN0RHJhZnQ8VD4odmFsdWU6IFQpOiBEcmFmdDxUPiB7XG5cdHJldHVybiB2YWx1ZSBhcyBhbnlcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGEgbm8tb3AsIGJ1dCBjYW4gYmUgdXNlZCB0byBjYXN0IGEgbXV0YWJsZSB0eXBlXG4gKiB0byBhbiBpbW11dGFibGUgdHlwZSBhbmQgbWFrZSBUeXBlU2NyaXB0IGhhcHB5XG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhc3RJbW11dGFibGU8VD4odmFsdWU6IFQpOiBJbW11dGFibGU8VD4ge1xuXHRyZXR1cm4gdmFsdWUgYXMgYW55XG59XG5cbmV4cG9ydCB7SW1tZXJ9XG5cbmV4cG9ydCB7ZW5hYmxlRVM1fSBmcm9tIFwiLi9wbHVnaW5zL2VzNVwiXG5leHBvcnQge2VuYWJsZVBhdGNoZXN9IGZyb20gXCIuL3BsdWdpbnMvcGF0Y2hlc1wiXG5leHBvcnQge2VuYWJsZU1hcFNldH0gZnJvbSBcIi4vcGx1Z2lucy9tYXBzZXRcIlxuZXhwb3J0IHtlbmFibGVBbGxQbHVnaW5zfSBmcm9tIFwiLi9wbHVnaW5zL2FsbFwiXG4iLCAiLy8gU2hvdWxkIGJlIG5vIGltcG9ydHMgaGVyZSFcblxuLy8gU29tZSB0aGluZ3MgdGhhdCBzaG91bGQgYmUgZXZhbHVhdGVkIGJlZm9yZSBhbGwgZWxzZS4uLlxuXG4vLyBXZSBvbmx5IHdhbnQgdG8ga25vdyBpZiBub24tcG9seWZpbGxlZCBzeW1ib2xzIGFyZSBhdmFpbGFibGVcbmNvbnN0IGhhc1N5bWJvbCA9XG5cdHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIFN5bWJvbChcInhcIikgPT09IFwic3ltYm9sXCJcbmV4cG9ydCBjb25zdCBoYXNNYXAgPSB0eXBlb2YgTWFwICE9PSBcInVuZGVmaW5lZFwiXG5leHBvcnQgY29uc3QgaGFzU2V0ID0gdHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIlxuZXhwb3J0IGNvbnN0IGhhc1Byb3hpZXMgPVxuXHR0eXBlb2YgUHJveHkgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0dHlwZW9mIFByb3h5LnJldm9jYWJsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIlxuXG4vKipcbiAqIFRoZSBzZW50aW5lbCB2YWx1ZSByZXR1cm5lZCBieSBwcm9kdWNlcnMgdG8gcmVwbGFjZSB0aGUgZHJhZnQgd2l0aCB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBOT1RISU5HOiBOb3RoaW5nID0gaGFzU3ltYm9sXG5cdD8gU3ltYm9sLmZvcihcImltbWVyLW5vdGhpbmdcIilcblx0OiAoe1tcImltbWVyLW5vdGhpbmdcIl06IHRydWV9IGFzIGFueSlcblxuLyoqXG4gKiBUbyBsZXQgSW1tZXIgdHJlYXQgeW91ciBjbGFzcyBpbnN0YW5jZXMgYXMgcGxhaW4gaW1tdXRhYmxlIG9iamVjdHNcbiAqIChhbGJlaXQgd2l0aCBhIGN1c3RvbSBwcm90b3R5cGUpLCB5b3UgbXVzdCBkZWZpbmUgZWl0aGVyIGFuIGluc3RhbmNlIHByb3BlcnR5XG4gKiBvciBhIHN0YXRpYyBwcm9wZXJ0eSBvbiBlYWNoIG9mIHlvdXIgY3VzdG9tIGNsYXNzZXMuXG4gKlxuICogT3RoZXJ3aXNlLCB5b3VyIGNsYXNzIGluc3RhbmNlIHdpbGwgbmV2ZXIgYmUgZHJhZnRlZCwgd2hpY2ggbWVhbnMgaXQgd29uJ3QgYmVcbiAqIHNhZmUgdG8gbXV0YXRlIGluIGEgcHJvZHVjZSBjYWxsYmFjay5cbiAqL1xuZXhwb3J0IGNvbnN0IERSQUZUQUJMRTogdW5pcXVlIHN5bWJvbCA9IGhhc1N5bWJvbFxuXHQ/IFN5bWJvbC5mb3IoXCJpbW1lci1kcmFmdGFibGVcIilcblx0OiAoXCJfXyRpbW1lcl9kcmFmdGFibGVcIiBhcyBhbnkpXG5cbmV4cG9ydCBjb25zdCBEUkFGVF9TVEFURTogdW5pcXVlIHN5bWJvbCA9IGhhc1N5bWJvbFxuXHQ/IFN5bWJvbC5mb3IoXCJpbW1lci1zdGF0ZVwiKVxuXHQ6IChcIl9fJGltbWVyX3N0YXRlXCIgYXMgYW55KVxuXG4vLyBFdmVuIGEgcG9seWZpbGxlZCBTeW1ib2wgbWlnaHQgcHJvdmlkZSBTeW1ib2wuaXRlcmF0b3JcbmV4cG9ydCBjb25zdCBpdGVyYXRvclN5bWJvbDogdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9XG5cdCh0eXBlb2YgU3ltYm9sICE9IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yKSB8fCAoXCJAQGl0ZXJhdG9yXCIgYXMgYW55KVxuXG4vKiogVXNlIGEgY2xhc3MgdHlwZSBmb3IgYG5vdGhpbmdgIHNvIGl0cyB0eXBlIGlzIHVuaXF1ZSAqL1xuZXhwb3J0IGNsYXNzIE5vdGhpbmcge1xuXHQvLyBUaGlzIGxldHMgdXMgZG8gYEV4Y2x1ZGU8VCwgTm90aGluZz5gXG5cdC8vIEB0cy1pZ25vcmVcblx0cHJpdmF0ZSBfITogdW5pcXVlIHN5bWJvbFxufVxuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwgImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn0iLCAiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IFN0cmluZyhpKTtcbn0iLCAiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwgImltcG9ydCBkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi9kZWZpbmVQcm9wZXJ0eS5qc1wiO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7XG4gIHZhciB0ID0gT2JqZWN0LmtleXMoZSk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTtcbiAgICB9KSksIHQucHVzaC5hcHBseSh0LCBvKTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKGUpIHtcbiAgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHtcbiAgICB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307XG4gICAgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pO1xuICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBlO1xufSIsICJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyJztcblxuLyoqXG4gKiBBZGFwdGVkIGZyb20gUmVhY3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL21hc3Rlci9wYWNrYWdlcy9zaGFyZWQvZm9ybWF0UHJvZEVycm9yTWVzc2FnZS5qc1xuICpcbiAqIERvIG5vdCByZXF1aXJlIHRoaXMgbW9kdWxlIGRpcmVjdGx5ISBVc2Ugbm9ybWFsIHRocm93IGVycm9yIGNhbGxzLiBUaGVzZSBtZXNzYWdlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggZXJyb3IgY29kZXNcbiAqIGR1cmluZyBidWlsZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoY29kZSkge1xuICByZXR1cm4gXCJNaW5pZmllZCBSZWR1eCBlcnJvciAjXCIgKyBjb2RlICsgXCI7IHZpc2l0IGh0dHBzOi8vcmVkdXguanMub3JnL0Vycm9ycz9jb2RlPVwiICsgY29kZSArIFwiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIFwiICsgJ3VzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMuICc7XG59XG5cbi8vIElubGluZWQgdmVyc2lvbiBvZiB0aGUgYHN5bWJvbC1vYnNlcnZhYmxlYCBwb2x5ZmlsbFxudmFyICQkb2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8ICdAQG9ic2VydmFibGUnO1xufSkoKTtcblxuLyoqXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQgYnkgUmVkdXguXG4gKiBGb3IgYW55IHVua25vd24gYWN0aW9ucywgeW91IG11c3QgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlLlxuICogSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXG4gKi9cbnZhciByYW5kb21TdHJpbmcgPSBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykuc3BsaXQoJycpLmpvaW4oJy4nKTtcbn07XG5cbnZhciBBY3Rpb25UeXBlcyA9IHtcbiAgSU5JVDogXCJAQHJlZHV4L0lOSVRcIiArIHJhbmRvbVN0cmluZygpLFxuICBSRVBMQUNFOiBcIkBAcmVkdXgvUkVQTEFDRVwiICsgcmFuZG9tU3RyaW5nKCksXG4gIFBST0JFX1VOS05PV05fQUNUSU9OOiBmdW5jdGlvbiBQUk9CRV9VTktOT1dOX0FDVElPTigpIHtcbiAgICByZXR1cm4gXCJAQHJlZHV4L1BST0JFX1VOS05PV05fQUNUSU9OXCIgKyByYW5kb21TdHJpbmcoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gb2JqIFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcmd1bWVudCBhcHBlYXJzIHRvIGJlIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIHZhciBwcm90byA9IG9iajtcblxuICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKSAhPT0gbnVsbCkge1xuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gcHJvdG87XG59XG5cbi8vIElubGluZWQgLyBzaG9ydGVuZWQgdmVyc2lvbiBvZiBga2luZE9mYCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2tpbmQtb2ZcbmZ1bmN0aW9uIG1pbmlLaW5kT2YodmFsKSB7XG4gIGlmICh2YWwgPT09IHZvaWQgMCkgcmV0dXJuICd1bmRlZmluZWQnO1xuICBpZiAodmFsID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiAnYXJyYXknO1xuICBpZiAoaXNEYXRlKHZhbCkpIHJldHVybiAnZGF0ZSc7XG4gIGlmIChpc0Vycm9yKHZhbCkpIHJldHVybiAnZXJyb3InO1xuICB2YXIgY29uc3RydWN0b3JOYW1lID0gY3Rvck5hbWUodmFsKTtcblxuICBzd2l0Y2ggKGNvbnN0cnVjdG9yTmFtZSkge1xuICAgIGNhc2UgJ1N5bWJvbCc6XG4gICAgY2FzZSAnUHJvbWlzZSc6XG4gICAgY2FzZSAnV2Vha01hcCc6XG4gICAgY2FzZSAnV2Vha1NldCc6XG4gICAgY2FzZSAnTWFwJzpcbiAgICBjYXNlICdTZXQnOlxuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yTmFtZTtcbiAgfSAvLyBvdGhlclxuXG5cbiAgcmV0dXJuIHR5cGUuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csICcnKTtcbn1cblxuZnVuY3Rpb24gY3Rvck5hbWUodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nID8gdmFsLmNvbnN0cnVjdG9yLm5hbWUgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yKHZhbCkge1xuICByZXR1cm4gdmFsIGluc3RhbmNlb2YgRXJyb3IgfHwgdHlwZW9mIHZhbC5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiB2YWwuY29uc3RydWN0b3IgJiYgdHlwZW9mIHZhbC5jb25zdHJ1Y3Rvci5zdGFja1RyYWNlTGltaXQgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHR5cGVvZiB2YWwudG9EYXRlU3RyaW5nID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWwuZ2V0RGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsLnNldERhdGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGtpbmRPZih2YWwpIHtcbiAgdmFyIHR5cGVPZlZhbCA9IHR5cGVvZiB2YWw7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB0eXBlT2ZWYWwgPSBtaW5pS2luZE9mKHZhbCk7XG4gIH1cblxuICByZXR1cm4gdHlwZU9mVmFsO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKlxuICogKipXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGBjb25maWd1cmVTdG9yZWAgbWV0aG9kXG4gKiBvZiB0aGUgYEByZWR1eGpzL3Rvb2xraXRgIHBhY2thZ2UqKiwgd2hpY2ggcmVwbGFjZXMgYGNyZWF0ZVN0b3JlYC5cbiAqXG4gKiBSZWR1eCBUb29sa2l0IGlzIG91ciByZWNvbW1lbmRlZCBhcHByb2FjaCBmb3Igd3JpdGluZyBSZWR1eCBsb2dpYyB0b2RheSxcbiAqIGluY2x1ZGluZyBzdG9yZSBzZXR1cCwgcmVkdWNlcnMsIGRhdGEgZmV0Y2hpbmcsIGFuZCBtb3JlLlxuICpcbiAqICoqRm9yIG1vcmUgZGV0YWlscywgcGxlYXNlIHJlYWQgdGhpcyBSZWR1eCBkb2NzIHBhZ2U6KipcbiAqICoqaHR0cHM6Ly9yZWR1eC5qcy5vcmcvaW50cm9kdWN0aW9uL3doeS1ydGstaXMtcmVkdXgtdG9kYXkqKlxuICpcbiAqIGBjb25maWd1cmVTdG9yZWAgZnJvbSBSZWR1eCBUb29sa2l0IGlzIGFuIGltcHJvdmVkIHZlcnNpb24gb2YgYGNyZWF0ZVN0b3JlYCB0aGF0XG4gKiBzaW1wbGlmaWVzIHNldHVwIGFuZCBoZWxwcyBhdm9pZCBjb21tb24gYnVncy5cbiAqXG4gKiBZb3Ugc2hvdWxkIG5vdCBiZSB1c2luZyB0aGUgYHJlZHV4YCBjb3JlIHBhY2thZ2UgYnkgaXRzZWxmIHRvZGF5LCBleGNlcHQgZm9yIGxlYXJuaW5nIHB1cnBvc2VzLlxuICogVGhlIGBjcmVhdGVTdG9yZWAgbWV0aG9kIGZyb20gdGhlIGNvcmUgYHJlZHV4YCBwYWNrYWdlIHdpbGwgbm90IGJlIHJlbW92ZWQsIGJ1dCB3ZSBlbmNvdXJhZ2VcbiAqIGFsbCB1c2VycyB0byBtaWdyYXRlIHRvIHVzaW5nIFJlZHV4IFRvb2xraXQgZm9yIGFsbCBSZWR1eCBjb2RlLlxuICpcbiAqIElmIHlvdSB3YW50IHRvIHVzZSBgY3JlYXRlU3RvcmVgIHdpdGhvdXQgdGhpcyB2aXN1YWwgZGVwcmVjYXRpb24gd2FybmluZywgdXNlXG4gKiB0aGUgYGxlZ2FjeV9jcmVhdGVTdG9yZWAgaW1wb3J0IGluc3RlYWQ6XG4gKlxuICogYGltcG9ydCB7IGxlZ2FjeV9jcmVhdGVTdG9yZSBhcyBjcmVhdGVTdG9yZX0gZnJvbSAncmVkdXgnYFxuICpcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcbiAgdmFyIF9yZWYyO1xuXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBlbmhhbmNlciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgYXJndW1lbnRzWzNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMCkgOiAnSXQgbG9va3MgbGlrZSB5b3UgYXJlIHBhc3Npbmcgc2V2ZXJhbCBzdG9yZSBlbmhhbmNlcnMgdG8gJyArICdjcmVhdGVTdG9yZSgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIEluc3RlYWQsIGNvbXBvc2UgdGhlbSAnICsgJ3RvZ2V0aGVyIHRvIGEgc2luZ2xlIGZ1bmN0aW9uLiBTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjY3JlYXRpbmctYS1zdG9yZS13aXRoLWVuaGFuY2VycyBmb3IgYW4gZXhhbXBsZS4nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAndW5kZWZpbmVkJykge1xuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XG4gICAgcHJlbG9hZGVkU3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGVuaGFuY2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEpIDogXCJFeHBlY3RlZCB0aGUgZW5oYW5jZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihlbmhhbmNlcikgKyBcIidcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyKSA6IFwiRXhwZWN0ZWQgdGhlIHJvb3QgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKHJlZHVjZXIpICsgXCInXCIpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgdmFyIGN1cnJlbnRTdGF0ZSA9IHByZWxvYWRlZFN0YXRlO1xuICB2YXIgY3VycmVudExpc3RlbmVycyA9IFtdO1xuICB2YXIgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XG4gIHZhciBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGlzIG1ha2VzIGEgc2hhbGxvdyBjb3B5IG9mIGN1cnJlbnRMaXN0ZW5lcnMgc28gd2UgY2FuIHVzZVxuICAgKiBuZXh0TGlzdGVuZXJzIGFzIGEgdGVtcG9yYXJ5IGxpc3Qgd2hpbGUgZGlzcGF0Y2hpbmcuXG4gICAqXG4gICAqIFRoaXMgcHJldmVudHMgYW55IGJ1Z3MgYXJvdW5kIGNvbnN1bWVycyBjYWxsaW5nXG4gICAqIHN1YnNjcmliZS91bnN1YnNjcmliZSBpbiB0aGUgbWlkZGxlIG9mIGEgZGlzcGF0Y2guXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzLnNsaWNlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgc3RhdGUgdHJlZSBtYW5hZ2VkIGJ5IHRoZSBzdG9yZS5cbiAgICpcbiAgICogQHJldHVybnMge2FueX0gVGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFN0YXRlKCkge1xuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzKSA6ICdZb3UgbWF5IG5vdCBjYWxsIHN0b3JlLmdldFN0YXRlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiAnICsgJ1RoZSByZWR1Y2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIHRoZSBzdGF0ZSBhcyBhbiBhcmd1bWVudC4gJyArICdQYXNzIGl0IGRvd24gZnJvbSB0aGUgdG9wIHJlZHVjZXIgaW5zdGVhZCBvZiByZWFkaW5nIGl0IGZyb20gdGhlIHN0b3JlLicpO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxuICAgKiBhbmQgc29tZSBwYXJ0IG9mIHRoZSBzdGF0ZSB0cmVlIG1heSBwb3RlbnRpYWxseSBoYXZlIGNoYW5nZWQuIFlvdSBtYXkgdGhlblxuICAgKiBjYWxsIGBnZXRTdGF0ZSgpYCB0byByZWFkIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgaW5zaWRlIHRoZSBjYWxsYmFjay5cbiAgICpcbiAgICogWW91IG1heSBjYWxsIGBkaXNwYXRjaCgpYCBmcm9tIGEgY2hhbmdlIGxpc3RlbmVyLCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAgICogY2F2ZWF0czpcbiAgICpcbiAgICogMS4gVGhlIHN1YnNjcmlwdGlvbnMgYXJlIHNuYXBzaG90dGVkIGp1c3QgYmVmb3JlIGV2ZXJ5IGBkaXNwYXRjaCgpYCBjYWxsLlxuICAgKiBJZiB5b3Ugc3Vic2NyaWJlIG9yIHVuc3Vic2NyaWJlIHdoaWxlIHRoZSBsaXN0ZW5lcnMgYXJlIGJlaW5nIGludm9rZWQsIHRoaXNcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXG4gICAqIEhvd2V2ZXIsIHRoZSBuZXh0IGBkaXNwYXRjaCgpYCBjYWxsLCB3aGV0aGVyIG5lc3RlZCBvciBub3QsIHdpbGwgdXNlIGEgbW9yZVxuICAgKiByZWNlbnQgc25hcHNob3Qgb2YgdGhlIHN1YnNjcmlwdGlvbiBsaXN0LlxuICAgKlxuICAgKiAyLiBUaGUgbGlzdGVuZXIgc2hvdWxkIG5vdCBleHBlY3QgdG8gc2VlIGFsbCBzdGF0ZSBjaGFuZ2VzLCBhcyB0aGUgc3RhdGVcbiAgICogbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIGEgbmVzdGVkIGBkaXNwYXRjaCgpYCBiZWZvcmVcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcbiAgICogcmVnaXN0ZXJlZCBiZWZvcmUgdGhlIGBkaXNwYXRjaCgpYCBzdGFydGVkIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGxhdGVzdFxuICAgKiBzdGF0ZSBieSB0aGUgdGltZSBpdCBleGl0cy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgQSBjYWxsYmFjayB0byBiZSBpbnZva2VkIG9uIGV2ZXJ5IGRpc3BhdGNoLlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoaXMgY2hhbmdlIGxpc3RlbmVyLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQpIDogXCJFeHBlY3RlZCB0aGUgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihsaXN0ZW5lcikgKyBcIidcIik7XG4gICAgfVxuXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDUpIDogJ1lvdSBtYXkgbm90IGNhbGwgc3RvcmUuc3Vic2NyaWJlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiAnICsgJ0lmIHlvdSB3b3VsZCBsaWtlIHRvIGJlIG5vdGlmaWVkIGFmdGVyIHRoZSBzdG9yZSBoYXMgYmVlbiB1cGRhdGVkLCBzdWJzY3JpYmUgZnJvbSBhICcgKyAnY29tcG9uZW50IGFuZCBpbnZva2Ugc3RvcmUuZ2V0U3RhdGUoKSBpbiB0aGUgY2FsbGJhY2sgdG8gYWNjZXNzIHRoZSBsYXRlc3Qgc3RhdGUuICcgKyAnU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2FwaS9zdG9yZSNzdWJzY3JpYmVsaXN0ZW5lciBmb3IgbW9yZSBkZXRhaWxzLicpO1xuICAgIH1cblxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xuICAgIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKTtcbiAgICBuZXh0TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICAgIGlmICghaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNikgOiAnWW91IG1heSBub3QgdW5zdWJzY3JpYmUgZnJvbSBhIHN0b3JlIGxpc3RlbmVyIHdoaWxlIHRoZSByZWR1Y2VyIGlzIGV4ZWN1dGluZy4gJyArICdTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvYXBpL3N0b3JlI3N1YnNjcmliZWxpc3RlbmVyIGZvciBtb3JlIGRldGFpbHMuJyk7XG4gICAgICB9XG5cbiAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgIG5leHRMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIGN1cnJlbnRMaXN0ZW5lcnMgPSBudWxsO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cbiAgICpcbiAgICogVGhlIGByZWR1Y2VyYCBmdW5jdGlvbiwgdXNlZCB0byBjcmVhdGUgdGhlIHN0b3JlLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZVxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXG4gICAqIGJlIGNvbnNpZGVyZWQgdGhlICoqbmV4dCoqIHN0YXRlIG9mIHRoZSB0cmVlLCBhbmQgdGhlIGNoYW5nZSBsaXN0ZW5lcnNcbiAgICogd2lsbCBiZSBub3RpZmllZC5cbiAgICpcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBwbGFpbiBvYmplY3QgYWN0aW9ucy4gSWYgeW91IHdhbnQgdG9cbiAgICogZGlzcGF0Y2ggYSBQcm9taXNlLCBhbiBPYnNlcnZhYmxlLCBhIHRodW5rLCBvciBzb21ldGhpbmcgZWxzZSwgeW91IG5lZWQgdG9cbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXG4gICAqIGV4YW1wbGUsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGByZWR1eC10aHVua2AgcGFja2FnZS4gRXZlbiB0aGVcbiAgICogbWlkZGxld2FyZSB3aWxsIGV2ZW50dWFsbHkgZGlzcGF0Y2ggcGxhaW4gb2JqZWN0IGFjdGlvbnMgdXNpbmcgdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gQSBwbGFpbiBvYmplY3QgcmVwcmVzZW50aW5nIFx1MjAxQ3doYXQgY2hhbmdlZFx1MjAxRC4gSXQgaXNcbiAgICogYSBnb29kIGlkZWEgdG8ga2VlcCBhY3Rpb25zIHNlcmlhbGl6YWJsZSBzbyB5b3UgY2FuIHJlY29yZCBhbmQgcmVwbGF5IHVzZXJcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcbiAgICogYSBgdHlwZWAgcHJvcGVydHkgd2hpY2ggbWF5IG5vdCBiZSBgdW5kZWZpbmVkYC4gSXQgaXMgYSBnb29kIGlkZWEgdG8gdXNlXG4gICAqIHN0cmluZyBjb25zdGFudHMgZm9yIGFjdGlvbiB0eXBlcy5cbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH0gRm9yIGNvbnZlbmllbmNlLCB0aGUgc2FtZSBhY3Rpb24gb2JqZWN0IHlvdSBkaXNwYXRjaGVkLlxuICAgKlxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXG4gICAqIHJldHVybiBzb21ldGhpbmcgZWxzZSAoZm9yIGV4YW1wbGUsIGEgUHJvbWlzZSB5b3UgY2FuIGF3YWl0KS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoNykgOiBcIkFjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiBJbnN0ZWFkLCB0aGUgYWN0dWFsIHR5cGUgd2FzOiAnXCIgKyBraW5kT2YoYWN0aW9uKSArIFwiJy4gWW91IG1heSBuZWVkIHRvIGFkZCBtaWRkbGV3YXJlIHRvIHlvdXIgc3RvcmUgc2V0dXAgdG8gaGFuZGxlIGRpc3BhdGNoaW5nIG90aGVyIHZhbHVlcywgc3VjaCBhcyAncmVkdXgtdGh1bmsnIHRvIGhhbmRsZSBkaXNwYXRjaGluZyBmdW5jdGlvbnMuIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNC1zdG9yZSNtaWRkbGV3YXJlIGFuZCBodHRwczovL3JlZHV4LmpzLm9yZy90dXRvcmlhbHMvZnVuZGFtZW50YWxzL3BhcnQtNi1hc3luYy1sb2dpYyN1c2luZy10aGUtcmVkdXgtdGh1bmstbWlkZGxld2FyZSBmb3IgZXhhbXBsZXMuXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYWN0aW9uLnR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg4KSA6ICdBY3Rpb25zIG1heSBub3QgaGF2ZSBhbiB1bmRlZmluZWQgXCJ0eXBlXCIgcHJvcGVydHkuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGFuIGFjdGlvbiB0eXBlIHN0cmluZyBjb25zdGFudC4nKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoOSkgOiAnUmVkdWNlcnMgbWF5IG5vdCBkaXNwYXRjaCBhY3Rpb25zLicpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzID0gbmV4dExpc3RlbmVycztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgICBsaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb247XG4gIH1cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBZb3UgbWlnaHQgbmVlZCB0aGlzIGlmIHlvdXIgYXBwIGltcGxlbWVudHMgY29kZSBzcGxpdHRpbmcgYW5kIHlvdSB3YW50IHRvXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcbiAgICogaW1wbGVtZW50IGEgaG90IHJlbG9hZGluZyBtZWNoYW5pc20gZm9yIFJlZHV4LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG5cblxuICBmdW5jdGlvbiByZXBsYWNlUmVkdWNlcihuZXh0UmVkdWNlcikge1xuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEwKSA6IFwiRXhwZWN0ZWQgdGhlIG5leHRSZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQsIHJlY2VpdmVkOiAnXCIgKyBraW5kT2YobmV4dFJlZHVjZXIpKTtcbiAgICB9XG5cbiAgICBjdXJyZW50UmVkdWNlciA9IG5leHRSZWR1Y2VyOyAvLyBUaGlzIGFjdGlvbiBoYXMgYSBzaW1pbGlhciBlZmZlY3QgdG8gQWN0aW9uVHlwZXMuSU5JVC5cbiAgICAvLyBBbnkgcmVkdWNlcnMgdGhhdCBleGlzdGVkIGluIGJvdGggdGhlIG5ldyBhbmQgb2xkIHJvb3RSZWR1Y2VyXG4gICAgLy8gd2lsbCByZWNlaXZlIHRoZSBwcmV2aW91cyBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcbiAgICAvLyB0aGUgbmV3IHN0YXRlIHRyZWUgd2l0aCBhbnkgcmVsZXZhbnQgZGF0YSBmcm9tIHRoZSBvbGQgb25lLlxuXG4gICAgZGlzcGF0Y2goe1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuUkVQTEFDRVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBJbnRlcm9wZXJhYmlsaXR5IHBvaW50IGZvciBvYnNlcnZhYmxlL3JlYWN0aXZlIGxpYnJhcmllcy5cbiAgICogQHJldHVybnMge29ic2VydmFibGV9IEEgbWluaW1hbCBvYnNlcnZhYmxlIG9mIHN0YXRlIGNoYW5nZXMuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9ic2VydmFibGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBvYnNlcnZhYmxlKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIG91dGVyU3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgIHJldHVybiBfcmVmID0ge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbWluaW1hbCBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiBtZXRob2QuXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxuICAgICAgICogVGhlIG9ic2VydmVyIG9iamVjdCBzaG91bGQgaGF2ZSBhIGBuZXh0YCBtZXRob2QuXG4gICAgICAgKiBAcmV0dXJucyB7c3Vic2NyaXB0aW9ufSBBbiBvYmplY3Qgd2l0aCBhbiBgdW5zdWJzY3JpYmVgIG1ldGhvZCB0aGF0IGNhblxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxuICAgICAgICogZW1pc3Npb24gb2YgdmFsdWVzIGZyb20gdGhlIG9ic2VydmFibGUuXG4gICAgICAgKi9cbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZXIgIT09ICdvYmplY3QnIHx8IG9ic2VydmVyID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTEpIDogXCJFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LiBJbnN0ZWFkLCByZWNlaXZlZDogJ1wiICsga2luZE9mKG9ic2VydmVyKSArIFwiJ1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG9ic2VydmVTdGF0ZSgpIHtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChnZXRTdGF0ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlU3RhdGUoKTtcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LCBfcmVmWyQkb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBfcmVmO1xuICB9IC8vIFdoZW4gYSBzdG9yZSBpcyBjcmVhdGVkLCBhbiBcIklOSVRcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XG4gIC8vIHJlZHVjZXIgcmV0dXJucyB0aGVpciBpbml0aWFsIHN0YXRlLiBUaGlzIGVmZmVjdGl2ZWx5IHBvcHVsYXRlc1xuICAvLyB0aGUgaW5pdGlhbCBzdGF0ZSB0cmVlLlxuXG5cbiAgZGlzcGF0Y2goe1xuICAgIHR5cGU6IEFjdGlvblR5cGVzLklOSVRcbiAgfSk7XG4gIHJldHVybiBfcmVmMiA9IHtcbiAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXG4gICAgZ2V0U3RhdGU6IGdldFN0YXRlLFxuICAgIHJlcGxhY2VSZWR1Y2VyOiByZXBsYWNlUmVkdWNlclxuICB9LCBfcmVmMlskJG9ic2VydmFibGVdID0gb2JzZXJ2YWJsZSwgX3JlZjI7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBSZWR1eCBzdG9yZSB0aGF0IGhvbGRzIHRoZSBzdGF0ZSB0cmVlLlxuICpcbiAqICoqV2UgcmVjb21tZW5kIHVzaW5nIGBjb25maWd1cmVTdG9yZWAgZnJvbSB0aGVcbiAqIGBAcmVkdXhqcy90b29sa2l0YCBwYWNrYWdlKiosIHdoaWNoIHJlcGxhY2VzIGBjcmVhdGVTdG9yZWA6XG4gKiAqKmh0dHBzOi8vcmVkdXguanMub3JnL2ludHJvZHVjdGlvbi93aHktcnRrLWlzLXJlZHV4LXRvZGF5KipcbiAqXG4gKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cbiAqXG4gKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XG4gKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXG4gKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxuICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXG4gKlxuICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxuICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cbiAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcbiAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUgc3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gKiB0byBlbmhhbmNlIHRoZSBzdG9yZSB3aXRoIHRoaXJkLXBhcnR5IGNhcGFiaWxpdGllcyBzdWNoIGFzIG1pZGRsZXdhcmUsXG4gKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XG4gKiBpcyBgYXBwbHlNaWRkbGV3YXJlKClgLlxuICpcbiAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXG4gKiBhbmQgc3Vic2NyaWJlIHRvIGNoYW5nZXMuXG4gKi9cblxudmFyIGxlZ2FjeV9jcmVhdGVTdG9yZSA9IGNyZWF0ZVN0b3JlO1xuXG4vKipcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG5cblxuICB0cnkge1xuICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgaWYgeW91IGVuYWJsZVxuICAgIC8vIFwiYnJlYWsgb24gYWxsIGV4Y2VwdGlvbnNcIiBpbiB5b3VyIGNvbnNvbGUsXG4gICAgLy8gaXQgd291bGQgcGF1c2UgdGhlIGV4ZWN1dGlvbiBhdCB0aGlzIGxpbmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cbn1cblxuZnVuY3Rpb24gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShpbnB1dFN0YXRlLCByZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpIHtcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xuICB2YXIgYXJndW1lbnROYW1lID0gYWN0aW9uICYmIGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlcy5JTklUID8gJ3ByZWxvYWRlZFN0YXRlIGFyZ3VtZW50IHBhc3NlZCB0byBjcmVhdGVTdG9yZScgOiAncHJldmlvdXMgc3RhdGUgcmVjZWl2ZWQgYnkgdGhlIHJlZHVjZXInO1xuXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ1N0b3JlIGRvZXMgbm90IGhhdmUgYSB2YWxpZCByZWR1Y2VyLiBNYWtlIHN1cmUgdGhlIGFyZ3VtZW50IHBhc3NlZCAnICsgJ3RvIGNvbWJpbmVSZWR1Y2VycyBpcyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSByZWR1Y2Vycy4nO1xuICB9XG5cbiAgaWYgKCFpc1BsYWluT2JqZWN0KGlucHV0U3RhdGUpKSB7XG4gICAgcmV0dXJuIFwiVGhlIFwiICsgYXJndW1lbnROYW1lICsgXCIgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiXCIgKyBraW5kT2YoaW5wdXRTdGF0ZSkgKyBcIlxcXCIuIEV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgXCIgKyAoXCJrZXlzOiBcXFwiXCIgKyByZWR1Y2VyS2V5cy5qb2luKCdcIiwgXCInKSArIFwiXFxcIlwiKTtcbiAgfVxuXG4gIHZhciB1bmV4cGVjdGVkS2V5cyA9IE9iamVjdC5rZXlzKGlucHV0U3RhdGUpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICFyZWR1Y2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICF1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XTtcbiAgfSk7XG4gIHVuZXhwZWN0ZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldID0gdHJ1ZTtcbiAgfSk7XG4gIGlmIChhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVzLlJFUExBQ0UpIHJldHVybjtcblxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBcIlVuZXhwZWN0ZWQgXCIgKyAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMSA/ICdrZXlzJyA6ICdrZXknKSArIFwiIFwiICsgKFwiXFxcIlwiICsgdW5leHBlY3RlZEtleXMuam9pbignXCIsIFwiJykgKyBcIlxcXCIgZm91bmQgaW4gXCIgKyBhcmd1bWVudE5hbWUgKyBcIi4gXCIpICsgXCJFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6IFwiICsgKFwiXFxcIlwiICsgcmVkdWNlcktleXMuam9pbignXCIsIFwiJykgKyBcIlxcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xuICBPYmplY3Qua2V5cyhyZWR1Y2VycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHJlZHVjZXIgPSByZWR1Y2Vyc1trZXldO1xuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwge1xuICAgICAgdHlwZTogQWN0aW9uVHlwZXMuSU5JVFxuICAgIH0pO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMikgOiBcIlRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHJldHVybmVkIHVuZGVmaW5lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFwiICsgXCJJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgXCIgKyBcImV4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgXCIgKyBcIm5vdCBiZSB1bmRlZmluZWQuIElmIHlvdSBkb24ndCB3YW50IHRvIHNldCBhIHZhbHVlIGZvciB0aGlzIHJlZHVjZXIsIFwiICsgXCJ5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5QUk9CRV9VTktOT1dOX0FDVElPTigpXG4gICAgfSkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMykgOiBcIlRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHJldHVybmVkIHVuZGVmaW5lZCB3aGVuIHByb2JlZCB3aXRoIGEgcmFuZG9tIHR5cGUuIFwiICsgKFwiRG9uJ3QgdHJ5IHRvIGhhbmRsZSAnXCIgKyBBY3Rpb25UeXBlcy5JTklUICsgXCInIG9yIG90aGVyIGFjdGlvbnMgaW4gXFxcInJlZHV4LypcXFwiIFwiKSArIFwibmFtZXNwYWNlLiBUaGV5IGFyZSBjb25zaWRlcmVkIHByaXZhdGUuIEluc3RlYWQsIHlvdSBtdXN0IHJldHVybiB0aGUgXCIgKyBcImN1cnJlbnQgc3RhdGUgZm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHVubGVzcyBpdCBpcyB1bmRlZmluZWQsIFwiICsgXCJpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgXCIgKyBcImFjdGlvbiB0eXBlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgbm90IGJlIHVuZGVmaW5lZCwgYnV0IGNhbiBiZSBudWxsLlwiKTtcbiAgICB9XG4gIH0pO1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBkaWZmZXJlbnQgcmVkdWNlciBmdW5jdGlvbnMsIGludG8gYSBzaW5nbGVcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcbiAqIGludG8gYSBzaW5nbGUgc3RhdGUgb2JqZWN0LCB3aG9zZSBrZXlzIGNvcnJlc3BvbmQgdG8gdGhlIGtleXMgb2YgdGhlIHBhc3NlZFxuICogcmVkdWNlciBmdW5jdGlvbnMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHJlZHVjZXJzIEFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgY29ycmVzcG9uZCB0byBkaWZmZXJlbnRcbiAqIHJlZHVjZXIgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBjb21iaW5lZCBpbnRvIG9uZS4gT25lIGhhbmR5IHdheSB0byBvYnRhaW5cbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXG4gKiB1bmRlZmluZWQgZm9yIGFueSBhY3Rpb24uIEluc3RlYWQsIHRoZXkgc2hvdWxkIHJldHVybiB0aGVpciBpbml0aWFsIHN0YXRlXG4gKiBpZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZW0gd2FzIHVuZGVmaW5lZCwgYW5kIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhbnlcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHJlZHVjZXIgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGV2ZXJ5IHJlZHVjZXIgaW5zaWRlIHRoZVxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxuICovXG5cblxuZnVuY3Rpb24gY29tYmluZVJlZHVjZXJzKHJlZHVjZXJzKSB7XG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZHVjZXJLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2FybmluZyhcIk5vIHJlZHVjZXIgcHJvdmlkZWQgZm9yIGtleSBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaW5hbFJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMoZmluYWxSZWR1Y2Vycyk7IC8vIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgd2FybiBhYm91dCB0aGUgc2FtZVxuICAvLyBrZXlzIG11bHRpcGxlIHRpbWVzLlxuXG4gIHZhciB1bmV4cGVjdGVkS2V5Q2FjaGU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB1bmV4cGVjdGVkS2V5Q2FjaGUgPSB7fTtcbiAgfVxuXG4gIHZhciBzaGFwZUFzc2VydGlvbkVycm9yO1xuXG4gIHRyeSB7XG4gICAgYXNzZXJ0UmVkdWNlclNoYXBlKGZpbmFsUmVkdWNlcnMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2hhcGVBc3NlcnRpb25FcnJvciA9IGU7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gY29tYmluYXRpb24oc3RhdGUsIGFjdGlvbikge1xuICAgIGlmIChzdGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICBzdGF0ZSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChzaGFwZUFzc2VydGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBzaGFwZUFzc2VydGlvbkVycm9yO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XG5cbiAgICAgIGlmICh3YXJuaW5nTWVzc2FnZSkge1xuICAgICAgICB3YXJuaW5nKHdhcm5pbmdNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcbiAgICAgIHZhciByZWR1Y2VyID0gZmluYWxSZWR1Y2Vyc1tfa2V5XTtcbiAgICAgIHZhciBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVbX2tleV07XG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xuXG4gICAgICBpZiAodHlwZW9mIG5leHRTdGF0ZUZvcktleSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE0KSA6IFwiV2hlbiBjYWxsZWQgd2l0aCBhbiBhY3Rpb24gb2YgdHlwZSBcIiArIChhY3Rpb25UeXBlID8gXCJcXFwiXCIgKyBTdHJpbmcoYWN0aW9uVHlwZSkgKyBcIlxcXCJcIiA6ICcodW5rbm93biB0eXBlKScpICsgXCIsIHRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXFxcIlwiICsgX2tleSArIFwiXFxcIiByZXR1cm5lZCB1bmRlZmluZWQuIFwiICsgXCJUbyBpZ25vcmUgYW4gYWN0aW9uLCB5b3UgbXVzdCBleHBsaWNpdGx5IHJldHVybiB0aGUgcHJldmlvdXMgc3RhdGUuIFwiICsgXCJJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC5cIik7XG4gICAgICB9XG5cbiAgICAgIG5leHRTdGF0ZVtfa2V5XSA9IG5leHRTdGF0ZUZvcktleTtcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcbiAgICB9XG5cbiAgICBoYXNDaGFuZ2VkID0gaGFzQ2hhbmdlZCB8fCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aDtcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkaXNwYXRjaChhY3Rpb25DcmVhdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb24gY3JlYXRvcnMsIGludG8gYW4gb2JqZWN0IHdpdGggdGhlXG4gKiBzYW1lIGtleXMsIGJ1dCB3aXRoIGV2ZXJ5IGZ1bmN0aW9uIHdyYXBwZWQgaW50byBhIGBkaXNwYXRjaGAgY2FsbCBzbyB0aGV5XG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcbiAqIGBzdG9yZS5kaXNwYXRjaChNeUFjdGlvbkNyZWF0b3JzLmRvU29tZXRoaW5nKCkpYCB5b3Vyc2VsZiBqdXN0IGZpbmUuXG4gKlxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhbiBhY3Rpb24gY3JlYXRvciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXG4gKiBhbmQgZ2V0IGEgZGlzcGF0Y2ggd3JhcHBlZCBmdW5jdGlvbiBpbiByZXR1cm4uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IGFjdGlvbkNyZWF0b3JzIEFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGFjdGlvblxuICogY3JlYXRvciBmdW5jdGlvbnMuIE9uZSBoYW5keSB3YXkgdG8gb2J0YWluIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzYFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaXNwYXRjaCBUaGUgYGRpc3BhdGNoYCBmdW5jdGlvbiBhdmFpbGFibGUgb24geW91ciBSZWR1eFxuICogc3RvcmUuXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufE9iamVjdH0gVGhlIG9iamVjdCBtaW1pY2tpbmcgdGhlIG9yaWdpbmFsIG9iamVjdCwgYnV0IHdpdGhcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcbiAqIGZ1bmN0aW9uIGFzIGBhY3Rpb25DcmVhdG9yc2AsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHNvIGJlIGEgc2luZ2xlXG4gKiBmdW5jdGlvbi5cbiAqL1xuXG5cbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyAhPT0gJ29iamVjdCcgfHwgYWN0aW9uQ3JlYXRvcnMgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNikgOiBcImJpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgYnV0IGluc3RlYWQgcmVjZWl2ZWQ6ICdcIiArIGtpbmRPZihhY3Rpb25DcmVhdG9ycykgKyBcIicuIFwiICsgXCJEaWQgeW91IHdyaXRlIFxcXCJpbXBvcnQgQWN0aW9uQ3JlYXRvcnMgZnJvbVxcXCIgaW5zdGVhZCBvZiBcXFwiaW1wb3J0ICogYXMgQWN0aW9uQ3JlYXRvcnMgZnJvbVxcXCI/XCIpO1xuICB9XG5cbiAgdmFyIGJvdW5kQWN0aW9uQ3JlYXRvcnMgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gYWN0aW9uQ3JlYXRvcnMpIHtcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYm91bmRBY3Rpb25DcmVhdG9ycztcbn1cblxuLyoqXG4gKiBDb21wb3NlcyBzaW5nbGUtYXJndW1lbnQgZnVuY3Rpb25zIGZyb20gcmlnaHQgdG8gbGVmdC4gVGhlIHJpZ2h0bW9zdFxuICogZnVuY3Rpb24gY2FuIHRha2UgbXVsdGlwbGUgYXJndW1lbnRzIGFzIGl0IHByb3ZpZGVzIHRoZSBzaWduYXR1cmUgZm9yXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBmdW5jcyBUaGUgZnVuY3Rpb25zIHRvIGNvbXBvc2UuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcbiAqIGZyb20gcmlnaHQgdG8gbGVmdC4gRm9yIGV4YW1wbGUsIGNvbXBvc2UoZiwgZywgaCkgaXMgaWRlbnRpY2FsIHRvIGRvaW5nXG4gKiAoLi4uYXJncykgPT4gZihnKGgoLi4uYXJncykpKS5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZ1bmNzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gIH1cblxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYShiLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0b3JlIGVuaGFuY2VyIHRoYXQgYXBwbGllcyBtaWRkbGV3YXJlIHRvIHRoZSBkaXNwYXRjaCBtZXRob2RcbiAqIG9mIHRoZSBSZWR1eCBzdG9yZS4gVGhpcyBpcyBoYW5keSBmb3IgYSB2YXJpZXR5IG9mIHRhc2tzLCBzdWNoIGFzIGV4cHJlc3NpbmdcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXG4gKlxuICogU2VlIGByZWR1eC10aHVua2AgcGFja2FnZSBhcyBhbiBleGFtcGxlIG9mIHRoZSBSZWR1eCBtaWRkbGV3YXJlLlxuICpcbiAqIEJlY2F1c2UgbWlkZGxld2FyZSBpcyBwb3RlbnRpYWxseSBhc3luY2hyb25vdXMsIHRoaXMgc2hvdWxkIGJlIHRoZSBmaXJzdFxuICogc3RvcmUgZW5oYW5jZXIgaW4gdGhlIGNvbXBvc2l0aW9uIGNoYWluLlxuICpcbiAqIE5vdGUgdGhhdCBlYWNoIG1pZGRsZXdhcmUgd2lsbCBiZSBnaXZlbiB0aGUgYGRpc3BhdGNoYCBhbmQgYGdldFN0YXRlYCBmdW5jdGlvbnNcbiAqIGFzIG5hbWVkIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBtaWRkbGV3YXJlcyBUaGUgbWlkZGxld2FyZSBjaGFpbiB0byBiZSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHN0b3JlIGVuaGFuY2VyIGFwcGx5aW5nIHRoZSBtaWRkbGV3YXJlLlxuICovXG5cbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RvcmUgPSBjcmVhdGVTdG9yZS5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG5cbiAgICAgIHZhciBfZGlzcGF0Y2ggPSBmdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTUpIDogJ0Rpc3BhdGNoaW5nIHdoaWxlIGNvbnN0cnVjdGluZyB5b3VyIG1pZGRsZXdhcmUgaXMgbm90IGFsbG93ZWQuICcgKyAnT3RoZXIgbWlkZGxld2FyZSB3b3VsZCBub3QgYmUgYXBwbGllZCB0byB0aGlzIGRpc3BhdGNoLicpO1xuICAgICAgfTtcblxuICAgICAgdmFyIG1pZGRsZXdhcmVBUEkgPSB7XG4gICAgICAgIGdldFN0YXRlOiBzdG9yZS5nZXRTdGF0ZSxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICAgICAgICAgIHJldHVybiBfZGlzcGF0Y2guYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIGNoYWluID0gbWlkZGxld2FyZXMubWFwKGZ1bmN0aW9uIChtaWRkbGV3YXJlKSB7XG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlKG1pZGRsZXdhcmVBUEkpO1xuICAgICAgfSk7XG4gICAgICBfZGlzcGF0Y2ggPSBjb21wb3NlLmFwcGx5KHZvaWQgMCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHN0b3JlKSwge30sIHtcbiAgICAgICAgZGlzcGF0Y2g6IF9kaXNwYXRjaFxuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgQWN0aW9uVHlwZXMgYXMgX19ET19OT1RfVVNFX19BY3Rpb25UeXBlcywgYXBwbHlNaWRkbGV3YXJlLCBiaW5kQWN0aW9uQ3JlYXRvcnMsIGNvbWJpbmVSZWR1Y2VycywgY29tcG9zZSwgY3JlYXRlU3RvcmUsIGxlZ2FjeV9jcmVhdGVTdG9yZSB9O1xuIiwgIi8qKiBBIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIHBvdGVudGlhbCBcImV4dHJhIGFyZ3VtZW50XCIgdmFsdWUgdG8gYmUgaW5qZWN0ZWQgbGF0ZXIsXHJcbiAqIGFuZCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSB0aHVuayBtaWRkbGV3YXJlIHRoYXQgdXNlcyB0aGF0IHZhbHVlXHJcbiAqL1xuZnVuY3Rpb24gY3JlYXRlVGh1bmtNaWRkbGV3YXJlKGV4dHJhQXJndW1lbnQpIHtcbiAgLy8gU3RhbmRhcmQgUmVkdXggbWlkZGxld2FyZSBkZWZpbml0aW9uIHBhdHRlcm46XG4gIC8vIFNlZTogaHR0cHM6Ly9yZWR1eC5qcy5vcmcvdHV0b3JpYWxzL2Z1bmRhbWVudGFscy9wYXJ0LTQtc3RvcmUjd3JpdGluZy1jdXN0b20tbWlkZGxld2FyZVxuICB2YXIgbWlkZGxld2FyZSA9IGZ1bmN0aW9uIG1pZGRsZXdhcmUoX3JlZikge1xuICAgIHZhciBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXG4gICAgICAgIGdldFN0YXRlID0gX3JlZi5nZXRTdGF0ZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIC8vIFRoZSB0aHVuayBtaWRkbGV3YXJlIGxvb2tzIGZvciBhbnkgZnVuY3Rpb25zIHRoYXQgd2VyZSBwYXNzZWQgdG8gYHN0b3JlLmRpc3BhdGNoYC5cbiAgICAgICAgLy8gSWYgdGhpcyBcImFjdGlvblwiIGlzIHJlYWxseSBhIGZ1bmN0aW9uLCBjYWxsIGl0IGFuZCByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBJbmplY3QgdGhlIHN0b3JlJ3MgYGRpc3BhdGNoYCBhbmQgYGdldFN0YXRlYCBtZXRob2RzLCBhcyB3ZWxsIGFzIGFueSBcImV4dHJhIGFyZ1wiXG4gICAgICAgICAgcmV0dXJuIGFjdGlvbihkaXNwYXRjaCwgZ2V0U3RhdGUsIGV4dHJhQXJndW1lbnQpO1xuICAgICAgICB9IC8vIE90aGVyd2lzZSwgcGFzcyB0aGUgYWN0aW9uIGRvd24gdGhlIG1pZGRsZXdhcmUgY2hhaW4gYXMgdXN1YWxcblxuXG4gICAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIG1pZGRsZXdhcmU7XG59XG5cbnZhciB0aHVuayA9IGNyZWF0ZVRodW5rTWlkZGxld2FyZSgpOyAvLyBBdHRhY2ggdGhlIGZhY3RvcnkgZnVuY3Rpb24gc28gdXNlcnMgY2FuIGNyZWF0ZSBhIGN1c3RvbWl6ZWQgdmVyc2lvblxuLy8gd2l0aCB3aGF0ZXZlciBcImV4dHJhIGFyZ1wiIHRoZXkgd2FudCB0byBpbmplY3QgaW50byB0aGVpciB0aHVua3NcblxudGh1bmsud2l0aEV4dHJhQXJndW1lbnQgPSBjcmVhdGVUaHVua01pZGRsZXdhcmU7XG5leHBvcnQgZGVmYXVsdCB0aHVuazsiLCAiaW1wb3J0IHsgZW5hYmxlRVM1IH0gZnJvbSAnaW1tZXInXHJcbmV4cG9ydCAqIGZyb20gJ3JlZHV4J1xyXG5leHBvcnQge1xyXG4gIGRlZmF1bHQgYXMgY3JlYXRlTmV4dFN0YXRlLFxyXG4gIGN1cnJlbnQsXHJcbiAgZnJlZXplLFxyXG4gIG9yaWdpbmFsLFxyXG4gIGlzRHJhZnQsXHJcbn0gZnJvbSAnaW1tZXInXHJcbmV4cG9ydCB0eXBlIHsgRHJhZnQgfSBmcm9tICdpbW1lcidcclxuZXhwb3J0IHsgY3JlYXRlU2VsZWN0b3IgfSBmcm9tICdyZXNlbGVjdCdcclxuZXhwb3J0IHR5cGUge1xyXG4gIFNlbGVjdG9yLFxyXG4gIE91dHB1dFBhcmFtZXRyaWNTZWxlY3RvcixcclxuICBPdXRwdXRTZWxlY3RvcixcclxuICBQYXJhbWV0cmljU2VsZWN0b3IsXHJcbn0gZnJvbSAncmVzZWxlY3QnXHJcbmV4cG9ydCB7IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yIH0gZnJvbSAnLi9jcmVhdGVEcmFmdFNhZmVTZWxlY3RvcidcclxuZXhwb3J0IHR5cGUgeyBUaHVua0FjdGlvbiwgVGh1bmtEaXNwYXRjaCwgVGh1bmtNaWRkbGV3YXJlIH0gZnJvbSAncmVkdXgtdGh1bmsnXHJcblxyXG4vLyBXZSBkZWxpYmVyYXRlbHkgZW5hYmxlIEltbWVyJ3MgRVM1IHN1cHBvcnQsIG9uIHRoZSBncm91bmRzIHRoYXRcclxuLy8gd2UgYXNzdW1lIFJUSyB3aWxsIGJlIHVzZWQgd2l0aCBSZWFjdCBOYXRpdmUgYW5kIG90aGVyIFByb3h5LWxlc3NcclxuLy8gZW52aXJvbm1lbnRzLiAgSW4gYWRkaXRpb24sIHRoYXQncyBob3cgSW1tZXIgNCBiZWhhdmVkLCBhbmQgc2luY2VcclxuLy8gd2Ugd2FudCB0byBzaGlwIHRoaXMgaW4gYW4gUlRLIG1pbm9yLCB3ZSBzaG91bGQga2VlcCB0aGUgc2FtZSBiZWhhdmlvci5cclxuZW5hYmxlRVM1KClcclxuXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBjb25maWd1cmVTdG9yZSxcclxufSBmcm9tICcuL2NvbmZpZ3VyZVN0b3JlJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBDb25maWd1cmVFbmhhbmNlcnNDYWxsYmFjayxcclxuICBDb25maWd1cmVTdG9yZU9wdGlvbnMsXHJcbiAgRW5oYW5jZWRTdG9yZSxcclxufSBmcm9tICcuL2NvbmZpZ3VyZVN0b3JlJ1xyXG5leHBvcnQgdHlwZSB7IERldlRvb2xzRW5oYW5jZXJPcHRpb25zIH0gZnJvbSAnLi9kZXZ0b29sc0V4dGVuc2lvbidcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZUFjdGlvbixcclxuICBnZXRUeXBlLFxyXG4gIGlzQWN0aW9uLFxyXG4gIGlzQWN0aW9uQ3JlYXRvcixcclxuICBpc0ZTQSBhcyBpc0ZsdXhTdGFuZGFyZEFjdGlvbixcclxufSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgUGF5bG9hZEFjdGlvbixcclxuICBQYXlsb2FkQWN0aW9uQ3JlYXRvcixcclxuICBBY3Rpb25DcmVhdG9yV2l0aE5vbkluZmVycmFibGVQYXlsb2FkLFxyXG4gIEFjdGlvbkNyZWF0b3JXaXRoT3B0aW9uYWxQYXlsb2FkLFxyXG4gIEFjdGlvbkNyZWF0b3JXaXRoUGF5bG9hZCxcclxuICBBY3Rpb25DcmVhdG9yV2l0aG91dFBheWxvYWQsXHJcbiAgQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQsXHJcbiAgUHJlcGFyZUFjdGlvbixcclxufSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZVJlZHVjZXIsXHJcbn0gZnJvbSAnLi9jcmVhdGVSZWR1Y2VyJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBBY3Rpb25zLFxyXG4gIENhc2VSZWR1Y2VyLFxyXG4gIENhc2VSZWR1Y2VycyxcclxufSBmcm9tICcuL2NyZWF0ZVJlZHVjZXInXHJcbmV4cG9ydCB7XHJcbiAgLy8ganNcclxuICBjcmVhdGVTbGljZSxcclxufSBmcm9tICcuL2NyZWF0ZVNsaWNlJ1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgQ3JlYXRlU2xpY2VPcHRpb25zLFxyXG4gIFNsaWNlLFxyXG4gIENhc2VSZWR1Y2VyQWN0aW9ucyxcclxuICBTbGljZUNhc2VSZWR1Y2VycyxcclxuICBWYWxpZGF0ZVNsaWNlQ2FzZVJlZHVjZXJzLFxyXG4gIENhc2VSZWR1Y2VyV2l0aFByZXBhcmUsXHJcbiAgU2xpY2VBY3Rpb25DcmVhdG9yLFxyXG59IGZyb20gJy4vY3JlYXRlU2xpY2UnXHJcbmV4cG9ydCB0eXBlIHsgQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zIH0gZnJvbSAnLi9hY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHsgY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUgfSBmcm9tICcuL2FjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5leHBvcnQge1xyXG4gIC8vIGpzXHJcbiAgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLFxyXG4gIGlzSW1tdXRhYmxlRGVmYXVsdCxcclxufSBmcm9tICcuL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyxcclxufSBmcm9tICcuL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSxcclxuICBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUsXHJcbiAgaXNQbGFpbixcclxufSBmcm9tICcuL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHR5cGUge1xyXG4gIC8vIHR5cGVzXHJcbiAgU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyxcclxufSBmcm9tICcuL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGdldERlZmF1bHRNaWRkbGV3YXJlLFxyXG59IGZyb20gJy4vZ2V0RGVmYXVsdE1pZGRsZXdhcmUnXHJcbmV4cG9ydCB0eXBlIHtcclxuICAvLyB0eXBlc1xyXG4gIEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyLFxyXG59IGZyb20gJy4vbWFwQnVpbGRlcnMnXHJcbmV4cG9ydCB7IE1pZGRsZXdhcmVBcnJheSwgRW5oYW5jZXJBcnJheSB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5leHBvcnQgeyBjcmVhdGVFbnRpdHlBZGFwdGVyIH0gZnJvbSAnLi9lbnRpdGllcy9jcmVhdGVfYWRhcHRlcidcclxuZXhwb3J0IHR5cGUge1xyXG4gIERpY3Rpb25hcnksXHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5QWRhcHRlcixcclxuICBFbnRpdHlTZWxlY3RvcnMsXHJcbiAgRW50aXR5U3RhdGVBZGFwdGVyLFxyXG4gIEVudGl0eUlkLFxyXG4gIFVwZGF0ZSxcclxuICBJZFNlbGVjdG9yLFxyXG4gIENvbXBhcmVyLFxyXG59IGZyb20gJy4vZW50aXRpZXMvbW9kZWxzJ1xyXG5cclxuZXhwb3J0IHtcclxuICBjcmVhdGVBc3luY1RodW5rLFxyXG4gIHVud3JhcFJlc3VsdCxcclxuICBtaW5pU2VyaWFsaXplRXJyb3IsXHJcbn0gZnJvbSAnLi9jcmVhdGVBc3luY1RodW5rJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgQXN5bmNUaHVuayxcclxuICBBc3luY1RodW5rT3B0aW9ucyxcclxuICBBc3luY1RodW5rQWN0aW9uLFxyXG4gIEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvclJldHVyblZhbHVlLFxyXG4gIEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvcixcclxuICBTZXJpYWxpemVkRXJyb3IsXHJcbn0gZnJvbSAnLi9jcmVhdGVBc3luY1RodW5rJ1xyXG5cclxuZXhwb3J0IHtcclxuICAvLyBqc1xyXG4gIGlzQWxsT2YsXHJcbiAgaXNBbnlPZixcclxuICBpc1BlbmRpbmcsXHJcbiAgaXNSZWplY3RlZCxcclxuICBpc0Z1bGZpbGxlZCxcclxuICBpc0FzeW5jVGh1bmtBY3Rpb24sXHJcbiAgaXNSZWplY3RlZFdpdGhWYWx1ZSxcclxufSBmcm9tICcuL21hdGNoZXJzJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgLy8gdHlwZXNcclxuICBBY3Rpb25NYXRjaGluZ0FsbE9mLFxyXG4gIEFjdGlvbk1hdGNoaW5nQW55T2YsXHJcbn0gZnJvbSAnLi9tYXRjaGVycydcclxuXHJcbmV4cG9ydCB7IG5hbm9pZCB9IGZyb20gJy4vbmFub2lkJ1xyXG5cclxuZXhwb3J0IHsgZGVmYXVsdCBhcyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnLi9pc1BsYWluT2JqZWN0J1xyXG5cclxuZXhwb3J0IHR5cGUge1xyXG4gIExpc3RlbmVyRWZmZWN0LFxyXG4gIExpc3RlbmVyTWlkZGxld2FyZSxcclxuICBMaXN0ZW5lckVmZmVjdEFQSSxcclxuICBMaXN0ZW5lck1pZGRsZXdhcmVJbnN0YW5jZSxcclxuICBDcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmVPcHRpb25zLFxyXG4gIExpc3RlbmVyRXJyb3JIYW5kbGVyLFxyXG4gIFR5cGVkU3RhcnRMaXN0ZW5pbmcsXHJcbiAgVHlwZWRBZGRMaXN0ZW5lcixcclxuICBUeXBlZFN0b3BMaXN0ZW5pbmcsXHJcbiAgVHlwZWRSZW1vdmVMaXN0ZW5lcixcclxuICBVbnN1YnNjcmliZUxpc3RlbmVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXJPcHRpb25zLFxyXG4gIEZvcmtlZFRhc2tFeGVjdXRvcixcclxuICBGb3JrZWRUYXNrLFxyXG4gIEZvcmtlZFRhc2tBUEksXHJcbiAgQXN5bmNUYXNrRXhlY3V0b3IsXHJcbiAgU3luY1Rhc2tFeGVjdXRvcixcclxuICBUYXNrQ2FuY2VsbGVkLFxyXG4gIFRhc2tSZWplY3RlZCxcclxuICBUYXNrUmVzb2x2ZWQsXHJcbiAgVGFza1Jlc3VsdCxcclxufSBmcm9tICcuL2xpc3RlbmVyTWlkZGxld2FyZS9pbmRleCdcclxuZXhwb3J0IHR5cGUgeyBBbnlMaXN0ZW5lclByZWRpY2F0ZSB9IGZyb20gJy4vbGlzdGVuZXJNaWRkbGV3YXJlL3R5cGVzJ1xyXG5cclxuZXhwb3J0IHtcclxuICBjcmVhdGVMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgYWRkTGlzdGVuZXIsXHJcbiAgcmVtb3ZlTGlzdGVuZXIsXHJcbiAgY2xlYXJBbGxMaXN0ZW5lcnMsXHJcbiAgVGFza0Fib3J0RXJyb3IsXHJcbn0gZnJvbSAnLi9saXN0ZW5lck1pZGRsZXdhcmUvaW5kZXgnXHJcblxyXG5leHBvcnQge1xyXG4gIFNIT1VMRF9BVVRPQkFUQ0gsXHJcbiAgcHJlcGFyZUF1dG9CYXRjaGVkLFxyXG4gIGF1dG9CYXRjaEVuaGFuY2VyLFxyXG59IGZyb20gJy4vYXV0b0JhdGNoRW5oYW5jZXInXHJcbmV4cG9ydCB0eXBlIHsgQXV0b0JhdGNoT3B0aW9ucyB9IGZyb20gJy4vYXV0b0JhdGNoRW5oYW5jZXInXHJcblxyXG5leHBvcnQgdHlwZSB7IEV4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnMgYXMgVFNIZWxwZXJzRXh0cmFjdERpc3BhdGNoRXh0ZW5zaW9ucyB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG4iLCAiaW1wb3J0IHsgY3VycmVudCwgaXNEcmFmdCB9IGZyb20gJ2ltbWVyJ1xyXG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gJ3Jlc2VsZWN0J1xyXG5cclxuLyoqXHJcbiAqIFwiRHJhZnQtU2FmZVwiIHZlcnNpb24gb2YgYHJlc2VsZWN0YCdzIGBjcmVhdGVTZWxlY3RvcmA6XHJcbiAqIElmIGFuIGBpbW1lcmAtZHJhZnRlZCBvYmplY3QgaXMgcGFzc2VkIGludG8gdGhlIHJlc3VsdGluZyBzZWxlY3RvcidzIGZpcnN0IGFyZ3VtZW50LFxyXG4gKiB0aGUgc2VsZWN0b3Igd2lsbCBhY3Qgb24gdGhlIGN1cnJlbnQgZHJhZnQgdmFsdWUsIGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgY2FjaGVkIHZhbHVlXHJcbiAqIHRoYXQgbWlnaHQgYmUgcG9zc2libHkgb3V0ZGF0ZWQgaWYgdGhlIGRyYWZ0IGhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3I6IHR5cGVvZiBjcmVhdGVTZWxlY3RvciA9IChcclxuICAuLi5hcmdzOiB1bmtub3duW11cclxuKSA9PiB7XHJcbiAgY29uc3Qgc2VsZWN0b3IgPSAoY3JlYXRlU2VsZWN0b3IgYXMgYW55KSguLi5hcmdzKVxyXG4gIGNvbnN0IHdyYXBwZWRTZWxlY3RvciA9ICh2YWx1ZTogdW5rbm93biwgLi4ucmVzdDogdW5rbm93bltdKSA9PlxyXG4gICAgc2VsZWN0b3IoaXNEcmFmdCh2YWx1ZSkgPyBjdXJyZW50KHZhbHVlKSA6IHZhbHVlLCAuLi5yZXN0KVxyXG4gIHJldHVybiB3cmFwcGVkU2VsZWN0b3IgYXMgYW55XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHtcclxuICBSZWR1Y2VyLFxyXG4gIFJlZHVjZXJzTWFwT2JqZWN0LFxyXG4gIE1pZGRsZXdhcmUsXHJcbiAgQWN0aW9uLFxyXG4gIEFueUFjdGlvbixcclxuICBTdG9yZUVuaGFuY2VyLFxyXG4gIFN0b3JlLFxyXG4gIERpc3BhdGNoLFxyXG4gIFByZWxvYWRlZFN0YXRlLFxyXG4gIENvbWJpbmVkU3RhdGUsXHJcbn0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB7IGNyZWF0ZVN0b3JlLCBjb21wb3NlLCBhcHBseU1pZGRsZXdhcmUsIGNvbWJpbmVSZWR1Y2VycyB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7IERldlRvb2xzRW5oYW5jZXJPcHRpb25zIGFzIERldlRvb2xzT3B0aW9ucyB9IGZyb20gJy4vZGV2dG9vbHNFeHRlbnNpb24nXHJcbmltcG9ydCB7IGNvbXBvc2VXaXRoRGV2VG9vbHMgfSBmcm9tICcuL2RldnRvb2xzRXh0ZW5zaW9uJ1xyXG5cclxuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0J1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgVGh1bmtNaWRkbGV3YXJlRm9yLFxyXG4gIEN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSxcclxufSBmcm9tICcuL2dldERlZmF1bHRNaWRkbGV3YXJlJ1xyXG5pbXBvcnQgeyBjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlIH0gZnJvbSAnLi9nZXREZWZhdWx0TWlkZGxld2FyZSdcclxuaW1wb3J0IHR5cGUge1xyXG4gIE5vSW5mZXIsXHJcbiAgRXh0cmFjdERpc3BhdGNoRXh0ZW5zaW9ucyxcclxuICBFeHRyYWN0U3RvcmVFeHRlbnNpb25zLFxyXG4gIEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnMsXHJcbn0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB7IEVuaGFuY2VyQXJyYXkgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuY29uc3QgSVNfUFJPRFVDVElPTiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbidcclxuXHJcbi8qKlxyXG4gKiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlLCB0byBiZSB1c2VkIGluIGBDb25maWd1cmVTdG9yZU9wdGlvbnMuZW5oYW5jZXJzYFxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDb25maWd1cmVFbmhhbmNlcnNDYWxsYmFjazxFIGV4dGVuZHMgRW5oYW5jZXJzID0gRW5oYW5jZXJzPiA9IChcclxuICBkZWZhdWx0RW5oYW5jZXJzOiBFbmhhbmNlckFycmF5PFtTdG9yZUVuaGFuY2VyPHt9LCB7fT5dPlxyXG4pID0+IEVcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBgY29uZmlndXJlU3RvcmUoKWAuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJlU3RvcmVPcHRpb25zPFxyXG4gIFMgPSBhbnksXHJcbiAgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbixcclxuICBNIGV4dGVuZHMgTWlkZGxld2FyZXM8Uz4gPSBNaWRkbGV3YXJlczxTPixcclxuICBFIGV4dGVuZHMgRW5oYW5jZXJzID0gRW5oYW5jZXJzXHJcbj4ge1xyXG4gIC8qKlxyXG4gICAqIEEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJvb3QgcmVkdWNlciwgb3IgYW5cclxuICAgKiBvYmplY3Qgb2Ygc2xpY2UgcmVkdWNlcnMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBgY29tYmluZVJlZHVjZXJzKClgLlxyXG4gICAqL1xyXG4gIHJlZHVjZXI6IFJlZHVjZXI8UywgQT4gfCBSZWR1Y2Vyc01hcE9iamVjdDxTLCBBPlxyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBSZWR1eCBtaWRkbGV3YXJlIHRvIGluc3RhbGwuIElmIG5vdCBzdXBwbGllZCwgZGVmYXVsdHMgdG9cclxuICAgKiB0aGUgc2V0IG9mIG1pZGRsZXdhcmUgcmV0dXJuZWQgYnkgYGdldERlZmF1bHRNaWRkbGV3YXJlKClgLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGUgYG1pZGRsZXdhcmU6IChnRE0pID0+IGdETSgpLmNvbmNhdChsb2dnZXIsIGFwaU1pZGRsZXdhcmUsIHlvdXJDdXN0b21NaWRkbGV3YXJlKWBcclxuICAgKiBAc2VlIGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2dldERlZmF1bHRNaWRkbGV3YXJlI2ludGVuZGVkLXVzYWdlXHJcbiAgICovXHJcbiAgbWlkZGxld2FyZT86ICgoZ2V0RGVmYXVsdE1pZGRsZXdhcmU6IEN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZTxTPikgPT4gTSkgfCBNXHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIFJlZHV4IERldlRvb2xzIGludGVncmF0aW9uLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXHJcbiAgICpcclxuICAgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGRvbmUgYnkgcGFzc2luZyBSZWR1eCBEZXZUb29scyBvcHRpb25zXHJcbiAgICovXHJcbiAgZGV2VG9vbHM/OiBib29sZWFuIHwgRGV2VG9vbHNPcHRpb25zXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpbml0aWFsIHN0YXRlLCBzYW1lIGFzIFJlZHV4J3MgY3JlYXRlU3RvcmUuXHJcbiAgICogWW91IG1heSBvcHRpb25hbGx5IHNwZWNpZnkgaXQgdG8gaHlkcmF0ZSB0aGUgc3RhdGVcclxuICAgKiBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYSBwcmV2aW91c2x5IHNlcmlhbGl6ZWRcclxuICAgKiB1c2VyIHNlc3Npb24uIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2VycygpYCB0byBwcm9kdWNlIHRoZSByb290IHJlZHVjZXJcclxuICAgKiBmdW5jdGlvbiAoZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgcGFzc2luZyBhbiBvYmplY3QgYXMgYHJlZHVjZXJgKSxcclxuICAgKiB0aGlzIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgc2hhcGUgYXMgdGhlIHJlZHVjZXIgbWFwIGtleXMuXHJcbiAgICovXHJcbiAgLypcclxuICBOb3QgMTAwJSBjb3JyZWN0IGJ1dCB0aGUgYmVzdCBhcHByb3hpbWF0aW9uIHdlIGNhbiBnZXQ6XHJcbiAgLSBpZiBTIGlzIGEgYENvbWJpbmVkU3RhdGVgIGFwcGx5aW5nIGEgc2Vjb25kIGBDb21iaW5lZFN0YXRlYCBvbiBpdCBkb2VzIG5vdCBjaGFuZ2UgYW55dGhpbmcuXHJcbiAgLSBpZiBpdCBpcyBub3QsIHRoZXJlIGNvdWxkIGJlIHR3byBjYXNlczpcclxuICAgIC0gYFJlZHVjZXJzTWFwT2JqZWN0PFMsIEE+YCBpcyBiZWluZyBwYXNzZWQgaW4uIEluIHRoaXMgY2FzZSwgd2Ugd2lsbCBjYWxsIGBjb21iaW5lUmVkdWNlcnNgIG9uIGl0IGFuZCBgQ29tYmluZWRTdGF0ZTxTPmAgaXMgY29ycmVjdFxyXG4gICAgLSBgUmVkdWNlcjxTLCBBPmAgaXMgYmVpbmcgcGFzc2VkIGluLiBJbiB0aGlzIGNhc2UsIGFjdHVhbGx5IGBDb21iaW5lZFN0YXRlPFM+YCBpcyB3cm9uZyBhbmQgYFNgIHdvdWxkIGJlIGNvcnJlY3QuXHJcbiAgICBBcyB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMgd2l0aG91dCBhZGRpbmcgYW5vdGhlciBnZW5lcmljIHBhcmFtZXRlcixcclxuICAgIHdlIGp1c3QgbWFrZSB0aGUgcHJhZ21hdGljIGFzc3VtcHRpb24gdGhhdCB0aGUgbGF0dGVyIGFsbW9zdCBuZXZlciBoYXBwZW5zLlxyXG4gICovXHJcbiAgcHJlbG9hZGVkU3RhdGU/OiBQcmVsb2FkZWRTdGF0ZTxDb21iaW5lZFN0YXRlPE5vSW5mZXI8Uz4+PlxyXG5cclxuICAvKipcclxuICAgKiBUaGUgc3RvcmUgZW5oYW5jZXJzIHRvIGFwcGx5LiBTZWUgUmVkdXgncyBgY3JlYXRlU3RvcmUoKWAuXHJcbiAgICogQWxsIGVuaGFuY2VycyB3aWxsIGJlIGluY2x1ZGVkIGJlZm9yZSB0aGUgRGV2VG9vbHMgRXh0ZW5zaW9uIGVuaGFuY2VyLlxyXG4gICAqIElmIHlvdSBuZWVkIHRvIGN1c3RvbWl6ZSB0aGUgb3JkZXIgb2YgZW5oYW5jZXJzLCBzdXBwbHkgYSBjYWxsYmFja1xyXG4gICAqIGZ1bmN0aW9uIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBvcmlnaW5hbCBhcnJheSAoaWUsIGBbYXBwbHlNaWRkbGV3YXJlXWApLFxyXG4gICAqIGFuZCBzaG91bGQgcmV0dXJuIGEgbmV3IGFycmF5IChzdWNoIGFzIGBbYXBwbHlNaWRkbGV3YXJlLCBvZmZsaW5lXWApLlxyXG4gICAqIElmIHlvdSBvbmx5IG5lZWQgdG8gYWRkIG1pZGRsZXdhcmUsIHlvdSBjYW4gdXNlIHRoZSBgbWlkZGxld2FyZWAgcGFyYW1ldGVyIGluc3RlYWQuXHJcbiAgICovXHJcbiAgZW5oYW5jZXJzPzogRSB8IENvbmZpZ3VyZUVuaGFuY2Vyc0NhbGxiYWNrPEU+XHJcbn1cclxuXHJcbnR5cGUgTWlkZGxld2FyZXM8Uz4gPSBSZWFkb25seUFycmF5PE1pZGRsZXdhcmU8e30sIFM+PlxyXG5cclxudHlwZSBFbmhhbmNlcnMgPSBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI+XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xraXRTdG9yZTxcclxuICBTID0gYW55LFxyXG4gIEEgZXh0ZW5kcyBBY3Rpb24gPSBBbnlBY3Rpb24sXHJcbiAgTSBleHRlbmRzIE1pZGRsZXdhcmVzPFM+ID0gTWlkZGxld2FyZXM8Uz5cclxuPiBleHRlbmRzIFN0b3JlPFMsIEE+IHtcclxuICAvKipcclxuICAgKiBUaGUgYGRpc3BhdGNoYCBtZXRob2Qgb2YgeW91ciBzdG9yZSwgZW5oYW5jZWQgYnkgYWxsIGl0cyBtaWRkbGV3YXJlcy5cclxuICAgKlxyXG4gICAqIEBpbmhlcml0ZG9jXHJcbiAgICovXHJcbiAgZGlzcGF0Y2g6IEV4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnM8TT4gJiBEaXNwYXRjaDxBPlxyXG59XHJcblxyXG4vKipcclxuICogQSBSZWR1eCBzdG9yZSByZXR1cm5lZCBieSBgY29uZmlndXJlU3RvcmUoKWAuIFN1cHBvcnRzIGRpc3BhdGNoaW5nXHJcbiAqIHNpZGUtZWZmZWN0ZnVsIF90aHVua3NfIGluIGFkZGl0aW9uIHRvIHBsYWluIGFjdGlvbnMuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIEVuaGFuY2VkU3RvcmU8XHJcbiAgUyA9IGFueSxcclxuICBBIGV4dGVuZHMgQWN0aW9uID0gQW55QWN0aW9uLFxyXG4gIE0gZXh0ZW5kcyBNaWRkbGV3YXJlczxTPiA9IE1pZGRsZXdhcmVzPFM+LFxyXG4gIEUgZXh0ZW5kcyBFbmhhbmNlcnMgPSBFbmhhbmNlcnNcclxuPiA9IFRvb2xraXRTdG9yZTxTICYgRXh0cmFjdFN0YXRlRXh0ZW5zaW9uczxFPiwgQSwgTT4gJlxyXG4gIEV4dHJhY3RTdG9yZUV4dGVuc2lvbnM8RT5cclxuXHJcbi8qKlxyXG4gKiBBIGZyaWVuZGx5IGFic3RyYWN0aW9uIG92ZXIgdGhlIHN0YW5kYXJkIFJlZHV4IGBjcmVhdGVTdG9yZSgpYCBmdW5jdGlvbi5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgVGhlIHN0b3JlIGNvbmZpZ3VyYXRpb24uXHJcbiAqIEByZXR1cm5zIEEgY29uZmlndXJlZCBSZWR1eCBzdG9yZS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZVN0b3JlPFxyXG4gIFMgPSBhbnksXHJcbiAgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbixcclxuICBNIGV4dGVuZHMgTWlkZGxld2FyZXM8Uz4gPSBbVGh1bmtNaWRkbGV3YXJlRm9yPFM+XSxcclxuICBFIGV4dGVuZHMgRW5oYW5jZXJzID0gW1N0b3JlRW5oYW5jZXJdXHJcbj4ob3B0aW9uczogQ29uZmlndXJlU3RvcmVPcHRpb25zPFMsIEEsIE0sIEU+KTogRW5oYW5jZWRTdG9yZTxTLCBBLCBNLCBFPiB7XHJcbiAgY29uc3QgY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlID0gY3VycnlHZXREZWZhdWx0TWlkZGxld2FyZTxTPigpXHJcblxyXG4gIGNvbnN0IHtcclxuICAgIHJlZHVjZXIgPSB1bmRlZmluZWQsXHJcbiAgICBtaWRkbGV3YXJlID0gY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlKCksXHJcbiAgICBkZXZUb29scyA9IHRydWUsXHJcbiAgICBwcmVsb2FkZWRTdGF0ZSA9IHVuZGVmaW5lZCxcclxuICAgIGVuaGFuY2VycyA9IHVuZGVmaW5lZCxcclxuICB9ID0gb3B0aW9ucyB8fCB7fVxyXG5cclxuICBsZXQgcm9vdFJlZHVjZXI6IFJlZHVjZXI8UywgQT5cclxuXHJcbiAgaWYgKHR5cGVvZiByZWR1Y2VyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICByb290UmVkdWNlciA9IHJlZHVjZXJcclxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocmVkdWNlcikpIHtcclxuICAgIHJvb3RSZWR1Y2VyID0gY29tYmluZVJlZHVjZXJzKHJlZHVjZXIpIGFzIHVua25vd24gYXMgUmVkdWNlcjxTLCBBPlxyXG4gIH0gZWxzZSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICdcInJlZHVjZXJcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LCBhbmQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGNvbWJpbmVSZWR1Y2VycydcclxuICAgIClcclxuICB9XHJcblxyXG4gIGxldCBmaW5hbE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlXHJcbiAgaWYgKHR5cGVvZiBmaW5hbE1pZGRsZXdhcmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIGZpbmFsTWlkZGxld2FyZSA9IGZpbmFsTWlkZGxld2FyZShjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUpXHJcblxyXG4gICAgaWYgKCFJU19QUk9EVUNUSU9OICYmICFBcnJheS5pc0FycmF5KGZpbmFsTWlkZGxld2FyZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICd3aGVuIHVzaW5nIGEgbWlkZGxld2FyZSBidWlsZGVyIGZ1bmN0aW9uLCBhbiBhcnJheSBvZiBtaWRkbGV3YXJlIG11c3QgYmUgcmV0dXJuZWQnXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKFxyXG4gICAgIUlTX1BST0RVQ1RJT04gJiZcclxuICAgIGZpbmFsTWlkZGxld2FyZS5zb21lKChpdGVtOiBhbnkpID0+IHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKVxyXG4gICkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAnZWFjaCBtaWRkbGV3YXJlIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZVN0b3JlIG11c3QgYmUgYSBmdW5jdGlvbidcclxuICAgIClcclxuICB9XHJcblxyXG4gIGNvbnN0IG1pZGRsZXdhcmVFbmhhbmNlcjogU3RvcmVFbmhhbmNlciA9IGFwcGx5TWlkZGxld2FyZSguLi5maW5hbE1pZGRsZXdhcmUpXHJcblxyXG4gIGxldCBmaW5hbENvbXBvc2UgPSBjb21wb3NlXHJcblxyXG4gIGlmIChkZXZUb29scykge1xyXG4gICAgZmluYWxDb21wb3NlID0gY29tcG9zZVdpdGhEZXZUb29scyh7XHJcbiAgICAgIC8vIEVuYWJsZSBjYXB0dXJlIG9mIHN0YWNrIHRyYWNlcyBmb3IgZGlzcGF0Y2hlZCBSZWR1eCBhY3Rpb25zXHJcbiAgICAgIHRyYWNlOiAhSVNfUFJPRFVDVElPTixcclxuICAgICAgLi4uKHR5cGVvZiBkZXZUb29scyA9PT0gJ29iamVjdCcgJiYgZGV2VG9vbHMpLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNvbnN0IGRlZmF1bHRFbmhhbmNlcnMgPSBuZXcgRW5oYW5jZXJBcnJheShtaWRkbGV3YXJlRW5oYW5jZXIpXHJcbiAgbGV0IHN0b3JlRW5oYW5jZXJzOiBFbmhhbmNlcnMgPSBkZWZhdWx0RW5oYW5jZXJzXHJcblxyXG4gIGlmIChBcnJheS5pc0FycmF5KGVuaGFuY2VycykpIHtcclxuICAgIHN0b3JlRW5oYW5jZXJzID0gW21pZGRsZXdhcmVFbmhhbmNlciwgLi4uZW5oYW5jZXJzXVxyXG4gIH0gZWxzZSBpZiAodHlwZW9mIGVuaGFuY2VycyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgc3RvcmVFbmhhbmNlcnMgPSBlbmhhbmNlcnMoZGVmYXVsdEVuaGFuY2VycylcclxuICB9XHJcblxyXG4gIGNvbnN0IGNvbXBvc2VkRW5oYW5jZXIgPSBmaW5hbENvbXBvc2UoLi4uc3RvcmVFbmhhbmNlcnMpIGFzIFN0b3JlRW5oYW5jZXI8YW55PlxyXG5cclxuICByZXR1cm4gY3JlYXRlU3RvcmUocm9vdFJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBjb21wb3NlZEVuaGFuY2VyKVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgQWN0aW9uQ3JlYXRvciwgU3RvcmVFbmhhbmNlciB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSAncmVkdXgnXHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBEZXZUb29sc0VuaGFuY2VyT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogdGhlIGluc3RhbmNlIG5hbWUgdG8gYmUgc2hvd2VkIG9uIHRoZSBtb25pdG9yIHBhZ2UuIERlZmF1bHQgdmFsdWUgaXMgYGRvY3VtZW50LnRpdGxlYC5cclxuICAgKiBJZiBub3Qgc3BlY2lmaWVkIGFuZCB0aGVyZSdzIG5vIGRvY3VtZW50IHRpdGxlLCBpdCB3aWxsIGNvbnNpc3Qgb2YgYHRhYklkYCBhbmQgYGluc3RhbmNlSWRgLlxyXG4gICAqL1xyXG4gIG5hbWU/OiBzdHJpbmdcclxuICAvKipcclxuICAgKiBhY3Rpb24gY3JlYXRvcnMgZnVuY3Rpb25zIHRvIGJlIGF2YWlsYWJsZSBpbiB0aGUgRGlzcGF0Y2hlci5cclxuICAgKi9cclxuICBhY3Rpb25DcmVhdG9ycz86IEFjdGlvbkNyZWF0b3I8YW55PltdIHwgeyBba2V5OiBzdHJpbmddOiBBY3Rpb25DcmVhdG9yPGFueT4gfVxyXG4gIC8qKlxyXG4gICAqIGlmIG1vcmUgdGhhbiBvbmUgYWN0aW9uIGlzIGRpc3BhdGNoZWQgaW4gdGhlIGluZGljYXRlZCBpbnRlcnZhbCwgYWxsIG5ldyBhY3Rpb25zIHdpbGwgYmUgY29sbGVjdGVkIGFuZCBzZW50IGF0IG9uY2UuXHJcbiAgICogSXQgaXMgdGhlIGpvaW50IGJldHdlZW4gcGVyZm9ybWFuY2UgYW5kIHNwZWVkLiBXaGVuIHNldCB0byBgMGAsIGFsbCBhY3Rpb25zIHdpbGwgYmUgc2VudCBpbnN0YW50bHkuXHJcbiAgICogU2V0IGl0IHRvIGEgaGlnaGVyIHZhbHVlIHdoZW4gZXhwZXJpZW5jaW5nIHBlcmYgaXNzdWVzIChhbHNvIGBtYXhBZ2VgIHRvIGEgbG93ZXIgdmFsdWUpLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgNTAwIG1zLlxyXG4gICAqL1xyXG4gIGxhdGVuY3k/OiBudW1iZXJcclxuICAvKipcclxuICAgKiAoPiAxKSAtIG1heGltdW0gYWxsb3dlZCBhY3Rpb25zIHRvIGJlIHN0b3JlZCBpbiB0aGUgaGlzdG9yeSB0cmVlLiBUaGUgb2xkZXN0IGFjdGlvbnMgYXJlIHJlbW92ZWQgb25jZSBtYXhBZ2UgaXMgcmVhY2hlZC4gSXQncyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCA1MFxyXG4gICAqL1xyXG4gIG1heEFnZT86IG51bWJlclxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbWl6ZXMgaG93IGFjdGlvbnMgYW5kIHN0YXRlIGFyZSBzZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQuIENhbiBiZSBhIGJvb2xlYW4gb3Igb2JqZWN0LiBJZiBnaXZlbiBhIGJvb2xlYW4sIHRoZSBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBpZiB5b3VcclxuICAgKiB3ZXJlIHRvIHBhc3MgYW4gb2JqZWN0IGFuZCBzcGVjaWZ5IGBvcHRpb25zYCBhcyBhIGJvb2xlYW4uIEdpdmluZyBhbiBvYmplY3QgYWxsb3dzIGZpbmUtZ3JhaW5lZCBjdXN0b21pemF0aW9uIHVzaW5nIHRoZSBgcmVwbGFjZXJgIGFuZCBgcmV2aXZlcmBcclxuICAgKiBmdW5jdGlvbnMuXHJcbiAgICovXHJcbiAgc2VyaWFsaXplPzpcclxuICAgIHwgYm9vbGVhblxyXG4gICAgfCB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogLSBgdW5kZWZpbmVkYCAtIHdpbGwgdXNlIHJlZ3VsYXIgYEpTT04uc3RyaW5naWZ5YCB0byBzZW5kIGRhdGEgKGl0J3MgdGhlIGZhc3QgbW9kZSkuXHJcbiAgICAgICAgICogLSBgZmFsc2VgIC0gd2lsbCBoYW5kbGUgYWxzbyBjaXJjdWxhciByZWZlcmVuY2VzLlxyXG4gICAgICAgICAqIC0gYHRydWVgIC0gd2lsbCBoYW5kbGUgYWxzbyBkYXRlLCByZWdleCwgdW5kZWZpbmVkLCBlcnJvciBvYmplY3RzLCBzeW1ib2xzLCBtYXBzLCBzZXRzIGFuZCBmdW5jdGlvbnMuXHJcbiAgICAgICAgICogLSBvYmplY3QsIHdoaWNoIGNvbnRhaW5zIGBkYXRlYCwgYHJlZ2V4YCwgYHVuZGVmaW5lZGAsIGBlcnJvcmAsIGBzeW1ib2xgLCBgbWFwYCwgYHNldGAgYW5kIGBmdW5jdGlvbmAga2V5cy5cclxuICAgICAgICAgKiAgIEZvciBlYWNoIG9mIHRoZW0geW91IGNhbiBpbmRpY2F0ZSBpZiB0byBpbmNsdWRlIChieSBzZXR0aW5nIGFzIGB0cnVlYCkuXHJcbiAgICAgICAgICogICBGb3IgYGZ1bmN0aW9uYCBrZXkgeW91IGNhbiBhbHNvIHNwZWNpZnkgYSBjdXN0b20gZnVuY3Rpb24gd2hpY2ggaGFuZGxlcyBzZXJpYWxpemF0aW9uLlxyXG4gICAgICAgICAqICAgU2VlIFtganNhbmBdKGh0dHBzOi8vZ2l0aHViLmNvbS9rb2xvZG55L2pzYW4pIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3B0aW9ucz86XHJcbiAgICAgICAgICB8IHVuZGVmaW5lZFxyXG4gICAgICAgICAgfCBib29sZWFuXHJcbiAgICAgICAgICB8IHtcclxuICAgICAgICAgICAgICBkYXRlPzogdHJ1ZVxyXG4gICAgICAgICAgICAgIHJlZ2V4PzogdHJ1ZVxyXG4gICAgICAgICAgICAgIHVuZGVmaW5lZD86IHRydWVcclxuICAgICAgICAgICAgICBlcnJvcj86IHRydWVcclxuICAgICAgICAgICAgICBzeW1ib2w/OiB0cnVlXHJcbiAgICAgICAgICAgICAgbWFwPzogdHJ1ZVxyXG4gICAgICAgICAgICAgIHNldD86IHRydWVcclxuICAgICAgICAgICAgICBmdW5jdGlvbj86IHRydWUgfCAoKGZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSkgPT4gc3RyaW5nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogW0pTT04gcmVwbGFjZXIgZnVuY3Rpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0pTT04vc3RyaW5naWZ5I1RoZV9yZXBsYWNlcl9wYXJhbWV0ZXIpIHVzZWQgZm9yIGJvdGggYWN0aW9ucyBhbmQgc3RhdGVzIHN0cmluZ2lmeS5cclxuICAgICAgICAgKiBJbiBhZGRpdGlvbiwgeW91IGNhbiBzcGVjaWZ5IGEgZGF0YSB0eXBlIGJ5IGFkZGluZyBhIFtgX19zZXJpYWxpemVkVHlwZV9fYF0oaHR0cHM6Ly9naXRodWIuY29tL3phbG1veGlzdXMvcmVtb3RlZGV2LXNlcmlhbGl6ZS9ibG9iL21hc3Rlci9oZWxwZXJzL2luZGV4LmpzI0w0KVxyXG4gICAgICAgICAqIGtleS4gU28geW91IGNhbiBkZXNlcmlhbGl6ZSBpdCBiYWNrIHdoaWxlIGltcG9ydGluZyBvciBwZXJzaXN0aW5nIGRhdGEuXHJcbiAgICAgICAgICogTW9yZW92ZXIsIGl0IHdpbGwgYWxzbyBbc2hvdyBhIG5pY2UgcHJldmlldyBzaG93aW5nIHRoZSBwcm92aWRlZCBjdXN0b20gdHlwZV0oaHR0cHM6Ly9jbG91ZC5naXRodWJ1c2VyY29udGVudC5jb20vYXNzZXRzLzc5NTc4NTkvMjE4MTQzMzAvYTE3ZDU1NmEtZDc2MS0xMWU2LTg1ZWYtMTU5ZGQxMmYzNmM1LnBuZyk6XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVwbGFjZXI/OiAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiBhbnlcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBbSlNPTiBgcmV2aXZlcmAgZnVuY3Rpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0pTT04vcGFyc2UjVXNpbmdfdGhlX3Jldml2ZXJfcGFyYW1ldGVyKVxyXG4gICAgICAgICAqIHVzZWQgZm9yIHBhcnNpbmcgdGhlIGltcG9ydGVkIGFjdGlvbnMgYW5kIHN0YXRlcy4gU2VlIFtgcmVtb3RlZGV2LXNlcmlhbGl6ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS96YWxtb3hpc3VzL3JlbW90ZWRldi1zZXJpYWxpemUvYmxvYi9tYXN0ZXIvaW1tdXRhYmxlL3NlcmlhbGl6ZS5qcyNMOC1MNDEpXHJcbiAgICAgICAgICogYXMgYW4gZXhhbXBsZSBvbiBob3cgdG8gc2VyaWFsaXplIHNwZWNpYWwgZGF0YSB0eXBlcyBhbmQgZ2V0IHRoZW0gYmFjay5cclxuICAgICAgICAgKi9cclxuICAgICAgICByZXZpdmVyPzogKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gYW55XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXV0b21hdGljYWxseSBzZXJpYWxpemUvZGVzZXJpYWxpemUgaW1tdXRhYmxlanMgdmlhIFtyZW1vdGVkZXYtc2VyaWFsaXplXShodHRwczovL2dpdGh1Yi5jb20vemFsbW94aXN1cy9yZW1vdGVkZXYtc2VyaWFsaXplKS5cclxuICAgICAgICAgKiBKdXN0IHBhc3MgdGhlIEltbXV0YWJsZSBsaWJyYXJ5LiBJdCB3aWxsIHN1cHBvcnQgYWxsIEltbXV0YWJsZUpTIHN0cnVjdHVyZXMuIFlvdSBjYW4gZXZlbiBleHBvcnQgdGhlbSBpbnRvIGEgZmlsZSBhbmQgZ2V0IHRoZW0gYmFjay5cclxuICAgICAgICAgKiBUaGUgb25seSBleGNlcHRpb24gaXMgYFJlY29yZGAgY2xhc3MsIGZvciB3aGljaCB5b3Ugc2hvdWxkIHBhc3MgdGhpcyBpbiBhZGRpdGlvbiB0aGUgcmVmZXJlbmNlcyB0byB5b3VyIGNsYXNzZXMgaW4gYHJlZnNgLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGltbXV0YWJsZT86IGFueVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEltbXV0YWJsZUpTIGBSZWNvcmRgIGNsYXNzZXMgdXNlZCB0byBtYWtlIHBvc3NpYmxlIHJlc3RvcmUgaXRzIGluc3RhbmNlcyBiYWNrIHdoZW4gaW1wb3J0aW5nLCBwZXJzaXN0aW5nLi4uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVmcz86IGFueVxyXG4gICAgICB9XHJcbiAgLyoqXHJcbiAgICogZnVuY3Rpb24gd2hpY2ggdGFrZXMgYGFjdGlvbmAgb2JqZWN0IGFuZCBpZCBudW1iZXIgYXMgYXJndW1lbnRzLCBhbmQgc2hvdWxkIHJldHVybiBgYWN0aW9uYCBvYmplY3QgYmFjay5cclxuICAgKi9cclxuICBhY3Rpb25TYW5pdGl6ZXI/OiA8QSBleHRlbmRzIEFjdGlvbj4oYWN0aW9uOiBBLCBpZDogbnVtYmVyKSA9PiBBXHJcbiAgLyoqXHJcbiAgICogZnVuY3Rpb24gd2hpY2ggdGFrZXMgYHN0YXRlYCBvYmplY3QgYW5kIGluZGV4IGFzIGFyZ3VtZW50cywgYW5kIHNob3VsZCByZXR1cm4gYHN0YXRlYCBvYmplY3QgYmFjay5cclxuICAgKi9cclxuICBzdGF0ZVNhbml0aXplcj86IDxTPihzdGF0ZTogUywgaW5kZXg6IG51bWJlcikgPT4gU1xyXG4gIC8qKlxyXG4gICAqICpzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhcyByZWdleCogLSBhY3Rpb25zIHR5cGVzIHRvIGJlIGhpZGRlbiAvIHNob3duIGluIHRoZSBtb25pdG9ycyAod2hpbGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VycykuXHJcbiAgICogSWYgYGFjdGlvbnNXaGl0ZWxpc3RgIHNwZWNpZmllZCwgYGFjdGlvbnNCbGFja2xpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFjdGlvbnNEZW55bGlzdCBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIGFjdGlvbnNCbGFja2xpc3Q/OiBzdHJpbmcgfCBzdHJpbmdbXVxyXG4gIC8qKlxyXG4gICAqICpzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhcyByZWdleCogLSBhY3Rpb25zIHR5cGVzIHRvIGJlIGhpZGRlbiAvIHNob3duIGluIHRoZSBtb25pdG9ycyAod2hpbGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VycykuXHJcbiAgICogSWYgYGFjdGlvbnNXaGl0ZWxpc3RgIHNwZWNpZmllZCwgYGFjdGlvbnNCbGFja2xpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFjdGlvbnNBbGxvd2xpc3QgaW5zdGVhZC5cclxuICAgKi9cclxuICBhY3Rpb25zV2hpdGVsaXN0Pzogc3RyaW5nIHwgc3RyaW5nW11cclxuICAvKipcclxuICAgKiAqc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgYXMgcmVnZXgqIC0gYWN0aW9ucyB0eXBlcyB0byBiZSBoaWRkZW4gLyBzaG93biBpbiB0aGUgbW9uaXRvcnMgKHdoaWxlIHBhc3NlZCB0byB0aGUgcmVkdWNlcnMpLlxyXG4gICAqIElmIGBhY3Rpb25zQWxsb3dsaXN0YCBzcGVjaWZpZWQsIGBhY3Rpb25zRGVueWxpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICovXHJcbiAgYWN0aW9uc0RlbnlsaXN0Pzogc3RyaW5nIHwgc3RyaW5nW11cclxuICAvKipcclxuICAgKiAqc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgYXMgcmVnZXgqIC0gYWN0aW9ucyB0eXBlcyB0byBiZSBoaWRkZW4gLyBzaG93biBpbiB0aGUgbW9uaXRvcnMgKHdoaWxlIHBhc3NlZCB0byB0aGUgcmVkdWNlcnMpLlxyXG4gICAqIElmIGBhY3Rpb25zQWxsb3dsaXN0YCBzcGVjaWZpZWQsIGBhY3Rpb25zRGVueWxpc3RgIGlzIGlnbm9yZWQuXHJcbiAgICovXHJcbiAgYWN0aW9uc0FsbG93bGlzdD86IHN0cmluZyB8IHN0cmluZ1tdXHJcbiAgLyoqXHJcbiAgICogY2FsbGVkIGZvciBldmVyeSBhY3Rpb24gYmVmb3JlIHNlbmRpbmcsIHRha2VzIGBzdGF0ZWAgYW5kIGBhY3Rpb25gIG9iamVjdCwgYW5kIHJldHVybnMgYHRydWVgIGluIGNhc2UgaXQgYWxsb3dzIHNlbmRpbmcgdGhlIGN1cnJlbnQgZGF0YSB0byB0aGUgbW9uaXRvci5cclxuICAgKiBVc2UgaXQgYXMgYSBtb3JlIGFkdmFuY2VkIHZlcnNpb24gb2YgYGFjdGlvbnNEZW55bGlzdGAvYGFjdGlvbnNBbGxvd2xpc3RgIHBhcmFtZXRlcnMuXHJcbiAgICovXHJcbiAgcHJlZGljYXRlPzogPFMsIEEgZXh0ZW5kcyBBY3Rpb24+KHN0YXRlOiBTLCBhY3Rpb246IEEpID0+IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzcGVjaWZpZWQgYXMgYGZhbHNlYCwgaXQgd2lsbCBub3QgcmVjb3JkIHRoZSBjaGFuZ2VzIHRpbGwgY2xpY2tpbmcgb24gYFN0YXJ0IHJlY29yZGluZ2AgYnV0dG9uLlxyXG4gICAqIEF2YWlsYWJsZSBvbmx5IGZvciBSZWR1eCBlbmhhbmNlciwgZm9yIG90aGVycyB1c2UgYGF1dG9QYXVzZWAuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICovXHJcbiAgc2hvdWxkUmVjb3JkQ2hhbmdlcz86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzcGVjaWZpZWQsIHdoZW5ldmVyIGNsaWNraW5nIG9uIGBQYXVzZSByZWNvcmRpbmdgIGJ1dHRvbiBhbmQgdGhlcmUgYXJlIGFjdGlvbnMgaW4gdGhlIGhpc3RvcnkgbG9nLCB3aWxsIGFkZCB0aGlzIGFjdGlvbiB0eXBlLlxyXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHdpbGwgY29tbWl0IHdoZW4gcGF1c2VkLiBBdmFpbGFibGUgb25seSBmb3IgUmVkdXggZW5oYW5jZXIuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBcIkBAUEFVU0VEXCJcIlxyXG4gICAqL1xyXG4gIHBhdXNlQWN0aW9uVHlwZT86IHN0cmluZ1xyXG4gIC8qKlxyXG4gICAqIGF1dG8gcGF1c2VzIHdoZW4gdGhlIGV4dGVuc2lvbuKAmXMgd2luZG93IGlzIG5vdCBvcGVuZWQsIGFuZCBzbyBoYXMgemVybyBpbXBhY3Qgb24geW91ciBhcHAgd2hlbiBub3QgaW4gdXNlLlxyXG4gICAqIE5vdCBhdmFpbGFibGUgZm9yIFJlZHV4IGVuaGFuY2VyIChhcyBpdCBhbHJlYWR5IGRvZXMgaXQgYnV0IHN0b3JpbmcgdGhlIGRhdGEgdG8gYmUgc2VudCkuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIGF1dG9QYXVzZT86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzcGVjaWZpZWQgYXMgYHRydWVgLCBpdCB3aWxsIG5vdCBhbGxvdyBhbnkgbm9uLW1vbml0b3IgYWN0aW9ucyB0byBiZSBkaXNwYXRjaGVkIHRpbGwgY2xpY2tpbmcgb24gYFVubG9jayBjaGFuZ2VzYCBidXR0b24uXHJcbiAgICogQXZhaWxhYmxlIG9ubHkgZm9yIFJlZHV4IGVuaGFuY2VyLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBzaG91bGRTdGFydExvY2tlZD86IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBpZiBzZXQgdG8gYGZhbHNlYCwgd2lsbCBub3QgcmVjb21wdXRlIHRoZSBzdGF0ZXMgb24gaG90IHJlbG9hZGluZyAob3Igb24gcmVwbGFjaW5nIHRoZSByZWR1Y2VycykuIEF2YWlsYWJsZSBvbmx5IGZvciBSZWR1eCBlbmhhbmNlci5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IHRydWVcclxuICAgKi9cclxuICBzaG91bGRIb3RSZWxvYWQ/OiBib29sZWFuXHJcbiAgLyoqXHJcbiAgICogaWYgc3BlY2lmaWVkIGFzIGB0cnVlYCwgd2hlbmV2ZXIgdGhlcmUncyBhbiBleGNlcHRpb24gaW4gcmVkdWNlcnMsIHRoZSBtb25pdG9ycyB3aWxsIHNob3cgdGhlIGVycm9yIG1lc3NhZ2UsIGFuZCBuZXh0IGFjdGlvbnMgd2lsbCBub3QgYmUgZGlzcGF0Y2hlZC5cclxuICAgKlxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgc2hvdWxkQ2F0Y2hFcnJvcnM/OiBib29sZWFuXHJcbiAgLyoqXHJcbiAgICogSWYgeW91IHdhbnQgdG8gcmVzdHJpY3QgdGhlIGV4dGVuc2lvbiwgc3BlY2lmeSB0aGUgZmVhdHVyZXMgeW91IGFsbG93LlxyXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIGFsbCBvZiB0aGUgZmVhdHVyZXMgYXJlIGVuYWJsZWQuIFdoZW4gc2V0IGFzIGFuIG9iamVjdCwgb25seSB0aG9zZSBpbmNsdWRlZCBhcyBgdHJ1ZWAgd2lsbCBiZSBhbGxvd2VkLlxyXG4gICAqIE5vdGUgdGhhdCBleGNlcHQgYHRydWVgL2BmYWxzZWAsIGBpbXBvcnRgIGFuZCBgZXhwb3J0YCBjYW4gYmUgc2V0IGFzIGBjdXN0b21gICh3aGljaCBpcyBieSBkZWZhdWx0IGZvciBSZWR1eCBlbmhhbmNlciksIG1lYW5pbmcgdGhhdCB0aGUgaW1wb3J0aW5nL2V4cG9ydGluZyBvY2N1cnMgb24gdGhlIGNsaWVudCBzaWRlLlxyXG4gICAqIE90aGVyd2lzZSwgeW91J2xsIGdldC9zZXQgdGhlIGRhdGEgcmlnaHQgZnJvbSB0aGUgbW9uaXRvciBwYXJ0LlxyXG4gICAqL1xyXG4gIGZlYXR1cmVzPzoge1xyXG4gICAgLyoqXHJcbiAgICAgKiBzdGFydC9wYXVzZSByZWNvcmRpbmcgb2YgZGlzcGF0Y2hlZCBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHBhdXNlPzogYm9vbGVhblxyXG4gICAgLyoqXHJcbiAgICAgKiBsb2NrL3VubG9jayBkaXNwYXRjaGluZyBhY3Rpb25zIGFuZCBzaWRlIGVmZmVjdHNcclxuICAgICAqL1xyXG4gICAgbG9jaz86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogcGVyc2lzdCBzdGF0ZXMgb24gcGFnZSByZWxvYWRpbmdcclxuICAgICAqL1xyXG4gICAgcGVyc2lzdD86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogZXhwb3J0IGhpc3Rvcnkgb2YgYWN0aW9ucyBpbiBhIGZpbGVcclxuICAgICAqL1xyXG4gICAgZXhwb3J0PzogYm9vbGVhbiB8ICdjdXN0b20nXHJcbiAgICAvKipcclxuICAgICAqIGltcG9ydCBoaXN0b3J5IG9mIGFjdGlvbnMgZnJvbSBhIGZpbGVcclxuICAgICAqL1xyXG4gICAgaW1wb3J0PzogYm9vbGVhbiB8ICdjdXN0b20nXHJcbiAgICAvKipcclxuICAgICAqIGp1bXAgYmFjayBhbmQgZm9ydGggKHRpbWUgdHJhdmVsbGluZylcclxuICAgICAqL1xyXG4gICAganVtcD86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogc2tpcCAoY2FuY2VsKSBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHNraXA/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIGRyYWcgYW5kIGRyb3AgYWN0aW9ucyBpbiB0aGUgaGlzdG9yeSBsaXN0XHJcbiAgICAgKi9cclxuICAgIHJlb3JkZXI/OiBib29sZWFuXHJcbiAgICAvKipcclxuICAgICAqIGRpc3BhdGNoIGN1c3RvbSBhY3Rpb25zIG9yIGFjdGlvbiBjcmVhdG9yc1xyXG4gICAgICovXHJcbiAgICBkaXNwYXRjaD86IGJvb2xlYW5cclxuICAgIC8qKlxyXG4gICAgICogZ2VuZXJhdGUgdGVzdHMgZm9yIHRoZSBzZWxlY3RlZCBhY3Rpb25zXHJcbiAgICAgKi9cclxuICAgIHRlc3Q/OiBib29sZWFuXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldCB0byB0cnVlIG9yIGEgc3RhY2t0cmFjZS1yZXR1cm5pbmcgZnVuY3Rpb24gdG8gcmVjb3JkIGNhbGwgc3RhY2sgdHJhY2VzIGZvciBkaXNwYXRjaGVkIGFjdGlvbnMuXHJcbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuXHJcbiAgICovXHJcbiAgdHJhY2U/OiBib29sZWFuIHwgKDxBIGV4dGVuZHMgQWN0aW9uPihhY3Rpb246IEEpID0+IHN0cmluZylcclxuICAvKipcclxuICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3RhY2sgdHJhY2UgZW50cmllcyB0byByZWNvcmQgcGVyIGFjdGlvbi4gRGVmYXVsdHMgdG8gMTAuXHJcbiAgICovXHJcbiAgdHJhY2VMaW1pdD86IG51bWJlclxyXG59XHJcblxyXG50eXBlIENvbXBvc2UgPSB0eXBlb2YgY29tcG9zZVxyXG5cclxuaW50ZXJmYWNlIENvbXBvc2VXaXRoRGV2VG9vbHMge1xyXG4gIChvcHRpb25zOiBEZXZUb29sc0VuaGFuY2VyT3B0aW9ucyk6IENvbXBvc2VcclxuICA8U3RvcmVFeHQ+KC4uLmZ1bmNzOiBTdG9yZUVuaGFuY2VyPFN0b3JlRXh0PltdKTogU3RvcmVFbmhhbmNlcjxTdG9yZUV4dD5cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjb21wb3NlV2l0aERldlRvb2xzOiBDb21wb3NlV2l0aERldlRvb2xzID1cclxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICh3aW5kb3cgYXMgYW55KS5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX19cclxuICAgID8gKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfX1xyXG4gICAgOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHJldHVybiBjb21wb3NlXHJcbiAgICAgICAgcmV0dXJuIGNvbXBvc2UuYXBwbHkobnVsbCwgYXJndW1lbnRzIGFzIGFueSBhcyBGdW5jdGlvbltdKVxyXG4gICAgICB9XHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGRldlRvb2xzRW5oYW5jZXI6IHtcclxuICAob3B0aW9uczogRGV2VG9vbHNFbmhhbmNlck9wdGlvbnMpOiBTdG9yZUVuaGFuY2VyPGFueT5cclxufSA9XHJcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX19cclxuICAgID8gKHdpbmRvdyBhcyBhbnkpLl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX19cclxuICAgIDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobm9vcCkge1xyXG4gICAgICAgICAgcmV0dXJuIG5vb3BcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuIiwgIi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhc3NlZCB2YWx1ZSBpcyBcInBsYWluXCIgb2JqZWN0LCBpLmUuIGFuIG9iamVjdCB3aG9zZVxyXG4gKiBwcm90b3R5cGUgaXMgdGhlIHJvb3QgYE9iamVjdC5wcm90b3R5cGVgLiBUaGlzIGluY2x1ZGVzIG9iamVjdHMgY3JlYXRlZFxyXG4gKiB1c2luZyBvYmplY3QgbGl0ZXJhbHMsIGJ1dCBub3QgZm9yIGluc3RhbmNlIGZvciBjbGFzcyBpbnN0YW5jZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cclxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGFyZ3VtZW50IGFwcGVhcnMgdG8gYmUgYSBwbGFpbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBvYmplY3Qge1xyXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgbGV0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxyXG4gIGlmIChwcm90byA9PT0gbnVsbCkgcmV0dXJuIHRydWVcclxuXHJcbiAgbGV0IGJhc2VQcm90byA9IHByb3RvXHJcbiAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlUHJvdG8pICE9PSBudWxsKSB7XHJcbiAgICBiYXNlUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZVByb3RvKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHByb3RvID09PSBiYXNlUHJvdG9cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlLCBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUgeyBUaHVua01pZGRsZXdhcmUgfSBmcm9tICdyZWR1eC10aHVuaydcclxuaW1wb3J0IHRodW5rTWlkZGxld2FyZSBmcm9tICdyZWR1eC10aHVuaydcclxuaW1wb3J0IHR5cGUgeyBBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgfSBmcm9tICcuL2FjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG5pbXBvcnQgeyBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSB9IGZyb20gJy4vYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUnXHJcbmltcG9ydCB0eXBlIHsgSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyB9IGZyb20gJy4vaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlJ1xyXG4vKiBQUk9EX1NUQVJUX1JFTU9WRV9VTUQgKi9cclxuaW1wb3J0IHsgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlIH0gZnJvbSAnLi9pbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbi8qIFBST0RfU1RPUF9SRU1PVkVfVU1EICovXHJcblxyXG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgfSBmcm9tICcuL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuaW1wb3J0IHsgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlIH0gZnJvbSAnLi9zZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUnXHJcbmltcG9ydCB0eXBlIHsgRXhjbHVkZUZyb21UdXBsZSB9IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBNaWRkbGV3YXJlQXJyYXkgfSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuZnVuY3Rpb24gaXNCb29sZWFuKHg6IGFueSk6IHggaXMgYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnYm9vbGVhbidcclxufVxyXG5cclxuaW50ZXJmYWNlIFRodW5rT3B0aW9uczxFID0gYW55PiB7XHJcbiAgZXh0cmFBcmd1bWVudDogRVxyXG59XHJcblxyXG5pbnRlcmZhY2UgR2V0RGVmYXVsdE1pZGRsZXdhcmVPcHRpb25zIHtcclxuICB0aHVuaz86IGJvb2xlYW4gfCBUaHVua09wdGlvbnNcclxuICBpbW11dGFibGVDaGVjaz86IGJvb2xlYW4gfCBJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zXHJcbiAgc2VyaWFsaXphYmxlQ2hlY2s/OiBib29sZWFuIHwgU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9uc1xyXG4gIGFjdGlvbkNyZWF0b3JDaGVjaz86IGJvb2xlYW4gfCBBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnNcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVGh1bmtNaWRkbGV3YXJlRm9yPFxyXG4gIFMsXHJcbiAgTyBleHRlbmRzIEdldERlZmF1bHRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcbj4gPSBPIGV4dGVuZHMge1xyXG4gIHRodW5rOiBmYWxzZVxyXG59XHJcbiAgPyBuZXZlclxyXG4gIDogTyBleHRlbmRzIHsgdGh1bms6IHsgZXh0cmFBcmd1bWVudDogaW5mZXIgRSB9IH1cclxuICA/IFRodW5rTWlkZGxld2FyZTxTLCBBbnlBY3Rpb24sIEU+XHJcbiAgOiBUaHVua01pZGRsZXdhcmU8UywgQW55QWN0aW9uPlxyXG5cclxuZXhwb3J0IHR5cGUgQ3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlPFMgPSBhbnk+ID0gPFxyXG4gIE8gZXh0ZW5kcyBQYXJ0aWFsPEdldERlZmF1bHRNaWRkbGV3YXJlT3B0aW9ucz4gPSB7XHJcbiAgICB0aHVuazogdHJ1ZVxyXG4gICAgaW1tdXRhYmxlQ2hlY2s6IHRydWVcclxuICAgIHNlcmlhbGl6YWJsZUNoZWNrOiB0cnVlXHJcbiAgICBhY3Rpb25DcmVhdG9yQ2hlY2s6IHRydWVcclxuICB9XHJcbj4oXHJcbiAgb3B0aW9ucz86IE9cclxuKSA9PiBNaWRkbGV3YXJlQXJyYXk8RXhjbHVkZUZyb21UdXBsZTxbVGh1bmtNaWRkbGV3YXJlRm9yPFMsIE8+XSwgbmV2ZXI+PlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmU8XHJcbiAgUyA9IGFueVxyXG4+KCk6IEN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZTxTPiB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gZ2V0RGVmYXVsdE1pZGRsZXdhcmUob3B0aW9ucylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGFueSBhcnJheSBjb250YWluaW5nIHRoZSBkZWZhdWx0IG1pZGRsZXdhcmUgaW5zdGFsbGVkIGJ5XHJcbiAqIGBjb25maWd1cmVTdG9yZSgpYC4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGNvbmZpZ3VyZSB5b3VyIHN0b3JlIHdpdGggYSBjdXN0b21cclxuICogYG1pZGRsZXdhcmVgIGFycmF5IGJ1dCBzdGlsbCBrZWVwIHRoZSBkZWZhdWx0IHNldC5cclxuICpcclxuICogQHJldHVybiBUaGUgZGVmYXVsdCBtaWRkbGV3YXJlIHVzZWQgYnkgYGNvbmZpZ3VyZVN0b3JlKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqXHJcbiAqIEBkZXByZWNhdGVkIFByZWZlciB0byB1c2UgdGhlIGNhbGxiYWNrIG5vdGF0aW9uIGZvciB0aGUgYG1pZGRsZXdhcmVgIG9wdGlvbiBpbiBgY29uZmlndXJlU3RvcmVgXHJcbiAqIHRvIGFjY2VzcyBhIHByZS10eXBlZCBgZ2V0RGVmYXVsdE1pZGRsZXdhcmVgIGluc3RlYWQuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE1pZGRsZXdhcmU8XHJcbiAgUyA9IGFueSxcclxuICBPIGV4dGVuZHMgUGFydGlhbDxHZXREZWZhdWx0TWlkZGxld2FyZU9wdGlvbnM+ID0ge1xyXG4gICAgdGh1bms6IHRydWVcclxuICAgIGltbXV0YWJsZUNoZWNrOiB0cnVlXHJcbiAgICBzZXJpYWxpemFibGVDaGVjazogdHJ1ZVxyXG4gICAgYWN0aW9uQ3JlYXRvckNoZWNrOiB0cnVlXHJcbiAgfVxyXG4+KFxyXG4gIG9wdGlvbnM6IE8gPSB7fSBhcyBPXHJcbik6IE1pZGRsZXdhcmVBcnJheTxFeGNsdWRlRnJvbVR1cGxlPFtUaHVua01pZGRsZXdhcmVGb3I8UywgTz5dLCBuZXZlcj4+IHtcclxuICBjb25zdCB7XHJcbiAgICB0aHVuayA9IHRydWUsXHJcbiAgICBpbW11dGFibGVDaGVjayA9IHRydWUsXHJcbiAgICBzZXJpYWxpemFibGVDaGVjayA9IHRydWUsXHJcbiAgICBhY3Rpb25DcmVhdG9yQ2hlY2sgPSB0cnVlLFxyXG4gIH0gPSBvcHRpb25zXHJcblxyXG4gIGxldCBtaWRkbGV3YXJlQXJyYXkgPSBuZXcgTWlkZGxld2FyZUFycmF5PE1pZGRsZXdhcmVbXT4oKVxyXG5cclxuICBpZiAodGh1bmspIHtcclxuICAgIGlmIChpc0Jvb2xlYW4odGh1bmspKSB7XHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHRodW5rTWlkZGxld2FyZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKFxyXG4gICAgICAgIHRodW5rTWlkZGxld2FyZS53aXRoRXh0cmFBcmd1bWVudCh0aHVuay5leHRyYUFyZ3VtZW50KVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgaWYgKGltbXV0YWJsZUNoZWNrKSB7XHJcbiAgICAgIC8qIFBST0RfU1RBUlRfUkVNT1ZFX1VNRCAqL1xyXG4gICAgICBsZXQgaW1tdXRhYmxlT3B0aW9uczogSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcblxyXG4gICAgICBpZiAoIWlzQm9vbGVhbihpbW11dGFibGVDaGVjaykpIHtcclxuICAgICAgICBpbW11dGFibGVPcHRpb25zID0gaW1tdXRhYmxlQ2hlY2tcclxuICAgICAgfVxyXG5cclxuICAgICAgbWlkZGxld2FyZUFycmF5LnVuc2hpZnQoXHJcbiAgICAgICAgY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKGltbXV0YWJsZU9wdGlvbnMpXHJcbiAgICAgIClcclxuICAgICAgLyogUFJPRF9TVE9QX1JFTU9WRV9VTUQgKi9cclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VyaWFsaXphYmxlQ2hlY2spIHtcclxuICAgICAgbGV0IHNlcmlhbGl6YWJsZU9wdGlvbnM6IFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgPSB7fVxyXG5cclxuICAgICAgaWYgKCFpc0Jvb2xlYW4oc2VyaWFsaXphYmxlQ2hlY2spKSB7XHJcbiAgICAgICAgc2VyaWFsaXphYmxlT3B0aW9ucyA9IHNlcmlhbGl6YWJsZUNoZWNrXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKFxyXG4gICAgICAgIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShzZXJpYWxpemFibGVPcHRpb25zKVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBpZiAoYWN0aW9uQ3JlYXRvckNoZWNrKSB7XHJcbiAgICAgIGxldCBhY3Rpb25DcmVhdG9yT3B0aW9uczogQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zID0ge31cclxuXHJcbiAgICAgIGlmICghaXNCb29sZWFuKGFjdGlvbkNyZWF0b3JDaGVjaykpIHtcclxuICAgICAgICBhY3Rpb25DcmVhdG9yT3B0aW9ucyA9IGFjdGlvbkNyZWF0b3JDaGVja1xyXG4gICAgICB9XHJcblxyXG4gICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChcclxuICAgICAgICBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZShhY3Rpb25DcmVhdG9yT3B0aW9ucylcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG1pZGRsZXdhcmVBcnJheSBhcyBhbnlcclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlLCBTdG9yZUVuaGFuY2VyIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB0eXBlIHsgRW5oYW5jZXJBcnJheSwgTWlkZGxld2FyZUFycmF5IH0gZnJvbSAnLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiByZXR1cm4gVHJ1ZSBpZiBUIGlzIGBhbnlgLCBvdGhlcndpc2UgcmV0dXJuIEZhbHNlXHJcbiAqIHRha2VuIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pvb25ob2Noby90c2RlZlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElzQW55PFQsIFRydWUsIEZhbHNlID0gbmV2ZXI+ID1cclxuICAvLyB0ZXN0IGlmIHdlIGFyZSBnb2luZyB0aGUgbGVmdCBBTkQgcmlnaHQgcGF0aCBpbiB0aGUgY29uZGl0aW9uXHJcbiAgdHJ1ZSB8IGZhbHNlIGV4dGVuZHMgKFQgZXh0ZW5kcyBuZXZlciA/IHRydWUgOiBmYWxzZSkgPyBUcnVlIDogRmFsc2VcclxuXHJcbi8qKlxyXG4gKiByZXR1cm4gVHJ1ZSBpZiBUIGlzIGB1bmtub3duYCwgb3RoZXJ3aXNlIHJldHVybiBGYWxzZVxyXG4gKiB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qb29uaG9jaG8vdHNkZWZcclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJc1Vua25vd248VCwgVHJ1ZSwgRmFsc2UgPSBuZXZlcj4gPSB1bmtub3duIGV4dGVuZHMgVFxyXG4gID8gSXNBbnk8VCwgRmFsc2UsIFRydWU+XHJcbiAgOiBGYWxzZVxyXG5cclxuZXhwb3J0IHR5cGUgRmFsbGJhY2tJZlVua25vd248VCwgRmFsbGJhY2s+ID0gSXNVbmtub3duPFQsIEZhbGxiYWNrLCBUPlxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgSWZNYXliZVVuZGVmaW5lZDxQLCBUcnVlLCBGYWxzZT4gPSBbdW5kZWZpbmVkXSBleHRlbmRzIFtQXVxyXG4gID8gVHJ1ZVxyXG4gIDogRmFsc2VcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElmVm9pZDxQLCBUcnVlLCBGYWxzZT4gPSBbdm9pZF0gZXh0ZW5kcyBbUF0gPyBUcnVlIDogRmFsc2VcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIElzRW1wdHlPYmo8VCwgVHJ1ZSwgRmFsc2UgPSBuZXZlcj4gPSBUIGV4dGVuZHMgYW55XHJcbiAgPyBrZXlvZiBUIGV4dGVuZHMgbmV2ZXJcclxuICAgID8gSXNVbmtub3duPFQsIEZhbHNlLCBJZk1heWJlVW5kZWZpbmVkPFQsIEZhbHNlLCBJZlZvaWQ8VCwgRmFsc2UsIFRydWU+Pj5cclxuICAgIDogRmFsc2VcclxuICA6IG5ldmVyXHJcblxyXG4vKipcclxuICogcmV0dXJucyBUcnVlIGlmIFRTIHZlcnNpb24gaXMgYWJvdmUgMy41LCBGYWxzZSBpZiBiZWxvdy5cclxuICogdXNlcyBmZWF0dXJlIGRldGVjdGlvbiB0byBkZXRlY3QgVFMgdmVyc2lvbiA+PSAzLjVcclxuICogKiB2ZXJzaW9ucyBiZWxvdyAzLjUgd2lsbCByZXR1cm4gYHt9YCBmb3IgdW5yZXNvbHZhYmxlIGludGVyZmVyZW5jZVxyXG4gKiAqIHZlcnNpb25zIGFib3ZlIHdpbGwgcmV0dXJuIGB1bmtub3duYFxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIEF0TGVhc3RUUzM1PFRydWUsIEZhbHNlPiA9IFtUcnVlLCBGYWxzZV1bSXNVbmtub3duPFxyXG4gIFJldHVyblR5cGU8PFQ+KCkgPT4gVD4sXHJcbiAgMCxcclxuICAxXHJcbj5dXHJcblxyXG4vKipcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBJc1Vua25vd25Pck5vbkluZmVycmFibGU8VCwgVHJ1ZSwgRmFsc2U+ID0gQXRMZWFzdFRTMzU8XHJcbiAgSXNVbmtub3duPFQsIFRydWUsIEZhbHNlPixcclxuICBJc0VtcHR5T2JqPFQsIFRydWUsIElzVW5rbm93bjxULCBUcnVlLCBGYWxzZT4+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IGEgVW5pb24gdHlwZSBgKEF8QilgIHRvIGFuIGludGVyc2VjdGlvbiB0eXBlIGAoQSZCKWBcclxuICovXHJcbmV4cG9ydCB0eXBlIFVuaW9uVG9JbnRlcnNlY3Rpb248VT4gPSAoXHJcbiAgVSBleHRlbmRzIGFueSA/IChrOiBVKSA9PiB2b2lkIDogbmV2ZXJcclxuKSBleHRlbmRzIChrOiBpbmZlciBJKSA9PiB2b2lkXHJcbiAgPyBJXHJcbiAgOiBuZXZlclxyXG5cclxuLy8gQXBwZWFycyB0byBoYXZlIGEgY29udmVuaWVudCBzaWRlIGVmZmVjdCBvZiBpZ25vcmluZyBgbmV2ZXJgIGV2ZW4gaWYgdGhhdCdzIG5vdCB3aGF0IHlvdSBzcGVjaWZpZWRcclxuZXhwb3J0IHR5cGUgRXhjbHVkZUZyb21UdXBsZTxULCBFLCBBY2MgZXh0ZW5kcyB1bmtub3duW10gPSBbXT4gPSBUIGV4dGVuZHMgW1xyXG4gIGluZmVyIEhlYWQsXHJcbiAgLi4uaW5mZXIgVGFpbFxyXG5dXHJcbiAgPyBFeGNsdWRlRnJvbVR1cGxlPFRhaWwsIEUsIFsuLi5BY2MsIC4uLihbSGVhZF0gZXh0ZW5kcyBbRV0gPyBbXSA6IFtIZWFkXSldPlxyXG4gIDogQWNjXHJcblxyXG50eXBlIEV4dHJhY3REaXNwYXRjaEZyb21NaWRkbGV3YXJlVHVwbGU8XHJcbiAgTWlkZGxld2FyZVR1cGxlIGV4dGVuZHMgYW55W10sXHJcbiAgQWNjIGV4dGVuZHMge31cclxuPiA9IE1pZGRsZXdhcmVUdXBsZSBleHRlbmRzIFtpbmZlciBIZWFkLCAuLi5pbmZlciBUYWlsXVxyXG4gID8gRXh0cmFjdERpc3BhdGNoRnJvbU1pZGRsZXdhcmVUdXBsZTxcclxuICAgICAgVGFpbCxcclxuICAgICAgQWNjICYgKEhlYWQgZXh0ZW5kcyBNaWRkbGV3YXJlPGluZmVyIEQ+ID8gSXNBbnk8RCwge30sIEQ+IDoge30pXHJcbiAgICA+XHJcbiAgOiBBY2NcclxuXHJcbmV4cG9ydCB0eXBlIEV4dHJhY3REaXNwYXRjaEV4dGVuc2lvbnM8TT4gPSBNIGV4dGVuZHMgTWlkZGxld2FyZUFycmF5PFxyXG4gIGluZmVyIE1pZGRsZXdhcmVUdXBsZVxyXG4+XHJcbiAgPyBFeHRyYWN0RGlzcGF0Y2hGcm9tTWlkZGxld2FyZVR1cGxlPE1pZGRsZXdhcmVUdXBsZSwge30+XHJcbiAgOiBNIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPlxyXG4gID8gRXh0cmFjdERpc3BhdGNoRnJvbU1pZGRsZXdhcmVUdXBsZTxbLi4uTV0sIHt9PlxyXG4gIDogbmV2ZXJcclxuXHJcbnR5cGUgRXh0cmFjdFN0b3JlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPFxyXG4gIEVuaGFuY2VyVHVwbGUgZXh0ZW5kcyBhbnlbXSxcclxuICBBY2MgZXh0ZW5kcyB7fVxyXG4+ID0gRW5oYW5jZXJUdXBsZSBleHRlbmRzIFtpbmZlciBIZWFkLCAuLi5pbmZlciBUYWlsXVxyXG4gID8gRXh0cmFjdFN0b3JlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPFxyXG4gICAgICBUYWlsLFxyXG4gICAgICBBY2MgJiAoSGVhZCBleHRlbmRzIFN0b3JlRW5oYW5jZXI8aW5mZXIgRXh0PiA/IElzQW55PEV4dCwge30sIEV4dD4gOiB7fSlcclxuICAgID5cclxuICA6IEFjY1xyXG5cclxuZXhwb3J0IHR5cGUgRXh0cmFjdFN0b3JlRXh0ZW5zaW9uczxFPiA9IEUgZXh0ZW5kcyBFbmhhbmNlckFycmF5PFxyXG4gIGluZmVyIEVuaGFuY2VyVHVwbGVcclxuPlxyXG4gID8gRXh0cmFjdFN0b3JlRXh0ZW5zaW9uc0Zyb21FbmhhbmNlclR1cGxlPEVuaGFuY2VyVHVwbGUsIHt9PlxyXG4gIDogRSBleHRlbmRzIFJlYWRvbmx5QXJyYXk8U3RvcmVFbmhhbmNlcj5cclxuICA/IFVuaW9uVG9JbnRlcnNlY3Rpb248XHJcbiAgICAgIEVbbnVtYmVyXSBleHRlbmRzIFN0b3JlRW5oYW5jZXI8aW5mZXIgRXh0PlxyXG4gICAgICAgID8gRXh0IGV4dGVuZHMge31cclxuICAgICAgICAgID8gSXNBbnk8RXh0LCB7fSwgRXh0PlxyXG4gICAgICAgICAgOiB7fVxyXG4gICAgICAgIDoge31cclxuICAgID5cclxuICA6IG5ldmVyXHJcblxyXG50eXBlIEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxcclxuICBFbmhhbmNlclR1cGxlIGV4dGVuZHMgYW55W10sXHJcbiAgQWNjIGV4dGVuZHMge31cclxuPiA9IEVuaGFuY2VyVHVwbGUgZXh0ZW5kcyBbaW5mZXIgSGVhZCwgLi4uaW5mZXIgVGFpbF1cclxuICA/IEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxcclxuICAgICAgVGFpbCxcclxuICAgICAgQWNjICZcclxuICAgICAgICAoSGVhZCBleHRlbmRzIFN0b3JlRW5oYW5jZXI8YW55LCBpbmZlciBTdGF0ZUV4dD5cclxuICAgICAgICAgID8gSXNBbnk8U3RhdGVFeHQsIHt9LCBTdGF0ZUV4dD5cclxuICAgICAgICAgIDoge30pXHJcbiAgICA+XHJcbiAgOiBBY2NcclxuXHJcbmV4cG9ydCB0eXBlIEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnM8RT4gPSBFIGV4dGVuZHMgRW5oYW5jZXJBcnJheTxcclxuICBpbmZlciBFbmhhbmNlclR1cGxlXHJcbj5cclxuICA/IEV4dHJhY3RTdGF0ZUV4dGVuc2lvbnNGcm9tRW5oYW5jZXJUdXBsZTxFbmhhbmNlclR1cGxlLCB7fT5cclxuICA6IEUgZXh0ZW5kcyBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI+XHJcbiAgPyBVbmlvblRvSW50ZXJzZWN0aW9uPFxyXG4gICAgICBFW251bWJlcl0gZXh0ZW5kcyBTdG9yZUVuaGFuY2VyPGFueSwgaW5mZXIgU3RhdGVFeHQ+XHJcbiAgICAgICAgPyBTdGF0ZUV4dCBleHRlbmRzIHt9XHJcbiAgICAgICAgICA/IElzQW55PFN0YXRlRXh0LCB7fSwgU3RhdGVFeHQ+XHJcbiAgICAgICAgICA6IHt9XHJcbiAgICAgICAgOiB7fVxyXG4gICAgPlxyXG4gIDogbmV2ZXJcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgdHlwZS4gUGFzc2VzIFQgb3V0IGFnYWluLCBidXQgYm94ZXMgaXQgaW4gYSB3YXkgdGhhdCBpdCBjYW5ub3RcclxuICogXCJ3aWRlblwiIHRoZSB0eXBlIGJ5IGFjY2lkZW50IGlmIGl0IGlzIGEgZ2VuZXJpYyB0aGF0IHNob3VsZCBiZSBpbmZlcnJlZFxyXG4gKiBmcm9tIGVsc2V3aGVyZS5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBOb0luZmVyPFQ+ID0gW1RdW1QgZXh0ZW5kcyBhbnkgPyAwIDogbmV2ZXJdXHJcblxyXG5leHBvcnQgdHlwZSBPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBhbnk+ID0gUGljazxULCBFeGNsdWRlPGtleW9mIFQsIEs+PlxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUeXBlR3VhcmQ8VD4ge1xyXG4gICh2YWx1ZTogYW55KTogdmFsdWUgaXMgVFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhhc01hdGNoRnVuY3Rpb248VD4ge1xyXG4gIG1hdGNoOiBUeXBlR3VhcmQ8VD5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGhhc01hdGNoRnVuY3Rpb24gPSA8VD4oXHJcbiAgdjogTWF0Y2hlcjxUPlxyXG4pOiB2IGlzIEhhc01hdGNoRnVuY3Rpb248VD4gPT4ge1xyXG4gIHJldHVybiB2ICYmIHR5cGVvZiAodiBhcyBIYXNNYXRjaEZ1bmN0aW9uPFQ+KS5tYXRjaCA9PT0gJ2Z1bmN0aW9uJ1xyXG59XHJcblxyXG4vKiogQHB1YmxpYyAqL1xyXG5leHBvcnQgdHlwZSBNYXRjaGVyPFQ+ID0gSGFzTWF0Y2hGdW5jdGlvbjxUPiB8IFR5cGVHdWFyZDxUPlxyXG5cclxuLyoqIEBwdWJsaWMgKi9cclxuZXhwb3J0IHR5cGUgQWN0aW9uRnJvbU1hdGNoZXI8TSBleHRlbmRzIE1hdGNoZXI8YW55Pj4gPSBNIGV4dGVuZHMgTWF0Y2hlcjxcclxuICBpbmZlciBUXHJcbj5cclxuICA/IFRcclxuICA6IG5ldmVyXHJcblxyXG5leHBvcnQgdHlwZSBJZDxUPiA9IHsgW0sgaW4ga2V5b2YgVF06IFRbS10gfSAmIHt9XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgSXNVbmtub3duT3JOb25JbmZlcnJhYmxlLFxyXG4gIElmTWF5YmVVbmRlZmluZWQsXHJcbiAgSWZWb2lkLFxyXG4gIElzQW55LFxyXG59IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBoYXNNYXRjaEZ1bmN0aW9uIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJy4vaXNQbGFpbk9iamVjdCdcclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gd2l0aCBhIHN0cmluZyB0eXBlIGFuZCBhbiBhc3NvY2lhdGVkIHBheWxvYWQuIFRoaXMgaXMgdGhlXHJcbiAqIHR5cGUgb2YgYWN0aW9uIHJldHVybmVkIGJ5IGBjcmVhdGVBY3Rpb24oKWAgYWN0aW9uIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgUCBUaGUgdHlwZSBvZiB0aGUgYWN0aW9uJ3MgcGF5bG9hZC5cclxuICogQHRlbXBsYXRlIFQgdGhlIHR5cGUgdXNlZCBmb3IgdGhlIGFjdGlvbiB0eXBlLlxyXG4gKiBAdGVtcGxhdGUgTSBUaGUgdHlwZSBvZiB0aGUgYWN0aW9uJ3MgbWV0YSAob3B0aW9uYWwpXHJcbiAqIEB0ZW1wbGF0ZSBFIFRoZSB0eXBlIG9mIHRoZSBhY3Rpb24ncyBlcnJvciAob3B0aW9uYWwpXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIFBheWxvYWRBY3Rpb248XHJcbiAgUCA9IHZvaWQsXHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcclxuICBNID0gbmV2ZXIsXHJcbiAgRSA9IG5ldmVyXHJcbj4gPSB7XHJcbiAgcGF5bG9hZDogUFxyXG4gIHR5cGU6IFRcclxufSAmIChbTV0gZXh0ZW5kcyBbbmV2ZXJdXHJcbiAgPyB7fVxyXG4gIDoge1xyXG4gICAgICBtZXRhOiBNXHJcbiAgICB9KSAmXHJcbiAgKFtFXSBleHRlbmRzIFtuZXZlcl1cclxuICAgID8ge31cclxuICAgIDoge1xyXG4gICAgICAgIGVycm9yOiBFXHJcbiAgICAgIH0pXHJcblxyXG4vKipcclxuICogQSBcInByZXBhcmVcIiBtZXRob2QgdG8gYmUgdXNlZCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlciBvZiBgY3JlYXRlQWN0aW9uYC5cclxuICogVGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgYSBGbHV4IFN0YW5kYXJkIEFjdGlvbiB3aXRob3V0XHJcbiAqIHR5cGUgKHdpbGwgYmUgYWRkZWQgbGF0ZXIpIHRoYXQgKm11c3QqIGNvbnRhaW4gYSBwYXlsb2FkIChtaWdodCBiZSB1bmRlZmluZWQpLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBQcmVwYXJlQWN0aW9uPFA+ID1cclxuICB8ICgoLi4uYXJnczogYW55W10pID0+IHsgcGF5bG9hZDogUCB9KVxyXG4gIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4geyBwYXlsb2FkOiBQOyBtZXRhOiBhbnkgfSlcclxuICB8ICgoLi4uYXJnczogYW55W10pID0+IHsgcGF5bG9hZDogUDsgZXJyb3I6IGFueSB9KVxyXG4gIHwgKCguLi5hcmdzOiBhbnlbXSkgPT4geyBwYXlsb2FkOiBQOyBtZXRhOiBhbnk7IGVycm9yOiBhbnkgfSlcclxuXHJcbi8qKlxyXG4gKiBJbnRlcm5hbCB2ZXJzaW9uIG9mIGBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZGAuIE5vdCB0byBiZSB1c2VkIGV4dGVybmFsbHkuXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IHR5cGUgX0FjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxhbnk+IHwgdm9pZCxcclxuICBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nXHJcbj4gPSBQQSBleHRlbmRzIFByZXBhcmVBY3Rpb248aW5mZXIgUD5cclxuICA/IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gICAgICBQYXJhbWV0ZXJzPFBBPixcclxuICAgICAgUCxcclxuICAgICAgVCxcclxuICAgICAgUmV0dXJuVHlwZTxQQT4gZXh0ZW5kcyB7XHJcbiAgICAgICAgZXJyb3I6IGluZmVyIEVcclxuICAgICAgfVxyXG4gICAgICAgID8gRVxyXG4gICAgICAgIDogbmV2ZXIsXHJcbiAgICAgIFJldHVyblR5cGU8UEE+IGV4dGVuZHMge1xyXG4gICAgICAgIG1ldGE6IGluZmVyIE1cclxuICAgICAgfVxyXG4gICAgICAgID8gTVxyXG4gICAgICAgIDogbmV2ZXJcclxuICAgID5cclxuICA6IHZvaWRcclxuXHJcbi8qKlxyXG4gKiBCYXNpYyB0eXBlIGZvciBhbGwgYWN0aW9uIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAaW5oZXJpdGRvYyB7cmVkdXgjQWN0aW9uQ3JlYXRvcn1cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUFjdGlvbkNyZWF0b3I8UCwgVCBleHRlbmRzIHN0cmluZywgTSA9IG5ldmVyLCBFID0gbmV2ZXI+IHtcclxuICB0eXBlOiBUXHJcbiAgbWF0Y2g6IChhY3Rpb246IEFjdGlvbjx1bmtub3duPikgPT4gYWN0aW9uIGlzIFBheWxvYWRBY3Rpb248UCwgVCwgTSwgRT5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIHRoYXQgdGFrZXMgbXVsdGlwbGUgYXJndW1lbnRzIHRoYXQgYXJlIHBhc3NlZFxyXG4gKiB0byBhIGBQcmVwYXJlQWN0aW9uYCBtZXRob2QgdG8gY3JlYXRlIHRoZSBmaW5hbCBBY3Rpb24uXHJcbiAqIEB0eXBlUGFyYW0gQXJncyBhcmd1bWVudHMgZm9yIHRoZSBhY3Rpb24gY3JlYXRvciBmdW5jdGlvblxyXG4gKiBAdHlwZVBhcmFtIFAgYHBheWxvYWRgIHR5cGVcclxuICogQHR5cGVQYXJhbSBUIGB0eXBlYCBuYW1lXHJcbiAqIEB0eXBlUGFyYW0gRSBvcHRpb25hbCBgZXJyb3JgIHR5cGVcclxuICogQHR5cGVQYXJhbSBNIG9wdGlvbmFsIGBtZXRhYCB0eXBlXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIEFyZ3MgZXh0ZW5kcyB1bmtub3duW10sXHJcbiAgUCxcclxuICBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxyXG4gIEUgPSBuZXZlcixcclxuICBNID0gbmV2ZXJcclxuPiBleHRlbmRzIEJhc2VBY3Rpb25DcmVhdG9yPFAsIFQsIE0sIEU+IHtcclxuICAvKipcclxuICAgKiBDYWxsaW5nIHRoaXMge0BsaW5rIHJlZHV4I0FjdGlvbkNyZWF0b3J9IHdpdGggYEFyZ3NgIHdpbGwgcmV0dXJuXHJcbiAgICogYW4gQWN0aW9uIHdpdGggYSBwYXlsb2FkIG9mIHR5cGUgYFBgIGFuZCAoZGVwZW5kaW5nIG9uIHRoZSBgUHJlcGFyZUFjdGlvbmBcclxuICAgKiBtZXRob2QgdXNlZCkgYSBgbWV0YWAtIGFuZCBgZXJyb3JgIHByb3BlcnR5IG9mIHR5cGVzIGBNYCBhbmQgYEVgIHJlc3BlY3RpdmVseS5cclxuICAgKi9cclxuICAoLi4uYXJnczogQXJncyk6IFBheWxvYWRBY3Rpb248UCwgVCwgTSwgRT5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIG9mIHR5cGUgYFRgIHRoYXQgdGFrZXMgYW4gb3B0aW9uYWwgcGF5bG9hZCBvZiB0eXBlIGBQYC5cclxuICpcclxuICogQGluaGVyaXRkb2Mge3JlZHV4I0FjdGlvbkNyZWF0b3J9XHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ3JlYXRvcldpdGhPcHRpb25hbFBheWxvYWQ8UCwgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz5cclxuICBleHRlbmRzIEJhc2VBY3Rpb25DcmVhdG9yPFAsIFQ+IHtcclxuICAvKipcclxuICAgKiBDYWxsaW5nIHRoaXMge0BsaW5rIHJlZHV4I0FjdGlvbkNyZWF0b3J9IHdpdGggYW4gYXJndW1lbnQgd2lsbFxyXG4gICAqIHJldHVybiBhIHtAbGluayBQYXlsb2FkQWN0aW9ufSBvZiB0eXBlIGBUYCB3aXRoIGEgcGF5bG9hZCBvZiBgUGAuXHJcbiAgICogQ2FsbGluZyBpdCB3aXRob3V0IGFuIGFyZ3VtZW50IHdpbGwgcmV0dXJuIGEgUGF5bG9hZEFjdGlvbiB3aXRoIGEgcGF5bG9hZCBvZiBgdW5kZWZpbmVkYC5cclxuICAgKi9cclxuICAocGF5bG9hZD86IFApOiBQYXlsb2FkQWN0aW9uPFAsIFQ+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gY3JlYXRvciBvZiB0eXBlIGBUYCB0aGF0IHRha2VzIG5vIHBheWxvYWQuXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRob3V0UGF5bG9hZDxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPlxyXG4gIGV4dGVuZHMgQmFzZUFjdGlvbkNyZWF0b3I8dW5kZWZpbmVkLCBUPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGluZyB0aGlzIHtAbGluayByZWR1eCNBY3Rpb25DcmVhdG9yfSB3aWxsXHJcbiAgICogcmV0dXJuIGEge0BsaW5rIFBheWxvYWRBY3Rpb259IG9mIHR5cGUgYFRgIHdpdGggYSBwYXlsb2FkIG9mIGB1bmRlZmluZWRgXHJcbiAgICovXHJcbiAgKG5vQXJndW1lbnQ6IHZvaWQpOiBQYXlsb2FkQWN0aW9uPHVuZGVmaW5lZCwgVD5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGFjdGlvbiBjcmVhdG9yIG9mIHR5cGUgYFRgIHRoYXQgcmVxdWlyZXMgYSBwYXlsb2FkIG9mIHR5cGUgUC5cclxuICpcclxuICogQGluaGVyaXRkb2Mge3JlZHV4I0FjdGlvbkNyZWF0b3J9XHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uQ3JlYXRvcldpdGhQYXlsb2FkPFAsIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBCYXNlQWN0aW9uQ3JlYXRvcjxQLCBUPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGluZyB0aGlzIHtAbGluayByZWR1eCNBY3Rpb25DcmVhdG9yfSB3aXRoIGFuIGFyZ3VtZW50IHdpbGxcclxuICAgKiByZXR1cm4gYSB7QGxpbmsgUGF5bG9hZEFjdGlvbn0gb2YgdHlwZSBgVGAgd2l0aCBhIHBheWxvYWQgb2YgYFBgXHJcbiAgICovXHJcbiAgKHBheWxvYWQ6IFApOiBQYXlsb2FkQWN0aW9uPFAsIFQ+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBhY3Rpb24gY3JlYXRvciBvZiB0eXBlIGBUYCB3aG9zZSBgcGF5bG9hZGAgdHlwZSBjb3VsZCBub3QgYmUgaW5mZXJyZWQuIEFjY2VwdHMgZXZlcnl0aGluZyBhcyBgcGF5bG9hZGAuXHJcbiAqXHJcbiAqIEBpbmhlcml0ZG9jIHtyZWR1eCNBY3Rpb25DcmVhdG9yfVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JXaXRoTm9uSW5mZXJyYWJsZVBheWxvYWQ8XHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xyXG4+IGV4dGVuZHMgQmFzZUFjdGlvbkNyZWF0b3I8dW5rbm93biwgVD4ge1xyXG4gIC8qKlxyXG4gICAqIENhbGxpbmcgdGhpcyB7QGxpbmsgcmVkdXgjQWN0aW9uQ3JlYXRvcn0gd2l0aCBhbiBhcmd1bWVudCB3aWxsXHJcbiAgICogcmV0dXJuIGEge0BsaW5rIFBheWxvYWRBY3Rpb259IG9mIHR5cGUgYFRgIHdpdGggYSBwYXlsb2FkXHJcbiAgICogb2YgZXhhY3RseSB0aGUgdHlwZSBvZiB0aGUgYXJndW1lbnQuXHJcbiAgICovXHJcbiAgPFBUIGV4dGVuZHMgdW5rbm93bj4ocGF5bG9hZDogUFQpOiBQYXlsb2FkQWN0aW9uPFBULCBUPlxyXG59XHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIGNyZWF0b3IgdGhhdCBwcm9kdWNlcyBhY3Rpb25zIHdpdGggYSBgcGF5bG9hZGAgYXR0cmlidXRlLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFAgdGhlIGBwYXlsb2FkYCB0eXBlXHJcbiAqIEB0eXBlUGFyYW0gVCB0aGUgYHR5cGVgIG9mIHRoZSByZXN1bHRpbmcgYWN0aW9uXHJcbiAqIEB0eXBlUGFyYW0gUEEgaWYgdGhlIHJlc3VsdGluZyBhY3Rpb24gaXMgcHJlcHJvY2Vzc2VkIGJ5IGEgYHByZXBhcmVgIG1ldGhvZCwgdGhlIHNpZ25hdHVyZSBvZiBzYWlkIG1ldGhvZC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgUGF5bG9hZEFjdGlvbkNyZWF0b3I8XHJcbiAgUCA9IHZvaWQsXHJcbiAgVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcclxuICBQQSBleHRlbmRzIFByZXBhcmVBY3Rpb248UD4gfCB2b2lkID0gdm9pZFxyXG4+ID0gSWZQcmVwYXJlQWN0aW9uTWV0aG9kUHJvdmlkZWQ8XHJcbiAgUEEsXHJcbiAgX0FjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFBBLCBUPixcclxuICAvLyBlbHNlXHJcbiAgSXNBbnk8XHJcbiAgICBQLFxyXG4gICAgQWN0aW9uQ3JlYXRvcldpdGhQYXlsb2FkPGFueSwgVD4sXHJcbiAgICBJc1Vua25vd25Pck5vbkluZmVycmFibGU8XHJcbiAgICAgIFAsXHJcbiAgICAgIEFjdGlvbkNyZWF0b3JXaXRoTm9uSW5mZXJyYWJsZVBheWxvYWQ8VD4sXHJcbiAgICAgIC8vIGVsc2VcclxuICAgICAgSWZWb2lkPFxyXG4gICAgICAgIFAsXHJcbiAgICAgICAgQWN0aW9uQ3JlYXRvcldpdGhvdXRQYXlsb2FkPFQ+LFxyXG4gICAgICAgIC8vIGVsc2VcclxuICAgICAgICBJZk1heWJlVW5kZWZpbmVkPFxyXG4gICAgICAgICAgUCxcclxuICAgICAgICAgIEFjdGlvbkNyZWF0b3JXaXRoT3B0aW9uYWxQYXlsb2FkPFAsIFQ+LFxyXG4gICAgICAgICAgLy8gZWxzZVxyXG4gICAgICAgICAgQWN0aW9uQ3JlYXRvcldpdGhQYXlsb2FkPFAsIFQ+XHJcbiAgICAgICAgPlxyXG4gICAgICA+XHJcbiAgICA+XHJcbiAgPlxyXG4+XHJcblxyXG4vKipcclxuICogQSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBhY3Rpb24gY3JlYXRvciBmb3IgdGhlIGdpdmVuIGFjdGlvbiB0eXBlXHJcbiAqIHN0cmluZy4gVGhlIGFjdGlvbiBjcmVhdG9yIGFjY2VwdHMgYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgaW5jbHVkZWRcclxuICogaW4gdGhlIGFjdGlvbiBvYmplY3QgYXMgYSBmaWVsZCBjYWxsZWQgcGF5bG9hZC4gVGhlIGFjdGlvbiBjcmVhdG9yIGZ1bmN0aW9uXHJcbiAqIHdpbGwgYWxzbyBoYXZlIGl0cyB0b1N0cmluZygpIG92ZXJyaWRkZW4gc28gdGhhdCBpdCByZXR1cm5zIHRoZSBhY3Rpb24gdHlwZSxcclxuICogYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBpbiByZWR1Y2VyIGxvZ2ljIHRoYXQgaXMgbG9va2luZyBmb3IgdGhhdCBhY3Rpb24gdHlwZS5cclxuICpcclxuICogQHBhcmFtIHR5cGUgVGhlIGFjdGlvbiB0eXBlIHRvIHVzZSBmb3IgY3JlYXRlZCBhY3Rpb25zLlxyXG4gKiBAcGFyYW0gcHJlcGFyZSAob3B0aW9uYWwpIGEgbWV0aG9kIHRoYXQgdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgeyBwYXlsb2FkIH0gb3IgeyBwYXlsb2FkLCBtZXRhIH0uXHJcbiAqICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgZ2l2ZW4sIHRoZSByZXN1bHRpbmcgYWN0aW9uIGNyZWF0b3Igd2lsbCBwYXNzIGl0cyBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QgdG8gY2FsY3VsYXRlIHBheWxvYWQgJiBtZXRhLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uPFAgPSB2b2lkLCBUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihcclxuICB0eXBlOiBUXHJcbik6IFBheWxvYWRBY3Rpb25DcmVhdG9yPFAsIFQ+XHJcblxyXG4vKipcclxuICogQSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBhY3Rpb24gY3JlYXRvciBmb3IgdGhlIGdpdmVuIGFjdGlvbiB0eXBlXHJcbiAqIHN0cmluZy4gVGhlIGFjdGlvbiBjcmVhdG9yIGFjY2VwdHMgYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgaW5jbHVkZWRcclxuICogaW4gdGhlIGFjdGlvbiBvYmplY3QgYXMgYSBmaWVsZCBjYWxsZWQgcGF5bG9hZC4gVGhlIGFjdGlvbiBjcmVhdG9yIGZ1bmN0aW9uXHJcbiAqIHdpbGwgYWxzbyBoYXZlIGl0cyB0b1N0cmluZygpIG92ZXJyaWRkZW4gc28gdGhhdCBpdCByZXR1cm5zIHRoZSBhY3Rpb24gdHlwZSxcclxuICogYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBpbiByZWR1Y2VyIGxvZ2ljIHRoYXQgaXMgbG9va2luZyBmb3IgdGhhdCBhY3Rpb24gdHlwZS5cclxuICpcclxuICogQHBhcmFtIHR5cGUgVGhlIGFjdGlvbiB0eXBlIHRvIHVzZSBmb3IgY3JlYXRlZCBhY3Rpb25zLlxyXG4gKiBAcGFyYW0gcHJlcGFyZSAob3B0aW9uYWwpIGEgbWV0aG9kIHRoYXQgdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgeyBwYXlsb2FkIH0gb3IgeyBwYXlsb2FkLCBtZXRhIH0uXHJcbiAqICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgZ2l2ZW4sIHRoZSByZXN1bHRpbmcgYWN0aW9uIGNyZWF0b3Igd2lsbCBwYXNzIGl0cyBhcmd1bWVudHMgdG8gdGhpcyBtZXRob2QgdG8gY2FsY3VsYXRlIHBheWxvYWQgJiBtZXRhLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uPFxyXG4gIFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxhbnk+LFxyXG4gIFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmdcclxuPihcclxuICB0eXBlOiBULFxyXG4gIHByZXBhcmVBY3Rpb246IFBBXHJcbik6IFBheWxvYWRBY3Rpb25DcmVhdG9yPFJldHVyblR5cGU8UEE+WydwYXlsb2FkJ10sIFQsIFBBPlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbih0eXBlOiBzdHJpbmcsIHByZXBhcmVBY3Rpb24/OiBGdW5jdGlvbik6IGFueSB7XHJcbiAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvciguLi5hcmdzOiBhbnlbXSkge1xyXG4gICAgaWYgKHByZXBhcmVBY3Rpb24pIHtcclxuICAgICAgbGV0IHByZXBhcmVkID0gcHJlcGFyZUFjdGlvbiguLi5hcmdzKVxyXG4gICAgICBpZiAoIXByZXBhcmVkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcmVwYXJlQWN0aW9uIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdCcpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZSxcclxuICAgICAgICBwYXlsb2FkOiBwcmVwYXJlZC5wYXlsb2FkLFxyXG4gICAgICAgIC4uLignbWV0YScgaW4gcHJlcGFyZWQgJiYgeyBtZXRhOiBwcmVwYXJlZC5tZXRhIH0pLFxyXG4gICAgICAgIC4uLignZXJyb3InIGluIHByZXBhcmVkICYmIHsgZXJyb3I6IHByZXBhcmVkLmVycm9yIH0pLFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyB0eXBlLCBwYXlsb2FkOiBhcmdzWzBdIH1cclxuICB9XHJcblxyXG4gIGFjdGlvbkNyZWF0b3IudG9TdHJpbmcgPSAoKSA9PiBgJHt0eXBlfWBcclxuXHJcbiAgYWN0aW9uQ3JlYXRvci50eXBlID0gdHlwZVxyXG5cclxuICBhY3Rpb25DcmVhdG9yLm1hdGNoID0gKGFjdGlvbjogQWN0aW9uPHVua25vd24+KTogYWN0aW9uIGlzIFBheWxvYWRBY3Rpb24gPT5cclxuICAgIGFjdGlvbi50eXBlID09PSB0eXBlXHJcblxyXG4gIHJldHVybiBhY3Rpb25DcmVhdG9yXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3Qgd2l0aCBhIGB0eXBlYCBwcm9wZXJ0eS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbihhY3Rpb246IHVua25vd24pOiBhY3Rpb24gaXMgQWN0aW9uPHVua25vd24+IHtcclxuICByZXR1cm4gaXNQbGFpbk9iamVjdChhY3Rpb24pICYmICd0eXBlJyBpbiBhY3Rpb25cclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBSVEstbGlrZSBhY3Rpb24gY3JlYXRvciwgd2l0aCBhIHN0YXRpYyB0eXBlIHByb3BlcnR5IGFuZCBtYXRjaCBtZXRob2QuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25DcmVhdG9yKFxyXG4gIGFjdGlvbjogdW5rbm93blxyXG4pOiBhY3Rpb24gaXMgQmFzZUFjdGlvbkNyZWF0b3I8dW5rbm93biwgc3RyaW5nPiAmIEZ1bmN0aW9uIHtcclxuICByZXR1cm4gKFxyXG4gICAgdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgJ3R5cGUnIGluIGFjdGlvbiAmJlxyXG4gICAgLy8gaGFzTWF0Y2hGdW5jdGlvbiBvbmx5IHdhbnRzIE1hdGNoZXJzIGJ1dCBJIGRvbid0IHNlZSB0aGUgcG9pbnQgaW4gcmV3cml0aW5nIGl0XHJcbiAgICBoYXNNYXRjaEZ1bmN0aW9uKGFjdGlvbiBhcyBhbnkpXHJcbiAgKVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIGFjdGlvbiB3aXRoIGEgc3RyaW5nIHR5cGUgYW5kIHZhbGlkIEZsdXggU3RhbmRhcmQgQWN0aW9uIGtleXMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNGU0EoYWN0aW9uOiB1bmtub3duKTogYWN0aW9uIGlzIHtcclxuICB0eXBlOiBzdHJpbmdcclxuICBwYXlsb2FkPzogdW5rbm93blxyXG4gIGVycm9yPzogdW5rbm93blxyXG4gIG1ldGE/OiB1bmtub3duXHJcbn0ge1xyXG4gIHJldHVybiAoXHJcbiAgICBpc0FjdGlvbihhY3Rpb24pICYmXHJcbiAgICB0eXBlb2YgYWN0aW9uLnR5cGUgPT09ICdzdHJpbmcnICYmXHJcbiAgICBPYmplY3Qua2V5cyhhY3Rpb24pLmV2ZXJ5KGlzVmFsaWRLZXkpXHJcbiAgKVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1ZhbGlkS2V5KGtleTogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIFsndHlwZScsICdwYXlsb2FkJywgJ2Vycm9yJywgJ21ldGEnXS5pbmRleE9mKGtleSkgPiAtMVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgYWN0aW9uIHR5cGUgb2YgdGhlIGFjdGlvbnMgY3JlYXRlZCBieSB0aGUgcGFzc2VkXHJcbiAqIGBjcmVhdGVBY3Rpb24oKWAtZ2VuZXJhdGVkIGFjdGlvbiBjcmVhdG9yIChhcmJpdHJhcnkgYWN0aW9uIGNyZWF0b3JzXHJcbiAqIGFyZSBub3Qgc3VwcG9ydGVkKS5cclxuICpcclxuICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIGNyZWF0b3Igd2hvc2UgYWN0aW9uIHR5cGUgdG8gZ2V0LlxyXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uIHR5cGUgdXNlZCBieSB0aGUgYWN0aW9uIGNyZWF0b3IuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlPFQgZXh0ZW5kcyBzdHJpbmc+KFxyXG4gIGFjdGlvbkNyZWF0b3I6IFBheWxvYWRBY3Rpb25DcmVhdG9yPGFueSwgVD5cclxuKTogVCB7XHJcbiAgcmV0dXJuIGAke2FjdGlvbkNyZWF0b3J9YCBhcyBUXHJcbn1cclxuXHJcbi8vIGhlbHBlciB0eXBlcyBmb3IgbW9yZSByZWFkYWJsZSB0eXBpbmdzXHJcblxyXG50eXBlIElmUHJlcGFyZUFjdGlvbk1ldGhvZFByb3ZpZGVkPFxyXG4gIFBBIGV4dGVuZHMgUHJlcGFyZUFjdGlvbjxhbnk+IHwgdm9pZCxcclxuICBUcnVlLFxyXG4gIEZhbHNlXHJcbj4gPSBQQSBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55ID8gVHJ1ZSA6IEZhbHNlXHJcbiIsICJpbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgaXNBY3Rpb25DcmVhdG9yIGFzIGlzUlRLQWN0aW9uIH0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGlkZW50aWZ5IHdoZXRoZXIgYSB2YWx1ZSBpcyBhbiBhY3Rpb24gY3JlYXRvci5cclxuICAgKiBUaGUgZGVmYXVsdCBjaGVja3MgZm9yIGEgZnVuY3Rpb24gd2l0aCBhIHN0YXRpYyB0eXBlIHByb3BlcnR5IGFuZCBtYXRjaCBtZXRob2QuXHJcbiAgICovXHJcbiAgaXNBY3Rpb25DcmVhdG9yPzogKGFjdGlvbjogdW5rbm93bikgPT4gYWN0aW9uIGlzIEZ1bmN0aW9uICYgeyB0eXBlPzogdW5rbm93biB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlKHR5cGU/OiB1bmtub3duKSB7XHJcbiAgY29uc3Qgc3BsaXRUeXBlID0gdHlwZSA/IGAke3R5cGV9YC5zcGxpdCgnLycpIDogW11cclxuICBjb25zdCBhY3Rpb25OYW1lID0gc3BsaXRUeXBlW3NwbGl0VHlwZS5sZW5ndGggLSAxXSB8fCAnYWN0aW9uQ3JlYXRvcidcclxuICByZXR1cm4gYERldGVjdGVkIGFuIGFjdGlvbiBjcmVhdG9yIHdpdGggdHlwZSBcIiR7XHJcbiAgICB0eXBlIHx8ICd1bmtub3duJ1xyXG4gIH1cIiBiZWluZyBkaXNwYXRjaGVkLiBcclxuTWFrZSBzdXJlIHlvdSdyZSBjYWxsaW5nIHRoZSBhY3Rpb24gY3JlYXRvciBiZWZvcmUgZGlzcGF0Y2hpbmcsIGkuZS4gXFxgZGlzcGF0Y2goJHthY3Rpb25OYW1lfSgpKVxcYCBpbnN0ZWFkIG9mIFxcYGRpc3BhdGNoKCR7YWN0aW9uTmFtZX0pXFxgLiBUaGlzIGlzIG5lY2Vzc2FyeSBldmVuIGlmIHRoZSBhY3Rpb24gaGFzIG5vIHBheWxvYWQuYFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUoXHJcbiAgb3B0aW9uczogQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zID0ge31cclxuKTogTWlkZGxld2FyZSB7XHJcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcclxuICAgIHJldHVybiAoKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4gbmV4dChhY3Rpb24pXHJcbiAgfVxyXG4gIGNvbnN0IHsgaXNBY3Rpb25DcmVhdG9yID0gaXNSVEtBY3Rpb24gfSA9IG9wdGlvbnNcclxuICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcclxuICAgIGlmIChpc0FjdGlvbkNyZWF0b3IoYWN0aW9uKSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oZ2V0TWVzc2FnZShhY3Rpb24udHlwZSkpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV4dChhY3Rpb24pXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgY3JlYXRlTmV4dFN0YXRlLCB7IGlzRHJhZnRhYmxlIH0gZnJvbSAnaW1tZXInXHJcbmltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSwgU3RvcmVFbmhhbmNlciB9IGZyb20gJ3JlZHV4J1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVNZWFzdXJlVXRpbHMobWF4RGVsYXk6IG51bWJlciwgZm5OYW1lOiBzdHJpbmcpIHtcclxuICBsZXQgZWxhcHNlZCA9IDBcclxuICByZXR1cm4ge1xyXG4gICAgbWVhc3VyZVRpbWU8VD4oZm46ICgpID0+IFQpOiBUIHtcclxuICAgICAgY29uc3Qgc3RhcnRlZCA9IERhdGUubm93KClcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gZm4oKVxyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgIGVsYXBzZWQgKz0gZmluaXNoZWQgLSBzdGFydGVkXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXJuSWZFeGNlZWRlZCgpIHtcclxuICAgICAgaWYgKGVsYXBzZWQgPiBtYXhEZWxheSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihgJHtmbk5hbWV9IHRvb2sgJHtlbGFwc2VkfW1zLCB3aGljaCBpcyBtb3JlIHRoYW4gdGhlIHdhcm5pbmcgdGhyZXNob2xkIG9mICR7bWF4RGVsYXl9bXMuIFxyXG5JZiB5b3VyIHN0YXRlIG9yIGFjdGlvbnMgYXJlIHZlcnkgbGFyZ2UsIHlvdSBtYXkgd2FudCB0byBkaXNhYmxlIHRoZSBtaWRkbGV3YXJlIGFzIGl0IG1pZ2h0IGNhdXNlIHRvbyBtdWNoIG9mIGEgc2xvd2Rvd24gaW4gZGV2ZWxvcG1lbnQgbW9kZS4gU2VlIGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2dldERlZmF1bHRNaWRkbGV3YXJlIGZvciBpbnN0cnVjdGlvbnMuXHJcbkl0IGlzIGRpc2FibGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzLCBzbyB5b3UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0LmApXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcikge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTWlkZGxld2FyZUFycmF5PFxyXG4gIE1pZGRsZXdhcmVzIGV4dGVuZHMgTWlkZGxld2FyZTxhbnksIGFueT5bXVxyXG4+IGV4dGVuZHMgQXJyYXk8TWlkZGxld2FyZXNbbnVtYmVyXT4ge1xyXG4gIGNvbnN0cnVjdG9yKC4uLml0ZW1zOiBNaWRkbGV3YXJlcylcclxuICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xyXG4gICAgc3VwZXIoLi4uYXJncylcclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBNaWRkbGV3YXJlQXJyYXkucHJvdG90eXBlKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldCBbU3ltYm9sLnNwZWNpZXNdKCkge1xyXG4gICAgcmV0dXJuIE1pZGRsZXdhcmVBcnJheSBhcyBhbnlcclxuICB9XHJcblxyXG4gIGNvbmNhdDxBZGRpdGlvbmFsTWlkZGxld2FyZXMgZXh0ZW5kcyBSZWFkb25seUFycmF5PE1pZGRsZXdhcmU8YW55LCBhbnk+Pj4oXHJcbiAgICBpdGVtczogQWRkaXRpb25hbE1pZGRsZXdhcmVzXHJcbiAgKTogTWlkZGxld2FyZUFycmF5PFsuLi5NaWRkbGV3YXJlcywgLi4uQWRkaXRpb25hbE1pZGRsZXdhcmVzXT5cclxuXHJcbiAgY29uY2F0PEFkZGl0aW9uYWxNaWRkbGV3YXJlcyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8TWlkZGxld2FyZTxhbnksIGFueT4+PihcclxuICAgIC4uLml0ZW1zOiBBZGRpdGlvbmFsTWlkZGxld2FyZXNcclxuICApOiBNaWRkbGV3YXJlQXJyYXk8Wy4uLk1pZGRsZXdhcmVzLCAuLi5BZGRpdGlvbmFsTWlkZGxld2FyZXNdPlxyXG4gIGNvbmNhdCguLi5hcnI6IGFueVtdKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuY29uY2F0LmFwcGx5KHRoaXMsIGFycilcclxuICB9XHJcblxyXG4gIHByZXBlbmQ8QWRkaXRpb25hbE1pZGRsZXdhcmVzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPGFueSwgYW55Pj4+KFxyXG4gICAgaXRlbXM6IEFkZGl0aW9uYWxNaWRkbGV3YXJlc1xyXG4gICk6IE1pZGRsZXdhcmVBcnJheTxbLi4uQWRkaXRpb25hbE1pZGRsZXdhcmVzLCAuLi5NaWRkbGV3YXJlc10+XHJcblxyXG4gIHByZXBlbmQ8QWRkaXRpb25hbE1pZGRsZXdhcmVzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxNaWRkbGV3YXJlPGFueSwgYW55Pj4+KFxyXG4gICAgLi4uaXRlbXM6IEFkZGl0aW9uYWxNaWRkbGV3YXJlc1xyXG4gICk6IE1pZGRsZXdhcmVBcnJheTxbLi4uQWRkaXRpb25hbE1pZGRsZXdhcmVzLCAuLi5NaWRkbGV3YXJlc10+XHJcblxyXG4gIHByZXBlbmQoLi4uYXJyOiBhbnlbXSkge1xyXG4gICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XHJcbiAgICAgIHJldHVybiBuZXcgTWlkZGxld2FyZUFycmF5KC4uLmFyclswXS5jb25jYXQodGhpcykpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IE1pZGRsZXdhcmVBcnJheSguLi5hcnIuY29uY2F0KHRoaXMpKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBFbmhhbmNlckFycmF5PFxyXG4gIEVuaGFuY2VycyBleHRlbmRzIFN0b3JlRW5oYW5jZXI8YW55LCBhbnk+W11cclxuPiBleHRlbmRzIEFycmF5PEVuaGFuY2Vyc1tudW1iZXJdPiB7XHJcbiAgY29uc3RydWN0b3IoLi4uaXRlbXM6IEVuaGFuY2VycylcclxuICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xyXG4gICAgc3VwZXIoLi4uYXJncylcclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBFbmhhbmNlckFycmF5LnByb3RvdHlwZSlcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXQgW1N5bWJvbC5zcGVjaWVzXSgpIHtcclxuICAgIHJldHVybiBFbmhhbmNlckFycmF5IGFzIGFueVxyXG4gIH1cclxuXHJcbiAgY29uY2F0PEFkZGl0aW9uYWxFbmhhbmNlcnMgZXh0ZW5kcyBSZWFkb25seUFycmF5PFN0b3JlRW5oYW5jZXI8YW55LCBhbnk+Pj4oXHJcbiAgICBpdGVtczogQWRkaXRpb25hbEVuaGFuY2Vyc1xyXG4gICk6IEVuaGFuY2VyQXJyYXk8Wy4uLkVuaGFuY2VycywgLi4uQWRkaXRpb25hbEVuaGFuY2Vyc10+XHJcblxyXG4gIGNvbmNhdDxBZGRpdGlvbmFsRW5oYW5jZXJzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxTdG9yZUVuaGFuY2VyPGFueSwgYW55Pj4+KFxyXG4gICAgLi4uaXRlbXM6IEFkZGl0aW9uYWxFbmhhbmNlcnNcclxuICApOiBFbmhhbmNlckFycmF5PFsuLi5FbmhhbmNlcnMsIC4uLkFkZGl0aW9uYWxFbmhhbmNlcnNdPlxyXG4gIGNvbmNhdCguLi5hcnI6IGFueVtdKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuY29uY2F0LmFwcGx5KHRoaXMsIGFycilcclxuICB9XHJcblxyXG4gIHByZXBlbmQ8QWRkaXRpb25hbEVuaGFuY2VycyBleHRlbmRzIFJlYWRvbmx5QXJyYXk8U3RvcmVFbmhhbmNlcjxhbnksIGFueT4+PihcclxuICAgIGl0ZW1zOiBBZGRpdGlvbmFsRW5oYW5jZXJzXHJcbiAgKTogRW5oYW5jZXJBcnJheTxbLi4uQWRkaXRpb25hbEVuaGFuY2VycywgLi4uRW5oYW5jZXJzXT5cclxuXHJcbiAgcHJlcGVuZDxBZGRpdGlvbmFsRW5oYW5jZXJzIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxTdG9yZUVuaGFuY2VyPGFueSwgYW55Pj4+KFxyXG4gICAgLi4uaXRlbXM6IEFkZGl0aW9uYWxFbmhhbmNlcnNcclxuICApOiBFbmhhbmNlckFycmF5PFsuLi5BZGRpdGlvbmFsRW5oYW5jZXJzLCAuLi5FbmhhbmNlcnNdPlxyXG5cclxuICBwcmVwZW5kKC4uLmFycjogYW55W10pIHtcclxuICAgIGlmIChhcnIubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJyWzBdKSkge1xyXG4gICAgICByZXR1cm4gbmV3IEVuaGFuY2VyQXJyYXkoLi4uYXJyWzBdLmNvbmNhdCh0aGlzKSlcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRW5oYW5jZXJBcnJheSguLi5hcnIuY29uY2F0KHRoaXMpKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZyZWV6ZURyYWZ0YWJsZTxUPih2YWw6IFQpIHtcclxuICByZXR1cm4gaXNEcmFmdGFibGUodmFsKSA/IGNyZWF0ZU5leHRTdGF0ZSh2YWwsICgpID0+IHt9KSA6IHZhbFxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgZ2V0VGltZU1lYXN1cmVVdGlscyB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG50eXBlIEVudHJ5UHJvY2Vzc29yID0gKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnlcclxuXHJcbmNvbnN0IGlzUHJvZHVjdGlvbjogYm9vbGVhbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbidcclxuY29uc3QgcHJlZml4OiBzdHJpbmcgPSAnSW52YXJpYW50IGZhaWxlZCdcclxuXHJcbi8vIFRocm93IGFuIGVycm9yIGlmIHRoZSBjb25kaXRpb24gZmFpbHNcclxuLy8gU3RyaXAgb3V0IGVycm9yIG1lc3NhZ2VzIGZvciBwcm9kdWN0aW9uXHJcbi8vID4gTm90IHByb3ZpZGluZyBhbiBpbmxpbmUgZGVmYXVsdCBhcmd1bWVudCBmb3IgbWVzc2FnZSBhcyB0aGUgcmVzdWx0IGlzIHNtYWxsZXJcclxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbjogYW55LCBtZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIC8vIENvbmRpdGlvbiBub3QgcGFzc2VkXHJcblxyXG4gIC8vIEluIHByb2R1Y3Rpb24gd2Ugc3RyaXAgdGhlIG1lc3NhZ2UgYnV0IHN0aWxsIHRocm93XHJcbiAgaWYgKGlzUHJvZHVjdGlvbikge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKHByZWZpeClcclxuICB9XHJcblxyXG4gIC8vIFdoZW4gbm90IGluIHByb2R1Y3Rpb24gd2UgYWxsb3cgdGhlIG1lc3NhZ2UgdG8gcGFzcyB0aHJvdWdoXHJcbiAgLy8gKlRoaXMgYmxvY2sgd2lsbCBiZSByZW1vdmVkIGluIHByb2R1Y3Rpb24gYnVpbGRzKlxyXG4gIHRocm93IG5ldyBFcnJvcihgJHtwcmVmaXh9OiAke21lc3NhZ2UgfHwgJyd9YClcclxufVxyXG5cclxuZnVuY3Rpb24gc3RyaW5naWZ5KFxyXG4gIG9iajogYW55LFxyXG4gIHNlcmlhbGl6ZXI/OiBFbnRyeVByb2Nlc3NvcixcclxuICBpbmRlbnQ/OiBzdHJpbmcgfCBudW1iZXIsXHJcbiAgZGVjeWNsZXI/OiBFbnRyeVByb2Nlc3NvclxyXG4pOiBzdHJpbmcge1xyXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIGdldFNlcmlhbGl6ZShzZXJpYWxpemVyLCBkZWN5Y2xlciksIGluZGVudClcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U2VyaWFsaXplKFxyXG4gIHNlcmlhbGl6ZXI/OiBFbnRyeVByb2Nlc3NvcixcclxuICBkZWN5Y2xlcj86IEVudHJ5UHJvY2Vzc29yXHJcbik6IEVudHJ5UHJvY2Vzc29yIHtcclxuICBsZXQgc3RhY2s6IGFueVtdID0gW10sXHJcbiAgICBrZXlzOiBhbnlbXSA9IFtdXHJcblxyXG4gIGlmICghZGVjeWNsZXIpXHJcbiAgICBkZWN5Y2xlciA9IGZ1bmN0aW9uIChfOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgaWYgKHN0YWNrWzBdID09PSB2YWx1ZSkgcmV0dXJuICdbQ2lyY3VsYXIgfl0nXHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgJ1tDaXJjdWxhciB+LicgKyBrZXlzLnNsaWNlKDAsIHN0YWNrLmluZGV4T2YodmFsdWUpKS5qb2luKCcuJykgKyAnXSdcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICByZXR1cm4gZnVuY3Rpb24gKHRoaXM6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHZhciB0aGlzUG9zID0gc3RhY2suaW5kZXhPZih0aGlzKVxyXG4gICAgICB+dGhpc1BvcyA/IHN0YWNrLnNwbGljZSh0aGlzUG9zICsgMSkgOiBzdGFjay5wdXNoKHRoaXMpXHJcbiAgICAgIH50aGlzUG9zID8ga2V5cy5zcGxpY2UodGhpc1BvcywgSW5maW5pdHksIGtleSkgOiBrZXlzLnB1c2goa2V5KVxyXG4gICAgICBpZiAofnN0YWNrLmluZGV4T2YodmFsdWUpKSB2YWx1ZSA9IGRlY3ljbGVyIS5jYWxsKHRoaXMsIGtleSwgdmFsdWUpXHJcbiAgICB9IGVsc2Ugc3RhY2sucHVzaCh2YWx1ZSlcclxuXHJcbiAgICByZXR1cm4gc2VyaWFsaXplciA9PSBudWxsID8gdmFsdWUgOiBzZXJpYWxpemVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgZGVmYXVsdCBgaXNJbW11dGFibGVgIGZ1bmN0aW9uLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNJbW11dGFibGVEZWZhdWx0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT0gbnVsbCB8fCBPYmplY3QuaXNGcm96ZW4odmFsdWUpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmFja0Zvck11dGF0aW9ucyhcclxuICBpc0ltbXV0YWJsZTogSXNJbW11dGFibGVGdW5jLFxyXG4gIGlnbm9yZVBhdGhzOiBJZ25vcmVQYXRocyB8IHVuZGVmaW5lZCxcclxuICBvYmo6IGFueVxyXG4pIHtcclxuICBjb25zdCB0cmFja2VkUHJvcGVydGllcyA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iailcclxuICByZXR1cm4ge1xyXG4gICAgZGV0ZWN0TXV0YXRpb25zKCkge1xyXG4gICAgICByZXR1cm4gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgdHJhY2tlZFByb3BlcnRpZXMsIG9iailcclxuICAgIH0sXHJcbiAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgVHJhY2tlZFByb3BlcnR5IHtcclxuICB2YWx1ZTogYW55XHJcbiAgY2hpbGRyZW46IFJlY29yZDxzdHJpbmcsIGFueT5cclxufVxyXG5cclxuZnVuY3Rpb24gdHJhY2tQcm9wZXJ0aWVzKFxyXG4gIGlzSW1tdXRhYmxlOiBJc0ltbXV0YWJsZUZ1bmMsXHJcbiAgaWdub3JlUGF0aHM6IElnbm9yZVBhdGhzID0gW10sXHJcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gIHBhdGg6IHN0cmluZyA9ICcnLFxyXG4gIGNoZWNrZWRPYmplY3RzOiBTZXQ8UmVjb3JkPHN0cmluZywgYW55Pj4gPSBuZXcgU2V0KClcclxuKSB7XHJcbiAgY29uc3QgdHJhY2tlZDogUGFydGlhbDxUcmFja2VkUHJvcGVydHk+ID0geyB2YWx1ZTogb2JqIH1cclxuXHJcbiAgaWYgKCFpc0ltbXV0YWJsZShvYmopICYmICFjaGVja2VkT2JqZWN0cy5oYXMob2JqKSkge1xyXG4gICAgY2hlY2tlZE9iamVjdHMuYWRkKG9iaik7XHJcbiAgICB0cmFja2VkLmNoaWxkcmVuID0ge31cclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgY29uc3QgY2hpbGRQYXRoID0gcGF0aCA/IHBhdGggKyAnLicgKyBrZXkgOiBrZXlcclxuICAgICAgaWYgKGlnbm9yZVBhdGhzLmxlbmd0aCAmJiBpZ25vcmVQYXRocy5pbmRleE9mKGNoaWxkUGF0aCkgIT09IC0xKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJhY2tlZC5jaGlsZHJlbltrZXldID0gdHJhY2tQcm9wZXJ0aWVzKFxyXG4gICAgICAgIGlzSW1tdXRhYmxlLFxyXG4gICAgICAgIGlnbm9yZVBhdGhzLFxyXG4gICAgICAgIG9ialtrZXldLFxyXG4gICAgICAgIGNoaWxkUGF0aFxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB0cmFja2VkIGFzIFRyYWNrZWRQcm9wZXJ0eVxyXG59XHJcblxyXG50eXBlIElnbm9yZVBhdGhzID0gcmVhZG9ubHkgKHN0cmluZyB8IFJlZ0V4cClbXVxyXG5cclxuZnVuY3Rpb24gZGV0ZWN0TXV0YXRpb25zKFxyXG4gIGlzSW1tdXRhYmxlOiBJc0ltbXV0YWJsZUZ1bmMsXHJcbiAgaWdub3JlZFBhdGhzOiBJZ25vcmVQYXRocyA9IFtdLFxyXG4gIHRyYWNrZWRQcm9wZXJ0eTogVHJhY2tlZFByb3BlcnR5LFxyXG4gIG9iajogYW55LFxyXG4gIHNhbWVQYXJlbnRSZWY6IGJvb2xlYW4gPSBmYWxzZSxcclxuICBwYXRoOiBzdHJpbmcgPSAnJ1xyXG4pOiB7IHdhc011dGF0ZWQ6IGJvb2xlYW47IHBhdGg/OiBzdHJpbmcgfSB7XHJcbiAgY29uc3QgcHJldk9iaiA9IHRyYWNrZWRQcm9wZXJ0eSA/IHRyYWNrZWRQcm9wZXJ0eS52YWx1ZSA6IHVuZGVmaW5lZFxyXG5cclxuICBjb25zdCBzYW1lUmVmID0gcHJldk9iaiA9PT0gb2JqXHJcblxyXG4gIGlmIChzYW1lUGFyZW50UmVmICYmICFzYW1lUmVmICYmICFOdW1iZXIuaXNOYU4ob2JqKSkge1xyXG4gICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogdHJ1ZSwgcGF0aCB9XHJcbiAgfVxyXG5cclxuICBpZiAoaXNJbW11dGFibGUocHJldk9iaikgfHwgaXNJbW11dGFibGUob2JqKSkge1xyXG4gICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfVxyXG4gIH1cclxuXHJcbiAgLy8gR2F0aGVyIGFsbCBrZXlzIGZyb20gcHJldiAodHJhY2tlZCkgYW5kIGFmdGVyIG9ianNcclxuICBjb25zdCBrZXlzVG9EZXRlY3Q6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge31cclxuICBmb3IgKGxldCBrZXkgaW4gdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuKSB7XHJcbiAgICBrZXlzVG9EZXRlY3Rba2V5XSA9IHRydWVcclxuICB9XHJcbiAgZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlXHJcbiAgfVxyXG5cclxuICBjb25zdCBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMFxyXG5cclxuICBmb3IgKGxldCBrZXkgaW4ga2V5c1RvRGV0ZWN0KSB7XHJcbiAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyAnLicgKyBrZXkgOiBrZXlcclxuXHJcbiAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgIGNvbnN0IGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZSgoaWdub3JlZCkgPT4ge1xyXG4gICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChoYXNNYXRjaGVzKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdE11dGF0aW9ucyhcclxuICAgICAgaXNJbW11dGFibGUsXHJcbiAgICAgIGlnbm9yZWRQYXRocyxcclxuICAgICAgdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuW2tleV0sXHJcbiAgICAgIG9ialtrZXldLFxyXG4gICAgICBzYW1lUmVmLFxyXG4gICAgICBuZXN0ZWRQYXRoXHJcbiAgICApXHJcblxyXG4gICAgaWYgKHJlc3VsdC53YXNNdXRhdGVkKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfVxyXG59XHJcblxyXG50eXBlIElzSW1tdXRhYmxlRnVuYyA9ICh2YWx1ZTogYW55KSA9PiBib29sZWFuXHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgYGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSgpYC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmVPcHRpb25zIHtcclxuICAvKipcclxuICAgIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgY29uc2lkZXJlZCB0byBiZSBpbW11dGFibGUuXHJcbiAgICBUaGlzIGZ1bmN0aW9uIGlzIGFwcGxpZWQgcmVjdXJzaXZlbHkgdG8gZXZlcnkgdmFsdWUgY29udGFpbmVkIGluIHRoZSBzdGF0ZS5cclxuICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdpbGwgcmV0dXJuIHRydWUgZm9yIHByaW1pdGl2ZSB0eXBlcyBcclxuICAgIChsaWtlIG51bWJlcnMsIHN0cmluZ3MsIGJvb2xlYW5zLCBudWxsIGFuZCB1bmRlZmluZWQpLlxyXG4gICAqL1xyXG4gIGlzSW1tdXRhYmxlPzogSXNJbW11dGFibGVGdW5jXHJcbiAgLyoqIFxyXG4gICAgQW4gYXJyYXkgb2YgZG90LXNlcGFyYXRlZCBwYXRoIHN0cmluZ3MgdGhhdCBtYXRjaCBuYW1lZCBub2RlcyBmcm9tIFxyXG4gICAgdGhlIHJvb3Qgc3RhdGUgdG8gaWdub3JlIHdoZW4gY2hlY2tpbmcgZm9yIGltbXV0YWJpbGl0eS5cclxuICAgIERlZmF1bHRzIHRvIHVuZGVmaW5lZFxyXG4gICAqL1xyXG4gIGlnbm9yZWRQYXRocz86IElnbm9yZVBhdGhzXHJcbiAgLyoqIFByaW50IGEgd2FybmluZyBpZiBjaGVja3MgdGFrZSBsb25nZXIgdGhhbiBOIG1zLiBEZWZhdWx0OiAzMm1zICovXHJcbiAgd2FybkFmdGVyPzogbnVtYmVyXHJcbiAgLy8gQGRlcHJlY2F0ZWQuIFVzZSBpZ25vcmVkUGF0aHNcclxuICBpZ25vcmU/OiBzdHJpbmdbXVxyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG1pZGRsZXdhcmUgdGhhdCBjaGVja3Mgd2hldGhlciBhbnkgc3RhdGUgd2FzIG11dGF0ZWQgaW4gYmV0d2VlblxyXG4gKiBkaXNwYXRjaGVzIG9yIGR1cmluZyBhIGRpc3BhdGNoLiBJZiBhbnkgbXV0YXRpb25zIGFyZSBkZXRlY3RlZCwgYW4gZXJyb3IgaXNcclxuICogdGhyb3duLlxyXG4gKlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBNaWRkbGV3YXJlIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoXHJcbiAgb3B0aW9uczogSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlT3B0aW9ucyA9IHt9XHJcbik6IE1pZGRsZXdhcmUge1xyXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICByZXR1cm4gKCkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IG5leHQoYWN0aW9uKVxyXG4gIH1cclxuXHJcbiAgbGV0IHtcclxuICAgIGlzSW1tdXRhYmxlID0gaXNJbW11dGFibGVEZWZhdWx0LFxyXG4gICAgaWdub3JlZFBhdGhzLFxyXG4gICAgd2FybkFmdGVyID0gMzIsXHJcbiAgICBpZ25vcmUsXHJcbiAgfSA9IG9wdGlvbnNcclxuXHJcbiAgLy8gQWxpYXMgaWdub3JlLT5pZ25vcmVkUGF0aHMsIGJ1dCBwcmVmZXIgaWdub3JlZFBhdGhzIGlmIHByZXNlbnRcclxuICBpZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMgfHwgaWdub3JlXHJcblxyXG4gIGNvbnN0IHRyYWNrID0gdHJhY2tGb3JNdXRhdGlvbnMuYmluZChudWxsLCBpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzKVxyXG5cclxuICByZXR1cm4gKHsgZ2V0U3RhdGUgfSkgPT4ge1xyXG4gICAgbGV0IHN0YXRlID0gZ2V0U3RhdGUoKVxyXG4gICAgbGV0IHRyYWNrZXIgPSB0cmFjayhzdGF0ZSlcclxuXHJcbiAgICBsZXQgcmVzdWx0XHJcbiAgICByZXR1cm4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcclxuICAgICAgY29uc3QgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyhcclxuICAgICAgICB3YXJuQWZ0ZXIsXHJcbiAgICAgICAgJ0ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuICAgICAgKVxyXG5cclxuICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcclxuICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKClcclxuXHJcbiAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKVxyXG4gICAgICAgIC8vIFRyYWNrIGJlZm9yZSBwb3RlbnRpYWxseSBub3QgbWVldGluZyB0aGUgaW52YXJpYW50XHJcbiAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKVxyXG5cclxuICAgICAgICBpbnZhcmlhbnQoXHJcbiAgICAgICAgICAhcmVzdWx0Lndhc011dGF0ZWQsXHJcbiAgICAgICAgICBgQSBzdGF0ZSBtdXRhdGlvbiB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiBkaXNwYXRjaGVzLCBpbiB0aGUgcGF0aCAnJHtcclxuICAgICAgICAgICAgcmVzdWx0LnBhdGggfHwgJydcclxuICAgICAgICAgIH0nLiAgVGhpcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlgXHJcbiAgICAgICAgKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgY29uc3QgZGlzcGF0Y2hlZEFjdGlvbiA9IG5leHQoYWN0aW9uKVxyXG5cclxuICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcclxuICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKClcclxuXHJcbiAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKVxyXG4gICAgICAgIC8vIFRyYWNrIGJlZm9yZSBwb3RlbnRpYWxseSBub3QgbWVldGluZyB0aGUgaW52YXJpYW50XHJcbiAgICAgICAgdHJhY2tlciA9IHRyYWNrKHN0YXRlKVxyXG5cclxuICAgICAgICByZXN1bHQud2FzTXV0YXRlZCAmJlxyXG4gICAgICAgICAgaW52YXJpYW50KFxyXG4gICAgICAgICAgICAhcmVzdWx0Lndhc011dGF0ZWQsXHJcbiAgICAgICAgICAgIGBBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBpbnNpZGUgYSBkaXNwYXRjaCwgaW4gdGhlIHBhdGg6ICR7XHJcbiAgICAgICAgICAgICAgcmVzdWx0LnBhdGggfHwgJydcclxuICAgICAgICAgICAgfS4gVGFrZSBhIGxvb2sgYXQgdGhlIHJlZHVjZXIocykgaGFuZGxpbmcgdGhlIGFjdGlvbiAke3N0cmluZ2lmeShcclxuICAgICAgICAgICAgICBhY3Rpb25cclxuICAgICAgICAgICAgKX0uIChodHRwczovL3JlZHV4LmpzLm9yZy9zdHlsZS1ndWlkZS9zdHlsZS1ndWlkZSNkby1ub3QtbXV0YXRlLXN0YXRlKWBcclxuICAgICAgICAgIClcclxuICAgICAgfSlcclxuXHJcbiAgICAgIG1lYXN1cmVVdGlscy53YXJuSWZFeGNlZWRlZCgpXHJcblxyXG4gICAgICByZXR1cm4gZGlzcGF0Y2hlZEFjdGlvblxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0J1xyXG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHsgZ2V0VGltZU1lYXN1cmVVdGlscyB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXNzZWQgdmFsdWUgaXMgXCJwbGFpblwiLCBpLmUuIGEgdmFsdWUgdGhhdCBpcyBlaXRoZXJcclxuICogZGlyZWN0bHkgSlNPTi1zZXJpYWxpemFibGUgKGJvb2xlYW4sIG51bWJlciwgc3RyaW5nLCBhcnJheSwgcGxhaW4gb2JqZWN0KVxyXG4gKiBvciBgdW5kZWZpbmVkYC5cclxuICpcclxuICogQHBhcmFtIHZhbCBUaGUgdmFsdWUgdG8gY2hlY2suXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluKHZhbDogYW55KSB7XHJcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWxcclxuICByZXR1cm4gKFxyXG4gICAgdmFsID09IG51bGwgfHxcclxuICAgIHR5cGUgPT09ICdzdHJpbmcnIHx8XHJcbiAgICB0eXBlID09PSAnYm9vbGVhbicgfHxcclxuICAgIHR5cGUgPT09ICdudW1iZXInIHx8XHJcbiAgICBBcnJheS5pc0FycmF5KHZhbCkgfHxcclxuICAgIGlzUGxhaW5PYmplY3QodmFsKVxyXG4gIClcclxufVxyXG5cclxuaW50ZXJmYWNlIE5vblNlcmlhbGl6YWJsZVZhbHVlIHtcclxuICBrZXlQYXRoOiBzdHJpbmdcclxuICB2YWx1ZTogdW5rbm93blxyXG59XHJcblxyXG50eXBlIElnbm9yZVBhdGhzID0gcmVhZG9ubHkgKHN0cmluZyB8IFJlZ0V4cClbXVxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoXHJcbiAgdmFsdWU6IHVua25vd24sXHJcbiAgcGF0aDogc3RyaW5nID0gJycsXHJcbiAgaXNTZXJpYWxpemFibGU6ICh2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhbiA9IGlzUGxhaW4sXHJcbiAgZ2V0RW50cmllcz86ICh2YWx1ZTogdW5rbm93bikgPT4gW3N0cmluZywgYW55XVtdLFxyXG4gIGlnbm9yZWRQYXRoczogSWdub3JlUGF0aHMgPSBbXSxcclxuICBjYWNoZT86IFdlYWtTZXQ8b2JqZWN0PlxyXG4pOiBOb25TZXJpYWxpemFibGVWYWx1ZSB8IGZhbHNlIHtcclxuICBsZXQgZm91bmROZXN0ZWRTZXJpYWxpemFibGU6IE5vblNlcmlhbGl6YWJsZVZhbHVlIHwgZmFsc2VcclxuXHJcbiAgaWYgKCFpc1NlcmlhbGl6YWJsZSh2YWx1ZSkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGtleVBhdGg6IHBhdGggfHwgJzxyb290PicsXHJcbiAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGlmIChjYWNoZT8uaGFzKHZhbHVlKSkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGNvbnN0IGVudHJpZXMgPSBnZXRFbnRyaWVzICE9IG51bGwgPyBnZXRFbnRyaWVzKHZhbHVlKSA6IE9iamVjdC5lbnRyaWVzKHZhbHVlKVxyXG5cclxuICBjb25zdCBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMFxyXG5cclxuICBmb3IgKGNvbnN0IFtrZXksIG5lc3RlZFZhbHVlXSBvZiBlbnRyaWVzKSB7XHJcbiAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyAnLicgKyBrZXkgOiBrZXlcclxuXHJcbiAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgIGNvbnN0IGhhc01hdGNoZXMgPSBpZ25vcmVkUGF0aHMuc29tZSgoaWdub3JlZCkgPT4ge1xyXG4gICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkXHJcbiAgICAgIH0pXHJcbiAgICAgIGlmIChoYXNNYXRjaGVzKSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNTZXJpYWxpemFibGUobmVzdGVkVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAga2V5UGF0aDogbmVzdGVkUGF0aCxcclxuICAgICAgICB2YWx1ZTogbmVzdGVkVmFsdWUsXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShcclxuICAgICAgICBuZXN0ZWRWYWx1ZSxcclxuICAgICAgICBuZXN0ZWRQYXRoLFxyXG4gICAgICAgIGlzU2VyaWFsaXphYmxlLFxyXG4gICAgICAgIGdldEVudHJpZXMsXHJcbiAgICAgICAgaWdub3JlZFBhdGhzLFxyXG4gICAgICAgIGNhY2hlXHJcbiAgICAgIClcclxuXHJcbiAgICAgIGlmIChmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSkge1xyXG4gICAgICAgIHJldHVybiBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoY2FjaGUgJiYgaXNOZXN0ZWRGcm96ZW4odmFsdWUpKSBjYWNoZS5hZGQodmFsdWUpXHJcblxyXG4gIHJldHVybiBmYWxzZVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWRGcm96ZW4odmFsdWU6IG9iamVjdCkge1xyXG4gIGlmICghT2JqZWN0LmlzRnJvemVuKHZhbHVlKSkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGZvciAoY29uc3QgbmVzdGVkVmFsdWUgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIHtcclxuICAgIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgIT09ICdvYmplY3QnIHx8IG5lc3RlZFZhbHVlID09PSBudWxsKSBjb250aW51ZVxyXG5cclxuICAgIGlmICghaXNOZXN0ZWRGcm96ZW4obmVzdGVkVmFsdWUpKSByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIHJldHVybiB0cnVlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBmdW5jdGlvbiB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGNvbnNpZGVyZWQgc2VyaWFsaXphYmxlLiBUaGlzXHJcbiAgICogZnVuY3Rpb24gaXMgYXBwbGllZCByZWN1cnNpdmVseSB0byBldmVyeSB2YWx1ZSBjb250YWluZWQgaW4gdGhlXHJcbiAgICogc3RhdGUuIERlZmF1bHRzIHRvIGBpc1BsYWluKClgLlxyXG4gICAqL1xyXG4gIGlzU2VyaWFsaXphYmxlPzogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW5cclxuICAvKipcclxuICAgKiBUaGUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmV0cmlldmUgZW50cmllcyBmcm9tIGVhY2hcclxuICAgKiB2YWx1ZS4gIElmIHVuc3BlY2lmaWVkLCBgT2JqZWN0LmVudHJpZXNgIHdpbGwgYmUgdXNlZC4gRGVmYXVsdHNcclxuICAgKiB0byBgdW5kZWZpbmVkYC5cclxuICAgKi9cclxuICBnZXRFbnRyaWVzPzogKHZhbHVlOiBhbnkpID0+IFtzdHJpbmcsIGFueV1bXVxyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBhY3Rpb24gdHlwZXMgdG8gaWdub3JlIHdoZW4gY2hlY2tpbmcgZm9yIHNlcmlhbGl6YWJpbGl0eS5cclxuICAgKiBEZWZhdWx0cyB0byBbXVxyXG4gICAqL1xyXG4gIGlnbm9yZWRBY3Rpb25zPzogc3RyaW5nW11cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgZG90LXNlcGFyYXRlZCBwYXRoIHN0cmluZ3Mgb3IgcmVndWxhciBleHByZXNzaW9ucyB0byBpZ25vcmVcclxuICAgKiB3aGVuIGNoZWNraW5nIGZvciBzZXJpYWxpemFiaWxpdHksIERlZmF1bHRzIHRvXHJcbiAgICogWydtZXRhLmFyZycsICdtZXRhLmJhc2VRdWVyeU1ldGEnXVxyXG4gICAqL1xyXG4gIGlnbm9yZWRBY3Rpb25QYXRocz86IChzdHJpbmcgfCBSZWdFeHApW11cclxuXHJcbiAgLyoqXHJcbiAgICogQW4gYXJyYXkgb2YgZG90LXNlcGFyYXRlZCBwYXRoIHN0cmluZ3Mgb3IgcmVndWxhciBleHByZXNzaW9ucyB0byBpZ25vcmVcclxuICAgKiB3aGVuIGNoZWNraW5nIGZvciBzZXJpYWxpemFiaWxpdHksIERlZmF1bHRzIHRvIFtdXHJcbiAgICovXHJcbiAgaWdub3JlZFBhdGhzPzogKHN0cmluZyB8IFJlZ0V4cClbXVxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGlvbiB0aW1lIHdhcm5pbmcgdGhyZXNob2xkLiBJZiB0aGUgbWlkZGxld2FyZSB0YWtlcyBsb25nZXJcclxuICAgKiB0aGFuIGB3YXJuQWZ0ZXJgIG1zLCBhIHdhcm5pbmcgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbnNvbGUuXHJcbiAgICogRGVmYXVsdHMgdG8gMzJtcy5cclxuICAgKi9cclxuICB3YXJuQWZ0ZXI/OiBudW1iZXJcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0IG91dCBvZiBjaGVja2luZyBzdGF0ZS4gV2hlbiBzZXQgdG8gYHRydWVgLCBvdGhlciBzdGF0ZS1yZWxhdGVkIHBhcmFtcyB3aWxsIGJlIGlnbm9yZWQuXHJcbiAgICovXHJcbiAgaWdub3JlU3RhdGU/OiBib29sZWFuXHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdCBvdXQgb2YgY2hlY2tpbmcgYWN0aW9ucy4gV2hlbiBzZXQgdG8gYHRydWVgLCBvdGhlciBhY3Rpb24tcmVsYXRlZCBwYXJhbXMgd2lsbCBiZSBpZ25vcmVkLlxyXG4gICAqL1xyXG4gIGlnbm9yZUFjdGlvbnM/OiBib29sZWFuXHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdCBvdXQgb2YgY2FjaGluZyB0aGUgcmVzdWx0cy4gVGhlIGNhY2hlIHVzZXMgYSBXZWFrU2V0IGFuZCBzcGVlZHMgdXAgcmVwZWF0ZWQgY2hlY2tpbmcgcHJvY2Vzc2VzLlxyXG4gICAqIFRoZSBjYWNoZSBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGlmIG5vIGJyb3dzZXIgc3VwcG9ydCBmb3IgV2Vha1NldCBpcyBwcmVzZW50LlxyXG4gICAqL1xyXG4gIGRpc2FibGVDYWNoZT86IGJvb2xlYW5cclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtaWRkbGV3YXJlIHRoYXQsIGFmdGVyIGV2ZXJ5IHN0YXRlIGNoYW5nZSwgY2hlY2tzIGlmIHRoZSBuZXdcclxuICogc3RhdGUgaXMgc2VyaWFsaXphYmxlLiBJZiBhIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgaXMgZm91bmQgd2l0aGluIHRoZVxyXG4gKiBzdGF0ZSwgYW4gZXJyb3IgaXMgcHJpbnRlZCB0byB0aGUgY29uc29sZS5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgTWlkZGxld2FyZSBvcHRpb25zLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKFxyXG4gIG9wdGlvbnM6IFNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZU9wdGlvbnMgPSB7fVxyXG4pOiBNaWRkbGV3YXJlIHtcclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgcmV0dXJuICgpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiBuZXh0KGFjdGlvbilcclxuICB9XHJcbiAgY29uc3Qge1xyXG4gICAgaXNTZXJpYWxpemFibGUgPSBpc1BsYWluLFxyXG4gICAgZ2V0RW50cmllcyxcclxuICAgIGlnbm9yZWRBY3Rpb25zID0gW10sXHJcbiAgICBpZ25vcmVkQWN0aW9uUGF0aHMgPSBbJ21ldGEuYXJnJywgJ21ldGEuYmFzZVF1ZXJ5TWV0YSddLFxyXG4gICAgaWdub3JlZFBhdGhzID0gW10sXHJcbiAgICB3YXJuQWZ0ZXIgPSAzMixcclxuICAgIGlnbm9yZVN0YXRlID0gZmFsc2UsXHJcbiAgICBpZ25vcmVBY3Rpb25zID0gZmFsc2UsXHJcbiAgICBkaXNhYmxlQ2FjaGUgPSBmYWxzZSxcclxuICB9ID0gb3B0aW9uc1xyXG5cclxuICBjb25zdCBjYWNoZTogV2Vha1NldDxvYmplY3Q+IHwgdW5kZWZpbmVkID1cclxuICAgICFkaXNhYmxlQ2FjaGUgJiYgV2Vha1NldCA/IG5ldyBXZWFrU2V0KCkgOiB1bmRlZmluZWRcclxuXHJcbiAgcmV0dXJuIChzdG9yZUFQSSkgPT4gKG5leHQpID0+IChhY3Rpb24pID0+IHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IG5leHQoYWN0aW9uKVxyXG5cclxuICAgIGNvbnN0IG1lYXN1cmVVdGlscyA9IGdldFRpbWVNZWFzdXJlVXRpbHMoXHJcbiAgICAgIHdhcm5BZnRlcixcclxuICAgICAgJ1NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSdcclxuICAgIClcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFpZ25vcmVBY3Rpb25zICYmXHJcbiAgICAgICEoaWdub3JlZEFjdGlvbnMubGVuZ3RoICYmIGlnbm9yZWRBY3Rpb25zLmluZGV4T2YoYWN0aW9uLnR5cGUpICE9PSAtMSlcclxuICAgICkge1xyXG4gICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kQWN0aW9uTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoXHJcbiAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgIGlzU2VyaWFsaXphYmxlLFxyXG4gICAgICAgICAgZ2V0RW50cmllcyxcclxuICAgICAgICAgIGlnbm9yZWRBY3Rpb25QYXRocyxcclxuICAgICAgICAgIGNhY2hlXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBpZiAoZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZSkge1xyXG4gICAgICAgICAgY29uc3QgeyBrZXlQYXRoLCB2YWx1ZSB9ID0gZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZVxyXG5cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgIGBBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIGFuIGFjdGlvbiwgaW4gdGhlIHBhdGg6IFxcYCR7a2V5UGF0aH1cXGAuIFZhbHVlOmAsXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICAnXFxuVGFrZSBhIGxvb2sgYXQgdGhlIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGFjdGlvbjogJyxcclxuICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAnXFxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvYWN0aW9ucyN3aHktc2hvdWxkLXR5cGUtYmUtYS1zdHJpbmctb3ItYXQtbGVhc3Qtc2VyaWFsaXphYmxlLXdoeS1zaG91bGQtbXktYWN0aW9uLXR5cGVzLWJlLWNvbnN0YW50cyknLFxyXG4gICAgICAgICAgICAnXFxuKFRvIGFsbG93IG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIHNlZTogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy91c2FnZS91c2FnZS1ndWlkZSN3b3JraW5nLXdpdGgtbm9uLXNlcmlhbGl6YWJsZS1kYXRhKSdcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpZ25vcmVTdGF0ZSkge1xyXG4gICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmVBUEkuZ2V0U3RhdGUoKVxyXG5cclxuICAgICAgICBjb25zdCBmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUoXHJcbiAgICAgICAgICBzdGF0ZSxcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgaXNTZXJpYWxpemFibGUsXHJcbiAgICAgICAgICBnZXRFbnRyaWVzLFxyXG4gICAgICAgICAgaWdub3JlZFBhdGhzLFxyXG4gICAgICAgICAgY2FjaGVcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIGlmIChmb3VuZFN0YXRlTm9uU2VyaWFsaXphYmxlVmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IHsga2V5UGF0aCwgdmFsdWUgfSA9IGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZVxyXG5cclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgIGBBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIHRoZSBzdGF0ZSwgaW4gdGhlIHBhdGg6IFxcYCR7a2V5UGF0aH1cXGAuIFZhbHVlOmAsXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICBgXHJcblRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoaXMgYWN0aW9uIHR5cGU6ICR7YWN0aW9uLnR5cGV9LlxyXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9vcmdhbml6aW5nLXN0YXRlI2Nhbi1pLXB1dC1mdW5jdGlvbnMtcHJvbWlzZXMtb3Itb3RoZXItbm9uLXNlcmlhbGl6YWJsZS1pdGVtcy1pbi1teS1zdG9yZS1zdGF0ZSlgXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0XHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IERyYWZ0IH0gZnJvbSAnaW1tZXInXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUsIHsgaXNEcmFmdCwgaXNEcmFmdGFibGUgfSBmcm9tICdpbW1lcidcclxuaW1wb3J0IHR5cGUgeyBBbnlBY3Rpb24sIEFjdGlvbiwgUmVkdWNlciB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyIH0gZnJvbSAnLi9tYXBCdWlsZGVycydcclxuaW1wb3J0IHsgZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2sgfSBmcm9tICcuL21hcEJ1aWxkZXJzJ1xyXG5pbXBvcnQgdHlwZSB7IE5vSW5mZXIgfSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHsgZnJlZXplRHJhZnRhYmxlIH0gZnJvbSAnLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiBEZWZpbmVzIGEgbWFwcGluZyBmcm9tIGFjdGlvbiB0eXBlcyB0byBjb3JyZXNwb25kaW5nIGFjdGlvbiBvYmplY3Qgc2hhcGVzLlxyXG4gKlxyXG4gKiBAZGVwcmVjYXRlZCBUaGlzIHNob3VsZCBub3QgYmUgdXNlZCBtYW51YWxseSAtIGl0IGlzIG9ubHkgdXNlZCBmb3IgaW50ZXJuYWxcclxuICogICAgICAgICAgICAgaW5mZXJlbmNlIHB1cnBvc2VzIGFuZCBzaG91bGQgbm90IGhhdmUgYW55IGZ1cnRoZXIgdmFsdWUuXHJcbiAqICAgICAgICAgICAgIEl0IG1pZ2h0IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQWN0aW9uczxUIGV4dGVuZHMga2V5b2YgYW55ID0gc3RyaW5nPiA9IFJlY29yZDxULCBBY3Rpb24+XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWQgdXNlIGBUeXBlR3VhcmRgIGluc3RlYWRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uTWF0Y2hlcjxBIGV4dGVuZHMgQW55QWN0aW9uPiB7XHJcbiAgKGFjdGlvbjogQW55QWN0aW9uKTogYWN0aW9uIGlzIEFcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uTWF0Y2hlckRlc2NyaXB0aW9uPFMsIEEgZXh0ZW5kcyBBbnlBY3Rpb24+ID0ge1xyXG4gIG1hdGNoZXI6IEFjdGlvbk1hdGNoZXI8QT5cclxuICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTLCBOb0luZmVyPEE+PlxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSZWFkb25seUFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4gPSBSZWFkb25seUFycmF5PFxyXG4gIEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbjxTLCBhbnk+XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4gPSBBcnJheTxcclxuICBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb248UywgYW55PlxyXG4+XHJcblxyXG4vKipcclxuICogQSAqY2FzZSByZWR1Y2VyKiBpcyBhIHJlZHVjZXIgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgYWN0aW9uIHR5cGUuIENhc2VcclxuICogcmVkdWNlcnMgY2FuIGJlIGNvbXBvc2VkIHRvIGZ1bGwgcmVkdWNlcnMgdXNpbmcgYGNyZWF0ZVJlZHVjZXIoKWAuXHJcbiAqXHJcbiAqIFVubGlrZSBhIG5vcm1hbCBSZWR1eCByZWR1Y2VyLCBhIGNhc2UgcmVkdWNlciBpcyBuZXZlciBjYWxsZWQgd2l0aCBhblxyXG4gKiBgdW5kZWZpbmVkYCBzdGF0ZSB0byBkZXRlcm1pbmUgdGhlIGluaXRpYWwgc3RhdGUuIEluc3RlYWQsIHRoZSBpbml0aWFsXHJcbiAqIHN0YXRlIGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGBjcmVhdGVSZWR1Y2VyKClgLlxyXG4gKlxyXG4gKiBJbiBhZGRpdGlvbiwgYSBjYXNlIHJlZHVjZXIgY2FuIGNob29zZSB0byBtdXRhdGUgdGhlIHBhc3NlZC1pbiBgc3RhdGVgXHJcbiAqIHZhbHVlIGRpcmVjdGx5IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgbmV3IHN0YXRlLiBUaGlzIGRvZXMgbm90IGFjdHVhbGx5XHJcbiAqIGNhdXNlIHRoZSBzdG9yZSBzdGF0ZSB0byBiZSBtdXRhdGVkIGRpcmVjdGx5OyBpbnN0ZWFkLCB0aGFua3MgdG9cclxuICogW2ltbWVyXShodHRwczovL2dpdGh1Yi5jb20vbXdlc3RzdHJhdGUvaW1tZXIpLCB0aGUgbXV0YXRpb25zIGFyZVxyXG4gKiB0cmFuc2xhdGVkIHRvIGNvcHkgb3BlcmF0aW9ucyB0aGF0IHJlc3VsdCBpbiBhIG5ldyBzdGF0ZS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ2FzZVJlZHVjZXI8UyA9IGFueSwgQSBleHRlbmRzIEFjdGlvbiA9IEFueUFjdGlvbj4gPSAoXHJcbiAgc3RhdGU6IERyYWZ0PFM+LFxyXG4gIGFjdGlvbjogQVxyXG4pID0+IE5vSW5mZXI8Uz4gfCB2b2lkIHwgRHJhZnQ8Tm9JbmZlcjxTPj5cclxuXHJcbi8qKlxyXG4gKiBBIG1hcHBpbmcgZnJvbSBhY3Rpb24gdHlwZXMgdG8gY2FzZSByZWR1Y2VycyBmb3IgYGNyZWF0ZVJlZHVjZXIoKWAuXHJcbiAqXHJcbiAqIEBkZXByZWNhdGVkIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIG1hbnVhbGx5IC0gaXQgaXMgb25seSB1c2VkXHJcbiAqICAgICAgICAgICAgIGZvciBpbnRlcm5hbCBpbmZlcmVuY2UgcHVycG9zZXMgYW5kIHVzaW5nIGl0IG1hbnVhbGx5XHJcbiAqICAgICAgICAgICAgIHdvdWxkIGxlYWQgdG8gdHlwZSBlcmFzdXJlLlxyXG4gKiAgICAgICAgICAgICBJdCBtaWdodCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENhc2VSZWR1Y2VyczxTLCBBUyBleHRlbmRzIEFjdGlvbnM+ID0ge1xyXG4gIFtUIGluIGtleW9mIEFTXTogQVNbVF0gZXh0ZW5kcyBBY3Rpb24gPyBDYXNlUmVkdWNlcjxTLCBBU1tUXT4gOiB2b2lkXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE5vdEZ1bmN0aW9uPFQ+ID0gVCBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBUXHJcblxyXG5mdW5jdGlvbiBpc1N0YXRlRnVuY3Rpb248Uz4oeDogdW5rbm93bik6IHggaXMgKCkgPT4gUyB7XHJcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFMgZXh0ZW5kcyBOb3RGdW5jdGlvbjxhbnk+PiA9IFJlZHVjZXI8Uz4gJiB7XHJcbiAgZ2V0SW5pdGlhbFN0YXRlOiAoKSA9PiBTXHJcbn1cclxuXHJcbmxldCBoYXNXYXJuZWRBYm91dE9iamVjdE5vdGF0aW9uID0gZmFsc2VcclxuXHJcbi8qKlxyXG4gKiBBIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSByZWR1Y2VyIGFzIGEgbWFwcGluZyBmcm9tIGFjdGlvblxyXG4gKiB0eXBlIHRvICpjYXNlIHJlZHVjZXIqIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSB0aGVzZSBhY3Rpb24gdHlwZXMuIFRoZVxyXG4gKiByZWR1Y2VyJ3MgaW5pdGlhbCBzdGF0ZSBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxyXG4gKlxyXG4gKiBAcmVtYXJrc1xyXG4gKiBUaGUgYm9keSBvZiBldmVyeSBjYXNlIHJlZHVjZXIgaXMgaW1wbGljaXRseSB3cmFwcGVkIHdpdGggYSBjYWxsIHRvXHJcbiAqIGBwcm9kdWNlKClgIGZyb20gdGhlIFtpbW1lcl0oaHR0cHM6Ly9naXRodWIuY29tL213ZXN0c3RyYXRlL2ltbWVyKSBsaWJyYXJ5LlxyXG4gKiBUaGlzIG1lYW5zIHRoYXQgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIGEgbmV3IHN0YXRlIG9iamVjdCwgeW91IGNhbiBhbHNvXHJcbiAqIG11dGF0ZSB0aGUgcGFzc2VkLWluIHN0YXRlIG9iamVjdCBkaXJlY3RseTsgdGhlc2UgbXV0YXRpb25zIHdpbGwgdGhlbiBiZVxyXG4gKiBhdXRvbWF0aWNhbGx5IGFuZCBlZmZpY2llbnRseSB0cmFuc2xhdGVkIGludG8gY29waWVzLCBnaXZpbmcgeW91IGJvdGhcclxuICogY29udmVuaWVuY2UgYW5kIGltbXV0YWJpbGl0eS5cclxuICpcclxuICogQG92ZXJsb2FkU3VtbWFyeVxyXG4gKiBUaGlzIG92ZXJsb2FkIGFjY2VwdHMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgYGJ1aWxkZXJgIG9iamVjdCBhcyBpdHMgYXJndW1lbnQuXHJcbiAqIFRoYXQgYnVpbGRlciBwcm92aWRlcyBgYWRkQ2FzZWAsIGBhZGRNYXRjaGVyYCBhbmQgYGFkZERlZmF1bHRDYXNlYCBmdW5jdGlvbnMgdGhhdCBtYXkgYmVcclxuICogY2FsbGVkIHRvIGRlZmluZSB3aGF0IGFjdGlvbnMgdGhpcyByZWR1Y2VyIHdpbGwgaGFuZGxlLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5pdGlhbFN0YXRlIC0gYFN0YXRlIHwgKCgpID0+IFN0YXRlKWA6IFRoZSBpbml0aWFsIHN0YXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmVkdWNlciBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUuIFRoaXMgbWF5IGFsc28gYmUgYSBcImxhenkgaW5pdGlhbGl6ZXJcIiBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIHJldHVybiBhbiBpbml0aWFsIHN0YXRlIHZhbHVlIHdoZW4gY2FsbGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB3aGVuZXZlciB0aGUgcmVkdWNlciBpcyBjYWxsZWQgd2l0aCBgdW5kZWZpbmVkYCBhcyBpdHMgc3RhdGUgdmFsdWUsIGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBjYXNlcyBsaWtlIHJlYWRpbmcgaW5pdGlhbCBzdGF0ZSBmcm9tIGBsb2NhbFN0b3JhZ2VgLlxyXG4gKiBAcGFyYW0gYnVpbGRlckNhbGxiYWNrIC0gYChidWlsZGVyOiBCdWlsZGVyKSA9PiB2b2lkYCBBIGNhbGxiYWNrIHRoYXQgcmVjZWl2ZXMgYSAqYnVpbGRlciogb2JqZWN0IHRvIGRlZmluZVxyXG4gKiAgIGNhc2UgcmVkdWNlcnMgdmlhIGNhbGxzIHRvIGBidWlsZGVyLmFkZENhc2UoYWN0aW9uQ3JlYXRvck9yVHlwZSwgcmVkdWNlcilgLlxyXG4gKiBAZXhhbXBsZVxyXG5gYGB0c1xyXG5pbXBvcnQge1xyXG4gIGNyZWF0ZUFjdGlvbixcclxuICBjcmVhdGVSZWR1Y2VyLFxyXG4gIEFueUFjdGlvbixcclxuICBQYXlsb2FkQWN0aW9uLFxyXG59IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XHJcblxyXG5jb25zdCBpbmNyZW1lbnQgPSBjcmVhdGVBY3Rpb248bnVtYmVyPihcImluY3JlbWVudFwiKTtcclxuY29uc3QgZGVjcmVtZW50ID0gY3JlYXRlQWN0aW9uPG51bWJlcj4oXCJkZWNyZW1lbnRcIik7XHJcblxyXG5mdW5jdGlvbiBpc0FjdGlvbldpdGhOdW1iZXJQYXlsb2FkKFxyXG4gIGFjdGlvbjogQW55QWN0aW9uXHJcbik6IGFjdGlvbiBpcyBQYXlsb2FkQWN0aW9uPG51bWJlcj4ge1xyXG4gIHJldHVybiB0eXBlb2YgYWN0aW9uLnBheWxvYWQgPT09IFwibnVtYmVyXCI7XHJcbn1cclxuXHJcbmNvbnN0IHJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKFxyXG4gIHtcclxuICAgIGNvdW50ZXI6IDAsXHJcbiAgICBzdW1PZk51bWJlclBheWxvYWRzOiAwLFxyXG4gICAgdW5oYW5kbGVkQWN0aW9uczogMCxcclxuICB9LFxyXG4gIChidWlsZGVyKSA9PiB7XHJcbiAgICBidWlsZGVyXHJcbiAgICAgIC5hZGRDYXNlKGluY3JlbWVudCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICAvLyBhY3Rpb24gaXMgaW5mZXJyZWQgY29ycmVjdGx5IGhlcmVcclxuICAgICAgICBzdGF0ZS5jb3VudGVyICs9IGFjdGlvbi5wYXlsb2FkO1xyXG4gICAgICB9KVxyXG4gICAgICAvLyBZb3UgY2FuIGNoYWluIGNhbGxzLCBvciBoYXZlIHNlcGFyYXRlIGBidWlsZGVyLmFkZENhc2UoKWAgbGluZXMgZWFjaCB0aW1lXHJcbiAgICAgIC5hZGRDYXNlKGRlY3JlbWVudCwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICBzdGF0ZS5jb3VudGVyIC09IGFjdGlvbi5wYXlsb2FkO1xyXG4gICAgICB9KVxyXG4gICAgICAvLyBZb3UgY2FuIGFwcGx5IGEgXCJtYXRjaGVyIGZ1bmN0aW9uXCIgdG8gaW5jb21pbmcgYWN0aW9uc1xyXG4gICAgICAuYWRkTWF0Y2hlcihpc0FjdGlvbldpdGhOdW1iZXJQYXlsb2FkLCAoc3RhdGUsIGFjdGlvbikgPT4ge30pXHJcbiAgICAgIC8vIGFuZCBwcm92aWRlIGEgZGVmYXVsdCBjYXNlIGlmIG5vIG90aGVyIGhhbmRsZXJzIG1hdGNoZWRcclxuICAgICAgLmFkZERlZmF1bHRDYXNlKChzdGF0ZSwgYWN0aW9uKSA9PiB7fSk7XHJcbiAgfVxyXG4pO1xyXG5gYGBcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZXI8UyBleHRlbmRzIE5vdEZ1bmN0aW9uPGFueT4+KFxyXG4gIGluaXRpYWxTdGF0ZTogUyB8ICgoKSA9PiBTKSxcclxuICBidWlsZGVyQ2FsbGJhY2s6IChidWlsZGVyOiBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxTPikgPT4gdm9pZFxyXG4pOiBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZTxTPlxyXG5cclxuLyoqXHJcbiAqIEEgdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHJlZHVjZXIgYXMgYSBtYXBwaW5nIGZyb20gYWN0aW9uXHJcbiAqIHR5cGUgdG8gKmNhc2UgcmVkdWNlciogZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoZXNlIGFjdGlvbiB0eXBlcy4gVGhlXHJcbiAqIHJlZHVjZXIncyBpbml0aWFsIHN0YXRlIGlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXHJcbiAqXHJcbiAqIFRoZSBib2R5IG9mIGV2ZXJ5IGNhc2UgcmVkdWNlciBpcyBpbXBsaWNpdGx5IHdyYXBwZWQgd2l0aCBhIGNhbGwgdG9cclxuICogYHByb2R1Y2UoKWAgZnJvbSB0aGUgW2ltbWVyXShodHRwczovL2dpdGh1Yi5jb20vbXdlc3RzdHJhdGUvaW1tZXIpIGxpYnJhcnkuXHJcbiAqIFRoaXMgbWVhbnMgdGhhdCByYXRoZXIgdGhhbiByZXR1cm5pbmcgYSBuZXcgc3RhdGUgb2JqZWN0LCB5b3UgY2FuIGFsc29cclxuICogbXV0YXRlIHRoZSBwYXNzZWQtaW4gc3RhdGUgb2JqZWN0IGRpcmVjdGx5OyB0aGVzZSBtdXRhdGlvbnMgd2lsbCB0aGVuIGJlXHJcbiAqIGF1dG9tYXRpY2FsbHkgYW5kIGVmZmljaWVudGx5IHRyYW5zbGF0ZWQgaW50byBjb3BpZXMsIGdpdmluZyB5b3UgYm90aFxyXG4gKiBjb252ZW5pZW5jZSBhbmQgaW1tdXRhYmlsaXR5LlxyXG4gKiBcclxuICogQG92ZXJsb2FkU3VtbWFyeVxyXG4gKiBUaGlzIG92ZXJsb2FkIGFjY2VwdHMgYW4gb2JqZWN0IHdoZXJlIHRoZSBrZXlzIGFyZSBzdHJpbmcgYWN0aW9uIHR5cGVzLCBhbmQgdGhlIHZhbHVlc1xyXG4gKiBhcmUgY2FzZSByZWR1Y2VyIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhvc2UgYWN0aW9uIHR5cGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gaW5pdGlhbFN0YXRlIC0gYFN0YXRlIHwgKCgpID0+IFN0YXRlKWA6IFRoZSBpbml0aWFsIHN0YXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmVkdWNlciBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUuIFRoaXMgbWF5IGFsc28gYmUgYSBcImxhenkgaW5pdGlhbGl6ZXJcIiBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIHJldHVybiBhbiBpbml0aWFsIHN0YXRlIHZhbHVlIHdoZW4gY2FsbGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB3aGVuZXZlciB0aGUgcmVkdWNlciBpcyBjYWxsZWQgd2l0aCBgdW5kZWZpbmVkYCBhcyBpdHMgc3RhdGUgdmFsdWUsIGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBjYXNlcyBsaWtlIHJlYWRpbmcgaW5pdGlhbCBzdGF0ZSBmcm9tIGBsb2NhbFN0b3JhZ2VgLlxyXG4gKiBAcGFyYW0gYWN0aW9uc01hcCAtIEFuIG9iamVjdCBtYXBwaW5nIGZyb20gYWN0aW9uIHR5cGVzIHRvIF9jYXNlIHJlZHVjZXJzXywgZWFjaCBvZiB3aGljaCBoYW5kbGVzIG9uZSBzcGVjaWZpYyBhY3Rpb24gdHlwZS5cclxuICogQHBhcmFtIGFjdGlvbk1hdGNoZXJzIC0gQW4gYXJyYXkgb2YgbWF0Y2hlciBkZWZpbml0aW9ucyBpbiB0aGUgZm9ybSBge21hdGNoZXIsIHJlZHVjZXJ9YC5cclxuICogICBBbGwgbWF0Y2hpbmcgcmVkdWNlcnMgd2lsbCBiZSBleGVjdXRlZCBpbiBvcmRlciwgaW5kZXBlbmRlbnRseSBpZiBhIGNhc2UgcmVkdWNlciBtYXRjaGVkIG9yIG5vdC5cclxuICogQHBhcmFtIGRlZmF1bHRDYXNlUmVkdWNlciAtIEEgXCJkZWZhdWx0IGNhc2VcIiByZWR1Y2VyIHRoYXQgaXMgZXhlY3V0ZWQgaWYgbm8gY2FzZSByZWR1Y2VyIGFuZCBubyBtYXRjaGVyXHJcbiAqICAgcmVkdWNlciB3YXMgZXhlY3V0ZWQgZm9yIHRoaXMgYWN0aW9uLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG5gYGBqc1xyXG5jb25zdCBjb3VudGVyUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoMCwge1xyXG4gIGluY3JlbWVudDogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlICsgYWN0aW9uLnBheWxvYWQsXHJcbiAgZGVjcmVtZW50OiAoc3RhdGUsIGFjdGlvbikgPT4gc3RhdGUgLSBhY3Rpb24ucGF5bG9hZFxyXG59KVxyXG5cclxuLy8gQWx0ZXJuYXRlbHksIHVzZSBhIFwibGF6eSBpbml0aWFsaXplclwiIHRvIHByb3ZpZGUgdGhlIGluaXRpYWwgc3RhdGVcclxuLy8gKHdvcmtzIHdpdGggZWl0aGVyIGZvcm0gb2YgY3JlYXRlUmVkdWNlcilcclxuY29uc3QgaW5pdGlhbFN0YXRlID0gKCkgPT4gMFxyXG5jb25zdCBjb3VudGVyUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCB7XHJcbiAgaW5jcmVtZW50OiAoc3RhdGUsIGFjdGlvbikgPT4gc3RhdGUgKyBhY3Rpb24ucGF5bG9hZCxcclxuICBkZWNyZW1lbnQ6IChzdGF0ZSwgYWN0aW9uKSA9PiBzdGF0ZSAtIGFjdGlvbi5wYXlsb2FkXHJcbn0pXHJcbmBgYFxyXG4gXHJcbiAqIEFjdGlvbiBjcmVhdG9ycyB0aGF0IHdlcmUgZ2VuZXJhdGVkIHVzaW5nIFtgY3JlYXRlQWN0aW9uYF0oLi9jcmVhdGVBY3Rpb24pIG1heSBiZSB1c2VkIGRpcmVjdGx5IGFzIHRoZSBrZXlzIGhlcmUsIHVzaW5nIGNvbXB1dGVkIHByb3BlcnR5IHN5bnRheDpcclxuXHJcbmBgYGpzXHJcbmNvbnN0IGluY3JlbWVudCA9IGNyZWF0ZUFjdGlvbignaW5jcmVtZW50JylcclxuY29uc3QgZGVjcmVtZW50ID0gY3JlYXRlQWN0aW9uKCdkZWNyZW1lbnQnKVxyXG5cclxuY29uc3QgY291bnRlclJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKDAsIHtcclxuICBbaW5jcmVtZW50XTogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlICsgYWN0aW9uLnBheWxvYWQsXHJcbiAgW2RlY3JlbWVudC50eXBlXTogKHN0YXRlLCBhY3Rpb24pID0+IHN0YXRlIC0gYWN0aW9uLnBheWxvYWRcclxufSlcclxuYGBgXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyPFxyXG4gIFMgZXh0ZW5kcyBOb3RGdW5jdGlvbjxhbnk+LFxyXG4gIENSIGV4dGVuZHMgQ2FzZVJlZHVjZXJzPFMsIGFueT4gPSBDYXNlUmVkdWNlcnM8UywgYW55PlxyXG4+KFxyXG4gIGluaXRpYWxTdGF0ZTogUyB8ICgoKSA9PiBTKSxcclxuICBhY3Rpb25zTWFwOiBDUixcclxuICBhY3Rpb25NYXRjaGVycz86IEFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4sXHJcbiAgZGVmYXVsdENhc2VSZWR1Y2VyPzogQ2FzZVJlZHVjZXI8Uz5cclxuKTogUmVkdWNlcldpdGhJbml0aWFsU3RhdGU8Uz5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyPFMgZXh0ZW5kcyBOb3RGdW5jdGlvbjxhbnk+PihcclxuICBpbml0aWFsU3RhdGU6IFMgfCAoKCkgPT4gUyksXHJcbiAgbWFwT3JCdWlsZGVyQ2FsbGJhY2s6XHJcbiAgICB8IENhc2VSZWR1Y2VyczxTLCBhbnk+XHJcbiAgICB8ICgoYnVpbGRlcjogQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8Uz4pID0+IHZvaWQpLFxyXG4gIGFjdGlvbk1hdGNoZXJzOiBSZWFkb25seUFjdGlvbk1hdGNoZXJEZXNjcmlwdGlvbkNvbGxlY3Rpb248Uz4gPSBbXSxcclxuICBkZWZhdWx0Q2FzZVJlZHVjZXI/OiBDYXNlUmVkdWNlcjxTPlxyXG4pOiBSZWR1Y2VyV2l0aEluaXRpYWxTdGF0ZTxTPiB7XHJcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcclxuICAgIGlmICh0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGlmICghaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbikge1xyXG4gICAgICAgIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSB0cnVlXHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgXCJUaGUgb2JqZWN0IG5vdGF0aW9uIGZvciBgY3JlYXRlUmVkdWNlcmAgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSVEsgMi4wLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlUmVkdWNlclwiXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgW2FjdGlvbnNNYXAsIGZpbmFsQWN0aW9uTWF0Y2hlcnMsIGZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXSA9XHJcbiAgICB0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09ICdmdW5jdGlvbidcclxuICAgICAgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhtYXBPckJ1aWxkZXJDYWxsYmFjaylcclxuICAgICAgOiBbbWFwT3JCdWlsZGVyQ2FsbGJhY2ssIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXJdXHJcblxyXG4gIC8vIEVuc3VyZSB0aGUgaW5pdGlhbCBzdGF0ZSBnZXRzIGZyb3plbiBlaXRoZXIgd2F5IChpZiBkcmFmdGFibGUpXHJcbiAgbGV0IGdldEluaXRpYWxTdGF0ZTogKCkgPT4gU1xyXG4gIGlmIChpc1N0YXRlRnVuY3Rpb24oaW5pdGlhbFN0YXRlKSkge1xyXG4gICAgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4gZnJlZXplRHJhZnRhYmxlKGluaXRpYWxTdGF0ZSgpKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBmcm96ZW5Jbml0aWFsU3RhdGUgPSBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKVxyXG4gICAgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4gZnJvemVuSW5pdGlhbFN0YXRlXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlKCksIGFjdGlvbjogYW55KTogUyB7XHJcbiAgICBsZXQgY2FzZVJlZHVjZXJzID0gW1xyXG4gICAgICBhY3Rpb25zTWFwW2FjdGlvbi50eXBlXSxcclxuICAgICAgLi4uZmluYWxBY3Rpb25NYXRjaGVyc1xyXG4gICAgICAgIC5maWx0ZXIoKHsgbWF0Y2hlciB9KSA9PiBtYXRjaGVyKGFjdGlvbikpXHJcbiAgICAgICAgLm1hcCgoeyByZWR1Y2VyIH0pID0+IHJlZHVjZXIpLFxyXG4gICAgXVxyXG4gICAgaWYgKGNhc2VSZWR1Y2Vycy5maWx0ZXIoKGNyKSA9PiAhIWNyKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgY2FzZVJlZHVjZXJzID0gW2ZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjYXNlUmVkdWNlcnMucmVkdWNlKChwcmV2aW91c1N0YXRlLCBjYXNlUmVkdWNlcik6IFMgPT4ge1xyXG4gICAgICBpZiAoY2FzZVJlZHVjZXIpIHtcclxuICAgICAgICBpZiAoaXNEcmFmdChwcmV2aW91c1N0YXRlKSkge1xyXG4gICAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGEgZHJhZnQsIHdlIG11c3QgYWxyZWFkeSBiZSBpbnNpZGUgYSBgY3JlYXRlTmV4dFN0YXRlYCBjYWxsLFxyXG4gICAgICAgICAgLy8gbGlrZWx5IGJlY2F1c2UgdGhpcyBpcyBiZWluZyB3cmFwcGVkIGluIGBjcmVhdGVSZWR1Y2VyYCwgYGNyZWF0ZVNsaWNlYCwgb3IgbmVzdGVkXHJcbiAgICAgICAgICAvLyBpbnNpZGUgYW4gZXhpc3RpbmcgZHJhZnQuIEl0J3Mgc2FmZSB0byBqdXN0IHBhc3MgdGhlIGRyYWZ0IHRvIHRoZSBtdXRhdG9yLlxyXG4gICAgICAgICAgY29uc3QgZHJhZnQgPSBwcmV2aW91c1N0YXRlIGFzIERyYWZ0PFM+IC8vIFdlIGNhbiBhc3N1bWUgdGhpcyBpcyBhbHJlYWR5IGEgZHJhZnRcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhc2VSZWR1Y2VyKGRyYWZ0LCBhY3Rpb24pXHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBTXHJcbiAgICAgICAgfSBlbHNlIGlmICghaXNEcmFmdGFibGUocHJldmlvdXNTdGF0ZSkpIHtcclxuICAgICAgICAgIC8vIElmIHN0YXRlIGlzIG5vdCBkcmFmdGFibGUgKGV4OiBhIHByaW1pdGl2ZSwgc3VjaCBhcyAwKSwgd2Ugd2FudCB0byBkaXJlY3RseVxyXG4gICAgICAgICAgLy8gcmV0dXJuIHRoZSBjYXNlUmVkdWNlciBmdW5jIGFuZCBub3Qgd3JhcCBpdCB3aXRoIHByb2R1Y2UuXHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYXNlUmVkdWNlcihwcmV2aW91c1N0YXRlIGFzIGFueSwgYWN0aW9uKVxyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgJ0EgY2FzZSByZWR1Y2VyIG9uIGEgbm9uLWRyYWZ0YWJsZSB2YWx1ZSBtdXN0IG5vdCByZXR1cm4gdW5kZWZpbmVkJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBTXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIEB0cy1pZ25vcmUgY3JlYXRlTmV4dFN0YXRlKCkgcHJvZHVjZXMgYW4gSW1tdXRhYmxlPERyYWZ0PFM+PiByYXRoZXJcclxuICAgICAgICAgIC8vIHRoYW4gYW4gSW1tdXRhYmxlPFM+LCBhbmQgVHlwZVNjcmlwdCBjYW5ub3QgZmluZCBvdXQgaG93IHRvIHJlY29uY2lsZVxyXG4gICAgICAgICAgLy8gdGhlc2UgdHdvIHR5cGVzLlxyXG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZShwcmV2aW91c1N0YXRlLCAoZHJhZnQ6IERyYWZ0PFM+KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlXHJcbiAgICB9LCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIHJlZHVjZXIuZ2V0SW5pdGlhbFN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlXHJcblxyXG4gIHJldHVybiByZWR1Y2VyIGFzIFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFM+XHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgQWN0aW9uLCBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUge1xyXG4gIENhc2VSZWR1Y2VyLFxyXG4gIENhc2VSZWR1Y2VycyxcclxuICBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uLFxyXG59IGZyb20gJy4vY3JlYXRlUmVkdWNlcidcclxuaW1wb3J0IHR5cGUgeyBUeXBlR3VhcmQgfSBmcm9tICcuL3RzSGVscGVycydcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHlwZWRBY3Rpb25DcmVhdG9yPFR5cGUgZXh0ZW5kcyBzdHJpbmc+IHtcclxuICAoLi4uYXJnczogYW55W10pOiBBY3Rpb248VHlwZT5cclxuICB0eXBlOiBUeXBlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGJ1aWxkZXIgZm9yIGFuIGFjdGlvbiA8LT4gcmVkdWNlciBtYXAuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8U3RhdGU+IHtcclxuICAvKipcclxuICAgKiBBZGRzIGEgY2FzZSByZWR1Y2VyIHRvIGhhbmRsZSBhIHNpbmdsZSBleGFjdCBhY3Rpb24gdHlwZS5cclxuICAgKiBAcmVtYXJrc1xyXG4gICAqIEFsbCBjYWxscyB0byBgYnVpbGRlci5hZGRDYXNlYCBtdXN0IGNvbWUgYmVmb3JlIGFueSBjYWxscyB0byBgYnVpbGRlci5hZGRNYXRjaGVyYCBvciBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAuXHJcbiAgICogQHBhcmFtIGFjdGlvbkNyZWF0b3IgLSBFaXRoZXIgYSBwbGFpbiBhY3Rpb24gdHlwZSBzdHJpbmcsIG9yIGFuIGFjdGlvbiBjcmVhdG9yIGdlbmVyYXRlZCBieSBbYGNyZWF0ZUFjdGlvbmBdKC4vY3JlYXRlQWN0aW9uKSB0aGF0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgYWN0aW9uIHR5cGUuXHJcbiAgICogQHBhcmFtIHJlZHVjZXIgLSBUaGUgYWN0dWFsIGNhc2UgcmVkdWNlciBmdW5jdGlvbi5cclxuICAgKi9cclxuICBhZGRDYXNlPEFjdGlvbkNyZWF0b3IgZXh0ZW5kcyBUeXBlZEFjdGlvbkNyZWF0b3I8c3RyaW5nPj4oXHJcbiAgICBhY3Rpb25DcmVhdG9yOiBBY3Rpb25DcmVhdG9yLFxyXG4gICAgcmVkdWNlcjogQ2FzZVJlZHVjZXI8U3RhdGUsIFJldHVyblR5cGU8QWN0aW9uQ3JlYXRvcj4+XHJcbiAgKTogQWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8U3RhdGU+XHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIGNhc2UgcmVkdWNlciB0byBoYW5kbGUgYSBzaW5nbGUgZXhhY3QgYWN0aW9uIHR5cGUuXHJcbiAgICogQHJlbWFya3NcclxuICAgKiBBbGwgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkQ2FzZWAgbXVzdCBjb21lIGJlZm9yZSBhbnkgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgb3IgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgLlxyXG4gICAqIEBwYXJhbSBhY3Rpb25DcmVhdG9yIC0gRWl0aGVyIGEgcGxhaW4gYWN0aW9uIHR5cGUgc3RyaW5nLCBvciBhbiBhY3Rpb24gY3JlYXRvciBnZW5lcmF0ZWQgYnkgW2BjcmVhdGVBY3Rpb25gXSguL2NyZWF0ZUFjdGlvbikgdGhhdCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGFjdGlvbiB0eXBlLlxyXG4gICAqIEBwYXJhbSByZWR1Y2VyIC0gVGhlIGFjdHVhbCBjYXNlIHJlZHVjZXIgZnVuY3Rpb24uXHJcbiAgICovXHJcbiAgYWRkQ2FzZTxUeXBlIGV4dGVuZHMgc3RyaW5nLCBBIGV4dGVuZHMgQWN0aW9uPFR5cGU+PihcclxuICAgIHR5cGU6IFR5cGUsXHJcbiAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgQT5cclxuICApOiBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlcjxTdGF0ZT5cclxuXHJcbiAgLyoqXHJcbiAgICogQWxsb3dzIHlvdSB0byBtYXRjaCB5b3VyIGluY29taW5nIGFjdGlvbnMgYWdhaW5zdCB5b3VyIG93biBmaWx0ZXIgZnVuY3Rpb24gaW5zdGVhZCBvZiBvbmx5IHRoZSBgYWN0aW9uLnR5cGVgIHByb3BlcnR5LlxyXG4gICAqIEByZW1hcmtzXHJcbiAgICogSWYgbXVsdGlwbGUgbWF0Y2hlciByZWR1Y2VycyBtYXRjaCwgYWxsIG9mIHRoZW0gd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgb3JkZXJcclxuICAgKiB0aGV5IHdlcmUgZGVmaW5lZCBpbiAtIGV2ZW4gaWYgYSBjYXNlIHJlZHVjZXIgYWxyZWFkeSBtYXRjaGVkLlxyXG4gICAqIEFsbCBjYWxscyB0byBgYnVpbGRlci5hZGRNYXRjaGVyYCBtdXN0IGNvbWUgYWZ0ZXIgYW55IGNhbGxzIHRvIGBidWlsZGVyLmFkZENhc2VgIGFuZCBiZWZvcmUgYW55IGNhbGxzIHRvIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYC5cclxuICAgKiBAcGFyYW0gbWF0Y2hlciAtIEEgbWF0Y2hlciBmdW5jdGlvbi4gSW4gVHlwZVNjcmlwdCwgdGhpcyBzaG91bGQgYmUgYSBbdHlwZSBwcmVkaWNhdGVdKGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvbmFycm93aW5nLmh0bWwjdXNpbmctdHlwZS1wcmVkaWNhdGVzKVxyXG4gICAqICAgZnVuY3Rpb25cclxuICAgKiBAcGFyYW0gcmVkdWNlciAtIFRoZSBhY3R1YWwgY2FzZSByZWR1Y2VyIGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuYGBgdHNcclxuaW1wb3J0IHtcclxuICBjcmVhdGVBY3Rpb24sXHJcbiAgY3JlYXRlUmVkdWNlcixcclxuICBBc3luY1RodW5rLFxyXG4gIEFueUFjdGlvbixcclxufSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xyXG5cclxudHlwZSBHZW5lcmljQXN5bmNUaHVuayA9IEFzeW5jVGh1bms8dW5rbm93biwgdW5rbm93biwgYW55PjtcclxuXHJcbnR5cGUgUGVuZGluZ0FjdGlvbiA9IFJldHVyblR5cGU8R2VuZXJpY0FzeW5jVGh1bmtbXCJwZW5kaW5nXCJdPjtcclxudHlwZSBSZWplY3RlZEFjdGlvbiA9IFJldHVyblR5cGU8R2VuZXJpY0FzeW5jVGh1bmtbXCJyZWplY3RlZFwiXT47XHJcbnR5cGUgRnVsZmlsbGVkQWN0aW9uID0gUmV0dXJuVHlwZTxHZW5lcmljQXN5bmNUaHVua1tcImZ1bGZpbGxlZFwiXT47XHJcblxyXG5jb25zdCBpbml0aWFsU3RhdGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuY29uc3QgcmVzZXRBY3Rpb24gPSBjcmVhdGVBY3Rpb24oXCJyZXNldC10cmFja2VkLWxvYWRpbmctc3RhdGVcIik7XHJcblxyXG5mdW5jdGlvbiBpc1BlbmRpbmdBY3Rpb24oYWN0aW9uOiBBbnlBY3Rpb24pOiBhY3Rpb24gaXMgUGVuZGluZ0FjdGlvbiB7XHJcbiAgcmV0dXJuIGFjdGlvbi50eXBlLmVuZHNXaXRoKFwiL3BlbmRpbmdcIik7XHJcbn1cclxuXHJcbmNvbnN0IHJlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgKGJ1aWxkZXIpID0+IHtcclxuICBidWlsZGVyXHJcbiAgICAuYWRkQ2FzZShyZXNldEFjdGlvbiwgKCkgPT4gaW5pdGlhbFN0YXRlKVxyXG4gICAgLy8gbWF0Y2hlciBjYW4gYmUgZGVmaW5lZCBvdXRzaWRlIGFzIGEgdHlwZSBwcmVkaWNhdGUgZnVuY3Rpb25cclxuICAgIC5hZGRNYXRjaGVyKGlzUGVuZGluZ0FjdGlvbiwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGVbYWN0aW9uLm1ldGEucmVxdWVzdElkXSA9IFwicGVuZGluZ1wiO1xyXG4gICAgfSlcclxuICAgIC5hZGRNYXRjaGVyKFxyXG4gICAgICAvLyBtYXRjaGVyIGNhbiBiZSBkZWZpbmVkIGlubGluZSBhcyBhIHR5cGUgcHJlZGljYXRlIGZ1bmN0aW9uXHJcbiAgICAgIChhY3Rpb24pOiBhY3Rpb24gaXMgUmVqZWN0ZWRBY3Rpb24gPT4gYWN0aW9uLnR5cGUuZW5kc1dpdGgoXCIvcmVqZWN0ZWRcIiksXHJcbiAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc3RhdGVbYWN0aW9uLm1ldGEucmVxdWVzdElkXSA9IFwicmVqZWN0ZWRcIjtcclxuICAgICAgfVxyXG4gICAgKVxyXG4gICAgLy8gbWF0Y2hlciBjYW4ganVzdCByZXR1cm4gYm9vbGVhbiBhbmQgdGhlIG1hdGNoZXIgY2FuIHJlY2VpdmUgYSBnZW5lcmljIGFyZ3VtZW50XHJcbiAgICAuYWRkTWF0Y2hlcjxGdWxmaWxsZWRBY3Rpb24+KFxyXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZS5lbmRzV2l0aChcIi9mdWxmaWxsZWRcIiksXHJcbiAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgc3RhdGVbYWN0aW9uLm1ldGEucmVxdWVzdElkXSA9IFwiZnVsZmlsbGVkXCI7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbn0pO1xyXG5gYGBcclxuICAgKi9cclxuICBhZGRNYXRjaGVyPEE+KFxyXG4gICAgbWF0Y2hlcjogVHlwZUd1YXJkPEE+IHwgKChhY3Rpb246IGFueSkgPT4gYm9vbGVhbiksXHJcbiAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgQSBleHRlbmRzIEFueUFjdGlvbiA/IEEgOiBBICYgQW55QWN0aW9uPlxyXG4gICk6IE9taXQ8QWN0aW9uUmVkdWNlck1hcEJ1aWxkZXI8U3RhdGU+LCAnYWRkQ2FzZSc+XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBcImRlZmF1bHQgY2FzZVwiIHJlZHVjZXIgdGhhdCBpcyBleGVjdXRlZCBpZiBubyBjYXNlIHJlZHVjZXIgYW5kIG5vIG1hdGNoZXJcclxuICAgKiByZWR1Y2VyIHdhcyBleGVjdXRlZCBmb3IgdGhpcyBhY3Rpb24uXHJcbiAgICogQHBhcmFtIHJlZHVjZXIgLSBUaGUgZmFsbGJhY2sgXCJkZWZhdWx0IGNhc2VcIiByZWR1Y2VyIGZ1bmN0aW9uLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuYGBgdHNcclxuaW1wb3J0IHsgY3JlYXRlUmVkdWNlciB9IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnXHJcbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHsgb3RoZXJBY3Rpb25zOiAwIH1cclxuY29uc3QgcmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCBidWlsZGVyID0+IHtcclxuICBidWlsZGVyXHJcbiAgICAvLyAuYWRkQ2FzZSguLi4pXHJcbiAgICAvLyAuYWRkTWF0Y2hlciguLi4pXHJcbiAgICAuYWRkRGVmYXVsdENhc2UoKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgc3RhdGUub3RoZXJBY3Rpb25zKytcclxuICAgIH0pXHJcbn0pXHJcbmBgYFxyXG4gICAqL1xyXG4gIGFkZERlZmF1bHRDYXNlKHJlZHVjZXI6IENhc2VSZWR1Y2VyPFN0YXRlLCBBbnlBY3Rpb24+KToge31cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrPFM+KFxyXG4gIGJ1aWxkZXJDYWxsYmFjazogKGJ1aWxkZXI6IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPFM+KSA9PiB2b2lkXHJcbik6IFtcclxuICBDYXNlUmVkdWNlcnM8UywgYW55PixcclxuICBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uPFM+LFxyXG4gIENhc2VSZWR1Y2VyPFMsIEFueUFjdGlvbj4gfCB1bmRlZmluZWRcclxuXSB7XHJcbiAgY29uc3QgYWN0aW9uc01hcDogQ2FzZVJlZHVjZXJzPFMsIGFueT4gPSB7fVxyXG4gIGNvbnN0IGFjdGlvbk1hdGNoZXJzOiBBY3Rpb25NYXRjaGVyRGVzY3JpcHRpb25Db2xsZWN0aW9uPFM+ID0gW11cclxuICBsZXQgZGVmYXVsdENhc2VSZWR1Y2VyOiBDYXNlUmVkdWNlcjxTLCBBbnlBY3Rpb24+IHwgdW5kZWZpbmVkXHJcbiAgY29uc3QgYnVpbGRlciA9IHtcclxuICAgIGFkZENhc2UoXHJcbiAgICAgIHR5cGVPckFjdGlvbkNyZWF0b3I6IHN0cmluZyB8IFR5cGVkQWN0aW9uQ3JlYXRvcjxhbnk+LFxyXG4gICAgICByZWR1Y2VyOiBDYXNlUmVkdWNlcjxTPlxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgdG8ga2VlcCB0aGUgZGVmaW5pdGlvbiBieSB0aGUgdXNlciBpbiBsaW5lIHdpdGggYWN0dWFsIGJlaGF2aW9yLFxyXG4gICAgICAgICB3ZSBlbmZvcmNlIGBhZGRDYXNlYCB0byBhbHdheXMgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBhZGRNYXRjaGVyYFxyXG4gICAgICAgICBhcyBtYXRjaGluZyBjYXNlcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBtYXRjaGVyc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmIChhY3Rpb25NYXRjaGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICdgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkTWF0Y2hlcmAnXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgJ2BidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAnXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHR5cGUgPVxyXG4gICAgICAgIHR5cGVvZiB0eXBlT3JBY3Rpb25DcmVhdG9yID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgPyB0eXBlT3JBY3Rpb25DcmVhdG9yXHJcbiAgICAgICAgICA6IHR5cGVPckFjdGlvbkNyZWF0b3IudHlwZVxyXG4gICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAnYGJ1aWxkZXIuYWRkQ2FzZWAgY2Fubm90IGJlIGNhbGxlZCB3aXRoIGFuIGVtcHR5IGFjdGlvbiB0eXBlJ1xyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZSBpbiBhY3Rpb25zTWFwKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgJ2BidWlsZGVyLmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCB0d28gcmVkdWNlcnMgZm9yIHRoZSBzYW1lIGFjdGlvbiB0eXBlJ1xyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBhY3Rpb25zTWFwW3R5cGVdID0gcmVkdWNlclxyXG4gICAgICByZXR1cm4gYnVpbGRlclxyXG4gICAgfSxcclxuICAgIGFkZE1hdGNoZXI8QT4oXHJcbiAgICAgIG1hdGNoZXI6IFR5cGVHdWFyZDxBPixcclxuICAgICAgcmVkdWNlcjogQ2FzZVJlZHVjZXI8UywgQSBleHRlbmRzIEFueUFjdGlvbiA/IEEgOiBBICYgQW55QWN0aW9uPlxyXG4gICAgKSB7XHJcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAnYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYCdcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgYWN0aW9uTWF0Y2hlcnMucHVzaCh7IG1hdGNoZXIsIHJlZHVjZXIgfSlcclxuICAgICAgcmV0dXJuIGJ1aWxkZXJcclxuICAgIH0sXHJcbiAgICBhZGREZWZhdWx0Q2FzZShyZWR1Y2VyOiBDYXNlUmVkdWNlcjxTLCBBbnlBY3Rpb24+KSB7XHJcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0Q2FzZVJlZHVjZXIgPSByZWR1Y2VyXHJcbiAgICAgIHJldHVybiBidWlsZGVyXHJcbiAgICB9LFxyXG4gIH1cclxuICBidWlsZGVyQ2FsbGJhY2soYnVpbGRlcilcclxuICByZXR1cm4gW2FjdGlvbnNNYXAsIGFjdGlvbk1hdGNoZXJzLCBkZWZhdWx0Q2FzZVJlZHVjZXJdXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgQW55QWN0aW9uLCBSZWR1Y2VyIH0gZnJvbSAncmVkdXgnXHJcbmltcG9ydCB7IGNyZWF0ZU5leHRTdGF0ZSB9IGZyb20gJy4nXHJcbmltcG9ydCB0eXBlIHtcclxuICBBY3Rpb25DcmVhdG9yV2l0aG91dFBheWxvYWQsXHJcbiAgUGF5bG9hZEFjdGlvbixcclxuICBQYXlsb2FkQWN0aW9uQ3JlYXRvcixcclxuICBQcmVwYXJlQWN0aW9uLFxyXG4gIF9BY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZCxcclxufSBmcm9tICcuL2NyZWF0ZUFjdGlvbidcclxuaW1wb3J0IHsgY3JlYXRlQWN0aW9uIH0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB0eXBlIHtcclxuICBDYXNlUmVkdWNlcixcclxuICBDYXNlUmVkdWNlcnMsXHJcbiAgUmVkdWNlcldpdGhJbml0aWFsU3RhdGUsXHJcbn0gZnJvbSAnLi9jcmVhdGVSZWR1Y2VyJ1xyXG5pbXBvcnQgeyBjcmVhdGVSZWR1Y2VyLCBOb3RGdW5jdGlvbiB9IGZyb20gJy4vY3JlYXRlUmVkdWNlcidcclxuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWR1Y2VyTWFwQnVpbGRlciB9IGZyb20gJy4vbWFwQnVpbGRlcnMnXHJcbmltcG9ydCB7IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrIH0gZnJvbSAnLi9tYXBCdWlsZGVycydcclxuaW1wb3J0IHR5cGUgeyBOb0luZmVyIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB7IGZyZWV6ZURyYWZ0YWJsZSB9IGZyb20gJy4vdXRpbHMnXHJcblxyXG5sZXQgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IGZhbHNlXHJcblxyXG4vKipcclxuICogQW4gYWN0aW9uIGNyZWF0b3IgYXR0YWNoZWQgdG8gYSBzbGljZS5cclxuICpcclxuICogQGRlcHJlY2F0ZWQgcGxlYXNlIHVzZSBQYXlsb2FkQWN0aW9uQ3JlYXRvciBkaXJlY3RseVxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBTbGljZUFjdGlvbkNyZWF0b3I8UD4gPSBQYXlsb2FkQWN0aW9uQ3JlYXRvcjxQPlxyXG5cclxuLyoqXHJcbiAqIFRoZSByZXR1cm4gdmFsdWUgb2YgYGNyZWF0ZVNsaWNlYFxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlPFxyXG4gIFN0YXRlID0gYW55LFxyXG4gIENhc2VSZWR1Y2VycyBleHRlbmRzIFNsaWNlQ2FzZVJlZHVjZXJzPFN0YXRlPiA9IFNsaWNlQ2FzZVJlZHVjZXJzPFN0YXRlPixcclxuICBOYW1lIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nXHJcbj4ge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBzbGljZSBuYW1lLlxyXG4gICAqL1xyXG4gIG5hbWU6IE5hbWVcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHNsaWNlJ3MgcmVkdWNlci5cclxuICAgKi9cclxuICByZWR1Y2VyOiBSZWR1Y2VyPFN0YXRlPlxyXG5cclxuICAvKipcclxuICAgKiBBY3Rpb24gY3JlYXRvcnMgZm9yIHRoZSB0eXBlcyBvZiBhY3Rpb25zIHRoYXQgYXJlIGhhbmRsZWQgYnkgdGhlIHNsaWNlXHJcbiAgICogcmVkdWNlci5cclxuICAgKi9cclxuICBhY3Rpb25zOiBDYXNlUmVkdWNlckFjdGlvbnM8Q2FzZVJlZHVjZXJzLCBOYW1lPlxyXG5cclxuICAvKipcclxuICAgKiBUaGUgaW5kaXZpZHVhbCBjYXNlIHJlZHVjZXIgZnVuY3Rpb25zIHRoYXQgd2VyZSBwYXNzZWQgaW4gdGhlIGByZWR1Y2Vyc2AgcGFyYW1ldGVyLlxyXG4gICAqIFRoaXMgZW5hYmxlcyByZXVzZSBhbmQgdGVzdGluZyBpZiB0aGV5IHdlcmUgZGVmaW5lZCBpbmxpbmUgd2hlbiBjYWxsaW5nIGBjcmVhdGVTbGljZWAuXHJcbiAgICovXHJcbiAgY2FzZVJlZHVjZXJzOiBTbGljZURlZmluZWRDYXNlUmVkdWNlcnM8Q2FzZVJlZHVjZXJzPlxyXG5cclxuICAvKipcclxuICAgKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGluaXRpYWwgc3RhdGUgdmFsdWUgZ2l2ZW4gdG8gdGhlIHNsaWNlLlxyXG4gICAqIElmIGEgbGF6eSBzdGF0ZSBpbml0aWFsaXplciB3YXMgcHJvdmlkZWQsIGl0IHdpbGwgYmUgY2FsbGVkIGFuZCBhIGZyZXNoIHZhbHVlIHJldHVybmVkLlxyXG4gICAqL1xyXG4gIGdldEluaXRpYWxTdGF0ZTogKCkgPT4gU3RhdGVcclxufVxyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGBjcmVhdGVTbGljZSgpYC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVTbGljZU9wdGlvbnM8XHJcbiAgU3RhdGUgPSBhbnksXHJcbiAgQ1IgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4gPSBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4sXHJcbiAgTmFtZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZ1xyXG4+IHtcclxuICAvKipcclxuICAgKiBUaGUgc2xpY2UncyBuYW1lLiBVc2VkIHRvIG5hbWVzcGFjZSB0aGUgZ2VuZXJhdGVkIGFjdGlvbiB0eXBlcy5cclxuICAgKi9cclxuICBuYW1lOiBOYW1lXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBpbml0aWFsIHN0YXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGUgcmVkdWNlciBpcyBjYWxsZWQgdGhlIGZpcnN0IHRpbWUuIFRoaXMgbWF5IGFsc28gYmUgYSBcImxhenkgaW5pdGlhbGl6ZXJcIiBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIHJldHVybiBhbiBpbml0aWFsIHN0YXRlIHZhbHVlIHdoZW4gY2FsbGVkLiBUaGlzIHdpbGwgYmUgdXNlZCB3aGVuZXZlciB0aGUgcmVkdWNlciBpcyBjYWxsZWQgd2l0aCBgdW5kZWZpbmVkYCBhcyBpdHMgc3RhdGUgdmFsdWUsIGFuZCBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBjYXNlcyBsaWtlIHJlYWRpbmcgaW5pdGlhbCBzdGF0ZSBmcm9tIGBsb2NhbFN0b3JhZ2VgLlxyXG4gICAqL1xyXG4gIGluaXRpYWxTdGF0ZTogU3RhdGUgfCAoKCkgPT4gU3RhdGUpXHJcblxyXG4gIC8qKlxyXG4gICAqIEEgbWFwcGluZyBmcm9tIGFjdGlvbiB0eXBlcyB0byBhY3Rpb24tdHlwZS1zcGVjaWZpYyAqY2FzZSByZWR1Y2VyKlxyXG4gICAqIGZ1bmN0aW9ucy4gRm9yIGV2ZXJ5IGFjdGlvbiB0eXBlLCBhIG1hdGNoaW5nIGFjdGlvbiBjcmVhdG9yIHdpbGwgYmVcclxuICAgKiBnZW5lcmF0ZWQgdXNpbmcgYGNyZWF0ZUFjdGlvbigpYC5cclxuICAgKi9cclxuICByZWR1Y2VyczogVmFsaWRhdGVTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZSwgQ1I+XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgY2FsbGJhY2sgdGhhdCByZWNlaXZlcyBhICpidWlsZGVyKiBvYmplY3QgdG8gZGVmaW5lXHJcbiAgICogY2FzZSByZWR1Y2VycyB2aWEgY2FsbHMgdG8gYGJ1aWxkZXIuYWRkQ2FzZShhY3Rpb25DcmVhdG9yT3JUeXBlLCByZWR1Y2VyKWAuXHJcbiAgICogXHJcbiAgICogQWx0ZXJuYXRpdmVseSwgYSBtYXBwaW5nIGZyb20gYWN0aW9uIHR5cGVzIHRvIGFjdGlvbi10eXBlLXNwZWNpZmljICpjYXNlIHJlZHVjZXIqXHJcbiAgICogZnVuY3Rpb25zLiBUaGVzZSByZWR1Y2VycyBzaG91bGQgaGF2ZSBleGlzdGluZyBhY3Rpb24gdHlwZXMgdXNlZFxyXG4gICAqIGFzIHRoZSBrZXlzLCBhbmQgYWN0aW9uIGNyZWF0b3JzIHdpbGwgX25vdF8gYmUgZ2VuZXJhdGVkLlxyXG4gICAqIFxyXG4gICAqIEBleGFtcGxlXHJcbmBgYHRzXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgY3JlYXRlU2xpY2UsIEFjdGlvbiwgQW55QWN0aW9uIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCdcclxuY29uc3QgaW5jcmVtZW50QnkgPSBjcmVhdGVBY3Rpb248bnVtYmVyPignaW5jcmVtZW50QnknKVxyXG5jb25zdCBkZWNyZW1lbnQgPSBjcmVhdGVBY3Rpb24oJ2RlY3JlbWVudCcpXHJcblxyXG5pbnRlcmZhY2UgUmVqZWN0ZWRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xyXG4gIGVycm9yOiBFcnJvclxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1JlamVjdGVkQWN0aW9uKGFjdGlvbjogQW55QWN0aW9uKTogYWN0aW9uIGlzIFJlamVjdGVkQWN0aW9uIHtcclxuICByZXR1cm4gYWN0aW9uLnR5cGUuZW5kc1dpdGgoJ3JlamVjdGVkJylcclxufVxyXG5cclxuY3JlYXRlU2xpY2Uoe1xyXG4gIG5hbWU6ICdjb3VudGVyJyxcclxuICBpbml0aWFsU3RhdGU6IDAsXHJcbiAgcmVkdWNlcnM6IHt9LFxyXG4gIGV4dHJhUmVkdWNlcnM6IGJ1aWxkZXIgPT4ge1xyXG4gICAgYnVpbGRlclxyXG4gICAgICAuYWRkQ2FzZShpbmNyZW1lbnRCeSwgKHN0YXRlLCBhY3Rpb24pID0+IHtcclxuICAgICAgICAvLyBhY3Rpb24gaXMgaW5mZXJyZWQgY29ycmVjdGx5IGhlcmUgaWYgdXNpbmcgVFNcclxuICAgICAgfSlcclxuICAgICAgLy8gWW91IGNhbiBjaGFpbiBjYWxscywgb3IgaGF2ZSBzZXBhcmF0ZSBgYnVpbGRlci5hZGRDYXNlKClgIGxpbmVzIGVhY2ggdGltZVxyXG4gICAgICAuYWRkQ2FzZShkZWNyZW1lbnQsIChzdGF0ZSwgYWN0aW9uKSA9PiB7fSlcclxuICAgICAgLy8gWW91IGNhbiBtYXRjaCBhIHJhbmdlIG9mIGFjdGlvbiB0eXBlc1xyXG4gICAgICAuYWRkTWF0Y2hlcihcclxuICAgICAgICBpc1JlamVjdGVkQWN0aW9uLFxyXG4gICAgICAgIC8vIGBhY3Rpb25gIHdpbGwgYmUgaW5mZXJyZWQgYXMgYSBSZWplY3RlZEFjdGlvbiBkdWUgdG8gaXNSZWplY3RlZEFjdGlvbiBiZWluZyBkZWZpbmVkIGFzIGEgdHlwZSBndWFyZFxyXG4gICAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PiB7fVxyXG4gICAgICApXHJcbiAgICAgIC8vIGFuZCBwcm92aWRlIGEgZGVmYXVsdCBjYXNlIGlmIG5vIG90aGVyIGhhbmRsZXJzIG1hdGNoZWRcclxuICAgICAgLmFkZERlZmF1bHRDYXNlKChzdGF0ZSwgYWN0aW9uKSA9PiB7fSlcclxuICAgIH1cclxufSlcclxuYGBgXHJcbiAgICovXHJcbiAgZXh0cmFSZWR1Y2Vycz86XHJcbiAgICB8IENhc2VSZWR1Y2VyczxOb0luZmVyPFN0YXRlPiwgYW55PlxyXG4gICAgfCAoKGJ1aWxkZXI6IEFjdGlvblJlZHVjZXJNYXBCdWlsZGVyPE5vSW5mZXI8U3RhdGU+PikgPT4gdm9pZClcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgQ2FzZVJlZHVjZXIgd2l0aCBhIGBwcmVwYXJlYCBtZXRob2QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENhc2VSZWR1Y2VyV2l0aFByZXBhcmU8U3RhdGUsIEFjdGlvbiBleHRlbmRzIFBheWxvYWRBY3Rpb24+ID0ge1xyXG4gIHJlZHVjZXI6IENhc2VSZWR1Y2VyPFN0YXRlLCBBY3Rpb24+XHJcbiAgcHJlcGFyZTogUHJlcGFyZUFjdGlvbjxBY3Rpb25bJ3BheWxvYWQnXT5cclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSB0eXBlIGRlc2NyaWJpbmcgYSBzbGljZSdzIGByZWR1Y2Vyc2Agb3B0aW9uLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBTbGljZUNhc2VSZWR1Y2VyczxTdGF0ZT4gPSB7XHJcbiAgW0s6IHN0cmluZ106XHJcbiAgICB8IENhc2VSZWR1Y2VyPFN0YXRlLCBQYXlsb2FkQWN0aW9uPGFueT4+XHJcbiAgICB8IENhc2VSZWR1Y2VyV2l0aFByZXBhcmU8U3RhdGUsIFBheWxvYWRBY3Rpb248YW55LCBzdHJpbmcsIGFueSwgYW55Pj5cclxufVxyXG5cclxudHlwZSBTbGljZUFjdGlvblR5cGU8XHJcbiAgU2xpY2VOYW1lIGV4dGVuZHMgc3RyaW5nLFxyXG4gIEFjdGlvbk5hbWUgZXh0ZW5kcyBrZXlvZiBhbnlcclxuPiA9IEFjdGlvbk5hbWUgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXIgPyBgJHtTbGljZU5hbWV9LyR7QWN0aW9uTmFtZX1gIDogc3RyaW5nXHJcblxyXG4vKipcclxuICogRGVyaXZlcyB0aGUgc2xpY2UncyBgYWN0aW9uc2AgcHJvcGVydHkgZnJvbSB0aGUgYHJlZHVjZXJzYCBvcHRpb25zXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIENhc2VSZWR1Y2VyQWN0aW9uczxcclxuICBDYXNlUmVkdWNlcnMgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2Vyczxhbnk+LFxyXG4gIFNsaWNlTmFtZSBleHRlbmRzIHN0cmluZ1xyXG4+ID0ge1xyXG4gIFtUeXBlIGluIGtleW9mIENhc2VSZWR1Y2Vyc106IENhc2VSZWR1Y2Vyc1tUeXBlXSBleHRlbmRzIHsgcHJlcGFyZTogYW55IH1cclxuICAgID8gQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyV2l0aFByZXBhcmU8XHJcbiAgICAgICAgQ2FzZVJlZHVjZXJzW1R5cGVdLFxyXG4gICAgICAgIFNsaWNlQWN0aW9uVHlwZTxTbGljZU5hbWUsIFR5cGU+XHJcbiAgICAgID5cclxuICAgIDogQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyPFxyXG4gICAgICAgIENhc2VSZWR1Y2Vyc1tUeXBlXSxcclxuICAgICAgICBTbGljZUFjdGlvblR5cGU8U2xpY2VOYW1lLCBUeXBlPlxyXG4gICAgICA+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBgUGF5bG9hZEFjdGlvbkNyZWF0b3JgIHR5cGUgZm9yIGEgcGFzc2VkIGBDYXNlUmVkdWNlcldpdGhQcmVwYXJlYFxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnR5cGUgQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyV2l0aFByZXBhcmU8XHJcbiAgQ1IgZXh0ZW5kcyB7IHByZXBhcmU6IGFueSB9LFxyXG4gIFR5cGUgZXh0ZW5kcyBzdHJpbmdcclxuPiA9IF9BY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxDUlsncHJlcGFyZSddLCBUeXBlPlxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGBQYXlsb2FkQWN0aW9uQ3JlYXRvcmAgdHlwZSBmb3IgYSBwYXNzZWQgYENhc2VSZWR1Y2VyYFxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbnR5cGUgQWN0aW9uQ3JlYXRvckZvckNhc2VSZWR1Y2VyPENSLCBUeXBlIGV4dGVuZHMgc3RyaW5nPiA9IENSIGV4dGVuZHMgKFxyXG4gIHN0YXRlOiBhbnksXHJcbiAgYWN0aW9uOiBpbmZlciBBY3Rpb25cclxuKSA9PiBhbnlcclxuICA/IEFjdGlvbiBleHRlbmRzIHsgcGF5bG9hZDogaW5mZXIgUCB9XHJcbiAgICA/IFBheWxvYWRBY3Rpb25DcmVhdG9yPFAsIFR5cGU+XHJcbiAgICA6IEFjdGlvbkNyZWF0b3JXaXRob3V0UGF5bG9hZDxUeXBlPlxyXG4gIDogQWN0aW9uQ3JlYXRvcldpdGhvdXRQYXlsb2FkPFR5cGU+XHJcblxyXG4vKipcclxuICogRXh0cmFjdHMgdGhlIENhc2VSZWR1Y2VycyBvdXQgb2YgYSBgcmVkdWNlcnNgIG9iamVjdCwgZXZlbiBpZiB0aGV5IGFyZVxyXG4gKiB0ZXN0ZWQgaW50byBhIGBDYXNlUmVkdWNlcldpdGhQcmVwYXJlYC5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG50eXBlIFNsaWNlRGVmaW5lZENhc2VSZWR1Y2VyczxDYXNlUmVkdWNlcnMgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2Vyczxhbnk+PiA9IHtcclxuICBbVHlwZSBpbiBrZXlvZiBDYXNlUmVkdWNlcnNdOiBDYXNlUmVkdWNlcnNbVHlwZV0gZXh0ZW5kcyB7XHJcbiAgICByZWR1Y2VyOiBpbmZlciBSZWR1Y2VyXHJcbiAgfVxyXG4gICAgPyBSZWR1Y2VyXHJcbiAgICA6IENhc2VSZWR1Y2Vyc1tUeXBlXVxyXG59XHJcblxyXG4vKipcclxuICogVXNlZCBvbiBhIFNsaWNlQ2FzZVJlZHVjZXJzIG9iamVjdC5cclxuICogRW5zdXJlcyB0aGF0IGlmIGEgQ2FzZVJlZHVjZXIgaXMgYSBgQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZWAsIHRoYXRcclxuICogdGhlIGByZWR1Y2VyYCBhbmQgdGhlIGBwcmVwYXJlYCBmdW5jdGlvbiB1c2UgdGhlIHNhbWUgdHlwZSBvZiBgcGF5bG9hZGAuXHJcbiAqXHJcbiAqIE1pZ2h0IGRvIGFkZGl0aW9uYWwgc3VjaCBjaGVja3MgaW4gdGhlIGZ1dHVyZS5cclxuICpcclxuICogVGhpcyB0eXBlIGlzIG9ubHkgZXZlciB1c2VmdWwgaWYgeW91IHdhbnQgdG8gd3JpdGUgeW91ciBvd24gd3JhcHBlciBhcm91bmRcclxuICogYGNyZWF0ZVNsaWNlYC4gUGxlYXNlIGRvbid0IHVzZSBpdCBvdGhlcndpc2UhXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCB0eXBlIFZhbGlkYXRlU2xpY2VDYXNlUmVkdWNlcnM8XHJcbiAgUyxcclxuICBBQ1IgZXh0ZW5kcyBTbGljZUNhc2VSZWR1Y2VyczxTPlxyXG4+ID0gQUNSICZcclxuICB7XHJcbiAgICBbVCBpbiBrZXlvZiBBQ1JdOiBBQ1JbVF0gZXh0ZW5kcyB7XHJcbiAgICAgIHJlZHVjZXIoczogUywgYWN0aW9uPzogaW5mZXIgQSk6IGFueVxyXG4gICAgfVxyXG4gICAgICA/IHtcclxuICAgICAgICAgIHByZXBhcmUoLi4uYTogbmV2ZXJbXSk6IE9taXQ8QSwgJ3R5cGUnPlxyXG4gICAgICAgIH1cclxuICAgICAgOiB7fVxyXG4gIH1cclxuXHJcbmZ1bmN0aW9uIGdldFR5cGUoc2xpY2U6IHN0cmluZywgYWN0aW9uS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgJHtzbGljZX0vJHthY3Rpb25LZXl9YFxyXG59XHJcblxyXG4vKipcclxuICogQSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYW4gaW5pdGlhbCBzdGF0ZSwgYW4gb2JqZWN0IGZ1bGwgb2YgcmVkdWNlclxyXG4gKiBmdW5jdGlvbnMsIGFuZCBhIFwic2xpY2UgbmFtZVwiLCBhbmQgYXV0b21hdGljYWxseSBnZW5lcmF0ZXNcclxuICogYWN0aW9uIGNyZWF0b3JzIGFuZCBhY3Rpb24gdHlwZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZVxyXG4gKiByZWR1Y2VycyBhbmQgc3RhdGUuXHJcbiAqXHJcbiAqIFRoZSBgcmVkdWNlcmAgYXJndW1lbnQgaXMgcGFzc2VkIHRvIGBjcmVhdGVSZWR1Y2VyKClgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2xpY2U8XHJcbiAgU3RhdGUsXHJcbiAgQ2FzZVJlZHVjZXJzIGV4dGVuZHMgU2xpY2VDYXNlUmVkdWNlcnM8U3RhdGU+LFxyXG4gIE5hbWUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmdcclxuPihcclxuICBvcHRpb25zOiBDcmVhdGVTbGljZU9wdGlvbnM8U3RhdGUsIENhc2VSZWR1Y2VycywgTmFtZT5cclxuKTogU2xpY2U8U3RhdGUsIENhc2VSZWR1Y2VycywgTmFtZT4ge1xyXG4gIGNvbnN0IHsgbmFtZSB9ID0gb3B0aW9uc1xyXG4gIGlmICghbmFtZSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdgbmFtZWAgaXMgYSByZXF1aXJlZCBvcHRpb24gZm9yIGNyZWF0ZVNsaWNlJylcclxuICB9XHJcblxyXG4gIGlmIChcclxuICAgIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcclxuICApIHtcclxuICAgIGlmIChvcHRpb25zLmluaXRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgJ1lvdSBtdXN0IHByb3ZpZGUgYW4gYGluaXRpYWxTdGF0ZWAgdmFsdWUgdGhhdCBpcyBub3QgYHVuZGVmaW5lZGAuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGBpbml0aWFsU3RhdGVgJ1xyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBpbml0aWFsU3RhdGUgPVxyXG4gICAgdHlwZW9mIG9wdGlvbnMuaW5pdGlhbFN0YXRlID09ICdmdW5jdGlvbidcclxuICAgICAgPyBvcHRpb25zLmluaXRpYWxTdGF0ZVxyXG4gICAgICA6IGZyZWV6ZURyYWZ0YWJsZShvcHRpb25zLmluaXRpYWxTdGF0ZSlcclxuXHJcbiAgY29uc3QgcmVkdWNlcnMgPSBvcHRpb25zLnJlZHVjZXJzIHx8IHt9XHJcblxyXG4gIGNvbnN0IHJlZHVjZXJOYW1lcyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKVxyXG5cclxuICBjb25zdCBzbGljZUNhc2VSZWR1Y2Vyc0J5TmFtZTogUmVjb3JkPHN0cmluZywgQ2FzZVJlZHVjZXI+ID0ge31cclxuICBjb25zdCBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZTogUmVjb3JkPHN0cmluZywgQ2FzZVJlZHVjZXI+ID0ge31cclxuICBjb25zdCBhY3Rpb25DcmVhdG9yczogUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+ID0ge31cclxuXHJcbiAgcmVkdWNlck5hbWVzLmZvckVhY2goKHJlZHVjZXJOYW1lKSA9PiB7XHJcbiAgICBjb25zdCBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSA9IHJlZHVjZXJzW3JlZHVjZXJOYW1lXVxyXG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGUobmFtZSwgcmVkdWNlck5hbWUpXHJcblxyXG4gICAgbGV0IGNhc2VSZWR1Y2VyOiBDYXNlUmVkdWNlcjxTdGF0ZSwgYW55PlxyXG4gICAgbGV0IHByZXBhcmVDYWxsYmFjazogUHJlcGFyZUFjdGlvbjxhbnk+IHwgdW5kZWZpbmVkXHJcblxyXG4gICAgaWYgKCdyZWR1Y2VyJyBpbiBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSkge1xyXG4gICAgICBjYXNlUmVkdWNlciA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlLnJlZHVjZXJcclxuICAgICAgcHJlcGFyZUNhbGxiYWNrID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucHJlcGFyZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZVxyXG4gICAgfVxyXG5cclxuICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lW3JlZHVjZXJOYW1lXSA9IGNhc2VSZWR1Y2VyXHJcbiAgICBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZVt0eXBlXSA9IGNhc2VSZWR1Y2VyXHJcbiAgICBhY3Rpb25DcmVhdG9yc1tyZWR1Y2VyTmFtZV0gPSBwcmVwYXJlQ2FsbGJhY2tcclxuICAgICAgPyBjcmVhdGVBY3Rpb24odHlwZSwgcHJlcGFyZUNhbGxiYWNrKVxyXG4gICAgICA6IGNyZWF0ZUFjdGlvbih0eXBlKVxyXG4gIH0pXHJcblxyXG4gIGZ1bmN0aW9uIGJ1aWxkUmVkdWNlcigpIHtcclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbikge1xyXG4gICAgICAgICAgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbiA9IHRydWVcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgXCJUaGUgb2JqZWN0IG5vdGF0aW9uIGZvciBgY3JlYXRlU2xpY2UuZXh0cmFSZWR1Y2Vyc2AgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSVEsgMi4wLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlU2xpY2VcIlxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgW1xyXG4gICAgICBleHRyYVJlZHVjZXJzID0ge30sXHJcbiAgICAgIGFjdGlvbk1hdGNoZXJzID0gW10sXHJcbiAgICAgIGRlZmF1bHRDYXNlUmVkdWNlciA9IHVuZGVmaW5lZCxcclxuICAgIF0gPVxyXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSAnZnVuY3Rpb24nXHJcbiAgICAgICAgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhvcHRpb25zLmV4dHJhUmVkdWNlcnMpXHJcbiAgICAgICAgOiBbb3B0aW9ucy5leHRyYVJlZHVjZXJzXVxyXG5cclxuICAgIGNvbnN0IGZpbmFsQ2FzZVJlZHVjZXJzID0geyAuLi5leHRyYVJlZHVjZXJzLCAuLi5zbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZSB9XHJcblxyXG4gICAgcmV0dXJuIGNyZWF0ZVJlZHVjZXIoaW5pdGlhbFN0YXRlLCAoYnVpbGRlcikgPT4ge1xyXG4gICAgICBmb3IgKGxldCBrZXkgaW4gZmluYWxDYXNlUmVkdWNlcnMpIHtcclxuICAgICAgICBidWlsZGVyLmFkZENhc2Uoa2V5LCBmaW5hbENhc2VSZWR1Y2Vyc1trZXldIGFzIENhc2VSZWR1Y2VyPGFueT4pXHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgbSBvZiBhY3Rpb25NYXRjaGVycykge1xyXG4gICAgICAgIGJ1aWxkZXIuYWRkTWF0Y2hlcihtLm1hdGNoZXIsIG0ucmVkdWNlcilcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgYnVpbGRlci5hZGREZWZhdWx0Q2FzZShkZWZhdWx0Q2FzZVJlZHVjZXIpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsZXQgX3JlZHVjZXI6IFJlZHVjZXJXaXRoSW5pdGlhbFN0YXRlPFN0YXRlPlxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgbmFtZSxcclxuICAgIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xyXG4gICAgICBpZiAoIV9yZWR1Y2VyKSBfcmVkdWNlciA9IGJ1aWxkUmVkdWNlcigpXHJcblxyXG4gICAgICByZXR1cm4gX3JlZHVjZXIoc3RhdGUsIGFjdGlvbilcclxuICAgIH0sXHJcbiAgICBhY3Rpb25zOiBhY3Rpb25DcmVhdG9ycyBhcyBhbnksXHJcbiAgICBjYXNlUmVkdWNlcnM6IHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lIGFzIGFueSxcclxuICAgIGdldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgaWYgKCFfcmVkdWNlcikgX3JlZHVjZXIgPSBidWlsZFJlZHVjZXIoKVxyXG5cclxuICAgICAgcmV0dXJuIF9yZWR1Y2VyLmdldEluaXRpYWxTdGF0ZSgpXHJcbiAgICB9LFxyXG4gIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJy4vbW9kZWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxFbnRpdHlTdGF0ZTxWPigpOiBFbnRpdHlTdGF0ZTxWPiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGlkczogW10sXHJcbiAgICBlbnRpdGllczoge30sXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeTxWPigpIHtcclxuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoKTogRW50aXR5U3RhdGU8Vj5cclxuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGU8UyBleHRlbmRzIG9iamVjdD4oXHJcbiAgICBhZGRpdGlvbmFsU3RhdGU6IFNcclxuICApOiBFbnRpdHlTdGF0ZTxWPiAmIFNcclxuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoYWRkaXRpb25hbFN0YXRlOiBhbnkgPSB7fSk6IGFueSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihnZXRJbml0aWFsRW50aXR5U3RhdGUoKSwgYWRkaXRpb25hbFN0YXRlKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHsgZ2V0SW5pdGlhbFN0YXRlIH1cclxufVxyXG4iLCAiaW1wb3J0IHR5cGUgeyBTZWxlY3RvciB9IGZyb20gJ3Jlc2VsZWN0J1xyXG5pbXBvcnQgeyBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvciB9IGZyb20gJy4uL2NyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5U2VsZWN0b3JzLFxyXG4gIERpY3Rpb25hcnksXHJcbiAgRW50aXR5SWQsXHJcbn0gZnJvbSAnLi9tb2RlbHMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeTxUPigpIHtcclxuICBmdW5jdGlvbiBnZXRTZWxlY3RvcnMoKTogRW50aXR5U2VsZWN0b3JzPFQsIEVudGl0eVN0YXRlPFQ+PlxyXG4gIGZ1bmN0aW9uIGdldFNlbGVjdG9yczxWPihcclxuICAgIHNlbGVjdFN0YXRlOiAoc3RhdGU6IFYpID0+IEVudGl0eVN0YXRlPFQ+XHJcbiAgKTogRW50aXR5U2VsZWN0b3JzPFQsIFY+XHJcbiAgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzPFY+KFxyXG4gICAgc2VsZWN0U3RhdGU/OiAoc3RhdGU6IFYpID0+IEVudGl0eVN0YXRlPFQ+XHJcbiAgKTogRW50aXR5U2VsZWN0b3JzPFQsIGFueT4ge1xyXG4gICAgY29uc3Qgc2VsZWN0SWRzID0gKHN0YXRlOiBFbnRpdHlTdGF0ZTxUPikgPT4gc3RhdGUuaWRzXHJcblxyXG4gICAgY29uc3Qgc2VsZWN0RW50aXRpZXMgPSAoc3RhdGU6IEVudGl0eVN0YXRlPFQ+KSA9PiBzdGF0ZS5lbnRpdGllc1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdEFsbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKFxyXG4gICAgICBzZWxlY3RJZHMsXHJcbiAgICAgIHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAoaWRzLCBlbnRpdGllcyk6IFRbXSA9PiBpZHMubWFwKChpZCkgPT4gZW50aXRpZXNbaWRdISlcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBzZWxlY3RJZCA9IChfOiB1bmtub3duLCBpZDogRW50aXR5SWQpID0+IGlkXHJcblxyXG4gICAgY29uc3Qgc2VsZWN0QnlJZCA9IChlbnRpdGllczogRGljdGlvbmFyeTxUPiwgaWQ6IEVudGl0eUlkKSA9PiBlbnRpdGllc1tpZF1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RUb3RhbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdElkcywgKGlkcykgPT4gaWRzLmxlbmd0aClcclxuXHJcbiAgICBpZiAoIXNlbGVjdFN0YXRlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc2VsZWN0SWRzLFxyXG4gICAgICAgIHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAgIHNlbGVjdEFsbCxcclxuICAgICAgICBzZWxlY3RUb3RhbCxcclxuICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihcclxuICAgICAgICAgIHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAgICAgc2VsZWN0SWQsXHJcbiAgICAgICAgICBzZWxlY3RCeUlkXHJcbiAgICAgICAgKSxcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKFxyXG4gICAgICBzZWxlY3RTdGF0ZSBhcyBTZWxlY3RvcjxWLCBFbnRpdHlTdGF0ZTxUPj4sXHJcbiAgICAgIHNlbGVjdEVudGl0aWVzXHJcbiAgICApXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc2VsZWN0SWRzOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0SWRzKSxcclxuICAgICAgc2VsZWN0RW50aXRpZXM6IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyxcclxuICAgICAgc2VsZWN0QWxsOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0QWxsKSxcclxuICAgICAgc2VsZWN0VG90YWw6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdFN0YXRlLCBzZWxlY3RUb3RhbCksXHJcbiAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKFxyXG4gICAgICAgIHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyxcclxuICAgICAgICBzZWxlY3RJZCxcclxuICAgICAgICBzZWxlY3RCeUlkXHJcbiAgICAgICksXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyBnZXRTZWxlY3RvcnMgfVxyXG59XHJcbiIsICJpbXBvcnQgY3JlYXRlTmV4dFN0YXRlLCB7IGlzRHJhZnQgfSBmcm9tICdpbW1lcidcclxuaW1wb3J0IHR5cGUgeyBFbnRpdHlTdGF0ZSwgUHJldmVudEFueSB9IGZyb20gJy4vbW9kZWxzJ1xyXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRBY3Rpb24gfSBmcm9tICcuLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IGlzRlNBIH0gZnJvbSAnLi4vY3JlYXRlQWN0aW9uJ1xyXG5pbXBvcnQgeyBJc0FueSB9IGZyb20gJy4uL3RzSGVscGVycydcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3I8Vj4oXHJcbiAgbXV0YXRvcjogKHN0YXRlOiBFbnRpdHlTdGF0ZTxWPikgPT4gdm9pZFxyXG4pIHtcclxuICBjb25zdCBvcGVyYXRvciA9IGNyZWF0ZVN0YXRlT3BlcmF0b3IoKF86IHVuZGVmaW5lZCwgc3RhdGU6IEVudGl0eVN0YXRlPFY+KSA9PlxyXG4gICAgbXV0YXRvcihzdGF0ZSlcclxuICApXHJcblxyXG4gIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb248UyBleHRlbmRzIEVudGl0eVN0YXRlPFY+PihcclxuICAgIHN0YXRlOiBQcmV2ZW50QW55PFMsIFY+XHJcbiAgKTogUyB7XHJcbiAgICByZXR1cm4gb3BlcmF0b3Ioc3RhdGUgYXMgUywgdW5kZWZpbmVkKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0YXRlT3BlcmF0b3I8ViwgUj4oXHJcbiAgbXV0YXRvcjogKGFyZzogUiwgc3RhdGU6IEVudGl0eVN0YXRlPFY+KSA9PiB2b2lkXHJcbikge1xyXG4gIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb248UyBleHRlbmRzIEVudGl0eVN0YXRlPFY+PihcclxuICAgIHN0YXRlOiBTLFxyXG4gICAgYXJnOiBSIHwgUGF5bG9hZEFjdGlvbjxSPlxyXG4gICk6IFMge1xyXG4gICAgZnVuY3Rpb24gaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoXHJcbiAgICAgIGFyZzogUiB8IFBheWxvYWRBY3Rpb248Uj5cclxuICAgICk6IGFyZyBpcyBQYXlsb2FkQWN0aW9uPFI+IHtcclxuICAgICAgcmV0dXJuIGlzRlNBKGFyZylcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBydW5NdXRhdG9yID0gKGRyYWZ0OiBFbnRpdHlTdGF0ZTxWPikgPT4ge1xyXG4gICAgICBpZiAoaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnKSkge1xyXG4gICAgICAgIG11dGF0b3IoYXJnLnBheWxvYWQsIGRyYWZ0KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG11dGF0b3IoYXJnLCBkcmFmdClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0RyYWZ0KHN0YXRlKSkge1xyXG4gICAgICAvLyB3ZSBtdXN0IGFscmVhZHkgYmUgaW5zaWRlIGEgYGNyZWF0ZU5leHRTdGF0ZWAgY2FsbCwgbGlrZWx5IGJlY2F1c2VcclxuICAgICAgLy8gdGhpcyBpcyBiZWluZyB3cmFwcGVkIGluIGBjcmVhdGVSZWR1Y2VyYCBvciBgY3JlYXRlU2xpY2VgLlxyXG4gICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBwYXNzIHRoZSBkcmFmdCB0byB0aGUgbXV0YXRvci5cclxuICAgICAgcnVuTXV0YXRvcihzdGF0ZSlcclxuXHJcbiAgICAgIC8vIHNpbmNlIGl0J3MgYSBkcmFmdCwgd2UnbGwganVzdCByZXR1cm4gaXRcclxuICAgICAgcmV0dXJuIHN0YXRlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBAdHMtaWdub3JlIGNyZWF0ZU5leHRTdGF0ZSgpIHByb2R1Y2VzIGFuIEltbXV0YWJsZTxEcmFmdDxTPj4gcmF0aGVyXHJcbiAgICAgIC8vIHRoYW4gYW4gSW1tdXRhYmxlPFM+LCBhbmQgVHlwZVNjcmlwdCBjYW5ub3QgZmluZCBvdXQgaG93IHRvIHJlY29uY2lsZVxyXG4gICAgICAvLyB0aGVzZSB0d28gdHlwZXMuXHJcbiAgICAgIHJldHVybiBjcmVhdGVOZXh0U3RhdGUoc3RhdGUsIHJ1bk11dGF0b3IpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEVudGl0eVN0YXRlLCBJZFNlbGVjdG9yLCBVcGRhdGUsIEVudGl0eUlkIH0gZnJvbSAnLi9tb2RlbHMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0SWRWYWx1ZTxUPihlbnRpdHk6IFQsIHNlbGVjdElkOiBJZFNlbGVjdG9yPFQ+KSB7XHJcbiAgY29uc3Qga2V5ID0gc2VsZWN0SWQoZW50aXR5KVxyXG5cclxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgY29uc29sZS53YXJuKFxyXG4gICAgICAnVGhlIGVudGl0eSBwYXNzZWQgdG8gdGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgdW5kZWZpbmVkLicsXHJcbiAgICAgICdZb3Ugc2hvdWxkIHByb2JhYmx5IHByb3ZpZGUgeW91ciBvd24gYHNlbGVjdElkYCBpbXBsZW1lbnRhdGlvbi4nLFxyXG4gICAgICAnVGhlIGVudGl0eSB0aGF0IHdhcyBwYXNzZWQ6JyxcclxuICAgICAgZW50aXR5LFxyXG4gICAgICAnVGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb246JyxcclxuICAgICAgc2VsZWN0SWQudG9TdHJpbmcoKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGtleVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRW50aXRpZXNBcnJheTxUPihcclxuICBlbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPlxyXG4pOiByZWFkb25seSBUW10ge1xyXG4gIGlmICghQXJyYXkuaXNBcnJheShlbnRpdGllcykpIHtcclxuICAgIGVudGl0aWVzID0gT2JqZWN0LnZhbHVlcyhlbnRpdGllcylcclxuICB9XHJcblxyXG4gIHJldHVybiBlbnRpdGllc1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllczxUPihcclxuICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICBzZWxlY3RJZDogSWRTZWxlY3RvcjxUPixcclxuICBzdGF0ZTogRW50aXR5U3RhdGU8VD5cclxuKTogW1RbXSwgVXBkYXRlPFQ+W11dIHtcclxuICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcblxyXG4gIGNvbnN0IGFkZGVkOiBUW10gPSBbXVxyXG4gIGNvbnN0IHVwZGF0ZWQ6IFVwZGF0ZTxUPltdID0gW11cclxuXHJcbiAgZm9yIChjb25zdCBlbnRpdHkgb2YgbmV3RW50aXRpZXMpIHtcclxuICAgIGNvbnN0IGlkID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKVxyXG4gICAgaWYgKGlkIGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgIHVwZGF0ZWQucHVzaCh7IGlkLCBjaGFuZ2VzOiBlbnRpdHkgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFkZGVkLnB1c2goZW50aXR5KVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gW2FkZGVkLCB1cGRhdGVkXVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5U3RhdGVBZGFwdGVyLFxyXG4gIElkU2VsZWN0b3IsXHJcbiAgVXBkYXRlLFxyXG4gIEVudGl0eUlkLFxyXG59IGZyb20gJy4vbW9kZWxzJ1xyXG5pbXBvcnQge1xyXG4gIGNyZWF0ZVN0YXRlT3BlcmF0b3IsXHJcbiAgY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yLFxyXG59IGZyb20gJy4vc3RhdGVfYWRhcHRlcidcclxuaW1wb3J0IHtcclxuICBzZWxlY3RJZFZhbHVlLFxyXG4gIGVuc3VyZUVudGl0aWVzQXJyYXksXHJcbiAgc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyxcclxufSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyPFQ+KFxyXG4gIHNlbGVjdElkOiBJZFNlbGVjdG9yPFQ+XHJcbik6IEVudGl0eVN0YXRlQWRhcHRlcjxUPiB7XHJcbiAgdHlwZSBSID0gRW50aXR5U3RhdGU8VD5cclxuXHJcbiAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHk6IFQsIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICBjb25zdCBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpXHJcblxyXG4gICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBzdGF0ZS5pZHMucHVzaChrZXkpXHJcbiAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhZGRNYW55TXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuXHJcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xyXG4gICAgICBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eTogVCwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZClcclxuICAgIGlmICghKGtleSBpbiBzdGF0ZS5lbnRpdGllcykpIHtcclxuICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KVxyXG4gICAgfVxyXG4gICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0TWFueU11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xyXG4gICAgICBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKVxyXG5cclxuICAgIHN0YXRlLmlkcyA9IFtdXHJcbiAgICBzdGF0ZS5lbnRpdGllcyA9IHt9XHJcblxyXG4gICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVtb3ZlT25lTXV0YWJseShrZXk6IEVudGl0eUlkLCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHJlbW92ZU1hbnlNdXRhYmx5KFtrZXldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHJlbW92ZU1hbnlNdXRhYmx5KGtleXM6IHJlYWRvbmx5IEVudGl0eUlkW10sIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICBsZXQgZGlkTXV0YXRlID0gZmFsc2VcclxuXHJcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICBpZiAoa2V5IGluIHN0YXRlLmVudGl0aWVzKSB7XHJcbiAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW2tleV1cclxuICAgICAgICBkaWRNdXRhdGUgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgaWYgKGRpZE11dGF0ZSkge1xyXG4gICAgICBzdGF0ZS5pZHMgPSBzdGF0ZS5pZHMuZmlsdGVyKChpZCkgPT4gaWQgaW4gc3RhdGUuZW50aXRpZXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW1vdmVBbGxNdXRhYmx5KHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLCB7XHJcbiAgICAgIGlkczogW10sXHJcbiAgICAgIGVudGl0aWVzOiB7fSxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB0YWtlTmV3S2V5KFxyXG4gICAga2V5czogeyBbaWQ6IHN0cmluZ106IEVudGl0eUlkIH0sXHJcbiAgICB1cGRhdGU6IFVwZGF0ZTxUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5hbCA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF1cclxuICAgIGNvbnN0IHVwZGF0ZWQ6IFQgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbCwgdXBkYXRlLmNoYW5nZXMpXHJcbiAgICBjb25zdCBuZXdLZXkgPSBzZWxlY3RJZFZhbHVlKHVwZGF0ZWQsIHNlbGVjdElkKVxyXG4gICAgY29uc3QgaGFzTmV3S2V5ID0gbmV3S2V5ICE9PSB1cGRhdGUuaWRcclxuXHJcbiAgICBpZiAoaGFzTmV3S2V5KSB7XHJcbiAgICAgIGtleXNbdXBkYXRlLmlkXSA9IG5ld0tleVxyXG4gICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRlLmVudGl0aWVzW25ld0tleV0gPSB1cGRhdGVkXHJcblxyXG4gICAgcmV0dXJuIGhhc05ld0tleVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGU6IFVwZGF0ZTxUPiwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiB1cGRhdGVNYW55TXV0YWJseShbdXBkYXRlXSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseShcclxuICAgIHVwZGF0ZXM6IFJlYWRvbmx5QXJyYXk8VXBkYXRlPFQ+PixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZXdLZXlzOiB7IFtpZDogc3RyaW5nXTogRW50aXR5SWQgfSA9IHt9XHJcblxyXG4gICAgY29uc3QgdXBkYXRlc1BlckVudGl0eTogeyBbaWQ6IHN0cmluZ106IFVwZGF0ZTxUPiB9ID0ge31cclxuXHJcbiAgICB1cGRhdGVzLmZvckVhY2goKHVwZGF0ZSkgPT4ge1xyXG4gICAgICAvLyBPbmx5IGFwcGx5IHVwZGF0ZXMgdG8gZW50aXRpZXMgdGhhdCBjdXJyZW50bHkgZXhpc3RcclxuICAgICAgaWYgKHVwZGF0ZS5pZCBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB1cGRhdGVzIHRvIG9uZSBlbnRpdHksIG1lcmdlIHRoZW0gdG9nZXRoZXJcclxuICAgICAgICB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0gPSB7XHJcbiAgICAgICAgICBpZDogdXBkYXRlLmlkLFxyXG4gICAgICAgICAgLy8gU3ByZWFkcyBpZ25vcmUgZmFsc3kgdmFsdWVzLCBzbyB0aGlzIHdvcmtzIGV2ZW4gaWYgdGhlcmUgaXNuJ3RcclxuICAgICAgICAgIC8vIGFuIGV4aXN0aW5nIHVwZGF0ZSBhbHJlYWR5IGF0IHRoaXMga2V5XHJcbiAgICAgICAgICBjaGFuZ2VzOiB7XHJcbiAgICAgICAgICAgIC4uLih1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF1cclxuICAgICAgICAgICAgICA/IHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXS5jaGFuZ2VzXHJcbiAgICAgICAgICAgICAgOiBudWxsKSxcclxuICAgICAgICAgICAgLi4udXBkYXRlLmNoYW5nZXMsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICB1cGRhdGVzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzUGVyRW50aXR5KVxyXG5cclxuICAgIGNvbnN0IGRpZE11dGF0ZUVudGl0aWVzID0gdXBkYXRlcy5sZW5ndGggPiAwXHJcblxyXG4gICAgaWYgKGRpZE11dGF0ZUVudGl0aWVzKSB7XHJcbiAgICAgIGNvbnN0IGRpZE11dGF0ZUlkcyA9XHJcbiAgICAgICAgdXBkYXRlcy5maWx0ZXIoKHVwZGF0ZSkgPT4gdGFrZU5ld0tleShuZXdLZXlzLCB1cGRhdGUsIHN0YXRlKSkubGVuZ3RoID5cclxuICAgICAgICAwXHJcblxyXG4gICAgICBpZiAoZGlkTXV0YXRlSWRzKSB7XHJcbiAgICAgICAgc3RhdGUuaWRzID0gT2JqZWN0LmtleXMoc3RhdGUuZW50aXRpZXMpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE9uZU11dGFibHkoZW50aXR5OiBULCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgW2FkZGVkLCB1cGRhdGVkXSA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXM8VD4oXHJcbiAgICAgIG5ld0VudGl0aWVzLFxyXG4gICAgICBzZWxlY3RJZCxcclxuICAgICAgc3RhdGVcclxuICAgIClcclxuXHJcbiAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSlcclxuICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICByZW1vdmVBbGw6IGNyZWF0ZVNpbmdsZUFyZ3VtZW50U3RhdGVPcGVyYXRvcihyZW1vdmVBbGxNdXRhYmx5KSxcclxuICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcclxuICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxyXG4gICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXHJcbiAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXHJcbiAgICB1cGRhdGVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU1hbnlNdXRhYmx5KSxcclxuICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcclxuICAgIHVwc2VydE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0TWFueU11dGFibHkpLFxyXG4gICAgcmVtb3ZlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHJlbW92ZU9uZU11dGFibHkpLFxyXG4gICAgcmVtb3ZlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVNYW55TXV0YWJseSksXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgSWRTZWxlY3RvcixcclxuICBDb21wYXJlcixcclxuICBFbnRpdHlTdGF0ZUFkYXB0ZXIsXHJcbiAgVXBkYXRlLFxyXG4gIEVudGl0eUlkLFxyXG59IGZyb20gJy4vbW9kZWxzJ1xyXG5pbXBvcnQgeyBjcmVhdGVTdGF0ZU9wZXJhdG9yIH0gZnJvbSAnLi9zdGF0ZV9hZGFwdGVyJ1xyXG5pbXBvcnQgeyBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlciB9IGZyb20gJy4vdW5zb3J0ZWRfc3RhdGVfYWRhcHRlcidcclxuaW1wb3J0IHtcclxuICBzZWxlY3RJZFZhbHVlLFxyXG4gIGVuc3VyZUVudGl0aWVzQXJyYXksXHJcbiAgc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyxcclxufSBmcm9tICcuL3V0aWxzJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcjxUPihcclxuICBzZWxlY3RJZDogSWRTZWxlY3RvcjxUPixcclxuICBzb3J0OiBDb21wYXJlcjxUPlxyXG4pOiBFbnRpdHlTdGF0ZUFkYXB0ZXI8VD4ge1xyXG4gIHR5cGUgUiA9IEVudGl0eVN0YXRlPFQ+XHJcblxyXG4gIGNvbnN0IHsgcmVtb3ZlT25lLCByZW1vdmVNYW55LCByZW1vdmVBbGwgfSA9XHJcbiAgICBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZClcclxuXHJcbiAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHk6IFQsIHN0YXRlOiBSKTogdm9pZCB7XHJcbiAgICByZXR1cm4gYWRkTWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkoXHJcbiAgICBuZXdFbnRpdGllczogcmVhZG9ubHkgVFtdIHwgUmVjb3JkPEVudGl0eUlkLCBUPixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpXHJcblxyXG4gICAgY29uc3QgbW9kZWxzID0gbmV3RW50aXRpZXMuZmlsdGVyKFxyXG4gICAgICAobW9kZWwpID0+ICEoc2VsZWN0SWRWYWx1ZShtb2RlbCwgc2VsZWN0SWQpIGluIHN0YXRlLmVudGl0aWVzKVxyXG4gICAgKVxyXG5cclxuICAgIGlmIChtb2RlbHMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIG1lcmdlKG1vZGVscywgc3RhdGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eTogVCwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiBzZXRNYW55TXV0YWJseShbZW50aXR5XSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuICAgIGlmIChuZXdFbnRpdGllcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgbWVyZ2UobmV3RW50aXRpZXMsIHN0YXRlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2V0QWxsTXV0YWJseShcclxuICAgIG5ld0VudGl0aWVzOiByZWFkb25seSBUW10gfCBSZWNvcmQ8RW50aXR5SWQsIFQ+LFxyXG4gICAgc3RhdGU6IFJcclxuICApOiB2b2lkIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcylcclxuICAgIHN0YXRlLmVudGl0aWVzID0ge31cclxuICAgIHN0YXRlLmlkcyA9IFtdXHJcblxyXG4gICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGU6IFVwZGF0ZTxUPiwgc3RhdGU6IFIpOiB2b2lkIHtcclxuICAgIHJldHVybiB1cGRhdGVNYW55TXV0YWJseShbdXBkYXRlXSwgc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseShcclxuICAgIHVwZGF0ZXM6IFJlYWRvbmx5QXJyYXk8VXBkYXRlPFQ+PixcclxuICAgIHN0YXRlOiBSXHJcbiAgKTogdm9pZCB7XHJcbiAgICBsZXQgYXBwbGllZFVwZGF0ZXMgPSBmYWxzZVxyXG5cclxuICAgIGZvciAobGV0IHVwZGF0ZSBvZiB1cGRhdGVzKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0eSA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF1cclxuICAgICAgaWYgKCFlbnRpdHkpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBhcHBsaWVkVXBkYXRlcyA9IHRydWVcclxuXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oZW50aXR5LCB1cGRhdGUuY2hhbmdlcylcclxuICAgICAgY29uc3QgbmV3SWQgPSBzZWxlY3RJZChlbnRpdHkpXHJcbiAgICAgIGlmICh1cGRhdGUuaWQgIT09IG5ld0lkKSB7XHJcbiAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF1cclxuICAgICAgICBzdGF0ZS5lbnRpdGllc1tuZXdJZF0gPSBlbnRpdHlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChhcHBsaWVkVXBkYXRlcykge1xyXG4gICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE9uZU11dGFibHkoZW50aXR5OiBULCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KFxyXG4gICAgbmV3RW50aXRpZXM6IHJlYWRvbmx5IFRbXSB8IFJlY29yZDxFbnRpdHlJZCwgVD4sXHJcbiAgICBzdGF0ZTogUlxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgW2FkZGVkLCB1cGRhdGVkXSA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXM8VD4oXHJcbiAgICAgIG5ld0VudGl0aWVzLFxyXG4gICAgICBzZWxlY3RJZCxcclxuICAgICAgc3RhdGVcclxuICAgIClcclxuXHJcbiAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSlcclxuICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKGE6IHJlYWRvbmx5IHVua25vd25bXSwgYjogcmVhZG9ubHkgdW5rbm93bltdKSB7XHJcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGggJiYgaSA8IGIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGFbaV0gPT09IGJbaV0pIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIG1lcmdlKG1vZGVsczogcmVhZG9ubHkgVFtdLCBzdGF0ZTogUik6IHZvaWQge1xyXG4gICAgLy8gSW5zZXJ0L292ZXJ3cml0ZSBhbGwgbmV3L3VwZGF0ZWRcclxuICAgIG1vZGVscy5mb3JFYWNoKChtb2RlbCkgPT4ge1xyXG4gICAgICBzdGF0ZS5lbnRpdGllc1tzZWxlY3RJZChtb2RlbCldID0gbW9kZWxcclxuICAgIH0pXHJcblxyXG4gICAgcmVzb3J0RW50aXRpZXMoc3RhdGUpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZXNvcnRFbnRpdGllcyhzdGF0ZTogUikge1xyXG4gICAgY29uc3QgYWxsRW50aXRpZXMgPSBPYmplY3QudmFsdWVzKHN0YXRlLmVudGl0aWVzKSBhcyBUW11cclxuICAgIGFsbEVudGl0aWVzLnNvcnQoc29ydClcclxuXHJcbiAgICBjb25zdCBuZXdTb3J0ZWRJZHMgPSBhbGxFbnRpdGllcy5tYXAoc2VsZWN0SWQpXHJcbiAgICBjb25zdCB7IGlkcyB9ID0gc3RhdGVcclxuXHJcbiAgICBpZiAoIWFyZUFycmF5c0VxdWFsKGlkcywgbmV3U29ydGVkSWRzKSkge1xyXG4gICAgICBzdGF0ZS5pZHMgPSBuZXdTb3J0ZWRJZHNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICByZW1vdmVPbmUsXHJcbiAgICByZW1vdmVNYW55LFxyXG4gICAgcmVtb3ZlQWxsLFxyXG4gICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxyXG4gICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxyXG4gICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxyXG4gICAgc2V0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE9uZU11dGFibHkpLFxyXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXHJcbiAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICBhZGRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE1hbnlNdXRhYmx5KSxcclxuICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxyXG4gICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSksXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgRW50aXR5RGVmaW5pdGlvbixcclxuICBDb21wYXJlcixcclxuICBJZFNlbGVjdG9yLFxyXG4gIEVudGl0eUFkYXB0ZXIsXHJcbn0gZnJvbSAnLi9tb2RlbHMnXHJcbmltcG9ydCB7IGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3RvcnkgfSBmcm9tICcuL2VudGl0eV9zdGF0ZSdcclxuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3JzRmFjdG9yeSB9IGZyb20gJy4vc3RhdGVfc2VsZWN0b3JzJ1xyXG5pbXBvcnQgeyBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXIgfSBmcm9tICcuL3NvcnRlZF9zdGF0ZV9hZGFwdGVyJ1xyXG5pbXBvcnQgeyBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlciB9IGZyb20gJy4vdW5zb3J0ZWRfc3RhdGVfYWRhcHRlcidcclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0gb3B0aW9uc1xyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW50aXR5QWRhcHRlcjxUPihcclxuICBvcHRpb25zOiB7XHJcbiAgICBzZWxlY3RJZD86IElkU2VsZWN0b3I8VD5cclxuICAgIHNvcnRDb21wYXJlcj86IGZhbHNlIHwgQ29tcGFyZXI8VD5cclxuICB9ID0ge31cclxuKTogRW50aXR5QWRhcHRlcjxUPiB7XHJcbiAgY29uc3QgeyBzZWxlY3RJZCwgc29ydENvbXBhcmVyIH06IEVudGl0eURlZmluaXRpb248VD4gPSB7XHJcbiAgICBzb3J0Q29tcGFyZXI6IGZhbHNlLFxyXG4gICAgc2VsZWN0SWQ6IChpbnN0YW5jZTogYW55KSA9PiBpbnN0YW5jZS5pZCxcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgfVxyXG5cclxuICBjb25zdCBzdGF0ZUZhY3RvcnkgPSBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5PFQ+KClcclxuICBjb25zdCBzZWxlY3RvcnNGYWN0b3J5ID0gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeTxUPigpXHJcbiAgY29uc3Qgc3RhdGVBZGFwdGVyID0gc29ydENvbXBhcmVyXHJcbiAgICA/IGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydENvbXBhcmVyKVxyXG4gICAgOiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZClcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHNlbGVjdElkLFxyXG4gICAgc29ydENvbXBhcmVyLFxyXG4gICAgLi4uc3RhdGVGYWN0b3J5LFxyXG4gICAgLi4uc2VsZWN0b3JzRmFjdG9yeSxcclxuICAgIC4uLnN0YXRlQWRhcHRlcixcclxuICB9XHJcbn1cclxuIiwgIi8vIEJvcnJvd2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FpL25hbm9pZC9ibG9iLzMuMC4yL25vbi1zZWN1cmUvaW5kZXguanNcclxuLy8gVGhpcyBhbHBoYWJldCB1c2VzIGBBLVphLXowLTlfLWAgc3ltYm9scy4gQSBnZW5ldGljIGFsZ29yaXRobSBoZWxwZWRcclxuLy8gb3B0aW1pemUgdGhlIGd6aXAgY29tcHJlc3Npb24gZm9yIHRoaXMgYWxwaGFiZXQuXHJcbmxldCB1cmxBbHBoYWJldCA9XHJcbiAgJ01vZHVsZVN5bWJoYXNPd25Qci0wMTIzNDU2Nzg5QUJDREVGR0hOUlZmZ2N0aVV2el9LcVlUSmtMeHBaWElqUVcnXHJcblxyXG4vKipcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGxldCBuYW5vaWQgPSAoc2l6ZSA9IDIxKSA9PiB7XHJcbiAgbGV0IGlkID0gJydcclxuICAvLyBBIGNvbXBhY3QgYWx0ZXJuYXRpdmUgZm9yIGBmb3IgKHZhciBpID0gMDsgaSA8IHN0ZXA7IGkrKylgLlxyXG4gIGxldCBpID0gc2l6ZVxyXG4gIHdoaWxlIChpLS0pIHtcclxuICAgIC8vIGB8IDBgIGlzIG1vcmUgY29tcGFjdCBhbmQgZmFzdGVyIHRoYW4gYE1hdGguZmxvb3IoKWAuXHJcbiAgICBpZCArPSB1cmxBbHBoYWJldFsoTWF0aC5yYW5kb20oKSAqIDY0KSB8IDBdXHJcbiAgfVxyXG4gIHJldHVybiBpZFxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IERpc3BhdGNoLCBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUge1xyXG4gIFBheWxvYWRBY3Rpb24sXHJcbiAgQWN0aW9uQ3JlYXRvcldpdGhQcmVwYXJlZFBheWxvYWQsXHJcbn0gZnJvbSAnLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiB9IGZyb20gJy4vY3JlYXRlQWN0aW9uJ1xyXG5pbXBvcnQgdHlwZSB7IFRodW5rRGlzcGF0Y2ggfSBmcm9tICdyZWR1eC10aHVuaydcclxuaW1wb3J0IHR5cGUgeyBGYWxsYmFja0lmVW5rbm93biwgSWQsIElzQW55LCBJc1Vua25vd24gfSBmcm9tICcuL3RzSGVscGVycydcclxuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnLi9uYW5vaWQnXHJcblxyXG4vLyBAdHMtaWdub3JlIHdlIG5lZWQgdGhlIGltcG9ydCBvZiB0aGVzZSB0eXBlcyBkdWUgdG8gYSBidW5kbGluZyBpc3N1ZS5cclxudHlwZSBfS2VlcCA9IFBheWxvYWRBY3Rpb24gfCBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxhbnksIHVua25vd24+XHJcblxyXG5leHBvcnQgdHlwZSBCYXNlVGh1bmtBUEk8XHJcbiAgUyxcclxuICBFLFxyXG4gIEQgZXh0ZW5kcyBEaXNwYXRjaCA9IERpc3BhdGNoLFxyXG4gIFJlamVjdGVkVmFsdWUgPSB1bmtub3duLFxyXG4gIFJlamVjdGVkTWV0YSA9IHVua25vd24sXHJcbiAgRnVsZmlsbGVkTWV0YSA9IHVua25vd25cclxuPiA9IHtcclxuICBkaXNwYXRjaDogRFxyXG4gIGdldFN0YXRlOiAoKSA9PiBTXHJcbiAgZXh0cmE6IEVcclxuICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gIHNpZ25hbDogQWJvcnRTaWduYWxcclxuICBhYm9ydDogKHJlYXNvbj86IHN0cmluZykgPT4gdm9pZFxyXG4gIHJlamVjdFdpdGhWYWx1ZTogSXNVbmtub3duPFxyXG4gICAgUmVqZWN0ZWRNZXRhLFxyXG4gICAgKHZhbHVlOiBSZWplY3RlZFZhbHVlKSA9PiBSZWplY3RXaXRoVmFsdWU8UmVqZWN0ZWRWYWx1ZSwgUmVqZWN0ZWRNZXRhPixcclxuICAgIChcclxuICAgICAgdmFsdWU6IFJlamVjdGVkVmFsdWUsXHJcbiAgICAgIG1ldGE6IFJlamVjdGVkTWV0YVxyXG4gICAgKSA9PiBSZWplY3RXaXRoVmFsdWU8UmVqZWN0ZWRWYWx1ZSwgUmVqZWN0ZWRNZXRhPlxyXG4gID5cclxuICBmdWxmaWxsV2l0aFZhbHVlOiBJc1Vua25vd248XHJcbiAgICBGdWxmaWxsZWRNZXRhLFxyXG4gICAgPEZ1bGZpbGxlZFZhbHVlPih2YWx1ZTogRnVsZmlsbGVkVmFsdWUpID0+IEZ1bGZpbGxlZFZhbHVlLFxyXG4gICAgPEZ1bGZpbGxlZFZhbHVlPihcclxuICAgICAgdmFsdWU6IEZ1bGZpbGxlZFZhbHVlLFxyXG4gICAgICBtZXRhOiBGdWxmaWxsZWRNZXRhXHJcbiAgICApID0+IEZ1bGZpbGxXaXRoTWV0YTxGdWxmaWxsZWRWYWx1ZSwgRnVsZmlsbGVkTWV0YT5cclxuICA+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRFcnJvciB7XHJcbiAgbmFtZT86IHN0cmluZ1xyXG4gIG1lc3NhZ2U/OiBzdHJpbmdcclxuICBzdGFjaz86IHN0cmluZ1xyXG4gIGNvZGU/OiBzdHJpbmdcclxufVxyXG5cclxuY29uc3QgY29tbW9uUHJvcGVydGllczogQXJyYXk8a2V5b2YgU2VyaWFsaXplZEVycm9yPiA9IFtcclxuICAnbmFtZScsXHJcbiAgJ21lc3NhZ2UnLFxyXG4gICdzdGFjaycsXHJcbiAgJ2NvZGUnLFxyXG5dXHJcblxyXG5jbGFzcyBSZWplY3RXaXRoVmFsdWU8UGF5bG9hZCwgUmVqZWN0ZWRNZXRhPiB7XHJcbiAgLypcclxuICB0eXBlLW9ubHkgcHJvcGVydHkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBSZWplY3RXaXRoVmFsdWUgYW5kIEZ1bGZpbGxXaXRoTWV0YVxyXG4gIGRvZXMgbm90IGV4aXN0IGF0IHJ1bnRpbWVcclxuICAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3R5cGUhOiAnUmVqZWN0V2l0aFZhbHVlJ1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHBheWxvYWQ6IFBheWxvYWQsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbWV0YTogUmVqZWN0ZWRNZXRhXHJcbiAgKSB7fVxyXG59XHJcblxyXG5jbGFzcyBGdWxmaWxsV2l0aE1ldGE8UGF5bG9hZCwgRnVsZmlsbGVkTWV0YT4ge1xyXG4gIC8qXHJcbiAgdHlwZS1vbmx5IHByb3BlcnR5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gUmVqZWN0V2l0aFZhbHVlIGFuZCBGdWxmaWxsV2l0aE1ldGFcclxuICBkb2VzIG5vdCBleGlzdCBhdCBydW50aW1lXHJcbiAgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IF90eXBlITogJ0Z1bGZpbGxXaXRoTWV0YSdcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZWFkb25seSBwYXlsb2FkOiBQYXlsb2FkLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IG1ldGE6IEZ1bGZpbGxlZE1ldGFcclxuICApIHt9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXJpYWxpemVzIGFuIGVycm9yIGludG8gYSBwbGFpbiBvYmplY3QuXHJcbiAqIFJld29ya2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9zZXJpYWxpemUtZXJyb3JcclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG1pbmlTZXJpYWxpemVFcnJvciA9ICh2YWx1ZTogYW55KTogU2VyaWFsaXplZEVycm9yID0+IHtcclxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgY29uc3Qgc2ltcGxlRXJyb3I6IFNlcmlhbGl6ZWRFcnJvciA9IHt9XHJcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGNvbW1vblByb3BlcnRpZXMpIHtcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZVtwcm9wZXJ0eV0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgc2ltcGxlRXJyb3JbcHJvcGVydHldID0gdmFsdWVbcHJvcGVydHldXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2ltcGxlRXJyb3JcclxuICB9XHJcblxyXG4gIHJldHVybiB7IG1lc3NhZ2U6IFN0cmluZyh2YWx1ZSkgfVxyXG59XHJcblxyXG50eXBlIEFzeW5jVGh1bmtDb25maWcgPSB7XHJcbiAgc3RhdGU/OiB1bmtub3duXHJcbiAgZGlzcGF0Y2g/OiBEaXNwYXRjaFxyXG4gIGV4dHJhPzogdW5rbm93blxyXG4gIHJlamVjdFZhbHVlPzogdW5rbm93blxyXG4gIHNlcmlhbGl6ZWRFcnJvclR5cGU/OiB1bmtub3duXHJcbiAgcGVuZGluZ01ldGE/OiB1bmtub3duXHJcbiAgZnVsZmlsbGVkTWV0YT86IHVua25vd25cclxuICByZWplY3RlZE1ldGE/OiB1bmtub3duXHJcbn1cclxuXHJcbnR5cGUgR2V0U3RhdGU8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgc3RhdGU6IGluZmVyIFN0YXRlXHJcbn1cclxuICA/IFN0YXRlXHJcbiAgOiB1bmtub3duXHJcbnR5cGUgR2V0RXh0cmE8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7IGV4dHJhOiBpbmZlciBFeHRyYSB9XHJcbiAgPyBFeHRyYVxyXG4gIDogdW5rbm93blxyXG50eXBlIEdldERpc3BhdGNoPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIGRpc3BhdGNoOiBpbmZlciBEaXNwYXRjaFxyXG59XHJcbiAgPyBGYWxsYmFja0lmVW5rbm93bjxcclxuICAgICAgRGlzcGF0Y2gsXHJcbiAgICAgIFRodW5rRGlzcGF0Y2g8XHJcbiAgICAgICAgR2V0U3RhdGU8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICAgIEdldEV4dHJhPFRodW5rQXBpQ29uZmlnPixcclxuICAgICAgICBBbnlBY3Rpb25cclxuICAgICAgPlxyXG4gICAgPlxyXG4gIDogVGh1bmtEaXNwYXRjaDxHZXRTdGF0ZTxUaHVua0FwaUNvbmZpZz4sIEdldEV4dHJhPFRodW5rQXBpQ29uZmlnPiwgQW55QWN0aW9uPlxyXG5cclxuZXhwb3J0IHR5cGUgR2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+ID0gQmFzZVRodW5rQVBJPFxyXG4gIEdldFN0YXRlPFRodW5rQXBpQ29uZmlnPixcclxuICBHZXRFeHRyYTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgR2V0RGlzcGF0Y2g8VGh1bmtBcGlDb25maWc+LFxyXG4gIEdldFJlamVjdFZhbHVlPFRodW5rQXBpQ29uZmlnPixcclxuICBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+LFxyXG4gIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcbj5cclxuXHJcbnR5cGUgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgcmVqZWN0VmFsdWU6IGluZmVyIFJlamVjdFZhbHVlXHJcbn1cclxuICA/IFJlamVjdFZhbHVlXHJcbiAgOiB1bmtub3duXHJcblxyXG50eXBlIEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIHBlbmRpbmdNZXRhOiBpbmZlciBQZW5kaW5nTWV0YVxyXG59XHJcbiAgPyBQZW5kaW5nTWV0YVxyXG4gIDogdW5rbm93blxyXG5cclxudHlwZSBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPiA9IFRodW5rQXBpQ29uZmlnIGV4dGVuZHMge1xyXG4gIGZ1bGZpbGxlZE1ldGE6IGluZmVyIEZ1bGZpbGxlZE1ldGFcclxufVxyXG4gID8gRnVsZmlsbGVkTWV0YVxyXG4gIDogdW5rbm93blxyXG5cclxudHlwZSBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgcmVqZWN0ZWRNZXRhOiBpbmZlciBSZWplY3RlZE1ldGFcclxufVxyXG4gID8gUmVqZWN0ZWRNZXRhXHJcbiAgOiB1bmtub3duXHJcblxyXG50eXBlIEdldFNlcmlhbGl6ZWRFcnJvclR5cGU8VGh1bmtBcGlDb25maWc+ID0gVGh1bmtBcGlDb25maWcgZXh0ZW5kcyB7XHJcbiAgc2VyaWFsaXplZEVycm9yVHlwZTogaW5mZXIgR2V0U2VyaWFsaXplZEVycm9yVHlwZVxyXG59XHJcbiAgPyBHZXRTZXJpYWxpemVkRXJyb3JUeXBlXHJcbiAgOiBTZXJpYWxpemVkRXJyb3JcclxuXHJcbnR5cGUgTWF5YmVQcm9taXNlPFQ+ID0gVCB8IFByb21pc2U8VD4gfCAoVCBleHRlbmRzIGFueSA/IFByb21pc2U8VD4gOiBuZXZlcilcclxuXHJcbi8qKlxyXG4gKiBBIHR5cGUgZGVzY3JpYmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBgcGF5bG9hZENyZWF0b3JgIGFyZ3VtZW50IHRvIGBjcmVhdGVBc3luY1RodW5rYC5cclxuICogTWlnaHQgYmUgdXNlZnVsIGZvciB3cmFwcGluZyBgY3JlYXRlQXN5bmNUaHVua2AgaW4gY3VzdG9tIGFic3RyYWN0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yUmV0dXJuVmFsdWU8XHJcbiAgUmV0dXJuZWQsXHJcbiAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnXHJcbj4gPSBNYXliZVByb21pc2U8XHJcbiAgfCBJc1Vua25vd248XHJcbiAgICAgIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICBSZXR1cm5lZCxcclxuICAgICAgRnVsZmlsbFdpdGhNZXRhPFJldHVybmVkLCBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPj5cclxuICAgID5cclxuICB8IFJlamVjdFdpdGhWYWx1ZTxcclxuICAgICAgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+LFxyXG4gICAgICBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcbiAgICA+XHJcbj5cclxuLyoqXHJcbiAqIEEgdHlwZSBkZXNjcmliaW5nIHRoZSBgcGF5bG9hZENyZWF0b3JgIGFyZ3VtZW50IHRvIGBjcmVhdGVBc3luY1RodW5rYC5cclxuICogTWlnaHQgYmUgdXNlZnVsIGZvciB3cmFwcGluZyBgY3JlYXRlQXN5bmNUaHVua2AgaW4gY3VzdG9tIGFic3RyYWN0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVua1BheWxvYWRDcmVhdG9yPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnID0gdm9pZCxcclxuICBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWcgPSB7fVxyXG4+ID0gKFxyXG4gIGFyZzogVGh1bmtBcmcsXHJcbiAgdGh1bmtBUEk6IEdldFRodW5rQVBJPFRodW5rQXBpQ29uZmlnPlxyXG4pID0+IEFzeW5jVGh1bmtQYXlsb2FkQ3JlYXRvclJldHVyblZhbHVlPFJldHVybmVkLCBUaHVua0FwaUNvbmZpZz5cclxuXHJcbi8qKlxyXG4gKiBBIFRodW5rQWN0aW9uIGNyZWF0ZWQgYnkgYGNyZWF0ZUFzeW5jVGh1bmtgLlxyXG4gKiBEaXNwYXRjaGluZyBpdCByZXR1cm5zIGEgUHJvbWlzZSBmb3IgZWl0aGVyIGFcclxuICogZnVsZmlsbGVkIG9yIHJlamVjdGVkIGFjdGlvbi5cclxuICogQWxzbywgdGhlIHJldHVybmVkIHZhbHVlIGNvbnRhaW5zIGFuIGBhYm9ydCgpYCBtZXRob2RcclxuICogdGhhdCBhbGxvd3MgdGhlIGFzeW5jQWN0aW9uIHRvIGJlIGNhbmNlbGxlZCBmcm9tIHRoZSBvdXRzaWRlLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rQWN0aW9uPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZ1xyXG4+ID0gKFxyXG4gIGRpc3BhdGNoOiBHZXREaXNwYXRjaDxUaHVua0FwaUNvbmZpZz4sXHJcbiAgZ2V0U3RhdGU6ICgpID0+IEdldFN0YXRlPFRodW5rQXBpQ29uZmlnPixcclxuICBleHRyYTogR2V0RXh0cmE8VGh1bmtBcGlDb25maWc+XHJcbikgPT4gUHJvbWlzZTxcclxuICB8IFJldHVyblR5cGU8QXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8UmV0dXJuZWQsIFRodW5rQXJnPj5cclxuICB8IFJldHVyblR5cGU8QXN5bmNUaHVua1JlamVjdGVkQWN0aW9uQ3JlYXRvcjxUaHVua0FyZywgVGh1bmtBcGlDb25maWc+PlxyXG4+ICYge1xyXG4gIGFib3J0OiAocmVhc29uPzogc3RyaW5nKSA9PiB2b2lkXHJcbiAgcmVxdWVzdElkOiBzdHJpbmdcclxuICBhcmc6IFRodW5rQXJnXHJcbiAgdW53cmFwOiAoKSA9PiBQcm9taXNlPFJldHVybmVkPlxyXG59XHJcblxyXG50eXBlIEFzeW5jVGh1bmtBY3Rpb25DcmVhdG9yPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnIGV4dGVuZHMgQXN5bmNUaHVua0NvbmZpZ1xyXG4+ID0gSXNBbnk8XHJcbiAgVGh1bmtBcmcsXHJcbiAgLy8gYW55IGhhbmRsaW5nXHJcbiAgKGFyZzogVGh1bmtBcmcpID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4sXHJcbiAgLy8gdW5rbm93biBoYW5kbGluZ1xyXG4gIHVua25vd24gZXh0ZW5kcyBUaHVua0FyZ1xyXG4gICAgPyAoYXJnOiBUaHVua0FyZykgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiAvLyBhcmd1bWVudCBub3Qgc3BlY2lmaWVkIG9yIHNwZWNpZmllZCBhcyB2b2lkIG9yIHVuZGVmaW5lZFxyXG4gICAgOiBbVGh1bmtBcmddIGV4dGVuZHMgW3ZvaWRdIHwgW3VuZGVmaW5lZF1cclxuICAgID8gKCkgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiAvLyBhcmd1bWVudCBjb250YWlucyB2b2lkXHJcbiAgICA6IFt2b2lkXSBleHRlbmRzIFtUaHVua0FyZ10gLy8gbWFrZSBvcHRpb25hbFxyXG4gICAgPyAoYXJnPzogVGh1bmtBcmcpID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4gLy8gYXJndW1lbnQgY29udGFpbnMgdW5kZWZpbmVkXHJcbiAgICA6IFt1bmRlZmluZWRdIGV4dGVuZHMgW1RodW5rQXJnXVxyXG4gICAgPyBXaXRoU3RyaWN0TnVsbENoZWNrczxcclxuICAgICAgICAvLyB3aXRoIHN0cmljdCBudWxsQ2hlY2tzOiBtYWtlIG9wdGlvbmFsXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgYXJnPzogVGh1bmtBcmdcclxuICAgICAgICApID0+IEFzeW5jVGh1bmtBY3Rpb248UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4sXHJcbiAgICAgICAgLy8gd2l0aG91dCBzdHJpY3QgbnVsbCBjaGVja3MgdGhpcyB3aWxsIG1hdGNoIGV2ZXJ5dGhpbmcsIHNvIGRvbid0IG1ha2UgaXQgb3B0aW9uYWxcclxuICAgICAgICAoYXJnOiBUaHVua0FyZykgPT4gQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4gICAgICA+IC8vIGRlZmF1bHQgY2FzZTogbm9ybWFsIGFyZ3VtZW50XHJcbiAgICA6IChhcmc6IFRodW5rQXJnKSA9PiBBc3luY1RodW5rQWN0aW9uPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIG9iamVjdCBmb3IgYGNyZWF0ZUFzeW5jVGh1bmtgLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rT3B0aW9uczxcclxuICBUaHVua0FyZyA9IHZvaWQsXHJcbiAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnID0ge31cclxuPiA9IHtcclxuICAvKipcclxuICAgKiBBIG1ldGhvZCB0byBjb250cm9sIHdoZXRoZXIgdGhlIGFzeW5jVGh1bmsgc2hvdWxkIGJlIGV4ZWN1dGVkLiBIYXMgYWNjZXNzIHRvIHRoZVxyXG4gICAqIGBhcmdgLCBgYXBpLmdldFN0YXRlKClgIGFuZCBgYXBpLmV4dHJhYCBhcmd1bWVudHMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBgZmFsc2VgIGlmIGl0IHNob3VsZCBiZSBza2lwcGVkXHJcbiAgICovXHJcbiAgY29uZGl0aW9uPyhcclxuICAgIGFyZzogVGh1bmtBcmcsXHJcbiAgICBhcGk6IFBpY2s8R2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+LCAnZ2V0U3RhdGUnIHwgJ2V4dHJhJz5cclxuICApOiBNYXliZVByb21pc2U8Ym9vbGVhbiB8IHVuZGVmaW5lZD5cclxuICAvKipcclxuICAgKiBJZiBgY29uZGl0aW9uYCByZXR1cm5zIGBmYWxzZWAsIHRoZSBhc3luY1RodW5rIHdpbGwgYmUgc2tpcHBlZC5cclxuICAgKiBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNvbnRyb2wgd2hldGhlciBhIGByZWplY3RlZGAgYWN0aW9uIHdpdGggYG1ldGEuY29uZGl0aW9uID09IGZhbHNlYFxyXG4gICAqIHdpbGwgYmUgZGlzcGF0Y2hlZCBvciBub3QuXHJcbiAgICpcclxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXHJcbiAgICovXHJcbiAgZGlzcGF0Y2hDb25kaXRpb25SZWplY3Rpb24/OiBib29sZWFuXHJcblxyXG4gIHNlcmlhbGl6ZUVycm9yPzogKHg6IHVua25vd24pID0+IEdldFNlcmlhbGl6ZWRFcnJvclR5cGU8VGh1bmtBcGlDb25maWc+XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyB0aGUgYHJlcXVlc3RJZGAgZm9yIHRoZSByZXF1ZXN0IHNlcXVlbmNlLlxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgYG5hbm9pZGBcclxuICAgKi9cclxuICBpZEdlbmVyYXRvcj86IChhcmc6IFRodW5rQXJnKSA9PiBzdHJpbmdcclxufSAmIElzVW5rbm93bjxcclxuICBHZXRQZW5kaW5nTWV0YTxUaHVua0FwaUNvbmZpZz4sXHJcbiAge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBIG1ldGhvZCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gYG1ldGFgIG9mIHRoZSBwZW5kaW5nIGFjdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBVc2luZyB0aGlzIG9wdGlvbmFsIG92ZXJsb2FkIHdpbGwgbm90IG1vZGlmeSB0aGUgdHlwZXMgY29ycmVjdGx5LCB0aGlzIG92ZXJsb2FkIGlzIG9ubHkgaW4gcGxhY2UgdG8gc3VwcG9ydCBKYXZhU2NyaXB0IHVzZXJzLlxyXG4gICAgICogUGxlYXNlIHVzZSB0aGUgYFRodW5rQXBpQ29uZmlnYCBwYXJhbWV0ZXIgYHBlbmRpbmdNZXRhYCB0byBnZXQgYWNjZXNzIHRvIGEgY29ycmVjdGx5IHR5cGVkIG92ZXJsb2FkXHJcbiAgICAgKi9cclxuICAgIGdldFBlbmRpbmdNZXRhPyhcclxuICAgICAgYmFzZToge1xyXG4gICAgICAgIGFyZzogVGh1bmtBcmdcclxuICAgICAgICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gICAgICB9LFxyXG4gICAgICBhcGk6IFBpY2s8R2V0VGh1bmtBUEk8VGh1bmtBcGlDb25maWc+LCAnZ2V0U3RhdGUnIHwgJ2V4dHJhJz5cclxuICAgICk6IEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4gIH0sXHJcbiAge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBIG1ldGhvZCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gYG1ldGFgIG9mIHRoZSBwZW5kaW5nIGFjdGlvbi5cclxuICAgICAqL1xyXG4gICAgZ2V0UGVuZGluZ01ldGEoXHJcbiAgICAgIGJhc2U6IHtcclxuICAgICAgICBhcmc6IFRodW5rQXJnXHJcbiAgICAgICAgcmVxdWVzdElkOiBzdHJpbmdcclxuICAgICAgfSxcclxuICAgICAgYXBpOiBQaWNrPEdldFRodW5rQVBJPFRodW5rQXBpQ29uZmlnPiwgJ2dldFN0YXRlJyB8ICdleHRyYSc+XHJcbiAgICApOiBHZXRQZW5kaW5nTWV0YTxUaHVua0FwaUNvbmZpZz5cclxuICB9XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcjxcclxuICBUaHVua0FyZyxcclxuICBUaHVua0FwaUNvbmZpZyA9IHt9XHJcbj4gPSBBY3Rpb25DcmVhdG9yV2l0aFByZXBhcmVkUGF5bG9hZDxcclxuICBbc3RyaW5nLCBUaHVua0FyZywgR2V0UGVuZGluZ01ldGE8VGh1bmtBcGlDb25maWc+P10sXHJcbiAgdW5kZWZpbmVkLFxyXG4gIHN0cmluZyxcclxuICBuZXZlcixcclxuICB7XHJcbiAgICBhcmc6IFRodW5rQXJnXHJcbiAgICByZXF1ZXN0SWQ6IHN0cmluZ1xyXG4gICAgcmVxdWVzdFN0YXR1czogJ3BlbmRpbmcnXHJcbiAgfSAmIEdldFBlbmRpbmdNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yPFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnID0ge31cclxuPiA9IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIFtcclxuICAgIEVycm9yIHwgbnVsbCxcclxuICAgIHN0cmluZyxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+PyxcclxuICAgIEdldFJlamVjdGVkTWV0YTxUaHVua0FwaUNvbmZpZz4/XHJcbiAgXSxcclxuICBHZXRSZWplY3RWYWx1ZTxUaHVua0FwaUNvbmZpZz4gfCB1bmRlZmluZWQsXHJcbiAgc3RyaW5nLFxyXG4gIEdldFNlcmlhbGl6ZWRFcnJvclR5cGU8VGh1bmtBcGlDb25maWc+LFxyXG4gIHtcclxuICAgIGFyZzogVGh1bmtBcmdcclxuICAgIHJlcXVlc3RJZDogc3RyaW5nXHJcbiAgICByZXF1ZXN0U3RhdHVzOiAncmVqZWN0ZWQnXHJcbiAgICBhYm9ydGVkOiBib29sZWFuXHJcbiAgICBjb25kaXRpb246IGJvb2xlYW5cclxuICB9ICYgKFxyXG4gICAgfCAoeyByZWplY3RlZFdpdGhWYWx1ZTogZmFsc2UgfSAmIHtcclxuICAgICAgICBbSyBpbiBrZXlvZiBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+XT86IHVuZGVmaW5lZFxyXG4gICAgICB9KVxyXG4gICAgfCAoeyByZWplY3RlZFdpdGhWYWx1ZTogdHJ1ZSB9ICYgR2V0UmVqZWN0ZWRNZXRhPFRodW5rQXBpQ29uZmlnPilcclxuICApXHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIEFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25DcmVhdG9yPFxyXG4gIFJldHVybmVkLFxyXG4gIFRodW5rQXJnLFxyXG4gIFRodW5rQXBpQ29uZmlnID0ge31cclxuPiA9IEFjdGlvbkNyZWF0b3JXaXRoUHJlcGFyZWRQYXlsb2FkPFxyXG4gIFtSZXR1cm5lZCwgc3RyaW5nLCBUaHVua0FyZywgR2V0RnVsZmlsbGVkTWV0YTxUaHVua0FwaUNvbmZpZz4/XSxcclxuICBSZXR1cm5lZCxcclxuICBzdHJpbmcsXHJcbiAgbmV2ZXIsXHJcbiAge1xyXG4gICAgYXJnOiBUaHVua0FyZ1xyXG4gICAgcmVxdWVzdElkOiBzdHJpbmdcclxuICAgIHJlcXVlc3RTdGF0dXM6ICdmdWxmaWxsZWQnXHJcbiAgfSAmIEdldEZ1bGZpbGxlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcbj5cclxuXHJcbi8qKlxyXG4gKiBBIHR5cGUgZGVzY3JpYmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBjcmVhdGVBc3luY1RodW5rYC5cclxuICogTWlnaHQgYmUgdXNlZnVsIGZvciB3cmFwcGluZyBgY3JlYXRlQXN5bmNUaHVua2AgaW4gY3VzdG9tIGFic3RyYWN0aW9ucy5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgQXN5bmNUaHVuazxcclxuICBSZXR1cm5lZCxcclxuICBUaHVua0FyZyxcclxuICBUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWdcclxuPiA9IEFzeW5jVGh1bmtBY3Rpb25DcmVhdG9yPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWc+ICYge1xyXG4gIHBlbmRpbmc6IEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcjxUaHVua0FyZywgVGh1bmtBcGlDb25maWc+XHJcbiAgcmVqZWN0ZWQ6IEFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4gIGZ1bGZpbGxlZDogQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8XHJcbiAgICBSZXR1cm5lZCxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgVGh1bmtBcGlDb25maWdcclxuICA+XHJcbiAgdHlwZVByZWZpeDogc3RyaW5nXHJcbn1cclxuXHJcbnR5cGUgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8T2xkQ29uZmlnLCBOZXdDb25maWc+ID0gSWQ8XHJcbiAgTmV3Q29uZmlnICYgT21pdDxPbGRDb25maWcsIGtleW9mIE5ld0NvbmZpZz5cclxuPlxyXG5cclxudHlwZSBDcmVhdGVBc3luY1RodW5rPEN1cnJpZWRUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWc+ID0ge1xyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHR5cGVQcmVmaXhcclxuICAgKiBAcGFyYW0gcGF5bG9hZENyZWF0b3JcclxuICAgKiBAcGFyYW0gb3B0aW9uc1xyXG4gICAqXHJcbiAgICogQHB1YmxpY1xyXG4gICAqL1xyXG4gIC8vIHNlcGFyYXRlIHNpZ25hdHVyZSB3aXRob3V0IGBBc3luY1RodW5rQ29uZmlnYCBmb3IgYmV0dGVyIGluZmVyZW5jZVxyXG4gIDxSZXR1cm5lZCwgVGh1bmtBcmcgPSB2b2lkPihcclxuICAgIHR5cGVQcmVmaXg6IHN0cmluZyxcclxuICAgIHBheWxvYWRDcmVhdG9yOiBBc3luY1RodW5rUGF5bG9hZENyZWF0b3I8XHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgQ3VycmllZFRodW5rQXBpQ29uZmlnXHJcbiAgICA+LFxyXG4gICAgb3B0aW9ucz86IEFzeW5jVGh1bmtPcHRpb25zPFRodW5rQXJnLCBDdXJyaWVkVGh1bmtBcGlDb25maWc+XHJcbiAgKTogQXN5bmNUaHVuazxSZXR1cm5lZCwgVGh1bmtBcmcsIEN1cnJpZWRUaHVua0FwaUNvbmZpZz5cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHlwZVByZWZpeFxyXG4gICAqIEBwYXJhbSBwYXlsb2FkQ3JlYXRvclxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICpcclxuICAgKiBAcHVibGljXHJcbiAgICovXHJcbiAgPFJldHVybmVkLCBUaHVua0FyZywgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnPihcclxuICAgIHR5cGVQcmVmaXg6IHN0cmluZyxcclxuICAgIHBheWxvYWRDcmVhdG9yOiBBc3luY1RodW5rUGF5bG9hZENyZWF0b3I8XHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8Q3VycmllZFRodW5rQXBpQ29uZmlnLCBUaHVua0FwaUNvbmZpZz5cclxuICAgID4sXHJcbiAgICBvcHRpb25zPzogQXN5bmNUaHVua09wdGlvbnM8XHJcbiAgICAgIFRodW5rQXJnLFxyXG4gICAgICBPdmVycmlkZVRodW5rQXBpQ29uZmlnczxDdXJyaWVkVGh1bmtBcGlDb25maWcsIFRodW5rQXBpQ29uZmlnPlxyXG4gICAgPlxyXG4gICk6IEFzeW5jVGh1bms8XHJcbiAgICBSZXR1cm5lZCxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgT3ZlcnJpZGVUaHVua0FwaUNvbmZpZ3M8Q3VycmllZFRodW5rQXBpQ29uZmlnLCBUaHVua0FwaUNvbmZpZz5cclxuICA+XHJcblxyXG4gIHdpdGhUeXBlczxUaHVua0FwaUNvbmZpZyBleHRlbmRzIEFzeW5jVGh1bmtDb25maWc+KCk6IENyZWF0ZUFzeW5jVGh1bms8XHJcbiAgICBPdmVycmlkZVRodW5rQXBpQ29uZmlnczxDdXJyaWVkVGh1bmtBcGlDb25maWcsIFRodW5rQXBpQ29uZmlnPlxyXG4gID5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFzeW5jVGh1bmsgPSAoKCkgPT4ge1xyXG4gIGZ1bmN0aW9uIGNyZWF0ZUFzeW5jVGh1bms8XHJcbiAgICBSZXR1cm5lZCxcclxuICAgIFRodW5rQXJnLFxyXG4gICAgVGh1bmtBcGlDb25maWcgZXh0ZW5kcyBBc3luY1RodW5rQ29uZmlnXHJcbiAgPihcclxuICAgIHR5cGVQcmVmaXg6IHN0cmluZyxcclxuICAgIHBheWxvYWRDcmVhdG9yOiBBc3luY1RodW5rUGF5bG9hZENyZWF0b3I8XHJcbiAgICAgIFJldHVybmVkLFxyXG4gICAgICBUaHVua0FyZyxcclxuICAgICAgVGh1bmtBcGlDb25maWdcclxuICAgID4sXHJcbiAgICBvcHRpb25zPzogQXN5bmNUaHVua09wdGlvbnM8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPlxyXG4gICk6IEFzeW5jVGh1bms8UmV0dXJuZWQsIFRodW5rQXJnLCBUaHVua0FwaUNvbmZpZz4ge1xyXG4gICAgdHlwZSBSZWplY3RlZFZhbHVlID0gR2V0UmVqZWN0VmFsdWU8VGh1bmtBcGlDb25maWc+XHJcbiAgICB0eXBlIFBlbmRpbmdNZXRhID0gR2V0UGVuZGluZ01ldGE8VGh1bmtBcGlDb25maWc+XHJcbiAgICB0eXBlIEZ1bGZpbGxlZE1ldGEgPSBHZXRGdWxmaWxsZWRNZXRhPFRodW5rQXBpQ29uZmlnPlxyXG4gICAgdHlwZSBSZWplY3RlZE1ldGEgPSBHZXRSZWplY3RlZE1ldGE8VGh1bmtBcGlDb25maWc+XHJcblxyXG4gICAgY29uc3QgZnVsZmlsbGVkOiBBc3luY1RodW5rRnVsZmlsbGVkQWN0aW9uQ3JlYXRvcjxcclxuICAgICAgUmV0dXJuZWQsXHJcbiAgICAgIFRodW5rQXJnLFxyXG4gICAgICBUaHVua0FwaUNvbmZpZ1xyXG4gICAgPiA9IGNyZWF0ZUFjdGlvbihcclxuICAgICAgdHlwZVByZWZpeCArICcvZnVsZmlsbGVkJyxcclxuICAgICAgKFxyXG4gICAgICAgIHBheWxvYWQ6IFJldHVybmVkLFxyXG4gICAgICAgIHJlcXVlc3RJZDogc3RyaW5nLFxyXG4gICAgICAgIGFyZzogVGh1bmtBcmcsXHJcbiAgICAgICAgbWV0YT86IEZ1bGZpbGxlZE1ldGFcclxuICAgICAgKSA9PiAoe1xyXG4gICAgICAgIHBheWxvYWQsXHJcbiAgICAgICAgbWV0YToge1xyXG4gICAgICAgICAgLi4uKChtZXRhIGFzIGFueSkgfHwge30pLFxyXG4gICAgICAgICAgYXJnLFxyXG4gICAgICAgICAgcmVxdWVzdElkLFxyXG4gICAgICAgICAgcmVxdWVzdFN0YXR1czogJ2Z1bGZpbGxlZCcgYXMgY29uc3QsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBwZW5kaW5nOiBBc3luY1RodW5rUGVuZGluZ0FjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiA9XHJcbiAgICAgIGNyZWF0ZUFjdGlvbihcclxuICAgICAgICB0eXBlUHJlZml4ICsgJy9wZW5kaW5nJyxcclxuICAgICAgICAocmVxdWVzdElkOiBzdHJpbmcsIGFyZzogVGh1bmtBcmcsIG1ldGE/OiBQZW5kaW5nTWV0YSkgPT4gKHtcclxuICAgICAgICAgIHBheWxvYWQ6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIG1ldGE6IHtcclxuICAgICAgICAgICAgLi4uKChtZXRhIGFzIGFueSkgfHwge30pLFxyXG4gICAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgcmVxdWVzdFN0YXR1czogJ3BlbmRpbmcnIGFzIGNvbnN0LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgY29uc3QgcmVqZWN0ZWQ6IEFzeW5jVGh1bmtSZWplY3RlZEFjdGlvbkNyZWF0b3I8VGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiA9XHJcbiAgICAgIGNyZWF0ZUFjdGlvbihcclxuICAgICAgICB0eXBlUHJlZml4ICsgJy9yZWplY3RlZCcsXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgZXJyb3I6IEVycm9yIHwgbnVsbCxcclxuICAgICAgICAgIHJlcXVlc3RJZDogc3RyaW5nLFxyXG4gICAgICAgICAgYXJnOiBUaHVua0FyZyxcclxuICAgICAgICAgIHBheWxvYWQ/OiBSZWplY3RlZFZhbHVlLFxyXG4gICAgICAgICAgbWV0YT86IFJlamVjdGVkTWV0YVxyXG4gICAgICAgICkgPT4gKHtcclxuICAgICAgICAgIHBheWxvYWQsXHJcbiAgICAgICAgICBlcnJvcjogKChvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplRXJyb3IpIHx8IG1pbmlTZXJpYWxpemVFcnJvcikoXHJcbiAgICAgICAgICAgIGVycm9yIHx8ICdSZWplY3RlZCdcclxuICAgICAgICAgICkgYXMgR2V0U2VyaWFsaXplZEVycm9yVHlwZTxUaHVua0FwaUNvbmZpZz4sXHJcbiAgICAgICAgICBtZXRhOiB7XHJcbiAgICAgICAgICAgIC4uLigobWV0YSBhcyBhbnkpIHx8IHt9KSxcclxuICAgICAgICAgICAgYXJnLFxyXG4gICAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgIHJlamVjdGVkV2l0aFZhbHVlOiAhIXBheWxvYWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6ICdyZWplY3RlZCcgYXMgY29uc3QsXHJcbiAgICAgICAgICAgIGFib3J0ZWQ6IGVycm9yPy5uYW1lID09PSAnQWJvcnRFcnJvcicsXHJcbiAgICAgICAgICAgIGNvbmRpdGlvbjogZXJyb3I/Lm5hbWUgPT09ICdDb25kaXRpb25FcnJvcicsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICBsZXQgZGlzcGxheWVkV2FybmluZyA9IGZhbHNlXHJcblxyXG4gICAgY29uc3QgQUMgPVxyXG4gICAgICB0eXBlb2YgQWJvcnRDb250cm9sbGVyICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgID8gQWJvcnRDb250cm9sbGVyXHJcbiAgICAgICAgOiBjbGFzcyBpbXBsZW1lbnRzIEFib3J0Q29udHJvbGxlciB7XHJcbiAgICAgICAgICAgIHNpZ25hbCA9IHtcclxuICAgICAgICAgICAgICBhYm9ydGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKCkge30sXHJcbiAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudCgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgb25hYm9ydCgpIHt9LFxyXG4gICAgICAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7fSxcclxuICAgICAgICAgICAgICByZWFzb246IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICB0aHJvd0lmQWJvcnRlZCgpIHt9LFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFib3J0KCkge1xyXG4gICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRpc3BsYXllZFdhcm5pbmcpIHtcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheWVkV2FybmluZyA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFxyXG4gICAgICAgICAgICAgICAgICAgIGBUaGlzIHBsYXRmb3JtIGRvZXMgbm90IGltcGxlbWVudCBBYm9ydENvbnRyb2xsZXIuIFxyXG5JZiB5b3Ugd2FudCB0byB1c2UgdGhlIEFib3J0Q29udHJvbGxlciB0byByZWFjdCB0byBcXGBhYm9ydFxcYCBldmVudHMsIHBsZWFzZSBjb25zaWRlciBpbXBvcnRpbmcgYSBwb2x5ZmlsbCBsaWtlICdhYm9ydGNvbnRyb2xsZXItcG9seWZpbGwvZGlzdC9hYm9ydGNvbnRyb2xsZXItcG9seWZpbGwtb25seScuYFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYWN0aW9uQ3JlYXRvcihcclxuICAgICAgYXJnOiBUaHVua0FyZ1xyXG4gICAgKTogQXN5bmNUaHVua0FjdGlvbjxSZXR1cm5lZCwgVGh1bmtBcmcsIFRodW5rQXBpQ29uZmlnPiB7XHJcbiAgICAgIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IG9wdGlvbnM/LmlkR2VuZXJhdG9yXHJcbiAgICAgICAgICA/IG9wdGlvbnMuaWRHZW5lcmF0b3IoYXJnKVxyXG4gICAgICAgICAgOiBuYW5vaWQoKVxyXG5cclxuICAgICAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQUMoKVxyXG4gICAgICAgIGxldCBhYm9ydFJlYXNvbjogc3RyaW5nIHwgdW5kZWZpbmVkXHJcblxyXG4gICAgICAgIGxldCBzdGFydGVkID0gZmFsc2VcclxuICAgICAgICBmdW5jdGlvbiBhYm9ydChyZWFzb24/OiBzdHJpbmcpIHtcclxuICAgICAgICAgIGFib3J0UmVhc29uID0gcmVhc29uXHJcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IChhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBsZXQgZmluYWxBY3Rpb246IFJldHVyblR5cGU8dHlwZW9mIGZ1bGZpbGxlZCB8IHR5cGVvZiByZWplY3RlZD5cclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBjb25kaXRpb25SZXN1bHQgPSBvcHRpb25zPy5jb25kaXRpb24/LihhcmcsIHsgZ2V0U3RhdGUsIGV4dHJhIH0pXHJcbiAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlKGNvbmRpdGlvblJlc3VsdCkpIHtcclxuICAgICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSBhd2FpdCBjb25kaXRpb25SZXN1bHRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvblJlc3VsdCA9PT0gZmFsc2UgfHwgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcclxuICAgICAgICAgICAgICB0aHJvdyB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ29uZGl0aW9uRXJyb3InLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Fib3J0ZWQgZHVlIHRvIGNvbmRpdGlvbiBjYWxsYmFjayByZXR1cm5pbmcgZmFsc2UuJyxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RhcnRlZCA9IHRydWVcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFib3J0ZWRQcm9taXNlID0gbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+XHJcbiAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+XHJcbiAgICAgICAgICAgICAgICByZWplY3Qoe1xyXG4gICAgICAgICAgICAgICAgICBuYW1lOiAnQWJvcnRFcnJvcicsXHJcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFib3J0UmVhc29uIHx8ICdBYm9ydGVkJyxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIGRpc3BhdGNoKFxyXG4gICAgICAgICAgICAgIHBlbmRpbmcoXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zPy5nZXRQZW5kaW5nTWV0YT8uKFxyXG4gICAgICAgICAgICAgICAgICB7IHJlcXVlc3RJZCwgYXJnIH0sXHJcbiAgICAgICAgICAgICAgICAgIHsgZ2V0U3RhdGUsIGV4dHJhIH1cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xyXG4gICAgICAgICAgICAgIGFib3J0ZWRQcm9taXNlLFxyXG4gICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShcclxuICAgICAgICAgICAgICAgIHBheWxvYWRDcmVhdG9yKGFyZywge1xyXG4gICAgICAgICAgICAgICAgICBkaXNwYXRjaCxcclxuICAgICAgICAgICAgICAgICAgZ2V0U3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIGV4dHJhLFxyXG4gICAgICAgICAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICAgICAgICAgICAgYWJvcnQsXHJcbiAgICAgICAgICAgICAgICAgIHJlamVjdFdpdGhWYWx1ZTogKChcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogUmVqZWN0ZWRWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICBtZXRhPzogUmVqZWN0ZWRNZXRhXHJcbiAgICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVqZWN0V2l0aFZhbHVlKHZhbHVlLCBtZXRhKVxyXG4gICAgICAgICAgICAgICAgICB9KSBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICAgIGZ1bGZpbGxXaXRoVmFsdWU6ICgodmFsdWU6IHVua25vd24sIG1ldGE/OiBGdWxmaWxsZWRNZXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdWxmaWxsV2l0aE1ldGEodmFsdWUsIG1ldGEpXHJcbiAgICAgICAgICAgICAgICAgIH0pIGFzIGFueSxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBSZWplY3RXaXRoVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRnVsZmlsbFdpdGhNZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0LnBheWxvYWQsIHJlcXVlc3RJZCwgYXJnLCByZXN1bHQubWV0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0IGFzIGFueSwgcmVxdWVzdElkLCBhcmcpXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgZmluYWxBY3Rpb24gPVxyXG4gICAgICAgICAgICAgIGVyciBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZVxyXG4gICAgICAgICAgICAgICAgPyByZWplY3RlZChudWxsLCByZXF1ZXN0SWQsIGFyZywgZXJyLnBheWxvYWQsIGVyci5tZXRhKVxyXG4gICAgICAgICAgICAgICAgOiByZWplY3RlZChlcnIgYXMgYW55LCByZXF1ZXN0SWQsIGFyZylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIFdlIGRpc3BhdGNoIHRoZSByZXN1bHQgYWN0aW9uIF9hZnRlcl8gdGhlIGNhdGNoLCB0byBhdm9pZCBoYXZpbmcgYW55IGVycm9yc1xyXG4gICAgICAgICAgLy8gaGVyZSBnZXQgc3dhbGxvd2VkIGJ5IHRoZSB0cnkvY2F0Y2ggYmxvY2ssXHJcbiAgICAgICAgICAvLyBwZXIgaHR0cHM6Ly90d2l0dGVyLmNvbS9kYW5fYWJyYW1vdi9zdGF0dXMvNzcwOTE0MjIxNjM4OTQyNzIwXHJcbiAgICAgICAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3JlZHV4anMvcmVkdXgtdG9vbGtpdC9ibG9iL2U4NWViMTdiMzlhMjExOGQ4NTlmN2I3NzQ2ZTBmM2ZlZTUyM2UwODkvZG9jcy90dXRvcmlhbHMvYWR2YW5jZWQtdHV0b3JpYWwubWQjYXN5bmMtZXJyb3ItaGFuZGxpbmctbG9naWMtaW4tdGh1bmtzXHJcblxyXG4gICAgICAgICAgY29uc3Qgc2tpcERpc3BhdGNoID1cclxuICAgICAgICAgICAgb3B0aW9ucyAmJlxyXG4gICAgICAgICAgICAhb3B0aW9ucy5kaXNwYXRjaENvbmRpdGlvblJlamVjdGlvbiAmJlxyXG4gICAgICAgICAgICByZWplY3RlZC5tYXRjaChmaW5hbEFjdGlvbikgJiZcclxuICAgICAgICAgICAgKGZpbmFsQWN0aW9uIGFzIGFueSkubWV0YS5jb25kaXRpb25cclxuXHJcbiAgICAgICAgICBpZiAoIXNraXBEaXNwYXRjaCkge1xyXG4gICAgICAgICAgICBkaXNwYXRjaChmaW5hbEFjdGlvbilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmaW5hbEFjdGlvblxyXG4gICAgICAgIH0pKClcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9taXNlIGFzIFByb21pc2U8YW55Piwge1xyXG4gICAgICAgICAgYWJvcnQsXHJcbiAgICAgICAgICByZXF1ZXN0SWQsXHJcbiAgICAgICAgICBhcmcsXHJcbiAgICAgICAgICB1bndyYXAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW48YW55Pih1bndyYXBSZXN1bHQpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcclxuICAgICAgYWN0aW9uQ3JlYXRvciBhcyBBc3luY1RodW5rQWN0aW9uQ3JlYXRvcjxcclxuICAgICAgICBSZXR1cm5lZCxcclxuICAgICAgICBUaHVua0FyZyxcclxuICAgICAgICBUaHVua0FwaUNvbmZpZ1xyXG4gICAgICA+LFxyXG4gICAgICB7XHJcbiAgICAgICAgcGVuZGluZyxcclxuICAgICAgICByZWplY3RlZCxcclxuICAgICAgICBmdWxmaWxsZWQsXHJcbiAgICAgICAgdHlwZVByZWZpeCxcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuICBjcmVhdGVBc3luY1RodW5rLndpdGhUeXBlcyA9ICgpID0+IGNyZWF0ZUFzeW5jVGh1bmtcclxuXHJcbiAgcmV0dXJuIGNyZWF0ZUFzeW5jVGh1bmsgYXMgQ3JlYXRlQXN5bmNUaHVuazxBc3luY1RodW5rQ29uZmlnPlxyXG59KSgpXHJcblxyXG5pbnRlcmZhY2UgVW53cmFwcGFibGVBY3Rpb24ge1xyXG4gIHBheWxvYWQ6IGFueVxyXG4gIG1ldGE/OiBhbnlcclxuICBlcnJvcj86IGFueVxyXG59XHJcblxyXG50eXBlIFVud3JhcHBlZEFjdGlvblBheWxvYWQ8VCBleHRlbmRzIFVud3JhcHBhYmxlQWN0aW9uPiA9IEV4Y2x1ZGU8XHJcbiAgVCxcclxuICB7IGVycm9yOiBhbnkgfVxyXG4+WydwYXlsb2FkJ11cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwUmVzdWx0PFIgZXh0ZW5kcyBVbndyYXBwYWJsZUFjdGlvbj4oXHJcbiAgYWN0aW9uOiBSXHJcbik6IFVud3JhcHBlZEFjdGlvblBheWxvYWQ8Uj4ge1xyXG4gIGlmIChhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZSkge1xyXG4gICAgdGhyb3cgYWN0aW9uLnBheWxvYWRcclxuICB9XHJcbiAgaWYgKGFjdGlvbi5lcnJvcikge1xyXG4gICAgdGhyb3cgYWN0aW9uLmVycm9yXHJcbiAgfVxyXG4gIHJldHVybiBhY3Rpb24ucGF5bG9hZFxyXG59XHJcblxyXG50eXBlIFdpdGhTdHJpY3ROdWxsQ2hlY2tzPFRydWUsIEZhbHNlPiA9IHVuZGVmaW5lZCBleHRlbmRzIGJvb2xlYW5cclxuICA/IEZhbHNlXHJcbiAgOiBUcnVlXHJcblxyXG5mdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBQcm9taXNlTGlrZTxhbnk+IHtcclxuICByZXR1cm4gKFxyXG4gICAgdmFsdWUgIT09IG51bGwgJiZcclxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcclxuICAgIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nXHJcbiAgKVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXIsXHJcbiAgTWF0Y2hlcixcclxuICBVbmlvblRvSW50ZXJzZWN0aW9uLFxyXG59IGZyb20gJy4vdHNIZWxwZXJzJ1xyXG5pbXBvcnQgeyBoYXNNYXRjaEZ1bmN0aW9uIH0gZnJvbSAnLi90c0hlbHBlcnMnXHJcbmltcG9ydCB0eXBlIHtcclxuICBBc3luY1RodW5rLFxyXG4gIEFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25DcmVhdG9yLFxyXG4gIEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcixcclxuICBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yLFxyXG59IGZyb20gJy4vY3JlYXRlQXN5bmNUaHVuaydcclxuXHJcbi8qKiBAcHVibGljICovXHJcbmV4cG9ydCB0eXBlIEFjdGlvbk1hdGNoaW5nQW55T2Y8TWF0Y2hlcnMgZXh0ZW5kcyBbLi4uTWF0Y2hlcjxhbnk+W11dPiA9XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXI8TWF0Y2hlcnNbbnVtYmVyXT5cclxuXHJcbi8qKiBAcHVibGljICovXHJcbmV4cG9ydCB0eXBlIEFjdGlvbk1hdGNoaW5nQWxsT2Y8TWF0Y2hlcnMgZXh0ZW5kcyBbLi4uTWF0Y2hlcjxhbnk+W11dPiA9XHJcbiAgVW5pb25Ub0ludGVyc2VjdGlvbjxBY3Rpb25NYXRjaGluZ0FueU9mPE1hdGNoZXJzPj5cclxuXHJcbmNvbnN0IG1hdGNoZXMgPSAobWF0Y2hlcjogTWF0Y2hlcjxhbnk+LCBhY3Rpb246IGFueSkgPT4ge1xyXG4gIGlmIChoYXNNYXRjaEZ1bmN0aW9uKG1hdGNoZXIpKSB7XHJcbiAgICByZXR1cm4gbWF0Y2hlci5tYXRjaChhY3Rpb24pXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBtYXRjaGVyKGFjdGlvbilcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIG1hdGNoZXMgYW55IG9uZSBvZiB0aGUgc3VwcGxpZWQgdHlwZSBndWFyZHMgb3IgYWN0aW9uXHJcbiAqIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWF0Y2hlcnMgVGhlIHR5cGUgZ3VhcmRzIG9yIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBbnlPZjxNYXRjaGVycyBleHRlbmRzIFsuLi5NYXRjaGVyPGFueT5bXV0+KFxyXG4gIC4uLm1hdGNoZXJzOiBNYXRjaGVyc1xyXG4pIHtcclxuICByZXR1cm4gKGFjdGlvbjogYW55KTogYWN0aW9uIGlzIEFjdGlvbk1hdGNoaW5nQW55T2Y8TWF0Y2hlcnM+ID0+IHtcclxuICAgIHJldHVybiBtYXRjaGVycy5zb21lKChtYXRjaGVyKSA9PiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbikpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiBtYXRjaGVzIGFsbCBvZiB0aGUgc3VwcGxpZWQgdHlwZSBndWFyZHMgb3IgYWN0aW9uXHJcbiAqIGNyZWF0b3JzLlxyXG4gKlxyXG4gKiBAcGFyYW0gbWF0Y2hlcnMgVGhlIHR5cGUgZ3VhcmRzIG9yIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBbGxPZjxNYXRjaGVycyBleHRlbmRzIFsuLi5NYXRjaGVyPGFueT5bXV0+KFxyXG4gIC4uLm1hdGNoZXJzOiBNYXRjaGVyc1xyXG4pIHtcclxuICByZXR1cm4gKGFjdGlvbjogYW55KTogYWN0aW9uIGlzIEFjdGlvbk1hdGNoaW5nQWxsT2Y8TWF0Y2hlcnM+ID0+IHtcclxuICAgIHJldHVybiBtYXRjaGVycy5ldmVyeSgobWF0Y2hlcikgPT4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSBhY3Rpb24gQSByZWR1eCBhY3Rpb25cclxuICogQHBhcmFtIHZhbGlkU3RhdHVzIEFuIGFycmF5IG9mIHZhbGlkIG1ldGEucmVxdWVzdFN0YXR1cyB2YWx1ZXNcclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoXHJcbiAgYWN0aW9uOiBhbnksXHJcbiAgdmFsaWRTdGF0dXM6IHJlYWRvbmx5IHN0cmluZ1tdXHJcbikge1xyXG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24ubWV0YSkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGNvbnN0IGhhc1ZhbGlkUmVxdWVzdElkID0gdHlwZW9mIGFjdGlvbi5tZXRhLnJlcXVlc3RJZCA9PT0gJ3N0cmluZydcclxuICBjb25zdCBoYXNWYWxpZFJlcXVlc3RTdGF0dXMgPVxyXG4gICAgdmFsaWRTdGF0dXMuaW5kZXhPZihhY3Rpb24ubWV0YS5yZXF1ZXN0U3RhdHVzKSA+IC0xXHJcblxyXG4gIHJldHVybiBoYXNWYWxpZFJlcXVlc3RJZCAmJiBoYXNWYWxpZFJlcXVlc3RTdGF0dXNcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc3luY1RodW5rQXJyYXkoYTogW2FueV0gfCBBbnlBc3luY1RodW5rW10pOiBhIGlzIEFueUFzeW5jVGh1bmtbXSB7XHJcbiAgcmV0dXJuIChcclxuICAgIHR5cGVvZiBhWzBdID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAncGVuZGluZycgaW4gYVswXSAmJlxyXG4gICAgJ2Z1bGZpbGxlZCcgaW4gYVswXSAmJlxyXG4gICAgJ3JlamVjdGVkJyBpbiBhWzBdXHJcbiAgKVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua1BlbmRpbmdBY3Rpb24gPSBSZXR1cm5UeXBlPFxyXG4gIEFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uQ3JlYXRvcjx1bmtub3duPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBQZW5kaW5nQWN0aW9uRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydwZW5kaW5nJ10+XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiB3YXMgY3JlYXRlZCBieSBhbiBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvciwgYW5kIHRoYXRcclxuICogdGhlIGFjdGlvbiBpcyBwZW5kaW5nLlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNQZW5kaW5nKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyxcclxuICogYW5kIHRoYXQgdGhlIGFjdGlvbiBpcyBwZW5kaW5nLlxyXG4gKlxyXG4gKiBAcGFyYW0gYXN5bmNUaHVua3MgKG9wdGlvbmFsKSBUaGUgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzIHRvIG1hdGNoIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1BlbmRpbmc8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBQZW5kaW5nQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIGBhY3Rpb25gIGlzIGEgcGVuZGluZyB0aHVuayBhY3Rpb25cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUGVuZGluZyhhY3Rpb246IGFueSk6IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1BlbmRpbmdBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUGVuZGluZzxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzIHwgW2FueV0pIHtcclxuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gKGFjdGlvbjogYW55KSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFsncGVuZGluZyddKVxyXG4gIH1cclxuXHJcbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgIHJldHVybiBpc1BlbmRpbmcoKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBQZW5kaW5nQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgLy8gbm90ZTogdGhpcyB0eXBlIHdpbGwgYmUgY29ycmVjdCBiZWNhdXNlIHdlIGhhdmUgYXQgbGVhc3QgMSBhc3luY1RodW5rXHJcbiAgICBjb25zdCBtYXRjaGVyczogW01hdGNoZXI8YW55PiwgLi4uTWF0Y2hlcjxhbnk+W11dID0gYXN5bmNUaHVua3MubWFwKFxyXG4gICAgICAoYXN5bmNUaHVuaykgPT4gYXN5bmNUaHVuay5wZW5kaW5nXHJcbiAgICApIGFzIGFueVxyXG5cclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YoLi4ubWF0Y2hlcnMpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uID0gUmV0dXJuVHlwZTxcclxuICBBc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25DcmVhdG9yPHVua25vd24sIHVua25vd24+XHJcbj5cclxuXHJcbmV4cG9ydCB0eXBlIFJlamVjdGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydyZWplY3RlZCddPlxyXG5cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gd2FzIGNyZWF0ZWQgYnkgYW4gYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3IsIGFuZCB0aGF0XHJcbiAqIHRoZSBhY3Rpb24gaXMgcmVqZWN0ZWQuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIGJlbG9uZ3MgdG8gb25lIG9mIHRoZSBwcm92aWRlZCBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMsXHJcbiAqIGFuZCB0aGF0IHRoZSBhY3Rpb24gaXMgcmVqZWN0ZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSBhc3luY1RodW5rcyAob3B0aW9uYWwpIFRoZSBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvcnMgdG8gbWF0Y2ggYWdhaW5zdC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWQ8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBSZWplY3RlZEFjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+XHJcbi8qKlxyXG4gKiBUZXN0cyBpZiBgYWN0aW9uYCBpcyBhIHJlamVjdGVkIHRodW5rIGFjdGlvblxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZChcclxuICBhY3Rpb246IGFueVxyXG4pOiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtSZWplY3RlZEFjdGlvblxyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWplY3RlZDxcclxuICBBc3luY1RodW5rcyBleHRlbmRzIFtBbnlBc3luY1RodW5rLCAuLi5BbnlBc3luY1RodW5rW11dXHJcbj4oLi4uYXN5bmNUaHVua3M6IEFzeW5jVGh1bmtzIHwgW2FueV0pIHtcclxuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gKGFjdGlvbjogYW55KSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFsncmVqZWN0ZWQnXSlcclxuICB9XHJcblxyXG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICByZXR1cm4gaXNSZWplY3RlZCgpKGFzeW5jVGh1bmtzWzBdKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIGFjdGlvbjogYW55XHJcbiAgKTogYWN0aW9uIGlzIFJlamVjdGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgLy8gbm90ZTogdGhpcyB0eXBlIHdpbGwgYmUgY29ycmVjdCBiZWNhdXNlIHdlIGhhdmUgYXQgbGVhc3QgMSBhc3luY1RodW5rXHJcbiAgICBjb25zdCBtYXRjaGVyczogW01hdGNoZXI8YW55PiwgLi4uTWF0Y2hlcjxhbnk+W11dID0gYXN5bmNUaHVua3MubWFwKFxyXG4gICAgICAoYXN5bmNUaHVuaykgPT4gYXN5bmNUaHVuay5yZWplY3RlZFxyXG4gICAgKSBhcyBhbnlcclxuXHJcbiAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mKC4uLm1hdGNoZXJzKVxyXG5cclxuICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVW5rbm93bkFzeW5jVGh1bmtSZWplY3RlZFdpdGhWYWx1ZUFjdGlvbiA9IFJldHVyblR5cGU8XHJcbiAgQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uQ3JlYXRvcjx1bmtub3duLCB1bmtub3duPlxyXG4+XHJcblxyXG5leHBvcnQgdHlwZSBSZWplY3RlZFdpdGhWYWx1ZUFjdGlvbkZyb21Bc3luY1RodW5rPFQgZXh0ZW5kcyBBbnlBc3luY1RodW5rPiA9XHJcbiAgQWN0aW9uRnJvbU1hdGNoZXI8VFsncmVqZWN0ZWQnXT4gJlxyXG4gICAgKFQgZXh0ZW5kcyBBc3luY1RodW5rPGFueSwgYW55LCB7IHJlamVjdFZhbHVlOiBpbmZlciBSZWplY3RlZFZhbHVlIH0+XHJcbiAgICAgID8geyBwYXlsb2FkOiBSZWplY3RlZFZhbHVlIH1cclxuICAgICAgOiB1bmtub3duKVxyXG5cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gd2FzIGNyZWF0ZWQgYnkgYW4gYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3IsIGFuZCB0aGF0XHJcbiAqIHRoZSBhY3Rpb24gaXMgcmVqZWN0ZWQgd2l0aCB2YWx1ZS5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWUoKTogKFxyXG4gIGFjdGlvbjogYW55XHJcbikgPT4gYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyxcclxuICogYW5kIHRoYXQgdGhlIGFjdGlvbiBpcyByZWplY3RlZCB3aXRoIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0gYXN5bmNUaHVua3MgKG9wdGlvbmFsKSBUaGUgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzIHRvIG1hdGNoIGFnYWluc3QuXHJcbiAqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPihcclxuICAuLi5hc3luY1RodW5rczogQXN5bmNUaHVua3NcclxuKTogKFxyXG4gIGFjdGlvbjogYW55XHJcbikgPT4gYWN0aW9uIGlzIFJlamVjdGVkV2l0aFZhbHVlQWN0aW9uRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIGBhY3Rpb25gIGlzIGEgcmVqZWN0ZWQgdGh1bmsgYWN0aW9uIHdpdGggdmFsdWVcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWUoXHJcbiAgYWN0aW9uOiBhbnlcclxuKTogYWN0aW9uIGlzIFVua25vd25Bc3luY1RodW5rUmVqZWN0ZWRBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVqZWN0ZWRXaXRoVmFsdWU8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rcyB8IFthbnldKSB7XHJcbiAgY29uc3QgaGFzRmxhZyA9IChhY3Rpb246IGFueSk6IGFjdGlvbiBpcyBhbnkgPT4ge1xyXG4gICAgcmV0dXJuIGFjdGlvbiAmJiBhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZVxyXG4gIH1cclxuXHJcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIChhY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FsbE9mKGlzUmVqZWN0ZWQoLi4uYXN5bmNUaHVua3MpLCBoYXNGbGFnKVxyXG5cclxuICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgcmV0dXJuIGlzUmVqZWN0ZWRXaXRoVmFsdWUoKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBSZWplY3RlZEFjdGlvbkZyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+ID0+IHtcclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQWxsT2YoaXNSZWplY3RlZCguLi5hc3luY1RodW5rcyksIGhhc0ZsYWcpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBVbmtub3duQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbiA9IFJldHVyblR5cGU8XHJcbiAgQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvbkNyZWF0b3I8dW5rbm93biwgdW5rbm93bj5cclxuPlxyXG5cclxuZXhwb3J0IHR5cGUgRnVsZmlsbGVkQWN0aW9uRnJvbUFzeW5jVGh1bms8VCBleHRlbmRzIEFueUFzeW5jVGh1bms+ID1cclxuICBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydmdWxmaWxsZWQnXT5cclxuXHJcbi8qKlxyXG4gKiBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1heSBiZSB1c2VkIHRvIGNoZWNrXHJcbiAqIHdoZXRoZXIgYW4gYWN0aW9uIHdhcyBjcmVhdGVkIGJ5IGFuIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9yLCBhbmQgdGhhdFxyXG4gKiB0aGUgYWN0aW9uIGlzIGZ1bGZpbGxlZC5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVsZmlsbGVkKCk6IChcclxuICBhY3Rpb246IGFueVxyXG4pID0+IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiBiZWxvbmdzIHRvIG9uZSBvZiB0aGUgcHJvdmlkZWQgYXN5bmMgdGh1bmsgYWN0aW9uIGNyZWF0b3JzLFxyXG4gKiBhbmQgdGhhdCB0aGUgYWN0aW9uIGlzIGZ1bGZpbGxlZC5cclxuICpcclxuICogQHBhcmFtIGFzeW5jVGh1bmtzIChvcHRpb25hbCkgVGhlIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNGdWxmaWxsZWQ8XHJcbiAgQXN5bmNUaHVua3MgZXh0ZW5kcyBbQW55QXN5bmNUaHVuaywgLi4uQW55QXN5bmNUaHVua1tdXVxyXG4+KFxyXG4gIC4uLmFzeW5jVGh1bmtzOiBBc3luY1RodW5rc1xyXG4pOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBGdWxmaWxsZWRBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPlxyXG4vKipcclxuICogVGVzdHMgaWYgYGFjdGlvbmAgaXMgYSBmdWxmaWxsZWQgdGh1bmsgYWN0aW9uXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bGZpbGxlZChcclxuICBhY3Rpb246IGFueVxyXG4pOiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtGdWxmaWxsZWRBY3Rpb25cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVsZmlsbGVkPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPiguLi5hc3luY1RodW5rczogQXN5bmNUaHVua3MgfCBbYW55XSkge1xyXG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiAoYWN0aW9uOiBhbnkpID0+IGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgWydmdWxmaWxsZWQnXSlcclxuICB9XHJcblxyXG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICByZXR1cm4gaXNGdWxmaWxsZWQoKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBGdWxmaWxsZWRBY3Rpb25Gcm9tQXN5bmNUaHVuazxBc3luY1RodW5rc1tudW1iZXJdPiA9PiB7XHJcbiAgICAvLyBub3RlOiB0aGlzIHR5cGUgd2lsbCBiZSBjb3JyZWN0IGJlY2F1c2Ugd2UgaGF2ZSBhdCBsZWFzdCAxIGFzeW5jVGh1bmtcclxuICAgIGNvbnN0IG1hdGNoZXJzOiBbTWF0Y2hlcjxhbnk+LCAuLi5NYXRjaGVyPGFueT5bXV0gPSBhc3luY1RodW5rcy5tYXAoXHJcbiAgICAgIChhc3luY1RodW5rKSA9PiBhc3luY1RodW5rLmZ1bGZpbGxlZFxyXG4gICAgKSBhcyBhbnlcclxuXHJcbiAgICBjb25zdCBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mKC4uLm1hdGNoZXJzKVxyXG5cclxuICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVW5rbm93bkFzeW5jVGh1bmtBY3Rpb24gPVxyXG4gIHwgVW5rbm93bkFzeW5jVGh1bmtQZW5kaW5nQWN0aW9uXHJcbiAgfCBVbmtub3duQXN5bmNUaHVua1JlamVjdGVkQWN0aW9uXHJcbiAgfCBVbmtub3duQXN5bmNUaHVua0Z1bGZpbGxlZEFjdGlvblxyXG5cclxuZXhwb3J0IHR5cGUgQW55QXN5bmNUaHVuayA9IHtcclxuICBwZW5kaW5nOiB7IG1hdGNoOiAoYWN0aW9uOiBhbnkpID0+IGFjdGlvbiBpcyBhbnkgfVxyXG4gIGZ1bGZpbGxlZDogeyBtYXRjaDogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgYW55IH1cclxuICByZWplY3RlZDogeyBtYXRjaDogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgYW55IH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uc0Zyb21Bc3luY1RodW5rPFQgZXh0ZW5kcyBBbnlBc3luY1RodW5rPiA9XHJcbiAgfCBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydwZW5kaW5nJ10+XHJcbiAgfCBBY3Rpb25Gcm9tTWF0Y2hlcjxUWydmdWxmaWxsZWQnXT5cclxuICB8IEFjdGlvbkZyb21NYXRjaGVyPFRbJ3JlamVjdGVkJ10+XHJcblxyXG4vKipcclxuICogQSBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBjaGVja1xyXG4gKiB3aGV0aGVyIGFuIGFjdGlvbiB3YXMgY3JlYXRlZCBieSBhbiBhc3luYyB0aHVuayBhY3Rpb24gY3JlYXRvci5cclxuICpcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbigpOiAoXHJcbiAgYWN0aW9uOiBhbnlcclxuKSA9PiBhY3Rpb24gaXMgVW5rbm93bkFzeW5jVGh1bmtBY3Rpb25cclxuLyoqXHJcbiAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgbWF5IGJlIHVzZWQgdG8gY2hlY2tcclxuICogd2hldGhlciBhbiBhY3Rpb24gYmVsb25ncyB0byBvbmUgb2YgdGhlIHByb3ZpZGVkIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycy5cclxuICpcclxuICogQHBhcmFtIGFzeW5jVGh1bmtzIChvcHRpb25hbCkgVGhlIGFzeW5jIHRodW5rIGFjdGlvbiBjcmVhdG9ycyB0byBtYXRjaCBhZ2FpbnN0LlxyXG4gKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPihcclxuICAuLi5hc3luY1RodW5rczogQXN5bmNUaHVua3NcclxuKTogKGFjdGlvbjogYW55KSA9PiBhY3Rpb24gaXMgQWN0aW9uc0Zyb21Bc3luY1RodW5rPEFzeW5jVGh1bmtzW251bWJlcl0+XHJcbi8qKlxyXG4gKiBUZXN0cyBpZiBgYWN0aW9uYCBpcyBhIHRodW5rIGFjdGlvblxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uKFxyXG4gIGFjdGlvbjogYW55XHJcbik6IGFjdGlvbiBpcyBVbmtub3duQXN5bmNUaHVua0FjdGlvblxyXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY1RodW5rQWN0aW9uPFxyXG4gIEFzeW5jVGh1bmtzIGV4dGVuZHMgW0FueUFzeW5jVGh1bmssIC4uLkFueUFzeW5jVGh1bmtbXV1cclxuPiguLi5hc3luY1RodW5rczogQXN5bmNUaHVua3MgfCBbYW55XSkge1xyXG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiAoYWN0aW9uOiBhbnkpID0+XHJcbiAgICAgIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgWydwZW5kaW5nJywgJ2Z1bGZpbGxlZCcsICdyZWplY3RlZCddKVxyXG4gIH1cclxuXHJcbiAgaWYgKCFpc0FzeW5jVGh1bmtBcnJheShhc3luY1RodW5rcykpIHtcclxuICAgIHJldHVybiBpc0FzeW5jVGh1bmtBY3Rpb24oKShhc3luY1RodW5rc1swXSlcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICBhY3Rpb246IGFueVxyXG4gICk6IGFjdGlvbiBpcyBBY3Rpb25zRnJvbUFzeW5jVGh1bms8QXN5bmNUaHVua3NbbnVtYmVyXT4gPT4ge1xyXG4gICAgLy8gbm90ZTogdGhpcyB0eXBlIHdpbGwgYmUgY29ycmVjdCBiZWNhdXNlIHdlIGhhdmUgYXQgbGVhc3QgMSBhc3luY1RodW5rXHJcbiAgICBjb25zdCBtYXRjaGVyczogW01hdGNoZXI8YW55PiwgLi4uTWF0Y2hlcjxhbnk+W11dID0gW10gYXMgYW55XHJcblxyXG4gICAgZm9yIChjb25zdCBhc3luY1RodW5rIG9mIGFzeW5jVGh1bmtzKSB7XHJcbiAgICAgIG1hdGNoZXJzLnB1c2goXHJcbiAgICAgICAgYXN5bmNUaHVuay5wZW5kaW5nLFxyXG4gICAgICAgIGFzeW5jVGh1bmsucmVqZWN0ZWQsXHJcbiAgICAgICAgYXN5bmNUaHVuay5mdWxmaWxsZWRcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YoLi4ubWF0Y2hlcnMpXHJcblxyXG4gICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IEFib3J0U2lnbmFsV2l0aFJlYXNvbiB9IGZyb20gJy4vdHlwZXMnXHJcblxyXG5leHBvcnQgY29uc3QgYXNzZXJ0RnVuY3Rpb246IChcclxuICBmdW5jOiB1bmtub3duLFxyXG4gIGV4cGVjdGVkOiBzdHJpbmdcclxuKSA9PiBhc3NlcnRzIGZ1bmMgaXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biA9IChcclxuICBmdW5jOiB1bmtub3duLFxyXG4gIGV4cGVjdGVkOiBzdHJpbmdcclxuKSA9PiB7XHJcbiAgaWYgKHR5cGVvZiBmdW5jICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke2V4cGVjdGVkfSBpcyBub3QgYSBmdW5jdGlvbmApXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgbm9vcCA9ICgpID0+IHt9XHJcblxyXG5leHBvcnQgY29uc3QgY2F0Y2hSZWplY3Rpb24gPSA8VD4oXHJcbiAgcHJvbWlzZTogUHJvbWlzZTxUPixcclxuICBvbkVycm9yID0gbm9vcFxyXG4pOiBQcm9taXNlPFQ+ID0+IHtcclxuICBwcm9taXNlLmNhdGNoKG9uRXJyb3IpXHJcblxyXG4gIHJldHVybiBwcm9taXNlXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBhZGRBYm9ydFNpZ25hbExpc3RlbmVyID0gKFxyXG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcclxuICBjYWxsYmFjazogKGV2dDogRXZlbnQpID0+IHZvaWRcclxuKSA9PiB7XHJcbiAgYWJvcnRTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBjYWxsYmFjaywgeyBvbmNlOiB0cnVlIH0pXHJcbiAgcmV0dXJuICgpID0+IGFib3J0U2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgY2FsbGJhY2spXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDYWxscyBgYWJvcnRDb250cm9sbGVyLmFib3J0KHJlYXNvbilgIGFuZCBwYXRjaGVzIGBzaWduYWwucmVhc29uYC5cclxuICogaWYgaXQgaXMgbm90IHN1cHBvcnRlZC5cclxuICpcclxuICogQXQgdGhlIHRpbWUgb2Ygd3JpdGluZyBgc2lnbmFsLnJlYXNvbmAgaXMgYXZhaWxhYmxlIGluIEZGIGNocm9tZSwgZWRnZSBub2RlIDE3IGFuZCBkZW5vLlxyXG4gKiBAcGFyYW0gYWJvcnRDb250cm9sbGVyXHJcbiAqIEBwYXJhbSByZWFzb25cclxuICogQHJldHVybnNcclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQWJvcnRTaWduYWwvcmVhc29uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbiA9IDxUPihcclxuICBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcixcclxuICByZWFzb246IFRcclxuKTogdm9pZCA9PiB7XHJcbiAgdHlwZSBDb25zdW1lcjxUPiA9ICh2YWw6IFQpID0+IHZvaWRcclxuXHJcbiAgY29uc3Qgc2lnbmFsID0gYWJvcnRDb250cm9sbGVyLnNpZ25hbCBhcyBBYm9ydFNpZ25hbFdpdGhSZWFzb248VD5cclxuXHJcbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICByZXR1cm5cclxuICB9XHJcblxyXG4gIC8vIFBhdGNoIGByZWFzb25gIGlmIG5lY2Vzc2FyeS5cclxuICAvLyAtIFdlIHVzZSBkZWZpbmVQcm9wZXJ0eSBoZXJlIGJlY2F1c2UgcmVhc29uIGlzIGEgZ2V0dGVyIG9mIGBBYm9ydFNpZ25hbC5fX3Byb3RvX19gLlxyXG4gIC8vIC0gV2UgbmVlZCB0byBwYXRjaCAncmVhc29uJyBiZWZvcmUgY2FsbGluZyBgLmFib3J0KClgIGJlY2F1c2UgbGlzdGVuZXJzIHRvIHRoZSAnYWJvcnQnXHJcbiAgLy8gZXZlbnQgYXJlIGFyZSBub3RpZmllZCBpbW1lZGlhdGVseS5cclxuICBpZiAoISgncmVhc29uJyBpbiBzaWduYWwpKSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2lnbmFsLCAncmVhc29uJywge1xyXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxyXG4gICAgICB2YWx1ZTogcmVhc29uLFxyXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIDsoYWJvcnRDb250cm9sbGVyLmFib3J0IGFzIENvbnN1bWVyPHR5cGVvZiByZWFzb24+KShyZWFzb24pXHJcbn1cclxuIiwgImltcG9ydCB0eXBlIHsgU2VyaWFsaXplZEVycm9yIH0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCdcclxuXHJcbmNvbnN0IHRhc2sgPSAndGFzaydcclxuY29uc3QgbGlzdGVuZXIgPSAnbGlzdGVuZXInXHJcbmNvbnN0IGNvbXBsZXRlZCA9ICdjb21wbGV0ZWQnXHJcbmNvbnN0IGNhbmNlbGxlZCA9ICdjYW5jZWxsZWQnXHJcblxyXG4vKiBUYXNrQWJvcnRFcnJvciBlcnJvciBjb2RlcyAgKi9cclxuZXhwb3J0IGNvbnN0IHRhc2tDYW5jZWxsZWQgPSBgdGFzay0ke2NhbmNlbGxlZH1gIGFzIGNvbnN0XHJcbmV4cG9ydCBjb25zdCB0YXNrQ29tcGxldGVkID0gYHRhc2stJHtjb21wbGV0ZWR9YCBhcyBjb25zdFxyXG5leHBvcnQgY29uc3QgbGlzdGVuZXJDYW5jZWxsZWQgPSBgJHtsaXN0ZW5lcn0tJHtjYW5jZWxsZWR9YCBhcyBjb25zdFxyXG5leHBvcnQgY29uc3QgbGlzdGVuZXJDb21wbGV0ZWQgPSBgJHtsaXN0ZW5lcn0tJHtjb21wbGV0ZWR9YCBhcyBjb25zdFxyXG5cclxuZXhwb3J0IGNsYXNzIFRhc2tBYm9ydEVycm9yIGltcGxlbWVudHMgU2VyaWFsaXplZEVycm9yIHtcclxuICBuYW1lID0gJ1Rhc2tBYm9ydEVycm9yJ1xyXG4gIG1lc3NhZ2U6IHN0cmluZ1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMubWVzc2FnZSA9IGAke3Rhc2t9ICR7Y2FuY2VsbGVkfSAocmVhc29uOiAke2NvZGV9KWBcclxuICB9XHJcbn1cclxuIiwgImltcG9ydCB7IFRhc2tBYm9ydEVycm9yIH0gZnJvbSAnLi9leGNlcHRpb25zJ1xyXG5pbXBvcnQgdHlwZSB7IEFib3J0U2lnbmFsV2l0aFJlYXNvbiwgVGFza1Jlc3VsdCB9IGZyb20gJy4vdHlwZXMnXHJcbmltcG9ydCB7IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIsIGNhdGNoUmVqZWN0aW9uLCBub29wIH0gZnJvbSAnLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiBTeW5jaHJvbm91c2x5IHJhaXNlcyB7QGxpbmsgVGFza0Fib3J0RXJyb3J9IGlmIHRoZSB0YXNrIHRpZWQgdG8gdGhlIGlucHV0IGBzaWduYWxgIGhhcyBiZWVuIGNhbmNlbGxlZC5cclxuICogQHBhcmFtIHNpZ25hbFxyXG4gKiBAcGFyYW0gcmVhc29uXHJcbiAqIEBzZWUge1Rhc2tBYm9ydEVycm9yfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWN0aXZlID0gKHNpZ25hbDogQWJvcnRTaWduYWwpOiB2b2lkID0+IHtcclxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgIHRocm93IG5ldyBUYXNrQWJvcnRFcnJvcigoc2lnbmFsIGFzIEFib3J0U2lnbmFsV2l0aFJlYXNvbjxzdHJpbmc+KS5yZWFzb24pXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFjZSBiZXR3ZWVuIHRoZSBwcm9taXNlKHMpIGFuZCB0aGUgQWJvcnRTaWduYWxcclxuICogVGhpcyBhdm9pZHMgYFByb21pc2UucmFjZSgpYC1yZWxhdGVkIG1lbW9yeSBsZWFrczpcclxuICogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy8xNzQ2OSNpc3N1ZWNvbW1lbnQtMzQ5Nzk0OTA5XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmFjZVdpdGhTaWduYWw8VD4oXHJcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbFdpdGhSZWFzb248c3RyaW5nPixcclxuICBwcm9taXNlOiBQcm9taXNlPFQ+XHJcbik6IFByb21pc2U8VD4ge1xyXG4gIGxldCBjbGVhbnVwID0gbm9vcFxyXG4gIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICBjb25zdCBub3RpZnlSZWplY3Rpb24gPSAoKSA9PiByZWplY3QobmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pKVxyXG5cclxuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xyXG4gICAgICBub3RpZnlSZWplY3Rpb24oKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjbGVhbnVwID0gYWRkQWJvcnRTaWduYWxMaXN0ZW5lcihzaWduYWwsIG5vdGlmeVJlamVjdGlvbilcclxuICAgIHByb21pc2UuZmluYWxseSgoKSA9PiBjbGVhbnVwKCkpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KVxyXG4gIH0pLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgLy8gYWZ0ZXIgdGhpcyBwb2ludCwgcmVwbGFjZSBgY2xlYW51cGAgd2l0aCBhIG5vb3AsIHNvIHRoZXJlIGlzIG5vIHJlZmVyZW5jZSB0byBgc2lnbmFsYCBhbnkgbW9yZVxyXG4gICAgY2xlYW51cCA9IG5vb3BcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICogUnVucyBhIHRhc2sgYW5kIHJldHVybnMgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHtAbGluayBUYXNrUmVzdWx0fS5cclxuICogU2Vjb25kIGFyZ3VtZW50IGlzIGFuIG9wdGlvbmFsIGBjbGVhblVwYCBmdW5jdGlvbiB0aGF0IGFsd2F5cyBydW5zIGFmdGVyIHRhc2suXHJcbiAqXHJcbiAqICoqTm90ZToqKiBgcnVuVGFza2AgcnVucyB0aGUgZXhlY3V0b3IgaW4gdGhlIG5leHQgbWljcm90YXNrLlxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJ1blRhc2sgPSBhc3luYyA8VD4oXHJcbiAgdGFzazogKCkgPT4gUHJvbWlzZTxUPixcclxuICBjbGVhblVwPzogKCkgPT4gdm9pZFxyXG4pOiBQcm9taXNlPFRhc2tSZXN1bHQ8VD4+ID0+IHtcclxuICB0cnkge1xyXG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClcclxuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGFzaygpXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzdGF0dXM6ICdvaycsXHJcbiAgICAgIHZhbHVlLFxyXG4gICAgfVxyXG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHN0YXR1czogZXJyb3IgaW5zdGFuY2VvZiBUYXNrQWJvcnRFcnJvciA/ICdjYW5jZWxsZWQnIDogJ3JlamVjdGVkJyxcclxuICAgICAgZXJyb3IsXHJcbiAgICB9XHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGNsZWFuVXA/LigpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogR2l2ZW4gYW4gaW5wdXQgYEFib3J0U2lnbmFsYCBhbmQgYSBwcm9taXNlIHJldHVybnMgYW5vdGhlciBwcm9taXNlIHRoYXQgcmVzb2x2ZXNcclxuICogYXMgc29vbiB0aGUgaW5wdXQgcHJvbWlzZSBpcyBwcm92aWRlZCBvciByZWplY3RzIGFzIHNvb24gYXNcclxuICogYEFib3J0U2lnbmFsLmFib3J0YCBpcyBgdHJ1ZWAuXHJcbiAqIEBwYXJhbSBzaWduYWxcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVQYXVzZSA9IDxUPihzaWduYWw6IEFib3J0U2lnbmFsKSA9PiB7XHJcbiAgcmV0dXJuIChwcm9taXNlOiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiA9PiB7XHJcbiAgICByZXR1cm4gY2F0Y2hSZWplY3Rpb24oXHJcbiAgICAgIHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgcHJvbWlzZSkudGhlbigob3V0cHV0KSA9PiB7XHJcbiAgICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKVxyXG4gICAgICAgIHJldHVybiBvdXRwdXRcclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHaXZlbiBhbiBpbnB1dCBgQWJvcnRTaWduYWxgIGFuZCBgdGltZW91dE1zYCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzXHJcbiAqIGFmdGVyIGB0aW1lb3V0TXNgIG9yIHJlamVjdHMgYXMgc29vbiBhcyBgQWJvcnRTaWduYWwuYWJvcnRgIGlzIGB0cnVlYC5cclxuICogQHBhcmFtIHNpZ25hbFxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZURlbGF5ID0gKHNpZ25hbDogQWJvcnRTaWduYWwpID0+IHtcclxuICBjb25zdCBwYXVzZSA9IGNyZWF0ZVBhdXNlPHZvaWQ+KHNpZ25hbClcclxuICByZXR1cm4gKHRpbWVvdXRNczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICByZXR1cm4gcGF1c2UobmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dE1zKSkpXHJcbiAgfVxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IERpc3BhdGNoLCBBbnlBY3Rpb24sIE1pZGRsZXdhcmVBUEkgfSBmcm9tICdyZWR1eCdcclxuaW1wb3J0IHR5cGUgeyBUaHVua0Rpc3BhdGNoIH0gZnJvbSAncmVkdXgtdGh1bmsnXHJcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgaXNBY3Rpb24gfSBmcm9tICcuLi9jcmVhdGVBY3Rpb24nXHJcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJy4uL25hbm9pZCdcclxuXHJcbmltcG9ydCB0eXBlIHtcclxuICBMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgTGlzdGVuZXJNaWRkbGV3YXJlSW5zdGFuY2UsXHJcbiAgQWRkTGlzdGVuZXJPdmVybG9hZHMsXHJcbiAgQW55TGlzdGVuZXJQcmVkaWNhdGUsXHJcbiAgQ3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlT3B0aW9ucyxcclxuICBUeXBlZEFkZExpc3RlbmVyLFxyXG4gIFR5cGVkQ3JlYXRlTGlzdGVuZXJFbnRyeSxcclxuICBGYWxsYmFja0FkZExpc3RlbmVyT3B0aW9ucyxcclxuICBMaXN0ZW5lckVudHJ5LFxyXG4gIExpc3RlbmVyRXJyb3JIYW5kbGVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXIsXHJcbiAgVGFrZVBhdHRlcm4sXHJcbiAgTGlzdGVuZXJFcnJvckluZm8sXHJcbiAgRm9ya2VkVGFza0V4ZWN1dG9yLFxyXG4gIEZvcmtlZFRhc2ssXHJcbiAgVHlwZWRSZW1vdmVMaXN0ZW5lcixcclxuICBUYXNrUmVzdWx0LFxyXG4gIEFib3J0U2lnbmFsV2l0aFJlYXNvbixcclxuICBVbnN1YnNjcmliZUxpc3RlbmVyT3B0aW9ucyxcclxuICBGb3JrT3B0aW9ucyxcclxufSBmcm9tICcuL3R5cGVzJ1xyXG5pbXBvcnQge1xyXG4gIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24sXHJcbiAgYWRkQWJvcnRTaWduYWxMaXN0ZW5lcixcclxuICBhc3NlcnRGdW5jdGlvbixcclxuICBjYXRjaFJlamVjdGlvbixcclxufSBmcm9tICcuL3V0aWxzJ1xyXG5pbXBvcnQge1xyXG4gIGxpc3RlbmVyQ2FuY2VsbGVkLFxyXG4gIGxpc3RlbmVyQ29tcGxldGVkLFxyXG4gIFRhc2tBYm9ydEVycm9yLFxyXG4gIHRhc2tDYW5jZWxsZWQsXHJcbiAgdGFza0NvbXBsZXRlZCxcclxufSBmcm9tICcuL2V4Y2VwdGlvbnMnXHJcbmltcG9ydCB7XHJcbiAgcnVuVGFzayxcclxuICB2YWxpZGF0ZUFjdGl2ZSxcclxuICBjcmVhdGVQYXVzZSxcclxuICBjcmVhdGVEZWxheSxcclxuICByYWNlV2l0aFNpZ25hbCxcclxufSBmcm9tICcuL3Rhc2snXHJcbmV4cG9ydCB7IFRhc2tBYm9ydEVycm9yIH0gZnJvbSAnLi9leGNlcHRpb25zJ1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgTGlzdGVuZXJFZmZlY3QsXHJcbiAgTGlzdGVuZXJNaWRkbGV3YXJlLFxyXG4gIExpc3RlbmVyRWZmZWN0QVBJLFxyXG4gIExpc3RlbmVyTWlkZGxld2FyZUluc3RhbmNlLFxyXG4gIENyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZU9wdGlvbnMsXHJcbiAgTGlzdGVuZXJFcnJvckhhbmRsZXIsXHJcbiAgVHlwZWRTdGFydExpc3RlbmluZyxcclxuICBUeXBlZEFkZExpc3RlbmVyLFxyXG4gIFR5cGVkU3RvcExpc3RlbmluZyxcclxuICBUeXBlZFJlbW92ZUxpc3RlbmVyLFxyXG4gIFVuc3Vic2NyaWJlTGlzdGVuZXIsXHJcbiAgVW5zdWJzY3JpYmVMaXN0ZW5lck9wdGlvbnMsXHJcbiAgRm9ya2VkVGFza0V4ZWN1dG9yLFxyXG4gIEZvcmtlZFRhc2ssXHJcbiAgRm9ya2VkVGFza0FQSSxcclxuICBBc3luY1Rhc2tFeGVjdXRvcixcclxuICBTeW5jVGFza0V4ZWN1dG9yLFxyXG4gIFRhc2tDYW5jZWxsZWQsXHJcbiAgVGFza1JlamVjdGVkLFxyXG4gIFRhc2tSZXNvbHZlZCxcclxuICBUYXNrUmVzdWx0LFxyXG59IGZyb20gJy4vdHlwZXMnXHJcblxyXG4vL092ZXJseS1hZ2dyZXNzaXZlIGJ5dGUtc2hhdmluZ1xyXG5jb25zdCB7IGFzc2lnbiB9ID0gT2JqZWN0XHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmNvbnN0IElOVEVSTkFMX05JTF9UT0tFTiA9IHt9IGFzIGNvbnN0XHJcblxyXG5jb25zdCBhbG0gPSAnbGlzdGVuZXJNaWRkbGV3YXJlJyBhcyBjb25zdFxyXG5cclxuY29uc3QgY3JlYXRlRm9yayA9IChcclxuICBwYXJlbnRBYm9ydFNpZ25hbDogQWJvcnRTaWduYWxXaXRoUmVhc29uPHVua25vd24+LFxyXG4gIHBhcmVudEJsb2NraW5nUHJvbWlzZXM6IFByb21pc2U8YW55PltdXHJcbikgPT4ge1xyXG4gIGNvbnN0IGxpbmtDb250cm9sbGVycyA9IChjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIpID0+XHJcbiAgICBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHBhcmVudEFib3J0U2lnbmFsLCAoKSA9PlxyXG4gICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIHBhcmVudEFib3J0U2lnbmFsLnJlYXNvbilcclxuICAgIClcclxuXHJcbiAgcmV0dXJuIDxUPihcclxuICAgIHRhc2tFeGVjdXRvcjogRm9ya2VkVGFza0V4ZWN1dG9yPFQ+LFxyXG4gICAgb3B0cz86IEZvcmtPcHRpb25zXHJcbiAgKTogRm9ya2VkVGFzazxUPiA9PiB7XHJcbiAgICBhc3NlcnRGdW5jdGlvbih0YXNrRXhlY3V0b3IsICd0YXNrRXhlY3V0b3InKVxyXG4gICAgY29uc3QgY2hpbGRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcclxuXHJcbiAgICBsaW5rQ29udHJvbGxlcnMoY2hpbGRBYm9ydENvbnRyb2xsZXIpXHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gcnVuVGFzazxUPihcclxuICAgICAgYXN5bmMgKCk6IFByb21pc2U8VD4gPT4ge1xyXG4gICAgICAgIHZhbGlkYXRlQWN0aXZlKHBhcmVudEFib3J0U2lnbmFsKVxyXG4gICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbClcclxuICAgICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgdGFza0V4ZWN1dG9yKHtcclxuICAgICAgICAgIHBhdXNlOiBjcmVhdGVQYXVzZShjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICBzaWduYWw6IGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICB9KSkgYXMgVFxyXG4gICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbClcclxuICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgIH0sXHJcbiAgICAgICgpID0+IGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDb21wbGV0ZWQpXHJcbiAgICApXHJcblxyXG4gICAgaWYgKG9wdHM/LmF1dG9Kb2luKSB7XHJcbiAgICAgIHBhcmVudEJsb2NraW5nUHJvbWlzZXMucHVzaChyZXN1bHQpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmVzdWx0OiBjcmVhdGVQYXVzZTxUYXNrUmVzdWx0PFQ+PihwYXJlbnRBYm9ydFNpZ25hbCkocmVzdWx0KSxcclxuICAgICAgY2FuY2VsKCkge1xyXG4gICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDYW5jZWxsZWQpXHJcbiAgICAgIH0sXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjcmVhdGVUYWtlUGF0dGVybiA9IDxTPihcclxuICBzdGFydExpc3RlbmluZzogQWRkTGlzdGVuZXJPdmVybG9hZHM8XHJcbiAgICBVbnN1YnNjcmliZUxpc3RlbmVyLFxyXG4gICAgUyxcclxuICAgIERpc3BhdGNoPEFueUFjdGlvbj5cclxuICA+LFxyXG4gIHNpZ25hbDogQWJvcnRTaWduYWxcclxuKTogVGFrZVBhdHRlcm48Uz4gPT4ge1xyXG4gIC8qKlxyXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIExpc3RlbmVyUHJlZGljYXRlIGFuZCBhbiBvcHRpb25hbCB0aW1lb3V0LFxyXG4gICAqIGFuZCByZXNvbHZlcyB3aGVuIGVpdGhlciB0aGUgcHJlZGljYXRlIHJldHVybnMgYHRydWVgIGJhc2VkIG9uIGFuIGFjdGlvblxyXG4gICAqIHN0YXRlIGNvbWJpbmF0aW9uIG9yIHdoZW4gdGhlIHRpbWVvdXQgZXhwaXJlcy5cclxuICAgKiBJZiB0aGUgcGFyZW50IGxpc3RlbmVyIGlzIGNhbmNlbGVkIHdoaWxlIHdhaXRpbmcsIHRoaXMgd2lsbCB0aHJvdyBhXHJcbiAgICogVGFza0Fib3J0RXJyb3IuXHJcbiAgICovXHJcbiAgY29uc3QgdGFrZSA9IGFzeW5jIDxQIGV4dGVuZHMgQW55TGlzdGVuZXJQcmVkaWNhdGU8Uz4+KFxyXG4gICAgcHJlZGljYXRlOiBQLFxyXG4gICAgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkXHJcbiAgKSA9PiB7XHJcbiAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpXHJcblxyXG4gICAgLy8gUGxhY2Vob2xkZXIgdW5zdWJzY3JpYmUgZnVuY3Rpb24gdW50aWwgdGhlIGxpc3RlbmVyIGlzIGFkZGVkXHJcbiAgICBsZXQgdW5zdWJzY3JpYmU6IFVuc3Vic2NyaWJlTGlzdGVuZXIgPSAoKSA9PiB7fVxyXG5cclxuICAgIGNvbnN0IHR1cGxlUHJvbWlzZSA9IG5ldyBQcm9taXNlPFtBbnlBY3Rpb24sIFMsIFNdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIEluc2lkZSB0aGUgUHJvbWlzZSwgd2Ugc3luY2hyb25vdXNseSBhZGQgdGhlIGxpc3RlbmVyLlxyXG4gICAgICBsZXQgc3RvcExpc3RlbmluZyA9IHN0YXJ0TGlzdGVuaW5nKHtcclxuICAgICAgICBwcmVkaWNhdGU6IHByZWRpY2F0ZSBhcyBhbnksXHJcbiAgICAgICAgZWZmZWN0OiAoYWN0aW9uLCBsaXN0ZW5lckFwaSk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgLy8gT25lLXNob3QgbGlzdGVuZXIgdGhhdCBjbGVhbnMgdXAgYXMgc29vbiBhcyB0aGUgcHJlZGljYXRlIHBhc3Nlc1xyXG4gICAgICAgICAgbGlzdGVuZXJBcGkudW5zdWJzY3JpYmUoKVxyXG4gICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyB0aGUgcHJlZGljYXRlIHNhd1xyXG4gICAgICAgICAgcmVzb2x2ZShbXHJcbiAgICAgICAgICAgIGFjdGlvbixcclxuICAgICAgICAgICAgbGlzdGVuZXJBcGkuZ2V0U3RhdGUoKSxcclxuICAgICAgICAgICAgbGlzdGVuZXJBcGkuZ2V0T3JpZ2luYWxTdGF0ZSgpLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICB1bnN1YnNjcmliZSA9ICgpID0+IHtcclxuICAgICAgICBzdG9wTGlzdGVuaW5nKClcclxuICAgICAgICByZWplY3QoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IHByb21pc2VzOiAoUHJvbWlzZTxudWxsPiB8IFByb21pc2U8W0FueUFjdGlvbiwgUywgU10+KVtdID0gW1xyXG4gICAgICB0dXBsZVByb21pc2UsXHJcbiAgICBdXHJcblxyXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xyXG4gICAgICBwcm9taXNlcy5wdXNoKFxyXG4gICAgICAgIG5ldyBQcm9taXNlPG51bGw+KChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQsIG51bGwpKVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmFjZVdpdGhTaWduYWwoc2lnbmFsLCBQcm9taXNlLnJhY2UocHJvbWlzZXMpKVxyXG5cclxuICAgICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKVxyXG4gICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAvLyBBbHdheXMgY2xlYW4gdXAgdGhlIGxpc3RlbmVyXHJcbiAgICAgIHVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiAoKHByZWRpY2F0ZTogQW55TGlzdGVuZXJQcmVkaWNhdGU8Uz4sIHRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZCkgPT5cclxuICAgIGNhdGNoUmVqZWN0aW9uKHRha2UocHJlZGljYXRlLCB0aW1lb3V0KSkpIGFzIFRha2VQYXR0ZXJuPFM+XHJcbn1cclxuXHJcbmNvbnN0IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20gPSAob3B0aW9uczogRmFsbGJhY2tBZGRMaXN0ZW5lck9wdGlvbnMpID0+IHtcclxuICBsZXQgeyB0eXBlLCBhY3Rpb25DcmVhdG9yLCBtYXRjaGVyLCBwcmVkaWNhdGUsIGVmZmVjdCB9ID0gb3B0aW9uc1xyXG5cclxuICBpZiAodHlwZSkge1xyXG4gICAgcHJlZGljYXRlID0gY3JlYXRlQWN0aW9uKHR5cGUpLm1hdGNoXHJcbiAgfSBlbHNlIGlmIChhY3Rpb25DcmVhdG9yKSB7XHJcbiAgICB0eXBlID0gYWN0aW9uQ3JlYXRvciEudHlwZVxyXG4gICAgcHJlZGljYXRlID0gYWN0aW9uQ3JlYXRvci5tYXRjaFxyXG4gIH0gZWxzZSBpZiAobWF0Y2hlcikge1xyXG4gICAgcHJlZGljYXRlID0gbWF0Y2hlclxyXG4gIH0gZWxzZSBpZiAocHJlZGljYXRlKSB7XHJcbiAgICAvLyBwYXNzXHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgJ0NyZWF0aW5nIG9yIHJlbW92aW5nIGEgbGlzdGVuZXIgcmVxdWlyZXMgb25lIG9mIHRoZSBrbm93biBmaWVsZHMgZm9yIG1hdGNoaW5nIGFuIGFjdGlvbidcclxuICAgIClcclxuICB9XHJcblxyXG4gIGFzc2VydEZ1bmN0aW9uKGVmZmVjdCwgJ29wdGlvbnMubGlzdGVuZXInKVxyXG5cclxuICByZXR1cm4geyBwcmVkaWNhdGUsIHR5cGUsIGVmZmVjdCB9XHJcbn1cclxuXHJcbi8qKiBBY2NlcHRzIHRoZSBwb3NzaWJsZSBvcHRpb25zIGZvciBjcmVhdGluZyBhIGxpc3RlbmVyLCBhbmQgcmV0dXJucyBhIGZvcm1hdHRlZCBsaXN0ZW5lciBlbnRyeSAqL1xyXG5leHBvcnQgY29uc3QgY3JlYXRlTGlzdGVuZXJFbnRyeTogVHlwZWRDcmVhdGVMaXN0ZW5lckVudHJ5PHVua25vd24+ID0gKFxyXG4gIG9wdGlvbnM6IEZhbGxiYWNrQWRkTGlzdGVuZXJPcHRpb25zXHJcbikgPT4ge1xyXG4gIGNvbnN0IHsgdHlwZSwgcHJlZGljYXRlLCBlZmZlY3QgfSA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucylcclxuXHJcbiAgY29uc3QgaWQgPSBuYW5vaWQoKVxyXG4gIGNvbnN0IGVudHJ5OiBMaXN0ZW5lckVudHJ5PHVua25vd24+ID0ge1xyXG4gICAgaWQsXHJcbiAgICBlZmZlY3QsXHJcbiAgICB0eXBlLFxyXG4gICAgcHJlZGljYXRlLFxyXG4gICAgcGVuZGluZzogbmV3IFNldDxBYm9ydENvbnRyb2xsZXI+KCksXHJcbiAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3Vic2NyaWJlIG5vdCBpbml0aWFsaXplZCcpXHJcbiAgICB9LFxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGVudHJ5XHJcbn1cclxuXHJcbmNvbnN0IGNhbmNlbEFjdGl2ZUxpc3RlbmVycyA9IChcclxuICBlbnRyeTogTGlzdGVuZXJFbnRyeTx1bmtub3duLCBEaXNwYXRjaDxBbnlBY3Rpb24+PlxyXG4pID0+IHtcclxuICBlbnRyeS5wZW5kaW5nLmZvckVhY2goKGNvbnRyb2xsZXIpID0+IHtcclxuICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUgPSAoXHJcbiAgbGlzdGVuZXJNYXA6IE1hcDxzdHJpbmcsIExpc3RlbmVyRW50cnk+XHJcbikgPT4ge1xyXG4gIHJldHVybiAoKSA9PiB7XHJcbiAgICBsaXN0ZW5lck1hcC5mb3JFYWNoKGNhbmNlbEFjdGl2ZUxpc3RlbmVycylcclxuXHJcbiAgICBsaXN0ZW5lck1hcC5jbGVhcigpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogU2FmZWx5IHJlcG9ydHMgZXJyb3JzIHRvIHRoZSBgZXJyb3JIYW5kbGVyYCBwcm92aWRlZC5cclxuICogRXJyb3JzIHRoYXQgb2NjdXIgaW5zaWRlIGBlcnJvckhhbmRsZXJgIGFyZSBub3RpZmllZCBpbiBhIG5ldyB0YXNrLlxyXG4gKiBJbnNwaXJlZCBieSBbcnhqcyByZXBvcnRVbmhhbmRsZWRFcnJvcl0oaHR0cHM6Ly9naXRodWIuY29tL1JlYWN0aXZlWC9yeGpzL2Jsb2IvNmZhZmNmNTNkYzllNTU3NDM5YjI1ZGViYWVhZGZkMjI0YjI0NWE2Ni9zcmMvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci50cylcclxuICogQHBhcmFtIGVycm9ySGFuZGxlclxyXG4gKiBAcGFyYW0gZXJyb3JUb05vdGlmeVxyXG4gKi9cclxuY29uc3Qgc2FmZWx5Tm90aWZ5RXJyb3IgPSAoXHJcbiAgZXJyb3JIYW5kbGVyOiBMaXN0ZW5lckVycm9ySGFuZGxlcixcclxuICBlcnJvclRvTm90aWZ5OiB1bmtub3duLFxyXG4gIGVycm9ySW5mbzogTGlzdGVuZXJFcnJvckluZm9cclxuKTogdm9pZCA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIGVycm9ySGFuZGxlcihlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pXHJcbiAgfSBjYXRjaCAoZXJyb3JIYW5kbGVyRXJyb3IpIHtcclxuICAgIC8vIFdlIGNhbm5vdCBsZXQgYW4gZXJyb3IgcmFpc2VkIGhlcmUgYmxvY2sgdGhlIGxpc3RlbmVyIHF1ZXVlLlxyXG4gICAgLy8gVGhlIGVycm9yIHJhaXNlZCBoZXJlIHdpbGwgYmUgcGlja2VkIHVwIGJ5IGB3aW5kb3cub25lcnJvcmAsIGBwcm9jZXNzLm9uKCdlcnJvcicpYCBldGMuLi5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aHJvdyBlcnJvckhhbmRsZXJFcnJvclxyXG4gICAgfSwgMClcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYWRkTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oXHJcbiAgYCR7YWxtfS9hZGRgXHJcbikgYXMgVHlwZWRBZGRMaXN0ZW5lcjx1bmtub3duPlxyXG5cclxuLyoqXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBjb25zdCBjbGVhckFsbExpc3RlbmVycyA9IGNyZWF0ZUFjdGlvbihgJHthbG19L3JlbW92ZUFsbGApXHJcblxyXG4vKipcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHJlbW92ZUxpc3RlbmVyID0gY3JlYXRlQWN0aW9uKFxyXG4gIGAke2FsbX0vcmVtb3ZlYFxyXG4pIGFzIFR5cGVkUmVtb3ZlTGlzdGVuZXI8dW5rbm93bj5cclxuXHJcbmNvbnN0IGRlZmF1bHRFcnJvckhhbmRsZXI6IExpc3RlbmVyRXJyb3JIYW5kbGVyID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xyXG4gIGNvbnNvbGUuZXJyb3IoYCR7YWxtfS9lcnJvcmAsIC4uLmFyZ3MpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlPFxyXG4gIFMgPSB1bmtub3duLFxyXG4gIEQgZXh0ZW5kcyBEaXNwYXRjaDxBbnlBY3Rpb24+ID0gVGh1bmtEaXNwYXRjaDxTLCB1bmtub3duLCBBbnlBY3Rpb24+LFxyXG4gIEV4dHJhQXJndW1lbnQgPSB1bmtub3duXHJcbj4obWlkZGxld2FyZU9wdGlvbnM6IENyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZU9wdGlvbnM8RXh0cmFBcmd1bWVudD4gPSB7fSkge1xyXG4gIGNvbnN0IGxpc3RlbmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIExpc3RlbmVyRW50cnk+KClcclxuICBjb25zdCB7IGV4dHJhLCBvbkVycm9yID0gZGVmYXVsdEVycm9ySGFuZGxlciB9ID0gbWlkZGxld2FyZU9wdGlvbnNcclxuXHJcbiAgYXNzZXJ0RnVuY3Rpb24ob25FcnJvciwgJ29uRXJyb3InKVxyXG5cclxuICBjb25zdCBpbnNlcnRFbnRyeSA9IChlbnRyeTogTGlzdGVuZXJFbnRyeSkgPT4ge1xyXG4gICAgZW50cnkudW5zdWJzY3JpYmUgPSAoKSA9PiBsaXN0ZW5lck1hcC5kZWxldGUoZW50cnkhLmlkKVxyXG5cclxuICAgIGxpc3RlbmVyTWFwLnNldChlbnRyeS5pZCwgZW50cnkpXHJcbiAgICByZXR1cm4gKGNhbmNlbE9wdGlvbnM/OiBVbnN1YnNjcmliZUxpc3RlbmVyT3B0aW9ucykgPT4ge1xyXG4gICAgICBlbnRyeS51bnN1YnNjcmliZSgpXHJcbiAgICAgIGlmIChjYW5jZWxPcHRpb25zPy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMoZW50cnkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IGZpbmRMaXN0ZW5lckVudHJ5ID0gKFxyXG4gICAgY29tcGFyYXRvcjogKGVudHJ5OiBMaXN0ZW5lckVudHJ5KSA9PiBib29sZWFuXHJcbiAgKTogTGlzdGVuZXJFbnRyeSB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpKSB7XHJcbiAgICAgIGlmIChjb21wYXJhdG9yKGVudHJ5KSkge1xyXG4gICAgICAgIHJldHVybiBlbnRyeVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcbiAgY29uc3Qgc3RhcnRMaXN0ZW5pbmcgPSAob3B0aW9uczogRmFsbGJhY2tBZGRMaXN0ZW5lck9wdGlvbnMpID0+IHtcclxuICAgIGxldCBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KFxyXG4gICAgICAoZXhpc3RpbmdFbnRyeSkgPT4gZXhpc3RpbmdFbnRyeS5lZmZlY3QgPT09IG9wdGlvbnMuZWZmZWN0XHJcbiAgICApXHJcblxyXG4gICAgaWYgKCFlbnRyeSkge1xyXG4gICAgICBlbnRyeSA9IGNyZWF0ZUxpc3RlbmVyRW50cnkob3B0aW9ucyBhcyBhbnkpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGluc2VydEVudHJ5KGVudHJ5KVxyXG4gIH1cclxuXHJcbiAgY29uc3Qgc3RvcExpc3RlbmluZyA9IChcclxuICAgIG9wdGlvbnM6IEZhbGxiYWNrQWRkTGlzdGVuZXJPcHRpb25zICYgVW5zdWJzY3JpYmVMaXN0ZW5lck9wdGlvbnNcclxuICApOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IHsgdHlwZSwgZWZmZWN0LCBwcmVkaWNhdGUgfSA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucylcclxuXHJcbiAgICBjb25zdCBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KChlbnRyeSkgPT4ge1xyXG4gICAgICBjb25zdCBtYXRjaFByZWRpY2F0ZU9yVHlwZSA9XHJcbiAgICAgICAgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICA/IGVudHJ5LnR5cGUgPT09IHR5cGVcclxuICAgICAgICAgIDogZW50cnkucHJlZGljYXRlID09PSBwcmVkaWNhdGVcclxuXHJcbiAgICAgIHJldHVybiBtYXRjaFByZWRpY2F0ZU9yVHlwZSAmJiBlbnRyeS5lZmZlY3QgPT09IGVmZmVjdFxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAoZW50cnkpIHtcclxuICAgICAgZW50cnkudW5zdWJzY3JpYmUoKVxyXG4gICAgICBpZiAob3B0aW9ucy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnMoZW50cnkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gISFlbnRyeVxyXG4gIH1cclxuXHJcbiAgY29uc3Qgbm90aWZ5TGlzdGVuZXIgPSBhc3luYyAoXHJcbiAgICBlbnRyeTogTGlzdGVuZXJFbnRyeTx1bmtub3duLCBEaXNwYXRjaDxBbnlBY3Rpb24+PixcclxuICAgIGFjdGlvbjogQW55QWN0aW9uLFxyXG4gICAgYXBpOiBNaWRkbGV3YXJlQVBJLFxyXG4gICAgZ2V0T3JpZ2luYWxTdGF0ZTogKCkgPT4gU1xyXG4gICkgPT4ge1xyXG4gICAgY29uc3QgaW50ZXJuYWxUYXNrQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxyXG4gICAgY29uc3QgdGFrZSA9IGNyZWF0ZVRha2VQYXR0ZXJuKFxyXG4gICAgICBzdGFydExpc3RlbmluZyxcclxuICAgICAgaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWxcclxuICAgIClcclxuICAgIGNvbnN0IGF1dG9Kb2luUHJvbWlzZXM6IFByb21pc2U8YW55PltdID0gW11cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBlbnRyeS5wZW5kaW5nLmFkZChpbnRlcm5hbFRhc2tDb250cm9sbGVyKVxyXG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoXHJcbiAgICAgICAgZW50cnkuZWZmZWN0KFxyXG4gICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgLy8gVXNlIGFzc2lnbigpIHJhdGhlciB0aGFuIC4uLiB0byBhdm9pZCBleHRyYSBoZWxwZXIgZnVuY3Rpb25zIGFkZGVkIHRvIGJ1bmRsZVxyXG4gICAgICAgICAgYXNzaWduKHt9LCBhcGksIHtcclxuICAgICAgICAgICAgZ2V0T3JpZ2luYWxTdGF0ZSxcclxuICAgICAgICAgICAgY29uZGl0aW9uOiAoXHJcbiAgICAgICAgICAgICAgcHJlZGljYXRlOiBBbnlMaXN0ZW5lclByZWRpY2F0ZTxhbnk+LFxyXG4gICAgICAgICAgICAgIHRpbWVvdXQ/OiBudW1iZXJcclxuICAgICAgICAgICAgKSA9PiB0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkudGhlbihCb29sZWFuKSxcclxuICAgICAgICAgICAgdGFrZSxcclxuICAgICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlPGFueT4oaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxyXG4gICAgICAgICAgICBleHRyYSxcclxuICAgICAgICAgICAgc2lnbmFsOiBpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCxcclxuICAgICAgICAgICAgZm9yazogY3JlYXRlRm9yayhpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCwgYXV0b0pvaW5Qcm9taXNlcyksXHJcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlOiBlbnRyeS51bnN1YnNjcmliZSxcclxuICAgICAgICAgICAgc3Vic2NyaWJlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgZW50cnkucGVuZGluZy5mb3JFYWNoKChjb250cm9sbGVyLCBfLCBzZXQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyICE9PSBpbnRlcm5hbFRhc2tDb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpXHJcbiAgICAgICAgICAgICAgICAgIHNldC5kZWxldGUoY29udHJvbGxlcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgIH0gY2F0Y2ggKGxpc3RlbmVyRXJyb3IpIHtcclxuICAgICAgaWYgKCEobGlzdGVuZXJFcnJvciBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yKSkge1xyXG4gICAgICAgIHNhZmVseU5vdGlmeUVycm9yKG9uRXJyb3IsIGxpc3RlbmVyRXJyb3IsIHtcclxuICAgICAgICAgIHJhaXNlZEJ5OiAnZWZmZWN0JyxcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoYXV0b0pvaW5Qcm9taXNlcylcclxuXHJcbiAgICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oaW50ZXJuYWxUYXNrQ29udHJvbGxlciwgbGlzdGVuZXJDb21wbGV0ZWQpIC8vIE5vdGlmeSB0aGF0IHRoZSB0YXNrIGhhcyBjb21wbGV0ZWRcclxuICAgICAgZW50cnkucGVuZGluZy5kZWxldGUoaW50ZXJuYWxUYXNrQ29udHJvbGxlcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUobGlzdGVuZXJNYXApXHJcblxyXG4gIGNvbnN0IG1pZGRsZXdhcmU6IExpc3RlbmVyTWlkZGxld2FyZTxTLCBELCBFeHRyYUFyZ3VtZW50PiA9XHJcbiAgICAoYXBpKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xyXG4gICAgICBpZiAoIWlzQWN0aW9uKGFjdGlvbikpIHtcclxuICAgICAgICAvLyB3ZSBvbmx5IHdhbnQgdG8gbm90aWZ5IGxpc3RlbmVycyBmb3IgYWN0aW9uIG9iamVjdHNcclxuICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhZGRMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0YXJ0TGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2xlYXJBbGxMaXN0ZW5lcnMubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgIGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlKClcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlbW92ZUxpc3RlbmVyLm1hdGNoKGFjdGlvbikpIHtcclxuICAgICAgICByZXR1cm4gc3RvcExpc3RlbmluZyhhY3Rpb24ucGF5bG9hZClcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTmVlZCB0byBnZXQgdGhpcyBzdGF0ZSBfYmVmb3JlXyB0aGUgcmVkdWNlciBwcm9jZXNzZXMgdGhlIGFjdGlvblxyXG4gICAgICBsZXQgb3JpZ2luYWxTdGF0ZTogUyB8IHR5cGVvZiBJTlRFUk5BTF9OSUxfVE9LRU4gPSBhcGkuZ2V0U3RhdGUoKVxyXG5cclxuICAgICAgLy8gYGdldE9yaWdpbmFsU3RhdGVgIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5LlxyXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWR1eGpzL3JlZHV4LXRvb2xraXQvZGlzY3Vzc2lvbnMvMTY0OCNkaXNjdXNzaW9uY29tbWVudC0xOTMyODIwXHJcbiAgICAgIGNvbnN0IGdldE9yaWdpbmFsU3RhdGUgPSAoKTogUyA9PiB7XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsU3RhdGUgPT09IElOVEVSTkFMX05JTF9UT0tFTikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgJHthbG19OiBnZXRPcmlnaW5hbFN0YXRlIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5YFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsU3RhdGUgYXMgU1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgcmVzdWx0OiB1bmtub3duXHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIEFjdHVhbGx5IGZvcndhcmQgdGhlIGFjdGlvbiB0byB0aGUgcmVkdWNlciBiZWZvcmUgd2UgaGFuZGxlIGxpc3RlbmVyc1xyXG4gICAgICAgIHJlc3VsdCA9IG5leHQoYWN0aW9uKVxyXG5cclxuICAgICAgICBpZiAobGlzdGVuZXJNYXAuc2l6ZSA+IDApIHtcclxuICAgICAgICAgIGxldCBjdXJyZW50U3RhdGUgPSBhcGkuZ2V0U3RhdGUoKVxyXG4gICAgICAgICAgLy8gV29yayBhcm91bmQgRVNCdWlsZCtUUyB0cmFuc3BpbGF0aW9uIGlzc3VlXHJcbiAgICAgICAgICBjb25zdCBsaXN0ZW5lckVudHJpZXMgPSBBcnJheS5mcm9tKGxpc3RlbmVyTWFwLnZhbHVlcygpKVxyXG4gICAgICAgICAgZm9yIChsZXQgZW50cnkgb2YgbGlzdGVuZXJFbnRyaWVzKSB7XHJcbiAgICAgICAgICAgIGxldCBydW5MaXN0ZW5lciA9IGZhbHNlXHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIHJ1bkxpc3RlbmVyID0gZW50cnkucHJlZGljYXRlKGFjdGlvbiwgY3VycmVudFN0YXRlLCBvcmlnaW5hbFN0YXRlKVxyXG4gICAgICAgICAgICB9IGNhdGNoIChwcmVkaWNhdGVFcnJvcikge1xyXG4gICAgICAgICAgICAgIHJ1bkxpc3RlbmVyID0gZmFsc2VcclxuXHJcbiAgICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgcHJlZGljYXRlRXJyb3IsIHtcclxuICAgICAgICAgICAgICAgIHJhaXNlZEJ5OiAncHJlZGljYXRlJyxcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXJ1bkxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXIoZW50cnksIGFjdGlvbiwgYXBpLCBnZXRPcmlnaW5hbFN0YXRlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAvLyBSZW1vdmUgYG9yaWdpbmFsU3RhdGVgIHN0b3JlIGZyb20gdGhpcyBzY29wZS5cclxuICAgICAgICBvcmlnaW5hbFN0YXRlID0gSU5URVJOQUxfTklMX1RPS0VOXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIG1pZGRsZXdhcmUsXHJcbiAgICBzdGFydExpc3RlbmluZyxcclxuICAgIHN0b3BMaXN0ZW5pbmcsXHJcbiAgICBjbGVhckxpc3RlbmVyczogY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUsXHJcbiAgfSBhcyBMaXN0ZW5lck1pZGRsZXdhcmVJbnN0YW5jZTxTLCBELCBFeHRyYUFyZ3VtZW50PlxyXG59XHJcbiIsICJpbXBvcnQgdHlwZSB7IFN0b3JlRW5oYW5jZXIgfSBmcm9tICdyZWR1eCdcclxuXHJcbmV4cG9ydCBjb25zdCBTSE9VTERfQVVUT0JBVENIID0gJ1JUS19hdXRvQmF0Y2gnXHJcblxyXG5leHBvcnQgY29uc3QgcHJlcGFyZUF1dG9CYXRjaGVkID1cclxuICA8VD4oKSA9PlxyXG4gIChwYXlsb2FkOiBUKTogeyBwYXlsb2FkOiBUOyBtZXRhOiB1bmtub3duIH0gPT4gKHtcclxuICAgIHBheWxvYWQsXHJcbiAgICBtZXRhOiB7IFtTSE9VTERfQVVUT0JBVENIXTogdHJ1ZSB9LFxyXG4gIH0pXHJcblxyXG4vLyBUT0RPIFJlbW92ZSB0aGlzIGluIDIuMFxyXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL3F1ZXVlLW1pY3JvdGFza1xyXG5sZXQgcHJvbWlzZTogUHJvbWlzZTxhbnk+XHJcbmNvbnN0IHF1ZXVlTWljcm90YXNrU2hpbSA9XHJcbiAgdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nXHJcbiAgICA/IHF1ZXVlTWljcm90YXNrLmJpbmQoXHJcbiAgICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcclxuICAgICAgICAgID8gd2luZG93XHJcbiAgICAgICAgICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgICA/IGdsb2JhbFxyXG4gICAgICAgICAgOiBnbG9iYWxUaGlzXHJcbiAgICAgIClcclxuICAgIDogLy8gcmV1c2UgcmVzb2x2ZWQgcHJvbWlzZSwgYW5kIGFsbG9jYXRlIGl0IGxhemlseVxyXG4gICAgICAoY2I6ICgpID0+IHZvaWQpID0+XHJcbiAgICAgICAgKHByb21pc2UgfHwgKHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKSkpLnRoZW4oY2IpLmNhdGNoKChlcnI6IGFueSkgPT5cclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICAgIH0sIDApXHJcbiAgICAgICAgKVxyXG5cclxuY29uc3QgY3JlYXRlUXVldWVXaXRoVGltZXIgPSAodGltZW91dDogbnVtYmVyKSA9PiB7XHJcbiAgcmV0dXJuIChub3RpZnk6ICgpID0+IHZvaWQpID0+IHtcclxuICAgIHNldFRpbWVvdXQobm90aWZ5LCB0aW1lb3V0KVxyXG4gIH1cclxufVxyXG5cclxuLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHdvbid0IGV4aXN0IGluIFNTUiBlbnZpcm9ubWVudHMuXHJcbi8vIEZhbGwgYmFjayB0byBhIHZhZ3VlIGFwcHJveGltYXRpb24ganVzdCB0byBrZWVwIGZyb20gZXJyb3JpbmcuXHJcbmNvbnN0IHJBRiA9XHJcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICA6IGNyZWF0ZVF1ZXVlV2l0aFRpbWVyKDEwKVxyXG5cclxuZXhwb3J0IHR5cGUgQXV0b0JhdGNoT3B0aW9ucyA9XHJcbiAgfCB7IHR5cGU6ICd0aWNrJyB9XHJcbiAgfCB7IHR5cGU6ICd0aW1lcic7IHRpbWVvdXQ6IG51bWJlciB9XHJcbiAgfCB7IHR5cGU6ICdyYWYnIH1cclxuICB8IHsgdHlwZTogJ2NhbGxiYWNrJzsgcXVldWVOb3RpZmljYXRpb246IChub3RpZnk6ICgpID0+IHZvaWQpID0+IHZvaWQgfVxyXG5cclxuLyoqXHJcbiAqIEEgUmVkdXggc3RvcmUgZW5oYW5jZXIgdGhhdCB3YXRjaGVzIGZvciBcImxvdy1wcmlvcml0eVwiIGFjdGlvbnMsIGFuZCBkZWxheXNcclxuICogbm90aWZ5aW5nIHN1YnNjcmliZXJzIHVudGlsIGVpdGhlciB0aGUgcXVldWVkIGNhbGxiYWNrIGV4ZWN1dGVzIG9yIHRoZVxyXG4gKiBuZXh0IFwic3RhbmRhcmQtcHJpb3JpdHlcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZC5cclxuICpcclxuICogVGhpcyBhbGxvd3MgZGlzcGF0Y2hpbmcgbXVsdGlwbGUgXCJsb3ctcHJpb3JpdHlcIiBhY3Rpb25zIGluIGEgcm93IHdpdGggb25seVxyXG4gKiBhIHNpbmdsZSBzdWJzY3JpYmVyIG5vdGlmaWNhdGlvbiB0byB0aGUgVUkgYWZ0ZXIgdGhlIHNlcXVlbmNlIG9mIGFjdGlvbnNcclxuICogaXMgZmluaXNoZWQsIHRodXMgaW1wcm92aW5nIFVJIHJlLXJlbmRlciBwZXJmb3JtYW5jZS5cclxuICpcclxuICogV2F0Y2hlcyBmb3IgYWN0aW9ucyB3aXRoIHRoZSBgYWN0aW9uLm1ldGFbU0hPVUxEX0FVVE9CQVRDSF1gIGF0dHJpYnV0ZS5cclxuICogVGhpcyBjYW4gYmUgYWRkZWQgdG8gYGFjdGlvbi5tZXRhYCBtYW51YWxseSwgb3IgYnkgdXNpbmcgdGhlXHJcbiAqIGBwcmVwYXJlQXV0b0JhdGNoZWRgIGhlbHBlci5cclxuICpcclxuICogQnkgZGVmYXVsdCwgaXQgd2lsbCBxdWV1ZSBhIG5vdGlmaWNhdGlvbiBmb3IgdGhlIGVuZCBvZiB0aGUgZXZlbnQgbG9vcCB0aWNrLlxyXG4gKiBIb3dldmVyLCB5b3UgY2FuIHBhc3Mgc2V2ZXJhbCBvdGhlciBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgYmVoYXZpb3I6XHJcbiAqIC0gYHt0eXBlOiAndGljayd9OiBxdWV1ZXMgdXNpbmcgYHF1ZXVlTWljcm90YXNrYCAoZGVmYXVsdClcclxuICogLSBge3R5cGU6ICd0aW1lciwgdGltZW91dDogbnVtYmVyfWA6IHF1ZXVlcyB1c2luZyBgc2V0VGltZW91dGBcclxuICogLSBge3R5cGU6ICdyYWYnfWA6IHF1ZXVlcyB1c2luZyBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYFxyXG4gKiAtIGB7dHlwZTogJ2NhbGxiYWNrJywgcXVldWVOb3RpZmljYXRpb246IChub3RpZnk6ICgpID0+IHZvaWQpID0+IHZvaWR9OiBsZXRzIHlvdSBwcm92aWRlIHlvdXIgb3duIGNhbGxiYWNrXHJcbiAqXHJcbiAqXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYXV0b0JhdGNoRW5oYW5jZXIgPVxyXG4gIChvcHRpb25zOiBBdXRvQmF0Y2hPcHRpb25zID0geyB0eXBlOiAncmFmJyB9KTogU3RvcmVFbmhhbmNlciA9PlxyXG4gIChuZXh0KSA9PlxyXG4gICguLi5hcmdzKSA9PiB7XHJcbiAgICBjb25zdCBzdG9yZSA9IG5leHQoLi4uYXJncylcclxuXHJcbiAgICBsZXQgbm90aWZ5aW5nID0gdHJ1ZVxyXG4gICAgbGV0IHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2VcclxuICAgIGxldCBub3RpZmljYXRpb25RdWV1ZWQgPSBmYWxzZVxyXG5cclxuICAgIGNvbnN0IGxpc3RlbmVycyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKVxyXG5cclxuICAgIGNvbnN0IHF1ZXVlQ2FsbGJhY2sgPVxyXG4gICAgICBvcHRpb25zLnR5cGUgPT09ICd0aWNrJ1xyXG4gICAgICAgID8gcXVldWVNaWNyb3Rhc2tTaGltXHJcbiAgICAgICAgOiBvcHRpb25zLnR5cGUgPT09ICdyYWYnXHJcbiAgICAgICAgPyByQUZcclxuICAgICAgICA6IG9wdGlvbnMudHlwZSA9PT0gJ2NhbGxiYWNrJ1xyXG4gICAgICAgID8gb3B0aW9ucy5xdWV1ZU5vdGlmaWNhdGlvblxyXG4gICAgICAgIDogY3JlYXRlUXVldWVXaXRoVGltZXIob3B0aW9ucy50aW1lb3V0KVxyXG5cclxuICAgIGNvbnN0IG5vdGlmeUxpc3RlbmVycyA9ICgpID0+IHtcclxuICAgICAgLy8gV2UncmUgcnVubmluZyBhdCB0aGUgZW5kIG9mIHRoZSBldmVudCBsb29wIHRpY2suXHJcbiAgICAgIC8vIFJ1biB0aGUgcmVhbCBsaXN0ZW5lciBjYWxsYmFja3MgdG8gYWN0dWFsbHkgdXBkYXRlIHRoZSBVSS5cclxuICAgICAgbm90aWZpY2F0aW9uUXVldWVkID0gZmFsc2VcclxuICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSBmYWxzZVxyXG4gICAgICAgIGxpc3RlbmVycy5mb3JFYWNoKChsKSA9PiBsKCkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUsIHtcclxuICAgICAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgYHN0b3JlLnN1YnNjcmliZWAgbWV0aG9kIHRvIGtlZXAgb3JpZ2luYWwgbGlzdGVuZXJzXHJcbiAgICAgIC8vIGZyb20gcnVubmluZyBpZiB3ZSdyZSBkZWxheWluZyBub3RpZmljYXRpb25zXHJcbiAgICAgIHN1YnNjcmliZShsaXN0ZW5lcjogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIC8vIEVhY2ggd3JhcHBlZCBsaXN0ZW5lciB3aWxsIG9ubHkgY2FsbCB0aGUgcmVhbCBsaXN0ZW5lciBpZlxyXG4gICAgICAgIC8vIHRoZSBgbm90aWZ5aW5nYCBmbGFnIGlzIGN1cnJlbnRseSBhY3RpdmUgd2hlbiBpdCdzIGNhbGxlZC5cclxuICAgICAgICAvLyBUaGlzIGxldHMgdGhlIGJhc2Ugc3RvcmUgd29yayBhcyBub3JtYWwsIHdoaWxlIHRoZSBhY3R1YWwgVUlcclxuICAgICAgICAvLyB1cGRhdGUgYmVjb21lcyBjb250cm9sbGVkIGJ5IHRoaXMgZW5oYW5jZXIuXHJcbiAgICAgICAgY29uc3Qgd3JhcHBlZExpc3RlbmVyOiB0eXBlb2YgbGlzdGVuZXIgPSAoKSA9PiBub3RpZnlpbmcgJiYgbGlzdGVuZXIoKVxyXG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKHdyYXBwZWRMaXN0ZW5lcilcclxuICAgICAgICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKVxyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICB1bnN1YnNjcmliZSgpXHJcbiAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgYHN0b3JlLmRpc3BhdGNoYCBtZXRob2Qgc28gdGhhdCB3ZSBjYW4gY2hlY2sgYWN0aW9uc1xyXG4gICAgICAvLyBmb3IgdGhlIGBzaG91bGRBdXRvQmF0Y2hgIGZsYWcgYW5kIGRldGVybWluZSBpZiBiYXRjaGluZyBpcyBhY3RpdmVcclxuICAgICAgZGlzcGF0Y2goYWN0aW9uOiBhbnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgLy8gSWYgdGhlIGFjdGlvbiBkb2VzIF9ub3RfIGhhdmUgdGhlIGBzaG91bGRBdXRvQmF0Y2hgIGZsYWcsXHJcbiAgICAgICAgICAvLyB3ZSByZXN1bWUvY29udGludWUgbm9ybWFsIG5vdGlmeS1hZnRlci1lYWNoLWRpc3BhdGNoIGJlaGF2aW9yXHJcbiAgICAgICAgICBub3RpZnlpbmcgPSAhYWN0aW9uPy5tZXRhPy5bU0hPVUxEX0FVVE9CQVRDSF1cclxuICAgICAgICAgIC8vIElmIGEgYG5vdGlmeUxpc3RlbmVyc2AgbWljcm90YXNrIHdhcyBxdWV1ZWQsIHlvdSBjYW4ndCBjYW5jZWwgaXQuXHJcbiAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBzZXQgYSBmbGFnIHNvIHRoYXQgaXQncyBhIG5vLW9wIHdoZW4gaXQgZG9lcyBydW5cclxuICAgICAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gIW5vdGlmeWluZ1xyXG4gICAgICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgICAgIC8vIFdlJ3ZlIHNlZW4gYXQgbGVhc3QgMSBhY3Rpb24gd2l0aCBgU0hPVUxEX0FVVE9CQVRDSGAuIFRyeSB0byBxdWV1ZVxyXG4gICAgICAgICAgICAvLyBhIG1pY3JvdGFzayB0byBub3RpZnkgbGlzdGVuZXJzIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3AgdGljay5cclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgZW5xdWV1ZSB0aGlzIF9vbmNlXyBwZXIgdGljay5cclxuICAgICAgICAgICAgaWYgKCFub3RpZmljYXRpb25RdWV1ZWQpIHtcclxuICAgICAgICAgICAgICBub3RpZmljYXRpb25RdWV1ZWQgPSB0cnVlXHJcbiAgICAgICAgICAgICAgcXVldWVDYWxsYmFjayhub3RpZnlMaXN0ZW5lcnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCBwcm9jZXNzIHRoZSBhY3Rpb24gYXMgdXN1YWwsIGluY2x1ZGluZyByZWR1Y2Vycy5cclxuICAgICAgICAgIC8vIElmIG5vcm1hbCBub3RpZmljYXRpb24gYmVoYXZpb3IgaXMgZW5hYmxlZCwgdGhlIHN0b3JlIHdpbGwgbm90aWZ5XHJcbiAgICAgICAgICAvLyBhbGwgb2YgaXRzIG93biBsaXN0ZW5lcnMsIGFuZCB0aGUgd3JhcHBlciBjYWxsYmFja3MgYWJvdmUgd2lsbFxyXG4gICAgICAgICAgLy8gc2VlIGBub3RpZnlpbmdgIGlzIHRydWUgYW5kIHBhc3Mgb24gdG8gdGhlIHJlYWwgbGlzdGVuZXIgY2FsbGJhY2tzLlxyXG4gICAgICAgICAgLy8gSWYgd2UncmUgXCJiYXRjaGluZ1wiIGJlaGF2aW9yLCB0aGVuIHRoZSB3cmFwcGVkIGNhbGxiYWNrcyB3aWxsXHJcbiAgICAgICAgICAvLyBiYWlsIG91dCwgY2F1c2luZyB0aGUgYmFzZSBzdG9yZSBub3RpZmljYXRpb24gYmVoYXZpb3IgdG8gYmUgbm8tb3BzLlxyXG4gICAgICAgICAgcmV0dXJuIHN0b3JlLmRpc3BhdGNoKGFjdGlvbilcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgLy8gQXNzdW1lIHdlJ3JlIGJhY2sgdG8gbm9ybWFsIGJlaGF2aW9yIGFmdGVyIGVhY2ggYWN0aW9uXHJcbiAgICAgICAgICBub3RpZnlpbmcgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSlcclxuICB9XHJcbiIsICJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59O1xyXG52YXIgX19zcHJlYWRBcnJheSA9ICh0aGlzICYmIHRoaXMuX19zcHJlYWRBcnJheSkgfHwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcclxuICAgICAgICB0b1tqXSA9IGZyb21baV07XHJcbiAgICByZXR1cm4gdG87XHJcbn07XHJcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XHJcbnZhciBfX2RlZlByb3BzID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXM7XHJcbnZhciBfX2dldE93blByb3BEZXNjcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzO1xyXG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XHJcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcclxudmFyIF9fZGVmTm9ybWFsUHJvcCA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHsgcmV0dXJuIGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTsgfTtcclxudmFyIF9fc3ByZWFkVmFsdWVzID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcclxuICAgICAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXHJcbiAgICAgICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcclxuICAgIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2MgPSBfX2dldE93blByb3BTeW1ib2xzKGIpOyBfaSA8IF9jLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICB2YXIgcHJvcCA9IF9jW19pXTtcclxuICAgICAgICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxyXG4gICAgICAgICAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiBhO1xyXG59O1xyXG52YXIgX19zcHJlYWRQcm9wcyA9IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBfX2RlZlByb3BzKGEsIF9fZ2V0T3duUHJvcERlc2NzKGIpKTsgfTtcclxudmFyIF9fYXN5bmMgPSBmdW5jdGlvbiAoX190aGlzLCBfX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHZhciBmdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN0ZXAoZ2VuZXJhdG9yLnRocm93KHZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHN0ZXAgPSBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5kb25lID8gcmVzb2x2ZSh4LnZhbHVlKSA6IFByb21pc2UucmVzb2x2ZSh4LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9O1xyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseShfX3RoaXMsIF9fYXJndW1lbnRzKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59O1xyXG4vLyBzcmMvaW5kZXgudHNcclxuaW1wb3J0IHsgZW5hYmxlRVM1IH0gZnJvbSBcImltbWVyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCJyZWR1eFwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIGRlZmF1bHQyLCBjdXJyZW50IGFzIGN1cnJlbnQyLCBmcmVlemUsIG9yaWdpbmFsLCBpc0RyYWZ0IGFzIGlzRHJhZnQ0IH0gZnJvbSBcImltbWVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yIGFzIGNyZWF0ZVNlbGVjdG9yMiB9IGZyb20gXCJyZXNlbGVjdFwiO1xyXG4vLyBzcmMvY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IudHNcclxuaW1wb3J0IHsgY3VycmVudCwgaXNEcmFmdCB9IGZyb20gXCJpbW1lclwiO1xyXG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gXCJyZXNlbGVjdFwiO1xyXG52YXIgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYXJncyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICB2YXIgc2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvci5hcHBseSh2b2lkIDAsIGFyZ3MpO1xyXG4gICAgdmFyIHdyYXBwZWRTZWxlY3RvciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHZhciByZXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgcmVzdFtfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaXNEcmFmdCh2YWx1ZSkgPyBjdXJyZW50KHZhbHVlKSA6IHZhbHVlXSwgcmVzdCkpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiB3cmFwcGVkU2VsZWN0b3I7XHJcbn07XHJcbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xyXG5pbXBvcnQgeyBjcmVhdGVTdG9yZSwgY29tcG9zZSBhcyBjb21wb3NlMiwgYXBwbHlNaWRkbGV3YXJlLCBjb21iaW5lUmVkdWNlcnMgfSBmcm9tIFwicmVkdXhcIjtcclxuLy8gc3JjL2RldnRvb2xzRXh0ZW5zaW9uLnRzXHJcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tIFwicmVkdXhcIjtcclxudmFyIGNvbXBvc2VXaXRoRGV2VG9vbHMgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fIDogZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSBcIm9iamVjdFwiKVxyXG4gICAgICAgIHJldHVybiBjb21wb3NlO1xyXG4gICAgcmV0dXJuIGNvbXBvc2UuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxudmFyIGRldlRvb2xzRW5oYW5jZXIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fID8gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18gOiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vb3AyKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vb3AyO1xyXG4gICAgfTtcclxufTtcclxuLy8gc3JjL2lzUGxhaW5PYmplY3QudHNcclxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xyXG4gICAgaWYgKHByb3RvID09PSBudWxsKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgdmFyIGJhc2VQcm90byA9IHByb3RvO1xyXG4gICAgd2hpbGUgKE9iamVjdC5nZXRQcm90b3R5cGVPZihiYXNlUHJvdG8pICE9PSBudWxsKSB7XHJcbiAgICAgICAgYmFzZVByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGJhc2VQcm90byk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvdG8gPT09IGJhc2VQcm90bztcclxufVxyXG4vLyBzcmMvZ2V0RGVmYXVsdE1pZGRsZXdhcmUudHNcclxuaW1wb3J0IHRodW5rTWlkZGxld2FyZSBmcm9tIFwicmVkdXgtdGh1bmtcIjtcclxuLy8gc3JjL3RzSGVscGVycy50c1xyXG52YXIgaGFzTWF0Y2hGdW5jdGlvbiA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICByZXR1cm4gdiAmJiB0eXBlb2Ygdi5tYXRjaCA9PT0gXCJmdW5jdGlvblwiO1xyXG59O1xyXG4vLyBzcmMvY3JlYXRlQWN0aW9uLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZUFjdGlvbih0eXBlLCBwcmVwYXJlQWN0aW9uKSB7XHJcbiAgICBmdW5jdGlvbiBhY3Rpb25DcmVhdG9yKCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJlcGFyZUFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgcHJlcGFyZWQgPSBwcmVwYXJlQWN0aW9uLmFwcGx5KHZvaWQgMCwgYXJncyk7XHJcbiAgICAgICAgICAgIGlmICghcHJlcGFyZWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInByZXBhcmVBY3Rpb24gZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogcHJlcGFyZWQucGF5bG9hZFxyXG4gICAgICAgICAgICB9LCBcIm1ldGFcIiBpbiBwcmVwYXJlZCAmJiB7IG1ldGE6IHByZXBhcmVkLm1ldGEgfSksIFwiZXJyb3JcIiBpbiBwcmVwYXJlZCAmJiB7IGVycm9yOiBwcmVwYXJlZC5lcnJvciB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgcGF5bG9hZDogYXJnc1swXSB9O1xyXG4gICAgfVxyXG4gICAgYWN0aW9uQ3JlYXRvci50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFwiXCIgKyB0eXBlOyB9O1xyXG4gICAgYWN0aW9uQ3JlYXRvci50eXBlID0gdHlwZTtcclxuICAgIGFjdGlvbkNyZWF0b3IubWF0Y2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBhY3Rpb24udHlwZSA9PT0gdHlwZTsgfTtcclxuICAgIHJldHVybiBhY3Rpb25DcmVhdG9yO1xyXG59XHJcbmZ1bmN0aW9uIGlzQWN0aW9uKGFjdGlvbikge1xyXG4gICAgcmV0dXJuIGlzUGxhaW5PYmplY3QoYWN0aW9uKSAmJiBcInR5cGVcIiBpbiBhY3Rpb247XHJcbn1cclxuZnVuY3Rpb24gaXNBY3Rpb25DcmVhdG9yKGFjdGlvbikge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBhY3Rpb24gPT09IFwiZnVuY3Rpb25cIiAmJiBcInR5cGVcIiBpbiBhY3Rpb24gJiYgaGFzTWF0Y2hGdW5jdGlvbihhY3Rpb24pO1xyXG59XHJcbmZ1bmN0aW9uIGlzRlNBKGFjdGlvbikge1xyXG4gICAgcmV0dXJuIGlzQWN0aW9uKGFjdGlvbikgJiYgdHlwZW9mIGFjdGlvbi50eXBlID09PSBcInN0cmluZ1wiICYmIE9iamVjdC5rZXlzKGFjdGlvbikuZXZlcnkoaXNWYWxpZEtleSk7XHJcbn1cclxuZnVuY3Rpb24gaXNWYWxpZEtleShrZXkpIHtcclxuICAgIHJldHVybiBbXCJ0eXBlXCIsIFwicGF5bG9hZFwiLCBcImVycm9yXCIsIFwibWV0YVwiXS5pbmRleE9mKGtleSkgPiAtMTtcclxufVxyXG5mdW5jdGlvbiBnZXRUeXBlKGFjdGlvbkNyZWF0b3IpIHtcclxuICAgIHJldHVybiBcIlwiICsgYWN0aW9uQ3JlYXRvcjtcclxufVxyXG4vLyBzcmMvYWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUudHNcclxuZnVuY3Rpb24gZ2V0TWVzc2FnZSh0eXBlKSB7XHJcbiAgICB2YXIgc3BsaXRUeXBlID0gdHlwZSA/IChcIlwiICsgdHlwZSkuc3BsaXQoXCIvXCIpIDogW107XHJcbiAgICB2YXIgYWN0aW9uTmFtZSA9IHNwbGl0VHlwZVtzcGxpdFR5cGUubGVuZ3RoIC0gMV0gfHwgXCJhY3Rpb25DcmVhdG9yXCI7XHJcbiAgICByZXR1cm4gXCJEZXRlY3RlZCBhbiBhY3Rpb24gY3JlYXRvciB3aXRoIHR5cGUgXFxcIlwiICsgKHR5cGUgfHwgXCJ1bmtub3duXCIpICsgXCJcXFwiIGJlaW5nIGRpc3BhdGNoZWQuIFxcbk1ha2Ugc3VyZSB5b3UncmUgY2FsbGluZyB0aGUgYWN0aW9uIGNyZWF0b3IgYmVmb3JlIGRpc3BhdGNoaW5nLCBpLmUuIGBkaXNwYXRjaChcIiArIGFjdGlvbk5hbWUgKyBcIigpKWAgaW5zdGVhZCBvZiBgZGlzcGF0Y2goXCIgKyBhY3Rpb25OYW1lICsgXCIpYC4gVGhpcyBpcyBuZWNlc3NhcnkgZXZlbiBpZiB0aGUgYWN0aW9uIGhhcyBubyBwYXlsb2FkLlwiO1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZUFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlKG9wdGlvbnMpIHtcclxuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBuZXh0KGFjdGlvbik7IH07IH07IH07XHJcbiAgICB9XHJcbiAgICB2YXIgX2MgPSBvcHRpb25zLmlzQWN0aW9uQ3JlYXRvciwgaXNBY3Rpb25DcmVhdG9yMiA9IF9jID09PSB2b2lkIDAgPyBpc0FjdGlvbkNyZWF0b3IgOiBfYztcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIGlmIChpc0FjdGlvbkNyZWF0b3IyKGFjdGlvbikpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGdldE1lc3NhZ2UoYWN0aW9uLnR5cGUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcclxuICAgIH07IH07IH07XHJcbn1cclxuLy8gc3JjL3V0aWxzLnRzXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUsIHsgaXNEcmFmdGFibGUgfSBmcm9tIFwiaW1tZXJcIjtcclxuZnVuY3Rpb24gZ2V0VGltZU1lYXN1cmVVdGlscyhtYXhEZWxheSwgZm5OYW1lKSB7XHJcbiAgICB2YXIgZWxhcHNlZCA9IDA7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG1lYXN1cmVUaW1lOiBmdW5jdGlvbiAoZm4pIHtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgZWxhcHNlZCArPSBmaW5pc2hlZCAtIHN0YXJ0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdhcm5JZkV4Y2VlZGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGFwc2VkID4gbWF4RGVsYXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybihmbk5hbWUgKyBcIiB0b29rIFwiICsgZWxhcHNlZCArIFwibXMsIHdoaWNoIGlzIG1vcmUgdGhhbiB0aGUgd2FybmluZyB0aHJlc2hvbGQgb2YgXCIgKyBtYXhEZWxheSArIFwibXMuIFxcbklmIHlvdXIgc3RhdGUgb3IgYWN0aW9ucyBhcmUgdmVyeSBsYXJnZSwgeW91IG1heSB3YW50IHRvIGRpc2FibGUgdGhlIG1pZGRsZXdhcmUgYXMgaXQgbWlnaHQgY2F1c2UgdG9vIG11Y2ggb2YgYSBzbG93ZG93biBpbiBkZXZlbG9wbWVudCBtb2RlLiBTZWUgaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvZ2V0RGVmYXVsdE1pZGRsZXdhcmUgZm9yIGluc3RydWN0aW9ucy5cXG5JdCBpcyBkaXNhYmxlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcywgc28geW91IGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhhdC5cIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcbnZhciBNaWRkbGV3YXJlQXJyYXkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoTWlkZGxld2FyZUFycmF5LCBfc3VwZXIpO1xyXG4gICAgZnVuY3Rpb24gTWlkZGxld2FyZUFycmF5KCkge1xyXG4gICAgICAgIHZhciBhcmdzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuYXBwbHkodGhpcywgYXJncykgfHwgdGhpcztcclxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIE1pZGRsZXdhcmVBcnJheS5wcm90b3R5cGUpO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNaWRkbGV3YXJlQXJyYXksIFN5bWJvbC5zcGVjaWVzLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBNaWRkbGV3YXJlQXJyYXk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gICAgTWlkZGxld2FyZUFycmF5LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5jb25jYXQuYXBwbHkodGhpcywgYXJyKTtcclxuICAgIH07XHJcbiAgICBNaWRkbGV3YXJlQXJyYXkucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyclswXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyAoTWlkZGxld2FyZUFycmF5LmJpbmQuYXBwbHkoTWlkZGxld2FyZUFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnJbMF0uY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKE1pZGRsZXdhcmVBcnJheS5iaW5kLmFwcGx5KE1pZGRsZXdhcmVBcnJheSwgX19zcHJlYWRBcnJheShbdm9pZCAwXSwgYXJyLmNvbmNhdCh0aGlzKSkpKSgpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBNaWRkbGV3YXJlQXJyYXk7XHJcbn0oQXJyYXkpKTtcclxudmFyIEVuaGFuY2VyQXJyYXkgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XHJcbiAgICBfX2V4dGVuZHMoRW5oYW5jZXJBcnJheSwgX3N1cGVyKTtcclxuICAgIGZ1bmN0aW9uIEVuaGFuY2VyQXJyYXkoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5hcHBseSh0aGlzLCBhcmdzKSB8fCB0aGlzO1xyXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgRW5oYW5jZXJBcnJheS5wcm90b3R5cGUpO1xyXG4gICAgICAgIHJldHVybiBfdGhpcztcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbmhhbmNlckFycmF5LCBTeW1ib2wuc3BlY2llcywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gRW5oYW5jZXJBcnJheTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBFbmhhbmNlckFycmF5LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5jb25jYXQuYXBwbHkodGhpcywgYXJyKTtcclxuICAgIH07XHJcbiAgICBFbmhhbmNlckFycmF5LnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhcnIgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcnJbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgKEVuaGFuY2VyQXJyYXkuYmluZC5hcHBseShFbmhhbmNlckFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnJbMF0uY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgKEVuaGFuY2VyQXJyYXkuYmluZC5hcHBseShFbmhhbmNlckFycmF5LCBfX3NwcmVhZEFycmF5KFt2b2lkIDBdLCBhcnIuY29uY2F0KHRoaXMpKSkpKCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIEVuaGFuY2VyQXJyYXk7XHJcbn0oQXJyYXkpKTtcclxuZnVuY3Rpb24gZnJlZXplRHJhZnRhYmxlKHZhbCkge1xyXG4gICAgcmV0dXJuIGlzRHJhZnRhYmxlKHZhbCkgPyBjcmVhdGVOZXh0U3RhdGUodmFsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICB9KSA6IHZhbDtcclxufVxyXG4vLyBzcmMvaW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLnRzXHJcbnZhciBpc1Byb2R1Y3Rpb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCI7XHJcbnZhciBwcmVmaXggPSBcIkludmFyaWFudCBmYWlsZWRcIjtcclxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xyXG4gICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpc1Byb2R1Y3Rpb24pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJlZml4KTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihwcmVmaXggKyBcIjogXCIgKyAobWVzc2FnZSB8fCBcIlwiKSk7XHJcbn1cclxuZnVuY3Rpb24gc3RyaW5naWZ5KG9iaiwgc2VyaWFsaXplciwgaW5kZW50LCBkZWN5Y2xlcikge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgZ2V0U2VyaWFsaXplKHNlcmlhbGl6ZXIsIGRlY3ljbGVyKSwgaW5kZW50KTtcclxufVxyXG5mdW5jdGlvbiBnZXRTZXJpYWxpemUoc2VyaWFsaXplciwgZGVjeWNsZXIpIHtcclxuICAgIHZhciBzdGFjayA9IFtdLCBrZXlzID0gW107XHJcbiAgICBpZiAoIWRlY3ljbGVyKVxyXG4gICAgICAgIGRlY3ljbGVyID0gZnVuY3Rpb24gKF8sIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFja1swXSA9PT0gdmFsdWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJbQ2lyY3VsYXIgfl1cIjtcclxuICAgICAgICAgICAgcmV0dXJuIFwiW0NpcmN1bGFyIH4uXCIgKyBrZXlzLnNsaWNlKDAsIHN0YWNrLmluZGV4T2YodmFsdWUpKS5qb2luKFwiLlwiKSArIFwiXVwiO1xyXG4gICAgICAgIH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgdGhpc1BvcyA9IHN0YWNrLmluZGV4T2YodGhpcyk7XHJcbiAgICAgICAgICAgIH50aGlzUG9zID8gc3RhY2suc3BsaWNlKHRoaXNQb3MgKyAxKSA6IHN0YWNrLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIH50aGlzUG9zID8ga2V5cy5zcGxpY2UodGhpc1BvcywgSW5maW5pdHksIGtleSkgOiBrZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgaWYgKH5zdGFjay5pbmRleE9mKHZhbHVlKSlcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZGVjeWNsZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBzdGFjay5wdXNoKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gc2VyaWFsaXplciA9PSBudWxsID8gdmFsdWUgOiBzZXJpYWxpemVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzSW1tdXRhYmxlRGVmYXVsdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PSBudWxsIHx8IE9iamVjdC5pc0Zyb3plbih2YWx1ZSk7XHJcbn1cclxuZnVuY3Rpb24gdHJhY2tGb3JNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmopIHtcclxuICAgIHZhciB0cmFja2VkUHJvcGVydGllcyA9IHRyYWNrUHJvcGVydGllcyhpc0ltbXV0YWJsZSwgaWdub3JlUGF0aHMsIG9iaik7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRldGVjdE11dGF0aW9uczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGV0ZWN0TXV0YXRpb25zKGlzSW1tdXRhYmxlLCBpZ25vcmVQYXRocywgdHJhY2tlZFByb3BlcnRpZXMsIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmosIHBhdGgsIGNoZWNrZWRPYmplY3RzKSB7XHJcbiAgICBpZiAoaWdub3JlUGF0aHMgPT09IHZvaWQgMCkgeyBpZ25vcmVQYXRocyA9IFtdOyB9XHJcbiAgICBpZiAocGF0aCA9PT0gdm9pZCAwKSB7IHBhdGggPSBcIlwiOyB9XHJcbiAgICBpZiAoY2hlY2tlZE9iamVjdHMgPT09IHZvaWQgMCkgeyBjaGVja2VkT2JqZWN0cyA9IG5ldyBTZXQoKTsgfVxyXG4gICAgdmFyIHRyYWNrZWQgPSB7IHZhbHVlOiBvYmogfTtcclxuICAgIGlmICghaXNJbW11dGFibGUob2JqKSAmJiAhY2hlY2tlZE9iamVjdHMuaGFzKG9iaikpIHtcclxuICAgICAgICBjaGVja2VkT2JqZWN0cy5hZGQob2JqKTtcclxuICAgICAgICB0cmFja2VkLmNoaWxkcmVuID0ge307XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcclxuICAgICAgICAgICAgaWYgKGlnbm9yZVBhdGhzLmxlbmd0aCAmJiBpZ25vcmVQYXRocy5pbmRleE9mKGNoaWxkUGF0aCkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cmFja2VkLmNoaWxkcmVuW2tleV0gPSB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmpba2V5XSwgY2hpbGRQYXRoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJhY2tlZDtcclxufVxyXG5mdW5jdGlvbiBkZXRlY3RNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocywgdHJhY2tlZFByb3BlcnR5LCBvYmosIHNhbWVQYXJlbnRSZWYsIHBhdGgpIHtcclxuICAgIGlmIChpZ25vcmVkUGF0aHMgPT09IHZvaWQgMCkgeyBpZ25vcmVkUGF0aHMgPSBbXTsgfVxyXG4gICAgaWYgKHNhbWVQYXJlbnRSZWYgPT09IHZvaWQgMCkgeyBzYW1lUGFyZW50UmVmID0gZmFsc2U7IH1cclxuICAgIGlmIChwYXRoID09PSB2b2lkIDApIHsgcGF0aCA9IFwiXCI7IH1cclxuICAgIHZhciBwcmV2T2JqID0gdHJhY2tlZFByb3BlcnR5ID8gdHJhY2tlZFByb3BlcnR5LnZhbHVlIDogdm9pZCAwO1xyXG4gICAgdmFyIHNhbWVSZWYgPSBwcmV2T2JqID09PSBvYmo7XHJcbiAgICBpZiAoc2FtZVBhcmVudFJlZiAmJiAhc2FtZVJlZiAmJiAhTnVtYmVyLmlzTmFOKG9iaikpIHtcclxuICAgICAgICByZXR1cm4geyB3YXNNdXRhdGVkOiB0cnVlLCBwYXRoOiBwYXRoIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaXNJbW11dGFibGUocHJldk9iaikgfHwgaXNJbW11dGFibGUob2JqKSkge1xyXG4gICAgICAgIHJldHVybiB7IHdhc011dGF0ZWQ6IGZhbHNlIH07XHJcbiAgICB9XHJcbiAgICB2YXIga2V5c1RvRGV0ZWN0ID0ge307XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gdHJhY2tlZFByb3BlcnR5LmNoaWxkcmVuKSB7XHJcbiAgICAgICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgIGtleXNUb0RldGVjdFtrZXldID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMDtcclxuICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHZhciBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcclxuICAgICAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYXNNYXRjaGVzID0gaWdub3JlZFBhdGhzLnNvbWUoZnVuY3Rpb24gKGlnbm9yZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlnbm9yZWQudGVzdChuZXN0ZWRQYXRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGhhc01hdGNoZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzLCB0cmFja2VkUHJvcGVydHkuY2hpbGRyZW5ba2V5XSwgb2JqW2tleV0sIHNhbWVSZWYsIG5lc3RlZFBhdGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHQud2FzTXV0YXRlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogcmVzdWx0IH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZvciAodmFyIGtleSBpbiBrZXlzVG9EZXRlY3QpIHtcclxuICAgICAgICB2YXIgc3RhdGVfMSA9IF9sb29wXzEoa2V5KTtcclxuICAgICAgICBpZiAodHlwZW9mIHN0YXRlXzEgPT09IFwib2JqZWN0XCIpXHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZV8xLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgd2FzTXV0YXRlZDogZmFsc2UgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIG5leHQoYWN0aW9uKTsgfTsgfTsgfTtcclxuICAgIH1cclxuICAgIHZhciBfYyA9IG9wdGlvbnMuaXNJbW11dGFibGUsIGlzSW1tdXRhYmxlID0gX2MgPT09IHZvaWQgMCA/IGlzSW1tdXRhYmxlRGVmYXVsdCA6IF9jLCBpZ25vcmVkUGF0aHMgPSBvcHRpb25zLmlnbm9yZWRQYXRocywgX2QgPSBvcHRpb25zLndhcm5BZnRlciwgd2FybkFmdGVyID0gX2QgPT09IHZvaWQgMCA/IDMyIDogX2QsIGlnbm9yZSA9IG9wdGlvbnMuaWdub3JlO1xyXG4gICAgaWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzIHx8IGlnbm9yZTtcclxuICAgIHZhciB0cmFjayA9IHRyYWNrRm9yTXV0YXRpb25zLmJpbmQobnVsbCwgaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocyk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgdmFyIGdldFN0YXRlID0gX2MuZ2V0U3RhdGU7XHJcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0U3RhdGUoKTtcclxuICAgICAgICB2YXIgdHJhY2tlciA9IHRyYWNrKHN0YXRlKTtcclxuICAgICAgICB2YXIgcmVzdWx0O1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyh3YXJuQWZ0ZXIsIFwiSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlXCIpO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdGUgPSBnZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpbnZhcmlhbnQoIXJlc3VsdC53YXNNdXRhdGVkLCBcIkEgc3RhdGUgbXV0YXRpb24gd2FzIGRldGVjdGVkIGJldHdlZW4gZGlzcGF0Y2hlcywgaW4gdGhlIHBhdGggJ1wiICsgKHJlc3VsdC5wYXRoIHx8IFwiXCIpICsgXCInLiAgVGhpcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgZGlzcGF0Y2hlZEFjdGlvbiA9IG5leHQoYWN0aW9uKTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlID0gZ2V0U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyYWNrZXIuZGV0ZWN0TXV0YXRpb25zKCk7XHJcbiAgICAgICAgICAgICAgICB0cmFja2VyID0gdHJhY2soc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lndhc011dGF0ZWQgJiYgaW52YXJpYW50KCFyZXN1bHQud2FzTXV0YXRlZCwgXCJBIHN0YXRlIG11dGF0aW9uIHdhcyBkZXRlY3RlZCBpbnNpZGUgYSBkaXNwYXRjaCwgaW4gdGhlIHBhdGg6IFwiICsgKHJlc3VsdC5wYXRoIHx8IFwiXCIpICsgXCIuIFRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoZSBhY3Rpb24gXCIgKyBzdHJpbmdpZnkoYWN0aW9uKSArIFwiLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBtZWFzdXJlVXRpbHMud2FybklmRXhjZWVkZWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRpc3BhdGNoZWRBY3Rpb247XHJcbiAgICAgICAgfTsgfTtcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL3NlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50c1xyXG5mdW5jdGlvbiBpc1BsYWluKHZhbCkge1xyXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xyXG4gICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgfHwgdHlwZSA9PT0gXCJudW1iZXJcIiB8fCBBcnJheS5pc0FycmF5KHZhbCkgfHwgaXNQbGFpbk9iamVjdCh2YWwpO1xyXG59XHJcbmZ1bmN0aW9uIGZpbmROb25TZXJpYWxpemFibGVWYWx1ZSh2YWx1ZSwgcGF0aCwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpIHtcclxuICAgIGlmIChwYXRoID09PSB2b2lkIDApIHsgcGF0aCA9IFwiXCI7IH1cclxuICAgIGlmIChpc1NlcmlhbGl6YWJsZSA9PT0gdm9pZCAwKSB7IGlzU2VyaWFsaXphYmxlID0gaXNQbGFpbjsgfVxyXG4gICAgaWYgKGlnbm9yZWRQYXRocyA9PT0gdm9pZCAwKSB7IGlnbm9yZWRQYXRocyA9IFtdOyB9XHJcbiAgICB2YXIgZm91bmROZXN0ZWRTZXJpYWxpemFibGU7XHJcbiAgICBpZiAoIWlzU2VyaWFsaXphYmxlKHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGtleVBhdGg6IHBhdGggfHwgXCI8cm9vdD5cIixcclxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FjaGUgPT0gbnVsbCA/IHZvaWQgMCA6IGNhY2hlLmhhcyh2YWx1ZSkpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgdmFyIGVudHJpZXMgPSBnZXRFbnRyaWVzICE9IG51bGwgPyBnZXRFbnRyaWVzKHZhbHVlKSA6IE9iamVjdC5lbnRyaWVzKHZhbHVlKTtcclxuICAgIHZhciBoYXNJZ25vcmVkUGF0aHMgPSBpZ25vcmVkUGF0aHMubGVuZ3RoID4gMDtcclxuICAgIHZhciBfbG9vcF8yID0gZnVuY3Rpb24gKGtleSwgbmVzdGVkVmFsdWUpIHtcclxuICAgICAgICB2YXIgbmVzdGVkUGF0aCA9IHBhdGggPyBwYXRoICsgXCIuXCIgKyBrZXkgOiBrZXk7XHJcbiAgICAgICAgaWYgKGhhc0lnbm9yZWRQYXRocykge1xyXG4gICAgICAgICAgICB2YXIgaGFzTWF0Y2hlcyA9IGlnbm9yZWRQYXRocy5zb21lKGZ1bmN0aW9uIChpZ25vcmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWdub3JlZCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZ25vcmVkLnRlc3QobmVzdGVkUGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmVzdGVkUGF0aCA9PT0gaWdub3JlZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChoYXNNYXRjaGVzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNTZXJpYWxpemFibGUobmVzdGVkVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5UGF0aDogbmVzdGVkUGF0aCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmVzdGVkVmFsdWVcclxuICAgICAgICAgICAgICAgIH0gfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuZXN0ZWRWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShuZXN0ZWRWYWx1ZSwgbmVzdGVkUGF0aCwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpO1xyXG4gICAgICAgICAgICBpZiAoZm91bmROZXN0ZWRTZXJpYWxpemFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZvciAodmFyIF9pID0gMCwgZW50cmllc18xID0gZW50cmllczsgX2kgPCBlbnRyaWVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIF9jID0gZW50cmllc18xW19pXSwga2V5ID0gX2NbMF0sIG5lc3RlZFZhbHVlID0gX2NbMV07XHJcbiAgICAgICAgdmFyIHN0YXRlXzIgPSBfbG9vcF8yKGtleSwgbmVzdGVkVmFsdWUpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVfMiA9PT0gXCJvYmplY3RcIilcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXzIudmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FjaGUgJiYgaXNOZXN0ZWRGcm96ZW4odmFsdWUpKVxyXG4gICAgICAgIGNhY2hlLmFkZCh2YWx1ZSk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuZnVuY3Rpb24gaXNOZXN0ZWRGcm96ZW4odmFsdWUpIHtcclxuICAgIGlmICghT2JqZWN0LmlzRnJvemVuKHZhbHVlKSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIF9jID0gT2JqZWN0LnZhbHVlcyh2YWx1ZSk7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIG5lc3RlZFZhbHVlID0gX2NbX2ldO1xyXG4gICAgICAgIGlmICh0eXBlb2YgbmVzdGVkVmFsdWUgIT09IFwib2JqZWN0XCIgfHwgbmVzdGVkVmFsdWUgPT09IG51bGwpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmICghaXNOZXN0ZWRGcm96ZW4obmVzdGVkVmFsdWUpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKG5leHQpIHsgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIG5leHQoYWN0aW9uKTsgfTsgfTsgfTtcclxuICAgIH1cclxuICAgIHZhciBfYyA9IG9wdGlvbnMuaXNTZXJpYWxpemFibGUsIGlzU2VyaWFsaXphYmxlID0gX2MgPT09IHZvaWQgMCA/IGlzUGxhaW4gOiBfYywgZ2V0RW50cmllcyA9IG9wdGlvbnMuZ2V0RW50cmllcywgX2QgPSBvcHRpb25zLmlnbm9yZWRBY3Rpb25zLCBpZ25vcmVkQWN0aW9ucyA9IF9kID09PSB2b2lkIDAgPyBbXSA6IF9kLCBfZSA9IG9wdGlvbnMuaWdub3JlZEFjdGlvblBhdGhzLCBpZ25vcmVkQWN0aW9uUGF0aHMgPSBfZSA9PT0gdm9pZCAwID8gW1wibWV0YS5hcmdcIiwgXCJtZXRhLmJhc2VRdWVyeU1ldGFcIl0gOiBfZSwgX2YgPSBvcHRpb25zLmlnbm9yZWRQYXRocywgaWdub3JlZFBhdGhzID0gX2YgPT09IHZvaWQgMCA/IFtdIDogX2YsIF9nID0gb3B0aW9ucy53YXJuQWZ0ZXIsIHdhcm5BZnRlciA9IF9nID09PSB2b2lkIDAgPyAzMiA6IF9nLCBfaCA9IG9wdGlvbnMuaWdub3JlU3RhdGUsIGlnbm9yZVN0YXRlID0gX2ggPT09IHZvaWQgMCA/IGZhbHNlIDogX2gsIF9qID0gb3B0aW9ucy5pZ25vcmVBY3Rpb25zLCBpZ25vcmVBY3Rpb25zID0gX2ogPT09IHZvaWQgMCA/IGZhbHNlIDogX2osIF9rID0gb3B0aW9ucy5kaXNhYmxlQ2FjaGUsIGRpc2FibGVDYWNoZSA9IF9rID09PSB2b2lkIDAgPyBmYWxzZSA6IF9rO1xyXG4gICAgdmFyIGNhY2hlID0gIWRpc2FibGVDYWNoZSAmJiBXZWFrU2V0ID8gbmV3IFdlYWtTZXQoKSA6IHZvaWQgMDtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RvcmVBUEkpIHsgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5leHQoYWN0aW9uKTtcclxuICAgICAgICB2YXIgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyh3YXJuQWZ0ZXIsIFwiU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlXCIpO1xyXG4gICAgICAgIGlmICghaWdub3JlQWN0aW9ucyAmJiAhKGlnbm9yZWRBY3Rpb25zLmxlbmd0aCAmJiBpZ25vcmVkQWN0aW9ucy5pbmRleE9mKGFjdGlvbi50eXBlKSAhPT0gLTEpKSB7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShhY3Rpb24sIFwiXCIsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkQWN0aW9uUGF0aHMsIGNhY2hlKTtcclxuICAgICAgICAgICAgICAgIGlmIChmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleVBhdGggPSBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlLmtleVBhdGgsIHZhbHVlID0gZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQSBub24tc2VyaWFsaXphYmxlIHZhbHVlIHdhcyBkZXRlY3RlZCBpbiBhbiBhY3Rpb24sIGluIHRoZSBwYXRoOiBgXCIgKyBrZXlQYXRoICsgXCJgLiBWYWx1ZTpcIiwgdmFsdWUsIFwiXFxuVGFrZSBhIGxvb2sgYXQgdGhlIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGFjdGlvbjogXCIsIGFjdGlvbiwgXCJcXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9hY3Rpb25zI3doeS1zaG91bGQtdHlwZS1iZS1hLXN0cmluZy1vci1hdC1sZWFzdC1zZXJpYWxpemFibGUtd2h5LXNob3VsZC1teS1hY3Rpb24tdHlwZXMtYmUtY29uc3RhbnRzKVwiLCBcIlxcbihUbyBhbGxvdyBub24tc2VyaWFsaXphYmxlIHZhbHVlcyBzZWU6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvdXNhZ2UvdXNhZ2UtZ3VpZGUjd29ya2luZy13aXRoLW5vbi1zZXJpYWxpemFibGUtZGF0YSlcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlnbm9yZVN0YXRlKSB7XHJcbiAgICAgICAgICAgIG1lYXN1cmVVdGlscy5tZWFzdXJlVGltZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdG9yZUFQSS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSA9IGZpbmROb25TZXJpYWxpemFibGVWYWx1ZShzdGF0ZSwgXCJcIiwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRQYXRocywgY2FjaGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlQYXRoID0gZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlLmtleVBhdGgsIHZhbHVlID0gZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBIG5vbi1zZXJpYWxpemFibGUgdmFsdWUgd2FzIGRldGVjdGVkIGluIHRoZSBzdGF0ZSwgaW4gdGhlIHBhdGg6IGBcIiArIGtleVBhdGggKyBcImAuIFZhbHVlOlwiLCB2YWx1ZSwgXCJcXG5UYWtlIGEgbG9vayBhdCB0aGUgcmVkdWNlcihzKSBoYW5kbGluZyB0aGlzIGFjdGlvbiB0eXBlOiBcIiArIGFjdGlvbi50eXBlICsgXCIuXFxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvb3JnYW5pemluZy1zdGF0ZSNjYW4taS1wdXQtZnVuY3Rpb25zLXByb21pc2VzLW9yLW90aGVyLW5vbi1zZXJpYWxpemFibGUtaXRlbXMtaW4tbXktc3RvcmUtc3RhdGUpXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9OyB9OyB9O1xyXG59XHJcbi8vIHNyYy9nZXREZWZhdWx0TWlkZGxld2FyZS50c1xyXG5mdW5jdGlvbiBpc0Jvb2xlYW4oeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcImJvb2xlYW5cIjtcclxufVxyXG5mdW5jdGlvbiBjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIGdldERlZmF1bHRNaWRkbGV3YXJlKG9wdGlvbnMpO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBnZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIF9jID0gb3B0aW9ucy50aHVuaywgdGh1bmsgPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jLCBfZCA9IG9wdGlvbnMuaW1tdXRhYmxlQ2hlY2ssIGltbXV0YWJsZUNoZWNrID0gX2QgPT09IHZvaWQgMCA/IHRydWUgOiBfZCwgX2UgPSBvcHRpb25zLnNlcmlhbGl6YWJsZUNoZWNrLCBzZXJpYWxpemFibGVDaGVjayA9IF9lID09PSB2b2lkIDAgPyB0cnVlIDogX2UsIF9mID0gb3B0aW9ucy5hY3Rpb25DcmVhdG9yQ2hlY2ssIGFjdGlvbkNyZWF0b3JDaGVjayA9IF9mID09PSB2b2lkIDAgPyB0cnVlIDogX2Y7XHJcbiAgICB2YXIgbWlkZGxld2FyZUFycmF5ID0gbmV3IE1pZGRsZXdhcmVBcnJheSgpO1xyXG4gICAgaWYgKHRodW5rKSB7XHJcbiAgICAgICAgaWYgKGlzQm9vbGVhbih0aHVuaykpIHtcclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2godGh1bmtNaWRkbGV3YXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKHRodW5rTWlkZGxld2FyZS53aXRoRXh0cmFBcmd1bWVudCh0aHVuay5leHRyYUFyZ3VtZW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgIGlmIChpbW11dGFibGVDaGVjaykge1xyXG4gICAgICAgICAgICB2YXIgaW1tdXRhYmxlT3B0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoIWlzQm9vbGVhbihpbW11dGFibGVDaGVjaykpIHtcclxuICAgICAgICAgICAgICAgIGltbXV0YWJsZU9wdGlvbnMgPSBpbW11dGFibGVDaGVjaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaWRkbGV3YXJlQXJyYXkudW5zaGlmdChjcmVhdGVJbW11dGFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUoaW1tdXRhYmxlT3B0aW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VyaWFsaXphYmxlQ2hlY2spIHtcclxuICAgICAgICAgICAgdmFyIHNlcmlhbGl6YWJsZU9wdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFpc0Jvb2xlYW4oc2VyaWFsaXphYmxlQ2hlY2spKSB7XHJcbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGVPcHRpb25zID0gc2VyaWFsaXphYmxlQ2hlY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnB1c2goY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKHNlcmlhbGl6YWJsZU9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFjdGlvbkNyZWF0b3JDaGVjaykge1xyXG4gICAgICAgICAgICB2YXIgYWN0aW9uQ3JlYXRvck9wdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFpc0Jvb2xlYW4oYWN0aW9uQ3JlYXRvckNoZWNrKSkge1xyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ3JlYXRvck9wdGlvbnMgPSBhY3Rpb25DcmVhdG9yQ2hlY2s7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWlkZGxld2FyZUFycmF5LnVuc2hpZnQoY3JlYXRlQWN0aW9uQ3JlYXRvckludmFyaWFudE1pZGRsZXdhcmUoYWN0aW9uQ3JlYXRvck9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWlkZGxld2FyZUFycmF5O1xyXG59XHJcbi8vIHNyYy9jb25maWd1cmVTdG9yZS50c1xyXG52YXIgSVNfUFJPRFVDVElPTiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIjtcclxuZnVuY3Rpb24gY29uZmlndXJlU3RvcmUob3B0aW9ucykge1xyXG4gICAgdmFyIGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSA9IGN1cnJ5R2V0RGVmYXVsdE1pZGRsZXdhcmUoKTtcclxuICAgIHZhciBfYyA9IG9wdGlvbnMgfHwge30sIF9kID0gX2MucmVkdWNlciwgcmVkdWNlciA9IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZCwgX2UgPSBfYy5taWRkbGV3YXJlLCBtaWRkbGV3YXJlID0gX2UgPT09IHZvaWQgMCA/IGN1cnJpZWRHZXREZWZhdWx0TWlkZGxld2FyZSgpIDogX2UsIF9mID0gX2MuZGV2VG9vbHMsIGRldlRvb2xzID0gX2YgPT09IHZvaWQgMCA/IHRydWUgOiBfZiwgX2cgPSBfYy5wcmVsb2FkZWRTdGF0ZSwgcHJlbG9hZGVkU3RhdGUgPSBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2csIF9oID0gX2MuZW5oYW5jZXJzLCBlbmhhbmNlcnMgPSBfaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2g7XHJcbiAgICB2YXIgcm9vdFJlZHVjZXI7XHJcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHJvb3RSZWR1Y2VyID0gcmVkdWNlcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocmVkdWNlcikpIHtcclxuICAgICAgICByb290UmVkdWNlciA9IGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2VyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCJyZWR1Y2VyXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudCwgYW5kIG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3Qgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBjb21iaW5lUmVkdWNlcnMnKTtcclxuICAgIH1cclxuICAgIHZhciBmaW5hbE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlO1xyXG4gICAgaWYgKHR5cGVvZiBmaW5hbE1pZGRsZXdhcmUgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGZpbmFsTWlkZGxld2FyZSA9IGZpbmFsTWlkZGxld2FyZShjdXJyaWVkR2V0RGVmYXVsdE1pZGRsZXdhcmUpO1xyXG4gICAgICAgIGlmICghSVNfUFJPRFVDVElPTiAmJiAhQXJyYXkuaXNBcnJheShmaW5hbE1pZGRsZXdhcmUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIndoZW4gdXNpbmcgYSBtaWRkbGV3YXJlIGJ1aWxkZXIgZnVuY3Rpb24sIGFuIGFycmF5IG9mIG1pZGRsZXdhcmUgbXVzdCBiZSByZXR1cm5lZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIUlTX1BST0RVQ1RJT04gJiYgZmluYWxNaWRkbGV3YXJlLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIHR5cGVvZiBpdGVtICE9PSBcImZ1bmN0aW9uXCI7IH0pKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZWFjaCBtaWRkbGV3YXJlIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZVN0b3JlIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcclxuICAgIH1cclxuICAgIHZhciBtaWRkbGV3YXJlRW5oYW5jZXIgPSBhcHBseU1pZGRsZXdhcmUuYXBwbHkodm9pZCAwLCBmaW5hbE1pZGRsZXdhcmUpO1xyXG4gICAgdmFyIGZpbmFsQ29tcG9zZSA9IGNvbXBvc2UyO1xyXG4gICAgaWYgKGRldlRvb2xzKSB7XHJcbiAgICAgICAgZmluYWxDb21wb3NlID0gY29tcG9zZVdpdGhEZXZUb29scyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgICAgIHRyYWNlOiAhSVNfUFJPRFVDVElPTlxyXG4gICAgICAgIH0sIHR5cGVvZiBkZXZUb29scyA9PT0gXCJvYmplY3RcIiAmJiBkZXZUb29scykpO1xyXG4gICAgfVxyXG4gICAgdmFyIGRlZmF1bHRFbmhhbmNlcnMgPSBuZXcgRW5oYW5jZXJBcnJheShtaWRkbGV3YXJlRW5oYW5jZXIpO1xyXG4gICAgdmFyIHN0b3JlRW5oYW5jZXJzID0gZGVmYXVsdEVuaGFuY2VycztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVuaGFuY2VycykpIHtcclxuICAgICAgICBzdG9yZUVuaGFuY2VycyA9IF9fc3ByZWFkQXJyYXkoW21pZGRsZXdhcmVFbmhhbmNlcl0sIGVuaGFuY2Vycyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgZW5oYW5jZXJzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBzdG9yZUVuaGFuY2VycyA9IGVuaGFuY2VycyhkZWZhdWx0RW5oYW5jZXJzKTtcclxuICAgIH1cclxuICAgIHZhciBjb21wb3NlZEVuaGFuY2VyID0gZmluYWxDb21wb3NlLmFwcGx5KHZvaWQgMCwgc3RvcmVFbmhhbmNlcnMpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZVN0b3JlKHJvb3RSZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgY29tcG9zZWRFbmhhbmNlcik7XHJcbn1cclxuLy8gc3JjL2NyZWF0ZVJlZHVjZXIudHNcclxuaW1wb3J0IGNyZWF0ZU5leHRTdGF0ZTIsIHsgaXNEcmFmdCBhcyBpc0RyYWZ0MiwgaXNEcmFmdGFibGUgYXMgaXNEcmFmdGFibGUyIH0gZnJvbSBcImltbWVyXCI7XHJcbi8vIHNyYy9tYXBCdWlsZGVycy50c1xyXG5mdW5jdGlvbiBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhidWlsZGVyQ2FsbGJhY2spIHtcclxuICAgIHZhciBhY3Rpb25zTWFwID0ge307XHJcbiAgICB2YXIgYWN0aW9uTWF0Y2hlcnMgPSBbXTtcclxuICAgIHZhciBkZWZhdWx0Q2FzZVJlZHVjZXI7XHJcbiAgICB2YXIgYnVpbGRlciA9IHtcclxuICAgICAgICBhZGRDYXNlOiBmdW5jdGlvbiAodHlwZU9yQWN0aW9uQ3JlYXRvciwgcmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uTWF0Y2hlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGRNYXRjaGVyYFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRDYXNlYCBzaG91bGQgb25seSBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgYGJ1aWxkZXIuYWRkRGVmYXVsdENhc2VgXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHR5cGVPckFjdGlvbkNyZWF0b3IgPT09IFwic3RyaW5nXCIgPyB0eXBlT3JBY3Rpb25DcmVhdG9yIDogdHlwZU9yQWN0aW9uQ3JlYXRvci50eXBlO1xyXG4gICAgICAgICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBhY3Rpb24gdHlwZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHlwZSBpbiBhY3Rpb25zTWFwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgYnVpbGRlci5hZGRDYXNlYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggdHdvIHJlZHVjZXJzIGZvciB0aGUgc2FtZSBhY3Rpb24gdHlwZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3Rpb25zTWFwW3R5cGVdID0gcmVkdWNlcjtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZGRNYXRjaGVyOiBmdW5jdGlvbiAobWF0Y2hlciwgcmVkdWNlcikge1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYGJ1aWxkZXIuYWRkTWF0Y2hlcmAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZERlZmF1bHRDYXNlYFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3Rpb25NYXRjaGVycy5wdXNoKHsgbWF0Y2hlcjogbWF0Y2hlciwgcmVkdWNlcjogcmVkdWNlciB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBhZGREZWZhdWx0Q2FzZTogZnVuY3Rpb24gKHJlZHVjZXIpIHtcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImBidWlsZGVyLmFkZERlZmF1bHRDYXNlYCBjYW4gb25seSBiZSBjYWxsZWQgb25jZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWZhdWx0Q2FzZVJlZHVjZXIgPSByZWR1Y2VyO1xyXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgYnVpbGRlckNhbGxiYWNrKGJ1aWxkZXIpO1xyXG4gICAgcmV0dXJuIFthY3Rpb25zTWFwLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyXTtcclxufVxyXG4vLyBzcmMvY3JlYXRlUmVkdWNlci50c1xyXG5mdW5jdGlvbiBpc1N0YXRlRnVuY3Rpb24oeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCI7XHJcbn1cclxudmFyIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSBmYWxzZTtcclxuZnVuY3Rpb24gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUsIG1hcE9yQnVpbGRlckNhbGxiYWNrLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyKSB7XHJcbiAgICBpZiAoYWN0aW9uTWF0Y2hlcnMgPT09IHZvaWQgMCkgeyBhY3Rpb25NYXRjaGVycyA9IFtdOyB9XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtYXBPckJ1aWxkZXJDYWxsYmFjayA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVGhlIG9iamVjdCBub3RhdGlvbiBmb3IgYGNyZWF0ZVJlZHVjZXJgIGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUlRLIDIuMC4gUGxlYXNlIHVzZSB0aGUgJ2J1aWxkZXIgY2FsbGJhY2snIG5vdGF0aW9uIGluc3RlYWQ6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvYXBpL2NyZWF0ZVJlZHVjZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgX2MgPSB0eXBlb2YgbWFwT3JCdWlsZGVyQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIiA/IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKG1hcE9yQnVpbGRlckNhbGxiYWNrKSA6IFttYXBPckJ1aWxkZXJDYWxsYmFjaywgYWN0aW9uTWF0Y2hlcnMsIGRlZmF1bHRDYXNlUmVkdWNlcl0sIGFjdGlvbnNNYXAgPSBfY1swXSwgZmluYWxBY3Rpb25NYXRjaGVycyA9IF9jWzFdLCBmaW5hbERlZmF1bHRDYXNlUmVkdWNlciA9IF9jWzJdO1xyXG4gICAgdmFyIGdldEluaXRpYWxTdGF0ZTtcclxuICAgIGlmIChpc1N0YXRlRnVuY3Rpb24oaW5pdGlhbFN0YXRlKSkge1xyXG4gICAgICAgIGdldEluaXRpYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZyZWV6ZURyYWZ0YWJsZShpbml0aWFsU3RhdGUoKSk7IH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgZnJvemVuSW5pdGlhbFN0YXRlXzEgPSBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKTtcclxuICAgICAgICBnZXRJbml0aWFsU3RhdGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmcm96ZW5Jbml0aWFsU3RhdGVfMTsgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xyXG4gICAgICAgIGlmIChzdGF0ZSA9PT0gdm9pZCAwKSB7IHN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlKCk7IH1cclxuICAgICAgICB2YXIgY2FzZVJlZHVjZXJzID0gX19zcHJlYWRBcnJheShbXHJcbiAgICAgICAgICAgIGFjdGlvbnNNYXBbYWN0aW9uLnR5cGVdXHJcbiAgICAgICAgXSwgZmluYWxBY3Rpb25NYXRjaGVycy5maWx0ZXIoZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHZhciBtYXRjaGVyID0gX2MubWF0Y2hlcjtcclxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoYWN0aW9uKTtcclxuICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgIHZhciByZWR1Y2VyMiA9IF9jLnJlZHVjZXI7XHJcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VyMjtcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgaWYgKGNhc2VSZWR1Y2Vycy5maWx0ZXIoZnVuY3Rpb24gKGNyKSB7IHJldHVybiAhIWNyOyB9KS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgY2FzZVJlZHVjZXJzID0gW2ZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhc2VSZWR1Y2Vycy5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzU3RhdGUsIGNhc2VSZWR1Y2VyKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRHJhZnQyKHByZXZpb3VzU3RhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRyYWZ0ID0gcHJldmlvdXNTdGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzRHJhZnRhYmxlMihwcmV2aW91c1N0YXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYXNlUmVkdWNlcihwcmV2aW91c1N0YXRlLCBhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJBIGNhc2UgcmVkdWNlciBvbiBhIG5vbi1kcmFmdGFibGUgdmFsdWUgbXVzdCBub3QgcmV0dXJuIHVuZGVmaW5lZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVOZXh0U3RhdGUyKHByZXZpb3VzU3RhdGUsIGZ1bmN0aW9uIChkcmFmdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlZHVjZXIoZHJhZnQsIGFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XHJcbiAgICAgICAgfSwgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgcmVkdWNlci5nZXRJbml0aWFsU3RhdGUgPSBnZXRJbml0aWFsU3RhdGU7XHJcbiAgICByZXR1cm4gcmVkdWNlcjtcclxufVxyXG4vLyBzcmMvY3JlYXRlU2xpY2UudHNcclxudmFyIGhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24yID0gZmFsc2U7XHJcbmZ1bmN0aW9uIGdldFR5cGUyKHNsaWNlLCBhY3Rpb25LZXkpIHtcclxuICAgIHJldHVybiBzbGljZSArIFwiL1wiICsgYWN0aW9uS2V5O1xyXG59XHJcbmZ1bmN0aW9uIGNyZWF0ZVNsaWNlKG9wdGlvbnMpIHtcclxuICAgIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lO1xyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYG5hbWVgIGlzIGEgcmVxdWlyZWQgb3B0aW9uIGZvciBjcmVhdGVTbGljZVwiKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5pdGlhbFN0YXRlID09PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIllvdSBtdXN0IHByb3ZpZGUgYW4gYGluaXRpYWxTdGF0ZWAgdmFsdWUgdGhhdCBpcyBub3QgYHVuZGVmaW5lZGAuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGBpbml0aWFsU3RhdGVgXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBpbml0aWFsU3RhdGUgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsU3RhdGUgPT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5pbml0aWFsU3RhdGUgOiBmcmVlemVEcmFmdGFibGUob3B0aW9ucy5pbml0aWFsU3RhdGUpO1xyXG4gICAgdmFyIHJlZHVjZXJzID0gb3B0aW9ucy5yZWR1Y2VycyB8fCB7fTtcclxuICAgIHZhciByZWR1Y2VyTmFtZXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XHJcbiAgICB2YXIgc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWUgPSB7fTtcclxuICAgIHZhciBzbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZSA9IHt9O1xyXG4gICAgdmFyIGFjdGlvbkNyZWF0b3JzID0ge307XHJcbiAgICByZWR1Y2VyTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAocmVkdWNlck5hbWUpIHtcclxuICAgICAgICB2YXIgbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUgPSByZWR1Y2Vyc1tyZWR1Y2VyTmFtZV07XHJcbiAgICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlMihuYW1lLCByZWR1Y2VyTmFtZSk7XHJcbiAgICAgICAgdmFyIGNhc2VSZWR1Y2VyO1xyXG4gICAgICAgIHZhciBwcmVwYXJlQ2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKFwicmVkdWNlclwiIGluIG1heWJlUmVkdWNlcldpdGhQcmVwYXJlKSB7XHJcbiAgICAgICAgICAgIGNhc2VSZWR1Y2VyID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucmVkdWNlcjtcclxuICAgICAgICAgICAgcHJlcGFyZUNhbGxiYWNrID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUucHJlcGFyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNhc2VSZWR1Y2VyID0gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lW3JlZHVjZXJOYW1lXSA9IGNhc2VSZWR1Y2VyO1xyXG4gICAgICAgIHNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlW3R5cGVdID0gY2FzZVJlZHVjZXI7XHJcbiAgICAgICAgYWN0aW9uQ3JlYXRvcnNbcmVkdWNlck5hbWVdID0gcHJlcGFyZUNhbGxiYWNrID8gY3JlYXRlQWN0aW9uKHR5cGUsIHByZXBhcmVDYWxsYmFjaykgOiBjcmVhdGVBY3Rpb24odHlwZSk7XHJcbiAgICB9KTtcclxuICAgIGZ1bmN0aW9uIGJ1aWxkUmVkdWNlcigpIHtcclxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0T2JqZWN0Tm90YXRpb24yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRPYmplY3ROb3RhdGlvbjIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZSBvYmplY3Qgbm90YXRpb24gZm9yIGBjcmVhdGVTbGljZS5leHRyYVJlZHVjZXJzYCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJUSyAyLjAuIFBsZWFzZSB1c2UgdGhlICdidWlsZGVyIGNhbGxiYWNrJyBub3RhdGlvbiBpbnN0ZWFkOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9jcmVhdGVTbGljZVwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgX2MgPSB0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSBcImZ1bmN0aW9uXCIgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhvcHRpb25zLmV4dHJhUmVkdWNlcnMpIDogW29wdGlvbnMuZXh0cmFSZWR1Y2Vyc10sIF9kID0gX2NbMF0sIGV4dHJhUmVkdWNlcnMgPSBfZCA9PT0gdm9pZCAwID8ge30gOiBfZCwgX2UgPSBfY1sxXSwgYWN0aW9uTWF0Y2hlcnMgPSBfZSA9PT0gdm9pZCAwID8gW10gOiBfZSwgX2YgPSBfY1syXSwgZGVmYXVsdENhc2VSZWR1Y2VyID0gX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mO1xyXG4gICAgICAgIHZhciBmaW5hbENhc2VSZWR1Y2VycyA9IF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHt9LCBleHRyYVJlZHVjZXJzKSwgc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGUpO1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVSZWR1Y2VyKGluaXRpYWxTdGF0ZSwgZnVuY3Rpb24gKGJ1aWxkZXIpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGZpbmFsQ2FzZVJlZHVjZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBidWlsZGVyLmFkZENhc2Uoa2V5LCBmaW5hbENhc2VSZWR1Y2Vyc1trZXldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIGFjdGlvbk1hdGNoZXJzXzEgPSBhY3Rpb25NYXRjaGVyczsgX2kgPCBhY3Rpb25NYXRjaGVyc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG0gPSBhY3Rpb25NYXRjaGVyc18xW19pXTtcclxuICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkTWF0Y2hlcihtLm1hdGNoZXIsIG0ucmVkdWNlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xyXG4gICAgICAgICAgICAgICAgYnVpbGRlci5hZGREZWZhdWx0Q2FzZShkZWZhdWx0Q2FzZVJlZHVjZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB2YXIgX3JlZHVjZXI7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgcmVkdWNlcjogZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKCFfcmVkdWNlcilcclxuICAgICAgICAgICAgICAgIF9yZWR1Y2VyID0gYnVpbGRSZWR1Y2VyKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBfcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFjdGlvbnM6IGFjdGlvbkNyZWF0b3JzLFxyXG4gICAgICAgIGNhc2VSZWR1Y2Vyczogc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWUsXHJcbiAgICAgICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghX3JlZHVjZXIpXHJcbiAgICAgICAgICAgICAgICBfcmVkdWNlciA9IGJ1aWxkUmVkdWNlcigpO1xyXG4gICAgICAgICAgICByZXR1cm4gX3JlZHVjZXIuZ2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvZW50aXR5X3N0YXRlLnRzXHJcbmZ1bmN0aW9uIGdldEluaXRpYWxFbnRpdHlTdGF0ZSgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgaWRzOiBbXSxcclxuICAgICAgICBlbnRpdGllczoge31cclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gY3JlYXRlSW5pdGlhbFN0YXRlRmFjdG9yeSgpIHtcclxuICAgIGZ1bmN0aW9uIGdldEluaXRpYWxTdGF0ZShhZGRpdGlvbmFsU3RhdGUpIHtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0YXRlID09PSB2b2lkIDApIHsgYWRkaXRpb25hbFN0YXRlID0ge307IH1cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihnZXRJbml0aWFsRW50aXR5U3RhdGUoKSwgYWRkaXRpb25hbFN0YXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IGdldEluaXRpYWxTdGF0ZTogZ2V0SW5pdGlhbFN0YXRlIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3N0YXRlX3NlbGVjdG9ycy50c1xyXG5mdW5jdGlvbiBjcmVhdGVTZWxlY3RvcnNGYWN0b3J5KCkge1xyXG4gICAgZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKHNlbGVjdFN0YXRlKSB7XHJcbiAgICAgICAgdmFyIHNlbGVjdElkcyA9IGZ1bmN0aW9uIChzdGF0ZSkgeyByZXR1cm4gc3RhdGUuaWRzOyB9O1xyXG4gICAgICAgIHZhciBzZWxlY3RFbnRpdGllcyA9IGZ1bmN0aW9uIChzdGF0ZSkgeyByZXR1cm4gc3RhdGUuZW50aXRpZXM7IH07XHJcbiAgICAgICAgdmFyIHNlbGVjdEFsbCA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yKHNlbGVjdElkcywgc2VsZWN0RW50aXRpZXMsIGZ1bmN0aW9uIChpZHMsIGVudGl0aWVzKSB7IHJldHVybiBpZHMubWFwKGZ1bmN0aW9uIChpZCkgeyByZXR1cm4gZW50aXRpZXNbaWRdOyB9KTsgfSk7XHJcbiAgICAgICAgdmFyIHNlbGVjdElkID0gZnVuY3Rpb24gKF8sIGlkKSB7IHJldHVybiBpZDsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0QnlJZCA9IGZ1bmN0aW9uIChlbnRpdGllcywgaWQpIHsgcmV0dXJuIGVudGl0aWVzW2lkXTsgfTtcclxuICAgICAgICB2YXIgc2VsZWN0VG90YWwgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RJZHMsIGZ1bmN0aW9uIChpZHMpIHsgcmV0dXJuIGlkcy5sZW5ndGg7IH0pO1xyXG4gICAgICAgIGlmICghc2VsZWN0U3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdElkczogc2VsZWN0SWRzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0RW50aXRpZXM6IHNlbGVjdEVudGl0aWVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0QWxsOiBzZWxlY3RBbGwsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RUb3RhbDogc2VsZWN0VG90YWwsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RFbnRpdGllcywgc2VsZWN0SWQsIHNlbGVjdEJ5SWQpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMgPSBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0RW50aXRpZXMpO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNlbGVjdElkczogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdElkcyksXHJcbiAgICAgICAgICAgIHNlbGVjdEVudGl0aWVzOiBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsXHJcbiAgICAgICAgICAgIHNlbGVjdEFsbDogY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3Ioc2VsZWN0U3RhdGUsIHNlbGVjdEFsbCksXHJcbiAgICAgICAgICAgIHNlbGVjdFRvdGFsOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RTdGF0ZSwgc2VsZWN0VG90YWwpLFxyXG4gICAgICAgICAgICBzZWxlY3RCeUlkOiBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvcihzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsIHNlbGVjdElkLCBzZWxlY3RCeUlkKVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBnZXRTZWxlY3RvcnM6IGdldFNlbGVjdG9ycyB9O1xyXG59XHJcbi8vIHNyYy9lbnRpdGllcy9zdGF0ZV9hZGFwdGVyLnRzXHJcbmltcG9ydCBjcmVhdGVOZXh0U3RhdGUzLCB7IGlzRHJhZnQgYXMgaXNEcmFmdDMgfSBmcm9tIFwiaW1tZXJcIjtcclxuZnVuY3Rpb24gY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcclxuICAgIHZhciBvcGVyYXRvciA9IGNyZWF0ZVN0YXRlT3BlcmF0b3IoZnVuY3Rpb24gKF8sIHN0YXRlKSB7IHJldHVybiBtdXRhdG9yKHN0YXRlKTsgfSk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gb3BlcmF0aW9uKHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wZXJhdG9yKHN0YXRlLCB2b2lkIDApO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBjcmVhdGVTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb24oc3RhdGUsIGFyZykge1xyXG4gICAgICAgIGZ1bmN0aW9uIGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KGFyZzIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzRlNBKGFyZzIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcnVuTXV0YXRvciA9IGZ1bmN0aW9uIChkcmFmdCkge1xyXG4gICAgICAgICAgICBpZiAoaXNQYXlsb2FkQWN0aW9uQXJndW1lbnQoYXJnKSkge1xyXG4gICAgICAgICAgICAgICAgbXV0YXRvcihhcmcucGF5bG9hZCwgZHJhZnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbXV0YXRvcihhcmcsIGRyYWZ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGlzRHJhZnQzKHN0YXRlKSkge1xyXG4gICAgICAgICAgICBydW5NdXRhdG9yKHN0YXRlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZTMoc3RhdGUsIHJ1bk11dGF0b3IpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3V0aWxzLnRzXHJcbmZ1bmN0aW9uIHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCkge1xyXG4gICAgdmFyIGtleSA9IHNlbGVjdElkKGVudGl0eSk7XHJcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGtleSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFwiVGhlIGVudGl0eSBwYXNzZWQgdG8gdGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgdW5kZWZpbmVkLlwiLCBcIllvdSBzaG91bGQgcHJvYmFibHkgcHJvdmlkZSB5b3VyIG93biBgc2VsZWN0SWRgIGltcGxlbWVudGF0aW9uLlwiLCBcIlRoZSBlbnRpdHkgdGhhdCB3YXMgcGFzc2VkOlwiLCBlbnRpdHksIFwiVGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb246XCIsIHNlbGVjdElkLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxufVxyXG5mdW5jdGlvbiBlbnN1cmVFbnRpdGllc0FycmF5KGVudGl0aWVzKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZW50aXRpZXMpKSB7XHJcbiAgICAgICAgZW50aXRpZXMgPSBPYmplY3QudmFsdWVzKGVudGl0aWVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbnRpdGllcztcclxufVxyXG5mdW5jdGlvbiBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzKG5ld0VudGl0aWVzLCBzZWxlY3RJZCwgc3RhdGUpIHtcclxuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICB2YXIgYWRkZWQgPSBbXTtcclxuICAgIHZhciB1cGRhdGVkID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIG5ld0VudGl0aWVzXzEgPSBuZXdFbnRpdGllczsgX2kgPCBuZXdFbnRpdGllc18xLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIHZhciBlbnRpdHkgPSBuZXdFbnRpdGllc18xW19pXTtcclxuICAgICAgICB2YXIgaWQgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xyXG4gICAgICAgIGlmIChpZCBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICB1cGRhdGVkLnB1c2goeyBpZDogaWQsIGNoYW5nZXM6IGVudGl0eSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFkZGVkLnB1c2goZW50aXR5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW2FkZGVkLCB1cGRhdGVkXTtcclxufVxyXG4vLyBzcmMvZW50aXRpZXMvdW5zb3J0ZWRfc3RhdGVfYWRhcHRlci50c1xyXG5mdW5jdGlvbiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCkge1xyXG4gICAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XHJcbiAgICAgICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlLmlkcy5wdXNoKGtleSk7XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBuZXdFbnRpdGllc18yID0gbmV3RW50aXRpZXM7IF9pIDwgbmV3RW50aXRpZXNfMi5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IG5ld0VudGl0aWVzXzJbX2ldO1xyXG4gICAgICAgICAgICBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xyXG4gICAgICAgIGlmICghKGtleSBpbiBzdGF0ZS5lbnRpdGllcykpIHtcclxuICAgICAgICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXNba2V5XSA9IGVudGl0eTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBuZXdFbnRpdGllc18zID0gbmV3RW50aXRpZXM7IF9pIDwgbmV3RW50aXRpZXNfMy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IG5ld0VudGl0aWVzXzNbX2ldO1xyXG4gICAgICAgICAgICBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldEFsbE11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcclxuICAgICAgICBzdGF0ZS5pZHMgPSBbXTtcclxuICAgICAgICBzdGF0ZS5lbnRpdGllcyA9IHt9O1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZW1vdmVPbmVNdXRhYmx5KGtleSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gcmVtb3ZlTWFueU11dGFibHkoW2tleV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlbW92ZU1hbnlNdXRhYmx5KGtleXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIGRpZE11dGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1trZXldO1xyXG4gICAgICAgICAgICAgICAgZGlkTXV0YXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChkaWRNdXRhdGUpIHtcclxuICAgICAgICAgICAgc3RhdGUuaWRzID0gc3RhdGUuaWRzLmZpbHRlcihmdW5jdGlvbiAoaWQpIHsgcmV0dXJuIGlkIGluIHN0YXRlLmVudGl0aWVzOyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZW1vdmVBbGxNdXRhYmx5KHN0YXRlKSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwge1xyXG4gICAgICAgICAgICBpZHM6IFtdLFxyXG4gICAgICAgICAgICBlbnRpdGllczoge31cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHRha2VOZXdLZXkoa2V5cywgdXBkYXRlLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBvcmlnaW5hbDIgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgIHZhciB1cGRhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luYWwyLCB1cGRhdGUuY2hhbmdlcyk7XHJcbiAgICAgICAgdmFyIG5ld0tleSA9IHNlbGVjdElkVmFsdWUodXBkYXRlZCwgc2VsZWN0SWQpO1xyXG4gICAgICAgIHZhciBoYXNOZXdLZXkgPSBuZXdLZXkgIT09IHVwZGF0ZS5pZDtcclxuICAgICAgICBpZiAoaGFzTmV3S2V5KSB7XHJcbiAgICAgICAgICAgIGtleXNbdXBkYXRlLmlkXSA9IG5ld0tleTtcclxuICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlLmVudGl0aWVzW25ld0tleV0gPSB1cGRhdGVkO1xyXG4gICAgICAgIHJldHVybiBoYXNOZXdLZXk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVPbmVNdXRhYmx5KHVwZGF0ZSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBkYXRlTWFueU11dGFibHkoW3VwZGF0ZV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZU1hbnlNdXRhYmx5KHVwZGF0ZXMsIHN0YXRlKSB7XHJcbiAgICAgICAgdmFyIG5ld0tleXMgPSB7fTtcclxuICAgICAgICB2YXIgdXBkYXRlc1BlckVudGl0eSA9IHt9O1xyXG4gICAgICAgIHVwZGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAodXBkYXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGUuaWQgaW4gc3RhdGUuZW50aXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogdXBkYXRlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXM6IF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHt9LCB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0gPyB1cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0uY2hhbmdlcyA6IG51bGwpLCB1cGRhdGUuY2hhbmdlcylcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB1cGRhdGVzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzUGVyRW50aXR5KTtcclxuICAgICAgICB2YXIgZGlkTXV0YXRlRW50aXRpZXMgPSB1cGRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgaWYgKGRpZE11dGF0ZUVudGl0aWVzKSB7XHJcbiAgICAgICAgICAgIHZhciBkaWRNdXRhdGVJZHMgPSB1cGRhdGVzLmZpbHRlcihmdW5jdGlvbiAodXBkYXRlKSB7IHJldHVybiB0YWtlTmV3S2V5KG5ld0tleXMsIHVwZGF0ZSwgc3RhdGUpOyB9KS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICBpZiAoZGlkTXV0YXRlSWRzKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS5pZHMgPSBPYmplY3Qua2V5cyhzdGF0ZS5lbnRpdGllcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdXBzZXJ0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHVwc2VydE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBfYyA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSksIGFkZGVkID0gX2NbMF0sIHVwZGF0ZWQgPSBfY1sxXTtcclxuICAgICAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XHJcbiAgICAgICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVtb3ZlQWxsOiBjcmVhdGVTaW5nbGVBcmd1bWVudFN0YXRlT3BlcmF0b3IocmVtb3ZlQWxsTXV0YWJseSksXHJcbiAgICAgICAgYWRkT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE9uZU11dGFibHkpLFxyXG4gICAgICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxyXG4gICAgICAgIHNldE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRPbmVNdXRhYmx5KSxcclxuICAgICAgICBzZXRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE1hbnlNdXRhYmx5KSxcclxuICAgICAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxyXG4gICAgICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxyXG4gICAgICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cHNlcnRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE1hbnlNdXRhYmx5KSxcclxuICAgICAgICByZW1vdmVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IocmVtb3ZlT25lTXV0YWJseSksXHJcbiAgICAgICAgcmVtb3ZlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihyZW1vdmVNYW55TXV0YWJseSlcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL3NvcnRlZF9zdGF0ZV9hZGFwdGVyLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydCkge1xyXG4gICAgdmFyIF9jID0gY3JlYXRlVW5zb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQpLCByZW1vdmVPbmUgPSBfYy5yZW1vdmVPbmUsIHJlbW92ZU1hbnkgPSBfYy5yZW1vdmVNYW55LCByZW1vdmVBbGwgPSBfYy5yZW1vdmVBbGw7XHJcbiAgICBmdW5jdGlvbiBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gYWRkTWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgdmFyIG1vZGVscyA9IG5ld0VudGl0aWVzLmZpbHRlcihmdW5jdGlvbiAobW9kZWwpIHsgcmV0dXJuICEoc2VsZWN0SWRWYWx1ZShtb2RlbCwgc2VsZWN0SWQpIGluIHN0YXRlLmVudGl0aWVzKTsgfSk7XHJcbiAgICAgICAgaWYgKG1vZGVscy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgbWVyZ2UobW9kZWxzLCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHNldE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xyXG4gICAgICAgIGlmIChuZXdFbnRpdGllcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgbWVyZ2UobmV3RW50aXRpZXMsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xyXG4gICAgICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XHJcbiAgICAgICAgc3RhdGUuZW50aXRpZXMgPSB7fTtcclxuICAgICAgICBzdGF0ZS5pZHMgPSBbXTtcclxuICAgICAgICBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGUsIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1hbnlNdXRhYmx5KFt1cGRhdGVdLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVzLCBzdGF0ZSkge1xyXG4gICAgICAgIHZhciBhcHBsaWVkVXBkYXRlcyA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgdXBkYXRlc18xID0gdXBkYXRlczsgX2kgPCB1cGRhdGVzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSB1cGRhdGVzXzFbX2ldO1xyXG4gICAgICAgICAgICB2YXIgZW50aXR5ID0gc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcclxuICAgICAgICAgICAgaWYgKCFlbnRpdHkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFwcGxpZWRVcGRhdGVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlbnRpdHksIHVwZGF0ZS5jaGFuZ2VzKTtcclxuICAgICAgICAgICAgdmFyIG5ld0lkID0gc2VsZWN0SWQoZW50aXR5KTtcclxuICAgICAgICAgICAgaWYgKHVwZGF0ZS5pZCAhPT0gbmV3SWQpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xyXG4gICAgICAgICAgICAgICAgc3RhdGUuZW50aXRpZXNbbmV3SWRdID0gZW50aXR5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcHBsaWVkVXBkYXRlcykge1xyXG4gICAgICAgICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdXBzZXJ0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB1cHNlcnRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcclxuICAgICAgICB2YXIgX2MgPSBzcGxpdEFkZGVkVXBkYXRlZEVudGl0aWVzKG5ld0VudGl0aWVzLCBzZWxlY3RJZCwgc3RhdGUpLCBhZGRlZCA9IF9jWzBdLCB1cGRhdGVkID0gX2NbMV07XHJcbiAgICAgICAgdXBkYXRlTWFueU11dGFibHkodXBkYXRlZCwgc3RhdGUpO1xyXG4gICAgICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhcmVBcnJheXNFcXVhbChhLCBiKSB7XHJcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGggJiYgaSA8IGIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFbaV0gPT09IGJbaV0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBtZXJnZShtb2RlbHMsIHN0YXRlKSB7XHJcbiAgICAgICAgbW9kZWxzLmZvckVhY2goZnVuY3Rpb24gKG1vZGVsKSB7XHJcbiAgICAgICAgICAgIHN0YXRlLmVudGl0aWVzW3NlbGVjdElkKG1vZGVsKV0gPSBtb2RlbDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXNvcnRFbnRpdGllcyhzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiByZXNvcnRFbnRpdGllcyhzdGF0ZSkge1xyXG4gICAgICAgIHZhciBhbGxFbnRpdGllcyA9IE9iamVjdC52YWx1ZXMoc3RhdGUuZW50aXRpZXMpO1xyXG4gICAgICAgIGFsbEVudGl0aWVzLnNvcnQoc29ydCk7XHJcbiAgICAgICAgdmFyIG5ld1NvcnRlZElkcyA9IGFsbEVudGl0aWVzLm1hcChzZWxlY3RJZCk7XHJcbiAgICAgICAgdmFyIGlkcyA9IHN0YXRlLmlkcztcclxuICAgICAgICBpZiAoIWFyZUFycmF5c0VxdWFsKGlkcywgbmV3U29ydGVkSWRzKSkge1xyXG4gICAgICAgICAgICBzdGF0ZS5pZHMgPSBuZXdTb3J0ZWRJZHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZW1vdmVPbmU6IHJlbW92ZU9uZSxcclxuICAgICAgICByZW1vdmVNYW55OiByZW1vdmVNYW55LFxyXG4gICAgICAgIHJlbW92ZUFsbDogcmVtb3ZlQWxsLFxyXG4gICAgICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcclxuICAgICAgICB1cGRhdGVPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlT25lTXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0T25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwc2VydE9uZU11dGFibHkpLFxyXG4gICAgICAgIHNldE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRPbmVNdXRhYmx5KSxcclxuICAgICAgICBzZXRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldE1hbnlNdXRhYmx5KSxcclxuICAgICAgICBzZXRBbGw6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0QWxsTXV0YWJseSksXHJcbiAgICAgICAgYWRkTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRNYW55TXV0YWJseSksXHJcbiAgICAgICAgdXBkYXRlTWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVNYW55TXV0YWJseSksXHJcbiAgICAgICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSlcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2VudGl0aWVzL2NyZWF0ZV9hZGFwdGVyLnRzXHJcbmZ1bmN0aW9uIGNyZWF0ZUVudGl0eUFkYXB0ZXIob3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIHZhciBfYyA9IF9fc3ByZWFkVmFsdWVzKHtcclxuICAgICAgICBzb3J0Q29tcGFyZXI6IGZhbHNlLFxyXG4gICAgICAgIHNlbGVjdElkOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHsgcmV0dXJuIGluc3RhbmNlLmlkOyB9XHJcbiAgICB9LCBvcHRpb25zKSwgc2VsZWN0SWQgPSBfYy5zZWxlY3RJZCwgc29ydENvbXBhcmVyID0gX2Muc29ydENvbXBhcmVyO1xyXG4gICAgdmFyIHN0YXRlRmFjdG9yeSA9IGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3RvcnkoKTtcclxuICAgIHZhciBzZWxlY3RvcnNGYWN0b3J5ID0gY3JlYXRlU2VsZWN0b3JzRmFjdG9yeSgpO1xyXG4gICAgdmFyIHN0YXRlQWRhcHRlciA9IHNvcnRDb21wYXJlciA/IGNyZWF0ZVNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCwgc29ydENvbXBhcmVyKSA6IGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKTtcclxuICAgIHJldHVybiBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7XHJcbiAgICAgICAgc2VsZWN0SWQ6IHNlbGVjdElkLFxyXG4gICAgICAgIHNvcnRDb21wYXJlcjogc29ydENvbXBhcmVyXHJcbiAgICB9LCBzdGF0ZUZhY3RvcnkpLCBzZWxlY3RvcnNGYWN0b3J5KSwgc3RhdGVBZGFwdGVyKTtcclxufVxyXG4vLyBzcmMvbmFub2lkLnRzXHJcbnZhciB1cmxBbHBoYWJldCA9IFwiTW9kdWxlU3ltYmhhc093blByLTAxMjM0NTY3ODlBQkNERUZHSE5SVmZnY3RpVXZ6X0txWVRKa0x4cFpYSWpRV1wiO1xyXG52YXIgbmFub2lkID0gZnVuY3Rpb24gKHNpemUpIHtcclxuICAgIGlmIChzaXplID09PSB2b2lkIDApIHsgc2l6ZSA9IDIxOyB9XHJcbiAgICB2YXIgaWQgPSBcIlwiO1xyXG4gICAgdmFyIGkgPSBzaXplO1xyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgIGlkICs9IHVybEFscGhhYmV0W01hdGgucmFuZG9tKCkgKiA2NCB8IDBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkO1xyXG59O1xyXG4vLyBzcmMvY3JlYXRlQXN5bmNUaHVuay50c1xyXG52YXIgY29tbW9uUHJvcGVydGllcyA9IFtcclxuICAgIFwibmFtZVwiLFxyXG4gICAgXCJtZXNzYWdlXCIsXHJcbiAgICBcInN0YWNrXCIsXHJcbiAgICBcImNvZGVcIlxyXG5dO1xyXG52YXIgUmVqZWN0V2l0aFZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gUmVqZWN0V2l0aFZhbHVlKHBheWxvYWQsIG1ldGEpIHtcclxuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVqZWN0V2l0aFZhbHVlO1xyXG59KCkpO1xyXG52YXIgRnVsZmlsbFdpdGhNZXRhID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gRnVsZmlsbFdpdGhNZXRhKHBheWxvYWQsIG1ldGEpIHtcclxuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xyXG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRnVsZmlsbFdpdGhNZXRhO1xyXG59KCkpO1xyXG52YXIgbWluaVNlcmlhbGl6ZUVycm9yID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgdmFyIHNpbXBsZUVycm9yID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBjb21tb25Qcm9wZXJ0aWVzXzEgPSBjb21tb25Qcm9wZXJ0aWVzOyBfaSA8IGNvbW1vblByb3BlcnRpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gY29tbW9uUHJvcGVydGllc18xW19pXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZVtwcm9wZXJ0eV0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIHNpbXBsZUVycm9yW3Byb3BlcnR5XSA9IHZhbHVlW3Byb3BlcnR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2ltcGxlRXJyb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBtZXNzYWdlOiBTdHJpbmcodmFsdWUpIH07XHJcbn07XHJcbnZhciBjcmVhdGVBc3luY1RodW5rID0gKGZ1bmN0aW9uICgpIHtcclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFzeW5jVGh1bmsyKHR5cGVQcmVmaXgsIHBheWxvYWRDcmVhdG9yLCBvcHRpb25zKSB7XHJcbiAgICAgICAgdmFyIGZ1bGZpbGxlZCA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvZnVsZmlsbGVkXCIsIGZ1bmN0aW9uIChwYXlsb2FkLCByZXF1ZXN0SWQsIGFyZywgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICAgICAgbWV0YTogX19zcHJlYWRQcm9wcyhfX3NwcmVhZFZhbHVlcyh7fSwgbWV0YSB8fCB7fSksIHtcclxuICAgICAgICAgICAgICAgIGFyZzogYXJnLFxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3RhdHVzOiBcImZ1bGZpbGxlZFwiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgICAgIHZhciBwZW5kaW5nID0gY3JlYXRlQWN0aW9uKHR5cGVQcmVmaXggKyBcIi9wZW5kaW5nXCIsIGZ1bmN0aW9uIChyZXF1ZXN0SWQsIGFyZywgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICAgICAgcGF5bG9hZDogdm9pZCAwLFxyXG4gICAgICAgICAgICBtZXRhOiBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBtZXRhIHx8IHt9KSwge1xyXG4gICAgICAgICAgICAgICAgYXJnOiBhcmcsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RTdGF0dXM6IFwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgICAgIHZhciByZWplY3RlZCA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvcmVqZWN0ZWRcIiwgZnVuY3Rpb24gKGVycm9yLCByZXF1ZXN0SWQsIGFyZywgcGF5bG9hZCwgbWV0YSkgeyByZXR1cm4gKHtcclxuICAgICAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICAgICAgZXJyb3I6IChvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplRXJyb3IgfHwgbWluaVNlcmlhbGl6ZUVycm9yKShlcnJvciB8fCBcIlJlamVjdGVkXCIpLFxyXG4gICAgICAgICAgICBtZXRhOiBfX3NwcmVhZFByb3BzKF9fc3ByZWFkVmFsdWVzKHt9LCBtZXRhIHx8IHt9KSwge1xyXG4gICAgICAgICAgICAgICAgYXJnOiBhcmcsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgIHJlamVjdGVkV2l0aFZhbHVlOiAhIXBheWxvYWQsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0U3RhdHVzOiBcInJlamVjdGVkXCIsXHJcbiAgICAgICAgICAgICAgICBhYm9ydGVkOiAoZXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGVycm9yLm5hbWUpID09PSBcIkFib3J0RXJyb3JcIixcclxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogKGVycm9yID09IG51bGwgPyB2b2lkIDAgOiBlcnJvci5uYW1lKSA9PT0gXCJDb25kaXRpb25FcnJvclwiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7IH0pO1xyXG4gICAgICAgIHZhciBkaXNwbGF5ZWRXYXJuaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIEFDID0gdHlwZW9mIEFib3J0Q29udHJvbGxlciAhPT0gXCJ1bmRlZmluZWRcIiA/IEFib3J0Q29udHJvbGxlciA6IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gY2xhc3NfMSgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2lnbmFsID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25hYm9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uOiB2b2lkIDAsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dJZkFib3J0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsYXNzXzEucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGlzcGxheWVkV2FybmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWRXYXJuaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiVGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBpbXBsZW1lbnQgQWJvcnRDb250cm9sbGVyLiBcXG5JZiB5b3Ugd2FudCB0byB1c2UgdGhlIEFib3J0Q29udHJvbGxlciB0byByZWFjdCB0byBgYWJvcnRgIGV2ZW50cywgcGxlYXNlIGNvbnNpZGVyIGltcG9ydGluZyBhIHBvbHlmaWxsIGxpa2UgJ2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC9kaXN0L2Fib3J0Y29udHJvbGxlci1wb2x5ZmlsbC1vbmx5Jy5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gY2xhc3NfMTtcclxuICAgICAgICB9KCkpO1xyXG4gICAgICAgIGZ1bmN0aW9uIGFjdGlvbkNyZWF0b3IoYXJnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIGdldFN0YXRlLCBleHRyYSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlcXVlc3RJZCA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmlkR2VuZXJhdG9yKSA/IG9wdGlvbnMuaWRHZW5lcmF0b3IoYXJnKSA6IG5hbm9pZCgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFib3J0Q29udHJvbGxlciA9IG5ldyBBQygpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFib3J0UmVhc29uO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFib3J0KHJlYXNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0UmVhc29uID0gcmVhc29uO1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHByb21pc2UyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2FzeW5jKHRoaXMsIG51bGwsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgZmluYWxBY3Rpb24sIGNvbmRpdGlvblJlc3VsdCwgYWJvcnRlZFByb21pc2UsIGVycl8xLCBza2lwRGlzcGF0Y2g7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMCwgNCwgLCA1XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IChfYSA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuY29uZGl0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCBhcmcsIHsgZ2V0U3RhdGU6IGdldFN0YXRlLCBleHRyYTogZXh0cmEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNUaGVuYWJsZShjb25kaXRpb25SZXN1bHQpKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgY29uZGl0aW9uUmVzdWx0XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvblJlc3VsdCA9PT0gZmFsc2UgfHwgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb25kaXRpb25FcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiQWJvcnRlZCBkdWUgdG8gY29uZGl0aW9uIGNhbGxiYWNrIHJldHVybmluZyBmYWxzZS5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRlZFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoXywgcmVqZWN0KSB7IHJldHVybiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJBYm9ydEVycm9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhYm9ydFJlYXNvbiB8fCBcIkFib3J0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsgfSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChwZW5kaW5nKHJlcXVlc3RJZCwgYXJnLCAoX2IgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldFBlbmRpbmdNZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChvcHRpb25zLCB7IHJlcXVlc3RJZDogcmVxdWVzdElkLCBhcmc6IGFyZyB9LCB7IGdldFN0YXRlOiBnZXRTdGF0ZSwgZXh0cmE6IGV4dHJhIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UucmFjZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRlZFByb21pc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHBheWxvYWRDcmVhdG9yKGFyZywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IGV4dHJhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydDogYWJvcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdFdpdGhWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBtZXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlamVjdFdpdGhWYWx1ZSh2YWx1ZSwgbWV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGZpbGxXaXRoVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgbWV0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdWxmaWxsV2l0aE1ldGEodmFsdWUsIG1ldGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVqZWN0V2l0aFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEZ1bGZpbGxXaXRoTWV0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGZpbGxlZChyZXN1bHQucGF5bG9hZCwgcmVxdWVzdElkLCBhcmcsIHJlc3VsdC5tZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkKHJlc3VsdCwgcmVxdWVzdElkLCBhcmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEFjdGlvbiA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgNV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJfMSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBlcnJfMSBpbnN0YW5jZW9mIFJlamVjdFdpdGhWYWx1ZSA/IHJlamVjdGVkKG51bGwsIHJlcXVlc3RJZCwgYXJnLCBlcnJfMS5wYXlsb2FkLCBlcnJfMS5tZXRhKSA6IHJlamVjdGVkKGVycl8xLCByZXF1ZXN0SWQsIGFyZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcERpc3BhdGNoID0gb3B0aW9ucyAmJiAhb3B0aW9ucy5kaXNwYXRjaENvbmRpdGlvblJlamVjdGlvbiAmJiByZWplY3RlZC5tYXRjaChmaW5hbEFjdGlvbikgJiYgZmluYWxBY3Rpb24ubWV0YS5jb25kaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcERpc3BhdGNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChmaW5hbEFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGZpbmFsQWN0aW9uXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9taXNlMiwge1xyXG4gICAgICAgICAgICAgICAgICAgIGFib3J0OiBhYm9ydCxcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcclxuICAgICAgICAgICAgICAgICAgICBhcmc6IGFyZyxcclxuICAgICAgICAgICAgICAgICAgICB1bndyYXA6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UyLnRoZW4odW53cmFwUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWN0aW9uQ3JlYXRvciwge1xyXG4gICAgICAgICAgICBwZW5kaW5nOiBwZW5kaW5nLFxyXG4gICAgICAgICAgICByZWplY3RlZDogcmVqZWN0ZWQsXHJcbiAgICAgICAgICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLFxyXG4gICAgICAgICAgICB0eXBlUHJlZml4OiB0eXBlUHJlZml4XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVBc3luY1RodW5rMi53aXRoVHlwZXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVBc3luY1RodW5rMjsgfTtcclxuICAgIHJldHVybiBjcmVhdGVBc3luY1RodW5rMjtcclxufSkoKTtcclxuZnVuY3Rpb24gdW53cmFwUmVzdWx0KGFjdGlvbikge1xyXG4gICAgaWYgKGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlKSB7XHJcbiAgICAgICAgdGhyb3cgYWN0aW9uLnBheWxvYWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoYWN0aW9uLmVycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgYWN0aW9uLmVycm9yO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjdGlvbi5wYXlsb2FkO1xyXG59XHJcbmZ1bmN0aW9uIGlzVGhlbmFibGUodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG4vLyBzcmMvbWF0Y2hlcnMudHNcclxudmFyIG1hdGNoZXMgPSBmdW5jdGlvbiAobWF0Y2hlciwgYWN0aW9uKSB7XHJcbiAgICBpZiAoaGFzTWF0Y2hGdW5jdGlvbihtYXRjaGVyKSkge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVyLm1hdGNoKGFjdGlvbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiBpc0FueU9mKCkge1xyXG4gICAgdmFyIG1hdGNoZXJzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIG1hdGNoZXJzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVycy5zb21lKGZ1bmN0aW9uIChtYXRjaGVyKSB7IHJldHVybiBtYXRjaGVzKG1hdGNoZXIsIGFjdGlvbik7IH0pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc0FsbE9mKCkge1xyXG4gICAgdmFyIG1hdGNoZXJzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIG1hdGNoZXJzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiBtYXRjaGVycy5ldmVyeShmdW5jdGlvbiAobWF0Y2hlcikgeyByZXR1cm4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pOyB9KTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCB2YWxpZFN0YXR1cykge1xyXG4gICAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi5tZXRhKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIHZhciBoYXNWYWxpZFJlcXVlc3RJZCA9IHR5cGVvZiBhY3Rpb24ubWV0YS5yZXF1ZXN0SWQgPT09IFwic3RyaW5nXCI7XHJcbiAgICB2YXIgaGFzVmFsaWRSZXF1ZXN0U3RhdHVzID0gdmFsaWRTdGF0dXMuaW5kZXhPZihhY3Rpb24ubWV0YS5yZXF1ZXN0U3RhdHVzKSA+IC0xO1xyXG4gICAgcmV0dXJuIGhhc1ZhbGlkUmVxdWVzdElkICYmIGhhc1ZhbGlkUmVxdWVzdFN0YXR1cztcclxufVxyXG5mdW5jdGlvbiBpc0FzeW5jVGh1bmtBcnJheShhKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGFbMF0gPT09IFwiZnVuY3Rpb25cIiAmJiBcInBlbmRpbmdcIiBpbiBhWzBdICYmIFwiZnVsZmlsbGVkXCIgaW4gYVswXSAmJiBcInJlamVjdGVkXCIgaW4gYVswXTtcclxufVxyXG5mdW5jdGlvbiBpc1BlbmRpbmcoKSB7XHJcbiAgICB2YXIgYXN5bmNUaHVua3MgPSBbXTtcclxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgYXN5bmNUaHVua3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikgeyByZXR1cm4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJwZW5kaW5nXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUGVuZGluZygpKGFzeW5jVGh1bmtzWzBdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZXJzID0gYXN5bmNUaHVua3MubWFwKGZ1bmN0aW9uIChhc3luY1RodW5rKSB7IHJldHVybiBhc3luY1RodW5rLnBlbmRpbmc7IH0pO1xyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuZnVuY3Rpb24gaXNSZWplY3RlZCgpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInJlamVjdGVkXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUmVqZWN0ZWQoKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IGFzeW5jVGh1bmtzLm1hcChmdW5jdGlvbiAoYXN5bmNUaHVuaykgeyByZXR1cm4gYXN5bmNUaHVuay5yZWplY3RlZDsgfSk7XHJcbiAgICAgICAgdmFyIGNvbWJpbmVkTWF0Y2hlciA9IGlzQW55T2YuYXBwbHkodm9pZCAwLCBtYXRjaGVycyk7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICB2YXIgaGFzRmxhZyA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICByZXR1cm4gYWN0aW9uICYmIGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLnJlamVjdGVkV2l0aFZhbHVlO1xyXG4gICAgfTtcclxuICAgIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbGxPZihpc1JlamVjdGVkLmFwcGx5KHZvaWQgMCwgYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVkTWF0Y2hlcihhY3Rpb24pO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc1JlamVjdGVkV2l0aFZhbHVlKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbGxPZihpc1JlamVjdGVkLmFwcGx5KHZvaWQgMCwgYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzRnVsZmlsbGVkKCkge1xyXG4gICAgdmFyIGFzeW5jVGh1bmtzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFzeW5jVGh1bmtzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICB9XHJcbiAgICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHsgcmV0dXJuIGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wiZnVsZmlsbGVkXCJdKTsgfTtcclxuICAgIH1cclxuICAgIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzRnVsZmlsbGVkKCkoYXN5bmNUaHVua3NbMF0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhY3Rpb24pIHtcclxuICAgICAgICB2YXIgbWF0Y2hlcnMgPSBhc3luY1RodW5rcy5tYXAoZnVuY3Rpb24gKGFzeW5jVGh1bmspIHsgcmV0dXJuIGFzeW5jVGh1bmsuZnVsZmlsbGVkOyB9KTtcclxuICAgICAgICB2YXIgY29tYmluZWRNYXRjaGVyID0gaXNBbnlPZi5hcHBseSh2b2lkIDAsIG1hdGNoZXJzKTtcclxuICAgICAgICByZXR1cm4gY29tYmluZWRNYXRjaGVyKGFjdGlvbik7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbigpIHtcclxuICAgIHZhciBhc3luY1RodW5rcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICBhc3luY1RodW5rc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xyXG4gICAgfVxyXG4gICAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0aW9uKSB7IHJldHVybiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInBlbmRpbmdcIiwgXCJmdWxmaWxsZWRcIiwgXCJyZWplY3RlZFwiXSk7IH07XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xyXG4gICAgICAgIHJldHVybiBpc0FzeW5jVGh1bmtBY3Rpb24oKShhc3luY1RodW5rc1swXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIHZhciBtYXRjaGVycyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgYXN5bmNUaHVua3NfMSA9IGFzeW5jVGh1bmtzOyBfaSA8IGFzeW5jVGh1bmtzXzEubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBhc3luY1RodW5rID0gYXN5bmNUaHVua3NfMVtfaV07XHJcbiAgICAgICAgICAgIG1hdGNoZXJzLnB1c2goYXN5bmNUaHVuay5wZW5kaW5nLCBhc3luY1RodW5rLnJlamVjdGVkLCBhc3luY1RodW5rLmZ1bGZpbGxlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb21iaW5lZE1hdGNoZXIgPSBpc0FueU9mLmFwcGx5KHZvaWQgMCwgbWF0Y2hlcnMpO1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lZE1hdGNoZXIoYWN0aW9uKTtcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS91dGlscy50c1xyXG52YXIgYXNzZXJ0RnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYywgZXhwZWN0ZWQpIHtcclxuICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihleHBlY3RlZCArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xyXG4gICAgfVxyXG59O1xyXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHtcclxufTtcclxudmFyIGNhdGNoUmVqZWN0aW9uID0gZnVuY3Rpb24gKHByb21pc2UyLCBvbkVycm9yKSB7XHJcbiAgICBpZiAob25FcnJvciA9PT0gdm9pZCAwKSB7IG9uRXJyb3IgPSBub29wOyB9XHJcbiAgICBwcm9taXNlMi5jYXRjaChvbkVycm9yKTtcclxuICAgIHJldHVybiBwcm9taXNlMjtcclxufTtcclxudmFyIGFkZEFib3J0U2lnbmFsTGlzdGVuZXIgPSBmdW5jdGlvbiAoYWJvcnRTaWduYWwsIGNhbGxiYWNrKSB7XHJcbiAgICBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgY2FsbGJhY2ssIHsgb25jZTogdHJ1ZSB9KTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgY2FsbGJhY2spOyB9O1xyXG59O1xyXG52YXIgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbiA9IGZ1bmN0aW9uIChhYm9ydENvbnRyb2xsZXIsIHJlYXNvbikge1xyXG4gICAgdmFyIHNpZ25hbCA9IGFib3J0Q29udHJvbGxlci5zaWduYWw7XHJcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIShcInJlYXNvblwiIGluIHNpZ25hbCkpIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2lnbmFsLCBcInJlYXNvblwiLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiByZWFzb24sXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIDtcclxuICAgIGFib3J0Q29udHJvbGxlci5hYm9ydChyZWFzb24pO1xyXG59O1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2V4Y2VwdGlvbnMudHNcclxudmFyIHRhc2sgPSBcInRhc2tcIjtcclxudmFyIGxpc3RlbmVyID0gXCJsaXN0ZW5lclwiO1xyXG52YXIgY29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcclxudmFyIGNhbmNlbGxlZCA9IFwiY2FuY2VsbGVkXCI7XHJcbnZhciB0YXNrQ2FuY2VsbGVkID0gXCJ0YXNrLVwiICsgY2FuY2VsbGVkO1xyXG52YXIgdGFza0NvbXBsZXRlZCA9IFwidGFzay1cIiArIGNvbXBsZXRlZDtcclxudmFyIGxpc3RlbmVyQ2FuY2VsbGVkID0gbGlzdGVuZXIgKyBcIi1cIiArIGNhbmNlbGxlZDtcclxudmFyIGxpc3RlbmVyQ29tcGxldGVkID0gbGlzdGVuZXIgKyBcIi1cIiArIGNvbXBsZXRlZDtcclxudmFyIFRhc2tBYm9ydEVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xyXG4gICAgZnVuY3Rpb24gVGFza0Fib3J0RXJyb3IoY29kZSkge1xyXG4gICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJUYXNrQWJvcnRFcnJvclwiO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IHRhc2sgKyBcIiBcIiArIGNhbmNlbGxlZCArIFwiIChyZWFzb246IFwiICsgY29kZSArIFwiKVwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFRhc2tBYm9ydEVycm9yO1xyXG59KCkpO1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL3Rhc2sudHNcclxudmFyIHZhbGlkYXRlQWN0aXZlID0gZnVuY3Rpb24gKHNpZ25hbCkge1xyXG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pO1xyXG4gICAgfVxyXG59O1xyXG5mdW5jdGlvbiByYWNlV2l0aFNpZ25hbChzaWduYWwsIHByb21pc2UyKSB7XHJcbiAgICB2YXIgY2xlYW51cCA9IG5vb3A7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIHZhciBub3RpZnlSZWplY3Rpb24gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZWplY3QobmV3IFRhc2tBYm9ydEVycm9yKHNpZ25hbC5yZWFzb24pKTsgfTtcclxuICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgbm90aWZ5UmVqZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xlYW51cCA9IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIoc2lnbmFsLCBub3RpZnlSZWplY3Rpb24pO1xyXG4gICAgICAgIHByb21pc2UyLmZpbmFsbHkoZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xlYW51cCgpOyB9KS50aGVuKHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICB9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjbGVhbnVwID0gbm9vcDtcclxuICAgIH0pO1xyXG59XHJcbnZhciBydW5UYXNrID0gZnVuY3Rpb24gKHRhc2syLCBjbGVhblVwKSB7IHJldHVybiBfX2FzeW5jKHZvaWQgMCwgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHZhbHVlLCBlcnJvcl8xO1xyXG4gICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFswLCAzLCA0LCA1XSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLnJlc29sdmUoKV07XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRhc2syKCldO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogXCJva1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgZXJyb3JfMSA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3JfMSBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yID8gXCJjYW5jZWxsZWRcIiA6IFwicmVqZWN0ZWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzFcclxuICAgICAgICAgICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgY2xlYW5VcCA9PSBudWxsID8gdm9pZCAwIDogY2xlYW5VcCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzIgLypyZXR1cm4qL107XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pOyB9O1xyXG52YXIgY3JlYXRlUGF1c2UgPSBmdW5jdGlvbiAoc2lnbmFsKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHByb21pc2UyKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhdGNoUmVqZWN0aW9uKHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgcHJvbWlzZTIpLnRoZW4oZnVuY3Rpb24gKG91dHB1dCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgIH0pKTtcclxuICAgIH07XHJcbn07XHJcbnZhciBjcmVhdGVEZWxheSA9IGZ1bmN0aW9uIChzaWduYWwpIHtcclxuICAgIHZhciBwYXVzZSA9IGNyZWF0ZVBhdXNlKHNpZ25hbCk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRpbWVvdXRNcykge1xyXG4gICAgICAgIHJldHVybiBwYXVzZShuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXR1cm4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpOyB9KSk7XHJcbiAgICB9O1xyXG59O1xyXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2luZGV4LnRzXHJcbnZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xyXG52YXIgSU5URVJOQUxfTklMX1RPS0VOID0ge307XHJcbnZhciBhbG0gPSBcImxpc3RlbmVyTWlkZGxld2FyZVwiO1xyXG52YXIgY3JlYXRlRm9yayA9IGZ1bmN0aW9uIChwYXJlbnRBYm9ydFNpZ25hbCwgcGFyZW50QmxvY2tpbmdQcm9taXNlcykge1xyXG4gICAgdmFyIGxpbmtDb250cm9sbGVycyA9IGZ1bmN0aW9uIChjb250cm9sbGVyKSB7IHJldHVybiBhZGRBYm9ydFNpZ25hbExpc3RlbmVyKHBhcmVudEFib3J0U2lnbmFsLCBmdW5jdGlvbiAoKSB7IHJldHVybiBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIHBhcmVudEFib3J0U2lnbmFsLnJlYXNvbik7IH0pOyB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXNrRXhlY3V0b3IsIG9wdHMpIHtcclxuICAgICAgICBhc3NlcnRGdW5jdGlvbih0YXNrRXhlY3V0b3IsIFwidGFza0V4ZWN1dG9yXCIpO1xyXG4gICAgICAgIHZhciBjaGlsZEFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICBsaW5rQ29udHJvbGxlcnMoY2hpbGRBYm9ydENvbnRyb2xsZXIpO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBydW5UYXNrKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9fYXN5bmModm9pZCAwLCBudWxsLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQyO1xyXG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9jKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShwYXJlbnRBYm9ydFNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRhc2tFeGVjdXRvcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2U6IGNyZWF0ZVBhdXNlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBjaGlsZEFib3J0Q29udHJvbGxlci5zaWduYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDIgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCByZXN1bHQyXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY2hpbGRBYm9ydENvbnRyb2xsZXIsIHRhc2tDb21wbGV0ZWQpOyB9KTtcclxuICAgICAgICBpZiAob3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5hdXRvSm9pbikge1xyXG4gICAgICAgICAgICBwYXJlbnRCbG9ja2luZ1Byb21pc2VzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcmVzdWx0OiBjcmVhdGVQYXVzZShwYXJlbnRBYm9ydFNpZ25hbCkocmVzdWx0KSxcclxuICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ2FuY2VsbGVkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG59O1xyXG52YXIgY3JlYXRlVGFrZVBhdHRlcm4gPSBmdW5jdGlvbiAoc3RhcnRMaXN0ZW5pbmcsIHNpZ25hbCkge1xyXG4gICAgdmFyIHRha2UgPSBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiBfX2FzeW5jKHZvaWQgMCwgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB1bnN1YnNjcmliZSwgdHVwbGVQcm9taXNlLCBwcm9taXNlcywgb3V0cHV0O1xyXG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2MpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChfYy5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKHNpZ25hbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB0dXBsZVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdG9wTGlzdGVuaW5nID0gc3RhcnRMaXN0ZW5pbmcoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiBwcmVkaWNhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3Q6IGZ1bmN0aW9uIChhY3Rpb24sIGxpc3RlbmVyQXBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJBcGkudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRTdGF0ZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckFwaS5nZXRPcmlnaW5hbFN0YXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcExpc3RlbmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlUHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJldHVybiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQsIG51bGwpOyB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICBfYy50cnlzLnB1c2goWzEsICwgMywgNF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgUHJvbWlzZS5yYWNlKHByb21pc2VzKSldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBvdXRwdXRdO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3IC8qZW5kZmluYWxseSovXTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAocHJlZGljYXRlLCB0aW1lb3V0KSB7IHJldHVybiBjYXRjaFJlamVjdGlvbih0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkpOyB9O1xyXG59O1xyXG52YXIgZ2V0TGlzdGVuZXJFbnRyeVByb3BzRnJvbSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICB2YXIgdHlwZSA9IG9wdGlvbnMudHlwZSwgYWN0aW9uQ3JlYXRvciA9IG9wdGlvbnMuYWN0aW9uQ3JlYXRvciwgbWF0Y2hlciA9IG9wdGlvbnMubWF0Y2hlciwgcHJlZGljYXRlID0gb3B0aW9ucy5wcmVkaWNhdGUsIGVmZmVjdCA9IG9wdGlvbnMuZWZmZWN0O1xyXG4gICAgaWYgKHR5cGUpIHtcclxuICAgICAgICBwcmVkaWNhdGUgPSBjcmVhdGVBY3Rpb24odHlwZSkubWF0Y2g7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChhY3Rpb25DcmVhdG9yKSB7XHJcbiAgICAgICAgdHlwZSA9IGFjdGlvbkNyZWF0b3IudHlwZTtcclxuICAgICAgICBwcmVkaWNhdGUgPSBhY3Rpb25DcmVhdG9yLm1hdGNoO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobWF0Y2hlcikge1xyXG4gICAgICAgIHByZWRpY2F0ZSA9IG1hdGNoZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcmVkaWNhdGUpIHtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNyZWF0aW5nIG9yIHJlbW92aW5nIGEgbGlzdGVuZXIgcmVxdWlyZXMgb25lIG9mIHRoZSBrbm93biBmaWVsZHMgZm9yIG1hdGNoaW5nIGFuIGFjdGlvblwiKTtcclxuICAgIH1cclxuICAgIGFzc2VydEZ1bmN0aW9uKGVmZmVjdCwgXCJvcHRpb25zLmxpc3RlbmVyXCIpO1xyXG4gICAgcmV0dXJuIHsgcHJlZGljYXRlOiBwcmVkaWNhdGUsIHR5cGU6IHR5cGUsIGVmZmVjdDogZWZmZWN0IH07XHJcbn07XHJcbnZhciBjcmVhdGVMaXN0ZW5lckVudHJ5ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgIHZhciBfYyA9IGdldExpc3RlbmVyRW50cnlQcm9wc0Zyb20ob3B0aW9ucyksIHR5cGUgPSBfYy50eXBlLCBwcmVkaWNhdGUgPSBfYy5wcmVkaWNhdGUsIGVmZmVjdCA9IF9jLmVmZmVjdDtcclxuICAgIHZhciBpZCA9IG5hbm9pZCgpO1xyXG4gICAgdmFyIGVudHJ5ID0ge1xyXG4gICAgICAgIGlkOiBpZCxcclxuICAgICAgICBlZmZlY3Q6IGVmZmVjdCxcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIHByZWRpY2F0ZTogcHJlZGljYXRlLFxyXG4gICAgICAgIHBlbmRpbmc6IG5ldyBTZXQoKSxcclxuICAgICAgICB1bnN1YnNjcmliZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1YnNjcmliZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBlbnRyeTtcclxufTtcclxudmFyIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgZW50cnkucGVuZGluZy5mb3JFYWNoKGZ1bmN0aW9uIChjb250cm9sbGVyKSB7XHJcbiAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZCk7XHJcbiAgICB9KTtcclxufTtcclxudmFyIGNyZWF0ZUNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gZnVuY3Rpb24gKGxpc3RlbmVyTWFwKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxpc3RlbmVyTWFwLmZvckVhY2goY2FuY2VsQWN0aXZlTGlzdGVuZXJzKTtcclxuICAgICAgICBsaXN0ZW5lck1hcC5jbGVhcigpO1xyXG4gICAgfTtcclxufTtcclxudmFyIHNhZmVseU5vdGlmeUVycm9yID0gZnVuY3Rpb24gKGVycm9ySGFuZGxlciwgZXJyb3JUb05vdGlmeSwgZXJyb3JJbmZvKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGVycm9ySGFuZGxlcihlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9ySGFuZGxlckVycm9yKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVycm9ySGFuZGxlckVycm9yO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgfVxyXG59O1xyXG52YXIgYWRkTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvYWRkXCIpO1xyXG52YXIgY2xlYXJBbGxMaXN0ZW5lcnMgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvcmVtb3ZlQWxsXCIpO1xyXG52YXIgcmVtb3ZlTGlzdGVuZXIgPSBjcmVhdGVBY3Rpb24oYWxtICsgXCIvcmVtb3ZlXCIpO1xyXG52YXIgZGVmYXVsdEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBhcmdzID0gW107XHJcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgX19zcHJlYWRBcnJheShbYWxtICsgXCIvZXJyb3JcIl0sIGFyZ3MpKTtcclxufTtcclxuZnVuY3Rpb24gY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlKG1pZGRsZXdhcmVPcHRpb25zKSB7XHJcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgaWYgKG1pZGRsZXdhcmVPcHRpb25zID09PSB2b2lkIDApIHsgbWlkZGxld2FyZU9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIGxpc3RlbmVyTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdmFyIGV4dHJhID0gbWlkZGxld2FyZU9wdGlvbnMuZXh0cmEsIF9jID0gbWlkZGxld2FyZU9wdGlvbnMub25FcnJvciwgb25FcnJvciA9IF9jID09PSB2b2lkIDAgPyBkZWZhdWx0RXJyb3JIYW5kbGVyIDogX2M7XHJcbiAgICBhc3NlcnRGdW5jdGlvbihvbkVycm9yLCBcIm9uRXJyb3JcIik7XHJcbiAgICB2YXIgaW5zZXJ0RW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgICAgICBlbnRyeS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxpc3RlbmVyTWFwLmRlbGV0ZShlbnRyeS5pZCk7IH07XHJcbiAgICAgICAgbGlzdGVuZXJNYXAuc2V0KGVudHJ5LmlkLCBlbnRyeSk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYW5jZWxPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIGlmIChjYW5jZWxPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBjYW5jZWxPcHRpb25zLmNhbmNlbEFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzKGVudHJ5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgdmFyIGZpbmRMaXN0ZW5lckVudHJ5ID0gZnVuY3Rpb24gKGNvbXBhcmF0b3IpIHtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9jID0gQXJyYXkuZnJvbShsaXN0ZW5lck1hcC52YWx1ZXMoKSk7IF9pIDwgX2MubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IF9jW19pXTtcclxuICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3IoZW50cnkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcclxuICAgIH07XHJcbiAgICB2YXIgc3RhcnRMaXN0ZW5pbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IGZpbmRMaXN0ZW5lckVudHJ5KGZ1bmN0aW9uIChleGlzdGluZ0VudHJ5KSB7IHJldHVybiBleGlzdGluZ0VudHJ5LmVmZmVjdCA9PT0gb3B0aW9ucy5lZmZlY3Q7IH0pO1xyXG4gICAgICAgIGlmICghZW50cnkpIHtcclxuICAgICAgICAgICAgZW50cnkgPSBjcmVhdGVMaXN0ZW5lckVudHJ5KG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgfTtcclxuICAgIHZhciBzdG9wTGlzdGVuaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgX2MgPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpLCB0eXBlID0gX2MudHlwZSwgZWZmZWN0ID0gX2MuZWZmZWN0LCBwcmVkaWNhdGUgPSBfYy5wcmVkaWNhdGU7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gZmluZExpc3RlbmVyRW50cnkoZnVuY3Rpb24gKGVudHJ5Mikge1xyXG4gICAgICAgICAgICB2YXIgbWF0Y2hQcmVkaWNhdGVPclR5cGUgPSB0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiA/IGVudHJ5Mi50eXBlID09PSB0eXBlIDogZW50cnkyLnByZWRpY2F0ZSA9PT0gcHJlZGljYXRlO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hQcmVkaWNhdGVPclR5cGUgJiYgZW50cnkyLmVmZmVjdCA9PT0gZWZmZWN0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChlbnRyeSkge1xyXG4gICAgICAgICAgICBlbnRyeS51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jYW5jZWxBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICEhZW50cnk7XHJcbiAgICB9O1xyXG4gICAgdmFyIG5vdGlmeUxpc3RlbmVyID0gZnVuY3Rpb24gKGVudHJ5LCBhY3Rpb24sIGFwaSwgZ2V0T3JpZ2luYWxTdGF0ZSkgeyByZXR1cm4gX19hc3luYyhfdGhpcywgbnVsbCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBpbnRlcm5hbFRhc2tDb250cm9sbGVyLCB0YWtlLCBhdXRvSm9pblByb21pc2VzLCBsaXN0ZW5lckVycm9yXzE7XHJcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKF9jLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxUYXNrQ29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB0YWtlID0gY3JlYXRlVGFrZVBhdHRlcm4oc3RhcnRMaXN0ZW5pbmcsIGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKTtcclxuICAgICAgICAgICAgICAgICAgICBhdXRvSm9pblByb21pc2VzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgX2MubGFiZWwgPSAxO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnRyeXMucHVzaChbMSwgMywgNCwgNl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LnBlbmRpbmcuYWRkKGludGVybmFsVGFza0NvbnRyb2xsZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIFByb21pc2UucmVzb2x2ZShlbnRyeS5lZmZlY3QoYWN0aW9uLCBhc3NpZ24oe30sIGFwaSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3JpZ2luYWxTdGF0ZTogZ2V0T3JpZ2luYWxTdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogZnVuY3Rpb24gKHByZWRpY2F0ZSwgdGltZW91dCkgeyByZXR1cm4gdGFrZShwcmVkaWNhdGUsIHRpbWVvdXQpLnRoZW4oQm9vbGVhbik7IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlOiB0YWtlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOiBjcmVhdGVQYXVzZShpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYTogZXh0cmEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yazogY3JlYXRlRm9yayhpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCwgYXV0b0pvaW5Qcm9taXNlcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZTogZW50cnkudW5zdWJzY3JpYmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lck1hcC5zZXQoZW50cnkuaWQsIGVudHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBY3RpdmVMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmZvckVhY2goZnVuY3Rpb24gKGNvbnRyb2xsZXIsIF8sIHNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlciAhPT0gaW50ZXJuYWxUYXNrQ29udHJvbGxlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihjb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGNvbnRyb2xsZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA2XTtcclxuICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lckVycm9yXzEgPSBfYy5zZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEobGlzdGVuZXJFcnJvcl8xIGluc3RhbmNlb2YgVGFza0Fib3J0RXJyb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVseU5vdGlmeUVycm9yKG9uRXJyb3IsIGxpc3RlbmVyRXJyb3JfMSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VkQnk6IFwiZWZmZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDZdO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzQgLyp5aWVsZCovLCBQcm9taXNlLmFsbFNldHRsZWQoYXV0b0pvaW5Qcm9taXNlcyldO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgICAgIF9jLnNlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGludGVybmFsVGFza0NvbnRyb2xsZXIsIGxpc3RlbmVyQ29tcGxldGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmRlbGV0ZShpbnRlcm5hbFRhc2tDb250cm9sbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzcgLyplbmRmaW5hbGx5Ki9dO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzIgLypyZXR1cm4qL107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pOyB9O1xyXG4gICAgdmFyIGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlID0gY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUobGlzdGVuZXJNYXApO1xyXG4gICAgdmFyIG1pZGRsZXdhcmUgPSBmdW5jdGlvbiAoYXBpKSB7IHJldHVybiBmdW5jdGlvbiAobmV4dCkgeyByZXR1cm4gZnVuY3Rpb24gKGFjdGlvbikge1xyXG4gICAgICAgIGlmICghaXNBY3Rpb24oYWN0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWRkTGlzdGVuZXIubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRMaXN0ZW5pbmcoYWN0aW9uLnBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2xlYXJBbGxMaXN0ZW5lcnMubWF0Y2goYWN0aW9uKSkge1xyXG4gICAgICAgICAgICBjbGVhckxpc3RlbmVyTWlkZGxld2FyZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZW1vdmVMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdG9wTGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsU3RhdGUgPSBhcGkuZ2V0U3RhdGUoKTtcclxuICAgICAgICB2YXIgZ2V0T3JpZ2luYWxTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsU3RhdGUgPT09IElOVEVSTkFMX05JTF9UT0tFTikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFsbSArIFwiOiBnZXRPcmlnaW5hbFN0YXRlIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFN0YXRlO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBuZXh0KGFjdGlvbik7XHJcbiAgICAgICAgICAgIGlmIChsaXN0ZW5lck1hcC5zaXplID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGFwaS5nZXRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyRW50cmllcyA9IEFycmF5LmZyb20obGlzdGVuZXJNYXAudmFsdWVzKCkpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBsaXN0ZW5lckVudHJpZXNfMSA9IGxpc3RlbmVyRW50cmllczsgX2kgPCBsaXN0ZW5lckVudHJpZXNfMS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBsaXN0ZW5lckVudHJpZXNfMVtfaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bkxpc3RlbmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBlbnRyeS5wcmVkaWNhdGUoYWN0aW9uLCBjdXJyZW50U3RhdGUsIG9yaWdpbmFsU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAocHJlZGljYXRlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZWx5Tm90aWZ5RXJyb3Iob25FcnJvciwgcHJlZGljYXRlRXJyb3IsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZEJ5OiBcInByZWRpY2F0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bkxpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcihlbnRyeSwgYWN0aW9uLCBhcGksIGdldE9yaWdpbmFsU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICBvcmlnaW5hbFN0YXRlID0gSU5URVJOQUxfTklMX1RPS0VOO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTsgfTsgfTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWlkZGxld2FyZTogbWlkZGxld2FyZSxcclxuICAgICAgICBzdGFydExpc3RlbmluZzogc3RhcnRMaXN0ZW5pbmcsXHJcbiAgICAgICAgc3RvcExpc3RlbmluZzogc3RvcExpc3RlbmluZyxcclxuICAgICAgICBjbGVhckxpc3RlbmVyczogY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmVcclxuICAgIH07XHJcbn1cclxuLy8gc3JjL2F1dG9CYXRjaEVuaGFuY2VyLnRzXHJcbnZhciBTSE9VTERfQVVUT0JBVENIID0gXCJSVEtfYXV0b0JhdGNoXCI7XHJcbnZhciBwcmVwYXJlQXV0b0JhdGNoZWQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAocGF5bG9hZCkge1xyXG4gICAgdmFyIF9jO1xyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgICAgcGF5bG9hZDogcGF5bG9hZCxcclxuICAgICAgICBtZXRhOiAoX2MgPSB7fSwgX2NbU0hPVUxEX0FVVE9CQVRDSF0gPSB0cnVlLCBfYylcclxuICAgIH0pO1xyXG59OyB9O1xyXG52YXIgcHJvbWlzZTtcclxudmFyIHF1ZXVlTWljcm90YXNrU2hpbSA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PT0gXCJmdW5jdGlvblwiID8gcXVldWVNaWNyb3Rhc2suYmluZCh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IGdsb2JhbFRoaXMpIDogZnVuY3Rpb24gKGNiKSB7IHJldHVybiAocHJvbWlzZSB8fCAocHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpKSkudGhlbihjYikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICB0aHJvdyBlcnI7XHJcbn0sIDApOyB9KTsgfTtcclxudmFyIGNyZWF0ZVF1ZXVlV2l0aFRpbWVyID0gZnVuY3Rpb24gKHRpbWVvdXQpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobm90aWZ5KSB7XHJcbiAgICAgICAgc2V0VGltZW91dChub3RpZnksIHRpbWVvdXQpO1xyXG4gICAgfTtcclxufTtcclxudmFyIHJBRiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcigxMCk7XHJcbnZhciBhdXRvQmF0Y2hFbmhhbmNlciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7IHR5cGU6IFwicmFmXCIgfTsgfVxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChuZXh0KSB7IHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xyXG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzdG9yZSA9IG5leHQuYXBwbHkodm9pZCAwLCBhcmdzKTtcclxuICAgICAgICB2YXIgbm90aWZ5aW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2sgPSBmYWxzZTtcclxuICAgICAgICB2YXIgbm90aWZpY2F0aW9uUXVldWVkID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IG5ldyBTZXQoKTtcclxuICAgICAgICB2YXIgcXVldWVDYWxsYmFjayA9IG9wdGlvbnMudHlwZSA9PT0gXCJ0aWNrXCIgPyBxdWV1ZU1pY3JvdGFza1NoaW0gOiBvcHRpb25zLnR5cGUgPT09IFwicmFmXCIgPyByQUYgOiBvcHRpb25zLnR5cGUgPT09IFwiY2FsbGJhY2tcIiA/IG9wdGlvbnMucXVldWVOb3RpZmljYXRpb24gOiBjcmVhdGVRdWV1ZVdpdGhUaW1lcihvcHRpb25zLnRpbWVvdXQpO1xyXG4gICAgICAgIHZhciBub3RpZnlMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvblF1ZXVlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2spIHtcclxuICAgICAgICAgICAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobCkgeyByZXR1cm4gbCgpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLCB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gKGxpc3RlbmVyMikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHdyYXBwZWRMaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vdGlmeWluZyAmJiBsaXN0ZW5lcjIoKTsgfTtcclxuICAgICAgICAgICAgICAgIHZhciB1bnN1YnNjcmliZSA9IHN0b3JlLnN1YnNjcmliZSh3cmFwcGVkTGlzdGVuZXIpO1xyXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLmFkZChsaXN0ZW5lcjIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIyKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbiAoYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2E7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vdGlmeWluZyA9ICEoKF9hID0gYWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBhY3Rpb24ubWV0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hW1NIT1VMRF9BVVRPQkFUQ0hdKTtcclxuICAgICAgICAgICAgICAgICAgICBzaG91bGROb3RpZnlBdEVuZE9mVGljayA9ICFub3RpZnlpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm90aWZpY2F0aW9uUXVldWVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb25RdWV1ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVDYWxsYmFjayhub3RpZnlMaXN0ZW5lcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaChhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZ5aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTsgfTtcclxufTtcclxuLy8gc3JjL2luZGV4LnRzXHJcbmVuYWJsZUVTNSgpO1xyXG5leHBvcnQgeyBFbmhhbmNlckFycmF5LCBNaWRkbGV3YXJlQXJyYXksIFNIT1VMRF9BVVRPQkFUQ0gsIFRhc2tBYm9ydEVycm9yLCBhZGRMaXN0ZW5lciwgYXV0b0JhdGNoRW5oYW5jZXIsIGNsZWFyQWxsTGlzdGVuZXJzLCBjb25maWd1cmVTdG9yZSwgY3JlYXRlQWN0aW9uLCBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSwgY3JlYXRlQXN5bmNUaHVuaywgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IsIGNyZWF0ZUVudGl0eUFkYXB0ZXIsIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSwgY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlLCBkZWZhdWx0MiBhcyBjcmVhdGVOZXh0U3RhdGUsIGNyZWF0ZVJlZHVjZXIsIGNyZWF0ZVNlbGVjdG9yMiBhcyBjcmVhdGVTZWxlY3RvciwgY3JlYXRlU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlLCBjcmVhdGVTbGljZSwgY3VycmVudDIgYXMgY3VycmVudCwgZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlLCBmcmVlemUsIGdldERlZmF1bHRNaWRkbGV3YXJlLCBnZXRUeXBlLCBpc0FjdGlvbiwgaXNBY3Rpb25DcmVhdG9yLCBpc0FsbE9mLCBpc0FueU9mLCBpc0FzeW5jVGh1bmtBY3Rpb24sIGlzRHJhZnQ0IGFzIGlzRHJhZnQsIGlzRlNBIGFzIGlzRmx1eFN0YW5kYXJkQWN0aW9uLCBpc0Z1bGZpbGxlZCwgaXNJbW11dGFibGVEZWZhdWx0LCBpc1BlbmRpbmcsIGlzUGxhaW4sIGlzUGxhaW5PYmplY3QsIGlzUmVqZWN0ZWQsIGlzUmVqZWN0ZWRXaXRoVmFsdWUsIG1pbmlTZXJpYWxpemVFcnJvciwgbmFub2lkLCBvcmlnaW5hbCwgcHJlcGFyZUF1dG9CYXRjaGVkLCByZW1vdmVMaXN0ZW5lciwgdW53cmFwUmVzdWx0IH07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZHV4LXRvb2xraXQuZXNtLmpzLm1hcCIsICJcbnR5cGUgUmVxUGFyYW1zID0ge1trOnN0cmluZ106c3RyaW5nfXx1bmRlZmluZWQgXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXF1ZXN0KFxuICBwYXRoOiBzdHJpbmcsXG4gIHJlcVBhcmFtczpSZXFQYXJhbXMsXG4gIGluaXQ/OiBSZXF1ZXN0SW5pdCB8IHVuZGVmaW5lZCxcbiAgYXBpVXJsPzogc3RyaW5nXG4pOiBQcm9taXNlPGFueT4ge1xuICBjb25zdCB1cmwgPSAoYXBpVXJsIHx8IHByb2Nlc3MuZW52LlJFQUNUX0FQUF9BUElVUkwpICsgcGF0aDtcbiAgLy9jb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwucmVwbGFjZSgvKFteOl1cXC8pXFwvKy9nLCBcIiQxXCIpLCB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybCArIChyZXFQYXJhbXMgPyAoJz8nICsgbmV3IFVSTFNlYXJjaFBhcmFtcyhPYmplY3QuZW50cmllcyhyZXFQYXJhbXMpKS50b1N0cmluZygpKSA6ICcnKSwge1xuICAgIC4uLihpbml0ID8gaW5pdCA6IHt9KSxcbiAgICAvL2hlYWRlcnM6IHsgLi4uKGluaXQ/LmhlYWRlcnMgfHwge30pLCAuLi5nZXRBdXRoSGVhZGVycygpIH1cbiAgfSk7XG4gIGlmICghcmVzLm9rKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBGYWlsdXJlIGxvYWRpbmcgJHtyZXMudXJsfSB3aXRoIHN0YXR1cyAke3Jlcy5zdGF0dXN9ICgke3Jlcy5zdGF0dXNUZXh0fSlgO1xuICAgIGNvbnNvbGUuZGlyKG1lc3NhZ2UpO1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpXG4gIH1cbiAgcmV0dXJuIGF3YWl0IHJlcy5qc29uKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBQYWdlPFQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHBhZ2U6IG51bWJlcixcbiAgICBwdWJsaWMgbnVtRWxlbWVudHM6IG51bWJlcixcbiAgICBwdWJsaWMgdG90YWxQYWdlczogbnVtYmVyLFxuICAgIHB1YmxpYyB0b3RhbEVsZW1lbnRzOiBudW1iZXIsXG4gICAgcHVibGljIGVsZW1lbnRzOiBUW10sXG4gICAgcHVibGljIGZhY2V0RmllbGRzVG9Db3VudHM6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIG51bWJlcj4+XG4gICkge31cblxuICBtYXA8TmV3VHlwZT4oZm46IChUKSA9PiBOZXdUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBQYWdlPE5ld1R5cGU+KFxuICAgICAgdGhpcy5wYWdlLFxuICAgICAgdGhpcy5udW1FbGVtZW50cyxcbiAgICAgIHRoaXMudG90YWxQYWdlcyxcbiAgICAgIHRoaXMudG90YWxFbGVtZW50cyxcbiAgICAgIHRoaXMuZWxlbWVudHMubWFwKGZuKSxcbiAgICAgIHRoaXMuZmFjZXRGaWVsZHNUb0NvdW50c1xuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2luYXRlZDxSZXNUeXBlPihcbiAgcGF0aDogc3RyaW5nLFxuICByZXFQYXJhbXM/OiBSZXFQYXJhbXMsXG4gIGFwaVVybD86IHN0cmluZ1xuKTogUHJvbWlzZTxQYWdlPFJlc1R5cGU+PiB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGdldDxhbnk+KHBhdGgsIHJlcVBhcmFtcywgYXBpVXJsKTtcblxuICByZXR1cm4gbmV3IFBhZ2U8UmVzVHlwZT4oXG5cdHJlcy5wYWdlIHx8IDAsXG5cdHJlcy5udW1FbGVtZW50cyB8fCAwLFxuXHRyZXMudG90YWxQYWdlcyB8fCAwLFxuXHRyZXMudG90YWxFbGVtZW50cyB8fCAwLFxuXHRyZXMuZWxlbWVudHMgfHwgW10sXG5cdHJlcy5mYWNldEZpZWxkc1RvQ291bnRzIHx8IG5ldyBNYXAoKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0PFJlc1R5cGU+KHBhdGg6IHN0cmluZywgcmVxUGFyYW1zPzpSZXFQYXJhbXMsIGFwaVVybD86IHN0cmluZyk6IFByb21pc2U8UmVzVHlwZT4ge1xuICByZXR1cm4gcmVxdWVzdChwYXRoLCByZXFQYXJhbXMsIHVuZGVmaW5lZCwgYXBpVXJsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBvc3Q8UmVxVHlwZSwgUmVzVHlwZSA9IGFueT4oXG4gIHBhdGg6IHN0cmluZyxcbiAgcmVxUGFyYW1zOiBSZXFQYXJhbXMsXG4gIGJvZHk6IFJlcVR5cGVcbik6IFByb21pc2U8UmVzVHlwZT4ge1xuICByZXR1cm4gcmVxdWVzdChwYXRoLCByZXFQYXJhbXMsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHV0PFJlcVR5cGUsIFJlc1R5cGUgPSBhbnk+KFxuICBwYXRoOiBzdHJpbmcsXG4gIHJlcVBhcmFtczogUmVxUGFyYW1zLFxuICBib2R5OiBSZXFUeXBlXG4pOiBQcm9taXNlPFJlc1R5cGU+IHtcbiAgcmV0dXJuIHJlcXVlc3QocGF0aCwgcmVxUGFyYW1zLCB7XG4gICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIH0sXG4gIH0pO1xufVxuIiwgImZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyQXJyYXkpIHtcbiAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgaWYgKHR5cGVvZiBzdHJBcnJheVswXSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgfVxuXG4gIC8vIElmIHRoZSBmaXJzdCBwYXJ0IGlzIGEgcGxhaW4gcHJvdG9jb2wsIHdlIGNvbWJpbmUgaXQgd2l0aCB0aGUgbmV4dCBwYXJ0LlxuICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICBzdHJBcnJheVswXSA9IGZpcnN0ICsgc3RyQXJyYXlbMF07XG4gIH1cblxuICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15maWxlOlxcL1xcL1xcLy8pKSB7XG4gICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vJyk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNvbXBvbmVudCA9IHN0ckFycmF5W2ldO1xuXG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgIGlmIChpID4gMCkge1xuICAgICAgLy8gUmVtb3ZpbmcgdGhlIHN0YXJ0aW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgZmlyc3QuXG4gICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICB9XG4gICAgaWYgKGkgPCBzdHJBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICB9XG5cbiAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgfVxuXG4gIHZhciBzdHIgPSByZXN1bHRBcnJheS5qb2luKCcvJyk7XG4gIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9cXC8oXFw/fCZ8I1teIV0pL2csICckMScpO1xuXG4gIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgc3RyID0gcGFydHMuc2hpZnQoKSArIChwYXJ0cy5sZW5ndGggPiAwID8gJz8nOiAnJykgKyBwYXJ0cy5qb2luKCcmJyk7XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXJsSm9pbigpIHtcbiAgdmFyIGlucHV0O1xuXG4gIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgIGlucHV0ID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlQXN5bmNUaHVuaywgY3JlYXRlU2xpY2UsIFBheWxvYWRBY3Rpb24gfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSBcIi4uLy4uL2FwcC9hcGlcIjtcbmltcG9ydCB1cmxKb2luIGZyb20gXCJ1cmwtam9pblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvbWVTdGF0ZSB7XG4gIGJhbm5lclRleHQ6IHN0cmluZztcbiAgc3RhdHM6IFN0YXRzIHwgdW5kZWZpbmVkO1xufVxuZXhwb3J0IGludGVyZmFjZSBTdGF0cyB7XG4gIG51bWJlck9mT250b2xvZ2llczogbnVtYmVyO1xuICBudW1iZXJPZkNsYXNzZXM6IG51bWJlcjtcbiAgbnVtYmVyT2ZQcm9wZXJ0aWVzOiBudW1iZXI7XG4gIG51bWJlck9mSW5kaXZpZHVhbHM6IG51bWJlcjtcbiAgbGFzdE1vZGlmaWVkOiBzdHJpbmc7XG59XG5jb25zdCBpbml0aWFsU3RhdGU6IEhvbWVTdGF0ZSA9IHtcbiAgc3RhdHM6IHVuZGVmaW5lZCxcbiAgYmFubmVyVGV4dDogXCJcIixcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdGF0cyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwiaG9tZV9zdGF0c1wiLFxuICBhc3luYyAoYXJnLCB7IHJlamVjdFdpdGhWYWx1ZSB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBnZXQ8U3RhdHM+KGBhcGkvdjIvc3RhdHNgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRCYW5uZXJUZXh0ID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJob21lX2Jhbm5lclwiLFxuICBhc3luYyAoYXJnLCB7IHJlamVjdFdpdGhWYWx1ZSB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHVybEpvaW4ocHJvY2Vzcy5lbnYuUFVCTElDX1VSTCEsIFwiYmFubmVyLnR4dFwiKSk7XG4gICAgICByZXR1cm4gcmVzLnRleHQoKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3QgaG9tZVNsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICBuYW1lOiBcImhvbWVcIixcbiAgaW5pdGlhbFN0YXRlLFxuICByZWR1Y2Vyczoge30sXG4gIGV4dHJhUmVkdWNlcnM6IChidWlsZGVyKSA9PiB7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0U3RhdHMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBIb21lU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxTdGF0cz4pID0+IHtcbiAgICAgICAgc3RhdGUuc3RhdHMgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRTdGF0cy5yZWplY3RlZCwgKHN0YXRlOiBIb21lU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLnN0YXRzID0gaW5pdGlhbFN0YXRlLnN0YXRzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEJhbm5lclRleHQuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBIb21lU3RhdGUsIGFjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmJhbm5lclRleHQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRCYW5uZXJUZXh0LnJlamVjdGVkLCAoc3RhdGU6IEhvbWVTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuYmFubmVyVGV4dCA9IGluaXRpYWxTdGF0ZS5iYW5uZXJUZXh0O1xuICAgIH0pO1xuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGhvbWVTbGljZS5yZWR1Y2VyO1xuIiwgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgQ2xhc3MgZnJvbSBcIi4uL21vZGVsL0NsYXNzXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi9tb2RlbC9FbnRpdHlcIjtcbmltcG9ydCBJbmRpdmlkdWFsIGZyb20gXCIuLi9tb2RlbC9JbmRpdmlkdWFsXCI7XG5pbXBvcnQgUHJvcGVydHkgZnJvbSBcIi4uL21vZGVsL1Byb3BlcnR5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5PFQ+KG9iajogVCB8IFRbXSk6IFRbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9IGVsc2UgaWYgKG9iaikge1xuICAgIHJldHVybiBbb2JqXTtcbiAgfVxuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmcoKSB7XG4gIHJldHVybiAoTWF0aC5yYW5kb20oKSAqIE1hdGgucG93KDIsIDU0KSkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydEJ5S2V5cyhhOiBhbnksIGI6IGFueSkge1xuICBjb25zdCBrZXlBID0gYS5rZXkudG9VcHBlckNhc2UoKTtcbiAgY29uc3Qga2V5QiA9IGIua2V5LnRvVXBwZXJDYXNlKCk7XG4gIHJldHVybiBrZXlBID09PSBrZXlCID8gMCA6IGtleUEgPiBrZXlCID8gMSA6IC0xO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weVRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZykge1xuICBpZiAoXCJjbGlwYm9hcmRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiLCB0cnVlLCB0ZXh0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJldmlvdXModmFsdWU6IGFueSkge1xuICBjb25zdCByZWYgPSB1c2VSZWYoKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHJlZi5jdXJyZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKHByb3BlcnRpZXM6IGFueSk6IEVudGl0eSB7XG4gIGNvbnN0IHR5cGVzID0gcHJvcGVydGllc1tcInR5cGVcIl0gfHwgW107XG4gIGlmICh0eXBlcy5pbmRleE9mKFwiY2xhc3NcIikgIT09IC0xKSByZXR1cm4gbmV3IENsYXNzKHByb3BlcnRpZXMpO1xuICBpZiAodHlwZXMuaW5kZXhPZihcInByb3BlcnR5XCIpICE9PSAtMSkgcmV0dXJuIG5ldyBQcm9wZXJ0eShwcm9wZXJ0aWVzKTtcbiAgaWYgKHR5cGVzLmluZGV4T2YoXCJpbmRpdmlkdWFsXCIpICE9PSAtMSkgcmV0dXJuIG5ldyBJbmRpdmlkdWFsKHByb3BlcnRpZXMpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVudGl0eSB0eXBlOiBcIiArIEpTT04uc3RyaW5naWZ5KHByb3BlcnRpZXMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvQXBpUGFyYW1zKHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zKSB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtc0NvcHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIHNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4ge1xuICAgIGxldCBuZXdLZXkgPSBrZXkuaW5jbHVkZXMoXCJfXCIpID8gdG9DYW1lbChrZXkpIDoga2V5O1xuICAgIC8vIHNwZWNpYWwgY2FzZXNcbiAgICBpZiAobmV3S2V5ID09PSBcIm9ib0lkXCIpIG5ld0tleSA9IFwiY3VyaWVcIjtcbiAgICBzZWFyY2hQYXJhbXNDb3B5LmFwcGVuZChuZXdLZXksIHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBzZWFyY2hQYXJhbXNDb3B5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9DYW1lbChzdHI6IHN0cmluZykge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbLV9dW2Etel0pL2dpLCAoJDEpID0+IHtcbiAgICByZXR1cm4gJDEudG9VcHBlckNhc2UoKS5yZXBsYWNlKFwiLVwiLCBcIlwiKS5yZXBsYWNlKFwiX1wiLCBcIlwiKTtcbiAgfSk7XG59XG4iLCAiZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVpZmllZDxUPiB7XG4gIHZhbHVlOiBUO1xuICBheGlvbXM6IGFueVtdIHwgbnVsbDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBULCBheGlvbXM6IGFueVtdIHwgbnVsbCkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmF4aW9tcyA9IGF4aW9tcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb248VD4oanNvbk5vZGU6IGFueSk6IFJlaWZpZWQ8VD5bXSB7XG4gICAgaWYgKCFqc29uTm9kZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShqc29uTm9kZSkpIHtcbiAgICAgIGpzb25Ob2RlID0gW2pzb25Ob2RlXTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbk5vZGUubWFwKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlLnR5cGUpICYmXG4gICAgICAgIHZhbHVlLnR5cGUuaW5kZXhPZihcInJlaWZpY2F0aW9uXCIpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVpZmllZDxUPih2YWx1ZS52YWx1ZSwgdmFsdWUuYXhpb21zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVpZmllZDxUPih2YWx1ZSwgbnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBoYXNNZXRhZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5heGlvbXMgIT0gbnVsbDtcbiAgfVxuXG4gIC8vIENvbWJpbmUgYWxsIG9mIHRoZSBheGlvbXMgaW50byBvbmUgbWV0YWRhdGEgb2JqZWN0IGZvciB0aGUgcHJvcGVydHkuXG4gIC8vXG4gIC8vIG5vdGU6IFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgc2FtZSBwcm9wZXJ0eSBpcyByZWlmaWVkIG11bHRpcGxlIHRpbWVzIHdpdGhcbiAgLy8gZGlmZmVyZW50IG1ldGFkYXRhLCBpdCB3aWxsIGFsbCBiZSBjb21iaW5lZCBpbiB0aGUgVUkuIFdoZXRoZXIgdGhpcyBpc1xuICAvLyB0aGUgZGVzaXJlZCBiZWhhdmlvdXIgaXMgVEJELlxuICAvL1xuICBnZXRNZXRhZGF0YSgpOiBhbnkgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuYXhpb21zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgcHJvcGVydGllczogYW55ID0ge307XG5cbiAgICBmb3IgKGxldCBheGlvbSBvZiB0aGlzLmF4aW9tcykge1xuICAgICAgZm9yIChsZXQgayBvZiBPYmplY3Qua2V5cyhheGlvbSkpIHtcbiAgICAgICAgbGV0IHYgPSBheGlvbVtrXTtcbiAgICAgICAgbGV0IGV4aXN0aW5nOiBhbnlbXSB8IHVuZGVmaW5lZCA9IHByb3BlcnRpZXNba107XG4gICAgICAgIGlmIChleGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhpc3RpbmcucHVzaCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzW2tdID0gW3ZdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cbn1cbiIsICJpbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCJcblxuZXhwb3J0IGludGVyZmFjZSBMaW5rZWRFbnRpdHkge1xuXHRkZWZpbmVkQnk/OnN0cmluZ1tdXG5cdGlyaT86c3RyaW5nXG5cdHVybD86c3RyaW5nXG5cdG51bUFwcGVhcnNJbjpzdHJpbmdcblx0aGFzTG9jYWxEZWZpbml0aW9uOmJvb2xlYW5cblx0bGFiZWw6c3RyaW5nfHN0cmluZ1tdXG5cdHR5cGU6c3RyaW5nW11cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlua2VkRW50aXRpZXMge1xuXG5cdGxpbmtlZEVudGl0aWVzOnsgW2tleTpzdHJpbmddOkxpbmtlZEVudGl0eSB9XG5cblx0Y29uc3RydWN0b3IobGlua2VkRW50aXRpZXM6YW55KSB7XG5cdFx0aWYobGlua2VkRW50aXRpZXMpXG5cdFx0XHR0aGlzLmxpbmtlZEVudGl0aWVzID0gey4uLmxpbmtlZEVudGl0aWVzfVxuXHRcdGVsc2Vcblx0XHRcdHRoaXMubGlua2VkRW50aXRpZXMgPSB7fVxuXHR9XG5cblx0bWVyZ2VXaXRoKGxpbmtlZEVudGl0aWVzOmFueSk6TGlua2VkRW50aXRpZXMge1xuXHRcdGlmKGxpbmtlZEVudGl0aWVzKVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMsIGxpbmtlZEVudGl0aWVzIH0pXG5cdFx0ZWxzZVxuXHRcdFx0cmV0dXJuIG5ldyBMaW5rZWRFbnRpdGllcyh7IC4uLnRoaXMubGlua2VkRW50aXRpZXMgfSlcblx0fVxuXG5cdGdldExhYmVsRm9ySXJpKGlyaTpzdHJpbmcpOnN0cmluZ3x1bmRlZmluZWQge1xuXG5cdFx0bGV0IGxpbmtlZEVudGl0eSA9IHRoaXMubGlua2VkRW50aXRpZXNbaXJpXVxuXG5cdFx0aWYobGlua2VkRW50aXR5KSB7XG5cdFx0XHRsZXQgbGFiZWwgPSBSZWlmaWVkLmZyb21Kc29uPHN0cmluZz4oIGxpbmtlZEVudGl0eS5sYWJlbCApXG5cdFx0XHRpZihsYWJlbCAmJiBsYWJlbC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiBsYWJlbFswXS52YWx1ZVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGdldChpcmk6c3RyaW5nKTpMaW5rZWRFbnRpdHl8dW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5saW5rZWRFbnRpdGllc1tpcmldXG5cdH1cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgTGlua2VkRW50aXRpZXMgZnJvbSBcIi4vTGlua2VkRW50aXRpZXNcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgVGhpbmcge1xuICBwcm9wZXJ0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlkXCJdO1xuICB9XG5cbiAgZ2V0SXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImlyaVwiXTtcbiAgfVxuXG4gIGdldFR5cGUoKTogXCJvbnRvbG9neVwiIHwgXCJjbGFzc1wiIHwgXCJwcm9wZXJ0eVwiIHwgXCJpbmRpdmlkdWFsXCIge1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5wcm9wZXJ0aWVzW1widHlwZVwiXSBhcyBzdHJpbmdbXTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKFxuICAgICAgICBbXCJvbnRvbG9neVwiLCBcImNsYXNzXCIsIFwicHJvcGVydHlcIiwgXCJpbmRpdmlkdWFsXCJdLmluZGV4T2YodHlwZSkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgYXMgYW55O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZVwiKTtcbiAgfVxuXG4gIGdldFR5cGVQbHVyYWwoKTogXCJvbnRvbG9naWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nZXRUeXBlKCk7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgXCJvbnRvbG9neVwiOlxuICAgICAgICByZXR1cm4gXCJvbnRvbG9naWVzXCI7XG4gICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgcmV0dXJuIFwiY2xhc3Nlc1wiO1xuICAgICAgY2FzZSBcInByb3BlcnR5XCI6XG4gICAgICAgIHJldHVybiBcInByb3BlcnRpZXNcIjtcbiAgICAgIGNhc2UgXCJpbmRpdmlkdWFsXCI6XG4gICAgICAgIHJldHVybiBcImluZGl2aWR1YWxzXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGVcIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmRmVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcbiAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIlxuICAgIF0pXG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG5cdHJldHVybiB0aGlzLmdldE5hbWVzKClbMF07XG4gIH1cblxuICBnZXROYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbGFiZWxzID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl1cbiAgICApO1xuICAgIGlmIChsYWJlbHMgJiYgbGFiZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBsYWJlbHMubWFwKGxhYmVsID0+IGxhYmVsLnZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gW3RoaXMuZ2V0SXJpKCldO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25cIl0pO1xuICAgIGlmIChkZWZpbml0aW9uICYmIGRlZmluaXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRlZmluaXRpb24ubWFwKChkZWYpID0+IGRlZi52YWx1ZSB8fCBcIlwiKS5qb2luKFwiIFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXRPbnRvbG9neUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5SWRcIl07XG4gIH1cblxuICBnZXRMYWJlbEZvcklyaShpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbGlua2VkRW50aXRpZXMgPSB0aGlzLnByb3BlcnRpZXNbXCJsaW5rZWRFbnRpdGllc1wiXTtcbiAgICBpZiAobGlua2VkRW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IGxhYmVsOlJlaWZpZWQ8c3RyaW5nPltdID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KCBsaW5rZWRFbnRpdGllc1tpZF0/LmxhYmVsICk7XG4gICAgICByZXR1cm4gbGFiZWxbMF0/LnZhbHVlIHx8IGlkXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uQnlJZChpZDogc3RyaW5nKTpSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb24oYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbaWRdKSlcbiAgfVxuXG4gIGdldExpbmtlZEVudGl0aWVzKCk6IExpbmtlZEVudGl0aWVzIHtcbiAgICByZXR1cm4gbmV3IExpbmtlZEVudGl0aWVzKHRoaXMucHJvcGVydGllc1tcImxpbmtlZEVudGl0aWVzXCJdIHx8IHt9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuL1JlaWZpZWRcIjtcbmltcG9ydCBUaGluZyBmcm9tIFwiLi9UaGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBFbnRpdHkgZXh0ZW5kcyBUaGluZyB7XG4gIGFic3RyYWN0IGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W107XG4gIGFic3RyYWN0IGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdO1xuXG4gIGlzQ2Fub25pY2FsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJpc0RlZmluaW5nT250b2xvZ3lcIl0gPT09IHRydWU7XG4gIH1cblxuICBpc0RlcHJlY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2RlcHJlY2F0ZWRcIl0gPT09IFwidHJ1ZVwiXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIC8vIG9ubHkgc3VwcG9ydHMgRUZPIGZvciBub3dcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL29ic29sZXRlZF9pbl92ZXJzaW9uXCJdO1xuICB9XG5cbiAgZ2V0RGVwcmVjYXRpb25SZWFzb24oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vcHVybC5vYm9saWJyYXJ5Lm9yZy9vYm8vSUFPXzAwMDAyMzFcIl1cbiAgICApLmNvbmNhdChcbiAgICAgIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy5lYmkuYWMudWsvZWZvL3JlYXNvbl9mb3Jfb2Jzb2xlc2NlbmNlXCJdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldERlcHJlY2F0aW9uUmVwbGFjZW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0lBT18wMTAwMDAxXCJdO1xuICB9XG5cbiAgZ2V0UmVsYXRlZEZyb20oKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4odGhpcy5wcm9wZXJ0aWVzW1wicmVsYXRlZEZyb21cIl0pO1xuICB9XG5cbiAgZ2V0RGVzY3JpcHRpb25Bc0FycmF5KCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcImRlZmluaXRpb25cIl0pO1xuICB9XG5cbiAgaGFzRGlyZWN0Q2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImhhc0RpcmVjdENoaWxkcmVuXCJdID09PSBcInRydWVcIjtcbiAgfVxuXG4gIGhhc0hpZXJhcmNoaWNhbENoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJoYXNIaWVyYXJjaGljYWxDaGlsZHJlblwiXSA9PT0gXCJ0cnVlXCI7XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNEaXJlY3RDaGlsZHJlbigpIHx8IHRoaXMuaGFzSGllcmFyY2hpY2FsQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIGdldEFuY2VzdG9ySXJpcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiYW5jZXN0b3JcIl0pO1xuICB9XG5cbiAgZ2V0SGllcmFyY2hpY2FsQW5jZXN0b3JJcmlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxBbmNlc3RvclwiXSk7XG4gIH1cblxuICBnZXRTeW5vbnltcygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KHRoaXMucHJvcGVydGllc1tcInN5bm9ueW1cIl0pO1xuICB9XG5cbiAgZ2V0QXBwZWFyc0luKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gKHRoaXMucHJvcGVydGllc1tcImFwcGVhcnNJblwiXSB8fCBbXSkgYXMgc3RyaW5nW107XG4gIH1cblxuICBnZXREZWZpbmVkQnkoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAodGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5lZEJ5XCJdIHx8IFtdKSBhcyBzdHJpbmdbXTtcbiAgfVxuXG4gIGdldFNob3J0Rm9ybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJjdXJpZVwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJzaG9ydEZvcm1cIl07XG4gIH1cblxuICBnZXREZXBpY3RlZEJ5KCk6IFJlaWZpZWQ8c3RyaW5nPltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiXVxuICAgICk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGRlZmluaXRpb25Qcm9wZXJ0aWVzID0gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJkZWZpbml0aW9uUHJvcGVydHlcIl0pO1xuICAgIGxldCBzeW5vbnltUHJvcGVydGllcyA9IGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wic3lub255bVByb3BlcnR5XCJdKTtcbiAgICBsZXQgaGllcmFyY2hpY2FsUHJvcGVydGllcyA9IGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQcm9wZXJ0eVwiXVxuICAgICk7XG4gICAgbGV0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChsZXQgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICAvLyB0aGlzIGlzIGhhbmRsZWQgZXhwbGljaXRseSBpbiBFbnRpdHlQYWdlXG4gICAgICBpZiAocHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJuZWdhdGl2ZVByb3BlcnR5QXNzZXJ0aW9uK1wiKSkgY29udGludWU7XG5cbiAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBleHBsaWNpdGx5IGluIEVudGl0eVBhZ2VcbiAgICAgIGlmIChwcmVkaWNhdGUgPT09IFwiaHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS9kZXBpY3RlZF9ieVwiKSBjb250aW51ZTtcblxuICAgICAgbGV0IGxpbmtlZEVudGl0eSA9IHRoaXMuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXQocHJlZGljYXRlKVxuICAgICAgaWYgKGxpbmtlZEVudGl0eSAhPSB1bmRlZmluZWQgJiYgbGlua2VkRW50aXR5LnR5cGUuaW5kZXhPZihcIm9iamVjdFByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG4gICAgICBpZiAobGlua2VkRW50aXR5ICE9IHVuZGVmaW5lZCAmJiBsaW5rZWRFbnRpdHkudHlwZS5pbmRleE9mKFwiZGF0YVByb3BlcnR5XCIpICE9PSAtMSkgY29udGludWU7XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBpbnRlcnByZXRlZCBhcyBkZWZpbml0aW9uL3N5bm9ueW0vaGllcmFyY2hpY2FsLCBkb1xuICAgICAgLy8gbm90IGluY2x1ZGUgaXQgYXMgYW4gYW5ub3RhdGlvblxuICAgICAgaWYgKFxuICAgICAgICBkZWZpbml0aW9uUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xIHx8XG4gICAgICAgIHN5bm9ueW1Qcm9wZXJ0aWVzLmluZGV4T2YocHJlZGljYXRlKSAhPT0gLTEgfHxcbiAgICAgICAgaGllcmFyY2hpY2FsUHJvcGVydGllcy5pbmRleE9mKHByZWRpY2F0ZSkgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFueXRoaW5nIGluIHRoZSByZGYsIHJkZnMsIG93bCBuYW1lc3BhY2VzIGFyZW4ndCBkaXNwbGF5ZWQgaW4gdGhlIGFubm90YXRpb25zIHNlY3Rpb24uLi5cbiAgICAgIGlmIChcbiAgICAgICAgcHJlZGljYXRlLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjXCIpIHx8XG4gICAgICAgIHByZWRpY2F0ZS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiKSB8fFxuICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgKSB7XG4gICAgICAgIC8vIC4uLmFwYXJ0IGZyb20gdGhlc2Ugb25lc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJlZGljYXRlICE9PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNjb21tZW50XCIgJiZcbiAgICAgICAgICBwcmVkaWNhdGUgIT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3NlZUFsc29cIiAmJlxuICAgICAgICAgIC8vIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNoYXNLZXlcIiAmJlxuICAgICAgICAgIHByZWRpY2F0ZSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaXNqb2ludFVuaW9uT2ZcIlxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyB3aGlsZSBpbiBnZW5lcmFsIG9ib0luT3dsIG5hbWVzcGFjZSBwcm9wZXJ0aWVzIGFyZSBhbm5vdGF0aW9ucywgc29tZVxuICAgICAgLy8gb2YgdGhlbSB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXlcbiAgICAgIC8vXG4gICAgICBpZiAoXG4gICAgICAgIC8vcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2luU3Vic2V0XCJcbiAgICAgICAgcHJlZGljYXRlID09PSBcImh0dHA6Ly93d3cuZ2VuZW9udG9sb2d5Lm9yZy9mb3JtYXRzL29ib0luT3dsI2lkXCJcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYW5ub3RhdGlvblByZWRpY2F0ZXMuYWRkKHByZWRpY2F0ZSk7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coXCJBUHNcIik7XG4gICAgLy8gY29uc29sZS5kaXIoQXJyYXkuZnJvbShhbm5vdGF0aW9uUHJlZGljYXRlcykpO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl1cbiAgICAgID8gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHNcIl0pXG4gICAgICA6IDA7XG4gIH1cblxuICBnZXROdW1EZXNjZW5kYW50cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXVxuICAgICAgPyBwYXJzZUludCh0aGlzLnByb3BlcnRpZXNbXCJudW1EZXNjZW5kYW50c1wiXSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIGdldEhpZXJhcmNoaWNhbFBhcmVudFJlaWZpY2F0aW9uQXhpb21zKHBhcmVudElyaTogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgaGllcmFyY2hpY2FsUGFyZW50cyA9IFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImhpZXJhcmNoaWNhbFBhcmVudFwiXVxuICAgICk7XG5cbiAgICBmb3IgKGxldCBwIG9mIGhpZXJhcmNoaWNhbFBhcmVudHMpIHtcbiAgICAgIGlmIChwLnZhbHVlID09PSBwYXJlbnRJcmkpIHtcbiAgICAgICAgcmV0dXJuIHAuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuL0VudGl0eVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGFzcyBleHRlbmRzIEVudGl0eSB7XG4gIGdldFBhcmVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJoaWVyYXJjaGljYWxQYXJlbnRcIl1cbiAgICApO1xuICB9XG4gIGdldFN1cGVyRW50aXRpZXMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViQ2xhc3NPZlwiXVxuICAgICk7XG4gIH1cbiAgZ2V0RXF1aXZhbGVudHMoKTogUmVpZmllZDxhbnk+W10ge1xuICAgIHJldHVybiBSZWlmaWVkLmZyb21Kc29uPGFueT4oXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNlcXVpdmFsZW50Q2xhc3NcIl1cbiAgICApO1xuICB9XG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI2Rpc2pvaW50V2l0aCddKVxuICB9XG5cbiAgZ2V0SGFzS2V5KCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaGFzS2V5J10pXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuL0VudGl0eVwiO1xuaW1wb3J0IFJlaWZpZWQgZnJvbSBcIi4vUmVpZmllZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmRpdmlkdWFsIGV4dGVuZHMgRW50aXR5IHtcbiAgZ2V0UGFyZW50cygpIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGlyZWN0UGFyZW50XCJdXG4gICAgKTtcbiAgfVxuICBnZXRFcXVpdmFsZW50cygpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgZ2V0U3VwZXJFbnRpdGllcygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihbXSlcbiAgfVxuXG4gIGdldERpZmZlcmVudEZyb20oKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkoXG4gICAgICB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNkaWZmZXJlbnRGcm9tXCJdXG4gICAgKTtcbiAgfVxuXG4gIGdldFNhbWVBcygpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNzYW1lQXNcIl0pO1xuICB9XG5cbiAgZ2V0SW5kaXZpZHVhbFR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZGZUeXBlczogYW55ID0gdGhpcy5nZXRSZGZUeXBlcygpO1xuXG4gICAgaWYgKCFyZGZUeXBlcyB8fCAhQXJyYXkuaXNBcnJheShyZGZUeXBlcykpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmRmVHlwZXMuZmlsdGVyKFxuICAgICAgKHQ6IGFueSkgPT5cbiAgICAgICAgdCAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNOYW1lZEluZGl2aWR1YWxcIiAmJlxuXHRcdCggKCEgKHR5cGVvZiB0ID09PSAnc3RyaW5nJykgfHwgIXQuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikpKVxuICAgICk7XG4gIH1cblxufVxuIiwgImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tIFwiLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4vRW50aXR5XCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb3BlcnR5IGV4dGVuZHMgRW50aXR5IHtcbiAgZ2V0UGFyZW50cygpOiBSZWlmaWVkPGFueT5bXSB7XG4gICAgcmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55PihcbiAgICAgIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJQcm9wZXJ0eU9mXCJdXG4gICAgKTtcbiAgfVxuICBnZXRTdXBlckVudGl0aWVzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3N1YlByb3BlcnR5T2ZcIl1cbiAgICApO1xuICB9XG4gIGdldEVxdWl2YWxlbnRzKCk6IFJlaWZpZWQ8YW55PltdIHtcbiAgICByZXR1cm4gUmVpZmllZC5mcm9tSnNvbjxhbnk+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjZXF1aXZhbGVudFByb3BlcnR5XCJdXG4gICAgKTtcbiAgfVxuXG5cbiAgZ2V0RGlzam9pbnRXaXRoKCkge1xuXHRyZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3Byb3BlcnR5RGlzam9pbnRXaXRoJ10pXG4gIH1cblxuICBnZXRJbnZlcnNlT2YoKSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjaW52ZXJzZU9mXCJdKTtcbiAgfVxuXG4gIGdldERvbWFpbigpIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNkb21haW4nXSlcbiAgfVxuXG4gIGdldFJhbmdlKCkge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1snaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI3JhbmdlJ10pXG4gIH1cblxuICBnZXRQcm9wZXJ0eUNoYWlucygpOlJlaWZpZWQ8YW55PltdIHtcblx0cmV0dXJuIFJlaWZpZWQuZnJvbUpzb248YW55Pihcblx0XHR0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNwcm9wZXJ0eUNoYWluQXhpb21cIl1cblx0KVxuICB9XG5cbn1cbiIsICJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSBcIi4uL2FwcC91dGlsXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi9SZWlmaWVkXCI7XG5pbXBvcnQgVGhpbmcgZnJvbSBcIi4vVGhpbmdcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT250b2xvZ3kgZXh0ZW5kcyBUaGluZyB7XG4gIGdldE9udG9sb2d5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wib250b2xvZ3lJZFwiXTtcbiAgfVxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgbGV0IG5hbWVzID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wibGFiZWxcIl0gfHwgdGhpcy5wcm9wZXJ0aWVzW1widGl0bGVcIl0gfHwgXCJcIlxuICAgICk7XG4gICAgcmV0dXJuIChuYW1lc1swXSAmJiBuYW1lc1swXS52YWx1ZSkgfHwgdGhpcy5nZXRPbnRvbG9neUlkKCk7XG4gIH1cbiAgZ2V0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICBsZXQgZGVzY3JpcHRpb25zID0gUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KFxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiZGVmaW5pdGlvblwiXSB8fCB0aGlzLnByb3BlcnRpZXNbXCJkZXNjcmlwdGlvblwiXSB8fCBcIlwiXG4gICAgKTtcbiAgICByZXR1cm4gKGRlc2NyaXB0aW9uc1swXSAmJiBkZXNjcmlwdGlvbnNbMF0udmFsdWUpIHx8IFwiXCI7XG4gIH1cbiAgZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJzb3VyY2VGaWxlVGltZXN0YW1wXCJdO1xuICB9XG4gIGdldE51bUVudGl0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mRW50aXRpZXNcIl0pO1xuICB9XG4gIGdldE51bUNsYXNzZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZDbGFzc2VzXCJdKTtcbiAgfVxuICBnZXROdW1Qcm9wZXJ0aWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRoaXMucHJvcGVydGllc1tcIm51bWJlck9mUHJvcGVydGllc1wiXSk7XG4gIH1cbiAgZ2V0TnVtSW5kaXZpZHVhbHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5wcm9wZXJ0aWVzW1wibnVtYmVyT2ZJbmRpdmlkdWFsc1wiXSk7XG4gIH1cbiAgZ2V0TG9nb1VSTCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJkZXBpY3RlZF9ieVwiXSB8fCB1bmRlZmluZWQ7XG4gIH1cbiAgZ2V0T250b2xvZ3lQdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcIm9udG9sb2d5X3B1cmxcIl07XG4gIH1cbiAgZ2V0SG9tZXBhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wiaG9tZXBhZ2VcIl07XG4gIH1cbiAgZ2V0TWFpbGluZ0xpc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1wibWFpbGluZ19saXN0XCJdO1xuICB9XG4gIGdldFRyYWNrZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzW1widHJhY2tlclwiXTtcbiAgfVxuICBnZXRWZXJzaW9uSXJpKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI3ZlcnNpb25JUklcIl07XG4gIH1cbiAgZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXNbXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCN2ZXJzaW9uSW5mb1wiXTtcbiAgfVxuICBnZXRWZXJzaW9uRnJvbUlyaSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb25JcmkgPVxuICAgICAgdGhpcy5wcm9wZXJ0aWVzW1wiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjdmVyc2lvbklSSVwiXTtcbiAgICBpZiAoIXZlcnNpb25JcmkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZlcnNpb25Gcm9tRGF0ZSA9IHZlcnNpb25JcmkubWF0Y2goL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Lyk7XG5cbiAgICBpZiAodmVyc2lvbkZyb21EYXRlICYmIHZlcnNpb25Gcm9tRGF0ZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbkZyb21EYXRlWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2ZXJzaW9uRnJvbU51bWJlciA9IHZlcnNpb25JcmkubWF0Y2goL1xcL3ZbZC5dLipcXC8vKTtcbiAgICAgIHJldHVybiB2ZXJzaW9uRnJvbU51bWJlclxuICAgICAgICA/IHZlcnNpb25Gcm9tTnVtYmVyWzBdLnJlcGxhY2VBbGwoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCJ2XCIsIFwiXCIpXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gIH1cbiAgZ2V0TG9hZGVkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1tcImxvYWRlZFwiXTtcbiAgfVxuICBnZXRBbm5vdGF0aW9uUHJlZGljYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGFubm90YXRpb25QcmVkaWNhdGVzID0gbmV3IFNldCgpO1xuXG4gICAgZm9yIChsZXQgcHJlZGljYXRlIG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydGllcykpIHtcbiAgICAgIC8vIHByb3BlcnRpZXMgd2l0aG91dCBhbiBJUkkgYXJlIHRoaW5ncyB0aGF0IHdlcmUgYWRkZWQgYnkgcmRmMmpzb24gc28gc2hvdWxkIG5vdFxuICAgICAgLy8gYmUgaW5jbHVkZWQgYXMgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChwcmVkaWNhdGUuaW5kZXhPZihcIjovL1wiKSA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAocHJlZGljYXRlID09PSBcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9JQU9fMDAwMDcwMFwiKSB7XG4gICAgICAgIC8vIFwiaGFzIHByZWZlcnJlZCByb290IHRlcm1cIlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYW55dGhpbmcgaW4gdGhlIHJkZiwgcmRmcywgb3dsIG5hbWVzcGFjZXMgYXJlbid0IGNvbnNpZGVyZWQgYW5ub3RhdGlvbnNcbiAgICAgIGlmIChcbiAgICAgICAgIShcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNcIikgfHxcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIikgfHxcbiAgICAgICAgICBwcmVkaWNhdGUuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDcvb3dsI1wiKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgYW5ub3RhdGlvblByZWRpY2F0ZXMuYWRkKHByZWRpY2F0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW5ub3RhdGlvblByZWRpY2F0ZXMpIGFzIHN0cmluZ1tdO1xuICB9XG4gIGdldFByZWZlcnJlZFJvb3RzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gYXNBcnJheSh0aGlzLnByb3BlcnRpZXNbXCJoYXNQcmVmZXJyZWRSb290XCJdKTtcbiAgfVxuICBnZXRMYW5ndWFnZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBhc0FycmF5KHRoaXMucHJvcGVydGllc1tcImxhbmd1YWdlXCJdKTtcbiAgfVxuICBnZXRJbXBvcnRzRnJvbSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiaW1wb3J0c0Zyb21cIl0pO1xuICB9XG4gIGdldEV4cG9ydHNUbygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkodGhpcy5wcm9wZXJ0aWVzW1wiZXhwb3J0c1RvXCJdKTtcbiAgfVxufVxuIiwgImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IE11bHRpbWFwIGZyb20gXCJtdWx0aW1hcFwiO1xuaW1wb3J0IEVudGl0eSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvRW50aXR5XCI7XG5cbi8qIFVuZmxhdHRlbnMgYSBsaXN0IG9mIGVudGl0aWVzIGludG86XG4gKlx0LSBBIGxpc3Qgb2Ygcm9vdCBlbnRpdGllc1xuICogXHQtIEEgbWFwcGluZyBvZiBVUkkgdG8gbGlzdCBvZiBjaGlsZCBlbnRpdGllc1xuICpcbiAqIFVzZWQgYnkgRW50aXR5VHJlZSBhbmQgRW50aXR5R3JhcGhcbiAqL1xuXG4gaW50ZXJmYWNlIFBhcmVudENoaWxkUmVsYXRpb24ge1xuXHRwYXJlbnQ6RW50aXR5LFxuXHRjaGlsZDpFbnRpdHlcblx0cGFyZW50UmVsYXRpb25Ub0NoaWxkOnN0cmluZ3xudWxsXG5cdGNoaWxkUmVsYXRpb25Ub1BhcmVudDpzdHJpbmd8bnVsbFxuIH1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXh0cmFjdEVudGl0eUhpZXJhcmNoeShlbnRpdGllczogRW50aXR5W10pOiB7XG4gIHJvb3RFbnRpdGllczogRW50aXR5W107XG4gIHBhcmVudFRvQ2hpbGRSZWxhdGlvbnM6IE11bHRpbWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbj47XG59IHtcbiAgbGV0IGNoaWxkVG9QYXJlbnRSZWxhdGlvbnM6IE11bHRpbWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbj4gPSBuZXcgTXVsdGltYXAoKTtcblxuICBsZXQgdXJpVG9Ob2RlOiBNYXA8c3RyaW5nLCBFbnRpdHk+ID0gbmV3IE1hcCgpO1xuICBmb3IgKGxldCBlbnRpdHkgb2YgZW50aXRpZXMpIHtcbiAgICB1cmlUb05vZGUuc2V0KGVudGl0eS5nZXRJcmkoKSwgZW50aXR5KTtcbiAgfVxuXG4gIGZvciAobGV0IGVudGl0eSBvZiBlbnRpdGllcykge1xuICAgIGlmIChpc1RvcChlbnRpdHkuZ2V0SXJpKCkpKSBjb250aW51ZTtcblxuICAgIGZvciAobGV0IHBhcmVudFJlbGF0aW9uIG9mIGVudGl0eS5nZXRQYXJlbnRzKCkpIHtcblxuICAgICAgbGV0IHBhcmVudElyaSA9IHBhcmVudFJlbGF0aW9uLnZhbHVlO1xuICAgICAgbGV0IHBhcmVudEVudGl0eSA9IHVyaVRvTm9kZS5nZXQocGFyZW50SXJpKTtcblxuICAgICAgaWYgKGlzVG9wKHBhcmVudElyaSkpIGNvbnRpbnVlO1xuXG4gICAgICBpZighIChwYXJlbnRFbnRpdHkgaW5zdGFuY2VvZiBFbnRpdHkpKSB7XG5cdGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGFyZW50UmVsYXRpb25Ub0NoaWxkLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnRcblxuICAgICAgaWYoZW50aXR5LmdldFR5cGUoKSA9PT0gJ2luZGl2aWR1YWwnKSB7XG5cblx0Ly8gSW4gdGhlIGNhc2Ugb2YgaW5kaXZpZHVhbHMsIHRoZSBjaGlsZC0+cGFyZW50IHJlbGF0aW9uc2hpcCBpcyBhbHdheXNcblx0Ly8gcmRmOnR5cGUgYW5kIHRoZXJlIGlzIG5vIGV4cGxpY2l0IHBhcmVudC0+Y2hpbGQgcmVsYXRpb25zaGlwLlxuXG5cdGNoaWxkUmVsYXRpb25Ub1BhcmVudCA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjdHlwZSdcblx0cGFyZW50UmVsYXRpb25Ub0NoaWxkID0gbnVsbFxuXG4gICAgICB9IGVsc2UgaWYoZW50aXR5LmdldFR5cGUoKSA9PSAnY2xhc3MnKSB7XG5cblx0Ly8gSW4gdGhlIGNhc2Ugb2YgY2xhc3NlcywgdGhlIHJlbGF0aW9ucyBhcmUgcHJvdmlkZWQgaW4gdGhlIG1ldGFkYXRhLlxuXG5cdHBhcmVudFJlbGF0aW9uVG9DaGlsZCA9IFxuXHRcdHBhcmVudFJlbGF0aW9uLmdldE1ldGFkYXRhKClcblx0XHRcdCYmIHBhcmVudFJlbGF0aW9uLmdldE1ldGFkYXRhKClbJ3BhcmVudFJlbGF0aW9uVG9DaGlsZCddIFxuXHRcdFx0JiYgcGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVsncGFyZW50UmVsYXRpb25Ub0NoaWxkJ11bMF07XG5cblx0Y2hpbGRSZWxhdGlvblRvUGFyZW50ID0gXG5cdFx0cGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVxuXHRcdFx0JiYgcGFyZW50UmVsYXRpb24uZ2V0TWV0YWRhdGEoKVsnY2hpbGRSZWxhdGlvblRvUGFyZW50J10gXG5cdFx0XHQmJiBwYXJlbnRSZWxhdGlvbi5nZXRNZXRhZGF0YSgpWydjaGlsZFJlbGF0aW9uVG9QYXJlbnQnXVswXTtcblxuICAgICAgfSBlbHNlIHtcblxuXHQvLyBJbiB0aGUgY2FzZSBvZiBwcm9wZXJ0aWVzLCB0aGVyZSBhcmUgbm8gcmVsYXRpb25zIHRvIHNob3cuXG5cdC8vIChpdCB3b3VsZCBhbHdheXMgYmUganVzdCBzdWJQcm9wZXJ0eU9mKVxuXHQvL1xuXG4gICAgICB9XG5cbiAgICAgIGxldCByZWxhdGlvbiA9IHtcblx0cGFyZW50OiBwYXJlbnRFbnRpdHksXG5cdGNoaWxkOiBlbnRpdHksXG5cdHBhcmVudFJlbGF0aW9uVG9DaGlsZCxcblx0Y2hpbGRSZWxhdGlvblRvUGFyZW50XG4gICAgICB9XG5cbiAgICAgIGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuc2V0KGVudGl0eS5nZXRJcmkoKSwgcmVsYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBicmVha0N5Y2xlcyA9IGZ1bmN0aW9uIChjdXJyZW50SXJpOnN0cmluZywgdmlzaXRlZElyaXM6IFNldDxzdHJpbmc+KSB7XG4gICAgdmlzaXRlZElyaXMuYWRkKGN1cnJlbnRJcmkpO1xuXG4gICAgbGV0IHBhcmVudFJlbGF0aW9ucyA9IGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuZ2V0KGN1cnJlbnRJcmkpO1xuICAgIGlmIChwYXJlbnRSZWxhdGlvbnMpIHtcbiAgICAgIGZvciAobGV0IHBhcmVudFJlbGF0aW9uIG9mIHBhcmVudFJlbGF0aW9ucykge1xuICAgICAgICBpZiAodmlzaXRlZElyaXMuaGFzKHBhcmVudFJlbGF0aW9uLnBhcmVudC5nZXRJcmkoKSkpIHtcbiAgICAgICAgICAvLyB3ZSBhbHJlYWR5IHNhdyB0aGlzIHBhcmVudCwgcmVtb3ZlIGl0XG5cdCAgY2hpbGRUb1BhcmVudFJlbGF0aW9ucy5kZWxldGUoY3VycmVudElyaSwgcGFyZW50UmVsYXRpb24pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWtDeWNsZXMocGFyZW50UmVsYXRpb24ucGFyZW50LmdldElyaSgpLCBuZXcgU2V0KHZpc2l0ZWRJcmlzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gYnJlYWsgY3ljbGVzIHN0YXJ0aW5nIGZyb20gbGVhZiBlbnRpdGllc1xuICBmb3IgKGxldCBlbnRpdHkgb2YgZW50aXRpZXMpIHtcbiAgICBicmVha0N5Y2xlcyhlbnRpdHkuZ2V0SXJpKCksIG5ldyBTZXQoKSk7XG4gIH1cblxuICBsZXQgcGFyZW50VG9DaGlsZFJlbGF0aW9uczogTXVsdGltYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uPiA9IG5ldyBNdWx0aW1hcCgpO1xuXG4gIGZvcihsZXQgY2hpbGRJcmkgb2YgQXJyYXkuZnJvbShjaGlsZFRvUGFyZW50UmVsYXRpb25zLmtleXMoKSkpIHtcbiAgXHRsZXQgcmVsYXRpb25zID0gY2hpbGRUb1BhcmVudFJlbGF0aW9ucy5nZXQoY2hpbGRJcmkpO1xuXHRmb3IobGV0IHIgb2YgcmVsYXRpb25zKSB7XG5cdFx0cGFyZW50VG9DaGlsZFJlbGF0aW9ucy5zZXQoci5wYXJlbnQuZ2V0SXJpKCksIHIpXG5cdH1cbiAgfVxuXG4gIGxldCByb290RW50aXRpZXMgPSBlbnRpdGllcy5maWx0ZXIoKG5vZGUpID0+IHtcbiAgICBpZiAoaXNUb3Aobm9kZS5nZXRJcmkoKSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKGNoaWxkVG9QYXJlbnRSZWxhdGlvbnMuZ2V0KG5vZGUuZ2V0SXJpKCkpIHx8IFtdKS5sZW5ndGggPT09IDA7XG4gIH0pO1xuXG4gIHJldHVybiB7IHJvb3RFbnRpdGllcywgcGFyZW50VG9DaGlsZFJlbGF0aW9ucyB9O1xufVxuXG5mdW5jdGlvbiBpc1RvcChpcmkpIHtcbiAgcmV0dXJuIChcbiAgICBpcmkgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjVGhpbmdcIiB8fFxuICAgIGlyaSA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNUb3BPYmplY3RQcm9wZXJ0eVwiXG4gICk7XG59XG4iLCAiaW1wb3J0IEVudGl0eSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvRW50aXR5XCI7XG5pbXBvcnQgT250b2xvZ3kgZnJvbSBcIi4uLy4uLy4uL21vZGVsL09udG9sb2d5XCI7XG5pbXBvcnQgZXh0cmFjdEVudGl0eUhpZXJhcmNoeSBmcm9tIFwiLi9leHRyYWN0RW50aXR5SGllcmFyY2h5XCI7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gXCIuLi9vbnRvbG9naWVzU2xpY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVHJlZUZyb21FbnRpdGllcyhcbiAgZW50aXRpZXM6IEVudGl0eVtdLFxuICBwcmVmZXJyZWRSb290czogYm9vbGVhbixcbiAgb250b2xvZ3k6IE9udG9sb2d5XG4pOiB7IGFsbE5vZGVzOlRyZWVOb2RlW10sIHJvb3ROb2RlczogVHJlZU5vZGVbXTsgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXM6U2V0PHN0cmluZz4sIG5vZGVDaGlsZHJlbjogYW55IH0ge1xuICBsZXQgeyByb290RW50aXRpZXMsIHBhcmVudFRvQ2hpbGRSZWxhdGlvbnMgfSA9IGV4dHJhY3RFbnRpdHlIaWVyYXJjaHkoZW50aXRpZXMpO1xuXG4gIGNvbnNvbGUubG9nKCdyb290RW50aXRpZXMnKVxuICBjb25zb2xlLmRpcihyb290RW50aXRpZXMpXG4gIGNvbnNvbGUubG9nKCdwYXJlbnRUb0NoaWxkUmVsYXRpb25zJylcbiAgY29uc29sZS5kaXIocGFyZW50VG9DaGlsZFJlbGF0aW9ucylcblxuICBpZiAocHJlZmVycmVkUm9vdHMpIHtcbiAgICBsZXQgcHJlZmVycmVkID0gb250b2xvZ3kuZ2V0UHJlZmVycmVkUm9vdHMoKTtcbiAgICBpZiAocHJlZmVycmVkLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBwcmVmZXJyZWRSb290RW50aXRpZXMgPSBwcmVmZXJyZWQubWFwKFxuICAgICAgICAoaXJpKSA9PiBlbnRpdGllcy5maWx0ZXIoKGVudGl0eSkgPT4gZW50aXR5LmdldElyaSgpID09PSBpcmkpWzBdXG4gICAgICApO1xuICAgICAgcm9vdEVudGl0aWVzID0gcHJlZmVycmVkUm9vdEVudGl0aWVzLmZpbHRlcigoZW50aXR5KSA9PiAhIWVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IGFsbE5vZGVzOlRyZWVOb2RlW10gPSBbXVxuICBsZXQgbm9kZUNoaWxkcmVuOiBhbnkgPSB7fTtcbiAgbGV0IGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzOlNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG5cbiAgcmV0dXJuIHtcbiAgICBhbGxOb2RlczogYWxsTm9kZXMsXG4gICAgcm9vdE5vZGVzOiByb290RW50aXRpZXMubWFwKChyb290RW50aXR5KSA9PlxuICAgICAgY3JlYXRlVHJlZU5vZGUocm9vdEVudGl0eSwgdW5kZWZpbmVkLCAwLCBudWxsLCBudWxsKVxuICAgICksXG4gICAgbm9kZUNoaWxkcmVuLFxuICAgIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzXG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlVHJlZU5vZGUoXG4gICAgbm9kZTogRW50aXR5LFxuICAgIHBhcmVudDogVHJlZU5vZGUgfCB1bmRlZmluZWQsXG4gICAgZGVidWdOdW1JdGVyYXRpb25zOiBudW1iZXIsXG4gICAgcGFyZW50UmVsYXRpb25Ub0NoaWxkOnN0cmluZ3xudWxsLFxuICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudDpzdHJpbmd8bnVsbCxcbiAgKTogVHJlZU5vZGUge1xuICAgIGlmIChkZWJ1Z051bUl0ZXJhdGlvbnMgPiAxMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInByb2JhYmxlIGN5Y2xpYyB0cmVlIChjcmVhdGVUcmVlTm9kZSlcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBwYXJlbnRUb0NoaWxkUmVsYXRpb25zLmdldChub2RlLmdldElyaSgpKSB8fCBbXTtcblxuICAgIGNvbnN0IHRyZWVOb2RlOiBUcmVlTm9kZSA9IHtcbiAgICAgIGFic29sdXRlSWRlbnRpdHk6IHBhcmVudFxuICAgICAgICA/IHBhcmVudC5hYnNvbHV0ZUlkZW50aXR5ICsgXCI7XCIgKyBub2RlLmdldElyaSgpXG4gICAgICAgIDogbm9kZS5nZXRJcmkoKSxcbiAgICAgIGlyaTogbm9kZS5nZXRJcmkoKSxcbiAgICAgIHRpdGxlOiBub2RlLmdldE5hbWUoKSxcbiAgICAgIGV4cGFuZGFibGU6IG5vZGUuaGFzQ2hpbGRyZW4oKSxcbiAgICAgIGVudGl0eTogbm9kZSxcbiAgICAgIG51bURlc2NlbmRhbnRzOlxuICAgICAgICBub2RlLmdldE51bUhpZXJhcmNoaWNhbERlc2NlbmRhbnRzKCkgfHwgbm9kZS5nZXROdW1EZXNjZW5kYW50cygpLFxuICAgICAgcGFyZW50UmVsYXRpb25Ub0NoaWxkLFxuICAgICAgY2hpbGRSZWxhdGlvblRvUGFyZW50XG4gICAgfTtcblxuICAgIGFsbE5vZGVzLnB1c2godHJlZU5vZGUpXG5cbiAgICBub2RlQ2hpbGRyZW5bdHJlZU5vZGUuYWJzb2x1dGVJZGVudGl0eV0gPSBjaGlsZE5vZGVzLm1hcCgoY2hpbGROb2RlKSA9PlxuICAgICAgY3JlYXRlVHJlZU5vZGUoY2hpbGROb2RlLmNoaWxkLCB0cmVlTm9kZSwgZGVidWdOdW1JdGVyYXRpb25zICsgMSwgY2hpbGROb2RlLnBhcmVudFJlbGF0aW9uVG9DaGlsZCwgY2hpbGROb2RlLmNoaWxkUmVsYXRpb25Ub1BhcmVudClcbiAgICApO1xuXG4gICAgaWYobm9kZS5oYXNDaGlsZHJlbigpICYmIGNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuXHRhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlcy5hZGQodHJlZU5vZGUuYWJzb2x1dGVJZGVudGl0eSlcbiAgICB9XG5cbiAgICByZXR1cm4gdHJlZU5vZGU7XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBjcmVhdGVBY3Rpb24sXG4gIGNyZWF0ZUFzeW5jVGh1bmssXG4gIGNyZWF0ZVNsaWNlLFxuICBQYXlsb2FkQWN0aW9uLFxufSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2V0LCBnZXRQYWdpbmF0ZWQsIFBhZ2UgfSBmcm9tIFwiLi4vLi4vYXBwL2FwaVwiO1xuaW1wb3J0IHsgbWFwVG9BcGlQYXJhbXMsIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzIH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi8uLi9tb2RlbC9FbnRpdHlcIjtcbmltcG9ydCBPbnRvbG9neSBmcm9tIFwiLi4vLi4vbW9kZWwvT250b2xvZ3lcIjtcbmltcG9ydCBjcmVhdGVUcmVlRnJvbUVudGl0aWVzIGZyb20gXCIuL2VudGl0aWVzL2NyZWF0ZVRyZWVGcm9tRW50aXRpZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBPbnRvbG9naWVzU3RhdGUge1xuICBvbnRvbG9neTogT250b2xvZ3kgfCB1bmRlZmluZWQ7XG4gIGVudGl0eTogRW50aXR5IHwgdW5kZWZpbmVkO1xuICBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZDogc3RyaW5nW107XG4gIG5vZGVDaGlsZHJlbjogYW55O1xuICByb290Tm9kZXM6IFRyZWVOb2RlW107XG4gIG9udG9sb2dpZXM6IE9udG9sb2d5W107XG4gIHRvdGFsT250b2xvZ2llczogbnVtYmVyO1xuICBlbnRpdGllczogRW50aXR5W107XG4gIHRvdGFsRW50aXRpZXM6IG51bWJlcjtcbiAgbG9hZGluZ09udG9sb2dpZXM6IGJvb2xlYW47XG4gIGxvYWRpbmdFbnRpdGllczogYm9vbGVhbjtcbiAgbnVtUGVuZGluZ1RyZWVSZXF1ZXN0czogbnVtYmVyO1xuICBsb2FkaW5nT250b2xvZ3k6IGJvb2xlYW47XG4gIGxvYWRpbmdFbnRpdHk6IGJvb2xlYW47XG4gIGNsYXNzSW5zdGFuY2VzOiBQYWdlPEVudGl0eT4gfCBudWxsO1xuICBsb2FkaW5nQ2xhc3NJbnN0YW5jZXM6IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzOiBzdHJpbmdbXTtcbiAgbWFudWFsbHlFeHBhbmRlZE5vZGVzOiBzdHJpbmdbXTtcbiAgcHJlZmVycmVkUm9vdHM6IGJvb2xlYW47XG4gIGRpc3BsYXlPYnNvbGV0ZTogYm9vbGVhbjtcbiAgZGlzcGxheVNpYmxpbmdzOiBib29sZWFuO1xuICBkaXNwbGF5Q291bnRzOiBib29sZWFuO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZU5vZGUge1xuICBhYnNvbHV0ZUlkZW50aXR5OiBzdHJpbmc7IC8vIHRoZSBJUklzIG9mIHRoaXMgbm9kZSBhbmQgaXRzIGFuY2VzdG9ycyBkZWxpbWl0ZWQgYnkgYSA7XG4gIGlyaTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xuICBlbnRpdHk6IEVudGl0eTtcbiAgbnVtRGVzY2VuZGFudHM6IG51bWJlcjtcbiAgcGFyZW50UmVsYXRpb25Ub0NoaWxkOiBzdHJpbmcgfCBudWxsOyAvLyBpZiBhcHBsaWNhYmxlLCByZWxhdGlvbiBmcm9tIHRoZSBwYXJlbnQgbm9kZSB0byB0aGlzIG5vZGUgKGUuZy4gaGFzX3BhcnQpXG4gIGNoaWxkUmVsYXRpb25Ub1BhcmVudDogc3RyaW5nIHwgbnVsbDsgLy8gaWYgYXBwbGljYWJsZSwgcmVsYXRpb24gZnJvbSB0aGlzIG5vZGUgdG8gdGhlIHBhcmVudCBub2RlIChlLmcuIHBhcnRfb2YpXG59XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogT250b2xvZ2llc1N0YXRlID0ge1xuICBvbnRvbG9neTogdW5kZWZpbmVkLFxuICBlbnRpdHk6IHVuZGVmaW5lZCxcbiAgbm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQ6IFtdLFxuICBub2RlQ2hpbGRyZW46IHt9LFxuICByb290Tm9kZXM6IFtdLFxuICBvbnRvbG9naWVzOiBbXSxcbiAgdG90YWxPbnRvbG9naWVzOiAwLFxuICBlbnRpdGllczogW10sXG4gIHRvdGFsRW50aXRpZXM6IDAsXG4gIGxvYWRpbmdPbnRvbG9naWVzOiBmYWxzZSxcbiAgbG9hZGluZ0VudGl0aWVzOiBmYWxzZSxcbiAgbnVtUGVuZGluZ1RyZWVSZXF1ZXN0czogMCxcbiAgbG9hZGluZ09udG9sb2d5OiBmYWxzZSxcbiAgbG9hZGluZ0VudGl0eTogZmFsc2UsXG4gIGNsYXNzSW5zdGFuY2VzOiBudWxsLFxuICBsb2FkaW5nQ2xhc3NJbnN0YW5jZXM6IGZhbHNlLFxuICBhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlczogW10sXG4gIG1hbnVhbGx5RXhwYW5kZWROb2RlczogW10sXG4gIHByZWZlcnJlZFJvb3RzOiBmYWxzZSxcbiAgZGlzcGxheU9ic29sZXRlOiBmYWxzZSxcbiAgZGlzcGxheVNpYmxpbmdzOiBmYWxzZSxcbiAgZGlzcGxheUNvdW50czogdHJ1ZSxcbiAgZXJyb3JNZXNzYWdlOiBcIlwiLFxufTtcblxuZXhwb3J0IGNvbnN0IHJlc2V0VHJlZUNvbnRlbnQgPSBjcmVhdGVBY3Rpb24oXCJvbnRvbG9naWVzX3RyZWVfcmVzZXRfY29udGVudFwiKTtcbmV4cG9ydCBjb25zdCByZXNldFRyZWVTZXR0aW5ncyA9IGNyZWF0ZUFjdGlvbjx7XG4gIGVudGl0eVR5cGU6IHN0cmluZztcbiAgc2VsZWN0ZWRFbnRpdHk/OiBFbnRpdHk7XG59PihcIm9udG9sb2dpZXNfdHJlZV9yZXNldF9zZXR0aW5nc1wiKTtcblxuZXhwb3J0IGNvbnN0IGVuYWJsZVByZWZlcnJlZFJvb3RzID0gY3JlYXRlQWN0aW9uKFxuICBcIm9udG9sb2dpZXNfcHJlZmVycmVkX2VuYWJsZWRcIlxuKTtcbmV4cG9ydCBjb25zdCBkaXNhYmxlUHJlZmVycmVkUm9vdHMgPSBjcmVhdGVBY3Rpb24oXG4gIFwib250b2xvZ2llc19wcmVmZXJyZWRfZGlzYWJsZWRcIlxuKTtcbmV4cG9ydCBjb25zdCBvcGVuTm9kZSA9IGNyZWF0ZUFjdGlvbjxUcmVlTm9kZT4oXCJvbnRvbG9naWVzX25vZGVfb3BlblwiKTtcbmV4cG9ydCBjb25zdCBjbG9zZU5vZGUgPSBjcmVhdGVBY3Rpb248VHJlZU5vZGU+KFwib250b2xvZ2llc19ub2RlX2Nsb3NlXCIpO1xuXG5leHBvcnQgY29uc3Qgc2hvd09ic29sZXRlID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19zaG93X29ic29sZXRlXCIpO1xuZXhwb3J0IGNvbnN0IGhpZGVPYnNvbGV0ZSA9IGNyZWF0ZUFjdGlvbihcIm9udG9sb2dpZXNfaGlkZV9vYnNvbGV0ZVwiKTtcblxuZXhwb3J0IGNvbnN0IHNob3dTaWJsaW5ncyA9IGNyZWF0ZUFjdGlvbihcIm9udG9sb2dpZXNfc2hvd19zaWJsaW5nc1wiKTtcbmV4cG9ydCBjb25zdCBoaWRlU2libGluZ3MgPSBjcmVhdGVBY3Rpb24oXCJvbnRvbG9naWVzX2hpZGVfc2libGluZ3NcIik7XG5cbmV4cG9ydCBjb25zdCBzaG93Q291bnRzID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19zaG93X2NvdW50c1wiKTtcbmV4cG9ydCBjb25zdCBoaWRlQ291bnRzID0gY3JlYXRlQWN0aW9uKFwib250b2xvZ2llc19oaWRlX2NvdW50c1wiKTtcblxuZXhwb3J0IGNvbnN0IGdldE9udG9sb2d5ID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX29udG9sb2d5XCIsXG4gIGFzeW5jIChcbiAgICB7XG4gICAgICBvbnRvbG9neUlkLFxuICAgICAgbGFuZyxcbiAgICAgIGFwaVVybCxcbiAgICB9OiB7IG9udG9sb2d5SWQ6IHN0cmluZzsgbGFuZzogc3RyaW5nOyBhcGlVcmw/OiBzdHJpbmcgfSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfWA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9udG9sb2d5UHJvcGVydGllcyA9IGF3YWl0IGdldDxhbnk+KHBhdGgsIHsgbGFuZyB9LCBhcGlVcmwpO1xuICAgICAgcmV0dXJuIG5ldyBPbnRvbG9neShvbnRvbG9neVByb3BlcnRpZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiByZWplY3RXaXRoVmFsdWUoYEVycm9yIGFjY2Vzc2luZzogJHtwYXRofTsgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRFbnRpdHlXaXRoVHlwZSA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19lbnRpdHlfdHlwZVwiLFxuICBhc3luYyAoXG4gICAge1xuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIGVudGl0eVR5cGUsXG4gICAgICBlbnRpdHlJcmksXG4gICAgICBzZWFyY2hQYXJhbXMsXG4gICAgfToge1xuICAgICAgb250b2xvZ3lJZDogc3RyaW5nO1xuICAgICAgZW50aXR5VHlwZTogc3RyaW5nO1xuICAgICAgZW50aXR5SXJpOiBzdHJpbmc7XG4gICAgICBzZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcztcbiAgICB9LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgYXBpU2VhcmNoUGFyYW1zID0gbWFwVG9BcGlQYXJhbXMoc2VhcmNoUGFyYW1zKTtcbiAgICBjb25zdCBkb3VibGVFbmNvZGVkVGVybVVyaSA9IGVuY29kZVVSSUNvbXBvbmVudChcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbnRpdHlJcmkpXG4gICAgKTtcbiAgICBsZXQgcGF0aCA9IFwiXCI7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBlbnRpdHlKc29uUHJvcGVydGllcyA9IG51bGw7XG4gICAgICBpZiAoZW50aXR5SXJpKSB7XG4gICAgICAgIHBhdGggPSBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke2VudGl0eVR5cGV9LyR7ZG91YmxlRW5jb2RlZFRlcm1Vcml9PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICBhcGlTZWFyY2hQYXJhbXNcbiAgICAgICAgKX1gO1xuICAgICAgICBlbnRpdHlKc29uUHJvcGVydGllcyA9IGF3YWl0IGdldDxhbnk+KHBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZX0/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIGFwaVNlYXJjaFBhcmFtc1xuICAgICAgICApfWA7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihwYXRoKTtcbiAgICAgICAgaWYgKHJlc3VsdHMuZWxlbWVudHMubGVuZ3RoID09PSAxICYmIHJlc3VsdHMudG90YWxFbGVtZW50cyA9PT0gMSkge1xuICAgICAgICAgIGVudGl0eUpzb25Qcm9wZXJ0aWVzID0gcmVzdWx0cy5lbGVtZW50c1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKFxuICAgICAgICAgICAgYEVycm9yIGFjY2Vzc2luZzogJHtwYXRofTsgUmV0cmlldmVkIG5vbmRpc3RpbmN0IGVudGl0eTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgcmVzdWx0c1xuICAgICAgICAgICAgKX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKGVudGl0eUpzb25Qcm9wZXJ0aWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGBFcnJvciBhY2Nlc3Npbmc6ICR7cGF0aH07ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0RW50aXR5ID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2VudGl0eVwiLFxuICBhc3luYyAoXG4gICAge1xuICAgICAgb250b2xvZ3lJZCxcbiAgICAgIGVudGl0eUlyaSxcbiAgICB9OiB7XG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gICAgICBlbnRpdHlJcmk6IHN0cmluZztcbiAgICB9LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgZG91YmxlRW5jb2RlZFRlcm1VcmkgPSBlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICBlbmNvZGVVUklDb21wb25lbnQoZW50aXR5SXJpKVxuICAgICk7XG4gICAgbGV0IHBhdGggPSBcIlwiO1xuICAgIHRyeSB7XG4gICAgICBwYXRoID0gYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vZW50aXRpZXMvJHtkb3VibGVFbmNvZGVkVGVybVVyaX1gO1xuICAgICAgY29uc3QgZW50aXR5SnNvblByb3BlcnRpZXMgPSBhd2FpdCBnZXQ8YW55PihwYXRoKTtcbiAgICAgIHJldHVybiB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhlbnRpdHlKc29uUHJvcGVydGllcyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldENsYXNzSW5zdGFuY2VzID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2VudGl0eV9jbGFzc19pbnN0YW5jZXNcIixcbiAgYXN5bmMgKFxuICAgIHtcbiAgICAgIG9udG9sb2d5SWQsXG4gICAgICBjbGFzc0lyaSxcbiAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICB9OiB7XG4gICAgICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gICAgICBjbGFzc0lyaTogc3RyaW5nO1xuICAgICAgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXM7XG4gICAgfSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIGxldCBwYXRoID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgaWYgKGNsYXNzSXJpKSB7XG4gICAgICAgIGNvbnN0IGFwaVNlYXJjaFBhcmFtcyA9IG1hcFRvQXBpUGFyYW1zKHNlYXJjaFBhcmFtcyk7XG4gICAgICAgIGNvbnN0IGRvdWJsZUVuY29kZWRUZXJtVXJpID0gZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChjbGFzc0lyaSlcbiAgICAgICAgKTtcbiAgICAgICAgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXMvJHtkb3VibGVFbmNvZGVkVGVybVVyaX0vaW5zdGFuY2VzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICBhcGlTZWFyY2hQYXJhbXNcbiAgICAgICAgKX1gO1xuICAgICAgICBjb25zdCBpbnN0YW5jZXMgPSAoYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4ocGF0aCkpLm1hcCgoaSkgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhpKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2VzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShcbiAgICAgICAgICBgV2FybmluZyBhY2Nlc3Npbmc6ICR7cGF0aH07IENsYXNzIElSSSBub3QgcHJvdmlkZWRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldE9udG9sb2dpZXMgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfb250b2xvZ2llc1wiLFxuICBhc3luYyAoeyBwYWdlLCByb3dzUGVyUGFnZSwgc2VhcmNoIH06IGFueSwgeyByZWplY3RXaXRoVmFsdWUgfSkgPT4ge1xuICAgIGlmIChzZWFyY2gubGVuZ3RoID4gMSAmJiAhc2VhcmNoLmluY2x1ZGVzKFwiIFwiKSkgc2VhcmNoID0gXCIqXCIgKyBzZWFyY2ggKyBcIipcIjtcbiAgICBjb25zdCBwYXRoID0gYGFwaS92Mi9vbnRvbG9naWVzP3BhZ2U9JHtwYWdlfSZzaXplPSR7cm93c1BlclBhZ2V9JHtcbiAgICAgIHNlYXJjaCA/IFwiJnNlYXJjaD1cIiArIHNlYXJjaCA6IFwiXCJcbiAgICB9YDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihwYXRoKSkubWFwKChvKSA9PiBuZXcgT250b2xvZ3kobykpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldEVudGl0aWVzID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX2VudGl0aWVzXCIsXG4gIGFzeW5jIChcbiAgICB7IG9udG9sb2d5SWQsIGVudGl0eVR5cGUsIHBhZ2UsIHJvd3NQZXJQYWdlLCBzZWFyY2ggfTogYW55LFxuICAgIHsgcmVqZWN0V2l0aFZhbHVlIH1cbiAgKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZX0/cGFnZT0ke3BhZ2V9JnNpemU9JHtyb3dzUGVyUGFnZX0ke1xuICAgICAgc2VhcmNoID8gXCImc2VhcmNoPVwiICsgc2VhcmNoIDogXCJcIlxuICAgIH1gO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gKGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KHBhdGgpKS5tYXAoKGUpID0+XG4gICAgICAgIHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKGUpXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHJlamVjdFdpdGhWYWx1ZShgRXJyb3IgYWNjZXNzaW5nOiAke3BhdGh9OyAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4pO1xuZXhwb3J0IGNvbnN0IGdldEFuY2VzdG9ycyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwib250b2xvZ2llc19hbmNlc3RvcnNcIixcbiAgYXN5bmMgKHtcbiAgICBvbnRvbG9neUlkLFxuICAgIGVudGl0eVR5cGUsXG4gICAgZW50aXR5SXJpLFxuICAgIGxhbmcsXG4gICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICBhcGlVcmwsXG4gIH06IGFueSkgPT4ge1xuICAgIGNvbnN0IGRvdWJsZUVuY29kZWRVcmkgPSBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eUlyaSkpO1xuICAgIHZhciBhbmNlc3RvcnNQYWdlOiBhbnk7XG4gICAgaWYgKGVudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiKSB7XG4gICAgICBhbmNlc3RvcnNQYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXMvJHtkb3VibGVFbmNvZGVkVXJpfS9oaWVyYXJjaGljYWxBbmNlc3RvcnM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHsgc2l6ZTogXCIxMDAwXCIsIGxhbmcsIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYW5jZXN0b3JzUGFnZSA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS8ke2VudGl0eVR5cGV9LyR7ZG91YmxlRW5jb2RlZFVyaX0vYW5jZXN0b3JzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhcbiAgICAgICAgICB7IHNpemU6IFwiMTAwMFwiLCBsYW5nLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCB9XG4gICAgICAgICl9YCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcGlVcmxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBhbmNlc3RvcnNQYWdlLmVsZW1lbnRzLm1hcCgob2JqOiBhbnkpID0+XG4gICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgKTtcbiAgfVxuKTtcbmV4cG9ydCBjb25zdCBnZXRSb290RW50aXRpZXMgPSBjcmVhdGVBc3luY1RodW5rKFxuICBcIm9udG9sb2dpZXNfcm9vdHNcIixcbiAgYXN5bmMgKHtcbiAgICBvbnRvbG9neUlkLFxuICAgIGVudGl0eVR5cGUsXG4gICAgcHJlZmVycmVkUm9vdHMsXG4gICAgbGFuZyxcbiAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgIGFwaVVybCxcbiAgfTogYW55KSA9PiB7XG4gICAgaWYgKGVudGl0eVR5cGUgPT09IFwiaW5kaXZpZHVhbHNcIikge1xuICAgICAgY29uc3QgW2NsYXNzZXNXaXRoSW5kaXZpZHVhbHMsIG9ycGhhbmVkSW5kaXZpZHVhbHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS9jbGFzc2VzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgICBoYXNJbmRpdmlkdWFsczogXCJ0cnVlXCIsXG4gICAgICAgICAgICBzaXplOiBcIjEwMDBcIixcbiAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgICB9KX1gLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBhcGlVcmxcbiAgICAgICAgKSxcbiAgICAgICAgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vaW5kaXZpZHVhbHM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICAgIGhhc0RpcmVjdFBhcmVudDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgfSl9YCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgYXBpVXJsXG4gICAgICAgICksXG4gICAgICBdKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIHJvb3RUZXJtczogbnVsbCxcbiAgICAgICAgY2xhc3Nlc1dpdGhJbmRpdmlkdWFsczogY2xhc3Nlc1dpdGhJbmRpdmlkdWFscy5lbGVtZW50cy5tYXAoKG9iaikgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgICAgICksXG4gICAgICAgIG9ycGhhbmVkSW5kaXZpZHVhbHM6IG9ycGhhbmVkSW5kaXZpZHVhbHMuZWxlbWVudHMubWFwKChvYmopID0+XG4gICAgICAgICAgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMob2JqKVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGVudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiICYmIHByZWZlcnJlZFJvb3RzKSB7XG4gICAgICBjb25zdCByb290c1BhZ2UgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtlbnRpdHlUeXBlfT8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgIGlzUHJlZmVycmVkUm9vdDogXCJ0cnVlXCIsXG4gICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgbGFuZyxcbiAgICAgICAgICBpbmNsdWRlT2Jzb2xldGVFbnRpdGllczogc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgICAgICAgfSl9YCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhcGlVcmxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnRpdHlUeXBlLFxuICAgICAgICByb290VGVybXM6IHJvb3RzUGFnZS5lbGVtZW50cy5tYXAoKG9iaikgPT5cbiAgICAgICAgICB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhvYmopXG4gICAgICAgICksXG4gICAgICAgIGNsYXNzZXNXaXRoSW5kaXZpZHVhbHM6IG51bGwsXG4gICAgICAgIG9ycGhhbmVkSW5kaXZpZHVhbHM6IG51bGwsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb290c1BhZ2UgPSBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihcbiAgICAgICAgYGFwaS92Mi9vbnRvbG9naWVzLyR7b250b2xvZ3lJZH0vJHtlbnRpdHlUeXBlfT8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICAgIGhhc0RpcmVjdFBhcmVudDogXCJmYWxzZVwiLFxuICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgIH0pfWAsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpVXJsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgcm9vdFRlcm1zOiByb290c1BhZ2UuZWxlbWVudHMubWFwKChvYmopID0+XG4gICAgICAgICAgdGhpbmdGcm9tSnNvblByb3BlcnRpZXMob2JqKVxuICAgICAgICApLFxuICAgICAgICBjbGFzc2VzV2l0aEluZGl2aWR1YWxzOiBudWxsLFxuICAgICAgICBvcnBoYW5lZEluZGl2aWR1YWxzOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5leHBvcnQgY29uc3QgZ2V0Tm9kZUNoaWxkcmVuID0gY3JlYXRlQXN5bmNUaHVuayhcbiAgXCJvbnRvbG9naWVzX25vZGVfY2hpbGRyZW5cIixcbiAgYXN5bmMgKHtcbiAgICBvbnRvbG9neUlkLFxuICAgIGVudGl0eVR5cGVQbHVyYWwsXG4gICAgZW50aXR5SXJpLFxuICAgIGFic29sdXRlSWRlbnRpdHksXG4gICAgbGFuZyxcbiAgICBhcGlVcmwsXG4gICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gIH06IGFueSkgPT4ge1xuICAgIGNvbnN0IGRvdWJsZUVuY29kZWRVcmkgPSBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGVudGl0eUlyaSkpO1xuICAgIHZhciBjaGlsZHJlblBhZ2U6IGFueTtcbiAgICBpZiAoZW50aXR5VHlwZVBsdXJhbCA9PT0gXCJjbGFzc2VzXCIpIHtcbiAgICAgIGNoaWxkcmVuUGFnZSA9IGF3YWl0IGdldFBhZ2luYXRlZDxhbnk+KFxuICAgICAgICBgYXBpL3YyL29udG9sb2dpZXMvJHtvbnRvbG9neUlkfS9jbGFzc2VzLyR7ZG91YmxlRW5jb2RlZFVyaX0vaGllcmFyY2hpY2FsQ2hpbGRyZW4/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVudGl0eVR5cGVQbHVyYWwgPT09IFwiaW5kaXZpZHVhbHNcIikge1xuICAgICAgY2hpbGRyZW5QYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9L2NsYXNzZXMvJHtkb3VibGVFbmNvZGVkVXJpfS9pbnN0YW5jZXM/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNpemU6IFwiMTAwMFwiLFxuICAgICAgICAgICAgbGFuZyxcbiAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzOiBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgKX1gLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFwaVVybFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW5QYWdlID0gYXdhaXQgZ2V0UGFnaW5hdGVkPGFueT4oXG4gICAgICAgIGBhcGkvdjIvb250b2xvZ2llcy8ke29udG9sb2d5SWR9LyR7ZW50aXR5VHlwZVBsdXJhbH0vJHtkb3VibGVFbmNvZGVkVXJpfS9jaGlsZHJlbj8ke25ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2l6ZTogXCIxMDAwXCIsXG4gICAgICAgICAgICBsYW5nLFxuICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgfVxuICAgICAgICApfWAsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYXBpVXJsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWJzb2x1dGVJZGVudGl0eSxcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblBhZ2UuZWxlbWVudHNcbiAgICAgICAgLm1hcCgob2JqOiBhbnkpID0+IHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzKG9iaikpXG4gICAgICAgIC5tYXAoKHRlcm06IEVudGl0eSkgPT4ge1xuICAgICAgICAgIGxldCBwYXJlbnRob29kTWV0YWRhdGEgPVxuICAgICAgICAgICAgdGVybS5nZXRIaWVyYXJjaGljYWxQYXJlbnRSZWlmaWNhdGlvbkF4aW9tcyhlbnRpdHlJcmkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpcmk6IHRlcm0uZ2V0SXJpKCksXG4gICAgICAgICAgICBhYnNvbHV0ZUlkZW50aXR5OiBhYnNvbHV0ZUlkZW50aXR5ICsgXCI7XCIgKyB0ZXJtLmdldElyaSgpLFxuICAgICAgICAgICAgdGl0bGU6IHRlcm0uZ2V0TmFtZSgpLFxuICAgICAgICAgICAgZXhwYW5kYWJsZTogdGVybS5oYXNDaGlsZHJlbigpLFxuICAgICAgICAgICAgZW50aXR5OiB0ZXJtLFxuICAgICAgICAgICAgbnVtRGVzY2VuZGFudHM6XG4gICAgICAgICAgICAgIHRlcm0uZ2V0TnVtSGllcmFyY2hpY2FsRGVzY2VuZGFudHMoKSB8fCB0ZXJtLmdldE51bURlc2NlbmRhbnRzKCksXG4gICAgICAgICAgICBwYXJlbnRSZWxhdGlvblRvQ2hpbGQ6XG4gICAgICAgICAgICAgIChwYXJlbnRob29kTWV0YWRhdGEgJiZcbiAgICAgICAgICAgICAgICBwYXJlbnRob29kTWV0YWRhdGFbXCJwYXJlbnRSZWxhdGlvblRvQ2hpbGRcIl0/LlswXSkgfHxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGNoaWxkUmVsYXRpb25Ub1BhcmVudDpcbiAgICAgICAgICAgICAgKHBhcmVudGhvb2RNZXRhZGF0YSAmJlxuICAgICAgICAgICAgICAgIHBhcmVudGhvb2RNZXRhZGF0YVtcImNoaWxkUmVsYXRpb25Ub1BhcmVudFwiXT8uWzBdKSB8fFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH1cbik7XG5cbmNvbnN0IG9udG9sb2dpZXNTbGljZSA9IGNyZWF0ZVNsaWNlKHtcbiAgbmFtZTogXCJvbnRvbG9naWVzXCIsXG4gIGluaXRpYWxTdGF0ZSxcbiAgcmVkdWNlcnM6IHt9LFxuICBleHRyYVJlZHVjZXJzOiAoYnVpbGRlcikgPT4ge1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldE9udG9sb2d5LmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248T250b2xvZ3k+KSA9PiB7XG4gICAgICAgIHN0YXRlLm9udG9sb2d5ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdPbnRvbG9neSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldE9udG9sb2d5LnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ3kgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRPbnRvbG9neS5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLm9udG9sb2d5ID0gaW5pdGlhbFN0YXRlLm9udG9sb2d5O1xuICAgICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ3kgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldEVudGl0eVdpdGhUeXBlLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248RW50aXR5PikgPT4ge1xuICAgICAgICBzdGF0ZS5lbnRpdHkgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgICAgc3RhdGUubG9hZGluZ0VudGl0eSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldEVudGl0eVdpdGhUeXBlLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGluaXRpYWxTdGF0ZS5lcnJvck1lc3NhZ2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0RW50aXR5V2l0aFR5cGUucmVqZWN0ZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmVudGl0eSA9IGluaXRpYWxTdGF0ZS5lbnRpdHk7XG4gICAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGVycm9yLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdHkuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxFbnRpdHk+KSA9PiB7XG4gICAgICAgIHN0YXRlLmVudGl0eSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0RW50aXR5LnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nRW50aXR5ID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGluaXRpYWxTdGF0ZS5lcnJvck1lc3NhZ2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0RW50aXR5LnJlamVjdGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgc3RhdGUubG9hZGluZ0VudGl0eSA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5lbnRpdHkgPSBpbml0aWFsU3RhdGUuZW50aXR5O1xuICAgICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBlcnJvci5wYXlsb2FkO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKFxuICAgICAgZ2V0Q2xhc3NJbnN0YW5jZXMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxQYWdlPEVudGl0eT4+KSA9PiB7XG4gICAgICAgIHN0YXRlLmNsYXNzSW5zdGFuY2VzID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdDbGFzc0luc3RhbmNlcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldENsYXNzSW5zdGFuY2VzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nQ2xhc3NJbnN0YW5jZXMgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRDbGFzc0luc3RhbmNlcy5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdDbGFzc0luc3RhbmNlcyA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5jbGFzc0luc3RhbmNlcyA9IGluaXRpYWxTdGF0ZS5jbGFzc0luc3RhbmNlcztcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRBbmNlc3RvcnMucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgICsrc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRBbmNlc3RvcnMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxFbnRpdHlbXT4pID0+IHtcbiAgICAgICAgbGV0IHsgcm9vdE5vZGVzLCBub2RlQ2hpbGRyZW4sIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzIH0gPVxuICAgICAgICAgIGNyZWF0ZVRyZWVGcm9tRW50aXRpZXMoXG4gICAgICAgICAgICBbc3RhdGUuZW50aXR5ISwgLi4uYWN0aW9uLnBheWxvYWRdLFxuICAgICAgICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMsXG4gICAgICAgICAgICBzdGF0ZS5vbnRvbG9neSFcbiAgICAgICAgICApO1xuICAgICAgICBzdGF0ZS5yb290Tm9kZXMgPSByb290Tm9kZXM7XG4gICAgICAgIHN0YXRlLm5vZGVDaGlsZHJlbiA9IG5vZGVDaGlsZHJlbjtcbiAgICAgICAgc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIG5ldyBTZXQoW1xuICAgICAgICAgICAgLi4uc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMsXG4gICAgICAgICAgICAuLi5BcnJheS5mcm9tKGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICAgICAgICBdKVxuICAgICAgICApO1xuICAgICAgICAtLXN0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZ2V0QW5jZXN0b3JzLnJlamVjdGVkLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgLS1zdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXROb2RlQ2hpbGRyZW4ucGVuZGluZywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgICsrc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXROb2RlQ2hpbGRyZW4uZnVsZmlsbGVkLFxuICAgICAgKFxuICAgICAgICBzdGF0ZTogT250b2xvZ2llc1N0YXRlLFxuICAgICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248e1xuICAgICAgICAgIGFic29sdXRlSWRlbnRpdHk6IHN0cmluZztcbiAgICAgICAgICBjaGlsZHJlbjogVHJlZU5vZGVbXTtcbiAgICAgICAgfT5cbiAgICAgICkgPT4ge1xuICAgICAgICBzdGF0ZS5ub2RlQ2hpbGRyZW4gPSB7XG4gICAgICAgICAgLi4uc3RhdGUubm9kZUNoaWxkcmVuLFxuICAgICAgICAgIFthY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XTogYWN0aW9uLnBheWxvYWQuY2hpbGRyZW4sXG4gICAgICAgIH07XG4gICAgICAgIHN0YXRlLm5vZGVzV2l0aENoaWxkcmVuTG9hZGVkLnB1c2goYWN0aW9uLnBheWxvYWQuYWJzb2x1dGVJZGVudGl0eSk7XG4gICAgICAgIC0tc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXROb2RlQ2hpbGRyZW4ucmVqZWN0ZWQsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICAtLXN0YXRlLm51bVBlbmRpbmdUcmVlUmVxdWVzdHM7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFJvb3RFbnRpdGllcy5wZW5kaW5nLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgKytzdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldFJvb3RFbnRpdGllcy5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPGFueT4pID0+IHtcbiAgICAgICAgbGV0IHsgcm9vdFRlcm1zLCBjbGFzc2VzV2l0aEluZGl2aWR1YWxzLCBvcnBoYW5lZEluZGl2aWR1YWxzIH0gPVxuICAgICAgICAgIGFjdGlvbi5wYXlsb2FkO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJvb3RUZXJtc1wiKTtcbiAgICAgICAgLy8gY29uc29sZS5kaXIocm9vdFRlcm1zKTtcbiAgICAgICAgbGV0IHsgcm9vdE5vZGVzLCBub2RlQ2hpbGRyZW4sIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzIH0gPVxuICAgICAgICAgIGNyZWF0ZVRyZWVGcm9tRW50aXRpZXMoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIC4uLihyb290VGVybXMgfHwgW10pLFxuICAgICAgICAgICAgICAuLi4oY2xhc3Nlc1dpdGhJbmRpdmlkdWFscyB8fCBbXSksXG4gICAgICAgICAgICAgIC4uLihvcnBoYW5lZEluZGl2aWR1YWxzIHx8IFtdKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0ZS5wcmVmZXJyZWRSb290cyxcbiAgICAgICAgICAgIHN0YXRlLm9udG9sb2d5IVxuICAgICAgICAgICk7XG5cbiAgICAgICAgc3RhdGUucm9vdE5vZGVzID0gcm9vdE5vZGVzO1xuICAgICAgICBzdGF0ZS5ub2RlQ2hpbGRyZW4gPSBub2RlQ2hpbGRyZW47XG4gICAgICAgIHN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBuZXcgU2V0KFtcbiAgICAgICAgICAgIC4uLnN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLFxuICAgICAgICAgICAgLi4uQXJyYXkuZnJvbShhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyksXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgICAgLS1zdGF0ZS5udW1QZW5kaW5nVHJlZVJlcXVlc3RzO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFJvb3RFbnRpdGllcy5yZWplY3RlZCwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIC0tc3RhdGUubnVtUGVuZGluZ1RyZWVSZXF1ZXN0cztcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRPbnRvbG9naWVzLmZ1bGZpbGxlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248UGFnZTxPbnRvbG9neT4+KSA9PiB7XG4gICAgICAgIHN0YXRlLm9udG9sb2dpZXMgPSBhY3Rpb24ucGF5bG9hZC5lbGVtZW50cztcbiAgICAgICAgc3RhdGUudG90YWxPbnRvbG9naWVzID0gYWN0aW9uLnBheWxvYWQudG90YWxFbGVtZW50cztcbiAgICAgICAgc3RhdGUubG9hZGluZ09udG9sb2dpZXMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRPbnRvbG9naWVzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nT250b2xvZ2llcyA9IHRydWU7XG4gICAgICBzdGF0ZS5lcnJvck1lc3NhZ2UgPSBpbml0aWFsU3RhdGUuZXJyb3JNZXNzYWdlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldE9udG9sb2dpZXMucmVqZWN0ZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBzdGF0ZS5vbnRvbG9naWVzID0gaW5pdGlhbFN0YXRlLm9udG9sb2dpZXM7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdPbnRvbG9naWVzID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmVycm9yTWVzc2FnZSA9IGVycm9yLnBheWxvYWQ7XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdGllcy5mdWxmaWxsZWQsXG4gICAgICAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPFBhZ2U8RW50aXR5Pj4pID0+IHtcbiAgICAgICAgc3RhdGUuZW50aXRpZXMgPSBhY3Rpb24ucGF5bG9hZC5lbGVtZW50cztcbiAgICAgICAgc3RhdGUudG90YWxFbnRpdGllcyA9IGFjdGlvbi5wYXlsb2FkLnRvdGFsRWxlbWVudHM7XG4gICAgICAgIHN0YXRlLmxvYWRpbmdFbnRpdGllcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldEVudGl0aWVzLnBlbmRpbmcsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nRW50aXRpZXMgPSB0cnVlO1xuICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gaW5pdGlhbFN0YXRlLmVycm9yTWVzc2FnZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2UoXG4gICAgICBnZXRFbnRpdGllcy5yZWplY3RlZCxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHN0YXRlLmVudGl0aWVzID0gaW5pdGlhbFN0YXRlLmVudGl0aWVzO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nRW50aXRpZXMgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuZXJyb3JNZXNzYWdlID0gZXJyb3IucGF5bG9hZDtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShyZXNldFRyZWVDb250ZW50LCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQgPSBbXTtcbiAgICAgIHN0YXRlLm5vZGVDaGlsZHJlbiA9IHt9O1xuICAgICAgc3RhdGUucm9vdE5vZGVzID0gW107XG4gICAgICBzdGF0ZS5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyA9IFtdO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIHJlc2V0VHJlZVNldHRpbmdzLFxuICAgICAgKFxuICAgICAgICBzdGF0ZTogT250b2xvZ2llc1N0YXRlLFxuICAgICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248eyBlbnRpdHlUeXBlOiBzdHJpbmc7IHNlbGVjdGVkRW50aXR5PzogRW50aXR5IH0+XG4gICAgICApID0+IHtcbiAgICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMgPVxuICAgICAgICAgIGFjdGlvbi5wYXlsb2FkLmVudGl0eVR5cGUgPT09IFwiY2xhc3Nlc1wiICYmXG4gICAgICAgICAgc3RhdGUub250b2xvZ3khLmdldFByZWZlcnJlZFJvb3RzKCkubGVuZ3RoID4gMDtcblxuICAgICAgICBpZiAoYWN0aW9uLnBheWxvYWQuc2VsZWN0ZWRFbnRpdHkpIHtcbiAgICAgICAgICBsZXQgc2VsZWN0ZWRJc0Rlc2NlbmRhbnRPZlByZWZlcnJlZFJvb3RzID0gZmFsc2U7XG4gICAgICAgICAgZm9yIChsZXQgcm9vdCBvZiBzdGF0ZS5vbnRvbG9neSEuZ2V0UHJlZmVycmVkUm9vdHMoKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBhY3Rpb24ucGF5bG9hZC5zZWxlY3RlZEVudGl0eVxuICAgICAgICAgICAgICAgIC5nZXRIaWVyYXJjaGljYWxBbmNlc3RvcklyaXMoKVxuICAgICAgICAgICAgICAgIC5pbmRleE9mKHJvb3QpICE9PSAtMVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkSXNEZXNjZW5kYW50T2ZQcmVmZXJyZWRSb290cyA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXNlbGVjdGVkSXNEZXNjZW5kYW50T2ZQcmVmZXJyZWRSb290cykge1xuICAgICAgICAgICAgc3RhdGUucHJlZmVycmVkUm9vdHMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZGlzcGxheU9ic29sZXRlID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLmRpc3BsYXlTaWJsaW5ncyA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5kaXNwbGF5Q291bnRzID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUubWFudWFsbHlFeHBhbmRlZE5vZGVzID0gW107XG4gICAgICB9XG4gICAgKTtcbiAgICBidWlsZGVyLmFkZENhc2UoZW5hYmxlUHJlZmVycmVkUm9vdHMsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5wcmVmZXJyZWRSb290cyA9IHRydWU7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGRpc2FibGVQcmVmZXJyZWRSb290cywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLnByZWZlcnJlZFJvb3RzID0gZmFsc2U7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKHNob3dPYnNvbGV0ZSwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlPYnNvbGV0ZSA9IHRydWU7XG4gICAgfSk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGhpZGVPYnNvbGV0ZSwgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlPYnNvbGV0ZSA9IGZhbHNlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShzaG93U2libGluZ3MsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5kaXNwbGF5U2libGluZ3MgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShoaWRlU2libGluZ3MsIChzdGF0ZTogT250b2xvZ2llc1N0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5kaXNwbGF5U2libGluZ3MgPSBmYWxzZTtcbiAgICB9KTtcbiAgICBidWlsZGVyLmFkZENhc2Uoc2hvd0NvdW50cywgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUpID0+IHtcbiAgICAgIHN0YXRlLmRpc3BsYXlDb3VudHMgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShoaWRlQ291bnRzLCAoc3RhdGU6IE9udG9sb2dpZXNTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUuZGlzcGxheUNvdW50cyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIG9wZW5Ob2RlLFxuICAgICAgKHN0YXRlOiBPbnRvbG9naWVzU3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxUcmVlTm9kZT4pID0+IHtcbiAgICAgICAgc3RhdGUubWFudWFsbHlFeHBhbmRlZE5vZGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBuZXcgU2V0KFtcbiAgICAgICAgICAgIC4uLnN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2RlcyxcbiAgICAgICAgICAgIGFjdGlvbi5wYXlsb2FkLmFic29sdXRlSWRlbnRpdHksXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGNsb3NlTm9kZSxcbiAgICAgIChzdGF0ZTogT250b2xvZ2llc1N0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248VHJlZU5vZGU+KSA9PiB7XG4gICAgICAgIHN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2RlcyA9IHN0YXRlLm1hbnVhbGx5RXhwYW5kZWROb2Rlcy5maWx0ZXIoXG4gICAgICAgICAgKG5vZGUpID0+IG5vZGUgIT09IGFjdGlvbi5wYXlsb2FkLmFic29sdXRlSWRlbnRpdHlcbiAgICAgICAgKTtcbiAgICAgICAgc3RhdGUuYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMgPVxuICAgICAgICAgIHN0YXRlLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLmZpbHRlcihcbiAgICAgICAgICAgIChub2RlKSA9PiBub2RlICE9PSBhY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgZGVsZXRlIHN0YXRlLm5vZGVDaGlsZHJlblthY3Rpb24ucGF5bG9hZC5hYnNvbHV0ZUlkZW50aXR5XTtcbiAgICAgICAgc3RhdGUubm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQgPSBzdGF0ZS5ub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZC5maWx0ZXIoXG4gICAgICAgICAgKGFic0lkKSA9PiBhYnNJZCAhPT0gYWN0aW9uLnBheWxvYWQuYWJzb2x1dGVJZGVudGl0eVxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgb250b2xvZ2llc1NsaWNlLnJlZHVjZXI7XG4iLCAiaW1wb3J0IHsgY3JlYXRlQXN5bmNUaHVuaywgY3JlYXRlU2xpY2UsIFBheWxvYWRBY3Rpb24gfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2V0UGFnaW5hdGVkLCBQYWdlIH0gZnJvbSBcIi4uLy4uL2FwcC9hcGlcIjtcbmltcG9ydCB7IHRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzIH0gZnJvbSBcIi4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQgRW50aXR5IGZyb20gXCIuLi8uLi9tb2RlbC9FbnRpdHlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hTdGF0ZSB7XG4gIHNlYXJjaFJlc3VsdHM6IEVudGl0eVtdO1xuICBsb2FkaW5nU2VhcmNoUmVzdWx0czogYm9vbGVhbjtcbiAgdG90YWxTZWFyY2hSZXN1bHRzOiBudW1iZXI7XG4gIGZhY2V0czogT2JqZWN0O1xufVxuY29uc3QgaW5pdGlhbFN0YXRlOiBTZWFyY2hTdGF0ZSA9IHtcbiAgc2VhcmNoUmVzdWx0czogW10sXG4gIGxvYWRpbmdTZWFyY2hSZXN1bHRzOiBmYWxzZSxcbiAgdG90YWxTZWFyY2hSZXN1bHRzOiAwLFxuICBmYWNldHM6IE9iamVjdC5jcmVhdGUobnVsbCksXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VhcmNoUmVzdWx0cyA9IGNyZWF0ZUFzeW5jVGh1bmsoXG4gIFwic2VhcmNoX3Jlc3VsdHNcIixcbiAgYXN5bmMgKFxuICAgIHsgcGFnZSwgcm93c1BlclBhZ2UsIHNlYXJjaCwgb250b2xvZ3lJZCwgdHlwZSwgc2VhcmNoUGFyYW1zIH06IGFueSxcbiAgICB7IHJlamVjdFdpdGhWYWx1ZSB9XG4gICkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcXVlcnkgPSB7XG4gICAgICAgIHNlYXJjaDogc2VhcmNoLFxuICAgICAgICBzaXplOiByb3dzUGVyUGFnZSxcbiAgICAgICAgcGFnZSxcbiAgICAgICAgZmFjZXRGaWVsZHM6IFwib250b2xvZ3lJZCB0eXBlXCIsXG4gICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQubGVuZ3RoID4gMCA/IG9udG9sb2d5SWRbMF0gOiBudWxsLFxuICAgICAgICB0eXBlOiB0eXBlLmxlbmd0aCA+IDAgPyB0eXBlWzBdIDogbnVsbCxcbiAgICAgICAgLy8gbGFuZzogXCJhbGxcIixcblxuICAgICAgICAuLi5PYmplY3QuZnJvbUVudHJpZXMoc2VhcmNoUGFyYW1zIGFzIFVSTFNlYXJjaFBhcmFtcyksXG4gICAgICB9O1xuICAgICAgZm9yIChjb25zdCBwYXJhbSBpbiBxdWVyeSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcXVlcnlbcGFyYW1dID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBxdWVyeVtwYXJhbV0gPT09IG51bGwgfHxcbiAgICAgICAgICBxdWVyeVtwYXJhbV0gPT09IFwiXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXJ5W3BhcmFtXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcGFyc2VkUXVlcnkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5KTtcbiAgICAgIC8vIHJlbW92ZSByZWR1bmRhbnQgcGFyYW1ldGVyc1xuICAgICAgaWYgKHNlYXJjaFBhcmFtcy5nZXQoXCJvbnRvbG9neVwiKSkge1xuICAgICAgICBwYXJzZWRRdWVyeS5zZXQoXCJvbnRvbG9neUlkXCIsIHNlYXJjaFBhcmFtcy5nZXQoXCJvbnRvbG9neVwiKSk7XG4gICAgICAgIHBhcnNlZFF1ZXJ5LmRlbGV0ZShcIm9udG9sb2d5XCIpO1xuICAgICAgfVxuICAgICAgaWYgKHNlYXJjaFBhcmFtcy5nZXQoXCJxXCIpKSBwYXJzZWRRdWVyeS5kZWxldGUoXCJxXCIpO1xuXG4gICAgICBjb25zdCBkYXRhID0gKFxuICAgICAgICBhd2FpdCBnZXRQYWdpbmF0ZWQ8YW55PihgYXBpL3YyL2VudGl0aWVzPyR7cGFyc2VkUXVlcnl9YClcbiAgICAgICkubWFwKChlKSA9PiB0aGluZ0Zyb21Kc29uUHJvcGVydGllcyhlKSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4gcmVqZWN0V2l0aFZhbHVlKGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuKTtcblxuY29uc3Qgc2VhcmNoU2xpY2UgPSBjcmVhdGVTbGljZSh7XG4gIG5hbWU6IFwic2VhcmNoXCIsXG4gIGluaXRpYWxTdGF0ZSxcbiAgcmVkdWNlcnM6IHt9LFxuICBleHRyYVJlZHVjZXJzOiAoYnVpbGRlcikgPT4ge1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShcbiAgICAgIGdldFNlYXJjaFJlc3VsdHMuZnVsZmlsbGVkLFxuICAgICAgKHN0YXRlOiBTZWFyY2hTdGF0ZSwgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPFBhZ2U8RW50aXR5Pj4pID0+IHtcbiAgICAgICAgc3RhdGUuc2VhcmNoUmVzdWx0cyA9IGFjdGlvbi5wYXlsb2FkLmVsZW1lbnRzO1xuICAgICAgICBzdGF0ZS50b3RhbFNlYXJjaFJlc3VsdHMgPSBhY3Rpb24ucGF5bG9hZC50b3RhbEVsZW1lbnRzO1xuICAgICAgICBzdGF0ZS5mYWNldHMgPSBhY3Rpb24ucGF5bG9hZC5mYWNldEZpZWxkc1RvQ291bnRzO1xuICAgICAgICBzdGF0ZS5sb2FkaW5nU2VhcmNoUmVzdWx0cyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgYnVpbGRlci5hZGRDYXNlKGdldFNlYXJjaFJlc3VsdHMucGVuZGluZywgKHN0YXRlOiBTZWFyY2hTdGF0ZSkgPT4ge1xuICAgICAgc3RhdGUubG9hZGluZ1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICAgIH0pO1xuICAgIGJ1aWxkZXIuYWRkQ2FzZShnZXRTZWFyY2hSZXN1bHRzLnJlamVjdGVkLCAoc3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB7XG4gICAgICBzdGF0ZS5sb2FkaW5nU2VhcmNoUmVzdWx0cyA9IGZhbHNlO1xuICAgICAgc3RhdGUuc2VhcmNoUmVzdWx0cyA9IGluaXRpYWxTdGF0ZS5zZWFyY2hSZXN1bHRzO1xuICAgICAgc3RhdGUuZmFjZXRzID0gaW5pdGlhbFN0YXRlLmZhY2V0cztcbiAgICB9KTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzZWFyY2hTbGljZS5yZWR1Y2VyO1xuIiwgImltcG9ydCB7IGNvbmZpZ3VyZVN0b3JlIH0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcbmltcG9ydCBob21lUmVkdWNlciBmcm9tIFwiLi4vcGFnZXMvaG9tZS9ob21lU2xpY2VcIjtcbmltcG9ydCBvbnRvbG9naWVzUmVkdWNlciBmcm9tIFwiLi4vcGFnZXMvb250b2xvZ2llcy9vbnRvbG9naWVzU2xpY2VcIjtcbmltcG9ydCBzZWFyY2hSZWR1Y2VyIGZyb20gJy4uL3BhZ2VzL3NlYXJjaC9zZWFyY2hTbGljZSc7XG5cbmV4cG9ydCBjb25zdCBzdG9yZSA9IGNvbmZpZ3VyZVN0b3JlKHtcbiAgcmVkdWNlcjoge1xuICAgIGhvbWU6IGhvbWVSZWR1Y2VyLFxuICAgIHNlYXJjaDogc2VhcmNoUmVkdWNlcixcbiAgICBvbnRvbG9naWVzOiBvbnRvbG9naWVzUmVkdWNlcixcbiAgfSxcbiAgbWlkZGxld2FyZTogKGdldERlZmF1bHRNaWRkbGV3YXJlKSA9PlxuICAgIGdldERlZmF1bHRNaWRkbGV3YXJlKHtcbiAgICAgIHNlcmlhbGl6YWJsZUNoZWNrOiBmYWxzZSxcbiAgICB9KSxcbn0pO1xuXG5leHBvcnQgdHlwZSBSb290U3RhdGUgPSBSZXR1cm5UeXBlPHR5cGVvZiBzdG9yZS5nZXRTdGF0ZT47XG5leHBvcnQgdHlwZSBBcHBEaXNwYXRjaCA9IHR5cGVvZiBzdG9yZS5kaXNwYXRjaDtcbiIsICJpbXBvcnQgeyBUaGVtZVByb3ZpZGVyIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5pbXBvcnQge1xuICBDaGVja2JveCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIFJhZGlvLFxuICBSYWRpb0dyb3VwLFxufSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHVybEpvaW4gZnJvbSBcInVybC1qb2luXCI7XG5pbXBvcnQgeyB1c2VBcHBEaXNwYXRjaCwgdXNlQXBwU2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL2hvb2tzXCI7XG5pbXBvcnQgeyB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvbXVpXCI7XG5pbXBvcnQgeyByYW5kb21TdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCBOb2RlIGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL05vZGVcIjtcbmltcG9ydCBFbnRpdHkgZnJvbSBcIi4uLy4uLy4uL21vZGVsL0VudGl0eVwiO1xuaW1wb3J0IE9udG9sb2d5IGZyb20gXCIuLi8uLi8uLi9tb2RlbC9PbnRvbG9neVwiO1xuaW1wb3J0IHtcbiAgVHJlZU5vZGUsXG4gIGNsb3NlTm9kZSxcbiAgZGlzYWJsZVByZWZlcnJlZFJvb3RzLFxuICBlbmFibGVQcmVmZXJyZWRSb290cyxcbiAgZ2V0QW5jZXN0b3JzLFxuICBnZXROb2RlQ2hpbGRyZW4sXG4gIGdldFJvb3RFbnRpdGllcyxcbiAgaGlkZUNvdW50cyxcbiAgaGlkZU9ic29sZXRlLFxuICBoaWRlU2libGluZ3MsXG4gIG9wZW5Ob2RlLFxuICByZXNldFRyZWVDb250ZW50LFxuICByZXNldFRyZWVTZXR0aW5ncyxcbiAgc2hvd0NvdW50cyxcbiAgc2hvd09ic29sZXRlLFxuICBzaG93U2libGluZ3MsXG59IGZyb20gXCIuLi9vbnRvbG9naWVzU2xpY2VcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRW50aXR5VHJlZSh7XG4gIG9udG9sb2d5LFxuICBlbnRpdHlUeXBlLFxuICBzZWxlY3RlZEVudGl0eSxcbiAgbGFuZyxcbiAgb25OYXZpZ2F0ZVRvRW50aXR5LFxuICBvbk5hdmlnYXRlVG9PbnRvbG9neSxcbiAgYXBpVXJsLFxufToge1xuICBvbnRvbG9neTogT250b2xvZ3k7XG4gIHNlbGVjdGVkRW50aXR5PzogRW50aXR5O1xuICBlbnRpdHlUeXBlOiBcImVudGl0aWVzXCIgfCBcImNsYXNzZXNcIiB8IFwicHJvcGVydGllc1wiIHwgXCJpbmRpdmlkdWFsc1wiO1xuICBsYW5nOiBzdHJpbmc7XG4gIG9uTmF2aWdhdGVUb0VudGl0eTogKG9udG9sb2d5OiBPbnRvbG9neSwgZW50aXR5OiBFbnRpdHkpID0+IHZvaWQ7XG4gIG9uTmF2aWdhdGVUb09udG9sb2d5OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHk6IEVudGl0eSkgPT4gdm9pZDtcbiAgYXBpVXJsPzogc3RyaW5nO1xufSkge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZUFwcERpc3BhdGNoKCk7XG4gIGNvbnN0IG5vZGVzV2l0aENoaWxkcmVuTG9hZGVkID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLm5vZGVzV2l0aENoaWxkcmVuTG9hZGVkXG4gICk7XG4gIGNvbnN0IG5vZGVDaGlsZHJlbiA9IHVzZUFwcFNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5ub2RlQ2hpbGRyZW4pO1xuICBjb25zdCByb290Tm9kZXMgPSB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMucm9vdE5vZGVzKTtcbiAgY29uc3QgbnVtUGVuZGluZ1RyZWVSZXF1ZXN0cyA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5udW1QZW5kaW5nVHJlZVJlcXVlc3RzXG4gICk7XG4gIGNvbnN0IHByZWZlcnJlZFJvb3RzID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLnByZWZlcnJlZFJvb3RzXG4gICk7XG4gIGNvbnN0IGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzID0gdXNlQXBwU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS5vbnRvbG9naWVzLmF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzXG4gICk7XG4gIGNvbnN0IG1hbnVhbGx5RXhwYW5kZWROb2RlcyA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5tYW51YWxseUV4cGFuZGVkTm9kZXNcbiAgKTtcblxuICBjb25zdCBzaG93T2Jzb2xldGVFbmFibGVkID0gc2VsZWN0ZWRFbnRpdHlcbiAgICA/IHNlbGVjdGVkRW50aXR5LmlzRGVwcmVjYXRlZCgpXG4gICAgOiB1c2VBcHBTZWxlY3Rvcigoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuZGlzcGxheU9ic29sZXRlKTtcbiAgY29uc3Qgc2hvd1NpYmxpbmdzRW5hYmxlZCA9IHVzZUFwcFNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUub250b2xvZ2llcy5kaXNwbGF5U2libGluZ3NcbiAgKTtcbiAgY29uc3Qgc2hvd0NvdW50c0VuYWJsZWQgPSB1c2VBcHBTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLm9udG9sb2dpZXMuZGlzcGxheUNvdW50c1xuICApO1xuXG4gIGNvbnN0IHRvZ2dsZU5vZGUgPSB1c2VDYWxsYmFjayhcbiAgICAobm9kZTogYW55KSA9PiB7XG4gICAgICBsZXQgaXNFeHBhbmRlZCA9XG4gICAgICAgIG1hbnVhbGx5RXhwYW5kZWROb2Rlcy5pbmRleE9mKG5vZGUuYWJzb2x1dGVJZGVudGl0eSkgIT09IC0xIHx8XG4gICAgICAgIGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzLmluZGV4T2Yobm9kZS5hYnNvbHV0ZUlkZW50aXR5KSAhPT0gLTE7XG5cbiAgICAgIGlmIChpc0V4cGFuZGVkKSB7XG4gICAgICAgIGRpc3BhdGNoKGNsb3NlTm9kZShub2RlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwYXRjaChvcGVuTm9kZShub2RlKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBkaXNwYXRjaCxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KG1hbnVhbGx5RXhwYW5kZWROb2RlcyksXG4gICAgXVxuICApO1xuXG4gIC8vIElmIHRoZSBvbnRvbG9neSwgZW50aXR5IHR5cGUsIHNlbGVjdGVkIGVudGl0eSBJUkksIG9yIGxhbmcgY2hhbmdlLCByZXNldCB0aGUgdHJlZSBzZXR0aW5ncyAoaW5jbHVkaW5nIHNob3dvYnNvbGV0ZS9wcmVmZXJyZWQgcm9vdHMpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZGlzcGF0Y2gocmVzZXRUcmVlU2V0dGluZ3MoeyBlbnRpdHlUeXBlLCBzZWxlY3RlZEVudGl0eSB9KSk7XG4gIH0sIFtcbiAgICBkaXNwYXRjaCxcbiAgICBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgZW50aXR5VHlwZSxcbiAgICBzZWxlY3RlZEVudGl0eT8uZ2V0SXJpKCksXG4gIF0pO1xuXG4gIC8vIElmIHRoZSBvbnRvbG9neSwgZW50aXR5IHR5cGUsIHNlbGVjdGVkIGVudGl0eSwgbGFuZyBPUiB0aGUgc2hvd09ic29sZXRlRW5hYmxlZC9wcmVmZXJyZWRSb290cyBjaGFuZ2UsIHJlc2V0IHRoZSB0cmVlIGNvbnRlbnQgYnV0IG5vdCB0aGUgc2V0dGluZ3NcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChyZXNldFRyZWVDb250ZW50KCkpO1xuICB9LCBbXG4gICAgZGlzcGF0Y2gsXG4gICAgb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgIGVudGl0eVR5cGUsXG4gICAgSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWRFbnRpdHkpLFxuICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgcHJlZmVycmVkUm9vdHMsXG4gICAgbGFuZyxcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRFbnRpdHkpIHtcbiAgICAgIGNvbnN0IGVudGl0eUlyaSA9IHNlbGVjdGVkRW50aXR5LmdldElyaSgpO1xuICAgICAgbGV0IHByb21pc2UgPSBkaXNwYXRjaChcbiAgICAgICAgZ2V0QW5jZXN0b3JzKHtcbiAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgZW50aXR5VHlwZTogc2VsZWN0ZWRFbnRpdHkuZ2V0VHlwZVBsdXJhbCgpLFxuICAgICAgICAgIGVudGl0eUlyaSxcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgc2hvd1NpYmxpbmdzRW5hYmxlZCxcbiAgICAgICAgICBhcGlVcmwsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgcmV0dXJuICgpID0+IHByb21pc2UuYWJvcnQoKTsgLy8gY29tcG9uZW50IHdhcyB1bm1vdW50ZWRcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHByb21pc2UgPSBkaXNwYXRjaChcbiAgICAgICAgZ2V0Um9vdEVudGl0aWVzKHtcbiAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICBwcmVmZXJyZWRSb290cyxcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgICAgICAgYXBpVXJsLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiAoKSA9PiBwcm9taXNlLmFib3J0KCk7IC8vIGNvbXBvbmVudCB3YXMgdW5tb3VudGVkXG4gICAgfVxuICB9LCBbXG4gICAgZGlzcGF0Y2gsXG4gICAgZW50aXR5VHlwZSxcbiAgICBKU09OLnN0cmluZ2lmeShzZWxlY3RlZEVudGl0eSksXG4gICAgb250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpLFxuICAgIHByZWZlcnJlZFJvb3RzLFxuICAgIGxhbmcsXG4gICAgc2hvd09ic29sZXRlRW5hYmxlZCxcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgbm9kZXNNaXNzaW5nQ2hpbGRyZW46IHN0cmluZ1tdID0gbWFudWFsbHlFeHBhbmRlZE5vZGVzLmZpbHRlcihcbiAgICAgIChhYnNvbHV0ZUlkZW50aXR5KSA9PlxuICAgICAgICBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZC5pbmRleE9mKGFic29sdXRlSWRlbnRpdHkpID09PSAtMVxuICAgICk7XG5cbiAgICBpZiAoc2hvd1NpYmxpbmdzRW5hYmxlZCkge1xuICAgICAgbm9kZXNNaXNzaW5nQ2hpbGRyZW4gPSBbXG4gICAgICAgIC4uLm5vZGVzTWlzc2luZ0NoaWxkcmVuLFxuICAgICAgICAuLi5hdXRvbWF0aWNhbGx5RXhwYW5kZWROb2Rlcy5maWx0ZXIoXG4gICAgICAgICAgKGFic29sdXRlSWRlbnRpdHkpID0+XG4gICAgICAgICAgICBub2Rlc1dpdGhDaGlsZHJlbkxvYWRlZC5pbmRleE9mKGFic29sdXRlSWRlbnRpdHkpID09PSAtMVxuICAgICAgICApLFxuICAgICAgXTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coXG4gICAgLy8gICBcIiEhISEgR2V0dGluZyBtaXNzaW5nIG5vZGUgY2hpbGRyZW46IFwiICtcbiAgICAvLyAgICAgSlNPTi5zdHJpbmdpZnkobm9kZXNNaXNzaW5nQ2hpbGRyZW4pXG4gICAgLy8gKTtcblxuICAgIGxldCBwcm9taXNlczogYW55ID0gW107XG4gICAgZm9yIChsZXQgYWJzSWQgb2Ygbm9kZXNNaXNzaW5nQ2hpbGRyZW4pIHtcbiAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgIGdldE5vZGVDaGlsZHJlbih7XG4gICAgICAgICAgICBvbnRvbG9neUlkOiBvbnRvbG9neS5nZXRPbnRvbG9neUlkKCksXG4gICAgICAgICAgICBlbnRpdHlUeXBlUGx1cmFsOiBzZWxlY3RlZEVudGl0eT8uZ2V0VHlwZVBsdXJhbCgpIHx8IGVudGl0eVR5cGUsIC8vIFRPRE86IHNob3VsZCBhY3R1YWxseSBiZSB0eXBlIG9mIGN1cnJlbnQgZW50aXR5IHdpdGggaXJpIGFic0lkLCBub3QgdHlwZSBvZiBzZWxlY3RlZEVudGl0eVxuICAgICAgICAgICAgZW50aXR5SXJpOiBhYnNJZC5zcGxpdChcIjtcIikucG9wKCksXG4gICAgICAgICAgICBhYnNvbHV0ZUlkZW50aXR5OiBhYnNJZCxcbiAgICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgICBzaG93T2Jzb2xldGVFbmFibGVkLFxuICAgICAgICAgICAgYXBpVXJsLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvciAobGV0IHByb21pc2Ugb2YgcHJvbWlzZXMpIHByb21pc2UuYWJvcnQoKTsgLy8gY29tcG9uZW50IHdhcyB1bm1vdW50ZWRcbiAgICB9O1xuICB9LCBbXG4gICAgZGlzcGF0Y2gsXG4gICAgbGFuZyxcbiAgICBKU09OLnN0cmluZ2lmeShtYW51YWxseUV4cGFuZGVkTm9kZXMpLFxuICAgIEpTT04uc3RyaW5naWZ5KGF1dG9tYXRpY2FsbHlFeHBhbmRlZE5vZGVzKSxcbiAgICBKU09OLnN0cmluZ2lmeShub2RlQ2hpbGRyZW4pLFxuICAgIG9udG9sb2d5LmdldE9udG9sb2d5SWQoKSxcbiAgICBlbnRpdHlUeXBlLFxuICAgIHByZWZlcnJlZFJvb3RzLFxuICAgIHNob3dPYnNvbGV0ZUVuYWJsZWQsXG4gICAgc2hvd1NpYmxpbmdzRW5hYmxlZCxcbiAgXSk7XG5cbiAgbGV0IHRvZ2dsZVNob3dPYnNvbGV0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoc2hvd09ic29sZXRlRW5hYmxlZCkgZGlzcGF0Y2goaGlkZU9ic29sZXRlKCkpO1xuICAgIGVsc2UgZGlzcGF0Y2goc2hvd09ic29sZXRlKCkpO1xuICB9LCBbZGlzcGF0Y2gsIHNob3dPYnNvbGV0ZUVuYWJsZWRdKTtcblxuICBsZXQgdG9nZ2xlU2hvd1NpYmxpbmdzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzaG93U2libGluZ3NFbmFibGVkKSBkaXNwYXRjaChoaWRlU2libGluZ3MoKSk7XG4gICAgZWxzZSBkaXNwYXRjaChzaG93U2libGluZ3MoKSk7XG4gIH0sIFtkaXNwYXRjaCwgc2hvd1NpYmxpbmdzRW5hYmxlZF0pO1xuXG4gIGxldCB0b2dnbGVTaG93Q291bnRzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChzaG93Q291bnRzRW5hYmxlZCkgZGlzcGF0Y2goaGlkZUNvdW50cygpKTtcbiAgICBlbHNlIGRpc3BhdGNoKHNob3dDb3VudHMoKSk7XG4gIH0sIFtkaXNwYXRjaCwgc2hvd0NvdW50c0VuYWJsZWRdKTtcblxuICBmdW5jdGlvbiByZW5kZXJOb2RlQ2hpbGRyZW4oXG4gICAgY2hpbGRyZW46IFRyZWVOb2RlW10sXG4gICAgZGVidWdOdW1JdGVyYXRpb25zOiBudW1iZXJcbiAgKSB7XG4gICAgaWYgKGRlYnVnTnVtSXRlcmF0aW9ucyA+IDEwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJvYmFibGUgY3ljbGljIHRyZWUgKHJlbmRlck5vZGVDaGlsZHJlbilcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkcmVuQ29weSA9IFsuLi5jaGlsZHJlbl07XG4gICAgY2hpbGRyZW5Db3B5LnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHRpdGxlQSA9IGE/LnRpdGxlID8gYS50aXRsZS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCkgOiBcIlwiO1xuICAgICAgY29uc3QgdGl0bGVCID0gYj8udGl0bGUgPyBiLnRpdGxlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSA6IFwiXCI7XG4gICAgICByZXR1cm4gdGl0bGVBID09PSB0aXRsZUIgPyAwIDogdGl0bGVBID4gdGl0bGVCID8gMSA6IC0xO1xuICAgIH0pO1xuICAgIGNvbnN0IGNoaWxkcmVuU29ydGVkID0gY2hpbGRyZW5Db3B5LmZpbHRlcihcbiAgICAgIChjaGlsZCwgaSwgYXJyKSA9PlxuICAgICAgICAhaSB8fCBjaGlsZC5hYnNvbHV0ZUlkZW50aXR5ICE9PSBhcnJbaSAtIDFdLmFic29sdXRlSWRlbnRpdHlcbiAgICApO1xuICAgIHJldHVybiAoXG4gICAgICA8dWxcbiAgICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgICAgY2xhc3NOYW1lPVwianN0cmVlLWNvbnRhaW5lci11bCBqc3RyZWUtY2hpbGRyZW4ganN0cmVlLW5vLWljb25zXCJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVuU29ydGVkLm1hcCgoY2hpbGROb2RlOiBUcmVlTm9kZSwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPVxuICAgICAgICAgICAgbWFudWFsbHlFeHBhbmRlZE5vZGVzLmluZGV4T2YoY2hpbGROb2RlLmFic29sdXRlSWRlbnRpdHkpICE9PSAtMSB8fFxuICAgICAgICAgICAgYXV0b21hdGljYWxseUV4cGFuZGVkTm9kZXMuaW5kZXhPZihjaGlsZE5vZGUuYWJzb2x1dGVJZGVudGl0eSkgIT09XG4gICAgICAgICAgICAgIC0xO1xuICAgICAgICAgIGNvbnN0IGlzTGFzdCA9IGkgPT09IGNoaWxkcmVuU29ydGVkIS5sZW5ndGggLSAxO1xuICAgICAgICAgIGNvbnN0IGhpZ2hsaWdodCA9XG4gICAgICAgICAgICAoc2VsZWN0ZWRFbnRpdHkgJiYgY2hpbGROb2RlLmlyaSA9PT0gc2VsZWN0ZWRFbnRpdHkuZ2V0SXJpKCkpIHx8XG4gICAgICAgICAgICBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE5vZGVcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZT17Y2hpbGROb2RlLmV4cGFuZGFibGV9XG4gICAgICAgICAgICAgIGV4cGFuZGVkPXtpc0V4cGFuZGVkfVxuICAgICAgICAgICAgICBoaWdobGlnaHQ9e2hpZ2hsaWdodH1cbiAgICAgICAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICB0b2dnbGVOb2RlKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGtleT17cmFuZG9tU3RyaW5nKCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtjaGlsZE5vZGUuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09PVxuICAgICAgICAgICAgICAgIFwiaHR0cDovL3B1cmwub2JvbGlicmFyeS5vcmcvb2JvL0JGT18wMDAwMDUwXCIgJiYgKFxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1yLTFcIlxuICAgICAgICAgICAgICAgICAgc3JjPXt1cmxKb2luKHByb2Nlc3MuZW52LlBVQkxJQ19VUkwhLCBcIi9wYXJ0LnN2Z1wiKX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogXCIxZW1cIiwgZGlzcGxheTogXCJpbmxpbmVcIiB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtjaGlsZE5vZGUuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09PVxuICAgICAgICAgICAgICAgIFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIiAmJiAoXG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXItMVwiXG4gICAgICAgICAgICAgICAgICBzcmM9e3VybEpvaW4ocHJvY2Vzcy5lbnYuUFVCTElDX1VSTCEsIFwiL2luc3RhbmNlLnN2Z1wiKX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogXCIxZW1cIiwgZGlzcGxheTogXCJpbmxpbmVcIiB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxUcmVlTGlua1xuICAgICAgICAgICAgICAgIG9udG9sb2d5PXtvbnRvbG9neX1cbiAgICAgICAgICAgICAgICBlbnRpdHk9e2NoaWxkTm9kZS5lbnRpdHl9XG4gICAgICAgICAgICAgICAgdGl0bGU9e2NoaWxkTm9kZS50aXRsZX1cbiAgICAgICAgICAgICAgICBsYW5nPXtsYW5nfVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17b25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgeyFzaG93T2Jzb2xldGVFbmFibGVkICYmXG4gICAgICAgICAgICAgICAgc2hvd0NvdW50c0VuYWJsZWQgJiZcbiAgICAgICAgICAgICAgICBjaGlsZE5vZGUubnVtRGVzY2VuZGFudHMgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiBcImdyYXlcIiB9fT5cbiAgICAgICAgICAgICAgICAgICAge1wiIChcIiArIGNoaWxkTm9kZS5udW1EZXNjZW5kYW50cy50b0xvY2FsZVN0cmluZygpICsgXCIpXCJ9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2lzRXhwYW5kZWQgJiZcbiAgICAgICAgICAgICAgICByZW5kZXJOb2RlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICBub2RlQ2hpbGRyZW5bY2hpbGROb2RlLmFic29sdXRlSWRlbnRpdHldIHx8IFtdLFxuICAgICAgICAgICAgICAgICAgZGVidWdOdW1JdGVyYXRpb25zICsgMVxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L05vZGU+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L3VsPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sLXJldmVyc2UgbGc6Z3JpZCBsZzpncmlkLWNvbHMtMyBsZzpnYXAtNFwiPlxuICAgICAgICB7cm9vdE5vZGVzID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGc6Y29sLXNwYW4tMiByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC0zIHBiLTMganN0cmVlIGpzdHJlZS0xIGpzdHJlZS1wcm90b24gb3ZlcmZsb3cteC1hdXRvXCJcbiAgICAgICAgICAgICAgcm9sZT1cInRyZWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7cmVuZGVyTm9kZUNoaWxkcmVuKHJvb3ROb2RlcywgMCl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtudW1QZW5kaW5nVHJlZVJlcXVlc3RzID4gMCA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBzcGlubmVyLWRlZmF1bHQgdy03IGgtNyAtdG9wLTEgLWxlZnQtNCB6LWF1dG9cIiAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxnOmNvbC1zcGFuLTEgZmxleCBmbGV4LWNvbCBiZy13aGl0ZSBweC0yIG1iLTIgcm91bmRlZC1sZ1wiPlxuICAgICAgICAgIHtlbnRpdHlUeXBlID09PSBcImNsYXNzZXNcIiAmJlxuICAgICAgICAgICAgb250b2xvZ3kuZ2V0UHJlZmVycmVkUm9vdHMoKS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgPEZvcm1Db250cm9sPlxuICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJhZGlvLWJ1dHRvbnMtZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cHJlZmVycmVkUm9vdHMgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGRpc3BhdGNoKGVuYWJsZVByZWZlcnJlZFJvb3RzKCkpfVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9ezxSYWRpbyAvPn1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIlByZWZlcnJlZCByb290c1wiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtQ29udHJvbExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZGlzcGF0Y2goZGlzYWJsZVByZWZlcnJlZFJvb3RzKCkpfVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9ezxSYWRpbyAvPn1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkFsbCBjbGFzc2VzXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvUmFkaW9Hcm91cD5cbiAgICAgICAgICAgICAgICA8L0Zvcm1Db250cm9sPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2hvd09ic29sZXRlRW5hYmxlZH1cbiAgICAgICAgICAgICAgICBjaGVja2VkPXshc2hvd09ic29sZXRlRW5hYmxlZCAmJiBzaG93Q291bnRzRW5hYmxlZH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVTaG93Q291bnRzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFiZWw9XCJTaG93IGNvdW50c1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgY29udHJvbD17XG4gICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dPYnNvbGV0ZUVuYWJsZWR9XG4gICAgICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlU2hvd09ic29sZXRlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFiZWw9XCJTaG93IG9ic29sZXRlIHRlcm1zXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzZWxlY3RlZEVudGl0eSAmJiAoXG4gICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dTaWJsaW5nc0VuYWJsZWR9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVTaG93U2libGluZ3N9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYWJlbD1cIlNob3cgYWxsIHNpYmxpbmdzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFRyZWVMaW5rKHtcbiAgb250b2xvZ3ksXG4gIGVudGl0eSxcbiAgdGl0bGUsXG4gIGxhbmcsXG4gIG9uTmF2aWdhdGVUb0VudGl0eSxcbiAgb25OYXZpZ2F0ZVRvT250b2xvZ3ksXG59OiB7XG4gIG9udG9sb2d5OiBPbnRvbG9neTtcbiAgZW50aXR5OiBFbnRpdHk7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGxhbmc6IHN0cmluZztcbiAgb25OYXZpZ2F0ZVRvRW50aXR5OiAob250b2xvZ3k6IE9udG9sb2d5LCBlbnRpdHk6IEVudGl0eSkgPT4gdm9pZDtcbiAgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IChvbnRvbG9neUlkOiBzdHJpbmcsIGVudGl0eTogRW50aXR5KSA9PiB2b2lkO1xufSkge1xuICBsZXQgZGVmaW5lZEJ5OiBzdHJpbmdbXSA9IGVudGl0eS5nZXREZWZpbmVkQnkoKTtcblxuICBpZiAoZGVmaW5lZEJ5LmluZGV4T2Yob250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpKSAhPT0gLTEpIGRlZmluZWRCeSA9IFtdOyAvLyBkb24ndCBzaG93IGRlZmluZWRCeSBsaW5rcyBmb3IgdGVybXMgaW4gY3VycmVudCBvbnRvbG9neVxuXG4gIHJldHVybiAoXG4gICAgPHNwYW4+XG4gICAgICA8YVxuICAgICAgICB0aXRsZT17ZW50aXR5LmdldElyaSgpfVxuICAgICAgICBjbGFzc05hbWU9e1wibGluay1kZWZhdWx0XCJ9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uTmF2aWdhdGVUb0VudGl0eShvbnRvbG9neSwgZW50aXR5KX1cbiAgICAgID5cbiAgICAgICAge3RpdGxlfVxuICAgICAgPC9hPlxuICAgICAge2RlZmluZWRCeS5sZW5ndGggPiAwICYmXG4gICAgICAgIGRlZmluZWRCeS5tYXAoKGRlZmluaW5nT250b2xvZ3kpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25OYXZpZ2F0ZVRvT250b2xvZ3koZGVmaW5pbmdPbnRvbG9neSwgZW50aXR5KX1cbiAgICAgICAgICAgICAgdGl0bGU9e2RlZmluaW5nT250b2xvZ3kudG9VcHBlckNhc2UoKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXgtMSBsaW5rLW9udG9sb2d5IHB4LTIgcHktMC41IHJvdW5kZWQtbWQgdGV4dC1zbSB0ZXh0LXdoaXRlIHVwcGVyY2FzZSBtbC0xXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2RlZmluaW5nT250b2xvZ3l9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgPC9zcGFuPlxuICApO1xufVxuIiwgImNvbnN0IGNvbW1vbiA9IHtcbiAgYmxhY2s6ICcjMDAwJyxcbiAgd2hpdGU6ICcjZmZmJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1vbjsiLCAiY29uc3QgcmVkID0ge1xuICA1MDogJyNmZmViZWUnLFxuICAxMDA6ICcjZmZjZGQyJyxcbiAgMjAwOiAnI2VmOWE5YScsXG4gIDMwMDogJyNlNTczNzMnLFxuICA0MDA6ICcjZWY1MzUwJyxcbiAgNTAwOiAnI2Y0NDMzNicsXG4gIDYwMDogJyNlNTM5MzUnLFxuICA3MDA6ICcjZDMyZjJmJyxcbiAgODAwOiAnI2M2MjgyOCcsXG4gIDkwMDogJyNiNzFjMWMnLFxuICBBMTAwOiAnI2ZmOGE4MCcsXG4gIEEyMDA6ICcjZmY1MjUyJyxcbiAgQTQwMDogJyNmZjE3NDQnLFxuICBBNzAwOiAnI2Q1MDAwMCdcbn07XG5leHBvcnQgZGVmYXVsdCByZWQ7IiwgImNvbnN0IHB1cnBsZSA9IHtcbiAgNTA6ICcjZjNlNWY1JyxcbiAgMTAwOiAnI2UxYmVlNycsXG4gIDIwMDogJyNjZTkzZDgnLFxuICAzMDA6ICcjYmE2OGM4JyxcbiAgNDAwOiAnI2FiNDdiYycsXG4gIDUwMDogJyM5YzI3YjAnLFxuICA2MDA6ICcjOGUyNGFhJyxcbiAgNzAwOiAnIzdiMWZhMicsXG4gIDgwMDogJyM2YTFiOWEnLFxuICA5MDA6ICcjNGExNDhjJyxcbiAgQTEwMDogJyNlYTgwZmMnLFxuICBBMjAwOiAnI2UwNDBmYicsXG4gIEE0MDA6ICcjZDUwMGY5JyxcbiAgQTcwMDogJyNhYTAwZmYnXG59O1xuZXhwb3J0IGRlZmF1bHQgcHVycGxlOyIsICJjb25zdCBibHVlID0ge1xuICA1MDogJyNlM2YyZmQnLFxuICAxMDA6ICcjYmJkZWZiJyxcbiAgMjAwOiAnIzkwY2FmOScsXG4gIDMwMDogJyM2NGI1ZjYnLFxuICA0MDA6ICcjNDJhNWY1JyxcbiAgNTAwOiAnIzIxOTZmMycsXG4gIDYwMDogJyMxZTg4ZTUnLFxuICA3MDA6ICcjMTk3NmQyJyxcbiAgODAwOiAnIzE1NjVjMCcsXG4gIDkwMDogJyMwZDQ3YTEnLFxuICBBMTAwOiAnIzgyYjFmZicsXG4gIEEyMDA6ICcjNDQ4YWZmJyxcbiAgQTQwMDogJyMyOTc5ZmYnLFxuICBBNzAwOiAnIzI5NjJmZidcbn07XG5leHBvcnQgZGVmYXVsdCBibHVlOyIsICJjb25zdCBsaWdodEJsdWUgPSB7XG4gIDUwOiAnI2UxZjVmZScsXG4gIDEwMDogJyNiM2U1ZmMnLFxuICAyMDA6ICcjODFkNGZhJyxcbiAgMzAwOiAnIzRmYzNmNycsXG4gIDQwMDogJyMyOWI2ZjYnLFxuICA1MDA6ICcjMDNhOWY0JyxcbiAgNjAwOiAnIzAzOWJlNScsXG4gIDcwMDogJyMwMjg4ZDEnLFxuICA4MDA6ICcjMDI3N2JkJyxcbiAgOTAwOiAnIzAxNTc5YicsXG4gIEExMDA6ICcjODBkOGZmJyxcbiAgQTIwMDogJyM0MGM0ZmYnLFxuICBBNDAwOiAnIzAwYjBmZicsXG4gIEE3MDA6ICcjMDA5MWVhJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGxpZ2h0Qmx1ZTsiLCAiY29uc3QgZ3JlZW4gPSB7XG4gIDUwOiAnI2U4ZjVlOScsXG4gIDEwMDogJyNjOGU2YzknLFxuICAyMDA6ICcjYTVkNmE3JyxcbiAgMzAwOiAnIzgxYzc4NCcsXG4gIDQwMDogJyM2NmJiNmEnLFxuICA1MDA6ICcjNGNhZjUwJyxcbiAgNjAwOiAnIzQzYTA0NycsXG4gIDcwMDogJyMzODhlM2MnLFxuICA4MDA6ICcjMmU3ZDMyJyxcbiAgOTAwOiAnIzFiNWUyMCcsXG4gIEExMDA6ICcjYjlmNmNhJyxcbiAgQTIwMDogJyM2OWYwYWUnLFxuICBBNDAwOiAnIzAwZTY3NicsXG4gIEE3MDA6ICcjMDBjODUzJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGdyZWVuOyIsICJjb25zdCBvcmFuZ2UgPSB7XG4gIDUwOiAnI2ZmZjNlMCcsXG4gIDEwMDogJyNmZmUwYjInLFxuICAyMDA6ICcjZmZjYzgwJyxcbiAgMzAwOiAnI2ZmYjc0ZCcsXG4gIDQwMDogJyNmZmE3MjYnLFxuICA1MDA6ICcjZmY5ODAwJyxcbiAgNjAwOiAnI2ZiOGMwMCcsXG4gIDcwMDogJyNmNTdjMDAnLFxuICA4MDA6ICcjZWY2YzAwJyxcbiAgOTAwOiAnI2U2NTEwMCcsXG4gIEExMDA6ICcjZmZkMTgwJyxcbiAgQTIwMDogJyNmZmFiNDAnLFxuICBBNDAwOiAnI2ZmOTEwMCcsXG4gIEE3MDA6ICcjZmY2ZDAwJ1xufTtcbmV4cG9ydCBkZWZhdWx0IG9yYW5nZTsiLCAiY29uc3QgZ3JleSA9IHtcbiAgNTA6ICcjZmFmYWZhJyxcbiAgMTAwOiAnI2Y1ZjVmNScsXG4gIDIwMDogJyNlZWVlZWUnLFxuICAzMDA6ICcjZTBlMGUwJyxcbiAgNDAwOiAnI2JkYmRiZCcsXG4gIDUwMDogJyM5ZTllOWUnLFxuICA2MDA6ICcjNzU3NTc1JyxcbiAgNzAwOiAnIzYxNjE2MScsXG4gIDgwMDogJyM0MjQyNDInLFxuICA5MDA6ICcjMjEyMTIxJyxcbiAgQTEwMDogJyNmNWY1ZjUnLFxuICBBMjAwOiAnI2VlZWVlZScsXG4gIEE0MDA6ICcjYmRiZGJkJyxcbiAgQTcwMDogJyM2MTYxNjEnXG59O1xuZXhwb3J0IGRlZmF1bHQgZ3JleTsiLCAiZXhwb3J0IGRlZmF1bHQgJyQkbWF0ZXJpYWwnOyIsICJpbXBvcnQgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSBmcm9tIFwiQG11aS91dGlscy9mb3JtYXRNdWlFcnJvck1lc3NhZ2VcIjtcbmV4cG9ydCB7IGNzcywga2V5ZnJhbWVzLCBTdHlsZWRFbmdpbmVQcm92aWRlciB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdsb2JhbFN0eWxlcyB9IGZyb20gJy4vR2xvYmFsU3R5bGVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYm9yZGVycyB9IGZyb20gJy4vYm9yZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2JvcmRlcnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBicmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMsIG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyLCByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyBhcyB1bnN0YWJsZV9yZXNvbHZlQnJlYWtwb2ludFZhbHVlcyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21wb3NlIH0gZnJvbSAnLi9jb21wb3NlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGlzcGxheSB9IGZyb20gJy4vZGlzcGxheSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZsZXhib3ggfSBmcm9tICcuL2ZsZXhib3gnO1xuZXhwb3J0ICogZnJvbSAnLi9mbGV4Ym94JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZ3JpZCB9IGZyb20gJy4vY3NzR3JpZCc7XG5leHBvcnQgKiBmcm9tICcuL2Nzc0dyaWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYWxldHRlIH0gZnJvbSAnLi9wYWxldHRlJztcbmV4cG9ydCAqIGZyb20gJy4vcGFsZXR0ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBvc2l0aW9ucyB9IGZyb20gJy4vcG9zaXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vcG9zaXRpb25zJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2hhZG93cyB9IGZyb20gJy4vc2hhZG93cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNpemluZyB9IGZyb20gJy4vc2l6aW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc2l6aW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BhY2luZyB9IGZyb20gJy4vc3BhY2luZyc7XG5leHBvcnQgKiBmcm9tICcuL3NwYWNpbmcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHlsZSwgZ2V0UGF0aCwgZ2V0U3R5bGVWYWx1ZSB9IGZyb20gJy4vc3R5bGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0eXBvZ3JhcGh5IH0gZnJvbSAnLi90eXBvZ3JhcGh5JztcbmV4cG9ydCAqIGZyb20gJy4vdHlwb2dyYXBoeSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX3N0eWxlRnVuY3Rpb25TeCwgdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4LCBleHRlbmRTeFByb3AgYXMgdW5zdGFibGVfZXh0ZW5kU3hQcm9wLCB1bnN0YWJsZV9kZWZhdWx0U3hDb25maWcgfSBmcm9tICcuL3N0eWxlRnVuY3Rpb25TeCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBmdW5jdGlvbiBpbiB2NlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVyaW1lbnRhbF9zeCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBcXGBleHBlcmltZW50YWxfc3hcXGAgaGFzIGJlZW4gbW92ZWQgdG8gXFxgdGhlbWUudW5zdGFibGVfc3hcXGAuRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNTE1MC5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgyMCkpO1xufVxuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9nZXRUaGVtZVZhbHVlIH0gZnJvbSAnLi9nZXRUaGVtZVZhbHVlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm94IH0gZnJvbSAnLi9Cb3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVCb3ggfSBmcm9tICcuL2NyZWF0ZUJveCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVN0eWxlZCB9IGZyb20gJy4vY3JlYXRlU3R5bGVkJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlU3R5bGVkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3R5bGVkIH0gZnJvbSAnLi9zdHlsZWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVUaGVtZSB9IGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVCcmVha3BvaW50cyB9IGZyb20gJy4vY3JlYXRlVGhlbWUvY3JlYXRlQnJlYWtwb2ludHMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVTcGFjaW5nIH0gZnJvbSAnLi9jcmVhdGVUaGVtZS9jcmVhdGVTcGFjaW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2hhcGUgfSBmcm9tICcuL2NyZWF0ZVRoZW1lL3NoYXBlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlVGhlbWVQcm9wcywgZ2V0VGhlbWVQcm9wcyB9IGZyb20gJy4vdXNlVGhlbWVQcm9wcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVRoZW1lIH0gZnJvbSAnLi91c2VUaGVtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVRoZW1lV2l0aG91dERlZmF1bHQgfSBmcm9tICcuL3VzZVRoZW1lV2l0aG91dERlZmF1bHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VNZWRpYVF1ZXJ5IH0gZnJvbSAnLi91c2VNZWRpYVF1ZXJ5JztcbmV4cG9ydCAqIGZyb20gJy4vY29sb3JNYW5pcHVsYXRvcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRoZW1lUHJvdmlkZXIgfSBmcm9tICcuL1RoZW1lUHJvdmlkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1bnN0YWJsZV9jcmVhdGVDc3NWYXJzUHJvdmlkZXIgfSBmcm9tICcuL2Nzc1ZhcnMvY3JlYXRlQ3NzVmFyc1Byb3ZpZGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfY3JlYXRlR2V0Q3NzVmFyIH0gZnJvbSAnLi9jc3NWYXJzL2NyZWF0ZUdldENzc1Zhcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX2Nzc1ZhcnNQYXJzZXIgfSBmcm9tICcuL2Nzc1ZhcnMvY3NzVmFyc1BhcnNlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVuc3RhYmxlX3ByZXBhcmVDc3NWYXJzIH0gZnJvbSAnLi9jc3NWYXJzL3ByZXBhcmVDc3NWYXJzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdW5zdGFibGVfY3JlYXRlQ3NzVmFyc1RoZW1lIH0gZnJvbSAnLi9jc3NWYXJzL2NyZWF0ZUNzc1ZhcnNUaGVtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlc3BvbnNpdmVQcm9wVHlwZSB9IGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnRsUHJvdmlkZXIgfSBmcm9tICcuL1J0bFByb3ZpZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vUnRsUHJvdmlkZXInO1xuXG4vKiogLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qKiBMYXlvdXQgY29tcG9uZW50cyAqL1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjcmVhdGVDb250YWluZXIgfSBmcm9tICcuL0NvbnRhaW5lci9jcmVhdGVDb250YWluZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb250YWluZXIgfSBmcm9tICcuL0NvbnRhaW5lcic7XG5leHBvcnQgKiBmcm9tICcuL0NvbnRhaW5lcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVuc3RhYmxlX0dyaWQgfSBmcm9tICcuL1Vuc3RhYmxlX0dyaWQvR3JpZCc7XG5leHBvcnQgKiBmcm9tICcuL1Vuc3RhYmxlX0dyaWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdGFjayB9IGZyb20gJy4vU3RhY2svU3RhY2snO1xuZXhwb3J0ICogZnJvbSAnLi9TdGFjayc7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcInBhbGV0dGVcIiwgXCJzcGFjaW5nXCIsIFwic2hhcGVcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBjcmVhdGVCcmVha3BvaW50cyBmcm9tICcuL2NyZWF0ZUJyZWFrcG9pbnRzJztcbmltcG9ydCBzaGFwZSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCBjcmVhdGVTcGFjaW5nIGZyb20gJy4vY3JlYXRlU3BhY2luZyc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4IGZyb20gJy4uL3N0eWxlRnVuY3Rpb25TeC9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGRlZmF1bHRTeENvbmZpZyBmcm9tICcuLi9zdHlsZUZ1bmN0aW9uU3gvZGVmYXVsdFN4Q29uZmlnJztcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tICcuL2FwcGx5U3R5bGVzJztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBicmVha3BvaW50czogYnJlYWtwb2ludHNJbnB1dCA9IHt9LFxuICAgICAgcGFsZXR0ZTogcGFsZXR0ZUlucHV0ID0ge30sXG4gICAgICBzcGFjaW5nOiBzcGFjaW5nSW5wdXQsXG4gICAgICBzaGFwZTogc2hhcGVJbnB1dCA9IHt9XG4gICAgfSA9IG9wdGlvbnMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShvcHRpb25zLCBfZXhjbHVkZWQpO1xuICBjb25zdCBicmVha3BvaW50cyA9IGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzSW5wdXQpO1xuICBjb25zdCBzcGFjaW5nID0gY3JlYXRlU3BhY2luZyhzcGFjaW5nSW5wdXQpO1xuICBsZXQgbXVpVGhlbWUgPSBkZWVwbWVyZ2Uoe1xuICAgIGJyZWFrcG9pbnRzLFxuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgY29tcG9uZW50czoge30sXG4gICAgLy8gSW5qZWN0IGNvbXBvbmVudCBkZWZpbml0aW9ucy5cbiAgICBwYWxldHRlOiBfZXh0ZW5kcyh7XG4gICAgICBtb2RlOiAnbGlnaHQnXG4gICAgfSwgcGFsZXR0ZUlucHV0KSxcbiAgICBzcGFjaW5nLFxuICAgIHNoYXBlOiBfZXh0ZW5kcyh7fSwgc2hhcGUsIHNoYXBlSW5wdXQpXG4gIH0sIG90aGVyKTtcbiAgbXVpVGhlbWUuYXBwbHlTdHlsZXMgPSBhcHBseVN0eWxlcztcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIG11aVRoZW1lLnVuc3RhYmxlX3N4Q29uZmlnID0gX2V4dGVuZHMoe30sIGRlZmF1bHRTeENvbmZpZywgb3RoZXIgPT0gbnVsbCA/IHZvaWQgMCA6IG90aGVyLnVuc3RhYmxlX3N4Q29uZmlnKTtcbiAgbXVpVGhlbWUudW5zdGFibGVfc3ggPSBmdW5jdGlvbiBzeChwcm9wcykge1xuICAgIHJldHVybiBzdHlsZUZ1bmN0aW9uU3goe1xuICAgICAgc3g6IHByb3BzLFxuICAgICAgdGhlbWU6IHRoaXNcbiAgICB9KTtcbiAgfTtcbiAgcmV0dXJuIG11aVRoZW1lO1xufVxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlVGhlbWU7IiwgImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJ2YWx1ZXNcIiwgXCJ1bml0XCIsIFwic3RlcFwiXTtcbi8vIFNvcnRlZCBBU0MgYnkgc2l6ZS4gVGhhdCdzIGltcG9ydGFudC5cbi8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbmV4cG9ydCBjb25zdCBicmVha3BvaW50S2V5cyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnXTtcbmNvbnN0IHNvcnRCcmVha3BvaW50c1ZhbHVlcyA9IHZhbHVlcyA9PiB7XG4gIGNvbnN0IGJyZWFrcG9pbnRzQXNBcnJheSA9IE9iamVjdC5rZXlzKHZhbHVlcykubWFwKGtleSA9PiAoe1xuICAgIGtleSxcbiAgICB2YWw6IHZhbHVlc1trZXldXG4gIH0pKSB8fCBbXTtcbiAgLy8gU29ydCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgYnJlYWtwb2ludHNBc0FycmF5LnNvcnQoKGJyZWFrcG9pbnQxLCBicmVha3BvaW50MikgPT4gYnJlYWtwb2ludDEudmFsIC0gYnJlYWtwb2ludDIudmFsKTtcbiAgcmV0dXJuIGJyZWFrcG9pbnRzQXNBcnJheS5yZWR1Y2UoKGFjYywgb2JqKSA9PiB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhY2MsIHtcbiAgICAgIFtvYmoua2V5XTogb2JqLnZhbFxuICAgIH0pO1xuICB9LCB7fSk7XG59O1xuXG4vLyBLZWVwIGluIG1pbmQgdGhhdCBAbWVkaWEgaXMgaW5jbHVzaXZlIGJ5IHRoZSBDU1Mgc3BlY2lmaWNhdGlvbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzKSB7XG4gIGNvbnN0IHtcbiAgICAgIC8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuICAgICAgLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc20pLlxuICAgICAgdmFsdWVzID0ge1xuICAgICAgICB4czogMCxcbiAgICAgICAgLy8gcGhvbmVcbiAgICAgICAgc206IDYwMCxcbiAgICAgICAgLy8gdGFibGV0XG4gICAgICAgIG1kOiA5MDAsXG4gICAgICAgIC8vIHNtYWxsIGxhcHRvcFxuICAgICAgICBsZzogMTIwMCxcbiAgICAgICAgLy8gZGVza3RvcFxuICAgICAgICB4bDogMTUzNiAvLyBsYXJnZSBzY3JlZW5cbiAgICAgIH0sXG4gICAgICB1bml0ID0gJ3B4JyxcbiAgICAgIHN0ZXAgPSA1XG4gICAgfSA9IGJyZWFrcG9pbnRzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoYnJlYWtwb2ludHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHNvcnRlZFZhbHVlcyA9IHNvcnRCcmVha3BvaW50c1ZhbHVlcyh2YWx1ZXMpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc29ydGVkVmFsdWVzKTtcbiAgZnVuY3Rpb24gdXAoa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlfSR7dW5pdH0pYDtcbiAgfVxuICBmdW5jdGlvbiBkb3duKGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbHVlc1trZXldID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXldIDoga2V5O1xuICAgIHJldHVybiBgQG1lZGlhIChtYXgtd2lkdGg6JHt2YWx1ZSAtIHN0ZXAgLyAxMDB9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIGJldHdlZW4oc3RhcnQsIGVuZCkge1xuICAgIGNvbnN0IGVuZEluZGV4ID0ga2V5cy5pbmRleE9mKGVuZCk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1pbi13aWR0aDoke3R5cGVvZiB2YWx1ZXNbc3RhcnRdID09PSAnbnVtYmVyJyA/IHZhbHVlc1tzdGFydF0gOiBzdGFydH0ke3VuaXR9KSBhbmQgYCArIGAobWF4LXdpZHRoOiR7KGVuZEluZGV4ICE9PSAtMSAmJiB0eXBlb2YgdmFsdWVzW2tleXNbZW5kSW5kZXhdXSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5c1tlbmRJbmRleF1dIDogZW5kKSAtIHN0ZXAgLyAxMDB9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIG9ubHkoa2V5KSB7XG4gICAgaWYgKGtleXMuaW5kZXhPZihrZXkpICsgMSA8IGtleXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYmV0d2VlbihrZXksIGtleXNba2V5cy5pbmRleE9mKGtleSkgKyAxXSk7XG4gICAgfVxuICAgIHJldHVybiB1cChrZXkpO1xuICB9XG4gIGZ1bmN0aW9uIG5vdChrZXkpIHtcbiAgICAvLyBoYW5kbGUgZmlyc3QgYW5kIGxhc3Qga2V5IHNlcGFyYXRlbHksIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHlcbiAgICBjb25zdCBrZXlJbmRleCA9IGtleXMuaW5kZXhPZihrZXkpO1xuICAgIGlmIChrZXlJbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVwKGtleXNbMV0pO1xuICAgIH1cbiAgICBpZiAoa2V5SW5kZXggPT09IGtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIGRvd24oa2V5c1trZXlJbmRleF0pO1xuICAgIH1cbiAgICByZXR1cm4gYmV0d2VlbihrZXksIGtleXNba2V5cy5pbmRleE9mKGtleSkgKyAxXSkucmVwbGFjZSgnQG1lZGlhJywgJ0BtZWRpYSBub3QgYWxsIGFuZCcpO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAga2V5cyxcbiAgICB2YWx1ZXM6IHNvcnRlZFZhbHVlcyxcbiAgICB1cCxcbiAgICBkb3duLFxuICAgIGJldHdlZW4sXG4gICAgb25seSxcbiAgICBub3QsXG4gICAgdW5pdFxuICB9LCBvdGhlcik7XG59IiwgImNvbnN0IHNoYXBlID0ge1xuICBib3JkZXJSYWRpdXM6IDRcbn07XG5leHBvcnQgZGVmYXVsdCBzaGFwZTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5cbi8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc21bLlxuZXhwb3J0IGNvbnN0IHZhbHVlcyA9IHtcbiAgeHM6IDAsXG4gIC8vIHBob25lXG4gIHNtOiA2MDAsXG4gIC8vIHRhYmxldFxuICBtZDogOTAwLFxuICAvLyBzbWFsbCBsYXB0b3BcbiAgbGc6IDEyMDAsXG4gIC8vIGRlc2t0b3BcbiAgeGw6IDE1MzYgLy8gbGFyZ2Ugc2NyZWVuXG59O1xuY29uc3QgZGVmYXVsdEJyZWFrcG9pbnRzID0ge1xuICAvLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4gIC8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbiAga2V5czogWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddLFxuICB1cDoga2V5ID0+IGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlc1trZXldfXB4KWBcbn07XG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKSB7XG4gIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBwcm9wVmFsdWUucmVkdWNlKChhY2MsIGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cCh0aGVtZUJyZWFrcG9pbnRzLmtleXNbaW5kZXhdKV0gPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlW2luZGV4XSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wVmFsdWUpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50KSA9PiB7XG4gICAgICAvLyBrZXkgaXMgYnJlYWtwb2ludFxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMudmFsdWVzIHx8IHZhbHVlcykuaW5kZXhPZihicmVha3BvaW50KSAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbWVkaWFLZXkgPSB0aGVtZUJyZWFrcG9pbnRzLnVwKGJyZWFrcG9pbnQpO1xuICAgICAgICBhY2NbbWVkaWFLZXldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVticmVha3BvaW50XSwgYnJlYWtwb2ludCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjc3NLZXkgPSBicmVha3BvaW50O1xuICAgICAgICBhY2NbY3NzS2V5XSA9IHByb3BWYWx1ZVtjc3NLZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5mdW5jdGlvbiBicmVha3BvaW50cyhzdHlsZUZ1bmN0aW9uKSB7XG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBuZXdTdHlsZUZ1bmN0aW9uID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gICAgY29uc3QgYmFzZSA9IHN0eWxlRnVuY3Rpb24ocHJvcHMpO1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgY29uc3QgZXh0ZW5kZWQgPSB0aGVtZUJyZWFrcG9pbnRzLmtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKHByb3BzW2tleV0pIHtcbiAgICAgICAgYWNjID0gYWNjIHx8IHt9O1xuICAgICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cChrZXkpXSA9IHN0eWxlRnVuY3Rpb24oX2V4dGVuZHMoe1xuICAgICAgICAgIHRoZW1lXG4gICAgICAgIH0sIHByb3BzW2tleV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbnVsbCk7XG4gICAgcmV0dXJuIG1lcmdlKGJhc2UsIGV4dGVuZGVkKTtcbiAgfTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX2V4dGVuZHMoe30sIHN0eWxlRnVuY3Rpb24ucHJvcFR5cGVzLCB7XG4gICAgeHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc206IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbGc6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgeGw6IFByb3BUeXBlcy5vYmplY3RcbiAgfSkgOiB7fTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wcyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnLCAuLi5zdHlsZUZ1bmN0aW9uLmZpbHRlclByb3BzXTtcbiAgcmV0dXJuIG5ld1N0eWxlRnVuY3Rpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQgPSB7fSkge1xuICB2YXIgX2JyZWFrcG9pbnRzSW5wdXQka2V5O1xuICBjb25zdCBicmVha3BvaW50c0luT3JkZXIgPSAoX2JyZWFrcG9pbnRzSW5wdXQka2V5ID0gYnJlYWtwb2ludHNJbnB1dC5rZXlzKSA9PSBudWxsID8gdm9pZCAwIDogX2JyZWFrcG9pbnRzSW5wdXQka2V5LnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50U3R5bGVLZXkgPSBicmVha3BvaW50c0lucHV0LnVwKGtleSk7XG4gICAgYWNjW2JyZWFrcG9pbnRTdHlsZUtleV0gPSB7fTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBicmVha3BvaW50c0luT3JkZXIgfHwge307XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoYnJlYWtwb2ludEtleXMsIHN0eWxlKSB7XG4gIHJldHVybiBicmVha3BvaW50S2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludE91dHB1dCA9IGFjY1trZXldO1xuICAgIGNvbnN0IGlzQnJlYWtwb2ludFVudXNlZCA9ICFicmVha3BvaW50T3V0cHV0IHx8IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRPdXRwdXQpLmxlbmd0aCA9PT0gMDtcbiAgICBpZiAoaXNCcmVha3BvaW50VW51c2VkKSB7XG4gICAgICBkZWxldGUgYWNjW2tleV07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHN0eWxlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcihicmVha3BvaW50c0lucHV0LCAuLi5zdHlsZXMpIHtcbiAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdChicmVha3BvaW50c0lucHV0KTtcbiAgY29uc3QgbWVyZ2VkT3V0cHV0ID0gW2VtcHR5QnJlYWtwb2ludHMsIC4uLnN0eWxlc10ucmVkdWNlKChwcmV2LCBuZXh0KSA9PiBkZWVwbWVyZ2UocHJldiwgbmV4dCksIHt9KTtcbiAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpLCBtZXJnZWRPdXRwdXQpO1xufVxuXG4vLyBjb21wdXRlIGJhc2UgZm9yIHJlc3BvbnNpdmUgdmFsdWVzOyBlLmcuLFxuLy8gWzEsMiwzXSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbi8vIHt4czogMSwgc206IDIsIG1kOiAzfSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQnJlYWtwb2ludHNCYXNlKGJyZWFrcG9pbnRWYWx1ZXMsIHRoZW1lQnJlYWtwb2ludHMpIHtcbiAgLy8gZml4ZWQgdmFsdWVcbiAgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBiYXNlID0ge307XG4gIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMpO1xuICBpZiAoQXJyYXkuaXNBcnJheShicmVha3BvaW50VmFsdWVzKSkge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKChicmVha3BvaW50LCBpKSA9PiB7XG4gICAgICBpZiAoaSA8IGJyZWFrcG9pbnRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgICAgaWYgKGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCkge1xuICAgICAgICBiYXNlW2JyZWFrcG9pbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYmFzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gIHZhbHVlczogYnJlYWtwb2ludFZhbHVlcyxcbiAgYnJlYWtwb2ludHM6IHRoZW1lQnJlYWtwb2ludHMsXG4gIGJhc2U6IGN1c3RvbUJhc2Vcbn0pIHtcbiAgY29uc3QgYmFzZSA9IGN1c3RvbUJhc2UgfHwgY29tcHV0ZUJyZWFrcG9pbnRzQmFzZShicmVha3BvaW50VmFsdWVzLCB0aGVtZUJyZWFrcG9pbnRzKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGJhc2UpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYnJlYWtwb2ludFZhbHVlcztcbiAgfVxuICBsZXQgcHJldmlvdXM7XG4gIHJldHVybiBrZXlzLnJlZHVjZSgoYWNjLCBicmVha3BvaW50LCBpKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludFZhbHVlcykpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbaV0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbaV0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gaTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsID8gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSA6IGJyZWFrcG9pbnRWYWx1ZXNbcHJldmlvdXNdO1xuICAgICAgcHJldmlvdXMgPSBicmVha3BvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5leHBvcnQgZGVmYXVsdCBicmVha3BvaW50czsiLCAiaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5mdW5jdGlvbiBtZXJnZShhY2MsIGl0ZW0pIHtcbiAgaWYgKCFpdGVtKSB7XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuICByZXR1cm4gZGVlcG1lcmdlKGFjYywgaXRlbSwge1xuICAgIGNsb25lOiBmYWxzZSAvLyBObyBuZWVkIHRvIGNsb25lIGRlZXAsIGl0J3Mgd2F5IGZhc3Rlci5cbiAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBtZXJnZTsiLCAiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoKG9iaiwgcGF0aCwgY2hlY2tWYXJzID0gdHJ1ZSkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaGVjayBpZiBDU1MgdmFyaWFibGVzIGFyZSB1c2VkXG4gIGlmIChvYmogJiYgb2JqLnZhcnMgJiYgY2hlY2tWYXJzKSB7XG4gICAgY29uc3QgdmFsID0gYHZhcnMuJHtwYXRofWAuc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICYmIGFjY1tpdGVtXSA/IGFjY1tpdGVtXSA6IG51bGwsIG9iaik7XG4gICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgaWYgKGFjYyAmJiBhY2NbaXRlbV0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFjY1tpdGVtXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIG9iaik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwsIHVzZXJWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsKSB7XG4gIGxldCB2YWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZU1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWx1ZSA9IHRoZW1lTWFwcGluZyhwcm9wVmFsdWVGaW5hbCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZU1hcHBpbmcpKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmdbcHJvcFZhbHVlRmluYWxdIHx8IHVzZXJWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGdldFBhdGgodGhlbWVNYXBwaW5nLCBwcm9wVmFsdWVGaW5hbCkgfHwgdXNlclZhbHVlO1xuICB9XG4gIGlmICh0cmFuc2Zvcm0pIHtcbiAgICB2YWx1ZSA9IHRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlLCB0aGVtZU1hcHBpbmcpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHN0eWxlKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHByb3AsXG4gICAgY3NzUHJvcGVydHkgPSBvcHRpb25zLnByb3AsXG4gICAgdGhlbWVLZXksXG4gICAgdHJhbnNmb3JtXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICBpZiAocHJvcHNbcHJvcF0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BdO1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWU7XG4gICAgY29uc3QgdGhlbWVNYXBwaW5nID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXkpIHx8IHt9O1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfTtcbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgICBbcHJvcF06IHJlc3BvbnNpdmVQcm9wVHlwZVxuICB9IDoge307XG4gIGZuLmZpbHRlclByb3BzID0gW3Byb3BdO1xuICByZXR1cm4gZm47XG59XG5leHBvcnQgZGVmYXVsdCBzdHlsZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICBjb25zdCBjYWNoZSA9IHt9O1xuICByZXR1cm4gYXJnID0+IHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59IiwgImltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcbmltcG9ydCBtZW1vaXplIGZyb20gJy4vbWVtb2l6ZSc7XG5jb25zdCBwcm9wZXJ0aWVzID0ge1xuICBtOiAnbWFyZ2luJyxcbiAgcDogJ3BhZGRpbmcnXG59O1xuY29uc3QgZGlyZWN0aW9ucyA9IHtcbiAgdDogJ1RvcCcsXG4gIHI6ICdSaWdodCcsXG4gIGI6ICdCb3R0b20nLFxuICBsOiAnTGVmdCcsXG4gIHg6IFsnTGVmdCcsICdSaWdodCddLFxuICB5OiBbJ1RvcCcsICdCb3R0b20nXVxufTtcbmNvbnN0IGFsaWFzZXMgPSB7XG4gIG1hcmdpblg6ICdteCcsXG4gIG1hcmdpblk6ICdteScsXG4gIHBhZGRpbmdYOiAncHgnLFxuICBwYWRkaW5nWTogJ3B5J1xufTtcblxuLy8gbWVtb2l6ZSgpIGltcGFjdDpcbi8vIEZyb20gMzAwLDAwMCBvcHMvc2VjXG4vLyBUbyAzNTAsMDAwIG9wcy9zZWNcbmNvbnN0IGdldENzc1Byb3BlcnRpZXMgPSBtZW1vaXplKHByb3AgPT4ge1xuICAvLyBJdCdzIG5vdCBhIHNob3J0aGFuZCBub3RhdGlvbi5cbiAgaWYgKHByb3AubGVuZ3RoID4gMikge1xuICAgIGlmIChhbGlhc2VzW3Byb3BdKSB7XG4gICAgICBwcm9wID0gYWxpYXNlc1twcm9wXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtwcm9wXTtcbiAgICB9XG4gIH1cbiAgY29uc3QgW2EsIGJdID0gcHJvcC5zcGxpdCgnJyk7XG4gIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1thXTtcbiAgY29uc3QgZGlyZWN0aW9uID0gZGlyZWN0aW9uc1tiXSB8fCAnJztcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGlyZWN0aW9uKSA/IGRpcmVjdGlvbi5tYXAoZGlyID0+IHByb3BlcnR5ICsgZGlyKSA6IFtwcm9wZXJ0eSArIGRpcmVjdGlvbl07XG59KTtcbmV4cG9ydCBjb25zdCBtYXJnaW5LZXlzID0gWydtJywgJ210JywgJ21yJywgJ21iJywgJ21sJywgJ214JywgJ215JywgJ21hcmdpbicsICdtYXJnaW5Ub3AnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luWCcsICdtYXJnaW5ZJywgJ21hcmdpbklubGluZScsICdtYXJnaW5JbmxpbmVTdGFydCcsICdtYXJnaW5JbmxpbmVFbmQnLCAnbWFyZ2luQmxvY2snLCAnbWFyZ2luQmxvY2tTdGFydCcsICdtYXJnaW5CbG9ja0VuZCddO1xuZXhwb3J0IGNvbnN0IHBhZGRpbmdLZXlzID0gWydwJywgJ3B0JywgJ3ByJywgJ3BiJywgJ3BsJywgJ3B4JywgJ3B5JywgJ3BhZGRpbmcnLCAncGFkZGluZ1RvcCcsICdwYWRkaW5nUmlnaHQnLCAncGFkZGluZ0JvdHRvbScsICdwYWRkaW5nTGVmdCcsICdwYWRkaW5nWCcsICdwYWRkaW5nWScsICdwYWRkaW5nSW5saW5lJywgJ3BhZGRpbmdJbmxpbmVTdGFydCcsICdwYWRkaW5nSW5saW5lRW5kJywgJ3BhZGRpbmdCbG9jaycsICdwYWRkaW5nQmxvY2tTdGFydCcsICdwYWRkaW5nQmxvY2tFbmQnXTtcbmNvbnN0IHNwYWNpbmdLZXlzID0gWy4uLm1hcmdpbktleXMsIC4uLnBhZGRpbmdLZXlzXTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVbmFyeVVuaXQodGhlbWUsIHRoZW1lS2V5LCBkZWZhdWx0VmFsdWUsIHByb3BOYW1lKSB7XG4gIHZhciBfZ2V0UGF0aDtcbiAgY29uc3QgdGhlbWVTcGFjaW5nID0gKF9nZXRQYXRoID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXksIGZhbHNlKSkgIT0gbnVsbCA/IF9nZXRQYXRoIDogZGVmYXVsdFZhbHVlO1xuICBpZiAodHlwZW9mIHRoZW1lU3BhY2luZyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gYWJzID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWJzID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWJzO1xuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhYnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBFeHBlY3RlZCAke3Byb3BOYW1lfSBhcmd1bWVudCB0byBiZSBhIG51bWJlciBvciBhIHN0cmluZywgZ290ICR7YWJzfS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoZW1lU3BhY2luZyAqIGFicztcbiAgICB9O1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHRoZW1lU3BhY2luZykpIHtcbiAgICByZXR1cm4gYWJzID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYWJzID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gYWJzO1xuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFicykpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgYXJyYXkgdHlwZSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBub24gaW50ZWdlciB2YWx1ZXMuYCArIGBZb3Ugc2hvdWxkIGVpdGhlciB1c2UgYW4gaW50ZWdlciB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGluZGV4LCBvciBkZWZpbmUgdGhlIFxcYHRoZW1lLiR7dGhlbWVLZXl9XFxgIGFzIGEgbnVtYmVyLmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfSBlbHNlIGlmIChhYnMgPiB0aGVtZVNwYWNpbmcubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSB2YWx1ZSBwcm92aWRlZCAoJHthYnN9KSBvdmVyZmxvd3MuYCwgYFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZTogJHtKU09OLnN0cmluZ2lmeSh0aGVtZVNwYWNpbmcpfS5gLCBgJHthYnN9ID4gJHt0aGVtZVNwYWNpbmcubGVuZ3RoIC0gMX0sIHlvdSBuZWVkIHRvIGFkZCB0aGUgbWlzc2luZyB2YWx1ZXMuYF0uam9pbignXFxuJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhlbWVTcGFjaW5nW2Fic107XG4gICAgfTtcbiAgfVxuICBpZiAodHlwZW9mIHRoZW1lU3BhY2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0aGVtZVNwYWNpbmc7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgdmFsdWUgKCR7dGhlbWVTcGFjaW5nfSkgaXMgaW52YWxpZC5gLCAnSXQgc2hvdWxkIGJlIGEgbnVtYmVyLCBhbiBhcnJheSBvciBhIGZ1bmN0aW9uLiddLmpvaW4oJ1xcbicpKTtcbiAgfVxuICByZXR1cm4gKCkgPT4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuYXJ5U3BhY2luZyh0aGVtZSkge1xuICByZXR1cm4gY3JlYXRlVW5hcnlVbml0KHRoZW1lLCAnc3BhY2luZycsIDgsICdzcGFjaW5nJyk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSkge1xuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3N0cmluZycgfHwgcHJvcFZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gcHJvcFZhbHVlO1xuICB9XG4gIGNvbnN0IGFicyA9IE1hdGguYWJzKHByb3BWYWx1ZSk7XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0gdHJhbnNmb3JtZXIoYWJzKTtcbiAgaWYgKHByb3BWYWx1ZSA+PSAwKSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICB9XG4gIGlmICh0eXBlb2YgdHJhbnNmb3JtZWQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIC10cmFuc2Zvcm1lZDtcbiAgfVxuICByZXR1cm4gYC0ke3RyYW5zZm9ybWVkfWA7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVGcm9tUHJvcFZhbHVlKGNzc1Byb3BlcnRpZXMsIHRyYW5zZm9ybWVyKSB7XG4gIHJldHVybiBwcm9wVmFsdWUgPT4gY3NzUHJvcGVydGllcy5yZWR1Y2UoKGFjYywgY3NzUHJvcGVydHkpID0+IHtcbiAgICBhY2NbY3NzUHJvcGVydHldID0gZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUNzc1Byb3BlcnR5KHByb3BzLCBrZXlzLCBwcm9wLCB0cmFuc2Zvcm1lcikge1xuICAvLyBVc2luZyBhIGhhc2ggY29tcHV0YXRpb24gb3ZlciBhbiBhcnJheSBpdGVyYXRpb24gY291bGQgYmUgZmFzdGVyLCBidXQgd2l0aCBvbmx5IDI4IGl0ZW1zLFxuICAvLyBpdCdzIGRvZXNuJ3Qgd29ydGggdGhlIGJ1bmRsZSBzaXplLlxuICBpZiAoa2V5cy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGNzc1Byb3BlcnRpZXMgPSBnZXRDc3NQcm9wZXJ0aWVzKHByb3ApO1xuICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBnZXRTdHlsZUZyb21Qcm9wVmFsdWUoY3NzUHJvcGVydGllcywgdHJhbnNmb3JtZXIpO1xuICBjb25zdCBwcm9wVmFsdWUgPSBwcm9wc1twcm9wXTtcbiAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wVmFsdWUsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG59XG5mdW5jdGlvbiBzdHlsZShwcm9wcywga2V5cykge1xuICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5U3BhY2luZyhwcm9wcy50aGVtZSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykubWFwKHByb3AgPT4gcmVzb2x2ZUNzc1Byb3BlcnR5KHByb3BzLCBrZXlzLCBwcm9wLCB0cmFuc2Zvcm1lcikpLnJlZHVjZShtZXJnZSwge30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hcmdpbihwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIG1hcmdpbktleXMpO1xufVxubWFyZ2luLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBtYXJnaW5LZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSByZXNwb25zaXZlUHJvcFR5cGU7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbm1hcmdpbi5maWx0ZXJQcm9wcyA9IG1hcmdpbktleXM7XG5leHBvcnQgZnVuY3Rpb24gcGFkZGluZyhwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIHBhZGRpbmdLZXlzKTtcbn1cbnBhZGRpbmcucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHBhZGRpbmdLZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSByZXNwb25zaXZlUHJvcFR5cGU7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbnBhZGRpbmcuZmlsdGVyUHJvcHMgPSBwYWRkaW5nS2V5cztcbmZ1bmN0aW9uIHNwYWNpbmcocHJvcHMpIHtcbiAgcmV0dXJuIHN0eWxlKHByb3BzLCBzcGFjaW5nS2V5cyk7XG59XG5zcGFjaW5nLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzcGFjaW5nS2V5cy5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gIG9ialtrZXldID0gcmVzcG9uc2l2ZVByb3BUeXBlO1xuICByZXR1cm4gb2JqO1xufSwge30pIDoge307XG5zcGFjaW5nLmZpbHRlclByb3BzID0gc3BhY2luZ0tleXM7XG5leHBvcnQgZGVmYXVsdCBzcGFjaW5nOyIsICJpbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcgfSBmcm9tICcuLi9zcGFjaW5nJztcblxuLy8gVGhlIGRpZmZlcmVudCBzaWduYXR1cmVzIGltcGx5IGRpZmZlcmVudCBtZWFuaW5nIGZvciB0aGVpciBhcmd1bWVudHMgdGhhdCBjYW4ndCBiZSBleHByZXNzZWQgc3RydWN0dXJhbGx5LlxuLy8gV2UgZXhwcmVzcyB0aGUgZGlmZmVyZW5jZSB3aXRoIHZhcmlhYmxlIG5hbWVzLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTcGFjaW5nKHNwYWNpbmdJbnB1dCA9IDgpIHtcbiAgLy8gQWxyZWFkeSB0cmFuc2Zvcm1lZC5cbiAgaWYgKHNwYWNpbmdJbnB1dC5tdWkpIHtcbiAgICByZXR1cm4gc3BhY2luZ0lucHV0O1xuICB9XG5cbiAgLy8gTWF0ZXJpYWwgRGVzaWduIGxheW91dHMgYXJlIHZpc3VhbGx5IGJhbGFuY2VkLiBNb3N0IG1lYXN1cmVtZW50cyBhbGlnbiB0byBhbiA4ZHAgZ3JpZCwgd2hpY2ggYWxpZ25zIGJvdGggc3BhY2luZyBhbmQgdGhlIG92ZXJhbGwgbGF5b3V0LlxuICAvLyBTbWFsbGVyIGNvbXBvbmVudHMsIHN1Y2ggYXMgaWNvbnMsIGNhbiBhbGlnbiB0byBhIDRkcCBncmlkLlxuICAvLyBodHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi9sYXlvdXQvdW5kZXJzdGFuZGluZy1sYXlvdXQuaHRtbFxuICBjb25zdCB0cmFuc2Zvcm0gPSBjcmVhdGVVbmFyeVNwYWNpbmcoe1xuICAgIHNwYWNpbmc6IHNwYWNpbmdJbnB1dFxuICB9KTtcbiAgY29uc3Qgc3BhY2luZyA9ICguLi5hcmdzSW5wdXQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCEoYXJnc0lucHV0Lmxlbmd0aCA8PSA0KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZCwgZXhwZWN0ZWQgYmV0d2VlbiAwIGFuZCA0LCBnb3QgJHthcmdzSW5wdXQubGVuZ3RofWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhcmdzID0gYXJnc0lucHV0Lmxlbmd0aCA9PT0gMCA/IFsxXSA6IGFyZ3NJbnB1dDtcbiAgICByZXR1cm4gYXJncy5tYXAoYXJndW1lbnQgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdHJhbnNmb3JtKGFyZ3VtZW50KTtcbiAgICAgIHJldHVybiB0eXBlb2Ygb3V0cHV0ID09PSAnbnVtYmVyJyA/IGAke291dHB1dH1weGAgOiBvdXRwdXQ7XG4gICAgfSkuam9pbignICcpO1xuICB9O1xuICBzcGFjaW5nLm11aSA9IHRydWU7XG4gIHJldHVybiBzcGFjaW5nO1xufSIsICJpbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IG1lcmdlIGZyb20gJy4uL21lcmdlJztcbmltcG9ydCB7IGdldFBhdGgsIGdldFN0eWxlVmFsdWUgYXMgZ2V0VmFsdWUgfSBmcm9tICcuLi9zdHlsZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0LCByZW1vdmVVbnVzZWRCcmVha3BvaW50cyB9IGZyb20gJy4uL2JyZWFrcG9pbnRzJztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi9kZWZhdWx0U3hDb25maWcnO1xuZnVuY3Rpb24gb2JqZWN0c0hhdmVTYW1lS2V5cyguLi5vYmplY3RzKSB7XG4gIGNvbnN0IGFsbEtleXMgPSBvYmplY3RzLnJlZHVjZSgoa2V5cywgb2JqZWN0KSA9PiBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpKSwgW10pO1xuICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoYWxsS2V5cyk7XG4gIHJldHVybiBvYmplY3RzLmV2ZXJ5KG9iamVjdCA9PiB1bmlvbi5zaXplID09PSBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBjYWxsSWZGbihtYXliZUZuLCBhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nID8gbWF5YmVGbihhcmcpIDogbWF5YmVGbjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCgpIHtcbiAgZnVuY3Rpb24gZ2V0VGhlbWVWYWx1ZShwcm9wLCB2YWwsIHRoZW1lLCBjb25maWcpIHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIFtwcm9wXTogdmFsLFxuICAgICAgdGhlbWVcbiAgICB9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb25maWdbcHJvcF07XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbcHJvcF06IHZhbFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgY3NzUHJvcGVydHkgPSBwcm9wLFxuICAgICAgdGhlbWVLZXksXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBzdHlsZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM4MTIzXG4gICAgaWYgKHRoZW1lS2V5ID09PSAndHlwb2dyYXBoeScgJiYgdmFsID09PSAnaW5oZXJpdCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB0aGVtZU1hcHBpbmcgPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSkgfHwge307XG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICByZXR1cm4gc3R5bGUocHJvcHMpO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgaWYgKHByb3BWYWx1ZUZpbmFsID09PSB2YWx1ZSAmJiB0eXBlb2YgcHJvcFZhbHVlRmluYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEhhdmVuJ3QgZm91bmQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHZhbCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICBmdW5jdGlvbiBzdHlsZUZ1bmN0aW9uU3gocHJvcHMpIHtcbiAgICB2YXIgX3RoZW1lJHVuc3RhYmxlX3N4Q29uO1xuICAgIGNvbnN0IHtcbiAgICAgIHN4LFxuICAgICAgdGhlbWUgPSB7fVxuICAgIH0gPSBwcm9wcyB8fCB7fTtcbiAgICBpZiAoIXN4KSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzIHdpbGwgbmVnbGVjdCBudWxsXG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IChfdGhlbWUkdW5zdGFibGVfc3hDb24gPSB0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF90aGVtZSR1bnN0YWJsZV9zeENvbiA6IGRlZmF1bHRTeENvbmZpZztcblxuICAgIC8qXG4gICAgICogUmVjZWl2ZSBgc3hJbnB1dGAgYXMgb2JqZWN0IG9yIGNhbGxiYWNrXG4gICAgICogYW5kIHRoZW4gcmVjdXJzaXZlbHkgY2hlY2sga2V5cyAmIHZhbHVlcyB0byBjcmVhdGUgbWVkaWEgcXVlcnkgb2JqZWN0IHN0eWxlcy5cbiAgICAgKiAodGhlIHJlc3VsdCB3aWxsIGJlIHVzZWQgaW4gYHN0eWxlZGApXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJhdmVyc2Uoc3hJbnB1dCkge1xuICAgICAgbGV0IHN4T2JqZWN0ID0gc3hJbnB1dDtcbiAgICAgIGlmICh0eXBlb2Ygc3hJbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzeE9iamVjdCA9IHN4SW5wdXQodGhlbWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3hJbnB1dCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgcmV0dXJuIHN4SW5wdXQ7XG4gICAgICB9XG4gICAgICBpZiAoIXN4T2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCh0aGVtZS5icmVha3BvaW50cyk7XG4gICAgICBjb25zdCBicmVha3BvaW50c0tleXMgPSBPYmplY3Qua2V5cyhlbXB0eUJyZWFrcG9pbnRzKTtcbiAgICAgIGxldCBjc3MgPSBlbXB0eUJyZWFrcG9pbnRzO1xuICAgICAgT2JqZWN0LmtleXMoc3hPYmplY3QpLmZvckVhY2goc3R5bGVLZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNhbGxJZkZuKHN4T2JqZWN0W3N0eWxlS2V5XSwgdGhlbWUpO1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnW3N0eWxlS2V5XSkge1xuICAgICAgICAgICAgICBjc3MgPSBtZXJnZShjc3MsIGdldFRoZW1lVmFsdWUoc3R5bGVLZXksIHZhbHVlLCB0aGVtZSwgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c1ZhbHVlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICB9LCB2YWx1ZSwgeCA9PiAoe1xuICAgICAgICAgICAgICAgIFtzdHlsZUtleV06IHhcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBpZiAob2JqZWN0c0hhdmVTYW1lS2V5cyhicmVha3BvaW50c1ZhbHVlcywgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY3NzW3N0eWxlS2V5XSA9IHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICAgICAgICAgICAgICBzeDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgYnJlYWtwb2ludHNWYWx1ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgZ2V0VGhlbWVWYWx1ZShzdHlsZUtleSwgdmFsdWUsIHRoZW1lLCBjb25maWcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzS2V5cywgY3NzKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3gpID8gc3gubWFwKHRyYXZlcnNlKSA6IHRyYXZlcnNlKHN4KTtcbiAgfVxuICByZXR1cm4gc3R5bGVGdW5jdGlvblN4O1xufVxuY29uc3Qgc3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCk7XG5zdHlsZUZ1bmN0aW9uU3guZmlsdGVyUHJvcHMgPSBbJ3N4J107XG5leHBvcnQgZGVmYXVsdCBzdHlsZUZ1bmN0aW9uU3g7IiwgImltcG9ydCBtZXJnZSBmcm9tICcuL21lcmdlJztcbmZ1bmN0aW9uIGNvbXBvc2UoLi4uc3R5bGVzKSB7XG4gIGNvbnN0IGhhbmRsZXJzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4ge1xuICAgIHN0eWxlLmZpbHRlclByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBhY2NbcHJvcF0gPSBzdHlsZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgLy8gZmFsc2UgcG9zaXRpdmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG4gIGNvbnN0IGZuID0gcHJvcHMgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcykucmVkdWNlKChhY2MsIHByb3ApID0+IHtcbiAgICAgIGlmIChoYW5kbGVyc1twcm9wXSkge1xuICAgICAgICByZXR1cm4gbWVyZ2UoYWNjLCBoYW5kbGVyc1twcm9wXShwcm9wcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH07XG4gIGZuLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBzdHlsZXMucmVkdWNlKChhY2MsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGFjYywgc3R5bGUucHJvcFR5cGVzKSwge30pIDoge307XG4gIGZuLmZpbHRlclByb3BzID0gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gYWNjLmNvbmNhdChzdHlsZS5maWx0ZXJQcm9wcyksIFtdKTtcbiAgcmV0dXJuIGZuO1xufVxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZTsiLCAiaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHsgY3JlYXRlVW5hcnlVbml0LCBnZXRWYWx1ZSB9IGZyb20gJy4vc3BhY2luZyc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGJvcmRlclRyYW5zZm9ybSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gYCR7dmFsdWV9cHggc29saWRgO1xufVxuZnVuY3Rpb24gY3JlYXRlQm9yZGVyU3R5bGUocHJvcCwgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBzdHlsZSh7XG4gICAgcHJvcCxcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybVxuICB9KTtcbn1cbmV4cG9ydCBjb25zdCBib3JkZXIgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJUb3AgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJSaWdodCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJSaWdodCcsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbScsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3QgYm9yZGVyTGVmdCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJDb2xvcicpO1xuZXhwb3J0IGNvbnN0IGJvcmRlclRvcENvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclRvcENvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyUmlnaHRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJSaWdodENvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyQm90dG9tQ29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJMZWZ0Q29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyTGVmdENvbG9yJyk7XG5leHBvcnQgY29uc3Qgb3V0bGluZSA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBvdXRsaW5lQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnb3V0bGluZUNvbG9yJyk7XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCBib3JkZXJSYWRpdXMgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5ib3JkZXJSYWRpdXMgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5ib3JkZXJSYWRpdXMgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NoYXBlLmJvcmRlclJhZGl1cycsIDQsICdib3JkZXJSYWRpdXMnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGJvcmRlclJhZGl1czogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmJvcmRlclJhZGl1cywgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5ib3JkZXJSYWRpdXMucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgYm9yZGVyUmFkaXVzOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmJvcmRlclJhZGl1cy5maWx0ZXJQcm9wcyA9IFsnYm9yZGVyUmFkaXVzJ107XG5jb25zdCBib3JkZXJzID0gY29tcG9zZShib3JkZXIsIGJvcmRlclRvcCwgYm9yZGVyUmlnaHQsIGJvcmRlckJvdHRvbSwgYm9yZGVyTGVmdCwgYm9yZGVyQ29sb3IsIGJvcmRlclRvcENvbG9yLCBib3JkZXJSaWdodENvbG9yLCBib3JkZXJCb3R0b21Db2xvciwgYm9yZGVyTGVmdENvbG9yLCBib3JkZXJSYWRpdXMsIG91dGxpbmUsIG91dGxpbmVDb2xvcik7XG5leHBvcnQgZGVmYXVsdCBib3JkZXJzOyIsICJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHsgY3JlYXRlVW5hcnlVbml0LCBnZXRWYWx1ZSB9IGZyb20gJy4vc3BhY2luZyc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCBnYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5nYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5nYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnZ2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBnYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5nYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuZ2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGdhcDogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5nYXAuZmlsdGVyUHJvcHMgPSBbJ2dhcCddO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5leHBvcnQgY29uc3QgY29sdW1uR2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMuY29sdW1uR2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuY29sdW1uR2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ2NvbHVtbkdhcCcpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgY29sdW1uR2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMuY29sdW1uR2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmNvbHVtbkdhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICBjb2x1bW5HYXA6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xuY29sdW1uR2FwLmZpbHRlclByb3BzID0gWydjb2x1bW5HYXAnXTtcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IHJvd0dhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLnJvd0dhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLnJvd0dhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdyb3dHYXAnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIHJvd0dhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLnJvd0dhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5yb3dHYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgcm93R2FwOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbnJvd0dhcC5maWx0ZXJQcm9wcyA9IFsncm93R2FwJ107XG5leHBvcnQgY29uc3QgZ3JpZENvbHVtbiA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRDb2x1bW4nXG59KTtcbmV4cG9ydCBjb25zdCBncmlkUm93ID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFJvdydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvRmxvdyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvRmxvdydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvQ29sdW1ucyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvQ29sdW1ucydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRBdXRvUm93cyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBdXRvUm93cydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkVGVtcGxhdGVDb2x1bW5zJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFRlbXBsYXRlUm93cyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZVJvd3MnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkVGVtcGxhdGVBcmVhcyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZUFyZWFzJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEFyZWEgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkQXJlYSdcbn0pO1xuY29uc3QgZ3JpZCA9IGNvbXBvc2UoZ2FwLCBjb2x1bW5HYXAsIHJvd0dhcCwgZ3JpZENvbHVtbiwgZ3JpZFJvdywgZ3JpZEF1dG9GbG93LCBncmlkQXV0b0NvbHVtbnMsIGdyaWRBdXRvUm93cywgZ3JpZFRlbXBsYXRlQ29sdW1ucywgZ3JpZFRlbXBsYXRlUm93cywgZ3JpZFRlbXBsYXRlQXJlYXMsIGdyaWRBcmVhKTtcbmV4cG9ydCBkZWZhdWx0IGdyaWQ7IiwgImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZVRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlKSB7XG4gIGlmICh1c2VyVmFsdWUgPT09ICdncmV5Jykge1xuICAgIHJldHVybiB1c2VyVmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuZXhwb3J0IGNvbnN0IGNvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnY29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJnY29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdiZ2NvbG9yJyxcbiAgY3NzUHJvcGVydHk6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2JhY2tncm91bmRDb2xvcicsXG4gIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxufSk7XG5jb25zdCBwYWxldHRlID0gY29tcG9zZShjb2xvciwgYmdjb2xvciwgYmFja2dyb3VuZENvbG9yKTtcbmV4cG9ydCBkZWZhdWx0IHBhbGV0dGU7IiwgImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgdmFsdWVzIGFzIGJyZWFrcG9pbnRzVmFsdWVzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5leHBvcnQgZnVuY3Rpb24gc2l6aW5nVHJhbnNmb3JtKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA8PSAxICYmIHZhbHVlICE9PSAwID8gYCR7dmFsdWUgKiAxMDB9JWAgOiB2YWx1ZTtcbn1cbmV4cG9ydCBjb25zdCB3aWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1heFdpZHRoID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMubWF4V2lkdGggIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5tYXhXaWR0aCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiB7XG4gICAgICB2YXIgX3Byb3BzJHRoZW1lLCBfcHJvcHMkdGhlbWUyO1xuICAgICAgY29uc3QgYnJlYWtwb2ludCA9ICgoX3Byb3BzJHRoZW1lID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IF9wcm9wcyR0aGVtZS5icmVha3BvaW50cykgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lID0gX3Byb3BzJHRoZW1lLnZhbHVlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZVtwcm9wVmFsdWVdKSB8fCBicmVha3BvaW50c1ZhbHVlc1twcm9wVmFsdWVdO1xuICAgICAgaWYgKCFicmVha3BvaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IHNpemluZ1RyYW5zZm9ybShwcm9wVmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKChfcHJvcHMkdGhlbWUyID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZTIgPSBfcHJvcHMkdGhlbWUyLmJyZWFrcG9pbnRzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lMi51bml0KSAhPT0gJ3B4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1heFdpZHRoOiBgJHticmVha3BvaW50fSR7cHJvcHMudGhlbWUuYnJlYWtwb2ludHMudW5pdH1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXhXaWR0aDogYnJlYWtwb2ludFxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMubWF4V2lkdGgsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xubWF4V2lkdGguZmlsdGVyUHJvcHMgPSBbJ21heFdpZHRoJ107XG5leHBvcnQgY29uc3QgbWluV2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICdtaW5XaWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBoZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdoZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWF4SGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnbWF4SGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1pbkhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ21pbkhlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBzaXplV2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICdzaXplJyxcbiAgY3NzUHJvcGVydHk6ICd3aWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBzaXplSGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnc2l6ZScsXG4gIGNzc1Byb3BlcnR5OiAnaGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJveFNpemluZyA9IHN0eWxlKHtcbiAgcHJvcDogJ2JveFNpemluZydcbn0pO1xuY29uc3Qgc2l6aW5nID0gY29tcG9zZSh3aWR0aCwgbWF4V2lkdGgsIG1pbldpZHRoLCBoZWlnaHQsIG1heEhlaWdodCwgbWluSGVpZ2h0LCBib3hTaXppbmcpO1xuZXhwb3J0IGRlZmF1bHQgc2l6aW5nOyIsICJpbXBvcnQgeyBwYWRkaW5nLCBtYXJnaW4gfSBmcm9tICcuLi9zcGFjaW5nJztcbmltcG9ydCB7IGJvcmRlclJhZGl1cywgYm9yZGVyVHJhbnNmb3JtIH0gZnJvbSAnLi4vYm9yZGVycyc7XG5pbXBvcnQgeyBnYXAsIHJvd0dhcCwgY29sdW1uR2FwIH0gZnJvbSAnLi4vY3NzR3JpZCc7XG5pbXBvcnQgeyBwYWxldHRlVHJhbnNmb3JtIH0gZnJvbSAnLi4vcGFsZXR0ZSc7XG5pbXBvcnQgeyBtYXhXaWR0aCwgc2l6aW5nVHJhbnNmb3JtIH0gZnJvbSAnLi4vc2l6aW5nJztcbmNvbnN0IGRlZmF1bHRTeENvbmZpZyA9IHtcbiAgLy8gYm9yZGVyc1xuICBib3JkZXI6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlclRvcDoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyUmlnaHQ6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIGJvcmRlckJvdHRvbToge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyTGVmdDoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlclRvcENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJSaWdodENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJCb3R0b21Db2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyTGVmdENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBvdXRsaW5lOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBvdXRsaW5lQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlclJhZGl1czoge1xuICAgIHRoZW1lS2V5OiAnc2hhcGUuYm9yZGVyUmFkaXVzJyxcbiAgICBzdHlsZTogYm9yZGVyUmFkaXVzXG4gIH0sXG4gIC8vIHBhbGV0dGVcbiAgY29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIHRyYW5zZm9ybTogcGFsZXR0ZVRyYW5zZm9ybVxuICB9LFxuICBiZ2NvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICBjc3NQcm9wZXJ0eTogJ2JhY2tncm91bmRDb2xvcicsXG4gICAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG4gIH0sXG4gIGJhY2tncm91bmRDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG4gIH0sXG4gIC8vIHNwYWNpbmdcbiAgcDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHB0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHI6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYjoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBsOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHg6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBweToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmc6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nVG9wOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1JpZ2h0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0JvdHRvbToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdMZWZ0OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ1g6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nWToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdJbmxpbmU6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lU3RhcnQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nSW5saW5lRW5kOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0Jsb2NrU3RhcnQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQmxvY2tFbmQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBtOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtdDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXI6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1iOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtbDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXg6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG15OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW46IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpblRvcDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luUmlnaHQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJvdHRvbToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luTGVmdDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luWDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luWToge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5JbmxpbmVTdGFydDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luSW5saW5lRW5kOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5CbG9jazoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2tTdGFydDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQmxvY2tFbmQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIC8vIGRpc3BsYXlcbiAgZGlzcGxheVByaW50OiB7XG4gICAgY3NzUHJvcGVydHk6IGZhbHNlLFxuICAgIHRyYW5zZm9ybTogdmFsdWUgPT4gKHtcbiAgICAgICdAbWVkaWEgcHJpbnQnOiB7XG4gICAgICAgIGRpc3BsYXk6IHZhbHVlXG4gICAgICB9XG4gICAgfSlcbiAgfSxcbiAgZGlzcGxheToge30sXG4gIG92ZXJmbG93OiB7fSxcbiAgdGV4dE92ZXJmbG93OiB7fSxcbiAgdmlzaWJpbGl0eToge30sXG4gIHdoaXRlU3BhY2U6IHt9LFxuICAvLyBmbGV4Ym94XG4gIGZsZXhCYXNpczoge30sXG4gIGZsZXhEaXJlY3Rpb246IHt9LFxuICBmbGV4V3JhcDoge30sXG4gIGp1c3RpZnlDb250ZW50OiB7fSxcbiAgYWxpZ25JdGVtczoge30sXG4gIGFsaWduQ29udGVudDoge30sXG4gIG9yZGVyOiB7fSxcbiAgZmxleDoge30sXG4gIGZsZXhHcm93OiB7fSxcbiAgZmxleFNocmluazoge30sXG4gIGFsaWduU2VsZjoge30sXG4gIGp1c3RpZnlJdGVtczoge30sXG4gIGp1c3RpZnlTZWxmOiB7fSxcbiAgLy8gZ3JpZFxuICBnYXA6IHtcbiAgICBzdHlsZTogZ2FwXG4gIH0sXG4gIHJvd0dhcDoge1xuICAgIHN0eWxlOiByb3dHYXBcbiAgfSxcbiAgY29sdW1uR2FwOiB7XG4gICAgc3R5bGU6IGNvbHVtbkdhcFxuICB9LFxuICBncmlkQ29sdW1uOiB7fSxcbiAgZ3JpZFJvdzoge30sXG4gIGdyaWRBdXRvRmxvdzoge30sXG4gIGdyaWRBdXRvQ29sdW1uczoge30sXG4gIGdyaWRBdXRvUm93czoge30sXG4gIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHt9LFxuICBncmlkVGVtcGxhdGVSb3dzOiB7fSxcbiAgZ3JpZFRlbXBsYXRlQXJlYXM6IHt9LFxuICBncmlkQXJlYToge30sXG4gIC8vIHBvc2l0aW9uc1xuICBwb3NpdGlvbjoge30sXG4gIHpJbmRleDoge1xuICAgIHRoZW1lS2V5OiAnekluZGV4J1xuICB9LFxuICB0b3A6IHt9LFxuICByaWdodDoge30sXG4gIGJvdHRvbToge30sXG4gIGxlZnQ6IHt9LFxuICAvLyBzaGFkb3dzXG4gIGJveFNoYWRvdzoge1xuICAgIHRoZW1lS2V5OiAnc2hhZG93cydcbiAgfSxcbiAgLy8gc2l6aW5nXG4gIHdpZHRoOiB7XG4gICAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbiAgfSxcbiAgbWF4V2lkdGg6IHtcbiAgICBzdHlsZTogbWF4V2lkdGhcbiAgfSxcbiAgbWluV2lkdGg6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBoZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtYXhIZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtaW5IZWlnaHQ6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBib3hTaXppbmc6IHt9LFxuICAvLyB0eXBvZ3JhcGh5XG4gIGZvbnRGYW1pbHk6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGZvbnRTaXplOiB7XG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9LFxuICBmb250U3R5bGU6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGZvbnRXZWlnaHQ6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGxldHRlclNwYWNpbmc6IHt9LFxuICB0ZXh0VHJhbnNmb3JtOiB7fSxcbiAgbGluZUhlaWdodDoge30sXG4gIHRleHRBbGlnbjoge30sXG4gIHR5cG9ncmFwaHk6IHtcbiAgICBjc3NQcm9wZXJ0eTogZmFsc2UsXG4gICAgdGhlbWVLZXk6ICd0eXBvZ3JhcGh5J1xuICB9XG59O1xuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdFN4Q29uZmlnOyIsICIvKipcbiAqIEEgdW5pdmVyc2FsIHV0aWxpdHkgdG8gc3R5bGUgY29tcG9uZW50cyB3aXRoIG11bHRpcGxlIGNvbG9yIG1vZGVzLiBBbHdheXMgdXNlIGl0IGZyb20gdGhlIHRoZW1lIG9iamVjdC5cbiAqIEl0IHdvcmtzIHdpdGg6XG4gKiAgLSBbQmFzaWMgdGhlbWVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL2RhcmstbW9kZS8pXG4gKiAgLSBbQ1NTIHRoZW1lIHZhcmlhYmxlc10oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2V4cGVyaW1lbnRhbC1hcGkvY3NzLXRoZW1lLXZhcmlhYmxlcy9vdmVydmlldy8pXG4gKiAgLSBaZXJvLXJ1bnRpbWUgZW5naW5lXG4gKlxuICogVGlwczogVXNlIGFuIGFycmF5IG92ZXIgb2JqZWN0IHNwcmVhZCBhbmQgcGxhY2UgYHRoZW1lLmFwcGx5U3R5bGVzKClgIGxhc3QuXG4gKlxuICogXHUyNzA1IFt7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LCB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pXVxuICpcbiAqIFx1RDgzRFx1REVBQiB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JywgLi4udGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7IGJhY2tncm91bmQ6ICcjMWMxYzFjJyB9KX1cbiAqXG4gKiBAZXhhbXBsZVxuICogMS4gdXNpbmcgd2l0aCBgc3R5bGVkYDpcbiAqIGBgYGpzeFxuICogICBjb25zdCBDb21wb25lbnQgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+IFtcbiAqICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywge1xuICogICAgICAgYmFja2dyb3VuZDogJyMxYzFjMWMnLFxuICogICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICB9KSxcbiAqICAgXSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogMi4gdXNpbmcgd2l0aCBgc3hgIHByb3A6XG4gKiBgYGBqc3hcbiAqICAgPEJveCBzeD17dGhlbWUgPT4gW1xuICogICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICAgYmFja2dyb3VuZDogJyMxYzFjMWMnLFxuICogICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gKiAgICAgIH0pLFxuICogICAgIF19XG4gKiAgIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogMy4gdGhlbWluZyBhIGNvbXBvbmVudDpcbiAqIGBgYGpzeFxuICogICBleHRlbmRUaGVtZSh7XG4gKiAgICAgY29tcG9uZW50czoge1xuICogICAgICAgTXVpQnV0dG9uOiB7XG4gKiAgICAgICAgIHN0eWxlT3ZlcnJpZGVzOiB7XG4gKiAgICAgICAgICAgcm9vdDogKHsgdGhlbWUgfSkgPT4gW1xuICogICAgICAgICAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICAgICAgICAgIHRoZW1lLmFwcGx5U3R5bGVzKCdkYXJrJywge1xuICogICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gKiAgICAgICAgICAgICB9KSxcbiAqICAgICAgICAgICBdLFxuICogICAgICAgICB9LFxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfSlcbiAqYGBgXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFwcGx5U3R5bGVzKGtleSwgc3R5bGVzKSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyAnYW55JyB0eXBlXG4gIGNvbnN0IHRoZW1lID0gdGhpcztcbiAgaWYgKHRoZW1lLnZhcnMgJiYgdHlwZW9mIHRoZW1lLmdldENvbG9yU2NoZW1lU2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBDc3NWYXJzUHJvdmlkZXIgaXMgdXNlZCBhcyBhIHByb3ZpZGVyLFxuICAgIC8vIHJldHVybnMgJyogOndoZXJlKFtkYXRhLW11aS1jb2xvci1zY2hlbWU9XCJsaWdodHxkYXJrXCJdKSAmJ1xuICAgIGNvbnN0IHNlbGVjdG9yID0gdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvcihrZXkpLnJlcGxhY2UoLyhcXFtbXlxcXV0rXFxdKS8sICcqOndoZXJlKCQxKScpO1xuICAgIHJldHVybiB7XG4gICAgICBbc2VsZWN0b3JdOiBzdHlsZXNcbiAgICB9O1xuICB9XG4gIGlmICh0aGVtZS5wYWxldHRlLm1vZGUgPT09IGtleSkge1xuICAgIHJldHVybiBzdHlsZXM7XG4gIH1cbiAgcmV0dXJuIHt9O1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5mdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG59XG5mdW5jdGlvbiB1c2VUaGVtZShkZWZhdWx0VGhlbWUgPSBudWxsKSB7XG4gIGNvbnN0IGNvbnRleHRUaGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcbiAgcmV0dXJuICFjb250ZXh0VGhlbWUgfHwgaXNPYmplY3RFbXB0eShjb250ZXh0VGhlbWUpID8gZGVmYXVsdFRoZW1lIDogY29udGV4dFRoZW1lO1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlVGhlbWU7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IHVzZVRoZW1lV2l0aG91dERlZmF1bHQgZnJvbSAnLi91c2VUaGVtZVdpdGhvdXREZWZhdWx0JztcbmV4cG9ydCBjb25zdCBzeXN0ZW1EZWZhdWx0VGhlbWUgPSBjcmVhdGVUaGVtZSgpO1xuZnVuY3Rpb24gdXNlVGhlbWUoZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lKSB7XG4gIHJldHVybiB1c2VUaGVtZVdpdGhvdXREZWZhdWx0KGRlZmF1bHRUaGVtZSk7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VUaGVtZTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInN4XCJdO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi9kZWZhdWx0U3hDb25maWcnO1xuY29uc3Qgc3BsaXRQcm9wcyA9IHByb3BzID0+IHtcbiAgdmFyIF9wcm9wcyR0aGVtZSR1bnN0YWJsZSwgX3Byb3BzJHRoZW1lO1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgc3lzdGVtUHJvcHM6IHt9LFxuICAgIG90aGVyUHJvcHM6IHt9XG4gIH07XG4gIGNvbnN0IGNvbmZpZyA9IChfcHJvcHMkdGhlbWUkdW5zdGFibGUgPSBwcm9wcyA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA6IGRlZmF1bHRTeENvbmZpZztcbiAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgaWYgKGNvbmZpZ1twcm9wXSkge1xuICAgICAgcmVzdWx0LnN5c3RlbVByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5vdGhlclByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHRlbmRTeFByb3AocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgICAgc3g6IGluU3hcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qge1xuICAgIHN5c3RlbVByb3BzLFxuICAgIG90aGVyUHJvcHNcbiAgfSA9IHNwbGl0UHJvcHMob3RoZXIpO1xuICBsZXQgZmluYWxTeDtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5TeCkpIHtcbiAgICBmaW5hbFN4ID0gW3N5c3RlbVByb3BzLCAuLi5pblN4XTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5TeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZpbmFsU3ggPSAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaW5TeCguLi5hcmdzKTtcbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiBzeXN0ZW1Qcm9wcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3lzdGVtUHJvcHMsIHJlc3VsdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBmaW5hbFN4ID0gX2V4dGVuZHMoe30sIHN5c3RlbVByb3BzLCBpblN4KTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIG90aGVyUHJvcHMsIHtcbiAgICBzeDogZmluYWxTeFxuICB9KTtcbn0iLCAiY29uc3QgZGVmYXVsdEdlbmVyYXRvciA9IGNvbXBvbmVudE5hbWUgPT4gY29tcG9uZW50TmFtZTtcbmNvbnN0IGNyZWF0ZUNsYXNzTmFtZUdlbmVyYXRvciA9ICgpID0+IHtcbiAgbGV0IGdlbmVyYXRlID0gZGVmYXVsdEdlbmVyYXRvcjtcbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmUoZ2VuZXJhdG9yKSB7XG4gICAgICBnZW5lcmF0ZSA9IGdlbmVyYXRvcjtcbiAgICB9LFxuICAgIGdlbmVyYXRlKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZShjb21wb25lbnROYW1lKTtcbiAgICB9LFxuICAgIHJlc2V0KCkge1xuICAgICAgZ2VuZXJhdGUgPSBkZWZhdWx0R2VuZXJhdG9yO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBDbGFzc05hbWVHZW5lcmF0b3IgPSBjcmVhdGVDbGFzc05hbWVHZW5lcmF0b3IoKTtcbmV4cG9ydCBkZWZhdWx0IENsYXNzTmFtZUdlbmVyYXRvcjsiLCAiZnVuY3Rpb24gcihlKXt2YXIgdCxmLG49XCJcIjtpZihcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJudW1iZXJcIj09dHlwZW9mIGUpbis9ZTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBlKWlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBvPWUubGVuZ3RoO2Zvcih0PTA7dDxvO3QrKyllW3RdJiYoZj1yKGVbdF0pKSYmKG4mJihuKz1cIiBcIiksbis9Zil9ZWxzZSBmb3IoZiBpbiBlKWVbZl0mJihuJiYobis9XCIgXCIpLG4rPWYpO3JldHVybiBufWV4cG9ydCBmdW5jdGlvbiBjbHN4KCl7Zm9yKHZhciBlLHQsZj0wLG49XCJcIixvPWFyZ3VtZW50cy5sZW5ndGg7ZjxvO2YrKykoZT1hcmd1bWVudHNbZl0pJiYodD1yKGUpKSYmKG4mJihuKz1cIiBcIiksbis9dCk7cmV0dXJuIG59ZXhwb3J0IGRlZmF1bHQgY2xzeDsiLCAiaW1wb3J0IENsYXNzTmFtZUdlbmVyYXRvciBmcm9tICcuLi9DbGFzc05hbWVHZW5lcmF0b3InO1xuZXhwb3J0IGNvbnN0IGdsb2JhbFN0YXRlQ2xhc3NlcyA9IHtcbiAgYWN0aXZlOiAnYWN0aXZlJyxcbiAgY2hlY2tlZDogJ2NoZWNrZWQnLFxuICBjb21wbGV0ZWQ6ICdjb21wbGV0ZWQnLFxuICBkaXNhYmxlZDogJ2Rpc2FibGVkJyxcbiAgZXJyb3I6ICdlcnJvcicsXG4gIGV4cGFuZGVkOiAnZXhwYW5kZWQnLFxuICBmb2N1c2VkOiAnZm9jdXNlZCcsXG4gIGZvY3VzVmlzaWJsZTogJ2ZvY3VzVmlzaWJsZScsXG4gIG9wZW46ICdvcGVuJyxcbiAgcmVhZE9ubHk6ICdyZWFkT25seScsXG4gIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QsIGdsb2JhbFN0YXRlUHJlZml4ID0gJ011aScpIHtcbiAgY29uc3QgZ2xvYmFsU3RhdGVDbGFzcyA9IGdsb2JhbFN0YXRlQ2xhc3Nlc1tzbG90XTtcbiAgcmV0dXJuIGdsb2JhbFN0YXRlQ2xhc3MgPyBgJHtnbG9iYWxTdGF0ZVByZWZpeH0tJHtnbG9iYWxTdGF0ZUNsYXNzfWAgOiBgJHtDbGFzc05hbWVHZW5lcmF0b3IuZ2VuZXJhdGUoY29tcG9uZW50TmFtZSl9LSR7c2xvdH1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzR2xvYmFsU3RhdGUoc2xvdCkge1xuICByZXR1cm4gZ2xvYmFsU3RhdGVDbGFzc2VzW3Nsb3RdICE9PSB1bmRlZmluZWQ7XG59IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKGNvbXBvbmVudE5hbWUsIHNsb3RzLCBnbG9iYWxTdGF0ZVByZWZpeCA9ICdNdWknKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBzbG90cy5mb3JFYWNoKHNsb3QgPT4ge1xuICAgIHJlc3VsdFtzbG90XSA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzKGNvbXBvbmVudE5hbWUsIHNsb3QsIGdsb2JhbFN0YXRlUHJlZml4KTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvd25lclN0YXRlXCJdLFxuICBfZXhjbHVkZWQyID0gW1widmFyaWFudHNcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJuYW1lXCIsIFwic2xvdFwiLCBcInNraXBWYXJpYW50c1Jlc29sdmVyXCIsIFwic2tpcFN4XCIsIFwib3ZlcnJpZGVzUmVzb2x2ZXJcIl07XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IHN0eWxlZEVuZ2luZVN0eWxlZCwgeyBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIGFzIHByb2Nlc3NTdHlsZXMgfSBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJ0BtdWkvdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgZ2V0RGlzcGxheU5hbWUgZnJvbSAnQG11aS91dGlscy9nZXREaXNwbGF5TmFtZSc7XG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4IGZyb20gJy4vc3R5bGVGdW5jdGlvblN4JztcbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzI2ZGVkNjEwOWZjZDhjYTk4NzVjYzJjZTQ1NjRmZWU2NzhhM2YzYzUvcGFja2FnZXMvc3R5bGVkL3NyYy91dGlscy5qcyNMNDBcbmZ1bmN0aW9uIGlzU3RyaW5nVGFnKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiZcbiAgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5Njtcbn1cblxuLy8gVXBkYXRlIC9zeXN0ZW0vc3R5bGVkLyNhcGkgaW4gY2FzZSBpZiB0aGlzIGNoYW5nZXNcbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSB7XG4gIHJldHVybiBwcm9wICE9PSAnb3duZXJTdGF0ZScgJiYgcHJvcCAhPT0gJ3RoZW1lJyAmJiBwcm9wICE9PSAnc3gnICYmIHByb3AgIT09ICdhcyc7XG59XG5leHBvcnQgY29uc3Qgc3lzdGVtRGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmNvbnN0IGxvd2VyY2FzZUZpcnN0TGV0dGVyID0gc3RyaW5nID0+IHtcbiAgaWYgKCFzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59O1xuZnVuY3Rpb24gcmVzb2x2ZVRoZW1lKHtcbiAgZGVmYXVsdFRoZW1lLFxuICB0aGVtZSxcbiAgdGhlbWVJZFxufSkge1xuICByZXR1cm4gaXNFbXB0eSh0aGVtZSkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihzbG90KSB7XG4gIGlmICghc2xvdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzW3Nsb3RdO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1N0eWxlQXJnKGNhbGxhYmxlU3R5bGUsIF9yZWYpIHtcbiAgbGV0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gX3JlZixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJlc29sdmVkU3R5bGVzQXJnID0gdHlwZW9mIGNhbGxhYmxlU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjYWxsYWJsZVN0eWxlKF9leHRlbmRzKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHByb3BzKSkgOiBjYWxsYWJsZVN0eWxlO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZykpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmcuZmxhdE1hcChyZXNvbHZlZFN0eWxlID0+IHByb2Nlc3NTdHlsZUFyZyhyZXNvbHZlZFN0eWxlLCBfZXh0ZW5kcyh7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSwgcHJvcHMpKSk7XG4gIH1cbiAgaWYgKCEhcmVzb2x2ZWRTdHlsZXNBcmcgJiYgdHlwZW9mIHJlc29sdmVkU3R5bGVzQXJnID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHJlc29sdmVkU3R5bGVzQXJnLnZhcmlhbnRzKSkge1xuICAgIGNvbnN0IHtcbiAgICAgICAgdmFyaWFudHMgPSBbXVxuICAgICAgfSA9IHJlc29sdmVkU3R5bGVzQXJnLFxuICAgICAgb3RoZXJTdHlsZXMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyZXNvbHZlZFN0eWxlc0FyZywgX2V4Y2x1ZGVkMik7XG4gICAgbGV0IHJlc3VsdCA9IG90aGVyU3R5bGVzO1xuICAgIHZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XG4gICAgICBsZXQgaXNNYXRjaCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIHZhcmlhbnQucHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXNNYXRjaCA9IHZhcmlhbnQucHJvcHMoX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhbnQucHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoKG93bmVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG93bmVyU3RhdGVba2V5XSkgIT09IHZhcmlhbnQucHJvcHNba2V5XSAmJiBwcm9wc1trZXldICE9PSB2YXJpYW50LnByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh0eXBlb2YgdmFyaWFudC5zdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhcmlhbnQuc3R5bGUoX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKSA6IHZhcmlhbnQuc3R5bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkU3R5bGVzQXJnO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3R5bGVkKGlucHV0ID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRoZW1lSWQsXG4gICAgZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lLFxuICAgIHJvb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wLFxuICAgIHNsb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wXG4gIH0gPSBpbnB1dDtcbiAgY29uc3Qgc3lzdGVtU3ggPSBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeChfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgdGhlbWVJZFxuICAgICAgfSkpXG4gICAgfSkpO1xuICB9O1xuICBzeXN0ZW1TeC5fX211aV9zeXN0ZW1TeCA9IHRydWU7XG4gIHJldHVybiAodGFnLCBpbnB1dE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8vIEZpbHRlciBvdXQgdGhlIGBzeGAgc3R5bGUgZnVuY3Rpb24gZnJvbSB0aGUgcHJldmlvdXMgc3R5bGVkIGNvbXBvbmVudCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHN0eWxlcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBvc2l0ZSBjb21wb25lbnRzLlxuICAgIHByb2Nlc3NTdHlsZXModGFnLCBzdHlsZXMgPT4gc3R5bGVzLmZpbHRlcihzdHlsZSA9PiAhKHN0eWxlICE9IG51bGwgJiYgc3R5bGUuX19tdWlfc3lzdGVtU3gpKSk7XG4gICAgY29uc3Qge1xuICAgICAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICBzbG90OiBjb21wb25lbnRTbG90LFxuICAgICAgICBza2lwVmFyaWFudHNSZXNvbHZlcjogaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlcixcbiAgICAgICAgc2tpcFN4OiBpbnB1dFNraXBTeCxcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBvdmVycmlkZXNSZXNvbHZlciA9IGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90KSlcbiAgICAgIH0gPSBpbnB1dE9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoaW5wdXRPcHRpb25zLCBfZXhjbHVkZWQzKTtcblxuICAgIC8vIGlmIHNraXBWYXJpYW50c1Jlc29sdmVyIG9wdGlvbiBpcyBkZWZpbmVkLCB0YWtlIHRoZSB2YWx1ZSwgb3RoZXJ3aXNlLCB0cnVlIGZvciByb290IGFuZCBmYWxzZSBmb3Igb3RoZXIgc2xvdHMuXG4gICAgY29uc3Qgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgPSBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyICE9PSB1bmRlZmluZWQgPyBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyIDpcbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBjb21wb25lbnRTbG90ICYmIGNvbXBvbmVudFNsb3QgIT09ICdSb290JyAmJiBjb21wb25lbnRTbG90ICE9PSAncm9vdCcgfHwgZmFsc2U7XG4gICAgY29uc3Qgc2tpcFN4ID0gaW5wdXRTa2lwU3ggfHwgZmFsc2U7XG4gICAgbGV0IGxhYmVsO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAvLyBUT0RPIHY2OiByZW1vdmUgYGxvd2VyY2FzZUZpcnN0TGV0dGVyKClgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgICAgIGxhYmVsID0gYCR7Y29tcG9uZW50TmFtZX0tJHtsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90IHx8ICdSb290Jyl9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2hvdWxkRm9yd2FyZFByb3A7XG5cbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBpZiAoY29tcG9uZW50U2xvdCA9PT0gJ1Jvb3QnIHx8IGNvbXBvbmVudFNsb3QgPT09ICdyb290Jykge1xuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSByb290U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChjb21wb25lbnRTbG90KSB7XG4gICAgICAvLyBhbnkgb3RoZXIgc2xvdCBzcGVjaWZpZWRcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2xvdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdUYWcodGFnKSkge1xuICAgICAgLy8gZm9yIHN0cmluZyAoaHRtbCkgdGFnLCBwcmVzZXJ2ZSB0aGUgYmVoYXZpb3IgaW4gZW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzLlxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZWRSZXNvbHZlciA9IHN0eWxlZEVuZ2luZVN0eWxlZCh0YWcsIF9leHRlbmRzKHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbixcbiAgICAgIGxhYmVsXG4gICAgfSwgb3B0aW9ucykpO1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0eWxlQXJnID0gc3R5bGVzQXJnID0+IHtcbiAgICAgIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgIGlmICh0eXBlb2Ygc3R5bGVzQXJnID09PSAnZnVuY3Rpb24nICYmIHN0eWxlc0FyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVzQXJnIHx8IGlzUGxhaW5PYmplY3Qoc3R5bGVzQXJnKSkge1xuICAgICAgICByZXR1cm4gcHJvcHMgPT4gcHJvY2Vzc1N0eWxlQXJnKHN0eWxlc0FyZywgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSh7XG4gICAgICAgICAgICB0aGVtZTogcHJvcHMudGhlbWUsXG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0FyZztcbiAgICB9O1xuICAgIGNvbnN0IG11aVN0eWxlZFJlc29sdmVyID0gKHN0eWxlQXJnLCAuLi5leHByZXNzaW9ucykgPT4ge1xuICAgICAgbGV0IHRyYW5zZm9ybWVkU3R5bGVBcmcgPSB0cmFuc2Zvcm1TdHlsZUFyZyhzdHlsZUFyZyk7XG4gICAgICBjb25zdCBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUgPSBleHByZXNzaW9ucyA/IGV4cHJlc3Npb25zLm1hcCh0cmFuc2Zvcm1TdHlsZUFyZykgOiBbXTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmIG92ZXJyaWRlc1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgaWYgKCF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3R5bGVPdmVycmlkZXMgPSB0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzO1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkU3R5bGVPdmVycmlkZXMgPSB7fTtcbiAgICAgICAgICAvLyBUT0RPOiB2NyByZW1vdmUgaXRlcmF0aW9uIGFuZCB1c2UgYHJlc29sdmVTdHlsZUFyZyhzdHlsZU92ZXJyaWRlc1tzbG90XSlgIGRpcmVjdGx5XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVPdmVycmlkZXMpLmZvckVhY2goKFtzbG90S2V5LCBzbG90U3R5bGVdKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzW3Nsb3RLZXldID0gcHJvY2Vzc1N0eWxlQXJnKHNsb3RTdHlsZSwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiAhc2tpcFZhcmlhbnRzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIHZhciBfdGhlbWUkY29tcG9uZW50cztcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgY29uc3QgdGhlbWVWYXJpYW50cyA9IHRoZW1lID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50c1tjb21wb25lbnROYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnZhcmlhbnRzO1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzU3R5bGVBcmcoe1xuICAgICAgICAgICAgdmFyaWFudHM6IHRoZW1lVmFyaWFudHNcbiAgICAgICAgICB9LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghc2tpcFN4KSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHN5c3RlbVN4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bU9mQ3VzdG9tRm5zQXBwbGllZCA9IGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5sZW5ndGggLSBleHByZXNzaW9ucy5sZW5ndGg7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzdHlsZUFyZykgJiYgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID4gMCkge1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnMgPSBuZXcgQXJyYXkobnVtT2ZDdXN0b21GbnNBcHBsaWVkKS5maWxsKCcnKTtcbiAgICAgICAgLy8gSWYgdGhlIHR5cGUgaXMgYXJyYXksIHRoYW4gd2UgbmVlZCB0byBhZGQgcGxhY2Vob2xkZXJzIGluIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG92ZXJyaWRlcywgdmFyaWFudHMgYW5kIHRoZSBzeCBzdHlsZXMuXG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcgPSBbLi4uc3R5bGVBcmcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcucmF3ID0gWy4uLnN0eWxlQXJnLnJhdywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IENvbXBvbmVudCA9IGRlZmF1bHRTdHlsZWRSZXNvbHZlcih0cmFuc2Zvcm1lZFN0eWxlQXJnLCAuLi5leHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgbGV0IGRpc3BsYXlOYW1lO1xuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYCR7Y29tcG9uZW50TmFtZX0ke2NhcGl0YWxpemUoY29tcG9uZW50U2xvdCB8fCAnJyl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYFN0eWxlZCgke2dldERpc3BsYXlOYW1lKHRhZyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodGFnLm11aU5hbWUpIHtcbiAgICAgICAgQ29tcG9uZW50Lm11aU5hbWUgPSB0YWcubXVpTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgfTtcbiAgICBpZiAoZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWcpIHtcbiAgICAgIG11aVN0eWxlZFJlc29sdmVyLndpdGhDb25maWcgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIG11aVN0eWxlZFJlc29sdmVyO1xuICB9O1xufSIsICJpbXBvcnQgY3JlYXRlU3R5bGVkIGZyb20gJy4vY3JlYXRlU3R5bGVkJztcbmNvbnN0IHN0eWxlZCA9IGNyZWF0ZVN0eWxlZCgpO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbi8qKlxuICogQWRkIGtleXMsIHZhbHVlcyBvZiBgZGVmYXVsdFByb3BzYCB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGBwcm9wc2BcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0UHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybnMge29iamVjdH0gcmVzb2x2ZWQgcHJvcHNcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZVByb3BzKGRlZmF1bHRQcm9wcywgcHJvcHMpIHtcbiAgY29uc3Qgb3V0cHV0ID0gX2V4dGVuZHMoe30sIHByb3BzKTtcbiAgT2JqZWN0LmtleXMoZGVmYXVsdFByb3BzKS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICBpZiAocHJvcE5hbWUudG9TdHJpbmcoKS5tYXRjaCgvXihjb21wb25lbnRzfHNsb3RzKSQvKSkge1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IF9leHRlbmRzKHt9LCBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdLCBvdXRwdXRbcHJvcE5hbWVdKTtcbiAgICB9IGVsc2UgaWYgKHByb3BOYW1lLnRvU3RyaW5nKCkubWF0Y2goL14oY29tcG9uZW50c1Byb3BzfHNsb3RQcm9wcykkLykpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTbG90UHJvcHMgPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdIHx8IHt9O1xuICAgICAgY29uc3Qgc2xvdFByb3BzID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IHt9O1xuICAgICAgaWYgKCFzbG90UHJvcHMgfHwgIU9iamVjdC5rZXlzKHNsb3RQcm9wcykpIHtcbiAgICAgICAgLy8gUmVkdWNlIHRoZSBpdGVyYXRpb24gaWYgdGhlIHNsb3QgcHJvcHMgaXMgZW1wdHlcbiAgICAgICAgb3V0cHV0W3Byb3BOYW1lXSA9IGRlZmF1bHRTbG90UHJvcHM7XG4gICAgICB9IGVsc2UgaWYgKCFkZWZhdWx0U2xvdFByb3BzIHx8ICFPYmplY3Qua2V5cyhkZWZhdWx0U2xvdFByb3BzKSkge1xuICAgICAgICAvLyBSZWR1Y2UgdGhlIGl0ZXJhdGlvbiBpZiB0aGUgZGVmYXVsdCBzbG90IHByb3BzIGlzIGVtcHR5XG4gICAgICAgIG91dHB1dFtwcm9wTmFtZV0gPSBzbG90UHJvcHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRbcHJvcE5hbWVdID0gX2V4dGVuZHMoe30sIHNsb3RQcm9wcyk7XG4gICAgICAgIE9iamVjdC5rZXlzKGRlZmF1bHRTbG90UHJvcHMpLmZvckVhY2goc2xvdFByb3BOYW1lID0+IHtcbiAgICAgICAgICBvdXRwdXRbcHJvcE5hbWVdW3Nsb3RQcm9wTmFtZV0gPSByZXNvbHZlUHJvcHMoZGVmYXVsdFNsb3RQcm9wc1tzbG90UHJvcE5hbWVdLCBzbG90UHJvcHNbc2xvdFByb3BOYW1lXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3V0cHV0W3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXRwdXRbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufSIsICJpbXBvcnQgcmVzb2x2ZVByb3BzIGZyb20gJ0BtdWkvdXRpbHMvcmVzb2x2ZVByb3BzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRoZW1lUHJvcHMocGFyYW1zKSB7XG4gIGNvbnN0IHtcbiAgICB0aGVtZSxcbiAgICBuYW1lLFxuICAgIHByb3BzXG4gIH0gPSBwYXJhbXM7XG4gIGlmICghdGhlbWUgfHwgIXRoZW1lLmNvbXBvbmVudHMgfHwgIXRoZW1lLmNvbXBvbmVudHNbbmFtZV0gfHwgIXRoZW1lLmNvbXBvbmVudHNbbmFtZV0uZGVmYXVsdFByb3BzKSB7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG4gIHJldHVybiByZXNvbHZlUHJvcHModGhlbWUuY29tcG9uZW50c1tuYW1lXS5kZWZhdWx0UHJvcHMsIHByb3BzKTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgZ2V0VGhlbWVQcm9wcyBmcm9tICcuL2dldFRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3VzZVRoZW1lJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRoZW1lUHJvcHMoe1xuICBwcm9wcyxcbiAgbmFtZSxcbiAgZGVmYXVsdFRoZW1lLFxuICB0aGVtZUlkXG59KSB7XG4gIGxldCB0aGVtZSA9IHVzZVRoZW1lKGRlZmF1bHRUaGVtZSk7XG4gIGlmICh0aGVtZUlkKSB7XG4gICAgdGhlbWUgPSB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZTtcbiAgfVxuICBjb25zdCBtZXJnZWRQcm9wcyA9IGdldFRoZW1lUHJvcHMoe1xuICAgIHRoZW1lLFxuICAgIG5hbWUsXG4gICAgcHJvcHNcbiAgfSk7XG4gIHJldHVybiBtZXJnZWRQcm9wcztcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQSB2ZXJzaW9uIG9mIGBSZWFjdC51c2VMYXlvdXRFZmZlY3RgIHRoYXQgZG9lcyBub3Qgc2hvdyBhIHdhcm5pbmcgd2hlbiBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZWZmZWN0cyB0aGF0IGFyZSBvbmx5IG5lZWRlZCBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIGJ1dCBub3QgZm9yIFNTUi5cbiAqXG4gKiBCZWZvcmUgeW91IHVzZSB0aGlzIGhvb2ssIG1ha2Ugc3VyZSB0byByZWFkIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2dhZWFyb24vZTdkOTdjZGYzOGEyOTA3OTI0ZWExMmU0ZWJkZjNjODVcbiAqIGFuZCBjb25maXJtIGl0IGRvZXNuJ3QgYXBwbHkgdG8geW91ciB1c2UtY2FzZS5cbiAqL1xuY29uc3QgdXNlRW5oYW5jZWRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IFJlYWN0LnVzZUxheW91dEVmZmVjdCA6IFJlYWN0LnVzZUVmZmVjdDtcbmV4cG9ydCBkZWZhdWx0IHVzZUVuaGFuY2VkRWZmZWN0OyIsICIvKipcbiAqIFNhZmUgY2hhaW5lZCBmdW5jdGlvbi5cbiAqXG4gKiBXaWxsIG9ubHkgY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIGlmIG5lZWRlZCxcbiAqIG90aGVyd2lzZSB3aWxsIHBhc3MgYmFjayBleGlzdGluZyBmdW5jdGlvbnMgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKC4uLmZ1bmNzKSB7XG4gIHJldHVybiBmdW5jcy5yZWR1Y2UoKGFjYywgZnVuYykgPT4ge1xuICAgIGlmIChmdW5jID09IG51bGwpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBjaGFpbmVkRnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgYWNjLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9LCAoKSA9PiB7fSk7XG59IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTXVpRWxlbWVudChlbGVtZW50LCBtdWlOYW1lcykge1xuICB2YXIgX211aU5hbWUsIF9lbGVtZW50JHR5cGU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkgJiYgbXVpTmFtZXMuaW5kZXhPZiggLy8gRm9yIHNlcnZlciBjb21wb25lbnRzIGBtdWlOYW1lYCBpcyBhdmFpYWxibGUgaW4gZWxlbWVudC50eXBlLl9wYXlsb2FkLnZhbHVlLm11aU5hbWVcbiAgLy8gcmVsZXZhbnQgaW5mbyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzI4MDdkNzgxYTA4ZGI4ZTk4NzM2ODdmY2NjMjVjMGYxMmI0ZmIzZDQvcGFja2FnZXMvcmVhY3Qvc3JjL1JlYWN0TGF6eS5qcyNMNDVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gIChfbXVpTmFtZSA9IGVsZW1lbnQudHlwZS5tdWlOYW1lKSAhPSBudWxsID8gX211aU5hbWUgOiAoX2VsZW1lbnQkdHlwZSA9IGVsZW1lbnQudHlwZSkgPT0gbnVsbCB8fCAoX2VsZW1lbnQkdHlwZSA9IF9lbGVtZW50JHR5cGUuX3BheWxvYWQpID09IG51bGwgfHwgKF9lbGVtZW50JHR5cGUgPSBfZWxlbWVudCR0eXBlLnZhbHVlKSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkdHlwZS5tdWlOYW1lKSAhPT0gLTE7XG59IiwgIi8qKlxuICogVE9ETyB2NTogY29uc2lkZXIgbWFraW5nIGl0IHByaXZhdGVcbiAqXG4gKiBwYXNzZXMge3ZhbHVlfSB0byB7cmVmfVxuICpcbiAqIFdBUk5JTkc6IEJlIHN1cmUgdG8gb25seSBjYWxsIHRoaXMgaW5zaWRlIGEgY2FsbGJhY2sgdGhhdCBpcyBwYXNzZWQgYXMgYSByZWYuXG4gKiBPdGhlcndpc2UsIG1ha2Ugc3VyZSB0byBjbGVhbnVwIHRoZSBwcmV2aW91cyB7cmVmfSBpZiBpdCBjaGFuZ2VzLiBTZWVcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvaXNzdWVzLzEzNTM5XG4gKlxuICogVXNlZnVsIGlmIHlvdSB3YW50IHRvIGV4cG9zZSB0aGUgcmVmIG9mIGFuIGlubmVyIGNvbXBvbmVudCB0byB0aGUgcHVibGljIEFQSVxuICogd2hpbGUgc3RpbGwgdXNpbmcgaXQgaW5zaWRlIHRoZSBjb21wb25lbnQuXG4gKiBAcGFyYW0gcmVmIEEgcmVmIGNhbGxiYWNrIG9yIHJlZiBvYmplY3QuIElmIGFueXRoaW5nIGZhbHN5LCB0aGlzIGlzIGEgbm8tb3AuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldFJlZihyZWYsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKHZhbHVlKTtcbiAgfSBlbHNlIGlmIChyZWYpIHtcbiAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICB9XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xubGV0IGdsb2JhbElkID0gMDtcbmZ1bmN0aW9uIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpIHtcbiAgY29uc3QgW2RlZmF1bHRJZCwgc2V0RGVmYXVsdElkXSA9IFJlYWN0LnVzZVN0YXRlKGlkT3ZlcnJpZGUpO1xuICBjb25zdCBpZCA9IGlkT3ZlcnJpZGUgfHwgZGVmYXVsdElkO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0SWQgPT0gbnVsbCkge1xuICAgICAgLy8gRmFsbGJhY2sgdG8gdGhpcyBkZWZhdWx0IGlkIHdoZW4gcG9zc2libGUuXG4gICAgICAvLyBVc2UgdGhlIGluY3JlbWVudGluZyB2YWx1ZSBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIG9ubHkuXG4gICAgICAvLyBXZSBjYW4ndCB1c2UgaXQgc2VydmVyLXNpZGUuXG4gICAgICAvLyBJZiB5b3Ugd2FudCB0byB1c2UgcmFuZG9tIHZhbHVlcyBwbGVhc2UgY29uc2lkZXIgdGhlIEJpcnRoZGF5IFByb2JsZW06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpcnRoZGF5X3Byb2JsZW1cbiAgICAgIGdsb2JhbElkICs9IDE7XG4gICAgICBzZXREZWZhdWx0SWQoYG11aS0ke2dsb2JhbElkfWApO1xuICAgIH1cbiAgfSwgW2RlZmF1bHRJZF0pO1xuICByZXR1cm4gaWQ7XG59XG5cbi8vIGRvd25zdHJlYW0gYnVuZGxlcnMgbWF5IHJlbW92ZSB1bm5lY2Vzc2FyeSBjb25jYXRlbmF0aW9uLCBidXQgd29uJ3QgcmVtb3ZlIHRvU3RyaW5nIGNhbGwgLS0gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay9pc3N1ZXMvMTQ4MTRcbmNvbnN0IG1heWJlUmVhY3RVc2VJZCA9IFJlYWN0Wyd1c2VJZCcudG9TdHJpbmcoKV07XG4vKipcbiAqXG4gKiBAZXhhbXBsZSA8ZGl2IGlkPXt1c2VJZCgpfSAvPlxuICogQHBhcmFtIGlkT3ZlcnJpZGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlkKGlkT3ZlcnJpZGUpIHtcbiAgaWYgKG1heWJlUmVhY3RVc2VJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmVhY3RJZCA9IG1heWJlUmVhY3RVc2VJZCgpO1xuICAgIHJldHVybiBpZE92ZXJyaWRlICE9IG51bGwgPyBpZE92ZXJyaWRlIDogcmVhY3RJZDtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3MgLS0gYFJlYWN0LnVzZUlkYCBpcyBpbnZhcmlhbnQgYXQgcnVudGltZS5cbiAgcmV0dXJuIHVzZUdsb2JhbElkKGlkT3ZlcnJpZGUpO1xufSIsICIndXNlIGNsaWVudCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzLCByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUNvbnRyb2xsZWQoe1xuICBjb250cm9sbGVkLFxuICBkZWZhdWx0OiBkZWZhdWx0UHJvcCxcbiAgbmFtZSxcbiAgc3RhdGUgPSAndmFsdWUnXG59KSB7XG4gIC8vIGlzQ29udHJvbGxlZCBpcyBpZ25vcmVkIGluIHRoZSBob29rIGRlcGVuZGVuY3kgbGlzdHMgYXMgaXQgc2hvdWxkIG5ldmVyIGNoYW5nZS5cbiAgY29uc3Qge1xuICAgIGN1cnJlbnQ6IGlzQ29udHJvbGxlZFxuICB9ID0gUmVhY3QudXNlUmVmKGNvbnRyb2xsZWQgIT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IFt2YWx1ZVN0YXRlLCBzZXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZShkZWZhdWx0UHJvcCk7XG4gIGNvbnN0IHZhbHVlID0gaXNDb250cm9sbGVkID8gY29udHJvbGxlZCA6IHZhbHVlU3RhdGU7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChpc0NvbnRyb2xsZWQgIT09IChjb250cm9sbGVkICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IEEgY29tcG9uZW50IGlzIGNoYW5naW5nIHRoZSAke2lzQ29udHJvbGxlZCA/ICcnIDogJ3VuJ31jb250cm9sbGVkICR7c3RhdGV9IHN0YXRlIG9mICR7bmFtZX0gdG8gYmUgJHtpc0NvbnRyb2xsZWQgPyAndW4nIDogJyd9Y29udHJvbGxlZC5gLCAnRWxlbWVudHMgc2hvdWxkIG5vdCBzd2l0Y2ggZnJvbSB1bmNvbnRyb2xsZWQgdG8gY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuJywgYERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJHtuYW1lfSBgICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LicsIFwiVGhlIG5hdHVyZSBvZiB0aGUgc3RhdGUgaXMgZGV0ZXJtaW5lZCBkdXJpbmcgdGhlIGZpcnN0IHJlbmRlci4gSXQncyBjb25zaWRlcmVkIGNvbnRyb2xsZWQgaWYgdGhlIHZhbHVlIGlzIG5vdCBgdW5kZWZpbmVkYC5cIiwgJ01vcmUgaW5mbzogaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVudHMnXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSwgW3N0YXRlLCBuYW1lLCBjb250cm9sbGVkXSk7XG4gICAgY29uc3Qge1xuICAgICAgY3VycmVudDogZGVmYXVsdFZhbHVlXG4gICAgfSA9IFJlYWN0LnVzZVJlZihkZWZhdWx0UHJvcCk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghaXNDb250cm9sbGVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gZGVmYXVsdFByb3ApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgdGhlIGRlZmF1bHQgJHtzdGF0ZX0gc3RhdGUgb2YgYW4gdW5jb250cm9sbGVkICR7bmFtZX0gYWZ0ZXIgYmVpbmcgaW5pdGlhbGl6ZWQuIGAgKyBgVG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIG9wdCB0byB1c2UgYSBjb250cm9sbGVkICR7bmFtZX0uYF0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtKU09OLnN0cmluZ2lmeShkZWZhdWx0UHJvcCldKTtcbiAgfVxuICBjb25zdCBzZXRWYWx1ZUlmVW5jb250cm9sbGVkID0gUmVhY3QudXNlQ2FsbGJhY2sobmV3VmFsdWUgPT4ge1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBbXSk7XG4gIHJldHVybiBbdmFsdWUsIHNldFZhbHVlSWZVbmNvbnRyb2xsZWRdO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91c2VFbmhhbmNlZEVmZmVjdCc7XG5cbi8qKlxuICogSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDA5OSNpc3N1ZWNvbW1lbnQtNDQwMDEzODkyXG4gKiBTZWUgUkZDIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JmY3MvcHVsbC8yMjBcbiAqL1xuXG5mdW5jdGlvbiB1c2VFdmVudENhbGxiYWNrKGZuKSB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihmbik7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICByZWYuY3VycmVudCA9IGZuO1xuICB9KTtcbiAgcmV0dXJuIFJlYWN0LnVzZVJlZigoLi4uYXJncykgPT5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBoaWRlIGB0aGlzYFxuICAoMCwgcmVmLmN1cnJlbnQpKC4uLmFyZ3MpKS5jdXJyZW50O1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlRXZlbnRDYWxsYmFjazsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc2V0UmVmIGZyb20gJy4uL3NldFJlZic7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JrUmVmKC4uLnJlZnMpIHtcbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gaWYgdGhlIHJlZnMgcGFzc2VkIHRvIHRoaXMgaG9vayBjaGFuZ2UgYW5kIGFyZSBhbGwgZGVmaW5lZC5cbiAgICogVGhpcyBtZWFucyByZWFjdCB3aWxsIGNhbGwgdGhlIG9sZCBmb3JrUmVmIHdpdGggYG51bGxgIGFuZCB0aGUgbmV3IGZvcmtSZWZcbiAgICogd2l0aCB0aGUgcmVmLiBDbGVhbnVwIG5hdHVyYWxseSBlbWVyZ2VzIGZyb20gdGhpcyBiZWhhdmlvci5cbiAgICovXG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAocmVmcy5ldmVyeShyZWYgPT4gcmVmID09IG51bGwpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlID0+IHtcbiAgICAgIHJlZnMuZm9yRWFjaChyZWYgPT4ge1xuICAgICAgICBzZXRSZWYocmVmLCBpbnN0YW5jZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgcmVmcyk7XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgVU5JTklUSUFMSVpFRCA9IHt9O1xuXG4vKipcbiAqIEEgUmVhY3QudXNlUmVmKCkgdGhhdCBpcyBpbml0aWFsaXplZCBsYXppbHkgd2l0aCBhIGZ1bmN0aW9uLiBOb3RlIHRoYXQgaXQgYWNjZXB0cyBhbiBvcHRpb25hbFxuICogaW5pdGlhbGl6YXRpb24gYXJndW1lbnQsIHNvIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gYmUgYW4gaW5saW5lIGNsb3N1cmUuXG4gKlxuICogQHVzYWdlXG4gKiAgIGNvbnN0IHJlZiA9IHVzZUxhenlSZWYoc29ydENvbHVtbnMsIGNvbHVtbnMpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUxhenlSZWYoaW5pdCwgaW5pdEFyZykge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYoVU5JTklUSUFMSVpFRCk7XG4gIGlmIChyZWYuY3VycmVudCA9PT0gVU5JTklUSUFMSVpFRCkge1xuICAgIHJlZi5jdXJyZW50ID0gaW5pdChpbml0QXJnKTtcbiAgfVxuICByZXR1cm4gcmVmO1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IEVNUFRZID0gW107XG5cbi8qKlxuICogQSBSZWFjdC51c2VFZmZlY3QgZXF1aXZhbGVudCB0aGF0IHJ1bnMgb25jZSwgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU9uTW91bnQoZm4pIHtcbiAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG4gIFJlYWN0LnVzZUVmZmVjdChmbiwgRU1QVFkpO1xuICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xufSIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB1c2VMYXp5UmVmIGZyb20gJy4uL3VzZUxhenlSZWYvdXNlTGF6eVJlZic7XG5pbXBvcnQgdXNlT25Nb3VudCBmcm9tICcuLi91c2VPbk1vdW50L3VzZU9uTW91bnQnO1xuZXhwb3J0IGNsYXNzIFRpbWVvdXQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmN1cnJlbnRJZCA9IG51bGw7XG4gICAgdGhpcy5jbGVhciA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jdXJyZW50SWQpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmRpc3Bvc2VFZmZlY3QgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcjtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBUaW1lb3V0KCk7XG4gIH1cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGBmbmAgYWZ0ZXIgYGRlbGF5YCwgY2xlYXJpbmcgYW55IHByZXZpb3VzbHkgc2NoZWR1bGVkIGNhbGwuXG4gICAqL1xuICBzdGFydChkZWxheSwgZm4pIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5jdXJyZW50SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudElkID0gbnVsbDtcbiAgICAgIGZuKCk7XG4gICAgfSwgZGVsYXkpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaW1lb3V0KCkge1xuICBjb25zdCB0aW1lb3V0ID0gdXNlTGF6eVJlZihUaW1lb3V0LmNyZWF0ZSkuY3VycmVudDtcbiAgdXNlT25Nb3VudCh0aW1lb3V0LmRpc3Bvc2VFZmZlY3QpO1xuICByZXR1cm4gdGltZW91dDtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvdjQuMS41L3NyYy9mb2N1cy12aXNpYmxlLmpzXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUaW1lb3V0IH0gZnJvbSAnLi4vdXNlVGltZW91dC91c2VUaW1lb3V0JztcbmxldCBoYWRLZXlib2FyZEV2ZW50ID0gdHJ1ZTtcbmxldCBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IGZhbHNlO1xuY29uc3QgaGFkRm9jdXNWaXNpYmxlUmVjZW50bHlUaW1lb3V0ID0gbmV3IFRpbWVvdXQoKTtcbmNvbnN0IGlucHV0VHlwZXNXaGl0ZWxpc3QgPSB7XG4gIHRleHQ6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdXJsOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgd2VlazogdHJ1ZSxcbiAgdGltZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWVcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBzaG91bGQgYXV0b21hdGljYWxseSB0cmlnZ2VyIHRoZVxuICogYGZvY3VzLXZpc2libGVgIGNsYXNzIGJlaW5nIGFkZGVkLCBpLmUuIHdoZXRoZXIgaXQgc2hvdWxkIGFsd2F5cyBtYXRjaFxuICogYDpmb2N1cy12aXNpYmxlYCB3aGVuIGZvY3VzZWQuXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBmb2N1c1RyaWdnZXJzS2V5Ym9hcmRNb2RhbGl0eShub2RlKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIHRhZ05hbWVcbiAgfSA9IG5vZGU7XG4gIGlmICh0YWdOYW1lID09PSAnSU5QVVQnICYmIGlucHV0VHlwZXNXaGl0ZWxpc3RbdHlwZV0gJiYgIW5vZGUucmVhZE9ubHkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJiAhbm9kZS5yZWFkT25seSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChub2RlLmlzQ29udGVudEVkaXRhYmxlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEtlZXAgdHJhY2sgb2Ygb3VyIGtleWJvYXJkIG1vZGFsaXR5IHN0YXRlIHdpdGggYGhhZEtleWJvYXJkRXZlbnRgLlxuICogSWYgdGhlIG1vc3QgcmVjZW50IHVzZXIgaW50ZXJhY3Rpb24gd2FzIHZpYSB0aGUga2V5Ym9hcmQ7XG4gKiBhbmQgdGhlIGtleSBwcmVzcyBkaWQgbm90IGluY2x1ZGUgYSBtZXRhLCBhbHQvb3B0aW9uLCBvciBjb250cm9sIGtleTtcbiAqIHRoZW4gdGhlIG1vZGFsaXR5IGlzIGtleWJvYXJkLiBPdGhlcndpc2UsIHRoZSBtb2RhbGl0eSBpcyBub3Qga2V5Ym9hcmQuXG4gKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgaWYgKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaGFkS2V5Ym9hcmRFdmVudCA9IHRydWU7XG59XG5cbi8qKlxuICogSWYgYXQgYW55IHBvaW50IGEgdXNlciBjbGlja3Mgd2l0aCBhIHBvaW50aW5nIGRldmljZSwgZW5zdXJlIHRoYXQgd2UgY2hhbmdlXG4gKiB0aGUgbW9kYWxpdHkgYXdheSBmcm9tIGtleWJvYXJkLlxuICogVGhpcyBhdm9pZHMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhIHVzZXIgcHJlc3NlcyBhIGtleSBvbiBhbiBhbHJlYWR5IGZvY3VzZWRcbiAqIGVsZW1lbnQsIGFuZCB0aGVuIGNsaWNrcyBvbiBhIGRpZmZlcmVudCBlbGVtZW50LCBmb2N1c2luZyBpdCB3aXRoIGFcbiAqIHBvaW50aW5nIGRldmljZSwgd2hpbGUgd2Ugc3RpbGwgdGhpbmsgd2UncmUgaW4ga2V5Ym9hcmQgbW9kYWxpdHkuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVBvaW50ZXJEb3duKCkge1xuICBoYWRLZXlib2FyZEV2ZW50ID0gZmFsc2U7XG59XG5mdW5jdGlvbiBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCkge1xuICBpZiAodGhpcy52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgLy8gSWYgdGhlIHRhYiBiZWNvbWVzIGFjdGl2ZSBhZ2FpbiwgdGhlIGJyb3dzZXIgd2lsbCBoYW5kbGUgY2FsbGluZyBmb2N1c1xuICAgIC8vIG9uIHRoZSBlbGVtZW50IChTYWZhcmkgYWN0dWFsbHkgY2FsbHMgaXQgdHdpY2UpLlxuICAgIC8vIElmIHRoaXMgdGFiIGNoYW5nZSBjYXVzZWQgYSBibHVyIG9uIGFuIGVsZW1lbnQgd2l0aCBmb2N1cy12aXNpYmxlLFxuICAgIC8vIHJlLWFwcGx5IHRoZSBjbGFzcyB3aGVuIHRoZSB1c2VyIHN3aXRjaGVzIGJhY2sgdG8gdGhlIHRhYi5cbiAgICBpZiAoaGFkRm9jdXNWaXNpYmxlUmVjZW50bHkpIHtcbiAgICAgIGhhZEtleWJvYXJkRXZlbnQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZShkb2MpIHtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0ZWFyZG93bihkb2MpIHtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIGlzRm9jdXNWaXNpYmxlKGV2ZW50KSB7XG4gIGNvbnN0IHtcbiAgICB0YXJnZXRcbiAgfSA9IGV2ZW50O1xuICB0cnkge1xuICAgIHJldHVybiB0YXJnZXQubWF0Y2hlcygnOmZvY3VzLXZpc2libGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBCcm93c2VycyBub3QgaW1wbGVtZW50aW5nIDpmb2N1cy12aXNpYmxlIHdpbGwgdGhyb3cgYSBTeW50YXhFcnJvci5cbiAgICAvLyBXZSB1c2Ugb3VyIG93biBoZXVyaXN0aWMgZm9yIHRob3NlIGJyb3dzZXJzLlxuICAgIC8vIFJldGhyb3cgbWlnaHQgYmUgYmV0dGVyIGlmIGl0J3Mgbm90IHRoZSBleHBlY3RlZCBlcnJvciBidXQgZG8gd2UgcmVhbGx5XG4gICAgLy8gd2FudCB0byBjcmFzaCBpZiBmb2N1cy12aXNpYmxlIG1hbGZ1bmN0aW9uZWQ/XG4gIH1cblxuICAvLyBObyBuZWVkIGZvciB2YWxpZEZvY3VzVGFyZ2V0IGNoZWNrLiBUaGUgdXNlciBkb2VzIHRoYXQgYnkgYXR0YWNoaW5nIGl0IHRvXG4gIC8vIGZvY3VzYWJsZSBldmVudHMgb25seS5cbiAgcmV0dXJuIGhhZEtleWJvYXJkRXZlbnQgfHwgZm9jdXNUcmlnZ2Vyc0tleWJvYXJkTW9kYWxpdHkodGFyZ2V0KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZUlzRm9jdXNWaXNpYmxlKCkge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VDYWxsYmFjayhub2RlID0+IHtcbiAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICBwcmVwYXJlKG5vZGUub3duZXJEb2N1bWVudCk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IGlzRm9jdXNWaXNpYmxlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcblxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUJsdXJWaXNpYmxlKCkge1xuICAgIC8vIGNoZWNraW5nIGFnYWluc3QgcG90ZW50aWFsIHN0YXRlIHZhcmlhYmxlIGRvZXMgbm90IHN1ZmZpY2UgaWYgd2UgZm9jdXMgYW5kIGJsdXIgc3luY2hyb25vdXNseS5cbiAgICAvLyBSZWFjdCB3b3VsZG4ndCBoYXZlIHRpbWUgdG8gdHJpZ2dlciBhIHJlLXJlbmRlciBzbyBgZm9jdXNWaXNpYmxlYCB3b3VsZCBiZSBzdGFsZS5cbiAgICAvLyBJZGVhbGx5IHdlIHdvdWxkIGFkanVzdCBgaXNGb2N1c1Zpc2libGUoZXZlbnQpYCB0byBsb29rIGF0IGByZWxhdGVkVGFyZ2V0YCBmb3IgYmx1ciBldmVudHMuXG4gICAgLy8gVGhpcyBkb2Vzbid0IHdvcmsgaW4gSUUxMSBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zNzUxXG4gICAgLy8gVE9ETzogY2hlY2sgYWdhaW4gaWYgUmVhY3QgcmVsZWFzZXMgdGhlaXIgaW50ZXJuYWwgY2hhbmdlcyB0byBmb2N1cyBldmVudCBoYW5kbGluZyAoaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkxODYpLlxuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBUbyBkZXRlY3QgYSB0YWIvd2luZG93IHN3aXRjaCwgd2UgbG9vayBmb3IgYSBibHVyIGV2ZW50IGZvbGxvd2VkXG4gICAgICAvLyByYXBpZGx5IGJ5IGEgdmlzaWJpbGl0eSBjaGFuZ2UuXG4gICAgICAvLyBJZiB3ZSBkb24ndCBzZWUgYSB2aXNpYmlsaXR5IGNoYW5nZSB3aXRoaW4gMTAwbXMsIGl0J3MgcHJvYmFibHkgYVxuICAgICAgLy8gcmVndWxhciBmb2N1cyBjaGFuZ2UuXG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseSA9IHRydWU7XG4gICAgICBoYWRGb2N1c1Zpc2libGVSZWNlbnRseVRpbWVvdXQuc3RhcnQoMTAwLCAoKSA9PiB7XG4gICAgICAgIGhhZEZvY3VzVmlzaWJsZVJlY2VudGx5ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU2hvdWxkIGJlIGNhbGxlZCBpZiBhIGJsdXIgZXZlbnQgaXMgZmlyZWRcbiAgICovXG4gIGZ1bmN0aW9uIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCkge1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZShldmVudCkpIHtcbiAgICAgIGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlzRm9jdXNWaXNpYmxlUmVmLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIHJlZlxuICB9O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VXRpbGl0eUNsYXNzLCBjbGFzc2VzID0gdW5kZWZpbmVkKSB7XG4gIGNvbnN0IG91dHB1dCA9IHt9O1xuICBPYmplY3Qua2V5cyhzbG90cykuZm9yRWFjaChcbiAgLy8gYE9iamVjdC5rZXlzKHNsb3RzKWAgY2FuJ3QgYmUgd2lkZXIgdGhhbiBgVGAgYmVjYXVzZSB3ZSBpbmZlciBgVGAgZnJvbSBgc2xvdHNgLlxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9wdWxsLzEyMjUzI2lzc3VlY29tbWVudC0yNjMxMzIyMDhcbiAgc2xvdCA9PiB7XG4gICAgb3V0cHV0W3Nsb3RdID0gc2xvdHNbc2xvdF0ucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB1dGlsaXR5Q2xhc3MgPSBnZXRVdGlsaXR5Q2xhc3Moa2V5KTtcbiAgICAgICAgaWYgKHV0aWxpdHlDbGFzcyAhPT0gJycpIHtcbiAgICAgICAgICBhY2MucHVzaCh1dGlsaXR5Q2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbGFzc2VzICYmIGNsYXNzZXNba2V5XSkge1xuICAgICAgICAgIGFjYy5wdXNoKGNsYXNzZXNba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pLmpvaW4oJyAnKTtcbiAgfSk7XG4gIHJldHVybiBvdXRwdXQ7XG59IiwgImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjb21wb25lbnRcIiwgXCJkaXJlY3Rpb25cIiwgXCJzcGFjaW5nXCIsIFwiZGl2aWRlclwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwidXNlRmxleEdhcFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN5c3RlbVN0eWxlZCBmcm9tICcuLi9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHNTeXN0ZW0gZnJvbSAnLi4vdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgeyBleHRlbmRTeFByb3AgfSBmcm9tICcuLi9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGNyZWF0ZVRoZW1lIGZyb20gJy4uL2NyZWF0ZVRoZW1lJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzLCBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlciwgcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgfSBmcm9tICcuLi9icmVha3BvaW50cyc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcsIGdldFZhbHVlIH0gZnJvbSAnLi4vc3BhY2luZyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgZGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbi8vIHdpZGVuaW5nIFRoZW1lIHRvIGFueSBzbyB0aGF0IHRoZSBjb25zdW1lciBjYW4gb3duIHRoZSB0aGVtZSBzdHJ1Y3R1cmUuXG5jb25zdCBkZWZhdWx0Q3JlYXRlU3R5bGVkQ29tcG9uZW50ID0gc3lzdGVtU3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlTdGFjaycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSk7XG5mdW5jdGlvbiB1c2VUaGVtZVByb3BzRGVmYXVsdChwcm9wcykge1xuICByZXR1cm4gdXNlVGhlbWVQcm9wc1N5c3RlbSh7XG4gICAgcHJvcHMsXG4gICAgbmFtZTogJ011aVN0YWNrJyxcbiAgICBkZWZhdWx0VGhlbWVcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGFycmF5IHdpdGggdGhlIHNlcGFyYXRvciBSZWFjdCBlbGVtZW50IGludGVyc3BlcnNlZCBiZXR3ZWVuXG4gKiBlYWNoIFJlYWN0IG5vZGUgb2YgdGhlIGlucHV0IGNoaWxkcmVuLlxuICpcbiAqID4gam9pbkNoaWxkcmVuKFsxLDIsM10sIDApXG4gKiBbMSwwLDIsMCwzXVxuICovXG5mdW5jdGlvbiBqb2luQ2hpbGRyZW4oY2hpbGRyZW4sIHNlcGFyYXRvcikge1xuICBjb25zdCBjaGlsZHJlbkFycmF5ID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gY2hpbGRyZW5BcnJheS5yZWR1Y2UoKG91dHB1dCwgY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgb3V0cHV0LnB1c2goY2hpbGQpO1xuICAgIGlmIChpbmRleCA8IGNoaWxkcmVuQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgb3V0cHV0LnB1c2goIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoc2VwYXJhdG9yLCB7XG4gICAgICAgIGtleTogYHNlcGFyYXRvci0ke2luZGV4fWBcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSwgW10pO1xufVxuY29uc3QgZ2V0U2lkZUZyb21EaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT4ge1xuICByZXR1cm4ge1xuICAgIHJvdzogJ0xlZnQnLFxuICAgICdyb3ctcmV2ZXJzZSc6ICdSaWdodCcsXG4gICAgY29sdW1uOiAnVG9wJyxcbiAgICAnY29sdW1uLXJldmVyc2UnOiAnQm90dG9tJ1xuICB9W2RpcmVjdGlvbl07XG59O1xuZXhwb3J0IGNvbnN0IHN0eWxlID0gKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IHtcbiAgbGV0IHN0eWxlcyA9IF9leHRlbmRzKHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbidcbiAgfSwgaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgIHRoZW1lXG4gIH0sIHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgfSksIHByb3BWYWx1ZSA9PiAoe1xuICAgIGZsZXhEaXJlY3Rpb246IHByb3BWYWx1ZVxuICB9KSkpO1xuICBpZiAob3duZXJTdGF0ZS5zcGFjaW5nKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVNwYWNpbmcodGhlbWUpO1xuICAgIGNvbnN0IGJhc2UgPSBPYmplY3Qua2V5cyh0aGVtZS5icmVha3BvaW50cy52YWx1ZXMpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG93bmVyU3RhdGUuc3BhY2luZyA9PT0gJ29iamVjdCcgJiYgb3duZXJTdGF0ZS5zcGFjaW5nW2JyZWFrcG9pbnRdICE9IG51bGwgfHwgdHlwZW9mIG93bmVyU3RhdGUuZGlyZWN0aW9uID09PSAnb2JqZWN0JyAmJiBvd25lclN0YXRlLmRpcmVjdGlvblticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICAgIGFjY1ticmVha3BvaW50XSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgICBjb25zdCBkaXJlY3Rpb25WYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuZGlyZWN0aW9uLFxuICAgICAgYmFzZVxuICAgIH0pO1xuICAgIGNvbnN0IHNwYWNpbmdWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IG93bmVyU3RhdGUuc3BhY2luZyxcbiAgICAgIGJhc2VcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGRpcmVjdGlvblZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIE9iamVjdC5rZXlzKGRpcmVjdGlvblZhbHVlcykuZm9yRWFjaCgoYnJlYWtwb2ludCwgaW5kZXgsIGJyZWFrcG9pbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvblZhbHVlID0gZGlyZWN0aW9uVmFsdWVzW2JyZWFrcG9pbnRdO1xuICAgICAgICBpZiAoIWRpcmVjdGlvblZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNEaXJlY3Rpb25WYWx1ZSA9IGluZGV4ID4gMCA/IGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50c1tpbmRleCAtIDFdXSA6ICdjb2x1bW4nO1xuICAgICAgICAgIGRpcmVjdGlvblZhbHVlc1ticmVha3BvaW50XSA9IHByZXZpb3VzRGlyZWN0aW9uVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSAocHJvcFZhbHVlLCBicmVha3BvaW50KSA9PiB7XG4gICAgICBpZiAob3duZXJTdGF0ZS51c2VGbGV4R2FwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZ2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gVGhlIHVzZUZsZXhHYXA9e2ZhbHNlfSBpbXBsZW1lbnQgcmVsaWVzIG9uIGVhY2ggY2hpbGQgdG8gZ2l2ZSB1cCBjb250cm9sIG9mIHRoZSBtYXJnaW4uXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzZXQgdGhlIG1hcmdpbiB0byBhdm9pZCBkb3VibGUgc3BhY2luZy5cbiAgICAgICAgJyYgPiA6bm90KHN0eWxlKTpub3Qoc3R5bGUpJzoge1xuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICB9LFxuICAgICAgICAnJiA+IDpub3Qoc3R5bGUpIH4gOm5vdChzdHlsZSknOiB7XG4gICAgICAgICAgW2BtYXJnaW4ke2dldFNpZGVGcm9tRGlyZWN0aW9uKGJyZWFrcG9pbnQgPyBkaXJlY3Rpb25WYWx1ZXNbYnJlYWtwb2ludF0gOiBvd25lclN0YXRlLmRpcmVjdGlvbil9YF06IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBzdHlsZXMgPSBkZWVwbWVyZ2Uoc3R5bGVzLCBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgICB0aGVtZVxuICAgIH0sIHNwYWNpbmdWYWx1ZXMsIHN0eWxlRnJvbVByb3BWYWx1ZSkpO1xuICB9XG4gIHN0eWxlcyA9IG1lcmdlQnJlYWtwb2ludHNJbk9yZGVyKHRoZW1lLmJyZWFrcG9pbnRzLCBzdHlsZXMpO1xuICByZXR1cm4gc3R5bGVzO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN0YWNrKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgLy8gVGhpcyB3aWxsIGFsbG93IGFkZGluZyBjdXN0b20gc3R5bGVkIGZuIChmb3IgZXhhbXBsZSBmb3IgY3VzdG9tIHN4IHN0eWxlIGZ1bmN0aW9uKVxuICAgIGNyZWF0ZVN0eWxlZENvbXBvbmVudCA9IGRlZmF1bHRDcmVhdGVTdHlsZWRDb21wb25lbnQsXG4gICAgdXNlVGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHNEZWZhdWx0LFxuICAgIGNvbXBvbmVudE5hbWUgPSAnTXVpU3RhY2snXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9ICgpID0+IHtcbiAgICBjb25zdCBzbG90cyA9IHtcbiAgICAgIHJvb3Q6IFsncm9vdCddXG4gICAgfTtcbiAgICByZXR1cm4gY29tcG9zZUNsYXNzZXMoc2xvdHMsIHNsb3QgPT4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoY29tcG9uZW50TmFtZSwgc2xvdCksIHt9KTtcbiAgfTtcbiAgY29uc3QgU3RhY2tSb290ID0gY3JlYXRlU3R5bGVkQ29tcG9uZW50KHN0eWxlKTtcbiAgY29uc3QgU3RhY2sgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBHcmlkKGluUHJvcHMsIHJlZikge1xuICAgIGNvbnN0IHRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzKGluUHJvcHMpO1xuICAgIGNvbnN0IHByb3BzID0gZXh0ZW5kU3hQcm9wKHRoZW1lUHJvcHMpOyAvLyBgY29sb3JgIHR5cGUgY29uZmxpY3RzIHdpdGggaHRtbCBjb2xvciBhdHRyaWJ1dGUuXG4gICAgY29uc3Qge1xuICAgICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgICAgZGlyZWN0aW9uID0gJ2NvbHVtbicsXG4gICAgICAgIHNwYWNpbmcgPSAwLFxuICAgICAgICBkaXZpZGVyLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB1c2VGbGV4R2FwID0gZmFsc2VcbiAgICAgIH0gPSBwcm9wcyxcbiAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gICAgY29uc3Qgb3duZXJTdGF0ZSA9IHtcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIHNwYWNpbmcsXG4gICAgICB1c2VGbGV4R2FwXG4gICAgfTtcbiAgICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMoKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3RhY2tSb290LCBfZXh0ZW5kcyh7XG4gICAgICBhczogY29tcG9uZW50LFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICAgIH0sIG90aGVyLCB7XG4gICAgICBjaGlsZHJlbjogZGl2aWRlciA/IGpvaW5DaGlsZHJlbihjaGlsZHJlbiwgZGl2aWRlcikgOiBjaGlsZHJlblxuICAgIH0pKTtcbiAgfSk7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN0YWNrLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gICAgZGl2aWRlcjogUHJvcFR5cGVzLm5vZGUsXG4gICAgc3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSA6IHZvaWQgMDtcbiAgcmV0dXJuIFN0YWNrO1xufSIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UgZnJvbSBcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJicmVha3BvaW50c1wiLCBcIm1peGluc1wiLCBcInNwYWNpbmdcIiwgXCJwYWxldHRlXCIsIFwidHJhbnNpdGlvbnNcIiwgXCJ0eXBvZ3JhcGh5XCIsIFwic2hhcGVcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBzdHlsZUZ1bmN0aW9uU3gsIHsgdW5zdGFibGVfZGVmYXVsdFN4Q29uZmlnIGFzIGRlZmF1bHRTeENvbmZpZyB9IGZyb20gJ0BtdWkvc3lzdGVtL3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgc3lzdGVtQ3JlYXRlVGhlbWUgZnJvbSAnQG11aS9zeXN0ZW0vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuaW1wb3J0IGNyZWF0ZU1peGlucyBmcm9tICcuL2NyZWF0ZU1peGlucyc7XG5pbXBvcnQgY3JlYXRlUGFsZXR0ZSBmcm9tICcuL2NyZWF0ZVBhbGV0dGUnO1xuaW1wb3J0IGNyZWF0ZVR5cG9ncmFwaHkgZnJvbSAnLi9jcmVhdGVUeXBvZ3JhcGh5JztcbmltcG9ydCBzaGFkb3dzIGZyb20gJy4vc2hhZG93cyc7XG5pbXBvcnQgY3JlYXRlVHJhbnNpdGlvbnMgZnJvbSAnLi9jcmVhdGVUcmFuc2l0aW9ucyc7XG5pbXBvcnQgekluZGV4IGZyb20gJy4vekluZGV4JztcbmZ1bmN0aW9uIGNyZWF0ZVRoZW1lKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICBjb25zdCB7XG4gICAgICBtaXhpbnM6IG1peGluc0lucHV0ID0ge30sXG4gICAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICAgIHRyYW5zaXRpb25zOiB0cmFuc2l0aW9uc0lucHV0ID0ge30sXG4gICAgICB0eXBvZ3JhcGh5OiB0eXBvZ3JhcGh5SW5wdXQgPSB7fVxuICAgIH0gPSBvcHRpb25zLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uob3B0aW9ucywgX2V4Y2x1ZGVkKTtcbiAgaWYgKG9wdGlvbnMudmFycykge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBcXGB2YXJzXFxgIGlzIGEgcHJpdmF0ZSBmaWVsZCB1c2VkIGZvciBDU1MgdmFyaWFibGVzIHN1cHBvcnQuXG5QbGVhc2UgdXNlIGFub3RoZXIgbmFtZS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxOCkpO1xuICB9XG4gIGNvbnN0IHBhbGV0dGUgPSBjcmVhdGVQYWxldHRlKHBhbGV0dGVJbnB1dCk7XG4gIGNvbnN0IHN5c3RlbVRoZW1lID0gc3lzdGVtQ3JlYXRlVGhlbWUob3B0aW9ucyk7XG4gIGxldCBtdWlUaGVtZSA9IGRlZXBtZXJnZShzeXN0ZW1UaGVtZSwge1xuICAgIG1peGluczogY3JlYXRlTWl4aW5zKHN5c3RlbVRoZW1lLmJyZWFrcG9pbnRzLCBtaXhpbnNJbnB1dCksXG4gICAgcGFsZXR0ZSxcbiAgICAvLyBEb24ndCB1c2UgWy4uLnNoYWRvd3NdIHVudGlsIHlvdSd2ZSB2ZXJpZmllZCBpdHMgdHJhbnNwaWxlZCBjb2RlIGlzIG5vdCBpbnZva2luZyB0aGUgaXRlcmF0b3IgcHJvdG9jb2wuXG4gICAgc2hhZG93czogc2hhZG93cy5zbGljZSgpLFxuICAgIHR5cG9ncmFwaHk6IGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeUlucHV0KSxcbiAgICB0cmFuc2l0aW9uczogY3JlYXRlVHJhbnNpdGlvbnModHJhbnNpdGlvbnNJbnB1dCksXG4gICAgekluZGV4OiBfZXh0ZW5kcyh7fSwgekluZGV4KVxuICB9KTtcbiAgbXVpVGhlbWUgPSBkZWVwbWVyZ2UobXVpVGhlbWUsIG90aGVyKTtcbiAgbXVpVGhlbWUgPSBhcmdzLnJlZHVjZSgoYWNjLCBhcmd1bWVudCkgPT4gZGVlcG1lcmdlKGFjYywgYXJndW1lbnQpLCBtdWlUaGVtZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVE9ETyB2NjogUmVmYWN0b3IgdG8gdXNlIGdsb2JhbFN0YXRlQ2xhc3Nlc01hcHBpbmcgZnJvbSBAbXVpL3V0aWxzIG9uY2UgYHJlYWRPbmx5YCBzdGF0ZSBjbGFzcyBpcyB1c2VkIGluIFJhdGluZyBjb21wb25lbnQuXG4gICAgY29uc3Qgc3RhdGVDbGFzc2VzID0gWydhY3RpdmUnLCAnY2hlY2tlZCcsICdjb21wbGV0ZWQnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZXhwYW5kZWQnLCAnZm9jdXNlZCcsICdmb2N1c1Zpc2libGUnLCAncmVxdWlyZWQnLCAnc2VsZWN0ZWQnXTtcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlLCBjb21wb25lbnQpID0+IHtcbiAgICAgIGxldCBrZXk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW4sIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICBmb3IgKGtleSBpbiBub2RlKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZVtrZXldO1xuICAgICAgICBpZiAoc3RhdGVDbGFzc2VzLmluZGV4T2Yoa2V5KSAhPT0gLTEgJiYgT2JqZWN0LmtleXMoY2hpbGQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVDbGFzcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzKCcnLCBrZXkpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIFxcYCR7Y29tcG9uZW50fVxcYCBjb21wb25lbnQgaW5jcmVhc2VzIGAgKyBgdGhlIENTUyBzcGVjaWZpY2l0eSBvZiB0aGUgXFxgJHtrZXl9XFxgIGludGVybmFsIHN0YXRlLmAsICdZb3UgY2FuIG5vdCBvdmVycmlkZSBpdCBsaWtlIHRoaXM6ICcsIEpTT04uc3RyaW5naWZ5KG5vZGUsIG51bGwsIDIpLCAnJywgYEluc3RlYWQsIHlvdSBuZWVkIHRvIHVzZSB0aGUgJyYuJHtzdGF0ZUNsYXNzfScgc3ludGF4OmAsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgcm9vdDoge1xuICAgICAgICAgICAgICAgIFtgJi4ke3N0YXRlQ2xhc3N9YF06IGNoaWxkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG51bGwsIDIpLCAnJywgJ2h0dHBzOi8vbXVpLmNvbS9yL3N0YXRlLWNsYXNzZXMtZ3VpZGUnXS5qb2luKCdcXG4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc3R5bGUgdG8gcHJldmVudCBnbG9iYWwgY29uZmxpY3RzLlxuICAgICAgICAgIG5vZGVba2V5XSA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyhtdWlUaGVtZS5jb21wb25lbnRzKS5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XG4gICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IG11aVRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50XS5zdHlsZU92ZXJyaWRlcztcbiAgICAgIGlmIChzdHlsZU92ZXJyaWRlcyAmJiBjb21wb25lbnQuaW5kZXhPZignTXVpJykgPT09IDApIHtcbiAgICAgICAgdHJhdmVyc2Uoc3R5bGVPdmVycmlkZXMsIGNvbXBvbmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgbXVpVGhlbWUudW5zdGFibGVfc3hDb25maWcgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdFN4Q29uZmlnLCBvdGhlciA9PSBudWxsID8gdm9pZCAwIDogb3RoZXIudW5zdGFibGVfc3hDb25maWcpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeCA9IGZ1bmN0aW9uIHN4KHByb3BzKSB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICBzeDogcHJvcHMsXG4gICAgICB0aGVtZTogdGhpc1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gbXVpVGhlbWU7XG59XG5sZXQgd2FybmVkT25jZSA9IGZhbHNlO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU11aVRoZW1lKC4uLmFyZ3MpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIXdhcm5lZE9uY2UpIHtcbiAgICAgIHdhcm5lZE9uY2UgPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogdGhlIGNyZWF0ZU11aVRoZW1lIGZ1bmN0aW9uIHdhcyByZW5hbWVkIHRvIGNyZWF0ZVRoZW1lLicsICcnLCBcIllvdSBzaG91bGQgdXNlIGBpbXBvcnQgeyBjcmVhdGVUaGVtZSB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJ2BcIl0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3JlYXRlVGhlbWUoLi4uYXJncyk7XG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVUaGVtZTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVNaXhpbnMoYnJlYWtwb2ludHMsIG1peGlucykge1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHRvb2xiYXI6IHtcbiAgICAgIG1pbkhlaWdodDogNTYsXG4gICAgICBbYnJlYWtwb2ludHMudXAoJ3hzJyldOiB7XG4gICAgICAgICdAbWVkaWEgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpJzoge1xuICAgICAgICAgIG1pbkhlaWdodDogNDhcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFticmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICAgICAgbWluSGVpZ2h0OiA2NFxuICAgICAgfVxuICAgIH1cbiAgfSwgbWl4aW5zKTtcbn0iLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlIGZyb20gXCJAbXVpL3V0aWxzL2Zvcm1hdE11aUVycm9yTWVzc2FnZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wibW9kZVwiLCBcImNvbnRyYXN0VGhyZXNob2xkXCIsIFwidG9uYWxPZmZzZXRcIl07XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCB7IGRhcmtlbiwgZ2V0Q29udHJhc3RSYXRpbywgbGlnaHRlbiB9IGZyb20gJ0BtdWkvc3lzdGVtL2NvbG9yTWFuaXB1bGF0b3InO1xuaW1wb3J0IGNvbW1vbiBmcm9tICcuLi9jb2xvcnMvY29tbW9uJztcbmltcG9ydCBncmV5IGZyb20gJy4uL2NvbG9ycy9ncmV5JztcbmltcG9ydCBwdXJwbGUgZnJvbSAnLi4vY29sb3JzL3B1cnBsZSc7XG5pbXBvcnQgcmVkIGZyb20gJy4uL2NvbG9ycy9yZWQnO1xuaW1wb3J0IG9yYW5nZSBmcm9tICcuLi9jb2xvcnMvb3JhbmdlJztcbmltcG9ydCBibHVlIGZyb20gJy4uL2NvbG9ycy9ibHVlJztcbmltcG9ydCBsaWdodEJsdWUgZnJvbSAnLi4vY29sb3JzL2xpZ2h0Qmx1ZSc7XG5pbXBvcnQgZ3JlZW4gZnJvbSAnLi4vY29sb3JzL2dyZWVuJztcbmV4cG9ydCBjb25zdCBsaWdodCA9IHtcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSB0ZXh0LlxuICB0ZXh0OiB7XG4gICAgLy8gVGhlIG1vc3QgaW1wb3J0YW50IHRleHQuXG4gICAgcHJpbWFyeTogJ3JnYmEoMCwgMCwgMCwgMC44NyknLFxuICAgIC8vIFNlY29uZGFyeSB0ZXh0LlxuICAgIHNlY29uZGFyeTogJ3JnYmEoMCwgMCwgMCwgMC42KScsXG4gICAgLy8gRGlzYWJsZWQgdGV4dCBoYXZlIGV2ZW4gbG93ZXIgdmlzdWFsIHByb21pbmVuY2UuXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMzgpJ1xuICB9LFxuICAvLyBUaGUgY29sb3IgdXNlZCB0byBkaXZpZGUgZGlmZmVyZW50IGVsZW1lbnRzLlxuICBkaXZpZGVyOiAncmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gIC8vIFRoZSBiYWNrZ3JvdW5kIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBzdXJmYWNlcy5cbiAgLy8gQ29uc2lzdGVuY3kgYmV0d2VlbiB0aGVzZSB2YWx1ZXMgaXMgaW1wb3J0YW50LlxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6IGNvbW1vbi53aGl0ZSxcbiAgICBkZWZhdWx0OiBjb21tb24ud2hpdGVcbiAgfSxcbiAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHN0eWxlIHRoZSBhY3Rpb24gZWxlbWVudHMuXG4gIGFjdGlvbjoge1xuICAgIC8vIFRoZSBjb2xvciBvZiBhbiBhY3RpdmUgYWN0aW9uIGxpa2UgYW4gaWNvbiBidXR0b24uXG4gICAgYWN0aXZlOiAncmdiYSgwLCAwLCAwLCAwLjU0KScsXG4gICAgLy8gVGhlIGNvbG9yIG9mIGFuIGhvdmVyZWQgYWN0aW9uLlxuICAgIGhvdmVyOiAncmdiYSgwLCAwLCAwLCAwLjA0KScsXG4gICAgaG92ZXJPcGFjaXR5OiAwLjA0LFxuICAgIC8vIFRoZSBjb2xvciBvZiBhIHNlbGVjdGVkIGFjdGlvbi5cbiAgICBzZWxlY3RlZDogJ3JnYmEoMCwgMCwgMCwgMC4wOCknLFxuICAgIHNlbGVjdGVkT3BhY2l0eTogMC4wOCxcbiAgICAvLyBUaGUgY29sb3Igb2YgYSBkaXNhYmxlZCBhY3Rpb24uXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDAsIDAsIDAsIDAuMjYpJyxcbiAgICAvLyBUaGUgYmFja2dyb3VuZCBjb2xvciBvZiBhIGRpc2FibGVkIGFjdGlvbi5cbiAgICBkaXNhYmxlZEJhY2tncm91bmQ6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBkaXNhYmxlZE9wYWNpdHk6IDAuMzgsXG4gICAgZm9jdXM6ICdyZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBmb2N1c09wYWNpdHk6IDAuMTIsXG4gICAgYWN0aXZhdGVkT3BhY2l0eTogMC4xMlxuICB9XG59O1xuZXhwb3J0IGNvbnN0IGRhcmsgPSB7XG4gIHRleHQ6IHtcbiAgICBwcmltYXJ5OiBjb21tb24ud2hpdGUsXG4gICAgc2Vjb25kYXJ5OiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJyxcbiAgICBkaXNhYmxlZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KScsXG4gICAgaWNvbjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSdcbiAgfSxcbiAgZGl2aWRlcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICBiYWNrZ3JvdW5kOiB7XG4gICAgcGFwZXI6ICcjMTIxMjEyJyxcbiAgICBkZWZhdWx0OiAnIzEyMTIxMidcbiAgfSxcbiAgYWN0aW9uOiB7XG4gICAgYWN0aXZlOiBjb21tb24ud2hpdGUsXG4gICAgaG92ZXI6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpJyxcbiAgICBob3Zlck9wYWNpdHk6IDAuMDgsXG4gICAgc2VsZWN0ZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpJyxcbiAgICBzZWxlY3RlZE9wYWNpdHk6IDAuMTYsXG4gICAgZGlzYWJsZWQ6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyknLFxuICAgIGRpc2FibGVkQmFja2dyb3VuZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGRpc2FibGVkT3BhY2l0eTogMC4zOCxcbiAgICBmb2N1czogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknLFxuICAgIGZvY3VzT3BhY2l0eTogMC4xMixcbiAgICBhY3RpdmF0ZWRPcGFjaXR5OiAwLjI0XG4gIH1cbn07XG5mdW5jdGlvbiBhZGRMaWdodE9yRGFyayhpbnRlbnQsIGRpcmVjdGlvbiwgc2hhZGUsIHRvbmFsT2Zmc2V0KSB7XG4gIGNvbnN0IHRvbmFsT2Zmc2V0TGlnaHQgPSB0b25hbE9mZnNldC5saWdodCB8fCB0b25hbE9mZnNldDtcbiAgY29uc3QgdG9uYWxPZmZzZXREYXJrID0gdG9uYWxPZmZzZXQuZGFyayB8fCB0b25hbE9mZnNldCAqIDEuNTtcbiAgaWYgKCFpbnRlbnRbZGlyZWN0aW9uXSkge1xuICAgIGlmIChpbnRlbnQuaGFzT3duUHJvcGVydHkoc2hhZGUpKSB7XG4gICAgICBpbnRlbnRbZGlyZWN0aW9uXSA9IGludGVudFtzaGFkZV07XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsaWdodCcpIHtcbiAgICAgIGludGVudC5saWdodCA9IGxpZ2h0ZW4oaW50ZW50Lm1haW4sIHRvbmFsT2Zmc2V0TGlnaHQpO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZGFyaycpIHtcbiAgICAgIGludGVudC5kYXJrID0gZGFya2VuKGludGVudC5tYWluLCB0b25hbE9mZnNldERhcmspO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdFByaW1hcnkobW9kZSA9ICdsaWdodCcpIHtcbiAgaWYgKG1vZGUgPT09ICdkYXJrJykge1xuICAgIHJldHVybiB7XG4gICAgICBtYWluOiBibHVlWzIwMF0sXG4gICAgICBsaWdodDogYmx1ZVs1MF0sXG4gICAgICBkYXJrOiBibHVlWzQwMF1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWFpbjogYmx1ZVs3MDBdLFxuICAgIGxpZ2h0OiBibHVlWzQwMF0sXG4gICAgZGFyazogYmx1ZVs4MDBdXG4gIH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U2Vjb25kYXJ5KG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcHVycGxlWzIwMF0sXG4gICAgICBsaWdodDogcHVycGxlWzUwXSxcbiAgICAgIGRhcms6IHB1cnBsZVs0MDBdXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1haW46IHB1cnBsZVs1MDBdLFxuICAgIGxpZ2h0OiBwdXJwbGVbMzAwXSxcbiAgICBkYXJrOiBwdXJwbGVbNzAwXVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0RGVmYXVsdEVycm9yKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogcmVkWzUwMF0sXG4gICAgICBsaWdodDogcmVkWzMwMF0sXG4gICAgICBkYXJrOiByZWRbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiByZWRbNzAwXSxcbiAgICBsaWdodDogcmVkWzQwMF0sXG4gICAgZGFyazogcmVkWzgwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRJbmZvKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogbGlnaHRCbHVlWzQwMF0sXG4gICAgICBsaWdodDogbGlnaHRCbHVlWzMwMF0sXG4gICAgICBkYXJrOiBsaWdodEJsdWVbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBsaWdodEJsdWVbNzAwXSxcbiAgICBsaWdodDogbGlnaHRCbHVlWzUwMF0sXG4gICAgZGFyazogbGlnaHRCbHVlWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRTdWNjZXNzKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogZ3JlZW5bNDAwXSxcbiAgICAgIGxpZ2h0OiBncmVlblszMDBdLFxuICAgICAgZGFyazogZ3JlZW5bNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiBncmVlbls4MDBdLFxuICAgIGxpZ2h0OiBncmVlbls1MDBdLFxuICAgIGRhcms6IGdyZWVuWzkwMF1cbiAgfTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRXYXJuaW5nKG1vZGUgPSAnbGlnaHQnKSB7XG4gIGlmIChtb2RlID09PSAnZGFyaycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFpbjogb3JhbmdlWzQwMF0sXG4gICAgICBsaWdodDogb3JhbmdlWzMwMF0sXG4gICAgICBkYXJrOiBvcmFuZ2VbNzAwXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtYWluOiAnI2VkNmMwMicsXG4gICAgLy8gY2xvc2VzdCB0byBvcmFuZ2VbODAwXSB0aGF0IHBhc3MgMzoxLlxuICAgIGxpZ2h0OiBvcmFuZ2VbNTAwXSxcbiAgICBkYXJrOiBvcmFuZ2VbOTAwXVxuICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUGFsZXR0ZShwYWxldHRlKSB7XG4gIGNvbnN0IHtcbiAgICAgIG1vZGUgPSAnbGlnaHQnLFxuICAgICAgY29udHJhc3RUaHJlc2hvbGQgPSAzLFxuICAgICAgdG9uYWxPZmZzZXQgPSAwLjJcbiAgICB9ID0gcGFsZXR0ZSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHBhbGV0dGUsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHByaW1hcnkgPSBwYWxldHRlLnByaW1hcnkgfHwgZ2V0RGVmYXVsdFByaW1hcnkobW9kZSk7XG4gIGNvbnN0IHNlY29uZGFyeSA9IHBhbGV0dGUuc2Vjb25kYXJ5IHx8IGdldERlZmF1bHRTZWNvbmRhcnkobW9kZSk7XG4gIGNvbnN0IGVycm9yID0gcGFsZXR0ZS5lcnJvciB8fCBnZXREZWZhdWx0RXJyb3IobW9kZSk7XG4gIGNvbnN0IGluZm8gPSBwYWxldHRlLmluZm8gfHwgZ2V0RGVmYXVsdEluZm8obW9kZSk7XG4gIGNvbnN0IHN1Y2Nlc3MgPSBwYWxldHRlLnN1Y2Nlc3MgfHwgZ2V0RGVmYXVsdFN1Y2Nlc3MobW9kZSk7XG4gIGNvbnN0IHdhcm5pbmcgPSBwYWxldHRlLndhcm5pbmcgfHwgZ2V0RGVmYXVsdFdhcm5pbmcobW9kZSk7XG5cbiAgLy8gVXNlIHRoZSBzYW1lIGxvZ2ljIGFzXG4gIC8vIEJvb3RzdHJhcDogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvMWQ2ZTM3MTBkZDQ0N2RlMWEyMDBmMjllOGZhNTIxZjhhMDkwOGY3MC9zY3NzL19mdW5jdGlvbnMuc2NzcyNMNTlcbiAgLy8gYW5kIG1hdGVyaWFsLWNvbXBvbmVudHMtd2ViIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYWM0NmI4ODYzYzRkYWI5ZmMyMmM0YzY2MmRjNmJkMWI2NWRkNjUyZi9wYWNrYWdlcy9tZGMtdGhlbWUvX2Z1bmN0aW9ucy5zY3NzI0w1NFxuICBmdW5jdGlvbiBnZXRDb250cmFzdFRleHQoYmFja2dyb3VuZCkge1xuICAgIGNvbnN0IGNvbnRyYXN0VGV4dCA9IGdldENvbnRyYXN0UmF0aW8oYmFja2dyb3VuZCwgZGFyay50ZXh0LnByaW1hcnkpID49IGNvbnRyYXN0VGhyZXNob2xkID8gZGFyay50ZXh0LnByaW1hcnkgOiBsaWdodC50ZXh0LnByaW1hcnk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGNvbnRyYXN0ID0gZ2V0Q29udHJhc3RSYXRpbyhiYWNrZ3JvdW5kLCBjb250cmFzdFRleHQpO1xuICAgICAgaWYgKGNvbnRyYXN0IDwgMykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtgTVVJOiBUaGUgY29udHJhc3QgcmF0aW8gb2YgJHtjb250cmFzdH06MSBmb3IgJHtjb250cmFzdFRleHR9IG9uICR7YmFja2dyb3VuZH1gLCAnZmFsbHMgYmVsb3cgdGhlIFdDQUcgcmVjb21tZW5kZWQgYWJzb2x1dGUgbWluaW11bSBjb250cmFzdCByYXRpbyBvZiAzOjEuJywgJ2h0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250cmFzdCddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyYXN0VGV4dDtcbiAgfVxuICBjb25zdCBhdWdtZW50Q29sb3IgPSAoe1xuICAgIGNvbG9yLFxuICAgIG5hbWUsXG4gICAgbWFpblNoYWRlID0gNTAwLFxuICAgIGxpZ2h0U2hhZGUgPSAzMDAsXG4gICAgZGFya1NoYWRlID0gNzAwXG4gIH0pID0+IHtcbiAgICBjb2xvciA9IF9leHRlbmRzKHt9LCBjb2xvcik7XG4gICAgaWYgKCFjb2xvci5tYWluICYmIGNvbG9yW21haW5TaGFkZV0pIHtcbiAgICAgIGNvbG9yLm1haW4gPSBjb2xvclttYWluU2hhZGVdO1xuICAgIH1cbiAgICBpZiAoIWNvbG9yLmhhc093blByb3BlcnR5KCdtYWluJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBUaGUgY29sb3Ike25hbWUgPyBgICgke25hbWV9KWAgOiAnJ30gcHJvdmlkZWQgdG8gYXVnbWVudENvbG9yKGNvbG9yKSBpcyBpbnZhbGlkLlxuVGhlIGNvbG9yIG9iamVjdCBuZWVkcyB0byBoYXZlIGEgXFxgbWFpblxcYCBwcm9wZXJ0eSBvciBhIFxcYCR7bWFpblNoYWRlfVxcYCBwcm9wZXJ0eS5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMSwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBtYWluU2hhZGUpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb2xvci5tYWluICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IFRoZSBjb2xvciR7bmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnfSBwcm92aWRlZCB0byBhdWdtZW50Q29sb3IoY29sb3IpIGlzIGludmFsaWQuXG5cXGBjb2xvci5tYWluXFxgIHNob3VsZCBiZSBhIHN0cmluZywgYnV0IFxcYCR7SlNPTi5zdHJpbmdpZnkoY29sb3IubWFpbil9XFxgIHdhcyBwcm92aWRlZCBpbnN0ZWFkLlxuXG5EaWQgeW91IGludGVuZCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2hlcz9cblxuaW1wb3J0IHsgZ3JlZW4gfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9jb2xvcnNcIjtcblxuY29uc3QgdGhlbWUxID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IGdyZWVuLFxufSB9KTtcblxuY29uc3QgdGhlbWUyID0gY3JlYXRlVGhlbWUoeyBwYWxldHRlOiB7XG4gIHByaW1hcnk6IHsgbWFpbjogZ3JlZW5bNTAwXSB9LFxufSB9KTtgIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxMiwgbmFtZSA/IGAgKCR7bmFtZX0pYCA6ICcnLCBKU09OLnN0cmluZ2lmeShjb2xvci5tYWluKSkpO1xuICAgIH1cbiAgICBhZGRMaWdodE9yRGFyayhjb2xvciwgJ2xpZ2h0JywgbGlnaHRTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGFkZExpZ2h0T3JEYXJrKGNvbG9yLCAnZGFyaycsIGRhcmtTaGFkZSwgdG9uYWxPZmZzZXQpO1xuICAgIGlmICghY29sb3IuY29udHJhc3RUZXh0KSB7XG4gICAgICBjb2xvci5jb250cmFzdFRleHQgPSBnZXRDb250cmFzdFRleHQoY29sb3IubWFpbik7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfTtcbiAgY29uc3QgbW9kZXMgPSB7XG4gICAgZGFyayxcbiAgICBsaWdodFxuICB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICghbW9kZXNbbW9kZV0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVGhlIHBhbGV0dGUgbW9kZSBcXGAke21vZGV9XFxgIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhbGV0dGVPdXRwdXQgPSBkZWVwbWVyZ2UoX2V4dGVuZHMoe1xuICAgIC8vIEEgY29sbGVjdGlvbiBvZiBjb21tb24gY29sb3JzLlxuICAgIGNvbW1vbjogX2V4dGVuZHMoe30sIGNvbW1vbiksXG4gICAgLy8gcHJldmVudCBtdXRhYmxlIG9iamVjdC5cbiAgICAvLyBUaGUgcGFsZXR0ZSBtb2RlLCBjYW4gYmUgbGlnaHQgb3IgZGFyay5cbiAgICBtb2RlLFxuICAgIC8vIFRoZSBjb2xvcnMgdXNlZCB0byByZXByZXNlbnQgcHJpbWFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBwcmltYXJ5OiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHByaW1hcnksXG4gICAgICBuYW1lOiAncHJpbWFyeSdcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHNlY29uZGFyeSBpbnRlcmZhY2UgZWxlbWVudHMgZm9yIGEgdXNlci5cbiAgICBzZWNvbmRhcnk6IGF1Z21lbnRDb2xvcih7XG4gICAgICBjb2xvcjogc2Vjb25kYXJ5LFxuICAgICAgbmFtZTogJ3NlY29uZGFyeScsXG4gICAgICBtYWluU2hhZGU6ICdBNDAwJyxcbiAgICAgIGxpZ2h0U2hhZGU6ICdBMjAwJyxcbiAgICAgIGRhcmtTaGFkZTogJ0E3MDAnXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIHJlcHJlc2VudCBpbnRlcmZhY2UgZWxlbWVudHMgdGhhdCB0aGUgdXNlciBzaG91bGQgYmUgbWFkZSBhd2FyZSBvZi5cbiAgICBlcnJvcjogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBlcnJvcixcbiAgICAgIG5hbWU6ICdlcnJvcidcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcmVwcmVzZW50IHBvdGVudGlhbGx5IGRhbmdlcm91cyBhY3Rpb25zIG9yIGltcG9ydGFudCBtZXNzYWdlcy5cbiAgICB3YXJuaW5nOiBhdWdtZW50Q29sb3Ioe1xuICAgICAgY29sb3I6IHdhcm5pbmcsXG4gICAgICBuYW1lOiAnd2FybmluZydcbiAgICB9KSxcbiAgICAvLyBUaGUgY29sb3JzIHVzZWQgdG8gcHJlc2VudCBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciB0aGF0IGlzIG5ldXRyYWwgYW5kIG5vdCBuZWNlc3NhcmlseSBpbXBvcnRhbnQuXG4gICAgaW5mbzogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBpbmZvLFxuICAgICAgbmFtZTogJ2luZm8nXG4gICAgfSksXG4gICAgLy8gVGhlIGNvbG9ycyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gYWN0aW9uIHRoYXQgdXNlciB0cmlnZ2VyZWQuXG4gICAgc3VjY2VzczogYXVnbWVudENvbG9yKHtcbiAgICAgIGNvbG9yOiBzdWNjZXNzLFxuICAgICAgbmFtZTogJ3N1Y2Nlc3MnXG4gICAgfSksXG4gICAgLy8gVGhlIGdyZXkgY29sb3JzLlxuICAgIGdyZXksXG4gICAgLy8gVXNlZCBieSBgZ2V0Q29udHJhc3RUZXh0KClgIHRvIG1heGltaXplIHRoZSBjb250cmFzdCBiZXR3ZWVuXG4gICAgLy8gdGhlIGJhY2tncm91bmQgYW5kIHRoZSB0ZXh0LlxuICAgIGNvbnRyYXN0VGhyZXNob2xkLFxuICAgIC8vIFRha2VzIGEgYmFja2dyb3VuZCBjb2xvciBhbmQgcmV0dXJucyB0aGUgdGV4dCBjb2xvciB0aGF0IG1heGltaXplcyB0aGUgY29udHJhc3QuXG4gICAgZ2V0Q29udHJhc3RUZXh0LFxuICAgIC8vIEdlbmVyYXRlIGEgcmljaCBjb2xvciBvYmplY3QuXG4gICAgYXVnbWVudENvbG9yLFxuICAgIC8vIFVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBiZWxvdyB0byBzaGlmdCBhIGNvbG9yJ3MgbHVtaW5hbmNlIGJ5IGFwcHJveGltYXRlbHlcbiAgICAvLyB0d28gaW5kZXhlcyB3aXRoaW4gaXRzIHRvbmFsIHBhbGV0dGUuXG4gICAgLy8gRS5nLiwgc2hpZnQgZnJvbSBSZWQgNTAwIHRvIFJlZCAzMDAgb3IgUmVkIDcwMC5cbiAgICB0b25hbE9mZnNldFxuICB9LCBtb2Rlc1ttb2RlXSksIG90aGVyKTtcbiAgcmV0dXJuIHBhbGV0dGVPdXRwdXQ7XG59IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJmb250RmFtaWx5XCIsIFwiZm9udFNpemVcIiwgXCJmb250V2VpZ2h0TGlnaHRcIiwgXCJmb250V2VpZ2h0UmVndWxhclwiLCBcImZvbnRXZWlnaHRNZWRpdW1cIiwgXCJmb250V2VpZ2h0Qm9sZFwiLCBcImh0bWxGb250U2l6ZVwiLCBcImFsbFZhcmlhbnRzXCIsIFwicHhUb1JlbVwiXTtcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuZnVuY3Rpb24gcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxZTUpIC8gMWU1O1xufVxuY29uc3QgY2FzZUFsbENhcHMgPSB7XG4gIHRleHRUcmFuc2Zvcm06ICd1cHBlcmNhc2UnXG59O1xuY29uc3QgZGVmYXVsdEZvbnRGYW1pbHkgPSAnXCJSb2JvdG9cIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBzYW5zLXNlcmlmJztcblxuLyoqXG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdGhlLXR5cGUtc3lzdGVtLmh0bWx9XG4gKiBAc2VlIEBsaW5re2h0dHBzOi8vbTIubWF0ZXJpYWwuaW8vZGVzaWduL3R5cG9ncmFwaHkvdW5kZXJzdGFuZGluZy10eXBvZ3JhcGh5Lmh0bWx9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVR5cG9ncmFwaHkocGFsZXR0ZSwgdHlwb2dyYXBoeSkge1xuICBjb25zdCBfcmVmID0gdHlwZW9mIHR5cG9ncmFwaHkgPT09ICdmdW5jdGlvbicgPyB0eXBvZ3JhcGh5KHBhbGV0dGUpIDogdHlwb2dyYXBoeSxcbiAgICB7XG4gICAgICBmb250RmFtaWx5ID0gZGVmYXVsdEZvbnRGYW1pbHksXG4gICAgICAvLyBUaGUgZGVmYXVsdCBmb250IHNpemUgb2YgdGhlIE1hdGVyaWFsIFNwZWNpZmljYXRpb24uXG4gICAgICBmb250U2l6ZSA9IDE0LFxuICAgICAgLy8gcHhcbiAgICAgIGZvbnRXZWlnaHRMaWdodCA9IDMwMCxcbiAgICAgIGZvbnRXZWlnaHRSZWd1bGFyID0gNDAwLFxuICAgICAgZm9udFdlaWdodE1lZGl1bSA9IDUwMCxcbiAgICAgIGZvbnRXZWlnaHRCb2xkID0gNzAwLFxuICAgICAgLy8gVGVsbCBNVUkgd2hhdCdzIHRoZSBmb250LXNpemUgb24gdGhlIGh0bWwgZWxlbWVudC5cbiAgICAgIC8vIDE2cHggaXMgdGhlIGRlZmF1bHQgZm9udC1zaXplIHVzZWQgYnkgYnJvd3NlcnMuXG4gICAgICBodG1sRm9udFNpemUgPSAxNixcbiAgICAgIC8vIEFwcGx5IHRoZSBDU1MgcHJvcGVydGllcyB0byBhbGwgdGhlIHZhcmlhbnRzLlxuICAgICAgYWxsVmFyaWFudHMsXG4gICAgICBweFRvUmVtOiBweFRvUmVtMlxuICAgIH0gPSBfcmVmLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgX2V4Y2x1ZGVkKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIGZvbnRTaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgY29uc29sZS5lcnJvcignTVVJOiBgZm9udFNpemVgIGlzIHJlcXVpcmVkIHRvIGJlIGEgbnVtYmVyLicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGh0bWxGb250U2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogYGh0bWxGb250U2l6ZWAgaXMgcmVxdWlyZWQgdG8gYmUgYSBudW1iZXIuJyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNvZWYgPSBmb250U2l6ZSAvIDE0O1xuICBjb25zdCBweFRvUmVtID0gcHhUb1JlbTIgfHwgKHNpemUgPT4gYCR7c2l6ZSAvIGh0bWxGb250U2l6ZSAqIGNvZWZ9cmVtYCk7XG4gIGNvbnN0IGJ1aWxkVmFyaWFudCA9IChmb250V2VpZ2h0LCBzaXplLCBsaW5lSGVpZ2h0LCBsZXR0ZXJTcGFjaW5nLCBjYXNpbmcpID0+IF9leHRlbmRzKHtcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRXZWlnaHQsXG4gICAgZm9udFNpemU6IHB4VG9SZW0oc2l6ZSksXG4gICAgLy8gVW5pdGxlc3MgZm9sbG93aW5nIGh0dHBzOi8vbWV5ZXJ3ZWIuY29tL2VyaWMvdGhvdWdodHMvMjAwNi8wMi8wOC91bml0bGVzcy1saW5lLWhlaWdodHMvXG4gICAgbGluZUhlaWdodFxuICB9LCBmb250RmFtaWx5ID09PSBkZWZhdWx0Rm9udEZhbWlseSA/IHtcbiAgICBsZXR0ZXJTcGFjaW5nOiBgJHtyb3VuZChsZXR0ZXJTcGFjaW5nIC8gc2l6ZSl9ZW1gXG4gIH0gOiB7fSwgY2FzaW5nLCBhbGxWYXJpYW50cyk7XG4gIGNvbnN0IHZhcmlhbnRzID0ge1xuICAgIGgxOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA5NiwgMS4xNjcsIC0xLjUpLFxuICAgIGgyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodExpZ2h0LCA2MCwgMS4yLCAtMC41KSxcbiAgICBoMzogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCA0OCwgMS4xNjcsIDApLFxuICAgIGg0OiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDM0LCAxLjIzNSwgMC4yNSksXG4gICAgaDU6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMjQsIDEuMzM0LCAwKSxcbiAgICBoNjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDIwLCAxLjYsIDAuMTUpLFxuICAgIHN1YnRpdGxlMTogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRSZWd1bGFyLCAxNiwgMS43NSwgMC4xNSksXG4gICAgc3VidGl0bGUyOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodE1lZGl1bSwgMTQsIDEuNTcsIDAuMSksXG4gICAgYm9keTE6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTYsIDEuNSwgMC4xNSksXG4gICAgYm9keTI6IGJ1aWxkVmFyaWFudChmb250V2VpZ2h0UmVndWxhciwgMTQsIDEuNDMsIDAuMTUpLFxuICAgIGJ1dHRvbjogYnVpbGRWYXJpYW50KGZvbnRXZWlnaHRNZWRpdW0sIDE0LCAxLjc1LCAwLjQsIGNhc2VBbGxDYXBzKSxcbiAgICBjYXB0aW9uOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAxLjY2LCAwLjQpLFxuICAgIG92ZXJsaW5lOiBidWlsZFZhcmlhbnQoZm9udFdlaWdodFJlZ3VsYXIsIDEyLCAyLjY2LCAxLCBjYXNlQWxsQ2FwcyksXG4gICAgLy8gVE9ETyB2NjogUmVtb3ZlIGhhbmRsaW5nIG9mICdpbmhlcml0JyB2YXJpYW50IGZyb20gdGhlIHRoZW1lIGFzIGl0IGlzIGFscmVhZHkgaGFuZGxlZCBpbiBNYXRlcmlhbCBVSSdzIFR5cG9ncmFwaHkgY29tcG9uZW50LiBBbHNvLCByZW1lbWJlciB0byByZW1vdmUgdGhlIGFzc29jaWF0ZWQgdHlwZXMuXG4gICAgaW5oZXJpdDoge1xuICAgICAgZm9udEZhbWlseTogJ2luaGVyaXQnLFxuICAgICAgZm9udFdlaWdodDogJ2luaGVyaXQnLFxuICAgICAgZm9udFNpemU6ICdpbmhlcml0JyxcbiAgICAgIGxpbmVIZWlnaHQ6ICdpbmhlcml0JyxcbiAgICAgIGxldHRlclNwYWNpbmc6ICdpbmhlcml0J1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGRlZXBtZXJnZShfZXh0ZW5kcyh7XG4gICAgaHRtbEZvbnRTaXplLFxuICAgIHB4VG9SZW0sXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgICBmb250V2VpZ2h0TGlnaHQsXG4gICAgZm9udFdlaWdodFJlZ3VsYXIsXG4gICAgZm9udFdlaWdodE1lZGl1bSxcbiAgICBmb250V2VpZ2h0Qm9sZFxuICB9LCB2YXJpYW50cyksIG90aGVyLCB7XG4gICAgY2xvbmU6IGZhbHNlIC8vIE5vIG5lZWQgdG8gY2xvbmUgZGVlcFxuICB9KTtcbn0iLCAiY29uc3Qgc2hhZG93S2V5VW1icmFPcGFjaXR5ID0gMC4yO1xuY29uc3Qgc2hhZG93S2V5UGVudW1icmFPcGFjaXR5ID0gMC4xNDtcbmNvbnN0IHNoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5ID0gMC4xMjtcbmZ1bmN0aW9uIGNyZWF0ZVNoYWRvdyguLi5weCkge1xuICByZXR1cm4gW2Ake3B4WzBdfXB4ICR7cHhbMV19cHggJHtweFsyXX1weCAke3B4WzNdfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlVbWJyYU9wYWNpdHl9KWAsIGAke3B4WzRdfXB4ICR7cHhbNV19cHggJHtweFs2XX1weCAke3B4WzddfXB4IHJnYmEoMCwwLDAsJHtzaGFkb3dLZXlQZW51bWJyYU9wYWNpdHl9KWAsIGAke3B4WzhdfXB4ICR7cHhbOV19cHggJHtweFsxMF19cHggJHtweFsxMV19cHggcmdiYSgwLDAsMCwke3NoYWRvd0FtYmllbnRTaGFkb3dPcGFjaXR5fSlgXS5qb2luKCcsJyk7XG59XG5cbi8vIFZhbHVlcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRlcmlhbC1jb21wb25lbnRzL21hdGVyaWFsLWNvbXBvbmVudHMtd2ViL2Jsb2IvYmU4NzQ3Zjk0NTc0NjY5Y2I1ZTdhZGQxYTdjNTRmYTQxYTg5Y2VjNy9wYWNrYWdlcy9tZGMtZWxldmF0aW9uL192YXJpYWJsZXMuc2Nzc1xuY29uc3Qgc2hhZG93cyA9IFsnbm9uZScsIGNyZWF0ZVNoYWRvdygwLCAyLCAxLCAtMSwgMCwgMSwgMSwgMCwgMCwgMSwgMywgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAxLCAtMiwgMCwgMiwgMiwgMCwgMCwgMSwgNSwgMCksIGNyZWF0ZVNoYWRvdygwLCAzLCAzLCAtMiwgMCwgMywgNCwgMCwgMCwgMSwgOCwgMCksIGNyZWF0ZVNoYWRvdygwLCAyLCA0LCAtMSwgMCwgNCwgNSwgMCwgMCwgMSwgMTAsIDApLCBjcmVhdGVTaGFkb3coMCwgMywgNSwgLTEsIDAsIDUsIDgsIDAsIDAsIDEsIDE0LCAwKSwgY3JlYXRlU2hhZG93KDAsIDMsIDUsIC0xLCAwLCA2LCAxMCwgMCwgMCwgMSwgMTgsIDApLCBjcmVhdGVTaGFkb3coMCwgNCwgNSwgLTIsIDAsIDcsIDEwLCAxLCAwLCAyLCAxNiwgMSksIGNyZWF0ZVNoYWRvdygwLCA1LCA1LCAtMywgMCwgOCwgMTAsIDEsIDAsIDMsIDE0LCAyKSwgY3JlYXRlU2hhZG93KDAsIDUsIDYsIC0zLCAwLCA5LCAxMiwgMSwgMCwgMywgMTYsIDIpLCBjcmVhdGVTaGFkb3coMCwgNiwgNiwgLTMsIDAsIDEwLCAxNCwgMSwgMCwgNCwgMTgsIDMpLCBjcmVhdGVTaGFkb3coMCwgNiwgNywgLTQsIDAsIDExLCAxNSwgMSwgMCwgNCwgMjAsIDMpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEyLCAxNywgMiwgMCwgNSwgMjIsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOCwgLTQsIDAsIDEzLCAxOSwgMiwgMCwgNSwgMjQsIDQpLCBjcmVhdGVTaGFkb3coMCwgNywgOSwgLTQsIDAsIDE0LCAyMSwgMiwgMCwgNSwgMjYsIDQpLCBjcmVhdGVTaGFkb3coMCwgOCwgOSwgLTUsIDAsIDE1LCAyMiwgMiwgMCwgNiwgMjgsIDUpLCBjcmVhdGVTaGFkb3coMCwgOCwgMTAsIC01LCAwLCAxNiwgMjQsIDIsIDAsIDYsIDMwLCA1KSwgY3JlYXRlU2hhZG93KDAsIDgsIDExLCAtNSwgMCwgMTcsIDI2LCAyLCAwLCA2LCAzMiwgNSksIGNyZWF0ZVNoYWRvdygwLCA5LCAxMSwgLTUsIDAsIDE4LCAyOCwgMiwgMCwgNywgMzQsIDYpLCBjcmVhdGVTaGFkb3coMCwgOSwgMTIsIC02LCAwLCAxOSwgMjksIDIsIDAsIDcsIDM2LCA2KSwgY3JlYXRlU2hhZG93KDAsIDEwLCAxMywgLTYsIDAsIDIwLCAzMSwgMywgMCwgOCwgMzgsIDcpLCBjcmVhdGVTaGFkb3coMCwgMTAsIDEzLCAtNiwgMCwgMjEsIDMzLCAzLCAwLCA4LCA0MCwgNyksIGNyZWF0ZVNoYWRvdygwLCAxMCwgMTQsIC02LCAwLCAyMiwgMzUsIDMsIDAsIDgsIDQyLCA3KSwgY3JlYXRlU2hhZG93KDAsIDExLCAxNCwgLTcsIDAsIDIzLCAzNiwgMywgMCwgOSwgNDQsIDgpLCBjcmVhdGVTaGFkb3coMCwgMTEsIDE1LCAtNywgMCwgMjQsIDM4LCAzLCAwLCA5LCA0NiwgOCldO1xuZXhwb3J0IGRlZmF1bHQgc2hhZG93czsiLCAiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImR1cmF0aW9uXCIsIFwiZWFzaW5nXCIsIFwiZGVsYXlcIl07XG4vLyBGb2xsb3cgaHR0cHM6Ly9tYXRlcmlhbC5nb29nbGUuY29tL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctbmF0dXJhbC1lYXNpbmctY3VydmVzXG4vLyB0byBsZWFybiB0aGUgY29udGV4dCBpbiB3aGljaCBlYWNoIGVhc2luZyBzaG91bGQgYmUgdXNlZC5cbmV4cG9ydCBjb25zdCBlYXNpbmcgPSB7XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGVhc2luZyBjdXJ2ZS5cbiAgZWFzZUluT3V0OiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgZW50ZXIgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5IGZyb20gb2ZmLXNjcmVlbiBhbmRcbiAgLy8gc2xvd2x5IGRlY2VsZXJhdGUgdG8gYSByZXN0aW5nIHBvaW50LlxuICBlYXNlT3V0OiAnY3ViaWMtYmV6aWVyKDAuMCwgMCwgMC4yLCAxKScsXG4gIC8vIE9iamVjdHMgbGVhdmUgdGhlIHNjcmVlbiBhdCBmdWxsIHZlbG9jaXR5LiBUaGV5IGRvIG5vdCBkZWNlbGVyYXRlIHdoZW4gb2ZmLXNjcmVlbi5cbiAgZWFzZUluOiAnY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSknLFxuICAvLyBUaGUgc2hhcnAgY3VydmUgaXMgdXNlZCBieSBvYmplY3RzIHRoYXQgbWF5IHJldHVybiB0byB0aGUgc2NyZWVuIGF0IGFueSB0aW1lLlxuICBzaGFycDogJ2N1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSknXG59O1xuXG4vLyBGb2xsb3cgaHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9ndWlkZWxpbmVzL21vdGlvbi9kdXJhdGlvbi1lYXNpbmcuaHRtbCNkdXJhdGlvbi1lYXNpbmctY29tbW9uLWR1cmF0aW9uc1xuLy8gdG8gbGVhcm4gd2hlbiB1c2Ugd2hhdCB0aW1pbmdcbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IHtcbiAgc2hvcnRlc3Q6IDE1MCxcbiAgc2hvcnRlcjogMjAwLFxuICBzaG9ydDogMjUwLFxuICAvLyBtb3N0IGJhc2ljIHJlY29tbWVuZGVkIHRpbWluZ1xuICBzdGFuZGFyZDogMzAwLFxuICAvLyB0aGlzIGlzIHRvIGJlIHVzZWQgaW4gY29tcGxleCBhbmltYXRpb25zXG4gIGNvbXBsZXg6IDM3NSxcbiAgLy8gcmVjb21tZW5kZWQgd2hlbiBzb21ldGhpbmcgaXMgZW50ZXJpbmcgc2NyZWVuXG4gIGVudGVyaW5nU2NyZWVuOiAyMjUsXG4gIC8vIHJlY29tbWVuZGVkIHdoZW4gc29tZXRoaW5nIGlzIGxlYXZpbmcgc2NyZWVuXG4gIGxlYXZpbmdTY3JlZW46IDE5NVxufTtcbmZ1bmN0aW9uIGZvcm1hdE1zKG1pbGxpc2Vjb25kcykge1xuICByZXR1cm4gYCR7TWF0aC5yb3VuZChtaWxsaXNlY29uZHMpfW1zYDtcbn1cbmZ1bmN0aW9uIGdldEF1dG9IZWlnaHREdXJhdGlvbihoZWlnaHQpIHtcbiAgaWYgKCFoZWlnaHQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBjb25zdGFudCA9IGhlaWdodCAvIDM2O1xuXG4gIC8vIGh0dHBzOi8vd3d3LndvbGZyYW1hbHBoYS5jb20vaW5wdXQvP2k9KDQrJTJCKzE1KyorKHgrJTJGKzM2KykrKiorMC4yNSslMkIrKHgrJTJGKzM2KSslMkYrNSkrKisxMFxuICByZXR1cm4gTWF0aC5yb3VuZCgoNCArIDE1ICogY29uc3RhbnQgKiogMC4yNSArIGNvbnN0YW50IC8gNSkgKiAxMCk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVUcmFuc2l0aW9ucyhpbnB1dFRyYW5zaXRpb25zKSB7XG4gIGNvbnN0IG1lcmdlZEVhc2luZyA9IF9leHRlbmRzKHt9LCBlYXNpbmcsIGlucHV0VHJhbnNpdGlvbnMuZWFzaW5nKTtcbiAgY29uc3QgbWVyZ2VkRHVyYXRpb24gPSBfZXh0ZW5kcyh7fSwgZHVyYXRpb24sIGlucHV0VHJhbnNpdGlvbnMuZHVyYXRpb24pO1xuICBjb25zdCBjcmVhdGUgPSAocHJvcHMgPSBbJ2FsbCddLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbk9wdGlvbiA9IG1lcmdlZER1cmF0aW9uLnN0YW5kYXJkLFxuICAgICAgICBlYXNpbmc6IGVhc2luZ09wdGlvbiA9IG1lcmdlZEVhc2luZy5lYXNlSW5PdXQsXG4gICAgICAgIGRlbGF5ID0gMFxuICAgICAgfSA9IG9wdGlvbnMsXG4gICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGlzU3RyaW5nID0gdmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgIC8vIElFMTEgc3VwcG9ydCwgcmVwbGFjZSB3aXRoIE51bWJlci5pc05hTlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgICAgY29uc3QgaXNOdW1iZXIgPSB2YWx1ZSA9PiAhaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgICAgaWYgKCFpc1N0cmluZyhwcm9wcykgJiYgIUFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJwcm9wc1wiIG11c3QgYmUgYSBzdHJpbmcgb3IgQXJyYXkuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzTnVtYmVyKGR1cmF0aW9uT3B0aW9uKSAmJiAhaXNTdHJpbmcoZHVyYXRpb25PcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogQXJndW1lbnQgXCJkdXJhdGlvblwiIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcgYnV0IGZvdW5kICR7ZHVyYXRpb25PcHRpb259LmApO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1N0cmluZyhlYXNpbmdPcHRpb24pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogQXJndW1lbnQgXCJlYXNpbmdcIiBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc051bWJlcihkZWxheSkgJiYgIWlzU3RyaW5nKGRlbGF5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdNVUk6IEFyZ3VtZW50IFwiZGVsYXlcIiBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLicpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBTZWNvbmcgYXJndW1lbnQgb2YgdHJhbnNpdGlvbi5jcmVhdGUgbXVzdCBiZSBhbiBvYmplY3QuJywgXCJBcmd1bWVudHMgc2hvdWxkIGJlIGVpdGhlciBgY3JlYXRlKCdwcm9wMScsIG9wdGlvbnMpYCBvciBgY3JlYXRlKFsncHJvcDEnLCAncHJvcDInXSwgb3B0aW9ucylgXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Qua2V5cyhvdGhlcikubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogVW5yZWNvZ25pemVkIGFyZ3VtZW50KHMpIFske09iamVjdC5rZXlzKG90aGVyKS5qb2luKCcsJyl9XS5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHByb3BzKSA/IHByb3BzIDogW3Byb3BzXSkubWFwKGFuaW1hdGVkUHJvcCA9PiBgJHthbmltYXRlZFByb3B9ICR7dHlwZW9mIGR1cmF0aW9uT3B0aW9uID09PSAnc3RyaW5nJyA/IGR1cmF0aW9uT3B0aW9uIDogZm9ybWF0TXMoZHVyYXRpb25PcHRpb24pfSAke2Vhc2luZ09wdGlvbn0gJHt0eXBlb2YgZGVsYXkgPT09ICdzdHJpbmcnID8gZGVsYXkgOiBmb3JtYXRNcyhkZWxheSl9YCkuam9pbignLCcpO1xuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIGdldEF1dG9IZWlnaHREdXJhdGlvbixcbiAgICBjcmVhdGVcbiAgfSwgaW5wdXRUcmFuc2l0aW9ucywge1xuICAgIGVhc2luZzogbWVyZ2VkRWFzaW5nLFxuICAgIGR1cmF0aW9uOiBtZXJnZWREdXJhdGlvblxuICB9KTtcbn0iLCAiLy8gV2UgbmVlZCB0byBjZW50cmFsaXplIHRoZSB6SW5kZXggZGVmaW5pdGlvbnMgYXMgdGhleSB3b3JrXG4vLyBsaWtlIGdsb2JhbCB2YWx1ZXMgaW4gdGhlIGJyb3dzZXIuXG5jb25zdCB6SW5kZXggPSB7XG4gIG1vYmlsZVN0ZXBwZXI6IDEwMDAsXG4gIGZhYjogMTA1MCxcbiAgc3BlZWREaWFsOiAxMDUwLFxuICBhcHBCYXI6IDExMDAsXG4gIGRyYXdlcjogMTIwMCxcbiAgbW9kYWw6IDEzMDAsXG4gIHNuYWNrYmFyOiAxNDAwLFxuICB0b29sdGlwOiAxNTAwXG59O1xuZXhwb3J0IGRlZmF1bHQgekluZGV4OyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBjcmVhdGVUaGVtZSBmcm9tICcuL2NyZWF0ZVRoZW1lJztcbmNvbnN0IGRlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0VGhlbWU7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHN5c3RlbVVzZVRoZW1lUHJvcHMgZnJvbSAnQG11aS9zeXN0ZW0vdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgZGVmYXVsdFRoZW1lIGZyb20gJy4vZGVmYXVsdFRoZW1lJztcbmltcG9ydCBUSEVNRV9JRCBmcm9tICcuL2lkZW50aWZpZXInO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWVQcm9wcyh7XG4gIHByb3BzLFxuICBuYW1lXG59KSB7XG4gIHJldHVybiBzeXN0ZW1Vc2VUaGVtZVByb3BzKHtcbiAgICBwcm9wcyxcbiAgICBuYW1lLFxuICAgIGRlZmF1bHRUaGVtZSxcbiAgICB0aGVtZUlkOiBUSEVNRV9JRFxuICB9KTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlU3R5bGVkLCB7IHNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnQG11aS9zeXN0ZW0vY3JlYXRlU3R5bGVkJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi9kZWZhdWx0VGhlbWUnO1xuaW1wb3J0IFRIRU1FX0lEIGZyb20gJy4vaWRlbnRpZmllcic7XG5leHBvcnQgY29uc3Qgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gcHJvcCA9PiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSAmJiBwcm9wICE9PSAnY2xhc3Nlcyc7XG5leHBvcnQgY29uc3Qgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3A7XG5jb25zdCBzdHlsZWQgPSBjcmVhdGVTdHlsZWQoe1xuICB0aGVtZUlkOiBUSEVNRV9JRCxcbiAgZGVmYXVsdFRoZW1lLFxuICByb290U2hvdWxkRm9yd2FyZFByb3Bcbn0pO1xuZXhwb3J0IGRlZmF1bHQgc3R5bGVkOyIsICJpbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuZXhwb3J0IGRlZmF1bHQgY2FwaXRhbGl6ZTsiLCAiaW1wb3J0IGNyZWF0ZUNoYWluZWRGdW5jdGlvbiBmcm9tICdAbXVpL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbic7XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDaGFpbmVkRnVuY3Rpb247IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU3ZnSWNvbiBmcm9tICcuLi9TdmdJY29uJztcblxuLyoqXG4gKiBQcml2YXRlIG1vZHVsZSByZXNlcnZlZCBmb3IgQG11aSBwYWNrYWdlcy5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVN2Z0ljb24ocGF0aCwgZGlzcGxheU5hbWUpIHtcbiAgZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCByZWYpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3ZnSWNvbiwgX2V4dGVuZHMoe1xuICAgICAgXCJkYXRhLXRlc3RpZFwiOiBgJHtkaXNwbGF5TmFtZX1JY29uYCxcbiAgICAgIHJlZjogcmVmXG4gICAgfSwgcHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiBwYXRoXG4gICAgfSkpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gTmVlZCB0byBzZXQgYGRpc3BsYXlOYW1lYCBvbiB0aGUgaW5uZXIgY29tcG9uZW50IGZvciBSZWFjdC5tZW1vLlxuICAgIC8vIFJlYWN0IHByaW9yIHRvIDE2LjE0IGlnbm9yZXMgYGRpc3BsYXlOYW1lYCBvbiB0aGUgd3JhcHBlci5cbiAgICBDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgJHtkaXNwbGF5TmFtZX1JY29uYDtcbiAgfVxuICBDb21wb25lbnQubXVpTmFtZSA9IFN2Z0ljb24ubXVpTmFtZTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKCAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihDb21wb25lbnQpKTtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImZvbnRTaXplXCIsIFwiaHRtbENvbG9yXCIsIFwiaW5oZXJpdFZpZXdCb3hcIiwgXCJ0aXRsZUFjY2Vzc1wiLCBcInZpZXdCb3hcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRTdmdJY29uVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9zdmdJY29uQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbG9yLFxuICAgIGZvbnRTaXplLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNvbG9yICE9PSAnaW5oZXJpdCcgJiYgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgZm9udFNpemUke2NhcGl0YWxpemUoZm9udFNpemUpfWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgU3ZnSWNvblJvb3QgPSBzdHlsZWQoJ3N2ZycsIHtcbiAgbmFtZTogJ011aVN2Z0ljb24nLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIHN0eWxlc1tgZm9udFNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5mb250U2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHRyYW5zaXRpb25zLCBfdGhlbWUkdHJhbnNpdGlvbnMkY3IsIF90aGVtZSR0cmFuc2l0aW9uczIsIF90aGVtZSR0eXBvZ3JhcGh5LCBfdGhlbWUkdHlwb2dyYXBoeSRweFQsIF90aGVtZSR0eXBvZ3JhcGh5MiwgX3RoZW1lJHR5cG9ncmFwaHkyJHB4LCBfdGhlbWUkdHlwb2dyYXBoeTMsIF90aGVtZSR0eXBvZ3JhcGh5MyRweCwgX3BhbGV0dGUkb3duZXJTdGF0ZSRjLCBfcGFsZXR0ZSwgX3BhbGV0dGUyLCBfcGFsZXR0ZTM7XG4gIHJldHVybiB7XG4gICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIHdpZHRoOiAnMWVtJyxcbiAgICBoZWlnaHQ6ICcxZW0nLFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIC8vIHRoZSA8c3ZnPiB3aWxsIGRlZmluZSB0aGUgcHJvcGVydHkgdGhhdCBoYXMgYGN1cnJlbnRDb2xvcmBcbiAgICAvLyBlLmcuIGhlcm9pY29ucyB1c2VzIGZpbGw9XCJub25lXCIgYW5kIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgZmlsbDogb3duZXJTdGF0ZS5oYXNTdmdBc0NoaWxkID8gdW5kZWZpbmVkIDogJ2N1cnJlbnRDb2xvcicsXG4gICAgZmxleFNocmluazogMCxcbiAgICB0cmFuc2l0aW9uOiAoX3RoZW1lJHRyYW5zaXRpb25zID0gdGhlbWUudHJhbnNpdGlvbnMpID09IG51bGwgfHwgKF90aGVtZSR0cmFuc2l0aW9ucyRjciA9IF90aGVtZSR0cmFuc2l0aW9ucy5jcmVhdGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdHJhbnNpdGlvbnMkY3IuY2FsbChfdGhlbWUkdHJhbnNpdGlvbnMsICdmaWxsJywge1xuICAgICAgZHVyYXRpb246IChfdGhlbWUkdHJhbnNpdGlvbnMyID0gdGhlbWUudHJhbnNpdGlvbnMpID09IG51bGwgfHwgKF90aGVtZSR0cmFuc2l0aW9uczIgPSBfdGhlbWUkdHJhbnNpdGlvbnMyLmR1cmF0aW9uKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHRyYW5zaXRpb25zMi5zaG9ydGVyXG4gICAgfSksXG4gICAgZm9udFNpemU6IHtcbiAgICAgIGluaGVyaXQ6ICdpbmhlcml0JyxcbiAgICAgIHNtYWxsOiAoKF90aGVtZSR0eXBvZ3JhcGh5ID0gdGhlbWUudHlwb2dyYXBoeSkgPT0gbnVsbCB8fCAoX3RoZW1lJHR5cG9ncmFwaHkkcHhUID0gX3RoZW1lJHR5cG9ncmFwaHkucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5JHB4VC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5LCAyMCkpIHx8ICcxLjI1cmVtJyxcbiAgICAgIG1lZGl1bTogKChfdGhlbWUkdHlwb2dyYXBoeTIgPSB0aGVtZS50eXBvZ3JhcGh5KSA9PSBudWxsIHx8IChfdGhlbWUkdHlwb2dyYXBoeTIkcHggPSBfdGhlbWUkdHlwb2dyYXBoeTIucHhUb1JlbSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSR0eXBvZ3JhcGh5MiRweC5jYWxsKF90aGVtZSR0eXBvZ3JhcGh5MiwgMjQpKSB8fCAnMS41cmVtJyxcbiAgICAgIGxhcmdlOiAoKF90aGVtZSR0eXBvZ3JhcGh5MyA9IHRoZW1lLnR5cG9ncmFwaHkpID09IG51bGwgfHwgKF90aGVtZSR0eXBvZ3JhcGh5MyRweCA9IF90aGVtZSR0eXBvZ3JhcGh5My5weFRvUmVtKSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHR5cG9ncmFwaHkzJHB4LmNhbGwoX3RoZW1lJHR5cG9ncmFwaHkzLCAzNSkpIHx8ICcyLjE4NzVyZW0nXG4gICAgfVtvd25lclN0YXRlLmZvbnRTaXplXSxcbiAgICAvLyBUT0RPIHY1IGRlcHJlY2F0ZSwgdjYgcmVtb3ZlIGZvciBzeFxuICAgIGNvbG9yOiAoX3BhbGV0dGUkb3duZXJTdGF0ZSRjID0gKF9wYWxldHRlID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlID0gX3BhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZS5tYWluKSAhPSBudWxsID8gX3BhbGV0dGUkb3duZXJTdGF0ZSRjIDoge1xuICAgICAgYWN0aW9uOiAoX3BhbGV0dGUyID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUpID09IG51bGwgfHwgKF9wYWxldHRlMiA9IF9wYWxldHRlMi5hY3Rpb24pID09IG51bGwgPyB2b2lkIDAgOiBfcGFsZXR0ZTIuYWN0aXZlLFxuICAgICAgZGlzYWJsZWQ6IChfcGFsZXR0ZTMgPSAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZSkgPT0gbnVsbCB8fCAoX3BhbGV0dGUzID0gX3BhbGV0dGUzLmFjdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9wYWxldHRlMy5kaXNhYmxlZCxcbiAgICAgIGluaGVyaXQ6IHVuZGVmaW5lZFxuICAgIH1bb3duZXJTdGF0ZS5jb2xvcl1cbiAgfTtcbn0pO1xuY29uc3QgU3ZnSWNvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFN2Z0ljb24oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVN2Z0ljb24nXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ2luaGVyaXQnLFxuICAgICAgY29tcG9uZW50ID0gJ3N2ZycsXG4gICAgICBmb250U2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgaHRtbENvbG9yLFxuICAgICAgaW5oZXJpdFZpZXdCb3ggPSBmYWxzZSxcbiAgICAgIHRpdGxlQWNjZXNzLFxuICAgICAgdmlld0JveCA9ICcwIDAgMjQgMjQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGhhc1N2Z0FzQ2hpbGQgPSAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmIGNoaWxkcmVuLnR5cGUgPT09ICdzdmcnO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgY29tcG9uZW50LFxuICAgIGZvbnRTaXplLFxuICAgIGluc3RhbmNlRm9udFNpemU6IGluUHJvcHMuZm9udFNpemUsXG4gICAgaW5oZXJpdFZpZXdCb3gsXG4gICAgdmlld0JveCxcbiAgICBoYXNTdmdBc0NoaWxkXG4gIH0pO1xuICBjb25zdCBtb3JlID0ge307XG4gIGlmICghaW5oZXJpdFZpZXdCb3gpIHtcbiAgICBtb3JlLnZpZXdCb3ggPSB2aWV3Qm94O1xuICB9XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhTdmdJY29uUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBmb2N1c2FibGU6IFwiZmFsc2VcIixcbiAgICBjb2xvcjogaHRtbENvbG9yLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogdGl0bGVBY2Nlc3MgPyB1bmRlZmluZWQgOiB0cnVlLFxuICAgIHJvbGU6IHRpdGxlQWNjZXNzID8gJ2ltZycgOiB1bmRlZmluZWQsXG4gICAgcmVmOiByZWZcbiAgfSwgbW9yZSwgb3RoZXIsIGhhc1N2Z0FzQ2hpbGQgJiYgY2hpbGRyZW4ucHJvcHMsIHtcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBbaGFzU3ZnQXNDaGlsZCA/IGNoaWxkcmVuLnByb3BzLmNoaWxkcmVuIDogY2hpbGRyZW4sIHRpdGxlQWNjZXNzID8gLyojX19QVVJFX18qL19qc3goXCJ0aXRsZVwiLCB7XG4gICAgICBjaGlsZHJlbjogdGl0bGVBY2Nlc3NcbiAgICB9KSA6IG51bGxdXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3ZnSWNvbi5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBOb2RlIHBhc3NlZCBpbnRvIHRoZSBTVkcgZWxlbWVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgYGh0bWxDb2xvcmAgcHJvcCB0byBhcHBseSBhIGNvbG9yIGF0dHJpYnV0ZSB0byB0aGUgU1ZHIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdhY3Rpb24nLCAnZGlzYWJsZWQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGZvbnRTaXplIGFwcGxpZWQgdG8gdGhlIGljb24uIERlZmF1bHRzIHRvIDI0cHgsIGJ1dCBjYW4gYmUgY29uZmlndXJlIHRvIGluaGVyaXQgZm9udCBzaXplLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgZm9udFNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdsYXJnZScsICdtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBjb2xvciBhdHRyaWJ1dGUgdG8gdGhlIFNWRyBlbGVtZW50LlxuICAgKi9cbiAgaHRtbENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcm9vdCBub2RlIHdpbGwgaW5oZXJpdCB0aGUgY3VzdG9tIGBjb21wb25lbnRgJ3Mgdmlld0JveCBhbmQgdGhlIGB2aWV3Qm94YFxuICAgKiBwcm9wIHdpbGwgYmUgaWdub3JlZC5cbiAgICogVXNlZnVsIHdoZW4geW91IHdhbnQgdG8gcmVmZXJlbmNlIGEgY3VzdG9tIGBjb21wb25lbnRgIGFuZCBoYXZlIGBTdmdJY29uYCBwYXNzIHRoYXRcbiAgICogYGNvbXBvbmVudGAncyB2aWV3Qm94IHRvIHRoZSByb290IG5vZGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbmhlcml0Vmlld0JveDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc2hhcGUtcmVuZGVyaW5nIGF0dHJpYnV0ZS4gVGhlIGJlaGF2aW9yIG9mIHRoZSBkaWZmZXJlbnQgb3B0aW9ucyBpcyBkZXNjcmliZWQgb24gdGhlXG4gICAqIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvc2hhcGUtcmVuZGVyaW5nKS5cbiAgICogSWYgeW91IGFyZSBoYXZpbmcgaXNzdWVzIHdpdGggYmx1cnJ5IGljb25zIHlvdSBzaG91bGQgaW52ZXN0aWdhdGUgdGhpcyBwcm9wLlxuICAgKi9cbiAgc2hhcGVSZW5kZXJpbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhIGh1bWFuLXJlYWRhYmxlIHRpdGxlIGZvciB0aGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIGl0LlxuICAgKiBodHRwczovL3d3dy53My5vcmcvVFIvU1ZHLWFjY2Vzcy8jRXF1aXZhbGVudFxuICAgKi9cbiAgdGl0bGVBY2Nlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBBbGxvd3MgeW91IHRvIHJlZGVmaW5lIHdoYXQgdGhlIGNvb3JkaW5hdGVzIHdpdGhvdXQgdW5pdHMgbWVhbiBpbnNpZGUgYW4gU1ZHIGVsZW1lbnQuXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGUgU1ZHIGVsZW1lbnQgaXMgNTAwICh3aWR0aCkgYnkgMjAwIChoZWlnaHQpLFxuICAgKiBhbmQgeW91IHBhc3Mgdmlld0JveD1cIjAgMCA1MCAyMFwiLFxuICAgKiB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvb3JkaW5hdGVzIGluc2lkZSB0aGUgU1ZHIHdpbGwgZ28gZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyICgwLDApXG4gICAqIHRvIGJvdHRvbSByaWdodCAoNTAsMjApIGFuZCBlYWNoIHVuaXQgd2lsbCBiZSB3b3J0aCAxMHB4LlxuICAgKiBAZGVmYXVsdCAnMCAwIDI0IDI0J1xuICAgKi9cbiAgdmlld0JveDogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcblN2Z0ljb24ubXVpTmFtZSA9ICdTdmdJY29uJztcbmV4cG9ydCBkZWZhdWx0IFN2Z0ljb247IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpU3ZnSWNvbicsIHNsb3QpO1xufVxuY29uc3Qgc3ZnSWNvbkNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlTdmdJY29uJywgWydyb290JywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdjb2xvckFjdGlvbicsICdjb2xvckVycm9yJywgJ2NvbG9yRGlzYWJsZWQnLCAnZm9udFNpemVJbmhlcml0JywgJ2ZvbnRTaXplU21hbGwnLCAnZm9udFNpemVNZWRpdW0nLCAnZm9udFNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IHN2Z0ljb25DbGFzc2VzOyIsICJpbXBvcnQgaXNNdWlFbGVtZW50IGZyb20gJ0BtdWkvdXRpbHMvaXNNdWlFbGVtZW50JztcbmV4cG9ydCBkZWZhdWx0IGlzTXVpRWxlbWVudDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlSWQgZnJvbSAnQG11aS91dGlscy91c2VJZCc7XG5leHBvcnQgZGVmYXVsdCB1c2VJZDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICdAbXVpL3V0aWxzL3VzZUNvbnRyb2xsZWQnO1xuZXhwb3J0IGRlZmF1bHQgdXNlQ29udHJvbGxlZDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAbXVpL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2snO1xuZXhwb3J0IGRlZmF1bHQgdXNlRXZlbnRDYWxsYmFjazsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICdAbXVpL3V0aWxzL3VzZUZvcmtSZWYnO1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ya1JlZjsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdXNlSXNGb2N1c1Zpc2libGUgZnJvbSAnQG11aS91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5leHBvcnQgZGVmYXVsdCB1c2VJc0ZvY3VzVmlzaWJsZTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsICJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTsiLCAiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRNYXBwaW5nLCBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nLCBnZXROZXh0Q2hpbGRNYXBwaW5nIH0gZnJvbSAnLi91dGlscy9DaGlsZE1hcHBpbmcnO1xuXG52YXIgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBvYmpba107XG4gIH0pO1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29tcG9uZW50OiAnZGl2JyxcbiAgY2hpbGRGYWN0b3J5OiBmdW5jdGlvbiBjaGlsZEZhY3RvcnkoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn07XG4vKipcbiAqIFRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIGNvbXBvbmVudCBtYW5hZ2VzIGEgc2V0IG9mIHRyYW5zaXRpb24gY29tcG9uZW50c1xuICogKGA8VHJhbnNpdGlvbj5gIGFuZCBgPENTU1RyYW5zaXRpb24+YCkgaW4gYSBsaXN0LiBMaWtlIHdpdGggdGhlIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudHMsIGA8VHJhbnNpdGlvbkdyb3VwPmAgaXMgYSBzdGF0ZSBtYWNoaW5lIGZvciBtYW5hZ2luZyB0aGUgbW91bnRpbmdcbiAqIGFuZCB1bm1vdW50aW5nIG9mIGNvbXBvbmVudHMgb3ZlciB0aW1lLlxuICpcbiAqIENvbnNpZGVyIHRoZSBleGFtcGxlIGJlbG93LiBBcyBpdGVtcyBhcmUgcmVtb3ZlZCBvciBhZGRlZCB0byB0aGUgVG9kb0xpc3QgdGhlXG4gKiBgaW5gIHByb3AgaXMgdG9nZ2xlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gLlxuICpcbiAqIE5vdGUgdGhhdCBgPFRyYW5zaXRpb25Hcm91cD5gICBkb2VzIG5vdCBkZWZpbmUgYW55IGFuaW1hdGlvbiBiZWhhdmlvciFcbiAqIEV4YWN0bHkgX2hvd18gYSBsaXN0IGl0ZW0gYW5pbWF0ZXMgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWwgdHJhbnNpdGlvblxuICogY29tcG9uZW50LiBUaGlzIG1lYW5zIHlvdSBjYW4gbWl4IGFuZCBtYXRjaCBhbmltYXRpb25zIGFjcm9zcyBkaWZmZXJlbnQgbGlzdFxuICogaXRlbXMuXG4gKi9cblxudmFyIFRyYW5zaXRpb25Hcm91cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uR3JvdXAsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25Hcm91cChwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuXG4gICAgdmFyIGhhbmRsZUV4aXRlZCA9IF90aGlzLmhhbmRsZUV4aXRlZC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTsgLy8gSW5pdGlhbCBjaGlsZHJlbiBzaG91bGQgYWxsIGJlIGVudGVyaW5nLCBkZXBlbmRlbnQgb24gYXBwZWFyXG5cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IHRydWVcbiAgICAgIH0sXG4gICAgICBoYW5kbGVFeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICAgIGZpcnN0UmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gIH07XG5cbiAgVHJhbnNpdGlvbkdyb3VwLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIF9yZWYpIHtcbiAgICB2YXIgcHJldkNoaWxkTWFwcGluZyA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgIGhhbmRsZUV4aXRlZCA9IF9yZWYuaGFuZGxlRXhpdGVkLFxuICAgICAgICBmaXJzdFJlbmRlciA9IF9yZWYuZmlyc3RSZW5kZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuOiBmaXJzdFJlbmRlciA/IGdldEluaXRpYWxDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBoYW5kbGVFeGl0ZWQpIDogZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIGhhbmRsZUV4aXRlZCksXG4gICAgICBmaXJzdFJlbmRlcjogZmFsc2VcbiAgICB9O1xuICB9IC8vIG5vZGUgaXMgYHVuZGVmaW5lZGAgd2hlbiB1c2VyIHByb3ZpZGVkIGBub2RlUmVmYCBwcm9wXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gaGFuZGxlRXhpdGVkKGNoaWxkLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkLmtleSBpbiBjdXJyZW50Q2hpbGRNYXBwaW5nKSByZXR1cm47XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uRXhpdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IF9leHRlbmRzKHt9LCBzdGF0ZS5jaGlsZHJlbik7XG5cbiAgICAgICAgZGVsZXRlIGNoaWxkcmVuW2NoaWxkLmtleV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBDb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkRmFjdG9yeSA9IF90aGlzJHByb3BzLmNoaWxkRmFjdG9yeSxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY29tcG9uZW50XCIsIFwiY2hpbGRGYWN0b3J5XCJdKTtcblxuICAgIHZhciBjb250ZXh0VmFsdWUgPSB0aGlzLnN0YXRlLmNvbnRleHRWYWx1ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2YWx1ZXModGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKGNoaWxkRmFjdG9yeSk7XG4gICAgZGVsZXRlIHByb3BzLmFwcGVhcjtcbiAgICBkZWxldGUgcHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLmV4aXQ7XG5cbiAgICBpZiAoQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBgPFRyYW5zaXRpb25Hcm91cD5gIHJlbmRlcnMgYSBgPGRpdj5gIGJ5IGRlZmF1bHQuIFlvdSBjYW4gY2hhbmdlIHRoaXNcbiAgICogYmVoYXZpb3IgYnkgcHJvdmlkaW5nIGEgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogSWYgeW91IHVzZSBSZWFjdCB2MTYrIGFuZCB3b3VsZCBsaWtlIHRvIGF2b2lkIGEgd3JhcHBpbmcgYDxkaXY+YCBlbGVtZW50XG4gICAqIHlvdSBjYW4gcGFzcyBpbiBgY29tcG9uZW50PXtudWxsfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB3cmFwcGluZyBkaXZcbiAgICogYm9ya3MgeW91ciBjc3Mgc3R5bGVzLlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBgPFRyYW5zaXRpb24+YCBjb21wb25lbnRzLCB0aGF0IGFyZSB0b2dnbGVkIGBpbmAgYW5kIG91dCBhcyB0aGV5XG4gICAqIGxlYXZlLiB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YCB3aWxsIGluamVjdCBzcGVjaWZpYyB0cmFuc2l0aW9uIHByb3BzLCBzb1xuICAgKiByZW1lbWJlciB0byBzcHJlYWQgdGhlbSB0aHJvdWdoIGlmIHlvdSBhcmUgd3JhcHBpbmcgdGhlIGA8VHJhbnNpdGlvbj5gIGFzXG4gICAqIHdpdGggb3VyIGA8RmFkZT5gIGV4YW1wbGUuXG4gICAqXG4gICAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGlzIG1lYW50IGZvciBtdWx0aXBsZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gXG4gICAqIGNoaWxkcmVuLCBzb21ldGltZXMgeW91IG1heSB3YW50IHRvIGhhdmUgYSBzaW5nbGUgdHJhbnNpdGlvbiBjaGlsZCB3aXRoXG4gICAqIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmFuc2l0aW9uZWQgb3V0IGFuZCBpbiB3aGVuIHlvdSBjaGFuZ2UgaXRcbiAgICogKGUuZy4gcm91dGVzLCBpbWFnZXMgZXRjLikgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2hhbmdlIHRoZSBga2V5YCBwcm9wIG9mXG4gICAqIHRoZSB0cmFuc2l0aW9uIGNoaWxkIGFzIHlvdSBjaGFuZ2UgaXRzIGNvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZVxuICAgKiBgVHJhbnNpdGlvbkdyb3VwYCB0byB0cmFuc2l0aW9uIHRoZSBjaGlsZCBvdXQgYW5kIGJhY2sgaW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYXBwZWFyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50ZXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGV4aXQgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFlvdSBtYXkgbmVlZCB0byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgZXhpdGluZy5cbiAgICogVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSBieSB1c2luZyBgY2xvbmVFbGVtZW50YCBob3dldmVyIGluIHRoZSBjYXNlIG9mIGFuIGV4aXRpbmdcbiAgICogY2hpbGQgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCBub3QgYWNjZXNzaWJsZSB0byB0aGUgY29uc3VtZXIuXG4gICAqXG4gICAqIElmIHlvdSBkbyBuZWVkIHRvIHVwZGF0ZSBhIGNoaWxkIGFzIGl0IGxlYXZlcyB5b3UgY2FuIHByb3ZpZGUgYSBgY2hpbGRGYWN0b3J5YFxuICAgKiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIGxlYXZpbmcuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKGNoaWxkOiBSZWFjdEVsZW1lbnQpIC0+IFJlYWN0RWxlbWVudFxuICAgKi9cbiAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9O1xuVHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25Hcm91cDsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59IiwgImltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuXG4gKlxuICogQHBhcmFtIHsqfSBjaGlsZHJlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmBcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwcGluZyBvZiBrZXkgdG8gY2hpbGRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRNYXBwaW5nKGNoaWxkcmVuLCBtYXBGbikge1xuICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gbWFwcGVyKGNoaWxkKSB7XG4gICAgcmV0dXJuIG1hcEZuICYmIGlzVmFsaWRFbGVtZW50KGNoaWxkKSA/IG1hcEZuKGNoaWxkKSA6IGNoaWxkO1xuICB9O1xuXG4gIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoY2hpbGRyZW4pIENoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAvLyBydW4gdGhlIG1hcCBmdW5jdGlvbiBoZXJlIGluc3RlYWQgc28gdGhhdCB0aGUga2V5IGlzIHRoZSBjb21wdXRlZCBvbmVcbiAgICByZXN1bHRbY2hpbGQua2V5XSA9IG1hcHBlcihjaGlsZCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBXaGVuIHlvdSdyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgY2hpbGRyZW4gc29tZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0aGVcbiAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseVxuICogYW5pbWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMgc2V0IG9mIGtleXNcbiAqIGFuZCBhIG5ldyBzZXQgb2Yga2V5cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBpdHMgYmVzdCBndWVzcyBvZiB0aGUgY29ycmVjdFxuICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW5cbiAqIFJlYWN0TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRvZXMgbm90XG4gKiBkaXJlY3RseSBoYXZlIHRoaXMgY29uY2VwdCBvZiB0aGUgdW5pb24gb2YgcHJldkNoaWxkcmVuIGFuZCBuZXh0Q2hpbGRyZW5cbiAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2IHByZXYgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzXG4gKiBpbiBgbmV4dGAgaW4gYSByZWFzb25hYmxlIG9yZGVyLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoaWxkTWFwcGluZ3MocHJldiwgbmV4dCkge1xuICBwcmV2ID0gcHJldiB8fCB7fTtcbiAgbmV4dCA9IG5leHQgfHwge307XG5cbiAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBuZXh0ID8gbmV4dFtrZXldIDogcHJldltrZXldO1xuICB9IC8vIEZvciBlYWNoIGtleSBvZiBgbmV4dGAsIHRoZSBsaXN0IG9mIGtleXMgdG8gaW5zZXJ0IGJlZm9yZSB0aGF0IGtleSBpblxuICAvLyB0aGUgY29tYmluZWQgbGlzdFxuXG5cbiAgdmFyIG5leHRLZXlzUGVuZGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBwZW5kaW5nS2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikge1xuICAgIGlmIChwcmV2S2V5IGluIG5leHQpIHtcbiAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dEtleXNQZW5kaW5nW3ByZXZLZXldID0gcGVuZGluZ0tleXM7XG4gICAgICAgIHBlbmRpbmdLZXlzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGk7XG4gIHZhciBjaGlsZE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHtcbiAgICBpZiAobmV4dEtleXNQZW5kaW5nW25leHRLZXldKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5kaW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTtcbiAgICAgICAgY2hpbGRNYXBwaW5nW25leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nTmV4dEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGRNYXBwaW5nW25leHRLZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7XG4gIH0gLy8gRmluYWxseSwgYWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3JlIGFueSBrZXkgaW4gYG5leHRgXG5cblxuICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjaGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ0tleXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkTWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcChjaGlsZCwgcHJvcCwgcHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzW3Byb3BdICE9IG51bGwgPyBwcm9wc1twcm9wXSA6IGNoaWxkLnByb3BzW3Byb3BdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhwcm9wcywgb25FeGl0ZWQpIHtcbiAgcmV0dXJuIGdldENoaWxkTWFwcGluZyhwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgaW46IHRydWUsXG4gICAgICBhcHBlYXI6IGdldFByb3AoY2hpbGQsICdhcHBlYXInLCBwcm9wcyksXG4gICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgcHJvcHMpLFxuICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBwcm9wcylcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIG9uRXhpdGVkKSB7XG4gIHZhciBuZXh0Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcy5jaGlsZHJlbik7XG4gIHZhciBjaGlsZHJlbiA9IG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2Q2hpbGRNYXBwaW5nLCBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2tleV07XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHJldHVybjtcbiAgICB2YXIgaGFzUHJldiA9IChrZXkgaW4gcHJldkNoaWxkTWFwcGluZyk7XG4gICAgdmFyIGhhc05leHQgPSAoa2V5IGluIG5leHRDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn0iLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWN0aW9uXCIsIFwiY2VudGVyUmlwcGxlXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkaXNhYmxlZFwiLCBcImRpc2FibGVSaXBwbGVcIiwgXCJkaXNhYmxlVG91Y2hSaXBwbGVcIiwgXCJmb2N1c1JpcHBsZVwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcIkxpbmtDb21wb25lbnRcIiwgXCJvbkJsdXJcIiwgXCJvbkNsaWNrXCIsIFwib25Db250ZXh0TWVudVwiLCBcIm9uRHJhZ0xlYXZlXCIsIFwib25Gb2N1c1wiLCBcIm9uRm9jdXNWaXNpYmxlXCIsIFwib25LZXlEb3duXCIsIFwib25LZXlVcFwiLCBcIm9uTW91c2VEb3duXCIsIFwib25Nb3VzZUxlYXZlXCIsIFwib25Nb3VzZVVwXCIsIFwib25Ub3VjaEVuZFwiLCBcIm9uVG91Y2hNb3ZlXCIsIFwib25Ub3VjaFN0YXJ0XCIsIFwidGFiSW5kZXhcIiwgXCJUb3VjaFJpcHBsZVByb3BzXCIsIFwidG91Y2hSaXBwbGVSZWZcIiwgXCJ0eXBlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiBmcm9tICdAbXVpL3V0aWxzL2VsZW1lbnRUeXBlQWNjZXB0aW5nUmVmJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJy4uL3V0aWxzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZUlzRm9jdXNWaXNpYmxlIGZyb20gJy4uL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlJztcbmltcG9ydCBUb3VjaFJpcHBsZSBmcm9tICcuL1RvdWNoUmlwcGxlJztcbmltcG9ydCBidXR0b25CYXNlQ2xhc3NlcywgeyBnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9idXR0b25CYXNlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVkLFxuICAgIGZvY3VzVmlzaWJsZSxcbiAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgZm9jdXNWaXNpYmxlICYmICdmb2N1c1Zpc2libGUnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG4gIGlmIChmb2N1c1Zpc2libGUgJiYgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lKSB7XG4gICAgY29tcG9zZWRDbGFzc2VzLnJvb3QgKz0gYCAke2ZvY3VzVmlzaWJsZUNsYXNzTmFtZX1gO1xuICB9XG4gIHJldHVybiBjb21wb3NlZENsYXNzZXM7XG59O1xuZXhwb3J0IGNvbnN0IEJ1dHRvbkJhc2VSb290ID0gc3R5bGVkKCdidXR0b24nLCB7XG4gIG5hbWU6ICdNdWlCdXR0b25CYXNlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgLy8gUmVzZXQgZGVmYXVsdCB2YWx1ZVxuICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICBvdXRsaW5lOiAwLFxuICBib3JkZXI6IDAsXG4gIG1hcmdpbjogMCxcbiAgLy8gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gU2FmYXJpXG4gIGJvcmRlclJhZGl1czogMCxcbiAgcGFkZGluZzogMCxcbiAgLy8gUmVtb3ZlIHRoZSBwYWRkaW5nIGluIEZpcmVmb3hcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgdmVydGljYWxBbGlnbjogJ21pZGRsZScsXG4gIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAvLyBTbyB3ZSB0YWtlIHByZWNlZGVudCBvdmVyIHRoZSBzdHlsZSBvZiBhIG5hdGl2ZSA8YSAvPiBlbGVtZW50LlxuICBjb2xvcjogJ2luaGVyaXQnLFxuICAnJjo6LW1vei1mb2N1cy1pbm5lcic6IHtcbiAgICBib3JkZXJTdHlsZTogJ25vbmUnIC8vIFJlbW92ZSBGaXJlZm94IGRvdHRlZCBvdXRsaW5lLlxuICB9LFxuICBbYCYuJHtidXR0b25CYXNlQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAvLyBEaXNhYmxlIGxpbmsgaW50ZXJhY3Rpb25zXG4gICAgY3Vyc29yOiAnZGVmYXVsdCdcbiAgfSxcbiAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICBjb2xvckFkanVzdDogJ2V4YWN0J1xuICB9XG59KTtcblxuLyoqXG4gKiBgQnV0dG9uQmFzZWAgY29udGFpbnMgYXMgZmV3IHN0eWxlcyBhcyBwb3NzaWJsZS5cbiAqIEl0IGFpbXMgdG8gYmUgYSBzaW1wbGUgYnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgYnV0dG9uLlxuICogSXQgY29udGFpbnMgYSBsb2FkIG9mIHN0eWxlIHJlc2V0IGFuZCBzb21lIGZvY3VzL3JpcHBsZSBsb2dpYy5cbiAqL1xuY29uc3QgQnV0dG9uQmFzZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJ1dHRvbkJhc2UoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUJ1dHRvbkJhc2UnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhY3Rpb24sXG4gICAgICBjZW50ZXJSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2J1dHRvbicsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVJpcHBsZSA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVRvdWNoUmlwcGxlID0gZmFsc2UsXG4gICAgICBmb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgTGlua0NvbXBvbmVudCA9ICdhJyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbkNvbnRleHRNZW51LFxuICAgICAgb25EcmFnTGVhdmUsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25Gb2N1c1Zpc2libGUsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgb25Nb3VzZURvd24sXG4gICAgICBvbk1vdXNlTGVhdmUsXG4gICAgICBvbk1vdXNlVXAsXG4gICAgICBvblRvdWNoRW5kLFxuICAgICAgb25Ub3VjaE1vdmUsXG4gICAgICBvblRvdWNoU3RhcnQsXG4gICAgICB0YWJJbmRleCA9IDAsXG4gICAgICBUb3VjaFJpcHBsZVByb3BzLFxuICAgICAgdG91Y2hSaXBwbGVSZWYsXG4gICAgICB0eXBlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGJ1dHRvblJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmlwcGxlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSaXBwbGVSZWYgPSB1c2VGb3JrUmVmKHJpcHBsZVJlZiwgdG91Y2hSaXBwbGVSZWYpO1xuICBjb25zdCB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgcmVmOiBmb2N1c1Zpc2libGVSZWZcbiAgfSA9IHVzZUlzRm9jdXNWaXNpYmxlKCk7XG4gIGNvbnN0IFtmb2N1c1Zpc2libGUsIHNldEZvY3VzVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c1Zpc2libGUpIHtcbiAgICBzZXRGb2N1c1Zpc2libGUoZmFsc2UpO1xuICB9XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoYWN0aW9uLCAoKSA9PiAoe1xuICAgIGZvY3VzVmlzaWJsZTogKCkgPT4ge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKHRydWUpO1xuICAgICAgYnV0dG9uUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0pLCBbXSk7XG4gIGNvbnN0IFttb3VudGVkU3RhdGUsIHNldE1vdW50ZWRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TW91bnRlZFN0YXRlKHRydWUpO1xuICB9LCBbXSk7XG4gIGNvbnN0IGVuYWJsZVRvdWNoUmlwcGxlID0gbW91bnRlZFN0YXRlICYmICFkaXNhYmxlUmlwcGxlICYmICFkaXNhYmxlZDtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNWaXNpYmxlICYmIGZvY3VzUmlwcGxlICYmICFkaXNhYmxlUmlwcGxlICYmIG1vdW50ZWRTdGF0ZSkge1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZSgpO1xuICAgIH1cbiAgfSwgW2Rpc2FibGVSaXBwbGUsIGZvY3VzUmlwcGxlLCBmb2N1c1Zpc2libGUsIG1vdW50ZWRTdGF0ZV0pO1xuICBmdW5jdGlvbiB1c2VSaXBwbGVIYW5kbGVyKHJpcHBsZUFjdGlvbiwgZXZlbnRDYWxsYmFjaywgc2tpcFJpcHBsZUFjdGlvbiA9IGRpc2FibGVUb3VjaFJpcHBsZSkge1xuICAgIHJldHVybiB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudENhbGxiYWNrKSB7XG4gICAgICAgIGV2ZW50Q2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3QgaWdub3JlID0gc2tpcFJpcHBsZUFjdGlvbjtcbiAgICAgIGlmICghaWdub3JlICYmIHJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50W3JpcHBsZUFjdGlvbl0oZXZlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gdXNlUmlwcGxlSGFuZGxlcignc3RhcnQnLCBvbk1vdXNlRG93bik7XG4gIGNvbnN0IGhhbmRsZUNvbnRleHRNZW51ID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uQ29udGV4dE1lbnUpO1xuICBjb25zdCBoYW5kbGVEcmFnTGVhdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25EcmFnTGVhdmUpO1xuICBjb25zdCBoYW5kbGVNb3VzZVVwID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uTW91c2VVcCk7XG4gIGNvbnN0IGhhbmRsZU1vdXNlTGVhdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgZXZlbnQgPT4ge1xuICAgIGlmIChmb2N1c1Zpc2libGUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChvbk1vdXNlTGVhdmUpIHtcbiAgICAgIG9uTW91c2VMZWF2ZShldmVudCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hTdGFydCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hFbmQgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Ub3VjaEVuZCk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvblRvdWNoTW92ZSk7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgZXZlbnQgPT4ge1xuICAgIGhhbmRsZUJsdXJWaXNpYmxlKGV2ZW50KTtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gICAgfVxuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9LCBmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gRml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzc3NjlcbiAgICBpZiAoIWJ1dHRvblJlZi5jdXJyZW50KSB7XG4gICAgICBidXR0b25SZWYuY3VycmVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgfVxuICAgIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICAgIGlmIChvbkZvY3VzVmlzaWJsZSkge1xuICAgICAgICBvbkZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBpc05vbk5hdGl2ZUJ1dHRvbiA9ICgpID0+IHtcbiAgICBjb25zdCBidXR0b24gPSBidXR0b25SZWYuY3VycmVudDtcbiAgICByZXR1cm4gY29tcG9uZW50ICYmIGNvbXBvbmVudCAhPT0gJ2J1dHRvbicgJiYgIShidXR0b24udGFnTmFtZSA9PT0gJ0EnICYmIGJ1dHRvbi5ocmVmKTtcbiAgfTtcblxuICAvKipcbiAgICogSUUxMSBzaGltIGZvciBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9yZXBlYXRcbiAgICovXG4gIGNvbnN0IGtleWRvd25SZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gQ2hlY2sgaWYga2V5IGlzIGFscmVhZHkgZG93biB0byBhdm9pZCByZXBlYXRzIGJlaW5nIGNvdW50ZWQgYXMgbXVsdGlwbGUgYWN0aXZhdGlvbnNcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgIWtleWRvd25SZWYuY3VycmVudCAmJiBmb2N1c1Zpc2libGUgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGtleWRvd25SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5zdG9wKGV2ZW50LCAoKSA9PiB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0YXJ0KGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfVxuXG4gICAgLy8gS2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSBmb3Igbm9uIGludGVyYWN0aXZlIGVsZW1lbnRzXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAob25DbGljaykge1xuICAgICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIGNhbGxpbmcgcHJldmVudERlZmF1bHQgaW4ga2V5VXAgb24gYSA8YnV0dG9uPiB3aWxsIG5vdCBkaXNwYXRjaCBhIGNsaWNrIGV2ZW50IGlmIFNwYWNlIGlzIHByZXNzZWRcbiAgICAvLyBodHRwczovL2NvZGVzYW5kYm94LmlvL3Avc2FuZGJveC9idXR0b24ta2V5dXAtcHJldmVudGRlZmF1bHQtZG43ZjBcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgZXZlbnQua2V5ID09PSAnICcgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZShldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG9uS2V5VXApIHtcbiAgICAgIG9uS2V5VXAoZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgIGlmIChvbkNsaWNrICYmIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJyAnICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBsZXQgQ29tcG9uZW50UHJvcCA9IGNvbXBvbmVudDtcbiAgaWYgKENvbXBvbmVudFByb3AgPT09ICdidXR0b24nICYmIChvdGhlci5ocmVmIHx8IG90aGVyLnRvKSkge1xuICAgIENvbXBvbmVudFByb3AgPSBMaW5rQ29tcG9uZW50O1xuICB9XG4gIGNvbnN0IGJ1dHRvblByb3BzID0ge307XG4gIGlmIChDb21wb25lbnRQcm9wID09PSAnYnV0dG9uJykge1xuICAgIGJ1dHRvblByb3BzLnR5cGUgPSB0eXBlID09PSB1bmRlZmluZWQgPyAnYnV0dG9uJyA6IHR5cGU7XG4gICAgYnV0dG9uUHJvcHMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIW90aGVyLmhyZWYgJiYgIW90aGVyLnRvKSB7XG4gICAgICBidXR0b25Qcm9wcy5yb2xlID0gJ2J1dHRvbic7XG4gICAgfVxuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgYnV0dG9uUHJvcHNbJ2FyaWEtZGlzYWJsZWQnXSA9IGRpc2FibGVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgZm9jdXNWaXNpYmxlUmVmLCBidXR0b25SZWYpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoZW5hYmxlVG91Y2hSaXBwbGUgJiYgIXJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBgY29tcG9uZW50YCBwcm9wIHByb3ZpZGVkIHRvIEJ1dHRvbkJhc2UgaXMgaW52YWxpZC4nLCAnUGxlYXNlIG1ha2Ugc3VyZSB0aGUgY2hpbGRyZW4gcHJvcCBpcyByZW5kZXJlZCBpbiB0aGlzIGN1c3RvbSBjb21wb25lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtlbmFibGVUb3VjaFJpcHBsZV0pO1xuICB9XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjZW50ZXJSaXBwbGUsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVSaXBwbGUsXG4gICAgZGlzYWJsZVRvdWNoUmlwcGxlLFxuICAgIGZvY3VzUmlwcGxlLFxuICAgIHRhYkluZGV4LFxuICAgIGZvY3VzVmlzaWJsZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEJ1dHRvbkJhc2VSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudFByb3AsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uQ29udGV4dE1lbnU6IGhhbmRsZUNvbnRleHRNZW51LFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICBvbktleVVwOiBoYW5kbGVLZXlVcCxcbiAgICBvbk1vdXNlRG93bjogaGFuZGxlTW91c2VEb3duLFxuICAgIG9uTW91c2VMZWF2ZTogaGFuZGxlTW91c2VMZWF2ZSxcbiAgICBvbk1vdXNlVXA6IGhhbmRsZU1vdXNlVXAsXG4gICAgb25EcmFnTGVhdmU6IGhhbmRsZURyYWdMZWF2ZSxcbiAgICBvblRvdWNoRW5kOiBoYW5kbGVUb3VjaEVuZCxcbiAgICBvblRvdWNoTW92ZTogaGFuZGxlVG91Y2hNb3ZlLFxuICAgIG9uVG91Y2hTdGFydDogaGFuZGxlVG91Y2hTdGFydCxcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IHRhYkluZGV4LFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgYnV0dG9uUHJvcHMsIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgZW5hYmxlVG91Y2hSaXBwbGUgP1xuICAgIC8qI19fUFVSRV9fKi9cbiAgICAvKiBUb3VjaFJpcHBsZSBpcyBvbmx5IG5lZWRlZCBjbGllbnQtc2lkZSwgeDIgYm9vc3Qgb24gdGhlIHNlcnZlci4gKi9cbiAgICBfanN4KFRvdWNoUmlwcGxlLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IGhhbmRsZVJpcHBsZVJlZixcbiAgICAgIGNlbnRlcjogY2VudGVyUmlwcGxlXG4gICAgfSwgVG91Y2hSaXBwbGVQcm9wcykpIDogbnVsbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCdXR0b25CYXNlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIEEgcmVmIGZvciBpbXBlcmF0aXZlIGFjdGlvbnMuXG4gICAqIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGBmb2N1c1Zpc2libGUoKWAgYWN0aW9uLlxuICAgKi9cbiAgYWN0aW9uOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlcyBhcmUgY2VudGVyZWQuXG4gICAqIFRoZXkgd29uJ3Qgc3RhcnQgYXQgdGhlIGN1cnNvciBpbnRlcmFjdGlvbiBwb3NpdGlvbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNlbnRlclJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBcdTI2QTBcdUZFMEYgV2l0aG91dCBhIHJpcHBsZSB0aGVyZSBpcyBubyBzdHlsaW5nIGZvciA6Zm9jdXMtdmlzaWJsZSBieSBkZWZhdWx0LiBCZSBzdXJlXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgZWxlbWVudCBieSBhcHBseWluZyBzZXBhcmF0ZSBzdHlsZXMgd2l0aCB0aGUgYC5NdWktZm9jdXNWaXNpYmxlYCBjbGFzcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdG91Y2ggcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUb3VjaFJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYXNlIGJ1dHRvbiB3aWxsIGhhdmUgYSBrZXlib2FyZCBmb2N1cyByaXBwbGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgY2FuIGhlbHAgaWRlbnRpZnkgd2hpY2ggZWxlbWVudCBoYXMga2V5Ym9hcmQgZm9jdXMuXG4gICAqIFRoZSBjbGFzcyBuYW1lIHdpbGwgYmUgYXBwbGllZCB3aGVuIHRoZSBlbGVtZW50IGdhaW5zIHRoZSBmb2N1cyB0aHJvdWdoIGtleWJvYXJkIGludGVyYWN0aW9uLlxuICAgKiBJdCdzIGEgcG9seWZpbGwgZm9yIHRoZSBbQ1NTIDpmb2N1cy12aXNpYmxlIHNlbGVjdG9yXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvc2VsZWN0b3JzLTQvI3RoZS1mb2N1cy12aXNpYmxlLXBzZXVkbykuXG4gICAqIFRoZSByYXRpb25hbGUgZm9yIHVzaW5nIHRoaXMgZmVhdHVyZSBbaXMgZXhwbGFpbmVkIGhlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUvYmxvYi9IRUFEL2V4cGxhaW5lci5tZCkuXG4gICAqIEEgW3BvbHlmaWxsIGNhbiBiZSB1c2VkXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlKSB0byBhcHBseSBhIGBmb2N1cy12aXNpYmxlYCBjbGFzcyB0byBvdGhlciBjb21wb25lbnRzXG4gICAqIGlmIG5lZWRlZC5cbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGhyZWY6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLmFueSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCB0byByZW5kZXIgYSBsaW5rIHdoZW4gdGhlIGBocmVmYCBwcm9wIGlzIHByb3ZpZGVkLlxuICAgKiBAZGVmYXVsdCAnYSdcbiAgICovXG4gIExpbmtDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ29udGV4dE1lbnU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25EcmFnTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZm9jdXNlZCB3aXRoIGEga2V5Ym9hcmQuXG4gICAqIFdlIHRyaWdnZXIgYSBgb25Gb2N1c2AgY2FsbGJhY2sgdG9vLlxuICAgKi9cbiAgb25Gb2N1c1Zpc2libGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZUxlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoRW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hNb3ZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGBUb3VjaFJpcHBsZWAgZWxlbWVudC5cbiAgICovXG4gIFRvdWNoUmlwcGxlUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBBIHJlZiB0aGF0IHBvaW50cyB0byB0aGUgYFRvdWNoUmlwcGxlYCBlbGVtZW50LlxuICAgKi9cbiAgdG91Y2hSaXBwbGVSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBwdWxzYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc3RhcnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBzdG9wOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSlcbiAgfSldKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2J1dHRvbicsICdyZXNldCcsICdzdWJtaXQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhc2U7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNlbnRlclwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIl07XG5sZXQgXyA9IHQgPT4gdCxcbiAgX3QsXG4gIF90MixcbiAgX3QzLFxuICBfdDQ7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNpdGlvbkdyb3VwIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCB1c2VUaW1lb3V0IGZyb20gJ0BtdWkvdXRpbHMvdXNlVGltZW91dCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IFJpcHBsZSBmcm9tICcuL1JpcHBsZSc7XG5pbXBvcnQgdG91Y2hSaXBwbGVDbGFzc2VzIGZyb20gJy4vdG91Y2hSaXBwbGVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBEVVJBVElPTiA9IDU1MDtcbmV4cG9ydCBjb25zdCBERUxBWV9SSVBQTEUgPSA4MDtcbmNvbnN0IGVudGVyS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QgfHwgKF90ID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG4gICAgb3BhY2l0eTogMC4xO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAwLjM7XG4gIH1cbmApKTtcbmNvbnN0IGV4aXRLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDIgfHwgKF90MiA9IF9gXG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuYCkpO1xuY29uc3QgcHVsc2F0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90MyB8fCAoX3QzID0gX2BcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cblxuICA1MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Mik7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG5gKSk7XG5leHBvcnQgY29uc3QgVG91Y2hSaXBwbGVSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnLFxuICBzbG90OiAnUm9vdCdcbn0pKHtcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB6SW5kZXg6IDAsXG4gIHRvcDogMCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgbGVmdDogMCxcbiAgYm9yZGVyUmFkaXVzOiAnaW5oZXJpdCdcbn0pO1xuXG4vLyBUaGlzIGBzdHlsZWQoKWAgZnVuY3Rpb24gaW52b2tlcyBrZXlmcmFtZXMuIGBzdHlsZWQtY29tcG9uZW50c2Agb25seSBzdXBwb3J0cyBrZXlmcmFtZXNcbi8vIGluIHN0cmluZyB0ZW1wbGF0ZXMuIERvIG5vdCBjb252ZXJ0IHRoZXNlIHN0eWxlcyBpbiBKUyBvYmplY3QgYXMgaXQgd2lsbCBicmVhay5cbmV4cG9ydCBjb25zdCBUb3VjaFJpcHBsZVJpcHBsZSA9IHN0eWxlZChSaXBwbGUsIHtcbiAgbmFtZTogJ011aVRvdWNoUmlwcGxlJyxcbiAgc2xvdDogJ1JpcHBsZSdcbn0pKF90NCB8fCAoX3Q0ID0gX2BcbiAgb3BhY2l0eTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuXG4gICYuJHswfSB7XG4gICAgb3BhY2l0eTogMC4zO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgfVxuXG4gICYuJHswfSB7XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkezB9bXM7XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICB9XG5cbiAgJiAuJHswfSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIC8qIEBub2ZsaXAgKi9cbiAgICBsZWZ0OiAwcHg7XG4gICAgdG9wOiAwO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMjUwMG1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAyMDBtcztcbiAgfVxuYCksIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVWaXNpYmxlLCBlbnRlcktleWZyYW1lLCBEVVJBVElPTiwgKHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlSW5PdXQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVQdWxzYXRlLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlciwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRMZWF2aW5nLCBleGl0S2V5ZnJhbWUsIERVUkFUSU9OLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkUHVsc2F0ZSwgcHVsc2F0ZUtleWZyYW1lLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCk7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqXG4gKiBUT0RPIHY1OiBNYWtlIHByaXZhdGVcbiAqL1xuY29uc3QgVG91Y2hSaXBwbGUgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBUb3VjaFJpcHBsZShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjZW50ZXI6IGNlbnRlclByb3AgPSBmYWxzZSxcbiAgICAgIGNsYXNzZXMgPSB7fSxcbiAgICAgIGNsYXNzTmFtZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBbcmlwcGxlcywgc2V0UmlwcGxlc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gIGNvbnN0IG5leHRLZXkgPSBSZWFjdC51c2VSZWYoMCk7XG4gIGNvbnN0IHJpcHBsZUNhbGxiYWNrID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyaXBwbGVDYWxsYmFjay5jdXJyZW50KSB7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50KCk7XG4gICAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtyaXBwbGVzXSk7XG5cbiAgLy8gVXNlZCB0byBmaWx0ZXIgb3V0IG1vdXNlIGVtdWxhdGVkIGV2ZW50cyBvbiBtb2JpbGUuXG4gIGNvbnN0IGlnbm9yaW5nTW91c2VEb3duID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgLy8gV2UgdXNlIGEgdGltZXIgaW4gb3JkZXIgdG8gb25seSBzaG93IHRoZSByaXBwbGVzIGZvciB0b3VjaCBcImNsaWNrXCIgbGlrZSBldmVudHMuXG4gIC8vIFdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB0aGUgcmlwcGxlIGZvciB0b3VjaCBzY3JvbGwgZXZlbnRzLlxuICBjb25zdCBzdGFydFRpbWVyID0gdXNlVGltZW91dCgpO1xuXG4gIC8vIFRoaXMgaXMgdGhlIGhvb2sgY2FsbGVkIG9uY2UgdGhlIHByZXZpb3VzIHRpbWVvdXQgaXMgcmVhZHkuXG4gIGNvbnN0IHN0YXJ0VGltZXJDb21taXQgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNvbnRhaW5lciA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3Qgc3RhcnRDb21taXQgPSBSZWFjdC51c2VDYWxsYmFjayhwYXJhbXMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHB1bHNhdGUsXG4gICAgICByaXBwbGVYLFxuICAgICAgcmlwcGxlWSxcbiAgICAgIHJpcHBsZVNpemUsXG4gICAgICBjYlxuICAgIH0gPSBwYXJhbXM7XG4gICAgc2V0UmlwcGxlcyhvbGRSaXBwbGVzID0+IFsuLi5vbGRSaXBwbGVzLCAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJpcHBsZSwge1xuICAgICAgY2xhc3Nlczoge1xuICAgICAgICByaXBwbGU6IGNsc3goY2xhc3Nlcy5yaXBwbGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGUpLFxuICAgICAgICByaXBwbGVWaXNpYmxlOiBjbHN4KGNsYXNzZXMucmlwcGxlVmlzaWJsZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVZpc2libGUpLFxuICAgICAgICByaXBwbGVQdWxzYXRlOiBjbHN4KGNsYXNzZXMucmlwcGxlUHVsc2F0ZSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVB1bHNhdGUpLFxuICAgICAgICBjaGlsZDogY2xzeChjbGFzc2VzLmNoaWxkLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGQpLFxuICAgICAgICBjaGlsZExlYXZpbmc6IGNsc3goY2xhc3Nlcy5jaGlsZExlYXZpbmcsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZExlYXZpbmcpLFxuICAgICAgICBjaGlsZFB1bHNhdGU6IGNsc3goY2xhc3Nlcy5jaGlsZFB1bHNhdGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZFB1bHNhdGUpXG4gICAgICB9LFxuICAgICAgdGltZW91dDogRFVSQVRJT04sXG4gICAgICBwdWxzYXRlOiBwdWxzYXRlLFxuICAgICAgcmlwcGxlWDogcmlwcGxlWCxcbiAgICAgIHJpcHBsZVk6IHJpcHBsZVksXG4gICAgICByaXBwbGVTaXplOiByaXBwbGVTaXplXG4gICAgfSwgbmV4dEtleS5jdXJyZW50KV0pO1xuICAgIG5leHRLZXkuY3VycmVudCArPSAxO1xuICAgIHJpcHBsZUNhbGxiYWNrLmN1cnJlbnQgPSBjYjtcbiAgfSwgW2NsYXNzZXNdKTtcbiAgY29uc3Qgc3RhcnQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQgPSB7fSwgb3B0aW9ucyA9IHt9LCBjYiA9ICgpID0+IHt9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcHVsc2F0ZSA9IGZhbHNlLFxuICAgICAgY2VudGVyID0gY2VudGVyUHJvcCB8fCBvcHRpb25zLnB1bHNhdGUsXG4gICAgICBmYWtlRWxlbWVudCA9IGZhbHNlIC8vIEZvciB0ZXN0IHB1cnBvc2VzXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICdtb3VzZWRvd24nICYmIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQpIHtcbiAgICAgIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgaWdub3JpbmdNb3VzZURvd24uY3VycmVudCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnQgPSBmYWtlRWxlbWVudCA/IG51bGwgOiBjb250YWluZXIuY3VycmVudDtcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudCA/IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDBcbiAgICB9O1xuXG4gICAgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSByaXBwbGVcbiAgICBsZXQgcmlwcGxlWDtcbiAgICBsZXQgcmlwcGxlWTtcbiAgICBsZXQgcmlwcGxlU2l6ZTtcbiAgICBpZiAoY2VudGVyIHx8IGV2ZW50ID09PSB1bmRlZmluZWQgfHwgZXZlbnQuY2xpZW50WCA9PT0gMCAmJiBldmVudC5jbGllbnRZID09PSAwIHx8ICFldmVudC5jbGllbnRYICYmICFldmVudC50b3VjaGVzKSB7XG4gICAgICByaXBwbGVYID0gTWF0aC5yb3VuZChyZWN0LndpZHRoIC8gMik7XG4gICAgICByaXBwbGVZID0gTWF0aC5yb3VuZChyZWN0LmhlaWdodCAvIDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNsaWVudFgsXG4gICAgICAgIGNsaWVudFlcbiAgICAgIH0gPSBldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMCA/IGV2ZW50LnRvdWNoZXNbMF0gOiBldmVudDtcbiAgICAgIHJpcHBsZVggPSBNYXRoLnJvdW5kKGNsaWVudFggLSByZWN0LmxlZnQpO1xuICAgICAgcmlwcGxlWSA9IE1hdGgucm91bmQoY2xpZW50WSAtIHJlY3QudG9wKTtcbiAgICB9XG4gICAgaWYgKGNlbnRlcikge1xuICAgICAgcmlwcGxlU2l6ZSA9IE1hdGguc3FydCgoMiAqIHJlY3Qud2lkdGggKiogMiArIHJlY3QuaGVpZ2h0ICoqIDIpIC8gMyk7XG5cbiAgICAgIC8vIEZvciBzb21lIHJlYXNvbiB0aGUgYW5pbWF0aW9uIGlzIGJyb2tlbiBvbiBNb2JpbGUgQ2hyb21lIGlmIHRoZSBzaXplIGlzIGV2ZW4uXG4gICAgICBpZiAocmlwcGxlU2l6ZSAlIDIgPT09IDApIHtcbiAgICAgICAgcmlwcGxlU2l6ZSArPSAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaXplWCA9IE1hdGgubWF4KE1hdGguYWJzKChlbGVtZW50ID8gZWxlbWVudC5jbGllbnRXaWR0aCA6IDApIC0gcmlwcGxlWCksIHJpcHBsZVgpICogMiArIDI7XG4gICAgICBjb25zdCBzaXplWSA9IE1hdGgubWF4KE1hdGguYWJzKChlbGVtZW50ID8gZWxlbWVudC5jbGllbnRIZWlnaHQgOiAwKSAtIHJpcHBsZVkpLCByaXBwbGVZKSAqIDIgKyAyO1xuICAgICAgcmlwcGxlU2l6ZSA9IE1hdGguc3FydChzaXplWCAqKiAyICsgc2l6ZVkgKiogMik7XG4gICAgfVxuXG4gICAgLy8gVG91Y2hlIGRldmljZXNcbiAgICBpZiAoZXZlbnQgIT0gbnVsbCAmJiBldmVudC50b3VjaGVzKSB7XG4gICAgICAvLyBjaGVjayB0aGF0IHRoaXMgaXNuJ3QgYW5vdGhlciB0b3VjaHN0YXJ0IGR1ZSB0byBtdWx0aXRvdWNoXG4gICAgICAvLyBvdGhlcndpc2Ugd2Ugd2lsbCBvbmx5IGNsZWFyIGEgc2luZ2xlIHRpbWVyIHdoZW4gdW5tb3VudGluZyB3aGlsZSB0d29cbiAgICAgIC8vIGFyZSBydW5uaW5nXG4gICAgICBpZiAoc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIC8vIFByZXBhcmUgdGhlIHJpcHBsZSBlZmZlY3QuXG4gICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9ICgpID0+IHtcbiAgICAgICAgICBzdGFydENvbW1pdCh7XG4gICAgICAgICAgICBwdWxzYXRlLFxuICAgICAgICAgICAgcmlwcGxlWCxcbiAgICAgICAgICAgIHJpcHBsZVksXG4gICAgICAgICAgICByaXBwbGVTaXplLFxuICAgICAgICAgICAgY2JcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gRGVsYXkgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgcmlwcGxlIGVmZmVjdC5cbiAgICAgICAgLy8gV2UgaGF2ZSB0byBtYWtlIGEgdHJhZGVvZmYgd2l0aCB0aGlzIGRlbGF5IHZhbHVlLlxuICAgICAgICBzdGFydFRpbWVyLnN0YXJ0KERFTEFZX1JJUFBMRSwgKCkgPT4ge1xuICAgICAgICAgIGlmIChzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCgpO1xuICAgICAgICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydENvbW1pdCh7XG4gICAgICAgIHB1bHNhdGUsXG4gICAgICAgIHJpcHBsZVgsXG4gICAgICAgIHJpcHBsZVksXG4gICAgICAgIHJpcHBsZVNpemUsXG4gICAgICAgIGNiXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtjZW50ZXJQcm9wLCBzdGFydENvbW1pdCwgc3RhcnRUaW1lcl0pO1xuICBjb25zdCBwdWxzYXRlID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0YXJ0KHt9LCB7XG4gICAgICBwdWxzYXRlOiB0cnVlXG4gICAgfSk7XG4gIH0sIFtzdGFydF0pO1xuICBjb25zdCBzdG9wID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50LCBjYikgPT4ge1xuICAgIHN0YXJ0VGltZXIuY2xlYXIoKTtcblxuICAgIC8vIFRoZSB0b3VjaCBpbnRlcmFjdGlvbiBvY2N1cnMgdG9vIHF1aWNrbHkuXG4gICAgLy8gV2Ugc3RpbGwgd2FudCB0byBzaG93IHJpcHBsZSBlZmZlY3QuXG4gICAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09ICd0b3VjaGVuZCcgJiYgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KSB7XG4gICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQoKTtcbiAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgICBzdGFydFRpbWVyLnN0YXJ0KDAsICgpID0+IHtcbiAgICAgICAgc3RvcChldmVudCwgY2IpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgc2V0UmlwcGxlcyhvbGRSaXBwbGVzID0+IHtcbiAgICAgIGlmIChvbGRSaXBwbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIG9sZFJpcHBsZXMuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xkUmlwcGxlcztcbiAgICB9KTtcbiAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gY2I7XG4gIH0sIFtzdGFydFRpbWVyXSk7XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIHB1bHNhdGUsXG4gICAgc3RhcnQsXG4gICAgc3RvcFxuICB9KSwgW3B1bHNhdGUsIHN0YXJ0LCBzdG9wXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUb3VjaFJpcHBsZVJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3godG91Y2hSaXBwbGVDbGFzc2VzLnJvb3QsIGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IGNvbnRhaW5lclxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uR3JvdXAsIHtcbiAgICAgIGNvbXBvbmVudDogbnVsbCxcbiAgICAgIGV4aXQ6IHRydWUsXG4gICAgICBjaGlsZHJlbjogcmlwcGxlc1xuICAgIH0pXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVG91Y2hSaXBwbGUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIHN0YXJ0cyBhdCB0aGUgY2VudGVyIG9mIHRoZSBjb21wb25lbnRcbiAgICogcmF0aGVyIHRoYW4gYXQgdGhlIHBvaW50IG9mIGludGVyYWN0aW9uLlxuICAgKi9cbiAgY2VudGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmdcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBUb3VjaFJpcHBsZTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIFJpcHBsZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGNsYXNzZXMsXG4gICAgcHVsc2F0ZSA9IGZhbHNlLFxuICAgIHJpcHBsZVgsXG4gICAgcmlwcGxlWSxcbiAgICByaXBwbGVTaXplLFxuICAgIGluOiBpblByb3AsXG4gICAgb25FeGl0ZWQsXG4gICAgdGltZW91dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtsZWF2aW5nLCBzZXRMZWF2aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmlwcGxlQ2xhc3NOYW1lID0gY2xzeChjbGFzc05hbWUsIGNsYXNzZXMucmlwcGxlLCBjbGFzc2VzLnJpcHBsZVZpc2libGUsIHB1bHNhdGUgJiYgY2xhc3Nlcy5yaXBwbGVQdWxzYXRlKTtcbiAgY29uc3QgcmlwcGxlU3R5bGVzID0ge1xuICAgIHdpZHRoOiByaXBwbGVTaXplLFxuICAgIGhlaWdodDogcmlwcGxlU2l6ZSxcbiAgICB0b3A6IC0ocmlwcGxlU2l6ZSAvIDIpICsgcmlwcGxlWSxcbiAgICBsZWZ0OiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVhcbiAgfTtcbiAgY29uc3QgY2hpbGRDbGFzc05hbWUgPSBjbHN4KGNsYXNzZXMuY2hpbGQsIGxlYXZpbmcgJiYgY2xhc3Nlcy5jaGlsZExlYXZpbmcsIHB1bHNhdGUgJiYgY2xhc3Nlcy5jaGlsZFB1bHNhdGUpO1xuICBpZiAoIWluUHJvcCAmJiAhbGVhdmluZykge1xuICAgIHNldExlYXZpbmcodHJ1ZSk7XG4gIH1cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWluUHJvcCAmJiBvbkV4aXRlZCAhPSBudWxsKSB7XG4gICAgICAvLyByZWFjdC10cmFuc2l0aW9uLWdyb3VwI29uRXhpdGVkXG4gICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KG9uRXhpdGVkLCB0aW1lb3V0KTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW29uRXhpdGVkLCBpblByb3AsIHRpbWVvdXRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiByaXBwbGVDbGFzc05hbWUsXG4gICAgc3R5bGU6IHJpcHBsZVN0eWxlcyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2hpbGRDbGFzc05hbWVcbiAgICB9KVxuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmUgLSBpbmplY3RlZCBmcm9tIFRyYW5zaXRpb25Hcm91cFxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZSAtIGluamVjdGVkIGZyb20gVHJhbnNpdGlvbkdyb3VwXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgcHVsc2F0ZXMsIHR5cGljYWxseSBpbmRpY2F0aW5nIHRoZSBrZXlib2FyZCBmb2N1cyBzdGF0ZSBvZiBhbiBlbGVtZW50LlxuICAgKi9cbiAgcHVsc2F0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEaWFtZXRlciBvZiB0aGUgcmlwcGxlLlxuICAgKi9cbiAgcmlwcGxlU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVYOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVZOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogZXhpdCBkZWxheVxuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUmlwcGxlOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvdWNoUmlwcGxlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUb3VjaFJpcHBsZScsIHNsb3QpO1xufVxuY29uc3QgdG91Y2hSaXBwbGVDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpVG91Y2hSaXBwbGUnLCBbJ3Jvb3QnLCAncmlwcGxlJywgJ3JpcHBsZVZpc2libGUnLCAncmlwcGxlUHVsc2F0ZScsICdjaGlsZCcsICdjaGlsZExlYXZpbmcnLCAnY2hpbGRQdWxzYXRlJ10pO1xuZXhwb3J0IGRlZmF1bHQgdG91Y2hSaXBwbGVDbGFzc2VzOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUJ1dHRvbkJhc2UnLCBzbG90KTtcbn1cbmNvbnN0IGJ1dHRvbkJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQnV0dG9uQmFzZScsIFsncm9vdCcsICdkaXNhYmxlZCcsICdmb2N1c1Zpc2libGUnXSk7XG5leHBvcnQgZGVmYXVsdCBidXR0b25CYXNlQ2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYWxpZ25cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJndXR0ZXJCb3R0b21cIiwgXCJub1dyYXBcIiwgXCJwYXJhZ3JhcGhcIiwgXCJ2YXJpYW50XCIsIFwidmFyaWFudE1hcHBpbmdcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBleHRlbmRTeFByb3AgfSBmcm9tICdAbXVpL3N5c3RlbS9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHsgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vdHlwb2dyYXBoeUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbGlnbixcbiAgICBndXR0ZXJCb3R0b20sXG4gICAgbm9XcmFwLFxuICAgIHBhcmFncmFwaCxcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBgYWxpZ24ke2NhcGl0YWxpemUoYWxpZ24pfWAsIGd1dHRlckJvdHRvbSAmJiAnZ3V0dGVyQm90dG9tJywgbm9XcmFwICYmICdub1dyYXAnLCBwYXJhZ3JhcGggJiYgJ3BhcmFncmFwaCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0VHlwb2dyYXBoeVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IFR5cG9ncmFwaHlSb290ID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpVHlwb2dyYXBoeScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnZhcmlhbnQgJiYgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuYWxpZ24gIT09ICdpbmhlcml0JyAmJiBzdHlsZXNbYGFsaWduJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuYWxpZ24pfWBdLCBvd25lclN0YXRlLm5vV3JhcCAmJiBzdHlsZXMubm9XcmFwLCBvd25lclN0YXRlLmd1dHRlckJvdHRvbSAmJiBzdHlsZXMuZ3V0dGVyQm90dG9tLCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiBzdHlsZXMucGFyYWdyYXBoXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgbWFyZ2luOiAwXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmhlcml0JyAmJiB7XG4gIC8vIFNvbWUgZWxlbWVudHMsIGxpa2UgPGJ1dHRvbj4gb24gQ2hyb21lIGhhdmUgZGVmYXVsdCBmb250IHRoYXQgZG9lc24ndCBpbmhlcml0LCByZXNldCB0aGlzLlxuICBmb250OiAnaW5oZXJpdCdcbn0sIG93bmVyU3RhdGUudmFyaWFudCAhPT0gJ2luaGVyaXQnICYmIHRoZW1lLnR5cG9ncmFwaHlbb3duZXJTdGF0ZS52YXJpYW50XSwgb3duZXJTdGF0ZS5hbGlnbiAhPT0gJ2luaGVyaXQnICYmIHtcbiAgdGV4dEFsaWduOiBvd25lclN0YXRlLmFsaWduXG59LCBvd25lclN0YXRlLm5vV3JhcCAmJiB7XG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICB3aGl0ZVNwYWNlOiAnbm93cmFwJ1xufSwgb3duZXJTdGF0ZS5ndXR0ZXJCb3R0b20gJiYge1xuICBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nXG59LCBvd25lclN0YXRlLnBhcmFncmFwaCAmJiB7XG4gIG1hcmdpbkJvdHRvbTogMTZcbn0pKTtcbmNvbnN0IGRlZmF1bHRWYXJpYW50TWFwcGluZyA9IHtcbiAgaDE6ICdoMScsXG4gIGgyOiAnaDInLFxuICBoMzogJ2gzJyxcbiAgaDQ6ICdoNCcsXG4gIGg1OiAnaDUnLFxuICBoNjogJ2g2JyxcbiAgc3VidGl0bGUxOiAnaDYnLFxuICBzdWJ0aXRsZTI6ICdoNicsXG4gIGJvZHkxOiAncCcsXG4gIGJvZHkyOiAncCcsXG4gIGluaGVyaXQ6ICdwJ1xufTtcblxuLy8gVE9ETyB2NjogZGVwcmVjYXRlIHRoZXNlIGNvbG9yIHZhbHVlcyBpbiB2NS54IGFuZCByZW1vdmUgdGhlIHRyYW5zZm9ybWF0aW9uIGluIHY2XG5jb25zdCBjb2xvclRyYW5zZm9ybWF0aW9ucyA9IHtcbiAgcHJpbWFyeTogJ3ByaW1hcnkubWFpbicsXG4gIHRleHRQcmltYXJ5OiAndGV4dC5wcmltYXJ5JyxcbiAgc2Vjb25kYXJ5OiAnc2Vjb25kYXJ5Lm1haW4nLFxuICB0ZXh0U2Vjb25kYXJ5OiAndGV4dC5zZWNvbmRhcnknLFxuICBlcnJvcjogJ2Vycm9yLm1haW4nXG59O1xuY29uc3QgdHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyA9IGNvbG9yID0+IHtcbiAgcmV0dXJuIGNvbG9yVHJhbnNmb3JtYXRpb25zW2NvbG9yXSB8fCBjb2xvcjtcbn07XG5jb25zdCBUeXBvZ3JhcGh5ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gVHlwb2dyYXBoeShpblByb3BzLCByZWYpIHtcbiAgY29uc3QgdGhlbWVQcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlUeXBvZ3JhcGh5J1xuICB9KTtcbiAgY29uc3QgY29sb3IgPSB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzKHRoZW1lUHJvcHMuY29sb3IpO1xuICBjb25zdCBwcm9wcyA9IGV4dGVuZFN4UHJvcChfZXh0ZW5kcyh7fSwgdGhlbWVQcm9wcywge1xuICAgIGNvbG9yXG4gIH0pKTtcbiAgY29uc3Qge1xuICAgICAgYWxpZ24gPSAnaW5oZXJpdCcsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb21wb25lbnQsXG4gICAgICBndXR0ZXJCb3R0b20gPSBmYWxzZSxcbiAgICAgIG5vV3JhcCA9IGZhbHNlLFxuICAgICAgcGFyYWdyYXBoID0gZmFsc2UsXG4gICAgICB2YXJpYW50ID0gJ2JvZHkxJyxcbiAgICAgIHZhcmlhbnRNYXBwaW5nID0gZGVmYXVsdFZhcmlhbnRNYXBwaW5nXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBhbGlnbixcbiAgICBjb2xvcixcbiAgICBjbGFzc05hbWUsXG4gICAgY29tcG9uZW50LFxuICAgIGd1dHRlckJvdHRvbSxcbiAgICBub1dyYXAsXG4gICAgcGFyYWdyYXBoLFxuICAgIHZhcmlhbnQsXG4gICAgdmFyaWFudE1hcHBpbmdcbiAgfSk7XG4gIGNvbnN0IENvbXBvbmVudCA9IGNvbXBvbmVudCB8fCAocGFyYWdyYXBoID8gJ3AnIDogdmFyaWFudE1hcHBpbmdbdmFyaWFudF0gfHwgZGVmYXVsdFZhcmlhbnRNYXBwaW5nW3ZhcmlhbnRdKSB8fCAnc3Bhbic7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFR5cG9ncmFwaHlSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudCxcbiAgICByZWY6IHJlZixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gVHlwb2dyYXBoeS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBTZXQgdGhlIHRleHQtYWxpZ24gb24gdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ2luaGVyaXQnXG4gICAqL1xuICBhbGlnbjogUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2luaGVyaXQnLCAnanVzdGlmeScsICdsZWZ0JywgJ3JpZ2h0J10pLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHRleHQgd2lsbCBoYXZlIGEgYm90dG9tIG1hcmdpbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGd1dHRlckJvdHRvbTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0ZXh0IHdpbGwgbm90IHdyYXAsIGJ1dCBpbnN0ZWFkIHdpbGwgdHJ1bmNhdGUgd2l0aCBhIHRleHQgb3ZlcmZsb3cgZWxsaXBzaXMuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0ZXh0IG92ZXJmbG93IGNhbiBvbmx5IGhhcHBlbiB3aXRoIGJsb2NrIG9yIGlubGluZS1ibG9jayBsZXZlbCBlbGVtZW50c1xuICAgKiAodGhlIGVsZW1lbnQgbmVlZHMgdG8gaGF2ZSBhIHdpZHRoIGluIG9yZGVyIHRvIG92ZXJmbG93KS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG5vV3JhcDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBlbGVtZW50IHdpbGwgYmUgYSBwYXJhZ3JhcGggZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHBhcmFncmFwaDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSB0aGVtZSB0eXBvZ3JhcGh5IHN0eWxlcy5cbiAgICogQGRlZmF1bHQgJ2JvZHkxJ1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib2R5MScsICdib2R5MicsICdidXR0b24nLCAnY2FwdGlvbicsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdpbmhlcml0JywgJ292ZXJsaW5lJywgJ3N1YnRpdGxlMScsICdzdWJ0aXRsZTInXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgbWFwcyB0aGUgdmFyaWFudCBwcm9wIHRvIGEgcmFuZ2Ugb2YgZGlmZmVyZW50IEhUTUwgZWxlbWVudCB0eXBlcy5cbiAgICogRm9yIGluc3RhbmNlLCBzdWJ0aXRsZTEgdG8gYDxoNj5gLlxuICAgKiBJZiB5b3Ugd2lzaCB0byBjaGFuZ2UgdGhhdCBtYXBwaW5nLCB5b3UgY2FuIHByb3ZpZGUgeW91ciBvd24uXG4gICAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIHRoZSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgaDE6ICdoMScsXG4gICAqICAgaDI6ICdoMicsXG4gICAqICAgaDM6ICdoMycsXG4gICAqICAgaDQ6ICdoNCcsXG4gICAqICAgaDU6ICdoNScsXG4gICAqICAgaDY6ICdoNicsXG4gICAqICAgc3VidGl0bGUxOiAnaDYnLFxuICAgKiAgIHN1YnRpdGxlMjogJ2g2JyxcbiAgICogICBib2R5MTogJ3AnLFxuICAgKiAgIGJvZHkyOiAncCcsXG4gICAqICAgaW5oZXJpdDogJ3AnLFxuICAgKiB9XG4gICAqL1xuICB2YXJpYW50TWFwcGluZzogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub2JqZWN0XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVHlwb2dyYXBoeTsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlUeXBvZ3JhcGh5Jywgc2xvdCk7XG59XG5jb25zdCB0eXBvZ3JhcGh5Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aVR5cG9ncmFwaHknLCBbJ3Jvb3QnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMicsICdib2R5MScsICdib2R5MicsICdpbmhlcml0JywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ292ZXJsaW5lJywgJ2FsaWduTGVmdCcsICdhbGlnblJpZ2h0JywgJ2FsaWduQ2VudGVyJywgJ2FsaWduSnVzdGlmeScsICdub1dyYXAnLCAnZ3V0dGVyQm90dG9tJywgJ3BhcmFncmFwaCddKTtcbmV4cG9ydCBkZWZhdWx0IHR5cG9ncmFwaHlDbGFzc2VzOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtQ29udHJvbFN0YXRlKHtcbiAgcHJvcHMsXG4gIHN0YXRlcyxcbiAgbXVpRm9ybUNvbnRyb2xcbn0pIHtcbiAgcmV0dXJuIHN0YXRlcy5yZWR1Y2UoKGFjYywgc3RhdGUpID0+IHtcbiAgICBhY2Nbc3RhdGVdID0gcHJvcHNbc3RhdGVdO1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wc1tzdGF0ZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFjY1tzdGF0ZV0gPSBtdWlGb3JtQ29udHJvbFtzdGF0ZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn0iLCAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBGb3JtQ29udHJvbENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgRm9ybUNvbnRyb2xDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0Zvcm1Db250cm9sQ29udGV4dCc7XG59XG5leHBvcnQgZGVmYXVsdCBGb3JtQ29udHJvbENvbnRleHQ7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JtQ29udHJvbCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoRm9ybUNvbnRyb2xDb250ZXh0KTtcbn0iLCAiLy8gU3VwcG9ydHMgZGV0ZXJtaW5hdGlvbiBvZiBpc0NvbnRyb2xsZWQoKS5cbi8vIENvbnRyb2xsZWQgaW5wdXQgYWNjZXB0cyBpdHMgY3VycmVudCB2YWx1ZSBhcyBhIHByb3AuXG4vL1xuLy8gQHNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2Zvcm1zLmh0bWwjY29udHJvbGxlZC1jb21wb25lbnRzXG4vLyBAcGFyYW0gdmFsdWVcbi8vIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHN0cmluZyAoaW5jbHVkaW5nICcnKSBvciBudW1iZXIgKGluY2x1ZGluZyB6ZXJvKVxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICEoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKTtcbn1cblxuLy8gRGV0ZXJtaW5lIGlmIGZpZWxkIGlzIGVtcHR5IG9yIGZpbGxlZC5cbi8vIFJlc3BvbnNlIGRldGVybWluZXMgaWYgbGFiZWwgaXMgcHJlc2VudGVkIGFib3ZlIGZpZWxkIG9yIGFzIHBsYWNlaG9sZGVyLlxuLy9cbi8vIEBwYXJhbSBvYmpcbi8vIEBwYXJhbSBTU1Jcbi8vIEByZXR1cm5zIHtib29sZWFufSBGYWxzZSB3aGVuIG5vdCBwcmVzZW50IG9yIGVtcHR5IHN0cmluZy5cbi8vICAgICAgICAgICAgICAgICAgICBUcnVlIHdoZW4gYW55IG51bWJlciBvciBzdHJpbmcgd2l0aCBsZW5ndGguXG5leHBvcnQgZnVuY3Rpb24gaXNGaWxsZWQob2JqLCBTU1IgPSBmYWxzZSkge1xuICByZXR1cm4gb2JqICYmIChoYXNWYWx1ZShvYmoudmFsdWUpICYmIG9iai52YWx1ZSAhPT0gJycgfHwgU1NSICYmIGhhc1ZhbHVlKG9iai5kZWZhdWx0VmFsdWUpICYmIG9iai5kZWZhdWx0VmFsdWUgIT09ICcnKTtcbn1cblxuLy8gRGV0ZXJtaW5lIGlmIGFuIElucHV0IGlzIGFkb3JuZWQgb24gc3RhcnQuXG4vLyBJdCdzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxlZnQgd2l0aCBMVFIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm8gYWRvcm5tZW50cy5cbi8vICAgICAgICAgICAgICAgICAgICBUcnVlIHdoZW4gYWRvcm5lZCBhdCB0aGUgc3RhcnQuXG5leHBvcnQgZnVuY3Rpb24gaXNBZG9ybmVkU3RhcnQob2JqKSB7XG4gIHJldHVybiBvYmouc3RhcnRBZG9ybm1lbnQ7XG59IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoZWNrZWRJY29uXCIsIFwiY29sb3JcIiwgXCJpY29uXCIsIFwiaW5kZXRlcm1pbmF0ZVwiLCBcImluZGV0ZXJtaW5hdGVJY29uXCIsIFwiaW5wdXRQcm9wc1wiLCBcInNpemVcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBTd2l0Y2hCYXNlIGZyb20gJy4uL2ludGVybmFsL1N3aXRjaEJhc2UnO1xuaW1wb3J0IENoZWNrQm94T3V0bGluZUJsYW5rSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvQ2hlY2tCb3hPdXRsaW5lQmxhbmsnO1xuaW1wb3J0IENoZWNrQm94SWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvQ2hlY2tCb3gnO1xuaW1wb3J0IEluZGV0ZXJtaW5hdGVDaGVja0JveEljb24gZnJvbSAnLi4vaW50ZXJuYWwvc3ZnLWljb25zL0luZGV0ZXJtaW5hdGVDaGVja0JveCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgY2hlY2tib3hDbGFzc2VzLCB7IGdldENoZWNrYm94VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9jaGVja2JveENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGluZGV0ZXJtaW5hdGUsXG4gICAgY29sb3IsXG4gICAgc2l6ZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgaW5kZXRlcm1pbmF0ZSAmJiAnaW5kZXRlcm1pbmF0ZScsIGBjb2xvciR7Y2FwaXRhbGl6ZShjb2xvcil9YCwgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YF1cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldENoZWNrYm94VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IENoZWNrYm94Um9vdCA9IHN0eWxlZChTd2l0Y2hCYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlDaGVja2JveCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLmluZGV0ZXJtaW5hdGUgJiYgc3R5bGVzLmluZGV0ZXJtaW5hdGUsIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBvd25lclN0YXRlLmNvbG9yICE9PSAnZGVmYXVsdCcgJiYgc3R5bGVzW2Bjb2xvciR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmNvbG9yKX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnNlY29uZGFyeVxufSwgIW93bmVyU3RhdGUuZGlzYWJsZVJpcHBsZSAmJiB7XG4gICcmOmhvdmVyJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7b3duZXJTdGF0ZS5jb2xvciA9PT0gJ2RlZmF1bHQnID8gdGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5hY3RpdmVDaGFubmVsIDogdGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYShvd25lclN0YXRlLmNvbG9yID09PSAnZGVmYXVsdCcgPyB0aGVtZS5wYWxldHRlLmFjdGlvbi5hY3RpdmUgOiB0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICB9XG4gIH1cbn0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdkZWZhdWx0JyAmJiB7XG4gIFtgJi4ke2NoZWNrYm94Q2xhc3Nlcy5jaGVja2VkfSwgJi4ke2NoZWNrYm94Q2xhc3Nlcy5pbmRldGVybWluYXRlfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSxcbiAgW2AmLiR7Y2hlY2tib3hDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICB9XG59KSk7XG5jb25zdCBkZWZhdWx0Q2hlY2tlZEljb24gPSAvKiNfX1BVUkVfXyovX2pzeChDaGVja0JveEljb24sIHt9KTtcbmNvbnN0IGRlZmF1bHRJY29uID0gLyojX19QVVJFX18qL19qc3goQ2hlY2tCb3hPdXRsaW5lQmxhbmtJY29uLCB7fSk7XG5jb25zdCBkZWZhdWx0SW5kZXRlcm1pbmF0ZUljb24gPSAvKiNfX1BVUkVfXyovX2pzeChJbmRldGVybWluYXRlQ2hlY2tCb3hJY29uLCB7fSk7XG5jb25zdCBDaGVja2JveCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIENoZWNrYm94KGluUHJvcHMsIHJlZikge1xuICB2YXIgX2ljb24kcHJvcHMkZm9udFNpemUsIF9pbmRldGVybWluYXRlSWNvbiRwcjtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2hlY2tib3gnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGVja2VkSWNvbiA9IGRlZmF1bHRDaGVja2VkSWNvbixcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgaWNvbjogaWNvblByb3AgPSBkZWZhdWx0SWNvbixcbiAgICAgIGluZGV0ZXJtaW5hdGUgPSBmYWxzZSxcbiAgICAgIGluZGV0ZXJtaW5hdGVJY29uOiBpbmRldGVybWluYXRlSWNvblByb3AgPSBkZWZhdWx0SW5kZXRlcm1pbmF0ZUljb24sXG4gICAgICBpbnB1dFByb3BzLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGljb24gPSBpbmRldGVybWluYXRlID8gaW5kZXRlcm1pbmF0ZUljb25Qcm9wIDogaWNvblByb3A7XG4gIGNvbnN0IGluZGV0ZXJtaW5hdGVJY29uID0gaW5kZXRlcm1pbmF0ZSA/IGluZGV0ZXJtaW5hdGVJY29uUHJvcCA6IGNoZWNrZWRJY29uO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3IsXG4gICAgaW5kZXRlcm1pbmF0ZSxcbiAgICBzaXplXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChDaGVja2JveFJvb3QsIF9leHRlbmRzKHtcbiAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgaW5wdXRQcm9wczogX2V4dGVuZHMoe1xuICAgICAgJ2RhdGEtaW5kZXRlcm1pbmF0ZSc6IGluZGV0ZXJtaW5hdGVcbiAgICB9LCBpbnB1dFByb3BzKSxcbiAgICBpY29uOiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGljb24sIHtcbiAgICAgIGZvbnRTaXplOiAoX2ljb24kcHJvcHMkZm9udFNpemUgPSBpY29uLnByb3BzLmZvbnRTaXplKSAhPSBudWxsID8gX2ljb24kcHJvcHMkZm9udFNpemUgOiBzaXplXG4gICAgfSksXG4gICAgY2hlY2tlZEljb246IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaW5kZXRlcm1pbmF0ZUljb24sIHtcbiAgICAgIGZvbnRTaXplOiAoX2luZGV0ZXJtaW5hdGVJY29uJHByID0gaW5kZXRlcm1pbmF0ZUljb24ucHJvcHMuZm9udFNpemUpICE9IG51bGwgPyBfaW5kZXRlcm1pbmF0ZUljb24kcHIgOiBzaXplXG4gICAgfSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogY2xhc3Nlc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENoZWNrYm94LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKiBAZGVmYXVsdCA8Q2hlY2tCb3hJY29uIC8+XG4gICAqL1xuICBjaGVja2VkSWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBjaGVja2VkIHN0YXRlLiBVc2Ugd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBjb250cm9sbGVkLlxuICAgKi9cbiAgZGVmYXVsdENoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5jaGVja2VkLlxuICAgKiBAZGVmYXVsdCA8Q2hlY2tCb3hPdXRsaW5lQmxhbmtJY29uIC8+XG4gICAqL1xuICBpY29uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgYXBwZWFycyBpbmRldGVybWluYXRlLlxuICAgKiBUaGlzIGRvZXMgbm90IHNldCB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQgdG8gaW5kZXRlcm1pbmF0ZSBkdWVcbiAgICogdG8gaW5jb25zaXN0ZW50IGJlaGF2aW9yIGFjcm9zcyBicm93c2Vycy5cbiAgICogSG93ZXZlciwgd2Ugc2V0IGEgYGRhdGEtaW5kZXRlcm1pbmF0ZWAgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5kZXRlcm1pbmF0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbmRldGVybWluYXRlLlxuICAgKiBAZGVmYXVsdCA8SW5kZXRlcm1pbmF0ZUNoZWNrQm94SWNvbiAvPlxuICAgKi9cbiAgaW5kZXRlcm1pbmF0ZUljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogW0F0dHJpYnV0ZXNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNBdHRyaWJ1dGVzKSBhcHBsaWVkIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogUGFzcyBhIHJlZiB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRSZWY6IHJlZlR5cGUsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IGNoZWNrZWQgc3RhdGUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQuY2hlY2tlZGAgKGJvb2xlYW4pLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSBjaGVja2JveCBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LiBUaGUgRE9NIEFQSSBjYXN0cyB0aGlzIHRvIGEgc3RyaW5nLlxuICAgKiBUaGUgYnJvd3NlciB1c2VzIFwib25cIiBhcyB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImF1dG9Gb2N1c1wiLCBcImNoZWNrZWRcIiwgXCJjaGVja2VkSWNvblwiLCBcImNsYXNzTmFtZVwiLCBcImRlZmF1bHRDaGVja2VkXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlRm9jdXNSaXBwbGVcIiwgXCJlZGdlXCIsIFwiaWNvblwiLCBcImlkXCIsIFwiaW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibmFtZVwiLCBcIm9uQmx1clwiLCBcIm9uQ2hhbmdlXCIsIFwib25Gb2N1c1wiLCBcInJlYWRPbmx5XCIsIFwicmVxdWlyZWRcIiwgXCJ0YWJJbmRleFwiLCBcInR5cGVcIiwgXCJ2YWx1ZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlQ29udHJvbGxlZCBmcm9tICcuLi91dGlscy91c2VDb250cm9sbGVkJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCB7IGdldFN3aXRjaEJhc2VVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3N3aXRjaEJhc2VDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjaGVja2VkLFxuICAgIGRpc2FibGVkLFxuICAgIGVkZ2VcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNoZWNrZWQgJiYgJ2NoZWNrZWQnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlZGdlICYmIGBlZGdlJHtjYXBpdGFsaXplKGVkZ2UpfWBdLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRTd2l0Y2hCYXNlVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBTd2l0Y2hCYXNlUm9vdCA9IHN0eWxlZChCdXR0b25CYXNlKSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmc6IDksXG4gIGJvcmRlclJhZGl1czogJzUwJSdcbn0sIG93bmVyU3RhdGUuZWRnZSA9PT0gJ3N0YXJ0JyAmJiB7XG4gIG1hcmdpbkxlZnQ6IG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyA/IC0zIDogLTEyXG59LCBvd25lclN0YXRlLmVkZ2UgPT09ICdlbmQnICYmIHtcbiAgbWFyZ2luUmlnaHQ6IG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyA/IC0zIDogLTEyXG59KSk7XG5jb25zdCBTd2l0Y2hCYXNlSW5wdXQgPSBzdHlsZWQoJ2lucHV0Jywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KSh7XG4gIGN1cnNvcjogJ2luaGVyaXQnLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgb3BhY2l0eTogMCxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVpZ2h0OiAnMTAwJScsXG4gIHRvcDogMCxcbiAgbGVmdDogMCxcbiAgbWFyZ2luOiAwLFxuICBwYWRkaW5nOiAwLFxuICB6SW5kZXg6IDFcbn0pO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IFN3aXRjaEJhc2UgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTd2l0Y2hCYXNlKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgY2hlY2tlZDogY2hlY2tlZFByb3AsXG4gICAgICBjaGVja2VkSWNvbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRDaGVja2VkLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkUHJvcCxcbiAgICAgIGRpc2FibGVGb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgZWRnZSA9IGZhbHNlLFxuICAgICAgaWNvbixcbiAgICAgIGlkLFxuICAgICAgaW5wdXRQcm9wcyxcbiAgICAgIGlucHV0UmVmLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIHJlYWRPbmx5LFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHRhYkluZGV4LFxuICAgICAgdHlwZSxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IFtjaGVja2VkLCBzZXRDaGVja2VkU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogY2hlY2tlZFByb3AsXG4gICAgZGVmYXVsdDogQm9vbGVhbihkZWZhdWx0Q2hlY2tlZCksXG4gICAgbmFtZTogJ1N3aXRjaEJhc2UnLFxuICAgIHN0YXRlOiAnY2hlY2tlZCdcbiAgfSk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgaGFuZGxlRm9jdXMgPSBldmVudCA9PiB7XG4gICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgIG9uRm9jdXMoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25Gb2N1cykge1xuICAgICAgbXVpRm9ybUNvbnRyb2wub25Gb2N1cyhldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVCbHVyID0gZXZlbnQgPT4ge1xuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICAgIGlmIChtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkJsdXIpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLm9uQmx1cihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IGV2ZW50ID0+IHtcbiAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzkwMjNcbiAgICBpZiAoZXZlbnQubmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdDaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgc2V0Q2hlY2tlZFN0YXRlKG5ld0NoZWNrZWQpO1xuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIHRoZSBzZWNvbmQgYXJndW1lbnQuXG4gICAgICBvbkNoYW5nZShldmVudCwgbmV3Q2hlY2tlZCk7XG4gICAgfVxuICB9O1xuICBsZXQgZGlzYWJsZWQgPSBkaXNhYmxlZFByb3A7XG4gIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgIGlmICh0eXBlb2YgZGlzYWJsZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkaXNhYmxlZCA9IG11aUZvcm1Db250cm9sLmRpc2FibGVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBoYXNMYWJlbEZvciA9IHR5cGUgPT09ICdjaGVja2JveCcgfHwgdHlwZSA9PT0gJ3JhZGlvJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNoZWNrZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUZvY3VzUmlwcGxlLFxuICAgIGVkZ2VcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhTd2l0Y2hCYXNlUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNvbXBvbmVudDogXCJzcGFuXCIsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBjZW50ZXJSaXBwbGU6IHRydWUsXG4gICAgZm9jdXNSaXBwbGU6ICFkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgIHRhYkluZGV4OiBudWxsLFxuICAgIHJvbGU6IHVuZGVmaW5lZCxcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goU3dpdGNoQmFzZUlucHV0LCBfZXh0ZW5kcyh7XG4gICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICAgIGNoZWNrZWQ6IGNoZWNrZWRQcm9wLFxuICAgICAgZGVmYXVsdENoZWNrZWQ6IGRlZmF1bHRDaGVja2VkLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLmlucHV0LFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgaWQ6IGhhc0xhYmVsRm9yID8gaWQgOiB1bmRlZmluZWQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUlucHV0Q2hhbmdlLFxuICAgICAgcmVhZE9ubHk6IHJlYWRPbmx5LFxuICAgICAgcmVmOiBpbnB1dFJlZixcbiAgICAgIHJlcXVpcmVkOiByZXF1aXJlZCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICB0YWJJbmRleDogdGFiSW5kZXgsXG4gICAgICB0eXBlOiB0eXBlXG4gICAgfSwgdHlwZSA9PT0gJ2NoZWNrYm94JyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8ge30gOiB7XG4gICAgICB2YWx1ZVxuICAgIH0sIGlucHV0UHJvcHMpKSwgY2hlY2tlZCA/IGNoZWNrZWRJY29uIDogaWNvbl1cbiAgfSkpO1xufSk7XG5cbi8vIE5COiBJZiBjaGFuZ2VkLCBwbGVhc2UgdXBkYXRlIENoZWNrYm94LCBTd2l0Y2ggYW5kIFJhZGlvXG4vLyBzbyB0aGF0IHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBpcyB1cGRhdGVkLlxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3dpdGNoQmFzZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZEljb246IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZGVmYXVsdENoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgIGtleWJvYXJkIGZvY3VzIHJpcHBsZSBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVGb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBnaXZlbiwgdXNlcyBhIG5lZ2F0aXZlIG1hcmdpbiB0byBjb3VudGVyYWN0IHRoZSBwYWRkaW5nIG9uIG9uZVxuICAgKiBzaWRlICh0aGlzIGlzIG9mdGVuIGhlbHBmdWwgZm9yIGFsaWduaW5nIHRoZSBsZWZ0IG9yIHJpZ2h0XG4gICAqIHNpZGUgb2YgdGhlIGljb24gd2l0aCBjb250ZW50IGFib3ZlIG9yIGJlbG93LCB3aXRob3V0IHJ1aW5pbmcgdGhlIGJvcmRlclxuICAgKiBzaXplIGFuZCBzaGFwZSkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlZGdlOiBQcm9wVHlwZXMub25lT2YoWydlbmQnLCAnc3RhcnQnLCBmYWxzZV0pLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgdW5jaGVja2VkLlxuICAgKi9cbiAgaWNvbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLypcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyBjaGVja2VkIHN0YXRlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LmNoZWNrZWRgIChib29sZWFuKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdGFiSW5kZXg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBjb21wb25lbnQgcHJvcCBgdHlwZWAuXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgU3dpdGNoQmFzZTsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRTd2l0Y2hCYXNlVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdQcml2YXRlU3dpdGNoQmFzZScsIHNsb3QpO1xufVxuY29uc3Qgc3dpdGNoQmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdQcml2YXRlU3dpdGNoQmFzZScsIFsncm9vdCcsICdjaGVja2VkJywgJ2Rpc2FibGVkJywgJ2lucHV0JywgJ2VkZ2VTdGFydCcsICdlZGdlRW5kJ10pO1xuZXhwb3J0IGRlZmF1bHQgc3dpdGNoQmFzZUNsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE5IDV2MTRINVY1aDE0bTAtMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6XCJcbn0pLCAnQ2hlY2tCb3hPdXRsaW5lQmxhbmsnKTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tOSAxNGwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5elwiXG59KSwgJ0NoZWNrQm94Jyk7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlU3ZnSWNvbic7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVN2Z0ljb24oIC8qI19fUFVSRV9fKi9fanN4KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMEg3di0yaDEwdjJ6XCJcbn0pLCAnSW5kZXRlcm1pbmF0ZUNoZWNrQm94Jyk7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlY2tib3hVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNoZWNrYm94Jywgc2xvdCk7XG59XG5jb25zdCBjaGVja2JveENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlDaGVja2JveCcsIFsncm9vdCcsICdjaGVja2VkJywgJ2Rpc2FibGVkJywgJ2luZGV0ZXJtaW5hdGUnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ3NpemVTbWFsbCcsICdzaXplTWVkaXVtJ10pO1xuZXhwb3J0IGRlZmF1bHQgY2hlY2tib3hDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImRpc2FibGVTaHJpbmtcIiwgXCJzaXplXCIsIFwic3R5bGVcIiwgXCJ0aGlja25lc3NcIiwgXCJ2YWx1ZVwiLCBcInZhcmlhbnRcIl07XG5sZXQgXyA9IHQgPT4gdCxcbiAgX3QsXG4gIF90MixcbiAgX3QzLFxuICBfdDQ7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY2hhaW5Qcm9wVHlwZXMgZnJvbSAnQG11aS91dGlscy9jaGFpblByb3BUeXBlcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBrZXlmcmFtZXMsIGNzcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2NpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBTSVpFID0gNDQ7XG5jb25zdCBjaXJjdWxhclJvdGF0ZUtleWZyYW1lID0ga2V5ZnJhbWVzKF90IHx8IChfdCA9IF9gXG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbmApKTtcbmNvbnN0IGNpcmN1bGFyRGFzaEtleWZyYW1lID0ga2V5ZnJhbWVzKF90MiB8fCAoX3QyID0gX2BcbiAgMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDFweCwgMjAwcHg7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XG4gIH1cblxuICA1MCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDEwMHB4LCAyMDBweDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTE1cHg7XG4gIH1cblxuICAxMDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxMDBweCwgMjAwcHg7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xMjVweDtcbiAgfVxuYCkpO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgdmFyaWFudCxcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlU2hyaW5rXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWBdLFxuICAgIHN2ZzogWydzdmcnXSxcbiAgICBjaXJjbGU6IFsnY2lyY2xlJywgYGNpcmNsZSR7Y2FwaXRhbGl6ZSh2YXJpYW50KX1gLCBkaXNhYmxlU2hyaW5rICYmICdjaXJjbGVEaXNhYmxlU2hyaW5rJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRDaXJjdWxhclByb2dyZXNzVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBDaXJjdWxhclByb2dyZXNzUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIHN0eWxlc1tgY29sb3Ike2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJ1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZGV0ZXJtaW5hdGUnICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nKVxufSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbn0pLCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmRldGVybWluYXRlJyAmJiBjc3MoX3QzIHx8IChfdDMgPSBfYFxuICAgICAgYW5pbWF0aW9uOiAkezB9IDEuNHMgbGluZWFyIGluZmluaXRlO1xuICAgIGApLCBjaXJjdWxhclJvdGF0ZUtleWZyYW1lKSk7XG5jb25zdCBDaXJjdWxhclByb2dyZXNzU1ZHID0gc3R5bGVkKCdzdmcnLCB7XG4gIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJyxcbiAgc2xvdDogJ1N2ZycsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnN2Z1xufSkoe1xuICBkaXNwbGF5OiAnYmxvY2snIC8vIEtlZXBzIHRoZSBwcm9ncmVzcyBjZW50ZXJlZFxufSk7XG5jb25zdCBDaXJjdWxhclByb2dyZXNzQ2lyY2xlID0gc3R5bGVkKCdjaXJjbGUnLCB7XG4gIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJyxcbiAgc2xvdDogJ0NpcmNsZScsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuY2lyY2xlLCBzdHlsZXNbYGNpcmNsZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnZhcmlhbnQpfWBdLCBvd25lclN0YXRlLmRpc2FibGVTaHJpbmsgJiYgc3R5bGVzLmNpcmNsZURpc2FibGVTaHJpbmtdO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlLFxuICB0aGVtZVxufSkgPT4gX2V4dGVuZHMoe1xuICBzdHJva2U6ICdjdXJyZW50Q29sb3InXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdkZXRlcm1pbmF0ZScgJiYge1xuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3N0cm9rZS1kYXNob2Zmc2V0Jylcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2luZGV0ZXJtaW5hdGUnICYmIHtcbiAgLy8gU29tZSBkZWZhdWx0IHZhbHVlIHRoYXQgbG9va3MgZmluZSB3YWl0aW5nIGZvciB0aGUgYW5pbWF0aW9uIHRvIGtpY2tzIGluLlxuICBzdHJva2VEYXNoYXJyYXk6ICc4MHB4LCAyMDBweCcsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDAgLy8gQWRkIHRoZSB1bml0IHRvIGZpeCBhIEVkZ2UgMTYgYW5kIGJlbG93IGJ1Zy5cbn0pLCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmRldGVybWluYXRlJyAmJiAhb3duZXJTdGF0ZS5kaXNhYmxlU2hyaW5rICYmIGNzcyhfdDQgfHwgKF90NCA9IF9gXG4gICAgICBhbmltYXRpb246ICR7MH0gMS40cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICBgKSwgY2lyY3VsYXJEYXNoS2V5ZnJhbWUpKTtcblxuLyoqXG4gKiAjIyBBUklBXG4gKlxuICogSWYgdGhlIHByb2dyZXNzIGJhciBpcyBkZXNjcmliaW5nIHRoZSBsb2FkaW5nIHByb2dyZXNzIG9mIGEgcGFydGljdWxhciByZWdpb24gb2YgYSBwYWdlLFxuICogeW91IHNob3VsZCB1c2UgYGFyaWEtZGVzY3JpYmVkYnlgIHRvIHBvaW50IHRvIHRoZSBwcm9ncmVzcyBiYXIsIGFuZCBzZXQgdGhlIGBhcmlhLWJ1c3lgXG4gKiBhdHRyaWJ1dGUgdG8gYHRydWVgIG9uIHRoYXQgcmVnaW9uIHVudGlsIGl0IGhhcyBmaW5pc2hlZCBsb2FkaW5nLlxuICovXG5jb25zdCBDaXJjdWxhclByb2dyZXNzID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQ2lyY3VsYXJQcm9ncmVzcyhpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcydcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgZGlzYWJsZVNocmluayA9IGZhbHNlLFxuICAgICAgc2l6ZSA9IDQwLFxuICAgICAgc3R5bGUsXG4gICAgICB0aGlja25lc3MgPSAzLjYsXG4gICAgICB2YWx1ZSA9IDAsXG4gICAgICB2YXJpYW50ID0gJ2luZGV0ZXJtaW5hdGUnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlU2hyaW5rLFxuICAgIHNpemUsXG4gICAgdGhpY2tuZXNzLFxuICAgIHZhbHVlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgY2lyY2xlU3R5bGUgPSB7fTtcbiAgY29uc3Qgcm9vdFN0eWxlID0ge307XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHt9O1xuICBpZiAodmFyaWFudCA9PT0gJ2RldGVybWluYXRlJykge1xuICAgIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSAyICogTWF0aC5QSSAqICgoU0laRSAtIHRoaWNrbmVzcykgLyAyKTtcbiAgICBjaXJjbGVTdHlsZS5zdHJva2VEYXNoYXJyYXkgPSBjaXJjdW1mZXJlbmNlLnRvRml4ZWQoMyk7XG4gICAgcm9vdFByb3BzWydhcmlhLXZhbHVlbm93J10gPSBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICBjaXJjbGVTdHlsZS5zdHJva2VEYXNob2Zmc2V0ID0gYCR7KCgxMDAgLSB2YWx1ZSkgLyAxMDAgKiBjaXJjdW1mZXJlbmNlKS50b0ZpeGVkKDMpfXB4YDtcbiAgICByb290U3R5bGUudHJhbnNmb3JtID0gJ3JvdGF0ZSgtOTBkZWcpJztcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQ2lyY3VsYXJQcm9ncmVzc1Jvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICB3aWR0aDogc2l6ZSxcbiAgICAgIGhlaWdodDogc2l6ZVxuICAgIH0sIHJvb3RTdHlsZSwgc3R5bGUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgcm9sZTogXCJwcm9ncmVzc2JhclwiXG4gIH0sIHJvb3RQcm9wcywgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goQ2lyY3VsYXJQcm9ncmVzc1NWRywge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLnN2ZyxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICB2aWV3Qm94OiBgJHtTSVpFIC8gMn0gJHtTSVpFIC8gMn0gJHtTSVpFfSAke1NJWkV9YCxcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzQ2lyY2xlLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5jaXJjbGUsXG4gICAgICAgIHN0eWxlOiBjaXJjbGVTdHlsZSxcbiAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgY3g6IFNJWkUsXG4gICAgICAgIGN5OiBTSVpFLFxuICAgICAgICByOiAoU0laRSAtIHRoaWNrbmVzcykgLyAyLFxuICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaWNrbmVzc1xuICAgICAgfSlcbiAgICB9KVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENpcmN1bGFyUHJvZ3Jlc3MucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIFx1MjUwQ1x1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMCBXYXJuaW5nIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxMFxuICAvLyBcdTI1MDIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiBcdTI1MDJcbiAgLy8gXHUyNTAyICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAgXHUyNTAyXG4gIC8vIFx1MjUxNFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUxOFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2hyaW5rIGFuaW1hdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogVGhpcyBvbmx5IHdvcmtzIGlmIHZhcmlhbnQgaXMgYGluZGV0ZXJtaW5hdGVgLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNocmluazogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLmJvb2wsIHByb3BzID0+IHtcbiAgICBpZiAocHJvcHMuZGlzYWJsZVNocmluayAmJiBwcm9wcy52YXJpYW50ICYmIHByb3BzLnZhcmlhbnQgIT09ICdpbmRldGVybWluYXRlJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCB0aGUgYGRpc2FibGVTaHJpbmtgIHByb3AgJyArICd3aXRoIGEgdmFyaWFudCBvdGhlciB0aGFuIGBpbmRldGVybWluYXRlYC4gVGhpcyB3aWxsIGhhdmUgbm8gZWZmZWN0LicpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJZiB1c2luZyBhIG51bWJlciwgdGhlIHBpeGVsIHVuaXQgaXMgYXNzdW1lZC5cbiAgICogSWYgdXNpbmcgYSBzdHJpbmcsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIENTUyB1bml0LCBlLmcuICczcmVtJy5cbiAgICogQGRlZmF1bHQgNDBcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHRoaWNrbmVzcyBvZiB0aGUgY2lyY2xlLlxuICAgKiBAZGVmYXVsdCAzLjZcbiAgICovXG4gIHRoaWNrbmVzczogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGZvciB0aGUgZGV0ZXJtaW5hdGUgdmFyaWFudC5cbiAgICogVmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKiBVc2UgaW5kZXRlcm1pbmF0ZSB3aGVuIHRoZXJlIGlzIG5vIHByb2dyZXNzIHZhbHVlLlxuICAgKiBAZGVmYXVsdCAnaW5kZXRlcm1pbmF0ZSdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2RldGVybWluYXRlJywgJ2luZGV0ZXJtaW5hdGUnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBDaXJjdWxhclByb2dyZXNzOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUNpcmN1bGFyUHJvZ3Jlc3MnLCBzbG90KTtcbn1cbmNvbnN0IGNpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpQ2lyY3VsYXJQcm9ncmVzcycsIFsncm9vdCcsICdkZXRlcm1pbmF0ZScsICdpbmRldGVybWluYXRlJywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdzdmcnLCAnY2lyY2xlJywgJ2NpcmNsZURldGVybWluYXRlJywgJ2NpcmNsZUluZGV0ZXJtaW5hdGUnLCAnY2lyY2xlRGlzYWJsZVNocmluayddKTtcbmV4cG9ydCBkZWZhdWx0IGNpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZvY3VzZWRcIiwgXCJmdWxsV2lkdGhcIiwgXCJoaWRkZW5MYWJlbFwiLCBcIm1hcmdpblwiLCBcInJlcXVpcmVkXCIsIFwic2l6ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgaXNGaWxsZWQsIGlzQWRvcm5lZFN0YXJ0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL3V0aWxzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGlzTXVpRWxlbWVudCBmcm9tICcuLi91dGlscy9pc011aUVsZW1lbnQnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtQ29udHJvbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIG1hcmdpbixcbiAgICBmdWxsV2lkdGhcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIG1hcmdpbiAhPT0gJ25vbmUnICYmIGBtYXJnaW4ke2NhcGl0YWxpemUobWFyZ2luKX1gLCBmdWxsV2lkdGggJiYgJ2Z1bGxXaWR0aCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRm9ybUNvbnRyb2xSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBzdHlsZXNbYG1hcmdpbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLm1hcmdpbil9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgpO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgLy8gUmVzZXQgZmllbGRzZXQgZGVmYXVsdCBzdHlsZS5cbiAgbWluV2lkdGg6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIG1hcmdpbjogMCxcbiAgYm9yZGVyOiAwLFxuICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xufSwgb3duZXJTdGF0ZS5tYXJnaW4gPT09ICdub3JtYWwnICYmIHtcbiAgbWFyZ2luVG9wOiAxNixcbiAgbWFyZ2luQm90dG9tOiA4XG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ2RlbnNlJyAmJiB7XG4gIG1hcmdpblRvcDogOCxcbiAgbWFyZ2luQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnMTAwJSdcbn0pKTtcblxuLyoqXG4gKiBQcm92aWRlcyBjb250ZXh0IHN1Y2ggYXMgZmlsbGVkL2ZvY3VzZWQvZXJyb3IvcmVxdWlyZWQgZm9yIGZvcm0gaW5wdXRzLlxuICogUmVseWluZyBvbiB0aGUgY29udGV4dCBwcm92aWRlcyBoaWdoIGZsZXhpYmlsaXR5IGFuZCBlbnN1cmVzIHRoYXQgdGhlIHN0YXRlIGFsd2F5cyBzdGF5c1xuICogY29uc2lzdGVudCBhY3Jvc3MgdGhlIGNoaWxkcmVuIG9mIHRoZSBgRm9ybUNvbnRyb2xgLlxuICogVGhpcyBjb250ZXh0IGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqICAtIEZvcm1MYWJlbFxuICogIC0gRm9ybUhlbHBlclRleHRcbiAqICAtIElucHV0XG4gKiAgLSBJbnB1dExhYmVsXG4gKlxuICogWW91IGNhbiBmaW5kIG9uZSBjb21wb3NpdGlvbiBleGFtcGxlIGJlbG93IGFuZCBtb3JlIGdvaW5nIHRvIFt0aGUgZGVtb3NdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0LWZpZWxkLyNjb21wb25lbnRzKS5cbiAqXG4gKiBgYGBqc3hcbiAqIDxGb3JtQ29udHJvbD5cbiAqICAgPElucHV0TGFiZWwgaHRtbEZvcj1cIm15LWlucHV0XCI+RW1haWwgYWRkcmVzczwvSW5wdXRMYWJlbD5cbiAqICAgPElucHV0IGlkPVwibXktaW5wdXRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwibXktaGVscGVyLXRleHRcIiAvPlxuICogICA8Rm9ybUhlbHBlclRleHQgaWQ9XCJteS1oZWxwZXItdGV4dFwiPldlJ2xsIG5ldmVyIHNoYXJlIHlvdXIgZW1haWwuPC9Gb3JtSGVscGVyVGV4dD5cbiAqIDwvRm9ybUNvbnRyb2w+XG4gKiBgYGBcbiAqXG4gKiBcdTI2QTBcdUZFMEYgT25seSBvbmUgYElucHV0QmFzZWAgY2FuIGJlIHVzZWQgd2l0aGluIGEgRm9ybUNvbnRyb2wgYmVjYXVzZSBpdCBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMuXG4gKiBGb3IgaW5zdGFuY2UsIG9ubHkgb25lIGlucHV0IGNhbiBiZSBmb2N1c2VkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBzdGF0ZSBzaG91bGRuJ3QgYmUgc2hhcmVkLlxuICovXG5jb25zdCBGb3JtQ29udHJvbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1Db250cm9sKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtQ29udHJvbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgZm9jdXNlZDogdmlzdWFsbHlGb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBoaWRkZW5MYWJlbCA9IGZhbHNlLFxuICAgICAgbWFyZ2luID0gJ25vbmUnLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIHZhcmlhbnQgPSAnb3V0bGluZWQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIG1hcmdpbixcbiAgICByZXF1aXJlZCxcbiAgICBzaXplLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgW2Fkb3JuZWRTdGFydCwgc2V0QWRvcm5lZFN0YXJ0XSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxBZG9ybmVkU3RhcnQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaXNNdWlFbGVtZW50KGNoaWxkLCBbJ1NlbGVjdCddKSA/IGNoaWxkLnByb3BzLmlucHV0IDogY2hpbGQ7XG4gICAgICAgIGlmIChpbnB1dCAmJiBpc0Fkb3JuZWRTdGFydChpbnB1dC5wcm9wcykpIHtcbiAgICAgICAgICBpbml0aWFsQWRvcm5lZFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsQWRvcm5lZFN0YXJ0O1xuICB9KTtcbiAgY29uc3QgW2ZpbGxlZCwgc2V0RmlsbGVkXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxGaWxsZWQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0ZpbGxlZChjaGlsZC5wcm9wcywgdHJ1ZSkgfHwgaXNGaWxsZWQoY2hpbGQucHJvcHMuaW5wdXRQcm9wcywgdHJ1ZSkpIHtcbiAgICAgICAgICBpbml0aWFsRmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsRmlsbGVkO1xuICB9KTtcbiAgY29uc3QgW2ZvY3VzZWRTdGF0ZSwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c2VkU3RhdGUpIHtcbiAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgfVxuICBjb25zdCBmb2N1c2VkID0gdmlzdWFsbHlGb2N1c2VkICE9PSB1bmRlZmluZWQgJiYgIWRpc2FibGVkID8gdmlzdWFsbHlGb2N1c2VkIDogZm9jdXNlZFN0YXRlO1xuICBsZXQgcmVnaXN0ZXJFZmZlY3Q7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgcmVnaXN0ZXJlZElucHV0ID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICByZWdpc3RlckVmZmVjdCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWdpc3RlcmVkSW5wdXQuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGVyZSBhcmUgbXVsdGlwbGUgYElucHV0QmFzZWAgY29tcG9uZW50cyBpbnNpZGUgYSBGb3JtQ29udHJvbC4nLCAnVGhpcyBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMsIG9ubHkgdXNlIG9uZSBgSW5wdXRCYXNlYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IHRydWU7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfTtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhZG9ybmVkU3RhcnQsXG4gICAgICBzZXRBZG9ybmVkU3RhcnQsXG4gICAgICBjb2xvcixcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBmaWxsZWQsXG4gICAgICBmb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoLFxuICAgICAgaGlkZGVuTGFiZWwsXG4gICAgICBzaXplLFxuICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG9uRW1wdHk6ICgpID0+IHtcbiAgICAgICAgc2V0RmlsbGVkKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBvbkZpbGxlZDogKCkgPT4ge1xuICAgICAgICBzZXRGaWxsZWQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgICAgfSxcbiAgICAgIHJlZ2lzdGVyRWZmZWN0LFxuICAgICAgcmVxdWlyZWQsXG4gICAgICB2YXJpYW50XG4gICAgfTtcbiAgfSwgW2Fkb3JuZWRTdGFydCwgY29sb3IsIGRpc2FibGVkLCBlcnJvciwgZmlsbGVkLCBmb2N1c2VkLCBmdWxsV2lkdGgsIGhpZGRlbkxhYmVsLCByZWdpc3RlckVmZmVjdCwgcmVxdWlyZWQsIHNpemUsIHZhcmlhbnRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtQ29udHJvbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwsIGlucHV0IGFuZCBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzcGxheWVkIGluIGZvY3VzZWQgc3RhdGUuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCBvciBgbm9ybWFsYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZyBvZiB0aGlzIGFuZCBjb250YWluZWQgY29tcG9uZW50cy5cbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnLCAnbm9ybWFsJ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250cm9sVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Db250cm9sJywgc2xvdCk7XG59XG5jb25zdCBmb3JtQ29udHJvbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtQ29udHJvbCcsIFsncm9vdCcsICdtYXJnaW5Ob25lJywgJ21hcmdpbk5vcm1hbCcsICdtYXJnaW5EZW5zZScsICdmdWxsV2lkdGgnLCAnZGlzYWJsZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtQ29udHJvbENsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNoZWNrZWRcIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRzUHJvcHNcIiwgXCJjb250cm9sXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlVHlwb2dyYXBoeVwiLCBcImlucHV0UmVmXCIsIFwibGFiZWxcIiwgXCJsYWJlbFBsYWNlbWVudFwiLCBcIm5hbWVcIiwgXCJvbkNoYW5nZVwiLCBcInJlcXVpcmVkXCIsIFwic2xvdFByb3BzXCIsIFwidmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgcmVmVHlwZSBmcm9tICdAbXVpL3V0aWxzL3JlZlR5cGUnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgdXNlRm9ybUNvbnRyb2wgfSBmcm9tICcuLi9Gb3JtQ29udHJvbCc7XG5pbXBvcnQgU3RhY2sgZnJvbSAnLi4vU3RhY2snO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnLi4vVHlwb2dyYXBoeSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xMYWJlbENsYXNzZXMsIHsgZ2V0Rm9ybUNvbnRyb2xMYWJlbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtQ29udHJvbExhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlZCxcbiAgICBsYWJlbFBsYWNlbWVudCxcbiAgICBlcnJvcixcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJywgYGxhYmVsUGxhY2VtZW50JHtjYXBpdGFsaXplKGxhYmVsUGxhY2VtZW50KX1gLCBlcnJvciAmJiAnZXJyb3InLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXSxcbiAgICBsYWJlbDogWydsYWJlbCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCddLFxuICAgIGFzdGVyaXNrOiBbJ2FzdGVyaXNrJywgZXJyb3IgJiYgJ2Vycm9yJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtQ29udHJvbExhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBGb3JtQ29udHJvbExhYmVsUm9vdCA9IHN0eWxlZCgnbGFiZWwnLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbExhYmVsJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbe1xuICAgICAgW2AmIC4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmxhYmVsfWBdOiBzdHlsZXMubGFiZWxcbiAgICB9LCBzdHlsZXMucm9vdCwgc3R5bGVzW2BsYWJlbFBsYWNlbWVudCR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLmxhYmVsUGxhY2VtZW50KX1gXV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgLy8gRm9yIGNvcnJlY3QgYWxpZ25tZW50IHdpdGggdGhlIHRleHQuXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgbWFyZ2luTGVmdDogLTExLFxuICBtYXJnaW5SaWdodDogMTYsXG4gIC8vIHVzZWQgZm9yIHJvdyBwcmVzZW50YXRpb24gb2YgcmFkaW8vY2hlY2tib3hcbiAgW2AmLiR7Zm9ybUNvbnRyb2xMYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9XG59LCBvd25lclN0YXRlLmxhYmVsUGxhY2VtZW50ID09PSAnc3RhcnQnICYmIHtcbiAgZmxleERpcmVjdGlvbjogJ3Jvdy1yZXZlcnNlJyxcbiAgbWFyZ2luTGVmdDogMTYsXG4gIC8vIHVzZWQgZm9yIHJvdyBwcmVzZW50YXRpb24gb2YgcmFkaW8vY2hlY2tib3hcbiAgbWFyZ2luUmlnaHQ6IC0xMVxufSwgb3duZXJTdGF0ZS5sYWJlbFBsYWNlbWVudCA9PT0gJ3RvcCcgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uLXJldmVyc2UnLFxuICBtYXJnaW5MZWZ0OiAxNlxufSwgb3duZXJTdGF0ZS5sYWJlbFBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgbWFyZ2luTGVmdDogMTZcbn0sIHtcbiAgW2AmIC4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmxhYmVsfWBdOiB7XG4gICAgW2AmLiR7Zm9ybUNvbnRyb2xMYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LmRpc2FibGVkXG4gICAgfVxuICB9XG59KSk7XG5jb25zdCBBc3Rlcmlza0NvbXBvbmVudCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUZvcm1Db250cm9sTGFiZWwnLFxuICBzbG90OiAnQXN0ZXJpc2snLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5hc3Rlcmlza1xufSkoKHtcbiAgdGhlbWVcbn0pID0+ICh7XG4gIFtgJi4ke2Zvcm1Db250cm9sTGFiZWxDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSkpO1xuXG4vKipcbiAqIERyb3AtaW4gcmVwbGFjZW1lbnQgb2YgdGhlIGBSYWRpb2AsIGBTd2l0Y2hgIGFuZCBgQ2hlY2tib3hgIGNvbXBvbmVudC5cbiAqIFVzZSB0aGlzIGNvbXBvbmVudCBpZiB5b3Ugd2FudCB0byBkaXNwbGF5IGFuIGV4dHJhIGxhYmVsLlxuICovXG5jb25zdCBGb3JtQ29udHJvbExhYmVsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUNvbnRyb2xMYWJlbChpblByb3BzLCByZWYpIHtcbiAgdmFyIF9yZWYsIF9zbG90UHJvcHMkdHlwb2dyYXBoeTtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUNvbnRyb2xMYWJlbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudHNQcm9wcyA9IHt9LFxuICAgICAgY29udHJvbCxcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFByb3AsXG4gICAgICBkaXNhYmxlVHlwb2dyYXBoeSxcbiAgICAgIGxhYmVsOiBsYWJlbFByb3AsXG4gICAgICBsYWJlbFBsYWNlbWVudCA9ICdlbmQnLFxuICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkUHJvcCxcbiAgICAgIHNsb3RQcm9wcyA9IHt9XG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgY29uc3QgZGlzYWJsZWQgPSAoX3JlZiA9IGRpc2FibGVkUHJvcCAhPSBudWxsID8gZGlzYWJsZWRQcm9wIDogY29udHJvbC5wcm9wcy5kaXNhYmxlZCkgIT0gbnVsbCA/IF9yZWYgOiBtdWlGb3JtQ29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogbXVpRm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gIGNvbnN0IHJlcXVpcmVkID0gcmVxdWlyZWRQcm9wICE9IG51bGwgPyByZXF1aXJlZFByb3AgOiBjb250cm9sLnByb3BzLnJlcXVpcmVkO1xuICBjb25zdCBjb250cm9sUHJvcHMgPSB7XG4gICAgZGlzYWJsZWQsXG4gICAgcmVxdWlyZWRcbiAgfTtcbiAgWydjaGVja2VkJywgJ25hbWUnLCAnb25DaGFuZ2UnLCAndmFsdWUnLCAnaW5wdXRSZWYnXS5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKHR5cGVvZiBjb250cm9sLnByb3BzW2tleV0gPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9wc1trZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29udHJvbFByb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydlcnJvciddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgZGlzYWJsZWQsXG4gICAgbGFiZWxQbGFjZW1lbnQsXG4gICAgcmVxdWlyZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvclxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICBjb25zdCB0eXBvZ3JhcGh5U2xvdFByb3BzID0gKF9zbG90UHJvcHMkdHlwb2dyYXBoeSA9IHNsb3RQcm9wcy50eXBvZ3JhcGh5KSAhPSBudWxsID8gX3Nsb3RQcm9wcyR0eXBvZ3JhcGh5IDogY29tcG9uZW50c1Byb3BzLnR5cG9ncmFwaHk7XG4gIGxldCBsYWJlbCA9IGxhYmVsUHJvcDtcbiAgaWYgKGxhYmVsICE9IG51bGwgJiYgbGFiZWwudHlwZSAhPT0gVHlwb2dyYXBoeSAmJiAhZGlzYWJsZVR5cG9ncmFwaHkpIHtcbiAgICBsYWJlbCA9IC8qI19fUFVSRV9fKi9fanN4KFR5cG9ncmFwaHksIF9leHRlbmRzKHtcbiAgICAgIGNvbXBvbmVudDogXCJzcGFuXCJcbiAgICB9LCB0eXBvZ3JhcGh5U2xvdFByb3BzLCB7XG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5sYWJlbCwgdHlwb2dyYXBoeVNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogdHlwb2dyYXBoeVNsb3RQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgY2hpbGRyZW46IGxhYmVsXG4gICAgfSkpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoRm9ybUNvbnRyb2xMYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY29udHJvbCwgY29udHJvbFByb3BzKSwgcmVxdWlyZWQgPyAvKiNfX1BVUkVfXyovX2pzeHMoU3RhY2ssIHtcbiAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIixcbiAgICAgIGNoaWxkcmVuOiBbbGFiZWwsIC8qI19fUFVSRV9fKi9fanN4cyhBc3Rlcmlza0NvbXBvbmVudCwge1xuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5hc3RlcmlzayxcbiAgICAgICAgY2hpbGRyZW46IFtcIlxcdTIwMDlcIiwgJyonXVxuICAgICAgfSldXG4gICAgfSkgOiBsYWJlbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtQ29udHJvbExhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBhcHBlYXJzIHNlbGVjdGVkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwb2dyYXBoeTogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIEEgY29udHJvbCBlbGVtZW50LiBGb3IgaW5zdGFuY2UsIGl0IGNhbiBiZSBhIGBSYWRpb2AsIGEgYFN3aXRjaGAgb3IgYSBgQ2hlY2tib3hgLlxuICAgKi9cbiAgY29udHJvbDogUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyByZW5kZXJlZCBhcyBpdCBpcyBwYXNzZWQgd2l0aG91dCBhbiBhZGRpdGlvbmFsIHR5cG9ncmFwaHkgbm9kZS5cbiAgICovXG4gIGRpc2FibGVUeXBvZ3JhcGh5OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogQSB0ZXh0IG9yIGFuIGVsZW1lbnQgdG8gYmUgdXNlZCBpbiBhbiBlbmNsb3NpbmcgbGFiZWwgZWxlbWVudC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgbGFiZWwuXG4gICAqIEBkZWZhdWx0ICdlbmQnXG4gICAqL1xuICBsYWJlbFBsYWNlbWVudDogUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2VuZCcsICdzdGFydCcsICd0b3AnXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgc3RhdGUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5TeW50aGV0aWNFdmVudH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIFlvdSBjYW4gcHVsbCBvdXQgdGhlIG5ldyBjaGVja2VkIHN0YXRlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LmNoZWNrZWRgIChib29sZWFuKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgYGlucHV0YCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBwcm9wcyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cG9ncmFwaHk6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2xMYWJlbDsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU3RhY2sgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuY29uc3QgU3RhY2sgPSBjcmVhdGVTdGFjayh7XG4gIGNyZWF0ZVN0eWxlZENvbXBvbmVudDogc3R5bGVkKCdkaXYnLCB7XG4gICAgbmFtZTogJ011aVN0YWNrJyxcbiAgICBzbG90OiAnUm9vdCcsXG4gICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxuICB9KSxcbiAgdXNlVGhlbWVQcm9wczogaW5Qcm9wcyA9PiB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpU3RhY2snXG4gIH0pXG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFN0YWNrLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGBmbGV4LWRpcmVjdGlvbmAgc3R5bGUgcHJvcGVydHkuXG4gICAqIEl0IGlzIGFwcGxpZWQgZm9yIGFsbCBzY3JlZW4gc2l6ZXMuXG4gICAqIEBkZWZhdWx0ICdjb2x1bW4nXG4gICAqL1xuICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBBZGQgYW4gZWxlbWVudCBiZXR3ZWVuIGVhY2ggY2hpbGQuXG4gICAqL1xuICBkaXZpZGVyOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHNwYWNlIGJldHdlZW4gaW1tZWRpYXRlIGNoaWxkcmVuLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBzcGFjaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AsIHdoaWNoIGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIENTUyBmbGV4Ym94IGBnYXBgIGlzIHVzZWQgaW5zdGVhZCBvZiBhcHBseWluZyBgbWFyZ2luYCB0byBjaGlsZHJlbi5cbiAgICpcbiAgICogV2hpbGUgQ1NTIGBnYXBgIHJlbW92ZXMgdGhlIFtrbm93biBsaW1pdGF0aW9uc10oaHR0cHM6Ly9tdWkuY29tL2pveS11aS9yZWFjdC1zdGFjay8jbGltaXRhdGlvbnMpLFxuICAgKiBpdCBpcyBub3QgZnVsbHkgc3VwcG9ydGVkIGluIHNvbWUgYnJvd3NlcnMuIFdlIHJlY29tbWVuZCBjaGVja2luZyBodHRwczovL2Nhbml1c2UuY29tLz9zZWFyY2g9ZmxleCUyMGdhcCBiZWZvcmUgdXNpbmcgdGhpcyBmbGFnLlxuICAgKlxuICAgKiBUbyBlbmFibGUgdGhpcyBmbGFnIGdsb2JhbGx5LCBmb2xsb3cgdGhlIFt0aGVtZSdzIGRlZmF1bHQgcHJvcHNdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3RoZW1lLWNvbXBvbmVudHMvI2RlZmF1bHQtcHJvcHMpIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1c2VGbGV4R2FwOiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFN0YWNrOyIsICJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1Db250cm9sTGFiZWxVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUNvbnRyb2xMYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUNvbnRyb2xMYWJlbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGb3JtQ29udHJvbExhYmVsJywgWydyb290JywgJ2xhYmVsUGxhY2VtZW50U3RhcnQnLCAnbGFiZWxQbGFjZW1lbnRUb3AnLCAnbGFiZWxQbGFjZW1lbnRCb3R0b20nLCAnZGlzYWJsZWQnLCAnbGFiZWwnLCAnZXJyb3InLCAncmVxdWlyZWQnLCAnYXN0ZXJpc2snXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtQ29udHJvbExhYmVsQ2xhc3NlczsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwicm93XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGdldEZvcm1Hcm91cFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vZm9ybUdyb3VwQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgcm93LFxuICAgIGVycm9yXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCByb3cgJiYgJ3JvdycsIGVycm9yICYmICdlcnJvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUdyb3VwVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBGb3JtR3JvdXBSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtR3JvdXAnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5yb3cgJiYgc3R5bGVzLnJvd107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgZmxleFdyYXA6ICd3cmFwJ1xufSwgb3duZXJTdGF0ZS5yb3cgJiYge1xuICBmbGV4RGlyZWN0aW9uOiAncm93J1xufSkpO1xuXG4vKipcbiAqIGBGb3JtR3JvdXBgIHdyYXBzIGNvbnRyb2xzIHN1Y2ggYXMgYENoZWNrYm94YCBhbmQgYFN3aXRjaGAuXG4gKiBJdCBwcm92aWRlcyBjb21wYWN0IHJvdyBsYXlvdXQuXG4gKiBGb3IgdGhlIGBSYWRpb2AsIHlvdSBzaG91bGQgYmUgdXNpbmcgdGhlIGBSYWRpb0dyb3VwYCBjb21wb25lbnQgaW5zdGVhZCBvZiB0aGlzIG9uZS5cbiAqL1xuY29uc3QgRm9ybUdyb3VwID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRm9ybUdyb3VwKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtR3JvdXAnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICByb3cgPSBmYWxzZVxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydlcnJvciddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgcm93LFxuICAgIGVycm9yOiBmY3MuZXJyb3JcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Hcm91cFJvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWZcbiAgfSwgb3RoZXIpKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUdyb3VwLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogRGlzcGxheSBncm91cCBvZiBlbGVtZW50cyBpbiBhIGNvbXBhY3Qgcm93LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcm93OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Hcm91cDsiLCAiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtR3JvdXBVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1Hcm91cCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUdyb3VwQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1Hcm91cCcsIFsncm9vdCcsICdyb3cnLCAnZXJyb3InXSk7XG5leHBvcnQgZGVmYXVsdCBmb3JtR3JvdXBDbGFzc2VzOyIsICIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGVja2VkXCIsIFwiY2hlY2tlZEljb25cIiwgXCJjb2xvclwiLCBcImljb25cIiwgXCJuYW1lXCIsIFwib25DaGFuZ2VcIiwgXCJzaXplXCIsIFwiY2xhc3NOYW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHJlZlR5cGUgZnJvbSAnQG11aS91dGlscy9yZWZUeXBlJztcbmltcG9ydCBjb21wb3NlQ2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IGFscGhhIH0gZnJvbSAnQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvcic7XG5pbXBvcnQgU3dpdGNoQmFzZSBmcm9tICcuLi9pbnRlcm5hbC9Td2l0Y2hCYXNlJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBSYWRpb0J1dHRvbkljb24gZnJvbSAnLi9SYWRpb0J1dHRvbkljb24nO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIGZyb20gJy4uL3V0aWxzL2NyZWF0ZUNoYWluZWRGdW5jdGlvbic7XG5pbXBvcnQgdXNlUmFkaW9Hcm91cCBmcm9tICcuLi9SYWRpb0dyb3VwL3VzZVJhZGlvR3JvdXAnO1xuaW1wb3J0IHJhZGlvQ2xhc3NlcywgeyBnZXRSYWRpb1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vcmFkaW9DbGFzc2VzJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29sb3IsXG4gICAgc2l6ZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBzaXplICE9PSAnbWVkaXVtJyAmJiBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXVxuICB9O1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRSYWRpb1V0aWxpdHlDbGFzcywgY2xhc3NlcykpO1xufTtcbmNvbnN0IFJhZGlvUm9vdCA9IHN0eWxlZChTd2l0Y2hCYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlSYWRpbycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnNpemUgIT09ICdtZWRpdW0nICYmIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuc2Vjb25kYXJ5XG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlUmlwcGxlICYmIHtcbiAgJyY6aG92ZXInOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHtvd25lclN0YXRlLmNvbG9yID09PSAnZGVmYXVsdCcgPyB0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZUNoYW5uZWwgOiB0aGVtZS52YXJzLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbkNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKG93bmVyU3RhdGUuY29sb3IgPT09ICdkZWZhdWx0JyA/IHRoZW1lLnBhbGV0dGUuYWN0aW9uLmFjdGl2ZSA6IHRoZW1lLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5KSxcbiAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgIH1cbiAgfVxufSwgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2RlZmF1bHQnICYmIHtcbiAgW2AmLiR7cmFkaW9DbGFzc2VzLmNoZWNrZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpblxuICB9XG59LCB7XG4gIFtgJi4ke3JhZGlvQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgfVxufSkpO1xuZnVuY3Rpb24gYXJlRXF1YWxWYWx1ZXMoYSwgYikge1xuICBpZiAodHlwZW9mIGIgPT09ICdvYmplY3QnICYmIGIgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxuXG4gIC8vIFRoZSB2YWx1ZSBjb3VsZCBiZSBhIG51bWJlciwgdGhlIERPTSB3aWxsIHN0cmluZ2lmeSBpdCBhbnl3YXkuXG4gIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKTtcbn1cbmNvbnN0IGRlZmF1bHRDaGVja2VkSWNvbiA9IC8qI19fUFVSRV9fKi9fanN4KFJhZGlvQnV0dG9uSWNvbiwge1xuICBjaGVja2VkOiB0cnVlXG59KTtcbmNvbnN0IGRlZmF1bHRJY29uID0gLyojX19QVVJFX18qL19qc3goUmFkaW9CdXR0b25JY29uLCB7fSk7XG5jb25zdCBSYWRpbyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFJhZGlvKGluUHJvcHMsIHJlZikge1xuICB2YXIgX2RlZmF1bHRJY29uJHByb3BzJGZvLCBfZGVmYXVsdENoZWNrZWRJY29uJHA7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVJhZGlvJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hlY2tlZDogY2hlY2tlZFByb3AsXG4gICAgICBjaGVja2VkSWNvbiA9IGRlZmF1bHRDaGVja2VkSWNvbixcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgaWNvbiA9IGRlZmF1bHRJY29uLFxuICAgICAgbmFtZTogbmFtZVByb3AsXG4gICAgICBvbkNoYW5nZTogb25DaGFuZ2VQcm9wLFxuICAgICAgc2l6ZSA9ICdtZWRpdW0nLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBzaXplXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHJhZGlvR3JvdXAgPSB1c2VSYWRpb0dyb3VwKCk7XG4gIGxldCBjaGVja2VkID0gY2hlY2tlZFByb3A7XG4gIGNvbnN0IG9uQ2hhbmdlID0gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKG9uQ2hhbmdlUHJvcCwgcmFkaW9Hcm91cCAmJiByYWRpb0dyb3VwLm9uQ2hhbmdlKTtcbiAgbGV0IG5hbWUgPSBuYW1lUHJvcDtcbiAgaWYgKHJhZGlvR3JvdXApIHtcbiAgICBpZiAodHlwZW9mIGNoZWNrZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjaGVja2VkID0gYXJlRXF1YWxWYWx1ZXMocmFkaW9Hcm91cC52YWx1ZSwgcHJvcHMudmFsdWUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG5hbWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBuYW1lID0gcmFkaW9Hcm91cC5uYW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmFkaW9Sb290LCBfZXh0ZW5kcyh7XG4gICAgdHlwZTogXCJyYWRpb1wiLFxuICAgIGljb246IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoaWNvbiwge1xuICAgICAgZm9udFNpemU6IChfZGVmYXVsdEljb24kcHJvcHMkZm8gPSBkZWZhdWx0SWNvbi5wcm9wcy5mb250U2l6ZSkgIT0gbnVsbCA/IF9kZWZhdWx0SWNvbiRwcm9wcyRmbyA6IHNpemVcbiAgICB9KSxcbiAgICBjaGVja2VkSWNvbjogLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGVja2VkSWNvbiwge1xuICAgICAgZm9udFNpemU6IChfZGVmYXVsdENoZWNrZWRJY29uJHAgPSBkZWZhdWx0Q2hlY2tlZEljb24ucHJvcHMuZm9udFNpemUpICE9IG51bGwgPyBfZGVmYXVsdENoZWNrZWRJY29uJHAgOiBzaXplXG4gICAgfSksXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgY2hlY2tlZDogY2hlY2tlZCxcbiAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgcmVmOiByZWYsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlcikpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSYWRpby5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gXHUyNTBDXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwIFdhcm5pbmcgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTEwXG4gIC8vIFx1MjUwMiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIFx1MjUwMlxuICAvLyBcdTI1MDIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICBcdTI1MDJcbiAgLy8gXHUyNTE0XHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTE4XG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgY2hlY2tlZC5cbiAgICovXG4gIGNoZWNrZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSB3aGVuIHRoZSBjb21wb25lbnQgaXMgY2hlY2tlZC5cbiAgICogQGRlZmF1bHQgPFJhZGlvQnV0dG9uSWNvbiBjaGVja2VkIC8+XG4gICAqL1xuICBjaGVja2VkSWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkZWZhdWx0JywgJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ2Vycm9yJywgJ2luZm8nLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWNvbiB0byBkaXNwbGF5IHdoZW4gdGhlIGNvbXBvbmVudCBpcyB1bmNoZWNrZWQuXG4gICAqIEBkZWZhdWx0IDxSYWRpb0J1dHRvbkljb24gLz5cbiAgICovXG4gIGljb246IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFtBdHRyaWJ1dGVzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjQXR0cmlidXRlcykgYXBwbGllZCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFBhc3MgYSByZWYgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IGNoZWNrZWQgc3RhdGUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQuY2hlY2tlZGAgKGJvb2xlYW4pLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSByYWRpbyBzdHlsaW5nLlxuICAgKiBAZGVmYXVsdCAnbWVkaXVtJ1xuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LiBUaGUgRE9NIEFQSSBjYXN0cyB0aGlzIHRvIGEgc3RyaW5nLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBSYWRpbzsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmFkaW9CdXR0b25VbmNoZWNrZWRJY29uIGZyb20gJy4uL2ludGVybmFsL3N2Zy1pY29ucy9SYWRpb0J1dHRvblVuY2hlY2tlZCc7XG5pbXBvcnQgUmFkaW9CdXR0b25DaGVja2VkSWNvbiBmcm9tICcuLi9pbnRlcm5hbC9zdmctaWNvbnMvUmFkaW9CdXR0b25DaGVja2VkJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUmFkaW9CdXR0b25JY29uUm9vdCA9IHN0eWxlZCgnc3BhbicsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSkoe1xuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgZGlzcGxheTogJ2ZsZXgnXG59KTtcbmNvbnN0IFJhZGlvQnV0dG9uSWNvbkJhY2tncm91bmQgPSBzdHlsZWQoUmFkaW9CdXR0b25VbmNoZWNrZWRJY29uKSh7XG4gIC8vIFNjYWxlIGFwcGxpZWQgdG8gcHJldmVudCBkb3QgbWlzYWxpZ25tZW50IGluIFNhZmFyaVxuICB0cmFuc2Zvcm06ICdzY2FsZSgxKSdcbn0pO1xuY29uc3QgUmFkaW9CdXR0b25JY29uRG90ID0gc3R5bGVkKFJhZGlvQnV0dG9uQ2hlY2tlZEljb24pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGxlZnQ6IDAsXG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICB0cmFuc2Zvcm06ICdzY2FsZSgwKScsXG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbixcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlc3RcbiAgfSlcbn0sIG93bmVyU3RhdGUuY2hlY2tlZCAmJiB7XG4gIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd0cmFuc2Zvcm0nLCB7XG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dCxcbiAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlc3RcbiAgfSlcbn0pKTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiBSYWRpb0J1dHRvbkljb24ocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoZWNrZWQgPSBmYWxzZSxcbiAgICBjbGFzc2VzID0ge30sXG4gICAgZm9udFNpemVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2hlY2tlZFxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSYWRpb0J1dHRvbkljb25Sb290LCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLnJvb3QsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjaGlsZHJlbjogWy8qI19fUFVSRV9fKi9fanN4KFJhZGlvQnV0dG9uSWNvbkJhY2tncm91bmQsIHtcbiAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5iYWNrZ3JvdW5kLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZVxuICAgIH0pLCAvKiNfX1BVUkVfXyovX2pzeChSYWRpb0J1dHRvbkljb25Eb3QsIHtcbiAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5kb3QsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSldXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUmFkaW9CdXR0b25JY29uLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBjaGVja2VkLlxuICAgKi9cbiAgY2hlY2tlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogYHNtYWxsYCBpcyBlcXVpdmFsZW50IHRvIHRoZSBkZW5zZSByYWRpbyBzdHlsaW5nLlxuICAgKi9cbiAgZm9udFNpemU6IFByb3BUeXBlcy5vbmVPZihbJ3NtYWxsJywgJ21lZGl1bSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJhZGlvQnV0dG9uSWNvbjsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6XCJcbn0pLCAnUmFkaW9CdXR0b25VbmNoZWNrZWQnKTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY3JlYXRlU3ZnSWNvbiBmcm9tICcuLi8uLi91dGlscy9jcmVhdGVTdmdJY29uJztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU3ZnSWNvbiggLyojX19QVVJFX18qL19qc3goXCJwYXRoXCIsIHtcbiAgZDogXCJNOC40NjUgOC40NjVDOS4zNyA3LjU2IDEwLjYyIDcgMTIgN0MxNC43NiA3IDE3IDkuMjQgMTcgMTJDMTcgMTMuMzggMTYuNDQgMTQuNjMgMTUuNTM1IDE1LjUzNUMxNC42MyAxNi40NCAxMy4zOCAxNyAxMiAxN0M5LjI0IDE3IDcgMTQuNzYgNyAxMkM3IDEwLjYyIDcuNTYgOS4zNyA4LjQ2NSA4LjQ2NVpcIlxufSksICdSYWRpb0J1dHRvbkNoZWNrZWQnKTsiLCAiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmFkaW9Hcm91cENvbnRleHQgZnJvbSAnLi9SYWRpb0dyb3VwQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VSYWRpb0dyb3VwKCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChSYWRpb0dyb3VwQ29udGV4dCk7XG59IiwgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgUmFkaW9Hcm91cENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmFkaW9Hcm91cENvbnRleHQuZGlzcGxheU5hbWUgPSAnUmFkaW9Hcm91cENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgUmFkaW9Hcm91cENvbnRleHQ7IiwgImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFkaW9VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVJhZGlvJywgc2xvdCk7XG59XG5jb25zdCByYWRpb0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlSYWRpbycsIFsncm9vdCcsICdjaGVja2VkJywgJ2Rpc2FibGVkJywgJ2NvbG9yUHJpbWFyeScsICdjb2xvclNlY29uZGFyeScsICdzaXplU21hbGwnXSk7XG5leHBvcnQgZGVmYXVsdCByYWRpb0NsYXNzZXM7IiwgIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFjdGlvbnNcIiwgXCJjaGlsZHJlblwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcIm5hbWVcIiwgXCJvbkNoYW5nZVwiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBGb3JtR3JvdXAgZnJvbSAnLi4vRm9ybUdyb3VwJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUNvbnRyb2xsZWQgZnJvbSAnLi4vdXRpbHMvdXNlQ29udHJvbGxlZCc7XG5pbXBvcnQgUmFkaW9Hcm91cENvbnRleHQgZnJvbSAnLi9SYWRpb0dyb3VwQ29udGV4dCc7XG5pbXBvcnQgdXNlSWQgZnJvbSAnLi4vdXRpbHMvdXNlSWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFJhZGlvR3JvdXAgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBSYWRpb0dyb3VwKHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgLy8gcHJpdmF0ZVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L3Byb3AtdHlwZXNcbiAgICAgIGFjdGlvbnMsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIG5hbWU6IG5hbWVQcm9wLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICB2YWx1ZTogdmFsdWVQcm9wXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJvb3RSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVTdGF0ZV0gPSB1c2VDb250cm9sbGVkKHtcbiAgICBjb250cm9sbGVkOiB2YWx1ZVByb3AsXG4gICAgZGVmYXVsdDogZGVmYXVsdFZhbHVlLFxuICAgIG5hbWU6ICdSYWRpb0dyb3VwJ1xuICB9KTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb25zLCAoKSA9PiAoe1xuICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICBsZXQgaW5wdXQgPSByb290UmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcignaW5wdXQ6bm90KDpkaXNhYmxlZCk6Y2hlY2tlZCcpO1xuICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICBpbnB1dCA9IHJvb3RSZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dDpub3QoOmRpc2FibGVkKScpO1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9KSwgW10pO1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgcm9vdFJlZik7XG4gIGNvbnN0IG5hbWUgPSB1c2VJZChuYW1lUHJvcCk7XG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBuYW1lLFxuICAgIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICBzZXRWYWx1ZVN0YXRlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoZXZlbnQsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZVxuICB9KSwgW25hbWUsIG9uQ2hhbmdlLCBzZXRWYWx1ZVN0YXRlLCB2YWx1ZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUmFkaW9Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY29udGV4dFZhbHVlLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChGb3JtR3JvdXAsIF9leHRlbmRzKHtcbiAgICAgIHJvbGU6IFwicmFkaW9ncm91cFwiLFxuICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBSYWRpb0dyb3VwLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyBcdTI1MENcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDAgV2FybmluZyBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MTBcbiAgLy8gXHUyNTAyIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4gXHUyNTAyXG4gIC8vIFx1MjUwMiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIFx1MjUwMlxuICAvLyBcdTI1MTRcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MThcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIFRoZSBuYW1lIHVzZWQgdG8gcmVmZXJlbmNlIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbC5cbiAgICogSWYgeW91IGRvbid0IHByb3ZpZGUgdGhpcyBwcm9wLCBpdCBmYWxscyBiYWNrIHRvIGEgcmFuZG9tbHkgZ2VuZXJhdGVkIG5hbWUuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIHJhZGlvIGJ1dHRvbiBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50Pn0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIHJhZGlvIGJ1dHRvbi5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBzZWxlY3RlZCByYWRpbyBidXR0b24uIFRoZSBET00gQVBJIGNhc3RzIHRoaXMgdG8gYSBzdHJpbmcuXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLmFueVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IFJhZGlvR3JvdXA7IiwgImltcG9ydCB7IGNyZWF0ZVRoZW1lIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcblxuZXhwb3J0IGNvbnN0IHRoZW1lID0gY3JlYXRlVGhlbWUoe1xuICBwYWxldHRlOiB7XG4gICAgcHJpbWFyeToge1xuICAgICAgbWFpbjogXCIjMDA4MjdjXCIsXG4gICAgfSxcbiAgfSxcbn0pO1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE5vZGUoe1xuICBleHBhbmRhYmxlLFxuICBleHBhbmRlZCxcbiAgaGlnaGxpZ2h0LFxuICBpc0xhc3QsXG4gIGNoaWxkcmVuLFxuICBvbkNsaWNrLFxufToge1xuICBleHBhbmRhYmxlOiBib29sZWFuO1xuICBleHBhbmRlZDogYm9vbGVhbjtcbiAgaGlnaGxpZ2h0OiBib29sZWFuO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBhbnk7XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG59KSB7XG4gIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW1wianN0cmVlLW5vZGVcIl07XG5cbiAgaWYgKGV4cGFuZGVkKSB7XG4gICAgY2xhc3Nlcy5wdXNoKFwianN0cmVlLW9wZW5cIik7XG4gIH0gZWxzZSB7XG4gICAgY2xhc3Nlcy5wdXNoKFwianN0cmVlLWNsb3NlZFwiKTtcbiAgfVxuXG4gIGlmICghZXhwYW5kYWJsZSkge1xuICAgIGNsYXNzZXMucHVzaChcImpzdHJlZS1sZWFmXCIpO1xuICB9XG5cbiAgaWYgKGlzTGFzdCkge1xuICAgIGNsYXNzZXMucHVzaChcImpzdHJlZS1sYXN0XCIpO1xuICB9XG5cbiAgaWYgKGhpZ2hsaWdodCkge1xuICAgIGNoaWxkcmVuID0gPHNwYW4gY2xhc3NOYW1lPVwianN0cmVlLWNsaWNrZWRcIj57Y2hpbGRyZW59PC9zcGFuPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGxpIHJvbGU9XCJ0cmVlaXRlbVwiIGNsYXNzTmFtZT17Y2xhc3Nlcy5qb2luKFwiIFwiKX0+XG4gICAgICA8aVxuICAgICAgICBjbGFzc05hbWU9XCJqc3RyZWUtaWNvbiBqc3RyZWUtb2NsXCJcbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGk+XG4gICk7XG59XG4iLCAiZXhwb3J0IHZhciBTdWJzY3JpYmFibGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdWJzY3JpYmFibGUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdWJzY3JpYmFibGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNhbGxiYWNrID0gbGlzdGVuZXIgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChjYWxsYmFjayk7XG4gICAgdGhpcy5vblN1YnNjcmliZSgpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5saXN0ZW5lcnMgPSBfdGhpcy5saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBjYWxsYmFjaztcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5vblVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8uaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gaGFzTGlzdGVuZXJzKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5sZW5ndGggPiAwO1xuICB9O1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkgey8vIERvIG5vdGhpbmdcbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7Ly8gRG8gbm90aGluZ1xuICB9O1xuXG4gIHJldHVybiBTdWJzY3JpYmFibGU7XG59KCk7IiwgImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuLy8gVFlQRVNcbi8vIFVUSUxTXG5leHBvcnQgdmFyIGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpIHtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIGlucHV0KSB7XG4gIHJldHVybiB0eXBlb2YgdXBkYXRlciA9PT0gJ2Z1bmN0aW9uJyA/IHVwZGF0ZXIoaW5wdXQpIDogdXBkYXRlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGltZW91dCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSA+PSAwICYmIHZhbHVlICE9PSBJbmZpbml0eTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVRdWVyeUtleUFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlKGFycmF5MSwgYXJyYXkyKSB7XG4gIHJldHVybiBhcnJheTEuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIGFycmF5Mi5pbmRleE9mKHgpID09PSAtMTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUF0KGFycmF5LCBpbmRleCwgdmFsdWUpIHtcbiAgdmFyIGNvcHkgPSBhcnJheS5zbGljZSgwKTtcbiAgY29weVtpbmRleF0gPSB2YWx1ZTtcbiAgcmV0dXJuIGNvcHk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGltZVVudGlsU3RhbGUodXBkYXRlZEF0LCBzdGFsZVRpbWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KHVwZGF0ZWRBdCArIChzdGFsZVRpbWUgfHwgMCkgLSBEYXRlLm5vdygpLCAwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIGlmICghaXNRdWVyeUtleShhcmcxKSkge1xuICAgIHJldHVybiBhcmcxO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmczLCB7XG4gICAgICBxdWVyeUtleTogYXJnMSxcbiAgICAgIHF1ZXJ5Rm46IGFyZzJcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIHF1ZXJ5S2V5OiBhcmcxXG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25BcmdzKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgaWYgKGlzUXVlcnlLZXkoYXJnMSkpIHtcbiAgICBpZiAodHlwZW9mIGFyZzIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgYXJnMywge1xuICAgICAgICBtdXRhdGlvbktleTogYXJnMSxcbiAgICAgICAgbXV0YXRpb25GbjogYXJnMlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbktleTogYXJnMVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhcmcxID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgICBtdXRhdGlvbkZuOiBhcmcxXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGFyZzEpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gIHJldHVybiBpc1F1ZXJ5S2V5KGFyZzEpID8gW19leHRlbmRzKHt9LCBhcmcyLCB7XG4gICAgcXVlcnlLZXk6IGFyZzFcbiAgfSksIGFyZzNdIDogW2FyZzEgfHwge30sIGFyZzJdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXV0YXRpb25GaWx0ZXJBcmdzKGFyZzEsIGFyZzIpIHtcbiAgcmV0dXJuIGlzUXVlcnlLZXkoYXJnMSkgPyBfZXh0ZW5kcyh7fSwgYXJnMiwge1xuICAgIG11dGF0aW9uS2V5OiBhcmcxXG4gIH0pIDogYXJnMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXBRdWVyeVN0YXR1c0ZpbHRlcihhY3RpdmUsIGluYWN0aXZlKSB7XG4gIGlmIChhY3RpdmUgPT09IHRydWUgJiYgaW5hY3RpdmUgPT09IHRydWUgfHwgYWN0aXZlID09IG51bGwgJiYgaW5hY3RpdmUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnYWxsJztcbiAgfSBlbHNlIGlmIChhY3RpdmUgPT09IGZhbHNlICYmIGluYWN0aXZlID09PSBmYWxzZSkge1xuICAgIHJldHVybiAnbm9uZSc7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYWN0aXZlfGluYWN0aXZlIGNhbiBvbmx5IGJlIHRydWV8ZmFsc2Ugb3IgZmFsc2V8dHJ1ZVxuICAgIC8vIHNvLCB3aGVuIG9ubHkgb25lIHZhbHVlIGlzIHByb3ZpZGVkLCB0aGUgbWlzc2luZyBvbmUgaGFzIHRvIGJlIHRoZSBuZWdhdGVkIHZhbHVlXG4gICAgdmFyIGlzQWN0aXZlID0gYWN0aXZlICE9IG51bGwgPyBhY3RpdmUgOiAhaW5hY3RpdmU7XG4gICAgcmV0dXJuIGlzQWN0aXZlID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSkge1xuICB2YXIgYWN0aXZlID0gZmlsdGVycy5hY3RpdmUsXG4gICAgICBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBpbmFjdGl2ZSA9IGZpbHRlcnMuaW5hY3RpdmUsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIHF1ZXJ5S2V5ID0gZmlsdGVycy5xdWVyeUtleSxcbiAgICAgIHN0YWxlID0gZmlsdGVycy5zdGFsZTtcblxuICBpZiAoaXNRdWVyeUtleShxdWVyeUtleSkpIHtcbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChxdWVyeS5xdWVyeUhhc2ggIT09IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgcXVlcnkub3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShxdWVyeS5xdWVyeUtleSwgcXVlcnlLZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFyIHF1ZXJ5U3RhdHVzRmlsdGVyID0gbWFwUXVlcnlTdGF0dXNGaWx0ZXIoYWN0aXZlLCBpbmFjdGl2ZSk7XG5cbiAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnbm9uZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAocXVlcnlTdGF0dXNGaWx0ZXIgIT09ICdhbGwnKSB7XG4gICAgdmFyIGlzQWN0aXZlID0gcXVlcnkuaXNBY3RpdmUoKTtcblxuICAgIGlmIChxdWVyeVN0YXR1c0ZpbHRlciA9PT0gJ2FjdGl2ZScgJiYgIWlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5U3RhdHVzRmlsdGVyID09PSAnaW5hY3RpdmUnICYmIGlzQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBzdGFsZSA9PT0gJ2Jvb2xlYW4nICYmIHF1ZXJ5LmlzU3RhbGUoKSAhPT0gc3RhbGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgcXVlcnkuaXNGZXRjaGluZygpICE9PSBmZXRjaGluZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcmVkaWNhdGUgJiYgIXByZWRpY2F0ZShxdWVyeSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKSB7XG4gIHZhciBleGFjdCA9IGZpbHRlcnMuZXhhY3QsXG4gICAgICBmZXRjaGluZyA9IGZpbHRlcnMuZmV0Y2hpbmcsXG4gICAgICBwcmVkaWNhdGUgPSBmaWx0ZXJzLnByZWRpY2F0ZSxcbiAgICAgIG11dGF0aW9uS2V5ID0gZmlsdGVycy5tdXRhdGlvbktleTtcblxuICBpZiAoaXNRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICBpZiAoIW11dGF0aW9uLm9wdGlvbnMubXV0YXRpb25LZXkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIGlmIChoYXNoUXVlcnlLZXkobXV0YXRpb24ub3B0aW9ucy5tdXRhdGlvbktleSkgIT09IGhhc2hRdWVyeUtleShtdXRhdGlvbktleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWxNYXRjaEtleShtdXRhdGlvbi5vcHRpb25zLm11dGF0aW9uS2V5LCBtdXRhdGlvbktleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGZldGNoaW5nID09PSAnYm9vbGVhbicgJiYgbXV0YXRpb24uc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZycgIT09IGZldGNoaW5nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZWRpY2F0ZSAmJiAhcHJlZGljYXRlKG11dGF0aW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhxdWVyeUtleSwgb3B0aW9ucykge1xuICB2YXIgaGFzaEZuID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucXVlcnlLZXlIYXNoRm4pIHx8IGhhc2hRdWVyeUtleTtcbiAgcmV0dXJuIGhhc2hGbihxdWVyeUtleSk7XG59XG4vKipcbiAqIERlZmF1bHQgcXVlcnkga2V5cyBoYXNoIGZ1bmN0aW9uLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoUXVlcnlLZXkocXVlcnlLZXkpIHtcbiAgdmFyIGFzQXJyYXkgPSBlbnN1cmVRdWVyeUtleUFycmF5KHF1ZXJ5S2V5KTtcbiAgcmV0dXJuIHN0YWJsZVZhbHVlSGFzaChhc0FycmF5KTtcbn1cbi8qKlxuICogSGFzaGVzIHRoZSB2YWx1ZSBpbnRvIGEgc3RhYmxlIGhhc2guXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YWJsZVZhbHVlSGFzaCh2YWx1ZSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIGZ1bmN0aW9uIChfLCB2YWwpIHtcbiAgICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWwpID8gT2JqZWN0LmtleXModmFsKS5zb3J0KCkucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWxba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pIDogdmFsO1xuICB9KTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGtleSBgYmAgcGFydGlhbGx5IG1hdGNoZXMgd2l0aCBrZXkgYGFgLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsTWF0Y2hLZXkoYSwgYikge1xuICByZXR1cm4gcGFydGlhbERlZXBFcXVhbChlbnN1cmVRdWVyeUtleUFycmF5KGEpLCBlbnN1cmVRdWVyeUtleUFycmF5KGIpKTtcbn1cbi8qKlxuICogQ2hlY2tzIGlmIGBiYCBwYXJ0aWFsbHkgbWF0Y2hlcyB3aXRoIGBhYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbERlZXBFcXVhbChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGEgJiYgYiAmJiB0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuICFPYmplY3Qua2V5cyhiKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJldHVybiAhcGFydGlhbERlZXBFcXVhbChhW2tleV0sIGJba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBgYWAgaWYgYGJgIGlzIGRlZXBseSBlcXVhbC5cbiAqIElmIG5vdCwgaXQgd2lsbCByZXBsYWNlIGFueSBkZWVwbHkgZXF1YWwgY2hpbGRyZW4gb2YgYGJgIHdpdGggdGhvc2Ugb2YgYGFgLlxuICogVGhpcyBjYW4gYmUgdXNlZCBmb3Igc3RydWN0dXJhbCBzaGFyaW5nIGJldHdlZW4gSlNPTiB2YWx1ZXMgZm9yIGV4YW1wbGUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VFcXVhbERlZXAoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiBhO1xuICB9XG5cbiAgdmFyIGFycmF5ID0gQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpO1xuXG4gIGlmIChhcnJheSB8fCBpc1BsYWluT2JqZWN0KGEpICYmIGlzUGxhaW5PYmplY3QoYikpIHtcbiAgICB2YXIgYVNpemUgPSBhcnJheSA/IGEubGVuZ3RoIDogT2JqZWN0LmtleXMoYSkubGVuZ3RoO1xuICAgIHZhciBiSXRlbXMgPSBhcnJheSA/IGIgOiBPYmplY3Qua2V5cyhiKTtcbiAgICB2YXIgYlNpemUgPSBiSXRlbXMubGVuZ3RoO1xuICAgIHZhciBjb3B5ID0gYXJyYXkgPyBbXSA6IHt9O1xuICAgIHZhciBlcXVhbEl0ZW1zID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYlNpemU7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGFycmF5ID8gaSA6IGJJdGVtc1tpXTtcbiAgICAgIGNvcHlba2V5XSA9IHJlcGxhY2VFcXVhbERlZXAoYVtrZXldLCBiW2tleV0pO1xuXG4gICAgICBpZiAoY29weVtrZXldID09PSBhW2tleV0pIHtcbiAgICAgICAgZXF1YWxJdGVtcysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhU2l6ZSA9PT0gYlNpemUgJiYgZXF1YWxJdGVtcyA9PT0gYVNpemUgPyBhIDogY29weTtcbiAgfVxuXG4gIHJldHVybiBiO1xufVxuLyoqXG4gKiBTaGFsbG93IGNvbXBhcmUgb2JqZWN0cy4gT25seSB3b3JrcyB3aXRoIG9iamVjdHMgdGhhdCBhbHdheXMgaGF2ZSB0aGUgc2FtZSBwcm9wZXJ0aWVzLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWxPYmplY3RzKGEsIGIpIHtcbiAgaWYgKGEgJiYgIWIgfHwgYiAmJiAhYSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGtleSBpbiBhKSB7XG4gICAgaWYgKGFba2V5XSAhPT0gYltrZXldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59IC8vIENvcGllZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1wbGFpbi1vYmplY3RcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShvKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBoYXMgbW9kaWZpZWQgY29uc3RydWN0b3JcblxuXG4gIHZhciBjdG9yID0gby5jb25zdHJ1Y3RvcjtcblxuICBpZiAodHlwZW9mIGN0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSWYgaGFzIG1vZGlmaWVkIHByb3RvdHlwZVxuXG5cbiAgdmFyIHByb3QgPSBjdG9yLnByb3RvdHlwZTtcblxuICBpZiAoIWhhc09iamVjdFByb3RvdHlwZShwcm90KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGFuIE9iamVjdC1zcGVjaWZpYyBtZXRob2RcblxuXG4gIGlmICghcHJvdC5oYXNPd25Qcm9wZXJ0eSgnaXNQcm90b3R5cGVPZicpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIE1vc3QgbGlrZWx5IGEgcGxhaW4gT2JqZWN0XG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGFzT2JqZWN0UHJvdG90eXBlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1F1ZXJ5S2V5KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRXJyb3I7XG59XG5leHBvcnQgZnVuY3Rpb24gc2xlZXAodGltZW91dCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXQpO1xuICB9KTtcbn1cbi8qKlxuICogU2NoZWR1bGVzIGEgbWljcm90YXNrLlxuICogVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHNjaGVkdWxlIHN0YXRlIHVwZGF0ZXMgYWZ0ZXIgcmVuZGVyaW5nLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZU1pY3JvdGFzayhjYWxsYmFjaykge1xuICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGNhbGxiYWNrKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJvcnRDb250cm9sbGVyKCkge1xuICBpZiAodHlwZW9mIEFib3J0Q29udHJvbGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIH1cbn0iLCAiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG5pbXBvcnQgeyBpc1NlcnZlciB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHZhciBGb2N1c01hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoRm9jdXNNYW5hZ2VyLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBGb2N1c01hbmFnZXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcblxuICAgIF90aGlzLnNldHVwID0gZnVuY3Rpb24gKG9uRm9jdXMpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uRm9jdXMoKTtcbiAgICAgICAgfTsgLy8gTGlzdGVuIHRvIHZpc2liaWxsaXR5Y2hhbmdlIGFuZCBmb2N1c1xuXG5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIEJlIHN1cmUgdG8gdW5zdWJzY3JpYmUgaWYgYSBuZXcgaGFuZGxlciBpcyBzZXRcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGxpc3RlbmVyKTtcbiAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBGb2N1c01hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5vblN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCkge1xuICAgIGlmICghdGhpcy5jbGVhbnVwKSB7XG4gICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIodGhpcy5zZXR1cCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vblVuc3Vic2NyaWJlID0gZnVuY3Rpb24gb25VbnN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCkpIHtcbiAgICAgIHZhciBfdGhpcyRjbGVhbnVwO1xuXG4gICAgICAoX3RoaXMkY2xlYW51cCA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXMuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNldEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiBzZXRFdmVudExpc3RlbmVyKHNldHVwKSB7XG4gICAgdmFyIF90aGlzJGNsZWFudXAyLFxuICAgICAgICBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5zZXR1cCA9IHNldHVwO1xuICAgIChfdGhpcyRjbGVhbnVwMiA9IHRoaXMuY2xlYW51cCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJGNsZWFudXAyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5jbGVhbnVwID0gc2V0dXAoZnVuY3Rpb24gKGZvY3VzZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgZm9jdXNlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIF90aGlzMi5zZXRGb2N1c2VkKGZvY3VzZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0Rm9jdXNlZCA9IGZ1bmN0aW9uIHNldEZvY3VzZWQoZm9jdXNlZCkge1xuICAgIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XG5cbiAgICBpZiAoZm9jdXNlZCkge1xuICAgICAgdGhpcy5vbkZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5vbkZvY3VzID0gZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uaXNGb2N1c2VkID0gZnVuY3Rpb24gaXNGb2N1c2VkKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5mb2N1c2VkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvY3VzZWQ7XG4gICAgfSAvLyBkb2N1bWVudCBnbG9iYWwgY2FuIGJlIHVuYXZhaWxhYmxlIGluIHJlYWN0IG5hdGl2ZVxuXG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFt1bmRlZmluZWQsICd2aXNpYmxlJywgJ3ByZXJlbmRlciddLmluY2x1ZGVzKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSk7XG4gIH07XG5cbiAgcmV0dXJuIEZvY3VzTWFuYWdlcjtcbn0oU3Vic2NyaWJhYmxlKTtcbmV4cG9ydCB2YXIgZm9jdXNNYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpOyIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJztcbmltcG9ydCB7IGlzU2VydmVyIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgdmFyIE9ubGluZU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9TdWJzY3JpYmFibGUpIHtcbiAgX2luaGVyaXRzTG9vc2UoT25saW5lTWFuYWdlciwgX1N1YnNjcmliYWJsZSk7XG5cbiAgZnVuY3Rpb24gT25saW5lTWFuYWdlcigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9TdWJzY3JpYmFibGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuc2V0dXAgPSBmdW5jdGlvbiAob25PbmxpbmUpIHtcbiAgICAgIHZhciBfd2luZG93O1xuXG4gICAgICBpZiAoIWlzU2VydmVyICYmICgoX3dpbmRvdyA9IHdpbmRvdykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uT25saW5lKCk7XG4gICAgICAgIH07IC8vIExpc3RlbiB0byBvbmxpbmVcblxuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb2ZmbGluZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQmUgc3VyZSB0byB1bnN1YnNjcmliZSBpZiBhIG5ldyBoYW5kbGVyIGlzIHNldFxuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBPbmxpbmVNYW5hZ2VyLnByb3RvdHlwZTtcblxuICBfcHJvdG8ub25TdWJzY3JpYmUgPSBmdW5jdGlvbiBvblN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMuY2xlYW51cCkge1xuICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKHRoaXMuc2V0dXApO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub25VbnN1YnNjcmliZSA9IGZ1bmN0aW9uIG9uVW5zdWJzY3JpYmUoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygpKSB7XG4gICAgICB2YXIgX3RoaXMkY2xlYW51cDtcblxuICAgICAgKF90aGlzJGNsZWFudXAgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwLmNhbGwodGhpcyk7XG4gICAgICB0aGlzLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gc2V0RXZlbnRMaXN0ZW5lcihzZXR1cCkge1xuICAgIHZhciBfdGhpcyRjbGVhbnVwMixcbiAgICAgICAgX3RoaXMyID0gdGhpcztcblxuICAgIHRoaXMuc2V0dXAgPSBzZXR1cDtcbiAgICAoX3RoaXMkY2xlYW51cDIgPSB0aGlzLmNsZWFudXApID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRjbGVhbnVwMi5jYWxsKHRoaXMpO1xuICAgIHRoaXMuY2xlYW51cCA9IHNldHVwKGZ1bmN0aW9uIChvbmxpbmUpIHtcbiAgICAgIGlmICh0eXBlb2Ygb25saW5lID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgX3RoaXMyLnNldE9ubGluZShvbmxpbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMyLm9uT25saW5lKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE9ubGluZSA9IGZ1bmN0aW9uIHNldE9ubGluZShvbmxpbmUpIHtcbiAgICB0aGlzLm9ubGluZSA9IG9ubGluZTtcblxuICAgIGlmIChvbmxpbmUpIHtcbiAgICAgIHRoaXMub25PbmxpbmUoKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzT25saW5lID0gZnVuY3Rpb24gaXNPbmxpbmUoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLm9ubGluZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5vbmxpbmU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBuYXZpZ2F0b3Iub25MaW5lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvci5vbkxpbmU7XG4gIH07XG5cbiAgcmV0dXJuIE9ubGluZU1hbmFnZXI7XG59KFN1YnNjcmliYWJsZSk7XG5leHBvcnQgdmFyIG9ubGluZU1hbmFnZXIgPSBuZXcgT25saW5lTWFuYWdlcigpOyIsICJpbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi91dGlscyc7XG5cbmZ1bmN0aW9uIGRlZmF1bHRSZXRyeURlbGF5KGZhaWx1cmVDb3VudCkge1xuICByZXR1cm4gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIGZhaWx1cmVDb3VudCksIDMwMDAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mICh2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuY2FuY2VsKSA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydCB2YXIgQ2FuY2VsbGVkRXJyb3IgPSBmdW5jdGlvbiBDYW5jZWxsZWRFcnJvcihvcHRpb25zKSB7XG4gIHRoaXMucmV2ZXJ0ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZXZlcnQ7XG4gIHRoaXMuc2lsZW50ID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5zaWxlbnQ7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FuY2VsbGVkRXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQ2FuY2VsbGVkRXJyb3I7XG59IC8vIENMQVNTXG5cbmV4cG9ydCB2YXIgUmV0cnllciA9IGZ1bmN0aW9uIFJldHJ5ZXIoY29uZmlnKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIHZhciBjYW5jZWxGbjtcbiAgdmFyIGNvbnRpbnVlRm47XG4gIHZhciBwcm9taXNlUmVzb2x2ZTtcbiAgdmFyIHByb21pc2VSZWplY3Q7XG4gIHRoaXMuYWJvcnQgPSBjb25maWcuYWJvcnQ7XG5cbiAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbiAoY2FuY2VsT3B0aW9ucykge1xuICAgIHJldHVybiBjYW5jZWxGbiA9PSBudWxsID8gdm9pZCAwIDogY2FuY2VsRm4oY2FuY2VsT3B0aW9ucyk7XG4gIH07XG5cbiAgdGhpcy5jYW5jZWxSZXRyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjYW5jZWxSZXRyeSA9IHRydWU7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZVJldHJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIGNhbmNlbFJldHJ5ID0gZmFsc2U7XG4gIH07XG5cbiAgdGhpcy5jb250aW51ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICB9O1xuXG4gIHRoaXMuZmFpbHVyZUNvdW50ID0gMDtcbiAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICB0aGlzLmlzUmVzb2x2ZWQgPSBmYWxzZTtcbiAgdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBmYWxzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKG91dGVyUmVzb2x2ZSwgb3V0ZXJSZWplY3QpIHtcbiAgICBwcm9taXNlUmVzb2x2ZSA9IG91dGVyUmVzb2x2ZTtcbiAgICBwcm9taXNlUmVqZWN0ID0gb3V0ZXJSZWplY3Q7XG4gIH0pO1xuXG4gIHZhciByZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZSh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25TdWNjZXNzID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25TdWNjZXNzKHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlRm4gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRpbnVlRm4oKTtcbiAgICAgIHByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHJlamVjdCA9IGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkge1xuICAgIGlmICghX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgX3RoaXMuaXNSZXNvbHZlZCA9IHRydWU7XG4gICAgICBjb25maWcub25FcnJvciA9PSBudWxsID8gdm9pZCAwIDogY29uZmlnLm9uRXJyb3IodmFsdWUpO1xuICAgICAgY29udGludWVGbiA9PSBudWxsID8gdm9pZCAwIDogY29udGludWVGbigpO1xuICAgICAgcHJvbWlzZVJlamVjdCh2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwYXVzZSA9IGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoY29udGludWVSZXNvbHZlKSB7XG4gICAgICBjb250aW51ZUZuID0gY29udGludWVSZXNvbHZlO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgICAgY29uZmlnLm9uUGF1c2UgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vblBhdXNlKCk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBjb250aW51ZUZuID0gdW5kZWZpbmVkO1xuICAgICAgX3RoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIGNvbmZpZy5vbkNvbnRpbnVlID09IG51bGwgPyB2b2lkIDAgOiBjb25maWcub25Db250aW51ZSgpO1xuICAgIH0pO1xuICB9OyAvLyBDcmVhdGUgbG9vcCBmdW5jdGlvblxuXG5cbiAgdmFyIHJ1biA9IGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAvLyBEbyBub3RoaW5nIGlmIGFscmVhZHkgcmVzb2x2ZWRcbiAgICBpZiAoX3RoaXMuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9taXNlT3JWYWx1ZTsgLy8gRXhlY3V0ZSBxdWVyeVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gY29uZmlnLmZuKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByb21pc2VPclZhbHVlID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH0gLy8gQ3JlYXRlIGNhbGxiYWNrIHRvIGNhbmNlbCB0aGlzIGZldGNoXG5cblxuICAgIGNhbmNlbEZuID0gZnVuY3Rpb24gY2FuY2VsRm4oY2FuY2VsT3B0aW9ucykge1xuICAgICAgaWYgKCFfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJlamVjdChuZXcgQ2FuY2VsbGVkRXJyb3IoY2FuY2VsT3B0aW9ucykpO1xuICAgICAgICBfdGhpcy5hYm9ydCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMuYWJvcnQoKTsgLy8gQ2FuY2VsIHRyYW5zcG9ydCBpZiBzdXBwb3J0ZWRcblxuICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2VPclZhbHVlKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9taXNlT3JWYWx1ZS5jYW5jZWwoKTtcbiAgICAgICAgICB9IGNhdGNoIChfdW51c2VkKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTsgLy8gQ2hlY2sgaWYgdGhlIHRyYW5zcG9ydCBsYXllciBzdXBwb3J0IGNhbmNlbGxhdGlvblxuXG5cbiAgICBfdGhpcy5pc1RyYW5zcG9ydENhbmNlbGFibGUgPSBpc0NhbmNlbGFibGUocHJvbWlzZU9yVmFsdWUpO1xuICAgIFByb21pc2UucmVzb2x2ZShwcm9taXNlT3JWYWx1ZSkudGhlbihyZXNvbHZlKS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIHZhciBfY29uZmlnJHJldHJ5LCBfY29uZmlnJHJldHJ5RGVsYXk7XG5cbiAgICAgIC8vIFN0b3AgaWYgdGhlIGZldGNoIGlzIGFscmVhZHkgcmVzb2x2ZWRcbiAgICAgIGlmIChfdGhpcy5pc1Jlc29sdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gRG8gd2UgbmVlZCB0byByZXRyeSB0aGUgcmVxdWVzdD9cblxuXG4gICAgICB2YXIgcmV0cnkgPSAoX2NvbmZpZyRyZXRyeSA9IGNvbmZpZy5yZXRyeSkgIT0gbnVsbCA/IF9jb25maWckcmV0cnkgOiAzO1xuICAgICAgdmFyIHJldHJ5RGVsYXkgPSAoX2NvbmZpZyRyZXRyeURlbGF5ID0gY29uZmlnLnJldHJ5RGVsYXkpICE9IG51bGwgPyBfY29uZmlnJHJldHJ5RGVsYXkgOiBkZWZhdWx0UmV0cnlEZWxheTtcbiAgICAgIHZhciBkZWxheSA9IHR5cGVvZiByZXRyeURlbGF5ID09PSAnZnVuY3Rpb24nID8gcmV0cnlEZWxheShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKSA6IHJldHJ5RGVsYXk7XG4gICAgICB2YXIgc2hvdWxkUmV0cnkgPSByZXRyeSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcmV0cnkgPT09ICdudW1iZXInICYmIF90aGlzLmZhaWx1cmVDb3VudCA8IHJldHJ5IHx8IHR5cGVvZiByZXRyeSA9PT0gJ2Z1bmN0aW9uJyAmJiByZXRyeShfdGhpcy5mYWlsdXJlQ291bnQsIGVycm9yKTtcblxuICAgICAgaWYgKGNhbmNlbFJldHJ5IHx8ICFzaG91bGRSZXRyeSkge1xuICAgICAgICAvLyBXZSBhcmUgZG9uZSBpZiB0aGUgcXVlcnkgZG9lcyBub3QgbmVlZCB0byBiZSByZXRyaWVkXG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuZmFpbHVyZUNvdW50Kys7IC8vIE5vdGlmeSBvbiBmYWlsXG5cbiAgICAgIGNvbmZpZy5vbkZhaWwgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbmZpZy5vbkZhaWwoX3RoaXMuZmFpbHVyZUNvdW50LCBlcnJvcik7IC8vIERlbGF5XG5cbiAgICAgIHNsZWVwKGRlbGF5KSAvLyBQYXVzZSBpZiB0aGUgZG9jdW1lbnQgaXMgbm90IHZpc2libGUgb3Igd2hlbiB0aGUgZGV2aWNlIGlzIG9mZmxpbmVcbiAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFmb2N1c01hbmFnZXIuaXNGb2N1c2VkKCkgfHwgIW9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICAgIHJldHVybiBwYXVzZSgpO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNhbmNlbFJldHJ5KSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBydW4oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07IC8vIFN0YXJ0IGxvb3BcblxuXG4gIHJ1bigpO1xufTsiLCAiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBnZXRBYm9ydENvbnRyb2xsZXIsIGZ1bmN0aW9uYWxVcGRhdGUsIGlzVmFsaWRUaW1lb3V0LCBub29wLCByZXBsYWNlRXF1YWxEZWVwLCB0aW1lVW50aWxTdGFsZSwgZW5zdXJlUXVlcnlLZXlBcnJheSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBSZXRyeWVyLCBpc0NhbmNlbGxlZEVycm9yIH0gZnJvbSAnLi9yZXRyeWVyJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnkgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeShjb25maWcpIHtcbiAgICB0aGlzLmFib3J0U2lnbmFsQ29uc3VtZWQgPSBmYWxzZTtcbiAgICB0aGlzLmhhZE9ic2VydmVycyA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBjb25maWcuZGVmYXVsdE9wdGlvbnM7XG4gICAgdGhpcy5zZXRPcHRpb25zKGNvbmZpZy5vcHRpb25zKTtcbiAgICB0aGlzLm9ic2VydmVycyA9IFtdO1xuICAgIHRoaXMuY2FjaGUgPSBjb25maWcuY2FjaGU7XG4gICAgdGhpcy5xdWVyeUtleSA9IGNvbmZpZy5xdWVyeUtleTtcbiAgICB0aGlzLnF1ZXJ5SGFzaCA9IGNvbmZpZy5xdWVyeUhhc2g7XG4gICAgdGhpcy5pbml0aWFsU3RhdGUgPSBjb25maWcuc3RhdGUgfHwgdGhpcy5nZXREZWZhdWx0U3RhdGUodGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5pbml0aWFsU3RhdGU7XG4gICAgdGhpcy5tZXRhID0gY29uZmlnLm1ldGE7XG4gICAgdGhpcy5zY2hlZHVsZUdjKCk7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnkucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXRPcHRpb25zID0gZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkY2FjaGVUaTtcblxuICAgIHRoaXMub3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICB0aGlzLm1ldGEgPSBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLm1ldGE7IC8vIERlZmF1bHQgdG8gNSBtaW51dGVzIGlmIG5vdCBjYWNoZSB0aW1lIGlzIHNldFxuXG4gICAgdGhpcy5jYWNoZVRpbWUgPSBNYXRoLm1heCh0aGlzLmNhY2hlVGltZSB8fCAwLCAoX3RoaXMkb3B0aW9ucyRjYWNoZVRpID0gdGhpcy5vcHRpb25zLmNhY2hlVGltZSkgIT0gbnVsbCA/IF90aGlzJG9wdGlvbnMkY2FjaGVUaSA6IDUgKiA2MCAqIDEwMDApO1xuICB9O1xuXG4gIF9wcm90by5zZXREZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2NoZWR1bGVHYyA9IGZ1bmN0aW9uIHNjaGVkdWxlR2MoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuY2xlYXJHY1RpbWVvdXQoKTtcblxuICAgIGlmIChpc1ZhbGlkVGltZW91dCh0aGlzLmNhY2hlVGltZSkpIHtcbiAgICAgIHRoaXMuZ2NUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICB9LCB0aGlzLmNhY2hlVGltZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jbGVhckdjVGltZW91dCA9IGZ1bmN0aW9uIGNsZWFyR2NUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLmdjVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZ2NUaW1lb3V0KTtcbiAgICAgIHRoaXMuZ2NUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ub3B0aW9uYWxSZW1vdmUgPSBmdW5jdGlvbiBvcHRpb25hbFJlbW92ZSgpIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuaXNGZXRjaGluZykge1xuICAgICAgICBpZiAodGhpcy5oYWRPYnNlcnZlcnMpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlR2MoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYWNoZS5yZW1vdmUodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zZXREYXRhID0gZnVuY3Rpb24gc2V0RGF0YSh1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMkaXNEYXRhRSwgX3RoaXMkb3B0aW9ucztcblxuICAgIHZhciBwcmV2RGF0YSA9IHRoaXMuc3RhdGUuZGF0YTsgLy8gR2V0IHRoZSBuZXcgZGF0YVxuXG4gICAgdmFyIGRhdGEgPSBmdW5jdGlvbmFsVXBkYXRlKHVwZGF0ZXIsIHByZXZEYXRhKTsgLy8gVXNlIHByZXYgZGF0YSBpZiBhbiBpc0RhdGFFcXVhbCBmdW5jdGlvbiBpcyBkZWZpbmVkIGFuZCByZXR1cm5zIGB0cnVlYFxuXG4gICAgaWYgKChfdGhpcyRvcHRpb25zJGlzRGF0YUUgPSAoX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucykuaXNEYXRhRXF1YWwpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRvcHRpb25zJGlzRGF0YUUuY2FsbChfdGhpcyRvcHRpb25zLCBwcmV2RGF0YSwgZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBwcmV2RGF0YTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zdHJ1Y3R1cmFsU2hhcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFN0cnVjdHVyYWxseSBzaGFyZSBkYXRhIGJldHdlZW4gcHJldiBhbmQgbmV3IGRhdGEgaWYgbmVlZGVkXG4gICAgICBkYXRhID0gcmVwbGFjZUVxdWFsRGVlcChwcmV2RGF0YSwgZGF0YSk7XG4gICAgfSAvLyBTZXQgZGF0YSBhbmQgbWFyayBpdCBhcyBjYWNoZWRcblxuXG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy51cGRhdGVkQXRcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICBfcHJvdG8uc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSwgc2V0U3RhdGVPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnc2V0U3RhdGUnLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0U3RhdGVPcHRpb25zOiBzZXRTdGF0ZU9wdGlvbnNcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMkcmV0cnllcjtcblxuICAgIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuICAgIChfdGhpcyRyZXRyeWVyID0gdGhpcy5yZXRyeWVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcmV0cnllci5jYW5jZWwob3B0aW9ucyk7XG4gICAgcmV0dXJuIHByb21pc2UgPyBwcm9taXNlLnRoZW4obm9vcCkuY2F0Y2gobm9vcCkgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcblxuICBfcHJvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhckdjVGltZW91dCgpO1xuICAgIHRoaXMuY2FuY2VsKHtcbiAgICAgIHNpbGVudDogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5pbml0aWFsU3RhdGUpO1xuICB9O1xuXG4gIF9wcm90by5pc0FjdGl2ZSA9IGZ1bmN0aW9uIGlzQWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLm9wdGlvbnMuZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzRmV0Y2hpbmc7XG4gIH07XG5cbiAgX3Byb3RvLmlzU3RhbGUgPSBmdW5jdGlvbiBpc1N0YWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmlzSW52YWxpZGF0ZWQgfHwgIXRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCB8fCB0aGlzLm9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKS5pc1N0YWxlO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5pc1N0YWxlQnlUaW1lID0gZnVuY3Rpb24gaXNTdGFsZUJ5VGltZShzdGFsZVRpbWUpIHtcbiAgICBpZiAoc3RhbGVUaW1lID09PSB2b2lkIDApIHtcbiAgICAgIHN0YWxlVGltZSA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCB8fCAhdGhpcy5zdGF0ZS5kYXRhVXBkYXRlZEF0IHx8ICF0aW1lVW50aWxTdGFsZSh0aGlzLnN0YXRlLmRhdGFVcGRhdGVkQXQsIHN0YWxlVGltZSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHZhciBfdGhpcyRyZXRyeWVyMjtcblxuICAgIHZhciBvYnNlcnZlciA9IHRoaXMub2JzZXJ2ZXJzLmZpbmQoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnNob3VsZEZldGNoT25XaW5kb3dGb2N1cygpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5yZWZldGNoKCk7XG4gICAgfSAvLyBDb250aW51ZSBmZXRjaCBpZiBjdXJyZW50bHkgcGF1c2VkXG5cblxuICAgIChfdGhpcyRyZXRyeWVyMiA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIyLmNvbnRpbnVlKCk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdmFyIF90aGlzJHJldHJ5ZXIzO1xuXG4gICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHguc2hvdWxkRmV0Y2hPblJlY29ubmVjdCgpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5yZWZldGNoKCk7XG4gICAgfSAvLyBDb250aW51ZSBmZXRjaCBpZiBjdXJyZW50bHkgcGF1c2VkXG5cblxuICAgIChfdGhpcyRyZXRyeWVyMyA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXIzLmNvbnRpbnVlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmFkZE9ic2VydmVyID0gZnVuY3Rpb24gYWRkT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcikgPT09IC0xKSB7XG4gICAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgICAgIHRoaXMuaGFkT2JzZXJ2ZXJzID0gdHJ1ZTsgLy8gU3RvcCB0aGUgcXVlcnkgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZFxuXG4gICAgICB0aGlzLmNsZWFyR2NUaW1lb3V0KCk7XG4gICAgICB0aGlzLmNhY2hlLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdvYnNlcnZlckFkZGVkJyxcbiAgICAgICAgcXVlcnk6IHRoaXMsXG4gICAgICAgIG9ic2VydmVyOiBvYnNlcnZlclxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpICE9PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IG9ic2VydmVyO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIElmIHRoZSB0cmFuc3BvcnQgbGF5ZXIgZG9lcyBub3Qgc3VwcG9ydCBjYW5jZWxsYXRpb25cbiAgICAgICAgLy8gd2UnbGwgbGV0IHRoZSBxdWVyeSBjb250aW51ZSBzbyB0aGUgcmVzdWx0IGNhbiBiZSBjYWNoZWRcbiAgICAgICAgaWYgKHRoaXMucmV0cnllcikge1xuICAgICAgICAgIGlmICh0aGlzLnJldHJ5ZXIuaXNUcmFuc3BvcnRDYW5jZWxhYmxlIHx8IHRoaXMuYWJvcnRTaWduYWxDb25zdW1lZCkge1xuICAgICAgICAgICAgdGhpcy5yZXRyeWVyLmNhbmNlbCh7XG4gICAgICAgICAgICAgIHJldmVydDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmV0cnllci5jYW5jZWxSZXRyeSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhY2hlVGltZSkge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVHYygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2FjaGUucmVtb3ZlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ29ic2VydmVyUmVtb3ZlZCcsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLFxuICAgICAgICBvYnNlcnZlcjogb2JzZXJ2ZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uZ2V0T2JzZXJ2ZXJzQ291bnQgPSBmdW5jdGlvbiBnZXRPYnNlcnZlcnNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pbnZhbGlkYXRlID0gZnVuY3Rpb24gaW52YWxpZGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNJbnZhbGlkYXRlZCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6ICdpbnZhbGlkYXRlJ1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5mZXRjaCA9IGZ1bmN0aW9uIGZldGNoKG9wdGlvbnMsIGZldGNoT3B0aW9ucykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzLFxuICAgICAgICBfdGhpcyRvcHRpb25zJGJlaGF2aW8sXG4gICAgICAgIF9jb250ZXh0JGZldGNoT3B0aW9ucyxcbiAgICAgICAgX2Fib3J0Q29udHJvbGxlciRhYm9yO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuaXNGZXRjaGluZykge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiAoZmV0Y2hPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE9wdGlvbnMuY2FuY2VsUmVmZXRjaCkpIHtcbiAgICAgICAgLy8gU2lsZW50bHkgY2FuY2VsIGN1cnJlbnQgZmV0Y2ggaWYgdGhlIHVzZXIgd2FudHMgdG8gY2FuY2VsIHJlZmV0Y2hlc1xuICAgICAgICB0aGlzLmNhbmNlbCh7XG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnByb21pc2UpIHtcbiAgICAgICAgdmFyIF90aGlzJHJldHJ5ZXI0O1xuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHJldHJpZXMgdGhhdCB3ZXJlIHBvdGVudGlhbGx5IGNhbmNlbGxlZCBkdWUgdG8gdW5tb3VudHMgY2FuIGNvbnRpbnVlXG4gICAgICAgIChfdGhpcyRyZXRyeWVyNCA9IHRoaXMucmV0cnllcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHJldHJ5ZXI0LmNvbnRpbnVlUmV0cnkoKTsgLy8gUmV0dXJuIGN1cnJlbnQgcHJvbWlzZSBpZiB3ZSBhcmUgYWxyZWFkeSBmZXRjaGluZ1xuXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gICAgICB9XG4gICAgfSAvLyBVcGRhdGUgY29uZmlnIGlmIHBhc3NlZCwgb3RoZXJ3aXNlIHRoZSBjb25maWcgZnJvbSB0aGUgbGFzdCBleGVjdXRpb24gaXMgdXNlZFxuXG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIH0gLy8gVXNlIHRoZSBvcHRpb25zIGZyb20gdGhlIGZpcnN0IG9ic2VydmVyIHdpdGggYSBxdWVyeSBmdW5jdGlvbiBpZiBubyBmdW5jdGlvbiBpcyBmb3VuZC5cbiAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgcXVlcnkgaXMgaHlkcmF0ZWQgb3IgY3JlYXRlZCB3aXRoIHNldFF1ZXJ5RGF0YS5cblxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgdmFyIG9ic2VydmVyID0gdGhpcy5vYnNlcnZlcnMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geC5vcHRpb25zLnF1ZXJ5Rm47XG4gICAgICB9KTtcblxuICAgICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9ucyhvYnNlcnZlci5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcXVlcnlLZXkgPSBlbnN1cmVRdWVyeUtleUFycmF5KHRoaXMucXVlcnlLZXkpO1xuICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBnZXRBYm9ydENvbnRyb2xsZXIoKTsgLy8gQ3JlYXRlIHF1ZXJ5IGZ1bmN0aW9uIGNvbnRleHRcblxuICAgIHZhciBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgIHF1ZXJ5S2V5OiBxdWVyeUtleSxcbiAgICAgIHBhZ2VQYXJhbTogdW5kZWZpbmVkLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlGbkNvbnRleHQsICdzaWduYWwnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgICAgICBfdGhpczIuYWJvcnRTaWduYWxDb25zdW1lZCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pOyAvLyBDcmVhdGUgZmV0Y2ggZnVuY3Rpb25cblxuICAgIHZhciBmZXRjaEZuID0gZnVuY3Rpb24gZmV0Y2hGbigpIHtcbiAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMucXVlcnlGbikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ01pc3NpbmcgcXVlcnlGbicpO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuYWJvcnRTaWduYWxDb25zdW1lZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLnF1ZXJ5Rm4ocXVlcnlGbkNvbnRleHQpO1xuICAgIH07IC8vIFRyaWdnZXIgYmVoYXZpb3IgaG9va1xuXG5cbiAgICB2YXIgY29udGV4dCA9IHtcbiAgICAgIGZldGNoT3B0aW9uczogZmV0Y2hPcHRpb25zLFxuICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgcXVlcnlLZXk6IHF1ZXJ5S2V5LFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICBmZXRjaEZuOiBmZXRjaEZuLFxuICAgICAgbWV0YTogdGhpcy5tZXRhXG4gICAgfTtcblxuICAgIGlmICgoX3RoaXMkb3B0aW9ucyRiZWhhdmlvID0gdGhpcy5vcHRpb25zLmJlaGF2aW9yKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb3B0aW9ucyRiZWhhdmlvLm9uRmV0Y2gpIHtcbiAgICAgIHZhciBfdGhpcyRvcHRpb25zJGJlaGF2aW8yO1xuXG4gICAgICAoX3RoaXMkb3B0aW9ucyRiZWhhdmlvMiA9IHRoaXMub3B0aW9ucy5iZWhhdmlvcikgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJG9wdGlvbnMkYmVoYXZpbzIub25GZXRjaChjb250ZXh0KTtcbiAgICB9IC8vIFN0b3JlIHN0YXRlIGluIGNhc2UgdGhlIGN1cnJlbnQgZmV0Y2ggbmVlZHMgdG8gYmUgcmV2ZXJ0ZWRcblxuXG4gICAgdGhpcy5yZXZlcnRTdGF0ZSA9IHRoaXMuc3RhdGU7IC8vIFNldCB0byBmZXRjaGluZyBzdGF0ZSBpZiBub3QgYWxyZWFkeSBpbiBpdFxuXG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzRmV0Y2hpbmcgfHwgdGhpcy5zdGF0ZS5mZXRjaE1ldGEgIT09ICgoX2NvbnRleHQkZmV0Y2hPcHRpb25zID0gY29udGV4dC5mZXRjaE9wdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMubWV0YSkpIHtcbiAgICAgIHZhciBfY29udGV4dCRmZXRjaE9wdGlvbnMyO1xuXG4gICAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ2ZldGNoJyxcbiAgICAgICAgbWV0YTogKF9jb250ZXh0JGZldGNoT3B0aW9uczIgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jb250ZXh0JGZldGNoT3B0aW9uczIubWV0YVxuICAgICAgfSk7XG4gICAgfSAvLyBUcnkgdG8gZmV0Y2ggdGhlIGRhdGFcblxuXG4gICAgdGhpcy5yZXRyeWVyID0gbmV3IFJldHJ5ZXIoe1xuICAgICAgZm46IGNvbnRleHQuZmV0Y2hGbixcbiAgICAgIGFib3J0OiBhYm9ydENvbnRyb2xsZXIgPT0gbnVsbCA/IHZvaWQgMCA6IChfYWJvcnRDb250cm9sbGVyJGFib3IgPSBhYm9ydENvbnRyb2xsZXIuYWJvcnQpID09IG51bGwgPyB2b2lkIDAgOiBfYWJvcnRDb250cm9sbGVyJGFib3IuYmluZChhYm9ydENvbnRyb2xsZXIpLFxuICAgICAgb25TdWNjZXNzOiBmdW5jdGlvbiBvblN1Y2Nlc3MoZGF0YSkge1xuICAgICAgICBfdGhpczIuc2V0RGF0YShkYXRhKTsgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG5cblxuICAgICAgICBfdGhpczIuY2FjaGUuY29uZmlnLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMyLmNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMyKTsgLy8gUmVtb3ZlIHF1ZXJ5IGFmdGVyIGZldGNoaW5nIGlmIGNhY2hlIHRpbWUgaXMgMFxuXG4gICAgICAgIGlmIChfdGhpczIuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkVycm9yOiBmdW5jdGlvbiBvbkVycm9yKGVycm9yKSB7XG4gICAgICAgIC8vIE9wdGltaXN0aWNhbGx5IHVwZGF0ZSBzdGF0ZSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKCEoaXNDYW5jZWxsZWRFcnJvcihlcnJvcikgJiYgZXJyb3Iuc2lsZW50KSkge1xuICAgICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQ2FuY2VsbGVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgICAgX3RoaXMyLmNhY2hlLmNvbmZpZy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpczIuY2FjaGUuY29uZmlnLm9uRXJyb3IoZXJyb3IsIF90aGlzMik7IC8vIExvZyBlcnJvclxuXG4gICAgICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9IC8vIFJlbW92ZSBxdWVyeSBhZnRlciBmZXRjaGluZyBpZiBjYWNoZSB0aW1lIGlzIDBcblxuXG4gICAgICAgIGlmIChfdGhpczIuY2FjaGVUaW1lID09PSAwKSB7XG4gICAgICAgICAgX3RoaXMyLm9wdGlvbmFsUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkZhaWw6IGZ1bmN0aW9uIG9uRmFpbCgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZmFpbGVkJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBvblBhdXNlOiBmdW5jdGlvbiBvblBhdXNlKCkge1xuICAgICAgICBfdGhpczIuZGlzcGF0Y2goe1xuICAgICAgICAgIHR5cGU6ICdwYXVzZSdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25Db250aW51ZTogZnVuY3Rpb24gb25Db250aW51ZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnY29udGludWUnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJldHJ5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnksXG4gICAgICByZXRyeURlbGF5OiBjb250ZXh0Lm9wdGlvbnMucmV0cnlEZWxheVxuICAgIH0pO1xuICAgIHRoaXMucHJvbWlzZSA9IHRoaXMucmV0cnllci5wcm9taXNlO1xuICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gIH07XG5cbiAgX3Byb3RvLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnN0YXRlID0gdGhpcy5yZWR1Y2VyKHRoaXMuc3RhdGUsIGFjdGlvbik7XG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMub2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIG9ic2VydmVyLm9uUXVlcnlVcGRhdGUoYWN0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpczMuY2FjaGUubm90aWZ5KHtcbiAgICAgICAgcXVlcnk6IF90aGlzMyxcbiAgICAgICAgdHlwZTogJ3F1ZXJ5VXBkYXRlZCcsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdFN0YXRlID0gZnVuY3Rpb24gZ2V0RGVmYXVsdFN0YXRlKG9wdGlvbnMpIHtcbiAgICB2YXIgZGF0YSA9IHR5cGVvZiBvcHRpb25zLmluaXRpYWxEYXRhID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5pbml0aWFsRGF0YSgpIDogb3B0aW9ucy5pbml0aWFsRGF0YTtcbiAgICB2YXIgaGFzSW5pdGlhbERhdGEgPSB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgdmFyIGluaXRpYWxEYXRhVXBkYXRlZEF0ID0gaGFzSW5pdGlhbERhdGEgPyB0eXBlb2Ygb3B0aW9ucy5pbml0aWFsRGF0YVVwZGF0ZWRBdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQoKSA6IG9wdGlvbnMuaW5pdGlhbERhdGFVcGRhdGVkQXQgOiAwO1xuICAgIHZhciBoYXNEYXRhID0gdHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnO1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgZGF0YVVwZGF0ZUNvdW50OiAwLFxuICAgICAgZGF0YVVwZGF0ZWRBdDogaGFzRGF0YSA/IGluaXRpYWxEYXRhVXBkYXRlZEF0ICE9IG51bGwgPyBpbml0aWFsRGF0YVVwZGF0ZWRBdCA6IERhdGUubm93KCkgOiAwLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBlcnJvclVwZGF0ZUNvdW50OiAwLFxuICAgICAgZXJyb3JVcGRhdGVkQXQ6IDAsXG4gICAgICBmZXRjaEZhaWx1cmVDb3VudDogMCxcbiAgICAgIGZldGNoTWV0YTogbnVsbCxcbiAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICBzdGF0dXM6IGhhc0RhdGEgPyAnc3VjY2VzcycgOiAnaWRsZSdcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5yZWR1Y2VyID0gZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgdmFyIF9hY3Rpb24kbWV0YSwgX2FjdGlvbiRkYXRhVXBkYXRlZEF0O1xuXG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiBzdGF0ZS5mZXRjaEZhaWx1cmVDb3VudCArIDFcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGlzUGF1c2VkOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdjb250aW51ZSc6XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ZldGNoJzpcbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGZldGNoRmFpbHVyZUNvdW50OiAwLFxuICAgICAgICAgIGZldGNoTWV0YTogKF9hY3Rpb24kbWV0YSA9IGFjdGlvbi5tZXRhKSAhPSBudWxsID8gX2FjdGlvbiRtZXRhIDogbnVsbCxcbiAgICAgICAgICBpc0ZldGNoaW5nOiB0cnVlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgICB9LCAhc3RhdGUuZGF0YVVwZGF0ZWRBdCAmJiB7XG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgc3RhdHVzOiAnbG9hZGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgZGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgICAgZGF0YVVwZGF0ZUNvdW50OiBzdGF0ZS5kYXRhVXBkYXRlQ291bnQgKyAxLFxuICAgICAgICAgIGRhdGFVcGRhdGVkQXQ6IChfYWN0aW9uJGRhdGFVcGRhdGVkQXQgPSBhY3Rpb24uZGF0YVVwZGF0ZWRBdCkgIT0gbnVsbCA/IF9hY3Rpb24kZGF0YVVwZGF0ZWRBdCA6IERhdGUubm93KCksXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgZmV0Y2hGYWlsdXJlQ291bnQ6IDAsXG4gICAgICAgICAgaXNGZXRjaGluZzogZmFsc2UsXG4gICAgICAgICAgaXNJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHZhciBlcnJvciA9IGFjdGlvbi5lcnJvcjtcblxuICAgICAgICBpZiAoaXNDYW5jZWxsZWRFcnJvcihlcnJvcikgJiYgZXJyb3IucmV2ZXJ0ICYmIHRoaXMucmV2ZXJ0U3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHRoaXMucmV2ZXJ0U3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICBlcnJvclVwZGF0ZUNvdW50OiBzdGF0ZS5lcnJvclVwZGF0ZUNvdW50ICsgMSxcbiAgICAgICAgICBlcnJvclVwZGF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICAgICAgICBmZXRjaEZhaWx1cmVDb3VudDogc3RhdGUuZmV0Y2hGYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICAgIGlzRmV0Y2hpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzUGF1c2VkOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6ICdlcnJvcidcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgJ2ludmFsaWRhdGUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgICAgaXNJbnZhbGlkYXRlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSAnc2V0U3RhdGUnOlxuICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBhY3Rpb24uc3RhdGUpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBRdWVyeTtcbn0oKTsiLCAiaW1wb3J0IHsgc2NoZWR1bGVNaWNyb3Rhc2sgfSBmcm9tICcuL3V0aWxzJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTm90aWZ5TWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5vdGlmeU1hbmFnZXIoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb25zID0gMDtcblxuICAgIHRoaXMubm90aWZ5Rm4gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcblxuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIF9wcm90byA9IE5vdGlmeU1hbmFnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5iYXRjaCA9IGZ1bmN0aW9uIGJhdGNoKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICB0aGlzLnRyYW5zYWN0aW9ucysrO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25zLS07XG5cbiAgICAgIGlmICghdGhpcy50cmFuc2FjdGlvbnMpIHtcbiAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgX3Byb3RvLnNjaGVkdWxlID0gZnVuY3Rpb24gc2NoZWR1bGUoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb25zKSB7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZU1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm5vdGlmeUZuKGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQWxsIGNhbGxzIHRvIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIHdpbGwgYmUgYmF0Y2hlZC5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uYmF0Y2hDYWxscyA9IGZ1bmN0aW9uIGJhdGNoQ2FsbHMoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FsbGJhY2suYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgcXVldWUgPSB0aGlzLnF1ZXVlO1xuICAgIHRoaXMucXVldWUgPSBbXTtcblxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLmJhdGNoTm90aWZ5Rm4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBfdGhpczMubm90aWZ5Rm4oY2FsbGJhY2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBub3RpZnkgZnVuY3Rpb24uXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZm9yIGV4YW1wbGUgd3JhcCBub3RpZmljYXRpb25zIHdpdGggYFJlYWN0LmFjdGAgd2hpbGUgcnVubmluZyB0ZXN0cy5cbiAgICovXG4gIDtcblxuICBfcHJvdG8uc2V0Tm90aWZ5RnVuY3Rpb24gPSBmdW5jdGlvbiBzZXROb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMubm90aWZ5Rm4gPSBmbjtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIHNldCBhIGN1c3RvbSBmdW5jdGlvbiB0byBiYXRjaCBub3RpZmljYXRpb25zIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgdGljay5cbiAgICogQnkgZGVmYXVsdCBSZWFjdCBRdWVyeSB3aWxsIHVzZSB0aGUgYmF0Y2ggZnVuY3Rpb24gcHJvdmlkZWQgYnkgUmVhY3RET00gb3IgUmVhY3QgTmF0aXZlLlxuICAgKi9cbiAgO1xuXG4gIF9wcm90by5zZXRCYXRjaE5vdGlmeUZ1bmN0aW9uID0gZnVuY3Rpb24gc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbihmbikge1xuICAgIHRoaXMuYmF0Y2hOb3RpZnlGbiA9IGZuO1xuICB9O1xuXG4gIHJldHVybiBOb3RpZnlNYW5hZ2VyO1xufSgpOyAvLyBTSU5HTEVUT05cblxuZXhwb3J0IHZhciBub3RpZnlNYW5hZ2VyID0gbmV3IE5vdGlmeU1hbmFnZXIoKTsiLCAiLy8gVFlQRVNcbi8vIEZVTkNUSU9OU1xudmFyIGxvZ2dlciA9IGNvbnNvbGU7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKCkge1xuICByZXR1cm4gbG9nZ2VyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldExvZ2dlcihuZXdMb2dnZXIpIHtcbiAgbG9nZ2VyID0gbmV3TG9nZ2VyO1xufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleUJ5T3B0aW9ucywgbWF0Y2hRdWVyeSwgcGFyc2VGaWx0ZXJBcmdzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gJy4vcXVlcnknO1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJy4vbm90aWZ5TWFuYWdlcic7XG5pbXBvcnQgeyBTdWJzY3JpYmFibGUgfSBmcm9tICcuL3N1YnNjcmliYWJsZSc7XG4vLyBDTEFTU1xuZXhwb3J0IHZhciBRdWVyeUNhY2hlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3Vic2NyaWJhYmxlKSB7XG4gIF9pbmhlcml0c0xvb3NlKFF1ZXJ5Q2FjaGUsIF9TdWJzY3JpYmFibGUpO1xuXG4gIGZ1bmN0aW9uIFF1ZXJ5Q2FjaGUoY29uZmlnKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfU3Vic2NyaWJhYmxlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICBfdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG4gICAgX3RoaXMucXVlcmllcyA9IFtdO1xuICAgIF90aGlzLnF1ZXJpZXNNYXAgPSB7fTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUXVlcnlDYWNoZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoY2xpZW50LCBvcHRpb25zLCBzdGF0ZSkge1xuICAgIHZhciBfb3B0aW9ucyRxdWVyeUhhc2g7XG5cbiAgICB2YXIgcXVlcnlLZXkgPSBvcHRpb25zLnF1ZXJ5S2V5O1xuICAgIHZhciBxdWVyeUhhc2ggPSAoX29wdGlvbnMkcXVlcnlIYXNoID0gb3B0aW9ucy5xdWVyeUhhc2gpICE9IG51bGwgPyBfb3B0aW9ucyRxdWVyeUhhc2ggOiBoYXNoUXVlcnlLZXlCeU9wdGlvbnMocXVlcnlLZXksIG9wdGlvbnMpO1xuICAgIHZhciBxdWVyeSA9IHRoaXMuZ2V0KHF1ZXJ5SGFzaCk7XG5cbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IG5ldyBRdWVyeSh7XG4gICAgICAgIGNhY2hlOiB0aGlzLFxuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIHF1ZXJ5SGFzaDogcXVlcnlIYXNoLFxuICAgICAgICBvcHRpb25zOiBjbGllbnQuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhvcHRpb25zKSxcbiAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICBkZWZhdWx0T3B0aW9uczogY2xpZW50LmdldFF1ZXJ5RGVmYXVsdHMocXVlcnlLZXkpLFxuICAgICAgICBtZXRhOiBvcHRpb25zLm1ldGFcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGQocXVlcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBxdWVyeTtcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKHF1ZXJ5KSB7XG4gICAgaWYgKCF0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXSkge1xuICAgICAgdGhpcy5xdWVyaWVzTWFwW3F1ZXJ5LnF1ZXJ5SGFzaF0gPSBxdWVyeTtcbiAgICAgIHRoaXMucXVlcmllcy5wdXNoKHF1ZXJ5KTtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3F1ZXJ5QWRkZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKHF1ZXJ5KSB7XG4gICAgdmFyIHF1ZXJ5SW5NYXAgPSB0aGlzLnF1ZXJpZXNNYXBbcXVlcnkucXVlcnlIYXNoXTtcblxuICAgIGlmIChxdWVyeUluTWFwKSB7XG4gICAgICBxdWVyeS5kZXN0cm95KCk7XG4gICAgICB0aGlzLnF1ZXJpZXMgPSB0aGlzLnF1ZXJpZXMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBxdWVyeTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocXVlcnlJbk1hcCA9PT0gcXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMucXVlcmllc01hcFtxdWVyeS5xdWVyeUhhc2hdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdxdWVyeVJlbW92ZWQnLFxuICAgICAgICBxdWVyeTogcXVlcnlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShxdWVyeSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHF1ZXJ5SGFzaCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNNYXBbcXVlcnlIYXNoXTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXM7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmQgPSBmdW5jdGlvbiBmaW5kKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlcnMuZXhhY3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmaWx0ZXJzLmV4YWN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzLmZpbmQoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4gbWF0Y2hRdWVyeShmaWx0ZXJzLCBxdWVyeSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmZpbmRBbGwgPSBmdW5jdGlvbiBmaW5kQWxsKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhmaWx0ZXJzKS5sZW5ndGggPiAwID8gdGhpcy5xdWVyaWVzLmZpbHRlcihmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgIHJldHVybiBtYXRjaFF1ZXJ5KGZpbHRlcnMsIHF1ZXJ5KTtcbiAgICB9KSA6IHRoaXMucXVlcmllcztcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KGV2ZW50KSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczQucXVlcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeS5vbkZvY3VzKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ub25PbmxpbmUgPSBmdW5jdGlvbiBvbk9ubGluZSgpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM1LnF1ZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcXVlcnkub25PbmxpbmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBRdWVyeUNhY2hlO1xufShTdWJzY3JpYmFibGUpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGhhc2hRdWVyeUtleSwgbm9vcCwgcGFyc2VGaWx0ZXJBcmdzLCBwYXJzZVF1ZXJ5QXJncywgcGFydGlhbE1hdGNoS2V5LCBoYXNoUXVlcnlLZXlCeU9wdGlvbnMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFF1ZXJ5Q2FjaGUgfSBmcm9tICcuL3F1ZXJ5Q2FjaGUnO1xuaW1wb3J0IHsgTXV0YXRpb25DYWNoZSB9IGZyb20gJy4vbXV0YXRpb25DYWNoZSc7XG5pbXBvcnQgeyBmb2N1c01hbmFnZXIgfSBmcm9tICcuL2ZvY3VzTWFuYWdlcic7XG5pbXBvcnQgeyBvbmxpbmVNYW5hZ2VyIH0gZnJvbSAnLi9vbmxpbmVNYW5hZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgaW5maW5pdGVRdWVyeUJlaGF2aW9yIH0gZnJvbSAnLi9pbmZpbml0ZVF1ZXJ5QmVoYXZpb3InO1xuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgUXVlcnlDbGllbnQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBRdWVyeUNsaWVudChjb25maWcpIHtcbiAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHtcbiAgICAgIGNvbmZpZyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMucXVlcnlDYWNoZSA9IGNvbmZpZy5xdWVyeUNhY2hlIHx8IG5ldyBRdWVyeUNhY2hlKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlID0gY29uZmlnLm11dGF0aW9uQ2FjaGUgfHwgbmV3IE11dGF0aW9uQ2FjaGUoKTtcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0gY29uZmlnLmRlZmF1bHRPcHRpb25zIHx8IHt9O1xuICAgIHRoaXMucXVlcnlEZWZhdWx0cyA9IFtdO1xuICAgIHRoaXMubXV0YXRpb25EZWZhdWx0cyA9IFtdO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFF1ZXJ5Q2xpZW50LnByb3RvdHlwZTtcblxuICBfcHJvdG8ubW91bnQgPSBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZUZvY3VzID0gZm9jdXNNYW5hZ2VyLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZm9jdXNNYW5hZ2VyLmlzRm9jdXNlZCgpICYmIG9ubGluZU1hbmFnZXIuaXNPbmxpbmUoKSkge1xuICAgICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLm9uRm9jdXMoKTtcblxuICAgICAgICBfdGhpcy5xdWVyeUNhY2hlLm9uRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlT25saW5lID0gb25saW5lTWFuYWdlci5zdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGZvY3VzTWFuYWdlci5pc0ZvY3VzZWQoKSAmJiBvbmxpbmVNYW5hZ2VyLmlzT25saW5lKCkpIHtcbiAgICAgICAgX3RoaXMubXV0YXRpb25DYWNoZS5vbk9ubGluZSgpO1xuXG4gICAgICAgIF90aGlzLnF1ZXJ5Q2FjaGUub25PbmxpbmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8udW5tb3VudCA9IGZ1bmN0aW9uIHVubW91bnQoKSB7XG4gICAgdmFyIF90aGlzJHVuc3Vic2NyaWJlRm9jdSwgX3RoaXMkdW5zdWJzY3JpYmVPbmxpO1xuXG4gICAgKF90aGlzJHVuc3Vic2NyaWJlRm9jdSA9IHRoaXMudW5zdWJzY3JpYmVGb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuc3Vic2NyaWJlRm9jdS5jYWxsKHRoaXMpO1xuICAgIChfdGhpcyR1bnN1YnNjcmliZU9ubGkgPSB0aGlzLnVuc3Vic2NyaWJlT25saW5lKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkdW5zdWJzY3JpYmVPbmxpLmNhbGwodGhpcyk7XG4gIH07XG5cbiAgX3Byb3RvLmlzRmV0Y2hpbmcgPSBmdW5jdGlvbiBpc0ZldGNoaW5nKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJncyA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3NbMF07XG5cbiAgICBmaWx0ZXJzLmZldGNoaW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNhY2hlLmZpbmRBbGwoZmlsdGVycykubGVuZ3RoO1xuICB9O1xuXG4gIF9wcm90by5pc011dGF0aW5nID0gZnVuY3Rpb24gaXNNdXRhdGluZyhmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZS5maW5kQWxsKF9leHRlbmRzKHt9LCBmaWx0ZXJzLCB7XG4gICAgICBmZXRjaGluZzogdHJ1ZVxuICAgIH0pKS5sZW5ndGg7XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJ5RGF0YShxdWVyeUtleSwgZmlsdGVycykge1xuICAgIHZhciBfdGhpcyRxdWVyeUNhY2hlJGZpbmQ7XG5cbiAgICByZXR1cm4gKF90aGlzJHF1ZXJ5Q2FjaGUkZmluZCA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZC5zdGF0ZS5kYXRhO1xuICB9O1xuXG4gIF9wcm90by5nZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIGdldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlDYWNoZSgpLmZpbmRBbGwocXVlcnlLZXlPckZpbHRlcnMpLm1hcChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHF1ZXJ5S2V5ID0gX3JlZi5xdWVyeUtleSxcbiAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gICAgICB2YXIgZGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBkYXRhXTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uc2V0UXVlcnlEYXRhID0gZnVuY3Rpb24gc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhxdWVyeUtleSk7XG4gICAgdmFyIGRlZmF1bHRlZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRRdWVyeU9wdGlvbnMocGFyc2VkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKS5zZXREYXRhKHVwZGF0ZXIsIG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5zZXRRdWVyaWVzRGF0YSA9IGZ1bmN0aW9uIHNldFF1ZXJpZXNEYXRhKHF1ZXJ5S2V5T3JGaWx0ZXJzLCB1cGRhdGVyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLmdldFF1ZXJ5Q2FjaGUoKS5maW5kQWxsKHF1ZXJ5S2V5T3JGaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgIHZhciBxdWVyeUtleSA9IF9yZWYyLnF1ZXJ5S2V5O1xuICAgICAgICByZXR1cm4gW3F1ZXJ5S2V5LCBfdGhpczIuc2V0UXVlcnlEYXRhKHF1ZXJ5S2V5LCB1cGRhdGVyLCBvcHRpb25zKV07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlTdGF0ZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5U3RhdGUocXVlcnlLZXksIGZpbHRlcnMpIHtcbiAgICB2YXIgX3RoaXMkcXVlcnlDYWNoZSRmaW5kMjtcblxuICAgIHJldHVybiAoX3RoaXMkcXVlcnlDYWNoZSRmaW5kMiA9IHRoaXMucXVlcnlDYWNoZS5maW5kKHF1ZXJ5S2V5LCBmaWx0ZXJzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHF1ZXJ5Q2FjaGUkZmluZDIuc3RhdGU7XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZVF1ZXJpZXMgPSBmdW5jdGlvbiByZW1vdmVRdWVyaWVzKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczIgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzMlswXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5Q2FjaGUucmVtb3ZlKHF1ZXJ5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5yZXNldFF1ZXJpZXMgPSBmdW5jdGlvbiByZXNldFF1ZXJpZXMoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIF9wYXJzZUZpbHRlckFyZ3MzID0gcGFyc2VGaWx0ZXJBcmdzKGFyZzEsIGFyZzIsIGFyZzMpLFxuICAgICAgICBmaWx0ZXJzID0gX3BhcnNlRmlsdGVyQXJnczNbMF0sXG4gICAgICAgIG9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzM1sxXTtcblxuICAgIHZhciBxdWVyeUNhY2hlID0gdGhpcy5xdWVyeUNhY2hlO1xuXG4gICAgdmFyIHJlZmV0Y2hGaWx0ZXJzID0gX2V4dGVuZHMoe30sIGZpbHRlcnMsIHtcbiAgICAgIGFjdGl2ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vdGlmeU1hbmFnZXIuYmF0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgcXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LnJlc2V0KCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfdGhpczMucmVmZXRjaFF1ZXJpZXMocmVmZXRjaEZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxRdWVyaWVzID0gZnVuY3Rpb24gY2FuY2VsUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczQgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNFswXSxcbiAgICAgICAgX3BhcnNlRmlsdGVyQXJnczQkID0gX3BhcnNlRmlsdGVyQXJnczRbMV0sXG4gICAgICAgIGNhbmNlbE9wdGlvbnMgPSBfcGFyc2VGaWx0ZXJBcmdzNCQgPT09IHZvaWQgMCA/IHt9IDogX3BhcnNlRmlsdGVyQXJnczQkO1xuXG4gICAgaWYgKHR5cGVvZiBjYW5jZWxPcHRpb25zLnJldmVydCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNhbmNlbE9wdGlvbnMucmV2ZXJ0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczQucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLm1hcChmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmNhbmNlbChjYW5jZWxPcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uaW52YWxpZGF0ZVF1ZXJpZXMgPSBmdW5jdGlvbiBpbnZhbGlkYXRlUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF9yZWYzLFxuICAgICAgICBfZmlsdGVycyRyZWZldGNoQWN0aXYsXG4gICAgICAgIF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCxcbiAgICAgICAgX3RoaXM1ID0gdGhpcztcblxuICAgIHZhciBfcGFyc2VGaWx0ZXJBcmdzNSA9IHBhcnNlRmlsdGVyQXJncyhhcmcxLCBhcmcyLCBhcmczKSxcbiAgICAgICAgZmlsdGVycyA9IF9wYXJzZUZpbHRlckFyZ3M1WzBdLFxuICAgICAgICBvcHRpb25zID0gX3BhcnNlRmlsdGVyQXJnczVbMV07XG5cbiAgICB2YXIgcmVmZXRjaEZpbHRlcnMgPSBfZXh0ZW5kcyh7fSwgZmlsdGVycywge1xuICAgICAgLy8gaWYgZmlsdGVycy5yZWZldGNoQWN0aXZlIGlzIG5vdCBwcm92aWRlZCBhbmQgZmlsdGVycy5hY3RpdmUgaXMgZXhwbGljaXRseSBmYWxzZSxcbiAgICAgIC8vIGUuZy4gaW52YWxpZGF0ZVF1ZXJpZXMoeyBhY3RpdmU6IGZhbHNlIH0pLCB3ZSBkb24ndCB3YW50IHRvIHJlZmV0Y2ggYWN0aXZlIHF1ZXJpZXNcbiAgICAgIGFjdGl2ZTogKF9yZWYzID0gKF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA9IGZpbHRlcnMucmVmZXRjaEFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hBY3RpdiA6IGZpbHRlcnMuYWN0aXZlKSAhPSBudWxsID8gX3JlZjMgOiB0cnVlLFxuICAgICAgaW5hY3RpdmU6IChfZmlsdGVycyRyZWZldGNoSW5hY3QgPSBmaWx0ZXJzLnJlZmV0Y2hJbmFjdGl2ZSkgIT0gbnVsbCA/IF9maWx0ZXJzJHJlZmV0Y2hJbmFjdCA6IGZhbHNlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczUucXVlcnlDYWNoZS5maW5kQWxsKGZpbHRlcnMpLmZvckVhY2goZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHF1ZXJ5LmludmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gX3RoaXM1LnJlZmV0Y2hRdWVyaWVzKHJlZmV0Y2hGaWx0ZXJzLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucmVmZXRjaFF1ZXJpZXMgPSBmdW5jdGlvbiByZWZldGNoUXVlcmllcyhhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICB2YXIgX3BhcnNlRmlsdGVyQXJnczYgPSBwYXJzZUZpbHRlckFyZ3MoYXJnMSwgYXJnMiwgYXJnMyksXG4gICAgICAgIGZpbHRlcnMgPSBfcGFyc2VGaWx0ZXJBcmdzNlswXSxcbiAgICAgICAgb3B0aW9ucyA9IF9wYXJzZUZpbHRlckFyZ3M2WzFdO1xuXG4gICAgdmFyIHByb21pc2VzID0gbm90aWZ5TWFuYWdlci5iYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXM2LnF1ZXJ5Q2FjaGUuZmluZEFsbChmaWx0ZXJzKS5tYXAoZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBxdWVyeS5mZXRjaCh1bmRlZmluZWQsIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgcmVmZXRjaFBhZ2U6IGZpbHRlcnMgPT0gbnVsbCA/IHZvaWQgMCA6IGZpbHRlcnMucmVmZXRjaFBhZ2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4obm9vcCk7XG5cbiAgICBpZiAoIShvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnRocm93T25FcnJvcikpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLmNhdGNoKG5vb3ApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5mZXRjaFF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hRdWVyeShhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgdmFyIHBhcnNlZE9wdGlvbnMgPSBwYXJzZVF1ZXJ5QXJncyhhcmcxLCBhcmcyLCBhcmczKTtcbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFF1ZXJ5T3B0aW9ucyhwYXJzZWRPcHRpb25zKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rhbm5lcmxpbnNsZXkvcmVhY3QtcXVlcnkvaXNzdWVzLzY1MlxuXG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0ZWRPcHRpb25zLnJldHJ5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVmYXVsdGVkT3B0aW9ucy5yZXRyeSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnlDYWNoZS5idWlsZCh0aGlzLCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gcXVlcnkuaXNTdGFsZUJ5VGltZShkZWZhdWx0ZWRPcHRpb25zLnN0YWxlVGltZSkgPyBxdWVyeS5mZXRjaChkZWZhdWx0ZWRPcHRpb25zKSA6IFByb21pc2UucmVzb2x2ZShxdWVyeS5zdGF0ZS5kYXRhKTtcbiAgfTtcblxuICBfcHJvdG8ucHJlZmV0Y2hRdWVyeSA9IGZ1bmN0aW9uIHByZWZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8uZmV0Y2hJbmZpbml0ZVF1ZXJ5ID0gZnVuY3Rpb24gZmV0Y2hJbmZpbml0ZVF1ZXJ5KGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgcGFyc2VkT3B0aW9ucyA9IHBhcnNlUXVlcnlBcmdzKGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgIHBhcnNlZE9wdGlvbnMuYmVoYXZpb3IgPSBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKTtcbiAgICByZXR1cm4gdGhpcy5mZXRjaFF1ZXJ5KHBhcnNlZE9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5wcmVmZXRjaEluZmluaXRlUXVlcnkgPSBmdW5jdGlvbiBwcmVmZXRjaEluZmluaXRlUXVlcnkoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiB0aGlzLmZldGNoSW5maW5pdGVRdWVyeShhcmcxLCBhcmcyLCBhcmczKS50aGVuKG5vb3ApLmNhdGNoKG5vb3ApO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxNdXRhdGlvbnMgPSBmdW5jdGlvbiBjYW5jZWxNdXRhdGlvbnMoKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZXMgPSBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpczcubXV0YXRpb25DYWNoZS5nZXRBbGwoKS5tYXAoZnVuY3Rpb24gKG11dGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldE11dGF0aW9uQ2FjaGUoKS5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZU11dGF0aW9uID0gZnVuY3Rpb24gZXhlY3V0ZU11dGF0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGlvbkNhY2hlLmJ1aWxkKHRoaXMsIG9wdGlvbnMpLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0UXVlcnlDYWNoZSA9IGZ1bmN0aW9uIGdldFF1ZXJ5Q2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0TXV0YXRpb25DYWNoZSA9IGZ1bmN0aW9uIGdldE11dGF0aW9uQ2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25DYWNoZTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0T3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uc2V0RGVmYXVsdE9wdGlvbnMgPSBmdW5jdGlvbiBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnM7XG4gIH07XG5cbiAgX3Byb3RvLnNldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucXVlcnlEZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KHF1ZXJ5S2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgucXVlcnlLZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeURlZmF1bHRzLnB1c2goe1xuICAgICAgICBxdWVyeUtleTogcXVlcnlLZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldFF1ZXJ5RGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRRdWVyeURlZmF1bHRzKHF1ZXJ5S2V5KSB7XG4gICAgdmFyIF90aGlzJHF1ZXJ5RGVmYXVsdHMkZjtcblxuICAgIHJldHVybiBxdWVyeUtleSA/IChfdGhpcyRxdWVyeURlZmF1bHRzJGYgPSB0aGlzLnF1ZXJ5RGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShxdWVyeUtleSwgeC5xdWVyeUtleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRxdWVyeURlZmF1bHRzJGYuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLnNldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBzZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5LCBvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMubXV0YXRpb25EZWZhdWx0cy5maW5kKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gaGFzaFF1ZXJ5S2V5KG11dGF0aW9uS2V5KSA9PT0gaGFzaFF1ZXJ5S2V5KHgubXV0YXRpb25LZXkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0LmRlZmF1bHRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXRhdGlvbkRlZmF1bHRzLnB1c2goe1xuICAgICAgICBtdXRhdGlvbktleTogbXV0YXRpb25LZXksXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiBvcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmdldE11dGF0aW9uRGVmYXVsdHMgPSBmdW5jdGlvbiBnZXRNdXRhdGlvbkRlZmF1bHRzKG11dGF0aW9uS2V5KSB7XG4gICAgdmFyIF90aGlzJG11dGF0aW9uRGVmYXVsdDtcblxuICAgIHJldHVybiBtdXRhdGlvbktleSA/IChfdGhpcyRtdXRhdGlvbkRlZmF1bHQgPSB0aGlzLm11dGF0aW9uRGVmYXVsdHMuZmluZChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHBhcnRpYWxNYXRjaEtleShtdXRhdGlvbktleSwgeC5tdXRhdGlvbktleSk7XG4gICAgfSkpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyRtdXRhdGlvbkRlZmF1bHQuZGVmYXVsdE9wdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgX3Byb3RvLmRlZmF1bHRRdWVyeU9wdGlvbnMgPSBmdW5jdGlvbiBkZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5fZGVmYXVsdGVkKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdGVkT3B0aW9ucyA9IF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLnF1ZXJpZXMsIHRoaXMuZ2V0UXVlcnlEZWZhdWx0cyhvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5S2V5KSwgb3B0aW9ucywge1xuICAgICAgX2RlZmF1bHRlZDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCAmJiBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5KSB7XG4gICAgICBkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5SGFzaCA9IGhhc2hRdWVyeUtleUJ5T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLnF1ZXJ5S2V5LCBkZWZhdWx0ZWRPcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdGVkT3B0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdFF1ZXJ5T2JzZXJ2ZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UXVlcnlPcHRpb25zKG9wdGlvbnMpO1xuICB9O1xuXG4gIF9wcm90by5kZWZhdWx0TXV0YXRpb25PcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdE11dGF0aW9uT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuX2RlZmF1bHRlZCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLm11dGF0aW9ucywgdGhpcy5nZXRNdXRhdGlvbkRlZmF1bHRzKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMubXV0YXRpb25LZXkpLCBvcHRpb25zLCB7XG4gICAgICBfZGVmYXVsdGVkOiB0cnVlXG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdGhpcy5xdWVyeUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNhY2hlLmNsZWFyKCk7XG4gIH07XG5cbiAgcmV0dXJuIFF1ZXJ5Q2xpZW50O1xufSgpOyIsICJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgUmV0cnllciB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi91dGlscyc7IC8vIFRZUEVTXG5cbi8vIENMQVNTXG5leHBvcnQgdmFyIE11dGF0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTXV0YXRpb24oY29uZmlnKSB7XG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIGNvbmZpZy5kZWZhdWx0T3B0aW9ucywgY29uZmlnLm9wdGlvbnMpO1xuICAgIHRoaXMubXV0YXRpb25JZCA9IGNvbmZpZy5tdXRhdGlvbklkO1xuICAgIHRoaXMubXV0YXRpb25DYWNoZSA9IGNvbmZpZy5tdXRhdGlvbkNhY2hlO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgdGhpcy5zdGF0ZSA9IGNvbmZpZy5zdGF0ZSB8fCBnZXREZWZhdWx0U3RhdGUoKTtcbiAgICB0aGlzLm1ldGEgPSBjb25maWcubWV0YTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLnNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUpIHtcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdzZXRTdGF0ZScsXG4gICAgICBzdGF0ZTogc3RhdGVcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIGlmICh0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlT2JzZXJ2ZXIgPSBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4geCAhPT0gb2JzZXJ2ZXI7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAodGhpcy5yZXRyeWVyKSB7XG4gICAgICB0aGlzLnJldHJ5ZXIuY2FuY2VsKCk7XG4gICAgICByZXR1cm4gdGhpcy5yZXRyeWVyLnByb21pc2UudGhlbihub29wKS5jYXRjaChub29wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbnRpbnVlID0gZnVuY3Rpb24gX2NvbnRpbnVlKCkge1xuICAgIGlmICh0aGlzLnJldHJ5ZXIpIHtcbiAgICAgIHRoaXMucmV0cnllci5jb250aW51ZSgpO1xuICAgICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoKTtcbiAgfTtcblxuICBfcHJvdG8uZXhlY3V0ZSA9IGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBkYXRhO1xuICAgIHZhciByZXN0b3JlZCA9IHRoaXMuc3RhdGUuc3RhdHVzID09PSAnbG9hZGluZyc7XG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIGlmICghcmVzdG9yZWQpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgIHZhcmlhYmxlczogdGhpcy5vcHRpb25zLnZhcmlhYmxlc1xuICAgICAgfSk7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gTm90aWZ5IGNhY2hlIGNhbGxiYWNrXG4gICAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uTXV0YXRlID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbk11dGF0ZSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vbk11dGF0ZShfdGhpcy5zdGF0ZS52YXJpYWJsZXMpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBpZiAoY29udGV4dCAhPT0gX3RoaXMuc3RhdGUuY29udGV4dCkge1xuICAgICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdsb2FkaW5nJyxcbiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgICB2YXJpYWJsZXM6IF90aGlzLnN0YXRlLnZhcmlhYmxlc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5leGVjdXRlTXV0YXRpb24oKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgIGRhdGEgPSByZXN1bHQ7IC8vIE5vdGlmeSBjYWNoZSBjYWxsYmFja1xuXG4gICAgICBfdGhpcy5tdXRhdGlvbkNhY2hlLmNvbmZpZy5vblN1Y2Nlc3MgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uU3VjY2VzcyhkYXRhLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQsIF90aGlzKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU3VjY2VzcyA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblN1Y2Nlc3MoZGF0YSwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMub3B0aW9ucy5vblNldHRsZWQoZGF0YSwgbnVsbCwgX3RoaXMuc3RhdGUudmFyaWFibGVzLCBfdGhpcy5zdGF0ZS5jb250ZXh0KTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAvLyBOb3RpZnkgY2FjaGUgY2FsbGJhY2tcbiAgICAgIF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLm11dGF0aW9uQ2FjaGUuY29uZmlnLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCwgX3RoaXMpOyAvLyBMb2cgZXJyb3JcblxuICAgICAgZ2V0TG9nZ2VyKCkuZXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMub3B0aW9ucy5vbkVycm9yID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uRXJyb3IoZXJyb3IsIF90aGlzLnN0YXRlLnZhcmlhYmxlcywgX3RoaXMuc3RhdGUuY29udGV4dCk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLm9wdGlvbnMub25TZXR0bGVkID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcy5vcHRpb25zLm9uU2V0dGxlZCh1bmRlZmluZWQsIGVycm9yLCBfdGhpcy5zdGF0ZS52YXJpYWJsZXMsIF90aGlzLnN0YXRlLmNvbnRleHQpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5leGVjdXRlTXV0YXRpb24gPSBmdW5jdGlvbiBleGVjdXRlTXV0YXRpb24oKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXMsXG4gICAgICAgIF90aGlzJG9wdGlvbnMkcmV0cnk7XG5cbiAgICB0aGlzLnJldHJ5ZXIgPSBuZXcgUmV0cnllcih7XG4gICAgICBmbjogZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMubXV0YXRpb25Gbikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTm8gbXV0YXRpb25GbiBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF90aGlzMi5vcHRpb25zLm11dGF0aW9uRm4oX3RoaXMyLnN0YXRlLnZhcmlhYmxlcyk7XG4gICAgICB9LFxuICAgICAgb25GYWlsOiBmdW5jdGlvbiBvbkZhaWwoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2ZhaWxlZCdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgb25QYXVzZTogZnVuY3Rpb24gb25QYXVzZSgpIHtcbiAgICAgICAgX3RoaXMyLmRpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiAncGF1c2UnXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG9uQ29udGludWU6IGZ1bmN0aW9uIG9uQ29udGludWUoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogJ2NvbnRpbnVlJ1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZXRyeTogKF90aGlzJG9wdGlvbnMkcmV0cnkgPSB0aGlzLm9wdGlvbnMucmV0cnkpICE9IG51bGwgPyBfdGhpcyRvcHRpb25zJHJldHJ5IDogMCxcbiAgICAgIHJldHJ5RGVsYXk6IHRoaXMub3B0aW9ucy5yZXRyeURlbGF5XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucmV0cnllci5wcm9taXNlO1xuICB9O1xuXG4gIF9wcm90by5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHJlZHVjZXIodGhpcy5zdGF0ZSwgYWN0aW9uKTtcbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5vYnNlcnZlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgb2JzZXJ2ZXIub25NdXRhdGlvblVwZGF0ZShhY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzMy5tdXRhdGlvbkNhY2hlLm5vdGlmeShfdGhpczMpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBNdXRhdGlvbjtcbn0oKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUoKSB7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogdW5kZWZpbmVkLFxuICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBmYWlsdXJlQ291bnQ6IDAsXG4gICAgaXNQYXVzZWQ6IGZhbHNlLFxuICAgIHN0YXR1czogJ2lkbGUnLFxuICAgIHZhcmlhYmxlczogdW5kZWZpbmVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3BhdXNlJzpcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNQYXVzZWQ6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnY29udGludWUnOlxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc1BhdXNlZDogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnbG9hZGluZyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGNvbnRleHQ6IGFjdGlvbi5jb250ZXh0LFxuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2xvYWRpbmcnLFxuICAgICAgICB2YXJpYWJsZXM6IGFjdGlvbi52YXJpYWJsZXNcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgIGlzUGF1c2VkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdlcnJvcic6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCB7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IGFjdGlvbi5lcnJvcixcbiAgICAgICAgZmFpbHVyZUNvdW50OiBzdGF0ZS5mYWlsdXJlQ291bnQgKyAxLFxuICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgIHN0YXR1czogJ2Vycm9yJ1xuICAgICAgfSk7XG5cbiAgICBjYXNlICdzZXRTdGF0ZSc6XG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0YXRlLCBhY3Rpb24uc3RhdGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufSIsICJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuL25vdGlmeU1hbmFnZXInO1xuaW1wb3J0IHsgTXV0YXRpb24gfSBmcm9tICcuL211dGF0aW9uJztcbmltcG9ydCB7IG1hdGNoTXV0YXRpb24sIG5vb3AgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFN1YnNjcmliYWJsZSB9IGZyb20gJy4vc3Vic2NyaWJhYmxlJzsgLy8gVFlQRVNcblxuLy8gQ0xBU1NcbmV4cG9ydCB2YXIgTXV0YXRpb25DYWNoZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1N1YnNjcmliYWJsZSkge1xuICBfaW5oZXJpdHNMb29zZShNdXRhdGlvbkNhY2hlLCBfU3Vic2NyaWJhYmxlKTtcblxuICBmdW5jdGlvbiBNdXRhdGlvbkNhY2hlKGNvbmZpZykge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1N1YnNjcmliYWJsZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgX3RoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIF90aGlzLm11dGF0aW9ucyA9IFtdO1xuICAgIF90aGlzLm11dGF0aW9uSWQgPSAwO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBNdXRhdGlvbkNhY2hlLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYnVpbGQgPSBmdW5jdGlvbiBidWlsZChjbGllbnQsIG9wdGlvbnMsIHN0YXRlKSB7XG4gICAgdmFyIG11dGF0aW9uID0gbmV3IE11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uQ2FjaGU6IHRoaXMsXG4gICAgICBtdXRhdGlvbklkOiArK3RoaXMubXV0YXRpb25JZCxcbiAgICAgIG9wdGlvbnM6IGNsaWVudC5kZWZhdWx0TXV0YXRpb25PcHRpb25zKG9wdGlvbnMpLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgZGVmYXVsdE9wdGlvbnM6IG9wdGlvbnMubXV0YXRpb25LZXkgPyBjbGllbnQuZ2V0TXV0YXRpb25EZWZhdWx0cyhvcHRpb25zLm11dGF0aW9uS2V5KSA6IHVuZGVmaW5lZCxcbiAgICAgIG1ldGE6IG9wdGlvbnMubWV0YVxuICAgIH0pO1xuICAgIHRoaXMuYWRkKG11dGF0aW9uKTtcbiAgICByZXR1cm4gbXV0YXRpb247XG4gIH07XG5cbiAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChtdXRhdGlvbikge1xuICAgIHRoaXMubXV0YXRpb25zLnB1c2gobXV0YXRpb24pO1xuICAgIHRoaXMubm90aWZ5KG11dGF0aW9uKTtcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG11dGF0aW9uKSB7XG4gICAgdGhpcy5tdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4ICE9PSBtdXRhdGlvbjtcbiAgICB9KTtcbiAgICBtdXRhdGlvbi5jYW5jZWwoKTtcbiAgICB0aGlzLm5vdGlmeShtdXRhdGlvbik7XG4gIH07XG5cbiAgX3Byb3RvLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5tdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgICAgX3RoaXMyLnJlbW92ZShtdXRhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0QWxsID0gZnVuY3Rpb24gZ2V0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucztcbiAgfTtcblxuICBfcHJvdG8uZmluZCA9IGZ1bmN0aW9uIGZpbmQoZmlsdGVycykge1xuICAgIGlmICh0eXBlb2YgZmlsdGVycy5leGFjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZpbHRlcnMuZXhhY3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm11dGF0aW9ucy5maW5kKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG1hdGNoTXV0YXRpb24oZmlsdGVycywgbXV0YXRpb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5maW5kQWxsID0gZnVuY3Rpb24gZmluZEFsbChmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRpb25zLmZpbHRlcihmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBtYXRjaE11dGF0aW9uKGZpbHRlcnMsIG11dGF0aW9uKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KG11dGF0aW9uKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgbGlzdGVuZXIobXV0YXRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLm9uRm9jdXMgPSBmdW5jdGlvbiBvbkZvY3VzKCkge1xuICAgIHRoaXMucmVzdW1lUGF1c2VkTXV0YXRpb25zKCk7XG4gIH07XG5cbiAgX3Byb3RvLm9uT25saW5lID0gZnVuY3Rpb24gb25PbmxpbmUoKSB7XG4gICAgdGhpcy5yZXN1bWVQYXVzZWRNdXRhdGlvbnMoKTtcbiAgfTtcblxuICBfcHJvdG8ucmVzdW1lUGF1c2VkTXV0YXRpb25zID0gZnVuY3Rpb24gcmVzdW1lUGF1c2VkTXV0YXRpb25zKCkge1xuICAgIHZhciBwYXVzZWRNdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiB4LnN0YXRlLmlzUGF1c2VkO1xuICAgIH0pO1xuICAgIHJldHVybiBub3RpZnlNYW5hZ2VyLmJhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBwYXVzZWRNdXRhdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChwcm9taXNlLCBtdXRhdGlvbikge1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gbXV0YXRpb24uY29udGludWUoKS5jYXRjaChub29wKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIE11dGF0aW9uQ2FjaGU7XG59KFN1YnNjcmliYWJsZSk7IiwgImltcG9ydCB7IGlzQ2FuY2VsYWJsZSB9IGZyb20gJy4vcmV0cnllcic7XG5pbXBvcnQgeyBnZXRBYm9ydENvbnRyb2xsZXIgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCBmdW5jdGlvbiBpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IoKSB7XG4gIHJldHVybiB7XG4gICAgb25GZXRjaDogZnVuY3Rpb24gb25GZXRjaChjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmZldGNoRm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfY29udGV4dCRmZXRjaE9wdGlvbnMsIF9jb250ZXh0JGZldGNoT3B0aW9uczIsIF9jb250ZXh0JGZldGNoT3B0aW9uczMsIF9jb250ZXh0JGZldGNoT3B0aW9uczQsIF9jb250ZXh0JHN0YXRlJGRhdGEsIF9jb250ZXh0JHN0YXRlJGRhdGEyO1xuXG4gICAgICAgIHZhciByZWZldGNoUGFnZSA9IChfY29udGV4dCRmZXRjaE9wdGlvbnMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnMyID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zLm1ldGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRmZXRjaE9wdGlvbnMyLnJlZmV0Y2hQYWdlO1xuICAgICAgICB2YXIgZmV0Y2hNb3JlID0gKF9jb250ZXh0JGZldGNoT3B0aW9uczMgPSBjb250ZXh0LmZldGNoT3B0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IChfY29udGV4dCRmZXRjaE9wdGlvbnM0ID0gX2NvbnRleHQkZmV0Y2hPcHRpb25zMy5tZXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkZmV0Y2hPcHRpb25zNC5mZXRjaE1vcmU7XG4gICAgICAgIHZhciBwYWdlUGFyYW0gPSBmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5wYWdlUGFyYW07XG4gICAgICAgIHZhciBpc0ZldGNoaW5nTmV4dFBhZ2UgPSAoZmV0Y2hNb3JlID09IG51bGwgPyB2b2lkIDAgOiBmZXRjaE1vcmUuZGlyZWN0aW9uKSA9PT0gJ2ZvcndhcmQnO1xuICAgICAgICB2YXIgaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSA9IChmZXRjaE1vcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoTW9yZS5kaXJlY3Rpb24pID09PSAnYmFja3dhcmQnO1xuICAgICAgICB2YXIgb2xkUGFnZXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEgPSBjb250ZXh0LnN0YXRlLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfY29udGV4dCRzdGF0ZSRkYXRhLnBhZ2VzKSB8fCBbXTtcbiAgICAgICAgdmFyIG9sZFBhZ2VQYXJhbXMgPSAoKF9jb250ZXh0JHN0YXRlJGRhdGEyID0gY29udGV4dC5zdGF0ZS5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2NvbnRleHQkc3RhdGUkZGF0YTIucGFnZVBhcmFtcykgfHwgW107XG4gICAgICAgIHZhciBhYm9ydENvbnRyb2xsZXIgPSBnZXRBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgdmFyIGFib3J0U2lnbmFsID0gYWJvcnRDb250cm9sbGVyID09IG51bGwgPyB2b2lkIDAgOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB2YXIgbmV3UGFnZVBhcmFtcyA9IG9sZFBhZ2VQYXJhbXM7XG4gICAgICAgIHZhciBjYW5jZWxsZWQgPSBmYWxzZTsgLy8gR2V0IHF1ZXJ5IGZ1bmN0aW9uXG5cbiAgICAgICAgdmFyIHF1ZXJ5Rm4gPSBjb250ZXh0Lm9wdGlvbnMucXVlcnlGbiB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdNaXNzaW5nIHF1ZXJ5Rm4nKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgYnVpbGROZXdQYWdlcyA9IGZ1bmN0aW9uIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cykge1xuICAgICAgICAgIG5ld1BhZ2VQYXJhbXMgPSBwcmV2aW91cyA/IFtwYXJhbV0uY29uY2F0KG5ld1BhZ2VQYXJhbXMpIDogW10uY29uY2F0KG5ld1BhZ2VQYXJhbXMsIFtwYXJhbV0pO1xuICAgICAgICAgIHJldHVybiBwcmV2aW91cyA/IFtwYWdlXS5jb25jYXQocGFnZXMpIDogW10uY29uY2F0KHBhZ2VzLCBbcGFnZV0pO1xuICAgICAgICB9OyAvLyBDcmVhdGUgZnVuY3Rpb24gdG8gZmV0Y2ggYSBwYWdlXG5cblxuICAgICAgICB2YXIgZmV0Y2hQYWdlID0gZnVuY3Rpb24gZmV0Y2hQYWdlKHBhZ2VzLCBtYW51YWwsIHBhcmFtLCBwcmV2aW91cykge1xuICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnQ2FuY2VsbGVkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3VuZGVmaW5lZCcgJiYgIW1hbnVhbCAmJiBwYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGFnZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBxdWVyeUZuQ29udGV4dCA9IHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBjb250ZXh0LnF1ZXJ5S2V5LFxuICAgICAgICAgICAgc2lnbmFsOiBhYm9ydFNpZ25hbCxcbiAgICAgICAgICAgIHBhZ2VQYXJhbTogcGFyYW0sXG4gICAgICAgICAgICBtZXRhOiBjb250ZXh0Lm1ldGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciBxdWVyeUZuUmVzdWx0ID0gcXVlcnlGbihxdWVyeUZuQ29udGV4dCk7XG4gICAgICAgICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUocXVlcnlGblJlc3VsdCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkTmV3UGFnZXMocGFnZXMsIHBhcmFtLCBwYWdlLCBwcmV2aW91cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHF1ZXJ5Rm5SZXN1bHQpKSB7XG4gICAgICAgICAgICB2YXIgcHJvbWlzZUFzQW55ID0gcHJvbWlzZTtcbiAgICAgICAgICAgIHByb21pc2VBc0FueS5jYW5jZWwgPSBxdWVyeUZuUmVzdWx0LmNhbmNlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgcHJvbWlzZTsgLy8gRmV0Y2ggZmlyc3QgcGFnZT9cblxuICAgICAgICBpZiAoIW9sZFBhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2UoW10pO1xuICAgICAgICB9IC8vIEZldGNoIG5leHQgcGFnZT9cbiAgICAgICAgZWxzZSBpZiAoaXNGZXRjaGluZ05leHRQYWdlKSB7XG4gICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIHBhZ2VQYXJhbSAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgICB2YXIgcGFyYW0gPSBtYW51YWwgPyBwYWdlUGFyYW0gOiBnZXROZXh0UGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuICAgICAgICAgICAgcHJvbWlzZSA9IGZldGNoUGFnZShvbGRQYWdlcywgbWFudWFsLCBwYXJhbSk7XG4gICAgICAgICAgfSAvLyBGZXRjaCBwcmV2aW91cyBwYWdlP1xuICAgICAgICAgIGVsc2UgaWYgKGlzRmV0Y2hpbmdQcmV2aW91c1BhZ2UpIHtcbiAgICAgICAgICAgICAgdmFyIF9tYW51YWwgPSB0eXBlb2YgcGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJztcblxuICAgICAgICAgICAgICB2YXIgX3BhcmFtID0gX21hbnVhbCA/IHBhZ2VQYXJhbSA6IGdldFByZXZpb3VzUGFnZVBhcmFtKGNvbnRleHQub3B0aW9ucywgb2xkUGFnZXMpO1xuXG4gICAgICAgICAgICAgIHByb21pc2UgPSBmZXRjaFBhZ2Uob2xkUGFnZXMsIF9tYW51YWwsIF9wYXJhbSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IC8vIFJlZmV0Y2ggcGFnZXNcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICBuZXdQYWdlUGFyYW1zID0gW107XG4gICAgICAgICAgICAgICAgICB2YXIgbWFudWFsID0gdHlwZW9mIGNvbnRleHQub3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRGZXRjaEZpcnN0UGFnZSA9IHJlZmV0Y2hQYWdlICYmIG9sZFBhZ2VzWzBdID8gcmVmZXRjaFBhZ2Uob2xkUGFnZXNbMF0sIDAsIG9sZFBhZ2VzKSA6IHRydWU7IC8vIEZldGNoIGZpcnN0IHBhZ2VcblxuICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNob3VsZEZldGNoRmlyc3RQYWdlID8gZmV0Y2hQYWdlKFtdLCBtYW51YWwsIG9sZFBhZ2VQYXJhbXNbMF0pIDogUHJvbWlzZS5yZXNvbHZlKGJ1aWxkTmV3UGFnZXMoW10sIG9sZFBhZ2VQYXJhbXNbMF0sIG9sZFBhZ2VzWzBdKSk7IC8vIEZldGNoIHJlbWFpbmluZyBwYWdlc1xuXG4gICAgICAgICAgICAgICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZEZldGNoTmV4dFBhZ2UgPSByZWZldGNoUGFnZSAmJiBvbGRQYWdlc1tpXSA/IHJlZmV0Y2hQYWdlKG9sZFBhZ2VzW2ldLCBpLCBvbGRQYWdlcykgOiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEZldGNoTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcGFyYW0yID0gbWFudWFsID8gb2xkUGFnZVBhcmFtc1tpXSA6IGdldE5leHRQYWdlUGFyYW0oY29udGV4dC5vcHRpb25zLCBwYWdlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaFBhZ2UocGFnZXMsIG1hbnVhbCwgX3BhcmFtMik7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShidWlsZE5ld1BhZ2VzKHBhZ2VzLCBvbGRQYWdlUGFyYW1zW2ldLCBvbGRQYWdlc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgb2xkUGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvb3AoaSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgIHZhciBmaW5hbFByb21pc2UgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHBhZ2VzKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2VzOiBwYWdlcyxcbiAgICAgICAgICAgIHBhZ2VQYXJhbXM6IG5ld1BhZ2VQYXJhbXNcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGZpbmFsUHJvbWlzZUFzQW55ID0gZmluYWxQcm9taXNlO1xuXG4gICAgICAgIGZpbmFsUHJvbWlzZUFzQW55LmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgIGFib3J0Q29udHJvbGxlciA9PSBudWxsID8gdm9pZCAwIDogYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG5cbiAgICAgICAgICBpZiAoaXNDYW5jZWxhYmxlKHByb21pc2UpKSB7XG4gICAgICAgICAgICBwcm9taXNlLmNhbmNlbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZmluYWxQcm9taXNlO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFBhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmdldE5leHRQYWdlUGFyYW0ocGFnZXNbcGFnZXMubGVuZ3RoIC0gMV0sIHBhZ2VzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmV2aW91c1BhZ2VQYXJhbShvcHRpb25zLCBwYWdlcykge1xuICByZXR1cm4gb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbShwYWdlc1swXSwgcGFnZXMpO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBuZXh0IHBhZ2UuXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXh0UGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXROZXh0UGFnZVBhcmFtICYmIEFycmF5LmlzQXJyYXkocGFnZXMpKSB7XG4gICAgdmFyIG5leHRQYWdlUGFyYW0gPSBnZXROZXh0UGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIG5leHRQYWdlUGFyYW0gIT09ICd1bmRlZmluZWQnICYmIG5leHRQYWdlUGFyYW0gIT09IG51bGwgJiYgbmV4dFBhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgcHJldmlvdXMgcGFnZS5cbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByZXZpb3VzUGFnZShvcHRpb25zLCBwYWdlcykge1xuICBpZiAob3B0aW9ucy5nZXRQcmV2aW91c1BhZ2VQYXJhbSAmJiBBcnJheS5pc0FycmF5KHBhZ2VzKSkge1xuICAgIHZhciBwcmV2aW91c1BhZ2VQYXJhbSA9IGdldFByZXZpb3VzUGFnZVBhcmFtKG9wdGlvbnMsIHBhZ2VzKTtcbiAgICByZXR1cm4gdHlwZW9mIHByZXZpb3VzUGFnZVBhcmFtICE9PSAndW5kZWZpbmVkJyAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gbnVsbCAmJiBwcmV2aW91c1BhZ2VQYXJhbSAhPT0gZmFsc2U7XG4gIH1cbn0iLCAiaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5leHBvcnQgdmFyIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gUmVhY3RET00udW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM7IiwgImltcG9ydCB7IG5vdGlmeU1hbmFnZXIgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIH0gZnJvbSAnLi9yZWFjdEJhdGNoZWRVcGRhdGVzJztcbm5vdGlmeU1hbmFnZXIuc2V0QmF0Y2hOb3RpZnlGdW5jdGlvbih1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyk7IiwgImV4cG9ydCB2YXIgbG9nZ2VyID0gY29uc29sZTsiLCAiaW1wb3J0IHsgc2V0TG9nZ2VyIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5zZXRMb2dnZXIobG9nZ2VyKTsiLCAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbnZhciBkZWZhdWx0Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG52YXIgUXVlcnlDbGllbnRTaGFyaW5nQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KGZhbHNlKTsgLy8gaWYgY29udGV4dFNoYXJpbmcgaXMgb24sIHdlIHNoYXJlIHRoZSBmaXJzdCBhbmQgYXQgbGVhc3Qgb25lXG4vLyBpbnN0YW5jZSBvZiB0aGUgY29udGV4dCBhY3Jvc3MgdGhlIHdpbmRvd1xuLy8gdG8gZW5zdXJlIHRoYXQgaWYgUmVhY3QgUXVlcnkgaXMgdXNlZCBhY3Jvc3Ncbi8vIGRpZmZlcmVudCBidW5kbGVzIG9yIG1pY3JvZnJvbnRlbmRzIHRoZXkgd2lsbFxuLy8gYWxsIHVzZSB0aGUgc2FtZSAqKmluc3RhbmNlKiogb2YgY29udGV4dCwgcmVnYXJkbGVzc1xuLy8gb2YgbW9kdWxlIHNjb3BpbmcuXG5cbmZ1bmN0aW9uIGdldFF1ZXJ5Q2xpZW50Q29udGV4dChjb250ZXh0U2hhcmluZykge1xuICBpZiAoY29udGV4dFNoYXJpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoIXdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dCkge1xuICAgICAgd2luZG93LlJlYWN0UXVlcnlDbGllbnRDb250ZXh0ID0gZGVmYXVsdENvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdpbmRvdy5SZWFjdFF1ZXJ5Q2xpZW50Q29udGV4dDtcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0Q29udGV4dDtcbn1cblxuZXhwb3J0IHZhciB1c2VRdWVyeUNsaWVudCA9IGZ1bmN0aW9uIHVzZVF1ZXJ5Q2xpZW50KCkge1xuICB2YXIgcXVlcnlDbGllbnQgPSBSZWFjdC51c2VDb250ZXh0KGdldFF1ZXJ5Q2xpZW50Q29udGV4dChSZWFjdC51c2VDb250ZXh0KFF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQpKSk7XG5cbiAgaWYgKCFxdWVyeUNsaWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gUXVlcnlDbGllbnQgc2V0LCB1c2UgUXVlcnlDbGllbnRQcm92aWRlciB0byBzZXQgb25lJyk7XG4gIH1cblxuICByZXR1cm4gcXVlcnlDbGllbnQ7XG59O1xuZXhwb3J0IHZhciBRdWVyeUNsaWVudFByb3ZpZGVyID0gZnVuY3Rpb24gUXVlcnlDbGllbnRQcm92aWRlcihfcmVmKSB7XG4gIHZhciBjbGllbnQgPSBfcmVmLmNsaWVudCxcbiAgICAgIF9yZWYkY29udGV4dFNoYXJpbmcgPSBfcmVmLmNvbnRleHRTaGFyaW5nLFxuICAgICAgY29udGV4dFNoYXJpbmcgPSBfcmVmJGNvbnRleHRTaGFyaW5nID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkY29udGV4dFNoYXJpbmcsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIFJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgY2xpZW50Lm1vdW50KCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsaWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgfSwgW2NsaWVudF0pO1xuICB2YXIgQ29udGV4dCA9IGdldFF1ZXJ5Q2xpZW50Q29udGV4dChjb250ZXh0U2hhcmluZyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChRdWVyeUNsaWVudFNoYXJpbmdDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHRTaGFyaW5nXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogY2xpZW50XG4gIH0sIGNoaWxkcmVuKSk7XG59OyIsICJcbmltcG9ydCB7IGNyZWF0ZUVudGl0eVRyZWUgfSBmcm9tIFwiLi9FbnRpdHlUcmVlV2lkZ2V0XCJcblxud2luZG93WydPTFNXaWRnZXRzJ10gPSB7XG4gICAgY3JlYXRlRW50aXR5VHJlZVxufVxuXG5leHBvcnQgeyBjcmVhdGVFbnRpdHlUcmVlIH1cbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtLCBFdWlQYW5lbCwgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7QWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uKHByb3BzOiBBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gIGZ1bmN0aW9uIHJlbmRlckFsdExhYmVsKCkge1xuICAgIGlmIChwcm9wcy5zeW5vbnltcyAmJiBwcm9wcy5zeW5vbnltcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcHJvcHMuc3lub255bXMubWFwKCh2YWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiAoXG4gICAgICAgIDxFdWlGbGV4SXRlbSBrZXk9e3ZhbHVlICsgaW5kZXh9Pnt2YWx1ZX08L0V1aUZsZXhJdGVtPlxuICAgICAgKSk7XG4gICAgfVxuICAgIHJldHVybiA8RXVpVGV4dD5ObyBhbHRlcm5hdGl2ZSBuYW1lcyBleGlzdC48L0V1aVRleHQ+O1xuICB9XG5cbiAgLy8gVXNpbmcgcmVpZmljYXRpb24vcGFzc2luZyB0aGUgRW50aXR5IGNsYXNzIGNvdWxkIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvblxuICAvLyBmdW5jdGlvbiByZW5kZXJBbHRMYWJlbChlbnRpdHk6IEVudGl0eSkge1xuICAvLyAgIGlmIChlbnRpdHkuZ2V0U3lub255bXMoKS5sZW5ndGggPiAwKSB7XG4gIC8vICAgICByZXR1cm4gZW50aXR5LmdldFN5bm9ueW1zKCkubWFwKChyZjogUmVpZmllZDxhbnk+LCBpbmRleDogbnVtYmVyKSA9PiAoXG4gIC8vICAgICAgIDxwIGtleT17cmYudmFsdWUgKyBpbmRleH0+e2dldFJlaWZpZWRKU1goZW50aXR5LCByZiwgYXBpKX08L3A+XG4gIC8vICAgICApKTtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIDxFdWlUZXh0Pk5vIGFsdGVybmF0aXZlIG5hbWVzIGV4aXN0LjwvRXVpVGV4dD47XG4gIC8vIH1cblxuICByZXR1cm4gKFxuICAgIDxFdWlQYW5lbD5cbiAgICAgIDxFdWlGbGV4R3JvdXAgc3R5bGU9e3sgcGFkZGluZzogMTAgfX0gZGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgIHtyZW5kZXJBbHRMYWJlbCgpfVxuICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgPC9FdWlQYW5lbD5cbiAgKTtcbn1cblxuZXhwb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSwgRXVpUGFuZWwsIEV1aVRleHQgfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQge0Nyb3NzUmVmUHJlc2VudGF0aW9uUHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcblxuZnVuY3Rpb24gQ3Jvc3NSZWZUYWJQcmVzZW50YXRpb24ocHJvcHM6IENyb3NzUmVmUHJlc2VudGF0aW9uUHJvcHMpIHtcblxuICBmdW5jdGlvbiByZW5kZXJDcm9zc1JlZnMoY3Jvc3NyZWZzOiBhbnkpIHtcbiAgICBpZiAoY3Jvc3NyZWZzICYmIGNyb3NzcmVmcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3Jvc3NyZWZzPy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4gKFxuICAgICAgICA8RXVpRmxleEl0ZW0ga2V5PXtpbmRleH0+XG4gICAgICAgICAge2l0ZW19XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICApKTtcbiAgICB9XG4gICAgcmV0dXJuIDxFdWlUZXh0Pk5vIGNyb3NzIHJlZmVyZW5jZXMgZXhpc3QuPC9FdWlUZXh0PjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEV1aVBhbmVsPlxuICAgICAgPD5cbiAgICAgICAgPEV1aUZsZXhHcm91cCBzdHlsZT17eyBwYWRkaW5nOiA3IH19IGRpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIHtyZW5kZXJDcm9zc1JlZnMocHJvcHMuY3Jvc3NyZWZzKX1cbiAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICA8Lz5cbiAgICA8L0V1aVBhbmVsPlxuICApO1xufVxuXG5leHBvcnQgeyBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCB7RXVpUGFuZWwsIEV1aVByb3ZpZGVyLCBFdWlUcmVlVmlld30gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvdHJlZV92aWV3L3RyZWVfdmlld1wiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBmZXRjaF9kYXRhLCBnZXRfdXJsX3ByZWZpeCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvaGllcmFyY2h5X3dpZGdldF9kZXByZWNhdGVkXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbi8qKlxuICogUmVzcG9uc2UgZnJvbSBPTFNcbiAqL1xuaW50ZXJmYWNlIFNlbWFudGljUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBwYXJlbnQ6IHN0cmluZztcbiAgaXJpOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgLyogc3RhdGU6IHtcbiAgICBvcGVuZWQ6IGJvb2xlYW47XG4gIH07ICovXG4gIGNoaWxkcmVuOiBib29sZWFuO1xuICAvKiBhX2F0dHI6IHtcbiAgICBpcmk6IHN0cmluZztcbiAgICBvbnRvbG9neV9uYW1lOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBjbGFzczogc3RyaW5nO1xuICB9OyAqL1xuICAvLyBvbnRvbG9neV9uYW1lOiBzdHJpbmc7XG59XG5jbGFzcyBIaWVyYXJjaHlUcmVlIGltcGxlbWVudHMgTm9kZSB7XG4gIHVybDogc3RyaW5nO1xuICBpcmk6IHN0cmluZztcbiAgbGFiZWw6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaWQ6IHN0cmluZztcbiAgaXNFeHBhbmRlZD86IGJvb2xlYW4gPSB0cnVlO1xuICBjaGlsZHJlbjogQXJyYXk8SGllcmFyY2h5VHJlZT4gPSBbXTtcbiAgaWNvbjogUmVhY3QuUmVhY3RFbGVtZW50ID0gKDw+KzwvPik7XG4gIGljb25XaGVuRXhwYW5kZWQ6IFJlYWN0LlJlYWN0RWxlbWVudCA9ICg8Pi08Lz4pO1xuICBjb25zdHJ1Y3RvcihsYWJlbDogUmVhY3QuUmVhY3ROb2RlLCBpZDogc3RyaW5nLCB1cmw6IHN0cmluZywgaXJpOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuaXJpID0gaXJpO1xuICAgIHRoaXMudXJsID0gdXJsO1xuICB9XG4gIHNldGNoaWxkKGNoaWxkOiBIaWVyYXJjaHlUcmVlKSB7XG4gICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmljb24gPSA8Pis8Lz47XG4gICAgfVxuICB9XG4gIGlzX3Jvb3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWQgPT09IFwiI1wiO1xuICB9XG4gIHRvX3N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxhYmVsICsgXCJbIFwiICsgdGhpcy5jaGlsZHJlbi5tYXAoKHZhbHVlKSA9PiB2YWx1ZS50b19zdHJpbmcoKSkgKyBcIiBdXCJcbiAgICApO1xuICB9XG4gIGNhbGxiYWNrKCkgeyAvL1RPRE8gaGFuZGxlIHZpYSBPbHNBcGkuZ2V0VGVybVRyZWUgd2l0aCBjaGlsZCBwYXJhbVxuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IGFwaV9kYXRhX29uY2xpY2sgPVxuICAgICAgdGhpcy51cmwgK1xuICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmlyaSkpICtcbiAgICAgIFwiL2pzdHJlZS9jaGlsZHJlbi9cIiArXG4gICAgICB0aGlzLmlkO1xuICAgIGZldGNoX2RhdGEoYXBpX2RhdGFfb25jbGljaykudGhlbigocmVzKSA9PiB7XG4gICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICBjcmVhdGVfdHJlZSh0aGlzLCByZXMsIHRoaXMudXJsKTtcbiAgICB9KTtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuY29uc3QgY3JlYXRlX3RyZWUgPSAoXG4gIHRyZWU6IEhpZXJhcmNoeVRyZWUsXG4gIGFycjogQXJyYXk8U2VtYW50aWNSZXNwb25zZT4sXG4gIHVybDogc3RyaW5nXG4pID0+IHtcbiAgYXJyXG4gICAgLmZpbHRlcigodmFsdWUpID0+IHZhbHVlLnBhcmVudCA9PT0gdHJlZS5pZClcbiAgICAuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgIHRyZWUuc2V0Y2hpbGQoXG4gICAgICAgIG5ldyBIaWVyYXJjaHlUcmVlKHZhbHVlLnRleHQsIHZhbHVlLmlkLCB1cmwsIHZhbHVlLmlyaSlcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdHJlZS5jaGlsZHJlbi5tYXAoKHZhbHVlKSA9PiBjcmVhdGVfdHJlZSh2YWx1ZSwgYXJyLCB1cmwpKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZFByb3BzIHtcbiAgaXJpPzogc3RyaW5nO1xuICBvbnRvbG9neUlkOiBzdHJpbmc7XG4gIGFwaTogc3RyaW5nO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRUcmVlKG9sc0FwaTogT2xzQXBpLCBvbnRvbG9neUlEOiBzdHJpbmcsIGlyaT86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb2xzQXBpLmdldFRlcm1UcmVlKHtvbnRvbG9neUlkOiBvbnRvbG9neUlELCB0ZXJtSXJpOiBpcml9LCB7dmlld01vZGU6IFwiQWxsXCIsIHNpYmxpbmdzOiBmYWxzZX0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkKVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUubG9nKGVycm9yKSk7XG4gIGlmIChpcmkpIHJldHVybiByZXNwb25zZVxuICBlbHNlIHsgLy9yb290cyBoYXZlIGJlZW4gcXVlcmllZCwgYW5kIHRoZSByZXNwb25zZSBuZWVkcyByZXN0cnVjdHVyaW5nIHRvIGJlY29tZSBTZW1hbnRpY1Jlc3BvbnNlXG4gICAgcmV0dXJuIHJlc3BvbnNlLl9lbWJlZGRlZC50ZXJtcy5tYXAoXG4gICAgICAoeDogeyBpcmk6IHN0cmluZywgbGFiZWw6IHN0cmluZywgaGFzX2NoaWxkcmVuOiBib29sZWFuIH0sIGk6IG51bWJlcikgPT5cbiAgICAgICAgKHtpZDogKCsraSkudG9TdHJpbmcoKSwgcGFyZW50OiAnIycsIGlyaTogeC5pcmksIHRleHQ6IHgubGFiZWwsIGNoaWxkcmVuOiB4Lmhhc19jaGlsZHJlbn0pXG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkID0gKHByb3BzOiBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkUHJvcHMpID0+IHtcbiAgY29uc3QgeyBpcmksIG9udG9sb2d5SWQsIGFwaSB9ID0gcHJvcHM7XG4gIGNvbnN0IFt0cmVlSXRlbXMsIHNldFRyZWVJdGVtc10gPSB1c2VTdGF0ZTxIaWVyYXJjaHlUcmVlW10+KCk7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcbiAgY29uc3QgbGlua1RvU2VsZiA9IGFwaStcIm9udG9sb2dpZXMvXCIrb250b2xvZ3lJZCtcIi90ZXJtcy9cIlxuXG4gIGNvbnN0IGZldGNoQ2hpbGRyZW4gPSBhc3luYyAoY2hpbGQ6IEhpZXJhcmNoeVRyZWUpID0+IHsgLy9jb3VsZCBiZSBnaXZlbiB0byBIaWVyYXJjaHlUcmVlIG5vZGVzIGZvciBvbkNsaWNrIGNhbGxiYWNrc1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb2xzQXBpLmdldFRlcm1UcmVlKHtvbnRvbG9neUlkOiBvbnRvbG9neUlkLCB0ZXJtSXJpOiBpcml9LCB7Y2hpbGQ6IGNoaWxkLmlkfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmxvZyhlcnJvcikpO1xuICAgIGNoaWxkLmNoaWxkcmVuID0gW107XG4gICAgY3JlYXRlX3RyZWUoY2hpbGQsIHJlc3BvbnNlLCBnZXRfdXJsX3ByZWZpeChsaW5rVG9TZWxmKSk7XG4gIH1cblxuICAvL2luaXRpYWwgdHJlZSBxdWVyeVxuICB1c2VRdWVyeTxBcnJheTxTZW1hbnRpY1Jlc3BvbnNlPj4oW2FwaSwgXCJnZXRUZXJtVHJlZVwiLCBvbnRvbG9neUlkLCBpcmldLCAoKSA9PiB7XG4gICAgcmV0dXJuIGdldFRyZWUob2xzQXBpLCBvbnRvbG9neUlkLCBpcmkpXG4gICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBuZXcgSGllcmFyY2h5VHJlZShcIiNcIiwgXCIjXCIsIFwiXCIsIFwiXCIpO1xuICAgICAgICBpZiAocmVzKSBjcmVhdGVfdHJlZShyb290LCByZXMsIGdldF91cmxfcHJlZml4KGxpbmtUb1NlbGYpKTtcbiAgICAgICAgc2V0VHJlZUl0ZW1zKHJvb3QuY2hpbGRyZW4pO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSk7XG4gIH0pO1xuICByZXR1cm4gKFxuICAgIDxFdWlQYW5lbD5cbiAgICAgIHt0cmVlSXRlbXMgJiYgKFxuICAgICAgICA8RXVpVHJlZVZpZXdcbiAgICAgICAgICBleHBhbmRCeURlZmF1bHQ9e3RydWV9XG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkhpZXJhcmNoeVRhYlwiXG4gICAgICAgICAgaXRlbXM9e3RyZWVJdGVtc31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9FdWlQYW5lbD5cbiAgKTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZXJhcmNoeURlcHJlY2F0ZWQocHJvcHM6IEhpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkKHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkKHByb3BzOiBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkUHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8SGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZFxuICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5leHBvcnQgeyBjcmVhdGVIaWVyYXJjaHlEZXByZWNhdGVkLCBIaWVyYXJjaHlXaWRnZXREZXByZWNhdGVkIH07IiwgImV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc05hbWUoY2xhc3NpZDogc3RyaW5nKSB7XG4gIHJldHVybiBmZXRjaChcbiAgICBcImh0dHBzOi8vc2VtYW50aWNsb29rdXAuemJtZWQuZGUvb2xzL2FwaS9vbnRvbG9naWVzL1wiICtcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChjbGFzc2lkKSxcbiAgICB7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9XG4gIClcbiAgICAudGhlbigocykgPT4gcy5qc29uKCkpXG4gICAgLnRoZW4oKHMpID0+IHtcbiAgICAgIHJldHVybiB7IGNsYXNzSUQ6IGNsYXNzaWQsIHByZWZMYWJlbDogcy5jb25maWc/LnRpdGxlIH07XG4gICAgfSlcbiAgICAuY2F0Y2goKHMpID0+IHtcbiAgICAgIHJldHVybiB7IGNsYXNzSUQ6IGNsYXNzaWQsIHByZWZMYWJlbDogdW5kZWZpbmVkIH07XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaENvbmNlcHRCeUlkKGlkOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZldGNoKFxuICAgIFwiaHR0cHM6Ly9zZW1hbnRpY2xvb2t1cC56Ym1lZC5kZS9vbHMvYXBpL3Rlcm1zL1wiICtcbiAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoaWQpKSxcbiAgICB7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9XG4gIClcbiAgICAudGhlbigocykgPT4gcy5qc29uKCkpXG4gICAgLnRoZW4oKHMpID0+IHtcbiAgICAgIHJldHVybiB7IGNvbmNlcHRJZDogaWQsIGNvbmNlcHQ6IHM/Ll9lbWJlZGRlZD8udGVybXNbMF0gfTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1dG9jb21wbGV0ZUNvbmNlcHQoXG4gIHRleHQ6IHN0cmluZyxcbiAgb250b2xvZ3k6IHN0cmluZyB8IHVuZGVmaW5lZFxuKSB7XG4gIGxldCBxdWVydCA9IFwiXCI7XG4gIGlmIChvbnRvbG9neSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcXVlcnQgPSBcIiZvbnRvbG9neT1cIiArIG9udG9sb2d5O1xuICB9XG4gIHJldHVybiBmZXRjaChcbiAgICBcImh0dHBzOi8vc2VtYW50aWNsb29rdXAuemJtZWQuZGUvb2xzL2FwaS9zZWxlY3Q/cXVlcnlGaWVsZHM9bGFiZWwsc3lub255bSxzaG9ydF9mb3JtLG9ib19pZCZncm91cEZpZWxkPXRydWUmdHlwZT1jbGFzcyZxPVwiICtcbiAgICAgIHRleHQgK1xuICAgICAgcXVlcnQsXG4gICAge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIH0sXG4gICAgfVxuICApXG4gICAgLnRoZW4oKHMpID0+IHMuanNvbigpKVxuICAgIC50aGVuKChzKSA9PiB7XG4gICAgICByZXR1cm4gcz8ucmVzcG9uc2U/LmRvY3MubWFwKChwOiBhbnkpID0+IG1hcE9sc1RvSXJpQW5kTmFtZVR1cGxlKHApKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbWFwT2xzVG9JcmlBbmROYW1lVHVwbGUoaXRlbTogYW55KSB7XG4gIHJldHVybiB7IGlyaTogaXRlbT8uaXJpLCBsYWJlbDogaXRlbT8ubGFiZWwgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGZldGNoX2RhdGEgPSAodXJsOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIChcbiAgICBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9LFxuICAgIH0pXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuanNvbigpKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vZGUvaGFuZGxlLWNhbGxiYWNrLWVyclxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSlcbiAgKTtcbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB1cmwgR2V0IHVybCB3aXRoIGh0dHAgb3IgaHR0cHMgcHJvdG9jb2xcbiAqIEByZXR1cm5zIGNvbmNhdGluYXRlIHMgdG8gaHR0cFxuICovXG5leHBvcnQgY29uc3QgZml4X3VybCA9ICh1cmw6IHN0cmluZykgPT4ge1xuICBpZiAodXJsLnN1YnN0cigwLCA1KSA9PT0gXCJodHRwOlwiKSB7XG4gICAgcmV0dXJuIHVybC5yZXBsYWNlKFwiaHR0cFwiLCBcImh0dHBzXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbn07XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB1cmxcbiAqIEByZXR1cm5zIHJldHVybiB1cmwgZnJvbSBodHRwcyB0byAvdGVybXNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldF91cmxfcHJlZml4ID0gKHVybDogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG4gIGlmICh1cmwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwiXCI7XG4gIHJldHVybiBmaXhfdXJsKHVybC5zdWJzdHJpbmcoMCwgdXJsLnNlYXJjaChcIi90ZXJtc1wiKSArIDcpKTtcbn07IiwgImltcG9ydCBSZWFjdCwge1JlYWN0RWxlbWVudH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUNhcmQsIEV1aUZsZXhJdGVtLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVNwYWNlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7T250b2xvZ3ksIFRoaW5nfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtjYXBpdGFsaXplLCBkZUNhbWVsQ2FzZSwgZGVVbmRlcnNjb3JlLCByYW5kb21TdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtnZXRFbnRpdHlMaW5rSlNYLCBnZXRSZWlmaWVkSlNYfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQge2dldEVycm9yTWVzc2FnZVRvRGlzcGxheX0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge09udG9sb2d5SW5mb1dpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5jb25zdCBERUZBVUxUX0hBU19USVRMRSA9IHRydWU7XG5cbmZ1bmN0aW9uIE9udG9sb2d5SW5mb1dpZGdldChwcm9wczogT250b2xvZ3lJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBvbnRvbG9neUlkLCBhcGksIHBhcmFtZXRlciwgaGFzVGl0bGUgPSBERUZBVUxUX0hBU19USVRMRSwgdXNlTGVnYWN5LCBzaG93QmFkZ2VzLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhOiBvbnRvbG9neSxcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZ09udG9sb2d5LFxuICAgIGlzU3VjY2VzczogaXNTdWNjZXNzT250b2xvZ3ksXG4gICAgaXNFcnJvcjogaXNFcnJvck9udG9sb2d5LFxuICAgIGVycm9yOiBlcnJvck9udG9sb2d5LFxuICB9ID0gdXNlUXVlcnkoXG4gICAgICBbXG4gICAgICAgIFwib250b2xvZ3lJbmZvXCIsXG4gICAgICAgIHByb3BzXG4gICAgICBdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICByZXR1cm4gb2xzQXBpLmdldE9udG9sb2d5T2JqZWN0KG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICAgIH1cbiAgKTtcblxuICBmdW5jdGlvbiBnZXRPbnRvbG9neUlyaVNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KTogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHsob250b2xvZ3kuZ2V0SXJpKCkgfHwgb250b2xvZ3kuZ2V0T250b2xvZ3lQdXJsKCkpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5PbnRvbG9neSBJUkk6PC9iPlxuICAgICAgICAgICAgICAgIDxwPjxhIGlkPXtcIm9udG9sb2d5SXJpXCJ9IGhyZWY9e29udG9sb2d5LmdldElyaSgpIHx8IG9udG9sb2d5LmdldE9udG9sb2d5UHVybCgpfT5cbiAgICAgICAgICAgICAgICAgIHtvbnRvbG9neS5nZXRJcmkoKSB8fCBvbnRvbG9neS5nZXRPbnRvbG9neVB1cmwoKX1cbiAgICAgICAgICAgICAgICA8L2E+PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFZlcnNpb25JcmlTZWN0aW9uKG9udG9sb2d5OiBPbnRvbG9neSkgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge29udG9sb2d5LmdldFZlcnNpb25JcmkoKSAmJlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+VmVyc2lvbiBJUkk6PC9iPlxuICAgICAgICAgICAgICAgIDxwPjxhIGlkPXtcInZlcnNpb25JcmlcIn0gaHJlZj17b250b2xvZ3kuZ2V0VmVyc2lvbklyaSgpfT5cbiAgICAgICAgICAgICAgICAgIHtvbnRvbG9neS5nZXRWZXJzaW9uSXJpKCl9XG4gICAgICAgICAgICAgICAgPC9hPjwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRMYXN0TG9hZFNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0U291cmNlRmlsZVRpbWVzdGFtcCgpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5MYXN0IGxvYWRlZDo8L2I+XG4gICAgICAgICAgICAgICAgPHA+e25ldyBEYXRlKG9udG9sb2d5LmdldFNvdXJjZUZpbGVUaW1lc3RhbXAoKSkudG9TdHJpbmcoKX08L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0T250b2xvZ3lJZFNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0T250b2xvZ3lJZCgpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5PbnRvbG9neSBJRDo8L2I+XG4gICAgICAgICAgICAgICAgPHA+e29udG9sb2d5LmdldE9udG9sb2d5SWQoKX08L3A+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VmVyc2lvblNlY3Rpb24ob250b2xvZ3k6IE9udG9sb2d5KSA6IFJlYWN0RWxlbWVudCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7b250b2xvZ3kuZ2V0VmVyc2lvbigpICYmXG4gICAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5WZXJzaW9uOjwvYj5cbiAgICAgICAgICAgICAgICA8cD57b250b2xvZ3kuZ2V0VmVyc2lvbigpfTwvcD5cbiAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXROdW1DbGFzc2VzU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXROdW1DbGFzc2VzKCkgJiZcbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPk51bWJlciBvZiBjbGFzc2VzOjwvYj5cbiAgICAgICAgICAgICAgICA8cD57b250b2xvZ3kuZ2V0TnVtQ2xhc3NlcygpLnRvTG9jYWxlU3RyaW5nKCl9PC9wPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENyZWF0b3JzU2VjdGlvbihvbnRvbG9neTogT250b2xvZ3kpIDogUmVhY3RFbGVtZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIHtvbnRvbG9neS5nZXRDcmVhdG9ycygpLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgPD48RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+Q3JlYXRvcnM6PC9iPlxuICAgICAgICAgICAgICAgIHtvbnRvbG9neS5nZXRDcmVhdG9ycygpLmxlbmd0aCA+IDEgP1xuICAgICAgICAgICAgICAgICAgICA8dWw+e29udG9sb2d5LmdldENyZWF0b3JzKCkubWFwKChjcmVhdG9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e2NyZWF0b3IgKyByYW5kb21TdHJpbmcoKX0+e2dldEVudGl0eUxpbmtKU1gob250b2xvZ3ksIG9udG9sb2d5LmdldExpbmtlZEVudGl0aWVzKCksIGNyZWF0b3IsIGFwaSwgc2hvd0JhZGdlcyl9PC9saT5cbiAgICAgICAgICAgICAgICAgICAgfSl9PC91bD4gOlxuICAgICAgICAgICAgICAgICAgICA8cD57Z2V0RW50aXR5TGlua0pTWChvbnRvbG9neSwgb250b2xvZ3kuZ2V0TGlua2VkRW50aXRpZXMoKSwgb250b2xvZ3kuZ2V0Q3JlYXRvcnMoKVswXSwgYXBpLCBzaG93QmFkZ2VzKX08L3A+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPjxFdWlTcGFjZXIvPjwvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFubm90YXRpb25TZWN0aW9uKHRoaW5nOiBUaGluZykgOiBSZWFjdEVsZW1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge3RoaW5nLmdldEFubm90YXRpb25QcmVkaWNhdGVzKCkubWFwKChhbm5vS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5ub3MgPSB0aGluZy5nZXRBbm5vdGF0aW9uQnlJZChhbm5vS2V5KTtcbiAgICAgICAgICAgICAgICBpZihhbm5vcy5sZW5ndGggPT0gMCkgcmV0dXJuIDw+PC8+O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0ga2V5PXthbm5vS2V5fT5cbiAgICAgICAgICAgICAgICAgIDxiPntjYXBpdGFsaXplKGRlVW5kZXJzY29yZShkZUNhbWVsQ2FzZSh0aGluZy5nZXRBbm5vdGF0aW9uVGl0bGVCeUlkKGFubm9LZXkpKSkpfTo8L2I+XG4gICAgICAgICAgICAgICAgICB7YW5ub3MubGVuZ3RoID4gMSA/XG4gICAgICAgICAgICAgICAgICAgICAgPHVsPnthbm5vcy5tYXAoKGFubm90YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8bGkga2V5PXtyYW5kb21TdHJpbmcoKX0gaWQ9e2Fubm90YXRpb24udmFsdWV9PntnZXRSZWlmaWVkSlNYKHRoaW5nLCBhbm5vdGF0aW9uLCBhcGksIHNob3dCYWRnZXMpfTwvbGk+O1xuICAgICAgICAgICAgICAgICAgICAgIH0pfTwvdWw+IDpcbiAgICAgICAgICAgICAgICAgICAgICA8cCBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UmVpZmllZEpTWCh0aGluZywgYW5ub3NbMF0sIGFwaSwgc2hvd0JhZGdlcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxFdWlDYXJkXG4gICAgICAgICAgICB0aXRsZT17aGFzVGl0bGUgPyBcIk9udG9sb2d5IEluZm9ybWF0aW9uXCIgOiBcIlwifVxuICAgICAgICAgICAgbGF5b3V0PVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICBzdHlsZT17cHJvcHMud2lkdGggJiYge3dpZHRoOiBwcm9wcy53aWR0aH19XG4gICAgICAgID5cblxuICAgICAgICAgIHtpc0xvYWRpbmdPbnRvbG9neSAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT17J3MnfS8+fVxuICAgICAgICAgIHtpc1N1Y2Nlc3NPbnRvbG9neSAmJiBvbnRvbG9neSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgIDxFdWlUZXh0IHsuLi5yZXN0fT5cblxuICAgICAgICAgICAgICAgIHtnZXRPbnRvbG9neUlyaVNlY3Rpb24ob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgIHtnZXRWZXJzaW9uSXJpU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAge2dldExhc3RMb2FkU2VjdGlvbihvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgey8qIFRPRE86IERvIHdlIHdhbnQgdGhlIGZvbGxvd2luZyBvbiB0aGUgaW5mb3JtYXRpb24gd2lkZ2V0P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWJpIGRvZXMgbm90IGhhdmUgdGhlbSB0aGVyZSwgYnV0IG9uIG90aGVyIHBhcnRzIG9mIHRoZSBlbnRpdHkgcGFnZSAqL1xuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAge2dldE9udG9sb2d5SWRTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAge2dldFZlcnNpb25TZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAge2dldE51bUNsYXNzZXNTZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAgey8qe2dldENyZWF0b3JzU2VjdGlvbihlbnRpdHlJbmZvKX0qLyAvKiByZWR1bmRhbnQgYXMgaXQncyBsaXN0ZWQgaW4gYW5ub3RhdGlvbnMgYW55d2F5ICovfVxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAge2dldEFubm90YXRpb25TZWN0aW9uKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgIH1cbiAgICAgICAgICB7aXNFcnJvck9udG9sb2d5ICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3JPbnRvbG9neSwgXCJpbmZvcm1hdGlvblwiKX08L0V1aVRleHQ+fVxuICAgICAgICA8L0V1aUNhcmQ+XG4gICAgICA8Lz5cbiAgKTtcblxufVxuXG5mdW5jdGlvbiBjcmVhdGVPbnRvbG9neUluZm8ocHJvcHM6IE9udG9sb2d5SW5mb1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRPbnRvbG9neUluZm9XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZE9udG9sb2d5SW5mb1dpZGdldChwcm9wczogT250b2xvZ3lJbmZvV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICA8T250b2xvZ3lJbmZvV2lkZ2V0XG4gICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgIHNob3dCYWRnZXM9e3Byb3BzLnNob3dCYWRnZXN9XG4gICAgICAgICAgICAgIGhhc1RpdGxlPXtwcm9wcy5oYXNUaXRsZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICA8L0V1aVByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCB7IE9udG9sb2d5SW5mb1dpZGdldCwgY3JlYXRlT250b2xvZ3lJbmZvIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2FwaS9PbHNBcGknXG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSAncmVhY3QtcXVlcnknXG5pbXBvcnQgeyBnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7QWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IGlzRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBBbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9BbHRlcm5hdGl2ZU5hbWVUYWJQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmZ1bmN0aW9uIEFsdGVybmF0aXZlTmFtZVRhYldpZGdldChwcm9wczogQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCB1c2VMZWdhY3kgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxUaGluZz4oXG4gICAgW1wiYWx0ZXJuYXRpdmVOYW1lVGFiXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgfVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiYgZGF0YSAmJiBpc0VudGl0eShkYXRhKSAmJlxuICAgICAgICA8QWx0ZXJuYXRpdmVOYW1lVGFiUHJlc2VudGF0aW9uIHN5bm9ueW1zPXtkYXRhLmdldFN5bm9ueW1zKCkubWFwKHN5bm9ueW0gPT4gc3lub255bS52YWx1ZSl9IC8+fVxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImFsdGVybmF0aXZlIG5hbWVzXCIpfTwvRXVpVGV4dD59XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFsdGVybmF0aXZlTmFtZVRhYihwcm9wczogQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXQocHJvcHM6IEFsdGVybmF0aXZlTmFtZVRhYldpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxBbHRlcm5hdGl2ZU5hbWVUYWJXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neUlkPXtwcm9wcy5vbnRvbG9neUlkfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0LCBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgQ3Jvc3NSZWZXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IGlzRW50aXR5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgeyBDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0Nyb3NzUmVmVGFiUHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuZnVuY3Rpb24gQ3Jvc3NSZWZUYWJXaWRnZXQocHJvcHM6IENyb3NzUmVmV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBpcmksIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCB1c2VMZWdhY3kgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxUaGluZz4oXG4gICAgW1wiY3Jvc3NSZWZUYWJcIiwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5XSxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gb2xzQXBpLmdldEVudGl0eU9iamVjdChpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmIGlzRW50aXR5KGRhdGEpICYmXG4gICAgICAgIDxDcm9zc1JlZlRhYlByZXNlbnRhdGlvbiBjcm9zc3JlZnM9e1JlaWZpZWQuZnJvbUpzb24oZGF0YS5nZXRDcm9zc1JlZmVyZW5jZXMoKSkubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfSl9IC8+fVxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcImNyb3NzIHJlZmVyZW5jZXNcIil9PC9FdWlUZXh0Pn1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ3Jvc3NSZWZUYWIocHJvcHM6IENyb3NzUmVmV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkQ3Jvc3NSZWZUYWJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZENyb3NzUmVmVGFiV2lkZ2V0KHByb3BzOiBDcm9zc1JlZldpZGdldFByb3BzKSB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICAgICAgICAgIDxDcm9zc1JlZlRhYldpZGdldFxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgICAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgICAgICA8L0V1aVByb3ZpZGVyPlxuICAgIClcbn1cblxuZXhwb3J0IHsgQ3Jvc3NSZWZUYWJXaWRnZXQsIGNyZWF0ZUNyb3NzUmVmVGFiIH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZHVjZXJ9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtFdWlMb2FkaW5nU3Bpbm5lciwgRXVpVGV4dCwgRXVpSWNvbiwgRXVpUHJvdmlkZXIsIEV1aUNhcmR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtIaWVyYXJjaHksIFRyZWVOb2RlfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQge1Nrb3NBcGl9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hcGkvU2tvc0FwaVwiO1xuaW1wb3J0IHtIaWVyYXJjaHlCdWlsZGVyfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBpL0hpZXJhcmNoeUJ1aWxkZXJcIjtcbmltcG9ydCB7T250b1BvcnRhbEFwaX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwaS9PbnRvUG9ydGFsQXBpXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi8uLi9zdHlsZS9zZW1sb29rcC1zdHlsZXMuY3NzXCI7XG5pbXBvcnQge3JhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0hpZXJhcmNoeVdpZGdldFByb3BzLCBFbnRpdHlEYXRhfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge2lzSW5kaXZpZHVhbFR5cGVOYW1lfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcblxuZXhwb3J0IGNvbnN0IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMgPSB7XG4gICAgSU5DTFVERV9PQlNPTEVURV9FTlRJVElFUzogZmFsc2UsXG4gICAgUFJFRkVSUkVEX1JPT1RTOiBmYWxzZSxcbiAgICBLRUVQX0VYUEFOU0lPTl9TVEFURVM6IGZhbHNlLFxuICAgIFNIT1dfU0lCTElOR1NfT05fSU5JVDogZmFsc2UsXG4gICAgVVNFX0xFR0FDWTogZmFsc2Vcbn0gYXMgY29uc3Q7XG5cbi8vIFRPRE86IHVzZSBvZiBlbnRpdHlUeXBlIGhhcyB0byBiZSByZXZpZXdlZC4gQ3VycmVudGx5IGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZW50aXR5VHlwZSBvZiB0aGUgaGllcmFyY2h5IGFuZCB0aGUgc3BlY2lmaWMgZW50aXR5IGluc2lkZSBpdCBhbHdheXMgbWF0Y2ggKG5vdCBuZWNlc3NhcmlseSB0cnVlIGZvciBpbmRpdmlkdWFsIGhpZXJhcmNoaWVzLCBidXQgdGhlc2UgaGF2ZSB0byBiZSByZXZpZXdlZCBhbnl3YXlzKVxuZnVuY3Rpb24gVHJlZUxpbmsocHJvcHM6IHtlbnRpdHlEYXRhOiBFbnRpdHlEYXRhLCBjaGlsZFJlbGF0aW9uVG9QYXJlbnQ/OiBzdHJpbmcsIG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgb25OYXZpZ2F0ZVRvRW50aXR5PzogKG9udG9sb2d5SWQ6IHN0cmluZywgZW50aXR5VHlwZT86IHN0cmluZywgZW50aXR5PzogRW50aXR5RGF0YSkgPT4gdm9pZCwgb25OYXZpZ2F0ZVRvT250b2xvZ3k/OiAob250b2xvZ3lJZDogc3RyaW5nLCBlbnRpdHlUeXBlPzogc3RyaW5nLCBlbnRpdHk/OiBFbnRpdHlEYXRhKSA9PiB2b2lkLCBoaWdobGlnaHQ6IGJvb2xlYW59KSB7XG4gICAgbGV0IGRlZmluZWRCeTogc3RyaW5nW10gPSBwcm9wcy5lbnRpdHlEYXRhLmRlZmluZWRCeSB8fCBbXTtcbiAgICBpZihkZWZpbmVkQnkuaW5jbHVkZXMocHJvcHMub250b2xvZ3lJZCkpIGRlZmluZWRCeSA9IFtdO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17cHJvcHMuaGlnaGxpZ2h0ID8gXCJoaWdobGlnaHRcIiA6IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICAgICAge3Byb3BzLmNoaWxkUmVsYXRpb25Ub1BhcmVudCA9PSBcImh0dHA6Ly9wdXJsLm9ib2xpYnJhcnkub3JnL29iby9CRk9fMDAwMDA1MFwiICYmXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17e21hcmdpbklubGluZVN0YXJ0OiBcIjEuNXB4XCIsIG1hcmdpblRvcDogXCIyLjVweFwifX0gY2xhc3NOYW1lPVwic3Vycm91bmRDaXJjbGVcIj4mbmJzcDtQJm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7cHJvcHMuY2hpbGRSZWxhdGlvblRvUGFyZW50ID09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI3R5cGVcIiAmJlxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5JbmxpbmVTdGFydDogXCIxLjVweFwiLCBtYXJnaW5Ub3A6IFwiMi41cHhcIn19IGNsYXNzTmFtZT1cInN1cnJvdW5kQ2lyY2xlXCI+STwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5KSBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHkocHJvcHMub250b2xvZ3lJZCwgcHJvcHMuZW50aXR5VHlwZSB8fCBcIlwiLCBwcm9wcy5lbnRpdHlEYXRhKX19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3Byb3BzLmVudGl0eURhdGEubGFiZWwgfHwgcHJvcHMuZW50aXR5RGF0YS5pcml9IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIHtkZWZpbmVkQnkubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICB7ZGVmaW5lZEJ5Lm1hcCgoZGVmaW5pbmdPbnRvbG9neSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YCR7cHJvcHMuZW50aXR5RGF0YS5pcml9OiR7ZGVmaW5pbmdPbnRvbG9neX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KGRlZmluaW5nT250b2xvZ3ksIHByb3BzLmVudGl0eVR5cGUgfHwgXCJcIiwgcHJvcHMuZW50aXR5RGF0YSl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57ZGVmaW5pbmdPbnRvbG9neS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIEhpZXJhcmNoeVdpZGdldChwcm9wczogSGllcmFyY2h5V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCB7XG4gICAgICAgIGFwaVVybCxcbiAgICAgICAgYmFja2VuZFR5cGUsXG4gICAgICAgIGFwaUtleSxcbiAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5LFxuICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neSxcblxuICAgICAgICBpcmksXG4gICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzID0gSElFUkFSQ0hZX1dJREdFVF9ERUZBVUxUX1ZBTFVFUy5JTkNMVURFX09CU09MRVRFX0VOVElUSUVTLFxuICAgICAgICBwcmVmZXJyZWRSb290cyA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuUFJFRkVSUkVEX1JPT1RTLFxuICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzID0gSElFUkFSQ0hZX1dJREdFVF9ERUZBVUxUX1ZBTFVFUy5LRUVQX0VYUEFOU0lPTl9TVEFURVMsXG4gICAgICAgIHNob3dTaWJsaW5nc09uSW5pdCA9IEhJRVJBUkNIWV9XSURHRVRfREVGQVVMVF9WQUxVRVMuU0hPV19TSUJMSU5HU19PTl9JTklULFxuICAgICAgICB1c2VMZWdhY3kgPSBISUVSQVJDSFlfV0lER0VUX0RFRkFVTFRfVkFMVUVTLlVTRV9MRUdBQ1ksXG4gICAgfSA9IHByb3BzO1xuXG4gICAgLy8gdXNlZCB0byBtYW51YWxseSByZXJlbmRlciB0aGUgY29tcG9uZW50IG9uIHVwZGF0ZSBvZiBoaWVyYXJjaHkgKGFzIGhpZXJhcmNoeSBvYmplY3QgaXMgbmVzdGVkIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBzdGF0ZSB2YXJpYWJsZSBpdHNlbGYpXG4gICAgY29uc3QgWywgZm9yY2VVcGRhdGVdID0gdXNlUmVkdWNlcih4ID0+IHggKyAxICUgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIDApO1xuXG4gICAgY29uc3QgYXBpIDogSGllcmFyY2h5QnVpbGRlciA9IHVzZU1lbW8oXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoYmFja2VuZFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwib2xzXCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2xzQXBpKGFwaVVybCk7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNrb3Ntb3NcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTa29zQXBpKGFwaVVybCk7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9udG9wb3J0YWxcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPbnRvUG9ydGFsQXBpKGFwaVVybCwgYXBpS2V5IHx8IFwiXCIpO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2xzQXBpKGFwaVVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFthcGlVcmwsIGJhY2tlbmRUeXBlLCBhcGlLZXldXG4gICAgKTtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogaGllcmFyY2h5LFxuICAgICAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc0hpZXJhcmNoeSxcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICBbXCJoaWVyYXJjaHlTZW1Mb29rUFwiLCBpcmksIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHByZWZlcnJlZFJvb3RzLCBpbmNsdWRlT2Jzb2xldGVFbnRpdGllcywga2VlcEV4cGFuc2lvblN0YXRlcywgc2hvd1NpYmxpbmdzT25Jbml0LCB1c2VMZWdhY3ldLFxuICAgICAgYXN5bmMgZnVuY3Rpb24gZ2V0TmV3SGllcmFyY2h5KCkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBhcGkuYnVpbGRIaWVyYXJjaHlXaXRoSXJpKHtcbiAgICAgICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgICAgICAgICAgaXJpOiBpcmksXG4gICAgICAgICAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG4gICAgICAgICAgICAgIHByZWZlcnJlZFJvb3RzOiBwcmVmZXJyZWRSb290cyxcbiAgICAgICAgICAgICAgaW5jbHVkZU9ic29sZXRlRW50aXRpZXM6IGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzLFxuICAgICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBrZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgICAgICAgICBzaG93U2libGluZ3NPbkluaXQ6IHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgICAgICAgICAgdXNlTGVnYWN5OiB1c2VMZWdhY3ksXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHRvZ2dsZU5vZGUgPSB1c2VDYWxsYmFjaygobm9kZTogVHJlZU5vZGUpID0+IHtcbiAgICAgICAgaWYoIShoaWVyYXJjaHkgaW5zdGFuY2VvZiBIaWVyYXJjaHkpKSB0aHJvdyBFcnJvcihcIkhpZXJhcmNoeSBvYmplY3Qgd2FzIHVuZGVmaW5lZCB3aGlsZSB0cnlpbmcgdG8gZXhwYW5kIGEgdHJlZSBub2RlLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXCIpO1xuXG4gICAgICAgIC8vIFRPRE86IGluZGl2aWR1YWwgaGllcmFyY2hpZXMgYXJlIGZyb3plbiBmb3Igbm93IChiZWZvcmUgdW5kb2luZywgY29ycmVjdCBjaGlsZCBsb2FkaW5nIGhhcyB0byBiZSBpbXBsZW1lbnRlZCBmb3IgaW5kaXZpZHVhbCBoaWVyYXJjaGllcylcbiAgICAgICAgaWYoaGllcmFyY2h5LmVudGl0eVR5cGUgJiYgaXNJbmRpdmlkdWFsVHlwZU5hbWUoaGllcmFyY2h5LmVudGl0eVR5cGUpKSByZXR1cm47XG5cbiAgICAgICAgLy8gdG9nZ2xlIGV4cGFuc2lvbiBzdGF0ZSBhbmQgZm9yY2UgY29tcG9uZW50IHRvIHJlcmVuZGVyIGFmdGVyd2FyZFxuICAgICAgICBub2RlLmV4cGFuZGVkID0gIW5vZGUuZXhwYW5kZWQ7XG5cbiAgICAgICAgLy8gZmV0Y2ggbmVlZGVkIGluZm9ybWF0aW9uIGFuZCByZXJlbmRlciBhZ2FpbiBpZiBuZWVkZWRcbiAgICAgICAgaWYobm9kZS5leHBhbmRlZCl7XG4gICAgICAgICAgICBub2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgZm9yY2VVcGRhdGUoKTtcblxuICAgICAgICAgICAgaGllcmFyY2h5LmZldGNoSW5mb3JtYXRpb25Gb3JFeHBhbnNpb24obm9kZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgbm9kZS5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgaGllcmFyY2h5LmNsb3NlTm9kZShub2RlKTtcbiAgICAgICAgfVxuICAgIH0sW2hpZXJhcmNoeV0pXG5cbiAgICBmdW5jdGlvbiByZW5kZXJUcmVlTm9kZShoaWVyYXJjaHk6IEhpZXJhcmNoeSwgbm9kZTogVHJlZU5vZGUsIGRyYXdMaW5lPzogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICA8RXVpVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e2hlaWdodDogXCIyNHB4XCJ9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7cG9zaXRpb246IFwicmVsYXRpdmVcIiwgYm9yZGVyTGVmdDogXCIxcHggZG90dGVkIGJsYWNrXCIsIGJvcmRlckJvdHRvbTogXCIxcHggZG90dGVkIGJsYWNrXCIsIHdpZHRoOiBcIjEycHhcIiwgaGVpZ2h0OiBcIjE2cHhcIiwgbGVmdDogXCI1LjVweFwiLCB0b3A6IFwiLTFweFwifX0+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e3Bvc2l0aW9uOiBcInJlbGF0aXZlXCIsIGJvcmRlckxlZnQ6IGRyYXdMaW5lID8gXCIxcHggZG90dGVkIGJsYWNrXCI6XCJcIiwgd2lkdGg6IFwiMTJweFwiLCBoZWlnaHQ6IFwiOXB4XCIsIGxlZnQ6IFwiNS41cHhcIiwgdG9wOiBcIjBweFwifX0+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e3Bvc2l0aW9uOiBcInJlbGF0aXZlXCIsIHRvcDogXCItMjJweFwifX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFub2RlLmVudGl0eURhdGEuaGFzQ2hpbGRyZW4gP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlJY29uIHR5cGU9e1wiZW1wdHlcIn0vPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17e319IG9uQ2xpY2s9eygpID0+IHt0b2dnbGVOb2RlKG5vZGUpfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFdWlJY29uIHR5cGU9e25vZGUuZXhwYW5kZWQgPyBcImFycm93RG93blwiIDogXCJhcnJvd1JpZ2h0XCJ9IHNpemU9e1wic1wifS8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxUcmVlTGluayBlbnRpdHlEYXRhPXtub2RlLmVudGl0eURhdGF9IGNoaWxkUmVsYXRpb25Ub1BhcmVudD17bm9kZS5jaGlsZFJlbGF0aW9uVG9QYXJlbnR9IG9udG9sb2d5SWQ9e2hpZXJhcmNoeS5vbnRvbG9neUlkfSBlbnRpdHlUeXBlPXtoaWVyYXJjaHkuZW50aXR5VHlwZX0gb25OYXZpZ2F0ZVRvRW50aXR5PXtvbk5hdmlnYXRlVG9FbnRpdHl9IG9uTmF2aWdhdGVUb09udG9sb2d5PXtvbk5hdmlnYXRlVG9PbnRvbG9neX0gaGlnaGxpZ2h0PXtub2RlLmVudGl0eURhdGEuaXJpID09IGhpZXJhcmNoeT8ubWFpbkVudGl0eUlyaX0vPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge25vZGUuZW50aXR5RGF0YS5udW1EZXNjZW5kYW50cyAhPSB1bmRlZmluZWQgJiYgbm9kZS5lbnRpdHlEYXRhLm51bURlc2NlbmRhbnRzID4gMCAmJiA8c3BhbiBzdHlsZT17e2NvbG9yOiBcImdyYXlcIn19Pih7bm9kZS5lbnRpdHlEYXRhLm51bURlc2NlbmRhbnRzLnRvTG9jYWxlU3RyaW5nKCl9KTwvc3Bhbj59XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgICAgICAgICAge25vZGUuZXhwYW5kZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgPHVsIHN0eWxlPXt7bWFyZ2luQmxvY2tFbmQ6IFwiMFwiLCBtYXJnaW5JbmxpbmVTdGFydDogXCI1LjVweFwifX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bm9kZS5sb2FkaW5nID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXVpTG9hZGluZ1NwaW5uZXIgc3R5bGU9e3twb3NpdGlvbjogXCJyZWxhdGl2ZVwiLCBsZWZ0OiBcIjEzcHhcIiwgdG9wOiBcIjVweFwifX0vPiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sb2FkZWRDaGlsZHJlbi5tYXAoKGNoaWxkLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtyYW5kb21TdHJpbmcoKX0gc3R5bGU9e3tib3JkZXJMZWZ0OiBkcmF3TGluZSA/IFwiMXB4IGRvdHRlZCBibGFja1wiOlwiXCIsIHBhZGRpbmdMZWZ0OiBcIjFyZW1cIn19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlclRyZWVOb2RlKGhpZXJhcmNoeSwgY2hpbGQsIGlkeCA8IG5vZGUubG9hZGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aUNhcmQgdGl0bGU9e1wiXCJ9IGxheW91dD17XCJob3Jpem9udGFsXCJ9IHN0eWxlPXt7IG92ZXJmbG93OiBcImF1dG9cIiB9fT5cbiAgICAgICAgICAgIHsoaXNTdWNjZXNzSGllcmFyY2h5ICYmIGhpZXJhcmNoeSAhPSB1bmRlZmluZWQpID9cbiAgICAgICAgICAgICAgICA8RXVpVGV4dCBzdHlsZT17e3doaXRlU3BhY2U6IFwibm93cmFwXCJ9fT4gey8qIC8vIFRPRE86IERvZXMgbm90IGdldCBkaXNwbGF5ZWQgY29ycmVjdGx5IG9uIHN0b3J5Ym9vayBtYWluIHBhZ2UgKi99XG4gICAgICAgICAgICAgICAgICAgIHtoaWVyYXJjaHkucm9vdHMubWFwKChyb290Tm9kZSwgaWR4KSA9PiByZW5kZXJUcmVlTm9kZShoaWVyYXJjaHksIHJvb3ROb2RlLCBpZHggPCBoaWVyYXJjaHkucm9vdHMubGVuZ3RoIC0gMSkpfVxuICAgICAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgICAgICAgICA6IDxFdWlMb2FkaW5nU3Bpbm5lci8+fVxuICAgICAgICA8L0V1aUNhcmQ+XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSGllcmFyY2h5KHByb3BzOiBIaWVyYXJjaHlXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRIaWVyYXJjaHlXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEhpZXJhcmNoeVdpZGdldChwcm9wczogSGllcmFyY2h5V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEhpZXJhcmNoeVdpZGdldFxuICAgICAgICAgICAgICAgICAgICBhcGlVcmw9e3Byb3BzLmFwaVVybH1cbiAgICAgICAgICAgICAgICAgICAgYXBpS2V5PXtwcm9wcy5hcGlLZXl9XG4gICAgICAgICAgICAgICAgICAgIGJhY2tlbmRUeXBlPXtwcm9wcy5iYWNrZW5kVHlwZX1cbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU9e3Byb3BzLmVudGl0eVR5cGV9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVPYnNvbGV0ZUVudGl0aWVzPXtwcm9wcy5pbmNsdWRlT2Jzb2xldGVFbnRpdGllc31cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZFJvb3RzPXtwcm9wcy5wcmVmZXJyZWRSb290c31cbiAgICAgICAgICAgICAgICAgICAga2VlcEV4cGFuc2lvblN0YXRlcz17cHJvcHMua2VlcEV4cGFuc2lvblN0YXRlc31cbiAgICAgICAgICAgICAgICAgICAgc2hvd1NpYmxpbmdzT25Jbml0PXtwcm9wcy5zaG93U2libGluZ3NPbkluaXR9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb0VudGl0eT17cHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7SGllcmFyY2h5V2lkZ2V0LCBjcmVhdGVIaWVyYXJjaHl9OyIsICJpbXBvcnQgYXhpb3MsIHtBeGlvc0luc3RhbmNlLCBBeGlvc1JlcXVlc3RDb25maWd9IGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHtCdWlsZEhpZXJhcmNoeVByb3BzLCBIaWVyYXJjaHlCdWlsZGVyLCBIaWVyYXJjaHlJcmlQcm9wLCBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wc30gZnJvbSBcIi4vSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IHtFbnRpdHlEYXRhRm9ySGllcmFyY2h5LCBIaWVyYXJjaHksIFBhcmVudENoaWxkUmVsYXRpb24sIFRyZWVOb2RlfSBmcm9tIFwiLi4vbW9kZWwvaW50ZXJmYWNlcy9IaWVyYXJjaHlcIjtcbmltcG9ydCBSZWlmaWVkIGZyb20gXCIuLi9tb2RlbC9SZWlmaWVkXCI7XG5cbnR5cGUgVG9wQ29uY2VwdCA9IHtcbiAgICB1cmk6IHN0cmluZyxcbiAgICBsYWJlbD86IHN0cmluZyxcbiAgICB0b3BDb25jZXB0T2Y/OiBzdHJpbmcsXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW4sXG4gICAgbm90YXRpb24/OiBzdHJpbmdcbn1cblxudHlwZSBMYWJlbEFuZFVyaUFuZENoaWxkcmVuID0ge1xuICAgIHVyaTogc3RyaW5nLFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW4sXG4gICAgbm90YXRpb24/OiBzdHJpbmdcbn1cblxudHlwZSBIaWVyYXJjaHlSZXN1bHQgPSB7XG4gICAgdXJpOiBzdHJpbmcsXG4gICAgcHJlZkxhYmVsOiBzdHJpbmc7XG4gICAgdG9wPzogc3RyaW5nLFxuICAgIGJyb2FkZXI/OiBzdHJpbmdbXSxcbiAgICBuYXJyb3dlcj86IExhYmVsQW5kVXJpQW5kQ2hpbGRyZW5bXVxufTtcblxudHlwZSBQcmVmQW5kVXJpQW5kQ2hpbGRyZW4gPSB7XG4gICAgdXJpOiBzdHJpbmcsXG4gICAgcHJlZkxhYmVsOiBzdHJpbmcsXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW5cbiAgICBub3RhdGlvbj86IHN0cmluZ1xufVxuXG5hYnN0cmFjdCBjbGFzcyBTa29zRW50aXR5RGF0YUZvckhpZXJhcmNoeUJ1aWxkZXIge1xuICAgIHN0YXRpYyBmcm9tVG9wQ29uY2VwdChvYmo6IFRvcENvbmNlcHQpIDogRW50aXR5RGF0YUZvckhpZXJhcmNoeSB7XG4gICAgICAgIHJldHVybiAge1xuICAgICAgICAgICAgaXJpOiBvYmoudXJpLFxuICAgICAgICAgICAgbGFiZWw6IG9iai5sYWJlbCxcbiAgICAgICAgICAgIGhhc0NoaWxkcmVuOiBvYmouaGFzQ2hpbGRyZW4sXG4gICAgICAgICAgICBwYXJlbnRzOiBbXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSGllcmFyY2h5UmVzdWx0KG9iajogSGllcmFyY2h5UmVzdWx0KSA6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiBvYmoudXJpLFxuICAgICAgICAgICAgbGFiZWw6IG9iai5wcmVmTGFiZWwsXG4gICAgICAgICAgICBoYXNDaGlsZHJlbjogb2JqLm5hcnJvd2VyICE9IHVuZGVmaW5lZCAmJiBvYmoubmFycm93ZXIubGVuZ3RoID4gMCxcbiAgICAgICAgICAgIHBhcmVudHM6IFJlaWZpZWQuZnJvbUpzb24ob2JqLmJyb2FkZXIpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbVByZWZBbmRVcmlBbmRDaGlsZHJlbihvYmo6IFByZWZBbmRVcmlBbmRDaGlsZHJlbiwgcGFyZW50cz86IHN0cmluZ1tdKSA6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXJpOiBvYmoudXJpLFxuICAgICAgICAgICAgbGFiZWw6IG9iai5wcmVmTGFiZWwsXG4gICAgICAgICAgICBoYXNDaGlsZHJlbjogb2JqLmhhc0NoaWxkcmVuLFxuICAgICAgICAgICAgcGFyZW50czogUmVpZmllZC5mcm9tSnNvbihwYXJlbnRzKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tTGFiZWxBbmRVcmlBbmRDaGlsZHJlbihvYmo6IExhYmVsQW5kVXJpQW5kQ2hpbGRyZW4sIHBhcmVudHM/OiBzdHJpbmdbXSkgOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlyaTogb2JqLnVyaSxcbiAgICAgICAgICAgIGxhYmVsOiBvYmoubGFiZWwsXG4gICAgICAgICAgICBoYXNDaGlsZHJlbjogb2JqLmhhc0NoaWxkcmVuLFxuICAgICAgICAgICAgcGFyZW50czogUmVpZmllZC5mcm9tSnNvbihwYXJlbnRzKVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2tvc0FwaSBpbXBsZW1lbnRzIEhpZXJhcmNoeUJ1aWxkZXJ7XG4gICAgcHJpdmF0ZSBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuXG4gICAgY29uc3RydWN0b3IoYXBpOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5heGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgICAgICAgIGJhc2VVUkw6IGFwaSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIC8vIENvbnRlbnRfVHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsIC8vIGxlYWRzIHRvIHByZWZsaWdodCBlcnJvclxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBtYWtlQ2FsbCh1cmw6IHN0cmluZywgY29uZmlnOiBBeGlvc1JlcXVlc3RDb25maWc8bmV2ZXI+IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldCh1cmwsIGNvbmZpZykpLmRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJ1aWxkSGllcmFyY2h5V2l0aElyaShwcm9wczogQnVpbGRIaWVyYXJjaHlQcm9wcyAmIEhpZXJhcmNoeUlyaVByb3ApIDogUHJvbWlzZTxIaWVyYXJjaHk+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgICAgfSA9IHByb3BzO1xuXG4gICAgICAgIGlmKCFvbnRvbG9neUlkKSB0aHJvdyBFcnJvcihcIm9udG9sb2d5SWQgaGFzIHRvIGJlIHNwZWNpZmllZCBmb3IgU0tPUyBBUEkuXCIpO1xuXG4gICAgICAgIGNvbnN0IHJvb3RFbnRpdGllczogc3RyaW5nW10gPSBbXVxuICAgICAgICBjb25zdCBwYXJlbnRDaGlsZFJlbGF0aW9uczogTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPiA9IG5ldyBNYXA8c3RyaW5nLCBQYXJlbnRDaGlsZFJlbGF0aW9uW10+KCk7XG4gICAgICAgIGNvbnN0IGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4gPSBuZXcgTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4oKTtcbiAgICAgICAgY29uc3QgYWxsQ2hpbGRyZW5QcmVzZW50OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBjb25zdCBvbkluaXRpYWxQYXRoOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBvbmx5IHVzZWQgaWYgc2hvd1NpYmxpbmdzT25Jbml0ID09IGZhbHNlXG5cbiAgICAgICAgaWYoaXJpKSB7XG4gICAgICAgICAgICBjb25zdCBicm9hZGVyVHJhbnNpdGl2ZTogSGllcmFyY2h5UmVzdWx0W10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAvJHtvbnRvbG9neUlkfS9oaWVyYXJjaHlgLCB7cGFyYW1zOiB7dXJpOiBpcmksIGxhbmc6IFwiZW5cIiwgZm9ybWF0OiBcImFwcGxpY2F0aW9uL2pzb25cIn19KVxuICAgICAgICAgICAgICAgIC50aGVuKChvYmopID0+IE9iamVjdC5rZXlzKG9ialtcImJyb2FkZXJUcmFuc2l0aXZlXCJdKS5tYXAoKGtleSkgPT4gb2JqW1wiYnJvYWRlclRyYW5zaXRpdmVcIl1ba2V5XSkpXG5cbiAgICAgICAgICAgIC8vIHN0b3JlcyBhbGwgZW50aXRpZXMgYXBwZWFyaW5nIGluIGJyb2FkZXJUcmFuc2l0aXZlXG4gICAgICAgICAgICAvL2NvbnN0IGVudGl0aWVzOiBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PiA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlEYXRhRm9ySGllcmFyY2h5PigpXG5cbiAgICAgICAgICAgIGZvcihjb25zdCBub2RlIG9mIGJyb2FkZXJUcmFuc2l0aXZlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZURhdGE6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkgPSBTa29zRW50aXR5RGF0YUZvckhpZXJhcmNoeUJ1aWxkZXIuZnJvbUhpZXJhcmNoeVJlc3VsdChub2RlKTtcblxuICAgICAgICAgICAgICAgIGVudGl0aWVzRGF0YS5zZXQobm9kZURhdGEuaXJpLCBub2RlRGF0YSk7XG4gICAgICAgICAgICAgICAgaWYobm9kZS50b3ApIHJvb3RFbnRpdGllcy5wdXNoKG5vZGVEYXRhLmlyaSk7XG5cbiAgICAgICAgICAgICAgICBpZighc2hvd1NpYmxpbmdzT25Jbml0KSBvbkluaXRpYWxQYXRoLmFkZChub2RlRGF0YS5pcmkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yKGNvbnN0IG5vZGUgb2YgYnJvYWRlclRyYW5zaXRpdmUpIHtcbiAgICAgICAgICAgICAgICBpZihub2RlLm5hcnJvd2VyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbjogRW50aXR5RGF0YUZvckhpZXJhcmNoeVtdID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkTm9kZSBvZiBub2RlLm5hcnJvd2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGROb2RlRGF0YSA9IGVudGl0aWVzRGF0YS5nZXQoY2hpbGROb2RlLnVyaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjaGlsZE5vZGVEYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZURhdGEgPSBTa29zRW50aXR5RGF0YUZvckhpZXJhcmNoeUJ1aWxkZXIuZnJvbUxhYmVsQW5kVXJpQW5kQ2hpbGRyZW4oY2hpbGROb2RlLCBbbm9kZS51cmldKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0aWVzRGF0YS5zZXQoY2hpbGROb2RlRGF0YS5pcmksIGNoaWxkTm9kZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWNoaWxkTm9kZURhdGEucGFyZW50cy5tYXAoKHIpID0+IHIudmFsdWUpLmluY2x1ZGVzKG5vZGUudXJpKSkgY2hpbGROb2RlRGF0YS5wYXJlbnRzLnB1c2goLi4uUmVpZmllZC5mcm9tSnNvbjxzdHJpbmc+KG5vZGUudXJpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkTm9kZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uc29ydCgoYSwgYikgPT4gKGEubGFiZWwgfHwgYS5pcmkpLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCB8fCBiLmlyaSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zLnNldChub2RlLnVyaSwgY2hpbGRyZW4ubWFwKChjKSA9PiB7cmV0dXJuIHtjaGlsZElyaTogYy5pcml9fSkpO1xuICAgICAgICAgICAgICAgICAgICBhbGxDaGlsZHJlblByZXNlbnQuYWRkKG5vZGUudXJpKTsgLy8gaW4gc2tvcywgYWxsIGNoaWxkcmVuIGFyZSBsb2FkZWQgaWYgYW55IGFyZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcGNvbmNlcHRzOiBUb3BDb25jZXB0W10gPSBhd2FpdCB0aGlzLm1ha2VDYWxsKGAvJHtvbnRvbG9neUlkfS90b3BDb25jZXB0c2AsIHtwYXJhbXM6IHtsYW5nOiBcImVuXCIsIGZvcm1hdDogXCJhcHBsaWNhdGlvbi9qc29uXCJ9fSlcbiAgICAgICAgICAgICAgICAudGhlbigob2JqKSA9PiBvYmpbXCJ0b3Bjb25jZXB0c1wiXSlcblxuICAgICAgICAgICAgZm9yKGNvbnN0IGNvbmNlcHQgb2YgdG9wY29uY2VwdHMpIHtcbiAgICAgICAgICAgICAgICByb290RW50aXRpZXMucHVzaChjb25jZXB0LnVyaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVUcmVlTm9kZShlbnRpdHlEYXRhOiBFbnRpdHlEYXRhRm9ySGllcmFyY2h5LCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPik6IFRyZWVOb2RlIHtcbiAgICAgICAgICAgIGN5Y2xlQ2hlY2suYWRkKGVudGl0eURhdGEuaXJpKTsgLy8gYWRkIGN1cnJlbnQgZW50aXR5IHRvIGN5Y2xlIGNoZWNrIHNldFxuXG4gICAgICAgICAgICBjb25zdCBub2RlID0gbmV3IFRyZWVOb2RlKGVudGl0eURhdGEpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnRDaGlsZFJlbGF0aW9ucy5nZXQoZW50aXR5RGF0YS5pcmkpIHx8IFtdO1xuXG4gICAgICAgICAgICBpZighc2hvd1NpYmxpbmdzT25Jbml0KSB7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEN5Y2xpYyB0cmVlIGF0IGVudGl0eSBcIiR7Y2hpbGQuY2hpbGRJcml9XCIuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkRGF0YSA9IGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpO1xuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZERhdGEgIT0gdW5kZWZpbmVkICYmIG9uSW5pdGlhbFBhdGguaGFzKGNoaWxkLmNoaWxkSXJpKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGNoaWxkRGF0YSwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGN5Y2xlQ2hlY2suaGFzKGNoaWxkLmNoaWxkSXJpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3ljbGljIHRyZWUsIHNraXAgY3ljbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEN5Y2xpYyB0cmVlIGF0IGVudGl0eSBcIiR7Y2hpbGQuY2hpbGRJcml9XCIuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkRGF0YSA9IGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpO1xuICAgICAgICAgICAgICAgICAgICBpZihjaGlsZERhdGEgIT0gdW5kZWZpbmVkKSBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGNoaWxkRGF0YSwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYobm9kZS5sb2FkZWRDaGlsZHJlbi5sZW5ndGggPiAwKSBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgY3ljbGVDaGVjay5kZWxldGUoZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBDb250YWlucyBpcmlzIG9mIGFsbCBlbnRpdGllcyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBicmFuY2guIElzIHVzZWQgdG8gY2hlY2sgZm9yIGN5Y2xlcy5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzOiBUcmVlTm9kZVtdID0gcm9vdEVudGl0aWVzLm1hcCgocm9vdEVudGl0eSkgPT4gY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChyb290RW50aXR5KSEsIGN5Y2xlQ2hlY2spKS5zb3J0KChhLGIpID0+IChhLmVudGl0eURhdGEubGFiZWwgfHwgYS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShiLmVudGl0eURhdGEubGFiZWwgfHwgYi5lbnRpdHlEYXRhLmlyaSkpO1xuXG4gICAgICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgICAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICAgICAgICByb290czogcm9vdE5vZGVzLFxuICAgICAgICAgICAgYXBpOiBuZXcgU2tvc0FwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCkpLFxuICAgICAgICAgICAgb250b2xvZ3lJZDogb250b2xvZ3lJZCxcbiAgICAgICAgICAgIG1haW5FbnRpdHlJcmk6IGlyaSxcbiAgICAgICAgICAgIGtlZXBFeHBhbnNpb25TdGF0ZXM6IHByb3BzLmtlZXBFeHBhbnNpb25TdGF0ZXNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGxvYWRIaWVyYXJjaHlDaGlsZHJlbihwcm9wczogTG9hZEhpZXJhcmNoeUNoaWxkcmVuUHJvcHMpOiBQcm9taXNlPEVudGl0eURhdGFGb3JIaWVyYXJjaHlbXT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBub2RlVG9FeHBhbmQsXG4gICAgICAgICAgICBvbnRvbG9neUlkXG4gICAgICAgIH0gPSBwcm9wcztcblxuICAgICAgICBjb25zdCBuYXJyb3dlcjogUHJlZkFuZFVyaUFuZENoaWxkcmVuW10gPSAoYXdhaXQgdGhpcy5tYWtlQ2FsbChgLyR7b250b2xvZ3lJZH0vY2hpbGRyZW5gLCB7cGFyYW1zOiB7dXJpOiBub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmksIGxhbmc6IFwiZW5cIiwgZm9ybWF0OiBcImFwcGxpY2F0aW9uL2pzb25cIn19KSlbXCJuYXJyb3dlclwiXTtcblxuICAgICAgICByZXR1cm4gbmFycm93ZXIubWFwKChvYmopID0+IFNrb3NFbnRpdHlEYXRhRm9ySGllcmFyY2h5QnVpbGRlci5mcm9tUHJlZkFuZFVyaUFuZENoaWxkcmVuKG9iaiwgW25vZGVUb0V4cGFuZC5lbnRpdHlEYXRhLmlyaV0pKTtcbiAgICB9XG5cbn0iLCAiaW1wb3J0IHtCdWlsZEhpZXJhcmNoeVByb3BzLCBIaWVyYXJjaHlCdWlsZGVyLCBIaWVyYXJjaHlJcmlQcm9wLCBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wc30gZnJvbSBcIi4vSGllcmFyY2h5QnVpbGRlclwiO1xuaW1wb3J0IGF4aW9zLCB7QXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7RW50aXR5RGF0YUZvckhpZXJhcmNoeSwgSGllcmFyY2h5LCBQYXJlbnRDaGlsZFJlbGF0aW9uLCBUcmVlTm9kZX0gZnJvbSBcIi4uL21vZGVsL2ludGVyZmFjZXMvSGllcmFyY2h5XCI7XG5pbXBvcnQge3BsdXJhbGl6ZVR5cGV9IGZyb20gXCIuLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHt1c2VMZWdhY3lBcmdUeXBlfSBmcm9tIFwiLi4vc3Rvcmllcy9zdG9yeUFyZ3NcIjtcblxudHlwZSBIaWVyYXJjaHlOb2RlID0ge1xuICAgIHByZWZMYWJlbDogc3RyaW5nXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW5cbiAgICBjaGlsZHJlbjogSGllcmFyY2h5Tm9kZVtdXG4gICAgb2Jzb2xldGU6IGJvb2xlYW4gLy8gVE9ETzogdXNlIHRoaXMgdG8gZW5hYmxlIHNob3dpbmcgb2Jzb2xldGVUZXJtcz9cbiAgICBbXCJAaWRcIl06IHN0cmluZ1xuICAgIFtcIkB0eXBlXCJdOiBzdHJpbmdcbiAgICAvLyBsaW5rczogb2JqZWN0IC0gbm90IG5lZWRlZCBoZXJlXG4gICAgW1wiQGNvbnRleHRcIl06IHtcbiAgICAgICAgW1wiQHZvY2FiXCJdOiBzdHJpbmdcbiAgICAgICAgcHJlZkxhYmVsOiBzdHJpbmdcbiAgICAgICAgb2Jzb2xldGU6IHN0cmluZ1xuICAgICAgICBbXCJAbGFuZ3VhZ2VcIl06IHN0cmluZ1xuICAgIH1cbn1cblxuZnVuY3Rpb24gSGllcmFyY2h5Tm9kZVRvRW50aXR5RGF0YUZvckhpZXJhcmNoeShoaWVyYXJjaHlOb2RlOiBIaWVyYXJjaHlOb2RlKSA6IEVudGl0eURhdGFGb3JIaWVyYXJjaHkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlyaTogaGllcmFyY2h5Tm9kZVtcIkBpZFwiXSxcbiAgICAgICAgbGFiZWw6IGhpZXJhcmNoeU5vZGVbXCJwcmVmTGFiZWxcIl0sXG4gICAgICAgIGhhc0NoaWxkcmVuOiBoaWVyYXJjaHlOb2RlW1wiaGFzQ2hpbGRyZW5cIl0sXG4gICAgICAgIHBhcmVudHM6IFtdXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT250b1BvcnRhbEFwaSBpbXBsZW1lbnRzIEhpZXJhcmNoeUJ1aWxkZXJ7XG4gICAgcHJpdmF0ZSBheGlvc0luc3RhbmNlOiBBeGlvc0luc3RhbmNlO1xuICAgIHByaXZhdGUgYXBpS2V5OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihhcGk6IHN0cmluZywgYXBpS2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5heGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgICAgICAgIGJhc2VVUkw6IGFwaSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIC8vIENvbnRlbnRfVHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsIC8vIGxlYWRzIHRvIHByZWZsaWdodCBlcnJvclxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgICAgICB0aGlzLmF4aW9zSW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKChjb25maWcpID0+IHtcbiAgICAgICAgICAgIGNvbmZpZy5wYXJhbXMgPSBjb25maWcucGFyYW1zIHx8IHt9O1xuXG4gICAgICAgICAgICAvLyBkZWZhdWx0IHBhcmFtc1xuICAgICAgICAgICAgY29uZmlnLnBhcmFtc1tcImFwaWtleVwiXSA9IHRoaXMuYXBpS2V5O1xuICAgICAgICAgICAgY29uZmlnLnBhcmFtc1tcImZvcm1hdFwiXSA9IFwianNvblwiO1xuXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbWFrZUNhbGwodXJsOiBzdHJpbmcsIGNvbmZpZz86IEF4aW9zUmVxdWVzdENvbmZpZzxuZXZlcj4pIHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0KHVybCwgY29uZmlnKSkuZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYnVpbGRIaWVyYXJjaHlXaXRoSXJpKHByb3BzOiBCdWlsZEhpZXJhcmNoeVByb3BzICYgSGllcmFyY2h5SXJpUHJvcCkgOiBQcm9taXNlPEhpZXJhcmNoeT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpcmksXG4gICAgICAgICAgICBvbnRvbG9neUlkLFxuICAgICAgICAgICAgZW50aXR5VHlwZSxcbiAgICAgICAgICAgIHNob3dTaWJsaW5nc09uSW5pdCxcbiAgICAgICAgfSA9IHByb3BzO1xuXG4gICAgICAgIGlmKCFvbnRvbG9neUlkKSB0aHJvdyBFcnJvcihcIm9udG9sb2d5SWQgaGFzIHRvIGJlIHNwZWNpZmllZCBmb3IgT250b1BvcnRhbCBBUEkuXCIpO1xuICAgICAgICBpZighZW50aXR5VHlwZSkgdGhyb3cgRXJyb3IoXCJlbnRpdHlUeXBlIGhhcyB0byBiZSBzcGVjaWZpZWQgZm9yIE9udG9Qb3J0YWwgQVBJLlwiKTtcblxuICAgICAgICBjb25zdCByb290RW50aXRpZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGVudGl0aWVzRGF0YTogTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4gPSBuZXcgTWFwPHN0cmluZywgRW50aXR5RGF0YUZvckhpZXJhcmNoeT4oKTtcbiAgICAgICAgY29uc3QgcGFyZW50Q2hpbGRSZWxhdGlvbnM6IE1hcDxzdHJpbmcsIFBhcmVudENoaWxkUmVsYXRpb25bXT4gPSBuZXcgTWFwPHN0cmluZywgUGFyZW50Q2hpbGRSZWxhdGlvbltdPigpO1xuICAgICAgICBjb25zdCBhbGxDaGlsZHJlblByZXNlbnQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IG9uSW5pdGlhbFBhdGg6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIG9ubHkgdXNlZCBpZiBzaG93U2libGluZ3NPbkluaXQgPT0gZmFsc2VcblxuICAgICAgICBmdW5jdGlvbiBidWlsZFJlbGF0aW9ucyhjdXJyTm9kZTogSGllcmFyY2h5Tm9kZSkge1xuICAgICAgICAgICAgZW50aXRpZXNEYXRhLnNldChjdXJyTm9kZVtcIkBpZFwiXSwgSGllcmFyY2h5Tm9kZVRvRW50aXR5RGF0YUZvckhpZXJhcmNoeShjdXJyTm9kZSkpXG4gICAgICAgICAgICBpZihjdXJyTm9kZS5oYXNDaGlsZHJlbiAmJiBjdXJyTm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Q2hpbGRSZWxhdGlvbnMuc2V0KGN1cnJOb2RlW1wiQGlkXCJdLCBjdXJyTm9kZS5jaGlsZHJlbi5tYXAoKGMpID0+IHtyZXR1cm4ge2NoaWxkSXJpOiBjW1wiQGlkXCJdfX0pKTtcblxuICAgICAgICAgICAgICAgIGFsbENoaWxkcmVuUHJlc2VudC5hZGQoY3Vyck5vZGVbXCJAaWRcIl0pO1xuICAgICAgICAgICAgICAgIG9uSW5pdGlhbFBhdGguYWRkKGN1cnJOb2RlW1wiQGlkXCJdKTtcblxuICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjdXJyTm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBidWlsZFJlbGF0aW9ucyhjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoaXJpKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9wZXJ0eSB3aGljaCBpcyBjaGlsZCBvZiBtdWx0aXBsZSBwcm9wZXJ0aWVzIG9ubHkgaXMgcmV0dXJuZWQgaW4gb25lIHBhcmVudCBpbiAvdHJlZSBxdWVyeSAoLT4gZG8gaXQgcmlnaHQgbWFudWFsbHk/KSAoZS5nLjogaHR0cDovL3N3ZWV0b250b2xvZ3kubmV0L3JlbGFUaW1lL2hhc05IVGltZSAtPiBoYXMgbW9yZSB0aGFuIG9uZSBwYXJlbnQsIGJ1dCBpcyBvbmx5IHNob3duIGluIG9uZSBwYXJlbnQgaW4gL3RyZWUpXG4gICAgICAgICAgICBjb25zdCBhcGlfdHJlZTogSGllcmFyY2h5Tm9kZVtdID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChgL29udG9sb2dpZXMvJHtvbnRvbG9neUlkLnRvVXBwZXJDYXNlKCl9LyR7cGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCBmYWxzZSl9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlyaSl9L3RyZWVgLCB7cGFyYW1zOiB7aW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuLGNoaWxkcmVuXCJ9fSk7XG5cbiAgICAgICAgICAgIGZvcihjb25zdCByb290Tm9kZSBvZiBhcGlfdHJlZSkge1xuICAgICAgICAgICAgICAgIHJvb3RFbnRpdGllcy5wdXNoKHJvb3ROb2RlW1wiQGlkXCJdKTtcbiAgICAgICAgICAgICAgICBvbkluaXRpYWxQYXRoLmFkZChyb290Tm9kZVtcIkBpZFwiXSk7XG4gICAgICAgICAgICAgICAgYnVpbGRSZWxhdGlvbnMocm9vdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25Jbml0aWFsUGF0aC5hZGQoaXJpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RzIDogSGllcmFyY2h5Tm9kZVtdID0gYXdhaXQgdGhpcy5tYWtlQ2FsbChcbiAgICAgICAgICAgICAgICBgL29udG9sb2dpZXMvJHtvbnRvbG9neUlkLnRvVXBwZXJDYXNlKCl9LyR7cGx1cmFsaXplVHlwZShlbnRpdHlUeXBlLCBmYWxzZSl9L3Jvb3RzYCxcbiAgICAgICAgICAgICAgICB7cGFyYW1zOiB7aW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuXCJ9fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZm9yKGNvbnN0IHJvb3ROb2RlIG9mIHJvb3RzKSB7XG4gICAgICAgICAgICAgICAgcm9vdEVudGl0aWVzLnB1c2gocm9vdE5vZGVbXCJAaWRcIl0pO1xuICAgICAgICAgICAgICAgIG9uSW5pdGlhbFBhdGguYWRkKHJvb3ROb2RlW1wiQGlkXCJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVRyZWVOb2RlKGVudGl0eURhdGE6IEVudGl0eURhdGFGb3JIaWVyYXJjaHksIGN5Y2xlQ2hlY2s6IFNldDxzdHJpbmc+KTogVHJlZU5vZGUge1xuICAgICAgICAgICAgY3ljbGVDaGVjay5hZGQoZW50aXR5RGF0YS5pcmkpOyAvLyBhZGQgY3VycmVudCBlbnRpdHkgdG8gY3ljbGUgY2hlY2sgc2V0XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgVHJlZU5vZGUoZW50aXR5RGF0YSk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkUmVsYXRpb25zLmdldChlbnRpdHlEYXRhLmlyaSkgfHwgW107XG5cbiAgICAgICAgICAgIGlmKCFzaG93U2libGluZ3NPbkluaXQpIHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY3ljbGVDaGVjay5oYXMoY2hpbGQuY2hpbGRJcmkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjeWNsaWMgdHJlZSwgc2tpcCBjeWNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ3ljbGljIHRyZWUgYXQgZW50aXR5IFwiJHtjaGlsZC5jaGlsZElyaX1cIi5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYob25Jbml0aWFsUGF0aC5oYXMoY2hpbGQuY2hpbGRJcmkpKSBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpISwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBpZihjeWNsZUNoZWNrLmhhcyhjaGlsZC5jaGlsZElyaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN5Y2xpYyB0cmVlLCBza2lwIGN5Y2xlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDeWNsaWMgdHJlZSBhdCBlbnRpdHkgXCIke2NoaWxkLmNoaWxkSXJpfVwiLmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICAgICBub2RlLmFkZENoaWxkKGNyZWF0ZVRyZWVOb2RlKGVudGl0aWVzRGF0YS5nZXQoY2hpbGQuY2hpbGRJcmkpISwgY3ljbGVDaGVjaykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYobm9kZS5sb2FkZWRDaGlsZHJlbi5sZW5ndGggPiAwKSBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgY3ljbGVDaGVjay5kZWxldGUoZW50aXR5RGF0YS5pcmkpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjeWNsZUNoZWNrOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpOyAvLyBDb250YWlucyBpcmlzIG9mIGFsbCBlbnRpdGllcyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSBjdXJyZW50IHJlY3Vyc2lvbiBicmFuY2guIElzIHVzZWQgdG8gY2hlY2sgZm9yIGN5Y2xlcy5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzOiBUcmVlTm9kZVtdID0gcm9vdEVudGl0aWVzLm1hcCgocm9vdEVudGl0eSkgPT4gY3JlYXRlVHJlZU5vZGUoZW50aXRpZXNEYXRhLmdldChyb290RW50aXR5KSEsIGN5Y2xlQ2hlY2spKS5zb3J0KChhLGIpID0+IChhLmVudGl0eURhdGEubGFiZWwgfHwgYS5lbnRpdHlEYXRhLmlyaSkubG9jYWxlQ29tcGFyZShiLmVudGl0eURhdGEubGFiZWwgfHwgYi5lbnRpdHlEYXRhLmlyaSkpO1xuXG4gICAgICAgIHJldHVybiBuZXcgSGllcmFyY2h5KHtcbiAgICAgICAgICAgIHBhcmVudENoaWxkUmVsYXRpb25zOiBwYXJlbnRDaGlsZFJlbGF0aW9ucyxcbiAgICAgICAgICAgIGVudGl0aWVzRGF0YTogZW50aXRpZXNEYXRhLFxuICAgICAgICAgICAgYWxsQ2hpbGRyZW5QcmVzZW50OiBhbGxDaGlsZHJlblByZXNlbnQsXG4gICAgICAgICAgICByb290czogcm9vdE5vZGVzLFxuICAgICAgICAgICAgYXBpOiBuZXcgT250b1BvcnRhbEFwaSh0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0VXJpKCksIHRoaXMuYXBpS2V5KSxcbiAgICAgICAgICAgIG9udG9sb2d5SWQ6IG9udG9sb2d5SWQsXG4gICAgICAgICAgICBtYWluRW50aXR5SXJpOiBpcmksXG4gICAgICAgICAgICBrZWVwRXhwYW5zaW9uU3RhdGVzOiBwcm9wcy5rZWVwRXhwYW5zaW9uU3RhdGVzLFxuICAgICAgICAgICAgZW50aXR5VHlwZTogZW50aXR5VHlwZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbG9hZEhpZXJhcmNoeUNoaWxkcmVuKHByb3BzOiBMb2FkSGllcmFyY2h5Q2hpbGRyZW5Qcm9wcyk6IFByb21pc2U8RW50aXR5RGF0YUZvckhpZXJhcmNoeVtdPiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG5vZGVUb0V4cGFuZCxcbiAgICAgICAgICAgIG9udG9sb2d5SWQsXG4gICAgICAgICAgICBlbnRpdHlUeXBlXG4gICAgICAgIH0gPSBwcm9wcztcblxuICAgICAgICBpZihlbnRpdHlUeXBlID09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoXCJlbnRpdHlUeXBlIGhhcyB0byBiZSBwcm92aWRlZCB0byBsb2FkIGNoaWxkcmVuIGluIGFuIE9udG9Qb3J0YWwgaGllcmFyY2h5LlwiKTtcblxuICAgICAgICBjb25zdCBjaGlsZHJlbiA6IEhpZXJhcmNoeU5vZGVbXSA9IChhd2FpdCB0aGlzLm1ha2VDYWxsKFxuICAgICAgICAgICAgYC9vbnRvbG9naWVzLyR7b250b2xvZ3lJZC50b1VwcGVyQ2FzZSgpfS8ke3BsdXJhbGl6ZVR5cGUoZW50aXR5VHlwZSwgZmFsc2UpfS8ke2VuY29kZVVSSUNvbXBvbmVudChub2RlVG9FeHBhbmQuZW50aXR5RGF0YS5pcmkpfS9jaGlsZHJlbmAsXG4gICAgICAgICAgICB7cGFyYW1zOiB7aW5jbHVkZTogXCJAaWQscHJlZkxhYmVsLGhhc0NoaWxkcmVuXCJ9fVxuICAgICAgICApKVtcImNvbGxlY3Rpb25cIl07XG5cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IEhpZXJhcmNoeU5vZGVUb0VudGl0eURhdGFGb3JIaWVyYXJjaHkoY2hpbGQpKTtcbiAgICB9XG59IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeSB9IGZyb20gXCJyZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwaS9PbHNBcGlcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgVGl0bGVXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGlzT250b2xvZ3kgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcbmltcG9ydCB7IFRoaW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IFRpdGxlUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGl0bGVQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IE5PX1RJVExFID0gXCJObyB0aXRsZSBhdmFpbGFibGUuXCI7XG5cbmZ1bmN0aW9uIFRpdGxlV2lkZ2V0KHByb3BzOiBUaXRsZVdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpcmksXG4gICAgb250b2xvZ3lJZCxcbiAgICBhcGksXG4gICAgdGl0bGVUZXh0LFxuICAgIHRoaW5nVHlwZSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgdXNlTGVnYWN5LFxuICAgIGRlZmF1bHRWYWx1ZSxcbiAgICBjbGFzc05hbWVcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvbHNBcGkgPSBuZXcgT2xzQXBpKGFwaSk7XG4gIGNvbnN0IGZpbmFsQ2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwiZGVmYXVsdC1jbGFzc1wiO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgIFtcInRpdGxlRGF0YVwiLCBhcGksIHBhcmFtZXRlciwgdGhpbmdUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIHRoaW5nVHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgIH1cbiAgKTtcblxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHt0aXRsZVRleHQgJiZcbiAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICAgICAgdGl0bGVUZXh0PXt0aXRsZVRleHR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0gLz5cbiAgICAgIH1cblxuICAgICAgeyF0aXRsZVRleHQgJiYgaXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICAgICAgdGl0bGU9e2lzT250b2xvZ3koZGF0YSkgPyBkYXRhLmdldE5hbWUoKSA6IGRhdGEuZ2V0TGFiZWwoKX0gY2xhc3NOYW1lPXtmaW5hbENsYXNzTmFtZX0gLz5cbiAgICAgIH1cblxuICAgICAgeyF0aXRsZVRleHQgJiYgaXNMb2FkaW5nICYmIChkZWZhdWx0VmFsdWUgPyAoXG4gICAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uIHRpdGxlVGV4dD17ZGVmYXVsdFZhbHVlfSBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfSAvPilcbiAgICAgICAgOiA8RXVpTG9hZGluZ1NwaW5uZXIgc2l6ZT1cInNcIiAvPilcbiAgICAgIH1cblxuICAgICAgeyF0aXRsZVRleHQgJiYgaXNFcnJvciAmJiAoZGVmYXVsdFZhbHVlID9cbiAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uIHRpdGxlVGV4dD17ZGVmYXVsdFZhbHVlfSBjbGFzc05hbWU9e2ZpbmFsQ2xhc3NOYW1lfSAvPiA6XG4gICAgICAgIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwidGl0bGVcIil9PC9FdWlUZXh0Pil9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRpdGxlKHByb3BzOiBUaXRsZVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFRpdGxlV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRUaXRsZVdpZGdldChwcm9wczogVGl0bGVXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxUaXRsZVdpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHRoaW5nVHlwZT17cHJvcHMudGhpbmdUeXBlfVxuICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgdGl0bGVUZXh0PXtwcm9wcy50aXRsZVRleHR9XG4gICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgZGVmYXVsdFZhbHVlPXtwcm9wcy5kZWZhdWx0VmFsdWV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IHsgVGl0bGVXaWRnZXQsIGNyZWF0ZVRpdGxlIH07XG4iLCAiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRXVpVGV4dCB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7VGl0bGVQcmVzZW50YXRpb25Qcm9wc30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC90eXBlc1wiO1xuXG5mdW5jdGlvbiBUaXRsZVByZXNlbnRhdGlvbihwcm9wczogVGl0bGVQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gIHJldHVybiAoXG4gICAgPEV1aVRleHQgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9Pntwcm9wcy50aXRsZVRleHQgfHwgcHJvcHMudGl0bGV9PC9FdWlUZXh0PlxuICApO1xufVxuXG5leHBvcnQgeyBUaXRsZVByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpRmxleEdyb3VwLCBFdWlGbGV4SXRlbSwgRXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0LCBFdWlMaW5rfSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBJcmlXaWRnZXQgfSBmcm9tIFwiLi9JcmlXaWRnZXRcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7T2xzQXBpfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHtNZXRhZGF0YVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgQnJlYWRjcnVtYlByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgVGFiUHJlc2VudGF0aW9uIH0gZnJvbSBcIi4vVGFiV2lkZ2V0L1RhYlByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgRGVzY3JpcHRpb25QcmVzZW50YXRpb24gfSBmcm9tIFwiLi9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvblByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgVGl0bGVQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9UaXRsZVdpZGdldC9UaXRsZVByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eVR5cGVOYW1lLCBpc0VudGl0eX0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHtjcmVhdGVNb2RlbE9iamVjdCwgZ2V0UHJlZmVycmVkT250b2xvZ3lKU09OfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvTW9kZWxPYmplY3RDcmVhdG9yXCI7XG5pbXBvcnQge0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9ufSBmcm9tIFwiLi9FbnRpdHlPbnRvTGlzdFdpZGdldC9FbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblwiO1xuaW1wb3J0IHtFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb259IGZyb20gXCIuL0VudGl0eURlZmluZWRCeVdpZGdldC9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb25cIjtcbmltcG9ydCBcIi4uLy4uLy4uL3N0eWxlL3NlbWxvb2twLXN0eWxlcy5jc3NcIlxuXG50eXBlIE1ldGFkYXRhSW5mbyA9IHtcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBvbnRvTGlzdDogc3RyaW5nW10sXG4gICAgZGVmaW5lZEJ5OiBzdHJpbmdbXVxufVxuXG5mdW5jdGlvbiBNZXRhZGF0YVdpZGdldChwcm9wczogTWV0YWRhdGFXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBvbnRvbG9neUlkLCBlbnRpdHlUeXBlLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSwgb25OYXZpZ2F0ZVRvT250b2xvZ3ksIGhpZXJhcmNoeVRhYiwgY3Jvc3NSZWZUYWIsIHRlcm1pbm9sb2d5SW5mb1RhYiwgYWx0TmFtZXNUYWIsIHRlcm1MaW5rIH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuICBjb25zdCBtZXRhZGF0YVdpZGdldENTUyA9IGBcbiAgICAuYm9sZFRleHR7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG4gIGA7XG5cbiAgY29uc3Qge1xuICAgIGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeTxNZXRhZGF0YUluZm8+KFxuICAgIFtcIm1ldGFkYXRhXCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgZW50aXR5OiBFbnRpdHksIG9udG9MaXN0OiBzdHJpbmdbXSwgZGVmaW5lZEJ5OiBzdHJpbmdbXTtcbiAgICAgICAgaWYodXNlTGVnYWN5KSB7XG4gICAgICAgICAgICBjb25zdCBlbWJlZGRlZCA9IChhd2FpdCBvbHNBcGkuZ2V0RW50aXR5UmVzcG9uc2UoaXJpLCBlbnRpdHlUeXBlLCB1bmRlZmluZWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KSlbXCJfZW1iZWRkZWRcIl07XG4gICAgICAgICAgICBlbnRpdHkgPSBjcmVhdGVNb2RlbE9iamVjdCh7IFwiX2VtYmVkZGVkXCI6IHsgW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV06IGdldFByZWZlcnJlZE9udG9sb2d5SlNPTihlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dLCB1c2VMZWdhY3ksIG9udG9sb2d5SWQpIH19KSBhcyBFbnRpdHk7XG4gICAgICAgICAgICBvbnRvTGlzdCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAgICAgICAubWFwKChlbnRpdHlJbk9udG9sb2d5IDogYW55KSA9PiBlbnRpdHlJbk9udG9sb2d5W1wib250b2xvZ3lfbmFtZVwiXSk7XG4gICAgICAgICAgICBkZWZpbmVkQnkgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcImlzX2RlZmluaW5nX29udG9sb2d5XCJdKVxuICAgICAgICAgICAgICAgIC5tYXAoKGVudGl0eUluT250b2xvZ3kgOiBhbnkpID0+IGVudGl0eUluT250b2xvZ3lbXCJvbnRvbG9neV9uYW1lXCJdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVudGl0eSA9IGF3YWl0IG9sc0FwaS5nZXRFbnRpdHlPYmplY3QoaXJpLCBlbnRpdHlUeXBlLCBvbnRvbG9neUlkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSk7XG4gICAgICAgICAgICBvbnRvTGlzdCA9IGVudGl0eS5nZXRBcHBlYXJzSW4oKTtcbiAgICAgICAgICAgIGRlZmluZWRCeSA9IGVudGl0eS5nZXREZWZpbmVkQnkoKTtcbiAgICAgICAgfVxuICAgICAgICBvbnRvTGlzdCA9IG9udG9MaXN0LmZpbHRlcigob250byA6IHN0cmluZykgPT4gb250byAhPSBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpKS5zb3J0KCk7XG4gICAgICAgIGRlZmluZWRCeSA9IGRlZmluZWRCeS5maWx0ZXIoKG9udG86IHN0cmluZykgPT4gb250byAhPSBlbnRpdHkuZ2V0T250b2xvZ3lJZCgpKS5zb3J0KCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVudGl0eTogZW50aXR5LFxuICAgICAgICAgICAgb250b0xpc3Q6IG9udG9MaXN0LFxuICAgICAgICAgICAgZGVmaW5lZEJ5OiBkZWZpbmVkQnlcbiAgICAgICAgfSBhcyBNZXRhZGF0YUluZm87XG4gICAgfVxuICApO1xuXG4gIGZ1bmN0aW9uIHJlbmRlcihkYXRhOiBNZXRhZGF0YUluZm8pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPHN0eWxlPnttZXRhZGF0YVdpZGdldENTU308L3N0eWxlPlxuICAgICAgICA8RXVpRmxleEdyb3VwIGRpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0gc3R5bGU9e3sgbWF4V2lkdGg6IDYwMCB9fT5cbiAgICAgICAgICAgICAgICB7dGVybUxpbmsgP1xuICAgICAgICAgICAgICAgICAgPEV1aUxpbmsgaHJlZj17dGVybUxpbmt9IHRhcmdldD1cIl9ibGFua1wiIGV4dGVybmFsPXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgICAgIDxUaXRsZVByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17ZGF0YS5lbnRpdHkuZ2V0TGFiZWwoKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9sZFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9FdWlMaW5rPlxuICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgPFRpdGxlUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib2xkVGV4dFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICA8QnJlYWRjcnVtYlByZXNlbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e29udG9sb2d5SWQgfHwgZGF0YS5lbnRpdHkuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICAgICAgICAgICAgICBvbnRvbG9neU5hbWU9e2RhdGEuZW50aXR5LmdldE9udG9sb2d5SWQoKX1cbiAgICAgICAgICAgICAgICAgICAgc2hvcnRGb3JtPXtkYXRhLmVudGl0eS5nZXRTaG9ydEZvcm0oKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPEV1aUZsZXhHcm91cCBkaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxFdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9IHN0eWxlPXt7IG1heFdpZHRoOiA2MDAgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxJcmlXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgICBpcmk9e2lyaX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgIDxFdWlGbGV4SXRlbSBzdHlsZT17eyBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgICAgPERlc2NyaXB0aW9uUHJlc2VudGF0aW9uXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtkYXRhLmVudGl0eS5nZXREZXNjcmlwdGlvbigpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuXG4gICAgICAgICAgPGRpdiBzdHlsZT17e21hcmdpbjogXCIwIDEycHggMFwiLCBtYXhXaWR0aDogNjAwIH19PlxuICAgICAgICAgICAgICA8RW50aXR5T250b0xpc3RQcmVzZW50YXRpb24gaXJpPXtwcm9wcy5pcml9IGxhYmVsPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCJ9IG9udG9saXN0PXtkYXRhLm9udG9MaXN0fSBlbnRpdHlUeXBlPXtlbnRpdHlUeXBlIHx8IGRhdGEuZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZX0gb25OYXZpZ2F0ZVRvT250b2xvZ3k9e29uTmF2aWdhdGVUb09udG9sb2d5fSAvPlxuICAgICAgICAgICAgICA8RW50aXR5RGVmaW5lZEJ5UHJlc2VudGF0aW9uIGlyaT17cHJvcHMuaXJpfSBvbnRvbGlzdD17ZGF0YS5kZWZpbmVkQnl9IGxhYmVsPXtkYXRhLmVudGl0eS5nZXRMYWJlbCgpIHx8IFwiXCJ9IGVudGl0eVR5cGU9e2VudGl0eVR5cGUgfHwgZGF0YS5lbnRpdHkuZ2V0VHlwZSgpIGFzIEVudGl0eVR5cGVOYW1lfSBvbk5hdmlnYXRlVG9PbnRvbG9neT17b25OYXZpZ2F0ZVRvT250b2xvZ3l9IC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgIDxUYWJQcmVzZW50YXRpb25cbiAgICAgICAgICAgICAgICBkYXRhPXtkYXRhLmVudGl0eX1cbiAgICAgICAgICAgICAgICBpcmk9e2lyaX1cbiAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgIGFwaT17YXBpfVxuICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWQgPyBwcm9wcy5vbnRvbG9neUlkIDogZGF0YS5lbnRpdHkuZ2V0T250b2xvZ3lJZCgpfVxuICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17dXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgIGhpZXJhcmNoeVRhYj17aGllcmFyY2h5VGFifVxuICAgICAgICAgICAgICAgIGNyb3NzUmVmVGFiPXtjcm9zc1JlZlRhYn1cbiAgICAgICAgICAgICAgICB0ZXJtaW5vbG9neUluZm9UYWI9e3Rlcm1pbm9sb2d5SW5mb1RhYn1cbiAgICAgICAgICAgICAgICBhbHROYW1lc1RhYj17YWx0TmFtZXNUYWJ9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZyAmJiA8RXVpTG9hZGluZ1NwaW5uZXIgLz59XG4gICAgICB7aXNFcnJvciAmJiA8RXVpVGV4dD57Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5KGVycm9yLCBcIm1ldGFkYXRhXCIpfTwvRXVpVGV4dD59XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPD5cbiAgICAgICAgICB7aXNFbnRpdHkoZGF0YS5lbnRpdHkpID8gcmVuZGVyKGRhdGEpIDogbnVsbH1cbiAgICAgICAgPC8+XG4gICAgICB9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1ldGFkYXRhKHByb3BzOiBNZXRhZGF0YVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZE1ldGFkYXRhV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRNZXRhZGF0YVdpZGdldChwcm9wczogTWV0YWRhdGFXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8TWV0YWRhdGFXaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgICAgICAgICAgIG9udG9sb2d5SWQ9e3Byb3BzLm9udG9sb2d5SWR9XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgdXNlTGVnYWN5PXtwcm9wcy51c2VMZWdhY3l9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgdGVybUxpbms9e3Byb3BzLnRlcm1MaW5rfVxuICAgICAgICAgICAgICAgICAgICBhbHROYW1lc1RhYj17cHJvcHMuYWx0TmFtZXNUYWJ9XG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeVRhYj17cHJvcHMuaGllcmFyY2h5VGFifVxuICAgICAgICAgICAgICAgICAgICBjcm9zc1JlZlRhYj17cHJvcHMuY3Jvc3NSZWZUYWJ9XG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbm9sb2d5SW5mb1RhYj17cHJvcHMudGVybWlub2xvZ3lJbmZvVGFifVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgICAgIDwvRXVpUHJvdmlkZXI+XG4gICAgKVxufVxuXG5leHBvcnQgeyBNZXRhZGF0YVdpZGdldCwgY3JlYXRlTWV0YWRhdGEgfTtcbiIsICJpbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge3JhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5cbmNvbnN0IE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkgPSA1IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbihwcm9wczogRW50aXR5T250b0xpc3RQcmVzZW50YXRpb25Qcm9wcykge1xuXG4gICAgY29uc3QgW2FwcGVhcnNJbkV4cGFuZGVkLCBzZXRBcHBlYXJzSW5FeHBhbmRlZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlKG9udG9sb2d5OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e3JhbmRvbVN0cmluZygpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7aWYocHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3kpIHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KG9udG9sb2d5LCBwcm9wcy5lbnRpdHlUeXBlIHx8IFwiXCIsIHsgaXJpOiBwcm9wcy5pcmksIGxhYmVsOiBwcm9wcy5sYWJlbCB9KX19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJvbnRvbG9neS1iYWRnZVwiPntvbnRvbG9neS50b1VwcGVyQ2FzZSgpfTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gIH1cblxuICAgIGZ1bmN0aW9uIHJlbmRlck9udG9CYWRnZXMoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwcm9wcy5vbnRvbGlzdC5sZW5ndGggPiBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZICYmICFhcHBlYXJzSW5FeHBhbmRlZD9cbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICB7cHJvcHMub250b2xpc3Quc2xpY2UoMCwgTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSkubWFwKChvbnRvbG9neTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbmRlck9udG9CYWRnZShvbnRvbG9neSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJleHBhbmQtb250by1saXN0XCIgb25DbGljaz17KCkgPT4gc2V0QXBwZWFyc0luRXhwYW5kZWQodHJ1ZSl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgKyB7cHJvcHMub250b2xpc3QubGVuZ3RoIC0gTUFYX09OVE9MT0dJRVNfT05fRElTUExBWX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC8+IDpcblxuICAgICAgICAgICAgICAgIHByb3BzLm9udG9saXN0Lm1hcCgob250b2xvZ3k6IHN0cmluZykgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgICAge3Byb3BzLm9udG9saXN0ICYmIHByb3BzLm9udG9saXN0Lmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPEV1aVRleHQgc3R5bGU9e3tmb250V2VpZ2h0OiBcIm5vcm1hbFwifX0+XG4gICAgICAgICAgICAgICAgQWxzbyBhcHBlYXJzIGluJm5ic3A7XG4gICAgICAgICAgICAgICAge3JlbmRlck9udG9CYWRnZXMoKX1cbiAgICAgICAgICAgIDwvRXVpVGV4dD5cbiAgICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IHsgRW50aXR5T250b0xpc3RQcmVzZW50YXRpb24gfTtcbiIsICJpbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBFdWlUZXh0IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHtFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvblByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQge3JhbmRvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5cbmNvbnN0IE1BWF9PTlRPTE9HSUVTX09OX0RJU1BMQVkgPSA1IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24ocHJvcHM6IEVudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uUHJvcHMpIHtcblxuICAgIGNvbnN0IFthcHBlYXJzSW5FeHBhbmRlZCwgc2V0QXBwZWFyc0luRXhwYW5kZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGZ1bmN0aW9uIHJlbmRlck9udG9CYWRnZShvbnRvbG9neTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXtyYW5kb21TdHJpbmcoKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge2lmKHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5KSBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neShvbnRvbG9neSwgcHJvcHMuZW50aXR5VHlwZSB8fCBcIlwiLCB7IGlyaTogcHJvcHMuaXJpLCBsYWJlbDogcHJvcHMubGFiZWwgfSl9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib250b2xvZ3ktYmFkZ2VcIj57b250b2xvZ3kudG9VcHBlckNhc2UoKX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVuZGVyT250b0JhZGdlcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgcHJvcHMub250b2xpc3QubGVuZ3RoID4gTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSAmJiAhYXBwZWFyc0luRXhwYW5kZWQ/XG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICB7cHJvcHMub250b2xpc3Quc2xpY2UoMCwgTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSkubWFwKChvbnRvbG9neTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtyYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtyZW5kZXJPbnRvQmFkZ2Uob250b2xvZ3kpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiZXhwYW5kLW9udG8tbGlzdFwiIG9uQ2xpY2s9eygpID0+IHNldEFwcGVhcnNJbkV4cGFuZGVkKHRydWUpfT5cbiAgICAgICAgICAgICAgICAgICAgICArIHtwcm9wcy5vbnRvbGlzdC5sZW5ndGggLSBNQVhfT05UT0xPR0lFU19PTl9ESVNQTEFZfVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvPiA6XG5cbiAgICAgICAgICAgICAgcHJvcHMub250b2xpc3QubWFwKChvbnRvbG9neTogc3RyaW5nKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e3JhbmRvbVN0cmluZygpfT5cbiAgICAgICAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlKG9udG9sb2d5KX1cbiAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKSlcbiAgICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICAgIHtwcm9wcy5vbnRvbGlzdCAmJiBwcm9wcy5vbnRvbGlzdC5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxFdWlUZXh0IHN0eWxlPXt7Zm9udFdlaWdodDogXCJub3JtYWxcIn19PlxuICAgICAgICAgICAgICAgIERlZmluZWQgYnkmbmJzcDtcbiAgICAgICAgICAgICAgICB7cmVuZGVyT250b0JhZGdlcygpfVxuICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICApfVxuICAgIDwvPlxuXG4gICk7XG59XG5cbmV4cG9ydCB7IEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbiB9O1xuIiwgImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHtcbiAgQ29tcGFyYXRvcnMsXG4gIENyaXRlcmlhV2l0aFBhZ2luYXRpb24sXG4gIEV1aUJhc2ljVGFibGUsXG4gIEV1aUJ1dHRvbkljb24sXG4gIEV1aUhvcml6b250YWxSdWxlLFxuICBFdWlQcm92aWRlcixcbiAgRXVpTGluayxcbiAgRXVpU3BhY2VyLFxuICBFdWlUZXh0XG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBjc3MsIFNlcmlhbGl6ZWRTdHlsZXMgfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmltcG9ydCB7IEV1aUJhc2ljVGFibGVDb2x1bW4gfSBmcm9tIFwiQGVsYXN0aWMvZXVpL3NyYy9jb21wb25lbnRzL2Jhc2ljX3RhYmxlL2Jhc2ljX3RhYmxlXCI7XG5pbXBvcnQgeyBPbHNSZXNvdXJjZSwgUmVzb3VyY2VzV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBPbnRvbG9naWVzIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2ludGVyZmFjZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IERFRkFVTFRfSU5JVElBTF9FTlRSSUVTX1BFUl9QQUdFID0gMTA7XG5jb25zdCBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TID0gWzEwLCAyNSwgNTAsIDEwMF07XG5jb25zdCBERUZBVUxUX0lOSVRJQUxfU09SVF9GSUVMRCA9IFwiY29uZmlnLnByZWZlcnJlZFByZWZpeFwiO1xuY29uc3QgREVGQVVMVF9JTklUSUFMX1NPUlRfRElSID0gXCJhc2NcIiBhcyBjb25zdDtcblxuZnVuY3Rpb24gUmVzb3VyY2VzV2lkZ2V0KHByb3BzOiBSZXNvdXJjZXNXaWRnZXRQcm9wcykge1xuICBjb25zdCB7XG4gICAgYXBpLFxuICAgIGluaXRpYWxFbnRyaWVzUGVyUGFnZSA9IERFRkFVTFRfSU5JVElBTF9FTlRSSUVTX1BFUl9QQUdFLFxuICAgIHBhZ2VTaXplT3B0aW9ucyA9IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMsXG4gICAgaW5pdGlhbFNvcnRGaWVsZCA9IERFRkFVTFRfSU5JVElBTF9TT1JUX0ZJRUxELFxuICAgIGluaXRpYWxTb3J0RGlyID0gREVGQVVMVF9JTklUSUFMX1NPUlRfRElSLFxuICAgIHRhcmdldExpbmssXG4gICAgcGFyYW1ldGVyLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCBbcGFnZUluZGV4LCBzZXRQYWdlSW5kZXhdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtwYWdlU2l6ZSwgc2V0UGFnZVNpemVdID0gdXNlU3RhdGUoaW5pdGlhbEVudHJpZXNQZXJQYWdlKTtcbiAgY29uc3QgW3NvcnRGaWVsZCwgc2V0U29ydEZpZWxkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bWJlcj4oaW5pdGlhbFNvcnRGaWVsZCk7XG4gIGNvbnN0IFtzb3J0RGlyZWN0aW9uLCBzZXRTb3J0RGlyZWN0aW9uXSA9IHVzZVN0YXRlKGluaXRpYWxTb3J0RGlyKTtcblxuXG4gIGNvbnN0IGNvbHVtbnM6IEFycmF5PEV1aUJhc2ljVGFibGVDb2x1bW48T2xzUmVzb3VyY2U+ICYgeyBjc3M/OiBTZXJpYWxpemVkU3R5bGVzIH0+ID0gW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiUmVzb3VyY2UgTmFtZVwiLFxuICAgICAgZmllbGQ6IFwiY29uZmlnLnRpdGxlXCIsXG4gICAgICB3aWR0aDogXCIxNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlNob3J0IE5hbWVcIixcbiAgICAgIGZpZWxkOiBcIm9udG9sb2d5SWRcIixcbiAgICAgIHJlbmRlcjogKHZhbHVlOiBzdHJpbmcpID0+IChcbiAgICAgICAgdGFyZ2V0TGluayA/IDxFdWlMaW5rIGhyZWY9e3RhcmdldExpbmsgKyBcIm9udG9sb2dpZXMvXCIgKyB2YWx1ZSArIFwiL1wifT57dmFsdWV9PC9FdWlMaW5rPiA6IHZhbHVlXG4gICAgICApLFxuICAgICAgd2lkdGg6IFwiMTAlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJEZXNjcmlwdGlvblwiLFxuICAgICAgZmllbGQ6IFwiY29uZmlnLmRlc2NyaXB0aW9uXCIsXG4gICAgICB3aWR0aDogXCIzMCVcIixcbiAgICAgIGNzczogY3NzYFxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgYFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJWZXJzaW9uXCIsXG4gICAgICBmaWVsZDogXCJjb25maWcudmVyc2lvblwiLFxuICAgICAgd2lkdGg6IFwiNy41JVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIkxvYWRlZCBvblwiLFxuICAgICAgZmllbGQ6IFwibG9hZGVkXCIsXG4gICAgICB3aWR0aDogXCIxMCVcIixcbiAgICAgIGRhdGFUeXBlOiBcImRhdGVcIiBhcyBjb25zdCxcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlRlcm1zXCIsXG4gICAgICBmaWVsZDogXCJudW1iZXJPZlRlcm1zXCIsXG4gICAgICByZW5kZXI6ICh2YWx1ZTogbnVtYmVyKSA9PiA8Pnt2YWx1ZS50b0xvY2FsZVN0cmluZygpfTwvPixcbiAgICAgIHdpZHRoOiBcIjcuNSVcIixcbiAgICAgIHNvcnRhYmxlOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIlByb3BlcnRpZXNcIixcbiAgICAgIGZpZWxkOiBcIm51bWJlck9mUHJvcGVydGllc1wiLFxuICAgICAgcmVuZGVyOiAodmFsdWU6IG51bWJlcikgPT4gPD57dmFsdWUudG9Mb2NhbGVTdHJpbmcoKX08Lz4sXG4gICAgICB3aWR0aDogXCI3LjUlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJJbmRpdmlkdWFsc1wiLFxuICAgICAgZmllbGQ6IFwibnVtYmVyT2ZJbmRpdmlkdWFsc1wiLFxuICAgICAgcmVuZGVyOiAodmFsdWU6IG51bWJlcikgPT4gPD57dmFsdWUudG9Mb2NhbGVTdHJpbmcoKX08Lz4sXG4gICAgICB3aWR0aDogXCI3LjUlXCIsXG4gICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgd2lkdGg6IFwiNSVcIixcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgLi4uKHByb3BzLmFjdGlvbnMgfHwgW10pLFxuICAgICAgICB7XG4gICAgICAgICAgcmVuZGVyOiAoaXRlbTogT2xzUmVzb3VyY2UpID0+IChcbiAgICAgICAgICAgIDxFdWlCdXR0b25JY29uXG4gICAgICAgICAgICAgIGhyZWY9e2l0ZW0uY29uZmlnLmZpbGVMb2NhdGlvbn1cbiAgICAgICAgICAgICAgaWNvblR5cGU9XCJkb3dubG9hZFwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEb3dubG9hZFwiXG4gICAgICAgICAgICAgIGlzRGlzYWJsZWQ9e1xuICAgICAgICAgICAgICAgICFpdGVtLmNvbmZpZy5hbGxvd0Rvd25sb2FkIHx8XG4gICAgICAgICAgICAgICAgaXRlbS5jb25maWcuZmlsZUxvY2F0aW9uLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICBdO1xuXG4gIGNvbnN0IG9uVGFibGVDaGFuZ2UgPSAoe1xuICAgIHBhZ2UsXG4gICAgc29ydCxcbiAgfTogQ3JpdGVyaWFXaXRoUGFnaW5hdGlvbjxPbHNSZXNvdXJjZT4pID0+IHtcbiAgICBjb25zdCB7IGluZGV4OiBwYWdlSW5kZXgsIHNpemU6IHBhZ2VTaXplIH0gPSBwYWdlO1xuICAgIHNldFBhZ2VJbmRleChwYWdlSW5kZXgpO1xuICAgIHNldFBhZ2VTaXplKHBhZ2VTaXplKTtcblxuICAgIGlmIChzb3J0KSB7XG4gICAgICBjb25zdCB7IGZpZWxkOiBzb3J0RmllbGQsIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbiB9ID0gc29ydDtcbiAgICAgIHNldFNvcnRGaWVsZChzb3J0RmllbGQpO1xuICAgICAgc2V0U29ydERpcmVjdGlvbihzb3J0RGlyZWN0aW9uKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qge1xuICAgIGRhdGE6IG9udG9sb2dpZXNEYXRhLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGlzTG9hZGluZ1xuICB9ID0gdXNlUXVlcnk8T250b2xvZ2llcz4oXG4gICAgW1wib250b2xvZ2llc0RhdGFcIiwgYXBpLCBwYXJhbWV0ZXJdLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBvbHNBcGkuZ2V0T250b2xvZ2llc0RhdGEoXG4gICAgICAgIHByb3BzLnBhcmFtZXRlcixcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG5cbiAgY29uc3Qgb250b3MgPSBvbnRvbG9naWVzRGF0YT8ucHJvcGVydGllcy5tYXAob250b2xvZ3kgPT4gKHtcbiAgICAuLi5vbnRvbG9neS5wcm9wZXJ0aWVzXG4gIH0pKSB8fCBbXTtcbmNvbnNvbGUubG9nKG9udG9zKVxuICBjb25zdCBmaW5kT250b2xvZ2llcyA9IChcbiAgICBvbnRvbG9naWVzOiBhbnlbXSxcbiAgICBwYWdlSW5kZXg6IG51bWJlcixcbiAgICBwYWdlU2l6ZTogbnVtYmVyLFxuICAgIHNvcnRGaWVsZDogYW55LFxuICAgIHNvcnREaXJlY3Rpb246IFwiYXNjXCIgfCBcImRlc2NcIlxuICApID0+IHtcbiAgICBsZXQgaXRlbXM7XG5cbiAgICBpZiAoc29ydEZpZWxkKSB7XG4gICAgICBpdGVtcyA9IG9udG9sb2dpZXNcbiAgICAgICAgLnNsaWNlKDApXG4gICAgICAgIC5zb3J0KFxuICAgICAgICAgIENvbXBhcmF0b3JzLnByb3BlcnR5KHNvcnRGaWVsZCwgQ29tcGFyYXRvcnMuZGVmYXVsdChzb3J0RGlyZWN0aW9uKSlcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXMgPSBvbnRvbG9naWVzO1xuICAgIH1cblxuICAgIGxldCBwYWdlT2ZJdGVtcztcblxuICAgIGlmICghcGFnZUluZGV4ICYmICFwYWdlU2l6ZSkge1xuICAgICAgcGFnZU9mSXRlbXMgPSBpdGVtcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2VJbmRleCAqIHBhZ2VTaXplO1xuICAgICAgcGFnZU9mSXRlbXMgPSBpdGVtcy5zbGljZShcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgTWF0aC5taW4oc3RhcnRJbmRleCArIHBhZ2VTaXplLCBvbnRvbG9naWVzLmxlbmd0aClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VPZkl0ZW1zLFxuICAgICAgdG90YWxJdGVtQ291bnQ6IG9udG9sb2dpZXMubGVuZ3RoXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCB7IHBhZ2VPZkl0ZW1zLCB0b3RhbEl0ZW1Db3VudCB9ID0gZmluZE9udG9sb2dpZXMoXG4gICAgb250b3MsXG4gICAgcGFnZUluZGV4LFxuICAgIHBhZ2VTaXplLFxuICAgIHNvcnRGaWVsZCxcbiAgICBzb3J0RGlyZWN0aW9uXG4gICk7XG5cbiAgY29uc3QgcGFnaW5hdGlvbiA9IHtcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgdG90YWxJdGVtQ291bnQsXG4gICAgcGFnZVNpemVPcHRpb25zXG4gIH07XG5cbiAgY29uc3QgcmVzdWx0c0NvdW50ID1cbiAgICBwYWdlU2l6ZSA9PT0gMCA/IChcbiAgICAgIDxzdHJvbmc+QWxsPC9zdHJvbmc+XG4gICAgKSA6IChcbiAgICAgIDw+XG4gICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAge3BhZ2VTaXplICogcGFnZUluZGV4ICsgMX0te3BhZ2VTaXplICogcGFnZUluZGV4ICsgcGFnZVNpemV9XG4gICAgICAgIDwvc3Ryb25nPntcIiBcIn1cbiAgICAgICAgb2Yge3RvdGFsSXRlbUNvdW50fVxuICAgICAgPC8+XG4gICAgKTtcblxuXG4gIGNvbnN0IHNvcnRpbmcgPSB7XG4gICAgc29ydDoge1xuICAgICAgZmllbGQ6IHNvcnRGaWVsZCxcbiAgICAgIGRpcmVjdGlvbjogc29ydERpcmVjdGlvblxuICAgIH1cbiAgfTtcblxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1N1Y2Nlc3MgJiZcbiAgICAgICAgPD5cbiAgICAgICAgICA8RXVpVGV4dCBzaXplPVwieHNcIj5cbiAgICAgICAgICAgIFNob3dpbmcge3Jlc3VsdHNDb3VudH0gPHN0cm9uZz5PbnRvbG9naWVzPC9zdHJvbmc+XG4gICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIiAvPlxuICAgICAgICAgIDxFdWlIb3Jpem9udGFsUnVsZSBtYXJnaW49XCJub25lXCIgc3R5bGU9e3sgaGVpZ2h0OiAyIH19IC8+XG5cbiAgICAgICAgICA8RXVpQmFzaWNUYWJsZVxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIGl0ZW1zPXtwYWdlT2ZJdGVtc31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvblRhYmxlQ2hhbmdlfVxuICAgICAgICAgICAgcGFnaW5hdGlvbj17cGFnaW5hdGlvbn1cbiAgICAgICAgICAgIHNvcnRpbmc9e3NvcnRpbmd9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC8+XG4gICAgICB9XG4gICAgICB7aXNMb2FkaW5nICYmXG4gICAgICAgIDxFdWlCYXNpY1RhYmxlXG4gICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICBpdGVtcz17cGFnZU9mSXRlbXN9XG4gICAgICAgICAgb25DaGFuZ2U9e29uVGFibGVDaGFuZ2V9XG4gICAgICAgICAgcGFnaW5hdGlvbj17cGFnaW5hdGlvbn1cbiAgICAgICAgICBzb3J0aW5nPXtzb3J0aW5nfVxuICAgICAgICAgIGxvYWRpbmdcbiAgICAgICAgLz5cblxuICAgICAgfVxuICAgICAge2lzRXJyb3IgJiZcbiAgICAgICAgPEV1aUJhc2ljVGFibGVcbiAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgIGl0ZW1zPXtwYWdlT2ZJdGVtc31cbiAgICAgICAgICBvbkNoYW5nZT17b25UYWJsZUNoYW5nZX1cbiAgICAgICAgICBwYWdpbmF0aW9uPXtwYWdpbmF0aW9ufVxuICAgICAgICAgIHNvcnRpbmc9e3NvcnRpbmd9XG4gICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I9e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJyZXNvdXJjZXNcIil9XG4gICAgICAgICAgKi9cbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVzb3VyY2VzKHByb3BzOiBSZXNvdXJjZXNXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gIFJlYWN0RE9NLnJlbmRlcihXcmFwcGVkUmVzb3VyY2VzV2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRSZXNvdXJjZXNXaWRnZXQocHJvcHM6IFJlc291cmNlc1dpZGdldFByb3BzKSB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiAoXG4gICAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgPFJlc291cmNlc1dpZGdldFxuICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgaW5pdGlhbEVudHJpZXNQZXJQYWdlPXtwcm9wcy5pbml0aWFsRW50cmllc1BlclBhZ2V9XG4gICAgICAgICAgICAgIHBhZ2VTaXplT3B0aW9ucz17cHJvcHMucGFnZVNpemVPcHRpb25zfVxuICAgICAgICAgICAgICBpbml0aWFsU29ydEZpZWxkPXtwcm9wcy5pbml0aWFsU29ydEZpZWxkfVxuICAgICAgICAgICAgICBpbml0aWFsU29ydERpcj17cHJvcHMuaW5pdGlhbFNvcnREaXJ9XG4gICAgICAgICAgICAgIHRhcmdldExpbms9e3Byb3BzLnRhcmdldExpbmt9XG4gICAgICAgICAgICAgIGFjdGlvbnM9e3Byb3BzLmFjdGlvbnN9XG4gICAgICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHsgUmVzb3VyY2VzV2lkZ2V0LCBjcmVhdGVSZXNvdXJjZXMgfTtcbiIsICJpbXBvcnQgeyBFdWlDb21ib0JveCwgRXVpUHJvdmlkZXIsIEV1aVN1Z2dlc3QsIEV1aVN1Z2dlc3Rpb25Qcm9wcyB9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBTZWFyY2hCYXJXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBFdWlDb21ib0JveE9wdGlvbk9wdGlvbiB9IGZyb20gXCJAZWxhc3RpYy9ldWkvc3JjL2NvbXBvbmVudHMvY29tYm9fYm94L3R5cGVzXCI7XG5cbmZ1bmN0aW9uIFNlYXJjaEJhcldpZGdldChwcm9wczogU2VhcmNoQmFyV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBxdWVyeSxcbiAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAvKipcbiAgICogc3VnZ2VzdGlvbnNcbiAgICovXG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlPEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+PigpO1xuXG4gIC8qKlxuICAgKiBzZWxlY3RlZCBzdWdnZXN0aW9uIChvbiBjbGljaylcbiAgICovXG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkXSA9IHVzZVN0YXRlPEFycmF5PEV1aUNvbWJvQm94T3B0aW9uT3B0aW9uPGFueT4+PihbXSk7XG5cbiAgLyoqXG4gICAqIGN1cnJlbnQgc2VhcmNoIHZhbHVlXG4gICAqL1xuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlPHN0cmluZz4ocXVlcnkpO1xuXG4gIGNvbnN0IG9uQ2hhbmdlID0gKHNlbGVjdGVkT3B0aW9uOiBBcnJheTxFdWlDb21ib0JveE9wdGlvbk9wdGlvbjxhbnk+PikgPT4ge1xuICAgIHNldFNlbGVjdGVkKHNlbGVjdGVkT3B0aW9uKTtcbiAgfTtcblxuICBjb25zdCBvbkNyZWF0ZU9wdGlvbiA9IChzZWFyY2hWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaFZhbHVlID0gc2VhcmNoVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWRTZWFyY2hWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld09wdGlvbjogQXJyYXk8RXVpQ29tYm9Cb3hPcHRpb25PcHRpb248YW55Pj4gPSBbe1xuICAgICAgbGFiZWw6IHNlYXJjaFZhbHVlXG4gICAgfV07XG5cbiAgICBzZXRTZWxlY3RlZChuZXdPcHRpb24pO1xuICB9O1xuXG5cbiAgLyoqXG4gICAqIGZldGNoZXMgc3VnZ2VzdGlvbnMgd2hlbiBzZWFyY2hWYWx1ZSBjaGFuZ2VzXG4gICAqL1xuICBjb25zdCB7XG4gICAgaXNMb2FkaW5nXG4gIH0gPSB1c2VRdWVyeShcbiAgICBbXG4gICAgICBcInN1Z2dlc3Rpb25zXCIsXG4gICAgICBzZWFyY2hWYWx1ZVxuICAgIF0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZWFyY2hWYWx1ZS50cmltKCkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBFeGl0IGVhcmx5IGlmIHNlYXJjaFZhbHVlIGlzIGVtcHR5XG4gICAgICB9XG4gICAgICByZXR1cm4gb2xzQXBpLnN1Z2dlc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeTogc2VhcmNoVmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHByb3BzLnBhcmFtZXRlclxuICAgICAgKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UucmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzcG9uc2UuZG9jcykge1xuICAgICAgICAgIHNldE9wdGlvbnMocmVzcG9uc2UucmVzcG9uc2UuZG9jcy5tYXAoKHN1Z2dlc3Rpb246IGFueSkgPT4gKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsYWJlbDogc3VnZ2VzdGlvbi5hdXRvc3VnZ2VzdCxcbiAgICAgICAgICAgICAgdHlwZTogeyBjb2xvcjogXCJ0aW50MVwiLCBpY29uVHlwZTogXCJcIiB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICk7XG5cbiAgLyoqXG4gICAqIE9uY2UgdGhlIHNlbGVjdGVkIG9wdGlvbiBjaGFuZ2VzLCBwYXNzIHRoZSBldmVudCBieSBpbnZva2luZyB0aGUgcGFzc2VkIGZ1bmN0aW9uLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQoXG4gICAgICBzZWxlY3RlZE9wdGlvbnMubWFwKChzZWxlY3RlZE9wdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhYmVsOiBzZWxlY3RlZE9wdGlvbi5sYWJlbFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICB9LCBbc2VsZWN0ZWRPcHRpb25zXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEV1aUNvbWJvQm94XG4gICAgICAgIGlkPXtcInN1Z2dlc3RcIn1cbiAgICAgICAgaXNDbGVhcmFibGVcbiAgICAgICAgYXJpYS1sYWJlbD1cInNlYXJjaEJhclwiXG4gICAgICAgIGZ1bGxXaWR0aD17dHJ1ZX1cbiAgICAgICAgYXN5bmM9e3RydWV9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtcIlNlYXJjaFwifVxuICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgc2luZ2xlU2VsZWN0aW9uPXt0cnVlfVxuICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zPXtzZWxlY3RlZE9wdGlvbnN9XG4gICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgb25DcmVhdGVPcHRpb249e29uQ3JlYXRlT3B0aW9ufVxuICAgICAgICBvblNlYXJjaENoYW5nZT17KGl0ZW0pID0+IHtcbiAgICAgICAgICBzZXRTZWFyY2hWYWx1ZShpdGVtKTtcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaEJhcihwcm9wczogU2VhcmNoQmFyV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogYW55LCBjYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRTZWFyY2hCYXJXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFNlYXJjaEJhcldpZGdldChwcm9wczogU2VhcmNoQmFyV2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8U2VhcmNoQmFyV2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgcXVlcnk9e3Byb3BzLnF1ZXJ5fVxuICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudD17cHJvcHMuc2VsZWN0aW9uQ2hhbmdlZEV2ZW50fVxuICAgICAgICAgIHBhcmFtZXRlcj17cHJvcHMucGFyYW1ldGVyfVxuICAgICAgICAvPlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvRXVpUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCB7IFNlYXJjaEJhcldpZGdldCwgY3JlYXRlU2VhcmNoQmFyIH07XG4iLCAiaW1wb3J0IHtcbiAgRXVpQnV0dG9uRW1wdHksXG4gIEV1aUZsZXhHcm91cCxcbiAgRXVpRmxleEl0ZW0sXG4gIEV1aUZvcm1Sb3csXG4gIEV1aUhvcml6b250YWxSdWxlLFxuICBFdWlMb2FkaW5nU3Bpbm5lcixcbiAgRXVpUGFuZWwsIEV1aVByb3ZpZGVyLFxuICBFdWlTZWxlY3RhYmxlLFxuICBFdWlTZWxlY3RhYmxlT3B0aW9uLFxuICBFdWlTcGFjZXIsXG4gIEV1aVN3aXRjaCxcbiAgRXVpVGFibGVQYWdpbmF0aW9uLFxuICBFdWlUZXh0XG59IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnkgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyBNZXRhZGF0YUNvbXBhY3QgfSBmcm9tIFwiLi9NZXRhZGF0YUNvbXBhY3RcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVXaWRnZXQgfSBmcm9tIFwiLi4vQXV0b2NvbXBsZXRlV2lkZ2V0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgU2VhcmNoQmFyV2lkZ2V0IH0gZnJvbSBcIi4uL1NlYXJjaEJhcldpZGdldFwiO1xuXG5jb25zdCBERUZBVUxUX0lOSVRJQUxfSVRFTVNfUEVSX1BBR0UgPSAxMDtcbmNvbnN0IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMgPSBbMTAsIDI1LCA1MCwgMTAwXTtcblxuZnVuY3Rpb24gU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXQocHJvcHM6IFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGFwaSxcbiAgICBxdWVyeSxcbiAgICBwYXJhbWV0ZXIsXG4gICAgaW5pdGlhbEl0ZW1zUGVyUGFnZSA9IERFRkFVTFRfSU5JVElBTF9JVEVNU19QRVJfUEFHRSxcbiAgICBpdGVtc1BlclBhZ2VPcHRpb25zID0gREVGQVVMVF9QQUdFX1NJWkVfT1BUSU9OUyxcbiAgICB0YXJnZXRMaW5rLFxuICAgIHByZXNlbGVjdGVkLFxuICAgIHVzZUxlZ2FjeSA9IHRydWUsXG4gICAgLi4ucmVzdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlKHF1ZXJ5KTtcbiAgY29uc3QgW2FjdGl2ZVBhZ2UsIHNldEFjdGl2ZVBhZ2VdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtwYWdlQ291bnQsIHNldFBhZ2VDb3VudF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2l0ZW1zUGVyUGFnZSwgc2V0SXRlbXNQZXJQYWdlXSA9IHVzZVN0YXRlKGluaXRpYWxJdGVtc1BlclBhZ2UpO1xuICBjb25zdCBbdG90YWxJdGVtcywgc2V0VG90YWxJdGVtc10gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2V4YWN0TWF0Y2gsIHNldEV4YWN0TWF0Y2hdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd09ic29sZXRlVGVybXMsIHNldFNob3dPYnNvbGV0ZVRlcm1zXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2ZpbHRlckJ5VHlwZU9wdGlvbnMsIHNldEZpbHRlckJ5VHlwZU9wdGlvbnNdID0gdXNlU3RhdGU8RXVpU2VsZWN0YWJsZU9wdGlvbltdPihbXSk7XG4gIGNvbnN0IFtmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucywgc2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnNdID0gdXNlU3RhdGU8RXVpU2VsZWN0YWJsZU9wdGlvbltdPihbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTZWFyY2hWYWx1ZShxdWVyeSk7XG4gIH0sIFtxdWVyeV0pO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZpbHRlck9wdGlvbnMoY3VycmVudE9wdGlvbnM6IEV1aVNlbGVjdGFibGVPcHRpb25bXSwgb3B0aW9uQ291bnRzOiBhbnlbXSwgc2V0T3B0aW9uczogRnVuY3Rpb24sIHJlbmRlcj86ICh2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmcpIHtcbiAgICBpZiAoY3VycmVudE9wdGlvbnMubGVuZ3RoID09IDApIHtcbiAgICAgIHNldE9wdGlvbnMob3B0aW9uQ291bnRzLnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueVtdLCBjdXJyZW50VmFsdWU6IHN0cmluZywgY3VycmVudEluZGV4OiBudW1iZXIsIGFycmF5OiBhbnlbXSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudEluZGV4ICUgMiA9PT0gMCkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IHJlbmRlciA/IHJlbmRlcihjdXJyZW50VmFsdWUpIDogY3VycmVudFZhbHVlLFxuICAgICAgICAgICAga2V5OiBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgICBhcHBlbmQ6IFwiKFwiICsgYXJyYXlbY3VycmVudEluZGV4ICsgMV0gKyBcIilcIixcbiAgICAgICAgICAgIGRpc2FibGVkOiBhcnJheVtjdXJyZW50SW5kZXggKyAxXSA9PSAwLFxuICAgICAgICAgICAgZGF0YTogeyB0b3RhbENvdW50OiBhcnJheVtjdXJyZW50SW5kZXggKyAxXSB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgICAgfSwgW10pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3T3B0aW9uczogRXVpU2VsZWN0YWJsZU9wdGlvbltdID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5ld09wdGlvbnMucHVzaChPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50T3B0aW9uc1tpXSkpOyAvLyB1c2luZyBPYmplY3QuYXNzaWduIHRvIHBhc3MgYnkgdmFsdWUsIG5vdCBieSByZWZlcmVuY2VcbiAgICAgIH1cblxuICAgICAgb3B0aW9uQ291bnRzLmZvckVhY2goKGN1cnJlbnRWYWx1ZTogc3RyaW5nLCBjdXJyZW50SW5kZXg6IG51bWJlciwgYXJyYXk6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggJSAyID09PSAwKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uID0gbmV3T3B0aW9ucy5maW5kKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkgPT0gY3VycmVudFZhbHVlKTtcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICBvcHRpb24uYXBwZW5kID0gXCIoXCIgKyBhcnJheVtjdXJyZW50SW5kZXggKyAxXTtcbiAgICAgICAgICAgIGlmIChvcHRpb24uZGF0YSAmJiBhcnJheVtjdXJyZW50SW5kZXggKyAxXSA8IG9wdGlvbi5kYXRhLnRvdGFsQ291bnQpIHtcbiAgICAgICAgICAgICAgb3B0aW9uLmFwcGVuZCArPSBcIi9cIiArIG9wdGlvbi5kYXRhLnRvdGFsQ291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb24uYXBwZW5kICs9IFwiKVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbHRlclNlbGVjdGVkT3B0aW9ucyA9IChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5jaGVja2VkID09PSBcIm9uXCI7XG5cbiAgY29uc3Qge1xuICAgIGRhdGE6IHNlYXJjaFJlc3VsdHMsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzU3VjY2VzcyxcbiAgICBpc0Vycm9yLFxuICAgIGVycm9yXG4gIH0gPSB1c2VRdWVyeShcbiAgICBbXG4gICAgICBcInNlYXJjaFJlc3VsdHNcIixcbiAgICAgIGFwaSxcbiAgICAgIHNlYXJjaFZhbHVlLFxuICAgICAgZXhhY3RNYXRjaCxcbiAgICAgIHNob3dPYnNvbGV0ZVRlcm1zLFxuICAgICAgYWN0aXZlUGFnZSxcbiAgICAgIGl0ZW1zUGVyUGFnZSxcbiAgICAgIGZpbHRlckJ5VHlwZU9wdGlvbnMuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucykubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkpLFxuICAgICAgZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucykubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkpLFxuICAgICAgcGFyYW1ldGVyXG4gICAgXSxcbiAgICBhc3luYyAoeyBzaWduYWwgfSkgPT4ge1xuICAgICAgcmV0dXJuIG9sc0FwaS5zZWFyY2goXG4gICAgICAgIHtcbiAgICAgICAgICBxdWVyeTogc2VhcmNoVmFsdWUsXG4gICAgICAgICAgZXhhY3RNYXRjaDogZXhhY3RNYXRjaCxcbiAgICAgICAgICBzaG93T2Jzb2xldGVUZXJtczogc2hvd09ic29sZXRlVGVybXMsXG4gICAgICAgICAgdHlwZXM6IGZpbHRlckJ5VHlwZU9wdGlvbnMuZmlsdGVyKGZpbHRlclNlbGVjdGVkT3B0aW9ucykubWFwKChvcHRpb246IEV1aVNlbGVjdGFibGVPcHRpb24pID0+IG9wdGlvbi5rZXkpLmpvaW4oXCIsXCIpLFxuICAgICAgICAgIG9udG9sb2d5OiBmaWx0ZXJCeU9udG9sb2d5T3B0aW9ucy5maWx0ZXIoZmlsdGVyU2VsZWN0ZWRPcHRpb25zKS5tYXAoKG9wdGlvbjogRXVpU2VsZWN0YWJsZU9wdGlvbikgPT4gb3B0aW9uLmtleSkuam9pbihcIixcIiksXG4gICAgICAgICAgZ3JvdXBCeUlyaTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFnZTogYWN0aXZlUGFnZS50b1N0cmluZygpLFxuICAgICAgICAgIHNpemU6IGl0ZW1zUGVyUGFnZS50b1N0cmluZygpXG4gICAgICAgIH0sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgcHJvcHMucGFyYW1ldGVyLFxuICAgICAgICBzaWduYWxcbiAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlW1wicmVzcG9uc2VcIl0gJiYgcmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcImRvY3NcIl0gIT0gbnVsbCAmJiByZXNwb25zZVtcInJlc3BvbnNlXCJdW1wibnVtRm91bmRcIl0gIT0gbnVsbCkge1xuICAgICAgICAgIGlmIChyZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXSAmJiByZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXSkge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlW1wiZmFjZXRfY291bnRzXCJdW1wiZmFjZXRfZmllbGRzXCJdW1widHlwZVwiXSkge1xuICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXJPcHRpb25zKFxuICAgICAgICAgICAgICAgIGZpbHRlckJ5VHlwZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJ0eXBlXCJdLFxuICAgICAgICAgICAgICAgIHNldEZpbHRlckJ5VHlwZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRWYWx1ZTogc3RyaW5nKSA9PiBgJHtjdXJyZW50VmFsdWVbMF0udG9VcHBlckNhc2UoKX0ke2N1cnJlbnRWYWx1ZS5zbGljZSgxKX1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXNlTGVnYWN5KSB7XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcIm9udG9sb2d5X25hbWVcIl0pIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXJPcHRpb25zKFxuICAgICAgICAgICAgICAgICAgZmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICByZXNwb25zZVtcImZhY2V0X2NvdW50c1wiXVtcImZhY2V0X2ZpZWxkc1wiXVtcIm9udG9sb2d5X25hbWVcIl0sXG4gICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50VmFsdWU6IHN0cmluZykgPT4gY3VycmVudFZhbHVlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neUlkXCJdKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlRmlsdGVyT3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgIGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXCJmYWNldF9jb3VudHNcIl1bXCJmYWNldF9maWVsZHNcIl1bXCJvbnRvbG9neUlkXCJdLFxuICAgICAgICAgICAgICAgICAgc2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAoY3VycmVudFZhbHVlOiBzdHJpbmcpID0+IGN1cnJlbnRWYWx1ZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldFRvdGFsSXRlbXMocmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcIm51bUZvdW5kXCJdKTtcbiAgICAgICAgICBjb25zdCBuZXdQYWdlQ291bnQgPSBNYXRoLmNlaWwocmVzcG9uc2VbXCJyZXNwb25zZVwiXVtcIm51bUZvdW5kXCJdIC8gaXRlbXNQZXJQYWdlKTtcbiAgICAgICAgICBzZXRQYWdlQ291bnQobmV3UGFnZUNvdW50KTtcbiAgICAgICAgICBpZiAoYWN0aXZlUGFnZSA+PSBuZXdQYWdlQ291bnQpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZVBhZ2UoMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3BvbnNlLmRvY3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBBUEkgcmVzcG9uc2VcIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAge1xuICAgICAga2VlcFByZXZpb3VzRGF0YTogdHJ1ZVxuICAgIH0gLy8gU2VlOiBodHRwczovL3JlYWN0LXF1ZXJ5LXYzLnRhbnN0YWNrLmNvbS9ndWlkZXMvcGFnaW5hdGVkLXF1ZXJpZXNcbiAgKTtcblxuICBmdW5jdGlvbiBvbkNoYW5nZUl0ZW1zUGVyUGFnZShuZXdJdGVtc1BlclBhZ2U6IG51bWJlcikge1xuICAgIHNldEFjdGl2ZVBhZ2UoTWF0aC5mbG9vcigoYWN0aXZlUGFnZSAqIGl0ZW1zUGVyUGFnZSArIDEpIC8gbmV3SXRlbXNQZXJQYWdlKSk7XG4gICAgc2V0SXRlbXNQZXJQYWdlKG5ld0l0ZW1zUGVyUGFnZSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVFeGFjdE1hdGNoKCkge1xuICAgIHNldEV4YWN0TWF0Y2goIWV4YWN0TWF0Y2gpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlU2hvd09ic29sZXRlVGVybXMoKSB7XG4gICAgc2V0U2hvd09ic29sZXRlVGVybXMoIXNob3dPYnNvbGV0ZVRlcm1zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyRmlsdGVyKGN1cnJlbnRPcHRpb25zOiBFdWlTZWxlY3RhYmxlT3B0aW9uW10sIHNldE9wdGlvbnM6IEZ1bmN0aW9uKSB7XG4gICAgY29uc3QgbmV3T3B0aW9ucyA9IFsuLi5jdXJyZW50T3B0aW9uc107XG4gICAgc2V0T3B0aW9ucyhuZXdPcHRpb25zLm1hcCgob3B0aW9uOiBFdWlTZWxlY3RhYmxlT3B0aW9uKSA9PiAoeyAuLi5vcHRpb24sIGNoZWNrZWQ6IHVuZGVmaW5lZCB9KSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJBbGxGaWx0ZXJzKCkge1xuICAgIGNsZWFyRmlsdGVyKGZpbHRlckJ5VHlwZU9wdGlvbnMsIHNldEZpbHRlckJ5VHlwZU9wdGlvbnMpO1xuICAgIGNsZWFyRmlsdGVyKGZpbHRlckJ5T250b2xvZ3lPcHRpb25zLCBzZXRGaWx0ZXJCeU9udG9sb2d5T3B0aW9ucyk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1fdG9fc2VhcmNoVmFsdWUoc2VsZWN0ZWRPcHRpb246IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGlyaT86IHN0cmluZztcbiAgICBvbnRvbG9neV9uYW1lPzogc3RyaW5nO1xuICAgIHR5cGU/OiBzdHJpbmdcbiAgfVtdKSB7XG4gICAgc2V0U2VhcmNoVmFsdWUoc2VsZWN0ZWRPcHRpb25bMF0gPyBzZWxlY3RlZE9wdGlvblswXS5sYWJlbCA6IFwiXCIpO1xuICB9XG5cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U2VhcmNoQmFyV2lkZ2V0XG4gICAgICAgIGFwaT17YXBpfVxuICAgICAgICBxdWVyeT17XCJcIn1cbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50PXsoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgICAgICB0cmFuc2Zvcm1fdG9fc2VhcmNoVmFsdWUoc2VsZWN0ZWRPcHRpb24pO1xuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInhsXCIgLz5cbiAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cInNcIiAvPlxuXG4gICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17M30gc3R5bGU9e3sgbWluV2lkdGg6IDI1MCB9fT5cbiAgICAgICAgICA8RXVpUGFuZWw+XG4gICAgICAgICAgICB7aXNTdWNjZXNzICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IHR5cGVcIj5cbiAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17ZmlsdGVyQnlUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeVR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgeyhsaXN0KSA9PiBsaXN0fVxuICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2lzTG9hZGluZyAmJlxuICAgICAgICAgICAgICA8RXVpRm9ybVJvdyBsYWJlbD1cIkZpbHRlciBieSB0eXBlXCI+XG4gICAgICAgICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2lzRXJyb3IgJiZcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgdHlwZVwiPlxuICAgICAgICAgICAgICAgIDxFdWlTZWxlY3RhYmxlXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtbXX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRGaWx0ZXJCeVR5cGVPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgeyhsaXN0KSA9PiBsaXN0fVxuICAgICAgICAgICAgICAgIDwvRXVpU2VsZWN0YWJsZT5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7aXNTdWNjZXNzICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IG9udG9sb2d5XCI+XG4gICAgICAgICAgICAgICAgPEV1aVNlbGVjdGFibGVcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e2ZpbHRlckJ5T250b2xvZ3lPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldEZpbHRlckJ5T250b2xvZ3lPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgbGlzdFByb3BzPXt7IGJvcmRlcmVkOiB0cnVlIH19XG4gICAgICAgICAgICAgICAgICBzZWFyY2hhYmxlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgeyhsaXN0LCBzZWFyY2gpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICB7c2VhcmNofVxuICAgICAgICAgICAgICAgICAgICAgIHtsaXN0fVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9FdWlTZWxlY3RhYmxlPlxuICAgICAgICAgICAgICA8L0V1aUZvcm1Sb3c+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7aXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgIDxFdWlGb3JtUm93IGxhYmVsPVwiRmlsdGVyIGJ5IG9udG9sb2d5XCI+XG4gICAgICAgICAgICAgICAgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9XCJzXCIgLz5cbiAgICAgICAgICAgICAgPC9FdWlGb3JtUm93PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAge2lzRXJyb3IgJiZcbiAgICAgICAgICAgICAgPEV1aUZvcm1Sb3cgbGFiZWw9XCJGaWx0ZXIgYnkgb250b2xvZ3lcIj5cbiAgICAgICAgICAgICAgICA8RXVpU2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz17W119XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0RmlsdGVyQnlPbnRvbG9neU9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsaXN0UHJvcHM9e3sgYm9yZGVyZWQ6IHRydWUgfX1cbiAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7KGxpc3QsIHNlYXJjaCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgIHtzZWFyY2h9XG4gICAgICAgICAgICAgICAgICAgICAge2xpc3R9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L0V1aVNlbGVjdGFibGU+XG4gICAgICAgICAgICAgIDwvRXVpRm9ybVJvdz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPEV1aUJ1dHRvbkVtcHR5XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NsZWFyQWxsRmlsdGVyc31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQ2xlYXIgYWxsIGZpbHRlcnNcbiAgICAgICAgICAgIDwvRXVpQnV0dG9uRW1wdHk+XG4gICAgICAgICAgPC9FdWlQYW5lbD5cbiAgICAgICAgPC9FdWlGbGV4SXRlbT5cblxuICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17N30+XG4gICAgICAgICAgPEV1aVBhbmVsIGNvbG9yPVwidHJhbnNwYXJlbnRcIiBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICA8RXVpRmxleEdyb3VwPlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0gZ3Jvdz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgIDxFdWlTd2l0Y2ggbGFiZWw9XCJFeGFjdCBtYXRjaFwiIGNoZWNrZWQ9e2V4YWN0TWF0Y2h9IG9uQ2hhbmdlPXt0b2dnbGVFeGFjdE1hdGNofSAvPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPEV1aVN3aXRjaCBsYWJlbD1cIlNob3cgb25seSBvYnNvbGV0ZSB0ZXJtc1wiIGNoZWNrZWQ9e3Nob3dPYnNvbGV0ZVRlcm1zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RvZ2dsZVNob3dPYnNvbGV0ZVRlcm1zfSAvPlxuICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgPC9FdWlGbGV4R3JvdXA+XG5cbiAgICAgICAgICAgIDxFdWlTcGFjZXIgc2l6ZT1cIm1cIiAvPlxuXG4gICAgICAgICAgICA8RXVpVGV4dCBzaXplPVwieHNcIiBzdHlsZT17eyBwYWRkaW5nOiBcIjAgOHB4XCIgfX0+XG4gICAgICAgICAgICAgIFNob3dpbmcge01hdGgubWluKGFjdGl2ZVBhZ2UgKiBpdGVtc1BlclBhZ2UgKyAxLCB0b3RhbEl0ZW1zKX0gdG8ge01hdGgubWluKChhY3RpdmVQYWdlICsgMSkgKiBpdGVtc1BlclBhZ2UsIHRvdGFsSXRlbXMpfSBvZiB7dG90YWxJdGVtc30gcmVzdWx0c1xuICAgICAgICAgICAgPC9FdWlUZXh0PlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cblxuICAgICAgICAgICAgPEV1aUhvcml6b250YWxSdWxlIG1hcmdpbj1cIm5vbmVcIiBzdHlsZT17eyBoZWlnaHQ6IDIgfX0gLz5cblxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiIC8+XG5cbiAgICAgICAgICAgIDxFdWlUYWJsZVBhZ2luYXRpb25cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCByZXN1bHQgcGFnaW5hdGlvblwiXG4gICAgICAgICAgICAgIHBhZ2VDb3VudD17cGFnZUNvdW50fVxuICAgICAgICAgICAgICBhY3RpdmVQYWdlPXthY3RpdmVQYWdlfVxuICAgICAgICAgICAgICBvbkNoYW5nZVBhZ2U9e3NldEFjdGl2ZVBhZ2V9XG4gICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZT17aXRlbXNQZXJQYWdlfVxuICAgICAgICAgICAgICBvbkNoYW5nZUl0ZW1zUGVyUGFnZT17b25DaGFuZ2VJdGVtc1BlclBhZ2V9XG4gICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM9e2l0ZW1zUGVyUGFnZU9wdGlvbnN9XG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8RXVpU3BhY2VyIHNpemU9XCJzXCIgLz5cblxuICAgICAgICAgICAge3NlYXJjaFJlc3VsdHMgJiYgc2VhcmNoUmVzdWx0cy5tYXAoKHJlc3VsdDogYW55KSA9PiAoXG4gICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudCBrZXk9e3Jlc3VsdC5pZH0+XG4gICAgICAgICAgICAgICAgPE1ldGFkYXRhQ29tcGFjdCBhcGk9e2FwaX0gcmVzdWx0PXtyZXN1bHR9IHRhcmdldExpbms9e3RhcmdldExpbmt9IC8+XG4gICAgICAgICAgICAgICAgPEV1aVNwYWNlciAvPlxuICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9FdWlQYW5lbD5cbiAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgIDwvRXVpRmxleEdyb3VwPlxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdChwcm9wczogU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRQcm9wcywgY29udGFpbmVyOiBhbnksIGNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFNlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0KHByb3BzKSwgY29udGFpbmVyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIFdyYXBwZWRTZWFyY2hSZXN1bHRzTGlzdFdpZGdldChwcm9wczogU2VhcmNoUmVzdWx0c0xpc3RXaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxTZWFyY2hSZXN1bHRzTGlzdFdpZGdldFxuICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgIHF1ZXJ5PXtwcm9wcy5xdWVyeX1cbiAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICBpbml0aWFsSXRlbXNQZXJQYWdlPXtwcm9wcy5pbml0aWFsSXRlbXNQZXJQYWdlfVxuICAgICAgICAgIGl0ZW1zUGVyUGFnZU9wdGlvbnM9e3Byb3BzLml0ZW1zUGVyUGFnZU9wdGlvbnN9XG4gICAgICAgICAgdGFyZ2V0TGluaz17cHJvcHMudGFyZ2V0TGlua31cbiAgICAgICAgLz5cbiAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICA8L0V1aVByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyBTZWFyY2hSZXN1bHRzTGlzdFdpZGdldCwgY3JlYXRlU2VhcmNoUmVzdWx0c0xpc3QgfTtcbiIsICJpbXBvcnQgeyBFdWlDYXJkLCBFdWlGbGV4R3JvdXAsIEV1aUZsZXhJdGVtLCBFdWlTcGFjZXIsIEV1aVRpdGxlIH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgQnJlYWRjcnVtYldpZGdldCwgRGVzY3JpcHRpb25XaWRnZXQsIElyaVdpZGdldCB9IGZyb20gXCIuLi9NZXRhZGF0YVdpZGdldFwiO1xuaW1wb3J0IHtNZXRhZGF0YUNvbXBhY3RQcm9wc30gZnJvbSBcIi4uLy4uLy4uL2FwcC90eXBlc1wiO1xuaW1wb3J0IHtwbHVyYWxpemVUeXBlfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcblxuZnVuY3Rpb24gTWV0YWRhdGFDb21wYWN0KHByb3BzOiBNZXRhZGF0YUNvbXBhY3RQcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgICAgYXBpLFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIHRhcmdldExpbmssXG4gICAgICAgIC4uLnJlc3RcbiAgICB9ID0gcHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8RXVpQ2FyZFxuICAgICAgICAgICAgdGV4dEFsaWduPVwibGVmdFwiXG4gICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIGhyZWY9e3RhcmdldExpbmsgP1xuICAgICAgICAgICAgICAgIChyZXN1bHQudHlwZSAhPSBcIm9udG9sb2d5XCIgP1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRMaW5rICsgXCJvbnRvbG9naWVzL1wiICsgcmVzdWx0Lm9udG9sb2d5X25hbWUgKyBcIi9cIiArIHBsdXJhbGl6ZVR5cGUocmVzdWx0LnR5cGUsIHRydWUpICsgXCI/aXJpPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHJlc3VsdC5pcmkpXG4gICAgICAgICAgICAgICAgICAgIDogdGFyZ2V0TGluayArIFwib250b2xvZ2llcy9cIiArIHJlc3VsdC5vbnRvbG9neV9uYW1lKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgIDxFdWlGbGV4R3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxFdWlGbGV4SXRlbSBncm93PXtmYWxzZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RXVpVGl0bGU+PGgyPntyZXN1bHQubGFiZWx9PC9oMj48L0V1aVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cmVzdWx0LnR5cGUgIT0gXCJvbnRvbG9neVwiICYmIDxCcmVhZGNydW1iV2lkZ2V0IGFwaT17YXBpfSBpcmk9e3Jlc3VsdC5pcml9IGVudGl0eVR5cGU9e3Jlc3VsdC50eXBlfSBvbnRvbG9neUlkPXtyZXN1bHQub250b2xvZ3lfbmFtZX0vPn1cbiAgICAgICAgICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8L0V1aUZsZXhHcm91cD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgICAge3Jlc3VsdC50eXBlICE9IFwib250b2xvZ3lcIiA/IDxJcmlXaWRnZXQgaXJpPXtyZXN1bHQuaXJpfS8+IDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgPEV1aVNwYWNlciBzaXplPVwic1wiLz5cbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbldpZGdldCBhcGk9e2FwaX0gb250b2xvZ3lJZD17cmVzdWx0Lm9udG9sb2d5X25hbWV9IGlyaT17cmVzdWx0LmlyaX0gdGhpbmdUeXBlPXtyZXN1bHQudHlwZX0vPlxuICAgICAgICA8L0V1aUNhcmQ+XG5cbiAgICApO1xufVxuXG5leHBvcnQgeyBNZXRhZGF0YUNvbXBhY3QgfTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQge0V1aUxvYWRpbmdTcGlubmVyLCBFdWlQcm92aWRlciwgRXVpVGV4dH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgT2xzQXBpIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpL09sc0FwaSdcbmltcG9ydCB7UXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIsIHVzZVF1ZXJ5fSBmcm9tICdyZWFjdC1xdWVyeSdcbmltcG9ydCB7Z2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5LCBzaW5ndWxhcml6ZVR5cGV9IGZyb20gXCIuLi8uLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHtFbnRpdHlPbnRvTGlzdFdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbiB9IGZyb20gXCIuL0VudGl0eU9udG9MaXN0UHJlc2VudGF0aW9uXCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IFwiLi4vLi4vLi4vLi4vc3R5bGUvc2VtbG9va3Atc3R5bGVzLmNzc1wiO1xuaW1wb3J0IHtFbnRpdHlUeXBlTmFtZX0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5cbmZ1bmN0aW9uIEVudGl0eU9udG9MaXN0V2lkZ2V0KHByb3BzOiBFbnRpdHlPbnRvTGlzdFdpZGdldFByb3BzKSB7XG4gIGNvbnN0IHsgaXJpLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5IH0gPSBwcm9wcztcbiAgY29uc3Qgb2xzQXBpID0gbmV3IE9sc0FwaShhcGkpO1xuXG4gIGNvbnN0IHtcbiAgICBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1N1Y2Nlc3MsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvclxuICB9ID0gdXNlUXVlcnk8e29udG9MaXN0OiBzdHJpbmdbXSwgZW50aXR5VHlwZTogRW50aXR5VHlwZU5hbWUsIGxhYmVsOiBzdHJpbmd9PihcbiAgICBbXCJlbnRpdHlPbnRvTGlzdFwiLCBhcGksIHBhcmFtZXRlciwgZW50aXR5VHlwZSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IG9udG9saXN0IDogc3RyaW5nW107XG4gICAgICAgIGxldCByZWFsRW50aXR5VHlwZSA6IEVudGl0eVR5cGVOYW1lO1xuICAgICAgICBsZXQgbGFiZWwgOiBzdHJpbmc7XG4gICAgICAgIGlmKHVzZUxlZ2FjeSkge1xuICAgICAgICAgICAgY29uc3QgZW1iZWRkZWQgPSAoYXdhaXQgb2xzQXBpLmdldEVudGl0eVJlc3BvbnNlKGlyaSwgZW50aXR5VHlwZSwgdW5kZWZpbmVkLCBwYXJhbWV0ZXIsIHVzZUxlZ2FjeSkpW1wiX2VtYmVkZGVkXCJdO1xuICAgICAgICAgICAgb250b2xpc3QgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dLm1hcCgoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuICAgICAgICAgICAgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IHNpbmd1bGFyaXplVHlwZShPYmplY3Qua2V5cyhlbWJlZGRlZClbMF0pIGFzIEVudGl0eVR5cGVOYW1lO1xuICAgICAgICAgICAgbGFiZWwgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dWzBdW1wibGFiZWxcIl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgICAgICAgb250b2xpc3QgPSBlbnRpdHkuZ2V0QXBwZWFyc0luKCk7XG4gICAgICAgICAgICByZWFsRW50aXR5VHlwZSA9IGVudGl0eVR5cGUgfHwgZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZTtcbiAgICAgICAgICAgIGxhYmVsID0gZW50aXR5LmdldExhYmVsKCkgfHwgXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBvbnRvbGlzdCA9IG9udG9saXN0LmZpbHRlcigob250byA6IHN0cmluZykgPT4gb250byAhPSBvbnRvbG9neUlkKS5zb3J0KCk7XG4gICAgICAgIHJldHVybiB7b250b0xpc3Q6IG9udG9saXN0LCBlbnRpdHlUeXBlOiByZWFsRW50aXR5VHlwZSwgbGFiZWw6IGxhYmVsfTtcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzU3VjY2VzcyAmJiBkYXRhICYmXG4gICAgICAgIDxFbnRpdHlPbnRvTGlzdFByZXNlbnRhdGlvbiBvbnRvbGlzdD17ZGF0YS5vbnRvTGlzdH0gZW50aXR5VHlwZT17ZGF0YS5lbnRpdHlUeXBlfSBsYWJlbD17ZGF0YS5sYWJlbH0gaXJpPXtpcml9IG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX0gLz59XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwib250b2xvZ3kgbGlzdFwiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlPbnRvTGlzdChwcm9wczogRW50aXR5T250b0xpc3RXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpPT52b2lkKSB7XG4gICAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRFbnRpdHlPbnRvTGlzdFdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRW50aXR5T250b0xpc3RXaWRnZXQocHJvcHM6IEVudGl0eU9udG9MaXN0V2lkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIDxFdWlQcm92aWRlciBjb2xvck1vZGU9XCJsaWdodFwiPlxuICAgICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgICAgPEVudGl0eU9udG9MaXN0V2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IEVudGl0eU9udG9MaXN0V2lkZ2V0LCBjcmVhdGVFbnRpdHlPbnRvTGlzdCB9O1xuIiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0fSBmcm9tIFwiQGVsYXN0aWMvZXVpXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tICcuLi8uLi8uLi8uLi9hcGkvT2xzQXBpJ1xuaW1wb3J0IHtRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciwgdXNlUXVlcnl9IGZyb20gJ3JlYWN0LXF1ZXJ5J1xuaW1wb3J0IHtnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXksIHNpbmd1bGFyaXplVHlwZX0gZnJvbSBcIi4uLy4uLy4uLy4uL2FwcC91dGlsXCI7XG5pbXBvcnQge0VudGl0eURlZmluZWRCeVdpZGdldFByb3BzfSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb24gfSBmcm9tIFwiLi9FbnRpdHlEZWZpbmVkQnlQcmVzZW50YXRpb25cIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi8uLi9zdHlsZS9zZW1sb29rcC1zdHlsZXMuY3NzXCI7XG5pbXBvcnQge0VudGl0eVR5cGVOYW1lfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvTW9kZWxUeXBlQ2hlY2tcIjtcblxuZnVuY3Rpb24gRW50aXR5RGVmaW5lZEJ5V2lkZ2V0KHByb3BzOiBFbnRpdHlEZWZpbmVkQnlXaWRnZXRQcm9wcykge1xuICBjb25zdCB7IGlyaSwgYXBpLCBwYXJhbWV0ZXIsIGVudGl0eVR5cGUsIG9udG9sb2d5SWQsIHVzZUxlZ2FjeSB9ID0gcHJvcHM7XG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNTdWNjZXNzLFxuICAgIGlzRXJyb3IsXG4gICAgZXJyb3JcbiAgfSA9IHVzZVF1ZXJ5PHtvbnRvTGlzdDogc3RyaW5nW10sIGVudGl0eVR5cGU6IEVudGl0eVR5cGVOYW1lLCBsYWJlbDogc3RyaW5nfT4oXG4gICAgW1wiZW50aXR5RGVmaW5lZEJ5XCIsIGFwaSwgcGFyYW1ldGVyLCBlbnRpdHlUeXBlLCBpcmksIG9udG9sb2d5SWQsIHVzZUxlZ2FjeV0sXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgb250b2xpc3QgOiBzdHJpbmdbXTtcbiAgICAgICAgbGV0IHJlYWxFbnRpdHlUeXBlIDogRW50aXR5VHlwZU5hbWU7XG4gICAgICAgIGxldCBsYWJlbCA6IHN0cmluZztcbiAgICAgICAgaWYodXNlTGVnYWN5KSB7XG4gICAgICAgICAgICBjb25zdCBlbWJlZGRlZCA9IChhd2FpdCBvbHNBcGkuZ2V0RW50aXR5UmVzcG9uc2UoaXJpLCBlbnRpdHlUeXBlLCB1bmRlZmluZWQsIHBhcmFtZXRlciwgdXNlTGVnYWN5KSlbXCJfZW1iZWRkZWRcIl07XG4gICAgICAgICAgICBvbnRvbGlzdCA9IGVtYmVkZGVkW09iamVjdC5rZXlzKGVtYmVkZGVkKVswXV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKChlbnRpdHlJbk9udG9sb2d5IDogYW55KSA9PiBlbnRpdHlJbk9udG9sb2d5W1wiaXNfZGVmaW5pbmdfb250b2xvZ3lcIl0pXG4gICAgICAgICAgICAgICAgLm1hcCgoZW50aXR5SW5PbnRvbG9neSA6IGFueSkgPT4gZW50aXR5SW5PbnRvbG9neVtcIm9udG9sb2d5X25hbWVcIl0pO1xuICAgICAgICAgICAgcmVhbEVudGl0eVR5cGUgPSBlbnRpdHlUeXBlIHx8IHNpbmd1bGFyaXplVHlwZShPYmplY3Qua2V5cyhlbWJlZGRlZClbMF0pIGFzIEVudGl0eVR5cGVOYW1lO1xuICAgICAgICAgICAgbGFiZWwgPSBlbWJlZGRlZFtPYmplY3Qua2V5cyhlbWJlZGRlZClbMF1dWzBdW1wibGFiZWxcIl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBhd2FpdCBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCB1c2VMZWdhY3kpO1xuICAgICAgICAgICAgb250b2xpc3QgPSBlbnRpdHkuZ2V0RGVmaW5lZEJ5KCkuZmlsdGVyKChvbnRvbG9neSkgPT4gb250b2xvZ3kgIT0gZW50aXR5LmdldE9udG9sb2d5SWQoKSk7XG4gICAgICAgICAgICByZWFsRW50aXR5VHlwZSA9IGVudGl0eVR5cGUgfHwgZW50aXR5LmdldFR5cGUoKSBhcyBFbnRpdHlUeXBlTmFtZTtcbiAgICAgICAgICAgIGxhYmVsID0gZW50aXR5LmdldExhYmVsKCkgfHwgXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBvbnRvbGlzdCA9IG9udG9saXN0LnNvcnQoKTtcbiAgICAgICAgcmV0dXJuIHtvbnRvTGlzdDogb250b2xpc3QsIGVudGl0eVR5cGU6IHJlYWxFbnRpdHlUeXBlLCBsYWJlbDogbGFiZWx9O1xuICAgIH1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiZcbiAgICAgICAgPEVudGl0eURlZmluZWRCeVByZXNlbnRhdGlvbiBvbnRvbGlzdD17ZGF0YS5vbnRvTGlzdH0gZW50aXR5VHlwZT17ZGF0YS5lbnRpdHlUeXBlfSBsYWJlbD17ZGF0YS5sYWJlbH0gaXJpPXtpcml9IG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX0gLz59XG4gICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciAvPn1cbiAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwib250b2xvZ3kgbGlzdFwiKX08L0V1aVRleHQ+fVxuICAgIDwvPlxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlEZWZpbmVkQnkocHJvcHM6IEVudGl0eURlZmluZWRCeVdpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0eURlZmluZWRCeVdpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRW50aXR5RGVmaW5lZEJ5V2lkZ2V0KHByb3BzOiBFbnRpdHlEZWZpbmVkQnlXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8RW50aXR5RGVmaW5lZEJ5V2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgZW50aXR5VHlwZT17cHJvcHMuZW50aXR5VHlwZX1cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyPXtwcm9wcy5wYXJhbWV0ZXJ9XG4gICAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fVxuICAgICAgICAgICAgICAgICAgICBvbk5hdmlnYXRlVG9PbnRvbG9neT17cHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IEVudGl0eURlZmluZWRCeVdpZGdldCwgY3JlYXRlRW50aXR5RGVmaW5lZEJ5IH07XG4iLCAiaW1wb3J0IFJlYWN0LCB7UmVhY3RFbGVtZW50fSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQge1F1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyLCB1c2VRdWVyeX0gZnJvbSBcInJlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQge0V1aUNhcmQsIEV1aUZsZXhJdGVtLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpUHJvdmlkZXIsIEV1aVRleHR9IGZyb20gXCJAZWxhc3RpYy9ldWlcIjtcbmltcG9ydCB7Q2xhc3MsIEVudGl0eSwgSW5kaXZpZHVhbCwgUHJvcGVydHksIFRoaW5nfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtnZXRDbGFzc0V4cHJlc3Npb25KU1gsIGdldEVudGl0eUxpbmtKU1gsIGdldFJlaWZpZWRKU1gsIGdldFNlY3Rpb25MaXN0SlNYfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvU3RydWN0dXJlUmVuZGVyaW5nXCI7XG5pbXBvcnQge2lzQ2xhc3MsIGlzSW5kaXZpZHVhbCwgaXNQcm9wZXJ0eX0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL01vZGVsVHlwZUNoZWNrXCI7XG5pbXBvcnQgUmVpZmllZCBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvUmVpZmllZFwiO1xuaW1wb3J0IHthc0FycmF5LCBjYXBpdGFsaXplLCBnZXRFbnRpdHlUeXBlTmFtZSwgcmFuZG9tU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3V0aWxcIjtcbmltcG9ydCB7RW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHN9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmNvbnN0IERFRkFVTFRfSEFTX1RJVExFID0gdHJ1ZTtcblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIHR5cGUgc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBpbmRpdmlkdWFsXG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldEluZGl2aWR1YWxUeXBlc1NlY3Rpb25KU1goaW5kaXZpZHVhbDogSW5kaXZpZHVhbCwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0eXBlcyA9IGluZGl2aWR1YWwuZ2V0UmRmVHlwZXMoKS5maWx0ZXIoKGVsZW06IHN0cmluZykgPT4gZWxlbSAhPT0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCNOYW1lZEluZGl2aWR1YWxcIiAmJiAhZWxlbS5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1wiKSk7XG5cbiAgICBpZihpbmRpdmlkdWFsLmdldFJkZlR5cGVzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgIDxiPlR5cGU8L2I+XG4gICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCB0eXBlcywgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgIDwvRXVpRmxleEl0ZW0+KTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBzYW1lIGFzIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gaW5kaXZpZHVhbFxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRJbmRpdmlkdWFsU2FtZUFzU2VjdGlvbkpTWChpbmRpdmlkdWFsOiBJbmRpdmlkdWFsLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNhbWVBcyA9IGluZGl2aWR1YWwuZ2V0U2FtZUFzKCk7XG5cbiAgICBpZihzYW1lQXMubGVuZ3RoID4gMCl7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+U2FtZSBBczwvYj5cbiAgICAgICAgICAgICAgICB7Z2V0U2VjdGlvbkxpc3RKU1goaW5kaXZpZHVhbCwgaW5kaXZpZHVhbC5nZXRMaW5rZWRFbnRpdGllcygpLCBzYW1lQXMsIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBkaWZmZXJlbnQgZnJvbSBzZWN0aW9uIEpTWCBlbGVtZW50LlxuICogQHBhcmFtIGluZGl2aWR1YWxcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0SW5kaXZpZHVhbERpZmZlcmVudEZyb21TZWN0aW9uSlNYKGluZGl2aWR1YWw6IEluZGl2aWR1YWwsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZGlmZmVyZW50RnJvbSA9IGluZGl2aWR1YWwuZ2V0RGlmZmVyZW50RnJvbSgpO1xuXG4gICAgaWYoZGlmZmVyZW50RnJvbS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+RGlmZmVyZW50IGZyb208L2I+XG4gICAgICAgICAgICAgICAge2dldFNlY3Rpb25MaXN0SlNYKGluZGl2aWR1YWwsIGluZGl2aWR1YWwuZ2V0TGlua2VkRW50aXRpZXMoKSwgZGlmZmVyZW50RnJvbSwgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgdGhlIGRpc2pvaW50IHdpdGggc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0RGlzam9pbnRXaXRoU2VjdGlvbkpTWChlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZGlzam9pbnRXaXRoID0gZW50aXR5LmdldERpc2pvaW50V2l0aCgpO1xuXG4gICAgaWYoZGlzam9pbnRXaXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5EaXNqb2ludCB3aXRoPC9iPlxuICAgICAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChlbnRpdHksIGVudGl0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBkaXNqb2ludFdpdGgsIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBpbnZlcnNlIG9mIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wcyB0aGUgZW50aXRpZXMnIHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlJbnZlcnNlT2ZTZWN0aW9uSlNYKHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKTogUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpbnZlcnNlT2ZzID0gcHJvcGVydHkuZ2V0SW52ZXJzZU9mKCk7XG5cbiAgICBpZihpbnZlcnNlT2ZzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5JbnZlcnNlIG9mPC9iPlxuICAgICAgICAgICAgICAgIHtnZXRTZWN0aW9uTGlzdEpTWChwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgaW52ZXJzZU9mcywgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9XG4gICAgICAgICAgICA8L0V1aUZsZXhJdGVtPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgb25lIHByb3BlcnR5IGNoYWluIEpTWCBlbGVtZW50LiBJcyB1c2VkIGZvciB7QGxpbmsgZ2V0UHJvcGVydHlDaGFpblNlY3Rpb25KU1h9LlxuICogQHBhcmFtIHByb3BlcnR5Q2hhaW4gdGhlIHByb3BlcnR5IGNoYWluXG4gKiBAcGFyYW0gcHJvcGVydHlcbiAqIEBwYXJhbSBwcm9wcyAgICAgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50W119IHRoZSBjaGFpbnMgSlNYIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHlDaGFpbkpTWChwcm9wZXJ0eUNoYWluOiBhbnlbXSwgcHJvcGVydHk6IFByb3BlcnR5LCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIGFzQXJyYXkocHJvcGVydHlDaGFpbikuc2xpY2UoKS5yZXZlcnNlKCkubWFwKChwcm9wZXJ0eUV4cHIsIGkpID0+IHsgLy8gdXNpbmcgLnNsaWNlKCkgaGVyZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSBhIG11dGF0aW9uIG9mIHByb3BlcnR5Q2hhaW4gd291bGQgdHJpZ2dlciBhIHVzZVF1ZXJ5KClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxzcGFuIGtleT17cHJvcGVydHlFeHByfT5cbiAgICAgICAgICAgICAgICB7Z2V0Q2xhc3NFeHByZXNzaW9uSlNYKHByb3BlcnR5LCBwcm9wZXJ0eS5nZXRMaW5rZWRFbnRpdGllcygpLCBwcm9wZXJ0eUV4cHIsIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfVxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIHtpIDwgYXNBcnJheShwcm9wZXJ0eUNoYWluKS5sZW5ndGggLSAxICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7Zm9udFNpemU6IFwibWVkaXVtXCIsIGNvbG9yOiBcImdyYXlcIn19PiZuYnNwOyYjOTY2NjsmbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBwcm9wZXJ0eSBjaGFpbnMgc2VjdGlvbiBKU1ggZWxlbWVudC5cbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIHByb3BzIHRoZSBlbnRpdGllcycgcHJvcGVydGllc1xuICogQHJldHVybnMge1JlYWN0RWxlbWVudCB8IHVuZGVmaW5lZH0gdGhlIHNlY3Rpb25zJyBKU1ggZWxlbWVudCBvciB1bmRlZmluZWQgaWYgc2VjdGlvbiB3b3VsZCBiZSBlbXB0eVxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUNoYWluU2VjdGlvbkpTWChwcm9wZXJ0eTogUHJvcGVydHksIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcHJvcGVydHlDaGFpbnMgPSBwcm9wZXJ0eS5nZXRQcm9wZXJ0eUNoYWlucygpLm1hcCgocmVpZmllZCA6IFJlaWZpZWQ8YW55PikgPT4gcmVpZmllZC52YWx1ZSk7XG5cbiAgICBjb25zdCBoYXNNdWx0aXBsZUNoYWlucyA9IHByb3BlcnR5Q2hhaW5zLmZpbHRlcigoZWxlbTogYW55KSA9PiBBcnJheS5pc0FycmF5KGVsZW0pKS5sZW5ndGggPiAwO1xuXG4gICAgaWYocHJvcGVydHlDaGFpbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPnshaGFzTXVsdGlwbGVDaGFpbnMgPyBcIlByb3BlcnR5IGNoYWluXCIgOiBcIlByb3BlcnR5IGNoYWluc1wifTwvYj5cbiAgICAgICAgICAgICAgICB7IWhhc011bHRpcGxlQ2hhaW5zID9cbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFByb3BlcnR5Q2hhaW5KU1gocHJvcGVydHlDaGFpbnMsIHByb3BlcnR5LCBwcm9wcyl9PC9wPlxuICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5Q2hhaW5zLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRQcm9wZXJ0eUNoYWluSlNYKGl0ZW0sIHByb3BlcnR5LCBwcm9wcyl9PC9saT4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9FdWlGbGV4SXRlbT5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIHRoZSBlcXVpdmFsZW50IHRvIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldEVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb25KU1goZW50aXR5OiBQcm9wZXJ0eSB8IENsYXNzLCBwcm9wczogRW50aXR5UmVsYXRpb25zV2lkZ2V0UHJvcHMpOiBSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVxdWl2YWxlbnRzID0gZW50aXR5LmdldEVxdWl2YWxlbnRzKCk7XG5cbiAgICBpZihlcXVpdmFsZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RXVpRmxleEl0ZW0+XG4gICAgICAgICAgICAgICAgPGI+RXF1aXZhbGVudCB0bzwvYj5cbiAgICAgICAgICAgICAgICB7ZXF1aXZhbGVudHMubGVuZ3RoID09PSAxID9cbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBlcXVpdmFsZW50c1swXSwgcHJvcHMuc2hvd0JhZGdlcywge29uTmF2aWdhdGVUb0VudGl0eTogcHJvcHMub25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9PbnRvbG9neTogcHJvcHMub25OYXZpZ2F0ZVRvT250b2xvZ3ksIG9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZTogcHJvcHMub25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlfSl9PC9wPlxuICAgICAgICAgICAgICAgICAgICApIDpcbiAgICAgICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWl2YWxlbnRzLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9ID57Z2V0UmVpZmllZEpTWChlbnRpdHksIGl0ZW0sIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgc3ViZW50aXR5IG9mIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldFN1YkVudGl0eU9mU2VjdGlvbkpTWChlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3VwZXJFbnRpdGllcyA9IGVudGl0eS5nZXRTdXBlckVudGl0aWVzKCk7XG5cbiAgICBpZihzdXBlckVudGl0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICA8Yj5TdWJ7ZW50aXR5LmdldFR5cGUoKX0gb2Y8L2I+XG4gICAgICAgICAgICAgICAge3N1cGVyRW50aXRpZXMubGVuZ3RoID09PSAxID9cbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFJlaWZpZWRKU1goZW50aXR5LCBzdXBlckVudGl0aWVzWzBdLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L3A+XG4gICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJFbnRpdGllcy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxsaSBrZXk9e3JhbmRvbVN0cmluZygpfT57Z2V0UmVpZmllZEpTWChlbnRpdHksIGl0ZW0sIHByb3BzLnNob3dCYWRnZXMsIHtvbk5hdmlnYXRlVG9FbnRpdHk6IHByb3BzLm9uTmF2aWdhdGVUb0VudGl0eSwgb25OYXZpZ2F0ZVRvT250b2xvZ3k6IHByb3BzLm9uTmF2aWdhdGVUb09udG9sb2d5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGU6IHByb3BzLm9uTmF2aWdhdGVUb0Rpc2FtYmlndWF0ZX0pfTwvbGk+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgcmVsYXRlZCBmcm9tIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gZW50aXR5XG4gKiBAcGFyYW0gcHJvcHMgdGhlIGVudGl0aWVzJyBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7UmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkfSB0aGUgc2VjdGlvbnMnIEpTWCBlbGVtZW50IG9yIHVuZGVmaW5lZCBpZiBzZWN0aW9uIHdvdWxkIGJlIGVtcHR5XG4gKi9cbmZ1bmN0aW9uIGdldEVudGl0eVJlbGF0ZWRGcm9tU2VjdGlvbkpTWChlbnRpdHk6IFByb3BlcnR5IHwgQ2xhc3MsIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVsYXRlZEZyb21zID0gZW50aXR5LmdldFJlbGF0ZWRGcm9tKCk7XG4gICAgY29uc3QgcHJlZGljYXRlczogc3RyaW5nW10gPSBBcnJheS5mcm9tKG5ldyBTZXQocmVsYXRlZEZyb21zLm1hcCgoZWxlbTogYW55KSA9PiB7cmV0dXJuIGVsZW0udmFsdWVbXCJwcm9wZXJ0eVwiXX0pKSk7XG5cbiAgICBpZihyZWxhdGVkRnJvbXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEV1aUZsZXhJdGVtPlxuICAgICAgICAgICAgICAgIDxiPlJlbGF0ZWQgZnJvbTwvYj5cbiAgICAgICAgICAgICAgICB7cHJlZGljYXRlcy5tYXAoKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKS5nZXRMYWJlbEZvcklyaShwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtwLnRvU3RyaW5nKCkgKyByYW5kb21TdHJpbmcoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgc3R5bGU9e3tjb2xvcjogXCJibGFja1wifX0gaHJlZj17cH0+PGk+e2xhYmVsIHx8IHB9PC9pPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgc3R5bGU9e3ttYXJnaW5Cb3R0b206IDB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3JlbGF0ZWRGcm9tcy5maWx0ZXIoKGVsZW06IGFueSkgPT4ge3JldHVybiBlbGVtLnZhbHVlW1wicHJvcGVydHlcIl0gPT09IHB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoZWxlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9PntnZXRDbGFzc0V4cHJlc3Npb25KU1goZW50aXR5LCBlbnRpdHkuZ2V0TGlua2VkRW50aXRpZXMoKSwgZWxlbS52YWx1ZVtcInZhbHVlXCJdLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX08L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PC9wPiB7LyogV29ya3MgYXMgZW1wdHkgc3BhY2UgbGVmdCB0byBuZXh0IHNlY3Rpb24gKi99XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKTt9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgcmV0dXJucyB0aGUgY2xhc3MgaW5zdGFuY2VzIHNlY3Rpb24gSlNYIGVsZW1lbnQuXG4gKiBAcGFyYW0gdGVybVxuICogQHBhcmFtIGluc3RhbmNlcyBhbiBhcnJheSBvZiB0aGUgY2xhc3NlcycgaW5zdGFuY2VzXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEByZXR1cm5zIHtSZWFjdEVsZW1lbnQgfCB1bmRlZmluZWR9IHRoZSBzZWN0aW9ucycgSlNYIGVsZW1lbnQgb3IgdW5kZWZpbmVkIGlmIHNlY3Rpb24gd291bGQgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gZ2V0Q2xhc3NJbnN0YW5jZXNTZWN0aW9uSlNYKHRlcm06IENsYXNzLCBpbnN0YW5jZXM6IFRoaW5nW10sIHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcyk6IFJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYoaW5zdGFuY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFdWlGbGV4SXRlbT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIDxiPkluc3RhbmNlczwvYj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMubWFwKChpbnN0YW5jZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGxpIGtleT17cmFuZG9tU3RyaW5nKCl9ID5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Z2V0RW50aXR5TGlua0pTWCh0ZXJtLCB0ZXJtLmdldExpbmtlZEVudGl0aWVzKCksIGluc3RhbmNlLmdldElyaSgpLCBwcm9wcy5zaG93QmFkZ2VzLCB7b25OYXZpZ2F0ZVRvRW50aXR5OiBwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHksIG9uTmF2aWdhdGVUb09udG9sb2d5OiBwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neSwgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlOiBwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvRXVpRmxleEl0ZW0+XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBFbnRpdHlSZWxhdGlvbnNXaWRnZXQocHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHsgYXBpLCBpcmksIG9udG9sb2d5SWQsIGhhc1RpdGxlID0gREVGQVVMVF9IQVNfVElUTEUsIHNob3dCYWRnZXMsIGVudGl0eVR5cGUsIHBhcmFtZXRlciwgb25OYXZpZ2F0ZVRvRW50aXR5LCBvbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGUsIG9uTmF2aWdhdGVUb09udG9sb2d5LCAuLi5yZXN0IH0gPSBwcm9wcztcblxuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZmV0Y2ggYW4gZW50aXRpZXMnIGRhdGEgdG8gYmUgc2hvd24gaW4gZGlmZmVyZW50IHNlY3Rpb25zXG4gICAgICovXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBlbnRpdHksXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nRW50aXR5UmVsYXRpb24sXG4gICAgICAgIGlzU3VjY2VzczogaXNTdWNjZXNzRW50aXR5UmVsYXRpb24sXG4gICAgICAgIGlzRXJyb3I6IGlzRXJyb3JFbnRpdHlSZWxhdGlvbixcbiAgICB9ID0gdXNlUXVlcnkoXG4gICAgICAgIFtcbiAgICAgICAgICAgIFwiZW50aXR5SnNvblwiLFxuICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgaXJpLFxuICAgICAgICAgICAgb250b2xvZ3lJZCxcbiAgICAgICAgICAgIGVudGl0eVR5cGUsXG4gICAgICAgICAgICBwYXJhbWV0ZXIsXG4gICAgICAgICAgICBzaG93QmFkZ2VzXG4gICAgICAgIF0sXG4gICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvbHNBcGkuZ2V0RW50aXR5T2JqZWN0KGlyaSwgZW50aXR5VHlwZSwgb250b2xvZ3lJZCwgcGFyYW1ldGVyLCAgZmFsc2UpOyAvLyBhbHdheXMgdXNlIHYyLyBBUElcbiAgICAgICAgfSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byBmZXRjaCBhIGNsYXNzZXMgaW5zdGFuY2VzIHRvIGJlIHNob3duIGluIGNsYXNzIGluc3RhbmNlcyBzZWN0aW9uXG4gICAgICovXG4gICAgY29uc3Qge1xuICAgICAgICBkYXRhOiBpbnN0YW5jZXMsXG4gICAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nSW5zdGFuY2VzLFxuICAgICAgICBpc1N1Y2Nlc3M6IGlzU3VjY2Vzc0luc3RhbmNlcyxcbiAgICB9ID0gdXNlUXVlcnkoe1xuICAgICAgICBxdWVyeUtleTogW1xuICAgICAgICAgICAgXCJpbnN0YW5jZXNcIixcbiAgICAgICAgICAgIGVudGl0eVxuICAgICAgICBdLFxuICAgICAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKGVudGl0eSAmJiBpc0NsYXNzKGVudGl0eSkgJiYgZW50aXR5Lmhhc0RpcmVjdENoaWxkcmVuKCkpID8gb2xzQXBpLmdldENsYXNzSW5zdGFuY2VzKGVudGl0eS5nZXRJcmkoKSwgZW50aXR5LmdldE9udG9sb2d5SWQoKSkgOiBbXTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5hYmxlZDogISFlbnRpdHlcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHJlbmRlclNlY3Rpb25zKGVudGl0eTogRW50aXR5LCBpbnN0YW5jZXM6IEluZGl2aWR1YWxbXSkgOiBSZWFjdEVsZW1lbnQge1xuICAgICAgICBjb25zdCBzZWN0aW9uTGlzdCA6IFJlYWN0RWxlbWVudFtdID0gW107XG5cbiAgICAgICAgaWYoaXNJbmRpdmlkdWFsKGVudGl0eSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGl2aWR1YWxUeXBlc1NlY3Rpb24gPSBnZXRJbmRpdmlkdWFsVHlwZXNTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYoaW5kaXZpZHVhbFR5cGVzU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goaW5kaXZpZHVhbFR5cGVzU2VjdGlvbik7XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGl2aWR1YWxTYW1lQXNTZWN0aW9uID0gZ2V0SW5kaXZpZHVhbFNhbWVBc1NlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihpbmRpdmlkdWFsU2FtZUFzU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goaW5kaXZpZHVhbFNhbWVBc1NlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBpbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb24gPSBnZXRJbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihpbmRpdmlkdWFsRGlmZmVyZW50RnJvbVNlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKGluZGl2aWR1YWxEaWZmZXJlbnRGcm9tU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNQcm9wZXJ0eShlbnRpdHkpIHx8IGlzQ2xhc3MoZW50aXR5KSkge1xuICAgICAgICAgICAgY29uc3QgZGlzam9pbnRXaXRoU2VjdGlvbiA9IGdldERpc2pvaW50V2l0aFNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihkaXNqb2ludFdpdGhTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChkaXNqb2ludFdpdGhTZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZihpc1Byb3BlcnR5KGVudGl0eSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbiA9IGdldFByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKHByb3BlcnR5SW52ZXJzZU9mU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2gocHJvcGVydHlJbnZlcnNlT2ZTZWN0aW9uKTtcblxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlDaGFpblNlY3Rpb24gPSBnZXRQcm9wZXJ0eUNoYWluU2VjdGlvbkpTWChlbnRpdHksIHByb3BzKTtcbiAgICAgICAgICAgIGlmKHByb3BlcnR5Q2hhaW5TZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChwcm9wZXJ0eUNoYWluU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNQcm9wZXJ0eShlbnRpdHkpIHx8IGlzQ2xhc3MoZW50aXR5KSkge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5RXF1aXZhbGVudFRvU2VjdGlvbiA9IGdldEVudGl0eUVxdWl2YWxlbnRUb1NlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihlbnRpdHlFcXVpdmFsZW50VG9TZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChlbnRpdHlFcXVpdmFsZW50VG9TZWN0aW9uKTtcblxuICAgICAgICAgICAgY29uc3Qgc3ViRW50aXR5T2ZTZWN0aW9uID0gZ2V0U3ViRW50aXR5T2ZTZWN0aW9uSlNYKGVudGl0eSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYoc3ViRW50aXR5T2ZTZWN0aW9uICE9IHVuZGVmaW5lZCkgc2VjdGlvbkxpc3QucHVzaChzdWJFbnRpdHlPZlNlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBlbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb24gPSBnZXRFbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb25KU1goZW50aXR5LCBwcm9wcyk7XG4gICAgICAgICAgICBpZihlbnRpdHlSZWxhdGVkRnJvbVNlY3Rpb24gIT0gdW5kZWZpbmVkKSBzZWN0aW9uTGlzdC5wdXNoKGVudGl0eVJlbGF0ZWRGcm9tU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYoaXNDbGFzcyhlbnRpdHkpKSB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc0luc3RhbmNlc1NlY3Rpb24gPSBnZXRDbGFzc0luc3RhbmNlc1NlY3Rpb25KU1goZW50aXR5LCBpbnN0YW5jZXMsIHByb3BzKTtcbiAgICAgICAgICAgIGlmKGNsYXNzSW5zdGFuY2VzU2VjdGlvbiAhPSB1bmRlZmluZWQpIHNlY3Rpb25MaXN0LnB1c2goY2xhc3NJbnN0YW5jZXNTZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHNlY3Rpb25MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEV1aVRleHQgey4uLnJlc3R9PlxuICAgICAgICAgICAgICAgICAgICB7c2VjdGlvbkxpc3R9XG4gICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybihcbiAgICAgICAgICAgICAgICA8RXVpVGV4dCB7Li4ucmVzdH0+XG4gICAgICAgICAgICAgICAgICAgIE5vIHJlbGF0aW9ucyBhdmFpbGFibGUuXG4gICAgICAgICAgICAgICAgPC9FdWlUZXh0PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8RXVpQ2FyZFxuICAgICAgICAgICAgICAgIHRpdGxlPXtoYXNUaXRsZSA/IChlbnRpdHlUeXBlID8gY2FwaXRhbGl6ZShnZXRFbnRpdHlUeXBlTmFtZShlbnRpdHlUeXBlKSkgOiAoaXNTdWNjZXNzRW50aXR5UmVsYXRpb24gJiYgZW50aXR5KSA/IGNhcGl0YWxpemUoZW50aXR5LmdldFR5cGUoKSkgOiBcIlwiKSArIFwiIFJlbGF0aW9uc1wiIDogXCJcIn1cbiAgICAgICAgICAgICAgICBsYXlvdXQ9XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7KGlzTG9hZGluZ0VudGl0eVJlbGF0aW9uIHx8IGlzTG9hZGluZ0luc3RhbmNlcykgJiYgPEV1aUxvYWRpbmdTcGlubmVyIHNpemU9eydzJ30vPn1cbiAgICAgICAgICAgICAgICB7aXNFcnJvckVudGl0eVJlbGF0aW9uICYmIDxFdWlUZXh0PlJlcXVlc3RlZCByZXNvdXJjZSBub3QgYXZhaWxhYmxlPC9FdWlUZXh0Pn1cbiAgICAgICAgICAgICAgICB7KGlzU3VjY2Vzc0VudGl0eVJlbGF0aW9uICYmIGlzU3VjY2Vzc0luc3RhbmNlcykgJiYgZW50aXR5ICE9PSB1bmRlZmluZWQgJiYgaW5zdGFuY2VzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyU2VjdGlvbnMoZW50aXR5LCBpbnN0YW5jZXMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9FdWlDYXJkPlxuICAgICAgICA8Lz5cbiAgICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbnRpdHlSZWxhdGlvbnMocHJvcHM6IEVudGl0eVJlbGF0aW9uc1dpZGdldFByb3BzLCBjb250YWluZXI6IEVsZW1lbnQsIGNhbGxiYWNrPzogKCk9PnZvaWQpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZEVudGl0eVJlbGF0aW9uc1dpZGdldChwcm9wcyksIGNvbnRhaW5lciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBXcmFwcGVkRW50aXR5UmVsYXRpb25zV2lkZ2V0KHByb3BzOiBFbnRpdHlSZWxhdGlvbnNXaWRnZXRQcm9wcykge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgICAgICAgICA8RW50aXR5UmVsYXRpb25zV2lkZ2V0XG4gICAgICAgICAgICAgICAgICAgIGFwaT17cHJvcHMuYXBpfVxuICAgICAgICAgICAgICAgICAgICBpcmk9e3Byb3BzLmlyaX1cbiAgICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICAgICAgICAgICAgaGFzVGl0bGU9e3Byb3BzLmhhc1RpdGxlfVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlPXtwcm9wcy5lbnRpdHlUeXBlfVxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXI9e3Byb3BzLnBhcmFtZXRlcn1cbiAgICAgICAgICAgICAgICAgICAgc2hvd0JhZGdlcz17cHJvcHMuc2hvd0JhZGdlc31cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRW50aXR5PXtwcm9wcy5vbk5hdmlnYXRlVG9FbnRpdHl9XG4gICAgICAgICAgICAgICAgICAgIG9uTmF2aWdhdGVUb09udG9sb2d5PXtwcm9wcy5vbk5hdmlnYXRlVG9PbnRvbG9neX1cbiAgICAgICAgICAgICAgICAgICAgb25OYXZpZ2F0ZVRvRGlzYW1iaWd1YXRlPXtwcm9wcy5vbk5hdmlnYXRlVG9EaXNhbWJpZ3VhdGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgICAgPC9FdWlQcm92aWRlcj5cbiAgICApXG59XG5cbmV4cG9ydCB7IGNyZWF0ZUVudGl0eVJlbGF0aW9ucywgRW50aXR5UmVsYXRpb25zV2lkZ2V0IH07IiwgImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwL3R5cGVzXCI7XG5pbXBvcnQgeyBPbHNBcGkgfSBmcm9tIFwiLi4vLi4vLi4vYXBpL09sc0FwaVwiO1xuaW1wb3J0IHsgVGhpbmcgfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgdXNlUXVlcnksIFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7RXVpTG9hZGluZ1NwaW5uZXIsIEV1aVByb3ZpZGVyLCBFdWlUZXh0LCBFdWlJbWFnZX0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgZ2V0RXJyb3JNZXNzYWdlVG9EaXNwbGF5IH0gZnJvbSBcIi4uLy4uLy4uL2FwcC91dGlsXCI7XG5cblxuZnVuY3Rpb24gVGVybURlcGljdGlvbldpZGdldChwcm9wczpUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMpe1xuICAgIGNvbnN0IHthcGksIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5fSA9IHByb3BzO1xuICAgIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YSxcbiAgICAgICAgaXNMb2FkaW5nLFxuICAgICAgICBpc1N1Y2Nlc3MsXG4gICAgICAgIGlzRXJyb3IsXG4gICAgICAgIGVycm9yXG4gICAgICB9ID0gdXNlUXVlcnk8VGhpbmc+KFxuICAgICAgICBbXCJ0ZXJtRGVwaWN0aW9uXCIsIGFwaSwgaXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ldLFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUaGluZ09iamVjdChpcmksIFwiY2xhc3NcIiwgb250b2xvZ3lJZCwgXCJcIiwgdXNlTGVnYWN5KTsgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBcbiAgICBcbiAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwic1wiIC8+fVxuICAgICAgICB7aXNTdWNjZXNzICYmIGRhdGEgJiYgZGF0YS5nZXREZXBpY3Rpb25VcmwoKSAmJlxuICAgICAgICAgICAgICA8PiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxFdWlJbWFnZVxuICAgICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgICBoYXNTaGFkb3dcbiAgICAgICAgICAgICAgICBhbGxvd0Z1bGxTY3JlZW4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYWx0PXtkYXRhLmdldERlcGljdGlvblVybCgpfVxuICAgICAgICAgICAgICAgIHNyYz17ZGF0YS5nZXREZXBpY3Rpb25VcmwoKX0gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxwPjxzbWFsbD5DbGljayB0byBleHBhbmQuPC9zbWFsbD48L3A+XG4gICAgICAgICAgICAgIDwvPiAgICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICAgIHtpc0Vycm9yICYmIDxFdWlUZXh0PntnZXRFcnJvck1lc3NhZ2VUb0Rpc3BsYXkoZXJyb3IsIFwiZGVwaWN0aW9uXCIpfTwvRXVpVGV4dD59XG4gICAgICAgIDwvPlxuICAgICk7XG59XG5cblxuZnVuY3Rpb24gY3JlYXRlRGVwaWN0aW9uKHByb3BzOiBUZXJtRGVwaWN0aW9uV2lkZ2V0UHJvcHMsIGNvbnRhaW5lcjogRWxlbWVudCwgY2FsbGJhY2s/OiAoKT0+dm9pZCkge1xuICBSZWFjdERPTS5yZW5kZXIoV3JhcHBlZFRlcm1EZXBpY3Rpb25XaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZFRlcm1EZXBpY3Rpb25XaWRnZXQocHJvcHM6IFRlcm1EZXBpY3Rpb25XaWRnZXRQcm9wcykge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gKFxuICAgICAgPEV1aVByb3ZpZGVyIGNvbG9yTW9kZT1cImxpZ2h0XCI+XG4gICAgICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgICAgICAgIDxUZXJtRGVwaWN0aW9uV2lkZ2V0XG4gICAgICAgICAgICAgICAgICBhcGk9e3Byb3BzLmFwaX0gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIGlyaT17cHJvcHMuaXJpfVxuICAgICAgICAgICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH0gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIHVzZUxlZ2FjeT17cHJvcHMudXNlTGVnYWN5fSAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgICAgIDwvRXVpUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IHtjcmVhdGVEZXBpY3Rpb24sIFRlcm1EZXBpY3Rpb25XaWRnZXR9OyIsICJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyBHcmFwaFZpZXdXaWRnZXRQcm9wcyB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IE9sc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5pbXBvcnQgeyB1c2VRdWVyeSwgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IEV1aVByb3ZpZGVyLCBFdWlMb2FkaW5nU3Bpbm5lciwgRXVpVGV4dCwgRXVpQnV0dG9uLCBFdWlJY29uLCBFdWlQYW5lbCxFdWlTd2l0Y2gsIEV1aVBvcG92ZXIsIEV1aUJ1dHRvbkVtcHR5IH0gZnJvbSBcIkBlbGFzdGljL2V1aVwiO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJ3Zpcy1uZXR3b3JrJztcbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tICd2aXMtZGF0YSc7XG5pbXBvcnQgeyBPbHNHcmFwaE5vZGUsIE9sc0dyYXBoRWRnZSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdHlwZXNcIjtcbmltcG9ydCB7IGdldEVycm9yTWVzc2FnZVRvRGlzcGxheSB9IGZyb20gXCIuLi8uLi8uLi9hcHAvdXRpbFwiO1xuaW1wb3J0IHsgSlNUcmVlTm9kZSB9IGZyb20gXCIuLi8uLi8uLi9hcGkvT2xzQXBpXCI7XG5cblxuXG5cbmZ1bmN0aW9uIEdyYXBoVmlld1dpZGdldChwcm9wczogR3JhcGhWaWV3V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgeyBhcGksIGlyaSwgb250b2xvZ3lJZCwgdXNlTGVnYWN5LCByb290V2FsayB9ID0gcHJvcHM7XG5cbiAgY29uc3QgW3NlbGVjdGVkSXJpLCBzZXRTZWxlY3RlZElyaV0gPSB1c2VTdGF0ZShpcmkpO1xuICBjb25zdCBbZmlyc3RMb2FkLCBzZXRGaXJzdExvYWRdID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtkYmNsaWNrZWQsIHNldERiY2xpY2tlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtyb290V2Fsa0lzU2VsZWN0ZWQsIHNldFJvb3RXYWxrSXNTZWxlY3RlZF0gPSB1c2VTdGF0ZShyb290V2FsayA/IHJvb3RXYWxrIDogZmFsc2UpO1xuICBjb25zdCBbaXNQb3BvdmVyT3Blbiwgc2V0SXNQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIFxuICAvLyBuZWVkZWQgZm9yIHVzZVF1ZXJ5LiB3aXRob3V0IGl0IHRoZSBncmFwaCB3b24ndCBnZXQgdXBkYXRlZCBvbiBzd2l0Y2hpbmcgYmVyd2VlbiByb290V2Fsaz10cnVlIGFuZCBmYWxzZS5cbiAgY29uc3QgW2NvdW50ZXIsIHNldENvdW50ZXJdID0gdXNlU3RhdGUoMCk7IFxuXG4gIGNvbnN0IG9sc0FwaSA9IG5ldyBPbHNBcGkoYXBpKTtcblxuICBjb25zdCB7XG4gICAgZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNFcnJvcixcbiAgICBlcnJvcixcbiAgfSA9IHVzZVF1ZXJ5KFxuICAgIFtcInRlcm1HcmFwaFwiLCBhcGksIHNlbGVjdGVkSXJpLCBvbnRvbG9neUlkLCB1c2VMZWdhY3ksIHJvb3RXYWxrSXNTZWxlY3RlZCwgZGJjbGlja2VkLGNvdW50ZXJdLFxuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChyb290V2Fsa0lzU2VsZWN0ZWQgJiYgZmlyc3RMb2FkKSB7XG4gICAgICAgIC8vIG9ubHkgdXNlIHRoaXMgY2FsbCBvbiBsb2FkLiBEb3VibGUgY2tpY2tpbmcgb24gYSBub2RlIHNob3VsZCBjYWxsIHRoZSBub3JtYWwgZ2V0VGVybVJlbGF0aW9ucyBmdW5jdGlvbi5cbiAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUZXJtVHJlZSh7b250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogaXJpfSwge3ZpZXdNb2RlOiBcIkFsbFwiLCBzaWJsaW5nczogZmFsc2V9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgICB9ZWxzZSBpZihmaXJzdExvYWQgfHwgZGJjbGlja2VkKXtcbiAgICAgICAgcmV0dXJuIG9sc0FwaS5nZXRUZXJtUmVsYXRpb25zKHsgb250b2xvZ3lJZDogb250b2xvZ3lJZCwgdGVybUlyaTogc2VsZWN0ZWRJcmkgfSk7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG5cbiAgY29uc3Qgbm9kZXMgPSB1c2VSZWYobmV3IERhdGFTZXQoW10pKTtcbiAgY29uc3QgZWRnZXMgPSB1c2VSZWYobmV3IERhdGFTZXQoW10pKTtcbiAgY29uc3QgZ3JhcGhOZXR3b3JrID0gdXNlUmVmKHt9KTtcbiAgY29uc3QgY29udGFpbmVyID0gdXNlUmVmKG51bGwpO1xuXG4gIGNvbnN0IGdyYXBoTmV0d29ya0NvbmZpZyA9IHtcbiAgICAvKipcbiAgICAgKiBmb3IgbW9yZSBvcHRpb25zIGhhdmUgYSBsb29rIGF0OiBodHRwczovL3Zpc2pzLmdpdGh1Yi5pby92aXMtbmV0d29yay9kb2NzL25ldHdvcmsvI29wdGlvbnNcbiAgICAgKi9cbiAgICBhdXRvUmVzaXplOiB0cnVlLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgbG9jYWxlOiAnZW4nLFxuICAgIGxheW91dDoge1xuICAgICAgcmFuZG9tU2VlZDogMSxcbiAgICAgIGltcHJvdmVkTGF5b3V0OiB0cnVlLFxuICAgICAgY2x1c3RlclRocmVzaG9sZDogMTUwLFxuICAgIH0sXG4gICAgcGh5c2ljczoge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGJhcm5lc0h1dDoge1xuICAgICAgICBncmF2aXRhdGlvbmFsQ29uc3RhbnQ6IC0yMDAwMCxcbiAgICAgICAgY2VudHJhbEdyYXZpdHk6IDAuMyxcbiAgICAgICAgc3ByaW5nTGVuZ3RoOiAxMCxcbiAgICAgICAgc3ByaW5nQ29uc3RhbnQ6IDAuMDQsXG4gICAgICAgIGRhbXBpbmc6IDAuMDksXG4gICAgICAgIGF2b2lkT3ZlcmxhcDogMCxcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cblxuICBjbGFzcyBHcmFwaE5vZGUge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGxhYmVsPzogc3RyaW5nO1xuICAgIGNvbG9yOiB7XG4gICAgICBiYWNrZ3JvdW5kOiBzdHJpbmc7XG4gICAgICBoaWdobGlnaHQ6IHtcbiAgICAgICAgYm9yZGVyOiBzdHJpbmc7XG4gICAgICAgIGJhY2tncm91bmQ6IHN0cmluZztcbiAgICAgIH07XG4gICAgfTtcbiAgICBzaGFwZTogc3RyaW5nO1xuICAgIGZvbnQ6IHtcbiAgICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHsgbm9kZSB9OiBPbHNHcmFwaE5vZGUpIHtcbiAgICAgIC8qKlxuICAgICAgICogZm9yIG1vcmUgb3B0aW9ucyBoYXZlIGEgbG9vayBhdDogaHR0cHM6Ly92aXNqcy5naXRodWIuaW8vdmlzLW5ldHdvcmsvZG9jcy9uZXR3b3JrL25vZGVzLmh0bWxcbiAgICAgICAqL1xuICAgICAgdGhpcy5pZCA9IG5vZGVbJ2lyaSddO1xuICAgICAgdGhpcy5sYWJlbCA9IG5vZGVbJ2xhYmVsJ107XG4gICAgICB0aGlzLmNvbG9yID0ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAnIzQ1NTQ2OScsXG4gICAgICAgIGhpZ2hsaWdodDoge1xuICAgICAgICAgIGJvcmRlcjogJyM0MDQwNDAnLFxuICAgICAgICAgIGJhY2tncm91bmQ6ICcjNDA0MDQwJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5zaGFwZSA9ICdib3gnO1xuICAgICAgdGhpcy5mb250ID0ge1xuICAgICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgIH07XG5cbiAgICB9XG4gIH1cblxuICBjbGFzcyBHcmFwaEVkZ2Uge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGZyb20/OiBzdHJpbmc7XG4gICAgdG8/OiBzdHJpbmc7XG4gICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgYXJyb3dzPzoge1xuICAgICAgdG8/OiBib29sZWFuO1xuICAgIH07XG4gICAgd2lkdGg/OiBudW1iZXI7XG4gICAgY29sb3I/OiB7XG4gICAgICBjb2xvcj86IHN0cmluZztcbiAgICAgIGhpZ2hsaWdodD86IHN0cmluZztcbiAgICB9O1xuICAgIGZvbnQ/OiB7XG4gICAgICBzaXplPzogbnVtYmVyO1xuICAgIH07XG4gICAgZGFzaGVzPzogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHsgZWRnZSB9OiBPbHNHcmFwaEVkZ2UpIHtcbiAgICAgIGlmIChlZGdlWydzb3VyY2UnXSAmJiBlZGdlWyd0YXJnZXQnXSAmJiBlZGdlWyd1cmknXSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogZm9yIG1vcmUgb3B0aW9ucyBoYXZlIGEgbG9vayBhdDogaHR0cHM6Ly92aXNqcy5naXRodWIuaW8vdmlzLW5ldHdvcmsvZG9jcy9uZXR3b3JrL2VkZ2VzLmh0bWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaWQgPSBlZGdlWydzb3VyY2UnXSArIGVkZ2VbJ3RhcmdldCddICsgXCImdXJpPVwiICsgZWRnZVsndXJpJ107XG4gICAgICAgIHRoaXMuZnJvbSA9IGVkZ2VbJ3NvdXJjZSddO1xuICAgICAgICB0aGlzLnRvID0gZWRnZVsndGFyZ2V0J107XG4gICAgICAgIHRoaXMubGFiZWwgPSBlZGdlWydsYWJlbCddO1xuICAgICAgICB0aGlzLmFycm93cyA9IHsgdG86IHRydWUgfTtcbiAgICAgICAgdGhpcy53aWR0aCA9IDI7XG4gICAgICAgIHRoaXMuY29sb3IgPSB7XG4gICAgICAgICAgY29sb3I6ICdncmF5JyxcbiAgICAgICAgICBoaWdobGlnaHQ6ICcjMDA2MTdDJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZvbnQgPSB7XG4gICAgICAgICAgc2l6ZTogMTZcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG5cbiAgZnVuY3Rpb24gY29udmVydFRvT2xzR3JhcGhGb3JtYXQobGlzdE9mSnNUcmVlTm9kZXM6IEFycmF5PEpTVHJlZU5vZGU+KSB7XG4gICAgLy8gdXNlZCBmb3IgY29udmVydGluZyB0aGUgbGlzdCBvZiBhbmNlc3RvcnMgdG8gdGhlIG9scyBhcGkgZ3JhcGggZW5kcG9pbnRzIGZvcm1hdC4gdG8gYmUgY29uc3VtZWQgYnkgR3JhcGhOb2RlIGFuZCBHcmFwaEVkZ2UgY2xhc3NlcyBjb25zdHJ1Y3Rvci5cbiAgICAvLyBjdXJyZW50bHkgdXNlZCBpbiBzaG93aW5nIGFuY2VzdG9ycy4gRXF1aXZhbGVudCB0byBpcy1hIHJlbGF0aW9uLlxuICAgIGxldCBkYXRhOiB7IG5vZGVzOiBhbnlbXTsgZWRnZXM6IGFueVtdIH0gPSB7IFwibm9kZXNcIjogW10sIFwiZWRnZXNcIjogW10gfTtcbiAgICBsaXN0T2ZKc1RyZWVOb2Rlcy5tYXAoKHRyZWVOb2RlOiBKU1RyZWVOb2RlKSA9PiB7XG4gICAgICBpZighZGF0YS5ub2Rlcy5maW5kKChvYmopID0+IG9iai5pcmkgPT09IHRyZWVOb2RlLmlyaSkpe1xuICAgICAgICBsZXQgbm9kZSA9IHsgXCJpcmlcIjogdHJlZU5vZGUuaXJpLCBcImxhYmVsXCI6IHRyZWVOb2RlLnRleHQgfTtcbiAgICAgICAgZGF0YS5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgICAgbGV0IHBhcmVudE5vZGUgPSBsaXN0T2ZKc1RyZWVOb2Rlcy5maW5kKChvYmo6SlNUcmVlTm9kZSkgPT4gb2JqLmlkID09PSB0cmVlTm9kZS5wYXJlbnQpO1xuICAgICAgaWYgKHBhcmVudE5vZGUpeyAgICAgICAgXG4gICAgICAgIC8vIHBhcmVudCBkb2VzIG5vdCBleGlzdHMgLS0+ICcjJyBpZCB0aGF0IGluZGljYXRlcyBhIG5vZGUgaXMgYSByb290LlxuICAgICAgICBsZXQgZWRnZSA9IHsgXCJzb3VyY2VcIjogdHJlZU5vZGUuaXJpLCBcInRhcmdldFwiOiBwYXJlbnROb2RlLmlyaSwgXCJsYWJlbFwiOiBcInN1YkNsYXNzT2ZcIiwgXCJ1cmlcIjogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjc3ViQ2xhc3NPZlwiIH07XG4gICAgICAgIGlmKCFkYXRhLmVkZ2VzLmZpbmQoKG9iaikgPT4gb2JqLnNvdXJjZSA9PT0gZWRnZS5zb3VyY2UgJiYgb2JqLnRhcmdldCA9PT0gZWRnZS50YXJnZXQpKXtcbiAgICAgICAgICBkYXRhLmVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGlmIChkYXRhICYmIChmaXJzdExvYWQgfHwgZGJjbGlja2VkKSkge1xuICAgIGxldCBnRGF0YSA9IGRhdGE7XG4gICAgaWYgKHJvb3RXYWxrSXNTZWxlY3RlZCAmJiBmaXJzdExvYWQpIHtcbiAgICAgIGdEYXRhID0gY29udmVydFRvT2xzR3JhcGhGb3JtYXQoZGF0YSk7XG4gICAgfVxuICAgIGZvciAobGV0IG5vZGUgb2YgZ0RhdGFbJ25vZGVzJ10pIHtcbiAgICAgIGxldCBnTm9kZSA9IG5ldyBHcmFwaE5vZGUoeyBub2RlOiBub2RlIH0pO1xuICAgICAgLy9AdHMtaWdub3JlICAgICAgICAgICAgICAgIFxuICAgICAgaWYgKCFub2Rlcy5jdXJyZW50LmdldChnTm9kZS5pZCkpIHtcbiAgICAgICAgaWYoZ05vZGUuaWQgPT09IGlyaSAmJiByb290V2Fsa0lzU2VsZWN0ZWQpe1xuICAgICAgICAgIGdOb2RlLmNvbG9yLmJhY2tncm91bmQgPSAnIzBCQkJFRic7XG4gICAgICAgICAgZ05vZGUuZm9udC5jb2xvciA9ICdibGFjayc7XG4gICAgICAgIH1cbiAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgIG5vZGVzLmN1cnJlbnQuYWRkKGdOb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgZWRnZSBvZiBnRGF0YVsnZWRnZXMnXSkge1xuICAgICAgbGV0IGdFZGdlID0gbmV3IEdyYXBoRWRnZSh7IGVkZ2U6IGVkZ2UgfSk7XG4gICAgICBsZXQgZGFzaGVkID0gKGVkZ2UudXJpID09PSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSNzdWJDbGFzc09mXCIgfHwgcm9vdFdhbGtJc1NlbGVjdGVkKSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgIGdFZGdlLmRhc2hlcyA9IGRhc2hlZDtcbiAgICAgIC8vQHRzLWlnbm9yZSAgICAgICAgICAgICAgIFxuICAgICAgaWYgKCFlZGdlcy5jdXJyZW50LmdldChnRWRnZS5pZCkpIHtcbiAgICAgICAgaWYoZ0VkZ2UuaWQ/LmluY2x1ZGVzKGlyaSkgJiYgcm9vdFdhbGtJc1NlbGVjdGVkKXtcbiAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICBnRWRnZS5jb2xvci5jb2xvciA9ICdibGFjayc7XG4gICAgICAgIH1cbiAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgIGVkZ2VzLmN1cnJlbnQuYWRkKGdFZGdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpcnN0TG9hZCkge1xuICAgICAgc2V0Rmlyc3RMb2FkKGZhbHNlKTtcbiAgICB9XG4gICAgaWYoZGJjbGlja2VkKXtcbiAgICAgIHNldERiY2xpY2tlZChmYWxzZSk7XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiByZXNldCgpIHtcbiAgICBub2Rlcy5jdXJyZW50LmNsZWFyKCk7XG4gICAgZWRnZXMuY3VycmVudC5jbGVhcigpO1xuICAgIHNldFNlbGVjdGVkSXJpKGlyaSk7XG4gICAgc2V0Rmlyc3RMb2FkKHRydWUpO1xuICAgIHNldERiY2xpY2tlZChmYWxzZSk7XG4gICAgc2V0Q291bnRlcihjb3VudGVyKzEpO1xuICB9XG5cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBncmFwaERhdGEgPSB7IG5vZGVzOiBub2Rlcy5jdXJyZW50LCBlZGdlczogZWRnZXMuY3VycmVudCB9O1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIGdyYXBoTmV0d29yay5jdXJyZW50ID0gbmV3IE5ldHdvcmsoY29udGFpbmVyLmN1cnJlbnQsIGdyYXBoRGF0YSwgZ3JhcGhOZXR3b3JrQ29uZmlnKTtcbiAgfSwgW10pO1xuXG5cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChncmFwaE5ldHdvcmsuY3VycmVudCkge1xuICAgICAgLy9AdHMtaWdub3JlICAgICAgICAgICAgICAgICAgIFxuICAgICAgZ3JhcGhOZXR3b3JrLmN1cnJlbnQub24oXCJkb3VibGVDbGlja1wiLCBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5ub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IG5vZGVJcmkgPSBwYXJhbXMubm9kZXNbMF07XG4gICAgICAgICAgc2V0U2VsZWN0ZWRJcmkobm9kZUlyaSk7XG4gICAgICAgICAgc2V0RGJjbGlja2VkKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfSwgW2dyYXBoTmV0d29ya10pO1xuXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBsb2FkIHRoZSBncmFwaCBkYXRhIGFnYWluIHdoZW4gdGhlIHVzZXIgY2hhbmdlIHRoZSBtb2RlIHRvIHJvb3RXYWxrIGFuZCB2aWNlIHZlcnNhIE9SIGlucHV0IHByb3BzIGNoYW5nZXMuXG4gICAgcmVzZXQoKTtcbiAgfSwgW3Jvb3RXYWxrSXNTZWxlY3RlZCwgYXBpLCBvbnRvbG9neUlkLCBpcmldKTtcbiAgXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gd2hlbiB1c2VyIGNoYW5nZSB0aGUgc3Rvcnlib29rIHJvb3RXYWxrIHZhbHVlXG4gICAgc2V0Um9vdFdhbGtJc1NlbGVjdGVkKHJvb3RXYWxrID8gcm9vdFdhbGsgOiBmYWxzZSk7XG4gIH0sIFtyb290V2Fsa10pO1xuXG5cblxuICBjb25zdCBvbkJ1dHRvbkNsaWNrID0gKCkgPT5cbiAgICBzZXRJc1BvcG92ZXJPcGVuKChpc1BvcG92ZXJPcGVuKSA9PiAhaXNQb3BvdmVyT3Blbik7XG4gIGNvbnN0IGNsb3NlUG9wb3ZlciA9ICgpID0+IHNldElzUG9wb3Zlck9wZW4oZmFsc2UpO1xuXG4gIGNvbnN0IGJ1dHRvbiA9IChcbiAgICAgICAgPEV1aUJ1dHRvbkVtcHR5XG4gICAgICAgICAgICBpY29uVHlwZT1cImlJbkNpcmNsZVwiXG4gICAgICAgICAgICBpY29uU2lkZT1cInJpZ2h0XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e29uQnV0dG9uQ2xpY2t9XG4gICAgICAgICAgPlxuICAgICAgICAgR3VpZGUgbWUgXG4gICAgICAgIDwvRXVpQnV0dG9uRW1wdHk+XG4gICAgICApO1xuXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2lzRXJyb3IgJiYgPEV1aVRleHQ+e2dldEVycm9yTWVzc2FnZVRvRGlzcGxheShlcnJvciwgXCJncmFwaFwiKX08L0V1aVRleHQ+fVxuICAgICAgPEV1aVBhbmVsIHN0eWxlPXt7IGZvbnRTaXplOiAxMiB9fSBwYWRkaW5nU2l6ZT0ncycgYm9yZGVyUmFkaXVzPVwibm9uZVwiPlxuICAgICAgICA8RXVpQnV0dG9uIHNpemU9XCJzXCIgb25DbGljaz17cmVzZXR9PlJlc2V0PC9FdWlCdXR0b24+XG4gICAgICAgIDxFdWlQb3BvdmVyXG4gICAgICAgICAgYnV0dG9uPXtidXR0b259XG4gICAgICAgICAgaXNPcGVuPXtpc1BvcG92ZXJPcGVufVxuICAgICAgICAgIGNsb3NlUG9wb3Zlcj17Y2xvc2VQb3BvdmVyfVxuICAgICAgICAgID5cbiAgICAgICAgICA8RXVpVGV4dCBzdHlsZT17eyB3aWR0aDogMzAwLCBwYWRkaW5nOiAxMCB9fT5cbiAgICAgICAgICAgIDxsaT5Zb3UgY2FuIGV4cGFuZCB0aGUgbm9kZXMgYnkgZG91YmxlIGNsaWNraW5nIG9uIHRoZW08L2xpPlxuICAgICAgICAgICAgPGxpPllvdSBjYW4gem9vbSBvdXQvaW4gYnkgc2Nyb2xsaW5nIG9uIHRoZSBncmFwaC48L2xpPlxuICAgICAgICAgICAgPGxpPllvdSBjYW4gZ28gYmFjayB0byB0aGUgaW5pdGlhbCBncmFwaCBieSBjbGlja2luZyBvbiB0aGUgUmVzZXQgYnV0dG9uLjwvbGk+XG4gICAgICAgICAgICA8bGk+WW91IGNhbiBtb3ZlIHRoZSBub2RlcyBhbmQgZWRnZXMgYXJvdW5kIGJ5IGRyYWdnaW5nLjwvbGk+XG4gICAgICAgICAgICA8bGk+Um9vdHdhbGsgdG9nZ2xlIGVuYWJsZSB0aGUgcm9vdCB3YWxrIG1vZGUgaW4gdGhlIGdyYXBoLCB3aGVyZSB5b3UgY2FuIHNlZSB0aGUgcGF0aCBmcm9tIHJvb3RzIHRvIHRoZSB0YXJnZXQgbm9kZS48L2xpPiAgICAgICAgICBcbiAgICAgICAgICA8L0V1aVRleHQ+XG4gICAgICAgIDwvRXVpUG9wb3Zlcj5cbiAgICAgICAgPGRpdiBzdHlsZT17e2Rpc3BsYXk6ICdpbmxpbmUtYmxvY2snLCBmbG9hdDogJ3JpZ2h0JywgcGFkZGluZ1RvcDogMTB9fT5cbiAgICAgICAgICA8RXVpU3dpdGNoIFxuICAgICAgICAgICAgbGFiZWw9XCJyb290IHdhbGtcIiBcbiAgICAgICAgICAgIGNoZWNrZWQ9e3Jvb3RXYWxrSXNTZWxlY3RlZH0gXG4gICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4ge3NldFJvb3RXYWxrSXNTZWxlY3RlZCghcm9vdFdhbGtJc1NlbGVjdGVkKX19XG4gICAgICAgICAgICB0aXRsZT1cIkVuYWJsZSB0aGUgcm9vdCB3YWxrIG1vZGUgaW4gdGhlIGdyYXBoOiBZb3UgY2FuIHNlZSB0aGUgcGF0aCBmcm9tIHJvb3RzIHRvIHRoZSB0YXJnZXQgbm9kZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0V1aVBhbmVsPlxuICAgICAgXG4gICAgICA8RXVpUGFuZWwgc3R5bGU9e3sgd2lkdGg6IDkwMCwgaGVpZ2h0OiA5MDAgfX0gaGFzU2hhZG93PXtmYWxzZX0gaGFzQm9yZGVyPXt0cnVlfSBib3JkZXJSYWRpdXM9XCJub25lXCIgPlxuICAgICAgICB7aXNMb2FkaW5nICYmIDxFdWlMb2FkaW5nU3Bpbm5lciBzaXplPVwibVwiIC8+fVxuICAgICAgICA8ZGl2IHJlZj17Y29udGFpbmVyfSBjbGFzc05hbWU9J2dyYXBoLWNvbnRhaW5lcicgc3R5bGU9e3sgd2lkdGg6IFwiODUwcHhcIiwgaGVpZ2h0OiBcIjg1MHB4XCIsIG1hcmdpbjonYXV0bycgfX0gLz5cbiAgICAgIDwvRXVpUGFuZWw+XG4gICAgPC8+XG4gICk7XG59XG5cblxuZnVuY3Rpb24gY3JlYXRlR3JhcGhWaWV3KHByb3BzOiBHcmFwaFZpZXdXaWRnZXRQcm9wcywgY29udGFpbmVyOiBFbGVtZW50LCBjYWxsYmFjaz86ICgpID0+IHZvaWQpIHtcbiAgUmVhY3RET00ucmVuZGVyKFdyYXBwZWRHcmFwaFZpZXdXaWRnZXQocHJvcHMpLCBjb250YWluZXIsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gV3JhcHBlZEdyYXBoVmlld1dpZGdldChwcm9wczogR3JhcGhWaWV3V2lkZ2V0UHJvcHMpIHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIChcbiAgICA8RXVpUHJvdmlkZXIgY29sb3JNb2RlPVwibGlnaHRcIj5cbiAgICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgICA8R3JhcGhWaWV3V2lkZ2V0XG4gICAgICAgICAgYXBpPXtwcm9wcy5hcGl9XG4gICAgICAgICAgaXJpPXtwcm9wcy5pcml9XG4gICAgICAgICAgb250b2xvZ3lJZD17cHJvcHMub250b2xvZ3lJZH1cbiAgICAgICAgICB1c2VMZWdhY3k9e3Byb3BzLnVzZUxlZ2FjeX1cbiAgICAgICAgICByb290V2Fsaz17cHJvcHMucm9vdFdhbGt9XG4gICAgICAgIC8+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9FdWlQcm92aWRlcj5cbiAgKVxufVxuXG5cbmV4cG9ydCB7IGNyZWF0ZUdyYXBoVmlldywgR3JhcGhWaWV3V2lkZ2V0IH1cbiIsICJpbXBvcnQgeyBjcmVhdGVBdXRvY29tcGxldGUgfSBmcm9tIFwiLi9BdXRvY29tcGxldGVXaWRnZXQvQXV0b2NvbXBsZXRlV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVEYXRhQ29udGVudCB9IGZyb20gXCIuL0RhdGFDb250ZW50V2lkZ2V0L0RhdGFDb250ZW50V2lkZ2V0XCJcbmltcG9ydCB7IGNyZWF0ZUVudGl0eUluZm8gfSBmcm9tIFwiLi9FbnRpdHlJbmZvV2lkZ2V0L0VudGl0eUluZm9XaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUpzb25BcGl9IGZyb20gXCIuL0pzb25BcGlXaWRnZXQvSnNvbkFwaVdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlQnJlYWRjcnVtYiB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0JyZWFkY3J1bWJXaWRnZXQvQnJlYWRjcnVtYldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlRGVzY3JpcHRpb24gfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9EZXNjcmlwdGlvbldpZGdldC9EZXNjcmlwdGlvbldpZGdldFwiXG5pbXBvcnQgeyBjcmVhdGVJcmkgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9JcmlXaWRnZXQvSXJpV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVUYWIgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvVGFiV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVBbHRlcm5hdGl2ZU5hbWVUYWIgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQWx0ZXJuYXRpdmVOYW1lVGFiV2lkZ2V0L0FsdGVybmF0aXZlTmFtZVRhYldpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlQ3Jvc3NSZWZUYWIgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9UYWJXaWRnZXQvQ3Jvc3NSZWZXaWRnZXQvQ3Jvc3NSZWZUYWJXaWRnZXRcIjtcbmltcG9ydCB7IGNyZWF0ZUhpZXJhcmNoeU9MUyB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RhYldpZGdldC9IaWVyYXJjaHlXaWRnZXQvSGllcmFyY2h5V2lkZ2V0T0xTXCI7XG5pbXBvcnQgeyBjcmVhdGVIaWVyYXJjaHlEZXByZWNhdGVkIH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldERlcHJlY2F0ZWQvSGllcmFyY2h5V2lkZ2V0RGVwcmVjYXRlZFwiO1xuaW1wb3J0IHsgY3JlYXRlSGllcmFyY2h5IH0gZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXQvVGFiV2lkZ2V0L0hpZXJhcmNoeVdpZGdldFNlbUxvb2tQL0hpZXJhcmNoeVdpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlVGl0bGV9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L1RpdGxlV2lkZ2V0L1RpdGxlV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVNZXRhZGF0YSB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L01ldGFkYXRhV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVPbnRvbG9neUluZm8gfSBmcm9tIFwiLi9PbnRvbG9neUluZm9XaWRnZXQvT250b2xvZ3lJbmZvV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVSZXNvdXJjZXMgfSBmcm9tIFwiLi9SZXNvdXJjZXNXaWRnZXQvUmVzb3VyY2VzV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVTZWFyY2hCYXIgfSBmcm9tIFwiLi9TZWFyY2hCYXJXaWRnZXQvU2VhcmNoQmFyV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVTZWFyY2hSZXN1bHRzTGlzdCB9IGZyb20gXCIuL1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0L1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0XCI7XG5pbXBvcnQge2NyZWF0ZUVudGl0eVJlbGF0aW9uc30gZnJvbSBcIi4vRW50aXR5UmVsYXRpb25zV2lkZ2V0L0VudGl0eVJlbGF0aW9uc1dpZGdldFwiO1xuaW1wb3J0IHsgY3JlYXRlRGVwaWN0aW9uIH0gZnJvbSBcIi4vVGVybURlcGljdGlvbldpZGdldC9UZXJtRGVwaWN0aW9uV2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVFbnRpdHlPbnRvTGlzdCB9IGZyb20gXCIuL01ldGFkYXRhV2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0L0VudGl0eU9udG9MaXN0V2lkZ2V0XCI7XG5pbXBvcnQgeyBjcmVhdGVFbnRpdHlEZWZpbmVkQnkgfSBmcm9tIFwiLi9NZXRhZGF0YVdpZGdldC9FbnRpdHlEZWZpbmVkQnlXaWRnZXQvRW50aXR5RGVmaW5lZEJ5V2lkZ2V0XCJcbmltcG9ydCB7IGNyZWF0ZUdyYXBoVmlldyB9IGZyb20gXCIuL0dyYXBoVmlld1dpZGdldC9HcmFwaFZpZXdXaWRnZXRcIjtcblxuKHdpbmRvdyBhcyBhbnkpWydTZW1Mb29rUFdpZGdldHMnXSA9IHtcbiAgICBjcmVhdGVBdXRvY29tcGxldGUsXG4gICAgY3JlYXRlRGF0YUNvbnRlbnQsXG4gICAgY3JlYXRlRW50aXR5SW5mbyxcbiAgICBjcmVhdGVFbnRpdHlSZWxhdGlvbnMsXG4gICAgY3JlYXRlSnNvbkFwaSxcbiAgICBjcmVhdGVCcmVhZGNydW1iLFxuICAgIGNyZWF0ZURlc2NyaXB0aW9uLFxuICAgIGNyZWF0ZUlyaSxcbiAgICBjcmVhdGVUYWIsXG4gICAgY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiLFxuICAgIGNyZWF0ZUNyb3NzUmVmVGFiLFxuICAgIGNyZWF0ZUhpZXJhcmNoeSxcbiAgICBjcmVhdGVIaWVyYXJjaHlEZXByZWNhdGVkLFxuICAgIGNyZWF0ZVRpdGxlLFxuICAgIGNyZWF0ZU9udG9sb2d5SW5mbyxcbiAgICBjcmVhdGVSZXNvdXJjZXMsXG4gICAgY3JlYXRlU2VhcmNoQmFyLFxuICAgIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0LFxuICAgIGNyZWF0ZU1ldGFkYXRhLFxuICAgIGNyZWF0ZURlcGljdGlvbixcbiAgICBjcmVhdGVIaWVyYXJjaHlPTFMsXG4gICAgY3JlYXRlRW50aXR5T250b0xpc3QsXG4gICAgY3JlYXRlRW50aXR5RGVmaW5lZEJ5LFxuICAgIGNyZWF0ZUdyYXBoVmlldyxcbn1cblxuZXhwb3J0IHtcbiAgICBjcmVhdGVBdXRvY29tcGxldGUsXG4gICAgY3JlYXRlRGF0YUNvbnRlbnQsXG4gICAgY3JlYXRlRW50aXR5SW5mbyxcbiAgICBjcmVhdGVFbnRpdHlSZWxhdGlvbnMsXG4gICAgY3JlYXRlSnNvbkFwaSxcbiAgICBjcmVhdGVCcmVhZGNydW1iLFxuICAgIGNyZWF0ZURlc2NyaXB0aW9uLFxuICAgIGNyZWF0ZUlyaSxcbiAgICBjcmVhdGVUYWIsXG4gICAgY3JlYXRlQWx0ZXJuYXRpdmVOYW1lVGFiLFxuICAgIGNyZWF0ZUNyb3NzUmVmVGFiLFxuICAgIGNyZWF0ZUhpZXJhcmNoeU9MUyxcbiAgICBjcmVhdGVIaWVyYXJjaHlEZXByZWNhdGVkLFxuICAgIGNyZWF0ZVRpdGxlLFxuICAgIGNyZWF0ZU9udG9sb2d5SW5mbyxcbiAgICBjcmVhdGVSZXNvdXJjZXMsXG4gICAgY3JlYXRlU2VhcmNoQmFyLFxuICAgIGNyZWF0ZVNlYXJjaFJlc3VsdHNMaXN0LFxuICAgIGNyZWF0ZU1ldGFkYXRhLFxuICAgIGNyZWF0ZURlcGljdGlvbixcbiAgICBjcmVhdGVIaWVyYXJjaHksXG4gICAgY3JlYXRlRW50aXR5T250b0xpc3QsXG4gICAgY3JlYXRlRW50aXR5RGVmaW5lZEJ5LFxuICAgIGNyZWF0ZUdyYXBoVmlldyxcbn1cblxuZXhwb3J0ICogZnJvbSBcIi4vTWV0YWRhdGFXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0F1dG9jb21wbGV0ZVdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vSnNvbkFwaVdpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRGF0YUNvbnRlbnRXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Jlc291cmNlc1dpZGdldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vT250b2xvZ3lJbmZvV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9TZWFyY2hCYXJXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1NlYXJjaFJlc3VsdHNMaXN0V2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9FbnRpdHlJbmZvV2lkZ2V0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9FbnRpdHlSZWxhdGlvbnNXaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Rlcm1EZXBpY3Rpb25XaWRnZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoVmlld1dpZGdldFwiOyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFRQSxVQUFJLHdCQUF3QixPQUFPO0FBQ25DLFVBQUlBLGtCQUFpQixPQUFPLFVBQVU7QUFDdEMsVUFBSSxtQkFBbUIsT0FBTyxVQUFVO0FBRXhDLGVBQVMsU0FBUyxLQUFLO0FBQ3RCLFlBQUksUUFBUSxRQUFRLFFBQVEsUUFBVztBQUN0QyxnQkFBTSxJQUFJLFVBQVUsdURBQXVEO0FBQUEsUUFDNUU7QUFFQSxlQUFPLE9BQU8sR0FBRztBQUFBLE1BQ2xCO0FBRUEsZUFB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QWlCO0FBQUEsWUFDakIsYUFBYTtBQUFBLFlBQ2IsVUFBVTtBQUFBLFlBQ1YsY0FBYztBQUFBLFlBQ2QsUUFBUTtBQUFBLFlBQ1IsYUFBYTtBQUFBLFlBQ2IseUJBQXlCO0FBQUEsWUFDekIsTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsZ0JBQWdCO0FBQUEsWUFDaEIsY0FBYztBQUFBLFlBQ2QsT0FBTztBQUFBLFlBQ1AsS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YseUJBQXlCO0FBQUEsWUFDekIsdUJBQXVCO0FBQUEsWUFDdkIsVUFBVTtBQUFBLFlBQ1YsV0FBVztBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsY0FBYztBQUFBLFlBQ2QsS0FBSztBQUFBLFlBQ0wsTUFBTTtBQUFBLFlBQ04sWUFBWTtBQUFBLFlBQ1osWUFBWTtBQUFBLFlBQ1osYUFBYTtBQUFBLFlBQ2IsZ0JBQWdCO0FBQUEsWUFDaEIsWUFBWTtBQUFBLFlBQ1osYUFBYTtBQUFBLFlBQ2IsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLFlBQ1IsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsY0FBYztBQUFBLFlBQ2QsTUFBTTtBQUFBLFlBQ04sSUFBSTtBQUFBLFlBQ0osV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsV0FBVztBQUFBLFlBQ1gsSUFBSTtBQUFBLFlBQ0osUUFBUTtBQUFBLFlBQ1IsVUFBVTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsV0FBVztBQUFBLFlBQ1gsU0FBUztBQUFBLFlBQ1QsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YsYUFBYTtBQUFBLFlBQ2IsY0FBYztBQUFBLFlBQ2QsS0FBSztBQUFBLFlBQ0wsV0FBVztBQUFBLFlBQ1gsT0FBTztBQUFBLFlBQ1AsWUFBWTtBQUFBLFlBQ1osUUFBUTtBQUFBLFlBQ1IsS0FBSztBQUFBLFlBQ0wsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsWUFBWTtBQUFBLFlBQ1osTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsYUFBYTtBQUFBLFlBQ2IsYUFBYTtBQUFBLFlBQ2IsUUFBUTtBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFlBQ1osVUFBVTtBQUFBLFlBQ1YsZ0JBQWdCO0FBQUEsWUFDaEIsS0FBSztBQUFBLFlBQ0wsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFlBQ1IsV0FBVztBQUFBLFlBQ1gsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sWUFBWTtBQUFBLFlBQ1osS0FBSztBQUFBLFlBQ0wsUUFBUTtBQUFBLFlBQ1IsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1QsVUFBVTtBQUFBLFlBQ1YsUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBLFlBQ04sUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsT0FBTztBQUFBLFlBQ1AsT0FBTztBQUFBLFlBQ1AsTUFBTTtBQUFBO0FBQUEsWUFFTixPQUFPO0FB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QUEsS0FBQUEsV0FBQUE7Y0FBQUE7QUFBQUEscUJBQUFBLEVBQUFBLEdBQUFBLElBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLHVCQUFBQSxNQUFBQSxHQUFBQSxTQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxJQUFBQSxFQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7WUFBQUE7QUFBQUEsa0JBQUFBLElBQUFBLFVBQUFBLHVJQUFBQTtVQUFBQTtBQUFBQSxjQUFBQSxJQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtBQUFBQSxpQkFBQUEsRUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsWUFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsRUFBQUE7VUFBQUEsR0FBQUEsR0FBQUEsV0FBQUE7QUFBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBO0FBQUFBLG1CQUFBQSxLQUFBQSxHQUFBQSxNQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxNQUFBQSxLQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUE7QUFBQUEsY0FBQUEsTUFBQUEsUUFBQUEsR0FBQUEsVUFBQUEsR0FBQUEsT0FBQUE7WUFBQUEsVUFBQUE7QUFBQUEsa0JBQUFBO0FBQUFBLHNCQUFBQTtZQUFBQTtVQUFBQSxFQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsR0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsV0FBQUEsUUFBQUEsTUFBQUEsS0FBQUEsR0FBQUEsWUFBQUEsS0FBQUEsR0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLElBQUFBLE1BQUFBLEVBQUFBLEdBQUFBLEtBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEdBQUFBLEVBQUFBLElBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGlCQUFBQTtRQUFBQTtBQUFBQSxpQkFBQUEsS0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLFVBQUFBLFFBQUFBLEtBQUFBLElBQUFBLE1BQUFBLEVBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEdBQUFBLEVBQUFBLElBQUFBLFVBQUFBLEVBQUFBO0FBQUFBLGlCQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxnQkFBQUEsS0FBQUEsV0FBQUE7QUFBQUEsdUJBQUFBLEtBQUFBLFdBQUFBO0FBQUFBLG9CQUFBQSxLQUFBQTtBQUFBQSx1QkFBQUEsU0FBQUEsSUFBQUE7QUFBQUEsMkJBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLFFBQUFBLE1BQUFBO0FBQUFBLHdCQUFBQSxLQUFBQSx1QkFBQUEsTUFBQUEsR0FBQUEsV0FBQUEsRUFBQUE7QUFBQUEsb0JBQUFBLE1BQUFBLEtBQUFBLE9BQUFBLEdBQUFBLE1BQUFBLE1BQUFBLFFBQUFBLEdBQUFBLE1BQUFBLGNBQUFBLE1BQUFBO2tCQUFBQTtBQUFBQSx5QkFBQUEseUJBQUFBLE9BQUFBO2dCQUFBQTtjQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxHQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxVQUFBQSxRQUFBQTtBQUFBQSxpQkFBQUEsTUFBQUEsR0FBQUEsS0FBQUEsS0FBQUEsVUFBQUEsVUFBQUEsS0FBQUEsU0FBQUEsVUFBQUEsRUFBQUEsQ0FBQUEsS0FBQUEsTUFBQUEsTUFBQUEsS0FBQUEsTUFBQUEsR0FBQUEsS0FBQUEsS0FBQUEsVUFBQUEsVUFBQUEsS0FBQUEsU0FBQUEsVUFBQUEsRUFBQUEsQ0FBQUEsS0FBQUEsTUFBQUEsTUFBQUEsS0FBQUEsTUFBQUEsR0FBQUEsS0FBQUEsS0FBQUEsVUFBQUEsVUFBQUEsS0FBQUEsU0FBQUEsVUFBQUEsRUFBQUEsQ0FBQUEsS0FBQUEsTUFBQUEsTUFBQUE7QUFBQUEscUJBQUFBLENBQUFBLElBQUFBLElBQUFBLEVBQUFBO1lBQUFBLEVBQUFBLEVBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLElBQUFBLENBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLENBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLENBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLENBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLFdBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxVQUFBQSxLQUFBQSx3QkFBQUE7QUFBQUEscUJBQUFBLEtBQUFBLElBQUFBLEtBQUFBLElBQUFBLEtBQUFBLE1BQUFBLEtBQUFBLElBQUFBO1lBQUFBO0FBQUFBLG1CQUFBQSxHQUFBQSxTQUFBQSxXQUFBQTtBQUFBQSxxQkFBQUEsYUFBQUEsR0FBQUE7WUFBQUEsR0FBQUEsR0FBQUEsVUFBQUEsV0FBQUE7QUFBQUEscUJBQUFBLEdBQUFBLElBQUFBLHlCQUFBQSxVQUFBQSxHQUFBQSxJQUFBQTtZQUFBQSxHQUFBQSxHQUFBQSxZQUFBQSxRQUFBQSxHQUFBQSxPQUFBQSxJQUFBQSxHQUFBQSxVQUFBQSxPQUFBQTtVQUFBQSxFQUFBQSxHQUFBQSxTQUFBQSxLQUFBQSxDQUFBQSxHQUFBQSxDQUFBQSxDQUFBQTtRQUFBQTtBRzE2RmIzYixXQUFBLFFBQUE7QUFBQSxZQUFBLEtBQUEsZUFBQSxPQUFBLFNBQUEsT0FBQSxVQUFBLEtBQUEsV0FBQTtBQUFBLGlCQUFBLFdBQUE7QUFBQSxnQkFBQXJZLEtBQUEsV0FBQTtZQUFBO0FBQUEsbUJBQUEsRUFBQSxJQUFBQSxJQUFBLEtBQUFBLElBQUEsU0FBQUEsSUFBQSxNQUFBQSxJQUFBLEtBQUEsV0FBQTtBQUFBLHFCQUFBLEVBQUEsS0FBQUEsR0FBQTtZQUFBLEVBQUE7VUFBQSxFQUFBO1FBQUE7QUFBQSxpQkFBQSxHQUFBQSxJQUFBO0FBQUEsY0FBQXFhLElBQUF4Z0IsS0FBQTtBQUFBLGVBQUEsZ0JBQUEsQ0FBQSxHQUFBLEtBQUEsU0FBQSxPQUFBLEtBQUEsT0FBQSxFQUFBLFdBQUFtRyxJQUFBLFNBQUEsU0FBQSxjQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsS0FBQSxRQUFBLFVBQUEsSUFBQSxhQUFBLEdBQUEsS0FBQSxLQUFBLFVBQUEsWUFBQSxLQUFBLEtBQUEsT0FBQSxHQUFBLEtBQUEsY0FBQSxLQUFBLFdBQUE7QUFBQSxZQUFBbkcsR0FBQSxLQUFBLFFBQUEsV0FBQSxZQUFBQSxHQUFBLEtBQUEsT0FBQTtVQUFBLENBQUE7QUFBQSxjQUFBdWUsS0FBQSxHQUFBLEtBQUEsS0FBQSxPQUFBO0FBQUEsVUFBQUEsR0FBQSxHQUFBLE9BQUEsR0FBQWlDLEtBQUEsS0FBQSxhQUFBLEVBQUEsS0FBQUEsSUFBQSxJQUFBLENBQUEsR0FBQSxLQUFBLGNBQUEsS0FBQSxXQUFBO0FBQUEsWUFBQWpDLEdBQUEsUUFBQTtVQUFBLENBQUE7QUFBQSxjQUFBN2YsS0FBQSxDQUFBLE9BQUEsYUFBQSxTQUFBLFNBQUEsT0FBQSxZQUFBLFdBQUEsUUFBQTtBQUFBLGFBQUFBLEVBQUEsRUFBQSxLQUFBQSxJQUFBLFNBQUF5SCxJQUFBO0FBQUEsWUFBQW9ZLEdBQUEsR0FBQXBZLElBQUEsU0FBQUEsSUFBQTtBQUFBLGNBQUFBLEdBQUEsU0FBQSxnQkFBQTtZQUFBLENBQUE7VUFBQSxDQUFBLEdBQUEsWUFBQSxTQUFBLFNBQUEsS0FBQSxXQUFBLFNBQUFxYSxJQUFBO0FBQUEsYUFBQSxTQUFBcmEsSUFBQXFhLElBQUE7QUFBQSxxQkFBQXJhLE1BQUE7QUFBQSxvQkFBQUEsT0FBQXFhO0FBQUEseUJBQUE7QUFBQSxnQkFBQXJhLEtBQUFBLEdBQUE7Y0FBQTtBQUFBLHFCQUFBO1lBQUEsR0FBQXFhLEdBQUEsUUFBQXJhLEVBQUEsS0FBQW5HLEdBQUEsV0FBQTtVQUFBLEdBQUEsU0FBQSxLQUFBLGlCQUFBLFNBQUEsS0FBQSxRQUFBLEdBQUEsS0FBQSxjQUFBLEtBQUEsV0FBQTtBQUFBLHFCQUFBLEtBQUEsb0JBQUEsU0FBQUEsR0FBQSxRQUFBO1VBQUEsQ0FBQSxJQUFBLEtBQUEsZUFBQSxTQUFBbUcsSUFBQTtBQUFBLGFBQUEsU0FBQUEsS0FBQSxhQUFBQSxHQUFBLE1BQUEsT0FBQUEsR0FBQSxZQUFBbkcsR0FBQSxXQUFBO1VBQUE7UUFBQTtBQUFBLFdBQUEsR0FBQSxTQUFBLEdBQUEsR0FBQSxVQUFBLE1BQUEsR0FBQSxVQUFBLFVBQUEsV0FBQTtBQUFBLGNBQUFtRyxJQUFBcWE7QUFBQSxlQUFBLFdBQUE7QUFBQSxjQUFBeGdCLElBQUF1ZSxLQUFBLEdBQUEsR0FBQXBZLEtBQUEsR0FBQXFhLEtBQUEsS0FBQSxhQUFBLEVBQUEsS0FBQUEsSUFBQSxDQUFBLENBQUEsRUFBQSxLQUFBcmEsRUFBQSxDQUFBO0FBQUEsY0FBQTtBQUFBLGlCQUFBb1ksR0FBQSxFQUFBLEdBQUEsRUFBQXZlLEtBQUF1ZSxHQUFBLEVBQUEsR0FBQSxRQUFBO0FBQUEsZUFBQSxHQUFBdmUsR0FBQSxPQUFBO1lBQUE7VUFBQSxTQUFBbUcsSUFBQTtBQUFBLFlBQUFvWSxHQUFBLEVBQUFwWSxFQUFBO1VBQUEsVUFBQTtBQUFBLFlBQUFvWSxHQUFBLEVBQUE7VUFBQTtRQUFBLEdBQUEsR0FBQSxVQUFBLFdBQUEsV0FBQTtBQUFBLGFBQUEsV0FBQSxHQUFBLFFBQUEsV0FBQSxHQUFBLEdBQUEsVUFBQSxNQUFBLEtBQUEsU0FBQSxNQUFBLEtBQUEsS0FBQSxRQUFBLE1BQUEsVUFBQSxRQUFBLEtBQUEsS0FBQSxVQUFBLFVBQUEsSUFBQSxZQUFBLEdBQUEsS0FBQSxLQUFBLFFBQUEsR0FBQSxLQUFBLEtBQUEsVUFBQSxHQUFBLFNBQUEsS0FBQSxpQkFBQSxXQUFBLEtBQUEsWUFBQTtRQUFBLEdBQUEsR0FBQSxVQUFBLGFBQUEsV0FBQTtBQUFBLGVBQUEsU0FBQSxPQUFBLEtBQUEsS0FBQSxRQUFBLE1BQUEsVUFBQSxTQUFBLEtBQUEsS0FBQSxVQUFBLFVBQUEsT0FBQSxZQUFBLEdBQUEsU0FBQSxLQUFBLG9CQUFBLFdBQUEsS0FBQSxZQUFBLEdBQUEsS0FBQSxLQUFBLFFBQUEsR0FBQSxLQUFBLEtBQUEsWUFBQTtRQUFBLEdBQUEsR0FBQSxVQUFBLGdCQUFBLFNBQUFwWSxJQUFBO0FBQUEsZUFBQSxTQUFBLEdBQUFBLEdBQUEsU0FBQSxnQkFBQTtRQUFBO0FBQUEsWUFBQSxLQUFBLDZDQUFBLEtBQUEsb0NBQUEsS0FBQSxnSEFBQSxLQUFBO0FBQUEsaUJBQUEsR0FBQUEsSUFBQTtBQUFBLGNBQUFBO0FBQUEsbUJBQUEsU0FBQUEsR0FBQSxjQUFBLEtBQUE7QUFBQSxrQkFBQXFhLEtBQUFyYSxHQUFBO0FBQUEsY0FBQXFhLE9BQUEsR0FBQUEsRUFBQSxHQUFBcmEsR0FBQSxZQUFBcWEsRUFBQTtZQUFBO1FBQUE7QUFBQSxpQkFBQSxHQUFBcmEsSUFBQTtBQUFBLGlCQUFBQSxjQUFBLFVBQUEsWUFBQSxPQUFBQTtRQUFBO0FBQUEsaUJBQUEsR0FBQUEsSUFBQTtBQUFBLGlCQUFBLGFBQUEsR0FBQUEsRUFBQSxLQUFBLFNBQUFBO1FBQUE7QUFBQSxpQkFBQSxHQUFBQSxJQUFBcWEsSUFBQXhnQixJQUFBdWUsSUFBQTtBQUFBLGNBQUE3ZixLQUFBO0FBQUEsbUJBQUE2ZixPQUFBN2YsS0FBQSxTQUFBOGhCLEdBQUF4Z0IsRUFBQSxLQUFBLFdBQUFtRyxHQUFBbkcsRUFBQSxJQUFBdEIsS0FBQSxPQUFBeUgsR0FBQW5HLEVBQUEsSUFBQW1HLEdBQUFuRyxFQUFBLElBQUF3Z0IsR0FBQXhnQixFQUFBO1FBQUE7QUFBQSxpQkFBQSxHQUFBbUcsSUFBQXFhLElBQUE7QUFBQSxjQUFBeGdCLEtBQUEsVUFBQSxTQUFBLEtBQUEsV0FBQSxVQUFBLENBQUEsS0FBQSxVQUFBLENBQUE7QUFBQSxtQkFBQXVlLE1BQUFwWTtBQUFBLGdCQUFBLFdBQUFxYSxHQUFBakMsRUFBQTtBQUFBLGtCQUFBLFNBQUFpQyxHQUFBakMsRUFBQSxLQUFBLGFBQUEsR0FBQWlDLEdBQUFqQyxFQUFBLENBQUE7QUFBQSxtQkFBQXBZLElBQUFxYSxJQUFBakMsSUFBQXZlLEVBQUE7bUJBQUE7QUFBQSxvQkFBQXRCLEtBQUF5SCxHQUFBb1ksRUFBQSxHQUFBOWIsS0FBQStkLEdBQUFqQyxFQUFBO0FBQUEsbUJBQUE3ZixFQUFBLEtBQUEsR0FBQStELEVBQUEsS0FBQSxHQUFBL0QsSUFBQStELElBQUF6QyxFQUFBO2NBQUE7UUFBQTtBQUFBLGlCQUFBLEdBQUFtRyxJQUFBcWEsSUFBQXhnQixJQUFBO0FBQUEsY0FBQXVlLEtBQUEsVUFBQSxTQUFBLEtBQUEsV0FBQSxVQUFBLENBQUEsS0FBQSxVQUFBLENBQUE7QUFBQSxjQUFBLEdBQUF2ZSxFQUFBO0FBQUEsa0JBQUEsSUFBQSxVQUFBLHdDQUFBO0FBQUEsbUJBQUF0QixLQUFBLEdBQUFBLEtBQUF5SCxHQUFBLFFBQUF6SCxNQUFBO0FBQUEsZ0JBQUErRCxLQUFBMEQsR0FBQXpILEVBQUE7QUFBQSxnQkFBQSxPQUFBLFVBQUEsZUFBQSxLQUFBc0IsSUFBQXlDLEVBQUE7QUFBQSxrQkFBQXpDLEdBQUF5QyxFQUFBLEtBQUF6QyxHQUFBeUMsRUFBQSxFQUFBLGdCQUFBO0FBQUEsMkJBQUErZCxHQUFBL2QsRUFBQSxNQUFBK2QsR0FBQS9kLEVBQUEsSUFBQSxDQUFBLElBQUErZCxHQUFBL2QsRUFBQSxFQUFBLGdCQUFBLFNBQUEsR0FBQStkLEdBQUEvZCxFQUFBLEdBQUF6QyxHQUFBeUMsRUFBQSxHQUFBLE9BQUE4YixFQUFBLElBQUEsR0FBQWlDLElBQUF4Z0IsSUFBQXlDLElBQUE4YixFQUFBO21CQUFBO0FBQUEsb0JBQUEsR0FBQXZlLEdBQUF5QyxFQUFBLENBQUE7QUFBQSx3QkFBQSxJQUFBLFVBQUEsd0NBQUE7QUFBQSxtQkFBQStkLElBQUF4Z0IsSUFBQXlDLElBQUE4YixFQUFBO2NBQUE7VUFBQTtBQUFBLGlCQUFBaUM7UUFBQTtBQUFBLGlCQUFBLEdBQUFyYSxJQUFBcWEsSUFBQXhnQixJQUFBO0FBQUEsY0FBQXVlLEtBQUEsVUFBQSxTQUFBLEtBQUEsV0FBQSxVQUFBLENBQUEsS0FBQSxVQUFBLENBQUE7QUFBQSxjQUFBLEdBQUF2ZSxFQUFBO0FBQUEsa0JBQUEsSUFBQSxVQUFBLHdDQUFBO0FBQUEsbUJBQUF0QixNQUFBc0I7QUFBQSxnQkFBQSxPQUFBLFVBQUEsZUFBQSxLQUFBQSxJQUFBdEIsRUFBQSxLQUFBLENBQUEsR0FBQXlILEVBQUEsRUFBQSxLQUFBQSxJQUFBekgsRUFBQTtBQUFBLGtCQUFBc0IsR0FBQXRCLEVBQUEsS0FBQXNCLEdBQUF0QixFQUFBLEVBQUEsZ0JBQUE7QUFBQSwyQkFBQThoQixHQUFBOWhCLEVBQUEsTUFBQThoQixHQUFBOWhCLEVBQUEsSUFBQSxDQUFBLElBQUE4aEIsR0FBQTloQixFQUFBLEVBQUEsZ0JBQUEsU0FBQSxHQUFBOGhCLEdBQUE5aEIsRUFBQSxHQUFBc0IsR0FBQXRCLEVBQUEsQ0FBQSxJQUFBLEdBQUE4aEIsSUFBQXhnQixJQUFBdEIsSUFBQTZmLEVBQUE7dUJBQUEsR0FBQXZlLEdBQUF0QixFQUFBLENBQUEsR0FBQTtBQUFBLGdCQUFBOGhCLEdBQUE5aEIsRUFBQSxJQUFBLENBQUE7QUFBQSx5QkFBQStELEtBQUEsR0FBQUEsS0FBQXpDLEdBQUF0QixFQUFBLEVBQUEsUUFBQStEO0FBQUEsa0JBQUErZCxHQUFBOWhCLEVBQUEsRUFBQSxLQUFBc0IsR0FBQXRCLEVBQUEsRUFBQStELEVBQUEsQ0FBQTtjQUFBO0FBQUEsbUJBQUErZCxJQUFBeGdCLElBQUF0QixJQUFBNmYsRUFBQTtBQUFBLGlCQUFBaUM7UUFBQTtBQUFBLGlCQUFBLEdBQUFyYSxJQUFBcWEsSUFBQTtBQUFBLGNBQUF4Z0IsS0FBQSxVQUFBLFNBQUEsS0FBQSxXQUFBLFVBQUEsQ0FBQSxLQUFBLFVBQUEsQ0FBQSxHQUFBdWUsS0FBQSxVQUFBLFNBQUEsS0FBQSxXQUFBLFVBQUEsQ0FBQSxLQUFBLFVBQUEsQ0FBQTtBQUFBLG1CQUFBN2YsTUFBQThoQjtBQUFBLGdCQUFBLE9BQUEsVUFBQSxlQUFBLEtBQUFBLElBQUE5aEIsRUFBQSxLQUFBLFNBQUFzQjtBQUFBLGtCQUFBLGFBQUEsR0FBQXdnQixHQUFBOWhCLEVBQUEsQ0FBQSxLQUFBLFNBQUE4aEIsR0FBQTloQixFQUFBLEtBQUEsR0FBQThoQixHQUFBOWhCLEVBQUEsQ0FBQSxNQUFBLE9BQUE7QUFBQSwyQkFBQXlILEdBQUF6SCxFQUFBLElBQUF5SCxHQUFBekgsRUFBQSxJQUFBLEdBQUEsQ0FBQSxHQUFBOGhCLEdBQUE5aEIsRUFBQSxHQUFBc0IsRUFBQSxJQUFBLGFBQUEsR0FBQW1HLEdBQUF6SCxFQUFBLENBQUEsS0FBQSxTQUFBeUgsR0FBQXpILEVBQUEsS0FBQSxHQUFBeUgsR0FBQXpILEVBQUEsQ0FBQSxNQUFBLE9BQUEsWUFBQSxHQUFBeUgsR0FBQXpILEVBQUEsR0FBQThoQixHQUFBOWhCLEVBQUEsR0FBQXNCLEVBQUEsSUFBQSxHQUFBbUcsSUFBQXFhLElBQUE5aEIsSUFBQTZmLEVBQUE7dUJBQUEsR0FBQWlDLEdBQUE5aEIsRUFBQSxDQUFBLEdBQUE7QUFBQSxvQkFBQStEO0FBQUEsZ0JBQUEwRCxHQUFBekgsRUFBQSxJQUFBLEdBQUErRCxLQUFBK2QsR0FBQTloQixFQUFBLENBQUEsRUFBQSxLQUFBK0QsRUFBQTtjQUFBO0FBQUEsbUJBQUEwRCxJQUFBcWEsSUFBQTloQixJQUFBNmYsRUFBQTtBQUFBLGlCQUFBcFk7UUFBQTtBQUFBLGlCQUFBLEdBQUFBLElBQUFxYSxJQUFBO0FBQUEsY0FBQXhnQjtBQUFBLGlCQUFBLEdBQUFBLEtBQUEsQ0FBQSxDQUFBLEVBQUEsS0FBQUEsSUFBQSxHQUFBbUcsRUFBQSxHQUFBLENBQUFxYSxFQUFBLENBQUE7UUFBQTtBQUFBLGlCQUFBLEdBQUFyYSxJQUFBO0FBQUEsaUJBQUFBLEdBQUEsc0JBQUEsRUFBQTtRQUFBO0FBQUEsaUJBQUEsR0FBQUEsSUFBQXFhLElBQUE7QUFBQSxjQUFBLEdBQUFyYSxFQUFBO0FBQUEscUJBQUFuRyxLQUFBbUcsR0FBQSxRQUFBb1ksS0FBQSxHQUFBQSxLQUFBdmUsSUFBQXVlO0FBQUEsY0FBQWlDLEdBQUFyYSxHQUFBb1ksRUFBQSxHQUFBQSxJQUFBcFksRUFBQTs7QUFBQSxxQkFBQXpILE1BQUF5SDtBQUFBLHFCQUFBLFVBQUEsZUFBQSxLQUFBQSxJQUFBekgsRUFBQSxLQUFBOGhCLEdBQUFyYSxHQUFBekgsRUFBQSxHQUFBQSxJQUFBeUgsRUFBQTtRQUFBO0FBQUEsaUJBQUEsR0FBQUEsSUFBQTtBQUFBLGNBQUFxYTtBQUFBLGtCQUFBcmEsR0FBQSxRQUFBO1lBQUEsS0FBQTtZQUFBLEtBQUE7QUFBQSxzQkFBQXFhLEtBQUEsR0FBQSxLQUFBcmEsRUFBQSxLQUFBLEVBQUEsR0FBQSxHQUFBcWEsR0FBQSxDQUFBLElBQUFBLEdBQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQSxHQUFBLEdBQUFBLEdBQUEsQ0FBQSxJQUFBQSxHQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsR0FBQSxHQUFBQSxHQUFBLENBQUEsSUFBQUEsR0FBQSxDQUFBLEdBQUEsRUFBQSxFQUFBLElBQUE7WUFBQSxLQUFBO1lBQUEsS0FBQTtBQUFBLHNCQUFBQSxLQUFBLEdBQUEsS0FBQXJhLEVBQUEsS0FBQSxFQUFBLEdBQUEsR0FBQXFhLEdBQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQSxHQUFBLEdBQUFBLEdBQUEsQ0FBQSxHQUFBLEVBQUEsR0FBQSxHQUFBLEdBQUFBLEdBQUEsQ0FBQSxHQUFBLEVBQUEsRUFBQSxJQUFBO1lBQUE7QUFBQSxxQkFBQTtVQUFBO1FBQUE7QUFBQSxpQkFBQSxHQUFBcmEsSUFBQXFhLElBQUE7QUFBQSxjQUFBLEdBQUFyYSxFQUFBLEVBQUEsS0FBQUEsSUFBQSxNQUFBO0FBQUEsbUJBQUFBO0FBQUEsY0FBQSxHQUFBQSxFQUFBLEVBQUEsS0FBQUEsSUFBQSxLQUFBLEdBQUE7QUFBQSxnQkFBQW5HLEtBQUFtRyxHQUFBLE9BQUEsR0FBQUEsRUFBQSxFQUFBLEtBQUFBLElBQUEsR0FBQSxJQUFBLENBQUEsRUFBQSxRQUFBLEtBQUEsRUFBQSxFQUFBLE1BQUEsR0FBQTtBQUFBLG1CQUFBLFVBQUFuRyxHQUFBLENBQUEsSUFBQSxNQUFBQSxHQUFBLENBQUEsSUFBQSxNQUFBQSxHQUFBLENBQUEsSUFBQSxNQUFBd2dCLEtBQUE7VUFBQTtBQUFBLGNBQUFqQyxLQUFBLEdBQUFwWSxFQUFBO0FBQUEsaUJBQUEsUUFBQW9ZLEtBQUFwWSxLQUFBLFVBQUFvWSxHQUFBLElBQUEsTUFBQUEsR0FBQSxJQUFBLE1BQUFBLEdBQUEsSUFBQSxNQUFBaUMsS0FBQTtRQUFBO0FBQUEsaUJBQUEsR0FBQXJhLElBQUFxYSxJQUFBeGdCLElBQUE7QUFBQSxjQUFBdWU7QUFBQSxpQkFBQSxNQUFBLEdBQUFBLE9BQUEsS0FBQSxPQUFBcFksTUFBQSxPQUFBcWEsTUFBQSxLQUFBeGdCLElBQUEsU0FBQSxFQUFBLENBQUEsRUFBQSxLQUFBdWUsSUFBQSxDQUFBO1FBQUE7QUFBQSxpQkFBQSxHQUFBcFksSUFBQXFhLElBQUE7QUFBQSxjQUFBLEdBQUFyYSxFQUFBLEdBQUE7QUFBQSxnQkFBQW5HLEtBQUFtRztBQUFBLGdCQUFBLEdBQUFuRyxFQUFBLEdBQUE7QUFBQSxrQkFBQXVlLElBQUE3ZixLQUFBLEdBQUE2ZixLQUFBdmUsR0FBQSxPQUFBLENBQUEsRUFBQSxPQUFBLEdBQUFBLEdBQUEsU0FBQSxDQUFBLEVBQUEsTUFBQSxHQUFBLENBQUEsRUFBQSxLQUFBdWUsSUFBQSxTQUFBcFksSUFBQTtBQUFBLHVCQUFBLEdBQUFBLEVBQUE7Y0FBQSxDQUFBO0FBQUEsY0FBQW5HLEtBQUEsR0FBQXRCLEdBQUEsQ0FBQSxHQUFBQSxHQUFBLENBQUEsR0FBQUEsR0FBQSxDQUFBLENBQUE7WUFBQTtBQUFBLGdCQUFBLFNBQUEsR0FBQXNCLEVBQUEsR0FBQTtBQUFBLGtCQUFBeUMsS0FBQSxTQUFBMEQsSUFBQTtBQUFBLG9CQUFBcWEsS0FBQSxHQUFBcmEsRUFBQTtBQUFBLG9CQUFBLENBQUFxYTtBQUFBLHdCQUFBLElBQUEsVUFBQSxJQUFBLE9BQUFyYSxJQUFBLHlCQUFBLENBQUE7QUFBQSx1QkFBQSxHQUFBcWEsR0FBQSxHQUFBQSxHQUFBLEdBQUFBLEdBQUEsQ0FBQTtjQUFBLEVBQUF4Z0IsRUFBQSxHQUFBK0YsS0FBQSxFQUFBLEdBQUF0RCxHQUFBLEdBQUEsR0FBQSxNQUFBQSxHQUFBLEdBQUEsR0FBQSxLQUFBLElBQUEsR0FBQSxPQUFBQSxHQUFBLENBQUEsRUFBQSxHQUFBcEksS0FBQSxFQUFBLEdBQUFvSSxHQUFBLEdBQUEsR0FBQSxLQUFBLElBQUEsR0FBQSxPQUFBQSxHQUFBLENBQUEsR0FBQSxHQUFBLE1BQUFBLEdBQUEsRUFBQSxHQUFBTyxLQUFBLEdBQUEzSSxHQUFBLEdBQUFBLEdBQUEsR0FBQUEsR0FBQSxDQUFBLEdBQUE4Z0MsS0FBQSxHQUFBcDFCLEdBQUEsR0FBQUEsR0FBQSxHQUFBQSxHQUFBLENBQUE7QUFBQSxxQkFBQSxFQUFBLFlBQUEvRixJQUFBLFFBQUFnRCxJQUFBLFdBQUEsRUFBQSxZQUFBbTRCLElBQUEsUUFBQW40QixHQUFBLEdBQUEsT0FBQSxFQUFBLFlBQUFtNEIsSUFBQSxRQUFBbjRCLEdBQUEsRUFBQTtZQUFBO0FBQUEsbUJBQUEsRUFBQSxZQUFBaEQsSUFBQSxRQUFBQSxJQUFBLFdBQUEsRUFBQSxZQUFBQSxJQUFBLFFBQUFBLEdBQUEsR0FBQSxPQUFBLEVBQUEsWUFBQUEsSUFBQSxRQUFBQSxHQUFBLEVBQUE7VUFBQTtBQUFBLGlCQUFBd2dCLEtBQUEsRUFBQSxZQUFBcmEsR0FBQSxjQUFBcWEsR0FBQSxZQUFBLFFBQUFyYSxHQUFBLFVBQUFxYSxHQUFBLFFBQUEsV0FBQSxHQUFBcmEsR0FBQSxTQUFBLElBQUEsRUFBQSxRQUFBQSxHQUFBLFdBQUEsWUFBQUEsR0FBQSxVQUFBLElBQUEsRUFBQSxZQUFBQSxHQUFBLGFBQUFBLEdBQUEsVUFBQSxjQUFBcWEsR0FBQSxVQUFBLFlBQUEsUUFBQXJhLEdBQUEsYUFBQUEsR0FBQSxVQUFBLFVBQUFxYSxHQUFBLFVBQUEsT0FBQSxHQUFBLE9BQUEsR0FBQXJhLEdBQUEsS0FBQSxJQUFBLEVBQUEsUUFBQUEsR0FBQSxPQUFBLFlBQUFBLEdBQUEsTUFBQSxJQUFBLEVBQUEsUUFBQUEsR0FBQSxTQUFBQSxHQUFBLE1BQUEsVUFBQXFhLEdBQUEsTUFBQSxRQUFBLFlBQUFyYSxHQUFBLFNBQUFBLEdBQUEsTUFBQSxjQUFBcWEsR0FBQSxNQUFBLFdBQUEsRUFBQSxJQUFBLEVBQUEsWUFBQXJhLEdBQUEsY0FBQSxRQUFBLFFBQUFBLEdBQUEsVUFBQSxRQUFBLFdBQUEsR0FBQUEsR0FBQSxTQUFBLElBQUEsRUFBQSxRQUFBQSxHQUFBLFdBQUEsWUFBQUEsR0FBQSxVQUFBLElBQUEsRUFBQSxZQUFBQSxHQUFBLGFBQUFBLEdBQUEsVUFBQSxjQUFBLFFBQUEsUUFBQUEsR0FBQSxhQUFBQSxHQUFBLFVBQUEsVUFBQSxPQUFBLEdBQUEsT0FBQSxHQUFBQSxHQUFBLEtBQUEsSUFBQSxFQUFBLFFBQUFBLEdBQUEsT0FBQSxZQUFBQSxHQUFBLE1BQUEsSUFBQSxFQUFBLFFBQUFBLEdBQUEsU0FBQUEsR0FBQSxNQUFBLFVBQUEsUUFBQSxZQUFBQSxHQUFBLFNBQUFBLEdBQUEsTUFBQSxjQUFBLE9BQUEsRUFBQTtRQUFBO0FBQUEsaUJBQUEsR0FBQUEsSUFBQXFhLElBQUF4Z0IsSUFBQTtBQUFBLFVBQUFtRyxNQUFBLEtBQUFxYSxNQUFBLEtBQUF4Z0IsTUFBQTtBQUFBLGNBQUF1ZSxLQUFBLEtBQUEsSUFBQXBZLElBQUEsS0FBQSxJQUFBcWEsSUFBQXhnQixFQUFBLENBQUEsR0FBQXRCLEtBQUEsS0FBQSxJQUFBeUgsSUFBQSxLQUFBLElBQUFxYSxJQUFBeGdCLEVBQUEsQ0FBQTtBQUFBLGlCQUFBdWUsT0FBQTdmLEtBQUEsRUFBQSxHQUFBLEdBQUEsR0FBQSxHQUFBLEdBQUE2ZixHQUFBLElBQUEsRUFBQSxHQUFBLE9BQUFwWSxPQUFBb1ksS0FBQSxJQUFBdmUsT0FBQXVlLEtBQUEsSUFBQSxNQUFBcFksT0FBQW9ZLEtBQUFpQyxLQUFBeGdCLEtBQUFBLE9BQUF1ZSxLQUFBcFksS0FBQXFhLEtBQUF4Z0IsS0FBQW1HLE9BQUF6SCxLQUFBNmYsT0FBQSxLQUFBLElBQUE3ZixLQUFBNmYsTUFBQTdmLElBQUEsR0FBQUEsR0FBQTtRQUFBO0FBQUEsaUJBQUEsR0FBQXlILElBQUFxYSxJQUFBeGdCLElBQUE7QUFBQSxjQUFBdWUsSUFBQTdmLElBQUErRCxJQUFBc0QsS0FBQSxLQUFBLE1BQUEsSUFBQUksRUFBQSxHQUFBOUwsS0FBQSxJQUFBOEwsS0FBQUosSUFBQS9DLEtBQUFoRCxNQUFBLElBQUF3Z0IsS0FBQTJhLEtBQUFuN0IsTUFBQSxJQUFBM0YsS0FBQW1tQixLQUFBRixLQUFBdGdCLE1BQUEsS0FBQSxJQUFBM0YsTUFBQW1tQjtBQUFBLGtCQUFBemEsS0FBQSxHQUFBO1lBQUEsS0FBQTtBQUFBLGNBQUF3WSxLQUFBdmUsSUFBQXRCLEtBQUE0aEIsSUFBQTdkLEtBQUFPO0FBQUE7WUFBQSxLQUFBO0FBQUEsY0FBQXViLEtBQUE0YyxJQUFBejhCLEtBQUFzQixJQUFBeUMsS0FBQU87QUFBQTtZQUFBLEtBQUE7QUFBQSxjQUFBdWIsS0FBQXZiLElBQUF0RSxLQUFBc0IsSUFBQXlDLEtBQUE2ZDtBQUFBO1lBQUEsS0FBQTtBQUFBLGNBQUEvQixLQUFBdmIsSUFBQXRFLEtBQUF5OEIsSUFBQTE0QixLQUFBekM7QUFBQTtZQUFBLEtBQUE7QUFBQSxjQUFBdWUsS0FBQStCLElBQUE1aEIsS0FBQXNFLElBQUFQLEtBQUF6QztBQUFBO1lBQUEsS0FBQTtBQUFBLGNBQUF1ZSxLQUFBdmUsSUFBQXRCLEtBQUFzRSxJQUFBUCxLQUFBMDRCO1VBQUE7QUFBQSxpQkFBQSxFQUFBLEdBQUEsS0FBQSxNQUFBLE1BQUE1YyxFQUFBLEdBQUEsR0FBQSxLQUFBLE1BQUEsTUFBQTdmLEVBQUEsR0FBQSxHQUFBLEtBQUEsTUFBQSxNQUFBK0QsRUFBQSxFQUFBO1FBQUE7QUFBQSxpQkFBQSxHQUFBMEQsSUFBQXFhLElBQUF4Z0IsSUFBQTtBQUFBLGNBQUF1ZSxLQUFBLEdBQUFwWSxJQUFBcWEsSUFBQXhnQixFQUFBO0FBQUEsaUJBQUEsR0FBQXVlLEdBQUEsR0FBQUEsR0FBQSxHQUFBQSxHQUFBLENBQUE7UUFBQTtBQUFBLGlCQUFBLEdBQUFwWSxJQUFBO0FBQUEsaUJBQUEscUNBQUEsS0FBQUEsRUFBQTtRQUFBO0FBQUEsaUJBQUEsR0FBQUEsSUFBQTtBQUFBLGlCQUFBLEdBQUEsS0FBQUEsRUFBQTtRQUFBO0FBQUEsaUJBQUEsR0FBQUEsSUFBQTtBQUFBLGNBQUEsU0FBQUEsTUFBQSxhQUFBLEdBQUFBLEVBQUE7QUFBQSxtQkFBQTtBQUFBLGNBQUFBLGNBQUE7QUFBQSxtQkFBQUE7QUFBQSxjQUFBcWEsS0FBQSxHQUFBcmEsRUFBQTtBQUFBLG1CQUFBbkcsTUFBQW1HO0FBQUEsbUJBQUEsVUFBQSxlQUFBLEtBQUFBLElBQUFuRyxFQUFBLEtBQUEsWUFBQSxHQUFBbUcsR0FBQW5HLEVBQUEsQ0FBQSxNQUFBd2dCLEdBQUF4Z0IsRUFBQSxJQUFBLEdBQUFtRyxHQUFBbkcsRUFBQSxDQUFBO0FBQUEsaUJBQUF3Z0I7UUFBQTtBQUFBLGlCQUFBLEdBQUFyYSxJQUFBcWEsSUFBQXhnQixJQUFBO0FBQUEsY0FBQXVlLEtBQUEsVUFBQSxTQUFBLEtBQUEsV0FBQSxVQUFBLENBQUEsSUFBQSxVQUFBLENBQUEsSUFBQSxDQUFBLEdBQUE3ZixLQUFBLFNBQUF5SCxJQUFBO0FBQUEsbUJBQUEsUUFBQUE7VUFBQSxHQUFBMUQsS0FBQSxTQUFBMEQsSUFBQTtBQUFBLG1CQUFBLFNBQUFBLE1BQUEsYUFBQSxHQUFBQSxFQUFBO1VBQUE7QUFBQSxjQUFBLENBQUExRCxHQUFBMEQsRUFBQTtBQUFBLGtCQUFBLElBQUEsTUFBQSx5Q0FBQTtBQUFBLGNBQUEsQ0FBQTFELEdBQUErZCxFQUFBO0FBQUEsa0JBQUEsSUFBQSxNQUFBLHFDQUFBO0FBQUEsY0FBQSxDQUFBOWhCLEdBQUFzQixFQUFBO0FBQUEsa0JBQUEsSUFBQSxNQUFBLG9DQUFBO0FBQUEsY0FBQSxDQUFBeUMsR0FBQThiLEVBQUE7QUFBQSxrQkFBQSxJQUFBLE1BQUEsMkNBQUE7QUFBQSxjQUFBeFksS0FBQXlhLEdBQUF4Z0IsRUFBQSxHQUFBM0YsS0FBQW9JLEdBQUE4YixFQUFBLEtBQUEsQ0FBQSxTQUFBcFksSUFBQTtBQUFBLHFCQUFBcWEsTUFBQXJhO0FBQUEsa0JBQUEsT0FBQSxVQUFBLGVBQUEsS0FBQUEsSUFBQXFhLEVBQUE7QUFBQSx1QkFBQTtBQUFBLG1CQUFBO1VBQUEsRUFBQWpDLEVBQUEsSUFBQUEsR0FBQXZlLEVBQUEsSUFBQSxRQUFBZ0QsS0FBQTNJLEtBQUFBLEdBQUEsVUFBQTtBQUFBLGNBQUEsV0FBQTBMLElBQUE7QUFBQSxnQkFBQSxhQUFBLE9BQUFBO0FBQUEscUJBQUF0RCxHQUFBMEQsR0FBQW5HLEVBQUEsQ0FBQSxNQUFBbUcsR0FBQW5HLEVBQUEsSUFBQSxDQUFBLElBQUEsTUFBQW1HLEdBQUFuRyxFQUFBLEVBQUEsVUFBQStGO0FBQUEsZ0JBQUEsU0FBQUEsTUFBQSxDQUFBdEQsR0FBQTBELEdBQUFuRyxFQUFBLENBQUEsR0FBQTtBQUFBLGtCQUFBLENBQUF0QixHQUFBckUsRUFBQTtBQUFBO0FBQUEsY0FBQThMLEdBQUFuRyxFQUFBLElBQUEsR0FBQTNGLEVBQUE7WUFBQTtBQUFBLGdCQUFBb0ksR0FBQXNELEVBQUEsR0FBQTtBQUFBLGtCQUFBbzFCLEtBQUE7QUFBQSx5QkFBQXAxQixHQUFBLFVBQUFvMUIsS0FBQXAxQixHQUFBLFVBQUEsV0FBQS9DLE9BQUFtNEIsS0FBQTlnQyxHQUFBLFVBQUEsU0FBQThMLElBQUFxYSxJQUFBeGdCLElBQUE7QUFBQSxnQkFBQXlDLEdBQUEwRCxHQUFBbkcsRUFBQSxDQUFBLE1BQUFtRyxHQUFBbkcsRUFBQSxJQUFBLENBQUE7QUFBQSxvQkFBQXVlLEtBQUFpQyxHQUFBeGdCLEVBQUEsR0FBQXRCLEtBQUF5SCxHQUFBbkcsRUFBQTtBQUFBLHlCQUFBK0YsTUFBQXdZO0FBQUEseUJBQUEsVUFBQSxlQUFBLEtBQUFBLElBQUF4WSxFQUFBLE1BQUFySCxHQUFBcUgsRUFBQSxJQUFBd1ksR0FBQXhZLEVBQUE7Y0FBQSxFQUFBSSxJQUFBcWEsSUFBQXhnQixFQUFBLEdBQUFtRyxHQUFBbkcsRUFBQSxFQUFBLFVBQUFtN0I7WUFBQTtVQUFBO1FBQUE7QUFBQSxZQUFBLEtBQUEsRUFBQSxRQUFBLFNBQUFoMUIsSUFBQTtBQUFBLGlCQUFBQTtRQUFBLEdBQUEsWUFBQSxTQUFBQSxJQUFBO0FBQUEsaUJBQUFBLEtBQUFBO1FBQUEsR0FBQSxhQUFBLFNBQUFBLElBQUE7QUFBQSxpQkFBQUEsTUFBQSxJQUFBQTtRQUFBLEdBQUEsZUFBQSxTQUFBQSxJQUFBO0FBQUEsaUJBQUFBLEtBQUEsTUFBQSxJQUFBQSxLQUFBQSxNQUFBLElBQUEsSUFBQUEsTUFBQUEsS0FBQTtRQUFBLEdBQUEsYUFBQSxTQUFBQSxJQUFBO0FBQUEsaUJBQUFBLEtBQUFBLEtBQUFBO1FBQUEsR0FBQSxjQUFBLFNBQUFBLElBQUE7QUFBQSxpQkFBQSxFQUFBQSxLQUFBQSxLQUFBQSxLQUFBO1FBQUEsR0FBQSxnQkFBQSxTQUFBQSxJQUFBO0FBQUEsaUJBQUFBLEtBQUEsTUFBQSxJQUFBQSxLQUFBQSxLQUFBQSxNQUFBQSxLQUFBLE1BQUEsSUFBQUEsS0FBQSxNQUFBLElBQUFBLEtBQUEsS0FBQTtRQUFBLEdBQUEsYUFBQSxTQUFBQSxJQUFBO0FBQUEsaUJBQUFBLEtBQUFBLEtBQUFBLEtBQUFBO1FBQUEsR0FBQSxjQUFBLFNBQUFBLElBQUE7QUFBQSxpQkFBQSxJQUFBLEVBQUFBLEtBQUFBLEtBQUFBLEtBQUFBO1FBQUEsR0FBQSxnQkFBQSxTQUFBQSxJQUFBO0FBQUEsaUJBQUFBLEtBQUEsTUFBQSxJQUFBQSxLQUFBQSxLQUFBQSxLQUFBQSxLQUFBLElBQUEsSUFBQSxFQUFBQSxLQUFBQSxLQUFBQSxLQUFBQTtRQUFBLEdBQUEsYUFBQSxTQUFBQSxJQUFBO0FBQUEsaUJBQUFBLEtBQUFBLEtBQUFBLEtBQUFBLEtBQUFBO1FBQUEsR0FBQSxjQUFBLFNBQUFBLElBQUE7QUFBQSxpQkFBQSxJQUFBLEVBQUFBLEtBQUFBLEtBQUFBLEtBQUFBLEtBQUFBO1FBQUEsR0FBQSxnQkFBQSxTQUFBQSxJQUFBO0FBQUEsaUJBQUFBLEtBQUEsTUFBQSxLQUFBQSxLQUFBQSxLQUFBQSxLQUFBQSxLQUFBQSxLQUFBLElBQUEsS0FBQSxFQUFBQSxLQUFBQSxLQUFBQSxLQUFBQSxLQUFBQTtRQUFBLEVBQUE7QUFBQSxpQkFBQSxHQUFBQSxJQUFBcWEsSUFBQTtBQUFBLGNBQUF4Z0I7QUFBQSxhQUFBd2dCLEVBQUEsTUFBQUEsS0FBQSxDQUFBQSxFQUFBO0FBQUEsY0FBQWpDLElBQUE3ZixLQUFBLEdBQUF5SCxFQUFBO0FBQUEsY0FBQTtBQUFBLGlCQUFBekgsR0FBQSxFQUFBLEdBQUEsRUFBQTZmLEtBQUE3ZixHQUFBLEVBQUEsR0FBQSxRQUFBO0FBQUEsa0JBQUErRCxLQUFBOGIsR0FBQTtBQUFBLGtCQUFBOWIsSUFBQTtBQUFBLGdCQUFBekMsS0FBQXlDLEdBQUErZCxHQUFBLENBQUEsQ0FBQTtBQUFBLHlCQUFBemEsS0FBQSxHQUFBQSxLQUFBeWEsR0FBQSxRQUFBemE7QUFBQSxrQkFBQS9GLE9BQUFBLEtBQUFBLEdBQUF3Z0IsR0FBQXphLEVBQUEsQ0FBQTtBQUFBLG9CQUFBLFdBQUEvRjtBQUFBO2NBQUE7WUFBQTtVQUFBLFNBQUFtRyxJQUFBO0FBQUEsWUFBQXpILEdBQUEsRUFBQXlILEVBQUE7VUFBQSxVQUFBO0FBQUEsWUFBQXpILEdBQUEsRUFBQTtVQUFBO0FBQUEsaUJBQUFzQjtRQUFBO0FBQUEsWUFBQSxLQUFBLEVBQUEsT0FBQSxXQUFBLE1BQUEsV0FBQSxVQUFBLFdBQUEsWUFBQSxXQUFBLE1BQUEsV0FBQSxXQUFBLFdBQUEsT0FBQSxXQUFBLE1BQUEsV0FBQSxVQUFBLFdBQUEsYUFBQSxXQUFBLGVBQUEsV0FBQSxtQkFBQSxXQUFBLE1BQUEsV0FBQSxhQUFBLFdBQUEsTUFBQSxXQUFBLE1BQUEsV0FBQSxjQUFBLFdBQUEsWUFBQSxXQUFBLGVBQUEsV0FBQSxhQUFBLFdBQUEsVUFBQSxXQUFBLGVBQUEsV0FBQSxXQUFBLFdBQUEsZ0JBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxlQUFBLFdBQUEsaUJBQUEsV0FBQSxRQUFBLFdBQUEsZ0JBQUEsV0FBQSxXQUFBLFdBQUEsZ0JBQUEsV0FBQSxrQkFBQSxXQUFBLFNBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxnQkFBQSxXQUFBLGlCQUFBLFdBQUEsV0FBQSxXQUFBLFlBQUEsV0FBQSxZQUFBLFdBQUEsUUFBQSxXQUFBLFFBQUEsV0FBQSxPQUFBLFdBQUEsTUFBQSxXQUFBLFNBQUEsV0FBQSxjQUFBLFdBQUEsWUFBQSxXQUFBLFNBQUEsV0FBQSxhQUFBLFdBQUEsYUFBQSxXQUFBLGNBQUEsV0FBQSxZQUFBLFdBQUEsY0FBQSxXQUFBLFlBQUEsV0FBQSxXQUFBLFdBQUEsWUFBQSxXQUFBLGFBQUEsV0FBQSxRQUFBLFdBQUEsT0FBQSxXQUFBLFVBQUEsV0FBQSxXQUFBLFdBQUEsYUFBQSxXQUFBLGVBQUEsV0FBQSxnQkFBQSxXQUFBLFlBQUEsV0FBQSxXQUFBLFdBQUEsZUFBQSxXQUFBLGNBQUEsV0FBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFFBQUEsV0FBQSxpQkFBQSxXQUFBLFdBQUEsV0FBQSxNQUFBLFdBQUEsV0FBQSxXQUFBLEtBQUEsV0FBQSxXQUFBLFdBQUEsZUFBQSxXQUFBLFNBQUEsV0FBQSxRQUFBLFdBQUEsV0FBQSxXQUFBLFNBQUEsV0FBQSxXQUFBLFdBQUEsTUFBQSxXQUFBLFdBQUEsV0FBQSxXQUFBLFdBQUEsVUFBQSxXQUFBLFlBQUEsV0FBQSxRQUFBLFdBQUEsZUFBQSxXQUFBLFlBQUEsV0FBQSxPQUFBLFdBQUEsV0FBQSxXQUFBLFVBQUEsV0FBQSxPQUFBLFdBQUEsWUFBQSxXQUFBLE9BQUEsV0FBQSxPQUFBLFdBQUEsWUFBQSxXQUFBLFdBQUEsV0FBQSxZQUFBLFdBQUEsUUFBQSxXQUFBLGNBQUEsV0FBQSxPQUFBLFdBQUEsc0JBQUEsV0FBQSxTQUFBLFdBQUEsS0FBQSxXQUFBLFNBQUEsV0FBQSxTQUFBLFdBQUEsVUFBQSxXQUFBLFdBQUEsV0FBQSxRQUFBLFdBQUEsU0FBQSxXQUFBLE9BQUEsV0FBQSxZQUFBLFdBQUEsYUFBQSxXQUFBLFFBQUEsV0FBQSxXQUFBLFdBQUEsTUFBQSxXQUFBLE1BQUEsV0FBQSxXQUFBLFdBQUEsYUFBQSxXQUFBLFVBQUEsV0FBQSxRQUFBLFdBQUEsV0FBQSxXQUFBLGdCQUFBLFdBQUEsWUFBQSxXQUFBLGVBQUEsV0FBQSxVQUFBLFdBQUEsVUFBQSxXQUFBLGNBQUEsV0FBQSxhQUFBLFdBQUEsTUFBQSxXQUFBLFFBQUEsV0FBQSxhQUFBLFdBQUEsT0FBQSxXQUFBLE9BQUEsVUFBQSxHQUFBLEtBQUEsV0FBQTtBQUFBLG1CQUFBbUcsS0FBQTtBQUFBLGdCQUFBcWEsS0FBQSxVQUFBLFNBQUEsS0FBQSxXQUFBLFVBQUEsQ0FBQSxJQUFBLFVBQUEsQ0FBQSxJQUFBO0FBQUEsZUFBQSxNQUFBcmEsRUFBQSxHQUFBLEtBQUEsYUFBQXFhLElBQUEsS0FBQSxZQUFBLE9BQUEsS0FBQSxvQkFBQSxFQUFBLEdBQUEsT0FBQSxHQUFBLE1BQUEsR0FBQSxLQUFBLElBQUEsTUFBQSxNQUFBLEtBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxHQUFBLEtBQUEsR0FBQSxLQUFBLEdBQUEsRUFBQSxHQUFBLEtBQUEsWUFBQSxRQUFBLEtBQUEsZUFBQSxFQUFBLEdBQUEsS0FBQSxHQUFBLEtBQUEsR0FBQSxLQUFBLEdBQUEsRUFBQSxHQUFBLEtBQUEsZ0JBQUEsUUFBQSxLQUFBLFVBQUEsT0FBQSxLQUFBLGlCQUFBLFdBQUE7WUFBQSxHQUFBLEtBQUEsZ0JBQUEsV0FBQTtZQUFBLEdBQUEsS0FBQSxRQUFBO1VBQUE7QUFBQSxpQkFBQSxHQUFBcmEsSUFBQSxDQUFBLEVBQUEsS0FBQSxZQUFBLE9BQUEsU0FBQUEsSUFBQTtBQUFBLHVCQUFBLEtBQUEsV0FBQSxLQUFBLE9BQUEsUUFBQSxHQUFBLEtBQUEsU0FBQSxTQUFBLEtBQUEsWUFBQUEsSUFBQSxLQUFBLFVBQUEsWUFBQSxLQUFBLEtBQUEsR0FBQSxLQUFBLFlBQUEsR0FBQSxLQUFBLFNBQUE7VUFBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLHFCQUFBLE9BQUEsU0FBQUEsSUFBQTtBQUFBLGdCQUFBLGNBQUEsT0FBQUE7QUFBQSxvQkFBQSxJQUFBLE1BQUEsNkVBQUE7QUFBQSxpQkFBQSxpQkFBQUE7VUFBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLG9CQUFBLE9BQUEsU0FBQUEsSUFBQTtB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QUEsa0JBQUEsV0FBQSxJQUFBLEVBQUEsYUFBQSxLQUFBLFlBQUEsR0FBQSxHQUFBLEtBQUEsWUFBQSxHQUFBLENBQUE7WUFBQSxPQUFBO0FBQUEsa0JBQUErRCxLQUFBLFNBQUEsY0FBQSxLQUFBO0FBQUEsY0FBQUEsR0FBQSxNQUFBLFFBQUEsT0FBQUEsR0FBQSxNQUFBLGFBQUEsUUFBQUEsR0FBQSxNQUFBLFVBQUEsUUFBQUEsR0FBQSxZQUFBLG9EQUFBLEtBQUEsa0JBQUEsWUFBQUEsRUFBQTtZQUFBO0FBQUEsaUJBQUEsZUFBQSxZQUFBLGFBQUEsS0FBQSxhQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxXQUFBLFlBQUEsZUFBQSxLQUFBLGdCQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxjQUFBLFlBQUEsa0JBQUEsS0FBQSxXQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxTQUFBLFlBQUEsYUFBQSxLQUFBLGVBQUEsU0FBQSxjQUFBLE9BQUE7QUFBQSxnQkFBQTtBQUFBLG1CQUFBLGFBQUEsT0FBQSxTQUFBLEtBQUEsYUFBQSxNQUFBLEtBQUEsS0FBQSxhQUFBLE1BQUE7WUFBQSxTQUFBMEQsSUFBQTtZQUFBO0FBQUEsaUJBQUEsYUFBQSxRQUFBLE9BQUEsS0FBQSxhQUFBLFlBQUEsYUFBQSxLQUFBLGtCQUFBLFNBQUEsY0FBQSxPQUFBO0FBQUEsZ0JBQUE7QUFBQSxtQkFBQSxnQkFBQSxPQUFBLFNBQUEsS0FBQSxnQkFBQSxNQUFBLEtBQUEsS0FBQSxnQkFBQSxNQUFBO1lBQUEsU0FBQUEsSUFBQTtZQUFBO0FBQUEsaUJBQUEsZ0JBQUEsUUFBQSxPQUFBLEtBQUEsZ0JBQUEsWUFBQSxhQUFBLEtBQUEsV0FBQSxZQUFBLEtBQUEsWUFBQSxHQUFBLEtBQUEsY0FBQSxZQUFBLEtBQUEsZUFBQTtBQUFBLGdCQUFBSixLQUFBO0FBQUEsaUJBQUEsYUFBQSxXQUFBLFdBQUE7QUFBQSxjQUFBQSxHQUFBLFlBQUEsS0FBQSxLQUFBO1lBQUEsR0FBQSxLQUFBLGFBQUEsVUFBQSxXQUFBO0FBQUEsY0FBQUEsR0FBQSxZQUFBLEtBQUEsS0FBQTtZQUFBLEdBQUEsS0FBQSxnQkFBQSxXQUFBLFdBQUE7QUFBQSxjQUFBQSxHQUFBLGVBQUEsS0FBQSxLQUFBO1lBQUEsR0FBQSxLQUFBLGdCQUFBLFVBQUEsV0FBQTtBQUFBLGNBQUFBLEdBQUEsZUFBQSxLQUFBLEtBQUE7WUFBQSxHQUFBLEtBQUEsa0JBQUEsU0FBQSxjQUFBLEtBQUEsR0FBQSxLQUFBLGdCQUFBLFlBQUEsNEJBQUEsS0FBQSxnQkFBQSxZQUFBLGVBQUEsS0FBQSxlQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxhQUFBLFlBQUEseUJBQUEsS0FBQSxhQUFBLFlBQUEsWUFBQSxLQUFBLGNBQUEsU0FBQSxjQUFBLEtBQUEsR0FBQSxLQUFBLFlBQUEsWUFBQSxpQkFBQSxLQUFBLFlBQUEsWUFBQSxPQUFBLEtBQUEsa0JBQUEsU0FBQSxjQUFBLEtBQUEsR0FBQSxLQUFBLGdCQUFBLFlBQUEscUJBQUEsS0FBQSxnQkFBQSxZQUFBLFdBQUEsS0FBQSxlQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxhQUFBLFlBQUEseUJBQUEsS0FBQSxhQUFBLFlBQUEsVUFBQSxLQUFBLGFBQUEsVUFBQSxHQUFBSSxLQUFBLEtBQUEsS0FBQSxFQUFBLEtBQUFBLElBQUEsTUFBQSxLQUFBLEdBQUEsS0FBQSxjQUFBLFNBQUEsY0FBQSxLQUFBLEdBQUEsS0FBQSxZQUFBLFlBQUEsd0JBQUEsS0FBQSxZQUFBLFlBQUEsU0FBQSxLQUFBLFlBQUEsVUFBQSxHQUFBcWEsS0FBQSxLQUFBLE1BQUEsRUFBQSxLQUFBQSxJQUFBLElBQUEsR0FBQSxLQUFBLGFBQUEsU0FBQSxjQUFBLEtBQUEsR0FBQSxLQUFBLFdBQUEsWUFBQSx1QkFBQSxLQUFBLFdBQUEsWUFBQSxRQUFBLEtBQUEsV0FBQSxVQUFBLEdBQUF4Z0IsS0FBQSxLQUFBLEtBQUEsRUFBQSxLQUFBQSxJQUFBLElBQUEsR0FBQSxLQUFBLGFBQUEsU0FBQSxjQUFBLEtBQUEsR0FBQSxLQUFBLFdBQUEsWUFBQSx1QkFBQSxLQUFBLFdBQUEsWUFBQSxhQUFBLEtBQUEsV0FBQSxVQUFBLEdBQUF1ZSxLQUFBLEtBQUEsU0FBQSxFQUFBLEtBQUFBLElBQUEsSUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsY0FBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsUUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsZUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsYUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsWUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsVUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsV0FBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsZUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsWUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsV0FBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsVUFBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLEtBQUEsVUFBQTtVQUFBLEVBQUEsR0FBQSxFQUFBLEtBQUEsZUFBQSxPQUFBLFdBQUE7QUFBQSxnQkFBQXBZLEtBQUE7QUFBQSxpQkFBQSxPQUFBLENBQUEsR0FBQSxLQUFBLFFBQUEsQ0FBQSxHQUFBLEtBQUEsU0FBQSxJQUFBLEdBQUEsS0FBQSxpQkFBQSxHQUFBLEtBQUEsT0FBQSxJQUFBLE9BQUEsRUFBQSxJQUFBLEVBQUEsUUFBQSxLQUFBLENBQUEsR0FBQSxLQUFBLE9BQUEsR0FBQSxnQkFBQSxTQUFBcWEsSUFBQTtBQUFBLGNBQUFBLEdBQUEsV0FBQXJhLEdBQUEsY0FBQXFhLEVBQUE7WUFBQSxDQUFBLEdBQUEsS0FBQSxPQUFBLEdBQUEsT0FBQSxTQUFBQSxJQUFBO0FBQUEsY0FBQXJhLEdBQUEsY0FBQXFhLEVBQUE7WUFBQSxDQUFBLEdBQUEsS0FBQSxPQUFBLEdBQUEsWUFBQSxTQUFBQSxJQUFBO0FBQUEsY0FBQXJhLEdBQUEsY0FBQXFhLEVBQUE7WUFBQSxDQUFBLEdBQUEsS0FBQSxPQUFBLEdBQUEs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LFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FHMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUcxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0csT0FBTyxFQUFFRixRQUFRLFdBQVdELFlBQVksVUFBQSxFQUFBLEdBRTFDLEVBQ0VDLFFBQVEsV0FDUkQsWUFBWSxXQUNaRSxXQUFXLEVBQUVELFFBQVEsV0FBV0QsWUFBWSxVQUFBLEdBQzVDRyxPQUFPLEVBQUVGLFFBQVEsV0FBV0QsWUFBWSxVQUFBLEVBQUEsR0FFMUMsRUFDRUMsUUFBUSxXQUNSRCxZQUFZLFdBQ1pFLFdBQVcsRUFBRUQsUUFBUSxXQUFXRCxZQUFZLFVBQUEsR0FDNUNHLE9BQU8sRUFBRUYsUUFBUSxXQUFXRCxZQUFZLFVBQUEsRUFBQSxHQUUxQyxFQUNFQyxRQUFRLFdBQ1JELFlBQVksV0FDWkUsV0FBVyxFQUFFRCxRQUFRLFdBQVdELFlBQVksVUFBQSxHQUM1Q0cs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QUFBLEVBQUFBLEtBQUFBLEdBQUFBLFlBQUFBO0FBQUFBLGNBQUFBLENBQUFBLElBQUFBO0FBQUFBLGdCQUFBQSxHQUFBQSxFQUFBQSxNQUFBQSxLQUFBQSxTQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxrQkFBQUE7QUFBQUEsa0JBQUFBLENBQUFBO0FBQUFBO0FBQUFBLGtCQUFBQSxZQUFBQSxPQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsSUFBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLE9BQUFBLFVBQUFBLFNBQUFBLEtBQUFBLEVBQUFBLENBQUFBLEVBQUFBLEtBQUFBLElBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLDJCQUFBQSxNQUFBQSxHQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsWUFBQUE7QUFBQUEsa0JBQUFBLFVBQUFBLE1BQUFBLFVBQUFBO0FBQUFBLHVCQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxrQkFBQUEsZ0JBQUFBLE1BQUFBLDJDQUFBQSxLQUFBQSxFQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsSUFBQUEsRUFBQUE7WUFBQUEsRUFBQUEsRUFBQUEsTUFBQUEsTUFBQUEsTUFBQUEsWUFBQUEsT0FBQUEsR0FBQUEsUUFBQUE7QUFBQUEsY0FBQUEsT0FBQUEsS0FBQUE7QUFBQUEsa0JBQUFBLEtBQUFBLEdBQUFBLEtBQUFBLFdBQUFBO2NBQUFBO0FBQUFBLHFCQUFBQSxFQUFBQSxHQUFBQSxJQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSx1QkFBQUEsTUFBQUEsR0FBQUEsU0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEsSUFBQUEsRUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsSUFBQUEsRUFBQUE7Y0FBQUEsR0FBQUEsR0FBQUEsU0FBQUEsSUFBQUE7QUFBQUEsc0JBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLEdBQUFBO1lBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxVQUFBQSx1SUFBQUE7VUFBQUE7QUFBQUEsY0FBQUEsSUFBQUEsS0FBQUEsTUFBQUEsS0FBQUE7QUFBQUEs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RUNOaUJELEVBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxXQUFBQSxNQUFBQSxHQUFBQSxFQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxjQUFBQSxDQUFBQSxJQUFBQTtBQUFBQSxnQkFBQUEsR0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEsU0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsa0JBQUFBO0FBQUFBLGtCQUFBQSxDQUFBQTtBQUFBQTtBQUFBQSxrQkFBQUEsWUFBQUEsT0FBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxPQUFBQSxVQUFBQSxTQUFBQSxLQUFBQSxFQUFBQSxDQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSwyQkFBQUEsTUFBQUEsR0FBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLFlBQUFBO0FBQUFBLGtCQUFBQSxVQUFBQSxNQUFBQSxVQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLGdCQUFBQSxNQUFBQSwyQ0FBQUEsS0FBQUEsRUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO1lBQUFBLEVBQUFBLEVBQUFBLE1BQUFBLE1BQUFBLE1BQUFBLFlBQUFBLE9BQUFBLEdBQUFBLFFBQUFBO0FBQUFBLGNBQUFBLE9BQUFBLEtBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxXQUFBQTtjQUFBQTtBQUFBQSxxQkFBQUEsRUFBQUEsR0FBQUEsSUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsdUJBQUFBLE1BQUFBLEdBQUFBLFNBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLElBQUFBLEVBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLElBQUFBLEVBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHNCQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtZQUFBQTtBQUFB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QUFnMUIsSUFBQSxDQUFBLEdBQUlLLEtBQUdELEdBQUEsQ0FBQSxHQUFFRSxLQUFLRixHQUFBLENBQUE7QUFBQSx1QkFDOUI3M0IsR0FBUzQzQixJQUFPRyxJQUFPSixJQUFLRyxFQUFBQTtjQUM3QixDQUFBLENBQUE7WUFBQSxFQUFBLENBQUE7VUFHVCxFQUFBLENBQUEsQ0FBQSxHQUFDN0Q7UUFBQSxFQUFBMkIsRUFBQUE7QUFBQUEsaUJBQUFBLEdBQUFBLElBQUFBLElBQUFBO0FBQUFBLGNBQUFBLEtBQUFBLEdBQUFBLEVBQUFBO0FBQUFBLGNBQUFBLElBQUFBO0FBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSxZQUFBQSxPQUFBQSxLQUFBQSxHQUFBQSxFQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxxQkFBQUEsR0FBQUEsSUFBQUEsRUFBQUEsRUFBQUE7WUFBQUEsQ0FBQUEsSUFBQUEsR0FBQUEsS0FBQUEsTUFBQUEsSUFBQUEsRUFBQUE7VUFBQUE7QUFBQUEsaUJBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsVUFBQUEsUUFBQUEsTUFBQUE7QUFBQUEsZ0JBQUFBLElBQUFBLElBQUFBLEtBQUFBLFFBQUFBLFVBQUFBLEVBQUFBLElBQUFBLFVBQUFBLEVBQUFBLElBQUFBLENBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLElBQUFBLEdBQUFBLEtBQUFBLEdBQUFBLE9BQUFBLEVBQUFBLEdBQUFBLElBQUFBLENBQUFBLEVBQUFBLEtBQUFBLElBQUFBLFNBQUFBLElBQUFBO0FBQUFBLGlCQUFBQSxJQUFBQSxJQUFBQSxHQUFBQSxFQUFBQSxDQUFBQTtZQUFBQSxDQUFBQSxJQUFBQSxLQUFBQSxHQUFBQSxJQUFBQSxHQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxPQUFBQSxFQUFBQSxDQUFBQSxDQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxTQUFBQSxJQUFBQTtBQUFBQSxpQkFBQUEsSUFBQUEsSUFBQUEsR0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUE7WUFBQUEsQ0FBQUE7VUFBQUE7QUFBQUEsaUJBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxXQUFBQSxNQUFBQSxHQUFBQSxFQUFBQSxLQUFBQSxHQUFBQSxZQUFBQTtBQUFBQSxjQUFBQSxDQUFBQSxJQUFBQTtBQUFBQSxnQkFBQUEsR0FBQUEsRUFBQUEsTUFBQUEsS0FBQUEsU0FBQUEsSUFBQUEsSUFBQUE7QUFBQUEsa0JBQUFBO0FBQUFBLGtCQUFBQSxDQUFBQTtBQUFBQTtBQUFBQSxrQkFBQUEsWUFBQUEsT0FBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxPQUFBQSxVQUFBQSxTQUFBQSxLQUFBQSxFQUFBQSxDQUFBQSxFQUFBQSxLQUFBQSxJQUFBQSxHQUFBQSxFQUFBQTtBQUFBQSwyQkFBQUEsTUFBQUEsR0FBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLFlBQUFBO0FBQUFBLGtCQUFBQSxVQUFBQSxNQUFBQSxVQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLGdCQUFBQSxNQUFBQSwyQ0FBQUEsS0FBQUEsRUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO1lBQUFBLEVBQUFBLEVBQUFBLE1BQUFBLE1BQUFBLE1BQUFBLFlBQUFBLE9BQUFBLEdBQUFBLFFBQUFBO0FBQUFBLGNBQUFBLE9BQUFBLEtBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxXQUFBQTtjQUFBQTtBQUFBQSxxQkFBQUEsRUFBQUEsR0FBQUEsSUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsdUJBQUFBLE1BQUFBLEdBQUFBLFNBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLElBQUFBLEVBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLElBQUFBLEVBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHNCQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtZQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUEsVUFBQUEsdUlBQUFBO1VBQUFBO0FBQUFBLGNBQUFBLElBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO0FBQUFBLGlCQUFBQSxFQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxFQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLE1BQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQTtBQUFBQSxjQUFBQSxNQUFBQSxRQUFBQSxHQUFBQSxVQUFBQSxHQUFBQSxPQUFBQTtZQUFBQSxVQUFBQTtBQUFBQSxrQkFBQUE7QUFBQUEsc0JBQUFBO1lBQUFBO1VBQUFBLEVBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQSxJQUFBQTtBQUFBQSxXQUFBQSxRQUFBQSxNQUFBQSxLQUFBQSxHQUFBQSxZQUFBQSxLQUFBQSxHQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUEsSUFBQUEsTUFBQUEsRUFBQUEsR0FBQUEsS0FBQUEsSUFBQUE7QUFBQUEsWUFBQUEsR0FBQUEsRUFBQUEsSUFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsaUJBQUFBO1FBQUFBO0FBQUFBLGlCQUFBQSxHQUFBQSxJQUFBQTtBQUFBQSxjQUFBQSxLQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsZUFBQUEsT0FBQUEsV0FBQUEsQ0FBQUE7QUFBQUEscUJBQUFBO0FBQUFBLGdCQUFBQSxHQUFBQTtBQUFBQSxxQkFBQUE7QUFBQUEsZ0JBQUFBLGNBQUFBLE9BQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxnQkFBQUE7QUFB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QSwyQkFBQUEsTUFBQUEsR0FBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLFlBQUFBO0FBQUFBLGtCQUFBQSxVQUFBQSxNQUFBQSxVQUFBQTtBQUFBQSx1QkFBQUEsR0FBQUEsRUFBQUE7QUFBQUEsa0JBQUFBLGdCQUFBQSxNQUFBQSwyQ0FBQUEsS0FBQUEsRUFBQUE7QUFBQUEsdUJBQUFBLEdBQUFBLElBQUFBLEVBQUFBO1lBQUFBLEVBQUFBLEVBQUFBLE1BQUFBLE1BQUFBLE1BQUFBLFlBQUFBLE9BQUFBLEdBQUFBLFFBQUFBO0FBQUFBLGNBQUFBLE9BQUFBLEtBQUFBO0FBQUFBLGtCQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxXQUFBQTtjQUFBQTtBQUFBQSxxQkFBQUEsRUFBQUEsR0FBQUEsSUFBQUEsR0FBQUEsV0FBQUE7QUFBQUEsdUJBQUFBLE1BQUFBLEdBQUFBLFNBQUFBLEVBQUFBLE1BQUFBLEtBQUFBLElBQUFBLEVBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLElBQUFBLEVBQUFBO2NBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLHNCQUFBQTtjQUFBQSxHQUFBQSxHQUFBQSxHQUFBQTtZQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUEsVUFBQUEsdUlBQUFBO1VBQUFBO0FBQUFBLGNBQUFBLElBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO0FBQUFBLGlCQUFBQSxFQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxZQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxFQUFBQTtVQUFBQSxHQUFBQSxHQUFBQSxXQUFBQTtBQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsS0FBQUE7QUFBQUEsbUJBQUFBLEtBQUFBLEdBQUFBLE1BQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFNBQUFBLElBQUFBO0FBQUFBLFlBQUFBLEtBQUFBLE1BQUFBLEtBQUFBO1VBQUFBLEdBQUFBLEdBQUFBLFdBQUFBO0FBQUFBLGdCQUFBQTtBQUFBQSxjQUFBQSxNQUFBQSxRQUFBQSxHQUFBQSxVQUFBQSxHQUFBQSxPQUFBQTtZQUFBQSxVQUFB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LE1BQU0saUJBQWlCO0FBQUEsSUFDckIsVUFBVTtBQUFBLElBQ1Ysb0JBQW9CO0FBQUEsSUFDcEIsWUFBWTtBQUFBLElBQ1osWUFBWTtBQUFBLElBQ1osSUFBSTtBQUFBLElBQ0osU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsNkJBQTZCO0FBQUEsSUFDN0IsV0FBVztBQUFBLElBQ1gsY0FBYztBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFDaEIsYUFBYTtBQUFBLElBQ2IsaUJBQWlCO0FBQUEsSUFDakIsUUFBUTtBQUFBLElBQ1IsaUJBQWlCO0FBQUEsSUFDakIsa0JBQWtCO0FBQUEsSUFDbEIsT0FBTztBQUFBLElBQ1AsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLElBQ2IsVUFBVTtBQUFBLElBQ1YsUUFBUTtBQUFBLElBQ1IsbUJBQW1CO0FBQUEsSUFDbkIsbUJBQW1CO0FBQUEsSUFDbkIsWUFBWTtBQUFBLElBQ1osY0FBYztBQUFBLElBQ2QsaUJBQWlCO0FBQUEsSUFDakIsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1Ysa0JBQWtCO0FBQUEsSUFDbEIsZUFBZTtBQUFBLElBQ2YsNkJBQTZCO0FBQUEsSUFDN0IsZ0JBQWdCO0FBQUEsSUFDaEIsVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sZ0JBQWdCO0FBQUEsSUFDaEIsb0JBQW9CO0FBQUEsSUFDcEIsaUJBQWlCO0FBQUEsSUFDakIsWUFBWTtBQUFBLElBQ1osc0JBQXNCO0FBQUEsSUFDdEIscUJBQXFCO0FBQUEsSUFDckIsbUJBQW1CO0FBQUEsSUFDbkIsV0FBVztBQUFBLElBQ1gsb0JBQW9CO0FBQUEsSUFDcEIscUJBQXFCO0FBQUEsSUFDckIsUUFBUTtBQUFBLElBQ1Isa0JBQWtCO0FBQUEsSUFDbEIsVUFBVTtBQUFBLElBQ1YsaUJBQWlCO0FBQUEsSUFDakIsc0JBQXNCO0FBQUEsSUFDdEIsaUJBQWlCO0FBQUEsSUFDakIsNkJBQTZCO0FBQUEsSUFDN0IsNEJBQTRCO0FBQUEsSUFDNUIscUJBQXFCO0FBQUEsSUFDckIs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Q1g7QUFBQSxNQUNKO0FBQUEsSUFDSixDQUFDO0FBQUEsRUFDTDs7O0FDeEJBLE1BQU0sU0FBUztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsY0FBYztBQUFBLElBQ2QsTUFBTTtBQUFBLElBQ04sWUFBWTtBQUFBLElBQ1osT0FBTztBQUFBLElBQ1AsT0FBTztBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsT0FBTztBQUFBLElBQ1AsZ0JBQWdCO0FBQUEsSUFDaEIsTUFBTTtBQUFBLElBQ04sWUFBWTtBQUFBLElBQ1osT0FBTztBQUFBLElBQ1AsV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osV0FBVztBQUFBLElBQ1gsT0FBTztBQUFBLElBQ1AsZ0JBQWdCO0FBQUEsSUFDaEIsVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsZUFBZTtBQUFBLElBQ2YsVUFBVTtBQUFBLElBQ1YsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1YsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsZ0JBQWdCO0FBQUEsSUFDaEIsWUFBWTtBQUFBLElBQ1osWUFBWTtBQUFBLElBQ1osU0FBUztBQUFBLElBQ1QsWUFBWTtBQUFBLElBQ1osY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2YsZUFBZTtBQUFBLElBQ2YsZUFBZTtBQUFBLElBQ2YsZUFBZTtBQUFBLElBQ2YsWUFBWTtBQUFBLElBQ1osVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsWUFBWTtBQUFBLElBQ1osV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osTUFBTTtBQUFBLElBQ04sV0FBVztBQUFBLElBQ1gsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLElBQ1AsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsT0FBTztBQUFBLElBQ1AsT0FBTztBQUFBLElBQ1AsWUFBWTtBQUFBLElBQ1osVUFBVTtBQUFBLElBQ1YsZUFBZTtBQUFBLElBQ2YsV0FBVztBQUFBLElBQ1gsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osV0FBVztBQUFBLElBQ1gsZ0JBQWdCO0FBQUEsSUFDaEIsc0JBQXNCO0FBQUEsSUFDdEIsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFDaEIsZ0JBQWdCO0FBQUEsSUFDaEIsZ0JBQWdCO0FBQUEsSUFDaEIsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sV0FBVztBQUFBLElBQ1gsT0FBTztBQUFBLElBQ1AsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1Qsa0JBQWtCO0FBQUEsSUFDbEIsWUFBWTtBQUFBLElBQ1osY0FBYztBQUFBLElBQ2QsY0FBYztBQUFBLElBQ2QsZ0JBQWdCO0FBQUEsSUFDaEIsaUJBQWlCO0FBQUEsSUFDakIsbUJBQW1CO0FBQUEsSUFDbkIsaUJBQWlCO0FBQUEsSUFDakIsaUJBQWlCO0FBQUEsSUFDakIsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLElBQ1AsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsZUFBZTtBQUFBLElB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LE1BQU0sY0FBYztBQUFBO0FBQUEsSUFFaEIsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDM0csTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDeEcsT0FBTyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDekcsUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDMUcsU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUE7QUFBQSxJQUczRyxVQUFVLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDbEksUUFBUSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQ2hJLE1BQU0sQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUM5SCxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxTQUFTO0FBQUEsSUFDOUgsTUFBTSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUFBLElBQzlILFFBQVEsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFNBQVM7QUFBQSxJQUNoSSxNQUFNLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FB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QyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN2SWxCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWNsVCxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLFFBQU07QUFDekQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxRQUFJTSxjQUFhLGdCQUFnQixlQUFlO0FBQ2hELFdBQU8sSUFBYyxPQUFPTCxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsWUFBWTtBQUFBLE1BQ1osU0FBUztBQUFBLE1BQ1QsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ2xFLElBQUlLLFlBQVcsR0FBRztBQUFBLE1BQ2xCLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixJQUFJQSxZQUFXLEdBQUc7QUFBQSxNQUNsQixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsSUFBSUEsWUFBVyxHQUFHO0FBQUEsTUFDbEIsR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLElBQUlBLFlBQVcsR0FBRztBQUFBLE1BQ2xCLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQyxHQUFHLElBQWMsS0FBSztBQUFBLE1BQ3RCLE1BQU07QUFBQSxNQUNOLFVBQVU7QUFBQSxJQUNaLEdBQUcsSUFBYyxLQUFLO0FBQUEsTUFDcEIsV0FBVztBQUFBLElBQ2IsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixJQUFJQSxZQUFXLEdBQUc7QUFBQSxNQUNsQixNQUFNO0FBQUEsSUFDUixHQUFHLElBQWMsT0FBTztBQUFBLE1BQ3RCLFdBQVcsSUFBSSxPQUFPQSxZQUFXLEdBQUcsQ0FBQztBQUFBLElBQ3ZDLENBQUMsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3pCLE1BQU07QUFBQSxNQUNOLFVBQVU7QUFBQSxNQUNWLE1BQU0sUUFBUSxPQUFPQSxZQUFXLEdBQUcsR0FBRyxHQUFHO0FBQUEsTUFDekMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDLEdBQUcsSUFBYyxLQUFLO0FBQUEsTUFDdEIsV0FBVztBQUFBLElBQ2IsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixJQUFJQSxZQUFXLEdBQUc7QUFBQSxNQUNsQixNQUFNO0FBQUEsSUFDUixHQUFHLElBQWMsT0FBTztBQUFBLE1BQ3RCLFdBQVcsSUFBSSxPQUFPQSxZQUFXLEdBQUcsQ0FBQztBQUFBLElBQ3ZDLENBQUMsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3pCLE1BQU07QUFBQSxNQUNOLFVBQVU7QUFBQSxNQUNWLE1BQU0sUUFBUSxPQUFPQSxZQUFXLEdBQUcsR0FBRyxHQUFHO0FBQUEsTUFDekMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDLEdBQUcsSUFBYyxLQUFLO0FBQUEsTUFDdEIsV0FBVztBQUFBLElBQ2IsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixJQUFJQSxZQUFXLEdBQUc7QUFBQSxNQUNsQixNQUFNO0FBQUEsSUFDUixHQUFHLElBQWMsT0FBTztBQUFBLE1BQ3RCLFdBQVcsSUFBSSxPQUFPQSxZQUFXLEdBQUcsQ0FBQztBQUFBLElBQ3ZDLENBQUMsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3pCLE1BQU07QUFBQSxNQUNOLFVBQVU7QUFBQSxNQUNWLE1BQU0sUUFBUSxPQUFPQSxZQUFXLEdBQUcsR0FBRyxHQUFHO0FBQUEsTUFDekMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDLEdBQUcsSUFBYyxLQUFLO0FBQUEsTUFDdEIsV0FBVztBQUFBLElBQ2IsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixJQUFJQSxZQUFXLEdBQUc7QUFBQSxNQUNsQixNQUFNO0FBQUEsSUFDUixHQUFHLElBQWMsT0FBTztBQUFBLE1BQ3RCLFdBQVcsSUFBSSxPQUFPQSxZQUFXLEdBQUcsQ0FBQztBQUFBLElBQ3ZDLENBQUMsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3pCLE1BQU07QUFBQSxNQUNOLFVBQVU7QUFBQSxNQUNWLE1BQU0sUUFBUSxPQUFPQSxZQUFXLEdBQUcsR0FBRyxHQUFHO0FBQUEsTUFDekMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ047QUFFTyxNQUFJQyxVQUFPOzs7QUNyR2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWNsVCxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLFFBQU07QUFDekQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxRQUFJTSxjQUFhLGdCQUFnQixjQUFjO0FBQy9DLFdBQU8sSUFBYyxPQUFPTCxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sT0FBTztBQUFBLE1BQ1AsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsS0FBSztBQUFBLE1BQ25DLFVBQVUsUUFBUSxPQUFPSyxZQUFXLE9BQU8sR0FBRyxHQUFHO0FBQUEsSUFDbkQsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixHQUFHO0FBQUEsTUFDSCxRQUFRO0FBQUEsTUFDUixhQUFhO0FBQUEsTUFDYixrQkFBa0I7QUFBQSxJQUNwQixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsUUFBUTtBQUFBLE1BQ1IsYUFBYTtBQUFBLE1BQ2Isa0JBQWtCO0FBQUEsSUFDcEIsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILFFBQVE7QUFBQSxNQUNSLGFBQWE7QUFBQSxNQUNiLGtCQUFrQjtBQUFBLElBQ3BCLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxRQUFRO0FBQUEsTUFDUixhQUFhO0FBQUEsTUFDYixrQkFBa0I7QUFBQSxJQUNwQixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsUUFBUTtBQUFBLE1BQ1IsYUFBYTtBQUFBLE1BQ2Isa0JBQWtCO0FBQUEsSUFDcEIsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsQ0FBQyxHQUFHLElBQWMsUUFBUSxNQUFNLElBQWMsWUFBWTtBQUFBLE1BQ3pELElBQUlBLFlBQVcsT0FBTztBQUFBLElBQ3hCLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDdkIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ047QUFFTyxNQUFJQyxVQUFPOzs7QUMzRmxCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWNsVCxNQUFJLGlCQUFpQixTQUFTQyxnQkFBZUMsUUFBTTtBQUNqRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFFBQUlNLGNBQWEsZ0JBQWdCLFVBQVU7QUFDM0MsV0FBTyxJQUFjLE9BQU9MLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRLE1BQU0sSUFBYyxrQkFBa0I7QUFBQSxNQUM1RSxJQUFJSyxZQUFXLEdBQUc7QUFBQSxNQUNsQixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsSUFDTixHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxNQUNYLGFBQWE7QUFBQSxJQUNmLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsTUFDWCxhQUFhO0FBQUEsSUFDZixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsUUFBUTtBQUFBLE1BQ1IsV0FBVztBQUFBLElBQ2IsQ0FBQyxDQUFDLEdBQUcsSUFBYyxrQkFBa0I7QUFBQSxNQUNuQyxJQUFJQSxZQUFXLEdBQUc7QUFBQSxNQUNsQixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsSUFDTixHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxJQUNiLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsTUFDWCxhQUFhO0FBQUEsSUFDZixDQUFDLENBQUMsR0FBRyxJQUFjLGtCQUFrQjtBQUFBLE1BQ25DLElBQUlBLFlBQVcsR0FBRztBQUFBLE1BQ2xCLElBQUk7QUFBQSxNQUNKLElBQUk7QUFBQSxNQUNKLElBQUk7QUFBQSxNQUNKLElBQUk7QUFBQSxJQUNOLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDdkIsUUFBUTtBQUFBLE1BQ1IsV0FBVztBQUFBLE1BQ1gsYUFBYTtBQUFBLElBQ2YsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxJQUNiLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsSUFDYixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsUUFBUTtBQUFBLE1BQ1IsV0FBVztBQUFBLE1BQ1gsYUFBYTtBQUFBLElBQ2YsQ0FBQyxDQUFDLEdBQUcsSUFBYyxrQkFBa0I7QUFBQSxNQUNuQyxJQUFJQSxZQUFXLEdBQUc7QUFBQSxNQUNsQixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsSUFDTixHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxNQUNYLGFBQWE7QUFBQSxJQUNmLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsSUFDYixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsUUFBUTtBQUFBLE1BQ1IsV0FBVztBQUFBLElBQ2IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxNQUNYLGFBQWE7QUFBQSxJQUNmLENBQUMsQ0FBQyxHQUFHLElBQWMsa0JBQWtCO0FBQUEsTUFDbkMsSUFBSUEsWUFBVyxHQUFHO0FBQUEsTUFDbEIsSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLElBQ04sR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsSUFDYixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsUUFBUTtBQUFBLE1BQ1IsV0FBVztBQUFBLElBQ2IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFjLEtBQUs7QUFBQSxNQUN2QixNQUFNO0FBQUEsTUFDTixVQUFVO0FBQUEsSUFDWixHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNLFFBQVEsT0FBT0EsWUFBVyxHQUFHLEdBQUcsR0FBRztBQUFBLE1BQ3pDLEdBQUc7QUFBQSxNQUNILFdBQVc7QUFBQSxJQUNiLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNLFFBQVEsT0FBT0EsWUFBVyxHQUFHLEdBQUcsR0FBRztBQUFBLE1BQ3pDLEdBQUc7QUFBQSxNQUNILFdBQVc7QUFBQSxJQUNiLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNLFFBQVEsT0FBT0EsWUFBVyxHQUFHLEdBQUcsR0FBRztBQUFBLE1BQ3pDLEdBQUc7QUFBQSxNQUNILFdBQVc7QUFBQSxJQUNiLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNLFFBQVEsT0FBT0EsWUFBVyxHQUFHLEdBQUcsR0FBRztBQUFBLE1BQ3pDLEdBQUc7QUFBQSxNQUNILFdBQVc7QUFBQSxJQUNiLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNLFFBQVEsT0FBT0EsWUFBVyxHQUFHLEdBQUcsR0FBRztBQUFBLE1BQ3pDLEdBQUc7QUFBQSxNQUNILFdBQVc7QUFBQSxJQUNiLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDTDtBQUVPLE1BQUlDLFVBQU87OztBQ2pKbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUkscUJBQXFCLFNBQVNDLG9CQUFtQkMsUUFBTTtBQUN6RCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLG1CQUFtQixTQUFTQyxrQkFBaUJDLFFBQU07QUFDckQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxvQkFBb0IsU0FBU0MsbUJBQWtCQyxRQUFNO0FBQ3ZELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxLQUFLO0FBQUEsTUFDbkMsTUFBTTtBQUFBLE1BQ04sVUFBVTtBQUFBLElBQ1osR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsV0FBVztBQUFBLE1BQ1gsR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDTDtBQUVPLE1BQUlLLFVBQU87OztBQy9DbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksd0JBQXdCLFNBQVNDLHVCQUFzQkMsUUFBTTtBQUMvRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsT0FBTztBQUFBLE1BQ1AsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLFFBQU07QUFDekQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsV0FBVztBQUFBLE1BQ1gsR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUM1Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHNCQUFzQixTQUFTQyxxQkFBb0JDLFFBQU07QUFDM0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLFdBQVc7QUFBQSxNQUNYLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUM1Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGtCQUFrQixTQUFTQyxpQkFBZ0JDLFFBQU07QUFDbkQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsV0FBVztBQUFBLE1BQ1gsR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUM1Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWNsVCxNQUFJLHVCQUF1QixTQUFTQyxzQkFBcUJDLFFBQU07QUFDN0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxRQUFJTSxjQUFhLGdCQUFnQixnQkFBZ0I7QUFDakQsV0FBTyxJQUFjLE9BQU9MLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRLE1BQU0sSUFBYyxrQkFBa0I7QUFBQSxNQUM1RSxJQUFJSyxZQUFXLEdBQUc7QUFBQSxNQUNsQixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixHQUFHO0FBQUEsTUFDSCxJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsSUFDTixHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxJQUNiLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsSUFDYixDQUFDLENBQUMsR0FBRyxJQUFjLGtCQUFrQjtBQUFBLE1BQ25DLElBQUlBLFlBQVcsR0FBRztBQUFBLE1BQ2xCLElBQUk7QUFBQSxNQUNKLElBQUk7QUFBQSxNQUNKLEdBQUc7QUFBQSxNQUNILElBQUk7QUFBQSxNQUNKLElBQUk7QUFBQSxJQUNOLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDdkIsUUFBUTtBQUFBLE1BQ1IsV0FBVztBQUFBLElBQ2IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxJQUNiLENBQUMsQ0FBQyxHQUFHLElBQWMsa0JBQWtCO0FBQUEsTUFDbkMsSUFBSUEsWUFBVyxHQUFHO0FBQUEsTUFDbEIsSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLElBQ04sR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsSUFDYixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsUUFBUTtBQUFBLE1BQ1IsV0FBVztBQUFBLElBQ2IsQ0FBQyxDQUFDLEdBQUcsSUFBYyxrQkFBa0I7QUFBQSxNQUNuQyxJQUFJQSxZQUFXLEdBQUc7QUFBQSxNQUNsQixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsSUFDTixHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxJQUNiLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsSUFDYixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQWMsS0FBSztBQUFBLE1BQ3ZCLE1BQU07QUFBQSxJQUNSLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDdkIsTUFBTSxRQUFRLE9BQU9BLFlBQVcsR0FBRyxHQUFHLEdBQUc7QUFBQSxNQUN6QyxHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTSxRQUFRLE9BQU9BLFlBQVcsR0FBRyxHQUFHLEdBQUc7QUFBQSxNQUN6QyxHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTSxRQUFRLE9BQU9BLFlBQVcsR0FBRyxHQUFHLEdBQUc7QUFBQSxNQUN6QyxHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTSxRQUFRLE9BQU9BLFlBQVcsR0FBRyxHQUFHLEdBQUc7QUFBQSxNQUN6QyxHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLE1BQ0gsU0FBUztBQUFBLElBQ1gsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxNQUNILFNBQVM7QUFBQSxJQUNYLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDTDtBQUVPLE1BQUlDLFVBQU87OztBQzdHbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUkscUJBQXFCLFNBQVNDLG9CQUFtQkMsUUFBTTtBQUN6RCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsS0FBSztBQUFBLE1BQ25DLE1BQU07QUFBQSxNQUNOLFVBQVU7QUFBQSxJQUNaLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDdkIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLFdBQVc7QUFBQSxNQUNYLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ0w7QUFFTyxNQUFJSyxVQUFPOzs7QUMvQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLFFBQU07QUFDekQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLEtBQUs7QUFBQSxNQUNuQyxNQUFNO0FBQUEsSUFDUixHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUNMO0FBRU8sTUFBSUssVUFBTzs7O0FDdkRsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxtQkFBbUIsU0FBU0Msa0JBQWlCQyxRQUFNO0FBQ3JELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxLQUFLO0FBQUEsTUFDbkMsTUFBTTtBQUFBLElBQ1IsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUNMO0FBRU8sTUFBSUssVUFBTzs7O0FDekNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxtQkFBbUIsU0FBU0Msa0JBQWlCQyxRQUFNO0FBQ3JELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxLQUFLO0FBQUEsTUFDbkMsTUFBTTtBQUFBLE1BQ04sVUFBVTtBQUFBLElBQ1osR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUNMO0FBRU8sTUFBSUssVUFBTzs7O0FDN0NsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSwyQkFBMkIsU0FBU0MsMEJBQXlCQyxRQUFNO0FBQ3JFLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxPQUFPO0FBQUEsTUFDUCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLFdBQVc7QUFBQSxNQUNYLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDNUNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxxQkFBcUIsU0FBU0Msb0JBQW1CQyxRQUFNO0FBQ3pELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxLQUFLO0FBQUEsTUFDbkMsTUFBTTtBQUFBLElBQ1IsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUNMO0FBRU8sTUFBSUssVUFBTzs7O0FDN0RsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFjbFQsTUFBSSxpQkFBaUIsU0FBU0MsZ0JBQWVDLFFBQU07QUFDakQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxRQUFJTSxjQUFhLGdCQUFnQixVQUFVO0FBQzNDLFdBQU8sSUFBYyxPQUFPTCxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsWUFBWTtBQUFBLE1BQ1osT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ2xFLElBQUlLLFlBQVcsR0FBRztBQUFBLE1BQ2xCLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixJQUFJQSxZQUFXLEdBQUc7QUFBQSxNQUNsQixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsSUFBSUEsWUFBVyxHQUFHO0FBQUEsTUFDbEIsR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsa0JBQWtCO0FBQUEsTUFDbEMsSUFBSUEsWUFBVyxHQUFHO0FBQUEsTUFDbEIsSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLE1BQ0osR0FBRztBQUFBLE1BQ0gsSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLE1BQ0osbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsSUFDYixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsUUFBUTtBQUFBLE1BQ1IsV0FBVztBQUFBLElBQ2IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxJQUNiLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsSUFDYixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQWMsS0FBSztBQUFBLE1BQ3ZCLE1BQU07QUFBQSxNQUNOLFVBQVU7QUFBQSxNQUNWLFdBQVc7QUFBQSxJQUNiLEdBQUcsSUFBYyxLQUFLO0FBQUEsTUFDcEIsV0FBVztBQUFBLElBQ2IsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixJQUFJQSxZQUFXLEdBQUc7QUFBQSxNQUNsQixNQUFNO0FBQUEsSUFDUixHQUFHLElBQWMsT0FBTztBQUFBLE1BQ3RCLFdBQVcsSUFBSSxPQUFPQSxZQUFXLEdBQUcsQ0FBQztBQUFBLElBQ3ZDLENBQUMsQ0FBQyxHQUFHLElBQWMsS0FBSztBQUFBLE1BQ3RCLE1BQU0sUUFBUSxPQUFPQSxZQUFXLEdBQUcsR0FBRyxHQUFHO0FBQUEsTUFDekMsVUFBVTtBQUFBLE1BQ1YsTUFBTSxRQUFRLE9BQU9BLFlBQVcsR0FBRyxHQUFHLEdBQUc7QUFBQSxJQUMzQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDMUIsSUFBSUEsWUFBVyxHQUFHO0FBQUEsTUFDbEIsTUFBTTtBQUFBLElBQ1IsR0FBRyxJQUFjLE9BQU87QUFBQSxNQUN0QixXQUFXLElBQUksT0FBT0EsWUFBVyxHQUFHLENBQUM7QUFBQSxJQUN2QyxDQUFDLENBQUMsR0FBRyxJQUFjLEtBQUs7QUFBQSxNQUN0QixNQUFNLFFBQVEsT0FBT0EsWUFBVyxHQUFHLEdBQUcsR0FBRztBQUFBLElBQzNDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDdkIsTUFBTTtBQUFBLE1BQ04sVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDekIsSUFBSUEsWUFBVyxHQUFHO0FBQUEsTUFDbEIsTUFBTTtBQUFBLElBQ1IsR0FBRyxJQUFjLE9BQU87QUFBQSxNQUN0QixXQUFXLElBQUksT0FBT0EsWUFBVyxHQUFHLENBQUM7QUFBQSxJQUN2QyxDQUFDLENBQUMsR0FBRyxJQUFjLEtBQUs7QUFBQSxNQUN0QixVQUFVO0FBQUEsTUFDVixNQUFNLFFBQVEsT0FBT0EsWUFBVyxHQUFHLEdBQUcsR0FBRztBQUFBLElBQzNDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDdkIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDTjtBQUVPLE1BQUlDLFVBQU87OztBQ3pIbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksc0JBQXNCLFNBQVNDLHFCQUFvQkMsUUFBTTtBQUMzRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsS0FBSztBQUFBLE1BQ25DLE1BQU07QUFBQSxJQUNSLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDdkIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUNMO0FBRU8sTUFBSUssVUFBTzs7O0FDakRsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSx3QkFBd0IsU0FBU0MsdUJBQXNCQyxRQUFNO0FBQy9ELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksc0JBQXNCLFNBQVNDLHFCQUFvQkMsUUFBTTtBQUMzRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLG1CQUFtQixTQUFTQyxrQkFBaUJDLFFBQU07QUFDckQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLE9BQU87QUFBQSxNQUNQLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLEtBQUs7QUFBQSxNQUNuQyxXQUFXO0FBQUEsTUFDWCxNQUFNO0FBQUEsSUFDUixHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsTUFBTTtBQUFBLElBQ1IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFdBQVc7QUFBQSxNQUMzQixNQUFNO0FBQUEsTUFDTixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsSUFDTixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDTDtBQUVPLE1BQUlLLFVBQU87OztBQ3ZFbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksc0JBQXNCLFNBQVNDLHFCQUFvQkMsUUFBTTtBQUMzRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsV0FBVztBQUFBLElBQ2IsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQzVDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksd0JBQXdCLFNBQVNDLHVCQUFzQkMsUUFBTTtBQUMvRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsS0FBSztBQUFBLE1BQ25DLE1BQU07QUFBQSxNQUNOLFVBQVU7QUFBQSxJQUNaLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDdkIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixXQUFXO0FBQUEsTUFDWCxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ0w7QUFFTyxNQUFJSyxVQUFPOzs7QUMvQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLG9CQUFvQixTQUFTQyxtQkFBa0JDLFFBQU07QUFDdkQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLEtBQUs7QUFBQSxNQUNuQyxNQUFNO0FBQUEsSUFDUixHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUNMO0FBRU8sTUFBSUssVUFBTzs7O0FDdkRsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxtQkFBbUIsU0FBU0Msa0JBQWlCQyxRQUFNO0FBQ3JELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxLQUFLO0FBQUEsTUFDbkMsTUFBTTtBQUFBLElBQ1IsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ0w7QUFFTyxNQUFJSyxVQUFPOzs7QUNqRGxCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLG9CQUFvQixTQUFTQyxtQkFBa0JDLFFBQU07QUFDdkQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLFdBQVc7QUFBQSxNQUNYLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUM1Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLFFBQU07QUFDekQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLEtBQUs7QUFBQSxNQUNuQyxNQUFNO0FBQUEsSUFDUixHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLE1BQU07QUFBQSxNQUNOLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUNMO0FBRU8sTUFBSUssVUFBTzs7O0FDOUNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxxQkFBcUIsU0FBU0Msb0JBQW1CQyxRQUFNO0FBQ3pELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsTUFBTTtBQUFBLE1BQ04sR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksNkJBQTZCLFNBQVNDLDRCQUEyQkMsUUFBTTtBQUN6RSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsT0FBTztBQUFBLE1BQ1AsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxNQUNILE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSCxNQUFNO0FBQUEsSUFDUixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLE1BQ0gsV0FBVztBQUFBLElBQ2IsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQzVDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksd0JBQXdCLFNBQVNDLHVCQUFzQkMsUUFBTTtBQUMvRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLG9CQUFvQixTQUFTQyxtQkFBa0JDLFFBQU07QUFDdkQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSx1QkFBdUIsU0FBU0Msc0JBQXFCQyxRQUFNO0FBQzdELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksd0JBQXdCLFNBQVNDLHVCQUFzQkMsUUFBTTtBQUMvRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHVCQUF1QixTQUFTQyxzQkFBcUJDLFFBQU07QUFDN0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxnQkFBZ0IsU0FBU0MsZUFBY0MsUUFBTTtBQUMvQyxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGdDQUFnQyxTQUFTQywrQkFBOEJDLFFBQU07QUFDL0UsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSwwQkFBMEIsU0FBU0MseUJBQXdCQyxRQUFNO0FBQ25FLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUkseUJBQXlCLFNBQVNDLHdCQUF1QkMsUUFBTTtBQUNqRSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLG1CQUFtQixTQUFTQyxrQkFBaUJDLFFBQU07QUFDckQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxnQkFBZ0IsU0FBU0MsZUFBY0MsUUFBTTtBQUMvQyxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdkNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxjQUFjLFNBQVNDLGFBQVlDLFFBQU07QUFDM0MsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLE9BQU87QUFBQSxNQUNQLG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxrQkFBa0IsU0FBU0MsaUJBQWdCQyxRQUFNO0FBQ25ELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksa0JBQWtCLFNBQVNDLGlCQUFnQkMsUUFBTTtBQUNuRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLG1CQUFtQixTQUFTQyxrQkFBaUJDLFFBQU07QUFDckQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxnQkFBZ0IsU0FBU0MsZUFBY0MsUUFBTTtBQUMvQyxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGVBQWUsU0FBU0MsY0FBYUMsUUFBTTtBQUM3QyxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGtCQUFrQixTQUFTQyxpQkFBZ0JDLFFBQU07QUFDbkQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxlQUFlLFNBQVNDLGNBQWFDLFFBQU07QUFDN0MsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxJQUFJO0FBQUEsSUFDTixDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDekNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSx1QkFBdUIsU0FBU0Msc0JBQXFCQyxRQUFNO0FBQzdELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksNkJBQTZCLFNBQVNDLDRCQUEyQkMsUUFBTTtBQUN6RSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLDZCQUE2QixTQUFTQyw0QkFBMkJDLFFBQU07QUFDekUsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsV0FBVztBQUFBLE1BQ1gsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3hDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksNkJBQTZCLFNBQVNDLDRCQUEyQkMsUUFBTTtBQUN6RSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixXQUFXO0FBQUEsTUFDWCxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDeENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxnQ0FBZ0MsU0FBU0MsK0JBQThCQyxRQUFNO0FBQy9FLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsV0FBVztBQUFBLE1BQ1gsR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN4Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLCtCQUErQixTQUFTQyw4QkFBNkJDLFFBQU07QUFDN0UsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsV0FBVztBQUFBLE1BQ1gsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3hDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksaUNBQWlDLFNBQVNDLGdDQUErQkMsUUFBTTtBQUNqRixRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixXQUFXO0FBQUEsTUFDWCxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDeENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSwwQkFBMEIsU0FBU0MseUJBQXdCQyxRQUFNO0FBQ25FLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLFdBQVc7QUFBQSxNQUNYLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN4Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLCtCQUErQixTQUFTQyw4QkFBNkJDLFFBQU07QUFDN0UsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsV0FBVztBQUFBLE1BQ1gsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3hDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUkseUJBQXlCLFNBQVNDLHdCQUF1QkMsUUFBTTtBQUNqRSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixXQUFXO0FBQUEsTUFDWCxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDeENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxnQkFBZ0IsU0FBU0MsZUFBY0MsUUFBTTtBQUMvQyxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsT0FBTztBQUFBLE1BQ1AsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDekNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxjQUFjLFNBQVNDLGFBQVlDLFFBQU07QUFDM0MsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxtQkFBbUIsU0FBU0Msa0JBQWlCQyxRQUFNO0FBQ3JELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsTUFDUCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3hDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksZ0JBQWdCLFNBQVNDLGVBQWNDLFFBQU07QUFDL0MsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxjQUFjLFNBQVNDLGFBQVlDLFFBQU07QUFDM0MsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxnQkFBZ0IsU0FBU0MsZUFBY0MsUUFBTTtBQUMvQyxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsT0FBTztBQUFBLE1BQ1AsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxNQUNILFVBQVU7QUFBQSxJQUNaLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGlCQUFpQixTQUFTQyxnQkFBZUMsUUFBTTtBQUNqRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGdCQUFnQixTQUFTQyxlQUFjQyxRQUFNO0FBQy9DLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksaUJBQWlCLFNBQVNDLGdCQUFlQyxRQUFNO0FBQ2pELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksb0JBQW9CLFNBQVNDLG1CQUFrQkMsUUFBTTtBQUN2RCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsT0FBTztBQUFBLE1BQ1AsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLFFBQU07QUFDekQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULE9BQU87QUFBQSxNQUNQLG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxlQUFlLFNBQVNDLGNBQWFDLFFBQU07QUFDN0MsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxtQkFBbUIsU0FBU0Msa0JBQWlCQyxRQUFNO0FBQ3JELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxPQUFPO0FBQUEsTUFDUCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksaUJBQWlCLFNBQVNDLGdCQUFlQyxRQUFNO0FBQ2pELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksZUFBZSxTQUFTQyxjQUFhQyxRQUFNO0FBQzdDLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksaUJBQWlCLFNBQVNDLGdCQUFlQyxRQUFNO0FBQ2pELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksZ0JBQWdCLFNBQVNDLGVBQWNDLFFBQU07QUFDL0MsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxpQkFBaUIsU0FBU0MsZ0JBQWVDLFFBQU07QUFDakQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULE9BQU87QUFBQSxNQUNQLG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUMzQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGFBQWEsU0FBU0MsWUFBV0MsUUFBTTtBQUN6QyxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLG1CQUFtQixTQUFTQyxrQkFBaUJDLFFBQU07QUFDckQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxjQUFjLFNBQVNDLGFBQVlDLFFBQU07QUFDM0MsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxvQkFBb0IsU0FBU0MsbUJBQWtCQyxRQUFNO0FBQ3ZELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksY0FBYyxTQUFTQyxhQUFZQyxRQUFNO0FBQzNDLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksc0JBQXNCLFNBQVNDLHFCQUFvQkMsUUFBTTtBQUMzRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLDRCQUE0QixTQUFTQywyQkFBMEJDLFFBQU07QUFDdkUsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxnQkFBZ0IsU0FBU0MsZUFBY0MsUUFBTTtBQUMvQyxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGNBQWMsU0FBU0MsYUFBWUMsUUFBTTtBQUMzQyxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsT0FBTztBQUFBLE1BQ1AsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdkNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSwwQkFBMEIsU0FBU0MseUJBQXdCQyxRQUFNO0FBQ25FLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksZUFBZSxTQUFTQyxjQUFhQyxRQUFNO0FBQzdDLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxPQUFPO0FBQUEsTUFDUCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksaUJBQWlCLFNBQVNDLGdCQUFlQyxRQUFNO0FBQ2pELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksa0JBQWtCLFNBQVNDLGlCQUFnQkMsUUFBTTtBQUNuRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsT0FBTztBQUFBLE1BQ1AsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLG1CQUFtQixTQUFTQyxrQkFBaUJDLFFBQU07QUFDckQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxjQUFjLFNBQVNDLGFBQVlDLFFBQU07QUFDM0MsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxlQUFlLFNBQVNDLGNBQWFDLFFBQU07QUFDN0MsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxnQkFBZ0IsU0FBU0MsZUFBY0MsUUFBTTtBQUMvQyxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHdCQUF3QixTQUFTQyx1QkFBc0JDLFFBQU07QUFDL0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULE9BQU87QUFBQSxNQUNQLG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxnQ0FBZ0MsU0FBU0MsK0JBQThCQyxRQUFNO0FBQy9FLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxPQUFPO0FBQUEsTUFDUCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksZ0NBQWdDLFNBQVNDLCtCQUE4QkMsUUFBTTtBQUMvRSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsT0FBTztBQUFBLE1BQ1AsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHVCQUF1QixTQUFTQyxzQkFBcUJDLFFBQU07QUFDN0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLE1BQ0gsVUFBVTtBQUFBLElBQ1osQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3pDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksZUFBZSxTQUFTQyxjQUFhQyxRQUFNO0FBQzdDLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksZUFBZSxTQUFTQyxjQUFhQyxRQUFNO0FBQzdDLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksbUJBQW1CLFNBQVNDLGtCQUFpQkMsUUFBTTtBQUNyRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGtCQUFrQixTQUFTQyxpQkFBZ0JDLFFBQU07QUFDbkQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsTUFDSCxVQUFVO0FBQUEsSUFDWixDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxtQkFBbUIsU0FBU0Msa0JBQWlCQyxRQUFNO0FBQ3JELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksa0JBQWtCLFNBQVNDLGlCQUFnQkMsUUFBTTtBQUNuRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGdCQUFnQixTQUFTQyxlQUFjQyxRQUFNO0FBQy9DLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksa0JBQWtCLFNBQVNDLGlCQUFnQkMsUUFBTTtBQUNuRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHVCQUF1QixTQUFTQyxzQkFBcUJDLFFBQU07QUFDN0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSx3QkFBd0IsU0FBU0MsdUJBQXNCQyxRQUFNO0FBQy9ELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksbUJBQW1CLFNBQVNDLGtCQUFpQkMsUUFBTTtBQUNyRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHdCQUF3QixTQUFTQyx1QkFBc0JDLFFBQU07QUFDL0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxvQkFBb0IsU0FBU0MsbUJBQWtCQyxRQUFNO0FBQ3ZELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUkseUJBQXlCLFNBQVNDLHdCQUF1QkMsUUFBTTtBQUNqRSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHdCQUF3QixTQUFTQyx1QkFBc0JDLFFBQU07QUFDL0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSx5QkFBeUIsU0FBU0Msd0JBQXVCQyxRQUFNO0FBQ2pFLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksZUFBZSxTQUFTQyxjQUFhQyxRQUFNO0FBQzdDLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksY0FBYyxTQUFTQyxhQUFZQyxRQUFNO0FBQzNDLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLE1BQ0gsVUFBVTtBQUFBLElBQ1osQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksb0JBQW9CLFNBQVNDLG1CQUFrQkMsUUFBTTtBQUN2RCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLEdBQUc7QUFBQSxNQUNILEdBQUc7QUFBQSxNQUNILElBQUk7QUFBQSxNQUNKLFVBQVU7QUFBQSxJQUNaLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUMxQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLG1CQUFtQixTQUFTQyxrQkFBaUJDLFFBQU07QUFDckQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxpQkFBaUIsU0FBU0MsZ0JBQWVDLFFBQU07QUFDakQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLEtBQUs7QUFBQSxNQUNuQyxVQUFVO0FBQUEsTUFDVixXQUFXO0FBQUEsSUFDYixHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFVBQVU7QUFBQSxNQUMxQixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxVQUFVO0FBQUEsTUFDMUIsSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLE1BQ0osR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDTDtBQUVPLE1BQUlLLFVBQU87OztBQ25EbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksZ0JBQWdCLFNBQVNDLGVBQWNDLFFBQU07QUFDL0MsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULE9BQU87QUFBQSxNQUNQLG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxtQkFBbUIsU0FBU0Msa0JBQWlCQyxRQUFNO0FBQ3JELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsTUFDUCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3hDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksYUFBYSxTQUFTQyxZQUFXQyxRQUFNO0FBQ3pDLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxPQUFPO0FBQUEsTUFDUCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUkscUJBQXFCLFNBQVNDLG9CQUFtQkMsUUFBTTtBQUN6RCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxNQUNILEdBQUc7QUFBQSxNQUNILE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLElBQUk7QUFBQSxJQUNOLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixXQUFXO0FBQUEsTUFDWCxHQUFHO0FBQUEsTUFDSCxHQUFHO0FBQUEsTUFDSCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixJQUFJO0FBQUEsSUFDTixDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDaERsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxpQkFBaUIsU0FBU0MsZ0JBQWVDLFFBQU07QUFDakQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULE1BQU07QUFBQSxNQUNOLE9BQU87QUFBQSxNQUNQLG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDeENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSx5QkFBeUIsU0FBU0Msd0JBQXVCQyxRQUFNO0FBQ2pFLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxPQUFPO0FBQUEsTUFDUCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksNkJBQTZCLFNBQVNDLDRCQUEyQkMsUUFBTTtBQUN6RSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLDhCQUE4QixTQUFTQyw2QkFBNEJDLFFBQU07QUFDM0UsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSw0QkFBNEIsU0FBU0MsMkJBQTBCQyxRQUFNO0FBQ3ZFLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksYUFBYSxTQUFTQyxZQUFXQyxRQUFNO0FBQ3pDLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksY0FBYyxTQUFTQyxhQUFZQyxRQUFNO0FBQzNDLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUkscUJBQXFCLFNBQVNDLG9CQUFtQkMsUUFBTTtBQUN6RCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdkNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxxQkFBcUIsU0FBU0Msb0JBQW1CQyxRQUFNO0FBQ3pELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsTUFDUCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUMxQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGtCQUFrQixTQUFTQyxpQkFBZ0JDLFFBQU07QUFDbkQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULE9BQU87QUFBQSxNQUNQLG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxvQkFBb0IsU0FBU0MsbUJBQWtCQyxRQUFNO0FBQ3ZELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLE1BQ0gsVUFBVTtBQUFBLElBQ1osQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3ZDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksb0JBQW9CLFNBQVNDLG1CQUFrQkMsUUFBTTtBQUN2RCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHlCQUF5QixTQUFTQyx3QkFBdUJDLFFBQU07QUFDakUsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxvQkFBb0IsU0FBU0MsbUJBQWtCQyxRQUFNO0FBQ3ZELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUkscUJBQXFCLFNBQVNDLG9CQUFtQkMsUUFBTTtBQUN6RCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHNCQUFzQixTQUFTQyxxQkFBb0JDLFFBQU07QUFDM0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxvQkFBb0IsU0FBU0MsbUJBQWtCQyxRQUFNO0FBQ3ZELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksa0NBQWtDLFNBQVNDLGlDQUFnQ0MsUUFBTTtBQUNuRixRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxNQUNILFVBQVU7QUFBQSxJQUNaLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDekNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSx1QkFBdUIsU0FBU0Msc0JBQXFCQyxRQUFNO0FBQzdELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksbUJBQW1CLFNBQVNDLGtCQUFpQkMsUUFBTTtBQUNyRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLDBCQUEwQixTQUFTQyx5QkFBd0JDLFFBQU07QUFDbkUsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxzQkFBc0IsU0FBU0MscUJBQW9CQyxRQUFNO0FBQzNELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksbUJBQW1CLFNBQVNDLGtCQUFpQkMsUUFBTTtBQUNyRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHlCQUF5QixTQUFTQyx3QkFBdUJDLFFBQU07QUFDakUsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxvQkFBb0IsU0FBU0MsbUJBQWtCQyxRQUFNO0FBQ3ZELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksd0JBQXdCLFNBQVNDLHVCQUFzQkMsUUFBTTtBQUMvRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLG9CQUFvQixTQUFTQyxtQkFBa0JDLFFBQU07QUFDdkQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxtQkFBbUIsU0FBU0Msa0JBQWlCQyxRQUFNO0FBQ3JELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksd0JBQXdCLFNBQVNDLHVCQUFzQkMsUUFBTTtBQUMvRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHVCQUF1QixTQUFTQyxzQkFBcUJDLFFBQU07QUFDN0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxrQkFBa0IsU0FBU0MsaUJBQWdCQyxRQUFNO0FBQ25ELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksd0JBQXdCLFNBQVNDLHVCQUFzQkMsUUFBTTtBQUMvRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGlCQUFpQixTQUFTQyxnQkFBZUMsUUFBTTtBQUNqRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHdCQUF3QixTQUFTQyx1QkFBc0JDLFFBQU07QUFDL0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxtQkFBbUIsU0FBU0Msa0JBQWlCQyxRQUFNO0FBQ3JELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3ZDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksa0JBQWtCLFNBQVNDLGlCQUFnQkMsUUFBTTtBQUNuRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHNCQUFzQixTQUFTQyxxQkFBb0JDLFFBQU07QUFDM0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxxQkFBcUIsU0FBU0Msb0JBQW1CQyxRQUFNO0FBQ3pELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksNEJBQTRCLFNBQVNDLDJCQUEwQkMsUUFBTTtBQUN2RSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLDBCQUEwQixTQUFTQyx5QkFBd0JDLFFBQU07QUFDbkUsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxxQkFBcUIsU0FBU0Msb0JBQW1CQyxRQUFNO0FBQ3pELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxPQUFPO0FBQUEsTUFDUCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN2Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHdCQUF3QixTQUFTQyx1QkFBc0JDLFFBQU07QUFDL0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULE9BQU87QUFBQSxNQUNQLG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxxQkFBcUIsU0FBU0Msb0JBQW1CQyxRQUFNO0FBQ3pELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxLQUFLO0FBQUEsTUFDbkMsVUFBVTtBQUFBLElBQ1osR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN2QixHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUNMO0FBRU8sTUFBSUssVUFBTzs7O0FDekNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxtQkFBbUIsU0FBU0Msa0JBQWlCQyxRQUFNO0FBQ3JELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUkscUJBQXFCLFNBQVNDLG9CQUFtQkMsUUFBTTtBQUN6RCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLFFBQU07QUFDekQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSx1QkFBdUIsU0FBU0Msc0JBQXFCQyxRQUFNO0FBQzdELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksc0JBQXNCLFNBQVNDLHFCQUFvQkMsUUFBTTtBQUMzRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHdCQUF3QixTQUFTQyx1QkFBc0JDLFFBQU07QUFDL0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSx5QkFBeUIsU0FBU0Msd0JBQXVCQyxRQUFNO0FBQ2pFLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3ZDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksdUJBQXVCLFNBQVNDLHNCQUFxQkMsUUFBTTtBQUM3RCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN0Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLG9CQUFvQixTQUFTQyxtQkFBa0JDLFFBQU07QUFDdkQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLEtBQUs7QUFBQSxNQUNuQyxVQUFVO0FBQUEsSUFDWixHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDTDtBQUVPLE1BQUlLLFVBQU87OztBQ3ZDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksMEJBQTBCLFNBQVNDLHlCQUF3QkMsUUFBTTtBQUNuRSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLDJCQUEyQixTQUFTQywwQkFBeUJDLFFBQU07QUFDckUsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxtQkFBbUIsU0FBU0Msa0JBQWlCQyxRQUFNO0FBQ3JELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUkseUJBQXlCLFNBQVNDLHdCQUF1QkMsUUFBTTtBQUNqRSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDekNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxvQkFBb0IsU0FBU0MsbUJBQWtCQyxRQUFNO0FBQ3ZELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3RDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUkscUJBQXFCLFNBQVNDLG9CQUFtQkMsUUFBTTtBQUN6RCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLFFBQU07QUFDekQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxxQkFBcUIsU0FBU0Msb0JBQW1CQyxRQUFNO0FBQ3pELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksa0JBQWtCLFNBQVNDLGlCQUFnQkMsUUFBTTtBQUNuRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsT0FBTztBQUFBLE1BQ1AsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDeENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxtQkFBbUIsU0FBU0Msa0JBQWlCQyxRQUFNO0FBQ3JELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxPQUFPO0FBQUEsTUFDUCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUkseUJBQXlCLFNBQVNDLHdCQUF1QkMsUUFBTTtBQUNqRSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHVCQUF1QixTQUFTQyxzQkFBcUJDLFFBQU07QUFDN0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDdENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxrQkFBa0IsU0FBU0MsaUJBQWdCQyxRQUFNO0FBQ25ELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksZUFBZSxTQUFTQyxjQUFhQyxRQUFNO0FBQzdDLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksZ0JBQWdCLFNBQVNDLGVBQWNDLFFBQU07QUFDL0MsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLFNBQVM7QUFBQSxNQUNULE9BQU87QUFBQSxNQUNQLG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDbkNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxnQkFBZ0IsU0FBU0MsZUFBY0MsUUFBTTtBQUMvQyxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsR0FBRyxJQUFjLFFBQVE7QUFBQSxNQUN4QixHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDeENsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxjQUFjLFNBQVNDLGFBQVlDLFFBQU07QUFDM0MsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxVQUFVO0FBQUEsTUFDVixHQUFHO0FBQUEsTUFDSCxVQUFVO0FBQUEsSUFDWixDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3pDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksb0JBQW9CLFNBQVNDLG1CQUFrQkMsUUFBTTtBQUN2RCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsS0FBSztBQUFBLE1BQ25DLFVBQVU7QUFBQSxJQUNaLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDdkIsR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDTDtBQUVPLE1BQUlLLFVBQU87OztBQ3pDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksZUFBZSxTQUFTQyxjQUFhQyxRQUFNO0FBQzdDLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxPQUFPO0FBQUEsTUFDUCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsR0FBRztBQUFBLElBQ0wsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLFVBQVU7QUFBQSxNQUNWLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUN6Q2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGdCQUFnQixTQUFTQyxlQUFjQyxRQUFNO0FBQy9DLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUkscUJBQXFCLFNBQVNDLG9CQUFtQkMsUUFBTTtBQUN6RCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGlCQUFpQixTQUFTQyxnQkFBZUMsUUFBTTtBQUNqRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHdCQUF3QixTQUFTQyx1QkFBc0JDLFFBQU07QUFDL0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSwwQkFBMEIsU0FBU0MseUJBQXdCQyxRQUFNO0FBQ25FLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksaUNBQWlDLFNBQVNDLGdDQUErQkMsUUFBTTtBQUNqRixRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHdCQUF3QixTQUFTQyx1QkFBc0JDLFFBQU07QUFDL0QsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSwrQkFBK0IsU0FBU0MsOEJBQTZCQyxRQUFNO0FBQzdFLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksa0JBQWtCLFNBQVNDLGlCQUFnQkMsUUFBTTtBQUNuRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGlCQUFpQixTQUFTQyxnQkFBZUMsUUFBTTtBQUNqRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGlCQUFpQixTQUFTQyxnQkFBZUMsUUFBTTtBQUNqRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLDBCQUEwQixTQUFTQyx5QkFBd0JDLFFBQU07QUFDbkUsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxzQkFBc0IsU0FBU0MscUJBQW9CQyxRQUFNO0FBQzNELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksbUJBQW1CLFNBQVNDLGtCQUFpQkMsUUFBTTtBQUNyRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGdCQUFnQixTQUFTQyxlQUFjQyxRQUFNO0FBQy9DLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksa0JBQWtCLFNBQVNDLGlCQUFnQkMsUUFBTTtBQUNuRCxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLFFBQU07QUFDekQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxpQkFBaUIsU0FBU0MsZ0JBQWVDLFFBQU07QUFDakQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLENBQUM7QUFBQSxFQUNKO0FBRU8sTUFBSUssVUFBTzs7O0FDckNsQjtBQUFBO0FBQUEsZ0JBQUFDO0FBQUE7QUFnQkEsTUFBQUMsV0FBdUI7QUFoQnZCLE1BQUlDLGVBQVksQ0FBQyxTQUFTLFNBQVM7QUFFbkMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSSxxQkFBcUIsU0FBU0Msb0JBQW1CQyxRQUFNO0FBQ3pELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksaUJBQWlCLFNBQVNDLGdCQUFlQyxRQUFNO0FBQ2pELFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3JDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksMEJBQTBCLFNBQVNDLHlCQUF3QkMsUUFBTTtBQUNuRSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGtCQUFrQixTQUFTQyxpQkFBZ0JDLFFBQU07QUFDbkQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsVUFBVUEsT0FBSyxTQUNmLFFBQVFILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVwRCxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVM7QUFBQSxNQUNULE9BQU87QUFBQSxNQUNQLG1CQUFtQjtBQUFBLElBQ3JCLEdBQUcsS0FBSyxHQUFHLFFBQVEsSUFBYyxTQUFTO0FBQUEsTUFDeEMsSUFBSTtBQUFBLElBQ04sR0FBRyxLQUFLLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxNQUN0QyxHQUFHO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDeEIsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ3ZDbEI7QUFBQTtBQUFBLGdCQUFBQztBQUFBO0FBZ0JBLE1BQUFDLFdBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxTQUFTO0FBRW5DLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksMEJBQTBCLFNBQVNDLHlCQUF3QkMsUUFBTTtBQUNuRSxRQUFJLFFBQVFBLE9BQUssT0FDYixVQUFVQSxPQUFLLFNBQ2YsUUFBUUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRXBELFdBQU8sSUFBYyxPQUFPQyxZQUFTO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsT0FBTztBQUFBLE1BQ1AsbUJBQW1CO0FBQUEsSUFDckIsR0FBRyxLQUFLLEdBQUcsUUFBUSxJQUFjLFNBQVM7QUFBQSxNQUN4QyxJQUFJO0FBQUEsSUFDTixHQUFHLEtBQUssSUFBSSxNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3RDLEdBQUc7QUFBQSxJQUNMLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJSyxVQUFPOzs7QUNyQ2xCO0FBQUE7QUFBQSxnQkFBQUM7QUFBQTtBQWdCQSxNQUFBQyxXQUF1QjtBQWhCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsU0FBUztBQUVuQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWFsVCxNQUFJLGdCQUFnQixTQUFTQyxlQUFjQyxRQUFNO0FBQy9DLFFBQUksUUFBUUEsT0FBSyxPQUNiLFVBQVVBLE9BQUssU0FDZixRQUFRSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFcEQsV0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxtQkFBbUI7QUFBQSxJQUNyQixHQUFHLEtBQUssR0FBRyxRQUFRLElBQWMsU0FBUztBQUFBLE1BQ3hDLElBQUk7QUFBQSxJQUNOLEdBQUcsS0FBSyxJQUFJLE1BQU0sSUFBYyxRQUFRO0FBQUEsTUFDdEMsR0FBRztBQUFBLElBQ0wsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUVPLE1BQUlLLFVBQU87OztBQ2s1QmxCLE1BQUFDLGtCQUFxQztBQUNyQyxNQUFBQyxxQkFBc0I7QUFDdEIsTUFBQUMscUJBQXVCOzs7QUNsN0JoQixNQUFJLGdCQUFnQjtBQUFBLElBQ3pCLGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLHFCQUFxQjtBQUFBLElBQ3JCLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLE9BQU87QUFBQSxJQUNQLGNBQWM7QUFBQSxJQUNkLFlBQVk7QUFBQSxJQUNaLFFBQVE7QUFBQSxJQUNSLFVBQVU7QUFBQSxJQUNWLGNBQWM7QUFBQSxJQUNkLE1BQU07QUFBQSxJQUNOLFdBQVc7QUFBQSxJQUNYLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLFNBQVM7QUFBQSxJQUNULFlBQVk7QUFBQSxJQUNaLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLGNBQWM7QUFBQSxJQUNkLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLFdBQVc7QUFBQSxJQUNYLE1BQU07QUFBQSxJQUNOLGlCQUFpQjtBQUFBLElBQ2pCLGVBQWU7QUFBQSxJQUNmLFFBQVE7QUFBQSxJQUNSLFlBQVk7QUFBQSxJQUNaLE9BQU87QUFBQSxJQUNQLE9BQU87QUFBQSxJQUNQLEtBQUs7QUFBQSxJQUNMLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxJQUNQLHFCQUFxQjtBQUFBLElBQ3JCLE9BQU87QUFBQSxJQUNQLG1CQUFtQjtBQUFBLElBQ25CLE9BQU87QUFBQSxJQUNQLGNBQWM7QUFBQSxJQUNkLGFBQWE7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxJQUNQLFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLGlCQUFpQjtBQUFBLElBQ2pCLHNCQUFzQjtBQUFBLElBQ3RCLGlCQUFpQjtBQUFBLElBQ2pCLGtCQUFrQjtBQUFBLElBQ2xCLG9CQUFvQjtBQUFBLElBQ3BCLGtCQUFrQjtBQUFBLElBQ2xCLE1BQU07QUFBQSxJQUNOLGVBQWU7QUFBQSxJQUNmLG1CQUFtQjtBQUFBLElBQ25CLHNCQUFzQjtBQUFBLElBQ3RCLHFCQUFxQjtBQUFBLElBQ3JCLHVCQUF1QjtBQUFBLElBQ3ZCLE9BQU87QUFBQSxJQUNQLDRCQUE0QjtBQUFBLElBQzVCLHNCQUFzQjtBQUFBLElBQ3RCLFlBQVk7QUFBQSxJQUNaLFVBQVU7QUFBQSxJQUNWLEtBQUs7QUFBQSxJQUNMLGNBQWM7QUFBQSxJQUNkLGdCQUFnQjtBQUFBLElBQ2hCLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxJQUNULGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLFVBQVU7QUFBQSxJQUNWLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLFdBQVc7QUFBQSxJQUNYLEtBQUs7QUFBQSxJQUNMLGlCQUFpQjtBQUFBLElBQ2pCLGtCQUFrQjtBQUFBLElBQ2xCLFVBQVU7QUFBQSxJQUNWLG1CQUFtQjtBQUFBLElBQ25CLGlCQUFpQjtBQUFBLElBQ2pCLGtCQUFrQjtBQUFBLElBQ2xCLFlBQVk7QUFBQSxJQUNaLGlCQUFpQjtBQUFBLElBQ2pCLGlCQUFpQjtBQUFBLElBQ2pCLGVBQWU7QUFBQSxJQUNmLDRCQUE0QjtBQUFBLElBQzVCLDBCQUEwQjtBQUFBLElBQzFCLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLHVCQUF1QjtBQUFBLElBQ3ZCLHVCQUF1QjtBQUFBLElBQ3ZCLHFCQUFxQjtBQUFBLElBQ3JCLHVCQUF1QjtBQUFBLElBQ3ZCLHNCQUFzQjtBQUFBLElBQ3RCLG9CQUFvQjtBQUFBLElBQ3BCLFlBQVk7QUFBQSxJQUNaLG1CQUFtQjtBQUFBLElBQ25CLDBCQUEwQjtBQUFBLElBQzFCLDJCQUEyQjtBQUFBLElBQzNCLHVCQUF1QjtBQUFBLElBQ3ZCLHdCQUF3QjtBQUFBLElBQ3hCLFlBQVk7QUFBQSxJQUNaLGNBQWM7QUFBQSxJQUNkLGFBQWE7QUFBQSxJQUNiLGlCQUFpQjtBQUFBLElBQ2pCLFlBQVk7QUFBQSxJQUNaLHFCQUFxQjtBQUFBLElBQ3JCLE9BQU87QUFBQSxJQUNQLE9BQU87QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLFlBQVk7QUFBQSxJQUNaLGNBQWM7QUFBQSxJQUNkLEtBQUs7QUFBQSxJQUNMLFdBQVc7QUFBQSxJQUNYLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULGFBQWE7QUFBQSxJQUNiLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLGFBQWE7QUFBQSxJQUNiLGNBQWM7QUFBQSxJQUNkLG1CQUFtQjtBQUFBLElBQ25CLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLGdCQUFnQjtBQUFBLElBQ2hCLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLGdCQUFnQjtBQUFBLElBQ2hCLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxJQUNQLGNBQWM7QUFBQSxJQUNkLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLFdBQVc7QUFBQSxJQUNYLE9BQU87QUFBQSxJQUNQLGNBQWM7QUFBQSxJQUNkLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLG9CQUFvQjtBQUFBLElBQ3BCLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGlCQUFpQjtBQUFBLElBQ2pCLGdCQUFnQjtBQUFBLElBQ2hCLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLElBQUk7QUFBQSxJQUNKLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLFVBQVU7QUFBQSxJQUNWLGdCQUFnQjtBQUFBLElBQ2hCLGVBQWU7QUFBQSxJQUNmLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxJQUNOLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxJQUNULGFBQWE7QUFBQSxJQUNiLGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLGVBQWU7QUFBQSxJQUNmLFdBQVc7QUFBQSxJQUNYLGVBQWU7QUFBQSxJQUNmLFdBQVc7QUFBQSxJQUNYLHVCQUF1QjtBQUFBLElBQ3ZCLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLHFCQUFxQjtBQUFBLElBQ3JCLFVBQVU7QUFBQSxJQUNWLGlCQUFpQjtBQUFBLElBQ2pCLGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLGdCQUFnQjtBQUFBLElBQ2hCLGFBQWE7QUFBQSxJQUNiLGtCQUFrQjtBQUFBLElBQ2xCLG1CQUFtQjtBQUFBLElBQ25CLHNCQUFzQjtBQUFBLElBQ3RCLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxJQUNULGFBQWE7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLGdCQUFnQjtBQUFBLElBQ2hCLGFBQWE7QUFBQSxJQUNiLGNBQWM7QUFBQSxJQUNkLFVBQVU7QUFBQSxJQUNWLGVBQWU7QUFBQSxJQUNmLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQSxJQUNYLFdBQVc7QUFBQSxJQUNYLG1CQUFtQjtBQUFBLElBQ25CLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULGNBQWM7QUFBQSxJQUNkLGdCQUFnQjtBQUFBLElBQ2hCLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGNBQWM7QUFBQSxJQUNkLGdCQUFnQjtBQUFBLElBQ2hCLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLHFCQUFxQjtBQUFBLElBQ3JCLFNBQVM7QUFBQSxJQUNULGdCQUFnQjtBQUFBLElBQ2hCLFlBQVk7QUFBQSxJQUNaLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLElBQ2hCLGVBQWU7QUFBQSxJQUNmLG9CQUFvQjtBQUFBLElBQ3BCLFFBQVE7QUFBQSxJQUNSLHdCQUF3QjtBQUFBLElBQ3hCLGtCQUFrQjtBQUFBLElBQ2xCLGlCQUFpQjtBQUFBLElBQ2pCLGVBQWU7QUFBQSxJQUNmLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLE9BQU87QUFBQSxJQUNQLGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxJQUNQLGVBQWU7QUFBQSxJQUNmLHFCQUFxQjtBQUFBLElBQ3JCLFFBQVE7QUFBQSxJQUNSLGVBQWU7QUFBQSxJQUNmLE1BQU07QUFBQSxJQUNOLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLGFBQWE7QUFBQSxJQUNiLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLHFCQUFxQjtBQUFBLElBQ3JCLFNBQVM7QUFBQSxJQUNULGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQSxJQUNYLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxJQUNQLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULEtBQUs7QUFBQSxJQUNMLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLFlBQVk7QUFBQSxJQUNaLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLG9CQUFvQjtBQUFBLElBQ3BCLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLGtCQUFrQjtBQUFBLElBQ2xCLE9BQU87QUFBQSxJQUNQLG1CQUFtQjtBQUFBLElBQ25CLFNBQVM7QUFBQSxJQUNULGVBQWU7QUFBQSxJQUNmLFVBQVU7QUFBQSxJQUNWLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLE1BQU07QUFBQSxJQUNOLGlCQUFpQjtBQUFBLElBQ2pCLE9BQU87QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLG1CQUFtQjtBQUFBLElBQ25CLHNCQUFzQjtBQUFBLElBQ3RCLGFBQWE7QUFBQSxJQUNiLGdCQUFnQjtBQUFBLElBQ2hCLHdCQUF3QjtBQUFBLElBQ3hCLHdCQUF3QjtBQUFBLElBQ3hCLGVBQWU7QUFBQSxJQUNmLE9BQU87QUFBQSxJQUNQLE9BQU87QUFBQSxJQUNQLFdBQVc7QUFBQSxJQUNYLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLFdBQVc7QUFBQSxJQUNYLGdCQUFnQjtBQUFBLElBQ2hCLFlBQVk7QUFBQSxJQUNaLGlCQUFpQjtBQUFBLElBQ2pCLGdCQUFnQjtBQUFBLElBQ2hCLGlCQUFpQjtBQUFBLElBQ2pCLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLElBQ2hCLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLFdBQVc7QUFBQSxJQUNYLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQTtBQUFBLElBRWIsU0FBUztBQUFBLElBQ1QscUJBQXFCO0FBQUEsSUFDckIsc0JBQXNCO0FBQUEsSUFDdEIsb0JBQW9CO0FBQUEsSUFDcEIsaUJBQWlCO0FBQUEsSUFDakIsS0FBSztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sYUFBYTtBQUFBLElBQ2IsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLElBQ2IsYUFBYTtBQUFBLElBQ2IsWUFBWTtBQUFBLElBQ1osVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1IscUJBQXFCO0FBQUEsSUFDckIsV0FBVztBQUFBLElBQ1gsTUFBTTtBQUFBLElBQ04sWUFBWTtBQUFBLElBQ1osT0FBTztBQUFBLElBQ1AsZUFBZTtBQUFBLElBQ2YsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1QsZ0JBQWdCO0FBQUEsSUFDaEIsa0JBQWtCO0FBQUEsSUFDbEIseUJBQXlCO0FBQUEsSUFDekIsZ0JBQWdCO0FBQUEsSUFDaEIsdUJBQXVCO0FBQUEsSUFDdkIsVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1Qsa0JBQWtCO0FBQUEsSUFDbEIsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1QsYUFBYTtBQUFBLElBQ2IsU0FBUztBQUFBLElBQ1Qsa0JBQWtCO0FBQUEsSUFDbEIsY0FBYztBQUFBLElBQ2QsWUFBWTtBQUFBLElBQ1osVUFBVTtBQUFBLElBQ1Ysa0JBQWtCO0FBQUEsSUFDbEIsb0JBQW9CO0FBQUEsSUFDcEIsUUFBUTtBQUFBO0FBQUEsSUFFUixZQUFZO0FBQUEsSUFDWixpQkFBaUI7QUFBQSxJQUNqQixZQUFZO0FBQUEsSUFDWixhQUFhO0FBQUEsSUFDYixjQUFjO0FBQUEsSUFDZCxZQUFZO0FBQUEsSUFDWiwwQkFBMEI7QUFBQSxJQUMxQixlQUFlO0FBQUEsSUFDZixXQUFXO0FBQUEsSUFDWCxrQkFBa0I7QUFBQSxJQUNsQixjQUFjO0FBQUEsSUFDZCxXQUFXO0FBQUEsSUFDWCxpQkFBaUI7QUFBQSxJQUNqQixZQUFZO0FBQUEsSUFDWixnQkFBZ0I7QUFBQSxJQUNoQixZQUFZO0FBQUEsSUFDWixXQUFXO0FBQUEsSUFDWCxnQkFBZ0I7QUFBQSxJQUNoQixlQUFlO0FBQUEsSUFDZixVQUFVO0FBQUEsSUFDVixnQkFBZ0I7QUFBQSxJQUNoQixnQkFBZ0I7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxVQUFVO0FBQUEsSUFDVixjQUFjO0FBQUEsSUFDZCxhQUFhO0FBQUEsSUFDYixvQkFBb0I7QUFBQSxJQUNwQixrQkFBa0I7QUFBQSxJQUNsQixhQUFhO0FBQUEsSUFDYixnQkFBZ0I7QUFBQSxJQUNoQixhQUFhO0FBQUEsSUFDYixXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixhQUFhO0FBQUEsSUFDYixlQUFlO0FBQUEsSUFDZixjQUFjO0FBQUEsSUFDZCxnQkFBZ0I7QUFBQSxJQUNoQixpQkFBaUI7QUFBQSxJQUNqQixlQUFlO0FBQUEsSUFDZixZQUFZO0FBQUEsSUFDWixrQkFBa0I7QUFBQSxJQUNsQixtQkFBbUI7QUFBQSxJQUNuQixXQUFXO0FBQUEsSUFDWCxpQkFBaUI7QUFBQSxJQUNqQixZQUFZO0FBQUEsSUFDWixhQUFhO0FBQUEsSUFDYixhQUFhO0FBQUEsSUFDYixhQUFhO0FBQUEsSUFDYixVQUFVO0FBQUEsSUFDVixXQUFXO0FBQUEsSUFDWCxpQkFBaUI7QUFBQSxJQUNqQixlQUFlO0FBQUEsRUFDakI7OztBQ3RjQSx5QkFBd0M7QUFDeEMsTUFBSSxTQUFTLENBQUM7QUFFZCxXQUFTLGVBQWU7QUFJdEIsa0RBQXdCLFdBQVk7QUFDbEMsZUFBUyxJQUFJLEdBQUcsSUFBSSxPQUFPLFFBQVEsS0FBSztBQUN0QyxlQUFPLENBQUMsRUFBRTtBQUFBLE1BQ1o7QUFFQSxhQUFPLFNBQVM7QUFBQSxJQUNsQixDQUFDO0FBQUEsRUFDSDtBQUVPLFdBQVMsbUJBQW1CLElBQUk7QUFDckMsUUFBSSxPQUFPLFdBQVcsR0FBRztBQUN2QixpQkFBVyxZQUFZO0FBQUEsSUFDekI7QUFFQSxXQUFPLEtBQUssRUFBRTtBQUFBLEVBQ2hCOzs7QUN0Qk8sTUFBSSxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsVUFBVSxXQUFXLFVBQVUsUUFBUSxXQUFXLFNBQVMsU0FBUztBQUNuSCxXQUFTLGFBQWEsTUFBTTtBQUNqQyxXQUFPLE9BQU8sU0FBUyxJQUFJO0FBQUEsRUFDN0I7OztBQ0RBLE1BQUFDLGtCQUFrQjs7O0FDQ1gsTUFBSSxxQkFBcUIsU0FBU0Msb0JBQW1CQyxRQUFNLE9BQU87QUFDdkUsUUFBSSxXQUFXQSxPQUFLLFVBQ2hCLFlBQVlBLE9BQUs7QUFFckIsUUFBSUMsU0FBUSxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FDN0UsU0FBU0EsT0FBTTtBQUVuQixRQUFJLFVBQVU7QUFBZSxhQUFPO0FBRXBDLFFBQUksV0FBVyxlQUFlO0FBQzVCLFVBQUksVUFBVSxTQUFTO0FBQ3JCLGVBQU8sZUFBZSxTQUFTLE9BQU8sT0FBTyxHQUFHO0FBQUEsTUFDbEQsV0FBVyxVQUFVLFdBQVc7QUFDOUIsZUFBTyxlQUFlLFNBQVMsT0FBTyxZQUFZLEdBQUc7QUFBQSxNQUN2RCxPQUFPO0FBQ0wsZUFBTyxlQUFlLFNBQVMsT0FBTyxLQUFLLEdBQUcsR0FBRztBQUFBLE1BQ25EO0FBQUEsSUFDRixPQUFPO0FBQ0wsVUFBSUMsZUFBYyxTQUFTQSxhQUFZQyxRQUFPO0FBQzVDLGVBQU8sY0FBYyxTQUFTLE1BQU1BLFFBQU8sR0FBRyxJQUFJLEtBQUtBLFFBQU8sR0FBRztBQUFBLE1BQ25FO0FBRUEsY0FBUSxPQUFPO0FBQUEsUUFDYixLQUFLO0FBQ0gsaUJBQU8sU0FBUyxPQUFPO0FBQUEsUUFFekIsS0FBSztBQUNILGlCQUFPLFNBQVMsT0FBTztBQUFBLFFBRXpCO0FBQ0UsaUJBQU9ELGFBQVksU0FBUyxPQUFPLEtBQUssQ0FBQztBQUFBLE1BQzdDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDTyxNQUFJLHdCQUF3QixTQUFTRSx1QkFBc0IsT0FBTztBQUN2RSxRQUFJQyxTQUFRLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxHQUM3RSxTQUFTQSxPQUFNO0FBRW5CLFFBQUksV0FBVyxZQUFZO0FBQzNCLFdBQU8sbUJBQW1CLFVBQVUsT0FBTztBQUFBLE1BQ3pDO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUNPLE1BQUksMkJBQTJCLFNBQVNDLDRCQUEyQjtBQUN4RSxXQUFPO0FBQUEsTUFDTCxhQUEwQixvQkFBSSxxQkFBcUIsc0JBQXNCLGFBQWEsR0FBRyxzQkFBc0I7QUFBQSxNQUMvRyxPQUFvQixvQkFBSSxxQkFBcUIsc0JBQXNCLE9BQU8sR0FBRyxnQkFBZ0I7QUFBQSxNQUM3RixTQUFzQixvQkFBSSxxQkFBcUIsc0JBQXNCLFNBQVMsR0FBRyxrQkFBa0I7QUFBQSxNQUNuRyxRQUFxQixvQkFBSSxxQkFBcUIsc0JBQXNCLFFBQVEsR0FBRyxpQkFBaUI7QUFBQSxNQUNoRyxTQUFzQixvQkFBSSxxQkFBcUIsc0JBQXNCLFNBQVMsR0FBRyxrQkFBa0I7QUFBQSxNQUNuRyxTQUFzQixvQkFBSSxxQkFBcUIsc0JBQXNCLFNBQVMsR0FBRyxrQkFBa0I7QUFBQSxNQUNuRyxTQUFzQixvQkFBSSxxQkFBcUIsc0JBQXNCLFNBQVMsR0FBRyxrQkFBa0I7QUFBQSxNQUNuRyxRQUFxQixvQkFBSSxxQkFBcUIsc0JBQXNCLFFBQVEsR0FBRyxpQkFBaUI7QUFBQSxJQUNsRztBQUFBLEVBQ0Y7OztBQ2xETyxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLFFBQU07QUFDaEUsUUFBSSxnQkFBZ0JBLE9BQUssVUFDckJDLFVBQVMsY0FBYyxRQUN2QkMsUUFBTyxjQUFjO0FBRXpCLFFBQUlDLFNBQVEsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQzdFLGNBQWNBLE9BQU0sWUFDcEIsbUJBQW1CQSxPQUFNLFlBQ3pCLGFBQWEscUJBQXFCLFNBQVMsZ0JBQWdCLGtCQUMzRCxjQUFjQSxPQUFNLE9BQ3BCLFFBQVEsZ0JBQWdCLFNBQVMsU0FBUyxhQUMxQyxRQUFRQSxPQUFNLE1BQ2QsVUFBVUEsT0FBTTtBQUdwQixRQUFJLGFBQWEsZUFBZSxlQUFlRixRQUFPLFdBQVcsR0FBRztBQUVwRSxRQUFJLGdCQUFnQixTQUFTQyxNQUFLO0FBQ2xDLFFBQUksa0JBQWtCLFdBQVcsVUFBVSxTQUFTLFFBQVEsT0FBT0EsTUFBSyxHQUFHLFVBQVUsSUFBSUEsTUFBSztBQUc5RixRQUFJLGlCQUFpQixvQkFBb0IsT0FBTyxZQUFZLEdBQUcsRUFBRSxPQUFPLFlBQVksR0FBRztBQUN2RixXQUFPLG9CQUFvQixPQUFPLE9BQU8sZ0RBQWdELEVBQUUsT0FBTyxlQUFlLG1CQUFtQixFQUFFLE9BQU8sZUFBZSx3RUFBd0UsRUFBRSxPQUFPLFlBQVksK0RBQStELEVBQUUsT0FBTyxlQUFlLG1CQUFtQixFQUFFLE9BQU8saUJBQWlCLFNBQVMsRUFBRSxPQUFPLFlBQVksMEdBQTBHLEVBQUUsT0FBTyxZQUFZLGtCQUFrQixFQUFFLE9BQU8sZ0JBQWdCLE1BQU07QUFBQSxFQUM3a0I7OztBQzFCTyxNQUFJLGlCQUFpQixTQUFTRSxnQkFBZUMsUUFBTUMsT0FBTTtBQUM5RCxRQUFJLFdBQVdELE9BQUs7QUFFcEIsWUFBUUMsT0FBTTtBQUFBLE1BQ1osS0FBSztBQUNILGVBQU87QUFBQSxNQUVULEtBQUs7QUFDSCxlQUFPLFNBQVMsS0FBSztBQUFBLE1BRXZCO0FBQ0UsZUFBTyxTQUFTLEtBQUtBLEtBQUk7QUFBQSxJQUM3QjtBQUFBLEVBQ0Y7QUFDTyxNQUFJLG9CQUFvQixTQUFTQyxtQkFBa0JELE9BQU07QUFDOUQsUUFBSSxXQUFXLFlBQVk7QUFDM0IsV0FBTyxlQUFlLFVBQVVBLEtBQUk7QUFBQSxFQUN0QztBQUNPLE1BQUksbUJBQW1CLFNBQVNFLGtCQUFpQixNQUFNO0FBQzVELFFBQUlDLFlBQVcsT0FBTyxXQUFXLE9BQU8sWUFBWSxJQUFJLENBQUMsSUFBSTtBQUM3RCxXQUFPO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixJQUFpQixvQkFBSUEsV0FBVSxLQUFLLGtCQUFrQixJQUFJLEdBQUcsYUFBYTtBQUFBLE1BQzFFLEdBQWdCLG9CQUFJQSxXQUFVLEtBQUssa0JBQWtCLEdBQUcsR0FBRyxZQUFZO0FBQUEsTUFDdkUsR0FBZ0Isb0JBQUlBLFdBQVUsS0FBSyxrQkFBa0IsR0FBRyxHQUFHLFlBQVk7QUFBQSxNQUN2RSxHQUFnQixvQkFBSUEsV0FBVSxLQUFLLGtCQUFrQixHQUFHLEdBQUcsWUFBWTtBQUFBLE1BQ3ZFLElBQWlCLG9CQUFJQSxXQUFVLEtBQUssa0JBQWtCLElBQUksR0FBRyxhQUFhO0FBQUEsSUFDNUU7QUFBQSxFQUNGOzs7QUN0Qk8sTUFBSSxlQUFlLFNBQVNDLGNBQWEsVUFBVTtBQUN4RCxRQUFJLFNBQVMsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSTtBQUNqRixRQUFJLFVBQVUsVUFBVSxTQUFTLElBQUksVUFBVSxDQUFDLElBQUk7QUFFcEQsUUFBSSxlQUFlLFNBQVMsTUFBTTtBQUNsQyxRQUFJLGdCQUFnQixZQUFZLFFBQVEsWUFBWSxTQUFTLFNBQVMsUUFBUSxVQUFVLFNBQVMsTUFBTTtBQUN2RyxRQUFJLGdCQUFnQjtBQUVwQixRQUFJLFdBQVcsU0FBUztBQUN0QixzQkFBZ0IsSUFBSSxPQUFPLFlBQVk7QUFBQSxJQUN6QyxXQUFXLFdBQVcsVUFBVTtBQUM5QixzQkFBZ0IsR0FBRyxPQUFPLFlBQVk7QUFBQSxJQUN4QyxXQUFXLFdBQVcsVUFBVTtBQUM5QixzQkFBZ0IsUUFBUSxPQUFPLGNBQWMsU0FBUztBQUFBLElBQ3hEO0FBUUEsV0FBTyxrQkFBa0IsT0FBTyxjQUFjLFNBQVMsRUFBRSxPQUFPLGNBQWMseUJBQXlCLEVBQUUsT0FBTyxlQUFlLGtWQUF3VjtBQUFBLEVBQ3pkOzs7QUMzQk8sTUFBSSxjQUFjLFNBQVNDLGFBQVlDLFFBQU0sT0FBTyxTQUFTO0FBQ2xFLFFBQUksV0FBV0EsT0FBSztBQUNwQixXQUFPO0FBQUEsTUFDTCxVQUFVLHFCQUFxQixPQUFPLFVBQVUsT0FBTztBQUFBLE1BQ3ZELFlBQVksMEJBQTBCLE9BQU8sVUFBVSxPQUFPO0FBQUEsSUFDaEU7QUFBQSxFQUNGO0FBVU8sTUFBSSxtQkFBbUIsU0FBU0Msb0JBQW1CO0FBQ3hELFdBQU87QUFBQSxFQUNUOzs7QUNuQk8sTUFBSSxnQkFBZ0I7OztBQ0xwQixNQUFJLGNBQWM7OztBUFB6QixXQUFTLDBCQUEwQixLQUFLO0FBQUUsUUFBSSxPQUFPO0FBQU0sWUFBTSxJQUFJLFVBQVUsOEJBQThCO0FBQUEsRUFBRztBQWdCekcsTUFBSSxrQkFBa0IsU0FBU0MsaUJBQWdCQyxRQUFNO0FBQzFELDhCQUEwQkEsTUFBSTtBQUU5QixRQUFJLGtCQUFrQixZQUFZO0FBQ2xDLFFBQUksV0FBVyxnQkFBZ0IsVUFDM0IsWUFBWSxnQkFBZ0I7QUFDaEMsUUFBSUMsUUFBTyxTQUFTLE1BQ2hCQyxVQUFTLFNBQVMsUUFDbEJDLFFBQU8sU0FBUztBQU1wQixRQUFJLGtCQUFrQixtQkFBbUIsaUJBQWlCO0FBQUEsTUFDeEQsWUFBWSxjQUFjLFVBQVUsTUFBTUQsUUFBTyxNQUFNLElBQUksSUFBSSxLQUFLQSxRQUFPLE1BQU0sSUFBSTtBQUFBLE1BQ3JGLE9BQU87QUFBQSxJQUNULENBQUM7QUFNRCxRQUFJLFlBQVksc0JBQXNCLE9BQU9DLE1BQUssUUFBUSxzQkFBc0IsR0FBRyxPQUFPQSxNQUFLLE1BQU1BLE1BQUssS0FBSyxLQUFLLElBQUlGLE9BQU0sSUFBSSxHQUFHLHNCQUFzQixFQUFFLE9BQU9BLFNBQVFFLE1BQUssTUFBTUEsTUFBSyxLQUFLLEtBQUssSUFBSUYsUUFBTyxzQkFBc0IsRUFBRSxPQUFPRSxNQUFLLE9BQU9BLE1BQUssS0FBSyxNQUFNLEdBQUcsT0FBTztBQUt0UixRQUFJQyxVQUFzQixvQkFBSSxhQUFPLFVBQVUsaUJBQWlCLEtBQUssV0FBVyw0RUFBNEVGLFFBQU8sTUFBTSxXQUFXQSxRQUFPLE1BQU0sb0NBQW9DQyxNQUFLLFlBQVksNEJBQTRCLFdBQVcseUJBQXlCQSxNQUFLLFFBQVEsK0NBQStDQSxNQUFLLE9BQU8sTUFBTSxjQUFjLGFBQWEsUUFBUSxHQUFHLDZCQUE2QixlQUFlRCxRQUFPLFNBQVMsY0FBYyxVQUFVLE1BQU0sR0FBRyxHQUFHLGNBQWNBLFFBQU8sYUFBYSx1R0FBdUc7QUFDbnBCLFdBQU8sSUFBYyxRQUFRO0FBQUEsTUFDM0IsUUFBUUU7QUFBQSxJQUNWLENBQUM7QUFBQSxFQUNIOzs7QVFoREEsTUFBSTtBQUVKLFdBQVMsdUJBQXVCLFNBQVMsS0FBSztBQUFFLFFBQUksQ0FBQyxLQUFLO0FBQUUsWUFBTSxRQUFRLE1BQU0sQ0FBQztBQUFBLElBQUc7QUFBRSxXQUFPLE9BQU8sT0FBTyxPQUFPLGlCQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sT0FBTyxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUFBLEVBQUc7QUFFdEwsV0FBUyxtQ0FBbUM7QUFBRSxXQUFPO0FBQUEsRUFBbU87QUFZeFIsTUFBSSxXQUFXLFNBQVNDLFVBQVNDLE9BQU07QUFDckMsV0FBTyxTQUFTLE9BQU8sV0FBVyxTQUFTQSxLQUFJLEdBQUcsU0FBUyxFQUFFLE9BQU8sV0FBVyxVQUFVQSxLQUFJLEdBQUcsT0FBTztBQUFBLEVBQ3pHO0FBRU8sTUFBSSxxQkFBcUI7QUFDaEMsTUFBSSxjQUFjLFVBQVUsb0JBQW9CLGtCQUFrQix1QkFBdUIsQ0FBQywyQkFBMkIsNENBQTRDLENBQUMsSUFBSSxrQkFBa0I7QUFFeEwsTUFBSSxPQUFPLFFBQXdDO0FBQUEsSUFDakQsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLEVBQ1YsSUFBSTtBQUFBLElBQ0YsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsVUFBVTtBQUFBLEVBQ1o7QUFFQSxNQUFJLFFBQVEsUUFBd0M7QUFBQSxJQUNsRCxNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsRUFDVixJQUFJO0FBQUEsSUFDRixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixVQUFVO0FBQUEsRUFDWjtBQUVPLE1BQUksZ0JBQWdCLFNBQVNDLGVBQWNDLFFBQU87QUFDdkQsUUFBSSxXQUFXQSxPQUFNO0FBQ3JCLFdBQU87QUFBQTtBQUFBLE1BRUwsU0FBc0Isb0JBQUkscUlBQXFJLFNBQVMsT0FBTyxjQUFjLG1CQUFtQjtBQUFBO0FBQUEsTUFFaE4sUUFBcUIsb0JBQUksVUFBVSxTQUFTLE9BQU8sWUFBWSxpQkFBaUI7QUFBQSxNQUNoRixRQUFxQixvQkFBSSxVQUFVLFNBQVMsT0FBTyxZQUFZLGlCQUFpQjtBQUFBLE1BQ2hGLE9BQW9CLG9CQUFJLFVBQVUsU0FBUyxPQUFPLE9BQU8sNEVBQTRFO0FBQUEsTUFDckksU0FBc0Isb0JBQUksVUFBVSxTQUFTLE9BQU8sYUFBYSxrQkFBa0I7QUFBQSxNQUNuRixTQUFzQixvQkFBSSxVQUFVLFNBQVMsT0FBTyxhQUFhLGtCQUFrQjtBQUFBLE1BQ25GLFNBQXNCLG9CQUFJLFVBQVUsU0FBUyxPQUFPLGFBQWEsa0JBQWtCO0FBQUEsTUFDbkYsTUFBbUIsb0JBQUksVUFBVSxTQUFTLE9BQU8sT0FBTywyRUFBMkU7QUFBQSxNQUNuSSxTQUFzQixvQkFBSSxVQUFVLFNBQVMsT0FBTyxhQUFhLGtCQUFrQjtBQUFBLE1BQ25GLFNBQVM7QUFBQSxNQUNULFNBQXNCLG9CQUFJLGlCQUFpQjtBQUFBLE1BQzNDLGFBQTBCLG9CQUFJLHFCQUFxQjtBQUFBLE1BQ25ELG9CQUFvQjtBQUFBO0FBQUEsTUFFcEIsVUFBdUIsb0JBQUksa0JBQWtCO0FBQUEsTUFDN0MsR0FBZ0Isb0JBQUksU0FBUyxTQUFTLEtBQUssQ0FBQyxHQUFHLFdBQVc7QUFBQSxNQUMxRCxHQUFnQixvQkFBSSxTQUFTLFNBQVMsS0FBSyxJQUFJLEdBQUcsV0FBVztBQUFBLE1BQzdELEdBQWdCLG9CQUFJLFNBQVMsU0FBUyxLQUFLLENBQUMsR0FBRyxXQUFXO0FBQUEsTUFDMUQsSUFBaUIsb0JBQUksU0FBUyxTQUFTLEtBQUssRUFBRSxHQUFHLFlBQVk7QUFBQSxNQUM3RCxLQUFrQixvQkFBSSxTQUFTLFNBQVMsS0FBSyxHQUFHLEdBQUcsYUFBYTtBQUFBO0FBQUE7QUFBQSxNQUdoRSxLQUFrQixvQkFBSSxTQUFTLFNBQVMsT0FBTyxNQUFNLGtDQUFrQyxTQUFTLE9BQU8sYUFBYSxlQUFlO0FBQUEsTUFDbkksTUFBbUIsb0JBQUksY0FBYztBQUFBO0FBQUEsTUFFckMsV0FBd0Isb0JBQUksWUFBWSxvQkFBb0IsaURBQWlELFNBQVMsT0FBTyxPQUFPLE9BQU8sb0JBQW9CO0FBQUEsTUFDL0osVUFBdUIsb0JBQUksZUFBZSxlQUFlLGFBQWEsS0FBSyxTQUFTLFVBQVUsUUFBUSwwQ0FBMEM7QUFBQSxJQUNsSjtBQUFBLEVBQ0Y7OztBWmcwQkEsTUFBTSwwQkFBMEIsRUFBQyw2QkFBNEIsdUJBQXNCLHlCQUF3QixtQkFBc0IscUJBQW9CLGVBQXNCLDRCQUEyQixzQkFBc0IsNkJBQTRCLHVCQUFzQiwwQkFBeUIsb0JBQXNCLHlCQUF3QixtQkFBc0IsNEJBQTJCLHNCQUFzQixxQ0FBb0MsK0JBQXNCLHlCQUF3QixtQkFBc0IsdUJBQXNCLGlCQUF1Qiw4QkFBNkIsd0JBQXVCLDZCQUE0Qix1QkFBdUIsMEJBQXlCLG9CQUF1Qix5QkFBd0IsbUJBQXVCLHdCQUF1QixrQkFBdUIsMkJBQTBCLHFCQUF1Qiw2Q0FBNEMsdUNBQXVCLDZCQUE0Qix1QkFBdUIsNEJBQTJCLHNCQUF1Qiw0QkFBMkIsc0JBQXVCLHVCQUFzQixpQkFBdUIsNEJBQTJCLHNCQUF1Qix5QkFBd0IsbUJBQXVCLHVCQUFzQixpQkFBdUIseUJBQXdCLG1CQUF1Qix3QkFBdUIsa0JBQXVCLDZCQUE0Qix1QkFBdUIsb0NBQW1DLDhCQUF1QixpQ0FBZ0MsMkJBQXVCLGdDQUErQiwwQkFBdUIsd0JBQXVCLGtCQUF1Qix3QkFBdUIsa0JBQXVCLDhCQUE2Qix3QkFBdUIsOEJBQTZCLHdCQUF1QiwyQkFBMEIscUJBQXVCLHNCQUFxQixnQkFBdUIsOEJBQTZCLHdCQUF1Qiw0QkFBMkIsc0JBQXVCLDhCQUE2Qix3QkFBdUIsNEJBQTJCLHNCQUF1QixtQ0FBa0MsNkJBQXVCLDZCQUE0Qix1QkFBdUIsaUNBQWdDLDJCQUF1QixtQ0FBa0MsNkJBQXVCLDRCQUEyQixzQkFBdUIsc0NBQXFDLGdDQUF1QiwwQkFBeUIsb0JBQXVCLHVCQUFzQixpQkFBdUIsNEJBQTJCLHNCQUF1QixxQ0FBb0MsK0JBQXVCLDBCQUF5QixvQkFBdUIsK0JBQThCLHlCQUF1Qiw2QkFBNEIsdUJBQXVCLDJCQUEwQixxQkFBdUIsb0NBQW1DLDhCQUF1QixvQkFBbUIsY0FBdUIsd0JBQXVCLGtCQUF1QiwwQkFBeUIsb0JBQXVCLDBCQUF5QixvQkFBdUIsMEJBQXlCLG9CQUF1QiwyQkFBMEIscUJBQXVCLHdCQUF1QixrQkFBdUIsd0JBQXVCLGtCQUF1QixzQkFBcUIsZ0JBQXVCLG9CQUFtQixjQUF1Qix5QkFBd0IsbUJBQXVCLG9CQUFtQixjQUF1QixnQ0FBK0IsMEJBQXVCLDhCQUE2Qix3QkFBdUIsc0JBQXFCLGdCQUF1QiwwQkFBeUIsb0JBQXVCLHFCQUFvQixlQUF1QixxQkFBb0IsZUFBdUIsbUJBQWtCLGFBQXVCLHdCQUF1QixrQkFBdUIsd0JBQXVCLGtCQUF1QixxQkFBb0IsZUFBdUIsbUNBQWtDLDZCQUF1QixxQkFBb0IsZUFBdUIscUJBQW9CLGVBQXVCLDRCQUEyQixzQkFBdUIsMkJBQTBCLHFCQUF1QiwwQkFBeUIsb0JBQXVCLHVCQUFzQixpQkFBdUIscUJBQW9CLGVBQXVCLHVCQUFzQixpQkFBdUIsdUJBQXNCLGlCQUF1Qix5QkFBd0IsbUJBQXVCLCtCQUE4Qix5QkFBdUIsb0NBQW1DLDhCQUF1QiwrQkFBOEIseUJBQXVCLGdDQUErQiwwQkFBdUIsbUNBQWtDLDZCQUF1QixpQ0FBZ0MsMkJBQXVCLG9CQUFtQixjQUF1Qiw4QkFBNkIsd0JBQXVCLHFCQUFvQixlQUF1QixvQ0FBbUMsOEJBQXVCLDBCQUF5QixvQkFBdUIsd0JBQXVCLGtCQUF3QixtQkFBa0IsYUFBd0Isd0JBQXVCLGtCQUF3Qix1QkFBc0IsaUJBQXdCLHdCQUF1QixrQkFBd0IsNEJBQTJCLHNCQUF3Qiw2QkFBNEIsdUJBQXdCLHlCQUF3QixtQkFBd0IsbUJBQWtCLGFBQXdCLCtCQUE4Qix5QkFBd0IsZ0NBQStCLDBCQUF3Qix3QkFBdUIsa0JBQXdCLDBDQUF5QyxvQ0FBd0Isd0NBQXVDLGtDQUF3QixxQ0FBb0MsK0JBQXdCLHFDQUFvQywrQkFBd0IsbUNBQWtDLDZCQUF3QixxQ0FBb0MsK0JBQXdCLG9DQUFtQyw4QkFBd0Isa0NBQWlDLDRCQUF3Qix3Q0FBdUMsa0NBQXdCLHlDQUF3QyxtQ0FBd0IscUNBQW9DLCtCQUF3QixzQ0FBcUMsZ0NBQXdCLG1DQUFrQyw2QkFBd0IsaUNBQWdDLDJCQUF3QixrQ0FBaUMsNEJBQXdCLDJCQUEwQixxQkFBd0IsZ0NBQStCLDBCQUF3QixpQ0FBZ0MsMkJBQXdCLDhCQUE2Qix3QkFBd0IsOEJBQTZCLHdCQUF3Qiw2QkFBNEIsdUJBQXdCLDJCQUEwQixxQkFBd0IsbUNBQWtDLDZCQUF3QiwyQkFBMEIscUJBQXdCLDZCQUE0Qix1QkFBd0IsNEJBQTJCLHNCQUF3QixnQ0FBK0IsMEJBQXdCLDJCQUEwQixxQkFBd0IscUNBQW9DLCtCQUF3QixxQkFBb0IsZUFBd0IscUJBQW9CLGVBQXdCLG1CQUFrQixhQUF3QixzQkFBcUIsZ0JBQXdCLG9CQUFtQixjQUF3QixzQkFBcUIsZ0JBQXdCLDBCQUF5QixvQkFBd0Isc0JBQXFCLGdCQUF3QixtQkFBa0IsYUFBd0IsMEJBQXlCLG9CQUF3QiwwQkFBeUIsb0JBQXdCLDRCQUEyQixzQkFBd0Isd0JBQXVCLGtCQUF3QixzQkFBcUIsZ0JBQXdCLG9CQUFtQixjQUF3QixvQkFBbUIsY0FBd0IsNEJBQTJCLHNCQUF3Qiw2QkFBNEIsdUJBQXdCLGtDQUFpQyw0QkFBd0IsMkJBQTBCLHFCQUF3Qix5QkFBd0IsbUJBQXdCLDZCQUE0Qix1QkFBd0IsOEJBQTZCLHdCQUF3QiwyQkFBMEIscUJBQXdCLHdCQUF1QixrQkFBd0Isb0JBQW1CLGNBQXdCLHVCQUFzQixpQkFBd0IscUJBQW9CLGVBQXdCLG9CQUFtQixjQUF3QiwrQkFBOEIseUJBQXdCLG9CQUFtQixjQUF3QixxQkFBb0IsZUFBd0IsdUJBQXNCLGlCQUF3QixvQkFBbUIsY0FBd0Isb0JBQW1CLGNBQXdCLHlCQUF3QixtQkFBd0IscUJBQW9CLGVBQXdCLHNCQUFxQixnQkFBd0IsMkJBQTBCLHFCQUF3QiwwQkFBeUIsb0JBQXdCLDJCQUEwQixxQkFBd0IsNkJBQTRCLHVCQUF3QiwwQkFBeUIsb0JBQXdCLDZCQUE0Qix1QkFBd0IsOEJBQTZCLHdCQUF3QiwyQkFBMEIscUJBQXdCLHVCQUFzQixpQkFBd0Isc0JBQXFCLGdCQUF3QixrQkFBaUIsWUFBd0Isd0JBQXVCLGtCQUF3Qix5QkFBd0IsbUJBQXdCLDRCQUEyQixzQkFBd0IsMkJBQTBCLHFCQUF3Qiw0QkFBMkIsc0JBQXdCLHlCQUF3QixtQkFBd0IsOEJBQTZCLHdCQUF3Qiw2QkFBNEIsdUJBQXdCLHNCQUFxQixnQkFBd0IseUJBQXdCLG1CQUF3QiwwQkFBeUIsb0JBQXdCLDBCQUF5QixvQkFBd0IseUJBQXdCLG1CQUF3QixvQkFBbUIsY0FBd0Isb0JBQW1CLGNBQXdCLHdCQUF1QixrQkFBd0Isb0JBQW1CLGNBQXdCLHdCQUF1QixrQkFBd0IsOEJBQTZCLHdCQUF3QiwyQkFBMEIscUJBQXdCLCtCQUE4Qix5QkFBd0Isd0JBQXVCLGtCQUF3Qiw2QkFBNEIsdUJBQXdCLDBCQUF5QixvQkFBd0IsK0JBQThCLHlCQUF3QiwwQkFBeUIsb0JBQXdCLHVDQUFzQyxpQ0FBd0IseUJBQXdCLG1CQUF3QiwwQkFBeUIsb0JBQXdCLDhCQUE2Qix3QkFBd0IseUJBQXdCLG1CQUF3QixnQ0FBK0IsMEJBQXdCLDhCQUE2Qix3QkFBd0IsMkJBQTBCLHFCQUF3QiwrQkFBOEIseUJBQXdCLDRCQUEyQixzQkFBd0Isa0NBQWlDLDRCQUF3QixrQ0FBaUMsNEJBQXdCLHNDQUFxQyxnQ0FBd0IseUJBQXdCLG1CQUF3Qix3QkFBdUIsa0JBQXdCLDZCQUE0Qix1QkFBd0IsMkJBQTBCLHFCQUF3QiwwQkFBeUIsb0JBQXdCLDJCQUEwQixxQkFBd0IsNkJBQTRCLHVCQUF3Qiw0QkFBMkIsc0JBQXdCLHdCQUF1QixrQkFBd0IsNkJBQTRCLHVCQUF3QiwwQkFBeUIsb0JBQXdCLDJCQUEwQixxQkFBd0IsK0JBQThCLHlCQUF3Qiw0QkFBMkIsc0JBQXdCLDZCQUE0Qix1QkFBd0IseUJBQXdCLG1CQUF3Qiw4QkFBNkIsd0JBQXdCLDRCQUEyQixzQkFBd0IsNEJBQTJCLHNCQUF3QiwwQkFBeUIsb0JBQXdCLDBCQUF5QixvQkFBd0Isa0NBQWlDLDRCQUF3Qiw0QkFBMkIsc0JBQXdCLHdCQUF1QixrQkFBd0IsNkJBQTRCLHVCQUF3QiwrQkFBOEIseUJBQXdCLDZCQUE0Qix1QkFBd0IsMEJBQXlCLG9CQUF3Qiw2QkFBNEIsdUJBQXdCLGdDQUErQiwwQkFBd0IsMkJBQTBCLHFCQUF3QiwwQkFBeUIsb0JBQXdCLDJCQUEwQixxQkFBd0IsNEJBQTJCLHNCQUF3Qiw0QkFBMkIsc0JBQXdCLHFDQUFvQywrQkFBd0IsK0JBQThCLHlCQUF3QiwyQkFBMEIscUJBQXdCLDhCQUE2Qix3QkFBd0IsK0JBQThCLHlCQUF3Qiw4QkFBNkIsd0JBQXdCLHNCQUFxQixnQkFBd0Isc0NBQXFDLGdDQUF3QixnQ0FBK0IsMEJBQXdCLCtCQUE4Qix5QkFBd0IsMEJBQXlCLG9CQUF3QixzQkFBcUIsZ0JBQXdCLG9CQUFtQixjQUF3Qix3QkFBdUIsa0JBQXdCLHdCQUF1QixrQkFBd0IseUJBQXdCLG1CQUF3QixzQkFBcUIsZ0JBQXdCLHFCQUFvQixlQUF3Qix3QkFBdUIsa0JBQXdCLHFCQUFvQixlQUF3QiwrQkFBOEIseUJBQXdCLHNDQUFxQyxnQ0FBd0IscUNBQW9DLCtCQUF3QixzQ0FBcUMsZ0NBQXdCLDBDQUF5QyxvQ0FBd0Isd0NBQXVDLGtDQUF3QiwyQ0FBMEMscUNBQXdCLGtDQUFpQyw0QkFBd0Isd0NBQXVDLGtDQUF3QixpQ0FBZ0MsMkJBQXdCLHNCQUFxQixnQkFBd0Isb0JBQW1CLGNBQXdCLHlCQUF3QixtQkFBd0Isc0JBQXFCLGdCQUF3QixvQkFBbUIsY0FBd0Isc0JBQXFCLGdCQUF3Qix1QkFBc0IsaUJBQXdCLHNCQUFxQixnQkFBd0IsdUJBQXNCLGlCQUF3QiwwQkFBeUIsb0JBQXdCLDJCQUEwQixxQkFBd0IscUJBQW9CLGVBQXdCLDBCQUF5QixvQkFBd0IsdUJBQXNCLGlCQUF3QixxQkFBb0IsZUFBd0IsdUJBQXNCLGlCQUF3QixzQkFBcUIsZ0JBQXdCLHVCQUFzQixpQkFBd0IsbUJBQWtCLGFBQXdCLDBCQUF5QixvQkFBd0Isb0JBQW1CLGNBQXdCLDBCQUF5QixvQkFBd0Isb0JBQW1CLGNBQXdCLDhCQUE2Qix3QkFBd0IscUNBQW9DLCtCQUF3QixzQkFBcUIsZ0JBQXdCLG9CQUFtQixjQUF3QixrQ0FBaUMsNEJBQXdCLHFCQUFvQixlQUF3Qix1QkFBc0IsaUJBQXdCLHdCQUF1QixrQkFBd0IsMEJBQXlCLG9CQUF3QixvQkFBbUIsY0FBd0IscUJBQW9CLGVBQXdCLHNCQUFxQixnQkFBd0IsOEJBQTZCLHdCQUF3QixzQ0FBcUMsZ0NBQXdCLHNDQUFxQyxnQ0FBd0IsNkJBQTRCLHVCQUF3QixxQkFBb0IsZUFBd0IscUJBQW9CLGVBQXdCLHlCQUF3QixtQkFBd0Isd0JBQXVCLGtCQUF3Qix5QkFBd0IsbUJBQXdCLHlCQUF3QixtQkFBd0IsdUJBQXNCLGlCQUF3Qix3QkFBdUIsa0JBQXdCLDZCQUE0Qix1QkFBd0IsOEJBQTZCLHdCQUF3QiwwQkFBeUIsb0JBQXdCLGdDQUErQiwwQkFBd0IsMkJBQTBCLHFCQUF3QixpQ0FBZ0MsMkJBQXdCLGdDQUErQiwwQkFBd0IsaUNBQWdDLDJCQUF3QixxQkFBb0IsZUFBd0Isb0JBQW1CLGNBQXdCLDJCQUEwQixxQkFBd0IsMEJBQXlCLG9CQUF3Qix1QkFBc0IsaUJBQXdCLHNCQUFxQixnQkFBd0IseUJBQXdCLG1CQUF3QixtQkFBa0IsYUFBd0IsNEJBQTJCLHNCQUF3Qix1QkFBc0IsaUJBQXdCLCtCQUE4Qix5QkFBd0IscUNBQW9DLCtCQUF3QixzQ0FBcUMsZ0NBQXdCLG9DQUFtQyw4QkFBd0IsbUJBQWtCLGFBQXdCLG9CQUFtQixjQUF3QiwyQkFBMEIscUJBQXdCLDJCQUEwQixxQkFBd0Isd0JBQXVCLGtCQUF3QiwwQkFBeUIsb0JBQXdCLDBCQUF5QixvQkFBd0IsK0JBQThCLHlCQUF3QiwwQkFBeUIsb0JBQXdCLDJCQUEwQixxQkFBd0IsNEJBQTJCLHNCQUF3QiwwQkFBeUIsb0JBQXdCLHdDQUF1QyxrQ0FBd0IsNkJBQTRCLHVCQUF3Qix5QkFBd0IsbUJBQXdCLGdDQUErQiwwQkFBd0IsNEJBQTJCLHNCQUF3Qix5QkFBd0IsbUJBQXdCLCtCQUE4Qix5QkFBd0IsMEJBQXlCLG9CQUF3Qiw4QkFBNkIsd0JBQXdCLDBCQUF5QixvQkFBd0IseUJBQXdCLG1CQUF3Qiw4QkFBNkIsd0JBQXdCLDZCQUE0Qix1QkFBd0Isd0JBQXVCLGtCQUF3Qiw4QkFBNkIsd0JBQXdCLHVCQUFzQixpQkFBd0IsOEJBQTZCLHdCQUF3Qix5QkFBd0IsbUJBQXdCLHdCQUF1QixrQkFBd0IsNEJBQTJCLHNCQUF3QiwyQkFBMEIscUJBQXdCLGtDQUFpQyw0QkFBd0IsZ0NBQStCLDBCQUF3QiwyQkFBMEIscUJBQXdCLDhCQUE2Qix3QkFBd0IsMkJBQTBCLHFCQUF3Qix5QkFBd0IsbUJBQXdCLDJCQUEwQixxQkFBd0IsMkJBQTBCLHFCQUF3Qiw2QkFBNEIsdUJBQXdCLDRCQUEyQixzQkFBd0IsOEJBQTZCLHdCQUF3QiwrQkFBOEIseUJBQXdCLDZCQUE0Qix1QkFBd0IsMEJBQXlCLG9CQUF3QixnQ0FBK0IsMEJBQXdCLGlDQUFnQywyQkFBd0IseUJBQXdCLG1CQUF3QiwrQkFBOEIseUJBQXdCLDBCQUF5QixvQkFBd0IsMkJBQTBCLHFCQUF3QiwyQkFBMEIscUJBQXdCLDJCQUEwQixxQkFBd0Isd0JBQXVCLGtCQUF3Qix5QkFBd0IsbUJBQXdCLCtCQUE4Qix5QkFBd0IsNkJBQTRCLHVCQUF3Qix3QkFBdUIsa0JBQXdCLHFCQUFvQixlQUF3QixzQkFBcUIsZ0JBQXdCLHNCQUFxQixnQkFBd0Isb0JBQW1CLGNBQXdCLDBCQUF5QixvQkFBd0IscUJBQW9CLGVBQXdCLHNCQUFxQixnQkFBd0IsMkJBQTBCLHFCQUF3Qix3QkFBdUIsa0JBQXdCLGdDQUErQiwwQkFBd0Isa0NBQWlDLDRCQUF3QiwwQ0FBeUMsb0NBQXdCLGdDQUErQiwwQkFBd0Isd0NBQXVDLGtDQUF3Qix5QkFBd0IsbUJBQXdCLHdCQUF1QixrQkFBd0Isd0JBQXVCLGtCQUF3QixrQ0FBaUMsNEJBQXdCLDhCQUE2Qix3QkFBd0IsMEJBQXlCLG9CQUF3Qix1QkFBc0IsaUJBQXdCLHlCQUF3QixtQkFBd0IsNkJBQTRCLHVCQUF3Qix3QkFBdUIsa0JBQXdCLDRCQUEyQixzQkFBd0Isd0JBQXVCLGtCQUF3QixrQ0FBaUMsNEJBQXdCLHdCQUF1QixrQkFBd0IsZ0NBQStCLDBCQUF3QixzQkFBcUIsZ0JBQXdCLDBCQUF5Qix1QkFBd0Isc0JBQXFCLG1CQUF3QixrQkFBaUIsZUFBd0IseUJBQXdCLHNCQUF3QiwwQkFBeUIsdUJBQXdCLHVCQUFzQixvQkFBd0Isc0JBQXFCLG1CQUF3Qix5QkFBd0Isc0JBQXdCLGtDQUFpQywrQkFBd0Isc0JBQXFCLG1CQUF3QixvQkFBbUIsaUJBQXdCLDJCQUEwQix3QkFBd0IsMEJBQXlCLHVCQUF3Qix1QkFBc0Isb0JBQXdCLHNCQUFxQixtQkFBd0IscUJBQW9CLGtCQUF3Qix3QkFBdUIscUJBQXdCLDBDQUF5Qyx1Q0FBd0IsMEJBQXlCLHVCQUF3Qix5QkFBd0Isc0JBQXdCLHlCQUF3QixzQkFBd0Isb0JBQW1CLGlCQUF3Qix5QkFBd0Isc0JBQXdCLHNCQUFxQixtQkFBd0Isb0JBQW1CLGlCQUF3QixzQkFBcUIsbUJBQXdCLHFCQUFvQixrQkFBd0IsMEJBQXlCLHVCQUF3QixpQ0FBZ0MsOEJBQXdCLDhCQUE2QiwyQkFBd0IsNkJBQTRCLDBCQUF3QixxQkFBb0Isa0JBQXdCLHFCQUFvQixrQkFBd0IsMkJBQTBCLHdCQUF3QiwyQkFBMEIsd0JBQXdCLHdCQUF1QixxQkFBd0IsbUJBQWtCLGdCQUF3QiwyQkFBMEIsd0JBQXdCLHlCQUF3QixzQkFBd0IsMkJBQTBCLHdCQUF3Qix5QkFBd0Isc0JBQXdCLGdDQUErQiw2QkFBd0IsMEJBQXlCLHVCQUF3Qiw4QkFBNkIsMkJBQXdCLGdDQUErQiw2QkFBd0IseUJBQXdCLHNCQUF3QixtQ0FBa0MsZ0NBQXdCLHVCQUFzQixvQkFBd0Isb0JBQW1CLGlCQUF3Qix5QkFBd0Isc0JBQXdCLGtDQUFpQywrQkFBd0IsdUJBQXNCLG9CQUF3Qiw0QkFBMkIseUJBQXdCLDBCQUF5Qix1QkFBd0Isd0JBQXVCLHFCQUF3QixpQ0FBZ0MsOEJBQXdCLGlCQUFnQixjQUF3QixxQkFBb0Isa0JBQXdCLHVCQUFzQixvQkFBd0IsdUJBQXNCLG9CQUF3Qix1QkFBc0Isb0JBQXdCLHdCQUF1QixxQkFBd0IscUJBQW9CLGtCQUF3QixxQkFBb0Isa0JBQXdCLG1CQUFrQixnQkFBd0IsaUJBQWdCLGNBQXdCLHNCQUFxQixtQkFBd0IsaUJBQWdCLGNBQXdCLDZCQUE0QiwwQkFBd0IsMkJBQTBCLHdCQUF3QixtQkFBa0IsZ0JBQXdCLHVCQUFzQixvQkFBd0Isa0JBQWlCLGVBQXdCLGtCQUFpQixlQUF3QixnQkFBZSxhQUF3QixxQkFBb0Isa0JBQXdCLHFCQUFvQixrQkFBd0Isa0JBQWlCLGVBQXdCLGdDQUErQiw2QkFBd0Isa0JBQWlCLGVBQXdCLGtCQUFpQixlQUF3Qix5QkFBd0Isc0JBQXdCLHdCQUF1QixxQkFBd0IsdUJBQXNCLG9CQUF3QixvQkFBbUIsaUJBQXdCLGtCQUFpQixlQUF3QixvQkFBbUIsaUJBQXdCLG9CQUFtQixpQkFBd0Isc0JBQXFCLG1CQUF3Qiw0QkFBMkIseUJBQXdCLGlDQUFnQyw4QkFBd0IsNEJBQTJCLHlCQUF3Qiw2QkFBNEIsMEJBQXdCLGdDQUErQiw2QkFBd0IsOEJBQTZCLDJCQUF3QixpQkFBZ0IsY0FBd0IsMkJBQTBCLHdCQUF3QixrQkFBaUIsZUFBd0IsaUNBQWdDLDhCQUF3Qix1QkFBc0Isb0JBQXdCLHFCQUFvQixrQkFBd0IsZ0JBQWUsYUFBd0IscUJBQW9CLGtCQUF3QixvQkFBbUIsaUJBQXdCLHFCQUFvQixrQkFBd0IseUJBQXdCLHNCQUF3QiwwQkFBeUIsdUJBQXdCLHNCQUFxQixtQkFBd0IsZ0JBQWUsYUFBd0IsNEJBQTJCLHlCQUF3Qiw2QkFBNEIsMEJBQXdCLHFCQUFvQixrQkFBd0IsdUNBQXNDLG9DQUF3QixxQ0FBb0Msa0NBQXdCLGtDQUFpQywrQkFBd0Isa0NBQWlDLCtCQUF3QixnQ0FBK0IsNkJBQXdCLGtDQUFpQywrQkFBd0IsaUNBQWdDLDhCQUF3QiwrQkFBOEIsNEJBQXdCLHFDQUFvQyxrQ0FBd0Isc0NBQXFDLG1DQUF3QixrQ0FBaUMsK0JBQXdCLG1DQUFrQyxnQ0FBd0IsZ0NBQStCLDZCQUF3Qiw4QkFBNkIsMkJBQXdCLCtCQUE4Qiw0QkFBd0Isd0JBQXVCLHFCQUF3Qiw2QkFBNEIsMEJBQXdCLDhCQUE2QiwyQkFBd0IsMkJBQTBCLHdCQUF3QiwyQkFBMEIsd0JBQXdCLDBCQUF5Qix1QkFBd0Isd0JBQXVCLHFCQUF3QixnQ0FBK0IsNkJBQXdCLHdCQUF1QixxQkFBd0IsMEJBQXlCLHVCQUF3Qix5QkFBd0Isc0JBQXdCLDZCQUE0QiwwQkFBd0Isd0JBQXVCLHFCQUF3QixrQ0FBaUMsK0JBQXdCLGtCQUFpQixlQUF3QixrQkFBaUIsZUFBd0IsZ0JBQWUsYUFBd0IsbUJBQWtCLGdCQUF3QixpQkFBZ0IsY0FBd0IsbUJBQWtCLGdCQUF3Qix1QkFBc0Isb0JBQXdCLG1CQUFrQixnQkFBd0IsZ0JBQWUsYUFBd0IsdUJBQXNCLG9CQUF3Qix1QkFBc0Isb0JBQXdCLHlCQUF3QixzQkFBd0IscUJBQW9CLGtCQUF3QixtQkFBa0IsZ0JBQXdCLGlCQUFnQixjQUF3QixpQkFBZ0IsY0FBd0IseUJBQXdCLHNCQUF3QiwwQkFBeUIsdUJBQXdCLCtCQUE4Qiw0QkFBd0Isd0JBQXVCLHFCQUF3QixzQkFBcUIsbUJBQXdCLDBCQUF5Qix1QkFBd0IsMkJBQTBCLHdCQUF3Qix3QkFBdUIscUJBQXdCLHFCQUFvQixrQkFBd0IsaUJBQWdCLGNBQXdCLG9CQUFtQixpQkFBd0Isa0JBQWlCLGVBQXdCLGlCQUFnQixjQUF3Qiw0QkFBMkIseUJBQXdCLGlCQUFnQixjQUF3QixrQkFBaUIsZUFBd0Isb0JBQW1CLGlCQUF3QixpQkFBZ0IsY0FBd0IsaUJBQWdCLGNBQXdCLHNCQUFxQixtQkFBd0Isa0JBQWlCLGVBQXdCLG1CQUFrQixnQkFBd0Isd0JBQXVCLHFCQUF3Qix1QkFBc0Isb0JBQXdCLHdCQUF1QixxQkFBd0IsMEJBQXlCLHVCQUF3Qix1QkFBc0Isb0JBQXdCLDBCQUF5Qix1QkFBd0IsMkJBQTBCLHdCQUF3Qix3QkFBdUIscUJBQXdCLG9CQUFtQixpQkFBd0IsbUJBQWtCLGdCQUF3QixlQUFjLFlBQXdCLHFCQUFvQixrQkFBd0Isc0JBQXFCLG1CQUF3Qix5QkFBd0Isc0JBQXdCLHdCQUF1QixxQkFBd0IseUJBQXdCLHNCQUF3QixzQkFBcUIsbUJBQXdCLDJCQUEwQix3QkFBd0IsMEJBQXlCLHVCQUF3QixtQkFBa0IsZ0JBQXdCLHNCQUFxQixtQkFBd0IsdUJBQXNCLG9CQUF3Qix1QkFBc0Isb0JBQXdCLHNCQUFxQixtQkFBd0IsaUJBQWdCLGNBQXdCLGlCQUFnQixjQUF3QixxQkFBb0Isa0JBQXdCLGlCQUFnQixjQUF3QixxQkFBb0Isa0JBQXdCLDJCQUEwQix3QkFBd0Isd0JBQXVCLHFCQUF3Qiw0QkFBMkIseUJBQXdCLHFCQUFvQixrQkFBd0IsMEJBQXlCLHVCQUF3Qix1QkFBc0Isb0JBQXdCLDRCQUEyQix5QkFBd0IsdUJBQXNCLG9CQUF3QixvQ0FBbUMsaUNBQXdCLHNCQUFxQixtQkFBd0IsdUJBQXNCLG9CQUF3QiwyQkFBMEIsd0JBQXdCLHNCQUFxQixtQkFBd0IsNkJBQTRCLDBCQUF3QiwyQkFBMEIsd0JBQXdCLHdCQUF1QixxQkFBd0IsNEJBQTJCLHlCQUF3Qix5QkFBd0Isc0JBQXdCLCtCQUE4Qiw0QkFBd0IsK0JBQThCLDRCQUF3QixtQ0FBa0MsZ0NBQXdCLHNCQUFxQixtQkFBd0IscUJBQW9CLGtCQUF3QiwwQkFBeUIsdUJBQXdCLHdCQUF1QixxQkFBd0IsdUJBQXNCLG9CQUF3Qix3QkFBdUIscUJBQXdCLDBCQUF5Qix1QkFBd0IseUJBQXdCLHNCQUF3QixxQkFBb0Isa0JBQXdCLDBCQUF5Qix1QkFBd0IsdUJBQXNCLG9CQUF3Qix3QkFBdUIscUJBQXdCLDRCQUEyQix5QkFBd0IseUJBQXdCLHNCQUF3QiwwQkFBeUIsdUJBQXdCLHNCQUFxQixtQkFBd0IsMkJBQTBCLHdCQUF3Qix5QkFBd0Isc0JBQXdCLHlCQUF3QixzQkFBd0IsdUJBQXNCLG9CQUF3Qix1QkFBc0Isb0JBQXdCLCtCQUE4Qiw0QkFBd0IseUJBQXdCLHNCQUF3QixxQkFBb0Isa0JBQXdCLDBCQUF5Qix1QkFBd0IsNEJBQTJCLHlCQUF3QiwwQkFBeUIsdUJBQXdCLHVCQUFzQixvQkFBd0IsMEJBQXlCLHVCQUF3Qiw2QkFBNEIsMEJBQXdCLHdCQUF1QixxQkFBd0IsdUJBQXNCLG9CQUF3Qix3QkFBdUIscUJBQXdCLHlCQUF3QixzQkFBd0IseUJBQXdCLHNCQUF3QixrQ0FBaUMsK0JBQXdCLDRCQUEyQix5QkFBd0Isd0JBQXVCLHFCQUF3QiwyQkFBMEIsd0JBQXdCLDRCQUEyQix5QkFBd0IsMkJBQTBCLHdCQUF3QixtQkFBa0IsZ0JBQXdCLG1DQUFrQyxnQ0FBd0IsNkJBQTRCLDBCQUF3Qiw0QkFBMkIseUJBQXdCLHVCQUFzQixvQkFBd0IsbUJBQWtCLGdCQUF3QixpQkFBZ0IsY0FBd0IscUJBQW9CLGtCQUF3QixxQkFBb0Isa0JBQXdCLHNCQUFxQixtQkFBd0IsbUJBQWtCLGdCQUF3QixrQkFBaUIsZUFBd0IscUJBQW9CLGtCQUF3QixrQkFBaUIsZUFBd0IsNEJBQTJCLHlCQUF3QixtQ0FBa0MsZ0NBQXdCLGtDQUFpQywrQkFBd0IsbUNBQWtDLGdDQUF3Qix1Q0FBc0Msb0NBQXdCLHFDQUFvQyxrQ0FBd0Isd0NBQXVDLHFDQUF3QiwrQkFBOEIsNEJBQXdCLHFDQUFvQyxrQ0FBd0IsOEJBQTZCLDJCQUF3QixtQkFBa0IsZ0JBQXdCLGlCQUFnQixjQUF3QixzQkFBcUIsbUJBQXdCLG1CQUFrQixnQkFBd0IsaUJBQWdCLGNBQXdCLG1CQUFrQixnQkFBd0Isb0JBQW1CLGlCQUF3QixtQkFBa0IsZ0JBQXdCLG9CQUFtQixpQkFBd0IsdUJBQXNCLG9CQUF3Qix3QkFBdUIscUJBQXdCLGtCQUFpQixlQUF3Qix1QkFBc0Isb0JBQXdCLG9CQUFtQixpQkFBd0Isa0JBQWlCLGVBQXdCLG9CQUFtQixpQkFBd0IsbUJBQWtCLGdCQUF3QixvQkFBbUIsaUJBQXdCLGdCQUFlLGFBQXdCLHVCQUFzQixvQkFBd0IsaUJBQWdCLGNBQXdCLHVCQUFzQixvQkFBd0IsaUJBQWdCLGNBQXdCLDJCQUEwQix3QkFBd0Isa0NBQWlDLCtCQUF3QixtQkFBa0IsZ0JBQXdCLGlCQUFnQixjQUF3QiwrQkFBOEIsNEJBQXdCLGtCQUFpQixlQUF3QixvQkFBbUIsaUJBQXdCLHFCQUFvQixrQkFBd0IsdUJBQXNCLG9CQUF3QixpQkFBZ0IsY0FBd0Isa0JBQWlCLGVBQXdCLG1CQUFrQixnQkFBd0IsMkJBQTBCLHdCQUF3QixtQ0FBa0MsZ0NBQXdCLG1DQUFrQyxnQ0FBd0IsMEJBQXlCLHVCQUF3QixrQkFBaUIsZUFBd0Isa0JBQWlCLGVBQXdCLHNCQUFxQixtQkFBd0IscUJBQW9CLGtCQUF3QixzQkFBcUIsbUJBQXdCLHNCQUFxQixtQkFBd0Isb0JBQW1CLGlCQUF3QixxQkFBb0Isa0JBQXdCLDBCQUF5Qix1QkFBd0IsMkJBQTBCLHdCQUF3Qix1QkFBc0Isb0JBQXdCLDZCQUE0QiwwQkFBd0Isd0JBQXVCLHFCQUF3Qiw4QkFBNkIsMkJBQXdCLDZCQUE0QiwwQkFBd0IsOEJBQTZCLDJCQUF3QixrQkFBaUIsZUFBd0IsaUJBQWdCLGNBQXdCLHdCQUF1QixxQkFBd0IsdUJBQXNCLG9CQUF3QixvQkFBbUIsaUJBQXdCLG1CQUFrQixnQkFBd0Isc0JBQXFCLG1CQUF3QixnQkFBZSxhQUF3Qix5QkFBd0Isc0JBQXdCLG9CQUFtQixpQkFBd0IsNEJBQTJCLHlCQUF3QixrQ0FBaUMsK0JBQXdCLG1DQUFrQyxnQ0FBd0IsaUNBQWdDLDhCQUF3QixnQkFBZSxhQUF3QixpQkFBZ0IsY0FBd0Isd0JBQXVCLHFCQUF3Qix3QkFBdUIscUJBQXdCLHFCQUFvQixrQkFBd0IsdUJBQXNCLG9CQUF3Qix1QkFBc0Isb0JBQXdCLDRCQUEyQix5QkFBd0IsdUJBQXNCLG9CQUF3Qix3QkFBdUIscUJBQXdCLHlCQUF3QixzQkFBd0IsdUJBQXNCLG9CQUF3QixxQ0FBb0Msa0NBQXdCLDBCQUF5Qix1QkFBd0Isc0JBQXFCLG1CQUF3Qiw2QkFBNEIsMEJBQXdCLHlCQUF3QixzQkFBd0Isc0JBQXFCLG1CQUF3Qiw0QkFBMkIseUJBQXdCLHVCQUFzQixvQkFBd0IsMkJBQTBCLHdCQUF3Qix1QkFBc0Isb0JBQXdCLHNCQUFxQixtQkFBd0IsMkJBQTBCLHdCQUF3QiwwQkFBeUIsdUJBQXdCLHFCQUFvQixrQkFBd0IsMkJBQTBCLHdCQUF3QixvQkFBbUIsaUJBQXdCLDJCQUEwQix3QkFBd0Isc0JBQXFCLG1CQUF3QixxQkFBb0Isa0JBQXdCLHlCQUF3QixzQkFBd0Isd0JBQXVCLHFCQUF3QiwrQkFBOEIsNEJBQXdCLDZCQUE0QiwwQkFBd0Isd0JBQXVCLHFCQUF3QiwyQkFBMEIsd0JBQXdCLHdCQUF1QixxQkFBd0Isc0JBQXFCLG1CQUF3Qix3QkFBdUIscUJBQXdCLHdCQUF1QixxQkFBd0IsMEJBQXlCLHVCQUF3Qix5QkFBd0Isc0JBQXdCLDJCQUEwQix3QkFBd0IsNEJBQTJCLHlCQUF3QiwwQkFBeUIsdUJBQXdCLHVCQUFzQixvQkFBd0IsNkJBQTRCLDBCQUF3Qiw4QkFBNkIsMkJBQXdCLHNCQUFxQixtQkFBd0IsNEJBQTJCLHlCQUF3Qix1QkFBc0Isb0JBQXdCLHdCQUF1QixxQkFBd0Isd0JBQXVCLHFCQUF3Qix3QkFBdUIscUJBQXdCLHFCQUFvQixrQkFBd0Isc0JBQXFCLG1CQUF3Qiw0QkFBMkIseUJBQXdCLDBCQUF5Qix1QkFBd0IscUJBQW9CLGtCQUF3QixrQkFBaUIsZUFBd0IsbUJBQWtCLGdCQUF3QixtQkFBa0IsZ0JBQXdCLGlCQUFnQixjQUF3Qix1QkFBc0Isb0JBQXdCLGtCQUFpQixlQUF3QixtQkFBa0IsZ0JBQXdCLHdCQUF1QixxQkFBd0IscUJBQW9CLGtCQUF3Qiw2QkFBNEIsMEJBQXdCLCtCQUE4Qiw0QkFBd0IsdUNBQXNDLG9DQUF3Qiw2QkFBNEIsMEJBQXdCLHFDQUFvQyxrQ0FBd0Isc0JBQXFCLG1CQUF3QixxQkFBb0Isa0JBQXdCLHFCQUFvQixrQkFBd0IsK0JBQThCLDRCQUF3QiwyQkFBMEIsd0JBQXdCLHVCQUFzQixvQkFBd0Isb0JBQW1CLGlCQUF3QixzQkFBcUIsbUJBQXdCLDBCQUF5Qix1QkFBd0IscUJBQW9CLGtCQUF3Qix5QkFBd0Isc0JBQXdCLHFCQUFvQixrQkFBd0IsK0JBQThCLDRCQUF3QixxQkFBb0Isa0JBQXdCLDZCQUE0QiwwQkFBd0IsbUJBQWtCLGVBQXVCO0FBQzduMkMsV0FBUyxlQUFlLE1BQU07QUFBQyxVQUFNLE1BQUksd0JBQXdCLElBQUk7QUFBRSxRQUFJLE9BQU8sV0FBVyxJQUFFO0FBQVMsV0FBTyxRQUFRLFFBQVEsR0FBRztBQUFBLEVBQUc7QUFDckksV0FBU0MsU0FBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsV0FBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxXQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxTQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLE1BQUlFLGVBQVksQ0FBQyxRQUFRLFFBQVEsU0FBUyxhQUFhLFlBQVksU0FBUyxjQUFjLFNBQVMsT0FBTztBQUUxRyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyxTQUFRQyxTQUFRLGdCQUFnQjtBQUFFLFFBQUlDLFFBQU8sT0FBTyxLQUFLRCxPQUFNO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksVUFBVSxPQUFPLHNCQUFzQkEsT0FBTTtBQUFHLFVBQUksZ0JBQWdCO0FBQUUsa0JBQVUsUUFBUSxPQUFPLFNBQVUsS0FBSztBQUFFLGlCQUFPLE9BQU8seUJBQXlCQSxTQUFRLEdBQUcsRUFBRTtBQUFBLFFBQVksQ0FBQztBQUFBLE1BQUc7QUFBRSxNQUFBQyxNQUFLLEtBQUssTUFBTUEsT0FBTSxPQUFPO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUV4VixXQUFTQyxlQUFjLFFBQVE7QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsVUFBSSxTQUFTLFVBQVUsQ0FBQyxLQUFLLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFVBQUksSUFBSSxHQUFHO0FBQUUsUUFBQUgsU0FBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxVQUFBSSxpQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRyxXQUFXLE9BQU8sMkJBQTJCO0FBQUUsZUFBTyxpQkFBaUIsUUFBUSxPQUFPLDBCQUEwQixNQUFNLENBQUM7QUFBQSxNQUFHLE9BQU87QUFBRSxRQUFBSixTQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxpQkFBTyxlQUFlLFFBQVEsS0FBSyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFcmhCLFdBQVNLLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBRWxULFdBQVNDLGlCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxtQkFBa0IsUUFBUSxPQUFPO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUFFLFVBQUksYUFBYSxNQUFNLENBQUM7QUFBRyxpQkFBVyxhQUFhLFdBQVcsY0FBYztBQUFPLGlCQUFXLGVBQWU7QUFBTSxVQUFJLFdBQVc7QUFBWSxtQkFBVyxXQUFXO0FBQU0sYUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUU1VCxXQUFTQyxjQUFhLGFBQWEsWUFBWSxhQUFhO0FBQUUsUUFBSTtBQUFZLE1BQUFELG1CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUFHLFFBQUk7QUFBYSxNQUFBQSxtQkFBa0IsYUFBYSxXQUFXO0FBQUcsV0FBTztBQUFBLEVBQWE7QUFFdE4sV0FBUyxVQUFVLFVBQVUsWUFBWTtBQUFFLFFBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQUUsWUFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsSUFBRztBQUFFLGFBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRSxDQUFDO0FBQUcsUUFBSTtBQUFZLHNCQUFnQixVQUFVLFVBQVU7QUFBQSxFQUFHO0FBRWhZLFdBQVMsZ0JBQWdCLEdBQUcsR0FBRztBQUFFLHNCQUFrQixPQUFPLGtCQUFrQixTQUFTRSxrQkFBZ0JDLElBQUdDLElBQUc7QUFBRSxNQUFBRCxHQUFFLFlBQVlDO0FBQUcsYUFBT0Q7QUFBQSxJQUFHO0FBQUcsV0FBTyxnQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFBRztBQUV6SyxXQUFTLGFBQWEsU0FBUztBQUFFLFFBQUksNEJBQTRCLDBCQUEwQjtBQUFHLFdBQU8sU0FBUyx1QkFBdUI7QUFBRSxVQUFJLFFBQVEsZ0JBQWdCLE9BQU8sR0FBRztBQUFRLFVBQUksMkJBQTJCO0FBQUUsWUFBSSxZQUFZLGdCQUFnQixJQUFJLEVBQUU7QUFBYSxpQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUFHLE9BQU87QUFBRSxpQkFBUyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFFLGFBQU8sMkJBQTJCLE1BQU0sTUFBTTtBQUFBLElBQUc7QUFBQSxFQUFHO0FBRXhhLFdBQVMsMkJBQTJCRSxPQUFNLE1BQU07QUFBRSxRQUFJLFNBQVNqQixTQUFRLElBQUksTUFBTSxZQUFZLE9BQU8sU0FBUyxhQUFhO0FBQUUsYUFBTztBQUFBLElBQU0sV0FBVyxTQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksVUFBVSwwREFBMEQ7QUFBQSxJQUFHO0FBQUUsV0FBTyx1QkFBdUJpQixLQUFJO0FBQUEsRUFBRztBQUUvUixXQUFTLHVCQUF1QkEsT0FBTTtBQUFFLFFBQUlBLFVBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxlQUFlLDJEQUEyRDtBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFckssV0FBUyw0QkFBNEI7QUFBRSxRQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGFBQU87QUFBTyxRQUFJLFFBQVEsVUFBVTtBQUFNLGFBQU87QUFBTyxRQUFJLE9BQU8sVUFBVTtBQUFZLGFBQU87QUFBTSxRQUFJO0FBQUUsY0FBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxDQUFDLEdBQUcsV0FBWTtBQUFBLE1BQUMsQ0FBQyxDQUFDO0FBQUcsYUFBTztBQUFBLElBQU0sU0FBUyxHQUFHO0FBQUUsYUFBTztBQUFBLElBQU87QUFBQSxFQUFFO0FBRXhVLFdBQVMsZ0JBQWdCLEdBQUc7QUFBRSxzQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsU0FBU0Msa0JBQWdCSCxJQUFHO0FBQUUsYUFBT0EsR0FBRSxhQUFhLE9BQU8sZUFBZUEsRUFBQztBQUFBLElBQUc7QUFBRyxXQUFPLGdCQUFnQixDQUFDO0FBQUEsRUFBRztBQUU1TSxXQUFTUCxpQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQXNCaE4sTUFBSSxlQUFlLFNBQVNXLGNBQWEsVUFBVTtBQUNqRCxRQUFJLE9BQU8sYUFBYTtBQUFVLGFBQU87QUFDekMsUUFBSSxhQUFhO0FBQWtCLGFBQU87QUFFMUMsUUFBSSxTQUFTLFFBQVEsT0FBTyxNQUFNO0FBQUcsYUFBTztBQUU1QyxXQUFPLFNBQVMsU0FBUyxLQUFLLEtBQUssU0FBUyxTQUFTLEtBQUs7QUFBQSxFQUM1RDtBQUVPLE1BQUksUUFBUSxPQUFPLGFBQWE7QUFHdkMsV0FBUyxjQUFjQyxJQUFHO0FBQ3hCLFdBQU8sT0FBT0EsT0FBTSxZQUFZLGNBQWMsZUFBZUEsRUFBQztBQUFBLEVBQ2hFO0FBRUEsV0FBUyxlQUFlQyxTQUFNO0FBQzVCLFFBQUlBLFdBQVEsTUFBTTtBQUNoQixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksY0FBY0EsT0FBSSxHQUFHO0FBQ3ZCLFVBQUksbUJBQW1CLGVBQWVBLE9BQUksR0FBRztBQUMzQyxlQUFPLG1CQUFtQkEsT0FBSTtBQUFBLE1BQ2hDO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFPQTtBQUFBLEVBQ1Q7QUFFQSxNQUFJLGFBQWEsZ0JBQWdCO0FBQ2pDLE1BQUkscUJBQXFCLENBQUM7QUFlbkIsTUFBSSxlQUE0Qix5QkFBVSxnQkFBZ0I7QUFDL0QsY0FBVUMsZUFBYyxjQUFjO0FBRXRDLFFBQUksU0FBUyxhQUFhQSxhQUFZO0FBRXRDLGFBQVNBLGNBQWEsT0FBTztBQUMzQixVQUFJO0FBRUosTUFBQUMsaUJBQWdCLE1BQU1ELGFBQVk7QUFFbEMsY0FBUSxPQUFPLEtBQUssTUFBTSxLQUFLO0FBRS9CLE1BQUFFLGlCQUFnQix1QkFBdUIsS0FBSyxHQUFHLGFBQWEsSUFBSTtBQUVoRSxNQUFBQSxpQkFBZ0IsdUJBQXVCLEtBQUssR0FBRyxxQkFBcUIsU0FBVSxVQUFVO0FBQ3RGLFlBQUksbUJBQW1CLGVBQWUsUUFBUSxHQUFHO0FBRS9DLGdCQUFNLFNBQVM7QUFBQSxZQUNiLFdBQVc7QUFBQSxZQUNYLGVBQWU7QUFBQSxZQUNmLE1BQU0sbUJBQW1CLFFBQVE7QUFBQSxVQUNuQyxDQUFDO0FBRUQsZ0JBQU0sV0FBVztBQUVqQjtBQUFBLFFBQ0Y7QUFFQSx1QkFBZSxZQUFZLGNBQWMsUUFBUSxDQUFDLEVBQUUsRUFBRSxLQUFLLFNBQVVDLFFBQU07QUFDekUsY0FBSUMsVUFBT0QsT0FBSztBQUNoQiw2QkFBbUIsUUFBUSxJQUFJQztBQUMvQiw2QkFBbUIsV0FBWTtBQUM3QixnQkFBSSxNQUFNLGFBQWEsTUFBTSxNQUFNLFNBQVMsVUFBVTtBQUNwRCxvQkFBTSxTQUFTO0FBQUEsZ0JBQ2IsTUFBTUE7QUFBQSxnQkFDTixXQUFXO0FBQUEsZ0JBQ1gsV0FBVztBQUFBLGNBQ2IsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUNyQjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELE1BQUFGLGlCQUFnQix1QkFBdUIsS0FBSyxHQUFHLGNBQWMsV0FBWTtBQUN2RSxZQUFJLGFBQWEsTUFBTSxNQUFNO0FBRTdCLFlBQUksWUFBWTtBQUNkLHFCQUFXO0FBQUEsUUFDYjtBQUFBLE1BQ0YsQ0FBQztBQUVELFVBQUksT0FBTyxNQUFNO0FBQ2pCLFVBQUksY0FBYyxlQUFlLElBQUk7QUFDckMsWUFBTSxRQUFRO0FBQUEsUUFDWixNQUFNO0FBQUEsUUFDTixXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxlQUFlO0FBQUEsTUFDakI7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFHLGNBQWFMLGVBQWMsQ0FBQztBQUFBLE1BQzFCLEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxvQkFBb0I7QUFDbEMsWUFBSSxPQUFPLEtBQUssTUFBTTtBQUV0QixZQUFJLGNBQWMsSUFBSSxLQUFLLEtBQUssTUFBTSxRQUFRLE1BQU07QUFFbEQsZUFBSyxTQUFTO0FBQUEsWUFDWixlQUFlO0FBQUEsWUFDZixXQUFXO0FBQUEsVUFDYixDQUFDO0FBQ0QsZUFBSyxrQkFBa0IsSUFBSTtBQUFBLFFBQzdCLE9BQU87QUFDTCxlQUFLLFdBQVc7QUFBQSxRQUNsQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxtQkFBbUIsV0FBVztBQUM1QyxZQUFJLE9BQU8sS0FBSyxNQUFNO0FBRXRCLFlBQUksU0FBUyxVQUFVLE1BQU07QUFDM0IsY0FBSSxjQUFjLElBQUksR0FBRztBQUV2QixpQkFBSyxTQUFTO0FBQUEsY0FDWixlQUFlLG1CQUFtQixlQUFlLElBQUk7QUFBQSxjQUNyRCxXQUFXO0FBQUEsWUFDYixDQUFDO0FBQ0QsaUJBQUssa0JBQWtCLElBQUk7QUFBQSxVQUM3QixPQUFPO0FBRUwsaUJBQUssU0FBUztBQUFBLGNBQ1osTUFBTTtBQUFBLGNBQ04sZUFBZTtBQUFBLGNBQ2YsV0FBVztBQUFBLFlBQ2IsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLHVCQUF1QjtBQUNyQyxhQUFLLFlBQVk7QUFBQSxNQUNuQjtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTTSxVQUFTO0FBQ3ZCLFlBQUksY0FBYyxLQUFLLE9BQ25CLE9BQU8sWUFBWSxNQUNuQixtQkFBbUIsWUFBWSxNQUMvQkMsUUFBTyxxQkFBcUIsU0FBUyxNQUFNLGtCQUMzQyxRQUFRLFlBQVksT0FDcEIsWUFBWSxZQUFZLFdBQ3hCLFdBQVcsWUFBWSxVQUN2QixRQUFRLFlBQVksT0FDcEIsYUFBYSxZQUFZLFlBQ3pCLFFBQVEsWUFBWSxPQUNwQixRQUFRLFlBQVksT0FDcEIsT0FBT0MsNEJBQXlCLGFBQWFDLFlBQVM7QUFFMUQsWUFBSSxjQUFjLEtBQUssT0FDbkIsWUFBWSxZQUFZLFdBQ3hCLGdCQUFnQixZQUFZLGVBQzVCLFlBQVksWUFBWTtBQUM1QixZQUFJLFdBQVcsQ0FBQyxhQUFhO0FBQzdCLFlBQUksZ0JBQWdCLFNBQVMsQ0FBQyxhQUFhLEtBQUs7QUFDaEQsWUFBSSx1QkFBdUIsZ0JBQWdCQyxlQUFjO0FBQUEsVUFDdkQ7QUFBQSxRQUNGLEdBQUcsS0FBSyxJQUFJO0FBRVosWUFBSSxZQUFZLGFBQWEsSUFBSTtBQUVqQyxZQUFJLGtCQUFrQixTQUFTLFVBQVU7QUFFekMsWUFBSSx1QkFBdUIsU0FBUyxrQkFBa0IsVUFBVSxXQUFXLFVBQVU7QUFDckYsWUFBSSxjQUFVLG1CQUFBQyxTQUFXLFdBQVcsU0FBUztBQUU3QyxZQUFJQyxVQUFTLGNBQWMsS0FBSztBQUNoQyxZQUFJLFlBQVksQ0FBQ0EsUUFBTyxTQUFTQSxRQUFPTCxLQUFJLEdBQUcsU0FBUyxhQUFhLEtBQUssS0FBS0ssUUFBTyxLQUFLLEdBQUcsaUJBQWlCQSxRQUFPLGFBQWEsd0JBQXdCQSxRQUFPLG9CQUFvQixhQUFhLENBQUMsbUJBQW1CQSxRQUFPLEtBQUssYUFBYUEsUUFBTyxXQUFXLENBQUMsYUFBYSxpQkFBaUJBLFFBQU8sUUFBUTtBQUNoVCxZQUFJUixVQUFPLEtBQUssTUFBTSxRQUFRQTtBQU85QixZQUFJUyxhQUFZLFlBQVksUUFBUSxhQUFhLEtBQUssVUFBVTtBQUVoRSxZQUFJLE9BQU9ULFlBQVMsVUFBVTtBQUM1QixpQkFBTyxJQUFjLE9BQU9VLFlBQVM7QUFBQSxZQUNuQyxLQUFLLFFBQVEsUUFBUTtBQUFBLFlBQ3JCLEtBQUtWO0FBQUEsWUFDTCxXQUFXO0FBQUEsWUFDWCxLQUFLO0FBQUEsWUFDTDtBQUFBLFVBQ0YsR0FBRyxJQUFJLENBQUM7QUFBQSxRQUNWLE9BQU87QUFDTCxjQUFJLE1BQU1BO0FBRVYsY0FBSSxlQUFlQSxZQUFTQSxXQUFTLEVBQUUsS0FBSyxNQUFNLFlBQVksS0FBSyxLQUFLLE1BQU0saUJBQWlCLEtBQUssS0FBSyxNQUFNO0FBQy9HLGNBQUksZ0JBQWdCLGdCQUFnQjtBQUFBLFlBQ2xDLGVBQWU7QUFBQSxVQUNqQjtBQUNBLGNBQUk7QUFJSixjQUFJLENBQUMsS0FBSyxNQUFNLFlBQVksS0FBSyxDQUFDLEtBQUssTUFBTSxpQkFBaUIsS0FBSyxPQUFPO0FBQ3hFLHNCQUFVO0FBQUEsY0FDUixTQUFTLFdBQVc7QUFBQSxZQUN0QjtBQUFBLFVBQ0Y7QUFFQSxpQkFBTyxJQUFjLEtBQUtVLFlBQVM7QUFBQSxZQUNqQyxXQUFXO0FBQUEsWUFDWCxPQUFPO0FBQUEsWUFDUCxLQUFLO0FBQUEsWUFDTDtBQUFBLFlBQ0EsV0FBV0Q7QUFBQSxZQUNYLE1BQU07QUFBQSxZQUNOO0FBQUEsWUFDQSxrQkFBa0I7QUFBQSxZQUNsQixrQkFBa0IsWUFBWTtBQUFBLFlBQzlCLG1CQUFtQixhQUFhO0FBQUEsVUFDbEMsR0FBRyxTQUFTLE1BQU0sYUFBYSxDQUFDO0FBQUEsUUFDbEM7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDLENBQUM7QUFFRixXQUFPYjtBQUFBLEVBQ1QsRUFBRSw2QkFBYTtBQUNmLGVBQWEsWUFBWTtBQUFBLElBQ3ZCLFdBQVcsbUJBQUFlLFFBQVU7QUFBQSxJQUNyQixjQUFjLG1CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG1CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLNUIsTUFBTSxtQkFBQUEsUUFBVSxVQUFVLENBQUMsbUJBQUFBLFFBQVUsTUFBTSxDQUFDLGlCQUFpQixjQUFjLHVCQUF1QixZQUFZLGFBQWEsU0FBUyxnQkFBZ0IsY0FBYyxVQUFVLFlBQVksZ0JBQWdCLFFBQVEsYUFBYSxhQUFhLGNBQWMsV0FBVyxjQUFjLFlBQVksWUFBWSxnQkFBZ0IsVUFBVSxRQUFRLGFBQWEsUUFBUSxtQkFBbUIsaUJBQWlCLFVBQVUsY0FBYyxTQUFTLFNBQVMsT0FBTyxZQUFZLFlBQVksYUFBYSxZQUFZLFNBQVMsdUJBQXVCLFNBQVMscUJBQXFCLFNBQVMsZ0JBQWdCLGVBQWUsY0FBYyxXQUFXLFdBQVcsU0FBUyxXQUFXLFdBQVcsY0FBYyxhQUFhLG1CQUFtQix3QkFBd0IsbUJBQW1CLG9CQUFvQixzQkFBc0Isb0JBQW9CLFFBQVEsaUJBQWlCLHFCQUFxQix3QkFBd0IsdUJBQXVCLHlCQUF5QixTQUFTLDhCQUE4Qix3QkFBd0IsY0FBYyxZQUFZLE9BQU8sZ0JBQWdCLGtCQUFrQixZQUFZLFdBQVcsZUFBZSxlQUFlLFlBQVksZ0JBQWdCLGlCQUFpQixhQUFhLE9BQU8sbUJBQW1CLG9CQUFvQixZQUFZLHFCQUFxQixtQkFBbUIsb0JBQW9CLGNBQWMsbUJBQW1CLG1CQUFtQixpQkFBaUIsOEJBQThCLDRCQUE0QixpQkFBaUIsZ0JBQWdCLHlCQUF5Qix5QkFBeUIsdUJBQXVCLHlCQUF5Qix3QkFBd0Isc0JBQXNCLGNBQWMscUJBQXFCLDRCQUE0Qiw2QkFBNkIseUJBQXlCLDBCQUEwQixjQUFjLGdCQUFnQixlQUFlLG1CQUFtQixjQUFjLHVCQUF1QixTQUFTLFNBQVMsVUFBVSxPQUFPLFVBQVUsUUFBUSxVQUFVLGNBQWMsZ0JBQWdCLE9BQU8sYUFBYSxhQUFhLGVBQWUsV0FBVyxlQUFlLFVBQVUsUUFBUSxZQUFZLFFBQVEsZUFBZSxnQkFBZ0IscUJBQXFCLGNBQWMsYUFBYSxpQkFBaUIsY0FBYyxrQkFBa0IsWUFBWSxRQUFRLFVBQVUsV0FBVyxTQUFTLFFBQVEsa0JBQWtCLFlBQVksUUFBUSxXQUFXLFNBQVMsZ0JBQWdCLFdBQVcsUUFBUSxRQUFRLGFBQWEsU0FBUyxnQkFBZ0IsY0FBYyxhQUFhLGNBQWMsc0JBQXNCLGdCQUFnQixhQUFhLG1CQUFtQixrQkFBa0IsZ0JBQWdCLGlCQUFpQixlQUFlLFdBQVcsVUFBVSxNQUFNLFlBQVksWUFBWSxlQUFlLGNBQWMsZUFBZSxZQUFZLGtCQUFrQixpQkFBaUIsVUFBVSxXQUFXLGFBQWEsY0FBYyxjQUFjLGFBQWEsUUFBUSxRQUFRLFdBQVcsUUFBUSxZQUFZLFdBQVcsZUFBZSxpQkFBaUIsY0FBYyxpQkFBaUIsYUFBYSxpQkFBaUIsYUFBYSx5QkFBeUIsWUFBWSxhQUFhLHVCQUF1QixZQUFZLG1CQUFtQixpQkFBaUIsY0FBYyxrQkFBa0IsZUFBZSxvQkFBb0IscUJBQXFCLHdCQUF3QixZQUFZLFdBQVcsZUFBZSxjQUFjLGFBQWEsY0FBYyxlQUFlLGVBQWUsV0FBVyxlQUFlLGFBQWEsY0FBYyxrQkFBa0IsZUFBZSxnQkFBZ0IsWUFBWSxpQkFBaUIsZUFBZSxlQUFlLGFBQWEsYUFBYSxxQkFBcUIsZUFBZSxXQUFXLGdCQUFnQixrQkFBa0IsZ0JBQWdCLGFBQWEsZ0JBQWdCLGtCQUFrQixjQUFjLGFBQWEsY0FBYyxlQUFlLGVBQWUsdUJBQXVCLFdBQVcsa0JBQWtCLGNBQWMsaUJBQWlCLGtCQUFrQixpQkFBaUIsc0JBQXNCLFVBQVUsMEJBQTBCLG9CQUFvQixtQkFBbUIsaUJBQWlCLGFBQWEsVUFBVSxRQUFRLFlBQVksWUFBWSxhQUFhLFVBQVUsU0FBUyxpQkFBaUIsY0FBYyxZQUFZLFNBQVMsaUJBQWlCLHVCQUF1QixVQUFVLGlCQUFpQixRQUFRLGFBQWEsVUFBVSxRQUFRLGVBQWUsVUFBVSxXQUFXLFVBQVUsdUJBQXVCLFdBQVcsaUJBQWlCLGNBQWMsZUFBZSxhQUFhLFdBQVcsU0FBUyxXQUFXLFVBQVUsV0FBVyxPQUFPLGFBQWEsZUFBZSxRQUFRLGNBQWMsUUFBUSxnQkFBZ0Isc0JBQXNCLFVBQVUsUUFBUSxvQkFBb0IsU0FBUyxxQkFBcUIsV0FBVyxpQkFBaUIsWUFBWSxnQkFBZ0IsYUFBYSxRQUFRLG1CQUFtQixTQUFTLFVBQVUscUJBQXFCLHdCQUF3QixlQUFlLGtCQUFrQiwwQkFBMEIsMEJBQTBCLGlCQUFpQixTQUFTLFNBQVMsYUFBYSxZQUFZLFlBQVksYUFBYSxVQUFVLFlBQVksYUFBYSxVQUFVLGFBQWEsa0JBQWtCLGNBQWMsbUJBQW1CLGtCQUFrQixtQkFBbUIsaUJBQWlCLGtCQUFrQixTQUFTLFFBQVEsY0FBYyxhQUFhLFdBQVcsVUFBVSxhQUFhLE9BQU8sZUFBZSxXQUFXLHVCQUF1Qix3QkFBd0Isc0JBQXNCLG1CQUFtQixPQUFPLFFBQVEsZUFBZSxZQUFZLGVBQWUsZUFBZSxjQUFjLFlBQVksU0FBUyxVQUFVLFVBQVUsdUJBQXVCLGFBQWEsUUFBUSxjQUFjLFNBQVMsaUJBQWlCLFVBQVUsZUFBZSxXQUFXLGtCQUFrQixvQkFBb0IsMkJBQTJCLGtCQUFrQix5QkFBeUIsWUFBWSxXQUFXLFdBQVcsb0JBQW9CLGdCQUFnQixhQUFhLFVBQVUsWUFBWSxlQUFlLFdBQVcsZUFBZSxXQUFXLG9CQUFvQixnQkFBZ0IsY0FBYyxZQUFZLG9CQUFvQixzQkFBc0IsVUFBVSxjQUFjLG1CQUFtQixjQUFjLGVBQWUsZ0JBQWdCLGNBQWMsNEJBQTRCLGlCQUFpQixhQUFhLG9CQUFvQixnQkFBZ0IsYUFBYSxtQkFBbUIsY0FBYyxrQkFBa0IsY0FBYyxhQUFhLGtCQUFrQixpQkFBaUIsWUFBWSxrQkFBa0Isa0JBQWtCLFdBQVcsYUFBYSxZQUFZLGdCQUFnQixlQUFlLHNCQUFzQixvQkFBb0IsZUFBZSxrQkFBa0IsZUFBZSxhQUFhLGVBQWUsZUFBZSxpQkFBaUIsZ0JBQWdCLGtCQUFrQixtQkFBbUIsaUJBQWlCLGNBQWMsb0JBQW9CLHFCQUFxQixhQUFhLG1CQUFtQixjQUFjLGVBQWUsZUFBZSxlQUFlLFlBQVksYUFBYSxtQkFBbUIsZUFBZSxDQUFDLEVBQUUsWUFBWSxtQkFBQUEsUUFBVSxPQUFPLFlBQVksbUJBQUFBLFFBQVUsWUFBWSxVQUFVLENBQUMsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNam5OLE9BQU8sbUJBQUFBLFFBQVUsVUFBVSxDQUFDLG1CQUFBQSxRQUFVLE9BQU8sWUFBWSxtQkFBQUEsUUFBVSxJQUFJLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2xGLE1BQU0sbUJBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtoQixPQUFPLG1CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLakIsU0FBUyxtQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS25CLG1CQUFtQixtQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzdCLFlBQVksbUJBQUFBLFFBQVU7QUFBQSxFQUN4QjtBQUNPLE1BQUksVUFBVSxhQUFhLFlBQVk7OztBYTNzQzlDLE1BQUFDLGtCQUE0Qzs7O0FDWjVDLE1BQUFDLGtCQUFxQztBQUNyQyxNQUFBQyxxQkFBc0I7QUFFdEIsTUFBSSxjQUEyQixtREFBYyxDQUFDLENBQUM7QUFDL0MsTUFBSSxrQkFBa0IsWUFBWTtBQUFsQyxNQUNJLGtCQUFrQixZQUFZO0FBRWxDLE1BQUksYUFBYSxTQUFTQyxZQUFXQyxRQUFNO0FBQ3pDLFFBQUksWUFBWUEsT0FBSyxNQUNqQixPQUFPLGNBQWMsU0FBUyxDQUFDLElBQUksV0FDbkMsV0FBV0EsT0FBSztBQUNwQixXQUFPLElBQWMsaUJBQWlCO0FBQUEsTUFDcEMsT0FBTztBQUFBLElBQ1QsR0FBRyxRQUFRO0FBQUEsRUFDYjtBQUVBLGFBQVcsWUFBWTtBQUFBLElBQ3JCLE1BQU0sbUJBQUFDLFFBQVUsTUFBTTtBQUFBLE1BQ3BCLFNBQVMsbUJBQUFBLFFBQVUsTUFBTSxDQUFDLENBQUM7QUFBQSxNQUMzQixhQUFhLG1CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQU12QixRQUFRLG1CQUFBQSxRQUFVO0FBQUEsTUFDbEIsY0FBYyxtQkFBQUEsUUFBVTtBQUFBLE1BQ3hCLGdCQUFnQixtQkFBQUEsUUFBVTtBQUFBLE1BQzFCLFFBQVEsbUJBQUFBLFFBQVU7QUFBQSxJQUNwQixDQUFDLEVBQUU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtILFVBQVUsbUJBQUFBLFFBQVUsS0FBSztBQUFBLEVBQzNCOzs7QUNqQ0EsTUFBQUMsa0JBQTZCO0FBRTdCLHdCQUEwQjtBQVgxQixXQUFTQyxTQUFRLEtBQUs7QUFBRTtBQUEyQixRQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sT0FBTyxhQUFhLFVBQVU7QUFBRSxNQUFBQSxXQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUcsT0FBTztBQUFFLE1BQUFELFdBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU9BLFFBQU8sT0FBTyxXQUFXLGNBQWNBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRztBQUFFLFdBQU9ELFNBQVEsR0FBRztBQUFBLEVBQUc7QUFhelgsV0FBUyxZQUFZLE9BQU87QUFDMUIsV0FBT0UsV0FBVSxLQUFLLEtBQUtDLFVBQVMsS0FBSyxLQUFLQyxVQUFTLEtBQUssS0FBS0MsYUFBWSxLQUFLO0FBQUEsRUFDcEY7QUFFQSxXQUFTLFlBQVksT0FBTztBQUMxQixXQUFPLFFBQVFMLFNBQVEsS0FBSyxNQUFNLFlBQVksTUFBTSxlQUFlLFVBQVUsSUFBSTtBQUFBLEVBQ25GO0FBV08sV0FBUyx3QkFBd0IsT0FBTyxRQUFRLGlCQUFpQjtBQUN0RSxRQUFJLFdBQVcsQ0FBQztBQUNoQixRQUFJO0FBRUosYUFBUyxrQkFBa0JNLE9BQU07QUFDL0IsVUFBSSxVQUFVLFFBQVc7QUFFdkIsZ0JBQVFBO0FBQUEsTUFDVixXQUFXLE9BQU8sVUFBVSxVQUFVO0FBRXBDLGdCQUFRLFFBQVFBO0FBQUEsTUFDbEIsV0FBVyxZQUFZLEtBQUssR0FBRztBQUU3QixjQUFNLFdBQVcsTUFBTSxXQUFXQTtBQUFBLE1BQ3BDO0FBQUEsSUFDRjtBQUVBLGFBQVMsc0JBQXNCLE9BQU87QUFDcEMsVUFBSSxVQUFVLFFBQVc7QUFDdkI7QUFBQSxNQUNGLGVBQVcsMkJBQVUsS0FBSyxHQUFHO0FBRzNCLGlCQUFTLEtBQW1CLGtEQUFhLE9BQU87QUFBQSxVQUM5QyxLQUFLLFNBQVM7QUFBQSxRQUNoQixDQUFDLENBQUM7QUFBQSxNQUNKLFdBQVcsWUFBWSxLQUFLLEdBQUc7QUFBQSxNQUMvQixPQUFPO0FBRUwsWUFBSSxvQkFBb0IsVUFBYSxPQUFPLFVBQVUsVUFBVTtBQUM5RCxrQkFBUSxnQkFBZ0IsS0FBSztBQUFBLFFBQy9CO0FBRUEsaUJBQVMsS0FBSyxLQUFLO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBSUEsUUFBSSwwQkFBMEI7QUFFOUIsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUNyQyxVQUFJQSxRQUFPLE1BQU0sQ0FBQztBQUVsQixVQUFJQSxVQUFTLE1BQU07QUFFakIsWUFBSSxXQUFXLE1BQU0sSUFBSSxDQUFDO0FBQzFCLFlBQUksWUFBWUE7QUFFaEIsWUFBSSxhQUFhLE9BQU8sYUFBYSxLQUFLO0FBRXhDLGVBQUs7QUFFTCxzQkFBWSxNQUFNLENBQUM7QUFBQSxRQUNyQjtBQUVBLDBCQUFrQixTQUFTO0FBQUEsTUFDN0IsV0FBV0EsVUFBUyxLQUFLO0FBQ3ZCLDhCQUFzQixLQUFLO0FBQzNCLGdCQUFRO0FBQUEsVUFDTixVQUFVO0FBQUEsUUFDWjtBQUFBLE1BQ0YsV0FBV0EsVUFBUyxLQUFLO0FBQ3ZCLFlBQUksV0FBVyxNQUFNO0FBRXJCLFlBQUksQ0FBQyxPQUFPLGVBQWUsUUFBUSxHQUFHO0FBQ3BDLGdCQUFNLElBQUksTUFBTSxRQUFTLE9BQU8sVUFBVSxpQkFBa0IsRUFBRSxPQUFPLEtBQUssVUFBVSxRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFBQSxRQUN2RztBQUVBLFlBQUksWUFBWSxPQUFPLFFBQVE7QUFDL0Isa0NBQTBCLDJCQUEyQixDQUFDLFlBQVksU0FBUztBQUMzRSw4QkFBc0IsU0FBUztBQUMvQixnQkFBUTtBQUFBLE1BQ1YsT0FBTztBQUNMLDBCQUFrQkEsS0FBSTtBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUdBLDBCQUFzQixLQUFLO0FBQzNCLFdBQU8sMEJBQTBCLFdBQVcsU0FBUyxLQUFLLEVBQUU7QUFBQSxFQUM5RDs7O0FGL0dBLFdBQVNDLGdCQUFlLEtBQUssR0FBRztBQUFFLFdBQU9DLGlCQUFnQixHQUFHLEtBQUtDLHVCQUFzQixLQUFLLENBQUMsS0FBS0MsOEJBQTRCLEtBQUssQ0FBQyxLQUFLQyxrQkFBaUI7QUFBQSxFQUFHO0FBRTdKLFdBQVNBLG9CQUFtQjtBQUFFLFVBQU0sSUFBSSxVQUFVLDJJQUEySTtBQUFBLEVBQUc7QUFFaE0sV0FBU0QsOEJBQTRCLEdBQUcsUUFBUTtBQUFFLFFBQUksQ0FBQztBQUFHO0FBQVEsUUFBSSxPQUFPLE1BQU07QUFBVSxhQUFPRSxvQkFBa0IsR0FBRyxNQUFNO0FBQUcsUUFBSSxJQUFJLE9BQU8sVUFBVSxTQUFTLEtBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQUcsUUFBSSxNQUFNLFlBQVksRUFBRTtBQUFhLFVBQUksRUFBRSxZQUFZO0FBQU0sUUFBSSxNQUFNLFNBQVMsTUFBTTtBQUFPLGFBQU8sTUFBTSxLQUFLLENBQUM7QUFBRyxRQUFJLE1BQU0sZUFBZSwyQ0FBMkMsS0FBSyxDQUFDO0FBQUcsYUFBT0Esb0JBQWtCLEdBQUcsTUFBTTtBQUFBLEVBQUc7QUFFL1osV0FBU0Esb0JBQWtCLEtBQUssS0FBSztBQUFFLFFBQUksT0FBTyxRQUFRLE1BQU0sSUFBSTtBQUFRLFlBQU0sSUFBSTtBQUFRLGFBQVMsSUFBSSxHQUFHLE9BQU8sSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssS0FBSztBQUFFLFdBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBTTtBQUV0TCxXQUFTSCx1QkFBc0IsS0FBSyxHQUFHO0FBQUUsUUFBSSxLQUFLLE9BQU8sT0FBTyxPQUFPLE9BQU8sV0FBVyxlQUFlLElBQUksT0FBTyxRQUFRLEtBQUssSUFBSSxZQUFZO0FBQUcsUUFBSSxNQUFNO0FBQU07QUFBUSxRQUFJLE9BQU8sQ0FBQztBQUFHLFFBQUksS0FBSztBQUFNLFFBQUksS0FBSztBQUFPLFFBQUksSUFBSTtBQUFJLFFBQUk7QUFBRSxXQUFLLEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxFQUFFLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxPQUFPLEtBQUssTUFBTTtBQUFFLGFBQUssS0FBSyxHQUFHLEtBQUs7QUFBRyxZQUFJLEtBQUssS0FBSyxXQUFXO0FBQUc7QUFBQSxNQUFPO0FBQUEsSUFBRSxTQUFTLEtBQUs7QUFBRSxXQUFLO0FBQU0sV0FBSztBQUFBLElBQUssVUFBRTtBQUFVLFVBQUk7QUFBRSxZQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsS0FBSztBQUFNLGFBQUcsUUFBUSxFQUFFO0FBQUEsTUFBRyxVQUFFO0FBQVUsWUFBSTtBQUFJLGdCQUFNO0FBQUEsTUFBSTtBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBTTtBQUVoZ0IsV0FBU0QsaUJBQWdCLEtBQUs7QUFBRSxRQUFJLE1BQU0sUUFBUSxHQUFHO0FBQUcsYUFBTztBQUFBLEVBQUs7QUFlcEUsV0FBUyxxQkFBcUJLLFFBQU87QUFDbkMsVUFBTSxJQUFJLE1BQU0sMkJBQTRCLE9BQU9BLFFBQU8seURBQTBELENBQUM7QUFBQSxFQUN2SDtBQUVBLFdBQVMsWUFBWSxTQUFTO0FBQzVCLFFBQUlBLFNBQVEsUUFBUSxPQUNoQixjQUFjLFFBQVEsYUFDdEIsZUFBZSxRQUFRLGNBQ3ZCLGtCQUFrQixRQUFRLGlCQUMxQixTQUFTLFFBQVEsUUFDakJDLFVBQVMsUUFBUTtBQUNyQixRQUFJLGFBQWEsZUFBZSxZQUFZRCxNQUFLLEtBQUs7QUFFdEQsUUFBSSxPQUFPLGVBQWUsWUFBWTtBQUNwQyxVQUFJLFdBQVcsUUFBVztBQUN4QixlQUFPLHFCQUFxQkEsTUFBSztBQUFBLE1BQ25DO0FBR0EsVUFBSSxXQUFXLFdBQVcsTUFBTTtBQUNoQyxhQUFPLG1CQUFtQixPQUFPLGFBQWEsV0FBVyxnQkFBZ0IsUUFBUSxJQUFJO0FBQUEsSUFDdkYsV0FBVyxXQUFXLFVBQWEsT0FBTyxlQUFlLFVBQVU7QUFDakUsVUFBSSxtQkFBbUIsT0FBTyxpQkFBaUIsVUFBVTtBQUN2RCxxQkFBYSxnQkFBZ0IsWUFBWTtBQUFBLE1BQzNDO0FBSUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLFdBQVcsd0JBQXdCLFlBQVksUUFBUSxlQUFlO0FBRTFFLFFBQUksT0FBTyxhQUFhLFVBQVU7QUFHaEMsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJRSxjQUFZRCxVQUFTQSxRQUFPLFFBQVEsSUFBSSxXQUFZO0FBQ3RELGFBQU8sSUFBYywwQkFBVSxNQUFNLFFBQVE7QUFBQSxJQUMvQztBQUVBLFdBQW9CLGdDQUFBRSxRQUFNLGNBQWNELGFBQVcsTUFBTTtBQUFBLEVBQzNEO0FBRUEsV0FBUyxrQkFBa0JFLElBQUc7QUFDNUIsV0FBT0EsR0FBRSxVQUFVO0FBQUEsRUFDckI7QUFLQSxNQUFJLFVBQVUsU0FBU0MsU0FBUSxPQUFPO0FBQ3BDLFdBQU8sSUFBYyxpQkFBaUIsTUFBTSxTQUFVLFlBQVk7QUFDaEUsVUFBSSxVQUFVLFdBQVcsU0FDckIsY0FBYyxXQUFXLGFBQ3pCSixVQUFTLFdBQVc7QUFFeEIsVUFBSSxrQkFBa0IsS0FBSyxHQUFHO0FBQzVCLGVBQU8sTUFBTSxTQUFTLE1BQU0sT0FBTyxJQUFJLFNBQVVELFFBQU8sS0FBSztBQUMzRCxpQkFBTyxZQUFZO0FBQUEsWUFDakIsT0FBT0E7QUFBQSxZQUNQLGFBQWE7QUFBQSxZQUNiLGlCQUFpQjtBQUFBLFlBQ2pCLGNBQWMsTUFBTSxTQUFTLEdBQUc7QUFBQSxZQUNoQyxRQUFRQztBQUFBLFVBQ1YsQ0FBQztBQUFBLFFBQ0gsQ0FBQyxDQUFDO0FBQUEsTUFDSjtBQUVBLFVBQUksYUFBYSxZQUFZO0FBQUEsUUFDM0IsT0FBTyxNQUFNO0FBQUEsUUFDYixhQUFhO0FBQUEsUUFDYixjQUFjLE1BQU07QUFBQSxRQUNwQixpQkFBaUI7QUFBQSxRQUNqQixRQUFRLE1BQU07QUFBQSxRQUNkLFFBQVFBO0FBQUEsTUFDVixDQUFDO0FBRUQsVUFBSSxNQUFNLFVBQVU7QUFDbEIsZUFBTyxNQUFNLFNBQVMsVUFBVTtBQUFBLE1BQ2xDLE9BQU87QUFDTCxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFHQSxXQUFTLGFBQWE7QUFDcEIsUUFBSSxpQkFBYSw0QkFBVyxXQUFXO0FBQ3ZDLFFBQUksVUFBVSxXQUFXLFNBQ3JCLGNBQWMsV0FBVyxhQUN6QkEsVUFBUyxXQUFXO0FBRXhCLGFBQVMsT0FBTyxVQUFVLFFBQVEsUUFBUSxJQUFJLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUTtBQUN4RixZQUFNLElBQUksSUFBSSxVQUFVLElBQUk7QUFBQSxJQUM5QjtBQUVBLFFBQUksT0FBTyxNQUFNLENBQUMsTUFBTSxVQUFVO0FBQ2hDLFVBQUksU0FBUyxNQUFNLENBQUMsR0FDaEIsZ0JBQWdCLE1BQU0sQ0FBQyxHQUN2QixVQUFVLE1BQU0sQ0FBQztBQUNyQixhQUFPLFlBQVk7QUFBQSxRQUNqQixPQUFPO0FBQUEsUUFDUCxhQUFhO0FBQUEsUUFDYixjQUFjO0FBQUEsUUFDZCxpQkFBaUI7QUFBQSxRQUNqQixRQUFRO0FBQUEsUUFDUixRQUFRQTtBQUFBLE1BQ1YsQ0FBQztBQUFBLElBQ0gsT0FBTztBQUNMLFVBQUlLLFNBQU8sT0FDUEMsU0FBUWIsZ0JBQWVZLFFBQU0sQ0FBQyxHQUM5QixVQUFVQyxPQUFNLENBQUMsR0FDakIsaUJBQWlCQSxPQUFNLENBQUM7QUFFNUIsYUFBTyxRQUFRLElBQUksU0FBVVAsUUFBTyxLQUFLO0FBQ3ZDLGVBQU8sWUFBWTtBQUFBLFVBQ2pCLE9BQU9BO0FBQUEsVUFDUCxhQUFhO0FBQUEsVUFDYixjQUFjLGVBQWUsR0FBRztBQUFBLFVBQ2hDLGlCQUFpQjtBQUFBLFVBQ2pCLFFBQVFDO0FBQUEsUUFDVixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7OztBR2hKTyxNQUFJLHNCQUFzQixTQUFTTyx1QkFBc0I7QUFDOUQsV0FBTyxXQUFXLCtCQUErQixTQUFTO0FBQUEsRUFDNUQ7OztBQ0tBLE1BQUFDLGtCQUFrQjtBQUNsQixNQUFBQyxxQkFBc0I7QUFDdEIsTUFBQUMscUJBQXVCOzs7QUNqQnZCLE1BQUlDO0FBRUosV0FBU0Msd0JBQXVCLFNBQVMsS0FBSztBQUFFLFFBQUksQ0FBQyxLQUFLO0FBQUUsWUFBTSxRQUFRLE1BQU0sQ0FBQztBQUFBLElBQUc7QUFBRSxXQUFPLE9BQU8sT0FBTyxPQUFPLGlCQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sT0FBTyxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUFBLEVBQUc7QUFZdEwsTUFBSSxrQkFBa0IsVUFBVUQscUJBQW9CQSxtQkFBa0JDLHdCQUF1QixDQUFDLGdHQUFnRyxDQUFDLEVBQUU7QUFFak0sTUFBSSxlQUFlO0FBQUEsSUFDakIsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLElBQ0gsSUFBSTtBQUFBLElBQ0osS0FBSztBQUFBLEVBQ1A7QUFFQSxNQUFJLG1CQUFtQixTQUFTQyxrQkFBaUJDLFNBQVFDLFlBQVc7QUFDbEUsV0FBTyx1QkFBdUIsT0FBT0EsWUFBVyxHQUFHLEVBQUUsT0FBT0QsU0FBUSxHQUFHLEVBQUUsT0FBT0EsU0FBUSxHQUFHLEVBQUUsT0FBT0EsU0FBUSxPQUFPO0FBQUEsRUFDckg7QUFFTyxNQUFJLDBCQUEwQixTQUFTRSx5QkFBd0JDLFFBQU0sT0FBTztBQUNqRixRQUFJLFdBQVdBLE9BQUs7QUFDcEIsV0FBTztBQUFBLE1BQ0wsbUJBQWdDLG9CQUFJLGdFQUFnRSxTQUFTLE9BQU8sT0FBTyxLQUFLLGtCQUFrQixVQUFVLFFBQVEsVUFBVSxTQUFTLFNBQVMsTUFBTSxXQUFXLFNBQVMsT0FBTyxhQUFhLFVBQVUsUUFBUSxVQUFVLFNBQVMsU0FBUyxNQUFNLGNBQWMsU0FBUyxPQUFPLE9BQU8sR0FBRyxLQUFLLGVBQWUsZUFBZSxpQkFBaUIsa0RBQWtEO0FBQUE7QUFBQSxNQUVoYixHQUFnQixvQkFBSSxVQUFVLFNBQVMsS0FBSyxhQUFhLENBQUMsR0FBRyxZQUFZLFNBQVMsS0FBSyxhQUFhLENBQUMsR0FBRyx1QkFBdUIsU0FBUyxPQUFPLE1BQU0sTUFBTSxtQkFBbUI7QUFBQSxNQUM5SyxHQUFnQixvQkFBSSxVQUFVLFNBQVMsS0FBSyxhQUFhLENBQUMsR0FBRyxZQUFZLFNBQVMsS0FBSyxhQUFhLENBQUMsR0FBRyx1QkFBdUIsU0FBUyxPQUFPLE1BQU0sTUFBTSxtQkFBbUI7QUFBQSxNQUM5SyxHQUFnQixvQkFBSSxVQUFVLFNBQVMsS0FBSyxhQUFhLENBQUMsR0FBRyxZQUFZLFNBQVMsS0FBSyxhQUFhLENBQUMsR0FBRyxZQUFZO0FBQUEsTUFDcEgsSUFBaUIsb0JBQUksVUFBVSxTQUFTLEtBQUssYUFBYSxFQUFFLEdBQUcsWUFBWSxTQUFTLEtBQUssYUFBYSxFQUFFLEdBQUcsYUFBYTtBQUFBLE1BQ3hILEtBQWtCLG9CQUFJLFVBQVUsU0FBUyxLQUFLLGFBQWEsR0FBRyxHQUFHLFlBQVksU0FBUyxLQUFLLGFBQWEsR0FBRyxHQUFHLGNBQWM7QUFBQSxJQUM5SDtBQUFBLEVBQ0Y7OztBRHZDQSxNQUFJQyxlQUFZLENBQUMsUUFBUSxhQUFhLGNBQWMsT0FBTztBQUUzRCxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWlCM1MsTUFBSSxvQkFBb0IsU0FBU0MsbUJBQWtCQyxRQUFNO0FBQzlELFFBQUksWUFBWUEsT0FBSyxNQUNqQkMsUUFBTyxjQUFjLFNBQVMsTUFBTSxXQUNwQyxZQUFZRCxPQUFLLFdBQ2pCLFlBQVlBLE9BQUssWUFBWSxHQUM3QixRQUFRQSxPQUFLLE9BQ2IsT0FBT0UsNEJBQXlCRixRQUFNRyxZQUFTO0FBRW5ELFFBQUksV0FBVyxZQUFZO0FBQzNCLFFBQUlDLFVBQVMsd0JBQXdCLFVBQVUsS0FBSztBQUNwRCxRQUFJLFlBQVksQ0FBQ0EsUUFBTyxtQkFBbUJBLFFBQU9ILEtBQUksQ0FBQztBQUN2RCxRQUFJLGNBQVUsbUJBQUFJLFNBQVcscUJBQXFCLFNBQVM7QUFDdkQsUUFBSSxlQUFlLG9CQUFvQjtBQUN2QyxXQUFPLElBQWMsUUFBUUMsWUFBUztBQUFBLE1BQ3BDLFdBQVc7QUFBQSxNQUNYLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLGNBQWMsYUFBYTtBQUFBLElBQzdCLEdBQUcsSUFBSSxDQUFDO0FBQUEsRUFDVjtBQUNBLG9CQUFrQixZQUFZO0FBQUEsSUFDNUIsV0FBVyxtQkFBQUMsUUFBVTtBQUFBLElBQ3JCLGNBQWMsbUJBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0IsbUJBQUFBLFFBQVU7QUFBQSxJQUM1QixNQUFNLG1CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT2hCLE9BQU8sbUJBQUFBLFFBQVUsTUFBTTtBQUFBLE1BQ3JCLFFBQVEsbUJBQUFBLFFBQVU7QUFBQSxNQUNsQixXQUFXLG1CQUFBQSxRQUFVO0FBQUEsSUFDdkIsQ0FBQztBQUFBLEVBQ0g7OztBdmQxREEsTUFBSUMsZUFBWSxDQUFDLFlBQVksYUFBYSxhQUFhLFlBQVksWUFBWSxVQUFVO0FBRXpGLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBZ0JsVCxNQUFJLHlCQUF5QjtBQUFBLElBQzNCLE1BQU07QUFBQSxJQUNOLE9BQU87QUFBQSxFQUNUO0FBQ08sTUFBSSxhQUFhLE9BQU8sc0JBQXNCO0FBQzlDLE1BQUksNkJBQTZCLFNBQVNDLDRCQUEyQkMsUUFBTTtBQUNoRixRQUFJLFdBQVdBLE9BQUssVUFDaEIsWUFBWUEsT0FBSyxXQUNqQixpQkFBaUJBLE9BQUssV0FDdEIsWUFBWSxtQkFBbUIsU0FBUyxRQUFRLGdCQUNoRCxXQUFXQSxPQUFLLFVBQ2hCLGdCQUFnQkEsT0FBSyxVQUNyQkMsWUFBVyxrQkFBa0IsU0FBUyxNQUFNLGVBQzVDLGdCQUFnQkQsT0FBSyxVQUNyQixXQUFXLGtCQUFrQixTQUFTLFNBQVMsZUFDL0MsZUFBZUgsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRzNELFFBQUk7QUFFSixRQUFJLFdBQVc7QUFDYixtQkFBYSxJQUFjLG1CQUFtQjtBQUFBLFFBQzVDLFdBQVc7QUFBQSxRQUNYLE1BQU1NO0FBQUEsTUFDUixDQUFDO0FBQUEsSUFDSCxXQUFXLFVBQVU7QUFDbkIsbUJBQWEsSUFBYyxTQUFTO0FBQUEsUUFDbEMsV0FBVztBQUFBLFFBQ1gsTUFBTTtBQUFBLFFBQ04sTUFBTUE7QUFBQSxRQUNOLE9BQU87QUFBQTtBQUFBLE1BRVQsQ0FBQztBQUFBLElBQ0g7QUFFQSxRQUFJLHdCQUFvQixtQkFBQUMsU0FBVyxvQkFBb0IsV0FBVyx1QkFBdUIsUUFBUSxJQUFJLE1BQU0sZ0JBQWdCLGFBQWEsU0FBUztBQUNqSixXQUFPLElBQWMsUUFBUU4sWUFBUyxDQUFDLEdBQUcsY0FBYztBQUFBLE1BQ3RELFdBQVc7QUFBQSxJQUNiLENBQUMsR0FBRyxZQUFZLElBQWMsUUFBUSxXQUFXLFFBQVEsQ0FBQztBQUFBLEVBQzVEO0FBQ0EsNkJBQTJCLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUlyQyxVQUFVLG1CQUFBTyxRQUFVLFVBQVUsQ0FBQyxtQkFBQUEsUUFBVSxNQUFNLENBQUMsaUJBQWlCLGNBQWMsdUJBQXVCLFlBQVksYUFBYSxTQUFTLGdCQUFnQixjQUFjLFVBQVUsWUFBWSxnQkFBZ0IsUUFBUSxhQUFhLGFBQWEsY0FBYyxXQUFXLGNBQWMsWUFBWSxZQUFZLGdCQUFnQixVQUFVLFFBQVEsYUFBYSxRQUFRLG1CQUFtQixpQkFBaUIsVUFBVSxjQUFjLFNBQVMsU0FBUyxPQUFPLFlBQVksWUFBWSxhQUFhLFlBQVksU0FBUyx1QkFBdUIsU0FBUyxxQkFBcUIsU0FBUyxnQkFBZ0IsZUFBZSxjQUFjLFdBQVcsV0FBVyxTQUFTLFdBQVcsV0FBVyxjQUFjLGFBQWEsbUJBQW1CLHdCQUF3QixtQkFBbUIsb0JBQW9CLHNCQUFzQixvQkFBb0IsUUFBUSxpQkFBaUIscUJBQXFCLHdCQUF3Qix1QkFBdUIseUJBQXlCLFNBQVMsOEJBQThCLHdCQUF3QixjQUFjLFlBQVksT0FBTyxnQkFBZ0Isa0JBQWtCLFlBQVksV0FBVyxlQUFlLGVBQWUsWUFBWSxnQkFBZ0IsaUJBQWlCLGFBQWEsT0FBTyxtQkFBbUIsb0JBQW9CLFlBQVkscUJBQXFCLG1CQUFtQixvQkFBb0IsY0FBYyxtQkFBbUIsbUJBQW1CLGlCQUFpQiw4QkFBOEIsNEJBQTRCLGlCQUFpQixnQkFBZ0IseUJBQXlCLHlCQUF5Qix1QkFBdUIseUJBQXlCLHdCQUF3QixzQkFBc0IsY0FBYyxxQkFBcUIsNEJBQTRCLDZCQUE2Qix5QkFBeUIsMEJBQTBCLGNBQWMsZ0JBQWdCLGVBQWUsbUJBQW1CLGNBQWMsdUJBQXVCLFNBQVMsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsY0FBYyxnQkFBZ0IsT0FBTyxhQUFhLGFBQWEsZUFBZSxXQUFXLGVBQWUsVUFBVSxRQUFRLFlBQVksUUFBUSxlQUFlLGdCQUFnQixxQkFBcUIsY0FBYyxhQUFhLGlCQUFpQixjQUFjLGtCQUFrQixZQUFZLFFBQVEsVUFBVSxXQUFXLFNBQVMsUUFBUSxrQkFBa0IsWUFBWSxRQUFRLFdBQVcsU0FBUyxnQkFBZ0IsV0FBVyxRQUFRLFFBQVEsYUFBYSxTQUFTLGdCQUFnQixjQUFjLGFBQWEsY0FBYyxzQkFBc0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGtCQUFrQixnQkFBZ0IsaUJBQWlCLGVBQWUsV0FBVyxVQUFVLE1BQU0sWUFBWSxZQUFZLGVBQWUsY0FBYyxlQUFlLFlBQVksa0JBQWtCLGlCQUFpQixVQUFVLFdBQVcsYUFBYSxjQUFjLGNBQWMsYUFBYSxRQUFRLFFBQVEsV0FBVyxRQUFRLFlBQVksV0FBVyxlQUFlLGlCQUFpQixjQUFjLGlCQUFpQixhQUFhLGlCQUFpQixhQUFhLHlCQUF5QixZQUFZLGFBQWEsdUJBQXVCLFlBQVksbUJBQW1CLGlCQUFpQixjQUFjLGtCQUFrQixlQUFlLG9CQUFvQixxQkFBcUIsd0JBQXdCLFlBQVksV0FBVyxlQUFlLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSxXQUFXLGVBQWUsYUFBYSxjQUFjLGtCQUFrQixlQUFlLGdCQUFnQixZQUFZLGlCQUFpQixlQUFlLGVBQWUsYUFBYSxhQUFhLHFCQUFxQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsYUFBYSxnQkFBZ0Isa0JBQWtCLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSx1QkFBdUIsV0FBVyxrQkFBa0IsY0FBYyxpQkFBaUIsa0JBQWtCLGlCQUFpQixzQkFBc0IsVUFBVSwwQkFBMEIsb0JBQW9CLG1CQUFtQixpQkFBaUIsYUFBYSxVQUFVLFFBQVEsWUFBWSxZQUFZLGFBQWEsVUFBVSxTQUFTLGlCQUFpQixjQUFjLFlBQVksU0FBUyxpQkFBaUIsdUJBQXVCLFVBQVUsaUJBQWlCLFFBQVEsYUFBYSxVQUFVLFFBQVEsZUFBZSxVQUFVLFdBQVcsVUFBVSx1QkFBdUIsV0FBVyxpQkFBaUIsY0FBYyxlQUFlLGFBQWEsV0FBVyxTQUFTLFdBQVcsVUFBVSxXQUFXLE9BQU8sYUFBYSxlQUFlLFFBQVEsY0FBYyxRQUFRLGdCQUFnQixzQkFBc0IsVUFBVSxRQUFRLG9CQUFvQixTQUFTLHFCQUFxQixXQUFXLGlCQUFpQixZQUFZLGdCQUFnQixhQUFhLFFBQVEsbUJBQW1CLFNBQVMsVUFBVSxxQkFBcUIsd0JBQXdCLGVBQWUsa0JBQWtCLDBCQUEwQiwwQkFBMEIsaUJBQWlCLFNBQVMsU0FBUyxhQUFhLFlBQVksWUFBWSxhQUFhLFVBQVUsWUFBWSxhQUFhLFVBQVUsYUFBYSxrQkFBa0IsY0FBYyxtQkFBbUIsa0JBQWtCLG1CQUFtQixpQkFBaUIsa0JBQWtCLFNBQVMsUUFBUSxjQUFjLGFBQWEsV0FBVyxVQUFVLGFBQWEsT0FBTyxlQUFlLFdBQVcsdUJBQXVCLHdCQUF3QixzQkFBc0IsbUJBQW1CLE9BQU8sUUFBUSxlQUFlLFlBQVksZUFBZSxlQUFlLGNBQWMsWUFBWSxTQUFTLFVBQVUsVUFBVSx1QkFBdUIsYUFBYSxRQUFRLGNBQWMsU0FBUyxpQkFBaUIsVUFBVSxlQUFlLFdBQVcsa0JBQWtCLG9CQUFvQiwyQkFBMkIsa0JBQWtCLHlCQUF5QixZQUFZLFdBQVcsV0FBVyxvQkFBb0IsZ0JBQWdCLGFBQWEsVUFBVSxZQUFZLGVBQWUsV0FBVyxlQUFlLFdBQVcsb0JBQW9CLGdCQUFnQixjQUFjLFlBQVksb0JBQW9CLHNCQUFzQixVQUFVLGNBQWMsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IsY0FBYyw0QkFBNEIsaUJBQWlCLGFBQWEsb0JBQW9CLGdCQUFnQixhQUFhLG1CQUFtQixjQUFjLGtCQUFrQixjQUFjLGFBQWEsa0JBQWtCLGlCQUFpQixZQUFZLGtCQUFrQixrQkFBa0IsV0FBVyxhQUFhLFlBQVksZ0JBQWdCLGVBQWUsc0JBQXNCLG9CQUFvQixlQUFlLGtCQUFrQixlQUFlLGFBQWEsZUFBZSxlQUFlLGlCQUFpQixnQkFBZ0Isa0JBQWtCLG1CQUFtQixpQkFBaUIsY0FBYyxvQkFBb0IscUJBQXFCLGFBQWEsbUJBQW1CLGNBQWMsZUFBZSxlQUFlLGVBQWUsWUFBWSxhQUFhLG1CQUFtQixlQUFlLENBQUMsRUFBRSxZQUFZLG1CQUFBQSxRQUFVLE9BQU8sWUFBWSxtQkFBQUEsUUFBVSxZQUFZLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBS25uTixVQUFVLG1CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLE9BQU8sQ0FBQztBQUFBLElBQzNDLFdBQVcsbUJBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXJCLFdBQVcsbUJBQUFBLFFBQVUsTUFBTTtBQUFBLE1BQ3pCLFdBQVcsbUJBQUFBLFFBQVU7QUFBQSxNQUNyQixjQUFjLG1CQUFBQSxRQUFVO0FBQUEsTUFDeEIsa0JBQWtCLG1CQUFBQSxRQUFVO0FBQUEsTUFDNUIsS0FBSyxtQkFBQUEsUUFBVTtBQUFBLE1BQ2YsYUFBYSxtQkFBQUEsUUFBVTtBQUFBLElBQ3pCLENBQUM7QUFBQSxJQUNELFVBQVUsbUJBQUFBLFFBQVUsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQUEsSUFDcEMsV0FBVyxtQkFBQUEsUUFBVTtBQUFBLElBQ3JCLGNBQWMsbUJBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0IsbUJBQUFBLFFBQVU7QUFBQSxFQUM5Qjs7O0F5ZGxGQSx5QkFBZ0I7QUFDVCxXQUFTLGFBQWEsTUFBTTtBQUVqQyxRQUFJLFFBQVEsSUFBSSxpQkFBQUMsUUFBSSxJQUFJO0FBRXhCLFdBQU8sTUFBTSxhQUFhO0FBQUEsRUFDNUI7OztBMWRiQSxNQUFJQyxlQUFZLENBQUMsY0FBYyxZQUFZLFFBQVEsVUFBVSxPQUFPLFFBQVEsV0FBVztBQUF2RixNQUNJQyxnQkFBYSxDQUFDLFdBQVcsaUJBQWlCLFlBQVksYUFBYSxZQUFZLFlBQVksU0FBUyxRQUFRLFFBQVEsY0FBYyxhQUFhLGNBQWMsZ0JBQWdCLGFBQWEsYUFBYSxZQUFZLE9BQU87QUFFOU4sV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsU0FBUUMsU0FBUSxnQkFBZ0I7QUFBRSxRQUFJQyxRQUFPLE9BQU8sS0FBS0QsT0FBTTtBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLFVBQVUsT0FBTyxzQkFBc0JBLE9BQU07QUFBRyxVQUFJLGdCQUFnQjtBQUFFLGtCQUFVLFFBQVEsT0FBTyxTQUFVLEtBQUs7QUFBRSxpQkFBTyxPQUFPLHlCQUF5QkEsU0FBUSxHQUFHLEVBQUU7QUFBQSxRQUFZLENBQUM7QUFBQSxNQUFHO0FBQUUsTUFBQUMsTUFBSyxLQUFLLE1BQU1BLE9BQU0sT0FBTztBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFeFYsV0FBU0MsZUFBYyxRQUFRO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFVBQUksU0FBUyxVQUFVLENBQUMsS0FBSyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFBRyxVQUFJLElBQUksR0FBRztBQUFFLFFBQUFILFNBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsVUFBQUksa0JBQWdCLFFBQVEsS0FBSyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUcsV0FBVyxPQUFPLDJCQUEyQjtBQUFFLGVBQU8saUJBQWlCLFFBQVEsT0FBTywwQkFBMEIsTUFBTSxDQUFDO0FBQUEsTUFBRyxPQUFPO0FBQUUsUUFBQUosU0FBUSxPQUFPLE1BQU0sQ0FBQyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsaUJBQU8sZUFBZSxRQUFRLEtBQUssT0FBTyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRXJoQixXQUFTSSxrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQUVoTixXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWlCM1MsTUFBSSxzQkFBc0I7QUFBQSxJQUMvQixTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxNQUFNO0FBQUEsRUFDUjtBQUNPLE1BQUlDLFVBQVMsT0FBTyxtQkFBbUI7QUFDdkMsTUFBSSxxQkFBcUI7QUFBQSxJQUM5QixHQUFHO0FBQUEsSUFDSCxHQUFHO0FBQUEsRUFDTDtBQUNPLE1BQUlDLFNBQVEsT0FBTyxrQkFBa0I7QUFVckMsTUFBSSxZQUFZLFNBQVNDLFdBQVVDLFFBQU07QUFDOUMsUUFBSSxjQUFjQSxPQUFLLFlBQ25CLFlBQVlBLE9BQUssVUFDakIsT0FBT0EsT0FBSyxNQUNaLFNBQVNBLE9BQUssUUFDZCxNQUFNQSxPQUFLLEtBQ1gsWUFBWUEsT0FBSyxNQUNqQixPQUFPLGNBQWMsU0FBUyxXQUFXLFdBQ3pDLFlBQVlBLE9BQUssV0FDakIsT0FBT0wsNEJBQXlCSyxRQUFNYixZQUFTO0FBRW5ELFFBQUksY0FBYyxDQUFDLFFBQVEsYUFBYSxJQUFJO0FBQzVDLFFBQUksV0FBVyxhQUFhLENBQUM7QUFDN0IsUUFBSSxhQUFhLGVBQWUsQ0FBQztBQUNqQyxRQUFJLG1CQUFtQixLQUFLLGFBQWEsY0FBYztBQUN2RCxRQUFJLFVBQVUsUUFBUSxDQUFDLGFBQWEsTUFBTTtBQUMxQyxRQUFJLGVBQWUsQ0FBQztBQUVwQixtQkFBZU0sZUFBY0EsZUFBYyxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsR0FBRztBQUFBLE1BQ2hFLFlBQVk7QUFBQSxJQUNkLENBQUM7QUFFRCxRQUFJLFlBQVksVUFBVTtBQUN4QixxQkFBZUEsZUFBY0EsZUFBYyxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsR0FBRztBQUFBLFFBQ2hFLFVBQVU7QUFBQSxNQUNaLENBQUM7QUFBQSxJQUNIO0FBRUEsUUFBSSxTQUFTLENBQUM7QUFFZCxRQUFJLFFBQVEsQ0FBQyxrQkFBa0I7QUFDN0IsYUFBTyxPQUFPO0FBQ2QsYUFBTyxNQUFNLHNCQUFzQjtBQUFBLFFBQ2pDO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFDRCxhQUFPLFNBQVM7QUFBQSxJQUNsQixPQUFPO0FBQ0wsYUFBTyxPQUFPO0FBQUEsSUFDaEI7QUFFQTtBQUFBO0FBQUEsTUFDRSxJQUFjLDRCQUE0QkosWUFBUztBQUFBLFFBQ2pEO0FBQUEsUUFDQSxlQUFlO0FBQUEsUUFDZixLQUFLO0FBQUEsTUFDUCxHQUFHLGNBQWMsUUFBUSxJQUFJLENBQUM7QUFBQTtBQUFBLEVBRWxDO0FBQ0EsWUFBVSxZQUFZO0FBQUEsSUFDcEIsTUFBTSxtQkFBQVksUUFBVTtBQUFBLElBQ2hCLFNBQVMsbUJBQUFBLFFBQVU7QUFBQSxJQUNuQixVQUFVLG1CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTcEIsTUFBTSxtQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU2hCLE9BQU8sbUJBQUFBLFFBQVUsTUFBTSxDQUFDLFdBQVcsVUFBVSxXQUFXLFdBQVcsVUFBVSxTQUFTLE1BQU0sQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUzdGLE1BQU0sbUJBQUFBLFFBQVUsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTaEMsWUFBWSxtQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVd0QixZQUFZLG1CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTdEIsV0FBVyxtQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU3JCLFVBQVUsbUJBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVNwQixXQUFXLG1CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLckIsY0FBYyxtQkFBQUEsUUFBVTtBQUFBLElBQ3hCLE9BQU8sbUJBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtqQixVQUFVLG1CQUFBQSxRQUFVLFVBQVUsQ0FBQyxtQkFBQUEsUUFBVSxNQUFNLENBQUMsaUJBQWlCLGNBQWMsdUJBQXVCLFlBQVksYUFBYSxTQUFTLGdCQUFnQixjQUFjLFVBQVUsWUFBWSxnQkFBZ0IsUUFBUSxhQUFhLGFBQWEsY0FBYyxXQUFXLGNBQWMsWUFBWSxZQUFZLGdCQUFnQixVQUFVLFFBQVEsYUFBYSxRQUFRLG1CQUFtQixpQkFBaUIsVUFBVSxjQUFjLFNBQVMsU0FBUyxPQUFPLFlBQVksWUFBWSxhQUFhLFlBQVksU0FBUyx1QkFBdUIsU0FBUyxxQkFBcUIsU0FBUyxnQkFBZ0IsZUFBZSxjQUFjLFdBQVcsV0FBVyxTQUFTLFdBQVcsV0FBVyxjQUFjLGFBQWEsbUJBQW1CLHdCQUF3QixtQkFBbUIsb0JBQW9CLHNCQUFzQixvQkFBb0IsUUFBUSxpQkFBaUIscUJBQXFCLHdCQUF3Qix1QkFBdUIseUJBQXlCLFNBQVMsOEJBQThCLHdCQUF3QixjQUFjLFlBQVksT0FBTyxnQkFBZ0Isa0JBQWtCLFlBQVksV0FBVyxlQUFlLGVBQWUsWUFBWSxnQkFBZ0IsaUJBQWlCLGFBQWEsT0FBTyxtQkFBbUIsb0JBQW9CLFlBQVkscUJBQXFCLG1CQUFtQixvQkFBb0IsY0FBYyxtQkFBbUIsbUJBQW1CLGlCQUFpQiw4QkFBOEIsNEJBQTRCLGlCQUFpQixnQkFBZ0IseUJBQXlCLHlCQUF5Qix1QkFBdUIseUJBQXlCLHdCQUF3QixzQkFBc0IsY0FBYyxxQkFBcUIsNEJBQTRCLDZCQUE2Qix5QkFBeUIsMEJBQTBCLGNBQWMsZ0JBQWdCLGVBQWUsbUJBQW1CLGNBQWMsdUJBQXVCLFNBQVMsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsY0FBYyxnQkFBZ0IsT0FBTyxhQUFhLGFBQWEsZUFBZSxXQUFXLGVBQWUsVUFBVSxRQUFRLFlBQVksUUFBUSxlQUFlLGdCQUFnQixxQkFBcUIsY0FBYyxhQUFhLGlCQUFpQixjQUFjLGtCQUFrQixZQUFZLFFBQVEsVUFBVSxXQUFXLFNBQVMsUUFBUSxrQkFBa0IsWUFBWSxRQUFRLFdBQVcsU0FBUyxnQkFBZ0IsV0FBVyxRQUFRLFFBQVEsYUFBYSxTQUFTLGdCQUFnQixjQUFjLGFBQWEsY0FBYyxzQkFBc0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGtCQUFrQixnQkFBZ0IsaUJBQWlCLGVBQWUsV0FBVyxVQUFVLE1BQU0sWUFBWSxZQUFZLGVBQWUsY0FBYyxlQUFlLFlBQVksa0JBQWtCLGlCQUFpQixVQUFVLFdBQVcsYUFBYSxjQUFjLGNBQWMsYUFBYSxRQUFRLFFBQVEsV0FBVyxRQUFRLFlBQVksV0FBVyxlQUFlLGlCQUFpQixjQUFjLGlCQUFpQixhQUFhLGlCQUFpQixhQUFhLHlCQUF5QixZQUFZLGFBQWEsdUJBQXVCLFlBQVksbUJBQW1CLGlCQUFpQixjQUFjLGtCQUFrQixlQUFlLG9CQUFvQixxQkFBcUIsd0JBQXdCLFlBQVksV0FBVyxlQUFlLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSxXQUFXLGVBQWUsYUFBYSxjQUFjLGtCQUFrQixlQUFlLGdCQUFnQixZQUFZLGlCQUFpQixlQUFlLGVBQWUsYUFBYSxhQUFhLHFCQUFxQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsYUFBYSxnQkFBZ0Isa0JBQWtCLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSx1QkFBdUIsV0FBVyxrQkFBa0IsY0FBYyxpQkFBaUIsa0JBQWtCLGlCQUFpQixzQkFBc0IsVUFBVSwwQkFBMEIsb0JBQW9CLG1CQUFtQixpQkFBaUIsYUFBYSxVQUFVLFFBQVEsWUFBWSxZQUFZLGFBQWEsVUFBVSxTQUFTLGlCQUFpQixjQUFjLFlBQVksU0FBUyxpQkFBaUIsdUJBQXVCLFVBQVUsaUJBQWlCLFFBQVEsYUFBYSxVQUFVLFFBQVEsZUFBZSxVQUFVLFdBQVcsVUFBVSx1QkFBdUIsV0FBVyxpQkFBaUIsY0FBYyxlQUFlLGFBQWEsV0FBVyxTQUFTLFdBQVcsVUFBVSxXQUFXLE9BQU8sYUFBYSxlQUFlLFFBQVEsY0FBYyxRQUFRLGdCQUFnQixzQkFBc0IsVUFBVSxRQUFRLG9CQUFvQixTQUFTLHFCQUFxQixXQUFXLGlCQUFpQixZQUFZLGdCQUFnQixhQUFhLFFBQVEsbUJBQW1CLFNBQVMsVUFBVSxxQkFBcUIsd0JBQXdCLGVBQWUsa0JBQWtCLDBCQUEwQiwwQkFBMEIsaUJBQWlCLFNBQVMsU0FBUyxhQUFhLFlBQVksWUFBWSxhQUFhLFVBQVUsWUFBWSxhQUFhLFVBQVUsYUFBYSxrQkFBa0IsY0FBYyxtQkFBbUIsa0JBQWtCLG1CQUFtQixpQkFBaUIsa0JBQWtCLFNBQVMsUUFBUSxjQUFjLGFBQWEsV0FBVyxVQUFVLGFBQWEsT0FBTyxlQUFlLFdBQVcsdUJBQXVCLHdCQUF3QixzQkFBc0IsbUJBQW1CLE9BQU8sUUFBUSxlQUFlLFlBQVksZUFBZSxlQUFlLGNBQWMsWUFBWSxTQUFTLFVBQVUsVUFBVSx1QkFBdUIsYUFBYSxRQUFRLGNBQWMsU0FBUyxpQkFBaUIsVUFBVSxlQUFlLFdBQVcsa0JBQWtCLG9CQUFvQiwyQkFBMkIsa0JBQWtCLHlCQUF5QixZQUFZLFdBQVcsV0FBVyxvQkFBb0IsZ0JBQWdCLGFBQWEsVUFBVSxZQUFZLGVBQWUsV0FBVyxlQUFlLFdBQVcsb0JBQW9CLGdCQUFnQixjQUFjLFlBQVksb0JBQW9CLHNCQUFzQixVQUFVLGNBQWMsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IsY0FBYyw0QkFBNEIsaUJBQWlCLGFBQWEsb0JBQW9CLGdCQUFnQixhQUFhLG1CQUFtQixjQUFjLGtCQUFrQixjQUFjLGFBQWEsa0JBQWtCLGlCQUFpQixZQUFZLGtCQUFrQixrQkFBa0IsV0FBVyxhQUFhLFlBQVksZ0JBQWdCLGVBQWUsc0JBQXNCLG9CQUFvQixlQUFlLGtCQUFrQixlQUFlLGFBQWEsZUFBZSxlQUFlLGlCQUFpQixnQkFBZ0Isa0JBQWtCLG1CQUFtQixpQkFBaUIsY0FBYyxvQkFBb0IscUJBQXFCLGFBQWEsbUJBQW1CLGNBQWMsZUFBZSxlQUFlLGVBQWUsWUFBWSxhQUFhLG1CQUFtQixlQUFlLENBQUMsRUFBRSxZQUFZLG1CQUFBQSxRQUFVLE9BQU8sWUFBWSxtQkFBQUEsUUFBVSxZQUFZLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBS25uTixVQUFVLG1CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLE9BQU8sQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNM0MsV0FBVyxtQkFBQUEsUUFBVSxNQUFNO0FBQUEsTUFDekIsV0FBVyxtQkFBQUEsUUFBVTtBQUFBLE1BQ3JCLGNBQWMsbUJBQUFBLFFBQVU7QUFBQSxNQUN4QixrQkFBa0IsbUJBQUFBLFFBQVU7QUFBQSxNQUM1QixLQUFLLG1CQUFBQSxRQUFVO0FBQUEsTUFDZixhQUFhLG1CQUFBQSxRQUFVO0FBQUEsSUFDekIsQ0FBQztBQUFBLElBQ0QsVUFBVSxtQkFBQUEsUUFBVSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUM7QUFBQSxJQUNwQyxXQUFXLG1CQUFBQSxRQUFVO0FBQUEsSUFDckIsY0FBYyxtQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixtQkFBQUEsUUFBVTtBQUFBLElBQzVCLFdBQVcsbUJBQUFBLFFBQVU7QUFBQSxFQUN2QjtBQUNBLFlBQVUsY0FBYztBQVlqQixNQUFJLDZCQUEwQyxnREFBVyxTQUFVQyxRQUFPLEtBQUs7QUFDcEYsUUFBSSxnQkFBZ0JBLE9BQU0sU0FDdEIsVUFBVSxrQkFBa0IsU0FBUyxXQUFXLGVBQ2hELGdCQUFnQkEsT0FBTSxlQUN0QixXQUFXQSxPQUFNLFVBQ2pCLFlBQVlBLE9BQU0sV0FDbEIsV0FBV0EsT0FBTSxVQUNqQixpQkFBaUJBLE9BQU0sVUFDdkIsV0FBVyxtQkFBbUIsU0FBUyxTQUFTLGdCQUNoRCxjQUFjQSxPQUFNLE9BQ3BCLFFBQVEsZ0JBQWdCLFNBQVMsWUFBWSxhQUM3QyxhQUFhQSxPQUFNLE1BQ25CQyxRQUFPLGVBQWUsU0FBUyxNQUFNLFlBQ3JDLGFBQWFELE9BQU0sTUFDbkIsT0FBTyxlQUFlLFNBQVMsUUFBUSxZQUN2QyxhQUFhQSxPQUFNLFlBQ25CLFlBQVlBLE9BQU0sV0FDbEIsYUFBYUEsT0FBTSxZQUNuQixlQUFlQSxPQUFNLGNBQ3JCLFlBQVlBLE9BQU0sV0FDbEIsWUFBWUEsT0FBTSxXQUNsQixXQUFXQSxPQUFNLFVBQ2pCLFFBQVFBLE9BQU0sT0FDZCxPQUFPUCw0QkFBeUJPLFFBQU9kLGFBQVU7QUFFckQsUUFBSSxtQkFBbUIsYUFBYTtBQUNwQyxRQUFJLGNBQVUsbUJBQUFnQixTQUFXLGVBQWUsU0FBUyxvQkFBb0IsS0FBSyxJQUFJLEdBQUcsT0FBTyxhQUFhLEVBQUUsT0FBTyxvQkFBb0IsS0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLGFBQWEsRUFBRSxPQUFPLG9CQUFvQixPQUFPLEdBQUdELFNBQVEsbUJBQW1CQSxLQUFJLElBQUksR0FBRyxPQUFPLGFBQWEsRUFBRSxPQUFPLG1CQUFtQkEsS0FBSSxDQUFDLElBQUksTUFBTSxRQUFRLEdBQUcsT0FBTyxlQUFlLFFBQVEsR0FBRyxhQUFhLEdBQUcsT0FBTyxlQUFlLGFBQWEsR0FBRyxvQkFBb0IsR0FBRyxPQUFPLGVBQWUsYUFBYSxHQUFHLFNBQVM7QUFNdmQsUUFBSSx3QkFBb0IsbUJBQUFDLFNBQVcsc0JBQXNCLGdCQUFnQixhQUFhLFNBQVM7QUFDL0YsUUFBSSxxQkFBaUIsbUJBQUFBLFNBQVcsbUJBQW1CLGFBQWEsVUFBVSxTQUFTO0FBRW5GLFFBQUksWUFBWSxJQUFjLDRCQUFrQmYsWUFBUztBQUFBLE1BQ3ZEO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFdBQVdJLGVBQWNBLGVBQWMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUc7QUFBQSxRQUN6RCxXQUFXO0FBQUEsTUFDYixDQUFDO0FBQUEsSUFDSCxHQUFHLGNBQWM7QUFBQTtBQUFBLE1BRWYsV0FBVztBQUFBLElBQ2IsQ0FBQyxHQUFHLFFBQVE7QUFFWixRQUFJLGtCQUFrQjtBQUV0QixRQUFJLGFBQWEsVUFBYSxhQUFhLE1BQU07QUFDL0Msd0JBQWtCQSxlQUFjQSxlQUFjLENBQUMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxHQUFHO0FBQUEsUUFDdEU7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBb0IsZ0NBQUFZLFFBQU0sY0FBYyxTQUFTWixlQUFjO0FBQUEsTUFDN0QsV0FBVztBQUFBLE1BQ1gsT0FBTztBQUFBLE1BQ1AsVUFBVSxZQUFZLFlBQVk7QUFBQSxNQUNsQyxnQkFBZ0IsWUFBWSxXQUFXLGFBQWE7QUFBQSxNQUNwRDtBQUFBLElBQ0YsR0FBRyxJQUFJLEdBQUcsU0FBUztBQUFBLEVBQ3JCLENBQUM7QUFDRCw2QkFBMkIsWUFBWTtBQUFBLElBQ3JDLFVBQVUsbUJBQUFRLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtwQixNQUFNLG1CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLaEIsT0FBTyxtQkFBQUEsUUFBVSxNQUFNLENBQUMsV0FBVyxVQUFVLFdBQVcsV0FBVyxVQUFVLFNBQVMsTUFBTSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLN0YsTUFBTSxtQkFBQUEsUUFBVSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtoQyxZQUFZLG1CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU10QixZQUFZLG1CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLdEIsV0FBVyxtQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3JCLFVBQVUsbUJBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtwQixXQUFXLG1CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLckIsY0FBYyxtQkFBQUEsUUFBVTtBQUFBLElBQ3hCLE9BQU8sbUJBQUFBLFFBQVU7QUFBQSxJQUNqQixVQUFVLG1CQUFBQSxRQUFVLFVBQVUsQ0FBQyxtQkFBQUEsUUFBVSxNQUFNLENBQUMsaUJBQWlCLGNBQWMsdUJBQXVCLFlBQVksYUFBYSxTQUFTLGdCQUFnQixjQUFjLFVBQVUsWUFBWSxnQkFBZ0IsUUFBUSxhQUFhLGFBQWEsY0FBYyxXQUFXLGNBQWMsWUFBWSxZQUFZLGdCQUFnQixVQUFVLFFBQVEsYUFBYSxRQUFRLG1CQUFtQixpQkFBaUIsVUFBVSxjQUFjLFNBQVMsU0FBUyxPQUFPLFlBQVksWUFBWSxhQUFhLFlBQVksU0FBUyx1QkFBdUIsU0FBUyxxQkFBcUIsU0FBUyxnQkFBZ0IsZUFBZSxjQUFjLFdBQVcsV0FBVyxTQUFTLFdBQVcsV0FBVyxjQUFjLGFBQWEsbUJBQW1CLHdCQUF3QixtQkFBbUIsb0JBQW9CLHNCQUFzQixvQkFBb0IsUUFBUSxpQkFBaUIscUJBQXFCLHdCQUF3Qix1QkFBdUIseUJBQXlCLFNBQVMsOEJBQThCLHdCQUF3QixjQUFjLFlBQVksT0FBTyxnQkFBZ0Isa0JBQWtCLFlBQVksV0FBVyxlQUFlLGVBQWUsWUFBWSxnQkFBZ0IsaUJBQWlCLGFBQWEsT0FBTyxtQkFBbUIsb0JBQW9CLFlBQVkscUJBQXFCLG1CQUFtQixvQkFBb0IsY0FBYyxtQkFBbUIsbUJBQW1CLGlCQUFpQiw4QkFBOEIsNEJBQTRCLGlCQUFpQixnQkFBZ0IseUJBQXlCLHlCQUF5Qix1QkFBdUIseUJBQXlCLHdCQUF3QixzQkFBc0IsY0FBYyxxQkFBcUIsNEJBQTRCLDZCQUE2Qix5QkFBeUIsMEJBQTBCLGNBQWMsZ0JBQWdCLGVBQWUsbUJBQW1CLGNBQWMsdUJBQXVCLFNBQVMsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsY0FBYyxnQkFBZ0IsT0FBTyxhQUFhLGFBQWEsZUFBZSxXQUFXLGVBQWUsVUFBVSxRQUFRLFlBQVksUUFBUSxlQUFlLGdCQUFnQixxQkFBcUIsY0FBYyxhQUFhLGlCQUFpQixjQUFjLGtCQUFrQixZQUFZLFFBQVEsVUFBVSxXQUFXLFNBQVMsUUFBUSxrQkFBa0IsWUFBWSxRQUFRLFdBQVcsU0FBUyxnQkFBZ0IsV0FBVyxRQUFRLFFBQVEsYUFBYSxTQUFTLGdCQUFnQixjQUFjLGFBQWEsY0FBYyxzQkFBc0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGtCQUFrQixnQkFBZ0IsaUJBQWlCLGVBQWUsV0FBVyxVQUFVLE1BQU0sWUFBWSxZQUFZLGVBQWUsY0FBYyxlQUFlLFlBQVksa0JBQWtCLGlCQUFpQixVQUFVLFdBQVcsYUFBYSxjQUFjLGNBQWMsYUFBYSxRQUFRLFFBQVEsV0FBVyxRQUFRLFlBQVksV0FBVyxlQUFlLGlCQUFpQixjQUFjLGlCQUFpQixhQUFhLGlCQUFpQixhQUFhLHlCQUF5QixZQUFZLGFBQWEsdUJBQXVCLFlBQVksbUJBQW1CLGlCQUFpQixjQUFjLGtCQUFrQixlQUFlLG9CQUFvQixxQkFBcUIsd0JBQXdCLFlBQVksV0FBVyxlQUFlLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSxXQUFXLGVBQWUsYUFBYSxjQUFjLGtCQUFrQixlQUFlLGdCQUFnQixZQUFZLGlCQUFpQixlQUFlLGVBQWUsYUFBYSxhQUFhLHFCQUFxQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsYUFBYSxnQkFBZ0Isa0JBQWtCLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSx1QkFBdUIsV0FBVyxrQkFBa0IsY0FBYyxpQkFBaUIsa0JBQWtCLGlCQUFpQixzQkFBc0IsVUFBVSwwQkFBMEIsb0JBQW9CLG1CQUFtQixpQkFBaUIsYUFBYSxVQUFVLFFBQVEsWUFBWSxZQUFZLGFBQWEsVUFBVSxTQUFTLGlCQUFpQixjQUFjLFlBQVksU0FBUyxpQkFBaUIsdUJBQXVCLFVBQVUsaUJBQWlCLFFBQVEsYUFBYSxVQUFVLFFBQVEsZUFBZSxVQUFVLFdBQVcsVUFBVSx1QkFBdUIsV0FBVyxpQkFBaUIsY0FBYyxlQUFlLGFBQWEsV0FBVyxTQUFTLFdBQVcsVUFBVSxXQUFXLE9BQU8sYUFBYSxlQUFlLFFBQVEsY0FBYyxRQUFRLGdCQUFnQixzQkFBc0IsVUFBVSxRQUFRLG9CQUFvQixTQUFTLHFCQUFxQixXQUFXLGlCQUFpQixZQUFZLGdCQUFnQixhQUFhLFFBQVEsbUJBQW1CLFNBQVMsVUFBVSxxQkFBcUIsd0JBQXdCLGVBQWUsa0JBQWtCLDBCQUEwQiwwQkFBMEIsaUJBQWlCLFNBQVMsU0FBUyxhQUFhLFlBQVksWUFBWSxhQUFhLFVBQVUsWUFBWSxhQUFhLFVBQVUsYUFBYSxrQkFBa0IsY0FBYyxtQkFBbUIsa0JBQWtCLG1CQUFtQixpQkFBaUIsa0JBQWtCLFNBQVMsUUFBUSxjQUFjLGFBQWEsV0FBVyxVQUFVLGFBQWEsT0FBTyxlQUFlLFdBQVcsdUJBQXVCLHdCQUF3QixzQkFBc0IsbUJBQW1CLE9BQU8sUUFBUSxlQUFlLFlBQVksZUFBZSxlQUFlLGNBQWMsWUFBWSxTQUFTLFVBQVUsVUFBVSx1QkFBdUIsYUFBYSxRQUFRLGNBQWMsU0FBUyxpQkFBaUIsVUFBVSxlQUFlLFdBQVcsa0JBQWtCLG9CQUFvQiwyQkFBMkIsa0JBQWtCLHlCQUF5QixZQUFZLFdBQVcsV0FBVyxvQkFBb0IsZ0JBQWdCLGFBQWEsVUFBVSxZQUFZLGVBQWUsV0FBVyxlQUFlLFdBQVcsb0JBQW9CLGdCQUFnQixjQUFjLFlBQVksb0JBQW9CLHNCQUFzQixVQUFVLGNBQWMsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IsY0FBYyw0QkFBNEIsaUJBQWlCLGFBQWEsb0JBQW9CLGdCQUFnQixhQUFhLG1CQUFtQixjQUFjLGtCQUFrQixjQUFjLGFBQWEsa0JBQWtCLGlCQUFpQixZQUFZLGtCQUFrQixrQkFBa0IsV0FBVyxhQUFhLFlBQVksZ0JBQWdCLGVBQWUsc0JBQXNCLG9CQUFvQixlQUFlLGtCQUFrQixlQUFlLGFBQWEsZUFBZSxlQUFlLGlCQUFpQixnQkFBZ0Isa0JBQWtCLG1CQUFtQixpQkFBaUIsY0FBYyxvQkFBb0IscUJBQXFCLGFBQWEsbUJBQW1CLGNBQWMsZUFBZSxlQUFlLGVBQWUsWUFBWSxhQUFhLG1CQUFtQixlQUFlLENBQUMsRUFBRSxZQUFZLG1CQUFBQSxRQUFVLE9BQU8sWUFBWSxtQkFBQUEsUUFBVSxZQUFZLFVBQVUsQ0FBQztBQUFBLElBQ25uTixVQUFVLG1CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLE9BQU8sQ0FBQztBQUFBLElBQzNDLFdBQVcsbUJBQUFBLFFBQVUsTUFBTTtBQUFBLE1BQ3pCLFdBQVcsbUJBQUFBLFFBQVU7QUFBQSxNQUNyQixjQUFjLG1CQUFBQSxRQUFVO0FBQUEsTUFDeEIsa0JBQWtCLG1CQUFBQSxRQUFVO0FBQUEsTUFDNUIsS0FBSyxtQkFBQUEsUUFBVTtBQUFBLE1BQ2YsYUFBYSxtQkFBQUEsUUFBVTtBQUFBLElBQ3pCLENBQUM7QUFBQSxJQUNELFVBQVUsbUJBQUFBLFFBQVUsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQUEsSUFDcEMsV0FBVyxtQkFBQUEsUUFBVTtBQUFBLElBQ3JCLGNBQWMsbUJBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0IsbUJBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUs1QixTQUFTLG1CQUFBQSxRQUFVLE1BQU0sQ0FBQyxLQUFLLFVBQVUsUUFBUSxPQUFPLENBQUMsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzNELGVBQWUsbUJBQUFBLFFBQVUsT0FBTztBQUFBLEVBQ2xDO0FBQ0EsNkJBQTJCLGNBQWM7OztBMmRyVXpDLE1BQUFLLGtCQUF5RDs7O0FDUnpELE1BQUFDLGtCQUEwQjtBQS9CMUIsV0FBU0MsU0FBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsV0FBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxXQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxTQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLFdBQVNFLGlCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxtQkFBa0IsUUFBUSxPQUFPO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUFFLFVBQUksYUFBYSxNQUFNLENBQUM7QUFBRyxpQkFBVyxhQUFhLFdBQVcsY0FBYztBQUFPLGlCQUFXLGVBQWU7QUFBTSxVQUFJLFdBQVc7QUFBWSxtQkFBVyxXQUFXO0FBQU0sYUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUU1VCxXQUFTQyxjQUFhLGFBQWEsWUFBWSxhQUFhO0FBQUUsUUFBSTtBQUFZLE1BQUFELG1CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUFHLFFBQUk7QUFBYSxNQUFBQSxtQkFBa0IsYUFBYSxXQUFXO0FBQUcsV0FBTztBQUFBLEVBQWE7QUFFdE4sV0FBU0UsV0FBVSxVQUFVLFlBQVk7QUFBRSxRQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUFFLFlBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLElBQUc7QUFBRSxhQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFHLFFBQUk7QUFBWSxNQUFBQyxpQkFBZ0IsVUFBVSxVQUFVO0FBQUEsRUFBRztBQUVoWSxXQUFTQSxpQkFBZ0IsR0FBRyxHQUFHO0FBQUUsSUFBQUEsbUJBQWtCLE9BQU8sa0JBQWtCLFNBQVNBLGtCQUFnQkMsSUFBR0MsSUFBRztBQUFFLE1BQUFELEdBQUUsWUFBWUM7QUFBRyxhQUFPRDtBQUFBLElBQUc7QUFBRyxXQUFPRCxpQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFBRztBQUV6SyxXQUFTRyxjQUFhLFNBQVM7QUFBRSxRQUFJLDRCQUE0QkMsMkJBQTBCO0FBQUcsV0FBTyxTQUFTLHVCQUF1QjtBQUFFLFVBQUksUUFBUUMsaUJBQWdCLE9BQU8sR0FBRztBQUFRLFVBQUksMkJBQTJCO0FBQUUsWUFBSSxZQUFZQSxpQkFBZ0IsSUFBSSxFQUFFO0FBQWEsaUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFBRyxPQUFPO0FBQUUsaUJBQVMsTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBRSxhQUFPQyw0QkFBMkIsTUFBTSxNQUFNO0FBQUEsSUFBRztBQUFBLEVBQUc7QUFFeGEsV0FBU0EsNEJBQTJCQyxPQUFNLE1BQU07QUFBRSxRQUFJLFNBQVNiLFNBQVEsSUFBSSxNQUFNLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFBRSxhQUFPO0FBQUEsSUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLElBQUc7QUFBRSxXQUFPYyx3QkFBdUJELEtBQUk7QUFBQSxFQUFHO0FBRS9SLFdBQVNDLHdCQUF1QkQsT0FBTTtBQUFFLFFBQUlBLFVBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxlQUFlLDJEQUEyRDtBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFckssV0FBU0gsNkJBQTRCO0FBQUUsUUFBSSxPQUFPLFlBQVksZUFBZSxDQUFDLFFBQVE7QUFBVyxhQUFPO0FBQU8sUUFBSSxRQUFRLFVBQVU7QUFBTSxhQUFPO0FBQU8sUUFBSSxPQUFPLFVBQVU7QUFBWSxhQUFPO0FBQU0sUUFBSTtBQUFFLGNBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxVQUFVLFNBQVMsQ0FBQyxHQUFHLFdBQVk7QUFBQSxNQUFDLENBQUMsQ0FBQztBQUFHLGFBQU87QUFBQSxJQUFNLFNBQVMsR0FBRztBQUFFLGFBQU87QUFBQSxJQUFPO0FBQUEsRUFBRTtBQUV4VSxXQUFTQyxpQkFBZ0IsR0FBRztBQUFFLElBQUFBLG1CQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQixTQUFTQSxrQkFBZ0JKLElBQUc7QUFBRSxhQUFPQSxHQUFFLGFBQWEsT0FBTyxlQUFlQSxFQUFDO0FBQUEsSUFBRztBQUFHLFdBQU9JLGlCQUFnQixDQUFDO0FBQUEsRUFBRztBQUU1TSxXQUFTSSxrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQVV6TSxNQUFJLGNBQTJCLHlCQUFVLFlBQVk7QUFDMUQsSUFBQVYsV0FBVVcsY0FBYSxVQUFVO0FBRWpDLFFBQUksU0FBU1AsY0FBYU8sWUFBVztBQUVyQyxhQUFTQSxlQUFjO0FBQ3JCLFVBQUk7QUFFSixNQUFBZCxpQkFBZ0IsTUFBTWMsWUFBVztBQUVqQyxlQUFTLE9BQU8sVUFBVSxRQUFRLE9BQU8sSUFBSSxNQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsT0FBTyxNQUFNLFFBQVE7QUFDdkYsYUFBSyxJQUFJLElBQUksVUFBVSxJQUFJO0FBQUEsTUFDN0I7QUFFQSxjQUFRLE9BQU8sS0FBSyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFFckQsTUFBQUQsa0JBQWdCRCx3QkFBdUIsS0FBSyxHQUFHLFFBQVEsYUFBYTtBQUVwRSxNQUFBQyxrQkFBZ0JELHdCQUF1QixLQUFLLEdBQUcsYUFBYSxJQUFJO0FBRWhFLE1BQUFDLGtCQUFnQkQsd0JBQXVCLEtBQUssR0FBRyxZQUFZLElBQUk7QUFFL0QsTUFBQUMsa0JBQWdCRCx3QkFBdUIsS0FBSyxHQUFHLG1CQUFtQixTQUFVLEtBQUs7QUFDL0UsWUFBSSxNQUFNLGNBQWM7QUFBSztBQUc3QixZQUFJLE1BQU0sWUFBWSxNQUFNO0FBQzFCLGdCQUFNLFNBQVMsV0FBVztBQUUxQixnQkFBTSxXQUFXO0FBQUEsUUFDbkI7QUFFQSxjQUFNLFlBQVk7QUFFbEIsWUFBSSxNQUFNLGFBQWEsTUFBTTtBQUMzQixnQkFBTSxhQUFhO0FBQUEsUUFDckI7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHdCQUF1QixLQUFLLEdBQUcsZ0JBQWdCLFdBQVk7QUFDekUsY0FBTSxJQUFJLE1BQU0sK0NBQStDO0FBQUEsTUFDakUsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNUO0FBRUEsSUFBQVYsY0FBYVksY0FBYSxDQUFDO0FBQUEsTUFDekIsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLG9CQUFvQjtBQUNsQyxZQUFJLEtBQUssYUFBYSxNQUFNO0FBQzFCLGdCQUFNLElBQUksTUFBTSxHQUFHLE9BQU8sS0FBSyxNQUFNLHdCQUF3QixDQUFDO0FBQUEsUUFDaEU7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsdUJBQXVCO0FBQ3JDLFlBQUksS0FBSyxZQUFZLE1BQU07QUFDekIsZUFBSyxTQUFTLFdBQVc7QUFBQSxRQUMzQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBU0MsVUFBUztBQUN2QixZQUFJLFFBQVEsS0FBSztBQUNqQixlQUFPLE1BQU0sU0FBUyxLQUFLLGVBQWU7QUFBQSxNQUM1QztBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBRUYsV0FBT0Q7QUFBQSxFQUNULEVBQUUseUJBQVM7OztBRHJHWCxXQUFTRSxTQUFRLEtBQUs7QUFBRTtBQUEyQixRQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sT0FBTyxhQUFhLFVBQVU7QUFBRSxNQUFBQSxXQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUcsT0FBTztBQUFFLE1BQUFELFdBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU9BLFFBQU8sT0FBTyxXQUFXLGNBQWNBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRztBQUFFLFdBQU9ELFNBQVEsR0FBRztBQUFBLEVBQUc7QUFjelgsV0FBU0UsaUJBQWdCLFVBQVUsYUFBYTtBQUFFLFFBQUksRUFBRSxvQkFBb0IsY0FBYztBQUFFLFlBQU0sSUFBSSxVQUFVLG1DQUFtQztBQUFBLElBQUc7QUFBQSxFQUFFO0FBRXhKLFdBQVNDLFdBQVUsVUFBVSxZQUFZO0FBQUUsUUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFBRSxZQUFNLElBQUksVUFBVSxvREFBb0Q7QUFBQSxJQUFHO0FBQUUsYUFBUyxZQUFZLE9BQU8sT0FBTyxjQUFjLFdBQVcsV0FBVyxFQUFFLGFBQWEsRUFBRSxPQUFPLFVBQVUsVUFBVSxNQUFNLGNBQWMsS0FBSyxFQUFFLENBQUM7QUFBRyxRQUFJO0FBQVksTUFBQUMsaUJBQWdCLFVBQVUsVUFBVTtBQUFBLEVBQUc7QUFFaFksV0FBU0EsaUJBQWdCLEdBQUcsR0FBRztBQUFFLElBQUFBLG1CQUFrQixPQUFPLGtCQUFrQixTQUFTQSxrQkFBZ0JDLElBQUdDLElBQUc7QUFBRSxNQUFBRCxHQUFFLFlBQVlDO0FBQUcsYUFBT0Q7QUFBQSxJQUFHO0FBQUcsV0FBT0QsaUJBQWdCLEdBQUcsQ0FBQztBQUFBLEVBQUc7QUFFekssV0FBU0csY0FBYSxTQUFTO0FBQUUsUUFBSSw0QkFBNEJDLDJCQUEwQjtBQUFHLFdBQU8sU0FBUyx1QkFBdUI7QUFBRSxVQUFJLFFBQVFDLGlCQUFnQixPQUFPLEdBQUc7QUFBUSxVQUFJLDJCQUEyQjtBQUFFLFlBQUksWUFBWUEsaUJBQWdCLElBQUksRUFBRTtBQUFhLGlCQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVcsU0FBUztBQUFBLE1BQUcsT0FBTztBQUFFLGlCQUFTLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUFHO0FBQUUsYUFBT0MsNEJBQTJCLE1BQU0sTUFBTTtBQUFBLElBQUc7QUFBQSxFQUFHO0FBRXhhLFdBQVNBLDRCQUEyQkMsT0FBTSxNQUFNO0FBQUUsUUFBSSxTQUFTQyxTQUFRLElBQUksTUFBTSxZQUFZLE9BQU8sU0FBUyxhQUFhO0FBQUUsYUFBTztBQUFBLElBQU0sV0FBVyxTQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksVUFBVSwwREFBMEQ7QUFBQSxJQUFHO0FBQUUsV0FBT0Msd0JBQXVCRixLQUFJO0FBQUEsRUFBRztBQUUvUixXQUFTRSx3QkFBdUJGLE9BQU07QUFBRSxRQUFJQSxVQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksZUFBZSwyREFBMkQ7QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXJLLFdBQVNILDZCQUE0QjtBQUFFLFFBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsYUFBTztBQUFPLFFBQUksUUFBUSxVQUFVO0FBQU0sYUFBTztBQUFPLFFBQUksT0FBTyxVQUFVO0FBQVksYUFBTztBQUFNLFFBQUk7QUFBRSxjQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLENBQUMsR0FBRyxXQUFZO0FBQUEsTUFBQyxDQUFDLENBQUM7QUFBRyxhQUFPO0FBQUEsSUFBTSxTQUFTLEdBQUc7QUFBRSxhQUFPO0FBQUEsSUFBTztBQUFBLEVBQUU7QUFFeFUsV0FBU0MsaUJBQWdCLEdBQUc7QUFBRSxJQUFBQSxtQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsU0FBU0Esa0JBQWdCSixJQUFHO0FBQUUsYUFBT0EsR0FBRSxhQUFhLE9BQU8sZUFBZUEsRUFBQztBQUFBLElBQUc7QUFBRyxXQUFPSSxpQkFBZ0IsQ0FBQztBQUFBLEVBQUc7QUFFNU0sV0FBU0ssa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUFXek0sTUFBSSxvQkFBb0IsT0FBTyxXQUFXLGVBQWUsT0FBTyxPQUFPLG1CQUFtQjtBQUMxRixNQUFJLG9CQUFpQyx5QkFBVSxjQUFjO0FBQ2xFLElBQUFYLFdBQVVZLG9CQUFtQixZQUFZO0FBRXpDLFFBQUksU0FBU1IsY0FBYVEsa0JBQWlCO0FBRTNDLGFBQVNBLHFCQUFvQjtBQUMzQixVQUFJO0FBRUosTUFBQWIsaUJBQWdCLE1BQU1hLGtCQUFpQjtBQUV2QyxlQUFTLE9BQU8sVUFBVSxRQUFRLE9BQU8sSUFBSSxNQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsT0FBTyxNQUFNLFFBQVE7QUFDdkYsYUFBSyxJQUFJLElBQUksVUFBVSxJQUFJO0FBQUEsTUFDN0I7QUFFQSxjQUFRLE9BQU8sS0FBSyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFFckQsTUFBQUQsa0JBQWdCRCx3QkFBdUIsS0FBSyxHQUFHLFFBQVEsbUJBQW1CO0FBRTFFLE1BQUFDLGtCQUFnQkQsd0JBQXVCLEtBQUssR0FBRyxTQUFTO0FBQUEsUUFDdEQsUUFBUTtBQUFBLFFBQ1IsT0FBTztBQUFBLE1BQ1QsQ0FBQztBQUVELE1BQUFDLGtCQUFnQkQsd0JBQXVCLEtBQUssR0FBRyxZQUFZLFdBQVk7QUFJckUsWUFBSSxDQUFDLE1BQU07QUFBVztBQUV0QixZQUFJLHdCQUF3QixNQUFNLFVBQVUsc0JBQXNCLEdBQzlELFNBQVMsc0JBQXNCLFFBQy9CLFFBQVEsc0JBQXNCO0FBR2xDLFlBQUksTUFBTSxNQUFNLFdBQVcsVUFBVSxNQUFNLE1BQU0sVUFBVSxPQUFPO0FBQ2hFO0FBQUEsUUFDRjtBQUVBLGNBQU0sTUFBTSxTQUFTO0FBQUEsVUFDbkI7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDO0FBRUQsY0FBTSxTQUFTO0FBQUEsVUFDYjtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHdCQUF1QixLQUFLLEdBQUcsZ0JBQWdCLFdBQVk7QUFHekUsWUFBSSxZQUFZLE1BQU07QUFDdEIsY0FBTSxXQUFXLG1CQUFtQixXQUFXLE1BQU0sUUFBUTtBQUFBLE1BQy9ELENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU9FO0FBQUEsRUFDVCxFQUFFLFdBQVc7QUFFYixNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLE9BQU0sVUFBVTtBQUNuRSxRQUFJO0FBRUosUUFBSSxtQkFBbUI7QUFDckIsaUJBQVcsSUFBSSxPQUFPLGVBQWUsUUFBUTtBQUM3QyxlQUFTLFFBQVFBLEtBQUk7QUFBQSxJQUN2QjtBQUVBLFdBQU87QUFBQSxFQUNUOzs7QUVsR0EsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxxQkFBdUI7OztBQ2pCdkIsV0FBU0Msb0NBQW1DO0FBQUUsV0FBTztBQUFBLEVBQW1PO0FBWXhSLE1BQUksWUFBWSxTQUFTQyxXQUFVLE9BQU87QUFDeEMsV0FBTyxnQkFBZ0IsT0FBTyxPQUFPLG1JQUFtSSxFQUFFLE9BQU8sT0FBTyxvQkFBb0I7QUFBQSxFQUM5TTtBQUVPLE1BQUksa0JBQWtCLFNBQVNDLG1CQUFrQjtBQUN0RCxXQUFPO0FBQUEsRUFDVDtBQUNPLE1BQUksa0JBQWtCLFNBQVNDLGlCQUFnQixVQUFVO0FBQzlELFdBQU8scUVBQXFFLE9BQU8sU0FBUyxPQUFPLE1BQU0sT0FBTyxrQkFBa0I7QUFBQSxFQUNwSTtBQUNPLE1BQUksYUFBYSxTQUFTQyxZQUFXLFVBQVU7QUFDcEQsV0FBTyxzQkFBc0IsT0FBTyxTQUFTLEtBQUssT0FBTyxRQUFRLG1EQUFtRCxFQUFFLE9BQU8sZ0JBQWdCLEdBQUcsa0NBQWtDLEVBQUUsT0FBTyxhQUFhLFVBQVUsUUFBUSxHQUFHLFVBQVUsRUFBRSxPQUFPLGdCQUFnQixRQUFRLEdBQUcsYUFBYTtBQUFBLEVBQzFSO0FBRUEsTUFBSUMsUUFBTyxRQUF3QztBQUFBLElBQ2pELE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxFQUNWLElBQUk7QUFBQSxJQUNGLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLFVBQVVMO0FBQUEsRUFDWjtBQUVPLE1BQUksZ0JBQWdCLFNBQVNNLGVBQWNDLFFBQU87QUFDdkQsUUFBSSxXQUFXQSxPQUFNO0FBQ3JCLFdBQU87QUFBQSxNQUNMLFNBQXNCLG9CQUFJLFdBQVcsUUFBUSxHQUFHLHlFQUF5RTtBQUFBLE1BQ3pILFVBQVVGO0FBQUE7QUFBQSxNQUVWLFNBQXNCLG9CQUFJLFVBQVUsU0FBUyxPQUFPLFdBQVcsR0FBRyxpQkFBaUI7QUFBQSxNQUNuRixTQUFzQixvQkFBSSxVQUFVLFNBQVMsT0FBTyxXQUFXLEdBQUcsaUJBQWlCO0FBQUEsTUFDbkYsU0FBc0Isb0JBQUksVUFBVSxTQUFTLE9BQU8sV0FBVyxHQUFHLGlCQUFpQjtBQUFBLE1BQ25GLFFBQXFCLG9CQUFJLFVBQVUsU0FBUyxPQUFPLFVBQVUsR0FBRyxnQkFBZ0I7QUFBQSxNQUNoRixRQUFxQixvQkFBSSxVQUFVLFNBQVMsT0FBTyxVQUFVLEdBQUcsZ0JBQWdCO0FBQUEsTUFDaEYsU0FBc0Isb0JBQUksVUFBVSxTQUFTLE9BQU8sV0FBVyxHQUFHLGlCQUFpQjtBQUFBLE1BQ25GLE9BQW9CLG9CQUFJLFVBQVUsU0FBUyxPQUFPLEtBQUssR0FBRyxlQUFlO0FBQUEsTUFDekUsTUFBbUIsb0JBQUksVUFBVSxTQUFTLE9BQU8sSUFBSSxHQUFHLGNBQWM7QUFBQTtBQUFBLE1BRXRFLDJCQUF3QyxvQkFBSSxXQUFXLFFBQVEsS0FBSyxHQUFHLG9DQUFvQztBQUFBLE1BQzNHLHVCQUFvQyxvQkFBSSxXQUFXLGVBQWUsU0FBUyxLQUFLLEVBQUUsR0FBRyxnQ0FBZ0M7QUFBQSxJQUN2SDtBQUFBLEVBQ0Y7OztBQ3JEQSxXQUFTRyxVQUFRQyxTQUFRLGdCQUFnQjtBQUFFLFFBQUlDLFFBQU8sT0FBTyxLQUFLRCxPQUFNO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksVUFBVSxPQUFPLHNCQUFzQkEsT0FBTTtBQUFHLFVBQUksZ0JBQWdCO0FBQUUsa0JBQVUsUUFBUSxPQUFPLFNBQVUsS0FBSztBQUFFLGlCQUFPLE9BQU8seUJBQXlCQSxTQUFRLEdBQUcsRUFBRTtBQUFBLFFBQVksQ0FBQztBQUFBLE1BQUc7QUFBRSxNQUFBQyxNQUFLLEtBQUssTUFBTUEsT0FBTSxPQUFPO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUV4VixXQUFTQyxnQkFBYyxRQUFRO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFVBQUksU0FBUyxVQUFVLENBQUMsS0FBSyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFBRyxVQUFJLElBQUksR0FBRztBQUFFLFFBQUFILFVBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsVUFBQUksa0JBQWdCLFFBQVEsS0FBSyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUcsV0FBVyxPQUFPLDJCQUEyQjtBQUFFLGVBQU8saUJBQWlCLFFBQVEsT0FBTywwQkFBMEIsTUFBTSxDQUFDO0FBQUEsTUFBRyxPQUFPO0FBQUUsUUFBQUosVUFBUSxPQUFPLE1BQU0sQ0FBQyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsaUJBQU8sZUFBZSxRQUFRLEtBQUssT0FBTyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRXJoQixXQUFTSSxrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQUVoTixXQUFTQyxvQ0FBbUM7QUFBRSxXQUFPO0FBQUEsRUFBbU87QUFZalIsTUFBSSxXQUFXLFNBQVNDLFVBQVMsaUJBQWlCO0FBQ3ZELFFBQUksUUFBUSxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJO0FBQ2hGLFFBQUksVUFBVSxVQUFVLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSTtBQUNwRCxRQUFJLFdBQVcsZ0JBQWdCO0FBQy9CLFFBQUksK0JBQStCO0FBQUEsTUFDakMsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsSUFBSTtBQUFBLE1BQ0osR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLElBQ0w7QUFDQSxXQUFPSCxnQkFBY0EsZ0JBQWMsQ0FBQyxHQUFHLFlBQVksaUJBQWlCLDZCQUE2QixLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHO0FBQUEsTUFDdEgsWUFBWSxTQUFTLEtBQUssT0FBTyxTQUFTLEtBQUssTUFBTSxNQUFNO0FBQUEsTUFDM0QsT0FBTyxTQUFTLE9BQU87QUFBQSxJQUN6QixDQUFDO0FBQUEsRUFDSDtBQVVBLE1BQUlJLFFBQU8sUUFBd0M7QUFBQSxJQUNqRCxNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsRUFDVixJQUFJO0FBQUEsSUFDRixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixVQUFVQztBQUFBLEVBQ1o7QUFFTyxNQUFJLGlCQUFpQixTQUFTQyxnQkFBZSxpQkFBaUI7QUFDbkUsV0FBTztBQUFBLE1BQ0wsVUFBdUIsb0JBQUksaUJBQWlCLEdBQUcsb0JBQW9CLGdCQUFnQixTQUFTLEtBQUssR0FBRyxvQkFBb0I7QUFBQSxNQUN4SCxXQUFXRjtBQUFBO0FBQUEsTUFFWCxNQUFtQixvQkFBSSxTQUFTLGlCQUFpQixNQUFNLEdBQUcsZUFBZTtBQUFBLE1BQ3pFLEtBQWtCLG9CQUFJLFNBQVMsaUJBQWlCLEtBQUssR0FBRyxjQUFjO0FBQUEsTUFDdEUsSUFBaUIsb0JBQUksU0FBUyxpQkFBaUIsSUFBSSxHQUFHLGFBQWE7QUFBQSxNQUNuRSxHQUFnQixvQkFBSSxTQUFTLGlCQUFpQixHQUFHLEdBQUcsWUFBWTtBQUFBLE1BQ2hFLEdBQWdCLG9CQUFJLFNBQVMsaUJBQWlCLEdBQUcsR0FBRyxZQUFZO0FBQUEsTUFDaEUsR0FBZ0Isb0JBQUksU0FBUyxpQkFBaUIsR0FBRyxHQUFHLFlBQVk7QUFBQSxJQUNsRTtBQUFBLEVBQ0Y7OztBQ2xETyxNQUFJLDZCQUE2QjtBQUtqQyxNQUFJLFVBQVUsU0FBU0csU0FBUSxVQUFVO0FBQzlDLFFBQUksZUFBZSxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJO0FBQ3ZGLFdBQU87QUFBQSxNQUNMLE9BQU8sZUFBZSxZQUFZLFNBQVMsT0FBTztBQUFBLE1BQ2xELFlBQVksU0FBUyxLQUFLLE9BQU87QUFBQSxJQUNuQztBQUFBLEVBQ0Y7QUFFQSxNQUFJLGVBQWUsU0FBU0MsY0FBYSxpQkFBaUIsU0FBUztBQUNqRSxRQUFJLGVBQWUsWUFBWSxpQkFBaUIsS0FBSyxPQUFPLEdBQ3hELFdBQVcsYUFBYSxVQUN4QixhQUFhLGFBQWE7QUFFOUIsUUFBSSxXQUFXLGdCQUFnQjtBQUMvQixRQUFJLGNBQWMsUUFBUSxhQUN0QixlQUFlLFFBQVE7QUFDM0IsUUFBSSxpQkFBaUIsZ0JBQWdCLE9BQU8sR0FBRyxPQUFPLFlBQVksSUFBSSxJQUFJO0FBQzFFLFFBQUksV0FBVztBQUFBLE1BQ2IsSUFBSSxTQUFTLGlCQUFpQixLQUFLLE9BQU87QUFBQSxNQUMxQyxJQUFJLFNBQVMsaUJBQWlCLEtBQUssT0FBTztBQUFBLE1BQzFDLElBQUksU0FBUyxpQkFBaUIsS0FBSyxPQUFPO0FBQUEsTUFDMUMsSUFBSSxTQUFTLGlCQUFpQixNQUFNLE9BQU87QUFBQSxNQUMzQyxJQUFJLFNBQVMsaUJBQWlCLE9BQU8sT0FBTztBQUFBLE1BQzVDLElBQUksU0FBUyxpQkFBaUIsUUFBUSxPQUFPO0FBQUEsSUFDL0M7QUFFQSxRQUFJLGNBQWMsaUJBQWlCLFNBQVMsUUFBUSxnQkFBZ0I7QUFDcEUsUUFBSSxtQkFBbUIsR0FBRyxPQUFPLFdBQVcsU0FBUyxLQUFLLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSTtBQUNqRixRQUFJLHNCQUFzQixTQUFTLEtBQUssV0FBVztBQUNuRCxXQUFPLG9CQUFvQixPQUFPLFVBQVUsc0JBQXNCLEVBQUUsT0FBTyxZQUFZLGtDQUFrQyxFQUFFLE9BQU8sU0FBUyxHQUFHLFVBQVUsd0JBQXdCLEVBQUUsT0FBTyxTQUFTLEdBQUcsWUFBWSw2Q0FBNkMsRUFBRSxPQUFPLFdBQVcsaUJBQWlCLG1CQUFtQixHQUFHLHdDQUF3QyxFQUFFLE9BQU8sU0FBUyxHQUFHLFVBQVUsd0JBQXdCLEVBQUUsT0FBTyxTQUFTLEdBQUcsWUFBWSw0Q0FBNEMsRUFBRSxPQUFPLFdBQVcsY0FBYyxnQkFBZ0IsR0FBRyxtREFBbUQsRUFBRSxPQUFPLFdBQVcsaUJBQWlCLG1CQUFtQixHQUFHLGlEQUFpRCxFQUFFLE9BQU8sU0FBUyxHQUFHLFVBQVUsd0JBQXdCLEVBQUUsT0FBTyxTQUFTLEdBQUcsWUFBWSw0Q0FBNEMsRUFBRSxPQUFPLFdBQVcsY0FBYyxnQkFBZ0IsR0FBRyxtREFBbUQsRUFBRSxPQUFPLFdBQVcsaUJBQWlCLG1CQUFtQixHQUFHLGlEQUFpRCxFQUFFLE9BQU8sU0FBUyxHQUFHLFVBQVUsd0JBQXdCLEVBQUUsT0FBTyxTQUFTLEdBQUcsWUFBWSw0Q0FBNEMsRUFBRSxPQUFPLFdBQVcsY0FBYyxnQkFBZ0IsR0FBRyxtREFBbUQsRUFBRSxPQUFPLFdBQVcsaUJBQWlCLG1CQUFtQixHQUFHLGlEQUFpRCxFQUFFLE9BQU8sU0FBUyxHQUFHLFVBQVUsd0JBQXdCLEVBQUUsT0FBTyxTQUFTLEdBQUcsWUFBWSw0Q0FBNEMsRUFBRSxPQUFPLFdBQVcsY0FBYyxnQkFBZ0IsR0FBRyxtREFBbUQsRUFBRSxPQUFPLFdBQVcsaUJBQWlCLG1CQUFtQixHQUFHLGlEQUFpRCxFQUFFLE9BQU8sU0FBUyxHQUFHLFVBQVUsd0JBQXdCLEVBQUUsT0FBTyxTQUFTLEdBQUcsWUFBWSw0Q0FBNEMsRUFBRSxPQUFPLFdBQVcsY0FBYyxnQkFBZ0IsR0FBRyxtREFBbUQsRUFBRSxPQUFPLFdBQVcsaUJBQWlCLG1CQUFtQixHQUFHLHFHQUFxRyxFQUFFLE9BQU8sV0FBVyxpQkFBaUIsY0FBYyxHQUFHLHNDQUFzQyxFQUFFLE9BQU8sV0FBVyxlQUFlLGNBQWMsR0FBRyxrREFBa0QsRUFBRSxPQUFPLFVBQVUsb0JBQW9CLEVBQUUsT0FBTyxnQkFBZ0IsbUNBQW1DLEVBQUUsT0FBTyxXQUFXLGNBQWMsUUFBUSxHQUFHLDRFQUE0RSxFQUFFLE9BQU8sVUFBVSx3QkFBd0IsRUFBRSxPQUFPLFlBQVksb0VBQW9FLEVBQUUsT0FBTyxZQUFZLGlCQUFpQixNQUFNLE9BQU8sRUFBRSxVQUFVLGtCQUFrQixFQUFFLE9BQU8sU0FBUyxPQUFPLE1BQU0sNENBQTRDLEVBQUUsT0FBTyxZQUFZLGlCQUFpQixLQUFLLE9BQU8sRUFBRSxVQUFVLGdFQUFnRSxFQUFFLE9BQU8sZ0JBQWdCLGdJQUFnSSxFQUFFO0FBQUE7QUFBQSxNQUNwaUcsaUJBQWlCLE1BQU0sc0JBQXNCLE9BQU8sV0FBVyxrQkFBa0IsU0FBUyxLQUFLLEVBQUUsR0FBRyxrRkFBa0YsRUFBRSxPQUFPLFdBQVcsYUFBYSxTQUFTLEtBQUssQ0FBQyxHQUFHLFVBQVUsRUFBRSxPQUFPLG9CQUFvQixRQUFRLEdBQUcsNkRBQTZELEVBQUUsT0FBTyxXQUFXLGlCQUFpQixHQUFHLE9BQU8sU0FBUyxPQUFPLE1BQU0sTUFBTSxTQUFTLEVBQUUsT0FBTyxTQUFTLE9BQU8sSUFBSSxDQUFDLEdBQUcscUNBQXFDLEVBQUUsT0FBTyxXQUFXLFVBQVUsU0FBUyxLQUFLLEdBQUcsR0FBRyxVQUFVLEVBQUUsT0FBTyxXQUFXLFFBQVEsQ0FBQyxHQUFHLFVBQVUsRUFBRSxPQUFPLFdBQVcsU0FBUyxNQUFNLEdBQUcsU0FBUyxJQUFJO0FBQUEsTUFBSTtBQUFBLElBQU07QUFBQSxFQUN2cEI7QUFNTyxNQUFJLGdCQUFnQixTQUFTQyxlQUFjLGlCQUFpQjtBQUNqRSxRQUFJLFdBQVcsZ0JBQWdCO0FBQy9CLFdBQU87QUFBQSxNQUNMLFNBQXNCLG9CQUFJLFFBQVEsVUFBVSxJQUFJLEdBQUcsK0JBQStCLFdBQVcsUUFBUSxHQUFHLHdCQUF3QixXQUFXLGFBQWEsTUFBTSxHQUFHLGtIQUFrSCxvQkFBb0IsUUFBUSxHQUFHLEtBQUssV0FBVyxxQkFBcUIsTUFBTSxHQUFHLGlCQUFpQixTQUFTLEtBQUssYUFBYSwwREFBMEQsV0FBVyxpQkFBaUIsR0FBRyxHQUFHLG9EQUFvRCxXQUFXLFVBQVUsU0FBUyxPQUFPLE1BQU0sS0FBSyxHQUFHLEtBQUssV0FBVyxTQUFTLEtBQUssR0FBRyxLQUFLLFdBQVcsUUFBUSxLQUFLLEdBQUcsS0FBSyxXQUFXLFNBQVMsS0FBSyxHQUFHLGdCQUFnQixTQUFTLE9BQU8sV0FBVyxlQUFlLFdBQVcsT0FBTyxHQUFHLEdBQUcsY0FBYyxXQUFXLFVBQVUsR0FBRyxHQUFHLFVBQVUsU0FBUyxpQkFBaUIsR0FBRyxHQUFHLFNBQVMsU0FBUyxpQkFBaUIsR0FBRyxHQUFHLFNBQVMsU0FBUyxpQkFBaUIsR0FBRyxHQUFHLFlBQVksU0FBUyxpQkFBaUIsSUFBSSxHQUFHLFNBQVMsU0FBUyxpQkFBaUIsS0FBSyxHQUFHLFNBQVMsU0FBUyxpQkFBaUIsTUFBTSxHQUFHLCtIQUErSCxtQkFBbUIsaUJBQWlCLFNBQVMsR0FBRyxXQUFXLFNBQVMsT0FBTyxNQUFNLCtGQUErRixXQUFXLGlCQUFpQixjQUFjLEdBQUcsaURBQWlELFdBQVcsb0JBQW9CLFNBQVMsS0FBSyxHQUFHLEdBQUcsS0FBSyxXQUFXLHNCQUFzQixTQUFTLEtBQUssRUFBRSxHQUFHLDBCQUEwQixTQUFTLE9BQU8sTUFBTSxNQUFNLFdBQVcsU0FBUyxPQUFPLE1BQU0sd0JBQXdCLFNBQVMsT0FBTyxPQUFPLE9BQU8sd0JBQXdCO0FBQUEsTUFDMXNELGtCQUErQixvQkFBSSxXQUFXLGFBQWEsMEJBQTBCLEdBQUcsMkJBQTJCO0FBQUE7QUFBQSxNQUVuSCxHQUFnQixvQkFBSSxhQUFhLGlCQUFpQjtBQUFBLFFBQ2hELGFBQWE7QUFBQSxRQUNiLGFBQWE7QUFBQSxNQUNmLENBQUMsR0FBRyxZQUFZO0FBQUEsTUFDaEIsR0FBZ0Isb0JBQUksYUFBYSxpQkFBaUI7QUFBQSxRQUNoRCxhQUFhO0FBQUEsUUFDYixhQUFhO0FBQUEsTUFDZixDQUFDLEdBQUcsWUFBWTtBQUFBLE1BQ2hCLElBQWlCLG9CQUFJLGFBQWEsaUJBQWlCO0FBQUEsUUFDakQsYUFBYTtBQUFBLFFBQ2IsYUFBYTtBQUFBLE1BQ2YsQ0FBQyxHQUFHLGFBQWE7QUFBQSxNQUNqQixVQUF1QixvQkFBSSxhQUFhLGlCQUFpQjtBQUFBLFFBQ3ZELGFBQWE7QUFBQSxNQUNmLENBQUMsR0FBRyxtQkFBbUI7QUFBQSxJQUN6QjtBQUFBLEVBQ0Y7OztBQzVEQSxNQUFBQyxrQkFBc0M7QUFDdEMsTUFBQUMscUJBQXNCOzs7QUNwQnRCLFdBQVNDLG9DQUFtQztBQUFFLFdBQU87QUFBQSxFQUFtTztBQVd4UixNQUFJQyxRQUFPLFFBQXdDO0FBQUEsSUFDakQsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLEVBQ1YsSUFBSTtBQUFBLElBQ0YsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsVUFBVUQ7QUFBQSxFQUNaO0FBRU8sTUFBSSxxQkFBcUIsU0FBU0Usb0JBQW1CQyxRQUFPO0FBQ2pFLFFBQUksV0FBV0EsT0FBTTtBQUNyQixXQUFPO0FBQUEsTUFDTCxjQUEyQixvQkFBSSxzQkFBc0I7QUFBQSxNQUNyRCxTQUFzQixvQkFBSSxVQUFVLFNBQVMsT0FBTyxNQUFNLGtCQUFrQjtBQUFBLE1BQzVFLFNBQXNCLG9CQUFJLFVBQVUsU0FBUyxPQUFPLGFBQWEsa0JBQWtCO0FBQUEsTUFDbkYsU0FBc0Isb0JBQUksVUFBVSxTQUFTLE9BQU8sYUFBYSxrQkFBa0I7QUFBQSxNQUNuRixRQUFxQixvQkFBSSxVQUFVLFNBQVMsT0FBTyxZQUFZLGlCQUFpQjtBQUFBLE1BQ2hGLFFBQXFCLG9CQUFJLFVBQVUsU0FBUyxPQUFPLFlBQVksaUJBQWlCO0FBQUEsTUFDaEYsU0FBc0Isb0JBQUksVUFBVSxTQUFTLE9BQU8sYUFBYSxrQkFBa0I7QUFBQSxNQUNuRixPQUFvQixvQkFBSSxVQUFVLFNBQVMsT0FBTyxPQUFPLDBCQUEwQjtBQUFBLE1BQ25GLFNBQVNGO0FBQUEsTUFDVCxhQUEwQixvQkFBSSxxQkFBcUI7QUFBQTtBQUFBLElBRXJEO0FBQUEsRUFDRjs7O0FEbkNBLE1BQUlHLGVBQVksQ0FBQyxZQUFZLFNBQVMsYUFBYSxnQkFBZ0IsT0FBTztBQUUxRSxXQUFTQyxVQUFRQyxTQUFRLGdCQUFnQjtBQUFFLFFBQUlDLFFBQU8sT0FBTyxLQUFLRCxPQUFNO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksVUFBVSxPQUFPLHNCQUFzQkEsT0FBTTtBQUFHLFVBQUksZ0JBQWdCO0FBQUUsa0JBQVUsUUFBUSxPQUFPLFNBQVUsS0FBSztBQUFFLGlCQUFPLE9BQU8seUJBQXlCQSxTQUFRLEdBQUcsRUFBRTtBQUFBLFFBQVksQ0FBQztBQUFBLE1BQUc7QUFBRSxNQUFBQyxNQUFLLEtBQUssTUFBTUEsT0FBTSxPQUFPO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUV4VixXQUFTQyxnQkFBYyxRQUFRO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFVBQUksU0FBUyxVQUFVLENBQUMsS0FBSyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFBRyxVQUFJLElBQUksR0FBRztBQUFFLFFBQUFILFVBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsVUFBQUksa0JBQWdCLFFBQVEsS0FBSyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUcsV0FBVyxPQUFPLDJCQUEyQjtBQUFFLGVBQU8saUJBQWlCLFFBQVEsT0FBTywwQkFBMEIsTUFBTSxDQUFDO0FBQUEsTUFBRyxPQUFPO0FBQUUsUUFBQUosVUFBUSxPQUFPLE1BQU0sQ0FBQyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsaUJBQU8sZUFBZSxRQUFRLEtBQUssT0FBTyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRXJoQixXQUFTSSxrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQUVoTixXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWUzUyxNQUFJQyxVQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsVUFBVSxVQUFVLFdBQVcsU0FBUyxTQUFTO0FBQ2hHLE1BQUksZUFBZSxTQUFTQyxjQUFhQyxRQUFNO0FBQ3BELFFBQUksV0FBV0EsT0FBSyxVQUNoQixhQUFhQSxPQUFLLE9BQ2xCLFFBQVEsZUFBZSxTQUFTLFlBQVksWUFDNUMsaUJBQWlCQSxPQUFLLFdBQ3RCLFlBQVksbUJBQW1CLFNBQVMsU0FBUyxnQkFDakQsb0JBQW9CQSxPQUFLLGNBQ3pCQyxpQkFBZSxzQkFBc0IsU0FBUyxRQUFRLG1CQUN0RCxRQUFRRCxPQUFLLE9BQ2IsT0FBT0osNEJBQXlCSSxRQUFNVixZQUFTO0FBRW5ELFFBQUlZLGdCQUFlSixRQUFPLFNBQVMsS0FBSztBQUN4QyxRQUFJLFdBQVcsWUFBWTtBQUMzQixRQUFJSyxVQUFTLG1CQUFtQixRQUFRO0FBQ3hDLFFBQUksWUFBWSxDQUFDQSxRQUFPLGNBQWNELGdCQUFlQyxRQUFPLEtBQUssSUFBSUEsUUFBTyxXQUFXO0FBSXZGLFFBQUksZUFBZSxDQUFDRCxnQkFBZVIsZ0JBQWM7QUFBQSxNQUMvQztBQUFBLElBQ0YsR0FBRyxLQUFLLElBQUlBLGdCQUFjLENBQUMsR0FBRyxLQUFLO0FBRW5DLFFBQUksUUFBUUEsZ0JBQWM7QUFBQSxNQUN4QixLQUFLO0FBQUEsTUFDTCxPQUFPO0FBQUEsSUFDVCxHQUFHLElBQUk7QUFFUCxRQUFrQixvREFBZSxRQUFRLEtBQUtPLGdCQUFjO0FBQzFELFVBQUksZ0JBQWdCUCxnQkFBY0EsZ0JBQWMsQ0FBQyxHQUFHLFNBQVMsTUFBTSxLQUFLLEdBQUcsWUFBWTtBQUV2RixhQUFPLG9CQUFvQixVQUFVQSxnQkFBY0EsZ0JBQWMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFBQSxRQUMvRSxPQUFPO0FBQUEsTUFDVCxDQUFDLENBQUM7QUFBQSxJQUNKLE9BQU87QUFDTCxVQUFJVSxjQUFZO0FBQ2hCLGFBQU8sSUFBY0EsYUFBVyxPQUFPLFFBQVE7QUFBQSxJQUNqRDtBQUFBLEVBQ0Y7QUFDQSxlQUFhLFlBQVk7QUFBQSxJQUN2QixXQUFXLG1CQUFBQyxRQUFVO0FBQUEsSUFDckIsY0FBYyxtQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixtQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzVCLE9BQU8sbUJBQUFBLFFBQVUsVUFBVSxDQUFDLG1CQUFBQSxRQUFVLElBQUksWUFBWSxtQkFBQUEsUUFBVSxJQUFJLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBSy9FLFdBQVcsbUJBQUFBLFFBQVUsTUFBTSxDQUFDLE9BQU8sTUFBTSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU0xQyxjQUFjLG1CQUFBQSxRQUFVO0FBQUEsRUFDMUI7OztBRWpFQSxNQUFBQyxrQkFBc0M7QUFDdEMsTUFBQUMsc0JBQXNCOzs7QUNYZixNQUFJLHFCQUFxQixTQUFTQyxzQkFBcUI7QUFDNUQsV0FBTztBQUFBLE1BQ0wsY0FBMkIsb0JBQUksc0JBQXNCO0FBQUEsTUFDckQsTUFBbUIsb0JBQUksb0JBQW9CLE1BQU0sR0FBRyxlQUFlO0FBQUEsTUFDbkUsT0FBb0Isb0JBQUksb0JBQW9CLE9BQU8sR0FBRyxnQkFBZ0I7QUFBQSxNQUN0RSxRQUFxQixvQkFBSSxvQkFBb0IsUUFBUSxHQUFHLGlCQUFpQjtBQUFBLElBQzNFO0FBQUEsRUFDRjs7O0FEaEJBLE1BQUlDLGVBQVksQ0FBQyxZQUFZLGFBQWEsY0FBYztBQUV4RCxXQUFTQyxVQUFRQyxTQUFRLGdCQUFnQjtBQUFFLFFBQUlDLFFBQU8sT0FBTyxLQUFLRCxPQUFNO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksVUFBVSxPQUFPLHNCQUFzQkEsT0FBTTtBQUFHLFVBQUksZ0JBQWdCO0FBQUUsa0JBQVUsUUFBUSxPQUFPLFNBQVUsS0FBSztBQUFFLGlCQUFPLE9BQU8seUJBQXlCQSxTQUFRLEdBQUcsRUFBRTtBQUFBLFFBQVksQ0FBQztBQUFBLE1BQUc7QUFBRSxNQUFBQyxNQUFLLEtBQUssTUFBTUEsT0FBTSxPQUFPO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUV4VixXQUFTQyxnQkFBYyxRQUFRO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFVBQUksU0FBUyxVQUFVLENBQUMsS0FBSyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFBRyxVQUFJLElBQUksR0FBRztBQUFFLFFBQUFILFVBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsVUFBQUksa0JBQWdCLFFBQVEsS0FBSyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUcsV0FBVyxPQUFPLDJCQUEyQjtBQUFFLGVBQU8saUJBQWlCLFFBQVEsT0FBTywwQkFBMEIsTUFBTSxDQUFDO0FBQUEsTUFBRyxPQUFPO0FBQUUsUUFBQUosVUFBUSxPQUFPLE1BQU0sQ0FBQyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsaUJBQU8sZUFBZSxRQUFRLEtBQUssT0FBTyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRXJoQixXQUFTSSxrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQUVoTixXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWUzUyxNQUFJLGVBQWUsU0FBU0MsY0FBYUMsUUFBTTtBQUNwRCxRQUFJLFdBQVdBLE9BQUssVUFDaEIsaUJBQWlCQSxPQUFLLFdBQ3RCLFlBQVksbUJBQW1CLFNBQVMsU0FBUyxnQkFDakQsb0JBQW9CQSxPQUFLLGNBQ3pCQyxpQkFBZSxzQkFBc0IsU0FBUyxRQUFRLG1CQUN0RCxPQUFPQyw0QkFBeUJGLFFBQU1HLFlBQVM7QUFFbkQsUUFBSUMsVUFBUyxtQkFBbUI7QUFDaEMsUUFBSSxZQUFZLENBQUNBLFFBQU8sY0FBY0EsUUFBTyxTQUFTLENBQUM7QUFFdkQsUUFBSSxRQUFRQyxnQkFBYztBQUFBLE1BQ3hCLEtBQUs7QUFBQSxJQUNQLEdBQUcsSUFBSTtBQUVQLFFBQWtCLG9EQUFlLFFBQVEsS0FBS0osZ0JBQWM7QUFDMUQsYUFBTyxvQkFBb0IsVUFBVSxLQUFLO0FBQUEsSUFDNUMsT0FBTztBQUNMLGFBQU8sSUFBYyxPQUFPLE9BQU8sUUFBUTtBQUFBLElBQzdDO0FBQUEsRUFDRjtBQUNBLGVBQWEsWUFBWTtBQUFBLElBQ3ZCLFdBQVcsb0JBQUFLLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDNUIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLEVBQzFCOzs7QU56REEsTUFBSUMsZUFBWSxDQUFDLFFBQVEsU0FBUyxRQUFRLGFBQWEsWUFBWSxXQUFXO0FBRTlFLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBa0IzUyxNQUFJLFVBQVUsU0FBU0MsU0FBUUMsUUFBTTtBQUMxQyxRQUFJLFlBQVlBLE9BQUssTUFDakJDLFFBQU8sY0FBYyxTQUFTLE1BQU0sV0FDcEMsUUFBUUQsT0FBSyxPQUNiLFlBQVlBLE9BQUssTUFDakIsT0FBTyxjQUFjLFNBQVMsT0FBTyxXQUNyQyxZQUFZQSxPQUFLLFdBQ2pCLFdBQVdBLE9BQUssVUFDaEIsWUFBWUEsT0FBSyxXQUNqQixPQUFPRSw0QkFBeUJGLFFBQU1HLFlBQVM7QUFFbkQsUUFBSSxXQUFXLFlBQVk7QUFDM0IsUUFBSUMsVUFBUyxjQUFjLFFBQVE7QUFDbkMsUUFBSSxZQUFZLENBQUNBLFFBQU8sU0FBUyxDQUFDLE9BQU9BLFFBQU8sbUJBQW1CLFFBQVdBLFFBQU9ILEtBQUksQ0FBQztBQUMxRixRQUFJLGNBQVUsbUJBQUFJLFNBQVcsV0FBVyxTQUFTO0FBRTdDLFFBQUksT0FBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxNQUN2QyxLQUFLO0FBQUEsTUFDTCxXQUFXO0FBQUEsSUFDYixHQUFHLElBQUksR0FBRyxRQUFRO0FBRWxCLFFBQUksT0FBTztBQUNULGFBQU8sSUFBYyxjQUFjO0FBQUEsUUFDakM7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLGNBQWM7QUFBQSxNQUNoQixHQUFHLElBQUk7QUFBQSxJQUNUO0FBRUEsUUFBSSxXQUFXO0FBQ2IsYUFBTyxJQUFjLGNBQWM7QUFBQSxRQUNqQztBQUFBLFFBQ0EsV0FBVztBQUFBLFFBQ1gsY0FBYztBQUFBLE1BQ2hCLEdBQUcsSUFBSTtBQUFBLElBQ1Q7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUNBLFVBQVEsWUFBWTtBQUFBLElBQ2xCLFdBQVcsb0JBQUFDLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDNUIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3JCLE1BQU0sb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtoQixPQUFPLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxJQUFJLFlBQVksb0JBQUFBLFFBQVUsSUFBSSxVQUFVLENBQUM7QUFBQSxJQUMvRSxNQUFNLG9CQUFBQSxRQUFVO0FBQUEsRUFDbEI7OztBUTFEQSxNQUFBQyxrQkFBa0I7QUFDbEIsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHFCQUF1QjtBQXZCdkIsTUFBSUMsZUFBWSxDQUFDLFlBQVksYUFBYSxZQUFZLFlBQVksWUFBWSxTQUFTLFFBQVEsU0FBUyxjQUFjLFlBQVksYUFBYSxRQUFRLFVBQVUsT0FBTyxRQUFRLGFBQWEsZ0JBQWdCLGFBQWEsWUFBWTtBQUV0TyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyxVQUFRQyxTQUFRLGdCQUFnQjtBQUFFLFFBQUlDLFFBQU8sT0FBTyxLQUFLRCxPQUFNO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksVUFBVSxPQUFPLHNCQUFzQkEsT0FBTTtBQUFHLFVBQUksZ0JBQWdCO0FBQUUsa0JBQVUsUUFBUSxPQUFPLFNBQVUsS0FBSztBQUFFLGlCQUFPLE9BQU8seUJBQXlCQSxTQUFRLEdBQUcsRUFBRTtBQUFBLFFBQVksQ0FBQztBQUFBLE1BQUc7QUFBRSxNQUFBQyxNQUFLLEtBQUssTUFBTUEsT0FBTSxPQUFPO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUV4VixXQUFTQyxnQkFBYyxRQUFRO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFVBQUksU0FBUyxVQUFVLENBQUMsS0FBSyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFBRyxVQUFJLElBQUksR0FBRztBQUFFLFFBQUFILFVBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsVUFBQUksa0JBQWdCLFFBQVEsS0FBSyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUcsV0FBVyxPQUFPLDJCQUEyQjtBQUFFLGVBQU8saUJBQWlCLFFBQVEsT0FBTywwQkFBMEIsTUFBTSxDQUFDO0FBQUEsTUFBRyxPQUFPO0FBQUUsUUFBQUosVUFBUSxPQUFPLE1BQU0sQ0FBQyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsaUJBQU8sZUFBZSxRQUFRLEtBQUssT0FBTyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRXJoQixXQUFTSSxrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQUVoTixXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWlCbFQsTUFBSUMsdUJBQXNCO0FBQUEsSUFDeEIsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLElBQ1AsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLEVBQ1g7QUFDTyxNQUFJQyxVQUFTLE9BQU9ELG9CQUFtQjtBQUM5QyxNQUFJRSxzQkFBcUI7QUFBQSxJQUN2QixJQUFJO0FBQUEsSUFDSixHQUFHO0FBQUEsSUFDSCxHQUFHO0FBQUEsRUFDTDtBQUNPLE1BQUlDLFNBQVEsT0FBT0QsbUJBQWtCO0FBQzVDLE1BQUksMEJBQTBCO0FBQUEsSUFDNUIsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLElBQ1AsTUFBTTtBQUFBLEVBQ1I7QUFDTyxNQUFJLGNBQWMsT0FBTyx1QkFBdUI7QUFNaEQsTUFBSSxpQkFBaUIsU0FBU0UsZ0JBQWVDLFFBQU07QUFDeEQsUUFBSSxXQUFXQSxPQUFLLFVBQ2hCLFlBQVlBLE9BQUssV0FDakIsV0FBV0EsT0FBSyxVQUNoQixnQkFBZ0JBLE9BQUssVUFDckIsV0FBVyxrQkFBa0IsU0FBUyxTQUFTLGVBQy9DLGdCQUFnQkEsT0FBSyxVQUNyQkMsWUFBVyxrQkFBa0IsU0FBUyxNQUFNLGVBQzVDLGFBQWFELE9BQUssT0FDbEIsUUFBUSxlQUFlLFNBQVMsWUFBWSxZQUM1QyxZQUFZQSxPQUFLLE1BQ2pCRSxRQUFPLGNBQWMsU0FBUyxNQUFNLFdBQ3BDLFFBQVFGLE9BQUssT0FDYixjQUFjQSxPQUFLLFlBQ25CLFlBQVlBLE9BQUssVUFDakIsWUFBWUEsT0FBSyxXQUNqQixPQUFPQSxPQUFLLE1BQ1osU0FBU0EsT0FBSyxRQUNkLE1BQU1BLE9BQUssS0FDWCxZQUFZQSxPQUFLLE1BQ2pCLE9BQU8sY0FBYyxTQUFTLFdBQVcsV0FDekMsWUFBWUEsT0FBSyxXQUNqQixlQUFlQSxPQUFLLGNBQ3BCLFlBQVlBLE9BQUssV0FDakIsYUFBYUEsT0FBSyxZQUNsQixPQUFPUCw0QkFBeUJPLFFBQU1kLFlBQVM7QUFFbkQsUUFBSSxjQUFjLENBQUMsUUFBUSxhQUFhLElBQUk7QUFDNUMsUUFBSSxXQUFXLGFBQWEsQ0FBQztBQUM3QixRQUFJLGFBQWEsZUFBZSxDQUFDO0FBRWpDLFFBQUksbUJBQW1CLGFBQWEsY0FBYztBQUNsRCxRQUFJLGNBQVUsbUJBQUFpQixTQUFXLGtCQUFrQlIscUJBQW9CLEtBQUssR0FBR08sUUFBT0wsb0JBQW1CSyxLQUFJLElBQUksTUFBTSxRQUFRLHdCQUF3QixLQUFLLElBQUksTUFBTTtBQUFBLE1BQzVKLDZCQUE2QjtBQUFBLElBQy9CLEdBQUcsU0FBUztBQUNaLFFBQUksd0JBQW9CLG1CQUFBQyxTQUFXLDJCQUEyQixnQkFBZ0IsYUFBYSxTQUFTO0FBQ3BHLFFBQUkscUJBQWlCLG1CQUFBQSxTQUFXLHdCQUF3QixhQUFhLFVBQVUsU0FBUztBQUV4RixRQUFJLFlBQVksSUFBYyw0QkFBa0JoQixZQUFTO0FBQUEsTUFDdkQ7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsVUFBVWUsVUFBUyxPQUFPLE1BQU1EO0FBQUEsTUFDaEMsV0FBV1YsZ0JBQWNBLGdCQUFjLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHO0FBQUEsUUFDekQsV0FBVztBQUFBLE1BQ2IsQ0FBQztBQUFBLElBQ0gsR0FBRyxjQUFjO0FBQUE7QUFBQSxNQUVmLFdBQVc7QUFBQSxJQUNiLENBQUMsR0FBRyxRQUFRO0FBSVosUUFBSSxRQUFRLENBQUMsa0JBQWtCO0FBQzdCLFVBQUksWUFBWSxzQkFBc0I7QUFBQSxRQUNwQztBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRixDQUFDO0FBQ0QsYUFBTyxJQUFjLEtBQUtKLFlBQVM7QUFBQSxRQUNqQyxXQUFXO0FBQUEsUUFDWDtBQUFBLFFBQ0E7QUFBQSxRQUNBLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxNQUNQLEdBQUcsSUFBSSxHQUFHLFNBQVM7QUFBQSxJQUNyQjtBQUVBLFdBQU8sSUFBYyxVQUFVQSxZQUFTO0FBQUEsTUFDdEMsVUFBVTtBQUFBLE1BQ1YsV0FBVztBQUFBLE1BQ1g7QUFBQSxNQUNBLEtBQUs7QUFBQSxNQUNMLGdCQUFnQjtBQUFBLElBQ2xCLEdBQUcsSUFBSSxHQUFHLFNBQVM7QUFBQSxFQUNyQjtBQUNBLGlCQUFlLFlBQVk7QUFBQSxJQUN6QixNQUFNLG9CQUFBaUIsUUFBVTtBQUFBLElBQ2hCLFNBQVMsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVNuQixPQUFPLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxXQUFXLFVBQVUsUUFBUSxTQUFTLFdBQVcsU0FBUyxDQUFDO0FBQUEsSUFDbkYsTUFBTSxvQkFBQUEsUUFBVSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU3RDLE9BQU8sb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFFBQVEsU0FBUyxNQUFNLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVNoRCxZQUFZLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTdEIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVdyQixZQUFZLG9CQUFBQSxRQUFVO0FBQUEsSUFDdEIsUUFBUSxvQkFBQUEsUUFBVTtBQUFBLElBQ2xCLEtBQUssb0JBQUFBLFFBQVU7QUFBQSxJQUNmLE1BQU0sb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFVBQVUsUUFBUSxDQUFDO0FBQUEsSUFDMUMsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt4QixVQUFVLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsaUJBQWlCLGNBQWMsdUJBQXVCLFlBQVksYUFBYSxTQUFTLGdCQUFnQixjQUFjLFVBQVUsWUFBWSxnQkFBZ0IsUUFBUSxhQUFhLGFBQWEsY0FBYyxXQUFXLGNBQWMsWUFBWSxZQUFZLGdCQUFnQixVQUFVLFFBQVEsYUFBYSxRQUFRLG1CQUFtQixpQkFBaUIsVUFBVSxjQUFjLFNBQVMsU0FBUyxPQUFPLFlBQVksWUFBWSxhQUFhLFlBQVksU0FBUyx1QkFBdUIsU0FBUyxxQkFBcUIsU0FBUyxnQkFBZ0IsZUFBZSxjQUFjLFdBQVcsV0FBVyxTQUFTLFdBQVcsV0FBVyxjQUFjLGFBQWEsbUJBQW1CLHdCQUF3QixtQkFBbUIsb0JBQW9CLHNCQUFzQixvQkFBb0IsUUFBUSxpQkFBaUIscUJBQXFCLHdCQUF3Qix1QkFBdUIseUJBQXlCLFNBQVMsOEJBQThCLHdCQUF3QixjQUFjLFlBQVksT0FBTyxnQkFBZ0Isa0JBQWtCLFlBQVksV0FBVyxlQUFlLGVBQWUsWUFBWSxnQkFBZ0IsaUJBQWlCLGFBQWEsT0FBTyxtQkFBbUIsb0JBQW9CLFlBQVkscUJBQXFCLG1CQUFtQixvQkFBb0IsY0FBYyxtQkFBbUIsbUJBQW1CLGlCQUFpQiw4QkFBOEIsNEJBQTRCLGlCQUFpQixnQkFBZ0IseUJBQXlCLHlCQUF5Qix1QkFBdUIseUJBQXlCLHdCQUF3QixzQkFBc0IsY0FBYyxxQkFBcUIsNEJBQTRCLDZCQUE2Qix5QkFBeUIsMEJBQTBCLGNBQWMsZ0JBQWdCLGVBQWUsbUJBQW1CLGNBQWMsdUJBQXVCLFNBQVMsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsY0FBYyxnQkFBZ0IsT0FBTyxhQUFhLGFBQWEsZUFBZSxXQUFXLGVBQWUsVUFBVSxRQUFRLFlBQVksUUFBUSxlQUFlLGdCQUFnQixxQkFBcUIsY0FBYyxhQUFhLGlCQUFpQixjQUFjLGtCQUFrQixZQUFZLFFBQVEsVUFBVSxXQUFXLFNBQVMsUUFBUSxrQkFBa0IsWUFBWSxRQUFRLFdBQVcsU0FBUyxnQkFBZ0IsV0FBVyxRQUFRLFFBQVEsYUFBYSxTQUFTLGdCQUFnQixjQUFjLGFBQWEsY0FBYyxzQkFBc0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGtCQUFrQixnQkFBZ0IsaUJBQWlCLGVBQWUsV0FBVyxVQUFVLE1BQU0sWUFBWSxZQUFZLGVBQWUsY0FBYyxlQUFlLFlBQVksa0JBQWtCLGlCQUFpQixVQUFVLFdBQVcsYUFBYSxjQUFjLGNBQWMsYUFBYSxRQUFRLFFBQVEsV0FBVyxRQUFRLFlBQVksV0FBVyxlQUFlLGlCQUFpQixjQUFjLGlCQUFpQixhQUFhLGlCQUFpQixhQUFhLHlCQUF5QixZQUFZLGFBQWEsdUJBQXVCLFlBQVksbUJBQW1CLGlCQUFpQixjQUFjLGtCQUFrQixlQUFlLG9CQUFvQixxQkFBcUIsd0JBQXdCLFlBQVksV0FBVyxlQUFlLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSxXQUFXLGVBQWUsYUFBYSxjQUFjLGtCQUFrQixlQUFlLGdCQUFnQixZQUFZLGlCQUFpQixlQUFlLGVBQWUsYUFBYSxhQUFhLHFCQUFxQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsYUFBYSxnQkFBZ0Isa0JBQWtCLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSx1QkFBdUIsV0FBVyxrQkFBa0IsY0FBYyxpQkFBaUIsa0JBQWtCLGlCQUFpQixzQkFBc0IsVUFBVSwwQkFBMEIsb0JBQW9CLG1CQUFtQixpQkFBaUIsYUFBYSxVQUFVLFFBQVEsWUFBWSxZQUFZLGFBQWEsVUFBVSxTQUFTLGlCQUFpQixjQUFjLFlBQVksU0FBUyxpQkFBaUIsdUJBQXVCLFVBQVUsaUJBQWlCLFFBQVEsYUFBYSxVQUFVLFFBQVEsZUFBZSxVQUFVLFdBQVcsVUFBVSx1QkFBdUIsV0FBVyxpQkFBaUIsY0FBYyxlQUFlLGFBQWEsV0FBVyxTQUFTLFdBQVcsVUFBVSxXQUFXLE9BQU8sYUFBYSxlQUFlLFFBQVEsY0FBYyxRQUFRLGdCQUFnQixzQkFBc0IsVUFBVSxRQUFRLG9CQUFvQixTQUFTLHFCQUFxQixXQUFXLGlCQUFpQixZQUFZLGdCQUFnQixhQUFhLFFBQVEsbUJBQW1CLFNBQVMsVUFBVSxxQkFBcUIsd0JBQXdCLGVBQWUsa0JBQWtCLDBCQUEwQiwwQkFBMEIsaUJBQWlCLFNBQVMsU0FBUyxhQUFhLFlBQVksWUFBWSxhQUFhLFVBQVUsWUFBWSxhQUFhLFVBQVUsYUFBYSxrQkFBa0IsY0FBYyxtQkFBbUIsa0JBQWtCLG1CQUFtQixpQkFBaUIsa0JBQWtCLFNBQVMsUUFBUSxjQUFjLGFBQWEsV0FBVyxVQUFVLGFBQWEsT0FBTyxlQUFlLFdBQVcsdUJBQXVCLHdCQUF3QixzQkFBc0IsbUJBQW1CLE9BQU8sUUFBUSxlQUFlLFlBQVksZUFBZSxlQUFlLGNBQWMsWUFBWSxTQUFTLFVBQVUsVUFBVSx1QkFBdUIsYUFBYSxRQUFRLGNBQWMsU0FBUyxpQkFBaUIsVUFBVSxlQUFlLFdBQVcsa0JBQWtCLG9CQUFvQiwyQkFBMkIsa0JBQWtCLHlCQUF5QixZQUFZLFdBQVcsV0FBVyxvQkFBb0IsZ0JBQWdCLGFBQWEsVUFBVSxZQUFZLGVBQWUsV0FBVyxlQUFlLFdBQVcsb0JBQW9CLGdCQUFnQixjQUFjLFlBQVksb0JBQW9CLHNCQUFzQixVQUFVLGNBQWMsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IsY0FBYyw0QkFBNEIsaUJBQWlCLGFBQWEsb0JBQW9CLGdCQUFnQixhQUFhLG1CQUFtQixjQUFjLGtCQUFrQixjQUFjLGFBQWEsa0JBQWtCLGlCQUFpQixZQUFZLGtCQUFrQixrQkFBa0IsV0FBVyxhQUFhLFlBQVksZ0JBQWdCLGVBQWUsc0JBQXNCLG9CQUFvQixlQUFlLGtCQUFrQixlQUFlLGFBQWEsZUFBZSxlQUFlLGlCQUFpQixnQkFBZ0Isa0JBQWtCLG1CQUFtQixpQkFBaUIsY0FBYyxvQkFBb0IscUJBQXFCLGFBQWEsbUJBQW1CLGNBQWMsZUFBZSxlQUFlLGVBQWUsWUFBWSxhQUFhLG1CQUFtQixlQUFlLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxZQUFZLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBS25uTixVQUFVLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLE9BQU8sQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNM0MsV0FBVyxvQkFBQUEsUUFBVSxNQUFNO0FBQUEsTUFDekIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxNQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxNQUM1QixLQUFLLG9CQUFBQSxRQUFVO0FBQUEsTUFDZixhQUFhLG9CQUFBQSxRQUFVO0FBQUEsSUFDekIsQ0FBQztBQUFBLElBQ0QsVUFBVSxvQkFBQUEsUUFBVSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUM7QUFBQSxJQUNwQyxXQUFXLG9CQUFBQSxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLEVBQzlCOzs7QUMxTUEsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxxQkFBdUI7QUFqQnZCLE1BQUlDLGVBQVksQ0FBQyxhQUFhLFlBQVksWUFBWSxTQUFTLGNBQWMsWUFBWSxRQUFRLFFBQVEsV0FBVyxVQUFVLE9BQU8sUUFBUSxhQUFhLGNBQWMsV0FBVztBQUVuTCxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWtCbFQsTUFBSSx3QkFBd0I7QUFBQSxJQUMxQixNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsSUFDUCxNQUFNO0FBQUEsRUFDUjtBQUNPLE1BQUksV0FBVyxPQUFPLHFCQUFxQjtBQUNsRCxNQUFJQyx1QkFBc0I7QUFBQSxJQUN4QixRQUFRO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsRUFDWDtBQUNPLE1BQUlDLFVBQVMsT0FBT0Qsb0JBQW1CO0FBQzlDLE1BQUlFLHNCQUFxQjtBQUFBLElBQ3ZCLElBQUk7QUFBQSxJQUNKLEdBQUc7QUFBQSxJQUNILEdBQUc7QUFBQSxFQUNMO0FBQ08sTUFBSUMsU0FBUSxPQUFPRCxtQkFBa0I7QUFDckMsTUFBSSxnQkFBZ0IsU0FBU0UsZUFBY0MsUUFBTTtBQUN0RCxRQUFJLFlBQVlBLE9BQUssV0FDakIsV0FBV0EsT0FBSyxVQUNoQixnQkFBZ0JBLE9BQUssVUFDckJDLFlBQVcsa0JBQWtCLFNBQVMsTUFBTSxlQUM1QyxhQUFhRCxPQUFLLE9BQ2xCLFFBQVEsZUFBZSxTQUFTLFlBQVksWUFDNUMsY0FBY0EsT0FBSyxZQUNuQixXQUFXQSxPQUFLLFVBQ2hCLE9BQU9BLE9BQUssTUFDWixZQUFZQSxPQUFLLE1BQ2pCLE9BQU8sY0FBYyxTQUFTLFdBQVcsV0FDekMsZUFBZUEsT0FBSyxTQUNwQixVQUFVLGlCQUFpQixTQUFTLFVBQVUsY0FDOUMsU0FBU0EsT0FBSyxRQUNkLE1BQU1BLE9BQUssS0FDWCxZQUFZQSxPQUFLLE1BQ2pCRSxRQUFPLGNBQWMsU0FBUyxPQUFPLFdBQ3JDLFlBQVlGLE9BQUssV0FDakIsYUFBYUEsT0FBSyxZQUNsQixZQUFZQSxPQUFLLFdBQ2pCLE9BQU9QLDRCQUF5Qk8sUUFBTVQsWUFBUztBQUVuRCxRQUFJLGNBQWMsQ0FBQyxRQUFRLGFBQWEsSUFBSTtBQUM1QyxRQUFJLGFBQWEsZUFBZSxZQUFZLENBQUMsZUFBZTtBQUM1RCxRQUFJLGFBQWEsS0FBSyxhQUFhO0FBQ25DLFFBQUksZUFBZSxlQUFlLFVBQVUsZUFBZTtBQUUzRCxRQUFJLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxLQUFLLGlCQUFpQixLQUFLLENBQUMsY0FBYztBQUNwRSxjQUFRLEtBQUssb0pBQW9KO0FBQUEsSUFDbks7QUFFQSxRQUFJLGNBQVUsbUJBQUFZLFNBQVcsaUJBQWlCO0FBQUEsTUFDeEMsNEJBQTRCO0FBQUEsSUFDOUIsR0FBR1IscUJBQW9CLEtBQUssR0FBRyxXQUFXLHNCQUFzQixPQUFPLEdBQUdPLFNBQVFMLG9CQUFtQkssS0FBSSxHQUFHLFNBQVM7QUFFckgsUUFBSTtBQUVKLFFBQUksWUFBWSxDQUFDLFdBQVc7QUFDMUIsbUJBQWEsSUFBYyxTQUFTO0FBQUEsUUFDbEMsV0FBVztBQUFBLFFBQ1gsTUFBTTtBQUFBLFFBQ04sTUFBTUQ7QUFBQSxRQUNOLGVBQWU7QUFBQSxRQUNmLE9BQU87QUFBQTtBQUFBLE1BRVQsQ0FBQztBQUFBLElBQ0g7QUFLQSxRQUFJLGNBQWNBLGNBQWEsYUFBYSxTQUFZQTtBQUV4RCxRQUFJLFlBQVksV0FBVztBQUN6QixtQkFBYSxJQUFjLG1CQUFtQjtBQUFBLFFBQzVDLE1BQU07QUFBQSxNQUNSLENBQUM7QUFBQSxJQUNIO0FBSUEsUUFBSSxRQUFRLENBQUMsWUFBWTtBQUN2QixVQUFJLFlBQVksc0JBQXNCO0FBQUEsUUFDcEM7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUNELGFBQU8sSUFBYyxLQUFLVCxZQUFTO0FBQUEsUUFDakMsVUFBVSxlQUFlLEtBQUs7QUFBQSxRQUM5QixXQUFXO0FBQUEsUUFDWDtBQUFBLFFBQ0E7QUFBQSxRQUNBLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxNQUNQLEdBQUcsSUFBSSxHQUFHLFVBQVU7QUFBQSxJQUN0QjtBQUVBLFFBQUk7QUFDSixXQUFPLElBQWMsVUFBVUEsWUFBUztBQUFBLE1BQ3RDLFVBQVUsZUFBZSxLQUFLO0FBQUEsTUFDOUIsVUFBVTtBQUFBLE1BQ1YsV0FBVztBQUFBLE1BQ1gsZ0JBQWdCO0FBQUEsTUFDaEI7QUFBQSxNQUNBLEtBQUs7QUFBQSxJQUNQLEdBQUcsSUFBSSxHQUFHLFVBQVU7QUFBQSxFQUN0QjtBQUNBLGdCQUFjLFlBQVk7QUFBQSxJQUN4QixNQUFNLG9CQUFBWSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxVQUFVLFNBQVMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUFBLElBQzVGLE1BQU0sb0JBQUFBLFFBQVU7QUFBQSxJQUNoQixTQUFTLG9CQUFBQSxRQUFVO0FBQUEsSUFDbkIsVUFBVSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLGlCQUFpQixjQUFjLHVCQUF1QixZQUFZLGFBQWEsU0FBUyxnQkFBZ0IsY0FBYyxVQUFVLFlBQVksZ0JBQWdCLFFBQVEsYUFBYSxhQUFhLGNBQWMsV0FBVyxjQUFjLFlBQVksWUFBWSxnQkFBZ0IsVUFBVSxRQUFRLGFBQWEsUUFBUSxtQkFBbUIsaUJBQWlCLFVBQVUsY0FBYyxTQUFTLFNBQVMsT0FBTyxZQUFZLFlBQVksYUFBYSxZQUFZLFNBQVMsdUJBQXVCLFNBQVMscUJBQXFCLFNBQVMsZ0JBQWdCLGVBQWUsY0FBYyxXQUFXLFdBQVcsU0FBUyxXQUFXLFdBQVcsY0FBYyxhQUFhLG1CQUFtQix3QkFBd0IsbUJBQW1CLG9CQUFvQixzQkFBc0Isb0JBQW9CLFFBQVEsaUJBQWlCLHFCQUFxQix3QkFBd0IsdUJBQXVCLHlCQUF5QixTQUFTLDhCQUE4Qix3QkFBd0IsY0FBYyxZQUFZLE9BQU8sZ0JBQWdCLGtCQUFrQixZQUFZLFdBQVcsZUFBZSxlQUFlLFlBQVksZ0JBQWdCLGlCQUFpQixhQUFhLE9BQU8sbUJBQW1CLG9CQUFvQixZQUFZLHFCQUFxQixtQkFBbUIsb0JBQW9CLGNBQWMsbUJBQW1CLG1CQUFtQixpQkFBaUIsOEJBQThCLDRCQUE0QixpQkFBaUIsZ0JBQWdCLHlCQUF5Qix5QkFBeUIsdUJBQXVCLHlCQUF5Qix3QkFBd0Isc0JBQXNCLGNBQWMscUJBQXFCLDRCQUE0Qiw2QkFBNkIseUJBQXlCLDBCQUEwQixjQUFjLGdCQUFnQixlQUFlLG1CQUFtQixjQUFjLHVCQUF1QixTQUFTLFNBQVMsVUFBVSxPQUFPLFVBQVUsUUFBUSxVQUFVLGNBQWMsZ0JBQWdCLE9BQU8sYUFBYSxhQUFhLGVBQWUsV0FBVyxlQUFlLFVBQVUsUUFBUSxZQUFZLFFBQVEsZUFBZSxnQkFBZ0IscUJBQXFCLGNBQWMsYUFBYSxpQkFBaUIsY0FBYyxrQkFBa0IsWUFBWSxRQUFRLFVBQVUsV0FBVyxTQUFTLFFBQVEsa0JBQWtCLFlBQVksUUFBUSxXQUFXLFNBQVMsZ0JBQWdCLFdBQVcsUUFBUSxRQUFRLGFBQWEsU0FBUyxnQkFBZ0IsY0FBYyxhQUFhLGNBQWMsc0JBQXNCLGdCQUFnQixhQUFhLG1CQUFtQixrQkFBa0IsZ0JBQWdCLGlCQUFpQixlQUFlLFdBQVcsVUFBVSxNQUFNLFlBQVksWUFBWSxlQUFlLGNBQWMsZUFBZSxZQUFZLGtCQUFrQixpQkFBaUIsVUFBVSxXQUFXLGFBQWEsY0FBYyxjQUFjLGFBQWEsUUFBUSxRQUFRLFdBQVcsUUFBUSxZQUFZLFdBQVcsZUFBZSxpQkFBaUIsY0FBYyxpQkFBaUIsYUFBYSxpQkFBaUIsYUFBYSx5QkFBeUIsWUFBWSxhQUFhLHVCQUF1QixZQUFZLG1CQUFtQixpQkFBaUIsY0FBYyxrQkFBa0IsZUFBZSxvQkFBb0IscUJBQXFCLHdCQUF3QixZQUFZLFdBQVcsZUFBZSxjQUFjLGFBQWEsY0FBYyxlQUFlLGVBQWUsV0FBVyxlQUFlLGFBQWEsY0FBYyxrQkFBa0IsZUFBZSxnQkFBZ0IsWUFBWSxpQkFBaUIsZUFBZSxlQUFlLGFBQWEsYUFBYSxxQkFBcUIsZUFBZSxXQUFXLGdCQUFnQixrQkFBa0IsZ0JBQWdCLGFBQWEsZ0JBQWdCLGtCQUFrQixjQUFjLGFBQWEsY0FBYyxlQUFlLGVBQWUsdUJBQXVCLFdBQVcsa0JBQWtCLGNBQWMsaUJBQWlCLGtCQUFrQixpQkFBaUIsc0JBQXNCLFVBQVUsMEJBQTBCLG9CQUFvQixtQkFBbUIsaUJBQWlCLGFBQWEsVUFBVSxRQUFRLFlBQVksWUFBWSxhQUFhLFVBQVUsU0FBUyxpQkFBaUIsY0FBYyxZQUFZLFNBQVMsaUJBQWlCLHVCQUF1QixVQUFVLGlCQUFpQixRQUFRLGFBQWEsVUFBVSxRQUFRLGVBQWUsVUFBVSxXQUFXLFVBQVUsdUJBQXVCLFdBQVcsaUJBQWlCLGNBQWMsZUFBZSxhQUFhLFdBQVcsU0FBUyxXQUFXLFVBQVUsV0FBVyxPQUFPLGFBQWEsZUFBZSxRQUFRLGNBQWMsUUFBUSxnQkFBZ0Isc0JBQXNCLFVBQVUsUUFBUSxvQkFBb0IsU0FBUyxxQkFBcUIsV0FBVyxpQkFBaUIsWUFBWSxnQkFBZ0IsYUFBYSxRQUFRLG1CQUFtQixTQUFTLFVBQVUscUJBQXFCLHdCQUF3QixlQUFlLGtCQUFrQiwwQkFBMEIsMEJBQTBCLGlCQUFpQixTQUFTLFNBQVMsYUFBYSxZQUFZLFlBQVksYUFBYSxVQUFVLFlBQVksYUFBYSxVQUFVLGFBQWEsa0JBQWtCLGNBQWMsbUJBQW1CLGtCQUFrQixtQkFBbUIsaUJBQWlCLGtCQUFrQixTQUFTLFFBQVEsY0FBYyxhQUFhLFdBQVcsVUFBVSxhQUFhLE9BQU8sZUFBZSxXQUFXLHVCQUF1Qix3QkFBd0Isc0JBQXNCLG1CQUFtQixPQUFPLFFBQVEsZUFBZSxZQUFZLGVBQWUsZUFBZSxjQUFjLFlBQVksU0FBUyxVQUFVLFVBQVUsdUJBQXVCLGFBQWEsUUFBUSxjQUFjLFNBQVMsaUJBQWlCLFVBQVUsZUFBZSxXQUFXLGtCQUFrQixvQkFBb0IsMkJBQTJCLGtCQUFrQix5QkFBeUIsWUFBWSxXQUFXLFdBQVcsb0JBQW9CLGdCQUFnQixhQUFhLFVBQVUsWUFBWSxlQUFlLFdBQVcsZUFBZSxXQUFXLG9CQUFvQixnQkFBZ0IsY0FBYyxZQUFZLG9CQUFvQixzQkFBc0IsVUFBVSxjQUFjLG1CQUFtQixjQUFjLGVBQWUsZ0JBQWdCLGNBQWMsNEJBQTRCLGlCQUFpQixhQUFhLG9CQUFvQixnQkFBZ0IsYUFBYSxtQkFBbUIsY0FBYyxrQkFBa0IsY0FBYyxhQUFhLGtCQUFrQixpQkFBaUIsWUFBWSxrQkFBa0Isa0JBQWtCLFdBQVcsYUFBYSxZQUFZLGdCQUFnQixlQUFlLHNCQUFzQixvQkFBb0IsZUFBZSxrQkFBa0IsZUFBZSxhQUFhLGVBQWUsZUFBZSxpQkFBaUIsZ0JBQWdCLGtCQUFrQixtQkFBbUIsaUJBQWlCLGNBQWMsb0JBQW9CLHFCQUFxQixhQUFhLG1CQUFtQixjQUFjLGVBQWUsZUFBZSxlQUFlLFlBQVksYUFBYSxtQkFBbUIsZUFBZSxDQUFDLEVBQUUsWUFBWSxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsWUFBWSxVQUFVLENBQUMsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3JuTixPQUFPLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxXQUFXLFVBQVUsV0FBVyxXQUFXLFVBQVUsU0FBUyxNQUFNLENBQUM7QUFBQSxJQUM3RixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsbUJBQW1CLG9CQUFBQSxRQUFVO0FBQUEsSUFDN0IsWUFBWSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVd0QixNQUFNLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU10QyxVQUFVLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBV3BCLFlBQVksb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQWV0QixTQUFTLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLFNBQVMsTUFBTSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTbEQsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM1QixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsRUFDdkI7OztBQ3hNQSxNQUFBQyxzQkFBc0I7QUFtQnRCLE1BQUFDLGtCQUFpRDtBQXJCakQsV0FBU0MsaUJBQWUsS0FBSyxHQUFHO0FBQUUsV0FBT0Msa0JBQWdCLEdBQUcsS0FBS0Msd0JBQXNCLEtBQUssQ0FBQyxLQUFLQyw4QkFBNEIsS0FBSyxDQUFDLEtBQUtDLG1CQUFpQjtBQUFBLEVBQUc7QUFJN0osV0FBU0EscUJBQW1CO0FBQUUsVUFBTSxJQUFJLFVBQVUsMklBQTJJO0FBQUEsRUFBRztBQUVoTSxXQUFTRCw4QkFBNEIsR0FBRyxRQUFRO0FBQUUsUUFBSSxDQUFDO0FBQUc7QUFBUSxRQUFJLE9BQU8sTUFBTTtBQUFVLGFBQU9FLG9CQUFrQixHQUFHLE1BQU07QUFBRyxRQUFJLElBQUksT0FBTyxVQUFVLFNBQVMsS0FBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFBRyxRQUFJLE1BQU0sWUFBWSxFQUFFO0FBQWEsVUFBSSxFQUFFLFlBQVk7QUFBTSxRQUFJLE1BQU0sU0FBUyxNQUFNO0FBQU8sYUFBTyxNQUFNLEtBQUssQ0FBQztBQUFHLFFBQUksTUFBTSxlQUFlLDJDQUEyQyxLQUFLLENBQUM7QUFBRyxhQUFPQSxvQkFBa0IsR0FBRyxNQUFNO0FBQUEsRUFBRztBQUUvWixXQUFTQSxvQkFBa0IsS0FBSyxLQUFLO0FBQUUsUUFBSSxPQUFPLFFBQVEsTUFBTSxJQUFJO0FBQVEsWUFBTSxJQUFJO0FBQVEsYUFBUyxJQUFJLEdBQUcsT0FBTyxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxLQUFLO0FBQUUsV0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFNO0FBRXRMLFdBQVNILHdCQUFzQixLQUFLLEdBQUc7QUFBRSxRQUFJLEtBQUssT0FBTyxPQUFPLE9BQU8sT0FBTyxXQUFXLGVBQWUsSUFBSSxPQUFPLFFBQVEsS0FBSyxJQUFJLFlBQVk7QUFBRyxRQUFJLE1BQU07QUFBTTtBQUFRLFFBQUksT0FBTyxDQUFDO0FBQUcsUUFBSSxLQUFLO0FBQU0sUUFBSSxLQUFLO0FBQU8sUUFBSSxJQUFJO0FBQUksUUFBSTtBQUFFLFdBQUssS0FBSyxHQUFHLEtBQUssR0FBRyxHQUFHLEVBQUUsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLE9BQU8sS0FBSyxNQUFNO0FBQUUsYUFBSyxLQUFLLEdBQUcsS0FBSztBQUFHLFlBQUksS0FBSyxLQUFLLFdBQVc7QUFBRztBQUFBLE1BQU87QUFBQSxJQUFFLFNBQVMsS0FBSztBQUFFLFdBQUs7QUFBTSxXQUFLO0FBQUEsSUFBSyxVQUFFO0FBQVUsVUFBSTtBQUFFLFlBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxLQUFLO0FBQU0sYUFBRyxRQUFRLEVBQUU7QUFBQSxNQUFHLFVBQUU7QUFBVSxZQUFJO0FBQUksZ0JBQU07QUFBQSxNQUFJO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFNO0FBRWhnQixXQUFTRCxrQkFBZ0IsS0FBSztBQUFFLFFBQUksTUFBTSxRQUFRLEdBQUc7QUFBRyxhQUFPO0FBQUEsRUFBSztBQVU3RCxXQUFTLGFBQWEsbUJBQW1CO0FBQzlDLFFBQUksZ0JBQVksMEJBQVMsSUFBSSxHQUN6QixhQUFhRCxpQkFBZSxXQUFXLENBQUMsR0FDeEMsTUFBTSxXQUFXLENBQUMsR0FDbEIsU0FBUyxXQUFXLENBQUM7QUFFekIsUUFBSSxpQkFBYSwwQkFBUyxpQkFBaUIsR0FDdkMsYUFBYUEsaUJBQWUsWUFBWSxDQUFDLEdBQ3pDLFlBQVksV0FBVyxDQUFDLEdBQ3hCLGVBQWUsV0FBVyxDQUFDO0FBRS9CLFFBQUksc0JBQWtCLDZCQUFZLFNBQVVNLE9BQU07QUFDaEQsVUFBSSxDQUFDQTtBQUFNO0FBQ1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxlQUFlQSxRQUFPQSxNQUFLLFlBQVlBLE1BQUssZUFBZTtBQUFBLE1BQWlCO0FBQUEsSUFDOUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDO0FBQ3RCLG1DQUFVLFdBQVk7QUFDcEIsVUFBSSxXQUFXLElBQUksaUJBQWlCLFNBQVUsZUFBZTtBQUMzRCxZQUFJLGNBQWM7QUFBUSwwQkFBZ0IsR0FBRztBQUFBLE1BQy9DLENBQUM7QUFFRCxVQUFJLEtBQUs7QUFDUCx3QkFBZ0IsR0FBRztBQUNuQixpQkFBUyxRQUFRLEtBQUs7QUFBQSxVQUNwQixlQUFlO0FBQUEsVUFDZixTQUFTO0FBQUEsVUFDVCxXQUFXO0FBQUEsUUFDYixDQUFDO0FBQUEsTUFDSDtBQUVBLGFBQU8sV0FBWTtBQUNqQixpQkFBUyxXQUFXO0FBQUEsTUFDdEI7QUFBQSxJQUNGLEdBQUcsQ0FBQyxLQUFLLGVBQWUsQ0FBQztBQUN6QixXQUFPLENBQUMsUUFBUSxTQUFTO0FBQUEsRUFDM0I7QUFDTyxNQUFJLGVBQWUsU0FBU0MsY0FBYUMsUUFBTTtBQUNwRCxRQUFJLFdBQVdBLE9BQUssVUFDaEIsV0FBV0EsT0FBSztBQUVwQixRQUFJLGdCQUFnQixhQUFhLFFBQVEsR0FDckMsaUJBQWlCUixpQkFBZSxlQUFlLENBQUMsR0FDaEQsTUFBTSxlQUFlLENBQUMsR0FDdEIsWUFBWSxlQUFlLENBQUM7QUFFaEMsV0FBTyxTQUFTLEtBQUssU0FBUztBQUFBLEVBQ2hDO0FBQ0EsZUFBYSxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJdkIsVUFBVSxvQkFBQVMsUUFBVSxLQUFLO0FBQUEsSUFDekIsVUFBVSxvQkFBQUEsUUFBVTtBQUFBLEVBQ3RCOzs7QUMvRUEsTUFBQUMsa0JBQXlDO0FBZ0J6QyxNQUFJO0FBQ0osTUFBSSxPQUFPLFdBQVcsYUFBYTtBQUNqQyxtQkFBZTtBQUFBLEVBR2pCLFdBQVcsT0FBTyxTQUFTLGFBQWE7QUFFdEMsbUJBQWU7QUFBQSxFQUNqQixPQUFPO0FBQ0wsbUJBQWU7QUFBQSxFQUNqQjtBQUNBLE1BQUksY0FBYztBQUNsQixNQUFJLGVBQWU7QUFDbkIsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxpQkFBaUIsYUFBYTtBQUNwQyxNQUFNLGVBQWUsYUFBYTtBQUNsQyxNQUFNLHlCQUF5QixhQUFhLHdCQUF3QixhQUFhLDJCQUEyQixhQUFhO0FBQ3pILE1BQU0sMEJBQTBCLGFBQWEseUJBQXlCLGFBQWEsNEJBQTRCLGFBQWE7QUFDNUgsTUFBSSwwQkFBMEIsUUFBUSwyQkFBMkIsTUFBTTtBQUdyRSxrQkFBYztBQUNkLG1CQUFlLFNBQVMsbUNBQW1DLFVBQVU7QUFDbkUsYUFBTyxhQUFhLFVBQVUsZ0JBQWdCO0FBQUEsSUFDaEQ7QUFBQSxFQUNGLE9BQU87QUFJTCxrQkFBYyxTQUFTQyxhQUFZLENBQUMsa0JBQWtCLFNBQVMsR0FBRztBQUNoRSw2QkFBdUIsZ0JBQWdCO0FBQ3ZDLHFCQUFlLFNBQVM7QUFBQSxJQUMxQjtBQUNBLG1CQUFlLFNBQVMsNENBQTRDLFVBQVU7QUFDNUUsWUFBTSxtQkFBbUIsd0JBQXdCLFNBQVMseUJBQXlCO0FBQ2pGLHVCQUFlLFNBQVM7QUFDeEIsaUJBQVM7QUFBQSxNQUNYLENBQUM7QUFDRCxZQUFNLFlBQVksYUFBYSxTQUFTLGtCQUFrQjtBQUN4RCwrQkFBdUIsZ0JBQWdCO0FBQ3ZDLGlCQUFTO0FBQUEsTUFDWCxHQUFHLGdCQUFnQjtBQUNuQixhQUFPLENBQUMsa0JBQWtCLFNBQVM7QUFBQSxJQUNyQztBQUFBLEVBQ0Y7QUFDQSxXQUFTLDBCQUEwQixPQUFPO0FBQ3hDLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFDSixVQUFNLGNBQWMsT0FBTyxhQUFhLGVBQWUsU0FBUztBQUNoRSxRQUFJLENBQUMsYUFBYTtBQUNoQixzQkFBZ0IsU0FBVSxTQUFTO0FBQ2pDLGNBQU0sV0FBVyxRQUFRLG9CQUN2QixTQUFTLFNBQVMsbUJBQ2xCLFdBQVcsU0FBUyxrQkFDcEIsY0FBYyxPQUFPO0FBQ3ZCLGlCQUFTLGFBQWEsU0FBUztBQUMvQixpQkFBUyxZQUFZLFNBQVM7QUFDOUIsb0JBQVksTUFBTSxRQUFRLE9BQU8sY0FBYyxJQUFJO0FBQ25ELG9CQUFZLE1BQU0sU0FBUyxPQUFPLGVBQWUsSUFBSTtBQUNyRCxlQUFPLGFBQWEsT0FBTztBQUMzQixlQUFPLFlBQVksT0FBTztBQUFBLE1BQzVCO0FBQ0Esc0JBQWdCLFNBQVUsU0FBUztBQUNqQyxlQUFPLFFBQVEsZ0JBQWdCLFFBQVEsZUFBZSxTQUFTLFFBQVEsaUJBQWlCLFFBQVEsZUFBZTtBQUFBLE1BQ2pIO0FBQ0EsdUJBQWlCLFNBQVUsR0FBRztBQUU1QixZQUFJLEVBQUUsT0FBTyxhQUFhLE9BQU8sRUFBRSxPQUFPLFVBQVUsWUFBWSxjQUFjLEVBQUUsT0FBTyxVQUFVLFFBQVEsa0JBQWtCLElBQUksS0FBSyxFQUFFLE9BQU8sVUFBVSxRQUFRLGdCQUFnQixJQUFJLEdBQUc7QUFDcEw7QUFBQSxRQUNGO0FBQ0EsY0FBTSxVQUFVO0FBQ2hCLHNCQUFjLElBQUk7QUFDbEIsWUFBSSxLQUFLLGVBQWU7QUFDdEIsc0JBQVksS0FBSyxhQUFhO0FBQUEsUUFDaEM7QUFDQSxhQUFLLGdCQUFnQixhQUFhLFNBQVMsaUJBQWlCO0FBQzFELGNBQUksY0FBYyxPQUFPLEdBQUc7QUFDMUIsb0JBQVEsZUFBZSxRQUFRLFFBQVE7QUFDdkMsb0JBQVEsZUFBZSxTQUFTLFFBQVE7QUFDeEMsb0JBQVEsb0JBQW9CLFFBQVEsU0FBUyxzQkFBc0IsSUFBSTtBQUNyRSxpQkFBRyxLQUFLLFNBQVMsQ0FBQztBQUFBLFlBQ3BCLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUdBLFVBQUlDLGFBQVk7QUFDaEIsVUFBSSxpQkFBaUI7QUFDckIsNEJBQXNCO0FBQ3RCLFlBQU0sY0FBYyxrQkFBa0IsTUFBTSxHQUFHO0FBQy9DLFVBQUksY0FBYyx1RUFBdUUsTUFBTSxHQUFHO0FBQ2xHLFVBQUksTUFBTTtBQUNWO0FBQ0UsY0FBTSxNQUFNLFNBQVMsY0FBYyxhQUFhO0FBQ2hELFlBQUksSUFBSSxNQUFNLGtCQUFrQixRQUFXO0FBQ3pDLFVBQUFBLGFBQVk7QUFBQSxRQUNkO0FBQ0EsWUFBSUEsZUFBYyxPQUFPO0FBQ3ZCLG1CQUFTLElBQUksR0FBRyxJQUFJLFlBQVksUUFBUSxLQUFLO0FBQzNDLGdCQUFJLElBQUksTUFBTSxZQUFZLENBQUMsSUFBSSxlQUFlLE1BQU0sUUFBVztBQUM3RCxvQkFBTSxZQUFZLENBQUM7QUFDbkIsK0JBQWlCLE1BQU0sSUFBSSxZQUFZLElBQUk7QUFDM0Msb0NBQXNCLFlBQVksQ0FBQztBQUNuQyxjQUFBQSxhQUFZO0FBQ1o7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQ0Esc0JBQWdCO0FBQ2hCLDJCQUFxQixNQUFNLGlCQUFpQixlQUFlLGdCQUFnQjtBQUMzRSx1QkFBaUIsaUJBQWlCLG9CQUFvQixnQkFBZ0I7QUFBQSxJQUN4RTtBQUNBLFVBQU0sZUFBZSxTQUFVLEtBQUs7QUFDbEMsVUFBSSxDQUFDLElBQUksZUFBZSxxQkFBcUIsR0FBRztBQUU5QyxjQUFNQyxRQUFPLHFCQUFxQixxQkFBcUIsTUFBTSx5QkFBeUIsaUJBQWlCLGlCQUFpQixNQUFNLDhWQUM1SCxPQUFPLElBQUksUUFBUSxJQUFJLHFCQUFxQixNQUFNLEVBQUUsQ0FBQyxHQUNyRCxRQUFRLElBQUksY0FBYyxPQUFPO0FBQ25DLGNBQU0sS0FBSztBQUNYLGNBQU0sT0FBTztBQUNiLFlBQUksU0FBUyxNQUFNO0FBQ2pCLGdCQUFNLGFBQWEsU0FBUyxLQUFLO0FBQUEsUUFDbkM7QUFDQSxZQUFJLE1BQU0sWUFBWTtBQUNwQixnQkFBTSxXQUFXLFVBQVVBO0FBQUEsUUFDN0IsT0FBTztBQUNMLGdCQUFNLFlBQVksSUFBSSxlQUFlQSxJQUFHLENBQUM7QUFBQSxRQUMzQztBQUNBLGFBQUssWUFBWSxLQUFLO0FBQUEsTUFDeEI7QUFBQSxJQUNGO0FBQ0EsVUFBTSxvQkFBb0IsU0FBVSxTQUFTLElBQUk7QUFDL0MsVUFBSSxhQUFhO0FBQ2YsZ0JBQVEsWUFBWSxZQUFZLEVBQUU7QUFBQSxNQUNwQyxPQUFPO0FBQ0wsWUFBSSxDQUFDLFFBQVEsb0JBQW9CO0FBQy9CLGdCQUFNLE1BQU0sUUFBUTtBQUNwQixnQkFBTSxlQUFlLGFBQWEsaUJBQWlCLE9BQU87QUFDMUQsY0FBSSxnQkFBZ0IsYUFBYSxhQUFhLFVBQVU7QUFDdEQsb0JBQVEsTUFBTSxXQUFXO0FBQUEsVUFDM0I7QUFDQSx1QkFBYSxHQUFHO0FBQ2hCLGtCQUFRLGlCQUFpQixDQUFDO0FBQzFCLGtCQUFRLHNCQUFzQixDQUFDO0FBQy9CLFdBQUMsUUFBUSxxQkFBcUIsSUFBSSxjQUFjLEtBQUssR0FBRyxZQUFZO0FBQ3BFLGdCQUFNLGdCQUFnQixJQUFJLGNBQWMsS0FBSztBQUM3Qyx3QkFBYyxZQUFZO0FBQzFCLHdCQUFjLFlBQVksSUFBSSxjQUFjLEtBQUssQ0FBQztBQUNsRCxnQkFBTSxrQkFBa0IsSUFBSSxjQUFjLEtBQUs7QUFDL0MsMEJBQWdCLFlBQVk7QUFDNUIsa0JBQVEsbUJBQW1CLFlBQVksYUFBYTtBQUNwRCxrQkFBUSxtQkFBbUIsWUFBWSxlQUFlO0FBQ3RELGtCQUFRLFlBQVksUUFBUSxrQkFBa0I7QUFDOUMsd0JBQWMsT0FBTztBQUNyQixrQkFBUSxpQkFBaUIsVUFBVSxnQkFBZ0IsSUFBSTtBQUd2RCxjQUFJLHFCQUFxQjtBQUN2QixvQkFBUSxtQkFBbUIsd0JBQXdCLFNBQVMsa0JBQWtCLEdBQUc7QUFDL0Usa0JBQUksRUFBRSxrQkFBa0IsZUFBZTtBQUNyQyw4QkFBYyxPQUFPO0FBQUEsY0FDdkI7QUFBQSxZQUNGO0FBQ0Esb0JBQVEsbUJBQW1CLGlCQUFpQixxQkFBcUIsUUFBUSxtQkFBbUIscUJBQXFCO0FBQUEsVUFDbkg7QUFBQSxRQUNGO0FBQ0EsZ0JBQVEsb0JBQW9CLEtBQUssRUFBRTtBQUFBLE1BQ3JDO0FBQUEsSUFDRjtBQUNBLFVBQU0sdUJBQXVCLFNBQVUsU0FBUyxJQUFJO0FBQ2xELFVBQUksYUFBYTtBQUNmLGdCQUFRLFlBQVksWUFBWSxFQUFFO0FBQUEsTUFDcEMsT0FBTztBQUNMLGdCQUFRLG9CQUFvQixPQUFPLFFBQVEsb0JBQW9CLFFBQVEsRUFBRSxHQUFHLENBQUM7QUFDN0UsWUFBSSxDQUFDLFFBQVEsb0JBQW9CLFFBQVE7QUFDdkMsa0JBQVEsb0JBQW9CLFVBQVUsZ0JBQWdCLElBQUk7QUFDMUQsY0FBSSxRQUFRLG1CQUFtQix1QkFBdUI7QUFDcEQsb0JBQVEsbUJBQW1CLG9CQUFvQixxQkFBcUIsUUFBUSxtQkFBbUIscUJBQXFCO0FBQ3BILG9CQUFRLG1CQUFtQix3QkFBd0I7QUFBQSxVQUNyRDtBQUNBLGNBQUk7QUFDRixvQkFBUSxxQkFBcUIsQ0FBQyxRQUFRLFlBQVksUUFBUSxrQkFBa0I7QUFBQSxVQUM5RSxTQUFTLEdBQUc7QUFBQSxVQUVaO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxNQUFNLFlBQU4sY0FBd0IsMEJBQVU7QUFBQSxJQUNoQyxlQUFlLE1BQU07QUFDbkIsWUFBTSxHQUFHLElBQUk7QUFDYixXQUFLLFFBQVE7QUFBQSxRQUNYLFFBQVEsS0FBSyxNQUFNLGlCQUFpQjtBQUFBLFFBQ3BDLGNBQWMsS0FBSyxNQUFNLGlCQUFpQjtBQUFBLFFBQzFDLGFBQWEsS0FBSyxNQUFNLGdCQUFnQjtBQUFBLFFBQ3hDLE9BQU8sS0FBSyxNQUFNLGdCQUFnQjtBQUFBLE1BQ3BDO0FBQ0EsV0FBSyxhQUFhO0FBQ2xCLFdBQUssdUJBQXVCO0FBQzVCLFdBQUssY0FBYztBQUNuQixXQUFLLGtCQUFrQjtBQUN2QixXQUFLLGFBQWE7QUFDbEIsV0FBSyxZQUFZLE1BQU07QUFDckIsYUFBSyxhQUFhO0FBQ2xCLGNBQU07QUFBQSxVQUNKO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLElBQUksS0FBSztBQUNULFlBQUksS0FBSyxhQUFhO0FBS3BCLGdCQUFNLFFBQVEsT0FBTyxpQkFBaUIsS0FBSyxXQUFXLEtBQUssQ0FBQztBQUM1RCxnQkFBTSxjQUFjLFdBQVcsTUFBTSxlQUFlLEdBQUc7QUFDdkQsZ0JBQU0sZUFBZSxXQUFXLE1BQU0sZ0JBQWdCLEdBQUc7QUFDekQsZ0JBQU0sYUFBYSxXQUFXLE1BQU0sY0FBYyxHQUFHO0FBQ3JELGdCQUFNLGdCQUFnQixXQUFXLE1BQU0saUJBQWlCLEdBQUc7QUFDM0QsZ0JBQU0sT0FBTyxLQUFLLFlBQVksc0JBQXNCO0FBQ3BELGdCQUFNLGVBQWUsS0FBSyxTQUFTLGFBQWE7QUFDaEQsZ0JBQU0sY0FBYyxLQUFLLFFBQVEsY0FBYztBQUMvQyxnQkFBTSxTQUFTLEtBQUssWUFBWSxlQUFlLGFBQWE7QUFDNUQsZ0JBQU0sUUFBUSxLQUFLLFlBQVksY0FBYyxjQUFjO0FBQzNELGNBQUksQ0FBQyxrQkFBa0IsS0FBSyxNQUFNLFdBQVcsVUFBVSxLQUFLLE1BQU0saUJBQWlCLGlCQUFpQixDQUFDLGlCQUFpQixLQUFLLE1BQU0sVUFBVSxTQUFTLEtBQUssTUFBTSxnQkFBZ0IsY0FBYztBQUMzTCxpQkFBSyxTQUFTO0FBQUEsY0FDWjtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0YsQ0FBQztBQUNELGdCQUFJLE9BQU8sYUFBYSxZQUFZO0FBQ2xDLHVCQUFTO0FBQUEsZ0JBQ1A7QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxjQUNGLENBQUM7QUFBQSxZQUNIO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQ0EsV0FBSyxVQUFVLGVBQWE7QUFDMUIsYUFBSyxhQUFhO0FBQUEsTUFDcEI7QUFBQSxJQUNGO0FBQUEsSUFDQSxvQkFBb0I7QUFDbEIsWUFBTTtBQUFBLFFBQ0o7QUFBQSxNQUNGLElBQUksS0FBSztBQUNULFlBQU0sYUFBYSxLQUFLLGFBQWEsS0FBSyxXQUFXLGFBQWE7QUFDbEUsVUFBSSxjQUFjLFFBQVEsV0FBVyxpQkFBaUIsV0FBVyxjQUFjLGVBQWUsc0JBQXNCLFdBQVcsY0FBYyxZQUFZLGFBQWE7QUFJcEssYUFBSyxjQUFjO0FBSW5CLGNBQU0seUJBQXlCLFdBQVcsY0FBYyxZQUFZO0FBQ3BFLFlBQUksMEJBQTBCLE1BQU07QUFDbEMsZUFBSyxrQkFBa0IsSUFBSSx1QkFBdUIsTUFBTTtBQUl0RCxpQkFBSyxhQUFhLFdBQVcsS0FBSyxXQUFXLENBQUM7QUFBQSxVQUNoRCxDQUFDO0FBQ0QsZUFBSyxnQkFBZ0IsUUFBUSxVQUFVO0FBQUEsUUFDekMsT0FBTztBQUdMLGVBQUssdUJBQXVCLDBCQUEwQixLQUFLO0FBQzNELGVBQUsscUJBQXFCLGtCQUFrQixZQUFZLEtBQUssU0FBUztBQUFBLFFBQ3hFO0FBQ0EsYUFBSyxVQUFVO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBQUEsSUFDQSx1QkFBdUI7QUFDckIsVUFBSSxLQUFLLGFBQWE7QUFDcEIsWUFBSSxLQUFLLHNCQUFzQjtBQUM3QixlQUFLLHFCQUFxQixxQkFBcUIsS0FBSyxhQUFhLEtBQUssU0FBUztBQUFBLFFBQ2pGO0FBQ0EsWUFBSSxLQUFLLGVBQWUsTUFBTTtBQUM1Qix1QkFBYSxLQUFLLFVBQVU7QUFBQSxRQUM5QjtBQUNBLFlBQUksS0FBSyxpQkFBaUI7QUFDeEIsZUFBSyxnQkFBZ0IsV0FBVztBQUFBLFFBQ2xDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFNBQVM7QUFDUCxZQUFNO0FBQUEsUUFDSjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxnQkFBZ0I7QUFBQSxRQUNoQixlQUFlO0FBQUEsUUFDZiw4QkFBOEI7QUFBQSxRQUM5QjtBQUFBLFFBQ0E7QUFBQSxRQUNBLFFBQVEsQ0FBQztBQUFBLFFBQ1QsVUFBVTtBQUFBLFFBQ1YsR0FBRztBQUFBLE1BQ0wsSUFBSSxLQUFLO0FBQ1QsWUFBTTtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLElBQUksS0FBSztBQUtULFlBQU0sYUFBYTtBQUFBLFFBQ2pCLFVBQVU7QUFBQSxNQUNaO0FBQ0EsWUFBTSxjQUFjLENBQUM7QUFJckIsVUFBSSxvQkFBb0I7QUFDeEIsVUFBSSxDQUFDLGVBQWU7QUFDbEIsWUFBSSxXQUFXLEdBQUc7QUFDaEIsOEJBQW9CO0FBQUEsUUFDdEI7QUFDQSxtQkFBVyxTQUFTO0FBQ3BCLG9CQUFZLFNBQVM7QUFDckIsb0JBQVksZUFBZTtBQUFBLE1BQzdCO0FBQ0EsVUFBSSxDQUFDLGNBQWM7QUFDakIsWUFBSSxVQUFVLEdBQUc7QUFDZiw4QkFBb0I7QUFBQSxRQUN0QjtBQUNBLG1CQUFXLFFBQVE7QUFDbkIsb0JBQVksUUFBUTtBQUNwQixvQkFBWSxjQUFjO0FBQUEsTUFDNUI7QUFDQSxVQUFJLDZCQUE2QjtBQUMvQiw0QkFBb0I7QUFBQSxNQUN0QjtBQUNBLGlCQUFPLCtCQUFjLFNBQVM7QUFBQSxRQUM1QixLQUFLLEtBQUs7QUFBQSxRQUNWLE9BQU87QUFBQSxVQUNMLEdBQUc7QUFBQSxVQUNILEdBQUc7QUFBQSxRQUNMO0FBQUEsUUFDQSxHQUFHO0FBQUEsTUFDTCxHQUFHLENBQUMscUJBQXFCLFNBQVMsV0FBVyxDQUFDO0FBQUEsSUFDaEQ7QUFBQSxFQUNGOzs7QUMzWEEsV0FBU0MsU0FBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsV0FBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxXQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxTQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLFdBQVNFLGlCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxXQUFVLFVBQVUsWUFBWTtBQUFFLFFBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQUUsWUFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsSUFBRztBQUFFLGFBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRSxDQUFDO0FBQUcsUUFBSTtBQUFZLE1BQUFDLGlCQUFnQixVQUFVLFVBQVU7QUFBQSxFQUFHO0FBRWhZLFdBQVNBLGlCQUFnQixHQUFHLEdBQUc7QUFBRSxJQUFBQSxtQkFBa0IsT0FBTyxrQkFBa0IsU0FBU0Esa0JBQWdCQyxJQUFHQyxJQUFHO0FBQUUsTUFBQUQsR0FBRSxZQUFZQztBQUFHLGFBQU9EO0FBQUEsSUFBRztBQUFHLFdBQU9ELGlCQUFnQixHQUFHLENBQUM7QUFBQSxFQUFHO0FBRXpLLFdBQVNHLGNBQWEsU0FBUztBQUFFLFFBQUksNEJBQTRCQywyQkFBMEI7QUFBRyxXQUFPLFNBQVMsdUJBQXVCO0FBQUUsVUFBSSxRQUFRQyxpQkFBZ0IsT0FBTyxHQUFHO0FBQVEsVUFBSSwyQkFBMkI7QUFBRSxZQUFJLFlBQVlBLGlCQUFnQixJQUFJLEVBQUU7QUFBYSxpQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUFHLE9BQU87QUFBRSxpQkFBUyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFFLGFBQU9DLDRCQUEyQixNQUFNLE1BQU07QUFBQSxJQUFHO0FBQUEsRUFBRztBQUV4YSxXQUFTQSw0QkFBMkJDLE9BQU0sTUFBTTtBQUFFLFFBQUksU0FBU1gsU0FBUSxJQUFJLE1BQU0sWUFBWSxPQUFPLFNBQVMsYUFBYTtBQUFFLGFBQU87QUFBQSxJQUFNLFdBQVcsU0FBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLFVBQVUsMERBQTBEO0FBQUEsSUFBRztBQUFFLFdBQU9ZLHdCQUF1QkQsS0FBSTtBQUFBLEVBQUc7QUFFL1IsV0FBU0Msd0JBQXVCRCxPQUFNO0FBQUUsUUFBSUEsVUFBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLGVBQWUsMkRBQTJEO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUVySyxXQUFTSCw2QkFBNEI7QUFBRSxRQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGFBQU87QUFBTyxRQUFJLFFBQVEsVUFBVTtBQUFNLGFBQU87QUFBTyxRQUFJLE9BQU8sVUFBVTtBQUFZLGFBQU87QUFBTSxRQUFJO0FBQUUsY0FBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxDQUFDLEdBQUcsV0FBWTtBQUFBLE1BQUMsQ0FBQyxDQUFDO0FBQUcsYUFBTztBQUFBLElBQU0sU0FBUyxHQUFHO0FBQUUsYUFBTztBQUFBLElBQU87QUFBQSxFQUFFO0FBRXhVLFdBQVNDLGlCQUFnQixHQUFHO0FBQUUsSUFBQUEsbUJBQWtCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLFNBQVNBLGtCQUFnQkosSUFBRztBQUFFLGFBQU9BLEdBQUUsYUFBYSxPQUFPLGVBQWVBLEVBQUM7QUFBQSxJQUFHO0FBQUcsV0FBT0ksaUJBQWdCLENBQUM7QUFBQSxFQUFHO0FBVXJNLE1BQUksZUFBNEIseUJBQVUsWUFBWTtBQUMzRCxJQUFBTixXQUFVVSxlQUFjLFVBQVU7QUFFbEMsUUFBSSxTQUFTTixjQUFhTSxhQUFZO0FBRXRDLGFBQVNBLGdCQUFlO0FBQ3RCLE1BQUFYLGlCQUFnQixNQUFNVyxhQUFZO0FBRWxDLGFBQU8sT0FBTyxNQUFNLE1BQU0sU0FBUztBQUFBLElBQ3JDO0FBRUEsV0FBT0E7QUFBQSxFQUNULEVBQUUsU0FBUzs7O0FDTFgsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxxQkFBdUI7OztBQ25DdkIsV0FBU0MsVUFBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxVQUFRLEdBQUc7QUFBQSxFQUFHO0FBMENsWCxNQUFJLGVBQWU7QUFLbkIsTUFBSSxhQUFhLFNBQVNFLFlBQVcsT0FBTztBQUNqRCxRQUFJO0FBQ0osUUFBSSxDQUFDO0FBQU8sYUFBTztBQUVuQixRQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRztBQUMxQixVQUFJLENBQUMsZUFBZSxLQUFLLEtBQUssR0FBRztBQUMvQixlQUFPO0FBQUEsTUFDVDtBQUVBLFVBQUlDLE9BQU0sTUFBTSxLQUFLLEVBQUUsTUFBTSxHQUFHLEVBQUUsT0FBTyxTQUFVLEdBQUc7QUFDcEQsZUFBTyxNQUFNO0FBQUEsTUFDZixDQUFDLEVBQUUsSUFBSSxNQUFNO0FBQ2IsZUFBU0EsS0FBSSxTQUFTLEtBQUtBLEtBQUksU0FBUyxJQUFJQSxPQUFNO0FBQUEsSUFDcEQsT0FBTztBQUNMLGVBQVM7QUFBQSxJQUNYO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFHTyxNQUFJLGNBQWMsU0FBU0MsYUFBWSxPQUFPO0FBQ25ELFFBQUksU0FBUztBQUViLFFBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsZUFBUyxXQUFXLEtBQUs7QUFBQSxJQUMzQjtBQUVBLFFBQUksQ0FBQztBQUFRLGFBQU87QUFFcEIsUUFBSUMsVUFBUSxNQUFNLE1BQU0sVUFBVTtBQUNoQyxhQUFPLGtCQUFPLE1BQU0sUUFBUSxLQUFLLEtBQUssa0JBQU8sTUFBTSxRQUFRLE1BQU07QUFBQSxJQUNuRTtBQUVBLFdBQU8sa0JBQU8sTUFBTSxPQUFPLEtBQUs7QUFBQSxFQUNsQzs7O0FEbEZBLE1BQUlDLGVBQVksQ0FBQyxZQUFZLFNBQVMsWUFBWSxZQUFZLGFBQWEsY0FBYyxXQUFXLGVBQWUsb0JBQW9CLHdCQUF3QixvQkFBb0IsUUFBUSxPQUFPLFVBQVUsT0FBTztBQUVuTixXQUFTQyxvQkFBbUIsS0FBSztBQUFFLFdBQU9DLG9CQUFtQixHQUFHLEtBQUtDLGtCQUFpQixHQUFHLEtBQUtDLDhCQUE0QixHQUFHLEtBQUtDLG9CQUFtQjtBQUFBLEVBQUc7QUFFeEosV0FBU0Esc0JBQXFCO0FBQUUsVUFBTSxJQUFJLFVBQVUsc0lBQXNJO0FBQUEsRUFBRztBQUU3TCxXQUFTRCw4QkFBNEIsR0FBRyxRQUFRO0FBQUUsUUFBSSxDQUFDO0FBQUc7QUFBUSxRQUFJLE9BQU8sTUFBTTtBQUFVLGFBQU9FLG9CQUFrQixHQUFHLE1BQU07QUFBRyxRQUFJLElBQUksT0FBTyxVQUFVLFNBQVMsS0FBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFBRyxRQUFJLE1BQU0sWUFBWSxFQUFFO0FBQWEsVUFBSSxFQUFFLFlBQVk7QUFBTSxRQUFJLE1BQU0sU0FBUyxNQUFNO0FBQU8sYUFBTyxNQUFNLEtBQUssQ0FBQztBQUFHLFFBQUksTUFBTSxlQUFlLDJDQUEyQyxLQUFLLENBQUM7QUFBRyxhQUFPQSxvQkFBa0IsR0FBRyxNQUFNO0FBQUEsRUFBRztBQUUvWixXQUFTSCxrQkFBaUIsTUFBTTtBQUFFLFFBQUksT0FBTyxXQUFXLGVBQWUsS0FBSyxPQUFPLFFBQVEsS0FBSyxRQUFRLEtBQUssWUFBWSxLQUFLO0FBQU0sYUFBTyxNQUFNLEtBQUssSUFBSTtBQUFBLEVBQUc7QUFFN0osV0FBU0Qsb0JBQW1CLEtBQUs7QUFBRSxRQUFJLE1BQU0sUUFBUSxHQUFHO0FBQUcsYUFBT0ksb0JBQWtCLEdBQUc7QUFBQSxFQUFHO0FBRTFGLFdBQVNBLG9CQUFrQixLQUFLLEtBQUs7QUFBRSxRQUFJLE9BQU8sUUFBUSxNQUFNLElBQUk7QUFBUSxZQUFNLElBQUk7QUFBUSxhQUFTLElBQUksR0FBRyxPQUFPLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEtBQUs7QUFBRSxXQUFLLENBQUMsSUFBSSxJQUFJLENBQUM7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQU07QUFFdEwsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsVUFBUUMsU0FBUSxnQkFBZ0I7QUFBRSxRQUFJQyxRQUFPLE9BQU8sS0FBS0QsT0FBTTtBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLFVBQVUsT0FBTyxzQkFBc0JBLE9BQU07QUFBRyxVQUFJLGdCQUFnQjtBQUFFLGtCQUFVLFFBQVEsT0FBTyxTQUFVLEtBQUs7QUFBRSxpQkFBTyxPQUFPLHlCQUF5QkEsU0FBUSxHQUFHLEVBQUU7QUFBQSxRQUFZLENBQUM7QUFBQSxNQUFHO0FBQUUsTUFBQUMsTUFBSyxLQUFLLE1BQU1BLE9BQU0sT0FBTztBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFeFYsV0FBU0MsZ0JBQWMsUUFBUTtBQUFFLGFBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxVQUFJLFNBQVMsVUFBVSxDQUFDLEtBQUssT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQUcsVUFBSSxJQUFJLEdBQUc7QUFBRSxRQUFBSCxVQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksRUFBRSxRQUFRLFNBQVUsS0FBSztBQUFFLFVBQUFJLGtCQUFnQixRQUFRLEtBQUssT0FBTyxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHLFdBQVcsT0FBTywyQkFBMkI7QUFBRSxlQUFPLGlCQUFpQixRQUFRLE9BQU8sMEJBQTBCLE1BQU0sQ0FBQztBQUFBLE1BQUcsT0FBTztBQUFFLFFBQUFKLFVBQVEsT0FBTyxNQUFNLENBQUMsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUFFLGlCQUFPLGVBQWUsUUFBUSxLQUFLLE9BQU8seUJBQXlCLFFBQVEsR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUVyaEIsV0FBU0ksa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUFFaE4sV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFxQmxULE1BQUksV0FBVztBQUNmLE1BQUksYUFBYTtBQUlqQixNQUFJLFlBQVksK0JBQStCO0FBQy9DLE1BQUksZ0JBQWdCO0FBQUE7QUFBQSxJQUVsQixTQUFTO0FBQUEsSUFDVCxTQUFTLFVBQVUsQ0FBQztBQUFBLElBQ3BCLFNBQVMsVUFBVSxDQUFDO0FBQUEsSUFDcEIsUUFBUSxVQUFVLENBQUM7QUFBQSxJQUNuQixTQUFTLFVBQVUsQ0FBQztBQUFBLElBQ3BCLFFBQVEsVUFBVSxDQUFDO0FBQUEsRUFDckI7QUFDTyxNQUFJQyxVQUFTLE9BQU8sYUFBYTtBQUN4QyxNQUFJQywwQkFBeUI7QUFBQSxJQUMzQixNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUEsRUFDVDtBQUNPLE1BQUlDLGNBQWEsT0FBT0QsdUJBQXNCO0FBQzlDLE1BQUksV0FBVyxTQUFTRSxVQUFTQyxRQUFNO0FBQzVDLFFBQUksV0FBV0EsT0FBSyxVQUNoQixhQUFhQSxPQUFLLE9BQ2xCLFFBQVEsZUFBZSxTQUFTLFlBQVksWUFDNUMsV0FBV0EsT0FBSyxVQUNoQixnQkFBZ0JBLE9BQUssVUFDckIsV0FBVyxrQkFBa0IsU0FBUyxTQUFTLGVBQy9DLFlBQVlBLE9BQUssV0FDakIsY0FBY0EsT0FBSyxZQUNuQixVQUFVQSxPQUFLLFNBQ2YsY0FBY0EsT0FBSyxhQUNuQixtQkFBbUJBLE9BQUssa0JBQ3hCLHVCQUF1QkEsT0FBSyxzQkFDNUIsbUJBQW1CQSxPQUFLLGtCQUN4QixPQUFPQSxPQUFLLE1BQ1osTUFBTUEsT0FBSyxLQUNYLFNBQVNBLE9BQUssUUFDZCxRQUFRQSxPQUFLLE9BQ2IsT0FBT04sNEJBQXlCTSxRQUFNbkIsWUFBUztBQUVuRCxRQUFJLGNBQWMsQ0FBQyxRQUFRLGFBQWEsSUFBSTtBQUM1QyxRQUFJLGFBQWEsZUFBZSxDQUFDO0FBQ2pDLFFBQUksdUJBQXVCO0FBQzNCLFFBQUksWUFBWTtBQUVoQixRQUFJLG1CQUFtQjtBQUV2QixRQUFJLGVBQWU7QUFDbkIsUUFBSSxXQUFXO0FBRWYsUUFBSTtBQUNGLFVBQUllLFFBQU8sUUFBUSxLQUFLLElBQUksSUFBSTtBQUU5QixtQkFBVyxjQUFjLEtBQUs7QUFFOUIsb0JBQVksYUFBYSxRQUFRO0FBQ2pDLCtCQUF1QkosZ0JBQWM7QUFBQSxVQUNuQyxpQkFBaUI7QUFBQSxVQUNqQixPQUFPO0FBQUEsUUFDVCxHQUFHLG9CQUFvQjtBQUFBLE1BQ3pCLFdBQVcsVUFBVSxVQUFVO0FBSTdCLG9CQUFZLGFBQWEsS0FBSztBQUU5Qix1QkFBZSxpQkFBaUIsV0FBVyxLQUFLO0FBRWhELFlBQUksZUFBZSxrQkFBa0I7QUFFbkMsa0JBQVEsS0FBSyxhQUFhLE9BQU8sK0JBQStCLGFBQWEsUUFBUSxDQUFDLEdBQUcsc0JBQXNCLGtCQUFrQixHQUFHO0FBQUEsUUFDdEk7QUFFQSwrQkFBdUJBLGdCQUFjO0FBQUEsVUFDbkMsaUJBQWlCO0FBQUEsVUFDakIsT0FBTztBQUFBLFFBQ1QsR0FBRyxvQkFBb0I7QUFBQSxNQUN6QjtBQUFBLElBQ0YsU0FBUyxLQUFLO0FBQ1oseUJBQW1CLEtBQUs7QUFBQSxJQUMxQjtBQUVBLFFBQUksY0FBVSxtQkFBQVMsU0FBVyxZQUFZO0FBQUEsTUFDbkMseUJBQXlCLFdBQVcsU0FBUyxDQUFDO0FBQUEsTUFDOUMsdUJBQXVCO0FBQUEsTUFDdkIsb0JBQW9CLFVBQVU7QUFBQSxJQUNoQyxHQUFHSix3QkFBdUIsUUFBUSxHQUFHLFNBQVM7QUFDOUMsUUFBSSxzQkFBa0IsbUJBQUFJLFNBQVcsa0JBQWtCLG9CQUFvQixpQkFBaUIsU0FBUztBQUNqRyxRQUFJQyxXQUFVLFFBQVEsQ0FBQyxhQUFhLE1BQU07QUFDMUMsUUFBSSxTQUFTLENBQUM7QUFFZCxRQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQ3ZCLGFBQU8sT0FBTztBQUNkLGFBQU8sU0FBUztBQUNoQixhQUFPLE1BQU0sc0JBQXNCO0FBQUEsUUFDakM7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFFQSxRQUFJLFNBQVM7QUFDWCxhQUFPLFVBQVU7QUFBQSxJQUNuQjtBQUVBLFFBQUksZUFBZTtBQUVuQixRQUFJLFVBQVU7QUFDWixVQUFJLGFBQWE7QUFDZixZQUFJLENBQUMsc0JBQXNCO0FBQ3pCLGtCQUFRLEtBQUssNEZBQTRGO0FBQUEsUUFDM0c7QUFFQSx1QkFBZSxJQUFjLFVBQVU7QUFBQSxVQUNyQyxNQUFNO0FBQUEsVUFDTixXQUFXO0FBQUEsVUFDWCxjQUFjO0FBQUEsVUFDZCxVQUFVO0FBQUEsVUFDVixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxHQUFHLElBQWMsU0FBU2QsWUFBUztBQUFBLFVBQ2pDLE1BQU07QUFBQSxVQUNOLE1BQU07QUFBQSxVQUNOLE9BQU87QUFBQTtBQUFBLFFBRVQsR0FBRyxrQkFBa0I7QUFBQSxVQUNuQixXQUFXO0FBQUEsUUFDYixDQUFDLENBQUMsQ0FBQztBQUFBLE1BQ0wsT0FBTztBQUNMLHVCQUFlLElBQWMsU0FBUztBQUFBLFVBQ3BDLE1BQU07QUFBQSxVQUNOLE1BQU0sV0FBVyxNQUFNO0FBQUEsVUFDdkIsV0FBVztBQUFBLFVBQ1gsT0FBTztBQUFBO0FBQUEsUUFFVCxDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFFQSxRQUFJLFdBQVcsQ0FBQyxrQkFBa0I7QUFDaEMsY0FBUSxLQUFLLDBFQUEwRTtBQUFBLElBQ3pGO0FBRUEsUUFBSSxVQUFVLElBQWMsUUFBUTtBQUFBLE1BQ2xDLFdBQVc7QUFBQSxJQUNiLEdBQUcsWUFBWSxJQUFjLFFBQVE7QUFBQSxNQUNuQyxXQUFXO0FBQUEsSUFDYixHQUFHLFFBQVEsR0FBRyxZQUFZO0FBRTFCLFFBQUksYUFBYTtBQUNmLGFBQU8sV0FBVyxPQUFPLElBQWMsUUFBUTtBQUFBLFFBQzdDLFdBQVc7QUFBQSxRQUNYLE9BQU87QUFBQSxNQUNULEdBQUcsSUFBYyxRQUFRO0FBQUEsUUFDdkIsV0FBVztBQUFBLE1BQ2IsR0FBRyxJQUFjLGNBQWMsTUFBTSxTQUFVLEtBQUssV0FBVztBQUM3RCxlQUFPLElBQWNjLFVBQVNkLFlBQVM7QUFBQSxVQUNyQyxXQUFXO0FBQUEsVUFDWCxVQUFVO0FBQUEsVUFDVixjQUFjO0FBQUEsVUFDZDtBQUFBLFVBQ0EsT0FBTztBQUFBLFFBQ1QsR0FBRyxRQUFRLElBQUksR0FBRyxRQUFRO0FBQUEsTUFDNUIsQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLElBQWMsY0FBYyxNQUFNLFNBQVUsS0FBSyxXQUFXO0FBQy9FLGVBQU8sSUFBYyxRQUFRQSxZQUFTO0FBQUEsVUFDcEMsV0FBVztBQUFBLFVBQ1gsT0FBTztBQUFBLFVBQ1A7QUFBQSxVQUNBLE9BQU87QUFBQSxRQUNULEdBQUcsSUFBSSxHQUFHLE9BQU87QUFBQSxNQUNuQixDQUFDO0FBQUEsSUFDSCxXQUFXLFdBQVcsTUFBTTtBQUMxQixhQUFPLElBQWMsY0FBYyxNQUFNLFNBQVUsS0FBSyxXQUFXO0FBQ2pFLGVBQU8sSUFBY2MsVUFBU2QsWUFBUztBQUFBLFVBQ3JDLFVBQVU7QUFBQSxVQUNWLGNBQWM7QUFBQSxVQUNkLFdBQVc7QUFBQSxVQUNYLE9BQU87QUFBQSxVQUNQO0FBQUEsVUFDQSxPQUFPO0FBQUEsUUFDVCxHQUFHLFFBQVEsSUFBSSxHQUFHLE9BQU87QUFBQSxNQUMzQixDQUFDO0FBQUEsSUFDSCxPQUFPO0FBQ0wsYUFBTyxJQUFjLGNBQWMsTUFBTSxTQUFVLEtBQUssV0FBVztBQUNqRSxlQUFPLElBQWMsUUFBUUEsWUFBUztBQUFBLFVBQ3BDLFdBQVc7QUFBQSxVQUNYLE9BQU87QUFBQSxVQUNQO0FBQUEsVUFDQSxPQUFPO0FBQUEsUUFDVCxHQUFHLElBQUksR0FBRyxPQUFPO0FBQUEsTUFDbkIsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0EsV0FBUyxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJbkIsVUFBVSxvQkFBQWUsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLGlCQUFpQixjQUFjLHVCQUF1QixZQUFZLGFBQWEsU0FBUyxnQkFBZ0IsY0FBYyxVQUFVLFlBQVksZ0JBQWdCLFFBQVEsYUFBYSxhQUFhLGNBQWMsV0FBVyxjQUFjLFlBQVksWUFBWSxnQkFBZ0IsVUFBVSxRQUFRLGFBQWEsUUFBUSxtQkFBbUIsaUJBQWlCLFVBQVUsY0FBYyxTQUFTLFNBQVMsT0FBTyxZQUFZLFlBQVksYUFBYSxZQUFZLFNBQVMsdUJBQXVCLFNBQVMscUJBQXFCLFNBQVMsZ0JBQWdCLGVBQWUsY0FBYyxXQUFXLFdBQVcsU0FBUyxXQUFXLFdBQVcsY0FBYyxhQUFhLG1CQUFtQix3QkFBd0IsbUJBQW1CLG9CQUFvQixzQkFBc0Isb0JBQW9CLFFBQVEsaUJBQWlCLHFCQUFxQix3QkFBd0IsdUJBQXVCLHlCQUF5QixTQUFTLDhCQUE4Qix3QkFBd0IsY0FBYyxZQUFZLE9BQU8sZ0JBQWdCLGtCQUFrQixZQUFZLFdBQVcsZUFBZSxlQUFlLFlBQVksZ0JBQWdCLGlCQUFpQixhQUFhLE9BQU8sbUJBQW1CLG9CQUFvQixZQUFZLHFCQUFxQixtQkFBbUIsb0JBQW9CLGNBQWMsbUJBQW1CLG1CQUFtQixpQkFBaUIsOEJBQThCLDRCQUE0QixpQkFBaUIsZ0JBQWdCLHlCQUF5Qix5QkFBeUIsdUJBQXVCLHlCQUF5Qix3QkFBd0Isc0JBQXNCLGNBQWMscUJBQXFCLDRCQUE0Qiw2QkFBNkIseUJBQXlCLDBCQUEwQixjQUFjLGdCQUFnQixlQUFlLG1CQUFtQixjQUFjLHVCQUF1QixTQUFTLFNBQVMsVUFBVSxPQUFPLFVBQVUsUUFBUSxVQUFVLGNBQWMsZ0JBQWdCLE9BQU8sYUFBYSxhQUFhLGVBQWUsV0FBVyxlQUFlLFVBQVUsUUFBUSxZQUFZLFFBQVEsZUFBZSxnQkFBZ0IscUJBQXFCLGNBQWMsYUFBYSxpQkFBaUIsY0FBYyxrQkFBa0IsWUFBWSxRQUFRLFVBQVUsV0FBVyxTQUFTLFFBQVEsa0JBQWtCLFlBQVksUUFBUSxXQUFXLFNBQVMsZ0JBQWdCLFdBQVcsUUFBUSxRQUFRLGFBQWEsU0FBUyxnQkFBZ0IsY0FBYyxhQUFhLGNBQWMsc0JBQXNCLGdCQUFnQixhQUFhLG1CQUFtQixrQkFBa0IsZ0JBQWdCLGlCQUFpQixlQUFlLFdBQVcsVUFBVSxNQUFNLFlBQVksWUFBWSxlQUFlLGNBQWMsZUFBZSxZQUFZLGtCQUFrQixpQkFBaUIsVUFBVSxXQUFXLGFBQWEsY0FBYyxjQUFjLGFBQWEsUUFBUSxRQUFRLFdBQVcsUUFBUSxZQUFZLFdBQVcsZUFBZSxpQkFBaUIsY0FBYyxpQkFBaUIsYUFBYSxpQkFBaUIsYUFBYSx5QkFBeUIsWUFBWSxhQUFhLHVCQUF1QixZQUFZLG1CQUFtQixpQkFBaUIsY0FBYyxrQkFBa0IsZUFBZSxvQkFBb0IscUJBQXFCLHdCQUF3QixZQUFZLFdBQVcsZUFBZSxjQUFjLGFBQWEsY0FBYyxlQUFlLGVBQWUsV0FBVyxlQUFlLGFBQWEsY0FBYyxrQkFBa0IsZUFBZSxnQkFBZ0IsWUFBWSxpQkFBaUIsZUFBZSxlQUFlLGFBQWEsYUFBYSxxQkFBcUIsZUFBZSxXQUFXLGdCQUFnQixrQkFBa0IsZ0JBQWdCLGFBQWEsZ0JBQWdCLGtCQUFrQixjQUFjLGFBQWEsY0FBYyxlQUFlLGVBQWUsdUJBQXVCLFdBQVcsa0JBQWtCLGNBQWMsaUJBQWlCLGtCQUFrQixpQkFBaUIsc0JBQXNCLFVBQVUsMEJBQTBCLG9CQUFvQixtQkFBbUIsaUJBQWlCLGFBQWEsVUFBVSxRQUFRLFlBQVksWUFBWSxhQUFhLFVBQVUsU0FBUyxpQkFBaUIsY0FBYyxZQUFZLFNBQVMsaUJBQWlCLHVCQUF1QixVQUFVLGlCQUFpQixRQUFRLGFBQWEsVUFBVSxRQUFRLGVBQWUsVUFBVSxXQUFXLFVBQVUsdUJBQXVCLFdBQVcsaUJBQWlCLGNBQWMsZUFBZSxhQUFhLFdBQVcsU0FBUyxXQUFXLFVBQVUsV0FBVyxPQUFPLGFBQWEsZUFBZSxRQUFRLGNBQWMsUUFBUSxnQkFBZ0Isc0JBQXNCLFVBQVUsUUFBUSxvQkFBb0IsU0FBUyxxQkFBcUIsV0FBVyxpQkFBaUIsWUFBWSxnQkFBZ0IsYUFBYSxRQUFRLG1CQUFtQixTQUFTLFVBQVUscUJBQXFCLHdCQUF3QixlQUFlLGtCQUFrQiwwQkFBMEIsMEJBQTBCLGlCQUFpQixTQUFTLFNBQVMsYUFBYSxZQUFZLFlBQVksYUFBYSxVQUFVLFlBQVksYUFBYSxVQUFVLGFBQWEsa0JBQWtCLGNBQWMsbUJBQW1CLGtCQUFrQixtQkFBbUIsaUJBQWlCLGtCQUFrQixTQUFTLFFBQVEsY0FBYyxhQUFhLFdBQVcsVUFBVSxhQUFhLE9BQU8sZUFBZSxXQUFXLHVCQUF1Qix3QkFBd0Isc0JBQXNCLG1CQUFtQixPQUFPLFFBQVEsZUFBZSxZQUFZLGVBQWUsZUFBZSxjQUFjLFlBQVksU0FBUyxVQUFVLFVBQVUsdUJBQXVCLGFBQWEsUUFBUSxjQUFjLFNBQVMsaUJBQWlCLFVBQVUsZUFBZSxXQUFXLGtCQUFrQixvQkFBb0IsMkJBQTJCLGtCQUFrQix5QkFBeUIsWUFBWSxXQUFXLFdBQVcsb0JBQW9CLGdCQUFnQixhQUFhLFVBQVUsWUFBWSxlQUFlLFdBQVcsZUFBZSxXQUFXLG9CQUFvQixnQkFBZ0IsY0FBYyxZQUFZLG9CQUFvQixzQkFBc0IsVUFBVSxjQUFjLG1CQUFtQixjQUFjLGVBQWUsZ0JBQWdCLGNBQWMsNEJBQTRCLGlCQUFpQixhQUFhLG9CQUFvQixnQkFBZ0IsYUFBYSxtQkFBbUIsY0FBYyxrQkFBa0IsY0FBYyxhQUFhLGtCQUFrQixpQkFBaUIsWUFBWSxrQkFBa0Isa0JBQWtCLFdBQVcsYUFBYSxZQUFZLGdCQUFnQixlQUFlLHNCQUFzQixvQkFBb0IsZUFBZSxrQkFBa0IsZUFBZSxhQUFhLGVBQWUsZUFBZSxpQkFBaUIsZ0JBQWdCLGtCQUFrQixtQkFBbUIsaUJBQWlCLGNBQWMsb0JBQW9CLHFCQUFxQixhQUFhLG1CQUFtQixjQUFjLGVBQWUsZUFBZSxlQUFlLFlBQVksYUFBYSxtQkFBbUIsZUFBZSxDQUFDLEVBQUUsWUFBWSxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsWUFBWSxVQUFVLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtubk4sVUFBVSxvQkFBQUEsUUFBVSxNQUFNLENBQUMsUUFBUSxPQUFPLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUszQyxPQUFPLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsSUFBSSxVQUFVLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtsRixZQUFZLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLdEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDNUIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUs1QixhQUFhLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLdkIsc0JBQXNCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLaEMsU0FBUyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS25CLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLElBQzVCLE1BQU0sb0JBQUFBLFFBQVU7QUFBQSxJQUNoQixRQUFRLG9CQUFBQSxRQUFVO0FBQUEsSUFDbEIsS0FBSyxvQkFBQUEsUUFBVTtBQUFBLEVBQ2pCO0FBRUEsV0FBUyxpQkFBaUIsV0FBVyxPQUFPO0FBQzFDLFFBQUksZ0JBQWdCLGtCQUFPLFNBQVMsV0FBVyxLQUFLO0FBQ3BELFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxhQUFhLFNBQVM7QUFDN0IsUUFBSSxZQUFZLFlBQVksTUFBTSxRQUFRckIsb0JBQW1CLGtCQUFPLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLGFBQWE7QUFDcEcsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLG1CQUFtQixPQUFPO0FBQ2pDLFFBQUlzQixnQkFBZSxTQUFTUixRQUFPLFNBQVMsS0FBSyxLQUFLLFVBQVU7QUFDaEUsUUFBSSxxQkFBcUIsU0FBUyxZQUFZLFdBQVcsS0FBSyxLQUFLLEVBQUU7QUFFckUsUUFBSSxDQUFDUSxpQkFBZ0IsQ0FBQyxvQkFBb0I7QUFDeEMsY0FBUSxLQUFLLHVFQUF1RSxrRkFBa0YsT0FBT1IsU0FBUSxJQUFJLElBQUksZUFBZSxPQUFPLE9BQU8sR0FBRyxDQUFDO0FBQUEsSUFDaE87QUFBQSxFQUNGOzs7QUVwU0EsTUFBQVMsa0JBQWdDO0FBQ2hDLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7OztBQ3dCdkIsTUFBQUMsa0JBQXlEO0FBQ3pELE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7OztBQ1R2QixNQUFBQyxrQkFBMEI7QUFDMUIsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLG9CQUE2QjtBQXRDN0IsV0FBU0MsVUFBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxVQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLFdBQVNFLGlCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxtQkFBa0IsUUFBUSxPQUFPO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUFFLFVBQUksYUFBYSxNQUFNLENBQUM7QUFBRyxpQkFBVyxhQUFhLFdBQVcsY0FBYztBQUFPLGlCQUFXLGVBQWU7QUFBTSxVQUFJLFdBQVc7QUFBWSxtQkFBVyxXQUFXO0FBQU0sYUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUU1VCxXQUFTQyxjQUFhLGFBQWEsWUFBWSxhQUFhO0FBQUUsUUFBSTtBQUFZLE1BQUFELG1CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUFHLFFBQUk7QUFBYSxNQUFBQSxtQkFBa0IsYUFBYSxXQUFXO0FBQUcsV0FBTztBQUFBLEVBQWE7QUFFdE4sV0FBU0UsV0FBVSxVQUFVLFlBQVk7QUFBRSxRQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUFFLFlBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLElBQUc7QUFBRSxhQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFHLFFBQUk7QUFBWSxNQUFBQyxpQkFBZ0IsVUFBVSxVQUFVO0FBQUEsRUFBRztBQUVoWSxXQUFTQSxpQkFBZ0IsR0FBRyxHQUFHO0FBQUUsSUFBQUEsbUJBQWtCLE9BQU8sa0JBQWtCLFNBQVNBLGtCQUFnQkMsSUFBR0MsSUFBRztBQUFFLE1BQUFELEdBQUUsWUFBWUM7QUFBRyxhQUFPRDtBQUFBLElBQUc7QUFBRyxXQUFPRCxpQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFBRztBQUV6SyxXQUFTRyxjQUFhLFNBQVM7QUFBRSxRQUFJLDRCQUE0QkMsMkJBQTBCO0FBQUcsV0FBTyxTQUFTLHVCQUF1QjtBQUFFLFVBQUksUUFBUUMsaUJBQWdCLE9BQU8sR0FBRztBQUFRLFVBQUksMkJBQTJCO0FBQUUsWUFBSSxZQUFZQSxpQkFBZ0IsSUFBSSxFQUFFO0FBQWEsaUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFBRyxPQUFPO0FBQUUsaUJBQVMsTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBRSxhQUFPQyw0QkFBMkIsTUFBTSxNQUFNO0FBQUEsSUFBRztBQUFBLEVBQUc7QUFFeGEsV0FBU0EsNEJBQTJCQyxPQUFNLE1BQU07QUFBRSxRQUFJLFNBQVNiLFVBQVEsSUFBSSxNQUFNLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFBRSxhQUFPO0FBQUEsSUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLElBQUc7QUFBRSxXQUFPYyx3QkFBdUJELEtBQUk7QUFBQSxFQUFHO0FBRS9SLFdBQVNDLHdCQUF1QkQsT0FBTTtBQUFFLFFBQUlBLFVBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxlQUFlLDJEQUEyRDtBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFckssV0FBU0gsNkJBQTRCO0FBQUUsUUFBSSxPQUFPLFlBQVksZUFBZSxDQUFDLFFBQVE7QUFBVyxhQUFPO0FBQU8sUUFBSSxRQUFRLFVBQVU7QUFBTSxhQUFPO0FBQU8sUUFBSSxPQUFPLFVBQVU7QUFBWSxhQUFPO0FBQU0sUUFBSTtBQUFFLGNBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxVQUFVLFNBQVMsQ0FBQyxHQUFHLFdBQVk7QUFBQSxNQUFDLENBQUMsQ0FBQztBQUFHLGFBQU87QUFBQSxJQUFNLFNBQVMsR0FBRztBQUFFLGFBQU87QUFBQSxJQUFPO0FBQUEsRUFBRTtBQUV4VSxXQUFTQyxpQkFBZ0IsR0FBRztBQUFFLElBQUFBLG1CQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQixTQUFTQSxrQkFBZ0JKLElBQUc7QUFBRSxhQUFPQSxHQUFFLGFBQWEsT0FBTyxlQUFlQSxFQUFDO0FBQUEsSUFBRztBQUFHLFdBQU9JLGlCQUFnQixDQUFDO0FBQUEsRUFBRztBQUU1TSxXQUFTSSxrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQWtCek0sTUFBSSxrQkFBa0I7QUFBQSxJQUMzQixPQUFPO0FBQUEsSUFDUCxRQUFRO0FBQUEsRUFDVjtBQUNPLE1BQUksbUJBQW1CLE9BQU8sZUFBZTtBQUM3QyxNQUFJLFlBQXlCLHlCQUFVLFlBQVk7QUFDeEQsSUFBQVYsV0FBVVcsWUFBVyxVQUFVO0FBRS9CLFFBQUksU0FBU1AsY0FBYU8sVUFBUztBQUVuQyxhQUFTQSxXQUFVLE9BQU87QUFDeEIsVUFBSTtBQUVKLE1BQUFkLGlCQUFnQixNQUFNYyxVQUFTO0FBRS9CLGNBQVEsT0FBTyxLQUFLLE1BQU0sS0FBSztBQUUvQixNQUFBRCxrQkFBZ0JELHdCQUF1QixLQUFLLEdBQUcsY0FBYyxJQUFJO0FBRWpFLFVBQUksT0FBTyxXQUFXO0FBQWEsZUFBT0YsNEJBQTJCLEtBQUs7QUFFMUUsVUFBSSxTQUFTLE1BQU0sTUFBTTtBQUN6QixZQUFNLGFBQWEsU0FBUyxjQUFjLEtBQUs7QUFDL0MsWUFBTSxXQUFXLFFBQVEsWUFBWTtBQUVyQyxVQUFJLFVBQVUsTUFBTTtBQUVsQixpQkFBUyxLQUFLLFlBQVksTUFBTSxVQUFVO0FBQUEsTUFDNUMsT0FBTztBQUVMLFlBQUksVUFBVSxPQUFPLFNBQ2pCSyxZQUFXLE9BQU87QUFDdEIsZ0JBQVEsc0JBQXNCLGdCQUFnQkEsU0FBUSxHQUFHLE1BQU0sVUFBVTtBQUFBLE1BQzNFO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxJQUFBYixjQUFhWSxZQUFXLENBQUM7QUFBQSxNQUN2QixLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsb0JBQW9CO0FBQ2xDLGFBQUssZ0JBQWdCLEtBQUssVUFBVTtBQUFBLE1BQ3RDO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsdUJBQXVCO0FBQ3JDLFlBQUk7QUFFSixhQUFLLG1CQUFtQixLQUFLLGdCQUFnQixRQUFRLHFCQUFxQixVQUFVLGlCQUFpQixZQUFZO0FBQy9HLGVBQUssV0FBVyxXQUFXLFlBQVksS0FBSyxVQUFVO0FBQUEsUUFDeEQ7QUFFQSxhQUFLLGdCQUFnQixJQUFJO0FBQUEsTUFDM0I7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxnQkFBZ0IsS0FBSztBQUNuQyxZQUFJLEtBQUssTUFBTSxXQUFXO0FBQ3hCLGVBQUssTUFBTSxVQUFVLEdBQUc7QUFBQSxRQUMxQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBU0UsVUFBUztBQUN2QixlQUFPLEtBQUssYUFBMEIsb0RBQWEsS0FBSyxNQUFNLFVBQVUsS0FBSyxVQUFVLElBQUk7QUFBQSxNQUM3RjtBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBRUYsV0FBT0Y7QUFBQSxFQUNULEVBQUUseUJBQVM7QUFDWCxZQUFVLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUlwQixVQUFVLG9CQUFBRyxRQUFVLEtBQUs7QUFBQSxJQUN6QixRQUFRLG9CQUFBQSxRQUFVLE1BQU07QUFBQSxNQUN0QixTQUFTLG9CQUFBQSxRQUFVLElBQUk7QUFBQSxNQUN2QixVQUFVLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxVQUFVLE9BQU8sQ0FBQyxFQUFFO0FBQUEsSUFDakQsQ0FBQztBQUFBLElBQ0QsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLEVBQ3ZCOzs7QUNqRkEsTUFBQUMsa0JBQWlDO0FBQ2pDLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7QUF6Q3ZCLFdBQVNDLFVBQVEsS0FBSztBQUFFO0FBQTJCLFFBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxPQUFPLGFBQWEsVUFBVTtBQUFFLE1BQUFBLFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU8sT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRyxPQUFPO0FBQUUsTUFBQUQsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBT0EsUUFBTyxPQUFPLFdBQVcsY0FBY0EsS0FBSSxnQkFBZ0IsVUFBVUEsU0FBUSxPQUFPLFlBQVksV0FBVyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHO0FBQUUsV0FBT0QsVUFBUSxHQUFHO0FBQUEsRUFBRztBQUV6WCxNQUFJRSxlQUFZLENBQUMsWUFBWSxTQUFTLGFBQWEsbUJBQW1CLFlBQVk7QUFFbEYsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFbFQsV0FBU0MsaUJBQWdCLFVBQVUsYUFBYTtBQUFFLFFBQUksRUFBRSxvQkFBb0IsY0FBYztBQUFFLFlBQU0sSUFBSSxVQUFVLG1DQUFtQztBQUFBLElBQUc7QUFBQSxFQUFFO0FBRXhKLFdBQVNDLG1CQUFrQixRQUFRLE9BQU87QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUUsVUFBSSxhQUFhLE1BQU0sQ0FBQztBQUFHLGlCQUFXLGFBQWEsV0FBVyxjQUFjO0FBQU8saUJBQVcsZUFBZTtBQUFNLFVBQUksV0FBVztBQUFZLG1CQUFXLFdBQVc7QUFBTSxhQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUssVUFBVTtBQUFBLElBQUc7QUFBQSxFQUFFO0FBRTVULFdBQVNDLGNBQWEsYUFBYSxZQUFZLGFBQWE7QUFBRSxRQUFJO0FBQVksTUFBQUQsbUJBQWtCLFlBQVksV0FBVyxVQUFVO0FBQUcsUUFBSTtBQUFhLE1BQUFBLG1CQUFrQixhQUFhLFdBQVc7QUFBRyxXQUFPO0FBQUEsRUFBYTtBQUV0TixXQUFTRSxXQUFVLFVBQVUsWUFBWTtBQUFFLFFBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQUUsWUFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsSUFBRztBQUFFLGFBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRSxDQUFDO0FBQUcsUUFBSTtBQUFZLE1BQUFDLGlCQUFnQixVQUFVLFVBQVU7QUFBQSxFQUFHO0FBRWhZLFdBQVNBLGlCQUFnQixHQUFHLEdBQUc7QUFBRSxJQUFBQSxtQkFBa0IsT0FBTyxrQkFBa0IsU0FBU0Esa0JBQWdCQyxJQUFHQyxJQUFHO0FBQUUsTUFBQUQsR0FBRSxZQUFZQztBQUFHLGFBQU9EO0FBQUEsSUFBRztBQUFHLFdBQU9ELGlCQUFnQixHQUFHLENBQUM7QUFBQSxFQUFHO0FBRXpLLFdBQVNHLGNBQWEsU0FBUztBQUFFLFFBQUksNEJBQTRCQywyQkFBMEI7QUFBRyxXQUFPLFNBQVMsdUJBQXVCO0FBQUUsVUFBSSxRQUFRQyxpQkFBZ0IsT0FBTyxHQUFHO0FBQVEsVUFBSSwyQkFBMkI7QUFBRSxZQUFJLFlBQVlBLGlCQUFnQixJQUFJLEVBQUU7QUFBYSxpQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUFHLE9BQU87QUFBRSxpQkFBUyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFFLGFBQU9DLDRCQUEyQixNQUFNLE1BQU07QUFBQSxJQUFHO0FBQUEsRUFBRztBQUV4YSxXQUFTQSw0QkFBMkJDLE9BQU0sTUFBTTtBQUFFLFFBQUksU0FBU2pCLFVBQVEsSUFBSSxNQUFNLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFBRSxhQUFPO0FBQUEsSUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLElBQUc7QUFBRSxXQUFPa0Isd0JBQXVCRCxLQUFJO0FBQUEsRUFBRztBQUUvUixXQUFTQyx3QkFBdUJELE9BQU07QUFBRSxRQUFJQSxVQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksZUFBZSwyREFBMkQ7QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXJLLFdBQVNILDZCQUE0QjtBQUFFLFFBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsYUFBTztBQUFPLFFBQUksUUFBUSxVQUFVO0FBQU0sYUFBTztBQUFPLFFBQUksT0FBTyxVQUFVO0FBQVksYUFBTztBQUFNLFFBQUk7QUFBRSxjQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLENBQUMsR0FBRyxXQUFZO0FBQUEsTUFBQyxDQUFDLENBQUM7QUFBRyxhQUFPO0FBQUEsSUFBTSxTQUFTLEdBQUc7QUFBRSxhQUFPO0FBQUEsSUFBTztBQUFBLEVBQUU7QUFFeFUsV0FBU0MsaUJBQWdCLEdBQUc7QUFBRSxJQUFBQSxtQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsU0FBU0Esa0JBQWdCSixJQUFHO0FBQUUsYUFBT0EsR0FBRSxhQUFhLE9BQU8sZUFBZUEsRUFBQztBQUFBLElBQUc7QUFBRyxXQUFPSSxpQkFBZ0IsQ0FBQztBQUFBLEVBQUc7QUFFNU0sV0FBU0ksa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUFhek0sTUFBSSxvQkFBaUMseUJBQVUsWUFBWTtBQUNoRSxJQUFBVixXQUFVVyxvQkFBbUIsVUFBVTtBQUV2QyxRQUFJLFNBQVNQLGNBQWFPLGtCQUFpQjtBQUUzQyxhQUFTQSxxQkFBb0I7QUFDM0IsVUFBSTtBQUVKLE1BQUFkLGlCQUFnQixNQUFNYyxrQkFBaUI7QUFFdkMsZUFBUyxPQUFPLFVBQVUsUUFBUSxPQUFPLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxRQUFRO0FBQ3ZGLGFBQUssSUFBSSxJQUFJLFVBQVUsSUFBSTtBQUFBLE1BQzdCO0FBRUEsY0FBUSxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBRXJELE1BQUFELGtCQUFnQkQsd0JBQXVCLEtBQUssR0FBRyxXQUFXLE1BQU07QUFFaEUsTUFBQUMsa0JBQWdCRCx3QkFBdUIsS0FBSyxHQUFHLG9CQUFvQixXQUFZO0FBQzdFLDhCQUFzQixXQUFZO0FBRWhDLGNBQUksTUFBTSxTQUFTO0FBQ2pCLGtCQUFNLE1BQU0sZ0JBQWdCO0FBQUEsVUFDOUI7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHdCQUF1QixLQUFLLEdBQUcsaUJBQWlCLFNBQVUsS0FBSztBQUM3RSxjQUFNLFVBQVU7QUFFaEIsWUFBSSxNQUFNLE1BQU0sWUFBWTtBQUMxQixnQkFBTSxNQUFNLFdBQVcsR0FBRztBQUFBLFFBQzVCO0FBQUEsTUFDRixDQUFDO0FBRUQsYUFBTztBQUFBLElBQ1Q7QUFFQSxJQUFBVixjQUFhWSxvQkFBbUIsQ0FBQztBQUFBLE1BQy9CLEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxvQkFBb0I7QUFDbEMsaUJBQVMsS0FBSyxVQUFVLElBQUksMEJBQTBCO0FBQ3RELGVBQU8saUJBQWlCLFVBQVUsS0FBSyxnQkFBZ0I7QUFBQSxNQUN6RDtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLHVCQUF1QjtBQUNyQyxpQkFBUyxLQUFLLFVBQVUsT0FBTywwQkFBMEI7QUFDekQsZUFBTyxvQkFBb0IsVUFBVSxLQUFLLGdCQUFnQjtBQUFBLE1BQzVEO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVNDLFVBQVM7QUFDdkIsWUFBSSxjQUFjLEtBQUssT0FDbkIsV0FBVyxZQUFZLFVBQ3ZCLFFBQVEsWUFBWSxPQUNwQixZQUFZLFlBQVksV0FDeEIsa0JBQWtCLFlBQVksaUJBQzlCLGFBQWEsWUFBWSxZQUN6QixPQUFPakIsNEJBQXlCLGFBQWFGLFlBQVM7QUFFMUQsWUFBSSxjQUFVLG9CQUFBb0IsU0FBVyxxQkFBcUIsU0FBUztBQUN2RCxZQUFJO0FBRUosWUFBSSxPQUFPO0FBQ1QsMEJBQWdCLElBQWMsT0FBTztBQUFBLFlBQ25DLFdBQVc7QUFBQSxVQUNiLEdBQUcsS0FBSztBQUFBLFFBQ1Y7QUFFQSxlQUFPLElBQWMsT0FBT25CLFlBQVM7QUFBQSxVQUNuQyxXQUFXO0FBQUEsVUFDWCxLQUFLLEtBQUs7QUFBQSxRQUNaLEdBQUcsSUFBSSxHQUFHLGVBQWUsUUFBUTtBQUFBLE1BQ25DO0FBQUEsSUFDRixDQUFDLENBQUM7QUFFRixXQUFPaUI7QUFBQSxFQUNULEVBQUUseUJBQVM7QUFDWCxvQkFBa0IsWUFBWTtBQUFBLElBQzVCLFdBQVcsb0JBQUFHLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDNUIsaUJBQWlCLG9CQUFBQSxRQUFVLEtBQUs7QUFBQSxJQUNoQyxVQUFVLG9CQUFBQSxRQUFVO0FBQUEsSUFDcEIsT0FBTyxvQkFBQUEsUUFBVTtBQUFBLElBQ2pCLFlBQVksb0JBQUFBLFFBQVU7QUFBQSxFQUN4Qjs7O0FGbElBLFdBQVNDLFVBQVEsS0FBSztBQUFFO0FBQTJCLFFBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxPQUFPLGFBQWEsVUFBVTtBQUFFLE1BQUFBLFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU8sT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRyxPQUFPO0FBQUUsTUFBQUQsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBT0EsUUFBTyxPQUFPLFdBQVcsY0FBY0EsS0FBSSxnQkFBZ0IsVUFBVUEsU0FBUSxPQUFPLFlBQVksV0FBVyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHO0FBQUUsV0FBT0QsVUFBUSxHQUFHO0FBQUEsRUFBRztBQUV6WCxNQUFJRSxlQUFZLENBQUMsWUFBWSxhQUFhLG1CQUFtQixXQUFXLFNBQVMsU0FBUyxTQUFTO0FBRW5HLFdBQVNDLFVBQVFDLFNBQVEsZ0JBQWdCO0FBQUUsUUFBSUMsUUFBTyxPQUFPLEtBQUtELE9BQU07QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxVQUFVLE9BQU8sc0JBQXNCQSxPQUFNO0FBQUcsVUFBSSxnQkFBZ0I7QUFBRSxrQkFBVSxRQUFRLE9BQU8sU0FBVSxLQUFLO0FBQUUsaUJBQU8sT0FBTyx5QkFBeUJBLFNBQVEsR0FBRyxFQUFFO0FBQUEsUUFBWSxDQUFDO0FBQUEsTUFBRztBQUFFLE1BQUFDLE1BQUssS0FBSyxNQUFNQSxPQUFNLE9BQU87QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXhWLFdBQVNDLGdCQUFjLFFBQVE7QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsVUFBSSxTQUFTLFVBQVUsQ0FBQyxLQUFLLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFVBQUksSUFBSSxHQUFHO0FBQUUsUUFBQUgsVUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxVQUFBSSxrQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRyxXQUFXLE9BQU8sMkJBQTJCO0FBQUUsZUFBTyxpQkFBaUIsUUFBUSxPQUFPLDBCQUEwQixNQUFNLENBQUM7QUFBQSxNQUFHLE9BQU87QUFBRSxRQUFBSixVQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxpQkFBTyxlQUFlLFFBQVEsS0FBSyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFcmhCLFdBQVNLLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBRWxULFdBQVNDLGlCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxtQkFBa0IsUUFBUSxPQUFPO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUFFLFVBQUksYUFBYSxNQUFNLENBQUM7QUFBRyxpQkFBVyxhQUFhLFdBQVcsY0FBYztBQUFPLGlCQUFXLGVBQWU7QUFBTSxVQUFJLFdBQVc7QUFBWSxtQkFBVyxXQUFXO0FBQU0sYUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUU1VCxXQUFTQyxjQUFhLGFBQWEsWUFBWSxhQUFhO0FBQUUsUUFBSTtBQUFZLE1BQUFELG1CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUFHLFFBQUk7QUFBYSxNQUFBQSxtQkFBa0IsYUFBYSxXQUFXO0FBQUcsV0FBTztBQUFBLEVBQWE7QUFFdE4sV0FBU0UsV0FBVSxVQUFVLFlBQVk7QUFBRSxRQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUFFLFlBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLElBQUc7QUFBRSxhQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFHLFFBQUk7QUFBWSxNQUFBQyxpQkFBZ0IsVUFBVSxVQUFVO0FBQUEsRUFBRztBQUVoWSxXQUFTQSxpQkFBZ0IsR0FBRyxHQUFHO0FBQUUsSUFBQUEsbUJBQWtCLE9BQU8sa0JBQWtCLFNBQVNBLGtCQUFnQkMsSUFBR0MsSUFBRztBQUFFLE1BQUFELEdBQUUsWUFBWUM7QUFBRyxhQUFPRDtBQUFBLElBQUc7QUFBRyxXQUFPRCxpQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFBRztBQUV6SyxXQUFTRyxjQUFhLFNBQVM7QUFBRSxRQUFJLDRCQUE0QkMsMkJBQTBCO0FBQUcsV0FBTyxTQUFTLHVCQUF1QjtBQUFFLFVBQUksUUFBUUMsaUJBQWdCLE9BQU8sR0FBRztBQUFRLFVBQUksMkJBQTJCO0FBQUUsWUFBSSxZQUFZQSxpQkFBZ0IsSUFBSSxFQUFFO0FBQWEsaUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFBRyxPQUFPO0FBQUUsaUJBQVMsTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBRSxhQUFPQyw0QkFBMkIsTUFBTSxNQUFNO0FBQUEsSUFBRztBQUFBLEVBQUc7QUFFeGEsV0FBU0EsNEJBQTJCQyxPQUFNLE1BQU07QUFBRSxRQUFJLFNBQVN0QixVQUFRLElBQUksTUFBTSxZQUFZLE9BQU8sU0FBUyxhQUFhO0FBQUUsYUFBTztBQUFBLElBQU0sV0FBVyxTQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksVUFBVSwwREFBMEQ7QUFBQSxJQUFHO0FBQUUsV0FBT3VCLHdCQUF1QkQsS0FBSTtBQUFBLEVBQUc7QUFFL1IsV0FBU0Msd0JBQXVCRCxPQUFNO0FBQUUsUUFBSUEsVUFBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLGVBQWUsMkRBQTJEO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUVySyxXQUFTSCw2QkFBNEI7QUFBRSxRQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGFBQU87QUFBTyxRQUFJLFFBQVEsVUFBVTtBQUFNLGFBQU87QUFBTyxRQUFJLE9BQU8sVUFBVTtBQUFZLGFBQU87QUFBTSxRQUFJO0FBQUUsY0FBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxDQUFDLEdBQUcsV0FBWTtBQUFBLE1BQUMsQ0FBQyxDQUFDO0FBQUcsYUFBTztBQUFBLElBQU0sU0FBUyxHQUFHO0FBQUUsYUFBTztBQUFBLElBQU87QUFBQSxFQUFFO0FBRXhVLFdBQVNDLGlCQUFnQixHQUFHO0FBQUUsSUFBQUEsbUJBQWtCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLFNBQVNBLGtCQUFnQkosSUFBRztBQUFFLGFBQU9BLEdBQUUsYUFBYSxPQUFPLGVBQWVBLEVBQUM7QUFBQSxJQUFHO0FBQUcsV0FBT0ksaUJBQWdCLENBQUM7QUFBQSxFQUFHO0FBRTVNLFdBQVNiLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBbUJoTixNQUFJLDBCQUEwQjtBQUFBLElBQzVCLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNSO0FBQ08sTUFBSSxZQUFZLE9BQU8sdUJBQXVCO0FBQ3JELE1BQUksZUFBZTtBQUFBLElBQ2pCLFNBQVM7QUFBQSxJQUNULE1BQU0sTUFBTTtBQUFBLEVBQ2Q7QUFDQSxNQUFJaUIseUJBQXdCO0FBQUEsSUFDMUIsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLHlCQUF5QjtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSTNCLEtBQUs7QUFBQSxJQUNMLE1BQU07QUFBQTtBQUFBO0FBQUEsSUFHTixTQUFTO0FBQUE7QUFBQSxJQUVULFlBQVk7QUFBQSxFQUNkO0FBQ08sTUFBSSxhQUEwQix5QkFBVSxZQUFZO0FBQ3pELElBQUFWLFdBQVVXLGFBQVksVUFBVTtBQUVoQyxRQUFJLFNBQVNQLGNBQWFPLFdBQVU7QUFFcEMsYUFBU0EsY0FBYTtBQUNwQixVQUFJO0FBRUosTUFBQWQsaUJBQWdCLE1BQU1jLFdBQVU7QUFFaEMsZUFBUyxPQUFPLFVBQVUsUUFBUSxPQUFPLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxRQUFRO0FBQ3ZGLGFBQUssSUFBSSxJQUFJLFVBQVUsSUFBSTtBQUFBLE1BQzdCO0FBRUEsY0FBUSxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBRXJELE1BQUFsQixrQkFBZ0JnQix3QkFBdUIsS0FBSyxHQUFHLGNBQWMsS0FBSztBQUVsRSxNQUFBaEIsa0JBQWdCZ0Isd0JBQXVCLEtBQUssR0FBRyxVQUFVLElBQUk7QUFFN0QsTUFBQWhCLGtCQUFnQmdCLHdCQUF1QixLQUFLLEdBQUcsV0FBVyxJQUFJO0FBRTlELE1BQUFoQixrQkFBZ0JnQix3QkFBdUIsS0FBSyxHQUFHLGFBQWEsTUFBTTtBQUVsRSxNQUFBaEIsa0JBQWdCZ0Isd0JBQXVCLEtBQUssR0FBRyxTQUFTO0FBQUEsUUFDdEQsU0FBUztBQUFBLFFBQ1QsVUFBVTtBQUFBLFFBQ1Ysb0JBQW9CLE1BQU0sTUFBTTtBQUFBLFFBQ2hDLGVBQWU7QUFBQSxRQUNmLGFBQWE7QUFBQSxRQUNiLElBQUksTUFBTSxNQUFNLE1BQU0sZ0JBQWdCLEVBQUU7QUFBQSxNQUMxQyxDQUFDO0FBRUQsTUFBQWhCLGtCQUFnQmdCLHdCQUF1QixLQUFLLEdBQUcseUJBQXlCLFdBQVk7QUFDbEYsWUFBSSxNQUFNLFdBQVc7QUFDbkIsZ0JBQU0sWUFBWSxhQUFhLE1BQU0sU0FBUztBQUFBLFFBQ2hEO0FBQUEsTUFDRixDQUFDO0FBRUQsTUFBQWhCLGtCQUFnQmdCLHdCQUF1QixLQUFLLEdBQUcsY0FBYyxXQUFZO0FBSXZFLFlBQUksU0FBUyxLQUFLLFNBQVMsTUFBTSxNQUFNLE1BQU0sT0FBTztBQUVsRCxnQkFBTSxZQUFZO0FBQUEsUUFDcEIsT0FBTztBQUNMLGNBQUksTUFBTSxNQUFNLFNBQVM7QUFFdkIsa0NBQXNCLE1BQU0sVUFBVTtBQUFBLFVBQ3hDO0FBQUEsUUFDRjtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFoQixrQkFBZ0JnQix3QkFBdUIsS0FBSyxHQUFHLGlCQUFpQixTQUFVLEtBQUs7QUFDN0UsY0FBTSxVQUFVO0FBR2hCLFlBQUksT0FBTyxNQUFNO0FBQ2YsZ0JBQU0sU0FBUztBQUFBLFlBQ2IsZUFBZTtBQUFBLFlBQ2YsYUFBYTtBQUFBLFVBQ2YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBaEIsa0JBQWdCZ0Isd0JBQXVCLEtBQUssR0FBRyxlQUFlLFdBQVk7QUFDeEUsWUFBSSxDQUFDLE1BQU0sV0FBVztBQUNwQixnQkFBTSxZQUFZLFdBQVcsV0FBWTtBQUN2QywrQkFBbUIsV0FBWTtBQUM3QixxQkFBTyxNQUFNLFNBQVM7QUFBQSxnQkFDcEIsU0FBUztBQUFBLGNBQ1gsQ0FBQztBQUFBLFlBQ0gsQ0FBQztBQUFBLFVBQ0gsR0FBRyxhQUFhLE1BQU0sTUFBTSxLQUFLLENBQUM7QUFBQSxRQUNwQztBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFoQixrQkFBZ0JnQix3QkFBdUIsS0FBSyxHQUFHLG1CQUFtQixXQUFZO0FBQzVFLFlBQUksb0JBQW9CLE1BQU0sTUFBTTtBQUVwQyxZQUFJLENBQUMsTUFBTSxVQUFVLENBQUMsTUFBTSxTQUFTO0FBQ25DO0FBQUEsUUFDRjtBQUVBLFlBQUksdUJBQXVCLG9CQUFvQjtBQUFBLFVBQzdDLFFBQVEsTUFBTTtBQUFBLFVBQ2QsU0FBUyxNQUFNO0FBQUEsVUFDZixVQUFVO0FBQUEsVUFDVixRQUFRO0FBQUE7QUFBQSxVQUVSLGFBQWE7QUFBQSxZQUNYLFlBQVk7QUFBQSxZQUNaLGFBQWE7QUFBQSxVQUNmO0FBQUEsUUFDRixDQUFDLEdBQ0dHLFlBQVcscUJBQXFCLFVBQ2hDLE9BQU8scUJBQXFCLE1BQzVCLE1BQU0scUJBQXFCLEtBQzNCLFFBQVEscUJBQXFCO0FBUWpDLFlBQUksY0FBYyxTQUFTLGdCQUFnQixlQUFlLE9BQU87QUFDakUsWUFBSSxnQkFBZ0IsY0FBYyxJQUFJO0FBQ3RDLFlBQUksZ0JBQWdCO0FBQUEsVUFDbEI7QUFBQSxVQUNBLE1BQU0sZ0JBQWdCLFNBQVM7QUFBQSxVQUMvQixPQUFPLGdCQUFnQixjQUFjLE9BQU8sTUFBTSxRQUFRLGNBQWM7QUFBQSxRQUMxRTtBQUVBLGNBQU0sU0FBUztBQUFBLFVBQ2IsU0FBUztBQUFBLFVBQ1Qsb0JBQW9CQTtBQUFBLFVBQ3BCO0FBQUEsVUFDQSxhQUFhO0FBQUEsUUFDZixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsTUFBQW5CLGtCQUFnQmdCLHdCQUF1QixLQUFLLEdBQUcsZUFBZSxXQUFZO0FBQ3hFLGNBQU0sc0JBQXNCO0FBRTVCLDJCQUFtQixXQUFZO0FBQzdCLGNBQUksTUFBTSxZQUFZO0FBQ3BCLGtCQUFNLFNBQVM7QUFBQSxjQUNiLFNBQVM7QUFBQSxZQUNYLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsTUFBQWhCLGtCQUFnQmdCLHdCQUF1QixLQUFLLEdBQUcsV0FBVyxXQUFZO0FBQ3BFLGNBQU0sU0FBUztBQUFBLFVBQ2IsVUFBVTtBQUFBLFFBQ1osQ0FBQztBQUVELGNBQU0sWUFBWTtBQUFBLE1BQ3BCLENBQUM7QUFFRCxNQUFBaEIsa0JBQWdCZ0Isd0JBQXVCLEtBQUssR0FBRyxVQUFVLFdBQVk7QUFDbkUsY0FBTSxTQUFTO0FBQUEsVUFDYixVQUFVO0FBQUEsUUFDWixDQUFDO0FBRUQsY0FBTSxZQUFZO0FBQUEsTUFDcEIsQ0FBQztBQUVELE1BQUFoQixrQkFBZ0JnQix3QkFBdUIsS0FBSyxHQUFHLGNBQWMsU0FBVSxPQUFPO0FBRzVFLFlBQUksTUFBTSxXQUFXLE1BQU0saUJBQWlCLE1BQU0sVUFBVSxRQUFRLENBQUMsTUFBTSxPQUFPLFNBQVMsTUFBTSxhQUFhLEdBQUc7QUFDL0csY0FBSSxDQUFDLE1BQU0sTUFBTSxVQUFVO0FBQ3pCLGtCQUFNLFlBQVk7QUFBQSxVQUNwQjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLE1BQU0sTUFBTSxZQUFZO0FBQzFCLGdCQUFNLE1BQU0sV0FBVyxLQUFLO0FBQUEsUUFDOUI7QUFBQSxNQUNGLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFWLGNBQWFZLGFBQVksQ0FBQztBQUFBLE1BQ3hCLEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxvQkFBb0I7QUFDbEMsYUFBSyxhQUFhO0FBQUEsTUFDcEI7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyx1QkFBdUI7QUFDckMsYUFBSyxzQkFBc0I7QUFDM0IsYUFBSyxhQUFhO0FBQUEsTUFDcEI7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxtQkFBbUIsV0FBVyxXQUFXO0FBQ3ZELFlBQUksVUFBVSxZQUFZLFNBQVMsS0FBSyxNQUFNLFlBQVksTUFBTTtBQUM5RCxnQ0FBc0IsS0FBSyxVQUFVO0FBQUEsUUFDdkM7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVNFLFVBQVM7QUFDdkIsWUFBSSxTQUFTO0FBRWIsWUFBSSxjQUFjLEtBQUssT0FDbkIsV0FBVyxZQUFZLFVBQ3ZCLFlBQVksWUFBWSxXQUN4QixrQkFBa0IsWUFBWSxpQkFDOUIsVUFBVSxZQUFZLFNBQ3RCLFFBQVEsWUFBWSxPQUNwQixRQUFRLFlBQVksT0FDcEIsVUFBVSxZQUFZLFNBQ3RCLE9BQU9sQiw0QkFBeUIsYUFBYVAsWUFBUztBQUUxRCxZQUFJLGNBQWMsS0FBSyxPQUNuQixjQUFjLFlBQVksYUFDMUIsS0FBSyxZQUFZLElBQ2pCLGdCQUFnQixZQUFZLGVBQzVCLFVBQVUsWUFBWTtBQUMxQixZQUFJLGNBQVUsb0JBQUEwQixTQUFXLGNBQWMsd0JBQXdCLEtBQUssTUFBTSxrQkFBa0IsR0FBRyxTQUFTO0FBQ3hHLFlBQUksb0JBQWdCLG9CQUFBQSxTQUFXLG9CQUFvQixVQUFVSix1QkFBc0IsT0FBTyxJQUFJLE1BQU0sZUFBZTtBQUNuSCxZQUFJO0FBRUosWUFBSSxZQUFZLFdBQVcsUUFBUTtBQUNqQyxvQkFBVSxJQUFjLFdBQVcsTUFBTSxJQUFjLG1CQUFtQmhCLFlBQVM7QUFBQSxZQUNqRixXQUFXO0FBQUEsWUFDWCxPQUFPO0FBQUEsWUFDUCxpQkFBaUIsS0FBSztBQUFBLFlBQ3RCLFlBQVksS0FBSztBQUFBLFlBQ2pCO0FBQUEsWUFDQTtBQUFBLFlBQ0EsTUFBTTtBQUFBLFVBQ1IsR0FBRyxJQUFJLEdBQUcsSUFBYyxPQUFPO0FBQUEsWUFDN0IsT0FBTztBQUFBLFlBQ1AsV0FBVztBQUFBLFVBQ2IsQ0FBQyxHQUFHLElBQWMsbUJBQW1CO0FBQUEsWUFDbkMsVUFBVSxLQUFLO0FBQUEsVUFDakIsR0FBRyxTQUFVLFdBQVc7QUFDdEIsbUJBQU8sSUFBYyxPQUFPO0FBQUEsY0FDMUIsS0FBSztBQUFBLFlBQ1AsR0FBRyxPQUFPO0FBQUEsVUFDWixDQUFDLENBQUMsQ0FBQztBQUFBLFFBQ0w7QUFFQSxZQUFJO0FBQUE7QUFBQSxVQUNKLElBQWMsUUFBUTtBQUFBLFlBQ3BCLEtBQUssU0FBUyxJQUFJcUIsU0FBUTtBQUN4QixxQkFBTyxPQUFPLFNBQVNBO0FBQUEsWUFDekI7QUFBQSxZQUNBLFdBQVc7QUFBQSxZQUNYLGFBQWEsS0FBSztBQUFBLFlBQ2xCLFlBQVksS0FBSztBQUFBLFVBQ25CLEdBQWdCLGtEQUFhLFVBQVV2QixnQkFBYztBQUFBLFlBQ25ELFNBQVMsU0FBU3dCLFNBQVEsR0FBRztBQUMzQixxQkFBTyxRQUFRO0FBRWYsdUJBQVMsTUFBTSxXQUFXLFNBQVMsTUFBTSxRQUFRLENBQUM7QUFBQSxZQUNwRDtBQUFBLFlBQ0EsUUFBUSxTQUFTQyxRQUFPLEdBQUc7QUFDekIscUJBQU8sT0FBTztBQUVkLHVCQUFTLE1BQU0sVUFBVSxTQUFTLE1BQU0sT0FBTyxDQUFDO0FBQUEsWUFDbEQ7QUFBQSxVQUNGLEdBQUcsV0FBVztBQUFBLFlBQ1osb0JBQW9CLEtBQUssTUFBTTtBQUFBLFVBQ2pDLENBQUMsQ0FBQyxDQUFDO0FBQUE7QUFFSCxlQUFPLElBQWMsMEJBQVUsTUFBTSxRQUFRLE9BQU87QUFBQSxNQUN0RDtBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBRUYsV0FBT047QUFBQSxFQUNULEVBQUUseUJBQVM7QUFFWCxFQUFBbEIsa0JBQWdCLFlBQVksZ0JBQWdCO0FBQUEsSUFDMUMsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLElBQ1AsU0FBUztBQUFBLEVBQ1gsQ0FBQztBQUVELGFBQVcsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSXJCLGlCQUFpQixvQkFBQXlCLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUszQixVQUFVLG9CQUFBQSxRQUFVLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUs1QixXQUFXLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLckIsU0FBUyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS25CLFNBQVMsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLGVBQWUsT0FBTyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLakQsT0FBTyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsV0FBVyxNQUFNLENBQUMsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzVDLE9BQU8sb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtqQixJQUFJLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLZCxVQUFVLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxPQUFPLFNBQVMsVUFBVSxNQUFNLENBQUMsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNOUQsWUFBWSxvQkFBQUEsUUFBVTtBQUFBLEVBQ3hCOzs7QUcvWEEsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQWhCdEIsTUFBSUMsZUFBWSxDQUFDLFFBQVEsY0FBYyxTQUFTLFFBQVEsYUFBYSxZQUFZLE9BQU87QUFFeEYsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFjM1MsTUFBSSxhQUFhLFNBQVNDLFlBQVdDLFFBQU07QUFDaEQsUUFBSSxZQUFZQSxPQUFLLE1BQ2pCLE9BQU8sY0FBYyxTQUFTLHFCQUFxQixXQUNuRCxpQkFBaUJBLE9BQUssWUFBWSxHQUNsQyxZQUFZLG1CQUFtQixTQUFTLFNBQVMsZ0JBQ2pELFFBQVFBLE9BQUssT0FDYkMsUUFBT0QsT0FBSyxNQUNaLFlBQVlBLE9BQUssV0FDakIsZ0JBQWdCQSxPQUFLLFVBQ3JCRSxZQUFXLGtCQUFrQixTQUFTLFFBQVEsZUFDOUMsYUFBYUYsT0FBSyxPQUNsQixRQUFRLGVBQWUsU0FBUyxZQUFZLFlBQzVDLE9BQU9ILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVuRCxXQUFPLElBQWMsWUFBWUMsWUFBUztBQUFBLE1BQ3hDLFVBQVVNO0FBQUEsTUFDVjtBQUFBLElBQ0YsR0FBRyxJQUFJLEdBQUcsSUFBYyxTQUFTTixZQUFTO0FBQUEsTUFDeEMsVUFBVTtBQUFBLE1BQ1Y7QUFBQSxNQUNBO0FBQUEsTUFDQSxNQUFNSztBQUFBLE1BQ04sY0FBYztBQUFBLElBQ2hCLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFBQSxFQUNoQjtBQUNBLGFBQVcsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSXJCLGlCQUFpQixvQkFBQUUsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzNCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtyQixTQUFTLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLbkIsU0FBUyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsZUFBZSxPQUFPLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtqRCxPQUFPLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLakIsSUFBSSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNZCxZQUFZLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLdEIsT0FBTyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2pCLE1BQU0sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxpQkFBaUIsY0FBYyx1QkFBdUIsWUFBWSxhQUFhLFNBQVMsZ0JBQWdCLGNBQWMsVUFBVSxZQUFZLGdCQUFnQixRQUFRLGFBQWEsYUFBYSxjQUFjLFdBQVcsY0FBYyxZQUFZLFlBQVksZ0JBQWdCLFVBQVUsUUFBUSxhQUFhLFFBQVEsbUJBQW1CLGlCQUFpQixVQUFVLGNBQWMsU0FBUyxTQUFTLE9BQU8sWUFBWSxZQUFZLGFBQWEsWUFBWSxTQUFTLHVCQUF1QixTQUFTLHFCQUFxQixTQUFTLGdCQUFnQixlQUFlLGNBQWMsV0FBVyxXQUFXLFNBQVMsV0FBVyxXQUFXLGNBQWMsYUFBYSxtQkFBbUIsd0JBQXdCLG1CQUFtQixvQkFBb0Isc0JBQXNCLG9CQUFvQixRQUFRLGlCQUFpQixxQkFBcUIsd0JBQXdCLHVCQUF1Qix5QkFBeUIsU0FBUyw4QkFBOEIsd0JBQXdCLGNBQWMsWUFBWSxPQUFPLGdCQUFnQixrQkFBa0IsWUFBWSxXQUFXLGVBQWUsZUFBZSxZQUFZLGdCQUFnQixpQkFBaUIsYUFBYSxPQUFPLG1CQUFtQixvQkFBb0IsWUFBWSxxQkFBcUIsbUJBQW1CLG9CQUFvQixjQUFjLG1CQUFtQixtQkFBbUIsaUJBQWlCLDhCQUE4Qiw0QkFBNEIsaUJBQWlCLGdCQUFnQix5QkFBeUIseUJBQXlCLHVCQUF1Qix5QkFBeUIsd0JBQXdCLHNCQUFzQixjQUFjLHFCQUFxQiw0QkFBNEIsNkJBQTZCLHlCQUF5QiwwQkFBMEIsY0FBYyxnQkFBZ0IsZUFBZSxtQkFBbUIsY0FBYyx1QkFBdUIsU0FBUyxTQUFTLFVBQVUsT0FBTyxVQUFVLFFBQVEsVUFBVSxjQUFjLGdCQUFnQixPQUFPLGFBQWEsYUFBYSxlQUFlLFdBQVcsZUFBZSxVQUFVLFFBQVEsWUFBWSxRQUFRLGVBQWUsZ0JBQWdCLHFCQUFxQixjQUFjLGFBQWEsaUJBQWlCLGNBQWMsa0JBQWtCLFlBQVksUUFBUSxVQUFVLFdBQVcsU0FBUyxRQUFRLGtCQUFrQixZQUFZLFFBQVEsV0FBVyxTQUFTLGdCQUFnQixXQUFXLFFBQVEsUUFBUSxhQUFhLFNBQVMsZ0JBQWdCLGNBQWMsYUFBYSxjQUFjLHNCQUFzQixnQkFBZ0IsYUFBYSxtQkFBbUIsa0JBQWtCLGdCQUFnQixpQkFBaUIsZUFBZSxXQUFXLFVBQVUsTUFBTSxZQUFZLFlBQVksZUFBZSxjQUFjLGVBQWUsWUFBWSxrQkFBa0IsaUJBQWlCLFVBQVUsV0FBVyxhQUFhLGNBQWMsY0FBYyxhQUFhLFFBQVEsUUFBUSxXQUFXLFFBQVEsWUFBWSxXQUFXLGVBQWUsaUJBQWlCLGNBQWMsaUJBQWlCLGFBQWEsaUJBQWlCLGFBQWEseUJBQXlCLFlBQVksYUFBYSx1QkFBdUIsWUFBWSxtQkFBbUIsaUJBQWlCLGNBQWMsa0JBQWtCLGVBQWUsb0JBQW9CLHFCQUFxQix3QkFBd0IsWUFBWSxXQUFXLGVBQWUsY0FBYyxhQUFhLGNBQWMsZUFBZSxlQUFlLFdBQVcsZUFBZSxhQUFhLGNBQWMsa0JBQWtCLGVBQWUsZ0JBQWdCLFlBQVksaUJBQWlCLGVBQWUsZUFBZSxhQUFhLGFBQWEscUJBQXFCLGVBQWUsV0FBVyxnQkFBZ0Isa0JBQWtCLGdCQUFnQixhQUFhLGdCQUFnQixrQkFBa0IsY0FBYyxhQUFhLGNBQWMsZUFBZSxlQUFlLHVCQUF1QixXQUFXLGtCQUFrQixjQUFjLGlCQUFpQixrQkFBa0IsaUJBQWlCLHNCQUFzQixVQUFVLDBCQUEwQixvQkFBb0IsbUJBQW1CLGlCQUFpQixhQUFhLFVBQVUsUUFBUSxZQUFZLFlBQVksYUFBYSxVQUFVLFNBQVMsaUJBQWlCLGNBQWMsWUFBWSxTQUFTLGlCQUFpQix1QkFBdUIsVUFBVSxpQkFBaUIsUUFBUSxhQUFhLFVBQVUsUUFBUSxlQUFlLFVBQVUsV0FBVyxVQUFVLHVCQUF1QixXQUFXLGlCQUFpQixjQUFjLGVBQWUsYUFBYSxXQUFXLFNBQVMsV0FBVyxVQUFVLFdBQVcsT0FBTyxhQUFhLGVBQWUsUUFBUSxjQUFjLFFBQVEsZ0JBQWdCLHNCQUFzQixVQUFVLFFBQVEsb0JBQW9CLFNBQVMscUJBQXFCLFdBQVcsaUJBQWlCLFlBQVksZ0JBQWdCLGFBQWEsUUFBUSxtQkFBbUIsU0FBUyxVQUFVLHFCQUFxQix3QkFBd0IsZUFBZSxrQkFBa0IsMEJBQTBCLDBCQUEwQixpQkFBaUIsU0FBUyxTQUFTLGFBQWEsWUFBWSxZQUFZLGFBQWEsVUFBVSxZQUFZLGFBQWEsVUFBVSxhQUFhLGtCQUFrQixjQUFjLG1CQUFtQixrQkFBa0IsbUJBQW1CLGlCQUFpQixrQkFBa0IsU0FBUyxRQUFRLGNBQWMsYUFBYSxXQUFXLFVBQVUsYUFBYSxPQUFPLGVBQWUsV0FBVyx1QkFBdUIsd0JBQXdCLHNCQUFzQixtQkFBbUIsT0FBTyxRQUFRLGVBQWUsWUFBWSxlQUFlLGVBQWUsY0FBYyxZQUFZLFNBQVMsVUFBVSxVQUFVLHVCQUF1QixhQUFhLFFBQVEsY0FBYyxTQUFTLGlCQUFpQixVQUFVLGVBQWUsV0FBVyxrQkFBa0Isb0JBQW9CLDJCQUEyQixrQkFBa0IseUJBQXlCLFlBQVksV0FBVyxXQUFXLG9CQUFvQixnQkFBZ0IsYUFBYSxVQUFVLFlBQVksZUFBZSxXQUFXLGVBQWUsV0FBVyxvQkFBb0IsZ0JBQWdCLGNBQWMsWUFBWSxvQkFBb0Isc0JBQXNCLFVBQVUsY0FBYyxtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixjQUFjLDRCQUE0QixpQkFBaUIsYUFBYSxvQkFBb0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGNBQWMsa0JBQWtCLGNBQWMsYUFBYSxrQkFBa0IsaUJBQWlCLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGFBQWEsWUFBWSxnQkFBZ0IsZUFBZSxzQkFBc0Isb0JBQW9CLGVBQWUsa0JBQWtCLGVBQWUsYUFBYSxlQUFlLGVBQWUsaUJBQWlCLGdCQUFnQixrQkFBa0IsbUJBQW1CLGlCQUFpQixjQUFjLG9CQUFvQixxQkFBcUIsYUFBYSxtQkFBbUIsY0FBYyxlQUFlLGVBQWUsZUFBZSxZQUFZLGFBQWEsbUJBQW1CLGVBQWUsQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsT0FBTyxZQUFZLG9CQUFBQSxRQUFVLFlBQVksVUFBVSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLL21OLE1BQU0sb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtoQixjQUFjLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFReEIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQSxJQUdyQixPQUFPLG9CQUFBQSxRQUFVO0FBQUEsSUFDakIsVUFBVSxvQkFBQUEsUUFBVTtBQUFBLEVBQ3RCOzs7QUpqSEEsTUFBSUMsZUFBWSxDQUFDLGFBQWEsU0FBUyxTQUFTLGtCQUFrQixtQkFBbUIsU0FBUyxZQUFZLFdBQVcsb0JBQW9CLFFBQVEsT0FBTyxVQUFVLE1BQU07QUFFeEssV0FBU0MsVUFBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxVQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLFdBQVNFLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBaUJsVCxNQUFJLGtCQUFrQjtBQUFBLElBQ3BCLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxFQUNWO0FBQ08sTUFBSUMsVUFBUyxPQUFPLGVBQWU7QUFDbkMsTUFBSSxpQkFBaUI7QUFBQSxJQUMxQixHQUFHO0FBQUEsSUFDSCxHQUFHO0FBQUEsRUFDTDtBQUNPLE1BQUlDLFNBQVEsT0FBTyxjQUFjO0FBQ2pDLE1BQUksZUFBZSxTQUFTQyxjQUFhQyxRQUFNO0FBQ3BELFFBQUksWUFBWUEsT0FBSyxXQUNqQixRQUFRQSxPQUFLLE9BQ2IsYUFBYUEsT0FBSyxPQUNsQixRQUFRLGVBQWUsU0FBUyxXQUFXLFlBQzNDLGlCQUFpQkEsT0FBSyxnQkFDdEIsdUJBQXVCQSxPQUFLLGlCQUM1QixrQkFBa0IseUJBQXlCLFNBQVMsUUFBUSxzQkFDNUQsUUFBUUEsT0FBSyxPQUNiLFdBQVdBLE9BQUssVUFDaEIsVUFBVUEsT0FBSyxTQUNmLG1CQUFtQkEsT0FBSyxrQkFDeEIsT0FBT0EsT0FBSyxNQUNaLE1BQU1BLE9BQUssS0FDWCxTQUFTQSxPQUFLLFFBQ2QsWUFBWUEsT0FBSyxNQUNqQkMsUUFBTyxjQUFjLFNBQVMsTUFBTSxXQUNwQyxPQUFPTiw0QkFBeUJLLFFBQU1ULFlBQVM7QUFFbkQsUUFBSSxlQUFlO0FBRW5CLFFBQUksT0FBTyxVQUFVLFlBQVksTUFBTSxXQUFXLEdBQUc7QUFDbkQscUJBQWU7QUFBQSxJQUNqQjtBQUVBLFFBQUksY0FBVSxvQkFBQVcsU0FBVyxnQkFBZ0I7QUFBQSxNQUN2QywwQkFBMEI7QUFBQSxNQUMxQiw4QkFBOEI7QUFBQSxNQUM5Qiw0QkFBNEIsV0FBVztBQUFBLElBQ3pDLEdBQUcsZ0JBQWdCLEtBQUssR0FBRyxlQUFlRCxLQUFJLEdBQUcsU0FBUztBQUMxRCxRQUFJRTtBQUVKLFFBQUksVUFBVTtBQUNaLE1BQUFBLFVBQU8sSUFBYyxTQUFTO0FBQUEsUUFDNUIsV0FBVztBQUFBLFFBQ1gsTUFBTTtBQUFBLFFBQ04sTUFBTUYsVUFBUyxNQUFNLE1BQU07QUFBQSxRQUMzQixlQUFlO0FBQUEsUUFDZixPQUFPO0FBQUE7QUFBQSxNQUVULENBQUM7QUFBQSxJQUNIO0FBRUEsUUFBSUcsV0FBVSxPQUFPLE1BQU07QUFDM0IsUUFBSSxTQUFTLENBQUM7QUFFZCxRQUFJLE1BQU07QUFDUixhQUFPLE9BQU87QUFDZCxhQUFPLFNBQVM7QUFDaEIsYUFBTyxNQUFNLHNCQUFzQjtBQUFBLFFBQ2pDO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsUUFBSSxTQUFTO0FBQ1gsYUFBTyxVQUFVO0FBQUEsSUFDbkI7QUFFQSxRQUFJO0FBRUosUUFBSSxXQUFXLE1BQU07QUFDbkIsZ0JBQVUsSUFBY0EsVUFBU1YsWUFBUztBQUFBLFFBQ3hDLGNBQWM7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLE9BQU8sT0FBTyxVQUFVLFdBQVcsUUFBUTtBQUFBLE1BQzdDLEdBQUcsUUFBUSxJQUFJLEdBQUdTLFdBQVEsS0FBSztBQUUvQixVQUFJLGdCQUFnQjtBQUNsQixlQUFPLElBQWMsWUFBWTtBQUFBLFVBQy9CLFVBQVU7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULE9BQU8sU0FBUztBQUFBLFFBQ2xCLEdBQUcsT0FBTztBQUFBLE1BQ1osT0FBTztBQUNMLGVBQU8sSUFBYywwQkFBVSxNQUFNLE9BQU87QUFBQSxNQUM5QztBQUFBLElBQ0YsT0FBTztBQUNMLFVBQUksZ0JBQWdCO0FBQ2xCLGVBQU8sSUFBYyxZQUFZO0FBQUEsVUFDL0IsVUFBVTtBQUFBLFVBQ1YsU0FBUztBQUFBLFVBQ1QsT0FBTyxTQUFTO0FBQUEsUUFDbEIsR0FBRyxJQUFjLFFBQVFULFlBQVM7QUFBQSxVQUNoQyxVQUFVO0FBQUEsVUFDVixXQUFXO0FBQUEsVUFDWCxNQUFNO0FBQUEsUUFDUixHQUFHLElBQUksR0FBR1MsV0FBUSxLQUFLLENBQUM7QUFBQSxNQUMxQixPQUFPO0FBQ0wsWUFBSSxZQUFZLFNBQVM7QUFFekIsWUFBSSxhQUFhLE9BQU8sY0FBYyxVQUFVO0FBQzlDLGtCQUFRLEtBQUssK0VBQStFLE9BQU9YLFVBQVEsU0FBUyxDQUFDLENBQUM7QUFBQSxRQUN4SDtBQUVBLGVBQU8sSUFBYyxRQUFRRSxZQUFTO0FBQUEsVUFDcEMsV0FBVztBQUFBLFVBQ1gsT0FBTztBQUFBLFFBQ1QsR0FBRyxJQUFJLEdBQUdTLFdBQVEsS0FBSztBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDQSxlQUFhLFlBQVk7QUFBQSxJQUN2QixXQUFXLG9CQUFBRSxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzVCLFNBQVMsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtuQixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM1QixNQUFNLG9CQUFBQSxRQUFVO0FBQUEsSUFDaEIsUUFBUSxvQkFBQUEsUUFBVTtBQUFBLElBQ2xCLEtBQUssb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtmLFVBQVUsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxpQkFBaUIsY0FBYyx1QkFBdUIsWUFBWSxhQUFhLFNBQVMsZ0JBQWdCLGNBQWMsVUFBVSxZQUFZLGdCQUFnQixRQUFRLGFBQWEsYUFBYSxjQUFjLFdBQVcsY0FBYyxZQUFZLFlBQVksZ0JBQWdCLFVBQVUsUUFBUSxhQUFhLFFBQVEsbUJBQW1CLGlCQUFpQixVQUFVLGNBQWMsU0FBUyxTQUFTLE9BQU8sWUFBWSxZQUFZLGFBQWEsWUFBWSxTQUFTLHVCQUF1QixTQUFTLHFCQUFxQixTQUFTLGdCQUFnQixlQUFlLGNBQWMsV0FBVyxXQUFXLFNBQVMsV0FBVyxXQUFXLGNBQWMsYUFBYSxtQkFBbUIsd0JBQXdCLG1CQUFtQixvQkFBb0Isc0JBQXNCLG9CQUFvQixRQUFRLGlCQUFpQixxQkFBcUIsd0JBQXdCLHVCQUF1Qix5QkFBeUIsU0FBUyw4QkFBOEIsd0JBQXdCLGNBQWMsWUFBWSxPQUFPLGdCQUFnQixrQkFBa0IsWUFBWSxXQUFXLGVBQWUsZUFBZSxZQUFZLGdCQUFnQixpQkFBaUIsYUFBYSxPQUFPLG1CQUFtQixvQkFBb0IsWUFBWSxxQkFBcUIsbUJBQW1CLG9CQUFvQixjQUFjLG1CQUFtQixtQkFBbUIsaUJBQWlCLDhCQUE4Qiw0QkFBNEIsaUJBQWlCLGdCQUFnQix5QkFBeUIseUJBQXlCLHVCQUF1Qix5QkFBeUIsd0JBQXdCLHNCQUFzQixjQUFjLHFCQUFxQiw0QkFBNEIsNkJBQTZCLHlCQUF5QiwwQkFBMEIsY0FBYyxnQkFBZ0IsZUFBZSxtQkFBbUIsY0FBYyx1QkFBdUIsU0FBUyxTQUFTLFVBQVUsT0FBTyxVQUFVLFFBQVEsVUFBVSxjQUFjLGdCQUFnQixPQUFPLGFBQWEsYUFBYSxlQUFlLFdBQVcsZUFBZSxVQUFVLFFBQVEsWUFBWSxRQUFRLGVBQWUsZ0JBQWdCLHFCQUFxQixjQUFjLGFBQWEsaUJBQWlCLGNBQWMsa0JBQWtCLFlBQVksUUFBUSxVQUFVLFdBQVcsU0FBUyxRQUFRLGtCQUFrQixZQUFZLFFBQVEsV0FBVyxTQUFTLGdCQUFnQixXQUFXLFFBQVEsUUFBUSxhQUFhLFNBQVMsZ0JBQWdCLGNBQWMsYUFBYSxjQUFjLHNCQUFzQixnQkFBZ0IsYUFBYSxtQkFBbUIsa0JBQWtCLGdCQUFnQixpQkFBaUIsZUFBZSxXQUFXLFVBQVUsTUFBTSxZQUFZLFlBQVksZUFBZSxjQUFjLGVBQWUsWUFBWSxrQkFBa0IsaUJBQWlCLFVBQVUsV0FBVyxhQUFhLGNBQWMsY0FBYyxhQUFhLFFBQVEsUUFBUSxXQUFXLFFBQVEsWUFBWSxXQUFXLGVBQWUsaUJBQWlCLGNBQWMsaUJBQWlCLGFBQWEsaUJBQWlCLGFBQWEseUJBQXlCLFlBQVksYUFBYSx1QkFBdUIsWUFBWSxtQkFBbUIsaUJBQWlCLGNBQWMsa0JBQWtCLGVBQWUsb0JBQW9CLHFCQUFxQix3QkFBd0IsWUFBWSxXQUFXLGVBQWUsY0FBYyxhQUFhLGNBQWMsZUFBZSxlQUFlLFdBQVcsZUFBZSxhQUFhLGNBQWMsa0JBQWtCLGVBQWUsZ0JBQWdCLFlBQVksaUJBQWlCLGVBQWUsZUFBZSxhQUFhLGFBQWEscUJBQXFCLGVBQWUsV0FBVyxnQkFBZ0Isa0JBQWtCLGdCQUFnQixhQUFhLGdCQUFnQixrQkFBa0IsY0FBYyxhQUFhLGNBQWMsZUFBZSxlQUFlLHVCQUF1QixXQUFXLGtCQUFrQixjQUFjLGlCQUFpQixrQkFBa0IsaUJBQWlCLHNCQUFzQixVQUFVLDBCQUEwQixvQkFBb0IsbUJBQW1CLGlCQUFpQixhQUFhLFVBQVUsUUFBUSxZQUFZLFlBQVksYUFBYSxVQUFVLFNBQVMsaUJBQWlCLGNBQWMsWUFBWSxTQUFTLGlCQUFpQix1QkFBdUIsVUFBVSxpQkFBaUIsUUFBUSxhQUFhLFVBQVUsUUFBUSxlQUFlLFVBQVUsV0FBVyxVQUFVLHVCQUF1QixXQUFXLGlCQUFpQixjQUFjLGVBQWUsYUFBYSxXQUFXLFNBQVMsV0FBVyxVQUFVLFdBQVcsT0FBTyxhQUFhLGVBQWUsUUFBUSxjQUFjLFFBQVEsZ0JBQWdCLHNCQUFzQixVQUFVLFFBQVEsb0JBQW9CLFNBQVMscUJBQXFCLFdBQVcsaUJBQWlCLFlBQVksZ0JBQWdCLGFBQWEsUUFBUSxtQkFBbUIsU0FBUyxVQUFVLHFCQUFxQix3QkFBd0IsZUFBZSxrQkFBa0IsMEJBQTBCLDBCQUEwQixpQkFBaUIsU0FBUyxTQUFTLGFBQWEsWUFBWSxZQUFZLGFBQWEsVUFBVSxZQUFZLGFBQWEsVUFBVSxhQUFhLGtCQUFrQixjQUFjLG1CQUFtQixrQkFBa0IsbUJBQW1CLGlCQUFpQixrQkFBa0IsU0FBUyxRQUFRLGNBQWMsYUFBYSxXQUFXLFVBQVUsYUFBYSxPQUFPLGVBQWUsV0FBVyx1QkFBdUIsd0JBQXdCLHNCQUFzQixtQkFBbUIsT0FBTyxRQUFRLGVBQWUsWUFBWSxlQUFlLGVBQWUsY0FBYyxZQUFZLFNBQVMsVUFBVSxVQUFVLHVCQUF1QixhQUFhLFFBQVEsY0FBYyxTQUFTLGlCQUFpQixVQUFVLGVBQWUsV0FBVyxrQkFBa0Isb0JBQW9CLDJCQUEyQixrQkFBa0IseUJBQXlCLFlBQVksV0FBVyxXQUFXLG9CQUFvQixnQkFBZ0IsYUFBYSxVQUFVLFlBQVksZUFBZSxXQUFXLGVBQWUsV0FBVyxvQkFBb0IsZ0JBQWdCLGNBQWMsWUFBWSxvQkFBb0Isc0JBQXNCLFVBQVUsY0FBYyxtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixjQUFjLDRCQUE0QixpQkFBaUIsYUFBYSxvQkFBb0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGNBQWMsa0JBQWtCLGNBQWMsYUFBYSxrQkFBa0IsaUJBQWlCLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGFBQWEsWUFBWSxnQkFBZ0IsZUFBZSxzQkFBc0Isb0JBQW9CLGVBQWUsa0JBQWtCLGVBQWUsYUFBYSxlQUFlLGVBQWUsaUJBQWlCLGdCQUFnQixrQkFBa0IsbUJBQW1CLGlCQUFpQixjQUFjLG9CQUFvQixxQkFBcUIsYUFBYSxtQkFBbUIsY0FBYyxlQUFlLGVBQWUsZUFBZSxZQUFZLGFBQWEsbUJBQW1CLGVBQWUsQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsT0FBTyxZQUFZLG9CQUFBQSxRQUFVLFlBQVksVUFBVSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTbm5OLE9BQU8sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLEtBQUssWUFBWSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsS0FBSyxZQUFZLG9CQUFBQSxRQUFVLE9BQU8sVUFBVSxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtsSixnQkFBZ0Isb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sb0JBQUFBLFFBQVUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLdEgsaUJBQWlCLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxPQUFPLFNBQVMsVUFBVSxNQUFNLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTW5FLE9BQU8sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLFFBQVEsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLbkgsT0FBTyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsVUFBVSxXQUFXLFFBQVEsQ0FBQztBQUFBLElBQ3RELE1BQU0sb0JBQUFBLFFBQVUsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQUEsRUFDbEM7OztBS3BMTyxNQUFJLGlCQUFpQixTQUFTQyxnQkFBZSxPQUFPLFNBQVMsV0FBVztBQUM3RSxRQUFJLGVBQWUsY0FBYyxxQkFBcUIsT0FBTyxVQUFVLE1BQU0sVUFBVTtBQUN2RixXQUFPLGtCQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksRUFBRSxJQUFJO0FBQUEsRUFDL0M7OztBQ0ZPLE1BQUksa0JBQWtCLFNBQVNDLGlCQUFnQkMsUUFBTTtBQUMxRCxRQUFJLFdBQVdBLE9BQUssVUFDaEIsWUFBWUEsT0FBSztBQUVyQixRQUFJQyxTQUFRLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxHQUM3RSxTQUFTQSxPQUFNO0FBRW5CLFFBQUksUUFBUSxVQUFVLFNBQVMsT0FBTztBQUN0QyxXQUFPLGdDQUFnQyxPQUFPLGVBQWUsT0FBTyxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsRUFBRSxPQUFPLGVBQWUsT0FBTyxNQUFNLFNBQVMsR0FBRyxLQUFLO0FBQUEsRUFDaks7QUFLTyxNQUFJLGlCQUFpQixTQUFTQyxnQkFBZUMsUUFBTztBQUN6RCxRQUFJLFdBQVdBLE9BQU0sVUFDakIsWUFBWUEsT0FBTTtBQUV0QixRQUFJQyxTQUFRLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxHQUM3RSxTQUFTQSxPQUFNO0FBRW5CLFFBQUksUUFBUSxVQUFVLFNBQVMsT0FBTztBQUN0QyxXQUFPLGlDQUFpQyxPQUFPLGVBQWUsT0FBTyxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsRUFBRSxPQUFPLGVBQWUsT0FBTyxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsRUFBRSxPQUFPLGVBQWUsT0FBTyxNQUFNLFNBQVMsR0FBRyxLQUFLO0FBQUEsRUFDdk87QUFLTyxNQUFJLGtCQUFrQixTQUFTQyxpQkFBZ0JDLFFBQU87QUFDM0QsUUFBSSxXQUFXQSxPQUFNLFVBQ2pCLFlBQVlBLE9BQU07QUFFdEIsUUFBSUMsU0FBUSxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FDN0UsU0FBU0EsT0FBTSxPQUNmQyxZQUFXRCxPQUFNO0FBRXJCLFFBQUksUUFBUSxVQUFVLFNBQVMsT0FBTztBQUN0QyxRQUFJLFFBQVEsQ0FBQyxjQUFjLE9BQU8sZUFBZSxPQUFPLE1BQU0sU0FBUyxDQUFDLEdBQUcsZUFBZSxPQUFPLGVBQWUsT0FBTyxNQUFNLFNBQVMsQ0FBQyxHQUFHLGdCQUFnQixPQUFPLGVBQWUsT0FBTyxNQUFNLFNBQVMsQ0FBQyxHQUFHLGVBQWUsT0FBTyxlQUFlLE9BQU8sTUFBTSxTQUFTLENBQUMsQ0FBQztBQUV2USxRQUFJQyxjQUFhLFVBQVU7QUFDekIsYUFBTyxXQUFXLE9BQU8sTUFBTSxPQUFPLFNBQVVDLElBQUcsR0FBRztBQUNwRCxlQUFPLEdBQUcsT0FBT0EsSUFBRyxlQUFlLEVBQUUsT0FBTyxHQUFHLEdBQUc7QUFBQSxNQUNwRCxHQUFHLEVBQUUsR0FBRyxHQUFHO0FBQUEsSUFDYixPQUFPO0FBQ0wsYUFBTyxlQUFlLE9BQU8sTUFBTSxJQUFJLFNBQVVBLElBQUc7QUFDbEQsZUFBT0E7QUFBQSxNQUNULENBQUMsR0FBRyxHQUFHO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFLTyxNQUFJLGlCQUFpQixTQUFTQyxnQkFBZUMsUUFBTztBQUN6RCxRQUFJLFdBQVdBLE9BQU0sVUFDakIsWUFBWUEsT0FBTTtBQUV0QixRQUFJQyxTQUFRLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUksQ0FBQyxHQUM3RSxTQUFTQSxPQUFNO0FBRW5CLFFBQUksUUFBUSxVQUFVLFNBQVMsT0FBTztBQUN0QyxXQUFPLDhCQUE4QixPQUFPLGVBQWUsT0FBTyxLQUFLLFNBQVMsR0FBRyxvQkFBb0IsRUFBRSxPQUFPLGVBQWUsT0FBTyxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsRUFBRSxPQUFPLGVBQWUsT0FBTyxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsRUFBRSxPQUFPLGVBQWUsT0FBTyxNQUFNLFNBQVMsR0FBRyxLQUFLO0FBQUEsRUFDeFM7QUFLTyxNQUFJLGtCQUFrQixTQUFTQyxpQkFBZ0JDLFFBQU87QUFDM0QsUUFBSSxXQUFXQSxPQUFNLFVBQ2pCLFlBQVlBLE9BQU07QUFFdEIsUUFBSUMsVUFBUyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FDOUUsU0FBU0EsUUFBTyxPQUNoQkMsV0FBVUQsUUFBTztBQUVyQixRQUFJLFFBQVEsVUFBVSxTQUFTLE9BQU87QUFDdEMsV0FBTyxzQkFBc0IsT0FBT0MsV0FBVSxNQUFNLElBQUksWUFBWSxFQUFFLE9BQU8sZUFBZSxPQUFPLE1BQU0sU0FBUyxHQUFHLFNBQVMsRUFBRSxPQUFPQSxXQUFVLE1BQU0sSUFBSSxhQUFhLEVBQUUsT0FBTyxlQUFlLE9BQU8sTUFBTSxTQUFTLEdBQUcsU0FBUyxFQUFFLE9BQU9BLFdBQVUsTUFBTSxJQUFJLGNBQWMsRUFBRSxPQUFPLGVBQWUsT0FBTyxNQUFNLFNBQVMsR0FBRyxLQUFLO0FBQUEsRUFDclU7QUE2Qk8sTUFBSSxnQkFBZ0IsU0FBU0MsZUFBYyxRQUFRO0FBQ3hELFFBQUksV0FBVyxPQUFPLFVBQ2xCLFlBQVksT0FBTztBQUV2QixRQUFJLFNBQVMsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQzlFLFNBQVMsT0FBTztBQUVwQixRQUFJLFFBQVEsVUFBVSxTQUFTLE9BQU87QUFDdEMsV0FBTyw2QkFBNkIsT0FBTyxlQUFlLE9BQU8sTUFBTSxTQUFTLEdBQUcsZUFBZSxFQUFFLE9BQU8sZUFBZSxPQUFPLE1BQU0sU0FBUyxHQUFHLGVBQWUsRUFBRSxPQUFPLGVBQWUsT0FBTyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsRUFBRSxPQUFPLGVBQWUsT0FBTyxNQUFNLFNBQVMsR0FBRyxLQUFLO0FBQUEsRUFDM1I7QUFPTyxNQUFJLFlBQVksU0FBU0MsV0FBVSxpQkFBaUI7QUFDekQsUUFBSUMsUUFBTyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJO0FBRS9FLFFBQUksU0FBUyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FDOUUsUUFBUSxPQUFPO0FBRW5CLFlBQVFBLE9BQU07QUFBQSxNQUNaLEtBQUs7QUFDSCxlQUFPLGdCQUFnQixpQkFBaUI7QUFBQSxVQUN0QztBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU8sZUFBZSxpQkFBaUI7QUFBQSxVQUNyQztBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU8sZ0JBQWdCLGlCQUFpQjtBQUFBLFVBQ3RDO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBTyxlQUFlLGlCQUFpQjtBQUFBLFVBQ3JDO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBTyxnQkFBZ0IsaUJBQWlCO0FBQUEsVUFDdEM7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUVIO0FBQ0UsZ0JBQVEsS0FBSyxvREFBb0Q7QUFDakUsZUFBTztBQUFBLElBQ1g7QUFBQSxFQUNGOzs7QUN0SkEsTUFBQUMsa0JBQWtDO0FBQ2xDLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7QUF2QnZCLE1BQUlDLGVBQVksQ0FBQyxZQUFZLFNBQVMsYUFBYSxRQUFRLFlBQVksVUFBVSxPQUFPLFFBQVEsV0FBVyxVQUFVO0FBRXJILFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLFVBQVFDLFNBQVEsZ0JBQWdCO0FBQUUsUUFBSUMsUUFBTyxPQUFPLEtBQUtELE9BQU07QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxVQUFVLE9BQU8sc0JBQXNCQSxPQUFNO0FBQUcsVUFBSSxnQkFBZ0I7QUFBRSxrQkFBVSxRQUFRLE9BQU8sU0FBVSxLQUFLO0FBQUUsaUJBQU8sT0FBTyx5QkFBeUJBLFNBQVEsR0FBRyxFQUFFO0FBQUEsUUFBWSxDQUFDO0FBQUEsTUFBRztBQUFFLE1BQUFDLE1BQUssS0FBSyxNQUFNQSxPQUFNLE9BQU87QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXhWLFdBQVNDLGdCQUFjLFFBQVE7QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsVUFBSSxTQUFTLFVBQVUsQ0FBQyxLQUFLLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFVBQUksSUFBSSxHQUFHO0FBQUUsUUFBQUgsVUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxVQUFBSSxrQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRyxXQUFXLE9BQU8sMkJBQTJCO0FBQUUsZUFBTyxpQkFBaUIsUUFBUSxPQUFPLDBCQUEwQixNQUFNLENBQUM7QUFBQSxNQUFHLE9BQU87QUFBRSxRQUFBSixVQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxpQkFBTyxlQUFlLFFBQVEsS0FBSyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFcmhCLFdBQVNJLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBRWhOLFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBb0JsVCxNQUFJLFVBQXVCLGdEQUFXLFNBQVVDLFFBQU0sS0FBSztBQUN6RCxRQUFJLFdBQVdBLE9BQUssVUFDaEIsYUFBYUEsT0FBSyxPQUNsQixRQUFRLGVBQWUsU0FBUyxZQUFZLFlBQzVDLFlBQVlBLE9BQUssV0FDakIsT0FBT0EsT0FBSyxNQUNaLFdBQVdBLE9BQUssVUFDaEIsU0FBU0EsT0FBSyxRQUNkLE1BQU1BLE9BQUssS0FDWCxZQUFZQSxPQUFLLE1BQ2pCLE9BQU8sY0FBYyxTQUFTLFdBQVcsV0FDekMsVUFBVUEsT0FBSyxTQUNmLFlBQVlBLE9BQUssVUFDakIsT0FBT0MsNEJBQXlCRCxRQUFNRSxZQUFTO0FBRW5ELFFBQUksV0FBVyxZQUFZO0FBQzNCLFFBQUlDLFVBQVMsY0FBYyxRQUFRO0FBQ25DLFFBQUksWUFBWSxDQUFDQSxRQUFPLE9BQU87QUFDL0IsUUFBSSw0QkFBNEIsQ0FBQ0EsUUFBTyx5QkFBeUI7QUFDakUsUUFBSSw0QkFBNEIsQ0FBQ0EsUUFBTyxxQkFBcUI7QUFDN0QsUUFBSSxjQUFjLENBQUMsUUFBUSxhQUFhLElBQUk7QUFDNUMsUUFBSSxXQUFXLGFBQWEsQ0FBQztBQUU3QixRQUFJLDRCQUE0QixJQUFjLHFCQUFxQjtBQUFBLE1BQ2pFLEtBQUs7QUFBQSxJQUNQLEdBQUcsSUFBYyxRQUFRLE1BQU0sSUFBYyxTQUFTO0FBQUEsTUFDcEQsT0FBTztBQUFBLE1BQ1AsU0FBUztBQUFBLElBQ1gsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFJLG1CQUFtQixJQUFjLFNBQVM7QUFBQSxNQUM1QyxjQUFjLFdBQVcsOEJBQThCLGVBQWU7QUFBQSxNQUN0RSxNQUFNO0FBQUEsTUFDTixLQUFLO0FBQUEsTUFDTCxNQUFNO0FBQUEsSUFDUixDQUFDO0FBRUQsUUFBSSxTQUFTLFVBQWEsQ0FBQyxhQUFhO0FBQ3RDLFVBQUksY0FBY0MsZ0JBQWM7QUFBQSxRQUM5QixlQUFXLG9CQUFBQyxTQUFXLFdBQVcsU0FBUztBQUFBLFFBQzFDLEtBQUssQ0FBQyxXQUFXLFdBQVcsQ0FBQ0YsUUFBTyxRQUFRLElBQUlBLFFBQU8sS0FBSyxDQUFDO0FBQUEsUUFDN0Q7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsR0FBRyxJQUFJO0FBRVAsYUFBTyxJQUFjLFVBQVVHLFlBQVM7QUFBQSxRQUN0QztBQUFBLE1BQ0YsR0FBRyxXQUFXLEdBQUcsUUFBUTtBQUFBLElBQzNCO0FBRUEsUUFBSSxZQUFZLHNCQUFzQjtBQUFBLE1BQ3BDO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFFRCxRQUFJLGNBQWNGLGdCQUFjO0FBQUEsTUFDOUIsZUFBVyxvQkFBQUMsU0FBVyxXQUFXLFNBQVM7QUFBQSxNQUMxQyxLQUFLLENBQUMsV0FBV0YsUUFBTyxLQUFLLENBQUM7QUFBQSxNQUM5QjtBQUFBLE1BQ0E7QUFBQSxNQUNBLEtBQUs7QUFBQSxNQUNMO0FBQUEsSUFDRixHQUFHLElBQUk7QUFFUCxRQUFJLHVCQUF1QixXQUFXLFlBQVksYUFBYSxTQUFTLGFBQWE7QUFDckYsV0FBTyxJQUFjLEtBQUtHLFlBQVM7QUFBQSxNQUNqQztBQUFBLElBQ0YsR0FBRyxXQUFXLEdBQUcsVUFBVSx3QkFBd0Isa0JBQWtCLFdBQVcsWUFBWSx5QkFBeUI7QUFBQSxFQUN2SCxDQUFDO0FBQ0QsVUFBUSxZQUFZO0FBQUEsSUFDbEIsV0FBVyxvQkFBQUMsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM1QixNQUFNLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxVQUFVLFNBQVMsUUFBUSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTbkQsT0FBTyxvQkFBQUEsUUFBVTtBQUFBLElBQ2pCLFNBQVMsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTW5CLFVBQVUsb0JBQUFBLFFBQVU7QUFBQSxFQUN0QjtBQUNBLFVBQVEsY0FBYzs7O0FDcEZ0QixNQUFBQyxrQkFBaUM7QUFDakMsTUFBQUMsc0JBQXNCOzs7QUNYZixNQUFJLFdBQVcsV0FBVztBQUMvQixlQUFXLE9BQU8sVUFBVSxTQUFTQyxVQUFTLEdBQUc7QUFDN0MsZUFBUyxHQUFHLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxJQUFJLEdBQUcsS0FBSztBQUNqRCxZQUFJLFVBQVUsQ0FBQztBQUNmLGlCQUFTLEtBQUs7QUFBRyxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssR0FBRyxDQUFDO0FBQUcsY0FBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQUEsTUFDL0U7QUFDQSxhQUFPO0FBQUEsSUFDWDtBQUNBLFdBQU8sU0FBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQ3ZDO0FBRU8sV0FBUyxPQUFPLEdBQUcsR0FBRztBQUMzQixRQUFJLElBQUksQ0FBQztBQUNULGFBQVMsS0FBSztBQUFHLFVBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJO0FBQzlFLFVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNkLFFBQUksS0FBSyxRQUFRLE9BQU8sT0FBTywwQkFBMEI7QUFDckQsZUFBUyxJQUFJLEdBQUcsSUFBSSxPQUFPLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxFQUFFLFFBQVEsS0FBSztBQUNwRSxZQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxVQUFVLHFCQUFxQixLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekUsWUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFBQSxNQUN4QjtBQUNKLFdBQU87QUFBQSxFQUNUO0FBeUpPLFdBQVMsaUJBQWlCO0FBQy9CLGFBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLFVBQVUsUUFBUSxJQUFJLElBQUk7QUFBSyxXQUFLLFVBQVUsQ0FBQyxFQUFFO0FBQzdFLGFBQVMsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSTtBQUN6QyxlQUFTLElBQUksVUFBVSxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxRQUFRLElBQUksSUFBSSxLQUFLO0FBQzFELFVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsQixXQUFPO0FBQUEsRUFDVDtBQUVPLFdBQVMsY0FBYyxJQUFJQyxPQUFNLE1BQU07QUFDNUMsUUFBSSxRQUFRLFVBQVUsV0FBVztBQUFHLGVBQVMsSUFBSSxHQUFHLElBQUlBLE1BQUssUUFBUSxJQUFJLElBQUksR0FBRyxLQUFLO0FBQ2pGLFlBQUksTUFBTSxFQUFFLEtBQUtBLFFBQU87QUFDcEIsY0FBSSxDQUFDO0FBQUksaUJBQUssTUFBTSxVQUFVLE1BQU0sS0FBS0EsT0FBTSxHQUFHLENBQUM7QUFDbkQsYUFBRyxDQUFDLElBQUlBLE1BQUssQ0FBQztBQUFBLFFBQ2xCO0FBQUEsTUFDSjtBQUNBLFdBQU8sR0FBRyxPQUFPLE1BQU0sTUFBTSxVQUFVLE1BQU0sS0FBS0EsS0FBSSxDQUFDO0FBQUEsRUFDekQ7OztBQzVOQSxNQUFBQyxXQUF1Qjs7O0FDQXZCLE1BQUFDLFdBQXVCOzs7QUNBdkIsTUFBQUMsV0FBdUI7OztBQ0RoQixNQUFJLHFCQUFxQjtBQUN6QixNQUFJLHFCQUFxQjtBQUN6QixNQUFJLHdCQUF3QjtBQUs1QixNQUFJLHlCQUF5Qjs7O0FDTTdCLFdBQVMsVUFBVSxLQUFLLE9BQU87QUFDbEMsUUFBSSxPQUFPLFFBQVEsWUFBWTtBQUMzQixVQUFJLEtBQUs7QUFBQSxJQUNiLFdBQ1MsS0FBSztBQUNWLFVBQUksVUFBVTtBQUFBLElBQ2xCO0FBQ0EsV0FBTztBQUFBLEVBQ1g7OztBQ3JCQSxNQUFBQyxrQkFBeUI7QUFlbEIsV0FBUyxlQUFlLGNBQWMsVUFBVTtBQUNuRCxRQUFJLFVBQU0sMEJBQVMsV0FBWTtBQUFFLGFBQVE7QUFBQTtBQUFBLFFBRXJDLE9BQU87QUFBQTtBQUFBLFFBRVA7QUFBQTtBQUFBLFFBRUEsUUFBUTtBQUFBLFVBQ0osSUFBSSxVQUFVO0FBQ1YsbUJBQU8sSUFBSTtBQUFBLFVBQ2Y7QUFBQSxVQUNBLElBQUksUUFBUSxPQUFPO0FBQ2YsZ0JBQUksT0FBTyxJQUFJO0FBQ2YsZ0JBQUksU0FBUyxPQUFPO0FBQ2hCLGtCQUFJLFFBQVE7QUFDWixrQkFBSSxTQUFTLE9BQU8sSUFBSTtBQUFBLFlBQzVCO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUVSLFFBQUksV0FBVztBQUNmLFdBQU8sSUFBSTtBQUFBLEVBQ2Y7OztBQ3RDQSxNQUFBQyxXQUF1QjtBQUd2QixNQUFJLDRCQUE0QixPQUFPLFdBQVcsY0FBb0IsMkJBQXdCO0FBQzlGLE1BQUksZ0JBQWdCLG9CQUFJLFFBQVE7QUFlekIsV0FBUyxhQUFhLE1BQU0sY0FBYztBQUM3QyxRQUFJLGNBQWMsZUFBZSxnQkFBZ0IsTUFBTSxTQUFVLFVBQVU7QUFDdkUsYUFBTyxLQUFLLFFBQVEsU0FBVSxLQUFLO0FBQUUsZUFBTyxVQUFVLEtBQUssUUFBUTtBQUFBLE1BQUcsQ0FBQztBQUFBLElBQzNFLENBQUM7QUFFRCw4QkFBMEIsV0FBWTtBQUNsQyxVQUFJLFdBQVcsY0FBYyxJQUFJLFdBQVc7QUFDNUMsVUFBSSxVQUFVO0FBQ1YsWUFBSSxhQUFhLElBQUksSUFBSSxRQUFRO0FBQ2pDLFlBQUksYUFBYSxJQUFJLElBQUksSUFBSTtBQUM3QixZQUFJLFlBQVksWUFBWTtBQUM1QixtQkFBVyxRQUFRLFNBQVUsS0FBSztBQUM5QixjQUFJLENBQUMsV0FBVyxJQUFJLEdBQUcsR0FBRztBQUN0QixzQkFBVSxLQUFLLElBQUk7QUFBQSxVQUN2QjtBQUFBLFFBQ0osQ0FBQztBQUNELG1CQUFXLFFBQVEsU0FBVSxLQUFLO0FBQzlCLGNBQUksQ0FBQyxXQUFXLElBQUksR0FBRyxHQUFHO0FBQ3RCLHNCQUFVLEtBQUssU0FBUztBQUFBLFVBQzVCO0FBQUEsUUFDSixDQUFDO0FBQUEsTUFDTDtBQUNBLG9CQUFjLElBQUksYUFBYSxJQUFJO0FBQUEsSUFDdkMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUNULFdBQU87QUFBQSxFQUNYOzs7QUNiTyxNQUFJQyxZQUFXLFdBQVc7QUFDL0IsSUFBQUEsWUFBVyxPQUFPLFVBQVUsU0FBU0EsVUFBUyxHQUFHO0FBQzdDLGVBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsSUFBSSxHQUFHLEtBQUs7QUFDakQsWUFBSSxVQUFVLENBQUM7QUFDZixpQkFBUyxLQUFLO0FBQUcsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLEdBQUcsQ0FBQztBQUFHLGNBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUFBLE1BQy9FO0FBQ0EsYUFBTztBQUFBLElBQ1g7QUFDQSxXQUFPQSxVQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFDdkM7QUFFTyxXQUFTQyxRQUFPLEdBQUcsR0FBRztBQUMzQixRQUFJLElBQUksQ0FBQztBQUNULGFBQVMsS0FBSztBQUFHLFVBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJO0FBQzlFLFVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNkLFFBQUksS0FBSyxRQUFRLE9BQU8sT0FBTywwQkFBMEI7QUFDckQsZUFBUyxJQUFJLEdBQUcsSUFBSSxPQUFPLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxFQUFFLFFBQVEsS0FBSztBQUNwRSxZQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxVQUFVLHFCQUFxQixLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekUsWUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFBQSxNQUN4QjtBQUNKLFdBQU87QUFBQSxFQUNUOzs7QUNuREEsV0FBUyxLQUFLLEdBQUc7QUFDYixXQUFPO0FBQUEsRUFDWDtBQUNBLFdBQVMsa0JBQWtCQyxXQUFVQyxhQUFZO0FBQzdDLFFBQUlBLGdCQUFlLFFBQVE7QUFBRSxNQUFBQSxjQUFhO0FBQUEsSUFBTTtBQUNoRCxRQUFJLFNBQVMsQ0FBQztBQUNkLFFBQUksV0FBVztBQUNmLFFBQUksU0FBUztBQUFBLE1BQ1QsTUFBTSxXQUFZO0FBQ2QsWUFBSSxVQUFVO0FBQ1YsZ0JBQU0sSUFBSSxNQUFNLGtHQUFrRztBQUFBLFFBQ3RIO0FBQ0EsWUFBSSxPQUFPLFFBQVE7QUFDZixpQkFBTyxPQUFPLE9BQU8sU0FBUyxDQUFDO0FBQUEsUUFDbkM7QUFDQSxlQUFPRDtBQUFBLE1BQ1g7QUFBQSxNQUNBLFdBQVcsU0FBVSxNQUFNO0FBQ3ZCLFlBQUksT0FBT0MsWUFBVyxNQUFNLFFBQVE7QUFDcEMsZUFBTyxLQUFLLElBQUk7QUFDaEIsZUFBTyxXQUFZO0FBQ2YsbUJBQVMsT0FBTyxPQUFPLFNBQVVDLElBQUc7QUFBRSxtQkFBT0EsT0FBTTtBQUFBLFVBQU0sQ0FBQztBQUFBLFFBQzlEO0FBQUEsTUFDSjtBQUFBLE1BQ0Esa0JBQWtCLFNBQVUsSUFBSTtBQUM1QixtQkFBVztBQUNYLGVBQU8sT0FBTyxRQUFRO0FBQ2xCLGNBQUksTUFBTTtBQUNWLG1CQUFTLENBQUM7QUFDVixjQUFJLFFBQVEsRUFBRTtBQUFBLFFBQ2xCO0FBQ0EsaUJBQVM7QUFBQSxVQUNMLE1BQU0sU0FBVUEsSUFBRztBQUFFLG1CQUFPLEdBQUdBLEVBQUM7QUFBQSxVQUFHO0FBQUEsVUFDbkMsUUFBUSxXQUFZO0FBQUUsbUJBQU87QUFBQSxVQUFRO0FBQUEsUUFDekM7QUFBQSxNQUNKO0FBQUEsTUFDQSxjQUFjLFNBQVUsSUFBSTtBQUN4QixtQkFBVztBQUNYLFlBQUksZUFBZSxDQUFDO0FBQ3BCLFlBQUksT0FBTyxRQUFRO0FBQ2YsY0FBSSxNQUFNO0FBQ1YsbUJBQVMsQ0FBQztBQUNWLGNBQUksUUFBUSxFQUFFO0FBQ2QseUJBQWU7QUFBQSxRQUNuQjtBQUNBLFlBQUksZUFBZSxXQUFZO0FBQzNCLGNBQUlDLE9BQU07QUFDVix5QkFBZSxDQUFDO0FBQ2hCLFVBQUFBLEtBQUksUUFBUSxFQUFFO0FBQUEsUUFDbEI7QUFDQSxZQUFJLFFBQVEsV0FBWTtBQUFFLGlCQUFPLFFBQVEsUUFBUSxFQUFFLEtBQUssWUFBWTtBQUFBLFFBQUc7QUFDdkUsY0FBTTtBQUNOLGlCQUFTO0FBQUEsVUFDTCxNQUFNLFNBQVVELElBQUc7QUFDZix5QkFBYSxLQUFLQSxFQUFDO0FBQ25CLGtCQUFNO0FBQUEsVUFDVjtBQUFBLFVBQ0EsUUFBUSxTQUFVRSxTQUFRO0FBQ3RCLDJCQUFlLGFBQWEsT0FBT0EsT0FBTTtBQUN6QyxtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUNPLFdBQVMsYUFBYUosV0FBVUMsYUFBWTtBQUMvQyxRQUFJQSxnQkFBZSxRQUFRO0FBQUUsTUFBQUEsY0FBYTtBQUFBLElBQU07QUFDaEQsV0FBTyxrQkFBa0JELFdBQVVDLFdBQVU7QUFBQSxFQUNqRDtBQUVPLFdBQVMsb0JBQW9CLFNBQVM7QUFDekMsUUFBSSxZQUFZLFFBQVE7QUFBRSxnQkFBVSxDQUFDO0FBQUEsSUFBRztBQUN4QyxRQUFJLFNBQVMsa0JBQWtCLElBQUk7QUFDbkMsV0FBTyxVQUFVSSxVQUFTLEVBQUUsT0FBTyxNQUFNLEtBQUssTUFBTSxHQUFHLE9BQU87QUFDOUQsV0FBTztBQUFBLEVBQ1g7OztBQzVFQSxNQUFBQyxXQUF1QjtBQUN2QixNQUFJLFVBQVUsU0FBVSxJQUFJO0FBQ3hCLFFBQUksVUFBVSxHQUFHLFNBQVMsT0FBT0MsUUFBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3ZELFFBQUksQ0FBQyxTQUFTO0FBQ1YsWUFBTSxJQUFJLE1BQU0sb0VBQW9FO0FBQUEsSUFDeEY7QUFDQSxRQUFJLFNBQVMsUUFBUSxLQUFLO0FBQzFCLFFBQUksQ0FBQyxRQUFRO0FBQ1QsWUFBTSxJQUFJLE1BQU0sMEJBQTBCO0FBQUEsSUFDOUM7QUFDQSxXQUFhLHVCQUFjLFFBQVFDLFVBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUFBLEVBQ3pEO0FBQ0EsVUFBUSxrQkFBa0I7QUFDbkIsV0FBUyxjQUFjLFFBQVEsVUFBVTtBQUM1QyxXQUFPLFVBQVUsUUFBUTtBQUN6QixXQUFPO0FBQUEsRUFDWDs7O0FDaEJPLE1BQUksWUFBWSxvQkFBb0I7OztBUkkzQyxNQUFJLFVBQVUsV0FBWTtBQUN0QjtBQUFBLEVBQ0o7QUFJQSxNQUFJLGVBQXFCLG9CQUFXLFNBQVUsT0FBTyxXQUFXO0FBQzVELFFBQUksTUFBWSxnQkFBTyxJQUFJO0FBQzNCLFFBQUksS0FBVyxrQkFBUztBQUFBLE1BQ3BCLGlCQUFpQjtBQUFBLE1BQ2pCLGdCQUFnQjtBQUFBLE1BQ2hCLG9CQUFvQjtBQUFBLElBQ3hCLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxHQUFHLGVBQWUsR0FBRyxDQUFDO0FBQzFDLFFBQUksZUFBZSxNQUFNLGNBQWMsV0FBVyxNQUFNLFVBQVUsWUFBWSxNQUFNLFdBQVcsa0JBQWtCLE1BQU0saUJBQWlCLFVBQVUsTUFBTSxTQUFTLFNBQVMsTUFBTSxRQUFRLFVBQVUsTUFBTSxTQUFTLGNBQWMsTUFBTSxhQUFhLFFBQVEsTUFBTSxPQUFPLGlCQUFpQixNQUFNLGdCQUFnQixLQUFLLE1BQU0sSUFBSSxZQUFZLE9BQU8sU0FBUyxRQUFRLElBQUksVUFBVSxNQUFNLFNBQVMsT0FBTyxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsWUFBWSxhQUFhLG1CQUFtQixXQUFXLFVBQVUsV0FBVyxlQUFlLFNBQVMsa0JBQWtCLE1BQU0sU0FBUyxDQUFDO0FBQzFpQixRQUFJQyxXQUFVO0FBQ2QsUUFBSSxlQUFlLGFBQWEsQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUNoRCxRQUFJLGlCQUFpQixTQUFTLFNBQVMsQ0FBQyxHQUFHLElBQUksR0FBRyxTQUFTO0FBQzNELFdBQWM7QUFBQSxNQUFvQjtBQUFBLE1BQVU7QUFBQSxNQUN4QyxXQUFrQix1QkFBY0EsVUFBUyxFQUFFLFNBQVMsV0FBVyxpQkFBa0MsUUFBZ0IsYUFBMEIsT0FBYyxjQUE0QixnQkFBZ0IsQ0FBQyxDQUFDLGdCQUFnQixTQUFTLEtBQUssUUFBaUIsQ0FBQztBQUFBLE1BQ3ZQLGVBQXNCLHNCQUFtQixrQkFBUyxLQUFLLFFBQVEsR0FBRyxTQUFTLFNBQVMsQ0FBQyxHQUFHLGNBQWMsR0FBRyxFQUFFLEtBQUssYUFBYSxDQUFDLENBQUMsSUFBWSx1QkFBYyxXQUFXLFNBQVMsQ0FBQyxHQUFHLGdCQUFnQixFQUFFLFdBQXNCLEtBQUssYUFBYSxDQUFDLEdBQUcsUUFBUTtBQUFBLElBQUU7QUFBQSxFQUNqUSxDQUFDO0FBQ0QsZUFBYSxlQUFlO0FBQUEsSUFDeEIsU0FBUztBQUFBLElBQ1QsaUJBQWlCO0FBQUEsSUFDakIsT0FBTztBQUFBLEVBQ1g7QUFDQSxlQUFhLGFBQWE7QUFBQSxJQUN0QixXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsRUFDZjs7O0FTakNBLE1BQUFDLFdBQXVCO0FBQ3ZCLE1BQUFDLHNCQUEwRTs7O0FDQ25FLE1BQUksY0FBYztBQUlsQixNQUFJLGlCQUFpQjtBQUlyQixNQUFJLGNBQWM7QUFLbEIsTUFBSSxhQUFhO0FBS2pCLE1BQUkscUJBQXFCOzs7QUNyQmhDLE1BQUFDLFdBQXVCO0FBQ3ZCLE1BQUFDLHNCQUFzQjtBQUNmLE1BQUksY0FBYztBQUFBLElBQ3ZCLE9BQU87QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLEtBQUs7QUFBQSxJQUNMLE1BQU07QUFBQSxFQUNSO0FBQ0EsTUFBSSxlQUFlLFNBQVNDLGNBQWFDLFFBQU07QUFDN0MsUUFBSSxnQkFBZ0JBLE9BQUssVUFDdkIsV0FBVyxrQkFBa0IsU0FBUyxPQUFPO0FBQy9DLFdBQW9CLGdCQUFNLHVCQUFvQixtQkFBVSxNQUFtQixnQkFBTSx1QkFBYyxPQUFPO0FBQUEsTUFDcEcsS0FBSztBQUFBLE1BQ0wsb0JBQW9CO0FBQUEsTUFDcEIseUJBQXlCO0FBQUEsTUFDekIsT0FBTztBQUFBLElBQ1QsQ0FBQyxHQUFHLFVBQVUsWUFBeUIsZ0JBQU0sdUJBQWMsT0FBTztBQUFBLE1BQ2hFLEtBQUs7QUFBQSxNQUNMLG9CQUFvQjtBQUFBLE1BQ3BCLHlCQUF5QjtBQUFBLE1BQ3pCLE9BQU87QUFBQSxJQUNULENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFDQSxlQUFhLFlBQVksT0FBd0M7QUFBQSxJQUMvRCxVQUFVLG9CQUFBQyxRQUFVO0FBQUEsRUFDdEIsSUFBSSxDQUFDOzs7QUMzQkUsTUFBSSxjQUFjLGFBQWEsQ0FBQyxHQUFHLFNBQVVDLFFBQU07QUFDeEQsUUFBSSxTQUFTQSxPQUFLLFFBQ2hCLGdCQUFnQkEsT0FBSztBQUN2QixXQUFPO0FBQUEsTUFDTDtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ00sTUFBSSxhQUFhLGFBQWE7QUFDOUIsTUFBSSxlQUFlLGFBQWE7QUFDaEMsTUFBSSxnQkFBZ0Isb0JBQW9CO0FBQUEsSUFDN0MsT0FBTztBQUFBLElBQ1AsS0FBSyxPQUFPLGFBQWE7QUFBQSxFQUMzQixDQUFDOzs7QUNkRCxNQUFBQyxrQkFBOEI7QUFDdkIsTUFBSSxhQUEwQixtREFBYyxNQUFTOzs7QUpPNUQsTUFBSSxhQUFhLENBQUM7QUFDbEIsTUFBSSxZQUF5QixnQkFBTSxvQkFBVyxTQUFTLFlBQVksT0FBTyxXQUFXO0FBQ25GLFFBQUlDO0FBQ0osUUFBSSxrQkFBd0Isa0JBQVMsR0FDbkMsZUFBZSxnQkFBZ0IsQ0FBQyxHQUNoQyxjQUFjLGdCQUFnQixDQUFDO0FBQ2pDLFFBQUksV0FBaUIsZ0JBQU87QUFDNUIsUUFBSSxXQUFpQixnQkFBTyxLQUFLO0FBQ2pDLFFBQUkseUJBQStCLGdCQUFPLElBQUk7QUFDOUMsUUFBSSxtQkFBeUIsa0JBQVMsQ0FBQyxDQUFDLEdBQ3RDLFNBQVMsaUJBQWlCLENBQUM7QUFDN0IsUUFBSSxXQUFXLE1BQU0sVUFDbkIsa0JBQWtCLE1BQU0sVUFDeEIsV0FBVyxvQkFBb0IsU0FBUyxRQUFRLGlCQUNoRCx1QkFBdUIsTUFBTSxlQUM3QixnQkFBZ0IseUJBQXlCLFNBQVMsUUFBUSxzQkFDMUQsd0JBQXdCLE1BQU0saUJBQzlCLGtCQUFrQiwwQkFBMEIsU0FBUyxRQUFRLHVCQUM3RCxvQkFBb0IsTUFBTSxZQUMxQixhQUFhLHNCQUFzQixTQUFTLE9BQU8sbUJBQ25ELG1CQUFtQixNQUFNLFdBQ3pCLFlBQVkscUJBQXFCLFNBQVMsT0FBTyxrQkFDakQscUJBQXFCLE1BQU0sb0JBQzNCLFFBQVEsTUFBTSxPQUNkLFlBQVksTUFBTSxXQUNsQixZQUFZLE1BQU0sV0FDbEIscUJBQXFCLE1BQU0sb0JBQzNCLGdCQUFnQixNQUFNLFFBQ3RCLFNBQVMsa0JBQWtCLFNBQVMsYUFBYSxlQUNqRCxZQUFZLE1BQU0sSUFDbEIsWUFBWSxjQUFjLFNBQVMsUUFBUSxXQUMzQyxtQkFBbUIsTUFBTSxXQUN6QixpQkFBaUIscUJBQXFCLFNBQVMsQ0FBQyxJQUFJLGtCQUNwREMsV0FBVSxNQUFNLFNBQ2hCLHFCQUFxQixNQUFNLGFBQzNCLG9CQUFvQix1QkFBdUIsU0FBUyxRQUFRLG9CQUM1RCxlQUFlLE1BQU0sY0FDckIsdUJBQXVCLE1BQU0sY0FDN0IseUJBQXlCLE1BQU07QUFDakMsUUFBSSxtQkFBeUIsa0JBQVMsQ0FBQyxDQUFDLEdBQ3RDLEtBQUssaUJBQWlCLENBQUM7QUFDekIsUUFBSSxlQUFxQixxQkFBWSxTQUFVQyxRQUFNO0FBQ25ELFVBQUlDLHVCQUFzQkQsT0FBSztBQUMvQixVQUFJLENBQUMsdUJBQXVCLFNBQVM7QUFDbkMsWUFBSTtBQUNKLFlBQUksaUJBQWlCLFlBQVksYUFBYSxPQUFPLFNBQVMsVUFBVTtBQUN4RSwrQkFBdUIsVUFBVTtBQUNqQyxZQUFJLGtCQUFrQixTQUFTLE1BQU07QUFDbkMsaUNBQXVCLFVBQVVDLHFCQUFvQixhQUFhO0FBQUEsUUFDcEU7QUFBQSxNQUNGO0FBQ0EsVUFBSSxTQUFTLFdBQVcsc0JBQXNCO0FBQzVDLDZCQUFxQixTQUFTLE9BQU87QUFBQSxNQUN2QztBQUNBLGVBQVMsVUFBVTtBQUNuQixhQUFPO0FBQUEsSUFDVCxHQUFHLENBQUMsb0JBQW9CLENBQUM7QUFDekIsUUFBSSxpQkFBdUIscUJBQVksV0FBWTtBQUNqRCxlQUFTLFVBQVU7QUFDbkIsVUFBSSx3QkFBd0I7QUFDMUIsK0JBQXVCLFNBQVMsT0FBTztBQUFBLE1BQ3pDO0FBQ0EsYUFBTztBQUFBLElBQ1QsR0FBRyxDQUFDLHNCQUFzQixDQUFDO0FBQzNCLFFBQUksY0FBb0IscUJBQVksU0FBVSxZQUFZO0FBQ3hELFVBQUksZUFBZSx1QkFBdUI7QUFDMUMsVUFBSSxjQUFjO0FBQ2hCLFlBQUksaUJBQWlCLE9BQU8saUJBQWlCLGFBQWEsYUFBYSxJQUFJLGlCQUFpQixTQUFTO0FBQ3JHLFlBQUksbUJBQW1CLE9BQU8sc0JBQXNCLGFBQWEsa0JBQWtCLGFBQWEsSUFBSTtBQUNwRyxZQUFJLGtCQUFrQjtBQUNwQixjQUFJLHFCQUFxQixPQUFPLHFCQUFxQixXQUFXLG1CQUFtQjtBQUNuRixpQ0FBdUIsVUFBVTtBQUNqQyxjQUFJLFlBQVk7QUFDZCxvQkFBUSxRQUFRLEVBQUUsS0FBSyxXQUFZO0FBQ2pDLHFCQUFPLGNBQWMsTUFBTSxrQkFBa0I7QUFBQSxZQUMvQyxDQUFDO0FBQUEsVUFDSCxPQUFPO0FBQ0wsMEJBQWMsTUFBTSxrQkFBa0I7QUFBQSxVQUN4QztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFHLENBQUMsaUJBQWlCLENBQUM7QUFDdEIsUUFBSUMsV0FBZ0IscUJBQVksU0FBVSxPQUFPO0FBQy9DLFVBQUksU0FBUyxTQUFTO0FBQ3BCLG9CQUFZLFVBQVUsS0FBSztBQUFBLE1BQzdCO0FBQUEsSUFDRixHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUlDLFVBQVMsV0FBVztBQUN4QixRQUFJLGlCQUF1QixxQkFBWSxTQUFVLGFBQWE7QUFDNUQsVUFBSSxTQUFTLFlBQVksYUFBYTtBQUNwQyxpQkFBUyxVQUFVO0FBQ25CLG9CQUFZLFdBQVc7QUFBQSxNQUN6QjtBQUFBLElBQ0YsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFJLE1BQXVDO0FBQ3pDLFVBQUksT0FBTyx1QkFBdUIsYUFBYTtBQUM3QyxnQkFBUSxLQUFLLDJFQUEyRTtBQUFBLE1BQzFGO0FBQ0EsTUFBTSxtQkFBVSxXQUFZO0FBQzFCLFlBQUksQ0FBQyxTQUFTLFdBQVcsT0FBTyxjQUFjLFVBQVU7QUFDdEQsa0JBQVEsTUFBTSxrREFBa0Q7QUFBQSxRQUNsRTtBQUFBLE1BQ0YsR0FBRyxDQUFDLENBQUM7QUFBQSxJQUNQO0FBQ0EsUUFBSSxZQUFZLFVBQVVMLGVBQVksQ0FBQyxHQUFHQSxhQUFvQixjQUFjLElBQUksWUFBWSxZQUFZQSxhQUFvQixXQUFXLElBQUksT0FBT0EsZUFBWSxjQUFjO0FBQzVLLFFBQUksbUJBQW1CLGtCQUFrQjtBQUN6QyxRQUFJLG1CQUFtQixvQkFBb0Isa0JBQWtCO0FBQzdELFFBQUksWUFBWSxhQUFhLENBQUMsV0FBVyxjQUFjLENBQUM7QUFDeEQsUUFBSSxrQkFBd0IsaUJBQVEsV0FBWTtBQUM5QyxhQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0E7QUFBQSxRQUNBLFNBQVMsQ0FBQztBQUFBLFFBQ1YsUUFBUSxTQUFTO0FBQUEsTUFDbkI7QUFBQSxJQUNGLEdBQUcsQ0FBQyxVQUFVLFNBQVMsU0FBUyxRQUFRLFlBQVksQ0FBQztBQUNyRCxXQUFvQixnQkFBTSx1QkFBb0IsbUJBQVUsTUFBTSxvQkFBb0I7QUFBQSxNQUVsRixnQkFBTSx1QkFBYyxPQUFPO0FBQUEsUUFDekIsS0FBSztBQUFBLFFBQ0wsb0JBQW9CO0FBQUEsUUFDcEIsVUFBVSxXQUFXLEtBQUs7QUFBQSxRQUMxQixPQUFPO0FBQUEsTUFDVCxDQUFDO0FBQUEsTUFBRyxxQkFBa0MsZ0JBQU0sdUJBQWMsT0FBTztBQUFBLFFBQy9ELEtBQUs7QUFBQSxRQUNMLG9CQUFvQjtBQUFBLFFBQ3BCLFVBQVUsV0FBVyxLQUFLO0FBQUEsUUFDMUIsT0FBTztBQUFBLE1BQ1QsQ0FBQyxJQUFJO0FBQUEsSUFBSSxHQUFHLENBQUMsWUFBeUIsZ0JBQU0sdUJBQWNDLFVBQVM7QUFBQSxNQUNqRTtBQUFBLE1BQ0EsU0FBUztBQUFBLE1BQ1QsVUFBVTtBQUFBLE1BQ1Y7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDLEdBQWdCLGdCQUFNLHVCQUFjLFdBQVcsU0FBUztBQUFBLE1BQ3ZELEtBQUs7QUFBQSxJQUNQLEdBQUcsV0FBVztBQUFBLE1BQ1o7QUFBQSxNQUNBLFFBQVFJO0FBQUEsTUFDUixTQUFTRDtBQUFBLElBQ1gsQ0FBQyxHQUFnQixnQkFBTSx1QkFBYyxXQUFXLFVBQVU7QUFBQSxNQUN4RCxPQUFPO0FBQUEsSUFDVCxHQUFHLFFBQVEsQ0FBQyxHQUFHLG9CQUFpQyxnQkFBTSx1QkFBYyxPQUFPO0FBQUEsTUFDekUsb0JBQW9CO0FBQUEsTUFDcEIsVUFBVSxXQUFXLEtBQUs7QUFBQSxNQUMxQixPQUFPO0FBQUEsSUFDVCxDQUFDLENBQUM7QUFBQSxFQUNKLENBQUM7QUFDRCxZQUFVLFlBQVksT0FBd0M7QUFBQSxJQUM1RCxVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixpQkFBYSwrQkFBVSxDQUFDLDBCQUFNLDRCQUFRLHdCQUFJLENBQUM7QUFBQSxJQUMzQyxjQUFjO0FBQUEsSUFDZCxlQUFlO0FBQUEsSUFDZixvQkFBb0I7QUFBQSxJQUNwQixvQkFBb0I7QUFBQSxJQUNwQixXQUFXO0FBQUEsSUFDWCxpQkFBaUI7QUFBQSxJQUNqQixZQUFZO0FBQUEsSUFDWixPQUFPO0FBQUEsSUFDUCxXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxZQUFRLDZCQUFRLHVCQUFHO0FBQUEsSUFDbkIsUUFBSSwrQkFBVSxDQUFDLDRCQUFRLDBCQUFNLDBCQUFNLENBQUM7QUFBQSxJQUNwQyxXQUFXO0FBQUEsSUFDWCxjQUFjO0FBQUEsSUFDZCxnQkFBZ0I7QUFBQSxJQUNoQixTQUFTLHdCQUFJO0FBQUEsRUFDZixJQUFJLENBQUM7QUFDTCxNQUFPLGVBQVE7OztBSzFMUixXQUFTLFlBQVksUUFBUTtBQUNsQyxlQUFXLFFBQVEsQ0FBQztBQUFBLEVBQ3RCO0FBTU8sTUFBSSxhQUFhLFNBQVNFLFlBQVcsS0FBSztBQUMvQyxXQUFPLE9BQU8sYUFBYSxNQUFNLElBQUksVUFBVTtBQUFBLEVBQ2pEOzs7QUNGQSxNQUFPLGFBQVE7OztBQ1BSLE1BQUlDLGFBQVksb0JBQW9CO0FBQ3BDLE1BQUksb0JBQW9COzs7QWpCRy9CLE1BQUksaUJBQWlCLEVBQUUsZUFBZSxLQUFLO0FBQ3BDLE1BQUksVUFBZ0Isb0JBQVcsU0FBVSxPQUFPLFdBQVc7QUFDOUQsUUFBSSxLQUFXLGtCQUFTLEtBQUssR0FBRyxZQUFZLEdBQUcsQ0FBQyxHQUFHLGVBQWUsR0FBRyxDQUFDO0FBQ3RFLFFBQUksV0FBVyxNQUFNLFVBQVUsWUFBWSxNQUFNLFdBQVcsU0FBUyxNQUFNLFFBQVEsYUFBYSxNQUFNLFlBQVksS0FBSyxNQUFNLFNBQVMsVUFBVSxPQUFPLFNBQVMsT0FBTyxJQUFJLEtBQUssTUFBTSxZQUFZLGFBQWEsT0FBTyxTQUFTLE9BQU8sSUFBSSxLQUFLLE1BQU0sV0FBVyxZQUFZLE9BQU8sU0FBUyxPQUFPLElBQUksS0FBSyxNQUFNLGFBQWEsY0FBYyxPQUFPLFNBQVMsT0FBTyxJQUFJLFFBQVEsTUFBTSxPQUFPLGlCQUFpQixNQUFNLGdCQUFnQixVQUFVLE1BQU0sU0FBUyxZQUFZLE1BQU0sV0FBVyxlQUFlLE1BQU0sY0FBYyx1QkFBdUIsTUFBTSxzQkFBc0IsUUFBUSxNQUFNLE9BQU8sS0FBSyxNQUFNLElBQUksVUFBVSxNQUFNLFNBQVMsT0FBTyxPQUFPLE9BQU8sQ0FBQyxZQUFZLGFBQWEsVUFBVSxjQUFjLFdBQVcsY0FBYyxhQUFhLGVBQWUsU0FBUyxrQkFBa0IsV0FBVyxhQUFhLGdCQUFnQix3QkFBd0IsU0FBUyxNQUFNLFNBQVMsQ0FBQztBQUM3MUIsUUFBSUMsV0FBVTtBQUNkLFFBQUksZUFBZSxVQUFVLGNBQWMsaUJBQWlCLFVBQVUsZ0JBQWdCLFlBQVksT0FBTyxXQUFXLENBQUMsZ0JBQWdCLGdCQUFnQixDQUFDO0FBQ3RKLFFBQUksbUJBQW1CLFNBQVMsU0FBUyxDQUFDLEdBQUcsU0FBUyxHQUFHO0FBQUEsTUFBRTtBQUFBLE1BQ3ZEO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUFjLFNBQVMsV0FBVztBQUFBLElBQVcsQ0FBQztBQUNsRCxXQUFjO0FBQUEsTUFBb0I7QUFBQSxNQUFVO0FBQUEsTUFDbEMsdUJBQWMsWUFBZ0IsRUFBRSxLQUFLLFdBQVcsU0FBa0IsVUFBVSxFQUFFLGFBQWEsV0FBVyxZQUFZLGFBQTBCLFdBQXNCLFFBQWdCLFlBQXdCLGNBQTRCLGdCQUFnQyxXQUFzQixXQUFXLGNBQWMsV0FBVyxrQkFBa0IsY0FBYyx1QkFBdUIsaUJBQWlCLFFBQVcsSUFBSSxhQUFhLEdBQUcsUUFBUTtBQUFBLE1BQ3JiLFdBQWtCLHVCQUFjQSxVQUFTLFNBQVMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxTQUFTQyxZQUFXLGNBQTRCLE9BQWUsQ0FBQyxDQUFDO0FBQUEsSUFBRTtBQUFBLEVBQ3pJLENBQUM7OztBa0JyQkQsTUFBQUMsV0FBdUI7QUFDdkIsTUFBQUMsc0JBQXNCOzs7QUNEdEIsV0FBU0MsaUJBQWdCLEdBQUcsR0FBRztBQUM3QixXQUFPQSxtQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxlQUFlLEtBQUssSUFBSSxTQUFVQyxJQUFHQyxJQUFHO0FBQzlGLGFBQU9ELEdBQUUsWUFBWUMsSUFBR0Q7QUFBQSxJQUMxQixHQUFHRCxpQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFDekI7OztBQ0hBLFdBQVMsZUFBZSxHQUFHLEdBQUc7QUFDNUIsTUFBRSxZQUFZLE9BQU8sT0FBTyxFQUFFLFNBQVMsR0FBRyxFQUFFLFVBQVUsY0FBYyxHQUFHRyxpQkFBZSxHQUFHLENBQUM7QUFBQSxFQUM1Rjs7O0FDSEEsV0FBU0MsVUFBUSxHQUFHO0FBQ2xCO0FBRUEsV0FBT0EsWUFBVSxjQUFjLE9BQU8sVUFBVSxZQUFZLE9BQU8sT0FBTyxXQUFXLFNBQVVDLElBQUc7QUFDaEcsYUFBTyxPQUFPQTtBQUFBLElBQ2hCLElBQUksU0FBVUEsSUFBRztBQUNmLGFBQU9BLE1BQUssY0FBYyxPQUFPLFVBQVVBLEdBQUUsZ0JBQWdCLFVBQVVBLE9BQU0sT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxJQUNwSCxHQUFHRCxVQUFRLENBQUM7QUFBQSxFQUNkOzs7QUNQQSxXQUFTLFlBQVksR0FBRyxHQUFHO0FBQ3pCLFFBQUksWUFBWUUsVUFBUSxDQUFDLEtBQUssQ0FBQztBQUFHLGFBQU87QUFDekMsUUFBSSxJQUFJLEVBQUUsT0FBTyxXQUFXO0FBQzVCLFFBQUksV0FBVyxHQUFHO0FBQ2hCLFVBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxLQUFLLFNBQVM7QUFDaEMsVUFBSSxZQUFZQSxVQUFRLENBQUM7QUFBRyxlQUFPO0FBQ25DLFlBQU0sSUFBSSxVQUFVLDhDQUE4QztBQUFBLElBQ3BFO0FBQ0EsWUFBUSxhQUFhLElBQUksU0FBUyxRQUFRLENBQUM7QUFBQSxFQUM3Qzs7O0FDUkEsV0FBUyxjQUFjLEdBQUc7QUFDeEIsUUFBSSxJQUFJLFlBQVksR0FBRyxRQUFRO0FBQy9CLFdBQU8sWUFBWUMsVUFBUSxDQUFDLElBQUksSUFBSSxJQUFJO0FBQUEsRUFDMUM7OztBQ0pBLFdBQVNDLGtCQUFnQixHQUFHLEdBQUcsR0FBRztBQUNoQyxZQUFRLElBQUksY0FBYyxDQUFDLE1BQU0sSUFBSSxPQUFPLGVBQWUsR0FBRyxHQUFHO0FBQUEsTUFDL0QsT0FBTztBQUFBLE1BQ1AsWUFBWTtBQUFBLE1BQ1osY0FBYztBQUFBLE1BQ2QsVUFBVTtBQUFBLElBQ1osQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEdBQUc7QUFBQSxFQUNqQjs7O0FDTkEsTUFBQUMsa0JBQXFDO0FBRXJDLFdBQVMsZUFBZUMscUJBQW9CQyw0QkFBMkI7QUFDckUsUUFBSSxNQUF1QztBQUN6QyxVQUFJLE9BQU9ELHdCQUF1QixZQUFZO0FBQzVDLGNBQU0sSUFBSSxNQUFNLCtDQUErQztBQUFBLE1BQ2pFO0FBRUEsVUFBSSxPQUFPQywrQkFBOEIsWUFBWTtBQUNuRCxjQUFNLElBQUksTUFBTSxzREFBc0Q7QUFBQSxNQUN4RTtBQUFBLElBQ0Y7QUFFQSxhQUFTLGVBQWUsa0JBQWtCO0FBQ3hDLGFBQU8saUJBQWlCLGVBQWUsaUJBQWlCLFFBQVE7QUFBQSxJQUNsRTtBQUVBLFdBQU8sU0FBUyxLQUFLLGtCQUFrQjtBQUNyQyxVQUFJLE1BQXVDO0FBQ3pDLFlBQUksT0FBTyxxQkFBcUIsWUFBWTtBQUMxQyxnQkFBTSxJQUFJLE1BQU0sb0RBQW9EO0FBQUEsUUFDdEU7QUFBQSxNQUNGO0FBRUEsVUFBSSxtQkFBbUIsQ0FBQztBQUN4QixVQUFJO0FBRUosZUFBUyxhQUFhO0FBQ3BCLGdCQUFRRCxvQkFBbUIsaUJBQWlCLElBQUksU0FBVSxVQUFVO0FBQ2xFLGlCQUFPLFNBQVM7QUFBQSxRQUNsQixDQUFDLENBQUM7QUFDRixRQUFBQywyQkFBMEIsS0FBSztBQUFBLE1BQ2pDO0FBRUEsVUFBSSxhQUEwQix5QkFBVSxnQkFBZ0I7QUFDdEQsdUJBQWVDLGFBQVksY0FBYztBQUV6QyxpQkFBU0EsY0FBYTtBQUNwQixpQkFBTyxlQUFlLE1BQU0sTUFBTSxTQUFTLEtBQUs7QUFBQSxRQUNsRDtBQUdBLFFBQUFBLFlBQVcsT0FBTyxTQUFTQyxRQUFPO0FBQ2hDLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksU0FBU0QsWUFBVztBQUV4QixlQUFPLG9CQUFvQixTQUFTLG9CQUFvQjtBQUN0RCwyQkFBaUIsS0FBSyxJQUFJO0FBQzFCLHFCQUFXO0FBQUEsUUFDYjtBQUVBLGVBQU8scUJBQXFCLFNBQVMscUJBQXFCO0FBQ3hELHFCQUFXO0FBQUEsUUFDYjtBQUVBLGVBQU8sdUJBQXVCLFNBQVMsdUJBQXVCO0FBQzVELGNBQUksUUFBUSxpQkFBaUIsUUFBUSxJQUFJO0FBQ3pDLDJCQUFpQixPQUFPLE9BQU8sQ0FBQztBQUNoQyxxQkFBVztBQUFBLFFBQ2I7QUFFQSxlQUFPLFNBQVMsU0FBU0UsVUFBUztBQUNoQyxpQkFBb0IsZ0NBQUFDLFFBQU0sY0FBYyxrQkFBa0IsS0FBSyxLQUFLO0FBQUEsUUFDdEU7QUFFQSxlQUFPSDtBQUFBLE1BQ1QsRUFBRSw2QkFBYTtBQUVmLE1BQUFJLGtCQUFnQixZQUFZLGVBQWUsZ0JBQWdCLGVBQWUsZ0JBQWdCLElBQUksR0FBRztBQUVqRyxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxNQUFPLG1CQUFROzs7QUMzRVIsTUFBSUMsV0FBVSxTQUFVLEdBQUc7QUFDOUIsUUFBSSxNQUFNLE1BQU0sRUFBRSxNQUFNO0FBQ3hCLGFBQVMsSUFBSSxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRztBQUMvQixVQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFBQSxJQUNoQjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBQ08sTUFBSUMsV0FBVSxTQUFVLEdBQUc7QUFBRSxXQUFRLE1BQU0sUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7QUFBQSxFQUFJO0FBQ2xFLE1BQUksV0FBVyxTQUFVLEdBQUc7QUFBRSxXQUFRLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUk7QUFBQSxFQUFJOzs7QUNWM0UsTUFBSSxrQkFBa0IsU0FBVUMsT0FBTTtBQUdsQyxRQUFJQSxNQUFLLGFBQWEsS0FBSyxjQUFjO0FBQ3JDLGFBQU87QUFBQSxJQUNYO0FBQ0EsUUFBSSxnQkFBZ0IsT0FBTyxpQkFBaUJBLE9BQU0sSUFBSTtBQUN0RCxRQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxrQkFBa0I7QUFDbkQsYUFBTztBQUFBLElBQ1g7QUFDQSxXQUFRLGNBQWMsaUJBQWlCLFNBQVMsTUFBTSxVQUFVLGNBQWMsaUJBQWlCLFlBQVksTUFBTTtBQUFBLEVBQ3JIO0FBQ0EsTUFBSSxnQkFBZ0IsU0FBVUEsT0FBTTtBQUVoQyxXQUFPQSxNQUFLLGNBQWNBLE1BQUssV0FBVyxhQUFhLEtBQUs7QUFBQTtBQUFBLE1BRXBEQSxNQUFLLFdBQVc7QUFBQSxRQUNsQkEsTUFBSztBQUFBLEVBQ2Y7QUFDQSxNQUFJLFlBQVksU0FBVUEsT0FBTTtBQUU1QixXQUFPQSxVQUFTLFlBQWFBLFNBQVFBLE1BQUssYUFBYSxLQUFLO0FBQUEsRUFDaEU7QUFDQSxNQUFJLFVBQVUsU0FBVUEsT0FBTTtBQUFFLFdBQU9BLE1BQUssYUFBYSxPQUFPO0FBQUEsRUFBRztBQUluRSxNQUFJLG9CQUFvQixTQUFVQSxPQUFNLGFBQWE7QUFDakQsV0FBTyxDQUFDQSxTQUFRLFVBQVVBLEtBQUksS0FBTSxDQUFDLGdCQUFnQkEsS0FBSSxLQUFLLENBQUMsUUFBUUEsS0FBSSxLQUFLLFlBQVksY0FBY0EsS0FBSSxDQUFDO0FBQUEsRUFDbkg7QUFDTyxNQUFJLGtCQUFrQixTQUFVLGlCQUFpQkEsT0FBTTtBQUMxRCxRQUFJLFNBQVMsZ0JBQWdCLElBQUlBLEtBQUk7QUFDckMsUUFBSSxXQUFXLFFBQVc7QUFDdEIsYUFBTztBQUFBLElBQ1g7QUFDQSxRQUFJLFNBQVMsa0JBQWtCQSxPQUFNLGdCQUFnQixLQUFLLFFBQVcsZUFBZSxDQUFDO0FBQ3JGLG9CQUFnQixJQUFJQSxPQUFNLE1BQU07QUFDaEMsV0FBTztBQUFBLEVBQ1g7QUFDQSxNQUFJLDZCQUE2QixTQUFVQSxPQUFNLGFBQWE7QUFDMUQsV0FBT0EsU0FBUSxDQUFDLFVBQVVBLEtBQUksSUFBSyxtQkFBbUJBLEtBQUksSUFBSSxZQUFZLGNBQWNBLEtBQUksQ0FBQyxJQUFJLFFBQVM7QUFBQSxFQUM5RztBQUNPLE1BQUksMkJBQTJCLFNBQVUsT0FBT0EsT0FBTTtBQUN6RCxRQUFJLFNBQVMsTUFBTSxJQUFJQSxLQUFJO0FBQzNCLFFBQUksV0FBVyxRQUFXO0FBQ3RCLGFBQU87QUFBQSxJQUNYO0FBQ0EsUUFBSSxTQUFTLDJCQUEyQkEsT0FBTSx5QkFBeUIsS0FBSyxRQUFXLEtBQUssQ0FBQztBQUM3RixVQUFNLElBQUlBLE9BQU0sTUFBTTtBQUN0QixXQUFPO0FBQUEsRUFDWDtBQUNPLE1BQUksYUFBYSxTQUFVQSxPQUFNO0FBRXBDLFdBQU9BLE1BQUs7QUFBQSxFQUNoQjtBQUNPLE1BQUksc0JBQXNCLFNBQVVBLE9BQU07QUFBRSxXQUFPQSxNQUFLLFlBQVk7QUFBQSxFQUFVO0FBQzlFLE1BQUkscUJBQXFCLFNBQVVBLE9BQU07QUFBRSxXQUFPQSxNQUFLLFlBQVk7QUFBQSxFQUFTO0FBQzVFLE1BQUksaUJBQWlCLFNBQVVBLE9BQU07QUFDeEMsV0FBTyxtQkFBbUJBLEtBQUksS0FBS0EsTUFBSyxTQUFTO0FBQUEsRUFDckQ7QUFDTyxNQUFJLGlCQUFpQixTQUFVQSxPQUFNO0FBQ3hDLFdBQU8sR0FBRyxtQkFBbUJBLEtBQUksS0FBSyxvQkFBb0JBLEtBQUksT0FBT0EsTUFBSyxTQUFTLFlBQVlBLE1BQUs7QUFBQSxFQUN4RztBQUNPLE1BQUkscUJBQXFCLFNBQVVBLE9BQU07QUFDNUMsUUFBSSxZQUFZQSxNQUFLLGFBQWEsa0JBQWtCO0FBQ3BELFdBQU8sQ0FBQyxDQUFDLE1BQU0sUUFBUSxFQUFFLEVBQUUsU0FBUyxTQUFTO0FBQUEsRUFDakQ7QUFDTyxNQUFJLFVBQVUsU0FBVUEsT0FBTTtBQUFFLFFBQUk7QUFBSSxXQUFPLFFBQVFBLFdBQVUsS0FBSyxXQUFXQSxLQUFJLE9BQU8sUUFBUSxPQUFPLFNBQVMsU0FBUyxHQUFHLFdBQVc7QUFBQSxFQUFHO0FBQzlJLE1BQUksY0FBYyxTQUFVQSxPQUFNO0FBQUUsV0FBTyxDQUFDLFFBQVFBLEtBQUk7QUFBQSxFQUFHO0FBQzNELE1BQUksWUFBWSxTQUFVQyxJQUFHO0FBQUUsV0FBTyxRQUFRQSxFQUFDO0FBQUEsRUFBRzs7O0FDckVsRCxNQUFJLFVBQVUsU0FBVSxHQUFHQyxJQUFHO0FBQ2pDLFFBQUksT0FBTyxLQUFLLElBQUksR0FBRyxFQUFFLFFBQVE7QUFDakMsUUFBSSxPQUFPLEtBQUssSUFBSSxHQUFHQSxHQUFFLFFBQVE7QUFDakMsUUFBSSxVQUFVLE9BQU87QUFDckIsUUFBSSxZQUFZLEVBQUUsUUFBUUEsR0FBRTtBQUM1QixRQUFJLFNBQVM7QUFDVCxVQUFJLENBQUMsTUFBTTtBQUNQLGVBQU87QUFBQSxNQUNYO0FBQ0EsVUFBSSxDQUFDLE1BQU07QUFDUCxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFDQSxXQUFPLFdBQVc7QUFBQSxFQUN0QjtBQUNBLE1BQUksY0FBYyxTQUFVQyxPQUFNO0FBQzlCLFFBQUlBLE1BQUssV0FBVyxHQUFHO0FBSW5CLFVBQUksQ0FBQ0EsTUFBSyxhQUFhLFVBQVUsR0FBRztBQUNoQyxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFDQSxXQUFPQSxNQUFLO0FBQUEsRUFDaEI7QUFDTyxNQUFJLGtCQUFrQixTQUFVLE9BQU8sZ0JBQWdCLFlBQVk7QUFDdEUsV0FBT0MsU0FBUSxLQUFLLEVBQ2YsSUFBSSxTQUFVRCxPQUFNLE9BQU87QUFDNUIsVUFBSSxXQUFXLFlBQVlBLEtBQUk7QUFDL0IsYUFBTztBQUFBLFFBQ0gsTUFBTUE7QUFBQSxRQUNOO0FBQUEsUUFDQSxVQUFVLGNBQWMsYUFBYSxNQUFPQSxNQUFLLFdBQVcsQ0FBQyxHQUFHLGFBQWEsSUFBSSxLQUFNO0FBQUEsTUFDM0Y7QUFBQSxJQUNKLENBQUMsRUFDSSxPQUFPLFNBQVUsTUFBTTtBQUFFLGFBQU8sQ0FBQyxrQkFBa0IsS0FBSyxZQUFZO0FBQUEsSUFBRyxDQUFDLEVBQ3hFLEtBQUssT0FBTztBQUFBLEVBQ3JCOzs7QUNwQ08sTUFBSSxZQUFZO0FBQUEsSUFDbkI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQTtBQUFBO0FBQUEsSUFHQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNKOzs7QUNsQkEsTUFBSSxpQkFBaUIsVUFBVSxLQUFLLEdBQUc7QUFDdkMsTUFBSSxzQkFBc0IsR0FBRyxPQUFPLGdCQUFnQixzQkFBc0I7QUFDMUUsTUFBSSw2QkFBNkIsU0FBVSxRQUFRLFlBQVk7QUFDM0QsV0FBT0UsVUFBUyxPQUFPLGNBQWMsUUFBUSxRQUFRLEVBQUUsT0FBTyxTQUFVLEtBQUssT0FBTztBQUNoRixhQUFPLElBQUksT0FBTyxNQUFNLFFBQVEsYUFBYSxzQkFBc0IsY0FBYyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRywyQkFBMkIsS0FBSyxDQUFDO0FBQUEsSUFDeEksR0FBRyxDQUFDLENBQUM7QUFBQSxFQUNUO0FBQ0EsTUFBSSwwQkFBMEIsU0FBVSxRQUFRLFlBQVk7QUFDeEQsUUFBSTtBQUVKLFFBQUksa0JBQWtCLHVCQUF1QixLQUFLLE9BQU8scUJBQXFCLFFBQVEsT0FBTyxTQUFTLFNBQVMsR0FBRyxPQUFPO0FBQ3JILGFBQU8sY0FBYyxDQUFDLE9BQU8sZ0JBQWdCLElBQUksR0FBRyxVQUFVO0FBQUEsSUFDbEU7QUFDQSxXQUFPLENBQUMsTUFBTTtBQUFBLEVBQ2xCO0FBQ08sTUFBSSxnQkFBZ0IsU0FBVSxTQUFTLFlBQVk7QUFDdEQsV0FBTyxRQUFRLE9BQU8sU0FBVSxLQUFLLFFBQVE7QUFDekMsVUFBSTtBQUNKLFVBQUkseUJBQXlCLDJCQUEyQixRQUFRLFVBQVU7QUFDMUUsVUFBSSx3QkFBd0IsS0FBSyxDQUFDLEdBQUcsT0FBTyxNQUFNLElBQUksdUJBQXVCLElBQUksU0FBVUMsT0FBTTtBQUFFLGVBQU8sd0JBQXdCQSxPQUFNLFVBQVU7QUFBQSxNQUFHLENBQUMsQ0FBQztBQUN2SixhQUFPLElBQUk7QUFBQTtBQUFBLFFBRVg7QUFBQTtBQUFBLFFBRUEsT0FBTyxhQUNERCxTQUFRLE9BQU8sV0FBVyxpQkFBaUIsY0FBYyxDQUFDLEVBQUUsT0FBTyxTQUFVQyxPQUFNO0FBQUUsaUJBQU9BLFVBQVM7QUFBQSxRQUFRLENBQUMsSUFDOUcsQ0FBQztBQUFBLE1BQUM7QUFBQSxJQUNaLEdBQUcsQ0FBQyxDQUFDO0FBQUEsRUFDVDtBQUtPLE1BQUksMEJBQTBCLFNBQVUsUUFBUTtBQUNuRCxRQUFJLGNBQWMsT0FBTyxpQkFBaUIsSUFBSSxPQUFPLFlBQVksR0FBRyxDQUFDO0FBQ3JFLFdBQU9ELFNBQVEsV0FBVyxFQUNyQixJQUFJLFNBQVVDLE9BQU07QUFBRSxhQUFPLGNBQWMsQ0FBQ0EsS0FBSSxDQUFDO0FBQUEsSUFBRyxDQUFDLEVBQ3JELE9BQU8sU0FBVSxLQUFLLE9BQU87QUFBRSxhQUFPLElBQUksT0FBTyxLQUFLO0FBQUEsSUFBRyxHQUFHLENBQUMsQ0FBQztBQUFBLEVBQ3ZFOzs7QUNoQ08sTUFBSSxrQkFBa0IsU0FBVSxPQUFPLGlCQUFpQjtBQUMzRCxXQUFPQyxTQUFRLEtBQUssRUFDZixPQUFPLFNBQVVDLE9BQU07QUFBRSxhQUFPLGdCQUFnQixpQkFBaUJBLEtBQUk7QUFBQSxJQUFHLENBQUMsRUFDekUsT0FBTyxTQUFVQSxPQUFNO0FBQUUsYUFBTyxlQUFlQSxLQUFJO0FBQUEsSUFBRyxDQUFDO0FBQUEsRUFDaEU7QUFDTyxNQUFJLHNCQUFzQixTQUFVLE9BQU8sT0FBTztBQUNyRCxRQUFJLFVBQVUsUUFBUTtBQUFFLGNBQVEsb0JBQUksSUFBSTtBQUFBLElBQUc7QUFDM0MsV0FBT0QsU0FBUSxLQUFLLEVBQUUsT0FBTyxTQUFVQyxPQUFNO0FBQUUsYUFBTyx5QkFBeUIsT0FBT0EsS0FBSTtBQUFBLElBQUcsQ0FBQztBQUFBLEVBQ2xHO0FBVU8sTUFBSSxtQkFBbUIsU0FBVSxVQUFVLGlCQUFpQixZQUFZO0FBQzNFLFdBQU8sZ0JBQWdCLGdCQUFnQixjQUFjLFVBQVUsVUFBVSxHQUFHLGVBQWUsR0FBRyxNQUFNLFVBQVU7QUFBQSxFQUNsSDtBQVlPLE1BQUksb0JBQW9CLFNBQVUsVUFBVSxpQkFBaUI7QUFDaEUsV0FBTyxnQkFBZ0IsZ0JBQWdCLGNBQWMsUUFBUSxHQUFHLGVBQWUsR0FBRyxLQUFLO0FBQUEsRUFDM0Y7QUFNTyxNQUFJLHVCQUF1QixTQUFVLFNBQVMsaUJBQWlCO0FBQ2xFLFdBQU8sZ0JBQWdCLHdCQUF3QixPQUFPLEdBQUcsZUFBZTtBQUFBLEVBQzVFO0FBSU8sTUFBSSxXQUFXLFNBQVUsT0FBTyxTQUFTO0FBQzVDLFFBQUksTUFBTSxZQUFZO0FBQ2xCLGFBQU8sU0FBUyxNQUFNLFlBQVksT0FBTztBQUFBLElBQzdDLE9BQ0s7QUFDRCxVQUFJLE9BQU8sZUFBZSxLQUFLLEVBQUUsYUFBYSxVQUMxQyxPQUFPLGVBQWUsS0FBSyxFQUFFLFNBQVMsS0FBSyxPQUFPLE9BQU8sR0FBRztBQUM1RCxlQUFPO0FBQUEsTUFDWDtBQUNBLGFBQU9ELFNBQVEsTUFBTSxRQUFRLEVBQUUsS0FBSyxTQUFVLE9BQU87QUFDakQsWUFBSTtBQUNKLFlBQUksaUJBQWlCLG1CQUFtQjtBQUNwQyxjQUFJLGNBQWMsS0FBSyxNQUFNLHFCQUFxQixRQUFRLE9BQU8sU0FBUyxTQUFTLEdBQUc7QUFDdEYsY0FBSSxZQUFZO0FBQ1osbUJBQU8sU0FBUyxZQUFZLE9BQU87QUFBQSxVQUN2QztBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGVBQU8sU0FBUyxPQUFPLE9BQU87QUFBQSxNQUNsQyxDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0o7OztBQ25FQSxNQUFJLGVBQWUsU0FBVSxPQUFPO0FBQ2hDLFFBQUksWUFBWSxvQkFBSSxJQUFJO0FBQ3hCLFFBQUksSUFBSSxNQUFNO0FBQ2QsYUFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRztBQUMzQixlQUFTLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUc7QUFDL0IsWUFBSUUsWUFBVyxNQUFNLENBQUMsRUFBRSx3QkFBd0IsTUFBTSxDQUFDLENBQUM7QUFFeEQsYUFBS0EsWUFBVyxLQUFLLGtDQUFrQyxHQUFHO0FBQ3RELG9CQUFVLElBQUksQ0FBQztBQUFBLFFBQ25CO0FBQ0EsYUFBS0EsWUFBVyxLQUFLLDhCQUE4QixHQUFHO0FBQ2xELG9CQUFVLElBQUksQ0FBQztBQUFBLFFBQ25CO0FBQUEsTUFFSjtBQUFBLElBQ0o7QUFDQSxXQUFPLE1BQU0sT0FBTyxTQUFVLEdBQUcsT0FBTztBQUFFLGFBQU8sQ0FBQyxVQUFVLElBQUksS0FBSztBQUFBLElBQUcsQ0FBQztBQUFBLEVBQzdFO0FBTUEsTUFBSSxlQUFlLFNBQVVDLE9BQU07QUFDL0IsV0FBT0EsTUFBSyxhQUFhLGFBQWFBLE1BQUssVUFBVSxJQUFJQTtBQUFBLEVBQzdEO0FBTU8sTUFBSSxzQkFBc0IsU0FBVUEsT0FBTTtBQUM3QyxRQUFJLFFBQVFDLFNBQVFELEtBQUk7QUFDeEIsV0FBTyxNQUFNLE9BQU8sT0FBTyxFQUFFLE9BQU8sU0FBVSxLQUFLLGFBQWE7QUFDNUQsVUFBSSxRQUFRLFlBQVksYUFBYSxXQUFXO0FBQ2hELFVBQUksS0FBSyxNQUFNLEtBQU0sUUFDZixhQUFhRSxTQUFRLGFBQWEsV0FBVyxFQUFFLGlCQUFpQixJQUFJLE9BQU8sYUFBYSxJQUFLLEVBQUUsT0FBTyxPQUFPLFVBQVcsRUFBRSxPQUFPLGdCQUFnQixlQUFpQixDQUFDLENBQUMsQ0FBQyxJQUNySyxDQUFDLFdBQVcsQ0FBRTtBQUNwQixhQUFPO0FBQUEsSUFDWCxHQUFHLENBQUMsQ0FBQztBQUFBLEVBQ1Q7OztBQ2pETyxNQUFJLFlBQVksU0FBVSxJQUFJO0FBQ2pDLFFBQUk7QUFDQSxhQUFPLEdBQUc7QUFBQSxJQUNkLFNBQ08sR0FBRztBQUNOLGFBQU87QUFBQSxJQUNYO0FBQUEsRUFDSjs7O0FDQ08sTUFBSSxtQkFBbUIsU0FBVSxZQUFZO0FBQ2hELFFBQUksZUFBZSxRQUFRO0FBQUUsbUJBQWE7QUFBQSxJQUFVO0FBQ3BELFFBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxlQUFlO0FBQzFDLGFBQU87QUFBQSxJQUNYO0FBQ0EsUUFBSSxnQkFBZ0IsV0FBVztBQUMvQixXQUFRLGNBQWMsYUFDaEIsaUJBQWlCLGNBQWMsVUFBVSxJQUN6Qyx5QkFBeUIscUJBQXFCLFVBQVUsV0FBWTtBQUFFLGFBQU8sY0FBYyxjQUFjO0FBQUEsSUFBVSxDQUFDLElBQ2hILGlCQUFpQixjQUFjLGNBQWMsUUFBUSxJQUNyRDtBQUFBLEVBQ2Q7OztBQ2ZBLE1BQUksZUFBZSxTQUFVLE9BQU8sZUFBZTtBQUFFLFdBQU8sVUFBVTtBQUFBLEVBQWU7QUFDckYsTUFBSSxvQkFBb0IsU0FBVSxTQUFTLGVBQWU7QUFDdEQsV0FBTyxRQUFRQyxTQUFRLFFBQVEsaUJBQWlCLFFBQVEsQ0FBQyxFQUFFLEtBQUssU0FBVUMsT0FBTTtBQUFFLGFBQU8sYUFBYUEsT0FBTSxhQUFhO0FBQUEsSUFBRyxDQUFDLENBQUM7QUFBQSxFQUNsSTtBQUtPLE1BQUksY0FBYyxTQUFVLFNBQVMsZUFBZTtBQUV2RCxRQUFJLGtCQUFrQixRQUFRO0FBQUUsc0JBQWdCLGlCQUFpQixTQUFTLE9BQU8sRUFBRSxhQUFhO0FBQUEsSUFBRztBQUNuRyxRQUFJLENBQUMsaUJBQWtCLGNBQWMsV0FBVyxjQUFjLFFBQVEsWUFBYTtBQUMvRSxhQUFPO0FBQUEsSUFDWDtBQUNBLFdBQU8sb0JBQW9CLE9BQU8sRUFBRSxLQUFLLFNBQVVBLE9BQU07QUFDckQsYUFBTyxTQUFTQSxPQUFNLGFBQWEsS0FBSyxrQkFBa0JBLE9BQU0sYUFBYTtBQUFBLElBQ2pGLENBQUM7QUFBQSxFQUNMOzs7QUNUTyxNQUFJLGdCQUFnQixTQUFVLFlBQVk7QUFDN0MsUUFBSSxlQUFlLFFBQVE7QUFBRSxtQkFBYTtBQUFBLElBQVU7QUFDcEQsUUFBSSxnQkFBZ0IsaUJBQWlCLFVBQVU7QUFDL0MsUUFBSSxDQUFDLGVBQWU7QUFDaEIsYUFBTztBQUFBLElBQ1g7QUFFQSxXQUFPQyxTQUFRLFdBQVcsaUJBQWlCLElBQUksT0FBTyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFVQyxPQUFNO0FBQUUsYUFBTyxTQUFTQSxPQUFNLGFBQWE7QUFBQSxJQUFHLENBQUM7QUFBQSxFQUM1STs7O0FDbkJBLE1BQUksb0JBQW9CLFNBQVVDLE9BQU0sT0FBTztBQUMzQyxXQUFPLE1BQ0YsT0FBTyxjQUFjLEVBQ3JCLE9BQU8sU0FBVSxJQUFJO0FBQUUsYUFBTyxHQUFHLFNBQVNBLE1BQUs7QUFBQSxJQUFNLENBQUMsRUFDdEQsT0FBTyxTQUFVLElBQUk7QUFBRSxhQUFPLEdBQUc7QUFBQSxJQUFTLENBQUMsRUFBRSxDQUFDLEtBQUtBO0FBQUEsRUFDNUQ7QUFDTyxNQUFJLGNBQWMsU0FBVUEsT0FBTSxPQUFPO0FBQzVDLFFBQUksZUFBZUEsS0FBSSxLQUFLQSxNQUFLLE1BQU07QUFDbkMsYUFBTyxrQkFBa0JBLE9BQU0sS0FBSztBQUFBLElBQ3hDO0FBQ0EsV0FBT0E7QUFBQSxFQUNYO0FBS08sTUFBSSxlQUFlLFNBQVUsT0FBTztBQUV2QyxRQUFJLFlBQVksb0JBQUksSUFBSTtBQUN4QixVQUFNLFFBQVEsU0FBVUEsT0FBTTtBQUFFLGFBQU8sVUFBVSxJQUFJLFlBQVlBLE9BQU0sS0FBSyxDQUFDO0FBQUEsSUFBRyxDQUFDO0FBRWpGLFdBQU8sTUFBTSxPQUFPLFNBQVVBLE9BQU07QUFBRSxhQUFPLFVBQVUsSUFBSUEsS0FBSTtBQUFBLElBQUcsQ0FBQztBQUFBLEVBQ3ZFOzs7QUN0Qk8sTUFBSSxpQkFBaUIsU0FBVSxPQUFPO0FBQ3pDLFFBQUksTUFBTSxDQUFDLEtBQUssTUFBTSxTQUFTLEdBQUc7QUFDOUIsYUFBTyxZQUFZLE1BQU0sQ0FBQyxHQUFHLEtBQUs7QUFBQSxJQUN0QztBQUNBLFdBQU8sTUFBTSxDQUFDO0FBQUEsRUFDbEI7QUFDTyxNQUFJLGdCQUFnQixTQUFVLE9BQU9DLE9BQU07QUFDOUMsV0FBTyxNQUFNLFFBQVEsWUFBWUEsT0FBTSxLQUFLLENBQUM7QUFBQSxFQUNqRDs7O0FDTk8sTUFBSSxZQUFZO0FBVWhCLE1BQUksV0FBVyxTQUFVLFlBQVksZ0JBQWdCLFlBQVksZUFBZSxVQUFVO0FBQzdGLFFBQUksTUFBTSxXQUFXO0FBQ3JCLFFBQUksYUFBYSxXQUFXLENBQUM7QUFDN0IsUUFBSSxZQUFZLFdBQVcsTUFBTSxDQUFDO0FBQ2xDLFFBQUksWUFBWSxRQUFRLGFBQWE7QUFFckMsUUFBSSxpQkFBaUIsV0FBVyxRQUFRLGFBQWEsS0FBSyxHQUFHO0FBQ3pELGFBQU87QUFBQSxJQUNYO0FBQ0EsUUFBSSxjQUFjLGtCQUFrQixTQUFZLFdBQVcsUUFBUSxhQUFhLElBQUk7QUFDcEYsUUFBSSxZQUFZLFdBQVcsV0FBVyxRQUFRLFFBQVEsSUFBSTtBQUMxRCxRQUFJLGlCQUFpQixXQUFXLFdBQVcsUUFBUSxRQUFRLElBQUk7QUFFL0QsUUFBSSxnQkFBZ0IsSUFBSTtBQUVwQixVQUFJLG1CQUFtQixJQUFJO0FBQ3ZCLGVBQU87QUFBQSxNQUNYO0FBQ0EsYUFBTztBQUFBLElBQ1g7QUFFQSxRQUFJLG1CQUFtQixJQUFJO0FBQ3ZCLGFBQU87QUFBQSxJQUNYO0FBQ0EsUUFBSSxZQUFZLGNBQWM7QUFDOUIsUUFBSSxpQkFBaUIsV0FBVyxRQUFRLFVBQVU7QUFDbEQsUUFBSSxnQkFBZ0IsV0FBVyxRQUFRLFNBQVM7QUFDaEQsUUFBSSxpQkFBaUIsYUFBYSxVQUFVO0FBQzVDLFFBQUksaUJBQWlCLGtCQUFrQixTQUFZLGVBQWUsUUFBUSxhQUFhLElBQUk7QUFDM0YsUUFBSSxxQkFBcUIsa0JBQWtCLFdBQVcsZUFBZSxRQUFRLFFBQVEsSUFBSTtBQUV6RixRQUFJLENBQUMsYUFBYSxrQkFBa0IsR0FBRztBQUNuQyxhQUFPO0FBQUEsSUFDWDtBQUVBLFFBQUksZUFBZSxXQUFXLEdBQUc7QUFJN0IsYUFBTztBQUFBLElBQ1g7QUFDQSxRQUFJLGtCQUFrQixjQUFjLFlBQVksZUFBZSxDQUFDLENBQUM7QUFDakUsUUFBSSxpQkFBaUIsY0FBYyxZQUFZLGVBQWUsZUFBZSxTQUFTLENBQUMsQ0FBQztBQUV4RixRQUFJLGVBQWUsa0JBQWtCLGFBQWEsS0FBSyxJQUFJLFNBQVMsSUFBSSxHQUFHO0FBQ3ZFLGFBQU87QUFBQSxJQUNYO0FBRUEsUUFBSSxlQUFlLGlCQUFpQixhQUFhLEtBQUssSUFBSSxTQUFTLElBQUksR0FBRztBQUN0RSxhQUFPO0FBQUEsSUFDWDtBQUVBLFFBQUksYUFBYSxLQUFLLElBQUksa0JBQWtCLElBQUksR0FBRztBQUMvQyxhQUFPO0FBQUEsSUFDWDtBQUVBLFFBQUksZUFBZSxnQkFBZ0I7QUFDL0IsYUFBTztBQUFBLElBQ1g7QUFFQSxRQUFJLGNBQWMsZUFBZTtBQUM3QixhQUFPO0FBQUEsSUFDWDtBQUVBLFFBQUksV0FBVztBQUNYLFVBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxHQUFHO0FBQ3pCLGVBQU87QUFBQSxNQUNYO0FBQ0EsY0FBUSxNQUFNLGlCQUFpQixhQUFhO0FBQUEsSUFDaEQ7QUFFQSxXQUFPO0FBQUEsRUFDWDs7O0FDbEZBLE1BQUksa0JBQWtCLFNBQVUsZ0JBQWdCO0FBQzVDLFdBQU8sU0FBVUMsT0FBTTtBQUNuQixVQUFJO0FBQ0osVUFBSSxhQUFhLEtBQUssV0FBV0EsS0FBSSxPQUFPLFFBQVEsT0FBTyxTQUFTLFNBQVMsR0FBRztBQUNoRjtBQUFBO0FBQUEsUUFFQUEsTUFBSztBQUFBLFFBRUEsY0FBYyxVQUFhLGNBQWM7QUFBQSxRQUUxQyxlQUFlLFFBQVFBLEtBQUksS0FBSztBQUFBO0FBQUEsSUFDeEM7QUFBQSxFQUNKO0FBQ08sTUFBSSxnQkFBZ0IsU0FBVSxjQUFjLGNBQWMsUUFBUTtBQUNyRSxRQUFJLFFBQVEsYUFBYSxJQUFJLFNBQVUsSUFBSTtBQUN2QyxVQUFJQSxRQUFPLEdBQUc7QUFDZCxhQUFPQTtBQUFBLElBQ1gsQ0FBQztBQUNELFFBQUksZ0JBQWdCLG9CQUFvQixNQUFNLE9BQU8sZ0JBQWdCLE1BQU0sQ0FBQyxDQUFDO0FBQzdFLFFBQUksaUJBQWlCLGNBQWMsUUFBUTtBQUN2QyxhQUFPLGVBQWUsYUFBYTtBQUFBLElBQ3ZDO0FBQ0EsV0FBTyxlQUFlLG9CQUFvQixZQUFZLENBQUM7QUFBQSxFQUMzRDs7O0FDdkJBLE1BQUksYUFBYSxTQUFVQyxPQUFNLFNBQVM7QUFDdEMsUUFBSSxZQUFZLFFBQVE7QUFBRSxnQkFBVSxDQUFDO0FBQUEsSUFBRztBQUN4QyxZQUFRLEtBQUtBLEtBQUk7QUFDakIsUUFBSUEsTUFBSyxZQUFZO0FBQ2pCLGlCQUFXQSxNQUFLLFdBQVcsUUFBUUEsTUFBSyxZQUFZLE9BQU87QUFBQSxJQUMvRDtBQUNBLFdBQU87QUFBQSxFQUNYO0FBT08sTUFBSSxrQkFBa0IsU0FBVSxPQUFPLE9BQU87QUFDakQsUUFBSSxXQUFXLFdBQVcsS0FBSztBQUMvQixRQUFJLFdBQVcsV0FBVyxLQUFLO0FBRS9CLGFBQVMsSUFBSSxHQUFHLElBQUksU0FBUyxRQUFRLEtBQUssR0FBRztBQUN6QyxVQUFJLGdCQUFnQixTQUFTLENBQUM7QUFDOUIsVUFBSSxTQUFTLFFBQVEsYUFBYSxLQUFLLEdBQUc7QUFDdEMsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFDTyxNQUFJLHFCQUFxQixTQUFVLG1CQUFtQixXQUFXLGNBQWM7QUFDbEYsUUFBSSxpQkFBaUJDLFNBQVEsaUJBQWlCO0FBQzlDLFFBQUksY0FBY0EsU0FBUSxTQUFTO0FBQ25DLFFBQUksZ0JBQWdCLGVBQWUsQ0FBQztBQUNwQyxRQUFJLFlBQVk7QUFDaEIsZ0JBQVksT0FBTyxPQUFPLEVBQUUsUUFBUSxTQUFVLE9BQU87QUFDakQsa0JBQVksZ0JBQWdCLGFBQWEsT0FBTyxLQUFLLEtBQUs7QUFDMUQsbUJBQWEsT0FBTyxPQUFPLEVBQUUsUUFBUSxTQUFVLFVBQVU7QUFDckQsWUFBSSxTQUFTLGdCQUFnQixlQUFlLFFBQVE7QUFDcEQsWUFBSSxRQUFRO0FBQ1IsY0FBSSxDQUFDLGFBQWEsU0FBUyxRQUFRLFNBQVMsR0FBRztBQUMzQyx3QkFBWTtBQUFBLFVBQ2hCLE9BQ0s7QUFDRCx3QkFBWSxnQkFBZ0IsUUFBUSxTQUFTO0FBQUEsVUFDakQ7QUFBQSxRQUNKO0FBQUEsTUFDSixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsV0FBTztBQUFBLEVBQ1g7QUFNTyxNQUFJLDBCQUEwQixTQUFVLFNBQVMsaUJBQWlCO0FBQ3JFLFdBQU8sUUFBUSxPQUFPLFNBQVUsS0FBS0QsT0FBTTtBQUFFLGFBQU8sSUFBSSxPQUFPLHFCQUFxQkEsT0FBTSxlQUFlLENBQUM7QUFBQSxJQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQUEsRUFDdEg7OztBQ2xEQSxNQUFJLGVBQWUsU0FBVSxVQUFVLFVBQVU7QUFDN0MsUUFBSSxRQUFRLG9CQUFJLElBQUk7QUFFcEIsYUFBUyxRQUFRLFNBQVUsUUFBUTtBQUFFLGFBQU8sTUFBTSxJQUFJLE9BQU8sTUFBTSxNQUFNO0FBQUEsSUFBRyxDQUFDO0FBRTdFLFdBQU8sU0FBUyxJQUFJLFNBQVVFLE9BQU07QUFBRSxhQUFPLE1BQU0sSUFBSUEsS0FBSTtBQUFBLElBQUcsQ0FBQyxFQUFFLE9BQU8sU0FBUztBQUFBLEVBQ3JGO0FBV08sTUFBSSxjQUFjLFNBQVUsU0FBUyxVQUFVO0FBQ2xELFFBQUksZ0JBQWdCLGlCQUFpQkMsU0FBUSxPQUFPLEVBQUUsU0FBUyxJQUFJLFdBQVcsU0FBUyxPQUFPLEVBQUUsYUFBYTtBQUM3RyxRQUFJLFVBQVUsb0JBQW9CLE9BQU8sRUFBRSxPQUFPLFdBQVc7QUFDN0QsUUFBSSxlQUFlLG1CQUFtQixpQkFBaUIsU0FBUyxTQUFTLE9BQU87QUFDaEYsUUFBSSxrQkFBa0Isb0JBQUksSUFBSTtBQUM5QixRQUFJLGVBQWUsa0JBQWtCLFNBQVMsZUFBZTtBQUM3RCxRQUFJLGdCQUFnQixhQUFhLE9BQU8sU0FBVSxJQUFJO0FBQ2xELFVBQUlELFFBQU8sR0FBRztBQUNkLGFBQU8sWUFBWUEsS0FBSTtBQUFBLElBQzNCLENBQUM7QUFDRCxRQUFJLENBQUMsY0FBYyxDQUFDLEdBQUc7QUFDbkIsYUFBTztBQUFBLElBQ1g7QUFDQSxRQUFJLGFBQWEsa0JBQWtCLENBQUMsWUFBWSxHQUFHLGVBQWUsRUFBRSxJQUFJLFNBQVUsSUFBSTtBQUNsRixVQUFJQSxRQUFPLEdBQUc7QUFDZCxhQUFPQTtBQUFBLElBQ1gsQ0FBQztBQUNELFFBQUksdUJBQXVCLGFBQWEsWUFBWSxhQUFhO0FBRWpFLFFBQUksa0JBQWtCLHFCQUFxQixJQUFJLFNBQVUsSUFBSTtBQUN6RCxVQUFJQSxRQUFPLEdBQUc7QUFDZCxhQUFPQTtBQUFBLElBQ1gsQ0FBQztBQUNELFFBQUksZ0JBQWdCLHFCQUFxQixPQUFPLFNBQVUsSUFBSTtBQUMxRCxVQUFJLFdBQVcsR0FBRztBQUNsQixhQUFPLFlBQVk7QUFBQSxJQUN2QixDQUFDLEVBQUUsSUFBSSxTQUFVLElBQUk7QUFDakIsVUFBSUEsUUFBTyxHQUFHO0FBQ2QsYUFBT0E7QUFBQSxJQUNYLENBQUM7QUFDRCxRQUFJLFFBQVEsU0FBUyxpQkFBaUIsZUFBZSxZQUFZLGVBQWUsUUFBUTtBQUN4RixRQUFJLFVBQVUsV0FBVztBQUNyQixVQUFJO0FBQUE7QUFBQSxRQUVKLGNBQWMsY0FBYyxlQUFlLHdCQUF3QixTQUFTLGVBQWUsQ0FBQyxLQUN4RixjQUFjLGNBQWMsaUJBQWlCLHdCQUF3QixTQUFTLGVBQWUsQ0FBQztBQUFBO0FBQ2xHLFVBQUksV0FBVztBQUNYLGVBQU8sRUFBRSxNQUFNLFVBQVU7QUFBQSxNQUM3QixPQUNLO0FBQ0QsZ0JBQVEsS0FBSyxxREFBcUQ7QUFDbEUsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQ0EsUUFBSSxVQUFVLFFBQVc7QUFDckIsYUFBTztBQUFBLElBQ1g7QUFDQSxXQUFPLHFCQUFxQixLQUFLO0FBQUEsRUFDckM7OztBQzlETyxNQUFJLHVCQUF1QixTQUFVLFNBQVM7QUFDakQsUUFBSSxVQUFVLG9CQUFvQixPQUFPLEVBQUUsT0FBTyxXQUFXO0FBQzdELFFBQUksZUFBZSxtQkFBbUIsU0FBUyxTQUFTLE9BQU87QUFDL0QsUUFBSSxhQUFhLGdCQUFnQixjQUFjLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxNQUFNLElBQUk7QUFDaEYsUUFBSSxnQkFBZ0IsY0FBYyxTQUFTLEtBQUs7QUFDaEQsV0FBTyxXQUFXLElBQUksU0FBVSxJQUFJO0FBQ2hDLFVBQUlFLFFBQU8sR0FBRyxNQUFNLFFBQVEsR0FBRztBQUMvQixhQUFRO0FBQUEsUUFDSixNQUFNQTtBQUFBLFFBQ047QUFBQSxRQUNBLFVBQVUsY0FBYyxRQUFRQSxLQUFJLEtBQUs7QUFBQSxRQUN6QyxPQUFPLFFBQVFBLEtBQUk7QUFBQSxNQUN2QjtBQUFBLElBQ0osQ0FBQztBQUFBLEVBQ0w7OztBQ3pCTyxNQUFJLFVBQVUsU0FBVSxRQUFRLGNBQWM7QUFDakQsUUFBSSxDQUFDLFFBQVE7QUFFVDtBQUFBLElBQ0o7QUFDQSxRQUFJLFdBQVcsUUFBUTtBQUNuQixhQUFPLE1BQU0sWUFBWTtBQUFBLElBQzdCO0FBQ0EsUUFBSSxtQkFBbUIsVUFBVSxPQUFPLGVBQWU7QUFDbkQsYUFBTyxjQUFjLE1BQU07QUFBQSxJQUMvQjtBQUFBLEVBQ0o7OztBQ1RBLE1BQUksYUFBYTtBQUNqQixNQUFJLGVBQWU7QUFhWixNQUFJLGtCQUFrQixTQUFVLFNBQVMsVUFBVSxTQUFTO0FBQy9ELFFBQUksWUFBWSxRQUFRO0FBQUUsZ0JBQVUsQ0FBQztBQUFBLElBQUc7QUFDeEMsUUFBSUMsYUFBWSxZQUFZLFNBQVMsUUFBUTtBQUU3QyxRQUFJLGNBQWM7QUFDZDtBQUFBLElBQ0o7QUFDQSxRQUFJQSxZQUFXO0FBRVgsVUFBSSxhQUFhLEdBQUc7QUFFaEIsZ0JBQVEsTUFBTSxtSkFDbUQ7QUFDakUsdUJBQWU7QUFDZixtQkFBVyxXQUFZO0FBQ25CLHlCQUFlO0FBQUEsUUFDbkIsR0FBRyxDQUFDO0FBQ0o7QUFBQSxNQUNKO0FBQ0E7QUFDQSxjQUFRQSxXQUFVLE1BQU0sUUFBUSxZQUFZO0FBQzVDO0FBQUEsSUFDSjtBQUFBLEVBQ0o7OztBQ3RDQSxXQUFTLFFBQVEsT0FBTztBQUNwQixRQUFJLENBQUM7QUFDRCxhQUFPO0FBR1gsUUFBSSxPQUFPLFlBQVksYUFBYTtBQUNoQyxhQUFPLFdBQVk7QUFBRSxlQUFPLFNBQVM7QUFBQSxNQUFNO0FBQUEsSUFDL0M7QUFDQSxRQUFJLElBQUksUUFBUSxJQUFJLFFBQVEsS0FBSyxJQUFJO0FBQ3JDLFdBQU8sV0FBWTtBQUFFLGNBQVEsTUFBTSxRQUFRLE1BQU0sU0FBUyxTQUFTLEVBQUUsTUFBTSxNQUFNO0FBQUEsSUFBTTtBQUFBLEVBQzNGO0FBQ08sTUFBSSx3QkFBd0IsU0FBVSxTQUFTO0FBQ2xELFFBQUksQ0FBQyxTQUFTO0FBQ1YsYUFBTztBQUFBLElBQ1g7QUFDQSxRQUFJLFFBQVEsQ0FBQztBQUNiLFFBQUksaUJBQWlCO0FBQ3JCLFdBQU8sa0JBQWtCLG1CQUFtQixTQUFTLE1BQU07QUFDdkQsWUFBTSxLQUFLO0FBQUEsUUFDUCxTQUFTLFFBQVEsY0FBYztBQUFBLFFBQy9CLFFBQVEsUUFBUSxlQUFlLGFBQWE7QUFBQSxRQUM1QyxNQUFNLFFBQVEsZUFBZSxzQkFBc0I7QUFBQSxRQUNuRCxPQUFPLFFBQVEsZUFBZSxrQkFBa0I7QUFBQSxNQUNwRCxDQUFDO0FBQ0QsdUJBQWlCLGVBQWU7QUFBQSxJQUNwQztBQUNBLFdBQU87QUFBQSxNQUNILFNBQVMsUUFBUSxPQUFPO0FBQUEsTUFDeEI7QUFBQSxNQUNBLGVBQWUsUUFBUTtBQUFBLElBQzNCO0FBQUEsRUFDSjtBQUNBLE1BQUksaUJBQWlCLFNBQVUsVUFBVTtBQUNyQyxRQUFJLElBQUksSUFBSSxJQUFJLElBQUk7QUFDcEIsUUFBSSxDQUFDLFVBQVU7QUFDWCxhQUFPO0FBQUEsSUFDWDtBQUNBLFFBQUksUUFBUSxTQUFTLE9BQU8sZ0JBQWdCLFNBQVM7QUFDckQsUUFBSSxrQkFBa0Isb0JBQUksSUFBSTtBQUM5QixhQUFTLEtBQUssR0FBRyxVQUFVLE9BQU8sS0FBSyxRQUFRLFFBQVEsTUFBTTtBQUN6RCxVQUFJQyxRQUFPLFFBQVEsRUFBRTtBQUNyQixVQUFJLFlBQVksS0FBS0EsTUFBSyxZQUFZLFFBQVEsT0FBTyxTQUFTLFNBQVMsR0FBRyxLQUFLQSxLQUFJO0FBRW5GLFVBQUksWUFBWSxjQUFjLFNBQVMsUUFBUSxHQUFHO0FBQzlDLFlBQUksUUFBUSxLQUFLQSxNQUFLLFVBQVUsUUFBUSxPQUFPLFNBQVMsU0FBUyxHQUFHLEtBQUtBLEtBQUk7QUFDN0UsWUFBSSxlQUFlQSxNQUFLLFFBQVE7QUFDaEMsWUFBSSxVQUFVLFNBQVMsU0FBUyxZQUFZLElBQUksZUFBZTtBQUMvRCxZQUFJLFNBQVMsS0FBS0EsTUFBSyxXQUFXLFFBQVEsT0FBTyxTQUFTLFNBQVMsR0FBRyxLQUFLQSxLQUFJO0FBQy9FLFlBQUksYUFBYSxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsZUFBZTtBQUM3RCxZQUFJO0FBQUE7QUFBQSxXQUVILE1BQU0sS0FBSyxZQUFZLFFBQVEsWUFBWSxTQUFTO0FBQUE7QUFBQSxZQUVyRCxTQUFTLFFBQVEsU0FBUyxTQUFTLFNBQVMsS0FBSztBQUFBLGlCQUF3QixRQUFRLE9BQU8sU0FBUztBQUFBO0FBQUEsWUFFakc7QUFBQSxpQkFBVyxRQUFRLE9BQU8sU0FBUztBQUFBO0FBQUEsWUFFbkM7QUFBQTtBQUFBO0FBQ0EsZUFBTyxLQUFLO0FBQ1IsbUJBQVMsS0FBSyxHQUFHLGVBQWUsWUFBWSxLQUFLLGFBQWEsUUFBUSxNQUFNO0FBQ3hFLGdCQUFJQyxhQUFZLGFBQWEsRUFBRTtBQUMvQixnQkFBSSxRQUFRLFFBQVEsUUFBUSxTQUFTLFNBQVMsSUFBSSxTQUFTQSxXQUFVLElBQUksR0FBRztBQUN4RSxxQkFBT0EsV0FBVTtBQUFBLFlBQ3JCO0FBQUEsVUFDSjtBQUNBLGdCQUFNLElBQUk7QUFBQSxRQUNkO0FBQ0EsWUFBSSxXQUFXLFFBQVE7QUFFbkIsaUJBQU8sV0FBVyxDQUFDLEVBQUU7QUFBQSxRQUN6QjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBRUEsV0FBTztBQUFBLEVBQ1g7QUFRTyxNQUFJLHNCQUFzQixTQUFVLGVBQWU7QUFDdEQsUUFBSSxXQUFXLHNCQUFzQixhQUFhO0FBQ2xELFdBQU8sV0FBWTtBQUNmLGFBQU8sZUFBZSxRQUFRO0FBQUEsSUFDbEM7QUFBQSxFQUNKOzs7QUMvRU8sTUFBSSx1QkFBdUIsU0FBVSxTQUFTLE9BQU8sY0FBYztBQUN0RSxRQUFJLENBQUMsV0FBVyxDQUFDLE9BQU87QUFDcEIsY0FBUSxNQUFNLDJCQUEyQjtBQUN6QyxhQUFPLENBQUM7QUFBQSxJQUNaO0FBQ0EsUUFBSSxTQUFTQyxTQUFRLEtBQUs7QUFDMUIsUUFBSSxPQUFPLE1BQU0sU0FBVSxPQUFPO0FBQUUsYUFBTyxDQUFDLFNBQVMsT0FBTyxPQUFPO0FBQUEsSUFBRyxDQUFDLEdBQUc7QUFDdEUsY0FBUSxNQUFNLDhDQUE4QztBQUM1RCxhQUFPLENBQUM7QUFBQSxJQUNaO0FBQ0EsUUFBSSxhQUFhLGVBQ1gsaUJBQWlCLFFBQVEsb0JBQUksSUFBSSxDQUFDLElBQ2xDLGtCQUFrQixRQUFRLG9CQUFJLElBQUksQ0FBQztBQUN6QyxRQUFJLFVBQVUsV0FBVyxVQUFVLFNBQVUsSUFBSTtBQUM3QyxVQUFJQyxRQUFPLEdBQUc7QUFDZCxhQUFPQSxVQUFTO0FBQUEsSUFDcEIsQ0FBQztBQUNELFFBQUksWUFBWSxJQUFJO0FBRWhCLGFBQU87QUFBQSxJQUNYO0FBQ0EsV0FBTztBQUFBLE1BQ0gsTUFBTSxXQUFXLFVBQVUsQ0FBQztBQUFBLE1BQzVCLE1BQU0sV0FBVyxVQUFVLENBQUM7QUFBQSxNQUM1QixPQUFPLFdBQVcsQ0FBQztBQUFBLE1BQ25CLE1BQU0sV0FBVyxXQUFXLFNBQVMsQ0FBQztBQUFBLElBQzFDO0FBQUEsRUFDSjtBQUNBLE1BQUksY0FBYyxTQUFVLFFBQVEsY0FBYztBQUM5QyxRQUFJLE1BQU0sZUFDSixpQkFBaUJELFNBQVEsTUFBTSxHQUFHLG9CQUFJLElBQUksQ0FBQyxJQUMzQyxrQkFBa0JBLFNBQVEsTUFBTSxHQUFHLG9CQUFJLElBQUksQ0FBQztBQUNsRCxXQUFPO0FBQUEsTUFDSCxPQUFPLElBQUksQ0FBQztBQUFBLE1BQ1osTUFBTSxJQUFJLElBQUksU0FBUyxDQUFDO0FBQUEsSUFDNUI7QUFBQSxFQUNKO0FBQ0EsTUFBSSxpQkFBaUIsU0FBVSxTQUFTO0FBQ3BDLFdBQU8sT0FBTyxPQUFPO0FBQUEsTUFDakIsT0FBTyxTQUFTO0FBQUEsTUFDaEIsT0FBTztBQUFBLE1BQ1AsY0FBYztBQUFBLElBQ2xCLEdBQUcsT0FBTztBQUFBLEVBQ2Q7QUFDQSxNQUFJLFlBQVksU0FBVSxhQUFhLFNBQVMsSUFBSTtBQUNoRCxRQUFJLFlBQVksUUFBUTtBQUFFLGdCQUFVLENBQUM7QUFBQSxJQUFHO0FBQ3hDLFFBQUksYUFBYSxlQUFlLE9BQU87QUFDdkMsUUFBSSxXQUFXLHFCQUFxQixhQUFhLFdBQVcsT0FBTyxXQUFXLFlBQVk7QUFDMUYsUUFBSSxDQUFDLFVBQVU7QUFDWDtBQUFBLElBQ0o7QUFDQSxRQUFJLFNBQVMsR0FBRyxVQUFVLFdBQVcsS0FBSztBQUMxQyxRQUFJLFFBQVE7QUFDUixjQUFRLE9BQU8sTUFBTSxXQUFXLFlBQVk7QUFBQSxJQUNoRDtBQUFBLEVBQ0o7QUFNTyxNQUFJLG1CQUFtQixTQUFVLGFBQWEsU0FBUztBQUMxRCxRQUFJLFlBQVksUUFBUTtBQUFFLGdCQUFVLENBQUM7QUFBQSxJQUFHO0FBQ3hDLGNBQVUsYUFBYSxTQUFTLFNBQVUsSUFBSSxPQUFPO0FBQ2pELFVBQUlFLFFBQU8sR0FBRyxNQUFNLFFBQVEsR0FBRztBQUMvQixhQUFPQSxTQUFTLFNBQVM7QUFBQSxJQUM3QixDQUFDO0FBQUEsRUFDTDtBQU1PLE1BQUksbUJBQW1CLFNBQVUsYUFBYSxTQUFTO0FBQzFELFFBQUksWUFBWSxRQUFRO0FBQUUsZ0JBQVUsQ0FBQztBQUFBLElBQUc7QUFDeEMsY0FBVSxhQUFhLFNBQVMsU0FBVSxJQUFJLE9BQU87QUFDakQsVUFBSUMsUUFBTyxHQUFHLE1BQU0sT0FBTyxHQUFHO0FBQzlCLGFBQU9BLFNBQVMsU0FBUztBQUFBLElBQzdCLENBQUM7QUFBQSxFQUNMO0FBQ0EsTUFBSSxlQUFlLFNBQVUsT0FBTyxTQUFTLE1BQU07QUFDL0MsUUFBSTtBQUNKLFFBQUksV0FBVyxZQUFZLFFBQVEsS0FBSyxRQUFRLGtCQUFrQixRQUFRLE9BQU8sU0FBUyxLQUFLLElBQUk7QUFDbkcsUUFBSUYsUUFBTyxTQUFTLElBQUk7QUFDeEIsUUFBSUEsT0FBTTtBQUNOLGNBQVFBLE1BQUssTUFBTSxRQUFRLFlBQVk7QUFBQSxJQUMzQztBQUFBLEVBQ0o7QUFLTyxNQUFJLG9CQUFvQixTQUFVLE9BQU8sU0FBUztBQUNyRCxRQUFJLFlBQVksUUFBUTtBQUFFLGdCQUFVLENBQUM7QUFBQSxJQUFHO0FBQ3hDLGlCQUFhLE9BQU8sU0FBUyxPQUFPO0FBQUEsRUFDeEM7QUFLTyxNQUFJLG1CQUFtQixTQUFVLE9BQU8sU0FBUztBQUNwRCxRQUFJLFlBQVksUUFBUTtBQUFFLGdCQUFVLENBQUM7QUFBQSxJQUFHO0FBQ3hDLGlCQUFhLE9BQU8sU0FBUyxNQUFNO0FBQUEsRUFDdkM7OztBN0IzR0EsTUFBSSxjQUFjLFNBQVNHLGVBQWM7QUFDdkMsV0FBTyxZQUFZLFNBQVMsa0JBQWtCLFNBQVM7QUFBQSxFQUN6RDtBQUNBLE1BQUksY0FBYyxTQUFTQyxlQUFjO0FBQ3ZDLFdBQU8sWUFBWSxLQUFLLGNBQWM7QUFBQSxFQUN4QztBQUNBLE1BQUksaUJBQWlCO0FBQ3JCLE1BQUksa0JBQWtCO0FBQ3RCLE1BQUksa0JBQWtCLFNBQVNDLG1CQUFrQjtBQUMvQyxXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksc0JBQXNCO0FBQzFCLE1BQUksd0JBQXdCO0FBQzVCLE1BQUksZ0JBQWdCO0FBQ3BCLE1BQUksbUJBQW1CLFNBQVNDLG9CQUFtQjtBQUNqRCxXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksbUJBQW1CLFNBQVNDLGtCQUFpQixlQUFlO0FBQzlELFlBQVEsZUFBZSxhQUFhLGtCQUFrQixhQUFhO0FBQUEsRUFDckU7QUFDQSxNQUFJLGVBQWUsU0FBU0MsY0FBYSxjQUFjLGlCQUFpQjtBQUN0RSwwQkFBc0I7QUFBQSxNQUNwQjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLE1BQUksc0JBQXNCLFNBQVNDLHFCQUFvQixTQUFTO0FBQzlELFdBQU8sdUJBQXVCLG9CQUFvQixvQkFBb0I7QUFBQSxFQUN4RTtBQUNBLFdBQVMsVUFBVSxZQUFZLEtBQUssTUFBTSxVQUFVO0FBQ2xELFFBQUksWUFBWTtBQUNoQixRQUFJLElBQUk7QUFDUixPQUFHO0FBQ0QsVUFBSSxPQUFPLFNBQVMsQ0FBQztBQUNyQixVQUFJLEtBQUssT0FBTztBQUNkLFlBQUksS0FBSyxLQUFLLFFBQVEsZ0JBQWdCO0FBQ3BDLHNCQUFZO0FBQUEsUUFDZDtBQUFBLE1BQ0YsV0FBVyxLQUFLLFVBQVU7QUFDeEIsWUFBSSxNQUFNLFlBQVk7QUFDcEI7QUFBQSxRQUNGO0FBQ0Esb0JBQVk7QUFBQSxNQUNkLE9BQU87QUFDTDtBQUFBLE1BQ0Y7QUFBQSxJQUNGLFVBQVUsS0FBSyxVQUFVO0FBQ3pCLFFBQUksV0FBVztBQUNiLGdCQUFVLEtBQUssV0FBVztBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUNBLE1BQUksa0JBQWtCLFNBQVNDLGlCQUFnQixrQkFBa0I7QUFDL0QsUUFBSSxrQkFBa0I7QUFDcEIsYUFBTyxRQUFRLHFCQUFxQjtBQUFBLElBQ3RDO0FBQ0EsV0FBTywwQkFBMEI7QUFBQSxFQUNuQztBQUNBLE1BQUksY0FBYyxTQUFTQyxhQUFZLE9BQU8sSUFBSSxVQUFVO0FBQzFELFdBQU8sT0FBTyxHQUFHLFNBQVMsVUFBVSxDQUFDLEdBQUcsaUJBQWlCLFNBQVMsU0FBUyxHQUFHLGFBQWEsTUFBTSxHQUFHLGNBQWNBLGFBQVksT0FBTyxHQUFHLFlBQVksUUFBUTtBQUFBLEVBQzlKO0FBQ0EsTUFBSSxhQUFhLFNBQVNDLFlBQVcsZUFBZSxhQUFhO0FBQy9ELFdBQU8sWUFBWSxLQUFLLFNBQVUsTUFBTTtBQUN0QyxhQUFPLFlBQVksZUFBZSxNQUFNLElBQUk7QUFBQSxJQUM5QyxDQUFDO0FBQUEsRUFDSDtBQUNBLE1BQUksb0JBQW9CLFNBQVNDLG1CQUFrQixPQUFPO0FBQ3hELFdBQU8sa0JBQWtCLE9BQU8sb0JBQUksSUFBSSxDQUFDO0FBQUEsRUFDM0M7QUFDQSxNQUFJLGlCQUFpQixTQUFTQyxnQkFBZUMsT0FBTTtBQUNqRCxXQUFPLENBQUMsa0JBQWtCLENBQUNBLE1BQUssVUFBVSxDQUFDLEVBQUUsS0FBSyxTQUFVLElBQUk7QUFDOUQsYUFBTyxHQUFHLFNBQVNBO0FBQUEsSUFDckIsQ0FBQztBQUFBLEVBQ0g7QUFDQSxNQUFJLGVBQWUsU0FBU0MsZ0JBQWU7QUFDekMsUUFBSSxTQUFTO0FBQ2IsUUFBSSxnQkFBZ0I7QUFDbEIsVUFBSSxrQkFBa0IsZ0JBQ3BCLFdBQVcsZ0JBQWdCLFVBQzNCLGtCQUFrQixnQkFBZ0IsaUJBQ2xDLFlBQVksZ0JBQWdCLFdBQzVCLFNBQVMsZ0JBQWdCLFFBQ3pCLGFBQWEsZ0JBQWdCLFlBQzdCLGVBQWUsZ0JBQWdCLGNBQy9CLGdCQUFnQixnQkFBZ0I7QUFDbEMsVUFBSSxjQUFjLFlBQVksdUJBQXVCLG9CQUFvQjtBQUN6RSxVQUFJLFlBQVksS0FBSyxpQkFBaUI7QUFDcEMsWUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLGVBQWUsS0FBSyxlQUFlLGVBQWUsR0FBRztBQUMvRSw0QkFBa0I7QUFDbEIsY0FBSSxZQUFZLGdCQUFnQjtBQUNoQyxjQUFJLFdBQVc7QUFDYixzQkFBVSxNQUFNO0FBQUEsVUFDbEI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUNBLFVBQUksZ0JBQWdCLFlBQVksU0FBUztBQUN6QyxVQUFJLGFBQWE7QUFDZixZQUFJLGNBQWMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxPQUFPLElBQUksVUFBVSxFQUFFLE9BQU8sT0FBTyxDQUFDO0FBQzdFLFlBQUksMEJBQTBCLFNBQVNDLDJCQUEwQjtBQUMvRCxjQUFJLENBQUMsZ0JBQWdCLFVBQVUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixlQUFlO0FBQ3ZGLG1CQUFPO0FBQUEsVUFDVDtBQUNBLGNBQUksUUFBUSxrQkFBa0IsV0FBVztBQUN6QyxjQUFJLFlBQVksTUFBTSxVQUFVLFNBQVVDLFFBQU07QUFDOUMsZ0JBQUlILFFBQU9HLE9BQUs7QUFDaEIsbUJBQU9ILFVBQVM7QUFBQSxVQUNsQixDQUFDO0FBQ0QsaUJBQU8sY0FBYyxLQUFLLGNBQWMsTUFBTSxTQUFTO0FBQUEsUUFDekQ7QUFDQSxZQUFJLENBQUMsaUJBQWlCLGlCQUFpQixhQUFhLEdBQUc7QUFDckQsY0FBSSxtQkFBbUIsd0JBQXdCLEtBQUssQ0FBQyxZQUFZLEtBQUssQ0FBQyxtQkFBbUIsV0FBVztBQUNuRyxnQkFBSSxlQUFlLEVBQUUsWUFBWSxXQUFXLEtBQUssaUJBQWlCLFdBQVcsZUFBZSxXQUFXLEtBQUssb0JBQW9CLGVBQWUsV0FBVyxJQUFJO0FBQzVKLGtCQUFJLFlBQVksQ0FBQyxtQkFBbUIsaUJBQWlCLENBQUMsV0FBVztBQUMvRCxvQkFBSSxjQUFjLE1BQU07QUFDdEIsZ0NBQWMsS0FBSztBQUFBLGdCQUNyQjtBQUNBLHlCQUFTLEtBQUssTUFBTTtBQUFBLGNBQ3RCLE9BQU87QUFDTCx5QkFBUyxnQkFBZ0IsYUFBYSxpQkFBaUI7QUFBQSxrQkFDckQ7QUFBQSxnQkFDRixDQUFDO0FBQ0Qsc0NBQXNCLENBQUM7QUFBQSxjQUN6QjtBQUFBLFlBQ0Y7QUFDQSxvQ0FBd0I7QUFDeEIsOEJBQWtCLFlBQVksU0FBUztBQUN2Qyw4QkFBa0Isb0JBQW9CLGVBQWU7QUFBQSxVQUN2RDtBQUFBLFFBQ0Y7QUFDQSxZQUFJLFlBQVksa0JBQWtCLFNBQVMsaUJBQWlCLFNBQVMsY0FBYyx5QkFBeUIsR0FBRztBQUM3RyxjQUFJLG1CQUFtQixZQUFZLFNBQVM7QUFDNUMsY0FBSSxXQUFXLHFCQUFxQixXQUFXO0FBQy9DLGNBQUksZUFBZSxTQUFTLElBQUksU0FBVUksUUFBTztBQUMvQyxnQkFBSUosUUFBT0ksT0FBTTtBQUNqQixtQkFBT0o7QUFBQSxVQUNULENBQUMsRUFBRSxRQUFRLGdCQUFnQjtBQUMzQixjQUFJLGVBQWUsSUFBSTtBQUNyQixxQkFBUyxPQUFPLFNBQVVLLFFBQU87QUFDL0Isa0JBQUksUUFBUUEsT0FBTSxPQUNoQkwsUUFBT0ssT0FBTTtBQUNmLHFCQUFPLFNBQVNMLE1BQUssUUFBUTtBQUFBLFlBQy9CLENBQUMsRUFBRSxRQUFRLFNBQVVNLFFBQU87QUFDMUIsa0JBQUlOLFFBQU9NLE9BQU07QUFDakIscUJBQU9OLE1BQUssZ0JBQWdCLFVBQVU7QUFBQSxZQUN4QyxDQUFDO0FBQ0Qsc0JBQVUsY0FBYyxTQUFTLFFBQVEsR0FBSSxRQUFRO0FBQ3JELHNCQUFVLGNBQWMsSUFBSSxJQUFJLFFBQVE7QUFBQSxVQUMxQztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxTQUFTLFNBQVNPLFFBQU8sT0FBTztBQUNsQyxRQUFJLGFBQWEsS0FBSyxPQUFPO0FBQzNCLFlBQU0sZ0JBQWdCO0FBQ3RCLFlBQU0sZUFBZTtBQUFBLElBQ3ZCO0FBQUEsRUFDRjtBQUNBLE1BQUksU0FBUyxTQUFTQyxVQUFTO0FBQzdCLFdBQU8sWUFBWSxZQUFZO0FBQUEsRUFDakM7QUFDQSxNQUFJLFVBQVUsU0FBU0MsU0FBUSxPQUFPO0FBQ3BDLFFBQUksU0FBUyxNQUFNO0FBQ25CLFFBQUksY0FBYyxNQUFNO0FBQ3hCLFFBQUksQ0FBQyxZQUFZLFNBQVMsTUFBTSxHQUFHO0FBQ2pDLG1CQUFhLGFBQWEsTUFBTTtBQUFBLElBQ2xDO0FBQUEsRUFDRjtBQUNBLE1BQUksZUFBZSxTQUFTQyxnQkFBZTtBQUN6QyxXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksWUFBWSxTQUFTQyxXQUFVQyxRQUFPO0FBQ3hDLFFBQUksV0FBV0EsT0FBTTtBQUNyQixXQUFvQixnQkFBTSx1QkFBYyxPQUFPO0FBQUEsTUFDN0M7QUFBQSxNQUNBO0FBQUEsSUFDRixHQUFHLFFBQVE7QUFBQSxFQUNiO0FBQ0EsWUFBVSxZQUFZLE9BQXdDO0FBQUEsSUFDNUQsVUFBVSxvQkFBQUMsUUFBVSxLQUFLO0FBQUEsRUFDM0IsSUFBSSxDQUFDO0FBQ0wsTUFBSSxnQkFBZ0IsU0FBU0MsaUJBQWdCO0FBQzNDLG9CQUFnQjtBQUFBLEVBQ2xCO0FBQ0EsTUFBSSxlQUFlLFNBQVNDLGdCQUFlO0FBQ3pDLG9CQUFnQjtBQUNoQiw0QkFBd0I7QUFDeEIsZ0JBQVksV0FBWTtBQUN0Qiw4QkFBd0I7QUFBQSxJQUMxQixDQUFDO0FBQUEsRUFDSDtBQUNBLE1BQUksZ0JBQWdCLFNBQVNDLGlCQUFnQjtBQUMzQyxhQUFTLGlCQUFpQixXQUFXLE1BQU07QUFDM0MsYUFBUyxpQkFBaUIsWUFBWSxNQUFNO0FBQzVDLFdBQU8saUJBQWlCLFNBQVMsYUFBYTtBQUM5QyxXQUFPLGlCQUFpQixRQUFRLFlBQVk7QUFBQSxFQUM5QztBQUNBLE1BQUksZ0JBQWdCLFNBQVNDLGlCQUFnQjtBQUMzQyxhQUFTLG9CQUFvQixXQUFXLE1BQU07QUFDOUMsYUFBUyxvQkFBb0IsWUFBWSxNQUFNO0FBQy9DLFdBQU8sb0JBQW9CLFNBQVMsYUFBYTtBQUNqRCxXQUFPLG9CQUFvQixRQUFRLFlBQVk7QUFBQSxFQUNqRDtBQUNBLFdBQVMsbUJBQW1CLFdBQVc7QUFDckMsV0FBTyxVQUFVLE9BQU8sU0FBVUMsUUFBTztBQUN2QyxVQUFJLFdBQVdBLE9BQU07QUFDckIsYUFBTyxDQUFDO0FBQUEsSUFDVixDQUFDO0FBQUEsRUFDSDtBQUNBLE1BQUksZUFBZTtBQUFBLElBQ2pCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNBLFdBQVMsMEJBQTBCLE9BQU87QUFDeEMsUUFBSSxPQUFPLE1BQU0sTUFBTSxFQUFFLEVBQUUsQ0FBQztBQUM1QixRQUFJLFFBQVEsQ0FBQyxnQkFBZ0I7QUFDM0Isb0JBQWM7QUFBQSxJQUNoQjtBQUNBLFFBQUksV0FBVztBQUNmLFFBQUksV0FBVyxZQUFZLFFBQVEsS0FBSyxPQUFPLFNBQVM7QUFDeEQscUJBQWlCO0FBQ2pCLFFBQUksWUFBWSxDQUFDLFVBQVU7QUFDekIsZUFBUyxlQUFlO0FBQ3hCLFVBQUksQ0FBQyxNQUFNLE9BQU8sU0FBVUMsUUFBTztBQUNqQyxZQUFJLEtBQUtBLE9BQU07QUFDZixlQUFPLE9BQU8sU0FBUztBQUFBLE1BQ3pCLENBQUMsRUFBRSxRQUFRO0FBQ1QsaUJBQVMsWUFBWSxDQUFDLElBQUk7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLE1BQU07QUFDUix3QkFBa0I7QUFDbEIsVUFBSSxDQUFDLFlBQVksU0FBUyxhQUFhLEtBQUssVUFBVTtBQUNwRCxhQUFLLGFBQWEsWUFBWTtBQUFBLE1BQ2hDO0FBQ0EsbUJBQWEsSUFBSTtBQUNqQixrQkFBWSxZQUFZO0FBQUEsSUFDMUIsT0FBTztBQUNMLG9CQUFjO0FBQ2Qsd0JBQWtCO0FBQUEsSUFDcEI7QUFBQSxFQUNGO0FBQ0EsY0FBWSxpQkFBaUIsT0FBTztBQUNwQyxhQUFXLGFBQWEsTUFBTTtBQUM5QixlQUFhLGFBQWEsU0FBVSxJQUFJO0FBQ3RDLFdBQU8sR0FBRyxZQUFZO0FBQUEsRUFDeEIsQ0FBQztBQUNELE1BQU8sZUFBUSxpQkFBZSxvQkFBb0IseUJBQXlCLEVBQUUsWUFBWTs7O0E4Qi9QekYsTUFBTyxrQkFBUSxjQUFjLGVBQWUsWUFBUzs7O0FDRnJELE1BQUFDLFdBQXVCOzs7QUNEdkIsTUFBQUMsV0FBdUI7OztBQ0F2QixNQUFBQyxXQUF1Qjs7O0FDQXZCLE1BQUk7QUFJRyxNQUFJLFdBQVcsV0FBWTtBQUM5QixRQUFJLGNBQWM7QUFDZCxhQUFPO0FBQUEsSUFDWDtBQUNBLFFBQUksT0FBTyxzQkFBc0IsYUFBYTtBQUMxQyxhQUFPO0FBQUEsSUFDWDtBQUNBLFdBQU87QUFBQSxFQUNYOzs7QUNYQSxXQUFTLGVBQWU7QUFDcEIsUUFBSSxDQUFDO0FBQ0QsYUFBTztBQUNYLFFBQUksTUFBTSxTQUFTLGNBQWMsT0FBTztBQUN4QyxRQUFJLE9BQU87QUFDWCxRQUFJLFFBQVEsU0FBUztBQUNyQixRQUFJLE9BQU87QUFDUCxVQUFJLGFBQWEsU0FBUyxLQUFLO0FBQUEsSUFDbkM7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUNBLFdBQVMsYUFBYSxLQUFLQyxNQUFLO0FBRTVCLFFBQUksSUFBSSxZQUFZO0FBRWhCLFVBQUksV0FBVyxVQUFVQTtBQUFBLElBQzdCLE9BQ0s7QUFDRCxVQUFJLFlBQVksU0FBUyxlQUFlQSxJQUFHLENBQUM7QUFBQSxJQUNoRDtBQUFBLEVBQ0o7QUFDQSxXQUFTLGVBQWUsS0FBSztBQUN6QixRQUFJLE9BQU8sU0FBUyxRQUFRLFNBQVMscUJBQXFCLE1BQU0sRUFBRSxDQUFDO0FBQ25FLFNBQUssWUFBWSxHQUFHO0FBQUEsRUFDeEI7QUFDTyxNQUFJLHNCQUFzQixXQUFZO0FBQ3pDLFFBQUksVUFBVTtBQUNkLFFBQUksYUFBYTtBQUNqQixXQUFPO0FBQUEsTUFDSCxLQUFLLFNBQVUsT0FBTztBQUNsQixZQUFJLFdBQVcsR0FBRztBQUNkLGNBQUssYUFBYSxhQUFhLEdBQUk7QUFDL0IseUJBQWEsWUFBWSxLQUFLO0FBQzlCLDJCQUFlLFVBQVU7QUFBQSxVQUM3QjtBQUFBLFFBQ0o7QUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUNBLFFBQVEsV0FBWTtBQUNoQjtBQUNBLFlBQUksQ0FBQyxXQUFXLFlBQVk7QUFDeEIscUJBQVcsY0FBYyxXQUFXLFdBQVcsWUFBWSxVQUFVO0FBQ3JFLHVCQUFhO0FBQUEsUUFDakI7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLEVBQ0o7OztBRnBDTyxNQUFJLHFCQUFxQixXQUFZO0FBQ3hDLFFBQUksUUFBUSxvQkFBb0I7QUFDaEMsV0FBTyxTQUFVQyxTQUFRLFdBQVc7QUFDaEMsTUFBTSxtQkFBVSxXQUFZO0FBQ3hCLGNBQU0sSUFBSUEsT0FBTTtBQUNoQixlQUFPLFdBQVk7QUFDZixnQkFBTSxPQUFPO0FBQUEsUUFDakI7QUFBQSxNQUNKLEdBQUcsQ0FBQ0EsV0FBVSxTQUFTLENBQUM7QUFBQSxJQUM1QjtBQUFBLEVBQ0o7OztBR2RPLE1BQUksaUJBQWlCLFdBQVk7QUFDcEMsUUFBSSxXQUFXLG1CQUFtQjtBQUNsQyxRQUFJLFFBQVEsU0FBVSxJQUFJO0FBQ3RCLFVBQUlDLFVBQVMsR0FBRyxRQUFRLFVBQVUsR0FBRztBQUNyQyxlQUFTQSxTQUFRLE9BQU87QUFDeEIsYUFBTztBQUFBLElBQ1g7QUFDQSxXQUFPO0FBQUEsRUFDWDs7O0FDZk8sTUFBSSxVQUFVO0FBQUEsSUFDakIsTUFBTTtBQUFBLElBQ04sS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLElBQ1AsS0FBSztBQUFBLEVBQ1Q7QUFDQSxNQUFJQyxTQUFRLFNBQVVDLElBQUc7QUFBRSxXQUFPLFNBQVNBLE1BQUssSUFBSSxFQUFFLEtBQUs7QUFBQSxFQUFHO0FBQzlELE1BQUksWUFBWSxTQUFVLFNBQVM7QUFDL0IsUUFBSSxLQUFLLE9BQU8saUJBQWlCLFNBQVMsSUFBSTtBQUM5QyxRQUFJLE9BQU8sR0FBRyxZQUFZLFlBQVksZ0JBQWdCLFlBQVk7QUFDbEUsUUFBSSxNQUFNLEdBQUcsWUFBWSxZQUFZLGVBQWUsV0FBVztBQUMvRCxRQUFJLFFBQVEsR0FBRyxZQUFZLFlBQVksaUJBQWlCLGFBQWE7QUFDckUsV0FBTyxDQUFDRCxPQUFNLElBQUksR0FBR0EsT0FBTSxHQUFHLEdBQUdBLE9BQU0sS0FBSyxDQUFDO0FBQUEsRUFDakQ7QUFDTyxNQUFJLGNBQWMsU0FBVSxTQUFTO0FBQ3hDLFFBQUksWUFBWSxRQUFRO0FBQUUsZ0JBQVU7QUFBQSxJQUFVO0FBQzlDLFFBQUksT0FBTyxXQUFXLGFBQWE7QUFDL0IsYUFBTztBQUFBLElBQ1g7QUFDQSxRQUFJLFVBQVUsVUFBVSxPQUFPO0FBQy9CLFFBQUksZ0JBQWdCLFNBQVMsZ0JBQWdCO0FBQzdDLFFBQUksY0FBYyxPQUFPO0FBQ3pCLFdBQU87QUFBQSxNQUNILE1BQU0sUUFBUSxDQUFDO0FBQUEsTUFDZixLQUFLLFFBQVEsQ0FBQztBQUFBLE1BQ2QsT0FBTyxRQUFRLENBQUM7QUFBQSxNQUNoQixLQUFLLEtBQUssSUFBSSxHQUFHLGNBQWMsZ0JBQWdCLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDO0FBQUEsSUFDMUU7QUFBQSxFQUNKOzs7QUx4QkEsTUFBSSxRQUFRLGVBQWU7QUFDcEIsTUFBSSxnQkFBZ0I7QUFJM0IsTUFBSSxZQUFZLFNBQVUsSUFBSSxlQUFlLFNBQVMsV0FBVztBQUM3RCxRQUFJLE9BQU8sR0FBRyxNQUFNLE1BQU0sR0FBRyxLQUFLLFFBQVEsR0FBRyxPQUFPLE1BQU0sR0FBRztBQUM3RCxRQUFJLFlBQVksUUFBUTtBQUFFLGdCQUFVO0FBQUEsSUFBVTtBQUM5QyxXQUFPLFFBQVEsT0FBTyx1QkFBdUIsMEJBQTBCLEVBQUUsT0FBTyxXQUFXLHVCQUF1QixFQUFFLE9BQU8sS0FBSyxLQUFLLEVBQUUsT0FBTyxXQUFXLGlCQUFpQixFQUFFLE9BQU8sZUFBZSw0QkFBNEIsRUFBRSxPQUFPLFdBQVcsNENBQTRDLEVBQUUsT0FBTztBQUFBLE1BQ25TLGlCQUFpQixzQkFBc0IsT0FBTyxXQUFXLEdBQUc7QUFBQSxNQUM1RCxZQUFZLFlBQ1IsdUJBQXVCLE9BQU8sTUFBTSx3QkFBd0IsRUFBRSxPQUFPLEtBQUssMEJBQTBCLEVBQUUsT0FBTyxPQUFPLGdFQUFnRSxFQUFFLE9BQU8sS0FBSyxLQUFLLEVBQUUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUN4TyxZQUFZLGFBQWEsa0JBQWtCLE9BQU8sS0FBSyxLQUFLLEVBQUUsT0FBTyxXQUFXLEdBQUc7QUFBQSxJQUN2RixFQUNLLE9BQU8sT0FBTyxFQUNkLEtBQUssRUFBRSxHQUFHLGdCQUFnQixFQUFFLE9BQU8sb0JBQW9CLGlCQUFpQixFQUFFLE9BQU8sS0FBSyxLQUFLLEVBQUUsT0FBTyxXQUFXLGlCQUFpQixFQUFFLE9BQU8sb0JBQW9CLHdCQUF3QixFQUFFLE9BQU8sS0FBSyxLQUFLLEVBQUUsT0FBTyxXQUFXLGlCQUFpQixFQUFFLE9BQU8sb0JBQW9CLElBQUksRUFBRSxPQUFPLG9CQUFvQixtQkFBbUIsRUFBRSxPQUFPLFdBQVcsaUJBQWlCLEVBQUUsT0FBTyxvQkFBb0IsSUFBSSxFQUFFLE9BQU8sb0JBQW9CLDBCQUEwQixFQUFFLE9BQU8sV0FBVyxxQkFBcUIsRUFBRSxPQUFPLGVBQWUsV0FBVyxFQUFFLE9BQU8sd0JBQXdCLElBQUksRUFBRSxPQUFPLEtBQUssWUFBWTtBQUFBLEVBQy9rQjtBQUNBLE1BQUksdUJBQXVCLFdBQVk7QUFDbkMsUUFBSSxVQUFVLFNBQVMsU0FBUyxLQUFLLGFBQWEsYUFBYSxLQUFLLEtBQUssRUFBRTtBQUMzRSxXQUFPLFNBQVMsT0FBTyxJQUFJLFVBQVU7QUFBQSxFQUN6QztBQUNPLE1BQUksbUJBQW1CLFdBQVk7QUFDdEMsSUFBTSxtQkFBVSxXQUFZO0FBQ3hCLGVBQVMsS0FBSyxhQUFhLGdCQUFnQixxQkFBcUIsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUNqRixhQUFPLFdBQVk7QUFDZixZQUFJLGFBQWEscUJBQXFCLElBQUk7QUFDMUMsWUFBSSxjQUFjLEdBQUc7QUFDakIsbUJBQVMsS0FBSyxnQkFBZ0IsYUFBYTtBQUFBLFFBQy9DLE9BQ0s7QUFDRCxtQkFBUyxLQUFLLGFBQWEsZUFBZSxXQUFXLFNBQVMsQ0FBQztBQUFBLFFBQ25FO0FBQUEsTUFDSjtBQUFBLElBQ0osR0FBRyxDQUFDLENBQUM7QUFBQSxFQUNUO0FBSU8sTUFBSSxrQkFBa0IsU0FBVSxJQUFJO0FBQ3ZDLFFBQUksYUFBYSxHQUFHLFlBQVksY0FBYyxHQUFHLGFBQWEsS0FBSyxHQUFHLFNBQVMsVUFBVSxPQUFPLFNBQVMsV0FBVztBQUNwSCxxQkFBaUI7QUFNakIsUUFBSSxNQUFZLGlCQUFRLFdBQVk7QUFBRSxhQUFPLFlBQVksT0FBTztBQUFBLElBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUMvRSxXQUFhLHVCQUFjLE9BQU8sRUFBRSxRQUFRLFVBQVUsS0FBSyxDQUFDLFlBQVksU0FBUyxDQUFDLGNBQWMsZUFBZSxFQUFFLEVBQUUsQ0FBQztBQUFBLEVBQ3hIOzs7QU1wREEsTUFBSSxtQkFBbUI7QUFDdkIsTUFBSSxPQUFPLFdBQVcsYUFBYTtBQUMvQixRQUFJO0FBQ0ksZ0JBQVUsT0FBTyxlQUFlLENBQUMsR0FBRyxXQUFXO0FBQUEsUUFDL0MsS0FBSyxXQUFZO0FBQ2IsNkJBQW1CO0FBQ25CLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0osQ0FBQztBQUVELGFBQU8saUJBQWlCLFFBQVEsU0FBUyxPQUFPO0FBRWhELGFBQU8sb0JBQW9CLFFBQVEsU0FBUyxPQUFPO0FBQUEsSUFDdkQsU0FDTyxLQUFLO0FBQ1IseUJBQW1CO0FBQUEsSUFDdkI7QUFBQSxFQUNKO0FBZFk7QUFlTCxNQUFJLGFBQWEsbUJBQW1CLEVBQUUsU0FBUyxNQUFNLElBQUk7OztBQ2xCaEUsTUFBSSx1QkFBdUIsU0FBVUUsT0FBTTtBQUV2QyxXQUFPQSxNQUFLLFlBQVk7QUFBQSxFQUM1QjtBQUNBLE1BQUksdUJBQXVCLFNBQVVBLE9BQU0sVUFBVTtBQUNqRCxRQUFJLEVBQUVBLGlCQUFnQixVQUFVO0FBQzVCLGFBQU87QUFBQSxJQUNYO0FBQ0EsUUFBSUMsVUFBUyxPQUFPLGlCQUFpQkQsS0FBSTtBQUN6QztBQUFBO0FBQUEsTUFFQUMsUUFBTyxRQUFRLE1BQU07QUFBQSxNQUVqQixFQUFFQSxRQUFPLGNBQWNBLFFBQU8sYUFBYSxDQUFDLHFCQUFxQkQsS0FBSSxLQUFLQyxRQUFPLFFBQVEsTUFBTTtBQUFBO0FBQUEsRUFDdkc7QUFDQSxNQUFJLDBCQUEwQixTQUFVRCxPQUFNO0FBQUUsV0FBTyxxQkFBcUJBLE9BQU0sV0FBVztBQUFBLEVBQUc7QUFDaEcsTUFBSSwwQkFBMEIsU0FBVUEsT0FBTTtBQUFFLFdBQU8scUJBQXFCQSxPQUFNLFdBQVc7QUFBQSxFQUFHO0FBQ3pGLE1BQUksMEJBQTBCLFNBQVUsTUFBTUEsT0FBTTtBQUN2RCxRQUFJLGdCQUFnQkEsTUFBSztBQUN6QixRQUFJLFVBQVVBO0FBQ2QsT0FBRztBQUVDLFVBQUksT0FBTyxlQUFlLGVBQWUsbUJBQW1CLFlBQVk7QUFDcEUsa0JBQVUsUUFBUTtBQUFBLE1BQ3RCO0FBQ0EsVUFBSSxlQUFlLHVCQUF1QixNQUFNLE9BQU87QUFDdkQsVUFBSSxjQUFjO0FBQ2QsWUFBSSxLQUFLLG1CQUFtQixNQUFNLE9BQU8sR0FBRyxlQUFlLEdBQUcsQ0FBQyxHQUFHLGVBQWUsR0FBRyxDQUFDO0FBQ3JGLFlBQUksZUFBZSxjQUFjO0FBQzdCLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxnQkFBVSxRQUFRO0FBQUEsSUFDdEIsU0FBUyxXQUFXLFlBQVksY0FBYztBQUM5QyxXQUFPO0FBQUEsRUFDWDtBQUNBLE1BQUksc0JBQXNCLFNBQVUsSUFBSTtBQUNwQyxRQUFJLFlBQVksR0FBRyxXQUFXLGVBQWUsR0FBRyxjQUFjLGVBQWUsR0FBRztBQUNoRixXQUFPO0FBQUEsTUFDSDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDQSxNQUFJLHNCQUFzQixTQUFVLElBQUk7QUFDcEMsUUFBSSxhQUFhLEdBQUcsWUFBWSxjQUFjLEdBQUcsYUFBYSxjQUFjLEdBQUc7QUFDL0UsV0FBTztBQUFBLE1BQ0g7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBQ0EsTUFBSSx5QkFBeUIsU0FBVSxNQUFNQSxPQUFNO0FBQy9DLFdBQU8sU0FBUyxNQUFNLHdCQUF3QkEsS0FBSSxJQUFJLHdCQUF3QkEsS0FBSTtBQUFBLEVBQ3RGO0FBQ0EsTUFBSSxxQkFBcUIsU0FBVSxNQUFNQSxPQUFNO0FBQzNDLFdBQU8sU0FBUyxNQUFNLG9CQUFvQkEsS0FBSSxJQUFJLG9CQUFvQkEsS0FBSTtBQUFBLEVBQzlFO0FBQ0EsTUFBSSxxQkFBcUIsU0FBVSxNQUFNLFdBQVc7QUFNaEQsV0FBTyxTQUFTLE9BQU8sY0FBYyxRQUFRLEtBQUs7QUFBQSxFQUN0RDtBQUNPLE1BQUksZUFBZSxTQUFVLE1BQU0sV0FBVyxPQUFPLGFBQWEsY0FBYztBQUNuRixRQUFJLGtCQUFrQixtQkFBbUIsTUFBTSxPQUFPLGlCQUFpQixTQUFTLEVBQUUsU0FBUztBQUMzRixRQUFJLFFBQVEsa0JBQWtCO0FBRTlCLFFBQUksU0FBUyxNQUFNO0FBQ25CLFFBQUksZUFBZSxVQUFVLFNBQVMsTUFBTTtBQUM1QyxRQUFJLHFCQUFxQjtBQUN6QixRQUFJLGtCQUFrQixRQUFRO0FBQzlCLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUkscUJBQXFCO0FBQ3pCLE9BQUc7QUFDQyxVQUFJLEtBQUssbUJBQW1CLE1BQU0sTUFBTSxHQUFHRSxZQUFXLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLENBQUM7QUFDOUYsVUFBSSxnQkFBZ0IsV0FBVyxXQUFXLGtCQUFrQkE7QUFDNUQsVUFBSUEsYUFBWSxlQUFlO0FBQzNCLFlBQUksdUJBQXVCLE1BQU0sTUFBTSxHQUFHO0FBQ3RDLDZCQUFtQjtBQUNuQixnQ0FBc0JBO0FBQUEsUUFDMUI7QUFBQSxNQUNKO0FBQ0EsVUFBSSxrQkFBa0IsWUFBWTtBQUM5QixpQkFBUyxPQUFPO0FBQUEsTUFDcEIsT0FDSztBQUNELGlCQUFTLE9BQU87QUFBQSxNQUNwQjtBQUFBLElBQ0o7QUFBQTtBQUFBLE1BRUMsQ0FBQyxnQkFBZ0IsV0FBVyxTQUFTO0FBQUEsTUFFakMsaUJBQWlCLFVBQVUsU0FBUyxNQUFNLEtBQUssY0FBYztBQUFBO0FBRWxFLFFBQUksb0JBQ0UsZ0JBQWdCLEtBQUssSUFBSSxlQUFlLElBQUksS0FBTyxDQUFDLGdCQUFnQixRQUFRLGtCQUFtQjtBQUNqRywyQkFBcUI7QUFBQSxJQUN6QixXQUNTLENBQUMsb0JBQ0osZ0JBQWdCLEtBQUssSUFBSSxrQkFBa0IsSUFBSSxLQUFPLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxxQkFBc0I7QUFDeEcsMkJBQXFCO0FBQUEsSUFDekI7QUFDQSxXQUFPO0FBQUEsRUFDWDs7O0FScEdPLE1BQUksYUFBYSxTQUFVLE9BQU87QUFDckMsV0FBTyxvQkFBb0IsUUFBUSxDQUFDLE1BQU0sZUFBZSxDQUFDLEVBQUUsU0FBUyxNQUFNLGVBQWUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUFBLEVBQ2pIO0FBQ08sTUFBSSxhQUFhLFNBQVUsT0FBTztBQUFFLFdBQU8sQ0FBQyxNQUFNLFFBQVEsTUFBTSxNQUFNO0FBQUEsRUFBRztBQUNoRixNQUFJQyxjQUFhLFNBQVUsS0FBSztBQUM1QixXQUFPLE9BQU8sYUFBYSxNQUFNLElBQUksVUFBVTtBQUFBLEVBQ25EO0FBQ0EsTUFBSSxlQUFlLFNBQVVDLElBQUcsR0FBRztBQUFFLFdBQU9BLEdBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLQSxHQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7QUFBQSxFQUFHO0FBQzVFLE1BQUksZ0JBQWdCLFNBQVUsSUFBSTtBQUFFLFdBQU8sNEJBQTRCLE9BQU8sSUFBSSxtREFBbUQsRUFBRSxPQUFPLElBQUksMkJBQTJCO0FBQUEsRUFBRztBQUNoTCxNQUFJLFlBQVk7QUFDaEIsTUFBSSxZQUFZLENBQUM7QUFDVixXQUFTLG9CQUFvQixPQUFPO0FBQ3ZDLFFBQUkscUJBQTJCLGdCQUFPLENBQUMsQ0FBQztBQUN4QyxRQUFJLGdCQUFzQixnQkFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLFFBQUksYUFBbUIsZ0JBQU87QUFDOUIsUUFBSSxLQUFXLGtCQUFTLFdBQVcsRUFBRSxDQUFDO0FBQ3RDLFFBQUlDLFNBQWMsa0JBQVMsY0FBYyxFQUFFLENBQUM7QUFDNUMsUUFBSSxZQUFrQixnQkFBTyxLQUFLO0FBQ2xDLElBQU0sbUJBQVUsV0FBWTtBQUN4QixnQkFBVSxVQUFVO0FBQUEsSUFDeEIsR0FBRyxDQUFDLEtBQUssQ0FBQztBQUNWLElBQU0sbUJBQVUsV0FBWTtBQUN4QixVQUFJLE1BQU0sT0FBTztBQUNiLGlCQUFTLEtBQUssVUFBVSxJQUFJLHVCQUF1QixPQUFPLEVBQUUsQ0FBQztBQUM3RCxZQUFJLFVBQVUsY0FBYyxDQUFDLE1BQU0sUUFBUSxPQUFPLElBQUksTUFBTSxVQUFVLENBQUMsR0FBRyxJQUFJRixXQUFVLEdBQUcsSUFBSSxFQUFFLE9BQU8sT0FBTztBQUMvRyxnQkFBUSxRQUFRLFNBQVUsSUFBSTtBQUFFLGlCQUFPLEdBQUcsVUFBVSxJQUFJLHVCQUF1QixPQUFPLEVBQUUsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUM3RixlQUFPLFdBQVk7QUFDZixtQkFBUyxLQUFLLFVBQVUsT0FBTyx1QkFBdUIsT0FBTyxFQUFFLENBQUM7QUFDaEUsa0JBQVEsUUFBUSxTQUFVLElBQUk7QUFBRSxtQkFBTyxHQUFHLFVBQVUsT0FBTyx1QkFBdUIsT0FBTyxFQUFFLENBQUM7QUFBQSxVQUFHLENBQUM7QUFBQSxRQUNwRztBQUFBLE1BQ0o7QUFDQTtBQUFBLElBQ0osR0FBRyxDQUFDLE1BQU0sT0FBTyxNQUFNLFFBQVEsU0FBUyxNQUFNLE1BQU0sQ0FBQztBQUNyRCxRQUFJLG9CQUEwQixxQkFBWSxTQUFVLE9BQU8sUUFBUTtBQUMvRCxVQUFJLGFBQWEsU0FBUyxNQUFNLFFBQVEsV0FBVyxHQUFHO0FBQ2xELGVBQU8sQ0FBQyxVQUFVLFFBQVE7QUFBQSxNQUM5QjtBQUNBLFVBQUksUUFBUSxXQUFXLEtBQUs7QUFDNUIsVUFBSSxhQUFhLGNBQWM7QUFDL0IsVUFBSSxTQUFTLFlBQVksUUFBUSxNQUFNLFNBQVMsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDO0FBQ3ZFLFVBQUksU0FBUyxZQUFZLFFBQVEsTUFBTSxTQUFTLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUN2RSxVQUFJO0FBQ0osVUFBSSxTQUFTLE1BQU07QUFDbkIsVUFBSSxnQkFBZ0IsS0FBSyxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksTUFBTSxJQUFJLE1BQU07QUFFaEUsVUFBSSxhQUFhLFNBQVMsa0JBQWtCLE9BQU8sT0FBTyxTQUFTLFNBQVM7QUFDeEUsZUFBTztBQUFBLE1BQ1g7QUFDQSxVQUFJLCtCQUErQix3QkFBd0IsZUFBZSxNQUFNO0FBQ2hGLFVBQUksQ0FBQyw4QkFBOEI7QUFDL0IsZUFBTztBQUFBLE1BQ1g7QUFDQSxVQUFJLDhCQUE4QjtBQUM5QixzQkFBYztBQUFBLE1BQ2xCLE9BQ0s7QUFDRCxzQkFBYyxrQkFBa0IsTUFBTSxNQUFNO0FBQzVDLHVDQUErQix3QkFBd0IsZUFBZSxNQUFNO0FBQUEsTUFFaEY7QUFDQSxVQUFJLENBQUMsOEJBQThCO0FBQy9CLGVBQU87QUFBQSxNQUNYO0FBQ0EsVUFBSSxDQUFDLFdBQVcsV0FBVyxvQkFBb0IsVUFBVSxVQUFVLFNBQVM7QUFDeEUsbUJBQVcsVUFBVTtBQUFBLE1BQ3pCO0FBQ0EsVUFBSSxDQUFDLGFBQWE7QUFDZCxlQUFPO0FBQUEsTUFDWDtBQUNBLFVBQUksZ0JBQWdCLFdBQVcsV0FBVztBQUMxQyxhQUFPLGFBQWEsZUFBZSxRQUFRLE9BQU8sa0JBQWtCLE1BQU0sU0FBUyxRQUFRLElBQUk7QUFBQSxJQUNuRyxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUksZ0JBQXNCLHFCQUFZLFNBQVUsUUFBUTtBQUNwRCxVQUFJLFFBQVE7QUFDWixVQUFJLENBQUMsVUFBVSxVQUFVLFVBQVUsVUFBVSxTQUFTLENBQUMsTUFBTUUsUUFBTztBQUVoRTtBQUFBLE1BQ0o7QUFDQSxVQUFJLFFBQVEsWUFBWSxRQUFRLFdBQVcsS0FBSyxJQUFJLFdBQVcsS0FBSztBQUNwRSxVQUFJLGNBQWMsbUJBQW1CLFFBQVEsT0FBTyxTQUFVLEdBQUc7QUFBRSxlQUFPLEVBQUUsU0FBUyxNQUFNLFNBQVMsRUFBRSxXQUFXLE1BQU0sVUFBVSxNQUFNLFdBQVcsRUFBRSxpQkFBaUIsYUFBYSxFQUFFLE9BQU8sS0FBSztBQUFBLE1BQUcsQ0FBQyxFQUFFLENBQUM7QUFFdk0sVUFBSSxlQUFlLFlBQVksUUFBUTtBQUNuQyxZQUFJLE1BQU0sWUFBWTtBQUNsQixnQkFBTSxlQUFlO0FBQUEsUUFDekI7QUFDQTtBQUFBLE1BQ0o7QUFFQSxVQUFJLENBQUMsYUFBYTtBQUNkLFlBQUksY0FBYyxVQUFVLFFBQVEsVUFBVSxDQUFDLEdBQzFDLElBQUlGLFdBQVUsRUFDZCxPQUFPLE9BQU8sRUFDZCxPQUFPLFNBQVVHLE9BQU07QUFBRSxpQkFBT0EsTUFBSyxTQUFTLE1BQU0sTUFBTTtBQUFBLFFBQUcsQ0FBQztBQUNuRSxZQUFJLGFBQWEsV0FBVyxTQUFTLElBQUksa0JBQWtCLE9BQU8sV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsUUFBUTtBQUN0RyxZQUFJLFlBQVk7QUFDWixjQUFJLE1BQU0sWUFBWTtBQUNsQixrQkFBTSxlQUFlO0FBQUEsVUFDekI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0osR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFJLGVBQXFCLHFCQUFZLFNBQVUsTUFBTSxPQUFPLFFBQVEsUUFBUTtBQUN4RSxVQUFJLFFBQVEsRUFBRSxNQUFZLE9BQWMsUUFBZ0IsUUFBZ0IsY0FBYyx5QkFBeUIsTUFBTSxFQUFFO0FBQ3ZILHlCQUFtQixRQUFRLEtBQUssS0FBSztBQUNyQyxpQkFBVyxXQUFZO0FBQ25CLDJCQUFtQixVQUFVLG1CQUFtQixRQUFRLE9BQU8sU0FBVSxHQUFHO0FBQUUsaUJBQU8sTUFBTTtBQUFBLFFBQU8sQ0FBQztBQUFBLE1BQ3ZHLEdBQUcsQ0FBQztBQUFBLElBQ1IsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFJLG1CQUF5QixxQkFBWSxTQUFVLE9BQU87QUFDdEQsb0JBQWMsVUFBVSxXQUFXLEtBQUs7QUFDeEMsaUJBQVcsVUFBVTtBQUFBLElBQ3pCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBSSxjQUFvQixxQkFBWSxTQUFVLE9BQU87QUFDakQsbUJBQWEsTUFBTSxNQUFNLFdBQVcsS0FBSyxHQUFHLE1BQU0sUUFBUSxrQkFBa0IsT0FBTyxNQUFNLFFBQVEsT0FBTyxDQUFDO0FBQUEsSUFDN0csR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFJLGtCQUF3QixxQkFBWSxTQUFVLE9BQU87QUFDckQsbUJBQWEsTUFBTSxNQUFNLFdBQVcsS0FBSyxHQUFHLE1BQU0sUUFBUSxrQkFBa0IsT0FBTyxNQUFNLFFBQVEsT0FBTyxDQUFDO0FBQUEsSUFDN0csR0FBRyxDQUFDLENBQUM7QUFDTCxJQUFNLG1CQUFVLFdBQVk7QUFDeEIsZ0JBQVUsS0FBS0QsTUFBSztBQUNwQixZQUFNLGFBQWE7QUFBQSxRQUNmLGlCQUFpQjtBQUFBLFFBQ2pCLGdCQUFnQjtBQUFBLFFBQ2hCLG9CQUFvQjtBQUFBLE1BQ3hCLENBQUM7QUFDRCxlQUFTLGlCQUFpQixTQUFTLGVBQWUsVUFBVTtBQUM1RCxlQUFTLGlCQUFpQixhQUFhLGVBQWUsVUFBVTtBQUNoRSxlQUFTLGlCQUFpQixjQUFjLGtCQUFrQixVQUFVO0FBQ3BFLGFBQU8sV0FBWTtBQUNmLG9CQUFZLFVBQVUsT0FBTyxTQUFVLE1BQU07QUFBRSxpQkFBTyxTQUFTQTtBQUFBLFFBQU8sQ0FBQztBQUN2RSxpQkFBUyxvQkFBb0IsU0FBUyxlQUFlLFVBQVU7QUFDL0QsaUJBQVMsb0JBQW9CLGFBQWEsZUFBZSxVQUFVO0FBQ25FLGlCQUFTLG9CQUFvQixjQUFjLGtCQUFrQixVQUFVO0FBQUEsTUFDM0U7QUFBQSxJQUNKLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBSSxrQkFBa0IsTUFBTSxpQkFBaUIsUUFBUSxNQUFNO0FBQzNELFdBQWM7QUFBQSxNQUFvQjtBQUFBLE1BQVU7QUFBQSxNQUN4QyxRQUFjLHVCQUFjQSxRQUFPLEVBQUUsUUFBUSxjQUFjLEVBQUUsRUFBRSxDQUFDLElBQUk7QUFBQSxNQUNwRSxrQkFBd0IsdUJBQWMsaUJBQWlCLEVBQUUsU0FBUyxNQUFNLFFBQVEsQ0FBQyxJQUFJO0FBQUEsSUFBSTtBQUFBLEVBQ2pHO0FBQ0EsV0FBUyx5QkFBeUJDLE9BQU07QUFDcEMsUUFBSSxlQUFlO0FBQ25CLFdBQU9BLFVBQVMsTUFBTTtBQUNsQixVQUFJQSxpQkFBZ0IsWUFBWTtBQUM1Qix1QkFBZUEsTUFBSztBQUNwQixRQUFBQSxRQUFPQSxNQUFLO0FBQUEsTUFDaEI7QUFDQSxNQUFBQSxRQUFPQSxNQUFLO0FBQUEsSUFDaEI7QUFDQSxXQUFPO0FBQUEsRUFDWDs7O0FTekpBLE1BQU9DLG1CQUFRLGNBQWMsV0FBVyxtQkFBbUI7OztBQ0YzRCxNQUFBQyxXQUF1Qjs7O0FDRHZCLE1BQUksbUJBQW1CLFNBQVUsZ0JBQWdCO0FBQzdDLFFBQUksT0FBTyxhQUFhLGFBQWE7QUFDakMsYUFBTztBQUFBLElBQ1g7QUFDQSxRQUFJLGVBQWUsTUFBTSxRQUFRLGNBQWMsSUFBSSxlQUFlLENBQUMsSUFBSTtBQUN2RSxXQUFPLGFBQWEsY0FBYztBQUFBLEVBQ3RDO0FBQ0EsTUFBSSxhQUFhLG9CQUFJLFFBQVE7QUFDN0IsTUFBSSxvQkFBb0Isb0JBQUksUUFBUTtBQUNwQyxNQUFJLFlBQVksQ0FBQztBQUNqQixNQUFJLFlBQVk7QUFDaEIsTUFBSSxhQUFhLFNBQVVDLE9BQU07QUFDN0IsV0FBT0EsVUFBU0EsTUFBSyxRQUFRLFdBQVdBLE1BQUssVUFBVTtBQUFBLEVBQzNEO0FBQ0EsTUFBSSxpQkFBaUIsU0FBVSxRQUFRLFNBQVM7QUFDNUMsV0FBTyxRQUNGLElBQUksU0FBVSxRQUFRO0FBQ3ZCLFVBQUksT0FBTyxTQUFTLE1BQU0sR0FBRztBQUN6QixlQUFPO0FBQUEsTUFDWDtBQUNBLFVBQUksa0JBQWtCLFdBQVcsTUFBTTtBQUN2QyxVQUFJLG1CQUFtQixPQUFPLFNBQVMsZUFBZSxHQUFHO0FBQ3JELGVBQU87QUFBQSxNQUNYO0FBQ0EsY0FBUSxNQUFNLGVBQWUsUUFBUSwyQkFBMkIsUUFBUSxpQkFBaUI7QUFDekYsYUFBTztBQUFBLElBQ1gsQ0FBQyxFQUNJLE9BQU8sU0FBVUMsSUFBRztBQUFFLGFBQU8sUUFBUUEsRUFBQztBQUFBLElBQUcsQ0FBQztBQUFBLEVBQ25EO0FBU0EsTUFBSSx5QkFBeUIsU0FBVSxnQkFBZ0IsWUFBWSxZQUFZLGtCQUFrQjtBQUM3RixRQUFJLFVBQVUsZUFBZSxZQUFZLE1BQU0sUUFBUSxjQUFjLElBQUksaUJBQWlCLENBQUMsY0FBYyxDQUFDO0FBQzFHLFFBQUksQ0FBQyxVQUFVLFVBQVUsR0FBRztBQUN4QixnQkFBVSxVQUFVLElBQUksb0JBQUksUUFBUTtBQUFBLElBQ3hDO0FBQ0EsUUFBSSxnQkFBZ0IsVUFBVSxVQUFVO0FBQ3hDLFFBQUksY0FBYyxDQUFDO0FBQ25CLFFBQUksaUJBQWlCLG9CQUFJLElBQUk7QUFDN0IsUUFBSSxpQkFBaUIsSUFBSSxJQUFJLE9BQU87QUFDcEMsUUFBSSxPQUFPLFNBQVUsSUFBSTtBQUNyQixVQUFJLENBQUMsTUFBTSxlQUFlLElBQUksRUFBRSxHQUFHO0FBQy9CO0FBQUEsTUFDSjtBQUNBLHFCQUFlLElBQUksRUFBRTtBQUNyQixXQUFLLEdBQUcsVUFBVTtBQUFBLElBQ3RCO0FBQ0EsWUFBUSxRQUFRLElBQUk7QUFDcEIsUUFBSSxPQUFPLFNBQVUsUUFBUTtBQUN6QixVQUFJLENBQUMsVUFBVSxlQUFlLElBQUksTUFBTSxHQUFHO0FBQ3ZDO0FBQUEsTUFDSjtBQUNBLFlBQU0sVUFBVSxRQUFRLEtBQUssT0FBTyxVQUFVLFNBQVVELE9BQU07QUFDMUQsWUFBSSxlQUFlLElBQUlBLEtBQUksR0FBRztBQUMxQixlQUFLQSxLQUFJO0FBQUEsUUFDYixPQUNLO0FBQ0QsY0FBSTtBQUNBLGdCQUFJLE9BQU9BLE1BQUssYUFBYSxnQkFBZ0I7QUFDN0MsZ0JBQUksZ0JBQWdCLFNBQVMsUUFBUSxTQUFTO0FBQzlDLGdCQUFJLGdCQUFnQixXQUFXLElBQUlBLEtBQUksS0FBSyxLQUFLO0FBQ2pELGdCQUFJLGVBQWUsY0FBYyxJQUFJQSxLQUFJLEtBQUssS0FBSztBQUNuRCx1QkFBVyxJQUFJQSxPQUFNLFlBQVk7QUFDakMsMEJBQWMsSUFBSUEsT0FBTSxXQUFXO0FBQ25DLHdCQUFZLEtBQUtBLEtBQUk7QUFDckIsZ0JBQUksaUJBQWlCLEtBQUssZUFBZTtBQUNyQyxnQ0FBa0IsSUFBSUEsT0FBTSxJQUFJO0FBQUEsWUFDcEM7QUFDQSxnQkFBSSxnQkFBZ0IsR0FBRztBQUNuQixjQUFBQSxNQUFLLGFBQWEsWUFBWSxNQUFNO0FBQUEsWUFDeEM7QUFDQSxnQkFBSSxDQUFDLGVBQWU7QUFDaEIsY0FBQUEsTUFBSyxhQUFhLGtCQUFrQixNQUFNO0FBQUEsWUFDOUM7QUFBQSxVQUNKLFNBQ08sR0FBRztBQUNOLG9CQUFRLE1BQU0sbUNBQW1DQSxPQUFNLENBQUM7QUFBQSxVQUM1RDtBQUFBLFFBQ0o7QUFBQSxNQUNKLENBQUM7QUFBQSxJQUNMO0FBQ0EsU0FBSyxVQUFVO0FBQ2YsbUJBQWUsTUFBTTtBQUNyQjtBQUNBLFdBQU8sV0FBWTtBQUNmLGtCQUFZLFFBQVEsU0FBVUEsT0FBTTtBQUNoQyxZQUFJLGVBQWUsV0FBVyxJQUFJQSxLQUFJLElBQUk7QUFDMUMsWUFBSSxjQUFjLGNBQWMsSUFBSUEsS0FBSSxJQUFJO0FBQzVDLG1CQUFXLElBQUlBLE9BQU0sWUFBWTtBQUNqQyxzQkFBYyxJQUFJQSxPQUFNLFdBQVc7QUFDbkMsWUFBSSxDQUFDLGNBQWM7QUFDZixjQUFJLENBQUMsa0JBQWtCLElBQUlBLEtBQUksR0FBRztBQUM5QixZQUFBQSxNQUFLLGdCQUFnQixnQkFBZ0I7QUFBQSxVQUN6QztBQUNBLDRCQUFrQixPQUFPQSxLQUFJO0FBQUEsUUFDakM7QUFDQSxZQUFJLENBQUMsYUFBYTtBQUNkLFVBQUFBLE1BQUssZ0JBQWdCLFVBQVU7QUFBQSxRQUNuQztBQUFBLE1BQ0osQ0FBQztBQUNEO0FBQ0EsVUFBSSxDQUFDLFdBQVc7QUFFWixxQkFBYSxvQkFBSSxRQUFRO0FBQ3pCLHFCQUFhLG9CQUFJLFFBQVE7QUFDekIsNEJBQW9CLG9CQUFJLFFBQVE7QUFDaEMsb0JBQVksQ0FBQztBQUFBLE1BQ2pCO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFRTyxNQUFJLGFBQWEsU0FBVSxnQkFBZ0IsWUFBWSxZQUFZO0FBQ3RFLFFBQUksZUFBZSxRQUFRO0FBQUUsbUJBQWE7QUFBQSxJQUFvQjtBQUM5RCxRQUFJLFVBQVUsTUFBTSxLQUFLLE1BQU0sUUFBUSxjQUFjLElBQUksaUJBQWlCLENBQUMsY0FBYyxDQUFDO0FBQzFGLFFBQUksbUJBQW1CLGNBQWMsaUJBQWlCLGNBQWM7QUFDcEUsUUFBSSxDQUFDLGtCQUFrQjtBQUNuQixhQUFPLFdBQVk7QUFBRSxlQUFPO0FBQUEsTUFBTTtBQUFBLElBQ3RDO0FBRUEsWUFBUSxLQUFLLE1BQU0sU0FBUyxNQUFNLEtBQUssaUJBQWlCLGlCQUFpQixhQUFhLENBQUMsQ0FBQztBQUN4RixXQUFPLHVCQUF1QixTQUFTLGtCQUFrQixZQUFZLGFBQWE7QUFBQSxFQUN0Rjs7O0FDcklBLE1BQUFFLFdBQXVCO0FBR3ZCLE1BQUlDLFNBQVEsZUFBZTtBQUMzQixNQUFJLFNBQVMsU0FBUyxvQkFBb0I7QUFDbkMsTUFBSSx3QkFBd0IsV0FBWTtBQUFFLFdBQWEsdUJBQWNBLFFBQU8sRUFBRSxPQUFlLENBQUM7QUFBQSxFQUFHOzs7QUZBeEcsTUFBQUMsa0JBQTRDO0FBQzVDLE1BQUlDLGNBQWEsU0FBVSxLQUFLO0FBQzVCLFdBQU8sYUFBYSxNQUFNLElBQUksVUFBVTtBQUFBLEVBQzVDO0FBQ08sV0FBUyxPQUFPLElBQUk7QUFDdkIsUUFBSSxlQUFlLEdBQUcsY0FBYyxjQUFjLEdBQUcsYUFBYSxpQkFBaUIsR0FBRyxnQkFBZ0IsU0FBUyxHQUFHLFFBQVEsZUFBZSxHQUFHLGNBQWMsaUJBQWlCLEdBQUcsZ0JBQWdCLGNBQWMsR0FBRztBQUMvTSxRQUFJLFNBQUssMEJBQVMsTUFBUyxHQUFHLGFBQWEsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsQ0FBQztBQUN0RSxRQUFJLHNCQUFrQix3QkFBTyxJQUFJO0FBQ2pDLFFBQUksbUJBQWUsd0JBQU8sQ0FBQztBQUMzQixJQUFNLG1CQUFVLFdBQVk7QUFDeEIsVUFBSSxZQUFZLFNBQVUsT0FBTztBQUM3QixZQUFJLENBQUMsTUFBTSxrQkFBa0I7QUFDekIsZUFBSyxNQUFNLFNBQVMsWUFDaEIsTUFBTSxRQUFRLFlBQ2QsTUFBTSxZQUFZLE9BQ2xCLGFBQWE7QUFDYix3QkFBWSxLQUFLO0FBQUEsVUFDckI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLFVBQUksY0FBYyxTQUFVLE9BQU87QUFDL0IsWUFBSSxNQUFNLG9CQUNOLE1BQU0sV0FBVyxnQkFBZ0IsV0FDaEMsaUJBQWlCLGNBQWMsTUFBTSxXQUFXLEdBQUk7QUFDckQ7QUFBQSxRQUNKO0FBQ0EsWUFBSSxVQUNBLE9BQ0ssSUFBSUEsV0FBVSxFQUNkLEtBQUssU0FBVUMsT0FBTTtBQUN0QixpQkFBUUEsU0FBUUEsTUFBSyxTQUFTLE1BQU0sTUFBTSxLQUN0Q0EsVUFBUyxNQUFNO0FBQUEsUUFDdkIsQ0FBQyxHQUFHO0FBQ0o7QUFBQSxRQUNKO0FBQ0EsWUFBSSxnQkFBZ0I7QUFDaEIseUJBQWUsS0FBSztBQUFBLFFBQ3hCO0FBQUEsTUFDSjtBQUNBLFVBQUksZUFBZSxTQUFVLE9BQU87QUFDaEMsb0JBQVksS0FBSztBQUNqQixxQkFBYSxVQUFVLE1BQU0sUUFBUTtBQUFBLE1BQ3pDO0FBQ0EsVUFBSSxhQUFhLFNBQVUsT0FBTztBQUM5QixxQkFBYSxVQUFVLE1BQU0sUUFBUTtBQUFBLE1BQ3pDO0FBQ0EsVUFBSSxZQUFZO0FBQ1osaUJBQVMsaUJBQWlCLFdBQVcsU0FBUztBQUM5QyxpQkFBUyxpQkFBaUIsYUFBYSxXQUFXO0FBQ2xELGlCQUFTLGlCQUFpQixjQUFjLFlBQVk7QUFDcEQsaUJBQVMsaUJBQWlCLFlBQVksVUFBVTtBQUNoRCxlQUFPLFdBQVk7QUFDZixtQkFBUyxvQkFBb0IsV0FBVyxTQUFTO0FBQ2pELG1CQUFTLG9CQUFvQixhQUFhLFdBQVc7QUFDckQsbUJBQVMsb0JBQW9CLGNBQWMsWUFBWTtBQUN2RCxtQkFBUyxvQkFBb0IsWUFBWSxVQUFVO0FBQUEsUUFDdkQ7QUFBQSxNQUNKO0FBQUEsSUFDSixHQUFHLENBQUMsWUFBWSxnQkFBZ0IsV0FBVyxDQUFDO0FBQzVDLG1DQUFVLFdBQVk7QUFDbEIsVUFBSSxZQUFZO0FBQ1osWUFBSSxjQUFjO0FBQ2QsdUJBQWEsVUFBVTtBQUFBLFFBQzNCO0FBQ0EsZUFBTyxXQUFZO0FBQ2YsY0FBSSxnQkFBZ0I7QUFDaEIsMkJBQWU7QUFBQSxVQUNuQjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSixHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUNqQixtQ0FBVSxXQUFZO0FBQ2xCLFVBQUksUUFBUSxXQUFZO0FBQUUsZUFBTztBQUFBLE1BQU07QUFDdkMsVUFBSSxZQUFZO0FBQ2hCLFVBQUksbUJBQW1CLFNBQVVBLE9BQU07QUFDbkMsWUFBSSxDQUFDLGFBQWE7QUFDZCxrQkFBUSxXQUFXLGVBQWUsQ0FBQ0EsS0FBSSxJQUFJLFVBQVUsQ0FBQyxHQUFHLElBQUlELFdBQVUsQ0FBQyxHQUFHLFNBQVMsTUFBTSxpQkFBaUI7QUFBQSxRQUMvRztBQUNBLHNCQUFjLFdBQVk7QUFBRSxpQkFBT0M7QUFBQSxRQUFNLENBQUM7QUFBQSxNQUM5QztBQUNBLFVBQUkscUJBQXFCLFdBQVk7QUFDakMsY0FBTTtBQUNOLFlBQUksQ0FBQyxXQUFXO0FBQ1osd0JBQWMsSUFBSTtBQUFBLFFBQ3RCO0FBQUEsTUFDSjtBQUNBLG1CQUFhO0FBQUEsUUFDVCxhQUFhLFNBQVUsR0FBRztBQUN0QiwwQkFBZ0IsVUFBVSxFQUFFO0FBQUEsUUFDaEM7QUFBQSxRQUNBLGNBQWMsU0FBVSxHQUFHO0FBQ3ZCLDBCQUFnQixVQUFVLEVBQUU7QUFBQSxRQUNoQztBQUFBLFFBQ0EsY0FBYztBQUFBLFFBQ2QsZ0JBQWdCO0FBQUEsTUFDcEIsQ0FBQztBQUNELGFBQU8sV0FBWTtBQUNmLG9CQUFZO0FBQ1oscUJBQWEsS0FBSztBQUFBLE1BQ3RCO0FBQUEsSUFDSixHQUFHLENBQUMsQ0FBQztBQUNMLFdBQWEsdUJBQWMsdUJBQXVCLElBQUk7QUFBQSxFQUMxRDs7O0FHdEdBLE1BQU9DLG1CQUFRLGNBQWNDLFlBQVcsTUFBTTs7O0EvREQ5QyxNQUFJLGlCQUFpQixTQUFVLE9BQU87QUFDbEMsV0FBYSx1QkFBY0Msa0JBQVMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQUEsRUFDM0Q7QUFDTyxNQUFJQyxXQUFnQixvQkFBVyxTQUFVLE9BQU8sS0FBSztBQUFFLFdBQWEsdUJBQWMsU0FBYyxTQUFTLENBQUMsR0FBRyxPQUFPLEVBQUUsS0FBVSxTQUFTLGVBQWUsQ0FBQyxDQUFDO0FBQUEsRUFBRyxDQUFDOzs7QUZQckssV0FBU0MsVUFBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxVQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLE1BQUlFLGVBQVksQ0FBQyxZQUFZLHdCQUF3QixZQUFZLGVBQWUsZUFBZSxZQUFZO0FBRTNHLFdBQVNDLFVBQVFDLFNBQVEsZ0JBQWdCO0FBQUUsUUFBSUMsUUFBTyxPQUFPLEtBQUtELE9BQU07QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxVQUFVLE9BQU8sc0JBQXNCQSxPQUFNO0FBQUcsVUFBSSxnQkFBZ0I7QUFBRSxrQkFBVSxRQUFRLE9BQU8sU0FBVSxLQUFLO0FBQUUsaUJBQU8sT0FBTyx5QkFBeUJBLFNBQVEsR0FBRyxFQUFFO0FBQUEsUUFBWSxDQUFDO0FBQUEsTUFBRztBQUFFLE1BQUFDLE1BQUssS0FBSyxNQUFNQSxPQUFNLE9BQU87QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXhWLFdBQVNDLGdCQUFjLFFBQVE7QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsVUFBSSxTQUFTLFVBQVUsQ0FBQyxLQUFLLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFVBQUksSUFBSSxHQUFHO0FBQUUsUUFBQUgsVUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxVQUFBSSxrQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRyxXQUFXLE9BQU8sMkJBQTJCO0FBQUUsZUFBTyxpQkFBaUIsUUFBUSxPQUFPLDBCQUEwQixNQUFNLENBQUM7QUFBQSxNQUFHLE9BQU87QUFBRSxRQUFBSixVQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxpQkFBTyxlQUFlLFFBQVEsS0FBSyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFcmhCLFdBQVNLLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBRWxULFdBQVNDLGlCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxtQkFBa0IsUUFBUSxPQUFPO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUFFLFVBQUksYUFBYSxNQUFNLENBQUM7QUFBRyxpQkFBVyxhQUFhLFdBQVcsY0FBYztBQUFPLGlCQUFXLGVBQWU7QUFBTSxVQUFJLFdBQVc7QUFBWSxtQkFBVyxXQUFXO0FBQU0sYUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUU1VCxXQUFTQyxjQUFhLGFBQWEsWUFBWSxhQUFhO0FBQUUsUUFBSTtBQUFZLE1BQUFELG1CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUFHLFFBQUk7QUFBYSxNQUFBQSxtQkFBa0IsYUFBYSxXQUFXO0FBQUcsV0FBTztBQUFBLEVBQWE7QUFFdE4sV0FBU0UsV0FBVSxVQUFVLFlBQVk7QUFBRSxRQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUFFLFlBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLElBQUc7QUFBRSxhQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFHLFFBQUk7QUFBWSxNQUFBQyxpQkFBZ0IsVUFBVSxVQUFVO0FBQUEsRUFBRztBQUVoWSxXQUFTQSxpQkFBZ0IsR0FBRyxHQUFHO0FBQUUsSUFBQUEsbUJBQWtCLE9BQU8sa0JBQWtCLFNBQVNBLGtCQUFnQkMsSUFBR0MsSUFBRztBQUFFLE1BQUFELEdBQUUsWUFBWUM7QUFBRyxhQUFPRDtBQUFBLElBQUc7QUFBRyxXQUFPRCxpQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFBRztBQUV6SyxXQUFTRyxjQUFhLFNBQVM7QUFBRSxRQUFJLDRCQUE0QkMsMkJBQTBCO0FBQUcsV0FBTyxTQUFTLHVCQUF1QjtBQUFFLFVBQUksUUFBUUMsaUJBQWdCLE9BQU8sR0FBRztBQUFRLFVBQUksMkJBQTJCO0FBQUUsWUFBSSxZQUFZQSxpQkFBZ0IsSUFBSSxFQUFFO0FBQWEsaUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFBRyxPQUFPO0FBQUUsaUJBQVMsTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBRSxhQUFPQyw0QkFBMkIsTUFBTSxNQUFNO0FBQUEsSUFBRztBQUFBLEVBQUc7QUFFeGEsV0FBU0EsNEJBQTJCQyxPQUFNLE1BQU07QUFBRSxRQUFJLFNBQVNyQixVQUFRLElBQUksTUFBTSxZQUFZLE9BQU8sU0FBUyxhQUFhO0FBQUUsYUFBTztBQUFBLElBQU0sV0FBVyxTQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksVUFBVSwwREFBMEQ7QUFBQSxJQUFHO0FBQUUsV0FBT3NCLHdCQUF1QkQsS0FBSTtBQUFBLEVBQUc7QUFFL1IsV0FBU0Msd0JBQXVCRCxPQUFNO0FBQUUsUUFBSUEsVUFBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLGVBQWUsMkRBQTJEO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUVySyxXQUFTSCw2QkFBNEI7QUFBRSxRQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGFBQU87QUFBTyxRQUFJLFFBQVEsVUFBVTtBQUFNLGFBQU87QUFBTyxRQUFJLE9BQU8sVUFBVTtBQUFZLGFBQU87QUFBTSxRQUFJO0FBQUUsY0FBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxDQUFDLEdBQUcsV0FBWTtBQUFBLE1BQUMsQ0FBQyxDQUFDO0FBQUcsYUFBTztBQUFBLElBQU0sU0FBUyxHQUFHO0FBQUUsYUFBTztBQUFBLElBQU87QUFBQSxFQUFFO0FBRXhVLFdBQVNDLGlCQUFnQixHQUFHO0FBQUUsSUFBQUEsbUJBQWtCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLFNBQVNBLGtCQUFnQkosSUFBRztBQUFFLGFBQU9BLEdBQUUsYUFBYSxPQUFPLGVBQWVBLEVBQUM7QUFBQSxJQUFHO0FBQUcsV0FBT0ksaUJBQWdCLENBQUM7QUFBQSxFQUFHO0FBRTVNLFdBQVNaLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBY3pNLE1BQUksZUFBNEIseUJBQVUsWUFBWTtBQUMzRCxJQUFBTSxXQUFVVSxlQUFjLFVBQVU7QUFFbEMsUUFBSSxTQUFTTixjQUFhTSxhQUFZO0FBRXRDLGFBQVNBLGdCQUFlO0FBQ3RCLFVBQUk7QUFFSixNQUFBYixpQkFBZ0IsTUFBTWEsYUFBWTtBQUVsQyxlQUFTLE9BQU8sVUFBVSxRQUFRLE9BQU8sSUFBSSxNQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsT0FBTyxNQUFNLFFBQVE7QUFDdkYsYUFBSyxJQUFJLElBQUksVUFBVSxJQUFJO0FBQUEsTUFDN0I7QUFFQSxjQUFRLE9BQU8sS0FBSyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFFckQsTUFBQWhCLGtCQUFnQmUsd0JBQXVCLEtBQUssR0FBRyxTQUFTO0FBQUEsUUFDdEQsd0JBQXdCO0FBQUEsTUFDMUIsQ0FBQztBQUVELE1BQUFmLGtCQUFnQmUsd0JBQXVCLEtBQUssR0FBRyx3QkFBd0IsSUFBSTtBQUUzRSxNQUFBZixrQkFBZ0JlLHdCQUF1QixLQUFLLEdBQUcsb0JBQW9CLEtBQUs7QUFFeEUsTUFBQWYsa0JBQWdCZSx3QkFBdUIsS0FBSyxHQUFHLG1CQUFtQixTQUFVLGNBQWM7QUFDeEYsWUFBSSxDQUFDO0FBQWM7QUFDbkIsWUFBSUUsUUFBTywyQkFBMkIsWUFBWTtBQUNsRCxZQUFJLENBQUNBO0FBQU07QUFFWCxRQUFBQSxNQUFLLGFBQWEsa0JBQWtCLE1BQU07QUFBQSxNQUM1QyxDQUFDO0FBRUQsTUFBQWpCLGtCQUFnQmUsd0JBQXVCLEtBQUssR0FBRyxvQkFBb0IsU0FBVSxHQUFHO0FBQzlFLGNBQU0sc0JBQXNCO0FBSTVCLG1CQUFXLFdBQVk7QUFDckIsY0FBSSx1QkFBdUI7QUFFM0Isa0JBQVEseUJBQXlCLGNBQWMsTUFBTSxPQUFPLG9CQUFvQixRQUFRLDBCQUEwQixTQUFTLFNBQVMsc0JBQXNCLEtBQUssYUFBYSxDQUFDO0FBQUEsUUFDL0ssQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELE1BQUFmLGtCQUFnQmUsd0JBQXVCLEtBQUssR0FBRyxzQkFBc0IsV0FBWTtBQUMvRSxpQkFBUyxpQkFBaUIsV0FBVyxNQUFNLGdCQUFnQjtBQUMzRCxpQkFBUyxpQkFBaUIsWUFBWSxNQUFNLGdCQUFnQjtBQUFBLE1BQzlELENBQUM7QUFFRCxNQUFBZixrQkFBZ0JlLHdCQUF1QixLQUFLLEdBQUcseUJBQXlCLFdBQVk7QUFDbEYsaUJBQVMsb0JBQW9CLFdBQVcsTUFBTSxnQkFBZ0I7QUFDOUQsaUJBQVMsb0JBQW9CLFlBQVksTUFBTSxnQkFBZ0I7QUFBQSxNQUNqRSxDQUFDO0FBRUQsTUFBQWYsa0JBQWdCZSx3QkFBdUIsS0FBSyxHQUFHLHNCQUFzQixTQUFVLE9BQU87QUFDcEYsWUFBSSxlQUFlLE1BQU0sT0FDckIsaUJBQWlCLGFBQWEsZ0JBQzlCLHVCQUF1QixhQUFhLHNCQUNwQyxpQkFBaUIsYUFBYTtBQUVsQyxZQUFJLHNCQUFzQjtBQUN4QixnQkFBTSxTQUFTO0FBQUEsWUFDYix3QkFBd0I7QUFBQSxVQUMxQixDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUksZ0JBQWdCO0FBQ2xCLDJCQUFpQixNQUFNLG1CQUFtQixJQUFJLGVBQWUsS0FBSztBQUFBLFFBQ3BFO0FBQUEsTUFDRixDQUFDO0FBRUQsYUFBTztBQUFBLElBQ1Q7QUFFQSxJQUFBVixjQUFhVyxlQUFjLENBQUM7QUFBQSxNQUMxQixLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsb0JBQW9CO0FBQ2xDLGFBQUssZ0JBQWdCLEtBQUssTUFBTSxZQUFZO0FBQUEsTUFDOUM7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxtQkFBbUIsV0FBVztBQUM1QyxZQUFJLFVBQVUsYUFBYSxRQUFRLEtBQUssTUFBTSxhQUFhLE9BQU87QUFFaEUsZUFBSyxTQUFTO0FBQUEsWUFDWix3QkFBd0I7QUFBQSxVQUMxQixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyx1QkFBdUI7QUFDckMsYUFBSyxzQkFBc0I7QUFBQSxNQUM3QjtBQUFBO0FBQUEsSUFFRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVNFLFVBQVM7QUFDdkIsWUFBSSxlQUFlLEtBQUssT0FDcEIsV0FBVyxhQUFhLFVBQ3hCLHVCQUF1QixhQUFhLHNCQUNwQyxXQUFXLGFBQWEsVUFDeEIsY0FBYyxhQUFhLGFBQzNCLGNBQWMsYUFBYSxhQUMzQixhQUFhLGFBQWEsWUFDMUIsT0FBT2pCLDRCQUF5QixjQUFjTixZQUFTO0FBRTNELFlBQUksYUFBYSxZQUFZLEtBQUssTUFBTTtBQUV4QyxZQUFJLGVBQWVJLGdCQUFjQSxnQkFBYztBQUFBLFVBQzdDO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLFNBQVMsQ0FBQztBQUFBLFFBQ1osR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHO0FBQUEsVUFDWixnQkFBZ0IsS0FBSztBQUFBLFFBQ3ZCLENBQUM7QUFFRCxlQUFPLElBQWNvQixVQUFTLGNBQWMsUUFBUTtBQUFBLE1BQ3REO0FBQUEsSUFDRixDQUFDLENBQUM7QUFFRixXQUFPSDtBQUFBLEVBQ1QsRUFBRSx5QkFBUztBQUVYLEVBQUFoQixrQkFBZ0IsY0FBYyxnQkFBZ0I7QUFBQSxJQUM1QyxzQkFBc0I7QUFBQSxJQUN0QixVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsSUFDYixhQUFhO0FBQUEsSUFDYixZQUFZO0FBQUEsRUFDZCxDQUFDO0FBRUQsZUFBYSxZQUFZO0FBQUEsSUFDdkIsV0FBVyxvQkFBQW9CLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU01QixnQkFBZ0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUsxQixzQkFBc0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtoQyxjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsT0FBTyxvQkFBQUEsUUFBVTtBQUFBLElBQ2pCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQSxFQUN0Qjs7O0FrRTFKQSxNQUFBQyxzQkFBc0I7QUFtQnRCLE1BQUFDLGtCQUFpQztBQUNqQyxNQUFBQyxzQkFBdUI7OztBQ3BDdkIsTUFBQUMsa0JBQTBCO0FBL0IxQixXQUFTQyxVQUFRLEtBQUs7QUFBRTtBQUEyQixRQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sT0FBTyxhQUFhLFVBQVU7QUFBRSxNQUFBQSxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUcsT0FBTztBQUFFLE1BQUFELFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU9BLFFBQU8sT0FBTyxXQUFXLGNBQWNBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRztBQUFFLFdBQU9ELFVBQVEsR0FBRztBQUFBLEVBQUc7QUFFelgsV0FBU0UsVUFBUUMsU0FBUSxnQkFBZ0I7QUFBRSxRQUFJQyxRQUFPLE9BQU8sS0FBS0QsT0FBTTtBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLFVBQVUsT0FBTyxzQkFBc0JBLE9BQU07QUFBRyxVQUFJLGdCQUFnQjtBQUFFLGtCQUFVLFFBQVEsT0FBTyxTQUFVLEtBQUs7QUFBRSxpQkFBTyxPQUFPLHlCQUF5QkEsU0FBUSxHQUFHLEVBQUU7QUFBQSxRQUFZLENBQUM7QUFBQSxNQUFHO0FBQUUsTUFBQUMsTUFBSyxLQUFLLE1BQU1BLE9BQU0sT0FBTztBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFeFYsV0FBU0MsZ0JBQWMsUUFBUTtBQUFFLGFBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxVQUFJLFNBQVMsVUFBVSxDQUFDLEtBQUssT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQUcsVUFBSSxJQUFJLEdBQUc7QUFBRSxRQUFBSCxVQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksRUFBRSxRQUFRLFNBQVUsS0FBSztBQUFFLFVBQUFJLGtCQUFnQixRQUFRLEtBQUssT0FBTyxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHLFdBQVcsT0FBTywyQkFBMkI7QUFBRSxlQUFPLGlCQUFpQixRQUFRLE9BQU8sMEJBQTBCLE1BQU0sQ0FBQztBQUFBLE1BQUcsT0FBTztBQUFFLFFBQUFKLFVBQVEsT0FBTyxNQUFNLENBQUMsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUFFLGlCQUFPLGVBQWUsUUFBUSxLQUFLLE9BQU8seUJBQXlCLFFBQVEsR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUVyaEIsV0FBU0ssa0JBQWdCLFVBQVUsYUFBYTtBQUFFLFFBQUksRUFBRSxvQkFBb0IsY0FBYztBQUFFLFlBQU0sSUFBSSxVQUFVLG1DQUFtQztBQUFBLElBQUc7QUFBQSxFQUFFO0FBRXhKLFdBQVNDLFdBQVUsVUFBVSxZQUFZO0FBQUUsUUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFBRSxZQUFNLElBQUksVUFBVSxvREFBb0Q7QUFBQSxJQUFHO0FBQUUsYUFBUyxZQUFZLE9BQU8sT0FBTyxjQUFjLFdBQVcsV0FBVyxFQUFFLGFBQWEsRUFBRSxPQUFPLFVBQVUsVUFBVSxNQUFNLGNBQWMsS0FBSyxFQUFFLENBQUM7QUFBRyxRQUFJO0FBQVksTUFBQUMsa0JBQWdCLFVBQVUsVUFBVTtBQUFBLEVBQUc7QUFFaFksV0FBU0Esa0JBQWdCLEdBQUcsR0FBRztBQUFFLElBQUFBLG9CQUFrQixPQUFPLGtCQUFrQixTQUFTQSxrQkFBZ0JDLElBQUdDLElBQUc7QUFBRSxNQUFBRCxHQUFFLFlBQVlDO0FBQUcsYUFBT0Q7QUFBQSxJQUFHO0FBQUcsV0FBT0Qsa0JBQWdCLEdBQUcsQ0FBQztBQUFBLEVBQUc7QUFFekssV0FBU0csY0FBYSxTQUFTO0FBQUUsUUFBSSw0QkFBNEJDLDJCQUEwQjtBQUFHLFdBQU8sU0FBUyx1QkFBdUI7QUFBRSxVQUFJLFFBQVFDLGlCQUFnQixPQUFPLEdBQUc7QUFBUSxVQUFJLDJCQUEyQjtBQUFFLFlBQUksWUFBWUEsaUJBQWdCLElBQUksRUFBRTtBQUFhLGlCQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVcsU0FBUztBQUFBLE1BQUcsT0FBTztBQUFFLGlCQUFTLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUFHO0FBQUUsYUFBT0MsNEJBQTJCLE1BQU0sTUFBTTtBQUFBLElBQUc7QUFBQSxFQUFHO0FBRXhhLFdBQVNBLDRCQUEyQkMsT0FBTSxNQUFNO0FBQUUsUUFBSSxTQUFTaEIsVUFBUSxJQUFJLE1BQU0sWUFBWSxPQUFPLFNBQVMsYUFBYTtBQUFFLGFBQU87QUFBQSxJQUFNLFdBQVcsU0FBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLFVBQVUsMERBQTBEO0FBQUEsSUFBRztBQUFFLFdBQU9pQix3QkFBdUJELEtBQUk7QUFBQSxFQUFHO0FBRS9SLFdBQVNDLHdCQUF1QkQsT0FBTTtBQUFFLFFBQUlBLFVBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxlQUFlLDJEQUEyRDtBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFckssV0FBU0gsNkJBQTRCO0FBQUUsUUFBSSxPQUFPLFlBQVksZUFBZSxDQUFDLFFBQVE7QUFBVyxhQUFPO0FBQU8sUUFBSSxRQUFRLFVBQVU7QUFBTSxhQUFPO0FBQU8sUUFBSSxPQUFPLFVBQVU7QUFBWSxhQUFPO0FBQU0sUUFBSTtBQUFFLGNBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxVQUFVLFNBQVMsQ0FBQyxHQUFHLFdBQVk7QUFBQSxNQUFDLENBQUMsQ0FBQztBQUFHLGFBQU87QUFBQSxJQUFNLFNBQVMsR0FBRztBQUFFLGFBQU87QUFBQSxJQUFPO0FBQUEsRUFBRTtBQUV4VSxXQUFTQyxpQkFBZ0IsR0FBRztBQUFFLElBQUFBLG1CQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQixTQUFTQSxrQkFBZ0JKLElBQUc7QUFBRSxhQUFPQSxHQUFFLGFBQWEsT0FBTyxlQUFlQSxFQUFDO0FBQUEsSUFBRztBQUFHLFdBQU9JLGlCQUFnQixDQUFDO0FBQUEsRUFBRztBQUU1TSxXQUFTUixrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQVd6TSxNQUFJLHNCQUFtQyx5QkFBVSxjQUFjO0FBQ3BFLElBQUFFLFdBQVVVLHNCQUFxQixZQUFZO0FBRTNDLFFBQUksU0FBU04sY0FBYU0sb0JBQW1CO0FBRTdDLGFBQVNBLHVCQUFzQjtBQUM3QixVQUFJO0FBRUosTUFBQVgsa0JBQWdCLE1BQU1XLG9CQUFtQjtBQUV6QyxlQUFTLE9BQU8sVUFBVSxRQUFRLE9BQU8sSUFBSSxNQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsT0FBTyxNQUFNLFFBQVE7QUFDdkYsYUFBSyxJQUFJLElBQUksVUFBVSxJQUFJO0FBQUEsTUFDN0I7QUFFQSxjQUFRLE9BQU8sS0FBSyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFFckQsTUFBQVosa0JBQWdCVyx3QkFBdUIsS0FBSyxHQUFHLFFBQVEscUJBQXFCO0FBRTVFLE1BQUFYLGtCQUFnQlcsd0JBQXVCLEtBQUssR0FBRyxjQUFjLFNBQVUsU0FBUyxVQUFVO0FBQ3hGLGNBQU0sTUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFBLE1BQzFDLENBQUM7QUFFRCxNQUFBWCxrQkFBZ0JXLHdCQUF1QixLQUFLLEdBQUcsZ0JBQWdCLFdBQVk7QUFDekUsWUFBSSxZQUFZLE1BQU07QUFDdEIsY0FBTSxXQUFXLHFCQUFxQixXQUFXLE1BQU0sTUFBTSxpQkFBaUIsTUFBTSxVQUFVO0FBQUEsTUFDaEcsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBT0M7QUFBQSxFQUNULEVBQUUsV0FBVztBQUViLE1BQUksdUJBQXVCLFNBQVNDLHNCQUFxQkMsT0FBTSxrQkFBa0IsVUFBVTtBQU16RixRQUFJLGtCQUFrQmYsZ0JBQWMsQ0FBQyxHQUFHLGdCQUFnQjtBQUV4RCxRQUFJLGtCQUFrQixnQkFBZ0IsZUFBZSxtQkFBbUIsS0FBSyxnQkFBZ0IsZUFBZSxpQkFBaUI7QUFFN0gsUUFBSSxtQkFBbUIsQ0FBQyxnQkFBZ0IsZUFBZSxZQUFZLEdBQUc7QUFDcEUsc0JBQWdCLGFBQWE7QUFBQSxJQUMvQjtBQUVBLFFBQUksV0FBVyxJQUFJLGlCQUFpQixRQUFRO0FBQzVDLGFBQVMsUUFBUWUsT0FBTSxlQUFlO0FBQ3RDLFdBQU87QUFBQSxFQUNUOzs7QUNoREEsTUFBQUMsa0JBQWtEO0FBQ2xELE1BQUFDLHNCQUFzQjtBQXBDdEIsV0FBU0MsVUFBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxVQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLFdBQVNFLFVBQVFDLFNBQVEsZ0JBQWdCO0FBQUUsUUFBSUMsUUFBTyxPQUFPLEtBQUtELE9BQU07QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxVQUFVLE9BQU8sc0JBQXNCQSxPQUFNO0FBQUcsVUFBSSxnQkFBZ0I7QUFBRSxrQkFBVSxRQUFRLE9BQU8sU0FBVSxLQUFLO0FBQUUsaUJBQU8sT0FBTyx5QkFBeUJBLFNBQVEsR0FBRyxFQUFFO0FBQUEsUUFBWSxDQUFDO0FBQUEsTUFBRztBQUFFLE1BQUFDLE1BQUssS0FBSyxNQUFNQSxPQUFNLE9BQU87QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXhWLFdBQVNDLGdCQUFjLFFBQVE7QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsVUFBSSxTQUFTLFVBQVUsQ0FBQyxLQUFLLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFVBQUksSUFBSSxHQUFHO0FBQUUsUUFBQUgsVUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxVQUFBSSxrQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRyxXQUFXLE9BQU8sMkJBQTJCO0FBQUUsZUFBTyxpQkFBaUIsUUFBUSxPQUFPLDBCQUEwQixNQUFNLENBQUM7QUFBQSxNQUFHLE9BQU87QUFBRSxRQUFBSixVQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxpQkFBTyxlQUFlLFFBQVEsS0FBSyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFcmhCLFdBQVNLLGtCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxtQkFBa0IsUUFBUSxPQUFPO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUFFLFVBQUksYUFBYSxNQUFNLENBQUM7QUFBRyxpQkFBVyxhQUFhLFdBQVcsY0FBYztBQUFPLGlCQUFXLGVBQWU7QUFBTSxVQUFJLFdBQVc7QUFBWSxtQkFBVyxXQUFXO0FBQU0sYUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUU1VCxXQUFTQyxjQUFhLGFBQWEsWUFBWSxhQUFhO0FBQUUsUUFBSTtBQUFZLE1BQUFELG1CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUFHLFFBQUk7QUFBYSxNQUFBQSxtQkFBa0IsYUFBYSxXQUFXO0FBQUcsV0FBTztBQUFBLEVBQWE7QUFFdE4sV0FBU0UsWUFBVSxVQUFVLFlBQVk7QUFBRSxRQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUFFLFlBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLElBQUc7QUFBRSxhQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFHLFFBQUk7QUFBWSxNQUFBQyxrQkFBZ0IsVUFBVSxVQUFVO0FBQUEsRUFBRztBQUVoWSxXQUFTQSxrQkFBZ0IsR0FBRyxHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8sa0JBQWtCLFNBQVNBLGtCQUFnQkMsSUFBR0MsSUFBRztBQUFFLE1BQUFELEdBQUUsWUFBWUM7QUFBRyxhQUFPRDtBQUFBLElBQUc7QUFBRyxXQUFPRCxrQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFBRztBQUV6SyxXQUFTRyxlQUFhLFNBQVM7QUFBRSxRQUFJLDRCQUE0QkMsNEJBQTBCO0FBQUcsV0FBTyxTQUFTLHVCQUF1QjtBQUFFLFVBQUksUUFBUUMsa0JBQWdCLE9BQU8sR0FBRztBQUFRLFVBQUksMkJBQTJCO0FBQUUsWUFBSSxZQUFZQSxrQkFBZ0IsSUFBSSxFQUFFO0FBQWEsaUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFBRyxPQUFPO0FBQUUsaUJBQVMsTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBRSxhQUFPQyw2QkFBMkIsTUFBTSxNQUFNO0FBQUEsSUFBRztBQUFBLEVBQUc7QUFFeGEsV0FBU0EsNkJBQTJCQyxPQUFNLE1BQU07QUFBRSxRQUFJLFNBQVNsQixVQUFRLElBQUksTUFBTSxZQUFZLE9BQU8sU0FBUyxhQUFhO0FBQUUsYUFBTztBQUFBLElBQU0sV0FBVyxTQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksVUFBVSwwREFBMEQ7QUFBQSxJQUFHO0FBQUUsV0FBT21CLHlCQUF1QkQsS0FBSTtBQUFBLEVBQUc7QUFFL1IsV0FBU0MseUJBQXVCRCxPQUFNO0FBQUUsUUFBSUEsVUFBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLGVBQWUsMkRBQTJEO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUVySyxXQUFTSCw4QkFBNEI7QUFBRSxRQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGFBQU87QUFBTyxRQUFJLFFBQVEsVUFBVTtBQUFNLGFBQU87QUFBTyxRQUFJLE9BQU8sVUFBVTtBQUFZLGFBQU87QUFBTSxRQUFJO0FBQUUsY0FBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxDQUFDLEdBQUcsV0FBWTtBQUFBLE1BQUMsQ0FBQyxDQUFDO0FBQUcsYUFBTztBQUFBLElBQU0sU0FBUyxHQUFHO0FBQUUsYUFBTztBQUFBLElBQU87QUFBQSxFQUFFO0FBRXhVLFdBQVNDLGtCQUFnQixHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLFNBQVNBLGtCQUFnQkosSUFBRztBQUFFLGFBQU9BLEdBQUUsYUFBYSxPQUFPLGVBQWVBLEVBQUM7QUFBQSxJQUFHO0FBQUcsV0FBT0ksa0JBQWdCLENBQUM7QUFBQSxFQUFHO0FBRTVNLFdBQVNWLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBWXpNLE1BQUksMEJBQXVDLHlCQUFVLFlBQVk7QUFDdEUsSUFBQUksWUFBVVUsMEJBQXlCLFVBQVU7QUFFN0MsUUFBSSxTQUFTTixlQUFhTSx3QkFBdUI7QUFZakQsYUFBU0EseUJBQXdCLE9BQU87QUFDdEMsVUFBSTtBQUVKLE1BQUFiLGtCQUFnQixNQUFNYSx3QkFBdUI7QUFFN0MsY0FBUSxPQUFPLEtBQUssTUFBTSxLQUFLO0FBaUIvQixNQUFBZCxrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsTUFBTSxNQUFNO0FBRTNELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxtQkFBbUIsTUFBTTtBQUV4RSxNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsa0JBQWtCLFNBQVUsR0FBRztBQUM1RSxZQUFJLGNBQWMsTUFBTSxPQUNwQixhQUFhLFlBQVksWUFDekIsaUJBQWlCLFlBQVk7QUFFakMsWUFBSSxZQUFZO0FBQ2QsZ0JBQU0sa0JBQWtCLENBQUM7QUFDekI7QUFBQSxRQUNGO0FBRUEsWUFBSSxRQUFRO0FBRVosWUFBSSxNQUFNLGtCQUFrQixNQUFNLGVBQWUsU0FBUyxNQUFNLEVBQUUsS0FBSyxNQUFNLGdCQUFnQixTQUFTLE1BQU0sRUFBRSxHQUFHO0FBQy9HLGdCQUFNLGtCQUFrQixDQUFDO0FBQ3pCO0FBQUEsUUFDRjtBQUVBLGNBQU0sa0JBQWtCLENBQUM7QUFDekIsZUFBTyxlQUFlLEtBQUs7QUFBQSxNQUM3QixDQUFDO0FBRUQsTUFBQWIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLGdCQUFnQixTQUFVLE9BQU8sSUFBSTtBQUdsRixZQUFJLE1BQU0sWUFBWSxlQUFlLGdCQUFnQixHQUFHO0FBQ3RELGdCQUFNLFlBQVksZUFBZSxLQUFLLE1BQU0sRUFBRTtBQUFBLFFBQ2hELE9BQU87QUFDTCxnQkFBTSxZQUFZLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtBQUFBLFFBQzlDO0FBRUEsWUFBSTtBQUFJLGFBQUcsS0FBSztBQUFBLE1BQ2xCLENBQUM7QUFFRCxNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsb0JBQW9CLFNBQVUsT0FBTztBQUNsRixjQUFNLGFBQWEsT0FBTyxTQUFVLEdBQUc7QUFDckMsY0FBSSxjQUFjLEVBQUU7QUFDcEIsZ0JBQU0sa0JBQWtCLFlBQVk7QUFDcEMsY0FBSSxNQUFNLE1BQU07QUFBYSxrQkFBTSxNQUFNLFlBQVksQ0FBQztBQUN0RCxjQUFJLE1BQU0sTUFBTTtBQUFjLGtCQUFNLE1BQU0sYUFBYSxDQUFDO0FBQUEsUUFDMUQsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxrQkFBa0IsU0FBVSxPQUFPO0FBQ2hGLGNBQU0sYUFBYSxPQUFPLFNBQVUsR0FBRztBQUNyQyxjQUFJLE1BQU0sTUFBTTtBQUFXLGtCQUFNLE1BQU0sVUFBVSxDQUFDO0FBQ2xELGNBQUksTUFBTSxNQUFNO0FBQVksa0JBQU0sTUFBTSxXQUFXLENBQUM7QUFBQSxRQUN0RCxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsWUFBTSxLQUFLLGdCQUFnQixFQUFFO0FBQzdCLFlBQU0sa0JBQWtCLENBQUM7QUFDekIsYUFBTztBQUFBLElBQ1Q7QUFFQSxJQUFBVixjQUFhVywwQkFBeUIsQ0FBQztBQUFBLE1BQ3JDLEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxvQkFBb0I7QUFDbEMsaUJBQVMsaUJBQWlCLFdBQVcsS0FBSyxjQUFjO0FBQ3hELGlCQUFTLGlCQUFpQixZQUFZLEtBQUssY0FBYztBQUFBLE1BQzNEO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsdUJBQXVCO0FBQ3JDLGlCQUFTLG9CQUFvQixXQUFXLEtBQUssY0FBYztBQUMzRCxpQkFBUyxvQkFBb0IsWUFBWSxLQUFLLGNBQWM7QUFBQSxNQUM5RDtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTQyxVQUFTO0FBQ3ZCLFlBQUksUUFBUWhCLGdCQUFjQSxnQkFBYyxDQUFDLEdBQUcsS0FBSyxNQUFNLFNBQVMsS0FBSyxHQUFHO0FBQUEsVUFDdEUsYUFBYSxLQUFLO0FBQUEsVUFDbEIsY0FBYyxLQUFLO0FBQUEsVUFDbkIsV0FBVyxLQUFLO0FBQUEsVUFDaEIsWUFBWSxLQUFLO0FBQUEsUUFDbkIsQ0FBQztBQUVELFlBQUksUUFBUSx5QkFBUyxLQUFLLEtBQUssTUFBTSxRQUFRO0FBQzdDLGVBQW9CLGtEQUFhLE9BQU8sS0FBSztBQUFBLE1BQy9DO0FBQUEsSUFDRixDQUFDLENBQUM7QUFFRixXQUFPZTtBQUFBLEVBQ1QsRUFBRSx5QkFBUztBQUNYLDBCQUF3QixZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJbEMsVUFBVSxvQkFBQUUsUUFBVSxRQUFRO0FBQUEsSUFDNUIsZ0JBQWdCLG9CQUFBQSxRQUFVLEtBQUs7QUFBQSxJQUMvQixZQUFZLG9CQUFBQSxRQUFVO0FBQUEsSUFDdEIsYUFBYSxvQkFBQUEsUUFBVTtBQUFBLElBQ3ZCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsWUFBWSxvQkFBQUEsUUFBVTtBQUFBLEVBQ3hCOzs7QUM5SkEsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjs7O0FDUGYsTUFBSSxtQkFBbUI7QUFDdkIsTUFBSSx3QkFBd0IsU0FBU0MsdUJBQXNCLGlCQUFpQjtBQUNqRixRQUFJLFdBQVcsZ0JBQWdCO0FBRS9CLFFBQUksY0FBYyxtQkFBbUIsaUJBQWlCLE9BQU87QUFDN0QsUUFBSSxZQUFZLFNBQVMsS0FBSyxnQkFBZ0I7QUFDOUMsV0FBTztBQUFBO0FBQUEsTUFFTCxpQkFBOEIsb0JBQUksc0JBQXNCLGVBQWUsR0FBRyxDQUFDLEdBQUcsMENBQTBDLGVBQWUsR0FBRyxDQUFDLEdBQUcsMkJBQTJCO0FBQUE7QUFBQSxNQUV6SyxLQUFrQixvQkFBSSxhQUFhLFNBQVMsUUFBUSxNQUFNLFdBQVcsS0FBSyxTQUFTLGFBQWEsR0FBRyxLQUFLLFdBQVcsdUJBQXVCLFNBQVMsY0FBYyxHQUFHLEtBQUssV0FBVyx1QkFBdUIsU0FBUyxZQUFZLEdBQUcsS0FBSyxXQUFXLFdBQVcsYUFBYSxlQUFlO0FBQUEsTUFDMVIsUUFBcUIsb0JBQUksYUFBYSxTQUFTLEtBQUssTUFBTSxXQUFXLEtBQUssU0FBUyxhQUFhLEdBQUcsS0FBSyxXQUFXLHVCQUF1QixTQUFTLGNBQWMsR0FBRyxLQUFLLFdBQVcsdUJBQXVCLFNBQVMsZUFBZSxHQUFHLEtBQUssV0FBVyxXQUFXLGFBQWEsa0JBQWtCO0FBQUEsTUFDaFMsTUFBbUIsb0JBQUksYUFBYSxTQUFTLEtBQUssU0FBUyxTQUFTLE9BQU8sTUFBTSxXQUFXLEtBQUssU0FBUyxZQUFZLEdBQUcsS0FBSyxXQUFXLHVCQUF1QixTQUFTLGVBQWUsR0FBRyxLQUFLLFdBQVcsdUJBQXVCLFNBQVMsYUFBYSxHQUFHLEtBQUssV0FBVyxXQUFXLGFBQWEsZ0JBQWdCO0FBQUEsTUFDblQsT0FBb0Isb0JBQUksYUFBYSxTQUFTLEtBQUssU0FBUyxTQUFTLE1BQU0sTUFBTSxXQUFXLEtBQUssU0FBUyxZQUFZLEdBQUcsS0FBSyxXQUFXLHVCQUF1QixTQUFTLGVBQWUsR0FBRyxLQUFLLFdBQVcsdUJBQXVCLFNBQVMsY0FBYyxHQUFHLEtBQUssV0FBVyxXQUFXLGFBQWEsaUJBQWlCO0FBQUEsSUFDdlQ7QUFBQSxFQUNGOzs7QUR4QkEsTUFBSUMsZUFBWSxDQUFDLFlBQVksVUFBVTtBQUV2QyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWUzUyxNQUFJLGtCQUFrQixTQUFTQyxpQkFBZ0JDLFFBQU07QUFDMUQsUUFBSSxXQUFXQSxPQUFLLFVBQ2hCQyxZQUFXRCxPQUFLLFVBQ2hCLE9BQU9FLDRCQUF5QkYsUUFBTUcsWUFBUztBQUVuRCxRQUFJLFdBQVcsWUFBWTtBQUMzQixRQUFJQyxVQUFTLHNCQUFzQixRQUFRO0FBQzNDLFFBQUksWUFBWSxDQUFDQSxRQUFPLGlCQUFpQkEsUUFBT0gsU0FBUSxDQUFDO0FBQ3pELFdBQU8sSUFBYyxPQUFPSSxZQUFTO0FBQUEsTUFDbkMsc0JBQXNCSjtBQUFBLE1BQ3RCLEtBQUs7QUFBQSxJQUNQLEdBQUcsSUFBSSxHQUFHLFFBQVE7QUFBQSxFQUNwQjtBQUNBLGtCQUFnQixZQUFZO0FBQUEsSUFDMUIsV0FBVyxvQkFBQUssUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM1QixVQUFVLG9CQUFBQSxRQUFVLElBQUk7QUFBQSxFQUMxQjs7O0FFOUJPLE1BQUksbUJBQW1CLFNBQVNDLG9CQUFtQjtBQUN4RCxXQUFPO0FBQUE7QUFBQSxNQUVMLFlBQXlCLG9CQUFJLDRDQUE0QyxXQUFXLGFBQWEsTUFBTSxHQUFHLHFCQUFxQjtBQUFBLElBQ2pJO0FBQUEsRUFDRjs7O0FDYUEsTUFBQUMsa0JBQWlEO0FBQ2pELE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7OztBQ1p2QixNQUFBQyxrQkFBa0I7QUFDbEIsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1Qjs7O0FDbkJ2QixXQUFTQyxvQ0FBbUM7QUFBRSxXQUFPO0FBQUEsRUFBbU87QUFheFIsTUFBSUMsUUFBTyxRQUF3QztBQUFBLElBQ2pELE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxFQUNWLElBQUk7QUFBQSxJQUNGLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLFVBQVVEO0FBQUEsRUFDWjtBQUVBLE1BQUlFLFNBQVEsUUFBd0M7QUFBQSxJQUNsRCxNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsRUFDVixJQUFJO0FBQUEsSUFDRixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixVQUFVRjtBQUFBLEVBQ1o7QUFFTyxNQUFJLGlCQUFpQixTQUFTRyxnQkFBZSxpQkFBaUI7QUFDbkUsUUFBSSxXQUFXLGdCQUFnQjtBQUMvQixXQUFPO0FBQUE7QUFBQSxNQUVMLFVBQVVEO0FBQUEsTUFDVixNQUFNRDtBQUFBLE1BQ04sV0FBd0Isb0JBQUksVUFBVSxpQkFBaUIsR0FBRyxHQUFHLG9CQUFvQjtBQUFBLE1BQ2pGLFdBQXdCLG9CQUFJLFdBQVcsU0FBUyxPQUFPLE1BQU0sb0JBQW9CO0FBQUEsTUFDakYsUUFBUTtBQUFBLFFBQ04sTUFBbUIsb0JBQUksY0FBYztBQUFBLFFBQ3JDLEdBQWdCLG9CQUFJLGtCQUFrQixTQUFTLE9BQU8sT0FBTyxRQUFRLFlBQVk7QUFBQSxNQUNuRjtBQUFBO0FBQUEsTUFFQSxhQUEwQixvQkFBSSxlQUFlLDJCQUEyQixTQUFTLFVBQVUsTUFBTSxLQUFLLFNBQVMsVUFBVSxZQUFZLGVBQWUsU0FBUyxVQUFVLE1BQU0sS0FBSyxTQUFTLFVBQVUsWUFBWSx5Q0FBeUMsb0JBQW9CLE1BQU0sR0FBRyxzQkFBc0IsVUFBVSxpQkFBaUIsR0FBRyxHQUFHLGlFQUFpRTtBQUFBLElBQ2paO0FBQUEsRUFDRjs7O0FEOUNBLE1BQUlHLGVBQVksQ0FBQyxZQUFZLGFBQWEsZUFBZSxnQkFBZ0IsU0FBUyxhQUFhLGFBQWEsUUFBUSxZQUFZLFNBQVM7QUFFekksV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0Msa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUFFaE4sV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFvQmxULE1BQUksNEJBQTRCO0FBQUEsSUFDOUIsTUFBTTtBQUFBLElBQ04sR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLEVBQ0w7QUFFQSxNQUFJLFNBQVMsT0FBTyx5QkFBeUI7QUFJdEMsTUFBSSxXQUFXLFNBQVNDLFVBQVNDLFFBQU07QUFDNUMsUUFBSSxXQUFXQSxPQUFLLFVBQ2hCLFlBQVlBLE9BQUssV0FDakIsbUJBQW1CQSxPQUFLLGFBQ3hCLGNBQWMscUJBQXFCLFNBQVMsTUFBTSxrQkFDbEQsb0JBQW9CQSxPQUFLLGNBQ3pCLGVBQWUsc0JBQXNCLFNBQVMsTUFBTSxtQkFDcEQsYUFBYUEsT0FBSyxPQUNsQixRQUFRLGVBQWUsU0FBUyxVQUFVLFlBQzFDLGlCQUFpQkEsT0FBSyxXQUN0QixZQUFZLG1CQUFtQixTQUFTLE9BQU8sZ0JBQy9DLGlCQUFpQkEsT0FBSyxXQUN0QixZQUFZLG1CQUFtQixTQUFTLFFBQVEsZ0JBQ2hELFlBQVlBLE9BQUssTUFDakIsT0FBTyxjQUFjLFNBQVMsT0FBTyxXQUNyQyxXQUFXQSxPQUFLLFVBQ2hCLFVBQVVBLE9BQUssU0FDZixPQUFPQyw0QkFBeUJELFFBQU1FLFlBQVM7QUFFbkQsUUFBSSxXQUFXLFlBQVk7QUFFM0IsUUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLFVBQVU7QUFDNUMsUUFBSSxnQkFBZ0IsVUFBVSxXQUFXLFVBQVU7QUFDbkQsUUFBSUMsVUFBUyxlQUFlLFFBQVE7QUFDcEMsUUFBSSxZQUFZLENBQUNBLFFBQU8sVUFBVSxRQUFRQSxRQUFPLE1BQU1BLFFBQU8sT0FBTyxZQUFZLEdBQUcsaUJBQWlCLEVBQUUsV0FBVyxHQUFHLHlCQUF5QixFQUFFLEtBQUssR0FBRyxpQkFBaUIsY0FBYyxRQUFRQSxRQUFPLFdBQVcsaUJBQWlCLGNBQWMsUUFBUUEsUUFBTyxXQUFXLEtBQUssV0FBV0EsUUFBTyxXQUFXO0FBQzVTLFFBQUksY0FBVSxvQkFBQUMsU0FBVyxZQUFZLGFBQWEsT0FBTyxLQUFLLEdBQUdDLGtCQUFnQixDQUFDLEdBQUcsYUFBYSxPQUFPLDBCQUEwQixXQUFXLENBQUMsR0FBRywwQkFBMEIsV0FBVyxDQUFDLEdBQUcsU0FBUztBQUVwTSxRQUFJLEtBQUssV0FBVyxZQUFZLE9BQU87QUFDckMsYUFBTyxJQUFjLFVBQVVDLFlBQVM7QUFBQSxRQUN0QyxLQUFLO0FBQUEsUUFDTCxXQUFXO0FBQUEsUUFDWCxLQUFLO0FBQUEsTUFDUCxHQUFHLElBQUksR0FBRyxRQUFRO0FBQUEsSUFDcEI7QUFFQSxXQUFPLElBQWMsT0FBT0EsWUFBUztBQUFBLE1BQ25DLEtBQUs7QUFBQSxNQUNMLFdBQVc7QUFBQSxNQUNYLEtBQUs7QUFBQSxJQUNQLEdBQUcsSUFBSSxHQUFHLFFBQVE7QUFBQSxFQUNwQjtBQUNBLFdBQVMsWUFBWTtBQUFBLElBQ25CLFNBQVMsb0JBQUFDLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVdwRixXQUFXLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBV3JCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVNyQixhQUFhLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTdkIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU3hCLE1BQU0sb0JBQUFBLFFBQVU7QUFBQSxJQUNoQixVQUFVLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBV3BCLE9BQU8sb0JBQUFBLFFBQVU7QUFBQSxJQUNqQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLEVBQzlCOzs7QUV4SUEsTUFBSSxvQkFBb0I7QUFPakIsTUFBSSx3QkFBd0IsU0FBU0MsdUJBQXNCLGlCQUFpQjtBQUNqRixRQUFJLFdBQVcsZ0JBQWdCO0FBQy9CLFdBQU87QUFBQTtBQUFBLE1BRUwsbUJBQWdDLG9CQUFJLHNCQUFzQixXQUFXLGFBQWEsR0FBRyxPQUFPLFNBQVMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssV0FBVyxhQUFhLGdCQUFnQixPQUFPLFNBQVMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLGtIQUFrSCxnQkFBZ0IsaUJBQWlCO0FBQUEsUUFDclYsVUFBVTtBQUFBLE1BQ1osQ0FBQyxHQUFHLHNEQUFzRDtBQUFBO0FBQUEsTUFFMUQsUUFBcUIsb0JBQUksa0NBQWtDLGVBQWUsd0JBQXdCLFNBQVMsVUFBVSxRQUFRLEtBQUssU0FBUyxVQUFVLE1BQU0sZUFBZSxTQUFTLFVBQVUsUUFBUSxVQUFVLFNBQVMsVUFBVSxNQUFNLDJCQUEyQjtBQUFBO0FBQUEsTUFFblEsS0FBa0Isb0JBQUkseUJBQXlCLFNBQVMsS0FBSyxpQkFBaUIsR0FBRyw2QkFBNkI7QUFBQSxNQUM5RyxRQUFxQixvQkFBSSwwQkFBMEIsU0FBUyxLQUFLLGlCQUFpQixHQUFHLGdDQUFnQztBQUFBLE1BQ3JILE1BQW1CLG9CQUFJLHlCQUF5QixTQUFTLEtBQUssaUJBQWlCLEdBQUcsOEJBQThCO0FBQUEsTUFDaEgsT0FBb0Isb0JBQUksMEJBQTBCLFNBQVMsS0FBSyxpQkFBaUIsR0FBRywrQkFBK0I7QUFBQTtBQUFBLE1BRW5ILFVBQVU7QUFBQSxRQUNSLFFBQXFCLG9CQUFJLGdCQUFnQixlQUFlLHdCQUF3QixTQUFTLFVBQVUsUUFBUSxLQUFLLFNBQVMsVUFBVSxNQUFNLGtCQUFrQjtBQUFBLFFBQzNKLEtBQWtCLG9CQUFJLGNBQWMsZUFBZSxHQUFHLGNBQWM7QUFBQSxRQUNwRSxRQUFxQixvQkFBSSxVQUFVLGlCQUFpQixHQUFHLEdBQUcsaUJBQWlCO0FBQUE7QUFBQSxRQUUzRSxNQUFtQixvQkFBSSxjQUFjO0FBQUEsUUFDckMsT0FBb0Isb0JBQUksZUFBZTtBQUFBLE1BQ3pDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7OztBSHpDQSxNQUFJQyxlQUFZLENBQUMsWUFBWSxhQUFhLFVBQVUsY0FBYyxVQUFVO0FBRTVFLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLG9CQUFtQixLQUFLO0FBQUUsV0FBT0Msb0JBQW1CLEdBQUcsS0FBS0Msa0JBQWlCLEdBQUcsS0FBS0MsOEJBQTRCLEdBQUcsS0FBS0Msb0JBQW1CO0FBQUEsRUFBRztBQUV4SixXQUFTQSxzQkFBcUI7QUFBRSxVQUFNLElBQUksVUFBVSxzSUFBc0k7QUFBQSxFQUFHO0FBRTdMLFdBQVNELDhCQUE0QixHQUFHLFFBQVE7QUFBRSxRQUFJLENBQUM7QUFBRztBQUFRLFFBQUksT0FBTyxNQUFNO0FBQVUsYUFBT0Usb0JBQWtCLEdBQUcsTUFBTTtBQUFHLFFBQUksSUFBSSxPQUFPLFVBQVUsU0FBUyxLQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUFHLFFBQUksTUFBTSxZQUFZLEVBQUU7QUFBYSxVQUFJLEVBQUUsWUFBWTtBQUFNLFFBQUksTUFBTSxTQUFTLE1BQU07QUFBTyxhQUFPLE1BQU0sS0FBSyxDQUFDO0FBQUcsUUFBSSxNQUFNLGVBQWUsMkNBQTJDLEtBQUssQ0FBQztBQUFHLGFBQU9BLG9CQUFrQixHQUFHLE1BQU07QUFBQSxFQUFHO0FBRS9aLFdBQVNILGtCQUFpQixNQUFNO0FBQUUsUUFBSSxPQUFPLFdBQVcsZUFBZSxLQUFLLE9BQU8sUUFBUSxLQUFLLFFBQVEsS0FBSyxZQUFZLEtBQUs7QUFBTSxhQUFPLE1BQU0sS0FBSyxJQUFJO0FBQUEsRUFBRztBQUU3SixXQUFTRCxvQkFBbUIsS0FBSztBQUFFLFFBQUksTUFBTSxRQUFRLEdBQUc7QUFBRyxhQUFPSSxvQkFBa0IsR0FBRztBQUFBLEVBQUc7QUFFMUYsV0FBU0Esb0JBQWtCLEtBQUssS0FBSztBQUFFLFFBQUksT0FBTyxRQUFRLE1BQU0sSUFBSTtBQUFRLFlBQU0sSUFBSTtBQUFRLGFBQVMsSUFBSSxHQUFHLE9BQU8sSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssS0FBSztBQUFFLFdBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBTTtBQUV0TCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWdCM1MsTUFBSSx5QkFBc0MsbURBQWM7QUFBQSxJQUM3RCxhQUFhO0FBQUEsRUFDZixDQUFDO0FBTU0sTUFBSSxrQkFBa0IsU0FBU0MsaUJBQWdCQyxRQUFNO0FBQzFELFFBQUksV0FBV0EsT0FBSyxVQUNoQixZQUFZQSxPQUFLLFdBQ2pCLFNBQVNBLE9BQUssUUFDZCxhQUFhQSxPQUFLLFlBQ2xCQyxZQUFXRCxPQUFLLFVBQ2hCLE9BQU9ILDRCQUF5QkcsUUFBTVgsWUFBUztBQUVuRCxRQUFJLG1CQUFlLDRCQUFXLHNCQUFzQjtBQUNwRCxRQUFJLEtBQUs7QUFBYSxtQkFBYSxjQUFjLEtBQUs7QUFDdEQsUUFBSSxrQkFBa0IsWUFBWTtBQUVsQyxRQUFJLGNBQVUsb0JBQUFhLFNBQVcscUJBQXFCLFNBQVM7QUFDdkQsUUFBSUMsVUFBUyxzQkFBc0IsZUFBZTtBQUNsRCxRQUFJLFdBQVcsQ0FBQ0EsUUFBTyxtQkFBbUIsVUFBVUEsUUFBTyxRQUFRLFVBQVVGLGFBQVlFLFFBQU9GLFNBQVEsQ0FBQztBQUV6RyxRQUFJLFlBQVk7QUFDZCxpQkFBVyxDQUFDLEVBQUUsT0FBT1Ysb0JBQW1CLFFBQVEsR0FBRyxDQUFDLFVBQVVZLFFBQU8sU0FBUyxRQUFRRixhQUFZRSxRQUFPLFNBQVNGLFNBQVEsQ0FBQyxDQUFDO0FBQUEsSUFDOUg7QUFFQSxXQUFPLElBQWMsdUJBQXVCLFVBQVU7QUFBQSxNQUNwRCxPQUFPO0FBQUEsSUFDVCxHQUFHLElBQWMsVUFBVVgsWUFBUztBQUFBLE1BQ2xDLFdBQVc7QUFBQSxNQUNYLEtBQUs7QUFBQSxNQUNMLHNCQUFzQjtBQUFBLE1BQ3RCLHFCQUFxQixVQUFVO0FBQUEsSUFDakMsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBQUEsRUFDckI7QUFDQSxrQkFBZ0IsWUFBWTtBQUFBLElBQzFCLFNBQVMsb0JBQUFjLFFBQVUsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNaEMsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNckIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3JCLGFBQWEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt2QixjQUFjLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLeEIsTUFBTSxvQkFBQUEsUUFBVTtBQUFBLElBQ2hCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXBCLE9BQU8sb0JBQUFBLFFBQVU7QUFBQSxJQUNqQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLElBQzVCLFFBQVEsb0JBQUFBLFFBQVU7QUFBQSxJQUNsQixZQUFZLG9CQUFBQSxRQUFVO0FBQUEsSUFDdEIsVUFBVSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsSUFBSSxZQUFZLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDbkY7OztBTmpIQSxXQUFTQyxVQUFRLEtBQUs7QUFBRTtBQUEyQixRQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sT0FBTyxhQUFhLFVBQVU7QUFBRSxNQUFBQSxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUcsT0FBTztBQUFFLE1BQUFELFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU9BLFFBQU8sT0FBTyxXQUFXLGNBQWNBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRztBQUFFLFdBQU9ELFVBQVEsR0FBRztBQUFBLEVBQUc7QUFHelgsTUFBSUUsZUFBWSxDQUFDLG1CQUFtQixrQkFBa0IsVUFBVSxhQUFhLFVBQVUsVUFBVSxZQUFZLFlBQVksYUFBYSxnQkFBZ0Isa0JBQWtCLG9CQUFvQixjQUFjLFlBQVksY0FBYywyQkFBMkIsY0FBYyxZQUFZLGlCQUFpQixzQkFBc0IsVUFBVSxrQkFBa0IsV0FBVyxVQUFVLHNCQUFzQixVQUFVLGNBQWMsbUJBQW1CLGFBQWEsa0JBQWtCLGdCQUFnQixVQUFVO0FBRTNlLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBRWxULFdBQVNDLFVBQVFDLFNBQVEsZ0JBQWdCO0FBQUUsUUFBSUMsUUFBTyxPQUFPLEtBQUtELE9BQU07QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxVQUFVLE9BQU8sc0JBQXNCQSxPQUFNO0FBQUcsVUFBSSxnQkFBZ0I7QUFBRSxrQkFBVSxRQUFRLE9BQU8sU0FBVSxLQUFLO0FBQUUsaUJBQU8sT0FBTyx5QkFBeUJBLFNBQVEsR0FBRyxFQUFFO0FBQUEsUUFBWSxDQUFDO0FBQUEsTUFBRztBQUFFLE1BQUFDLE1BQUssS0FBSyxNQUFNQSxPQUFNLE9BQU87QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXhWLFdBQVNDLGdCQUFjLFFBQVE7QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsVUFBSSxTQUFTLFVBQVUsQ0FBQyxLQUFLLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFVBQUksSUFBSSxHQUFHO0FBQUUsUUFBQUgsVUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxVQUFBSSxrQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRyxXQUFXLE9BQU8sMkJBQTJCO0FBQUUsZUFBTyxpQkFBaUIsUUFBUSxPQUFPLDBCQUEwQixNQUFNLENBQUM7QUFBQSxNQUFHLE9BQU87QUFBRSxRQUFBSixVQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxpQkFBTyxlQUFlLFFBQVEsS0FBSyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFcmhCLFdBQVNLLG9CQUFtQixLQUFLO0FBQUUsV0FBT0Msb0JBQW1CLEdBQUcsS0FBS0Msa0JBQWlCLEdBQUcsS0FBS0MsOEJBQTRCLEdBQUcsS0FBS0Msb0JBQW1CO0FBQUEsRUFBRztBQUV4SixXQUFTQSxzQkFBcUI7QUFBRSxVQUFNLElBQUksVUFBVSxzSUFBc0k7QUFBQSxFQUFHO0FBRTdMLFdBQVNGLGtCQUFpQixNQUFNO0FBQUUsUUFBSSxPQUFPLFdBQVcsZUFBZSxLQUFLLE9BQU8sUUFBUSxLQUFLLFFBQVEsS0FBSyxZQUFZLEtBQUs7QUFBTSxhQUFPLE1BQU0sS0FBSyxJQUFJO0FBQUEsRUFBRztBQUU3SixXQUFTRCxvQkFBbUIsS0FBSztBQUFFLFFBQUksTUFBTSxRQUFRLEdBQUc7QUFBRyxhQUFPSSxvQkFBa0IsR0FBRztBQUFBLEVBQUc7QUFFMUYsV0FBU0Msa0JBQWdCLFVBQVUsYUFBYTtBQUFFLFFBQUksRUFBRSxvQkFBb0IsY0FBYztBQUFFLFlBQU0sSUFBSSxVQUFVLG1DQUFtQztBQUFBLElBQUc7QUFBQSxFQUFFO0FBRXhKLFdBQVNDLG1CQUFrQixRQUFRLE9BQU87QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUUsVUFBSSxhQUFhLE1BQU0sQ0FBQztBQUFHLGlCQUFXLGFBQWEsV0FBVyxjQUFjO0FBQU8saUJBQVcsZUFBZTtBQUFNLFVBQUksV0FBVztBQUFZLG1CQUFXLFdBQVc7QUFBTSxhQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUssVUFBVTtBQUFBLElBQUc7QUFBQSxFQUFFO0FBRTVULFdBQVNDLGNBQWEsYUFBYSxZQUFZLGFBQWE7QUFBRSxRQUFJO0FBQVksTUFBQUQsbUJBQWtCLFlBQVksV0FBVyxVQUFVO0FBQUcsUUFBSTtBQUFhLE1BQUFBLG1CQUFrQixhQUFhLFdBQVc7QUFBRyxXQUFPO0FBQUEsRUFBYTtBQUV0TixXQUFTRSxZQUFVLFVBQVUsWUFBWTtBQUFFLFFBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQUUsWUFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsSUFBRztBQUFFLGFBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRSxDQUFDO0FBQUcsUUFBSTtBQUFZLE1BQUFDLGtCQUFnQixVQUFVLFVBQVU7QUFBQSxFQUFHO0FBRWhZLFdBQVNBLGtCQUFnQixHQUFHLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxrQkFBa0IsU0FBU0Esa0JBQWdCQyxJQUFHQyxJQUFHO0FBQUUsTUFBQUQsR0FBRSxZQUFZQztBQUFHLGFBQU9EO0FBQUEsSUFBRztBQUFHLFdBQU9ELGtCQUFnQixHQUFHLENBQUM7QUFBQSxFQUFHO0FBRXpLLFdBQVNHLGVBQWEsU0FBUztBQUFFLFFBQUksNEJBQTRCQyw0QkFBMEI7QUFBRyxXQUFPLFNBQVMsdUJBQXVCO0FBQUUsVUFBSSxRQUFRQyxrQkFBZ0IsT0FBTyxHQUFHO0FBQVEsVUFBSSwyQkFBMkI7QUFBRSxZQUFJLFlBQVlBLGtCQUFnQixJQUFJLEVBQUU7QUFBYSxpQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUFHLE9BQU87QUFBRSxpQkFBUyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFFLGFBQU9DLDZCQUEyQixNQUFNLE1BQU07QUFBQSxJQUFHO0FBQUEsRUFBRztBQUV4YSxXQUFTQSw2QkFBMkJDLE9BQU0sTUFBTTtBQUFFLFFBQUksU0FBUzVCLFVBQVEsSUFBSSxNQUFNLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFBRSxhQUFPO0FBQUEsSUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLElBQUc7QUFBRSxXQUFPNkIseUJBQXVCRCxLQUFJO0FBQUEsRUFBRztBQUUvUixXQUFTQyx5QkFBdUJELE9BQU07QUFBRSxRQUFJQSxVQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksZUFBZSwyREFBMkQ7QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXJLLFdBQVNILDhCQUE0QjtBQUFFLFFBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsYUFBTztBQUFPLFFBQUksUUFBUSxVQUFVO0FBQU0sYUFBTztBQUFPLFFBQUksT0FBTyxVQUFVO0FBQVksYUFBTztBQUFNLFFBQUk7QUFBRSxjQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLENBQUMsR0FBRyxXQUFZO0FBQUEsTUFBQyxDQUFDLENBQUM7QUFBRyxhQUFPO0FBQUEsSUFBTSxTQUFTLEdBQUc7QUFBRSxhQUFPO0FBQUEsSUFBTztBQUFBLEVBQUU7QUFFeFUsV0FBU0Msa0JBQWdCLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsU0FBU0Esa0JBQWdCSixJQUFHO0FBQUUsYUFBT0EsR0FBRSxhQUFhLE9BQU8sZUFBZUEsRUFBQztBQUFBLElBQUc7QUFBRyxXQUFPSSxrQkFBZ0IsQ0FBQztBQUFBLEVBQUc7QUFFNU0sV0FBU2hCLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBRWhOLFdBQVNvQixpQkFBZSxLQUFLLEdBQUc7QUFBRSxXQUFPQyxrQkFBZ0IsR0FBRyxLQUFLQyx3QkFBc0IsS0FBSyxDQUFDLEtBQUtsQiw4QkFBNEIsS0FBSyxDQUFDLEtBQUttQixtQkFBaUI7QUFBQSxFQUFHO0FBSTdKLFdBQVNBLHFCQUFtQjtBQUFFLFVBQU0sSUFBSSxVQUFVLDJJQUEySTtBQUFBLEVBQUc7QUFFaE0sV0FBU25CLDhCQUE0QixHQUFHLFFBQVE7QUFBRSxRQUFJLENBQUM7QUFBRztBQUFRLFFBQUksT0FBTyxNQUFNO0FBQVUsYUFBT0Usb0JBQWtCLEdBQUcsTUFBTTtBQUFHLFFBQUksSUFBSSxPQUFPLFVBQVUsU0FBUyxLQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUFHLFFBQUksTUFBTSxZQUFZLEVBQUU7QUFBYSxVQUFJLEVBQUUsWUFBWTtBQUFNLFFBQUksTUFBTSxTQUFTLE1BQU07QUFBTyxhQUFPLE1BQU0sS0FBSyxDQUFDO0FBQUcsUUFBSSxNQUFNLGVBQWUsMkNBQTJDLEtBQUssQ0FBQztBQUFHLGFBQU9BLG9CQUFrQixHQUFHLE1BQU07QUFBQSxFQUFHO0FBRS9aLFdBQVNBLG9CQUFrQixLQUFLLEtBQUs7QUFBRSxRQUFJLE9BQU8sUUFBUSxNQUFNLElBQUk7QUFBUSxZQUFNLElBQUk7QUFBUSxhQUFTLElBQUksR0FBRyxPQUFPLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEtBQUs7QUFBRSxXQUFLLENBQUMsSUFBSSxJQUFJLENBQUM7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQU07QUFFdEwsV0FBU2dCLHdCQUFzQixLQUFLLEdBQUc7QUFBRSxRQUFJLEtBQUssT0FBTyxPQUFPLE9BQU8sT0FBTyxXQUFXLGVBQWUsSUFBSSxPQUFPLFFBQVEsS0FBSyxJQUFJLFlBQVk7QUFBRyxRQUFJLE1BQU07QUFBTTtBQUFRLFFBQUksT0FBTyxDQUFDO0FBQUcsUUFBSSxLQUFLO0FBQU0sUUFBSSxLQUFLO0FBQU8sUUFBSSxJQUFJO0FBQUksUUFBSTtBQUFFLFdBQUssS0FBSyxHQUFHLEtBQUssR0FBRyxHQUFHLEVBQUUsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLE9BQU8sS0FBSyxNQUFNO0FBQUUsYUFBSyxLQUFLLEdBQUcsS0FBSztBQUFHLFlBQUksS0FBSyxLQUFLLFdBQVc7QUFBRztBQUFBLE1BQU87QUFBQSxJQUFFLFNBQVMsS0FBSztBQUFFLFdBQUs7QUFBTSxXQUFLO0FBQUEsSUFBSyxVQUFFO0FBQVUsVUFBSTtBQUFFLFlBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxLQUFLO0FBQU0sYUFBRyxRQUFRLEVBQUU7QUFBQSxNQUFHLFVBQUU7QUFBVSxZQUFJO0FBQUksZ0JBQU07QUFBQSxNQUFJO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFNO0FBRWhnQixXQUFTRCxrQkFBZ0IsS0FBSztBQUFFLFFBQUksTUFBTSxRQUFRLEdBQUc7QUFBRyxhQUFPO0FBQUEsRUFBSztBQXlCcEUsTUFBSSxxQ0FBcUM7QUFBQSxJQUN2QyxJQUFJO0FBQUEsSUFDSixPQUFPO0FBQUEsSUFDUCxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsRUFDUjtBQUNPLFdBQVMscUNBQXFDLGdCQUFnQjtBQU9uRSxRQUFJRyxTQUFPLGVBQWUsTUFBTSxhQUFhLEdBQ3pDQyxTQUFRQyxpQkFBZUYsUUFBTSxDQUFDLEdBQzlCLGtCQUFrQkMsT0FBTSxDQUFDO0FBRTdCLFdBQU8sbUNBQW1DLGVBQWU7QUFBQSxFQUMzRDtBQUNPLFdBQVMsa0NBQWtDLGdCQUFnQjtBQU1oRSxRQUFJRSxTQUFRLGVBQWUsTUFBTSxXQUFXLEdBQ3hDQyxTQUFRRixpQkFBZUMsUUFBTyxDQUFDLEdBQy9CLFFBQVFDLE9BQU0sQ0FBQztBQUtuQixXQUFPLG1DQUFtQyxNQUFNLFlBQVksQ0FBQztBQUFBLEVBQy9EO0FBQ0EsTUFBSSx5QkFBeUI7QUFBQSxJQUMzQixLQUFLO0FBQUEsSUFDTCxNQUFNO0FBQUEsRUFDUjtBQUNBLE1BQUksb0JBQW9CO0FBQUEsSUFDdEIsZUFBZTtBQUFBLEVBQ2pCO0FBQ0EsTUFBSSx3QkFBd0I7QUFFckIsTUFBSSxhQUEwQix5QkFBVSxZQUFZO0FBQ3pELElBQUFDLFlBQVVDLGFBQVksVUFBVTtBQUVoQyxRQUFJLFNBQVNDLGVBQWFELFdBQVU7QUFFcEMsYUFBU0EsWUFBVyxPQUFPO0FBQ3pCLFVBQUk7QUFFSixNQUFBRSxrQkFBZ0IsTUFBTUYsV0FBVTtBQUVoQyxjQUFRLE9BQU8sS0FBSyxNQUFNLEtBQUs7QUFFL0IsTUFBQUcsa0JBQWdCQyx5QkFBdUIsS0FBSyxHQUFHLHNCQUFzQixNQUFNO0FBRTNFLE1BQUFELGtCQUFnQkMseUJBQXVCLEtBQUssR0FBRyx3QkFBd0IsTUFBTTtBQUU3RSxNQUFBRCxrQkFBZ0JDLHlCQUF1QixLQUFLLEdBQUcsNEJBQTRCLE1BQU07QUFFakYsTUFBQUQsa0JBQWdCQyx5QkFBdUIsS0FBSyxHQUFHLG1DQUFtQyxNQUFNO0FBRXhGLE1BQUFELGtCQUFnQkMseUJBQXVCLEtBQUssR0FBRyxVQUFVLElBQUk7QUFFN0QsTUFBQUQsa0JBQWdCQyx5QkFBdUIsS0FBSyxHQUFHLFNBQVMsSUFBSTtBQUU1RCxNQUFBRCxrQkFBZ0JDLHlCQUF1QixLQUFLLEdBQUcsaUJBQWlCLGdCQUFnQixFQUFFLENBQUM7QUFFbkYsTUFBQUQsa0JBQWdCQyx5QkFBdUIsS0FBSyxHQUFHLGdCQUFnQixXQUFZO0FBQ3pFLFlBQUksTUFBTSxNQUFNLFFBQVE7QUFDdEIsZ0JBQU0sTUFBTSxhQUFhO0FBQUEsUUFDM0I7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBRCxrQkFBZ0JDLHlCQUF1QixLQUFLLEdBQUcsZUFBZSxTQUFVLE9BQU87QUFDN0UsWUFBSSxNQUFNLE1BQU0sUUFBUTtBQUN0QixnQkFBTSxlQUFlO0FBQ3JCLGdCQUFNLGdCQUFnQjtBQUV0QixnQkFBTSxhQUFhO0FBRW5CLGdCQUFNLG9CQUFvQjtBQUFBLFFBQzVCO0FBQUEsTUFDRixDQUFDO0FBRUQsTUFBQUQsa0JBQWdCQyx5QkFBdUIsS0FBSyxHQUFHLHVCQUF1QixXQUFZO0FBQ2hGLGNBQU0sdUJBQXVCLE9BQU8sV0FBVyxXQUFZO0FBR3pELGNBQUksU0FBUyxrQkFBa0IsU0FBUyxNQUFNO0FBQzVDLGdCQUFJLENBQUMsTUFBTTtBQUFRO0FBQ25CLGdCQUFJLGlCQUFpQixVQUFVLE1BQU0sTUFBTTtBQUMzQyxnQkFBSSxDQUFDLGVBQWU7QUFBUTtBQUM1QixnQkFBSSxlQUFlLGVBQWUsQ0FBQztBQUNuQyx5QkFBYSxNQUFNLGlCQUFpQjtBQUFBLFVBQ3RDO0FBQUEsUUFDRixHQUFHLHFCQUFxQjtBQUFBLE1BQzFCLENBQUM7QUFFRCxNQUFBRCxrQkFBZ0JDLHlCQUF1QixLQUFLLEdBQUcsYUFBYSxTQUFVLE9BQU87QUFDM0UsWUFBSSxNQUFNLFFBQVEsa0JBQWtCLFFBQVE7QUFDMUMsZ0JBQU0sWUFBWSxLQUFLO0FBQUEsUUFDekI7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBRCxrQkFBZ0JDLHlCQUF1QixLQUFLLEdBQUcsa0JBQWtCLFNBQVUsT0FBTztBQUdoRixZQUFJLE1BQU0sVUFBVSxNQUFNLE9BQU8sU0FBUyxNQUFNLE1BQU0sTUFBTSxPQUFPO0FBQ2pFLGdCQUFNLGFBQWE7QUFBQSxRQUNyQjtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFELGtCQUFnQkMseUJBQXVCLEtBQUssR0FBRyxpQkFBaUIsV0FBWTtBQUMxRSxxQkFBYSxNQUFNLG9CQUFvQjtBQUN2QyxxQkFBYSxNQUFNLHdCQUF3QjtBQUUzQyxZQUFJLE1BQU0saUNBQWlDO0FBQ3pDLCtCQUFxQixNQUFNLCtCQUErQjtBQUFBLFFBQzVEO0FBSUEsY0FBTSxrQ0FBa0MsT0FBTyxzQkFBc0IsV0FBWTtBQUMvRSxnQkFBTSxTQUFTO0FBQUEsWUFDYixXQUFXO0FBQUEsVUFDYixDQUFDO0FBQUEsUUFDSCxDQUFDO0FBRUQsWUFBSSx3QkFBd0IsTUFBTSxVQUFVLE1BQU0sS0FBSyxNQUFNLFFBQVEsQ0FBQyxNQUFNLEtBQUssRUFBRSxPQUFPQyxvQkFBbUIsTUFBTSxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sU0FBVUMsUUFBTyxTQUFTO0FBQ3JMLGNBQUlDLGlCQUFnQkQsT0FBTSxlQUN0QkUsY0FBYUYsT0FBTTtBQUN2QixjQUFJLG9CQUFvQixxQkFBcUIsT0FBTztBQUNwRCxpQkFBTztBQUFBLFlBQ0wsZUFBZSxLQUFLLElBQUlDLGdCQUFlLGtCQUFrQixhQUFhO0FBQUEsWUFDdEUsWUFBWSxLQUFLLElBQUlDLGFBQVksa0JBQWtCLFVBQVU7QUFBQSxVQUMvRDtBQUFBLFFBQ0YsR0FBRztBQUFBLFVBQ0QsZUFBZTtBQUFBLFVBQ2YsWUFBWTtBQUFBLFFBQ2QsQ0FBQyxHQUNHLGdCQUFnQixzQkFBc0IsZUFDdEMsYUFBYSxzQkFBc0I7QUFFdkMscUJBQWEsTUFBTSxrQkFBa0I7QUFDckMsY0FBTSxxQkFBcUIsT0FBTyxXQUFXLFdBQVk7QUFDdkQsZ0JBQU0sU0FBUztBQUFBLFlBQ2IsY0FBYztBQUFBLFVBQ2hCLEdBQUcsV0FBWTtBQUNiLGtCQUFNLHFCQUFxQjtBQUFBLFVBQzdCLENBQUM7QUFBQSxRQUNILEdBQUcsZ0JBQWdCLFVBQVU7QUFBQSxNQUMvQixDQUFDO0FBRUQsTUFBQUwsa0JBQWdCQyx5QkFBdUIsS0FBSyxHQUFHLGNBQWMsU0FBVSxTQUFTO0FBQzlFLFlBQUksZUFBZSxnQkFBZ0IsT0FBTztBQUUxQyxjQUFNLHFCQUFxQjtBQUUzQix1QkFBZSxjQUFjLE1BQU0sb0JBQW9CO0FBQUEsTUFDekQsQ0FBQztBQUVELE1BQUFELGtCQUFnQkMseUJBQXVCLEtBQUssR0FBRyxtQkFBbUIsU0FBVSxzQkFBc0I7QUFDaEcsWUFBSSxNQUFNLFVBQVUsUUFBUSxNQUFNLFNBQVM7QUFBTTtBQUNqRCxZQUFJSyxTQUFRLE1BQU0sT0FDZCxpQkFBaUJBLE9BQU07QUFDM0IsWUFBSUMsWUFBVyxxQ0FBcUMsY0FBYztBQUNsRSxZQUFJLGdCQUFnQjtBQUVwQixZQUFJLHdCQUF3QixNQUFNLE1BQU0sZ0JBQWdCLE1BQU0sTUFBTSxnQkFBZ0IsTUFBTTtBQUN4RixVQUFBQSxZQUFXLE1BQU0sTUFBTTtBQUN2QiwwQkFBZ0I7QUFBQSxRQUNsQjtBQUVBLFlBQUksdUJBQXVCLG9CQUFvQjtBQUFBLFVBQzdDLFdBQVcsTUFBTSxNQUFNO0FBQUEsVUFDdkIsVUFBVUE7QUFBQSxVQUNWO0FBQUEsVUFDQSxPQUFPLGtDQUFrQyxjQUFjO0FBQUEsVUFDdkQsUUFBUSxNQUFNO0FBQUEsVUFDZCxTQUFTLE1BQU07QUFBQSxVQUNmLFFBQVEsQ0FBQyxNQUFNLE1BQU0sa0JBQWtCLE1BQU0sTUFBTSxXQUFXLE1BQU0sTUFBTSxNQUFNLFVBQVUsS0FBSyxLQUFLLE1BQU0sTUFBTSxVQUFVO0FBQUEsVUFDMUgsYUFBYTtBQUFBLFlBQ1gsWUFBWTtBQUFBLFlBQ1osYUFBYTtBQUFBLFVBQ2Y7QUFBQSxVQUNBLG1CQUFtQixNQUFNLE1BQU07QUFBQSxVQUMvQixRQUFRLE1BQU0sTUFBTTtBQUFBLFFBQ3RCLENBQUMsR0FDRyxNQUFNLHFCQUFxQixLQUMzQixPQUFPLHFCQUFxQixNQUM1QixnQkFBZ0IscUJBQXFCLFVBQ3JDLFFBQVEscUJBQXFCLE9BQzdCLG9CQUFvQixxQkFBcUI7QUFLN0MsWUFBSSxhQUFhLE1BQU0sTUFBTTtBQUM3QixZQUFJLFNBQVMsY0FBYyxPQUFPLGlCQUFpQixNQUFNLFFBQVEsTUFBTSxLQUFLLElBQUksTUFBTztBQUV2RixZQUFJLGdCQUFnQkMsZ0JBQWNBLGdCQUFjLENBQUMsR0FBRyxNQUFNLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRztBQUFBLFVBQy9FO0FBQUEsVUFDQSxNQUFNLE1BQU0sTUFBTSxrQkFBa0Isb0JBQW9CLGtCQUFrQixPQUFPO0FBQUEsVUFDakY7QUFBQSxRQUNGLENBQUM7QUFFRCxZQUFJLGtCQUFrQixDQUFDLE1BQU0sTUFBTSxrQkFBa0IsTUFBTSxNQUFNO0FBQ2pFLFlBQUksY0FBYyxrQkFBa0IsUUFBUTtBQUM1QyxZQUFJLGdCQUFnQjtBQUVwQixjQUFNLFNBQVM7QUFBQSxVQUNiO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLGNBQWM7QUFBQSxRQUNoQixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsTUFBQVIsa0JBQWdCQyx5QkFBdUIsS0FBSyxHQUFHLHdCQUF3QixXQUFZO0FBQ2pGLGNBQU0sZ0JBQWdCLElBQUk7QUFBQSxNQUM1QixDQUFDO0FBRUQsTUFBQUQsa0JBQWdCQyx5QkFBdUIsS0FBSyxHQUFHLHdCQUF3QixXQUFZO0FBQ2pGLGNBQU0sZ0JBQWdCLEtBQUs7QUFBQSxNQUM3QixDQUFDO0FBRUQsTUFBQUQsa0JBQWdCQyx5QkFBdUIsS0FBSyxHQUFHLFlBQVksU0FBVVEsT0FBTTtBQUN6RSxjQUFNLFFBQVFBO0FBQ2QsY0FBTSxNQUFNLFlBQVksTUFBTSxNQUFNLFNBQVNBLEtBQUk7QUFFakQsWUFBSUEsU0FBUSxNQUFNO0FBRWhCLGdCQUFNLFNBQVM7QUFBQSxZQUNiLGVBQWU7QUFBQSxZQUNmLGFBQWEsQ0FBQztBQUFBLFlBQ2QsZUFBZTtBQUFBLFlBQ2YsY0FBYztBQUFBLFlBQ2QsY0FBYztBQUFBLFVBQ2hCLENBQUM7QUFFRCxpQkFBTyxvQkFBb0IsVUFBVSxNQUFNLG9CQUFvQjtBQUFBLFFBQ2pFLE9BQU87QUFFTCxnQkFBTSxxQkFBcUI7QUFFM0IsaUJBQU8saUJBQWlCLFVBQVUsTUFBTSxvQkFBb0I7QUFBQSxRQUM5RDtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFULGtCQUFnQkMseUJBQXVCLEtBQUssR0FBRyxhQUFhLFNBQVVRLE9BQU07QUFDMUUsY0FBTSxTQUFTQTtBQUNmLGNBQU0sTUFBTSxhQUFhLE1BQU0sTUFBTSxVQUFVQSxLQUFJO0FBQUEsTUFDckQsQ0FBQztBQUVELFlBQU0sUUFBUTtBQUFBLFFBQ1osV0FBVztBQUFBLFVBQ1QsUUFBUSxNQUFNO0FBQUEsUUFDaEI7QUFBQSxRQUNBLG9CQUFvQixNQUFNO0FBQUE7QUFBQSxRQUUxQixXQUFXO0FBQUEsUUFDWCxXQUFXO0FBQUEsUUFDWCxlQUFlO0FBQUEsUUFDZixhQUFhLENBQUM7QUFBQSxRQUNkLGVBQWU7QUFBQSxRQUNmLGNBQWM7QUFBQTtBQUFBLFFBRWQsY0FBYztBQUFBO0FBQUEsTUFFaEI7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFDLGNBQWFiLGFBQVksQ0FBQztBQUFBLE1BQ3hCLEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxvQkFBb0I7QUFDbEMsWUFBSSxTQUFTO0FBRWIsWUFBSSxLQUFLLE1BQU0sb0JBQW9CO0FBSWpDLGVBQUssU0FBUztBQUFBLFlBQ1osb0JBQW9CO0FBQUEsWUFDcEIsV0FBVztBQUFBLFVBQ2IsR0FBRyxXQUFZO0FBQ2IsbUJBQU8sY0FBYztBQUFBLFVBQ3ZCLENBQUM7QUFBQSxRQUNIO0FBRUEsWUFBSSxLQUFLLE1BQU0sb0JBQW9CO0FBQ2pDLGlCQUFPLGlCQUFpQixVQUFVLEtBQUssc0JBQXNCLElBQUk7QUFBQSxRQUNuRTtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxtQkFBbUIsV0FBVztBQUM1QyxZQUFJLFNBQVM7QUFHYixZQUFJLENBQUMsVUFBVSxVQUFVLEtBQUssTUFBTSxRQUFRO0FBQzFDLGVBQUssY0FBYztBQUFBLFFBQ3JCO0FBR0EsWUFBSSxVQUFVLHVCQUF1QixLQUFLLE1BQU0sb0JBQW9CO0FBQ2xFLGNBQUksS0FBSyxNQUFNLG9CQUFvQjtBQUNqQyxtQkFBTyxpQkFBaUIsVUFBVSxLQUFLLHNCQUFzQixJQUFJO0FBQUEsVUFDbkUsT0FBTztBQUNMLG1CQUFPLG9CQUFvQixVQUFVLEtBQUssc0JBQXNCLElBQUk7QUFBQSxVQUN0RTtBQUFBLFFBQ0Y7QUFHQSxZQUFJLFVBQVUsVUFBVSxDQUFDLEtBQUssTUFBTSxRQUFRO0FBRzFDLGVBQUssMkJBQTJCLE9BQU8sV0FBVyxXQUFZO0FBQzVELG1CQUFPLFNBQVM7QUFBQSxjQUNkLFdBQVc7QUFBQSxZQUNiLENBQUM7QUFBQSxVQUNILEdBQUcscUJBQXFCO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsdUJBQXVCO0FBQ3JDLGVBQU8sb0JBQW9CLFVBQVUsS0FBSyxzQkFBc0IsSUFBSTtBQUNwRSxxQkFBYSxLQUFLLGtCQUFrQjtBQUNwQyxxQkFBYSxLQUFLLG9CQUFvQjtBQUN0QyxxQkFBYSxLQUFLLHdCQUF3QjtBQUMxQyw2QkFBcUIsS0FBSywrQkFBK0I7QUFBQSxNQUMzRDtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTYyxVQUFTO0FBQ3ZCLFlBQUksU0FBUztBQUViLFlBQUksY0FBYyxLQUFLLE9BQ25CLGtCQUFrQixZQUFZLGlCQUM5QixpQkFBaUIsWUFBWSxnQkFDN0IsU0FBUyxZQUFZLFFBQ3JCLFlBQVksWUFBWSxXQUN4QixTQUFTLFlBQVksUUFDckIsU0FBUyxZQUFZLFFBQ3JCLFdBQVcsWUFBWSxVQUN2QixXQUFXLFlBQVksVUFDdkIsWUFBWSxZQUFZLFdBQ3hCLGVBQWUsWUFBWSxjQUMzQixpQkFBaUIsWUFBWSxnQkFDN0IsbUJBQW1CLFlBQVksa0JBQy9CLGFBQWEsWUFBWSxZQUN6QixXQUFXLFlBQVksVUFDdkIsYUFBYSxZQUFZLFlBQ3pCLDBCQUEwQixZQUFZLHlCQUN0QyxhQUFhLFlBQVksWUFDekIsV0FBVyxZQUFZLFVBQ3ZCLGdCQUFnQixZQUFZLGVBQzVCLHFCQUFxQixZQUFZLG9CQUNqQyxTQUFTLFlBQVksUUFDckIsaUJBQWlCLFlBQVksZ0JBQzdCLFVBQVUsWUFBWSxTQUN0QixTQUFTLFlBQVksUUFDckIscUJBQXFCLFlBQVksb0JBQ2pDLFNBQVMsWUFBWSxRQUNyQixZQUFZLFlBQVksWUFBWSxHQUNwQyxpQkFBaUIsWUFBWSxpQkFBaUIsR0FDOUMsWUFBWSxZQUFZLFdBQ3hCLGlCQUFpQixZQUFZLGdCQUM3QixtQkFBbUIsWUFBWSxjQUMvQixlQUFlLFlBQVksVUFDM0IsT0FBT0MsNEJBQXlCLGFBQWFDLFlBQVM7QUFFMUQsWUFBSUMsVUFBUyxpQkFBaUI7QUFDOUIsWUFBSSxnQkFBZ0IsQ0FBQ0EsUUFBTyxZQUFZO0FBQUEsVUFDdEM7QUFBQSxRQUNGLENBQUM7QUFDRCxZQUFJLGNBQVUsb0JBQUFDLFNBQVcsY0FBYztBQUFBLFVBQ3JDLHFCQUFxQixLQUFLLE1BQU07QUFBQSxRQUNsQyxHQUFHLFNBQVM7QUFDWixZQUFJLG9CQUFnQixvQkFBQUEsU0FBVyxzQkFBc0IsZUFBZTtBQUNwRSxZQUFJLFlBQVksWUFBWSxDQUFDO0FBQzdCLFlBQUk7QUFFSixZQUFJLENBQUMsS0FBSyxNQUFNLHVCQUF1QixVQUFVLEtBQUssTUFBTSxZQUFZO0FBQ3RFLGNBQUksV0FBVztBQUNmLGNBQUksZUFBZTtBQUNuQixjQUFJO0FBQ0osY0FBSTtBQUNKLGNBQUksaUJBQWlCLGVBQWUsUUFBUSxlQUFlLFVBQVUsV0FBVyxlQUFlLFlBQVksSUFBSSxXQUFXLFlBQVksSUFBSTtBQUMxSSxjQUFJLFlBQVksZUFBZSxRQUFRLGVBQWUsVUFBVSxXQUFXLGVBQWUsTUFBTSxJQUFJLFdBQVcsT0FBTztBQUV0SCxjQUFJLFlBQVksbUJBQW1CLFFBQVE7QUFDekMsdUJBQVcsaUJBQWlCLFFBQVEsaUJBQWlCLFNBQVMsZUFBZTtBQUM3RSx1QkFBVztBQUVYLGdCQUFJLENBQUMsY0FBYztBQUNqQiw2QkFBZSxTQUFTQyxnQkFBZTtBQUNyQyx1QkFBTyxPQUFPO0FBQUEsY0FDaEI7QUFBQSxZQUNGO0FBQUEsVUFDRixPQUFPO0FBQ0wsdUJBQVc7QUFBQSxVQUNiO0FBRUEsY0FBSTtBQUVKLGNBQUksWUFBWSx5QkFBeUI7QUFDdkMsOEJBQWtCLEtBQUs7QUFDdkIsd0NBQTRCLElBQWMscUJBQXFCLE1BQU0sSUFBYyxLQUFLO0FBQUEsY0FDdEYsSUFBSSxLQUFLO0FBQUEsWUFDWCxHQUFHLFlBQVksSUFBYyxTQUFTO0FBQUEsY0FDcEMsT0FBTztBQUFBLGNBQ1AsU0FBUztBQUFBLFlBQ1gsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO0FBQUEsVUFDOUI7QUFFQSxjQUFJLGNBQWMsS0FBSyxNQUFNLGVBQWUsb0JBQW9CO0FBQ2hFLGtCQUFRLElBQWMsV0FBVztBQUFBLFlBQy9CO0FBQUEsVUFDRixHQUFHLElBQWMsY0FBY0MsWUFBUztBQUFBLFlBQ3RDLHNCQUFzQjtBQUFBLFVBQ3hCLEdBQUcsZ0JBQWdCO0FBQUEsWUFDakI7QUFBQSxZQUVBO0FBQUEsWUFDQSxnQkFBZ0I7QUFBQSxZQUNoQixnQkFBZ0IsS0FBSztBQUFBLFlBQ3JCLGFBQWEsS0FBSztBQUFBLFlBQ2xCLFVBQVUsQ0FBQyxZQUFZLENBQUMsS0FBSyxNQUFNLGdCQUFnQixLQUFLLE1BQU07QUFBQSxVQUNoRSxDQUFDLEdBQUcsSUFBYyxpQkFBaUJBLFlBQVMsQ0FBQyxHQUFHLFlBQVk7QUFBQSxZQUMxRCxVQUFVLEtBQUs7QUFBQSxZQUNmLFFBQVEsS0FBSyxNQUFNO0FBQUEsWUFDbkIsVUFBVSxLQUFLLE1BQU07QUFBQSxZQUNyQixZQUFZO0FBQUEsWUFDWixlQUFXLG9CQUFBRixTQUFXLGdCQUFnQixlQUFlLFFBQVEsZUFBZSxTQUFTLFNBQVMsV0FBVyxTQUFTO0FBQUEsWUFDbEgsV0FBVztBQUFBLFlBQ1gsYUFBYTtBQUFBLFlBQ2I7QUFBQSxZQUNBLGFBQWE7QUFBQSxZQUNiLE1BQU07QUFBQSxZQUNOLGNBQWM7QUFBQSxZQUNkLG1CQUFtQjtBQUFBLFlBQ25CLGNBQWM7QUFBQSxZQUNkLG9CQUFvQjtBQUFBLFlBQ3BCLE9BQU9QLGdCQUFjQSxnQkFBYyxDQUFDLEdBQUcsS0FBSyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUc7QUFBQTtBQUFBLGNBRXBFLFlBQVksQ0FBQyxLQUFLLE1BQU0sZUFBZSx1QkFBdUI7QUFBQSxZQUNoRSxDQUFDO0FBQUEsVUFDSCxDQUFDLEdBQUcsYUFBYSxLQUFLLE1BQU0saUJBQWlCLElBQWMsaUJBQWlCO0FBQUEsWUFDMUUsVUFBVSxLQUFLLE1BQU07QUFBQSxZQUNyQixPQUFPLEtBQUssTUFBTTtBQUFBLFVBQ3BCLEdBQUcsYUFBYSxHQUFHLDJCQUEyQixJQUFjLHFCQUFxQjtBQUFBLFlBQy9FLGlCQUFpQjtBQUFBLGNBQ2YsWUFBWTtBQUFBO0FBQUEsY0FFWixXQUFXO0FBQUE7QUFBQSxjQUVYLGVBQWU7QUFBQTtBQUFBLGNBRWYsU0FBUztBQUFBO0FBQUEsWUFFWDtBQUFBLFlBQ0EsWUFBWSxLQUFLO0FBQUEsVUFDbkIsR0FBRyxTQUFVLGFBQWE7QUFDeEIsbUJBQU8sSUFBYyxPQUFPO0FBQUEsY0FDMUIsS0FBSztBQUFBLFlBQ1AsR0FBRyxRQUFRO0FBQUEsVUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQUEsUUFDTjtBQUlBLFlBQUksVUFBVTtBQUNaLGlCQUFPLElBQWMsT0FBT1MsWUFBUztBQUFBLFlBQ25DLEtBQUs7QUFBQSxZQUNMLFdBQVc7QUFBQSxZQUNYLEtBQUs7QUFBQSxVQUNQLEdBQUcsSUFBSSxHQUFHLElBQWMsT0FBTztBQUFBLFlBQzdCLEtBQWtCLG9CQUFLO0FBQUEsY0FDckI7QUFBQSxZQUNGLEdBQUcsZ0JBQWdCO0FBQUEsWUFDbkIsV0FBVztBQUFBLFlBQ1gsS0FBSyxLQUFLO0FBQUEsVUFDWixHQUFHLGtCQUFrQixjQUFjLE9BQU8sTUFBTSxHQUFHLEtBQUs7QUFBQSxRQUMxRCxPQUFPO0FBQ0wsaUJBQU8sSUFBYyx5QkFBeUI7QUFBQSxZQUM1QyxnQkFBZ0IsS0FBSztBQUFBLFVBQ3ZCLEdBQUcsSUFBYyxPQUFPQSxZQUFTO0FBQUEsWUFDL0IsS0FBSztBQUFBLFlBQ0wsV0FBVztBQUFBLFlBQ1gsS0FBSztBQUFBLFlBQ0wsV0FBVyxLQUFLO0FBQUEsVUFDbEIsR0FBRyxJQUFJLEdBQUcsSUFBYyxPQUFPO0FBQUEsWUFDN0IsS0FBa0Isb0JBQUs7QUFBQSxjQUNyQjtBQUFBLFlBQ0YsR0FBRyxnQkFBZ0I7QUFBQSxZQUNuQixXQUFXO0FBQUEsWUFDWCxLQUFLLEtBQUs7QUFBQSxVQUNaLEdBQUcsa0JBQWtCLGNBQWMsT0FBTyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQUEsUUFDM0Q7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDLEdBQUcsQ0FBQztBQUFBLE1BQ0gsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLHlCQUF5QixXQUFXLFdBQVc7QUFDN0QsWUFBSSxVQUFVLFVBQVUsVUFBVSxDQUFDLFVBQVUsUUFBUTtBQUNuRCxpQkFBTztBQUFBLFlBQ0wsV0FBVztBQUFBLGNBQ1QsUUFBUSxVQUFVO0FBQUEsWUFDcEI7QUFBQSxZQUNBLFdBQVc7QUFBQSxZQUNYLFdBQVc7QUFBQSxVQUNiO0FBQUEsUUFDRjtBQUVBLFlBQUksVUFBVSxVQUFVLFdBQVcsVUFBVSxRQUFRO0FBQ25ELGlCQUFPO0FBQUEsWUFDTCxXQUFXO0FBQUEsY0FDVCxRQUFRLFVBQVU7QUFBQSxZQUNwQjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUVGLFdBQU9wQjtBQUFBLEVBQ1QsRUFBRSx5QkFBUztBQUVYLEVBQUFHLGtCQUFnQixZQUFZLGdCQUFnQjtBQUFBLElBQzFDLFFBQVE7QUFBQSxJQUNSLFVBQVU7QUFBQSxJQUNWLGdCQUFnQjtBQUFBLElBQ2hCLGtCQUFrQjtBQUFBLElBQ2xCLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxFQUNYLENBQUM7QUFFRCxhQUFXLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUlyQixpQkFBaUIsb0JBQUFrQixRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLM0IsZ0JBQWdCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTzFCLGdCQUFnQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzFCLFFBQVEsb0JBQUFBLFFBQVUsSUFBSTtBQUFBLElBQ3RCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtyQixjQUFjLG9CQUFBQSxRQUFVLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUs3QixXQUFXLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLckIsU0FBUyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS25CLGdCQUFnQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzFCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFVcEIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNeEIsUUFBUSxvQkFBQUEsUUFBVSxNQUFNO0FBQUEsTUFDdEIsU0FBUyxvQkFBQUEsUUFBVSxJQUFJO0FBQUEsTUFDdkIsVUFBVSxvQkFBQUEsUUFBVSxNQUFNLENBQUMsVUFBVSxPQUFPLENBQUMsRUFBRTtBQUFBLElBQ2pELENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtELFFBQVEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtsQixVQUFVLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLcEIsZ0JBQWdCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLMUIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLNUIsWUFBWSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3RCLFlBQVksb0JBQUFBLFFBQVU7QUFBQSxJQUN0QixVQUFVLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFRcEIseUJBQXlCLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsS0FBSyxVQUFVLENBQUM7QUFBQSxJQUNyRyxZQUFZLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT3RCLG9CQUFvQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNOUIsUUFBUSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2xCLG9CQUFvQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzlCLFFBQVEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPbEIsUUFBUSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsT0FBTyxZQUFZLG9CQUFBQSxRQUFVLElBQUksVUFBVSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1uRixlQUFlLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLekIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNeEIsbUJBQW1CLG9CQUFBQSxRQUFVO0FBQUEsSUFDN0IsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLEVBQzlCOzs7QVV4dkJBLE1BQUFDLHNCQUF1QjtBQUN2QixNQUFBQyxzQkFBc0I7QUFwQnRCLE1BQUlDLGVBQVksQ0FBQyxRQUFRLFlBQVksYUFBYSxlQUFlO0FBRWpFLFdBQVNDLFVBQVFDLFNBQVEsZ0JBQWdCO0FBQUUsUUFBSUMsUUFBTyxPQUFPLEtBQUtELE9BQU07QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxVQUFVLE9BQU8sc0JBQXNCQSxPQUFNO0FBQUcsVUFBSSxnQkFBZ0I7QUFBRSxrQkFBVSxRQUFRLE9BQU8sU0FBVSxLQUFLO0FBQUUsaUJBQU8sT0FBTyx5QkFBeUJBLFNBQVEsR0FBRyxFQUFFO0FBQUEsUUFBWSxDQUFDO0FBQUEsTUFBRztBQUFFLE1BQUFDLE1BQUssS0FBSyxNQUFNQSxPQUFNLE9BQU87QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXhWLFdBQVNDLGdCQUFjLFFBQVE7QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsVUFBSSxTQUFTLFVBQVUsQ0FBQyxLQUFLLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFVBQUksSUFBSSxHQUFHO0FBQUUsUUFBQUgsVUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxVQUFBSSxrQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRyxXQUFXLE9BQU8sMkJBQTJCO0FBQUUsZUFBTyxpQkFBaUIsUUFBUSxPQUFPLDBCQUEwQixNQUFNLENBQUM7QUFBQSxNQUFHLE9BQU87QUFBRSxRQUFBSixVQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxpQkFBTyxlQUFlLFFBQVEsS0FBSyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFcmhCLFdBQVNJLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBRWhOLFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBZ0IzUyxNQUFJLFdBQVcsU0FBU0MsVUFBU0MsUUFBTTtBQUM1QyxRQUFJLFlBQVlBLE9BQUssTUFDakJDLFFBQU8sY0FBYyxTQUFTLE1BQU0sV0FDcEMsV0FBV0QsT0FBSyxVQUNoQixZQUFZQSxPQUFLLFdBQ2pCLGdCQUFnQkEsT0FBSyxlQUNyQixPQUFPRSw0QkFBeUJGLFFBQU1HLFlBQVM7QUFFbkQsUUFBSSxXQUFXLFlBQVk7QUFDM0IsUUFBSUMsVUFBUyxlQUFlLFFBQVE7QUFDcEMsUUFBSSxZQUFZLENBQUNBLFFBQU8sVUFBVSxnQkFBZ0JBLFFBQU8sYUFBYSxJQUFJLFFBQVdBLFFBQU9ILEtBQUksQ0FBQztBQUNqRyxRQUFJLGNBQVUsb0JBQUFJLFNBQVcsWUFBWSxXQUFXLFNBQVMsTUFBTSxTQUFTO0FBRXhFLFFBQUksUUFBUUMsZ0JBQWM7QUFBQSxNQUN4QixLQUFLO0FBQUEsTUFDTCxXQUFXO0FBQUEsSUFDYixHQUFHLElBQUk7QUFFUCxXQUFPLG9CQUFvQixVQUFVLEtBQUs7QUFBQSxFQUM1QztBQUNBLFdBQVMsWUFBWTtBQUFBLElBQ25CLFdBQVcsb0JBQUFDLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLNUIsVUFBVSxvQkFBQUEsUUFBVSxRQUFRO0FBQUEsSUFDNUIsTUFBTSxvQkFBQUEsUUFBVTtBQUFBLElBQ2hCLGVBQWUsb0JBQUFBLFFBQVU7QUFBQSxJQUN6QixJQUFJLG9CQUFBQSxRQUFVO0FBQUEsRUFDaEI7OztBQzNDQSxNQUFBQyxrQkFBc0M7QUFDdEMsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1Qjs7O0FDRnZCLE1BQUFDLGtCQUFrQjtBQUNsQixNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCO0FBakJ2QixNQUFJQyxlQUFZLENBQUMsYUFBYSxjQUFjLGNBQWMsU0FBUyxVQUFVO0FBRTdFLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBZTNTLE1BQUksZ0JBQWdCLFNBQVNDLGVBQWNDLFFBQU07QUFDdEQsUUFBSSxZQUFZQSxPQUFLLFdBQ2pCLGtCQUFrQkEsT0FBSyxZQUN2QixhQUFhLG9CQUFvQixTQUFTLFFBQVEsaUJBQ2xELGFBQWFBLE9BQUssWUFDbEIsUUFBUUEsT0FBSyxPQUNiLFdBQVdBLE9BQUssVUFDaEIsT0FBT0gsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRW5ELFFBQUksUUFBUSxzQkFBc0IsWUFBWSxZQUFZLFFBQVE7QUFDbEUsUUFBSSxvQkFBZ0Isb0JBQUFNLFNBQVcsaUJBQWlCLGtCQUFrQixPQUFPLHVCQUF1QixPQUFPLFVBQVUsQ0FBQyxHQUFHLFNBQVM7QUFDOUgsV0FBTyxJQUFjLGdCQUFnQkwsWUFBUztBQUFBLE1BQzVDLFdBQVc7QUFBQSxNQUNYLE9BQU8sU0FBUztBQUFBLE1BQ2hCLE1BQU07QUFBQSxNQUNOO0FBQUEsTUFDQSxVQUFVLGFBQWEsVUFBVTtBQUFBLE1BQ2pDLE1BQU07QUFBQSxNQUNOLGdCQUFnQjtBQUFBLElBQ2xCLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFBQSxFQUNqQjtBQUNBLGdCQUFjLFlBQVk7QUFBQSxJQUN4QixNQUFNLG9CQUFBTSxRQUFVO0FBQUEsSUFDaEIsU0FBUyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU25CLE9BQU8sb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFdBQVcsVUFBVSxRQUFRLFNBQVMsV0FBVyxTQUFTLENBQUM7QUFBQSxJQUNuRixNQUFNLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTdEMsT0FBTyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsUUFBUSxTQUFTLE1BQU0sQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU2hELFlBQVksb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVN0QixXQUFXLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBZXJCLFlBQVksb0JBQUFBLFFBQVU7QUFBQSxJQUN0QixRQUFRLG9CQUFBQSxRQUFVO0FBQUEsSUFDbEIsS0FBSyxvQkFBQUEsUUFBVTtBQUFBLElBQ2YsTUFBTSxvQkFBQUEsUUFBVSxNQUFNLENBQUMsVUFBVSxRQUFRLENBQUM7QUFBQSxJQUMxQyxXQUFXLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3hCLFVBQVUsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxpQkFBaUIsY0FBYyx1QkFBdUIsWUFBWSxhQUFhLFNBQVMsZ0JBQWdCLGNBQWMsVUFBVSxZQUFZLGdCQUFnQixRQUFRLGFBQWEsYUFBYSxjQUFjLFdBQVcsY0FBYyxZQUFZLFlBQVksZ0JBQWdCLFVBQVUsUUFBUSxhQUFhLFFBQVEsbUJBQW1CLGlCQUFpQixVQUFVLGNBQWMsU0FBUyxTQUFTLE9BQU8sWUFBWSxZQUFZLGFBQWEsWUFBWSxTQUFTLHVCQUF1QixTQUFTLHFCQUFxQixTQUFTLGdCQUFnQixlQUFlLGNBQWMsV0FBVyxXQUFXLFNBQVMsV0FBVyxXQUFXLGNBQWMsYUFBYSxtQkFBbUIsd0JBQXdCLG1CQUFtQixvQkFBb0Isc0JBQXNCLG9CQUFvQixRQUFRLGlCQUFpQixxQkFBcUIsd0JBQXdCLHVCQUF1Qix5QkFBeUIsU0FBUyw4QkFBOEIsd0JBQXdCLGNBQWMsWUFBWSxPQUFPLGdCQUFnQixrQkFBa0IsWUFBWSxXQUFXLGVBQWUsZUFBZSxZQUFZLGdCQUFnQixpQkFBaUIsYUFBYSxPQUFPLG1CQUFtQixvQkFBb0IsWUFBWSxxQkFBcUIsbUJBQW1CLG9CQUFvQixjQUFjLG1CQUFtQixtQkFBbUIsaUJBQWlCLDhCQUE4Qiw0QkFBNEIsaUJBQWlCLGdCQUFnQix5QkFBeUIseUJBQXlCLHVCQUF1Qix5QkFBeUIsd0JBQXdCLHNCQUFzQixjQUFjLHFCQUFxQiw0QkFBNEIsNkJBQTZCLHlCQUF5QiwwQkFBMEIsY0FBYyxnQkFBZ0IsZUFBZSxtQkFBbUIsY0FBYyx1QkFBdUIsU0FBUyxTQUFTLFVBQVUsT0FBTyxVQUFVLFFBQVEsVUFBVSxjQUFjLGdCQUFnQixPQUFPLGFBQWEsYUFBYSxlQUFlLFdBQVcsZUFBZSxVQUFVLFFBQVEsWUFBWSxRQUFRLGVBQWUsZ0JBQWdCLHFCQUFxQixjQUFjLGFBQWEsaUJBQWlCLGNBQWMsa0JBQWtCLFlBQVksUUFBUSxVQUFVLFdBQVcsU0FBUyxRQUFRLGtCQUFrQixZQUFZLFFBQVEsV0FBVyxTQUFTLGdCQUFnQixXQUFXLFFBQVEsUUFBUSxhQUFhLFNBQVMsZ0JBQWdCLGNBQWMsYUFBYSxjQUFjLHNCQUFzQixnQkFBZ0IsYUFBYSxtQkFBbUIsa0JBQWtCLGdCQUFnQixpQkFBaUIsZUFBZSxXQUFXLFVBQVUsTUFBTSxZQUFZLFlBQVksZUFBZSxjQUFjLGVBQWUsWUFBWSxrQkFBa0IsaUJBQWlCLFVBQVUsV0FBVyxhQUFhLGNBQWMsY0FBYyxhQUFhLFFBQVEsUUFBUSxXQUFXLFFBQVEsWUFBWSxXQUFXLGVBQWUsaUJBQWlCLGNBQWMsaUJBQWlCLGFBQWEsaUJBQWlCLGFBQWEseUJBQXlCLFlBQVksYUFBYSx1QkFBdUIsWUFBWSxtQkFBbUIsaUJBQWlCLGNBQWMsa0JBQWtCLGVBQWUsb0JBQW9CLHFCQUFxQix3QkFBd0IsWUFBWSxXQUFXLGVBQWUsY0FBYyxhQUFhLGNBQWMsZUFBZSxlQUFlLFdBQVcsZUFBZSxhQUFhLGNBQWMsa0JBQWtCLGVBQWUsZ0JBQWdCLFlBQVksaUJBQWlCLGVBQWUsZUFBZSxhQUFhLGFBQWEscUJBQXFCLGVBQWUsV0FBVyxnQkFBZ0Isa0JBQWtCLGdCQUFnQixhQUFhLGdCQUFnQixrQkFBa0IsY0FBYyxhQUFhLGNBQWMsZUFBZSxlQUFlLHVCQUF1QixXQUFXLGtCQUFrQixjQUFjLGlCQUFpQixrQkFBa0IsaUJBQWlCLHNCQUFzQixVQUFVLDBCQUEwQixvQkFBb0IsbUJBQW1CLGlCQUFpQixhQUFhLFVBQVUsUUFBUSxZQUFZLFlBQVksYUFBYSxVQUFVLFNBQVMsaUJBQWlCLGNBQWMsWUFBWSxTQUFTLGlCQUFpQix1QkFBdUIsVUFBVSxpQkFBaUIsUUFBUSxhQUFhLFVBQVUsUUFBUSxlQUFlLFVBQVUsV0FBVyxVQUFVLHVCQUF1QixXQUFXLGlCQUFpQixjQUFjLGVBQWUsYUFBYSxXQUFXLFNBQVMsV0FBVyxVQUFVLFdBQVcsT0FBTyxhQUFhLGVBQWUsUUFBUSxjQUFjLFFBQVEsZ0JBQWdCLHNCQUFzQixVQUFVLFFBQVEsb0JBQW9CLFNBQVMscUJBQXFCLFdBQVcsaUJBQWlCLFlBQVksZ0JBQWdCLGFBQWEsUUFBUSxtQkFBbUIsU0FBUyxVQUFVLHFCQUFxQix3QkFBd0IsZUFBZSxrQkFBa0IsMEJBQTBCLDBCQUEwQixpQkFBaUIsU0FBUyxTQUFTLGFBQWEsWUFBWSxZQUFZLGFBQWEsVUFBVSxZQUFZLGFBQWEsVUFBVSxhQUFhLGtCQUFrQixjQUFjLG1CQUFtQixrQkFBa0IsbUJBQW1CLGlCQUFpQixrQkFBa0IsU0FBUyxRQUFRLGNBQWMsYUFBYSxXQUFXLFVBQVUsYUFBYSxPQUFPLGVBQWUsV0FBVyx1QkFBdUIsd0JBQXdCLHNCQUFzQixtQkFBbUIsT0FBTyxRQUFRLGVBQWUsWUFBWSxlQUFlLGVBQWUsY0FBYyxZQUFZLFNBQVMsVUFBVSxVQUFVLHVCQUF1QixhQUFhLFFBQVEsY0FBYyxTQUFTLGlCQUFpQixVQUFVLGVBQWUsV0FBVyxrQkFBa0Isb0JBQW9CLDJCQUEyQixrQkFBa0IseUJBQXlCLFlBQVksV0FBVyxXQUFXLG9CQUFvQixnQkFBZ0IsYUFBYSxVQUFVLFlBQVksZUFBZSxXQUFXLGVBQWUsV0FBVyxvQkFBb0IsZ0JBQWdCLGNBQWMsWUFBWSxvQkFBb0Isc0JBQXNCLFVBQVUsY0FBYyxtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixjQUFjLDRCQUE0QixpQkFBaUIsYUFBYSxvQkFBb0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGNBQWMsa0JBQWtCLGNBQWMsYUFBYSxrQkFBa0IsaUJBQWlCLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGFBQWEsWUFBWSxnQkFBZ0IsZUFBZSxzQkFBc0Isb0JBQW9CLGVBQWUsa0JBQWtCLGVBQWUsYUFBYSxlQUFlLGVBQWUsaUJBQWlCLGdCQUFnQixrQkFBa0IsbUJBQW1CLGlCQUFpQixjQUFjLG9CQUFvQixxQkFBcUIsYUFBYSxtQkFBbUIsY0FBYyxlQUFlLGVBQWUsZUFBZSxZQUFZLGFBQWEsbUJBQW1CLGVBQWUsQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsT0FBTyxZQUFZLG9CQUFBQSxRQUFVLFlBQVksVUFBVSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLbm5OLFVBQVUsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFFBQVEsT0FBTyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU0zQyxXQUFXLG9CQUFBQSxRQUFVLE1BQU07QUFBQSxNQUN6QixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsTUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLE1BQzVCLEtBQUssb0JBQUFBLFFBQVU7QUFBQSxNQUNmLGFBQWEsb0JBQUFBLFFBQVU7QUFBQSxJQUN6QixDQUFDO0FBQUEsSUFDRCxVQUFVLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUFBLElBQ3BDLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsRUFDOUI7QUFFQSxXQUFTLHNCQUFzQixZQUFZLFlBQVksVUFBVTtBQUMvRCxRQUFJLFVBQVU7QUFDWixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUk7QUFFSixRQUFJLFlBQVk7QUFDZCxhQUFPLElBQWMsU0FBUztBQUFBLFFBQzVCLE9BQU87QUFBQSxRQUNQLFNBQVM7QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNILFdBQVcsWUFBWTtBQUNyQixhQUFPLElBQWMsU0FBUztBQUFBLFFBQzVCLE9BQU87QUFBQSxRQUNQLFNBQVM7QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNILE9BQU87QUFDTCxhQUFPLElBQWMsU0FBUztBQUFBLFFBQzVCLE9BQU87QUFBQSxRQUNQLFNBQVM7QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFTyxXQUFTLHVCQUF1QixPQUFPLFlBQVk7QUFDeEQsUUFBSTtBQUVKLFFBQUksT0FBTztBQUNULHdCQUFrQjtBQUFBLElBQ3BCLFdBQVcsWUFBWTtBQUNyQix3QkFBa0I7QUFBQSxJQUNwQixPQUFPO0FBQ0wsd0JBQWtCO0FBQUEsSUFDcEI7QUFFQSxXQUFPO0FBQUEsRUFDVDs7O0FEN0tBLE1BQUlDLGVBQVksQ0FBQyxhQUFhLGVBQWUsY0FBYyxTQUFTLGdCQUFnQixhQUFhLFFBQVEsU0FBUyxZQUFZLFVBQVUsV0FBVyxRQUFRLE9BQU8sVUFBVSxhQUFhLGtCQUFrQixVQUFVLGNBQWMsV0FBVyxhQUFhO0FBRTNQLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBc0JsVCxNQUFJLDBCQUEwQjtBQUFBLElBQzVCLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLE9BQU87QUFBQSxFQUNUO0FBQ08sTUFBSSxhQUFhLE9BQU8sdUJBQXVCO0FBQ3RELE1BQUksdUJBQXVCO0FBQUEsSUFDekIsVUFBVTtBQUFBLElBQ1YsWUFBWTtBQUFBLEVBQ2Q7QUFDTyxNQUFJLG9CQUFvQixPQUFPLG9CQUFvQjtBQUtuRCxNQUFJLFVBQVUsU0FBU0MsU0FBUUMsUUFBTTtBQUMxQyxRQUFJLFlBQVlBLE9BQUssV0FDakIsY0FBY0EsT0FBSyxhQUNuQixjQUFjQSxPQUFLLFlBQ25CLFFBQVFBLE9BQUssT0FDYixvQkFBb0JBLE9BQUssY0FDekIsZUFBZSxzQkFBc0IsU0FBUyxTQUFTLG1CQUN2RCxpQkFBaUJBLE9BQUssV0FDdEIsWUFBWSxtQkFBbUIsU0FBUyxNQUFNLGdCQUM5Q0MsVUFBT0QsT0FBSyxNQUNaLFFBQVFBLE9BQUssT0FDYixXQUFXQSxPQUFLLFVBQ2hCLFNBQVNBLE9BQUssUUFDZCxVQUFVQSxPQUFLLFNBQ2YsT0FBT0EsT0FBSyxNQUNaLE1BQU1BLE9BQUssS0FDWCxTQUFTQSxPQUFLLFFBQ2QsaUJBQWlCQSxPQUFLLFdBQ3RCLFlBQVksbUJBQW1CLFNBQVMsV0FBVyxnQkFDbkQsaUJBQWlCQSxPQUFLLGdCQUN0QixjQUFjQSxPQUFLLFFBQ25CLFNBQVMsZ0JBQWdCLFNBQVMsYUFBYSxhQUMvQyxhQUFhQSxPQUFLLFlBQ2xCLFVBQVVBLE9BQUssU0FDZixjQUFjQSxPQUFLLGFBQ25CLE9BQU9ILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVuRCxRQUFJLGNBQWMsQ0FBQyxRQUFRLGFBQWEsSUFBSTtBQUM1QyxRQUFJLGFBQWEsZUFBZSxDQUFDO0FBQ2pDLFFBQUksY0FBYyxDQUFDLGVBQWUsV0FBVyxRQUFRLGNBQWMsQ0FBQyxXQUFXO0FBTy9FLFFBQUksT0FBTztBQUVYLFFBQUksZUFBZSxTQUFTTyxjQUFhLEdBQUc7QUFDMUMsVUFBSSxRQUFRLFNBQVMsRUFBRSxRQUFRO0FBQzdCLGFBQUssTUFBTTtBQUFBLE1BQ2I7QUFBQSxJQUNGO0FBRUEsUUFBSSxXQUFXLGNBQWM7QUFDM0IsVUFBSSxTQUFTLFVBQVUsY0FBYyxVQUFVO0FBQzdDLGNBQU0sSUFBSSxNQUFNLHNHQUFzRztBQUFBLE1BQ3hIO0FBQUEsSUFDRjtBQUVBLFFBQUksdUJBQXVCLGFBQWEsMEJBQTBCLE9BQU8sdUJBQXVCLFdBQVcsT0FBTyxXQUFXLFVBQVUsQ0FBQyxJQUFJO0FBQzVJLFFBQUksY0FBVSxvQkFBQUMsU0FBVyxXQUFXLHdCQUF3QixTQUFTLEdBQUcscUJBQXFCLE1BQU0sR0FBRztBQUFBLE1BQ3BHLHdCQUF3QjtBQUFBLE1BQ3hCLHlCQUF5QixtQkFBbUIsUUFBUSxtQkFBbUIsU0FBUyxTQUFTLGVBQWU7QUFBQSxNQUN4RyxvQkFBb0JGO0FBQUEsTUFDcEIseUJBQXlCO0FBQUEsTUFDekIsc0JBQXNCLGVBQWUsUUFBUSxlQUFlLFNBQVMsU0FBUyxXQUFXO0FBQUEsTUFDekYsc0JBQXNCO0FBQUEsSUFDeEIsR0FBRyxzQkFBc0IsU0FBUztBQUNsQyxRQUFJLFNBQVMsbUJBQW1CO0FBQ2hDLFFBQUksV0FBVyxjQUFjLEdBQUcsT0FBTyxRQUFRLGFBQWEsSUFBSTtBQUtoRSxRQUFJO0FBRUosUUFBSSxTQUFTLFdBQVcsWUFBWTtBQUNsQyxVQUFrQixvREFBZSxLQUFLLEtBQUssT0FBTyxVQUFVLFVBQVU7QUFDcEUsb0JBQVksSUFBYyxPQUFPO0FBQUEsVUFDL0IsV0FBVztBQUFBLFFBQ2IsR0FBZ0Isb0RBQWUsS0FBSyxJQUFJLFFBQVEsSUFBYyxPQUFPO0FBQUEsVUFDbkUsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUFBLFFBQ1AsQ0FBQyxDQUFDO0FBQUEsTUFDSixPQUFPO0FBQ0wsb0JBQVk7QUFBQSxNQUNkO0FBQUEsSUFDRjtBQUVBLFFBQUk7QUFFSixRQUFJQSxTQUFNO0FBQ1IsaUJBQXdCLGdDQUFBRyxRQUFNLGFBQWFILFNBQU07QUFBQSxRQUMvQyxlQUFXLG9CQUFBRSxTQUFXRixRQUFLLE1BQU0sV0FBVyxlQUFlO0FBQUEsTUFDN0QsQ0FBQztBQUFBLElBQ0g7QUFFQSxRQUFJO0FBRUosUUFBSSxhQUFhLFVBQVU7QUFDekIsd0JBQWtCLElBQWMsT0FBTztBQUFBLFFBQ3JDLFdBQVc7QUFBQSxNQUNiLEdBQUcsV0FBVyxRQUFRO0FBQUEsSUFDeEI7QUFNQSxRQUFJO0FBQ0osUUFBSSxzQkFBc0I7QUFFMUIsUUFBSSxtQkFBbUIsUUFBUSxtQkFBbUIsVUFBVSxlQUFlLE9BQU87QUFDaEYsNEJBQXNCLEdBQUcsT0FBTyxRQUFRLFdBQVc7QUFDbkQsMEJBQW9CLElBQWMsUUFBUTtBQUFBLFFBQ3hDLFdBQVc7QUFBQSxNQUNiLEdBQUcsSUFBYyxjQUFjTCxZQUFTO0FBQUEsUUFDdEMsSUFBSTtBQUFBLE1BQ04sR0FBRyxnQkFBZ0I7QUFBQSxRQUNqQixlQUFXLG9CQUFBTyxTQUFXLHNCQUFzQixtQkFBbUIsUUFBUSxtQkFBbUIsU0FBUyxTQUFTLGVBQWUsU0FBUztBQUFBLE1BQ3RJLENBQUMsQ0FBQyxDQUFDO0FBRUgsb0JBQWMsZUFBZTtBQUFBLElBQy9CO0FBTUEsUUFBSSxjQUFjLGNBQWMsV0FBVyxlQUFlLFFBQVc7QUFDbkUsaUJBQVcsYUFBYTtBQUFBLElBQzFCO0FBRUEsUUFBSTtBQUVKLFFBQUksWUFBWTtBQUNkLDZCQUF1QixJQUFjLGVBQWVQLFlBQVM7QUFBQSxRQUMzRCxvQkFBb0IsR0FBRyxPQUFPLFFBQVEsUUFBUSxFQUFFLE9BQU8sUUFBUTtBQUFBLE1BQ2pFLEdBQUcsWUFBWTtBQUFBLFFBQ2IsV0FBVyxTQUFTLFVBQVVTLE9BQU07QUFDbEMsaUJBQU9BO0FBQUEsUUFDVDtBQUFBLE1BQ0YsQ0FBQyxDQUFDO0FBQUEsSUFDSjtBQU9BLFFBQUk7QUFFSixRQUFJLENBQUMsY0FBYyxNQUFNO0FBQ3ZCLGlCQUFXLElBQWMsS0FBSztBQUFBLFFBQzVCLFdBQVc7QUFBQSxRQUNYO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLG9CQUFvQjtBQUFBLFFBQ3BCLEtBQUssc0JBQXNCO0FBQUEsVUFDekI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0YsQ0FBQztBQUFBLFFBQ0QsS0FBSyxTQUFTLElBQUlBLE9BQU07QUFDdEIsaUJBQU9BO0FBQUEsUUFDVDtBQUFBLE1BQ0YsR0FBRyxLQUFLO0FBQUEsSUFDVixXQUFXLGNBQWMsU0FBUztBQUNoQyxpQkFBVyxJQUFjLFVBQVU7QUFBQSxRQUNqQyxXQUFXO0FBQUEsUUFDWDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFFBQ1Ysb0JBQW9CLEdBQUcsT0FBTyxxQkFBcUIsR0FBRyxFQUFFLE9BQU8sUUFBUTtBQUFBLFFBQ3ZFLEtBQUssU0FBUyxJQUFJQSxPQUFNO0FBQ3RCLGlCQUFPQTtBQUFBLFFBQ1Q7QUFBQSxNQUNGLEdBQUcsS0FBSztBQUFBLElBQ1YsT0FBTztBQUNMLGlCQUFXO0FBQUEsSUFDYjtBQU1BLFFBQUksZUFBZTtBQUNuQixXQUFPLElBQWMsVUFBVVQsWUFBUztBQUFBLE1BQ3RDLFNBQVM7QUFBQSxNQUNULFdBQVc7QUFBQSxNQUNYLFNBQVMsY0FBYyxlQUFlO0FBQUEsTUFDdEMsT0FBTyxhQUFhLFlBQVk7QUFBQSxNQUNoQyxXQUFXLGNBQWMsVUFBVSxRQUFRO0FBQUEsTUFDM0MsV0FBVyxVQUFVLFFBQVE7QUFBQSxNQUM3QjtBQUFBLElBQ0YsR0FBRyxJQUFJLEdBQUcsaUJBQWlCLElBQWMsT0FBTztBQUFBLE1BQzlDLFdBQVc7QUFBQSxJQUNiLEdBQUcsSUFBYyxVQUFVO0FBQUEsTUFDekIsSUFBSSxHQUFHLE9BQU8sUUFBUSxPQUFPO0FBQUEsTUFDN0IsV0FBVztBQUFBLE1BQ1gsTUFBTTtBQUFBLElBQ1IsR0FBRyxJQUFjLGNBQWMsTUFBTSxRQUFRLENBQUMsR0FBRyxlQUFlLElBQWMsU0FBUztBQUFBLE1BQ3JGLElBQUk7QUFBQSxNQUNKLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxJQUNiLEdBQUcsSUFBYyxLQUFLLE1BQU0sV0FBVyxDQUFDLEdBQUcsWUFBWSxJQUFjLE9BQU87QUFBQSxNQUMxRSxXQUFXO0FBQUEsSUFDYixHQUFHLFFBQVEsQ0FBQyxHQUFHLG1CQUFtQixXQUFXLGNBQWMsVUFBVSxJQUFjLE9BQU87QUFBQSxNQUN4RixXQUFXO0FBQUEsSUFDYixHQUFHLE1BQU0sR0FBRyxvQkFBb0I7QUFBQSxFQUNsQztBQUNBLFVBQVEsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLbEIsUUFBUSxvQkFBQVUsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt2RyxXQUFXLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLFVBQVUsT0FBTyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLdEQsUUFBUSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2xCLE9BQU8sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxRQUFRLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3RGLE9BQU8sb0JBQUFBLFFBQVUsSUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3JCLGNBQWMsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXBFLFdBQVcsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT3RDLGFBQWEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt2QixNQUFNLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxRQUFRLFlBQVksb0JBQUFBLFFBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtqRixVQUFVLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLcEIsU0FBUyxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsS0FBSyxZQUFZLG9CQUFBQSxRQUFVLEtBQUssVUFBVSxDQUFDO0FBQUEsSUFDbkYsWUFBWSxvQkFBQUEsUUFBVTtBQUFBLElBQ3RCLE1BQU0sb0JBQUFBLFFBQVU7QUFBQSxJQUNoQixRQUFRLG9CQUFBQSxRQUFVO0FBQUEsSUFDbEIsS0FBSyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNZixnQkFBZ0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPMUIsU0FBUyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS25CLGFBQWEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt2QixZQUFZLG9CQUFBQSxRQUFVLE1BQU07QUFBQSxNQUMxQixNQUFNLG9CQUFBQSxRQUFVO0FBQUEsTUFDaEIsU0FBUyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BU25CLE9BQU8sb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFdBQVcsVUFBVSxRQUFRLFNBQVMsV0FBVyxTQUFTLENBQUM7QUFBQSxNQUNuRixNQUFNLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFTdEMsT0FBTyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsUUFBUSxTQUFTLE1BQU0sQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BU2hELFlBQVksb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQVN0QixXQUFXLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BZXJCLFlBQVksb0JBQUFBLFFBQVU7QUFBQSxNQUN0QixRQUFRLG9CQUFBQSxRQUFVO0FBQUEsTUFDbEIsS0FBSyxvQkFBQUEsUUFBVTtBQUFBLE1BQ2YsTUFBTSxvQkFBQUEsUUFBVSxNQUFNLENBQUMsVUFBVSxRQUFRLENBQUM7QUFBQSxNQUMxQyxXQUFXLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS3hCLFVBQVUsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxpQkFBaUIsY0FBYyx1QkFBdUIsWUFBWSxhQUFhLFNBQVMsZ0JBQWdCLGNBQWMsVUFBVSxZQUFZLGdCQUFnQixRQUFRLGFBQWEsYUFBYSxjQUFjLFdBQVcsY0FBYyxZQUFZLFlBQVksZ0JBQWdCLFVBQVUsUUFBUSxhQUFhLFFBQVEsbUJBQW1CLGlCQUFpQixVQUFVLGNBQWMsU0FBUyxTQUFTLE9BQU8sWUFBWSxZQUFZLGFBQWEsWUFBWSxTQUFTLHVCQUF1QixTQUFTLHFCQUFxQixTQUFTLGdCQUFnQixlQUFlLGNBQWMsV0FBVyxXQUFXLFNBQVMsV0FBVyxXQUFXLGNBQWMsYUFBYSxtQkFBbUIsd0JBQXdCLG1CQUFtQixvQkFBb0Isc0JBQXNCLG9CQUFvQixRQUFRLGlCQUFpQixxQkFBcUIsd0JBQXdCLHVCQUF1Qix5QkFBeUIsU0FBUyw4QkFBOEIsd0JBQXdCLGNBQWMsWUFBWSxPQUFPLGdCQUFnQixrQkFBa0IsWUFBWSxXQUFXLGVBQWUsZUFBZSxZQUFZLGdCQUFnQixpQkFBaUIsYUFBYSxPQUFPLG1CQUFtQixvQkFBb0IsWUFBWSxxQkFBcUIsbUJBQW1CLG9CQUFvQixjQUFjLG1CQUFtQixtQkFBbUIsaUJBQWlCLDhCQUE4Qiw0QkFBNEIsaUJBQWlCLGdCQUFnQix5QkFBeUIseUJBQXlCLHVCQUF1Qix5QkFBeUIsd0JBQXdCLHNCQUFzQixjQUFjLHFCQUFxQiw0QkFBNEIsNkJBQTZCLHlCQUF5QiwwQkFBMEIsY0FBYyxnQkFBZ0IsZUFBZSxtQkFBbUIsY0FBYyx1QkFBdUIsU0FBUyxTQUFTLFVBQVUsT0FBTyxVQUFVLFFBQVEsVUFBVSxjQUFjLGdCQUFnQixPQUFPLGFBQWEsYUFBYSxlQUFlLFdBQVcsZUFBZSxVQUFVLFFBQVEsWUFBWSxRQUFRLGVBQWUsZ0JBQWdCLHFCQUFxQixjQUFjLGFBQWEsaUJBQWlCLGNBQWMsa0JBQWtCLFlBQVksUUFBUSxVQUFVLFdBQVcsU0FBUyxRQUFRLGtCQUFrQixZQUFZLFFBQVEsV0FBVyxTQUFTLGdCQUFnQixXQUFXLFFBQVEsUUFBUSxhQUFhLFNBQVMsZ0JBQWdCLGNBQWMsYUFBYSxjQUFjLHNCQUFzQixnQkFBZ0IsYUFBYSxtQkFBbUIsa0JBQWtCLGdCQUFnQixpQkFBaUIsZUFBZSxXQUFXLFVBQVUsTUFBTSxZQUFZLFlBQVksZUFBZSxjQUFjLGVBQWUsWUFBWSxrQkFBa0IsaUJBQWlCLFVBQVUsV0FBVyxhQUFhLGNBQWMsY0FBYyxhQUFhLFFBQVEsUUFBUSxXQUFXLFFBQVEsWUFBWSxXQUFXLGVBQWUsaUJBQWlCLGNBQWMsaUJBQWlCLGFBQWEsaUJBQWlCLGFBQWEseUJBQXlCLFlBQVksYUFBYSx1QkFBdUIsWUFBWSxtQkFBbUIsaUJBQWlCLGNBQWMsa0JBQWtCLGVBQWUsb0JBQW9CLHFCQUFxQix3QkFBd0IsWUFBWSxXQUFXLGVBQWUsY0FBYyxhQUFhLGNBQWMsZUFBZSxlQUFlLFdBQVcsZUFBZSxhQUFhLGNBQWMsa0JBQWtCLGVBQWUsZ0JBQWdCLFlBQVksaUJBQWlCLGVBQWUsZUFBZSxhQUFhLGFBQWEscUJBQXFCLGVBQWUsV0FBVyxnQkFBZ0Isa0JBQWtCLGdCQUFnQixhQUFhLGdCQUFnQixrQkFBa0IsY0FBYyxhQUFhLGNBQWMsZUFBZSxlQUFlLHVCQUF1QixXQUFXLGtCQUFrQixjQUFjLGlCQUFpQixrQkFBa0IsaUJBQWlCLHNCQUFzQixVQUFVLDBCQUEwQixvQkFBb0IsbUJBQW1CLGlCQUFpQixhQUFhLFVBQVUsUUFBUSxZQUFZLFlBQVksYUFBYSxVQUFVLFNBQVMsaUJBQWlCLGNBQWMsWUFBWSxTQUFTLGlCQUFpQix1QkFBdUIsVUFBVSxpQkFBaUIsUUFBUSxhQUFhLFVBQVUsUUFBUSxlQUFlLFVBQVUsV0FBVyxVQUFVLHVCQUF1QixXQUFXLGlCQUFpQixjQUFjLGVBQWUsYUFBYSxXQUFXLFNBQVMsV0FBVyxVQUFVLFdBQVcsT0FBTyxhQUFhLGVBQWUsUUFBUSxjQUFjLFFBQVEsZ0JBQWdCLHNCQUFzQixVQUFVLFFBQVEsb0JBQW9CLFNBQVMscUJBQXFCLFdBQVcsaUJBQWlCLFlBQVksZ0JBQWdCLGFBQWEsUUFBUSxtQkFBbUIsU0FBUyxVQUFVLHFCQUFxQix3QkFBd0IsZUFBZSxrQkFBa0IsMEJBQTBCLDBCQUEwQixpQkFBaUIsU0FBUyxTQUFTLGFBQWEsWUFBWSxZQUFZLGFBQWEsVUFBVSxZQUFZLGFBQWEsVUFBVSxhQUFhLGtCQUFrQixjQUFjLG1CQUFtQixrQkFBa0IsbUJBQW1CLGlCQUFpQixrQkFBa0IsU0FBUyxRQUFRLGNBQWMsYUFBYSxXQUFXLFVBQVUsYUFBYSxPQUFPLGVBQWUsV0FBVyx1QkFBdUIsd0JBQXdCLHNCQUFzQixtQkFBbUIsT0FBTyxRQUFRLGVBQWUsWUFBWSxlQUFlLGVBQWUsY0FBYyxZQUFZLFNBQVMsVUFBVSxVQUFVLHVCQUF1QixhQUFhLFFBQVEsY0FBYyxTQUFTLGlCQUFpQixVQUFVLGVBQWUsV0FBVyxrQkFBa0Isb0JBQW9CLDJCQUEyQixrQkFBa0IseUJBQXlCLFlBQVksV0FBVyxXQUFXLG9CQUFvQixnQkFBZ0IsYUFBYSxVQUFVLFlBQVksZUFBZSxXQUFXLGVBQWUsV0FBVyxvQkFBb0IsZ0JBQWdCLGNBQWMsWUFBWSxvQkFBb0Isc0JBQXNCLFVBQVUsY0FBYyxtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixjQUFjLDRCQUE0QixpQkFBaUIsYUFBYSxvQkFBb0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGNBQWMsa0JBQWtCLGNBQWMsYUFBYSxrQkFBa0IsaUJBQWlCLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGFBQWEsWUFBWSxnQkFBZ0IsZUFBZSxzQkFBc0Isb0JBQW9CLGVBQWUsa0JBQWtCLGVBQWUsYUFBYSxlQUFlLGVBQWUsaUJBQWlCLGdCQUFnQixrQkFBa0IsbUJBQW1CLGlCQUFpQixjQUFjLG9CQUFvQixxQkFBcUIsYUFBYSxtQkFBbUIsY0FBYyxlQUFlLGVBQWUsZUFBZSxZQUFZLGFBQWEsbUJBQW1CLGVBQWUsQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsT0FBTyxZQUFZLG9CQUFBQSxRQUFVLFlBQVksVUFBVSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLbm5OLFVBQVUsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFFBQVEsT0FBTyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQU0zQyxXQUFXLG9CQUFBQSxRQUFVLE1BQU07QUFBQSxRQUN6QixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsUUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLFFBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLFFBQzVCLEtBQUssb0JBQUFBLFFBQVU7QUFBQSxRQUNmLGFBQWEsb0JBQUFBLFFBQVU7QUFBQSxNQUN6QixDQUFDO0FBQUEsTUFDRCxVQUFVLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUFBLE1BQ3BDLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxNQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsTUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDOUIsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBS0QsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLEVBQ3ZCOzs7QUVuWUEsTUFBQUMsa0JBQWlDO0FBQ2pDLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7QUF6Q3ZCLFdBQVNDLFVBQVEsS0FBSztBQUFFO0FBQTJCLFFBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxPQUFPLGFBQWEsVUFBVTtBQUFFLE1BQUFBLFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU8sT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRyxPQUFPO0FBQUUsTUFBQUQsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBT0EsUUFBTyxPQUFPLFdBQVcsY0FBY0EsS0FBSSxnQkFBZ0IsVUFBVUEsU0FBUSxPQUFPLFlBQVksV0FBVyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHO0FBQUUsV0FBT0QsVUFBUSxHQUFHO0FBQUEsRUFBRztBQUV6WCxNQUFJRSxlQUFZLENBQUMsYUFBYSxNQUFNLFdBQVcsU0FBUyxZQUFZLFFBQVEsWUFBWSxjQUFjLGlCQUFpQixZQUFZLFlBQVk7QUFFL0ksV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFbFQsV0FBU0Msa0JBQWdCLFVBQVUsYUFBYTtBQUFFLFFBQUksRUFBRSxvQkFBb0IsY0FBYztBQUFFLFlBQU0sSUFBSSxVQUFVLG1DQUFtQztBQUFBLElBQUc7QUFBQSxFQUFFO0FBRXhKLFdBQVNDLG9CQUFrQixRQUFRLE9BQU87QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUUsVUFBSSxhQUFhLE1BQU0sQ0FBQztBQUFHLGlCQUFXLGFBQWEsV0FBVyxjQUFjO0FBQU8saUJBQVcsZUFBZTtBQUFNLFVBQUksV0FBVztBQUFZLG1CQUFXLFdBQVc7QUFBTSxhQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUssVUFBVTtBQUFBLElBQUc7QUFBQSxFQUFFO0FBRTVULFdBQVNDLGVBQWEsYUFBYSxZQUFZLGFBQWE7QUFBRSxRQUFJO0FBQVksTUFBQUQsb0JBQWtCLFlBQVksV0FBVyxVQUFVO0FBQUcsUUFBSTtBQUFhLE1BQUFBLG9CQUFrQixhQUFhLFdBQVc7QUFBRyxXQUFPO0FBQUEsRUFBYTtBQUV0TixXQUFTRSxZQUFVLFVBQVUsWUFBWTtBQUFFLFFBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQUUsWUFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsSUFBRztBQUFFLGFBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRSxDQUFDO0FBQUcsUUFBSTtBQUFZLE1BQUFDLGtCQUFnQixVQUFVLFVBQVU7QUFBQSxFQUFHO0FBRWhZLFdBQVNBLGtCQUFnQixHQUFHLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxrQkFBa0IsU0FBU0Esa0JBQWdCQyxJQUFHQyxJQUFHO0FBQUUsTUFBQUQsR0FBRSxZQUFZQztBQUFHLGFBQU9EO0FBQUEsSUFBRztBQUFHLFdBQU9ELGtCQUFnQixHQUFHLENBQUM7QUFBQSxFQUFHO0FBRXpLLFdBQVNHLGVBQWEsU0FBUztBQUFFLFFBQUksNEJBQTRCQyw0QkFBMEI7QUFBRyxXQUFPLFNBQVMsdUJBQXVCO0FBQUUsVUFBSSxRQUFRQyxrQkFBZ0IsT0FBTyxHQUFHO0FBQVEsVUFBSSwyQkFBMkI7QUFBRSxZQUFJLFlBQVlBLGtCQUFnQixJQUFJLEVBQUU7QUFBYSxpQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUFHLE9BQU87QUFBRSxpQkFBUyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFFLGFBQU9DLDZCQUEyQixNQUFNLE1BQU07QUFBQSxJQUFHO0FBQUEsRUFBRztBQUV4YSxXQUFTQSw2QkFBMkJDLE9BQU0sTUFBTTtBQUFFLFFBQUksU0FBU2pCLFVBQVEsSUFBSSxNQUFNLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFBRSxhQUFPO0FBQUEsSUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLElBQUc7QUFBRSxXQUFPa0IseUJBQXVCRCxLQUFJO0FBQUEsRUFBRztBQUUvUixXQUFTQyx5QkFBdUJELE9BQU07QUFBRSxRQUFJQSxVQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksZUFBZSwyREFBMkQ7QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXJLLFdBQVNILDhCQUE0QjtBQUFFLFFBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsYUFBTztBQUFPLFFBQUksUUFBUSxVQUFVO0FBQU0sYUFBTztBQUFPLFFBQUksT0FBTyxVQUFVO0FBQVksYUFBTztBQUFNLFFBQUk7QUFBRSxjQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLENBQUMsR0FBRyxXQUFZO0FBQUEsTUFBQyxDQUFDLENBQUM7QUFBRyxhQUFPO0FBQUEsSUFBTSxTQUFTLEdBQUc7QUFBRSxhQUFPO0FBQUEsSUFBTztBQUFBLEVBQUU7QUFFeFUsV0FBU0Msa0JBQWdCLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsU0FBU0Esa0JBQWdCSixJQUFHO0FBQUUsYUFBT0EsR0FBRSxhQUFhLE9BQU8sZUFBZUEsRUFBQztBQUFBLElBQUc7QUFBRyxXQUFPSSxrQkFBZ0IsQ0FBQztBQUFBLEVBQUc7QUFFNU0sV0FBU0ksa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUFjaE4sTUFBSSxxQkFBcUI7QUFBQSxJQUN2QixRQUFRO0FBQUEsRUFDVjtBQUNPLE1BQUlDLFNBQVEsT0FBTyxrQkFBa0I7QUFDckMsTUFBSSxjQUEyQix5QkFBVSxZQUFZO0FBQzFELElBQUFYLFlBQVVZLGNBQWEsVUFBVTtBQUVqQyxRQUFJLFNBQVNSLGVBQWFRLFlBQVc7QUFFckMsYUFBU0EsZUFBYztBQUNyQixVQUFJO0FBRUosTUFBQWYsa0JBQWdCLE1BQU1lLFlBQVc7QUFFakMsZUFBUyxPQUFPLFVBQVUsUUFBUSxPQUFPLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxRQUFRO0FBQ3ZGLGFBQUssSUFBSSxJQUFJLFVBQVUsSUFBSTtBQUFBLE1BQzdCO0FBRUEsY0FBUSxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBRXJELE1BQUFGLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxZQUFZLE1BQVM7QUFFcEUsTUFBQUMsa0JBQWdCRCx5QkFBdUIsS0FBSyxHQUFHLGVBQWUsU0FBVSxPQUFPO0FBQzdFLGNBQU0sV0FBVztBQUVqQixZQUFJLE1BQU0sTUFBTSxVQUFVO0FBQ3hCLGdCQUFNLE1BQU0sU0FBUyxLQUFLO0FBQUEsUUFDNUI7QUFFQSxjQUFNLHdCQUF3QjtBQUFBLE1BQ2hDLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFWLGVBQWFhLGNBQWEsQ0FBQztBQUFBLE1BQ3pCLEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxvQkFBb0I7QUFDbEMsYUFBSyx3QkFBd0I7QUFBQSxNQUMvQjtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLHFCQUFxQjtBQUNuQyxhQUFLLHdCQUF3QjtBQUFBLE1BQy9CO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVNDLFVBQVM7QUFDdkIsWUFBSSxjQUFjLEtBQUssT0FDbkIsWUFBWSxZQUFZLFdBQ3hCLEtBQUssWUFBWSxJQUNqQixVQUFVLFlBQVksU0FDdEIsUUFBUSxZQUFZLE9BQ3BCLFdBQVcsWUFBWSxVQUN2QixPQUFPLFlBQVksTUFDbkIsV0FBVyxZQUFZLFVBQ3ZCLGFBQWEsWUFBWSxZQUN6QixnQkFBZ0IsWUFBWSxlQUM1QixXQUFXLFlBQVksVUFDdkIsYUFBYSxZQUFZLFlBQ3pCLE9BQU9sQiw0QkFBeUIsYUFBYUYsWUFBUztBQUUxRCxZQUFJLGNBQVUsb0JBQUFxQixTQUFXLGVBQWUsUUFBUSxtQkFBbUIsSUFBSSxHQUFHO0FBQUEsVUFDeEUsd0JBQXdCLENBQUM7QUFBQSxVQUN6QiwyQkFBMkI7QUFBQSxRQUM3QixHQUFHLFNBQVM7QUFDWixZQUFJLG1CQUFlLG9CQUFBQSxTQUFXLHNCQUFzQixlQUFlLFFBQVEsZUFBZSxTQUFTLFNBQVMsV0FBVyxTQUFTO0FBQ2hJLFlBQUk7QUFFSixZQUFJLE9BQU87QUFDVCwwQkFBZ0IsSUFBYyxTQUFTcEIsWUFBUyxDQUFDLEdBQUcsWUFBWTtBQUFBLFlBQzlELFdBQVc7QUFBQSxZQUNYLFNBQVM7QUFBQSxVQUNYLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDWDtBQUVBLGVBQU8sSUFBYyxPQUFPO0FBQUEsVUFDMUIsV0FBVztBQUFBLFFBQ2IsR0FBRyxJQUFjLFNBQVNBLFlBQVM7QUFBQSxVQUNqQyxXQUFXO0FBQUEsVUFDWCxNQUFNO0FBQUEsVUFDTjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsS0FBSyxLQUFLO0FBQUEsUUFDWixHQUFHLElBQUksQ0FBQyxHQUFHLElBQWMsT0FBTztBQUFBLFVBQzlCLFdBQVc7QUFBQSxRQUNiLENBQUMsR0FBRyxhQUFhO0FBQUEsTUFDbkI7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUywwQkFBMEI7QUFDeEMsWUFBSSxLQUFLLFVBQVU7QUFDakIsZUFBSyxTQUFTLGdCQUFnQixLQUFLLE1BQU07QUFBQSxRQUMzQztBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUVGLFdBQU9rQjtBQUFBLEVBQ1QsRUFBRSx5QkFBUztBQUVYLEVBQUFGLGtCQUFnQixhQUFhLGdCQUFnQjtBQUFBLElBQzNDLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLGVBQWU7QUFBQSxJQUNmLFlBQVk7QUFBQSxFQUNkLENBQUM7QUFFRCxjQUFZLFlBQVk7QUFBQSxJQUN0QixJQUFJLG9CQUFBSyxRQUFVLE9BQU87QUFBQSxJQUNyQixTQUFTLG9CQUFBQSxRQUFVO0FBQUEsSUFDbkIsVUFBVSxvQkFBQUEsUUFBVSxJQUFJO0FBQUE7QUFBQSxJQUV4QixVQUFVLG9CQUFBQSxRQUFVO0FBQUEsSUFDcEIsT0FBTyxvQkFBQUEsUUFBVTtBQUFBLElBQ2pCLE1BQU0sb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUFBLElBQ2hDLFVBQVUsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtwQixZQUFZLG9CQUFBQSxRQUFVO0FBQUEsSUFDdEIsZUFBZSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3pCLFlBQVksb0JBQUFBLFFBQVUsTUFBTTtBQUFBLE1BQzFCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxNQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsTUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDOUIsQ0FBQztBQUFBLElBQ0QsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxFQUM5Qjs7O0FDcktBLE1BQUFDLGtCQUFrQztBQUNsQyxNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCO0FBakJ2QixNQUFJQyxlQUFZLENBQUMsWUFBWSxhQUFhLGNBQWMsY0FBYyxjQUFjLGtCQUFrQixhQUFhLFFBQVEsV0FBVztBQUV0SSxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWNsVCxNQUFJLDJCQUEyQjtBQUFBLElBQzdCLE1BQU07QUFBQSxJQUNOLElBQUk7QUFBQSxJQUNKLEdBQUc7QUFBQSxJQUNILEdBQUc7QUFBQSxJQUNILEdBQUc7QUFBQSxJQUNILElBQUk7QUFBQSxFQUNOO0FBQ08sTUFBSSxlQUFlLE9BQU8sd0JBQXdCO0FBQ3pELE1BQUksMkJBQTJCO0FBQUEsSUFDN0IsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsVUFBVTtBQUFBLEVBQ1o7QUFDTyxNQUFJLGNBQWMsT0FBTyx3QkFBd0I7QUFDeEQsTUFBSSwrQkFBK0I7QUFBQSxJQUNqQyxXQUFXO0FBQUEsSUFDWCxTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixjQUFjO0FBQUEsSUFDZCxhQUFhO0FBQUEsSUFDYixhQUFhO0FBQUEsRUFDZjtBQUNPLE1BQUksbUJBQW1CLE9BQU8sNEJBQTRCO0FBQ2pFLE1BQUksMEJBQTBCO0FBQUEsSUFDNUIsS0FBSztBQUFBLElBQ0wsWUFBWTtBQUFBLElBQ1osUUFBUTtBQUFBLElBQ1IsZUFBZTtBQUFBLEVBQ2pCO0FBQ08sTUFBSSxhQUFhLE9BQU8sdUJBQXVCO0FBRXRELE1BQUlDLGtCQUFpQixTQUFTQSxnQkFBZSxXQUFXO0FBQ3RELFdBQU8sQ0FBQyxPQUFPLE1BQU0sRUFBRSxTQUFTLFNBQVM7QUFBQSxFQUMzQztBQUVPLE1BQUksZUFBNEIsZ0RBQVcsU0FBVUMsUUFBTSxLQUFLO0FBQ3JFLFFBQUksV0FBV0EsT0FBSyxVQUNoQixZQUFZQSxPQUFLLFdBQ2pCLGtCQUFrQkEsT0FBSyxZQUN2QixhQUFhLG9CQUFvQixTQUFTLE1BQU0saUJBQ2hELGtCQUFrQkEsT0FBSyxZQUN2QixhQUFhLG9CQUFvQixTQUFTLFlBQVksaUJBQ3RELGtCQUFrQkEsT0FBSyxZQUN2QixhQUFhLG9CQUFvQixTQUFTLE9BQU8saUJBQ2pELHNCQUFzQkEsT0FBSyxnQkFDM0IsaUJBQWlCLHdCQUF3QixTQUFTLGNBQWMscUJBQ2hFLGlCQUFpQkEsT0FBSyxXQUN0QixZQUFZLG1CQUFtQixTQUFTLFFBQVEsZ0JBQ2hELFlBQVlBLE9BQUssTUFDakIsT0FBTyxjQUFjLFNBQVMsUUFBUSxXQUN0QyxpQkFBaUJBLE9BQUssV0FDdEIsWUFBWSxtQkFBbUIsU0FBUyxRQUFRLGdCQUNoRCxPQUFPSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFbkQsUUFBSSxjQUFVLG9CQUFBTSxTQUFXLGdCQUFnQix5QkFBeUIsVUFBVSxHQUFHLHlCQUF5QixVQUFVLEdBQUcsNkJBQTZCLGNBQWMsR0FBRyx3QkFBd0IsU0FBUyxHQUFHO0FBQUEsTUFDck0sNEJBQTRCO0FBQUEsTUFDNUIsc0JBQXNCO0FBQUEsSUFDeEIsR0FBRyxTQUFTO0FBRVosUUFBSSxDQUFDRixnQkFBZSxTQUFTLEdBQUc7QUFDOUIsWUFBTSxJQUFJLE1BQU0sR0FBRyxPQUFPLFdBQVcsb0RBQW9ELENBQUM7QUFBQSxJQUM1RjtBQUVBLFdBQU8sY0FBYyxTQUFTLElBQWMsUUFBUUgsWUFBUztBQUFBLE1BQzNELFdBQVc7QUFBQSxNQUNYO0FBQUEsSUFDRixHQUFHLElBQUksR0FBRyxRQUFRLElBQUksSUFBYyxPQUFPQSxZQUFTO0FBQUEsTUFDbEQsV0FBVztBQUFBLE1BQ1g7QUFBQSxJQUNGLEdBQUcsSUFBSSxHQUFHLFFBQVE7QUFBQSxFQUNwQixDQUFDO0FBQ0QsZUFBYSxZQUFZO0FBQUEsSUFDdkIsWUFBWSxvQkFBQU0sUUFBVSxNQUFNLENBQUMsV0FBVyxhQUFhLFdBQVcsVUFBVSxVQUFVLENBQUM7QUFBQSxJQUNyRixXQUFXLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxPQUFPLE1BQU0sQ0FBQztBQUFBLElBQzFDLFdBQVcsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLE9BQU8sY0FBYyxVQUFVLGVBQWUsQ0FBQztBQUFBLElBQzNFLFlBQVksb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFFBQVEsTUFBTSxLQUFLLEtBQUssS0FBSyxJQUFJLENBQUM7QUFBQSxJQUMvRCxnQkFBZ0Isb0JBQUFBLFFBQVUsTUFBTSxDQUFDLGFBQWEsV0FBVyxVQUFVLGdCQUFnQixlQUFlLGFBQWEsQ0FBQztBQUFBLElBQ2hILFlBQVksb0JBQUFBLFFBQVU7QUFBQSxJQUN0QixNQUFNLG9CQUFBQSxRQUFVO0FBQUEsSUFDaEIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxFQUM5QjtBQUNBLGVBQWEsY0FBYzs7O0FDekYzQixNQUFBQyxrQkFBa0I7QUFDbEIsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1QjtBQW5CdkIsTUFBSUMsZUFBWSxDQUFDLFlBQVksYUFBYSxRQUFRLFdBQVc7QUFFN0QsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0Msa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUFFaE4sV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhM1MsTUFBSSxhQUFhLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRTtBQUMvQyxNQUFJLGNBQWMsU0FBU0MsYUFBWUMsUUFBTTtBQUNsRCxRQUFJLFdBQVdBLE9BQUssVUFDaEIsWUFBWUEsT0FBSyxXQUNqQixZQUFZQSxPQUFLLE1BQ2pCLE9BQU8sY0FBYyxTQUFTLE9BQU8sV0FDckMsaUJBQWlCQSxPQUFLLFdBQ3RCQyxjQUFZLG1CQUFtQixTQUFTLFFBQVEsZ0JBQ2hELE9BQU9KLDRCQUF5QkcsUUFBTU4sWUFBUztBQUVuRCxzQkFBa0IsSUFBSTtBQUN0QixRQUFJLGNBQVUsb0JBQUFRLFNBQVcsZUFBZU4sa0JBQWdCO0FBQUEsTUFDdEQsNkJBQTZCLENBQUM7QUFBQSxJQUNoQyxHQUFHLHdCQUF3QixPQUFPLElBQUksR0FBRyxPQUFPLFNBQVMsV0FBVyxXQUFXLFFBQVEsSUFBSSxLQUFLLElBQUksTUFBUyxHQUFHLFNBQVM7QUFDekg7QUFBQTtBQUFBLE1BQ0UsSUFBY0ssYUFBV04sWUFBUztBQUFBLFFBQ2hDLFdBQVc7QUFBQSxNQUNiLEdBQUcsSUFBSSxHQUFHLFFBQVE7QUFBQTtBQUFBLEVBRXRCO0FBQ0EsY0FBWSxZQUFZO0FBQUEsSUFDdEIsV0FBVyxvQkFBQVEsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM1QixNQUFNLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFBQSxJQUN4RSxXQUFXLG9CQUFBQSxRQUFVO0FBQUEsRUFDdkI7QUFFQSxXQUFTLGtCQUFrQixPQUFPO0FBQ2hDLFFBQUksY0FBYyxDQUFDLE1BQU0sUUFBVyxNQUFNLEtBQUssRUFBRSxPQUFPLFVBQVU7QUFFbEUsUUFBSSxZQUFZLFFBQVEsS0FBSyxNQUFNLElBQUk7QUFDckMsWUFBTSxJQUFJLE1BQU0sbUdBQW1HLE9BQU8sT0FBTyxHQUFHLENBQUM7QUFBQSxJQUN2STtBQUFBLEVBQ0Y7OztBQ2xCQSxNQUFBQyxrQkFBK0M7QUFDL0MsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1Qjs7O0FDRnZCLE1BQUFDLGtCQUEyQztBQUMzQyxNQUFBQyxzQkFBc0I7OztBQ3ZCdEIsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7QUFqQnZCLE1BQUlDLGVBQVksQ0FBQyxhQUFhLFdBQVcsTUFBTTtBQUUvQyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWdCbFQsTUFBSUMsc0JBQXFCO0FBQUEsSUFDdkIsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLEVBQ0w7QUFDTyxNQUFJQyxTQUFRLE9BQU9ELG1CQUFrQjtBQUNyQyxNQUFJLGtDQUFrQyxTQUFTRSxpQ0FBZ0NDLFFBQU07QUFDMUYsUUFBSSxZQUFZQSxPQUFLLFdBQ2pCLFVBQVVBLE9BQUssU0FDZixZQUFZQSxPQUFLLE1BQ2pCQyxRQUFPLGNBQWMsU0FBUyxNQUFNLFdBQ3BDLE9BQU9OLDRCQUF5QkssUUFBTVAsWUFBUztBQUVuRCxRQUFJLGNBQVUsb0JBQUFTLFNBQVcsbUNBQW1DTCxvQkFBbUJJLEtBQUksR0FBRyxTQUFTO0FBQy9GLFdBQU8sSUFBYyxTQUFTO0FBQUEsTUFDNUIsT0FBTztBQUFBLE1BQ1AsU0FBUztBQUFBLElBQ1gsR0FBRyxTQUFVLE9BQU87QUFDbEIsYUFBTyxJQUFjLFVBQVVQLFlBQVM7QUFBQSxRQUN0QyxNQUFNO0FBQUEsUUFDTixXQUFXO0FBQUEsUUFDWDtBQUFBLFFBQ0EsY0FBYztBQUFBLE1BQ2hCLEdBQUcsSUFBSSxHQUFHLElBQWMsU0FBUztBQUFBLFFBQy9CLFdBQVc7QUFBQSxRQUNYLE1BQU07QUFBQSxNQUNSLENBQUMsQ0FBQztBQUFBLElBQ0osQ0FBQztBQUFBLEVBQ0g7QUFDQSxrQ0FBZ0MsWUFBWTtBQUFBLElBQzFDLFdBQVcsb0JBQUFTLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDNUIsTUFBTSxvQkFBQUEsUUFBVTtBQUFBLEVBQ2xCOzs7QUN4Q0EsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7QUFqQnZCLE1BQUlDLGVBQVksQ0FBQyxhQUFhLFdBQVcsUUFBUSxXQUFXLFFBQVEsT0FBTztBQUUzRSxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWMzUyxNQUFJLGlDQUFpQyxTQUFTQyxnQ0FBK0JDLFFBQU07QUFDeEYsUUFBSSxZQUFZQSxPQUFLLFdBQ2pCLFVBQVVBLE9BQUssU0FDZixPQUFPQSxPQUFLLE1BQ1osVUFBVUEsT0FBSyxTQUNmQyxRQUFPRCxPQUFLLE1BQ1osUUFBUUEsT0FBSyxPQUNiLE9BQU9ILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVuRCxRQUFJLGNBQVUsb0JBQUFPLFNBQVcsa0NBQWtDLFdBQVc7QUFBQSxNQUNwRSw2Q0FBNkM7QUFBQSxJQUMvQyxDQUFDO0FBRUQsUUFBSSxTQUFTO0FBQ1gsYUFBTyxJQUFjLFVBQVVOLFlBQVM7QUFBQSxRQUN0QyxNQUFNO0FBQUEsUUFDTjtBQUFBLFFBQ0EsV0FBVztBQUFBLFFBQ1gsS0FBSztBQUFBLE1BQ1AsR0FBRyxJQUFJLEdBQUcsSUFBYyxTQUFTO0FBQUEsUUFDL0IsV0FBVztBQUFBLFFBQ1gsZUFBZTtBQUFBLFFBQ2YsTUFBTUs7QUFBQSxRQUNOO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQyxDQUFDO0FBQUEsSUFDSjtBQUVBLFdBQU8sSUFBYyxRQUFRTCxZQUFTO0FBQUEsTUFDcEMsV0FBVztBQUFBLE1BQ1gsS0FBSztBQUFBLElBQ1AsR0FBRyxJQUFJLEdBQUcsSUFBYyxTQUFTO0FBQUEsTUFDL0IsV0FBVztBQUFBLE1BQ1gsZUFBZTtBQUFBLE1BQ2YsTUFBTUs7QUFBQSxNQUNOO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUNBLGlDQUErQixZQUFZO0FBQUEsSUFDekMsV0FBVyxvQkFBQUUsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM1QixNQUFNLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsaUJBQWlCLGNBQWMsdUJBQXVCLFlBQVksYUFBYSxTQUFTLGdCQUFnQixjQUFjLFVBQVUsWUFBWSxnQkFBZ0IsUUFBUSxhQUFhLGFBQWEsY0FBYyxXQUFXLGNBQWMsWUFBWSxZQUFZLGdCQUFnQixVQUFVLFFBQVEsYUFBYSxRQUFRLG1CQUFtQixpQkFBaUIsVUFBVSxjQUFjLFNBQVMsU0FBUyxPQUFPLFlBQVksWUFBWSxhQUFhLFlBQVksU0FBUyx1QkFBdUIsU0FBUyxxQkFBcUIsU0FBUyxnQkFBZ0IsZUFBZSxjQUFjLFdBQVcsV0FBVyxTQUFTLFdBQVcsV0FBVyxjQUFjLGFBQWEsbUJBQW1CLHdCQUF3QixtQkFBbUIsb0JBQW9CLHNCQUFzQixvQkFBb0IsUUFBUSxpQkFBaUIscUJBQXFCLHdCQUF3Qix1QkFBdUIseUJBQXlCLFNBQVMsOEJBQThCLHdCQUF3QixjQUFjLFlBQVksT0FBTyxnQkFBZ0Isa0JBQWtCLFlBQVksV0FBVyxlQUFlLGVBQWUsWUFBWSxnQkFBZ0IsaUJBQWlCLGFBQWEsT0FBTyxtQkFBbUIsb0JBQW9CLFlBQVkscUJBQXFCLG1CQUFtQixvQkFBb0IsY0FBYyxtQkFBbUIsbUJBQW1CLGlCQUFpQiw4QkFBOEIsNEJBQTRCLGlCQUFpQixnQkFBZ0IseUJBQXlCLHlCQUF5Qix1QkFBdUIseUJBQXlCLHdCQUF3QixzQkFBc0IsY0FBYyxxQkFBcUIsNEJBQTRCLDZCQUE2Qix5QkFBeUIsMEJBQTBCLGNBQWMsZ0JBQWdCLGVBQWUsbUJBQW1CLGNBQWMsdUJBQXVCLFNBQVMsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsY0FBYyxnQkFBZ0IsT0FBTyxhQUFhLGFBQWEsZUFBZSxXQUFXLGVBQWUsVUFBVSxRQUFRLFlBQVksUUFBUSxlQUFlLGdCQUFnQixxQkFBcUIsY0FBYyxhQUFhLGlCQUFpQixjQUFjLGtCQUFrQixZQUFZLFFBQVEsVUFBVSxXQUFXLFNBQVMsUUFBUSxrQkFBa0IsWUFBWSxRQUFRLFdBQVcsU0FBUyxnQkFBZ0IsV0FBVyxRQUFRLFFBQVEsYUFBYSxTQUFTLGdCQUFnQixjQUFjLGFBQWEsY0FBYyxzQkFBc0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGtCQUFrQixnQkFBZ0IsaUJBQWlCLGVBQWUsV0FBVyxVQUFVLE1BQU0sWUFBWSxZQUFZLGVBQWUsY0FBYyxlQUFlLFlBQVksa0JBQWtCLGlCQUFpQixVQUFVLFdBQVcsYUFBYSxjQUFjLGNBQWMsYUFBYSxRQUFRLFFBQVEsV0FBVyxRQUFRLFlBQVksV0FBVyxlQUFlLGlCQUFpQixjQUFjLGlCQUFpQixhQUFhLGlCQUFpQixhQUFhLHlCQUF5QixZQUFZLGFBQWEsdUJBQXVCLFlBQVksbUJBQW1CLGlCQUFpQixjQUFjLGtCQUFrQixlQUFlLG9CQUFvQixxQkFBcUIsd0JBQXdCLFlBQVksV0FBVyxlQUFlLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSxXQUFXLGVBQWUsYUFBYSxjQUFjLGtCQUFrQixlQUFlLGdCQUFnQixZQUFZLGlCQUFpQixlQUFlLGVBQWUsYUFBYSxhQUFhLHFCQUFxQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsYUFBYSxnQkFBZ0Isa0JBQWtCLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSx1QkFBdUIsV0FBVyxrQkFBa0IsY0FBYyxpQkFBaUIsa0JBQWtCLGlCQUFpQixzQkFBc0IsVUFBVSwwQkFBMEIsb0JBQW9CLG1CQUFtQixpQkFBaUIsYUFBYSxVQUFVLFFBQVEsWUFBWSxZQUFZLGFBQWEsVUFBVSxTQUFTLGlCQUFpQixjQUFjLFlBQVksU0FBUyxpQkFBaUIsdUJBQXVCLFVBQVUsaUJBQWlCLFFBQVEsYUFBYSxVQUFVLFFBQVEsZUFBZSxVQUFVLFdBQVcsVUFBVSx1QkFBdUIsV0FBVyxpQkFBaUIsY0FBYyxlQUFlLGFBQWEsV0FBVyxTQUFTLFdBQVcsVUFBVSxXQUFXLE9BQU8sYUFBYSxlQUFlLFFBQVEsY0FBYyxRQUFRLGdCQUFnQixzQkFBc0IsVUFBVSxRQUFRLG9CQUFvQixTQUFTLHFCQUFxQixXQUFXLGlCQUFpQixZQUFZLGdCQUFnQixhQUFhLFFBQVEsbUJBQW1CLFNBQVMsVUFBVSxxQkFBcUIsd0JBQXdCLGVBQWUsa0JBQWtCLDBCQUEwQiwwQkFBMEIsaUJBQWlCLFNBQVMsU0FBUyxhQUFhLFlBQVksWUFBWSxhQUFhLFVBQVUsWUFBWSxhQUFhLFVBQVUsYUFBYSxrQkFBa0IsY0FBYyxtQkFBbUIsa0JBQWtCLG1CQUFtQixpQkFBaUIsa0JBQWtCLFNBQVMsUUFBUSxjQUFjLGFBQWEsV0FBVyxVQUFVLGFBQWEsT0FBTyxlQUFlLFdBQVcsdUJBQXVCLHdCQUF3QixzQkFBc0IsbUJBQW1CLE9BQU8sUUFBUSxlQUFlLFlBQVksZUFBZSxlQUFlLGNBQWMsWUFBWSxTQUFTLFVBQVUsVUFBVSx1QkFBdUIsYUFBYSxRQUFRLGNBQWMsU0FBUyxpQkFBaUIsVUFBVSxlQUFlLFdBQVcsa0JBQWtCLG9CQUFvQiwyQkFBMkIsa0JBQWtCLHlCQUF5QixZQUFZLFdBQVcsV0FBVyxvQkFBb0IsZ0JBQWdCLGFBQWEsVUFBVSxZQUFZLGVBQWUsV0FBVyxlQUFlLFdBQVcsb0JBQW9CLGdCQUFnQixjQUFjLFlBQVksb0JBQW9CLHNCQUFzQixVQUFVLGNBQWMsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IsY0FBYyw0QkFBNEIsaUJBQWlCLGFBQWEsb0JBQW9CLGdCQUFnQixhQUFhLG1CQUFtQixjQUFjLGtCQUFrQixjQUFjLGFBQWEsa0JBQWtCLGlCQUFpQixZQUFZLGtCQUFrQixrQkFBa0IsV0FBVyxhQUFhLFlBQVksZ0JBQWdCLGVBQWUsc0JBQXNCLG9CQUFvQixlQUFlLGtCQUFrQixlQUFlLGFBQWEsZUFBZSxlQUFlLGlCQUFpQixnQkFBZ0Isa0JBQWtCLG1CQUFtQixpQkFBaUIsY0FBYyxvQkFBb0IscUJBQXFCLGFBQWEsbUJBQW1CLGNBQWMsZUFBZSxlQUFlLGVBQWUsWUFBWSxhQUFhLG1CQUFtQixlQUFlLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxZQUFZLFVBQVUsQ0FBQyxFQUFFO0FBQUEsSUFDam5OLE1BQU0sb0JBQUFBLFFBQVU7QUFBQSxJQUNoQixTQUFTLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsS0FBSyxVQUFVLENBQUM7QUFBQSxFQUN2Rjs7O0FGbEVBLFdBQVNDLFVBQVEsS0FBSztBQUFFO0FBQTJCLFFBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxPQUFPLGFBQWEsVUFBVTtBQUFFLE1BQUFBLFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU8sT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRyxPQUFPO0FBQUUsTUFBQUQsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBT0EsUUFBTyxPQUFPLFdBQVcsY0FBY0EsS0FBSSxnQkFBZ0IsVUFBVUEsU0FBUSxPQUFPLFlBQVksV0FBVyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHO0FBQUUsV0FBT0QsVUFBUSxHQUFHO0FBQUEsRUFBRztBQUV6WCxNQUFJRSxlQUFZLENBQUMsT0FBTyxNQUFNO0FBRTlCLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBRWxULFdBQVNDLGtCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxvQkFBa0IsUUFBUSxPQUFPO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUFFLFVBQUksYUFBYSxNQUFNLENBQUM7QUFBRyxpQkFBVyxhQUFhLFdBQVcsY0FBYztBQUFPLGlCQUFXLGVBQWU7QUFBTSxVQUFJLFdBQVc7QUFBWSxtQkFBVyxXQUFXO0FBQU0sYUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUU1VCxXQUFTQyxlQUFhLGFBQWEsWUFBWSxhQUFhO0FBQUUsUUFBSTtBQUFZLE1BQUFELG9CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUFHLFFBQUk7QUFBYSxNQUFBQSxvQkFBa0IsYUFBYSxXQUFXO0FBQUcsV0FBTztBQUFBLEVBQWE7QUFFdE4sV0FBU0UsWUFBVSxVQUFVLFlBQVk7QUFBRSxRQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUFFLFlBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLElBQUc7QUFBRSxhQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFHLFFBQUk7QUFBWSxNQUFBQyxrQkFBZ0IsVUFBVSxVQUFVO0FBQUEsRUFBRztBQUVoWSxXQUFTQSxrQkFBZ0IsR0FBRyxHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8sa0JBQWtCLFNBQVNBLGtCQUFnQkMsSUFBR0MsSUFBRztBQUFFLE1BQUFELEdBQUUsWUFBWUM7QUFBRyxhQUFPRDtBQUFBLElBQUc7QUFBRyxXQUFPRCxrQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFBRztBQUV6SyxXQUFTRyxlQUFhLFNBQVM7QUFBRSxRQUFJLDRCQUE0QkMsNEJBQTBCO0FBQUcsV0FBTyxTQUFTLHVCQUF1QjtBQUFFLFVBQUksUUFBUUMsa0JBQWdCLE9BQU8sR0FBRztBQUFRLFVBQUksMkJBQTJCO0FBQUUsWUFBSSxZQUFZQSxrQkFBZ0IsSUFBSSxFQUFFO0FBQWEsaUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFBRyxPQUFPO0FBQUUsaUJBQVMsTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBRSxhQUFPQyw2QkFBMkIsTUFBTSxNQUFNO0FBQUEsSUFBRztBQUFBLEVBQUc7QUFFeGEsV0FBU0EsNkJBQTJCQyxPQUFNLE1BQU07QUFBRSxRQUFJLFNBQVNqQixVQUFRLElBQUksTUFBTSxZQUFZLE9BQU8sU0FBUyxhQUFhO0FBQUUsYUFBTztBQUFBLElBQU0sV0FBVyxTQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksVUFBVSwwREFBMEQ7QUFBQSxJQUFHO0FBQUUsV0FBT2tCLHlCQUF1QkQsS0FBSTtBQUFBLEVBQUc7QUFFL1IsV0FBU0MseUJBQXVCRCxPQUFNO0FBQUUsUUFBSUEsVUFBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLGVBQWUsMkRBQTJEO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUVySyxXQUFTSCw4QkFBNEI7QUFBRSxRQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGFBQU87QUFBTyxRQUFJLFFBQVEsVUFBVTtBQUFNLGFBQU87QUFBTyxRQUFJLE9BQU8sVUFBVTtBQUFZLGFBQU87QUFBTSxRQUFJO0FBQUUsY0FBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxDQUFDLEdBQUcsV0FBWTtBQUFBLE1BQUMsQ0FBQyxDQUFDO0FBQUcsYUFBTztBQUFBLElBQU0sU0FBUyxHQUFHO0FBQUUsYUFBTztBQUFBLElBQU87QUFBQSxFQUFFO0FBRXhVLFdBQVNDLGtCQUFnQixHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLFNBQVNBLGtCQUFnQkosSUFBRztBQUFFLGFBQU9BLEdBQUUsYUFBYSxPQUFPLGVBQWVBLEVBQUM7QUFBQSxJQUFHO0FBQUcsV0FBT0ksa0JBQWdCLENBQUM7QUFBQSxFQUFHO0FBa0I1TSxXQUFTLFlBQVlJLFNBQU07QUFDekIsV0FBTyxDQUFDLENBQUNBLFdBQVFBLFFBQUssZUFBZSxNQUFNO0FBQUEsRUFDN0M7QUFFTyxNQUFJLDRCQUF5Qyx5QkFBVSxZQUFZO0FBQ3hFLElBQUFDLFlBQVVDLDRCQUEyQixVQUFVO0FBRS9DLFFBQUksU0FBU0MsZUFBYUQsMEJBQXlCO0FBRW5ELGFBQVNBLDZCQUE0QjtBQUNuQyxNQUFBRSxrQkFBZ0IsTUFBTUYsMEJBQXlCO0FBRS9DLGFBQU8sT0FBTyxNQUFNLE1BQU0sU0FBUztBQUFBLElBQ3JDO0FBRUEsSUFBQUcsZUFBYUgsNEJBQTJCLENBQUM7QUFBQSxNQUN2QyxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVNJLFVBQVM7QUFDdkIsWUFBSSxjQUFjLEtBQUssT0FDbkJOLFVBQU8sWUFBWSxNQUNuQixZQUFZLFlBQVksV0FDeEIsYUFBYSxZQUFZO0FBQzdCLFlBQUksV0FBVyxZQUFZQSxPQUFJLEtBQUtBLFFBQUssT0FBT0EsUUFBSyxPQUFPO0FBQzVELFlBQUksYUFBYSxLQUFLLGlCQUFpQjtBQUN2QyxZQUFJLGlCQUFpQixLQUFLLHFCQUFxQjtBQUMvQyxZQUFJLGNBQWMsS0FBSyxrQkFBa0I7QUFDekMsWUFBSSxjQUFjLEtBQUssa0JBQWtCO0FBQ3pDLFlBQUksZUFBZSxLQUFLLG1CQUFtQjtBQUMzQyxZQUFJO0FBRUosWUFBSSxjQUFjLGFBQWEsUUFBUTtBQUNyQyxzQkFBWSxJQUFjLE9BQU87QUFBQSxZQUMvQixXQUFXO0FBQUEsVUFDYixHQUFHLFVBQVU7QUFBQSxRQUNmO0FBRUEsWUFBSTtBQUVKLFlBQUksZUFBZSxrQkFBa0IsYUFBYSxjQUFjLGNBQWMsYUFBYSxTQUFTO0FBQ2xHLHVCQUFhLElBQWMsT0FBTztBQUFBLFlBQ2hDLFdBQVc7QUFBQSxVQUNiLEdBQUcsYUFBYSxnQkFBZ0IsYUFBYSxhQUFhLFVBQVUsYUFBYSxRQUFXLFlBQVk7QUFBQSxRQUMxRztBQUVBLGVBQU8sSUFBYywwQkFBVSxNQUFNLFdBQVcsVUFBVTtBQUFBLE1BQzVEO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsbUJBQW1CO0FBQ2pDLFlBQUksZUFBZSxLQUFLLE9BQ3BCQSxVQUFPLGFBQWEsTUFDcEIsYUFBYSxhQUFhO0FBRTlCLFlBQUksQ0FBQ0EsU0FBTTtBQUNULGlCQUFPO0FBQUEsUUFDVDtBQUdBLFlBQUksWUFBWSxZQUFZQSxPQUFJLElBQUlBLFVBQU87QUFBQSxVQUN6QyxNQUFNQTtBQUFBLFFBQ1I7QUFFQSxZQUFJLFVBQVUsVUFBVSxLQUNwQixPQUFPLFVBQVUsTUFDakIsV0FBV08sNEJBQXlCLFdBQVdDLFlBQVM7QUFFNUQsZUFBTyxJQUFjLGdDQUFnQ0MsWUFBUztBQUFBLFVBQzVELE1BQU0sYUFBYSxNQUFNO0FBQUEsVUFDekI7QUFBQSxRQUNGLEdBQUcsUUFBUSxDQUFDO0FBQUEsTUFDZDtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLHFCQUFxQjtBQUNuQyxZQUFJLGVBQWUsS0FBSyxPQUNwQixhQUFhLGFBQWEsWUFDMUIsYUFBYSxhQUFhO0FBRTlCLFlBQUksQ0FBQyxZQUFZO0FBQ2YsaUJBQU87QUFBQSxRQUNUO0FBRUEsZUFBTyxJQUFjLGdDQUFnQztBQUFBLFVBQ25ELE1BQU0sYUFBYSxNQUFNO0FBQUEsVUFDekIsTUFBTTtBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyx1QkFBdUI7QUFDckMsWUFBSSxlQUFlLEtBQUssT0FDcEIsWUFBWSxhQUFhLFdBQ3pCLGFBQWEsYUFBYTtBQUU5QixZQUFJLENBQUMsV0FBVztBQUNkLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGVBQU8sSUFBYyxtQkFBbUI7QUFBQSxVQUN0QyxNQUFNLGFBQWEsTUFBTTtBQUFBLFFBQzNCLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsb0JBQW9CO0FBQ2xDLFlBQUksZUFBZSxLQUFLLE9BQ3BCLFFBQVEsYUFBYSxPQUNyQixhQUFhLGFBQWE7QUFFOUIsWUFBSSxDQUFDLE9BQU87QUFDVixpQkFBTztBQUFBLFFBQ1Q7QUFFQSxlQUFPLElBQWMsaUNBQWlDQSxZQUFTO0FBQUEsVUFDN0QsTUFBTSxhQUFhLE1BQU07QUFBQSxRQUMzQixHQUFHLEtBQUssQ0FBQztBQUFBLE1BQ1g7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxvQkFBb0I7QUFDbEMsWUFBSSxlQUFlLEtBQUssT0FDcEIsWUFBWSxhQUFhLFdBQ3pCLGFBQWEsYUFBYTtBQUU5QixZQUFJLENBQUMsV0FBVztBQUNkLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGVBQU8sSUFBYyxTQUFTO0FBQUEsVUFDNUIsTUFBTSxhQUFhLE1BQU07QUFBQSxVQUN6QixPQUFPO0FBQUEsVUFDUCxNQUFNO0FBQUEsUUFDUixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBRUYsV0FBT1A7QUFBQSxFQUNULEVBQUUseUJBQVM7QUFDWCw0QkFBMEIsWUFBWTtBQUFBLElBQ3BDLE1BQU0sb0JBQUFRLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsaUJBQWlCLGNBQWMsdUJBQXVCLFlBQVksYUFBYSxTQUFTLGdCQUFnQixjQUFjLFVBQVUsWUFBWSxnQkFBZ0IsUUFBUSxhQUFhLGFBQWEsY0FBYyxXQUFXLGNBQWMsWUFBWSxZQUFZLGdCQUFnQixVQUFVLFFBQVEsYUFBYSxRQUFRLG1CQUFtQixpQkFBaUIsVUFBVSxjQUFjLFNBQVMsU0FBUyxPQUFPLFlBQVksWUFBWSxhQUFhLFlBQVksU0FBUyx1QkFBdUIsU0FBUyxxQkFBcUIsU0FBUyxnQkFBZ0IsZUFBZSxjQUFjLFdBQVcsV0FBVyxTQUFTLFdBQVcsV0FBVyxjQUFjLGFBQWEsbUJBQW1CLHdCQUF3QixtQkFBbUIsb0JBQW9CLHNCQUFzQixvQkFBb0IsUUFBUSxpQkFBaUIscUJBQXFCLHdCQUF3Qix1QkFBdUIseUJBQXlCLFNBQVMsOEJBQThCLHdCQUF3QixjQUFjLFlBQVksT0FBTyxnQkFBZ0Isa0JBQWtCLFlBQVksV0FBVyxlQUFlLGVBQWUsWUFBWSxnQkFBZ0IsaUJBQWlCLGFBQWEsT0FBTyxtQkFBbUIsb0JBQW9CLFlBQVkscUJBQXFCLG1CQUFtQixvQkFBb0IsY0FBYyxtQkFBbUIsbUJBQW1CLGlCQUFpQiw4QkFBOEIsNEJBQTRCLGlCQUFpQixnQkFBZ0IseUJBQXlCLHlCQUF5Qix1QkFBdUIseUJBQXlCLHdCQUF3QixzQkFBc0IsY0FBYyxxQkFBcUIsNEJBQTRCLDZCQUE2Qix5QkFBeUIsMEJBQTBCLGNBQWMsZ0JBQWdCLGVBQWUsbUJBQW1CLGNBQWMsdUJBQXVCLFNBQVMsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsY0FBYyxnQkFBZ0IsT0FBTyxhQUFhLGFBQWEsZUFBZSxXQUFXLGVBQWUsVUFBVSxRQUFRLFlBQVksUUFBUSxlQUFlLGdCQUFnQixxQkFBcUIsY0FBYyxhQUFhLGlCQUFpQixjQUFjLGtCQUFrQixZQUFZLFFBQVEsVUFBVSxXQUFXLFNBQVMsUUFBUSxrQkFBa0IsWUFBWSxRQUFRLFdBQVcsU0FBUyxnQkFBZ0IsV0FBVyxRQUFRLFFBQVEsYUFBYSxTQUFTLGdCQUFnQixjQUFjLGFBQWEsY0FBYyxzQkFBc0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGtCQUFrQixnQkFBZ0IsaUJBQWlCLGVBQWUsV0FBVyxVQUFVLE1BQU0sWUFBWSxZQUFZLGVBQWUsY0FBYyxlQUFlLFlBQVksa0JBQWtCLGlCQUFpQixVQUFVLFdBQVcsYUFBYSxjQUFjLGNBQWMsYUFBYSxRQUFRLFFBQVEsV0FBVyxRQUFRLFlBQVksV0FBVyxlQUFlLGlCQUFpQixjQUFjLGlCQUFpQixhQUFhLGlCQUFpQixhQUFhLHlCQUF5QixZQUFZLGFBQWEsdUJBQXVCLFlBQVksbUJBQW1CLGlCQUFpQixjQUFjLGtCQUFrQixlQUFlLG9CQUFvQixxQkFBcUIsd0JBQXdCLFlBQVksV0FBVyxlQUFlLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSxXQUFXLGVBQWUsYUFBYSxjQUFjLGtCQUFrQixlQUFlLGdCQUFnQixZQUFZLGlCQUFpQixlQUFlLGVBQWUsYUFBYSxhQUFhLHFCQUFxQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsYUFBYSxnQkFBZ0Isa0JBQWtCLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSx1QkFBdUIsV0FBVyxrQkFBa0IsY0FBYyxpQkFBaUIsa0JBQWtCLGlCQUFpQixzQkFBc0IsVUFBVSwwQkFBMEIsb0JBQW9CLG1CQUFtQixpQkFBaUIsYUFBYSxVQUFVLFFBQVEsWUFBWSxZQUFZLGFBQWEsVUFBVSxTQUFTLGlCQUFpQixjQUFjLFlBQVksU0FBUyxpQkFBaUIsdUJBQXVCLFVBQVUsaUJBQWlCLFFBQVEsYUFBYSxVQUFVLFFBQVEsZUFBZSxVQUFVLFdBQVcsVUFBVSx1QkFBdUIsV0FBVyxpQkFBaUIsY0FBYyxlQUFlLGFBQWEsV0FBVyxTQUFTLFdBQVcsVUFBVSxXQUFXLE9BQU8sYUFBYSxlQUFlLFFBQVEsY0FBYyxRQUFRLGdCQUFnQixzQkFBc0IsVUFBVSxRQUFRLG9CQUFvQixTQUFTLHFCQUFxQixXQUFXLGlCQUFpQixZQUFZLGdCQUFnQixhQUFhLFFBQVEsbUJBQW1CLFNBQVMsVUFBVSxxQkFBcUIsd0JBQXdCLGVBQWUsa0JBQWtCLDBCQUEwQiwwQkFBMEIsaUJBQWlCLFNBQVMsU0FBUyxhQUFhLFlBQVksWUFBWSxhQUFhLFVBQVUsWUFBWSxhQUFhLFVBQVUsYUFBYSxrQkFBa0IsY0FBYyxtQkFBbUIsa0JBQWtCLG1CQUFtQixpQkFBaUIsa0JBQWtCLFNBQVMsUUFBUSxjQUFjLGFBQWEsV0FBVyxVQUFVLGFBQWEsT0FBTyxlQUFlLFdBQVcsdUJBQXVCLHdCQUF3QixzQkFBc0IsbUJBQW1CLE9BQU8sUUFBUSxlQUFlLFlBQVksZUFBZSxlQUFlLGNBQWMsWUFBWSxTQUFTLFVBQVUsVUFBVSx1QkFBdUIsYUFBYSxRQUFRLGNBQWMsU0FBUyxpQkFBaUIsVUFBVSxlQUFlLFdBQVcsa0JBQWtCLG9CQUFvQiwyQkFBMkIsa0JBQWtCLHlCQUF5QixZQUFZLFdBQVcsV0FBVyxvQkFBb0IsZ0JBQWdCLGFBQWEsVUFBVSxZQUFZLGVBQWUsV0FBVyxlQUFlLFdBQVcsb0JBQW9CLGdCQUFnQixjQUFjLFlBQVksb0JBQW9CLHNCQUFzQixVQUFVLGNBQWMsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IsY0FBYyw0QkFBNEIsaUJBQWlCLGFBQWEsb0JBQW9CLGdCQUFnQixhQUFhLG1CQUFtQixjQUFjLGtCQUFrQixjQUFjLGFBQWEsa0JBQWtCLGlCQUFpQixZQUFZLGtCQUFrQixrQkFBa0IsV0FBVyxhQUFhLFlBQVksZ0JBQWdCLGVBQWUsc0JBQXNCLG9CQUFvQixlQUFlLGtCQUFrQixlQUFlLGFBQWEsZUFBZSxlQUFlLGlCQUFpQixnQkFBZ0Isa0JBQWtCLG1CQUFtQixpQkFBaUIsY0FBYyxvQkFBb0IscUJBQXFCLGFBQWEsbUJBQW1CLGNBQWMsZUFBZSxlQUFlLGVBQWUsWUFBWSxhQUFhLG1CQUFtQixlQUFlLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxZQUFZLFVBQVUsQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsTUFBTTtBQUFBLE1BQ2hxTixNQUFNLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsaUJBQWlCLGNBQWMsdUJBQXVCLFlBQVksYUFBYSxTQUFTLGdCQUFnQixjQUFjLFVBQVUsWUFBWSxnQkFBZ0IsUUFBUSxhQUFhLGFBQWEsY0FBYyxXQUFXLGNBQWMsWUFBWSxZQUFZLGdCQUFnQixVQUFVLFFBQVEsYUFBYSxRQUFRLG1CQUFtQixpQkFBaUIsVUFBVSxjQUFjLFNBQVMsU0FBUyxPQUFPLFlBQVksWUFBWSxhQUFhLFlBQVksU0FBUyx1QkFBdUIsU0FBUyxxQkFBcUIsU0FBUyxnQkFBZ0IsZUFBZSxjQUFjLFdBQVcsV0FBVyxTQUFTLFdBQVcsV0FBVyxjQUFjLGFBQWEsbUJBQW1CLHdCQUF3QixtQkFBbUIsb0JBQW9CLHNCQUFzQixvQkFBb0IsUUFBUSxpQkFBaUIscUJBQXFCLHdCQUF3Qix1QkFBdUIseUJBQXlCLFNBQVMsOEJBQThCLHdCQUF3QixjQUFjLFlBQVksT0FBTyxnQkFBZ0Isa0JBQWtCLFlBQVksV0FBVyxlQUFlLGVBQWUsWUFBWSxnQkFBZ0IsaUJBQWlCLGFBQWEsT0FBTyxtQkFBbUIsb0JBQW9CLFlBQVkscUJBQXFCLG1CQUFtQixvQkFBb0IsY0FBYyxtQkFBbUIsbUJBQW1CLGlCQUFpQiw4QkFBOEIsNEJBQTRCLGlCQUFpQixnQkFBZ0IseUJBQXlCLHlCQUF5Qix1QkFBdUIseUJBQXlCLHdCQUF3QixzQkFBc0IsY0FBYyxxQkFBcUIsNEJBQTRCLDZCQUE2Qix5QkFBeUIsMEJBQTBCLGNBQWMsZ0JBQWdCLGVBQWUsbUJBQW1CLGNBQWMsdUJBQXVCLFNBQVMsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsY0FBYyxnQkFBZ0IsT0FBTyxhQUFhLGFBQWEsZUFBZSxXQUFXLGVBQWUsVUFBVSxRQUFRLFlBQVksUUFBUSxlQUFlLGdCQUFnQixxQkFBcUIsY0FBYyxhQUFhLGlCQUFpQixjQUFjLGtCQUFrQixZQUFZLFFBQVEsVUFBVSxXQUFXLFNBQVMsUUFBUSxrQkFBa0IsWUFBWSxRQUFRLFdBQVcsU0FBUyxnQkFBZ0IsV0FBVyxRQUFRLFFBQVEsYUFBYSxTQUFTLGdCQUFnQixjQUFjLGFBQWEsY0FBYyxzQkFBc0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGtCQUFrQixnQkFBZ0IsaUJBQWlCLGVBQWUsV0FBVyxVQUFVLE1BQU0sWUFBWSxZQUFZLGVBQWUsY0FBYyxlQUFlLFlBQVksa0JBQWtCLGlCQUFpQixVQUFVLFdBQVcsYUFBYSxjQUFjLGNBQWMsYUFBYSxRQUFRLFFBQVEsV0FBVyxRQUFRLFlBQVksV0FBVyxlQUFlLGlCQUFpQixjQUFjLGlCQUFpQixhQUFhLGlCQUFpQixhQUFhLHlCQUF5QixZQUFZLGFBQWEsdUJBQXVCLFlBQVksbUJBQW1CLGlCQUFpQixjQUFjLGtCQUFrQixlQUFlLG9CQUFvQixxQkFBcUIsd0JBQXdCLFlBQVksV0FBVyxlQUFlLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSxXQUFXLGVBQWUsYUFBYSxjQUFjLGtCQUFrQixlQUFlLGdCQUFnQixZQUFZLGlCQUFpQixlQUFlLGVBQWUsYUFBYSxhQUFhLHFCQUFxQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsYUFBYSxnQkFBZ0Isa0JBQWtCLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSx1QkFBdUIsV0FBVyxrQkFBa0IsY0FBYyxpQkFBaUIsa0JBQWtCLGlCQUFpQixzQkFBc0IsVUFBVSwwQkFBMEIsb0JBQW9CLG1CQUFtQixpQkFBaUIsYUFBYSxVQUFVLFFBQVEsWUFBWSxZQUFZLGFBQWEsVUFBVSxTQUFTLGlCQUFpQixjQUFjLFlBQVksU0FBUyxpQkFBaUIsdUJBQXVCLFVBQVUsaUJBQWlCLFFBQVEsYUFBYSxVQUFVLFFBQVEsZUFBZSxVQUFVLFdBQVcsVUFBVSx1QkFBdUIsV0FBVyxpQkFBaUIsY0FBYyxlQUFlLGFBQWEsV0FBVyxTQUFTLFdBQVcsVUFBVSxXQUFXLE9BQU8sYUFBYSxlQUFlLFFBQVEsY0FBYyxRQUFRLGdCQUFnQixzQkFBc0IsVUFBVSxRQUFRLG9CQUFvQixTQUFTLHFCQUFxQixXQUFXLGlCQUFpQixZQUFZLGdCQUFnQixhQUFhLFFBQVEsbUJBQW1CLFNBQVMsVUFBVSxxQkFBcUIsd0JBQXdCLGVBQWUsa0JBQWtCLDBCQUEwQiwwQkFBMEIsaUJBQWlCLFNBQVMsU0FBUyxhQUFhLFlBQVksWUFBWSxhQUFhLFVBQVUsWUFBWSxhQUFhLFVBQVUsYUFBYSxrQkFBa0IsY0FBYyxtQkFBbUIsa0JBQWtCLG1CQUFtQixpQkFBaUIsa0JBQWtCLFNBQVMsUUFBUSxjQUFjLGFBQWEsV0FBVyxVQUFVLGFBQWEsT0FBTyxlQUFlLFdBQVcsdUJBQXVCLHdCQUF3QixzQkFBc0IsbUJBQW1CLE9BQU8sUUFBUSxlQUFlLFlBQVksZUFBZSxlQUFlLGNBQWMsWUFBWSxTQUFTLFVBQVUsVUFBVSx1QkFBdUIsYUFBYSxRQUFRLGNBQWMsU0FBUyxpQkFBaUIsVUFBVSxlQUFlLFdBQVcsa0JBQWtCLG9CQUFvQiwyQkFBMkIsa0JBQWtCLHlCQUF5QixZQUFZLFdBQVcsV0FBVyxvQkFBb0IsZ0JBQWdCLGFBQWEsVUFBVSxZQUFZLGVBQWUsV0FBVyxlQUFlLFdBQVcsb0JBQW9CLGdCQUFnQixjQUFjLFlBQVksb0JBQW9CLHNCQUFzQixVQUFVLGNBQWMsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IsY0FBYyw0QkFBNEIsaUJBQWlCLGFBQWEsb0JBQW9CLGdCQUFnQixhQUFhLG1CQUFtQixjQUFjLGtCQUFrQixjQUFjLGFBQWEsa0JBQWtCLGlCQUFpQixZQUFZLGtCQUFrQixrQkFBa0IsV0FBVyxhQUFhLFlBQVksZ0JBQWdCLGVBQWUsc0JBQXNCLG9CQUFvQixlQUFlLGtCQUFrQixlQUFlLGFBQWEsZUFBZSxlQUFlLGlCQUFpQixnQkFBZ0Isa0JBQWtCLG1CQUFtQixpQkFBaUIsY0FBYyxvQkFBb0IscUJBQXFCLGFBQWEsbUJBQW1CLGNBQWMsZUFBZSxlQUFlLGVBQWUsWUFBWSxhQUFhLG1CQUFtQixlQUFlLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxZQUFZLFVBQVUsQ0FBQyxFQUFFO0FBQUEsTUFDam5OLE1BQU0sb0JBQUFBLFFBQVU7QUFBQSxNQUNoQixPQUFPLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsSUFBSSxVQUFVLENBQUM7QUFBQSxNQUNsRixLQUFLLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsS0FBSyxVQUFVLENBQUM7QUFBQSxJQUNuRixDQUFDLEVBQUUsVUFBVSxDQUFDO0FBQUEsSUFDZCxPQUFPLG9CQUFBQSxRQUFVLE1BQU07QUFBQSxNQUNyQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsTUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLE1BQzVCLE1BQU0sb0JBQUFBLFFBQVU7QUFBQSxJQUNsQixDQUFDO0FBQUEsSUFDRCxXQUFXLG9CQUFBQSxRQUFVO0FBQUEsSUFDckIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLFlBQVksb0JBQUFBLFFBQVU7QUFBQSxJQUN0QixZQUFZLG9CQUFBQSxRQUFVO0FBQUEsRUFDeEI7OztBRzFMQSxNQUFBQyxrQkFBa0I7QUFDbEIsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1QjtBQWpCdkIsTUFBSUMsZUFBWSxDQUFDLFFBQVEsYUFBYSxhQUFhLGNBQWMsWUFBWSxXQUFXO0FBRXhGLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYTNTLE1BQUksZUFBZSxTQUFTQyxjQUFhQyxRQUFNO0FBQ3BELFFBQUksWUFBWUEsT0FBSyxNQUNqQixPQUFPLGNBQWMsU0FBUyxVQUFVLFdBQ3hDLFlBQVlBLE9BQUssV0FDakIsWUFBWUEsT0FBSyxXQUNqQixhQUFhQSxPQUFLLFlBQ2xCLFdBQVdBLE9BQUssVUFDaEIsWUFBWUEsT0FBSyxXQUNqQixPQUFPSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFbkQsUUFBSSxjQUFVLG9CQUFBTSxTQUFXLGdCQUFnQixXQUFXO0FBQUEsTUFDbEQsMEJBQTBCO0FBQUEsTUFDMUIsMEJBQTBCO0FBQUEsTUFDMUIsMkJBQTJCO0FBQUEsSUFDN0IsQ0FBQztBQUVELFFBQUksU0FBUyxVQUFVO0FBQ3JCLGFBQU8sSUFBYyxVQUFVTCxZQUFTO0FBQUEsUUFDdEMsV0FBVztBQUFBLE1BQ2IsR0FBRyxJQUFJLEdBQUcsUUFBUTtBQUFBLElBQ3BCLE9BQU87QUFDTCxhQUFPLElBQWMsU0FBU0EsWUFBUztBQUFBLFFBQ3JDLFdBQVc7QUFBQSxNQUNiLEdBQUcsSUFBSSxHQUFHLFFBQVE7QUFBQSxJQUNwQjtBQUFBLEVBQ0Y7QUFDQSxlQUFhLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFVdkIsTUFBTSxvQkFBQU0sUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsU0FBUyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxTQUFTLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQUEsSUFDeE4sV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVNyQixZQUFZLG9CQUFBQSxRQUFVO0FBQUEsSUFDdEIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxFQUM5Qjs7O0FKdEVBLFdBQVNDLFVBQVEsS0FBSztBQUFFO0FBQTJCLFFBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxPQUFPLGFBQWEsVUFBVTtBQUFFLE1BQUFBLFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU8sT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRyxPQUFPO0FBQUUsTUFBQUQsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBT0EsUUFBTyxPQUFPLFdBQVcsY0FBY0EsS0FBSSxnQkFBZ0IsVUFBVUEsU0FBUSxPQUFPLFlBQVksV0FBVyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHO0FBQUUsV0FBT0QsVUFBUSxHQUFHO0FBQUEsRUFBRztBQUV6WCxNQUFJRSxlQUFZLENBQUMsWUFBWSxRQUFRLFNBQVMsYUFBYSxhQUFhLGNBQWMsY0FBYyxhQUFhLFdBQVcsVUFBVSxZQUFZLGFBQWEsY0FBYyxTQUFTO0FBRXRMLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBRWxULFdBQVNDLGtCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxvQkFBa0IsUUFBUSxPQUFPO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUFFLFVBQUksYUFBYSxNQUFNLENBQUM7QUFBRyxpQkFBVyxhQUFhLFdBQVcsY0FBYztBQUFPLGlCQUFXLGVBQWU7QUFBTSxVQUFJLFdBQVc7QUFBWSxtQkFBVyxXQUFXO0FBQU0sYUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUU1VCxXQUFTQyxlQUFhLGFBQWEsWUFBWSxhQUFhO0FBQUUsUUFBSTtBQUFZLE1BQUFELG9CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUFHLFFBQUk7QUFBYSxNQUFBQSxvQkFBa0IsYUFBYSxXQUFXO0FBQUcsV0FBTztBQUFBLEVBQWE7QUFFdE4sV0FBU0UsWUFBVSxVQUFVLFlBQVk7QUFBRSxRQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUFFLFlBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLElBQUc7QUFBRSxhQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFHLFFBQUk7QUFBWSxNQUFBQyxrQkFBZ0IsVUFBVSxVQUFVO0FBQUEsRUFBRztBQUVoWSxXQUFTQSxrQkFBZ0IsR0FBRyxHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8sa0JBQWtCLFNBQVNBLGtCQUFnQkMsSUFBR0MsSUFBRztBQUFFLE1BQUFELEdBQUUsWUFBWUM7QUFBRyxhQUFPRDtBQUFBLElBQUc7QUFBRyxXQUFPRCxrQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFBRztBQUV6SyxXQUFTRyxlQUFhLFNBQVM7QUFBRSxRQUFJLDRCQUE0QkMsNEJBQTBCO0FBQUcsV0FBTyxTQUFTLHVCQUF1QjtBQUFFLFVBQUksUUFBUUMsa0JBQWdCLE9BQU8sR0FBRztBQUFRLFVBQUksMkJBQTJCO0FBQUUsWUFBSSxZQUFZQSxrQkFBZ0IsSUFBSSxFQUFFO0FBQWEsaUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFBRyxPQUFPO0FBQUUsaUJBQVMsTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBRSxhQUFPQyw2QkFBMkIsTUFBTSxNQUFNO0FBQUEsSUFBRztBQUFBLEVBQUc7QUFFeGEsV0FBU0EsNkJBQTJCQyxPQUFNLE1BQU07QUFBRSxRQUFJLFNBQVNqQixVQUFRLElBQUksTUFBTSxZQUFZLE9BQU8sU0FBUyxhQUFhO0FBQUUsYUFBTztBQUFBLElBQU0sV0FBVyxTQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksVUFBVSwwREFBMEQ7QUFBQSxJQUFHO0FBQUUsV0FBT2tCLHlCQUF1QkQsS0FBSTtBQUFBLEVBQUc7QUFFL1IsV0FBU0MseUJBQXVCRCxPQUFNO0FBQUUsUUFBSUEsVUFBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLGVBQWUsMkRBQTJEO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUVySyxXQUFTSCw4QkFBNEI7QUFBRSxRQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGFBQU87QUFBTyxRQUFJLFFBQVEsVUFBVTtBQUFNLGFBQU87QUFBTyxRQUFJLE9BQU8sVUFBVTtBQUFZLGFBQU87QUFBTSxRQUFJO0FBQUUsY0FBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxDQUFDLEdBQUcsV0FBWTtBQUFBLE1BQUMsQ0FBQyxDQUFDO0FBQUcsYUFBTztBQUFBLElBQU0sU0FBUyxHQUFHO0FBQUUsYUFBTztBQUFBLElBQU87QUFBQSxFQUFFO0FBRXhVLFdBQVNDLGtCQUFnQixHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLFNBQVNBLGtCQUFnQkosSUFBRztBQUFFLGFBQU9BLEdBQUUsYUFBYSxPQUFPLGVBQWVBLEVBQUM7QUFBQSxJQUFHO0FBQUcsV0FBT0ksa0JBQWdCLENBQUM7QUFBQSxFQUFHO0FBZ0JyTSxNQUFJLHVCQUFvQyx5QkFBVSxZQUFZO0FBQ25FLElBQUFOLFlBQVVVLHVCQUFzQixVQUFVO0FBRTFDLFFBQUksU0FBU04sZUFBYU0scUJBQW9CO0FBRTlDLGFBQVNBLHdCQUF1QjtBQUM5QixNQUFBYixrQkFBZ0IsTUFBTWEscUJBQW9CO0FBRTFDLGFBQU8sT0FBTyxNQUFNLE1BQU0sU0FBUztBQUFBLElBQ3JDO0FBRUEsSUFBQVgsZUFBYVcsdUJBQXNCLENBQUM7QUFBQSxNQUNsQyxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVNDLFVBQVM7QUFDdkIsWUFBSSxjQUFjLEtBQUssT0FDbkIsV0FBVyxZQUFZLFVBQ3ZCQyxVQUFPLFlBQVksTUFDbkIsUUFBUSxZQUFZLE9BQ3BCLFlBQVksWUFBWSxXQUN4QixZQUFZLFlBQVksV0FDeEIsYUFBYSxZQUFZLFlBQ3pCLGFBQWEsWUFBWSxZQUN6QixZQUFZLFlBQVksV0FDeEIsVUFBVSxZQUFZLFNBQ3RCQyxVQUFTLFlBQVksUUFDckIsV0FBVyxZQUFZLFVBQ3ZCLFVBQVUsWUFBWSxXQUN0QixhQUFhLFlBQVksWUFDekIsVUFBVSxZQUFZLFNBQ3RCLE9BQU9sQiw0QkFBeUIsYUFBYUYsWUFBUztBQUUxRCxZQUFJLGNBQVUsb0JBQUFxQixTQUFXLHdCQUF3QjtBQUFBLFVBQy9DLG1DQUFtQztBQUFBLFVBQ25DLG9DQUFvQztBQUFBLFVBQ3BDLGtDQUFrQztBQUFBLFVBQ2xDLCtCQUErQixXQUFXRDtBQUFBLFVBQzFDLG1DQUFtQztBQUFBLFFBQ3JDLEdBQUcsU0FBUztBQUNaLFlBQUksZUFBZSxLQUFLLGVBQWUsV0FBVyxTQUFTLE9BQU87QUFDbEUsWUFBSSxjQUFjLEtBQUssZUFBZSxVQUFVQSxTQUFRLE9BQU87QUFDL0QsZUFBTyxJQUFjLE9BQU9uQixZQUFTO0FBQUEsVUFDbkMsV0FBVztBQUFBLFFBQ2IsR0FBRyxJQUFJLEdBQUcsY0FBYyxJQUFjLE9BQU87QUFBQSxVQUMzQyxXQUFXO0FBQUEsUUFDYixHQUFHLFVBQVUsSUFBYywyQkFBMkI7QUFBQSxVQUNwRCxNQUFNa0I7QUFBQSxVQUNOO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLFdBQVc7QUFBQSxVQUNYLFlBQVksQ0FBQyxZQUFZLENBQUMsY0FBYztBQUFBLFFBQzFDLENBQUMsQ0FBQyxHQUFHLFdBQVc7QUFBQSxNQUNsQjtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLGVBQWUsTUFBTSxPQUFPLFNBQVM7QUFDbkQsWUFBSSxRQUFRO0FBRVosWUFBSSxDQUFDLE9BQU87QUFDVjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzdCLGlCQUFPLEtBQUssZ0JBQWdCLE1BQU0sT0FBTyxPQUFPO0FBQUEsUUFDbEQ7QUFFQSxZQUFJLGNBQWMsZ0JBQUFHLFFBQU0sU0FBUyxJQUFJLE9BQU8sU0FBVSxNQUFNLE9BQU87QUFDakUsaUJBQU8sT0FBTyxTQUFTLFdBQVcsTUFBTSxnQkFBZ0IsTUFBTSxNQUFNLE9BQU8sSUFBSSxNQUFNLGVBQWUsTUFBTSxNQUFNLEtBQUs7QUFBQSxRQUN2SCxDQUFDO0FBQ0QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxnQkFBZ0IsTUFBTUMsU0FBUSxTQUFTO0FBQ3JELGVBQU8sSUFBYyxjQUFjO0FBQUEsVUFDakMsU0FBUztBQUFBLFVBQ1QsV0FBVyx5QkFBeUIsT0FBTyxJQUFJO0FBQUEsUUFDakQsR0FBR0EsT0FBTTtBQUFBLE1BQ1g7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxlQUFlLE1BQU1DLE9BQU0sS0FBSztBQUM5QyxlQUFvQixrREFBYUEsT0FBTTtBQUFBLFVBQ3JDLGVBQVcsb0JBQUFILFNBQVcseUJBQXlCLE9BQU8sSUFBSSxHQUFHRyxNQUFLLE1BQU0sU0FBUztBQUFBLFVBQ2pGO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBRUYsV0FBT1A7QUFBQSxFQUNULEVBQUUseUJBQVM7QUFDWCx1QkFBcUIsWUFBWTtBQUFBLElBQy9CLFdBQVcsb0JBQUFRLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU01QixTQUFTLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsT0FBTyxZQUFZLG9CQUFBQSxRQUFVLFFBQVEsVUFBVSxDQUFDLEVBQUUsWUFBWSxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsUUFBUSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1yUCxRQUFRLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsT0FBTyxZQUFZLG9CQUFBQSxRQUFVLFFBQVEsVUFBVSxDQUFDLEVBQUUsWUFBWSxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsUUFBUSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO0FBQUEsSUFDcFAsVUFBVSxvQkFBQUEsUUFBVTtBQUFBLElBQ3BCLE1BQU0sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsaUJBQWlCLGNBQWMsdUJBQXVCLFlBQVksYUFBYSxTQUFTLGdCQUFnQixjQUFjLFVBQVUsWUFBWSxnQkFBZ0IsUUFBUSxhQUFhLGFBQWEsY0FBYyxXQUFXLGNBQWMsWUFBWSxZQUFZLGdCQUFnQixVQUFVLFFBQVEsYUFBYSxRQUFRLG1CQUFtQixpQkFBaUIsVUFBVSxjQUFjLFNBQVMsU0FBUyxPQUFPLFlBQVksWUFBWSxhQUFhLFlBQVksU0FBUyx1QkFBdUIsU0FBUyxxQkFBcUIsU0FBUyxnQkFBZ0IsZUFBZSxjQUFjLFdBQVcsV0FBVyxTQUFTLFdBQVcsV0FBVyxjQUFjLGFBQWEsbUJBQW1CLHdCQUF3QixtQkFBbUIsb0JBQW9CLHNCQUFzQixvQkFBb0IsUUFBUSxpQkFBaUIscUJBQXFCLHdCQUF3Qix1QkFBdUIseUJBQXlCLFNBQVMsOEJBQThCLHdCQUF3QixjQUFjLFlBQVksT0FBTyxnQkFBZ0Isa0JBQWtCLFlBQVksV0FBVyxlQUFlLGVBQWUsWUFBWSxnQkFBZ0IsaUJBQWlCLGFBQWEsT0FBTyxtQkFBbUIsb0JBQW9CLFlBQVkscUJBQXFCLG1CQUFtQixvQkFBb0IsY0FBYyxtQkFBbUIsbUJBQW1CLGlCQUFpQiw4QkFBOEIsNEJBQTRCLGlCQUFpQixnQkFBZ0IseUJBQXlCLHlCQUF5Qix1QkFBdUIseUJBQXlCLHdCQUF3QixzQkFBc0IsY0FBYyxxQkFBcUIsNEJBQTRCLDZCQUE2Qix5QkFBeUIsMEJBQTBCLGNBQWMsZ0JBQWdCLGVBQWUsbUJBQW1CLGNBQWMsdUJBQXVCLFNBQVMsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsY0FBYyxnQkFBZ0IsT0FBTyxhQUFhLGFBQWEsZUFBZSxXQUFXLGVBQWUsVUFBVSxRQUFRLFlBQVksUUFBUSxlQUFlLGdCQUFnQixxQkFBcUIsY0FBYyxhQUFhLGlCQUFpQixjQUFjLGtCQUFrQixZQUFZLFFBQVEsVUFBVSxXQUFXLFNBQVMsUUFBUSxrQkFBa0IsWUFBWSxRQUFRLFdBQVcsU0FBUyxnQkFBZ0IsV0FBVyxRQUFRLFFBQVEsYUFBYSxTQUFTLGdCQUFnQixjQUFjLGFBQWEsY0FBYyxzQkFBc0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGtCQUFrQixnQkFBZ0IsaUJBQWlCLGVBQWUsV0FBVyxVQUFVLE1BQU0sWUFBWSxZQUFZLGVBQWUsY0FBYyxlQUFlLFlBQVksa0JBQWtCLGlCQUFpQixVQUFVLFdBQVcsYUFBYSxjQUFjLGNBQWMsYUFBYSxRQUFRLFFBQVEsV0FBVyxRQUFRLFlBQVksV0FBVyxlQUFlLGlCQUFpQixjQUFjLGlCQUFpQixhQUFhLGlCQUFpQixhQUFhLHlCQUF5QixZQUFZLGFBQWEsdUJBQXVCLFlBQVksbUJBQW1CLGlCQUFpQixjQUFjLGtCQUFrQixlQUFlLG9CQUFvQixxQkFBcUIsd0JBQXdCLFlBQVksV0FBVyxlQUFlLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSxXQUFXLGVBQWUsYUFBYSxjQUFjLGtCQUFrQixlQUFlLGdCQUFnQixZQUFZLGlCQUFpQixlQUFlLGVBQWUsYUFBYSxhQUFhLHFCQUFxQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsYUFBYSxnQkFBZ0Isa0JBQWtCLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSx1QkFBdUIsV0FBVyxrQkFBa0IsY0FBYyxpQkFBaUIsa0JBQWtCLGlCQUFpQixzQkFBc0IsVUFBVSwwQkFBMEIsb0JBQW9CLG1CQUFtQixpQkFBaUIsYUFBYSxVQUFVLFFBQVEsWUFBWSxZQUFZLGFBQWEsVUFBVSxTQUFTLGlCQUFpQixjQUFjLFlBQVksU0FBUyxpQkFBaUIsdUJBQXVCLFVBQVUsaUJBQWlCLFFBQVEsYUFBYSxVQUFVLFFBQVEsZUFBZSxVQUFVLFdBQVcsVUFBVSx1QkFBdUIsV0FBVyxpQkFBaUIsY0FBYyxlQUFlLGFBQWEsV0FBVyxTQUFTLFdBQVcsVUFBVSxXQUFXLE9BQU8sYUFBYSxlQUFlLFFBQVEsY0FBYyxRQUFRLGdCQUFnQixzQkFBc0IsVUFBVSxRQUFRLG9CQUFvQixTQUFTLHFCQUFxQixXQUFXLGlCQUFpQixZQUFZLGdCQUFnQixhQUFhLFFBQVEsbUJBQW1CLFNBQVMsVUFBVSxxQkFBcUIsd0JBQXdCLGVBQWUsa0JBQWtCLDBCQUEwQiwwQkFBMEIsaUJBQWlCLFNBQVMsU0FBUyxhQUFhLFlBQVksWUFBWSxhQUFhLFVBQVUsWUFBWSxhQUFhLFVBQVUsYUFBYSxrQkFBa0IsY0FBYyxtQkFBbUIsa0JBQWtCLG1CQUFtQixpQkFBaUIsa0JBQWtCLFNBQVMsUUFBUSxjQUFjLGFBQWEsV0FBVyxVQUFVLGFBQWEsT0FBTyxlQUFlLFdBQVcsdUJBQXVCLHdCQUF3QixzQkFBc0IsbUJBQW1CLE9BQU8sUUFBUSxlQUFlLFlBQVksZUFBZSxlQUFlLGNBQWMsWUFBWSxTQUFTLFVBQVUsVUFBVSx1QkFBdUIsYUFBYSxRQUFRLGNBQWMsU0FBUyxpQkFBaUIsVUFBVSxlQUFlLFdBQVcsa0JBQWtCLG9CQUFvQiwyQkFBMkIsa0JBQWtCLHlCQUF5QixZQUFZLFdBQVcsV0FBVyxvQkFBb0IsZ0JBQWdCLGFBQWEsVUFBVSxZQUFZLGVBQWUsV0FBVyxlQUFlLFdBQVcsb0JBQW9CLGdCQUFnQixjQUFjLFlBQVksb0JBQW9CLHNCQUFzQixVQUFVLGNBQWMsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IsY0FBYyw0QkFBNEIsaUJBQWlCLGFBQWEsb0JBQW9CLGdCQUFnQixhQUFhLG1CQUFtQixjQUFjLGtCQUFrQixjQUFjLGFBQWEsa0JBQWtCLGlCQUFpQixZQUFZLGtCQUFrQixrQkFBa0IsV0FBVyxhQUFhLFlBQVksZ0JBQWdCLGVBQWUsc0JBQXNCLG9CQUFvQixlQUFlLGtCQUFrQixlQUFlLGFBQWEsZUFBZSxlQUFlLGlCQUFpQixnQkFBZ0Isa0JBQWtCLG1CQUFtQixpQkFBaUIsY0FBYyxvQkFBb0IscUJBQXFCLGFBQWEsbUJBQW1CLGNBQWMsZUFBZSxlQUFlLGVBQWUsWUFBWSxhQUFhLG1CQUFtQixlQUFlLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxZQUFZLFVBQVUsQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsTUFBTTtBQUFBLE1BQ2hxTixNQUFNLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsaUJBQWlCLGNBQWMsdUJBQXVCLFlBQVksYUFBYSxTQUFTLGdCQUFnQixjQUFjLFVBQVUsWUFBWSxnQkFBZ0IsUUFBUSxhQUFhLGFBQWEsY0FBYyxXQUFXLGNBQWMsWUFBWSxZQUFZLGdCQUFnQixVQUFVLFFBQVEsYUFBYSxRQUFRLG1CQUFtQixpQkFBaUIsVUFBVSxjQUFjLFNBQVMsU0FBUyxPQUFPLFlBQVksWUFBWSxhQUFhLFlBQVksU0FBUyx1QkFBdUIsU0FBUyxxQkFBcUIsU0FBUyxnQkFBZ0IsZUFBZSxjQUFjLFdBQVcsV0FBVyxTQUFTLFdBQVcsV0FBVyxjQUFjLGFBQWEsbUJBQW1CLHdCQUF3QixtQkFBbUIsb0JBQW9CLHNCQUFzQixvQkFBb0IsUUFBUSxpQkFBaUIscUJBQXFCLHdCQUF3Qix1QkFBdUIseUJBQXlCLFNBQVMsOEJBQThCLHdCQUF3QixjQUFjLFlBQVksT0FBTyxnQkFBZ0Isa0JBQWtCLFlBQVksV0FBVyxlQUFlLGVBQWUsWUFBWSxnQkFBZ0IsaUJBQWlCLGFBQWEsT0FBTyxtQkFBbUIsb0JBQW9CLFlBQVkscUJBQXFCLG1CQUFtQixvQkFBb0IsY0FBYyxtQkFBbUIsbUJBQW1CLGlCQUFpQiw4QkFBOEIsNEJBQTRCLGlCQUFpQixnQkFBZ0IseUJBQXlCLHlCQUF5Qix1QkFBdUIseUJBQXlCLHdCQUF3QixzQkFBc0IsY0FBYyxxQkFBcUIsNEJBQTRCLDZCQUE2Qix5QkFBeUIsMEJBQTBCLGNBQWMsZ0JBQWdCLGVBQWUsbUJBQW1CLGNBQWMsdUJBQXVCLFNBQVMsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsY0FBYyxnQkFBZ0IsT0FBTyxhQUFhLGFBQWEsZUFBZSxXQUFXLGVBQWUsVUFBVSxRQUFRLFlBQVksUUFBUSxlQUFlLGdCQUFnQixxQkFBcUIsY0FBYyxhQUFhLGlCQUFpQixjQUFjLGtCQUFrQixZQUFZLFFBQVEsVUFBVSxXQUFXLFNBQVMsUUFBUSxrQkFBa0IsWUFBWSxRQUFRLFdBQVcsU0FBUyxnQkFBZ0IsV0FBVyxRQUFRLFFBQVEsYUFBYSxTQUFTLGdCQUFnQixjQUFjLGFBQWEsY0FBYyxzQkFBc0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGtCQUFrQixnQkFBZ0IsaUJBQWlCLGVBQWUsV0FBVyxVQUFVLE1BQU0sWUFBWSxZQUFZLGVBQWUsY0FBYyxlQUFlLFlBQVksa0JBQWtCLGlCQUFpQixVQUFVLFdBQVcsYUFBYSxjQUFjLGNBQWMsYUFBYSxRQUFRLFFBQVEsV0FBVyxRQUFRLFlBQVksV0FBVyxlQUFlLGlCQUFpQixjQUFjLGlCQUFpQixhQUFhLGlCQUFpQixhQUFhLHlCQUF5QixZQUFZLGFBQWEsdUJBQXVCLFlBQVksbUJBQW1CLGlCQUFpQixjQUFjLGtCQUFrQixlQUFlLG9CQUFvQixxQkFBcUIsd0JBQXdCLFlBQVksV0FBVyxlQUFlLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSxXQUFXLGVBQWUsYUFBYSxjQUFjLGtCQUFrQixlQUFlLGdCQUFnQixZQUFZLGlCQUFpQixlQUFlLGVBQWUsYUFBYSxhQUFhLHFCQUFxQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsYUFBYSxnQkFBZ0Isa0JBQWtCLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSx1QkFBdUIsV0FBVyxrQkFBa0IsY0FBYyxpQkFBaUIsa0JBQWtCLGlCQUFpQixzQkFBc0IsVUFBVSwwQkFBMEIsb0JBQW9CLG1CQUFtQixpQkFBaUIsYUFBYSxVQUFVLFFBQVEsWUFBWSxZQUFZLGFBQWEsVUFBVSxTQUFTLGlCQUFpQixjQUFjLFlBQVksU0FBUyxpQkFBaUIsdUJBQXVCLFVBQVUsaUJBQWlCLFFBQVEsYUFBYSxVQUFVLFFBQVEsZUFBZSxVQUFVLFdBQVcsVUFBVSx1QkFBdUIsV0FBVyxpQkFBaUIsY0FBYyxlQUFlLGFBQWEsV0FBVyxTQUFTLFdBQVcsVUFBVSxXQUFXLE9BQU8sYUFBYSxlQUFlLFFBQVEsY0FBYyxRQUFRLGdCQUFnQixzQkFBc0IsVUFBVSxRQUFRLG9CQUFvQixTQUFTLHFCQUFxQixXQUFXLGlCQUFpQixZQUFZLGdCQUFnQixhQUFhLFFBQVEsbUJBQW1CLFNBQVMsVUFBVSxxQkFBcUIsd0JBQXdCLGVBQWUsa0JBQWtCLDBCQUEwQiwwQkFBMEIsaUJBQWlCLFNBQVMsU0FBUyxhQUFhLFlBQVksWUFBWSxhQUFhLFVBQVUsWUFBWSxhQUFhLFVBQVUsYUFBYSxrQkFBa0IsY0FBYyxtQkFBbUIsa0JBQWtCLG1CQUFtQixpQkFBaUIsa0JBQWtCLFNBQVMsUUFBUSxjQUFjLGFBQWEsV0FBVyxVQUFVLGFBQWEsT0FBTyxlQUFlLFdBQVcsdUJBQXVCLHdCQUF3QixzQkFBc0IsbUJBQW1CLE9BQU8sUUFBUSxlQUFlLFlBQVksZUFBZSxlQUFlLGNBQWMsWUFBWSxTQUFTLFVBQVUsVUFBVSx1QkFBdUIsYUFBYSxRQUFRLGNBQWMsU0FBUyxpQkFBaUIsVUFBVSxlQUFlLFdBQVcsa0JBQWtCLG9CQUFvQiwyQkFBMkIsa0JBQWtCLHlCQUF5QixZQUFZLFdBQVcsV0FBVyxvQkFBb0IsZ0JBQWdCLGFBQWEsVUFBVSxZQUFZLGVBQWUsV0FBVyxlQUFlLFdBQVcsb0JBQW9CLGdCQUFnQixjQUFjLFlBQVksb0JBQW9CLHNCQUFzQixVQUFVLGNBQWMsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IsY0FBYyw0QkFBNEIsaUJBQWlCLGFBQWEsb0JBQW9CLGdCQUFnQixhQUFhLG1CQUFtQixjQUFjLGtCQUFrQixjQUFjLGFBQWEsa0JBQWtCLGlCQUFpQixZQUFZLGtCQUFrQixrQkFBa0IsV0FBVyxhQUFhLFlBQVksZ0JBQWdCLGVBQWUsc0JBQXNCLG9CQUFvQixlQUFlLGtCQUFrQixlQUFlLGFBQWEsZUFBZSxlQUFlLGlCQUFpQixnQkFBZ0Isa0JBQWtCLG1CQUFtQixpQkFBaUIsY0FBYyxvQkFBb0IscUJBQXFCLGFBQWEsbUJBQW1CLGNBQWMsZUFBZSxlQUFlLGVBQWUsWUFBWSxhQUFhLG1CQUFtQixlQUFlLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxZQUFZLFVBQVUsQ0FBQyxFQUFFO0FBQUEsTUFDam5OLE1BQU0sb0JBQUFBLFFBQVU7QUFBQSxNQUNoQixPQUFPLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsSUFBSSxVQUFVLENBQUM7QUFBQSxNQUNsRixLQUFLLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsS0FBSyxVQUFVLENBQUM7QUFBQSxJQUNuRixDQUFDLEVBQUUsVUFBVSxDQUFDO0FBQUEsSUFDZCxPQUFPLG9CQUFBQSxRQUFVLE1BQU07QUFBQSxNQUNyQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsTUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLE1BQzVCLE1BQU0sb0JBQUFBLFFBQVU7QUFBQSxJQUNsQixDQUFDO0FBQUEsSUFDRCxXQUFXLG9CQUFBQSxRQUFVO0FBQUEsSUFDckIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLFlBQVksb0JBQUFBLFFBQVU7QUFBQSxJQUN0QixZQUFZLG9CQUFBQSxRQUFVO0FBQUEsSUFDdEIsVUFBVSxvQkFBQUEsUUFBVTtBQUFBLElBQ3BCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtyQixZQUFZLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLdEIsU0FBUyxvQkFBQUEsUUFBVTtBQUFBLEVBQ3JCOzs7QUs3S0EsTUFBQUMsa0JBQXVFO0FBQ3ZFLE1BQUFDLHNCQUFzQjtBQUV0QixXQUFTLGFBQWEsS0FBSztBQUN6QixXQUFPLE9BQU8sUUFBUSxJQUFJLGVBQWUsU0FBUztBQUFBLEVBQ3BEO0FBRU8sTUFBSSx3QkFBd0IsU0FBU0MsdUJBQXNCQyxRQUFNO0FBQ3RFLFFBQUksWUFBWUEsT0FBSyxXQUNqQixXQUFXQSxPQUFLO0FBQ3BCLFFBQUksY0FBVSx3QkFBTyxJQUFJO0FBQ3pCLFFBQUksUUFBUSx5QkFBUyxLQUFLLFFBQVE7QUFDbEMsUUFBSSxXQUFXLE1BQU07QUFDckIsUUFBSSxrQkFBYyw2QkFBWSxTQUFVLFNBQVM7QUFDL0MsY0FBUSxVQUFVO0FBRWxCLFVBQUksT0FBTyxhQUFhLFlBQVk7QUFDbEMsaUJBQVMsT0FBTztBQUFBLE1BQ2xCLFdBQVcsYUFBYSxRQUFRLEdBQUc7QUFDakMsaUJBQVMsVUFBVTtBQUFBLE1BQ3JCO0FBQUEsSUFDRixHQUFHLENBQUMsUUFBUSxDQUFDO0FBQ2IsbUNBQVUsV0FBWTtBQUNwQixVQUFJLFFBQVEsWUFBWSxRQUFRLE9BQU8sUUFBUSxRQUFRLHNCQUFzQixZQUFZO0FBQ3ZGO0FBQUEsTUFDRjtBQUVBLFVBQUksV0FBVztBQUNiLGdCQUFRLFFBQVEsa0JBQWtCLFNBQVM7QUFBQSxNQUM3QyxPQUFPO0FBQ0wsZ0JBQVEsUUFBUSxrQkFBa0IsRUFBRTtBQUFBLE1BQ3RDO0FBQUEsSUFDRixDQUFDO0FBQ0QsV0FBb0Isa0RBQWEsT0FBTztBQUFBLE1BQ3RDLEtBQUs7QUFBQSxNQUNMLGdCQUFnQjtBQUFBLElBQ2xCLENBQUM7QUFBQSxFQUNIO0FBQ0Esd0JBQXNCLFlBQVk7QUFBQSxJQUNoQyxXQUFXLG9CQUFBQyxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLElBQzVCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtyQixVQUFVLG9CQUFBQSxRQUFVLE1BQU07QUFBQSxNQUN4QixLQUFLLG9CQUFBQSxRQUFVO0FBQUEsSUFDakIsQ0FBQyxFQUFFO0FBQUEsRUFDTDs7O0FDdENPLFdBQVMsb0NBQW9DQyxRQUFNO0FBQ3hELFFBQUlDLFVBQU9ELE9BQUssTUFDWixRQUFRQSxPQUFLLE9BQ2IsWUFBWUEsT0FBSyxXQUNqQixZQUFZQSxPQUFLLFdBQ2pCLGFBQWFBLE9BQUs7QUFDdEIsUUFBSSxXQUFXLENBQUNDLFNBQU0sT0FBTyxXQUFXLFdBQVcsVUFBVSxFQUFFLE9BQU8sU0FBVSxNQUFNO0FBQ3BGLGFBQU8sU0FBUztBQUFBLElBQ2xCLENBQUMsRUFBRTtBQUVILFdBQU8sV0FBVyxJQUFJLHlCQUF5QixPQUFPLFVBQVUsT0FBTyxJQUFJO0FBQUEsRUFDN0U7OztBQ1NBLE1BQUFDLGtCQUFpQztBQUNqQyxNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCOzs7QUNqQ3ZCLE1BQUksY0FBYztBQUFBLElBQ2hCLGtCQUFrQixTQUFTLGlCQUFpQixNQUFNLFNBQVM7QUFDekQsYUFBTyxLQUFLLE9BQU8sSUFBSSxLQUFLO0FBQUEsSUFDOUI7QUFBQSxFQUNGO0FBQ08sTUFBSSxVQUFVLE9BQU8sT0FBTyxXQUFXOzs7QURiOUMsV0FBU0MsVUFBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxVQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLE1BQUlFLGVBQVksQ0FBQyxhQUFhLE1BQU0sUUFBUSxlQUFlLGFBQWEsYUFBYSxhQUFhLFlBQVksZUFBZSxjQUFjLFlBQVksZUFBZSxVQUFVLFNBQVM7QUFFekwsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFbFQsV0FBU0Msa0JBQWdCLFVBQVUsYUFBYTtBQUFFLFFBQUksRUFBRSxvQkFBb0IsY0FBYztBQUFFLFlBQU0sSUFBSSxVQUFVLG1DQUFtQztBQUFBLElBQUc7QUFBQSxFQUFFO0FBRXhKLFdBQVNDLG9CQUFrQixRQUFRLE9BQU87QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUUsVUFBSSxhQUFhLE1BQU0sQ0FBQztBQUFHLGlCQUFXLGFBQWEsV0FBVyxjQUFjO0FBQU8saUJBQVcsZUFBZTtBQUFNLFVBQUksV0FBVztBQUFZLG1CQUFXLFdBQVc7QUFBTSxhQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUssVUFBVTtBQUFBLElBQUc7QUFBQSxFQUFFO0FBRTVULFdBQVNDLGVBQWEsYUFBYSxZQUFZLGFBQWE7QUFBRSxRQUFJO0FBQVksTUFBQUQsb0JBQWtCLFlBQVksV0FBVyxVQUFVO0FBQUcsUUFBSTtBQUFhLE1BQUFBLG9CQUFrQixhQUFhLFdBQVc7QUFBRyxXQUFPO0FBQUEsRUFBYTtBQUV0TixXQUFTRSxZQUFVLFVBQVUsWUFBWTtBQUFFLFFBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQUUsWUFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsSUFBRztBQUFFLGFBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRSxDQUFDO0FBQUcsUUFBSTtBQUFZLE1BQUFDLGtCQUFnQixVQUFVLFVBQVU7QUFBQSxFQUFHO0FBRWhZLFdBQVNBLGtCQUFnQixHQUFHLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxrQkFBa0IsU0FBU0Esa0JBQWdCQyxJQUFHQyxJQUFHO0FBQUUsTUFBQUQsR0FBRSxZQUFZQztBQUFHLGFBQU9EO0FBQUEsSUFBRztBQUFHLFdBQU9ELGtCQUFnQixHQUFHLENBQUM7QUFBQSxFQUFHO0FBRXpLLFdBQVNHLGVBQWEsU0FBUztBQUFFLFFBQUksNEJBQTRCQyw0QkFBMEI7QUFBRyxXQUFPLFNBQVMsdUJBQXVCO0FBQUUsVUFBSSxRQUFRQyxrQkFBZ0IsT0FBTyxHQUFHO0FBQVEsVUFBSSwyQkFBMkI7QUFBRSxZQUFJLFlBQVlBLGtCQUFnQixJQUFJLEVBQUU7QUFBYSxpQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUFHLE9BQU87QUFBRSxpQkFBUyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFFLGFBQU9DLDZCQUEyQixNQUFNLE1BQU07QUFBQSxJQUFHO0FBQUEsRUFBRztBQUV4YSxXQUFTQSw2QkFBMkJDLE9BQU0sTUFBTTtBQUFFLFFBQUksU0FBU2pCLFVBQVEsSUFBSSxNQUFNLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFBRSxhQUFPO0FBQUEsSUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLElBQUc7QUFBRSxXQUFPa0IseUJBQXVCRCxLQUFJO0FBQUEsRUFBRztBQUUvUixXQUFTQyx5QkFBdUJELE9BQU07QUFBRSxRQUFJQSxVQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksZUFBZSwyREFBMkQ7QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXJLLFdBQVNILDhCQUE0QjtBQUFFLFFBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsYUFBTztBQUFPLFFBQUksUUFBUSxVQUFVO0FBQU0sYUFBTztBQUFPLFFBQUksT0FBTyxVQUFVO0FBQVksYUFBTztBQUFNLFFBQUk7QUFBRSxjQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLENBQUMsR0FBRyxXQUFZO0FBQUEsTUFBQyxDQUFDLENBQUM7QUFBRyxhQUFPO0FBQUEsSUFBTSxTQUFTLEdBQUc7QUFBRSxhQUFPO0FBQUEsSUFBTztBQUFBLEVBQUU7QUFFeFUsV0FBU0Msa0JBQWdCLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsU0FBU0Esa0JBQWdCSixJQUFHO0FBQUUsYUFBT0EsR0FBRSxhQUFhLE9BQU8sZUFBZUEsRUFBQztBQUFBLElBQUc7QUFBRyxXQUFPSSxrQkFBZ0IsQ0FBQztBQUFBLEVBQUc7QUFFNU0sV0FBU0ksa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUFrQmhOLE1BQUksb0JBQW9CO0FBQ2pCLE1BQUksaUJBQThCLHlCQUFVLFlBQVk7QUFDN0QsSUFBQVYsWUFBVVcsaUJBQWdCLFVBQVU7QUFFcEMsUUFBSSxTQUFTUCxlQUFhTyxlQUFjO0FBRXhDLGFBQVNBLGtCQUFpQjtBQUN4QixVQUFJO0FBRUosTUFBQWQsa0JBQWdCLE1BQU1jLGVBQWM7QUFFcEMsZUFBUyxPQUFPLFVBQVUsUUFBUSxPQUFPLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxRQUFRO0FBQ3ZGLGFBQUssSUFBSSxJQUFJLFVBQVUsSUFBSTtBQUFBLE1BQzdCO0FBRUEsY0FBUSxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBRXJELE1BQUFELGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxTQUFTO0FBQUEsUUFDdEQsT0FBTyxNQUFNLE1BQU0sU0FBUyxPQUFPLE1BQU0sTUFBTSxnQkFBZ0IsRUFBRTtBQUFBLE1BQ25FLENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsZ0JBQWdCLElBQUk7QUFFbkUsTUFBQUMsa0JBQWdCRCx5QkFBdUIsS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDO0FBRTdELE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxXQUFXLFdBQVk7QUFVcEUsWUFBSSxtQkFBbUIsT0FBTyx5QkFBeUIsaUJBQWlCLFdBQVcsT0FBTztBQUMxRixZQUFJLHlCQUF5QixtQkFBbUIsaUJBQWlCLE1BQU07QUFFdkUsWUFBSSx3QkFBd0I7QUFDMUIsaUNBQXVCLEtBQUssTUFBTSxjQUFjLEVBQUU7QUFBQSxRQUNwRDtBQUdBLFlBQUk7QUFFSixZQUFJLFdBQVcsVUFBVSxPQUFPLFVBQVUsWUFBWTtBQUNwRCxrQkFBUSxJQUFJLE1BQU0sU0FBUztBQUFBLFlBQ3pCLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNkLENBQUM7QUFBQSxRQUNILE9BQU87QUFFTCxrQkFBUSxTQUFTLFlBQVksT0FBTztBQUNwQyxnQkFBTSxVQUFVLFNBQVMsTUFBTSxLQUFLO0FBQUEsUUFDdEM7QUFFQSxZQUFJLE1BQU0sY0FBYztBQUN0QixjQUFJLE9BQU87QUFDVCxrQkFBTSxhQUFhLGNBQWMsS0FBSztBQUFBLFVBQ3hDO0FBR0EsZ0JBQU0sYUFBYSxNQUFNO0FBRXpCLGdCQUFNLGFBQWEsY0FBYyxJQUFJLE1BQU0sUUFBUSxDQUFDO0FBQUEsUUFDdEQ7QUFFQSxjQUFNLFNBQVM7QUFBQSxVQUNiLE9BQU87QUFBQSxRQUNULENBQUM7QUFFRCxZQUFJLGNBQWMsTUFBTSxPQUNwQixjQUFjLFlBQVksYUFDMUIsV0FBVyxZQUFZO0FBRTNCLFlBQUksWUFBWSxhQUFhO0FBQzNCLG1CQUFTLEVBQUU7QUFBQSxRQUNiO0FBQUEsTUFDRixDQUFDO0FBRUQsTUFBQUMsa0JBQWdCRCx5QkFBdUIsS0FBSyxHQUFHLFVBQVUsU0FBVSxjQUFjO0FBQy9FLGNBQU0sZUFBZTtBQUVyQixZQUFJLE1BQU0sTUFBTSxVQUFVO0FBQ3hCLGdCQUFNLE1BQU0sU0FBUyxZQUFZO0FBQUEsUUFDbkM7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsV0FBVyxTQUFVLE9BQU8sYUFBYSxVQUFVO0FBQ2hHLGNBQU0sU0FBUztBQUFBLFVBQ2IsT0FBTyxNQUFNLE9BQU87QUFBQSxRQUN0QixDQUFDO0FBRUQsWUFBSSxNQUFNLE1BQU0sU0FBUztBQUN2QixnQkFBTSxNQUFNLFFBQVEsS0FBSztBQUV6QixjQUFJLE1BQU0sa0JBQWtCO0FBQzFCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLGFBQWEsTUFBTSxRQUFRLGFBQUssU0FBUyxlQUFlLE1BQU0sUUFBUSxhQUFLLFNBQVMsQ0FBQyxvQkFBb0I7QUFDM0csbUJBQVMsTUFBTSxPQUFPLEtBQUs7QUFBQSxRQUM3QjtBQUFBLE1BQ0YsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNUO0FBRUEsSUFBQVYsZUFBYVksaUJBQWdCLENBQUM7QUFBQSxNQUM1QixLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsb0JBQW9CO0FBQ2xDLFlBQUksU0FBUztBQUViLFlBQUksQ0FBQyxLQUFLO0FBQWM7QUFDeEIsNEJBQW9CLFFBQVEsaUJBQWlCLFVBQVUsS0FBSyxZQUFZO0FBRXhFLFlBQUksbUJBQW1CO0FBQ3JCLGNBQUksV0FBVyxTQUFTQyxVQUFTLE9BQU87QUFDdEMsZ0JBQUksT0FBTyxNQUFNLFVBQVU7QUFDekIsa0JBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxVQUFVLE1BQU07QUFBa0I7QUFFdkQscUJBQU8sTUFBTSxTQUFTLE1BQU0sT0FBTyxLQUFLO0FBQUEsWUFDMUM7QUFBQSxVQUNGO0FBRUEsZUFBSyxhQUFhLGlCQUFpQixVQUFVLFFBQVE7QUFDckQsZUFBSyxTQUFTLEtBQUssV0FBWTtBQUM3QixnQkFBSSxDQUFDLE9BQU87QUFBYztBQUUxQixtQkFBTyxhQUFhLG9CQUFvQixVQUFVLFFBQVE7QUFBQSxVQUM1RCxDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUksV0FBVyxTQUFTQyxVQUFTLE9BQU87QUFDdEMsY0FBSSxNQUFNLFVBQVUsTUFBTSxPQUFPLFVBQVUsT0FBTyxNQUFNLE9BQU87QUFDN0QsbUJBQU8sU0FBUztBQUFBLGNBQ2QsT0FBTyxNQUFNLE9BQU87QUFBQSxZQUN0QixDQUFDO0FBRUQsZ0JBQUksT0FBTyxNQUFNLFVBQVU7QUFDekIscUJBQU8sTUFBTSxTQUFTLE1BQU0sT0FBTyxLQUFLO0FBQUEsWUFDMUM7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLGFBQUssYUFBYSxpQkFBaUIsVUFBVSxRQUFRO0FBQUEsTUFDdkQ7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyx1QkFBdUI7QUFDckMsYUFBSyxTQUFTLFFBQVEsU0FBVSxTQUFTO0FBQ3ZDLGlCQUFPLFFBQVE7QUFBQSxRQUNqQixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTQyxVQUFTO0FBQ3ZCLFlBQUksU0FBUztBQUViLFlBQUksZUFBZSxLQUFLLE9BQ3BCLFlBQVksYUFBYSxXQUN6QixLQUFLLGFBQWEsSUFDbEIsT0FBTyxhQUFhLE1BQ3BCLGNBQWMsYUFBYSxhQUMzQixZQUFZLGFBQWEsV0FDekIsWUFBWSxhQUFhLFdBQ3pCLFlBQVksYUFBYSxXQUN6QixXQUFXLGFBQWEsVUFDeEIsY0FBYyxhQUFhLGFBQzNCLGFBQWEsYUFBYSxZQUMxQixXQUFXLGFBQWEsVUFDeEIsZUFBZSxhQUFhLGFBQzVCQyxVQUFTLGFBQWEsUUFDdEIsVUFBVSxhQUFhLFNBQ3ZCLE9BQU9wQiw0QkFBeUIsY0FBY0YsWUFBUztBQUUzRCxZQUFJLFFBQVEsS0FBSyxNQUFNO0FBQ3ZCLFlBQUksT0FBTyxLQUFLLE1BQU0sVUFBVTtBQUFVLGtCQUFRLEtBQUssTUFBTTtBQUU3RCxZQUFJLGNBQWMsUUFBUSxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssWUFBWSxDQUFDLEtBQUssUUFBUTtBQUNuRixZQUFJLGdCQUFnQixvQ0FBb0M7QUFBQSxVQUN0RCxPQUFPO0FBQUEsVUFDUDtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUM7QUFDRCxZQUFJLGNBQVUsb0JBQUF1QixTQUFXLGtCQUFrQixlQUFlO0FBQUEsVUFDeEQsNkJBQTZCO0FBQUEsVUFDN0IsOEJBQThCO0FBQUEsVUFDOUIsMkJBQTJCLFdBQVdEO0FBQUEsVUFDdEMsNEJBQTRCO0FBQUEsVUFDNUIsOEJBQThCO0FBQUEsVUFDOUIsNEJBQTRCO0FBQUEsUUFDOUIsR0FBRyxTQUFTO0FBQ1osZUFBTyxJQUFjLHNCQUFzQjtBQUFBLFVBQ3pDLE1BQU07QUFBQSxVQUNOO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLE9BQU8sY0FBYztBQUFBLFlBQ25CLFNBQVMsS0FBSztBQUFBLFlBQ2Qsa0JBQWtCO0FBQUEsVUFDcEIsSUFBSTtBQUFBLFVBQ0o7QUFBQSxVQUNBLFFBQVFBO0FBQUEsVUFDUjtBQUFBLFFBQ0YsR0FBRyxJQUFjLHVCQUF1QjtBQUFBLFVBQ3RDO0FBQUEsUUFDRixHQUFHLElBQWMsU0FBU3JCLFlBQVM7QUFBQSxVQUNqQyxNQUFNO0FBQUEsVUFDTjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQSxXQUFXO0FBQUEsVUFDWCxTQUFTLFNBQVMsUUFBUSxHQUFHO0FBQzNCLG1CQUFPLE9BQU8sUUFBUSxHQUFHLGFBQWEsUUFBUTtBQUFBLFVBQ2hEO0FBQUEsVUFDQSxLQUFLLEtBQUs7QUFBQSxRQUNaLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUFBLE1BQ1o7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUVGLFdBQU9pQjtBQUFBLEVBQ1QsRUFBRSx5QkFBUztBQUVYLEVBQUFELGtCQUFnQixnQkFBZ0IsZ0JBQWdCO0FBQUEsSUFDOUMsV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsWUFBWTtBQUFBLElBQ1osYUFBYTtBQUFBLEVBQ2YsQ0FBQztBQUVELGlCQUFlLFlBQVk7QUFBQSxJQUN6QixNQUFNLG9CQUFBTyxRQUFVO0FBQUEsSUFDaEIsSUFBSSxvQkFBQUEsUUFBVTtBQUFBLElBQ2QsYUFBYSxvQkFBQUEsUUFBVTtBQUFBLElBQ3ZCLE9BQU8sb0JBQUFBLFFBQVU7QUFBQSxJQUNqQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsSUFDckIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXJCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXBCLGFBQWEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt2QixZQUFZLG9CQUFBQSxRQUFVO0FBQUEsSUFDdEIsVUFBVSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3BCLGFBQWEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXZCLFNBQVMsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsUUFBUSxVQUFVLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLFFBQVEsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxRQUFRLFVBQVUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXJQLFFBQVEsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsUUFBUSxVQUFVLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLFFBQVEsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxRQUFRLFVBQVUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7QUFBQSxJQUNwUCxXQUFXLG9CQUFBQSxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLEVBQzlCOzs7QUV4VEEsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7QUFqQnZCLE1BQUlDLGVBQVksQ0FBQyxZQUFZLFdBQVc7QUFFeEMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhM1MsTUFBSSxtQkFBbUIsU0FBU0Msa0JBQWlCQyxRQUFNO0FBQzVELFFBQUksV0FBV0EsT0FBSyxVQUNoQixZQUFZQSxPQUFLLFdBQ2pCLE9BQU9ILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVuRCxRQUFJLGNBQVUsb0JBQUFNLFNBQVcsb0JBQW9CLFNBQVM7QUFDdEQsV0FBTyxJQUFjLE9BQU9MLFlBQVM7QUFBQSxNQUNuQyxXQUFXO0FBQUEsTUFDWCxhQUFhO0FBQUEsSUFDZixHQUFHLElBQUksR0FBRyxRQUFRO0FBQUEsRUFDcEI7QUFDQSxtQkFBaUIsWUFBWTtBQUFBLElBQzNCLFdBQVcsb0JBQUFNLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsRUFDOUI7OztBQ25CQSxNQUFBQyxrQkFBa0I7QUFDbEIsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1QjtBQWpCdkIsTUFBSUMsZUFBWSxDQUFDLFlBQVksV0FBVztBQUV4QyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWEzUyxNQUFJLGtCQUFrQixTQUFTQyxpQkFBZ0JDLFFBQU07QUFDMUQsUUFBSSxXQUFXQSxPQUFLLFVBQ2hCLFlBQVlBLE9BQUssV0FDakIsT0FBT0gsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRW5ELFFBQUksY0FBVSxvQkFBQU0sU0FBVyxtQkFBbUIsU0FBUztBQUNyRCxXQUFPLElBQWMsT0FBT0wsWUFBUztBQUFBLE1BQ25DLFdBQVc7QUFBQSxJQUNiLEdBQUcsSUFBSSxHQUFHLFFBQVE7QUFBQSxFQUNwQjtBQUNBLGtCQUFnQixZQUFZO0FBQUEsSUFDMUIsV0FBVyxvQkFBQU0sUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxFQUM5Qjs7O0FDc0JBLE1BQUFDLGtCQUF5RDtBQUN6RCxNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCO0FBekR2QixXQUFTQyxVQUFRLEtBQUs7QUFBRTtBQUEyQixRQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sT0FBTyxhQUFhLFVBQVU7QUFBRSxNQUFBQSxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUcsT0FBTztBQUFFLE1BQUFELFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU9BLFFBQU8sT0FBTyxXQUFXLGNBQWNBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRztBQUFFLFdBQU9ELFVBQVEsR0FBRztBQUFBLEVBQUc7QUFFelgsTUFBSUUsZUFBWSxDQUFDLFlBQVksWUFBWSxhQUFhLFNBQVMsU0FBUyxhQUFhLGVBQWUsc0JBQXNCLGFBQWEsYUFBYSxrQkFBa0IsV0FBVyxpQkFBaUIsTUFBTSxZQUFZO0FBRXBOLFdBQVNDLG9CQUFtQixLQUFLO0FBQUUsV0FBT0Msb0JBQW1CLEdBQUcsS0FBS0Msa0JBQWlCLEdBQUcsS0FBS0MsOEJBQTRCLEdBQUcsS0FBS0Msb0JBQW1CO0FBQUEsRUFBRztBQUV4SixXQUFTQSxzQkFBcUI7QUFBRSxVQUFNLElBQUksVUFBVSxzSUFBc0k7QUFBQSxFQUFHO0FBRTdMLFdBQVNELDhCQUE0QixHQUFHLFFBQVE7QUFBRSxRQUFJLENBQUM7QUFBRztBQUFRLFFBQUksT0FBTyxNQUFNO0FBQVUsYUFBT0Usb0JBQWtCLEdBQUcsTUFBTTtBQUFHLFFBQUksSUFBSSxPQUFPLFVBQVUsU0FBUyxLQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUFHLFFBQUksTUFBTSxZQUFZLEVBQUU7QUFBYSxVQUFJLEVBQUUsWUFBWTtBQUFNLFFBQUksTUFBTSxTQUFTLE1BQU07QUFBTyxhQUFPLE1BQU0sS0FBSyxDQUFDO0FBQUcsUUFBSSxNQUFNLGVBQWUsMkNBQTJDLEtBQUssQ0FBQztBQUFHLGFBQU9BLG9CQUFrQixHQUFHLE1BQU07QUFBQSxFQUFHO0FBRS9aLFdBQVNILGtCQUFpQixNQUFNO0FBQUUsUUFBSSxPQUFPLFdBQVcsZUFBZSxLQUFLLE9BQU8sUUFBUSxLQUFLLFFBQVEsS0FBSyxZQUFZLEtBQUs7QUFBTSxhQUFPLE1BQU0sS0FBSyxJQUFJO0FBQUEsRUFBRztBQUU3SixXQUFTRCxvQkFBbUIsS0FBSztBQUFFLFFBQUksTUFBTSxRQUFRLEdBQUc7QUFBRyxhQUFPSSxvQkFBa0IsR0FBRztBQUFBLEVBQUc7QUFFMUYsV0FBU0Esb0JBQWtCLEtBQUssS0FBSztBQUFFLFFBQUksT0FBTyxRQUFRLE1BQU0sSUFBSTtBQUFRLFlBQU0sSUFBSTtBQUFRLGFBQVMsSUFBSSxHQUFHLE9BQU8sSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssS0FBSztBQUFFLFdBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBTTtBQUV0TCxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyxVQUFRQyxTQUFRLGdCQUFnQjtBQUFFLFFBQUlDLFFBQU8sT0FBTyxLQUFLRCxPQUFNO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksVUFBVSxPQUFPLHNCQUFzQkEsT0FBTTtBQUFHLFVBQUksZ0JBQWdCO0FBQUUsa0JBQVUsUUFBUSxPQUFPLFNBQVUsS0FBSztBQUFFLGlCQUFPLE9BQU8seUJBQXlCQSxTQUFRLEdBQUcsRUFBRTtBQUFBLFFBQVksQ0FBQztBQUFBLE1BQUc7QUFBRSxNQUFBQyxNQUFLLEtBQUssTUFBTUEsT0FBTSxPQUFPO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUV4VixXQUFTQyxnQkFBYyxRQUFRO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFVBQUksU0FBUyxVQUFVLENBQUMsS0FBSyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFBRyxVQUFJLElBQUksR0FBRztBQUFFLFFBQUFILFVBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsVUFBQUksa0JBQWdCLFFBQVEsS0FBSyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUcsV0FBVyxPQUFPLDJCQUEyQjtBQUFFLGVBQU8saUJBQWlCLFFBQVEsT0FBTywwQkFBMEIsTUFBTSxDQUFDO0FBQUEsTUFBRyxPQUFPO0FBQUUsUUFBQUosVUFBUSxPQUFPLE1BQU0sQ0FBQyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsaUJBQU8sZUFBZSxRQUFRLEtBQUssT0FBTyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRXJoQixXQUFTSyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUVsVCxXQUFTQyxrQkFBZ0IsVUFBVSxhQUFhO0FBQUUsUUFBSSxFQUFFLG9CQUFvQixjQUFjO0FBQUUsWUFBTSxJQUFJLFVBQVUsbUNBQW1DO0FBQUEsSUFBRztBQUFBLEVBQUU7QUFFeEosV0FBU0Msb0JBQWtCLFFBQVEsT0FBTztBQUFFLGFBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFBRSxVQUFJLGFBQWEsTUFBTSxDQUFDO0FBQUcsaUJBQVcsYUFBYSxXQUFXLGNBQWM7QUFBTyxpQkFBVyxlQUFlO0FBQU0sVUFBSSxXQUFXO0FBQVksbUJBQVcsV0FBVztBQUFNLGFBQU8sZUFBZSxRQUFRLFdBQVcsS0FBSyxVQUFVO0FBQUEsSUFBRztBQUFBLEVBQUU7QUFFNVQsV0FBU0MsZUFBYSxhQUFhLFlBQVksYUFBYTtBQUFFLFFBQUk7QUFBWSxNQUFBRCxvQkFBa0IsWUFBWSxXQUFXLFVBQVU7QUFBRyxRQUFJO0FBQWEsTUFBQUEsb0JBQWtCLGFBQWEsV0FBVztBQUFHLFdBQU87QUFBQSxFQUFhO0FBRXROLFdBQVNFLFlBQVUsVUFBVSxZQUFZO0FBQUUsUUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFBRSxZQUFNLElBQUksVUFBVSxvREFBb0Q7QUFBQSxJQUFHO0FBQUUsYUFBUyxZQUFZLE9BQU8sT0FBTyxjQUFjLFdBQVcsV0FBVyxFQUFFLGFBQWEsRUFBRSxPQUFPLFVBQVUsVUFBVSxNQUFNLGNBQWMsS0FBSyxFQUFFLENBQUM7QUFBRyxRQUFJO0FBQVksTUFBQUMsa0JBQWdCLFVBQVUsVUFBVTtBQUFBLEVBQUc7QUFFaFksV0FBU0Esa0JBQWdCLEdBQUcsR0FBRztBQUFFLElBQUFBLG9CQUFrQixPQUFPLGtCQUFrQixTQUFTQSxrQkFBZ0JDLElBQUdDLElBQUc7QUFBRSxNQUFBRCxHQUFFLFlBQVlDO0FBQUcsYUFBT0Q7QUFBQSxJQUFHO0FBQUcsV0FBT0Qsa0JBQWdCLEdBQUcsQ0FBQztBQUFBLEVBQUc7QUFFekssV0FBU0csZUFBYSxTQUFTO0FBQUUsUUFBSSw0QkFBNEJDLDRCQUEwQjtBQUFHLFdBQU8sU0FBUyx1QkFBdUI7QUFBRSxVQUFJLFFBQVFDLGtCQUFnQixPQUFPLEdBQUc7QUFBUSxVQUFJLDJCQUEyQjtBQUFFLFlBQUksWUFBWUEsa0JBQWdCLElBQUksRUFBRTtBQUFhLGlCQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVcsU0FBUztBQUFBLE1BQUcsT0FBTztBQUFFLGlCQUFTLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUFHO0FBQUUsYUFBT0MsNkJBQTJCLE1BQU0sTUFBTTtBQUFBLElBQUc7QUFBQSxFQUFHO0FBRXhhLFdBQVNBLDZCQUEyQkMsT0FBTSxNQUFNO0FBQUUsUUFBSSxTQUFTNUIsVUFBUSxJQUFJLE1BQU0sWUFBWSxPQUFPLFNBQVMsYUFBYTtBQUFFLGFBQU87QUFBQSxJQUFNLFdBQVcsU0FBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLFVBQVUsMERBQTBEO0FBQUEsSUFBRztBQUFFLFdBQU82Qix5QkFBdUJELEtBQUk7QUFBQSxFQUFHO0FBRS9SLFdBQVNDLHlCQUF1QkQsT0FBTTtBQUFFLFFBQUlBLFVBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxlQUFlLDJEQUEyRDtBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFckssV0FBU0gsOEJBQTRCO0FBQUUsUUFBSSxPQUFPLFlBQVksZUFBZSxDQUFDLFFBQVE7QUFBVyxhQUFPO0FBQU8sUUFBSSxRQUFRLFVBQVU7QUFBTSxhQUFPO0FBQU8sUUFBSSxPQUFPLFVBQVU7QUFBWSxhQUFPO0FBQU0sUUFBSTtBQUFFLGNBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxVQUFVLFNBQVMsQ0FBQyxHQUFHLFdBQVk7QUFBQSxNQUFDLENBQUMsQ0FBQztBQUFHLGFBQU87QUFBQSxJQUFNLFNBQVMsR0FBRztBQUFFLGFBQU87QUFBQSxJQUFPO0FBQUEsRUFBRTtBQUV4VSxXQUFTQyxrQkFBZ0IsR0FBRztBQUFFLElBQUFBLG9CQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQixTQUFTQSxrQkFBZ0JKLElBQUc7QUFBRSxhQUFPQSxHQUFFLGFBQWEsT0FBTyxlQUFlQSxFQUFDO0FBQUEsSUFBRztBQUFHLFdBQU9JLGtCQUFnQixDQUFDO0FBQUEsRUFBRztBQUU1TSxXQUFTWixrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQW1CaE4sTUFBSWdCLHlCQUF3QjtBQUFBLElBQzFCLEtBQUs7QUFBQSxJQUNMLGVBQWU7QUFBQSxJQUNmLGtCQUFrQjtBQUFBLElBQ2xCLFFBQVE7QUFBQSxJQUNSLGtCQUFrQjtBQUFBLElBQ2xCLHdCQUF3QjtBQUFBLEVBQzFCO0FBQ08sTUFBSUMsWUFBVyxPQUFPRCxzQkFBcUI7QUFDM0MsTUFBSSxhQUEwQix5QkFBVSxZQUFZO0FBQ3pELElBQUFWLFlBQVVZLGFBQVksVUFBVTtBQUVoQyxRQUFJLFNBQVNSLGVBQWFRLFdBQVU7QUFFcEMsYUFBU0EsY0FBYTtBQUNwQixVQUFJO0FBRUosTUFBQWYsa0JBQWdCLE1BQU1lLFdBQVU7QUFFaEMsZUFBUyxPQUFPLFVBQVUsUUFBUSxRQUFRLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxRQUFRO0FBQ3hGLGNBQU0sSUFBSSxJQUFJLFVBQVUsSUFBSTtBQUFBLE1BQzlCO0FBRUEsY0FBUSxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBRXRELE1BQUFsQixrQkFBZ0JlLHlCQUF1QixLQUFLLEdBQUcsU0FBUztBQUFBLFFBQ3RELFdBQVc7QUFBQSxRQUNYLElBQUksTUFBTSxNQUFNLE1BQU0sZ0JBQWdCLEVBQUU7QUFBQSxNQUMxQyxDQUFDO0FBRUQsTUFBQWYsa0JBQWdCZSx5QkFBdUIsS0FBSyxHQUFHLFdBQVcsV0FBWTtBQUVwRSxZQUFJLGVBQWUsSUFBSSxNQUFNLE9BQU8sd0JBQXdCO0FBRTVELFlBQUksY0FBYztBQUNoQix1QkFBYSxNQUFNLFFBQVEsU0FBUztBQUFBLFFBQ3RDO0FBRUEsY0FBTSxTQUFTLFNBQVVJLFFBQU07QUFDN0IsY0FBSSxZQUFZQSxPQUFLO0FBRXJCLGNBQUksQ0FBQyxXQUFXO0FBQ2QsbUJBQU87QUFBQSxjQUNMLFdBQVc7QUFBQSxZQUNiO0FBQUEsVUFDRixPQUFPO0FBQ0wsbUJBQU87QUFBQSxVQUNUO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsTUFBQW5CLGtCQUFnQmUseUJBQXVCLEtBQUssR0FBRyxVQUFVLFdBQVk7QUFFbkUsWUFBSSxjQUFjLElBQUksTUFBTSxPQUFPLHVCQUF1QjtBQUUxRCxZQUFJLGFBQWE7QUFDZixzQkFBWSxNQUFNLFFBQVEsU0FBUztBQUFBLFFBQ3JDO0FBRUEsY0FBTSxTQUFTO0FBQUEsVUFDYixXQUFXO0FBQUEsUUFDYixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsYUFBTztBQUFBLElBQ1Q7QUFFQSxJQUFBVixlQUFhYSxhQUFZLENBQUM7QUFBQSxNQUN4QixLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVNFLFVBQVM7QUFDdkIsWUFBSUMsUUFBTztBQUVYLFlBQUksY0FBYyxLQUFLLE9BQ25CLFdBQVcsWUFBWSxVQUN2QixXQUFXLFlBQVksVUFDdkIsWUFBWSxZQUFZLFdBQ3hCLFFBQVEsWUFBWSxPQUNwQixRQUFRLFlBQVksT0FDcEIsWUFBWSxZQUFZLFdBQ3hCLGNBQWMsWUFBWSxhQUMxQixxQkFBcUIsWUFBWSxvQkFDakMsWUFBWSxZQUFZLFdBQ3hCLFlBQVksWUFBWSxXQUN4QixpQkFBaUIsWUFBWSxnQkFDN0IsVUFBVSxZQUFZLFNBQ3RCLGdCQUFnQixZQUFZLGVBQzVCLFVBQVUsWUFBWSxJQUN0QixhQUFhLFlBQVksWUFDekIsT0FBT3BCLDRCQUF5QixhQUFhYixZQUFTO0FBRTFELFlBQUksS0FBSyxLQUFLLE1BQU07QUFDcEIsWUFBSSxXQUFXLFNBQVM7QUFDeEIsWUFBSSxjQUFVLG9CQUFBa0M7QUFBQSxVQUFXO0FBQUEsVUFBYztBQUFBLFlBQ3JDLGtDQUFrQztBQUFBLFlBQ2xDLHlCQUF5QjtBQUFBLFlBQ3pCLHdCQUF3QjtBQUFBLFVBQzFCO0FBQUEsVUFBR04sdUJBQXNCLE9BQU87QUFBQTtBQUFBLFVBQ2hDO0FBQUEsUUFBUztBQUNULFlBQUk7QUFFSixZQUFJLFVBQVU7QUFDWixjQUFJLFlBQVksTUFBTSxRQUFRLFFBQVEsSUFBSSxXQUFXLENBQUMsUUFBUTtBQUM5RCw4QkFBb0IsVUFBVSxJQUFJLFNBQVVPLFdBQVUsR0FBRztBQUN2RCxnQkFBSSxNQUFNLE9BQU9BLGNBQWEsV0FBV0EsWUFBVztBQUNwRCxtQkFBTyxJQUFjLGlCQUFpQjtBQUFBLGNBQ3BDO0FBQUEsY0FDQSxJQUFJLEdBQUcsT0FBTyxJQUFJLFFBQVEsRUFBRSxPQUFPLENBQUM7QUFBQSxjQUNwQyxXQUFXO0FBQUEsWUFDYixHQUFHQSxTQUFRO0FBQUEsVUFDYixDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUk7QUFFSixZQUFJLFNBQVMsV0FBVztBQUN0QixjQUFJLGFBQWEsTUFBTSxRQUFRLEtBQUssSUFBSSxRQUFRLENBQUMsS0FBSztBQUN0RCwyQkFBaUIsV0FBVyxJQUFJLFNBQVVDLFFBQU8sR0FBRztBQUNsRCxnQkFBSSxNQUFNLE9BQU9BLFdBQVUsV0FBV0EsU0FBUTtBQUM5QyxtQkFBTyxJQUFjLGtCQUFrQjtBQUFBLGNBQ3JDO0FBQUEsY0FDQSxJQUFJLEdBQUcsT0FBTyxJQUFJLFNBQVMsRUFBRSxPQUFPLENBQUM7QUFBQSxjQUNyQyxXQUFXO0FBQUEsWUFDYixHQUFHQSxNQUFLO0FBQUEsVUFDVixDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUk7QUFDSixZQUFJLFdBQVcsU0FBUyxjQUFjLFdBQVcsT0FBTztBQUN4RCxZQUFJLFVBQVUsR0FBRyxPQUFPLElBQUksUUFBUTtBQUVwQyxZQUFJLFVBQVU7QUFDWixjQUFJLGFBQWEsQ0FBQztBQUVsQixjQUFJLFVBQVU7QUFDWix5QkFBYTtBQUFBLGNBQ1gsTUFBTTtBQUFBLFlBQ1I7QUFBQSxVQUNGLE9BQU87QUFDTCx5QkFBYXpCLGdCQUFjQSxnQkFBYztBQUFBLGNBQ3ZDLFNBQVMsZ0JBQWdCLEtBQUs7QUFBQSxZQUNoQyxHQUFHLENBQUMsY0FBYztBQUFBLGNBQ2hCLFdBQVcsS0FBSyxNQUFNO0FBQUEsWUFDeEIsQ0FBQyxHQUFHLENBQUMsR0FBRztBQUFBO0FBQUEsY0FFTixNQUFNO0FBQUEsWUFDUixDQUFDO0FBQUEsVUFDSDtBQUVBLDBCQUFnQixJQUFjLE9BQU87QUFBQSxZQUNuQyxXQUFXO0FBQUEsVUFDYixHQUFHLElBQWMsY0FBY0osWUFBUztBQUFBLFlBQ3RDLFdBQVc7QUFBQSxZQUNYO0FBQUEsWUFDQTtBQUFBLFlBQ0EsZ0JBQWdCO0FBQUEsWUFDaEIsSUFBSTtBQUFBLFVBQ04sR0FBRyxVQUFVLEdBQUcsS0FBSyxHQUFHLGVBQWUsS0FBSyxXQUFXO0FBQUEsUUFDekQ7QUFFQSxZQUFJLGdCQUFnQixDQUFDO0FBS3JCLFlBQUksZ0JBQWdCTixvQkFBbUIsY0FBYztBQUVyRCxZQUFJLG1CQUFtQjtBQUNyQiw0QkFBa0IsUUFBUSxTQUFVLGtCQUFrQjtBQUNwRCxtQkFBTyxjQUFjLEtBQUssaUJBQWlCLE1BQU0sRUFBRTtBQUFBLFVBQ3JELENBQUM7QUFBQSxRQUNIO0FBRUEsWUFBSSxnQkFBZ0I7QUFDbEIseUJBQWUsUUFBUSxTQUFVbUMsUUFBTztBQUN0QyxtQkFBTyxjQUFjLEtBQUtBLE9BQU0sTUFBTSxFQUFFO0FBQUEsVUFDMUMsQ0FBQztBQUFBLFFBQ0g7QUFFQSxZQUFJLGNBQWMsU0FBUyxHQUFHO0FBQzVCLHdCQUFjLGtCQUFrQixJQUFJLGNBQWMsS0FBSyxHQUFHO0FBQUEsUUFDNUQ7QUFFQSxZQUFJLFFBQVEseUJBQVMsS0FBSyxRQUFRO0FBQ2xDLFlBQUksUUFBcUIsa0RBQWEsT0FBT3pCLGdCQUFjO0FBQUEsVUFDekQ7QUFBQTtBQUFBLFVBRUEsV0FBV3NCLFVBQVMsd0JBQXdCLE1BQU0sTUFBTSxjQUFjLFFBQVEsMEJBQTBCLFNBQVMsd0JBQXdCLE1BQU0sTUFBTSxnQkFBZ0IsUUFBUUEsV0FBVSxTQUFTQSxTQUFRO0FBQUEsVUFDeE0sU0FBUyxLQUFLO0FBQUEsVUFDZCxRQUFRLEtBQUs7QUFBQSxRQUNmLEdBQUcsYUFBYSxDQUFDO0FBQ2pCLFlBQUksMEJBQXNCLG9CQUFBQyxTQUFXLDRCQUE0QjtBQUFBLFVBQy9EO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFJQSxRQUFRLFdBQVcsUUFBUTtBQUFBO0FBQUEsUUFDN0IsQ0FBQztBQUNELFlBQUksY0FBYztBQUFBLFVBQ2hCLFdBQVc7QUFBQSxVQUNYLElBQUksR0FBRyxPQUFPLElBQUksTUFBTTtBQUFBLFFBQzFCO0FBRUEsWUFBSSxXQUFXLElBQWMsZ0JBQUFHLFFBQU0sVUFBVSxNQUFNLGVBQWUsSUFBYyxPQUFPO0FBQUEsVUFDckYsV0FBVztBQUFBLFFBQ2IsR0FBRyxPQUFPLGdCQUFnQixpQkFBaUIsQ0FBQztBQUU1QyxlQUFPLGNBQWMsV0FBVyxJQUFjLFlBQVk5QixZQUFTLENBQUMsR0FBRyxhQUFhLElBQUksR0FBRyxRQUFRLElBQUksSUFBYyxPQUFPQSxZQUFTLENBQUMsR0FBRyxhQUFhLElBQUksR0FBRyxRQUFRO0FBQUEsTUFDdks7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUVGLFdBQU91QjtBQUFBLEVBQ1QsRUFBRSx5QkFBUztBQUVYLEVBQUFsQixrQkFBZ0IsWUFBWSxnQkFBZ0I7QUFBQSxJQUMxQyxTQUFTO0FBQUEsSUFDVCxvQkFBb0I7QUFBQSxJQUNwQixXQUFXO0FBQUEsSUFDWCxnQkFBZ0IsQ0FBQztBQUFBLElBQ2pCLFdBQVc7QUFBQSxJQUNYLGVBQWU7QUFBQSxFQUNqQixDQUFDO0FBRUQsYUFBVyxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtyQixXQUFXLG9CQUFBMEIsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQUEsSUFDeEYsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQXFCNUIsU0FBUyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsT0FBTyxpQkFBaUIsb0JBQW9CLFVBQVUsb0JBQW9CLHdCQUF3QixDQUFDO0FBQUEsSUFDN0gsb0JBQW9CLG9CQUFBQSxRQUFVO0FBQUEsSUFDOUIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU3JCLGdCQUFnQixvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLE9BQU8sVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUzdELGVBQWUsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVN6QixVQUFVLG9CQUFBQSxRQUFVLFFBQVE7QUFBQSxJQUM1QixPQUFPLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQWFqQixhQUFhLG9CQUFBQSxRQUFVO0FBQUEsSUFDdkIsSUFBSSxvQkFBQUEsUUFBVTtBQUFBLElBQ2QsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLE9BQU8sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLEtBQUssWUFBWSxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLEtBQUssVUFBVSxFQUFFLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUy9HLFVBQVUsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLEtBQUssWUFBWSxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLEtBQUssVUFBVSxFQUFFLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU2xILFlBQVksb0JBQUFBLFFBQVU7QUFBQSxFQUN4Qjs7O0FDdFZBLE1BQUFDLGtCQUErQztBQUMvQyxNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCOzs7QUNKdkIsTUFBQUMsa0JBQStDO0FBQy9DLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7QUF2Q3ZCLE1BQUlDLGVBQVksQ0FBQyxZQUFZLGFBQWEsWUFBWSxRQUFRLGFBQWEsWUFBWSxlQUFlLGdCQUFnQixrQkFBa0IsbUJBQW1CLFFBQVEsVUFBVSxPQUFPLE1BQU07QUFFMUwsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsVUFBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxVQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLFdBQVNFLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBRWxULFdBQVNDLGtCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxvQkFBa0IsUUFBUSxPQUFPO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUFFLFVBQUksYUFBYSxNQUFNLENBQUM7QUFBRyxpQkFBVyxhQUFhLFdBQVcsY0FBYztBQUFPLGlCQUFXLGVBQWU7QUFBTSxVQUFJLFdBQVc7QUFBWSxtQkFBVyxXQUFXO0FBQU0sYUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUU1VCxXQUFTQyxlQUFhLGFBQWEsWUFBWSxhQUFhO0FBQUUsUUFBSTtBQUFZLE1BQUFELG9CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUFHLFFBQUk7QUFBYSxNQUFBQSxvQkFBa0IsYUFBYSxXQUFXO0FBQUcsV0FBTztBQUFBLEVBQWE7QUFFdE4sV0FBU0UsWUFBVSxVQUFVLFlBQVk7QUFBRSxRQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUFFLFlBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLElBQUc7QUFBRSxhQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFHLFFBQUk7QUFBWSxNQUFBQyxrQkFBZ0IsVUFBVSxVQUFVO0FBQUEsRUFBRztBQUVoWSxXQUFTQSxrQkFBZ0IsR0FBRyxHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8sa0JBQWtCLFNBQVNBLGtCQUFnQkMsSUFBR0MsSUFBRztBQUFFLE1BQUFELEdBQUUsWUFBWUM7QUFBRyxhQUFPRDtBQUFBLElBQUc7QUFBRyxXQUFPRCxrQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFBRztBQUV6SyxXQUFTRyxlQUFhLFNBQVM7QUFBRSxRQUFJLDRCQUE0QkMsNEJBQTBCO0FBQUcsV0FBTyxTQUFTLHVCQUF1QjtBQUFFLFVBQUksUUFBUUMsa0JBQWdCLE9BQU8sR0FBRztBQUFRLFVBQUksMkJBQTJCO0FBQUUsWUFBSSxZQUFZQSxrQkFBZ0IsSUFBSSxFQUFFO0FBQWEsaUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFBRyxPQUFPO0FBQUUsaUJBQVMsTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBRSxhQUFPQyw2QkFBMkIsTUFBTSxNQUFNO0FBQUEsSUFBRztBQUFBLEVBQUc7QUFFeGEsV0FBU0EsNkJBQTJCQyxPQUFNLE1BQU07QUFBRSxRQUFJLFNBQVNmLFVBQVEsSUFBSSxNQUFNLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFBRSxhQUFPO0FBQUEsSUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLElBQUc7QUFBRSxXQUFPZ0IseUJBQXVCRCxLQUFJO0FBQUEsRUFBRztBQUUvUixXQUFTQyx5QkFBdUJELE9BQU07QUFBRSxRQUFJQSxVQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksZUFBZSwyREFBMkQ7QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXJLLFdBQVNILDhCQUE0QjtBQUFFLFFBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsYUFBTztBQUFPLFFBQUksUUFBUSxVQUFVO0FBQU0sYUFBTztBQUFPLFFBQUksT0FBTyxVQUFVO0FBQVksYUFBTztBQUFNLFFBQUk7QUFBRSxjQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLENBQUMsR0FBRyxXQUFZO0FBQUEsTUFBQyxDQUFDLENBQUM7QUFBRyxhQUFPO0FBQUEsSUFBTSxTQUFTLEdBQUc7QUFBRSxhQUFPO0FBQUEsSUFBTztBQUFBLEVBQUU7QUFFeFUsV0FBU0Msa0JBQWdCLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsU0FBU0Esa0JBQWdCSixJQUFHO0FBQUUsYUFBT0EsR0FBRSxhQUFhLE9BQU8sZUFBZUEsRUFBQztBQUFBLElBQUc7QUFBRyxXQUFPSSxrQkFBZ0IsQ0FBQztBQUFBLEVBQUc7QUFrQjVNLE1BQUlJLHNCQUFxQjtBQUFBLElBQ3ZCLEdBQUc7QUFBQSxJQUNILEdBQUc7QUFBQSxFQUNMO0FBQ08sTUFBSUMsU0FBUSxPQUFPRCxtQkFBa0I7QUFDNUMsTUFBSSwwQkFBMEI7QUFBQSxJQUM1QixRQUFRO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxRQUFRO0FBQUEsRUFDVjtBQUNPLE1BQUksZUFBZSxPQUFPLHVCQUF1QjtBQUNqRCxNQUFJLHFCQUFrQyx5QkFBVSxZQUFZO0FBQ2pFLElBQUFWLFlBQVVZLHFCQUFvQixVQUFVO0FBRXhDLFFBQUksU0FBU1IsZUFBYVEsbUJBQWtCO0FBRTVDLGFBQVNBLHNCQUFxQjtBQUM1QixNQUFBZixrQkFBZ0IsTUFBTWUsbUJBQWtCO0FBRXhDLGFBQU8sT0FBTyxNQUFNLE1BQU0sU0FBUztBQUFBLElBQ3JDO0FBRUEsSUFBQWIsZUFBYWEscUJBQW9CLENBQUM7QUFBQSxNQUNoQyxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVNDLFVBQVM7QUFDdkIsWUFBSSxjQUFjLEtBQUssT0FDbkIsV0FBVyxZQUFZLFVBQ3ZCLFlBQVksWUFBWSxXQUN4QixXQUFXLFlBQVksVUFDdkJDLFVBQU8sWUFBWSxNQUNuQixZQUFZLFlBQVksV0FDeEIsWUFBWSxZQUFZLFVBQ3hCLHdCQUF3QixZQUFZLGFBQ3BDLGNBQWMsMEJBQTBCLFNBQVMsV0FBVyx1QkFDNUQsZUFBZSxZQUFZLGNBQzNCLGlCQUFpQixZQUFZLGdCQUM3Qix3QkFBd0IsWUFBWSxpQkFDcEMsa0JBQWtCLDBCQUEwQixTQUFTLFVBQVUsdUJBQy9ELE9BQU8sWUFBWSxNQUNuQixTQUFTLFlBQVksUUFDckIsTUFBTSxZQUFZLEtBQ2xCQyxRQUFPLFlBQVksTUFDbkIsT0FBT3BCLDRCQUF5QixhQUFhSixZQUFTO0FBRTFELFlBQUk7QUFDSixZQUFJLGNBQWMsQ0FBQyxRQUFRLGFBQWEsSUFBSTtBQUM1QyxZQUFJLFdBQVcsYUFBYSxDQUFDO0FBRTdCLFlBQUl1QixTQUFNO0FBQ1Isa0JBQVFyQixVQUFRcUIsT0FBSSxHQUFHO0FBQUEsWUFDckIsS0FBSztBQUNILDZCQUFlLElBQWMsU0FBUztBQUFBLGdCQUNwQyxNQUFNQTtBQUFBLGdCQUNOLE1BQU07QUFBQSxnQkFDTixXQUFXO0FBQUEsZ0JBQ1gsT0FBTztBQUFBO0FBQUEsY0FFVCxDQUFDO0FBQ0Q7QUFBQSxZQUVGO0FBRUUsNkJBQTRCLGtEQUFhQSxTQUFNO0FBQUEsZ0JBQzdDLFdBQVc7QUFBQSxjQUNiLENBQUM7QUFBQSxVQUNMO0FBQUEsUUFDRjtBQUVBLFlBQUk7QUFFSixZQUFJLFVBQVU7QUFDWixrQkFBUSxJQUFjLFNBQVM7QUFBQSxZQUM3QixNQUFNO0FBQUEsWUFDTixNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsVUFDYixDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUksY0FBVSxvQkFBQUUsU0FBVyxzQkFBc0JELFNBQVFMLG9CQUFtQkssS0FBSSxHQUFHLFdBQVc7QUFBQSxVQUMxRixpQ0FBaUM7QUFBQSxRQUNuQyxDQUFDO0FBQ0QsWUFBSSxvQkFBZ0Isb0JBQUFDLFNBQVcsOEJBQThCLHdCQUF3QixXQUFXLENBQUM7QUFFakcsWUFBSSxjQUFjLElBQWMsUUFBUTtBQUFBLFVBQ3RDLFdBQVc7QUFBQSxRQUNiLEdBQUcsY0FBYyxJQUFjLFFBQVE7QUFBQSxVQUNyQyxXQUFXO0FBQUEsUUFDYixHQUFHLFFBQVEsR0FBRyxLQUFLO0FBRW5CLFlBQUk7QUFHSixZQUFJLFFBQVEsQ0FBQyxVQUFVO0FBQ3JCLGNBQUksWUFBWSxzQkFBc0I7QUFBQSxZQUNwQztBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDRixDQUFDO0FBQ0QsbUJBQVMsSUFBYyxLQUFLeEIsWUFBUztBQUFBLFlBQ25DLFdBQVc7QUFBQSxZQUNYO0FBQUEsWUFDQTtBQUFBLFlBQ0EsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUFBLFVBQ1AsR0FBRyxJQUFJLEdBQUcsV0FBVztBQUFBLFFBQ3ZCLE9BQU87QUFDTCxtQkFBUyxJQUFjLFVBQVVBLFlBQVM7QUFBQSxZQUN4QztBQUFBLFlBQ0EsV0FBVztBQUFBLFlBQ1gsTUFBTTtBQUFBLFlBQ04sS0FBSztBQUFBLFVBQ1AsR0FBRyxJQUFJLEdBQUcsV0FBVztBQUFBLFFBQ3ZCO0FBRUEsWUFBSSxnQkFBZ0I7QUFDbEIsaUJBQU8sSUFBYyxZQUFZO0FBQUEsWUFDL0IsT0FBTyxlQUFlLGVBQWU7QUFBQSxZQUNyQyxTQUFTO0FBQUEsWUFDVCxpQkFBaUI7QUFBQSxZQUNqQixVQUFVO0FBQUEsVUFDWixHQUFHLE1BQU07QUFBQSxRQUNYLE9BQU87QUFDTCxpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDLENBQUM7QUFFRixXQUFPb0I7QUFBQSxFQUNULEVBQUUseUJBQVM7QUFDWCxxQkFBbUIsWUFBWTtBQUFBLElBQzdCLFdBQVcsb0JBQUFLLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDNUIsTUFBTSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsUUFBUSxZQUFZLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxJQUFJLFVBQVUsQ0FBQztBQUFBLElBQy9HLFVBQVUsb0JBQUFBLFFBQVU7QUFBQSxJQUNwQixVQUFVLG9CQUFBQSxRQUFVO0FBQUEsSUFDcEIsU0FBUyxvQkFBQUEsUUFBVTtBQUFBLElBQ25CLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtyQixnQkFBZ0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUsxQixjQUFjLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLeEIsaUJBQWlCLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxPQUFPLFNBQVMsVUFBVSxNQUFNLENBQUM7QUFBQSxJQUNuRSxNQUFNLG9CQUFBQSxRQUFVO0FBQUEsSUFDaEIsUUFBUSxvQkFBQUEsUUFBVTtBQUFBLElBQ2xCLEtBQUssb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtmLGFBQWEsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFVBQVUsT0FBTyxRQUFRLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt4RCxNQUFNLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUFBLEVBQ2xDOzs7QURwTkEsV0FBU0MsVUFBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxVQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLE1BQUlFLGVBQVksQ0FBQyxZQUFZLGFBQWEsV0FBVyxTQUFTLGtCQUFrQixrQkFBa0IsdUJBQXVCLHdCQUF3QiwyQkFBMkIsU0FBUywyQkFBMkIsaUJBQWlCLHFCQUFxQixNQUFNO0FBRTVQLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBRWxULFdBQVNDLGtCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxvQkFBa0IsUUFBUSxPQUFPO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUFFLFVBQUksYUFBYSxNQUFNLENBQUM7QUFBRyxpQkFBVyxhQUFhLFdBQVcsY0FBYztBQUFPLGlCQUFXLGVBQWU7QUFBTSxVQUFJLFdBQVc7QUFBWSxtQkFBVyxXQUFXO0FBQU0sYUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUU1VCxXQUFTQyxlQUFhLGFBQWEsWUFBWSxhQUFhO0FBQUUsUUFBSTtBQUFZLE1BQUFELG9CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUFHLFFBQUk7QUFBYSxNQUFBQSxvQkFBa0IsYUFBYSxXQUFXO0FBQUcsV0FBTztBQUFBLEVBQWE7QUFFdE4sV0FBU0UsWUFBVSxVQUFVLFlBQVk7QUFBRSxRQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUFFLFlBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLElBQUc7QUFBRSxhQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFHLFFBQUk7QUFBWSxNQUFBQyxrQkFBZ0IsVUFBVSxVQUFVO0FBQUEsRUFBRztBQUVoWSxXQUFTQSxrQkFBZ0IsR0FBRyxHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8sa0JBQWtCLFNBQVNBLGtCQUFnQkMsSUFBR0MsSUFBRztBQUFFLE1BQUFELEdBQUUsWUFBWUM7QUFBRyxhQUFPRDtBQUFBLElBQUc7QUFBRyxXQUFPRCxrQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFBRztBQUV6SyxXQUFTRyxlQUFhLFNBQVM7QUFBRSxRQUFJLDRCQUE0QkMsNEJBQTBCO0FBQUcsV0FBTyxTQUFTLHVCQUF1QjtBQUFFLFVBQUksUUFBUUMsa0JBQWdCLE9BQU8sR0FBRztBQUFRLFVBQUksMkJBQTJCO0FBQUUsWUFBSSxZQUFZQSxrQkFBZ0IsSUFBSSxFQUFFO0FBQWEsaUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFBRyxPQUFPO0FBQUUsaUJBQVMsTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBRSxhQUFPQyw2QkFBMkIsTUFBTSxNQUFNO0FBQUEsSUFBRztBQUFBLEVBQUc7QUFFeGEsV0FBU0EsNkJBQTJCQyxPQUFNLE1BQU07QUFBRSxRQUFJLFNBQVNqQixVQUFRLElBQUksTUFBTSxZQUFZLE9BQU8sU0FBUyxhQUFhO0FBQUUsYUFBTztBQUFBLElBQU0sV0FBVyxTQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksVUFBVSwwREFBMEQ7QUFBQSxJQUFHO0FBQUUsV0FBT2tCLHlCQUF1QkQsS0FBSTtBQUFBLEVBQUc7QUFFL1IsV0FBU0MseUJBQXVCRCxPQUFNO0FBQUUsUUFBSUEsVUFBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLGVBQWUsMkRBQTJEO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUVySyxXQUFTSCw4QkFBNEI7QUFBRSxRQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGFBQU87QUFBTyxRQUFJLFFBQVEsVUFBVTtBQUFNLGFBQU87QUFBTyxRQUFJLE9BQU8sVUFBVTtBQUFZLGFBQU87QUFBTSxRQUFJO0FBQUUsY0FBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxDQUFDLEdBQUcsV0FBWTtBQUFBLE1BQUMsQ0FBQyxDQUFDO0FBQUcsYUFBTztBQUFBLElBQU0sU0FBUyxHQUFHO0FBQUUsYUFBTztBQUFBLElBQU87QUFBQSxFQUFFO0FBRXhVLFdBQVNDLGtCQUFnQixHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLFNBQVNBLGtCQUFnQkosSUFBRztBQUFFLGFBQU9BLEdBQUUsYUFBYSxPQUFPLGVBQWVBLEVBQUM7QUFBQSxJQUFHO0FBQUcsV0FBT0ksa0JBQWdCLENBQUM7QUFBQSxFQUFHO0FBRTVNLFdBQVNJLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBbUJoTixNQUFJLDBCQUEwQjtBQUFBLElBQzVCLEdBQUc7QUFBQSxJQUNILEdBQUc7QUFBQSxFQUNMO0FBQ08sTUFBSUMsU0FBUSxPQUFPLHVCQUF1QjtBQUNqRCxNQUFJLDJDQUEyQztBQUFBLElBQzdDLE1BQU07QUFBQSxNQUNKLElBQUk7QUFBQSxNQUNKLEtBQUs7QUFBQSxJQUNQO0FBQUEsSUFDQSxVQUFVO0FBQUEsTUFDUixJQUFJO0FBQUEsTUFDSixLQUFLO0FBQUEsSUFDUDtBQUFBLEVBQ0Y7QUFDTyxNQUFJLHNCQUFtQyx5QkFBVSxZQUFZO0FBQ2xFLElBQUFYLFlBQVVZLHNCQUFxQixVQUFVO0FBRXpDLFFBQUksU0FBU1IsZUFBYVEsb0JBQW1CO0FBRTdDLGFBQVNBLHFCQUFvQixPQUFPO0FBQ2xDLFVBQUk7QUFFSixNQUFBZixrQkFBZ0IsTUFBTWUsb0JBQW1CO0FBRXpDLGNBQVEsT0FBTyxLQUFLLE1BQU0sS0FBSztBQUUvQixNQUFBRixrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsY0FBYyxLQUFLO0FBRWxFLE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxjQUFjLElBQUk7QUFFakUsTUFBQUMsa0JBQWdCRCx5QkFBdUIsS0FBSyxHQUFHLFNBQVMsSUFBSTtBQUU1RCxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsd0JBQXdCLElBQUk7QUFFM0UsTUFBQUMsa0JBQWdCRCx5QkFBdUIsS0FBSyxHQUFHLGlCQUFpQixXQUFZO0FBQzFFLFlBQUk7QUFFSixZQUFJLENBQUMsTUFBTTtBQUFPO0FBQ2xCLFlBQUksR0FBRyxvQkFBb0IsTUFBTSxNQUFNLFdBQVcsUUFBUSxzQkFBc0IsVUFBVSxrQkFBa0I7QUFBUztBQUVySCxZQUFJLE1BQU0sTUFBTSxVQUFVO0FBQVE7QUFFbEMsWUFBSSxnQkFBZ0IsU0FBUyxNQUFNLEtBQUs7QUFFeEMsWUFBSSxjQUFjLFFBQVE7QUFDeEIsZ0JBQU0sU0FBUztBQUFBLFlBQ2IsV0FBVztBQUFBLFVBQ2IsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsaUJBQWlCLFNBQVUsV0FBVztBQUNuRixZQUFJO0FBRUosWUFBSSxjQUFjLGNBQWMsT0FBTyxLQUFLO0FBQzVDLFlBQUk7QUFFSixZQUFJLE1BQU0sTUFBTSxxQkFBcUIsUUFBVztBQUc5QyxpQ0FBdUIsY0FBYyxPQUFPLE1BQU0sTUFBTSxVQUFVLFNBQVMsSUFBSTtBQUFBLFFBQ2pGLE9BQU87QUFDTCxpQ0FBdUIsTUFBTSxNQUFNLG1CQUFtQjtBQUV0RCxjQUFJLHVCQUF1QixHQUFHO0FBQzVCLG1DQUF1QixNQUFNLE1BQU0sVUFBVSxTQUFTO0FBQUEsVUFDeEQsV0FBVyx5QkFBeUIsTUFBTSxNQUFNLFVBQVUsUUFBUTtBQUNoRSxtQ0FBdUI7QUFBQSxVQUN6QjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLFNBQVM7QUFBQSxVQUNiLGtCQUFrQjtBQUFBLFFBQ3BCLENBQUM7QUFFRCxTQUFDLHdCQUF3QixNQUFNLE1BQU0sVUFBVSxvQkFBb0IsT0FBTyxRQUFRLDBCQUEwQixTQUFTLFNBQVMsc0JBQXNCLE1BQU07QUFBQSxNQUM1SixDQUFDO0FBRUQsTUFBQUMsa0JBQWdCRCx5QkFBdUIsS0FBSyxHQUFHLGFBQWEsU0FBVSxPQUFPO0FBSzNFLFlBQUksY0FBYyxNQUFNLE9BQ3BCLFFBQVEsWUFBWSxPQUNwQixVQUFVLFlBQVksU0FDdEIsb0JBQW9CLFlBQVk7QUFFcEMsWUFBSSxZQUFZLFVBQVUsUUFBUSxVQUFVLFVBQVUsTUFBTSxVQUFVLFNBQVMsa0JBQWtCLE1BQU0sY0FBYyxTQUFTLGtCQUFrQixNQUFNLFFBQVE7QUFDNUosY0FBSSxNQUFNLFFBQVEsa0JBQWtCLFlBQVk7QUFDOUMsZ0JBQUksbUJBQW1CO0FBQ3JCLG9CQUFNLGVBQWU7QUFDckIsb0JBQU0sZ0JBQWdCO0FBQ3RCLGdDQUFrQjtBQUVsQixrQkFBSSxNQUFNLE1BQU0seUJBQXlCO0FBQ3ZDLHNCQUFNLE1BQU0sd0JBQXdCO0FBQUEsY0FDdEM7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFVBQVUsUUFBUSxVQUFVLFVBQVUsTUFBTSxRQUFRO0FBQ3RELGtCQUFRLE1BQU0sS0FBSztBQUFBLFlBQ2pCLEtBQUssa0JBQWtCO0FBQ3JCLG9DQUFzQixXQUFZO0FBRWhDLG9CQUFJLG1CQUFtQixNQUFNLE1BQU0sVUFBVSxRQUFRLFNBQVMsYUFBYTtBQUczRSxzQkFBTSxTQUFTO0FBQUEsa0JBQ2Isa0JBQWtCLG9CQUFvQixLQUFLLG1CQUFtQixNQUFNLE1BQU0sVUFBVSxTQUFTLG1CQUFtQjtBQUFBLGdCQUNsSCxDQUFDO0FBQUEsY0FDSCxDQUFDO0FBQ0Q7QUFBQSxZQUVGLEtBQUssa0JBQWtCO0FBQ3JCLG9CQUFNLGVBQWU7QUFFckIsb0JBQU0sY0FBYyxJQUFJO0FBRXhCLGtCQUFJLE1BQU0sTUFBTSx5QkFBeUI7QUFDdkMsc0JBQU0sTUFBTSx3QkFBd0I7QUFBQSxjQUN0QztBQUVBO0FBQUEsWUFFRixLQUFLLGtCQUFrQjtBQUNyQixvQkFBTSxlQUFlO0FBRXJCLG9CQUFNLGNBQWMsTUFBTTtBQUUxQixrQkFBSSxNQUFNLE1BQU0seUJBQXlCO0FBQ3ZDLHNCQUFNLE1BQU0sd0JBQXdCO0FBQUEsY0FDdEM7QUFFQTtBQUFBLFlBRUYsS0FBSyxrQkFBa0I7QUFDckIsa0JBQUksTUFBTSxNQUFNLGVBQWU7QUFDN0Isc0JBQU0sZUFBZTtBQUVyQixzQkFBTSxNQUFNLGNBQWMsV0FBVyxNQUFNLE1BQU0sbUJBQW1CLE1BQU0sTUFBTSxtQkFBbUIsSUFDakcsTUFBTSxNQUFNLGdCQUFnQjtBQUU5QixvQkFBSSxNQUFNLE1BQU0seUJBQXlCO0FBQ3ZDLHdCQUFNLE1BQU0sd0JBQXdCO0FBQUEsZ0JBQ3RDO0FBQUEsY0FDRjtBQUVBO0FBQUEsWUFFRjtBQUNFO0FBQUEsVUFDSjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsdUJBQXVCLFdBQVk7QUFDaEYsY0FBTSxTQUFTO0FBQUEsVUFDYiwwQkFBMEI7QUFBQSxRQUM1QixDQUFDO0FBRUQsY0FBTSxpQkFBaUI7QUFBQSxNQUN6QixDQUFDO0FBRUQsTUFBQUMsa0JBQWdCRCx5QkFBdUIsS0FBSyxHQUFHLHdCQUF3QixXQUFZO0FBQ2pGLFlBQUksTUFBTSxNQUFNLHNCQUFzQjtBQUNwQyxnQkFBTSxNQUFNLHFCQUFxQjtBQUFBLFFBQ25DO0FBQUEsTUFDRixDQUFDO0FBRUQsTUFBQUMsa0JBQWdCRCx5QkFBdUIsS0FBSyxHQUFHLFlBQVksU0FBVUksT0FBTTtBQUN6RSxjQUFNLFFBQVFBO0FBRWQsY0FBTSxhQUFhO0FBRW5CLGNBQU0sd0JBQXdCO0FBRTlCLGNBQU0sY0FBYztBQUFBLE1BQ3RCLENBQUM7QUFFRCxZQUFNLFFBQVE7QUFBQSxRQUNaLFdBQVc7QUFBQSxVQUNULE9BQU8sTUFBTSxNQUFNO0FBQUEsUUFDckI7QUFBQSxRQUNBLFdBQVcsQ0FBQztBQUFBLFFBQ1osa0JBQWtCLE1BQU0sV0FBVyxNQUFNLDJCQUEyQixPQUFPLE1BQU0sMEJBQTBCLElBQ3pHLE1BQU07QUFBQSxRQUNSLGVBQWU7QUFBQSxRQUNmLDBCQUEwQjtBQUFBLFFBQzFCLGtCQUFrQjtBQUFBLE1BQ3BCO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFJQSxJQUFBZCxlQUFhYSxzQkFBcUIsQ0FBQztBQUFBLE1BQ2pDLEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxtQkFBbUI7QUFDakMsWUFBSSxTQUFTO0FBR2IsOEJBQXNCLFdBQVk7QUFDaEMsY0FBSSxDQUFDLE9BQU8sWUFBWTtBQUN0QjtBQUFBLFVBQ0Y7QUFJQSxjQUFJLE9BQU8sd0JBQXdCLE9BQU8sTUFBTSwwQkFBMEI7QUFDeEU7QUFBQSxVQUNGO0FBSUEsY0FBSSxPQUFPLE1BQU0sZ0JBQWdCO0FBQy9CLGdCQUFJO0FBS0osYUFBQyxlQUFlLE9BQU8sV0FBVyxRQUFRLGlCQUFpQixTQUFTLFNBQVMsYUFBYSxNQUFNO0FBQUEsY0FDOUYsZUFBZTtBQUFBLFlBQ2pCLENBQUM7QUFDRDtBQUFBLFVBQ0Y7QUFHQSxjQUFJLE9BQU8sTUFBTSxrQkFBa0I7QUFDakM7QUFBQSxVQUNGO0FBR0EsY0FBSSxPQUFPLE1BQU0sb0JBQW9CLFFBQVEsT0FBTyxNQUFNLFVBQVUsUUFBUTtBQUMxRSxnQkFBSSxjQUFjLE9BQU8sTUFBTSxVQUFVLE9BQU8sTUFBTSxnQkFBZ0I7QUFFdEUsZ0JBQUksYUFBYTtBQUNmLDBCQUFZLE1BQU07QUFDbEIscUJBQU8sT0FBTyxTQUFTO0FBQUEsZ0JBQ3JCLGtCQUFrQjtBQUFBLGNBQ3BCLENBQUM7QUFBQSxZQUNIO0FBQUEsVUFDRjtBQUdBLGNBQUksT0FBTyxZQUFZO0FBRXJCLG1CQUFPLFdBQVcsTUFBTTtBQUd4QixnQkFBSSxPQUFPLE1BQU0sVUFBVSxRQUFRO0FBQ2pDLHFCQUFPLFNBQVM7QUFBQSxnQkFDZCxrQkFBa0I7QUFBQSxjQUNwQixDQUFDO0FBQUEsWUFDSDtBQUVBLG1CQUFPLE9BQU8sU0FBUztBQUFBLGNBQ3JCLGtCQUFrQjtBQUFBLFlBQ3BCLENBQUM7QUFBQSxVQUNIO0FBR0EsY0FBSSxPQUFPLFNBQVMsQ0FBQyxPQUFPLE1BQU0sU0FBUyxTQUFTLGFBQWEsR0FBRztBQUNsRSxtQkFBTyxNQUFNLE1BQU07QUFFbkIsbUJBQU8sU0FBUztBQUFBLGNBQ2Qsa0JBQWtCO0FBQUEsWUFDcEIsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsbUJBQW1CLEdBQUcsV0FBVztBQUMvQyxZQUFJLFVBQVUsY0FBYyxLQUFLLE1BQU0sV0FBVztBQUNoRCxlQUFLLGNBQWM7QUFBQSxRQUNyQjtBQUlBLGFBQUssaUJBQWlCO0FBQUEsTUFDeEI7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxvQkFBb0I7QUFNbEMsWUFBSSxLQUFLLHNCQUFzQjtBQUM3QixlQUFLLHFCQUFxQixpQkFBaUIsU0FBUyxLQUFLLHFCQUFxQjtBQUFBLFlBQzVFLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNILE9BQU87QUFDTCxlQUFLLGlCQUFpQjtBQUFBLFFBQ3hCO0FBRUEsYUFBSyxhQUFhO0FBQUEsTUFDcEI7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyx1QkFBdUI7QUFDckMsWUFBSTtBQUVKLFNBQUMsd0JBQXdCLEtBQUssMEJBQTBCLFFBQVEsMEJBQTBCLFNBQVMsU0FBUyxzQkFBc0Isb0JBQW9CLFNBQVMsS0FBSyxtQkFBbUI7QUFDdkwsYUFBSyxhQUFhO0FBQUEsTUFDcEI7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxlQUFlO0FBQzdCLFlBQUksZ0JBQWdCLEtBQUssUUFBUSxLQUFLLE1BQU0sZUFBZTtBQUUzRCxZQUFJLEtBQUssTUFBTSxXQUFXLGVBQWU7QUFDdkMsY0FBSSxLQUFLLE1BQU0sZ0JBQWdCO0FBQzdCLGlCQUFLLE1BQU0sZUFBZSxhQUFhO0FBQ3ZDLGlCQUFLLFNBQVM7QUFBQSxjQUNaLFFBQVE7QUFBQSxZQUNWLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUywwQkFBMEI7QUFDeEMsWUFBSTtBQUlKLFlBQUksS0FBSyxNQUFNO0FBQWdCO0FBQy9CLFlBQUksQ0FBQyxLQUFLO0FBQU87QUFDakIsWUFBSSxTQUFTLEtBQUssTUFBTTtBQUN4QixZQUFJLENBQUM7QUFBUTtBQUNiLFlBQUksMEJBQTBCLE9BQU8sVUFBVSxTQUFTLGdCQUFnQjtBQUd4RSxZQUFJLGdCQUFnQiwwQkFBMEIsV0FBVyxRQUFRLFdBQVcsU0FBUyxVQUFVLHFCQUFxQixPQUFPLGdCQUFnQixRQUFRLHVCQUF1QixTQUFTLFNBQVMsbUJBQW1CLGFBQWEsV0FBVyxRQUFRLFdBQVcsU0FBUyxTQUFTLE9BQU87QUFDblIsWUFBSSxDQUFDO0FBQWU7QUFDcEIsWUFBSSxtQkFBbUIsQ0FBQyxDQUFDLGNBQWMsUUFBUTtBQUMvQyxZQUFJLENBQUM7QUFBa0I7QUFDdkIsYUFBSyx1QkFBdUI7QUFDNUIsYUFBSyxTQUFTO0FBQUEsVUFDWiwwQkFBMEI7QUFBQSxRQUM1QixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTRSxVQUFTO0FBQ3ZCLFlBQUksU0FBUztBQUViLFlBQUksZUFBZSxLQUFLLE9BQ3BCLFdBQVcsYUFBYSxVQUN4QixZQUFZLGFBQWEsV0FDekIsVUFBVSxhQUFhLFNBQ3ZCLFFBQVEsYUFBYSxPQUNyQixpQkFBaUIsYUFBYSxnQkFDOUIsaUJBQWlCLGFBQWEsZ0JBQzlCLHNCQUFzQixhQUFhLHFCQUNuQyx1QkFBdUIsYUFBYSxzQkFDcEMsMEJBQTBCLGFBQWEseUJBQ3ZDLFFBQVEsYUFBYSxPQUNyQiwwQkFBMEIsYUFBYSx5QkFDdkMsZ0JBQWdCLGFBQWEsZUFDN0Isb0JBQW9CLGFBQWEsbUJBQ2pDQyxRQUFPLGFBQWEsTUFDcEIsT0FBT3BCLDRCQUF5QixjQUFjRixZQUFTO0FBRTNELFlBQUk7QUFFSixZQUFJLE9BQU87QUFDVCxjQUFJLG1CQUFlLG9CQUFBdUIsU0FBVyw0QkFBNEJELFNBQVEsd0JBQXdCQSxLQUFJLENBQUM7QUFFL0YsY0FBSSxRQUFRLE9BQU8sR0FBRztBQUNwQix5QkFBYSxJQUFjLFVBQVU7QUFBQSxjQUNuQyxXQUFXO0FBQUEsY0FDWCxNQUFNO0FBQUEsY0FDTixTQUFTO0FBQUEsY0FDVCxLQUFLLFNBQVMsSUFBSUYsT0FBTTtBQUN0Qix1QkFBTyxhQUFhQTtBQUFBLGNBQ3RCO0FBQUEsY0FDQSxrQkFBa0I7QUFBQSxZQUNwQixHQUFHLElBQWMsUUFBUTtBQUFBLGNBQ3ZCLFdBQVc7QUFBQSxZQUNiLEdBQUcsSUFBYyxTQUFTO0FBQUEsY0FDeEIsTUFBTTtBQUFBLGNBQ04sTUFBTTtBQUFBLGNBQ04sV0FBVztBQUFBLFlBQ2IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLGNBQ3hCLFdBQVc7QUFBQSxZQUNiLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFBQSxVQUNaLE9BQU87QUFDTCx5QkFBYSxJQUFjLE9BQU87QUFBQSxjQUNoQyxXQUFXO0FBQUEsWUFDYixHQUFHLElBQWMsUUFBUTtBQUFBLGNBQ3ZCLFdBQVc7QUFBQSxZQUNiLEdBQUcsS0FBSyxDQUFDO0FBQUEsVUFDWDtBQUFBLFFBQ0Y7QUFFQSxZQUFJLGNBQVUsb0JBQUFHLFNBQVcsdUJBQXVCLFdBQVcsdUJBQXVCLGtCQUFrQix5Q0FBeUMsbUJBQW1CLElBQUkseUNBQXlDLG1CQUFtQixFQUFFLGNBQWMsSUFBSSxNQUFTO0FBQzdQLFlBQUksVUFBVSxTQUFTLE1BQU0sU0FBUyxNQUFNLElBQUksU0FBVSxVQUFVO0FBQ2xFLGNBQUksYUFBYSxDQUFDO0FBRWxCLGNBQUlELE9BQU07QUFDUix1QkFBVyxPQUFPQTtBQUFBLFVBQ3BCO0FBRUEsaUJBQU8sU0FBUyxTQUFTLHFCQUFrQyxrREFBYSxVQUFVLFVBQVUsSUFBSTtBQUFBLFFBQ2xHLENBQUMsSUFBSTtBQUNMLGVBQU8sSUFBYyxPQUFPckIsWUFBUztBQUFBLFVBQ25DLEtBQUssS0FBSztBQUFBLFVBQ1YsV0FBVztBQUFBLFVBQ1gsV0FBVyxLQUFLO0FBQUEsVUFDaEIsVUFBVTtBQUFBLFVBQ1YsZ0JBQWdCLEtBQUs7QUFBQSxRQUN2QixHQUFHLElBQUksR0FBRyxZQUFZLElBQWMsbUJBQW1CO0FBQUEsVUFDckQsVUFBVSxTQUFTLFdBQVc7QUFDNUIsbUJBQU8sT0FBTyxhQUFhO0FBQUEsVUFDN0I7QUFBQSxRQUNGLEdBQUcsU0FBVSxXQUFXO0FBQ3RCLGlCQUFPLElBQWMsT0FBTztBQUFBLFlBQzFCLEtBQUs7QUFBQSxVQUNQLEdBQUcsT0FBTztBQUFBLFFBQ1osQ0FBQyxDQUFDO0FBQUEsTUFDSjtBQUFBLElBQ0YsQ0FBQyxHQUFHLENBQUM7QUFBQSxNQUNILEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyx5QkFBeUIsV0FBVyxXQUFXO0FBQzdELFlBQUksY0FBYztBQUNsQixZQUFJLFlBQVksQ0FBQztBQUVqQixZQUFJLFVBQVUsVUFBVSxVQUFVLFVBQVUsT0FBTztBQUNqRCx3QkFBYztBQUNkLG9CQUFVLFlBQVksQ0FBQztBQUN2QixvQkFBVSxZQUFZO0FBQUEsWUFDcEIsT0FBTyxVQUFVO0FBQUEsVUFDbkI7QUFBQSxRQUNGO0FBRUEsWUFBSSxhQUFhO0FBQ2YsaUJBQU87QUFBQSxRQUNUO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUVGLFdBQU9rQjtBQUFBLEVBQ1QsRUFBRSx5QkFBUztBQUVYLEVBQUFGLGtCQUFnQixxQkFBcUIsZ0JBQWdCO0FBQUEsSUFDbkQsT0FBTyxDQUFDO0FBQUEsRUFDVixDQUFDO0FBRUQsc0JBQW9CLFlBQVk7QUFBQSxJQUM5QixXQUFXLG9CQUFBTyxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLElBQzVCLHlCQUF5QixvQkFBQUEsUUFBVTtBQUFBLElBQ25DLE9BQU8sb0JBQUFBLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxRQUFRLFVBQVU7QUFBQSxJQUNyRCxTQUFTLG9CQUFBQSxRQUFVO0FBQUEsSUFDbkIsZ0JBQWdCLG9CQUFBQSxRQUFVO0FBQUEsSUFDMUIsc0JBQXNCLG9CQUFBQSxRQUFVO0FBQUEsSUFDaEMseUJBQXlCLG9CQUFBQSxRQUFVO0FBQUEsSUFDbkMsZUFBZSxvQkFBQUEsUUFBVTtBQUFBLElBQ3pCLG1CQUFtQixvQkFBQUEsUUFBVTtBQUFBLElBQzdCLE9BQU8sb0JBQUFBLFFBQVU7QUFBQSxJQUNqQixxQkFBcUIsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFFBQVEsVUFBVSxDQUFDO0FBQUEsSUFDekQsZ0JBQWdCLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzdDLE1BQU0sb0JBQUFBLFFBQVU7QUFBQSxFQUNsQjs7O0FFN2ZBLE1BQUFDLGtCQUFrQjtBQUNsQixNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCOzs7QUNWaEIsTUFBSSwwQkFBMEIsU0FBU0MseUJBQXdCQyxRQUFNO0FBQzFFLFFBQUksV0FBV0EsT0FBSztBQUNwQixXQUFPO0FBQUEsTUFDTCxtQkFBZ0Msb0JBQUksZ0JBQWdCLFdBQVcsVUFBVSxTQUFTLE9BQU8sTUFBTSxJQUFJLEdBQUcsc0JBQXNCLFNBQVMsT0FBTyxPQUFPLHNEQUFzRDtBQUFBO0FBQUEsTUFFek0sTUFBbUIsb0JBQUksV0FBVyxTQUFTLE1BQU0sR0FBRyxlQUFlO0FBQUEsTUFDbkUsTUFBbUIsb0JBQUksV0FBVyxTQUFTLEtBQUssR0FBRyxLQUFLLFdBQVcscUJBQXFCLE1BQU0sR0FBRyxlQUFlO0FBQUEsTUFDaEgsU0FBc0Isb0JBQUksV0FBVyxTQUFTLEtBQUssR0FBRyxLQUFLLFdBQVcscUJBQXFCLE1BQU0sR0FBRyxrQkFBa0I7QUFBQTtBQUFBLE1BRXRILE1BQU07QUFBQSxNQUNOLElBQWlCLG9CQUFJLGlCQUFpQixTQUFTLEtBQUssR0FBRyxhQUFhO0FBQUEsTUFDcEUsR0FBZ0Isb0JBQUksaUJBQWlCLFNBQVMsS0FBSyxHQUFHLFlBQVk7QUFBQSxNQUNsRSxHQUFnQixvQkFBSSxpQkFBaUIsU0FBUyxLQUFLLE1BQU0sWUFBWTtBQUFBLE1BQ3JFLEdBQWdCLG9CQUFJLGlCQUFpQixTQUFTLEtBQUssR0FBRyxZQUFZO0FBQUEsTUFDbEUsSUFBaUIsb0JBQUksaUJBQWlCLFNBQVMsS0FBSyxJQUFJLGFBQWE7QUFBQSxNQUNyRSxLQUFrQixvQkFBSSxpQkFBaUIsU0FBUyxLQUFLLEtBQUssY0FBYztBQUFBLElBQzFFO0FBQUEsRUFDRjs7O0FEMUJBLE1BQUlDLGVBQVksQ0FBQyxhQUFhLFFBQVEsUUFBUTtBQUU5QyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyxrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQUVoTixXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWlCbFQsTUFBSSx1QkFBdUI7QUFBQSxJQUN6QixNQUFNO0FBQUEsSUFDTixJQUFJO0FBQUEsSUFDSixHQUFHO0FBQUEsSUFDSCxHQUFHO0FBQUEsSUFDSCxHQUFHO0FBQUEsSUFDSCxJQUFJO0FBQUEsSUFDSixLQUFLO0FBQUEsRUFDUDtBQUNPLE1BQUksb0JBQW9CLFNBQVNDLG1CQUFrQkMsUUFBTTtBQUM5RCxRQUFJO0FBRUosUUFBSSxZQUFZQSxPQUFLLFdBQ2pCLFlBQVlBLE9BQUssTUFDakJDLFFBQU8sY0FBYyxTQUFTLFNBQVMsV0FDdkMsY0FBY0QsT0FBSyxRQUNuQixTQUFTLGdCQUFnQixTQUFTLE1BQU0sYUFDeEMsT0FBT0UsNEJBQXlCRixRQUFNRyxZQUFTO0FBRW5ELFFBQUksV0FBVyxZQUFZO0FBQzNCLFFBQUlDLFVBQVMsd0JBQXdCLFFBQVE7QUFDN0MsUUFBSSxjQUFVLG9CQUFBQyxTQUFXLHNCQUFzQixjQUFjLENBQUMsR0FBR0Msa0JBQWdCLGFBQWEsc0JBQXNCLE9BQU9MLEtBQUksR0FBR0EsS0FBSSxHQUFHSyxrQkFBZ0IsYUFBYSxzQkFBc0IsT0FBTyxxQkFBcUIsTUFBTSxDQUFDLEdBQUcsVUFBVSxXQUFXLE1BQU0sR0FBRyxjQUFjLFNBQVM7QUFDdlIsUUFBSSxZQUFZLENBQUNGLFFBQU8sbUJBQW1CQSxRQUFPSCxLQUFJLEdBQUdHLFFBQU8sTUFBTSxDQUFDO0FBQ3ZFLFdBQU8sSUFBYyxNQUFNRyxZQUFTO0FBQUEsTUFDbEMsS0FBSztBQUFBLE1BQ0wsV0FBVztBQUFBLElBQ2IsR0FBRyxJQUFJLENBQUM7QUFBQSxFQUNWO0FBQ0Esb0JBQWtCLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUk1QixNQUFNLG9CQUFBQyxRQUFVO0FBQUEsSUFDaEIsUUFBUSxvQkFBQUEsUUFBVTtBQUFBLElBQ2xCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsRUFDOUI7OztBRS9DQSxNQUFBQyxrQkFBbUM7QUFDbkMsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1QjtBQWpCdkIsTUFBSUMsZUFBWSxDQUFDLFNBQVMsTUFBTSxXQUFXLFlBQVksY0FBYyxZQUFZLGFBQWEsYUFBYSxRQUFRLFlBQVk7QUFFL0gsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFlM1MsTUFBSSxZQUFZLFNBQVNDLFdBQVVDLFFBQU07QUFDOUMsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsS0FBS0EsT0FBSyxJQUNWLFVBQVVBLE9BQUssU0FDZixXQUFXQSxPQUFLLFVBQ2hCLGFBQWFBLE9BQUssWUFDbEIsV0FBV0EsT0FBSyxVQUNoQixZQUFZQSxPQUFLLFdBQ2pCLGlCQUFpQkEsT0FBSyxXQUN0QixZQUFZLG1CQUFtQixTQUFTLE9BQU8sZ0JBQy9DLFlBQVlBLE9BQUssTUFDakIsT0FBTyxjQUFjLFNBQVMsV0FBVyxXQUN6QyxhQUFhQSxPQUFLLFlBQ2xCLE9BQU9ILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVuRCxRQUFJLFdBQVcsbUJBQW1CO0FBQUEsTUFDaEMsZUFBZTtBQUFBLElBQ2pCLENBQUM7QUFDRCxRQUFJLFVBQVUsbUJBQW1CO0FBQUEsTUFDL0IsZUFBZSxlQUFlLFFBQVEsZUFBZSxTQUFTLFNBQVMsV0FBVztBQUFBLElBQ3BGLENBQUM7QUFDRCxRQUFJLGNBQVUsNkJBQVksU0FBVSxHQUFHO0FBQ3JDLFVBQUksVUFBVTtBQUNaO0FBQUEsTUFDRjtBQUVBLFVBQUksUUFBUTtBQUNaLFlBQU0sT0FBTyxVQUFVLENBQUM7QUFDeEIsZUFBUyxLQUFLO0FBQUEsSUFDaEIsR0FBRyxDQUFDLFNBQVMsVUFBVSxRQUFRLENBQUM7QUFDaEMsUUFBSSxjQUFVLG9CQUFBTSxTQUFXLGFBQWE7QUFBQSxNQUNwQyx5QkFBeUI7QUFBQSxJQUMzQixHQUFHLFNBQVM7QUFDWixRQUFJLG1CQUFlLG9CQUFBQSxTQUFXLG9CQUFvQixlQUFlLFFBQVEsZUFBZSxTQUFTLFNBQVMsV0FBVyxTQUFTO0FBRTlILFFBQUksY0FBYyxTQUFTLE9BQU8sVUFBVSxVQUFVO0FBQ3BELGNBQVEsS0FBSywrREFBK0Q7QUFBQSxJQUM5RTtBQUVBLFdBQU8sSUFBYyxPQUFPO0FBQUEsTUFDMUIsV0FBVztBQUFBLElBQ2IsR0FBRyxJQUFjLFVBQVVMLFlBQVM7QUFBQSxNQUNsQyxJQUFJO0FBQUEsTUFDSixnQkFBZ0IsV0FBVztBQUFBLE1BQzNCLFdBQVc7QUFBQSxNQUNYLE1BQU07QUFBQSxNQUNOO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLGNBQWMsWUFBWSxTQUFZO0FBQUEsTUFDdEMsbUJBQW1CLFlBQVksVUFBVTtBQUFBLElBQzNDLEdBQUcsSUFBSSxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQzlCLFdBQVc7QUFBQSxJQUNiLEdBQUcsSUFBYyxRQUFRO0FBQUEsTUFDdkIsV0FBVztBQUFBLElBQ2IsQ0FBQyxHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3hCLFdBQVc7QUFBQSxJQUNiLEdBQUcsQ0FBQyxjQUFjLElBQWMsZ0JBQUFNLFFBQU0sVUFBVSxNQUFNLElBQWMsU0FBUztBQUFBLE1BQzNFLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLFdBQVc7QUFBQSxJQUNiLENBQUMsR0FBRyxJQUFjLFNBQVM7QUFBQSxNQUN6QixNQUFNO0FBQUEsTUFDTixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsSUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRztBQUFBO0FBQUE7QUFBQSxJQUdSLElBQWMsUUFBUU4sWUFBUyxDQUFDLEdBQUcsWUFBWTtBQUFBLE1BQzdDLFdBQVc7QUFBQSxNQUNYLElBQUk7QUFBQSxNQUNKO0FBQUEsSUFDRixDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQUEsRUFDWjtBQUNBLFlBQVUsWUFBWTtBQUFBLElBQ3BCLFdBQVcsb0JBQUFPLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLNUIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3JCLE9BQU8sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLEtBQUssWUFBWSxvQkFBQUEsUUFBVSxPQUFPLFVBQVUsQ0FBQyxFQUFFO0FBQUEsSUFDckYsU0FBUyxvQkFBQUEsUUFBVSxLQUFLO0FBQUEsSUFDeEIsVUFBVSxvQkFBQUEsUUFBVSxLQUFLO0FBQUEsSUFDekIsVUFBVSxvQkFBQUEsUUFBVTtBQUFBLElBQ3BCLFlBQVksb0JBQUFBLFFBQVU7QUFBQSxJQUN0QixNQUFNLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxVQUFVLFNBQVMsUUFBUSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLbkQsWUFBWSxvQkFBQUEsUUFBVSxNQUFNO0FBQUEsTUFDMUIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxNQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM5QixDQUFDO0FBQUEsRUFDSDs7O0FDM0hBLFdBQVNDLHlCQUF1QixHQUFHO0FBQ2pDLFFBQUksV0FBVztBQUFHLFlBQU0sSUFBSSxlQUFlLDJEQUEyRDtBQUN0RyxXQUFPO0FBQUEsRUFDVDs7O0FDSEEsTUFBSSxZQUFZLE9BQU8sU0FDbkIsU0FBUyxTQUFTLE9BQU87QUFDckIsV0FBTyxPQUFPLFVBQVUsWUFBWSxVQUFVO0FBQUEsRUFDbEQ7QUFDSixXQUFTQyxTQUFRLE9BQU8sUUFBUTtBQUM1QixRQUFJLFVBQVUsUUFBUTtBQUNsQixhQUFPO0FBQUEsSUFDWDtBQUNBLFFBQUksVUFBVSxLQUFLLEtBQUssVUFBVSxNQUFNLEdBQUc7QUFDdkMsYUFBTztBQUFBLElBQ1g7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUNBLFdBQVMsZUFBZSxXQUFXLFlBQVk7QUFDM0MsUUFBSSxVQUFVLFdBQVcsV0FBVyxRQUFRO0FBQ3hDLGFBQU87QUFBQSxJQUNYO0FBQ0EsYUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUN2QyxVQUFJLENBQUNBLFNBQVEsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsR0FBRztBQUN2QyxlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUVBLFdBQVMsV0FBVyxVQUFVQSxVQUFTO0FBQ25DLFFBQUlBLGFBQVksUUFBUTtBQUFFLE1BQUFBLFdBQVU7QUFBQSxJQUFnQjtBQUNwRCxRQUFJO0FBQ0osUUFBSSxXQUFXLENBQUM7QUFDaEIsUUFBSTtBQUNKLFFBQUksYUFBYTtBQUNqQixhQUFTLFdBQVc7QUFDaEIsVUFBSSxVQUFVLENBQUM7QUFDZixlQUFTLEtBQUssR0FBRyxLQUFLLFVBQVUsUUFBUSxNQUFNO0FBQzFDLGdCQUFRLEVBQUUsSUFBSSxVQUFVLEVBQUU7QUFBQSxNQUM5QjtBQUNBLFVBQUksY0FBYyxhQUFhLFFBQVFBLFNBQVEsU0FBUyxRQUFRLEdBQUc7QUFDL0QsZUFBTztBQUFBLE1BQ1g7QUFDQSxtQkFBYSxTQUFTLE1BQU0sTUFBTSxPQUFPO0FBQ3pDLG1CQUFhO0FBQ2IsaUJBQVc7QUFDWCxpQkFBVztBQUNYLGFBQU87QUFBQSxJQUNYO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFFQSxNQUFPLDBCQUFROzs7Ozs7QUNoRGYsV0FBU0MsaUNBQThCLEdBQUcsR0FBRztBQUMzQyxRQUFJLFFBQVE7QUFBRyxhQUFPLENBQUM7QUFDdkIsUUFBSSxJQUFJLENBQUM7QUFDVCxhQUFTLEtBQUs7QUFBRyxVQUFJLENBQUMsRUFBRSxlQUFlLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFDakQsWUFBSSxFQUFFLFNBQVMsQ0FBQztBQUFHO0FBQ25CLFVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUFBLE1BQ1o7QUFDQSxXQUFPO0FBQUEsRUFDVDs7O0FDSEEsTUFBTUMsMEJBQ0osT0FBT0MsZ0JBQWdCLFlBQVksT0FBT0EsWUFBWUMsUUFBUTtBQUVoRSxNQUFNQSxNQUFNRiwwQkFDUixXQUFBO0FBQUEsV0FBTUMsWUFBWUMsSUFBWjtFQUFOLElBQ0EsV0FBQTtBQUFBLFdBQU1DLEtBQUtELElBQUw7RUFBTjtBQU1HLFdBQVNFLGNBQWNDLFdBQXNCO0FBQ2xEQyx5QkFBcUJELFVBQVVFLEVBQVg7RUFDckI7QUFFTSxXQUFTQyxlQUFlQyxVQUFvQkMsT0FBMEI7QUFDM0UsUUFBTUMsUUFBUVQsSUFBRztBQUVqQixhQUFTVSxPQUFPO0FBQ2QsVUFBSVYsSUFBRyxJQUFLUyxTQUFTRCxPQUFPO0FBQzFCRCxpQkFBU0ksS0FBSyxJQUFkO01BQ0QsT0FBTTtBQUNMUixrQkFBVUUsS0FBS08sc0JBQXNCRixJQUFEO01BQ3JDO0lBQ0Y7QUFFRCxRQUFNUCxZQUF1QjtNQUMzQkUsSUFBSU8sc0JBQXNCRixJQUFEO0lBREU7QUFJN0IsV0FBT1A7RUFDUjtBQ2xDRCxNQUFJVSxRQUFlO0FBR1osV0FBU0MsaUJBQWlCQyxhQUF1QztBQUFBLFFBQXZDQSxnQkFBdUMsUUFBQTtBQUF2Q0Esb0JBQXdCO0lBQWU7QUFDdEUsUUFBSUYsVUFBUyxNQUFNRSxhQUFhO0FBQzlCLFVBQU1DLE1BQU1DLFNBQVNDLGNBQWMsS0FBdkI7QUFDWixVQUFNQyxRQUFRSCxJQUFJRztBQUNsQkEsWUFBTUMsUUFBUTtBQUNkRCxZQUFNRSxTQUFTO0FBQ2ZGLFlBQU1HLFdBQVc7QUFFZkwsZUFBU00sS0FBNkJDLFlBQVlSLEdBQXBEO0FBRUFILE1BQUFBLFFBQU9HLElBQUlTLGNBQWNULElBQUlVO0FBRTNCVCxlQUFTTSxLQUE2QkksWUFBWVgsR0FBcEQ7SUFDRDtBQUVELFdBQU9IO0VBQ1I7QUFPRCxNQUFJZSxrQkFBd0M7QUFRckMsV0FBU0MsaUJBQWlCZCxhQUE4QztBQUFBLFFBQTlDQSxnQkFBOEMsUUFBQTtBQUE5Q0Esb0JBQXdCO0lBQXNCO0FBQzdFLFFBQUlhLG9CQUFvQixRQUFRYixhQUFhO0FBQzNDLFVBQU1lLFdBQVdiLFNBQVNDLGNBQWMsS0FBdkI7QUFDakIsVUFBTWEsYUFBYUQsU0FBU1g7QUFDNUJZLGlCQUFXWCxRQUFRO0FBQ25CVyxpQkFBV1YsU0FBUztBQUNwQlUsaUJBQVdULFdBQVc7QUFDdEJTLGlCQUFXQyxZQUFZO0FBRXZCLFVBQU1DLFdBQVdoQixTQUFTQyxjQUFjLEtBQXZCO0FBQ2pCLFVBQU1nQixhQUFhRCxTQUFTZDtBQUM1QmUsaUJBQVdkLFFBQVE7QUFDbkJjLGlCQUFXYixTQUFTO0FBRXBCUyxlQUFTTixZQUFZUyxRQUFyQjtBQUVFaEIsZUFBU00sS0FBNkJDLFlBQVlNLFFBQXBEO0FBRUEsVUFBSUEsU0FBU0ssYUFBYSxHQUFHO0FBQzNCUCwwQkFBa0I7TUFDbkIsT0FBTTtBQUNMRSxpQkFBU0ssYUFBYTtBQUN0QixZQUFJTCxTQUFTSyxlQUFlLEdBQUc7QUFDN0JQLDRCQUFrQjtRQUNuQixPQUFNO0FBQ0xBLDRCQUFrQjtRQUNuQjtNQUNGO0FBRUNYLGVBQVNNLEtBQTZCSSxZQUFZRyxRQUFwRDtBQUVBLGFBQU9GO0lBQ1I7QUFFRCxXQUFPQTtFQUNSO0FDOEVELE1BQUlRLDJCQUEyQjtBQUMvQixNQUFJQyxzQ0FBc0M7QUFDMUMsTUFBSUMscUJBQXFCO0FBQ3pCLE1BQUlDLE1BQXVDO0FBQ3pDLFFBQUksT0FBT0MsV0FBVyxlQUFlLE9BQU9BLE9BQU9DLFlBQVksYUFBYTtBQUMxRUwsaUNBQTJCLG9CQUFJSyxRQUFKO0FBQzNCSiw0Q0FBc0Msb0JBQUlJLFFBQUo7QUFDdENILDJCQUFxQixvQkFBSUcsUUFBSjtJQUN0QjtFQUNGO0FFcENELE1BQU1DLG1DQUFpQztBQUV2QyxNQUFNQyxtQkFBaUIsU0FBakJBLGVBQWtCQyxPQUFlQyxNQUFoQjtBQUFBLFdBQThCRDtFQUE5QjtBQUl2QixNQUFJRSx1QkFBdUI7QUFDM0IsTUFBSUMsdUJBQXFCO0FBQ3pCLE1BQUlDLE1BQXVDO0FBQ3pDLFFBQUksT0FBT0MsV0FBVyxlQUFlLE9BQU9BLE9BQU9DLFlBQVksYUFBYTtBQUMxRUosNkJBQXVCLG9CQUFJSSxRQUFKO0FBQ3ZCSCw2QkFBcUIsb0JBQUlHLFFBQUo7SUFDdEI7RUFDRjtBQUVjLFdBQVNDLG9CQUFUQyxRQW9CWDtBQUFBLFFBQUE7QUFBQSxRQW5CRkMsaUJBbUJFRCxPQW5CRkMsZUFDQUMseUJBa0JFRixPQWxCRkUsdUJBQ0FDLGVBaUJFSCxPQWpCRkcsYUFDQUMsaUNBZ0JFSixPQWhCRkksK0JBQ0FDLDBCQWVFTCxPQWZGSyx3QkFDQUMsNkJBY0VOLE9BZEZNLDJCQUNBQyxxQkFhRVAsT0FiRk8sbUJBQ0FDLHdDQVlFUixPQVpGUSx1Q0FDQUMsaUJBV0VULE9BWEZTO0FBWUEsV0FBQSxTQUFBLHlCQUFBLGdCQUFBO0FBQUEscUJBQUEsTUFBQSxjQUFBO0FBMkJFLGVBQUEsS0FBWUMsT0FBaUI7QUFBQSxZQUFBO0FBQzNCLGdCQUFBLGVBQUEsS0FBQSxNQUFNQSxLQUFOLEtBQUE7QUFEMkIsY0ExQjdCQyxpQkFBc0JKLG1CQUFrQixNQUFLRyxPQUFORSx5QkFBQSxLQUFBLENBQUE7QUEwQlYsY0F6QjdCQyxZQXlCNkI7QUFBQSxjQXhCN0JDLDZCQUErQztBQXdCbEIsY0FkN0JDLFFBQWU7VUFDYkMsVUFBUUoseUJBQUEsS0FBQTtVQUNSSyxhQUFhO1VBQ2JDLGlCQUFpQjtVQUNqQkMsY0FDRSxPQUFPLE1BQUtULE1BQU1VLHdCQUF3QixXQUN0QyxNQUFLVixNQUFNVSxzQkFDWDtVQUNOQywwQkFBMEI7UUFSYjtBQWNjLGNBOE03QkMsdUJBOU02QjtBQUFBLGNBb043QkEsdUJBQXVCQyx3QkFDckIsU0FDRUMsb0JBQ0FDLG1CQUNBQyxtQkFDQUMsa0JBSkY7QUFBQSxpQkFNSSxNQUFLakIsTUFBTWtCLGdCQUFnRDtZQUMzREo7WUFDQUM7WUFDQUM7WUFDQUM7VUFKMkQsQ0FBN0Q7UUFORixDQUQrQjtBQXBOSixjQW1PN0JFLGdCQW5PNkI7QUFBQSxjQXdPN0JBLGdCQUFnQk4sd0JBQ2QsU0FDRUwsaUJBQ0FDLGNBQ0FFLDBCQUhGO0FBQUEsaUJBS0ksTUFBS1gsTUFBTW9CLFNBQWtDO1lBQzdDWjtZQUNBQztZQUNBRTtVQUg2QyxDQUEvQztRQUxGLENBRHdCO0FBeE9HLGNBMFI3QlUsZ0JBMVI2QjtBQUFBLGNBMlI3QkEsZ0JBQWdCLFNBQUN2QyxPQUEwQjtBQUN6QyxjQUFBLGNBQXdDLE1BQUtrQixPQUFyQ3NCLFlBQVIsWUFBUUEsV0FBV0MsV0FBbkIsWUFBbUJBLFVBQVVDLFNBQTdCLFlBQTZCQTtBQUU3QixjQUFNQyxpQkFBaUIsTUFBS0MsbUJBQzFCNUIseUNBQXlDeUIsVUFDekN6Qix5Q0FBeUMwQixRQUN6QzFCLHlDQUF5Q3dCLFNBSHBCO0FBTXZCLGNBQUlLO0FBQ0osY0FBSUYsZUFBZUcsZUFBZTlDLEtBQTlCLEdBQXNDO0FBQ3hDNkMsb0JBQVFGLGVBQWUzQyxLQUFEO1VBQ3ZCLE9BQU07QUFDTCxnQkFBTStDLFVBQVN0QyxlQUFjLE1BQUtTLE9BQU9sQixPQUFPLE1BQUttQixjQUF6QjtBQUM1QixnQkFBTTZCLFFBQU9yQyxhQUFZLE1BQUtPLE9BQU9sQixPQUFPLE1BQUttQixjQUF6QjtBQUd4QixnQkFBTThCLGVBQ0pULGNBQWMsZ0JBQWdCRSxXQUFXO0FBRTNDLGdCQUFNUSxRQUFRVixjQUFjO0FBQzVCLGdCQUFNVyxtQkFBbUJGLGVBQWVGLFVBQVM7QUFDakRKLDJCQUFlM0MsS0FBRCxJQUFVNkMsUUFBUTtjQUM5Qk8sVUFBVTtjQUNWQyxNQUFNSCxRQUFRSSxTQUFZSDtjQUMxQkksT0FBT0wsUUFBUUMsbUJBQW1CRztjQUNsQ0UsS0FBSyxDQUFDUCxlQUFlRixVQUFTO2NBQzlCVSxRQUFRLENBQUNSLGVBQWVELFFBQU87Y0FDL0JVLE9BQU9ULGVBQWVELFFBQU87WUFOQztVQVFqQztBQUVELGlCQUFPSDtRQUNSO0FBNVQ0QixjQThUN0JELHFCQTlUNkI7QUFBQSxjQStUN0JBLHFCQUFxQmIsd0JBQVcsU0FBQzRCLEdBQVFDLElBQVNDLEtBQWxCO0FBQUEsaUJBQWdDLENBQUE7UUFBaEMsQ0FBRDtBQS9URixjQXdXN0JDLHNCQUFzQixTQUFDQyxPQUE2QjtBQUNsRCxjQUFBLHVCQUFpREEsTUFBTUMsZUFBL0NDLGNBQVIscUJBQVFBLGFBQWFDLGFBQXJCLHFCQUFxQkEsWUFBWUMsY0FBakMscUJBQWlDQTtBQUNqQyxnQkFBS0MsU0FBUyxTQUFBQyxXQUFhO0FBQ3pCLGdCQUFJQSxVQUFVMUMsaUJBQWlCdUMsWUFBWTtBQUl6QyxxQkFBTztZQUNSO0FBRUQsZ0JBQVExQixZQUFjLE1BQUt0QixNQUFuQnNCO0FBRVIsZ0JBQUliLGVBQWV1QztBQUNuQixnQkFBSTFCLGNBQWMsT0FBTztBQUt2QixzQkFBUThCLGlCQUFnQixHQUF4QjtnQkFDRSxLQUFLO0FBQ0gzQyxpQ0FBZSxDQUFDdUM7QUFDaEI7Z0JBQ0YsS0FBSztBQUNIdkMsaUNBQWV3QyxjQUFjRixjQUFjQztBQUMzQztjQU5KO1lBUUQ7QUFHRHZDLDJCQUFlNEMsS0FBS0MsSUFDbEIsR0FDQUQsS0FBS0UsSUFBSTlDLGNBQWN3QyxjQUFjRixXQUFyQyxDQUZhO0FBS2YsbUJBQU87Y0FDTHhDLGFBQWE7Y0FDYkMsaUJBQ0UyQyxVQUFVMUMsZUFBZUEsZUFBZSxZQUFZO2NBQ3REQTtjQUNBRSwwQkFBMEI7WUFMckI7VUFPUixHQUFFLE1BQUs2QywwQkF2Q1I7UUF3Q0Q7QUFsWjRCLGNBb1o3QkMsb0JBQW9CLFNBQUNaLE9BQTZCO0FBQ2hELGNBQUEsd0JBQWtEQSxNQUFNQyxlQUFoRFksZUFBUixzQkFBUUEsY0FBY0MsZUFBdEIsc0JBQXNCQSxjQUFjQyxZQUFwQyxzQkFBb0NBO0FBQ3BDLGdCQUFLVixTQUFTLFNBQUFDLFdBQWE7QUFDekIsZ0JBQUlBLFVBQVUxQyxpQkFBaUJtRCxXQUFXO0FBSXhDLHFCQUFPO1lBQ1I7QUFHRCxnQkFBTW5ELGVBQWU0QyxLQUFLQyxJQUN4QixHQUNBRCxLQUFLRSxJQUFJSyxXQUFXRCxlQUFlRCxZQUFuQyxDQUZtQjtBQUtyQixtQkFBTztjQUNMbkQsYUFBYTtjQUNiQyxpQkFDRTJDLFVBQVUxQyxlQUFlQSxlQUFlLFlBQVk7Y0FDdERBO2NBQ0FFLDBCQUEwQjtZQUxyQjtVQU9SLEdBQUUsTUFBSzZDLDBCQXJCUjtRQXNCRDtBQTVhNEIsY0E4YTdCSyxrQkFBa0IsU0FBQ0MsS0FBbUI7QUFDcEMsY0FBUUMsV0FBYSxNQUFLL0QsTUFBbEIrRDtBQUVSLGdCQUFLNUQsWUFBYzJEO0FBRW5CLGNBQUksT0FBT0MsYUFBYSxZQUFZO0FBQ2xDQSxxQkFBU0QsR0FBRDtVQUNULFdBQ0NDLFlBQVksUUFDWixPQUFPQSxhQUFhLFlBQ3BCQSxTQUFTbkMsZUFBZSxTQUF4QixHQUNBO0FBQ0FtQyxxQkFBU0MsVUFBVUY7VUFDcEI7UUFDRjtBQTViNEIsY0E4YjdCTiw2QkFBNkIsV0FBTTtBQUNqQyxjQUFJLE1BQUtwRCwrQkFBK0IsTUFBTTtBQUM1QzZELDBCQUFjLE1BQUs3RCwwQkFBTjtVQUNkO0FBRUQsZ0JBQUtBLDZCQUE2QjhELGVBQ2hDLE1BQUtDLG1CQUNMdkYsZ0NBRjhDO1FBSWpEO0FBdmM0QixjQXljN0J1RixvQkFBb0IsV0FBTTtBQUN4QixnQkFBSy9ELDZCQUE2QjtBQUVsQyxnQkFBSzhDLFNBQVM7WUFBRTNDLGFBQWE7VUFBZixHQUF3QixXQUFNO0FBRzFDLGtCQUFLbUIsbUJBQW1CLElBQUksSUFBNUI7VUFDRCxDQUpEO1FBS0Q7QUFqZDRCLGVBQUE7TUFFNUI7QUE3QkgsV0ErQlMwQywyQkFBUCxTQUFBLHlCQUNFQyxXQUNBbEIsV0FDc0I7QUFDdEJtQiw4QkFBb0JELFdBQVdsQixTQUFaO0FBQ25CcEQsUUFBQUEsZUFBY3NFLFNBQUQ7QUFDYixlQUFPO01BQ1I7QUF0Q0gsVUFBQSxTQUFBLEtBQUE7QUFBQSxhQXdDRUUsV0FBQSxTQUFBLFNBQVM5RCxjQUE0QjtBQUNuQ0EsdUJBQWU0QyxLQUFLQyxJQUFJLEdBQUc3QyxZQUFaO0FBRWYsYUFBS3lDLFNBQVMsU0FBQUMsV0FBYTtBQUN6QixjQUFJQSxVQUFVMUMsaUJBQWlCQSxjQUFjO0FBQzNDLG1CQUFPO1VBQ1I7QUFDRCxpQkFBTztZQUNMRCxpQkFDRTJDLFVBQVUxQyxlQUFlQSxlQUFlLFlBQVk7WUFDdERBO1lBQ0FFLDBCQUEwQjtVQUpyQjtRQU1SLEdBQUUsS0FBSzZDLDBCQVZSO01BV0Q7QUF0REgsYUF3REVnQixlQUFBLFNBQUEsYUFBYTFGLE9BQWUyRixPQUFxQztBQUFBLFlBQXJDQSxVQUFxQyxRQUFBO0FBQXJDQSxrQkFBdUI7UUFBYztBQUMvRCxZQUFBLGVBQThCLEtBQUt6RSxPQUEzQjBFLFlBQVIsYUFBUUEsV0FBV2xELFNBQW5CLGFBQW1CQTtBQUNuQixZQUFRZixlQUFpQixLQUFLSixNQUF0Qkk7QUFFUjNCLGdCQUFRdUUsS0FBS0MsSUFBSSxHQUFHRCxLQUFLRSxJQUFJekUsT0FBTzRGLFlBQVksQ0FBNUIsQ0FBWjtBQUtSLFlBQUlDLGdCQUFnQjtBQUNwQixZQUFJLEtBQUt4RSxXQUFXO0FBQ2xCLGNBQU00RCxXQUFhLEtBQUs1RDtBQUN4QixjQUFJcUIsV0FBVyxZQUFZO0FBQ3pCbUQsNEJBQ0VaLFNBQVNkLGNBQWNjLFNBQVNoQixjQUM1QjZCLGlCQUFnQixJQUNoQjtVQUNQLE9BQU07QUFDTEQsNEJBQ0VaLFNBQVNKLGVBQWVJLFNBQVNMLGVBQzdCa0IsaUJBQWdCLElBQ2hCO1VBQ1A7UUFDRjtBQUVELGFBQUtMLFNBQ0g3RSwrQkFDRSxLQUFLTSxPQUNMbEIsT0FDQTJGLE9BQ0FoRSxjQUNBLEtBQUtSLGdCQUNMMEUsYUFOMkIsQ0FEL0I7TUFVRDtBQTNGSCxhQTZGRUUsb0JBQUEsU0FBQSxvQkFBb0I7QUFDbEIsWUFBQSxlQUFtRCxLQUFLN0UsT0FBaERzQixZQUFSLGFBQVFBLFdBQVdaLHNCQUFuQixhQUFtQkEscUJBQXFCYyxTQUF4QyxhQUF3Q0E7QUFFeEMsWUFBSSxPQUFPZCx3QkFBd0IsWUFBWSxLQUFLUCxhQUFhLE1BQU07QUFDckUsY0FBTTRELFdBQWEsS0FBSzVEO0FBRXhCLGNBQUltQixjQUFjLGdCQUFnQkUsV0FBVyxjQUFjO0FBQ3pEdUMscUJBQVNmLGFBQWF0QztVQUN2QixPQUFNO0FBQ0xxRCxxQkFBU0gsWUFBWWxEO1VBQ3RCO1FBQ0Y7QUFFRCxhQUFLb0Usb0JBQUw7TUFDRDtBQTNHSCxhQTZHRUMscUJBQUEsU0FBQSxxQkFBcUI7QUFDbkIsWUFBQSxlQUE4QixLQUFLL0UsT0FBM0JzQixZQUFSLGFBQVFBLFdBQVdFLFNBQW5CLGFBQW1CQTtBQUNuQixZQUFBLGNBQW1ELEtBQUtuQixPQUFoREksZUFBUixZQUFRQSxjQUFjRSwyQkFBdEIsWUFBc0JBO0FBRXRCLFlBQUlBLDRCQUE0QixLQUFLUixhQUFhLE1BQU07QUFDdEQsY0FBTTRELFdBQWEsS0FBSzVEO0FBR3hCLGNBQUltQixjQUFjLGdCQUFnQkUsV0FBVyxjQUFjO0FBQ3pELGdCQUFJRixjQUFjLE9BQU87QUFJdkIsc0JBQVE4QixpQkFBZ0IsR0FBeEI7Z0JBQ0UsS0FBSztBQUNIVywyQkFBU2YsYUFBYSxDQUFDdkM7QUFDdkI7Z0JBQ0YsS0FBSztBQUNIc0QsMkJBQVNmLGFBQWF2QztBQUN0QjtnQkFDRjtBQUNFLHNCQUFRc0MsY0FBNkJnQixTQUE3QmhCLGFBQWFFLGNBQWdCYyxTQUFoQmQ7QUFDckJjLDJCQUFTZixhQUFhQyxjQUFjRixjQUFjdEM7QUFDbEQ7Y0FWSjtZQVlELE9BQU07QUFDTHNELHVCQUFTZixhQUFhdkM7WUFDdkI7VUFDRixPQUFNO0FBQ0xzRCxxQkFBU0gsWUFBWW5EO1VBQ3RCO1FBQ0Y7QUFFRCxhQUFLcUUsb0JBQUw7TUFDRDtBQS9JSCxhQWlKRUUsdUJBQUEsU0FBQSx1QkFBdUI7QUFDckIsWUFBSSxLQUFLNUUsK0JBQStCLE1BQU07QUFDNUM2RCx3QkFBYyxLQUFLN0QsMEJBQU47UUFDZDtNQUNGO0FBckpILGFBdUpFNkUsU0FBQSxTQUFBQSxVQUFTO0FBQ1AsWUFBQSxlQWlCSSxLQUFLakYsT0FoQlBrRixXQURGLGFBQ0VBLFVBQ0FDLFlBRkYsYUFFRUEsV0FDQTdELFlBSEYsYUFHRUEsV0FDQWlCLFNBSkYsYUFJRUEsUUFDQTZDLFdBTEYsYUFLRUEsVUFDQUMsbUJBTkYsYUFNRUEsa0JBQ0FDLGVBUEYsYUFPRUEsY0FDQVosWUFSRixhQVFFQSxXQUNBYSxXQVRGLGFBU0VBLFVBVEYsdUJBQUEsYUFVRUMsU0FBQUEsVUFWRix5QkFBQSxTQVVZM0csbUJBVlosc0JBV0UyQyxTQVhGLGFBV0VBLFFBQ0FpRSxtQkFaRixhQVlFQSxrQkFDQUMsZUFiRixhQWFFQSxjQUNBL0QsUUFkRixhQWNFQSxPQUNBZ0UsaUJBZkYsYUFlRUEsZ0JBQ0FuRCxRQWhCRixhQWdCRUE7QUFFRixZQUFRakMsY0FBZ0IsS0FBS0YsTUFBckJFO0FBR1IsWUFBTXdCLGVBQ0pULGNBQWMsZ0JBQWdCRSxXQUFXO0FBRTNDLFlBQU1KLFdBQVdXLGVBQ2IsS0FBS2Esc0JBQ0wsS0FBS2E7QUFFVCxZQUFBLHdCQUFnQyxLQUFLbUMsa0JBQUwsR0FBekJDLGFBQVAsc0JBQUEsQ0FBQSxHQUFtQkMsWUFBbkIsc0JBQUEsQ0FBQTtBQUVBLFlBQU1DLFFBQVEsQ0FBQTtBQUNkLFlBQUlyQixZQUFZLEdBQUc7QUFDakIsbUJBQVM1RixTQUFRK0csWUFBWS9HLFVBQVNnSCxXQUFXaEgsVUFBUztBQUN4RGlILGtCQUFNQyxTQUNKQywrQkFBY2YsVUFBVTtjQUN0Qm5HLE1BQU13RztjQUNOVyxLQUFLVixRQUFRMUcsUUFBT3lHLFFBQVI7Y0FDWnpHLE9BQUFBO2NBQ0F5QixhQUFhb0YsaUJBQWlCcEYsY0FBYzZCO2NBQzVDVCxPQUFPLEtBQUtOLGNBQWN2QyxNQUFuQjtZQUxlLENBQVgsQ0FEZjtVQVNEO1FBQ0Y7QUFJRCxZQUFNcUgscUJBQXFCM0csdUJBQ3pCLEtBQUtRLE9BQ0wsS0FBS0MsY0FGeUM7QUFLaEQsbUJBQU9nRywrQkFDTFIsb0JBQW9CQyxnQkFBZ0IsT0FDcEM7VUFDRVA7VUFDQS9EO1VBQ0EwQyxLQUFLLEtBQUtEO1VBQ1ZsQyxPQUFLLFNBQUE7WUFDSE8sVUFBVTtZQUNWSztZQUNBQztZQUNBNEQsVUFBVTtZQUNWQyx5QkFBeUI7WUFDekJDLFlBQVk7WUFDWmhGO1VBUEcsR0FRQUssS0FSQTtRQUpQLE9BZUFzRSwrQkFBY1osb0JBQW9CQyxnQkFBZ0IsT0FBTztVQUN2REosVUFBVWE7VUFDVmpDLEtBQUtzQjtVQUNMekQsT0FBTztZQUNMWSxRQUFRUixlQUFlLFNBQVNvRTtZQUNoQ0ksZUFBZWhHLGNBQWMsU0FBUzZCO1lBQ3RDSSxPQUFPVCxlQUFlb0UscUJBQXFCO1VBSHRDO1FBSGdELENBQTVDLENBakJLO01BMkJyQjtBQXZPSCxhQWdSRXJCLHNCQUFBLFNBQUEsc0JBQXNCO0FBQ3BCLFlBQUksT0FBTyxLQUFLOUUsTUFBTWtCLG9CQUFvQixZQUFZO0FBQ3BELGNBQVF3RCxZQUFjLEtBQUsxRSxNQUFuQjBFO0FBQ1IsY0FBSUEsWUFBWSxHQUFHO0FBQ2pCLGdCQUFBLHlCQUtJLEtBQUtrQixrQkFBTCxHQUpGOUUsc0JBREYsdUJBQUEsQ0FBQSxHQUVFQyxxQkFGRix1QkFBQSxDQUFBLEdBR0VDLHFCQUhGLHVCQUFBLENBQUEsR0FJRUMsb0JBSkYsdUJBQUEsQ0FBQTtBQU1BLGlCQUFLTCxxQkFDSEUscUJBQ0FDLG9CQUNBQyxvQkFDQUMsaUJBSkY7VUFNRDtRQUNGO0FBRUQsWUFBSSxPQUFPLEtBQUtqQixNQUFNb0IsYUFBYSxZQUFZO0FBQzdDLGNBQUEsZUFJSSxLQUFLZixPQUhQRyxtQkFERixhQUNFQSxpQkFDQUMsZ0JBRkYsYUFFRUEsY0FDQUUsNEJBSEYsYUFHRUE7QUFFRixlQUFLUSxjQUNIWCxrQkFDQUMsZUFDQUUseUJBSEY7UUFLRDtNQUNGO0FBL1NILGFBNFZFaUYsb0JBQUEsU0FBQSxvQkFBc0Q7QUFDcEQsWUFBQSxlQUFxQyxLQUFLNUYsT0FBbEMwRSxZQUFSLGFBQVFBLFdBQVc4QixnQkFBbkIsYUFBbUJBO0FBQ25CLFlBQUEsZUFBdUQsS0FBS25HLE9BQXBERSxjQUFSLGFBQVFBLGFBQWFDLGtCQUFyQixhQUFxQkEsaUJBQWlCQyxlQUF0QyxhQUFzQ0E7QUFFdEMsWUFBSWlFLGNBQWMsR0FBRztBQUNuQixpQkFBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQVY7UUFDUjtBQUVELFlBQU1tQixhQUFhbEcsd0JBQ2pCLEtBQUtLLE9BQ0xTLGNBQ0EsS0FBS1IsY0FIa0M7QUFLekMsWUFBTTZGLFlBQVlsRywyQkFDaEIsS0FBS0ksT0FDTDZGLFlBQ0FwRixjQUNBLEtBQUtSLGNBSm9DO0FBUzNDLFlBQU13RyxtQkFDSixDQUFDbEcsZUFBZUMsb0JBQW9CLGFBQ2hDNkMsS0FBS0MsSUFBSSxHQUFHa0QsYUFBWixJQUNBO0FBQ04sWUFBTUUsa0JBQ0osQ0FBQ25HLGVBQWVDLG9CQUFvQixZQUNoQzZDLEtBQUtDLElBQUksR0FBR2tELGFBQVosSUFDQTtBQUVOLGVBQU8sQ0FDTG5ELEtBQUtDLElBQUksR0FBR3VDLGFBQWFZLGdCQUF6QixHQUNBcEQsS0FBS0MsSUFBSSxHQUFHRCxLQUFLRSxJQUFJbUIsWUFBWSxHQUFHb0IsWUFBWVksZUFBcEMsQ0FBWixHQUNBYixZQUNBQyxTQUpLO01BTVI7QUFqWUgsYUFBQTtJQUFBLEVBQTZCYSw2QkFBN0IsR0FBQSxPQUtTQyxlQUFlO01BQ3BCdEYsV0FBVztNQUNYaUUsVUFBVW5EO01BQ1ZaLFFBQVE7TUFDUmdGLGVBQWU7TUFDZmIsZ0JBQWdCO0lBTEksR0FMeEI7RUE4ZUQ7QUFRRCxNQUFNckIsd0JBQXNCLFNBQXRCQSxvQkFBc0J1QyxRQUFBQyxRQVdqQjtBQUFBLFFBVFA1QixXQVNPMkIsT0FUUDNCLFVBQ0E1RCxZQVFPdUYsT0FSUHZGLFdBQ0FpQixTQU9Pc0UsT0FQUHRFLFFBQ0FmLFNBTU9xRixPQU5QckYsUUFDQThELGVBS091QixPQUxQdkIsY0FDQUksZUFJT21CLE9BSlBuQixjQUNBbEQsUUFHT3FFLE9BSFByRTtBQUdPLFFBRFBsQyxXQUNPd0csT0FEUHhHO0FBRUYsUUFBSXBCLE1BQXVDO0FBQ3pDLFVBQUlvRyxnQkFBZ0IsUUFBUUksZ0JBQWdCLE1BQU07QUFDaEQsWUFBSXpHLHdCQUFzQixDQUFDQSxxQkFBbUI4SCxJQUFJekcsUUFBdkIsR0FBa0M7QUFDM0RyQiwrQkFBbUIrSCxJQUFJMUcsUUFBdkI7QUFDQTJHLGtCQUFRQyxLQUNOLG1JQURGO1FBSUQ7TUFDRjtBQUdELFVBQU1uRixlQUFlVCxjQUFjLGdCQUFnQkUsV0FBVztBQUU5RCxjQUFRRixXQUFSO1FBQ0UsS0FBSztRQUNMLEtBQUs7QUFDSCxjQUFJdEMsd0JBQXdCLENBQUNBLHFCQUFxQitILElBQUl6RyxRQUF6QixHQUFvQztBQUMvRHRCLGlDQUFxQmdJLElBQUkxRyxRQUF6QjtBQUNBMkcsb0JBQVFDLEtBQ04sdUpBREY7VUFJRDtBQUNEO1FBQ0YsS0FBSztRQUNMLEtBQUs7QUFFSDtRQUNGO0FBQ0UsZ0JBQU1DLE1BQ0osNkZBQUEsTUFFTTdGLFlBRk4sbUJBRFM7TUFoQmY7QUF1QkEsY0FBUUUsUUFBUjtRQUNFLEtBQUs7UUFDTCxLQUFLO0FBRUg7UUFDRjtBQUNFLGdCQUFNMkYsTUFDSixzR0FBQSxNQUVNM0YsU0FGTixtQkFEUztNQU5mO0FBYUEsVUFBSTBELFlBQVksTUFBTTtBQUNwQixjQUFNaUMsTUFDSix3RkFBQSxPQUVNakMsYUFBYSxPQUFPLFNBQVMsT0FBT0EsWUFGMUMsbUJBRFM7TUFLWjtBQUVELFVBQUluRCxnQkFBZ0IsT0FBT1MsVUFBVSxVQUFVO0FBQzdDLGNBQU0yRSxNQUNKLG9HQUFBLE9BRU0zRSxVQUFVLE9BQU8sU0FBUyxPQUFPQSxTQUZ2QyxtQkFEUztNQUtaLFdBQVUsQ0FBQ1QsZ0JBQWdCLE9BQU9RLFdBQVcsVUFBVTtBQUN0RCxjQUFNNEUsTUFDSixvR0FBQSxPQUVNNUUsV0FBVyxPQUFPLFNBQVMsT0FBT0EsVUFGeEMsbUJBRFM7TUFLWjtJQUNGO0VBQ0Y7QUdodUJELE1BQU02RSxnQkFBZ0JDLG9DQUFvQjtJQUN4Q0MsZUFBZSxTQUFBLGNBQUFDLFFBQTJCQyxPQUEzQjtBQUFBLFVBQUdDLFdBQUhGLE9BQUdFO0FBQUgsYUFDYkQsUUFBVUM7SUFERztJQUdmQyxhQUFhLFNBQUEsWUFBQUMsUUFBMkJILE9BQTNCO0FBQUEsVUFBR0MsV0FBSEUsT0FBR0Y7QUFBSCxhQUNUQTtJQURTO0lBR2JHLHVCQUF1QixTQUFBLHNCQUFBQyxRQUFBO0FBQUEsVUFBR0MsWUFBSEQsT0FBR0MsV0FBV0wsV0FBZEksT0FBY0o7QUFBZCxhQUNuQkEsV0FBMEJLO0lBRFA7SUFHdkJDLCtCQUErQixTQUFBLDhCQUFBQyxRQUU3QlIsT0FDQVMsT0FDQUMsY0FDQUMsZUFDQUMsZUFDVztBQUFBLFVBTlRDLFlBTVNMLE9BTlRLLFdBQVdDLFNBTUZOLE9BTkVNLFFBQVFSLFlBTVZFLE9BTlVGLFdBQVdMLFdBTXJCTyxPQU5xQlAsVUFBVWMsU0FNL0JQLE9BTitCTyxRQUFRQyxRQU12Q1IsT0FOdUNRO0FBUWxELFVBQU1DLGVBQWVKLGNBQWMsZ0JBQWdCRSxXQUFXO0FBQzlELFVBQU1HLFFBQVVELGVBQWVELFFBQVFGO0FBQ3ZDLFVBQU1LLGlCQUFpQkMsS0FBS0MsSUFDMUIsR0FDQWYsWUFBY0wsV0FBMEJpQixLQUZuQjtBQUl2QixVQUFNSSxZQUFZRixLQUFLRyxJQUNyQkosZ0JBQ0FuQixRQUFVQyxRQUZNO0FBSWxCLFVBQU11QixZQUFZSixLQUFLQyxJQUNyQixHQUNBckIsUUFBVUMsV0FDUmlCLFFBQ0VqQixXQUNGVyxhQUxjO0FBUWxCLFVBQUlILFVBQVUsU0FBUztBQUNyQixZQUNFQyxnQkFBZ0JjLFlBQVlOLFNBQzVCUixnQkFBZ0JZLFlBQVlKLE9BQzVCO0FBQ0FULGtCQUFRO1FBQ1QsT0FBTTtBQUNMQSxrQkFBUTtRQUNUO01BQ0Y7QUFFRCxjQUFRQSxPQUFSO1FBQ0UsS0FBSztBQUNILGlCQUFPYTtRQUNULEtBQUs7QUFDSCxpQkFBT0U7UUFDVCxLQUFLLFVBQVU7QUFHYixjQUFNQyxlQUFlTCxLQUFLTSxNQUN4QkYsYUFBYUYsWUFBWUUsYUFBYSxDQURuQjtBQUdyQixjQUFJQyxlQUFlTCxLQUFLTyxLQUFLVCxRQUFPLENBQWpCLEdBQXFCO0FBQ3RDLG1CQUFPO1VBQ1IsV0FBVU8sZUFBZU4saUJBQWlCQyxLQUFLUSxNQUFNVixRQUFPLENBQWxCLEdBQXNCO0FBQy9ELG1CQUFPQztVQUNSLE9BQU07QUFDTCxtQkFBT007VUFDUjtRQUNGO1FBQ0QsS0FBSztRQUNMO0FBQ0UsY0FBSWYsZ0JBQWdCYyxhQUFhZCxnQkFBZ0JZLFdBQVc7QUFDMUQsbUJBQU9aO1VBQ1IsV0FBVUEsZUFBZWMsV0FBVztBQUNuQyxtQkFBT0E7VUFDUixPQUFNO0FBQ0wsbUJBQU9GO1VBQ1I7TUEzQkw7SUE2QkQ7SUFFRE8sd0JBQXdCLFNBQUEsdUJBQUFDLFFBRXRCQyxRQUZzQjtBQUFBLFVBQ3BCekIsWUFEb0J3QixPQUNwQnhCLFdBQVdMLFdBRFM2QixPQUNUN0I7QUFEUyxhQUl0Qm1CLEtBQUtDLElBQ0gsR0FDQUQsS0FBS0csSUFBSWpCLFlBQVksR0FBR2MsS0FBS1EsTUFBTUcsU0FBVzlCLFFBQXRCLENBQXhCLENBRkY7SUFKc0I7SUFTeEIrQiwyQkFBMkIsU0FBQSwwQkFBQUMsUUFFekJDLFlBQ0F4QixjQUNXO0FBQUEsVUFIVEcsWUFHU29CLE9BSFRwQixXQUFXQyxTQUdGbUIsT0FIRW5CLFFBQVFSLFlBR1YyQixPQUhVM0IsV0FBV0wsV0FHckJnQyxPQUhxQmhDLFVBQVVjLFNBRy9Ca0IsT0FIK0JsQixRQUFRQyxRQUd2Q2lCLE9BSHVDakI7QUFLbEQsVUFBTUMsZUFBZUosY0FBYyxnQkFBZ0JFLFdBQVc7QUFDOUQsVUFBTWdCLFNBQVNHLGFBQWVqQztBQUM5QixVQUFNaUIsUUFBVUQsZUFBZUQsUUFBUUY7QUFDdkMsVUFBTXFCLGtCQUFrQmYsS0FBS08sTUFDMUJULFFBQU9SLGVBQWVxQixVQUFZOUIsUUFEYjtBQUd4QixhQUFPbUIsS0FBS0MsSUFDVixHQUNBRCxLQUFLRztRQUNIakIsWUFBWTtRQUNaNEIsYUFBYUMsa0JBQWtCOztNQUZqQyxDQUZLO0lBT1I7SUFFREMsbUJBN0d3QyxTQUFBLGtCQTZHdEJDLE9BQXdCO0lBRXpDO0lBRURDLHVDQUF1QztJQUV2Q0MsZUFBZSxTQUFBLGNBQUFDLFFBQW9DO0FBQUEsVUFBakN2QyxXQUFpQ3VDLE9BQWpDdkM7QUFDaEIsVUFBSXdDLE1BQXVDO0FBQ3pDLFlBQUksT0FBT3hDLGFBQWEsVUFBVTtBQUNoQyxnQkFBTXlDLE1BQ0osK0VBQUEsT0FFTXpDLGFBQWEsT0FBTyxTQUFTLE9BQU9BLFlBRjFDLG1CQURTO1FBS1o7TUFDRjtJQUNGO0VBN0h1QyxDQUFEO0FDSjFCLFdBQVMwQyxlQUFlQyxPQUFjQyxPQUF1QjtBQUMxRSxhQUFTQyxhQUFhRixPQUFNO0FBQzFCLFVBQUksRUFBRUUsYUFBYUQsUUFBTztBQUN4QixlQUFPO01BQ1I7SUFDRjtBQUNELGFBQVNDLGNBQWFELE9BQU07QUFDMUIsVUFBSUQsTUFBS0UsVUFBRCxNQUFnQkQsTUFBS0MsVUFBRCxHQUFhO0FBQ3ZDLGVBQU87TUFDUjtJQUNGO0FBQ0QsV0FBTztFQUNSOzs7QUNUYyxXQUFTQyxTQUN0QkMsV0FDQUMsV0FDUztBQUNULFFBQWVDLFlBQTJCRixVQUFsQ0csT0FBcUJDLFdBQTdCQyxpQ0FBMENMLFdBQTFDTSxZQUFBO0FBQ0EsUUFBZUMsWUFBMkJOLFVBQWxDRSxPQUFxQkssV0FBN0JILGlDQUEwQ0osV0FBMUNRLGFBQUE7QUFFQSxXQUNFLENBQUNkLGVBQWVPLFdBQVdLLFNBQVosS0FBMEIsQ0FBQ1osZUFBZVMsVUFBVUksUUFBWDtFQUUzRDs7O0FFYUQsTUFBQUUsa0JBQW1EO0FBQ25ELE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxvQkFBNkI7QUFDN0IsTUFBQUMsc0JBQXVCO0FBakN2QixNQUFJQyxlQUFZLENBQUMsYUFBYSxZQUFZLFdBQVcsd0JBQXdCLFNBQVM7QUFFdEYsV0FBU0MsaUJBQWUsS0FBSyxHQUFHO0FBQUUsV0FBT0Msa0JBQWdCLEdBQUcsS0FBS0Msd0JBQXNCLEtBQUssQ0FBQyxLQUFLQyw4QkFBNEIsS0FBSyxDQUFDLEtBQUtDLG1CQUFpQjtBQUFBLEVBQUc7QUFFN0osV0FBU0EscUJBQW1CO0FBQUUsVUFBTSxJQUFJLFVBQVUsMklBQTJJO0FBQUEsRUFBRztBQUVoTSxXQUFTRCw4QkFBNEIsR0FBRyxRQUFRO0FBQUUsUUFBSSxDQUFDO0FBQUc7QUFBUSxRQUFJLE9BQU8sTUFBTTtBQUFVLGFBQU9FLG9CQUFrQixHQUFHLE1BQU07QUFBRyxRQUFJLElBQUksT0FBTyxVQUFVLFNBQVMsS0FBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFBRyxRQUFJLE1BQU0sWUFBWSxFQUFFO0FBQWEsVUFBSSxFQUFFLFlBQVk7QUFBTSxRQUFJLE1BQU0sU0FBUyxNQUFNO0FBQU8sYUFBTyxNQUFNLEtBQUssQ0FBQztBQUFHLFFBQUksTUFBTSxlQUFlLDJDQUEyQyxLQUFLLENBQUM7QUFBRyxhQUFPQSxvQkFBa0IsR0FBRyxNQUFNO0FBQUEsRUFBRztBQUUvWixXQUFTQSxvQkFBa0IsS0FBSyxLQUFLO0FBQUUsUUFBSSxPQUFPLFFBQVEsTUFBTSxJQUFJO0FBQVEsWUFBTSxJQUFJO0FBQVEsYUFBUyxJQUFJLEdBQUcsT0FBTyxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxLQUFLO0FBQUUsV0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFNO0FBRXRMLFdBQVNILHdCQUFzQixLQUFLLEdBQUc7QUFBRSxRQUFJLEtBQUssT0FBTyxPQUFPLE9BQU8sT0FBTyxXQUFXLGVBQWUsSUFBSSxPQUFPLFFBQVEsS0FBSyxJQUFJLFlBQVk7QUFBRyxRQUFJLE1BQU07QUFBTTtBQUFRLFFBQUksT0FBTyxDQUFDO0FBQUcsUUFBSSxLQUFLO0FBQU0sUUFBSSxLQUFLO0FBQU8sUUFBSSxJQUFJO0FBQUksUUFBSTtBQUFFLFdBQUssS0FBSyxHQUFHLEtBQUssR0FBRyxHQUFHLEVBQUUsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLE9BQU8sS0FBSyxNQUFNO0FBQUUsYUFBSyxLQUFLLEdBQUcsS0FBSztBQUFHLFlBQUksS0FBSyxLQUFLLFdBQVc7QUFBRztBQUFBLE1BQU87QUFBQSxJQUFFLFNBQVMsS0FBSztBQUFFLFdBQUs7QUFBTSxXQUFLO0FBQUEsSUFBSyxVQUFFO0FBQVUsVUFBSTtBQUFFLFlBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxLQUFLO0FBQU0sYUFBRyxRQUFRLEVBQUU7QUFBQSxNQUFHLFVBQUU7QUFBVSxZQUFJO0FBQUksZ0JBQU07QUFBQSxNQUFJO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFNO0FBRWhnQixXQUFTRCxrQkFBZ0IsS0FBSztBQUFFLFFBQUksTUFBTSxRQUFRLEdBQUc7QUFBRyxhQUFPO0FBQUEsRUFBSztBQUVwRSxXQUFTSyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQXFCM1MsTUFBSSxpQkFBaUIsU0FBU0MsZ0JBQWVDLFFBQU07QUFDeEQsUUFBSSxZQUFZQSxPQUFLLFdBQ2pCLFdBQVdBLE9BQUssVUFDaEIsVUFBVUEsT0FBSyxTQUNmLHdCQUF3QkEsT0FBSyxzQkFDN0IsdUJBQXVCLDBCQUEwQixTQUFTLFVBQVUsdUJBQ3BFLFVBQVVBLE9BQUssU0FDZixPQUFPSCw0QkFBeUJHLFFBQU1WLFlBQVM7QUFFbkQsUUFBSSxzQkFBa0Isd0JBQU87QUFDN0IsUUFBSSxrQkFBa0IsZ0JBQWdCLENBQUMsaUJBQWlCLE9BQU8sQ0FBQztBQUVoRSxRQUFJLGdCQUFZLDBCQUFTLEtBQUssR0FDMUIsYUFBYUMsaUJBQWUsV0FBVyxDQUFDLEdBQ3hDLHNCQUFzQixXQUFXLENBQUMsR0FDbEMseUJBQXlCLFdBQVcsQ0FBQztBQUV6QyxtQ0FBVSxXQUFZO0FBQ3BCLGVBQVMsS0FBSyxVQUFVLElBQUksd0JBQXdCO0FBQ3BELGFBQU8sV0FBWTtBQUNqQixpQkFBUyxLQUFLLFVBQVUsT0FBTyx3QkFBd0I7QUFBQSxNQUN6RDtBQUFBLElBQ0YsR0FBRyxDQUFDLENBQUM7QUFDTCxtQ0FBVSxXQUFZO0FBQ3BCLFVBQUksT0FBTyxhQUFhLGFBQWE7QUFDbkMsd0JBQWdCLFNBQVMsY0FBYyxLQUFLLENBQUM7QUFBQSxNQUMvQztBQUFBLElBQ0YsR0FBRyxDQUFDLENBQUM7QUFFTCxtQ0FBVSxXQUFZO0FBQ3BCLFVBQUksZUFBZSxnQkFBZ0I7QUFFbkMsVUFBSSxjQUFjO0FBQ2hCLGlCQUFTLEtBQUssWUFBWSxZQUFZO0FBQUEsTUFDeEM7QUFFQSw2QkFBdUIsSUFBSTtBQUMzQixhQUFPLFdBQVk7QUFDakIsWUFBSSxjQUFjO0FBQ2hCLG1CQUFTLEtBQUssWUFBWSxZQUFZO0FBQUEsUUFDeEM7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFHLENBQUMsQ0FBQztBQUNMLG1DQUFVLFdBQVk7QUFDcEIsVUFBSSxDQUFDLGdCQUFnQjtBQUFTO0FBQzlCLGFBQU8sSUFBSSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ2xDLFlBQUksT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVO0FBQ2pDLGdCQUFNLElBQUksTUFBTSxvREFBb0QsT0FBTyxLQUFLLG1CQUFtQixDQUFDO0FBQUEsUUFDdEc7QUFFQSxZQUFJLGdCQUFnQixTQUFTO0FBQzNCLDBCQUFnQixRQUFRLGFBQWEsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUFBLFFBQ3JEO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSCxHQUFHLENBQUMsQ0FBQztBQUVMLG1DQUFVLFdBQVk7QUFDcEIsVUFBSSxDQUFDLGdCQUFnQjtBQUFTO0FBQzlCLHNCQUFnQixRQUFRLGdCQUFZLG9CQUFBVSxTQUFXLGtCQUFrQixtQkFBbUIsT0FBTyxzQkFBc0IsUUFBUSxHQUFHLFNBQVM7QUFBQSxJQUN2SSxHQUFHLENBQUMsV0FBVyxvQkFBb0IsQ0FBQztBQUNwQyxtQ0FBVSxXQUFZO0FBQ3BCLFVBQUksZUFBZSxnQkFBZ0I7QUFDbkMsVUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQVM7QUFFL0IsVUFBSSxXQUFXLFNBQVNDLFVBQVMsR0FBRztBQUNsQyxZQUFJLEVBQUUsV0FBVyxjQUFjO0FBQzdCLGtCQUFRO0FBQUEsUUFDVjtBQUFBLE1BQ0Y7QUFFQSxtQkFBYSxpQkFBaUIsU0FBUyxRQUFRO0FBQy9DLGFBQU8sV0FBWTtBQUNqQixxQkFBYSxvQkFBb0IsU0FBUyxRQUFRO0FBQUEsTUFDcEQ7QUFBQSxJQUNGLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDWixXQUFPLHNCQUFzQixJQUFjLGdCQUFBQyxRQUFNLFVBQVUsTUFBbUIsb0RBQWEsVUFBVSxnQkFBZ0IsT0FBTyxDQUFDLElBQUk7QUFBQSxFQUNuSTtBQUNBLGlCQUFlLFlBQVk7QUFBQSxJQUN6QixXQUFXLG9CQUFBQyxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzVCLFNBQVMsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtuQixVQUFVLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLcEIsc0JBQXNCLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxTQUFTLE9BQU8sQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3hELFNBQVMsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLElBQUksWUFBWSxvQkFBQUEsUUFBVSxJQUFJLFVBQVUsQ0FBQztBQUFBLEVBQ25GOzs7QUN6SEEsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7OztBQ25CdkIsV0FBU0Msb0NBQW1DO0FBQUUsV0FBTztBQUFBLEVBQW1PO0FBWXhSLE1BQUlDLFFBQU8sUUFBd0M7QUFBQSxJQUNqRCxNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsRUFDVixJQUFJO0FBQUEsSUFDRixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixVQUFVRDtBQUFBLEVBQ1o7QUFFTyxNQUFJLGtCQUFrQixTQUFTRSxpQkFBZ0JDLFFBQU87QUFDM0QsUUFBSSxXQUFXQSxPQUFNO0FBQ3JCLFdBQU87QUFBQSxNQUNMLFdBQVdGO0FBQUE7QUFBQSxNQUVYLElBQWlCLG9CQUFJLFNBQVMsUUFBUSxLQUFLLFNBQVMsS0FBSyxJQUFJLGFBQWE7QUFBQSxNQUMxRSxHQUFnQixvQkFBSSxTQUFTLFFBQVEsS0FBSyxTQUFTLEtBQUssR0FBRyxZQUFZO0FBQUEsTUFDdkUsR0FBZ0Isb0JBQUksU0FBUyxRQUFRLEtBQUssU0FBUyxLQUFLLE1BQU0sWUFBWTtBQUFBLE1BQzFFLEdBQWdCLG9CQUFJLFNBQVMsUUFBUSxLQUFLLFNBQVMsS0FBSyxHQUFHLFlBQVk7QUFBQSxNQUN2RSxJQUFpQixvQkFBSSxTQUFTLFFBQVEsS0FBSyxTQUFTLEtBQUssSUFBSSxhQUFhO0FBQUEsTUFDMUUsS0FBa0Isb0JBQUksU0FBUyxRQUFRLEtBQUssU0FBUyxLQUFLLEtBQUssY0FBYztBQUFBLElBQy9FO0FBQUEsRUFDRjs7O0FEakNBLE1BQUlHLGVBQVksQ0FBQyxhQUFhLE1BQU07QUFFcEMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0Msa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUFFaE4sV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFnQjNTLE1BQUksWUFBWSxTQUFTQyxXQUFVQyxRQUFNO0FBQzlDLFFBQUksWUFBWUEsT0FBSyxXQUNqQixZQUFZQSxPQUFLLE1BQ2pCQyxRQUFPLGNBQWMsU0FBUyxNQUFNLFdBQ3BDLE9BQU9DLDRCQUF5QkYsUUFBTUcsWUFBUztBQUVuRCxRQUFJLFdBQVcsWUFBWTtBQUMzQixRQUFJQyxVQUFTLGdCQUFnQixRQUFRO0FBQ3JDLFFBQUksY0FBVSxvQkFBQUMsU0FBVyxhQUFhQyxrQkFBZ0IsQ0FBQyxHQUFHLGNBQWMsT0FBT0wsS0FBSSxHQUFHQSxLQUFJLEdBQUcsU0FBUztBQUN0RyxRQUFJLFlBQVksQ0FBQ0csUUFBTyxXQUFXQSxRQUFPSCxLQUFJLENBQUM7QUFDL0MsV0FBTyxJQUFjLE9BQU9NLFlBQVM7QUFBQSxNQUNuQyxXQUFXO0FBQUEsTUFDWCxLQUFLO0FBQUEsSUFDUCxHQUFHLElBQUksQ0FBQztBQUFBLEVBQ1Y7QUFDQSxZQUFVLFlBQVk7QUFBQSxJQUNwQixXQUFXLG9CQUFBQyxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLElBQzVCLE1BQU0sb0JBQUFBLFFBQVU7QUFBQSxFQUNsQjs7O0FFSUEsTUFBQUMsa0JBQWlDO0FBQ2pDLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7OztBQ052QixNQUFBQyxrQkFBaUM7QUFDakMsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1Qjs7O0FDL0J2QixNQUFBQyxrQkFBZ0M7QUFDaEMsTUFBQUMsc0JBQXNCOzs7QUNEdEIsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7OztBQ1BoQixNQUFJLGdCQUFnQixTQUFTQyxlQUFjQyxRQUFNQyxRQUFPO0FBQzdELFFBQUksV0FBV0QsT0FBSyxVQUNoQixZQUFZQSxPQUFLO0FBQ3JCLFFBQUksMEJBQTBCQyxPQUFNLHlCQUNoQyxpQkFBaUJBLE9BQU0sZ0JBQ3ZCLGVBQWVBLE9BQU07QUFFekIsUUFBSSxlQUFlO0FBQUEsTUFDakIsT0FBTztBQUFBLE1BQ1AsTUFBTTtBQUFBLElBQ1I7QUFDQSxXQUFvQixvQkFBSSxxQkFBcUIsZUFBZSxTQUFTLE9BQU8sU0FBUyxhQUFhLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixTQUFTLEtBQUssT0FBTyxNQUFNLFdBQVcsU0FBUyxPQUFPLE1BQU0sS0FBSyw0QkFBNEIsUUFBUSwrQ0FBK0MsT0FBTyxvQkFBb0IsR0FBRyxxREFBcUQsRUFBRSxPQUFPLGdCQUFnQix3REFBd0QsRUFBRSxPQUFPLGNBQWMscUJBQXFCLEdBQUcsd0JBQXdCO0FBQUEsRUFDamdCOzs7QUR0QkEsTUFBSUMsZUFBWSxDQUFDLFlBQVksYUFBYSx5QkFBeUI7QUFFbkUsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFnQjNTLE1BQUksVUFBVSxTQUFTQyxTQUFRQyxRQUFNO0FBQzFDLFFBQUksV0FBV0EsT0FBSyxVQUNoQixZQUFZQSxPQUFLLFdBQ2pCLHdCQUF3QkEsT0FBSyx5QkFDN0IsMEJBQTBCLDBCQUEwQixTQUFTLE9BQU8sdUJBQ3BFLE9BQU9ILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVuRCxRQUFJTSxZQUFXLFlBQVk7QUFDM0IsUUFBSSxpQkFBaUIsV0FBVywwQkFBMEIsaUJBQWlCO0FBQzNFLFFBQUksZUFBZSxXQUFXLHdCQUF3QixlQUFlO0FBQ3JFLFFBQUlDLFVBQVMsY0FBY0QsV0FBVTtBQUFBLE1BQ25DO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFDRCxRQUFJLGNBQVUsb0JBQUFFLFNBQVcsV0FBVyxTQUFTO0FBQzdDLFdBQU8sSUFBYyxRQUFRUCxZQUFTO0FBQUEsTUFDcEMsS0FBSyxDQUFDTSxTQUFRLGlCQUFpQjtBQUFBLE1BQy9CLFdBQVc7QUFBQSxJQUNiLEdBQUcsSUFBSSxHQUFHLFFBQVE7QUFBQSxFQUNwQjtBQUNBLFVBQVEsWUFBWTtBQUFBLElBQ2xCLFdBQVcsb0JBQUFFLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU01Qix5QkFBeUIsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtuQyxVQUFVLG9CQUFBQSxRQUFVLEtBQUs7QUFBQSxFQUMzQjs7O0FEMURBLE1BQUlDLGVBQVksQ0FBQyxZQUFZLGFBQWEsVUFBVSxVQUFVLGdCQUFnQix5QkFBeUI7QUFFdkcsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFjbFQsTUFBSSxZQUFZLFNBQVNDLFdBQVUsZUFBZSxhQUFhLFVBQVUsY0FBYyx5QkFBeUI7QUFDOUcsUUFBSSxDQUFDLGFBQWE7QUFDaEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLENBQUMsZUFBZTtBQUNsQixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksY0FBYztBQUNoQixVQUFJLFNBQVMsbUJBQW1CLGVBQWUsYUFBYSxRQUFRO0FBQ3BFLGFBQU8sSUFBYywwQkFBVSxNQUFNLE9BQU8sSUFBSSxTQUFVLE9BQU87QUFDL0QsWUFBSSxNQUFNLE1BQU0sS0FDWkEsYUFBWSxNQUFNLFdBQ2xCLFFBQVEsTUFBTTtBQUNsQixZQUFJLFFBQVEsY0FBYyxPQUFPLE9BQU8sTUFBTSxLQUFLO0FBRW5ELFlBQUlBLFlBQVc7QUFDYixpQkFBTyxJQUFjLFNBQVM7QUFBQSxZQUM1QixLQUFLO0FBQUEsWUFDTDtBQUFBLFVBQ0YsR0FBRyxLQUFLO0FBQUEsUUFDVjtBQUVBLGVBQU87QUFBQSxNQUNULENBQUMsQ0FBQztBQUFBLElBQ0o7QUFFQSxRQUFJLDBCQUEwQixXQUFXLGdCQUFnQixjQUFjLFlBQVk7QUFDbkYsUUFBSSx3QkFBd0IsV0FBVyxjQUFjLFlBQVksWUFBWTtBQUM3RSxRQUFJLGVBQWUsd0JBQXdCLFFBQVEscUJBQXFCO0FBRXhFLFFBQUksaUJBQWlCLElBQUk7QUFDdkIsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLFdBQVcsY0FBYyxPQUFPLEdBQUcsWUFBWTtBQUNuRCxRQUFJQyxTQUFRLGNBQWMsT0FBTyxjQUFjLFlBQVksTUFBTTtBQUNqRSxRQUFJLFlBQVksY0FBYyxPQUFPLGVBQWUsWUFBWSxNQUFNO0FBQ3RFLFdBQU8sSUFBYywwQkFBVSxNQUFNLFVBQVUsSUFBYyxTQUFTO0FBQUEsTUFDcEU7QUFBQSxJQUNGLEdBQUdBLE1BQUssR0FBRyxTQUFTO0FBQUEsRUFDdEI7QUFFQSxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUIsZUFBZSxhQUFhLFVBQVU7QUFDekYsUUFBSSxRQUFRLElBQUksT0FBTyxhQUFhLFdBQVcsTUFBTSxJQUFJO0FBQ3pELFFBQUlDLFdBQVUsQ0FBQztBQUNmLFFBQUlGO0FBRUosWUFBUUEsU0FBUSxNQUFNLEtBQUssYUFBYSxPQUFPLE1BQU07QUFDbkQsTUFBQUUsU0FBUSxLQUFLO0FBQUEsUUFDWCxPQUFPRixPQUFNO0FBQUEsUUFDYixNQUFNQSxPQUFNLFNBQVMsS0FBS0EsT0FBTSxDQUFDLEVBQUU7QUFBQSxNQUNyQyxDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU8sYUFBYUUsVUFBUyxjQUFjLE1BQU07QUFBQSxFQUNuRDtBQUVBLE1BQUksZUFBZSxTQUFTQyxjQUFhLG1CQUFtQixhQUFhO0FBQ3ZFLFFBQUksWUFBWSxDQUFDO0FBRWpCLFFBQUlDLFVBQVMsU0FBU0EsUUFBTyxPQUFPLEtBQUtMLFlBQVc7QUFDbEQsVUFBSSxNQUFNLFFBQVEsR0FBRztBQUNuQixrQkFBVSxLQUFLO0FBQUEsVUFDYjtBQUFBLFVBQ0E7QUFBQSxVQUNBLFdBQVdBO0FBQUEsUUFDYixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFFQSxRQUFJLGtCQUFrQixXQUFXLEdBQUc7QUFDbEMsTUFBQUssUUFBTyxHQUFHLGFBQWEsS0FBSztBQUFBLElBQzlCLE9BQU87QUFDTCxVQUFJLFlBQVk7QUFDaEIsd0JBQWtCLFFBQVEsU0FBVSxPQUFPO0FBQ3pDLFFBQUFBLFFBQU8sV0FBVyxNQUFNLE9BQU8sS0FBSztBQUNwQyxRQUFBQSxRQUFPLE1BQU0sT0FBTyxNQUFNLEtBQUssSUFBSTtBQUNuQyxvQkFBWSxNQUFNO0FBQUEsTUFDcEIsQ0FBQztBQUNELE1BQUFBLFFBQU8sV0FBVyxhQUFhLEtBQUs7QUFBQSxJQUN0QztBQUVBLFdBQU87QUFBQSxFQUNUO0FBRU8sTUFBSSxlQUFlLFNBQVNDLGNBQWFDLFFBQU07QUFDcEQsUUFBSSxXQUFXQSxPQUFLLFVBQ2hCLFlBQVlBLE9BQUssV0FDakIsU0FBU0EsT0FBSyxRQUNkLGNBQWNBLE9BQUssUUFDbkIsU0FBUyxnQkFBZ0IsU0FBUyxRQUFRLGFBQzFDLG9CQUFvQkEsT0FBSyxjQUN6QixlQUFlLHNCQUFzQixTQUFTLFFBQVEsbUJBQ3RELHdCQUF3QkEsT0FBSyx5QkFDN0IsMEJBQTBCLDBCQUEwQixTQUFTLE9BQU8sdUJBQ3BFLE9BQU9ULDRCQUF5QlMsUUFBTVgsWUFBUztBQUVuRCxXQUFPLElBQWMsUUFBUUMsWUFBUztBQUFBLE1BQ3BDO0FBQUEsSUFDRixHQUFHLElBQUksR0FBRyxVQUFVLFVBQVUsUUFBUSxRQUFRLGNBQWMsdUJBQXVCLENBQUM7QUFBQSxFQUN0RjtBQUNBLGVBQWEsWUFBWTtBQUFBLElBQ3ZCLFdBQVcsb0JBQUFXLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLNUIsVUFBVSxvQkFBQUEsUUFBVSxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLM0IsUUFBUSxvQkFBQUEsUUFBVSxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLekIsUUFBUSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2xCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxFQUMxQjs7O0FHNUlBLE1BQUFDLGtCQUFrQjtBQUdYLE1BQUksbUJBQW1CLFNBQVNDLGtCQUFpQkMsUUFBTTtBQUM1RCxRQUFJLFdBQVdBLE9BQUs7QUFDcEIsV0FBTyxJQUFjLE9BQU87QUFBQSxNQUMxQixXQUFXO0FBQUEsSUFDYixHQUFHLFFBQVE7QUFBQSxFQUNiO0FBQ0EsbUJBQWlCLFlBQVksQ0FBQzs7O0FDdUI5QixNQUFBQyxrQkFBaUM7QUFDakMsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1QjtBQXpDdkIsV0FBU0MsVUFBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxVQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLE1BQUlFLGVBQVksQ0FBQyxZQUFZLGFBQWEsWUFBWSxXQUFXLGFBQWEsV0FBVztBQUV6RixXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUVsVCxXQUFTQyxrQkFBZ0IsVUFBVSxhQUFhO0FBQUUsUUFBSSxFQUFFLG9CQUFvQixjQUFjO0FBQUUsWUFBTSxJQUFJLFVBQVUsbUNBQW1DO0FBQUEsSUFBRztBQUFBLEVBQUU7QUFFeEosV0FBU0Msb0JBQWtCLFFBQVEsT0FBTztBQUFFLGFBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFBRSxVQUFJLGFBQWEsTUFBTSxDQUFDO0FBQUcsaUJBQVcsYUFBYSxXQUFXLGNBQWM7QUFBTyxpQkFBVyxlQUFlO0FBQU0sVUFBSSxXQUFXO0FBQVksbUJBQVcsV0FBVztBQUFNLGFBQU8sZUFBZSxRQUFRLFdBQVcsS0FBSyxVQUFVO0FBQUEsSUFBRztBQUFBLEVBQUU7QUFFNVQsV0FBU0MsZUFBYSxhQUFhLFlBQVksYUFBYTtBQUFFLFFBQUk7QUFBWSxNQUFBRCxvQkFBa0IsWUFBWSxXQUFXLFVBQVU7QUFBRyxRQUFJO0FBQWEsTUFBQUEsb0JBQWtCLGFBQWEsV0FBVztBQUFHLFdBQU87QUFBQSxFQUFhO0FBRXROLFdBQVNFLFlBQVUsVUFBVSxZQUFZO0FBQUUsUUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFBRSxZQUFNLElBQUksVUFBVSxvREFBb0Q7QUFBQSxJQUFHO0FBQUUsYUFBUyxZQUFZLE9BQU8sT0FBTyxjQUFjLFdBQVcsV0FBVyxFQUFFLGFBQWEsRUFBRSxPQUFPLFVBQVUsVUFBVSxNQUFNLGNBQWMsS0FBSyxFQUFFLENBQUM7QUFBRyxRQUFJO0FBQVksTUFBQUMsa0JBQWdCLFVBQVUsVUFBVTtBQUFBLEVBQUc7QUFFaFksV0FBU0Esa0JBQWdCLEdBQUcsR0FBRztBQUFFLElBQUFBLG9CQUFrQixPQUFPLGtCQUFrQixTQUFTQSxrQkFBZ0JDLElBQUdDLElBQUc7QUFBRSxNQUFBRCxHQUFFLFlBQVlDO0FBQUcsYUFBT0Q7QUFBQSxJQUFHO0FBQUcsV0FBT0Qsa0JBQWdCLEdBQUcsQ0FBQztBQUFBLEVBQUc7QUFFekssV0FBU0csZUFBYSxTQUFTO0FBQUUsUUFBSSw0QkFBNEJDLDRCQUEwQjtBQUFHLFdBQU8sU0FBUyx1QkFBdUI7QUFBRSxVQUFJLFFBQVFDLGtCQUFnQixPQUFPLEdBQUc7QUFBUSxVQUFJLDJCQUEyQjtBQUFFLFlBQUksWUFBWUEsa0JBQWdCLElBQUksRUFBRTtBQUFhLGlCQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVcsU0FBUztBQUFBLE1BQUcsT0FBTztBQUFFLGlCQUFTLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUFHO0FBQUUsYUFBT0MsNkJBQTJCLE1BQU0sTUFBTTtBQUFBLElBQUc7QUFBQSxFQUFHO0FBRXhhLFdBQVNBLDZCQUEyQkMsT0FBTSxNQUFNO0FBQUUsUUFBSSxTQUFTakIsVUFBUSxJQUFJLE1BQU0sWUFBWSxPQUFPLFNBQVMsYUFBYTtBQUFFLGFBQU87QUFBQSxJQUFNLFdBQVcsU0FBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLFVBQVUsMERBQTBEO0FBQUEsSUFBRztBQUFFLFdBQU9rQix5QkFBdUJELEtBQUk7QUFBQSxFQUFHO0FBRS9SLFdBQVNDLHlCQUF1QkQsT0FBTTtBQUFFLFFBQUlBLFVBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxlQUFlLDJEQUEyRDtBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFckssV0FBU0gsOEJBQTRCO0FBQUUsUUFBSSxPQUFPLFlBQVksZUFBZSxDQUFDLFFBQVE7QUFBVyxhQUFPO0FBQU8sUUFBSSxRQUFRLFVBQVU7QUFBTSxhQUFPO0FBQU8sUUFBSSxPQUFPLFVBQVU7QUFBWSxhQUFPO0FBQU0sUUFBSTtBQUFFLGNBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxVQUFVLFNBQVMsQ0FBQyxHQUFHLFdBQVk7QUFBQSxNQUFDLENBQUMsQ0FBQztBQUFHLGFBQU87QUFBQSxJQUFNLFNBQVMsR0FBRztBQUFFLGFBQU87QUFBQSxJQUFPO0FBQUEsRUFBRTtBQUV4VSxXQUFTQyxrQkFBZ0IsR0FBRztBQUFFLElBQUFBLG9CQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQixTQUFTQSxrQkFBZ0JKLElBQUc7QUFBRSxhQUFPQSxHQUFFLGFBQWEsT0FBTyxlQUFlQSxFQUFDO0FBQUEsSUFBRztBQUFHLFdBQU9JLGtCQUFnQixDQUFDO0FBQUEsRUFBRztBQUU1TSxXQUFTSSxrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQWdCaE4sTUFBSSxzQkFBc0IsU0FBU0MscUJBQW9CLFNBQVM7QUFDOUQsUUFBSSxDQUFDLFNBQVM7QUFDWixhQUFPO0FBQUEsUUFDTCxNQUFNO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFFQSxXQUFPLFlBQVksT0FBTztBQUFBLE1BQ3hCLE1BQU07QUFBQSxNQUNOLE9BQU87QUFBQSxJQUNULElBQUk7QUFBQSxNQUNGLE1BQU07QUFBQSxNQUNOLE9BQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVPLE1BQUksc0JBQW1DLHlCQUFVLFlBQVk7QUFDbEUsSUFBQVgsWUFBVVksc0JBQXFCLFVBQVU7QUFFekMsUUFBSSxTQUFTUixlQUFhUSxvQkFBbUI7QUFFN0MsYUFBU0EsdUJBQXNCO0FBQzdCLFVBQUk7QUFFSixNQUFBZixrQkFBZ0IsTUFBTWUsb0JBQW1CO0FBRXpDLGVBQVMsT0FBTyxVQUFVLFFBQVEsT0FBTyxJQUFJLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUTtBQUN2RixhQUFLLElBQUksSUFBSSxVQUFVLElBQUk7QUFBQSxNQUM3QjtBQUVBLGNBQVEsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQztBQUVyRCxNQUFBRixrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsYUFBYSxJQUFJO0FBRWhFLE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxTQUFTO0FBQUEsUUFDdEQsVUFBVTtBQUFBLE1BQ1osQ0FBQztBQUVELE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxTQUFTLFdBQVk7QUFDbEUsWUFBSSxNQUFNLFdBQVc7QUFDbkIsZ0JBQU0sVUFBVSxNQUFNO0FBQUEsUUFDeEI7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsWUFBWSxXQUFZO0FBQ3JFLGVBQU8sTUFBTSxNQUFNO0FBQUEsTUFDckIsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNUO0FBRUEsSUFBQVYsZUFBYWEsc0JBQXFCLENBQUM7QUFBQSxNQUNqQyxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVNDLFVBQVM7QUFDdkIsWUFBSSxTQUFTO0FBRWIsWUFBSSxjQUFjLEtBQUssT0FDbkIsV0FBVyxZQUFZLFVBQ3ZCLFlBQVksWUFBWSxXQUN4QixXQUFXLFlBQVksVUFDdkIsVUFBVSxZQUFZLFNBQ3RCLFlBQVksWUFBWSxXQUN4QixZQUFZLFlBQVksV0FDeEIsT0FBT2xCLDRCQUF5QixhQUFhRixZQUFTO0FBRTFELFlBQUksY0FBVSxvQkFBQXFCLFNBQVcsdUJBQXVCO0FBQUEsVUFDOUMsaUNBQWlDO0FBQUEsUUFDbkMsR0FBRyxTQUFTO0FBQ1osWUFBSTtBQUVKLFlBQUksV0FBVztBQUNiLGNBQUksdUJBQXVCLG9CQUFvQixPQUFPLEdBQ2xEQyxVQUFPLHFCQUFxQixNQUM1QixRQUFRLHFCQUFxQjtBQUVqQyxxQkFBVyxJQUFjLGFBQWE7QUFBQSxZQUNwQyxNQUFNO0FBQUEsVUFDUixHQUFHLElBQWMsU0FBUztBQUFBLFlBQ3hCO0FBQUEsWUFDQSxNQUFNQTtBQUFBLFVBQ1IsQ0FBQyxDQUFDO0FBQUEsUUFDSjtBQUVBLGVBQU8sSUFBYyxVQUFVckIsWUFBUztBQUFBLFVBQ3RDLEtBQUssU0FBUyxJQUFJc0IsUUFBTTtBQUN0QixtQkFBTyxPQUFPLFlBQVlBO0FBQUEsVUFDNUI7QUFBQSxVQUNBLE1BQU07QUFBQSxVQUNOLE1BQU07QUFBQSxVQUNOLGlCQUFpQjtBQUFBLFVBQ2pCLFdBQVc7QUFBQSxVQUNYO0FBQUEsVUFDQSxpQkFBaUI7QUFBQSxRQUNuQixHQUFHLElBQUksR0FBRyxJQUFjLGNBQWM7QUFBQSxVQUNwQyxZQUFZO0FBQUEsVUFDWixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsVUFDWCxZQUFZO0FBQUEsUUFDZCxHQUFHLFVBQVUsSUFBYyxhQUFhO0FBQUEsVUFDdEMsV0FBVztBQUFBLFVBQ1gsV0FBVztBQUFBLFFBQ2IsR0FBRyxRQUFRLENBQUMsQ0FBQztBQUFBLE1BQ2Y7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUVGLFdBQU9KO0FBQUEsRUFDVCxFQUFFLHlCQUFTO0FBRVgsRUFBQUYsa0JBQWdCLHFCQUFxQixnQkFBZ0I7QUFBQSxJQUNuRCxXQUFXO0FBQUEsRUFDYixDQUFDO0FBRUQsc0JBQW9CLFlBQVk7QUFBQSxJQUM5QixTQUFTLG9CQUFBTyxRQUFVLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQztBQUFBLElBQ3RDLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsSUFDckIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxFQUM5Qjs7O0FMcktBLFdBQVNDLFVBQVEsS0FBSztBQUFFO0FBQTJCLFFBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxPQUFPLGFBQWEsVUFBVTtBQUFFLE1BQUFBLFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU8sT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRyxPQUFPO0FBQUUsTUFBQUQsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBT0EsUUFBTyxPQUFPLFdBQVcsY0FBY0EsS0FBSSxnQkFBZ0IsVUFBVUEsU0FBUSxPQUFPLFlBQVksV0FBVyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHO0FBQUUsV0FBT0QsVUFBUSxHQUFHO0FBQUEsRUFBRztBQUV6WCxNQUFJRSxlQUFZLENBQUMsT0FBTyxzQkFBc0IsU0FBUyxPQUFPO0FBQTlELE1BQ0lDLGdCQUFhLENBQUMsa0JBQWtCLHFCQUFxQix5QkFBeUIsb0JBQW9CLGFBQWEsbUNBQW1DLGFBQWEsV0FBVyxtQkFBbUIsZUFBZSxrQkFBa0IsaUJBQWlCLG9CQUFvQixZQUFZLGFBQWEsV0FBVyxZQUFZLGdCQUFnQixVQUFVLGFBQWEsaUJBQWlCLGVBQWUsbUJBQW1CLG1CQUFtQixrQkFBa0IsU0FBUyxhQUFhLFVBQVUsU0FBUyxrQkFBa0I7QUFFamYsV0FBU0MsVUFBUUMsU0FBUSxnQkFBZ0I7QUFBRSxRQUFJQyxRQUFPLE9BQU8sS0FBS0QsT0FBTTtBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLFVBQVUsT0FBTyxzQkFBc0JBLE9BQU07QUFBRyxVQUFJLGdCQUFnQjtBQUFFLGtCQUFVLFFBQVEsT0FBTyxTQUFVLEtBQUs7QUFBRSxpQkFBTyxPQUFPLHlCQUF5QkEsU0FBUSxHQUFHLEVBQUU7QUFBQSxRQUFZLENBQUM7QUFBQSxNQUFHO0FBQUUsTUFBQUMsTUFBSyxLQUFLLE1BQU1BLE9BQU0sT0FBTztBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFeFYsV0FBU0MsZ0JBQWMsUUFBUTtBQUFFLGFBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxVQUFJLFNBQVMsVUFBVSxDQUFDLEtBQUssT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQUcsVUFBSSxJQUFJLEdBQUc7QUFBRSxRQUFBSCxVQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksRUFBRSxRQUFRLFNBQVUsS0FBSztBQUFFLFVBQUFJLGtCQUFnQixRQUFRLEtBQUssT0FBTyxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHLFdBQVcsT0FBTywyQkFBMkI7QUFBRSxlQUFPLGlCQUFpQixRQUFRLE9BQU8sMEJBQTBCLE1BQU0sQ0FBQztBQUFBLE1BQUcsT0FBTztBQUFFLFFBQUFKLFVBQVEsT0FBTyxNQUFNLENBQUMsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUFFLGlCQUFPLGVBQWUsUUFBUSxLQUFLLE9BQU8seUJBQXlCLFFBQVEsR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUVyaEIsV0FBU0ssY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFbFQsV0FBU0Msa0JBQWdCLFVBQVUsYUFBYTtBQUFFLFFBQUksRUFBRSxvQkFBb0IsY0FBYztBQUFFLFlBQU0sSUFBSSxVQUFVLG1DQUFtQztBQUFBLElBQUc7QUFBQSxFQUFFO0FBRXhKLFdBQVNDLG9CQUFrQixRQUFRLE9BQU87QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUUsVUFBSSxhQUFhLE1BQU0sQ0FBQztBQUFHLGlCQUFXLGFBQWEsV0FBVyxjQUFjO0FBQU8saUJBQVcsZUFBZTtBQUFNLFVBQUksV0FBVztBQUFZLG1CQUFXLFdBQVc7QUFBTSxhQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUssVUFBVTtBQUFBLElBQUc7QUFBQSxFQUFFO0FBRTVULFdBQVNDLGVBQWEsYUFBYSxZQUFZLGFBQWE7QUFBRSxRQUFJO0FBQVksTUFBQUQsb0JBQWtCLFlBQVksV0FBVyxVQUFVO0FBQUcsUUFBSTtBQUFhLE1BQUFBLG9CQUFrQixhQUFhLFdBQVc7QUFBRyxXQUFPO0FBQUEsRUFBYTtBQUV0TixXQUFTRSxZQUFVLFVBQVUsWUFBWTtBQUFFLFFBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQUUsWUFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsSUFBRztBQUFFLGFBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRSxDQUFDO0FBQUcsUUFBSTtBQUFZLE1BQUFDLGtCQUFnQixVQUFVLFVBQVU7QUFBQSxFQUFHO0FBRWhZLFdBQVNBLGtCQUFnQixHQUFHLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxrQkFBa0IsU0FBU0Esa0JBQWdCQyxJQUFHQyxJQUFHO0FBQUUsTUFBQUQsR0FBRSxZQUFZQztBQUFHLGFBQU9EO0FBQUEsSUFBRztBQUFHLFdBQU9ELGtCQUFnQixHQUFHLENBQUM7QUFBQSxFQUFHO0FBRXpLLFdBQVNHLGVBQWEsU0FBUztBQUFFLFFBQUksNEJBQTRCQyw0QkFBMEI7QUFBRyxXQUFPLFNBQVMsdUJBQXVCO0FBQUUsVUFBSSxRQUFRQyxrQkFBZ0IsT0FBTyxHQUFHO0FBQVEsVUFBSSwyQkFBMkI7QUFBRSxZQUFJLFlBQVlBLGtCQUFnQixJQUFJLEVBQUU7QUFBYSxpQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUFHLE9BQU87QUFBRSxpQkFBUyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFFLGFBQU9DLDZCQUEyQixNQUFNLE1BQU07QUFBQSxJQUFHO0FBQUEsRUFBRztBQUV4YSxXQUFTQSw2QkFBMkJDLE9BQU0sTUFBTTtBQUFFLFFBQUksU0FBU3ZCLFVBQVEsSUFBSSxNQUFNLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFBRSxhQUFPO0FBQUEsSUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLElBQUc7QUFBRSxXQUFPd0IseUJBQXVCRCxLQUFJO0FBQUEsRUFBRztBQUUvUixXQUFTQyx5QkFBdUJELE9BQU07QUFBRSxRQUFJQSxVQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksZUFBZSwyREFBMkQ7QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXJLLFdBQVNILDhCQUE0QjtBQUFFLFFBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsYUFBTztBQUFPLFFBQUksUUFBUSxVQUFVO0FBQU0sYUFBTztBQUFPLFFBQUksT0FBTyxVQUFVO0FBQVksYUFBTztBQUFNLFFBQUk7QUFBRSxjQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLENBQUMsR0FBRyxXQUFZO0FBQUEsTUFBQyxDQUFDLENBQUM7QUFBRyxhQUFPO0FBQUEsSUFBTSxTQUFTLEdBQUc7QUFBRSxhQUFPO0FBQUEsSUFBTztBQUFBLEVBQUU7QUFFeFUsV0FBU0Msa0JBQWdCLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsU0FBU0Esa0JBQWdCSixJQUFHO0FBQUUsYUFBT0EsR0FBRSxhQUFhLE9BQU8sZUFBZUEsRUFBQztBQUFBLElBQUc7QUFBRyxXQUFPSSxrQkFBZ0IsQ0FBQztBQUFBLEVBQUc7QUFFNU0sV0FBU2Isa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUF1QmhOLE1BQUksMkJBQTJCO0FBRS9CLE1BQUksZ0JBQWdCLElBQWMsVUFBVTtBQUFBLElBQzFDLFdBQVc7QUFBQSxJQUNYLE9BQU87QUFBQSxJQUNQLFVBQVU7QUFBQSxJQUNWLGVBQWU7QUFBQSxFQUNqQixDQUFDO0FBRU0sTUFBSSx5QkFBc0MseUJBQVUsWUFBWTtBQUNyRSxJQUFBTyxZQUFVVSx5QkFBd0IsVUFBVTtBQUU1QyxRQUFJLFNBQVNOLGVBQWFNLHVCQUFzQjtBQUVoRCxhQUFTQSwwQkFBeUI7QUFDaEMsVUFBSTtBQUVKLE1BQUFiLGtCQUFnQixNQUFNYSx1QkFBc0I7QUFFNUMsZUFBUyxPQUFPLFVBQVUsUUFBUSxPQUFPLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxRQUFRO0FBQ3ZGLGFBQUssSUFBSSxJQUFJLFVBQVUsSUFBSTtBQUFBLE1BQzdCO0FBRUEsY0FBUSxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBRXJELE1BQUFqQixrQkFBZ0JnQix5QkFBdUIsS0FBSyxHQUFHLG1CQUFtQixJQUFJO0FBRXRFLE1BQUFoQixrQkFBZ0JnQix5QkFBdUIsS0FBSyxHQUFHLFdBQVcsSUFBSTtBQUU5RCxNQUFBaEIsa0JBQWdCZ0IseUJBQXVCLEtBQUssR0FBRyxjQUFjLElBQUk7QUFFakUsTUFBQWhCLGtCQUFnQmdCLHlCQUF1QixLQUFLLEdBQUcsa0JBQWtCLFdBQVk7QUFFM0UsOEJBQXNCLFdBQVk7QUFDaEMsZ0JBQU0sTUFBTSxlQUFlLE1BQU0sZUFBZTtBQUFBLFFBQ2xELENBQUM7QUFBQSxNQUNILENBQUM7QUFFRCxNQUFBaEIsa0JBQWdCZ0IseUJBQXVCLEtBQUssR0FBRyxxQkFBcUIsU0FBVSxPQUFPO0FBR25GLFlBQUksTUFBTSxtQkFBbUIsTUFBTSxVQUFVLE1BQU0sZ0JBQWdCLFNBQVMsTUFBTSxNQUFNLE1BQU0sT0FBTztBQUNuRyxnQkFBTSxNQUFNLFlBQVksS0FBSztBQUFBLFFBQy9CO0FBQUEsTUFDRixDQUFDO0FBRUQsTUFBQWhCLGtCQUFnQmdCLHlCQUF1QixLQUFLLEdBQUcsbUJBQW1CLFNBQVUsS0FBSztBQUMvRSxjQUFNLE1BQU0sUUFBUSxHQUFHO0FBRXZCLGNBQU0sa0JBQWtCO0FBQUEsTUFDMUIsQ0FBQztBQUVELE1BQUFoQixrQkFBZ0JnQix5QkFBdUIsS0FBSyxHQUFHLGNBQWMsU0FBVSxLQUFLO0FBQzFFLGNBQU0sVUFBVTtBQUFBLE1BQ2xCLENBQUM7QUFFRCxNQUFBaEIsa0JBQWdCZ0IseUJBQXVCLEtBQUssR0FBRyxpQkFBaUIsU0FBVSxLQUFLO0FBQzdFLGNBQU0sYUFBYTtBQUVuQixZQUFJLEtBQUs7QUFDUCxjQUFJLGFBQWEsY0FBYyxNQUFNLE1BQU0sZ0JBQWdCO0FBQzNELGNBQUksYUFBYSxNQUFNLE1BQU0sTUFBTSxPQUFPLFNBQVMsQ0FBQztBQUNwRCxjQUFJLGFBQWEsUUFBUSxTQUFTO0FBQ2xDLGNBQUksYUFBYSxZQUFZLEdBQUc7QUFBQSxRQUNsQztBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFoQixrQkFBZ0JnQix5QkFBdUIsS0FBSyxHQUFHLFdBQVcsU0FBVUUsUUFBTTtBQUN4RSxZQUFJO0FBRUosWUFBSSxPQUFPQSxPQUFLLE1BQ1osUUFBUUEsT0FBSyxPQUNiLFFBQVFBLE9BQUs7QUFDakIsWUFBSSxTQUFTLEtBQUssS0FBSztBQUV2QixZQUFJLE1BQU0sT0FBTyxLQUNiLHFCQUFxQixPQUFPLG9CQUM1QixRQUFRLE9BQU8sT0FDZixRQUFRLE9BQU8sT0FDZixPQUFPaEIsNEJBQXlCLFFBQVFSLFlBQVM7QUFFckQsWUFBSSxjQUFjLE1BQU0sT0FDcEIsa0JBQWtCLFlBQVksaUJBQzlCLGtCQUFrQixZQUFZLGlCQUM5QixnQkFBZ0IsWUFBWSxlQUM1QixZQUFZLFlBQVksV0FDeEIsb0JBQW9CLFlBQVksbUJBQ2hDLGVBQWUsWUFBWSxjQUMzQixjQUFjLFlBQVksYUFDMUIsU0FBUyxZQUFZO0FBRXpCLFlBQUksb0JBQW9CO0FBQ3RCLGlCQUFPLElBQWMsT0FBTztBQUFBLFlBQzFCLEtBQUssUUFBUSxRQUFRLFFBQVEsU0FBUyxNQUFNLE1BQU0sWUFBWTtBQUFBLFlBQzlEO0FBQUEsVUFDRixHQUFHLElBQWMsa0JBQWtCLE1BQU0sS0FBSyxDQUFDO0FBQUEsUUFDakQ7QUFFQSxZQUFJLFVBQVU7QUFFZCxZQUFJLG1CQUFtQixnQkFBZ0IsVUFBVSxnQkFBZ0IsQ0FBQyxFQUFFLFVBQVUsU0FBUyxnQkFBZ0IsQ0FBQyxFQUFFLFFBQVEsS0FBSztBQUNySCxvQkFBVTtBQUFBLFFBQ1o7QUFFQSxZQUFJLGtCQUFrQixzQkFBc0I7QUFDNUMsWUFBSSxtQkFBbUIsT0FBTyxlQUFlLFVBQVUsS0FBSyxPQUFPLGFBQWE7QUFDaEYsZUFBTyxJQUFjLHFCQUFxQk8sWUFBUztBQUFBLFVBQ2pEO0FBQUEsVUFDQSxNQUFNLGNBQWMsT0FBTyxTQUFTLFFBQVEsZ0JBQWdCLFNBQVMsY0FBYyxPQUFPLE1BQU0sWUFBWTtBQUFBLFVBQzVHLFNBQVMsU0FBUyxVQUFVO0FBQzFCLGdCQUFJLGVBQWU7QUFDakIsNEJBQWMsTUFBTTtBQUFBLFlBQ3RCO0FBQUEsVUFDRjtBQUFBLFVBQ0EsS0FBSyxVQUFVLEtBQUtlLHlCQUF1QixLQUFLLEdBQUcsS0FBSztBQUFBLFVBQ3hELFdBQVc7QUFBQSxVQUNYO0FBQUEsVUFDQSxXQUFXLGtCQUFrQixPQUFPO0FBQUEsVUFDcEMsSUFBSSxPQUFPLFdBQVcsT0FBTyxLQUFLLENBQUM7QUFBQSxVQUNuQyxPQUFPO0FBQUEsUUFDVCxHQUFHLElBQUksR0FBRyxJQUFjLFFBQVE7QUFBQSxVQUM5QixXQUFXO0FBQUEsUUFDYixHQUFHLGVBQWUsSUFBYyxRQUFRO0FBQUEsVUFDdEMsV0FBVztBQUFBLFFBQ2IsR0FBRyxhQUFhLFFBQVEsYUFBYSxpQ0FBaUMsQ0FBQyxJQUFJLElBQWMsY0FBYztBQUFBLFVBQ3JHLFFBQVE7QUFBQSxVQUNSLFdBQVc7QUFBQSxRQUNiLEdBQUcsS0FBSyxHQUFHLG1CQUFtQixDQUFDLG1CQUFtQixnQkFBZ0IsSUFBSSxDQUFDO0FBQUEsTUFDekUsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNUO0FBRUEsSUFBQVYsZUFBYVcseUJBQXdCLENBQUM7QUFBQSxNQUNwQyxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsb0JBQW9CO0FBQ2xDLFlBQUksU0FBUztBQUliLDhCQUFzQixXQUFZO0FBQ2hDLG1CQUFTLEtBQUssVUFBVSxJQUFJLDBCQUEwQjtBQUFBLFFBQ3hELENBQUM7QUFDRCxhQUFLLGVBQWU7QUFDcEIsZUFBTyxpQkFBaUIsVUFBVSxLQUFLLGNBQWM7QUFHckQsbUJBQVcsV0FBWTtBQUNyQixpQkFBTyxpQkFBaUIsVUFBVSxPQUFPLG1CQUFtQjtBQUFBLFlBQzFELFNBQVM7QUFBQTtBQUFBLFlBRVQsU0FBUztBQUFBO0FBQUEsVUFFWCxDQUFDO0FBQUEsUUFDSCxHQUFHLEdBQUc7QUFBQSxNQUNSO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsbUJBQW1CLFdBQVc7QUFDNUMsWUFBSSxVQUFVLFVBQVUsU0FDcEIsa0JBQWtCLFVBQVUsaUJBQzVCLGNBQWMsVUFBVTtBQUU1QixZQUFJLGdCQUFnQixLQUFLLE1BQU0sZUFBZSxZQUFZLEtBQUssTUFBTSxXQUFXLG9CQUFvQixLQUFLLE1BQU0saUJBQWlCO0FBQzlILGVBQUssZUFBZTtBQUFBLFFBQ3RCO0FBRUEsWUFBSSxLQUFLLFdBQVcsT0FBTyxLQUFLLE1BQU0sc0JBQXNCLGVBQWUsS0FBSyxNQUFNLHNCQUFzQixVQUFVLG1CQUFtQjtBQUN2SSxlQUFLLFFBQVEsYUFBYSxLQUFLLE1BQU0sbUJBQW1CLE1BQU07QUFBQSxRQUNoRTtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyx1QkFBdUI7QUFDckMsaUJBQVMsS0FBSyxVQUFVLE9BQU8sMEJBQTBCO0FBQ3pELGVBQU8sb0JBQW9CLFVBQVUsS0FBSyxjQUFjO0FBQ3hELGVBQU8sb0JBQW9CLFVBQVUsS0FBSyxtQkFBbUI7QUFBQSxVQUMzRCxTQUFTO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTRSxVQUFTO0FBQ3ZCLFlBQUksZUFBZSxLQUFLLE9BQ3BCLGVBQWUsYUFBYSxnQkFBZ0IsR0FDNUMsb0JBQW9CLGFBQWEsbUJBQ2pDLHdCQUF3QixhQUFhLHVCQUNyQyxtQkFBbUIsYUFBYSxrQkFDaEMsWUFBWSxhQUFhLFdBQ3pCQyxtQ0FBa0MsYUFBYSxpQ0FDL0MsWUFBWSxhQUFhLFdBQ3pCLFVBQVUsYUFBYSxTQUN2QixrQkFBa0IsYUFBYSxpQkFDL0IsY0FBYyxhQUFhLGFBQzNCLGlCQUFpQixhQUFhLGdCQUM5QixnQkFBZ0IsYUFBYSxlQUM3QixtQkFBbUIsYUFBYSxrQkFDaEMsV0FBVyxhQUFhLFVBQ3hCLFlBQVksYUFBYSxXQUN6QixVQUFVLGFBQWEsU0FDdkIsd0JBQXdCLGFBQWEsVUFDckNDLFlBQVcsMEJBQTBCLFNBQVMsV0FBVyx1QkFDekQsZUFBZSxhQUFhLGNBQzVCLFNBQVMsYUFBYSxRQUN0QixZQUFZLGFBQWEsV0FDekIsZ0JBQWdCLGFBQWEsZUFDN0IsY0FBYyxhQUFhLGFBQzNCLGtCQUFrQixhQUFhLGlCQUMvQixrQkFBa0IsYUFBYSxpQkFDL0IsaUJBQWlCLGFBQWEsZ0JBQzlCLFFBQVEsYUFBYSxPQUNyQkMsYUFBWSxhQUFhLFdBQ3pCLFNBQVMsYUFBYSxRQUN0QixRQUFRLGFBQWEsT0FDckIsbUJBQW1CLGFBQWEsa0JBQ2hDLE9BQU9wQiw0QkFBeUIsY0FBY1AsYUFBVTtBQUU1RCxZQUFJO0FBRUosWUFBSSxXQUFXO0FBQ2IsOEJBQW9CLElBQWMsY0FBYztBQUFBLFlBQzlDLFlBQVk7QUFBQSxZQUNaLGdCQUFnQjtBQUFBLFVBQ2xCLEdBQUcsSUFBYyxhQUFhO0FBQUEsWUFDNUIsTUFBTTtBQUFBLFVBQ1IsR0FBRyxJQUFjLG1CQUFtQjtBQUFBLFlBQ2xDLE1BQU07QUFBQSxVQUNSLENBQUMsQ0FBQyxHQUFHLElBQWMsYUFBYTtBQUFBLFlBQzlCLE1BQU07QUFBQSxVQUNSLEdBQUcsSUFBYyxTQUFTO0FBQUEsWUFDeEIsT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFVBQ1gsQ0FBQyxDQUFDLENBQUM7QUFBQSxRQUNMLFdBQVcsZUFBZSxtQkFBbUIsZ0JBQWdCLFdBQVcsR0FBRztBQUN6RSxjQUFJLGtCQUFrQnlCLGtDQUFpQztBQUNyRCxnQkFBSUUsY0FBYSxZQUFZLFNBQVNBLFVBQVMsR0FBRztBQUNoRCxrQ0FBb0IsSUFBYyxPQUFPO0FBQUEsZ0JBQ3ZDLFdBQVc7QUFBQSxjQUNiLEdBQUcsSUFBYyxLQUFLO0FBQUEsZ0JBQ3BCLFdBQVc7QUFBQSxjQUNiLEdBQUcsSUFBYyxTQUFTO0FBQUEsZ0JBQ3hCLE9BQU87QUFBQSxnQkFDUCxTQUFTO0FBQUEsZ0JBQ1QsUUFBUTtBQUFBLGtCQUNOLFdBQVcsSUFBYyxVQUFVLE1BQU1BLFVBQVM7QUFBQSxnQkFDcEQ7QUFBQSxjQUNGLENBQUMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxZQUNwQixPQUFPO0FBQ0wsa0JBQUkseUJBQXlCRixpQ0FBZ0MsYUFBYSxlQUFlO0FBRXpGLGtCQUFJLHdCQUF3QjtBQUUxQixvQ0FBb0IsSUFBYyxLQUFLLE1BQU0sSUFBYyxTQUFTO0FBQUEsa0JBQ2xFLE9BQU87QUFBQSxrQkFDUCxTQUFTO0FBQUEsa0JBQ1QsUUFBUTtBQUFBLG9CQUNOLE9BQU8sSUFBYyxVQUFVLE1BQU0sdUJBQXVCLEtBQUs7QUFBQSxrQkFDbkU7QUFBQSxnQkFDRixDQUFDLENBQUM7QUFBQSxjQUNKLE9BQU87QUFDTCxvQkFBSSx1QkFBdUIsU0FBU0csc0JBQXFCLE1BQU1DLGNBQWE7QUFDMUUsc0JBQUksTUFBTSxJQUFJLE9BQU8sb0JBQW9CLElBQUk7QUFDN0Msc0JBQUksUUFBUSxLQUFLLE1BQU0sR0FBRztBQUMxQix5QkFBTyxJQUFjLEtBQUs7QUFBQSxvQkFDeEIsV0FBVztBQUFBLGtCQUNiLEdBQUcsTUFBTSxJQUFJLFNBQVUsTUFBTSxLQUFLO0FBQ2hDLDJCQUFPLEtBQUssTUFBTSxHQUFHLElBQUksSUFBYyxVQUFVO0FBQUEsc0JBQy9DLEtBQUs7QUFBQSxvQkFDUCxHQUFHQSxZQUFXLElBQUk7QUFBQSxrQkFDcEIsQ0FBQyxDQUFDO0FBQUEsZ0JBQ0o7QUFFQSxvQ0FBb0IsSUFBYyxPQUFPO0FBQUEsa0JBQ3ZDLFdBQVc7QUFBQSxnQkFDYixHQUFHLG1CQUFtQixxQkFBcUIsa0JBQWtCLFdBQVcsSUFBSSxJQUFjLEtBQUs7QUFBQSxrQkFDN0YsV0FBVztBQUFBLGdCQUNiLEdBQUcsSUFBYyxTQUFTO0FBQUEsa0JBQ3hCLE9BQU87QUFBQSxrQkFDUCxTQUFTO0FBQUEsa0JBQ1QsUUFBUTtBQUFBLG9CQUNOLGFBQWEsSUFBYyxVQUFVLE1BQU0sV0FBVztBQUFBLGtCQUN4RDtBQUFBLGdCQUNGLENBQUMsQ0FBQyxHQUFHLGFBQWE7QUFBQSxjQUNwQjtBQUFBLFlBQ0Y7QUFBQSxVQUNGLE9BQU87QUFDTCxnQ0FBb0IsSUFBYyxLQUFLLE1BQU0sSUFBYyxTQUFTO0FBQUEsY0FDbEUsT0FBTztBQUFBLGNBQ1AsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLGdCQUNOLGFBQWEsSUFBYyxVQUFVLE1BQU0sV0FBVztBQUFBLGNBQ3hEO0FBQUEsWUFDRixDQUFDLENBQUM7QUFBQSxVQUNKO0FBQUEsUUFDRixXQUFXLENBQUMsUUFBUSxRQUFRO0FBQzFCLDhCQUFvQixJQUFjLEtBQUssTUFBTSxJQUFjLFNBQVM7QUFBQSxZQUNsRSxPQUFPO0FBQUEsWUFDUCxTQUFTO0FBQUEsVUFDWCxDQUFDLENBQUM7QUFBQSxRQUNKLFdBQVcsdUJBQXVCO0FBQ2hDLDhCQUFvQixJQUFjLEtBQUssTUFBTSxJQUFjLFNBQVM7QUFBQSxZQUNsRSxPQUFPO0FBQUEsWUFDUCxTQUFTO0FBQUEsVUFDWCxDQUFDLENBQUM7QUFBQSxRQUNKO0FBRUEsWUFBSSxhQUFhLG9CQUFvQixJQUFjLFNBQVM7QUFBQSxVQUMxRCxNQUFNO0FBQUEsVUFDTixXQUFXO0FBQUEsUUFDYixHQUFHLGlCQUFpQixJQUFJO0FBQ3hCLFlBQUksb0JBQW9CLGdCQUFnQixTQUFTLElBQUksZ0JBQWdCLFNBQVM7QUFDOUUsWUFBSSxTQUFTLHFCQUFxQixZQUFZO0FBRzlDLFlBQUksZ0JBQWdCLFNBQVMsTUFBTSxNQUFNO0FBRXpDLFlBQUksY0FBYyxJQUFjLGVBQWU7QUFBQSxVQUM3QyxRQUFRO0FBQUEsVUFDUjtBQUFBLFVBQ0EsV0FBVyxnQkFBZ0I7QUFBQSxVQUMzQixVQUFVO0FBQUEsVUFDVixVQUFVO0FBQUEsVUFDVixLQUFLLEtBQUs7QUFBQSxVQUNWLFVBQVUsS0FBSztBQUFBLFVBQ2Y7QUFBQSxRQUNGLEdBQUcsS0FBSyxPQUFPO0FBT2YsWUFBSSxjQUFVLG9CQUFBQyxTQUFXLHdCQUF3QjtBQUNqRCxlQUFPLElBQWMsaUJBQWlCeEIsWUFBUztBQUFBLFVBQzdDLGFBQWE7QUFBQSxVQUNiLFdBQVc7QUFBQSxVQUNYLFdBQVc7QUFBQSxVQUNYLFVBQVUsS0FBSztBQUFBLFVBQ2Ysa0JBQWtCLHVCQUF1QixPQUFPLFlBQVk7QUFBQSxVQUM1RCxPQUFPRixnQkFBY0EsZ0JBQWMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUc7QUFBQSxZQUNqRDtBQUFBLFVBQ0YsQ0FBQztBQUFBLFVBQ0QsUUFBUTtBQUFBLFVBQ1IsWUFBWTtBQUFBLFVBQ1osVUFBVXNCO0FBQUEsUUFDWixHQUFHLElBQUksR0FBRyxJQUFjLE9BQU87QUFBQSxVQUM3QixXQUFXO0FBQUEsUUFDYixHQUFHLGNBQWMsV0FBVyxDQUFDO0FBQUEsTUFDL0I7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUVGLFdBQU9KO0FBQUEsRUFDVCxFQUFFLHlCQUFTO0FBRVgsRUFBQWpCLGtCQUFnQix3QkFBd0IsZ0JBQWdCO0FBQUEsSUFDdEQsa0JBQWtCO0FBQUEsSUFDbEIsV0FBVztBQUFBO0FBQUEsRUFFYixDQUFDO0FBRUQseUJBQXVCLFlBQVk7QUFBQSxJQUNqQyxXQUFXLG9CQUFBMEIsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLFFBQVEsb0JBQUFBLFFBQVUsT0FBTyxVQUFVLENBQUM7QUFBQSxJQUNyRixtQkFBbUIsb0JBQUFBLFFBQVU7QUFBQSxJQUM3Qix1QkFBdUIsb0JBQUFBLFFBQVU7QUFBQSxJQUNqQyxrQkFBa0Isb0JBQUFBLFFBQVUsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNbkMsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDNUIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLGlDQUFpQyxvQkFBQUEsUUFBVTtBQUFBLElBQzNDLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixTQUFTLG9CQUFBQSxRQUFVLElBQUk7QUFBQSxJQUN2QixpQkFBaUIsb0JBQUFBLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxNQUFNO0FBQUEsTUFDakQsb0JBQW9CLG9CQUFBQSxRQUFVO0FBQUEsTUFDOUIsT0FBTyxvQkFBQUEsUUFBVSxPQUFPO0FBQUEsTUFDeEIsS0FBSyxvQkFBQUEsUUFBVTtBQUFBLE1BQ2YsU0FBUyxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLE1BQU07QUFBQSxRQUN6QyxvQkFBb0Isb0JBQUFBLFFBQVU7QUFBQSxRQUM5QixPQUFPLG9CQUFBQSxRQUFVLE9BQU87QUFBQSxRQUN4QixLQUFLLG9CQUFBQSxRQUFVO0FBQUEsUUFDZixTQUFTLG9CQUFBQSxRQUFVLFFBQVEsb0JBQUFBLFFBQVUsSUFBSSxVQUFVO0FBQUEsUUFDbkQsT0FBTyxvQkFBQUEsUUFBVTtBQUFBLFFBQ2pCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxRQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsUUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsTUFDOUIsQ0FBQyxFQUFFLFVBQVU7QUFBQSxNQUNiLE9BQU8sb0JBQUFBLFFBQVU7QUFBQSxNQUNqQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsTUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLElBQzlCLENBQUMsRUFBRSxVQUFVLEVBQUU7QUFBQSxJQUNmLGFBQWEsb0JBQUFBLFFBQVUsS0FBSztBQUFBLElBQzVCLGdCQUFnQixvQkFBQUEsUUFBVTtBQUFBLElBQzFCLGVBQWUsb0JBQUFBLFFBQVU7QUFBQSxJQUN6QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM1QixVQUFVLG9CQUFBQSxRQUFVO0FBQUEsSUFDcEIsV0FBVyxvQkFBQUEsUUFBVSxLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLMUIsU0FBUyxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLE1BQU07QUFBQSxNQUN6QyxvQkFBb0Isb0JBQUFBLFFBQVU7QUFBQSxNQUM5QixPQUFPLG9CQUFBQSxRQUFVLE9BQU87QUFBQSxNQUN4QixLQUFLLG9CQUFBQSxRQUFVO0FBQUEsTUFDZixTQUFTLG9CQUFBQSxRQUFVLFFBQVEsb0JBQUFBLFFBQVUsTUFBTTtBQUFBLFFBQ3pDLG9CQUFvQixvQkFBQUEsUUFBVTtBQUFBLFFBQzlCLE9BQU8sb0JBQUFBLFFBQVUsT0FBTztBQUFBLFFBQ3hCLEtBQUssb0JBQUFBLFFBQVU7QUFBQSxRQUNmLFNBQVMsb0JBQUFBLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxJQUFJLFVBQVU7QUFBQSxRQUNuRCxPQUFPLG9CQUFBQSxRQUFVO0FBQUEsUUFDakIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLFFBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxRQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxNQUM5QixDQUFDLEVBQUUsVUFBVTtBQUFBLE1BQ2IsT0FBTyxvQkFBQUEsUUFBVTtBQUFBLE1BQ2pCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxNQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsTUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDOUIsQ0FBQyxFQUFFLFVBQVUsRUFBRTtBQUFBLElBQ2YsVUFBVSxvQkFBQUEsUUFBVSxNQUFNLENBQUMsT0FBTyxRQUFRLENBQUM7QUFBQSxJQUMzQyxjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsUUFBUSxvQkFBQUEsUUFBVSxJQUFJO0FBQUEsSUFDdEIsV0FBVyxvQkFBQUEsUUFBVSxPQUFPO0FBQUEsSUFDNUIsZUFBZSxvQkFBQUEsUUFBVTtBQUFBLElBQ3pCLGFBQWEsb0JBQUFBLFFBQVUsT0FBTztBQUFBLElBQzlCLGlCQUFpQixvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLE1BQU07QUFBQSxNQUNqRCxvQkFBb0Isb0JBQUFBLFFBQVU7QUFBQSxNQUM5QixPQUFPLG9CQUFBQSxRQUFVLE9BQU87QUFBQSxNQUN4QixLQUFLLG9CQUFBQSxRQUFVO0FBQUEsTUFDZixTQUFTLG9CQUFBQSxRQUFVLFFBQVEsb0JBQUFBLFFBQVUsTUFBTTtBQUFBLFFBQ3pDLG9CQUFvQixvQkFBQUEsUUFBVTtBQUFBLFFBQzlCLE9BQU8sb0JBQUFBLFFBQVUsT0FBTztBQUFBLFFBQ3hCLEtBQUssb0JBQUFBLFFBQVU7QUFBQSxRQUNmLFNBQVMsb0JBQUFBLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxJQUFJLFVBQVU7QUFBQSxRQUNuRCxPQUFPLG9CQUFBQSxRQUFVO0FBQUEsUUFDakIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLFFBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxRQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxNQUM5QixDQUFDLEVBQUUsVUFBVTtBQUFBLE1BQ2IsT0FBTyxvQkFBQUEsUUFBVTtBQUFBLE1BQ2pCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxNQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsTUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDOUIsQ0FBQyxFQUFFLFVBQVUsRUFBRTtBQUFBLElBQ2YsZ0JBQWdCLG9CQUFBQSxRQUFVLEtBQUs7QUFBQSxJQUMvQixPQUFPLG9CQUFBQSxRQUFVLE9BQU87QUFBQSxJQUN4QixpQkFBaUIsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLEtBQUssWUFBWSxvQkFBQUEsUUFBVSxNQUFNO0FBQUEsTUFDL0UsYUFBYSxvQkFBQUEsUUFBVTtBQUFBLElBQ3pCLENBQUMsRUFBRSxVQUFVLENBQUM7QUFBQSxJQUNkLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixRQUFRLG9CQUFBQSxRQUFVO0FBQUEsRUFDcEI7OztBTW5nQkEsV0FBU0Msb0JBQW1CLEtBQUs7QUFBRSxXQUFPQyxvQkFBbUIsR0FBRyxLQUFLQyxrQkFBaUIsR0FBRyxLQUFLQyw4QkFBNEIsR0FBRyxLQUFLQyxvQkFBbUI7QUFBQSxFQUFHO0FBRXhKLFdBQVNBLHNCQUFxQjtBQUFFLFVBQU0sSUFBSSxVQUFVLHNJQUFzSTtBQUFBLEVBQUc7QUFFN0wsV0FBU0QsOEJBQTRCLEdBQUcsUUFBUTtBQUFFLFFBQUksQ0FBQztBQUFHO0FBQVEsUUFBSSxPQUFPLE1BQU07QUFBVSxhQUFPRSxvQkFBa0IsR0FBRyxNQUFNO0FBQUcsUUFBSSxJQUFJLE9BQU8sVUFBVSxTQUFTLEtBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQUcsUUFBSSxNQUFNLFlBQVksRUFBRTtBQUFhLFVBQUksRUFBRSxZQUFZO0FBQU0sUUFBSSxNQUFNLFNBQVMsTUFBTTtBQUFPLGFBQU8sTUFBTSxLQUFLLENBQUM7QUFBRyxRQUFJLE1BQU0sZUFBZSwyQ0FBMkMsS0FBSyxDQUFDO0FBQUcsYUFBT0Esb0JBQWtCLEdBQUcsTUFBTTtBQUFBLEVBQUc7QUFFL1osV0FBU0gsa0JBQWlCLE1BQU07QUFBRSxRQUFJLE9BQU8sV0FBVyxlQUFlLEtBQUssT0FBTyxRQUFRLEtBQUssUUFBUSxLQUFLLFlBQVksS0FBSztBQUFNLGFBQU8sTUFBTSxLQUFLLElBQUk7QUFBQSxFQUFHO0FBRTdKLFdBQVNELG9CQUFtQixLQUFLO0FBQUUsUUFBSSxNQUFNLFFBQVEsR0FBRztBQUFHLGFBQU9JLG9CQUFrQixHQUFHO0FBQUEsRUFBRztBQUUxRixXQUFTQSxvQkFBa0IsS0FBSyxLQUFLO0FBQUUsUUFBSSxPQUFPLFFBQVEsTUFBTSxJQUFJO0FBQVEsWUFBTSxJQUFJO0FBQVEsYUFBUyxJQUFJLEdBQUcsT0FBTyxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxLQUFLO0FBQUUsV0FBSyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFNO0FBUy9LLE1BQUksc0JBQXNCLFNBQVNDLHFCQUFvQixpQkFBaUI7QUFDN0UsV0FBTyxnQkFBZ0IsT0FBTyxTQUFVLFNBQVMsZUFBZTtBQUM5RCxVQUFJLGNBQWMsU0FBUztBQUN6QixrQkFBVSxRQUFRLE9BQU8sY0FBYyxPQUFPO0FBQUEsTUFDaEQsT0FBTztBQUNMLGdCQUFRLEtBQUssYUFBYTtBQUFBLE1BQzVCO0FBRUEsYUFBTztBQUFBLElBQ1QsR0FBRyxDQUFDLENBQUM7QUFBQSxFQUNQO0FBQ08sTUFBSSxrQ0FBa0MsU0FBU0MsaUNBQWdDLGFBQWEsaUJBQWlCLFdBQVc7QUFDN0gsUUFBSSx3QkFBd0IsWUFBWSxZQUFZO0FBQ3BELFdBQU8sZ0JBQWdCLEtBQUssU0FBVSxRQUFRO0FBQzVDLGFBQU8sT0FBTyxNQUFNLFlBQVksTUFBTSwwQkFBMEIsQ0FBQyxhQUFhLE9BQU8sUUFBUTtBQUFBLElBQy9GLENBQUM7QUFBQSxFQUNIO0FBRUEsTUFBSSx3QkFBd0IsU0FBU0MsdUJBQXNCLGFBQWEsUUFBUSxpQkFBaUIsdUJBQXVCLGVBQWUsa0JBQWtCO0FBRXZKLFFBQUksaUJBQWlCLGdDQUFnQyxPQUFPLE9BQU8saUJBQWlCLE9BQU8sR0FBRztBQUU5RixRQUFJLGtCQUFrQixDQUFDLGtCQUFrQjtBQUN2QyxhQUFPO0FBQUEsSUFDVDtBQUdBLFFBQUksZUFBZTtBQUNqQixrQkFBWSxLQUFLLE1BQU07QUFDdkI7QUFBQSxJQUNGO0FBRUEsUUFBSSxDQUFDLHVCQUF1QjtBQUMxQixrQkFBWSxLQUFLLE1BQU07QUFDdkI7QUFBQSxJQUNGO0FBRUEsUUFBSSxtQkFBbUIsT0FBTyxNQUFNLEtBQUssRUFBRSxZQUFZO0FBRXZELFFBQUksaUJBQWlCLFNBQVMscUJBQXFCLEdBQUc7QUFDcEQsa0JBQVksS0FBSyxNQUFNO0FBQUEsSUFDekI7QUFBQSxFQUNGO0FBRU8sTUFBSSxxQkFBcUIsU0FBU0Msb0JBQW1CLFNBQVMsaUJBQWlCLGFBQWEsZUFBZSxrQkFBa0IsZUFBZTtBQUNqSixRQUFJLHdCQUF3QixZQUFZLEtBQUssRUFBRSxZQUFZO0FBQzNELFFBQUksa0JBQWtCLENBQUM7QUFDdkIsWUFBUSxRQUFRLFNBQVUsUUFBUTtBQUNoQyxVQUFJLE9BQU8sU0FBUztBQUNsQixZQUFJLDBCQUEwQixDQUFDO0FBQy9CLGVBQU8sUUFBUSxRQUFRLFNBQVUsYUFBYTtBQUM1QyxnQ0FBc0IseUJBQXlCLGFBQWEsaUJBQWlCLHVCQUF1QixlQUFlLGdCQUFnQjtBQUFBLFFBQ3JJLENBQUM7QUFFRCxZQUFJLHdCQUF3QixTQUFTLEdBQUc7QUFFdEMsMEJBQWdCLEtBQUs7QUFBQSxZQUNuQixLQUFLLE9BQU87QUFBQSxZQUNaLE9BQU8sT0FBTztBQUFBLFlBQ2Qsb0JBQW9CO0FBQUEsVUFDdEIsQ0FBQztBQUdELDRCQUFrQixnQkFBZ0IsT0FBTyx1QkFBdUI7QUFBQSxRQUNsRTtBQUFBLE1BQ0YsT0FBTztBQUNMLDhCQUFzQixpQkFBaUIsUUFBUSxpQkFBaUIsdUJBQXVCLGVBQWUsZ0JBQWdCO0FBQUEsTUFDeEg7QUFBQSxJQUNGLENBQUM7QUFFRCxRQUFJLGtCQUFrQixjQUFjO0FBQ2xDLFVBQUksU0FBUztBQUFBLFFBQ1gsV0FBVyxDQUFDO0FBQUEsUUFDWixRQUFRLENBQUM7QUFBQSxNQUNYO0FBQ0Esc0JBQWdCLFFBQVEsU0FBVUMsU0FBUTtBQUN4QyxZQUFJQSxRQUFPLE1BQU0sWUFBWSxFQUFFLFdBQVcscUJBQXFCLEdBQUc7QUFDaEUsaUJBQU8sVUFBVSxLQUFLQSxPQUFNO0FBQUEsUUFDOUIsT0FBTztBQUNMLGlCQUFPLE9BQU8sS0FBS0EsT0FBTTtBQUFBLFFBQzNCO0FBQUEsTUFDRixDQUFDO0FBQ0QsYUFBTyxDQUFDLEVBQUUsT0FBT1Ysb0JBQW1CLE9BQU8sU0FBUyxHQUFHQSxvQkFBbUIsT0FBTyxNQUFNLENBQUM7QUFBQSxJQUMxRjtBQUVBLFdBQU87QUFBQSxFQUNUOzs7QUNsRUEsTUFBQVcsa0JBQWlDO0FBQ2pDLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7QUFDdkIsb0NBQTBCOzs7QUNIMUIsTUFBQUMsa0JBQWlDO0FBQ2pDLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7QUF6Q3ZCLFdBQVNDLFVBQVEsS0FBSztBQUFFO0FBQTJCLFFBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxPQUFPLGFBQWEsVUFBVTtBQUFFLE1BQUFBLFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU8sT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRyxPQUFPO0FBQUUsTUFBQUQsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBT0EsUUFBTyxPQUFPLFdBQVcsY0FBY0EsS0FBSSxnQkFBZ0IsVUFBVUEsU0FBUSxPQUFPLFlBQVksV0FBVyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHO0FBQUUsV0FBT0QsVUFBUSxHQUFHO0FBQUEsRUFBRztBQUV6WCxNQUFJRSxlQUFZLENBQUMsZUFBZSxZQUFZLGFBQWEsU0FBUyxXQUFXLG9CQUFvQixXQUFXLFFBQVE7QUFFcEgsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFbFQsV0FBU0Msa0JBQWdCLFVBQVUsYUFBYTtBQUFFLFFBQUksRUFBRSxvQkFBb0IsY0FBYztBQUFFLFlBQU0sSUFBSSxVQUFVLG1DQUFtQztBQUFBLElBQUc7QUFBQSxFQUFFO0FBRXhKLFdBQVNDLG9CQUFrQixRQUFRLE9BQU87QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUUsVUFBSSxhQUFhLE1BQU0sQ0FBQztBQUFHLGlCQUFXLGFBQWEsV0FBVyxjQUFjO0FBQU8saUJBQVcsZUFBZTtBQUFNLFVBQUksV0FBVztBQUFZLG1CQUFXLFdBQVc7QUFBTSxhQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUssVUFBVTtBQUFBLElBQUc7QUFBQSxFQUFFO0FBRTVULFdBQVNDLGVBQWEsYUFBYSxZQUFZLGFBQWE7QUFBRSxRQUFJO0FBQVksTUFBQUQsb0JBQWtCLFlBQVksV0FBVyxVQUFVO0FBQUcsUUFBSTtBQUFhLE1BQUFBLG9CQUFrQixhQUFhLFdBQVc7QUFBRyxXQUFPO0FBQUEsRUFBYTtBQUV0TixXQUFTRSxZQUFVLFVBQVUsWUFBWTtBQUFFLFFBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQUUsWUFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsSUFBRztBQUFFLGFBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRSxDQUFDO0FBQUcsUUFBSTtBQUFZLE1BQUFDLGtCQUFnQixVQUFVLFVBQVU7QUFBQSxFQUFHO0FBRWhZLFdBQVNBLGtCQUFnQixHQUFHLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxrQkFBa0IsU0FBU0Esa0JBQWdCQyxJQUFHQyxJQUFHO0FBQUUsTUFBQUQsR0FBRSxZQUFZQztBQUFHLGFBQU9EO0FBQUEsSUFBRztBQUFHLFdBQU9ELGtCQUFnQixHQUFHLENBQUM7QUFBQSxFQUFHO0FBRXpLLFdBQVNHLGVBQWEsU0FBUztBQUFFLFFBQUksNEJBQTRCQyw0QkFBMEI7QUFBRyxXQUFPLFNBQVMsdUJBQXVCO0FBQUUsVUFBSSxRQUFRQyxrQkFBZ0IsT0FBTyxHQUFHO0FBQVEsVUFBSSwyQkFBMkI7QUFBRSxZQUFJLFlBQVlBLGtCQUFnQixJQUFJLEVBQUU7QUFBYSxpQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUFHLE9BQU87QUFBRSxpQkFBUyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFFLGFBQU9DLDZCQUEyQixNQUFNLE1BQU07QUFBQSxJQUFHO0FBQUEsRUFBRztBQUV4YSxXQUFTQSw2QkFBMkJDLE9BQU0sTUFBTTtBQUFFLFFBQUksU0FBU2pCLFVBQVEsSUFBSSxNQUFNLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFBRSxhQUFPO0FBQUEsSUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLElBQUc7QUFBRSxXQUFPa0IseUJBQXVCRCxLQUFJO0FBQUEsRUFBRztBQUUvUixXQUFTQyx5QkFBdUJELE9BQU07QUFBRSxRQUFJQSxVQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksZUFBZSwyREFBMkQ7QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXJLLFdBQVNILDhCQUE0QjtBQUFFLFFBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsYUFBTztBQUFPLFFBQUksUUFBUSxVQUFVO0FBQU0sYUFBTztBQUFPLFFBQUksT0FBTyxVQUFVO0FBQVksYUFBTztBQUFNLFFBQUk7QUFBRSxjQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLENBQUMsR0FBRyxXQUFZO0FBQUEsTUFBQyxDQUFDLENBQUM7QUFBRyxhQUFPO0FBQUEsSUFBTSxTQUFTLEdBQUc7QUFBRSxhQUFPO0FBQUEsSUFBTztBQUFBLEVBQUU7QUFFeFUsV0FBU0Msa0JBQWdCLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsU0FBU0Esa0JBQWdCSixJQUFHO0FBQUUsYUFBT0EsR0FBRSxhQUFhLE9BQU8sZUFBZUEsRUFBQztBQUFBLElBQUc7QUFBRyxXQUFPSSxrQkFBZ0IsQ0FBQztBQUFBLEVBQUc7QUFFNU0sV0FBU0ksa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUFlek0sTUFBSSxrQkFBK0IseUJBQVUsWUFBWTtBQUM5RCxJQUFBVixZQUFVVyxrQkFBaUIsVUFBVTtBQUVyQyxRQUFJLFNBQVNQLGVBQWFPLGdCQUFlO0FBRXpDLGFBQVNBLG1CQUFrQjtBQUN6QixVQUFJO0FBRUosTUFBQWQsa0JBQWdCLE1BQU1jLGdCQUFlO0FBRXJDLGVBQVMsT0FBTyxVQUFVLFFBQVEsT0FBTyxJQUFJLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUTtBQUN2RixhQUFLLElBQUksSUFBSSxVQUFVLElBQUk7QUFBQSxNQUM3QjtBQUVBLGNBQVEsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQztBQUVyRCxNQUFBRCxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsc0JBQXNCLFdBQVk7QUFDL0UsWUFBSSxjQUFjLE1BQU0sT0FDcEIsVUFBVSxZQUFZLFNBQ3RCLFNBQVMsWUFBWTtBQUV6QixZQUFJLFNBQVM7QUFDWCxrQkFBUSxNQUFNO0FBQUEsUUFDaEI7QUFBQSxNQUNGLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFWLGVBQWFZLGtCQUFpQixDQUFDO0FBQUEsTUFDN0IsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTQyxVQUFTO0FBQ3ZCLFlBQUksU0FBUztBQUViLFlBQUksZUFBZSxLQUFLLE9BQ3BCLGNBQWMsYUFBYSxhQUMzQixXQUFXLGFBQWEsVUFDeEIsWUFBWSxhQUFhLFdBQ3pCLFFBQVEsYUFBYSxPQUNyQixVQUFVLGFBQWEsU0FDdkIsbUJBQW1CLGFBQWEsa0JBQ2hDLFVBQVUsYUFBYSxTQUN2QixTQUFTLGFBQWEsUUFDdEIsT0FBT2pCLDRCQUF5QixjQUFjRixZQUFTO0FBRTNELFlBQUksY0FBVSxvQkFBQW9CLFNBQVcsbUJBQW1CO0FBQUEsVUFDMUMsOEJBQThCO0FBQUEsUUFDaEMsR0FBRyxTQUFTO0FBQ1osWUFBSSxlQUFlLFdBQVcsbUJBQW1CO0FBQUEsVUFDL0M7QUFBQSxVQUNBO0FBQUEsUUFDRixJQUFJLENBQUM7QUFFTCxZQUFJLFNBQVM7QUFDWCxpQkFBTyxJQUFjLFNBQVM7QUFBQSxZQUM1QixPQUFPO0FBQUEsWUFDUCxTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsY0FDTjtBQUFBLFlBQ0Y7QUFBQSxVQUNGLEdBQUcsU0FBVSxpQkFBaUI7QUFDNUIsbUJBQU8sSUFBYyxVQUFVbkIsWUFBUztBQUFBLGNBQ3RDLFdBQVc7QUFBQSxjQUNYO0FBQUEsY0FDQSxhQUFhLE9BQU87QUFBQSxjQUNwQixzQkFBc0I7QUFBQSxjQUN0QixVQUFVO0FBQUEsY0FDVixVQUFVO0FBQUEsY0FDVixPQUFPO0FBQUEsWUFDVCxHQUFHLGNBQWMsSUFBSSxHQUFHLFFBQVE7QUFBQSxVQUNsQyxDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUksYUFBYTtBQUNmLGlCQUFPLElBQWMsUUFBUUEsWUFBUztBQUFBLFlBQ3BDLFdBQVc7QUFBQSxVQUNiLEdBQUcsSUFBSSxHQUFHLFFBQVE7QUFBQSxRQUNwQjtBQUVBLGVBQU8sSUFBYyxVQUFVQSxZQUFTO0FBQUEsVUFDdEMsV0FBVztBQUFBLFVBQ1g7QUFBQSxVQUNBLE9BQU87QUFBQSxRQUNULEdBQUcsTUFBTSxZQUFZLEdBQUcsUUFBUTtBQUFBLE1BQ2xDO0FBQUEsSUFDRixDQUFDLENBQUM7QUFFRixXQUFPaUI7QUFBQSxFQUNULEVBQUUseUJBQVM7QUFFWCxFQUFBRCxrQkFBZ0IsaUJBQWlCLGdCQUFnQjtBQUFBLElBQy9DLE9BQU87QUFBQSxFQUNULENBQUM7QUFFRCxrQkFBZ0IsWUFBWTtBQUFBLElBQzFCLGFBQWEsb0JBQUFJLFFBQVU7QUFBQSxJQUN2QixVQUFVLG9CQUFBQSxRQUFVO0FBQUEsSUFDcEIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLE9BQU8sb0JBQUFBLFFBQVU7QUFBQSxJQUNqQixTQUFTLG9CQUFBQSxRQUFVO0FBQUEsSUFDbkIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDNUIsU0FBUyxvQkFBQUEsUUFBVTtBQUFBLElBQ25CLFFBQVEsb0JBQUFBLFFBQVUsTUFBTTtBQUFBLE1BQ3RCLG9CQUFvQixvQkFBQUEsUUFBVTtBQUFBLE1BQzlCLE9BQU8sb0JBQUFBLFFBQVUsT0FBTztBQUFBLE1BQ3hCLEtBQUssb0JBQUFBLFFBQVU7QUFBQSxNQUNmLFNBQVMsb0JBQUFBLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxNQUFNO0FBQUEsUUFDekMsb0JBQW9CLG9CQUFBQSxRQUFVO0FBQUEsUUFDOUIsT0FBTyxvQkFBQUEsUUFBVSxPQUFPO0FBQUEsUUFDeEIsS0FBSyxvQkFBQUEsUUFBVTtBQUFBLFFBQ2YsU0FBUyxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLElBQUksVUFBVTtBQUFBLFFBQ25ELE9BQU8sb0JBQUFBLFFBQVU7QUFBQSxRQUNqQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsUUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLFFBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLE1BQzlCLENBQUMsRUFBRSxVQUFVO0FBQUEsTUFDYixPQUFPLG9CQUFBQSxRQUFVO0FBQUEsTUFDakIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxNQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM5QixDQUFDLEVBQUU7QUFBQSxJQUNILGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxFQUM5Qjs7O0FEeEtBLE1BQUlDLGVBQVksQ0FBQyxPQUFPLFNBQVMsU0FBUyxTQUFTO0FBRW5ELFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBRWxULFdBQVNDLFVBQVEsS0FBSztBQUFFO0FBQTJCLFFBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxPQUFPLGFBQWEsVUFBVTtBQUFFLE1BQUFBLFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU8sT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRyxPQUFPO0FBQUUsTUFBQUQsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBT0EsUUFBTyxPQUFPLFdBQVcsY0FBY0EsS0FBSSxnQkFBZ0IsVUFBVUEsU0FBUSxPQUFPLFlBQVksV0FBVyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHO0FBQUUsV0FBT0QsVUFBUSxHQUFHO0FBQUEsRUFBRztBQUV6WCxXQUFTRSxrQkFBZ0IsVUFBVSxhQUFhO0FBQUUsUUFBSSxFQUFFLG9CQUFvQixjQUFjO0FBQUUsWUFBTSxJQUFJLFVBQVUsbUNBQW1DO0FBQUEsSUFBRztBQUFBLEVBQUU7QUFFeEosV0FBU0Msb0JBQWtCLFFBQVEsT0FBTztBQUFFLGFBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFBRSxVQUFJLGFBQWEsTUFBTSxDQUFDO0FBQUcsaUJBQVcsYUFBYSxXQUFXLGNBQWM7QUFBTyxpQkFBVyxlQUFlO0FBQU0sVUFBSSxXQUFXO0FBQVksbUJBQVcsV0FBVztBQUFNLGFBQU8sZUFBZSxRQUFRLFdBQVcsS0FBSyxVQUFVO0FBQUEsSUFBRztBQUFBLEVBQUU7QUFFNVQsV0FBU0MsZUFBYSxhQUFhLFlBQVksYUFBYTtBQUFFLFFBQUk7QUFBWSxNQUFBRCxvQkFBa0IsWUFBWSxXQUFXLFVBQVU7QUFBRyxRQUFJO0FBQWEsTUFBQUEsb0JBQWtCLGFBQWEsV0FBVztBQUFHLFdBQU87QUFBQSxFQUFhO0FBRXROLFdBQVNFLFlBQVUsVUFBVSxZQUFZO0FBQUUsUUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFBRSxZQUFNLElBQUksVUFBVSxvREFBb0Q7QUFBQSxJQUFHO0FBQUUsYUFBUyxZQUFZLE9BQU8sT0FBTyxjQUFjLFdBQVcsV0FBVyxFQUFFLGFBQWEsRUFBRSxPQUFPLFVBQVUsVUFBVSxNQUFNLGNBQWMsS0FBSyxFQUFFLENBQUM7QUFBRyxRQUFJO0FBQVksTUFBQUMsa0JBQWdCLFVBQVUsVUFBVTtBQUFBLEVBQUc7QUFFaFksV0FBU0Esa0JBQWdCLEdBQUcsR0FBRztBQUFFLElBQUFBLG9CQUFrQixPQUFPLGtCQUFrQixTQUFTQSxrQkFBZ0JDLElBQUdDLElBQUc7QUFBRSxNQUFBRCxHQUFFLFlBQVlDO0FBQUcsYUFBT0Q7QUFBQSxJQUFHO0FBQUcsV0FBT0Qsa0JBQWdCLEdBQUcsQ0FBQztBQUFBLEVBQUc7QUFFekssV0FBU0csZUFBYSxTQUFTO0FBQUUsUUFBSSw0QkFBNEJDLDRCQUEwQjtBQUFHLFdBQU8sU0FBUyx1QkFBdUI7QUFBRSxVQUFJLFFBQVFDLGtCQUFnQixPQUFPLEdBQUc7QUFBUSxVQUFJLDJCQUEyQjtBQUFFLFlBQUksWUFBWUEsa0JBQWdCLElBQUksRUFBRTtBQUFhLGlCQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVcsU0FBUztBQUFBLE1BQUcsT0FBTztBQUFFLGlCQUFTLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUFHO0FBQUUsYUFBT0MsNkJBQTJCLE1BQU0sTUFBTTtBQUFBLElBQUc7QUFBQSxFQUFHO0FBRXhhLFdBQVNBLDZCQUEyQkMsT0FBTSxNQUFNO0FBQUUsUUFBSSxTQUFTYixVQUFRLElBQUksTUFBTSxZQUFZLE9BQU8sU0FBUyxhQUFhO0FBQUUsYUFBTztBQUFBLElBQU0sV0FBVyxTQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksVUFBVSwwREFBMEQ7QUFBQSxJQUFHO0FBQUUsV0FBT2MseUJBQXVCRCxLQUFJO0FBQUEsRUFBRztBQUUvUixXQUFTQyx5QkFBdUJELE9BQU07QUFBRSxRQUFJQSxVQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksZUFBZSwyREFBMkQ7QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXJLLFdBQVNILDhCQUE0QjtBQUFFLFFBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsYUFBTztBQUFPLFFBQUksUUFBUSxVQUFVO0FBQU0sYUFBTztBQUFPLFFBQUksT0FBTyxVQUFVO0FBQVksYUFBTztBQUFNLFFBQUk7QUFBRSxjQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLENBQUMsR0FBRyxXQUFZO0FBQUEsTUFBQyxDQUFDLENBQUM7QUFBRyxhQUFPO0FBQUEsSUFBTSxTQUFTLEdBQUc7QUFBRSxhQUFPO0FBQUEsSUFBTztBQUFBLEVBQUU7QUFFeFUsV0FBU0Msa0JBQWdCLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsU0FBU0Esa0JBQWdCSixJQUFHO0FBQUUsYUFBT0EsR0FBRSxhQUFhLE9BQU8sZUFBZUEsRUFBQztBQUFBLElBQUc7QUFBRyxXQUFPSSxrQkFBZ0IsQ0FBQztBQUFBLEVBQUc7QUFFNU0sV0FBU0ksa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUFpQnpNLE1BQUksbUJBQWdDLHlCQUFVLFlBQVk7QUFDL0QsSUFBQVYsWUFBVVcsbUJBQWtCLFVBQVU7QUFFdEMsUUFBSSxTQUFTUCxlQUFhTyxpQkFBZ0I7QUFFMUMsYUFBU0Esb0JBQW1CO0FBQzFCLFVBQUk7QUFFSixNQUFBZCxrQkFBZ0IsTUFBTWMsaUJBQWdCO0FBRXRDLGVBQVMsT0FBTyxVQUFVLFFBQVEsT0FBTyxJQUFJLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUTtBQUN2RixhQUFLLElBQUksSUFBSSxVQUFVLElBQUk7QUFBQSxNQUM3QjtBQUVBLGNBQVEsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQztBQUVyRCxNQUFBRCxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsU0FBUztBQUFBLFFBQ3RELFVBQVU7QUFBQSxNQUNaLENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsa0JBQWtCLFdBQVk7QUFFM0UsOEJBQXNCLFdBQVk7QUFDaEMsZ0JBQU0sTUFBTSxlQUFlO0FBQUEsUUFDN0IsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxXQUFXLFNBQVUsT0FBTztBQUN6RSxjQUFNLE1BQU0sUUFBUSxLQUFLO0FBRXpCLGNBQU0sU0FBUztBQUFBLFVBQ2IsVUFBVTtBQUFBLFFBQ1osQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxVQUFVLFNBQVUsT0FBTztBQUN4RSxZQUFJLE1BQU0sTUFBTSxRQUFRO0FBQ3RCLGdCQUFNLE1BQU0sT0FBTyxLQUFLO0FBQUEsUUFDMUI7QUFFQSxjQUFNLFNBQVM7QUFBQSxVQUNiLFVBQVU7QUFBQSxRQUNaLENBQUM7QUFBQSxNQUNILENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsaUJBQWlCLFNBQVUsT0FBTztBQUMvRSxZQUFJLGNBQWMsTUFBTSxPQUNwQixXQUFXLFlBQVksVUFDdkIsY0FBYyxZQUFZO0FBRTlCLFlBQUksVUFBVTtBQUNaLG1CQUFTLE1BQU0sT0FBTyxLQUFLO0FBQUEsUUFDN0I7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsb0JBQW9CLFNBQVUsS0FBSztBQUNoRixZQUFJLG1CQUFtQixNQUFNLE1BQU07QUFFbkMsWUFBSSxrQkFBa0I7QUFDcEIsMkJBQWlCLEdBQUc7QUFBQSxRQUN0QjtBQUFBLE1BQ0YsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNUO0FBRUEsSUFBQVYsZUFBYVksbUJBQWtCLENBQUM7QUFBQSxNQUM5QixLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsbUJBQW1CLFdBQVc7QUFDNUMsWUFBSSxjQUFjLFVBQVU7QUFHNUIsWUFBSSxnQkFBZ0IsS0FBSyxNQUFNLGFBQWE7QUFDMUMsZUFBSyxlQUFlO0FBQUEsUUFDdEI7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVNDLFVBQVM7QUFDdkIsWUFBSSxlQUFlLEtBQUssT0FDcEIsYUFBYSxhQUFhLFlBQzFCLGtCQUFrQixhQUFhLGlCQUMvQixZQUFZLGFBQWEsV0FDekIscUJBQXFCLGFBQWEsb0JBQ2xDLEtBQUssYUFBYSxJQUNsQixXQUFXLGFBQWEsVUFDeEIsYUFBYSxhQUFhLFlBQzFCLGFBQWEsYUFBYSxZQUMxQixTQUFTLGFBQWEsUUFDdEIsVUFBVSxhQUFhLFNBQ3ZCLFVBQVUsYUFBYSxTQUN2QixtQkFBbUIsYUFBYSxrQkFDaEMsa0JBQWtCLGFBQWEsaUJBQy9CLGlCQUFpQixhQUFhLGdCQUM5QixjQUFjLGFBQWEsYUFDM0IsU0FBUyxhQUFhLFFBQ3RCLGNBQWMsYUFBYSxhQUMzQixrQkFBa0IsYUFBYSxpQkFDL0Isc0JBQXNCLGFBQWEsaUJBQ25DLGtCQUFrQixhQUFhLGlCQUMvQixRQUFRLGFBQWEsT0FDckIsVUFBVSxhQUFhLFNBQ3ZCQyxVQUFTLGFBQWEsUUFDdEIsWUFBWSxhQUFhLFdBQ3pCLFlBQVksYUFBYSxXQUN6QixZQUFZLGFBQWEsWUFBWSxHQUNyQyxpQkFBaUIsYUFBYSxpQkFBaUI7QUFDbkQsWUFBSSxrQkFBa0IsUUFBUSxtQkFBbUI7QUFDakQsWUFBSSxjQUFjLHVCQUF1QmxCLFVBQVEsbUJBQW1CLE1BQU0sWUFBWSxvQkFBb0IsZUFBZTtBQUN6SCxZQUFJLFFBQVEsa0JBQWtCLGdCQUFnQixJQUFJLFNBQVUsUUFBUTtBQUNsRSxjQUFJLE1BQU0sT0FBTyxLQUNiLFFBQVEsT0FBTyxPQUNmLFFBQVEsT0FBTyxPQUNmbUIsV0FBVSxPQUFPLFNBQ2pCLE9BQU9yQiw0QkFBeUIsUUFBUUYsWUFBUztBQUVyRCxjQUFJLGNBQWMsY0FBYyxtQkFBbUJ1QixXQUFVLFNBQVk7QUFDekUsaUJBQU8sSUFBYyxpQkFBaUJ0QixZQUFTO0FBQUEsWUFDN0M7QUFBQSxZQUNBLFNBQVM7QUFBQSxZQUNULEtBQUssUUFBUSxRQUFRLFFBQVEsU0FBUyxNQUFNLE1BQU0sWUFBWTtBQUFBLFlBQzlEO0FBQUEsWUFDQSxTQUFTc0I7QUFBQSxZQUNULGtCQUFrQkEsV0FBVSxXQUFXO0FBQUEsWUFDdkM7QUFBQSxVQUNGLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFBQSxRQUNqQixDQUFDLElBQUk7QUFDTCxZQUFJO0FBQ0osWUFBSTtBQUVKLFlBQUksS0FBSyxNQUFNLFVBQVU7QUFDdkIsY0FBSSxrQkFBa0IsY0FBYyxHQUFHLE9BQU8sYUFBYSxHQUFHLElBQUk7QUFDbEUsY0FBSSw2QkFBNkIsd0JBQXdCLE9BQU8sY0FBYyxHQUFHLE9BQU8sYUFBYSxjQUFjLElBQUksRUFBRSxFQUFFLE9BQU8sbUJBQW1CLGdCQUFnQixTQUFTLElBQUksR0FBRyxPQUFPLE9BQU8sOEJBQThCLEVBQUUsT0FBTyxnQkFBZ0IsZ0JBQWdCLFNBQVMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxJQUFJLElBQUksbUJBQW1CLEVBQUUsT0FBTyxpQkFBaUIsc0VBQXNFLElBQUk7QUFDaGEsa0NBQXdCLE9BQU8scUJBQXFCO0FBS3BELGdDQUFzQixJQUFjLHFCQUFxQixNQUFNLElBQWMsUUFBUTtBQUFBLFlBQ25GLGFBQWE7QUFBQSxZQUNiLElBQUk7QUFBQSxVQUNOLEdBQUcsMEJBQTBCLENBQUM7QUFBQSxRQUNoQztBQUVBLFlBQUk7QUFFSixZQUFJLGVBQWUsbUJBQW1CLENBQUMsZ0JBQWdCLFVBQVUsQ0FBQyxhQUFhO0FBQzdFLCtCQUFxQixJQUFjLEtBQUs7QUFBQSxZQUN0QyxXQUFXO0FBQUEsVUFDYixHQUFHLFdBQVc7QUFBQSxRQUNoQjtBQUVBLFlBQUksYUFBYSxDQUFDO0FBRWxCLFlBQUksQ0FBQyxjQUFjLFdBQVcsb0JBQW9CO0FBQ2hELHFCQUFXLFFBQVE7QUFBQSxZQUNqQixrQkFBa0I7QUFBQSxZQUNsQixTQUFTO0FBQUEsVUFDWDtBQUFBLFFBQ0Y7QUFFQSxZQUFJQztBQUVKLFlBQUksQ0FBQyxRQUFRO0FBQ1gsVUFBQUEsVUFBTztBQUFBLFlBQ0wsY0FBYyxhQUFhLDBCQUEwQjtBQUFBLFlBQ3JELGtCQUFrQjtBQUFBLFlBQ2xCLFVBQVU7QUFBQSxZQUNWLFNBQVMsY0FBYyxDQUFDLGFBQWEsbUJBQW1CO0FBQUEsWUFDeEQsS0FBSztBQUFBLFlBQ0wsTUFBTTtBQUFBLFlBQ04sVUFBVTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFVBQ1I7QUFBQSxRQUNGO0FBRUEsWUFBSSxrQkFBYyxvQkFBQUMsU0FBVywwQkFBMEI7QUFBQSxVQUNyRCxzQ0FBc0M7QUFBQSxVQUN0QyxxQ0FBcUM7QUFBQSxVQUNyQyxrQ0FBa0M7QUFBQSxVQUNsQyxvQ0FBb0M7QUFBQSxVQUNwQyxzQ0FBc0M7QUFBQSxVQUN0QyxtQ0FBbUMsV0FBV0g7QUFBQSxRQUNoRCxDQUFDO0FBQ0QsZUFBTyxJQUFjLHNCQUFzQnJCLFlBQVM7QUFBQSxVQUNsRCxNQUFNdUI7QUFBQSxRQUNSLEdBQUcsWUFBWTtBQUFBLFVBQ2IsU0FBUztBQUFBLFVBQ1Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLFFBQVFGO0FBQUEsUUFDVixDQUFDLEdBQUcsSUFBYyxPQUFPO0FBQUEsVUFDdkIsV0FBVztBQUFBLFVBQ1gsa0JBQWtCO0FBQUEsVUFDbEI7QUFBQSxVQUNBLFVBQVU7QUFBQTtBQUFBLFFBRVosR0FBRyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsUUFBUSxNQUFNLG9CQUFvQixJQUFjLDRCQUFBSSxTQUFlO0FBQUEsVUFDbkcseUJBQXlCO0FBQUEsVUFDekIscUJBQXFCO0FBQUEsVUFDckIsaUJBQWlCLGFBQWEsT0FBTyxTQUFTLElBQUk7QUFBQSxVQUNsRCxpQkFBaUI7QUFBQSxVQUNqQixjQUFjO0FBQUEsVUFDZCxtQkFBbUI7QUFBQSxVQUNuQixXQUFXO0FBQUEsVUFDWCxrQkFBa0I7QUFBQSxVQUNsQixVQUFVO0FBQUEsVUFDVjtBQUFBLFVBQ0E7QUFBQSxVQUNBLFFBQVEsS0FBSztBQUFBLFVBQ2IsVUFBVSxLQUFLO0FBQUEsVUFDZixTQUFTLEtBQUs7QUFBQSxVQUNkLEtBQUssS0FBSztBQUFBLFVBQ1YsTUFBTTtBQUFBLFVBQ04sT0FBTztBQUFBLFlBQ0wsVUFBVTtBQUFBLFVBQ1o7QUFBQSxVQUNBLE9BQU87QUFBQSxVQUNQO0FBQUEsUUFDRixDQUFDLEdBQUcsbUJBQW1CLENBQUM7QUFBQSxNQUMxQjtBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBRUYsV0FBT047QUFBQSxFQUNULEVBQUUseUJBQVM7QUFDWCxtQkFBaUIsWUFBWTtBQUFBLElBQzNCLGtCQUFrQixvQkFBQU8sUUFBVTtBQUFBLElBQzVCLFlBQVksb0JBQUFBLFFBQVUsS0FBSztBQUFBLElBQzNCLGlCQUFpQixvQkFBQUEsUUFBVTtBQUFBLElBQzNCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixvQkFBb0Isb0JBQUFBLFFBQVUsS0FBSztBQUFBLElBQ25DLElBQUksb0JBQUFBLFFBQVU7QUFBQSxJQUNkLFVBQVUsb0JBQUFBLFFBQVU7QUFBQSxJQUNwQixZQUFZLG9CQUFBQSxRQUFVO0FBQUEsSUFDdEIsWUFBWSxvQkFBQUEsUUFBVSxLQUFLO0FBQUEsSUFDM0IsUUFBUSxvQkFBQUEsUUFBVSxLQUFLO0FBQUEsSUFDdkIsUUFBUSxvQkFBQUEsUUFBVTtBQUFBLElBQ2xCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQSxJQUNwQixTQUFTLG9CQUFBQSxRQUFVO0FBQUEsSUFDbkIsU0FBUyxvQkFBQUEsUUFBVTtBQUFBLElBQ25CLGtCQUFrQixvQkFBQUEsUUFBVSxLQUFLO0FBQUEsSUFDakMsU0FBUyxvQkFBQUEsUUFBVSxJQUFJO0FBQUEsSUFDdkIsaUJBQWlCLG9CQUFBQSxRQUFVLEtBQUs7QUFBQSxJQUNoQyxnQkFBZ0Isb0JBQUFBLFFBQVU7QUFBQSxJQUMxQixhQUFhLG9CQUFBQSxRQUFVO0FBQUEsSUFDdkIsUUFBUSxvQkFBQUEsUUFBVSxJQUFJO0FBQUEsSUFDdEIsYUFBYSxvQkFBQUEsUUFBVSxPQUFPO0FBQUEsSUFDOUIsaUJBQWlCLG9CQUFBQSxRQUFVLFFBQVEsb0JBQUFBLFFBQVUsTUFBTTtBQUFBLE1BQ2pELG9CQUFvQixvQkFBQUEsUUFBVTtBQUFBLE1BQzlCLE9BQU8sb0JBQUFBLFFBQVUsT0FBTztBQUFBLE1BQ3hCLEtBQUssb0JBQUFBLFFBQVU7QUFBQSxNQUNmLFNBQVMsb0JBQUFBLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxNQUFNO0FBQUEsUUFDekMsb0JBQW9CLG9CQUFBQSxRQUFVO0FBQUEsUUFDOUIsT0FBTyxvQkFBQUEsUUFBVSxPQUFPO0FBQUEsUUFDeEIsS0FBSyxvQkFBQUEsUUFBVTtBQUFBLFFBQ2YsU0FBUyxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLElBQUksVUFBVTtBQUFBLFFBQ25ELE9BQU8sb0JBQUFBLFFBQVU7QUFBQSxRQUNqQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsUUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLFFBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLE1BQzlCLENBQUMsRUFBRSxVQUFVO0FBQUEsTUFDYixPQUFPLG9CQUFBQSxRQUFVO0FBQUEsTUFDakIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxNQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM5QixDQUFDLEVBQUUsVUFBVTtBQUFBLElBQ2IsaUJBQWlCLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxLQUFLLFlBQVksb0JBQUFBLFFBQVUsTUFBTTtBQUFBLE1BQy9FLGFBQWEsb0JBQUFBLFFBQVU7QUFBQSxJQUN6QixDQUFDLEVBQUUsVUFBVSxDQUFDO0FBQUEsSUFDZCxpQkFBaUIsb0JBQUFBLFFBQVU7QUFBQSxJQUMzQixnQkFBZ0Isb0JBQUFBLFFBQVUsS0FBSztBQUFBLElBQy9CLE9BQU8sb0JBQUFBLFFBQVU7QUFBQSxJQUNqQixTQUFTLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsT0FBTyxZQUFZLG9CQUFBQSxRQUFVLFFBQVEsVUFBVSxDQUFDLEVBQUUsWUFBWSxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsUUFBUSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO0FBQUEsSUFDclAsUUFBUSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxRQUFRLFVBQVUsQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsT0FBTyxZQUFZLG9CQUFBQSxRQUFVLFFBQVEsVUFBVSxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztBQUFBLElBQ3BQLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLG1CQUFtQixvQkFBQUEsUUFBVTtBQUFBLElBQzdCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxFQUM5Qjs7O0FSelVBLFdBQVNDLFVBQVEsS0FBSztBQUFFO0FBQTJCLFFBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxPQUFPLGFBQWEsVUFBVTtBQUFFLE1BQUFBLFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU8sT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRyxPQUFPO0FBQUUsTUFBQUQsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBT0EsUUFBTyxPQUFPLFdBQVcsY0FBY0EsS0FBSSxnQkFBZ0IsVUFBVUEsU0FBUSxPQUFPLFlBQVksV0FBVyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHO0FBQUUsV0FBT0QsVUFBUSxHQUFHO0FBQUEsRUFBRztBQUV6WCxNQUFJRSxlQUFZLENBQUMsa0JBQWtCLFNBQVMsYUFBYSxjQUFjLG9CQUFvQixhQUFhLE1BQU0sWUFBWSxlQUFlLGNBQWMsYUFBYSxhQUFhLGlCQUFpQixVQUFVLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGVBQWUsZ0JBQWdCLGFBQWEsbUJBQW1CLG1CQUFtQixXQUFXLGlCQUFpQixhQUFhLFVBQVUsYUFBYSxjQUFjLGlCQUFpQjtBQUV4YixXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUVsVCxXQUFTQyxVQUFRQyxTQUFRLGdCQUFnQjtBQUFFLFFBQUlDLFFBQU8sT0FBTyxLQUFLRCxPQUFNO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksVUFBVSxPQUFPLHNCQUFzQkEsT0FBTTtBQUFHLFVBQUksZ0JBQWdCO0FBQUUsa0JBQVUsUUFBUSxPQUFPLFNBQVUsS0FBSztBQUFFLGlCQUFPLE9BQU8seUJBQXlCQSxTQUFRLEdBQUcsRUFBRTtBQUFBLFFBQVksQ0FBQztBQUFBLE1BQUc7QUFBRSxNQUFBQyxNQUFLLEtBQUssTUFBTUEsT0FBTSxPQUFPO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUV4VixXQUFTQyxnQkFBYyxRQUFRO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFVBQUksU0FBUyxVQUFVLENBQUMsS0FBSyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFBRyxVQUFJLElBQUksR0FBRztBQUFFLFFBQUFILFVBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsVUFBQUksa0JBQWdCLFFBQVEsS0FBSyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUcsV0FBVyxPQUFPLDJCQUEyQjtBQUFFLGVBQU8saUJBQWlCLFFBQVEsT0FBTywwQkFBMEIsTUFBTSxDQUFDO0FBQUEsTUFBRyxPQUFPO0FBQUUsUUFBQUosVUFBUSxPQUFPLE1BQU0sQ0FBQyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsaUJBQU8sZUFBZSxRQUFRLEtBQUssT0FBTyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRXJoQixXQUFTSyxrQkFBZ0IsVUFBVSxhQUFhO0FBQUUsUUFBSSxFQUFFLG9CQUFvQixjQUFjO0FBQUUsWUFBTSxJQUFJLFVBQVUsbUNBQW1DO0FBQUEsSUFBRztBQUFBLEVBQUU7QUFFeEosV0FBU0Msb0JBQWtCLFFBQVEsT0FBTztBQUFFLGFBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFBRSxVQUFJLGFBQWEsTUFBTSxDQUFDO0FBQUcsaUJBQVcsYUFBYSxXQUFXLGNBQWM7QUFBTyxpQkFBVyxlQUFlO0FBQU0sVUFBSSxXQUFXO0FBQVksbUJBQVcsV0FBVztBQUFNLGFBQU8sZUFBZSxRQUFRLFdBQVcsS0FBSyxVQUFVO0FBQUEsSUFBRztBQUFBLEVBQUU7QUFFNVQsV0FBU0MsZUFBYSxhQUFhLFlBQVksYUFBYTtBQUFFLFFBQUk7QUFBWSxNQUFBRCxvQkFBa0IsWUFBWSxXQUFXLFVBQVU7QUFBRyxRQUFJO0FBQWEsTUFBQUEsb0JBQWtCLGFBQWEsV0FBVztBQUFHLFdBQU87QUFBQSxFQUFhO0FBRXROLFdBQVNFLFlBQVUsVUFBVSxZQUFZO0FBQUUsUUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFBRSxZQUFNLElBQUksVUFBVSxvREFBb0Q7QUFBQSxJQUFHO0FBQUUsYUFBUyxZQUFZLE9BQU8sT0FBTyxjQUFjLFdBQVcsV0FBVyxFQUFFLGFBQWEsRUFBRSxPQUFPLFVBQVUsVUFBVSxNQUFNLGNBQWMsS0FBSyxFQUFFLENBQUM7QUFBRyxRQUFJO0FBQVksTUFBQUMsa0JBQWdCLFVBQVUsVUFBVTtBQUFBLEVBQUc7QUFFaFksV0FBU0Esa0JBQWdCLEdBQUcsR0FBRztBQUFFLElBQUFBLG9CQUFrQixPQUFPLGtCQUFrQixTQUFTQSxrQkFBZ0JDLElBQUdDLElBQUc7QUFBRSxNQUFBRCxHQUFFLFlBQVlDO0FBQUcsYUFBT0Q7QUFBQSxJQUFHO0FBQUcsV0FBT0Qsa0JBQWdCLEdBQUcsQ0FBQztBQUFBLEVBQUc7QUFFekssV0FBU0csZUFBYSxTQUFTO0FBQUUsUUFBSSw0QkFBNEJDLDRCQUEwQjtBQUFHLFdBQU8sU0FBUyx1QkFBdUI7QUFBRSxVQUFJLFFBQVFDLGtCQUFnQixPQUFPLEdBQUc7QUFBUSxVQUFJLDJCQUEyQjtBQUFFLFlBQUksWUFBWUEsa0JBQWdCLElBQUksRUFBRTtBQUFhLGlCQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVcsU0FBUztBQUFBLE1BQUcsT0FBTztBQUFFLGlCQUFTLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUFHO0FBQUUsYUFBT0MsNkJBQTJCLE1BQU0sTUFBTTtBQUFBLElBQUc7QUFBQSxFQUFHO0FBRXhhLFdBQVNBLDZCQUEyQkMsT0FBTSxNQUFNO0FBQUUsUUFBSSxTQUFTdEIsVUFBUSxJQUFJLE1BQU0sWUFBWSxPQUFPLFNBQVMsYUFBYTtBQUFFLGFBQU87QUFBQSxJQUFNLFdBQVcsU0FBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLFVBQVUsMERBQTBEO0FBQUEsSUFBRztBQUFFLFdBQU91Qix5QkFBdUJELEtBQUk7QUFBQSxFQUFHO0FBRS9SLFdBQVNDLHlCQUF1QkQsT0FBTTtBQUFFLFFBQUlBLFVBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxlQUFlLDJEQUEyRDtBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFckssV0FBU0gsOEJBQTRCO0FBQUUsUUFBSSxPQUFPLFlBQVksZUFBZSxDQUFDLFFBQVE7QUFBVyxhQUFPO0FBQU8sUUFBSSxRQUFRLFVBQVU7QUFBTSxhQUFPO0FBQU8sUUFBSSxPQUFPLFVBQVU7QUFBWSxhQUFPO0FBQU0sUUFBSTtBQUFFLGNBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxVQUFVLFNBQVMsQ0FBQyxHQUFHLFdBQVk7QUFBQSxNQUFDLENBQUMsQ0FBQztBQUFHLGFBQU87QUFBQSxJQUFNLFNBQVMsR0FBRztBQUFFLGFBQU87QUFBQSxJQUFPO0FBQUEsRUFBRTtBQUV4VSxXQUFTQyxrQkFBZ0IsR0FBRztBQUFFLElBQUFBLG9CQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQixTQUFTQSxrQkFBZ0JKLElBQUc7QUFBRSxhQUFPQSxHQUFFLGFBQWEsT0FBTyxlQUFlQSxFQUFDO0FBQUEsSUFBRztBQUFHLFdBQU9JLGtCQUFnQixDQUFDO0FBQUEsRUFBRztBQUU1TSxXQUFTVixrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQXlCaE4sTUFBSSxxQkFBcUI7QUFDbEIsTUFBSSxjQUEyQix5QkFBVSxZQUFZO0FBQzFELElBQUFJLFlBQVVVLGNBQWEsVUFBVTtBQUVqQyxRQUFJLFNBQVNOLGVBQWFNLFlBQVc7QUFFckMsYUFBU0EsZUFBYztBQUNyQixVQUFJO0FBRUosTUFBQWIsa0JBQWdCLE1BQU1hLFlBQVc7QUFFakMsZUFBUyxPQUFPLFVBQVUsUUFBUSxPQUFPLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxRQUFRO0FBQ3ZGLGFBQUssSUFBSSxJQUFJLFVBQVUsSUFBSTtBQUFBLE1BQzdCO0FBRUEsY0FBUSxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBRXJELE1BQUFkLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxTQUFTO0FBQUEsUUFDdEQsbUJBQW1CO0FBQUEsUUFDbkIsVUFBVTtBQUFBLFFBQ1YsWUFBWTtBQUFBLFFBQ1osYUFBYTtBQUFBLFFBQ2IsY0FBYztBQUFBLFFBQ2QsWUFBWTtBQUFBLFFBQ1osaUJBQWlCLG1CQUFtQixNQUFNLE1BQU0sU0FBUyxNQUFNLE1BQU0saUJBQWlCLG9CQUFvQixNQUFNLE1BQU0sT0FBTyxRQUFRLE1BQU0sTUFBTSxlQUFlLEdBQUcsTUFBTSxNQUFNLGFBQWE7QUFBQSxRQUM1TCxhQUFhO0FBQUEsUUFDYixPQUFPO0FBQUEsTUFDVCxDQUFDO0FBRUQsTUFBQWIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLGNBQWMsS0FBSztBQUVsRSxNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsVUFBVSxnQkFBZ0IsQ0FBQztBQUUxRSxNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsdUJBQXVCLElBQUk7QUFFMUUsTUFBQWIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLHVCQUF1QixTQUFVLEtBQUs7QUFHbkYsWUFBSSxNQUFNLHFCQUFxQjtBQUM3QixnQkFBTSxvQkFBb0Isb0JBQW9CLFlBQVksTUFBTSxlQUFlO0FBQUEsUUFDakY7QUFFQSxjQUFNLHNCQUFzQjtBQUU1QixZQUFJLE1BQU0scUJBQXFCO0FBQzdCLGdCQUFNLG9CQUFvQixpQkFBaUIsWUFBWSxNQUFNLGVBQWU7QUFFNUUsY0FBSSxpQkFBaUIsTUFBTSxvQkFBb0Isc0JBQXNCO0FBRXJFLGdCQUFNLFNBQVM7QUFBQSxZQUNiLE9BQU8sZUFBZTtBQUFBLFVBQ3hCLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRixDQUFDO0FBRUQsTUFBQWIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLDRCQUE0QixJQUFJO0FBRS9FLE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyw0QkFBNEIsU0FBVSxLQUFLO0FBQ3hGLGNBQU0sMkJBQTJCO0FBQUEsTUFDbkMsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRywwQkFBMEIsSUFBSTtBQUU3RSxNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsMEJBQTBCLFNBQVUsS0FBSztBQUN0RixjQUFNLHlCQUF5QjtBQUMvQixZQUFJLE1BQU0sTUFBTTtBQUFVLGdCQUFNLE1BQU0sU0FBUyxHQUFHO0FBQUEsTUFDcEQsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxtQkFBbUIsSUFBSTtBQUV0RSxNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsbUJBQW1CLFNBQVUsS0FBSztBQUMvRSxZQUFJLE1BQU0scUJBQXFCO0FBSTdCLGNBQUksYUFBYSxpQkFBaUIsTUFBTSxxQkFBcUIsU0FBUyxJQUFJLElBQUk7QUFFOUUsZ0JBQU0sU0FBUztBQUFBLFlBQ2I7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNIO0FBRUEsY0FBTSxrQkFBa0I7QUFBQSxNQUMxQixDQUFDO0FBRUQsTUFBQWIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLDJCQUEyQixJQUFJO0FBRTlFLE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRywyQkFBMkIsU0FBVSxLQUFLO0FBQ3ZGLGNBQU0sMEJBQTBCO0FBQUEsTUFDbEMsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxDQUFDO0FBRXhFLE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxxQkFBcUIsU0FBVSxPQUFPLEtBQUs7QUFDeEYsY0FBTSxvQkFBb0IsS0FBSyxJQUFJO0FBQUEsTUFDckMsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxZQUFZLFdBQVk7QUFDckUsY0FBTSxTQUFTO0FBQUEsVUFDYixZQUFZO0FBQUEsUUFDZCxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsTUFBQWIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLGFBQWEsU0FBVSxPQUFPO0FBQzNFLFlBQUksU0FBUyxNQUFNLFdBQVcsTUFBTSx3QkFBd0I7QUFHMUQ7QUFBQSxRQUNGO0FBRUEsY0FBTSxrQkFBa0I7QUFFeEIsY0FBTSxTQUFTO0FBQUEsVUFDYixZQUFZO0FBQUEsVUFDWixZQUFZO0FBQUEsUUFDZCxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsTUFBQWIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLGtCQUFrQixXQUFZO0FBQzNFLFlBQUksY0FBYyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJLE1BQU0sTUFBTTtBQUVsRyxZQUFJLENBQUMsTUFBTSxZQUFZO0FBQ3JCO0FBQUEsUUFDRjtBQUVBLFlBQUksQ0FBQyxNQUFNLE1BQU0sWUFBWTtBQUMzQjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLENBQUMsYUFBYTtBQUNoQjtBQUFBLFFBQ0Y7QUFHQSxZQUFJLG9CQUFvQixZQUFZLHNCQUFzQjtBQUUxRCxZQUFJLGtCQUFrQixVQUFVLEtBQUssa0JBQWtCLFdBQVcsR0FBRztBQUNuRTtBQUFBLFFBQ0Y7QUFFQSxZQUFJLENBQUMsTUFBTSxxQkFBcUI7QUFDOUI7QUFBQSxRQUNGO0FBRUEsWUFBSSxpQkFBaUIsTUFBTSxvQkFBb0Isc0JBQXNCO0FBRXJFLFlBQUlFLFNBQU8sb0JBQW9CO0FBQUEsVUFDN0IsZ0JBQWdCO0FBQUEsVUFDaEIsUUFBUSxNQUFNO0FBQUEsVUFDZCxTQUFTO0FBQUEsVUFDVCxVQUFVO0FBQUEsUUFDWixDQUFDLEdBQ0dDLFlBQVdELE9BQUssVUFDaEIsTUFBTUEsT0FBSztBQUVmLFlBQUksTUFBTSxpQkFBaUI7QUFDekIsZ0JBQU0sZ0JBQWdCLE1BQU0sTUFBTSxHQUFHLE9BQU8sS0FBSyxJQUFJO0FBSXJELGdCQUFNLGdCQUFnQixNQUFNLE9BQU8sR0FBRyxPQUFPLGVBQWUsT0FBTyxPQUFPLGFBQWEsSUFBSTtBQUMzRixnQkFBTSxnQkFBZ0IsTUFBTSxRQUFRLEdBQUcsT0FBTyxlQUFlLE9BQU8sSUFBSTtBQUFBLFFBQzFFO0FBR0EsY0FBTSxTQUFTO0FBQUEsVUFDYjtBQUFBLFVBQ0EsY0FBY0M7QUFBQSxVQUNkLE9BQU8sZUFBZTtBQUFBLFFBQ3hCLENBQUM7QUFBQSxNQUNILENBQUM7QUFFRCxNQUFBaEIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLDhCQUE4QixTQUFVLFFBQVE7QUFFN0YsWUFBSSxDQUFDLE1BQU0sTUFBTSxnQkFBZ0IsUUFBUTtBQUN2QztBQUFBLFFBQ0Y7QUFFQSxjQUFNLFNBQVMsU0FBVUksUUFBTztBQUM5QixjQUFJLG9CQUFvQkEsT0FBTSxtQkFDMUIsa0JBQWtCQSxPQUFNO0FBQzVCLGNBQUk7QUFFSixjQUFJLG9CQUFvQixHQUFHO0FBR3pCLG9DQUF3QixTQUFTLElBQUksZ0JBQWdCLFNBQVMsSUFBSTtBQUFBLFVBQ3BFLE9BQU87QUFDTCxvQ0FBd0Isb0JBQW9CO0FBRTVDLGdCQUFJLHdCQUF3QixHQUFHO0FBQzdCLHNDQUF3QixnQkFBZ0IsU0FBUztBQUFBLFlBQ25ELFdBQVcsMEJBQTBCLGdCQUFnQixRQUFRO0FBQzNELHNDQUF3QjtBQUFBLFlBQzFCO0FBQUEsVUFDRjtBQUlBLGNBQUksWUFBWSxTQUFTLElBQUksSUFBSTtBQUVqQyxpQkFBTyxnQkFBZ0IscUJBQXFCLEVBQUUsb0JBQW9CO0FBQ2hFLG9DQUF3Qix3QkFBd0I7QUFFaEQsZ0JBQUksd0JBQXdCLEdBQUc7QUFDN0Isc0NBQXdCLGdCQUFnQixTQUFTO0FBQUEsWUFDbkQsV0FBVywwQkFBMEIsZ0JBQWdCLFFBQVE7QUFDM0Qsc0NBQXdCO0FBQUEsWUFDMUI7QUFBQSxVQUNGO0FBRUEsaUJBQU87QUFBQSxZQUNMLG1CQUFtQjtBQUFBLFVBQ3JCO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsTUFBQWpCLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxtQkFBbUIsV0FBWTtBQUM1RSxlQUFPLE1BQU0sTUFBTSxvQkFBb0IsTUFBTSxNQUFNLE1BQU0sb0JBQW9CLE1BQU0sTUFBTSxnQkFBZ0I7QUFBQSxNQUMzRyxDQUFDO0FBRUQsTUFBQWIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLHFCQUFxQixXQUFZO0FBQzlFLGNBQU0sU0FBUztBQUFBLFVBQ2IsbUJBQW1CO0FBQUEsUUFDckIsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxvQkFBb0IsV0FBWTtBQUM3RSxjQUFNLGVBQWUsRUFBRTtBQUFBLE1BQ3pCLENBQUM7QUFFRCxNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsb0JBQW9CLFdBQVk7QUFDN0UsWUFBSSxDQUFDLE1BQU0sTUFBTSxnQkFBZ0IsUUFBUTtBQUN2QztBQUFBLFFBQ0Y7QUFHQSxZQUFJLE1BQU0sTUFBTSxZQUFZLFFBQVE7QUFDbEM7QUFBQSxRQUNGO0FBR0EsY0FBTSxlQUFlLE1BQU0sTUFBTSxnQkFBZ0IsTUFBTSxNQUFNLGdCQUFnQixTQUFTLENBQUMsQ0FBQztBQUV4RixZQUFJLFFBQVEsTUFBTSxNQUFNLGVBQWUsS0FBSyxDQUFDLE1BQU0sTUFBTSxZQUFZO0FBQ25FLGdCQUFNLFNBQVM7QUFBQSxRQUNqQjtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxtQkFBbUIsU0FBVSxpQkFBaUIsYUFBYTtBQUN4RyxZQUFJLGNBQWMsTUFBTSxPQUNwQixpQkFBaUIsWUFBWSxnQkFDN0IsVUFBVSxZQUFZLFNBQ3RCLGtCQUFrQixZQUFZLGlCQUM5QixrQkFBa0IsWUFBWTtBQUNsQyxZQUFJLGtCQUFrQixNQUFNLE1BQU07QUFFbEMsWUFBSSxNQUFNLDBCQUEwQixHQUFHO0FBQ3JDLGdCQUFNLFlBQVksZ0JBQWdCLENBQUMsR0FBRyxlQUFlO0FBRXJEO0FBQUEsUUFDRjtBQUVBLFlBQUksQ0FBQyxnQkFBZ0I7QUFDbkI7QUFBQSxRQUNGO0FBR0EsWUFBSSxDQUFDLGFBQWE7QUFDaEI7QUFBQSxRQUNGO0FBR0EsWUFBSSxnQ0FBZ0MsYUFBYSxlQUFlLEdBQUc7QUFDakU7QUFBQSxRQUNGO0FBR0EsWUFBSSxrQkFBa0IsZUFBZSxhQUFhLG9CQUFvQixPQUFPLENBQUM7QUFFOUUsWUFBSSxvQkFBb0IsT0FBTztBQUM3QjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLGlCQUFpQjtBQUV2QixZQUFJLFFBQVEsZUFBZSxHQUFHO0FBRTVCLGdCQUFNLFVBQVU7QUFBQSxRQUNsQjtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyw2QkFBNkIsV0FBWTtBQUN0RixZQUFJLGNBQWMsTUFBTSxNQUFNO0FBRTlCLFlBQUksTUFBTSxNQUFNLGdCQUFnQixXQUFXLEdBQUc7QUFDNUMsaUJBQU87QUFBQSxRQUNUO0FBRUEsZUFBTyxNQUFNLE1BQU0sZ0JBQWdCLENBQUMsRUFBRSxNQUFNLFlBQVksTUFBTSxZQUFZLFlBQVk7QUFBQSxNQUN4RixDQUFDO0FBRUQsTUFBQWIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLHlCQUF5QixXQUFZO0FBQ2xGLFlBQUksZUFBZSxNQUFNLE9BQ3JCLFVBQVUsYUFBYSxTQUN2QixrQkFBa0IsYUFBYSxpQkFDL0IsUUFBUSxhQUFhO0FBRXpCLFlBQUksT0FBTztBQUNULGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksaUJBQWlCLG9CQUFvQixPQUFPLEVBQUUsSUFBSSxTQUFVLFFBQVE7QUFDdEUsaUJBQU9kLGdCQUFjQSxnQkFBYyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRztBQUFBLFlBQ2xELE9BQU8sT0FBTyxNQUFNLEtBQUssRUFBRSxZQUFZO0FBQUEsVUFDekMsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUNELFlBQUksMEJBQTBCO0FBQzlCLHdCQUFnQixRQUFRLFNBQVVtQixRQUFPO0FBQ3ZDLGNBQUksUUFBUUEsT0FBTTtBQUNsQixjQUFJLGVBQWUsTUFBTSxLQUFLLEVBQUUsWUFBWTtBQUM1QyxjQUFJLGVBQWUsVUFBVSxTQUFVLFFBQVE7QUFDN0MsbUJBQU8sT0FBTyxVQUFVO0FBQUEsVUFDMUIsQ0FBQyxNQUFNO0FBQUksdUNBQTJCO0FBQUEsUUFDeEMsQ0FBQztBQUNELGVBQU8sZUFBZSxXQUFXO0FBQUEsTUFDbkMsQ0FBQztBQUVELE1BQUFsQixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsbUJBQW1CLFNBQVUsT0FBTztBQUNqRixZQUFJLE1BQU0sTUFBTSxTQUFTO0FBQ3ZCLGdCQUFNLE1BQU0sUUFBUSxLQUFLO0FBQUEsUUFDM0I7QUFFQSxjQUFNLFNBQVM7QUFFZixjQUFNLFNBQVM7QUFBQSxVQUNiLFVBQVU7QUFBQSxRQUNaLENBQUM7QUFBQSxNQUNILENBQUM7QUFFRCxNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsb0JBQW9CLFNBQVUsaUJBQWlCO0FBQzVGLFlBQUksY0FBYyxNQUFNLE1BQU07QUFDOUIsWUFBSU0sYUFBWSxNQUFNLE1BQU07QUFFNUIsWUFBSUEsWUFBVztBQUNiLHNCQUFZLE1BQU1BLFVBQVMsRUFBRSxRQUFRLFNBQVUsUUFBUTtBQUNyRCxnQkFBSSxPQUFPLFNBQVM7QUFBRyxvQkFBTSxnQkFBZ0IsaUJBQWlCLE1BQU07QUFBQSxVQUN0RSxDQUFDO0FBQUEsUUFDSCxPQUFPO0FBQ0wsZ0JBQU0sZ0JBQWdCLGlCQUFpQixXQUFXO0FBQUEsUUFDcEQ7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBbkIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLG1CQUFtQixTQUFVLE9BQU87QUFPakYsWUFBSSxhQUFhO0FBQ2pCLFlBQUksZ0JBQWdCLFdBQVcsaUJBQWlCLFdBQVc7QUFFM0QsWUFBSSx1QkFBdUIsaUJBQWlCLE1BQU0sbUJBQW1CLE1BQU0sZ0JBQWdCLFNBQVMsYUFBYTtBQUVqSCxZQUFJLGlCQUFpQixpQkFBaUIsTUFBTSx1QkFBdUIsTUFBTSxvQkFBb0IsU0FBUyxhQUFhO0FBRW5ILFlBQUksQ0FBQyx3QkFBd0IsQ0FBQyxnQkFBZ0I7QUFDNUMsZ0JBQU0sVUFBVTtBQUVoQixjQUFJLE1BQU0sTUFBTSxRQUFRO0FBQ3RCLGtCQUFNLE1BQU0sT0FBTyxLQUFLO0FBQUEsVUFDMUI7QUFFQSxnQkFBTSxTQUFTO0FBQUEsWUFDYixVQUFVO0FBQUEsVUFDWixDQUFDO0FBSUQsY0FBSSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7QUFDNUIsa0JBQU0saUJBQWlCLElBQUk7QUFBQSxVQUM3QjtBQUFBLFFBQ0YsV0FBVyxzQkFBc0I7QUFLL0IsZ0NBQXNCLFdBQVk7QUFDaEMsZ0JBQUk7QUFFSixhQUFDLHdCQUF3QixNQUFNLDRCQUE0QixRQUFRLDBCQUEwQixTQUFTLFNBQVMsc0JBQXNCLE1BQU07QUFBQSxVQUM3SSxDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxhQUFhLFNBQVUsT0FBTztBQUMzRSxZQUFJLE1BQU0sTUFBTTtBQUFZO0FBRTVCLGdCQUFRLE1BQU0sS0FBSztBQUFBLFVBQ2pCLEtBQUssYUFBSztBQUNSLGtCQUFNLGVBQWU7QUFDckIsa0JBQU0sZ0JBQWdCO0FBRXRCLGdCQUFJLE1BQU0sTUFBTSxZQUFZO0FBQzFCLG9CQUFNLDJCQUEyQixFQUFFO0FBQUEsWUFDckMsT0FBTztBQUNMLG9CQUFNLFNBQVM7QUFBQSxZQUNqQjtBQUVBO0FBQUEsVUFFRixLQUFLLGFBQUs7QUFDUixrQkFBTSxlQUFlO0FBQ3JCLGtCQUFNLGdCQUFnQjtBQUV0QixnQkFBSSxNQUFNLE1BQU0sWUFBWTtBQUMxQixvQkFBTSwyQkFBMkIsQ0FBQztBQUFBLFlBQ3BDLE9BQU87QUFDTCxvQkFBTSxTQUFTO0FBQUEsWUFDakI7QUFFQTtBQUFBLFVBRUYsS0FBSyxhQUFLO0FBQ1Isa0JBQU0sZ0JBQWdCO0FBRXRCLGtCQUFNLGlCQUFpQjtBQUV2QjtBQUFBLFVBRUYsS0FBSyxhQUFLO0FBQ1IsZ0JBQUksTUFBTSxNQUFNLFlBQVk7QUFDMUIsb0JBQU0sZUFBZTtBQUNyQixvQkFBTSxnQkFBZ0I7QUFFdEIsb0JBQU0sVUFBVTtBQUFBLFlBQ2xCO0FBRUE7QUFBQSxVQUVGLEtBQUssYUFBSztBQUNSLGtCQUFNLGVBQWU7QUFDckIsa0JBQU0sZ0JBQWdCO0FBRXRCLGdCQUFJLE1BQU0sZ0JBQWdCLEdBQUc7QUFDM0Isb0JBQU0sWUFBWSxNQUFNLE1BQU0sZ0JBQWdCLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUFBLFlBQzlFLE9BQU87QUFDTCxvQkFBTSxpQkFBaUIsS0FBSztBQUFBLFlBQzlCO0FBRUE7QUFBQSxVQUVGLEtBQUssYUFBSztBQUVSLGdCQUFJLE1BQU0sZ0JBQWdCLEtBQUssTUFBTSxNQUFNLFlBQVk7QUFDckQsb0JBQU0sZUFBZTtBQUNyQixvQkFBTSxnQkFBZ0I7QUFBQSxZQUN4QjtBQUVBO0FBQUEsVUFFRjtBQUNFLGdCQUFJLE1BQU0sTUFBTSxXQUFXO0FBQ3pCLG9CQUFNLE1BQU0sVUFBVSxLQUFLO0FBQUEsWUFDN0I7QUFBQSxRQUVKO0FBQUEsTUFDRixDQUFDO0FBRUQsTUFBQWIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLG9CQUFvQixTQUFVLFFBQVE7QUFDbkYsY0FBTSxZQUFZLE1BQU07QUFBQSxNQUMxQixDQUFDO0FBRUQsTUFBQWIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLGlCQUFpQixTQUFVLFFBQVE7QUFDaEYsY0FBTSxZQUFZLE1BQU07QUFBQSxNQUMxQixDQUFDO0FBRUQsTUFBQWIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLGVBQWUsU0FBVSxhQUFhLGlCQUFpQjtBQUNwRyxZQUFJLFlBQVksVUFBVTtBQUN4QjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLGVBQWUsTUFBTSxPQUNyQixXQUFXLGFBQWEsVUFDeEIsa0JBQWtCLGFBQWEsaUJBQy9CLHNCQUFzQixhQUFhO0FBQ3ZDLFlBQUksa0JBQWtCLFFBQVEsbUJBQW1CO0FBQ2pELFlBQUksZ0JBQWdCLGtCQUFrQixDQUFDLFdBQVcsSUFBSSxnQkFBZ0IsT0FBTyxXQUFXO0FBRXhGLFlBQUksVUFBVTtBQUNaLG1CQUFTLGFBQWE7QUFBQSxRQUN4QjtBQUVBLGNBQU0saUJBQWlCO0FBRXZCLGNBQU0sa0JBQWtCO0FBRXhCLFlBQUksQ0FBQyxpQkFBaUI7QUFDcEIsY0FBSSxNQUFNLHdCQUF3QjtBQUNoQyxrQkFBTSx1QkFBdUIsTUFBTTtBQUFBLFVBQ3JDO0FBQUEsUUFDRjtBQUVBLFlBQUksaUJBQWlCO0FBQ25CLGdDQUFzQixXQUFZO0FBQ2hDLG1CQUFPLE1BQU0sVUFBVTtBQUFBLFVBQ3pCLENBQUM7QUFBQSxRQUNILE9BQU87QUFDTCxnQkFBTSxTQUFTO0FBQUEsWUFDYixtQkFBbUIsTUFBTSxNQUFNLGdCQUFnQixRQUFRLFdBQVc7QUFBQSxVQUNwRSxDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxrQkFBa0IsU0FBVSxlQUFlO0FBQ3hGLFlBQUksZUFBZSxNQUFNLE9BQ3JCLFdBQVcsYUFBYSxVQUN4QixrQkFBa0IsYUFBYTtBQUVuQyxZQUFJLFVBQVU7QUFDWixtQkFBUyxnQkFBZ0IsT0FBTyxTQUFVLFFBQVE7QUFDaEQsbUJBQU8sV0FBVztBQUFBLFVBQ3BCLENBQUMsQ0FBQztBQUFBLFFBQ0o7QUFFQSxjQUFNLGtCQUFrQjtBQUFBLE1BQzFCLENBQUM7QUFFRCxNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsd0JBQXdCLFdBQVk7QUFDakYsWUFBSSxXQUFXLE1BQU0sTUFBTTtBQUUzQixZQUFJLFVBQVU7QUFDWixtQkFBUyxDQUFDLENBQUM7QUFBQSxRQUNiO0FBSUEsWUFBSSxNQUFNLHdCQUF3QjtBQUNoQyxnQkFBTSx1QkFBdUIsTUFBTTtBQUFBLFFBQ3JDO0FBRUEsWUFBSSxDQUFDLE1BQU0sTUFBTSxZQUFZO0FBQzNCLGdCQUFNLFNBQVM7QUFBQSxRQUNqQjtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxtQkFBbUIsV0FBWTtBQUU1RSxZQUFJLE1BQU0sd0JBQXdCO0FBQ2hDLGdCQUFNLHVCQUF1QixNQUFNO0FBQUEsUUFDckM7QUFHQSxZQUFJLFFBQVEsTUFBTSxNQUFNLGVBQWUsS0FBSyxNQUFNLE1BQU0sZ0JBQWdCLFdBQVcsR0FBRztBQUNwRixjQUFJLHNCQUFzQixNQUFNLE1BQU0sZ0JBQWdCLFVBQVUsU0FBVSxRQUFRO0FBQ2hGLG1CQUFPLE9BQU8sVUFBVSxNQUFNLE1BQU0sZ0JBQWdCLENBQUMsRUFBRSxTQUFTLE9BQU8sUUFBUSxNQUFNLE1BQU0sZ0JBQWdCLENBQUMsRUFBRTtBQUFBLFVBQ2hILENBQUM7QUFFRCxnQkFBTSxTQUFTO0FBQUEsWUFDYixtQkFBbUI7QUFBQSxVQUNyQixDQUFDO0FBQUEsUUFDSCxPQUFPO0FBQ0wsZ0JBQU0sa0JBQWtCO0FBQUEsUUFDMUI7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsbUJBQW1CLFdBQVk7QUFDNUUsWUFBSSxNQUFNLHdCQUF3QjtBQUNoQyxnQkFBTSx1QkFBdUIsTUFBTTtBQUFBLFFBQ3JDO0FBRUEsWUFBSSxDQUFDLE1BQU0sTUFBTSxZQUFZO0FBQzNCLGdCQUFNLFNBQVM7QUFBQSxRQUNqQjtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxzQkFBc0IsV0FBWTtBQUMvRSxZQUFJLE1BQU0sd0JBQXdCO0FBQ2hDLGdCQUFNLHVCQUF1QixNQUFNO0FBQUEsUUFDckM7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsb0JBQW9CLFdBQVk7QUFDN0UsY0FBTSxVQUFVO0FBQUEsTUFDbEIsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxrQkFBa0IsU0FBVSxhQUFhO0FBQ3RGLFlBQUksZUFBZSxNQUFNLE9BQ3JCLGlCQUFpQixhQUFhLGdCQUM5Qk0sYUFBWSxhQUFhO0FBRTdCLFlBQUksZ0JBQWdCO0FBQ2xCLGNBQUksc0JBQXNCLE1BQU0sTUFBTSxnQkFBZ0IsU0FBUztBQUUvRCx5QkFBZSxhQUFhLG1CQUFtQjtBQUFBLFFBQ2pEO0FBRUEsY0FBTSxTQUFTO0FBQUEsVUFDYjtBQUFBLFFBQ0YsR0FBRyxXQUFZO0FBQ2IsY0FBSSxlQUFlLE1BQU0sTUFBTSxlQUFlO0FBQU8sa0JBQU0sU0FBUztBQUFBLFFBQ3RFLENBQUM7QUFFRCxZQUFJQSxjQUFhLFlBQVksU0FBU0EsVUFBUyxHQUFHO0FBQ2hELGdCQUFNLGlCQUFpQixLQUFLO0FBQUEsUUFDOUI7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBbkIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLG9DQUFvQyxTQUFVLG9CQUFvQjtBQUMvRyxZQUFJLGNBQWMsTUFBTSxPQUNwQixrQkFBa0IsWUFBWSxpQkFDOUIsb0JBQW9CLFlBQVk7QUFDcEMsWUFBSSxlQUFlLE1BQU0sT0FDckIsa0JBQWtCLGFBQWEsaUJBQy9CLGtCQUFrQixhQUFhO0FBQ25DLFlBQUksc0JBQXNCO0FBRTFCLFlBQUksZ0JBQWdCLFdBQVcsbUJBQW1CLFFBQVE7QUFDeEQsZ0NBQXNCO0FBQUEsUUFDeEIsT0FBTztBQUNMLG1CQUFTLElBQUksR0FBRyxJQUFJLGdCQUFnQixRQUFRLEtBQUs7QUFDL0MsZ0JBQUksZ0JBQWdCLENBQUMsRUFBRSxVQUFVLG1CQUFtQixDQUFDLEVBQUUsT0FBTztBQUM1RCxvQ0FBc0I7QUFDdEI7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLHFCQUFxQjtBQUN2QixnQkFBTSxzQkFBc0IsQ0FBQztBQUM3QixjQUFJLHdCQUF3QjtBQUU1QixjQUFJLFFBQVEsZUFBZSxLQUFLLGdCQUFnQixXQUFXLEdBQUc7QUFDNUQsZ0JBQUksbUJBQW1CLFNBQVMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHO0FBQ25ELHNDQUF3QixtQkFBbUIsUUFBUSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQUEsWUFDdkU7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sU0FBUztBQUFBLFlBQ2IsaUJBQWlCO0FBQUEsWUFDakIsbUJBQW1CO0FBQUEsVUFDckIsQ0FBQztBQUVELGNBQUksQ0FBQyxtQkFBbUIsUUFBUTtBQUU5QixnQkFBSSxNQUFNLGdCQUFnQixHQUFHO0FBQzNCLG9CQUFNLGtCQUFrQjtBQUFBLFlBQzFCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFWLGVBQWFXLGNBQWEsQ0FBQztBQUFBLE1BQ3pCLEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxvQkFBb0I7QUFDbEMsWUFBSSxTQUFTO0FBRWIsYUFBSyxhQUFhO0FBRWxCLG1CQUFXLFdBQVk7QUFDckIsY0FBSSxPQUFPLDBCQUEwQjtBQUNuQyxtQkFBTyx5QkFBeUIsZ0JBQWdCO0FBQUEsVUFDbEQ7QUFBQSxRQUNGLEdBQUcsR0FBRztBQUFBLE1BQ1I7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxxQkFBcUI7QUFDbkMsWUFBSSxlQUFlLEtBQUssT0FDcEIsVUFBVSxhQUFhLFNBQ3ZCLGtCQUFrQixhQUFhLGlCQUMvQixrQkFBa0IsYUFBYSxpQkFDL0IsZ0JBQWdCLGFBQWE7QUFDakMsWUFBSSxjQUFjLEtBQUssTUFBTTtBQUk3QixhQUFLLGlDQUFpQyxtQkFBbUIsU0FBUyxpQkFBaUIsYUFBYSxLQUFLLE1BQU0sT0FBTyxRQUFRLGVBQWUsR0FBRyxhQUFhLENBQUM7QUFBQSxNQUM1SjtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLHVCQUF1QjtBQUNyQyxhQUFLLGFBQWE7QUFBQSxNQUNwQjtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTTSxVQUFTO0FBQ3ZCLFlBQUksU0FBUztBQUViLFlBQUksZUFBZSxLQUFLLE9BQ3BCLGVBQWUsYUFBYSxnQkFBZ0IsR0FDNUMsUUFBUSxhQUFhLE9BQ3JCLFlBQVksYUFBYSxXQUN6QixhQUFhLGFBQWEsWUFDMUIsbUJBQW1CLGFBQWEsa0JBQ2hDLFlBQVksYUFBYSxXQUN6QixLQUFLLGFBQWEsSUFDbEIsV0FBVyxhQUFhLFVBQ3hCLGNBQWMsYUFBYSxhQUMzQixhQUFhLGFBQWEsWUFDMUIsWUFBWSxhQUFhLFdBQ3pCLFlBQVksYUFBYSxXQUN6QixnQkFBZ0IsYUFBYSxlQUM3QkMsVUFBUyxhQUFhLFFBQ3RCLFdBQVcsYUFBYSxVQUN4QixpQkFBaUIsYUFBYSxnQkFDOUIsaUJBQWlCLGFBQWEsZ0JBQzlCLFVBQVUsYUFBYSxTQUN2QixjQUFjLGFBQWEsYUFDM0IsZUFBZSxhQUFhLGNBQzVCLFlBQVksYUFBYSxXQUN6QixrQkFBa0IsYUFBYSxpQkFDL0Isa0JBQWtCLGFBQWEsaUJBQy9CLFVBQVUsYUFBYSxTQUN2QixnQkFBZ0IsYUFBYSxlQUM3QkYsYUFBWSxhQUFhLFdBQ3pCRyxVQUFTLGFBQWEsUUFDdEIsWUFBWSxhQUFhLFdBQ3pCLFlBQVksYUFBYSxZQUFZLEdBQ3JDLGlCQUFpQixhQUFhLGlCQUFpQixHQUMvQyxPQUFPNUIsNEJBQXlCLGNBQWNGLFlBQVM7QUFFM0QsWUFBSSxlQUFlLEtBQUssT0FDcEIsb0JBQW9CLGFBQWEsbUJBQ2pDLFdBQVcsYUFBYSxVQUN4QixhQUFhLGFBQWEsWUFDMUIsZUFBZSxhQUFhLGNBQzVCLGNBQWMsYUFBYSxhQUMzQixRQUFRLGFBQWEsT0FDckIsa0JBQWtCLGFBQWE7QUFFbkMsWUFBSSxVQUFVLE9BQU8sUUFBUSxPQUFPLFNBQVMsS0FBSyxLQUFLLE9BQU8sa0JBQWtCO0FBSWhGLFlBQUksZ0JBQWdCLGNBQWMsYUFBYSxTQUFTLGVBQWUsVUFBVTtBQUNqRixZQUFJLGNBQVUsb0JBQUErQixTQUFXLGVBQWUsV0FBVztBQUFBLFVBQ2pELDJCQUEyQjtBQUFBLFVBQzNCLDBCQUEwQjtBQUFBLFVBQzFCLDBCQUEwQjtBQUFBLFVBQzFCLHlCQUF5QkQ7QUFBQSxVQUN6QiwwQkFBMEI7QUFBQSxVQUMxQix5QkFBeUI7QUFBQSxVQUN6QixzQkFBc0I7QUFBQSxRQUN4QixDQUFDO0FBQ0QsWUFBSSxRQUFRLGdCQUFnQixJQUFJLFNBQVUsZ0JBQWdCO0FBQ3hELGlCQUFPLGVBQWU7QUFBQSxRQUN4QixDQUFDLEVBQUUsS0FBSyxJQUFJO0FBQ1osWUFBSTtBQUVKLFlBQUksQ0FBQyxpQkFBaUIsWUFBWTtBQUNoQyxjQUFJLDBCQUEwQixlQUFlLEdBQUcsT0FBTyxjQUFjLGNBQWMsSUFBSTtBQUN2Rix3QkFBYyxJQUFjLFdBQVcsTUFBTSxJQUFjLFNBQVM7QUFBQSxZQUNsRSxPQUFPO0FBQUEsWUFDUCxTQUFTO0FBQUEsVUFDWCxHQUFHLFNBQVUsa0JBQWtCO0FBQzdCLG1CQUFPLElBQWMsd0JBQXdCO0FBQUEsY0FDM0MsUUFBUSxPQUFPLE1BQU07QUFBQSxjQUNyQixtQkFBbUIsT0FBTyxNQUFNO0FBQUEsY0FDaEMsdUJBQXVCLE9BQU8sc0JBQXNCO0FBQUEsY0FDcEQ7QUFBQSxjQUNBLGtCQUFrQjtBQUFBLGNBQ2xCO0FBQUEsY0FDQTtBQUFBLGNBQ0EsU0FBUyxPQUFPO0FBQUEsY0FDaEI7QUFBQSxjQUNBLGFBQWEsT0FBTztBQUFBLGNBQ3BCO0FBQUEsY0FDQSxlQUFlLE9BQU87QUFBQSxjQUN0QixrQkFBa0IsT0FBTztBQUFBLGNBQ3pCLFVBQVUsT0FBTztBQUFBLGNBQ2pCLFdBQVcsT0FBTztBQUFBLGNBQ2xCO0FBQUEsY0FDQSxVQUFVO0FBQUEsY0FDVjtBQUFBLGNBQ0E7QUFBQSxjQUNBLFFBQVEsT0FBTztBQUFBLGNBQ2Y7QUFBQSxjQUNBLGVBQWU7QUFBQSxjQUNmO0FBQUEsY0FDQTtBQUFBLGNBQ0EsZ0JBQWdCLE9BQU87QUFBQSxjQUN2QjtBQUFBLGNBQ0EsV0FBV0g7QUFBQSxjQUNYO0FBQUEsY0FDQTtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0gsQ0FBQyxDQUFDO0FBQUEsUUFDSjtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxVQVFFLElBQWMsT0FBTzFCLFlBQVMsQ0FBQyxHQUFHLE1BQU07QUFBQSxZQUN0QyxXQUFXO0FBQUEsWUFDWCxrQkFBa0I7QUFBQSxZQUNsQixXQUFXLEtBQUs7QUFBQSxZQUNoQixLQUFLLEtBQUs7QUFBQSxVQUNaLENBQUMsR0FBRyxJQUFjLGtCQUFrQjtBQUFBLFlBQ2xDLGtCQUFrQixLQUFLO0FBQUEsWUFDdkI7QUFBQSxZQUNBLGlCQUFpQixLQUFLLGdCQUFnQixJQUFJLEtBQUssT0FBTyxXQUFXLE9BQU8sS0FBSyxNQUFNLGlCQUFpQixDQUFDLElBQUk7QUFBQSxZQUN6RztBQUFBLFlBQ0Esb0JBQW9CLGdCQUFnQixTQUFTO0FBQUEsWUFDN0MsSUFBSTtBQUFBLFlBQ0osVUFBVSxLQUFLO0FBQUEsWUFDZjtBQUFBLFlBQ0E7QUFBQSxZQUNBLFFBQVEsQ0FBQyxDQUFDO0FBQUEsWUFDVixVQUFVLEtBQUs7QUFBQSxZQUNmLFNBQVMsZUFBZSxDQUFDLGFBQWEsS0FBSyx1QkFBdUI7QUFBQSxZQUNsRSxTQUFTLEtBQUs7QUFBQSxZQUNkLGtCQUFrQixLQUFLO0FBQUEsWUFDdkIsU0FBUyxLQUFLO0FBQUEsWUFDZCxpQkFBaUIsS0FBSztBQUFBLFlBQ3RCLGdCQUFnQixLQUFLO0FBQUEsWUFDckI7QUFBQSxZQUNBLFFBQVEsS0FBSztBQUFBLFlBQ2I7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0EsaUJBQWlCLEtBQUs7QUFBQSxZQUN0QixnQkFBZ0IsS0FBSztBQUFBLFlBQ3JCO0FBQUEsWUFDQSxRQUFRLGtCQUFrQjZCLFVBQVM7QUFBQSxZQUNuQyxTQUFTLGtCQUFrQixVQUFVO0FBQUEsWUFDckM7QUFBQSxZQUNBO0FBQUEsWUFDQSxjQUFjO0FBQUEsWUFDZCxtQkFBbUI7QUFBQSxVQUNyQixDQUFDLEdBQUcsV0FBVztBQUFBO0FBQUEsTUFFbkI7QUFBQSxJQUNGLENBQUMsR0FBRyxDQUFDO0FBQUEsTUFDSCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMseUJBQXlCLFdBQVcsV0FBVztBQUM3RCxZQUFJLFVBQVUsVUFBVSxTQUNwQixrQkFBa0IsVUFBVSxpQkFDNUIsa0JBQWtCLFVBQVUsaUJBQzVCLGdCQUFnQixVQUFVO0FBQzlCLFlBQUksb0JBQW9CLFVBQVUsbUJBQzlCLGNBQWMsVUFBVTtBQUc1QixZQUFJLGtCQUFrQixtQkFBbUIsU0FBUyxpQkFBaUIsYUFBYSxVQUFVLE9BQU8sUUFBUSxlQUFlLEdBQUcsYUFBYTtBQUN4SSxZQUFJLGNBQWM7QUFBQSxVQUNoQjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLHFCQUFxQixnQkFBZ0IsUUFBUTtBQUMvQyxzQkFBWSxvQkFBb0I7QUFBQSxRQUNsQztBQUVBLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRixDQUFDLENBQUM7QUFFRixXQUFPUjtBQUFBLEVBQ1QsRUFBRSx5QkFBUztBQUVYLEVBQUFkLGtCQUFnQixhQUFhLGdCQUFnQjtBQUFBLElBQzNDLE9BQU87QUFBQSxJQUNQLFlBQVk7QUFBQSxJQUNaLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFNBQVMsQ0FBQztBQUFBLElBQ1YsaUJBQWlCLENBQUM7QUFBQSxJQUNsQixpQkFBaUI7QUFBQSxJQUNqQixTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixlQUFlO0FBQUEsRUFDakIsQ0FBQztBQUVELGNBQVksWUFBWTtBQUFBLElBQ3RCLGtCQUFrQixvQkFBQXdCLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUs1QixPQUFPLG9CQUFBQSxRQUFVLEtBQUs7QUFBQSxJQUN0QixXQUFXLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLckIsWUFBWSxvQkFBQUEsUUFBVSxLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLM0IsV0FBVyxvQkFBQUEsUUFBVSxLQUFLO0FBQUEsSUFDMUIsSUFBSSxvQkFBQUEsUUFBVTtBQUFBLElBQ2QsVUFBVSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3BCLGFBQWEsb0JBQUFBLFFBQVUsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzVCLFlBQVksb0JBQUFBLFFBQVU7QUFBQSxJQUN0QixXQUFXLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLckIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3JCLGVBQWUsb0JBQUFBLFFBQVU7QUFBQSxJQUN6QixRQUFRLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLbEIsVUFBVSxvQkFBQUEsUUFBVTtBQUFBLElBQ3BCLFNBQVMsb0JBQUFBLFFBQVU7QUFBQSxJQUNuQixXQUFXLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLckIsZ0JBQWdCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLMUIsYUFBYSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3ZCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtyQixpQkFBaUIsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLEtBQUssWUFBWSxvQkFBQUEsUUFBVSxNQUFNO0FBQUEsTUFDL0UsYUFBYSxvQkFBQUEsUUFBVTtBQUFBLElBQ3pCLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU9oQixlQUFlLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLFlBQVksQ0FBQyxFQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU12RCxTQUFTLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1uQixRQUFRLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLbEIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3JCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU14QixtQkFBbUIsb0JBQUFBLFFBQVU7QUFBQSxFQUMvQjs7O0FVamdDQSxNQUFBQyxrQkFBc0Q7QUFDdEQsTUFBQUMsc0JBQXNCOzs7QUNQdEIsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7OztBQ0Z2QixNQUFBQyxrQkFBa0I7QUFDbEIsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1QjtBQXZCdkIsTUFBSUMsZUFBWSxDQUFDLGFBQWEsWUFBWSxpQkFBaUIsYUFBYSxZQUFZO0FBRXBGLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLFVBQVFDLFNBQVEsZ0JBQWdCO0FBQUUsUUFBSUMsUUFBTyxPQUFPLEtBQUtELE9BQU07QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxVQUFVLE9BQU8sc0JBQXNCQSxPQUFNO0FBQUcsVUFBSSxnQkFBZ0I7QUFBRSxrQkFBVSxRQUFRLE9BQU8sU0FBVSxLQUFLO0FBQUUsaUJBQU8sT0FBTyx5QkFBeUJBLFNBQVEsR0FBRyxFQUFFO0FBQUEsUUFBWSxDQUFDO0FBQUEsTUFBRztBQUFFLE1BQUFDLE1BQUssS0FBSyxNQUFNQSxPQUFNLE9BQU87QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXhWLFdBQVNDLGdCQUFjLFFBQVE7QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsVUFBSSxTQUFTLFVBQVUsQ0FBQyxLQUFLLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFVBQUksSUFBSSxHQUFHO0FBQUUsUUFBQUgsVUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxVQUFBSSxrQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRyxXQUFXLE9BQU8sMkJBQTJCO0FBQUUsZUFBTyxpQkFBaUIsUUFBUSxPQUFPLDBCQUEwQixNQUFNLENBQUM7QUFBQSxNQUFHLE9BQU87QUFBRSxRQUFBSixVQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxpQkFBTyxlQUFlLFFBQVEsS0FBSyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFcmhCLFdBQVNJLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBRWhOLFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBZTNTLE1BQUksc0JBQXNCLFNBQVNDLHFCQUFvQkMsUUFBTTtBQUNsRSxRQUFJLFlBQVlBLE9BQUssV0FDakIsV0FBV0EsT0FBSyxVQUNoQixnQkFBZ0JBLE9BQUssZUFDckIsWUFBWUEsT0FBSyxXQUNqQixhQUFhQSxPQUFLLFlBQ2xCLE9BQU9ILDRCQUF5QkcsUUFBTVYsWUFBUztBQUVuRCxRQUFJLGNBQVUsb0JBQUFXLFNBQVcsdUJBQXVCLFdBQVc7QUFBQSxNQUN6RCxnQ0FBZ0M7QUFBQSxNQUNoQyxxQ0FBcUM7QUFBQSxJQUN2QyxDQUFDO0FBRUQsUUFBSSxRQUFRTixnQkFBY0EsZ0JBQWNBLGdCQUFjO0FBQUEsTUFDcEQsV0FBVztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sT0FBTztBQUFBLE1BQ1Asa0JBQWtCLHFCQUFxQixPQUFPLFNBQVM7QUFBQSxNQUN2RCxZQUFZLGlCQUFpQjtBQUFBLElBQy9CLEdBQUcsWUFBWTtBQUFBLE1BQ2IsZ0JBQWdCO0FBQUEsSUFDbEIsQ0FBQyxHQUFHLEtBQUssZUFBZSxLQUFLO0FBQUEsTUFDM0IsTUFBTSxJQUFJLE9BQU8sS0FBSyxlQUFlLENBQUM7QUFBQSxJQUN4QyxDQUFDLEdBQUcsSUFBSTtBQUVSLFFBQUksYUFBYSxZQUFZO0FBQzdCLFdBQU8sSUFBYyxTQUFTO0FBQUEsTUFDNUIsT0FBTztBQUFBLE1BQ1AsU0FBUztBQUFBLE1BQ1QsUUFBUTtBQUFBLFFBQ04sTUFBTTtBQUFBLFFBQ047QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFHLFNBQVUsZ0JBQWdCO0FBQzNCLGFBQU8sSUFBYyxTQUFTO0FBQUEsUUFDNUIsT0FBTztBQUFBLFFBQ1AsU0FBUztBQUFBLFFBQ1QsUUFBUTtBQUFBLFVBQ04sTUFBTTtBQUFBLFFBQ1I7QUFBQSxNQUNGLEdBQUcsU0FBVSxpQkFBaUI7QUFDNUIsZUFBTyxJQUFjLGdCQUFnQkosWUFBUztBQUFBLFVBQzVDLGNBQWMsYUFBYSxpQkFBaUI7QUFBQSxRQUM5QyxHQUFHLEtBQUssR0FBRyxVQUFVO0FBQUEsTUFDdkIsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUFBLEVBQ0g7QUFDQSxzQkFBb0IsWUFBWTtBQUFBLElBQzlCLE1BQU0sb0JBQUFXLFFBQVU7QUFBQSxJQUNoQixTQUFTLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTbkIsT0FBTyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsV0FBVyxVQUFVLFFBQVEsU0FBUyxXQUFXLFNBQVMsQ0FBQztBQUFBLElBQ25GLE1BQU0sb0JBQUFBLFFBQVUsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVN0QyxPQUFPLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLFNBQVMsTUFBTSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTaEQsWUFBWSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU3RCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFXckIsWUFBWSxvQkFBQUEsUUFBVTtBQUFBLElBQ3RCLFFBQVEsb0JBQUFBLFFBQVU7QUFBQSxJQUNsQixLQUFLLG9CQUFBQSxRQUFVO0FBQUEsSUFDZixNQUFNLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxVQUFVLFFBQVEsQ0FBQztBQUFBLElBQzFDLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLeEIsVUFBVSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLGlCQUFpQixjQUFjLHVCQUF1QixZQUFZLGFBQWEsU0FBUyxnQkFBZ0IsY0FBYyxVQUFVLFlBQVksZ0JBQWdCLFFBQVEsYUFBYSxhQUFhLGNBQWMsV0FBVyxjQUFjLFlBQVksWUFBWSxnQkFBZ0IsVUFBVSxRQUFRLGFBQWEsUUFBUSxtQkFBbUIsaUJBQWlCLFVBQVUsY0FBYyxTQUFTLFNBQVMsT0FBTyxZQUFZLFlBQVksYUFBYSxZQUFZLFNBQVMsdUJBQXVCLFNBQVMscUJBQXFCLFNBQVMsZ0JBQWdCLGVBQWUsY0FBYyxXQUFXLFdBQVcsU0FBUyxXQUFXLFdBQVcsY0FBYyxhQUFhLG1CQUFtQix3QkFBd0IsbUJBQW1CLG9CQUFvQixzQkFBc0Isb0JBQW9CLFFBQVEsaUJBQWlCLHFCQUFxQix3QkFBd0IsdUJBQXVCLHlCQUF5QixTQUFTLDhCQUE4Qix3QkFBd0IsY0FBYyxZQUFZLE9BQU8sZ0JBQWdCLGtCQUFrQixZQUFZLFdBQVcsZUFBZSxlQUFlLFlBQVksZ0JBQWdCLGlCQUFpQixhQUFhLE9BQU8sbUJBQW1CLG9CQUFvQixZQUFZLHFCQUFxQixtQkFBbUIsb0JBQW9CLGNBQWMsbUJBQW1CLG1CQUFtQixpQkFBaUIsOEJBQThCLDRCQUE0QixpQkFBaUIsZ0JBQWdCLHlCQUF5Qix5QkFBeUIsdUJBQXVCLHlCQUF5Qix3QkFBd0Isc0JBQXNCLGNBQWMscUJBQXFCLDRCQUE0Qiw2QkFBNkIseUJBQXlCLDBCQUEwQixjQUFjLGdCQUFnQixlQUFlLG1CQUFtQixjQUFjLHVCQUF1QixTQUFTLFNBQVMsVUFBVSxPQUFPLFVBQVUsUUFBUSxVQUFVLGNBQWMsZ0JBQWdCLE9BQU8sYUFBYSxhQUFhLGVBQWUsV0FBVyxlQUFlLFVBQVUsUUFBUSxZQUFZLFFBQVEsZUFBZSxnQkFBZ0IscUJBQXFCLGNBQWMsYUFBYSxpQkFBaUIsY0FBYyxrQkFBa0IsWUFBWSxRQUFRLFVBQVUsV0FBVyxTQUFTLFFBQVEsa0JBQWtCLFlBQVksUUFBUSxXQUFXLFNBQVMsZ0JBQWdCLFdBQVcsUUFBUSxRQUFRLGFBQWEsU0FBUyxnQkFBZ0IsY0FBYyxhQUFhLGNBQWMsc0JBQXNCLGdCQUFnQixhQUFhLG1CQUFtQixrQkFBa0IsZ0JBQWdCLGlCQUFpQixlQUFlLFdBQVcsVUFBVSxNQUFNLFlBQVksWUFBWSxlQUFlLGNBQWMsZUFBZSxZQUFZLGtCQUFrQixpQkFBaUIsVUFBVSxXQUFXLGFBQWEsY0FBYyxjQUFjLGFBQWEsUUFBUSxRQUFRLFdBQVcsUUFBUSxZQUFZLFdBQVcsZUFBZSxpQkFBaUIsY0FBYyxpQkFBaUIsYUFBYSxpQkFBaUIsYUFBYSx5QkFBeUIsWUFBWSxhQUFhLHVCQUF1QixZQUFZLG1CQUFtQixpQkFBaUIsY0FBYyxrQkFBa0IsZUFBZSxvQkFBb0IscUJBQXFCLHdCQUF3QixZQUFZLFdBQVcsZUFBZSxjQUFjLGFBQWEsY0FBYyxlQUFlLGVBQWUsV0FBVyxlQUFlLGFBQWEsY0FBYyxrQkFBa0IsZUFBZSxnQkFBZ0IsWUFBWSxpQkFBaUIsZUFBZSxlQUFlLGFBQWEsYUFBYSxxQkFBcUIsZUFBZSxXQUFXLGdCQUFnQixrQkFBa0IsZ0JBQWdCLGFBQWEsZ0JBQWdCLGtCQUFrQixjQUFjLGFBQWEsY0FBYyxlQUFlLGVBQWUsdUJBQXVCLFdBQVcsa0JBQWtCLGNBQWMsaUJBQWlCLGtCQUFrQixpQkFBaUIsc0JBQXNCLFVBQVUsMEJBQTBCLG9CQUFvQixtQkFBbUIsaUJBQWlCLGFBQWEsVUFBVSxRQUFRLFlBQVksWUFBWSxhQUFhLFVBQVUsU0FBUyxpQkFBaUIsY0FBYyxZQUFZLFNBQVMsaUJBQWlCLHVCQUF1QixVQUFVLGlCQUFpQixRQUFRLGFBQWEsVUFBVSxRQUFRLGVBQWUsVUFBVSxXQUFXLFVBQVUsdUJBQXVCLFdBQVcsaUJBQWlCLGNBQWMsZUFBZSxhQUFhLFdBQVcsU0FBUyxXQUFXLFVBQVUsV0FBVyxPQUFPLGFBQWEsZUFBZSxRQUFRLGNBQWMsUUFBUSxnQkFBZ0Isc0JBQXNCLFVBQVUsUUFBUSxvQkFBb0IsU0FBUyxxQkFBcUIsV0FBVyxpQkFBaUIsWUFBWSxnQkFBZ0IsYUFBYSxRQUFRLG1CQUFtQixTQUFTLFVBQVUscUJBQXFCLHdCQUF3QixlQUFlLGtCQUFrQiwwQkFBMEIsMEJBQTBCLGlCQUFpQixTQUFTLFNBQVMsYUFBYSxZQUFZLFlBQVksYUFBYSxVQUFVLFlBQVksYUFBYSxVQUFVLGFBQWEsa0JBQWtCLGNBQWMsbUJBQW1CLGtCQUFrQixtQkFBbUIsaUJBQWlCLGtCQUFrQixTQUFTLFFBQVEsY0FBYyxhQUFhLFdBQVcsVUFBVSxhQUFhLE9BQU8sZUFBZSxXQUFXLHVCQUF1Qix3QkFBd0Isc0JBQXNCLG1CQUFtQixPQUFPLFFBQVEsZUFBZSxZQUFZLGVBQWUsZUFBZSxjQUFjLFlBQVksU0FBUyxVQUFVLFVBQVUsdUJBQXVCLGFBQWEsUUFBUSxjQUFjLFNBQVMsaUJBQWlCLFVBQVUsZUFBZSxXQUFXLGtCQUFrQixvQkFBb0IsMkJBQTJCLGtCQUFrQix5QkFBeUIsWUFBWSxXQUFXLFdBQVcsb0JBQW9CLGdCQUFnQixhQUFhLFVBQVUsWUFBWSxlQUFlLFdBQVcsZUFBZSxXQUFXLG9CQUFvQixnQkFBZ0IsY0FBYyxZQUFZLG9CQUFvQixzQkFBc0IsVUFBVSxjQUFjLG1CQUFtQixjQUFjLGVBQWUsZ0JBQWdCLGNBQWMsNEJBQTRCLGlCQUFpQixhQUFhLG9CQUFvQixnQkFBZ0IsYUFBYSxtQkFBbUIsY0FBYyxrQkFBa0IsY0FBYyxhQUFhLGtCQUFrQixpQkFBaUIsWUFBWSxrQkFBa0Isa0JBQWtCLFdBQVcsYUFBYSxZQUFZLGdCQUFnQixlQUFlLHNCQUFzQixvQkFBb0IsZUFBZSxrQkFBa0IsZUFBZSxhQUFhLGVBQWUsZUFBZSxpQkFBaUIsZ0JBQWdCLGtCQUFrQixtQkFBbUIsaUJBQWlCLGNBQWMsb0JBQW9CLHFCQUFxQixhQUFhLG1CQUFtQixjQUFjLGVBQWUsZUFBZSxlQUFlLFlBQVksYUFBYSxtQkFBbUIsZUFBZSxDQUFDLEVBQUUsWUFBWSxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsWUFBWSxVQUFVLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtubk4sVUFBVSxvQkFBQUEsUUFBVSxNQUFNLENBQUMsUUFBUSxPQUFPLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTTNDLFdBQVcsb0JBQUFBLFFBQVUsTUFBTTtBQUFBLE1BQ3pCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxNQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsTUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsTUFDNUIsS0FBSyxvQkFBQUEsUUFBVTtBQUFBLE1BQ2YsYUFBYSxvQkFBQUEsUUFBVTtBQUFBLElBQ3pCLENBQUM7QUFBQSxJQUNELFVBQVUsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQUEsSUFDcEMsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM1QixVQUFVLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTcEIsZUFBZSxvQkFBQUEsUUFBVTtBQUFBLElBQ3pCLFdBQVcsb0JBQUFBLFFBQVUsT0FBTztBQUFBLElBQzVCLFlBQVksb0JBQUFBLFFBQVU7QUFBQSxFQUN4Qjs7O0FDbktBLE1BQUFDLGtCQUFrQjtBQUNsQixNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCO0FBWHZCLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBZ0I1VCxNQUFJLG9CQUFvQjtBQUFBLElBQ3RCLE9BQU87QUFBQSxJQUNQLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxFQUNSO0FBQ08sTUFBSUMsU0FBUSxPQUFPLGlCQUFpQjtBQUNwQyxNQUFJLDJCQUEyQixTQUFTQywwQkFBeUJDLFFBQU07QUFDNUUsUUFBSSxZQUFZQSxPQUFLLFdBQ2pCLE9BQU9BLE9BQUssTUFDWixXQUFXQSxPQUFLLFVBQ2hCLGVBQWVBLE9BQUssY0FDcEIsVUFBVUEsT0FBSztBQUNuQixRQUFJLFNBQVM7QUFBQSxNQUNYLE9BQU8sV0FBVyxzQ0FBc0MsWUFBWTtBQUFBLE1BQ3BFLFVBQVUsV0FBVyx5Q0FBeUMsZUFBZTtBQUFBLE1BQzdFLE1BQU0sV0FBVyxxQ0FBcUMsV0FBVztBQUFBLE1BQ2pFLE1BQU0sV0FBVyxxQ0FBcUMsV0FBVztBQUFBLElBQ25FO0FBQ0EsUUFBSSxjQUFjLENBQUM7QUFFbkIsUUFBSSxnQkFBZ0IsQ0FBQyxVQUFVO0FBQzdCLGtCQUFZLE9BQU8sSUFBSSxPQUFPLFlBQVk7QUFDMUMsa0JBQVksZUFBZSxJQUFJO0FBQUEsSUFDakM7QUFFQSxXQUFPLElBQWMsZUFBZUgsWUFBUztBQUFBLE1BQzNDLGVBQVcsb0JBQUFJLFNBQVcsNEJBQTRCLFNBQVM7QUFBQSxNQUMzRCxPQUFPO0FBQUEsTUFDUCxjQUFjLE9BQU8sSUFBSTtBQUFBLE1BQ3pCLE9BQU8sV0FBVyxTQUFZLE9BQU8sSUFBSTtBQUFBLE1BQ3pDLFlBQVk7QUFBQSxNQUNaO0FBQUEsTUFDQSxrQkFBa0IscUJBQXFCLE9BQU8sSUFBSTtBQUFBLE1BQ2xELFVBQVUsa0JBQWtCLElBQUk7QUFBQSxJQUNsQyxHQUFHLFdBQVcsQ0FBQztBQUFBLEVBQ2pCO0FBQ0EsMkJBQXlCLFlBQVk7QUFBQSxJQUNuQyxNQUFNLG9CQUFBQyxRQUFVLElBQUk7QUFBQSxJQUNwQixVQUFVLG9CQUFBQSxRQUFVO0FBQUEsSUFDcEIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLEVBQzFCOzs7QUZ6REEsTUFBSUMsZUFBWSxDQUFDLGFBQWEsYUFBYSxjQUFjLGVBQWUsY0FBYyxpQkFBaUIsWUFBWTtBQUVuSCxXQUFTQyxVQUFRQyxTQUFRLGdCQUFnQjtBQUFFLFFBQUlDLFFBQU8sT0FBTyxLQUFLRCxPQUFNO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksVUFBVSxPQUFPLHNCQUFzQkEsT0FBTTtBQUFHLFVBQUksZ0JBQWdCO0FBQUUsa0JBQVUsUUFBUSxPQUFPLFNBQVUsS0FBSztBQUFFLGlCQUFPLE9BQU8seUJBQXlCQSxTQUFRLEdBQUcsRUFBRTtBQUFBLFFBQVksQ0FBQztBQUFBLE1BQUc7QUFBRSxNQUFBQyxNQUFLLEtBQUssTUFBTUEsT0FBTSxPQUFPO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUV4VixXQUFTQyxnQkFBYyxRQUFRO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFVBQUksU0FBUyxVQUFVLENBQUMsS0FBSyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFBRyxVQUFJLElBQUksR0FBRztBQUFFLFFBQUFILFVBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsVUFBQUksa0JBQWdCLFFBQVEsS0FBSyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUcsV0FBVyxPQUFPLDJCQUEyQjtBQUFFLGVBQU8saUJBQWlCLFFBQVEsT0FBTywwQkFBMEIsTUFBTSxDQUFDO0FBQUEsTUFBRyxPQUFPO0FBQUUsUUFBQUosVUFBUSxPQUFPLE1BQU0sQ0FBQyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsaUJBQU8sZUFBZSxRQUFRLEtBQUssT0FBTyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRXJoQixXQUFTSSxrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQUVoTixXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQW1CbFQsTUFBSSxvQkFBb0I7QUFDeEIsTUFBSSwyQkFBMkIsS0FBSyxNQUFNLG9CQUFvQixHQUFHO0FBQzFELE1BQUksZ0JBQWdCLFNBQVNDLGVBQWNDLFFBQU07QUFDdEQsUUFBSSxZQUFZQSxPQUFLLFdBQ2pCLGlCQUFpQkEsT0FBSyxXQUN0QixZQUFZLG1CQUFtQixTQUFTLElBQUksZ0JBQzVDLGtCQUFrQkEsT0FBSyxZQUN2QixhQUFhLG9CQUFvQixTQUFTLElBQUksaUJBQzlDLG1CQUFtQkEsT0FBSyxhQUN4QixjQUFjLHFCQUFxQixTQUFTLFdBQVk7QUFBQSxJQUFDLElBQUksa0JBQzdELGNBQWNBLE9BQUssWUFDbkIsZUFBZUEsT0FBSyxlQUFlLEdBQ25DLGtCQUFrQkEsT0FBSyxZQUN2QixhQUFhLG9CQUFvQixTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksaUJBQ3hELE9BQU9ILDRCQUF5QkcsUUFBTVYsWUFBUztBQUVuRCxRQUFJLGVBQWUsdUJBQXVCLFlBQVksQ0FBQyxDQUFDLFVBQVU7QUFFbEUsUUFBSSxhQUFhLGVBQWU7QUFFaEMsUUFBSSxZQUFZLFNBQVNXLFdBQVUsR0FBRyxXQUFXO0FBQy9DLFFBQUUsZUFBZTtBQUVqQixVQUFJLGNBQWM7QUFDaEIsWUFBSSxvQkFBb0IsU0FBUyxlQUFlLFlBQVk7QUFFNUQsWUFBSSxtQkFBbUI7QUFDckIsNEJBQWtCLE1BQU07QUFBQSxRQUMxQjtBQUFBLE1BQ0Y7QUFFQSxrQkFBWSxTQUFTO0FBQUEsSUFDdkI7QUFFQSxRQUFJLGNBQVUsb0JBQUFDLFNBQVcsaUJBQWlCLFNBQVM7QUFFbkQsUUFBSSxlQUFlLFlBQVksS0FBSyxlQUFlLElBQWMsMEJBQTBCO0FBQUEsTUFDekYsTUFBTTtBQUFBLE1BQ047QUFBQSxNQUNBLFNBQVMsU0FBUyxRQUFRLEdBQUc7QUFDM0IsZUFBTyxVQUFVLEdBQUcsQ0FBQztBQUFBLE1BQ3ZCO0FBQUEsTUFDQSxVQUFVLGVBQWU7QUFBQSxJQUMzQixDQUFDO0FBRUQsUUFBSSxpQkFBaUIsSUFBYywwQkFBMEI7QUFBQSxNQUMzRCxNQUFNO0FBQUEsTUFDTjtBQUFBLE1BQ0EsU0FBUyxTQUFTLFFBQVEsR0FBRztBQUMzQixlQUFPLFVBQVUsR0FBRyxhQUFhLENBQUM7QUFBQSxNQUNwQztBQUFBLE1BQ0EsVUFBVSxlQUFlO0FBQUEsSUFDM0IsQ0FBQztBQUVELFFBQUksYUFBYSxJQUFjLDBCQUEwQjtBQUFBLE1BQ3ZELE1BQU07QUFBQSxNQUNOO0FBQUEsTUFDQSxTQUFTLFNBQVMsUUFBUSxHQUFHO0FBQzNCLGVBQU8sVUFBVSxHQUFHLGFBQWEsQ0FBQztBQUFBLE1BQ3BDO0FBQUEsTUFDQSxVQUFVLGVBQWUsTUFBTSxlQUFlLFlBQVk7QUFBQSxJQUM1RCxDQUFDO0FBRUQsUUFBSSxjQUFjLFlBQVksS0FBSyxlQUFlLElBQWMsMEJBQTBCO0FBQUEsTUFDeEYsTUFBTTtBQUFBLE1BQ047QUFBQSxNQUNBLFNBQVMsU0FBUyxRQUFRLEdBQUc7QUFDM0IsZUFBTyxVQUFVLEdBQUcsWUFBWSxZQUFZLElBQUksRUFBRTtBQUFBLE1BQ3BEO0FBQUEsTUFDQSxVQUFVLGVBQWUsTUFBTSxlQUFlLFlBQVk7QUFBQSxJQUM1RCxDQUFDO0FBRUQsUUFBSTtBQUVKLFFBQUksV0FBVztBQUNiLFVBQUksb0JBQW9CO0FBQUEsUUFDdEI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBRUEsVUFBSSxZQUFZO0FBQ2QsMEJBQWtCLElBQWMsU0FBUztBQUFBLFVBQ3ZDLE1BQU07QUFBQSxVQUNOLFdBQVc7QUFBQSxRQUNiLEdBQUcsSUFBYyxTQUFTO0FBQUEsVUFDeEIsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFlBQ04sTUFBTSxJQUFjLFFBQVEsTUFBTSxhQUFhLENBQUM7QUFBQSxZQUNoRCxPQUFPLElBQWMsUUFBUSxNQUFNLFNBQVM7QUFBQSxVQUM5QztBQUFBLFFBQ0YsQ0FBQyxDQUFDO0FBQUEsTUFDSixPQUFPO0FBQ0wsWUFBSSxRQUFRLENBQUM7QUFDYixZQUFJLG1CQUFtQixLQUFLLElBQUksR0FBRyxLQUFLLElBQUksYUFBYSwwQkFBMEIsWUFBWSxpQkFBaUIsQ0FBQztBQUNqSCxZQUFJLGtCQUFrQixLQUFLLElBQUksV0FBVyxtQkFBbUIsaUJBQWlCO0FBRTlFLGlCQUFTLElBQUksa0JBQWtCLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixLQUFLLFNBQVM7QUFDM0UsZ0JBQU0sS0FBSyxJQUFjLHlCQUF5Qk4sWUFBUztBQUFBLFlBQ3pELFdBQVc7QUFBQSxZQUNYLEtBQUs7QUFBQSxVQUNQLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztBQUFBLFFBQ3hCO0FBRUEsWUFBSSxtQkFBbUIsQ0FBQztBQUV4QixZQUFJLG1CQUFtQixHQUFHO0FBQ3hCLDJCQUFpQixLQUFLLElBQWMseUJBQXlCQSxZQUFTO0FBQUEsWUFDcEUsV0FBVztBQUFBLFlBQ1gsS0FBSztBQUFBLFVBQ1AsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO0FBRXRCLGNBQUksbUJBQW1CLEtBQUsscUJBQXFCLEdBQUc7QUFDbEQsNkJBQWlCLEtBQUssSUFBYyxTQUFTO0FBQUEsY0FDM0MsS0FBSztBQUFBLGNBQ0wsT0FBTztBQUFBLGNBQ1AsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLGdCQUNOLFVBQVU7QUFBQSxjQUNaO0FBQUEsWUFDRixHQUFHLFNBQVUscUJBQXFCO0FBQ2hDLHFCQUFPLElBQWMsTUFBTTtBQUFBLGdCQUN6QixjQUFjO0FBQUEsZ0JBQ2QsV0FBVztBQUFBLGNBQ2IsR0FBRyxRQUFRO0FBQUEsWUFDYixDQUFDLENBQUM7QUFBQSxVQUNKLFdBQVcscUJBQXFCLEdBQUc7QUFDakMsNkJBQWlCLEtBQUssSUFBYyx5QkFBeUJBLFlBQVM7QUFBQSxjQUNwRSxXQUFXO0FBQUEsY0FDWCxLQUFLO0FBQUEsWUFDUCxHQUFHLGlCQUFpQixDQUFDLENBQUM7QUFBQSxVQUN4QjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLGtCQUFrQixDQUFDO0FBRXZCLFlBQUksa0JBQWtCLFdBQVc7QUFDL0IsY0FBSSxrQkFBa0IsTUFBTSxZQUFZLEdBQUc7QUFDekMsNEJBQWdCLEtBQUssSUFBYyx5QkFBeUJBLFlBQVM7QUFBQSxjQUNuRSxXQUFXO0FBQUEsY0FDWCxLQUFLO0FBQUEsWUFDUCxHQUFHLGlCQUFpQixDQUFDLENBQUM7QUFBQSxVQUN4QixXQUFXLGtCQUFrQixZQUFZLEdBQUc7QUFDMUMsNEJBQWdCLEtBQUssSUFBYyxTQUFTO0FBQUEsY0FDMUMsS0FBSztBQUFBLGNBQ0wsT0FBTztBQUFBLGNBQ1AsU0FBUztBQUFBLGNBQ1QsUUFBUTtBQUFBLGdCQUNOLFdBQVcsa0JBQWtCO0FBQUEsZ0JBQzdCLFVBQVUsWUFBWTtBQUFBLGNBQ3hCO0FBQUEsWUFDRixHQUFHLFNBQVUsb0JBQW9CO0FBQy9CLHFCQUFPLElBQWMsTUFBTTtBQUFBLGdCQUN6QixjQUFjO0FBQUEsZ0JBQ2QsV0FBVztBQUFBLGNBQ2IsR0FBRyxRQUFRO0FBQUEsWUFDYixDQUFDLENBQUM7QUFBQSxVQUNKO0FBRUEsMEJBQWdCLEtBQUssSUFBYyx5QkFBeUJBLFlBQVM7QUFBQSxZQUNuRSxXQUFXLFlBQVk7QUFBQSxZQUN2QixLQUFLLFlBQVk7QUFBQSxVQUNuQixHQUFHLGlCQUFpQixDQUFDLENBQUM7QUFBQSxRQUN4QjtBQUVBLFlBQUksa0JBQWtCO0FBRXRCLFlBQUksaUJBQWlCRixnQkFBY0EsZ0JBQWMsQ0FBQyxHQUFHLEtBQUssWUFBWSxLQUFLO0FBQUEsVUFDekUsY0FBYyxLQUFLLFlBQVk7QUFBQSxRQUNqQyxDQUFDLEdBQUcsS0FBSyxpQkFBaUIsS0FBSztBQUFBLFVBQzdCLG1CQUFtQixLQUFLLGlCQUFpQjtBQUFBLFFBQzNDLENBQUM7QUFFRCwwQkFBa0IsSUFBYyxNQUFNRSxZQUFTLENBQUMsR0FBRyxnQkFBZ0I7QUFBQSxVQUNqRSxXQUFXO0FBQUEsUUFDYixDQUFDLEdBQUcsa0JBQWtCLGlCQUFpQixlQUFlO0FBQUEsTUFDeEQ7QUFBQSxJQUNGO0FBR0EsUUFBSSxZQUFZLFdBQVcsc0JBQXNCLE1BQU07QUFDdkQsUUFBSSxZQUFZLFdBQVcsc0JBQXNCLE1BQU07QUFDdkQsUUFBSSxVQUFVLFdBQVcsb0JBQW9CLElBQUk7QUFDakQsUUFBSSxrQkFBa0IsV0FBVyw0QkFBNEIsWUFBWTtBQUN6RSxRQUFJLGVBQWUsV0FBVyw4QkFBOEIsVUFBVTtBQUd0RSxRQUFJLHVCQUF1QixTQUFTTyx3QkFBdUI7QUFDekQsVUFBSSxhQUFhO0FBQUksZUFBTyxHQUFHLE9BQU8sV0FBVyxHQUFHLEVBQUUsT0FBTyxLQUFLLElBQUksVUFBVSxHQUFHLEdBQUcsRUFBRSxPQUFPLFlBQVk7QUFDM0csVUFBSSxlQUFlO0FBQUksZUFBTyxHQUFHLE9BQU8sV0FBVyxHQUFHLEVBQUUsT0FBTyxTQUFTO0FBQ3hFLGFBQU8sR0FBRyxPQUFPLFdBQVcsR0FBRyxFQUFFLE9BQU8sYUFBYSxDQUFDO0FBQUEsSUFDeEQ7QUFHQSxRQUFJLDZCQUE2QixjQUFjLElBQUksa0JBQWtCLFVBQVUsU0FBUztBQUV4RixRQUFJLHNCQUFzQixHQUFHLE9BQU8scUJBQXFCLEdBQUcsR0FBRyxFQUFFLE9BQU8sU0FBUyxHQUFHLEVBQUUsT0FBTywwQkFBMEI7QUFDdkgsV0FBTyxJQUFjLE9BQU9QLFlBQVM7QUFBQSxNQUNuQyxXQUFXO0FBQUEsSUFDYixHQUFHLElBQUksR0FBRyxJQUFjLHFCQUFxQixNQUFNLElBQWMsUUFBUTtBQUFBLE1BQ3ZFLGVBQWU7QUFBQSxNQUNmLGlCQUFpQjtBQUFBLE1BQ2pCLE1BQU07QUFBQSxJQUNSLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxhQUFhLGdCQUFnQixpQkFBaUIsWUFBWSxVQUFVO0FBQUEsRUFDaEc7QUFDQSxnQkFBYyxZQUFZO0FBQUEsSUFDeEIsV0FBVyxvQkFBQVEsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTTVCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPckIsWUFBWSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3RCLGFBQWEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt2QixZQUFZLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLdEIsaUJBQWlCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU0zQixZQUFZLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsb0JBQUFBLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxJQUFJLFVBQVUsRUFBRSxVQUFVLENBQUM7QUFBQSxFQUNwSDtBQUVBLE1BQUksMEJBQTBCLFNBQVNDLHlCQUF3QkMsUUFBTztBQUNwRSxRQUFJLFlBQVlBLE9BQU0sV0FDbEIsZUFBZUEsT0FBTSxRQUNyQixTQUFTLGlCQUFpQixTQUFTLE9BQU8sY0FDMUMsYUFBYUEsT0FBTSxZQUNuQixZQUFZQSxPQUFNLFdBQ2xCLGVBQWVBLE9BQU0sY0FDckIsWUFBWUEsT0FBTSxXQUNsQixXQUFXQSxPQUFNO0FBRXJCLFFBQUksU0FBUyxJQUFjLHFCQUFxQjtBQUFBLE1BQzlDLFVBQVUsY0FBYztBQUFBLE1BQ3hCLFlBQVk7QUFBQSxNQUNaLFNBQVMsU0FBUyxRQUFRLEdBQUc7QUFDM0IsZUFBTyxVQUFVLEdBQUcsU0FBUztBQUFBLE1BQy9CO0FBQUEsTUFDQTtBQUFBLE1BQ0EsaUJBQWlCO0FBQUEsTUFDakI7QUFBQSxJQUNGLENBQUM7QUFFRCxRQUFJLFFBQVE7QUFDVixhQUFPLElBQWMsTUFBTTtBQUFBLFFBQ3pCLFdBQVc7QUFBQSxNQUNiLEdBQUcsTUFBTTtBQUFBLElBQ1g7QUFFQSxXQUFPO0FBQUEsRUFDVDs7O0FEbFRBLE1BQUlDLGVBQVksQ0FBQyxjQUFjLGdCQUFnQix1QkFBdUIsc0JBQXNCLHdCQUF3QixnQkFBZ0IsV0FBVztBQUUvSSxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyxpQkFBZSxLQUFLLEdBQUc7QUFBRSxXQUFPQyxrQkFBZ0IsR0FBRyxLQUFLQyx3QkFBc0IsS0FBSyxDQUFDLEtBQUtDLDhCQUE0QixLQUFLLENBQUMsS0FBS0MsbUJBQWlCO0FBQUEsRUFBRztBQUU3SixXQUFTQSxxQkFBbUI7QUFBRSxVQUFNLElBQUksVUFBVSwySUFBMkk7QUFBQSxFQUFHO0FBRWhNLFdBQVNELDhCQUE0QixHQUFHLFFBQVE7QUFBRSxRQUFJLENBQUM7QUFBRztBQUFRLFFBQUksT0FBTyxNQUFNO0FBQVUsYUFBT0Usb0JBQWtCLEdBQUcsTUFBTTtBQUFHLFFBQUksSUFBSSxPQUFPLFVBQVUsU0FBUyxLQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUFHLFFBQUksTUFBTSxZQUFZLEVBQUU7QUFBYSxVQUFJLEVBQUUsWUFBWTtBQUFNLFFBQUksTUFBTSxTQUFTLE1BQU07QUFBTyxhQUFPLE1BQU0sS0FBSyxDQUFDO0FBQUcsUUFBSSxNQUFNLGVBQWUsMkNBQTJDLEtBQUssQ0FBQztBQUFHLGFBQU9BLG9CQUFrQixHQUFHLE1BQU07QUFBQSxFQUFHO0FBRS9aLFdBQVNBLG9CQUFrQixLQUFLLEtBQUs7QUFBRSxRQUFJLE9BQU8sUUFBUSxNQUFNLElBQUk7QUFBUSxZQUFNLElBQUk7QUFBUSxhQUFTLElBQUksR0FBRyxPQUFPLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEtBQUs7QUFBRSxXQUFLLENBQUMsSUFBSSxJQUFJLENBQUM7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQU07QUFFdEwsV0FBU0gsd0JBQXNCLEtBQUssR0FBRztBQUFFLFFBQUksS0FBSyxPQUFPLE9BQU8sT0FBTyxPQUFPLFdBQVcsZUFBZSxJQUFJLE9BQU8sUUFBUSxLQUFLLElBQUksWUFBWTtBQUFHLFFBQUksTUFBTTtBQUFNO0FBQVEsUUFBSSxPQUFPLENBQUM7QUFBRyxRQUFJLEtBQUs7QUFBTSxRQUFJLEtBQUs7QUFBTyxRQUFJLElBQUk7QUFBSSxRQUFJO0FBQUUsV0FBSyxLQUFLLEdBQUcsS0FBSyxHQUFHLEdBQUcsRUFBRSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsT0FBTyxLQUFLLE1BQU07QUFBRSxhQUFLLEtBQUssR0FBRyxLQUFLO0FBQUcsWUFBSSxLQUFLLEtBQUssV0FBVztBQUFHO0FBQUEsTUFBTztBQUFBLElBQUUsU0FBUyxLQUFLO0FBQUUsV0FBSztBQUFNLFdBQUs7QUFBQSxJQUFLLFVBQUU7QUFBVSxVQUFJO0FBQUUsWUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLEtBQUs7QUFBTSxhQUFHLFFBQVEsRUFBRTtBQUFBLE1BQUcsVUFBRTtBQUFVLFlBQUk7QUFBSSxnQkFBTTtBQUFBLE1BQUk7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQU07QUFFaGdCLFdBQVNELGtCQUFnQixLQUFLO0FBQUUsUUFBSSxNQUFNLFFBQVEsR0FBRztBQUFHLGFBQU87QUFBQSxFQUFLO0FBRXBFLFdBQVNLLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBa0IzUyxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLFFBQU07QUFDaEUsUUFBSSxhQUFhQSxPQUFLLFlBQ2xCLG9CQUFvQkEsT0FBSyxjQUN6QixlQUFlLHNCQUFzQixTQUFTLEtBQUssbUJBQ25ELHdCQUF3QkEsT0FBSyxxQkFDN0Isc0JBQXNCLDBCQUEwQixTQUFTLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLHVCQUM3RSx3QkFBd0JBLE9BQUssb0JBQzdCLHFCQUFxQiwwQkFBMEIsU0FBUyxPQUFPLHVCQUMvRCx3QkFBd0JBLE9BQUssc0JBQzdCLHVCQUF1QiwwQkFBMEIsU0FBUyxXQUFZO0FBQUEsSUFBQyxJQUFJLHVCQUMzRSxlQUFlQSxPQUFLLGNBQ3BCLFlBQVlBLE9BQUssV0FDakIsT0FBT0gsNEJBQXlCRyxRQUFNWCxZQUFTO0FBRW5ELFFBQUksZ0JBQVksMEJBQVMsS0FBSyxHQUMxQixhQUFhRSxpQkFBZSxXQUFXLENBQUMsR0FDeEMsZ0JBQWdCLFdBQVcsQ0FBQyxHQUM1QixtQkFBbUIsV0FBVyxDQUFDO0FBRW5DLFFBQUksb0JBQWdCLDZCQUFZLFdBQVk7QUFDMUMsdUJBQWlCLFNBQVUsUUFBUTtBQUNqQyxlQUFPLENBQUM7QUFBQSxNQUNWLENBQUM7QUFBQSxJQUNILEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBSSxtQkFBZSw2QkFBWSxXQUFZO0FBQ3pDLHVCQUFpQixLQUFLO0FBQUEsSUFDeEIsR0FBRyxDQUFDLENBQUM7QUFFTCxRQUFJLFNBQVMsSUFBYyxnQkFBZ0I7QUFBQSxNQUN6QyxNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsTUFDUCxVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFDVixrQkFBa0I7QUFBQSxNQUNsQixTQUFTO0FBQUEsSUFDWCxHQUFHLGlCQUFpQixJQUFJLElBQWMsU0FBUztBQUFBLE1BQzdDLE9BQU87QUFBQSxNQUNQLFNBQVM7QUFBQSxJQUNYLENBQUMsSUFBSSxJQUFjLGdCQUFBVSxRQUFNLFVBQVUsTUFBTSxJQUFjLFNBQVM7QUFBQSxNQUM5RCxPQUFPO0FBQUEsTUFDUCxTQUFTO0FBQUEsSUFDWCxDQUFDLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFFdkIsUUFBSSxZQUFRLHlCQUFRLFdBQVk7QUFDOUIsYUFBTyxvQkFBb0IsSUFBSSxTQUFVLG9CQUFvQjtBQUMzRCxlQUFPLElBQWMsb0JBQW9CO0FBQUEsVUFDdkMsS0FBSztBQUFBLFVBQ0wsTUFBTSx1QkFBdUIsZUFBZSxVQUFVO0FBQUEsVUFDdEQsU0FBUyxTQUFTLFVBQVU7QUFDMUIseUJBQWE7QUFDYixpQ0FBcUIsa0JBQWtCO0FBQUEsVUFDekM7QUFBQSxVQUNBLGtCQUFrQixtQkFBbUIsT0FBTyxvQkFBb0IsT0FBTztBQUFBLFFBQ3pFLEdBQUcsdUJBQXVCLElBQUksSUFBYyxTQUFTO0FBQUEsVUFDbkQsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQyxJQUFJLElBQWMsU0FBUztBQUFBLFVBQzFCLE9BQU87QUFBQSxVQUNQLFFBQVE7QUFBQSxZQUNOLGFBQWE7QUFBQSxVQUNmO0FBQUEsVUFDQSxTQUFTO0FBQUEsUUFDWCxDQUFDLENBQUM7QUFBQSxNQUNKLENBQUM7QUFBQSxJQUNILEdBQUcsQ0FBQyxxQkFBcUIsY0FBYyxzQkFBc0IsWUFBWSxDQUFDO0FBRTFFLFFBQUksc0JBQXNCLElBQWMsWUFBWTtBQUFBLE1BQ2xEO0FBQUEsTUFDQSxRQUFRO0FBQUEsTUFDUjtBQUFBLE1BQ0Esa0JBQWtCO0FBQUEsTUFDbEIsZ0JBQWdCO0FBQUEsSUFDbEIsR0FBRyxJQUFjLHFCQUFxQjtBQUFBLE1BQ3BDO0FBQUEsSUFDRixDQUFDLENBQUM7QUFFRixXQUFPLElBQWMsY0FBYztBQUFBLE1BQ2pDLGdCQUFnQjtBQUFBLE1BQ2hCLFlBQVk7QUFBQSxNQUNaLFlBQVk7QUFBQSxNQUNaLE1BQU07QUFBQSxNQUNOLFlBQVk7QUFBQSxNQUNaLFdBQVc7QUFBQSxJQUNiLEdBQUcsSUFBYyxhQUFhO0FBQUEsTUFDNUIsTUFBTTtBQUFBLElBQ1IsR0FBRyxzQkFBc0IsbUJBQW1CLEdBQUcsSUFBYyxhQUFhO0FBQUEsTUFDeEUsTUFBTTtBQUFBLElBQ1IsR0FBRyxlQUFlLEtBQUssSUFBYyxlQUFlWCxZQUFTO0FBQUEsTUFDM0Q7QUFBQSxNQUNBO0FBQUEsTUFDQSxhQUFhO0FBQUEsSUFDZixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUNaO0FBQ0EscUJBQW1CLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUk3QixvQkFBb0Isb0JBQUFZLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTTlCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXhCLHFCQUFxQixvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLE9BQU8sVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2xFLHNCQUFzQixvQkFBQUEsUUFBVTtBQUFBLElBQ2hDLGNBQWMsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt4QixpQkFBaUIsb0JBQUFBLFFBQVU7QUFBQSxJQUMzQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsRUFDMUI7OztBSS9JQSxNQUFBQyxrQkFBa0I7QUFDbEIsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1QjtBQWpCdkIsTUFBSUMsZUFBWSxDQUFDLGNBQWMsWUFBWSxhQUFhLFlBQVksUUFBUSxVQUFVLE9BQU8sV0FBVyxRQUFRO0FBRWhILFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBZTNTLE1BQUksU0FBUyxTQUFTQyxRQUFPQyxRQUFNO0FBQ3hDLFFBQUksYUFBYUEsT0FBSyxZQUNsQixXQUFXQSxPQUFLLFVBQ2hCLFlBQVlBLE9BQUssV0FDakIsWUFBWUEsT0FBSyxVQUNqQixPQUFPQSxPQUFLLE1BQ1osU0FBU0EsT0FBSyxRQUNkLE1BQU1BLE9BQUssS0FDWCxVQUFVQSxPQUFLLFNBQ2ZDLFVBQVNELE9BQUssUUFDZCxPQUFPSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFbkQsUUFBSSxjQUFjLENBQUMsUUFBUSxhQUFhLElBQUk7QUFDNUMsUUFBSSxXQUFXLGFBQWEsQ0FBQztBQUM3QixRQUFJLGNBQVUsb0JBQUFPLFNBQVcsVUFBVSxXQUFXO0FBQUEsTUFDNUMscUJBQXFCO0FBQUEsTUFDckIscUJBQXFCO0FBQUEsSUFDdkIsQ0FBQztBQUVELFFBQUksY0FBYyxXQUFXLElBQWMsUUFBUTtBQUFBLE1BQ2pELFdBQVc7QUFBQSxJQUNiLEdBQUcsT0FBTztBQUVWLFFBQUksYUFBYUQsV0FBVSxJQUFjLFFBQVE7QUFBQSxNQUMvQyxXQUFXO0FBQUEsSUFDYixHQUFHQSxPQUFNO0FBSVQsUUFBSSxRQUFRLENBQUMsVUFBVTtBQUNyQixVQUFJLFlBQVksc0JBQXNCO0FBQUEsUUFDcEM7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUNELGFBQU8sSUFBYyxLQUFLTCxZQUFTO0FBQUEsUUFDakMsTUFBTTtBQUFBLFFBQ04saUJBQWlCLENBQUMsQ0FBQztBQUFBLFFBQ25CLFdBQVc7QUFBQSxRQUNYO0FBQUEsUUFDQTtBQUFBLFFBQ0EsS0FBSztBQUFBLE1BQ1AsR0FBRyxJQUFJLEdBQUcsYUFBYSxJQUFjLFFBQVE7QUFBQSxRQUMzQyxXQUFXO0FBQUEsTUFDYixHQUFHLFFBQVEsR0FBRyxVQUFVO0FBQUEsSUFDMUI7QUFFQSxXQUFPLElBQWMsVUFBVUEsWUFBUztBQUFBLE1BQ3RDLE1BQU07QUFBQSxNQUNOLGlCQUFpQixDQUFDLENBQUM7QUFBQSxNQUNuQixNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsTUFDWDtBQUFBLElBQ0YsR0FBRyxJQUFJLEdBQUcsYUFBYSxJQUFjLFFBQVE7QUFBQSxNQUMzQyxXQUFXO0FBQUEsSUFDYixHQUFHLFFBQVEsR0FBRyxVQUFVO0FBQUEsRUFDMUI7QUFDQSxTQUFPLFlBQVk7QUFBQSxJQUNqQixZQUFZLG9CQUFBTyxRQUFVO0FBQUEsSUFDdEIsVUFBVSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVdwQixTQUFTLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBV25CLFFBQVEsb0JBQUFBLFFBQVU7QUFBQSxJQUNsQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLElBQzVCLE1BQU0sb0JBQUFBLFFBQVU7QUFBQSxJQUNoQixTQUFTLG9CQUFBQSxRQUFVO0FBQUEsRUFDckI7OztBQzdGQSxNQUFBQyxrQkFBa0M7QUFDbEMsTUFBQUMsc0JBQXVCO0FBaEJ2QixNQUFJQyxlQUFZLENBQUMsWUFBWSxhQUFhLGdCQUFnQixVQUFVLE1BQU07QUFFMUUsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhbFQsTUFBSUMsc0JBQXFCO0FBQUEsSUFDdkIsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLElBQ0gsSUFBSTtBQUFBLEVBQ047QUFDTyxNQUFJQyxVQUFRLE9BQU9ELG1CQUFrQjtBQUNyQyxNQUFJLFVBQXVCLGdEQUFXLFNBQVVFLFFBQU0sS0FBSztBQUNoRSxRQUFJLFdBQVdBLE9BQUssVUFDaEIsWUFBWUEsT0FBSyxXQUNqQixvQkFBb0JBLE9BQUssY0FDekIsZUFBZSxzQkFBc0IsU0FBUyxPQUFPLG1CQUNyRCxjQUFjQSxPQUFLLFFBQ25CLFNBQVMsZ0JBQWdCLFNBQVMsUUFBUSxhQUMxQyxZQUFZQSxPQUFLLE1BQ2pCQyxRQUFPLGNBQWMsU0FBUyxNQUFNLFdBQ3BDLE9BQU9MLDRCQUF5QkksUUFBTU4sWUFBUztBQUVuRCxRQUFJLGNBQVUsb0JBQUFRLFNBQVcsV0FBV0osb0JBQW1CRyxLQUFJLEdBQUc7QUFBQSxNQUM1RCxtQkFBbUI7QUFBQSxNQUNuQix5QkFBeUI7QUFBQSxJQUMzQixHQUFHLFNBQVM7QUFDWixXQUFPLElBQWMsT0FBT04sWUFBUztBQUFBLE1BQ25DO0FBQUEsTUFDQSxXQUFXO0FBQUEsSUFDYixHQUFHLFlBQVk7QUFBQSxNQUNiLE1BQU07QUFBQSxJQUNSLEdBQUcsSUFBSSxHQUFHLFFBQVE7QUFBQSxFQUNwQixDQUFDO0FBQ0QsVUFBUSxjQUFjOzs7QUNKdEIsTUFBQVEsa0JBQTRDO0FBQzVDLE1BQUFDLHNCQUFzQjtBQTdDdEIsV0FBU0MsVUFBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxVQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLE1BQUlFLGVBQVksQ0FBQyxhQUFhLFVBQVUsc0JBQXNCLGNBQWMsZUFBZSxRQUFRLFFBQVEsV0FBVztBQUF0SCxNQUNJQyxnQkFBYSxDQUFDLE1BQU0sUUFBUSxTQUFTO0FBRXpDLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLFVBQVFDLFNBQVEsZ0JBQWdCO0FBQUUsUUFBSUMsUUFBTyxPQUFPLEtBQUtELE9BQU07QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxVQUFVLE9BQU8sc0JBQXNCQSxPQUFNO0FBQUcsVUFBSSxnQkFBZ0I7QUFBRSxrQkFBVSxRQUFRLE9BQU8sU0FBVSxLQUFLO0FBQUUsaUJBQU8sT0FBTyx5QkFBeUJBLFNBQVEsR0FBRyxFQUFFO0FBQUEsUUFBWSxDQUFDO0FBQUEsTUFBRztBQUFFLE1BQUFDLE1BQUssS0FBSyxNQUFNQSxPQUFNLE9BQU87QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXhWLFdBQVNDLGdCQUFjLFFBQVE7QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsVUFBSSxTQUFTLFVBQVUsQ0FBQyxLQUFLLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFVBQUksSUFBSSxHQUFHO0FBQUUsUUFBQUgsVUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxVQUFBSSxrQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRyxXQUFXLE9BQU8sMkJBQTJCO0FBQUUsZUFBTyxpQkFBaUIsUUFBUSxPQUFPLDBCQUEwQixNQUFNLENBQUM7QUFBQSxNQUFHLE9BQU87QUFBRSxRQUFBSixVQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxpQkFBTyxlQUFlLFFBQVEsS0FBSyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFcmhCLFdBQVNLLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBRWxULFdBQVNDLGtCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxvQkFBa0IsUUFBUSxPQUFPO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUFFLFVBQUksYUFBYSxNQUFNLENBQUM7QUFBRyxpQkFBVyxhQUFhLFdBQVcsY0FBYztBQUFPLGlCQUFXLGVBQWU7QUFBTSxVQUFJLFdBQVc7QUFBWSxtQkFBVyxXQUFXO0FBQU0sYUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUU1VCxXQUFTQyxlQUFhLGFBQWEsWUFBWSxhQUFhO0FBQUUsUUFBSTtBQUFZLE1BQUFELG9CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUFHLFFBQUk7QUFBYSxNQUFBQSxvQkFBa0IsYUFBYSxXQUFXO0FBQUcsV0FBTztBQUFBLEVBQWE7QUFFdE4sV0FBU0UsWUFBVSxVQUFVLFlBQVk7QUFBRSxRQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUFFLFlBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLElBQUc7QUFBRSxhQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFHLFFBQUk7QUFBWSxNQUFBQyxrQkFBZ0IsVUFBVSxVQUFVO0FBQUEsRUFBRztBQUVoWSxXQUFTQSxrQkFBZ0IsR0FBRyxHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8sa0JBQWtCLFNBQVNBLGtCQUFnQkMsSUFBR0MsSUFBRztBQUFFLE1BQUFELEdBQUUsWUFBWUM7QUFBRyxhQUFPRDtBQUFBLElBQUc7QUFBRyxXQUFPRCxrQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFBRztBQUV6SyxXQUFTRyxlQUFhLFNBQVM7QUFBRSxRQUFJLDRCQUE0QkMsNEJBQTBCO0FBQUcsV0FBTyxTQUFTLHVCQUF1QjtBQUFFLFVBQUksUUFBUUMsa0JBQWdCLE9BQU8sR0FBRztBQUFRLFVBQUksMkJBQTJCO0FBQUUsWUFBSSxZQUFZQSxrQkFBZ0IsSUFBSSxFQUFFO0FBQWEsaUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFBRyxPQUFPO0FBQUUsaUJBQVMsTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBRSxhQUFPQyw2QkFBMkIsTUFBTSxNQUFNO0FBQUEsSUFBRztBQUFBLEVBQUc7QUFFeGEsV0FBU0EsNkJBQTJCQyxPQUFNLE1BQU07QUFBRSxRQUFJLFNBQVN2QixVQUFRLElBQUksTUFBTSxZQUFZLE9BQU8sU0FBUyxhQUFhO0FBQUUsYUFBTztBQUFBLElBQU0sV0FBVyxTQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksVUFBVSwwREFBMEQ7QUFBQSxJQUFHO0FBQUUsV0FBT3dCLHlCQUF1QkQsS0FBSTtBQUFBLEVBQUc7QUFFL1IsV0FBU0MseUJBQXVCRCxPQUFNO0FBQUUsUUFBSUEsVUFBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLGVBQWUsMkRBQTJEO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUVySyxXQUFTSCw4QkFBNEI7QUFBRSxRQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGFBQU87QUFBTyxRQUFJLFFBQVEsVUFBVTtBQUFNLGFBQU87QUFBTyxRQUFJLE9BQU8sVUFBVTtBQUFZLGFBQU87QUFBTSxRQUFJO0FBQUUsY0FBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxDQUFDLEdBQUcsV0FBWTtBQUFBLE1BQUMsQ0FBQyxDQUFDO0FBQUcsYUFBTztBQUFBLElBQU0sU0FBUyxHQUFHO0FBQUUsYUFBTztBQUFBLElBQU87QUFBQSxFQUFFO0FBRXhVLFdBQVNDLGtCQUFnQixHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLFNBQVNBLGtCQUFnQkosSUFBRztBQUFFLGFBQU9BLEdBQUUsYUFBYSxPQUFPLGVBQWVBLEVBQUM7QUFBQSxJQUFHO0FBQUcsV0FBT0ksa0JBQWdCLENBQUM7QUFBQSxFQUFHO0FBRTVNLFdBQVNaLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBb0J6TSxNQUFJLG1CQUFnQyx5QkFBVSxZQUFZO0FBQy9ELElBQUFnQixZQUFVQyxtQkFBa0IsVUFBVTtBQUV0QyxRQUFJLFNBQVNDLGVBQWFELGlCQUFnQjtBQUUxQyxhQUFTQSxrQkFBaUIsT0FBTztBQUMvQixVQUFJO0FBRUosTUFBQUUsa0JBQWdCLE1BQU1GLGlCQUFnQjtBQUV0QyxjQUFRLE9BQU8sS0FBSyxNQUFNLEtBQUs7QUFFL0IsTUFBQUcsa0JBQWdCQyx5QkFBdUIsS0FBSyxHQUFHLFVBQVUsZ0JBQWdCLEVBQUUsQ0FBQztBQUU1RSxNQUFBRCxrQkFBZ0JDLHlCQUF1QixLQUFLLEdBQUcsV0FBd0IsK0NBQVUsQ0FBQztBQUVsRixNQUFBRCxrQkFBZ0JDLHlCQUF1QixLQUFLLEdBQUcsWUFBWSxXQUFZO0FBQ3JFLFlBQUksWUFBWSxNQUFNLFFBQVEsUUFBUSxjQUFjLElBQUksT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBRXpGLGtCQUFVLE1BQU07QUFBQSxNQUNsQixDQUFDO0FBRUQsTUFBQUQsa0JBQWdCQyx5QkFBdUIsS0FBSyxHQUFHLG1CQUFtQixXQUFZO0FBQzVFLFlBQUksQ0FBQyxNQUFNLE1BQU0sV0FBVyxNQUFNLE1BQU0sY0FBYyxZQUFZO0FBR2hFLGdCQUFNLFNBQVM7QUFBQSxZQUNiLFNBQVM7QUFBQSxVQUNYLEdBQUcsV0FBWTtBQUNiLGtCQUFNLFNBQVM7QUFBQSxVQUNqQixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFELGtCQUFnQkMseUJBQXVCLEtBQUssR0FBRyxlQUFlLFNBQVUsV0FBVztBQUVqRixZQUFJLGdCQUFnQixVQUFVO0FBQzlCLFlBQUksZ0JBQWdCLFVBQVU7QUFFOUIsWUFBSSxjQUFjLFNBQVMsYUFBYSxNQUFNLE9BQU87QUFDbkQsZ0JBQU0sU0FBUztBQUFBLFlBQ2IsU0FBUztBQUFBLFVBQ1gsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBRCxrQkFBZ0JDLHlCQUF1QixLQUFLLEdBQUcsY0FBYyxTQUFVLGFBQWE7QUFDbEYsWUFBSSxjQUFjLE1BQU0sT0FDcEIsYUFBYSxZQUFZLFlBQ3pCLHNCQUFzQixZQUFZO0FBRXRDLFlBQUksWUFBWTtBQUNkLHFCQUFXLFdBQVc7QUFBQSxRQUN4QjtBQUdBLFlBQUksQ0FBQyxxQkFBcUI7QUFDeEIsZ0JBQU0sU0FBUztBQUFBLFlBQ2IsZUFBZSxZQUFZO0FBQUEsVUFDN0IsR0FBRyxXQUFZO0FBQ2Isa0JBQU0sU0FBUztBQUFBLFVBQ2pCLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRixDQUFDO0FBRUQsVUFBSSxxQkFBcUIsTUFBTSxvQkFDM0IsZUFBZSxNQUFNLGFBQ3JCLE9BQU8sTUFBTTtBQUVqQixVQUFJO0FBRUosVUFBSSxDQUFDLGNBQWM7QUFDakIsd0JBQWdCLHNCQUFzQixtQkFBbUIsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUFBLE1BQ3pFO0FBRUEsWUFBTSxRQUFRO0FBQUEsUUFDWjtBQUFBLFFBQ0EsU0FBUztBQUFBLE1BQ1g7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFDLGVBQWFMLG1CQUFrQixDQUFDO0FBQUEsTUFDOUIsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLG9CQUFvQjtBQUdsQyxZQUFJLEtBQUssUUFBUSxTQUFTO0FBRXhCLGVBQUssUUFBUSxRQUFRLGlCQUFpQixZQUFZLEtBQUssV0FBVztBQUFBLFFBQ3BFO0FBQUEsTUFDRjtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLHVCQUF1QjtBQUNyQyxZQUFJLEtBQUssUUFBUSxTQUFTO0FBRXhCLGVBQUssUUFBUSxRQUFRLG9CQUFvQixZQUFZLEtBQUssV0FBVztBQUFBLFFBQ3ZFO0FBQUEsTUFDRjtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTTSxVQUFTO0FBQ3ZCLFlBQUksU0FBUztBQUViLFlBQUksZUFBZSxLQUFLLE9BQ3BCLFlBQVksYUFBYSxXQUN6QixTQUFTLGFBQWEsUUFDdEIscUJBQXFCLGFBQWEsb0JBQ2xDLGFBQWEsYUFBYSxZQUMxQixzQkFBc0IsYUFBYSxhQUNuQ0MsUUFBTyxhQUFhLE1BQ3BCLE9BQU8sYUFBYSxNQUNwQixZQUFZLGFBQWEsV0FDekIsT0FBT0MsNEJBQXlCLGNBQWNDLFlBQVM7QUFHM0QsWUFBSSxjQUFjLHVCQUF1QixLQUFLLEtBQUssU0FBVSxLQUFLO0FBQ2hFLGlCQUFPLElBQUksT0FBTyxPQUFPLE1BQU07QUFBQSxRQUNqQyxDQUFDO0FBQ0QsWUFBSUMsU0FBTyxhQUNQLHFCQUFxQkEsT0FBSyxTQUMxQixnQkFBZ0JBLE9BQUs7QUFDekIsZUFBTyxJQUFjLE9BQU9DLFlBQVM7QUFBQSxVQUNuQztBQUFBLFFBQ0YsR0FBRyxJQUFJLEdBQUcsSUFBYyxTQUFTO0FBQUEsVUFDL0IsS0FBSyxLQUFLO0FBQUEsVUFDVjtBQUFBLFVBQ0EsTUFBTUo7QUFBQSxVQUNOLFNBQVMsS0FBSztBQUFBLFFBQ2hCLEdBQUcsS0FBSyxJQUFJLFNBQVUsS0FBSztBQUN6QixjQUFJLEtBQUssSUFBSSxJQUNULE9BQU8sSUFBSSxNQUNYLFVBQVUsSUFBSSxTQUNkLFdBQVdDLDRCQUF5QixLQUFLSSxhQUFVO0FBRXZELGNBQUksUUFBUUMsZ0JBQWNBLGdCQUFjO0FBQUEsWUFDdEMsS0FBSztBQUFBLFlBQ0w7QUFBQSxVQUNGLEdBQUcsUUFBUSxHQUFHLENBQUMsR0FBRztBQUFBLFlBQ2hCLFNBQVMsU0FBUyxVQUFVO0FBQzFCLHFCQUFPLE9BQU8sV0FBVyxHQUFHO0FBQUEsWUFDOUI7QUFBQSxZQUNBLFlBQVksUUFBUTtBQUFBLFlBQ3BCLGlCQUFpQixHQUFHLE9BQU8sT0FBTyxNQUFNO0FBQUEsVUFDMUMsQ0FBQztBQUVELGlCQUFPLElBQWMsUUFBUSxPQUFPLElBQUk7QUFBQSxRQUMxQyxDQUFDLENBQUMsR0FBRyxJQUFjLE9BQU87QUFBQSxVQUN4QixNQUFNO0FBQUEsVUFDTixJQUFJLEdBQUcsT0FBTyxLQUFLLE1BQU07QUFBQSxVQUN6QixtQkFBbUI7QUFBQSxRQUNyQixHQUFHLGtCQUFrQixDQUFDO0FBQUEsTUFDeEI7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUVGLFdBQU9iO0FBQUEsRUFDVCxFQUFFLHlCQUFTO0FBRVgsRUFBQUcsa0JBQWdCLGtCQUFrQixnQkFBZ0I7QUFBQSxJQUNoRCxXQUFXO0FBQUEsRUFDYixDQUFDO0FBRUQsbUJBQWlCLFlBQVk7QUFBQSxJQUMzQixXQUFXLG9CQUFBVyxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU81QixXQUFXLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxXQUFXLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2xELFFBQVEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTWxCLG9CQUFvQixvQkFBQUEsUUFBVSxNQUFNO0FBQUEsTUFDbEMsSUFBSSxvQkFBQUEsUUFBVSxPQUFPO0FBQUEsTUFDckIsTUFBTSxvQkFBQUEsUUFBVSxLQUFLO0FBQUEsTUFDckIsU0FBUyxvQkFBQUEsUUFBVSxLQUFLO0FBQUEsTUFDeEIsWUFBWSxvQkFBQUEsUUFBVTtBQUFBLE1BQ3RCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTXBCLFNBQVMsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTW5CLFFBQVEsb0JBQUFBLFFBQVU7QUFBQSxNQUNsQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsTUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLElBQzlCLENBQUM7QUFBQSxJQUNELFlBQVksb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt0QixhQUFhLG9CQUFBQSxRQUFVLE1BQU07QUFBQSxNQUMzQixJQUFJLG9CQUFBQSxRQUFVLE9BQU87QUFBQSxNQUNyQixNQUFNLG9CQUFBQSxRQUFVLEtBQUs7QUFBQSxNQUNyQixTQUFTLG9CQUFBQSxRQUFVLEtBQUs7QUFBQSxNQUN4QixZQUFZLG9CQUFBQSxRQUFVO0FBQUEsTUFDdEIsVUFBVSxvQkFBQUEsUUFBVTtBQUFBLE1BQ3BCLFNBQVMsb0JBQUFBLFFBQVU7QUFBQSxNQUNuQixRQUFRLG9CQUFBQSxRQUFVO0FBQUEsTUFDbEIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxNQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM5QixDQUFDO0FBQUEsSUFDRCxNQUFNLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTTNDLE1BQU0sb0JBQUFBLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxNQUFNO0FBQUEsTUFDdEMsSUFBSSxvQkFBQUEsUUFBVSxPQUFPO0FBQUEsTUFDckIsTUFBTSxvQkFBQUEsUUFBVSxLQUFLO0FBQUEsTUFDckIsU0FBUyxvQkFBQUEsUUFBVSxLQUFLO0FBQUEsTUFDeEIsWUFBWSxvQkFBQUEsUUFBVTtBQUFBLE1BQ3RCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQSxNQUNwQixTQUFTLG9CQUFBQSxRQUFVO0FBQUEsTUFDbkIsUUFBUSxvQkFBQUEsUUFBVTtBQUFBLE1BQ2xCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxNQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsTUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDOUIsQ0FBQyxFQUFFLFVBQVUsRUFBRTtBQUFBLEVBQ2pCOzs7QUN6UUEsTUFBQUMsa0JBQTBCO0FBQzFCLE1BQUFDLHNCQUFzQjtBQWhDdEIsV0FBU0MsVUFBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxVQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLFdBQVNFLGtCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxvQkFBa0IsUUFBUSxPQUFPO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUFFLFVBQUksYUFBYSxNQUFNLENBQUM7QUFBRyxpQkFBVyxhQUFhLFdBQVcsY0FBYztBQUFPLGlCQUFXLGVBQWU7QUFBTSxVQUFJLFdBQVc7QUFBWSxtQkFBVyxXQUFXO0FBQU0sYUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUU1VCxXQUFTQyxlQUFhLGFBQWEsWUFBWSxhQUFhO0FBQUUsUUFBSTtBQUFZLE1BQUFELG9CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUFHLFFBQUk7QUFBYSxNQUFBQSxvQkFBa0IsYUFBYSxXQUFXO0FBQUcsV0FBTztBQUFBLEVBQWE7QUFFdE4sV0FBU0UsWUFBVSxVQUFVLFlBQVk7QUFBRSxRQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUFFLFlBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLElBQUc7QUFBRSxhQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFHLFFBQUk7QUFBWSxNQUFBQyxrQkFBZ0IsVUFBVSxVQUFVO0FBQUEsRUFBRztBQUVoWSxXQUFTQSxrQkFBZ0IsR0FBRyxHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8sa0JBQWtCLFNBQVNBLGtCQUFnQkMsSUFBR0MsSUFBRztBQUFFLE1BQUFELEdBQUUsWUFBWUM7QUFBRyxhQUFPRDtBQUFBLElBQUc7QUFBRyxXQUFPRCxrQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFBRztBQUV6SyxXQUFTRyxlQUFhLFNBQVM7QUFBRSxRQUFJLDRCQUE0QkMsNEJBQTBCO0FBQUcsV0FBTyxTQUFTLHVCQUF1QjtBQUFFLFVBQUksUUFBUUMsa0JBQWdCLE9BQU8sR0FBRztBQUFRLFVBQUksMkJBQTJCO0FBQUUsWUFBSSxZQUFZQSxrQkFBZ0IsSUFBSSxFQUFFO0FBQWEsaUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFBRyxPQUFPO0FBQUUsaUJBQVMsTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBRSxhQUFPQyw2QkFBMkIsTUFBTSxNQUFNO0FBQUEsSUFBRztBQUFBLEVBQUc7QUFFeGEsV0FBU0EsNkJBQTJCQyxPQUFNLE1BQU07QUFBRSxRQUFJLFNBQVNiLFVBQVEsSUFBSSxNQUFNLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFBRSxhQUFPO0FBQUEsSUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLElBQUc7QUFBRSxXQUFPYyx5QkFBdUJELEtBQUk7QUFBQSxFQUFHO0FBRS9SLFdBQVNDLHlCQUF1QkQsT0FBTTtBQUFFLFFBQUlBLFVBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxlQUFlLDJEQUEyRDtBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFckssV0FBU0gsOEJBQTRCO0FBQUUsUUFBSSxPQUFPLFlBQVksZUFBZSxDQUFDLFFBQVE7QUFBVyxhQUFPO0FBQU8sUUFBSSxRQUFRLFVBQVU7QUFBTSxhQUFPO0FBQU8sUUFBSSxPQUFPLFVBQVU7QUFBWSxhQUFPO0FBQU0sUUFBSTtBQUFFLGNBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxVQUFVLFNBQVMsQ0FBQyxHQUFHLFdBQVk7QUFBQSxNQUFDLENBQUMsQ0FBQztBQUFHLGFBQU87QUFBQSxJQUFNLFNBQVMsR0FBRztBQUFFLGFBQU87QUFBQSxJQUFPO0FBQUEsRUFBRTtBQUV4VSxXQUFTQyxrQkFBZ0IsR0FBRztBQUFFLElBQUFBLG9CQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQixTQUFTQSxrQkFBZ0JKLElBQUc7QUFBRSxhQUFPQSxHQUFFLGFBQWEsT0FBTyxlQUFlQSxFQUFDO0FBQUEsSUFBRztBQUFHLFdBQU9JLGtCQUFnQixDQUFDO0FBQUEsRUFBRztBQUU1TSxXQUFTSSxrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQVd6TSxNQUFJLGlCQUE4Qix5QkFBVSxZQUFZO0FBQzdELElBQUFWLFlBQVVXLGlCQUFnQixVQUFVO0FBRXBDLFFBQUksU0FBU1AsZUFBYU8sZUFBYztBQUV4QyxhQUFTQSxnQkFBZSxPQUFPO0FBQzdCLFVBQUk7QUFFSixNQUFBZCxrQkFBZ0IsTUFBTWMsZUFBYztBQUVwQyxjQUFRLE9BQU8sS0FBSyxNQUFNLEtBQUs7QUFFL0IsTUFBQUQsa0JBQWdCRCx5QkFBdUIsS0FBSyxHQUFHLFdBQVcsTUFBTTtBQUVoRSxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsZUFBZSxJQUFJO0FBRWxFLE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxpQkFBaUIsV0FBWTtBQUMxRSxlQUFPLGFBQWEsTUFBTSxPQUFPO0FBQ2pDLGNBQU0sY0FBYztBQUNwQixjQUFNLFVBQVUsT0FBTyxXQUFXLE1BQU0sY0FBYyxNQUFNLE1BQU0sS0FBSztBQUFBLE1BQ3pFLENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsZ0JBQWdCLFdBQVk7QUFDekUsZUFBTyxhQUFhLE1BQU0sT0FBTztBQUNqQyxjQUFNLGNBQWM7QUFFcEIsY0FBTSxhQUFhO0FBQUEsTUFDckIsQ0FBQztBQUVELFlBQU0sUUFBUTtBQUFBLFFBQ1osUUFBUTtBQUFBLE1BQ1Y7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFWLGVBQWFZLGlCQUFnQixDQUFDO0FBQUEsTUFDNUIsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLGVBQWU7QUFDN0IsYUFBSyxTQUFTLFNBQVVDLFFBQU07QUFDNUIsY0FBSSxTQUFTQSxPQUFLO0FBQ2xCLGlCQUFPO0FBQUEsWUFDTCxRQUFRLENBQUM7QUFBQSxVQUNYO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLG9CQUFvQjtBQUNsQyxhQUFLLGNBQWM7QUFBQSxNQUNyQjtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLHdCQUF3QjtBQUN0QyxZQUFJLEtBQUssYUFBYTtBQUNwQixlQUFLLGNBQWM7QUFBQSxRQUNyQjtBQUVBLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsdUJBQXVCO0FBQ3JDLGFBQUssYUFBYTtBQUFBLE1BQ3BCO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMscUJBQXFCO0FBQ25DLGFBQUssY0FBYztBQUFBLE1BQ3JCO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVNDLFVBQVM7QUFDdkIsZUFBTyxDQUFDLEtBQUssY0FBYyxLQUFLLE1BQU0sV0FBVztBQUFBLE1BQ25EO0FBQUEsSUFDRixDQUFDLENBQUM7QUFFRixXQUFPRjtBQUFBLEVBQ1QsRUFBRSx5QkFBUztBQUVYLEVBQUFELGtCQUFnQixnQkFBZ0IsZ0JBQWdCO0FBQUEsSUFDOUMsT0FBTztBQUFBLEVBQ1QsQ0FBQztBQUVELGlCQUFlLFlBQVk7QUFBQSxJQUN6QixPQUFPLG9CQUFBSSxRQUFVLE9BQU87QUFBQSxFQUMxQjs7O0FDdkdBLE1BQUFDLGtCQUFrQjtBQUNsQixNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCOzs7QUNqQnZCLFdBQVNDLG9DQUFtQztBQUFFLFdBQU87QUFBQSxFQUFtTztBQVl4UixNQUFJQyxRQUFPLFFBQXdDO0FBQUEsSUFDakQsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLEVBQ1YsSUFBSTtBQUFBLElBQ0YsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsVUFBVUQ7QUFBQSxFQUNaO0FBRUEsTUFBSUUsU0FBUSxRQUF3QztBQUFBLElBQ2xELE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxFQUNWLElBQUk7QUFBQSxJQUNGLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLFVBQVVGO0FBQUEsRUFDWjtBQUVPLE1BQUksa0JBQWtCLFNBQVNHLGlCQUFnQixVQUFVO0FBQzlELFdBQU87QUFBQSxNQUNMLFdBQVdEO0FBQUE7QUFBQSxNQUVYLElBQWlCLG9CQUFJLFlBQVksVUFBVSxJQUFJLEdBQUcsYUFBYTtBQUFBLE1BQy9ELEdBQWdCLG9CQUFJLFlBQVksVUFBVSxHQUFHLEdBQUcsWUFBWTtBQUFBLE1BQzVELEdBQWdCLG9CQUFJLFlBQVksVUFBVSxHQUFHLEdBQUcsWUFBWTtBQUFBLE1BQzVELFNBQVNEO0FBQUEsSUFDWDtBQUFBLEVBQ0Y7OztBRHZDQSxNQUFJRyxlQUFZLENBQUMsWUFBWSxhQUFhLFNBQVMsVUFBVTtBQUU3RCxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWtCM1MsTUFBSSxZQUFZLFNBQVNDLFdBQVVDLFFBQU07QUFDOUMsUUFBSSxXQUFXQSxPQUFLLFVBQ2hCLFlBQVlBLE9BQUssV0FDakIsUUFBUUEsT0FBSyxPQUNiLGdCQUFnQkEsT0FBSyxVQUNyQixXQUFXLGtCQUFrQixTQUFTLE1BQU0sZUFDNUMsT0FBT0MsNEJBQXlCRCxRQUFNRSxZQUFTO0FBRW5ELFFBQUksV0FBVyxZQUFZO0FBQzNCLFFBQUlDLFVBQVMsZ0JBQWdCLFFBQVE7QUFDckMsUUFBSSxZQUFZLENBQUNBLFFBQU8sV0FBV0EsUUFBTyxRQUFRLENBQUM7QUFDbkQsUUFBSSxjQUFVLG9CQUFBQyxTQUFXLGFBQWEsU0FBUztBQUMvQyxXQUFPLElBQWMsT0FBT0MsWUFBUztBQUFBLE1BQ25DLEtBQUs7QUFBQSxNQUNMLFdBQVc7QUFBQSxJQUNiLEdBQUcsSUFBSSxHQUFHLElBQWMsY0FBYztBQUFBLE1BQ3BDLFlBQVk7QUFBQSxNQUNaLFlBQVk7QUFBQSxNQUNaLFlBQVk7QUFBQSxJQUNkLEdBQUcsSUFBYyxhQUFhO0FBQUEsTUFDNUIsTUFBTTtBQUFBLElBQ1IsR0FBRyxJQUFjLFNBQVM7QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTjtBQUFBLElBQ0YsQ0FBQyxDQUFDLEdBQUcsSUFBYyxhQUFhO0FBQUEsTUFDOUIsTUFBTTtBQUFBLElBQ1IsR0FBRyxRQUFRLENBQUMsQ0FBQztBQUFBLEVBQ2Y7QUFDQSxZQUFVLFlBQVk7QUFBQSxJQUNwQixXQUFXLG9CQUFBQyxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU81QixPQUFPLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsSUFBSSxVQUFVLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTWxGLFVBQVUsb0JBQUFBLFFBQVU7QUFBQSxFQUN0Qjs7O0FFcENBLE1BQUFDLGtCQUFnQztBQUNoQyxNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCOzs7QUNkdkIsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7OztBQ3ZCdkIsV0FBU0Msb0NBQW1DO0FBQUUsV0FBTztBQUFBLEVBQW1PO0FBWXhSLE1BQUlDLFFBQU8sUUFBd0M7QUFBQSxJQUNqRCxNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsRUFDVixJQUFJO0FBQUEsSUFDRixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixVQUFVRDtBQUFBLEVBQ1o7QUFFTyxNQUFJLHdCQUF3QixTQUFTRSx1QkFBc0IsaUJBQWlCO0FBQ2pGLFFBQUksV0FBVyxnQkFBZ0I7QUFDL0IsV0FBTztBQUFBO0FBQUEsTUFFTCxpQkFBOEIsb0JBQUkseUJBQXlCLFdBQVcsYUFBYSxNQUFNLEdBQUcsS0FBSyxvQkFBb0IsUUFBUSxHQUFHLHNEQUFzRDtBQUFBLE1BQ3RMLGlCQUFpQkQ7QUFBQTtBQUFBLE1BRWpCLEdBQWdCLG9CQUFJLFdBQVcsU0FBUyxLQUFLLEdBQUcsWUFBWTtBQUFBLE1BQzVELEdBQWdCLG9CQUFJLFdBQVcsU0FBUyxLQUFLLE1BQU0sWUFBWTtBQUFBLE1BQy9ELEdBQWdCLG9CQUFJLFdBQVcsU0FBUyxLQUFLLEdBQUcsWUFBWTtBQUFBLE1BQzVELElBQWlCLG9CQUFJLFdBQVcsU0FBUyxLQUFLLElBQUksYUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSS9ELE1BQW1CLG9CQUFJLHVDQUF1QyxTQUFTLFdBQVcsR0FBRyx5QkFBeUIsWUFBWSxNQUFNLEtBQUssV0FBVyxlQUFlLEdBQUcsR0FBRyxLQUFLLFdBQVcsY0FBYyxHQUFHLEdBQUcsZ0JBQWdCO0FBQUEsTUFDek4sT0FBb0Isb0JBQUksdUNBQXVDLFNBQVMsV0FBVyxHQUFHLDBCQUEwQixZQUFZLE9BQU8sS0FBSyxXQUFXLGdCQUFnQixHQUFHLEdBQUcsS0FBSyxXQUFXLGNBQWMsR0FBRyxHQUFHLGlCQUFpQjtBQUFBO0FBQUEsTUFFOU4sV0FBd0Isb0JBQUksV0FBVyxTQUFTLE1BQU0sR0FBRyxvQkFBb0I7QUFBQSxJQUMvRTtBQUFBLEVBQ0Y7OztBQ3pCQSxNQUFBRSxrQkFBa0I7QUFDbEIsTUFBQUMsc0JBQXNCOzs7QUNoQnRCLFdBQVNDLG9DQUFtQztBQUFFLFdBQU87QUFBQSxFQUFtTztBQVlqUixNQUFJLHVCQUF1QixTQUFTQyxzQkFBcUIsaUJBQWlCO0FBQy9FLFFBQUksV0FBVyxnQkFBZ0I7QUFDL0IsV0FBTztBQUFBO0FBQUEsTUFFTCxnQkFBNkIsb0JBQUksOEtBQThLLGVBQWUsd0JBQXdCLFNBQVMsVUFBVSxNQUFNLEtBQUssU0FBUyxVQUFVLFlBQVksZ0dBQWdHLGFBQWEsVUFBVSxRQUFRLEdBQUcsMEJBQTBCO0FBQUEsTUFDL2MsV0FBd0Isb0JBQUksV0FBVyxTQUFTLE1BQU0sR0FBRyxvQkFBb0I7QUFBQSxNQUM3RSxhQUEwQixvQkFBSSxjQUFjLFVBQVUsaUJBQWlCLEdBQUcsR0FBRyx1QkFBdUI7QUFBQSxNQUNwRyxnQkFBNkIsb0JBQUksY0FBYyxVQUFVLGlCQUFpQixHQUFHLEdBQUcsMEJBQTBCO0FBQUEsSUFDNUc7QUFBQSxFQUNGO0FBRUEsTUFBSUMsU0FBTyxRQUF3QztBQUFBLElBQ2pELE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxFQUNWLElBQUk7QUFBQSxJQUNGLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLFVBQVVGO0FBQUEsRUFDWjtBQUVPLE1BQUksMkJBQTJCLFNBQVNHLDBCQUF5QkMsUUFBTztBQUM3RSxRQUFJLFdBQVdBLE9BQU07QUFDckIsV0FBTztBQUFBO0FBQUEsTUFFTCxzQkFBbUMsb0JBQUksc0JBQXNCLFdBQVcsT0FBTyxTQUFTLEtBQUssSUFBSSxHQUFHLEtBQUssV0FBVyxTQUFTLFNBQVMsS0FBSyxJQUFJLEdBQUcsK0JBQStCO0FBQUEsTUFDakwsZ0JBQTZCLG9CQUFJLDZCQUE2QixlQUFlLHdCQUF3QixTQUFTLFVBQVUsTUFBTSxLQUFLLFNBQVMsVUFBVSxZQUFZLDBCQUEwQjtBQUFBLE1BQzVMLGlCQUFpQkY7QUFBQSxJQUNuQjtBQUFBLEVBQ0Y7OztBRHhDQSxNQUFJRyxlQUFZLENBQUMsVUFBVSxhQUFhLFlBQVksV0FBVyxhQUFhLGdCQUFnQixlQUFlLHFCQUFxQjtBQUVoSSxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWlCbFQsTUFBSSx5QkFBeUI7QUFBQSxJQUMzQixPQUFPO0FBQUEsSUFDUCxNQUFNO0FBQUEsRUFDUjtBQUNPLE1BQUksaUJBQWlCLFNBQVNDLGdCQUFlQyxRQUFNO0FBQ3hELFFBQUksU0FBU0EsT0FBSyxRQUNkLFlBQVlBLE9BQUssV0FDakIsV0FBV0EsT0FBSyxVQUNoQixVQUFVQSxPQUFLLFNBQ2YsWUFBWUEsT0FBSyxXQUNqQixlQUFlQSxPQUFLLGNBQ3BCLGNBQWNBLE9BQUssYUFDbkIsd0JBQXdCQSxPQUFLLHFCQUM3QixzQkFBc0IsMEJBQTBCLFNBQVMsVUFBVSx1QkFDbkUsT0FBT0gsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRW5ELFFBQUksV0FBVyxZQUFZO0FBQzNCLFFBQUksZUFBZSxxQkFBcUIsUUFBUTtBQUNoRCxRQUFJLGtCQUFrQixDQUFDLGFBQWEsZ0JBQWdCLFlBQVksYUFBYSxpQkFBaUIsYUFBYSxhQUFhLENBQUMsZ0JBQWdCLGVBQWUsYUFBYSxTQUFTO0FBQzlLLFFBQUksYUFBYSx5QkFBeUIsUUFBUTtBQUNsRCxRQUFJLGdCQUFnQixDQUFDLFdBQVcsc0JBQXNCLFdBQVcsY0FBYztBQUMvRSxRQUFJLDZCQUE2QixXQUFXLGlDQUFpQyw2Q0FBNkM7QUFDMUgsUUFBSSw4QkFBOEIsV0FBVyxrQ0FBa0Msc0RBQXNEO0FBQ3JJLFFBQUksWUFBWSx1QkFBdUIsbUJBQW1CO0FBQzFELFdBQU8sSUFBYyxnQkFBQU0sUUFBTSxVQUFVLE1BQU0sSUFBYyxVQUFVTCxZQUFTO0FBQUEsTUFDMUUsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsSUFDRixHQUFHLElBQUksR0FBRztBQUFBO0FBQUEsSUFFVixJQUFjLHFCQUFxQixNQUFNLElBQWMsS0FBSyxNQUFNLDZCQUE2QixVQUFVLFVBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsSUFBYyxPQUFPO0FBQUEsTUFDaEssS0FBSztBQUFBLElBQ1AsR0FBRyxJQUFjLHFCQUFxQixNQUFNLElBQWMsS0FBSyxNQUFNLFVBQVUsWUFBTywwQkFBMEIsQ0FBQyxHQUFHLElBQWMsU0FBUztBQUFBLE1BQ3pJLE1BQU07QUFBQSxNQUNOLE9BQU87QUFBQSxJQUNULENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUNOO0FBQ0EsaUJBQWUsWUFBWTtBQUFBLElBQ3pCLFFBQVEsb0JBQUFNLFFBQVUsS0FBSztBQUFBLElBQ3ZCLFNBQVMsb0JBQUFBLFFBQVUsS0FBSztBQUFBLElBQ3hCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixhQUFhLG9CQUFBQSxRQUFVLEtBQUs7QUFBQSxJQUM1QixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsRUFDMUI7OztBRTVEQSxNQUFBQyxrQkFBa0M7QUFDbEMsTUFBQUMsc0JBQXNCOzs7QUNFZixNQUFJLHdCQUF3QixTQUFTQyx1QkFBc0IsaUJBQWlCO0FBQ2pGLFFBQUksV0FBVyxnQkFBZ0I7QUFDL0IsV0FBTztBQUFBO0FBQUEsTUFFTCxpQkFBOEIsb0JBQUksWUFBWSxpQkFBaUIsR0FBRyxHQUFHLEtBQUssV0FBVyxjQUFjLFNBQVMsS0FBSyxFQUFFLEdBQUcsMEJBQTBCO0FBQUEsTUFDaEosaUJBQThCLG9CQUFJLFVBQVUsU0FBUyxPQUFPLE9BQU8sMkJBQTJCLGVBQWUsU0FBUyxPQUFPLEtBQUssR0FBRyxHQUFHLDhCQUE4QixTQUFTLE9BQU8sT0FBTywyQkFBMkI7QUFBQSxJQUMxTjtBQUFBLEVBQ0Y7OztBRExPLE1BQUksa0JBQStCLGdEQUFXLFNBQVVDLFFBQU0sS0FBSztBQUN4RSxRQUFJLFVBQVVBLE9BQUssU0FDZix1QkFBdUJBLE9BQUssaUJBQzVCLGtCQUFrQix5QkFBeUIsU0FBUyxRQUFRO0FBQ2hFLFFBQUksV0FBVyxZQUFZO0FBQzNCLFFBQUlDLFVBQVMsc0JBQXNCLFFBQVE7QUFDM0MsUUFBSSxZQUFZLENBQUNBLFFBQU8saUJBQWlCLG1CQUFtQkEsUUFBTyxlQUFlO0FBQ2xGLFdBQU8sVUFBVSxJQUFjLGNBQWM7QUFBQSxNQUMzQztBQUFBLE1BQ0EsS0FBSztBQUFBLElBQ1AsR0FBRyxPQUFPLElBQUk7QUFBQSxFQUNoQixDQUFDO0FBQ0Qsa0JBQWdCLFlBQVk7QUFBQSxJQUMxQixpQkFBaUIsb0JBQUFDLFFBQVU7QUFBQSxFQUM3QjtBQUNBLGtCQUFnQixjQUFjOzs7QUozQjlCLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLGlCQUFlLEtBQUssR0FBRztBQUFFLFdBQU9DLGtCQUFnQixHQUFHLEtBQUtDLHdCQUFzQixLQUFLLENBQUMsS0FBS0MsOEJBQTRCLEtBQUssQ0FBQyxLQUFLQyxtQkFBaUI7QUFBQSxFQUFHO0FBRTdKLFdBQVNBLHFCQUFtQjtBQUFFLFVBQU0sSUFBSSxVQUFVLDJJQUEySTtBQUFBLEVBQUc7QUFFaE0sV0FBU0QsOEJBQTRCLEdBQUcsUUFBUTtBQUFFLFFBQUksQ0FBQztBQUFHO0FBQVEsUUFBSSxPQUFPLE1BQU07QUFBVSxhQUFPRSxvQkFBa0IsR0FBRyxNQUFNO0FBQUcsUUFBSSxJQUFJLE9BQU8sVUFBVSxTQUFTLEtBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQUcsUUFBSSxNQUFNLFlBQVksRUFBRTtBQUFhLFVBQUksRUFBRSxZQUFZO0FBQU0sUUFBSSxNQUFNLFNBQVMsTUFBTTtBQUFPLGFBQU8sTUFBTSxLQUFLLENBQUM7QUFBRyxRQUFJLE1BQU0sZUFBZSwyQ0FBMkMsS0FBSyxDQUFDO0FBQUcsYUFBT0Esb0JBQWtCLEdBQUcsTUFBTTtBQUFBLEVBQUc7QUFFL1osV0FBU0Esb0JBQWtCLEtBQUssS0FBSztBQUFFLFFBQUksT0FBTyxRQUFRLE1BQU0sSUFBSTtBQUFRLFlBQU0sSUFBSTtBQUFRLGFBQVMsSUFBSSxHQUFHLE9BQU8sSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssS0FBSztBQUFFLFdBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBTTtBQUV0TCxXQUFTSCx3QkFBc0IsS0FBSyxHQUFHO0FBQUUsUUFBSSxLQUFLLE9BQU8sT0FBTyxPQUFPLE9BQU8sV0FBVyxlQUFlLElBQUksT0FBTyxRQUFRLEtBQUssSUFBSSxZQUFZO0FBQUcsUUFBSSxNQUFNO0FBQU07QUFBUSxRQUFJLE9BQU8sQ0FBQztBQUFHLFFBQUksS0FBSztBQUFNLFFBQUksS0FBSztBQUFPLFFBQUksSUFBSTtBQUFJLFFBQUk7QUFBRSxXQUFLLEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxFQUFFLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxPQUFPLEtBQUssTUFBTTtBQUFFLGFBQUssS0FBSyxHQUFHLEtBQUs7QUFBRyxZQUFJLEtBQUssS0FBSyxXQUFXO0FBQUc7QUFBQSxNQUFPO0FBQUEsSUFBRSxTQUFTLEtBQUs7QUFBRSxXQUFLO0FBQU0sV0FBSztBQUFBLElBQUssVUFBRTtBQUFVLFVBQUk7QUFBRSxZQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsS0FBSztBQUFNLGFBQUcsUUFBUSxFQUFFO0FBQUEsTUFBRyxVQUFFO0FBQVUsWUFBSTtBQUFJLGdCQUFNO0FBQUEsTUFBSTtBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBTTtBQUVoZ0IsV0FBU0Qsa0JBQWdCLEtBQUs7QUFBRSxRQUFJLE1BQU0sUUFBUSxHQUFHO0FBQUcsYUFBTztBQUFBLEVBQUs7QUFrQjdELE1BQUksa0JBQWtCLFNBQVNLLGlCQUFnQkMsUUFBTTtBQUMxRCxRQUFJLE1BQU1BLE9BQUssS0FDWCxVQUFVQSxPQUFLLFNBQ2YsWUFBWUEsT0FBSyxXQUNqQixrQkFBa0JBLE9BQUssaUJBQ3ZCLFFBQVFBLE9BQUssT0FDYixTQUFTQSxPQUFLLFFBQ2QsV0FBV0EsT0FBSyxVQUNoQixrQkFBa0JBLE9BQUssaUJBQ3ZCLGVBQWVBLE9BQUssY0FDcEIsc0JBQXNCQSxPQUFLLHFCQUMzQixjQUFjQSxPQUFLO0FBRXZCLFFBQUksaUJBQWlCLFNBQVNDLGtCQUFpQjtBQUM3QyxzQkFBZ0IsSUFBSTtBQUFBLElBQ3RCO0FBRUEsUUFBSSxjQUFVLG9CQUFBQyxTQUFXLG1CQUFtQixnQkFBZ0IsYUFBYSxTQUFTO0FBQ2xGLFFBQUksV0FBVyxZQUFZO0FBQzNCLFFBQUlDLFVBQVMsc0JBQXNCLFFBQVE7QUFDM0MsUUFBSSxrQkFBa0IsQ0FBQ0EsUUFBTyxpQkFBaUIsU0FBU0EsUUFBTyxLQUFLLEdBQUcsVUFBVUEsUUFBTyxNQUFNLEdBQUcsbUJBQW1CQSxRQUFPLGlCQUFpQixlQUFlQSxRQUFPLFNBQVM7QUFFM0ssUUFBSSxnQkFBZ0IsYUFBYSxHQUM3QixpQkFBaUJWLGlCQUFlLGVBQWUsQ0FBQyxHQUNoRCxxQkFBcUIsZUFBZSxDQUFDLEdBQ3JDLHNCQUFzQixlQUFlLENBQUM7QUFFMUMsV0FBTyxJQUFjLFVBQVVELFlBQVM7QUFBQSxNQUN0QyxjQUFjO0FBQUEsSUFDaEIsR0FBRyxjQUFjO0FBQUEsTUFDZixXQUFXO0FBQUEsTUFDWCxLQUFLO0FBQUEsSUFDUCxDQUFDLEdBQUcsa0JBQWtCLElBQWMsZ0JBQUFZLFFBQU0sVUFBVSxNQUFNLElBQWMsZ0JBQWdCO0FBQUEsTUFDdEYsUUFBUSxDQUFDLENBQUM7QUFBQSxNQUNWO0FBQUEsTUFDQSxTQUFTO0FBQUEsTUFDVCxrQkFBa0I7QUFBQSxNQUNsQjtBQUFBLE1BQ0E7QUFBQSxJQUNGLEdBQUcsUUFBUSxDQUFDLElBQUksVUFBVSxJQUFjLGlCQUFpQjtBQUFBLE1BQ3ZELEtBQUs7QUFBQSxNQUNMO0FBQUEsSUFDRixDQUFDLENBQUM7QUFBQSxFQUNKO0FBQ0Esa0JBQWdCLFlBQVk7QUFBQSxJQUMxQixhQUFhLG9CQUFBQyxRQUFVLEtBQUs7QUFBQSxJQUM1QixpQkFBaUIsb0JBQUFBLFFBQVUsS0FBSztBQUFBLEVBQ2xDOzs7QU1uRU8sTUFBSSxpQkFBaUIsU0FBU0MsZ0JBQWUsaUJBQWlCO0FBQ25FLFdBQU87QUFBQSxNQUNMLFVBQXVCLG9CQUFJLDBCQUEwQixXQUFXLGFBQWEsTUFBTSxHQUFHLDRCQUE0QixXQUFXLGlCQUFpQixDQUFDLEdBQUcsb0JBQW9CO0FBQUE7QUFBQSxNQUV0SyxjQUEyQixvQkFBSSxzQkFBc0IsV0FBVyxjQUFjLE1BQU0sR0FBRyxLQUFLLFdBQVcsYUFBYSxNQUFNLEdBQUcsdUJBQXVCO0FBQUEsTUFDcEosV0FBd0Isb0JBQUksVUFBVSxpQkFBaUIsR0FBRyxHQUFHLG9CQUFvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSWpGLEdBQWdCLG9CQUFJLFdBQVcsU0FBUyxPQUFPLEdBQUcsWUFBWTtBQUFBLE1BQzlELEdBQWdCLG9CQUFJLFdBQVcsU0FBUyxPQUFPLEdBQUcsWUFBWTtBQUFBLE1BQzlELEdBQWdCLG9CQUFJLFdBQVcsU0FBUyxPQUFPLEdBQUcsWUFBWTtBQUFBLE1BQzlELElBQWlCLG9CQUFJLFdBQVcsU0FBUyxPQUFPLEdBQUcsYUFBYTtBQUFBLE1BQ2hFLFVBQXVCLG9CQUFJLFdBQVcsU0FBUyxNQUFNLEdBQUcsbUJBQW1CO0FBQUEsTUFDM0UsV0FBd0Isb0JBQUksV0FBVyxTQUFTLE1BQU0sR0FBRyxvQkFBb0I7QUFBQSxNQUM3RSxZQUF5QixvQkFBSSxXQUFXLFNBQVMsTUFBTSxHQUFHLHFCQUFxQjtBQUFBLElBQ2pGO0FBQUEsRUFDRjs7O0FDTkEsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7OztBQ3ZCdkIsTUFBSUM7QUFFSixXQUFTQyx3QkFBdUIsU0FBUyxLQUFLO0FBQUUsUUFBSSxDQUFDLEtBQUs7QUFBRSxZQUFNLFFBQVEsTUFBTSxDQUFDO0FBQUEsSUFBRztBQUFFLFdBQU8sT0FBTyxPQUFPLE9BQU8saUJBQWlCLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxPQUFPLE9BQU8sR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUEsRUFBRztBQVcvSyxNQUFJLGtDQUFrQyxTQUFTQyxpQ0FBZ0MsaUJBQWlCO0FBQ3JHLFFBQUksV0FBVyxnQkFBZ0I7QUFDL0IsV0FBTztBQUFBO0FBQUEsTUFFTCwyQkFBd0Msb0JBQUksV0FBVyxjQUFjLE1BQU0sR0FBRyxLQUFLLFdBQVcsYUFBYSxNQUFNLEdBQUcsS0FBSyxvQkFBb0IsUUFBUSxHQUFHLG1CQUFtQixlQUFlLGVBQWUsbUJBQW1CLFNBQVMsS0FBSyxLQUFLLEdBQUcsS0FBSyxTQUFTLFVBQVUsV0FBVyxLQUFLLFNBQVMsVUFBVSxRQUFRLG1HQUFtRztBQUFBO0FBQUEsTUFFeFosV0FBd0Isb0JBQUksV0FBVyxTQUFTLE1BQU0sR0FBRyxvQkFBb0I7QUFBQSxJQUMvRTtBQUFBLEVBQ0Y7QUFFQSxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLE9BQU07QUFDekQsV0FBTyxVQUFVSixxQkFBb0JBLG1CQUFrQkMsd0JBQXVCLENBQUMseURBQXlELDRFQUE0RSxDQUFDLElBQUlHLEtBQUk7QUFBQSxFQUMvTjs7O0FEekJBLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLGlCQUFlLEtBQUssR0FBRztBQUFFLFdBQU9DLGtCQUFnQixHQUFHLEtBQUtDLHdCQUFzQixLQUFLLENBQUMsS0FBS0MsOEJBQTRCLEtBQUssQ0FBQyxLQUFLQyxtQkFBaUI7QUFBQSxFQUFHO0FBRTdKLFdBQVNBLHFCQUFtQjtBQUFFLFVBQU0sSUFBSSxVQUFVLDJJQUEySTtBQUFBLEVBQUc7QUFFaE0sV0FBU0QsOEJBQTRCLEdBQUcsUUFBUTtBQUFFLFFBQUksQ0FBQztBQUFHO0FBQVEsUUFBSSxPQUFPLE1BQU07QUFBVSxhQUFPRSxvQkFBa0IsR0FBRyxNQUFNO0FBQUcsUUFBSSxJQUFJLE9BQU8sVUFBVSxTQUFTLEtBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQUcsUUFBSSxNQUFNLFlBQVksRUFBRTtBQUFhLFVBQUksRUFBRSxZQUFZO0FBQU0sUUFBSSxNQUFNLFNBQVMsTUFBTTtBQUFPLGFBQU8sTUFBTSxLQUFLLENBQUM7QUFBRyxRQUFJLE1BQU0sZUFBZSwyQ0FBMkMsS0FBSyxDQUFDO0FBQUcsYUFBT0Esb0JBQWtCLEdBQUcsTUFBTTtBQUFBLEVBQUc7QUFFL1osV0FBU0Esb0JBQWtCLEtBQUssS0FBSztBQUFFLFFBQUksT0FBTyxRQUFRLE1BQU0sSUFBSTtBQUFRLFlBQU0sSUFBSTtBQUFRLGFBQVMsSUFBSSxHQUFHLE9BQU8sSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssS0FBSztBQUFFLFdBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBTTtBQUV0TCxXQUFTSCx3QkFBc0IsS0FBSyxHQUFHO0FBQUUsUUFBSSxLQUFLLE9BQU8sT0FBTyxPQUFPLE9BQU8sV0FBVyxlQUFlLElBQUksT0FBTyxRQUFRLEtBQUssSUFBSSxZQUFZO0FBQUcsUUFBSSxNQUFNO0FBQU07QUFBUSxRQUFJLE9BQU8sQ0FBQztBQUFHLFFBQUksS0FBSztBQUFNLFFBQUksS0FBSztBQUFPLFFBQUksSUFBSTtBQUFJLFFBQUk7QUFBRSxXQUFLLEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxFQUFFLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxPQUFPLEtBQUssTUFBTTtBQUFFLGFBQUssS0FBSyxHQUFHLEtBQUs7QUFBRyxZQUFJLEtBQUssS0FBSyxXQUFXO0FBQUc7QUFBQSxNQUFPO0FBQUEsSUFBRSxTQUFTLEtBQUs7QUFBRSxXQUFLO0FBQU0sV0FBSztBQUFBLElBQUssVUFBRTtBQUFVLFVBQUk7QUFBRSxZQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsS0FBSztBQUFNLGFBQUcsUUFBUSxFQUFFO0FBQUEsTUFBRyxVQUFFO0FBQVUsWUFBSTtBQUFJLGdCQUFNO0FBQUEsTUFBSTtBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBTTtBQUVoZ0IsV0FBU0Qsa0JBQWdCLEtBQUs7QUFBRSxRQUFJLE1BQU0sUUFBUSxHQUFHO0FBQUcsYUFBTztBQUFBLEVBQUs7QUFzQjdELE1BQUksNEJBQTRCLFNBQVNLLDJCQUEwQkMsUUFBTTtBQUM5RSxRQUFJLE1BQU1BLE9BQUssS0FDWCxZQUFZQSxPQUFLLFdBQ2pCLFVBQVVBLE9BQUssU0FDZixXQUFXQSxPQUFLLFVBQ2hCLGtCQUFrQkEsT0FBSyxpQkFDdkIsZUFBZUEsT0FBSyxjQUNwQixjQUFjQSxPQUFLLGFBQ25CLHNCQUFzQkEsT0FBSztBQUMvQixRQUFJLFdBQVcsWUFBWTtBQUMzQixRQUFJQyxVQUFTLGdDQUFnQyxRQUFRO0FBQ3JELFFBQUksWUFBWSxDQUFDQSxRQUFPLHlCQUF5QjtBQUNqRCxRQUFJLGNBQVUsb0JBQUFDLFNBQVcsNkJBQTZCLGdCQUFnQixhQUFhLFNBQVM7QUFFNUYsUUFBSSxZQUFZLFNBQVNDLFdBQVUsT0FBTztBQUN4QyxVQUFJLE1BQU0sUUFBUSxhQUFLLFFBQVE7QUFDN0IsY0FBTSxlQUFlO0FBQ3JCLGNBQU0sZ0JBQWdCO0FBQ3RCLHdCQUFnQjtBQUFBLE1BQ2xCO0FBQUEsSUFDRjtBQUVBLFFBQUksa0JBQWtCLFNBQVNDLG1CQUFrQjtBQUMvQyxzQkFBZ0IsS0FBSztBQUFBLElBQ3ZCO0FBRUEsUUFBSSxnQkFBZ0IsYUFBYSxHQUM3QixpQkFBaUJYLGlCQUFlLGVBQWUsQ0FBQyxHQUNoRCxxQkFBcUIsZUFBZSxDQUFDLEdBQ3JDLHNCQUFzQixlQUFlLENBQUM7QUFFMUMsUUFBSSxhQUFhLHlCQUF5QixRQUFRO0FBQ2xELFFBQUksZ0JBQWdCLENBQUMsV0FBVyxzQkFBc0IsV0FBVyxlQUFlO0FBQ2hGLFdBQU8sSUFBYyxnQkFBZ0I7QUFBQSxNQUNuQyxrQkFBa0I7QUFBQSxNQUNsQixTQUFTO0FBQUEsSUFDWCxHQUFHLElBQWMsY0FBYztBQUFBLE1BQzdCLHNCQUFzQjtBQUFBLElBQ3hCLEdBQUcsSUFBYyxnQkFBQVksUUFBTSxVQUFVLE1BQU0sSUFBYyxVQUFVYixZQUFTO0FBQUEsTUFDdEUsY0FBYztBQUFBLElBQ2hCLEdBQUcsY0FBYztBQUFBLE1BQ2YsV0FBVztBQUFBLE1BQ1gsS0FBSztBQUFBLElBQ1AsQ0FBQyxHQUFHLElBQWMsZ0JBQWdCO0FBQUEsTUFDaEMsUUFBUSxDQUFDLENBQUM7QUFBQSxNQUNWO0FBQUEsTUFDQSxTQUFTO0FBQUEsTUFDVDtBQUFBLE1BQ0Esa0JBQWtCO0FBQUEsTUFDbEIsY0FBYztBQUFBLE1BQ2Q7QUFBQSxNQUNBO0FBQUEsSUFDRixHQUFHLFFBQVEsR0FBRyxJQUFjLGlCQUFpQjtBQUFBLE1BQzNDO0FBQUEsTUFDQSxLQUFLO0FBQUEsTUFDTCxpQkFBaUI7QUFBQSxJQUNuQixDQUFDLENBQUMsR0FBRyxJQUFjLFNBQVM7QUFBQSxNQUMxQixNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsTUFDUCxLQUFLO0FBQUEsSUFDUCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDTjtBQUNBLDRCQUEwQixZQUFZO0FBQUEsSUFDcEMsYUFBYSxvQkFBQWMsUUFBVSxLQUFLO0FBQUEsSUFDNUIsaUJBQWlCLG9CQUFBQSxRQUFVLEtBQUs7QUFBQSxFQUNsQzs7O0FFNUZPLE1BQUlDLFVBQVEsQ0FBQyxLQUFLLEtBQUssS0FBSyxNQUFNLGFBQWEsVUFBVTs7O0FWUGhFLE1BQUlDLGVBQVksQ0FBQyxhQUFhLE9BQU8sT0FBTyxPQUFPLFFBQVEsYUFBYSxTQUFTLGdCQUFnQix1QkFBdUIsbUJBQW1CLFdBQVcsU0FBUyxRQUFRO0FBRXZLLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLFVBQVFDLFNBQVEsZ0JBQWdCO0FBQUUsUUFBSUMsUUFBTyxPQUFPLEtBQUtELE9BQU07QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxVQUFVLE9BQU8sc0JBQXNCQSxPQUFNO0FBQUcsVUFBSSxnQkFBZ0I7QUFBRSxrQkFBVSxRQUFRLE9BQU8sU0FBVSxLQUFLO0FBQUUsaUJBQU8sT0FBTyx5QkFBeUJBLFNBQVEsR0FBRyxFQUFFO0FBQUEsUUFBWSxDQUFDO0FBQUEsTUFBRztBQUFFLE1BQUFDLE1BQUssS0FBSyxNQUFNQSxPQUFNLE9BQU87QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXhWLFdBQVNDLGdCQUFjLFFBQVE7QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsVUFBSSxTQUFTLFVBQVUsQ0FBQyxLQUFLLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFVBQUksSUFBSSxHQUFHO0FBQUUsUUFBQUgsVUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxVQUFBSSxrQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRyxXQUFXLE9BQU8sMkJBQTJCO0FBQUUsZUFBTyxpQkFBaUIsUUFBUSxPQUFPLDBCQUEwQixNQUFNLENBQUM7QUFBQSxNQUFHLE9BQU87QUFBRSxRQUFBSixVQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxpQkFBTyxlQUFlLFFBQVEsS0FBSyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFcmhCLFdBQVNJLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBRWhOLFdBQVNDLGlCQUFlLEtBQUssR0FBRztBQUFFLFdBQU9DLGtCQUFnQixHQUFHLEtBQUtDLHdCQUFzQixLQUFLLENBQUMsS0FBS0MsOEJBQTRCLEtBQUssQ0FBQyxLQUFLQyxtQkFBaUI7QUFBQSxFQUFHO0FBRTdKLFdBQVNBLHFCQUFtQjtBQUFFLFVBQU0sSUFBSSxVQUFVLDJJQUEySTtBQUFBLEVBQUc7QUFFaE0sV0FBU0QsOEJBQTRCLEdBQUcsUUFBUTtBQUFFLFFBQUksQ0FBQztBQUFHO0FBQVEsUUFBSSxPQUFPLE1BQU07QUFBVSxhQUFPRSxvQkFBa0IsR0FBRyxNQUFNO0FBQUcsUUFBSSxJQUFJLE9BQU8sVUFBVSxTQUFTLEtBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFO0FBQUcsUUFBSSxNQUFNLFlBQVksRUFBRTtBQUFhLFVBQUksRUFBRSxZQUFZO0FBQU0sUUFBSSxNQUFNLFNBQVMsTUFBTTtBQUFPLGFBQU8sTUFBTSxLQUFLLENBQUM7QUFBRyxRQUFJLE1BQU0sZUFBZSwyQ0FBMkMsS0FBSyxDQUFDO0FBQUcsYUFBT0Esb0JBQWtCLEdBQUcsTUFBTTtBQUFBLEVBQUc7QUFFL1osV0FBU0Esb0JBQWtCLEtBQUssS0FBSztBQUFFLFFBQUksT0FBTyxRQUFRLE1BQU0sSUFBSTtBQUFRLFlBQU0sSUFBSTtBQUFRLGFBQVMsSUFBSSxHQUFHLE9BQU8sSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssS0FBSztBQUFFLFdBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBTTtBQUV0TCxXQUFTSCx3QkFBc0IsS0FBSyxHQUFHO0FBQUUsUUFBSSxLQUFLLE9BQU8sT0FBTyxPQUFPLE9BQU8sV0FBVyxlQUFlLElBQUksT0FBTyxRQUFRLEtBQUssSUFBSSxZQUFZO0FBQUcsUUFBSSxNQUFNO0FBQU07QUFBUSxRQUFJLE9BQU8sQ0FBQztBQUFHLFFBQUksS0FBSztBQUFNLFFBQUksS0FBSztBQUFPLFFBQUksSUFBSTtBQUFJLFFBQUk7QUFBRSxXQUFLLEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxFQUFFLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxPQUFPLEtBQUssTUFBTTtBQUFFLGFBQUssS0FBSyxHQUFHLEtBQUs7QUFBRyxZQUFJLEtBQUssS0FBSyxXQUFXO0FBQUc7QUFBQSxNQUFPO0FBQUEsSUFBRSxTQUFTLEtBQUs7QUFBRSxXQUFLO0FBQU0sV0FBSztBQUFBLElBQUssVUFBRTtBQUFVLFVBQUk7QUFBRSxZQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsS0FBSztBQUFNLGFBQUcsUUFBUSxFQUFFO0FBQUEsTUFBRyxVQUFFO0FBQVUsWUFBSTtBQUFJLGdCQUFNO0FBQUEsTUFBSTtBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBTTtBQUVoZ0IsV0FBU0Qsa0JBQWdCLEtBQUs7QUFBRSxRQUFJLE1BQU0sUUFBUSxHQUFHO0FBQUcsYUFBTztBQUFBLEVBQUs7QUFFcEUsV0FBU0ssNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFrQjNTLE1BQUksV0FBVyxTQUFTQyxVQUFTQyxRQUFNO0FBQzVDLFFBQUksWUFBWUEsT0FBSyxXQUNqQixNQUFNQSxPQUFLLEtBQ1gsTUFBTUEsT0FBSyxLQUNYLE1BQU1BLE9BQUssS0FDWCxZQUFZQSxPQUFLLE1BQ2pCQyxRQUFPLGNBQWMsU0FBUyxhQUFhLFdBQzNDLFlBQVlELE9BQUssV0FDakIsUUFBUUEsT0FBSyxPQUNiLGVBQWVBLE9BQUssY0FDcEIsc0JBQXNCQSxPQUFLLHFCQUMzQixrQkFBa0JBLE9BQUssaUJBQ3ZCLFVBQVVBLE9BQUssU0FDZixRQUFRQSxPQUFLLE9BQ2IsU0FBU0EsT0FBSyxRQUNkLE9BQU9ILDRCQUF5QkcsUUFBTWhCLFlBQVM7QUFFbkQsUUFBSSxnQkFBWSwwQkFBUyxLQUFLLEdBQzFCLGFBQWFPLGlCQUFlLFdBQVcsQ0FBQyxHQUN4QyxlQUFlLFdBQVcsQ0FBQyxHQUMzQixrQkFBa0IsV0FBVyxDQUFDO0FBRWxDLFFBQUksY0FBYyxPQUFPVSxVQUFTLFlBQVlDLFFBQU0sU0FBU0QsS0FBSTtBQUNqRSxRQUFJLGNBQVUsb0JBQUFFLFNBQVcsWUFBWSxTQUFTO0FBQzlDLFFBQUksV0FBVyxZQUFZO0FBQzNCLFFBQUlDLFVBQVMsZUFBZSxRQUFRO0FBQ3BDLFFBQUksWUFBWSxDQUFDQSxRQUFPLFVBQVUsZUFBZUEsUUFBT0gsS0FBSSxHQUFHLENBQUMsZUFBZUcsUUFBTyxZQUFZLGFBQWFBLFFBQU8sU0FBUztBQUMvSCxRQUFJLHdCQUF3QixDQUFDQSxRQUFPLFVBQVVBLFFBQU8sWUFBWTtBQUNqRSxRQUFJLGVBQWUsQ0FBQyxlQUFlSCxVQUFTO0FBQzVDLFFBQUksYUFBYSxPQUFPQSxVQUFTLFdBQVdBLFFBQU8sR0FBRyxPQUFPQSxPQUFNLElBQUk7QUFDdkUsUUFBSSwyQkFBMkIsZUFBZVosZ0JBQWNBLGdCQUFjLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQUEsTUFDeEYsVUFBVTtBQUFBLE1BQ1YsV0FBVztBQUFBLElBQ2IsQ0FBQyxJQUFJO0FBQ0wsUUFBSSxjQUFjWSxVQUFTO0FBQzNCLFFBQUkscUJBQXFCO0FBQUEsTUFDdkI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBRUEsUUFBSSxpQkFBaUJaLGdCQUFjO0FBQUEsTUFDakMsV0FBVztBQUFBLE1BQ1gsS0FBSyxPQUFPO0FBQUEsSUFDZCxHQUFHLElBQUk7QUFFUCxXQUFPLElBQWMsZ0JBQUFnQixRQUFNLFVBQVUsTUFBTSxJQUFjLGlCQUFpQixvQkFBb0IsSUFBYyxPQUFPcEIsWUFBUztBQUFBLE1BQzFIO0FBQUEsTUFDQSxLQUFLO0FBQUEsTUFDTCxPQUFPO0FBQUEsSUFDVCxHQUFHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsbUJBQW1CLGdCQUFnQixJQUFjLDJCQUEyQixvQkFBb0IsSUFBYyxPQUFPQSxZQUFTO0FBQUEsTUFDbEo7QUFBQSxNQUNBLEtBQUs7QUFBQSxNQUNMO0FBQUEsSUFDRixHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUN0QjtBQUNBLFdBQVMsWUFBWTtBQUFBLElBQ25CLFdBQVcsb0JBQUFxQixRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzVCLEtBQUssb0JBQUFBLFFBQVU7QUFBQSxJQUNmLEtBQUssb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFVZixLQUFLLG9CQUFBQSxRQUFVLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt0QixTQUFTLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT25CLE1BQU0sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLElBQUksWUFBWSxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsT0FBTyxVQUFVLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUs5RyxPQUFPLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLakIsUUFBUSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2xCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtyQixpQkFBaUIsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTTNCLHFCQUFxQixvQkFBQUEsUUFBVSxNQUFNLENBQUMsU0FBUyxNQUFNLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt0RCxjQUFjLG9CQUFBQSxRQUFVO0FBQUEsRUFDMUI7OztBV2pLQSxNQUFBQyxrQkFBa0I7OztBQ0FsQixNQUFBQyxrQkFBa0I7QUFJbEIsTUFBSSxlQUE0QixvQkFBSSx5QkFBeUIsb0JBQW9CLEdBQUcsd0JBQXdCO0FBQ3JHLE1BQUksb0JBQW9CLFNBQVNDLHFCQUFvQjtBQUMxRCxXQUFPLElBQWMsUUFBUTtBQUFBLE1BQzNCLFFBQVE7QUFBQSxJQUNWLENBQUM7QUFBQSxFQUNIOzs7QUNUQSxNQUFBQyxrQkFBa0I7QUFHWCxNQUFJLG1CQUFtQixTQUFTQyxrQkFBaUJDLFFBQU07QUFDNUQsUUFBSSxRQUFRQSxPQUFLLE9BQ2IsV0FBV0EsT0FBSztBQUNwQixXQUFPLFlBQVksUUFBUSxJQUFjLGVBQWU7QUFBQSxNQUN0RCxPQUFPO0FBQUEsSUFDVCxHQUFHLFFBQVEsSUFBSSxJQUFjLGdCQUFBQyxRQUFNLFVBQVUsTUFBTSxRQUFRO0FBQUEsRUFDN0Q7OztBRkRBLE1BQUksdUJBQXVCLFNBQVNDLHNCQUFxQixLQUFLO0FBQzVELFdBQU8sSUFBSSxlQUFlLEtBQUs7QUFBQSxFQUNqQztBQUVPLE1BQUksY0FBYyxTQUFTQyxhQUFZQyxRQUFNO0FBQ2xELFFBQUksUUFBUUEsT0FBSyxPQUNiLGFBQWFBLE9BQUssT0FDbEIsUUFBUSxlQUFlLFNBQVMsb0JBQW9CLFlBQ3BELG9CQUFvQkEsT0FBSyxjQUN6QixVQUFVLHNCQUFzQixTQUFTLGtCQUFrQixtQkFDM0Qsc0JBQXNCQSxPQUFLLGdCQUMzQixZQUFZLHdCQUF3QixTQUFTLG9CQUFvQixxQkFDakUsWUFBWUEsT0FBSyxXQUNqQixTQUFTQSxPQUFLLFFBQ2QsV0FBV0EsT0FBSztBQUNwQixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFFSixRQUFJLE9BQU87QUFDVCxVQUFJLHFCQUFxQixLQUFLLEdBQUc7QUFDL0IsdUJBQWU7QUFBQSxNQUNqQixPQUFPO0FBQ0wsdUJBQWUsTUFBTTtBQUNyQixzQkFBYyxNQUFNO0FBQ3BCLHVCQUFlLE1BQU07QUFBQSxNQUN2QjtBQUFBLElBQ0Y7QUFFQSxXQUFPLElBQWMsa0JBQWtCO0FBQUEsTUFDckMsT0FBTztBQUFBLElBQ1QsR0FBRyxJQUFjLGtCQUFrQjtBQUFBLE1BQ2pDLE9BQU8sVUFBVSxRQUFRLFVBQVUsU0FBUyxRQUFRO0FBQUEsTUFDcEQ7QUFBQSxNQUNBO0FBQUEsSUFDRixHQUFHLFNBQVMsSUFBYyxnQkFBQUMsUUFBTSxVQUFVLE1BQU0sSUFBYyxrQkFBa0I7QUFBQSxNQUM5RSxPQUFPO0FBQUEsTUFDUCxVQUFVLFdBQVcsSUFBYyxTQUFTLElBQUk7QUFBQSxJQUNsRCxDQUFDLEdBQUcsSUFBYyxrQkFBa0I7QUFBQSxNQUNsQyxPQUFPO0FBQUEsTUFDUCxVQUFVLGFBQWEsSUFBYyxXQUFXLElBQUk7QUFBQSxJQUN0RCxDQUFDLENBQUMsR0FBRyxJQUFjLDhCQUE4QixNQUFNLFFBQVEsQ0FBQyxDQUFDO0FBQUEsRUFDbkU7OztBR05BLE1BQUFDLGtCQUFnRDtBQUNoRCxNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCO0FBckR2QixXQUFTQyxVQUFRLEtBQUs7QUFBRTtBQUEyQixRQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sT0FBTyxhQUFhLFVBQVU7QUFBRSxNQUFBQSxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUcsT0FBTztBQUFFLE1BQUFELFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU9BLFFBQU8sT0FBTyxXQUFXLGNBQWNBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRztBQUFFLFdBQU9ELFVBQVEsR0FBRztBQUFBLEVBQUc7QUFFelgsTUFBSUUsZUFBWSxDQUFDLFlBQVksYUFBYSxTQUFTLFdBQVcsbUJBQW1CLHFCQUFxQjtBQUV0RyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUVsVCxXQUFTQyxvQkFBbUIsS0FBSztBQUFFLFdBQU9DLG9CQUFtQixHQUFHLEtBQUtDLGtCQUFpQixHQUFHLEtBQUtDLDhCQUE0QixHQUFHLEtBQUtDLG9CQUFtQjtBQUFBLEVBQUc7QUFFeEosV0FBU0Esc0JBQXFCO0FBQUUsVUFBTSxJQUFJLFVBQVUsc0lBQXNJO0FBQUEsRUFBRztBQUU3TCxXQUFTRCw4QkFBNEIsR0FBRyxRQUFRO0FBQUUsUUFBSSxDQUFDO0FBQUc7QUFBUSxRQUFJLE9BQU8sTUFBTTtBQUFVLGFBQU9FLG9CQUFrQixHQUFHLE1BQU07QUFBRyxRQUFJLElBQUksT0FBTyxVQUFVLFNBQVMsS0FBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFBRyxRQUFJLE1BQU0sWUFBWSxFQUFFO0FBQWEsVUFBSSxFQUFFLFlBQVk7QUFBTSxRQUFJLE1BQU0sU0FBUyxNQUFNO0FBQU8sYUFBTyxNQUFNLEtBQUssQ0FBQztBQUFHLFFBQUksTUFBTSxlQUFlLDJDQUEyQyxLQUFLLENBQUM7QUFBRyxhQUFPQSxvQkFBa0IsR0FBRyxNQUFNO0FBQUEsRUFBRztBQUUvWixXQUFTSCxrQkFBaUIsTUFBTTtBQUFFLFFBQUksT0FBTyxXQUFXLGVBQWUsS0FBSyxPQUFPLFFBQVEsS0FBSyxRQUFRLEtBQUssWUFBWSxLQUFLO0FBQU0sYUFBTyxNQUFNLEtBQUssSUFBSTtBQUFBLEVBQUc7QUFFN0osV0FBU0Qsb0JBQW1CLEtBQUs7QUFBRSxRQUFJLE1BQU0sUUFBUSxHQUFHO0FBQUcsYUFBT0ksb0JBQWtCLEdBQUc7QUFBQSxFQUFHO0FBRTFGLFdBQVNBLG9CQUFrQixLQUFLLEtBQUs7QUFBRSxRQUFJLE9BQU8sUUFBUSxNQUFNLElBQUk7QUFBUSxZQUFNLElBQUk7QUFBUSxhQUFTLElBQUksR0FBRyxPQUFPLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEtBQUs7QUFBRSxXQUFLLENBQUMsSUFBSSxJQUFJLENBQUM7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQU07QUFFdEwsV0FBU0Msa0JBQWdCLFVBQVUsYUFBYTtBQUFFLFFBQUksRUFBRSxvQkFBb0IsY0FBYztBQUFFLFlBQU0sSUFBSSxVQUFVLG1DQUFtQztBQUFBLElBQUc7QUFBQSxFQUFFO0FBRXhKLFdBQVNDLG9CQUFrQixRQUFRLE9BQU87QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUUsVUFBSSxhQUFhLE1BQU0sQ0FBQztBQUFHLGlCQUFXLGFBQWEsV0FBVyxjQUFjO0FBQU8saUJBQVcsZUFBZTtBQUFNLFVBQUksV0FBVztBQUFZLG1CQUFXLFdBQVc7QUFBTSxhQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUssVUFBVTtBQUFBLElBQUc7QUFBQSxFQUFFO0FBRTVULFdBQVNDLGVBQWEsYUFBYSxZQUFZLGFBQWE7QUFBRSxRQUFJO0FBQVksTUFBQUQsb0JBQWtCLFlBQVksV0FBVyxVQUFVO0FBQUcsUUFBSTtBQUFhLE1BQUFBLG9CQUFrQixhQUFhLFdBQVc7QUFBRyxXQUFPO0FBQUEsRUFBYTtBQUV0TixXQUFTRSxZQUFVLFVBQVUsWUFBWTtBQUFFLFFBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQUUsWUFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsSUFBRztBQUFFLGFBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRSxDQUFDO0FBQUcsUUFBSTtBQUFZLE1BQUFDLGtCQUFnQixVQUFVLFVBQVU7QUFBQSxFQUFHO0FBRWhZLFdBQVNBLGtCQUFnQixHQUFHLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxrQkFBa0IsU0FBU0Esa0JBQWdCQyxJQUFHQyxJQUFHO0FBQUUsTUFBQUQsR0FBRSxZQUFZQztBQUFHLGFBQU9EO0FBQUEsSUFBRztBQUFHLFdBQU9ELGtCQUFnQixHQUFHLENBQUM7QUFBQSxFQUFHO0FBRXpLLFdBQVNHLGVBQWEsU0FBUztBQUFFLFFBQUksNEJBQTRCQyw0QkFBMEI7QUFBRyxXQUFPLFNBQVMsdUJBQXVCO0FBQUUsVUFBSSxRQUFRQyxrQkFBZ0IsT0FBTyxHQUFHO0FBQVEsVUFBSSwyQkFBMkI7QUFBRSxZQUFJLFlBQVlBLGtCQUFnQixJQUFJLEVBQUU7QUFBYSxpQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUFHLE9BQU87QUFBRSxpQkFBUyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFFLGFBQU9DLDZCQUEyQixNQUFNLE1BQU07QUFBQSxJQUFHO0FBQUEsRUFBRztBQUV4YSxXQUFTQSw2QkFBMkJDLE9BQU0sTUFBTTtBQUFFLFFBQUksU0FBU3ZCLFVBQVEsSUFBSSxNQUFNLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFBRSxhQUFPO0FBQUEsSUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLElBQUc7QUFBRSxXQUFPd0IseUJBQXVCRCxLQUFJO0FBQUEsRUFBRztBQUUvUixXQUFTQyx5QkFBdUJELE9BQU07QUFBRSxRQUFJQSxVQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksZUFBZSwyREFBMkQ7QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXJLLFdBQVNILDhCQUE0QjtBQUFFLFFBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsYUFBTztBQUFPLFFBQUksUUFBUSxVQUFVO0FBQU0sYUFBTztBQUFPLFFBQUksT0FBTyxVQUFVO0FBQVksYUFBTztBQUFNLFFBQUk7QUFBRSxjQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLENBQUMsR0FBRyxXQUFZO0FBQUEsTUFBQyxDQUFDLENBQUM7QUFBRyxhQUFPO0FBQUEsSUFBTSxTQUFTLEdBQUc7QUFBRSxhQUFPO0FBQUEsSUFBTztBQUFBLEVBQUU7QUFFeFUsV0FBU0Msa0JBQWdCLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsU0FBU0Esa0JBQWdCSixJQUFHO0FBQUUsYUFBT0EsR0FBRSxhQUFhLE9BQU8sZUFBZUEsRUFBQztBQUFBLElBQUc7QUFBRyxXQUFPSSxrQkFBZ0IsQ0FBQztBQUFBLEVBQUc7QUFFNU0sV0FBU0ksa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUFtQmhOLE1BQUkscUJBQWtDLG1EQUFjLEVBQUU7QUFFdEQsV0FBUyxhQUFhQyxJQUFHO0FBQ3ZCLFdBQU9BLEdBQUUsZUFBZSxZQUFZO0FBQUEsRUFDdEM7QUFFQSxXQUFTLFVBQVUsUUFBUSxXQUFXLGFBQWE7QUFDakQsV0FBTyxXQUFXLFFBQVEsV0FBVyxTQUFTLFNBQVMsY0FBYyxLQUFLLFlBQVksSUFBSTtBQUFBLEVBQzVGO0FBRUEsTUFBSUMseUJBQXdCO0FBQUEsSUFDMUIsU0FBUztBQUFBLElBQ1QsWUFBWTtBQUFBLEVBQ2Q7QUFDTyxNQUFJLGNBQTJCLHlCQUFVLFlBQVk7QUFDMUQsSUFBQVosWUFBVWEsY0FBYSxVQUFVO0FBRWpDLFFBQUksU0FBU1QsZUFBYVMsWUFBVztBQUVyQyxhQUFTQSxlQUFjO0FBQ3JCLFVBQUk7QUFFSixNQUFBaEIsa0JBQWdCLE1BQU1nQixZQUFXO0FBRWpDLGVBQVMsT0FBTyxVQUFVLFFBQVEsT0FBTyxJQUFJLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUTtBQUN2RixhQUFLLElBQUksSUFBSSxVQUFVLElBQUk7QUFBQSxNQUM3QjtBQUVBLGNBQVEsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQztBQUVyRCxNQUFBSCxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsbUJBQW1CLGdCQUFnQixhQUFhLENBQUM7QUFFaEcsTUFBQUMsa0JBQWdCRCx5QkFBdUIsS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDLE1BQU0sT0FBTztBQUUxRSxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsU0FBUztBQUFBLFFBQ3RELFdBQVcsTUFBTSxNQUFNLGtCQUFrQixNQUFNLE1BQU0sTUFBTSxJQUFJLFNBQVVLLFFBQU07QUFDN0UsY0FBSSxLQUFLQSxPQUFLLElBQ1YsV0FBV0EsT0FBSztBQUNwQixpQkFBTyxXQUFXLEtBQUs7QUFBQSxRQUN6QixDQUFDLEVBQUUsT0FBTyxTQUFVSCxJQUFHO0FBQ3JCLGlCQUFPQSxNQUFLO0FBQUEsUUFDZCxDQUFDLElBQUksTUFBTSxNQUFNLE1BQU0sSUFBSSxTQUFVSSxRQUFPO0FBQzFDLGNBQUksS0FBS0EsT0FBTSxJQUNYLFdBQVdBLE9BQU0sVUFDakIsYUFBYUEsT0FBTTtBQUN2QixpQkFBTyxZQUFZLGFBQWEsS0FBSztBQUFBLFFBQ3ZDLENBQUMsRUFBRSxPQUFPLFNBQVVKLElBQUc7QUFDckIsaUJBQU9BLE1BQUs7QUFBQSxRQUNkLENBQUM7QUFBQSxRQUNELFlBQVk7QUFBQSxRQUNaLFFBQVEsVUFBVSxNQUFNLE1BQU0sSUFBSSxNQUFNLFNBQVMsTUFBTSxlQUFlO0FBQUEsUUFDdEUsa0JBQWtCLE1BQU0sTUFBTSxtQkFBbUI7QUFBQSxNQUNuRCxDQUFDO0FBRUQsTUFBQUQsa0JBQWdCRCx5QkFBdUIsS0FBSyxHQUFHLGFBQWEsQ0FBQyxDQUFDO0FBRTlELE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxnQkFBZ0IsU0FBVSxLQUFLLE9BQU87QUFDbkYsY0FBTSxVQUFVLEtBQUssSUFBSTtBQUFBLE1BQzNCLENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsbUJBQW1CLFNBQVVPLE9BQU07QUFDaEYsWUFBSSxpQkFBaUIsVUFBVSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sU0FBWSxVQUFVLENBQUMsSUFBSTtBQUV6RixZQUFJLFFBQVEsTUFBTSxNQUFNLFVBQVUsUUFBUUEsTUFBSyxFQUFFO0FBRWpELGNBQU0sU0FBUztBQUFBLFVBQ2Isa0JBQWtCO0FBQUEsUUFDcEIsQ0FBQztBQUVELFFBQUFBLE1BQUssYUFBYSxDQUFDQSxNQUFLO0FBRXhCLFlBQUksQ0FBQyxrQkFBa0JBLE1BQUssYUFBYSxRQUFXO0FBQ2xELFVBQUFBLE1BQUssU0FBUztBQUFBLFFBQ2hCO0FBRUEsWUFBSSxNQUFNLFdBQVdBLEtBQUksR0FBRztBQUUxQixnQkFBTSxTQUFTO0FBQUEsWUFDYixXQUFXLE1BQU0sTUFBTSxVQUFVLE9BQU8sU0FBVSxHQUFHLEdBQUc7QUFDdEQscUJBQU8sTUFBTTtBQUFBLFlBQ2YsQ0FBQztBQUFBLFVBQ0gsQ0FBQztBQUFBLFFBQ0gsT0FBTztBQUVMLGdCQUFNLFNBQVMsU0FBVSxXQUFXO0FBQ2xDLG1CQUFPO0FBQUEsY0FDTCxXQUFXLENBQUMsRUFBRSxPQUFPekIsb0JBQW1CLFVBQVUsU0FBUyxHQUFHLENBQUN5QixNQUFLLEVBQUUsQ0FBQztBQUFBLGNBQ3ZFLFlBQVlBLE1BQUs7QUFBQSxZQUNuQjtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBTixrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsY0FBYyxTQUFVTyxPQUFNO0FBQzNFLGVBQU8sTUFBTSxNQUFNLFVBQVUsU0FBU0EsTUFBSyxFQUFFO0FBQUEsTUFDL0MsQ0FBQztBQUVELE1BQUFOLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxhQUFhLFNBQVUsT0FBT08sT0FBTTtBQUNqRixnQkFBUSxNQUFNLEtBQUs7QUFBQSxVQUNqQixLQUFLLGFBQUssWUFDUjtBQUNFLGdCQUFJLGNBQWMsTUFBTSxLQUFLLFNBQVMsaUJBQWlCLHNDQUF1QyxPQUFPLE1BQU0sTUFBTSxRQUFRLElBQUssQ0FBQyxDQUFDO0FBQ2hJLGdCQUFJLGVBQWUsWUFBWSxRQUFRLE1BQU0sYUFBYTtBQUUxRCxnQkFBSSxlQUFlLElBQUk7QUFDckIsa0JBQUksYUFBYSxZQUFZLGVBQWUsQ0FBQztBQUU3QyxrQkFBSSxZQUFZO0FBQ2Qsc0JBQU0sZUFBZTtBQUNyQixzQkFBTSxnQkFBZ0I7QUFDdEIsMkJBQVcsTUFBTTtBQUFBLGNBQ25CO0FBQUEsWUFDRjtBQUVBO0FBQUEsVUFDRjtBQUFBLFVBRUYsS0FBSyxhQUFLLFVBQ1I7QUFDRSxnQkFBSSxlQUFlLE1BQU0sS0FBSyxTQUFTLGlCQUFpQixzQ0FBdUMsT0FBTyxNQUFNLE1BQU0sUUFBUSxJQUFLLENBQUMsQ0FBQztBQUVqSSxnQkFBSSxnQkFBZ0IsYUFBYSxRQUFRLE1BQU0sYUFBYTtBQUU1RCxnQkFBSSxnQkFBZ0IsSUFBSTtBQUN0QixrQkFBSSxhQUFhLGFBQWEsZ0JBQWdCLEVBQUU7QUFFaEQsa0JBQUksWUFBWTtBQUNkLHNCQUFNLGVBQWU7QUFDckIsc0JBQU0sZ0JBQWdCO0FBQ3RCLDJCQUFXLE1BQU07QUFBQSxjQUNuQjtBQUFBLFlBQ0Y7QUFFQTtBQUFBLFVBQ0Y7QUFBQSxVQUVGLEtBQUssYUFBSyxhQUNSO0FBQ0UsZ0JBQUksQ0FBQyxNQUFNLFdBQVdBLEtBQUksR0FBRztBQUMzQixvQkFBTSxlQUFlO0FBQ3JCLG9CQUFNLGdCQUFnQjtBQUV0QixvQkFBTSxnQkFBZ0JBLE9BQU0sSUFBSTtBQUFBLFlBQ2xDO0FBRUE7QUFBQSxVQUNGO0FBQUEsVUFFRixLQUFLLGFBQUssWUFDUjtBQUNFLGdCQUFJLE1BQU0sV0FBV0EsS0FBSSxHQUFHO0FBQzFCLG9CQUFNLGVBQWU7QUFDckIsb0JBQU0sZ0JBQWdCO0FBRXRCLG9CQUFNLGdCQUFnQkEsT0FBTSxJQUFJO0FBQUEsWUFDbEM7QUFBQSxVQUNGO0FBQUEsVUFFRjtBQUNFO0FBQUEsUUFDSjtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFOLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxxQkFBcUIsU0FBVSxPQUFPLE9BQU87QUFDMUYsWUFBSSxNQUFNLFFBQVEsYUFBSyxZQUFZO0FBQ2pDLGdCQUFNLGVBQWU7QUFDckIsZ0JBQU0sZ0JBQWdCO0FBRXRCLGdCQUFNLFVBQVUsS0FBSyxFQUFFLE1BQU07QUFBQSxRQUMvQjtBQUFBLE1BQ0YsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNUO0FBRUEsSUFBQVYsZUFBYWMsY0FBYSxDQUFDO0FBQUEsTUFDekIsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLG1CQUFtQixXQUFXO0FBQzVDLFlBQUksS0FBSyxNQUFNLE9BQU8sVUFBVSxJQUFJO0FBRWxDLGVBQUssU0FBUztBQUFBLFlBQ1osUUFBUSxVQUFVLEtBQUssTUFBTSxJQUFJLEtBQUssU0FBUyxLQUFLLGVBQWU7QUFBQSxVQUNyRSxDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBU0ksVUFBUztBQUN2QixZQUFJLFNBQVM7QUFFYixZQUFJLGNBQWMsS0FBSyxPQUNuQixXQUFXLFlBQVksVUFDdkIsWUFBWSxZQUFZLFdBQ3hCLFFBQVEsWUFBWSxPQUNwQixzQkFBc0IsWUFBWSxTQUNsQyxVQUFVLHdCQUF3QixTQUFTLFlBQVkscUJBQ3ZELGtCQUFrQixZQUFZLGlCQUM5QixzQkFBc0IsWUFBWSxxQkFDbEMsT0FBTzVCLDRCQUF5QixhQUFhRixZQUFTO0FBRzFELFlBQUksY0FBVSxvQkFBQStCLFNBQVcsZUFBZSxVQUFVTix1QkFBc0IsT0FBTyxJQUFJLE1BQU07QUFBQSxVQUN2RiwyQkFBMkI7QUFBQSxRQUM3QixHQUFHLFNBQVM7QUFDWixZQUFJLGlCQUFpQixHQUFHLE9BQU8sS0FBSyxNQUFNLFFBQVEsZUFBZTtBQUNqRSxlQUFPLElBQWMsbUJBQW1CLFVBQVU7QUFBQSxVQUNoRCxPQUFPLEtBQUssTUFBTTtBQUFBLFFBQ3BCLEdBQUcsSUFBYyxTQUFTO0FBQUEsVUFDeEIsTUFBTSxZQUFZLGVBQWUsTUFBTTtBQUFBLFVBQ3ZDLFdBQVc7QUFBQSxRQUNiLEdBQUcsQ0FBQyxLQUFLLFlBQVksSUFBYyxTQUFTO0FBQUEsVUFDMUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsR0FBRyxTQUFVLDRCQUE0QjtBQUN2QyxpQkFBTyxJQUFjLHFCQUFxQixNQUFNLElBQWMsS0FBSztBQUFBLFlBQ2pFLElBQUk7QUFBQSxVQUNOLEdBQUcsMEJBQTBCLENBQUM7QUFBQSxRQUNoQyxDQUFDLEdBQUcsSUFBYyxNQUFNeEIsWUFBUztBQUFBLFVBQy9CLFdBQVc7QUFBQSxVQUNYLElBQUksQ0FBQyxLQUFLLFdBQVcsS0FBSyxNQUFNLFNBQVM7QUFBQSxVQUN6QyxvQkFBb0IsQ0FBQyxLQUFLLFdBQVcsaUJBQWlCO0FBQUEsUUFDeEQsR0FBRyxJQUFJLEdBQUcsTUFBTSxJQUFJLFNBQVU0QixPQUFNLE9BQU87QUFDekMsY0FBSSxXQUFXQSxNQUFLO0FBRXBCLGNBQUksYUFBYSxPQUFPLGdCQUFnQixRQUFRO0FBRWhELGlCQUFPLElBQWMsY0FBYztBQUFBLFlBQ2pDLEtBQUtBLE1BQUssS0FBSztBQUFBLFlBQ2YsVUFBVSxPQUFPQSxNQUFLLFVBQVUsV0FBV0EsTUFBSyxRQUFRO0FBQUEsVUFDMUQsR0FBRyxTQUFVLEtBQUssV0FBVztBQUMzQixtQkFBTyxJQUFjLFNBQVM7QUFBQSxjQUM1QixLQUFLQSxNQUFLLEtBQUs7QUFBQSxjQUNmLE9BQU87QUFBQSxjQUNQLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxnQkFDTixXQUFXO0FBQUEsZ0JBQ1gsV0FBVyxhQUFhLElBQUksSUFBSSxLQUFLLFlBQVksSUFBSTtBQUFBLGNBQ3ZEO0FBQUEsWUFDRixHQUFHLFNBQVUsV0FBVztBQUN0QixrQkFBSSxRQUFRLGFBQWEsSUFBSSxJQUFJO0FBQUEsZ0JBQy9CLGNBQWM7QUFBQSxjQUNoQixJQUFJO0FBQUEsZ0JBQ0YsbUJBQW1CLEdBQUcsT0FBTyxVQUFVLEdBQUcsRUFBRSxPQUFPLEtBQUssaUJBQWlCLENBQUM7QUFBQSxjQUM1RTtBQUNBLGtCQUFJLGtCQUFjLG9CQUFBRSxTQUFXLHFCQUFxQixVQUFVTix1QkFBc0IsT0FBTyxJQUFJLE1BQU07QUFBQSxnQkFDakcsK0JBQStCLE9BQU8sV0FBV0ksS0FBSTtBQUFBLGNBQ3ZELENBQUM7QUFDRCxrQkFBSSx3QkFBb0Isb0JBQUFFLFNBQVcsMEJBQTBCLHVCQUF1QkYsTUFBSyxXQUFXLHVDQUF1QyxNQUFNLE9BQU8sTUFBTSxlQUFlQSxNQUFLLEtBQUssOEJBQThCLE1BQU1BLE1BQUssWUFBWUEsTUFBSyxZQUFZLElBQUk7QUFDalEscUJBQU8sSUFBYyxnQkFBQUcsUUFBTSxVQUFVLE1BQU0sSUFBYyxNQUFNO0FBQUEsZ0JBQzdELFdBQVc7QUFBQSxjQUNiLEdBQUcsSUFBYyxVQUFVO0FBQUEsZ0JBQ3pCLElBQUk7QUFBQSxnQkFDSixpQkFBaUI7QUFBQSxnQkFDakIsaUJBQWlCLE9BQU8sV0FBV0gsS0FBSTtBQUFBLGdCQUN2QyxLQUFLLFNBQVNJLEtBQUlDLFFBQU87QUFDdkIseUJBQU8sT0FBTyxhQUFhQSxRQUFPLEtBQUs7QUFBQSxnQkFDekM7QUFBQSxnQkFDQSxrQkFBa0IscUJBQXFCLE9BQU8sT0FBTyxNQUFNLE1BQU07QUFBQSxnQkFDakUsV0FBVyxTQUFTLFVBQVUsT0FBTztBQUNuQyx5QkFBTyxPQUFPLFVBQVUsT0FBT0wsS0FBSTtBQUFBLGdCQUNyQztBQUFBLGdCQUNBLFNBQVMsU0FBUyxVQUFVO0FBQzFCLHlCQUFPLE9BQU8sZ0JBQWdCQSxLQUFJO0FBQUEsZ0JBQ3BDO0FBQUEsZ0JBQ0EsV0FBVztBQUFBLGNBQ2IsR0FBRyx1QkFBdUJBLE1BQUssV0FBVyxJQUFjLFNBQVM7QUFBQSxnQkFDL0QsV0FBVztBQUFBLGdCQUNYLE1BQU0sWUFBWSxlQUFlLE1BQU07QUFBQSxnQkFDdkMsTUFBTSxPQUFPLFdBQVdBLEtBQUksSUFBSSxjQUFjO0FBQUEsY0FDaEQsQ0FBQyxJQUFJLE1BQU1BLE1BQUssUUFBUSxDQUFDQSxNQUFLLGVBQWUsSUFBYyxRQUFRO0FBQUEsZ0JBQ2pFLFdBQVc7QUFBQSxjQUNiLEdBQUcsT0FBTyxXQUFXQSxLQUFJLEtBQUtBLE1BQUssbUJBQW1CQSxNQUFLLG1CQUFtQkEsTUFBSyxJQUFJLElBQUksTUFBTUEsTUFBSyxnQkFBZ0IsQ0FBQ0EsTUFBSyxPQUFPLElBQWMsUUFBUTtBQUFBLGdCQUN2SixXQUFXO0FBQUEsY0FDYixDQUFDLElBQUksTUFBTSxJQUFjLFFBQVE7QUFBQSxnQkFDL0I7QUFBQSxnQkFDQSxXQUFXO0FBQUEsY0FDYixHQUFHQSxNQUFLLEtBQUssQ0FBQyxHQUFHLElBQWMsT0FBTztBQUFBLGdCQUNwQyxJQUFJO0FBQUEsZ0JBQ0osV0FBVyxTQUFTLFVBQVUsT0FBTztBQUNuQyx5QkFBTyxPQUFPLGtCQUFrQixPQUFPLEtBQUs7QUFBQSxnQkFDOUM7QUFBQSxjQUNGLEdBQUdBLE1BQUssWUFBWSxPQUFPLFdBQVdBLEtBQUksSUFBSSxJQUFjSCxjQUFhekIsWUFBUztBQUFBLGdCQUNoRixPQUFPNEIsTUFBSztBQUFBLGdCQUNaO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQSxpQkFBaUIsT0FBTyxNQUFNO0FBQUEsY0FDaEMsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUFBLFlBQ3JCLENBQUM7QUFBQSxVQUNILENBQUM7QUFBQSxRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBQSxNQUNOO0FBQUEsSUFDRixDQUFDLENBQUM7QUFFRixXQUFPSDtBQUFBLEVBQ1QsRUFBRSx5QkFBUztBQUVYLEVBQUFILGtCQUFnQixhQUFhLGVBQWUsa0JBQWtCO0FBRTlELGNBQVksWUFBWTtBQUFBLElBQ3RCLFdBQVcsb0JBQUFZLFFBQVU7QUFBQSxJQUNyQixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUEsSUFJNUIsT0FBTyxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLE1BQU07QUFBQTtBQUFBO0FBQUEsTUFHdkMsVUFBVSxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLElBQUksVUFBVTtBQUFBO0FBQUE7QUFBQSxNQUlwRCxPQUFPLG9CQUFBQSxRQUFVLEtBQUs7QUFBQTtBQUFBO0FBQUEsTUFJdEIsSUFBSSxvQkFBQUEsUUFBVSxPQUFPO0FBQUE7QUFBQTtBQUFBLE1BSXJCLE1BQU0sb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUtoQixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUs1QixjQUFjLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBLE1BSXhCLFlBQVksb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUEsTUFJdEIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS3JCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQSxJQUN0QixDQUFDLEVBQUUsVUFBVSxFQUFFO0FBQUE7QUFBQTtBQUFBLElBSWYsU0FBUyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsV0FBVyxZQUFZLENBQUM7QUFBQTtBQUFBO0FBQUEsSUFJbEQsaUJBQWlCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLM0IscUJBQXFCLG9CQUFBQSxRQUFVO0FBQUEsSUFDL0IsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLG1CQUFtQixvQkFBQUEsUUFBVTtBQUFBLEVBQy9COzs7QUMzV0EsTUFBQUMsa0JBQTRDO0FBQzVDLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7OztBQzVDdkIsTUFBQUMsa0JBQW1DO0FBQ25DLE1BQUFDLHNCQUF1Qjs7O0FDVHZCLE1BQUkscUJBQXFCLFNBQVNDLG9CQUFtQixRQUFRO0FBQzNELFFBQUksWUFBWSxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFVBQVUsQ0FBQyxJQUFJO0FBQ3BGLFFBQUksa0JBQWtCLE9BQU8sbUJBQW1CLE9BQU87QUFDdkQsV0FBTyxZQUFZLGdCQUFnQixLQUFLLEVBQUUsWUFBWSxJQUFJO0FBQUEsRUFDNUQ7QUFFQSxNQUFJQyxtQ0FBa0MsU0FBU0EsaUNBQWdDLGFBQWEsaUJBQWlCO0FBQzNHLFFBQUksd0JBQXdCLFlBQVksWUFBWTtBQUNwRCxXQUFPLGdCQUFnQixLQUFLLFNBQVUsUUFBUTtBQUM1QyxhQUFPLG1CQUFtQixNQUFNLE1BQU07QUFBQSxJQUN4QyxDQUFDO0FBQUEsRUFDSDtBQUVBLE1BQUlDLHlCQUF3QixTQUFTQSx1QkFBc0IsYUFBYSxRQUFRLHVCQUF1QixlQUFlLGlCQUFpQjtBQUdySSxRQUFJLGlCQUFpQjtBQUNuQixVQUFJLGlCQUFpQkQsaUNBQWdDLG1CQUFtQixRQUFRLEtBQUssR0FBRyxlQUFlO0FBRXZHLFVBQUksZ0JBQWdCO0FBQ2xCLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUlBLFFBQUksZUFBZTtBQUNqQixrQkFBWSxLQUFLLE1BQU07QUFDdkI7QUFBQSxJQUNGO0FBRUEsUUFBSSxDQUFDLHVCQUF1QjtBQUMxQixrQkFBWSxLQUFLLE1BQU07QUFDdkI7QUFBQSxJQUNGO0FBRUEsUUFBSSxtQkFBbUIsbUJBQW1CLE1BQU07QUFFaEQsUUFBSSxpQkFBaUIsU0FBUyxxQkFBcUIsR0FBRztBQUNwRCxrQkFBWSxLQUFLLE1BQU07QUFBQSxJQUN6QjtBQUFBLEVBQ0Y7QUFFTyxNQUFJRSxzQkFBcUIsU0FBU0Esb0JBQW1CLFNBQVMsYUFBYSxlQUFlLGlCQUFpQjtBQUNoSCxRQUFJLHdCQUF3QixZQUFZLFlBQVk7QUFDcEQsUUFBSSxrQkFBa0IsQ0FBQztBQUN2QixZQUFRLFFBQVEsU0FBVSxRQUFRO0FBQ2hDLE1BQUFELHVCQUFzQixpQkFBaUIsUUFBUSx1QkFBdUIsZUFBZSxlQUFlO0FBQUEsSUFDdEcsQ0FBQztBQUNELFdBQU87QUFBQSxFQUNUOzs7QUR6REEsTUFBSUUsZUFBWSxDQUFDLFlBQVksV0FBVyxTQUFTLGVBQWUsaUJBQWlCLFVBQVUsV0FBVztBQUV0RyxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQWMzUyxNQUFJLHNCQUFzQixTQUFTQyxxQkFBb0JDLFFBQU07QUFDbEUsUUFBSSxtQkFBbUJBLE9BQUssVUFDeEIsVUFBVUEsT0FBSyxTQUNmLFFBQVFBLE9BQUssT0FDYixjQUFjQSxPQUFLLGFBQ25CLGdCQUFnQkEsT0FBSyxlQUNyQixTQUFTQSxPQUFLLFFBQ2QsWUFBWUEsT0FBSyxXQUNqQixPQUFPSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFbkQsUUFBSSxlQUFXLDZCQUFZLFNBQVUsR0FBRztBQUN0QyxVQUFJLGNBQWMsRUFBRSxPQUFPO0FBQzNCLFVBQUksa0JBQWtCTSxvQkFBbUIsU0FBUyxhQUFhLGFBQWE7QUFDNUUsdUJBQWlCLGFBQWEsZUFBZTtBQUFBLElBQy9DLEdBQUcsQ0FBQyxTQUFTLGVBQWUsZ0JBQWdCLENBQUM7QUFDN0MsUUFBSSxjQUFVLG9CQUFBQyxTQUFXLHVCQUF1QixTQUFTO0FBQ3pELFFBQUksMkJBQTJCLFNBQVM7QUFBQSxNQUN0QyxNQUFNO0FBQUEsTUFDTixxQkFBcUI7QUFBQSxNQUNyQixpQkFBaUI7QUFBQSxNQUNqQixpQkFBaUI7QUFBQSxNQUNqQixhQUFhO0FBQUE7QUFBQSxJQUVmLElBQUk7QUFDSixXQUFPLElBQWMsZ0JBQWdCTixZQUFTO0FBQUEsTUFDNUMsV0FBVztBQUFBLE1BQ1g7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsYUFBYTtBQUFBLE1BQ2IsV0FBVztBQUFBLE1BQ1gsY0FBYztBQUFBLE1BQ2QsaUJBQWlCO0FBQUEsSUFDbkIsR0FBRywwQkFBMEIsSUFBSSxDQUFDO0FBQUEsRUFDcEM7OztBRXZDQSxNQUFBTyxrQkFBa0I7QUFDbEIsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1QjtBQWpCdkIsTUFBSUMsZUFBWSxDQUFDLFlBQVksYUFBYSxVQUFVO0FBRXBELFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYzNTLE1BQUksdUJBQXVCLFNBQVNDLHNCQUFxQkMsUUFBTTtBQUNwRSxRQUFJLFdBQVdBLE9BQUssVUFDaEIsWUFBWUEsT0FBSyxXQUNqQixnQkFBZ0JBLE9BQUssVUFDckIsV0FBVyxrQkFBa0IsU0FBUyxRQUFRLGVBQzlDLE9BQU9ILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVuRCxRQUFJLGNBQVUsb0JBQUFNLFNBQVcsd0JBQXdCO0FBQUEsTUFDL0Msa0NBQWtDO0FBQUEsSUFDcEMsR0FBRyxTQUFTO0FBQ1osV0FBTyxJQUFjLFNBQVNMLFlBQVM7QUFBQSxNQUNyQyxPQUFPO0FBQUEsTUFDUCxNQUFNO0FBQUEsTUFDTixXQUFXO0FBQUEsSUFDYixHQUFHLElBQUksR0FBRyxRQUFRO0FBQUEsRUFDcEI7QUFDQSx1QkFBcUIsWUFBWTtBQUFBLElBQy9CLFdBQVcsb0JBQUFNLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLNUIsVUFBVSxvQkFBQUEsUUFBVTtBQUFBLEVBQ3RCOzs7QUNBQSxNQUFBQyxrQkFBdUM7QUFDdkMsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1Qjs7O0FDUHZCLE1BQUFDLHNCQUF1QjtBQUN2QixNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsa0JBQWlDO0FBMUNqQyxXQUFTQyxVQUFRLEtBQUs7QUFBRTtBQUEyQixRQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sT0FBTyxhQUFhLFVBQVU7QUFBRSxNQUFBQSxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUcsT0FBTztBQUFFLE1BQUFELFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU9BLFFBQU8sT0FBTyxXQUFXLGNBQWNBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRztBQUFFLFdBQU9ELFVBQVEsR0FBRztBQUFBLEVBQUc7QUFFelgsTUFBSUUsZUFBWSxDQUFDLFlBQVksYUFBYSxZQUFZLFdBQVcsYUFBYSxhQUFhLFdBQVcsVUFBVSxtQkFBbUIsZ0JBQWdCLGVBQWUsUUFBUSxjQUFjLFVBQVU7QUFBbE0sTUFDSUMsZ0JBQWEsQ0FBQyxZQUFZLFdBQVc7QUFFekMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFbFQsV0FBU0Msa0JBQWdCLFVBQVUsYUFBYTtBQUFFLFFBQUksRUFBRSxvQkFBb0IsY0FBYztBQUFFLFlBQU0sSUFBSSxVQUFVLG1DQUFtQztBQUFBLElBQUc7QUFBQSxFQUFFO0FBRXhKLFdBQVNDLG9CQUFrQixRQUFRLE9BQU87QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUUsVUFBSSxhQUFhLE1BQU0sQ0FBQztBQUFHLGlCQUFXLGFBQWEsV0FBVyxjQUFjO0FBQU8saUJBQVcsZUFBZTtBQUFNLFVBQUksV0FBVztBQUFZLG1CQUFXLFdBQVc7QUFBTSxhQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUssVUFBVTtBQUFBLElBQUc7QUFBQSxFQUFFO0FBRTVULFdBQVNDLGVBQWEsYUFBYSxZQUFZLGFBQWE7QUFBRSxRQUFJO0FBQVksTUFBQUQsb0JBQWtCLFlBQVksV0FBVyxVQUFVO0FBQUcsUUFBSTtBQUFhLE1BQUFBLG9CQUFrQixhQUFhLFdBQVc7QUFBRyxXQUFPO0FBQUEsRUFBYTtBQUV0TixXQUFTRSxZQUFVLFVBQVUsWUFBWTtBQUFFLFFBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQUUsWUFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsSUFBRztBQUFFLGFBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRSxDQUFDO0FBQUcsUUFBSTtBQUFZLE1BQUFDLGtCQUFnQixVQUFVLFVBQVU7QUFBQSxFQUFHO0FBRWhZLFdBQVNBLGtCQUFnQixHQUFHLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxrQkFBa0IsU0FBU0Esa0JBQWdCQyxJQUFHQyxJQUFHO0FBQUUsTUFBQUQsR0FBRSxZQUFZQztBQUFHLGFBQU9EO0FBQUEsSUFBRztBQUFHLFdBQU9ELGtCQUFnQixHQUFHLENBQUM7QUFBQSxFQUFHO0FBRXpLLFdBQVNHLGVBQWEsU0FBUztBQUFFLFFBQUksNEJBQTRCQyw0QkFBMEI7QUFBRyxXQUFPLFNBQVMsdUJBQXVCO0FBQUUsVUFBSSxRQUFRQyxrQkFBZ0IsT0FBTyxHQUFHO0FBQVEsVUFBSSwyQkFBMkI7QUFBRSxZQUFJLFlBQVlBLGtCQUFnQixJQUFJLEVBQUU7QUFBYSxpQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUFHLE9BQU87QUFBRSxpQkFBUyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFFLGFBQU9DLDZCQUEyQixNQUFNLE1BQU07QUFBQSxJQUFHO0FBQUEsRUFBRztBQUV4YSxXQUFTQSw2QkFBMkJDLE9BQU0sTUFBTTtBQUFFLFFBQUksU0FBU2xCLFVBQVEsSUFBSSxNQUFNLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFBRSxhQUFPO0FBQUEsSUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLElBQUc7QUFBRSxXQUFPbUIseUJBQXVCRCxLQUFJO0FBQUEsRUFBRztBQUUvUixXQUFTQyx5QkFBdUJELE9BQU07QUFBRSxRQUFJQSxVQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksZUFBZSwyREFBMkQ7QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXJLLFdBQVNILDhCQUE0QjtBQUFFLFFBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsYUFBTztBQUFPLFFBQUksUUFBUSxVQUFVO0FBQU0sYUFBTztBQUFPLFFBQUksT0FBTyxVQUFVO0FBQVksYUFBTztBQUFNLFFBQUk7QUFBRSxjQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLENBQUMsR0FBRyxXQUFZO0FBQUEsTUFBQyxDQUFDLENBQUM7QUFBRyxhQUFPO0FBQUEsSUFBTSxTQUFTLEdBQUc7QUFBRSxhQUFPO0FBQUEsSUFBTztBQUFBLEVBQUU7QUFFeFUsV0FBU0Msa0JBQWdCLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsU0FBU0Esa0JBQWdCSixJQUFHO0FBQUUsYUFBT0EsR0FBRSxhQUFhLE9BQU8sZUFBZUEsRUFBQztBQUFBLElBQUc7QUFBRyxXQUFPSSxrQkFBZ0IsQ0FBQztBQUFBLEVBQUc7QUFFNU0sV0FBU0ksa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUFtQmhOLFdBQVNDLHFCQUFvQixTQUFTO0FBQ3BDLFFBQUksQ0FBQyxTQUFTO0FBQ1osYUFBTztBQUFBLFFBQ0wsTUFBTTtBQUFBLE1BQ1I7QUFBQSxJQUNGO0FBRUEsV0FBTyxZQUFZLE9BQU87QUFBQSxNQUN4QixNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsSUFDVCxJQUFJO0FBQUEsTUFDRixNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxNQUFJQyw2QkFBNEI7QUFBQSxJQUM5QixNQUFNO0FBQUEsSUFDTixHQUFHO0FBQUEsRUFDTDtBQUNPLE1BQUlDLGlCQUFnQixPQUFPRCwwQkFBeUI7QUFFcEQsTUFBSSx3QkFBcUMseUJBQVUsWUFBWTtBQUNwRSxJQUFBWixZQUFVYyx3QkFBdUIsVUFBVTtBQUUzQyxRQUFJLFNBQVNWLGVBQWFVLHNCQUFxQjtBQUUvQyxhQUFTQSx1QkFBc0IsT0FBTztBQUNwQyxNQUFBakIsa0JBQWdCLE1BQU1pQixzQkFBcUI7QUFFM0MsYUFBTyxPQUFPLEtBQUssTUFBTSxLQUFLO0FBQUEsSUFDaEM7QUFFQSxJQUFBZixlQUFhZSx3QkFBdUIsQ0FBQztBQUFBLE1BQ25DLEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBU0MsVUFBUztBQUN2QixZQUFJLGNBQWMsS0FBSyxPQUNuQixXQUFXLFlBQVksVUFDdkIsWUFBWSxZQUFZLFdBQ3hCLFdBQVcsWUFBWSxVQUN2QixVQUFVLFlBQVksU0FDdEIsWUFBWSxZQUFZLFdBQ3hCLFlBQVksWUFBWSxXQUN4QixVQUFVLFlBQVksU0FDdEJDLFVBQVMsWUFBWSxRQUNyQixrQkFBa0IsWUFBWSxpQkFDOUIsZUFBZSxZQUFZLGNBQzNCLHdCQUF3QixZQUFZLGFBQ3BDLGNBQWMsMEJBQTBCLFNBQVMsTUFBTSx1QkFDdkQsbUJBQW1CLFlBQVksTUFDL0IsT0FBTyxxQkFBcUIsU0FBUyxXQUFXLGtCQUNoRCxhQUFhLFlBQVksWUFDekIsV0FBVyxZQUFZLFVBQ3ZCLE9BQU9yQiw0QkFBeUIsYUFBYUgsWUFBUztBQUUxRCxZQUFJLGNBQVUsb0JBQUF5QixTQUFXLHlCQUF5QjtBQUFBLFVBQ2hELG1DQUFtQztBQUFBLFFBQ3JDLEdBQUdMLDJCQUEwQixXQUFXLEdBQUcsU0FBUztBQUNwRCxZQUFJLGtCQUFjLG9CQUFBSyxTQUFXLCtCQUErQlAsa0JBQWdCLENBQUMsR0FBRyxnQ0FBZ0MsT0FBTyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzNJLFlBQUk7QUFFSixZQUFJLFdBQVc7QUFDYixjQUFJLHVCQUF1QkMscUJBQW9CLE9BQU8sR0FDbERPLFVBQU8scUJBQXFCLE1BQzVCLFFBQVEscUJBQXFCO0FBRWpDLHVCQUFhLElBQWMsU0FBUztBQUFBLFlBQ2xDLFdBQVc7QUFBQSxZQUNYO0FBQUEsWUFDQSxNQUFNQTtBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0g7QUFFQSxZQUFJO0FBQ0osWUFBSTtBQUVKLFlBQUksbUJBQW1CLFlBQVksTUFBTTtBQUN2QyxrQkFBUSxJQUFjLFNBQVM7QUFBQSxZQUM3QixPQUFPO0FBQUEsWUFDUCxTQUFTO0FBQUEsVUFDWCxDQUFDO0FBQ0Qsd0JBQWMsSUFBYyxTQUFTO0FBQUEsWUFDbkMsT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFVBQ1gsQ0FBQztBQUFBLFFBQ0gsV0FBVyxtQkFBbUIsWUFBWSxPQUFPO0FBQy9DLGtCQUFRLElBQWMsU0FBUztBQUFBLFlBQzdCLE9BQU87QUFBQSxZQUNQLFNBQVM7QUFBQSxVQUNYLENBQUM7QUFDRCx3QkFBYyxJQUFjLFNBQVM7QUFBQSxZQUNuQyxPQUFPO0FBQUEsWUFDUCxTQUFTO0FBQUEsVUFDWCxDQUFDO0FBQUEsUUFDSCxXQUFXLG1CQUFtQixDQUFDLFNBQVM7QUFDdEMsd0JBQWMsSUFBYyxTQUFTO0FBQUEsWUFDbkMsT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFVBQ1gsQ0FBQztBQUFBLFFBQ0g7QUFFQSxZQUFJLFlBQVksQ0FBQyxZQUFZLE9BQU8sWUFBWTtBQUVoRCxZQUFJLENBQUMsbUJBQW1CLFdBQVc7QUFDakMsa0JBQVEsSUFBYyxTQUFTO0FBQUEsWUFDN0IsT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFVBQ1gsQ0FBQztBQUNELHdCQUFjLGFBQWEsSUFBYyxTQUFTO0FBQUEsWUFDaEQsT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFVBQ1gsQ0FBQyxJQUFJO0FBQUEsUUFDUDtBQUVBLFlBQUk7QUFFSixZQUFJLFNBQVM7QUFDWCx3QkFBYyxJQUFjLFFBQVE7QUFBQSxZQUNsQyxXQUFXO0FBQUEsVUFDYixHQUFHLE9BQU87QUFBQSxRQUNaO0FBRUEsWUFBSTtBQUVKLFlBQUlGLFdBQVUsQ0FBQyxDQUFDLGNBQWM7QUFDNUIsY0FBSTtBQUNKLGNBQUksMkJBQTJCO0FBQUEsWUFDN0IsZUFBZTtBQUFBLFlBQ2YsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLGlCQUFpQixNQUFNO0FBQ3pCLCtCQUFtQixJQUFjLFVBQVV0QixZQUFTO0FBQUEsY0FDbEQsV0FBVztBQUFBLFlBQ2IsR0FBRyx3QkFBd0IsQ0FBQztBQUFBLFVBQzlCLFdBQVcsQ0FBQyxDQUFDLGdCQUFnQixpQkFBaUIsT0FBTztBQUNuRCxnQkFBSSxZQUFZLGFBQWEsVUFDekIsYUFBYSxhQUFhLFdBQzFCLGlCQUFpQkMsNEJBQXlCLGNBQWNGLGFBQVU7QUFFdEUsK0JBQW1CLElBQWMsVUFBVUMsWUFBUztBQUFBLGNBQ2xELGVBQVcsb0JBQUF1QixTQUFXLHVDQUF1QyxVQUFVO0FBQUEsWUFDekUsR0FBRywwQkFBMEIsY0FBYyxHQUFHLFNBQVM7QUFBQSxVQUN6RDtBQUdBLGNBQUlELFdBQVUsYUFBYSxDQUFDLFVBQVU7QUFDcEMseUJBQWEsSUFBYyxRQUFRO0FBQUEsY0FDakMsV0FBVztBQUFBLFlBQ2IsR0FBR0EsU0FBUSxLQUFLLGFBQWEsQ0FBQyxXQUFXLG1CQUFtQixJQUFJO0FBQUEsVUFDbEU7QUFBQSxRQUNGO0FBRUEsWUFBSSxnQkFBZ0IsZUFBZSxVQUFVLElBQWMscUJBQXFCLE1BQU0sSUFBYyxPQUFPLE1BQU0sU0FBUyxjQUFjLFFBQVEsTUFBTSxPQUFPLFNBQVMsY0FBYyxNQUFNLE1BQU0sV0FBVyxDQUFDO0FBRTVNLGVBQU8sSUFBYyxNQUFNdEIsWUFBUztBQUFBLFVBQ2xDO0FBQUEsVUFDQSxzQkFBc0I7QUFBQSxVQUV0QixnQkFBZ0IsU0FBUyxXQUFXLFlBQVk7QUFBQSxVQUVoRCxpQkFBaUIsQ0FBQyxZQUFZO0FBQUEsVUFFOUIsV0FBVztBQUFBLFVBQ1gsaUJBQWlCO0FBQUEsUUFDbkIsR0FBRyxJQUFJLEdBQUcsSUFBYyxRQUFRO0FBQUEsVUFDOUIsV0FBVztBQUFBLFFBQ2IsR0FBRyxZQUFZLGFBQWEsSUFBYyxRQUFRO0FBQUEsVUFDaEQsV0FBVztBQUFBLFFBQ2IsR0FBRyxVQUFVLFlBQVksR0FBRyxVQUFVLENBQUM7QUFBQSxNQUN6QztBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBRUYsV0FBT29CO0FBQUEsRUFDVCxFQUFFLHlCQUFTO0FBRVgsRUFBQUosa0JBQWdCLHVCQUF1QixnQkFBZ0I7QUFBQSxJQUNyRCxXQUFXO0FBQUEsSUFDWCxjQUFjO0FBQUEsSUFDZCxVQUFVO0FBQUEsRUFDWixDQUFDO0FBRUQsd0JBQXNCLFlBQVk7QUFBQSxJQUNoQyxXQUFXLG9CQUFBUyxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLElBQzVCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtwQixTQUFTLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxNQUFNLE9BQU8sTUFBUyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLakQsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3JCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixVQUFVLG9CQUFBQSxRQUFVO0FBQUEsSUFDcEIsU0FBUyxvQkFBQUEsUUFBVTtBQUFBLElBQ25CLFFBQVEsb0JBQUFBLFFBQVU7QUFBQSxJQUNsQixpQkFBaUIsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPM0IsY0FBYyxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsS0FBSyxZQUFZLG9CQUFBQSxRQUFVLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUk1RSxVQUFVLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsaUJBQWlCLGNBQWMsdUJBQXVCLFlBQVksYUFBYSxTQUFTLGdCQUFnQixjQUFjLFVBQVUsWUFBWSxnQkFBZ0IsUUFBUSxhQUFhLGFBQWEsY0FBYyxXQUFXLGNBQWMsWUFBWSxZQUFZLGdCQUFnQixVQUFVLFFBQVEsYUFBYSxRQUFRLG1CQUFtQixpQkFBaUIsVUFBVSxjQUFjLFNBQVMsU0FBUyxPQUFPLFlBQVksWUFBWSxhQUFhLFlBQVksU0FBUyx1QkFBdUIsU0FBUyxxQkFBcUIsU0FBUyxnQkFBZ0IsZUFBZSxjQUFjLFdBQVcsV0FBVyxTQUFTLFdBQVcsV0FBVyxjQUFjLGFBQWEsbUJBQW1CLHdCQUF3QixtQkFBbUIsb0JBQW9CLHNCQUFzQixvQkFBb0IsUUFBUSxpQkFBaUIscUJBQXFCLHdCQUF3Qix1QkFBdUIseUJBQXlCLFNBQVMsOEJBQThCLHdCQUF3QixjQUFjLFlBQVksT0FBTyxnQkFBZ0Isa0JBQWtCLFlBQVksV0FBVyxlQUFlLGVBQWUsWUFBWSxnQkFBZ0IsaUJBQWlCLGFBQWEsT0FBTyxtQkFBbUIsb0JBQW9CLFlBQVkscUJBQXFCLG1CQUFtQixvQkFBb0IsY0FBYyxtQkFBbUIsbUJBQW1CLGlCQUFpQiw4QkFBOEIsNEJBQTRCLGlCQUFpQixnQkFBZ0IseUJBQXlCLHlCQUF5Qix1QkFBdUIseUJBQXlCLHdCQUF3QixzQkFBc0IsY0FBYyxxQkFBcUIsNEJBQTRCLDZCQUE2Qix5QkFBeUIsMEJBQTBCLGNBQWMsZ0JBQWdCLGVBQWUsbUJBQW1CLGNBQWMsdUJBQXVCLFNBQVMsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsY0FBYyxnQkFBZ0IsT0FBTyxhQUFhLGFBQWEsZUFBZSxXQUFXLGVBQWUsVUFBVSxRQUFRLFlBQVksUUFBUSxlQUFlLGdCQUFnQixxQkFBcUIsY0FBYyxhQUFhLGlCQUFpQixjQUFjLGtCQUFrQixZQUFZLFFBQVEsVUFBVSxXQUFXLFNBQVMsUUFBUSxrQkFBa0IsWUFBWSxRQUFRLFdBQVcsU0FBUyxnQkFBZ0IsV0FBVyxRQUFRLFFBQVEsYUFBYSxTQUFTLGdCQUFnQixjQUFjLGFBQWEsY0FBYyxzQkFBc0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGtCQUFrQixnQkFBZ0IsaUJBQWlCLGVBQWUsV0FBVyxVQUFVLE1BQU0sWUFBWSxZQUFZLGVBQWUsY0FBYyxlQUFlLFlBQVksa0JBQWtCLGlCQUFpQixVQUFVLFdBQVcsYUFBYSxjQUFjLGNBQWMsYUFBYSxRQUFRLFFBQVEsV0FBVyxRQUFRLFlBQVksV0FBVyxlQUFlLGlCQUFpQixjQUFjLGlCQUFpQixhQUFhLGlCQUFpQixhQUFhLHlCQUF5QixZQUFZLGFBQWEsdUJBQXVCLFlBQVksbUJBQW1CLGlCQUFpQixjQUFjLGtCQUFrQixlQUFlLG9CQUFvQixxQkFBcUIsd0JBQXdCLFlBQVksV0FBVyxlQUFlLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSxXQUFXLGVBQWUsYUFBYSxjQUFjLGtCQUFrQixlQUFlLGdCQUFnQixZQUFZLGlCQUFpQixlQUFlLGVBQWUsYUFBYSxhQUFhLHFCQUFxQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsYUFBYSxnQkFBZ0Isa0JBQWtCLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSx1QkFBdUIsV0FBVyxrQkFBa0IsY0FBYyxpQkFBaUIsa0JBQWtCLGlCQUFpQixzQkFBc0IsVUFBVSwwQkFBMEIsb0JBQW9CLG1CQUFtQixpQkFBaUIsYUFBYSxVQUFVLFFBQVEsWUFBWSxZQUFZLGFBQWEsVUFBVSxTQUFTLGlCQUFpQixjQUFjLFlBQVksU0FBUyxpQkFBaUIsdUJBQXVCLFVBQVUsaUJBQWlCLFFBQVEsYUFBYSxVQUFVLFFBQVEsZUFBZSxVQUFVLFdBQVcsVUFBVSx1QkFBdUIsV0FBVyxpQkFBaUIsY0FBYyxlQUFlLGFBQWEsV0FBVyxTQUFTLFdBQVcsVUFBVSxXQUFXLE9BQU8sYUFBYSxlQUFlLFFBQVEsY0FBYyxRQUFRLGdCQUFnQixzQkFBc0IsVUFBVSxRQUFRLG9CQUFvQixTQUFTLHFCQUFxQixXQUFXLGlCQUFpQixZQUFZLGdCQUFnQixhQUFhLFFBQVEsbUJBQW1CLFNBQVMsVUFBVSxxQkFBcUIsd0JBQXdCLGVBQWUsa0JBQWtCLDBCQUEwQiwwQkFBMEIsaUJBQWlCLFNBQVMsU0FBUyxhQUFhLFlBQVksWUFBWSxhQUFhLFVBQVUsWUFBWSxhQUFhLFVBQVUsYUFBYSxrQkFBa0IsY0FBYyxtQkFBbUIsa0JBQWtCLG1CQUFtQixpQkFBaUIsa0JBQWtCLFNBQVMsUUFBUSxjQUFjLGFBQWEsV0FBVyxVQUFVLGFBQWEsT0FBTyxlQUFlLFdBQVcsdUJBQXVCLHdCQUF3QixzQkFBc0IsbUJBQW1CLE9BQU8sUUFBUSxlQUFlLFlBQVksZUFBZSxlQUFlLGNBQWMsWUFBWSxTQUFTLFVBQVUsVUFBVSx1QkFBdUIsYUFBYSxRQUFRLGNBQWMsU0FBUyxpQkFBaUIsVUFBVSxlQUFlLFdBQVcsa0JBQWtCLG9CQUFvQiwyQkFBMkIsa0JBQWtCLHlCQUF5QixZQUFZLFdBQVcsV0FBVyxvQkFBb0IsZ0JBQWdCLGFBQWEsVUFBVSxZQUFZLGVBQWUsV0FBVyxlQUFlLFdBQVcsb0JBQW9CLGdCQUFnQixjQUFjLFlBQVksb0JBQW9CLHNCQUFzQixVQUFVLGNBQWMsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IsY0FBYyw0QkFBNEIsaUJBQWlCLGFBQWEsb0JBQW9CLGdCQUFnQixhQUFhLG1CQUFtQixjQUFjLGtCQUFrQixjQUFjLGFBQWEsa0JBQWtCLGlCQUFpQixZQUFZLGtCQUFrQixrQkFBa0IsV0FBVyxhQUFhLFlBQVksZ0JBQWdCLGVBQWUsc0JBQXNCLG9CQUFvQixlQUFlLGtCQUFrQixlQUFlLGFBQWEsZUFBZSxlQUFlLGlCQUFpQixnQkFBZ0Isa0JBQWtCLG1CQUFtQixpQkFBaUIsY0FBYyxvQkFBb0IscUJBQXFCLGFBQWEsbUJBQW1CLGNBQWMsZUFBZSxlQUFlLGVBQWUsWUFBWSxhQUFhLG1CQUFtQixlQUFlLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxZQUFZLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS25uTixVQUFVLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLE9BQU8sQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSzNDLE9BQU8sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxJQUFJLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS2xGLFlBQVksb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUt0QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxNQUM1QixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsTUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSzVCLGFBQWEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUt2QixzQkFBc0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUtoQyxTQUFTLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLbkIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsTUFDNUIsTUFBTSxvQkFBQUEsUUFBVTtBQUFBLE1BQ2hCLFFBQVEsb0JBQUFBLFFBQVU7QUFBQSxNQUNsQixLQUFLLG9CQUFBQSxRQUFVO0FBQUEsSUFDakIsQ0FBQyxFQUFFLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2QsYUFBYSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU92QixZQUFZLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT3RCLE1BQU0sb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTWhCLFVBQVUsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFlBQVksTUFBTSxDQUFDO0FBQUEsRUFDaEQ7OztBRHJWQSxXQUFTQyxVQUFRLEtBQUs7QUFBRTtBQUEyQixRQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sT0FBTyxhQUFhLFVBQVU7QUFBRSxNQUFBQSxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUcsT0FBTztBQUFFLE1BQUFELFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU9BLFFBQU8sT0FBTyxXQUFXLGNBQWNBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRztBQUFFLFdBQU9ELFVBQVEsR0FBRztBQUFBLEVBQUc7QUFFelgsTUFBSUUsZUFBWSxDQUFDLE1BQU07QUFBdkIsTUFDSUMsZ0JBQWEsQ0FBQyxTQUFTLGdCQUFnQixXQUFXLFlBQVksV0FBVyxVQUFVLE9BQU8sT0FBTyxtQkFBbUIsTUFBTTtBQUQ5SCxNQUVJQyxnQkFBYSxDQUFDLGFBQWEsV0FBVyxlQUFlLGlCQUFpQixnQkFBZ0IsVUFBVSxlQUFlLGFBQWEscUJBQXFCLGdCQUFnQixhQUFhLG1CQUFtQixrQkFBa0IsbUJBQW1CLFlBQVksZUFBZSxjQUFjLGdCQUFnQixVQUFVLHdCQUF3QixjQUFjLG1CQUFtQixvQkFBb0IsUUFBUSxpQkFBaUIsVUFBVTtBQUU3WixXQUFTQyxVQUFRQyxTQUFRLGdCQUFnQjtBQUFFLFFBQUlDLFFBQU8sT0FBTyxLQUFLRCxPQUFNO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksVUFBVSxPQUFPLHNCQUFzQkEsT0FBTTtBQUFHLFVBQUksZ0JBQWdCO0FBQUUsa0JBQVUsUUFBUSxPQUFPLFNBQVUsS0FBSztBQUFFLGlCQUFPLE9BQU8seUJBQXlCQSxTQUFRLEdBQUcsRUFBRTtBQUFBLFFBQVksQ0FBQztBQUFBLE1BQUc7QUFBRSxNQUFBQyxNQUFLLEtBQUssTUFBTUEsT0FBTSxPQUFPO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUV4VixXQUFTQyxnQkFBYyxRQUFRO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFVBQUksU0FBUyxVQUFVLENBQUMsS0FBSyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFBRyxVQUFJLElBQUksR0FBRztBQUFFLFFBQUFILFVBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsVUFBQUksa0JBQWdCLFFBQVEsS0FBSyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUcsV0FBVyxPQUFPLDJCQUEyQjtBQUFFLGVBQU8saUJBQWlCLFFBQVEsT0FBTywwQkFBMEIsTUFBTSxDQUFDO0FBQUEsTUFBRyxPQUFPO0FBQUUsUUFBQUosVUFBUSxPQUFPLE1BQU0sQ0FBQyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsaUJBQU8sZUFBZSxRQUFRLEtBQUssT0FBTyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRXJoQixXQUFTSyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUVsVCxXQUFTQyxrQkFBZ0IsVUFBVSxhQUFhO0FBQUUsUUFBSSxFQUFFLG9CQUFvQixjQUFjO0FBQUUsWUFBTSxJQUFJLFVBQVUsbUNBQW1DO0FBQUEsSUFBRztBQUFBLEVBQUU7QUFFeEosV0FBU0Msb0JBQWtCLFFBQVEsT0FBTztBQUFFLGFBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFBRSxVQUFJLGFBQWEsTUFBTSxDQUFDO0FBQUcsaUJBQVcsYUFBYSxXQUFXLGNBQWM7QUFBTyxpQkFBVyxlQUFlO0FBQU0sVUFBSSxXQUFXO0FBQVksbUJBQVcsV0FBVztBQUFNLGFBQU8sZUFBZSxRQUFRLFdBQVcsS0FBSyxVQUFVO0FBQUEsSUFBRztBQUFBLEVBQUU7QUFFNVQsV0FBU0MsZUFBYSxhQUFhLFlBQVksYUFBYTtBQUFFLFFBQUk7QUFBWSxNQUFBRCxvQkFBa0IsWUFBWSxXQUFXLFVBQVU7QUFBRyxRQUFJO0FBQWEsTUFBQUEsb0JBQWtCLGFBQWEsV0FBVztBQUFHLFdBQU87QUFBQSxFQUFhO0FBRXROLFdBQVNFLFlBQVUsVUFBVSxZQUFZO0FBQUUsUUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFBRSxZQUFNLElBQUksVUFBVSxvREFBb0Q7QUFBQSxJQUFHO0FBQUUsYUFBUyxZQUFZLE9BQU8sT0FBTyxjQUFjLFdBQVcsV0FBVyxFQUFFLGFBQWEsRUFBRSxPQUFPLFVBQVUsVUFBVSxNQUFNLGNBQWMsS0FBSyxFQUFFLENBQUM7QUFBRyxRQUFJO0FBQVksTUFBQUMsa0JBQWdCLFVBQVUsVUFBVTtBQUFBLEVBQUc7QUFFaFksV0FBU0Esa0JBQWdCLEdBQUcsR0FBRztBQUFFLElBQUFBLG9CQUFrQixPQUFPLGtCQUFrQixTQUFTQSxrQkFBZ0JDLElBQUdDLElBQUc7QUFBRSxNQUFBRCxHQUFFLFlBQVlDO0FBQUcsYUFBT0Q7QUFBQSxJQUFHO0FBQUcsV0FBT0Qsa0JBQWdCLEdBQUcsQ0FBQztBQUFBLEVBQUc7QUFFekssV0FBU0csZUFBYSxTQUFTO0FBQUUsUUFBSSw0QkFBNEJDLDRCQUEwQjtBQUFHLFdBQU8sU0FBUyx1QkFBdUI7QUFBRSxVQUFJLFFBQVFDLGtCQUFnQixPQUFPLEdBQUc7QUFBUSxVQUFJLDJCQUEyQjtBQUFFLFlBQUksWUFBWUEsa0JBQWdCLElBQUksRUFBRTtBQUFhLGlCQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVcsU0FBUztBQUFBLE1BQUcsT0FBTztBQUFFLGlCQUFTLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUFHO0FBQUUsYUFBT0MsNkJBQTJCLE1BQU0sTUFBTTtBQUFBLElBQUc7QUFBQSxFQUFHO0FBRXhhLFdBQVNBLDZCQUEyQkMsT0FBTSxNQUFNO0FBQUUsUUFBSSxTQUFTeEIsVUFBUSxJQUFJLE1BQU0sWUFBWSxPQUFPLFNBQVMsYUFBYTtBQUFFLGFBQU87QUFBQSxJQUFNLFdBQVcsU0FBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLFVBQVUsMERBQTBEO0FBQUEsSUFBRztBQUFFLFdBQU95Qix5QkFBdUJELEtBQUk7QUFBQSxFQUFHO0FBRS9SLFdBQVNDLHlCQUF1QkQsT0FBTTtBQUFFLFFBQUlBLFVBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxlQUFlLDJEQUEyRDtBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFckssV0FBU0gsOEJBQTRCO0FBQUUsUUFBSSxPQUFPLFlBQVksZUFBZSxDQUFDLFFBQVE7QUFBVyxhQUFPO0FBQU8sUUFBSSxRQUFRLFVBQVU7QUFBTSxhQUFPO0FBQU8sUUFBSSxPQUFPLFVBQVU7QUFBWSxhQUFPO0FBQU0sUUFBSTtBQUFFLGNBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxVQUFVLFNBQVMsQ0FBQyxHQUFHLFdBQVk7QUFBQSxNQUFDLENBQUMsQ0FBQztBQUFHLGFBQU87QUFBQSxJQUFNLFNBQVMsR0FBRztBQUFFLGFBQU87QUFBQSxJQUFPO0FBQUEsRUFBRTtBQUV4VSxXQUFTQyxrQkFBZ0IsR0FBRztBQUFFLElBQUFBLG9CQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQixTQUFTQSxrQkFBZ0JKLElBQUc7QUFBRSxhQUFPQSxHQUFFLGFBQWEsT0FBTyxlQUFlQSxFQUFDO0FBQUEsSUFBRztBQUFHLFdBQU9JLGtCQUFnQixDQUFDO0FBQUEsRUFBRztBQUU1TSxXQUFTYixrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQWlCek0sTUFBSSxvQkFBaUMseUJBQVUsWUFBWTtBQUNoRSxJQUFBTyxZQUFVVSxvQkFBbUIsVUFBVTtBQUV2QyxRQUFJLFNBQVNOLGVBQWFNLGtCQUFpQjtBQUUzQyxhQUFTQSxtQkFBa0IsT0FBTztBQUNoQyxVQUFJO0FBRUosTUFBQWIsa0JBQWdCLE1BQU1hLGtCQUFpQjtBQUV2QyxjQUFRLE9BQU8sS0FBSyxNQUFNLEtBQUs7QUFFL0IsTUFBQWpCLGtCQUFnQmdCLHlCQUF1QixLQUFLLEdBQUcsV0FBVyxJQUFJO0FBRTlELE1BQUFoQixrQkFBZ0JnQix5QkFBdUIsS0FBSyxHQUFHLGNBQWMsSUFBSTtBQUVqRSxNQUFBaEIsa0JBQWdCZ0IseUJBQXVCLEtBQUssR0FBRyxjQUFjLFNBQVUsS0FBSztBQUMxRSxjQUFNLFVBQVU7QUFFaEIsWUFBSSxPQUFPLE1BQU0sTUFBTSxtQkFBbUI7QUFDeEMsY0FBSSxhQUFhLE1BQU0sTUFBTSxtQkFBbUIsTUFBTTtBQUFBLFFBQ3hEO0FBQUEsTUFDRixDQUFDO0FBRUQsTUFBQWhCLGtCQUFnQmdCLHlCQUF1QixLQUFLLEdBQUcsMkJBQTJCLFNBQVUsS0FBSztBQUd2RixZQUFJLEtBQUs7QUFDUCxjQUFJLGFBQWEsWUFBWSxJQUFJO0FBQUEsUUFDbkM7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBaEIsa0JBQWdCZ0IseUJBQXVCLEtBQUssR0FBRyxpQkFBaUIsU0FBVSxLQUFLO0FBQzdFLGNBQU0sYUFBYTtBQUNuQixZQUFJLGNBQWMsTUFBTSxPQUNwQixTQUFTLFlBQVksUUFDckIsYUFBYSxZQUFZLFlBQ3pCLGtCQUFrQixZQUFZLGlCQUM5QixZQUFZLFlBQVksWUFBWSxHQUNwQyxpQkFBaUIsWUFBWSxpQkFBaUIsR0FDOUMsa0JBQWtCLFlBQVksa0JBQWtCO0FBRXBELFlBQUksS0FBSztBQUNQLGNBQUksYUFBYSxNQUFNLE1BQU07QUFDN0IsY0FBSSxhQUFhLFFBQVEsU0FBUztBQUVsQyxjQUFJLGVBQWUsTUFBTTtBQUN2QixnQkFBSSxhQUFhLFlBQVksR0FBRztBQUVoQyxnQkFBSSxvQkFBb0IsWUFBWSxvQkFBb0IsTUFBTTtBQUM1RCxrQkFBSSxhQUFhLHdCQUF3QixNQUFNO0FBQUEsWUFDakQ7QUFBQSxVQUNGO0FBRUEsY0FBSSxPQUFPLGNBQWMsVUFBVTtBQUNqQyxnQkFBSSxhQUFhLGNBQWMsU0FBUztBQUFBLFVBQzFDLFdBQVcsT0FBTyxtQkFBbUIsVUFBVTtBQUM3QyxnQkFBSSxhQUFhLG1CQUFtQixjQUFjO0FBQUEsVUFDcEQ7QUFFQSxjQUFJLE9BQU8sb0JBQW9CLFVBQVU7QUFDdkMsZ0JBQUksYUFBYSxtQkFBbUIsZUFBZTtBQUFBLFVBQ3JEO0FBQUEsUUFDRjtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFoQixrQkFBZ0JnQix5QkFBdUIsS0FBSyxHQUFHLFdBQXdCLDBDQUFLLFNBQVVFLFFBQU07QUFDMUYsWUFBSSxPQUFPQSxPQUFLLE1BQ1osUUFBUUEsT0FBSyxPQUNiLFFBQVFBLE9BQUs7QUFDakIsWUFBSSxTQUFTLEtBQUssS0FBSztBQUV2QixZQUFJLGFBQWEsT0FBTyxNQUNwQixVQUFVaEIsNEJBQXlCLFFBQVFULFlBQVM7QUFFeEQsWUFBSSxRQUFRLE9BQU8sT0FDZixlQUFlLE9BQU8sY0FDdEIsVUFBVSxPQUFPLFNBQ2pCLFdBQVcsT0FBTyxVQUNsQixVQUFVLE9BQU8sU0FDakIwQixVQUFTLE9BQU8sUUFDaEIsTUFBTSxPQUFPLEtBQ2IsTUFBTSxPQUFPLEtBQ2Isa0JBQWtCLE9BQU8saUJBQ3pCLFFBQVEsT0FBTyxNQUNmLGFBQWFqQiw0QkFBeUIsUUFBUVIsYUFBVTtBQUU1RCxZQUFJLGVBQWUsTUFBTSxPQUNyQixvQkFBb0IsYUFBYSxtQkFDakMsa0JBQWtCLGFBQWEsaUJBQy9CLGVBQWUsYUFBYSxjQUM1QixjQUFjLGFBQWEsYUFDM0IsY0FBYyxhQUFhLGFBQzNCLFlBQVksYUFBYSxXQUN6QixlQUFlLGFBQWEsY0FDNUIsZUFBZSxhQUFhLGNBQzVCLHVCQUF1QixhQUFhLHNCQUNwQyxhQUFhLGFBQWEsWUFDMUIsV0FBVyxhQUFhO0FBRTVCLFlBQUksY0FBYztBQUNoQixpQkFBTyxJQUFjLE1BQU1PLFlBQVM7QUFBQSxZQUNsQyxNQUFNO0FBQUEsWUFDTixXQUFXO0FBQUEsWUFDWDtBQUFBO0FBQUEsVUFFRixHQUFHLFVBQVUsR0FBRyxTQUFTLE9BQU9rQixPQUFNO0FBQUEsUUFDeEM7QUFFQSxZQUFJLGFBQWEsS0FBSyxPQUFPLFNBQVVDLFNBQVE7QUFDN0MsaUJBQU9BLFFBQU87QUFBQSxRQUNoQixDQUFDLEVBQUU7QUFDSCxZQUFJLEtBQUssYUFBYSxLQUFLO0FBQzNCLGVBQU8sSUFBYyx1QkFBdUJuQixZQUFTO0FBQUEsVUFDbkQsS0FBSztBQUFBLFVBQ0w7QUFBQSxVQUNBO0FBQUEsVUFDQSxhQUFhLFNBQVMsY0FBYztBQUNsQyxpQ0FBcUIsS0FBSztBQUFBLFVBQzVCO0FBQUEsVUFDQSxTQUFTLFNBQVMsUUFBUSxPQUFPO0FBQy9CLGtCQUFNLFFBQVE7QUFFZCxrQkFBTSxvQkFBb0IsUUFBUSxLQUFLO0FBQUEsVUFDekM7QUFBQSxVQUNBLEtBQUssTUFBTSxJQUFJLEtBQUssTUFBTSxLQUFLLElBQUk7QUFBQSxVQUNuQyxXQUFXLHNCQUFzQjtBQUFBLFVBQ2pDLE9BQU8sbUJBQW1CO0FBQUEsVUFDMUI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsUUFBUWtCO0FBQUEsVUFDUixpQkFBaUIsUUFBUSxJQUFJO0FBQUEsVUFDN0IsZ0JBQWdCLEtBQUssU0FBUztBQUFBLFVBQzlCO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLEdBQUcsVUFBVSxHQUFHLGVBQWU7QUFBQTtBQUFBLFVBQy9CcEIsZ0JBQWNBLGdCQUFjLENBQUMsR0FBRyxPQUFPLEdBQUcsVUFBVTtBQUFBLFVBQUcsTUFBTSxNQUFNO0FBQUEsUUFBVyxJQUFJLElBQWMsY0FBYztBQUFBLFVBQzVHLFFBQVE7QUFBQSxRQUNWLEdBQUcsS0FBSyxDQUFDO0FBQUEsTUFDWCxHQUFHLFFBQVEsQ0FBQztBQUVaLE1BQUFDLGtCQUFnQmdCLHlCQUF1QixLQUFLLEdBQUcsdUJBQXVCLFNBQVUsUUFBUSxPQUFPO0FBQzdGLFlBQUksT0FBTyxVQUFVO0FBQ25CO0FBQUEsUUFDRjtBQUVBLFlBQUksZUFBZSxNQUFNLE9BQ3JCLGtCQUFrQixhQUFhLGlCQUMvQixVQUFVLGFBQWEsU0FDdkIsd0JBQXdCLGFBQWEsZ0JBQ3JDLGlCQUFpQiwwQkFBMEIsU0FBUyxVQUFVO0FBRWxFLGNBQU0sTUFBTSxxQkFBcUIsZUFBZSxVQUFVLFNBQVVLLFFBQU87QUFDekUsY0FBSSxRQUFRQSxPQUFNO0FBQ2xCLGlCQUFPLFVBQVUsT0FBTztBQUFBLFFBQzFCLENBQUMsR0FBRyxXQUFZO0FBQ2QsY0FBSSxPQUFPLFlBQVksUUFBUSxpQkFBaUI7QUFDOUMsa0JBQU0sZ0JBQWdCLFFBQVEsS0FBSztBQUFBLFVBQ3JDLFdBQVcsT0FBTyxZQUFZLFFBQVEsT0FBTyxZQUFZLE9BQU87QUFDOUQsa0JBQU0sZUFBZSxRQUFRLEtBQUs7QUFBQSxVQUNwQyxPQUFPO0FBQ0wsa0JBQU0sWUFBWSxRQUFRLEtBQUs7QUFBQSxVQUNqQztBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELE1BQUFyQixrQkFBZ0JnQix5QkFBdUIsS0FBSyxHQUFHLGVBQWUsU0FBVSxhQUFhLE9BQU87QUFDMUYsWUFBSSxlQUFlLE1BQU0sT0FDckIsZ0JBQWdCLGFBQWEsZUFDN0IsVUFBVSxhQUFhLFNBQ3ZCLGtCQUFrQixhQUFhO0FBQ25DLFlBQUksaUJBQWlCLFFBQVEsSUFBSSxTQUFVLFFBQVE7QUFFakQsY0FBSSxnQkFBZ0JqQixnQkFBYyxDQUFDLEdBQUcsTUFBTTtBQUU1QyxjQUFJLGlCQUFpQjtBQUNuQixtQkFBTyxjQUFjO0FBQUEsVUFDdkI7QUFHQSxjQUFJLFdBQVcsYUFBYTtBQUMxQiwwQkFBYyxVQUFVO0FBQUEsVUFDMUI7QUFFQSxpQkFBTztBQUFBLFFBQ1QsQ0FBQztBQUNELHNCQUFjLGdCQUFnQixLQUFLO0FBQUEsTUFDckMsQ0FBQztBQUVELE1BQUFDLGtCQUFnQmdCLHlCQUF1QixLQUFLLEdBQUcsa0JBQWtCLFNBQVUsZUFBZSxPQUFPO0FBQy9GLFlBQUksZUFBZSxNQUFNLE9BQ3JCLGdCQUFnQixhQUFhLGVBQzdCLGtCQUFrQixhQUFhLGlCQUMvQixVQUFVLGFBQWE7QUFDM0IsWUFBSSxpQkFBaUIsUUFBUSxJQUFJLFNBQVUsUUFBUTtBQUNqRCxjQUFJLGdCQUFnQmpCLGdCQUFjLENBQUMsR0FBRyxNQUFNO0FBRTVDLGNBQUksV0FBVyxpQkFBaUIsb0JBQW9CLFVBQVU7QUFDNUQsbUJBQU8sY0FBYztBQUFBLFVBQ3ZCO0FBRUEsaUJBQU87QUFBQSxRQUNULENBQUM7QUFDRCxzQkFBYyxnQkFBZ0IsS0FBSztBQUFBLE1BQ3JDLENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JnQix5QkFBdUIsS0FBSyxHQUFHLG1CQUFtQixTQUFVLGdCQUFnQixPQUFPO0FBQ2pHLFlBQUksZUFBZSxNQUFNLE9BQ3JCLGdCQUFnQixhQUFhLGVBQzdCLFVBQVUsYUFBYTtBQUMzQix1QkFBZSxVQUFVO0FBQ3pCLFlBQUksaUJBQWlCLFFBQVEsSUFBSSxTQUFVLFFBQVE7QUFDakQsY0FBSSxnQkFBZ0JqQixnQkFBYyxDQUFDLEdBQUcsTUFBTTtBQUU1QyxjQUFJLFdBQVcsZ0JBQWdCO0FBQzdCLDBCQUFjLFVBQVU7QUFBQSxVQUMxQjtBQUVBLGlCQUFPO0FBQUEsUUFDVCxDQUFDO0FBQ0Qsc0JBQWMsZ0JBQWdCLEtBQUs7QUFBQSxNQUNyQyxDQUFDO0FBRUQsYUFBTztBQUFBLElBQ1Q7QUFFQSxJQUFBTyxlQUFhVyxvQkFBbUIsQ0FBQztBQUFBLE1BQy9CLEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxxQkFBcUI7QUFDbkMsWUFBSSxvQkFBb0IsS0FBSyxNQUFNO0FBRW5DLFlBQUksS0FBSyxjQUFjLEtBQUssTUFBTSxlQUFlLE1BQU07QUFDckQsZUFBSyxXQUFXLGFBQWEseUJBQXlCLEdBQUcsT0FBTyxLQUFLLE1BQU0sYUFBYSxpQkFBaUIsQ0FBQyxDQUFDO0FBQUEsUUFDN0c7QUFFQSxZQUFJLEtBQUssV0FBVyxPQUFPLEtBQUssTUFBTSxzQkFBc0IsYUFBYTtBQUN2RSxlQUFLLFFBQVEsYUFBYSxLQUFLLE1BQU0sbUJBQW1CLE1BQU07QUFBQSxRQUNoRTtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBU0ssVUFBUztBQUN2QixZQUFJLFNBQVM7QUFFYixZQUFJLGVBQWUsS0FBSyxPQUNwQixZQUFZLGFBQWEsV0FDekIsVUFBVSxhQUFhLFNBQ3ZCLGNBQWMsYUFBYSxhQUMzQixnQkFBZ0IsYUFBYSxlQUM3QixlQUFlLGFBQWEsY0FDNUIsZUFBZSxhQUFhLFFBQzVCLGNBQWMsYUFBYSxhQUMzQixZQUFZLGFBQWEsV0FDekIsb0JBQW9CLGFBQWEsbUJBQ2pDLGVBQWUsYUFBYSxjQUM1QixZQUFZLGFBQWEsV0FDekIsa0JBQWtCLGFBQWEsaUJBQy9CLGlCQUFpQixhQUFhLGdCQUM5QixrQkFBa0IsYUFBYSxpQkFDL0IsV0FBVyxhQUFhLFVBQ3hCLGNBQWMsYUFBYSxhQUMzQixhQUFhLGFBQWEsWUFDMUIsZUFBZSxhQUFhLGNBQzVCLFNBQVMsYUFBYSxRQUN0Qix1QkFBdUIsYUFBYSxzQkFDcEMsWUFBWSxhQUFhLFlBQVksR0FDckMsaUJBQWlCLGFBQWEsaUJBQWlCLEdBQy9DLGtCQUFrQixhQUFhLGtCQUFrQixHQUNqRCxPQUFPLGFBQWEsTUFDcEIsZ0JBQWdCLGFBQWEsZUFDN0IsV0FBVyxhQUFhLFVBQ3hCLE9BQU9wQiw0QkFBeUIsY0FBY1AsYUFBVTtBQUU1RCxZQUFJLGNBQWMsa0JBQWtCO0FBQ3BDLFlBQUksZUFBZSxpQkFBaUI7QUFDcEMsWUFBSSxtQkFBbUIsZUFBZSxRQUFRO0FBRTlDLFlBQUkscUJBQXFCLFFBQVc7QUFDbEMsY0FBSSxvQkFBb0I7QUFDeEIsY0FBSSxvQkFBb0IsWUFBWTtBQUNwQyxjQUFJLHdCQUF3QixZQUFZLFNBQVM7QUFFakQsY0FBSSx1QkFBdUI7QUFFekIsZ0NBQW9CLG9CQUFvQixPQUFPO0FBQUEsVUFDakQsT0FBTztBQUNMLCtCQUFtQixvQkFBb0I7QUFBQSxVQUN6QztBQUFBLFFBQ0Y7QUFFQSxZQUFJLGNBQVUsb0JBQUE0QixTQUFXLHFCQUFxQjtBQUFBLFVBQzVDLGdDQUFnQztBQUFBLFVBQ2hDLDhCQUE4QjtBQUFBLFFBQ2hDLEdBQUcsU0FBUztBQUNaLGVBQU8sSUFBYyxPQUFPdEIsWUFBUztBQUFBLFVBQ25DLFdBQVc7QUFBQSxRQUNiLEdBQUcsSUFBSSxHQUFHLGdCQUFnQixJQUFjLGNBQWM7QUFBQSxVQUNwRCxlQUFlLENBQUM7QUFBQSxRQUNsQixHQUFHLFNBQVV1QixRQUFPO0FBQ2xCLGNBQUksUUFBUUEsT0FBTSxPQUNkLFNBQVNBLE9BQU07QUFDbkIsaUJBQU8sSUFBYyxlQUFldkIsWUFBUztBQUFBLFlBQzNDLEtBQUssT0FBTztBQUFBLFlBQ1osVUFBVSxPQUFPO0FBQUEsWUFDakIsV0FBVztBQUFBLFlBQ1gsaUJBQWlCO0FBQUEsWUFDakI7QUFBQSxZQUNBLFFBQVEsb0JBQW9CO0FBQUEsWUFDNUIsV0FBVyxZQUFZO0FBQUEsWUFDdkIsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1Ysa0JBQWtCO0FBQUEsWUFDbEIsVUFBVSxPQUFPO0FBQUEsVUFDbkIsR0FBRyxXQUFXLEdBQUcsT0FBTyxPQUFPO0FBQUEsUUFDakMsQ0FBQyxJQUFJLElBQWMsT0FBTztBQUFBLFVBQ3hCLFdBQVc7QUFBQSxVQUNYLEtBQUssS0FBSztBQUFBLFFBQ1osR0FBRyxJQUFjLE1BQU07QUFBQSxVQUNyQixLQUFLLEtBQUs7QUFBQSxRQUNaLEdBQUcsWUFBWSxJQUFJLFNBQVUsR0FBRyxPQUFPO0FBQ3JDLGlCQUFvQixnQ0FBQXdCLFFBQU0sY0FBYyxPQUFPLFNBQVM7QUFBQSxZQUN0RCxLQUFLO0FBQUEsWUFDTCxNQUFNO0FBQUEsWUFDTjtBQUFBLFVBQ0YsR0FBRyxJQUFJO0FBQUEsUUFDVCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQUEsTUFDTjtBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBRUYsV0FBT1I7QUFBQSxFQUNULEVBQUUseUJBQVM7QUFFWCxFQUFBakIsa0JBQWdCLG1CQUFtQixnQkFBZ0I7QUFBQSxJQUNqRCxXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixlQUFlO0FBQUEsRUFDakIsQ0FBQztBQUVELG9CQUFrQixZQUFZO0FBQUEsSUFDNUIsV0FBVyxvQkFBQTBCLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTzVCLG1CQUFtQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzdCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixpQkFBaUIsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBQUEsUUFBVSxLQUFLLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBSzdGLGFBQWEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXZCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPcEIsY0FBYyxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsS0FBSyxZQUFZLG9CQUFBQSxRQUFVLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUk1RSxVQUFVLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsaUJBQWlCLGNBQWMsdUJBQXVCLFlBQVksYUFBYSxTQUFTLGdCQUFnQixjQUFjLFVBQVUsWUFBWSxnQkFBZ0IsUUFBUSxhQUFhLGFBQWEsY0FBYyxXQUFXLGNBQWMsWUFBWSxZQUFZLGdCQUFnQixVQUFVLFFBQVEsYUFBYSxRQUFRLG1CQUFtQixpQkFBaUIsVUFBVSxjQUFjLFNBQVMsU0FBUyxPQUFPLFlBQVksWUFBWSxhQUFhLFlBQVksU0FBUyx1QkFBdUIsU0FBUyxxQkFBcUIsU0FBUyxnQkFBZ0IsZUFBZSxjQUFjLFdBQVcsV0FBVyxTQUFTLFdBQVcsV0FBVyxjQUFjLGFBQWEsbUJBQW1CLHdCQUF3QixtQkFBbUIsb0JBQW9CLHNCQUFzQixvQkFBb0IsUUFBUSxpQkFBaUIscUJBQXFCLHdCQUF3Qix1QkFBdUIseUJBQXlCLFNBQVMsOEJBQThCLHdCQUF3QixjQUFjLFlBQVksT0FBTyxnQkFBZ0Isa0JBQWtCLFlBQVksV0FBVyxlQUFlLGVBQWUsWUFBWSxnQkFBZ0IsaUJBQWlCLGFBQWEsT0FBTyxtQkFBbUIsb0JBQW9CLFlBQVkscUJBQXFCLG1CQUFtQixvQkFBb0IsY0FBYyxtQkFBbUIsbUJBQW1CLGlCQUFpQiw4QkFBOEIsNEJBQTRCLGlCQUFpQixnQkFBZ0IseUJBQXlCLHlCQUF5Qix1QkFBdUIseUJBQXlCLHdCQUF3QixzQkFBc0IsY0FBYyxxQkFBcUIsNEJBQTRCLDZCQUE2Qix5QkFBeUIsMEJBQTBCLGNBQWMsZ0JBQWdCLGVBQWUsbUJBQW1CLGNBQWMsdUJBQXVCLFNBQVMsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsY0FBYyxnQkFBZ0IsT0FBTyxhQUFhLGFBQWEsZUFBZSxXQUFXLGVBQWUsVUFBVSxRQUFRLFlBQVksUUFBUSxlQUFlLGdCQUFnQixxQkFBcUIsY0FBYyxhQUFhLGlCQUFpQixjQUFjLGtCQUFrQixZQUFZLFFBQVEsVUFBVSxXQUFXLFNBQVMsUUFBUSxrQkFBa0IsWUFBWSxRQUFRLFdBQVcsU0FBUyxnQkFBZ0IsV0FBVyxRQUFRLFFBQVEsYUFBYSxTQUFTLGdCQUFnQixjQUFjLGFBQWEsY0FBYyxzQkFBc0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGtCQUFrQixnQkFBZ0IsaUJBQWlCLGVBQWUsV0FBVyxVQUFVLE1BQU0sWUFBWSxZQUFZLGVBQWUsY0FBYyxlQUFlLFlBQVksa0JBQWtCLGlCQUFpQixVQUFVLFdBQVcsYUFBYSxjQUFjLGNBQWMsYUFBYSxRQUFRLFFBQVEsV0FBVyxRQUFRLFlBQVksV0FBVyxlQUFlLGlCQUFpQixjQUFjLGlCQUFpQixhQUFhLGlCQUFpQixhQUFhLHlCQUF5QixZQUFZLGFBQWEsdUJBQXVCLFlBQVksbUJBQW1CLGlCQUFpQixjQUFjLGtCQUFrQixlQUFlLG9CQUFvQixxQkFBcUIsd0JBQXdCLFlBQVksV0FBVyxlQUFlLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSxXQUFXLGVBQWUsYUFBYSxjQUFjLGtCQUFrQixlQUFlLGdCQUFnQixZQUFZLGlCQUFpQixlQUFlLGVBQWUsYUFBYSxhQUFhLHFCQUFxQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsYUFBYSxnQkFBZ0Isa0JBQWtCLGNBQWMsYUFBYSxjQUFjLGVBQWUsZUFBZSx1QkFBdUIsV0FBVyxrQkFBa0IsY0FBYyxpQkFBaUIsa0JBQWtCLGlCQUFpQixzQkFBc0IsVUFBVSwwQkFBMEIsb0JBQW9CLG1CQUFtQixpQkFBaUIsYUFBYSxVQUFVLFFBQVEsWUFBWSxZQUFZLGFBQWEsVUFBVSxTQUFTLGlCQUFpQixjQUFjLFlBQVksU0FBUyxpQkFBaUIsdUJBQXVCLFVBQVUsaUJBQWlCLFFBQVEsYUFBYSxVQUFVLFFBQVEsZUFBZSxVQUFVLFdBQVcsVUFBVSx1QkFBdUIsV0FBVyxpQkFBaUIsY0FBYyxlQUFlLGFBQWEsV0FBVyxTQUFTLFdBQVcsVUFBVSxXQUFXLE9BQU8sYUFBYSxlQUFlLFFBQVEsY0FBYyxRQUFRLGdCQUFnQixzQkFBc0IsVUFBVSxRQUFRLG9CQUFvQixTQUFTLHFCQUFxQixXQUFXLGlCQUFpQixZQUFZLGdCQUFnQixhQUFhLFFBQVEsbUJBQW1CLFNBQVMsVUFBVSxxQkFBcUIsd0JBQXdCLGVBQWUsa0JBQWtCLDBCQUEwQiwwQkFBMEIsaUJBQWlCLFNBQVMsU0FBUyxhQUFhLFlBQVksWUFBWSxhQUFhLFVBQVUsWUFBWSxhQUFhLFVBQVUsYUFBYSxrQkFBa0IsY0FBYyxtQkFBbUIsa0JBQWtCLG1CQUFtQixpQkFBaUIsa0JBQWtCLFNBQVMsUUFBUSxjQUFjLGFBQWEsV0FBVyxVQUFVLGFBQWEsT0FBTyxlQUFlLFdBQVcsdUJBQXVCLHdCQUF3QixzQkFBc0IsbUJBQW1CLE9BQU8sUUFBUSxlQUFlLFlBQVksZUFBZSxlQUFlLGNBQWMsWUFBWSxTQUFTLFVBQVUsVUFBVSx1QkFBdUIsYUFBYSxRQUFRLGNBQWMsU0FBUyxpQkFBaUIsVUFBVSxlQUFlLFdBQVcsa0JBQWtCLG9CQUFvQiwyQkFBMkIsa0JBQWtCLHlCQUF5QixZQUFZLFdBQVcsV0FBVyxvQkFBb0IsZ0JBQWdCLGFBQWEsVUFBVSxZQUFZLGVBQWUsV0FBVyxlQUFlLFdBQVcsb0JBQW9CLGdCQUFnQixjQUFjLFlBQVksb0JBQW9CLHNCQUFzQixVQUFVLGNBQWMsbUJBQW1CLGNBQWMsZUFBZSxnQkFBZ0IsY0FBYyw0QkFBNEIsaUJBQWlCLGFBQWEsb0JBQW9CLGdCQUFnQixhQUFhLG1CQUFtQixjQUFjLGtCQUFrQixjQUFjLGFBQWEsa0JBQWtCLGlCQUFpQixZQUFZLGtCQUFrQixrQkFBa0IsV0FBVyxhQUFhLFlBQVksZ0JBQWdCLGVBQWUsc0JBQXNCLG9CQUFvQixlQUFlLGtCQUFrQixlQUFlLGFBQWEsZUFBZSxlQUFlLGlCQUFpQixnQkFBZ0Isa0JBQWtCLG1CQUFtQixpQkFBaUIsY0FBYyxvQkFBb0IscUJBQXFCLGFBQWEsbUJBQW1CLGNBQWMsZUFBZSxlQUFlLGVBQWUsWUFBWSxhQUFhLG1CQUFtQixlQUFlLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxZQUFZLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS25uTixVQUFVLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLE9BQU8sQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSzNDLE9BQU8sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxJQUFJLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS2xGLFlBQVksb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUt0QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxNQUM1QixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsTUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSzVCLGFBQWEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUt2QixzQkFBc0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUtoQyxTQUFTLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLbkIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsTUFDNUIsTUFBTSxvQkFBQUEsUUFBVTtBQUFBLE1BQ2hCLFFBQVEsb0JBQUFBLFFBQVU7QUFBQSxNQUNsQixLQUFLLG9CQUFBQSxRQUFVO0FBQUEsSUFDakIsQ0FBQyxFQUFFLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2QsYUFBYSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNdkIsVUFBVSxvQkFBQUEsUUFBVSxNQUFNLENBQUMsWUFBWSxNQUFNLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTTlDLGVBQWUsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1qRyxXQUFXLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLckIsU0FBUyxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS3pDLGNBQWMsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQUEsTUFDaEcsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxNQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTTVCLE9BQU8sb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTWpCLGlCQUFpQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFNM0IsS0FBSyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQU9mLFNBQVMsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLE1BQU0sT0FBTyxNQUFTLENBQUM7QUFBQSxNQUNqRCxVQUFVLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLcEIsU0FBUyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS25CLFFBQVEsb0JBQUFBLFFBQVU7QUFBQSxNQUNsQixLQUFLLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQU1mLE1BQU0sb0JBQUFBLFFBQVUsTUFBTSxDQUFDLENBQUM7QUFBQSxJQUMxQixDQUFDLEVBQUUsVUFBVSxFQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLZixnQkFBZ0Isb0JBQUFBLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxNQUFNO0FBQUEsTUFDaEQsY0FBYyxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFBQSxNQUNoRyxXQUFXLG9CQUFBQSxRQUFVO0FBQUEsTUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLE1BQzVCLE9BQU8sb0JBQUFBLFFBQVU7QUFBQSxNQUNqQixpQkFBaUIsb0JBQUFBLFFBQVU7QUFBQSxNQUMzQixLQUFLLG9CQUFBQSxRQUFVO0FBQUEsTUFDZixTQUFTLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxNQUFNLE9BQU8sTUFBUyxDQUFDO0FBQUEsTUFDakQsVUFBVSxvQkFBQUEsUUFBVTtBQUFBLE1BQ3BCLFNBQVMsb0JBQUFBLFFBQVU7QUFBQSxNQUNuQixRQUFRLG9CQUFBQSxRQUFVO0FBQUEsTUFDbEIsS0FBSyxvQkFBQUEsUUFBVTtBQUFBLE1BQ2YsTUFBTSxvQkFBQUEsUUFBVSxNQUFNLENBQUMsQ0FBQztBQUFBLElBQzFCLENBQUMsRUFBRSxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLYixhQUFhLG9CQUFBQSxRQUFVLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUs5QixlQUFlLG9CQUFBQSxRQUFVLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTTlCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPeEIsUUFBUSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsT0FBTyxZQUFZLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1wRixpQkFBaUIsb0JBQUFBLFFBQVU7QUFBQSxJQUMzQixZQUFZLG9CQUFBQSxRQUFVO0FBQUEsSUFDdEIsY0FBYyxvQkFBQUEsUUFBVSxLQUFLO0FBQUEsSUFDN0IsUUFBUSxvQkFBQUEsUUFBVSxPQUFPO0FBQUEsSUFDekIsc0JBQXNCLG9CQUFBQSxRQUFVLEtBQUs7QUFBQSxFQUN2Qzs7O0FKdG1CQSxXQUFTQyxVQUFRLEtBQUs7QUFBRTtBQUEyQixRQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sT0FBTyxhQUFhLFVBQVU7QUFBRSxNQUFBQSxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUcsT0FBTztBQUFFLE1BQUFELFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU9BLFFBQU8sT0FBTyxXQUFXLGNBQWNBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRztBQUFFLFdBQU9ELFVBQVEsR0FBRztBQUFBLEVBQUc7QUFFelgsTUFBSUUsZUFBWSxDQUFDLFlBQVksYUFBYSxXQUFXLFlBQVksd0JBQXdCLGNBQWMsZUFBZSxtQkFBbUIsYUFBYSxhQUFhLGdCQUFnQixVQUFVLG1CQUFtQixjQUFjLG9CQUFvQixrQkFBa0Isb0JBQW9CLGdCQUFnQixnQkFBZ0IsZUFBZTtBQUF2VSxNQUNJQyxnQkFBYSxDQUFDLGNBQWMsb0JBQW9CLFlBQVksZ0JBQWdCLFVBQVU7QUFEMUYsTUFFSUMsZ0JBQWEsQ0FBQyxjQUFjLG9CQUFvQixpQkFBaUIsV0FBVztBQUVoRixXQUFTQyxpQkFBZSxLQUFLLEdBQUc7QUFBRSxXQUFPQyxrQkFBZ0IsR0FBRyxLQUFLQyx3QkFBc0IsS0FBSyxDQUFDLEtBQUtDLDhCQUE0QixLQUFLLENBQUMsS0FBS0MsbUJBQWlCO0FBQUEsRUFBRztBQUU3SixXQUFTQSxxQkFBbUI7QUFBRSxVQUFNLElBQUksVUFBVSwySUFBMkk7QUFBQSxFQUFHO0FBRWhNLFdBQVNELDhCQUE0QixHQUFHLFFBQVE7QUFBRSxRQUFJLENBQUM7QUFBRztBQUFRLFFBQUksT0FBTyxNQUFNO0FBQVUsYUFBT0Usb0JBQWtCLEdBQUcsTUFBTTtBQUFHLFFBQUksSUFBSSxPQUFPLFVBQVUsU0FBUyxLQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsRUFBRTtBQUFHLFFBQUksTUFBTSxZQUFZLEVBQUU7QUFBYSxVQUFJLEVBQUUsWUFBWTtBQUFNLFFBQUksTUFBTSxTQUFTLE1BQU07QUFBTyxhQUFPLE1BQU0sS0FBSyxDQUFDO0FBQUcsUUFBSSxNQUFNLGVBQWUsMkNBQTJDLEtBQUssQ0FBQztBQUFHLGFBQU9BLG9CQUFrQixHQUFHLE1BQU07QUFBQSxFQUFHO0FBRS9aLFdBQVNBLG9CQUFrQixLQUFLLEtBQUs7QUFBRSxRQUFJLE9BQU8sUUFBUSxNQUFNLElBQUk7QUFBUSxZQUFNLElBQUk7QUFBUSxhQUFTLElBQUksR0FBRyxPQUFPLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEtBQUs7QUFBRSxXQUFLLENBQUMsSUFBSSxJQUFJLENBQUM7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQU07QUFFdEwsV0FBU0gsd0JBQXNCLEtBQUssR0FBRztBQUFFLFFBQUksS0FBSyxPQUFPLE9BQU8sT0FBTyxPQUFPLFdBQVcsZUFBZSxJQUFJLE9BQU8sUUFBUSxLQUFLLElBQUksWUFBWTtBQUFHLFFBQUksTUFBTTtBQUFNO0FBQVEsUUFBSSxPQUFPLENBQUM7QUFBRyxRQUFJLEtBQUs7QUFBTSxRQUFJLEtBQUs7QUFBTyxRQUFJLElBQUk7QUFBSSxRQUFJO0FBQUUsV0FBSyxLQUFLLEdBQUcsS0FBSyxHQUFHLEdBQUcsRUFBRSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsT0FBTyxLQUFLLE1BQU07QUFBRSxhQUFLLEtBQUssR0FBRyxLQUFLO0FBQUcsWUFBSSxLQUFLLEtBQUssV0FBVztBQUFHO0FBQUEsTUFBTztBQUFBLElBQUUsU0FBUyxLQUFLO0FBQUUsV0FBSztBQUFNLFdBQUs7QUFBQSxJQUFLLFVBQUU7QUFBVSxVQUFJO0FBQUUsWUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLEtBQUs7QUFBTSxhQUFHLFFBQVEsRUFBRTtBQUFBLE1BQUcsVUFBRTtBQUFVLFlBQUk7QUFBSSxnQkFBTTtBQUFBLE1BQUk7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQU07QUFFaGdCLFdBQVNELGtCQUFnQixLQUFLO0FBQUUsUUFBSSxNQUFNLFFBQVEsR0FBRztBQUFHLGFBQU87QUFBQSxFQUFLO0FBRXBFLFdBQVNLLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLFVBQVFDLFNBQVEsZ0JBQWdCO0FBQUUsUUFBSUMsUUFBTyxPQUFPLEtBQUtELE9BQU07QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxVQUFVLE9BQU8sc0JBQXNCQSxPQUFNO0FBQUcsVUFBSSxnQkFBZ0I7QUFBRSxrQkFBVSxRQUFRLE9BQU8sU0FBVSxLQUFLO0FBQUUsaUJBQU8sT0FBTyx5QkFBeUJBLFNBQVEsR0FBRyxFQUFFO0FBQUEsUUFBWSxDQUFDO0FBQUEsTUFBRztBQUFFLE1BQUFDLE1BQUssS0FBSyxNQUFNQSxPQUFNLE9BQU87QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXhWLFdBQVNDLGdCQUFjLFFBQVE7QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsVUFBSSxTQUFTLFVBQVUsQ0FBQyxLQUFLLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFVBQUksSUFBSSxHQUFHO0FBQUUsUUFBQUgsVUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxVQUFBSSxrQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRyxXQUFXLE9BQU8sMkJBQTJCO0FBQUUsZUFBTyxpQkFBaUIsUUFBUSxPQUFPLDBCQUEwQixNQUFNLENBQUM7QUFBQSxNQUFHLE9BQU87QUFBRSxRQUFBSixVQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxpQkFBTyxlQUFlLFFBQVEsS0FBSyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFcmhCLFdBQVNLLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBRWxULFdBQVNDLGtCQUFnQixVQUFVLGFBQWE7QUFBRSxRQUFJLEVBQUUsb0JBQW9CLGNBQWM7QUFBRSxZQUFNLElBQUksVUFBVSxtQ0FBbUM7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUV4SixXQUFTQyxvQkFBa0IsUUFBUSxPQUFPO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUFFLFVBQUksYUFBYSxNQUFNLENBQUM7QUFBRyxpQkFBVyxhQUFhLFdBQVcsY0FBYztBQUFPLGlCQUFXLGVBQWU7QUFBTSxVQUFJLFdBQVc7QUFBWSxtQkFBVyxXQUFXO0FBQU0sYUFBTyxlQUFlLFFBQVEsV0FBVyxLQUFLLFVBQVU7QUFBQSxJQUFHO0FBQUEsRUFBRTtBQUU1VCxXQUFTQyxlQUFhLGFBQWEsWUFBWSxhQUFhO0FBQUUsUUFBSTtBQUFZLE1BQUFELG9CQUFrQixZQUFZLFdBQVcsVUFBVTtBQUFHLFFBQUk7QUFBYSxNQUFBQSxvQkFBa0IsYUFBYSxXQUFXO0FBQUcsV0FBTztBQUFBLEVBQWE7QUFFdE4sV0FBU0UsWUFBVSxVQUFVLFlBQVk7QUFBRSxRQUFJLE9BQU8sZUFBZSxjQUFjLGVBQWUsTUFBTTtBQUFFLFlBQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLElBQUc7QUFBRSxhQUFTLFlBQVksT0FBTyxPQUFPLGNBQWMsV0FBVyxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUUsQ0FBQztBQUFHLFFBQUk7QUFBWSxNQUFBQyxrQkFBZ0IsVUFBVSxVQUFVO0FBQUEsRUFBRztBQUVoWSxXQUFTQSxrQkFBZ0IsR0FBRyxHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8sa0JBQWtCLFNBQVNBLGtCQUFnQkMsSUFBR0MsSUFBRztBQUFFLE1BQUFELEdBQUUsWUFBWUM7QUFBRyxhQUFPRDtBQUFBLElBQUc7QUFBRyxXQUFPRCxrQkFBZ0IsR0FBRyxDQUFDO0FBQUEsRUFBRztBQUV6SyxXQUFTRyxlQUFhLFNBQVM7QUFBRSxRQUFJLDRCQUE0QkMsNEJBQTBCO0FBQUcsV0FBTyxTQUFTLHVCQUF1QjtBQUFFLFVBQUksUUFBUUMsa0JBQWdCLE9BQU8sR0FBRztBQUFRLFVBQUksMkJBQTJCO0FBQUUsWUFBSSxZQUFZQSxrQkFBZ0IsSUFBSSxFQUFFO0FBQWEsaUJBQVMsUUFBUSxVQUFVLE9BQU8sV0FBVyxTQUFTO0FBQUEsTUFBRyxPQUFPO0FBQUUsaUJBQVMsTUFBTSxNQUFNLE1BQU0sU0FBUztBQUFBLE1BQUc7QUFBRSxhQUFPQyw2QkFBMkIsTUFBTSxNQUFNO0FBQUEsSUFBRztBQUFBLEVBQUc7QUFFeGEsV0FBU0EsNkJBQTJCQyxPQUFNLE1BQU07QUFBRSxRQUFJLFNBQVM5QixVQUFRLElBQUksTUFBTSxZQUFZLE9BQU8sU0FBUyxhQUFhO0FBQUUsYUFBTztBQUFBLElBQU0sV0FBVyxTQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksVUFBVSwwREFBMEQ7QUFBQSxJQUFHO0FBQUUsV0FBTytCLHlCQUF1QkQsS0FBSTtBQUFBLEVBQUc7QUFFL1IsV0FBU0MseUJBQXVCRCxPQUFNO0FBQUUsUUFBSUEsVUFBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLGVBQWUsMkRBQTJEO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUVySyxXQUFTSCw4QkFBNEI7QUFBRSxRQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGFBQU87QUFBTyxRQUFJLFFBQVEsVUFBVTtBQUFNLGFBQU87QUFBTyxRQUFJLE9BQU8sVUFBVTtBQUFZLGFBQU87QUFBTSxRQUFJO0FBQUUsY0FBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxDQUFDLEdBQUcsV0FBWTtBQUFBLE1BQUMsQ0FBQyxDQUFDO0FBQUcsYUFBTztBQUFBLElBQU0sU0FBUyxHQUFHO0FBQUUsYUFBTztBQUFBLElBQU87QUFBQSxFQUFFO0FBRXhVLFdBQVNDLGtCQUFnQixHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLFNBQVNBLGtCQUFnQkosSUFBRztBQUFFLGFBQU9BLEdBQUUsYUFBYSxPQUFPLGVBQWVBLEVBQUM7QUFBQSxJQUFHO0FBQUcsV0FBT0ksa0JBQWdCLENBQUM7QUFBQSxFQUFHO0FBRTVNLFdBQVNaLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBc0J6TSxNQUFJLGdCQUE2Qix5QkFBVSxZQUFZO0FBQzVELElBQUFNLFlBQVVVLGdCQUFlLFVBQVU7QUFFbkMsUUFBSSxTQUFTTixlQUFhTSxjQUFhO0FBRXZDLGFBQVNBLGVBQWMsT0FBTztBQUM1QixVQUFJO0FBRUosVUFBSTtBQUVKLE1BQUFiLGtCQUFnQixNQUFNYSxjQUFhO0FBRW5DLGNBQVEsT0FBTyxLQUFLLE1BQU0sS0FBSztBQUUvQixNQUFBaEIsa0JBQWdCZSx5QkFBdUIsS0FBSyxHQUFHLFlBQVksSUFBSTtBQUUvRCxNQUFBZixrQkFBZ0JlLHlCQUF1QixLQUFLLEdBQUcsZ0JBQTZCLCtDQUFVLENBQUM7QUFFdkYsTUFBQWYsa0JBQWdCZSx5QkFBdUIsS0FBSyxHQUFHLGtCQUErQiwrQ0FBVSxDQUFDO0FBRXpGLE1BQUFmLGtCQUFnQmUseUJBQXVCLEtBQUssR0FBRyxrQkFBa0IsS0FBSztBQUV0RSxNQUFBZixrQkFBZ0JlLHlCQUF1QixLQUFLLEdBQUcsVUFBVSxNQUFNO0FBRS9ELE1BQUFmLGtCQUFnQmUseUJBQXVCLEtBQUssR0FBRyxvQkFBb0IsTUFBTTtBQUV6RSxNQUFBZixrQkFBZ0JlLHlCQUF1QixLQUFLLEdBQUcsVUFBVSxNQUFNO0FBRS9ELE1BQUFmLGtCQUFnQmUseUJBQXVCLEtBQUssR0FBRyxlQUFlLFdBQVk7QUFJeEUsY0FBTSxpQkFBaUI7QUFBQSxNQUN6QixDQUFDO0FBRUQsTUFBQWYsa0JBQWdCZSx5QkFBdUIsS0FBSyxHQUFHLFdBQVcsV0FBWTtBQUNwRSxZQUFJLE1BQU0sZ0JBQWdCO0FBQ3hCLGdCQUFNLGlCQUFpQjtBQUN2QjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLENBQUMsTUFBTSxNQUFNLGVBQWUsVUFBVSxNQUFNLE1BQU0scUJBQXFCLE1BQU07QUFDL0U7QUFBQSxRQUNGO0FBRUEsWUFBSSxnQkFBZ0IsTUFBTSxNQUFNLGVBQWUsVUFBVSxTQUFVLFFBQVE7QUFDekUsaUJBQU8sT0FBTyxXQUFXLENBQUMsT0FBTyxZQUFZLENBQUMsT0FBTztBQUFBLFFBQ3ZELENBQUM7QUFFRCxZQUFJLGdCQUFnQixJQUFJO0FBQ3RCLGdCQUFNLFNBQVM7QUFBQSxZQUNiLG1CQUFtQjtBQUFBLFlBQ25CLFdBQVc7QUFBQSxVQUNiLENBQUM7QUFBQSxRQUNILE9BQU87QUFDTCxnQkFBTSxTQUFTO0FBQUEsWUFDYixtQkFBbUIsTUFBTSxNQUFNLGVBQWUsVUFBVSxTQUFVLFFBQVE7QUFDeEUscUJBQU8sQ0FBQyxPQUFPLFlBQVksQ0FBQyxPQUFPO0FBQUEsWUFDckMsQ0FBQztBQUFBLFlBQ0QsV0FBVztBQUFBLFVBQ2IsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBZixrQkFBZ0JlLHlCQUF1QixLQUFLLEdBQUcsYUFBYSxTQUFVLE9BQU87QUFDM0UsWUFBSSxjQUFjLE1BQU0sZUFBZTtBQUV2QyxnQkFBUSxNQUFNLEtBQUs7QUFBQSxVQUNqQixLQUFLLGFBQUs7QUFDUixrQkFBTSxlQUFlO0FBQ3JCLGtCQUFNLGdCQUFnQjtBQUV0QixrQkFBTSwyQkFBMkIsRUFBRTtBQUVuQztBQUFBLFVBRUYsS0FBSyxhQUFLO0FBQ1Isa0JBQU0sZUFBZTtBQUNyQixrQkFBTSxnQkFBZ0I7QUFFdEIsa0JBQU0sMkJBQTJCLENBQUM7QUFFbEM7QUFBQSxVQUtGLEtBQUssYUFBSztBQUFBLFVBQ1YsS0FBSyxhQUFLO0FBQ1IsZ0JBQUksTUFBTSxNQUFNLFlBQVk7QUFDMUIsa0JBQUksdUJBQXVCO0FBSTNCLGtCQUFJLE1BQU0sV0FBVyxNQUFNLFlBQVksTUFBTSxRQUFRLGFBQUssT0FBTztBQUMvRDtBQUFBLGNBQ0Y7QUFNQSxrQkFBSSxFQUFFLE1BQU0sV0FBVyxNQUFNLFlBQVksTUFBTSxhQUFhLHdCQUF3QixNQUFNLGVBQWUsYUFBYSxRQUFRLDBCQUEwQixTQUFTLFVBQVUseUJBQXlCLHNCQUFzQixnQkFBZ0IsUUFBUSwyQkFBMkIsU0FBUyxTQUFTLHVCQUF1QixpQkFBaUI7QUFDclU7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUVBLGtCQUFNLGVBQWU7QUFDckIsa0JBQU0sZ0JBQWdCO0FBRXRCLGdCQUFJLE1BQU0sTUFBTSxxQkFBcUIsUUFBUSxhQUFhO0FBQ3hELG9CQUFNLFFBQVE7QUFFZCwwQkFBWSxvQkFBb0IsTUFBTSxNQUFNLGVBQWUsTUFBTSxNQUFNLGlCQUFpQixHQUFHLEtBQUs7QUFBQSxZQUNsRztBQUVBO0FBQUEsVUFFRixLQUFLLGFBQUs7QUFBQSxVQUNWLEtBQUssYUFBSztBQUFBLFVBQ1YsS0FBSyxhQUFLO0FBQUEsVUFDVixLQUFLLGFBQUs7QUFDUjtBQUFBLFVBRUY7QUFDRSxrQkFBTSxTQUFTO0FBQUEsY0FDYixtQkFBbUI7QUFBQSxZQUNyQixHQUFHLE1BQU0sT0FBTztBQUVoQjtBQUFBLFFBQ0o7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBZixrQkFBZ0JlLHlCQUF1QixLQUFLLEdBQUcsOEJBQThCLFNBQVUsUUFBUTtBQUU3RixZQUFJLENBQUMsTUFBTSxNQUFNLGVBQWUsUUFBUTtBQUN0QztBQUFBLFFBQ0Y7QUFFQSxjQUFNLFNBQVMsU0FBVUUsUUFBTTtBQUM3QixjQUFJLG9CQUFvQkEsT0FBSyxtQkFDekIsaUJBQWlCQSxPQUFLO0FBQzFCLGNBQUk7QUFFSixjQUFJLHFCQUFxQixNQUFNO0FBRzdCLG9DQUF3QixTQUFTLElBQUksZUFBZSxTQUFTLElBQUk7QUFBQSxVQUNuRSxPQUFPO0FBQ0wsb0NBQXdCLG9CQUFvQjtBQUU1QyxnQkFBSSx3QkFBd0IsR0FBRztBQUM3QixzQ0FBd0IsZUFBZSxTQUFTO0FBQUEsWUFDbEQsV0FBVywwQkFBMEIsZUFBZSxRQUFRO0FBQzFELHNDQUF3QjtBQUFBLFlBQzFCO0FBQUEsVUFDRjtBQUdBLGNBQUksWUFBWSxTQUFTLElBQUksSUFBSTtBQUVqQyxpQkFBTyxlQUFlLHFCQUFxQixFQUFFLGdCQUFnQixlQUFlLHFCQUFxQixFQUFFLFVBQVU7QUFDM0csb0NBQXdCLHdCQUF3QjtBQUVoRCxnQkFBSSx3QkFBd0IsR0FBRztBQUM3QixzQ0FBd0IsZUFBZSxTQUFTO0FBQUEsWUFDbEQsV0FBVywwQkFBMEIsZUFBZSxRQUFRO0FBQzFELHNDQUF3QjtBQUFBLFlBQzFCO0FBQUEsVUFDRjtBQUVBLGlCQUFPO0FBQUEsWUFDTCxtQkFBbUI7QUFBQSxVQUNyQjtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELE1BQUFqQixrQkFBZ0JlLHlCQUF1QixLQUFLLEdBQUcsa0JBQWtCLFNBQVUsYUFBYSxnQkFBZ0I7QUFDdEcsWUFBSSx1QkFBdUI7QUFFM0IsY0FBTSxTQUFTO0FBQUEsVUFDYjtBQUFBLFVBQ0E7QUFBQSxVQUNBLG1CQUFtQjtBQUFBLFFBQ3JCLEdBQUcsV0FBWTtBQUNiLGNBQUksTUFBTSxNQUFNLFdBQVc7QUFDekIsa0JBQU0sUUFBUTtBQUFBLFVBQ2hCO0FBQUEsUUFDRixDQUFDO0FBRUQsU0FBQyx3QkFBd0IsTUFBTSxNQUFNLGlCQUFpQixRQUFRLDBCQUEwQixTQUFTLFVBQVUseUJBQXlCLHNCQUFzQixjQUFjLFFBQVEsMkJBQTJCLFNBQVMsU0FBUyx1QkFBdUIsS0FBSyx1QkFBdUIsYUFBYSxjQUFjO0FBQUEsTUFDN1MsQ0FBQztBQUVELE1BQUFmLGtCQUFnQmUseUJBQXVCLEtBQUssR0FBRyxtQkFBbUIsU0FBVSxHQUFHO0FBQzdFLFlBQUksa0JBQWtCO0FBR3RCLGNBQU0sbUJBQW1CLEVBQUUsbUJBQW1CLFFBQVEscUJBQXFCLFNBQVMsVUFBVSx3QkFBd0IsaUJBQWlCLGdCQUFnQixRQUFRLDBCQUEwQixTQUFTLFNBQVMsc0JBQXNCLFFBQVEsTUFBTSxRQUFRO0FBQ3JQO0FBQUEsUUFDRjtBQUVBLGNBQU0sU0FBUztBQUFBLFVBQ2IsbUJBQW1CO0FBQUEsVUFDbkIsV0FBVztBQUFBLFFBQ2IsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELE1BQUFmLGtCQUFnQmUseUJBQXVCLEtBQUssR0FBRyxpQkFBaUIsU0FBVSxTQUFTLE9BQU87QUFDeEYsWUFBSSxjQUFjLE1BQU0sT0FDcEIsZ0JBQWdCLFlBQVksZUFDNUIsV0FBVyxZQUFZO0FBQzNCLFlBQUksY0FBYyxNQUFNLE1BQU07QUFDOUIsWUFBSSxpQkFBaUJHLG9CQUFtQixTQUFTLGFBQWEsYUFBYTtBQUUzRSxjQUFNLFNBQVM7QUFBQSxVQUNiO0FBQUEsUUFDRixDQUFDO0FBRUQsWUFBSSxVQUFVO0FBQ1osbUJBQVMsU0FBUyxLQUFLO0FBQUEsUUFDekI7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBbEIsa0JBQWdCZSx5QkFBdUIsS0FBSyxHQUFHLGdCQUFnQixTQUFVLE9BQU8sT0FBTztBQUNyRixZQUFJLHdCQUF3QjtBQUU1QixTQUFDLHlCQUF5QixNQUFNLGVBQWUsYUFBYSxRQUFRLDJCQUEyQixTQUFTLFVBQVUseUJBQXlCLHVCQUF1QixhQUFhLFFBQVEsMkJBQTJCLFNBQVMsU0FBUyx1QkFBdUIsYUFBYSxPQUFPLEtBQUs7QUFBQSxNQUN0UixDQUFDO0FBRUQsTUFBQWYsa0JBQWdCZSx5QkFBdUIsS0FBSyxHQUFHLGdCQUFnQixTQUFVLE9BQU87QUFDOUUsZUFBTyxTQUFTLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUSxVQUFVLEVBQUUsT0FBTyxLQUFLLElBQUk7QUFBQSxNQUM3RSxDQUFDO0FBRUQsWUFBTSxTQUFTLE1BQU0sS0FBSyxTQUFVLFFBQVE7QUFDMUMsZUFBTyxHQUFHLE9BQU8sTUFBTSxFQUFFLEVBQUUsT0FBTyxTQUFTLElBQUksT0FBTyxNQUFNLElBQUksRUFBRTtBQUFBLE1BQ3BFLElBQUksZ0JBQWdCO0FBQ3BCLFlBQU0sU0FBUyxNQUFNLE9BQU8sU0FBUztBQUNyQyxZQUFNLG1CQUFtQixNQUFNLE9BQU8sZ0JBQWdCO0FBQ3RELFVBQUksV0FBVyxNQUFNLFNBQ2pCLGtCQUFrQixNQUFNLGlCQUN4QixpQkFBaUIsTUFBTSxlQUN2QixjQUFjLE1BQU07QUFDeEIsVUFBSUksdUJBQXNCLGdCQUFnQixRQUFRLGdCQUFnQixTQUFTLFNBQVMsWUFBWSxVQUFVLFFBQVEsZ0JBQWdCLFFBQVEsZ0JBQWdCLFNBQVMsU0FBUyxZQUFZLGlCQUFpQixFQUFFO0FBRTNNLFVBQUksa0JBQWtCRCxvQkFBbUIsVUFBVUMscUJBQW9CLGNBQWM7QUFFckYsc0JBQWdCLFFBQVEsZ0JBQWdCLFNBQVMsVUFBVSx3QkFBd0IsWUFBWSxjQUFjLFFBQVEsMEJBQTBCLFNBQVMsU0FBUyxzQkFBc0IsS0FBSyxhQUFhQSxxQkFBb0IsZUFBZTtBQUU1TyxVQUFJLGtCQUFrQixTQUFTLE9BQU8sU0FBVSxRQUFRO0FBQ3RELGVBQU8sT0FBTztBQUFBLE1BQ2hCLENBQUM7QUFFRCxVQUFJO0FBRUosVUFBSSxtQkFBbUIsZ0JBQWdCLFdBQVcsR0FBRztBQUNuRCxZQUFJLGdCQUFnQixTQUFTLGdCQUFnQixDQUFDLENBQUMsR0FBRztBQUNoRCwrQkFBcUIsZ0JBQWdCLFFBQVEsZ0JBQWdCLENBQUMsQ0FBQztBQUFBLFFBQ2pFO0FBQUEsTUFDRjtBQUVBLFlBQU0sUUFBUTtBQUFBLFFBQ1osbUJBQW1CO0FBQUEsUUFDbkIsYUFBYUE7QUFBQSxRQUNiLGdCQUFnQjtBQUFBLFFBQ2hCLFdBQVc7QUFBQSxNQUNiO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFFQSxJQUFBZCxlQUFhVyxnQkFBZSxDQUFDO0FBQUEsTUFDM0IsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLG1CQUFtQixXQUFXLFdBQVc7QUFDdkQsWUFBSSxVQUFVLHNCQUFzQixLQUFLLE1BQU0sbUJBQW1CO0FBQ2hFLGNBQUksdUJBQXVCO0FBRTNCLGNBQUksZUFBZSxLQUFLLE1BQU0scUJBQXFCLE9BQU8sS0FBSyxNQUFNLGVBQWUsS0FBSyxNQUFNLGlCQUFpQixJQUFJO0FBQ3BILFdBQUMseUJBQXlCLGVBQWUsS0FBSyxPQUFPLDBCQUEwQixRQUFRLDBCQUEwQixTQUFTLFNBQVMsc0JBQXNCLEtBQUssY0FBYyxZQUFZO0FBQUEsUUFDMUw7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVNJLFVBQVM7QUFDdkIsWUFBSSxTQUFTO0FBRWIsWUFBSSxlQUFlLEtBQUssT0FDcEIsV0FBVyxhQUFhLFVBQ3hCLFlBQVksYUFBYSxXQUN6QixVQUFVLGFBQWEsU0FDdkIsV0FBVyxhQUFhLFVBQ3hCLHVCQUF1QixhQUFhLHNCQUNwQyxhQUFhLGFBQWEsWUFDMUIsY0FBYyxhQUFhLGFBQzNCLGtCQUFrQixhQUFhLGlCQUMvQixZQUFZLGFBQWEsV0FDekIsWUFBWSxhQUFhLFdBQ3pCLGVBQWUsYUFBYSxjQUM1QixTQUFTLGFBQWEsUUFDdEIsa0JBQWtCLGFBQWEsaUJBQy9CLFlBQVksYUFBYSxZQUFZLEdBQ3JDLGtCQUFrQixhQUFhLGtCQUFrQixHQUNqRCxpQkFBaUIsYUFBYSxnQkFDOUIsbUJBQW1CLGFBQWEsa0JBQ2hDLGVBQWUsYUFBYSxjQUM1QixlQUFlLGFBQWEsY0FDNUIsZ0JBQWdCLGFBQWEsZUFDN0IsT0FBT25CLDRCQUF5QixjQUFjZixZQUFTO0FBRTNELFlBQUksY0FBYyxLQUFLLE9BQ25CLGNBQWMsWUFBWSxhQUMxQixpQkFBaUIsWUFBWSxnQkFDN0Isb0JBQW9CLFlBQVk7QUFJcEMsWUFBSSx3QkFBd0I7QUFBQSxVQUMxQixjQUFjO0FBQUEsVUFDZCxvQkFBb0I7QUFBQSxRQUN0QjtBQUVBLFlBQUltQyxTQUFRLGVBQWUsdUJBQ3ZCLGtCQUFrQkEsT0FBTSxZQUFZLEdBQ3BDLHdCQUF3QkEsT0FBTSxrQkFBa0IsR0FDaEQsZ0JBQWdCQSxPQUFNLFVBQ3RCLGVBQWVBLE9BQU0sY0FDckIsV0FBV0EsT0FBTSxVQUNqQixxQkFBcUJwQiw0QkFBeUJvQixRQUFPbEMsYUFBVTtBQUVuRSxZQUFJbUMsU0FBUSxhQUFhLHVCQUNyQixnQkFBZ0JBLE9BQU0sWUFBWSxHQUNsQyxzQkFBc0JBLE9BQU0sa0JBQWtCLEdBQzlDLGdCQUFnQkEsT0FBTSxlQUN0QixZQUFZQSxPQUFNLFdBQ2xCLG1CQUFtQnJCLDRCQUF5QnFCLFFBQU9sQyxhQUFVO0FBRWpFLFlBQUk7QUFFSixZQUFJLGtCQUFrQixPQUFPO0FBQzNCLDZCQUFtQjtBQUFBLFlBQ2pCO0FBQUEsVUFDRjtBQUFBLFFBQ0YsV0FBVyxhQUFhLE1BQU07QUFDNUIsNkJBQW1CO0FBQUEsWUFDakI7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUVBLFlBQUksY0FBVSxvQkFBQW1DLFNBQVcsaUJBQWlCO0FBQUEsVUFDeEMsNEJBQTRCLFdBQVc7QUFBQSxRQUN6QyxHQUFHLFNBQVM7QUFHWixZQUFJO0FBRUosWUFBSSxnQkFBZ0IsTUFBTTtBQUN4QiwyQkFBaUIsT0FBTyxpQkFBaUIsV0FBVyxJQUFjLEtBQUssTUFBTSxZQUFZLElBQUk7QUFBQSxRQUMvRixXQUFXLFdBQVc7QUFDcEIsY0FBSSxtQkFBbUIsVUFBYSxPQUFPLG1CQUFtQixVQUFVO0FBQ3RFLDZCQUFpQixJQUFjLGdCQUFBQyxRQUFNLFVBQVUsTUFBTSxJQUFjLG1CQUFtQjtBQUFBLGNBQ3BGLE1BQU07QUFBQSxZQUNSLENBQUMsR0FBRyxJQUFjLFdBQVc7QUFBQSxjQUMzQixNQUFNO0FBQUEsWUFDUixDQUFDLEdBQUcsSUFBYyxLQUFLLE1BQU0sa0JBQWtCLElBQWMsU0FBUztBQUFBLGNBQ3BFLE9BQU87QUFBQSxjQUNQLFNBQVM7QUFBQSxZQUNYLENBQUMsQ0FBQyxDQUFDO0FBQUEsVUFDTCxPQUFPO0FBQ0wsNkJBQThCLGdDQUFBQSxRQUFNLGFBQWEsZ0JBQWdCekIsZ0JBQWM7QUFBQSxjQUM3RSxJQUFJLEtBQUs7QUFBQSxZQUNYLEdBQUcsZUFBZSxLQUFLLENBQUM7QUFBQSxVQUMxQjtBQUFBLFFBQ0YsV0FBVyxlQUFlLGVBQWUsV0FBVyxHQUFHO0FBQ3JELGNBQUkscUJBQXFCLFVBQWEsT0FBTyxxQkFBcUIsVUFBVTtBQUMxRSw2QkFBaUIsSUFBYyxLQUFLLE1BQU0sb0JBQW9CLElBQWMsU0FBUztBQUFBLGNBQ25GLE9BQU87QUFBQSxjQUNQLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxnQkFDTixhQUFhLElBQWMsVUFBVSxNQUFNLFdBQVc7QUFBQSxjQUN4RDtBQUFBLFlBQ0YsQ0FBQyxDQUFDO0FBQUEsVUFDSixPQUFPO0FBQ0wsNkJBQThCLGdDQUFBeUIsUUFBTSxhQUFhLGtCQUFrQnpCLGdCQUFjO0FBQUEsY0FDL0UsSUFBSSxLQUFLO0FBQUEsWUFDWCxHQUFHLGlCQUFpQixLQUFLLENBQUM7QUFBQSxVQUM1QjtBQUFBLFFBQ0YsV0FBVyxDQUFDLFFBQVEsUUFBUTtBQUMxQixjQUFJLGlCQUFpQixVQUFhLE9BQU8saUJBQWlCLFVBQVU7QUFDbEUsNkJBQWlCLElBQWMsS0FBSyxNQUFNLGdCQUFnQixJQUFjLFNBQVM7QUFBQSxjQUMvRSxPQUFPO0FBQUEsY0FDUCxTQUFTO0FBQUEsWUFDWCxDQUFDLENBQUM7QUFBQSxVQUNKLE9BQU87QUFDTCw2QkFBOEIsZ0NBQUF5QixRQUFNLGFBQWEsY0FBY3pCLGdCQUFjO0FBQUEsY0FDM0UsSUFBSSxLQUFLO0FBQUEsWUFDWCxHQUFHLGFBQWEsS0FBSyxDQUFDO0FBQUEsVUFDeEI7QUFBQSxRQUNGO0FBV0EsWUFBSSxvQkFBb0IsU0FBUzBCLG1CQUFrQixPQUFPLGtCQUFrQjtBQUMxRSxjQUFJLFNBQVMsTUFBTSxZQUFZLEdBQUc7QUFDaEMsbUJBQU87QUFBQSxjQUNMLGNBQWMsTUFBTSxZQUFZO0FBQUEsWUFDbEM7QUFBQSxVQUNGO0FBRUEsY0FBSSx5QkFBeUIsbUJBQW1CLElBQUksT0FBTyxnQkFBZ0IsSUFBSTtBQUUvRSxjQUFJLFNBQVMsTUFBTSxrQkFBa0IsR0FBRztBQUN0QyxtQkFBTztBQUFBLGNBQ0wsb0JBQW9CLEdBQUcsT0FBTyxNQUFNLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxzQkFBc0I7QUFBQSxZQUN4RjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLFdBQVc7QUFDYixtQkFBTztBQUFBLGNBQ0wsY0FBYztBQUFBLFlBQ2hCO0FBQUEsVUFDRjtBQUVBLGNBQUksaUJBQWlCO0FBQ25CLG1CQUFPO0FBQUEsY0FDTCxvQkFBb0IsR0FBRyxPQUFPLGVBQWUsRUFBRSxPQUFPLHNCQUFzQjtBQUFBLFlBQzlFO0FBQUEsVUFDRjtBQUVBLGlCQUFPLENBQUM7QUFBQSxRQUNWO0FBRUEsWUFBSSx1QkFBdUIsa0JBQWtCLGFBQWEsS0FBSyxnQkFBZ0I7QUFDL0UsWUFBSSwwQkFBMEIsUUFBUSxPQUFPLEtBQUssb0JBQW9CLEVBQUUsTUFBTTtBQUM5RSxZQUFJLFNBQVMsYUFBYSxJQUFjLFNBQVM7QUFBQSxVQUMvQyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDWCxHQUFHLFNBQVUsaUJBQWlCO0FBQzVCLGlCQUFPLElBQWMscUJBQXFCOUIsWUFBUztBQUFBLFlBQ2pELEtBQUs7QUFBQSxZQUNMO0FBQUEsWUFDQSxPQUFPO0FBQUEsWUFDUCxVQUFVLE9BQU87QUFBQSxZQUNqQixRQUFRLE9BQU8sZUFBZSxVQUFVLE9BQU8sU0FBUztBQUFBLFlBRXhELHlCQUF5QixPQUFPLGFBQWEsaUJBQWlCO0FBQUEsWUFFOUQsYUFBYTtBQUFBLFlBQ2IsZUFBZSxrQkFBa0IsUUFBUSxrQkFBa0IsU0FBUyxnQkFBZ0I7QUFBQSxZQUNwRixVQUFVLFNBQVMrQixVQUFTQyxPQUFNO0FBQ2hDLGtCQUFJO0FBRUoscUJBQU8sV0FBV0E7QUFDbEIsOEJBQWdCLFFBQVEsZ0JBQWdCLFNBQVMsVUFBVSx3QkFBd0IsWUFBWSxjQUFjLFFBQVEsMEJBQTBCLFNBQVMsU0FBUyxzQkFBc0IsS0FBSyxhQUFhQSxLQUFJO0FBQUEsWUFDL007QUFBQSxVQUNGLEdBQUcsMEJBQTBCLHVCQUF1QjtBQUFBLFlBQ2xELGNBQWM7QUFBQSxVQUNoQixHQUFHLGtCQUFrQixDQUFDO0FBQUEsUUFDeEIsQ0FBQyxJQUFJO0FBQ0wsWUFBSSxnQkFBZ0IsZUFBZSxPQUFPLFNBQVUsUUFBUTtBQUMxRCxpQkFBTyxDQUFDLE9BQU87QUFBQSxRQUNqQixDQUFDLEVBQUU7QUFFSCxZQUFJLHlCQUF5QixjQUFjLElBQWMsU0FBUztBQUFBLFVBQ2hFLE9BQU87QUFBQSxVQUNQLFNBQVMsU0FBU0MsVUFBU0MsUUFBTztBQUNoQyxnQkFBSUMsaUJBQWdCRCxPQUFNO0FBQzFCLG1CQUFPLEdBQUcsT0FBT0MsZ0JBQWUsU0FBUyxFQUFFLE9BQU9BLG1CQUFrQixJQUFJLEtBQUssS0FBSyxZQUFZO0FBQUEsVUFDaEc7QUFBQSxVQUNBLFFBQVE7QUFBQSxZQUNOO0FBQUEsVUFDRjtBQUFBLFFBQ0YsQ0FBQztBQUVELFlBQUksd0JBQXdCLEtBQUssT0FBTyxjQUFjO0FBQ3RELFlBQUkscUJBQXFCLGtCQUFrQixXQUFXLHFCQUFxQjtBQUMzRSxZQUFJLHdCQUF3QixRQUFRLE9BQU8sS0FBSyxrQkFBa0IsRUFBRSxNQUFNO0FBRTFFLFlBQUksT0FBTyxJQUFjLFNBQVM7QUFBQSxVQUNoQyxRQUFRLENBQUMsMENBQTBDLCtCQUErQjtBQUFBLFVBQ2xGLFVBQVUsQ0FBQyxtR0FBbUcsZ0JBQWdCO0FBQUEsUUFDaEksR0FBRyxTQUFVQyxRQUFPO0FBQ2xCLGNBQUlDLFNBQVEzQyxpQkFBZTBDLFFBQU8sQ0FBQyxHQUMvQixrQkFBa0JDLE9BQU0sQ0FBQyxHQUN6QiwyQkFBMkJBLE9BQU0sQ0FBQztBQUV0QyxpQkFBTyxJQUFjLGdCQUFBUixRQUFNLFVBQVUsTUFBTSxjQUFjLElBQWMscUJBQXFCO0FBQUEsWUFDMUYsVUFBVSxrQkFBa0IsUUFBUSxxQkFBcUI7QUFBQSxVQUMzRCxHQUFHLGtCQUFrQixzQkFBc0IsR0FBRyxJQUFjLHFCQUFxQixNQUFNLElBQWMsS0FBSztBQUFBLFlBQ3hHLElBQUk7QUFBQSxVQUNOLEdBQUcsd0JBQXdCLENBQUMsR0FBRyxpQkFBaUIsSUFBYyxzQkFBc0I7QUFBQSxZQUNsRixrQkFBa0I7QUFBQSxZQUNsQixJQUFJLE9BQU87QUFBQSxZQUNYLFVBQVUsYUFBYSxVQUFVO0FBQUEsVUFDbkMsR0FBRyxjQUFjLElBQUksSUFBYyxtQkFBbUI3QixZQUFTO0FBQUEsWUFDN0Qsa0JBQWtCO0FBQUEsWUFDbEIsS0FBSztBQUFBLFlBQ0w7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBLHNCQUFzQixTQUFTLHFCQUFxQixPQUFPLElBQUk7QUFDN0QscUJBQU8sU0FBUztBQUFBLGdCQUNkLG1CQUFtQjtBQUFBLGNBQ3JCLEdBQUcsRUFBRTtBQUFBLFlBQ1A7QUFBQSxZQUNBLGVBQWUsT0FBTztBQUFBLFlBQ3RCO0FBQUEsWUFDQSxLQUFLLE9BQU87QUFBQSxZQUNaO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQSxjQUFjLE9BQU87QUFBQSxZQUNyQixRQUFRLE9BQU87QUFBQSxVQUNqQixHQUFHLHdCQUF3QixxQkFBcUIsY0FBYztBQUFBLFlBQzVELGNBQWM7QUFBQSxVQUNoQixHQUFHLGtCQUFrQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQUEsUUFDekMsQ0FBQztBQUVELGVBQU8sSUFBYyxPQUFPQSxZQUFTO0FBQUEsVUFDbkMsS0FBSyxLQUFLO0FBQUEsVUFDVixXQUFXO0FBQUEsVUFDWCxXQUFXLEtBQUs7QUFBQSxVQUNoQixRQUFRLEtBQUs7QUFBQSxVQUNiLFNBQVMsS0FBSztBQUFBLFVBQ2QsYUFBYSxLQUFLO0FBQUEsUUFDcEIsR0FBRyxJQUFJLEdBQUcsWUFBWSxTQUFTLE1BQU0sTUFBTSxDQUFDO0FBQUEsTUFDOUM7QUFBQSxJQUNGLENBQUMsR0FBRyxDQUFDO0FBQUEsTUFDSCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMseUJBQXlCLFdBQVcsV0FBVztBQUM3RCxZQUFJLFVBQVUsVUFBVSxTQUNwQixnQkFBZ0IsVUFBVSxlQUMxQixjQUFjLFVBQVU7QUFDNUIsWUFBSSxvQkFBb0IsVUFBVSxtQkFDOUIsY0FBYyxVQUFVO0FBQzVCLFlBQUksa0JBQWtCdUIsb0JBQW1CLFNBQVMsYUFBYSxhQUFhO0FBQzVFLFlBQUksY0FBYztBQUFBLFVBQ2hCLGdCQUFnQjtBQUFBLFVBQ2hCO0FBQUEsUUFDRjtBQUVBLFlBQUkscUJBQXFCLFFBQVEscUJBQXFCLGdCQUFnQixRQUFRO0FBQzVFLHNCQUFZLG9CQUFvQjtBQUFBLFFBQ2xDO0FBRUEsYUFBSyxnQkFBZ0IsUUFBUSxnQkFBZ0IsU0FBUyxTQUFTLFlBQVksVUFBVSxRQUFRLFlBQVksVUFBVSxhQUFhO0FBQzlILHNCQUFZLGNBQWMsWUFBWTtBQUFBLFFBQ3hDO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUVGLFdBQU9GO0FBQUEsRUFDVCxFQUFFLHlCQUFTO0FBRVgsRUFBQWhCLGtCQUFnQixlQUFlLGdCQUFnQjtBQUFBLElBQzdDLFNBQVMsQ0FBQztBQUFBLElBQ1YsaUJBQWlCO0FBQUEsSUFDakIsWUFBWTtBQUFBLElBQ1osZUFBZTtBQUFBLEVBQ2pCLENBQUM7QUFFRCxnQkFBYyxZQUFZO0FBQUEsSUFDeEIsV0FBVyxvQkFBQWlDLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLNUIsWUFBWSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU0zRyxhQUFhLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU12QixVQUFVLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLcEIsU0FBUyxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS3pDLGNBQWMsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQUEsTUFDaEcsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxNQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTTVCLE9BQU8sb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTWpCLGlCQUFpQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFNM0IsS0FBSyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQU9mLFNBQVMsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLE1BQU0sT0FBTyxNQUFTLENBQUM7QUFBQSxNQUNqRCxVQUFVLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLcEIsU0FBUyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS25CLFFBQVEsb0JBQUFBLFFBQVU7QUFBQSxNQUNsQixLQUFLLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQU1mLE1BQU0sb0JBQUFBLFFBQVUsTUFBTSxDQUFDLENBQUM7QUFBQSxJQUMxQixDQUFDLEVBQUUsVUFBVSxFQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1mLFVBQVUsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXBCLHNCQUFzQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUWhDLGlCQUFpQixvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFBQSxRQUFVLEtBQUssVUFBVSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLN0YsaUJBQWlCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLM0IsV0FBVyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU9yQixRQUFRLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtwRixXQUFXLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1yQixjQUFjLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU14QixnQkFBZ0Isb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLFFBQVEsWUFBWSxvQkFBQUEsUUFBVSxPQUFPLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNL0Ysa0JBQWtCLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxRQUFRLFlBQVksb0JBQUFBLFFBQVUsT0FBTyxVQUFVLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTWpHLGNBQWMsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLFFBQVEsWUFBWSxvQkFBQUEsUUFBVSxPQUFPLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTN0YsY0FBYyxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsUUFBUSxZQUFZLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNdEgsZUFBZSxvQkFBQUEsUUFBVTtBQUFBLEVBQzNCOzs7QU0vd0JBLE1BQUFDLGtCQUFrQjtBQUNsQixNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCO0FBakJ2QixNQUFJQyxlQUFZLENBQUMsWUFBWSxhQUFhLGNBQWMsZUFBZSxZQUFZO0FBRW5GLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYWxULE1BQUksd0JBQXdCO0FBQUEsSUFDMUIsT0FBTztBQUFBLElBQ1AsTUFBTTtBQUFBLEVBQ1I7QUFDTyxNQUFJLFdBQVcsU0FBU0MsVUFBU0MsUUFBTTtBQUM1QyxRQUFJLFdBQVdBLE9BQUssVUFDaEIsWUFBWUEsT0FBSyxXQUNqQixhQUFhQSxPQUFLLFlBQ2xCLG1CQUFtQkEsT0FBSyxhQUN4QixjQUFjLHFCQUFxQixTQUFTLFVBQVUsa0JBQ3RELGtCQUFrQkEsT0FBSyxZQUN2QixhQUFhLG9CQUFvQixTQUFTLE9BQU8saUJBQ2pELE9BQU9ILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVuRCxRQUFJLGNBQVUsb0JBQUFNLFNBQVcsWUFBWSxXQUFXO0FBQUEsTUFDOUMsd0JBQXdCO0FBQUEsTUFDeEIsd0JBQXdCO0FBQUEsSUFDMUIsR0FBRyxzQkFBc0IsV0FBVyxDQUFDO0FBQ3JDLFdBQU8sSUFBYyxTQUFTTCxZQUFTO0FBQUEsTUFDckMsVUFBVTtBQUFBLE1BQ1YsV0FBVztBQUFBLElBQ2IsR0FBRyxJQUFJLEdBQUcsUUFBUTtBQUFBLEVBQ3BCO0FBQ0EsV0FBUyxZQUFZO0FBQUEsSUFDbkIsWUFBWSxvQkFBQU0sUUFBVTtBQUFBLElBQ3RCLFlBQVksb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt0QixhQUFhLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxTQUFTLE1BQU0sQ0FBQztBQUFBLElBQzlDLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsRUFDOUI7OztBQ3RDQSxNQUFBQyxrQkFBa0I7QUFDbEIsTUFBQUMsc0JBQXNCO0FBaEJ0QixNQUFJQyxlQUFZLENBQUMsWUFBWSxhQUFhLFNBQVM7QUFFbkQsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFZM1MsTUFBSSxlQUFlLFNBQVNDLGNBQWFDLFFBQU07QUFDcEQsUUFBSSxXQUFXQSxPQUFLLFVBQ2hCLFlBQVlBLE9BQUssV0FDakIsVUFBVUEsT0FBSyxTQUNmLE9BQU9ILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVuRCxXQUFPLElBQWMsU0FBU0MsWUFBUztBQUFBLE1BQ3JDO0FBQUEsTUFDQSxLQUFLO0FBQUEsSUFDUCxHQUFHLElBQUksR0FBRyxRQUFRO0FBQUEsRUFDcEI7QUFDQSxlQUFhLFlBQVk7QUFBQSxJQUN2QixXQUFXLG9CQUFBSyxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLElBQzVCLFNBQVMsb0JBQUFBLFFBQVU7QUFBQSxFQUNyQjs7O0FDbkJBLE1BQUFDLGtCQUFrQjtBQUNsQixNQUFBQyxzQkFBc0I7QUFoQnRCLE1BQUlDLGVBQVksQ0FBQyxZQUFZLFdBQVc7QUFFeEMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFZM1MsTUFBSSxpQkFBaUIsU0FBU0MsZ0JBQWVDLFFBQU07QUFDeEQsUUFBSSxXQUFXQSxPQUFLLFVBQ2hCLFlBQVlBLE9BQUssV0FDakIsT0FBT0gsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRW5ELFdBQU8sSUFBYyxTQUFTQyxZQUFTO0FBQUEsTUFDckM7QUFBQSxJQUNGLEdBQUcsSUFBSSxHQUFHLElBQWMsTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUFBLEVBQy9DO0FBQ0EsaUJBQWUsWUFBWTtBQUFBLElBQ3pCLFdBQVcsb0JBQUFLLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsRUFDOUI7OztBQ2hCQSxNQUFBQyxrQkFBa0I7QUFDbEIsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1Qjs7O0FDakJ2QixNQUFJQyxlQUFZLENBQUMsT0FBTztBQUV4QixXQUFTQyxVQUFRQyxTQUFRLGdCQUFnQjtBQUFFLFFBQUlDLFFBQU8sT0FBTyxLQUFLRCxPQUFNO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksVUFBVSxPQUFPLHNCQUFzQkEsT0FBTTtBQUFHLFVBQUksZ0JBQWdCO0FBQUUsa0JBQVUsUUFBUSxPQUFPLFNBQVUsS0FBSztBQUFFLGlCQUFPLE9BQU8seUJBQXlCQSxTQUFRLEdBQUcsRUFBRTtBQUFBLFFBQVksQ0FBQztBQUFBLE1BQUc7QUFBRSxNQUFBQyxNQUFLLEtBQUssTUFBTUEsT0FBTSxPQUFPO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUV4VixXQUFTQyxnQkFBYyxRQUFRO0FBQUUsYUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFVBQUksU0FBUyxVQUFVLENBQUMsS0FBSyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFBRyxVQUFJLElBQUksR0FBRztBQUFFLFFBQUFILFVBQVEsT0FBTyxNQUFNLEdBQUcsSUFBSSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsVUFBQUksa0JBQWdCLFFBQVEsS0FBSyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUcsV0FBVyxPQUFPLDJCQUEyQjtBQUFFLGVBQU8saUJBQWlCLFFBQVEsT0FBTywwQkFBMEIsTUFBTSxDQUFDO0FBQUEsTUFBRyxPQUFPO0FBQUUsUUFBQUosVUFBUSxPQUFPLE1BQU0sQ0FBQyxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQUUsaUJBQU8sZUFBZSxRQUFRLEtBQUssT0FBTyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRXJoQixXQUFTSSxrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQUVoTixXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQVMzUyxNQUFJLGtCQUFrQjtBQUN0QixNQUFJLHNCQUFzQixTQUFTQyx1QkFBc0I7QUFDOUQsUUFBSSxRQUFRLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUksQ0FBQztBQUNqRixRQUFJLFFBQVEsVUFBVSxTQUFTLElBQUksVUFBVSxDQUFDLElBQUk7QUFFbEQsUUFBSSxhQUFhLE1BQU0sT0FDbkIsWUFBWUYsNEJBQXlCLE9BQU9OLFlBQVM7QUFFekQsUUFBSSxZQUFZO0FBRWhCLFFBQUksYUFBYSxTQUFTLE9BQU8sY0FBYyxZQUFZLENBQUMsTUFBTSxPQUFPLFNBQVMsQ0FBQyxJQUNqRjtBQUNBLGtCQUFZLEdBQUcsT0FBTyxXQUFXLElBQUk7QUFBQSxJQUN2QztBQUVBLFFBQUksY0FBYyxXQUFXO0FBQzNCLGNBQVEsS0FBSyxlQUFlO0FBQUEsSUFDOUI7QUFFQSxXQUFPSSxnQkFBY0EsZ0JBQWMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUc7QUFBQSxNQUNyRCxPQUFPLGFBQWE7QUFBQSxJQUN0QixDQUFDO0FBQUEsRUFDSDs7O0FEekNBLE1BQUlLLGVBQVksQ0FBQyxZQUFZLFNBQVMsYUFBYSxTQUFTLE9BQU87QUFFbkUsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFlM1MsTUFBSSxxQkFBcUIsU0FBU0Msb0JBQW1CQyxRQUFNO0FBQ2hFLFFBQUksV0FBV0EsT0FBSyxVQUNoQixhQUFhQSxPQUFLLE9BQ2xCLFFBQVEsZUFBZSxTQUFTLGlCQUFpQixZQUNqRCxZQUFZQSxPQUFLLFdBQ2pCLFFBQVFBLE9BQUssT0FDYixRQUFRQSxPQUFLLE9BQ2IsT0FBT0gsNEJBQXlCRyxRQUFNTCxZQUFTO0FBRW5ELFFBQUksY0FBVSxvQkFBQU0sU0FBVyxzQkFBc0IsU0FBUztBQUN4RCxRQUFJLHFCQUFpQixvQkFBQUEsU0FBVyx1QkFBdUIsV0FBVztBQUFBLE1BQ2hFLG1DQUFtQyxVQUFVO0FBQUEsTUFDN0Msb0NBQW9DLFVBQVU7QUFBQSxJQUNoRCxDQUFDO0FBQ0QsUUFBSSxXQUFXLG9CQUFvQixPQUFPLEtBQUs7QUFDL0MsV0FBTyxJQUFjLE1BQU1MLFlBQVM7QUFBQSxNQUNsQyxXQUFXO0FBQUEsTUFDWCxPQUFPO0FBQUEsSUFDVCxHQUFHLElBQUksR0FBRyxJQUFjLE9BQU87QUFBQSxNQUM3QixXQUFXO0FBQUEsSUFDYixHQUFHLElBQWMsUUFBUTtBQUFBLE1BQ3ZCLFdBQVc7QUFBQSxJQUNiLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFBQSxFQUNmO0FBQ0EscUJBQW1CLFlBQVk7QUFBQSxJQUM3QixXQUFXLG9CQUFBTSxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLElBQzVCLE9BQU8sb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFFBQVEsU0FBUyxRQUFRLENBQUM7QUFBQSxJQUNsRCxPQUFPLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsT0FBTyxVQUFVLENBQUM7QUFBQSxFQUN2Rjs7O0FFcENBLE1BQUFDLGtCQUFrQjtBQUNsQixNQUFBQyxzQkFBc0I7QUFoQnRCLE1BQUlDLGVBQVksQ0FBQyxZQUFZLGFBQWEsa0JBQWtCO0FBRTVELFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBWTNTLE1BQUksaUJBQWlCLFNBQVNDLGdCQUFlQyxRQUFNO0FBQ3hELFFBQUksV0FBV0EsT0FBSyxVQUNoQixZQUFZQSxPQUFLLFdBQ2pCLHdCQUF3QkEsT0FBSyxrQkFDN0IsbUJBQW1CLDBCQUEwQixTQUFTLE9BQU8sdUJBQzdELE9BQU9ILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVuRCxXQUFPLElBQWMsU0FBU0MsWUFBUztBQUFBLE1BQ3JDO0FBQUEsSUFDRixHQUFHLElBQUksR0FBRyxtQkFBbUIsSUFBYyxNQUFNLE1BQU0sUUFBUSxJQUFJLFFBQVE7QUFBQSxFQUM3RTtBQUNBLGlCQUFlLFlBQVk7QUFBQSxJQUN6QixXQUFXLG9CQUFBSyxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNNUIsVUFBVSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3BCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLEVBQzlCOzs7QUM3QkEsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7QUFqQnZCLE1BQUlDLGVBQVksQ0FBQyxZQUFZLFNBQVMsVUFBVSxZQUFZLG1CQUFtQixhQUFhLFNBQVMsaUJBQWlCLFNBQVMsU0FBUyxZQUFZLGFBQWE7QUFFakssV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFvQmxULE1BQUksZUFBZSxTQUFTQyxjQUFhQyxRQUFNO0FBQzdDLFFBQUksWUFBWUEsT0FBSyxXQUNqQixjQUFjQSxPQUFLLGFBQ25CLFdBQVdBLE9BQUssVUFDaEIsV0FBV0EsT0FBSyxVQUNoQixrQkFBa0JBLE9BQUssaUJBQ3ZCLGNBQWNBLE9BQUs7QUFDdkIsV0FBTyxJQUFjLFFBQVE7QUFBQSxNQUMzQjtBQUFBLElBQ0YsR0FBRyxJQUFjLGNBQWMsTUFBTSxTQUFVLEtBQUssV0FBVztBQUM3RCxhQUFPLElBQWMsU0FBUztBQUFBLFFBQzVCLE9BQU87QUFBQSxRQUNQLFNBQVM7QUFBQSxRQUNULFFBQVE7QUFBQSxVQUNOO0FBQUEsVUFDQTtBQUFBLFFBQ0Y7QUFBQSxNQUNGLEdBQUcsU0FBVSxtQkFBbUI7QUFDOUIsZUFBTyxJQUFjLFFBQVE7QUFBQSxVQUMzQixPQUFPLGNBQWMsb0JBQW9CO0FBQUEsVUFDekM7QUFBQSxVQUNBLFdBQVc7QUFBQSxRQUNiLEdBQUcsUUFBUTtBQUFBLE1BQ2IsQ0FBQztBQUFBLElBQ0gsQ0FBQyxHQUFHLGVBQWUsSUFBYyxxQkFBcUIsTUFBTSxJQUFjLFFBQVEsTUFBTSxXQUFXLENBQUMsR0FBRyxlQUFlLFlBQVksSUFBYyxTQUFTO0FBQUEsTUFDdkosV0FBVztBQUFBLE1BQ1gsTUFBTSxrQkFBa0IsV0FBVztBQUFBLE1BQ25DLE1BQU07QUFBQSxJQUNSLENBQUMsQ0FBQztBQUFBLEVBQ0o7QUFFTyxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUJDLFFBQU87QUFDakUsUUFBSSxXQUFXQSxPQUFNLFVBQ2pCLGNBQWNBLE9BQU0sT0FDcEIsUUFBUSxnQkFBZ0IsU0FBUyxpQkFBaUIsYUFDbEQsU0FBU0EsT0FBTSxRQUNmLFdBQVdBLE9BQU0sVUFDakIsa0JBQWtCQSxPQUFNLGlCQUN4QixZQUFZQSxPQUFNLFdBQ2xCLFFBQVFBLE9BQU0sT0FDZCxzQkFBc0JBLE9BQU0sZUFDNUIsZ0JBQWdCLHdCQUF3QixTQUFTO0FBQUEsTUFDbkQsTUFBTTtBQUFBLElBQ1IsSUFBSSxxQkFDQSxRQUFRQSxPQUFNLE9BQ2QsUUFBUUEsT0FBTSxPQUNkLFdBQVdBLE9BQU0sVUFDakIsY0FBY0EsT0FBTSxhQUNwQixPQUFPTCw0QkFBeUJLLFFBQU9QLFlBQVM7QUFFcEQsUUFBSSxjQUFVLG9CQUFBUSxTQUFXLHNCQUFzQixXQUFXO0FBQUEsTUFDeEQsc0NBQXNDLGNBQWM7QUFBQSxNQUNwRCxxQ0FBcUMsQ0FBQyxjQUFjO0FBQUEsSUFDdEQsQ0FBQztBQUNELFFBQUkscUJBQWlCLG9CQUFBQSxTQUFXLHVCQUF1QixXQUFXO0FBQUEsTUFDaEUsbUNBQW1DLFVBQVU7QUFBQSxNQUM3QyxvQ0FBb0MsVUFBVTtBQUFBLElBQ2hELENBQUM7QUFDRCxRQUFJLFdBQVcsb0JBQW9CLE9BQU8sS0FBSztBQUMvQyxRQUFJLGdCQUFnQixXQUFXLE9BQU87QUFDdEMsUUFBSSxZQUFZLGtCQUFrQixPQUFPLFVBQVUsUUFBUSxVQUFVLFNBQVMsUUFBUSxRQUFRO0FBRTlGLFFBQUksVUFBVSxVQUFVO0FBQ3RCLFVBQUksb0JBQWdCLG9CQUFBQSxTQUFXLHdCQUF3QjtBQUFBLFFBQ3JELGlDQUFpQztBQUFBLE1BQ25DLENBQUM7QUFDRCxVQUFJLGdCQUFnQjtBQUVwQixVQUFJLFVBQVU7QUFDWix3QkFBZ0Isa0JBQWtCLGNBQWM7QUFBQSxNQUNsRDtBQUVBLFVBQUksZUFBZSxJQUFjLGNBQWM7QUFBQSxRQUM3QyxXQUFXO0FBQUEsUUFDWDtBQUFBLFFBQ0EsYUFBYTtBQUFBLFFBQ2I7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUVELGFBQU8sSUFBYyxlQUFlUCxZQUFTO0FBQUEsUUFDM0MsV0FBVztBQUFBLFFBQ1gsT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLFFBQ04sYUFBYTtBQUFBLFFBQ2IsYUFBYTtBQUFBLFFBQ2IsT0FBTztBQUFBLE1BQ1QsR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDLFdBQVcsSUFBYyxVQUFVO0FBQUEsUUFDdEQsTUFBTTtBQUFBLFFBQ04sV0FBVztBQUFBLFFBQ1gsU0FBUztBQUFBLFFBQ1Qsa0JBQWtCO0FBQUEsTUFDcEIsR0FBRyxZQUFZLElBQUksWUFBWTtBQUFBLElBQ2pDO0FBRUEsV0FBTyxJQUFjLGVBQWVBLFlBQVM7QUFBQSxNQUMzQyxXQUFXO0FBQUEsTUFDWCxPQUFPO0FBQUEsTUFDUCxNQUFNO0FBQUEsTUFDTixPQUFPO0FBQUEsSUFDVCxHQUFHLElBQUksR0FBRyxJQUFjLGNBQWM7QUFBQSxNQUNwQyxXQUFXO0FBQUEsTUFDWDtBQUFBLE1BQ0EsYUFBYTtBQUFBLE1BQ2I7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBQUEsRUFDSjtBQUNBLHFCQUFtQixZQUFZO0FBQUEsSUFDN0IsV0FBVyxvQkFBQVEsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM1QixPQUFPLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLFNBQVMsUUFBUSxDQUFDO0FBQUEsSUFDbEQsaUJBQWlCLG9CQUFBQSxRQUFVO0FBQUEsSUFDM0IsVUFBVSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3BCLGVBQWUsb0JBQUFBLFFBQVUsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSTdCLE1BQU0sb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTWhCLE1BQU0sb0JBQUFBLFFBQVU7QUFBQSxJQUNsQixDQUFDO0FBQUEsSUFDRCxRQUFRLG9CQUFBQSxRQUFVO0FBQUEsSUFDbEIsT0FBTyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsT0FBTyxPQUFPLFlBQVksVUFBVSxDQUFDO0FBQUEsSUFDN0QsT0FBTyxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsT0FBTyxZQUFZLG9CQUFBQSxRQUFVLE9BQU8sVUFBVSxDQUFDO0FBQUEsSUFDckYsYUFBYSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3ZCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQSxFQUN0Qjs7O0FDekpBLE1BQUFDLGtCQUFrQjtBQUNsQixNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCO0FBakJ2QixNQUFJQyxlQUFZLENBQUMsWUFBWSxhQUFhLFNBQVMsU0FBUyxPQUFPO0FBRW5FLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYzNTLE1BQUksNkJBQTZCLFNBQVNDLDRCQUEyQkMsUUFBTTtBQUNoRixRQUFJLFdBQVdBLE9BQUssVUFDaEIsWUFBWUEsT0FBSyxXQUNqQixhQUFhQSxPQUFLLE9BQ2xCLFFBQVEsZUFBZSxTQUFTLFFBQVEsWUFDeEMsUUFBUUEsT0FBSyxPQUNiLFFBQVFBLE9BQUssT0FDYixPQUFPSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFbkQsUUFBSSxjQUFVLG9CQUFBTSxTQUFXLDhCQUE4QixTQUFTO0FBQ2hFLFFBQUksV0FBVyxvQkFBb0IsT0FBTyxLQUFLO0FBQy9DLFdBQU8sSUFBYyxNQUFNTCxZQUFTO0FBQUEsTUFDbEMsV0FBVztBQUFBLE1BQ1g7QUFBQSxNQUNBLE9BQU87QUFBQSxJQUNULEdBQUcsSUFBSSxHQUFHLElBQWMsT0FBTztBQUFBLE1BQzdCLFdBQVc7QUFBQSxJQUNiLEdBQUcsUUFBUSxDQUFDO0FBQUEsRUFDZDtBQUNBLDZCQUEyQixZQUFZO0FBQUEsSUFDckMsV0FBVyxvQkFBQU0sUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxJQUM1QixPQUFPLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsT0FBTyxVQUFVLENBQUM7QUFBQSxJQUNyRixPQUFPLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxPQUFPLE9BQU8sWUFBWSxVQUFVLENBQUM7QUFBQSxFQUMvRDs7O0FDOUJBLE1BQUFDLGtCQUFrQjtBQUNsQixNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCO0FBakJ2QixNQUFJQyxlQUFZLENBQUMsWUFBWSxXQUFXO0FBRXhDLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBYTNTLE1BQUksdUJBQXVCLFNBQVNDLHNCQUFxQkMsUUFBTTtBQUNwRSxRQUFJLFdBQVdBLE9BQUssVUFDaEIsWUFBWUEsT0FBSyxXQUNqQixPQUFPSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFbkQsUUFBSSxjQUFVLG9CQUFBTSxTQUFXLHdCQUF3QixTQUFTO0FBQzFELFdBQU8sSUFBYyxPQUFPTCxZQUFTO0FBQUEsTUFDbkMsV0FBVztBQUFBLElBQ2IsR0FBRyxJQUFJLEdBQUcsUUFBUTtBQUFBLEVBQ3BCO0FBQ0EsdUJBQXFCLFlBQVk7QUFBQSxJQUMvQixXQUFXLG9CQUFBTSxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLEVBQzlCOzs7QUNNQSxNQUFBQyxrQkFBaUM7QUFDakMsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1Qjs7O0FDMUJ2QixNQUFBQyxrQkFBa0I7QUFDbEIsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1QjtBQWpCdkIsTUFBSUMsZUFBWSxDQUFDLFlBQVksVUFBVSxZQUFZLG1CQUFtQixhQUFhLFdBQVc7QUFFOUYsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFjM1MsTUFBSSx5QkFBeUIsU0FBU0Msd0JBQXVCQyxRQUFNO0FBQ3hFLFFBQUksV0FBV0EsT0FBSyxVQUNoQixTQUFTQSxPQUFLLFFBQ2QsV0FBV0EsT0FBSyxVQUNoQixrQkFBa0JBLE9BQUssaUJBQ3ZCLFlBQVlBLE9BQUssV0FDakIsWUFBWUEsT0FBSyxXQUNqQixPQUFPSCw0QkFBeUJHLFFBQU1MLFlBQVM7QUFFbkQsUUFBSSxXQUFXO0FBRWYsUUFBSSxVQUFVO0FBQ1osaUJBQVcsa0JBQWtCLFdBQVc7QUFBQSxJQUMxQztBQUVBLFFBQUksb0JBQWdCLG9CQUFBTSxTQUFXLDBCQUEwQixXQUFXO0FBQUEsTUFDbEUsbUNBQW1DO0FBQUEsSUFDckMsQ0FBQztBQUNELFFBQUksY0FBYyxZQUFZLFlBQVk7QUFDMUMsUUFBSSxvQkFBb0IsUUFBUSxPQUFPLGFBQWEsR0FBRyxFQUFFLE9BQU8sa0JBQWtCLGVBQWUsV0FBVztBQUM1RyxXQUFPLElBQWMsb0JBQW9CTCxZQUFTO0FBQUEsTUFDaEQsV0FBVztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsY0FBYztBQUFBLElBQ2hCLEdBQUcsSUFBSSxHQUFHLFFBQVE7QUFBQSxFQUNwQjtBQUNBLHlCQUF1QixZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJakMsUUFBUSxvQkFBQU0sUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2xCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtwQixpQkFBaUIsb0JBQUFBLFFBQVU7QUFBQSxJQUMzQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsSUFDckIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLGNBQWMsb0JBQUFBLFFBQVU7QUFBQSxJQUN4QixrQkFBa0Isb0JBQUFBLFFBQVU7QUFBQSxFQUM5Qjs7O0FEbEVBLFdBQVNDLFVBQVEsS0FBSztBQUFFO0FBQTJCLFFBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxPQUFPLGFBQWEsVUFBVTtBQUFFLE1BQUFBLFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU8sT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRyxPQUFPO0FBQUUsTUFBQUQsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBT0EsUUFBTyxPQUFPLFdBQVcsY0FBY0EsS0FBSSxnQkFBZ0IsVUFBVUEsU0FBUSxPQUFPLFlBQVksV0FBVyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHO0FBQUUsV0FBT0QsVUFBUSxHQUFHO0FBQUEsRUFBRztBQUV6WCxNQUFJRSxlQUFZLENBQUMsYUFBYSxrQkFBa0IsT0FBTztBQUV2RCxXQUFTQyxjQUFXO0FBQUUsSUFBQUEsY0FBVyxPQUFPLFVBQVUsU0FBVSxRQUFRO0FBQUUsZUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUFFLFlBQUksU0FBUyxVQUFVLENBQUM7QUFBRyxpQkFBUyxPQUFPLFFBQVE7QUFBRSxjQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssUUFBUSxHQUFHLEdBQUc7QUFBRSxtQkFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFBRztBQUFBLFFBQUU7QUFBQSxNQUFFO0FBQUUsYUFBTztBQUFBLElBQVE7QUFBRyxXQUFPQSxZQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsRUFBRztBQUU1VCxXQUFTQyw0QkFBeUIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTQyxpQ0FBOEIsUUFBUSxRQUFRO0FBQUcsUUFBSSxLQUFLO0FBQUcsUUFBSSxPQUFPLHVCQUF1QjtBQUFFLFVBQUksbUJBQW1CLE9BQU8sc0JBQXNCLE1BQU07QUFBRyxXQUFLLElBQUksR0FBRyxJQUFJLGlCQUFpQixRQUFRLEtBQUs7QUFBRSxjQUFNLGlCQUFpQixDQUFDO0FBQUcsWUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxZQUFJLENBQUMsT0FBTyxVQUFVLHFCQUFxQixLQUFLLFFBQVEsR0FBRztBQUFHO0FBQVUsZUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUUzZSxXQUFTQSxpQ0FBOEIsUUFBUSxVQUFVO0FBQUUsUUFBSSxVQUFVO0FBQU0sYUFBTyxDQUFDO0FBQUcsUUFBSSxTQUFTLENBQUM7QUFBRyxRQUFJLGFBQWEsT0FBTyxLQUFLLE1BQU07QUFBRyxRQUFJLEtBQUs7QUFBRyxTQUFLLElBQUksR0FBRyxJQUFJLFdBQVcsUUFBUSxLQUFLO0FBQUUsWUFBTSxXQUFXLENBQUM7QUFBRyxVQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLGFBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLElBQUc7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUVsVCxXQUFTQyxrQkFBZ0IsVUFBVSxhQUFhO0FBQUUsUUFBSSxFQUFFLG9CQUFvQixjQUFjO0FBQUUsWUFBTSxJQUFJLFVBQVUsbUNBQW1DO0FBQUEsSUFBRztBQUFBLEVBQUU7QUFFeEosV0FBU0Msb0JBQWtCLFFBQVEsT0FBTztBQUFFLGFBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFBRSxVQUFJLGFBQWEsTUFBTSxDQUFDO0FBQUcsaUJBQVcsYUFBYSxXQUFXLGNBQWM7QUFBTyxpQkFBVyxlQUFlO0FBQU0sVUFBSSxXQUFXO0FBQVksbUJBQVcsV0FBVztBQUFNLGFBQU8sZUFBZSxRQUFRLFdBQVcsS0FBSyxVQUFVO0FBQUEsSUFBRztBQUFBLEVBQUU7QUFFNVQsV0FBU0MsZUFBYSxhQUFhLFlBQVksYUFBYTtBQUFFLFFBQUk7QUFBWSxNQUFBRCxvQkFBa0IsWUFBWSxXQUFXLFVBQVU7QUFBRyxRQUFJO0FBQWEsTUFBQUEsb0JBQWtCLGFBQWEsV0FBVztBQUFHLFdBQU87QUFBQSxFQUFhO0FBRXROLFdBQVNFLFlBQVUsVUFBVSxZQUFZO0FBQUUsUUFBSSxPQUFPLGVBQWUsY0FBYyxlQUFlLE1BQU07QUFBRSxZQUFNLElBQUksVUFBVSxvREFBb0Q7QUFBQSxJQUFHO0FBQUUsYUFBUyxZQUFZLE9BQU8sT0FBTyxjQUFjLFdBQVcsV0FBVyxFQUFFLGFBQWEsRUFBRSxPQUFPLFVBQVUsVUFBVSxNQUFNLGNBQWMsS0FBSyxFQUFFLENBQUM7QUFBRyxRQUFJO0FBQVksTUFBQUMsa0JBQWdCLFVBQVUsVUFBVTtBQUFBLEVBQUc7QUFFaFksV0FBU0Esa0JBQWdCLEdBQUcsR0FBRztBQUFFLElBQUFBLG9CQUFrQixPQUFPLGtCQUFrQixTQUFTQSxrQkFBZ0JDLElBQUdDLElBQUc7QUFBRSxNQUFBRCxHQUFFLFlBQVlDO0FBQUcsYUFBT0Q7QUFBQSxJQUFHO0FBQUcsV0FBT0Qsa0JBQWdCLEdBQUcsQ0FBQztBQUFBLEVBQUc7QUFFekssV0FBU0csZUFBYSxTQUFTO0FBQUUsUUFBSSw0QkFBNEJDLDRCQUEwQjtBQUFHLFdBQU8sU0FBUyx1QkFBdUI7QUFBRSxVQUFJLFFBQVFDLGtCQUFnQixPQUFPLEdBQUc7QUFBUSxVQUFJLDJCQUEyQjtBQUFFLFlBQUksWUFBWUEsa0JBQWdCLElBQUksRUFBRTtBQUFhLGlCQUFTLFFBQVEsVUFBVSxPQUFPLFdBQVcsU0FBUztBQUFBLE1BQUcsT0FBTztBQUFFLGlCQUFTLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxNQUFHO0FBQUUsYUFBT0MsNkJBQTJCLE1BQU0sTUFBTTtBQUFBLElBQUc7QUFBQSxFQUFHO0FBRXhhLFdBQVNBLDZCQUEyQkMsT0FBTSxNQUFNO0FBQUUsUUFBSSxTQUFTakIsVUFBUSxJQUFJLE1BQU0sWUFBWSxPQUFPLFNBQVMsYUFBYTtBQUFFLGFBQU87QUFBQSxJQUFNLFdBQVcsU0FBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLFVBQVUsMERBQTBEO0FBQUEsSUFBRztBQUFFLFdBQU9rQix5QkFBdUJELEtBQUk7QUFBQSxFQUFHO0FBRS9SLFdBQVNDLHlCQUF1QkQsT0FBTTtBQUFFLFFBQUlBLFVBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxlQUFlLDJEQUEyRDtBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFckssV0FBU0gsOEJBQTRCO0FBQUUsUUFBSSxPQUFPLFlBQVksZUFBZSxDQUFDLFFBQVE7QUFBVyxhQUFPO0FBQU8sUUFBSSxRQUFRLFVBQVU7QUFBTSxhQUFPO0FBQU8sUUFBSSxPQUFPLFVBQVU7QUFBWSxhQUFPO0FBQU0sUUFBSTtBQUFFLGNBQVEsVUFBVSxRQUFRLEtBQUssUUFBUSxVQUFVLFNBQVMsQ0FBQyxHQUFHLFdBQVk7QUFBQSxNQUFDLENBQUMsQ0FBQztBQUFHLGFBQU87QUFBQSxJQUFNLFNBQVMsR0FBRztBQUFFLGFBQU87QUFBQSxJQUFPO0FBQUEsRUFBRTtBQUV4VSxXQUFTQyxrQkFBZ0IsR0FBRztBQUFFLElBQUFBLG9CQUFrQixPQUFPLGlCQUFpQixPQUFPLGlCQUFpQixTQUFTQSxrQkFBZ0JKLElBQUc7QUFBRSxhQUFPQSxHQUFFLGFBQWEsT0FBTyxlQUFlQSxFQUFDO0FBQUEsSUFBRztBQUFHLFdBQU9JLGtCQUFnQixDQUFDO0FBQUEsRUFBRztBQUU1TSxXQUFTSSxrQkFBZ0IsS0FBSyxLQUFLLE9BQU87QUFBRSxRQUFJLE9BQU8sS0FBSztBQUFFLGFBQU8sZUFBZSxLQUFLLEtBQUssRUFBRSxPQUFjLFlBQVksTUFBTSxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxJQUFHLE9BQU87QUFBRSxVQUFJLEdBQUcsSUFBSTtBQUFBLElBQU87QUFBRSxXQUFPO0FBQUEsRUFBSztBQWtCek0sTUFBSSxxQkFBa0MseUJBQVUsWUFBWTtBQUNqRSxJQUFBVixZQUFVVyxxQkFBb0IsVUFBVTtBQUV4QyxRQUFJLFNBQVNQLGVBQWFPLG1CQUFrQjtBQUU1QyxhQUFTQSxzQkFBcUI7QUFDNUIsVUFBSTtBQUVKLE1BQUFkLGtCQUFnQixNQUFNYyxtQkFBa0I7QUFFeEMsZUFBUyxPQUFPLFVBQVUsUUFBUSxPQUFPLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxHQUFHLE9BQU8sTUFBTSxRQUFRO0FBQ3ZGLGFBQUssSUFBSSxJQUFJLFVBQVUsSUFBSTtBQUFBLE1BQzdCO0FBRUEsY0FBUSxPQUFPLEtBQUssTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBRXJELE1BQUFELGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxTQUFTO0FBQUEsUUFDdEQsZUFBZTtBQUFBLE1BQ2pCLENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsaUJBQWlCLFdBQVk7QUFDMUUsY0FBTSxTQUFTO0FBQUEsVUFDYixlQUFlLENBQUMsTUFBTSxNQUFNO0FBQUEsUUFDOUIsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxnQkFBZ0IsV0FBWTtBQUN6RSxjQUFNLFNBQVM7QUFBQSxVQUNiLGVBQWU7QUFBQSxRQUNqQixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsYUFBTztBQUFBLElBQ1Q7QUFFQSxJQUFBVixlQUFhWSxxQkFBb0IsQ0FBQztBQUFBLE1BQ2hDLEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBU0MsVUFBUztBQUN2QixZQUFJLGNBQWMsS0FBSyxPQUNuQixZQUFZLFlBQVksV0FDeEIsaUJBQWlCLFlBQVksZ0JBQzdCLFFBQVEsWUFBWSxPQUNwQixPQUFPakIsNEJBQXlCLGFBQWFGLFlBQVM7QUFFMUQsWUFBSSxjQUFVLG9CQUFBb0IsU0FBVyxzQkFBc0IsU0FBUztBQUV4RCxZQUFJLG1CQUFtQixJQUFjLGdCQUFnQjtBQUFBLFVBQ25ELFVBQVU7QUFBQSxVQUNWLFVBQVU7QUFBQSxVQUNWLFNBQVMsS0FBSyxjQUFjLEtBQUssSUFBSTtBQUFBLFVBQ3JDLE9BQU87QUFBQSxVQUNQLE1BQU07QUFBQSxRQUNSLEdBQUcsSUFBYyxTQUFTO0FBQUEsVUFDeEIsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsQ0FBQyxDQUFDO0FBRUYsWUFBSSxvQkFBb0IsSUFBYyxZQUFZbkIsWUFBUztBQUFBLFVBQ3pELFFBQVE7QUFBQSxVQUNSLFFBQVEsS0FBSyxNQUFNO0FBQUEsVUFDbkIsY0FBYyxLQUFLO0FBQUEsVUFDbkIsZ0JBQWdCLGtCQUFrQjtBQUFBLFVBQ2xDLGtCQUFrQjtBQUFBLFFBQ3BCLEdBQUcsSUFBSSxHQUFHLElBQWMscUJBQXFCO0FBQUEsVUFDM0MsT0FBTztBQUFBLFlBQ0wsVUFBVTtBQUFBLFVBQ1o7QUFBQSxVQUNBLE9BQU8sU0FBUyxNQUFNLFNBQVMsTUFBTSxJQUFJLFNBQVUsTUFBTTtBQUN2RCxtQkFBTyxJQUFjLHdCQUF3QjtBQUFBLGNBQzNDLEtBQUssS0FBSztBQUFBLGNBQ1YsUUFBUSxLQUFLO0FBQUEsY0FDYixVQUFVLEtBQUs7QUFBQSxjQUNmLGlCQUFpQixLQUFLO0FBQUEsWUFDeEIsR0FBRyxLQUFLLElBQUk7QUFBQSxVQUNkLENBQUMsSUFBSTtBQUFBLFFBQ1AsQ0FBQyxDQUFDO0FBRUYsZUFBTyxJQUFjLE9BQU87QUFBQSxVQUMxQixXQUFXO0FBQUEsUUFDYixHQUFHLGlCQUFpQjtBQUFBLE1BQ3RCO0FBQUEsSUFDRixDQUFDLENBQUM7QUFFRixXQUFPaUI7QUFBQSxFQUNULEVBQUUseUJBQVM7QUFDWCxxQkFBbUIsWUFBWTtBQUFBLElBQzdCLFdBQVcsb0JBQUFHLFFBQVU7QUFBQSxJQUNyQixnQkFBZ0Isb0JBQUFBLFFBQVU7QUFBQSxJQUMxQixPQUFPLG9CQUFBQSxRQUFVLFFBQVEsb0JBQUFBLFFBQVUsTUFBTTtBQUFBLE1BQ3ZDLE1BQU0sb0JBQUFBLFFBQVUsS0FBSztBQUFBLE1BQ3JCLEtBQUssb0JBQUFBLFFBQVU7QUFBQSxNQUNmLFFBQVEsb0JBQUFBLFFBQVU7QUFBQSxNQUNsQixVQUFVLG9CQUFBQSxRQUFVO0FBQUEsTUFDcEIsaUJBQWlCLG9CQUFBQSxRQUFVO0FBQUEsSUFDN0IsQ0FBQyxFQUFFLFVBQVU7QUFBQSxFQUNmOzs7QUVoSUEsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7QUFqQnZCLE1BQUlDLGVBQVksQ0FBQyxZQUFZLGFBQWEsY0FBYyxnQkFBZ0IsY0FBYyxpQkFBaUIsZ0JBQWdCLFNBQVM7QUFFaEksV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFjM1MsTUFBSSxjQUFjLFNBQVNDLGFBQVlDLFFBQU07QUFDbEQsUUFBSSxXQUFXQSxPQUFLLFVBQ2hCLFlBQVlBLE9BQUssV0FDakIsYUFBYUEsT0FBSyxZQUNsQixlQUFlQSxPQUFLLGNBQ3BCLGFBQWFBLE9BQUssWUFDbEIsZ0JBQWdCQSxPQUFLLGVBQ3JCLGVBQWVBLE9BQUssY0FDcEIsVUFBVUEsT0FBSyxTQUNmLE9BQU9ILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVuRCxRQUFJLGNBQVUsb0JBQUFNLFNBQVcsZUFBZSxXQUFXO0FBQUEsTUFDakQsNEJBQTRCO0FBQUEsTUFDNUIsMEJBQTBCO0FBQUEsTUFDMUIsMEJBQTBCO0FBQUEsTUFDMUIsNkJBQTZCO0FBQUEsTUFDN0IsNEJBQTRCO0FBQUEsTUFDNUIsMkJBQTJCO0FBQUEsSUFDN0IsQ0FBQztBQUVELFFBQUksQ0FBQyxTQUFTO0FBQ1osYUFBTyxJQUFjLE1BQU1MLFlBQVM7QUFBQSxRQUNsQyxXQUFXO0FBQUEsTUFDYixHQUFHLElBQUksR0FBRyxRQUFRO0FBQUEsSUFDcEI7QUFFQSxRQUFJLFlBQVksU0FBU00sV0FBVSxPQUFPO0FBRXhDLFVBQUksTUFBTSxRQUFRLGFBQUs7QUFBTyxjQUFNLGVBQWU7QUFBQSxJQUNyRDtBQUVBLFFBQUksVUFBVSxTQUFTQyxTQUFRLE9BQU87QUFFcEMsVUFBSSxNQUFNLFFBQVEsYUFBSyxTQUFTLE1BQU0sUUFBUSxhQUFLLE9BQU87QUFDeEQsZ0JBQVEsS0FBSztBQUFBLE1BQ2Y7QUFBQSxJQUNGO0FBRUEsV0FBTyxJQUFjLE1BQU1QLFlBQVM7QUFBQSxNQUNsQyxXQUFXO0FBQUEsTUFDWDtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQSxVQUFVO0FBQUEsSUFDWixHQUFHLElBQUksR0FBRyxRQUFRO0FBQUEsRUFDcEI7QUFDQSxjQUFZLFlBQVk7QUFBQSxJQUN0QixXQUFXLG9CQUFBUSxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNNUIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3hCLFlBQVksb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXRCLFlBQVksb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt0QixjQUFjLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLeEIsZUFBZSxvQkFBQUEsUUFBVTtBQUFBLElBQ3pCLFNBQVMsb0JBQUFBLFFBQVU7QUFBQSxFQUNyQjs7O0FDN0VBLE1BQUFDLGtCQUFnQztBQUNoQyxNQUFBQyxzQkFBc0I7QUFDdEIsTUFBQUMsc0JBQXVCO0FBdkJ2QixNQUFJQyxlQUFZLENBQUMsU0FBUyxZQUFZLGFBQWEsZ0JBQWdCLGVBQWUsZUFBZSxZQUFZLGNBQWMsY0FBYyxTQUFTLFNBQVMsVUFBVSxlQUFlO0FBRXBMLFdBQVNDLGNBQVc7QUFBRSxJQUFBQSxjQUFXLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFBRSxlQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsWUFBSSxTQUFTLFVBQVUsQ0FBQztBQUFHLGlCQUFTLE9BQU8sUUFBUTtBQUFFLGNBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxRQUFRLEdBQUcsR0FBRztBQUFFLG1CQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxVQUFHO0FBQUEsUUFBRTtBQUFBLE1BQUU7QUFBRSxhQUFPO0FBQUEsSUFBUTtBQUFHLFdBQU9BLFlBQVMsTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUFHO0FBRTVULFdBQVNDLFVBQVFDLFNBQVEsZ0JBQWdCO0FBQUUsUUFBSUMsUUFBTyxPQUFPLEtBQUtELE9BQU07QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxVQUFVLE9BQU8sc0JBQXNCQSxPQUFNO0FBQUcsVUFBSSxnQkFBZ0I7QUFBRSxrQkFBVSxRQUFRLE9BQU8sU0FBVSxLQUFLO0FBQUUsaUJBQU8sT0FBTyx5QkFBeUJBLFNBQVEsR0FBRyxFQUFFO0FBQUEsUUFBWSxDQUFDO0FBQUEsTUFBRztBQUFFLE1BQUFDLE1BQUssS0FBSyxNQUFNQSxPQUFNLE9BQU87QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXhWLFdBQVNDLGdCQUFjLFFBQVE7QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUUsVUFBSSxTQUFTLFVBQVUsQ0FBQyxLQUFLLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQztBQUFHLFVBQUksSUFBSSxHQUFHO0FBQUUsUUFBQUgsVUFBUSxPQUFPLE1BQU0sR0FBRyxJQUFJLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxVQUFBSSxrQkFBZ0IsUUFBUSxLQUFLLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRyxXQUFXLE9BQU8sMkJBQTJCO0FBQUUsZUFBTyxpQkFBaUIsUUFBUSxPQUFPLDBCQUEwQixNQUFNLENBQUM7QUFBQSxNQUFHLE9BQU87QUFBRSxRQUFBSixVQUFRLE9BQU8sTUFBTSxDQUFDLEVBQUUsUUFBUSxTQUFVLEtBQUs7QUFBRSxpQkFBTyxlQUFlLFFBQVEsS0FBSyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsQ0FBQztBQUFBLFFBQUcsQ0FBQztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFcmhCLFdBQVNJLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBRWhOLFdBQVNDLDRCQUF5QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVNDLGlDQUE4QixRQUFRLFFBQVE7QUFBRyxRQUFJLEtBQUs7QUFBRyxRQUFJLE9BQU8sdUJBQXVCO0FBQUUsVUFBSSxtQkFBbUIsT0FBTyxzQkFBc0IsTUFBTTtBQUFHLFdBQUssSUFBSSxHQUFHLElBQUksaUJBQWlCLFFBQVEsS0FBSztBQUFFLGNBQU0saUJBQWlCLENBQUM7QUFBRyxZQUFJLFNBQVMsUUFBUSxHQUFHLEtBQUs7QUFBRztBQUFVLFlBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssUUFBUSxHQUFHO0FBQUc7QUFBVSxlQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxNQUFHO0FBQUEsSUFBRTtBQUFFLFdBQU87QUFBQSxFQUFRO0FBRTNlLFdBQVNBLGlDQUE4QixRQUFRLFVBQVU7QUFBRSxRQUFJLFVBQVU7QUFBTSxhQUFPLENBQUM7QUFBRyxRQUFJLFNBQVMsQ0FBQztBQUFHLFFBQUksYUFBYSxPQUFPLEtBQUssTUFBTTtBQUFHLFFBQUksS0FBSztBQUFHLFNBQUssSUFBSSxHQUFHLElBQUksV0FBVyxRQUFRLEtBQUs7QUFBRSxZQUFNLFdBQVcsQ0FBQztBQUFHLFVBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsYUFBTyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsSUFBRztBQUFFLFdBQU87QUFBQSxFQUFRO0FBZTNTLE1BQUksa0JBQWtCLFNBQVNDLGlCQUFnQkMsUUFBTTtBQUMxRCxRQUFJLHVCQUF1QjtBQUUzQixRQUFJLGFBQWFBLE9BQUssT0FDbEIsUUFBUSxlQUFlLFNBQVMsaUJBQWlCLFlBQ2pELFdBQVdBLE9BQUssVUFDaEIsWUFBWUEsT0FBSyxXQUNqQixlQUFlQSxPQUFLLGNBQ3BCLGNBQWNBLE9BQUssYUFDbkIsY0FBY0EsT0FBSyxhQUNuQixnQkFBZ0JBLE9BQUssVUFDckIsV0FBVyxrQkFBa0IsU0FBUyxPQUFPLGVBQzdDLGFBQWFBLE9BQUssWUFDbEIsYUFBYUEsT0FBSyxZQUNsQixRQUFRQSxPQUFLLE9BQ2IsUUFBUUEsT0FBSyxPQUNiLGNBQWNBLE9BQUssUUFDbkIsU0FBUyxnQkFBZ0IsU0FBUyxXQUFXLGFBQzdDLHFCQUFxQkEsT0FBSyxlQUMxQixnQkFBZ0IsdUJBQXVCLFNBQVM7QUFBQSxNQUNsRCxNQUFNO0FBQUEsSUFDUixJQUFJLG9CQUNBLE9BQU9ILDRCQUF5QkcsUUFBTVYsWUFBUztBQUVuRCxRQUFJLGtCQUFjLG9CQUFBVyxTQUFXLG1CQUFtQkwsa0JBQWdCO0FBQUEsTUFDOUQsK0JBQStCO0FBQUEsTUFDL0IsK0JBQStCO0FBQUEsTUFDL0IsbUNBQW1DLGNBQWM7QUFBQSxNQUNqRCxxQ0FBcUMsY0FBYztBQUFBLElBQ3JELEdBQUcsb0JBQW9CLE9BQU8sTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUM5QyxRQUFJLHFCQUFpQixvQkFBQUssU0FBVyx1QkFBdUIsV0FBVztBQUFBLE1BQ2hFLG1DQUFtQyxVQUFVO0FBQUEsTUFDN0Msb0NBQW9DLFVBQVU7QUFBQSxNQUM5QyxvQ0FBb0M7QUFBQSxNQUNwQyxxQ0FBcUM7QUFBQTtBQUFBO0FBQUEsTUFHckMsMkNBQTJDLGFBQWE7QUFBQSxJQUMxRCxDQUFDO0FBQ0QsUUFBSSwyQkFBdUIsb0JBQUFBLFNBQVcsdUJBQXVCLFdBQVc7QUFBQSxNQUN0RSxtQ0FBbUMsY0FBYyxVQUFVLG1CQUFtQixVQUFVO0FBQUEsTUFDeEYsb0NBQW9DLGNBQWMsVUFBVSxvQkFBb0IsVUFBVTtBQUFBLE1BQzFGLHFDQUFxQyx3QkFBd0IsY0FBYyxpQkFBaUIsUUFBUSwwQkFBMEIsU0FBUyx3QkFBd0I7QUFBQSxNQUMvSixzQ0FBc0Msd0JBQXdCLGNBQWMsa0JBQWtCLFFBQVEsMEJBQTBCLFNBQVMsd0JBQXdCO0FBQUE7QUFBQTtBQUFBLE1BR2pLLDJDQUEyQyxjQUFjLGFBQWEsUUFBUSxhQUFhO0FBQUEsSUFDN0YsQ0FBQztBQUNELFFBQUksbUJBQWUsb0JBQUFBLFNBQVc7QUFBQSxNQUM1QiwyQkFBMkIsYUFBYTtBQUFBLE1BQ3hDLGdDQUFnQztBQUFBLElBQ2xDLENBQUM7QUFDRCxRQUFJLGFBQWEsdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxjQUFjLFFBQVEsY0FBYyxRQUFRO0FBQ3BHLFFBQUksV0FBVyxvQkFBb0IsT0FBTyxVQUFVO0FBRXBELGFBQVMsZUFBZUMsV0FBVTtBQUNoQyxVQUFJLG1CQUFtQkE7QUFFdkIsVUFBSSxhQUFhLE1BQU07QUFDckIsMkJBQW1CLElBQWMsUUFBUTtBQUFBLFVBQ3ZDLFdBQVc7QUFBQSxRQUNiLEdBQUdBLFNBQVE7QUFBQSxNQUNiLFdBQXlCLGdDQUFBQyxRQUFNLGVBQWVELFNBQVEsR0FBRztBQUN2RCwyQkFBbUIsZ0JBQUFDLFFBQU0sU0FBUyxJQUFJRCxXQUFVLFNBQVUsT0FBTztBQUMvRCxpQkFBb0IsZ0NBQUFDLFFBQU0sYUFBYSxPQUFPO0FBQUEsWUFDNUMsZUFBVyxvQkFBQUYsU0FBVyxNQUFNLE1BQU0sV0FBVyxZQUFZO0FBQUEsVUFDM0QsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0g7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksZUFBZSxlQUFlLFFBQVE7QUFDMUMsUUFBSSx1QkFBdUI7QUFDM0IsUUFBSSx1QkFBdUI7QUFDM0IsUUFBSUcsV0FBVSxjQUFjLE9BQU87QUFFbkMsUUFBSSxjQUFjVCxnQkFBYztBQUFBLE1BQzlCLE9BQU8sY0FBYyxRQUFRO0FBQUEsTUFDN0IsT0FBTztBQUFBLElBQ1QsR0FBRyxJQUFJO0FBRVAsUUFBSSxjQUFjLFNBQVMsT0FBTztBQUNoQyxhQUFPLElBQWNTLFVBQVNiLFlBQVM7QUFBQSxRQUNyQyxXQUFXLEdBQUcsT0FBTyxhQUFhLEdBQUcsRUFBRSxPQUFPLG9CQUFvQjtBQUFBLE1BQ3BFLEdBQUcsV0FBVyxHQUFHLElBQWMsT0FBTztBQUFBLFFBQ3BDLFdBQVc7QUFBQSxNQUNiLEdBQUcsWUFBWSxDQUFDO0FBQUEsSUFDbEIsT0FBTztBQUNMLGFBQU8sSUFBY2EsVUFBU2IsWUFBUztBQUFBLFFBQ3JDLFdBQVc7QUFBQSxNQUNiLEdBQUcsV0FBVyxHQUFHLGNBQWMsVUFBVSxJQUFjLE9BQU87QUFBQSxRQUM1RCxXQUFXLGlDQUFpQyxPQUFPLG9CQUFvQjtBQUFBLE1BQ3pFLEdBQUcsY0FBYyxNQUFNLEdBQUcsY0FBYyxTQUFTLElBQWMsMEJBQVUsTUFBTSxJQUFjLE9BQU87QUFBQSxRQUNsRyxXQUFXLEdBQUcsT0FBTyxzQkFBc0IsR0FBRyxFQUFFLE9BQU8sb0JBQW9CO0FBQUEsTUFDN0UsR0FBRyxlQUFlLGNBQWMsTUFBTSxDQUFDLEdBQUcsSUFBYyxPQUFPO0FBQUEsUUFDN0QsV0FBVyxHQUFHLE9BQU8sZ0JBQWdCLEdBQUcsRUFBRSxPQUFPLG9CQUFvQjtBQUFBLE1BQ3ZFLEdBQUcsWUFBWSxDQUFDLElBQUksSUFBYyxPQUFPO0FBQUEsUUFDdkMsV0FBVztBQUFBLE1BQ2IsR0FBRyxZQUFZLENBQUM7QUFBQSxJQUNsQjtBQUFBLEVBQ0Y7QUFDQSxrQkFBZ0IsWUFBWTtBQUFBLElBQzFCLFdBQVcsb0JBQUFjLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLNUIsUUFBUSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS2xCLGFBQWEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTXZCLFlBQVksb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUt0QixZQUFZLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU10QixlQUFlLG9CQUFBQSxRQUFVLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUk3QixNQUFNLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLaEIsTUFBTSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS2hCLFFBQVEsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFPbEIsUUFBUSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsS0FBSyxZQUFZLG9CQUFBQSxRQUFVLEtBQUssVUFBVSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLbEYsU0FBUyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS25CLE9BQU8sb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUtqQixPQUFPLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLFNBQVMsUUFBUSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLbEQsYUFBYSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQU92QixVQUFVLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLcEIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQzFCLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtELE9BQU8sb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFFBQVEsU0FBUyxRQUFRLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtsRCxhQUFhLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT3ZCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtwQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsT0FBTyxvQkFBQUEsUUFBVTtBQUFBLEVBQ25COzs7QUMvTkEsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUFzQjtBQUN0QixNQUFBQyxzQkFBdUI7QUFqQnZCLE1BQUlDLGVBQVksQ0FBQyxZQUFZLFdBQVc7QUFFeEMsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFhM1MsTUFBSSwwQkFBMEIsU0FBU0MseUJBQXdCQyxRQUFNO0FBQzFFLFFBQUksV0FBV0EsT0FBSyxVQUNoQixZQUFZQSxPQUFLLFdBQ2pCLE9BQU9ILDRCQUF5QkcsUUFBTUwsWUFBUztBQUVuRCxRQUFJLGNBQVUsb0JBQUFNLFNBQVcsMkJBQTJCLFNBQVM7QUFDN0QsV0FBTyxJQUFjLE1BQU1MLFlBQVM7QUFBQSxNQUNsQyxXQUFXO0FBQUEsSUFDYixHQUFHLElBQUksR0FBRyxJQUFjLE9BQU87QUFBQSxNQUM3QixXQUFXO0FBQUEsSUFDYixHQUFHLFFBQVEsQ0FBQztBQUFBLEVBQ2Q7QUFDQSwwQkFBd0IsWUFBWTtBQUFBLElBQ2xDLFdBQVcsb0JBQUFNLFFBQVU7QUFBQSxJQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsRUFDOUI7OztBQ3FCQSxNQUFBQyxrQkFBMkM7QUFDM0MsTUFBQUMsc0JBQXNCO0FBQ3RCLE1BQUFDLHNCQUF1Qjs7O0FDM0J2QixNQUFBQyxrQkFBaUM7QUFDakMsTUFBQUMsc0JBQXNCO0FBaEN0QixXQUFTQyxVQUFRLEtBQUs7QUFBRTtBQUEyQixRQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sT0FBTyxhQUFhLFVBQVU7QUFBRSxNQUFBQSxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUcsT0FBTztBQUFFLE1BQUFELFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU9BLFFBQU8sT0FBTyxXQUFXLGNBQWNBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRztBQUFFLFdBQU9ELFVBQVEsR0FBRztBQUFBLEVBQUc7QUFFelgsV0FBU0Usa0JBQWdCLFVBQVUsYUFBYTtBQUFFLFFBQUksRUFBRSxvQkFBb0IsY0FBYztBQUFFLFlBQU0sSUFBSSxVQUFVLG1DQUFtQztBQUFBLElBQUc7QUFBQSxFQUFFO0FBRXhKLFdBQVNDLG9CQUFrQixRQUFRLE9BQU87QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUUsVUFBSSxhQUFhLE1BQU0sQ0FBQztBQUFHLGlCQUFXLGFBQWEsV0FBVyxjQUFjO0FBQU8saUJBQVcsZUFBZTtBQUFNLFVBQUksV0FBVztBQUFZLG1CQUFXLFdBQVc7QUFBTSxhQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUssVUFBVTtBQUFBLElBQUc7QUFBQSxFQUFFO0FBRTVULFdBQVNDLGVBQWEsYUFBYSxZQUFZLGFBQWE7QUFBRSxRQUFJO0FBQVksTUFBQUQsb0JBQWtCLFlBQVksV0FBVyxVQUFVO0FBQUcsUUFBSTtBQUFhLE1BQUFBLG9CQUFrQixhQUFhLFdBQVc7QUFBRyxXQUFPO0FBQUEsRUFBYTtBQUV0TixXQUFTRSxZQUFVLFVBQVUsWUFBWTtBQUFFLFFBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQUUsWUFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsSUFBRztBQUFFLGFBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRSxDQUFDO0FBQUcsUUFBSTtBQUFZLE1BQUFDLGtCQUFnQixVQUFVLFVBQVU7QUFBQSxFQUFHO0FBRWhZLFdBQVNBLGtCQUFnQixHQUFHLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxrQkFBa0IsU0FBU0Esa0JBQWdCQyxJQUFHQyxJQUFHO0FBQUUsTUFBQUQsR0FBRSxZQUFZQztBQUFHLGFBQU9EO0FBQUEsSUFBRztBQUFHLFdBQU9ELGtCQUFnQixHQUFHLENBQUM7QUFBQSxFQUFHO0FBRXpLLFdBQVNHLGVBQWEsU0FBUztBQUFFLFFBQUksNEJBQTRCQyw0QkFBMEI7QUFBRyxXQUFPLFNBQVMsdUJBQXVCO0FBQUUsVUFBSSxRQUFRQyxrQkFBZ0IsT0FBTyxHQUFHO0FBQVEsVUFBSSwyQkFBMkI7QUFBRSxZQUFJLFlBQVlBLGtCQUFnQixJQUFJLEVBQUU7QUFBYSxpQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUFHLE9BQU87QUFBRSxpQkFBUyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFFLGFBQU9DLDZCQUEyQixNQUFNLE1BQU07QUFBQSxJQUFHO0FBQUEsRUFBRztBQUV4YSxXQUFTQSw2QkFBMkJDLE9BQU0sTUFBTTtBQUFFLFFBQUksU0FBU2IsVUFBUSxJQUFJLE1BQU0sWUFBWSxPQUFPLFNBQVMsYUFBYTtBQUFFLGFBQU87QUFBQSxJQUFNLFdBQVcsU0FBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLFVBQVUsMERBQTBEO0FBQUEsSUFBRztBQUFFLFdBQU9jLHlCQUF1QkQsS0FBSTtBQUFBLEVBQUc7QUFFL1IsV0FBU0MseUJBQXVCRCxPQUFNO0FBQUUsUUFBSUEsVUFBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLGVBQWUsMkRBQTJEO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUVySyxXQUFTSCw4QkFBNEI7QUFBRSxRQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGFBQU87QUFBTyxRQUFJLFFBQVEsVUFBVTtBQUFNLGFBQU87QUFBTyxRQUFJLE9BQU8sVUFBVTtBQUFZLGFBQU87QUFBTSxRQUFJO0FBQUUsY0FBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxDQUFDLEdBQUcsV0FBWTtBQUFBLE1BQUMsQ0FBQyxDQUFDO0FBQUcsYUFBTztBQUFBLElBQU0sU0FBUyxHQUFHO0FBQUUsYUFBTztBQUFBLElBQU87QUFBQSxFQUFFO0FBRXhVLFdBQVNDLGtCQUFnQixHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLFNBQVNBLGtCQUFnQkosSUFBRztBQUFFLGFBQU9BLEdBQUUsYUFBYSxPQUFPLGVBQWVBLEVBQUM7QUFBQSxJQUFHO0FBQUcsV0FBT0ksa0JBQWdCLENBQUM7QUFBQSxFQUFHO0FBRTVNLFdBQVNJLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBbUJoTixXQUFTLHlCQUF5QixRQUFRO0FBQ3hDLFdBQU8sT0FBTyxlQUFlLFFBQVE7QUFBQSxFQUN2QztBQUVPLE1BQUksdUJBQW9DLHlCQUFVLFlBQVk7QUFDbkUsSUFBQVYsWUFBVVcsdUJBQXNCLFVBQVU7QUFFMUMsUUFBSSxTQUFTUCxlQUFhTyxxQkFBb0I7QUFFOUMsYUFBU0Esd0JBQXVCO0FBQzlCLFVBQUk7QUFFSixNQUFBZCxrQkFBZ0IsTUFBTWMscUJBQW9CO0FBRTFDLGVBQVMsT0FBTyxVQUFVLFFBQVEsT0FBTyxJQUFJLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUTtBQUN2RixhQUFLLElBQUksSUFBSSxVQUFVLElBQUk7QUFBQSxNQUM3QjtBQUVBLGNBQVEsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQztBQUVyRCxNQUFBRCxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsY0FBYyxJQUFJO0FBRWpFLE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxTQUFTO0FBQUEsUUFDdEQsYUFBYTtBQUFBLE1BQ2YsQ0FBQztBQUVELE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxpQkFBaUIsV0FBWTtBQUMxRSxjQUFNLFNBQVMsU0FBVSxXQUFXO0FBQ2xDLGlCQUFPO0FBQUEsWUFDTCxhQUFhLENBQUMsVUFBVTtBQUFBLFVBQzFCO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsTUFBQUMsa0JBQWdCRCx5QkFBdUIsS0FBSyxHQUFHLGdCQUFnQixXQUFZO0FBQ3pFLGNBQU0sU0FBUztBQUFBLFVBQ2IsYUFBYTtBQUFBLFFBQ2YsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxpQkFBaUIsV0FBWTtBQUsxRSxlQUFPLHNCQUFzQixXQUFZO0FBQ3ZDLGNBQUksQ0FBQyxNQUFNLFdBQVcsU0FBUyxTQUFTLGFBQWEsS0FBSyxNQUFNLE1BQU0sUUFBUTtBQUM1RSxrQkFBTSxNQUFNLE9BQU87QUFBQSxVQUNyQjtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxzQkFBc0IsU0FBVSxZQUFZO0FBQ3pGLFlBQUksQ0FBQyxNQUFNLFlBQVk7QUFDckIsZ0JBQU0sYUFBYTtBQUNuQixnQkFBTSxjQUFjLE1BQU0sV0FBVyxpQkFBaUIsWUFBWSxNQUFNLGFBQWE7QUFBQSxRQUN2RjtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxlQUFlLFNBQVUsZUFBZTtBQUNyRixjQUFNLGFBQWE7QUFFbkIsWUFBSSxlQUFlO0FBQ2pCLHdCQUFjO0FBQUEsUUFDaEI7QUFBQSxNQUNGLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFWLGVBQWFZLHVCQUFzQixDQUFDO0FBQUEsTUFDbEMsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLHVCQUF1QjtBQUNyQyxZQUFJLEtBQUssWUFBWTtBQUNuQixlQUFLLFdBQVcsb0JBQW9CLFlBQVksS0FBSyxhQUFhO0FBQUEsUUFDcEU7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVNDLFVBQVM7QUFDdkIsWUFBSSxTQUFTO0FBRWIsWUFBSSxjQUFjLEtBQUssT0FDbkIsVUFBVSxZQUFZLFNBQ3RCLFNBQVMsWUFBWSxRQUNyQixPQUFPLFlBQVksTUFDbkIsZ0JBQWdCLFlBQVksZUFDNUJDLFdBQVUsWUFBWSxTQUN0QixZQUFZLFlBQVk7QUFDNUIsWUFBSSxTQUFTLEtBQUssTUFBTTtBQUN4QixZQUFJLGNBQWM7QUFDbEIsWUFBSSxXQUFXLFFBQVEsT0FBTyxTQUFVQyxXQUFVLFFBQVEsT0FBTztBQUMvRCxjQUFJLE1BQU0sVUFBVSxPQUFPLFFBQVEsR0FBRyxFQUFFLE9BQU8sS0FBSztBQUNwRCxjQUFJLFlBQVksT0FBTyxZQUFZLE9BQU8sVUFBVSxJQUFJLElBQUk7QUFFNUQsY0FBSSxDQUFDLFdBQVc7QUFDZCxtQkFBT0E7QUFBQSxVQUNUO0FBRUEsY0FBSSxVQUFVLGNBQWMsTUFBTTtBQUNsQyx3QkFBYyxlQUFlLENBQUM7QUFFOUIsY0FBSSx5QkFBeUIsTUFBTSxHQUFHO0FBQ3BDLGdCQUFJLGVBQWU7QUFDbkIsZ0JBQUksZ0JBQWdCLGFBQWEsT0FBTyxNQUFNLE9BQU87QUFDckQsZ0JBQUksdUJBQXVCLGlCQUFpQixjQUFjLFNBQVMsY0FBYyxNQUFNO0FBQ3ZGLFlBQUFBLFVBQVMsS0FBSyxJQUFjLG9CQUFvQjtBQUFBLGNBQzlDO0FBQUEsY0FDQSxTQUFTLFNBQVMsVUFBVTtBQUMxQix1QkFBTyxPQUFPLFlBQVksdUJBQXVCLFdBQVk7QUFDM0QseUJBQU8scUJBQXFCLElBQUk7QUFBQSxnQkFDbEMsSUFBSSxNQUFTO0FBQUEsY0FDZjtBQUFBLFlBQ0YsR0FBRyxhQUFhLENBQUM7QUFBQSxVQUNuQixPQUFPO0FBQ0wsZ0JBQUksV0FBVyxPQUFPLFNBQ2xCLE9BQU8sT0FBTyxNQUNkLE9BQU8sT0FBTyxNQUNkLFNBQVMsT0FBTyxRQUNoQixlQUFlLE9BQU8sZ0JBQWdCO0FBQzFDLGdCQUFJLGFBQWEsT0FBTztBQUN4QixnQkFBSUM7QUFFSixnQkFBSSxZQUFZO0FBQ2QsY0FBQUEsVUFBT0MsVUFBUyxVQUFVLElBQUksYUFBYSxXQUFXLElBQUk7QUFBQSxZQUM1RDtBQUVBLGdCQUFJLGdCQUFnQixPQUFPLFNBQVMsYUFBYSxLQUFLLElBQUksSUFBSTtBQUM5RCxZQUFBRixVQUFTLEtBQUssSUFBYyxvQkFBb0I7QUFBQSxjQUM5QztBQUFBLGNBQ0EsVUFBVSxDQUFDO0FBQUEsY0FDWDtBQUFBLGNBQ0E7QUFBQSxjQUNBLE1BQU1DO0FBQUEsY0FDTixrQkFBa0I7QUFBQSxjQUNsQixTQUFTLFNBQVMsVUFBVTtBQUMxQix1QkFBTyxPQUFPLFlBQVksV0FBVyxXQUFZO0FBQy9DLHlCQUFPLFNBQVMsSUFBSTtBQUFBLGdCQUN0QixJQUFJLE1BQVM7QUFBQSxjQUNmO0FBQUEsWUFDRixHQUFHLGFBQWEsQ0FBQztBQUFBLFVBQ25CO0FBRUEsaUJBQU9EO0FBQUEsUUFDVCxHQUFHLENBQUMsQ0FBQztBQUVMLFlBQUksZ0JBQWdCLElBQWMsU0FBUztBQUFBLFVBQ3pDLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLEdBQUcsU0FBVSxZQUFZO0FBQ3ZCLGlCQUFPLElBQWMsZUFBZTtBQUFBLFlBQ2xDO0FBQUEsWUFDQSxjQUFjO0FBQUEsWUFDZCxVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsWUFDUCxZQUFZO0FBQUEsWUFDWixTQUFTLE9BQU8sY0FBYyxLQUFLLE1BQU07QUFBQSxZQUN6QyxTQUFTRDtBQUFBLFlBQ1Qsa0JBQWtCO0FBQUEsVUFDcEIsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUVELFlBQUksY0FBYyxDQUFDLGVBQWUsSUFBYyxTQUFTO0FBQUEsVUFDdkQsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1gsR0FBRyxTQUFVLFlBQVk7QUFDdkIsaUJBQU8sSUFBYyxZQUFZO0FBQUEsWUFDL0IsU0FBUztBQUFBLFlBQ1QsT0FBTztBQUFBLFVBQ1QsR0FBRyxhQUFhO0FBQUEsUUFDbEIsQ0FBQztBQUVELGVBQU8sSUFBYyxZQUFZO0FBQUEsVUFDL0I7QUFBQSxVQUNBLFlBQVksS0FBSztBQUFBLFVBQ2pCLElBQUksR0FBRyxPQUFPLFFBQVEsVUFBVTtBQUFBLFVBQ2hDO0FBQUEsVUFDQSxRQUFRLGVBQWU7QUFBQSxVQUN2QixjQUFjLEtBQUs7QUFBQSxVQUNuQixrQkFBa0I7QUFBQSxVQUNsQixnQkFBZ0I7QUFBQSxRQUNsQixHQUFHLElBQWMscUJBQXFCO0FBQUEsVUFDcEMsT0FBTztBQUFBLFFBQ1QsQ0FBQyxDQUFDO0FBQUEsTUFDSjtBQUFBLElBQ0YsQ0FBQyxDQUFDO0FBRUYsV0FBT0Y7QUFBQSxFQUNULEVBQUUseUJBQVM7QUFDWCx1QkFBcUIsWUFBWTtBQUFBLElBQy9CLFNBQVMsb0JBQUFNLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSTlELE1BQU0sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLN0YsT0FBTyxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxXQUFXLFVBQVUsUUFBUSxTQUFTLFdBQVcsU0FBUyxDQUFDLEVBQUUsWUFBWSxvQkFBQUEsUUFBVSxLQUFLLFVBQVUsQ0FBQyxHQUFHLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsV0FBVyxVQUFVLFdBQVcsV0FBVyxVQUFVLFNBQVMsTUFBTSxDQUFDLEVBQUUsWUFBWSxvQkFBQUEsUUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQVM3VCxNQUFNLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxLQUFLLFlBQVksb0JBQUFBLFFBQVUsS0FBSyxVQUFVLENBQUMsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BU2xGLGFBQWEsb0JBQUFBLFFBQVUsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BUzlCLFNBQVMsb0JBQUFBLFFBQVU7QUFBQSxNQUNuQixNQUFNLG9CQUFBQSxRQUFVO0FBQUEsTUFDaEIsUUFBUSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BU2xCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQVNyQixTQUFTLG9CQUFBQSxRQUFVO0FBQUEsTUFDbkIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3JCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSzVCLE1BQU0sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxpQkFBaUIsY0FBYyx1QkFBdUIsWUFBWSxhQUFhLFNBQVMsZ0JBQWdCLGNBQWMsVUFBVSxZQUFZLGdCQUFnQixRQUFRLGFBQWEsYUFBYSxjQUFjLFdBQVcsY0FBYyxZQUFZLFlBQVksZ0JBQWdCLFVBQVUsUUFBUSxhQUFhLFFBQVEsbUJBQW1CLGlCQUFpQixVQUFVLGNBQWMsU0FBUyxTQUFTLE9BQU8sWUFBWSxZQUFZLGFBQWEsWUFBWSxTQUFTLHVCQUF1QixTQUFTLHFCQUFxQixTQUFTLGdCQUFnQixlQUFlLGNBQWMsV0FBVyxXQUFXLFNBQVMsV0FBVyxXQUFXLGNBQWMsYUFBYSxtQkFBbUIsd0JBQXdCLG1CQUFtQixvQkFBb0Isc0JBQXNCLG9CQUFvQixRQUFRLGlCQUFpQixxQkFBcUIsd0JBQXdCLHVCQUF1Qix5QkFBeUIsU0FBUyw4QkFBOEIsd0JBQXdCLGNBQWMsWUFBWSxPQUFPLGdCQUFnQixrQkFBa0IsWUFBWSxXQUFXLGVBQWUsZUFBZSxZQUFZLGdCQUFnQixpQkFBaUIsYUFBYSxPQUFPLG1CQUFtQixvQkFBb0IsWUFBWSxxQkFBcUIsbUJBQW1CLG9CQUFvQixjQUFjLG1CQUFtQixtQkFBbUIsaUJBQWlCLDhCQUE4Qiw0QkFBNEIsaUJBQWlCLGdCQUFnQix5QkFBeUIseUJBQXlCLHVCQUF1Qix5QkFBeUIsd0JBQXdCLHNCQUFzQixjQUFjLHFCQUFxQiw0QkFBNEIsNkJBQTZCLHlCQUF5QiwwQkFBMEIsY0FBYyxnQkFBZ0IsZUFBZSxtQkFBbUIsY0FBYyx1QkFBdUIsU0FBUyxTQUFTLFVBQVUsT0FBTyxVQUFVLFFBQVEsVUFBVSxjQUFjLGdCQUFnQixPQUFPLGFBQWEsYUFBYSxlQUFlLFdBQVcsZUFBZSxVQUFVLFFBQVEsWUFBWSxRQUFRLGVBQWUsZ0JBQWdCLHFCQUFxQixjQUFjLGFBQWEsaUJBQWlCLGNBQWMsa0JBQWtCLFlBQVksUUFBUSxVQUFVLFdBQVcsU0FBUyxRQUFRLGtCQUFrQixZQUFZLFFBQVEsV0FBVyxTQUFTLGdCQUFnQixXQUFXLFFBQVEsUUFBUSxhQUFhLFNBQVMsZ0JBQWdCLGNBQWMsYUFBYSxjQUFjLHNCQUFzQixnQkFBZ0IsYUFBYSxtQkFBbUIsa0JBQWtCLGdCQUFnQixpQkFBaUIsZUFBZSxXQUFXLFVBQVUsTUFBTSxZQUFZLFlBQVksZUFBZSxjQUFjLGVBQWUsWUFBWSxrQkFBa0IsaUJBQWlCLFVBQVUsV0FBVyxhQUFhLGNBQWMsY0FBYyxhQUFhLFFBQVEsUUFBUSxXQUFXLFFBQVEsWUFBWSxXQUFXLGVBQWUsaUJBQWlCLGNBQWMsaUJBQWlCLGFBQWEsaUJBQWlCLGFBQWEseUJBQXlCLFlBQVksYUFBYSx1QkFBdUIsWUFBWSxtQkFBbUIsaUJBQWlCLGNBQWMsa0JBQWtCLGVBQWUsb0JBQW9CLHFCQUFxQix3QkFBd0IsWUFBWSxXQUFXLGVBQWUsY0FBYyxhQUFhLGNBQWMsZUFBZSxlQUFlLFdBQVcsZUFBZSxhQUFhLGNBQWMsa0JBQWtCLGVBQWUsZ0JBQWdCLFlBQVksaUJBQWlCLGVBQWUsZUFBZSxhQUFhLGFBQWEscUJBQXFCLGVBQWUsV0FBVyxnQkFBZ0Isa0JBQWtCLGdCQUFnQixhQUFhLGdCQUFnQixrQkFBa0IsY0FBYyxhQUFhLGNBQWMsZUFBZSxlQUFlLHVCQUF1QixXQUFXLGtCQUFrQixjQUFjLGlCQUFpQixrQkFBa0IsaUJBQWlCLHNCQUFzQixVQUFVLDBCQUEwQixvQkFBb0IsbUJBQW1CLGlCQUFpQixhQUFhLFVBQVUsUUFBUSxZQUFZLFlBQVksYUFBYSxVQUFVLFNBQVMsaUJBQWlCLGNBQWMsWUFBWSxTQUFTLGlCQUFpQix1QkFBdUIsVUFBVSxpQkFBaUIsUUFBUSxhQUFhLFVBQVUsUUFBUSxlQUFlLFVBQVUsV0FBVyxVQUFVLHVCQUF1QixXQUFXLGlCQUFpQixjQUFjLGVBQWUsYUFBYSxXQUFXLFNBQVMsV0FBVyxVQUFVLFdBQVcsT0FBTyxhQUFhLGVBQWUsUUFBUSxjQUFjLFFBQVEsZ0JBQWdCLHNCQUFzQixVQUFVLFFBQVEsb0JBQW9CLFNBQVMscUJBQXFCLFdBQVcsaUJBQWlCLFlBQVksZ0JBQWdCLGFBQWEsUUFBUSxtQkFBbUIsU0FBUyxVQUFVLHFCQUFxQix3QkFBd0IsZUFBZSxrQkFBa0IsMEJBQTBCLDBCQUEwQixpQkFBaUIsU0FBUyxTQUFTLGFBQWEsWUFBWSxZQUFZLGFBQWEsVUFBVSxZQUFZLGFBQWEsVUFBVSxhQUFhLGtCQUFrQixjQUFjLG1CQUFtQixrQkFBa0IsbUJBQW1CLGlCQUFpQixrQkFBa0IsU0FBUyxRQUFRLGNBQWMsYUFBYSxXQUFXLFVBQVUsYUFBYSxPQUFPLGVBQWUsV0FBVyx1QkFBdUIsd0JBQXdCLHNCQUFzQixtQkFBbUIsT0FBTyxRQUFRLGVBQWUsWUFBWSxlQUFlLGVBQWUsY0FBYyxZQUFZLFNBQVMsVUFBVSxVQUFVLHVCQUF1QixhQUFhLFFBQVEsY0FBYyxTQUFTLGlCQUFpQixVQUFVLGVBQWUsV0FBVyxrQkFBa0Isb0JBQW9CLDJCQUEyQixrQkFBa0IseUJBQXlCLFlBQVksV0FBVyxXQUFXLG9CQUFvQixnQkFBZ0IsYUFBYSxVQUFVLFlBQVksZUFBZSxXQUFXLGVBQWUsV0FBVyxvQkFBb0IsZ0JBQWdCLGNBQWMsWUFBWSxvQkFBb0Isc0JBQXNCLFVBQVUsY0FBYyxtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixjQUFjLDRCQUE0QixpQkFBaUIsYUFBYSxvQkFBb0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGNBQWMsa0JBQWtCLGNBQWMsYUFBYSxrQkFBa0IsaUJBQWlCLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGFBQWEsWUFBWSxnQkFBZ0IsZUFBZSxzQkFBc0Isb0JBQW9CLGVBQWUsa0JBQWtCLGVBQWUsYUFBYSxlQUFlLGVBQWUsaUJBQWlCLGdCQUFnQixrQkFBa0IsbUJBQW1CLGlCQUFpQixjQUFjLG9CQUFvQixxQkFBcUIsYUFBYSxtQkFBbUIsY0FBYyxlQUFlLGVBQWUsZUFBZSxZQUFZLGFBQWEsbUJBQW1CLGVBQWUsQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsS0FBSyxVQUFVLENBQUM7QUFBQSxJQUM3a04sQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSTdCLFFBQVEsb0JBQUFBLFFBQVUsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS3ZCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUtyQixTQUFTLG9CQUFBQSxRQUFVO0FBQUEsTUFDbkIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3ZCLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUU7QUFBQSxJQUM1QixNQUFNLG9CQUFBQSxRQUFVLElBQUk7QUFBQSxJQUNwQixRQUFRLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsT0FBTyxVQUFVLENBQUMsRUFBRTtBQUFBLElBQ3hGLGVBQWUsb0JBQUFBLFFBQVUsS0FBSztBQUFBLElBQzlCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxJQUNyQixTQUFTLG9CQUFBQSxRQUFVO0FBQUEsSUFDbkIsUUFBUSxvQkFBQUEsUUFBVTtBQUFBLEVBQ3BCOzs7QUN2VEEsTUFBQUMsa0JBQWtCO0FBQ2xCLE1BQUFDLHNCQUF1Qjs7O0FDRHZCLE1BQUFDLGtCQUFrQjtBQVVYLE1BQUksb0JBQW9CLFNBQVNDLG1CQUFrQkMsUUFBTTtBQUM5RCxRQUFJLFNBQVNBLE9BQUssUUFDZCxVQUFVQSxPQUFLLFNBQ2YsT0FBT0EsT0FBSyxNQUNaLFlBQVlBLE9BQUs7QUFFckIsUUFBSSxDQUFDLE9BQU8sV0FBVyxDQUFDLE9BQU8sTUFBTTtBQUNuQyxZQUFNLElBQUksTUFBTSw4QkFBOEIsT0FBTyxPQUFPLE1BQU0sMkpBQTJKLENBQUM7QUFBQSxJQUNoTztBQUVBLFFBQUksVUFBVSxPQUFPLFVBQVUsV0FBWTtBQUN6QyxhQUFPLE9BQU8sUUFBUSxJQUFJO0FBQUEsSUFDNUIsSUFBSTtBQUNKLFFBQUksY0FBYyxPQUFPO0FBQ3pCLFFBQUksUUFBUTtBQUVaLFFBQUksYUFBYTtBQUNmLGNBQVFDLFVBQVMsV0FBVyxJQUFJLGNBQWMsWUFBWSxJQUFJO0FBQUEsSUFDaEU7QUFFQSxRQUFJLGFBQWEsT0FBTztBQUN4QixRQUFJQztBQUVKLFFBQUksWUFBWTtBQUNkLE1BQUFBLFVBQU9ELFVBQVMsVUFBVSxJQUFJLGFBQWEsV0FBVyxJQUFJO0FBQUEsSUFDNUQ7QUFFQSxRQUFJO0FBQ0osUUFBSSxnQkFBZ0IsT0FBTyxPQUFPLFNBQVMsYUFBYSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU87QUFDbkYsUUFBSSxjQUFjLG1CQUFtQjtBQUVyQyxRQUFJLE9BQU8sU0FBUyxRQUFRO0FBQzFCLFVBQUksQ0FBQ0MsU0FBTTtBQUNULGNBQU0sSUFBSSxNQUFNLDhCQUE4QixPQUFPLE9BQU8sTUFBTSw2SEFBNkgsQ0FBQztBQUFBLE1BQ2xNO0FBRUEsZUFBUyxJQUFjLGdCQUFBQyxRQUFNLFVBQVUsTUFBTSxJQUFjLGVBQWU7QUFBQSxRQUN4RTtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsUUFDbkIsWUFBWSxDQUFDO0FBQUEsUUFDYjtBQUFBLFFBQ0EsVUFBVUQ7QUFBQSxRQUNWO0FBQUEsUUFDQSxNQUFNLE9BQU87QUFBQSxRQUNiLFFBQVEsT0FBTztBQUFBLFFBQ2Ysa0JBQWtCLE9BQU8sZ0JBQWdCO0FBQUEsTUFDM0MsQ0FBQyxHQUFHLElBQWMscUJBQXFCLE1BQU0sSUFBYyxRQUFRO0FBQUEsUUFDakUsSUFBSTtBQUFBLE1BQ04sR0FBRyxhQUFhLENBQUMsQ0FBQztBQUFBLElBQ3BCLE9BQU87QUFDTCxlQUFTLElBQWMsZ0JBQWdCO0FBQUEsUUFDckM7QUFBQSxRQUNBLE1BQU07QUFBQSxRQUNOLFlBQVksQ0FBQztBQUFBLFFBQ2I7QUFBQSxRQUNBLFVBQVVBO0FBQUEsUUFDVjtBQUFBLFFBQ0EsTUFBTSxPQUFPO0FBQUEsUUFDYixRQUFRLE9BQU87QUFBQSxRQUNmLGtCQUFrQixPQUFPLGdCQUFnQjtBQUFBLFFBQ3pDLE9BQU87QUFBQSxNQUNULEdBQUcsYUFBYTtBQUFBLElBQ2xCO0FBRUEsV0FBTyxXQUFXLE9BQU8sY0FBYyxJQUFjLFlBQVk7QUFBQSxNQUMvRCxTQUFTLE9BQU87QUFBQSxNQUNoQixPQUFPO0FBQUEsSUFDVCxHQUFHLE1BQU0sSUFBSTtBQUFBLEVBQ2Y7OztBQ3REQSxNQUFBRSxrQkFBK0M7QUFDL0MsTUFBQUMsc0JBQXNCO0FBaEN0QixXQUFTQyxVQUFRLEtBQUs7QUFBRTtBQUEyQixRQUFJLE9BQU8sV0FBVyxjQUFjLE9BQU8sT0FBTyxhQUFhLFVBQVU7QUFBRSxNQUFBQSxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUcsT0FBTztBQUFFLE1BQUFELFlBQVUsU0FBU0EsVUFBUUMsTUFBSztBQUFFLGVBQU9BLFFBQU8sT0FBTyxXQUFXLGNBQWNBLEtBQUksZ0JBQWdCLFVBQVVBLFNBQVEsT0FBTyxZQUFZLFdBQVcsT0FBT0E7QUFBQSxNQUFLO0FBQUEsSUFBRztBQUFFLFdBQU9ELFVBQVEsR0FBRztBQUFBLEVBQUc7QUFFelgsV0FBU0Usa0JBQWdCLFVBQVUsYUFBYTtBQUFFLFFBQUksRUFBRSxvQkFBb0IsY0FBYztBQUFFLFlBQU0sSUFBSSxVQUFVLG1DQUFtQztBQUFBLElBQUc7QUFBQSxFQUFFO0FBRXhKLFdBQVNDLG9CQUFrQixRQUFRLE9BQU87QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUUsVUFBSSxhQUFhLE1BQU0sQ0FBQztBQUFHLGlCQUFXLGFBQWEsV0FBVyxjQUFjO0FBQU8saUJBQVcsZUFBZTtBQUFNLFVBQUksV0FBVztBQUFZLG1CQUFXLFdBQVc7QUFBTSxhQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUssVUFBVTtBQUFBLElBQUc7QUFBQSxFQUFFO0FBRTVULFdBQVNDLGVBQWEsYUFBYSxZQUFZLGFBQWE7QUFBRSxRQUFJO0FBQVksTUFBQUQsb0JBQWtCLFlBQVksV0FBVyxVQUFVO0FBQUcsUUFBSTtBQUFhLE1BQUFBLG9CQUFrQixhQUFhLFdBQVc7QUFBRyxXQUFPO0FBQUEsRUFBYTtBQUV0TixXQUFTRSxZQUFVLFVBQVUsWUFBWTtBQUFFLFFBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQUUsWUFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsSUFBRztBQUFFLGFBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRSxDQUFDO0FBQUcsUUFBSTtBQUFZLE1BQUFDLGtCQUFnQixVQUFVLFVBQVU7QUFBQSxFQUFHO0FBRWhZLFdBQVNBLGtCQUFnQixHQUFHLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxrQkFBa0IsU0FBU0Esa0JBQWdCQyxJQUFHQyxJQUFHO0FBQUUsTUFBQUQsR0FBRSxZQUFZQztBQUFHLGFBQU9EO0FBQUEsSUFBRztBQUFHLFdBQU9ELGtCQUFnQixHQUFHLENBQUM7QUFBQSxFQUFHO0FBRXpLLFdBQVNHLGVBQWEsU0FBUztBQUFFLFFBQUksNEJBQTRCQyw0QkFBMEI7QUFBRyxXQUFPLFNBQVMsdUJBQXVCO0FBQUUsVUFBSSxRQUFRQyxrQkFBZ0IsT0FBTyxHQUFHO0FBQVEsVUFBSSwyQkFBMkI7QUFBRSxZQUFJLFlBQVlBLGtCQUFnQixJQUFJLEVBQUU7QUFBYSxpQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUFHLE9BQU87QUFBRSxpQkFBUyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFFLGFBQU9DLDZCQUEyQixNQUFNLE1BQU07QUFBQSxJQUFHO0FBQUEsRUFBRztBQUV4YSxXQUFTQSw2QkFBMkJDLE9BQU0sTUFBTTtBQUFFLFFBQUksU0FBU2IsVUFBUSxJQUFJLE1BQU0sWUFBWSxPQUFPLFNBQVMsYUFBYTtBQUFFLGFBQU87QUFBQSxJQUFNLFdBQVcsU0FBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLFVBQVUsMERBQTBEO0FBQUEsSUFBRztBQUFFLFdBQU9jLHlCQUF1QkQsS0FBSTtBQUFBLEVBQUc7QUFFL1IsV0FBU0MseUJBQXVCRCxPQUFNO0FBQUUsUUFBSUEsVUFBUyxRQUFRO0FBQUUsWUFBTSxJQUFJLGVBQWUsMkRBQTJEO0FBQUEsSUFBRztBQUFFLFdBQU9BO0FBQUEsRUFBTTtBQUVySyxXQUFTSCw4QkFBNEI7QUFBRSxRQUFJLE9BQU8sWUFBWSxlQUFlLENBQUMsUUFBUTtBQUFXLGFBQU87QUFBTyxRQUFJLFFBQVEsVUFBVTtBQUFNLGFBQU87QUFBTyxRQUFJLE9BQU8sVUFBVTtBQUFZLGFBQU87QUFBTSxRQUFJO0FBQUUsY0FBUSxVQUFVLFFBQVEsS0FBSyxRQUFRLFVBQVUsU0FBUyxDQUFDLEdBQUcsV0FBWTtBQUFBLE1BQUMsQ0FBQyxDQUFDO0FBQUcsYUFBTztBQUFBLElBQU0sU0FBUyxHQUFHO0FBQUUsYUFBTztBQUFBLElBQU87QUFBQSxFQUFFO0FBRXhVLFdBQVNDLGtCQUFnQixHQUFHO0FBQUUsSUFBQUEsb0JBQWtCLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLFNBQVNBLGtCQUFnQkosSUFBRztBQUFFLGFBQU9BLEdBQUUsYUFBYSxPQUFPLGVBQWVBLEVBQUM7QUFBQSxJQUFHO0FBQUcsV0FBT0ksa0JBQWdCLENBQUM7QUFBQSxFQUFHO0FBRTVNLFdBQVNJLGtCQUFnQixLQUFLLEtBQUssT0FBTztBQUFFLFFBQUksT0FBTyxLQUFLO0FBQUUsYUFBTyxlQUFlLEtBQUssS0FBSyxFQUFFLE9BQWMsWUFBWSxNQUFNLGNBQWMsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUFBLElBQUcsT0FBTztBQUFFLFVBQUksR0FBRyxJQUFJO0FBQUEsSUFBTztBQUFFLFdBQU87QUFBQSxFQUFLO0FBWXpNLE1BQUksbUJBQWdDLHlCQUFVLFlBQVk7QUFDL0QsSUFBQVYsWUFBVVcsbUJBQWtCLFVBQVU7QUFFdEMsUUFBSSxTQUFTUCxlQUFhTyxpQkFBZ0I7QUFFMUMsYUFBU0Esa0JBQWlCLE9BQU87QUFDL0IsVUFBSTtBQUVKLE1BQUFkLGtCQUFnQixNQUFNYyxpQkFBZ0I7QUFFdEMsY0FBUSxPQUFPLEtBQUssTUFBTSxLQUFLO0FBRS9CLE1BQUFELGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxXQUFXLE1BQU07QUFFaEUsTUFBQUMsa0JBQWdCRCx5QkFBdUIsS0FBSyxHQUFHLFdBQVcsV0FBWTtBQUNwRSxZQUFJLE1BQU0sU0FBUztBQUNqQixnQkFBTSxTQUFTO0FBQUEsWUFDYixVQUFVO0FBQUEsVUFDWixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFDLGtCQUFnQkQseUJBQXVCLEtBQUssR0FBRyxVQUFVLFdBQVk7QUFDbkUsWUFBSSxNQUFNLFNBQVM7QUFDakIsZ0JBQU0sU0FBUztBQUFBLFlBQ2IsVUFBVTtBQUFBLFVBQ1osQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBQyxrQkFBZ0JELHlCQUF1QixLQUFLLEdBQUcsWUFBWSxXQUFZO0FBQ3JFLGVBQU8sTUFBTSxNQUFNO0FBQUEsTUFDckIsQ0FBQztBQUVELFlBQU0sUUFBUTtBQUFBLFFBQ1osVUFBVTtBQUFBLE1BQ1o7QUFRQSxZQUFNLFVBQVU7QUFDaEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxJQUFBVixlQUFhWSxtQkFBa0IsQ0FBQztBQUFBLE1BQzlCLEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxvQkFBb0I7QUFDbEMsYUFBSyxVQUFVO0FBQUEsTUFDakI7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyx1QkFBdUI7QUFDckMsYUFBSyxVQUFVO0FBQUEsTUFDakI7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBU0MsVUFBUztBQUN2QixZQUFJLGNBQWMsS0FBSyxPQUNuQixTQUFTLFlBQVksUUFDckIsVUFBVSxZQUFZLFNBQ3RCLE9BQU8sWUFBWSxNQUNuQixZQUFZLFlBQVk7QUFDNUIsWUFBSSxPQUFPLE9BQU8sT0FBTyxNQUFNLE9BQU87QUFDdEMsWUFBSSxhQUEwQixrREFBYSxNQUFNO0FBQUEsVUFDL0MsU0FBUyxLQUFLO0FBQUEsVUFDZCxRQUFRLEtBQUs7QUFBQSxRQUNmLENBQUM7QUFDRCxZQUFJLFFBQVEsS0FBSyxTQUFTLElBQUk7QUFBQSxVQUM1QixTQUFTO0FBQUEsUUFDWCxJQUFJO0FBQ0osZUFBTyxJQUFjLE9BQU87QUFBQSxVQUMxQjtBQUFBLFVBQ0E7QUFBQSxRQUNGLEdBQUcsVUFBVTtBQUFBLE1BQ2Y7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUVGLFdBQU9EO0FBQUEsRUFDVCxFQUFFLHlCQUFTO0FBQ1gsbUJBQWlCLFlBQVk7QUFBQSxJQUMzQixRQUFRLG9CQUFBRSxRQUFVLElBQUk7QUFBQSxJQUN0QixTQUFTLG9CQUFBQSxRQUFVLEtBQUs7QUFBQSxJQUN4QixNQUFNLG9CQUFBQSxRQUFVLElBQUk7QUFBQSxJQUNwQixXQUFXLG9CQUFBQSxRQUFVLE9BQU87QUFBQSxJQUM1QixPQUFPLG9CQUFBQSxRQUFVO0FBQUEsRUFDbkI7OztBQ3BITyxNQUFJLHFCQUFxQixTQUFTQyxvQkFBbUIsUUFBUTtBQUNsRSxXQUFPLE9BQU8sZUFBZSxRQUFRO0FBQUEsRUFDdkM7OztBSElPLE1BQUksc0JBQXNCLFNBQVNDLHFCQUFvQkMsUUFBTTtBQUNsRSxRQUFJLFVBQVVBLE9BQUssU0FDZixTQUFTQSxPQUFLLFFBQ2QsT0FBT0EsT0FBSyxNQUNaLGdCQUFnQkEsT0FBSyxlQUNyQixZQUFZQSxPQUFLO0FBQ3JCLFFBQUksZ0JBQWdCLFFBQVEsU0FBUztBQUNyQyxXQUFPLElBQWMsZ0JBQUFDLFFBQU0sVUFBVSxNQUFNLFFBQVEsT0FBTyxTQUFVLE9BQU8sUUFBUSxPQUFPO0FBQ3hGLFVBQUksWUFBWSxPQUFPLFlBQVksT0FBTyxVQUFVLElBQUksSUFBSTtBQUU1RCxVQUFJLENBQUMsV0FBVztBQUNkLGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSSxVQUFVLGNBQWMsTUFBTTtBQUNsQyxVQUFJLE1BQU0sZUFBZSxPQUFPLFFBQVEsR0FBRyxFQUFFLE9BQU8sS0FBSztBQUN6RCxVQUFJLGNBQVUsb0JBQUFDLFNBQVcsV0FBVztBQUFBLFFBQ2xDLHFDQUFxQyxpQkFBaUIsUUFBUTtBQUFBLE1BQ2hFLENBQUM7QUFFRCxVQUFJLG1CQUFtQixNQUFNLEdBQUc7QUFFOUIsY0FBTSxLQUFLLElBQWMsa0JBQWtCO0FBQUEsVUFDekM7QUFBQSxVQUNBLFdBQVc7QUFBQSxVQUNYO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDLENBQUM7QUFBQSxNQUNKLE9BQU87QUFDTCxjQUFNLEtBQUssSUFBYyxtQkFBbUI7QUFBQSxVQUMxQztBQUFBLFVBQ0EsV0FBVztBQUFBLFVBQ1g7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0YsQ0FBQyxDQUFDO0FBQUEsTUFDSjtBQUVBLGFBQU87QUFBQSxJQUNULEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUNSOzs7QUloREEsTUFBQUMsa0JBQWlDO0FBSTFCLE1BQUlDLFlBQVc7QUFBQSxJQUNwQixpQkFBaUIsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUFBLEVBQzlCO0FBQ08sTUFBSSxnQkFBZ0IsU0FBU0MsZUFBY0MsUUFBTTtBQUN0RCxRQUFJLGFBQWFBLE9BQUssWUFDbEIsbUJBQW1CQSxPQUFLLGtCQUN4QixlQUFlQSxPQUFLLGNBQ3BCLGVBQWVBLE9BQUssZUFBZSxHQUNuQyxZQUFZQSxPQUFLLFlBQVk7QUFDakMsUUFBSSxrQkFBa0IsV0FBVyxrQkFBa0IsV0FBVyxrQkFBa0JGLFVBQVM7QUFDekYsUUFBSSxZQUFZLFdBQVcsV0FBVyxLQUFLLEtBQUssV0FBVyxpQkFBaUIsV0FBVyxRQUFRLElBQUk7QUFDbkcsbUNBQVUsV0FBWTtBQUNwQixVQUFJLFlBQVksV0FBVyxZQUFZLEdBQUc7QUFDeEMseUJBQWlCLFFBQVEsaUJBQWlCLFNBQVMsU0FBUyxhQUFhLFlBQVksQ0FBQztBQUFBLE1BQ3hGO0FBQUEsSUFDRixHQUFHLENBQUMsV0FBVyxjQUFjLFVBQVUsQ0FBQztBQUN4QyxXQUFPLElBQWMsT0FBTyxNQUFNLElBQWMsV0FBVztBQUFBLE1BQ3pELE1BQU07QUFBQSxJQUNSLENBQUMsR0FBRyxJQUFjLG9CQUFvQjtBQUFBLE1BQ3BDLFlBQVksV0FBVztBQUFBLE1BQ3ZCLG9CQUFvQixXQUFXO0FBQUEsTUFDL0IsY0FBYyxXQUFXO0FBQUEsTUFDekIscUJBQXFCO0FBQUEsTUFDckI7QUFBQSxNQUNBLHNCQUFzQjtBQUFBLE1BQ3RCLGNBQWM7QUFBQSxNQUNkLGlCQUFpQjtBQUFBLE1BQ2pCLGNBQWM7QUFBQSxJQUNoQixDQUFDLENBQUM7QUFBQSxFQUNKOzs7QU54Q0EsV0FBU0csVUFBUSxLQUFLO0FBQUU7QUFBMkIsUUFBSSxPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQUUsTUFBQUEsWUFBVSxTQUFTQSxVQUFRQyxNQUFLO0FBQUUsZUFBTyxPQUFPQTtBQUFBLE1BQUs7QUFBQSxJQUFHLE9BQU87QUFBRSxNQUFBRCxZQUFVLFNBQVNBLFVBQVFDLE1BQUs7QUFBRSxlQUFPQSxRQUFPLE9BQU8sV0FBVyxjQUFjQSxLQUFJLGdCQUFnQixVQUFVQSxTQUFRLE9BQU8sWUFBWSxXQUFXLE9BQU9BO0FBQUEsTUFBSztBQUFBLElBQUc7QUFBRSxXQUFPRCxVQUFRLEdBQUc7QUFBQSxFQUFHO0FBRXpYLE1BQUlFLGVBQVksQ0FBQyxhQUFhLFdBQVcsU0FBUyxVQUFVLFdBQVcsY0FBYyxXQUFXLGFBQWEsWUFBWSxTQUFTLGtCQUFrQixjQUFjLDBCQUEwQixjQUFjLGdCQUFnQixnQkFBZ0IsY0FBYyxZQUFZLGFBQWEsZ0JBQWdCLGFBQWEsYUFBYTtBQUEzVCxNQUNJQyxnQkFBYSxDQUFDLFNBQVMsVUFBVSxZQUFZLGNBQWMsWUFBWSxRQUFRLFNBQVMsZUFBZSxZQUFZLFVBQVUsZUFBZTtBQUVoSixXQUFTQyxvQkFBbUIsS0FBSztBQUFFLFdBQU9DLG9CQUFtQixHQUFHLEtBQUtDLGtCQUFpQixHQUFHLEtBQUtDLDhCQUE0QixHQUFHLEtBQUtDLG9CQUFtQjtBQUFBLEVBQUc7QUFFeEosV0FBU0Esc0JBQXFCO0FBQUUsVUFBTSxJQUFJLFVBQVUsc0lBQXNJO0FBQUEsRUFBRztBQUU3TCxXQUFTRCw4QkFBNEIsR0FBRyxRQUFRO0FBQUUsUUFBSSxDQUFDO0FBQUc7QUFBUSxRQUFJLE9BQU8sTUFBTTtBQUFVLGFBQU9FLG9CQUFrQixHQUFHLE1BQU07QUFBRyxRQUFJLElBQUksT0FBTyxVQUFVLFNBQVMsS0FBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQUU7QUFBRyxRQUFJLE1BQU0sWUFBWSxFQUFFO0FBQWEsVUFBSSxFQUFFLFlBQVk7QUFBTSxRQUFJLE1BQU0sU0FBUyxNQUFNO0FBQU8sYUFBTyxNQUFNLEtBQUssQ0FBQztBQUFHLFFBQUksTUFBTSxlQUFlLDJDQUEyQyxLQUFLLENBQUM7QUFBRyxhQUFPQSxvQkFBa0IsR0FBRyxNQUFNO0FBQUEsRUFBRztBQUUvWixXQUFTSCxrQkFBaUIsTUFBTTtBQUFFLFFBQUksT0FBTyxXQUFXLGVBQWUsS0FBSyxPQUFPLFFBQVEsS0FBSyxRQUFRLEtBQUssWUFBWSxLQUFLO0FBQU0sYUFBTyxNQUFNLEtBQUssSUFBSTtBQUFBLEVBQUc7QUFFN0osV0FBU0Qsb0JBQW1CLEtBQUs7QUFBRSxRQUFJLE1BQU0sUUFBUSxHQUFHO0FBQUcsYUFBT0ksb0JBQWtCLEdBQUc7QUFBQSxFQUFHO0FBRTFGLFdBQVNBLG9CQUFrQixLQUFLLEtBQUs7QUFBRSxRQUFJLE9BQU8sUUFBUSxNQUFNLElBQUk7QUFBUSxZQUFNLElBQUk7QUFBUSxhQUFTLElBQUksR0FBRyxPQUFPLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEtBQUs7QUFBRSxXQUFLLENBQUMsSUFBSSxJQUFJLENBQUM7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQU07QUFFdEwsV0FBU0MsY0FBVztBQUFFLElBQUFBLGNBQVcsT0FBTyxVQUFVLFNBQVUsUUFBUTtBQUFFLGVBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxZQUFJLFNBQVMsVUFBVSxDQUFDO0FBQUcsaUJBQVMsT0FBTyxRQUFRO0FBQUUsY0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFFBQVEsR0FBRyxHQUFHO0FBQUUsbUJBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLFVBQUc7QUFBQSxRQUFFO0FBQUEsTUFBRTtBQUFFLGFBQU87QUFBQSxJQUFRO0FBQUcsV0FBT0EsWUFBUyxNQUFNLE1BQU0sU0FBUztBQUFBLEVBQUc7QUFFNVQsV0FBU0MsNEJBQXlCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBU0MsaUNBQThCLFFBQVEsUUFBUTtBQUFHLFFBQUksS0FBSztBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLG1CQUFtQixPQUFPLHNCQUFzQixNQUFNO0FBQUcsV0FBSyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsUUFBUSxLQUFLO0FBQUUsY0FBTSxpQkFBaUIsQ0FBQztBQUFHLFlBQUksU0FBUyxRQUFRLEdBQUcsS0FBSztBQUFHO0FBQVUsWUFBSSxDQUFDLE9BQU8sVUFBVSxxQkFBcUIsS0FBSyxRQUFRLEdBQUc7QUFBRztBQUFVLGVBQU8sR0FBRyxJQUFJLE9BQU8sR0FBRztBQUFBLE1BQUc7QUFBQSxJQUFFO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFM2UsV0FBU0EsaUNBQThCLFFBQVEsVUFBVTtBQUFFLFFBQUksVUFBVTtBQUFNLGFBQU8sQ0FBQztBQUFHLFFBQUksU0FBUyxDQUFDO0FBQUcsUUFBSSxhQUFhLE9BQU8sS0FBSyxNQUFNO0FBQUcsUUFBSSxLQUFLO0FBQUcsU0FBSyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUFFLFlBQU0sV0FBVyxDQUFDO0FBQUcsVUFBSSxTQUFTLFFBQVEsR0FBRyxLQUFLO0FBQUc7QUFBVSxhQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUc7QUFBQSxJQUFHO0FBQUUsV0FBTztBQUFBLEVBQVE7QUFFbFQsV0FBU0MsVUFBUUMsU0FBUSxnQkFBZ0I7QUFBRSxRQUFJQyxRQUFPLE9BQU8sS0FBS0QsT0FBTTtBQUFHLFFBQUksT0FBTyx1QkFBdUI7QUFBRSxVQUFJLFVBQVUsT0FBTyxzQkFBc0JBLE9BQU07QUFBRyxVQUFJLGdCQUFnQjtBQUFFLGtCQUFVLFFBQVEsT0FBTyxTQUFVLEtBQUs7QUFBRSxpQkFBTyxPQUFPLHlCQUF5QkEsU0FBUSxHQUFHLEVBQUU7QUFBQSxRQUFZLENBQUM7QUFBQSxNQUFHO0FBQUUsTUFBQUMsTUFBSyxLQUFLLE1BQU1BLE9BQU0sT0FBTztBQUFBLElBQUc7QUFBRSxXQUFPQTtBQUFBLEVBQU07QUFFeFYsV0FBU0MsZ0JBQWMsUUFBUTtBQUFFLGFBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7QUFBRSxVQUFJLFNBQVMsVUFBVSxDQUFDLEtBQUssT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQUcsVUFBSSxJQUFJLEdBQUc7QUFBRSxRQUFBSCxVQUFRLE9BQU8sTUFBTSxHQUFHLElBQUksRUFBRSxRQUFRLFNBQVUsS0FBSztBQUFFLFVBQUFJLGtCQUFnQixRQUFRLEtBQUssT0FBTyxHQUFHLENBQUM7QUFBQSxRQUFHLENBQUM7QUFBQSxNQUFHLFdBQVcsT0FBTywyQkFBMkI7QUFBRSxlQUFPLGlCQUFpQixRQUFRLE9BQU8sMEJBQTBCLE1BQU0sQ0FBQztBQUFBLE1BQUcsT0FBTztBQUFFLFFBQUFKLFVBQVEsT0FBTyxNQUFNLENBQUMsRUFBRSxRQUFRLFNBQVUsS0FBSztBQUFFLGlCQUFPLGVBQWUsUUFBUSxLQUFLLE9BQU8seUJBQXlCLFFBQVEsR0FBRyxDQUFDO0FBQUEsUUFBRyxDQUFDO0FBQUEsTUFBRztBQUFBLElBQUU7QUFBRSxXQUFPO0FBQUEsRUFBUTtBQUVyaEIsV0FBU0ssa0JBQWdCLFVBQVUsYUFBYTtBQUFFLFFBQUksRUFBRSxvQkFBb0IsY0FBYztBQUFFLFlBQU0sSUFBSSxVQUFVLG1DQUFtQztBQUFBLElBQUc7QUFBQSxFQUFFO0FBRXhKLFdBQVNDLG9CQUFrQixRQUFRLE9BQU87QUFBRSxhQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQUUsVUFBSSxhQUFhLE1BQU0sQ0FBQztBQUFHLGlCQUFXLGFBQWEsV0FBVyxjQUFjO0FBQU8saUJBQVcsZUFBZTtBQUFNLFVBQUksV0FBVztBQUFZLG1CQUFXLFdBQVc7QUFBTSxhQUFPLGVBQWUsUUFBUSxXQUFXLEtBQUssVUFBVTtBQUFBLElBQUc7QUFBQSxFQUFFO0FBRTVULFdBQVNDLGVBQWEsYUFBYSxZQUFZLGFBQWE7QUFBRSxRQUFJO0FBQVksTUFBQUQsb0JBQWtCLFlBQVksV0FBVyxVQUFVO0FBQUcsUUFBSTtBQUFhLE1BQUFBLG9CQUFrQixhQUFhLFdBQVc7QUFBRyxXQUFPO0FBQUEsRUFBYTtBQUV0TixXQUFTRSxZQUFVLFVBQVUsWUFBWTtBQUFFLFFBQUksT0FBTyxlQUFlLGNBQWMsZUFBZSxNQUFNO0FBQUUsWUFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsSUFBRztBQUFFLGFBQVMsWUFBWSxPQUFPLE9BQU8sY0FBYyxXQUFXLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRSxDQUFDO0FBQUcsUUFBSTtBQUFZLE1BQUFDLGtCQUFnQixVQUFVLFVBQVU7QUFBQSxFQUFHO0FBRWhZLFdBQVNBLGtCQUFnQixHQUFHLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxrQkFBa0IsU0FBU0Esa0JBQWdCQyxJQUFHQyxJQUFHO0FBQUUsTUFBQUQsR0FBRSxZQUFZQztBQUFHLGFBQU9EO0FBQUEsSUFBRztBQUFHLFdBQU9ELGtCQUFnQixHQUFHLENBQUM7QUFBQSxFQUFHO0FBRXpLLFdBQVNHLGVBQWEsU0FBUztBQUFFLFFBQUksNEJBQTRCQyw0QkFBMEI7QUFBRyxXQUFPLFNBQVMsdUJBQXVCO0FBQUUsVUFBSSxRQUFRQyxrQkFBZ0IsT0FBTyxHQUFHO0FBQVEsVUFBSSwyQkFBMkI7QUFBRSxZQUFJLFlBQVlBLGtCQUFnQixJQUFJLEVBQUU7QUFBYSxpQkFBUyxRQUFRLFVBQVUsT0FBTyxXQUFXLFNBQVM7QUFBQSxNQUFHLE9BQU87QUFBRSxpQkFBUyxNQUFNLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRztBQUFFLGFBQU9DLDZCQUEyQixNQUFNLE1BQU07QUFBQSxJQUFHO0FBQUEsRUFBRztBQUV4YSxXQUFTQSw2QkFBMkJDLE9BQU0sTUFBTTtBQUFFLFFBQUksU0FBUzdCLFVBQVEsSUFBSSxNQUFNLFlBQVksT0FBTyxTQUFTLGFBQWE7QUFBRSxhQUFPO0FBQUEsSUFBTSxXQUFXLFNBQVMsUUFBUTtBQUFFLFlBQU0sSUFBSSxVQUFVLDBEQUEwRDtBQUFBLElBQUc7QUFBRSxXQUFPOEIseUJBQXVCRCxLQUFJO0FBQUEsRUFBRztBQUUvUixXQUFTQyx5QkFBdUJELE9BQU07QUFBRSxRQUFJQSxVQUFTLFFBQVE7QUFBRSxZQUFNLElBQUksZUFBZSwyREFBMkQ7QUFBQSxJQUFHO0FBQUUsV0FBT0E7QUFBQSxFQUFNO0FBRXJLLFdBQVNILDhCQUE0QjtBQUFFLFFBQUksT0FBTyxZQUFZLGVBQWUsQ0FBQyxRQUFRO0FBQVcsYUFBTztBQUFPLFFBQUksUUFBUSxVQUFVO0FBQU0sYUFBTztBQUFPLFFBQUksT0FBTyxVQUFVO0FBQVksYUFBTztBQUFNLFFBQUk7QUFBRSxjQUFRLFVBQVUsUUFBUSxLQUFLLFFBQVEsVUFBVSxTQUFTLENBQUMsR0FBRyxXQUFZO0FBQUEsTUFBQyxDQUFDLENBQUM7QUFBRyxhQUFPO0FBQUEsSUFBTSxTQUFTLEdBQUc7QUFBRSxhQUFPO0FBQUEsSUFBTztBQUFBLEVBQUU7QUFFeFUsV0FBU0Msa0JBQWdCLEdBQUc7QUFBRSxJQUFBQSxvQkFBa0IsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsU0FBU0Esa0JBQWdCSixJQUFHO0FBQUUsYUFBT0EsR0FBRSxhQUFhLE9BQU8sZUFBZUEsRUFBQztBQUFBLElBQUc7QUFBRyxXQUFPSSxrQkFBZ0IsQ0FBQztBQUFBLEVBQUc7QUFFNU0sV0FBU1Ysa0JBQWdCLEtBQUssS0FBSyxPQUFPO0FBQUUsUUFBSSxPQUFPLEtBQUs7QUFBRSxhQUFPLGVBQWUsS0FBSyxLQUFLLEVBQUUsT0FBYyxZQUFZLE1BQU0sY0FBYyxNQUFNLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFBRyxPQUFPO0FBQUUsVUFBSSxHQUFHLElBQUk7QUFBQSxJQUFPO0FBQUUsV0FBTztBQUFBLEVBQUs7QUEyQmhOLE1BQUksb0JBQW9CO0FBQUEsSUFDdEIsTUFBTTtBQUFBLE1BQ0osT0FBTztBQUFBLE1BQ1AsUUFBUSxTQUFTLE9BQU8sT0FBTztBQUM3QixlQUFPLFdBQVcsS0FBSztBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ04sT0FBTztBQUFBLE1BQ1AsUUFBUSxTQUFTYyxRQUFPLE9BQU87QUFDN0IsZUFBTyxXQUFXLEtBQUs7QUFBQSxNQUN6QjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE9BQU87QUFBQSxNQUNQLFFBQVEsU0FBU0EsUUFBTyxPQUFPO0FBQzdCLGVBQU8sYUFBYSxLQUFLO0FBQUEsTUFDM0I7QUFBQSxJQUNGO0FBQUEsSUFDQSxTQUFTO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRLFNBQVNBLFFBQU8sT0FBTztBQUM3QixlQUFPLGNBQWMsS0FBSztBQUFBLE1BQzVCO0FBQUEsSUFDRjtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osT0FBTztBQUFBLE1BQ1AsUUFBUSxTQUFTQSxRQUFPLE9BQU87QUFDN0IsZUFBTyxXQUFXLEtBQUs7QUFBQSxNQUN6QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0EsTUFBSSxhQUFhLE9BQU8sS0FBSyxpQkFBaUI7QUFDdkMsV0FBUyxVQUFVLE1BQU0sUUFBUTtBQUN0QyxRQUFJLFFBQVE7QUFDVixVQUFJQyxZQUFXLE1BQU0sR0FBRztBQUN0QixlQUFPLE9BQU8sSUFBSTtBQUFBLE1BQ3BCO0FBR0EsYUFBTyxLQUFLLE1BQU07QUFBQSxJQUNwQjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLFlBQVksTUFBTSxVQUFVO0FBQ25DLFFBQUksVUFBVTtBQUNaLFVBQUlBLFlBQVcsUUFBUSxHQUFHO0FBQ3hCLGVBQU8sU0FBUyxJQUFJO0FBQUEsTUFDdEI7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFFQSxXQUFTLGFBQWEsTUFBTUMsU0FBUSxXQUFXO0FBQzdDLFFBQUksV0FBVztBQUNiLFVBQUlELFlBQVcsU0FBUyxHQUFHO0FBQ3pCLGVBQU8sVUFBVSxNQUFNQyxPQUFNO0FBQUEsTUFDL0I7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFFQSxXQUFTLGdCQUFnQkEsU0FBUUMsUUFBTTtBQUNyQyxRQUFJLFFBQVFBLE9BQUssT0FDYixhQUFhQSxPQUFLO0FBQ3RCLFFBQUlDLFNBQVFGLFNBQ1IsU0FBU0UsT0FBTTtBQUVuQixRQUFJLFFBQVE7QUFDVixVQUFJSCxZQUFXLE1BQU0sR0FBRztBQUN0QixlQUFPLE9BQU87QUFBQSxVQUNaO0FBQUEsVUFDQTtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxjQUFjSSxJQUFHO0FBQ3hCLFdBQU9BLEdBQUUsZUFBZSxZQUFZLEtBQUssQ0FBQyxDQUFDQSxHQUFFO0FBQUEsRUFDL0M7QUFFTyxNQUFJLGdCQUE2Qix5QkFBVSxZQUFZO0FBQzVELElBQUFmLFlBQVVnQixnQkFBZSxVQUFVO0FBRW5DLFFBQUksU0FBU1osZUFBYVksY0FBYTtBQUV2QyxhQUFTQSxlQUFjLE9BQU87QUFDNUIsVUFBSTtBQUVKLE1BQUFuQixrQkFBZ0IsTUFBTW1CLGNBQWE7QUFFbkMsY0FBUSxPQUFPLEtBQUssTUFBTSxLQUFLO0FBRS9CLE1BQUFwQixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFFN0QsTUFBQWIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLFNBQVMsSUFBSTtBQUU1RCxNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsWUFBWSxTQUFVLE9BQU87QUFFMUUsY0FBTSx1QkFBdUI7QUFHN0IsY0FBTSxRQUFRO0FBRWQsWUFBSSxNQUFNLE1BQU0sWUFBWSxRQUFRLE9BQU87QUFDekMsZ0JBQU0sb0JBQW9CLEtBQUs7QUFBQSxRQUNqQztBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyx1QkFBdUIsU0FBVSxPQUFPO0FBQ3JGLFlBQUksV0FBVyxTQUFTUSxVQUFTLE9BQU87QUFDdEMsZ0JBQU0sZ0JBQWdCO0FBQ3RCLGdCQUFNLGVBQWU7QUFBQSxRQUN2QjtBQUVBLFNBQUMsYUFBYSxXQUFXLGFBQWEsWUFBWSxjQUFjLGNBQWMsU0FBUyxZQUFZLFdBQVcsU0FBUyxVQUFVLEVBQUUsUUFBUSxTQUFVLE9BQU87QUFDMUosZ0JBQU0saUJBQWlCLE9BQU8sVUFBVSxJQUFJO0FBRTVDLGdCQUFNLFNBQVMsS0FBSyxXQUFZO0FBQzlCLGtCQUFNLG9CQUFvQixPQUFPLFVBQVUsSUFBSTtBQUFBLFVBQ2pELENBQUM7QUFBQSxRQUNILENBQUM7QUFBQSxNQUNILENBQUM7QUFFRCxNQUFBckIsa0JBQWdCYSx5QkFBdUIsS0FBSyxHQUFHLDBCQUEwQixXQUFZO0FBQ25GLGNBQU0sU0FBUyxRQUFRLFNBQVUsU0FBUztBQUN4QyxpQkFBTyxRQUFRO0FBQUEsUUFDakIsQ0FBQztBQUVELGNBQU0sU0FBUyxTQUFTO0FBQUEsTUFDMUIsQ0FBQztBQUVELE1BQUFiLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyxXQUFXLGdCQUFnQixTQUFTLEVBQUUsQ0FBQztBQUV0RixNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsd0JBQXdCLGdCQUFnQiw0QkFBNEIsQ0FBQztBQUVwSCxNQUFBYixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsbUJBQW1CLFNBQVUsVUFBVTtBQUNwRixZQUFJLGNBQWMsTUFBTSxPQUNwQixRQUFRLFlBQVksT0FDcEIsWUFBWSxZQUFZO0FBRTVCLFlBQUksQ0FBQyxXQUFXO0FBQ2Q7QUFBQSxRQUNGO0FBRUEsWUFBSSxrQkFBa0IsTUFBTSxPQUFPLFNBQVUsTUFBTTtBQUNqRCxpQkFBTyxDQUFDLFVBQVUsY0FBYyxVQUFVLFdBQVcsSUFBSTtBQUFBLFFBQzNELENBQUM7QUFDRCxZQUFJLFVBQVUsTUFBTSxNQUFNLGFBQWEsZ0JBQWdCLFNBQVMsS0FBSyxNQUFNLE1BQU0sVUFBVSxXQUFXLGdCQUFnQjtBQUN0SCxZQUFJLFdBQVcsZ0JBQWdCLFdBQVc7QUFFMUMsWUFBSSxXQUFXLFNBQVNTLFVBQVMsT0FBTztBQUN0QyxjQUFJLE1BQU0sT0FBTyxTQUFTO0FBQ3hCLGtCQUFNLGdCQUFnQixlQUFlO0FBQUEsVUFDdkMsT0FBTztBQUNMLGtCQUFNLGdCQUFnQixDQUFDLENBQUM7QUFBQSxVQUMxQjtBQUFBLFFBQ0Y7QUFFQSxlQUFPLElBQWMsU0FBUztBQUFBLFVBQzVCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLEdBQUcsU0FBVSxlQUFlO0FBQzFCLGlCQUFPLElBQWMsYUFBYTtBQUFBLFlBQ2hDLElBQUksTUFBTSxxQkFBcUIsV0FBVyxXQUFXLFNBQVM7QUFBQSxZQUM5RCxNQUFNLFdBQVcsU0FBWTtBQUFBLFlBQzdCO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUVBLGtCQUFrQixXQUFXLFNBQVk7QUFBQSxZQUN6QyxjQUFjO0FBQUEsWUFDZCxPQUFPLFdBQVcsZ0JBQWdCO0FBQUEsVUFDcEMsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUVELE1BQUF0QixrQkFBZ0JhLHlCQUF1QixLQUFLLEdBQUcsOEJBQThCLFNBQVVHLFNBQVE7QUFDN0YsWUFBSSxVQUFVLE1BQU0sTUFBTTtBQUMxQixZQUFJTyxTQUFRUCxTQUNSLFdBQVdPLE9BQU0sVUFDakIsUUFBUUEsT0FBTSxPQUNkLE9BQU9BLE9BQU07QUFFakIsWUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLFFBQVEsQ0FBQyxVQUFVO0FBQzFDO0FBQUEsUUFDRjtBQUVBLFlBQUksUUFBUSxLQUFLLFVBQVUsU0FBUyxRQUFRLEtBQUssVUFBVSxNQUFNO0FBQy9ELGlCQUFPLFFBQVEsS0FBSztBQUFBLFFBQ3RCO0FBQUEsTUFDRixDQUFDO0FBRUQsTUFBQXZCLGtCQUFnQmEseUJBQXVCLEtBQUssR0FBRyx1QkFBdUIsU0FBVUcsU0FBUTtBQUN0RixZQUFJLFVBQVUsTUFBTSxNQUFNO0FBQzFCLFlBQUlRLFNBQVFSLFNBQ1IsV0FBV1EsT0FBTSxVQUNqQixPQUFPQSxPQUFNO0FBRWpCLFlBQUksQ0FBQyxXQUFXLENBQUMsVUFBVTtBQUN6QjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLENBQUMsTUFBTSxNQUFNLFVBQVU7QUFDekIsZ0JBQU0sSUFBSSxNQUFNLHNEQUFzRCxPQUFPLE1BQU0sOEdBQThHLENBQUM7QUFBQSxRQUNwTTtBQUVBLGVBQU8sV0FBWTtBQUNqQixpQkFBTyxNQUFNLG1CQUFtQlIsT0FBTTtBQUFBLFFBQ3hDO0FBQUEsTUFDRixDQUFDO0FBRUQsWUFBTSxRQUFRO0FBQUE7QUFBQSxRQUVaLDBCQUEwQjtBQUFBLFFBQzFCLFdBQVcsQ0FBQztBQUFBLE1BQ2Q7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFiLGVBQWFpQixnQkFBZSxDQUFDO0FBQUEsTUFDM0IsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLG9CQUFvQjtBQUNsQyxZQUFJLEtBQUssTUFBTSxXQUFXLEtBQUs7QUFBTyxlQUFLLG9CQUFvQixLQUFLLEtBQUs7QUFDekUsYUFBSyxvQkFBb0I7QUFBQSxNQUMzQjtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLG1CQUFtQixXQUFXO0FBQzVDLFlBQUksVUFBVSxZQUFZLEtBQUssTUFBTSxTQUFTO0FBQzVDLGNBQUksS0FBSyxNQUFNLFdBQVcsS0FBSyxPQUFPO0FBQ3BDLGlCQUFLLG9CQUFvQixLQUFLLEtBQUs7QUFBQSxVQUNyQyxPQUFPO0FBQ0wsaUJBQUssdUJBQXVCO0FBQUEsVUFDOUI7QUFBQSxRQUNGO0FBRUEsYUFBSyxvQkFBb0I7QUFBQSxNQUMzQjtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLHVCQUF1QjtBQUNyQyxhQUFLLHVCQUF1QjtBQUFBLE1BQzlCO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsc0JBQXNCO0FBQ3BDLFlBQUksS0FBSyxNQUFNLGFBQWEsS0FBSyxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBSyxNQUFNLDRCQUE0QixLQUFLLE1BQU0sTUFBTSxTQUFTLEdBQUc7QUFDdkksZUFBSyxTQUFTO0FBQUEsWUFDWixXQUFXLEtBQUssTUFBTSxVQUFVO0FBQUEsVUFDbEMsQ0FBQztBQUNELGVBQUssU0FBUztBQUFBLFlBQ1osMEJBQTBCO0FBQUEsVUFDNUIsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsYUFBYSxjQUFjO0FBQ3pDLGFBQUssZ0JBQWdCLFlBQVk7QUFBQSxNQUNuQztBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLGNBQWMsT0FBTztBQUNuQyxZQUFJLFdBQVcsQ0FBQztBQUVoQixZQUFJLGNBQWMsS0FBSyxHQUFHO0FBQ3hCLG1CQUFTLE9BQU87QUFBQSxZQUNkLE9BQU8sTUFBTSxXQUFXO0FBQUEsWUFDeEIsTUFBTSxNQUFNLFdBQVc7QUFBQSxVQUN6QjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLE1BQU0sU0FBUztBQUNqQixtQkFBUyxPQUFPLE1BQU0sUUFBUTtBQUFBLFFBQ2hDO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxnQkFBZ0IsV0FBVztBQUN6QyxZQUFJLENBQUMsS0FBSyxNQUFNLFdBQVc7QUFDekI7QUFBQSxRQUNGO0FBRUEsYUFBSyxTQUFTO0FBQUEsVUFDWjtBQUFBLFFBQ0YsQ0FBQztBQUVELFlBQUksS0FBSyxNQUFNLFVBQVUsbUJBQW1CO0FBQzFDLGVBQUssTUFBTSxVQUFVLGtCQUFrQixTQUFTO0FBQUEsUUFDbEQ7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsaUJBQWlCO0FBQy9CLGFBQUssZ0JBQWdCLENBQUMsQ0FBQztBQUFBLE1BQ3pCO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsaUJBQWlCSyxPQUFNO0FBQ3JDLGFBQUssZUFBZTtBQUNwQixZQUFJLGtCQUFrQixLQUFLLGNBQWMsS0FBSyxLQUFLO0FBRW5ELFlBQUksV0FBVzFCLGdCQUFjQSxnQkFBYyxDQUFDLEdBQUcsZUFBZSxHQUFHLENBQUMsR0FBRztBQUFBLFVBQ25FLE1BQU07QUFBQSxZQUNKLE9BQU87QUFBQTtBQUFBLFlBRVAsTUFBTTBCO0FBQUEsVUFDUjtBQUFBLFFBQ0YsQ0FBQztBQUVELFlBQUksS0FBSyxNQUFNLFVBQVU7QUFDdkIsZUFBSyxNQUFNLFNBQVMsUUFBUTtBQUFBLFFBQzlCO0FBQUEsTUFDRjtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLGFBQWEsT0FBTztBQUNsQyxhQUFLLGVBQWU7QUFDcEIsWUFBSSxrQkFBa0IsS0FBSyxjQUFjLEtBQUssS0FBSztBQUVuRCxZQUFJLFdBQVcxQixnQkFBY0EsZ0JBQWMsQ0FBQyxHQUFHLGVBQWUsR0FBRyxDQUFDLEdBQUc7QUFBQSxVQUNuRSxNQUFNQSxnQkFBY0EsZ0JBQWMsQ0FBQyxHQUFHLGdCQUFnQixJQUFJLEdBQUcsQ0FBQyxHQUFHO0FBQUEsWUFDL0Q7QUFBQSxVQUNGLENBQUM7QUFBQSxRQUNILENBQUM7QUFFRCxZQUFJLEtBQUssTUFBTSxVQUFVO0FBQ3ZCLGVBQUssTUFBTSxTQUFTLFFBQVE7QUFBQSxRQUM5QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxtQkFBbUJpQixTQUFRO0FBQ3pDLGFBQUssZUFBZTtBQUNwQixZQUFJLGtCQUFrQixLQUFLLGNBQWMsS0FBSyxLQUFLO0FBQ25ELFlBQUksWUFBWSxjQUFjO0FBRTlCLFlBQUksbUJBQW1CLGdCQUFnQixTQUFTLGdCQUFnQixLQUFLLFVBQVVBLFFBQU8sU0FBUyxnQkFBZ0IsS0FBSyxVQUFVQSxRQUFPLE9BQU87QUFDMUksc0JBQVksY0FBYyxRQUFRLGdCQUFnQixLQUFLLFNBQVM7QUFBQSxRQUNsRTtBQUVBLFlBQUksV0FBV2pCLGdCQUFjQSxnQkFBYyxDQUFDLEdBQUcsZUFBZSxHQUFHLENBQUMsR0FBRztBQUFBO0FBQUEsVUFFbkUsTUFBTSxDQUFDLGdCQUFnQixPQUFPLFNBQVk7QUFBQSxZQUN4QyxPQUFPO0FBQUEsWUFDUCxNQUFNLGdCQUFnQixLQUFLO0FBQUEsVUFDN0I7QUFBQSxVQUNBLE1BQU07QUFBQSxZQUNKLE9BQU9pQixRQUFPLFNBQVNBLFFBQU87QUFBQSxZQUM5QjtBQUFBLFVBQ0Y7QUFBQSxRQUNGLENBQUM7QUFFRCxZQUFJLEtBQUssTUFBTSxVQUFVO0FBRXZCLGVBQUssTUFBTSxTQUFTLFFBQVE7QUFBQSxRQUM5QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBU0YsVUFBUztBQUN2QixZQUFJLGVBQWUsS0FBSyxPQUNwQixZQUFZLGFBQWEsV0FDekIsVUFBVSxhQUFhLFNBQ3ZCLFFBQVEsYUFBYSxPQUNyQixTQUFTLGFBQWEsUUFDdEIsVUFBVSxhQUFhLFNBQ3ZCLGFBQWEsYUFBYSxZQUMxQixVQUFVLGFBQWEsU0FDdkIsWUFBWSxhQUFhLFdBQ3pCLFdBQVcsYUFBYSxVQUN4QixRQUFRLGFBQWEsT0FDckIsaUJBQWlCLGFBQWEsZ0JBQzlCLGFBQWEsYUFBYSxZQUMxQix5QkFBeUIsYUFBYSx3QkFDdEMsYUFBYSxhQUFhLFlBQzFCLGVBQWUsYUFBYSxjQUM1QixlQUFlLGFBQWEsY0FDNUIsYUFBYSxhQUFhLFlBQzFCLFdBQVcsYUFBYSxVQUN4QixZQUFZLGFBQWEsV0FDekIsZUFBZSxhQUFhLGNBQzVCLFlBQVksYUFBYSxXQUN6QixjQUFjLGFBQWEsYUFDM0IsT0FBT3BCLDRCQUF5QixjQUFjVCxZQUFTO0FBRTNELFlBQUksY0FBVSxvQkFBQXlDLFNBQVcsaUJBQWlCO0FBQUEsVUFDeEMseUJBQXlCO0FBQUEsUUFDM0IsR0FBRyxTQUFTO0FBQ1osWUFBSSxRQUFRLEtBQUssWUFBWTtBQUM3QixZQUFJLGdCQUFnQixLQUFLLG9CQUFvQjtBQUM3QyxlQUFPLElBQWMsT0FBT2pDLFlBQVM7QUFBQSxVQUNuQyxXQUFXO0FBQUEsUUFDYixHQUFHLElBQUksR0FBRyxPQUFPLGFBQWE7QUFBQSxNQUNoQztBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLGNBQWM7QUFDNUIsWUFBSSxlQUFlLEtBQUssT0FDcEIsYUFBYSxhQUFhLFlBQzFCLGFBQWEsYUFBYSxZQUMxQixjQUFjLGFBQWE7QUFDL0IsWUFBSSxlQUFlLGFBQWEsSUFBYyxzQkFBc0IsTUFBTSxJQUFjLGNBQWM7QUFBQSxVQUNwRyxZQUFZO0FBQUEsVUFDWixnQkFBZ0I7QUFBQSxVQUNoQixZQUFZO0FBQUEsUUFDZCxHQUFHLElBQWMsYUFBYTtBQUFBLFVBQzVCLE1BQU07QUFBQSxRQUNSLEdBQUcsS0FBSyxnQkFBZ0IsSUFBSSxDQUFDLEdBQUcsSUFBYyxhQUFhO0FBQUEsVUFDekQsTUFBTTtBQUFBLFFBQ1IsR0FBRyxLQUFLLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxJQUFJO0FBQ3JDLFlBQUksVUFBVSxLQUFLLG1CQUFtQjtBQUN0QyxZQUFJLE9BQU8sS0FBSyxnQkFBZ0I7QUFDaEMsWUFBSSxPQUFPLEtBQUssZ0JBQWdCO0FBQ2hDLFlBQUksU0FBUyxLQUFLLGtCQUFrQjtBQUNwQyxlQUFPLElBQWMsT0FBTyxNQUFNLGNBQWMsSUFBYyxVQUFVO0FBQUEsVUFDdEUsSUFBSSxLQUFLO0FBQUEsVUFDVDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRixHQUFHLFNBQVMsTUFBTSxNQUFNLE1BQU0sQ0FBQztBQUFBLE1BQ2pDO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsd0JBQXdCO0FBQ3RDLFlBQUksU0FBUztBQUViLFlBQUksZUFBZSxLQUFLLE9BQ3BCLFVBQVUsYUFBYSxTQUN2QixVQUFVLGFBQWE7QUFDM0IsWUFBSSxRQUFRLENBQUM7QUFFYixZQUFJLENBQUMsU0FBUztBQUNaLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGdCQUFRLFFBQVEsU0FBVXVCLFNBQVEsT0FBTztBQUN2QyxjQUFJLFNBQVM7QUFFYixjQUFJQSxRQUFPLFNBQVMsUUFBUSxRQUFRLENBQUMsQ0FBQyxRQUFRLG9CQUFvQkEsUUFBTyxZQUFZLE1BQU07QUFDekYsWUFBQUEsVUFBU2pCLGdCQUFjQSxnQkFBYyxDQUFDLEdBQUdpQixPQUFNLEdBQUcsQ0FBQyxHQUFHO0FBQUEsY0FDcEQsVUFBVTtBQUFBLFlBQ1osQ0FBQztBQUFBLFVBQ0g7QUFFQSxjQUFJLENBQUNBLFFBQU8sY0FBYyxVQUFVQSxhQUFZLFFBQVEsWUFBWSxTQUFTLFVBQVUsd0JBQXdCLFFBQVEsbUJBQW1CLFFBQVEsMEJBQTBCLFNBQVMsU0FBUyxzQkFBc0IsVUFBVSxPQUFPO0FBQ25PO0FBQUEsVUFDRjtBQUVBLGNBQUksZ0JBQWdCLE9BQU8sMkJBQTJCQSxPQUFNO0FBRTVELGdCQUFNLEtBQUs7QUFBQSxZQUNULE1BQU1BLFFBQU87QUFBQSxZQUNiLEtBQUssV0FBVyxPQUFPQSxRQUFPLE9BQU8sR0FBRyxFQUFFLE9BQU8sS0FBSztBQUFBLFlBQ3RELFFBQVEsT0FBTyxvQkFBb0JBLE9BQU07QUFBQSxZQUN6QyxVQUFVLENBQUMsQ0FBQztBQUFBLFlBQ1osaUJBQWlCLGdCQUFnQixjQUFjLE1BQU0sYUFBYSxJQUFJO0FBQUEsVUFDeEUsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUNELGVBQU8sTUFBTSxTQUFTLElBQWMsb0JBQW9CO0FBQUEsVUFDdEQ7QUFBQSxRQUNGLENBQUMsSUFBSTtBQUFBLE1BQ1A7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxxQkFBcUI7QUFDbkMsWUFBSSxlQUFlLEtBQUssT0FDcEIsUUFBUSxhQUFhLE9BQ3JCLGFBQWEsYUFBYSxZQUMxQixlQUFlLGFBQWE7QUFDaEMsWUFBSSxZQUFZLE1BQU07QUFDdEIsWUFBSSxpQkFBaUIsYUFBYSxXQUFXLGlCQUFpQjtBQUM5RCxZQUFJLE9BQU8sYUFBYSxXQUFXLFlBQVksSUFBSTtBQUNuRCxZQUFJLFlBQVksZUFBZSxRQUFRLGVBQWUsVUFBVSxXQUFXLFdBQVcsS0FBSyxLQUFLLFdBQVcsaUJBQWlCLFdBQVcsUUFBUSxJQUFJO0FBQ25KLFlBQUk7QUFFSixZQUFJLGNBQWM7QUFDaEIsY0FBSSxZQUFZO0FBQ2QsNkJBQWlCLElBQWMsU0FBUztBQUFBLGNBQ3RDLE9BQU87QUFBQSxjQUNQLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxnQkFDTjtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxjQUNGO0FBQUEsWUFDRixDQUFDO0FBQUEsVUFDSCxPQUFPO0FBQ0wsNkJBQWlCO0FBQUEsVUFDbkI7QUFBQSxRQUNGLE9BQU87QUFDTCxjQUFJLFlBQVk7QUFDZCxnQkFBSSxXQUFXLGlCQUFpQixHQUFHO0FBQ2pDLCtCQUFpQixJQUFjLFNBQVM7QUFBQSxnQkFDdEMsT0FBTztBQUFBLGdCQUNQLFNBQVM7QUFBQSxnQkFDVCxRQUFRO0FBQUEsa0JBQ047QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEsa0JBQ0E7QUFBQSxnQkFDRjtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0gsT0FBTztBQUNMLCtCQUFpQixJQUFjLFNBQVM7QUFBQSxnQkFDdEMsT0FBTztBQUFBLGdCQUNQLFNBQVM7QUFBQSxnQkFDVCxRQUFRO0FBQUEsa0JBQ047QUFBQSxrQkFDQTtBQUFBLGtCQUNBO0FBQUEsZ0JBQ0Y7QUFBQSxjQUNGLENBQUM7QUFBQSxZQUNIO0FBQUEsVUFDRixPQUFPO0FBQ0wsNkJBQWlCLElBQWMsU0FBUztBQUFBLGNBQ3RDLE9BQU87QUFBQSxjQUNQLFNBQVM7QUFBQSxjQUNULFFBQVE7QUFBQSxnQkFDTjtBQUFBLGNBQ0Y7QUFBQSxZQUNGLENBQUM7QUFBQSxVQUNIO0FBQUEsUUFDRjtBQUVBLGVBQU8sSUFBYyxxQkFBcUIsTUFBTSxJQUFjLFdBQVc7QUFBQSxVQUN2RSxXQUFXO0FBQUEsUUFDYixHQUFHLElBQWMsZ0JBQWdCLE1BQU0sY0FBYyxDQUFDLENBQUM7QUFBQSxNQUN6RDtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLGtCQUFrQjtBQUNoQyxZQUFJLFNBQVM7QUFFYixZQUFJLGVBQWUsS0FBSyxPQUNwQixVQUFVLGFBQWEsU0FDdkIsWUFBWSxhQUFhO0FBQzdCLFlBQUksVUFBVSxDQUFDO0FBRWYsWUFBSSxXQUFXO0FBQ2Isa0JBQVEsS0FBSyxJQUFjLDRCQUE0QjtBQUFBLFlBQ3JELEtBQUs7QUFBQSxVQUNQLEdBQUcsS0FBSyxnQkFBZ0IsS0FBSyxDQUFDLENBQUM7QUFBQSxRQUNqQztBQUVBLGdCQUFRLFFBQVEsU0FBVUEsU0FBUSxPQUFPO0FBQ3ZDLGNBQUlXLFNBQVFYLFNBQ1IsUUFBUVcsT0FBTSxPQUNkLFFBQVFBLE9BQU0sT0FDZCxPQUFPQSxPQUFNLE1BQ2IsUUFBUUEsT0FBTSxPQUNkLFdBQVdBLE9BQU0sVUFDakIsV0FBV0EsT0FBTSxVQUNqQixnQkFBZ0JBLE9BQU0sZUFDdEIsV0FBV0EsT0FBTSxVQUNqQixjQUFjQSxPQUFNO0FBRXhCLGNBQUksY0FBYyxTQUFTLE9BQU8sb0JBQW9CLFFBQVE7QUFHOUQsY0FBSVgsUUFBTyxTQUFTO0FBQ2xCLG9CQUFRLEtBQUssSUFBYyxvQkFBb0I7QUFBQSxjQUM3QyxLQUFLLGNBQWMsT0FBTyxLQUFLO0FBQUEsY0FDL0IsT0FBTztBQUFBLGNBQ1A7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0YsR0FBRyxJQUFJLENBQUM7QUFDUjtBQUFBLFVBQ0Y7QUFHQSxjQUFJLENBQUNBLFFBQU8sT0FBTztBQUNqQixnQkFBSSxXQUFXLENBQUM7QUFFaEIsZ0JBQUksT0FBTyxNQUFNLFdBQVcsT0FBTyxhQUFhLFlBQVk7QUFDMUQsa0JBQUksZ0JBQWdCLE9BQU8sMkJBQTJCQSxPQUFNO0FBRTVELHVCQUFTLFdBQVcsQ0FBQyxDQUFDO0FBQ3RCLHVCQUFTLGtCQUFrQixnQkFBZ0IsY0FBYyxNQUFNLGFBQWEsSUFBSTtBQUNoRix1QkFBUyxTQUFTLE9BQU8sb0JBQW9CQSxPQUFNO0FBQ25ELHVCQUFTLFdBQVcsT0FBTyxNQUFNLFFBQVEsWUFBWTtBQUFBLFlBQ3ZEO0FBRUEsb0JBQVEsS0FBSyxJQUFjLG9CQUFvQnZCLFlBQVM7QUFBQSxjQUN0RCxLQUFLLHNCQUFzQixPQUFPLEtBQUs7QUFBQSxjQUN2QyxPQUFPO0FBQUEsY0FDUDtBQUFBLGNBQ0E7QUFBQSxjQUNBLGtCQUFrQixtQkFBbUIsT0FBTyxPQUFPLFNBQVMsV0FBVyxPQUFPLElBQUksR0FBRyxFQUFFLE9BQU8sS0FBSztBQUFBLGNBQ25HO0FBQUEsWUFDRixHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDbkI7QUFBQSxVQUNGO0FBR0EsY0FBSSxVQUFVLENBQUM7QUFFZixjQUFJLE9BQU8sTUFBTSxTQUFTO0FBQ3hCLGdCQUFJLE9BQU8sTUFBTSxRQUFRLFFBQVEsQ0FBQyxDQUFDLE9BQU8sTUFBTSxRQUFRLG9CQUFvQnVCLFFBQU8sWUFBWSxNQUFNO0FBQ25HLGNBQUFBLFVBQVNqQixnQkFBY0EsZ0JBQWMsQ0FBQyxHQUFHaUIsT0FBTSxHQUFHLENBQUMsR0FBRztBQUFBLGdCQUNwRCxVQUFVO0FBQUEsY0FDWixDQUFDO0FBQUEsWUFDSDtBQUVBLGdCQUFJWSxTQUFRWixTQUNSLFlBQVlZLE9BQU07QUFFdEIsZ0JBQUksV0FBVztBQUNiLGtCQUFJLGlCQUFpQixPQUFPLDJCQUEyQlosT0FBTTtBQUU3RCxzQkFBUSxXQUFXLENBQUMsQ0FBQztBQUNyQixzQkFBUSxrQkFBa0IsaUJBQWlCLGNBQWMsTUFBTSxjQUFjLElBQUk7QUFDakYsc0JBQVEsU0FBUyxPQUFPLG9CQUFvQkEsT0FBTTtBQUNsRCxzQkFBUSxXQUFXLE9BQU8sTUFBTSxRQUFRLFlBQVk7QUFBQSxZQUN0RDtBQUFBLFVBQ0Y7QUFFQSxrQkFBUSxLQUFLLElBQWMsb0JBQW9CdkIsWUFBUztBQUFBLFlBQ3RELEtBQUssV0FBVyxPQUFPLE9BQU8sR0FBRyxFQUFFLE9BQU8sS0FBSztBQUFBLFlBQy9DLE9BQU87QUFBQSxZQUNQO0FBQUEsWUFDQTtBQUFBLFlBQ0Esa0JBQWtCLG1CQUFtQixPQUFPLE9BQU8sR0FBRyxFQUFFLE9BQU8sS0FBSztBQUFBLFlBQ3BFO0FBQUEsVUFDRixHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFBQSxRQUNwQixDQUFDO0FBQ0QsZUFBTyxJQUFjLGdCQUFnQixNQUFNLE9BQU87QUFBQSxNQUNwRDtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLG9CQUFvQjtBQUNsQyxZQUFJLGVBQWUsS0FBSyxPQUNwQixRQUFRLGFBQWEsT0FDckIsVUFBVSxhQUFhLFNBQ3ZCLGFBQWEsYUFBYSxZQUMxQixZQUFZLGFBQWE7QUFDN0IsWUFBSSxVQUFVLENBQUM7QUFDZixZQUFJLG1CQUFtQjtBQUV2QixZQUFJLFdBQVc7QUFFYixrQkFBUSxLQUFLLElBQWMsb0JBQW9CO0FBQUEsWUFDN0MsS0FBSztBQUFBLFVBQ1AsR0FBRyxNQUFTLENBQUM7QUFBQSxRQUNmO0FBRUEsZ0JBQVEsUUFBUSxTQUFVdUIsU0FBUTtBQUNoQyxjQUFJLFNBQVMsZ0JBQWdCQSxTQUFRO0FBQUEsWUFDbkM7QUFBQSxZQUNBO0FBQUEsVUFDRixDQUFDO0FBQ0QsY0FBSWEsU0FBUWIsU0FDUixnQkFBZ0JhLE9BQU0sZUFDdEIsUUFBUUEsT0FBTSxPQUNkLFFBQVFBLE9BQU07QUFFbEIsY0FBSSxrQkFBa0IsUUFBUSxrQkFBa0IsVUFBVSxjQUFjLE1BQU07QUFDNUU7QUFBQSxVQUNGO0FBRUEsY0FBSSxRQUFRO0FBQ1Ysb0JBQVEsS0FBSyxJQUFjLG9CQUFvQjtBQUFBLGNBQzdDLEtBQUssVUFBVSxPQUFPLE9BQU8sR0FBRyxFQUFFLE9BQU8sUUFBUSxTQUFTLENBQUM7QUFBQSxjQUMzRDtBQUFBLFlBQ0YsR0FBRyxNQUFNLENBQUM7QUFDViwrQkFBbUI7QUFBQSxVQUNyQixPQUFPO0FBRUwsb0JBQVEsS0FBSyxJQUFjLG9CQUFvQjtBQUFBLGNBQzdDLEtBQUssZ0JBQWdCLE9BQU8sUUFBUSxTQUFTLENBQUM7QUFBQSxjQUM5QztBQUFBLFlBQ0YsR0FBRyxNQUFTLENBQUM7QUFBQSxVQUNmO0FBQUEsUUFDRixDQUFDO0FBQ0QsZUFBTyxRQUFRLFVBQVUsbUJBQW1CLElBQWMsZ0JBQWdCLE1BQU0sT0FBTyxJQUFJO0FBQUEsTUFDN0Y7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxrQkFBa0I7QUFDaEMsWUFBSSxTQUFTO0FBRWIsWUFBSSxLQUFLLE1BQU0sT0FBTztBQUNwQixpQkFBTyxLQUFLLGdCQUFnQixLQUFLLE1BQU0sS0FBSztBQUFBLFFBQzlDO0FBRUEsWUFBSSxRQUFRLEtBQUssTUFBTTtBQUV2QixZQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3RCLGlCQUFPLEtBQUssZ0JBQWdCO0FBQUEsUUFDOUI7QUFFQSxZQUFJLE9BQU8sTUFBTSxJQUFJLFNBQVUsTUFBTSxPQUFPO0FBRTFDLGNBQUksaUJBQWlCLGNBQWMsT0FBTyxLQUFLLEtBQUssT0FBTyxNQUFNLFdBQVcsV0FBVyxJQUFJLE9BQU8sTUFBTSxXQUFXLFlBQVksT0FBTyxNQUFNLFdBQVcsV0FBVyxRQUFRO0FBQzFLLGlCQUFPLE9BQU8sY0FBYyxNQUFNLGNBQWM7QUFBQSxRQUNsRCxDQUFDO0FBQ0QsZUFBTyxJQUFjLGNBQWM7QUFBQSxVQUNqQyxTQUFTLEtBQUs7QUFBQSxRQUNoQixHQUFHLElBQUk7QUFBQSxNQUNUO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsZ0JBQWdCLE9BQU87QUFDckMsWUFBSSxVQUFVLEtBQUssTUFBTSxRQUFRLFVBQVUsS0FBSyxNQUFNLFlBQVksSUFBSTtBQUN0RSxlQUFPLElBQWMsY0FBYyxNQUFNLElBQWMsYUFBYSxNQUFNLElBQWMsaUJBQWlCO0FBQUEsVUFDdkcsT0FBTztBQUFBLFVBQ1A7QUFBQSxVQUNBLGVBQWU7QUFBQSxZQUNiLE9BQU87QUFBQSxVQUNUO0FBQUEsUUFDRixHQUFHLElBQWMsU0FBUztBQUFBLFVBQ3hCLE1BQU07QUFBQSxVQUNOLE9BQU87QUFBQSxRQUNULENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFDbEI7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxrQkFBa0I7QUFDaEMsWUFBSSxlQUFlLEtBQUssT0FDcEIsVUFBVSxhQUFhLFNBQ3ZCLFlBQVksYUFBYSxXQUN6QixpQkFBaUIsYUFBYTtBQUNsQyxZQUFJLFVBQVUsUUFBUSxVQUFVLFlBQVksSUFBSTtBQUNoRCxlQUFPLElBQWMsY0FBYyxNQUFNLElBQWMsYUFBYSxNQUFNLElBQWMsaUJBQWlCO0FBQUEsVUFDdkcsT0FBTztBQUFBLFVBQ1A7QUFBQSxVQUNBLGVBQWU7QUFBQSxZQUNiLE9BQU87QUFBQSxVQUNUO0FBQUEsUUFDRixHQUFHLGNBQWMsQ0FBQyxDQUFDO0FBQUEsTUFDckI7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxjQUFjLE1BQU0sVUFBVTtBQUM1QyxZQUFJLFNBQVM7QUFFYixZQUFJLGVBQWUsS0FBSyxPQUNwQixVQUFVLGFBQWEsU0FDdkIsWUFBWSxhQUFhLFdBQ3pCLGVBQWUsYUFBYSxjQUM1QixhQUFhLGFBQWEsWUFDMUIsWUFBWSxhQUFhLFdBQ3pCLHdCQUF3QixhQUFhLHdCQUNyQyx5QkFBeUIsMEJBQTBCLFNBQVMsQ0FBQyxJQUFJLHVCQUNqRSxlQUFlLGFBQWE7QUFDaEMsWUFBSSxRQUFRLENBQUM7QUFDYixZQUFJLGlCQUFpQixLQUFLLE1BQU07QUFDaEMsWUFBSSxTQUFTLFVBQVUsTUFBTSxjQUFjLEtBQUssT0FBTyxVQUFVLE1BQU0sY0FBYyxJQUFJO0FBQ3pGLFlBQUksV0FBVyxDQUFDLFlBQVksUUFBUSxLQUFLLE1BQU0sYUFBYSxDQUFDLENBQUMsS0FBSyxNQUFNLFVBQVUsS0FBSyxTQUFVLGNBQWM7QUFDOUcsaUJBQU8sVUFBVSxjQUFjLGNBQWMsTUFBTTtBQUFBLFFBQ3JELENBQUM7QUFDRCxZQUFJO0FBRUosWUFBSSxXQUFXO0FBQ2IsZ0JBQU0sS0FBSyxLQUFLLHdCQUF3QixRQUFRLE1BQU0sUUFBUSxDQUFDO0FBQy9ELG1DQUF5QjtBQUFBLFFBQzNCO0FBRUEsWUFBSTtBQUNKLGdCQUFRLFFBQVEsU0FBVWIsU0FBUSxhQUFhO0FBQzdDLGNBQUlBLFFBQU8sU0FBUztBQUNsQixrQkFBTSxLQUFLLE9BQU8sc0JBQXNCLFFBQVEsTUFBTUEsU0FBUSxXQUFXLENBQUM7QUFDMUUsbUNBQXVCO0FBQUEsVUFDekIsV0FBV0EsUUFBTyxPQUFPO0FBQ3ZCLGdCQUFJLGtCQUFrQkE7QUFDdEIsa0JBQU0sS0FBSyxPQUFPLHdCQUF3QixRQUFRLE1BQU1BLFNBQVEsYUFBYSxnQkFBZ0IsVUFBVSxTQUFTLENBQUM7QUFBQSxVQUNuSCxPQUFPO0FBQ0wsa0JBQU0sS0FBSyxPQUFPLHVCQUF1QixRQUFRLE1BQU1BLFNBQVEsV0FBVyxDQUFDO0FBQUEsVUFDN0U7QUFBQSxRQUNGLENBQUM7QUFFRCxZQUFJLHFCQUFxQixZQUFZLFFBQVEsU0FBUyxJQUFJLFFBQVE7QUFDbEUsWUFBSSxpQkFBaUIsUUFBUSxPQUFPLFNBQVVjLE1BQUtkLFNBQVE7QUFDekQsY0FBSTtBQUVKLGlCQUFPQSxZQUFXLFFBQVFBLFlBQVcsV0FBVyxpQkFBaUJBLFFBQU8sbUJBQW1CLFFBQVEsbUJBQW1CLFVBQVUsZUFBZSxPQUFPYyxPQUFNLElBQUlBLE9BQU07QUFBQSxRQUN4SyxHQUFHLENBQUM7QUFDSiw2QkFBcUIscUJBQXFCO0FBRTFDLFlBQUksaUJBQWlCLHVCQUF1QixlQUFlLE1BQU07QUFDakUsWUFBSSxnQkFBZ0IsaUJBQWlCLE9BQU8sT0FBTyxRQUFRLFlBQVksSUFBSTtBQUMzRSxZQUFJLGNBQWMsaUJBQWlCLElBQWMsYUFBYTtBQUFBLFVBQzVELElBQUk7QUFBQSxVQUNKLGVBQWU7QUFBQSxVQUNmO0FBQUEsUUFDRixHQUFHLElBQWMsaUJBQWlCO0FBQUEsVUFDaEMsU0FBUztBQUFBLFVBQ1QsVUFBVTtBQUFBLFFBQ1osR0FBRyx1QkFBdUIsTUFBTSxDQUFDLENBQUMsSUFBSTtBQUN0QyxZQUFJLG1CQUFtQixLQUFLLE1BQU07QUFDbEMsWUFBSSxXQUFXLFlBQVksTUFBTSxnQkFBZ0I7QUFFakQsWUFBSSxNQUFNLElBQWMsYUFBYXJDLFlBQVM7QUFBQSxVQUM1QyxhQUFhO0FBQUEsVUFDYixjQUFjLGdCQUFnQixPQUFPLHlCQUF5QjtBQUFBLFVBQzlELFlBQVk7QUFBQSxVQUNaLFlBQVksY0FBYyxPQUFPLHVCQUF1QjtBQUFBLFVBQ3hEO0FBQUEsUUFDRixHQUFHLFFBQVEsR0FBRyxLQUFLO0FBRW5CLGVBQU8sSUFBYywwQkFBVTtBQUFBLFVBQzdCLEtBQUssT0FBTyxPQUFPLE1BQU07QUFBQSxRQUMzQixHQUFHLEtBQUssV0FBVztBQUFBLE1BQ3JCO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsd0JBQXdCLFFBQVEsTUFBTSxVQUFVO0FBQzlELFlBQUksU0FBUztBQUViLFlBQUksWUFBWSxLQUFLLE1BQU07QUFDM0IsWUFBSSxNQUFNLHFCQUFxQixPQUFPLE1BQU07QUFDNUMsWUFBSSxVQUFVO0FBQ2QsWUFBSSxXQUFXLFVBQVUsY0FBYyxDQUFDLFVBQVUsV0FBVyxJQUFJO0FBQ2pFLFlBQUksUUFBUSxVQUFVLHFCQUFxQixVQUFVLGtCQUFrQixDQUFDLFVBQVUsSUFBSTtBQUV0RixZQUFJLFdBQVcsU0FBUzZCLFVBQVMsT0FBTztBQUN0QyxjQUFJLE1BQU0sT0FBTyxTQUFTO0FBQ3hCLG1CQUFPLGdCQUFnQixDQUFDLEVBQUUsT0FBT25DLG9CQUFtQixPQUFPLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFBQSxVQUN0RixPQUFPO0FBQ0wsZ0JBQUksaUJBQWlCLE9BQU8sTUFBTTtBQUVsQyxtQkFBTyxnQkFBZ0IsT0FBTyxNQUFNLFVBQVUsT0FBTyxTQUFVNEMsWUFBVyxjQUFjO0FBQ3RGLGtCQUFJLFVBQVUsY0FBYyxjQUFjLE1BQU0sUUFBUTtBQUN0RCxnQkFBQUEsV0FBVSxLQUFLLFlBQVk7QUFBQSxjQUM3QjtBQUVBLHFCQUFPQTtBQUFBLFlBQ1QsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUFBLFVBQ1I7QUFBQSxRQUNGO0FBRUEsZUFBTyxJQUFjLHlCQUF5QjtBQUFBLFVBQzVDO0FBQUEsUUFDRixHQUFHLElBQWMsU0FBUztBQUFBLFVBQ3hCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNYLEdBQUcsU0FBVSxlQUFlO0FBQzFCLGlCQUFPLElBQWMsYUFBYTtBQUFBLFlBQ2hDLElBQUksR0FBRyxPQUFPLE9BQU8sT0FBTyxFQUFFLE9BQU8sS0FBSyxXQUFXO0FBQUEsWUFDckQsTUFBTTtBQUFBLFlBQ047QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0EsT0FBTyxTQUFTO0FBQUEsWUFDaEIsY0FBYyxTQUFTO0FBQUEsWUFDdkIsa0JBQWtCLHFCQUFxQixPQUFPLE1BQU07QUFBQSxVQUN0RCxDQUFDO0FBQUEsUUFDSCxDQUFDLENBQUM7QUFBQSxNQUNKO0FBQUEsSUFDRixHQUFHO0FBQUEsTUFDRCxLQUFLO0FBQUEsTUFDTCxPQUFPLFNBQVMsc0JBQXNCLFFBQVEsTUFBTWYsU0FBUSxhQUFhO0FBQ3ZFLFlBQUksU0FBUztBQUViLFlBQUksZ0JBQWdCLFNBQVNnQixlQUFjLFFBQVE7QUFDakQsaUJBQU8sT0FBTyxNQUFNLFVBQVUsV0FBVyxNQUFNLENBQUMsT0FBTyxXQUFXLE9BQU8sUUFBUSxJQUFJO0FBQUEsUUFDdkY7QUFFQSxZQUFJLGdCQUFnQmhCLFFBQU8sUUFBUSxPQUFPLFNBQVUsUUFBUTtBQUMxRCxpQkFBTyxDQUFDLE9BQU8sYUFBYSxPQUFPLFVBQVUsSUFBSTtBQUFBLFFBQ25ELENBQUM7QUFFRCxZQUFJLGNBQWMsU0FBUyxHQUFHO0FBRTVCLGNBQUksaUJBQWlCLGNBQWMsT0FBTyxTQUFVLEdBQUc7QUFDckQsbUJBQU8sRUFBRTtBQUFBLFVBQ1gsQ0FBQztBQUNELDBCQUFnQixlQUFlLE1BQU0sR0FBRyxDQUFDO0FBTXpDLHdCQUFjLEtBQUs7QUFBQSxZQUNqQixNQUFNO0FBQUEsWUFDTixRQUFRLFNBQVNGLFFBQU9tQixPQUFNO0FBQzVCLHFCQUFPLElBQWMsc0JBQXNCO0FBQUEsZ0JBQ3pDLFNBQVNqQixRQUFPO0FBQUEsZ0JBQ2hCO0FBQUEsZ0JBQ0EsTUFBTWlCO0FBQUEsZ0JBQ047QUFBQSxjQUNGLENBQUM7QUFBQSxZQUNIO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUVBLFlBQUksUUFBUSxJQUFjLHFCQUFxQjtBQUFBLFVBQzdDLFNBQVM7QUFBQSxVQUNUO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUM7QUFFRCxZQUFJLE1BQU0sa0JBQWtCLE9BQU8sUUFBUSxHQUFHLEVBQUUsT0FBTyxXQUFXO0FBQ2xFLGVBQU8sSUFBYyxpQkFBaUI7QUFBQSxVQUNwQyxhQUFhO0FBQUEsVUFDYjtBQUFBLFVBQ0EsT0FBTztBQUFBLFVBQ1AsVUFBVTtBQUFBLFVBQ1YsWUFBWTtBQUFBLFFBQ2QsR0FBRyxLQUFLO0FBQUEsTUFDVjtBQUFBLElBQ0YsR0FBRztBQUFBLE1BQ0QsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLHdCQUF3QixRQUFRLE1BQU1qQixTQUFRLGFBQWEsYUFBYTtBQUN0RixZQUFJLFFBQVFBLFFBQU8sT0FDZkYsVUFBU0UsUUFBTyxRQUNoQixXQUFXQSxRQUFPO0FBQ3RCLFlBQUksTUFBTSxnQkFBZ0IsT0FBTyxPQUFPLEdBQUcsRUFBRSxPQUFPLFFBQVEsR0FBRyxFQUFFLE9BQU8sV0FBVztBQUNuRixZQUFJLGtCQUFrQkYsV0FBVSxLQUFLLHVCQUF1QixRQUFRO0FBQ3BFLFlBQUksUUFBUSxJQUFJLE1BQU0sS0FBSztBQUMzQixZQUFJLFVBQVUsZ0JBQWdCLE9BQU8sSUFBSTtBQUN6QyxlQUFPLEtBQUssZUFBZSxNQUFNRSxTQUFRLEtBQUssU0FBUyxXQUFXO0FBQUEsTUFDcEU7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyx1QkFBdUIsUUFBUSxNQUFNQSxTQUFRLGFBQWE7QUFDeEUsWUFBSUYsVUFBU0UsUUFBTztBQUNwQixZQUFJLE1BQU0sb0JBQW9CLE9BQU8sUUFBUSxHQUFHLEVBQUUsT0FBTyxXQUFXO0FBQ3BFLFlBQUksa0JBQWtCRixXQUFVLEtBQUssdUJBQXVCO0FBQzVELFlBQUksVUFBVSxnQkFBZ0IsSUFBSTtBQUNsQyxlQUFPLEtBQUssZUFBZSxNQUFNRSxTQUFRLEtBQUssU0FBUyxLQUFLO0FBQUEsTUFDOUQ7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxlQUFlLE1BQU1BLFNBQVEsS0FBSyxTQUFTLGFBQWE7QUFDdEUsWUFBSWtCLFNBQVFsQixTQUNSLFFBQVFrQixPQUFNLE9BQ2RwQixVQUFTb0IsT0FBTSxRQUNmLFdBQVdBLE9BQU0sVUFDakIsYUFBYUEsT0FBTSxZQUNuQixXQUFXQSxPQUFNLFVBQ2pCLE9BQU9BLE9BQU0sTUFDYixRQUFRQSxPQUFNLE9BQ2QsY0FBY0EsT0FBTSxhQUNwQixXQUFXQSxPQUFNLFVBQ2pCLFNBQVNBLE9BQU0sUUFDZixnQkFBZ0JBLE9BQU0sZUFDdEIsT0FBT3hDLDRCQUF5QndDLFFBQU9oRCxhQUFVO0FBRXJELFlBQUksY0FBYyxTQUFTLEtBQUssb0JBQW9CLFFBQVE7QUFDNUQsWUFBSSxvQkFBb0IsS0FBSyxNQUFNO0FBQ25DLFlBQUksWUFBWSxhQUFhLE1BQU04QixTQUFRLGlCQUFpQjtBQUM1RCxlQUFPLElBQWMsaUJBQWlCdkIsWUFBUztBQUFBLFVBQzdDO0FBQUEsVUFDQSxPQUFPO0FBQUEsVUFDUDtBQUFBLFVBQ0EsVUFBVSxZQUFZLENBQUNxQjtBQUFBLFVBQ3ZCO0FBQUEsVUFDQSxlQUFlZixnQkFBY0EsZ0JBQWMsQ0FBQyxHQUFHLGFBQWEsR0FBRyxDQUFDLEdBQUc7QUFBQSxZQUNqRSxRQUFRLGlCQUFpQixjQUFjLFVBQVUsY0FBYyxPQUFPLElBQUk7QUFBQSxZQUMxRSxRQUFRLGlCQUFpQixjQUFjLFdBQVcsUUFBUSxRQUFRO0FBQUEsVUFDcEUsQ0FBQztBQUFBLFFBQ0gsR0FBRyxXQUFXLElBQUksR0FBRyxPQUFPO0FBQUEsTUFDOUI7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyx5QkFBeUI7QUFDdkMsWUFBSSxXQUFXLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUk7QUFDbkYsWUFBSSxVQUFVLGtCQUFrQixRQUFRO0FBRXhDLFlBQUksQ0FBQyxTQUFTO0FBQ1osZ0JBQU0sSUFBSSxNQUFNLHFCQUFxQixPQUFPLFVBQVUsbUNBQW1DLEVBQUUsT0FBTyxXQUFXLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUFBLFFBQy9IO0FBRUEsZUFBTyxRQUFRO0FBQUEsTUFDakI7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxzQkFBc0I7QUFDcEMsWUFBSSxXQUFXLFVBQVUsU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLFNBQVksVUFBVSxDQUFDLElBQUk7QUFDbkYsWUFBSSxVQUFVLGtCQUFrQixRQUFRO0FBRXhDLFlBQUksQ0FBQyxTQUFTO0FBQ1osZ0JBQU0sSUFBSSxNQUFNLHFCQUFxQixPQUFPLFVBQVUsbUNBQW1DLEVBQUUsT0FBTyxXQUFXLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUFBLFFBQy9IO0FBRUEsZUFBTyxRQUFRO0FBQUEsTUFDakI7QUFBQSxJQUNGLEdBQUc7QUFBQSxNQUNELEtBQUs7QUFBQSxNQUNMLE9BQU8sU0FBUyxzQkFBc0I7QUFDcEMsWUFBSSxTQUFTO0FBRWIsWUFBSSxnQkFBZ0IsS0FBSyxPQUNyQixRQUFRLGNBQWMsT0FDdEIsYUFBYSxjQUFjLFlBQzNCLGVBQWUsY0FBYyxjQUM3QixXQUFXLGNBQWM7QUFFN0IsWUFBSSxDQUFDLFNBQVMsY0FBYyxXQUFXLGlCQUFpQixHQUFHO0FBQ3pELGNBQUksQ0FBQyxVQUFVO0FBQ2Isa0JBQU0sSUFBSSxNQUFNLHlKQUF5SjtBQUFBLFVBQzNLO0FBRUEsaUJBQU8sSUFBYyxTQUFTO0FBQUEsWUFDNUIsT0FBTztBQUFBLFlBQ1AsU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLGNBQ047QUFBQSxZQUNGO0FBQUEsVUFDRixHQUFHLFNBQVUsaUJBQWlCO0FBQzVCLG1CQUFPLElBQWMsZUFBZTtBQUFBLGNBQ2xDO0FBQUEsY0FDQSxrQkFBa0IsT0FBTyxpQkFBaUIsS0FBSyxNQUFNO0FBQUEsY0FDckQsY0FBYyxPQUFPLGFBQWEsS0FBSyxNQUFNO0FBQUEsY0FDN0MsaUJBQWlCLE9BQU87QUFBQSxjQUN4QixjQUFjO0FBQUEsWUFDaEIsQ0FBQztBQUFBLFVBQ0gsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDLEdBQUcsQ0FBQztBQUFBLE1BQ0gsS0FBSztBQUFBLE1BQ0wsT0FBTyxTQUFTLHlCQUF5QixXQUFXLFdBQVc7QUFDN0QsWUFBSSxDQUFDLFVBQVUsV0FBVztBQUV4QixpQkFBTztBQUFBLFlBQ0wsV0FBVyxDQUFDO0FBQUEsVUFDZDtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFNBQVMsVUFBVTtBQUN2QixZQUFJLFlBQVksVUFBVSxVQUFVLE9BQU8sU0FBVSxjQUFjO0FBQ2pFLGlCQUFPLFVBQVUsTUFBTSxVQUFVLFNBQVUsTUFBTTtBQUMvQyxtQkFBTyxVQUFVLE1BQU0sTUFBTSxNQUFNLFVBQVUsY0FBYyxNQUFNO0FBQUEsVUFDbkUsQ0FBQyxNQUFNO0FBQUEsUUFDVCxDQUFDO0FBRUQsWUFBSSxVQUFVLFdBQVcsVUFBVSxVQUFVLFFBQVE7QUFDbkQsY0FBSSxVQUFVLFVBQVUsbUJBQW1CO0FBQ3pDLHNCQUFVLFVBQVUsa0JBQWtCLFNBQVM7QUFBQSxVQUNqRDtBQUVBLGlCQUFPO0FBQUEsWUFDTDtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFBQTtBQUFBLElBRUYsQ0FBQyxDQUFDO0FBRUYsV0FBT3FCO0FBQUEsRUFDVCxFQUFFLHlCQUFTO0FBRVgsRUFBQXBCLGtCQUFnQixlQUFlLGdCQUFnQjtBQUFBLElBQzdDLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLGdCQUFnQixJQUFjLFNBQVM7QUFBQSxNQUNyQyxPQUFPO0FBQUEsTUFDUCxTQUFTO0FBQUEsSUFDWCxDQUFDO0FBQUEsRUFDSCxDQUFDO0FBRUQsZ0JBQWMsWUFBWTtBQUFBLElBQ3hCLFdBQVcsb0JBQUFtQyxRQUFVO0FBQUEsSUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLElBQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUzVCLFFBQVEsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE9BQU8sWUFBWSxvQkFBQUEsUUFBVSxPQUFPLFlBQVksb0JBQUFBLFFBQVUsS0FBSyxVQUFVLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVNqSCx3QkFBd0Isb0JBQUFBLFFBQVUsTUFBTSxDQUFDLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVMxQyxPQUFPLG9CQUFBQSxRQUFVLFFBQVEsb0JBQUFBLFFBQVUsSUFBSSxVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTakQsV0FBVyxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsSUFBSSxZQUFZLG9CQUFBQSxRQUFVLEtBQUssVUFBVSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTcEYsU0FBUyxvQkFBQUEsUUFBVSxRQUFRLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTTlELE9BQU8sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLElBQUksWUFBWSxvQkFBQUEsUUFBVSxJQUFJLFVBQVUsQ0FBQyxFQUFFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQU1qRixNQUFNLG9CQUFBQSxRQUFVLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUtyQixhQUFhLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLdkIsVUFBVSxvQkFBQUEsUUFBVSxNQUFNLENBQUMsUUFBUSxVQUFVLFVBQVUsV0FBVyxNQUFNLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUt6RSxPQUFPLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLakIsVUFBVSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsS0FBSyxZQUFZLG9CQUFBQSxRQUFVLEtBQUssVUFBVSxDQUFDO0FBQUEsTUFDcEYsWUFBWSxvQkFBQUEsUUFBVTtBQUFBLE1BQ3RCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUtwQixPQUFPLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLFNBQVMsUUFBUSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLbEQsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3hCLGVBQWUsb0JBQUFBLFFBQVUsTUFBTTtBQUFBLFFBQzdCLFFBQVEsb0JBQUFBLFFBQVU7QUFBQSxNQUNwQixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLRCxRQUFRLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLbEIsUUFBUSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsT0FBTyxZQUFZLG9CQUFBQSxRQUFVLFFBQVEsWUFBWSxvQkFBQUEsUUFBVSxLQUFLLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS2xILFVBQVUsb0JBQUFBLFFBQVU7QUFBQSxNQUNwQixXQUFXLG9CQUFBQSxRQUFVO0FBQUEsTUFDckIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3hCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBLElBQzlCLENBQUMsRUFBRSxZQUFZLG9CQUFBQSxRQUFVLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUk3QixRQUFRLG9CQUFBQSxRQUFVLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUt2QixNQUFNLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLaEIsYUFBYSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS3ZCLFVBQVUsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUtwQixPQUFPLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLakIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3hCLFlBQVksb0JBQUFBLFFBQVU7QUFBQSxNQUN0QixPQUFPLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLFNBQVMsUUFBUSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLbEQsVUFBVSxvQkFBQUEsUUFBVTtBQUFBLE1BQ3BCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQSxNQUNyQixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsTUFDeEIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUEsSUFDOUIsQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSTdCLFNBQVMsb0JBQUFBLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSTlELE1BQU0sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLN0YsT0FBTyxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxXQUFXLFVBQVUsUUFBUSxTQUFTLFdBQVcsU0FBUyxDQUFDLEVBQUUsWUFBWSxvQkFBQUEsUUFBVSxLQUFLLFVBQVUsQ0FBQyxHQUFHLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxNQUFNLENBQUMsV0FBVyxVQUFVLFdBQVcsV0FBVyxVQUFVLFNBQVMsTUFBTSxDQUFDLEVBQUUsWUFBWSxvQkFBQUEsUUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVM3VCxNQUFNLG9CQUFBQSxRQUFVLFVBQVUsQ0FBQyxvQkFBQUEsUUFBVSxLQUFLLFlBQVksb0JBQUFBLFFBQVUsS0FBSyxVQUFVLENBQUMsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU2xGLGFBQWEsb0JBQUFBLFFBQVUsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUzlCLFNBQVMsb0JBQUFBLFFBQVU7QUFBQSxRQUNuQixNQUFNLG9CQUFBQSxRQUFVO0FBQUEsUUFDaEIsUUFBUSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBU2xCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVNyQixTQUFTLG9CQUFBQSxRQUFVO0FBQUEsUUFDbkIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLFFBQ3JCLGtCQUFrQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSzVCLE1BQU0sb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxpQkFBaUIsY0FBYyx1QkFBdUIsWUFBWSxhQUFhLFNBQVMsZ0JBQWdCLGNBQWMsVUFBVSxZQUFZLGdCQUFnQixRQUFRLGFBQWEsYUFBYSxjQUFjLFdBQVcsY0FBYyxZQUFZLFlBQVksZ0JBQWdCLFVBQVUsUUFBUSxhQUFhLFFBQVEsbUJBQW1CLGlCQUFpQixVQUFVLGNBQWMsU0FBUyxTQUFTLE9BQU8sWUFBWSxZQUFZLGFBQWEsWUFBWSxTQUFTLHVCQUF1QixTQUFTLHFCQUFxQixTQUFTLGdCQUFnQixlQUFlLGNBQWMsV0FBVyxXQUFXLFNBQVMsV0FBVyxXQUFXLGNBQWMsYUFBYSxtQkFBbUIsd0JBQXdCLG1CQUFtQixvQkFBb0Isc0JBQXNCLG9CQUFvQixRQUFRLGlCQUFpQixxQkFBcUIsd0JBQXdCLHVCQUF1Qix5QkFBeUIsU0FBUyw4QkFBOEIsd0JBQXdCLGNBQWMsWUFBWSxPQUFPLGdCQUFnQixrQkFBa0IsWUFBWSxXQUFXLGVBQWUsZUFBZSxZQUFZLGdCQUFnQixpQkFBaUIsYUFBYSxPQUFPLG1CQUFtQixvQkFBb0IsWUFBWSxxQkFBcUIsbUJBQW1CLG9CQUFvQixjQUFjLG1CQUFtQixtQkFBbUIsaUJBQWlCLDhCQUE4Qiw0QkFBNEIsaUJBQWlCLGdCQUFnQix5QkFBeUIseUJBQXlCLHVCQUF1Qix5QkFBeUIsd0JBQXdCLHNCQUFzQixjQUFjLHFCQUFxQiw0QkFBNEIsNkJBQTZCLHlCQUF5QiwwQkFBMEIsY0FBYyxnQkFBZ0IsZUFBZSxtQkFBbUIsY0FBYyx1QkFBdUIsU0FBUyxTQUFTLFVBQVUsT0FBTyxVQUFVLFFBQVEsVUFBVSxjQUFjLGdCQUFnQixPQUFPLGFBQWEsYUFBYSxlQUFlLFdBQVcsZUFBZSxVQUFVLFFBQVEsWUFBWSxRQUFRLGVBQWUsZ0JBQWdCLHFCQUFxQixjQUFjLGFBQWEsaUJBQWlCLGNBQWMsa0JBQWtCLFlBQVksUUFBUSxVQUFVLFdBQVcsU0FBUyxRQUFRLGtCQUFrQixZQUFZLFFBQVEsV0FBVyxTQUFTLGdCQUFnQixXQUFXLFFBQVEsUUFBUSxhQUFhLFNBQVMsZ0JBQWdCLGNBQWMsYUFBYSxjQUFjLHNCQUFzQixnQkFBZ0IsYUFBYSxtQkFBbUIsa0JBQWtCLGdCQUFnQixpQkFBaUIsZUFBZSxXQUFXLFVBQVUsTUFBTSxZQUFZLFlBQVksZUFBZSxjQUFjLGVBQWUsWUFBWSxrQkFBa0IsaUJBQWlCLFVBQVUsV0FBVyxhQUFhLGNBQWMsY0FBYyxhQUFhLFFBQVEsUUFBUSxXQUFXLFFBQVEsWUFBWSxXQUFXLGVBQWUsaUJBQWlCLGNBQWMsaUJBQWlCLGFBQWEsaUJBQWlCLGFBQWEseUJBQXlCLFlBQVksYUFBYSx1QkFBdUIsWUFBWSxtQkFBbUIsaUJBQWlCLGNBQWMsa0JBQWtCLGVBQWUsb0JBQW9CLHFCQUFxQix3QkFBd0IsWUFBWSxXQUFXLGVBQWUsY0FBYyxhQUFhLGNBQWMsZUFBZSxlQUFlLFdBQVcsZUFBZSxhQUFhLGNBQWMsa0JBQWtCLGVBQWUsZ0JBQWdCLFlBQVksaUJBQWlCLGVBQWUsZUFBZSxhQUFhLGFBQWEscUJBQXFCLGVBQWUsV0FBVyxnQkFBZ0Isa0JBQWtCLGdCQUFnQixhQUFhLGdCQUFnQixrQkFBa0IsY0FBYyxhQUFhLGNBQWMsZUFBZSxlQUFlLHVCQUF1QixXQUFXLGtCQUFrQixjQUFjLGlCQUFpQixrQkFBa0IsaUJBQWlCLHNCQUFzQixVQUFVLDBCQUEwQixvQkFBb0IsbUJBQW1CLGlCQUFpQixhQUFhLFVBQVUsUUFBUSxZQUFZLFlBQVksYUFBYSxVQUFVLFNBQVMsaUJBQWlCLGNBQWMsWUFBWSxTQUFTLGlCQUFpQix1QkFBdUIsVUFBVSxpQkFBaUIsUUFBUSxhQUFhLFVBQVUsUUFBUSxlQUFlLFVBQVUsV0FBVyxVQUFVLHVCQUF1QixXQUFXLGlCQUFpQixjQUFjLGVBQWUsYUFBYSxXQUFXLFNBQVMsV0FBVyxVQUFVLFdBQVcsT0FBTyxhQUFhLGVBQWUsUUFBUSxjQUFjLFFBQVEsZ0JBQWdCLHNCQUFzQixVQUFVLFFBQVEsb0JBQW9CLFNBQVMscUJBQXFCLFdBQVcsaUJBQWlCLFlBQVksZ0JBQWdCLGFBQWEsUUFBUSxtQkFBbUIsU0FBUyxVQUFVLHFCQUFxQix3QkFBd0IsZUFBZSxrQkFBa0IsMEJBQTBCLDBCQUEwQixpQkFBaUIsU0FBUyxTQUFTLGFBQWEsWUFBWSxZQUFZLGFBQWEsVUFBVSxZQUFZLGFBQWEsVUFBVSxhQUFhLGtCQUFrQixjQUFjLG1CQUFtQixrQkFBa0IsbUJBQW1CLGlCQUFpQixrQkFBa0IsU0FBUyxRQUFRLGNBQWMsYUFBYSxXQUFXLFVBQVUsYUFBYSxPQUFPLGVBQWUsV0FBVyx1QkFBdUIsd0JBQXdCLHNCQUFzQixtQkFBbUIsT0FBTyxRQUFRLGVBQWUsWUFBWSxlQUFlLGVBQWUsY0FBYyxZQUFZLFNBQVMsVUFBVSxVQUFVLHVCQUF1QixhQUFhLFFBQVEsY0FBYyxTQUFTLGlCQUFpQixVQUFVLGVBQWUsV0FBVyxrQkFBa0Isb0JBQW9CLDJCQUEyQixrQkFBa0IseUJBQXlCLFlBQVksV0FBVyxXQUFXLG9CQUFvQixnQkFBZ0IsYUFBYSxVQUFVLFlBQVksZUFBZSxXQUFXLGVBQWUsV0FBVyxvQkFBb0IsZ0JBQWdCLGNBQWMsWUFBWSxvQkFBb0Isc0JBQXNCLFVBQVUsY0FBYyxtQkFBbUIsY0FBYyxlQUFlLGdCQUFnQixjQUFjLDRCQUE0QixpQkFBaUIsYUFBYSxvQkFBb0IsZ0JBQWdCLGFBQWEsbUJBQW1CLGNBQWMsa0JBQWtCLGNBQWMsYUFBYSxrQkFBa0IsaUJBQWlCLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGFBQWEsWUFBWSxnQkFBZ0IsZUFBZSxzQkFBc0Isb0JBQW9CLGVBQWUsa0JBQWtCLGVBQWUsYUFBYSxlQUFlLGVBQWUsaUJBQWlCLGdCQUFnQixrQkFBa0IsbUJBQW1CLGlCQUFpQixjQUFjLG9CQUFvQixxQkFBcUIsYUFBYSxtQkFBbUIsY0FBYyxlQUFlLGVBQWUsZUFBZSxZQUFZLGFBQWEsbUJBQW1CLGVBQWUsQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsS0FBSyxVQUFVLENBQUM7QUFBQSxNQUM3a04sQ0FBQyxFQUFFLFlBQVksb0JBQUFBLFFBQVUsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBSTdCLFFBQVEsb0JBQUFBLFFBQVUsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBLFFBS3ZCLFdBQVcsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtyQixTQUFTLG9CQUFBQSxRQUFVO0FBQUEsUUFDbkIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLE1BQ3ZCLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUs1QixNQUFNLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLaEIsYUFBYSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS3ZCLE9BQU8sb0JBQUFBLFFBQVU7QUFBQSxJQUNuQixDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUzFCLE9BQU8sb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVNqQixjQUFjLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTeEIsV0FBVyxvQkFBQUEsUUFBVTtBQUFBLElBQ3JCLFlBQVksb0JBQUFBLFFBQVU7QUFBQSxJQUN0QixjQUFjLG9CQUFBQSxRQUFVO0FBQUEsSUFDeEIsY0FBYyxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU3hCLFNBQVMsb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVNuQixnQkFBZ0Isb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUsxQixVQUFVLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFLcEIsWUFBWSxvQkFBQUEsUUFBVSxVQUFVLENBQUMsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLE1BQVMsQ0FBQyxHQUFHLG9CQUFBQSxRQUFVLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUk3RSxXQUFXLG9CQUFBQSxRQUFVLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BTTVCLFVBQVUsb0JBQUFBLFFBQVUsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSzNCLGdCQUFnQixvQkFBQUEsUUFBVSxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQU1qQyxpQkFBaUIsb0JBQUFBLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxPQUFPLFVBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUs5RCxvQkFBb0Isb0JBQUFBLFFBQVU7QUFBQSxJQUNoQyxDQUFDLENBQUMsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU0gsWUFBWSxvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU3RCLFVBQVUsb0JBQUFBLFFBQVUsVUFBVSxDQUFDLG9CQUFBQSxRQUFVLElBQUksWUFBWSxvQkFBQUEsUUFBVSxLQUFLLFVBQVUsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBU25GLFdBQVcsb0JBQUFBLFFBQVUsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSXpCLG1CQUFtQixvQkFBQUEsUUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSzdCLFlBQVksb0JBQUFBLFFBQVU7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUt0QixtQkFBbUIsb0JBQUFBLFFBQVU7QUFBQSxNQUM3QixpQkFBaUIsb0JBQUFBLFFBQVUsUUFBUSxvQkFBQUEsUUFBVSxJQUFJLFVBQVU7QUFBQSxJQUM3RCxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTRCxTQUFTLG9CQUFBQSxRQUFVLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUl2QixNQUFNLG9CQUFBQSxRQUFVLE1BQU07QUFBQSxRQUNwQixPQUFPLG9CQUFBQSxRQUFVLElBQUk7QUFBQSxRQUNyQixXQUFXLG9CQUFBQSxRQUFVLE1BQU0sQ0FBQyxPQUFPLE1BQU0sQ0FBQyxFQUFFO0FBQUEsTUFDOUMsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS0Qsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLNUIsa0JBQWtCLG9CQUFBQSxRQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLNUIsVUFBVSxvQkFBQUEsUUFBVTtBQUFBLElBQ3RCLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVNELGFBQWEsb0JBQUFBLFFBQVUsTUFBTSxDQUFDLFNBQVMsTUFBTSxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFTOUMsVUFBVSxvQkFBQUEsUUFBVTtBQUFBLEVBQ3RCOzs7QU8xaURPLE1BQUksZUFBNEIsMkJBQVk7QUFDakQsYUFBU0MsZ0JBQWU7QUFDdEIsV0FBSyxZQUFZLENBQUM7QUFBQSxJQUNwQjtBQUVBLFFBQUksU0FBU0EsY0FBYTtBQUUxQixXQUFPLFlBQVksU0FBUyxVQUFVLFVBQVU7QUFDOUMsVUFBSSxRQUFRO0FBRVosVUFBSSxXQUFXLFlBQVksV0FBWTtBQUNyQyxlQUFPO0FBQUEsTUFDVDtBQUVBLFdBQUssVUFBVSxLQUFLLFFBQVE7QUFDNUIsV0FBSyxZQUFZO0FBQ2pCLGFBQU8sV0FBWTtBQUNqQixjQUFNLFlBQVksTUFBTSxVQUFVLE9BQU8sU0FBVUMsSUFBRztBQUNwRCxpQkFBT0EsT0FBTTtBQUFBLFFBQ2YsQ0FBQztBQUVELGNBQU0sY0FBYztBQUFBLE1BQ3RCO0FBQUEsSUFDRjtBQUVBLFdBQU8sZUFBZSxTQUFTLGVBQWU7QUFDNUMsYUFBTyxLQUFLLFVBQVUsU0FBUztBQUFBLElBQ2pDO0FBRUEsV0FBTyxjQUFjLFNBQVMsY0FBYztBQUFBLElBQzVDO0FBRUEsV0FBTyxnQkFBZ0IsU0FBUyxnQkFBZ0I7QUFBQSxJQUNoRDtBQUVBLFdBQU9EO0FBQUEsRUFDVCxFQUFFOzs7QUNqQ0ssTUFBSSxXQUFXLE9BQU8sV0FBVztBQUNqQyxXQUFTRSxRQUFPO0FBQ3JCLFdBQU87QUFBQSxFQUNUO0FBQ08sV0FBUyxpQkFBaUIsU0FBUyxPQUFPO0FBQy9DLFdBQU8sT0FBTyxZQUFZLGFBQWEsUUFBUSxLQUFLLElBQUk7QUFBQSxFQUMxRDtBQUNPLFdBQVMsZUFBZSxPQUFPO0FBQ3BDLFdBQU8sT0FBTyxVQUFVLFlBQVksU0FBUyxLQUFLLFVBQVU7QUFBQSxFQUM5RDtBQUNPLFdBQVMsb0JBQW9CLE9BQU87QUFDekMsV0FBTyxNQUFNLFFBQVEsS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLO0FBQUEsRUFDOUM7QUFXTyxXQUFTLGVBQWUsV0FBVyxXQUFXO0FBQ25ELFdBQU8sS0FBSyxJQUFJLGFBQWEsYUFBYSxLQUFLLEtBQUssSUFBSSxHQUFHLENBQUM7QUFBQSxFQUM5RDtBQUNPLFdBQVMsZUFBZSxNQUFNLE1BQU0sTUFBTTtBQUMvQyxRQUFJLENBQUMsV0FBVyxJQUFJLEdBQUc7QUFDckIsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzlCLGFBQU8sU0FBUyxDQUFDLEdBQUcsTUFBTTtBQUFBLFFBQ3hCLFVBQVU7QUFBQSxRQUNWLFNBQVM7QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxTQUFTLENBQUMsR0FBRyxNQUFNO0FBQUEsTUFDeEIsVUFBVTtBQUFBLElBQ1osQ0FBQztBQUFBLEVBQ0g7QUF1Qk8sV0FBUyxnQkFBZ0IsTUFBTSxNQUFNLE1BQU07QUFDaEQsV0FBTyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU07QUFBQSxNQUM1QyxVQUFVO0FBQUEsSUFDWixDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSTtBQUFBLEVBQy9CO0FBTU8sV0FBUyxxQkFBcUIsUUFBUSxVQUFVO0FBQ3JELFFBQUksV0FBVyxRQUFRLGFBQWEsUUFBUSxVQUFVLFFBQVEsWUFBWSxNQUFNO0FBQzlFLGFBQU87QUFBQSxJQUNULFdBQVcsV0FBVyxTQUFTLGFBQWEsT0FBTztBQUNqRCxhQUFPO0FBQUEsSUFDVCxPQUFPO0FBR0wsVUFBSSxXQUFXLFVBQVUsT0FBTyxTQUFTLENBQUM7QUFDMUMsYUFBTyxXQUFXLFdBQVc7QUFBQSxJQUMvQjtBQUFBLEVBQ0Y7QUFDTyxXQUFTLFdBQVcsU0FBUyxPQUFPO0FBQ3pDLFFBQUksU0FBUyxRQUFRLFFBQ2pCLFFBQVEsUUFBUSxPQUNoQixXQUFXLFFBQVEsVUFDbkIsV0FBVyxRQUFRLFVBQ25CLFlBQVksUUFBUSxXQUNwQixXQUFXLFFBQVEsVUFDbkIsUUFBUSxRQUFRO0FBRXBCLFFBQUksV0FBVyxRQUFRLEdBQUc7QUFDeEIsVUFBSSxPQUFPO0FBQ1QsWUFBSSxNQUFNLGNBQWMsc0JBQXNCLFVBQVUsTUFBTSxPQUFPLEdBQUc7QUFDdEUsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRixXQUFXLENBQUMsZ0JBQWdCLE1BQU0sVUFBVSxRQUFRLEdBQUc7QUFDckQsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsUUFBSSxvQkFBb0IscUJBQXFCLFFBQVEsUUFBUTtBQUU3RCxRQUFJLHNCQUFzQixRQUFRO0FBQ2hDLGFBQU87QUFBQSxJQUNULFdBQVcsc0JBQXNCLE9BQU87QUFDdEMsVUFBSSxXQUFXLE1BQU0sU0FBUztBQUU5QixVQUFJLHNCQUFzQixZQUFZLENBQUMsVUFBVTtBQUMvQyxlQUFPO0FBQUEsTUFDVDtBQUVBLFVBQUksc0JBQXNCLGNBQWMsVUFBVTtBQUNoRCxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFQSxRQUFJLE9BQU8sVUFBVSxhQUFhLE1BQU0sUUFBUSxNQUFNLE9BQU87QUFDM0QsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLE9BQU8sYUFBYSxhQUFhLE1BQU0sV0FBVyxNQUFNLFVBQVU7QUFDcEUsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLGFBQWEsQ0FBQyxVQUFVLEtBQUssR0FBRztBQUNsQyxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU87QUFBQSxFQUNUO0FBQ08sV0FBUyxjQUFjLFNBQVMsVUFBVTtBQUMvQyxRQUFJLFFBQVEsUUFBUSxPQUNoQixXQUFXLFFBQVEsVUFDbkIsWUFBWSxRQUFRLFdBQ3BCLGNBQWMsUUFBUTtBQUUxQixRQUFJLFdBQVcsV0FBVyxHQUFHO0FBQzNCLFVBQUksQ0FBQyxTQUFTLFFBQVEsYUFBYTtBQUNqQyxlQUFPO0FBQUEsTUFDVDtBQUVBLFVBQUksT0FBTztBQUNULFlBQUksYUFBYSxTQUFTLFFBQVEsV0FBVyxNQUFNLGFBQWEsV0FBVyxHQUFHO0FBQzVFLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0YsV0FBVyxDQUFDLGdCQUFnQixTQUFTLFFBQVEsYUFBYSxXQUFXLEdBQUc7QUFDdEUsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsUUFBSSxPQUFPLGFBQWEsYUFBYSxTQUFTLE1BQU0sV0FBVyxjQUFjLFVBQVU7QUFDckYsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLGFBQWEsQ0FBQyxVQUFVLFFBQVEsR0FBRztBQUNyQyxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU87QUFBQSxFQUNUO0FBQ08sV0FBUyxzQkFBc0IsVUFBVSxTQUFTO0FBQ3ZELFFBQUksVUFBVSxXQUFXLE9BQU8sU0FBUyxRQUFRLG1CQUFtQjtBQUNwRSxXQUFPLE9BQU8sUUFBUTtBQUFBLEVBQ3hCO0FBS08sV0FBUyxhQUFhLFVBQVU7QUFDckMsUUFBSUMsV0FBVSxvQkFBb0IsUUFBUTtBQUMxQyxXQUFPLGdCQUFnQkEsUUFBTztBQUFBLEVBQ2hDO0FBS08sV0FBUyxnQkFBZ0IsT0FBTztBQUNyQyxXQUFPLEtBQUssVUFBVSxPQUFPLFNBQVUsR0FBRyxLQUFLO0FBQzdDLGFBQU9DLGVBQWMsR0FBRyxJQUFJLE9BQU8sS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sU0FBVSxRQUFRLEtBQUs7QUFDaEYsZUFBTyxHQUFHLElBQUksSUFBSSxHQUFHO0FBQ3JCLGVBQU87QUFBQSxNQUNULEdBQUcsQ0FBQyxDQUFDLElBQUk7QUFBQSxJQUNYLENBQUM7QUFBQSxFQUNIO0FBS08sV0FBUyxnQkFBZ0IsR0FBR0MsSUFBRztBQUNwQyxXQUFPLGlCQUFpQixvQkFBb0IsQ0FBQyxHQUFHLG9CQUFvQkEsRUFBQyxDQUFDO0FBQUEsRUFDeEU7QUFLTyxXQUFTLGlCQUFpQixHQUFHQSxJQUFHO0FBQ3JDLFFBQUksTUFBTUEsSUFBRztBQUNYLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxPQUFPLE1BQU0sT0FBT0EsSUFBRztBQUN6QixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksS0FBS0EsTUFBSyxPQUFPLE1BQU0sWUFBWSxPQUFPQSxPQUFNLFVBQVU7QUFDNUQsYUFBTyxDQUFDLE9BQU8sS0FBS0EsRUFBQyxFQUFFLEtBQUssU0FBVSxLQUFLO0FBQ3pDLGVBQU8sQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEdBQUdBLEdBQUUsR0FBRyxDQUFDO0FBQUEsTUFDekMsQ0FBQztBQUFBLElBQ0g7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQU9PLFdBQVMsaUJBQWlCLEdBQUdBLElBQUc7QUFDckMsUUFBSSxNQUFNQSxJQUFHO0FBQ1gsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLFFBQVEsTUFBTSxRQUFRLENBQUMsS0FBSyxNQUFNLFFBQVFBLEVBQUM7QUFFL0MsUUFBSSxTQUFTRCxlQUFjLENBQUMsS0FBS0EsZUFBY0MsRUFBQyxHQUFHO0FBQ2pELFVBQUksUUFBUSxRQUFRLEVBQUUsU0FBUyxPQUFPLEtBQUssQ0FBQyxFQUFFO0FBQzlDLFVBQUksU0FBUyxRQUFRQSxLQUFJLE9BQU8sS0FBS0EsRUFBQztBQUN0QyxVQUFJLFFBQVEsT0FBTztBQUNuQixVQUFJQyxRQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDekIsVUFBSSxhQUFhO0FBRWpCLGVBQVMsSUFBSSxHQUFHLElBQUksT0FBTyxLQUFLO0FBQzlCLFlBQUksTUFBTSxRQUFRLElBQUksT0FBTyxDQUFDO0FBQzlCLFFBQUFBLE1BQUssR0FBRyxJQUFJLGlCQUFpQixFQUFFLEdBQUcsR0FBR0QsR0FBRSxHQUFHLENBQUM7QUFFM0MsWUFBSUMsTUFBSyxHQUFHLE1BQU0sRUFBRSxHQUFHLEdBQUc7QUFDeEI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGFBQU8sVUFBVSxTQUFTLGVBQWUsUUFBUSxJQUFJQTtBQUFBLElBQ3ZEO0FBRUEsV0FBT0Q7QUFBQSxFQUNUO0FBS08sV0FBUyxvQkFBb0IsR0FBR0EsSUFBRztBQUN4QyxRQUFJLEtBQUssQ0FBQ0EsTUFBS0EsTUFBSyxDQUFDLEdBQUc7QUFDdEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxhQUFTLE9BQU8sR0FBRztBQUNqQixVQUFJLEVBQUUsR0FBRyxNQUFNQSxHQUFFLEdBQUcsR0FBRztBQUNyQixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVPLFdBQVNELGVBQWMsR0FBRztBQUMvQixRQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRztBQUMxQixhQUFPO0FBQUEsSUFDVDtBQUdBLFFBQUksT0FBTyxFQUFFO0FBRWIsUUFBSSxPQUFPLFNBQVMsYUFBYTtBQUMvQixhQUFPO0FBQUEsSUFDVDtBQUdBLFFBQUksT0FBTyxLQUFLO0FBRWhCLFFBQUksQ0FBQyxtQkFBbUIsSUFBSSxHQUFHO0FBQzdCLGFBQU87QUFBQSxJQUNUO0FBR0EsUUFBSSxDQUFDLEtBQUssZUFBZSxlQUFlLEdBQUc7QUFDekMsYUFBTztBQUFBLElBQ1Q7QUFHQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsbUJBQW1CLEdBQUc7QUFDN0IsV0FBTyxPQUFPLFVBQVUsU0FBUyxLQUFLLENBQUMsTUFBTTtBQUFBLEVBQy9DO0FBRU8sV0FBUyxXQUFXLE9BQU87QUFDaEMsV0FBTyxPQUFPLFVBQVUsWUFBWSxNQUFNLFFBQVEsS0FBSztBQUFBLEVBQ3pEO0FBSU8sV0FBUyxNQUFNLFNBQVM7QUFDN0IsV0FBTyxJQUFJLFFBQVEsU0FBVSxTQUFTO0FBQ3BDLGlCQUFXLFNBQVMsT0FBTztBQUFBLElBQzdCLENBQUM7QUFBQSxFQUNIO0FBTU8sV0FBUyxrQkFBa0IsVUFBVTtBQUMxQyxZQUFRLFFBQVEsRUFBRSxLQUFLLFFBQVEsRUFBRSxNQUFNLFNBQVUsT0FBTztBQUN0RCxhQUFPLFdBQVcsV0FBWTtBQUM1QixjQUFNO0FBQUEsTUFDUixDQUFDO0FBQUEsSUFDSCxDQUFDO0FBQUEsRUFDSDtBQUNPLFdBQVMscUJBQXFCO0FBQ25DLFFBQUksT0FBTyxvQkFBb0IsWUFBWTtBQUN6QyxhQUFPLElBQUksZ0JBQWdCO0FBQUEsSUFDN0I7QUFBQSxFQUNGOzs7QUN4VU8sTUFBSSxlQUE0Qix5QkFBVSxlQUFlO0FBQzlELG1CQUFlRyxlQUFjLGFBQWE7QUFFMUMsYUFBU0EsZ0JBQWU7QUFDdEIsVUFBSTtBQUVKLGNBQVEsY0FBYyxLQUFLLElBQUksS0FBSztBQUVwQyxZQUFNLFFBQVEsU0FBVUMsVUFBUztBQUMvQixZQUFJO0FBRUosWUFBSSxDQUFDLGNBQWMsVUFBVSxXQUFXLE9BQU8sU0FBUyxRQUFRLG1CQUFtQjtBQUNqRixjQUFJLFdBQVcsU0FBU0MsWUFBVztBQUNqQyxtQkFBT0QsU0FBUTtBQUFBLFVBQ2pCO0FBR0EsaUJBQU8saUJBQWlCLG9CQUFvQixVQUFVLEtBQUs7QUFDM0QsaUJBQU8saUJBQWlCLFNBQVMsVUFBVSxLQUFLO0FBQ2hELGlCQUFPLFdBQVk7QUFFakIsbUJBQU8sb0JBQW9CLG9CQUFvQixRQUFRO0FBQ3ZELG1CQUFPLG9CQUFvQixTQUFTLFFBQVE7QUFBQSxVQUM5QztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLFNBQVNELGNBQWE7QUFFMUIsV0FBTyxjQUFjLFNBQVMsY0FBYztBQUMxQyxVQUFJLENBQUMsS0FBSyxTQUFTO0FBQ2pCLGFBQUssaUJBQWlCLEtBQUssS0FBSztBQUFBLE1BQ2xDO0FBQUEsSUFDRjtBQUVBLFdBQU8sZ0JBQWdCLFNBQVMsZ0JBQWdCO0FBQzlDLFVBQUksQ0FBQyxLQUFLLGFBQWEsR0FBRztBQUN4QixZQUFJO0FBRUosU0FBQyxnQkFBZ0IsS0FBSyxZQUFZLE9BQU8sU0FBUyxjQUFjLEtBQUssSUFBSTtBQUN6RSxhQUFLLFVBQVU7QUFBQSxNQUNqQjtBQUFBLElBQ0Y7QUFFQSxXQUFPLG1CQUFtQixTQUFTLGlCQUFpQixPQUFPO0FBQ3pELFVBQUksZ0JBQ0EsU0FBUztBQUViLFdBQUssUUFBUTtBQUNiLE9BQUMsaUJBQWlCLEtBQUssWUFBWSxPQUFPLFNBQVMsZUFBZSxLQUFLLElBQUk7QUFDM0UsV0FBSyxVQUFVLE1BQU0sU0FBVSxTQUFTO0FBQ3RDLFlBQUksT0FBTyxZQUFZLFdBQVc7QUFDaEMsaUJBQU8sV0FBVyxPQUFPO0FBQUEsUUFDM0IsT0FBTztBQUNMLGlCQUFPLFFBQVE7QUFBQSxRQUNqQjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFFQSxXQUFPLGFBQWEsU0FBUyxXQUFXLFNBQVM7QUFDL0MsV0FBSyxVQUFVO0FBRWYsVUFBSSxTQUFTO0FBQ1gsYUFBSyxRQUFRO0FBQUEsTUFDZjtBQUFBLElBQ0Y7QUFFQSxXQUFPLFVBQVUsU0FBU0MsV0FBVTtBQUNsQyxXQUFLLFVBQVUsUUFBUSxTQUFVLFVBQVU7QUFDekMsaUJBQVM7QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxZQUFZLFNBQVMsWUFBWTtBQUN0QyxVQUFJLE9BQU8sS0FBSyxZQUFZLFdBQVc7QUFDckMsZUFBTyxLQUFLO0FBQUEsTUFDZDtBQUdBLFVBQUksT0FBTyxhQUFhLGFBQWE7QUFDbkMsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPLENBQUMsUUFBVyxXQUFXLFdBQVcsRUFBRSxTQUFTLFNBQVMsZUFBZTtBQUFBLElBQzlFO0FBRUEsV0FBT0Q7QUFBQSxFQUNULEVBQUUsWUFBWTtBQUNQLE1BQUksZUFBZSxJQUFJLGFBQWE7OztBQzNGcEMsTUFBSSxnQkFBNkIseUJBQVUsZUFBZTtBQUMvRCxtQkFBZUcsZ0JBQWUsYUFBYTtBQUUzQyxhQUFTQSxpQkFBZ0I7QUFDdkIsVUFBSTtBQUVKLGNBQVEsY0FBYyxLQUFLLElBQUksS0FBSztBQUVwQyxZQUFNLFFBQVEsU0FBVSxVQUFVO0FBQ2hDLFlBQUk7QUFFSixZQUFJLENBQUMsY0FBYyxVQUFVLFdBQVcsT0FBTyxTQUFTLFFBQVEsbUJBQW1CO0FBQ2pGLGNBQUksV0FBVyxTQUFTQyxZQUFXO0FBQ2pDLG1CQUFPLFNBQVM7QUFBQSxVQUNsQjtBQUdBLGlCQUFPLGlCQUFpQixVQUFVLFVBQVUsS0FBSztBQUNqRCxpQkFBTyxpQkFBaUIsV0FBVyxVQUFVLEtBQUs7QUFDbEQsaUJBQU8sV0FBWTtBQUVqQixtQkFBTyxvQkFBb0IsVUFBVSxRQUFRO0FBQzdDLG1CQUFPLG9CQUFvQixXQUFXLFFBQVE7QUFBQSxVQUNoRDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLFNBQVNELGVBQWM7QUFFM0IsV0FBTyxjQUFjLFNBQVMsY0FBYztBQUMxQyxVQUFJLENBQUMsS0FBSyxTQUFTO0FBQ2pCLGFBQUssaUJBQWlCLEtBQUssS0FBSztBQUFBLE1BQ2xDO0FBQUEsSUFDRjtBQUVBLFdBQU8sZ0JBQWdCLFNBQVMsZ0JBQWdCO0FBQzlDLFVBQUksQ0FBQyxLQUFLLGFBQWEsR0FBRztBQUN4QixZQUFJO0FBRUosU0FBQyxnQkFBZ0IsS0FBSyxZQUFZLE9BQU8sU0FBUyxjQUFjLEtBQUssSUFBSTtBQUN6RSxhQUFLLFVBQVU7QUFBQSxNQUNqQjtBQUFBLElBQ0Y7QUFFQSxXQUFPLG1CQUFtQixTQUFTLGlCQUFpQixPQUFPO0FBQ3pELFVBQUksZ0JBQ0EsU0FBUztBQUViLFdBQUssUUFBUTtBQUNiLE9BQUMsaUJBQWlCLEtBQUssWUFBWSxPQUFPLFNBQVMsZUFBZSxLQUFLLElBQUk7QUFDM0UsV0FBSyxVQUFVLE1BQU0sU0FBVSxRQUFRO0FBQ3JDLFlBQUksT0FBTyxXQUFXLFdBQVc7QUFDL0IsaUJBQU8sVUFBVSxNQUFNO0FBQUEsUUFDekIsT0FBTztBQUNMLGlCQUFPLFNBQVM7QUFBQSxRQUNsQjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFFQSxXQUFPLFlBQVksU0FBUyxVQUFVLFFBQVE7QUFDNUMsV0FBSyxTQUFTO0FBRWQsVUFBSSxRQUFRO0FBQ1YsYUFBSyxTQUFTO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBRUEsV0FBTyxXQUFXLFNBQVMsV0FBVztBQUNwQyxXQUFLLFVBQVUsUUFBUSxTQUFVLFVBQVU7QUFDekMsaUJBQVM7QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxXQUFXLFNBQVMsV0FBVztBQUNwQyxVQUFJLE9BQU8sS0FBSyxXQUFXLFdBQVc7QUFDcEMsZUFBTyxLQUFLO0FBQUEsTUFDZDtBQUVBLFVBQUksT0FBTyxjQUFjLGVBQWUsT0FBTyxVQUFVLFdBQVcsYUFBYTtBQUMvRSxlQUFPO0FBQUEsTUFDVDtBQUVBLGFBQU8sVUFBVTtBQUFBLElBQ25CO0FBRUEsV0FBT0E7QUFBQSxFQUNULEVBQUUsWUFBWTtBQUNQLE1BQUksZ0JBQWdCLElBQUksY0FBYzs7O0FDekY3QyxXQUFTLGtCQUFrQixjQUFjO0FBQ3ZDLFdBQU8sS0FBSyxJQUFJLE1BQU8sS0FBSyxJQUFJLEdBQUcsWUFBWSxHQUFHLEdBQUs7QUFBQSxFQUN6RDtBQUVPLFdBQVMsYUFBYSxPQUFPO0FBQ2xDLFdBQU8sUUFBUSxTQUFTLE9BQU8sU0FBUyxNQUFNLFlBQVk7QUFBQSxFQUM1RDtBQUNPLE1BQUksaUJBQWlCLFNBQVNFLGdCQUFlLFNBQVM7QUFDM0QsU0FBSyxTQUFTLFdBQVcsT0FBTyxTQUFTLFFBQVE7QUFDakQsU0FBSyxTQUFTLFdBQVcsT0FBTyxTQUFTLFFBQVE7QUFBQSxFQUNuRDtBQUNPLFdBQVMsaUJBQWlCLE9BQU87QUFDdEMsV0FBTyxpQkFBaUI7QUFBQSxFQUMxQjtBQUVPLE1BQUksVUFBVSxTQUFTQyxTQUFRLFFBQVE7QUFDNUMsUUFBSSxRQUFRO0FBRVosUUFBSSxjQUFjO0FBQ2xCLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFDSixTQUFLLFFBQVEsT0FBTztBQUVwQixTQUFLLFNBQVMsU0FBVSxlQUFlO0FBQ3JDLGFBQU8sWUFBWSxPQUFPLFNBQVMsU0FBUyxhQUFhO0FBQUEsSUFDM0Q7QUFFQSxTQUFLLGNBQWMsV0FBWTtBQUM3QixvQkFBYztBQUFBLElBQ2hCO0FBRUEsU0FBSyxnQkFBZ0IsV0FBWTtBQUMvQixvQkFBYztBQUFBLElBQ2hCO0FBRUEsU0FBSyxXQUFXLFdBQVk7QUFDMUIsYUFBTyxjQUFjLE9BQU8sU0FBUyxXQUFXO0FBQUEsSUFDbEQ7QUFFQSxTQUFLLGVBQWU7QUFDcEIsU0FBSyxXQUFXO0FBQ2hCLFNBQUssYUFBYTtBQUNsQixTQUFLLHdCQUF3QjtBQUM3QixTQUFLLFVBQVUsSUFBSSxRQUFRLFNBQVUsY0FBYyxhQUFhO0FBQzlELHVCQUFpQjtBQUNqQixzQkFBZ0I7QUFBQSxJQUNsQixDQUFDO0FBRUQsUUFBSSxVQUFVLFNBQVNDLFNBQVEsT0FBTztBQUNwQyxVQUFJLENBQUMsTUFBTSxZQUFZO0FBQ3JCLGNBQU0sYUFBYTtBQUNuQixlQUFPLGFBQWEsT0FBTyxTQUFTLE9BQU8sVUFBVSxLQUFLO0FBQzFELHNCQUFjLE9BQU8sU0FBUyxXQUFXO0FBQ3pDLHVCQUFlLEtBQUs7QUFBQSxNQUN0QjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFNBQVMsU0FBU0MsUUFBTyxPQUFPO0FBQ2xDLFVBQUksQ0FBQyxNQUFNLFlBQVk7QUFDckIsY0FBTSxhQUFhO0FBQ25CLGVBQU8sV0FBVyxPQUFPLFNBQVMsT0FBTyxRQUFRLEtBQUs7QUFDdEQsc0JBQWMsT0FBTyxTQUFTLFdBQVc7QUFDekMsc0JBQWMsS0FBSztBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUVBLFFBQUksUUFBUSxTQUFTQyxTQUFRO0FBQzNCLGFBQU8sSUFBSSxRQUFRLFNBQVUsaUJBQWlCO0FBQzVDLHFCQUFhO0FBQ2IsY0FBTSxXQUFXO0FBQ2pCLGVBQU8sV0FBVyxPQUFPLFNBQVMsT0FBTyxRQUFRO0FBQUEsTUFDbkQsQ0FBQyxFQUFFLEtBQUssV0FBWTtBQUNsQixxQkFBYTtBQUNiLGNBQU0sV0FBVztBQUNqQixlQUFPLGNBQWMsT0FBTyxTQUFTLE9BQU8sV0FBVztBQUFBLE1BQ3pELENBQUM7QUFBQSxJQUNIO0FBR0EsUUFBSSxNQUFNLFNBQVNDLE9BQU07QUFFdkIsVUFBSSxNQUFNLFlBQVk7QUFDcEI7QUFBQSxNQUNGO0FBRUEsVUFBSTtBQUVKLFVBQUk7QUFDRix5QkFBaUIsT0FBTyxHQUFHO0FBQUEsTUFDN0IsU0FBUyxPQUFPO0FBQ2QseUJBQWlCLFFBQVEsT0FBTyxLQUFLO0FBQUEsTUFDdkM7QUFHQSxpQkFBVyxTQUFTQyxVQUFTLGVBQWU7QUFDMUMsWUFBSSxDQUFDLE1BQU0sWUFBWTtBQUNyQixpQkFBTyxJQUFJLGVBQWUsYUFBYSxDQUFDO0FBQ3hDLGdCQUFNLFNBQVMsT0FBTyxTQUFTLE1BQU0sTUFBTTtBQUUzQyxjQUFJLGFBQWEsY0FBYyxHQUFHO0FBQ2hDLGdCQUFJO0FBQ0YsNkJBQWUsT0FBTztBQUFBLFlBQ3hCLFNBQVMsU0FBUztBQUFBLFlBQUM7QUFBQSxVQUNyQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBR0EsWUFBTSx3QkFBd0IsYUFBYSxjQUFjO0FBQ3pELGNBQVEsUUFBUSxjQUFjLEVBQUUsS0FBSyxPQUFPLEVBQUUsTUFBTSxTQUFVLE9BQU87QUFDbkUsWUFBSSxlQUFlO0FBR25CLFlBQUksTUFBTSxZQUFZO0FBQ3BCO0FBQUEsUUFDRjtBQUdBLFlBQUksU0FBUyxnQkFBZ0IsT0FBTyxVQUFVLE9BQU8sZ0JBQWdCO0FBQ3JFLFlBQUksY0FBYyxxQkFBcUIsT0FBTyxlQUFlLE9BQU8scUJBQXFCO0FBQ3pGLFlBQUksUUFBUSxPQUFPLGVBQWUsYUFBYSxXQUFXLE1BQU0sY0FBYyxLQUFLLElBQUk7QUFDdkYsWUFBSSxjQUFjLFVBQVUsUUFBUSxPQUFPLFVBQVUsWUFBWSxNQUFNLGVBQWUsU0FBUyxPQUFPLFVBQVUsY0FBYyxNQUFNLE1BQU0sY0FBYyxLQUFLO0FBRTdKLFlBQUksZUFBZSxDQUFDLGFBQWE7QUFFL0IsaUJBQU8sS0FBSztBQUNaO0FBQUEsUUFDRjtBQUVBLGNBQU07QUFFTixlQUFPLFVBQVUsT0FBTyxTQUFTLE9BQU8sT0FBTyxNQUFNLGNBQWMsS0FBSztBQUV4RSxjQUFNLEtBQUssRUFDVixLQUFLLFdBQVk7QUFDaEIsY0FBSSxDQUFDLGFBQWEsVUFBVSxLQUFLLENBQUMsY0FBYyxTQUFTLEdBQUc7QUFDMUQsbUJBQU8sTUFBTTtBQUFBLFVBQ2Y7QUFBQSxRQUNGLENBQUMsRUFBRSxLQUFLLFdBQVk7QUFDbEIsY0FBSSxhQUFhO0FBQ2YsbUJBQU8sS0FBSztBQUFBLFVBQ2QsT0FBTztBQUNMLFlBQUFELEtBQUk7QUFBQSxVQUNOO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUdBLFFBQUk7QUFBQSxFQUNOOzs7QUN6Sk8sTUFBSSxnQkFBNkIsMkJBQVk7QUFDbEQsYUFBU0UsaUJBQWdCO0FBQ3ZCLFdBQUssUUFBUSxDQUFDO0FBQ2QsV0FBSyxlQUFlO0FBRXBCLFdBQUssV0FBVyxTQUFVLFVBQVU7QUFDbEMsaUJBQVM7QUFBQSxNQUNYO0FBRUEsV0FBSyxnQkFBZ0IsU0FBVSxVQUFVO0FBQ3ZDLGlCQUFTO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFFQSxRQUFJLFNBQVNBLGVBQWM7QUFFM0IsV0FBTyxRQUFRLFNBQVMsTUFBTSxVQUFVO0FBQ3RDLFVBQUk7QUFDSixXQUFLO0FBRUwsVUFBSTtBQUNGLGlCQUFTLFNBQVM7QUFBQSxNQUNwQixVQUFFO0FBQ0EsYUFBSztBQUVMLFlBQUksQ0FBQyxLQUFLLGNBQWM7QUFDdEIsZUFBSyxNQUFNO0FBQUEsUUFDYjtBQUFBLE1BQ0Y7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sV0FBVyxTQUFTLFNBQVMsVUFBVTtBQUM1QyxVQUFJLFFBQVE7QUFFWixVQUFJLEtBQUssY0FBYztBQUNyQixhQUFLLE1BQU0sS0FBSyxRQUFRO0FBQUEsTUFDMUIsT0FBTztBQUNMLDBCQUFrQixXQUFZO0FBQzVCLGdCQUFNLFNBQVMsUUFBUTtBQUFBLFFBQ3pCLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQU1BLFdBQU8sYUFBYSxTQUFTLFdBQVcsVUFBVTtBQUNoRCxVQUFJLFNBQVM7QUFFYixhQUFPLFdBQVk7QUFDakIsaUJBQVMsT0FBTyxVQUFVLFFBQVEsT0FBTyxJQUFJLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxPQUFPLE1BQU0sUUFBUTtBQUN2RixlQUFLLElBQUksSUFBSSxVQUFVLElBQUk7QUFBQSxRQUM3QjtBQUVBLGVBQU8sU0FBUyxXQUFZO0FBQzFCLG1CQUFTLE1BQU0sUUFBUSxJQUFJO0FBQUEsUUFDN0IsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBRUEsV0FBTyxRQUFRLFNBQVMsUUFBUTtBQUM5QixVQUFJLFNBQVM7QUFFYixVQUFJLFFBQVEsS0FBSztBQUNqQixXQUFLLFFBQVEsQ0FBQztBQUVkLFVBQUksTUFBTSxRQUFRO0FBQ2hCLDBCQUFrQixXQUFZO0FBQzVCLGlCQUFPLGNBQWMsV0FBWTtBQUMvQixrQkFBTSxRQUFRLFNBQVUsVUFBVTtBQUNoQyxxQkFBTyxTQUFTLFFBQVE7QUFBQSxZQUMxQixDQUFDO0FBQUEsVUFDSCxDQUFDO0FBQUEsUUFDSCxDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFPQSxXQUFPLG9CQUFvQixTQUFTLGtCQUFrQixJQUFJO0FBQ3hELFdBQUssV0FBVztBQUFBLElBQ2xCO0FBT0EsV0FBTyx5QkFBeUIsU0FBUyx1QkFBdUIsSUFBSTtBQUNsRSxXQUFLLGdCQUFnQjtBQUFBLElBQ3ZCO0FBRUEsV0FBT0E7QUFBQSxFQUNULEVBQUU7QUFFSyxNQUFJLGdCQUFnQixJQUFJLGNBQWM7OztBQ3RHN0MsTUFBSSxTQUFTO0FBQ04sV0FBUyxZQUFZO0FBQzFCLFdBQU87QUFBQSxFQUNUO0FBQ08sV0FBUyxVQUFVLFdBQVc7QUFDbkMsYUFBUztBQUFBLEVBQ1g7OztBQ0RPLE1BQUksUUFBcUIsMkJBQVk7QUFDMUMsYUFBU0MsT0FBTSxRQUFRO0FBQ3JCLFdBQUssc0JBQXNCO0FBQzNCLFdBQUssZUFBZTtBQUNwQixXQUFLLGlCQUFpQixPQUFPO0FBQzdCLFdBQUssV0FBVyxPQUFPLE9BQU87QUFDOUIsV0FBSyxZQUFZLENBQUM7QUFDbEIsV0FBSyxRQUFRLE9BQU87QUFDcEIsV0FBSyxXQUFXLE9BQU87QUFDdkIsV0FBSyxZQUFZLE9BQU87QUFDeEIsV0FBSyxlQUFlLE9BQU8sU0FBUyxLQUFLLGdCQUFnQixLQUFLLE9BQU87QUFDckUsV0FBSyxRQUFRLEtBQUs7QUFDbEIsV0FBSyxPQUFPLE9BQU87QUFDbkIsV0FBSyxXQUFXO0FBQUEsSUFDbEI7QUFFQSxRQUFJLFNBQVNBLE9BQU07QUFFbkIsV0FBTyxhQUFhLFNBQVMsV0FBVyxTQUFTO0FBQy9DLFVBQUk7QUFFSixXQUFLLFVBQVUsU0FBUyxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsT0FBTztBQUN4RCxXQUFLLE9BQU8sV0FBVyxPQUFPLFNBQVMsUUFBUTtBQUUvQyxXQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssYUFBYSxJQUFJLHdCQUF3QixLQUFLLFFBQVEsY0FBYyxPQUFPLHdCQUF3QixJQUFJLEtBQUssR0FBSTtBQUFBLElBQ2pKO0FBRUEsV0FBTyxvQkFBb0IsU0FBUyxrQkFBa0IsU0FBUztBQUM3RCxXQUFLLGlCQUFpQjtBQUFBLElBQ3hCO0FBRUEsV0FBTyxhQUFhLFNBQVMsYUFBYTtBQUN4QyxVQUFJLFFBQVE7QUFFWixXQUFLLGVBQWU7QUFFcEIsVUFBSSxlQUFlLEtBQUssU0FBUyxHQUFHO0FBQ2xDLGFBQUssWUFBWSxXQUFXLFdBQVk7QUFDdEMsZ0JBQU0sZUFBZTtBQUFBLFFBQ3ZCLEdBQUcsS0FBSyxTQUFTO0FBQUEsTUFDbkI7QUFBQSxJQUNGO0FBRUEsV0FBTyxpQkFBaUIsU0FBUyxpQkFBaUI7QUFDaEQsVUFBSSxLQUFLLFdBQVc7QUFDbEIscUJBQWEsS0FBSyxTQUFTO0FBQzNCLGFBQUssWUFBWTtBQUFBLE1BQ25CO0FBQUEsSUFDRjtBQUVBLFdBQU8saUJBQWlCLFNBQVMsaUJBQWlCO0FBQ2hELFVBQUksQ0FBQyxLQUFLLFVBQVUsUUFBUTtBQUMxQixZQUFJLEtBQUssTUFBTSxZQUFZO0FBQ3pCLGNBQUksS0FBSyxjQUFjO0FBQ3JCLGlCQUFLLFdBQVc7QUFBQSxVQUNsQjtBQUFBLFFBQ0YsT0FBTztBQUNMLGVBQUssTUFBTSxPQUFPLElBQUk7QUFBQSxRQUN4QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsV0FBTyxVQUFVLFNBQVMsUUFBUSxTQUFTLFNBQVM7QUFDbEQsVUFBSSx1QkFBdUI7QUFFM0IsVUFBSSxXQUFXLEtBQUssTUFBTTtBQUUxQixVQUFJLE9BQU8saUJBQWlCLFNBQVMsUUFBUTtBQUU3QyxXQUFLLHlCQUF5QixnQkFBZ0IsS0FBSyxTQUFTLGdCQUFnQixPQUFPLFNBQVMsc0JBQXNCLEtBQUssZUFBZSxVQUFVLElBQUksR0FBRztBQUNySixlQUFPO0FBQUEsTUFDVCxXQUFXLEtBQUssUUFBUSxzQkFBc0IsT0FBTztBQUVuRCxlQUFPLGlCQUFpQixVQUFVLElBQUk7QUFBQSxNQUN4QztBQUdBLFdBQUssU0FBUztBQUFBLFFBQ1o7QUFBQSxRQUNBLE1BQU07QUFBQSxRQUNOLGVBQWUsV0FBVyxPQUFPLFNBQVMsUUFBUTtBQUFBLE1BQ3BELENBQUM7QUFDRCxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sV0FBVyxTQUFTLFNBQVMsT0FBTyxpQkFBaUI7QUFDMUQsV0FBSyxTQUFTO0FBQUEsUUFDWixNQUFNO0FBQUEsUUFDTjtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxTQUFTLFNBQVMsT0FBTyxTQUFTO0FBQ3ZDLFVBQUk7QUFFSixVQUFJLFVBQVUsS0FBSztBQUNuQixPQUFDLGdCQUFnQixLQUFLLFlBQVksT0FBTyxTQUFTLGNBQWMsT0FBTyxPQUFPO0FBQzlFLGFBQU8sVUFBVSxRQUFRLEtBQUtDLEtBQUksRUFBRSxNQUFNQSxLQUFJLElBQUksUUFBUSxRQUFRO0FBQUEsSUFDcEU7QUFFQSxXQUFPLFVBQVUsU0FBUyxVQUFVO0FBQ2xDLFdBQUssZUFBZTtBQUNwQixXQUFLLE9BQU87QUFBQSxRQUNWLFFBQVE7QUFBQSxNQUNWLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxRQUFRLFNBQVMsUUFBUTtBQUM5QixXQUFLLFFBQVE7QUFDYixXQUFLLFNBQVMsS0FBSyxZQUFZO0FBQUEsSUFDakM7QUFFQSxXQUFPLFdBQVcsU0FBUyxXQUFXO0FBQ3BDLGFBQU8sS0FBSyxVQUFVLEtBQUssU0FBVSxVQUFVO0FBQzdDLGVBQU8sU0FBUyxRQUFRLFlBQVk7QUFBQSxNQUN0QyxDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU8sYUFBYSxTQUFTLGFBQWE7QUFDeEMsYUFBTyxLQUFLLE1BQU07QUFBQSxJQUNwQjtBQUVBLFdBQU8sVUFBVSxTQUFTQyxXQUFVO0FBQ2xDLGFBQU8sS0FBSyxNQUFNLGlCQUFpQixDQUFDLEtBQUssTUFBTSxpQkFBaUIsS0FBSyxVQUFVLEtBQUssU0FBVSxVQUFVO0FBQ3RHLGVBQU8sU0FBUyxpQkFBaUIsRUFBRTtBQUFBLE1BQ3JDLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxnQkFBZ0IsU0FBUyxjQUFjLFdBQVc7QUFDdkQsVUFBSSxjQUFjLFFBQVE7QUFDeEIsb0JBQVk7QUFBQSxNQUNkO0FBRUEsYUFBTyxLQUFLLE1BQU0saUJBQWlCLENBQUMsS0FBSyxNQUFNLGlCQUFpQixDQUFDLGVBQWUsS0FBSyxNQUFNLGVBQWUsU0FBUztBQUFBLElBQ3JIO0FBRUEsV0FBTyxVQUFVLFNBQVNDLFdBQVU7QUFDbEMsVUFBSTtBQUVKLFVBQUksV0FBVyxLQUFLLFVBQVUsS0FBSyxTQUFVQyxJQUFHO0FBQzlDLGVBQU9BLEdBQUUseUJBQXlCO0FBQUEsTUFDcEMsQ0FBQztBQUVELFVBQUksVUFBVTtBQUNaLGlCQUFTLFFBQVE7QUFBQSxNQUNuQjtBQUdBLE9BQUMsaUJBQWlCLEtBQUssWUFBWSxPQUFPLFNBQVMsZUFBZSxTQUFTO0FBQUEsSUFDN0U7QUFFQSxXQUFPLFdBQVcsU0FBUyxXQUFXO0FBQ3BDLFVBQUk7QUFFSixVQUFJLFdBQVcsS0FBSyxVQUFVLEtBQUssU0FBVUEsSUFBRztBQUM5QyxlQUFPQSxHQUFFLHVCQUF1QjtBQUFBLE1BQ2xDLENBQUM7QUFFRCxVQUFJLFVBQVU7QUFDWixpQkFBUyxRQUFRO0FBQUEsTUFDbkI7QUFHQSxPQUFDLGlCQUFpQixLQUFLLFlBQVksT0FBTyxTQUFTLGVBQWUsU0FBUztBQUFBLElBQzdFO0FBRUEsV0FBTyxjQUFjLFNBQVMsWUFBWSxVQUFVO0FBQ2xELFVBQUksS0FBSyxVQUFVLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDM0MsYUFBSyxVQUFVLEtBQUssUUFBUTtBQUM1QixhQUFLLGVBQWU7QUFFcEIsYUFBSyxlQUFlO0FBQ3BCLGFBQUssTUFBTSxPQUFPO0FBQUEsVUFDaEIsTUFBTTtBQUFBLFVBQ04sT0FBTztBQUFBLFVBQ1A7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUVBLFdBQU8saUJBQWlCLFNBQVMsZUFBZSxVQUFVO0FBQ3hELFVBQUksS0FBSyxVQUFVLFFBQVEsUUFBUSxNQUFNLElBQUk7QUFDM0MsYUFBSyxZQUFZLEtBQUssVUFBVSxPQUFPLFNBQVVBLElBQUc7QUFDbEQsaUJBQU9BLE9BQU07QUFBQSxRQUNmLENBQUM7QUFFRCxZQUFJLENBQUMsS0FBSyxVQUFVLFFBQVE7QUFHMUIsY0FBSSxLQUFLLFNBQVM7QUFDaEIsZ0JBQUksS0FBSyxRQUFRLHlCQUF5QixLQUFLLHFCQUFxQjtBQUNsRSxtQkFBSyxRQUFRLE9BQU87QUFBQSxnQkFDbEIsUUFBUTtBQUFBLGNBQ1YsQ0FBQztBQUFBLFlBQ0gsT0FBTztBQUNMLG1CQUFLLFFBQVEsWUFBWTtBQUFBLFlBQzNCO0FBQUEsVUFDRjtBQUVBLGNBQUksS0FBSyxXQUFXO0FBQ2xCLGlCQUFLLFdBQVc7QUFBQSxVQUNsQixPQUFPO0FBQ0wsaUJBQUssTUFBTSxPQUFPLElBQUk7QUFBQSxVQUN4QjtBQUFBLFFBQ0Y7QUFFQSxhQUFLLE1BQU0sT0FBTztBQUFBLFVBQ2hCLE1BQU07QUFBQSxVQUNOLE9BQU87QUFBQSxVQUNQO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFFQSxXQUFPLG9CQUFvQixTQUFTLG9CQUFvQjtBQUN0RCxhQUFPLEtBQUssVUFBVTtBQUFBLElBQ3hCO0FBRUEsV0FBTyxhQUFhLFNBQVMsYUFBYTtBQUN4QyxVQUFJLENBQUMsS0FBSyxNQUFNLGVBQWU7QUFDN0IsYUFBSyxTQUFTO0FBQUEsVUFDWixNQUFNO0FBQUEsUUFDUixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0Y7QUFFQSxXQUFPLFFBQVEsU0FBU0MsT0FBTSxTQUFTLGNBQWM7QUFDbkQsVUFBSSxTQUFTLE1BQ1QsdUJBQ0EsdUJBQ0E7QUFFSixVQUFJLEtBQUssTUFBTSxZQUFZO0FBQ3pCLFlBQUksS0FBSyxNQUFNLGtCQUFrQixnQkFBZ0IsT0FBTyxTQUFTLGFBQWEsZ0JBQWdCO0FBRTVGLGVBQUssT0FBTztBQUFBLFlBQ1YsUUFBUTtBQUFBLFVBQ1YsQ0FBQztBQUFBLFFBQ0gsV0FBVyxLQUFLLFNBQVM7QUFDdkIsY0FBSTtBQUdKLFdBQUMsaUJBQWlCLEtBQUssWUFBWSxPQUFPLFNBQVMsZUFBZSxjQUFjO0FBRWhGLGlCQUFPLEtBQUs7QUFBQSxRQUNkO0FBQUEsTUFDRjtBQUdBLFVBQUksU0FBUztBQUNYLGFBQUssV0FBVyxPQUFPO0FBQUEsTUFDekI7QUFJQSxVQUFJLENBQUMsS0FBSyxRQUFRLFNBQVM7QUFDekIsWUFBSSxXQUFXLEtBQUssVUFBVSxLQUFLLFNBQVVELElBQUc7QUFDOUMsaUJBQU9BLEdBQUUsUUFBUTtBQUFBLFFBQ25CLENBQUM7QUFFRCxZQUFJLFVBQVU7QUFDWixlQUFLLFdBQVcsU0FBUyxPQUFPO0FBQUEsUUFDbEM7QUFBQSxNQUNGO0FBRUEsVUFBSSxXQUFXLG9CQUFvQixLQUFLLFFBQVE7QUFDaEQsVUFBSSxrQkFBa0IsbUJBQW1CO0FBRXpDLFVBQUksaUJBQWlCO0FBQUEsUUFDbkI7QUFBQSxRQUNBLFdBQVc7QUFBQSxRQUNYLE1BQU0sS0FBSztBQUFBLE1BQ2I7QUFDQSxhQUFPLGVBQWUsZ0JBQWdCLFVBQVU7QUFBQSxRQUM5QyxZQUFZO0FBQUEsUUFDWixLQUFLLFNBQVNFLE9BQU07QUFDbEIsY0FBSSxpQkFBaUI7QUFDbkIsbUJBQU8sc0JBQXNCO0FBQzdCLG1CQUFPLGdCQUFnQjtBQUFBLFVBQ3pCO0FBRUEsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRixDQUFDO0FBRUQsVUFBSSxVQUFVLFNBQVNDLFdBQVU7QUFDL0IsWUFBSSxDQUFDLE9BQU8sUUFBUSxTQUFTO0FBQzNCLGlCQUFPLFFBQVEsT0FBTyxpQkFBaUI7QUFBQSxRQUN6QztBQUVBLGVBQU8sc0JBQXNCO0FBQzdCLGVBQU8sT0FBTyxRQUFRLFFBQVEsY0FBYztBQUFBLE1BQzlDO0FBR0EsVUFBSSxVQUFVO0FBQUEsUUFDWjtBQUFBLFFBQ0EsU0FBUyxLQUFLO0FBQUEsUUFDZDtBQUFBLFFBQ0EsT0FBTyxLQUFLO0FBQUEsUUFDWjtBQUFBLFFBQ0EsTUFBTSxLQUFLO0FBQUEsTUFDYjtBQUVBLFdBQUssd0JBQXdCLEtBQUssUUFBUSxhQUFhLE9BQU8sU0FBUyxzQkFBc0IsU0FBUztBQUNwRyxZQUFJO0FBRUosU0FBQyx5QkFBeUIsS0FBSyxRQUFRLGFBQWEsT0FBTyxTQUFTLHVCQUF1QixRQUFRLE9BQU87QUFBQSxNQUM1RztBQUdBLFdBQUssY0FBYyxLQUFLO0FBRXhCLFVBQUksQ0FBQyxLQUFLLE1BQU0sY0FBYyxLQUFLLE1BQU0sZ0JBQWdCLHdCQUF3QixRQUFRLGlCQUFpQixPQUFPLFNBQVMsc0JBQXNCLE9BQU87QUFDckosWUFBSTtBQUVKLGFBQUssU0FBUztBQUFBLFVBQ1osTUFBTTtBQUFBLFVBQ04sT0FBTyx5QkFBeUIsUUFBUSxpQkFBaUIsT0FBTyxTQUFTLHVCQUF1QjtBQUFBLFFBQ2xHLENBQUM7QUFBQSxNQUNIO0FBR0EsV0FBSyxVQUFVLElBQUksUUFBUTtBQUFBLFFBQ3pCLElBQUksUUFBUTtBQUFBLFFBQ1osT0FBTyxtQkFBbUIsT0FBTyxVQUFVLHdCQUF3QixnQkFBZ0IsVUFBVSxPQUFPLFNBQVMsc0JBQXNCLEtBQUssZUFBZTtBQUFBLFFBQ3ZKLFdBQVcsU0FBUyxVQUFVLE1BQU07QUFDbEMsaUJBQU8sUUFBUSxJQUFJO0FBR25CLGlCQUFPLE1BQU0sT0FBTyxhQUFhLE9BQU8sU0FBUyxPQUFPLE1BQU0sT0FBTyxVQUFVLE1BQU0sTUFBTTtBQUUzRixjQUFJLE9BQU8sY0FBYyxHQUFHO0FBQzFCLG1CQUFPLGVBQWU7QUFBQSxVQUN4QjtBQUFBLFFBQ0Y7QUFBQSxRQUNBLFNBQVMsU0FBUyxRQUFRLE9BQU87QUFFL0IsY0FBSSxFQUFFLGlCQUFpQixLQUFLLEtBQUssTUFBTSxTQUFTO0FBQzlDLG1CQUFPLFNBQVM7QUFBQSxjQUNkLE1BQU07QUFBQSxjQUNOO0FBQUEsWUFDRixDQUFDO0FBQUEsVUFDSDtBQUVBLGNBQUksQ0FBQyxpQkFBaUIsS0FBSyxHQUFHO0FBRTVCLG1CQUFPLE1BQU0sT0FBTyxXQUFXLE9BQU8sU0FBUyxPQUFPLE1BQU0sT0FBTyxRQUFRLE9BQU8sTUFBTTtBQUV4RixzQkFBVSxFQUFFLE1BQU0sS0FBSztBQUFBLFVBQ3pCO0FBR0EsY0FBSSxPQUFPLGNBQWMsR0FBRztBQUMxQixtQkFBTyxlQUFlO0FBQUEsVUFDeEI7QUFBQSxRQUNGO0FBQUEsUUFDQSxRQUFRLFNBQVMsU0FBUztBQUN4QixpQkFBTyxTQUFTO0FBQUEsWUFDZCxNQUFNO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDSDtBQUFBLFFBQ0EsU0FBUyxTQUFTLFVBQVU7QUFDMUIsaUJBQU8sU0FBUztBQUFBLFlBQ2QsTUFBTTtBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0g7QUFBQSxRQUNBLFlBQVksU0FBUyxhQUFhO0FBQ2hDLGlCQUFPLFNBQVM7QUFBQSxZQUNkLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNIO0FBQUEsUUFDQSxPQUFPLFFBQVEsUUFBUTtBQUFBLFFBQ3ZCLFlBQVksUUFBUSxRQUFRO0FBQUEsTUFDOUIsQ0FBQztBQUNELFdBQUssVUFBVSxLQUFLLFFBQVE7QUFDNUIsYUFBTyxLQUFLO0FBQUEsSUFDZDtBQUVBLFdBQU8sV0FBVyxTQUFTLFNBQVMsUUFBUTtBQUMxQyxVQUFJLFNBQVM7QUFFYixXQUFLLFFBQVEsS0FBSyxRQUFRLEtBQUssT0FBTyxNQUFNO0FBQzVDLG9CQUFjLE1BQU0sV0FBWTtBQUM5QixlQUFPLFVBQVUsUUFBUSxTQUFVLFVBQVU7QUFDM0MsbUJBQVMsY0FBYyxNQUFNO0FBQUEsUUFDL0IsQ0FBQztBQUVELGVBQU8sTUFBTSxPQUFPO0FBQUEsVUFDbEIsT0FBTztBQUFBLFVBQ1AsTUFBTTtBQUFBLFVBQ047QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxrQkFBa0IsU0FBU0MsaUJBQWdCLFNBQVM7QUFDekQsVUFBSSxPQUFPLE9BQU8sUUFBUSxnQkFBZ0IsYUFBYSxRQUFRLFlBQVksSUFBSSxRQUFRO0FBQ3ZGLFVBQUksaUJBQWlCLE9BQU8sUUFBUSxnQkFBZ0I7QUFDcEQsVUFBSSx1QkFBdUIsaUJBQWlCLE9BQU8sUUFBUSx5QkFBeUIsYUFBYSxRQUFRLHFCQUFxQixJQUFJLFFBQVEsdUJBQXVCO0FBQ2pLLFVBQUksVUFBVSxPQUFPLFNBQVM7QUFDOUIsYUFBTztBQUFBLFFBQ0w7QUFBQSxRQUNBLGlCQUFpQjtBQUFBLFFBQ2pCLGVBQWUsVUFBVSx3QkFBd0IsT0FBTyx1QkFBdUIsS0FBSyxJQUFJLElBQUk7QUFBQSxRQUM1RixPQUFPO0FBQUEsUUFDUCxrQkFBa0I7QUFBQSxRQUNsQixnQkFBZ0I7QUFBQSxRQUNoQixtQkFBbUI7QUFBQSxRQUNuQixXQUFXO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsUUFDZixVQUFVO0FBQUEsUUFDVixRQUFRLFVBQVUsWUFBWTtBQUFBLE1BQ2hDO0FBQUEsSUFDRjtBQUVBLFdBQU8sVUFBVSxTQUFTQyxTQUFRLE9BQU8sUUFBUTtBQUMvQyxVQUFJLGNBQWM7QUFFbEIsY0FBUSxPQUFPLE1BQU07QUFBQSxRQUNuQixLQUFLO0FBQ0gsaUJBQU8sU0FBUyxDQUFDLEdBQUcsT0FBTztBQUFBLFlBQ3pCLG1CQUFtQixNQUFNLG9CQUFvQjtBQUFBLFVBQy9DLENBQUM7QUFBQSxRQUVILEtBQUs7QUFDSCxpQkFBTyxTQUFTLENBQUMsR0FBRyxPQUFPO0FBQUEsWUFDekIsVUFBVTtBQUFBLFVBQ1osQ0FBQztBQUFBLFFBRUgsS0FBSztBQUNILGlCQUFPLFNBQVMsQ0FBQyxHQUFHLE9BQU87QUFBQSxZQUN6QixVQUFVO0FBQUEsVUFDWixDQUFDO0FBQUEsUUFFSCxLQUFLO0FBQ0gsaUJBQU8sU0FBUyxDQUFDLEdBQUcsT0FBTztBQUFBLFlBQ3pCLG1CQUFtQjtBQUFBLFlBQ25CLFlBQVksZUFBZSxPQUFPLFNBQVMsT0FBTyxlQUFlO0FBQUEsWUFDakUsWUFBWTtBQUFBLFlBQ1osVUFBVTtBQUFBLFVBQ1osR0FBRyxDQUFDLE1BQU0saUJBQWlCO0FBQUEsWUFDekIsT0FBTztBQUFBLFlBQ1AsUUFBUTtBQUFBLFVBQ1YsQ0FBQztBQUFBLFFBRUgsS0FBSztBQUNILGlCQUFPLFNBQVMsQ0FBQyxHQUFHLE9BQU87QUFBQSxZQUN6QixNQUFNLE9BQU87QUFBQSxZQUNiLGlCQUFpQixNQUFNLGtCQUFrQjtBQUFBLFlBQ3pDLGdCQUFnQix3QkFBd0IsT0FBTyxrQkFBa0IsT0FBTyx3QkFBd0IsS0FBSyxJQUFJO0FBQUEsWUFDekcsT0FBTztBQUFBLFlBQ1AsbUJBQW1CO0FBQUEsWUFDbkIsWUFBWTtBQUFBLFlBQ1osZUFBZTtBQUFBLFlBQ2YsVUFBVTtBQUFBLFlBQ1YsUUFBUTtBQUFBLFVBQ1YsQ0FBQztBQUFBLFFBRUgsS0FBSztBQUNILGNBQUksUUFBUSxPQUFPO0FBRW5CLGNBQUksaUJBQWlCLEtBQUssS0FBSyxNQUFNLFVBQVUsS0FBSyxhQUFhO0FBQy9ELG1CQUFPLFNBQVMsQ0FBQyxHQUFHLEtBQUssV0FBVztBQUFBLFVBQ3RDO0FBRUEsaUJBQU8sU0FBUyxDQUFDLEdBQUcsT0FBTztBQUFBLFlBQ3pCO0FBQUEsWUFDQSxrQkFBa0IsTUFBTSxtQkFBbUI7QUFBQSxZQUMzQyxnQkFBZ0IsS0FBSyxJQUFJO0FBQUEsWUFDekIsbUJBQW1CLE1BQU0sb0JBQW9CO0FBQUEsWUFDN0MsWUFBWTtBQUFBLFlBQ1osVUFBVTtBQUFBLFlBQ1YsUUFBUTtBQUFBLFVBQ1YsQ0FBQztBQUFBLFFBRUgsS0FBSztBQUNILGlCQUFPLFNBQVMsQ0FBQyxHQUFHLE9BQU87QUFBQSxZQUN6QixlQUFlO0FBQUEsVUFDakIsQ0FBQztBQUFBLFFBRUgsS0FBSztBQUNILGlCQUFPLFNBQVMsQ0FBQyxHQUFHLE9BQU8sT0FBTyxLQUFLO0FBQUEsUUFFekM7QUFDRSxpQkFBTztBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBRUEsV0FBT1Q7QUFBQSxFQUNULEVBQUU7OztBQzdlSyxNQUFJLGFBQTBCLHlCQUFVLGVBQWU7QUFDNUQsbUJBQWVVLGFBQVksYUFBYTtBQUV4QyxhQUFTQSxZQUFXLFFBQVE7QUFDMUIsVUFBSTtBQUVKLGNBQVEsY0FBYyxLQUFLLElBQUksS0FBSztBQUNwQyxZQUFNLFNBQVMsVUFBVSxDQUFDO0FBQzFCLFlBQU0sVUFBVSxDQUFDO0FBQ2pCLFlBQU0sYUFBYSxDQUFDO0FBQ3BCLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxTQUFTQSxZQUFXO0FBRXhCLFdBQU8sUUFBUSxTQUFTLE1BQU0sUUFBUSxTQUFTLE9BQU87QUFDcEQsVUFBSTtBQUVKLFVBQUksV0FBVyxRQUFRO0FBQ3ZCLFVBQUksYUFBYSxxQkFBcUIsUUFBUSxjQUFjLE9BQU8scUJBQXFCLHNCQUFzQixVQUFVLE9BQU87QUFDL0gsVUFBSSxRQUFRLEtBQUssSUFBSSxTQUFTO0FBRTlCLFVBQUksQ0FBQyxPQUFPO0FBQ1YsZ0JBQVEsSUFBSSxNQUFNO0FBQUEsVUFDaEIsT0FBTztBQUFBLFVBQ1A7QUFBQSxVQUNBO0FBQUEsVUFDQSxTQUFTLE9BQU8sb0JBQW9CLE9BQU87QUFBQSxVQUMzQztBQUFBLFVBQ0EsZ0JBQWdCLE9BQU8saUJBQWlCLFFBQVE7QUFBQSxVQUNoRCxNQUFNLFFBQVE7QUFBQSxRQUNoQixDQUFDO0FBQ0QsYUFBSyxJQUFJLEtBQUs7QUFBQSxNQUNoQjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTyxNQUFNLFNBQVMsSUFBSSxPQUFPO0FBQy9CLFVBQUksQ0FBQyxLQUFLLFdBQVcsTUFBTSxTQUFTLEdBQUc7QUFDckMsYUFBSyxXQUFXLE1BQU0sU0FBUyxJQUFJO0FBQ25DLGFBQUssUUFBUSxLQUFLLEtBQUs7QUFDdkIsYUFBSyxPQUFPO0FBQUEsVUFDVixNQUFNO0FBQUEsVUFDTjtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBRUEsV0FBTyxTQUFTLFNBQVMsT0FBTyxPQUFPO0FBQ3JDLFVBQUksYUFBYSxLQUFLLFdBQVcsTUFBTSxTQUFTO0FBRWhELFVBQUksWUFBWTtBQUNkLGNBQU0sUUFBUTtBQUNkLGFBQUssVUFBVSxLQUFLLFFBQVEsT0FBTyxTQUFVQyxJQUFHO0FBQzlDLGlCQUFPQSxPQUFNO0FBQUEsUUFDZixDQUFDO0FBRUQsWUFBSSxlQUFlLE9BQU87QUFDeEIsaUJBQU8sS0FBSyxXQUFXLE1BQU0sU0FBUztBQUFBLFFBQ3hDO0FBRUEsYUFBSyxPQUFPO0FBQUEsVUFDVixNQUFNO0FBQUEsVUFDTjtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBRUEsV0FBTyxRQUFRLFNBQVMsUUFBUTtBQUM5QixVQUFJLFNBQVM7QUFFYixvQkFBYyxNQUFNLFdBQVk7QUFDOUIsZUFBTyxRQUFRLFFBQVEsU0FBVSxPQUFPO0FBQ3RDLGlCQUFPLE9BQU8sS0FBSztBQUFBLFFBQ3JCLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxNQUFNLFNBQVNDLEtBQUksV0FBVztBQUNuQyxhQUFPLEtBQUssV0FBVyxTQUFTO0FBQUEsSUFDbEM7QUFFQSxXQUFPLFNBQVMsU0FBUyxTQUFTO0FBQ2hDLGFBQU8sS0FBSztBQUFBLElBQ2Q7QUFFQSxXQUFPLE9BQU8sU0FBUyxLQUFLLE1BQU0sTUFBTTtBQUN0QyxVQUFJLG1CQUFtQixnQkFBZ0IsTUFBTSxJQUFJLEdBQzdDLFVBQVUsaUJBQWlCLENBQUM7QUFFaEMsVUFBSSxPQUFPLFFBQVEsVUFBVSxhQUFhO0FBQ3hDLGdCQUFRLFFBQVE7QUFBQSxNQUNsQjtBQUVBLGFBQU8sS0FBSyxRQUFRLEtBQUssU0FBVSxPQUFPO0FBQ3hDLGVBQU8sV0FBVyxTQUFTLEtBQUs7QUFBQSxNQUNsQyxDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU8sVUFBVSxTQUFTLFFBQVEsTUFBTSxNQUFNO0FBQzVDLFVBQUksb0JBQW9CLGdCQUFnQixNQUFNLElBQUksR0FDOUMsVUFBVSxrQkFBa0IsQ0FBQztBQUVqQyxhQUFPLE9BQU8sS0FBSyxPQUFPLEVBQUUsU0FBUyxJQUFJLEtBQUssUUFBUSxPQUFPLFNBQVUsT0FBTztBQUM1RSxlQUFPLFdBQVcsU0FBUyxLQUFLO0FBQUEsTUFDbEMsQ0FBQyxJQUFJLEtBQUs7QUFBQSxJQUNaO0FBRUEsV0FBTyxTQUFTLFNBQVMsT0FBTyxPQUFPO0FBQ3JDLFVBQUksU0FBUztBQUViLG9CQUFjLE1BQU0sV0FBWTtBQUM5QixlQUFPLFVBQVUsUUFBUSxTQUFVLFVBQVU7QUFDM0MsbUJBQVMsS0FBSztBQUFBLFFBQ2hCLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxVQUFVLFNBQVNDLFdBQVU7QUFDbEMsVUFBSSxTQUFTO0FBRWIsb0JBQWMsTUFBTSxXQUFZO0FBQzlCLGVBQU8sUUFBUSxRQUFRLFNBQVUsT0FBTztBQUN0QyxnQkFBTSxRQUFRO0FBQUEsUUFDaEIsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0g7QUFFQSxXQUFPLFdBQVcsU0FBUyxXQUFXO0FBQ3BDLFVBQUksU0FBUztBQUViLG9CQUFjLE1BQU0sV0FBWTtBQUM5QixlQUFPLFFBQVEsUUFBUSxTQUFVLE9BQU87QUFDdEMsZ0JBQU0sU0FBUztBQUFBLFFBQ2pCLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBT0g7QUFBQSxFQUNULEVBQUUsWUFBWTs7O0FDM0lQLE1BQUksV0FBd0IsMkJBQVk7QUFDN0MsYUFBU0ksVUFBUyxRQUFRO0FBQ3hCLFdBQUssVUFBVSxTQUFTLENBQUMsR0FBRyxPQUFPLGdCQUFnQixPQUFPLE9BQU87QUFDakUsV0FBSyxhQUFhLE9BQU87QUFDekIsV0FBSyxnQkFBZ0IsT0FBTztBQUM1QixXQUFLLFlBQVksQ0FBQztBQUNsQixXQUFLLFFBQVEsT0FBTyxTQUFTLGdCQUFnQjtBQUM3QyxXQUFLLE9BQU8sT0FBTztBQUFBLElBQ3JCO0FBRUEsUUFBSSxTQUFTQSxVQUFTO0FBRXRCLFdBQU8sV0FBVyxTQUFTLFNBQVMsT0FBTztBQUN6QyxXQUFLLFNBQVM7QUFBQSxRQUNaLE1BQU07QUFBQSxRQUNOO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU8sY0FBYyxTQUFTLFlBQVksVUFBVTtBQUNsRCxVQUFJLEtBQUssVUFBVSxRQUFRLFFBQVEsTUFBTSxJQUFJO0FBQzNDLGFBQUssVUFBVSxLQUFLLFFBQVE7QUFBQSxNQUM5QjtBQUFBLElBQ0Y7QUFFQSxXQUFPLGlCQUFpQixTQUFTLGVBQWUsVUFBVTtBQUN4RCxXQUFLLFlBQVksS0FBSyxVQUFVLE9BQU8sU0FBVUMsSUFBRztBQUNsRCxlQUFPQSxPQUFNO0FBQUEsTUFDZixDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU8sU0FBUyxTQUFTLFNBQVM7QUFDaEMsVUFBSSxLQUFLLFNBQVM7QUFDaEIsYUFBSyxRQUFRLE9BQU87QUFDcEIsZUFBTyxLQUFLLFFBQVEsUUFBUSxLQUFLQyxLQUFJLEVBQUUsTUFBTUEsS0FBSTtBQUFBLE1BQ25EO0FBRUEsYUFBTyxRQUFRLFFBQVE7QUFBQSxJQUN6QjtBQUVBLFdBQU8sV0FBVyxTQUFTLFlBQVk7QUFDckMsVUFBSSxLQUFLLFNBQVM7QUFDaEIsYUFBSyxRQUFRLFNBQVM7QUFDdEIsZUFBTyxLQUFLLFFBQVE7QUFBQSxNQUN0QjtBQUVBLGFBQU8sS0FBSyxRQUFRO0FBQUEsSUFDdEI7QUFFQSxXQUFPLFVBQVUsU0FBUyxVQUFVO0FBQ2xDLFVBQUksUUFBUTtBQUVaLFVBQUk7QUFDSixVQUFJLFdBQVcsS0FBSyxNQUFNLFdBQVc7QUFDckMsVUFBSSxVQUFVLFFBQVEsUUFBUTtBQUU5QixVQUFJLENBQUMsVUFBVTtBQUNiLGFBQUssU0FBUztBQUFBLFVBQ1osTUFBTTtBQUFBLFVBQ04sV0FBVyxLQUFLLFFBQVE7QUFBQSxRQUMxQixDQUFDO0FBQ0Qsa0JBQVUsUUFBUSxLQUFLLFdBQVk7QUFFakMsZ0JBQU0sY0FBYyxPQUFPLFlBQVksT0FBTyxTQUFTLE1BQU0sY0FBYyxPQUFPLFNBQVMsTUFBTSxNQUFNLFdBQVcsS0FBSztBQUFBLFFBQ3pILENBQUMsRUFBRSxLQUFLLFdBQVk7QUFDbEIsaUJBQU8sTUFBTSxRQUFRLFlBQVksT0FBTyxTQUFTLE1BQU0sUUFBUSxTQUFTLE1BQU0sTUFBTSxTQUFTO0FBQUEsUUFDL0YsQ0FBQyxFQUFFLEtBQUssU0FBVSxTQUFTO0FBQ3pCLGNBQUksWUFBWSxNQUFNLE1BQU0sU0FBUztBQUNuQyxrQkFBTSxTQUFTO0FBQUEsY0FDYixNQUFNO0FBQUEsY0FDTjtBQUFBLGNBQ0EsV0FBVyxNQUFNLE1BQU07QUFBQSxZQUN6QixDQUFDO0FBQUEsVUFDSDtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFFQSxhQUFPLFFBQVEsS0FBSyxXQUFZO0FBQzlCLGVBQU8sTUFBTSxnQkFBZ0I7QUFBQSxNQUMvQixDQUFDLEVBQUUsS0FBSyxTQUFVLFFBQVE7QUFDeEIsZUFBTztBQUVQLGNBQU0sY0FBYyxPQUFPLGFBQWEsT0FBTyxTQUFTLE1BQU0sY0FBYyxPQUFPLFVBQVUsTUFBTSxNQUFNLE1BQU0sV0FBVyxNQUFNLE1BQU0sU0FBUyxLQUFLO0FBQUEsTUFDdEosQ0FBQyxFQUFFLEtBQUssV0FBWTtBQUNsQixlQUFPLE1BQU0sUUFBUSxhQUFhLE9BQU8sU0FBUyxNQUFNLFFBQVEsVUFBVSxNQUFNLE1BQU0sTUFBTSxXQUFXLE1BQU0sTUFBTSxPQUFPO0FBQUEsTUFDNUgsQ0FBQyxFQUFFLEtBQUssV0FBWTtBQUNsQixlQUFPLE1BQU0sUUFBUSxhQUFhLE9BQU8sU0FBUyxNQUFNLFFBQVEsVUFBVSxNQUFNLE1BQU0sTUFBTSxNQUFNLFdBQVcsTUFBTSxNQUFNLE9BQU87QUFBQSxNQUNsSSxDQUFDLEVBQUUsS0FBSyxXQUFZO0FBQ2xCLGNBQU0sU0FBUztBQUFBLFVBQ2IsTUFBTTtBQUFBLFVBQ047QUFBQSxRQUNGLENBQUM7QUFFRCxlQUFPO0FBQUEsTUFDVCxDQUFDLEVBQUUsTUFBTSxTQUFVLE9BQU87QUFFeEIsY0FBTSxjQUFjLE9BQU8sV0FBVyxPQUFPLFNBQVMsTUFBTSxjQUFjLE9BQU8sUUFBUSxPQUFPLE1BQU0sTUFBTSxXQUFXLE1BQU0sTUFBTSxTQUFTLEtBQUs7QUFFakosa0JBQVUsRUFBRSxNQUFNLEtBQUs7QUFDdkIsZUFBTyxRQUFRLFFBQVEsRUFBRSxLQUFLLFdBQVk7QUFDeEMsaUJBQU8sTUFBTSxRQUFRLFdBQVcsT0FBTyxTQUFTLE1BQU0sUUFBUSxRQUFRLE9BQU8sTUFBTSxNQUFNLFdBQVcsTUFBTSxNQUFNLE9BQU87QUFBQSxRQUN6SCxDQUFDLEVBQUUsS0FBSyxXQUFZO0FBQ2xCLGlCQUFPLE1BQU0sUUFBUSxhQUFhLE9BQU8sU0FBUyxNQUFNLFFBQVEsVUFBVSxRQUFXLE9BQU8sTUFBTSxNQUFNLFdBQVcsTUFBTSxNQUFNLE9BQU87QUFBQSxRQUN4SSxDQUFDLEVBQUUsS0FBSyxXQUFZO0FBQ2xCLGdCQUFNLFNBQVM7QUFBQSxZQUNiLE1BQU07QUFBQSxZQUNOO0FBQUEsVUFDRixDQUFDO0FBRUQsZ0JBQU07QUFBQSxRQUNSLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxrQkFBa0IsU0FBUyxrQkFBa0I7QUFDbEQsVUFBSSxTQUFTLE1BQ1Q7QUFFSixXQUFLLFVBQVUsSUFBSSxRQUFRO0FBQUEsUUFDekIsSUFBSSxTQUFTLEtBQUs7QUFDaEIsY0FBSSxDQUFDLE9BQU8sUUFBUSxZQUFZO0FBQzlCLG1CQUFPLFFBQVEsT0FBTyxxQkFBcUI7QUFBQSxVQUM3QztBQUVBLGlCQUFPLE9BQU8sUUFBUSxXQUFXLE9BQU8sTUFBTSxTQUFTO0FBQUEsUUFDekQ7QUFBQSxRQUNBLFFBQVEsU0FBUyxTQUFTO0FBQ3hCLGlCQUFPLFNBQVM7QUFBQSxZQUNkLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNIO0FBQUEsUUFDQSxTQUFTLFNBQVMsVUFBVTtBQUMxQixpQkFBTyxTQUFTO0FBQUEsWUFDZCxNQUFNO0FBQUEsVUFDUixDQUFDO0FBQUEsUUFDSDtBQUFBLFFBQ0EsWUFBWSxTQUFTLGFBQWE7QUFDaEMsaUJBQU8sU0FBUztBQUFBLFlBQ2QsTUFBTTtBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0g7QUFBQSxRQUNBLFFBQVEsc0JBQXNCLEtBQUssUUFBUSxVQUFVLE9BQU8sc0JBQXNCO0FBQUEsUUFDbEYsWUFBWSxLQUFLLFFBQVE7QUFBQSxNQUMzQixDQUFDO0FBQ0QsYUFBTyxLQUFLLFFBQVE7QUFBQSxJQUN0QjtBQUVBLFdBQU8sV0FBVyxTQUFTLFNBQVMsUUFBUTtBQUMxQyxVQUFJLFNBQVM7QUFFYixXQUFLLFFBQVEsUUFBUSxLQUFLLE9BQU8sTUFBTTtBQUN2QyxvQkFBYyxNQUFNLFdBQVk7QUFDOUIsZUFBTyxVQUFVLFFBQVEsU0FBVSxVQUFVO0FBQzNDLG1CQUFTLGlCQUFpQixNQUFNO0FBQUEsUUFDbEMsQ0FBQztBQUVELGVBQU8sY0FBYyxPQUFPLE1BQU07QUFBQSxNQUNwQyxDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU9GO0FBQUEsRUFDVCxFQUFFO0FBQ0ssV0FBUyxrQkFBa0I7QUFDaEMsV0FBTztBQUFBLE1BQ0wsU0FBUztBQUFBLE1BQ1QsTUFBTTtBQUFBLE1BQ04sT0FBTztBQUFBLE1BQ1AsY0FBYztBQUFBLE1BQ2QsVUFBVTtBQUFBLE1BQ1YsUUFBUTtBQUFBLE1BQ1IsV0FBVztBQUFBLElBQ2I7QUFBQSxFQUNGO0FBRUEsV0FBUyxRQUFRLE9BQU8sUUFBUTtBQUM5QixZQUFRLE9BQU8sTUFBTTtBQUFBLE1BQ25CLEtBQUs7QUFDSCxlQUFPLFNBQVMsQ0FBQyxHQUFHLE9BQU87QUFBQSxVQUN6QixjQUFjLE1BQU0sZUFBZTtBQUFBLFFBQ3JDLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPLFNBQVMsQ0FBQyxHQUFHLE9BQU87QUFBQSxVQUN6QixVQUFVO0FBQUEsUUFDWixDQUFDO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBTyxTQUFTLENBQUMsR0FBRyxPQUFPO0FBQUEsVUFDekIsVUFBVTtBQUFBLFFBQ1osQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU8sU0FBUyxDQUFDLEdBQUcsT0FBTztBQUFBLFVBQ3pCLFNBQVMsT0FBTztBQUFBLFVBQ2hCLE1BQU07QUFBQSxVQUNOLE9BQU87QUFBQSxVQUNQLFVBQVU7QUFBQSxVQUNWLFFBQVE7QUFBQSxVQUNSLFdBQVcsT0FBTztBQUFBLFFBQ3BCLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPLFNBQVMsQ0FBQyxHQUFHLE9BQU87QUFBQSxVQUN6QixNQUFNLE9BQU87QUFBQSxVQUNiLE9BQU87QUFBQSxVQUNQLFFBQVE7QUFBQSxVQUNSLFVBQVU7QUFBQSxRQUNaLENBQUM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPLFNBQVMsQ0FBQyxHQUFHLE9BQU87QUFBQSxVQUN6QixNQUFNO0FBQUEsVUFDTixPQUFPLE9BQU87QUFBQSxVQUNkLGNBQWMsTUFBTSxlQUFlO0FBQUEsVUFDbkMsVUFBVTtBQUFBLFVBQ1YsUUFBUTtBQUFBLFFBQ1YsQ0FBQztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU8sU0FBUyxDQUFDLEdBQUcsT0FBTyxPQUFPLEtBQUs7QUFBQSxNQUV6QztBQUNFLGVBQU87QUFBQSxJQUNYO0FBQUEsRUFDRjs7O0FDaE9PLE1BQUksZ0JBQTZCLHlCQUFVLGVBQWU7QUFDL0QsbUJBQWVHLGdCQUFlLGFBQWE7QUFFM0MsYUFBU0EsZUFBYyxRQUFRO0FBQzdCLFVBQUk7QUFFSixjQUFRLGNBQWMsS0FBSyxJQUFJLEtBQUs7QUFDcEMsWUFBTSxTQUFTLFVBQVUsQ0FBQztBQUMxQixZQUFNLFlBQVksQ0FBQztBQUNuQixZQUFNLGFBQWE7QUFDbkIsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLFNBQVNBLGVBQWM7QUFFM0IsV0FBTyxRQUFRLFNBQVMsTUFBTSxRQUFRLFNBQVMsT0FBTztBQUNwRCxVQUFJLFdBQVcsSUFBSSxTQUFTO0FBQUEsUUFDMUIsZUFBZTtBQUFBLFFBQ2YsWUFBWSxFQUFFLEtBQUs7QUFBQSxRQUNuQixTQUFTLE9BQU8sdUJBQXVCLE9BQU87QUFBQSxRQUM5QztBQUFBLFFBQ0EsZ0JBQWdCLFFBQVEsY0FBYyxPQUFPLG9CQUFvQixRQUFRLFdBQVcsSUFBSTtBQUFBLFFBQ3hGLE1BQU0sUUFBUTtBQUFBLE1BQ2hCLENBQUM7QUFDRCxXQUFLLElBQUksUUFBUTtBQUNqQixhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU8sTUFBTSxTQUFTLElBQUksVUFBVTtBQUNsQyxXQUFLLFVBQVUsS0FBSyxRQUFRO0FBQzVCLFdBQUssT0FBTyxRQUFRO0FBQUEsSUFDdEI7QUFFQSxXQUFPLFNBQVMsU0FBUyxPQUFPLFVBQVU7QUFDeEMsV0FBSyxZQUFZLEtBQUssVUFBVSxPQUFPLFNBQVVDLElBQUc7QUFDbEQsZUFBT0EsT0FBTTtBQUFBLE1BQ2YsQ0FBQztBQUNELGVBQVMsT0FBTztBQUNoQixXQUFLLE9BQU8sUUFBUTtBQUFBLElBQ3RCO0FBRUEsV0FBTyxRQUFRLFNBQVMsUUFBUTtBQUM5QixVQUFJLFNBQVM7QUFFYixvQkFBYyxNQUFNLFdBQVk7QUFDOUIsZUFBTyxVQUFVLFFBQVEsU0FBVSxVQUFVO0FBQzNDLGlCQUFPLE9BQU8sUUFBUTtBQUFBLFFBQ3hCLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxTQUFTLFNBQVMsU0FBUztBQUNoQyxhQUFPLEtBQUs7QUFBQSxJQUNkO0FBRUEsV0FBTyxPQUFPLFNBQVMsS0FBSyxTQUFTO0FBQ25DLFVBQUksT0FBTyxRQUFRLFVBQVUsYUFBYTtBQUN4QyxnQkFBUSxRQUFRO0FBQUEsTUFDbEI7QUFFQSxhQUFPLEtBQUssVUFBVSxLQUFLLFNBQVUsVUFBVTtBQUM3QyxlQUFPLGNBQWMsU0FBUyxRQUFRO0FBQUEsTUFDeEMsQ0FBQztBQUFBLElBQ0g7QUFFQSxXQUFPLFVBQVUsU0FBUyxRQUFRLFNBQVM7QUFDekMsYUFBTyxLQUFLLFVBQVUsT0FBTyxTQUFVLFVBQVU7QUFDL0MsZUFBTyxjQUFjLFNBQVMsUUFBUTtBQUFBLE1BQ3hDLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxTQUFTLFNBQVMsT0FBTyxVQUFVO0FBQ3hDLFVBQUksU0FBUztBQUViLG9CQUFjLE1BQU0sV0FBWTtBQUM5QixlQUFPLFVBQVUsUUFBUSxTQUFVLFVBQVU7QUFDM0MsbUJBQVMsUUFBUTtBQUFBLFFBQ25CLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxVQUFVLFNBQVNDLFdBQVU7QUFDbEMsV0FBSyxzQkFBc0I7QUFBQSxJQUM3QjtBQUVBLFdBQU8sV0FBVyxTQUFTLFdBQVc7QUFDcEMsV0FBSyxzQkFBc0I7QUFBQSxJQUM3QjtBQUVBLFdBQU8sd0JBQXdCLFNBQVMsd0JBQXdCO0FBQzlELFVBQUksa0JBQWtCLEtBQUssVUFBVSxPQUFPLFNBQVVELElBQUc7QUFDdkQsZUFBT0EsR0FBRSxNQUFNO0FBQUEsTUFDakIsQ0FBQztBQUNELGFBQU8sY0FBYyxNQUFNLFdBQVk7QUFDckMsZUFBTyxnQkFBZ0IsT0FBTyxTQUFVLFNBQVMsVUFBVTtBQUN6RCxpQkFBTyxRQUFRLEtBQUssV0FBWTtBQUM5QixtQkFBTyxTQUFTLFNBQVMsRUFBRSxNQUFNRSxLQUFJO0FBQUEsVUFDdkMsQ0FBQztBQUFBLFFBQ0gsR0FBRyxRQUFRLFFBQVEsQ0FBQztBQUFBLE1BQ3RCLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBT0g7QUFBQSxFQUNULEVBQUUsWUFBWTs7O0FDNUdQLFdBQVMsd0JBQXdCO0FBQ3RDLFdBQU87QUFBQSxNQUNMLFNBQVMsU0FBUyxRQUFRLFNBQVM7QUFDakMsZ0JBQVEsVUFBVSxXQUFZO0FBQzVCLGNBQUksdUJBQXVCLHdCQUF3Qix3QkFBd0Isd0JBQXdCLHFCQUFxQjtBQUV4SCxjQUFJLGVBQWUsd0JBQXdCLFFBQVEsaUJBQWlCLE9BQU8sVUFBVSx5QkFBeUIsc0JBQXNCLFNBQVMsT0FBTyxTQUFTLHVCQUF1QjtBQUNwTCxjQUFJLGFBQWEseUJBQXlCLFFBQVEsaUJBQWlCLE9BQU8sVUFBVSx5QkFBeUIsdUJBQXVCLFNBQVMsT0FBTyxTQUFTLHVCQUF1QjtBQUNwTCxjQUFJLFlBQVksYUFBYSxPQUFPLFNBQVMsVUFBVTtBQUN2RCxjQUFJLHNCQUFzQixhQUFhLE9BQU8sU0FBUyxVQUFVLGVBQWU7QUFDaEYsY0FBSSwwQkFBMEIsYUFBYSxPQUFPLFNBQVMsVUFBVSxlQUFlO0FBQ3BGLGNBQUksYUFBYSxzQkFBc0IsUUFBUSxNQUFNLFNBQVMsT0FBTyxTQUFTLG9CQUFvQixVQUFVLENBQUM7QUFDN0csY0FBSSxrQkFBa0IsdUJBQXVCLFFBQVEsTUFBTSxTQUFTLE9BQU8sU0FBUyxxQkFBcUIsZUFBZSxDQUFDO0FBQ3pILGNBQUksa0JBQWtCLG1CQUFtQjtBQUN6QyxjQUFJLGNBQWMsbUJBQW1CLE9BQU8sU0FBUyxnQkFBZ0I7QUFDckUsY0FBSSxnQkFBZ0I7QUFDcEIsY0FBSSxZQUFZO0FBRWhCLGNBQUksVUFBVSxRQUFRLFFBQVEsV0FBVyxXQUFZO0FBQ25ELG1CQUFPLFFBQVEsT0FBTyxpQkFBaUI7QUFBQSxVQUN6QztBQUVBLGNBQUksZ0JBQWdCLFNBQVNJLGVBQWMsT0FBT0MsUUFBTyxNQUFNLFVBQVU7QUFDdkUsNEJBQWdCLFdBQVcsQ0FBQ0EsTUFBSyxFQUFFLE9BQU8sYUFBYSxJQUFJLENBQUMsRUFBRSxPQUFPLGVBQWUsQ0FBQ0EsTUFBSyxDQUFDO0FBQzNGLG1CQUFPLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxLQUFLLElBQUksQ0FBQyxFQUFFLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztBQUFBLFVBQ2xFO0FBR0EsY0FBSSxZQUFZLFNBQVNDLFdBQVUsT0FBT0MsU0FBUUYsUUFBTyxVQUFVO0FBQ2pFLGdCQUFJLFdBQVc7QUFDYixxQkFBTyxRQUFRLE9BQU8sV0FBVztBQUFBLFlBQ25DO0FBRUEsZ0JBQUksT0FBT0EsV0FBVSxlQUFlLENBQUNFLFdBQVUsTUFBTSxRQUFRO0FBQzNELHFCQUFPLFFBQVEsUUFBUSxLQUFLO0FBQUEsWUFDOUI7QUFFQSxnQkFBSSxpQkFBaUI7QUFBQSxjQUNuQixVQUFVLFFBQVE7QUFBQSxjQUNsQixRQUFRO0FBQUEsY0FDUixXQUFXRjtBQUFBLGNBQ1gsTUFBTSxRQUFRO0FBQUEsWUFDaEI7QUFDQSxnQkFBSSxnQkFBZ0IsUUFBUSxjQUFjO0FBQzFDLGdCQUFJRyxXQUFVLFFBQVEsUUFBUSxhQUFhLEVBQUUsS0FBSyxTQUFVLE1BQU07QUFDaEUscUJBQU8sY0FBYyxPQUFPSCxRQUFPLE1BQU0sUUFBUTtBQUFBLFlBQ25ELENBQUM7QUFFRCxnQkFBSSxhQUFhLGFBQWEsR0FBRztBQUMvQixrQkFBSSxlQUFlRztBQUNuQiwyQkFBYSxTQUFTLGNBQWM7QUFBQSxZQUN0QztBQUVBLG1CQUFPQTtBQUFBLFVBQ1Q7QUFFQSxjQUFJO0FBRUosY0FBSSxDQUFDLFNBQVMsUUFBUTtBQUNwQixzQkFBVSxVQUFVLENBQUMsQ0FBQztBQUFBLFVBQ3hCLFdBQ1Msb0JBQW9CO0FBQ3pCLGdCQUFJLFNBQVMsT0FBTyxjQUFjO0FBQ2xDLGdCQUFJLFFBQVEsU0FBUyxZQUFZLGlCQUFpQixRQUFRLFNBQVMsUUFBUTtBQUMzRSxzQkFBVSxVQUFVLFVBQVUsUUFBUSxLQUFLO0FBQUEsVUFDN0MsV0FDUyx3QkFBd0I7QUFDN0IsZ0JBQUksVUFBVSxPQUFPLGNBQWM7QUFFbkMsZ0JBQUksU0FBUyxVQUFVLFlBQVkscUJBQXFCLFFBQVEsU0FBUyxRQUFRO0FBRWpGLHNCQUFVLFVBQVUsVUFBVSxTQUFTLFFBQVEsSUFBSTtBQUFBLFVBQ3JELE9BQ0s7QUFDRCxhQUFDLFdBQVk7QUFDWCw4QkFBZ0IsQ0FBQztBQUNqQixrQkFBSUQsVUFBUyxPQUFPLFFBQVEsUUFBUSxxQkFBcUI7QUFDekQsa0JBQUksdUJBQXVCLGVBQWUsU0FBUyxDQUFDLElBQUksWUFBWSxTQUFTLENBQUMsR0FBRyxHQUFHLFFBQVEsSUFBSTtBQUVoRyx3QkFBVSx1QkFBdUIsVUFBVSxDQUFDLEdBQUdBLFNBQVEsY0FBYyxDQUFDLENBQUMsSUFBSSxRQUFRLFFBQVEsY0FBYyxDQUFDLEdBQUcsY0FBYyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUUzSSxrQkFBSSxRQUFRLFNBQVNFLE9BQU1DLElBQUc7QUFDNUIsMEJBQVUsUUFBUSxLQUFLLFNBQVUsT0FBTztBQUN0QyxzQkFBSSxzQkFBc0IsZUFBZSxTQUFTQSxFQUFDLElBQUksWUFBWSxTQUFTQSxFQUFDLEdBQUdBLElBQUcsUUFBUSxJQUFJO0FBRS9GLHNCQUFJLHFCQUFxQjtBQUN2Qix3QkFBSSxVQUFVSCxVQUFTLGNBQWNHLEVBQUMsSUFBSSxpQkFBaUIsUUFBUSxTQUFTLEtBQUs7QUFFakYsMkJBQU8sVUFBVSxPQUFPSCxTQUFRLE9BQU87QUFBQSxrQkFDekM7QUFFQSx5QkFBTyxRQUFRLFFBQVEsY0FBYyxPQUFPLGNBQWNHLEVBQUMsR0FBRyxTQUFTQSxFQUFDLENBQUMsQ0FBQztBQUFBLGdCQUM1RSxDQUFDO0FBQUEsY0FDSDtBQUVBLHVCQUFTLElBQUksR0FBRyxJQUFJLFNBQVMsUUFBUSxLQUFLO0FBQ3hDLHNCQUFNLENBQUM7QUFBQSxjQUNUO0FBQUEsWUFDRixHQUFHO0FBQUEsVUFDTDtBQUVOLGNBQUksZUFBZSxRQUFRLEtBQUssU0FBVSxPQUFPO0FBQy9DLG1CQUFPO0FBQUEsY0FDTDtBQUFBLGNBQ0EsWUFBWTtBQUFBLFlBQ2Q7QUFBQSxVQUNGLENBQUM7QUFDRCxjQUFJLG9CQUFvQjtBQUV4Qiw0QkFBa0IsU0FBUyxXQUFZO0FBQ3JDLHdCQUFZO0FBQ1osK0JBQW1CLE9BQU8sU0FBUyxnQkFBZ0IsTUFBTTtBQUV6RCxnQkFBSSxhQUFhLE9BQU8sR0FBRztBQUN6QixzQkFBUSxPQUFPO0FBQUEsWUFDakI7QUFBQSxVQUNGO0FBRUEsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ08sV0FBUyxpQkFBaUIsU0FBUyxPQUFPO0FBQy9DLFdBQU8sUUFBUSxvQkFBb0IsT0FBTyxTQUFTLFFBQVEsaUJBQWlCLE1BQU0sTUFBTSxTQUFTLENBQUMsR0FBRyxLQUFLO0FBQUEsRUFDNUc7QUFDTyxXQUFTLHFCQUFxQixTQUFTLE9BQU87QUFDbkQsV0FBTyxRQUFRLHdCQUF3QixPQUFPLFNBQVMsUUFBUSxxQkFBcUIsTUFBTSxDQUFDLEdBQUcsS0FBSztBQUFBLEVBQ3JHOzs7QUN6SE8sTUFBSSxjQUEyQiwyQkFBWTtBQUNoRCxhQUFTQyxhQUFZLFFBQVE7QUFDM0IsVUFBSSxXQUFXLFFBQVE7QUFDckIsaUJBQVMsQ0FBQztBQUFBLE1BQ1o7QUFFQSxXQUFLLGFBQWEsT0FBTyxjQUFjLElBQUksV0FBVztBQUN0RCxXQUFLLGdCQUFnQixPQUFPLGlCQUFpQixJQUFJLGNBQWM7QUFDL0QsV0FBSyxpQkFBaUIsT0FBTyxrQkFBa0IsQ0FBQztBQUNoRCxXQUFLLGdCQUFnQixDQUFDO0FBQ3RCLFdBQUssbUJBQW1CLENBQUM7QUFBQSxJQUMzQjtBQUVBLFFBQUksU0FBU0EsYUFBWTtBQUV6QixXQUFPLFFBQVEsU0FBUyxRQUFRO0FBQzlCLFVBQUksUUFBUTtBQUVaLFdBQUssbUJBQW1CLGFBQWEsVUFBVSxXQUFZO0FBQ3pELFlBQUksYUFBYSxVQUFVLEtBQUssY0FBYyxTQUFTLEdBQUc7QUFDeEQsZ0JBQU0sY0FBYyxRQUFRO0FBRTVCLGdCQUFNLFdBQVcsUUFBUTtBQUFBLFFBQzNCO0FBQUEsTUFDRixDQUFDO0FBQ0QsV0FBSyxvQkFBb0IsY0FBYyxVQUFVLFdBQVk7QUFDM0QsWUFBSSxhQUFhLFVBQVUsS0FBSyxjQUFjLFNBQVMsR0FBRztBQUN4RCxnQkFBTSxjQUFjLFNBQVM7QUFFN0IsZ0JBQU0sV0FBVyxTQUFTO0FBQUEsUUFDNUI7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxVQUFVLFNBQVMsVUFBVTtBQUNsQyxVQUFJLHVCQUF1QjtBQUUzQixPQUFDLHdCQUF3QixLQUFLLHFCQUFxQixPQUFPLFNBQVMsc0JBQXNCLEtBQUssSUFBSTtBQUNsRyxPQUFDLHdCQUF3QixLQUFLLHNCQUFzQixPQUFPLFNBQVMsc0JBQXNCLEtBQUssSUFBSTtBQUFBLElBQ3JHO0FBRUEsV0FBTyxhQUFhLFNBQVMsV0FBVyxNQUFNLE1BQU07QUFDbEQsVUFBSSxtQkFBbUIsZ0JBQWdCLE1BQU0sSUFBSSxHQUM3QyxVQUFVLGlCQUFpQixDQUFDO0FBRWhDLGNBQVEsV0FBVztBQUNuQixhQUFPLEtBQUssV0FBVyxRQUFRLE9BQU8sRUFBRTtBQUFBLElBQzFDO0FBRUEsV0FBTyxhQUFhLFNBQVMsV0FBVyxTQUFTO0FBQy9DLGFBQU8sS0FBSyxjQUFjLFFBQVEsU0FBUyxDQUFDLEdBQUcsU0FBUztBQUFBLFFBQ3RELFVBQVU7QUFBQSxNQUNaLENBQUMsQ0FBQyxFQUFFO0FBQUEsSUFDTjtBQUVBLFdBQU8sZUFBZSxTQUFTLGFBQWEsVUFBVSxTQUFTO0FBQzdELFVBQUk7QUFFSixjQUFRLHdCQUF3QixLQUFLLFdBQVcsS0FBSyxVQUFVLE9BQU8sTUFBTSxPQUFPLFNBQVMsc0JBQXNCLE1BQU07QUFBQSxJQUMxSDtBQUVBLFdBQU8saUJBQWlCLFNBQVMsZUFBZSxtQkFBbUI7QUFDakUsYUFBTyxLQUFLLGNBQWMsRUFBRSxRQUFRLGlCQUFpQixFQUFFLElBQUksU0FBVUMsUUFBTTtBQUN6RSxZQUFJLFdBQVdBLE9BQUssVUFDaEIsUUFBUUEsT0FBSztBQUNqQixZQUFJLE9BQU8sTUFBTTtBQUNqQixlQUFPLENBQUMsVUFBVSxJQUFJO0FBQUEsTUFDeEIsQ0FBQztBQUFBLElBQ0g7QUFFQSxXQUFPLGVBQWUsU0FBUyxhQUFhLFVBQVUsU0FBUyxTQUFTO0FBQ3RFLFVBQUksZ0JBQWdCLGVBQWUsUUFBUTtBQUMzQyxVQUFJLG1CQUFtQixLQUFLLG9CQUFvQixhQUFhO0FBQzdELGFBQU8sS0FBSyxXQUFXLE1BQU0sTUFBTSxnQkFBZ0IsRUFBRSxRQUFRLFNBQVMsT0FBTztBQUFBLElBQy9FO0FBRUEsV0FBTyxpQkFBaUIsU0FBUyxlQUFlLG1CQUFtQixTQUFTLFNBQVM7QUFDbkYsVUFBSSxTQUFTO0FBRWIsYUFBTyxjQUFjLE1BQU0sV0FBWTtBQUNyQyxlQUFPLE9BQU8sY0FBYyxFQUFFLFFBQVEsaUJBQWlCLEVBQUUsSUFBSSxTQUFVQyxRQUFPO0FBQzVFLGNBQUksV0FBV0EsT0FBTTtBQUNyQixpQkFBTyxDQUFDLFVBQVUsT0FBTyxhQUFhLFVBQVUsU0FBUyxPQUFPLENBQUM7QUFBQSxRQUNuRSxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU8sZ0JBQWdCLFNBQVMsY0FBYyxVQUFVLFNBQVM7QUFDL0QsVUFBSTtBQUVKLGNBQVEseUJBQXlCLEtBQUssV0FBVyxLQUFLLFVBQVUsT0FBTyxNQUFNLE9BQU8sU0FBUyx1QkFBdUI7QUFBQSxJQUN0SDtBQUVBLFdBQU8sZ0JBQWdCLFNBQVMsY0FBYyxNQUFNLE1BQU07QUFDeEQsVUFBSSxvQkFBb0IsZ0JBQWdCLE1BQU0sSUFBSSxHQUM5QyxVQUFVLGtCQUFrQixDQUFDO0FBRWpDLFVBQUksYUFBYSxLQUFLO0FBQ3RCLG9CQUFjLE1BQU0sV0FBWTtBQUM5QixtQkFBVyxRQUFRLE9BQU8sRUFBRSxRQUFRLFNBQVUsT0FBTztBQUNuRCxxQkFBVyxPQUFPLEtBQUs7QUFBQSxRQUN6QixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU8sZUFBZSxTQUFTLGFBQWEsTUFBTSxNQUFNLE1BQU07QUFDNUQsVUFBSSxTQUFTO0FBRWIsVUFBSSxvQkFBb0IsZ0JBQWdCLE1BQU0sTUFBTSxJQUFJLEdBQ3BELFVBQVUsa0JBQWtCLENBQUMsR0FDN0IsVUFBVSxrQkFBa0IsQ0FBQztBQUVqQyxVQUFJLGFBQWEsS0FBSztBQUV0QixVQUFJLGlCQUFpQixTQUFTLENBQUMsR0FBRyxTQUFTO0FBQUEsUUFDekMsUUFBUTtBQUFBLE1BQ1YsQ0FBQztBQUVELGFBQU8sY0FBYyxNQUFNLFdBQVk7QUFDckMsbUJBQVcsUUFBUSxPQUFPLEVBQUUsUUFBUSxTQUFVLE9BQU87QUFDbkQsZ0JBQU0sTUFBTTtBQUFBLFFBQ2QsQ0FBQztBQUNELGVBQU8sT0FBTyxlQUFlLGdCQUFnQixPQUFPO0FBQUEsTUFDdEQsQ0FBQztBQUFBLElBQ0g7QUFFQSxXQUFPLGdCQUFnQixTQUFTLGNBQWMsTUFBTSxNQUFNLE1BQU07QUFDOUQsVUFBSSxTQUFTO0FBRWIsVUFBSSxvQkFBb0IsZ0JBQWdCLE1BQU0sTUFBTSxJQUFJLEdBQ3BELFVBQVUsa0JBQWtCLENBQUMsR0FDN0IscUJBQXFCLGtCQUFrQixDQUFDLEdBQ3hDLGdCQUFnQix1QkFBdUIsU0FBUyxDQUFDLElBQUk7QUFFekQsVUFBSSxPQUFPLGNBQWMsV0FBVyxhQUFhO0FBQy9DLHNCQUFjLFNBQVM7QUFBQSxNQUN6QjtBQUVBLFVBQUksV0FBVyxjQUFjLE1BQU0sV0FBWTtBQUM3QyxlQUFPLE9BQU8sV0FBVyxRQUFRLE9BQU8sRUFBRSxJQUFJLFNBQVUsT0FBTztBQUM3RCxpQkFBTyxNQUFNLE9BQU8sYUFBYTtBQUFBLFFBQ25DLENBQUM7QUFBQSxNQUNILENBQUM7QUFDRCxhQUFPLFFBQVEsSUFBSSxRQUFRLEVBQUUsS0FBS0MsS0FBSSxFQUFFLE1BQU1BLEtBQUk7QUFBQSxJQUNwRDtBQUVBLFdBQU8sb0JBQW9CLFNBQVMsa0JBQWtCLE1BQU0sTUFBTSxNQUFNO0FBQ3RFLFVBQUlDLFFBQ0EsdUJBQ0EsdUJBQ0EsU0FBUztBQUViLFVBQUksb0JBQW9CLGdCQUFnQixNQUFNLE1BQU0sSUFBSSxHQUNwRCxVQUFVLGtCQUFrQixDQUFDLEdBQzdCLFVBQVUsa0JBQWtCLENBQUM7QUFFakMsVUFBSSxpQkFBaUIsU0FBUyxDQUFDLEdBQUcsU0FBUztBQUFBO0FBQUE7QUFBQSxRQUd6QyxTQUFTQSxVQUFTLHdCQUF3QixRQUFRLGtCQUFrQixPQUFPLHdCQUF3QixRQUFRLFdBQVcsT0FBT0EsU0FBUTtBQUFBLFFBQ3JJLFdBQVcsd0JBQXdCLFFBQVEsb0JBQW9CLE9BQU8sd0JBQXdCO0FBQUEsTUFDaEcsQ0FBQztBQUVELGFBQU8sY0FBYyxNQUFNLFdBQVk7QUFDckMsZUFBTyxXQUFXLFFBQVEsT0FBTyxFQUFFLFFBQVEsU0FBVSxPQUFPO0FBQzFELGdCQUFNLFdBQVc7QUFBQSxRQUNuQixDQUFDO0FBRUQsZUFBTyxPQUFPLGVBQWUsZ0JBQWdCLE9BQU87QUFBQSxNQUN0RCxDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU8saUJBQWlCLFNBQVMsZUFBZSxNQUFNLE1BQU0sTUFBTTtBQUNoRSxVQUFJLFNBQVM7QUFFYixVQUFJLG9CQUFvQixnQkFBZ0IsTUFBTSxNQUFNLElBQUksR0FDcEQsVUFBVSxrQkFBa0IsQ0FBQyxHQUM3QixVQUFVLGtCQUFrQixDQUFDO0FBRWpDLFVBQUksV0FBVyxjQUFjLE1BQU0sV0FBWTtBQUM3QyxlQUFPLE9BQU8sV0FBVyxRQUFRLE9BQU8sRUFBRSxJQUFJLFNBQVUsT0FBTztBQUM3RCxpQkFBTyxNQUFNLE1BQU0sUUFBVyxTQUFTLENBQUMsR0FBRyxTQUFTO0FBQUEsWUFDbEQsTUFBTTtBQUFBLGNBQ0osYUFBYSxXQUFXLE9BQU8sU0FBUyxRQUFRO0FBQUEsWUFDbEQ7QUFBQSxVQUNGLENBQUMsQ0FBQztBQUFBLFFBQ0osQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUNELFVBQUksVUFBVSxRQUFRLElBQUksUUFBUSxFQUFFLEtBQUtELEtBQUk7QUFFN0MsVUFBSSxFQUFFLFdBQVcsT0FBTyxTQUFTLFFBQVEsZUFBZTtBQUN0RCxrQkFBVSxRQUFRLE1BQU1BLEtBQUk7QUFBQSxNQUM5QjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTyxhQUFhLFNBQVMsV0FBVyxNQUFNLE1BQU0sTUFBTTtBQUN4RCxVQUFJLGdCQUFnQixlQUFlLE1BQU0sTUFBTSxJQUFJO0FBQ25ELFVBQUksbUJBQW1CLEtBQUssb0JBQW9CLGFBQWE7QUFFN0QsVUFBSSxPQUFPLGlCQUFpQixVQUFVLGFBQWE7QUFDakQseUJBQWlCLFFBQVE7QUFBQSxNQUMzQjtBQUVBLFVBQUksUUFBUSxLQUFLLFdBQVcsTUFBTSxNQUFNLGdCQUFnQjtBQUN4RCxhQUFPLE1BQU0sY0FBYyxpQkFBaUIsU0FBUyxJQUFJLE1BQU0sTUFBTSxnQkFBZ0IsSUFBSSxRQUFRLFFBQVEsTUFBTSxNQUFNLElBQUk7QUFBQSxJQUMzSDtBQUVBLFdBQU8sZ0JBQWdCLFNBQVMsY0FBYyxNQUFNLE1BQU0sTUFBTTtBQUM5RCxhQUFPLEtBQUssV0FBVyxNQUFNLE1BQU0sSUFBSSxFQUFFLEtBQUtBLEtBQUksRUFBRSxNQUFNQSxLQUFJO0FBQUEsSUFDaEU7QUFFQSxXQUFPLHFCQUFxQixTQUFTLG1CQUFtQixNQUFNLE1BQU0sTUFBTTtBQUN4RSxVQUFJLGdCQUFnQixlQUFlLE1BQU0sTUFBTSxJQUFJO0FBQ25ELG9CQUFjLFdBQVcsc0JBQXNCO0FBQy9DLGFBQU8sS0FBSyxXQUFXLGFBQWE7QUFBQSxJQUN0QztBQUVBLFdBQU8sd0JBQXdCLFNBQVMsc0JBQXNCLE1BQU0sTUFBTSxNQUFNO0FBQzlFLGFBQU8sS0FBSyxtQkFBbUIsTUFBTSxNQUFNLElBQUksRUFBRSxLQUFLQSxLQUFJLEVBQUUsTUFBTUEsS0FBSTtBQUFBLElBQ3hFO0FBRUEsV0FBTyxrQkFBa0IsU0FBUyxrQkFBa0I7QUFDbEQsVUFBSSxTQUFTO0FBRWIsVUFBSSxXQUFXLGNBQWMsTUFBTSxXQUFZO0FBQzdDLGVBQU8sT0FBTyxjQUFjLE9BQU8sRUFBRSxJQUFJLFNBQVUsVUFBVTtBQUMzRCxpQkFBTyxTQUFTLE9BQU87QUFBQSxRQUN6QixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQ0QsYUFBTyxRQUFRLElBQUksUUFBUSxFQUFFLEtBQUtBLEtBQUksRUFBRSxNQUFNQSxLQUFJO0FBQUEsSUFDcEQ7QUFFQSxXQUFPLHdCQUF3QixTQUFTLHdCQUF3QjtBQUM5RCxhQUFPLEtBQUssaUJBQWlCLEVBQUUsc0JBQXNCO0FBQUEsSUFDdkQ7QUFFQSxXQUFPLGtCQUFrQixTQUFTLGdCQUFnQixTQUFTO0FBQ3pELGFBQU8sS0FBSyxjQUFjLE1BQU0sTUFBTSxPQUFPLEVBQUUsUUFBUTtBQUFBLElBQ3pEO0FBRUEsV0FBTyxnQkFBZ0IsU0FBUyxnQkFBZ0I7QUFDOUMsYUFBTyxLQUFLO0FBQUEsSUFDZDtBQUVBLFdBQU8sbUJBQW1CLFNBQVMsbUJBQW1CO0FBQ3BELGFBQU8sS0FBSztBQUFBLElBQ2Q7QUFFQSxXQUFPLG9CQUFvQixTQUFTLG9CQUFvQjtBQUN0RCxhQUFPLEtBQUs7QUFBQSxJQUNkO0FBRUEsV0FBTyxvQkFBb0IsU0FBUyxrQkFBa0IsU0FBUztBQUM3RCxXQUFLLGlCQUFpQjtBQUFBLElBQ3hCO0FBRUEsV0FBTyxtQkFBbUIsU0FBUyxpQkFBaUIsVUFBVSxTQUFTO0FBQ3JFLFVBQUksU0FBUyxLQUFLLGNBQWMsS0FBSyxTQUFVRSxJQUFHO0FBQ2hELGVBQU8sYUFBYSxRQUFRLE1BQU0sYUFBYUEsR0FBRSxRQUFRO0FBQUEsTUFDM0QsQ0FBQztBQUVELFVBQUksUUFBUTtBQUNWLGVBQU8saUJBQWlCO0FBQUEsTUFDMUIsT0FBTztBQUNMLGFBQUssY0FBYyxLQUFLO0FBQUEsVUFDdEI7QUFBQSxVQUNBLGdCQUFnQjtBQUFBLFFBQ2xCLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUVBLFdBQU8sbUJBQW1CLFNBQVMsaUJBQWlCLFVBQVU7QUFDNUQsVUFBSTtBQUVKLGFBQU8sWUFBWSx3QkFBd0IsS0FBSyxjQUFjLEtBQUssU0FBVUEsSUFBRztBQUM5RSxlQUFPLGdCQUFnQixVQUFVQSxHQUFFLFFBQVE7QUFBQSxNQUM3QyxDQUFDLE1BQU0sT0FBTyxTQUFTLHNCQUFzQixpQkFBaUI7QUFBQSxJQUNoRTtBQUVBLFdBQU8sc0JBQXNCLFNBQVMsb0JBQW9CLGFBQWEsU0FBUztBQUM5RSxVQUFJLFNBQVMsS0FBSyxpQkFBaUIsS0FBSyxTQUFVQSxJQUFHO0FBQ25ELGVBQU8sYUFBYSxXQUFXLE1BQU0sYUFBYUEsR0FBRSxXQUFXO0FBQUEsTUFDakUsQ0FBQztBQUVELFVBQUksUUFBUTtBQUNWLGVBQU8saUJBQWlCO0FBQUEsTUFDMUIsT0FBTztBQUNMLGFBQUssaUJBQWlCLEtBQUs7QUFBQSxVQUN6QjtBQUFBLFVBQ0EsZ0JBQWdCO0FBQUEsUUFDbEIsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBRUEsV0FBTyxzQkFBc0IsU0FBUyxvQkFBb0IsYUFBYTtBQUNyRSxVQUFJO0FBRUosYUFBTyxlQUFlLHdCQUF3QixLQUFLLGlCQUFpQixLQUFLLFNBQVVBLElBQUc7QUFDcEYsZUFBTyxnQkFBZ0IsYUFBYUEsR0FBRSxXQUFXO0FBQUEsTUFDbkQsQ0FBQyxNQUFNLE9BQU8sU0FBUyxzQkFBc0IsaUJBQWlCO0FBQUEsSUFDaEU7QUFFQSxXQUFPLHNCQUFzQixTQUFTLG9CQUFvQixTQUFTO0FBQ2pFLFVBQUksV0FBVyxPQUFPLFNBQVMsUUFBUSxZQUFZO0FBQ2pELGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSSxtQkFBbUIsU0FBUyxDQUFDLEdBQUcsS0FBSyxlQUFlLFNBQVMsS0FBSyxpQkFBaUIsV0FBVyxPQUFPLFNBQVMsUUFBUSxRQUFRLEdBQUcsU0FBUztBQUFBLFFBQzVJLFlBQVk7QUFBQSxNQUNkLENBQUM7QUFFRCxVQUFJLENBQUMsaUJBQWlCLGFBQWEsaUJBQWlCLFVBQVU7QUFDNUQseUJBQWlCLFlBQVksc0JBQXNCLGlCQUFpQixVQUFVLGdCQUFnQjtBQUFBLE1BQ2hHO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxXQUFPLDhCQUE4QixTQUFTLDRCQUE0QixTQUFTO0FBQ2pGLGFBQU8sS0FBSyxvQkFBb0IsT0FBTztBQUFBLElBQ3pDO0FBRUEsV0FBTyx5QkFBeUIsU0FBUyx1QkFBdUIsU0FBUztBQUN2RSxVQUFJLFdBQVcsT0FBTyxTQUFTLFFBQVEsWUFBWTtBQUNqRCxlQUFPO0FBQUEsTUFDVDtBQUVBLGFBQU8sU0FBUyxDQUFDLEdBQUcsS0FBSyxlQUFlLFdBQVcsS0FBSyxvQkFBb0IsV0FBVyxPQUFPLFNBQVMsUUFBUSxXQUFXLEdBQUcsU0FBUztBQUFBLFFBQ3BJLFlBQVk7QUFBQSxNQUNkLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxRQUFRLFNBQVMsUUFBUTtBQUM5QixXQUFLLFdBQVcsTUFBTTtBQUN0QixXQUFLLGNBQWMsTUFBTTtBQUFBLElBQzNCO0FBRUEsV0FBT0w7QUFBQSxFQUNULEVBQUU7OztBQ3JWSyxNQUFJLGdCQUE2Qix5QkFBVSxlQUFlO0FBQy9ELG1CQUFlTSxnQkFBZSxhQUFhO0FBRTNDLGFBQVNBLGVBQWMsUUFBUSxTQUFTO0FBQ3RDLFVBQUk7QUFFSixjQUFRLGNBQWMsS0FBSyxJQUFJLEtBQUs7QUFDcEMsWUFBTSxTQUFTO0FBQ2YsWUFBTSxVQUFVO0FBQ2hCLFlBQU0sZUFBZSxDQUFDO0FBQ3RCLFlBQU0sY0FBYztBQUVwQixZQUFNLFlBQVk7QUFFbEIsWUFBTSxXQUFXLE9BQU87QUFFeEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLFNBQVNBLGVBQWM7QUFFM0IsV0FBTyxjQUFjLFNBQVMsY0FBYztBQUMxQyxXQUFLLFNBQVMsS0FBSyxPQUFPLEtBQUssSUFBSTtBQUNuQyxXQUFLLFVBQVUsS0FBSyxRQUFRLEtBQUssSUFBSTtBQUFBLElBQ3ZDO0FBRUEsV0FBTyxjQUFjLFNBQVMsY0FBYztBQUMxQyxVQUFJLEtBQUssVUFBVSxXQUFXLEdBQUc7QUFDL0IsYUFBSyxhQUFhLFlBQVksSUFBSTtBQUVsQyxZQUFJLG1CQUFtQixLQUFLLGNBQWMsS0FBSyxPQUFPLEdBQUc7QUFDdkQsZUFBSyxhQUFhO0FBQUEsUUFDcEI7QUFFQSxhQUFLLGFBQWE7QUFBQSxNQUNwQjtBQUFBLElBQ0Y7QUFFQSxXQUFPLGdCQUFnQixTQUFTLGdCQUFnQjtBQUM5QyxVQUFJLENBQUMsS0FBSyxVQUFVLFFBQVE7QUFDMUIsYUFBSyxRQUFRO0FBQUEsTUFDZjtBQUFBLElBQ0Y7QUFFQSxXQUFPLHlCQUF5QixTQUFTLHlCQUF5QjtBQUNoRSxhQUFPLGNBQWMsS0FBSyxjQUFjLEtBQUssU0FBUyxLQUFLLFFBQVEsa0JBQWtCO0FBQUEsSUFDdkY7QUFFQSxXQUFPLDJCQUEyQixTQUFTLDJCQUEyQjtBQUNwRSxhQUFPLGNBQWMsS0FBSyxjQUFjLEtBQUssU0FBUyxLQUFLLFFBQVEsb0JBQW9CO0FBQUEsSUFDekY7QUFFQSxXQUFPLFVBQVUsU0FBUyxVQUFVO0FBQ2xDLFdBQUssWUFBWSxDQUFDO0FBQ2xCLFdBQUssWUFBWTtBQUNqQixXQUFLLGFBQWEsZUFBZSxJQUFJO0FBQUEsSUFDdkM7QUFFQSxXQUFPLGFBQWEsU0FBUyxXQUFXLFNBQVMsZUFBZTtBQUM5RCxVQUFJLGNBQWMsS0FBSztBQUN2QixVQUFJLFlBQVksS0FBSztBQUNyQixXQUFLLFVBQVUsS0FBSyxPQUFPLDRCQUE0QixPQUFPO0FBRTlELFVBQUksT0FBTyxLQUFLLFFBQVEsWUFBWSxlQUFlLE9BQU8sS0FBSyxRQUFRLFlBQVksV0FBVztBQUM1RixjQUFNLElBQUksTUFBTSxrQ0FBa0M7QUFBQSxNQUNwRDtBQUdBLFVBQUksQ0FBQyxLQUFLLFFBQVEsVUFBVTtBQUMxQixhQUFLLFFBQVEsV0FBVyxZQUFZO0FBQUEsTUFDdEM7QUFFQSxXQUFLLFlBQVk7QUFDakIsVUFBSSxVQUFVLEtBQUssYUFBYTtBQUVoQyxVQUFJLFdBQVcsc0JBQXNCLEtBQUssY0FBYyxXQUFXLEtBQUssU0FBUyxXQUFXLEdBQUc7QUFDN0YsYUFBSyxhQUFhO0FBQUEsTUFDcEI7QUFHQSxXQUFLLGFBQWEsYUFBYTtBQUUvQixVQUFJLFlBQVksS0FBSyxpQkFBaUIsYUFBYSxLQUFLLFFBQVEsWUFBWSxZQUFZLFdBQVcsS0FBSyxRQUFRLGNBQWMsWUFBWSxZQUFZO0FBQ3BKLGFBQUssbUJBQW1CO0FBQUEsTUFDMUI7QUFFQSxVQUFJLHNCQUFzQixLQUFLLHVCQUF1QjtBQUV0RCxVQUFJLFlBQVksS0FBSyxpQkFBaUIsYUFBYSxLQUFLLFFBQVEsWUFBWSxZQUFZLFdBQVcsd0JBQXdCLEtBQUsseUJBQXlCO0FBQ3ZKLGFBQUssc0JBQXNCLG1CQUFtQjtBQUFBLE1BQ2hEO0FBQUEsSUFDRjtBQUVBLFdBQU8sc0JBQXNCLFNBQVMsb0JBQW9CLFNBQVM7QUFDakUsVUFBSSxtQkFBbUIsS0FBSyxPQUFPLDRCQUE0QixPQUFPO0FBQ3RFLFVBQUksUUFBUSxLQUFLLE9BQU8sY0FBYyxFQUFFLE1BQU0sS0FBSyxRQUFRLGdCQUFnQjtBQUMzRSxhQUFPLEtBQUssYUFBYSxPQUFPLGdCQUFnQjtBQUFBLElBQ2xEO0FBRUEsV0FBTyxtQkFBbUIsU0FBUyxtQkFBbUI7QUFDcEQsYUFBTyxLQUFLO0FBQUEsSUFDZDtBQUVBLFdBQU8sY0FBYyxTQUFTLFlBQVksUUFBUSxrQkFBa0I7QUFDbEUsVUFBSSxTQUFTO0FBRWIsVUFBSSxnQkFBZ0IsQ0FBQztBQUVyQixVQUFJLFlBQVksU0FBU0MsV0FBVSxLQUFLO0FBQ3RDLFlBQUksQ0FBQyxPQUFPLGFBQWEsU0FBUyxHQUFHLEdBQUc7QUFDdEMsaUJBQU8sYUFBYSxLQUFLLEdBQUc7QUFBQSxRQUM5QjtBQUFBLE1BQ0Y7QUFFQSxhQUFPLEtBQUssTUFBTSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ3pDLGVBQU8sZUFBZSxlQUFlLEtBQUs7QUFBQSxVQUN4QyxjQUFjO0FBQUEsVUFDZCxZQUFZO0FBQUEsVUFDWixLQUFLLFNBQVNDLE9BQU07QUFDbEIsc0JBQVUsR0FBRztBQUNiLG1CQUFPLE9BQU8sR0FBRztBQUFBLFVBQ25CO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsVUFBSSxpQkFBaUIsb0JBQW9CLGlCQUFpQixVQUFVO0FBQ2xFLGtCQUFVLE9BQU87QUFBQSxNQUNuQjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTyxnQkFBZ0IsU0FBUyxjQUFjLFNBQVM7QUFDckQsVUFBSSxTQUFTO0FBRWIsYUFBTyxJQUFJLFFBQVEsU0FBVSxTQUFTLFFBQVE7QUFDNUMsWUFBSSxjQUFjLE9BQU8sVUFBVSxTQUFVLFFBQVE7QUFDbkQsY0FBSSxDQUFDLE9BQU8sWUFBWTtBQUN0Qix3QkFBWTtBQUVaLGdCQUFJLE9BQU8sWUFBWSxXQUFXLE9BQU8sU0FBUyxRQUFRLGVBQWU7QUFDdkUscUJBQU8sT0FBTyxLQUFLO0FBQUEsWUFDckIsT0FBTztBQUNMLHNCQUFRLE1BQU07QUFBQSxZQUNoQjtBQUFBLFVBQ0Y7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxrQkFBa0IsU0FBUyxrQkFBa0I7QUFDbEQsYUFBTyxLQUFLO0FBQUEsSUFDZDtBQUVBLFdBQU8sU0FBUyxTQUFTLFNBQVM7QUFDaEMsV0FBSyxPQUFPLGNBQWMsRUFBRSxPQUFPLEtBQUssWUFBWTtBQUFBLElBQ3REO0FBRUEsV0FBTyxVQUFVLFNBQVMsUUFBUSxTQUFTO0FBQ3pDLGFBQU8sS0FBSyxNQUFNLFNBQVMsQ0FBQyxHQUFHLFNBQVM7QUFBQSxRQUN0QyxNQUFNO0FBQUEsVUFDSixhQUFhLFdBQVcsT0FBTyxTQUFTLFFBQVE7QUFBQSxRQUNsRDtBQUFBLE1BQ0YsQ0FBQyxDQUFDO0FBQUEsSUFDSjtBQUVBLFdBQU8sa0JBQWtCLFNBQVMsZ0JBQWdCLFNBQVM7QUFDekQsVUFBSSxTQUFTO0FBRWIsVUFBSSxtQkFBbUIsS0FBSyxPQUFPLDRCQUE0QixPQUFPO0FBQ3RFLFVBQUksUUFBUSxLQUFLLE9BQU8sY0FBYyxFQUFFLE1BQU0sS0FBSyxRQUFRLGdCQUFnQjtBQUMzRSxhQUFPLE1BQU0sTUFBTSxFQUFFLEtBQUssV0FBWTtBQUNwQyxlQUFPLE9BQU8sYUFBYSxPQUFPLGdCQUFnQjtBQUFBLE1BQ3BELENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxRQUFRLFNBQVNDLE9BQU0sY0FBYztBQUMxQyxVQUFJLFNBQVM7QUFFYixhQUFPLEtBQUssYUFBYSxZQUFZLEVBQUUsS0FBSyxXQUFZO0FBQ3RELGVBQU8sYUFBYTtBQUVwQixlQUFPLE9BQU87QUFBQSxNQUNoQixDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU8sZUFBZSxTQUFTLGFBQWEsY0FBYztBQUV4RCxXQUFLLFlBQVk7QUFFakIsVUFBSSxVQUFVLEtBQUssYUFBYSxNQUFNLEtBQUssU0FBUyxZQUFZO0FBRWhFLFVBQUksRUFBRSxnQkFBZ0IsT0FBTyxTQUFTLGFBQWEsZUFBZTtBQUNoRSxrQkFBVSxRQUFRLE1BQU1DLEtBQUk7QUFBQSxNQUM5QjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTyxxQkFBcUIsU0FBUyxxQkFBcUI7QUFDeEQsVUFBSSxTQUFTO0FBRWIsV0FBSyxrQkFBa0I7QUFFdkIsVUFBSSxZQUFZLEtBQUssY0FBYyxXQUFXLENBQUMsZUFBZSxLQUFLLFFBQVEsU0FBUyxHQUFHO0FBQ3JGO0FBQUEsTUFDRjtBQUVBLFVBQUksT0FBTyxlQUFlLEtBQUssY0FBYyxlQUFlLEtBQUssUUFBUSxTQUFTO0FBR2xGLFVBQUksVUFBVSxPQUFPO0FBQ3JCLFdBQUssaUJBQWlCLFdBQVcsV0FBWTtBQUMzQyxZQUFJLENBQUMsT0FBTyxjQUFjLFNBQVM7QUFDakMsaUJBQU8sYUFBYTtBQUFBLFFBQ3RCO0FBQUEsTUFDRixHQUFHLE9BQU87QUFBQSxJQUNaO0FBRUEsV0FBTyx5QkFBeUIsU0FBUyx5QkFBeUI7QUFDaEUsVUFBSTtBQUVKLGFBQU8sT0FBTyxLQUFLLFFBQVEsb0JBQW9CLGFBQWEsS0FBSyxRQUFRLGdCQUFnQixLQUFLLGNBQWMsTUFBTSxLQUFLLFlBQVksS0FBSyx3QkFBd0IsS0FBSyxRQUFRLG9CQUFvQixPQUFPLHdCQUF3QjtBQUFBLElBQ2xPO0FBRUEsV0FBTyx3QkFBd0IsU0FBUyxzQkFBc0IsY0FBYztBQUMxRSxVQUFJLFNBQVM7QUFFYixXQUFLLHFCQUFxQjtBQUMxQixXQUFLLHlCQUF5QjtBQUU5QixVQUFJLFlBQVksS0FBSyxRQUFRLFlBQVksU0FBUyxDQUFDLGVBQWUsS0FBSyxzQkFBc0IsS0FBSyxLQUFLLDJCQUEyQixHQUFHO0FBQ25JO0FBQUEsTUFDRjtBQUVBLFdBQUssb0JBQW9CLFlBQVksV0FBWTtBQUMvQyxZQUFJLE9BQU8sUUFBUSwrQkFBK0IsYUFBYSxVQUFVLEdBQUc7QUFDMUUsaUJBQU8sYUFBYTtBQUFBLFFBQ3RCO0FBQUEsTUFDRixHQUFHLEtBQUssc0JBQXNCO0FBQUEsSUFDaEM7QUFFQSxXQUFPLGVBQWUsU0FBUyxlQUFlO0FBQzVDLFdBQUssbUJBQW1CO0FBQ3hCLFdBQUssc0JBQXNCLEtBQUssdUJBQXVCLENBQUM7QUFBQSxJQUMxRDtBQUVBLFdBQU8sY0FBYyxTQUFTLGNBQWM7QUFDMUMsV0FBSyxrQkFBa0I7QUFDdkIsV0FBSyxxQkFBcUI7QUFBQSxJQUM1QjtBQUVBLFdBQU8sb0JBQW9CLFNBQVMsb0JBQW9CO0FBQ3RELFVBQUksS0FBSyxnQkFBZ0I7QUFDdkIscUJBQWEsS0FBSyxjQUFjO0FBQ2hDLGFBQUssaUJBQWlCO0FBQUEsTUFDeEI7QUFBQSxJQUNGO0FBRUEsV0FBTyx1QkFBdUIsU0FBUyx1QkFBdUI7QUFDNUQsVUFBSSxLQUFLLG1CQUFtQjtBQUMxQixzQkFBYyxLQUFLLGlCQUFpQjtBQUNwQyxhQUFLLG9CQUFvQjtBQUFBLE1BQzNCO0FBQUEsSUFDRjtBQUVBLFdBQU8sZUFBZSxTQUFTLGFBQWEsT0FBTyxTQUFTO0FBQzFELFVBQUksWUFBWSxLQUFLO0FBQ3JCLFVBQUksY0FBYyxLQUFLO0FBQ3ZCLFVBQUksYUFBYSxLQUFLO0FBQ3RCLFVBQUksa0JBQWtCLEtBQUs7QUFDM0IsVUFBSSxvQkFBb0IsS0FBSztBQUM3QixVQUFJLGNBQWMsVUFBVTtBQUM1QixVQUFJLG9CQUFvQixjQUFjLE1BQU0sUUFBUSxLQUFLO0FBQ3pELFVBQUksa0JBQWtCLGNBQWMsS0FBSyxnQkFBZ0IsS0FBSztBQUM5RCxVQUFJLFFBQVEsTUFBTTtBQUNsQixVQUFJLGdCQUFnQixNQUFNLGVBQ3RCLFFBQVEsTUFBTSxPQUNkLGlCQUFpQixNQUFNLGdCQUN2QixhQUFhLE1BQU0sWUFDbkIsU0FBUyxNQUFNO0FBQ25CLFVBQUksaUJBQWlCO0FBQ3JCLFVBQUksb0JBQW9CO0FBQ3hCLFVBQUk7QUFFSixVQUFJLFFBQVEsbUJBQW1CO0FBQzdCLFlBQUksVUFBVSxLQUFLLGFBQWE7QUFDaEMsWUFBSSxlQUFlLENBQUMsV0FBVyxtQkFBbUIsT0FBTyxPQUFPO0FBQ2hFLFlBQUksa0JBQWtCLFdBQVcsc0JBQXNCLE9BQU8sV0FBVyxTQUFTLFdBQVc7QUFFN0YsWUFBSSxnQkFBZ0IsaUJBQWlCO0FBQ25DLHVCQUFhO0FBRWIsY0FBSSxDQUFDLGVBQWU7QUFDbEIscUJBQVM7QUFBQSxVQUNYO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFHQSxVQUFJLFFBQVEsb0JBQW9CLENBQUMsTUFBTSxvQkFBb0IsbUJBQW1CLE9BQU8sU0FBUyxnQkFBZ0IsY0FBYyxXQUFXLFNBQVM7QUFDOUksZUFBTyxnQkFBZ0I7QUFDdkIsd0JBQWdCLGdCQUFnQjtBQUNoQyxpQkFBUyxnQkFBZ0I7QUFDekIseUJBQWlCO0FBQUEsTUFDbkIsV0FDUyxRQUFRLFVBQVUsT0FBTyxNQUFNLFNBQVMsYUFBYTtBQUUxRCxZQUFJLGNBQWMsTUFBTSxVQUFVLG1CQUFtQixPQUFPLFNBQVMsZ0JBQWdCLFNBQVMsUUFBUSxXQUFXLEtBQUssVUFBVTtBQUM5SCxpQkFBTyxLQUFLO0FBQUEsUUFDZCxPQUFPO0FBQ0wsY0FBSTtBQUNGLGlCQUFLLFdBQVcsUUFBUTtBQUN4QixtQkFBTyxRQUFRLE9BQU8sTUFBTSxJQUFJO0FBRWhDLGdCQUFJLFFBQVEsc0JBQXNCLE9BQU87QUFDdkMscUJBQU8saUJBQWlCLGNBQWMsT0FBTyxTQUFTLFdBQVcsTUFBTSxJQUFJO0FBQUEsWUFDN0U7QUFFQSxpQkFBSyxlQUFlO0FBQ3BCLGlCQUFLLGNBQWM7QUFBQSxVQUNyQixTQUFTLGFBQWE7QUFDcEIsc0JBQVUsRUFBRSxNQUFNLFdBQVc7QUFDN0IsaUJBQUssY0FBYztBQUFBLFVBQ3JCO0FBQUEsUUFDRjtBQUFBLE1BQ0YsT0FDSztBQUNELGVBQU8sTUFBTTtBQUFBLE1BQ2Y7QUFHSixVQUFJLE9BQU8sUUFBUSxvQkFBb0IsZUFBZSxPQUFPLFNBQVMsZ0JBQWdCLFdBQVcsYUFBYSxXQUFXLFNBQVM7QUFDaEksWUFBSTtBQUVKLGFBQUssY0FBYyxPQUFPLFNBQVMsV0FBVyxzQkFBc0IsUUFBUSxxQkFBcUIscUJBQXFCLE9BQU8sU0FBUyxrQkFBa0Isa0JBQWtCO0FBQ3hLLDRCQUFrQixXQUFXO0FBQUEsUUFDL0IsT0FBTztBQUNMLDRCQUFrQixPQUFPLFFBQVEsb0JBQW9CLGFBQWEsUUFBUSxnQkFBZ0IsSUFBSSxRQUFRO0FBRXRHLGNBQUksUUFBUSxVQUFVLE9BQU8sb0JBQW9CLGFBQWE7QUFDNUQsZ0JBQUk7QUFDRixnQ0FBa0IsUUFBUSxPQUFPLGVBQWU7QUFFaEQsa0JBQUksUUFBUSxzQkFBc0IsT0FBTztBQUN2QyxrQ0FBa0IsaUJBQWlCLGNBQWMsT0FBTyxTQUFTLFdBQVcsTUFBTSxlQUFlO0FBQUEsY0FDbkc7QUFFQSxtQkFBSyxjQUFjO0FBQUEsWUFDckIsU0FBUyxhQUFhO0FBQ3BCLHdCQUFVLEVBQUUsTUFBTSxXQUFXO0FBQzdCLG1CQUFLLGNBQWM7QUFBQSxZQUNyQjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsWUFBSSxPQUFPLG9CQUFvQixhQUFhO0FBQzFDLG1CQUFTO0FBQ1QsaUJBQU87QUFDUCw4QkFBb0I7QUFBQSxRQUN0QjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLEtBQUssYUFBYTtBQUNwQixnQkFBUSxLQUFLO0FBQ2IsZUFBTyxLQUFLO0FBQ1oseUJBQWlCLEtBQUssSUFBSTtBQUMxQixpQkFBUztBQUFBLE1BQ1g7QUFFQSxVQUFJLFNBQVM7QUFBQSxRQUNYO0FBQUEsUUFDQSxXQUFXLFdBQVc7QUFBQSxRQUN0QixXQUFXLFdBQVc7QUFBQSxRQUN0QixTQUFTLFdBQVc7QUFBQSxRQUNwQixRQUFRLFdBQVc7QUFBQSxRQUNuQjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsY0FBYyxNQUFNO0FBQUEsUUFDcEIsa0JBQWtCLE1BQU07QUFBQSxRQUN4QixXQUFXLE1BQU0sa0JBQWtCLEtBQUssTUFBTSxtQkFBbUI7QUFBQSxRQUNqRSxxQkFBcUIsTUFBTSxrQkFBa0Isa0JBQWtCLG1CQUFtQixNQUFNLG1CQUFtQixrQkFBa0I7QUFBQSxRQUM3SDtBQUFBLFFBQ0EsY0FBYyxjQUFjLFdBQVc7QUFBQSxRQUN2QyxnQkFBZ0IsV0FBVyxXQUFXLE1BQU0sa0JBQWtCO0FBQUEsUUFDOUQ7QUFBQSxRQUNBO0FBQUEsUUFDQSxnQkFBZ0IsV0FBVyxXQUFXLE1BQU0sa0JBQWtCO0FBQUEsUUFDOUQsU0FBUyxRQUFRLE9BQU8sT0FBTztBQUFBLFFBQy9CLFNBQVMsS0FBSztBQUFBLFFBQ2QsUUFBUSxLQUFLO0FBQUEsTUFDZjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTyx3QkFBd0IsU0FBUyxzQkFBc0IsUUFBUSxZQUFZO0FBQ2hGLFVBQUksQ0FBQyxZQUFZO0FBQ2YsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJLGdCQUFnQixLQUFLLFNBQ3JCLHNCQUFzQixjQUFjLHFCQUNwQyxnQ0FBZ0MsY0FBYztBQUVsRCxVQUFJLENBQUMsdUJBQXVCLENBQUMsK0JBQStCO0FBQzFELGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSSx3QkFBd0IsYUFBYSxDQUFDLEtBQUssYUFBYSxRQUFRO0FBQ2xFLGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSSxnQkFBZ0Isd0JBQXdCLFlBQVksS0FBSyxlQUFlO0FBQzVFLGFBQU8sT0FBTyxLQUFLLE1BQU0sRUFBRSxLQUFLLFNBQVUsS0FBSztBQUM3QyxZQUFJLFdBQVc7QUFDZixZQUFJLFVBQVUsT0FBTyxRQUFRLE1BQU0sV0FBVyxRQUFRO0FBQ3RELFlBQUksYUFBYSxpQkFBaUIsT0FBTyxTQUFTLGNBQWMsS0FBSyxTQUFVQyxJQUFHO0FBQ2hGLGlCQUFPQSxPQUFNO0FBQUEsUUFDZixDQUFDO0FBQ0QsWUFBSSxhQUFhLGlDQUFpQyxPQUFPLFNBQVMsOEJBQThCLEtBQUssU0FBVUEsSUFBRztBQUNoSCxpQkFBT0EsT0FBTTtBQUFBLFFBQ2YsQ0FBQztBQUNELGVBQU8sV0FBVyxDQUFDLGVBQWUsQ0FBQyxpQkFBaUI7QUFBQSxNQUN0RCxDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU8sZUFBZSxTQUFTLGFBQWEsZUFBZTtBQUN6RCxVQUFJLGFBQWEsS0FBSztBQUN0QixXQUFLLGdCQUFnQixLQUFLLGFBQWEsS0FBSyxjQUFjLEtBQUssT0FBTztBQUN0RSxXQUFLLHFCQUFxQixLQUFLLGFBQWE7QUFDNUMsV0FBSyx1QkFBdUIsS0FBSztBQUVqQyxVQUFJLG9CQUFvQixLQUFLLGVBQWUsVUFBVSxHQUFHO0FBQ3ZEO0FBQUEsTUFDRjtBQUdBLFVBQUksdUJBQXVCO0FBQUEsUUFDekIsT0FBTztBQUFBLE1BQ1Q7QUFFQSxXQUFLLGlCQUFpQixPQUFPLFNBQVMsY0FBYyxlQUFlLFNBQVMsS0FBSyxzQkFBc0IsS0FBSyxlQUFlLFVBQVUsR0FBRztBQUN0SSw2QkFBcUIsWUFBWTtBQUFBLE1BQ25DO0FBRUEsV0FBSyxPQUFPLFNBQVMsQ0FBQyxHQUFHLHNCQUFzQixhQUFhLENBQUM7QUFBQSxJQUMvRDtBQUVBLFdBQU8sY0FBYyxTQUFTLGNBQWM7QUFDMUMsVUFBSSxRQUFRLEtBQUssT0FBTyxjQUFjLEVBQUUsTUFBTSxLQUFLLFFBQVEsS0FBSyxPQUFPO0FBRXZFLFVBQUksVUFBVSxLQUFLLGNBQWM7QUFDL0I7QUFBQSxNQUNGO0FBRUEsVUFBSSxZQUFZLEtBQUs7QUFDckIsV0FBSyxlQUFlO0FBQ3BCLFdBQUssMkJBQTJCLE1BQU07QUFDdEMsV0FBSyxzQkFBc0IsS0FBSztBQUVoQyxVQUFJLEtBQUssYUFBYSxHQUFHO0FBQ3ZCLHFCQUFhLE9BQU8sU0FBUyxVQUFVLGVBQWUsSUFBSTtBQUMxRCxjQUFNLFlBQVksSUFBSTtBQUFBLE1BQ3hCO0FBQUEsSUFDRjtBQUVBLFdBQU8sZ0JBQWdCLFNBQVMsY0FBYyxRQUFRO0FBQ3BELFVBQUksZ0JBQWdCLENBQUM7QUFFckIsVUFBSSxPQUFPLFNBQVMsV0FBVztBQUM3QixzQkFBYyxZQUFZO0FBQUEsTUFDNUIsV0FBVyxPQUFPLFNBQVMsV0FBVyxDQUFDLGlCQUFpQixPQUFPLEtBQUssR0FBRztBQUNyRSxzQkFBYyxVQUFVO0FBQUEsTUFDMUI7QUFFQSxXQUFLLGFBQWEsYUFBYTtBQUUvQixVQUFJLEtBQUssYUFBYSxHQUFHO0FBQ3ZCLGFBQUssYUFBYTtBQUFBLE1BQ3BCO0FBQUEsSUFDRjtBQUVBLFdBQU8sU0FBUyxTQUFTLE9BQU8sZUFBZTtBQUM3QyxVQUFJLFNBQVM7QUFFYixvQkFBYyxNQUFNLFdBQVk7QUFFOUIsWUFBSSxjQUFjLFdBQVc7QUFDM0IsaUJBQU8sUUFBUSxhQUFhLE9BQU8sU0FBUyxPQUFPLFFBQVEsVUFBVSxPQUFPLGNBQWMsSUFBSTtBQUM5RixpQkFBTyxRQUFRLGFBQWEsT0FBTyxTQUFTLE9BQU8sUUFBUSxVQUFVLE9BQU8sY0FBYyxNQUFNLElBQUk7QUFBQSxRQUN0RyxXQUFXLGNBQWMsU0FBUztBQUNoQyxpQkFBTyxRQUFRLFdBQVcsT0FBTyxTQUFTLE9BQU8sUUFBUSxRQUFRLE9BQU8sY0FBYyxLQUFLO0FBQzNGLGlCQUFPLFFBQVEsYUFBYSxPQUFPLFNBQVMsT0FBTyxRQUFRLFVBQVUsUUFBVyxPQUFPLGNBQWMsS0FBSztBQUFBLFFBQzVHO0FBR0EsWUFBSSxjQUFjLFdBQVc7QUFDM0IsaUJBQU8sVUFBVSxRQUFRLFNBQVUsVUFBVTtBQUMzQyxxQkFBUyxPQUFPLGFBQWE7QUFBQSxVQUMvQixDQUFDO0FBQUEsUUFDSDtBQUdBLFlBQUksY0FBYyxPQUFPO0FBQ3ZCLGlCQUFPLE9BQU8sY0FBYyxFQUFFLE9BQU87QUFBQSxZQUNuQyxPQUFPLE9BQU87QUFBQSxZQUNkLE1BQU07QUFBQSxVQUNSLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUVBLFdBQU9MO0FBQUEsRUFDVCxFQUFFLFlBQVk7QUFFZCxXQUFTLGtCQUFrQixPQUFPLFNBQVM7QUFDekMsV0FBTyxRQUFRLFlBQVksU0FBUyxDQUFDLE1BQU0sTUFBTSxpQkFBaUIsRUFBRSxNQUFNLE1BQU0sV0FBVyxXQUFXLFFBQVEsaUJBQWlCO0FBQUEsRUFDakk7QUFFQSxXQUFTLG1CQUFtQixPQUFPLFNBQVM7QUFDMUMsV0FBTyxrQkFBa0IsT0FBTyxPQUFPLEtBQUssTUFBTSxNQUFNLGdCQUFnQixLQUFLLGNBQWMsT0FBTyxTQUFTLFFBQVEsY0FBYztBQUFBLEVBQ25JO0FBRUEsV0FBUyxjQUFjLE9BQU8sU0FBUyxPQUFPO0FBQzVDLFFBQUksUUFBUSxZQUFZLE9BQU87QUFDN0IsVUFBSSxRQUFRLE9BQU8sVUFBVSxhQUFhLE1BQU0sS0FBSyxJQUFJO0FBQ3pELGFBQU8sVUFBVSxZQUFZLFVBQVUsU0FBUyxRQUFRLE9BQU8sT0FBTztBQUFBLElBQ3hFO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLHNCQUFzQixPQUFPLFdBQVcsU0FBUyxhQUFhO0FBQ3JFLFdBQU8sUUFBUSxZQUFZLFVBQVUsVUFBVSxhQUFhLFlBQVksWUFBWSxXQUFXLENBQUMsUUFBUSxZQUFZLE1BQU0sTUFBTSxXQUFXLFlBQVksUUFBUSxPQUFPLE9BQU87QUFBQSxFQUMvSztBQUVBLFdBQVMsUUFBUSxPQUFPLFNBQVM7QUFDL0IsV0FBTyxNQUFNLGNBQWMsUUFBUSxTQUFTO0FBQUEsRUFDOUM7OztBQ3BpQkEsTUFBQU0sb0JBQXFCO0FBQ2QsTUFBSUMsMkJBQTBCLGtCQUFBQyxRQUFTOzs7QUNDOUMsZ0JBQWMsdUJBQXVCQyx3QkFBdUI7OztBQ0ZyRCxNQUFJQyxVQUFTOzs7QUNFcEIsWUFBVUMsT0FBTTs7O0FDRmhCLE1BQUFDLGtCQUFrQjtBQUNsQixNQUFJLGlCQUE4QixnQ0FBQUMsUUFBTSxjQUFjLE1BQVM7QUFDL0QsTUFBSSw0QkFBeUMsZ0NBQUFBLFFBQU0sY0FBYyxLQUFLO0FBT3RFLFdBQVMsc0JBQXNCLGdCQUFnQjtBQUM3QyxRQUFJLGtCQUFrQixPQUFPLFdBQVcsYUFBYTtBQUNuRCxVQUFJLENBQUMsT0FBTyx5QkFBeUI7QUFDbkMsZUFBTywwQkFBMEI7QUFBQSxNQUNuQztBQUVBLGFBQU8sT0FBTztBQUFBLElBQ2hCO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFTyxNQUFJLGlCQUFpQixTQUFTQyxrQkFBaUI7QUFDcEQsUUFBSSxjQUFjLGdCQUFBRCxRQUFNLFdBQVcsc0JBQXNCLGdCQUFBQSxRQUFNLFdBQVcseUJBQXlCLENBQUMsQ0FBQztBQUVyRyxRQUFJLENBQUMsYUFBYTtBQUNoQixZQUFNLElBQUksTUFBTSx3REFBd0Q7QUFBQSxJQUMxRTtBQUVBLFdBQU87QUFBQSxFQUNUO0FBQ08sTUFBSSxzQkFBc0IsU0FBU0UscUJBQW9CQyxRQUFNO0FBQ2xFLFFBQUksU0FBU0EsT0FBSyxRQUNkLHNCQUFzQkEsT0FBSyxnQkFDM0IsaUJBQWlCLHdCQUF3QixTQUFTLFFBQVEscUJBQzFELFdBQVdBLE9BQUs7QUFDcEIsb0JBQUFILFFBQU0sVUFBVSxXQUFZO0FBQzFCLGFBQU8sTUFBTTtBQUNiLGFBQU8sV0FBWTtBQUNqQixlQUFPLFFBQVE7QUFBQSxNQUNqQjtBQUFBLElBQ0YsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUNYLFFBQUksVUFBVSxzQkFBc0IsY0FBYztBQUNsRCxXQUFvQixnQ0FBQUEsUUFBTSxjQUFjLDBCQUEwQixVQUFVO0FBQUEsTUFDMUUsT0FBTztBQUFBLElBQ1QsR0FBZ0IsZ0NBQUFBLFFBQU0sY0FBYyxRQUFRLFVBQVU7QUFBQSxNQUNwRCxPQUFPO0FBQUEsSUFDVCxHQUFHLFFBQVEsQ0FBQztBQUFBLEVBQ2Q7OztBQy9DQSxNQUFBSSxrQkFBa0I7QUFFbEIsV0FBUyxjQUFjO0FBQ3JCLFFBQUksV0FBVztBQUNmLFdBQU87QUFBQSxNQUNMLFlBQVksU0FBUyxhQUFhO0FBQ2hDLG1CQUFXO0FBQUEsTUFDYjtBQUFBLE1BQ0EsT0FBTyxTQUFTLFFBQVE7QUFDdEIsbUJBQVc7QUFBQSxNQUNiO0FBQUEsTUFDQSxTQUFTLFNBQVMsVUFBVTtBQUMxQixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsTUFBSSxpQ0FBOEMsZ0NBQUFDLFFBQU0sY0FBYyxZQUFZLENBQUM7QUFFNUUsTUFBSSw2QkFBNkIsU0FBU0MsOEJBQTZCO0FBQzVFLFdBQU8sZ0JBQUFELFFBQU0sV0FBVyw4QkFBOEI7QUFBQSxFQUN4RDs7O0FDckJPLFdBQVMsaUJBQWlCLFVBQVUsbUJBQW1CLFFBQVE7QUFFcEUsUUFBSSxPQUFPLHNCQUFzQixZQUFZO0FBQzNDLGFBQU8sa0JBQWtCLE1BQU0sUUFBUSxNQUFNO0FBQUEsSUFDL0M7QUFHQSxRQUFJLE9BQU8sc0JBQXNCO0FBQVcsYUFBTztBQUVuRCxXQUFPLENBQUMsQ0FBQztBQUFBLEVBQ1g7OztBQ1ZBLE1BQUFFLGtCQUFrQjtBQUtYLFdBQVMsYUFBYSxTQUFTLFVBQVU7QUFDOUMsUUFBSSxhQUFhLGdCQUFBQyxRQUFNLE9BQU8sS0FBSztBQUVuQyxRQUFJLGtCQUFrQixnQkFBQUEsUUFBTSxTQUFTLENBQUMsR0FDbEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUVuQyxRQUFJLGNBQWMsZUFBZTtBQUNqQyxRQUFJLHFCQUFxQiwyQkFBMkI7QUFDcEQsUUFBSSxtQkFBbUIsWUFBWSw0QkFBNEIsT0FBTztBQUV0RSxxQkFBaUIsb0JBQW9CO0FBRXJDLFFBQUksaUJBQWlCLFNBQVM7QUFDNUIsdUJBQWlCLFVBQVUsY0FBYyxXQUFXLGlCQUFpQixPQUFPO0FBQUEsSUFDOUU7QUFFQSxRQUFJLGlCQUFpQixXQUFXO0FBQzlCLHVCQUFpQixZQUFZLGNBQWMsV0FBVyxpQkFBaUIsU0FBUztBQUFBLElBQ2xGO0FBRUEsUUFBSSxpQkFBaUIsV0FBVztBQUM5Qix1QkFBaUIsWUFBWSxjQUFjLFdBQVcsaUJBQWlCLFNBQVM7QUFBQSxJQUNsRjtBQUVBLFFBQUksaUJBQWlCLFVBQVU7QUFHN0IsVUFBSSxPQUFPLGlCQUFpQixjQUFjLFVBQVU7QUFDbEQseUJBQWlCLFlBQVk7QUFBQSxNQUMvQjtBQUlBLFVBQUksaUJBQWlCLGNBQWMsR0FBRztBQUNwQyx5QkFBaUIsWUFBWTtBQUFBLE1BQy9CO0FBQUEsSUFDRjtBQUVBLFFBQUksaUJBQWlCLFlBQVksaUJBQWlCLGtCQUFrQjtBQUVsRSxVQUFJLENBQUMsbUJBQW1CLFFBQVEsR0FBRztBQUNqQyx5QkFBaUIsZUFBZTtBQUFBLE1BQ2xDO0FBQUEsSUFDRjtBQUVBLFFBQUksbUJBQW1CLGdCQUFBQSxRQUFNLFNBQVMsV0FBWTtBQUNoRCxhQUFPLElBQUksU0FBUyxhQUFhLGdCQUFnQjtBQUFBLElBQ25ELENBQUMsR0FDRyxXQUFXLGlCQUFpQixDQUFDO0FBRWpDLFFBQUksU0FBUyxTQUFTLG9CQUFvQixnQkFBZ0I7QUFDMUQsb0JBQUFBLFFBQU0sVUFBVSxXQUFZO0FBQzFCLGlCQUFXLFVBQVU7QUFDckIseUJBQW1CLFdBQVc7QUFDOUIsVUFBSSxjQUFjLFNBQVMsVUFBVSxjQUFjLFdBQVcsV0FBWTtBQUN4RSxZQUFJLFdBQVcsU0FBUztBQUN0QixzQkFBWSxTQUFVQyxJQUFHO0FBQ3ZCLG1CQUFPQSxLQUFJO0FBQUEsVUFDYixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0YsQ0FBQyxDQUFDO0FBR0YsZUFBUyxhQUFhO0FBQ3RCLGFBQU8sV0FBWTtBQUNqQixtQkFBVyxVQUFVO0FBQ3JCLG9CQUFZO0FBQUEsTUFDZDtBQUFBLElBQ0YsR0FBRyxDQUFDLG9CQUFvQixRQUFRLENBQUM7QUFDakMsb0JBQUFELFFBQU0sVUFBVSxXQUFZO0FBRzFCLGVBQVMsV0FBVyxrQkFBa0I7QUFBQSxRQUNwQyxXQUFXO0FBQUEsTUFDYixDQUFDO0FBQUEsSUFDSCxHQUFHLENBQUMsa0JBQWtCLFFBQVEsQ0FBQztBQUUvQixRQUFJLGlCQUFpQixZQUFZLE9BQU8sV0FBVztBQUNqRCxZQUFNLFNBQVMsZ0JBQWdCLGdCQUFnQixFQUFFLEtBQUssU0FBVUUsUUFBTTtBQUNwRSxZQUFJLE9BQU9BLE9BQUs7QUFDaEIseUJBQWlCLGFBQWEsT0FBTyxTQUFTLGlCQUFpQixVQUFVLElBQUk7QUFDN0UseUJBQWlCLGFBQWEsT0FBTyxTQUFTLGlCQUFpQixVQUFVLE1BQU0sSUFBSTtBQUFBLE1BQ3JGLENBQUMsRUFBRSxNQUFNLFNBQVUsT0FBTztBQUN4QiwyQkFBbUIsV0FBVztBQUM5Qix5QkFBaUIsV0FBVyxPQUFPLFNBQVMsaUJBQWlCLFFBQVEsS0FBSztBQUMxRSx5QkFBaUIsYUFBYSxPQUFPLFNBQVMsaUJBQWlCLFVBQVUsUUFBVyxLQUFLO0FBQUEsTUFDM0YsQ0FBQztBQUFBLElBQ0g7QUFHQSxRQUFJLE9BQU8sV0FBVyxDQUFDLG1CQUFtQixRQUFRLEtBQUssQ0FBQyxPQUFPLGNBQWMsaUJBQWlCLGlCQUFpQixVQUFVLGlCQUFpQixrQkFBa0IsQ0FBQyxPQUFPLE9BQU8sU0FBUyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUc7QUFDdk0sWUFBTSxPQUFPO0FBQUEsSUFDZjtBQUdBLFFBQUksaUJBQWlCLHdCQUF3QixXQUFXO0FBQ3RELGVBQVMsU0FBUyxZQUFZLFFBQVEsZ0JBQWdCO0FBQUEsSUFDeEQ7QUFFQSxXQUFPO0FBQUEsRUFDVDs7O0FDckdPLFdBQVMsU0FBUyxNQUFNLE1BQU0sTUFBTTtBQUN6QyxRQUFJLGdCQUFnQixlQUFlLE1BQU0sTUFBTSxJQUFJO0FBQ25ELFdBQU8sYUFBYSxlQUFlLGFBQWE7QUFBQSxFQUNsRDs7O0FDUEEsTUFBQUMsa0JBQWtCO0FBSWxCLFdBQVMsdUJBQXVCLE9BQW9DO0FBQ2xFLFdBQ0UsZ0NBQUFDLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0ksZ0NBQUFBLFFBQUEsY0FBQyxjQUNHLGdDQUFBQSxRQUFBLGNBQUMsWUFBTyxTQUFTLE1BQU07QUFBQyxVQUFHLE1BQU07QUFBc0IsY0FBTSxxQkFBcUIsTUFBTSxjQUFjLElBQUksUUFBVyxNQUFTO0FBQUEsSUFBQyxLQUMzSCxnQ0FBQUEsUUFBQSxjQUFDLFlBQVMsV0FBVyxNQUFNLGFBQWEsb0NBQW9DLGNBQWMsT0FBTyxNQUFNLGNBQWMsYUFDaEgsTUFBTSxlQUFlLE1BQU0sYUFBYSxZQUFZLElBQUksNEJBQzdELENBQ0osR0FBUyxRQUNILGdDQUFBQSxRQUFBLGNBQUMsV0FBUSxNQUFLLGNBQVksR0FBRSxRQUNsQyxnQ0FBQUEsUUFBQSxjQUFDLFlBQVMsV0FBVSxjQUFhLE9BQU8sTUFBTSxlQUFlLGFBQ3hELE1BQU0sWUFBWSxNQUFNLFVBQVUsWUFBWSxJQUFJLHlCQUN2RCxDQUNKLENBQ0o7QUFBQSxFQUVKOzs7QW43QkNBLFdBQVMsbUJBQW1CLE9BQWdDO0FBQzFELFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLGlCQUFpQjtBQUFBLE1BQ2pCLGdCQUFnQjtBQUFBLE1BQ2hCLEdBQUc7QUFBQSxJQUNMLElBQUk7QUFFSixVQUFNLFNBQVMsSUFBSSxPQUFPLEdBQUc7QUFFN0IsVUFBTUMsYUFBWSxxQkFBcUI7QUFDdkMsVUFBTSxzQkFBc0IsK0JBQStCO0FBSzNELFVBQU0sQ0FBQyxhQUFhLGNBQWMsUUFBSSwwQkFBaUIsRUFBRTtBQUt6RCxVQUFNLENBQUMsU0FBUyxVQUFVLFFBQUksMEJBQThDLENBQUMsQ0FBQztBQUs5RSxVQUFNLENBQUMsaUJBQWlCLGtCQUFrQixRQUFJLDBCQUE4QyxDQUFDLENBQUM7QUFJOUYsVUFBTSxlQUFlLENBQUMsUUFBUUMsaUJBQWdCO0FBQzVDLFlBQU0sRUFBRSxPQUFPLE1BQU0sSUFBSTtBQUN6QixZQUFNLGdCQUFnQixvQkFBb0IsUUFBUSxNQUFNLFNBQVMsVUFBVSxvQkFBb0IsQ0FBQyxJQUM5RixNQUFNLFNBQVMsZUFBZSxvQkFBb0IsQ0FBQyxJQUNqRCxNQUFNLFNBQVMsYUFBYSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUU7QUFDM0QsWUFBTSxXQUFXRCxXQUFVLGFBQWE7QUFFeEMsVUFBSSxvQkFBb0IsTUFBTSxPQUFPLElBQUk7QUFDdkMsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJRSxVQUFVLE1BQU0sU0FBUyxhQUN6QixhQUFhLE1BQU0sZ0JBQ25CLDBCQUEwQixNQUFNLGdCQUFnQixRQUFRLE1BQU07QUFFbEUsVUFBSSxZQUFZLFNBQVMsTUFBTSxJQUFJO0FBQUE7QUFBQSxTQUFjLE1BQU0sS0FBSztBQUFBO0FBQUEsRUFBT0EsT0FBTTtBQUN6RSxVQUFJLE1BQU0sZUFBZSxRQUFXO0FBQ2xDLHFCQUFhO0FBQUE7QUFBQSxlQUFvQixNQUFNLFdBQVc7QUFBQSxNQUNwRDtBQUNBLFVBQUksaUJBQWlCLE1BQU0sY0FBYyxNQUFNLGVBQWUsSUFBRztBQUMvRCxxQkFBYSxpQkFBaUIsTUFBTTtBQUNwQyxxQkFBYSxxQkFBcUIsTUFBTTtBQUFBLE1BQzFDO0FBRUEsWUFBTSxpQkFBaUIsTUFBTTtBQUMzQixlQUNFLGdDQUFBQyxRQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxPQUFPO0FBQUE7QUFBQSxVQUNILGdDQUFBQSxRQUFBLGNBQUMsY0FDRyxnQ0FBQUEsUUFBQSxjQUFDLGdCQUFhLFFBQVFGLGdCQUFjLE1BQU0sS0FBTSxHQUNoRCxnQ0FBQUUsUUFBQSxjQUFDLFVBQUcsR0FDTCxNQUFNLFdBQ1Q7QUFBQSxRQUNOO0FBQUEsTUFFSjtBQUVBLFlBQU0sOEJBQThCLE1BQU07QUFDeEMsZUFDRSxnQ0FBQUEsUUFBQSxjQUFDLFVBQUssT0FBTyxXQUFXLE9BQU8sRUFBRSxRQUFRLFFBQVcsS0FDaEQsZ0NBQUFBLFFBQUE7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNDLE9BQU87QUFBQTtBQUFBLFVBQ0wsZ0NBQUFBLFFBQUEsY0FBQyxjQUNHLGdDQUFBQSxRQUFBLGNBQUMsZ0JBQWEsUUFBUUYsZ0JBQWMsTUFBTSxLQUFNLEdBQWUsd0JBRWpFLGdDQUFBRSxRQUFBO0FBQUEsWUFBQztBQUFBO0FBQUEsY0FDQyxjQUFjLE1BQU07QUFBQSxjQUNwQixXQUFXLE1BQU07QUFBQSxjQUNqQixZQUFZO0FBQUEsY0FDWixhQUFhO0FBQUE7QUFBQSxVQUNmLEdBQ0EsZ0NBQUFBLFFBQUE7QUFBQSxZQUFDO0FBQUE7QUFBQSxjQUNDLE1BQU07QUFBQSxjQUNOLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFBQSxjQUN2QixPQUFPO0FBQUE7QUFBQSxVQUNULEdBQ0MsQ0FBQyx1QkFBdUIsTUFBTSxlQUMzQixnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxnQkFDQSxnQ0FBQUEsUUFBQSxjQUFDLFVBQUcsR0FDSCxNQUFNLFlBQVksVUFBVSxHQUFHLEVBQUUsSUFBSSxLQUN0QyxDQUVOO0FBQUEsUUFDSixDQUNKO0FBQUEsTUFFSjtBQUVBLGFBQU8sTUFBTSxTQUFTLGFBQWEsZUFBZSxJQUFJLDRCQUE0QjtBQUFBLElBQ3BGO0FBT0UsVUFBTTtBQUFBLE1BQ0YsV0FBVztBQUFBLElBQ2YsSUFBSTtBQUFBLE1BQ0E7QUFBQSxRQUNJO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUNBLFlBQVk7QUFDUixZQUFJLG9CQUFvRCxDQUFDO0FBRS9ELFlBQUksZUFBZSxDQUFDLEdBQUcsSUFBSSxJQUFJLFdBQVcsQ0FBQyxFQUN4QyxPQUFPLENBQUMsV0FBVztBQUNsQixpQkFBUSxvQkFBb0IsT0FBTyxTQUFVLE9BQU87QUFBQSxRQUN0RCxDQUFDO0FBRUgsWUFBSSxhQUFhLFNBQVMsR0FBRztBQUMzQixjQUFJO0FBQWlCLDJCQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7QUFFNUMscUJBQVcsVUFBVSxjQUFjO0FBQy9CLGdCQUFJLFVBQVUsT0FBTyxPQUFPLE9BQU8sSUFBSSxXQUFXLE1BQU0sR0FBRztBQUN6RCxvQkFBTSxPQUFPO0FBQUEsZ0JBQ1AsRUFBQyxPQUFPLE9BQU8sSUFBRztBQUFBLGdCQUNsQjtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxnQkFFQTtBQUFBLGNBQ0osRUFBRSxLQUFLLENBQUMsYUFBYTtBQUNqQixvQkFBSSxVQUFVO0FBQ1YsMkJBQVMsV0FBVyxJQUFJLENBQUMsY0FBbUI7QUFDeEMsd0JBQUksT0FBTyxRQUFRLFVBQVUsT0FBTyxHQUFHO0FBQ25DLHdDQUFrQixLQUFLO0FBQUE7QUFBQTtBQUFBLHdCQUduQixPQUFPLHdCQUF3QixVQUFVLFNBQVMsSUFBSSxxQkFBcUIsU0FBUztBQUFBO0FBQUEsd0JBRXBGLEtBQUssVUFBVSxPQUFPO0FBQUEsd0JBQ3RCLE9BQU87QUFBQSwwQkFDSCxLQUFLLFVBQVUsT0FBTztBQUFBLDBCQUN0QixPQUFPLFVBQVUsU0FBUztBQUFBLDBCQUMxQixlQUFlLFVBQVUsY0FBYztBQUFBLDBCQUN2QyxNQUFNLFVBQVUsUUFBUTtBQUFBLDBCQUN4QixZQUFZLFVBQVUsYUFBYTtBQUFBLDBCQUNuQyxhQUFhLFVBQVUsZUFBZTtBQUFBLDBCQUN0QyxRQUFRLFVBQVUsaUJBQWlCO0FBQUEsMEJBQ25DLFlBQVksVUFBVSxxQkFBcUI7QUFBQSx3QkFDL0M7QUFBQSxzQkFDSixDQUFDO0FBQUEsb0JBQ0w7QUFBQSxrQkFDSixDQUFDO0FBRWpCLHNCQUFJLG1CQUFtQixrQkFBa0IsU0FBUztBQUFHLHdDQUFvQixDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFBQSxnQkFDaEc7QUFBQSxjQUNGLENBQUM7QUFBQSxZQUNILFdBQVcsVUFBVSxPQUFPLFNBQVMsa0JBQWtCO0FBQ3JELGdDQUFrQixLQUFLO0FBQUEsZ0JBQ3JCLE9BQU8sT0FBTztBQUFBLGdCQUNkLEtBQUssT0FBTztBQUFBLGdCQUNaLE9BQU87QUFBQSxrQkFDTCxLQUFLO0FBQUEsa0JBQ0wsT0FBTztBQUFBLGtCQUNQLGVBQWU7QUFBQSxrQkFDZixNQUFNO0FBQUEsa0JBQ04sWUFBWTtBQUFBLGtCQUNaLGFBQWE7QUFBQSxrQkFDYixRQUFRO0FBQUEsa0JBQ1IsWUFBWTtBQUFBLGdCQUNkO0FBQUEsY0FDRixDQUFDO0FBQUEsWUFDSDtBQUFBLFVBQ0Y7QUFFQSxxQkFBVyxpQkFBaUI7QUFDNUIsNkJBQW1CLGlCQUFpQjtBQUFBLFFBQ3RDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFLQSxVQUFNO0FBQUEsTUFDSixXQUFXO0FBQUEsSUFDYixJQUFJO0FBQUEsTUFDRjtBQUFBLFFBQ0U7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLE1BQ0EsWUFBWTtBQUNWLFlBQUksWUFBWSxTQUFTLEdBQUc7QUFDMUIsaUJBQU8sT0FBTztBQUFBLFlBQ1osRUFBRSxPQUFPLFlBQVk7QUFBQSxZQUNyQjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0YsRUFBRSxLQUFLLENBQUMsYUFBYTtBQUNuQixnQkFBSSxVQUFVO0FBQ1oseUJBQVcsU0FBUyxXQUFXO0FBQUEsZ0JBQUksQ0FBQyxlQUNsQztBQUFBO0FBQUE7QUFBQSxrQkFHRSxPQUFPLHdCQUF3QixVQUFVLFNBQVMsSUFBSSxxQkFBcUIsU0FBUztBQUFBO0FBQUEsa0JBRXBGLEtBQUssVUFBVSxPQUFPO0FBQUE7QUFBQSxrQkFFdEIsT0FBTztBQUFBLG9CQUNMLEtBQUssVUFBVSxPQUFPO0FBQUEsb0JBQ3RCLE9BQU8sVUFBVSxTQUFTO0FBQUEsb0JBQzFCLGVBQWUsVUFBVSxjQUFjO0FBQUEsb0JBQ3ZDLE1BQU0sVUFBVSxRQUFRO0FBQUEsb0JBQ3hCLFlBQVksVUFBVSxhQUFhO0FBQUEsb0JBQ25DLGFBQWEsVUFBVSxlQUFlO0FBQUEsb0JBQ3RDLFFBQVEsVUFBVSxpQkFBaUI7QUFBQSxvQkFDbkMsWUFBWSxVQUFVLHFCQUFxQjtBQUFBLGtCQUM3QztBQUFBLGdCQUNGO0FBQUEsY0FDRixDQUFDO0FBQUEsWUFDSDtBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUtBLG1DQUFVLE1BQU07QUFDZDtBQUFBLFFBQ0UsZ0JBQWdCLElBQUksQ0FBQ0MsT0FBTTtBQUV6QixjQUFJLG9CQUFvQkEsR0FBRSxNQUFNLE9BQU8sSUFBSTtBQUN6QyxtQkFBTztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsT0FBT0EsR0FBRTtBQUFBLGNBQ1QsZUFBZTtBQUFBLGNBQ2YsTUFBTTtBQUFBLGNBQ04sWUFBWUEsR0FBRSxNQUFNO0FBQUEsY0FDcEIsYUFBYUEsR0FBRSxNQUFNO0FBQUEsY0FDckIsUUFBUUEsR0FBRSxNQUFNO0FBQUEsWUFDbEI7QUFBQSxVQUNGLFdBQVdBLEdBQUUsTUFBTSxPQUFPLElBQUk7QUFDNUIsbUJBQU87QUFBQSxjQUNMLEtBQUs7QUFBQSxjQUNMLE9BQU87QUFBQSxjQUNQLGVBQWU7QUFBQSxjQUNmLE1BQU07QUFBQSxjQUNOLFlBQVk7QUFBQSxjQUNaLGFBQWE7QUFBQSxjQUNiLFFBQVE7QUFBQSxZQUNWO0FBQUEsVUFDRixPQUFPO0FBQ0wsbUJBQU87QUFBQSxjQUNMLEtBQUtBLEdBQUUsTUFBTTtBQUFBLGNBQ2IsT0FBT0EsR0FBRSxNQUFNO0FBQUEsY0FDZixlQUFlQSxHQUFFLE1BQU07QUFBQSxjQUN2QixNQUFNQSxHQUFFLE1BQU07QUFBQSxjQUNkLFlBQVlBLEdBQUUsTUFBTTtBQUFBLGNBQ3BCLGFBQWFBLEdBQUUsTUFBTTtBQUFBLGNBQ3JCLFFBQVFBLEdBQUUsTUFBTTtBQUFBLFlBQ2xCO0FBQUEsVUFDRjtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGLEdBQUcsQ0FBQyxlQUFlLENBQUM7QUFFcEIsYUFBUyxxQkFBcUIsTUFBVztBQUN2QyxhQUNFLEtBQUssUUFDTCxPQUNBLEtBQUssY0FBYyxZQUFZLElBQy9CLE1BQ0EsS0FBSyxhQUNMO0FBQUEsSUFFSjtBQUVBLGFBQVMsZ0JBQWdCQyxVQUEyQjtBQUNsRCx5QkFBbUJBLFFBQU87QUFBQSxJQUM1QjtBQUVBLGFBQVMsc0JBQXNCSixjQUFxQjtBQUNsRCxZQUFNLFlBQVk7QUFBQSxRQUNoQixPQUFPQTtBQUFBLFFBQ1AsT0FBTztBQUFBLFVBQ0wsS0FBSztBQUFBLFVBQ0wsT0FBTztBQUFBLFVBQ1AsZUFBZTtBQUFBLFVBQ2YsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFVBQ1osYUFBYTtBQUFBLFVBQ2IsUUFBUTtBQUFBLFFBQ1Y7QUFBQSxNQUNGO0FBRUEsaUJBQVcsQ0FBQyxHQUFHLFNBQVMsU0FBUyxDQUFDO0FBQ2xDLHlCQUFtQixrQkFBa0IsQ0FBQyxTQUFTLElBQUksQ0FBQyxHQUFHLGlCQUFpQixTQUFTLENBQUM7QUFBQSxJQUNwRjtBQUVBLFdBQ0UsZ0NBQUFFLFFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLGFBQVc7QUFBQSxRQUNYLGNBQVc7QUFBQSxRQUNYLFdBQVc7QUFBQSxRQUNWLEdBQUc7QUFBQSxRQUNKLE9BQU87QUFBQSxRQUNQLFdBQVcsa0JBQWtCO0FBQUEsUUFDN0IsaUJBQWlCLGtCQUFrQixFQUFFLGFBQWEsS0FBSyxJQUFJO0FBQUEsUUFDM0QsYUFDRSxjQUFjLGNBQWM7QUFBQSxRQUU5QjtBQUFBLFFBQ0E7QUFBQSxRQUNBLGdCQUFnQjtBQUFBLFFBQ2hCLFVBQVU7QUFBQSxRQUNWO0FBQUEsUUFDQSxnQkFBZ0IsbUJBQW1CLHdCQUF3QjtBQUFBLFFBQzNELFdBQVcsc0JBQXNCLEtBQUs7QUFBQTtBQUFBLElBQ3hDO0FBQUEsRUFFSjtBQUVBLFdBQVMsbUJBQW1CLE9BQWdDLFdBQWdCLFVBQXVCO0FBQ2pHLHNCQUFBRyxRQUFTLE9BQU8sMEJBQTBCLEtBQUssR0FBRyxXQUFXLFFBQVE7QUFBQSxFQUN2RTtBQUVBLFdBQVMsMEJBQTBCLE9BQWdDO0FBQ2pFLFVBQU0sY0FBYyxJQUFJLFlBQVk7QUFDcEMsV0FDRSxnQ0FBQUgsUUFBQSxjQUFDLGVBQVksV0FBVSxXQUNyQixnQ0FBQUEsUUFBQSxjQUFDLHVCQUFvQixRQUFRLGVBQzNCLGdDQUFBQSxRQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDQyxLQUFLLE1BQU07QUFBQSxRQUNYLFdBQVcsTUFBTTtBQUFBLFFBQ2pCLHVCQUF1QixNQUFNO0FBQUEsUUFDN0IsYUFBYSxNQUFNO0FBQUEsUUFDbkIsaUJBQWlCLE1BQU07QUFBQSxRQUN2QixhQUFhLE1BQU07QUFBQSxRQUNuQix1QkFBdUIsTUFBTTtBQUFBLFFBQzdCLGtCQUFrQixNQUFNO0FBQUEsUUFDeEIsZ0JBQWdCLE1BQU07QUFBQSxRQUN0QixxQkFBcUIsTUFBTTtBQUFBLFFBQzNCLGVBQWUsTUFBTTtBQUFBO0FBQUEsSUFDdkIsQ0FDRixDQUNGO0FBQUEsRUFFSjs7O0FvN0I5WEEsTUFBQUksa0JBQWtCO0FBTWxCLE1BQUFDLG9CQUFxQjtBQUVyQixXQUFTLGtCQUFrQixPQUErQjtBQUN4RCxVQUFNLEVBQUUsS0FBSyxXQUFXLEdBQUcsS0FBSyxJQUFJO0FBQ3BDLFVBQU0sU0FBUyxJQUFJLE9BQU8sR0FBRztBQUU3QixVQUFNO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixJQUFJO0FBQUEsTUFDRixDQUFDLGtCQUFrQixLQUFLLFNBQVM7QUFBQSxNQUNqQyxZQUFZO0FBQ1YsZUFBTyxPQUFPO0FBQUEsVUFDWixNQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsV0FDRSxnQ0FBQUMsUUFBQSw4QkFBQUEsUUFBQSxnQkFDRSxnQ0FBQUEsUUFBQTtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0MsT0FBTTtBQUFBLFFBQ04sYUFBYSxnQkFBZ0IsV0FBVyxJQUFJLEtBQUssYUFBYSxFQUFFLGVBQWUsQ0FBQyxLQUFLO0FBQUEsUUFDckYsUUFBTztBQUFBO0FBQUEsTUFFUCxnQ0FBQUEsUUFBQSxjQUFDLFdBQVMsR0FBRyxRQUNULFdBQVksZ0NBQUFBLFFBQUEsY0FBQyxlQUFRLDJCQUF5QixHQUMvQyxZQUNHLGdDQUFBQSxRQUFBLGNBQUMscUJBQWtCLE1BQUssS0FBSSxJQUU5QixnQ0FBQUEsUUFBQSxjQUFDLFlBQ0csZ0JBQWdCLG1CQUFtQixJQUNqQyxnQ0FBQUEsUUFBQSxjQUFDLFlBQUksZ0JBQWdCLG1CQUFtQixFQUFFLGVBQWUsR0FBRSwrQkFBNkIsSUFDeEYsZ0NBQUFBLFFBQUEsY0FBQyxRQUFHLE9BQU8sRUFBRSxXQUFXLFNBQVMsS0FBRywrQkFBNkIsR0FDbkUsZ0JBQWdCLGNBQWMsSUFDNUIsZ0NBQUFBLFFBQUEsY0FBQyxZQUFJLGdCQUFnQixjQUFjLEVBQUUsZUFBZSxHQUFFLFFBQU0sSUFDNUQsZ0NBQUFBLFFBQUEsY0FBQyxRQUFHLE9BQU8sRUFBRSxXQUFXLFNBQVMsS0FBRywyQkFBeUIsR0FDL0QsZ0JBQWdCLGlCQUFpQixJQUMvQixnQ0FBQUEsUUFBQSxjQUFDLFlBQUksZ0JBQWdCLGlCQUFpQixFQUFFLGVBQWUsR0FBRSxhQUFXLElBQ3BFLGdDQUFBQSxRQUFBLGNBQUMsUUFBRyxPQUFPLEVBQUUsV0FBVyxTQUFTLEtBQUcsK0JBQTZCLEdBQ25FLGdCQUFnQixrQkFBa0IsSUFDaEMsZ0NBQUFBLFFBQUEsY0FBQyxZQUFJLGdCQUFnQixrQkFBa0IsRUFBRSxlQUFlLEdBQUUsY0FBWSxJQUN0RSxnQ0FBQUEsUUFBQSxjQUFDLFFBQUcsT0FBTyxFQUFFLFdBQVcsU0FBUyxLQUFHLGlDQUErQixHQUMvQixHQUMxQyxDQUVKO0FBQUEsSUFDRixDQUNGO0FBQUEsRUFFSjtBQUVBLFdBQVMsa0JBQWtCLE9BQStCLFdBQWdCLFVBQXFCO0FBQzdGLHNCQUFBQyxRQUFTLE9BQU8seUJBQXlCLEtBQUssR0FBRyxXQUFXLFFBQVE7QUFBQSxFQUN0RTtBQUVBLFdBQVMseUJBQXlCLE9BQStCO0FBQy9ELFVBQU0sY0FBYyxJQUFJLFlBQVk7QUFDcEMsV0FDSSxnQ0FBQUQsUUFBQSxjQUFDLGVBQVksV0FBVSxXQUNyQixnQ0FBQUEsUUFBQSxjQUFDLHVCQUFvQixRQUFRLGVBQzNCLGdDQUFBQSxRQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDQyxLQUFLLE1BQU07QUFBQSxRQUNYLFdBQVcsTUFBTTtBQUFBO0FBQUEsSUFDbkIsQ0FDRixDQUNGO0FBQUEsRUFFTjs7O0FDNUVBLE1BQUFFLGtCQUFrQzs7O0FDQ2xDLE1BQUFDLGtCQUFrQztBQVFsQyxNQUFNLHNCQUFzQjtBQUVyQixXQUFTLFdBQVcsTUFBNkI7QUFDcEQsV0FDSSxnQ0FBQUMsUUFBQSxjQUFDLGNBQVcsTUFBTSxhQUFhLE9BQU8sV0FBVyxTQUFTLE1BQUs7QUFBQSxFQUV2RTtBQVVPLFdBQVMsd0JBQXdCLGNBQXFCLFlBQXVDO0FBQ2hHLFVBQU0sYUFBYSxPQUFPLEtBQUssVUFBVSxFQUNwQyxJQUFJLENBQUMsUUFBUTtBQUNWLFlBQU0sUUFBUSxhQUFhLGtCQUFrQixFQUFFLGVBQWUsR0FBRyxLQUFLO0FBQ3RFLFVBQUksT0FBTztBQUNQLGVBQ0ksTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLFFBQVE7QUFBQSxNQUUvQztBQUNLLGVBQU87QUFBQSxJQUNoQixDQUFDLEVBQ0EsS0FBSyxJQUFJO0FBRWQsV0FBTyxXQUFXLFVBQVU7QUFBQSxFQUNoQztBQWdCTyxXQUFTLGlCQUFpQixjQUFxQixnQkFBZ0MsS0FBYSxhQUF1QixxQkFBMkUsYUFBd0M7QUFDek8sVUFBTSxRQUFRLGVBQWUsZUFBZSxHQUFHLEtBQUssSUFBSSxNQUFNLEdBQUcsRUFBRSxJQUFJLEtBQUs7QUFDNUUsVUFBTSxlQUFlLGVBQWUsSUFBSSxHQUFHO0FBQzNDLFVBQU0sZ0JBQWdCLGFBQWEsY0FBYztBQUdqRCxRQUFJLGFBQWEsUUFBUSxNQUFNLGNBQWMsUUFBUSxjQUFjLE9BQU8sR0FBRztBQUN6RSxhQUFPLGdDQUFBQSxRQUFBLGNBQUMsVUFBSyxXQUFVLGVBQWEsYUFBYSxTQUFTLENBQUU7QUFBQSxJQUNoRTtBQUVBLFFBQUksQ0FBQyxjQUFjO0FBQ2YsVUFBRyxJQUFJLFdBQVcsTUFBTSxHQUFHO0FBQ3ZCLGVBQU8sZ0NBQUFBLFFBQUEsY0FBQyxPQUFFLFdBQVUsYUFBWSxNQUFNLE9BQU0sS0FBTTtBQUFBLE1BQ3RELE9BQ0s7QUFFRCxlQUFPLGdDQUFBQSxRQUFBLGNBQUMsY0FBTSxLQUFNO0FBQUEsTUFDeEI7QUFBQSxJQUNKO0FBRUEsVUFBTSxpQkFBaUIsYUFBYSxXQUFXLElBQUksYUFBYSxXQUFXLEVBQUUsT0FBTyxDQUFDLFNBQWM7QUFBQyxhQUFPLFNBQVM7QUFBQSxJQUFhLENBQUMsSUFBSSxDQUFDO0FBQ3ZJLFVBQU0sbUJBQW1CLGFBQWEsTUFBTSxJQUFJLHVCQUF1QixhQUFhLE1BQU0sQ0FBQyxJQUFJLGFBQWEsUUFBUTtBQUdwSCxRQUFHLGVBQWUsV0FBVyxHQUFHO0FBQzVCLFVBQUcsYUFBYSxvQkFBb0IsR0FBRztBQUVuQyxlQUNJLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUNJLGdDQUFBQSxRQUFBLGNBQUMsWUFBTyxXQUFVLGFBQVksU0FBUyxNQUFNO0FBQUMsY0FBRyxZQUFZO0FBQW9CLHdCQUFZLG1CQUFtQixlQUFlLGtCQUFrQixFQUFDLEtBQUssTUFBSyxDQUFDO0FBQUEsUUFBQyxLQUFJLEtBQU0sR0FFcEssYUFDSSxnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxnQkFBRSxRQUVFLGdDQUFBQSxRQUFBLGNBQUMsWUFBTyxXQUFVLGlCQUFnQixTQUFTLE1BQU07QUFBQyxjQUFHLFlBQVk7QUFBc0Isd0JBQVkscUJBQXFCLGVBQWUsQ0FBQyxHQUFHLGtCQUFrQixFQUFDLEtBQUssTUFBSyxDQUFDO0FBQUEsUUFBQyxLQUFJLGdDQUFBQSxRQUFBLGNBQUMsVUFBSyxXQUFVLG9CQUFrQixlQUFlLENBQUMsRUFBRSxZQUFZLENBQUUsQ0FBUSxDQUM1UCxJQUNBLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGNBQUUsQ0FFZDtBQUFBLE1BRVIsT0FDSztBQUVELGVBQ0ksZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0ksZ0NBQUFBLFFBQUEsY0FBQyxZQUFPLFdBQVUsYUFBWSxTQUFTLE1BQU07QUFBQyxjQUFHLFlBQVk7QUFBb0Isd0JBQVksbUJBQW1CLGVBQWUsQ0FBQyxHQUFHLGtCQUFrQixFQUFDLEtBQUssTUFBSyxDQUFDO0FBQUEsUUFBQyxLQUFJLEtBQU0sR0FFeEssYUFDSSxnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxnQkFBRSxRQUVFLGdDQUFBQSxRQUFBLGNBQUMsWUFBTyxXQUFVLGlCQUFnQixTQUFTLE1BQU07QUFBQyxjQUFHLFlBQVk7QUFBc0Isd0JBQVkscUJBQXFCLGVBQWUsQ0FBQyxHQUFHLGtCQUFrQixFQUFDLEtBQUssTUFBSyxDQUFDO0FBQUEsUUFBQyxLQUFJLGdDQUFBQSxRQUFBLGNBQUMsVUFBSyxXQUFVLG9CQUFrQixlQUFlLENBQUMsRUFBRSxZQUFZLENBQUUsQ0FBUSxDQUM1UCxJQUNBLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGNBQUUsQ0FFZDtBQUFBLE1BRVI7QUFBQSxJQUNKLFdBQ1EsZUFBZSxTQUFTLEdBQUc7QUFDL0IsVUFBRyxhQUFhLG9CQUFvQixHQUFHO0FBRW5DLGVBQ0ksZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0ksZ0NBQUFBLFFBQUEsY0FBQyxZQUFPLFdBQVUsYUFBWSxTQUFTLE1BQU07QUFBQyxjQUFHLFlBQVk7QUFBb0Isd0JBQVksbUJBQW1CLGVBQWUsa0JBQWtCLEVBQUMsS0FBSyxNQUFLLENBQUM7QUFBQSxRQUFDLEtBQUksS0FBTSxHQUVwSyxhQUNBLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUFFLFFBRUcsZUFBZSxJQUFJLENBQUMsU0FBYztBQUMvQixpQkFDSSxnQ0FBQUEsUUFBQSxjQUFDLFlBQU8sV0FBVSxpQkFBZ0IsS0FBSyxhQUFhLEdBQUcsU0FBUyxNQUFNO0FBQUMsZ0JBQUcsWUFBWTtBQUFzQiwwQkFBWSxxQkFBcUIsTUFBTSxrQkFBa0IsRUFBQyxLQUFLLE1BQUssQ0FBQztBQUFBLFVBQUMsS0FBSSxnQ0FBQUEsUUFBQSxjQUFDLFVBQUssV0FBVSxvQkFBa0IsS0FBSyxZQUFZLENBQUUsQ0FBUTtBQUFBLFFBRTNQLENBQUMsQ0FDTCxJQUNBLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGNBQUUsQ0FFVjtBQUFBLE1BRVIsT0FDSztBQUVELGVBQ0ksZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0ksZ0NBQUFBLFFBQUEsY0FBQyxPQUFFLFdBQVUsYUFBWSxNQUFNLE9BQU0sS0FBTSxHQUV2QyxhQUNBLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUFFLFFBRUUsZ0NBQUFBLFFBQUEsY0FBQyxZQUFPLFdBQVUsaUJBQWdCLEtBQUssYUFBYSxHQUFHLFNBQVMsTUFBTTtBQUFDLGNBQUcsWUFBWTtBQUEwQix3QkFBWSx5QkFBeUIsa0JBQWtCLEVBQUMsS0FBSyxNQUFLLENBQUM7QUFBQSxRQUFDLEtBQ2hMLGdDQUFBQSxRQUFBLGNBQUMsVUFBSyxXQUFVLG9CQUNaLGdDQUFBQSxRQUFBLGNBQUMsV0FBUSxNQUFNLFVBQVUsTUFBTSxLQUFJLEdBQUUsUUFFcEMsZUFBZSxRQUFPLFFBRXRCLFlBQ0wsQ0FDSixDQUNKLElBQ0EsZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsY0FBRSxDQUVWO0FBQUEsTUFFUjtBQUFBLElBQ0osT0FDSztBQUNELFVBQUcsYUFBYSxvQkFBb0IsR0FBRztBQUVuQyxlQUNJLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUNJLGdDQUFBQSxRQUFBLGNBQUMsWUFBTyxXQUFVLGFBQVksU0FBUyxNQUFNO0FBQUMsY0FBRyxZQUFZO0FBQW9CLHdCQUFZLG1CQUFtQixlQUFlLGtCQUFrQixFQUFDLEtBQUssTUFBSyxDQUFDO0FBQUEsUUFBQyxLQUFJLEtBQU0sQ0FDNUs7QUFBQSxNQUVSLE9BQ0s7QUFDRCxZQUFHLFNBQVMsYUFBYSxjQUFjLENBQUMsSUFBSSxHQUFHO0FBRTNDLGlCQUNJLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUNJLGdDQUFBQSxRQUFBLGNBQUMsT0FBRSxXQUFVLGFBQVksTUFBTSxPQUFNLEtBQU0sR0FFdkMsYUFDSSxnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxnQkFBRSxRQUVFLGdDQUFBQSxRQUFBLGNBQUMsWUFBTyxXQUFVLGlCQUFnQixLQUFLLGFBQWEsR0FBRyxTQUFTLE1BQU07QUFBQyxnQkFBRyxZQUFZO0FBQTBCLDBCQUFZLHlCQUF5QixrQkFBa0IsRUFBQyxLQUFLLE1BQUssQ0FBQztBQUFBLFVBQUMsS0FDaEwsZ0NBQUFBLFFBQUEsY0FBQyxVQUFLLFdBQVUsb0JBQ1osZ0NBQUFBLFFBQUEsY0FBQyxXQUFRLE1BQU0sVUFBVSxNQUFNLEtBQUksR0FBRSxRQUVwQyxhQUFhLGNBQWMsR0FBRSxRQUU3QixTQUFTLGFBQWEsY0FBYyxDQUFDLElBQUksSUFDcEMsZUFDQSxVQUNWLENBQ0osQ0FDSixJQUNBLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGNBQUUsQ0FFZDtBQUFBLFFBRVIsT0FDSztBQUVELGlCQUNJLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUNJLGdDQUFBQSxRQUFBLGNBQUMsT0FBRSxXQUFVLGFBQVksTUFBTSxhQUFhLEtBQUssS0FBSyxPQUFNLEtBQU0sQ0FDdEU7QUFBQSxRQUVSO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFBQSxFQUNKO0FBZ0JPLFdBQVMsc0JBQXNCLGNBQXFCLGdCQUFnQyxxQkFBMEIsYUFBc0IscUJBQTJFLGFBQXdDO0FBQzFQLFFBQUksU0FBUyxnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxjQUFFO0FBR2YscUJBQWlCLGVBQWUsVUFBVSxvQkFBb0IsY0FBYztBQUU1RSxRQUFJLE9BQU8sd0JBQXdCLFVBQVU7QUFDekMsZUFBUyxpQkFBaUIsY0FBYyxnQkFBZ0IscUJBQXFCLFlBQVksV0FBVztBQUFBLElBQ3hHLFdBQ1MsT0FBTyx3QkFBd0IsWUFBWSxDQUFDLE1BQU0sUUFBUSxtQkFBbUIsS0FBSyxNQUFNLFFBQVEsb0JBQW9CLE1BQU0sQ0FBQyxLQUFLLG9CQUFvQixNQUFNLEVBQUUsUUFBUSxhQUFhLE1BQU0sSUFBSTtBQUVoTSxlQUFTLGNBQWMsY0FBYyxRQUFRLFNBQWMsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHLFlBQVksV0FBVztBQUFBLElBQy9HLE9BQ0s7QUFDRCxZQUFNLGlCQUFpQixvQkFBb0IsOENBQThDO0FBQ3pGLFlBQU0sZ0JBQWdCLG9CQUFvQiw2Q0FBNkM7QUFDdkYsWUFBTSxpQkFBaUIsUUFBUSxvQkFBb0IsOENBQThDLENBQUM7QUFDbEcsWUFBTSxVQUFVLFFBQVEsb0JBQW9CLHVDQUF1QyxDQUFDO0FBQ3BGLFlBQU0sV0FBVyxvQkFBb0Isd0NBQXdDO0FBQzdFLFlBQU0saUJBQWlCLG9CQUFvQiw4Q0FBOEMsS0FBSyxvQkFBb0IsdURBQXVEO0FBQ3pLLFlBQU0saUJBQWlCLG9CQUFvQiw4Q0FBOEMsS0FBSyxvQkFBb0IsdURBQXVEO0FBQ3pLLFlBQU0sY0FBYyxvQkFBb0IsMkNBQTJDLEtBQUssb0JBQW9CLG9EQUFvRDtBQUNoSyxZQUFNLFVBQVUsb0JBQW9CLHVDQUF1QztBQUMzRSxZQUFNLGVBQWUsb0JBQW9CLDRDQUE0QztBQUNyRixZQUFNLFFBQVEsUUFBUSxvQkFBb0IscUNBQXFDLENBQUM7QUFDaEYsWUFBTSxZQUFZLG9CQUFvQix5Q0FBeUM7QUFDL0UsWUFBTSxhQUFhLG9CQUFvQiwwQ0FBMEM7QUFDakYsWUFBTSxhQUFhLG9CQUFvQiwwQ0FBMEM7QUFFakYsVUFBRyxZQUFZO0FBQ1gsY0FBTSxXQUEyQjtBQUFBLFVBQzdCLHNCQUFzQixjQUFjLGdCQUFnQixZQUFZLFlBQVksV0FBVztBQUFBLFFBQzNGO0FBRUEsY0FBTSxtQkFBbUIsUUFBUSxvQkFBb0IsZ0RBQWdELENBQUM7QUFDdEcsWUFBRyxpQkFBaUIsU0FBUyxHQUFHO0FBQzVCLG1CQUFTLEtBQUssZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQUUsR0FBQyxDQUFHO0FBRXBCLGNBQUksVUFBVTtBQUNkLHFCQUFVLGVBQWUsa0JBQWtCO0FBQ3ZDLGdCQUFHO0FBQVMsd0JBQVU7QUFBQTtBQUNqQix1QkFBUyxLQUFLLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUFFLE9BQU8sQ0FBRztBQUUvQixrQkFBTSxlQUFlLFlBQVksK0NBQStDO0FBQ2hGLGtCQUFNLGVBQWUsWUFBWSwrQ0FBK0M7QUFDaEYsa0JBQU0sZUFBZSxZQUFZLCtDQUErQztBQUNoRixrQkFBTSxlQUFlLFlBQVksK0NBQStDO0FBRWhGLGdCQUFHO0FBQWMsdUJBQVMsS0FBSyxnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxnQkFBRSxNQUFNLFlBQWEsQ0FBRztBQUFBLHFCQUMvQztBQUFjLHVCQUFTLEtBQUssZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQUUsV0FBTSxZQUFhLENBQUc7QUFBQSxxQkFDcEQ7QUFBYyx1QkFBUyxLQUFLLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUFFLE1BQU0sWUFBYSxDQUFHO0FBQUEscUJBQ3BEO0FBQWMsdUJBQVMsS0FBSyxnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxnQkFBRSxXQUFNLFlBQWEsQ0FBRztBQUFBLFVBQ2hFO0FBRUEsbUJBQVMsS0FBSyxnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxnQkFBRSxHQUFDLENBQUc7QUFBQSxRQUN4QjtBQUVBLGlCQUFTLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUFHLFNBQVMsSUFBSSxDQUFDLFNBQVMsZ0NBQUFBLFFBQUEsY0FBQyxVQUFLLEtBQUssYUFBYSxLQUFJLElBQUssQ0FBTyxDQUFFO0FBQUEsTUFDakYsV0FDUyxnQkFBZ0I7QUFDckIsaUJBQ0ksZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0ssc0JBQXNCLGNBQWMsZ0JBQWdCLFlBQVksWUFBWSxXQUFXLEdBQ3hGLGdDQUFBQSxRQUFBLGNBQUMsT0FBRSxPQUFPLEVBQUMsT0FBTyxTQUFRLEtBQUcsUUFBTSxHQUNsQyxzQkFBc0IsY0FBYyxnQkFBZ0IsUUFBUSxjQUFjLEVBQUUsQ0FBQyxHQUFHLFlBQVksV0FBVyxDQUM1RztBQUFBLE1BRVIsV0FDUyxlQUFlO0FBQ3BCLGlCQUNJLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUNLLHNCQUFzQixjQUFjLGdCQUFnQixZQUFZLFlBQVksV0FBVyxHQUN4RixnQ0FBQUEsUUFBQSxjQUFDLE9BQUUsT0FBTyxFQUFDLE9BQU8sU0FBUSxLQUFHLFFBQU0sR0FDbEMsc0JBQXNCLGNBQWMsZ0JBQWdCLFFBQVEsYUFBYSxFQUFFLENBQUMsR0FBRyxZQUFZLFdBQVcsQ0FDM0c7QUFBQSxNQUVSLFdBQ1MsZUFBZSxTQUFTLEdBQUc7QUFDaEMsY0FBTSxXQUEyQjtBQUFBLFVBQzdCLGdDQUFBQSxRQUFBLGNBQUMsVUFBSyxLQUFLLGFBQWEsR0FBRyxXQUFVLDBCQUF1QixHQUU1RDtBQUFBLFFBQ0o7QUFDQSxtQkFBVyxRQUFRLGdCQUFnQjtBQUMvQixjQUFJLFNBQVMsU0FBUyxHQUFHO0FBQ3JCLHFCQUFTO0FBQUEsY0FDTCxnQ0FBQUEsUUFBQSxjQUFDLFdBQUUsT0FBSztBQUFBLFlBQ1o7QUFBQSxVQUNKO0FBQ0EsbUJBQVM7QUFBQSxZQUNMLHNCQUFzQixjQUFjLGdCQUFnQixNQUFNLFlBQVksV0FBVztBQUFBLFVBQ3JGO0FBQUEsUUFDSjtBQUNBLGlCQUFTO0FBQUEsVUFDTCxnQ0FBQUEsUUFBQSxjQUFDLFVBQUssV0FBVSwwQkFBdUIsR0FFdkM7QUFBQSxRQUNKO0FBQ0EsaUJBQ0ksZ0NBQUFBLFFBQUEsY0FBQyxjQUFNLFNBQVMsSUFBSSxDQUFDLFNBQVMsZ0NBQUFBLFFBQUEsY0FBQyxVQUFLLEtBQUssYUFBYSxLQUFJLElBQUssQ0FBTyxDQUFFO0FBQUEsTUFFaEYsV0FDUyxRQUFRLFNBQVMsR0FBRztBQUN6QixjQUFNLFdBQTJCO0FBQUEsVUFDN0IsZ0NBQUFBLFFBQUEsY0FBQyxVQUFLLEtBQUssYUFBYSxHQUFHLFdBQVUsMEJBQXVCLEdBRTVEO0FBQUEsUUFDSjtBQUNBLG1CQUFXLFFBQVEsU0FBUztBQUN4QixjQUFJLFNBQVMsU0FBUyxHQUFHO0FBQ3JCLHFCQUFTO0FBQUEsY0FDTCxnQ0FBQUEsUUFBQSxjQUFDLFdBQUUsTUFBSTtBQUFBLFlBQ1g7QUFBQSxVQUNKO0FBQ0EsbUJBQVM7QUFBQSxZQUNMLHNCQUFzQixjQUFjLGdCQUFnQixNQUFNLFlBQVksV0FBVztBQUFBLFVBQ3JGO0FBQUEsUUFDSjtBQUNBLGlCQUFTO0FBQUEsVUFDTCxnQ0FBQUEsUUFBQSxjQUFDLFVBQUssV0FBVSwwQkFBdUIsR0FFdkM7QUFBQSxRQUNKO0FBQ0EsaUJBQ0ksZ0NBQUFBLFFBQUEsY0FBQyxjQUFNLFNBQVMsSUFBSSxDQUFDLFNBQVMsZ0NBQUFBLFFBQUEsY0FBQyxVQUFLLEtBQUssYUFBYSxLQUFJLElBQUssQ0FBTyxDQUFFO0FBQUEsTUFFaEYsV0FDUyxVQUFVO0FBQ2YsaUJBQ0ksZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0ssc0JBQXNCLGNBQWMsZ0JBQWdCLFlBQVksWUFBWSxXQUFXLEdBQ3hGLGdDQUFBQSxRQUFBLGNBQUMsT0FBRSxPQUFPLEVBQUMsT0FBTyxTQUFRLEtBQUcsU0FBTyxHQUNuQyxzQkFBc0IsY0FBYyxnQkFBZ0IsUUFBUSxRQUFRLEVBQUUsQ0FBQyxHQUFHLFlBQVksV0FBVyxDQUN0RztBQUFBLE1BRVIsV0FDUyxnQkFBZ0I7QUFDckIsaUJBQ0ksZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0ssc0JBQXNCLGNBQWMsZ0JBQWdCLFlBQVksWUFBWSxXQUFXLEdBQ3hGLGdDQUFBQSxRQUFBLGNBQUMsT0FBRSxPQUFPLEVBQUMsT0FBTyxTQUFRLEtBQUcsT0FBSyxHQUNqQyxzQkFBc0IsY0FBYyxnQkFBZ0IsUUFBUSxjQUFjLEVBQUUsQ0FBQyxHQUFHLFlBQVksV0FBVyxDQUM1RztBQUFBLE1BRVIsV0FDUyxnQkFBZ0I7QUFDckIsaUJBQ0ksZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0ssc0JBQXNCLGNBQWMsZ0JBQWdCLFlBQVksWUFBWSxXQUFXLEdBQ3hGLGdDQUFBQSxRQUFBLGNBQUMsT0FBRSxPQUFPLEVBQUMsT0FBTyxTQUFRLEtBQUcsT0FBSyxHQUNqQyxzQkFBc0IsY0FBYyxnQkFBZ0IsUUFBUSxjQUFjLEVBQUUsQ0FBQyxHQUFHLFlBQVksV0FBVyxDQUM1RztBQUFBLE1BRVIsV0FDUyxhQUFhO0FBQ2xCLGlCQUNJLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUNLLHNCQUFzQixjQUFjLGdCQUFnQixZQUFZLFlBQVksV0FBVyxHQUN4RixnQ0FBQUEsUUFBQSxjQUFDLE9BQUUsT0FBTyxFQUFDLE9BQU8sU0FBUSxLQUFHLFdBQVMsR0FDckMsc0JBQXNCLGNBQWMsZ0JBQWdCLFFBQVEsV0FBVyxFQUFFLENBQUMsR0FBRyxZQUFZLFdBQVcsQ0FDekc7QUFBQSxNQUVSLFdBQ1MsU0FBUztBQUNkLGlCQUNJLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUNLLHNCQUFzQixjQUFjLGdCQUFnQixZQUFZLFlBQVksV0FBVyxHQUN4RixnQ0FBQUEsUUFBQSxjQUFDLE9BQUUsT0FBTyxFQUFDLE9BQU8sU0FBUSxLQUFHLFFBQU0sR0FDbEMsc0JBQXNCLGNBQWMsZ0JBQWdCLFFBQVEsT0FBTyxFQUFFLENBQUMsR0FBRyxZQUFZLFdBQVcsQ0FDckc7QUFBQSxNQUVSLFdBQ1MsY0FBYztBQUNuQixpQkFDSSxnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxnQkFDSSxnQ0FBQUEsUUFBQSxjQUFDLFdBQUUsTUFBSSxHQUNOLHNCQUFzQixjQUFjLGdCQUFnQixRQUFRLFlBQVksRUFBRSxDQUFDLEdBQUcsWUFBWSxXQUFXLENBQzFHO0FBQUEsTUFFUixXQUNTLE1BQU0sU0FBUyxHQUFHO0FBQ3ZCLGNBQU0sV0FBMkI7QUFBQSxVQUM3QixnQ0FBQUEsUUFBQSxjQUFDLFVBQUssS0FBSyxhQUFhLEdBQUcsV0FBVSwwQkFBdUIsR0FFNUQ7QUFBQSxRQUNKO0FBQ0EsbUJBQVcsUUFBUSxPQUFPO0FBQ3RCLGNBQUksU0FBUyxTQUFTLEdBQUc7QUFDckIscUJBQVM7QUFBQSxjQUNMLGdDQUFBQSxRQUFBLGNBQUMsVUFBSyxLQUFLLGFBQWEsR0FBRyxXQUFVLDBCQUF1QixPQUU1RDtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQ0EsbUJBQVM7QUFBQSxZQUNMLHNCQUFzQixjQUFjLGdCQUFnQixNQUFNLFlBQVksV0FBVztBQUFBLFVBQ3JGO0FBQUEsUUFDSjtBQUNBLGlCQUFTO0FBQUEsVUFDTCxnQ0FBQUEsUUFBQSxjQUFDLFVBQUssV0FBVSwwQkFBdUIsR0FFdkM7QUFBQSxRQUNKO0FBQ0EsaUJBQ0ksZ0NBQUFBLFFBQUEsY0FBQyxjQUFNLFNBQVMsSUFBSSxDQUFDLFNBQVMsZ0NBQUFBLFFBQUEsY0FBQyxVQUFLLEtBQUssYUFBYSxLQUFJLElBQUssQ0FBTyxDQUFFO0FBQUEsTUFFaEYsV0FDUyxXQUFXO0FBQ2hCLGlCQUNJLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUNJLGdDQUFBQSxRQUFBLGNBQUMsT0FBRSxPQUFPLEVBQUMsT0FBTyxTQUFRLEtBQUcsVUFBUSxHQUNyQyxnQ0FBQUEsUUFBQSxjQUFDLFVBQUssS0FBSyxhQUFhLEdBQUcsV0FBVSwwQkFBdUIsR0FFNUQsR0FDQyxzQkFBc0IsY0FBYyxnQkFBZ0IsV0FBVyxZQUFZLFdBQVcsR0FDdkYsZ0NBQUFBLFFBQUEsY0FBQyxVQUFLLEtBQUssYUFBYSxHQUFHLFdBQVUsMEJBQXVCLEdBRTVELENBQ0o7QUFBQSxNQUVSO0FBQUEsSUFDSjtBQUVBLFdBQU87QUFBQSxFQUNYO0FBYU8sV0FBUyxrQkFBa0IsY0FBcUIsZ0JBQWdDLE9BQWMsYUFBc0IscUJBQTJFLGFBQXdDO0FBQzFPLFdBQ0ksZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0ssTUFBTSxXQUFXLElBQ2QsZ0NBQUFBLFFBQUEsY0FBQyxXQUFHLHNCQUFzQixjQUFjLGFBQWEsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEdBQUcsWUFBWSxXQUFXLENBQUUsSUFFakgsZ0NBQUFBLFFBQUEsY0FBQyxZQUVPLE1BQU0sSUFBSSxDQUFDLFNBQWM7QUFDckIsYUFBUSxnQ0FBQUEsUUFBQSxjQUFDLFFBQUcsS0FBSyxhQUFhLEtBQUssc0JBQXNCLGNBQWMsYUFBYSxrQkFBa0IsR0FBRyxNQUFNLFlBQVksV0FBVyxDQUFFO0FBQUEsSUFDNUksQ0FBQyxDQUVULENBQ0o7QUFBQSxFQUVSO0FBYUEsV0FBUyxlQUFlLGNBQXFCLE1BQWMsZ0JBQTRDLGFBQXNCLHFCQUEyRSxhQUEwQjtBQUM5TixVQUFNLGdCQUNGLENBQUM7QUFFTCxRQUFHLGdCQUFnQjtBQUNmLGlCQUFXLFlBQVksT0FBTyxLQUFLLGVBQWUsY0FBYyxHQUFHO0FBQy9ELGlCQUNRQyxLQUFJLEtBQUssUUFBUSxVQUFVLENBQUMsR0FDaENBLE9BQU0sSUFDTkEsS0FBSSxLQUFLLFFBQVEsVUFBVUEsRUFBQyxHQUM5QjtBQUNFLHdCQUFjLEtBQUs7QUFBQSxZQUNmLE9BQU9BO0FBQUEsWUFDUCxLQUFLQSxLQUFJLFNBQVM7QUFBQSxZQUNsQixNQUFNLGlCQUFpQixjQUFjLGdCQUFnQixVQUFVLFlBQVksV0FBVztBQUFBLFVBQzFGLENBQUM7QUFFRCxVQUFBQSxNQUFLLFNBQVM7QUFBQSxRQUNsQjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBRUEsVUFBTSxRQUFRO0FBQ2QsYUFBU0MsU0FBUSxNQUFNLEtBQUssSUFBSSxHQUFHQSxRQUFPQSxTQUFRLE1BQU0sS0FBSyxJQUFJLEdBQUc7QUFDaEUsWUFBTSxNQUFNQSxPQUFNLENBQUM7QUFHbkIsb0JBQWMsS0FBSztBQUFBLFFBQ2YsT0FBT0EsT0FBTTtBQUFBLFFBQ2IsS0FBS0EsT0FBTSxRQUFRLElBQUk7QUFBQSxRQUN2QixNQUNJLGdDQUFBRixRQUFBLGNBQUMsVUFBSyxLQUFLLGFBQWEsS0FDcEIsZ0NBQUFBLFFBQUEsY0FBQyxPQUFFLFdBQVUsYUFBWSxNQUFNLE9BQU0sR0FBSSxDQUM3QztBQUFBLE1BRVIsQ0FBQztBQUFBLElBQ0w7QUFFQSxrQkFBYyxLQUFLLENBQUMsR0FBRUcsT0FBTSxFQUFFLFFBQVFBLEdBQUUsS0FBSztBQUU3QztBQUFtQixlQUFTRixLQUFJLEdBQUdBLEtBQUksY0FBYyxVQUFVO0FBQzNELGlCQUFTRyxNQUFLSCxLQUFJLEdBQUdHLE1BQUssY0FBYyxRQUFRLEVBQUVBLEtBQUk7QUFDbEQsZ0JBQU0sVUFBVSxjQUFjSCxFQUFDO0FBQy9CLGdCQUFNLFVBQVUsY0FBY0csR0FBRTtBQUVoQyxjQUFJLFlBQVk7QUFBUztBQUd6QixjQUFJLFFBQVEsT0FBTyxRQUFRLFNBQVMsUUFBUSxPQUFPLFFBQVEsT0FBTztBQUk5RCxnQkFBRyxRQUFRLE1BQU0sUUFBUSxRQUFRLFFBQVEsTUFBTSxRQUFRLE9BQU87QUFDMUQsNEJBQWMsT0FBT0gsSUFBRyxDQUFDO0FBQUEsWUFDN0IsT0FDSztBQUNELDRCQUFjLE9BQU9HLEtBQUksQ0FBQztBQUFBLFlBQzlCO0FBQ0EscUJBQVM7QUFBQSxVQUNiO0FBQUEsUUFDSjtBQUNBLFVBQUVIO0FBQUEsTUFDTjtBQUVBLFFBQUksY0FBYyxXQUFXO0FBQUcsYUFBTyxnQ0FBQUQsUUFBQSw4QkFBQUEsUUFBQSxnQkFBRyxJQUFLO0FBRS9DLFVBQU0sTUFBc0IsQ0FBQztBQUM3QixRQUFJLElBQUk7QUFFUixlQUFXLFFBQVEsZUFBZTtBQUM5QixVQUFJO0FBQUEsUUFDQSxnQ0FBQUEsUUFBQSxjQUFDLFVBQUssS0FBSyxhQUFhLEtBQ25CLEtBQUssVUFBVSxHQUFHLEtBQUssS0FBSyxDQUNqQztBQUFBLE1BQ0o7QUFDQSxVQUFJLEtBQUssS0FBSyxJQUFJO0FBQ2xCLFVBQUksS0FBSztBQUFBLElBQ2I7QUFDQSxRQUFJO0FBQUEsTUFDQSxnQ0FBQUEsUUFBQSxjQUFDLFVBQUssS0FBSyxhQUFhLEtBQUksS0FBSyxNQUFNLENBQUMsQ0FBRTtBQUFBLElBQzlDO0FBRUEsV0FBTyxnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxnQkFBRyxHQUFJO0FBQUEsRUFDbEI7QUFhTyxXQUFTLGNBQWMsUUFBZSxTQUF1QixhQUFzQixxQkFBMkUsYUFBd0M7QUFDek0sYUFBUyxZQUFZLE9BQW1DO0FBQ3BELFlBQU0saUJBQWlCLE9BQU8sa0JBQWtCO0FBR2hELFVBQUcsT0FBTyxLQUFLLGVBQWUsY0FBYyxFQUFFLFVBQVUsR0FBRztBQUN2RCxZQUFHLE9BQU8sTUFBTSxTQUFTLFVBQVU7QUFDL0IsaUJBQU8sZUFBZSxRQUFRLE1BQU0sTUFBTSxTQUFTLEdBQUcsUUFBVyxZQUFZLFdBQVc7QUFBQSxRQUM1RixPQUNLO0FBRUQsaUJBQU8sZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQUcsS0FBSyxVQUFVLE1BQU0sS0FBSyxDQUFFO0FBQUEsUUFDMUM7QUFBQSxNQUNKLE9BQ0s7QUFDRCxjQUFNLGVBQWUsZUFBZSxJQUFJLE1BQU0sS0FBSztBQUVuRCxZQUFJLGNBQWM7QUFDZCxpQkFBTyxpQkFBaUIsUUFBUSxnQkFBZ0IsTUFBTSxPQUFPLFlBQVksV0FBVztBQUFBLFFBQ3hGLE9BQ0s7QUFDRCxjQUFJLE9BQU8sTUFBTSxVQUFVLFVBQVU7QUFDakMsZ0JBQUcsT0FBTyxRQUFRLEtBQUssWUFBWTtBQUMvQixxQkFBTyxnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxnQkFBRyxLQUFLLFVBQVUsTUFBTSxLQUFLLENBQUU7QUFBQSxZQUMxQyxPQUNLO0FBQ0QscUJBQU8sc0JBQXNCLFFBQVEsZ0JBQWdCLE1BQU0sT0FBTyxZQUFZLFdBQVc7QUFBQSxZQUM3RjtBQUFBLFVBQ0osT0FDSztBQUNELG1CQUFPLGVBQWUsUUFBUSxNQUFNLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixZQUFZLFdBQVc7QUFBQSxVQUNqRztBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUVBLFdBQ0ksZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0ssWUFBWSxPQUFPLEdBQUUsUUFFckIsUUFBUSxZQUFZLEtBQUssd0JBQXdCLFFBQVEsUUFBUSxZQUFZLENBQUMsQ0FDbkY7QUFBQSxFQUVSOzs7QUR4bUJBLE1BQUFLLG9CQUFxQjtBQUVyQixNQUFNLG9CQUFvQjtBQUUxQixXQUFTLGlCQUFpQixPQUE4QjtBQUVwRCxVQUFNLEVBQUUsS0FBSyxLQUFLLFlBQVksV0FBVyxtQkFBbUIsWUFBWSxXQUFXLFlBQWEsV0FBVyxvQkFBb0Isc0JBQXNCLDBCQUEyQixHQUFHLEtBQUssSUFBSTtBQUM1TCxVQUFNLFNBQVMsSUFBSSxPQUFPLEdBQUc7QUFFN0IsVUFBTTtBQUFBLE1BQ0YsTUFBTTtBQUFBLE1BQ04sV0FBVztBQUFBLE1BQ1gsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLE1BQ1QsT0FBTztBQUFBLElBQ1gsSUFBSTtBQUFBLE1BQ0E7QUFBQSxRQUNJO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUNBLE1BQU07QUFDRixlQUFPLE9BQU8sZ0JBQWdCLEtBQUssWUFBWSxZQUFZLFdBQVcsU0FBUztBQUFBLE1BQ25GO0FBQUEsSUFDSjtBQUVBLGFBQVMsZ0JBQWdCQyxTQUErQjtBQUNwRCxhQUNJLGdDQUFBQyxRQUFBLDhCQUFBQSxRQUFBLGdCQUNLRCxRQUFPLFNBQVMsS0FDYixnQ0FBQUMsUUFBQSw4QkFBQUEsUUFBQSxnQkFBRSxnQ0FBQUEsUUFBQSxjQUFDLG1CQUNDLGdDQUFBQSxRQUFBLGNBQUMsV0FBRSxRQUFNLEdBQ1JELFFBQU8sU0FBUyxDQUNyQixHQUFjLGdDQUFBQyxRQUFBLGNBQUMsZUFBUyxDQUFFLENBRWxDO0FBQUEsSUFFUjtBQUVBLGFBQVMsbUJBQW1CRCxTQUErQjtBQUN2RCxhQUNJLGdDQUFBQyxRQUFBLDhCQUFBQSxRQUFBLGdCQUNLRCxRQUFPLFlBQVksRUFBRSxTQUFTLEtBQzNCLGdDQUFBQyxRQUFBLDhCQUFBQSxRQUFBLGdCQUFFLGdDQUFBQSxRQUFBLGNBQUMsbUJBQ0MsZ0NBQUFBLFFBQUEsY0FBQyxXQUFFLFdBQVMsR0FDWEQsUUFBTyxZQUFZLEVBQUUsU0FBUyxJQUMzQixnQ0FBQUMsUUFBQSxjQUFDLFlBQUlELFFBQU8sWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO0FBQ3ZDLGVBQU8sZ0NBQUFDLFFBQUEsY0FBQyxRQUFHLEtBQUssYUFBYSxHQUFHLElBQUksUUFBUSxTQUFRLGNBQWNELFNBQVEsU0FBUyxZQUFZLEVBQUMsb0JBQW9CLE1BQU0sb0JBQW9CLHNCQUFzQixNQUFNLHNCQUFzQiwwQkFBMEIsTUFBTSx5QkFBd0IsQ0FBQyxDQUFFO0FBQUEsTUFDL1AsQ0FBQyxDQUFFLElBQ0gsZ0NBQUFDLFFBQUEsY0FBQyxXQUFHLGNBQWNELFNBQVFBLFFBQU8sWUFBWSxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUMsb0JBQW9CLE1BQU0sb0JBQW9CLHNCQUFzQixNQUFNLHNCQUFzQiwwQkFBMEIsTUFBTSx5QkFBd0IsQ0FBQyxDQUFFLENBRW5PLENBQWMsQ0FFdEI7QUFBQSxJQUVSO0FBRUEsYUFBUyxpQkFBaUIsTUFBNEI7QUFDbEQsWUFBTUUsUUFBTyxLQUFLLFVBQVU7QUFDNUIsYUFDSSxnQ0FBQUQsUUFBQSw4QkFBQUEsUUFBQSxnQkFDS0MsTUFBSyxTQUFTLEtBQ1gsZ0NBQUFELFFBQUEsOEJBQUFBLFFBQUEsZ0JBQUUsZ0NBQUFBLFFBQUEsY0FBQyxtQkFDQyxnQ0FBQUEsUUFBQSxjQUFDLFdBQUUsVUFBUSxHQUNWQyxNQUFLLFNBQVMsSUFDWCxnQ0FBQUQsUUFBQSxjQUFDLFlBQUlDLE1BQUssSUFBSSxDQUFDQSxVQUFTO0FBQ3BCLGVBQU8sZ0NBQUFELFFBQUEsY0FBQyxRQUFHLEtBQUssYUFBYSxLQUFJLHNCQUFzQixNQUFNLEtBQUssa0JBQWtCLEdBQUdDLE9BQU0sWUFBWSxFQUFDLG9CQUFvQixNQUFNLG9CQUFvQixzQkFBc0IsTUFBTSxzQkFBc0IsMEJBQTBCLE1BQU0seUJBQXdCLENBQUMsQ0FBRTtBQUFBLE1BQ3pRLENBQUMsQ0FBRSxJQUNILGdDQUFBRCxRQUFBLGNBQUMsV0FBRyxzQkFBc0IsTUFBTSxLQUFLLGtCQUFrQixHQUFHQyxNQUFLLENBQUMsR0FBRyxZQUFZLEVBQUMsb0JBQW9CLE1BQU0sb0JBQW9CLHNCQUFzQixNQUFNLHNCQUFzQiwwQkFBMEIsTUFBTSx5QkFBd0IsQ0FBQyxDQUFFLENBRW5QLENBQWMsQ0FFdEI7QUFBQSxJQUVSO0FBRUEsYUFBUyxrQkFBa0IsTUFBNEI7QUFDbkQsYUFDSSxnQ0FBQUQsUUFBQSw4QkFBQUEsUUFBQSxnQkFDTSxLQUFLLFdBQVcsRUFBRSxTQUFTLEtBQ3pCLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUFFLGdDQUFBQSxRQUFBLGNBQUMsbUJBQ0MsZ0NBQUFBLFFBQUEsY0FBQyxXQUFFLGFBQVcsR0FDYixLQUFLLFdBQVcsRUFBRSxTQUFTLElBQ3hCLGdDQUFBQSxRQUFBLGNBQUMsWUFBSSxLQUFLLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztBQUNuQyxlQUFPLGdDQUFBQSxRQUFBLGNBQUMsUUFBRyxLQUFLLGFBQWEsR0FBRyxJQUFJLFNBQVMsYUFBYSxLQUFJLGlCQUFpQixNQUFNLEtBQUssa0JBQWtCLEdBQUcsUUFBUSxZQUFZLEVBQUMsb0JBQW9CLE1BQU0sb0JBQW9CLHNCQUFzQixNQUFNLHNCQUFzQiwwQkFBMEIsTUFBTSx5QkFBd0IsQ0FBQyxDQUFFO0FBQUEsTUFDblMsQ0FBQyxDQUFFLElBQ0gsZ0NBQUFBLFFBQUEsY0FBQyxXQUFHLGlCQUFpQixNQUFNLEtBQUssa0JBQWtCLEdBQUcsS0FBSyxXQUFXLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBQyxvQkFBb0IsTUFBTSxvQkFBb0Isc0JBQXNCLE1BQU0sc0JBQXNCLDBCQUEwQixNQUFNLHlCQUF3QixDQUFDLENBQUUsQ0FFM1AsQ0FBYyxDQUV0QjtBQUFBLElBRVI7QUFFQSxhQUFTLGtDQUFrQ0UsV0FBbUM7QUFDMUUsWUFBTSxrQkFBa0JBLFVBQVMsWUFBWSxFQUFFLElBQUksVUFBUTtBQUN2RCxlQUFRO0FBQUEsVUFDSixvREFBb0Q7QUFBQSxVQUNwRCwyREFBMkQ7QUFBQSxVQUMzRCxvREFBb0Q7QUFBQSxVQUNwRCxtREFBbUQ7QUFBQSxVQUNuRCxvREFBb0Q7QUFBQSxVQUNwRCxtREFBbUQ7QUFBQSxVQUNuRCxxREFBcUQ7QUFBQSxRQUN6RCxFQUFHLElBQUk7QUFBQSxNQUNYLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSTtBQUUxQixhQUNJLGdDQUFBRixRQUFBLDhCQUFBQSxRQUFBLGdCQUNLLGdCQUFnQixTQUFTLEtBQ3RCLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUFFLGdDQUFBQSxRQUFBLGNBQUMsbUJBQ0MsZ0NBQUFBLFFBQUEsY0FBQyxXQUFFLGtCQUFnQixHQUNsQixnQkFBZ0IsU0FBUyxJQUN0QixnQ0FBQUEsUUFBQSxjQUFDLFlBQUksZ0JBQWdCLElBQUksQ0FBQyxtQkFBbUI7QUFDekMsZUFBTyxnQ0FBQUEsUUFBQSxjQUFDLFFBQUcsS0FBSyxhQUFhLEtBQUksY0FBZTtBQUFBLE1BQ3BELENBQUMsRUFDSSxLQUFLLENBQUUsSUFDWixnQ0FBQUEsUUFBQSxjQUFDLFdBQUcsZ0JBQWdCLENBQUMsQ0FBRSxDQUUvQixDQUFjLENBRXRCO0FBQUEsSUFFUjtBQUVBLGFBQVMsaUJBQWlCRSxXQUFtQztBQUN6RCxZQUFNLFVBQVVBLFVBQVMsVUFBVTtBQUNuQyxhQUNJLGdDQUFBRixRQUFBLDhCQUFBQSxRQUFBLGdCQUNLLFFBQVEsU0FBUyxLQUNkLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUFFLGdDQUFBQSxRQUFBLGNBQUMsbUJBQ0MsZ0NBQUFBLFFBQUEsY0FBQyxXQUFFLFNBQU8sR0FDVCxRQUFRLFNBQVMsSUFDZCxnQ0FBQUEsUUFBQSxjQUFDLFlBQUksUUFBUSxJQUFJLENBQUNHLGFBQVk7QUFDMUIsZUFBTyxnQ0FBQUgsUUFBQSxjQUFDLFFBQUcsS0FBSyxhQUFhLEtBQUksc0JBQXNCRSxXQUFVQSxVQUFTLGtCQUFrQixHQUFHQyxVQUFTLFlBQVksRUFBQyxvQkFBb0IsTUFBTSxvQkFBb0Isc0JBQXNCLE1BQU0sc0JBQXNCLDBCQUEwQixNQUFNLHlCQUF3QixDQUFDLENBQUU7QUFBQSxNQUNwUixDQUFDLENBQUUsSUFDSCxnQ0FBQUgsUUFBQSxjQUFDLFdBQUcsc0JBQXNCRSxXQUFVQSxVQUFTLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLFlBQVksRUFBQyxvQkFBb0IsTUFBTSxvQkFBb0Isc0JBQXNCLE1BQU0sc0JBQXNCLDBCQUEwQixNQUFNLHlCQUF3QixDQUFDLENBQUUsQ0FFOVAsQ0FBYyxDQUV0QjtBQUFBLElBRVI7QUFFQSxhQUFTLGdCQUFnQkEsV0FBbUM7QUFDeEQsWUFBTSxTQUFTQSxVQUFTLFNBQVM7QUFDakMsYUFDSSxnQ0FBQUYsUUFBQSw4QkFBQUEsUUFBQSxnQkFDSyxPQUFPLFNBQVMsS0FDYixnQ0FBQUEsUUFBQSxjQUFDLG1CQUNHLGdDQUFBQSxRQUFBLGNBQUMsV0FBRSxRQUFNLEdBQ1IsT0FBTyxTQUFTLElBQ2IsZ0NBQUFBLFFBQUEsY0FBQyxZQUFJLE9BQU8sSUFBSSxDQUFDSSxZQUFXO0FBQ3hCLGVBQU8sZ0NBQUFKLFFBQUEsY0FBQyxRQUFHLEtBQUssYUFBYSxLQUFJLHNCQUFzQkUsV0FBVUEsVUFBUyxrQkFBa0IsR0FBR0UsU0FBUSxZQUFZLEVBQUMsb0JBQW9CLE1BQU0sb0JBQW9CLHNCQUFzQixNQUFNLHNCQUFzQiwwQkFBMEIsTUFBTSx5QkFBd0IsQ0FBQyxDQUFFO0FBQUEsTUFDblIsQ0FBQyxDQUFFLElBQ0gsZ0NBQUFKLFFBQUEsY0FBQyxXQUFHLHNCQUFzQkUsV0FBVUEsVUFBUyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsR0FBRyxZQUFZLEVBQUMsb0JBQW9CLE1BQU0sb0JBQW9CLHNCQUFzQixNQUFNLHNCQUFzQiwwQkFBMEIsTUFBTSx5QkFBd0IsQ0FBQyxDQUFFLENBRTdQLENBRVI7QUFBQSxJQUVSO0FBRUEsYUFBUyx1Q0FBdUMsWUFBdUM7QUFDbkYsWUFBTSxlQUFlLE9BQU8sS0FBSyxXQUFXLFVBQVU7QUFDdEQsWUFBTSxxQkFBcUIsYUFBYSxPQUFPLENBQUMsUUFBUSxJQUFJLFdBQVcsNEJBQTRCLENBQUM7QUFDcEcsWUFBTSxtQkFBbUIsYUFBYSxPQUFPLENBQUMsUUFBUSxXQUFXLGtCQUFrQixFQUFFLElBQUksR0FBRyxLQUFLLFdBQVcsa0JBQWtCLEVBQUUsSUFBSSxHQUFHLEdBQUcsS0FBSyxRQUFRLGdCQUFnQixNQUFNLEVBQUU7QUFDL0ssWUFBTSxpQkFBaUIsYUFBYSxPQUFPLENBQUMsUUFBUSxXQUFXLGtCQUFrQixFQUFFLElBQUksR0FBRyxLQUFLLFdBQVcsa0JBQWtCLEVBQUUsSUFBSSxHQUFHLEdBQUcsS0FBSyxRQUFRLGNBQWMsTUFBTSxFQUFFO0FBQzNLLFlBQU0scUJBQXFDLENBQUM7QUFFNUMsaUJBQVVHLFFBQU8sa0JBQWtCO0FBQy9CLGNBQU0sU0FBUyxRQUFRLFdBQVcsV0FBV0EsSUFBRyxDQUFDO0FBQ2pELG1CQUFVQyxNQUFLLFFBQVE7QUFDbkIsNkJBQW1CO0FBQUEsWUFDZixnQ0FBQU4sUUFBQSw4QkFBQUEsUUFBQSxnQkFDSyxzQkFBc0IsWUFBWSxXQUFXLGtCQUFrQixHQUFHSyxNQUFLLFlBQVksRUFBQyxvQkFBb0IsTUFBTSxvQkFBb0Isc0JBQXNCLE1BQU0sc0JBQXNCLDBCQUEwQixNQUFNLHlCQUF3QixDQUFDLEdBQzdPLE9BQU9DLE9BQU0sWUFBWUEsR0FBRSxTQUFTLE1BQU0sSUFDdkMsZ0NBQUFOLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQUUsUUFFRSxnQ0FBQUEsUUFBQSxjQUFDLFVBQUssT0FBTyxFQUFDLFVBQVUsVUFBVSxPQUFPLE9BQU0sS0FBRyxRQUFPLEdBQU8sUUFFL0QsaUJBQWlCLFlBQVksV0FBVyxrQkFBa0IsR0FBR00sSUFBRyxZQUFZLEVBQUMsb0JBQW9CLE1BQU0sb0JBQW9CLHNCQUFzQixNQUFNLHNCQUFzQiwwQkFBMEIsTUFBTSx5QkFBd0IsQ0FBQyxDQUMzTyxJQUNBLFdBQVksT0FBT0EsT0FBTSxXQUFXQSxLQUFJLE9BQU9BLE9BQU0sWUFBWSxDQUFDLE1BQU0sUUFBUUEsRUFBQyxLQUFLQSxHQUFFLFFBQVEsS0FBSyxVQUFVQSxHQUFFLEtBQUssSUFBSSxLQUFLLFVBQVVBLEVBQUMsQ0FBRSxDQUVwSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLGlCQUFVRCxRQUFPLGdCQUFnQjtBQUM3QixjQUFNLFNBQVMsUUFBUSxXQUFXLFdBQVdBLElBQUcsQ0FBQztBQUNqRCxtQkFBVUMsTUFBSyxRQUFRO0FBQ25CLDZCQUFtQjtBQUFBLFlBQ2YsZ0NBQUFOLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0ssc0JBQXNCLFlBQVksV0FBVyxrQkFBa0IsR0FBR0ssTUFBSyxZQUFZLEVBQUMsb0JBQW9CLE1BQU0sb0JBQW9CLHNCQUFzQixNQUFNLHNCQUFzQiwwQkFBMEIsTUFBTSx5QkFBd0IsQ0FBQyxHQUM3TyxnQ0FBQUwsUUFBQSw4QkFBQUEsUUFBQSxnQkFBRSxRQUVDLGdDQUFBQSxRQUFBLGNBQUMsVUFBSyxPQUFPLEVBQUMsVUFBVSxVQUFVLE9BQU8sT0FBTSxLQUFHLFFBQU8sR0FBTyxRQUUvRCxpQkFBaUIsWUFBWSxXQUFXLGtCQUFrQixHQUFHTSxJQUFHLFlBQVksRUFBQyxvQkFBb0IsTUFBTSxvQkFBb0Isc0JBQXNCLE1BQU0sc0JBQXNCLDBCQUEwQixNQUFNLHlCQUF3QixDQUFDLENBQzNPLENBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxpQkFBVSxPQUFPLG9CQUFvQjtBQUNqQyxjQUFNRCxPQUFNLElBQUksTUFBTSw2QkFBNkIsTUFBTTtBQUN6RCxjQUFNLGVBQWUsV0FBVyxrQkFBa0IsRUFBRSxJQUFJQSxJQUFHO0FBQzNELGNBQU0sa0JBQWtCLGNBQWMsS0FBSyxRQUFRLGNBQWMsTUFBTTtBQUN2RSxjQUFNLG9CQUFvQixjQUFjLEtBQUssUUFBUSxnQkFBZ0IsTUFBTTtBQUMzRSxjQUFNLFNBQVMsUUFBUSxXQUFXLFdBQVcsR0FBRyxDQUFDO0FBRWpELG1CQUFVQyxNQUFLLFFBQVE7QUFDbkIsNkJBQW1CO0FBQUEsWUFDZixnQ0FBQU4sUUFBQSw4QkFBQUEsUUFBQSxnQkFDSSxnQ0FBQUEsUUFBQSxjQUFDLE9BQUUsT0FBTyxFQUFDLE9BQU8sU0FBUSxLQUFHLEtBQUcsR0FBSyxLQUNwQyxzQkFBc0IsWUFBWSxXQUFXLGtCQUFrQixHQUFHSyxNQUFLLFlBQVksRUFBQyxvQkFBb0IsTUFBTSxvQkFBb0Isc0JBQXNCLE1BQU0sc0JBQXNCLDBCQUEwQixNQUFNLHlCQUF3QixDQUFDLEdBQzdPLE9BQU9DLE9BQU0sWUFBWUEsR0FBRSxTQUFTLE1BQU0sSUFDdkMsZ0NBQUFOLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQUUsUUFFRSxnQ0FBQUEsUUFBQSxjQUFDLFVBQUssT0FBTyxFQUFDLFVBQVUsVUFBVSxPQUFPLE9BQU0sS0FBRyxRQUFPLEdBQU8sUUFFL0QsaUJBQWlCLFlBQVksV0FBVyxrQkFBa0IsR0FBR00sSUFBRyxZQUFZLEVBQUMsb0JBQW9CLE1BQU0sb0JBQW9CLHNCQUFzQixNQUFNLHNCQUFzQiwwQkFBMEIsTUFBTSx5QkFBd0IsQ0FBQyxDQUMzTyxJQUVKLG9CQUNJLFdBQVksT0FBT0EsT0FBTSxXQUFXQSxLQUFJLE9BQU9BLE9BQU0sWUFBWSxDQUFDLE1BQU0sUUFBUUEsRUFBQyxLQUFLQSxHQUFFLFFBQVEsS0FBSyxVQUFVQSxHQUFFLEtBQUssSUFBSSxLQUFLLFVBQVVBLEVBQUMsQ0FBRSxJQUVoSixrQkFDSSxnQ0FBQU4sUUFBQSw4QkFBQUEsUUFBQSxnQkFBRSxRQUVFLGdDQUFBQSxRQUFBLGNBQUMsVUFBSyxPQUFPLEVBQUMsVUFBVSxVQUFVLE9BQU8sT0FBTSxLQUFHLFFBQU8sR0FBTyxRQUUvRCxpQkFBaUIsWUFBWSxXQUFXLGtCQUFrQixHQUFHTSxJQUFHLFlBQVksRUFBQyxvQkFBb0IsTUFBTSxvQkFBb0Isc0JBQXNCLE1BQU0sc0JBQXNCLDBCQUEwQixNQUFNLHlCQUF3QixDQUFDLENBQzNPLElBRUEsZ0NBQUFOLFFBQUEsOEJBQUFBLFFBQUEsY0FBRSxDQUVWO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsYUFDSSxnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxnQkFDSyxtQkFBbUIsU0FBUyxLQUN6QixnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxnQkFBRSxnQ0FBQUEsUUFBQSxjQUFDLG1CQUNDLGdDQUFBQSxRQUFBLGNBQUMsV0FBRSxzQkFBb0IsR0FDdEIsbUJBQW1CLFNBQVMsSUFDekIsZ0NBQUFBLFFBQUEsY0FBQyxZQUFJLG1CQUFtQixJQUFJLENBQUMsT0FBTztBQUNoQyxlQUFPLGdDQUFBQSxRQUFBLGNBQUMsUUFBRyxLQUFLLGFBQWEsS0FBSSxFQUFHO0FBQUEsTUFDeEMsQ0FBQyxFQUNJLEtBQUssQ0FBRSxJQUNaLGdDQUFBQSxRQUFBLGNBQUMsV0FBRyxtQkFBbUIsQ0FBQyxDQUFFLENBRWxDLENBQWMsQ0FFdEI7QUFBQSxJQUVSO0FBRUEsYUFBUyxxQkFBcUIsT0FBNkI7QUFDdkQsYUFDSSxnQ0FBQUEsUUFBQSw4QkFBQUEsUUFBQSxnQkFDSyxNQUFNLHdCQUF3QixFQUFFO0FBQUEsUUFBSSxDQUFDLFlBQVk7QUFDOUMsZ0JBQU0sUUFBUSxNQUFNLGtCQUFrQixPQUFPO0FBQzdDLGNBQUcsTUFBTSxVQUFVO0FBQUcsbUJBQU8sZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsY0FBRTtBQUUvQixpQkFBTyxnQ0FBQUEsUUFBQSxjQUFDLGVBQVksTUFBTSxPQUFPLEtBQUssV0FDbEMsZ0NBQUFBLFFBQUEsY0FBQyxXQUFHLFdBQVcsYUFBYSxZQUFZLE1BQU0sdUJBQXVCLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRSxHQUFDLEdBQ2pGLE1BQU0sU0FBUyxJQUNaLGdDQUFBQSxRQUFBLGNBQUMsWUFBSSxNQUFNLElBQUksQ0FBQyxlQUFlO0FBQzNCLG1CQUFPLGdDQUFBQSxRQUFBLGNBQUMsUUFBRyxLQUFLLGFBQWEsR0FBRyxJQUFJLFdBQVcsU0FBUSxjQUFjLE9BQU8sWUFBWSxZQUFZLEVBQUMsb0JBQW9CLE1BQU0sb0JBQW9CLHNCQUFzQixNQUFNLHNCQUFzQiwwQkFBMEIsTUFBTSx5QkFBd0IsQ0FBQyxDQUFFO0FBQUEsVUFDcFEsQ0FBQyxDQUFFLElBQ0gsZ0NBQUFBLFFBQUEsY0FBQyxPQUFFLEtBQUssYUFBYSxLQUFJLGNBQWMsT0FBTyxNQUFNLENBQUMsR0FBRyxZQUFZLEVBQUMsb0JBQW9CLE1BQU0sb0JBQW9CLHNCQUFzQixNQUFNLHNCQUFzQiwwQkFBMEIsTUFBTSx5QkFBd0IsQ0FBQyxDQUFFLENBRXhPO0FBQUEsUUFDQTtBQUFBLE1BQ0osQ0FDSjtBQUFBLElBRVI7QUFFQSxXQUNJLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUNJLGdDQUFBQSxRQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDRyxPQUFPLFlBQVksYUFBYSxXQUFXLGtCQUFrQixVQUFVLENBQUMsSUFBSyxtQkFBbUIsU0FBVSxXQUFXLE9BQU8sUUFBUSxDQUFDLElBQUksTUFBTyxpQkFBaUI7QUFBQSxRQUNqSyxRQUFPO0FBQUE7QUFBQSxNQUdOLG1CQUFtQixnQ0FBQUEsUUFBQSxjQUFDLHFCQUFrQixNQUFNLEtBQUk7QUFBQSxNQUNoRCxtQkFBbUIsV0FBVyxVQUMzQixnQ0FBQUEsUUFBQSxjQUFDLFdBQVMsR0FBRyxRQUNSLGdCQUFnQixNQUFNLEdBQ3RCLG1CQUFtQixNQUFNLEdBRXpCLFFBQVEsTUFBTSxLQUNYLGdDQUFBQSxRQUFBLDhCQUFBQSxRQUFBLGdCQUNLLGtCQUFrQixNQUFNLEdBQ3hCLGlCQUFpQixNQUFNLENBQzVCLEdBR0gsV0FBVyxNQUFNLEtBQ2QsZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0ssa0NBQWtDLE1BQU0sR0FDeEMsaUJBQWlCLE1BQU0sR0FDdkIsZ0JBQWdCLE1BQU0sQ0FDM0IsR0FHSCxhQUFhLE1BQU0sS0FDaEIsZ0NBQUFBLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0ssdUNBQXVDLE1BQU0sQ0FDbEQsR0FHSCxxQkFBcUIsTUFBTSxDQUNoQztBQUFBLE1BRUgsaUJBQWlCLGdDQUFBQSxRQUFBLGNBQUMsZUFBUyx5QkFBeUIsYUFBYSxhQUFhLENBQUU7QUFBQSxJQUNyRixDQUNKO0FBQUEsRUFFUjtBQUVBLFdBQVMsaUJBQWlCLE9BQThCLFdBQWdCLFVBQXFCO0FBQ3pGLHNCQUFBTyxRQUFTLE9BQU8seUJBQXlCLEtBQUssR0FBRyxXQUFXLFFBQVE7QUFBQSxFQUN4RTtBQUVBLFdBQVMseUJBQXlCLE9BQThCO0FBQzVELFVBQU0sY0FBYyxJQUFJLFlBQVk7QUFDcEMsV0FDSSxnQ0FBQVAsUUFBQSxjQUFDLGVBQVksV0FBVSxXQUNuQixnQ0FBQUEsUUFBQSxjQUFDLHVCQUFvQixRQUFRLGVBQ3pCLGdDQUFBQSxRQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDRyxLQUFLLE1BQU07QUFBQSxRQUNYLEtBQUssTUFBTTtBQUFBLFFBQ1gsWUFBWSxNQUFNO0FBQUEsUUFDbEIsVUFBVSxNQUFNO0FBQUEsUUFDaEIsWUFBWSxNQUFNO0FBQUEsUUFDbEIsV0FBVyxNQUFNO0FBQUEsUUFDakIsV0FBVyxNQUFNO0FBQUEsUUFDakIsWUFBWSxNQUFNO0FBQUEsUUFDbEIsb0JBQW9CLE1BQU07QUFBQSxRQUMxQixzQkFBc0IsTUFBTTtBQUFBLFFBQzVCLDBCQUEwQixNQUFNO0FBQUE7QUFBQSxJQUNwQyxDQUNKLENBQ0o7QUFBQSxFQUVSOzs7QUV6V0EsTUFBQVEsa0JBQWtCO0FBR2xCLE1BQUFDLG9CQUFxQjtBQUdyQixXQUFTLGNBQWMsT0FBMkI7QUFDaEQsVUFBTSxFQUFFLFVBQVUsWUFBWSxXQUFXLElBQUk7QUFFN0MsV0FDRSxnQ0FBQUMsUUFBQSxjQUFDLGFBQVUsTUFBTSxVQUFVLFFBQU8sVUFBUyxNQUFNLGNBQWMsT0FBTSxVQUFXO0FBQUEsRUFFcEY7QUFFQSxXQUFTLGNBQWMsT0FBMkIsV0FBb0IsVUFBcUI7QUFDekYsc0JBQUFDLFFBQVMsT0FBTyxxQkFBcUIsS0FBSyxHQUFHLFdBQVcsUUFBUTtBQUFBLEVBQ2xFO0FBRUEsV0FBUyxxQkFBcUIsT0FBMkI7QUFDdkQsVUFBTSxjQUFjLElBQUksWUFBWTtBQUNwQyxXQUNJLGdDQUFBRCxRQUFBLGNBQUMsZUFBWSxXQUFVLFdBQ3JCLGdDQUFBQSxRQUFBLGNBQUMsdUJBQW9CLFFBQVEsZUFDM0IsZ0NBQUFBLFFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNHLFVBQVUsTUFBTTtBQUFBLFFBQ2hCLFlBQVksTUFBTTtBQUFBLFFBQ2xCLFlBQVksTUFBTTtBQUFBO0FBQUEsSUFDdEIsQ0FDRixDQUNGO0FBQUEsRUFFTjs7O0FDL0JBLE1BQUFFLGtCQUFrQjtBQVFsQixNQUFBQyxvQkFBcUI7QUFHckIsV0FBUyxpQkFBaUIsT0FBOEI7QUFDdEQsVUFBTSxFQUFFLEtBQUssWUFBWSxLQUFLLFlBQVksWUFBWSxhQUFhLFdBQVksV0FBVyxxQkFBb0IsSUFBSTtBQUNsSCxVQUFNLFNBQVMsSUFBSSxPQUFPLEdBQUc7QUFFN0IsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixJQUFJO0FBQUEsTUFDRixDQUFDLGNBQWMsS0FBSyxXQUFXLFlBQVksS0FBSyxZQUFZLFNBQVM7QUFBQSxNQUNyRSxZQUFZO0FBQ1YsZUFBTyxNQUFNLE9BQU8sZ0JBQWdCLEtBQUssWUFBWSxZQUFZLFdBQVcsU0FBUztBQUFBLE1BQ3ZGO0FBQUEsSUFDRjtBQUVBLFdBQ0UsZ0NBQUFDLFFBQUEsOEJBQUFBLFFBQUEsZ0JBQ0csYUFDRyxnQ0FBQUEsUUFBQSxjQUFDLGNBQ0MsZ0NBQUFBLFFBQUEsY0FBQyxZQUFPLFNBQVMsTUFBTTtBQUFDLFVBQUcsTUFBTSx3QkFBd0IsTUFBTTtBQUFZLGNBQU0scUJBQXFCLE1BQU0sY0FBYyxJQUFJLFFBQVcsTUFBUztBQUFBLElBQUMsS0FDL0ksZ0NBQUFBLFFBQUEsY0FBQyxZQUFTLFdBQVcsTUFBTSxhQUFhLG9DQUFvQyxjQUFjLE9BQU8sZUFBZ0IsTUFBTSxhQUFjLFlBQVksY0FBYSxNQUFNLFlBQVksWUFBWSxLQUFLLGdDQUFBQSxRQUFBLGNBQUMscUJBQWtCLE1BQU0sS0FBSSxDQUFHLENBQ3JPLEdBQVMsUUFDRixnQ0FBQUEsUUFBQSxjQUFDLFdBQVEsTUFBSyxjQUFZLEdBQUUsUUFDbkMsZ0NBQUFBLFFBQUEsY0FBQyxZQUFTLFdBQVUsY0FBYSxPQUFPLGVBQWUsYUFBWSxnQ0FBQUEsUUFBQSxjQUFDLHFCQUFrQixNQUFNLEtBQUksQ0FBRyxDQUNyRyxHQUVILGFBQWEsUUFBUSxTQUFTLElBQUksS0FDakMsZ0NBQUFBLFFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLGNBQWMsS0FBSyxjQUFjO0FBQUEsUUFDakMsV0FBVyxLQUFLLGFBQWE7QUFBQSxRQUM3QixZQUFZLGNBQWMsS0FBSyxjQUFjO0FBQUEsUUFDN0M7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBO0FBQUEsSUFDRixHQUVELFdBQ0csZ0NBQUFBLFFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNHLGNBQWMsTUFBTSxZQUFZLFlBQVksS0FBTSxRQUFRLEtBQUssY0FBYyxFQUFFLFlBQVksS0FBTSx5QkFBeUIsT0FBTyxVQUFVO0FBQUEsUUFDM0ksV0FBWSxRQUFRLEtBQUssYUFBYSxJQUFLLEtBQUssYUFBYSxFQUFFLFlBQVksSUFBSTtBQUFBLFFBQy9FLFlBQVksZUFBZSxPQUFPLEtBQUssY0FBYyxJQUFJO0FBQUEsUUFDekQsWUFBWSxlQUFnQixNQUFNLGNBQWUsUUFBUSxLQUFLLGNBQWMsSUFBTSxZQUFZO0FBQUEsUUFDOUYsYUFBYSxnQkFBaUIsUUFBUSxLQUFLLGFBQWEsSUFBSyxZQUFZO0FBQUEsUUFDekU7QUFBQTtBQUFBLElBQ0osQ0FFSjtBQUFBLEVBRU47QUFFQSxXQUFTLGlCQUFpQixPQUE4QixXQUFvQixVQUFvQjtBQUM5RixzQkFBQUMsUUFBUyxPQUFPLHdCQUF3QixLQUFLLEdBQUcsV0FBVyxRQUFRO0FBQUEsRUFDckU7QUFFQSxXQUFTLHdCQUF3QixPQUE4QjtBQUM3RCxVQUFNLGNBQWMsSUFBSSxZQUFZO0FBQ3BDLFdBQ0ksZ0NBQUFELFFBQUEsY0FBQyxlQUFZLFdBQVUsV0FDckIsZ0NBQUFBLFFBQUEsY0FBQyx1QkFBb0IsUUFBUSxlQUMzQixnQ0FBQUEsUUFBQTtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0csS0FBSyxNQUFNO0FBQUEsUUFDWCxZQUFZLE1BQU07QUFBQSxRQUNsQixLQUFLLE1BQU07QUFBQSxRQUNYLFlBQVksTUFBTTtBQUFBLFFBQ2xCLFlBQVksTUFBTTtBQUFBLFFBQ2xCLGFBQWEsTUFBTTtBQUFBLFFBQ25CLFdBQVcsTUFBTTtBQUFBLFFBQ2pCLFdBQVcsTUFBTTtBQUFBLFFBQ2pCLHNCQUFzQixNQUFNO0FBQUE7QUFBQSxJQUNoQyxDQUNGLENBQ0Y7QUFBQSxFQUVOOzs7QUN0RkEsTUFBQUUsa0JBQWtCOzs7QUNBbEIsTUFBQUMsa0JBQWtCO0FBSWxCLFdBQVMsd0JBQXdCLE9BQXFDO0FBQ3BFLFVBQU0sRUFBQyxVQUFVLGFBQWEsR0FBRyxLQUFJLElBQUk7QUFFekMsV0FDRSxnQ0FBQUMsUUFBQSw4QkFBQUEsUUFBQSxnQkFDRSxnQ0FBQUEsUUFBQSxjQUFDLFdBQVMsR0FBRyxRQUFPLFlBQVksV0FBWSxDQUM5QztBQUFBLEVBRUo7OztBREpBLE1BQUFDLHFCQUFxQjtBQUVyQixNQUFNLGlCQUFpQjtBQUV2QixXQUFTLGtCQUFrQixPQUErQjtBQUN4RCxVQUFNLEVBQUUsS0FBSyxZQUFZLEtBQUssVUFBVSxXQUFXLFdBQVcsV0FBVyxHQUFHLEtBQUssSUFBSTtBQUNyRixVQUFNLFNBQVMsSUFBSSxPQUFPLEdBQUc7QUFFN0IsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixJQUFJO0FBQUEsTUFDRixDQUFDLGVBQWUsS0FBSyxXQUFXLFdBQVcsS0FBSyxZQUFZLFNBQVM7QUFBQSxNQUNyRSxZQUFZO0FBQ1YsZUFBTyxPQUFPLGVBQWUsS0FBSyxXQUFXLFlBQVksV0FBVyxTQUFTO0FBQUEsTUFDL0U7QUFBQSxJQUNGO0FBRUEsV0FDRSxnQ0FBQUMsUUFBQSw4QkFBQUEsUUFBQSxnQkFDRyxhQUFhLGdDQUFBQSxRQUFBLGNBQUMscUJBQWtCLE1BQUssS0FBSSxHQUN6QyxhQUFhLFFBQ1osZ0NBQUFBLFFBQUEsY0FBQywyQkFBd0IsYUFBYSxLQUFLLGVBQWUsS0FBSyxnQkFBZ0IsVUFBcUIsR0FBRyxNQUFLLEdBRTdHLFdBQVcsZ0NBQUFBLFFBQUEsY0FBQyxlQUFTLHlCQUF5QixPQUFPLGFBQWEsQ0FBRSxDQUN2RTtBQUFBLEVBRUo7QUFFQSxXQUFTLGtCQUFrQixPQUErQixXQUFvQixVQUFvQjtBQUNoRyx1QkFBQUMsUUFBUyxPQUFPLHlCQUF5QixLQUFLLEdBQUcsV0FBVyxRQUFRO0FBQUEsRUFDdEU7QUFFQSxXQUFTLHlCQUF5QixPQUErQjtBQUMvRCxVQUFNLGNBQWMsSUFBSSxZQUFZO0FBQ3BDLFdBQ0ksZ0NBQUFELFFBQUEsY0FBQyxlQUFZLFdBQVUsV0FDckIsZ0NBQUFBLFFBQUEsY0FBQyx1QkFBb0IsUUFBUSxlQUMzQixnQ0FBQUEsUUFBQTtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0csS0FBSyxNQUFNO0FBQUEsUUFDWCxZQUFZLE1BQU07QUFBQSxRQUNsQixLQUFLLE1BQU07QUFBQSxRQUNYLFVBQVUsTUFBTTtBQUFBLFFBQ2hCLFdBQVcsTUFBTTtBQUFBLFFBQ2pCLFdBQVcsTUFBTTtBQUFBLFFBQ2pCLE9BQU8sTUFBTTtBQUFBLFFBQ2IsV0FBVyxNQUFNO0FBQUE7QUFBQSxJQUNyQixDQUNGLENBQ0Y7QUFBQSxFQUVOOzs7QUU5REEsTUFBQUUsa0JBQThCO0FBSTlCLE1BQUFDLHFCQUFxQjtBQUdyQixXQUFTLFVBQVUsT0FBdUI7QUFDeEMsVUFBTSxFQUFFLEtBQUssU0FBUyxPQUFPLGNBQWMsV0FBVyxXQUFXLElBQUk7QUFDckUsVUFBTSxDQUFDLFFBQVEsU0FBUyxRQUFJLDBCQUFTLEtBQUs7QUFDMUMsVUFBTSxpQkFBaUIsT0FBTyxjQUFlLGVBQWUsY0FBYyxLQUFLLE9BQU87QUFDdEYsVUFBTSxTQUFTLGlCQUFpQixZQUFZLG1CQUFtQixHQUFHLElBQUk7QUFFdEUsVUFBTSxpQkFBaUIsTUFBTTtBQUMzQixVQUFJLENBQUMsUUFBUTtBQUNYLGVBQ0UsZ0NBQUFDLFFBQUE7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNDLFNBQVE7QUFBQSxZQUNSLFVBQVM7QUFBQSxZQUNULEtBQUs7QUFBQSxZQUNMLE9BQU8sRUFBQyxZQUFZLE9BQU8sT0FBTyxVQUFVLFdBQVcsS0FBSyxLQUFLLFdBQVcsS0FBSyxLQUFLLFFBQVEsR0FBRTtBQUFBLFlBQ2hHLE9BQU8sU0FBUyxlQUFlLEtBQUssSUFBSSxRQUFRO0FBQUEsWUFDaEQsU0FBUyxNQUFNO0FBQ2Isd0JBQVUsVUFBVSxVQUFVLE1BQU07QUFDcEMsd0JBQVUsSUFBSTtBQUNkLHlCQUFXLE1BQU07QUFBQywwQkFBVSxLQUFLO0FBQUEsY0FBRSxHQUFHLEdBQUk7QUFBQSxZQUM1QztBQUFBO0FBQUEsUUFFRjtBQUFBLE1BRUo7QUFDQSxhQUNFLGdDQUFBQSxRQUFBO0FBQUEsUUFBQztBQUFBO0FBQUEsVUFDQyxPQUFPLEVBQUMsWUFBWSxPQUFPLE9BQU8sVUFBVSxXQUFXLEtBQUssS0FBSyxXQUFXLEtBQUssS0FBSyxRQUFRLEdBQUU7QUFBQSxVQUNoRyxTQUFRO0FBQUEsVUFDUixVQUFTO0FBQUEsVUFDVCxLQUFLO0FBQUEsVUFDTCxPQUFPLFNBQVMsZUFBZSxLQUFLLElBQUksUUFBUTtBQUFBO0FBQUEsTUFFbEQ7QUFBQSxJQUVKO0FBRUEsV0FDRSxnQ0FBQUEsUUFBQSxjQUFDLGVBQVksTUFBTSxTQUNqQixnQ0FBQUEsUUFBQSxjQUFDLGFBQ0MsZ0NBQUFBLFFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLE1BQU07QUFBQSxRQUNOLFFBQU87QUFBQSxRQUNQLE9BQU8sRUFBQyxPQUFPLFVBQVUsV0FBVyxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssUUFBUSxHQUFFO0FBQUEsUUFDN0UsT0FBTyxTQUFTLGVBQWUsS0FBSyxJQUFJLFFBQVE7QUFBQSxRQUNoRCxVQUFVO0FBQUE7QUFBQSxNQUVULFVBQVUsVUFBVTtBQUFBLElBQ3ZCLEdBQ0MsY0FBYyxnQ0FBQUEsUUFBQSxjQUFDLG9CQUFlLENBQ2pDLENBQ0Y7QUFBQSxFQUVKO0FBRUEsV0FBUyxVQUFVLE9BQXVCLFdBQW9CLFVBQXFCO0FBQy9FLHVCQUFBQyxRQUFTLE9BQU8saUJBQWlCLEtBQUssR0FBRyxXQUFXLFFBQVE7QUFBQSxFQUNoRTtBQUVBLFdBQVMsaUJBQWlCLE9BQXVCO0FBQzdDLFVBQU0sY0FBYyxJQUFJLFlBQVk7QUFDcEMsV0FDSSxnQ0FBQUQsUUFBQSxjQUFDLGVBQVksV0FBVSxXQUNuQixnQ0FBQUEsUUFBQSxjQUFDLHVCQUFvQixRQUFRLGVBQ3pCLGdDQUFBQSxRQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDRyxLQUFLLE1BQU07QUFBQSxRQUNYLFNBQVMsTUFBTTtBQUFBLFFBQ2YsT0FBTyxNQUFNO0FBQUEsUUFDYixjQUFjLE1BQU07QUFBQSxRQUNwQixXQUFXLE1BQU07QUFBQSxRQUNqQixZQUFZLE1BQU07QUFBQTtBQUFBLElBQ3RCLENBQ0osQ0FDSjtBQUFBLEVBRVI7OztBQ2pGQSxNQUFBRSxrQkFBa0I7OztBQ0FsQixNQUFBQyxrQkFBa0I7OztBQ0NsQixNQUFBQyxrQkFBaUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRGpDLFFBQUFDLEtBQUFDLEVBQUEsQ0FBQUMsSUFBQUMsT0FBQTtBQUFBO0FBUUEsVUFBSUMsS0FBd0IsT0FBTyx1QkFDL0JDLEtBQWlCLE9BQU8sVUFBVSxnQkFDbENDLEtBQW1CLE9BQU8sVUFBVTtBQUV4QyxlQUFTQyxHQUFTQyxHQUFLO0FBQ3RCLFlBQUlBLEtBQVE7QUFDWCxnQkFBTSxJQUFJLFVBQVUsdURBQXVEO0FBRzVFLGVBQU8sT0FBT0EsQ0FBRztNQUNsQjtBQUVBLGVBQVNDLEtBQWtCO0FBQzFCLFlBQUk7QUFDSCxjQUFJLENBQUMsT0FBTztBQUNYLG1CQUFPO0FBTVIsY0FBSUMsSUFBUSxJQUFJLE9BQU8sS0FBSztBQUU1QixjQURBQSxFQUFNLENBQUMsSUFBSSxNQUNQLE9BQU8sb0JBQW9CQSxDQUFLLEVBQUUsQ0FBQyxNQUFNO0FBQzVDLG1CQUFPO0FBS1IsbUJBRElDLElBQVEsQ0FBQyxHQUNKQyxJQUFJLEdBQUdBLElBQUksSUFBSUE7QUFDdkJELGNBQU0sTUFBTSxPQUFPLGFBQWFDLENBQUMsQ0FBQyxJQUFJQTtBQUV2QyxjQUFJQyxJQUFTLE9BQU8sb0JBQW9CRixDQUFLLEVBQUUsSUFBSSxTQUFVRyxHQUFHO0FBQy9ELG1CQUFPSCxFQUFNRyxDQUFDO1VBQ2YsQ0FBQztBQUNELGNBQUlELEVBQU8sS0FBSyxFQUFFLE1BQU07QUFDdkIsbUJBQU87QUFJUixjQUFJRSxJQUFRLENBQUM7QUFJYixpQkFIQSx1QkFBdUIsTUFBTSxFQUFFLEVBQUUsUUFBUSxTQUFVQyxHQUFRO0FBQzFERCxjQUFNQyxDQUFNLElBQUlBO1VBQ2pCLENBQUMsR0FDRyxPQUFPLEtBQUssT0FBTyxPQUFPLENBQUMsR0FBR0QsQ0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQy9DO1FBS0gsUUFBYztBQUViLGlCQUFPO1FBQ1I7TUFDRDtBQUVBWixTQUFPLFVBQVVNLEdBQWdCLElBQUksT0FBTyxTQUFTLFNBQVVRLEdBQVFDLEdBQVE7QUFLOUUsaUJBSklDLEdBQ0FDLElBQUtiLEdBQVNVLENBQU0sR0FDcEJJLEdBRUtDLElBQUksR0FBR0EsSUFBSSxVQUFVLFFBQVFBLEtBQUs7QUFDMUNILGNBQU8sT0FBTyxVQUFVRyxDQUFDLENBQUM7QUFFMUIsbUJBQVNDLEtBQU9KO0FBQ1hkLGVBQWUsS0FBS2MsR0FBTUksQ0FBRyxNQUNoQ0gsRUFBR0csQ0FBRyxJQUFJSixFQUFLSSxDQUFHO0FBSXBCLGNBQUluQixJQUF1QjtBQUMxQmlCLGdCQUFVakIsR0FBc0JlLENBQUk7QUFDcEMscUJBQVNQLElBQUksR0FBR0EsSUFBSVMsRUFBUSxRQUFRVDtBQUMvQk4saUJBQWlCLEtBQUthLEdBQU1FLEVBQVFULENBQUMsQ0FBQyxNQUN6Q1EsRUFBR0MsRUFBUVQsQ0FBQyxDQUFDLElBQUlPLEVBQUtFLEVBQVFULENBQUMsQ0FBQztVQUduQztRQUNEO0FBRUEsZUFBT1E7TUFDUjtJQUFBLENBQUE7QUN6RkEsUUFBQUksS0FBQXZCLEVBQUFDLE9BQUE7QUFBQTtBQVFhLFVBQUl1QixLQUFFLEdBQUEsR0FBeUJYLEtBQUUsT0FBTVksS0FBRTtBQUFNeEIsUUFBUSxXQUFTO0FBQU1BLFFBQVEsYUFBVztBQUFNQSxRQUFRLFdBQVM7QUFBTSxVQUFJeUIsS0FBRSxPQUFNQyxLQUFFLE9BQU1DLEtBQUU7QUFBTTNCLFFBQVEsV0FBUztBQUFNLFVBQUk0QixLQUFFLE9BQU1DLEtBQUU7QUFDcEwsYUFBTyxVQUFwQixjQUE0QixPQUFPLFFBQVNDLEtBQUUsT0FBTyxLQUFJbEIsS0FBRWtCLEdBQUUsZUFBZSxHQUFFTixLQUFFTSxHQUFFLGNBQWMsR0FBRTlCLEVBQVEsV0FBUzhCLEdBQUUsZ0JBQWdCLEdBQUU5QixFQUFRLGFBQVc4QixHQUFFLG1CQUFtQixHQUFFOUIsRUFBUSxXQUFTOEIsR0FBRSxnQkFBZ0IsR0FBRUwsS0FBRUssR0FBRSxnQkFBZ0IsR0FBRUosS0FBRUksR0FBRSxlQUFlLEdBQUVILEtBQUVHLEdBQUUsbUJBQW1CLEdBQUU5QixFQUFRLFdBQVM4QixHQUFFLGdCQUFnQixHQUFFRixLQUFFRSxHQUFFLFlBQVksR0FBRUQsS0FBRUMsR0FBRSxZQUFZO0FBQXJULFVBQUFBLElBQTJUQyxLQUFlLE9BQU8sVUFBcEIsY0FBNEIsT0FBTztBQUMvWSxlQUFTQyxHQUFFQyxHQUFFO0FBQUMsZUFBVUEsTUFBUCxRQUFxQixPQUFPQSxLQUFsQixXQUEyQixRQUFLQSxJQUFFRixNQUFHRSxFQUFFRixFQUFDLEtBQUdFLEVBQUUsWUFBWSxHQUFxQixPQUFPQSxLQUFwQixhQUFzQkEsSUFBRTtNQUFJO0FBQUMsZUFBU0MsR0FBRUQsR0FBRTtBQUFDLGlCQUFRRSxJQUFFLDJEQUF5REYsR0FBRUcsSUFBRSxHQUFFQSxJQUFFLFVBQVUsUUFBT0E7QUFBSUQsZUFBRyxhQUFXLG1CQUFtQixVQUFVQyxDQUFDLENBQUM7QUFBRSxlQUFNLDJCQUF5QkgsSUFBRSxhQUFXRSxJQUFFO01BQWdIO0FBQ3BiLFVBQUlFLEtBQUUsRUFBQyxXQUFVLFdBQVU7QUFBQyxlQUFNO01BQUUsR0FBRSxvQkFBbUIsV0FBVTtNQUFDLEdBQUUscUJBQW9CLFdBQVU7TUFBQyxHQUFFLGlCQUFnQixXQUFVO01BQUMsRUFBQyxHQUFFQyxLQUFFLENBQUM7QUFBRSxlQUFTQyxHQUFFTixHQUFFRSxHQUFFQyxHQUFFO0FBQUMsYUFBSyxRQUFNSCxHQUFFLEtBQUssVUFBUUUsR0FBRSxLQUFLLE9BQUtHLElBQUUsS0FBSyxVQUFRRixLQUFHQztNQUFDO0FBQUNFLFNBQUUsVUFBVSxtQkFBaUIsQ0FBQztBQUFFQSxTQUFFLFVBQVUsV0FBUyxTQUFTTixHQUFFRSxHQUFFO0FBQUMsWUFBYyxPQUFPRixLQUFsQixZQUFrQyxPQUFPQSxLQUFwQixjQUE2QkEsS0FBTjtBQUFRLGdCQUFNLE1BQU1DLEdBQUUsRUFBRSxDQUFDO0FBQUUsYUFBSyxRQUFRLGdCQUFnQixNQUFLRCxHQUFFRSxHQUFFLFVBQVU7TUFBQztBQUFFSSxTQUFFLFVBQVUsY0FBWSxTQUFTTixHQUFFO0FBQUMsYUFBSyxRQUFRLG1CQUFtQixNQUFLQSxHQUFFLGFBQWE7TUFBQztBQUMvZSxlQUFTTyxLQUFHO01BQUM7QUFBQ0EsU0FBRSxZQUFVRCxHQUFFO0FBQVUsZUFBU0UsR0FBRVIsR0FBRUUsR0FBRUMsR0FBRTtBQUFDLGFBQUssUUFBTUgsR0FBRSxLQUFLLFVBQVFFLEdBQUUsS0FBSyxPQUFLRyxJQUFFLEtBQUssVUFBUUYsS0FBR0M7TUFBQztBQUFDLFVBQUlLLEtBQUVELEdBQUUsWUFBVSxJQUFJRDtBQUFFRSxTQUFFLGNBQVlEO0FBQUVsQixTQUFFbUIsSUFBRUgsR0FBRSxTQUFTO0FBQUVHLFNBQUUsdUJBQXFCO0FBQUcsVUFBSUMsS0FBRSxFQUFDLFNBQVEsS0FBSSxHQUFFQyxLQUFFLE9BQU8sVUFBVSxnQkFBZUMsS0FBRSxFQUFDLEtBQUksTUFBRyxLQUFJLE1BQUcsUUFBTyxNQUFHLFVBQVMsS0FBRTtBQUNsUyxlQUFTQyxHQUFFYixHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBSVcsR0FBRUMsSUFBRSxDQUFDLEdBQUVDLElBQUUsTUFBS0MsSUFBRTtBQUFLLFlBQVNmLEtBQU47QUFBUSxlQUFJWSxLQUFjWixFQUFFLFFBQVgsV0FBaUJlLElBQUVmLEVBQUUsTUFBY0EsRUFBRSxRQUFYLFdBQWlCYyxJQUFFLEtBQUdkLEVBQUUsTUFBS0E7QUFBRVMsZUFBRSxLQUFLVCxHQUFFWSxDQUFDLEtBQUcsQ0FBQ0YsR0FBRSxlQUFlRSxDQUFDLE1BQUlDLEVBQUVELENBQUMsSUFBRVosRUFBRVksQ0FBQztBQUFHLFlBQUlJLElBQUUsVUFBVSxTQUFPO0FBQUUsWUFBT0EsTUFBSjtBQUFNSCxZQUFFLFdBQVNaO2lCQUFVLElBQUVlLEdBQUU7QUFBQyxtQkFBUUMsSUFBRSxNQUFNRCxDQUFDLEdBQUVFLElBQUUsR0FBRUEsSUFBRUYsR0FBRUU7QUFBSUQsY0FBRUMsQ0FBQyxJQUFFLFVBQVVBLElBQUUsQ0FBQztBQUFFTCxZQUFFLFdBQVNJO1FBQUM7QUFBQyxZQUFHbkIsS0FBR0EsRUFBRTtBQUFhLGVBQUljLEtBQUtJLElBQUVsQixFQUFFLGNBQWFrQjtBQUFXSCxjQUFFRCxDQUFDLE1BQVosV0FBZ0JDLEVBQUVELENBQUMsSUFBRUksRUFBRUosQ0FBQztBQUFHLGVBQU0sRUFBQyxVQUFTbkMsSUFBRSxNQUFLcUIsR0FBRSxLQUFJZ0IsR0FBRSxLQUFJQyxHQUFFLE9BQU1GLEdBQUUsUUFBT0wsR0FBRSxRQUFPO01BQUM7QUFDN2EsZUFBU1csR0FBRXJCLEdBQUVFLEdBQUU7QUFBQyxlQUFNLEVBQUMsVUFBU3ZCLElBQUUsTUFBS3FCLEVBQUUsTUFBSyxLQUFJRSxHQUFFLEtBQUlGLEVBQUUsS0FBSSxPQUFNQSxFQUFFLE9BQU0sUUFBT0EsRUFBRSxPQUFNO01BQUM7QUFBQyxlQUFTc0IsR0FBRXRCLEdBQUU7QUFBQyxlQUFpQixPQUFPQSxLQUFsQixZQUE0QkEsTUFBUCxRQUFVQSxFQUFFLGFBQVdyQjtNQUFDO0FBQUMsZUFBUzRDLEdBQU92QixHQUFFO0FBQUMsWUFBSUUsSUFBRSxFQUFDLEtBQUksTUFBSyxLQUFJLEtBQUk7QUFBRSxlQUFNLE1BQUlGLEVBQUUsUUFBUSxTQUFRLFNBQVNBLEdBQUU7QUFBQyxpQkFBT0UsRUFBRUYsQ0FBQztRQUFDLENBQUM7TUFBQztBQUFDLFVBQUl3QixLQUFFO0FBQU8sZUFBU0MsR0FBRXpCLEdBQUVFLEdBQUU7QUFBQyxlQUFpQixPQUFPRixLQUFsQixZQUE0QkEsTUFBUCxRQUFnQkEsRUFBRSxPQUFSLE9BQVl1QixHQUFPLEtBQUd2QixFQUFFLEdBQUcsSUFBRUUsRUFBRSxTQUFTLEVBQUU7TUFBQztBQUMvVyxlQUFTd0IsR0FBRTFCLEdBQUVFLEdBQUVDLEdBQUVXLEdBQUVDLEdBQUU7QUFBQyxZQUFJQyxJQUFFLE9BQU9oQjtBQUFBQSxTQUFtQmdCLE1BQWQsZUFBNkJBLE1BQVosZUFBY2hCLElBQUU7QUFBSyxZQUFJaUIsSUFBRTtBQUFHLFlBQVVqQixNQUFQO0FBQVNpQixjQUFFOztBQUFRLGtCQUFPRCxHQUFFO1lBQUMsS0FBSztZQUFTLEtBQUs7QUFBU0Msa0JBQUU7QUFBRztZQUFNLEtBQUs7QUFBUyxzQkFBT2pCLEVBQUUsVUFBUztnQkFBQyxLQUFLckI7Z0JBQUUsS0FBS1k7QUFBRTBCLHNCQUFFO2NBQUU7VUFBQztBQUFDLFlBQUdBO0FBQUUsaUJBQU9BLElBQUVqQixHQUFFZSxJQUFFQSxFQUFFRSxDQUFDLEdBQUVqQixJQUFPYyxNQUFMLEtBQU8sTUFBSVcsR0FBRVIsR0FBRSxDQUFDLElBQUVILEdBQUUsTUFBTSxRQUFRQyxDQUFDLEtBQUdaLElBQUUsSUFBU0gsS0FBTixTQUFVRyxJQUFFSCxFQUFFLFFBQVF3QixJQUFFLEtBQUssSUFBRSxNQUFLRSxHQUFFWCxHQUFFYixHQUFFQyxHQUFFLElBQUcsU0FBU0gsR0FBRTtBQUFDLG1CQUFPQTtVQUFDLENBQUMsS0FBU2UsS0FBTixTQUFVTyxHQUFFUCxDQUFDLE1BQUlBLElBQUVNLEdBQUVOLEdBQUVaLEtBQUcsQ0FBQ1ksRUFBRSxPQUFLRSxLQUFHQSxFQUFFLFFBQU1GLEVBQUUsTUFBSSxNQUFJLEtBQUdBLEVBQUUsS0FBSyxRQUFRUyxJQUFFLEtBQUssSUFBRSxPQUFLeEIsQ0FBQyxJQUFHRSxFQUFFLEtBQUthLENBQUMsSUFBRztBQUF5QixZQUF2QkUsSUFBRSxHQUFFSCxJQUFPQSxNQUFMLEtBQU8sTUFBSUEsSUFBRSxLQUFPLE1BQU0sUUFBUWQsQ0FBQztBQUFFLG1CQUFRa0IsSUFDemYsR0FBRUEsSUFBRWxCLEVBQUUsUUFBT2tCLEtBQUk7QUFBQ0YsZ0JBQUVoQixFQUFFa0IsQ0FBQztBQUFFLGdCQUFJQyxJQUFFTCxJQUFFVyxHQUFFVCxHQUFFRSxDQUFDO0FBQUVELGlCQUFHUyxHQUFFVixHQUFFZCxHQUFFQyxHQUFFZ0IsR0FBRUosQ0FBQztVQUFDO2lCQUFTSSxJQUFFcEIsR0FBRUMsQ0FBQyxHQUFlLE9BQU9tQixLQUFwQjtBQUFzQixlQUFJbkIsSUFBRW1CLEVBQUUsS0FBS25CLENBQUMsR0FBRWtCLElBQUUsR0FBRSxFQUFFRixJQUFFaEIsRUFBRSxLQUFLLEdBQUc7QUFBTWdCLGdCQUFFQSxFQUFFLE9BQU1HLElBQUVMLElBQUVXLEdBQUVULEdBQUVFLEdBQUcsR0FBRUQsS0FBR1MsR0FBRVYsR0FBRWQsR0FBRUMsR0FBRWdCLEdBQUVKLENBQUM7aUJBQXFCQyxNQUFYO0FBQWEsZ0JBQU1kLElBQUUsS0FBR0YsR0FBRSxNQUFNQyxHQUFFLElBQXVCQyxNQUFwQixvQkFBc0IsdUJBQXFCLE9BQU8sS0FBS0YsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFFLE1BQUlFLENBQUMsQ0FBQztBQUFFLGVBQU9lO01BQUM7QUFBQyxlQUFTVSxHQUFFM0IsR0FBRUUsR0FBRUMsR0FBRTtBQUFDLFlBQVNILEtBQU47QUFBUSxpQkFBT0E7QUFBRSxZQUFJYyxJQUFFLENBQUMsR0FBRUMsSUFBRTtBQUFFLGVBQUFXLEdBQUUxQixHQUFFYyxHQUFFLElBQUcsSUFBRyxTQUFTZCxHQUFFO0FBQUMsaUJBQU9FLEVBQUUsS0FBS0MsR0FBRUgsR0FBRWUsR0FBRztRQUFDLENBQUMsR0FBU0Q7TUFBQztBQUMzWixlQUFTYyxHQUFFNUIsR0FBRTtBQUFDLFlBQVFBLEVBQUUsWUFBUCxJQUFlO0FBQUMsY0FBSUUsSUFBRUYsRUFBRTtBQUFRRSxjQUFFQSxFQUFFLEdBQUVGLEVBQUUsVUFBUSxHQUFFQSxFQUFFLFVBQVFFLEdBQUVBLEVBQUUsS0FBSyxTQUFTQSxHQUFFO0FBQUtGLGNBQUUsWUFBTixNQUFnQkUsSUFBRUEsRUFBRSxTQUFRRixFQUFFLFVBQVEsR0FBRUEsRUFBRSxVQUFRRTtVQUFFLEdBQUUsU0FBU0EsR0FBRTtBQUFLRixjQUFFLFlBQU4sTUFBZ0JBLEVBQUUsVUFBUSxHQUFFQSxFQUFFLFVBQVFFO1VBQUUsQ0FBQztRQUFDO0FBQUMsWUFBT0YsRUFBRSxZQUFOO0FBQWMsaUJBQU9BLEVBQUU7QUFBUSxjQUFNQSxFQUFFO01BQVE7QUFBQyxVQUFJNkIsS0FBRSxFQUFDLFNBQVEsS0FBSTtBQUFFLGVBQVNDLEtBQUc7QUFBQyxZQUFJOUIsSUFBRTZCLEdBQUU7QUFBUSxZQUFVN0IsTUFBUDtBQUFTLGdCQUFNLE1BQU1DLEdBQUUsR0FBRyxDQUFDO0FBQUUsZUFBT0Q7TUFBQztBQUFDLFVBQUkrQixLQUFFLEVBQUMsd0JBQXVCRixJQUFFLHlCQUF3QixFQUFDLFlBQVcsRUFBQyxHQUFFLG1CQUFrQm5CLElBQUUsc0JBQXFCLEVBQUMsU0FBUSxNQUFFLEdBQUUsUUFBT3BCLEdBQUM7QUFDbGV2QixRQUFRLFdBQVMsRUFBQyxLQUFJNEQsSUFBRSxTQUFRLFNBQVMzQixHQUFFRSxHQUFFQyxHQUFFO0FBQUN3QixXQUFFM0IsR0FBRSxXQUFVO0FBQUNFLFlBQUUsTUFBTSxNQUFLLFNBQVM7UUFBQyxHQUFFQyxDQUFDO01BQUMsR0FBRSxPQUFNLFNBQVNILEdBQUU7QUFBQyxZQUFJRSxJQUFFO0FBQUUsZUFBQXlCLEdBQUUzQixHQUFFLFdBQVU7QUFBQ0U7UUFBRyxDQUFDLEdBQVNBO01BQUMsR0FBRSxTQUFRLFNBQVNGLEdBQUU7QUFBQyxlQUFPMkIsR0FBRTNCLEdBQUUsU0FBU0EsR0FBRTtBQUFDLGlCQUFPQTtRQUFDLENBQUMsS0FBRyxDQUFDO01BQUMsR0FBRSxNQUFLLFNBQVNBLEdBQUU7QUFBQyxZQUFHLENBQUNzQixHQUFFdEIsQ0FBQztBQUFFLGdCQUFNLE1BQU1DLEdBQUUsR0FBRyxDQUFDO0FBQUUsZUFBT0Q7TUFBQyxFQUFDO0FBQUVqQyxRQUFRLFlBQVV1QztBQUFFdkMsUUFBUSxnQkFBY3lDO0FBQUV6QyxRQUFRLHFEQUFtRGdFO0FBQ2hYaEUsUUFBUSxlQUFhLFNBQVNpQyxHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBVUgsS0FBUDtBQUFxQixnQkFBTSxNQUFNQyxHQUFFLEtBQUlELENBQUMsQ0FBQztBQUFFLFlBQUljLElBQUV4QixHQUFFLENBQUMsR0FBRVUsRUFBRSxLQUFLLEdBQUVlLElBQUVmLEVBQUUsS0FBSWdCLElBQUVoQixFQUFFLEtBQUlpQixJQUFFakIsRUFBRTtBQUFPLFlBQVNFLEtBQU4sTUFBUTtBQUFvRSxjQUExREEsRUFBRSxRQUFYLFdBQWlCYyxJQUFFZCxFQUFFLEtBQUllLElBQUVQLEdBQUUsVUFBa0JSLEVBQUUsUUFBWCxXQUFpQmEsSUFBRSxLQUFHYixFQUFFLE1BQVFGLEVBQUUsUUFBTUEsRUFBRSxLQUFLO0FBQWEsZ0JBQUlrQixJQUFFbEIsRUFBRSxLQUFLO0FBQWEsZUFBSW1CLEtBQUtqQjtBQUFFUyxlQUFFLEtBQUtULEdBQUVpQixDQUFDLEtBQUcsQ0FBQ1AsR0FBRSxlQUFlTyxDQUFDLE1BQUlMLEVBQUVLLENBQUMsSUFBV2pCLEVBQUVpQixDQUFDLE1BQVosVUFBd0JELE1BQVQsU0FBV0EsRUFBRUMsQ0FBQyxJQUFFakIsRUFBRWlCLENBQUM7UUFBRTtBQUFDLFlBQUlBLElBQUUsVUFBVSxTQUFPO0FBQUUsWUFBT0EsTUFBSjtBQUFNTCxZQUFFLFdBQVNYO2lCQUFVLElBQUVnQixHQUFFO0FBQUNELGNBQUUsTUFBTUMsQ0FBQztBQUFFLG1CQUFRQyxJQUFFLEdBQUVBLElBQUVELEdBQUVDO0FBQUlGLGNBQUVFLENBQUMsSUFBRSxVQUFVQSxJQUFFLENBQUM7QUFBRU4sWUFBRSxXQUFTSTtRQUFDO0FBQUMsZUFBTSxFQUFDLFVBQVN2QyxJQUFFLE1BQUtxQixFQUFFLE1BQ3hmLEtBQUllLEdBQUUsS0FBSUMsR0FBRSxPQUFNRixHQUFFLFFBQU9HLEVBQUM7TUFBQztBQUFFbEQsUUFBUSxnQkFBYyxTQUFTaUMsR0FBRUUsR0FBRTtBQUFDLGVBQVNBLE1BQVQsV0FBYUEsSUFBRSxPQUFNRixJQUFFLEVBQUMsVUFBU1AsSUFBRSx1QkFBc0JTLEdBQUUsZUFBY0YsR0FBRSxnQkFBZUEsR0FBRSxjQUFhLEdBQUUsVUFBUyxNQUFLLFVBQVMsS0FBSSxHQUFFQSxFQUFFLFdBQVMsRUFBQyxVQUFTUixJQUFFLFVBQVNRLEVBQUMsR0FBU0EsRUFBRSxXQUFTQTtNQUFDO0FBQUVqQyxRQUFRLGdCQUFjOEM7QUFBRTlDLFFBQVEsZ0JBQWMsU0FBU2lDLEdBQUU7QUFBQyxZQUFJRSxJQUFFVyxHQUFFLEtBQUssTUFBS2IsQ0FBQztBQUFFLGVBQUFFLEVBQUUsT0FBS0YsR0FBU0U7TUFBQztBQUFFbkMsUUFBUSxZQUFVLFdBQVU7QUFBQyxlQUFNLEVBQUMsU0FBUSxLQUFJO01BQUM7QUFBRUEsUUFBUSxhQUFXLFNBQVNpQyxHQUFFO0FBQUMsZUFBTSxFQUFDLFVBQVNOLElBQUUsUUFBT00sRUFBQztNQUFDO0FBQUVqQyxRQUFRLGlCQUFldUQ7QUFDM2V2RCxRQUFRLE9BQUssU0FBU2lDLEdBQUU7QUFBQyxlQUFNLEVBQUMsVUFBU0osSUFBRSxVQUFTLEVBQUMsU0FBUSxJQUFHLFNBQVFJLEVBQUMsR0FBRSxPQUFNNEIsR0FBQztNQUFDO0FBQUU3RCxRQUFRLE9BQUssU0FBU2lDLEdBQUVFLEdBQUU7QUFBQyxlQUFNLEVBQUMsVUFBU1AsSUFBRSxNQUFLSyxHQUFFLFNBQWlCRSxNQUFULFNBQVcsT0FBS0EsRUFBQztNQUFDO0FBQUVuQyxRQUFRLGNBQVksU0FBU2lDLEdBQUVFLEdBQUU7QUFBQyxlQUFPNEIsR0FBRSxFQUFFLFlBQVk5QixHQUFFRSxDQUFDO01BQUM7QUFBRW5DLFFBQVEsYUFBVyxTQUFTaUMsR0FBRUUsR0FBRTtBQUFDLGVBQU80QixHQUFFLEVBQUUsV0FBVzlCLEdBQUVFLENBQUM7TUFBQztBQUFFbkMsUUFBUSxnQkFBYyxXQUFVO01BQUM7QUFBRUEsUUFBUSxZQUFVLFNBQVNpQyxHQUFFRSxHQUFFO0FBQUMsZUFBTzRCLEdBQUUsRUFBRSxVQUFVOUIsR0FBRUUsQ0FBQztNQUFDO0FBQUVuQyxRQUFRLHNCQUFvQixTQUFTaUMsR0FBRUUsR0FBRUMsR0FBRTtBQUFDLGVBQU8yQixHQUFFLEVBQUUsb0JBQW9COUIsR0FBRUUsR0FBRUMsQ0FBQztNQUFDO0FBQ2hkcEMsUUFBUSxrQkFBZ0IsU0FBU2lDLEdBQUVFLEdBQUU7QUFBQyxlQUFPNEIsR0FBRSxFQUFFLGdCQUFnQjlCLEdBQUVFLENBQUM7TUFBQztBQUFFbkMsUUFBUSxVQUFRLFNBQVNpQyxHQUFFRSxHQUFFO0FBQUMsZUFBTzRCLEdBQUUsRUFBRSxRQUFROUIsR0FBRUUsQ0FBQztNQUFDO0FBQUVuQyxRQUFRLGFBQVcsU0FBU2lDLEdBQUVFLEdBQUVDLEdBQUU7QUFBQyxlQUFPMkIsR0FBRSxFQUFFLFdBQVc5QixHQUFFRSxHQUFFQyxDQUFDO01BQUM7QUFBRXBDLFFBQVEsU0FBTyxTQUFTaUMsR0FBRTtBQUFDLGVBQU84QixHQUFFLEVBQUUsT0FBTzlCLENBQUM7TUFBQztBQUFFakMsUUFBUSxXQUFTLFNBQVNpQyxHQUFFO0FBQUMsZUFBTzhCLEdBQUUsRUFBRSxTQUFTOUIsQ0FBQztNQUFDO0FBQUVqQyxRQUFRLFVBQVE7SUFBQSxDQUFBO0FDdEJyVCxRQUFBaUUsSUFBQWxFLEVBQUEsQ0FBQUMsSUFBQUMsT0FBQTtBQUFBO0FBR0VBLFNBQU8sVUFBVSxHQUFBO0lBQUEsQ0FBQTtBQ0huQixRQUFBaUUsS0FBQW5FLEVBQUFDLE9BQUE7QUFBQTtBQVFhLFVBQUlvRCxJQUFFRCxJQUFFRCxJQUFFRDtBQUFnQixhQUFPLGVBQWxCLFlBQTRDLE9BQU8sWUFBWSxPQUFoQyxjQUF5QzFCLEtBQUUsYUFBWXZCLEVBQVEsZUFBYSxXQUFVO0FBQUMsZUFBT3VCLEdBQUUsSUFBSTtNQUFDLE1BQVdDLEtBQUUsTUFBS0MsS0FBRUQsR0FBRSxJQUFJLEdBQUV4QixFQUFRLGVBQWEsV0FBVTtBQUFDLGVBQU93QixHQUFFLElBQUksSUFBRUM7TUFBQztBQUF4SSxVQUFBRixJQUF1RUMsSUFBT0M7QUFDakssYUFBTyxTQUFyQixPQUEwQyxPQUFPLGtCQUFwQixjQUF3Q0UsS0FBRSxNQUFLQyxLQUFFLE1BQUtFLEtBQUUsV0FBVTtBQUFDLFlBQVVILE9BQVA7QUFBUyxjQUFHO0FBQUMsZ0JBQUlNLElBQUVqQyxFQUFRLGFBQWE7QUFBRTJCLGVBQUUsTUFBR00sQ0FBQyxHQUFFTixLQUFFO1VBQUksU0FBT1EsR0FBRTtBQUFDLGtCQUFNLFdBQVdMLElBQUUsQ0FBQyxHQUFFSztVQUFFO01BQUMsR0FBRWlCLEtBQUUsU0FBU25CLEdBQUU7QUFBUU4sZUFBUCxPQUFTLFdBQVd5QixJQUFFLEdBQUVuQixDQUFDLEtBQUdOLEtBQUVNLEdBQUUsV0FBV0gsSUFBRSxDQUFDO01BQUUsR0FBRXFCLEtBQUUsU0FBU2xCLEdBQUVFLEdBQUU7QUFBQ1AsYUFBRSxXQUFXSyxHQUFFRSxDQUFDO01BQUMsR0FBRWUsS0FBRSxXQUFVO0FBQUMscUJBQWF0QixFQUFDO01BQUMsR0FBRTVCLEVBQVEsdUJBQXFCLFdBQVU7QUFBQyxlQUFNO01BQUUsR0FBRWlELEtBQUVqRCxFQUFRLDBCQUF3QixXQUFVO01BQUMsTUFBVytCLEtBQUUsT0FBTyxZQUFXQyxLQUFFLE9BQU8sY0FBOEIsT0FBTyxVQUFyQixRQUFrQ0UsS0FDN2YsT0FBTyxzQkFBa0MsT0FBTyxPQUFPLHlCQUEzQixjQUFrRCxRQUFRLE1BQU0sb0pBQW9KLEdBQWUsT0FBT0EsTUFBcEIsY0FBdUIsUUFBUSxNQUFNLG1KQUFtSixJQUFNRyxLQUFFLE9BQUdDLEtBQUUsTUFBS0MsS0FBRSxJQUFHQyxLQUFFLEdBQUVDLEtBQUUsR0FBRXpDLEVBQVEsdUJBQXFCLFdBQVU7QUFBQyxlQUFPQSxFQUFRLGFBQWEsS0FDN2dCeUM7TUFBQyxHQUFFUSxLQUFFLFdBQVU7TUFBQyxHQUFFakQsRUFBUSwwQkFBd0IsU0FBU2lDLEdBQUU7QUFBQyxZQUFFQSxLQUFHLE1BQUlBLElBQUUsUUFBUSxNQUFNLGlIQUFpSCxJQUFFTyxLQUFFLElBQUVQLElBQUUsS0FBSyxNQUFNLE1BQUlBLENBQUMsSUFBRTtNQUFDLEdBQU1TLEtBQUUsSUFBSSxrQkFBZUMsS0FBRUQsR0FBRSxPQUFNQSxHQUFFLE1BQU0sWUFBVSxXQUFVO0FBQUMsWUFBVUosT0FBUCxNQUFTO0FBQUMsY0FBSUwsSUFBRWpDLEVBQVEsYUFBYTtBQUFFeUMsZUFBRVIsSUFBRU87QUFBRSxjQUFHO0FBQUNGLGVBQUUsTUFBR0wsQ0FBQyxJQUFFVSxHQUFFLFlBQVksSUFBSSxLQUFHTixLQUFFLE9BQUdDLEtBQUU7VUFBSyxTQUFPSCxHQUFFO0FBQUMsa0JBQU1RLEdBQUUsWUFBWSxJQUFJLEdBQUVSO1VBQUU7UUFBQztBQUFNRSxlQUFFO01BQUUsR0FBRWUsS0FBRSxTQUFTbkIsR0FBRTtBQUFDSyxhQUFFTCxHQUFFSSxPQUFJQSxLQUFFLE1BQUdNLEdBQUUsWUFBWSxJQUFJO01BQUUsR0FBRVEsS0FBRSxTQUFTbEIsR0FBRUUsR0FBRTtBQUFDSSxhQUN0ZlIsR0FBRSxXQUFVO0FBQUNFLFlBQUVqQyxFQUFRLGFBQWEsQ0FBQztRQUFDLEdBQUVtQyxDQUFDO01BQUMsR0FBRWUsS0FBRSxXQUFVO0FBQUNsQixXQUFFTyxFQUFDLEdBQUVBLEtBQUU7TUFBRTtBQUhNLFVBQUFaLElBQU9DLElBQU9FLElBQXdWQyxJQUFvQkMsSUFBMkRFLElBQzdFRyxJQUFLQyxJQUFPQyxJQUFLQyxJQUFJQyxJQUM1TkMsSUFBcUJDO0FBQzFMLGVBQVNDLEdBQUVYLEdBQUVFLEdBQUU7QUFBQyxZQUFJQyxJQUFFSCxFQUFFO0FBQU9BLFVBQUUsS0FBS0UsQ0FBQztBQUFFRjtBQUFFLHFCQUFPO0FBQUMsZ0JBQUllLElBQUVaLElBQUUsTUFBSSxHQUFFVyxJQUFFZCxFQUFFZSxDQUFDO0FBQUUsZ0JBQVlELE1BQVQsVUFBWSxJQUFFRixHQUFFRSxHQUFFWixDQUFDO0FBQUVGLGdCQUFFZSxDQUFDLElBQUViLEdBQUVGLEVBQUVHLENBQUMsSUFBRVcsR0FBRVgsSUFBRVk7O0FBQU8sb0JBQU1mO1VBQUM7TUFBQztBQUFDLGVBQVNhLEdBQUViLEdBQUU7QUFBQyxlQUFBQSxJQUFFQSxFQUFFLENBQUMsR0FBa0JBLE1BQVQsU0FBVyxPQUFLQTtNQUFDO0FBQ2pQLGVBQVNxQixHQUFFckIsR0FBRTtBQUFDLFlBQUlFLElBQUVGLEVBQUUsQ0FBQztBQUFFLFlBQVlFLE1BQVQsUUFBVztBQUFDLGNBQUlDLElBQUVILEVBQUUsSUFBSTtBQUFFLGNBQUdHLE1BQUlELEdBQUU7QUFBQ0YsY0FBRSxDQUFDLElBQUVHO0FBQUVIO0FBQUUsdUJBQVFlLElBQUUsR0FBRUQsSUFBRWQsRUFBRSxRQUFPZSxJQUFFRCxLQUFHO0FBQUMsb0JBQUlNLElBQUUsS0FBR0wsSUFBRSxLQUFHLEdBQUVwQyxJQUFFcUIsRUFBRW9CLENBQUMsR0FBRXhCLElBQUV3QixJQUFFLEdBQUUzQixJQUFFTyxFQUFFSixDQUFDO0FBQUUsb0JBQVlqQixNQUFULFVBQVksSUFBRWlDLEdBQUVqQyxHQUFFd0IsQ0FBQztBQUFXVix3QkFBVCxVQUFZLElBQUVtQixHQUFFbkIsR0FBRWQsQ0FBQyxLQUFHcUIsRUFBRWUsQ0FBQyxJQUFFdEIsR0FBRU8sRUFBRUosQ0FBQyxJQUFFTyxHQUFFWSxJQUFFbkIsTUFBSUksRUFBRWUsQ0FBQyxJQUFFcEMsR0FBRXFCLEVBQUVvQixDQUFDLElBQUVqQixHQUFFWSxJQUFFSzt5QkFBb0IzQixNQUFULFVBQVksSUFBRW1CLEdBQUVuQixHQUFFVSxDQUFDO0FBQUVILG9CQUFFZSxDQUFDLElBQUV0QixHQUFFTyxFQUFFSixDQUFDLElBQUVPLEdBQUVZLElBQUVuQjs7QUFBTyx3QkFBTUk7Y0FBQztVQUFDO0FBQUMsaUJBQU9FO1FBQUM7QUFBQyxlQUFPO01BQUk7QUFBQyxlQUFTVSxHQUFFWixHQUFFRSxHQUFFO0FBQUMsWUFBSUMsSUFBRUgsRUFBRSxZQUFVRSxFQUFFO0FBQVUsZUFBV0MsTUFBSixJQUFNQSxJQUFFSCxFQUFFLEtBQUdFLEVBQUU7TUFBRTtBQUFDLFVBQUlvQixLQUFFLENBQUMsR0FBRUUsS0FBRSxDQUFDLEdBQUVDLEtBQUUsR0FBRUMsS0FBRSxNQUFLQyxLQUFFLEdBQUVDLEtBQUUsT0FBR0MsS0FBRSxPQUFHQyxLQUFFO0FBQ2phLGVBQVNDLEdBQUUvQixHQUFFO0FBQUMsaUJBQVFFLElBQUVXLEdBQUVXLEVBQUMsR0FBU3RCLE1BQVAsUUFBVTtBQUFDLGNBQVVBLEVBQUUsYUFBVDtBQUFrQm1CLGVBQUVHLEVBQUM7bUJBQVV0QixFQUFFLGFBQVdGO0FBQUVxQixlQUFFRyxFQUFDLEdBQUV0QixFQUFFLFlBQVVBLEVBQUUsZ0JBQWVTLEdBQUVXLElBQUVwQixDQUFDOztBQUFPO0FBQU1BLGNBQUVXLEdBQUVXLEVBQUM7UUFBQztNQUFDO0FBQUMsZUFBU1UsR0FBRWxDLEdBQUU7QUFBVyxZQUFWOEIsS0FBRSxPQUFHQyxHQUFFL0IsQ0FBQyxHQUFLLENBQUM2QjtBQUFFLGNBQVVoQixHQUFFUyxFQUFDLE1BQVY7QUFBWU8saUJBQUUsTUFBR1YsR0FBRWdCLEVBQUM7ZUFBTTtBQUFDLGdCQUFJakMsSUFBRVcsR0FBRVcsRUFBQztBQUFTdEIsa0JBQVAsUUFBVWdCLEdBQUVnQixJQUFFaEMsRUFBRSxZQUFVRixDQUFDO1VBQUM7TUFBQztBQUN6UCxlQUFTbUMsR0FBRW5DLEdBQUVFLEdBQUU7QUFBQzJCLGFBQUUsT0FBR0MsT0FBSUEsS0FBRSxPQUFHYixHQUFFLElBQUdXLEtBQUU7QUFBRyxZQUFJekIsSUFBRXdCO0FBQUUsWUFBRztBQUFNLGVBQUxJLEdBQUU3QixDQUFDLEdBQU13QixLQUFFYixHQUFFUyxFQUFDLEdBQVNJLE9BQVAsU0FBVyxFQUFFQSxHQUFFLGlCQUFleEIsTUFBSUYsS0FBRyxDQUFDakMsRUFBUSxxQkFBcUIsTUFBSTtBQUFDLGdCQUFJZ0QsSUFBRVcsR0FBRTtBQUFTLGdCQUFnQixPQUFPWCxLQUFwQixZQUFzQjtBQUFDVyxpQkFBRSxXQUFTLE1BQUtDLEtBQUVELEdBQUU7QUFBYyxrQkFBSVosSUFBRUMsRUFBRVcsR0FBRSxrQkFBZ0J4QixDQUFDO0FBQUVBLGtCQUFFbkMsRUFBUSxhQUFhLEdBQWUsT0FBTytDLEtBQXBCLGFBQXNCWSxHQUFFLFdBQVNaLElBQUVZLE9BQUliLEdBQUVTLEVBQUMsS0FBR0QsR0FBRUMsRUFBQyxHQUFFUyxHQUFFN0IsQ0FBQztZQUFDO0FBQU1tQixpQkFBRUMsRUFBQztBQUFFSSxpQkFBRWIsR0FBRVMsRUFBQztVQUFDO0FBQUMsY0FBVUksT0FBUDtBQUFTLGdCQUFJTixJQUFFO2VBQU87QUFBQyxnQkFBSXpDLElBQUVrQyxHQUFFVyxFQUFDO0FBQVM3QyxrQkFBUCxRQUFVdUMsR0FBRWdCLElBQUV2RCxFQUFFLFlBQVV1QixDQUFDLEdBQUVrQixJQUFFO1VBQUU7QUFBQyxpQkFBT0E7UUFBQyxVQUFBO0FBQVNNLGVBQUUsTUFBS0MsS0FBRXhCLEdBQUV5QixLQUFFO1FBQUU7TUFBQztBQUFDLFVBQUlRLEtBQUVwQjtBQUFFakQsUUFBUSx3QkFBc0I7QUFDdGVBLFFBQVEsNkJBQTJCO0FBQUVBLFFBQVEsdUJBQXFCO0FBQUVBLFFBQVEsMEJBQXdCO0FBQUVBLFFBQVEscUJBQW1CO0FBQUtBLFFBQVEsZ0NBQThCO0FBQUVBLFFBQVEsMEJBQXdCLFNBQVNpQyxHQUFFO0FBQUNBLFVBQUUsV0FBUztNQUFJO0FBQUVqQyxRQUFRLDZCQUEyQixXQUFVO0FBQUM4RCxjQUFHRCxPQUFJQyxLQUFFLE1BQUdWLEdBQUVnQixFQUFDO01BQUU7QUFBRXBFLFFBQVEsbUNBQWlDLFdBQVU7QUFBQyxlQUFPNEQ7TUFBQztBQUFFNUQsUUFBUSxnQ0FBOEIsV0FBVTtBQUFDLGVBQU84QyxHQUFFUyxFQUFDO01BQUM7QUFDdGF2RCxRQUFRLGdCQUFjLFNBQVNpQyxHQUFFO0FBQUMsZ0JBQU8yQixJQUFFO1VBQUMsS0FBSztVQUFFLEtBQUs7VUFBRSxLQUFLO0FBQUUsZ0JBQUl6QixJQUFFO0FBQUU7VUFBTTtBQUFRQSxnQkFBRXlCO1FBQUM7QUFBQyxZQUFJeEIsSUFBRXdCO0FBQUVBLGFBQUV6QjtBQUFFLFlBQUc7QUFBQyxpQkFBT0YsRUFBRTtRQUFDLFVBQUE7QUFBUzJCLGVBQUV4QjtRQUFDO01BQUM7QUFBRXBDLFFBQVEsMEJBQXdCLFdBQVU7TUFBQztBQUFFQSxRQUFRLHdCQUFzQnFFO0FBQUVyRSxRQUFRLDJCQUF5QixTQUFTaUMsR0FBRUUsR0FBRTtBQUFDLGdCQUFPRixHQUFFO1VBQUMsS0FBSztVQUFFLEtBQUs7VUFBRSxLQUFLO1VBQUUsS0FBSztVQUFFLEtBQUs7QUFBRTtVQUFNO0FBQVFBLGdCQUFFO1FBQUM7QUFBQyxZQUFJRyxJQUFFd0I7QUFBRUEsYUFBRTNCO0FBQUUsWUFBRztBQUFDLGlCQUFPRSxFQUFFO1FBQUMsVUFBQTtBQUFTeUIsZUFBRXhCO1FBQUM7TUFBQztBQUN0V3BDLFFBQVEsNEJBQTBCLFNBQVNpQyxHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBSVksSUFBRWhELEVBQVEsYUFBYTtBQUFpRixnQkFBcEUsT0FBT29DLEtBQWxCLFlBQTRCQSxNQUFQLFFBQVVBLElBQUVBLEVBQUUsT0FBTUEsSUFBYSxPQUFPQSxLQUFsQixZQUFxQixJQUFFQSxJQUFFWSxJQUFFWixJQUFFWSxLQUFHWixJQUFFWSxHQUFTZixHQUFFO1VBQUMsS0FBSztBQUFFLGdCQUFJYyxJQUFFO0FBQUc7VUFBTSxLQUFLO0FBQUVBLGdCQUFFO0FBQUk7VUFBTSxLQUFLO0FBQUVBLGdCQUFFO0FBQVc7VUFBTSxLQUFLO0FBQUVBLGdCQUFFO0FBQUk7VUFBTTtBQUFRQSxnQkFBRTtRQUFHO0FBQUMsZUFBQUEsSUFBRVgsSUFBRVcsR0FBRWQsSUFBRSxFQUFDLElBQUd5QixNQUFJLFVBQVN2QixHQUFFLGVBQWNGLEdBQUUsV0FBVUcsR0FBRSxnQkFBZVcsR0FBRSxXQUFVLEdBQUUsR0FBRVgsSUFBRVksS0FBR2YsRUFBRSxZQUFVRyxHQUFFUSxHQUFFYSxJQUFFeEIsQ0FBQyxHQUFTYSxHQUFFUyxFQUFDLE1BQVYsUUFBYXRCLE1BQUlhLEdBQUVXLEVBQUMsTUFBSU0sS0FBRWIsR0FBRSxJQUFFYSxLQUFFLE1BQUdaLEdBQUVnQixJQUFFL0IsSUFBRVksQ0FBQyxPQUFLZixFQUFFLFlBQVVjLEdBQUVILEdBQUVXLElBQUV0QixDQUFDLEdBQUU2QixNQUFHRCxPQUFJQyxLQUFFLE1BQUdWLEdBQUVnQixFQUFDLEtBQVduQztNQUFDO0FBQzNkakMsUUFBUSx3QkFBc0IsU0FBU2lDLEdBQUU7QUFBQyxZQUFJRSxJQUFFeUI7QUFBRSxlQUFPLFdBQVU7QUFBQyxjQUFJeEIsSUFBRXdCO0FBQUVBLGVBQUV6QjtBQUFFLGNBQUc7QUFBQyxtQkFBT0YsRUFBRSxNQUFNLE1BQUssU0FBUztVQUFDLFVBQUE7QUFBUzJCLGlCQUFFeEI7VUFBQztRQUFDO01BQUM7SUFBQSxDQUFBO0FDbkJoSSxRQUFBa0MsS0FBQXZFLEVBQUEsQ0FBQUMsSUFBQUMsT0FBQTtBQUFBO0FBR0VBLFNBQU8sVUFBVSxHQUFBO0lBQUEsQ0FBQTtBQ0huQixRQUFBc0UsS0FBQXhFLEVBQUFDLFFBQUE7QUFBQTtBQVdhLFVBQUl3RSxLQUFHLEVBQUEsR0FBaUJuQixLQUFFLEdBQUEsR0FBeUIzQixLQUFFLEdBQUE7QUFBcUIsZUFBU00sRUFBRUMsR0FBRTtBQUFDLGlCQUFRRSxJQUFFLDJEQUF5REYsR0FBRUcsSUFBRSxHQUFFQSxJQUFFLFVBQVUsUUFBT0E7QUFBSUQsZUFBRyxhQUFXLG1CQUFtQixVQUFVQyxDQUFDLENBQUM7QUFBRSxlQUFNLDJCQUF5QkgsSUFBRSxhQUFXRSxJQUFFO01BQWdIO0FBQUMsVUFBRyxDQUFDcUM7QUFBRyxjQUFNLE1BQU14QyxFQUFFLEdBQUcsQ0FBQztBQUFFLFVBQUl5QyxLQUFHLG9CQUFJLE9BQUlDLEtBQUcsQ0FBQztBQUFFLGVBQVNDLEdBQUcxQyxHQUFFRSxHQUFFO0FBQUN5QyxXQUFHM0MsR0FBRUUsQ0FBQyxHQUFFeUMsR0FBRzNDLElBQUUsV0FBVUUsQ0FBQztNQUFDO0FBQzdlLGVBQVN5QyxHQUFHM0MsR0FBRUUsR0FBRTtBQUFTLGFBQVJ1QyxHQUFHekMsQ0FBQyxJQUFFRSxHQUFNRixJQUFFLEdBQUVBLElBQUVFLEVBQUUsUUFBT0Y7QUFBSXdDLGFBQUcsSUFBSXRDLEVBQUVGLENBQUMsQ0FBQztNQUFDO0FBQzVELFVBQUk0QyxLQUFHLEVBQWdCLE9BQU8sU0FBckIsT0FBMkMsT0FBTyxPQUFPLFdBQTVCLE9BQW9ELE9BQU8sT0FBTyxTQUFTLGdCQUFyQyxNQUFvREMsS0FBRywrVkFBOFZDLEtBQUcsT0FBTyxVQUFVLGdCQUNyZkMsS0FBRyxDQUFDLEdBQUVDLEtBQUcsQ0FBQztBQUFFLGVBQVNDLEdBQUdqRCxHQUFFO0FBQUMsZUFBRzhDLEdBQUcsS0FBS0UsSUFBR2hELENBQUMsSUFBUSxPQUFNOEMsR0FBRyxLQUFLQyxJQUFHL0MsQ0FBQyxJQUFRLFFBQU02QyxHQUFHLEtBQUs3QyxDQUFDLElBQVNnRCxHQUFHaEQsQ0FBQyxJQUFFLFFBQUcrQyxHQUFHL0MsQ0FBQyxJQUFFLE1BQVM7TUFBRTtBQUFDLGVBQVNrRCxHQUFHbEQsR0FBRUUsR0FBRUMsR0FBRVksR0FBRTtBQUFDLFlBQVVaLE1BQVAsUUFBY0EsRUFBRSxTQUFOO0FBQVcsaUJBQU07QUFBRyxnQkFBTyxPQUFPRCxHQUFFO1VBQUMsS0FBSztVQUFXLEtBQUs7QUFBUyxtQkFBTTtVQUFHLEtBQUs7QUFBVSxtQkFBR2EsSUFBUSxRQUFhWixNQUFQLE9BQWUsQ0FBQ0EsRUFBRSxtQkFBZ0JILElBQUVBLEVBQUUsWUFBWSxFQUFFLE1BQU0sR0FBRSxDQUFDLEdBQWtCQSxNQUFWLFdBQXVCQSxNQUFWO1VBQVk7QUFBUSxtQkFBTTtRQUFFO01BQUM7QUFDNVgsZUFBU21ELEdBQUduRCxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQUMsWUFBVWIsTUFBUCxRQUF3QixPQUFPQSxJQUFyQixPQUF3QmdELEdBQUdsRCxHQUFFRSxHQUFFQyxHQUFFWSxDQUFDO0FBQUUsaUJBQU07QUFBRyxZQUFHQTtBQUFFLGlCQUFNO0FBQUcsWUFBVVosTUFBUDtBQUFTLGtCQUFPQSxFQUFFLE1BQUs7WUFBQyxLQUFLO0FBQUUscUJBQU0sQ0FBQ0Q7WUFBRSxLQUFLO0FBQUUscUJBQVdBLE1BQUw7WUFBTyxLQUFLO0FBQUUscUJBQU8sTUFBTUEsQ0FBQztZQUFFLEtBQUs7QUFBRSxxQkFBTyxNQUFNQSxDQUFDLEtBQUcsSUFBRUE7VUFBQztBQUFDLGVBQU07TUFBRTtBQUFDLGVBQVNHLEdBQUVMLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVELEdBQUVLLEdBQUVELEdBQUU7QUFBQyxhQUFLLGtCQUFvQmhCLE1BQUosS0FBV0EsTUFBSixLQUFXQSxNQUFKLEdBQU0sS0FBSyxnQkFBY2EsR0FBRSxLQUFLLHFCQUFtQkQsR0FBRSxLQUFLLGtCQUFnQlgsR0FBRSxLQUFLLGVBQWFILEdBQUUsS0FBSyxPQUFLRSxHQUFFLEtBQUssY0FBWWlCLEdBQUUsS0FBSyxvQkFBa0JEO01BQUM7QUFBQyxVQUFJWCxLQUFFLENBQUM7QUFDcGIsNklBQXVJLE1BQU0sR0FBRyxFQUFFLFFBQVEsU0FBU1AsR0FBRTtBQUFDTyxXQUFFUCxDQUFDLElBQUUsSUFBSUssR0FBRUwsR0FBRSxHQUFFLE9BQUdBLEdBQUUsTUFBSyxPQUFHLEtBQUU7TUFBQyxDQUFDO0FBQUUsT0FBQyxDQUFDLGlCQUFnQixnQkFBZ0IsR0FBRSxDQUFDLGFBQVksT0FBTyxHQUFFLENBQUMsV0FBVSxLQUFLLEdBQUUsQ0FBQyxhQUFZLFlBQVksQ0FBQyxFQUFFLFFBQVEsU0FBU0EsR0FBRTtBQUFDLFlBQUlFLElBQUVGLEVBQUUsQ0FBQztBQUFFTyxXQUFFTCxDQUFDLElBQUUsSUFBSUcsR0FBRUgsR0FBRSxHQUFFLE9BQUdGLEVBQUUsQ0FBQyxHQUFFLE1BQUssT0FBRyxLQUFFO01BQUMsQ0FBQztBQUFFLE9BQUMsbUJBQWtCLGFBQVksY0FBYSxPQUFPLEVBQUUsUUFBUSxTQUFTQSxHQUFFO0FBQUNPLFdBQUVQLENBQUMsSUFBRSxJQUFJSyxHQUFFTCxHQUFFLEdBQUUsT0FBR0EsRUFBRSxZQUFZLEdBQUUsTUFBSyxPQUFHLEtBQUU7TUFBQyxDQUFDO0FBQzNlLE9BQUMsZUFBYyw2QkFBNEIsYUFBWSxlQUFlLEVBQUUsUUFBUSxTQUFTQSxHQUFFO0FBQUNPLFdBQUVQLENBQUMsSUFBRSxJQUFJSyxHQUFFTCxHQUFFLEdBQUUsT0FBR0EsR0FBRSxNQUFLLE9BQUcsS0FBRTtNQUFDLENBQUM7QUFBRSxvUEFBOE8sTUFBTSxHQUFHLEVBQUUsUUFBUSxTQUFTQSxHQUFFO0FBQUNPLFdBQUVQLENBQUMsSUFBRSxJQUFJSyxHQUFFTCxHQUFFLEdBQUUsT0FBR0EsRUFBRSxZQUFZLEdBQUUsTUFBSyxPQUFHLEtBQUU7TUFBQyxDQUFDO0FBQ3piLE9BQUMsV0FBVSxZQUFXLFNBQVEsVUFBVSxFQUFFLFFBQVEsU0FBU0EsR0FBRTtBQUFDTyxXQUFFUCxDQUFDLElBQUUsSUFBSUssR0FBRUwsR0FBRSxHQUFFLE1BQUdBLEdBQUUsTUFBSyxPQUFHLEtBQUU7TUFBQyxDQUFDO0FBQUUsT0FBQyxXQUFVLFVBQVUsRUFBRSxRQUFRLFNBQVNBLEdBQUU7QUFBQ08sV0FBRVAsQ0FBQyxJQUFFLElBQUlLLEdBQUVMLEdBQUUsR0FBRSxPQUFHQSxHQUFFLE1BQUssT0FBRyxLQUFFO01BQUMsQ0FBQztBQUFFLE9BQUMsUUFBTyxRQUFPLFFBQU8sTUFBTSxFQUFFLFFBQVEsU0FBU0EsR0FBRTtBQUFDTyxXQUFFUCxDQUFDLElBQUUsSUFBSUssR0FBRUwsR0FBRSxHQUFFLE9BQUdBLEdBQUUsTUFBSyxPQUFHLEtBQUU7TUFBQyxDQUFDO0FBQUUsT0FBQyxXQUFVLE9BQU8sRUFBRSxRQUFRLFNBQVNBLEdBQUU7QUFBQ08sV0FBRVAsQ0FBQyxJQUFFLElBQUlLLEdBQUVMLEdBQUUsR0FBRSxPQUFHQSxFQUFFLFlBQVksR0FBRSxNQUFLLE9BQUcsS0FBRTtNQUFDLENBQUM7QUFBRSxVQUFJb0QsS0FBRztBQUFnQixlQUFTQyxHQUFHckQsR0FBRTtBQUFDLGVBQU9BLEVBQUUsQ0FBQyxFQUFFLFlBQVk7TUFBQztBQUN4Wixna0NBQTBqQyxNQUFNLEdBQUcsRUFBRSxRQUFRLFNBQVNBLEdBQUU7QUFBQyxZQUFJRSxJQUFFRixFQUFFLFFBQVFvRCxJQUN6bUNDLEVBQUU7QUFBRTlDLFdBQUVMLENBQUMsSUFBRSxJQUFJRyxHQUFFSCxHQUFFLEdBQUUsT0FBR0YsR0FBRSxNQUFLLE9BQUcsS0FBRTtNQUFDLENBQUM7QUFBRSxpRkFBMkUsTUFBTSxHQUFHLEVBQUUsUUFBUSxTQUFTQSxHQUFFO0FBQUMsWUFBSUUsSUFBRUYsRUFBRSxRQUFRb0QsSUFBR0MsRUFBRTtBQUFFOUMsV0FBRUwsQ0FBQyxJQUFFLElBQUlHLEdBQUVILEdBQUUsR0FBRSxPQUFHRixHQUFFLGdDQUErQixPQUFHLEtBQUU7TUFBQyxDQUFDO0FBQUUsT0FBQyxZQUFXLFlBQVcsV0FBVyxFQUFFLFFBQVEsU0FBU0EsR0FBRTtBQUFDLFlBQUlFLElBQUVGLEVBQUUsUUFBUW9ELElBQUdDLEVBQUU7QUFBRTlDLFdBQUVMLENBQUMsSUFBRSxJQUFJRyxHQUFFSCxHQUFFLEdBQUUsT0FBR0YsR0FBRSx3Q0FBdUMsT0FBRyxLQUFFO01BQUMsQ0FBQztBQUFFLE9BQUMsWUFBVyxhQUFhLEVBQUUsUUFBUSxTQUFTQSxHQUFFO0FBQUNPLFdBQUVQLENBQUMsSUFBRSxJQUFJSyxHQUFFTCxHQUFFLEdBQUUsT0FBR0EsRUFBRSxZQUFZLEdBQUUsTUFBSyxPQUFHLEtBQUU7TUFBQyxDQUFDO0FBQ25kTyxTQUFFLFlBQVUsSUFBSUYsR0FBRSxhQUFZLEdBQUUsT0FBRyxjQUFhLGdDQUErQixNQUFHLEtBQUU7QUFBRSxPQUFDLE9BQU0sUUFBTyxVQUFTLFlBQVksRUFBRSxRQUFRLFNBQVNMLEdBQUU7QUFBQ08sV0FBRVAsQ0FBQyxJQUFFLElBQUlLLEdBQUVMLEdBQUUsR0FBRSxPQUFHQSxFQUFFLFlBQVksR0FBRSxNQUFLLE1BQUcsSUFBRTtNQUFDLENBQUM7QUFDN0wsZUFBU3NELEdBQUd0RCxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQUMsWUFBSUQsSUFBRVAsR0FBRSxlQUFlTCxDQUFDLElBQUVLLEdBQUVMLENBQUMsSUFBRSxNQUFTaUIsSUFBU0wsTUFBUCxPQUFhQSxFQUFFLFNBQU4sSUFBV0MsSUFBRSxRQUFHLEVBQUEsRUFBRSxJQUFFYixFQUFFLFdBQWVBLEVBQUUsQ0FBQyxNQUFULE9BQWtCQSxFQUFFLENBQUMsTUFBVCxPQUFrQkEsRUFBRSxDQUFDLE1BQVQsT0FBa0JBLEVBQUUsQ0FBQyxNQUFUO0FBQWlCaUIsY0FBSWdDLEdBQUdqRCxHQUFFQyxHQUFFVyxHQUFFQyxDQUFDLE1BQUlaLElBQUUsT0FBTVksS0FBVUQsTUFBUCxPQUFTbUMsR0FBRy9DLENBQUMsTUFBV0MsTUFBUCxPQUFTSCxFQUFFLGdCQUFnQkUsQ0FBQyxJQUFFRixFQUFFLGFBQWFFLEdBQUUsS0FBR0MsQ0FBQyxLQUFHVyxFQUFFLGtCQUFnQmQsRUFBRWMsRUFBRSxZQUFZLElBQVNYLE1BQVAsT0FBYVcsRUFBRSxTQUFOLElBQVcsUUFBRyxLQUFHWCxLQUFHRCxJQUFFWSxFQUFFLGVBQWNDLElBQUVELEVBQUUsb0JBQTBCWCxNQUFQLE9BQVNILEVBQUUsZ0JBQWdCRSxDQUFDLEtBQUdZLElBQUVBLEVBQUUsTUFBS1gsSUFBTVcsTUFBSixLQUFXQSxNQUFKLEtBQVlYLE1BQUwsT0FBTyxLQUFHLEtBQUdBLEdBQUVZLElBQUVmLEVBQUUsZUFBZWUsR0FBRWIsR0FBRUMsQ0FBQyxJQUFFSCxFQUFFLGFBQWFFLEdBQUVDLENBQUM7TUFBSTtBQUNqZSxVQUFJb0QsS0FBR2hCLEdBQUcsb0RBQW1EaUIsS0FBRyxPQUFNQyxLQUFHLE9BQU1DLEtBQUcsT0FBTUMsS0FBRyxPQUFNQyxLQUFHLE9BQU1DLEtBQUcsT0FBTUMsS0FBRyxPQUFNQyxLQUFHLE9BQU1DLEtBQUcsT0FBTUMsS0FBRyxPQUFNQyxLQUFHLE9BQU1DLEtBQUcsT0FBTUMsS0FBRyxPQUFNQyxLQUFHLE9BQU1DLEtBQUcsT0FBTUMsS0FBRyxPQUFNQyxLQUFHO0FBQ2hNLGFBQU8sVUFBcEIsY0FBNEIsT0FBTyxRQUFTaEUsS0FBRSxPQUFPLEtBQUlnRCxLQUFHaEQsR0FBRSxlQUFlLEdBQUVpRCxLQUFHakQsR0FBRSxjQUFjLEdBQUVrRCxLQUFHbEQsR0FBRSxnQkFBZ0IsR0FBRW1ELEtBQUduRCxHQUFFLG1CQUFtQixHQUFFb0QsS0FBR3BELEdBQUUsZ0JBQWdCLEdBQUVxRCxLQUFHckQsR0FBRSxnQkFBZ0IsR0FBRXNELEtBQUd0RCxHQUFFLGVBQWUsR0FBRXVELEtBQUd2RCxHQUFFLG1CQUFtQixHQUFFd0QsS0FBR3hELEdBQUUsZ0JBQWdCLEdBQUV5RCxLQUFHekQsR0FBRSxxQkFBcUIsR0FBRTBELEtBQUcxRCxHQUFFLFlBQVksR0FBRTJELEtBQUczRCxHQUFFLFlBQVksR0FBRTRELEtBQUc1RCxHQUFFLGFBQWEsR0FBRUEsR0FBRSxhQUFhLEdBQUU2RCxLQUFHN0QsR0FBRSxpQkFBaUIsR0FBRThELEtBQUc5RCxHQUFFLHdCQUF3QixHQUFFK0QsS0FBRy9ELEdBQUUsaUJBQWlCLEdBQUVnRSxLQUFHaEUsR0FBRSxxQkFBcUI7QUFBOWEsVUFBQUEsSUFDM0NpRSxLQUFnQixPQUFPLFVBQXBCLGNBQTRCLE9BQU87QUFBUyxlQUFTQyxHQUFHMUUsR0FBRTtBQUFDLGVBQVVBLE1BQVAsUUFBcUIsT0FBT0EsS0FBbEIsV0FBMkIsUUFBS0EsSUFBRXlFLE1BQUl6RSxFQUFFeUUsRUFBRSxLQUFHekUsRUFBRSxZQUFZLEdBQXFCLE9BQU9BLEtBQXBCLGFBQXNCQSxJQUFFO01BQUk7QUFBQyxVQUFJMkU7QUFBRyxlQUFTQyxHQUFHNUUsR0FBRTtBQUFDLFlBQVkyRSxPQUFUO0FBQVksY0FBRztBQUFDLGtCQUFNLE1BQU07VUFBRSxTQUFPeEUsR0FBRTtBQUFDLGdCQUFJRCxJQUFFQyxFQUFFLE1BQU0sS0FBSyxFQUFFLE1BQU0sY0FBYztBQUFFd0UsaUJBQUd6RSxLQUFHQSxFQUFFLENBQUMsS0FBRztVQUFFO0FBQUMsZUFBTTtJQUFLeUUsS0FBRzNFO01BQUM7QUFBQyxVQUFJNkUsS0FBRztBQUNqVSxlQUFTQyxHQUFHOUUsR0FBRUUsR0FBRTtBQUFDLFlBQUcsQ0FBQ0YsS0FBRzZFO0FBQUcsaUJBQU07QUFBR0EsYUFBRztBQUFHLFlBQUkxRSxJQUFFLE1BQU07QUFBa0IsY0FBTSxvQkFBa0I7QUFBTyxZQUFHO0FBQUMsY0FBR0Q7QUFBRSxnQkFBR0EsSUFBRSxXQUFVO0FBQUMsb0JBQU0sTUFBTTtZQUFFLEdBQUUsT0FBTyxlQUFlQSxFQUFFLFdBQVUsU0FBUSxFQUFDLEtBQUksV0FBVTtBQUFDLG9CQUFNLE1BQU07WUFBRSxFQUFDLENBQUMsR0FBYSxPQUFPLFdBQWxCLFlBQTJCLFFBQVEsV0FBVTtBQUFDLGtCQUFHO0FBQUMsd0JBQVEsVUFBVUEsR0FBRSxDQUFDLENBQUM7Y0FBQyxTQUFPYyxHQUFFO0FBQUMsb0JBQUlELElBQUVDO2NBQUM7QUFBQyxzQkFBUSxVQUFVaEIsR0FBRSxDQUFDLEdBQUVFLENBQUM7WUFBQyxPQUFLO0FBQUMsa0JBQUc7QUFBQ0Esa0JBQUUsS0FBSztjQUFDLFNBQU9jLEdBQUU7QUFBQ0Qsb0JBQUVDO2NBQUM7QUFBQ2hCLGdCQUFFLEtBQUtFLEVBQUUsU0FBUztZQUFDO2VBQUs7QUFBQyxnQkFBRztBQUFDLG9CQUFNLE1BQU07WUFBRSxTQUFPYyxHQUFFO0FBQUNELGtCQUFFQztZQUFDO0FBQUNoQixjQUFFO1VBQUM7UUFBQyxTQUFPZ0IsR0FBRTtBQUFDLGNBQUdBLEtBQUdELEtBQWMsT0FBT0MsRUFBRSxTQUFwQixVQUEwQjtBQUFDLHFCQUFRRixJQUFFRSxFQUFFLE1BQU0sTUFBTTtDQUFJLEdBQ3ZmRyxJQUFFSixFQUFFLE1BQU0sTUFBTTtDQUFJLEdBQUVHLElBQUVKLEVBQUUsU0FBTyxHQUFFRyxJQUFFRSxFQUFFLFNBQU8sR0FBRSxLQUFHRCxLQUFHLEtBQUdELEtBQUdILEVBQUVJLENBQUMsTUFBSUMsRUFBRUYsQ0FBQztBQUFHQTtBQUFJLG1CQUFLLEtBQUdDLEtBQUcsS0FBR0QsR0FBRUMsS0FBSUQ7QUFBSSxrQkFBR0gsRUFBRUksQ0FBQyxNQUFJQyxFQUFFRixDQUFDLEdBQUU7QUFBQyxvQkFBT0MsTUFBSixLQUFXRCxNQUFKO0FBQU87QUFBRyx3QkFBR0MsS0FBSUQsS0FBSSxJQUFFQSxLQUFHSCxFQUFFSSxDQUFDLE1BQUlDLEVBQUVGLENBQUM7QUFBRSw2QkFBTTtJQUFLSCxFQUFFSSxDQUFDLEVBQUUsUUFBUSxZQUFXLE1BQU07eUJBQVEsS0FBR0EsS0FBRyxLQUFHRDtBQUFHO2NBQUs7VUFBQztRQUFDLFVBQUE7QUFBUzRELGVBQUcsT0FBRyxNQUFNLG9CQUFrQjFFO1FBQUM7QUFBQyxnQkFBT0gsSUFBRUEsSUFBRUEsRUFBRSxlQUFhQSxFQUFFLE9BQUssTUFBSTRFLEdBQUc1RSxDQUFDLElBQUU7TUFBRTtBQUMvVCxlQUFTK0UsR0FBRy9FLEdBQUU7QUFBQyxnQkFBT0EsRUFBRSxLQUFJO1VBQUMsS0FBSztBQUFFLG1CQUFPNEUsR0FBRzVFLEVBQUUsSUFBSTtVQUFFLEtBQUs7QUFBRyxtQkFBTzRFLEdBQUcsTUFBTTtVQUFFLEtBQUs7QUFBRyxtQkFBT0EsR0FBRyxVQUFVO1VBQUUsS0FBSztBQUFHLG1CQUFPQSxHQUFHLGNBQWM7VUFBRSxLQUFLO1VBQUUsS0FBSztVQUFFLEtBQUs7QUFBRyxtQkFBTzVFLElBQUU4RSxHQUFHOUUsRUFBRSxNQUFLLEtBQUUsR0FBRUE7VUFBRSxLQUFLO0FBQUcsbUJBQU9BLElBQUU4RSxHQUFHOUUsRUFBRSxLQUFLLFFBQU8sS0FBRSxHQUFFQTtVQUFFLEtBQUs7QUFBRyxtQkFBT0EsSUFBRThFLEdBQUc5RSxFQUFFLEtBQUssU0FBUSxLQUFFLEdBQUVBO1VBQUUsS0FBSztBQUFFLG1CQUFPQSxJQUFFOEUsR0FBRzlFLEVBQUUsTUFBSyxJQUFFLEdBQUVBO1VBQUU7QUFBUSxtQkFBTTtRQUFFO01BQUM7QUFDalUsZUFBU2dGLEdBQUdoRixHQUFFO0FBQUMsWUFBU0EsS0FBTjtBQUFRLGlCQUFPO0FBQUssWUFBZ0IsT0FBT0EsS0FBcEI7QUFBc0IsaUJBQU9BLEVBQUUsZUFBYUEsRUFBRSxRQUFNO0FBQUssWUFBYyxPQUFPQSxLQUFsQjtBQUFvQixpQkFBT0E7QUFBRSxnQkFBT0EsR0FBRTtVQUFDLEtBQUswRDtBQUFHLG1CQUFNO1VBQVcsS0FBS0Q7QUFBRyxtQkFBTTtVQUFTLEtBQUtHO0FBQUcsbUJBQU07VUFBVyxLQUFLRDtBQUFHLG1CQUFNO1VBQWEsS0FBS0s7QUFBRyxtQkFBTTtVQUFXLEtBQUtDO0FBQUcsbUJBQU07UUFBYztBQUFDLFlBQWMsT0FBT2pFLEtBQWxCO0FBQW9CLGtCQUFPQSxFQUFFLFVBQVM7WUFBQyxLQUFLOEQ7QUFBRyxzQkFBTzlELEVBQUUsZUFBYSxhQUFXO1lBQVksS0FBSzZEO0FBQUcsc0JBQU83RCxFQUFFLFNBQVMsZUFBYSxhQUFXO1lBQVksS0FBSytEO0FBQUcsa0JBQUk3RCxJQUFFRixFQUFFO0FBQU8scUJBQUFFLElBQUVBLEVBQUUsZUFBYUEsRUFBRSxRQUFNLElBQzVlRixFQUFFLGdCQUFtQkUsTUFBTCxLQUFPLGdCQUFjQSxJQUFFLE1BQUk7WUFBYyxLQUFLZ0U7QUFBRyxxQkFBT2MsR0FBR2hGLEVBQUUsSUFBSTtZQUFFLEtBQUtvRTtBQUFHLHFCQUFPWSxHQUFHaEYsRUFBRSxPQUFPO1lBQUUsS0FBS21FO0FBQUdqRSxrQkFBRUYsRUFBRSxVQUFTQSxJQUFFQSxFQUFFO0FBQU0sa0JBQUc7QUFBQyx1QkFBT2dGLEdBQUdoRixFQUFFRSxDQUFDLENBQUM7Y0FBQyxRQUFTO2NBQUM7VUFBQztBQUFDLGVBQU87TUFBSTtBQUFDLGVBQVMrRSxHQUFHakYsR0FBRTtBQUFDLGdCQUFPLE9BQU9BLEdBQUU7VUFBQyxLQUFLO1VBQVUsS0FBSztVQUFTLEtBQUs7VUFBUyxLQUFLO1VBQVMsS0FBSztBQUFZLG1CQUFPQTtVQUFFO0FBQVEsbUJBQU07UUFBRTtNQUFDO0FBQUMsZUFBU2tGLEdBQUdsRixHQUFFO0FBQUMsWUFBSUUsSUFBRUYsRUFBRTtBQUFLLGdCQUFPQSxJQUFFQSxFQUFFLGFBQXFCQSxFQUFFLFlBQVksTUFBeEIsWUFBeUNFLE1BQWIsY0FBMEJBLE1BQVY7TUFBWTtBQUNoYixlQUFTaUYsR0FBR25GLEdBQUU7QUFBQyxZQUFJRSxJQUFFZ0YsR0FBR2xGLENBQUMsSUFBRSxZQUFVLFNBQVFHLElBQUUsT0FBTyx5QkFBeUJILEVBQUUsWUFBWSxXQUFVRSxDQUFDLEdBQUVhLElBQUUsS0FBR2YsRUFBRUUsQ0FBQztBQUFFLFlBQUcsQ0FBQ0YsRUFBRSxlQUFlRSxDQUFDLEtBQWlCLE9BQU9DLElBQXJCLE9BQXFDLE9BQU9BLEVBQUUsT0FBdEIsY0FBd0MsT0FBT0EsRUFBRSxPQUF0QixZQUEwQjtBQUFDLGNBQUlXLElBQUVYLEVBQUUsS0FBSWdCLElBQUVoQixFQUFFO0FBQUksaUJBQUEsT0FBTyxlQUFlSCxHQUFFRSxHQUFFLEVBQUMsY0FBYSxNQUFHLEtBQUksV0FBVTtBQUFDLG1CQUFPWSxFQUFFLEtBQUssSUFBSTtVQUFDLEdBQUUsS0FBSSxTQUFTZCxHQUFFO0FBQUNlLGdCQUFFLEtBQUdmLEdBQUVtQixFQUFFLEtBQUssTUFBS25CLENBQUM7VUFBQyxFQUFDLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUVFLEdBQUUsRUFBQyxZQUFXQyxFQUFFLFdBQVUsQ0FBQyxHQUFRLEVBQUMsVUFBUyxXQUFVO0FBQUMsbUJBQU9ZO1VBQUMsR0FBRSxVQUFTLFNBQVNmLEdBQUU7QUFBQ2UsZ0JBQUUsS0FBR2Y7VUFBQyxHQUFFLGNBQWEsV0FBVTtBQUFDQSxjQUFFLGdCQUN4ZixNQUFLLE9BQU9BLEVBQUVFLENBQUM7VUFBQyxFQUFDO1FBQUM7TUFBQztBQUFDLGVBQVNrRixHQUFHcEYsR0FBRTtBQUFDQSxVQUFFLGtCQUFnQkEsRUFBRSxnQkFBY21GLEdBQUduRixDQUFDO01BQUU7QUFBQyxlQUFTcUYsR0FBR3JGLEdBQUU7QUFBQyxZQUFHLENBQUNBO0FBQUUsaUJBQU07QUFBRyxZQUFJRSxJQUFFRixFQUFFO0FBQWMsWUFBRyxDQUFDRTtBQUFFLGlCQUFNO0FBQUcsWUFBSUMsSUFBRUQsRUFBRSxTQUFTLEdBQU1hLElBQUU7QUFBRyxlQUFBZixNQUFJZSxJQUFFbUUsR0FBR2xGLENBQUMsSUFBRUEsRUFBRSxVQUFRLFNBQU8sVUFBUUEsRUFBRSxRQUFPQSxJQUFFZSxHQUFTZixNQUFJRyxLQUFHRCxFQUFFLFNBQVNGLENBQUMsR0FBRSxRQUFJO01BQUU7QUFBQyxlQUFTc0YsR0FBR3RGLEdBQUU7QUFBc0QsWUFBckRBLElBQUVBLE1BQWtCLE9BQU8sV0FBckIsTUFBOEIsV0FBUyxTQUF5QixPQUFPQSxJQUFyQjtBQUF1QixpQkFBTztBQUFLLFlBQUc7QUFBQyxpQkFBT0EsRUFBRSxpQkFBZUEsRUFBRTtRQUFJLFFBQVM7QUFBQyxpQkFBT0EsRUFBRTtRQUFJO01BQUM7QUFDcGEsZUFBU3VGLEdBQUd2RixHQUFFRSxHQUFFO0FBQUMsWUFBSUMsSUFBRUQsRUFBRTtBQUFRLGVBQU9rQixHQUFFLENBQUMsR0FBRWxCLEdBQUUsRUFBQyxnQkFBZSxRQUFPLGNBQWEsUUFBTyxPQUFNLFFBQU8sU0FBY0MsS0FBSUgsRUFBRSxjQUFjLGVBQWMsQ0FBQztNQUFDO0FBQUMsZUFBU3dGLEdBQUd4RixHQUFFRSxHQUFFO0FBQUMsWUFBSUMsSUFBUUQsRUFBRSxnQkFBUixPQUFxQixLQUFHQSxFQUFFLGNBQWFhLElBQVFiLEVBQUUsV0FBUixPQUFnQkEsRUFBRSxVQUFRQSxFQUFFO0FBQWVDLFlBQUU4RSxHQUFTL0UsRUFBRSxTQUFSLE9BQWNBLEVBQUUsUUFBTUMsQ0FBQyxHQUFFSCxFQUFFLGdCQUFjLEVBQUMsZ0JBQWVlLEdBQUUsY0FBYVosR0FBRSxZQUF3QkQsRUFBRSxTQUFmLGNBQStCQSxFQUFFLFNBQVosVUFBdUJBLEVBQUUsV0FBUixPQUFzQkEsRUFBRSxTQUFSLEtBQWE7TUFBQztBQUFDLGVBQVN1RixHQUFHekYsR0FBRUUsR0FBRTtBQUFDQSxZQUFFQSxFQUFFLFNBQWNBLEtBQU4sUUFBU29ELEdBQUd0RCxHQUFFLFdBQVVFLEdBQUUsS0FBRTtNQUFDO0FBQzlkLGVBQVN3RixHQUFHMUYsR0FBRUUsR0FBRTtBQUFDdUYsV0FBR3pGLEdBQUVFLENBQUM7QUFBRSxZQUFJQyxJQUFFOEUsR0FBRy9FLEVBQUUsS0FBSyxHQUFFYSxJQUFFYixFQUFFO0FBQUssWUFBU0MsS0FBTjtBQUFzQlksZ0JBQVgsWUFBcUJaLE1BQUosS0FBWUgsRUFBRSxVQUFQLE1BQWNBLEVBQUUsU0FBT0csT0FBRUgsRUFBRSxRQUFNLEtBQUdHLEtBQU9ILEVBQUUsVUFBUSxLQUFHRyxNQUFJSCxFQUFFLFFBQU0sS0FBR0c7aUJBQXNCWSxNQUFYLFlBQXdCQSxNQUFWLFNBQVk7QUFBQ2YsWUFBRSxnQkFBZ0IsT0FBTztBQUFFO1FBQU07QUFBQ0UsVUFBRSxlQUFlLE9BQU8sSUFBRXlGLEdBQUczRixHQUFFRSxFQUFFLE1BQUtDLENBQUMsSUFBRUQsRUFBRSxlQUFlLGNBQWMsS0FBR3lGLEdBQUczRixHQUFFRSxFQUFFLE1BQUsrRSxHQUFHL0UsRUFBRSxZQUFZLENBQUMsR0FBUUEsRUFBRSxXQUFSLFFBQXVCQSxFQUFFLGtCQUFSLFNBQXlCRixFQUFFLGlCQUFlLENBQUMsQ0FBQ0UsRUFBRTtNQUFlO0FBQ2xhLGVBQVMwRixHQUFHNUYsR0FBRUUsR0FBRUMsR0FBRTtBQUFDLFlBQUdELEVBQUUsZUFBZSxPQUFPLEtBQUdBLEVBQUUsZUFBZSxjQUFjLEdBQUU7QUFBQyxjQUFJYSxJQUFFYixFQUFFO0FBQUssY0FBRyxFQUFhYSxNQUFYLFlBQXdCQSxNQUFWLFdBQXNCYixFQUFFLFVBQVgsVUFBeUJBLEVBQUUsVUFBVDtBQUFnQjtBQUFPQSxjQUFFLEtBQUdGLEVBQUUsY0FBYyxjQUFhRyxLQUFHRCxNQUFJRixFQUFFLFVBQVFBLEVBQUUsUUFBTUUsSUFBR0YsRUFBRSxlQUFhRTtRQUFDO0FBQUNDLFlBQUVILEVBQUUsTUFBVUcsTUFBTCxPQUFTSCxFQUFFLE9BQUssS0FBSUEsRUFBRSxpQkFBZSxDQUFDLENBQUNBLEVBQUUsY0FBYyxnQkFBb0JHLE1BQUwsT0FBU0gsRUFBRSxPQUFLRztNQUFFO0FBQ3pWLGVBQVN3RixHQUFHM0YsR0FBRUUsR0FBRUMsR0FBRTtBQUFBLFNBQWVELE1BQVgsWUFBY29GLEdBQUd0RixFQUFFLGFBQWEsTUFBSUEsT0FBUUcsS0FBTixPQUFRSCxFQUFFLGVBQWEsS0FBR0EsRUFBRSxjQUFjLGVBQWFBLEVBQUUsaUJBQWUsS0FBR0csTUFBSUgsRUFBRSxlQUFhLEtBQUdHO01BQUU7QUFBQyxlQUFTMEYsR0FBRzdGLEdBQUU7QUFBQyxZQUFJRSxJQUFFO0FBQUcsZUFBQXFDLEdBQUcsU0FBUyxRQUFRdkMsR0FBRSxTQUFTQSxHQUFFO0FBQU9BLGVBQU4sU0FBVUUsS0FBR0Y7UUFBRSxDQUFDLEdBQVNFO01BQUM7QUFBQyxlQUFTNEYsR0FBRzlGLEdBQUVFLEdBQUU7QUFBQyxlQUFBRixJQUFFb0IsR0FBRSxFQUFDLFVBQVMsT0FBTSxHQUFFbEIsQ0FBQyxJQUFLQSxJQUFFMkYsR0FBRzNGLEVBQUUsUUFBUSxPQUFFRixFQUFFLFdBQVNFLElBQVNGO01BQUM7QUFDeFUsZUFBUytGLEdBQUcvRixHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQWEsWUFBWmYsSUFBRUEsRUFBRSxTQUFXRSxHQUFFO0FBQUNBLGNBQUUsQ0FBQztBQUFFLG1CQUFRWSxJQUFFLEdBQUVBLElBQUVYLEVBQUUsUUFBT1c7QUFBSVosY0FBRSxNQUFJQyxFQUFFVyxDQUFDLENBQUMsSUFBRTtBQUFHLGVBQUlYLElBQUUsR0FBRUEsSUFBRUgsRUFBRSxRQUFPRztBQUFJVyxnQkFBRVosRUFBRSxlQUFlLE1BQUlGLEVBQUVHLENBQUMsRUFBRSxLQUFLLEdBQUVILEVBQUVHLENBQUMsRUFBRSxhQUFXVyxNQUFJZCxFQUFFRyxDQUFDLEVBQUUsV0FBU1csSUFBR0EsS0FBR0MsTUFBSWYsRUFBRUcsQ0FBQyxFQUFFLGtCQUFnQjtRQUFHLE9BQUs7QUFBbUIsZUFBbEJBLElBQUUsS0FBRzhFLEdBQUc5RSxDQUFDLEdBQUVELElBQUUsTUFBU1ksSUFBRSxHQUFFQSxJQUFFZCxFQUFFLFFBQU9jLEtBQUk7QUFBQyxnQkFBR2QsRUFBRWMsQ0FBQyxFQUFFLFVBQVFYLEdBQUU7QUFBQ0gsZ0JBQUVjLENBQUMsRUFBRSxXQUFTLE1BQUdDLE1BQUlmLEVBQUVjLENBQUMsRUFBRSxrQkFBZ0I7QUFBSTtZQUFNO0FBQVFaLGtCQUFQLFFBQVVGLEVBQUVjLENBQUMsRUFBRSxhQUFXWixJQUFFRixFQUFFYyxDQUFDO1VBQUU7QUFBUVosZ0JBQVAsU0FBV0EsRUFBRSxXQUFTO1FBQUc7TUFBQztBQUN4WSxlQUFTOEYsR0FBR2hHLEdBQUVFLEdBQUU7QUFBQyxZQUFTQSxFQUFFLDJCQUFSO0FBQWdDLGdCQUFNLE1BQU1ILEVBQUUsRUFBRSxDQUFDO0FBQUUsZUFBT3FCLEdBQUUsQ0FBQyxHQUFFbEIsR0FBRSxFQUFDLE9BQU0sUUFBTyxjQUFhLFFBQU8sVUFBUyxLQUFHRixFQUFFLGNBQWMsYUFBWSxDQUFDO01BQUM7QUFBQyxlQUFTaUcsR0FBR2pHLEdBQUVFLEdBQUU7QUFBQyxZQUFJQyxJQUFFRCxFQUFFO0FBQU0sWUFBU0MsS0FBTixNQUFRO0FBQStCLGNBQTlCQSxJQUFFRCxFQUFFLFVBQVNBLElBQUVBLEVBQUUsY0FBc0JDLEtBQU4sTUFBUTtBQUFDLGdCQUFTRCxLQUFOO0FBQVEsb0JBQU0sTUFBTUgsRUFBRSxFQUFFLENBQUM7QUFBRSxnQkFBRyxNQUFNLFFBQVFJLENBQUMsR0FBRTtBQUFDLGtCQUFHLEVBQUUsS0FBR0EsRUFBRTtBQUFRLHNCQUFNLE1BQU1KLEVBQUUsRUFBRSxDQUFDO0FBQUVJLGtCQUFFQSxFQUFFLENBQUM7WUFBQztBQUFDRCxnQkFBRUM7VUFBQztBQUFPRCxlQUFOLFNBQVVBLElBQUUsS0FBSUMsSUFBRUQ7UUFBQztBQUFDRixVQUFFLGdCQUFjLEVBQUMsY0FBYWlGLEdBQUc5RSxDQUFDLEVBQUM7TUFBQztBQUNsWixlQUFTK0YsR0FBR2xHLEdBQUVFLEdBQUU7QUFBQyxZQUFJQyxJQUFFOEUsR0FBRy9FLEVBQUUsS0FBSyxHQUFFYSxJQUFFa0UsR0FBRy9FLEVBQUUsWUFBWTtBQUFRQyxhQUFOLFNBQVVBLElBQUUsS0FBR0EsR0FBRUEsTUFBSUgsRUFBRSxVQUFRQSxFQUFFLFFBQU1HLElBQVNELEVBQUUsZ0JBQVIsUUFBc0JGLEVBQUUsaUJBQWVHLE1BQUlILEVBQUUsZUFBYUcsS0FBVVksS0FBTixTQUFVZixFQUFFLGVBQWEsS0FBR2U7TUFBRTtBQUFDLGVBQVNvRixHQUFHbkcsR0FBRTtBQUFDLFlBQUlFLElBQUVGLEVBQUU7QUFBWUUsY0FBSUYsRUFBRSxjQUFjLGdCQUFtQkUsTUFBTCxNQUFlQSxNQUFQLFNBQVdGLEVBQUUsUUFBTUU7TUFBRTtBQUFDLFVBQUlrRyxLQUFHLEVBQUMsTUFBSyxnQ0FBK0IsUUFBTyxzQ0FBcUMsS0FBSSw2QkFBNEI7QUFDMVosZUFBU0MsR0FBR3JHLEdBQUU7QUFBQyxnQkFBT0EsR0FBRTtVQUFDLEtBQUs7QUFBTSxtQkFBTTtVQUE2QixLQUFLO0FBQU8sbUJBQU07VUFBcUM7QUFBUSxtQkFBTTtRQUE4QjtNQUFDO0FBQUMsZUFBU3NHLEdBQUd0RyxHQUFFRSxHQUFFO0FBQUMsZUFBYUYsS0FBTixRQUEwQ0EsTUFBakMsaUNBQW1DcUcsR0FBR25HLENBQUMsSUFBaUNGLE1BQS9CLGdDQUFvREUsTUFBbEIsa0JBQW9CLGlDQUErQkY7TUFBQztBQUM1VSxVQUFJdUcsSUFBR0MsS0FBRyxTQUFTeEcsR0FBRTtBQUFDLGVBQW9CLE9BQU8sUUFBckIsT0FBNEIsTUFBTSwwQkFBd0IsU0FBU0UsR0FBRUMsR0FBRVksR0FBRUQsR0FBRTtBQUFDLGdCQUFNLHdCQUF3QixXQUFVO0FBQUMsbUJBQU9kLEVBQUVFLEdBQUVDLEdBQUVZLEdBQUVELENBQUM7VUFBQyxDQUFDO1FBQUMsSUFBRWQ7TUFBQyxFQUFFLFNBQVNBLEdBQUVFLEdBQUU7QUFBQyxZQUFHRixFQUFFLGlCQUFlb0csR0FBRyxPQUFLLGVBQWNwRztBQUFFQSxZQUFFLFlBQVVFO2FBQU07QUFBMkYsZUFBMUZxRyxLQUFHQSxNQUFJLFNBQVMsY0FBYyxLQUFLLEdBQUVBLEdBQUcsWUFBVSxVQUFRckcsRUFBRSxRQUFRLEVBQUUsU0FBUyxJQUFFLFVBQWFBLElBQUVxRyxHQUFHLFlBQVd2RyxFQUFFO0FBQVlBLGNBQUUsWUFBWUEsRUFBRSxVQUFVO0FBQUUsaUJBQUtFLEVBQUU7QUFBWUYsY0FBRSxZQUFZRSxFQUFFLFVBQVU7UUFBQztNQUFDLENBQUM7QUFDOWIsZUFBU3VHLEdBQUd6RyxHQUFFRSxHQUFFO0FBQUMsWUFBR0EsR0FBRTtBQUFDLGNBQUlDLElBQUVILEVBQUU7QUFBVyxjQUFHRyxLQUFHQSxNQUFJSCxFQUFFLGFBQWVHLEVBQUUsYUFBTixHQUFlO0FBQUNBLGNBQUUsWUFBVUQ7QUFBRTtVQUFNO1FBQUM7QUFBQ0YsVUFBRSxjQUFZRTtNQUFDO0FBQ3RILFVBQUl3RyxLQUFHLEVBQUMseUJBQXdCLE1BQUcsbUJBQWtCLE1BQUcsa0JBQWlCLE1BQUcsa0JBQWlCLE1BQUcsU0FBUSxNQUFHLGNBQWEsTUFBRyxpQkFBZ0IsTUFBRyxhQUFZLE1BQUcsU0FBUSxNQUFHLE1BQUssTUFBRyxVQUFTLE1BQUcsY0FBYSxNQUFHLFlBQVcsTUFBRyxjQUFhLE1BQUcsV0FBVSxNQUFHLFVBQVMsTUFBRyxTQUFRLE1BQUcsWUFBVyxNQUFHLGFBQVksTUFBRyxjQUFhLE1BQUcsWUFBVyxNQUFHLGVBQWMsTUFBRyxnQkFBZSxNQUFHLGlCQUFnQixNQUFHLFlBQVcsTUFBRyxXQUFVLE1BQUcsWUFBVyxNQUFHLFNBQVEsTUFBRyxPQUFNLE1BQUcsU0FBUSxNQUFHLFNBQVEsTUFBRyxRQUFPLE1BQUcsUUFBTyxNQUFHLE1BQUssTUFBRyxhQUFZLE1BQzFmLGNBQWEsTUFBRyxhQUFZLE1BQUcsaUJBQWdCLE1BQUcsa0JBQWlCLE1BQUcsa0JBQWlCLE1BQUcsZUFBYyxNQUFHLGFBQVksS0FBRSxHQUFFQyxLQUFHLENBQUMsVUFBUyxNQUFLLE9BQU0sR0FBRztBQUFFLGFBQU8sS0FBS0QsRUFBRSxFQUFFLFFBQVEsU0FBUzFHLEdBQUU7QUFBQzJHLFdBQUcsUUFBUSxTQUFTekcsR0FBRTtBQUFDQSxjQUFFQSxJQUFFRixFQUFFLE9BQU8sQ0FBQyxFQUFFLFlBQVksSUFBRUEsRUFBRSxVQUFVLENBQUMsR0FBRTBHLEdBQUd4RyxDQUFDLElBQUV3RyxHQUFHMUcsQ0FBQztRQUFDLENBQUM7TUFBQyxDQUFDO0FBQUUsZUFBUzRHLEdBQUc1RyxHQUFFRSxHQUFFQyxHQUFFO0FBQUMsZUFBYUQsS0FBTixRQUFxQixPQUFPQSxLQUFuQixhQUEyQkEsTUFBTCxLQUFPLEtBQUdDLEtBQWMsT0FBT0QsS0FBbEIsWUFBeUJBLE1BQUosS0FBT3dHLEdBQUcsZUFBZTFHLENBQUMsS0FBRzBHLEdBQUcxRyxDQUFDLEtBQUcsS0FBR0UsR0FBRyxLQUFLLElBQUVBLElBQUU7TUFBSTtBQUNsYSxlQUFTMkcsR0FBRzdHLEdBQUVFLEdBQUU7QUFBQ0YsWUFBRUEsRUFBRTtBQUFNLGlCQUFRRyxLQUFLRDtBQUFFLGNBQUdBLEVBQUUsZUFBZUMsQ0FBQyxHQUFFO0FBQUMsZ0JBQUlZLElBQU1aLEVBQUUsUUFBUSxJQUFJLE1BQWxCLEdBQW9CVyxJQUFFOEYsR0FBR3pHLEdBQUVELEVBQUVDLENBQUMsR0FBRVksQ0FBQztBQUFZWixrQkFBVixZQUFjQSxJQUFFLGFBQVlZLElBQUVmLEVBQUUsWUFBWUcsR0FBRVcsQ0FBQyxJQUFFZCxFQUFFRyxDQUFDLElBQUVXO1VBQUM7TUFBQztBQUFDLFVBQUlnRyxLQUFHMUYsR0FBRSxFQUFDLFVBQVMsS0FBRSxHQUFFLEVBQUMsTUFBSyxNQUFHLE1BQUssTUFBRyxJQUFHLE1BQUcsS0FBSSxNQUFHLE9BQU0sTUFBRyxJQUFHLE1BQUcsS0FBSSxNQUFHLE9BQU0sTUFBRyxRQUFPLE1BQUcsTUFBSyxNQUFHLE1BQUssTUFBRyxPQUFNLE1BQUcsUUFBTyxNQUFHLE9BQU0sTUFBRyxLQUFJLEtBQUUsQ0FBQztBQUNyVCxlQUFTMkYsR0FBRy9HLEdBQUVFLEdBQUU7QUFBQyxZQUFHQSxHQUFFO0FBQUMsY0FBRzRHLEdBQUc5RyxDQUFDLE1BQVVFLEVBQUUsWUFBUixRQUF3QkEsRUFBRSwyQkFBUjtBQUFpQyxrQkFBTSxNQUFNSCxFQUFFLEtBQUlDLENBQUMsQ0FBQztBQUFFLGNBQVNFLEVBQUUsMkJBQVIsTUFBZ0M7QUFBQyxnQkFBU0EsRUFBRSxZQUFSO0FBQWlCLG9CQUFNLE1BQU1ILEVBQUUsRUFBRSxDQUFDO0FBQUUsZ0JBQUcsRUFBYSxPQUFPRyxFQUFFLDJCQUFwQixZQUE2QyxZQUFXQSxFQUFFO0FBQXlCLG9CQUFNLE1BQU1ILEVBQUUsRUFBRSxDQUFDO1VBQUU7QUFBQyxjQUFTRyxFQUFFLFNBQVIsUUFBMEIsT0FBT0EsRUFBRSxTQUFwQjtBQUEwQixrQkFBTSxNQUFNSCxFQUFFLEVBQUUsQ0FBQztRQUFFO01BQUM7QUFDbFcsZUFBU2lILEdBQUdoSCxHQUFFRSxHQUFFO0FBQUMsWUFBUUYsRUFBRSxRQUFRLEdBQUcsTUFBbEI7QUFBb0IsaUJBQWlCLE9BQU9FLEVBQUUsTUFBcEI7QUFBdUIsZ0JBQU9GLEdBQUU7VUFBQyxLQUFLO1VBQWlCLEtBQUs7VUFBZ0IsS0FBSztVQUFZLEtBQUs7VUFBZ0IsS0FBSztVQUFnQixLQUFLO1VBQW1CLEtBQUs7VUFBaUIsS0FBSztBQUFnQixtQkFBTTtVQUFHO0FBQVEsbUJBQU07UUFBRTtNQUFDO0FBQUMsZUFBU2lILEdBQUdqSCxHQUFFO0FBQUMsZUFBQUEsSUFBRUEsRUFBRSxVQUFRQSxFQUFFLGNBQVksUUFBT0EsRUFBRSw0QkFBMEJBLElBQUVBLEVBQUUsMEJBQW9DQSxFQUFFLGFBQU4sSUFBZUEsRUFBRSxhQUFXQTtNQUFDO0FBQUMsVUFBSWtILEtBQUcsTUFBS0MsS0FBRyxNQUFLQyxLQUFHO0FBQ3hiLGVBQVNDLEdBQUdySCxHQUFFO0FBQUMsWUFBR0EsSUFBRXNILEdBQUd0SCxDQUFDLEdBQUU7QUFBQyxjQUFnQixPQUFPa0gsTUFBcEI7QUFBdUIsa0JBQU0sTUFBTW5ILEVBQUUsR0FBRyxDQUFDO0FBQUUsY0FBSUcsSUFBRUYsRUFBRTtBQUFVRSxnQkFBSUEsSUFBRXFILEdBQUdySCxDQUFDLEdBQUVnSCxHQUFHbEgsRUFBRSxXQUFVQSxFQUFFLE1BQUtFLENBQUM7UUFBRTtNQUFDO0FBQUMsZUFBU3NILEdBQUd4SCxHQUFFO0FBQUNtSCxhQUFHQyxLQUFHQSxHQUFHLEtBQUtwSCxDQUFDLElBQUVvSCxLQUFHLENBQUNwSCxDQUFDLElBQUVtSCxLQUFHbkg7TUFBQztBQUFDLGVBQVN5SCxLQUFJO0FBQUMsWUFBR04sSUFBRztBQUFDLGNBQUluSCxJQUFFbUgsSUFBR2pILElBQUVrSDtBQUFvQixjQUFqQkEsS0FBR0QsS0FBRyxNQUFLRSxHQUFHckgsQ0FBQyxHQUFLRTtBQUFFLGlCQUFJRixJQUFFLEdBQUVBLElBQUVFLEVBQUUsUUFBT0Y7QUFBSXFILGlCQUFHbkgsRUFBRUYsQ0FBQyxDQUFDO1FBQUM7TUFBQztBQUFDLGVBQVMwSCxHQUFHMUgsR0FBRUUsR0FBRTtBQUFDLGVBQU9GLEVBQUVFLENBQUM7TUFBQztBQUFDLGVBQVN5SCxHQUFHM0gsR0FBRUUsR0FBRUMsR0FBRVksR0FBRUQsR0FBRTtBQUFDLGVBQU9kLEVBQUVFLEdBQUVDLEdBQUVZLEdBQUVELENBQUM7TUFBQztBQUFDLGVBQVM4RyxLQUFJO01BQUM7QUFBQyxVQUFJQyxLQUFHSCxJQUFHSSxLQUFHLE9BQUdDLEtBQUc7QUFBRyxlQUFTQyxLQUFJO0FBQUEsU0FBV2IsT0FBUCxRQUFrQkMsT0FBUCxVQUFVUSxHQUFHLEdBQUVILEdBQUc7TUFBQztBQUNsYSxlQUFTUSxHQUFHakksR0FBRUUsR0FBRUMsR0FBRTtBQUFDLFlBQUc0SDtBQUFHLGlCQUFPL0gsRUFBRUUsR0FBRUMsQ0FBQztBQUFFNEgsYUFBRztBQUFHLFlBQUc7QUFBQyxpQkFBT0YsR0FBRzdILEdBQUVFLEdBQUVDLENBQUM7UUFBQyxVQUFBO0FBQVM0SCxlQUFHLE9BQUdDLEdBQUc7UUFBQztNQUFDO0FBQ3JGLGVBQVNFLEdBQUdsSSxHQUFFRSxHQUFFO0FBQUMsWUFBSUMsSUFBRUgsRUFBRTtBQUFVLFlBQVVHLE1BQVA7QUFBUyxpQkFBTztBQUFLLFlBQUlZLElBQUV3RyxHQUFHcEgsQ0FBQztBQUFFLFlBQVVZLE1BQVA7QUFBUyxpQkFBTztBQUFLWixZQUFFWSxFQUFFYixDQUFDO0FBQUVGO0FBQUUsa0JBQU9FLEdBQUU7WUFBQyxLQUFLO1lBQVUsS0FBSztZQUFpQixLQUFLO1lBQWdCLEtBQUs7WUFBdUIsS0FBSztZQUFjLEtBQUs7WUFBcUIsS0FBSztZQUFjLEtBQUs7WUFBcUIsS0FBSztZQUFZLEtBQUs7WUFBbUIsS0FBSztBQUFBLGVBQWdCYSxJQUFFLENBQUNBLEVBQUUsY0FBWWYsSUFBRUEsRUFBRSxNQUFLZSxJQUFFLEVBQWFmLE1BQVgsWUFBd0JBLE1BQVYsV0FBd0JBLE1BQVgsWUFBMkJBLE1BQWIsY0FBaUJBLElBQUUsQ0FBQ2U7QUFBRSxvQkFBTWY7WUFBRTtBQUFRQSxrQkFBRTtVQUFFO0FBQUMsWUFBR0E7QUFBRSxpQkFBTztBQUFLLFlBQUdHLEtBQ3RlLE9BQU9BLEtBRGtlO0FBQ2hlLGdCQUFNLE1BQU1KLEVBQUUsS0FBSUcsR0FBRSxPQUFPQyxDQUFDLENBQUM7QUFBRSxlQUFPQTtNQUFDO0FBQUMsVUFBSWdJLEtBQUc7QUFBRyxVQUFHdkY7QUFBRyxZQUFHO0FBQUt3RixlQUFHLENBQUMsR0FBRSxPQUFPLGVBQWVBLElBQUcsV0FBVSxFQUFDLEtBQUksV0FBVTtBQUFDRCxpQkFBRztVQUFFLEVBQUMsQ0FBQyxHQUFFLE9BQU8saUJBQWlCLFFBQU9DLElBQUdBLEVBQUUsR0FBRSxPQUFPLG9CQUFvQixRQUFPQSxJQUFHQSxFQUFFO1FBQUMsUUFBUztBQUFDRCxlQUFHO1FBQUU7QUFBL0osVUFBQUM7QUFBZ0ssZUFBU0MsR0FBR3JJLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVELEdBQUVLLEdBQUVELEdBQUVELEdBQUVELEdBQUU7QUFBQyxZQUFJLElBQUUsTUFBTSxVQUFVLE1BQU0sS0FBSyxXQUFVLENBQUM7QUFBRSxZQUFHO0FBQUNkLFlBQUUsTUFBTUMsR0FBRSxDQUFDO1FBQUMsU0FBT3hCLEdBQUU7QUFBQyxlQUFLLFFBQVFBLENBQUM7UUFBQztNQUFDO0FBQUMsVUFBSTJKLEtBQUcsT0FBR0MsS0FBRyxNQUFLQyxLQUFHLE9BQUdDLEtBQUcsTUFBS0MsS0FBRyxFQUFDLFNBQVEsU0FBUzFJLEdBQUU7QUFBQ3NJLGFBQUcsTUFBR0MsS0FBR3ZJO01BQUMsRUFBQztBQUFFLGVBQVMySSxHQUFHM0ksR0FBRUUsR0FBRUMsR0FBRVksR0FBRUQsR0FBRUssR0FBRUQsR0FBRUQsR0FBRUQsR0FBRTtBQUFDc0gsYUFBRyxPQUFHQyxLQUFHLE1BQUtGLEdBQUcsTUFBTUssSUFBRyxTQUFTO01BQUM7QUFDemUsZUFBU0UsR0FBRzVJLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVELEdBQUVLLEdBQUVELEdBQUVELEdBQUVELEdBQUU7QUFBMEIsWUFBekIySCxHQUFHLE1BQU0sTUFBSyxTQUFTLEdBQUtMLElBQUc7QUFBQyxjQUFHQSxJQUFHO0FBQUMsZ0JBQUksSUFBRUM7QUFBR0QsaUJBQUcsT0FBR0MsS0FBRztVQUFJO0FBQU0sa0JBQU0sTUFBTXhJLEVBQUUsR0FBRyxDQUFDO0FBQUV5SSxpQkFBS0EsS0FBRyxNQUFHQyxLQUFHO1FBQUU7TUFBQztBQUFDLGVBQVNJLEdBQUc3SSxHQUFFO0FBQUMsWUFBSUUsSUFBRUYsR0FBRUcsSUFBRUg7QUFBRSxZQUFHQSxFQUFFO0FBQVUsaUJBQUtFLEVBQUU7QUFBUUEsZ0JBQUVBLEVBQUU7YUFBVztBQUFDRixjQUFFRTtBQUFFO0FBQUdBLGdCQUFFRixHQUFPRSxFQUFFLFFBQU0sU0FBUUMsSUFBRUQsRUFBRSxTQUFRRixJQUFFRSxFQUFFO2lCQUFhRjtRQUFFO0FBQUMsZUFBV0UsRUFBRSxRQUFOLElBQVVDLElBQUU7TUFBSTtBQUFDLGVBQVMySSxHQUFHOUksR0FBRTtBQUFDLFlBQVFBLEVBQUUsUUFBUCxJQUFXO0FBQUMsY0FBSUUsSUFBRUYsRUFBRTtBQUFzRSxjQUFqREUsTUFBUCxTQUFXRixJQUFFQSxFQUFFLFdBQWlCQSxNQUFQLFNBQVdFLElBQUVGLEVBQUUsaUJBQTBCRSxNQUFQO0FBQVMsbUJBQU9BLEVBQUU7UUFBVTtBQUFDLGVBQU87TUFBSTtBQUFDLGVBQVM2SSxHQUFHL0ksR0FBRTtBQUFDLFlBQUc2SSxHQUFHN0ksQ0FBQyxNQUFJQTtBQUFFLGdCQUFNLE1BQU1ELEVBQUUsR0FBRyxDQUFDO01BQUU7QUFDamYsZUFBU2lKLEdBQUdoSixHQUFFO0FBQUMsWUFBSUUsSUFBRUYsRUFBRTtBQUFVLFlBQUcsQ0FBQ0UsR0FBRTtBQUFTLGNBQVJBLElBQUUySSxHQUFHN0ksQ0FBQyxHQUFZRSxNQUFQO0FBQVMsa0JBQU0sTUFBTUgsRUFBRSxHQUFHLENBQUM7QUFBRSxpQkFBT0csTUFBSUYsSUFBRSxPQUFLQTtRQUFDO0FBQUMsaUJBQVFHLElBQUVILEdBQUVlLElBQUViLE9BQUk7QUFBQyxjQUFJWSxJQUFFWCxFQUFFO0FBQU8sY0FBVVcsTUFBUDtBQUFTO0FBQU0sY0FBSUssSUFBRUwsRUFBRTtBQUFVLGNBQVVLLE1BQVAsTUFBUztBQUFZLGdCQUFYSixJQUFFRCxFQUFFLFFBQWlCQyxNQUFQLE1BQVM7QUFBQ1osa0JBQUVZO0FBQUU7WUFBUTtBQUFDO1VBQUs7QUFBQyxjQUFHRCxFQUFFLFVBQVFLLEVBQUUsT0FBTTtBQUFDLGlCQUFJQSxJQUFFTCxFQUFFLE9BQU1LLEtBQUc7QUFBQyxrQkFBR0EsTUFBSWhCO0FBQUUsdUJBQU80SSxHQUFHakksQ0FBQyxHQUFFZDtBQUFFLGtCQUFHbUIsTUFBSUo7QUFBRSx1QkFBT2dJLEdBQUdqSSxDQUFDLEdBQUVaO0FBQUVpQixrQkFBRUEsRUFBRTtZQUFPO0FBQUMsa0JBQU0sTUFBTXBCLEVBQUUsR0FBRyxDQUFDO1VBQUU7QUFBQyxjQUFHSSxFQUFFLFdBQVNZLEVBQUU7QUFBT1osZ0JBQUVXLEdBQUVDLElBQUVJO2VBQU07QUFBQyxxQkFBUUQsSUFBRSxPQUFHRCxJQUFFSCxFQUFFLE9BQU1HLEtBQUc7QUFBQyxrQkFBR0EsTUFBSWQsR0FBRTtBQUFDZSxvQkFBRSxNQUFHZixJQUFFVyxHQUFFQyxJQUFFSTtBQUFFO2NBQUs7QUFBQyxrQkFBR0YsTUFBSUYsR0FBRTtBQUFDRyxvQkFBRSxNQUFHSCxJQUFFRCxHQUFFWCxJQUFFZ0I7QUFBRTtjQUFLO0FBQUNGLGtCQUFFQSxFQUFFO1lBQU87QUFBQyxnQkFBRyxDQUFDQyxHQUFFO0FBQUMsbUJBQUlELElBQUVFLEVBQUUsT0FBTUYsS0FBRztBQUFDLG9CQUFHQSxNQUM1ZmQsR0FBRTtBQUFDZSxzQkFBRSxNQUFHZixJQUFFZ0IsR0FBRUosSUFBRUQ7QUFBRTtnQkFBSztBQUFDLG9CQUFHRyxNQUFJRixHQUFFO0FBQUNHLHNCQUFFLE1BQUdILElBQUVJLEdBQUVoQixJQUFFVztBQUFFO2dCQUFLO0FBQUNHLG9CQUFFQSxFQUFFO2NBQU87QUFBQyxrQkFBRyxDQUFDQztBQUFFLHNCQUFNLE1BQU1uQixFQUFFLEdBQUcsQ0FBQztZQUFFO1VBQUM7QUFBQyxjQUFHSSxFQUFFLGNBQVlZO0FBQUUsa0JBQU0sTUFBTWhCLEVBQUUsR0FBRyxDQUFDO1FBQUU7QUFBQyxZQUFPSSxFQUFFLFFBQU47QUFBVSxnQkFBTSxNQUFNSixFQUFFLEdBQUcsQ0FBQztBQUFFLGVBQU9JLEVBQUUsVUFBVSxZQUFVQSxJQUFFSCxJQUFFRTtNQUFDO0FBQUMsZUFBUytJLEdBQUdqSixHQUFFO0FBQVMsWUFBUkEsSUFBRWdKLEdBQUdoSixDQUFDLEdBQUssQ0FBQ0E7QUFBRSxpQkFBTztBQUFLLGlCQUFRRSxJQUFFRixPQUFJO0FBQUMsY0FBT0UsRUFBRSxRQUFOLEtBQWVBLEVBQUUsUUFBTjtBQUFVLG1CQUFPQTtBQUFFLGNBQUdBLEVBQUU7QUFBTUEsY0FBRSxNQUFNLFNBQU9BLEdBQUVBLElBQUVBLEVBQUU7ZUFBVTtBQUFDLGdCQUFHQSxNQUFJRjtBQUFFO0FBQU0sbUJBQUssQ0FBQ0UsRUFBRSxXQUFTO0FBQUMsa0JBQUcsQ0FBQ0EsRUFBRSxVQUFRQSxFQUFFLFdBQVNGO0FBQUUsdUJBQU87QUFBS0Usa0JBQUVBLEVBQUU7WUFBTTtBQUFDQSxjQUFFLFFBQVEsU0FBT0EsRUFBRSxRQUFPQSxJQUFFQSxFQUFFO1VBQU87UUFBQztBQUFDLGVBQU87TUFBSTtBQUNoZCxlQUFTZ0osR0FBR2xKLEdBQUVFLEdBQUU7QUFBQyxpQkFBUUMsSUFBRUgsRUFBRSxXQUFpQkUsTUFBUCxRQUFVO0FBQUMsY0FBR0EsTUFBSUYsS0FBR0UsTUFBSUM7QUFBRSxtQkFBTTtBQUFHRCxjQUFFQSxFQUFFO1FBQU07QUFBQyxlQUFNO01BQUU7QUFBQyxVQUFJaUosSUFBR0MsSUFBR0MsSUFBR0MsSUFBR0MsS0FBRyxPQUFHQyxLQUFHLENBQUMsR0FBRUMsS0FBRyxNQUFLQyxLQUFHLE1BQUtDLEtBQUcsTUFBS0MsS0FBRyxvQkFBSSxPQUFJQyxLQUFHLG9CQUFJLE9BQUlDLEtBQUcsQ0FBQyxHQUFFQyxLQUFHLDZQQUE2UCxNQUFNLEdBQUc7QUFDeGIsZUFBU0MsR0FBR2hLLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVELEdBQUU7QUFBQyxlQUFNLEVBQUMsV0FBVWQsR0FBRSxjQUFhRSxHQUFFLGtCQUFpQkMsSUFBRSxJQUFHLGFBQVlXLEdBQUUsa0JBQWlCLENBQUNDLENBQUMsRUFBQztNQUFDO0FBQUMsZUFBU2tKLEdBQUdqSyxHQUFFRSxHQUFFO0FBQUMsZ0JBQU9GLEdBQUU7VUFBQyxLQUFLO1VBQVUsS0FBSztBQUFXeUosaUJBQUc7QUFBSztVQUFNLEtBQUs7VUFBWSxLQUFLO0FBQVlDLGlCQUFHO0FBQUs7VUFBTSxLQUFLO1VBQVksS0FBSztBQUFXQyxpQkFBRztBQUFLO1VBQU0sS0FBSztVQUFjLEtBQUs7QUFBYUMsZUFBRyxPQUFPMUosRUFBRSxTQUFTO0FBQUU7VUFBTSxLQUFLO1VBQW9CLEtBQUs7QUFBcUIySixlQUFHLE9BQU8zSixFQUFFLFNBQVM7UUFBQztNQUFDO0FBQ3RhLGVBQVNnSyxHQUFHbEssR0FBRUUsR0FBRUMsR0FBRVksR0FBRUQsR0FBRUssR0FBRTtBQUFDLGVBQVVuQixNQUFQLFFBQVVBLEVBQUUsZ0JBQWNtQixLQUFTbkIsSUFBRWdLLEdBQUc5SixHQUFFQyxHQUFFWSxHQUFFRCxHQUFFSyxDQUFDLEdBQVNqQixNQUFQLFNBQVdBLElBQUVvSCxHQUFHcEgsQ0FBQyxHQUFTQSxNQUFQLFFBQVVrSixHQUFHbEosQ0FBQyxJQUFHRixNQUFFQSxFQUFFLG9CQUFrQmUsR0FBRWIsSUFBRUYsRUFBRSxrQkFBd0JjLE1BQVAsUUFBZVosRUFBRSxRQUFRWSxDQUFDLE1BQWhCLE1BQW1CWixFQUFFLEtBQUtZLENBQUMsR0FBU2Q7TUFBQztBQUMvTSxlQUFTbUssR0FBR25LLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVELEdBQUU7QUFBQyxnQkFBT1osR0FBRTtVQUFDLEtBQUs7QUFBVSxtQkFBT3VKLEtBQUdTLEdBQUdULElBQUd6SixHQUFFRSxHQUFFQyxHQUFFWSxHQUFFRCxDQUFDLEdBQUU7VUFBRyxLQUFLO0FBQVksbUJBQU80SSxLQUFHUSxHQUFHUixJQUFHMUosR0FBRUUsR0FBRUMsR0FBRVksR0FBRUQsQ0FBQyxHQUFFO1VBQUcsS0FBSztBQUFZLG1CQUFPNkksS0FBR08sR0FBR1AsSUFBRzNKLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVELENBQUMsR0FBRTtVQUFHLEtBQUs7QUFBYyxnQkFBSUssSUFBRUwsRUFBRTtBQUFVLG1CQUFBOEksR0FBRyxJQUFJekksR0FBRStJLEdBQUdOLEdBQUcsSUFBSXpJLENBQUMsS0FBRyxNQUFLbkIsR0FBRUUsR0FBRUMsR0FBRVksR0FBRUQsQ0FBQyxDQUFDLEdBQVE7VUFBRyxLQUFLO0FBQW9CLG1CQUFPSyxJQUFFTCxFQUFFLFdBQVUrSSxHQUFHLElBQUkxSSxHQUFFK0ksR0FBR0wsR0FBRyxJQUFJMUksQ0FBQyxLQUFHLE1BQUtuQixHQUFFRSxHQUFFQyxHQUFFWSxHQUFFRCxDQUFDLENBQUMsR0FBRTtRQUFFO0FBQUMsZUFBTTtNQUFFO0FBQ25XLGVBQVNzSixHQUFHcEssR0FBRTtBQUFDLFlBQUlFLElBQUVtSyxHQUFHckssRUFBRSxNQUFNO0FBQUUsWUFBVUUsTUFBUCxNQUFTO0FBQUMsY0FBSUMsSUFBRTBJLEdBQUczSSxDQUFDO0FBQUUsY0FBVUMsTUFBUCxNQUFBO0FBQVMsZ0JBQUdELElBQUVDLEVBQUUsS0FBU0QsTUFBTCxJQUFBO0FBQVEsa0JBQUdBLElBQUU0SSxHQUFHM0ksQ0FBQyxHQUFTRCxNQUFQLE1BQVM7QUFBQ0Ysa0JBQUUsWUFBVUUsR0FBRW9KLEdBQUd0SixFQUFFLGNBQWEsV0FBVTtBQUFDUCxxQkFBRSx5QkFBeUJPLEVBQUUsVUFBUyxXQUFVO0FBQUNxSix1QkFBR2xKLENBQUM7a0JBQUMsQ0FBQztnQkFBQyxDQUFDO0FBQUU7Y0FBTTtZQUFBLFdBQWNELE1BQUosS0FBT0MsRUFBRSxVQUFVLFNBQVE7QUFBQ0gsZ0JBQUUsWUFBY0csRUFBRSxRQUFOLElBQVVBLEVBQUUsVUFBVSxnQkFBYztBQUFLO1lBQU07VUFBQTtRQUFDO0FBQUNILFVBQUUsWUFBVTtNQUFJO0FBQzlVLGVBQVNzSyxHQUFHdEssR0FBRTtBQUFDLFlBQVVBLEVBQUUsY0FBVDtBQUFtQixpQkFBTTtBQUFHLGlCQUFRRSxJQUFFRixFQUFFLGtCQUFpQixJQUFFRSxFQUFFLFVBQVE7QUFBQyxjQUFJQyxJQUFFb0ssR0FBR3ZLLEVBQUUsY0FBYUEsRUFBRSxrQkFBaUJFLEVBQUUsQ0FBQyxHQUFFRixFQUFFLFdBQVc7QUFBRSxjQUFVRyxNQUFQO0FBQVMsbUJBQU9ELElBQUVvSCxHQUFHbkgsQ0FBQyxHQUFTRCxNQUFQLFFBQVVrSixHQUFHbEosQ0FBQyxHQUFFRixFQUFFLFlBQVVHLEdBQUU7QUFBR0QsWUFBRSxNQUFNO1FBQUM7QUFBQyxlQUFNO01BQUU7QUFBQyxlQUFTc0ssR0FBR3hLLEdBQUVFLEdBQUVDLEdBQUU7QUFBQ21LLFdBQUd0SyxDQUFDLEtBQUdHLEVBQUUsT0FBT0QsQ0FBQztNQUFDO0FBQzNRLGVBQVN1SyxLQUFJO0FBQUMsYUFBSWxCLEtBQUcsT0FBRyxJQUFFQyxHQUFHLFVBQVE7QUFBQyxjQUFJeEosSUFBRXdKLEdBQUcsQ0FBQztBQUFFLGNBQVV4SixFQUFFLGNBQVQsTUFBbUI7QUFBQ0EsZ0JBQUVzSCxHQUFHdEgsRUFBRSxTQUFTLEdBQVNBLE1BQVAsUUFBVW1KLEdBQUduSixDQUFDO0FBQUU7VUFBSztBQUFDLG1CQUFRRSxJQUFFRixFQUFFLGtCQUFpQixJQUFFRSxFQUFFLFVBQVE7QUFBQyxnQkFBSUMsSUFBRW9LLEdBQUd2SyxFQUFFLGNBQWFBLEVBQUUsa0JBQWlCRSxFQUFFLENBQUMsR0FBRUYsRUFBRSxXQUFXO0FBQUUsZ0JBQVVHLE1BQVAsTUFBUztBQUFDSCxnQkFBRSxZQUFVRztBQUFFO1lBQUs7QUFBQ0QsY0FBRSxNQUFNO1VBQUM7QUFBUUYsWUFBRSxjQUFULFFBQW9Cd0osR0FBRyxNQUFNO1FBQUM7QUFBUUMsZUFBUCxRQUFXYSxHQUFHYixFQUFFLE1BQUlBLEtBQUcsT0FBYUMsT0FBUCxRQUFXWSxHQUFHWixFQUFFLE1BQUlBLEtBQUcsT0FBYUMsT0FBUCxRQUFXVyxHQUFHWCxFQUFFLE1BQUlBLEtBQUcsT0FBTUMsR0FBRyxRQUFRWSxFQUFFLEdBQUVYLEdBQUcsUUFBUVcsRUFBRTtNQUFDO0FBQ3haLGVBQVNFLEdBQUcxSyxHQUFFRSxHQUFFO0FBQUNGLFVBQUUsY0FBWUUsTUFBSUYsRUFBRSxZQUFVLE1BQUt1SixPQUFLQSxLQUFHLE1BQUc5SixHQUFFLDBCQUEwQkEsR0FBRSx5QkFBd0JnTCxFQUFFO01BQUc7QUFDMUgsZUFBU0UsR0FBRzNLLEdBQUU7QUFBQyxpQkFBU0UsRUFBRUEsR0FBRTtBQUFDLGlCQUFPd0ssR0FBR3hLLEdBQUVGLENBQUM7UUFBQztBQUFDLFlBQUcsSUFBRXdKLEdBQUcsUUFBTztBQUFDa0IsYUFBR2xCLEdBQUcsQ0FBQyxHQUFFeEosQ0FBQztBQUFFLG1CQUFRRyxJQUFFLEdBQUVBLElBQUVxSixHQUFHLFFBQU9ySixLQUFJO0FBQUMsZ0JBQUlZLElBQUV5SSxHQUFHckosQ0FBQztBQUFFWSxjQUFFLGNBQVlmLE1BQUllLEVBQUUsWUFBVTtVQUFLO1FBQUM7QUFBeUYsYUFBakYwSSxPQUFQLFFBQVdpQixHQUFHakIsSUFBR3pKLENBQUMsR0FBUzBKLE9BQVAsUUFBV2dCLEdBQUdoQixJQUFHMUosQ0FBQyxHQUFTMkosT0FBUCxRQUFXZSxHQUFHZixJQUFHM0osQ0FBQyxHQUFFNEosR0FBRyxRQUFRMUosQ0FBQyxHQUFFMkosR0FBRyxRQUFRM0osQ0FBQyxHQUFNQyxJQUFFLEdBQUVBLElBQUUySixHQUFHLFFBQU8zSjtBQUFJWSxjQUFFK0ksR0FBRzNKLENBQUMsR0FBRVksRUFBRSxjQUFZZixNQUFJZSxFQUFFLFlBQVU7QUFBTSxlQUFLLElBQUUrSSxHQUFHLFdBQVMzSixJQUFFMkosR0FBRyxDQUFDLEdBQVMzSixFQUFFLGNBQVQ7QUFBcUJpSyxhQUFHakssQ0FBQyxHQUFTQSxFQUFFLGNBQVQsUUFBb0IySixHQUFHLE1BQU07TUFBQztBQUN0WSxlQUFTYyxHQUFHNUssR0FBRUUsR0FBRTtBQUFDLFlBQUlDLElBQUUsQ0FBQztBQUFFLGVBQUFBLEVBQUVILEVBQUUsWUFBWSxDQUFDLElBQUVFLEVBQUUsWUFBWSxHQUFFQyxFQUFFLFdBQVNILENBQUMsSUFBRSxXQUFTRSxHQUFFQyxFQUFFLFFBQU1ILENBQUMsSUFBRSxRQUFNRSxHQUFTQztNQUFDO0FBQUMsVUFBSTBLLEtBQUcsRUFBQyxjQUFhRCxHQUFHLGFBQVksY0FBYyxHQUFFLG9CQUFtQkEsR0FBRyxhQUFZLG9CQUFvQixHQUFFLGdCQUFlQSxHQUFHLGFBQVksZ0JBQWdCLEdBQUUsZUFBY0EsR0FBRyxjQUFhLGVBQWUsRUFBQyxHQUFFRSxLQUFHLENBQUMsR0FBRUMsS0FBRyxDQUFDO0FBQ3hVbkksYUFBS21JLEtBQUcsU0FBUyxjQUFjLEtBQUssRUFBRSxPQUFNLG9CQUFtQixXQUFTLE9BQU9GLEdBQUcsYUFBYSxXQUFVLE9BQU9BLEdBQUcsbUJBQW1CLFdBQVUsT0FBT0EsR0FBRyxlQUFlLFlBQVcscUJBQW9CLFVBQVEsT0FBT0EsR0FBRyxjQUFjO0FBQVksZUFBU0csR0FBR2hMLEdBQUU7QUFBQyxZQUFHOEssR0FBRzlLLENBQUM7QUFBRSxpQkFBTzhLLEdBQUc5SyxDQUFDO0FBQUUsWUFBRyxDQUFDNkssR0FBRzdLLENBQUM7QUFBRSxpQkFBT0E7QUFBRSxZQUFJRSxJQUFFMkssR0FBRzdLLENBQUMsR0FBRUc7QUFBRSxhQUFJQSxLQUFLRDtBQUFFLGNBQUdBLEVBQUUsZUFBZUMsQ0FBQyxLQUFHQSxLQUFLNEs7QUFBRyxtQkFBT0QsR0FBRzlLLENBQUMsSUFBRUUsRUFBRUMsQ0FBQztBQUFFLGVBQU9IO01BQUM7QUFDL1gsVUFBSWlMLEtBQUdELEdBQUcsY0FBYyxHQUFFRSxLQUFHRixHQUFHLG9CQUFvQixHQUFFRyxLQUFHSCxHQUFHLGdCQUFnQixHQUFFSSxLQUFHSixHQUFHLGVBQWUsR0FBRUssS0FBRyxvQkFBSSxPQUFJQyxLQUFHLG9CQUFJLE9BQUlDLEtBQUcsQ0FBQyxTQUFRLFNBQVFOLElBQUcsZ0JBQWVDLElBQUcsc0JBQXFCQyxJQUFHLGtCQUFpQixXQUFVLFdBQVUsa0JBQWlCLGtCQUFpQixrQkFBaUIsa0JBQWlCLFdBQVUsV0FBVSxhQUFZLGFBQVksU0FBUSxTQUFRLFNBQVEsU0FBUSxxQkFBb0IscUJBQW9CLFFBQU8sUUFBTyxjQUFhLGNBQWEsa0JBQWlCLGtCQUFpQixhQUFZLGFBQy9lLHNCQUFxQixzQkFBcUIsV0FBVSxXQUFVLFlBQVcsWUFBVyxXQUFVLFdBQVUsV0FBVSxXQUFVLFdBQVUsV0FBVSxjQUFhLGNBQWFDLElBQUcsaUJBQWdCLFdBQVUsU0FBUztBQUFFLGVBQVNJLEdBQUd4TCxHQUFFRSxHQUFFO0FBQUMsaUJBQVFDLElBQUUsR0FBRUEsSUFBRUgsRUFBRSxRQUFPRyxLQUFHLEdBQUU7QUFBQyxjQUFJWSxJQUFFZixFQUFFRyxDQUFDLEdBQUVXLElBQUVkLEVBQUVHLElBQUUsQ0FBQztBQUFFVyxjQUFFLFFBQU1BLEVBQUUsQ0FBQyxFQUFFLFlBQVksSUFBRUEsRUFBRSxNQUFNLENBQUMsSUFBR3dLLEdBQUcsSUFBSXZLLEdBQUViLENBQUMsR0FBRW1MLEdBQUcsSUFBSXRLLEdBQUVELENBQUMsR0FBRTRCLEdBQUc1QixHQUFFLENBQUNDLENBQUMsQ0FBQztRQUFDO01BQUM7QUFBQyxVQUFJMEssS0FBR2hNLEdBQUU7QUFBYWdNLFNBQUc7QUFBRSxVQUFJaEwsS0FBRTtBQUMvWCxlQUFTaUwsR0FBRzFMLEdBQUU7QUFBQyxZQUFRLElBQUVBO0FBQUcsaUJBQU9TLEtBQUUsSUFBRztBQUFFLFlBQVEsSUFBRVQ7QUFBRyxpQkFBT1MsS0FBRSxJQUFHO0FBQUUsWUFBUSxJQUFFVDtBQUFHLGlCQUFPUyxLQUFFLElBQUc7QUFBRSxZQUFJUCxJQUFFLEtBQUdGO0FBQUUsZUFBT0UsTUFBSixLQUFhTyxLQUFFLElBQUdQLEtBQVVGLElBQUUsTUFBV1MsS0FBRSxJQUFHLE9BQUdQLElBQUUsTUFBSUYsR0FBU0UsTUFBSixLQUFhTyxLQUFFLElBQUdQLEtBQVVGLElBQUUsT0FBWVMsS0FBRSxHQUFFLFFBQUlQLElBQUUsT0FBS0YsR0FBU0UsTUFBSixLQUFhTyxLQUFFLEdBQUVQLEtBQVVGLElBQUUsUUFBYVMsS0FBRSxHQUFFLFNBQUtQLElBQUUsVUFBUUYsR0FBU0UsTUFBSixLQUFhTyxLQUFFLEdBQUVQLE1BQUVBLElBQUUsV0FBU0YsR0FBU0UsTUFBSixLQUFhTyxLQUFFLEdBQUVQLEtBQUtGLElBQUUsWUFBZ0JTLEtBQUUsR0FBRSxZQUFpQlQsSUFBRSxhQUFrQlMsS0FBRSxHQUFFLGNBQVVQLElBQUUsWUFBVUYsR0FBU0UsTUFBSixLQUFhTyxLQUFFLEdBQUVQLEtBQVUsYUFBV0YsS0FBVVMsS0FBRSxHQUFFLGVBQ2pmQSxLQUFFLEdBQVNUO01BQUM7QUFBQyxlQUFTMkwsR0FBRzNMLEdBQUU7QUFBQyxnQkFBT0EsR0FBRTtVQUFDLEtBQUs7QUFBRyxtQkFBTztVQUFHLEtBQUs7QUFBRyxtQkFBTztVQUFHLEtBQUs7VUFBRyxLQUFLO0FBQUcsbUJBQU87VUFBRSxLQUFLO0FBQUcsbUJBQU87VUFBRTtBQUFRLG1CQUFPO1FBQUM7TUFBQztBQUFDLGVBQVM0TCxHQUFHNUwsR0FBRTtBQUFDLGdCQUFPQSxHQUFFO1VBQUMsS0FBSztVQUFHLEtBQUs7QUFBRyxtQkFBTztVQUFHLEtBQUs7VUFBRyxLQUFLO1VBQUcsS0FBSztVQUFHLEtBQUs7QUFBRyxtQkFBTztVQUFHLEtBQUs7VUFBRSxLQUFLO1VBQUUsS0FBSztVQUFFLEtBQUs7VUFBRSxLQUFLO1VBQUUsS0FBSztBQUFFLG1CQUFPO1VBQUcsS0FBSztVQUFFLEtBQUs7VUFBRSxLQUFLO0FBQUUsbUJBQU87VUFBRyxLQUFLO0FBQUUsbUJBQU87VUFBRztBQUFRLGtCQUFNLE1BQU1ELEVBQUUsS0FBSUMsQ0FBQyxDQUFDO1FBQUU7TUFBQztBQUN0VyxlQUFTNkwsR0FBRzdMLEdBQUVFLEdBQUU7QUFBQyxZQUFJQyxJQUFFSCxFQUFFO0FBQWEsWUFBT0csTUFBSjtBQUFNLGlCQUFPTSxLQUFFO0FBQUUsWUFBSU0sSUFBRSxHQUFFRCxJQUFFLEdBQUVLLElBQUVuQixFQUFFLGNBQWFrQixJQUFFbEIsRUFBRSxnQkFBZWlCLElBQUVqQixFQUFFO0FBQVksWUFBT21CLE1BQUo7QUFBTUosY0FBRUksR0FBRUwsSUFBRUwsS0FBRTtpQkFBV1UsSUFBRWhCLElBQUUsV0FBY2dCLE1BQUosR0FBTTtBQUFDLGNBQUlILElBQUVHLElBQUUsQ0FBQ0Q7QUFBTUYsZ0JBQUosS0FBT0QsSUFBRTJLLEdBQUcxSyxDQUFDLEdBQUVGLElBQUVMLE9BQUlRLEtBQUdFLEdBQU1GLE1BQUosTUFBUUYsSUFBRTJLLEdBQUd6SyxDQUFDLEdBQUVILElBQUVMO1FBQUc7QUFBTVUsY0FBRWhCLElBQUUsQ0FBQ2UsR0FBTUMsTUFBSixLQUFPSixJQUFFMkssR0FBR3ZLLENBQUMsR0FBRUwsSUFBRUwsTUFBT1EsTUFBSixNQUFRRixJQUFFMkssR0FBR3pLLENBQUMsR0FBRUgsSUFBRUw7QUFBRyxZQUFPTSxNQUFKO0FBQU0saUJBQU87QUFBcUMsWUFBbkNBLElBQUUsS0FBRytLLEdBQUcvSyxDQUFDLEdBQUVBLElBQUVaLE1BQUksSUFBRVksSUFBRSxJQUFFLEtBQUdBLE1BQUksS0FBRyxHQUFTYixNQUFKLEtBQU9BLE1BQUlhLEtBQVEsRUFBQWIsSUFBRWdCLElBQUc7QUFBTyxjQUFOd0ssR0FBR3hMLENBQUMsR0FBS1ksS0FBR0w7QUFBRSxtQkFBT1A7QUFBRU8sZUFBRUs7UUFBQztBQUFvQixZQUFuQlosSUFBRUYsRUFBRSxnQkFBc0JFLE1BQUo7QUFBTSxlQUFJRixJQUFFQSxFQUFFLGVBQWNFLEtBQUdhLEdBQUUsSUFBRWI7QUFBR0MsZ0JBQUUsS0FBRzJMLEdBQUc1TCxDQUFDLEdBQUVZLElBQUUsS0FBR1gsR0FBRVksS0FBR2YsRUFBRUcsQ0FBQyxHQUFFRCxLQUFHLENBQUNZO0FBQUUsZUFBT0M7TUFBQztBQUMzZSxlQUFTZ0wsR0FBRy9MLEdBQUU7QUFBQyxlQUFBQSxJQUFFQSxFQUFFLGVBQWEsYUFBdUJBLE1BQUosSUFBTUEsSUFBRUEsSUFBRSxhQUFXLGFBQVc7TUFBQztBQUFDLGVBQVNnTSxHQUFHaE0sR0FBRUUsR0FBRTtBQUFDLGdCQUFPRixHQUFFO1VBQUMsS0FBSztBQUFHLG1CQUFPO1VBQUUsS0FBSztBQUFHLG1CQUFPO1VBQUUsS0FBSztBQUFHLG1CQUFPQSxJQUFFaU0sR0FBRyxLQUFHLENBQUMvTCxDQUFDLEdBQU1GLE1BQUosSUFBTWdNLEdBQUcsSUFBRzlMLENBQUMsSUFBRUY7VUFBRSxLQUFLO0FBQUcsbUJBQU9BLElBQUVpTSxHQUFHLE1BQUksQ0FBQy9MLENBQUMsR0FBTUYsTUFBSixJQUFNZ00sR0FBRyxHQUFFOUwsQ0FBQyxJQUFFRjtVQUFFLEtBQUs7QUFBRSxtQkFBT0EsSUFBRWlNLEdBQUcsT0FBSyxDQUFDL0wsQ0FBQyxHQUFNRixNQUFKLE1BQVFBLElBQUVpTSxHQUFHLFVBQVEsQ0FBQy9MLENBQUMsR0FBTUYsTUFBSixNQUFRQSxJQUFFLE9BQU1BO1VBQUUsS0FBSztBQUFFLG1CQUFPRSxJQUFFK0wsR0FBRyxZQUFVLENBQUMvTCxDQUFDLEdBQU1BLE1BQUosTUFBUUEsSUFBRSxZQUFXQTtRQUFDO0FBQUMsY0FBTSxNQUFNSCxFQUFFLEtBQUlDLENBQUMsQ0FBQztNQUFFO0FBQUMsZUFBU2lNLEdBQUdqTSxHQUFFO0FBQUMsZUFBT0EsSUFBRSxDQUFDQTtNQUFDO0FBQUMsZUFBU2tNLEdBQUdsTSxHQUFFO0FBQUMsaUJBQVFFLElBQUUsQ0FBQyxHQUFFQyxJQUFFLEdBQUUsS0FBR0EsR0FBRUE7QUFBSUQsWUFBRSxLQUFLRixDQUFDO0FBQUUsZUFBT0U7TUFBQztBQUN0ZCxlQUFTaU0sR0FBR25NLEdBQUVFLEdBQUVDLEdBQUU7QUFBQ0gsVUFBRSxnQkFBY0U7QUFBRSxZQUFJYSxJQUFFYixJQUFFO0FBQUVGLFVBQUUsa0JBQWdCZSxHQUFFZixFQUFFLGVBQWFlLEdBQUVmLElBQUVBLEVBQUUsWUFBV0UsSUFBRSxLQUFHNEwsR0FBRzVMLENBQUMsR0FBRUYsRUFBRUUsQ0FBQyxJQUFFQztNQUFDO0FBQUMsVUFBSTJMLEtBQUcsS0FBSyxRQUFNLEtBQUssUUFBTU0sSUFBR0MsS0FBRyxLQUFLLEtBQUlDLEtBQUcsS0FBSztBQUFJLGVBQVNGLEdBQUdwTSxHQUFFO0FBQUMsZUFBV0EsTUFBSixJQUFNLEtBQUcsTUFBSXFNLEdBQUdyTSxDQUFDLElBQUVzTSxLQUFHLEtBQUc7TUFBQztBQUFDLFVBQUlDLEtBQUc5TSxHQUFFLCtCQUE4QitNLEtBQUcvTSxHQUFFLDBCQUF5QmdOLEtBQUc7QUFBRyxlQUFTQyxHQUFHMU0sR0FBRUUsR0FBRUMsR0FBRVksR0FBRTtBQUFDK0csY0FBSUYsR0FBRztBQUFFLFlBQUk5RyxJQUFFNkwsSUFBR3hMLElBQUUyRztBQUFHQSxhQUFHO0FBQUcsWUFBRztBQUFDSCxhQUFHN0csR0FBRWQsR0FBRUUsR0FBRUMsR0FBRVksQ0FBQztRQUFDLFVBQUE7QUFBQyxXQUFTK0csS0FBRzNHLE1BQUk2RyxHQUFHO1FBQUM7TUFBQztBQUFDLGVBQVM0RSxHQUFHNU0sR0FBRUUsR0FBRUMsR0FBRVksR0FBRTtBQUFDeUwsV0FBR0QsSUFBR0ksR0FBRyxLQUFLLE1BQUszTSxHQUFFRSxHQUFFQyxHQUFFWSxDQUFDLENBQUM7TUFBQztBQUNwYixlQUFTNEwsR0FBRzNNLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUU7QUFBQyxZQUFHMEwsSUFBRztBQUFDLGNBQUkzTDtBQUFFLGVBQUlBLEtBQU9aLElBQUUsT0FBUCxNQUFZLElBQUVzSixHQUFHLFVBQVEsS0FBR08sR0FBRyxRQUFRL0osQ0FBQztBQUFFQSxnQkFBRWdLLEdBQUcsTUFBS2hLLEdBQUVFLEdBQUVDLEdBQUVZLENBQUMsR0FBRXlJLEdBQUcsS0FBS3hKLENBQUM7ZUFBTTtBQUFDLGdCQUFJbUIsSUFBRW9KLEdBQUd2SyxHQUFFRSxHQUFFQyxHQUFFWSxDQUFDO0FBQUUsZ0JBQVVJLE1BQVA7QUFBU0wsbUJBQUdtSixHQUFHakssR0FBRWUsQ0FBQztpQkFBTTtBQUFDLGtCQUFHRCxHQUFFO0FBQUMsb0JBQUcsS0FBR2lKLEdBQUcsUUFBUS9KLENBQUMsR0FBRTtBQUFDQSxzQkFBRWdLLEdBQUc3SSxHQUFFbkIsR0FBRUUsR0FBRUMsR0FBRVksQ0FBQyxHQUFFeUksR0FBRyxLQUFLeEosQ0FBQztBQUFFO2dCQUFNO0FBQUMsb0JBQUdtSyxHQUFHaEosR0FBRW5CLEdBQUVFLEdBQUVDLEdBQUVZLENBQUM7QUFBRTtBQUFPa0osbUJBQUdqSyxHQUFFZSxDQUFDO2NBQUM7QUFBQzhMLGlCQUFHN00sR0FBRUUsR0FBRWEsR0FBRSxNQUFLWixDQUFDO1lBQUM7VUFBQztRQUFDO01BQUM7QUFDblIsZUFBU29LLEdBQUd2SyxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQUMsWUFBSUQsSUFBRW1HLEdBQUdsRyxDQUFDO0FBQVUsWUFBUkQsSUFBRXVKLEdBQUd2SixDQUFDLEdBQVlBLE1BQVAsTUFBUztBQUFDLGNBQUlLLElBQUUwSCxHQUFHL0gsQ0FBQztBQUFFLGNBQVVLLE1BQVA7QUFBU0wsZ0JBQUU7ZUFBUztBQUFDLGdCQUFJSSxJQUFFQyxFQUFFO0FBQUksZ0JBQVFELE1BQUwsSUFBTztBQUFTLGtCQUFSSixJQUFFZ0ksR0FBRzNILENBQUMsR0FBWUwsTUFBUDtBQUFTLHVCQUFPQTtBQUFFQSxrQkFBRTtZQUFJLFdBQWFJLE1BQUosR0FBTTtBQUFDLGtCQUFHQyxFQUFFLFVBQVU7QUFBUSx1QkFBV0EsRUFBRSxRQUFOLElBQVVBLEVBQUUsVUFBVSxnQkFBYztBQUFLTCxrQkFBRTtZQUFJO0FBQU1LLG9CQUFJTCxNQUFJQSxJQUFFO1VBQUs7UUFBQztBQUFDLGVBQUErTCxHQUFHN00sR0FBRUUsR0FBRWEsR0FBRUQsR0FBRVgsQ0FBQyxHQUFTO01BQUk7QUFBQyxVQUFJMk0sS0FBRyxNQUFLQyxLQUFHLE1BQUtDLEtBQUc7QUFDelQsZUFBU0MsS0FBSTtBQUFDLFlBQUdEO0FBQUcsaUJBQU9BO0FBQUcsWUFBSWhOLEdBQUVFLElBQUU2TSxJQUFHNU0sSUFBRUQsRUFBRSxRQUFPYSxHQUFFRCxJQUFFLFdBQVVnTSxLQUFHQSxHQUFHLFFBQU1BLEdBQUcsYUFBWTNMLElBQUVMLEVBQUU7QUFBTyxhQUFJZCxJQUFFLEdBQUVBLElBQUVHLEtBQUdELEVBQUVGLENBQUMsTUFBSWMsRUFBRWQsQ0FBQyxHQUFFQTtBQUFJO0FBQUMsWUFBSWtCLElBQUVmLElBQUVIO0FBQUUsYUFBSWUsSUFBRSxHQUFFQSxLQUFHRyxLQUFHaEIsRUFBRUMsSUFBRVksQ0FBQyxNQUFJRCxFQUFFSyxJQUFFSixDQUFDLEdBQUVBO0FBQUk7QUFBQyxlQUFPaU0sS0FBR2xNLEVBQUUsTUFBTWQsR0FBRSxJQUFFZSxJQUFFLElBQUVBLElBQUUsTUFBTTtNQUFDO0FBQUMsZUFBU21NLEdBQUdsTixHQUFFO0FBQUMsWUFBSUUsSUFBRUYsRUFBRTtBQUFRLGVBQUEsY0FBYUEsS0FBR0EsSUFBRUEsRUFBRSxVQUFhQSxNQUFKLEtBQVlFLE1BQUwsT0FBU0YsSUFBRSxPQUFLQSxJQUFFRSxHQUFPRixNQUFMLE9BQVNBLElBQUUsS0FBVyxNQUFJQSxLQUFRQSxNQUFMLEtBQU9BLElBQUU7TUFBQztBQUFDLGVBQVNtTixLQUFJO0FBQUMsZUFBTTtNQUFFO0FBQUMsZUFBU0MsS0FBSTtBQUFDLGVBQU07TUFBRTtBQUNuWSxlQUFTQyxHQUFHck4sR0FBRTtBQUFDLGlCQUFTRSxFQUFFQSxHQUFFYSxHQUFFRCxHQUFFSyxHQUFFRCxHQUFFO0FBQUMsZUFBSyxhQUFXaEIsR0FBRSxLQUFLLGNBQVlZLEdBQUUsS0FBSyxPQUFLQyxHQUFFLEtBQUssY0FBWUksR0FBRSxLQUFLLFNBQU9ELEdBQUUsS0FBSyxnQkFBYztBQUFLLG1CQUFRZixLQUFLSDtBQUFFQSxjQUFFLGVBQWVHLENBQUMsTUFBSUQsSUFBRUYsRUFBRUcsQ0FBQyxHQUFFLEtBQUtBLENBQUMsSUFBRUQsSUFBRUEsRUFBRWlCLENBQUMsSUFBRUEsRUFBRWhCLENBQUM7QUFBRyxpQkFBQSxLQUFLLHNCQUEwQmdCLEVBQUUsb0JBQVIsT0FBeUJBLEVBQUUsbUJBQXNCQSxFQUFFLGdCQUFQLFNBQW9CZ00sS0FBR0MsSUFBRyxLQUFLLHVCQUFxQkEsSUFBVTtRQUFJO0FBQUMsZUFBQWhNLEdBQUVsQixFQUFFLFdBQVUsRUFBQyxnQkFBZSxXQUFVO0FBQUMsZUFBSyxtQkFBaUI7QUFBRyxjQUFJRixJQUFFLEtBQUs7QUFBWUEsZ0JBQUlBLEVBQUUsaUJBQWVBLEVBQUUsZUFBZSxJQUFjLE9BQU9BLEVBQUUsZUFBckIsY0FDeGRBLEVBQUUsY0FBWSxRQUFJLEtBQUsscUJBQW1CbU47UUFBRyxHQUFFLGlCQUFnQixXQUFVO0FBQUMsY0FBSW5OLElBQUUsS0FBSztBQUFZQSxnQkFBSUEsRUFBRSxrQkFBZ0JBLEVBQUUsZ0JBQWdCLElBQWMsT0FBT0EsRUFBRSxnQkFBckIsY0FBb0NBLEVBQUUsZUFBYSxPQUFJLEtBQUssdUJBQXFCbU47UUFBRyxHQUFFLFNBQVEsV0FBVTtRQUFDLEdBQUUsY0FBYUEsR0FBRSxDQUFDLEdBQVNqTjtNQUFDO0FBQ2pSLFVBQUlvTixLQUFHLEVBQUMsWUFBVyxHQUFFLFNBQVEsR0FBRSxZQUFXLEdBQUUsV0FBVSxTQUFTdE4sR0FBRTtBQUFDLGVBQU9BLEVBQUUsYUFBVyxLQUFLLElBQUk7TUFBQyxHQUFFLGtCQUFpQixHQUFFLFdBQVUsRUFBQyxHQUFFdU4sS0FBR0YsR0FBR0MsRUFBRSxHQUFFRSxLQUFHcE0sR0FBRSxDQUFDLEdBQUVrTSxJQUFHLEVBQUMsTUFBSyxHQUFFLFFBQU8sRUFBQyxDQUFDLEdBQUVHLEtBQUdKLEdBQUdHLEVBQUUsR0FBRUUsSUFBR0MsSUFBR0MsSUFBR0MsS0FBR3pNLEdBQUUsQ0FBQyxHQUFFb00sSUFBRyxFQUFDLFNBQVEsR0FBRSxTQUFRLEdBQUUsU0FBUSxHQUFFLFNBQVEsR0FBRSxPQUFNLEdBQUUsT0FBTSxHQUFFLFNBQVEsR0FBRSxVQUFTLEdBQUUsUUFBTyxHQUFFLFNBQVEsR0FBRSxrQkFBaUJNLElBQUcsUUFBTyxHQUFFLFNBQVEsR0FBRSxlQUFjLFNBQVM5TixHQUFFO0FBQUMsZUFBZ0JBLEVBQUUsa0JBQVgsU0FBeUJBLEVBQUUsZ0JBQWNBLEVBQUUsYUFBV0EsRUFBRSxZQUFVQSxFQUFFLGNBQVlBLEVBQUU7TUFBYSxHQUFFLFdBQVUsU0FBU0EsR0FBRTtBQUFDLGVBQUcsZUFDM2VBLElBQVNBLEVBQUUsYUFBVUEsTUFBSTROLE9BQUtBLE1BQWtCNU4sRUFBRSxTQUFoQixlQUFzQjBOLEtBQUcxTixFQUFFLFVBQVE0TixHQUFHLFNBQVFELEtBQUczTixFQUFFLFVBQVE0TixHQUFHLFdBQVNELEtBQUdELEtBQUcsR0FBRUUsS0FBRzVOLElBQVUwTjtNQUFFLEdBQUUsV0FBVSxTQUFTMU4sR0FBRTtBQUFDLGVBQU0sZUFBY0EsSUFBRUEsRUFBRSxZQUFVMk47TUFBRSxFQUFDLENBQUMsR0FBRUksS0FBR1YsR0FBR1EsRUFBRSxHQUFFRyxLQUFHNU0sR0FBRSxDQUFDLEdBQUV5TSxJQUFHLEVBQUMsY0FBYSxFQUFDLENBQUMsR0FBRUksS0FBR1osR0FBR1csRUFBRSxHQUFFRSxLQUFHOU0sR0FBRSxDQUFDLEdBQUVvTSxJQUFHLEVBQUMsZUFBYyxFQUFDLENBQUMsR0FBRVcsS0FBR2QsR0FBR2EsRUFBRSxHQUFFRSxLQUFHaE4sR0FBRSxDQUFDLEdBQUVrTSxJQUFHLEVBQUMsZUFBYyxHQUFFLGFBQVksR0FBRSxlQUFjLEVBQUMsQ0FBQyxHQUFFZSxLQUFHaEIsR0FBR2UsRUFBRSxHQUFFRSxLQUFHbE4sR0FBRSxDQUFDLEdBQUVrTSxJQUFHLEVBQUMsZUFBYyxTQUFTdE4sR0FBRTtBQUFDLGVBQU0sbUJBQWtCQSxJQUFFQSxFQUFFLGdCQUFjLE9BQU87TUFBYSxFQUFDLENBQUMsR0FBRXVPLEtBQUdsQixHQUFHaUIsRUFBRSxHQUFFRSxLQUFHcE4sR0FBRSxDQUFDLEdBQUVrTSxJQUFHLEVBQUMsTUFBSyxFQUFDLENBQUMsR0FBRW1CLEtBQUdwQixHQUFHbUIsRUFBRSxHQUFFRSxLQUFHLEVBQUMsS0FBSSxVQUN4ZixVQUFTLEtBQUksTUFBSyxhQUFZLElBQUcsV0FBVSxPQUFNLGNBQWEsTUFBSyxhQUFZLEtBQUksVUFBUyxLQUFJLE1BQUssTUFBSyxlQUFjLE1BQUssZUFBYyxRQUFPLGNBQWEsaUJBQWdCLGVBQWMsR0FBRUMsS0FBRyxFQUFDLEdBQUUsYUFBWSxHQUFFLE9BQU0sSUFBRyxTQUFRLElBQUcsU0FBUSxJQUFHLFNBQVEsSUFBRyxXQUFVLElBQUcsT0FBTSxJQUFHLFNBQVEsSUFBRyxZQUFXLElBQUcsVUFBUyxJQUFHLEtBQUksSUFBRyxVQUFTLElBQUcsWUFBVyxJQUFHLE9BQU0sSUFBRyxRQUFPLElBQUcsYUFBWSxJQUFHLFdBQVUsSUFBRyxjQUFhLElBQUcsYUFBWSxJQUFHLFVBQVMsSUFBRyxVQUFTLEtBQUksTUFBSyxLQUFJLE1BQUssS0FBSSxNQUFLLEtBQUksTUFBSyxLQUFJLE1BQUssS0FBSSxNQUFLLEtBQUksTUFDdGYsS0FBSSxNQUFLLEtBQUksTUFBSyxLQUFJLE9BQU0sS0FBSSxPQUFNLEtBQUksT0FBTSxLQUFJLFdBQVUsS0FBSSxjQUFhLEtBQUksT0FBTSxHQUFFQyxLQUFHLEVBQUMsS0FBSSxVQUFTLFNBQVEsV0FBVSxNQUFLLFdBQVUsT0FBTSxXQUFVO0FBQUUsZUFBU0MsR0FBRzdPLEdBQUU7QUFBQyxZQUFJRSxJQUFFLEtBQUs7QUFBWSxlQUFPQSxFQUFFLG1CQUFpQkEsRUFBRSxpQkFBaUJGLENBQUMsS0FBR0EsSUFBRTRPLEdBQUc1TyxDQUFDLEtBQUcsQ0FBQyxDQUFDRSxFQUFFRixDQUFDLElBQUU7TUFBRTtBQUFDLGVBQVM4TixLQUFJO0FBQUMsZUFBT2U7TUFBRTtBQUNoUyxVQUFJQyxLQUFHMU4sR0FBRSxDQUFDLEdBQUVvTSxJQUFHLEVBQUMsS0FBSSxTQUFTeE4sR0FBRTtBQUFDLFlBQUdBLEVBQUUsS0FBSTtBQUFDLGNBQUlFLElBQUV3TyxHQUFHMU8sRUFBRSxHQUFHLEtBQUdBLEVBQUU7QUFBSSxjQUFvQkUsTUFBakI7QUFBbUIsbUJBQU9BO1FBQUM7QUFBQyxlQUFtQkYsRUFBRSxTQUFmLGNBQXFCQSxJQUFFa04sR0FBR2xOLENBQUMsR0FBT0EsTUFBTCxLQUFPLFVBQVEsT0FBTyxhQUFhQSxDQUFDLEtBQWVBLEVBQUUsU0FBZCxhQUE4QkEsRUFBRSxTQUFaLFVBQWlCMk8sR0FBRzNPLEVBQUUsT0FBTyxLQUFHLGlCQUFlO01BQUUsR0FBRSxNQUFLLEdBQUUsVUFBUyxHQUFFLFNBQVEsR0FBRSxVQUFTLEdBQUUsUUFBTyxHQUFFLFNBQVEsR0FBRSxRQUFPLEdBQUUsUUFBTyxHQUFFLGtCQUFpQjhOLElBQUcsVUFBUyxTQUFTOU4sR0FBRTtBQUFDLGVBQW1CQSxFQUFFLFNBQWYsYUFBb0JrTixHQUFHbE4sQ0FBQyxJQUFFO01BQUMsR0FBRSxTQUFRLFNBQVNBLEdBQUU7QUFBQyxlQUFrQkEsRUFBRSxTQUFkLGFBQThCQSxFQUFFLFNBQVosVUFBaUJBLEVBQUUsVUFBUTtNQUFDLEdBQUUsT0FBTSxTQUFTQSxHQUFFO0FBQUMsZUFDdmVBLEVBQUUsU0FEMmUsYUFDdGVrTixHQUFHbE4sQ0FBQyxJQUFjQSxFQUFFLFNBQWQsYUFBOEJBLEVBQUUsU0FBWixVQUFpQkEsRUFBRSxVQUFRO01BQUMsRUFBQyxDQUFDLEdBQUUrTyxLQUFHMUIsR0FBR3lCLEVBQUUsR0FBRUUsS0FBRzVOLEdBQUUsQ0FBQyxHQUFFeU0sSUFBRyxFQUFDLFdBQVUsR0FBRSxPQUFNLEdBQUUsUUFBTyxHQUFFLFVBQVMsR0FBRSxvQkFBbUIsR0FBRSxPQUFNLEdBQUUsT0FBTSxHQUFFLE9BQU0sR0FBRSxhQUFZLEdBQUUsV0FBVSxFQUFDLENBQUMsR0FBRW9CLEtBQUc1QixHQUFHMkIsRUFBRSxHQUFFRSxLQUFHOU4sR0FBRSxDQUFDLEdBQUVvTSxJQUFHLEVBQUMsU0FBUSxHQUFFLGVBQWMsR0FBRSxnQkFBZSxHQUFFLFFBQU8sR0FBRSxTQUFRLEdBQUUsU0FBUSxHQUFFLFVBQVMsR0FBRSxrQkFBaUJNLEdBQUUsQ0FBQyxHQUFFcUIsS0FBRzlCLEdBQUc2QixFQUFFLEdBQUVFLEtBQUdoTyxHQUFFLENBQUMsR0FBRWtNLElBQUcsRUFBQyxjQUFhLEdBQUUsYUFBWSxHQUFFLGVBQWMsRUFBQyxDQUFDLEdBQUUrQixLQUFHaEMsR0FBRytCLEVBQUUsR0FBRUUsS0FBR2xPLEdBQUUsQ0FBQyxHQUFFeU0sSUFBRyxFQUFDLFFBQU8sU0FBUzdOLEdBQUU7QUFBQyxlQUFNLFlBQVdBLElBQUVBLEVBQUUsU0FBTyxpQkFBZ0JBLElBQUUsQ0FBQ0EsRUFBRSxjQUFZO01BQUMsR0FDbmYsUUFBTyxTQUFTQSxHQUFFO0FBQUMsZUFBTSxZQUFXQSxJQUFFQSxFQUFFLFNBQU8saUJBQWdCQSxJQUFFLENBQUNBLEVBQUUsY0FBWSxnQkFBZUEsSUFBRSxDQUFDQSxFQUFFLGFBQVc7TUFBQyxHQUFFLFFBQU8sR0FBRSxXQUFVLEVBQUMsQ0FBQyxHQUFFdVAsS0FBR2xDLEdBQUdpQyxFQUFFLEdBQUVFLEtBQUcsQ0FBQyxHQUFFLElBQUcsSUFBRyxFQUFFLEdBQUVDLEtBQUc3TSxNQUFJLHNCQUFxQixRQUFPOE0sS0FBRztBQUFLOU0sWUFBSSxrQkFBaUIsYUFBVzhNLEtBQUcsU0FBUztBQUFjLFVBQUlDLEtBQUcvTSxNQUFJLGVBQWMsVUFBUSxDQUFDOE0sSUFBR0UsS0FBR2hOLE9BQUssQ0FBQzZNLE1BQUlDLE1BQUksSUFBRUEsTUFBSSxNQUFJQSxLQUFJRyxLQUFHLE9BQU8sYUFBYSxFQUFFLEdBQUVDLEtBQUc7QUFDMVcsZUFBU0MsR0FBRy9QLEdBQUVFLEdBQUU7QUFBQyxnQkFBT0YsR0FBRTtVQUFDLEtBQUs7QUFBUSxtQkFBV3dQLEdBQUcsUUFBUXRQLEVBQUUsT0FBTyxNQUF6QjtVQUEyQixLQUFLO0FBQVUsbUJBQWFBLEVBQUUsWUFBUjtVQUFnQixLQUFLO1VBQVcsS0FBSztVQUFZLEtBQUs7QUFBVyxtQkFBTTtVQUFHO0FBQVEsbUJBQU07UUFBRTtNQUFDO0FBQUMsZUFBUzhQLEdBQUdoUSxHQUFFO0FBQUMsZUFBQUEsSUFBRUEsRUFBRSxRQUF3QixPQUFPQSxLQUFsQixZQUFxQixVQUFTQSxJQUFFQSxFQUFFLE9BQUs7TUFBSTtBQUFDLFVBQUlpUSxLQUFHO0FBQUcsZUFBU0MsR0FBR2xRLEdBQUVFLEdBQUU7QUFBQyxnQkFBT0YsR0FBRTtVQUFDLEtBQUs7QUFBaUIsbUJBQU9nUSxHQUFHOVAsQ0FBQztVQUFFLEtBQUs7QUFBVyxtQkFBUUEsRUFBRSxVQUFQLEtBQW9CLFFBQUs0UCxLQUFHLE1BQVVEO1VBQUcsS0FBSztBQUFZLG1CQUFPN1AsSUFBRUUsRUFBRSxNQUFLRixNQUFJNlAsTUFBSUMsS0FBRyxPQUFLOVA7VUFBRTtBQUFRLG1CQUFPO1FBQUk7TUFBQztBQUNsZCxlQUFTbVEsR0FBR25RLEdBQUVFLEdBQUU7QUFBQyxZQUFHK1A7QUFBRyxpQkFBeUJqUSxNQUFuQixvQkFBc0IsQ0FBQ3lQLE1BQUlNLEdBQUcvUCxHQUFFRSxDQUFDLEtBQUdGLElBQUVpTixHQUFHLEdBQUVELEtBQUdELEtBQUdELEtBQUcsTUFBS21ELEtBQUcsT0FBR2pRLEtBQUc7QUFBSyxnQkFBT0EsR0FBRTtVQUFDLEtBQUs7QUFBUSxtQkFBTztVQUFLLEtBQUs7QUFBVyxnQkFBRyxFQUFFRSxFQUFFLFdBQVNBLEVBQUUsVUFBUUEsRUFBRSxZQUFVQSxFQUFFLFdBQVNBLEVBQUUsUUFBTztBQUFDLGtCQUFHQSxFQUFFLFFBQU0sSUFBRUEsRUFBRSxLQUFLO0FBQU8sdUJBQU9BLEVBQUU7QUFBSyxrQkFBR0EsRUFBRTtBQUFNLHVCQUFPLE9BQU8sYUFBYUEsRUFBRSxLQUFLO1lBQUM7QUFBQyxtQkFBTztVQUFLLEtBQUs7QUFBaUIsbUJBQU8wUCxNQUFXMVAsRUFBRSxXQUFULE9BQWdCLE9BQUtBLEVBQUU7VUFBSztBQUFRLG1CQUFPO1FBQUk7TUFBQztBQUN2WSxVQUFJa1EsS0FBRyxFQUFDLE9BQU0sTUFBRyxNQUFLLE1BQUcsVUFBUyxNQUFHLGtCQUFpQixNQUFHLE9BQU0sTUFBRyxPQUFNLE1BQUcsUUFBTyxNQUFHLFVBQVMsTUFBRyxPQUFNLE1BQUcsUUFBTyxNQUFHLEtBQUksTUFBRyxNQUFLLE1BQUcsTUFBSyxNQUFHLEtBQUksTUFBRyxNQUFLLEtBQUU7QUFBRSxlQUFTQyxHQUFHclEsR0FBRTtBQUFDLFlBQUlFLElBQUVGLEtBQUdBLEVBQUUsWUFBVUEsRUFBRSxTQUFTLFlBQVk7QUFBRSxlQUFnQkUsTUFBVixVQUFZLENBQUMsQ0FBQ2tRLEdBQUdwUSxFQUFFLElBQUksSUFBZUUsTUFBYjtNQUFvQjtBQUFDLGVBQVNvUSxHQUFHdFEsR0FBRUUsR0FBRUMsR0FBRVksR0FBRTtBQUFDeUcsV0FBR3pHLENBQUMsR0FBRWIsSUFBRXFRLEdBQUdyUSxHQUFFLFVBQVUsR0FBRSxJQUFFQSxFQUFFLFdBQVNDLElBQUUsSUFBSW9OLEdBQUcsWUFBVyxVQUFTLE1BQUtwTixHQUFFWSxDQUFDLEdBQUVmLEVBQUUsS0FBSyxFQUFDLE9BQU1HLEdBQUUsV0FBVUQsRUFBQyxDQUFDO01BQUU7QUFBQyxVQUFJc1EsS0FBRyxNQUFLQyxLQUFHO0FBQUssZUFBU0MsR0FBRzFRLEdBQUU7QUFBQzJRLFdBQUczUSxHQUFFLENBQUM7TUFBQztBQUFDLGVBQVM0USxHQUFHNVEsR0FBRTtBQUFDLFlBQUlFLElBQUUyUSxHQUFHN1EsQ0FBQztBQUFFLFlBQUdxRixHQUFHbkYsQ0FBQztBQUFFLGlCQUFPRjtNQUFDO0FBQ3BlLGVBQVM4USxHQUFHOVEsR0FBRUUsR0FBRTtBQUFDLFlBQWNGLE1BQVg7QUFBYSxpQkFBT0U7TUFBQztBQUFDLFVBQUk2USxLQUFHO0FBQU1uTyxhQUFjQSxNQUFRb08sS0FBRyxhQUFZLFVBQWFBLE9BQVFDLEtBQUcsU0FBUyxjQUFjLEtBQUssR0FBRUEsR0FBRyxhQUFhLFdBQVUsU0FBUyxHQUFFRCxLQUFnQixPQUFPQyxHQUFHLFdBQXZCLGFBQStCQyxLQUFHRixNQUFRRSxLQUFHLE9BQUdILEtBQUdHLE9BQUssQ0FBQyxTQUFTLGdCQUFjLElBQUUsU0FBUztBQUF0TixVQUFBQSxJQUFjRixJQUFvQ0M7QUFBa0wsZUFBU0UsS0FBSTtBQUFDWCxlQUFLQSxHQUFHLFlBQVksb0JBQW1CWSxFQUFFLEdBQUVYLEtBQUdELEtBQUc7TUFBSztBQUFDLGVBQVNZLEdBQUdwUixHQUFFO0FBQUMsWUFBYUEsRUFBRSxpQkFBWixXQUEwQjRRLEdBQUdILEVBQUUsR0FBRTtBQUFDLGNBQUl2USxJQUFFLENBQUM7QUFBd0IsY0FBdEJvUSxHQUFHcFEsR0FBRXVRLElBQUd6USxHQUFFaUgsR0FBR2pILENBQUMsQ0FBQyxHQUFFQSxJQUFFMFEsSUFBTTVJO0FBQUc5SCxjQUFFRSxDQUFDO2VBQU07QUFBQzRILGlCQUFHO0FBQUcsZ0JBQUc7QUFBQ0osaUJBQUcxSCxHQUFFRSxDQUFDO1lBQUMsVUFBQTtBQUFTNEgsbUJBQUcsT0FBR0UsR0FBRztZQUFDO1VBQUM7UUFBQztNQUFDO0FBQ2xmLGVBQVNxSixHQUFHclIsR0FBRUUsR0FBRUMsR0FBRTtBQUFhSCxjQUFaLGFBQWVtUixHQUFHLEdBQUVYLEtBQUd0USxHQUFFdVEsS0FBR3RRLEdBQUVxUSxHQUFHLFlBQVksb0JBQW1CWSxFQUFFLEtBQWdCcFIsTUFBYixjQUFnQm1SLEdBQUc7TUFBQztBQUFDLGVBQVNHLEdBQUd0UixHQUFFO0FBQUMsWUFBdUJBLE1BQXBCLHFCQUFpQ0EsTUFBVixXQUF5QkEsTUFBWjtBQUFjLGlCQUFPNFEsR0FBR0gsRUFBRTtNQUFDO0FBQUMsZUFBU2MsR0FBR3ZSLEdBQUVFLEdBQUU7QUFBQyxZQUFhRixNQUFWO0FBQVksaUJBQU80USxHQUFHMVEsQ0FBQztNQUFDO0FBQUMsZUFBU3NSLEdBQUd4UixHQUFFRSxHQUFFO0FBQUMsWUFBYUYsTUFBVixXQUF3QkEsTUFBWDtBQUFhLGlCQUFPNFEsR0FBRzFRLENBQUM7TUFBQztBQUFDLGVBQVN1UixHQUFHelIsR0FBRUUsR0FBRTtBQUFDLGVBQU9GLE1BQUlFLE1BQVFGLE1BQUosS0FBTyxJQUFFQSxNQUFJLElBQUVFLE1BQUlGLE1BQUlBLEtBQUdFLE1BQUlBO01BQUM7QUFBQyxVQUFJd1IsS0FBZ0IsT0FBTyxPQUFPLE1BQTNCLGFBQThCLE9BQU8sS0FBR0QsSUFBR0UsS0FBRyxPQUFPLFVBQVU7QUFDN2EsZUFBU0MsR0FBRzVSLEdBQUVFLEdBQUU7QUFBQyxZQUFHd1IsR0FBRzFSLEdBQUVFLENBQUM7QUFBRSxpQkFBTTtBQUFHLFlBQWMsT0FBT0YsS0FBbEIsWUFBNEJBLE1BQVAsUUFBcUIsT0FBT0UsS0FBbEIsWUFBNEJBLE1BQVA7QUFBUyxpQkFBTTtBQUFHLFlBQUlDLElBQUUsT0FBTyxLQUFLSCxDQUFDLEdBQUVlLElBQUUsT0FBTyxLQUFLYixDQUFDO0FBQUUsWUFBR0MsRUFBRSxXQUFTWSxFQUFFO0FBQU8saUJBQU07QUFBRyxhQUFJQSxJQUFFLEdBQUVBLElBQUVaLEVBQUUsUUFBT1k7QUFBSSxjQUFHLENBQUM0USxHQUFHLEtBQUt6UixHQUFFQyxFQUFFWSxDQUFDLENBQUMsS0FBRyxDQUFDMlEsR0FBRzFSLEVBQUVHLEVBQUVZLENBQUMsQ0FBQyxHQUFFYixFQUFFQyxFQUFFWSxDQUFDLENBQUMsQ0FBQztBQUFFLG1CQUFNO0FBQUcsZUFBTTtNQUFFO0FBQUMsZUFBUzhRLEdBQUc3UixHQUFFO0FBQUMsZUFBS0EsS0FBR0EsRUFBRTtBQUFZQSxjQUFFQSxFQUFFO0FBQVcsZUFBT0E7TUFBQztBQUNuVSxlQUFTOFIsR0FBRzlSLEdBQUVFLEdBQUU7QUFBQyxZQUFJQyxJQUFFMFIsR0FBRzdSLENBQUM7QUFBRUEsWUFBRTtBQUFFLGlCQUFRZSxHQUFFWixLQUFHO0FBQUMsY0FBT0EsRUFBRSxhQUFOLEdBQWU7QUFBMEIsZ0JBQXpCWSxJQUFFZixJQUFFRyxFQUFFLFlBQVksUUFBVUgsS0FBR0UsS0FBR2EsS0FBR2I7QUFBRSxxQkFBTSxFQUFDLE1BQUtDLEdBQUUsUUFBT0QsSUFBRUYsRUFBQztBQUFFQSxnQkFBRWU7VUFBQztBQUFDZixhQUFFO0FBQUMsbUJBQUtHLEtBQUc7QUFBQyxrQkFBR0EsRUFBRSxhQUFZO0FBQUNBLG9CQUFFQSxFQUFFO0FBQVksc0JBQU1IO2NBQUM7QUFBQ0csa0JBQUVBLEVBQUU7WUFBVTtBQUFDQSxnQkFBRTtVQUFNO0FBQUNBLGNBQUUwUixHQUFHMVIsQ0FBQztRQUFDO01BQUM7QUFBQyxlQUFTNFIsR0FBRy9SLEdBQUVFLEdBQUU7QUFBQyxlQUFPRixLQUFHRSxJQUFFRixNQUFJRSxJQUFFLE9BQUdGLEtBQU9BLEVBQUUsYUFBTixJQUFlLFFBQUdFLEtBQU9BLEVBQUUsYUFBTixJQUFlNlIsR0FBRy9SLEdBQUVFLEVBQUUsVUFBVSxJQUFFLGNBQWFGLElBQUVBLEVBQUUsU0FBU0UsQ0FBQyxJQUFFRixFQUFFLDBCQUF3QixDQUFDLEVBQUVBLEVBQUUsd0JBQXdCRSxDQUFDLElBQUUsTUFBSSxRQUFHO01BQUU7QUFDOVosZUFBUzhSLEtBQUk7QUFBQyxpQkFBUWhTLElBQUUsUUFBT0UsSUFBRW9GLEdBQUcsR0FBRXBGLGFBQWFGLEVBQUUscUJBQW1CO0FBQUMsY0FBRztBQUFDLGdCQUFJRyxJQUFhLE9BQU9ELEVBQUUsY0FBYyxTQUFTLFFBQTNDO1VBQStDLFFBQVM7QUFBQ0MsZ0JBQUU7VUFBRTtBQUFDLGNBQUdBO0FBQUVILGdCQUFFRSxFQUFFOztBQUFtQjtBQUFNQSxjQUFFb0YsR0FBR3RGLEVBQUUsUUFBUTtRQUFDO0FBQUMsZUFBT0U7TUFBQztBQUFDLGVBQVMrUixHQUFHalMsR0FBRTtBQUFDLFlBQUlFLElBQUVGLEtBQUdBLEVBQUUsWUFBVUEsRUFBRSxTQUFTLFlBQVk7QUFBRSxlQUFPRSxNQUFjQSxNQUFWLFlBQXVCRixFQUFFLFNBQVgsVUFBNEJBLEVBQUUsU0FBYixZQUEyQkEsRUFBRSxTQUFWLFNBQXdCQSxFQUFFLFNBQVYsU0FBNkJBLEVBQUUsU0FBZixlQUFtQ0UsTUFBYixjQUF5QkYsRUFBRSxvQkFBWDtNQUEyQjtBQUN4YSxVQUFJa1MsS0FBR3RQLE1BQUksa0JBQWlCLFlBQVUsTUFBSSxTQUFTLGNBQWF1UCxLQUFHLE1BQUtDLEtBQUcsTUFBS0MsS0FBRyxNQUFLQyxLQUFHO0FBQzNGLGVBQVNDLEdBQUd2UyxHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBSVksSUFBRVosRUFBRSxXQUFTQSxJQUFFQSxFQUFFLFdBQWFBLEVBQUUsYUFBTixJQUFlQSxJQUFFQSxFQUFFO0FBQWNtUyxjQUFVSCxNQUFOLFFBQVVBLE9BQUs3TSxHQUFHdkUsQ0FBQyxNQUFJQSxJQUFFb1IsSUFBRyxvQkFBbUJwUixLQUFHa1IsR0FBR2xSLENBQUMsSUFBRUEsSUFBRSxFQUFDLE9BQU1BLEVBQUUsZ0JBQWUsS0FBSUEsRUFBRSxhQUFZLEtBQUdBLEtBQUdBLEVBQUUsaUJBQWVBLEVBQUUsY0FBYyxlQUFhLFFBQVEsYUFBYSxHQUFFQSxJQUFFLEVBQUMsWUFBV0EsRUFBRSxZQUFXLGNBQWFBLEVBQUUsY0FBYSxXQUFVQSxFQUFFLFdBQVUsYUFBWUEsRUFBRSxZQUFXLElBQUdzUixNQUFJVCxHQUFHUyxJQUFHdFIsQ0FBQyxNQUFJc1IsS0FBR3RSLEdBQUVBLElBQUV3UCxHQUFHNkIsSUFBRyxVQUFVLEdBQUUsSUFBRXJSLEVBQUUsV0FBU2IsSUFBRSxJQUFJcU4sR0FBRyxZQUFXLFVBQVMsTUFBS3JOLEdBQUVDLENBQUMsR0FBRUgsRUFBRSxLQUFLLEVBQUMsT0FBTUUsR0FBRSxXQUFVYSxFQUFDLENBQUMsR0FBRWIsRUFBRSxTQUFPaVM7TUFBSztBQUN0ZjNHLFNBQUcsbWpCQUFtakIsTUFBTSxHQUFHLEdBQy9qQixDQUFDO0FBQUVBLFNBQUcsb1JBQW9SLE1BQU0sR0FBRyxHQUFFLENBQUM7QUFBRUEsU0FBR0QsSUFBRyxDQUFDO0FBQUUsV0FBUWlILEtBQUcscUZBQXFGLE1BQU0sR0FBRyxHQUFFQyxLQUFHLEdBQUVBLEtBQUdELEdBQUcsUUFBT0M7QUFBS25ILFdBQUcsSUFBSWtILEdBQUdDLEVBQUUsR0FBRSxDQUFDO0FBQXpJLFVBQUFELElBQW1HQztBQUF3QzlQLFNBQUcsZ0JBQWUsQ0FBQyxZQUFXLFdBQVcsQ0FBQztBQUM5ZUEsU0FBRyxnQkFBZSxDQUFDLFlBQVcsV0FBVyxDQUFDO0FBQUVBLFNBQUcsa0JBQWlCLENBQUMsY0FBYSxhQUFhLENBQUM7QUFBRUEsU0FBRyxrQkFBaUIsQ0FBQyxjQUFhLGFBQWEsQ0FBQztBQUFFRCxTQUFHLFlBQVcsb0VBQW9FLE1BQU0sR0FBRyxDQUFDO0FBQUVBLFNBQUcsWUFBVyx1RkFBdUYsTUFBTSxHQUFHLENBQUM7QUFBRUEsU0FBRyxpQkFBZ0IsQ0FBQyxrQkFBaUIsWUFBVyxhQUFZLE9BQU8sQ0FBQztBQUFFQSxTQUFHLG9CQUFtQiwyREFBMkQsTUFBTSxHQUFHLENBQUM7QUFDaGdCQSxTQUFHLHNCQUFxQiw2REFBNkQsTUFBTSxHQUFHLENBQUM7QUFBRUEsU0FBRyx1QkFBc0IsOERBQThELE1BQU0sR0FBRyxDQUFDO0FBQUUsVUFBSWdRLEtBQUcsc05BQXNOLE1BQU0sR0FBRyxHQUFFQyxLQUFHLElBQUksSUFBSSwwQ0FBMEMsTUFBTSxHQUFHLEVBQUUsT0FBT0QsRUFBRSxDQUFDO0FBQ3RmLGVBQVNFLEdBQUc1UyxHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBSVksSUFBRWYsRUFBRSxRQUFNO0FBQWdCQSxVQUFFLGdCQUFjRyxHQUFFeUksR0FBRzdILEdBQUViLEdBQUUsUUFBT0YsQ0FBQyxHQUFFQSxFQUFFLGdCQUFjO01BQUk7QUFDeEcsZUFBUzJRLEdBQUczUSxHQUFFRSxHQUFFO0FBQUNBLGFBQU9BLElBQUUsT0FBUDtBQUFVLGlCQUFRQyxJQUFFLEdBQUVBLElBQUVILEVBQUUsUUFBT0csS0FBSTtBQUFDLGNBQUlZLElBQUVmLEVBQUVHLENBQUMsR0FBRVcsSUFBRUMsRUFBRTtBQUFNQSxjQUFFQSxFQUFFO0FBQVVmLGFBQUU7QUFBQyxnQkFBSW1CLElBQUU7QUFBTyxnQkFBR2pCO0FBQUUsdUJBQVFnQixJQUFFSCxFQUFFLFNBQU8sR0FBRSxLQUFHRyxHQUFFQSxLQUFJO0FBQUMsb0JBQUlELElBQUVGLEVBQUVHLENBQUMsR0FBRUYsSUFBRUMsRUFBRSxVQUFTLElBQUVBLEVBQUU7QUFBMkIsb0JBQWJBLElBQUVBLEVBQUUsVUFBWUQsTUFBSUcsS0FBR0wsRUFBRSxxQkFBcUI7QUFBRSx3QkFBTWQ7QUFBRTRTLG1CQUFHOVIsR0FBRUcsR0FBRSxDQUFDLEdBQUVFLElBQUVIO2NBQUM7O0FBQU0sbUJBQUlFLElBQUUsR0FBRUEsSUFBRUgsRUFBRSxRQUFPRyxLQUFJO0FBQW9ELG9CQUFuREQsSUFBRUYsRUFBRUcsQ0FBQyxHQUFFRixJQUFFQyxFQUFFLFVBQVMsSUFBRUEsRUFBRSxlQUFjQSxJQUFFQSxFQUFFLFVBQVlELE1BQUlHLEtBQUdMLEVBQUUscUJBQXFCO0FBQUUsd0JBQU1kO0FBQUU0UyxtQkFBRzlSLEdBQUVHLEdBQUUsQ0FBQyxHQUFFRSxJQUFFSDtjQUFDO1VBQUM7UUFBQztBQUFDLFlBQUd3SDtBQUFHLGdCQUFNeEksSUFBRXlJLElBQUdELEtBQUcsT0FBR0MsS0FBRyxNQUFLekk7TUFBRTtBQUM1YSxlQUFTVSxHQUFFVixHQUFFRSxHQUFFO0FBQUMsWUFBSUMsSUFBRTBTLEdBQUczUyxDQUFDLEdBQUVhLElBQUVmLElBQUU7QUFBV0csVUFBRSxJQUFJWSxDQUFDLE1BQUkrUixHQUFHNVMsR0FBRUYsR0FBRSxHQUFFLEtBQUUsR0FBRUcsRUFBRSxJQUFJWSxDQUFDO01BQUU7QUFBQyxVQUFJZ1MsS0FBRyxvQkFBa0IsS0FBSyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDO0FBQUUsZUFBU0MsR0FBR2hULEdBQUU7QUFBQ0EsVUFBRStTLEVBQUUsTUFBSS9TLEVBQUUrUyxFQUFFLElBQUUsTUFBR3ZRLEdBQUcsUUFBUSxTQUFTdEMsR0FBRTtBQUFDeVMsYUFBRyxJQUFJelMsQ0FBQyxLQUFHK1MsR0FBRy9TLEdBQUUsT0FBR0YsR0FBRSxJQUFJLEdBQUVpVCxHQUFHL1MsR0FBRSxNQUFHRixHQUFFLElBQUk7UUFBQyxDQUFDO01BQUU7QUFDOU8sZUFBU2lULEdBQUdqVCxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQUMsWUFBSUQsSUFBRSxJQUFFLFVBQVUsVUFBaUIsVUFBVSxDQUFDLE1BQXBCLFNBQXNCLFVBQVUsQ0FBQyxJQUFFLEdBQUVLLElBQUVoQjtBQUE2RCxZQUF2Q0gsTUFBcEIscUJBQTJCRyxFQUFFLGFBQU4sTUFBaUJnQixJQUFFaEIsRUFBRSxnQkFBeUJZLE1BQVAsUUFBVSxDQUFDYixLQUFHeVMsR0FBRyxJQUFJM1MsQ0FBQyxHQUFFO0FBQUMsY0FBY0EsTUFBWDtBQUFhO0FBQU9jLGVBQUcsR0FBRUssSUFBRUo7UUFBQztBQUFDLFlBQUlHLElBQUUyUixHQUFHMVIsQ0FBQyxHQUFFRixJQUFFakIsSUFBRSxRQUFNRSxJQUFFLFlBQVU7QUFBVWdCLFVBQUUsSUFBSUQsQ0FBQyxNQUFJZixNQUFJWSxLQUFHLElBQUdnUyxHQUFHM1IsR0FBRW5CLEdBQUVjLEdBQUVaLENBQUMsR0FBRWdCLEVBQUUsSUFBSUQsQ0FBQztNQUFFO0FBQ3JTLGVBQVM2UixHQUFHOVMsR0FBRUUsR0FBRUMsR0FBRVksR0FBRTtBQUFDLFlBQUlELElBQUV3SyxHQUFHLElBQUlwTCxDQUFDO0FBQUUsZ0JBQWdCWSxNQUFULFNBQVcsSUFBRUEsR0FBRTtVQUFDLEtBQUs7QUFBRUEsZ0JBQUU0TDtBQUFHO1VBQU0sS0FBSztBQUFFNUwsZ0JBQUU4TDtBQUFHO1VBQU07QUFBUTlMLGdCQUFFNkw7UUFBRTtBQUFDeE0sWUFBRVcsRUFBRSxLQUFLLE1BQUtaLEdBQUVDLEdBQUVILENBQUMsR0FBRWMsSUFBRSxRQUFPLENBQUNxSCxNQUFtQmpJLE1BQWYsZ0JBQWdDQSxNQUFkLGVBQTJCQSxNQUFWLFlBQWNZLElBQUUsT0FBSUMsSUFBV0QsTUFBVCxTQUFXZCxFQUFFLGlCQUFpQkUsR0FBRUMsR0FBRSxFQUFDLFNBQVEsTUFBRyxTQUFRVyxFQUFDLENBQUMsSUFBRWQsRUFBRSxpQkFBaUJFLEdBQUVDLEdBQUUsSUFBRSxJQUFXVyxNQUFULFNBQVdkLEVBQUUsaUJBQWlCRSxHQUFFQyxHQUFFLEVBQUMsU0FBUVcsRUFBQyxDQUFDLElBQUVkLEVBQUUsaUJBQWlCRSxHQUFFQyxHQUFFLEtBQUU7TUFBQztBQUN2VyxlQUFTME0sR0FBRzdNLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVELEdBQUU7QUFBQyxZQUFJSyxJQUFFSjtBQUFFLFlBQVEsRUFBQWIsSUFBRSxNQUFTLEVBQUFBLElBQUUsTUFBV2EsTUFBUDtBQUFTZjtBQUFFLHVCQUFPO0FBQUMsa0JBQVVlLE1BQVA7QUFBUztBQUFPLGtCQUFJRyxJQUFFSCxFQUFFO0FBQUksa0JBQU9HLE1BQUosS0FBV0EsTUFBSixHQUFNO0FBQUMsb0JBQUlELElBQUVGLEVBQUUsVUFBVTtBQUFjLG9CQUFHRSxNQUFJSCxLQUFPRyxFQUFFLGFBQU4sS0FBZ0JBLEVBQUUsZUFBYUg7QUFBRTtBQUFNLG9CQUFPSSxNQUFKO0FBQU0sdUJBQUlBLElBQUVILEVBQUUsUUFBY0csTUFBUCxRQUFVO0FBQUMsd0JBQUlGLElBQUVFLEVBQUU7QUFBSSx5QkFBT0YsTUFBSixLQUFXQSxNQUFKLE9BQVNBLElBQUVFLEVBQUUsVUFBVSxlQUFjRixNQUFJRixLQUFPRSxFQUFFLGFBQU4sS0FBZ0JBLEVBQUUsZUFBYUY7QUFBRTtBQUFPSSx3QkFBRUEsRUFBRTtrQkFBTTtBQUFDLHVCQUFZRCxNQUFQLFFBQVU7QUFBUyxzQkFBUkMsSUFBRW1KLEdBQUdwSixDQUFDLEdBQVlDLE1BQVA7QUFBUztBQUFlLHNCQUFSRixJQUFFRSxFQUFFLEtBQVdGLE1BQUosS0FBV0EsTUFBSixHQUFNO0FBQUNELHdCQUFFSSxJQUFFRDtBQUFFLDZCQUFTbEI7a0JBQUM7QUFBQ2lCLHNCQUFFQSxFQUFFO2dCQUFVO2NBQUM7QUFBQ0Ysa0JBQUVBLEVBQUU7WUFBTTtBQUFDa0gsV0FBRyxXQUFVO0FBQUMsY0FBSWxILElBQUVJLEdBQUVMLElBQUVtRyxHQUFHOUcsQ0FBQyxHQUFFZSxJQUFFLENBQUM7QUFDcmZsQixhQUFFO0FBQUMsZ0JBQUlpQixJQUFFb0ssR0FBRyxJQUFJckwsQ0FBQztBQUFFLGdCQUFZaUIsTUFBVCxRQUFXO0FBQUMsa0JBQUlELElBQUV1TSxJQUFHek4sSUFBRUU7QUFBRSxzQkFBT0EsR0FBRTtnQkFBQyxLQUFLO0FBQVcsc0JBQU9rTixHQUFHL00sQ0FBQyxNQUFSO0FBQVUsMEJBQU1IO2dCQUFFLEtBQUs7Z0JBQVUsS0FBSztBQUFRZ0Isc0JBQUUrTjtBQUFHO2dCQUFNLEtBQUs7QUFBVWpQLHNCQUFFLFNBQVFrQixJQUFFbU47QUFBRztnQkFBTSxLQUFLO0FBQVdyTyxzQkFBRSxRQUFPa0IsSUFBRW1OO0FBQUc7Z0JBQU0sS0FBSztnQkFBYSxLQUFLO0FBQVluTixzQkFBRW1OO0FBQUc7Z0JBQU0sS0FBSztBQUFRLHNCQUFPaE8sRUFBRSxXQUFOO0FBQWEsMEJBQU1IO2dCQUFFLEtBQUs7Z0JBQVcsS0FBSztnQkFBVyxLQUFLO2dCQUFZLEtBQUs7Z0JBQVksS0FBSztnQkFBVSxLQUFLO2dCQUFXLEtBQUs7Z0JBQVksS0FBSztBQUFjZ0Isc0JBQUUrTTtBQUFHO2dCQUFNLEtBQUs7Z0JBQU8sS0FBSztnQkFBVSxLQUFLO2dCQUFZLEtBQUs7Z0JBQVcsS0FBSztnQkFBWSxLQUFLO2dCQUFXLEtBQUs7Z0JBQVksS0FBSztBQUFPL00sc0JBQzFpQmlOO0FBQUc7Z0JBQU0sS0FBSztnQkFBYyxLQUFLO2dCQUFXLEtBQUs7Z0JBQVksS0FBSztBQUFhak4sc0JBQUVtTztBQUFHO2dCQUFNLEtBQUtsRTtnQkFBRyxLQUFLQztnQkFBRyxLQUFLQztBQUFHbkssc0JBQUVxTjtBQUFHO2dCQUFNLEtBQUtqRDtBQUFHcEssc0JBQUVxTztBQUFHO2dCQUFNLEtBQUs7QUFBU3JPLHNCQUFFeU07QUFBRztnQkFBTSxLQUFLO0FBQVF6TSxzQkFBRXVPO0FBQUc7Z0JBQU0sS0FBSztnQkFBTyxLQUFLO2dCQUFNLEtBQUs7QUFBUXZPLHNCQUFFdU47QUFBRztnQkFBTSxLQUFLO2dCQUFvQixLQUFLO2dCQUFxQixLQUFLO2dCQUFnQixLQUFLO2dCQUFjLEtBQUs7Z0JBQWMsS0FBSztnQkFBYSxLQUFLO2dCQUFjLEtBQUs7QUFBWXZOLHNCQUFFaU87Y0FBRTtBQUFDLGtCQUFJcFAsS0FBT0ssSUFBRSxPQUFQLEdBQVVELElBQUUsQ0FBQ0osS0FBY0csTUFBWCxVQUFhTCxJQUFFRSxJQUFTb0IsTUFBUCxPQUFTQSxJQUFFLFlBQVUsT0FBS0E7QUFBRXBCLGtCQUFFLENBQUM7QUFBRSx1QkFBUUgsS0FBRXFCLEdBQUV2QixJQUM3ZUUsT0FEK2UsUUFDNWU7QUFBQ0YsZ0JBQUFBLEtBQUVFO0FBQUUsb0JBQUlFLEtBQUVKLEdBQUU7QUFBc0Ysb0JBQXhFQSxHQUFFLFFBQU4sS0FBa0JJLE9BQVAsU0FBV0osS0FBRUksSUFBU0QsTUFBUCxTQUFXQyxLQUFFc0ksR0FBR3hJLElBQUVDLENBQUMsR0FBUUMsTUFBTixRQUFTQyxFQUFFLEtBQUtxVCxHQUFHeFQsSUFBRUUsSUFBRUosRUFBQyxDQUFDLEtBQU9TO0FBQUU7QUFBTVAsZ0JBQUFBLEtBQUVBLEdBQUU7Y0FBTTtBQUFDLGtCQUFFRyxFQUFFLFdBQVNvQixJQUFFLElBQUlELEVBQUVDLEdBQUVuQixHQUFFLE1BQUtLLEdBQUVXLENBQUMsR0FBRUksRUFBRSxLQUFLLEVBQUMsT0FBTUQsR0FBRSxXQUFVcEIsRUFBQyxDQUFDO1lBQUU7VUFBQztBQUFDLGNBQVEsRUFBQUssSUFBRSxJQUFHO0FBQUNGLGVBQUU7QUFBeUUsa0JBQXhFaUIsSUFBZ0JqQixNQUFkLGVBQWlDQSxNQUFoQixlQUFrQmdCLElBQWVoQixNQUFiLGNBQStCQSxNQUFmLGNBQW9CaUIsS0FBUSxFQUFBZixJQUFFLFFBQU1KLElBQUVLLEVBQUUsaUJBQWVBLEVBQUUsaUJBQWVrSyxHQUFHdkssQ0FBQyxLQUFHQSxFQUFFcVQsRUFBRTtBQUFHLHNCQUFNblQ7QUFBRSxtQkFBR2dCLEtBQUdDLE9BQUdBLElBQUVILEVBQUUsV0FBU0EsSUFBRUEsS0FBR0csSUFBRUgsRUFBRSxpQkFBZUcsRUFBRSxlQUFhQSxFQUFFLGVBQWEsUUFBVUQsS0FBTWxCLElBQUVLLEVBQUUsaUJBQWVBLEVBQUUsV0FBVWEsSUFBRUQsR0FBRWpCLElBQUVBLElBQUV1SyxHQUFHdkssQ0FBQyxJQUFFLE1BQzllQSxNQURtZixTQUMvZUcsSUFBRTRJLEdBQUcvSSxDQUFDLEdBQUVBLE1BQUlHLEtBQU9ILEVBQUUsUUFBTixLQUFlQSxFQUFFLFFBQU4sT0FBV0EsSUFBRSxVQUFVa0IsSUFBRSxNQUFLbEIsSUFBRWlCLElBQUtDLE1BQUlsQixJQUFFO0FBQWdVLG9CQUEvVEQsSUFBRWtPLElBQUduTyxLQUFFLGdCQUFlRCxJQUFFLGdCQUFlRCxLQUFFLFVBQTBCTSxNQUFmLGdCQUFrQ0EsTUFBaEIsbUJBQWtCSCxJQUFFb1AsSUFBR3JQLEtBQUUsa0JBQWlCRCxJQUFFLGtCQUFpQkQsS0FBRSxZQUFVTyxJQUFRZSxLQUFOLE9BQVFDLElBQUU0UCxHQUFHN1AsQ0FBQyxHQUFFeEIsS0FBUU0sS0FBTixPQUFRbUIsSUFBRTRQLEdBQUcvUSxDQUFDLEdBQUVtQixJQUFFLElBQUlwQixFQUFFRCxJQUFFRixLQUFFLFNBQVFzQixHQUFFYixHQUFFVyxDQUFDLEdBQUVHLEVBQUUsU0FBT2hCLEdBQUVnQixFQUFFLGdCQUFjekIsSUFBRUksS0FBRSxNQUFLeUssR0FBR3ZKLENBQUMsTUFBSUMsTUFBSWxCLElBQUUsSUFBSUEsRUFBRUYsR0FBRUQsS0FBRSxTQUFRSSxHQUFFSyxHQUFFVyxDQUFDLEdBQUVqQixFQUFFLFNBQU9MLElBQUVLLEVBQUUsZ0JBQWNJLEdBQUVMLEtBQUVDLElBQUdJLElBQUVMLElBQUtvQixLQUFHbEI7QUFBRUkscUJBQUU7QUFBYSx5QkFBWkwsSUFBRW1CLEdBQUVyQixJQUFFRyxHQUFFSixLQUFFLEdBQU1GLEtBQUVLLEdBQUVMLElBQUVBLEtBQUU0VCxHQUFHNVQsRUFBQztBQUFFRSxzQkFBQUE7QUFBUSx5QkFBSkYsS0FBRSxHQUFNSSxLQUFFRCxHQUFFQyxJQUFFQSxLQUFFd1QsR0FBR3hULEVBQUM7QUFBRUosc0JBQUFBO0FBQUksMkJBQUssSUFBRUUsS0FBRUY7QUFBR0ssMEJBQUV1VCxHQUFHdlQsQ0FBQyxHQUFFSDtBQUFJLDJCQUFLLElBQUVGLEtBQUVFO0FBQUdDLDBCQUNwZnlULEdBQUd6VCxDQUFDLEdBQUVIO0FBQUksMkJBQUtFLFFBQUs7QUFBQywwQkFBR0csTUFBSUYsS0FBVUEsTUFBUCxRQUFVRSxNQUFJRixFQUFFO0FBQVUsOEJBQU1PO0FBQUVMLDBCQUFFdVQsR0FBR3ZULENBQUMsR0FBRUYsSUFBRXlULEdBQUd6VCxDQUFDO29CQUFDO0FBQUNFLHdCQUFFO2tCQUFJOztBQUFNQSxzQkFBRTtBQUFZbUIsc0JBQVAsUUFBVXFTLEdBQUduUyxHQUFFRCxHQUFFRCxHQUFFbkIsR0FBRSxLQUFFLEdBQVNDLE1BQVAsUUFBaUJHLE1BQVAsUUFBVW9ULEdBQUduUyxHQUFFakIsR0FBRUgsR0FBRUQsR0FBRSxJQUFFO2NBQUM7WUFBRTtBQUFDRyxlQUFFO0FBQXlELGtCQUF4RGlCLElBQUVGLElBQUU4UCxHQUFHOVAsQ0FBQyxJQUFFLFFBQU9DLElBQUVDLEVBQUUsWUFBVUEsRUFBRSxTQUFTLFlBQVksR0FBZ0JELE1BQVgsWUFBd0JBLE1BQVYsV0FBc0JDLEVBQUUsU0FBWDtBQUFnQixvQkFBSUosSUFBRWlRO3VCQUFXVCxHQUFHcFAsQ0FBQztBQUFFLG9CQUFHOFA7QUFBR2xRLHNCQUFFMlE7cUJBQU87QUFBQzNRLHNCQUFFeVE7QUFBRyxzQkFBSWpRLElBQUVnUTtnQkFBRTs7QUFBQSxpQkFBTXJRLElBQUVDLEVBQUUsYUFBcUJELEVBQUUsWUFBWSxNQUF4QixZQUF5Q0MsRUFBRSxTQUFmLGNBQStCQSxFQUFFLFNBQVosYUFBb0JKLElBQUUwUTtBQUFJLGtCQUFHMVEsTUFBSUEsSUFBRUEsRUFBRWIsR0FBRWUsQ0FBQyxJQUFHO0FBQUN1UCxtQkFBR3BQLEdBQUVMLEdBQUVWLEdBQUVXLENBQUM7QUFBRSxzQkFBTWQ7Y0FBQztBQUFDcUIsbUJBQUdBLEVBQUVyQixHQUFFaUIsR0FBRUYsQ0FBQyxHQUFlZixNQUFiLGVBQWlCcUIsSUFBRUosRUFBRSxrQkFDdGVJLEVBQUUsY0FBdUJKLEVBQUUsU0FBYixZQUFtQjBFLEdBQUcxRSxHQUFFLFVBQVNBLEVBQUUsS0FBSztZQUFDO0FBQWtCLG9CQUFqQkksSUFBRU4sSUFBRThQLEdBQUc5UCxDQUFDLElBQUUsUUFBY2YsR0FBRTtjQUFDLEtBQUs7QUFBQSxpQkFBYXFRLEdBQUdoUCxDQUFDLEtBQVlBLEVBQUUsb0JBQVgsWUFBMkI4USxLQUFHOVEsR0FBRStRLEtBQUdyUixHQUFFc1IsS0FBRztBQUFLO2NBQU0sS0FBSztBQUFXQSxxQkFBR0QsS0FBR0QsS0FBRztBQUFLO2NBQU0sS0FBSztBQUFZRyxxQkFBRztBQUFHO2NBQU0sS0FBSztjQUFjLEtBQUs7Y0FBVSxLQUFLO0FBQVVBLHFCQUFHLE9BQUdDLEdBQUdyUixHQUFFZixHQUFFVyxDQUFDO0FBQUU7Y0FBTSxLQUFLO0FBQWtCLG9CQUFHb1I7QUFBRztjQUFNLEtBQUs7Y0FBVSxLQUFLO0FBQVFLLG1CQUFHclIsR0FBRWYsR0FBRVcsQ0FBQztZQUFDO0FBQUMsZ0JBQUljO0FBQUUsZ0JBQUc2TjtBQUFHdlAsaUJBQUU7QUFBQyx3QkFBT0YsR0FBRTtrQkFBQyxLQUFLO0FBQW1CLHdCQUFJc0IsSUFBRTtBQUFxQiwwQkFBTXBCO2tCQUFFLEtBQUs7QUFBaUJvQix3QkFBRTtBQUFtQiwwQkFBTXBCO2tCQUNyZixLQUFLO0FBQW9Cb0Isd0JBQUU7QUFBc0IsMEJBQU1wQjtnQkFBQztBQUFDb0Isb0JBQUU7Y0FBTTs7QUFBTTJPLG1CQUFHRixHQUFHL1AsR0FBRUcsQ0FBQyxNQUFJbUIsSUFBRSxzQkFBZ0N0QixNQUFaLGFBQXFCRyxFQUFFLFlBQVIsUUFBa0JtQixJQUFFO0FBQXNCQSxrQkFBSXNPLE1BQVd6UCxFQUFFLFdBQVQsU0FBa0I4UCxNQUEyQjNPLE1BQXZCLHVCQUE4Q0EsTUFBckIsc0JBQXdCMk8sT0FBS3JPLElBQUVxTCxHQUFHLE1BQUlILEtBQUdoTSxHQUFFaU0sS0FBRyxXQUFVRCxLQUFHQSxHQUFHLFFBQU1BLEdBQUcsYUFBWW1ELEtBQUcsUUFBSzVPLElBQUVrUCxHQUFHeFAsR0FBRU8sQ0FBQyxHQUFFLElBQUVELEVBQUUsV0FBU0MsSUFBRSxJQUFJbU4sR0FBR25OLEdBQUV0QixHQUFFLE1BQUtHLEdBQUVXLENBQUMsR0FBRUksRUFBRSxLQUFLLEVBQUMsT0FBTUksR0FBRSxXQUFVRCxFQUFDLENBQUMsR0FBRU8sSUFBRU4sRUFBRSxPQUFLTSxLQUFHQSxJQUFFb08sR0FBRzdQLENBQUMsR0FBU3lCLE1BQVAsU0FBV04sRUFBRSxPQUFLTSxRQUFTQSxJQUFFK04sS0FBR08sR0FBR2xRLEdBQUVHLENBQUMsSUFBRWdRLEdBQUduUSxHQUFFRyxDQUFDLE9BQUVZLElBQUV3UCxHQUFHeFAsR0FBRSxlQUFlLEdBQUUsSUFBRUEsRUFBRSxXQUFTRCxJQUFFLElBQUkyTixHQUFHLGlCQUNuZixlQUFjLE1BQUt0TyxHQUFFVyxDQUFDLEdBQUVJLEVBQUUsS0FBSyxFQUFDLE9BQU1KLEdBQUUsV0FBVUMsRUFBQyxDQUFDLEdBQUVELEVBQUUsT0FBS2M7VUFBRTtBQUFDK08sYUFBR3pQLEdBQUVoQixDQUFDO1FBQUMsQ0FBQztNQUFDO0FBQUMsZUFBU2dULEdBQUdsVCxHQUFFRSxHQUFFQyxHQUFFO0FBQUMsZUFBTSxFQUFDLFVBQVNILEdBQUUsVUFBU0UsR0FBRSxlQUFjQyxFQUFDO01BQUM7QUFBQyxlQUFTb1EsR0FBR3ZRLEdBQUVFLEdBQUU7QUFBQyxpQkFBUUMsSUFBRUQsSUFBRSxXQUFVYSxJQUFFLENBQUMsR0FBU2YsTUFBUCxRQUFVO0FBQUMsY0FBSWMsSUFBRWQsR0FBRW1CLElBQUVMLEVBQUU7QUFBY0EsWUFBRSxRQUFOLEtBQWtCSyxNQUFQLFNBQVdMLElBQUVLLEdBQUVBLElBQUUrRyxHQUFHbEksR0FBRUcsQ0FBQyxHQUFRZ0IsS0FBTixRQUFTSixFQUFFLFFBQVFtUyxHQUFHbFQsR0FBRW1CLEdBQUVMLENBQUMsQ0FBQyxHQUFFSyxJQUFFK0csR0FBR2xJLEdBQUVFLENBQUMsR0FBUWlCLEtBQU4sUUFBU0osRUFBRSxLQUFLbVMsR0FBR2xULEdBQUVtQixHQUFFTCxDQUFDLENBQUMsSUFBR2QsSUFBRUEsRUFBRTtRQUFNO0FBQUMsZUFBT2U7TUFBQztBQUFDLGVBQVNxUyxHQUFHcFQsR0FBRTtBQUFDLFlBQVVBLE1BQVA7QUFBUyxpQkFBTztBQUFLO0FBQUdBLGNBQUVBLEVBQUU7ZUFBYUEsS0FBT0EsRUFBRSxRQUFOO0FBQVcsZUFBT0EsS0FBSTtNQUFJO0FBQzVhLGVBQVNxVCxHQUFHclQsR0FBRUUsR0FBRUMsR0FBRVksR0FBRUQsR0FBRTtBQUFDLGlCQUFRSyxJQUFFakIsRUFBRSxZQUFXZ0IsSUFBRSxDQUFDLEdBQVNmLE1BQVAsUUFBVUEsTUFBSVksS0FBRztBQUFDLGNBQUlFLElBQUVkLEdBQUVhLElBQUVDLEVBQUUsV0FBVSxJQUFFQSxFQUFFO0FBQVUsY0FBVUQsTUFBUCxRQUFVQSxNQUFJRDtBQUFFO0FBQVVFLFlBQUUsUUFBTixLQUFrQixNQUFQLFNBQVdBLElBQUUsR0FBRUgsS0FBR0UsSUFBRWtILEdBQUcvSCxHQUFFZ0IsQ0FBQyxHQUFRSCxLQUFOLFFBQVNFLEVBQUUsUUFBUWdTLEdBQUcvUyxHQUFFYSxHQUFFQyxDQUFDLENBQUMsS0FBR0gsTUFBSUUsSUFBRWtILEdBQUcvSCxHQUFFZ0IsQ0FBQyxHQUFRSCxLQUFOLFFBQVNFLEVBQUUsS0FBS2dTLEdBQUcvUyxHQUFFYSxHQUFFQyxDQUFDLENBQUMsS0FBSWQsSUFBRUEsRUFBRTtRQUFNO0FBQUtlLFVBQUUsV0FBTixLQUFjbEIsRUFBRSxLQUFLLEVBQUMsT0FBTUUsR0FBRSxXQUFVZ0IsRUFBQyxDQUFDO01BQUM7QUFBQyxlQUFTb1MsS0FBSTtNQUFDO0FBQUMsVUFBSUMsS0FBRyxNQUFLQyxLQUFHO0FBQUssZUFBU0MsR0FBR3pULEdBQUVFLEdBQUU7QUFBQyxnQkFBT0YsR0FBRTtVQUFDLEtBQUs7VUFBUyxLQUFLO1VBQVEsS0FBSztVQUFTLEtBQUs7QUFBVyxtQkFBTSxDQUFDLENBQUNFLEVBQUU7UUFBUztBQUFDLGVBQU07TUFBRTtBQUM3YixlQUFTd1QsR0FBRzFULEdBQUVFLEdBQUU7QUFBQyxlQUFtQkYsTUFBYixjQUEyQkEsTUFBWCxZQUEyQkEsTUFBYixjQUEyQixPQUFPRSxFQUFFLFlBQXBCLFlBQXlDLE9BQU9BLEVBQUUsWUFBcEIsWUFBeUMsT0FBT0EsRUFBRSwyQkFBcEIsWUFBb0RBLEVBQUUsNEJBQVQsUUFBd0NBLEVBQUUsd0JBQXdCLFVBQWhDO01BQXNDO0FBQUMsVUFBSXlULEtBQWdCLE9BQU8sY0FBcEIsYUFBK0IsYUFBVyxRQUFPQyxLQUFnQixPQUFPLGdCQUFwQixhQUFpQyxlQUFhO0FBQU8sZUFBU0MsR0FBRzdULEdBQUU7QUFBS0EsVUFBRSxhQUFOLElBQWVBLEVBQUUsY0FBWSxLQUFPQSxFQUFFLGFBQU4sTUFBaUJBLElBQUVBLEVBQUUsTUFBV0EsS0FBTixTQUFVQSxFQUFFLGNBQVk7TUFBSTtBQUM1YyxlQUFTOFQsR0FBRzlULEdBQUU7QUFBQyxlQUFXQSxLQUFOLE1BQVFBLElBQUVBLEVBQUUsYUFBWTtBQUFDLGNBQUlFLElBQUVGLEVBQUU7QUFBUyxjQUFPRSxNQUFKLEtBQVdBLE1BQUo7QUFBTTtRQUFLO0FBQUMsZUFBT0Y7TUFBQztBQUFDLGVBQVMrVCxHQUFHL1QsR0FBRTtBQUFDQSxZQUFFQSxFQUFFO0FBQWdCLGlCQUFRRSxJQUFFLEdBQUVGLEtBQUc7QUFBQyxjQUFPQSxFQUFFLGFBQU4sR0FBZTtBQUFDLGdCQUFJRyxJQUFFSCxFQUFFO0FBQUssZ0JBQVNHLE1BQU4sT0FBZ0JBLE1BQVAsUUFBaUJBLE1BQVAsTUFBUztBQUFDLGtCQUFPRCxNQUFKO0FBQU0sdUJBQU9GO0FBQUVFO1lBQUc7QUFBWUMsb0JBQVAsUUFBVUQ7VUFBRztBQUFDRixjQUFFQSxFQUFFO1FBQWU7QUFBQyxlQUFPO01BQUk7QUFBQyxVQUFJZ1UsS0FBRztBQUFFLGVBQVNDLEdBQUdqVSxHQUFFO0FBQUMsZUFBTSxFQUFDLFVBQVNxRSxJQUFHLFVBQVNyRSxHQUFFLFNBQVFBLEVBQUM7TUFBQztBQUFDLFVBQUlrVSxLQUFHLEtBQUssT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFFQyxLQUFHLGtCQUFnQkQsSUFBR0UsS0FBRyxrQkFBZ0JGLElBQUdmLEtBQUcsc0JBQW9CZSxJQUFHRyxLQUFHLG1CQUFpQkg7QUFDOWQsZUFBUzdKLEdBQUdySyxHQUFFO0FBQUMsWUFBSUUsSUFBRUYsRUFBRW1VLEVBQUU7QUFBRSxZQUFHalU7QUFBRSxpQkFBT0E7QUFBRSxpQkFBUUMsSUFBRUgsRUFBRSxZQUFXRyxLQUFHO0FBQUMsY0FBR0QsSUFBRUMsRUFBRWdULEVBQUUsS0FBR2hULEVBQUVnVSxFQUFFLEdBQUU7QUFBZSxnQkFBZGhVLElBQUVELEVBQUUsV0FBb0JBLEVBQUUsVUFBVCxRQUF1QkMsTUFBUCxRQUFpQkEsRUFBRSxVQUFUO0FBQWUsbUJBQUlILElBQUUrVCxHQUFHL1QsQ0FBQyxHQUFTQSxNQUFQLFFBQVU7QUFBQyxvQkFBR0csSUFBRUgsRUFBRW1VLEVBQUU7QUFBRSx5QkFBT2hVO0FBQUVILG9CQUFFK1QsR0FBRy9ULENBQUM7Y0FBQztBQUFDLG1CQUFPRTtVQUFDO0FBQUNGLGNBQUVHLEdBQUVBLElBQUVILEVBQUU7UUFBVTtBQUFDLGVBQU87TUFBSTtBQUFDLGVBQVNzSCxHQUFHdEgsR0FBRTtBQUFDLGVBQUFBLElBQUVBLEVBQUVtVSxFQUFFLEtBQUduVSxFQUFFbVQsRUFBRSxHQUFRLENBQUNuVCxLQUFPQSxFQUFFLFFBQU4sS0FBZUEsRUFBRSxRQUFOLEtBQWdCQSxFQUFFLFFBQVAsTUFBZ0JBLEVBQUUsUUFBTixJQUFVLE9BQUtBO01BQUM7QUFBQyxlQUFTNlEsR0FBRzdRLEdBQUU7QUFBQyxZQUFPQSxFQUFFLFFBQU4sS0FBZUEsRUFBRSxRQUFOO0FBQVUsaUJBQU9BLEVBQUU7QUFBVSxjQUFNLE1BQU1ELEVBQUUsRUFBRSxDQUFDO01BQUU7QUFBQyxlQUFTd0gsR0FBR3ZILEdBQUU7QUFBQyxlQUFPQSxFQUFFb1UsRUFBRSxLQUFHO01BQUk7QUFDdGIsZUFBU3ZCLEdBQUc3UyxHQUFFO0FBQUMsWUFBSUUsSUFBRUYsRUFBRXFVLEVBQUU7QUFBRSxlQUFTblUsTUFBVCxXQUFhQSxJQUFFRixFQUFFcVUsRUFBRSxJQUFFLG9CQUFJLFFBQVluVTtNQUFDO0FBQUMsVUFBSW9VLEtBQUcsQ0FBQyxHQUFFQyxLQUFHO0FBQUcsZUFBU0MsR0FBR3hVLEdBQUU7QUFBQyxlQUFNLEVBQUMsU0FBUUEsRUFBQztNQUFDO0FBQUMsZUFBU1csR0FBRVgsR0FBRTtBQUFDLFlBQUV1VSxPQUFLdlUsRUFBRSxVQUFRc1UsR0FBR0MsRUFBRSxHQUFFRCxHQUFHQyxFQUFFLElBQUUsTUFBS0E7TUFBSztBQUFDLGVBQVMzVCxHQUFFWixHQUFFRSxHQUFFO0FBQUNxVSxjQUFLRCxHQUFHQyxFQUFFLElBQUV2VSxFQUFFLFNBQVFBLEVBQUUsVUFBUUU7TUFBQztBQUFDLFVBQUl1VSxLQUFHLENBQUMsR0FBRWpULEtBQUVnVCxHQUFHQyxFQUFFLEdBQUVoVCxLQUFFK1MsR0FBRyxLQUFFLEdBQUVFLEtBQUdEO0FBQzVQLGVBQVNFLEdBQUczVSxHQUFFRSxHQUFFO0FBQUMsWUFBSUMsSUFBRUgsRUFBRSxLQUFLO0FBQWEsWUFBRyxDQUFDRztBQUFFLGlCQUFPc1U7QUFBRyxZQUFJMVQsSUFBRWYsRUFBRTtBQUFVLFlBQUdlLEtBQUdBLEVBQUUsZ0RBQThDYjtBQUFFLGlCQUFPYSxFQUFFO0FBQTBDLFlBQUlELElBQUUsQ0FBQyxHQUFFSztBQUFFLGFBQUlBLEtBQUtoQjtBQUFFVyxZQUFFSyxDQUFDLElBQUVqQixFQUFFaUIsQ0FBQztBQUFFLGVBQUFKLE1BQUlmLElBQUVBLEVBQUUsV0FBVUEsRUFBRSw4Q0FBNENFLEdBQUVGLEVBQUUsNENBQTBDYyxJQUFVQTtNQUFDO0FBQUMsZUFBUzhULEdBQUc1VSxHQUFFO0FBQUMsZUFBQUEsSUFBRUEsRUFBRSxtQkFBZ0NBLEtBQVA7TUFBb0I7QUFBQyxlQUFTNlUsS0FBSTtBQUFDbFUsV0FBRWMsRUFBQyxHQUFFZCxHQUFFYSxFQUFDO01BQUM7QUFBQyxlQUFTc1QsR0FBRzlVLEdBQUVFLEdBQUVDLEdBQUU7QUFBQyxZQUFHcUIsR0FBRSxZQUFVaVQ7QUFBRyxnQkFBTSxNQUFNMVUsRUFBRSxHQUFHLENBQUM7QUFBRWEsV0FBRVksSUFBRXRCLENBQUMsR0FBRVUsR0FBRWEsSUFBRXRCLENBQUM7TUFBQztBQUNqZixlQUFTNFUsR0FBRy9VLEdBQUVFLEdBQUVDLEdBQUU7QUFBQyxZQUFJWSxJQUFFZixFQUFFO0FBQWdDLFlBQXRCQSxJQUFFRSxFQUFFLG1CQUFrQyxPQUFPYSxFQUFFLG1CQUF0QjtBQUFzQyxpQkFBT1o7QUFBRVksWUFBRUEsRUFBRSxnQkFBZ0I7QUFBRSxpQkFBUUQsS0FBS0M7QUFBRSxjQUFHLEVBQUVELEtBQUtkO0FBQUcsa0JBQU0sTUFBTUQsRUFBRSxLQUFJaUYsR0FBRzlFLENBQUMsS0FBRyxXQUFVWSxDQUFDLENBQUM7QUFBRSxlQUFPTSxHQUFFLENBQUMsR0FBRWpCLEdBQUVZLENBQUM7TUFBQztBQUFDLGVBQVNpVSxHQUFHaFYsR0FBRTtBQUFDLGVBQUFBLEtBQUdBLElBQUVBLEVBQUUsY0FBWUEsRUFBRSw2Q0FBMkN5VSxJQUFHQyxLQUFHbFQsR0FBRSxTQUFRWixHQUFFWSxJQUFFeEIsQ0FBQyxHQUFFWSxHQUFFYSxJQUFFQSxHQUFFLE9BQU8sR0FBUTtNQUFFO0FBQUMsZUFBU3dULEdBQUdqVixHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBSVksSUFBRWYsRUFBRTtBQUFVLFlBQUcsQ0FBQ2U7QUFBRSxnQkFBTSxNQUFNaEIsRUFBRSxHQUFHLENBQUM7QUFBRUksYUFBR0gsSUFBRStVLEdBQUcvVSxHQUFFRSxHQUFFd1UsRUFBRSxHQUFFM1QsRUFBRSw0Q0FBMENmLEdBQUVXLEdBQUVjLEVBQUMsR0FBRWQsR0FBRWEsRUFBQyxHQUFFWixHQUFFWSxJQUFFeEIsQ0FBQyxLQUFHVyxHQUFFYyxFQUFDLEdBQUViLEdBQUVhLElBQUV0QixDQUFDO01BQUM7QUFDL2UsVUFBSStVLEtBQUcsTUFBS0MsS0FBRyxNQUFLQyxLQUFHM1YsR0FBRSwwQkFBeUI0VixLQUFHNVYsR0FBRSwyQkFBMEI2VixLQUFHN1YsR0FBRSx5QkFBd0I4VixLQUFHOVYsR0FBRSxzQkFBcUIrVixLQUFHL1YsR0FBRSx1QkFBc0JnVyxLQUFHaFcsR0FBRSxjQUFhaVcsS0FBR2pXLEdBQUUsa0NBQWlDa1csS0FBR2xXLEdBQUUsNEJBQTJCbVcsS0FBR25XLEdBQUUsK0JBQThCb1csS0FBR3BXLEdBQUUseUJBQXdCcVcsS0FBR3JXLEdBQUUsc0JBQXFCc1csS0FBR3RXLEdBQUUsdUJBQXNCdVcsS0FBRyxDQUFDLEdBQUVDLEtBQVlULE9BQVQsU0FBWUEsS0FBRyxXQUFVO01BQUMsR0FBRVUsS0FBRyxNQUFLQyxLQUFHLE1BQUtDLEtBQUcsT0FBR0MsS0FBR1osR0FBRyxHQUFFL1QsS0FBRSxNQUFJMlUsS0FBR1osS0FBRyxXQUFVO0FBQUMsZUFBT0EsR0FBRyxJQUFFWTtNQUFFO0FBQ3hkLGVBQVNDLEtBQUk7QUFBQyxnQkFBT1osR0FBRyxHQUFFO1VBQUMsS0FBS0M7QUFBRyxtQkFBTztVQUFHLEtBQUtDO0FBQUcsbUJBQU87VUFBRyxLQUFLQztBQUFHLG1CQUFPO1VBQUcsS0FBS0M7QUFBRyxtQkFBTztVQUFHLEtBQUtDO0FBQUcsbUJBQU87VUFBRztBQUFRLGtCQUFNLE1BQU1oVyxFQUFFLEdBQUcsQ0FBQztRQUFFO01BQUM7QUFBQyxlQUFTd1csR0FBR3ZXLEdBQUU7QUFBQyxnQkFBT0EsR0FBRTtVQUFDLEtBQUs7QUFBRyxtQkFBTzJWO1VBQUcsS0FBSztBQUFHLG1CQUFPQztVQUFHLEtBQUs7QUFBRyxtQkFBT0M7VUFBRyxLQUFLO0FBQUcsbUJBQU9DO1VBQUcsS0FBSztBQUFHLG1CQUFPQztVQUFHO0FBQVEsa0JBQU0sTUFBTWhXLEVBQUUsR0FBRyxDQUFDO1FBQUU7TUFBQztBQUFDLGVBQVN5VyxHQUFHeFcsR0FBRUUsR0FBRTtBQUFDLGVBQUFGLElBQUV1VyxHQUFHdlcsQ0FBQyxHQUFTb1YsR0FBR3BWLEdBQUVFLENBQUM7TUFBQztBQUFDLGVBQVN1VyxHQUFHelcsR0FBRUUsR0FBRUMsR0FBRTtBQUFDLGVBQUFILElBQUV1VyxHQUFHdlcsQ0FBQyxHQUFTcVYsR0FBR3JWLEdBQUVFLEdBQUVDLENBQUM7TUFBQztBQUFDLGVBQVN1VyxLQUFJO0FBQUMsWUFBVVAsT0FBUCxNQUFVO0FBQUMsY0FBSW5XLElBQUVtVztBQUFHQSxlQUFHLE1BQUtiLEdBQUd0VixDQUFDO1FBQUM7QUFBQzJXLFdBQUc7TUFBQztBQUMvYSxlQUFTQSxLQUFJO0FBQUMsWUFBRyxDQUFDUCxNQUFXRixPQUFQLE1BQVU7QUFBQ0UsZUFBRztBQUFHLGNBQUlwVyxJQUFFO0FBQUUsY0FBRztBQUFDLGdCQUFJRSxJQUFFZ1c7QUFBR00sZUFBRyxJQUFHLFdBQVU7QUFBQyxxQkFBS3hXLElBQUVFLEVBQUUsUUFBT0YsS0FBSTtBQUFDLG9CQUFJRyxJQUFFRCxFQUFFRixDQUFDO0FBQUU7QUFBR0csc0JBQUVBLEVBQUUsSUFBRTt1QkFBZUEsTUFBUDtjQUFTO1lBQUMsQ0FBQyxHQUFFK1YsS0FBRztVQUFJLFNBQU8vVixHQUFFO0FBQUMsa0JBQWErVixPQUFQLFNBQVlBLEtBQUdBLEdBQUcsTUFBTWxXLElBQUUsQ0FBQyxJQUFHcVYsR0FBR00sSUFBR2UsRUFBRSxHQUFFdlc7VUFBRSxVQUFBO0FBQVNpVyxpQkFBRztVQUFFO1FBQUM7TUFBQztBQUFDLFVBQUlRLEtBQUdyVCxHQUFHO0FBQXdCLGVBQVNzVCxHQUFHN1csR0FBRUUsR0FBRTtBQUFDLFlBQUdGLEtBQUdBLEVBQUUsY0FBYTtBQUFDRSxjQUFFa0IsR0FBRSxDQUFDLEdBQUVsQixDQUFDLEdBQUVGLElBQUVBLEVBQUU7QUFBYSxtQkFBUUcsS0FBS0g7QUFBV0UsY0FBRUMsQ0FBQyxNQUFaLFdBQWdCRCxFQUFFQyxDQUFDLElBQUVILEVBQUVHLENBQUM7QUFBRyxpQkFBT0Q7UUFBQztBQUFDLGVBQU9BO01BQUM7QUFBQyxVQUFJNFcsS0FBR3RDLEdBQUcsSUFBSSxHQUFFdUMsS0FBRyxNQUFLQyxLQUFHLE1BQUtDLEtBQUc7QUFBSyxlQUFTQyxLQUFJO0FBQUNELGFBQUdELEtBQUdELEtBQUc7TUFBSTtBQUNoYyxlQUFTSSxHQUFHblgsR0FBRTtBQUFDLFlBQUlFLElBQUU0VyxHQUFHO0FBQVFuVyxXQUFFbVcsRUFBRSxHQUFFOVcsRUFBRSxLQUFLLFNBQVMsZ0JBQWNFO01BQUM7QUFBQyxlQUFTa1gsR0FBR3BYLEdBQUVFLEdBQUU7QUFBQyxlQUFZRixNQUFQLFFBQVU7QUFBQyxjQUFJRyxJQUFFSCxFQUFFO0FBQVUsZUFBSUEsRUFBRSxhQUFXRSxPQUFLQSxHQUFFO0FBQUEsZ0JBQVVDLE1BQVAsU0FBV0EsRUFBRSxhQUFXRCxPQUFLQTtBQUFFO0FBQVdDLGNBQUUsY0FBWUQ7VUFBQUE7QUFBT0YsY0FBRSxjQUFZRSxHQUFTQyxNQUFQLFNBQVdBLEVBQUUsY0FBWUQ7QUFBR0YsY0FBRUEsRUFBRTtRQUFNO01BQUM7QUFBQyxlQUFTcVgsR0FBR3JYLEdBQUVFLEdBQUU7QUFBQzZXLGFBQUcvVyxHQUFFaVgsS0FBR0QsS0FBRyxNQUFLaFgsSUFBRUEsRUFBRSxjQUFvQkEsTUFBUCxRQUFpQkEsRUFBRSxpQkFBVCxTQUE2QkEsRUFBRSxRQUFNRSxNQUFLb1gsS0FBRyxPQUFJdFgsRUFBRSxlQUFhO01BQUs7QUFDNVksZUFBU3VYLEdBQUd2WCxHQUFFRSxHQUFFO0FBQUMsWUFBRytXLE9BQUtqWCxLQUFRRSxNQUFMLFNBQVlBLE1BQUo7QUFBdUcsZUFBbEYsT0FBT0EsS0FBbEIsWUFBa0NBLE1BQWIsZ0JBQWUrVyxLQUFHalgsR0FBRUUsSUFBRSxhQUFXQSxJQUFFLEVBQUMsU0FBUUYsR0FBRSxjQUFhRSxHQUFFLE1BQUssS0FBSSxHQUFZOFcsT0FBUCxNQUFVO0FBQUMsZ0JBQVVELE9BQVA7QUFBVSxvQkFBTSxNQUFNaFgsRUFBRSxHQUFHLENBQUM7QUFBRWlYLGlCQUFHOVcsR0FBRTZXLEdBQUcsZUFBYSxFQUFDLE9BQU0sR0FBRSxjQUFhN1csR0FBRSxZQUFXLEtBQUk7VUFBQztBQUFNOFcsaUJBQUdBLEdBQUcsT0FBSzlXO0FBQUUsZUFBT0YsRUFBRTtNQUFhO0FBQUMsVUFBSXdYLEtBQUc7QUFBRyxlQUFTQyxHQUFHelgsR0FBRTtBQUFDQSxVQUFFLGNBQVksRUFBQyxXQUFVQSxFQUFFLGVBQWMsaUJBQWdCLE1BQUssZ0JBQWUsTUFBSyxRQUFPLEVBQUMsU0FBUSxLQUFJLEdBQUUsU0FBUSxLQUFJO01BQUM7QUFDL2EsZUFBUzBYLEdBQUcxWCxHQUFFRSxHQUFFO0FBQUNGLFlBQUVBLEVBQUUsYUFBWUUsRUFBRSxnQkFBY0YsTUFBSUUsRUFBRSxjQUFZLEVBQUMsV0FBVUYsRUFBRSxXQUFVLGlCQUFnQkEsRUFBRSxpQkFBZ0IsZ0JBQWVBLEVBQUUsZ0JBQWUsUUFBT0EsRUFBRSxRQUFPLFNBQVFBLEVBQUUsUUFBTztNQUFFO0FBQUMsZUFBUzJYLEdBQUczWCxHQUFFRSxHQUFFO0FBQUMsZUFBTSxFQUFDLFdBQVVGLEdBQUUsTUFBS0UsR0FBRSxLQUFJLEdBQUUsU0FBUSxNQUFLLFVBQVMsTUFBSyxNQUFLLEtBQUk7TUFBQztBQUFDLGVBQVMwWCxHQUFHNVgsR0FBRUUsR0FBRTtBQUFpQixZQUFoQkYsSUFBRUEsRUFBRSxhQUFzQkEsTUFBUCxNQUFTO0FBQUNBLGNBQUVBLEVBQUU7QUFBTyxjQUFJRyxJQUFFSCxFQUFFO0FBQWVHLGdCQUFQLE9BQVNELEVBQUUsT0FBS0EsS0FBR0EsRUFBRSxPQUFLQyxFQUFFLE1BQUtBLEVBQUUsT0FBS0QsSUFBR0YsRUFBRSxVQUFRRTtRQUFDO01BQUM7QUFDdlosZUFBUzJYLEdBQUc3WCxHQUFFRSxHQUFFO0FBQUMsWUFBSUMsSUFBRUgsRUFBRSxhQUFZZSxJQUFFZixFQUFFO0FBQVUsWUFBVWUsTUFBUCxTQUFXQSxJQUFFQSxFQUFFLGFBQVlaLE1BQUlZLElBQUc7QUFBQyxjQUFJRCxJQUFFLE1BQUtLLElBQUU7QUFBeUIsY0FBcEJoQixJQUFFQSxFQUFFLGlCQUEwQkEsTUFBUCxNQUFTO0FBQUMsZUFBRTtBQUFDLGtCQUFJZSxJQUFFLEVBQUMsV0FBVWYsRUFBRSxXQUFVLE1BQUtBLEVBQUUsTUFBSyxLQUFJQSxFQUFFLEtBQUksU0FBUUEsRUFBRSxTQUFRLFVBQVNBLEVBQUUsVUFBUyxNQUFLLEtBQUk7QUFBU2dCLG9CQUFQLE9BQVNMLElBQUVLLElBQUVELElBQUVDLElBQUVBLEVBQUUsT0FBS0QsR0FBRWYsSUFBRUEsRUFBRTtZQUFJLFNBQWNBLE1BQVA7QUFBaUJnQixrQkFBUCxPQUFTTCxJQUFFSyxJQUFFakIsSUFBRWlCLElBQUVBLEVBQUUsT0FBS2pCO1VBQUM7QUFBTVksZ0JBQUVLLElBQUVqQjtBQUFFQyxjQUFFLEVBQUMsV0FBVVksRUFBRSxXQUFVLGlCQUFnQkQsR0FBRSxnQkFBZUssR0FBRSxRQUFPSixFQUFFLFFBQU8sU0FBUUEsRUFBRSxRQUFPLEdBQUVmLEVBQUUsY0FBWUc7QUFBRTtRQUFNO0FBQUNILFlBQUVHLEVBQUUsZ0JBQXNCSCxNQUFQLE9BQVNHLEVBQUUsa0JBQWdCRCxJQUFFRixFQUFFLE9BQ25mRSxHQUFFQyxFQUFFLGlCQUFlRDtNQUFDO0FBQ3BCLGVBQVM0WCxHQUFHOVgsR0FBRUUsR0FBRUMsR0FBRVksR0FBRTtBQUFDLFlBQUlELElBQUVkLEVBQUU7QUFBWXdYLGFBQUc7QUFBRyxZQUFJclcsSUFBRUwsRUFBRSxpQkFBZ0JJLElBQUVKLEVBQUUsZ0JBQWVHLElBQUVILEVBQUUsT0FBTztBQUFRLFlBQVVHLE1BQVAsTUFBUztBQUFDSCxZQUFFLE9BQU8sVUFBUTtBQUFLLGNBQUlFLElBQUVDLEdBQUUsSUFBRUQsRUFBRTtBQUFLQSxZQUFFLE9BQUssTUFBWUUsTUFBUCxPQUFTQyxJQUFFLElBQUVELEVBQUUsT0FBSyxHQUFFQSxJQUFFRjtBQUFFLGNBQUlyQyxJQUFFcUIsRUFBRTtBQUFVLGNBQVVyQixNQUFQLE1BQVM7QUFBQ0EsZ0JBQUVBLEVBQUU7QUFBWSxnQkFBSXlCLElBQUV6QixFQUFFO0FBQWV5QixrQkFBSWMsTUFBV2QsTUFBUCxPQUFTekIsRUFBRSxrQkFBZ0IsSUFBRXlCLEVBQUUsT0FBSyxHQUFFekIsRUFBRSxpQkFBZXFDO1VBQUU7UUFBQztBQUFDLFlBQVVHLE1BQVAsTUFBUztBQUFDZixjQUFFVSxFQUFFLFdBQVVJLElBQUUsR0FBRXZDLElBQUUsSUFBRXFDLElBQUU7QUFBSyxhQUFFO0FBQUNDLGdCQUFFRSxFQUFFO0FBQUssZ0JBQUk1QixJQUFFNEIsRUFBRTtBQUFVLGlCQUFJSixJQUFFRSxPQUFLQSxHQUFFO0FBQVF0QyxvQkFBUCxTQUFXQSxJQUFFQSxFQUFFLE9BQUssRUFBQyxXQUFVWSxHQUFFLE1BQUssR0FBRSxLQUFJNEIsRUFBRSxLQUFJLFNBQVFBLEVBQUUsU0FBUSxVQUFTQSxFQUFFLFVBQ3JmLE1BQUssS0FBSTtBQUFHbkIsaUJBQUU7QUFBQyxvQkFBSU0sSUFBRU4sR0FBRUYsSUFBRXFCO0FBQVUsd0JBQVJGLElBQUVmLEdBQUVYLElBQUVZLEdBQVNMLEVBQUUsS0FBSTtrQkFBQyxLQUFLO0FBQWMsd0JBQVpRLElBQUVSLEVBQUUsU0FBd0IsT0FBT1EsS0FBcEIsWUFBc0I7QUFBQ0YsMEJBQUVFLEVBQUUsS0FBS2YsR0FBRWEsR0FBRWEsQ0FBQztBQUFFLDRCQUFNakI7b0JBQUM7QUFBQ0ksd0JBQUVFO0FBQUUsMEJBQU1OO2tCQUFFLEtBQUs7QUFBRU0sc0JBQUUsUUFBTUEsRUFBRSxRQUFNLFFBQU07a0JBQUcsS0FBSztBQUFzRCx3QkFBcERBLElBQUVSLEVBQUUsU0FBUW1CLElBQWUsT0FBT1gsS0FBcEIsYUFBc0JBLEVBQUUsS0FBS2YsR0FBRWEsR0FBRWEsQ0FBQyxJQUFFWCxHQUFZVyxLQUFQO0FBQXFCLDRCQUFNakI7QUFBRUksd0JBQUVnQixHQUFFLENBQUMsR0FBRWhCLEdBQUVhLENBQUM7QUFBRSwwQkFBTWpCO2tCQUFFLEtBQUs7QUFBRXdYLHlCQUFHO2dCQUFFO2NBQUM7QUFBUXJXLGdCQUFFLGFBQVQsU0FBb0JuQixFQUFFLFNBQU8sSUFBR2lCLElBQUVILEVBQUUsU0FBZUcsTUFBUCxPQUFTSCxFQUFFLFVBQVEsQ0FBQ0ssQ0FBQyxJQUFFRixFQUFFLEtBQUtFLENBQUM7WUFBRTtBQUFNNUIsa0JBQUUsRUFBQyxXQUFVQSxHQUFFLE1BQUswQixHQUFFLEtBQUlFLEVBQUUsS0FBSSxTQUFRQSxFQUFFLFNBQVEsVUFBU0EsRUFBRSxVQUFTLE1BQUssS0FBSSxHQUFTeEMsTUFBUCxRQUFVLElBQUVBLElBQUVZLEdBQUV5QixJQUFFWixLQUFHekIsSUFBRUEsRUFBRSxPQUFLWSxHQUFFMkIsS0FBR0Q7QUFBVyxnQkFBVEUsSUFBRUEsRUFBRSxNQUM1ZUEsTUFEb2YsTUFDbGY7QUFBQSxrQkFBR0YsSUFBRUgsRUFBRSxPQUFPLFNBQWVHLE1BQVA7QUFBUztBQUFXRSxrQkFBRUYsRUFBRSxNQUFLQSxFQUFFLE9BQUssTUFBS0gsRUFBRSxpQkFBZUcsR0FBRUgsRUFBRSxPQUFPLFVBQVE7WUFBQTtVQUFJLFNBQU87QUFBVW5DLGdCQUFQLFNBQVdxQyxJQUFFWixJQUFHVSxFQUFFLFlBQVVFLEdBQUVGLEVBQUUsa0JBQWdCLEdBQUVBLEVBQUUsaUJBQWVuQyxHQUFFb1osTUFBSTdXLEdBQUVsQixFQUFFLFFBQU1rQixHQUFFbEIsRUFBRSxnQkFBY0k7UUFBQztNQUFDO0FBQUMsZUFBUzRYLEdBQUdoWSxHQUFFRSxHQUFFQyxHQUFFO0FBQTRCLFlBQTNCSCxJQUFFRSxFQUFFLFNBQVFBLEVBQUUsVUFBUSxNQUFlRixNQUFQO0FBQVMsZUFBSUUsSUFBRSxHQUFFQSxJQUFFRixFQUFFLFFBQU9FLEtBQUk7QUFBQyxnQkFBSWEsSUFBRWYsRUFBRUUsQ0FBQyxHQUFFWSxJQUFFQyxFQUFFO0FBQVMsZ0JBQVVELE1BQVAsTUFBUztBQUFxQixrQkFBcEJDLEVBQUUsV0FBUyxNQUFLQSxJQUFFWixHQUFrQixPQUFPVyxLQUFwQjtBQUFzQixzQkFBTSxNQUFNZixFQUFFLEtBQUllLENBQUMsQ0FBQztBQUFFQSxnQkFBRSxLQUFLQyxDQUFDO1lBQUM7VUFBQztNQUFDO0FBQUMsVUFBSWtYLEtBQUksSUFBSTFWLEdBQUcsVUFBQSxFQUFXO0FBQzNiLGVBQVMyVixHQUFHbFksR0FBRUUsR0FBRUMsR0FBRVksR0FBRTtBQUFDYixZQUFFRixFQUFFLGVBQWNHLElBQUVBLEVBQUVZLEdBQUViLENBQUMsR0FBRUMsSUFBU0EsS0FBUCxPQUFxQkQsSUFBRWtCLEdBQUUsQ0FBQyxHQUFFbEIsR0FBRUMsQ0FBQyxHQUFFSCxFQUFFLGdCQUFjRyxHQUFNSCxFQUFFLFVBQU4sTUFBY0EsRUFBRSxZQUFZLFlBQVVHO01BQUU7QUFDN0ksVUFBSWdZLEtBQUcsRUFBQyxXQUFVLFNBQVNuWSxHQUFFO0FBQUMsZ0JBQU9BLElBQUVBLEVBQUUsbUJBQWlCNkksR0FBRzdJLENBQUMsTUFBSUEsSUFBRTtNQUFFLEdBQUUsaUJBQWdCLFNBQVNBLEdBQUVFLEdBQUVDLEdBQUU7QUFBQ0gsWUFBRUEsRUFBRTtBQUFnQixZQUFJZSxJQUFFcVgsR0FBRyxHQUFFdFgsSUFBRXVYLEdBQUdyWSxDQUFDLEdBQUVtQixJQUFFd1csR0FBRzVXLEdBQUVELENBQUM7QUFBRUssVUFBRSxVQUFRakIsR0FBcUJDLEtBQVAsU0FBV2dCLEVBQUUsV0FBU2hCLElBQUd5WCxHQUFHNVgsR0FBRW1CLENBQUMsR0FBRW1YLEdBQUd0WSxHQUFFYyxHQUFFQyxDQUFDO01BQUMsR0FBRSxxQkFBb0IsU0FBU2YsR0FBRUUsR0FBRUMsR0FBRTtBQUFDSCxZQUFFQSxFQUFFO0FBQWdCLFlBQUllLElBQUVxWCxHQUFHLEdBQUV0WCxJQUFFdVgsR0FBR3JZLENBQUMsR0FBRW1CLElBQUV3VyxHQUFHNVcsR0FBRUQsQ0FBQztBQUFFSyxVQUFFLE1BQUksR0FBRUEsRUFBRSxVQUFRakIsR0FBcUJDLEtBQVAsU0FBV2dCLEVBQUUsV0FBU2hCLElBQUd5WCxHQUFHNVgsR0FBRW1CLENBQUMsR0FBRW1YLEdBQUd0WSxHQUFFYyxHQUFFQyxDQUFDO01BQUMsR0FBRSxvQkFBbUIsU0FBU2YsR0FBRUUsR0FBRTtBQUFDRixZQUFFQSxFQUFFO0FBQWdCLFlBQUlHLElBQUVpWSxHQUFHLEdBQUVyWCxJQUFFc1gsR0FBR3JZLENBQUMsR0FBRWMsSUFBRTZXLEdBQUd4WCxHQUFFWSxDQUFDO0FBQUVELFVBQUUsTUFBSSxHQUFxQlosS0FBUCxTQUFXWSxFQUFFLFdBQ2pmWixJQUFHMFgsR0FBRzVYLEdBQUVjLENBQUMsR0FBRXdYLEdBQUd0WSxHQUFFZSxHQUFFWixDQUFDO01BQUMsRUFBQztBQUFFLGVBQVNvWSxHQUFHdlksR0FBRUUsR0FBRUMsR0FBRVksR0FBRUQsR0FBRUssR0FBRUQsR0FBRTtBQUFDLGVBQUFsQixJQUFFQSxFQUFFLFdBQTZCLE9BQU9BLEVBQUUseUJBQXRCLGFBQTRDQSxFQUFFLHNCQUFzQmUsR0FBRUksR0FBRUQsQ0FBQyxJQUFFaEIsRUFBRSxhQUFXQSxFQUFFLFVBQVUsdUJBQXFCLENBQUMwUixHQUFHelIsR0FBRVksQ0FBQyxLQUFHLENBQUM2USxHQUFHOVEsR0FBRUssQ0FBQyxJQUFFO01BQUU7QUFDcE4sZUFBU3FYLEdBQUd4WSxHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBSVksSUFBRSxPQUFHRCxJQUFFMlQsSUFBT3RULElBQUVqQixFQUFFO0FBQVksZUFBVyxPQUFPaUIsS0FBbEIsWUFBNEJBLE1BQVAsT0FBU0EsSUFBRW9XLEdBQUdwVyxDQUFDLEtBQUdMLElBQUU4VCxHQUFHMVUsQ0FBQyxJQUFFd1UsS0FBR2xULEdBQUUsU0FBUVQsSUFBRWIsRUFBRSxjQUFhaUIsS0FBR0osSUFBU0EsS0FBUCxRQUFzQjRULEdBQUczVSxHQUFFYyxDQUFDLElBQUUyVCxLQUFJdlUsSUFBRSxJQUFJQSxFQUFFQyxHQUFFZ0IsQ0FBQyxHQUFFbkIsRUFBRSxnQkFBcUJFLEVBQUUsVUFBVCxRQUF5QkEsRUFBRSxVQUFYLFNBQWlCQSxFQUFFLFFBQU0sTUFBS0EsRUFBRSxVQUFRaVksSUFBR25ZLEVBQUUsWUFBVUUsR0FBRUEsRUFBRSxrQkFBZ0JGLEdBQUVlLE1BQUlmLElBQUVBLEVBQUUsV0FBVUEsRUFBRSw4Q0FBNENjLEdBQUVkLEVBQUUsNENBQTBDbUIsSUFBVWpCO01BQUM7QUFDNVosZUFBU3VZLEdBQUd6WSxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQUNmLFlBQUVFLEVBQUUsT0FBbUIsT0FBT0EsRUFBRSw2QkFBdEIsY0FBaURBLEVBQUUsMEJBQTBCQyxHQUFFWSxDQUFDLEdBQWUsT0FBT2IsRUFBRSxvQ0FBdEIsY0FBd0RBLEVBQUUsaUNBQWlDQyxHQUFFWSxDQUFDLEdBQUViLEVBQUUsVUFBUUYsS0FBR21ZLEdBQUcsb0JBQW9CalksR0FBRUEsRUFBRSxPQUFNLElBQUk7TUFBQztBQUNwUSxlQUFTd1ksR0FBRzFZLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUU7QUFBQyxZQUFJRCxJQUFFZCxFQUFFO0FBQVVjLFVBQUUsUUFBTVgsR0FBRVcsRUFBRSxRQUFNZCxFQUFFLGVBQWNjLEVBQUUsT0FBS21YLElBQUdSLEdBQUd6WCxDQUFDO0FBQUUsWUFBSW1CLElBQUVqQixFQUFFO0FBQXVCLGVBQU9pQixLQUFsQixZQUE0QkEsTUFBUCxPQUFTTCxFQUFFLFVBQVF5VyxHQUFHcFcsQ0FBQyxLQUFHQSxJQUFFeVQsR0FBRzFVLENBQUMsSUFBRXdVLEtBQUdsVCxHQUFFLFNBQVFWLEVBQUUsVUFBUTZULEdBQUczVSxHQUFFbUIsQ0FBQyxJQUFHMlcsR0FBRzlYLEdBQUVHLEdBQUVXLEdBQUVDLENBQUMsR0FBRUQsRUFBRSxRQUFNZCxFQUFFLGVBQWNtQixJQUFFakIsRUFBRSwwQkFBc0MsT0FBT2lCLEtBQXBCLGVBQXdCK1csR0FBR2xZLEdBQUVFLEdBQUVpQixHQUFFaEIsQ0FBQyxHQUFFVyxFQUFFLFFBQU1kLEVBQUUsZ0JBQTRCLE9BQU9FLEVBQUUsNEJBQXRCLGNBQTZELE9BQU9ZLEVBQUUsMkJBQXRCLGNBQTRELE9BQU9BLEVBQUUsNkJBQXRCLGNBQThELE9BQU9BLEVBQUUsc0JBQXRCLGVBQ2pkWixJQUFFWSxFQUFFLE9BQW1CLE9BQU9BLEVBQUUsc0JBQXRCLGNBQTBDQSxFQUFFLG1CQUFtQixHQUFlLE9BQU9BLEVBQUUsNkJBQXRCLGNBQWlEQSxFQUFFLDBCQUEwQixHQUFFWixNQUFJWSxFQUFFLFNBQU9xWCxHQUFHLG9CQUFvQnJYLEdBQUVBLEVBQUUsT0FBTSxJQUFJLEdBQUVnWCxHQUFHOVgsR0FBRUcsR0FBRVcsR0FBRUMsQ0FBQyxHQUFFRCxFQUFFLFFBQU1kLEVBQUUsZ0JBQTRCLE9BQU9jLEVBQUUscUJBQXRCLGVBQTBDZCxFQUFFLFNBQU87TUFBRTtBQUFDLFVBQUkyWSxLQUFHLE1BQU07QUFDdlQsZUFBU0MsR0FBRzVZLEdBQUVFLEdBQUVDLEdBQUU7QUFBUyxZQUFSSCxJQUFFRyxFQUFFLEtBQWNILE1BQVAsUUFBdUIsT0FBT0EsS0FBcEIsY0FBa0MsT0FBT0EsS0FBbEIsVUFBb0I7QUFBQyxjQUFHRyxFQUFFLFFBQU87QUFBWSxnQkFBWEEsSUFBRUEsRUFBRSxRQUFVQSxHQUFFO0FBQUMsa0JBQU9BLEVBQUUsUUFBTjtBQUFVLHNCQUFNLE1BQU1KLEVBQUUsR0FBRyxDQUFDO0FBQUUsa0JBQUlnQixJQUFFWixFQUFFO1lBQVM7QUFBQyxnQkFBRyxDQUFDWTtBQUFFLG9CQUFNLE1BQU1oQixFQUFFLEtBQUlDLENBQUMsQ0FBQztBQUFFLGdCQUFJYyxJQUFFLEtBQUdkO0FBQUUsbUJBQVVFLE1BQVAsUUFBaUJBLEVBQUUsUUFBVCxRQUEyQixPQUFPQSxFQUFFLE9BQXRCLGNBQTJCQSxFQUFFLElBQUksZUFBYVksSUFBU1osRUFBRSxPQUFJQSxJQUFFLFNBQVNGLEdBQUU7QUFBQyxrQkFBSUUsSUFBRWEsRUFBRTtBQUFLYixvQkFBSStYLE9BQUsvWCxJQUFFYSxFQUFFLE9BQUssQ0FBQyxJQUFVZixNQUFQLE9BQVMsT0FBT0UsRUFBRVksQ0FBQyxJQUFFWixFQUFFWSxDQUFDLElBQUVkO1lBQUMsR0FBRUUsRUFBRSxhQUFXWSxHQUFTWjtVQUFDO0FBQUMsY0FBYyxPQUFPRixLQUFsQjtBQUFvQixrQkFBTSxNQUFNRCxFQUFFLEdBQUcsQ0FBQztBQUFFLGNBQUcsQ0FBQ0ksRUFBRTtBQUFPLGtCQUFNLE1BQU1KLEVBQUUsS0FBSUMsQ0FBQyxDQUFDO1FBQUU7QUFBQyxlQUFPQTtNQUFDO0FBQ2plLGVBQVM2WSxHQUFHN1ksR0FBRUUsR0FBRTtBQUFDLFlBQWdCRixFQUFFLFNBQWY7QUFBb0IsZ0JBQU0sTUFBTUQsRUFBRSxJQUF1QixPQUFPLFVBQVUsU0FBUyxLQUFLRyxDQUFDLE1BQXBELG9CQUFzRCx1QkFBcUIsT0FBTyxLQUFLQSxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUUsTUFBSUEsQ0FBQyxDQUFDO01BQUU7QUFDdEssZUFBUzRZLEdBQUc5WSxHQUFFO0FBQUMsaUJBQVNFLEVBQUVBLEdBQUVDLEdBQUU7QUFBQyxjQUFHSCxHQUFFO0FBQUMsZ0JBQUllLEtBQUViLEVBQUU7QUFBa0JhLFlBQUFBLE9BQVAsUUFBVUEsR0FBRSxhQUFXWixHQUFFRCxFQUFFLGFBQVdDLEtBQUdELEVBQUUsY0FBWUEsRUFBRSxhQUFXQyxHQUFFQSxFQUFFLGFBQVcsTUFBS0EsRUFBRSxRQUFNO1VBQUM7UUFBQztBQUFDLGlCQUFTQSxFQUFFQSxHQUFFWSxHQUFFO0FBQUMsY0FBRyxDQUFDZjtBQUFFLG1CQUFPO0FBQUssaUJBQVllLE1BQVA7QUFBVWIsY0FBRUMsR0FBRVksQ0FBQyxHQUFFQSxJQUFFQSxFQUFFO0FBQVEsaUJBQU87UUFBSTtBQUFDLGlCQUFTQSxFQUFFZixHQUFFRSxHQUFFO0FBQUMsZUFBSUYsSUFBRSxvQkFBSSxPQUFXRSxNQUFQO0FBQWlCQSxjQUFFLFFBQVQsT0FBYUYsRUFBRSxJQUFJRSxFQUFFLEtBQUlBLENBQUMsSUFBRUYsRUFBRSxJQUFJRSxFQUFFLE9BQU1BLENBQUMsR0FBRUEsSUFBRUEsRUFBRTtBQUFRLGlCQUFPRjtRQUFDO0FBQUMsaUJBQVNjLEVBQUVkLEdBQUVFLEdBQUU7QUFBQyxpQkFBQUYsSUFBRStZLEdBQUcvWSxHQUFFRSxDQUFDLEdBQUVGLEVBQUUsUUFBTSxHQUFFQSxFQUFFLFVBQVEsTUFBWUE7UUFBQztBQUFDLGlCQUFTbUIsRUFBRWpCLEdBQUVDLEdBQUVZLElBQUU7QUFBVyxpQkFBVmIsRUFBRSxRQUFNYSxJQUFNZixLQUFXZSxLQUFFYixFQUFFLFdBQW9CYSxPQUFQLFFBQWdCQSxLQUFFQSxHQUFFLE9BQU1BLEtBQUVaLEtBQUdELEVBQUUsUUFBTSxHQUNwZkMsS0FBR1ksT0FBRWIsRUFBRSxRQUFNLEdBQVNDLE1BRG9hQTtRQUNuYTtBQUFDLGlCQUFTZSxFQUFFaEIsR0FBRTtBQUFDLGlCQUFBRixLQUFVRSxFQUFFLGNBQVQsU0FBcUJBLEVBQUUsUUFBTSxJQUFVQTtRQUFDO0FBQUMsaUJBQVNlLEVBQUVqQixHQUFFRSxHQUFFQyxJQUFFWSxJQUFFO0FBQUMsaUJBQVViLE1BQVAsUUFBY0EsRUFBRSxRQUFOLEtBQWlCQSxJQUFFOFksR0FBRzdZLElBQUVILEVBQUUsTUFBS2UsRUFBQyxHQUFFYixFQUFFLFNBQU9GLEdBQUVFLE1BQUVBLElBQUVZLEVBQUVaLEdBQUVDLEVBQUMsR0FBRUQsRUFBRSxTQUFPRixHQUFTRTtRQUFDO0FBQUMsaUJBQVNjLEVBQUVoQixHQUFFRSxHQUFFQyxJQUFFWSxJQUFFO0FBQUMsaUJBQVViLE1BQVAsUUFBVUEsRUFBRSxnQkFBY0MsR0FBRSxRQUFZWSxLQUFFRCxFQUFFWixHQUFFQyxHQUFFLEtBQUssR0FBRVksR0FBRSxNQUFJNlgsR0FBRzVZLEdBQUVFLEdBQUVDLEVBQUMsR0FBRVksR0FBRSxTQUFPZixHQUFFZSxPQUFFQSxLQUFFa1ksR0FBRzlZLEdBQUUsTUFBS0EsR0FBRSxLQUFJQSxHQUFFLE9BQU0sTUFBS0gsRUFBRSxNQUFLZSxFQUFDLEdBQUVBLEdBQUUsTUFBSTZYLEdBQUc1WSxHQUFFRSxHQUFFQyxFQUFDLEdBQUVZLEdBQUUsU0FBT2YsR0FBU2U7UUFBQztBQUFDLGlCQUFTLEVBQUVmLEdBQUVFLEdBQUVDLElBQUVZLElBQUU7QUFBQyxpQkFBVWIsTUFBUCxRQUFjQSxFQUFFLFFBQU4sS0FBV0EsRUFBRSxVQUFVLGtCQUFnQkMsR0FBRSxpQkFBZUQsRUFBRSxVQUFVLG1CQUFpQkMsR0FBRSxrQkFBc0JELElBQ3JnQmdaLEdBQUcvWSxJQUFFSCxFQUFFLE1BQUtlLEVBQUMsR0FBRWIsRUFBRSxTQUFPRixHQUFFRSxNQUFFQSxJQUFFWSxFQUFFWixHQUFFQyxHQUFFLFlBQVUsQ0FBQyxDQUFDLEdBQUVELEVBQUUsU0FBT0YsR0FBU0U7UUFBQztBQUFDLGlCQUFTdkIsRUFBRXFCLEdBQUVFLEdBQUVDLElBQUVZLElBQUVJLElBQUU7QUFBQyxpQkFBVWpCLE1BQVAsUUFBY0EsRUFBRSxRQUFOLEtBQWlCQSxJQUFFaVosR0FBR2haLElBQUVILEVBQUUsTUFBS2UsSUFBRUksRUFBQyxHQUFFakIsRUFBRSxTQUFPRixHQUFFRSxNQUFFQSxJQUFFWSxFQUFFWixHQUFFQyxFQUFDLEdBQUVELEVBQUUsU0FBT0YsR0FBU0U7UUFBQztBQUFDLGlCQUFTRSxFQUFFSixHQUFFRSxHQUFFQyxJQUFFO0FBQUMsY0FBYyxPQUFPRCxLQUFsQixZQUFnQyxPQUFPQSxLQUFsQjtBQUFvQixtQkFBT0EsSUFBRThZLEdBQUcsS0FBRzlZLEdBQUVGLEVBQUUsTUFBS0csRUFBQyxHQUFFRCxFQUFFLFNBQU9GLEdBQUVFO0FBQUUsY0FBYyxPQUFPQSxLQUFsQixZQUE0QkEsTUFBUCxNQUFTO0FBQUMsb0JBQU9BLEVBQUUsVUFBUztjQUFDLEtBQUtzRDtBQUFHLHVCQUFPckQsS0FBRThZLEdBQUcvWSxFQUFFLE1BQUtBLEVBQUUsS0FBSUEsRUFBRSxPQUFNLE1BQUtGLEVBQUUsTUFBS0csRUFBQyxHQUFFQSxHQUFFLE1BQUl5WSxHQUFHNVksR0FBRSxNQUFLRSxDQUFDLEdBQUVDLEdBQUUsU0FBT0gsR0FBRUc7Y0FBRSxLQUFLc0Q7QUFBRyx1QkFBT3ZELElBQUVnWixHQUFHaFosR0FBRUYsRUFBRSxNQUFLRyxFQUFDLEdBQUVELEVBQUUsU0FBT0YsR0FBRUU7WUFBQztBQUFDLGdCQUFHeVksR0FBR3pZLENBQUMsS0FBR3dFLEdBQUd4RSxDQUFDO0FBQUUscUJBQU9BLElBQUVpWixHQUFHalosR0FDbmZGLEVBQUUsTUFBS0csSUFBRSxJQUFJLEdBQUVELEVBQUUsU0FBT0YsR0FBRUU7QUFBRTJZLGVBQUc3WSxHQUFFRSxDQUFDO1VBQUM7QUFBQyxpQkFBTztRQUFJO0FBQUMsaUJBQVNYLEVBQUVTLEdBQUVFLEdBQUVDLElBQUVZLElBQUU7QUFBQyxjQUFJRCxLQUFTWixNQUFQLE9BQVNBLEVBQUUsTUFBSTtBQUFLLGNBQWMsT0FBT0MsTUFBbEIsWUFBZ0MsT0FBT0EsTUFBbEI7QUFBb0IsbUJBQWNXLE9BQVAsT0FBUyxPQUFLRyxFQUFFakIsR0FBRUUsR0FBRSxLQUFHQyxJQUFFWSxFQUFDO0FBQUUsY0FBYyxPQUFPWixNQUFsQixZQUE0QkEsT0FBUCxNQUFTO0FBQUMsb0JBQU9BLEdBQUUsVUFBUztjQUFDLEtBQUtxRDtBQUFHLHVCQUFPckQsR0FBRSxRQUFNVyxLQUFFWCxHQUFFLFNBQU91RCxLQUFHL0UsRUFBRXFCLEdBQUVFLEdBQUVDLEdBQUUsTUFBTSxVQUFTWSxJQUFFRCxFQUFDLElBQUVFLEVBQUVoQixHQUFFRSxHQUFFQyxJQUFFWSxFQUFDLElBQUU7Y0FBSyxLQUFLMEM7QUFBRyx1QkFBT3RELEdBQUUsUUFBTVcsS0FBRSxFQUFFZCxHQUFFRSxHQUFFQyxJQUFFWSxFQUFDLElBQUU7WUFBSTtBQUFDLGdCQUFHNFgsR0FBR3hZLEVBQUMsS0FBR3VFLEdBQUd2RSxFQUFDO0FBQUUscUJBQWNXLE9BQVAsT0FBUyxPQUFLbkMsRUFBRXFCLEdBQUVFLEdBQUVDLElBQUVZLElBQUUsSUFBSTtBQUFFOFgsZUFBRzdZLEdBQUVHLEVBQUM7VUFBQztBQUFDLGlCQUFPO1FBQUk7QUFBQyxpQkFBU0csRUFBRU4sR0FBRUUsR0FBRUMsSUFBRVksSUFBRUQsSUFBRTtBQUFDLGNBQWMsT0FBT0MsTUFBbEIsWUFBZ0MsT0FBT0EsTUFBbEI7QUFBb0IsbUJBQU9mLElBQUVBLEVBQUUsSUFBSUcsRUFBQyxLQUN2ZixNQUFLYyxFQUFFZixHQUFFRixHQUFFLEtBQUdlLElBQUVELEVBQUM7QUFBRSxjQUFjLE9BQU9DLE1BQWxCLFlBQTRCQSxPQUFQLE1BQVM7QUFBQyxvQkFBT0EsR0FBRSxVQUFTO2NBQUMsS0FBS3lDO0FBQUcsdUJBQU94RCxJQUFFQSxFQUFFLElBQVdlLEdBQUUsUUFBVCxPQUFhWixLQUFFWSxHQUFFLEdBQUcsS0FBRyxNQUFLQSxHQUFFLFNBQU8yQyxLQUFHL0UsRUFBRXVCLEdBQUVGLEdBQUVlLEdBQUUsTUFBTSxVQUFTRCxJQUFFQyxHQUFFLEdBQUcsSUFBRUMsRUFBRWQsR0FBRUYsR0FBRWUsSUFBRUQsRUFBQztjQUFFLEtBQUsyQztBQUFHLHVCQUFPekQsSUFBRUEsRUFBRSxJQUFXZSxHQUFFLFFBQVQsT0FBYVosS0FBRVksR0FBRSxHQUFHLEtBQUcsTUFBSyxFQUFFYixHQUFFRixHQUFFZSxJQUFFRCxFQUFDO1lBQUM7QUFBQyxnQkFBRzZYLEdBQUc1WCxFQUFDLEtBQUcyRCxHQUFHM0QsRUFBQztBQUFFLHFCQUFPZixJQUFFQSxFQUFFLElBQUlHLEVBQUMsS0FBRyxNQUFLeEIsRUFBRXVCLEdBQUVGLEdBQUVlLElBQUVELElBQUUsSUFBSTtBQUFFK1gsZUFBRzNZLEdBQUVhLEVBQUM7VUFBQztBQUFDLGlCQUFPO1FBQUk7QUFBQyxpQkFBU2pCLEVBQUVnQixHQUFFSSxHQUFFRCxJQUFFRCxJQUFFO0FBQUMsbUJBQVExQixLQUFFLE1BQUtJLElBQUUsTUFBS0MsSUFBRXVCLEdBQUVqQixJQUFFaUIsSUFBRSxHQUFFMUIsSUFBRSxNQUFZRyxNQUFQLFFBQVVNLElBQUVnQixHQUFFLFFBQU9oQixLQUFJO0FBQUNOLGNBQUUsUUFBTU0sS0FBR1QsSUFBRUcsR0FBRUEsSUFBRSxRQUFNSCxJQUFFRyxFQUFFO0FBQVEsZ0JBQUloQixJQUFFWSxFQUFFdUIsR0FBRW5CLEdBQUVzQixHQUFFaEIsQ0FBQyxHQUFFZSxFQUFDO0FBQUUsZ0JBQVVyQyxNQUFQLE1BQVM7QUFBUWdCLG9CQUFQLFNBQVdBLElBQUVIO0FBQUc7WUFBSztBQUFDUSxpQkFBR0wsS0FDOWVoQixFQUFFLGNBRCtlLFFBQ3BldUIsRUFBRVksR0FBRW5CLENBQUMsR0FBRXVCLElBQUVDLEVBQUV4QyxHQUFFdUMsR0FBRWpCLENBQUMsR0FBU1AsTUFBUCxPQUFTSixLQUFFWCxJQUFFZSxFQUFFLFVBQVFmLEdBQUVlLElBQUVmLEdBQUVnQixJQUFFSDtVQUFDO0FBQUMsY0FBR1MsTUFBSWdCLEdBQUU7QUFBTyxtQkFBT2QsRUFBRVcsR0FBRW5CLENBQUMsR0FBRUw7QUFBRSxjQUFVSyxNQUFQLE1BQVM7QUFBQyxtQkFBS00sSUFBRWdCLEdBQUUsUUFBT2hCO0FBQUlOLGtCQUFFUyxFQUFFVSxHQUFFRyxHQUFFaEIsQ0FBQyxHQUFFZSxFQUFDLEdBQVNyQixNQUFQLFNBQVd1QixJQUFFQyxFQUFFeEIsR0FBRXVCLEdBQUVqQixDQUFDLEdBQVNQLE1BQVAsT0FBU0osS0FBRUssSUFBRUQsRUFBRSxVQUFRQyxHQUFFRCxJQUFFQztBQUFHLG1CQUFPTDtVQUFDO0FBQUMsZUFBSUssSUFBRW9CLEVBQUVELEdBQUVuQixDQUFDLEdBQUVNLElBQUVnQixHQUFFLFFBQU9oQjtBQUFJVCxnQkFBRWMsRUFBRVgsR0FBRW1CLEdBQUViLEdBQUVnQixHQUFFaEIsQ0FBQyxHQUFFZSxFQUFDLEdBQVN4QixNQUFQLFNBQVdRLEtBQVVSLEVBQUUsY0FBVCxRQUFvQkcsRUFBRSxPQUFjSCxFQUFFLFFBQVQsT0FBYVMsSUFBRVQsRUFBRSxHQUFHLEdBQUUwQixJQUFFQyxFQUFFM0IsR0FBRTBCLEdBQUVqQixDQUFDLEdBQVNQLE1BQVAsT0FBU0osS0FBRUUsSUFBRUUsRUFBRSxVQUFRRixHQUFFRSxJQUFFRjtBQUFHLGlCQUFBUSxLQUFHTCxFQUFFLFFBQVEsU0FBU0ssR0FBRTtBQUFDLG1CQUFPRSxFQUFFWSxHQUFFZCxDQUFDO1VBQUMsQ0FBQyxHQUFTVjtRQUFDO0FBQUMsaUJBQVNPLEVBQUVpQixHQUFFSSxHQUFFRCxJQUFFRCxJQUFFO0FBQUMsY0FBSTFCLEtBQUVvRixHQUFHekQsRUFBQztBQUFFLGNBQWdCLE9BQU8zQixNQUFwQjtBQUFzQixrQkFBTSxNQUFNUyxFQUFFLEdBQUcsQ0FBQztBQUFjLGNBQVprQixLQUFFM0IsR0FBRSxLQUFLMkIsRUFBQyxHQUM3ZUEsTUFEa2Y7QUFDaGYsa0JBQU0sTUFBTWxCLEVBQUUsR0FBRyxDQUFDO0FBQUUsbUJBQVFMLElBQUVKLEtBQUUsTUFBS0ssSUFBRXVCLEdBQUVqQixJQUFFaUIsSUFBRSxHQUFFMUIsSUFBRSxNQUFLYixJQUFFc0MsR0FBRSxLQUFLLEdBQVN0QixNQUFQLFFBQVUsQ0FBQ2hCLEVBQUUsTUFBS3NCLEtBQUl0QixJQUFFc0MsR0FBRSxLQUFLLEdBQUU7QUFBQ3RCLGNBQUUsUUFBTU0sS0FBR1QsSUFBRUcsR0FBRUEsSUFBRSxRQUFNSCxJQUFFRyxFQUFFO0FBQVEsZ0JBQUlFLElBQUVOLEVBQUV1QixHQUFFbkIsR0FBRWhCLEVBQUUsT0FBTXFDLEVBQUM7QUFBRSxnQkFBVW5CLE1BQVAsTUFBUztBQUFRRixvQkFBUCxTQUFXQSxJQUFFSDtBQUFHO1lBQUs7QUFBQ1EsaUJBQUdMLEtBQVVFLEVBQUUsY0FBVCxRQUFvQkssRUFBRVksR0FBRW5CLENBQUMsR0FBRXVCLElBQUVDLEVBQUV0QixHQUFFcUIsR0FBRWpCLENBQUMsR0FBU1AsTUFBUCxPQUFTSixLQUFFTyxJQUFFSCxFQUFFLFVBQVFHLEdBQUVILElBQUVHLEdBQUVGLElBQUVIO1VBQUM7QUFBQyxjQUFHYixFQUFFO0FBQUssbUJBQU93QixFQUFFVyxHQUFFbkIsQ0FBQyxHQUFFTDtBQUFFLGNBQVVLLE1BQVAsTUFBUztBQUFDLG1CQUFLLENBQUNoQixFQUFFLE1BQUtzQixLQUFJdEIsSUFBRXNDLEdBQUUsS0FBSztBQUFFdEMsa0JBQUV5QixFQUFFVSxHQUFFbkMsRUFBRSxPQUFNcUMsRUFBQyxHQUFTckMsTUFBUCxTQUFXdUMsSUFBRUMsRUFBRXhDLEdBQUV1QyxHQUFFakIsQ0FBQyxHQUFTUCxNQUFQLE9BQVNKLEtBQUVYLElBQUVlLEVBQUUsVUFBUWYsR0FBRWUsSUFBRWY7QUFBRyxtQkFBT1c7VUFBQztBQUFDLGVBQUlLLElBQUVvQixFQUFFRCxHQUFFbkIsQ0FBQyxHQUFFLENBQUNoQixFQUFFLE1BQUtzQixLQUFJdEIsSUFBRXNDLEdBQUUsS0FBSztBQUFFdEMsZ0JBQUUyQixFQUFFWCxHQUFFbUIsR0FBRWIsR0FBRXRCLEVBQUUsT0FBTXFDLEVBQUMsR0FBU3JDLE1BQVAsU0FBV3FCLEtBQVVyQixFQUFFLGNBQVQsUUFDdmVnQixFQUFFLE9BQWNoQixFQUFFLFFBQVQsT0FBYXNCLElBQUV0QixFQUFFLEdBQUcsR0FBRXVDLElBQUVDLEVBQUV4QyxHQUFFdUMsR0FBRWpCLENBQUMsR0FBU1AsTUFBUCxPQUFTSixLQUFFWCxJQUFFZSxFQUFFLFVBQVFmLEdBQUVlLElBQUVmO0FBQUcsaUJBQUFxQixLQUFHTCxFQUFFLFFBQVEsU0FBU0ssR0FBRTtBQUFDLG1CQUFPRSxFQUFFWSxHQUFFZCxDQUFDO1VBQUMsQ0FBQyxHQUFTVjtRQUFDO0FBQUMsZUFBTyxTQUFTVSxHQUFFZSxHQUFFSSxJQUFFRixJQUFFO0FBQUMsY0FBSUQsS0FBYSxPQUFPRyxNQUFsQixZQUE0QkEsT0FBUCxRQUFVQSxHQUFFLFNBQU91QyxNQUFXdkMsR0FBRSxRQUFUO0FBQWFILFVBQUFBLE9BQUlHLEtBQUVBLEdBQUUsTUFBTTtBQUFVLGNBQUk3QixJQUFhLE9BQU82QixNQUFsQixZQUE0QkEsT0FBUDtBQUFTLGNBQUc3QjtBQUFFLG9CQUFPNkIsR0FBRSxVQUFTO2NBQUMsS0FBS3FDO0FBQUd4RCxtQkFBRTtBQUFTLHVCQUFSVixJQUFFNkIsR0FBRSxLQUFRSCxLQUFFRCxHQUFTQyxPQUFQLFFBQVU7QUFBQyx3QkFBR0EsR0FBRSxRQUFNMUIsR0FBRTtBQUFDLDhCQUFPMEIsR0FBRSxLQUFJO3dCQUFDLEtBQUs7QUFBRSw4QkFBR0csR0FBRSxTQUFPdUMsSUFBRztBQUFDdkQsOEJBQUVILEdBQUVnQixHQUFFLE9BQU8sR0FBRUQsSUFBRUQsRUFBRUUsSUFBRUcsR0FBRSxNQUFNLFFBQVEsR0FBRUosRUFBRSxTQUFPZixHQUFFQSxJQUFFZTtBQUFFLGtDQUFNZjswQkFBQztBQUFDO3dCQUFNO0FBQVEsOEJBQUdnQixHQUFFLGdCQUFjRyxHQUFFLE1BQUs7QUFBQ2hCLDhCQUFFSCxHQUFFZ0IsR0FBRSxPQUFPLEdBQ25mRCxJQUFFRCxFQUFFRSxJQUFFRyxHQUFFLEtBQUssR0FBRUosRUFBRSxNQUFJNlgsR0FBRzVZLEdBQUVnQixJQUFFRyxFQUFDLEdBQUVKLEVBQUUsU0FBT2YsR0FBRUEsSUFBRWU7QUFBRSxrQ0FBTWY7MEJBQUM7c0JBQUM7QUFBQ0csd0JBQUVILEdBQUVnQixFQUFDO0FBQUU7b0JBQUs7QUFBTWQsd0JBQUVGLEdBQUVnQixFQUFDO0FBQUVBLG9CQUFBQSxLQUFFQSxHQUFFO2tCQUFPO0FBQUNHLGtCQUFBQSxHQUFFLFNBQU91QyxNQUFJM0MsSUFBRW9ZLEdBQUdoWSxHQUFFLE1BQU0sVUFBU25CLEVBQUUsTUFBS2lCLElBQUVFLEdBQUUsR0FBRyxHQUFFSixFQUFFLFNBQU9mLEdBQUVBLElBQUVlLE1BQUlFLEtBQUVnWSxHQUFHOVgsR0FBRSxNQUFLQSxHQUFFLEtBQUlBLEdBQUUsT0FBTSxNQUFLbkIsRUFBRSxNQUFLaUIsRUFBQyxHQUFFQSxHQUFFLE1BQUkyWCxHQUFHNVksR0FBRWUsR0FBRUksRUFBQyxHQUFFRixHQUFFLFNBQU9qQixHQUFFQSxJQUFFaUI7Z0JBQUU7QUFBQyx1QkFBT0MsRUFBRWxCLENBQUM7Y0FBRSxLQUFLeUQ7QUFBR3pELG1CQUFFO0FBQUMsdUJBQUlnQixLQUFFRyxHQUFFLEtBQVdKLE1BQVAsUUFBVTtBQUFDLHdCQUFHQSxFQUFFLFFBQU1DO0FBQUUsMEJBQU9ELEVBQUUsUUFBTixLQUFXQSxFQUFFLFVBQVUsa0JBQWdCSSxHQUFFLGlCQUFlSixFQUFFLFVBQVUsbUJBQWlCSSxHQUFFLGdCQUFlO0FBQUNoQiwwQkFBRUgsR0FBRWUsRUFBRSxPQUFPLEdBQUVBLElBQUVELEVBQUVDLEdBQUVJLEdBQUUsWUFBVSxDQUFDLENBQUMsR0FBRUosRUFBRSxTQUFPZixHQUFFQSxJQUFFZTtBQUFFLDhCQUFNZjtzQkFBQyxPQUFLO0FBQUNHLDBCQUFFSCxHQUFFZSxDQUFDO0FBQUU7c0JBQUs7O0FBQU1iLHdCQUFFRixHQUFFZSxDQUFDO0FBQUVBLHdCQUFFQSxFQUFFO2tCQUFPO0FBQUNBLHNCQUNwZm1ZLEdBQUcvWCxJQUFFbkIsRUFBRSxNQUFLaUIsRUFBQyxHQUFFRixFQUFFLFNBQU9mLEdBQUVBLElBQUVlO2dCQUFDO0FBQUMsdUJBQU9HLEVBQUVsQixDQUFDO1lBQUM7QUFBQyxjQUFjLE9BQU9tQixNQUFsQixZQUFnQyxPQUFPQSxNQUFsQjtBQUFvQixtQkFBT0EsS0FBRSxLQUFHQSxJQUFTSixNQUFQLFFBQWNBLEVBQUUsUUFBTixLQUFXWixFQUFFSCxHQUFFZSxFQUFFLE9BQU8sR0FBRUEsSUFBRUQsRUFBRUMsR0FBRUksRUFBQyxHQUFFSixFQUFFLFNBQU9mLEdBQUVBLElBQUVlLE1BQUlaLEVBQUVILEdBQUVlLENBQUMsR0FBRUEsSUFBRWlZLEdBQUc3WCxJQUFFbkIsRUFBRSxNQUFLaUIsRUFBQyxHQUFFRixFQUFFLFNBQU9mLEdBQUVBLElBQUVlLElBQUdHLEVBQUVsQixDQUFDO0FBQUUsY0FBRzJZLEdBQUd4WCxFQUFDO0FBQUUsbUJBQU9yQixFQUFFRSxHQUFFZSxHQUFFSSxJQUFFRixFQUFDO0FBQUUsY0FBR3lELEdBQUd2RCxFQUFDO0FBQUUsbUJBQU90QixFQUFFRyxHQUFFZSxHQUFFSSxJQUFFRixFQUFDO0FBQWEsY0FBWDNCLEtBQUd1WixHQUFHN1ksR0FBRW1CLEVBQUMsR0FBbUIsT0FBT0EsS0FBckIsT0FBd0IsQ0FBQ0g7QUFBRSxvQkFBT2hCLEVBQUUsS0FBSTtjQUFDLEtBQUs7Y0FBRSxLQUFLO2NBQUcsS0FBSztjQUFFLEtBQUs7Y0FBRyxLQUFLO0FBQUcsc0JBQU0sTUFBTUQsRUFBRSxLQUFJaUYsR0FBR2hGLEVBQUUsSUFBSSxLQUFHLFdBQVcsQ0FBQztZQUFFO0FBQUMsaUJBQU9HLEVBQUVILEdBQUVlLENBQUM7UUFBQztNQUFDO0FBQUMsVUFBSXFZLEtBQUdOLEdBQUcsSUFBRSxHQUFFTyxLQUFHUCxHQUFHLEtBQUUsR0FBRVEsS0FBRyxDQUFDLEdBQUVDLEtBQUcvRSxHQUFHOEUsRUFBRSxHQUFFRSxLQUFHaEYsR0FBRzhFLEVBQUUsR0FBRUcsS0FBR2pGLEdBQUc4RSxFQUFFO0FBQ3hkLGVBQVNJLEdBQUcxWixHQUFFO0FBQUMsWUFBR0EsTUFBSXNaO0FBQUcsZ0JBQU0sTUFBTXZaLEVBQUUsR0FBRyxDQUFDO0FBQUUsZUFBT0M7TUFBQztBQUFDLGVBQVMyWixHQUFHM1osR0FBRUUsR0FBRTtBQUF1QyxnQkFBdENVLEdBQUU2WSxJQUFHdlosQ0FBQyxHQUFFVSxHQUFFNFksSUFBR3haLENBQUMsR0FBRVksR0FBRTJZLElBQUdELEVBQUUsR0FBRXRaLElBQUVFLEVBQUUsVUFBZ0JGLEdBQUU7VUFBQyxLQUFLO1VBQUUsS0FBSztBQUFHRSxpQkFBR0EsSUFBRUEsRUFBRSxtQkFBaUJBLEVBQUUsZUFBYW9HLEdBQUcsTUFBSyxFQUFFO0FBQUU7VUFBTTtBQUFRdEcsZ0JBQU1BLE1BQUosSUFBTUUsRUFBRSxhQUFXQSxHQUFFQSxJQUFFRixFQUFFLGdCQUFjLE1BQUtBLElBQUVBLEVBQUUsU0FBUUUsSUFBRW9HLEdBQUdwRyxHQUFFRixDQUFDO1FBQUM7QUFBQ1csV0FBRTRZLEVBQUUsR0FBRTNZLEdBQUUyWSxJQUFHclosQ0FBQztNQUFDO0FBQUMsZUFBUzBaLEtBQUk7QUFBQ2paLFdBQUU0WSxFQUFFLEdBQUU1WSxHQUFFNlksRUFBRSxHQUFFN1ksR0FBRThZLEVBQUU7TUFBQztBQUFDLGVBQVNJLEdBQUc3WixHQUFFO0FBQUMwWixXQUFHRCxHQUFHLE9BQU87QUFBRSxZQUFJdlosSUFBRXdaLEdBQUdILEdBQUcsT0FBTyxHQUFNcFosSUFBRW1HLEdBQUdwRyxHQUFFRixFQUFFLElBQUk7QUFBRUUsY0FBSUMsTUFBSVMsR0FBRTRZLElBQUd4WixDQUFDLEdBQUVZLEdBQUUyWSxJQUFHcFosQ0FBQztNQUFFO0FBQUMsZUFBUzJaLEdBQUc5WixHQUFFO0FBQUN3WixXQUFHLFlBQVV4WixNQUFJVyxHQUFFNFksRUFBRSxHQUFFNVksR0FBRTZZLEVBQUU7TUFBRTtBQUFDLFVBQUk3WCxLQUFFNlMsR0FBRyxDQUFDO0FBQy9jLGVBQVN1RixHQUFHL1osR0FBRTtBQUFDLGlCQUFRRSxJQUFFRixHQUFTRSxNQUFQLFFBQVU7QUFBQyxjQUFRQSxFQUFFLFFBQVAsSUFBVztBQUFDLGdCQUFJQyxJQUFFRCxFQUFFO0FBQWMsZ0JBQVVDLE1BQVAsU0FBV0EsSUFBRUEsRUFBRSxZQUFrQkEsTUFBUCxRQUFpQkEsRUFBRSxTQUFULFFBQXNCQSxFQUFFLFNBQVQ7QUFBZSxxQkFBT0Q7VUFBQyxXQUFjQSxFQUFFLFFBQVAsTUFBcUJBLEVBQUUsY0FBYyxnQkFBekIsUUFBQTtBQUFzQyxnQkFBUUEsRUFBRSxRQUFNO0FBQUkscUJBQU9BO1VBQUFBLFdBQWlCQSxFQUFFLFVBQVQsTUFBZTtBQUFDQSxjQUFFLE1BQU0sU0FBT0EsR0FBRUEsSUFBRUEsRUFBRTtBQUFNO1VBQVE7QUFBQyxjQUFHQSxNQUFJRjtBQUFFO0FBQU0saUJBQVlFLEVBQUUsWUFBVCxRQUFrQjtBQUFDLGdCQUFVQSxFQUFFLFdBQVQsUUFBaUJBLEVBQUUsV0FBU0Y7QUFBRSxxQkFBTztBQUFLRSxnQkFBRUEsRUFBRTtVQUFNO0FBQUNBLFlBQUUsUUFBUSxTQUFPQSxFQUFFLFFBQU9BLElBQUVBLEVBQUU7UUFBTztBQUFDLGVBQU87TUFBSTtBQUFDLFVBQUk4WixLQUFHLE1BQUtDLEtBQUcsTUFBS0MsS0FBRztBQUNwZCxlQUFTQyxHQUFHbmEsR0FBRUUsR0FBRTtBQUFDLFlBQUlDLElBQUVpYSxHQUFHLEdBQUUsTUFBSyxNQUFLLENBQUM7QUFBRWphLFVBQUUsY0FBWSxXQUFVQSxFQUFFLE9BQUssV0FBVUEsRUFBRSxZQUFVRCxHQUFFQyxFQUFFLFNBQU9ILEdBQUVHLEVBQUUsUUFBTSxHQUFTSCxFQUFFLGVBQVQsUUFBcUJBLEVBQUUsV0FBVyxhQUFXRyxHQUFFSCxFQUFFLGFBQVdHLEtBQUdILEVBQUUsY0FBWUEsRUFBRSxhQUFXRztNQUFDO0FBQUMsZUFBU2thLEdBQUdyYSxHQUFFRSxHQUFFO0FBQUMsZ0JBQU9GLEVBQUUsS0FBSTtVQUFDLEtBQUs7QUFBRSxnQkFBSUcsSUFBRUgsRUFBRTtBQUFLLG1CQUFBRSxJQUFNQSxFQUFFLGFBQU4sS0FBZ0JDLEVBQUUsWUFBWSxNQUFJRCxFQUFFLFNBQVMsWUFBWSxJQUFFLE9BQUtBLEdBQWdCQSxNQUFQLFFBQVVGLEVBQUUsWUFBVUUsR0FBRSxRQUFJO1VBQUcsS0FBSztBQUFFLG1CQUFPQSxJQUFPRixFQUFFLGlCQUFQLE1BQXlCRSxFQUFFLGFBQU4sSUFBZSxPQUFLQSxHQUFTQSxNQUFQLFFBQVVGLEVBQUUsWUFBVUUsR0FBRSxRQUFJO1VBQUcsS0FBSztBQUFHLG1CQUFNO1VBQUc7QUFBUSxtQkFBTTtRQUFFO01BQUM7QUFDMWUsZUFBU29hLEdBQUd0YSxHQUFFO0FBQUMsWUFBR2thLElBQUc7QUFBQyxjQUFJaGEsSUFBRStaO0FBQUcsY0FBRy9aLEdBQUU7QUFBQyxnQkFBSUMsSUFBRUQ7QUFBRSxnQkFBRyxDQUFDbWEsR0FBR3JhLEdBQUVFLENBQUMsR0FBRTtBQUFxQixrQkFBcEJBLElBQUU0VCxHQUFHM1QsRUFBRSxXQUFXLEdBQUssQ0FBQ0QsS0FBRyxDQUFDbWEsR0FBR3JhLEdBQUVFLENBQUMsR0FBRTtBQUFDRixrQkFBRSxRQUFNQSxFQUFFLFFBQU0sUUFBTSxHQUFFa2EsS0FBRyxPQUFHRixLQUFHaGE7QUFBRTtjQUFNO0FBQUNtYSxpQkFBR0gsSUFBRzdaLENBQUM7WUFBQztBQUFDNlosaUJBQUdoYSxHQUFFaWEsS0FBR25HLEdBQUc1VCxFQUFFLFVBQVU7VUFBQztBQUFNRixjQUFFLFFBQU1BLEVBQUUsUUFBTSxRQUFNLEdBQUVrYSxLQUFHLE9BQUdGLEtBQUdoYTtRQUFDO01BQUM7QUFBQyxlQUFTdWEsR0FBR3ZhLEdBQUU7QUFBQyxhQUFJQSxJQUFFQSxFQUFFLFFBQWNBLE1BQVAsUUFBY0EsRUFBRSxRQUFOLEtBQWVBLEVBQUUsUUFBTixLQUFnQkEsRUFBRSxRQUFQO0FBQVlBLGNBQUVBLEVBQUU7QUFBT2dhLGFBQUdoYTtNQUFDO0FBQzdTLGVBQVN3YSxHQUFHeGEsR0FBRTtBQUFDLFlBQUdBLE1BQUlnYTtBQUFHLGlCQUFNO0FBQUcsWUFBRyxDQUFDRTtBQUFHLGlCQUFPSyxHQUFHdmEsQ0FBQyxHQUFFa2EsS0FBRyxNQUFHO0FBQUcsWUFBSWhhLElBQUVGLEVBQUU7QUFBSyxZQUFPQSxFQUFFLFFBQU4sS0FBb0JFLE1BQVQsVUFBcUJBLE1BQVQsVUFBWSxDQUFDd1QsR0FBR3hULEdBQUVGLEVBQUUsYUFBYTtBQUFFLGVBQUlFLElBQUUrWixJQUFHL1o7QUFBR2lhLGVBQUduYSxHQUFFRSxDQUFDLEdBQUVBLElBQUU0VCxHQUFHNVQsRUFBRSxXQUFXO0FBQVEsWUFBTnFhLEdBQUd2YSxDQUFDLEdBQVVBLEVBQUUsUUFBUCxJQUFXO0FBQWdELGNBQS9DQSxJQUFFQSxFQUFFLGVBQWNBLElBQVNBLE1BQVAsT0FBU0EsRUFBRSxhQUFXLE1BQVEsQ0FBQ0E7QUFBRSxrQkFBTSxNQUFNRCxFQUFFLEdBQUcsQ0FBQztBQUFFQyxhQUFFO0FBQWlCLGlCQUFoQkEsSUFBRUEsRUFBRSxhQUFnQkUsSUFBRSxHQUFFRixLQUFHO0FBQUMsa0JBQU9BLEVBQUUsYUFBTixHQUFlO0FBQUMsb0JBQUlHLElBQUVILEVBQUU7QUFBSyxvQkFBVUcsTUFBUCxNQUFTO0FBQUMsc0JBQU9ELE1BQUosR0FBTTtBQUFDK1oseUJBQUduRyxHQUFHOVQsRUFBRSxXQUFXO0FBQUUsMEJBQU1BO2tCQUFDO0FBQUNFO2dCQUFHO0FBQVdDLHdCQUFOLE9BQWdCQSxNQUFQLFFBQWlCQSxNQUFQLFFBQVVEO2NBQUc7QUFBQ0Ysa0JBQUVBLEVBQUU7WUFBVztBQUFDaWEsaUJBQUc7VUFBSTtRQUFDO0FBQU1BLGVBQUdELEtBQUdsRyxHQUFHOVQsRUFBRSxVQUFVLFdBQVcsSUFBRTtBQUFLLGVBQU07TUFBRTtBQUN4ZixlQUFTeWEsS0FBSTtBQUFDUixhQUFHRCxLQUFHLE1BQUtFLEtBQUc7TUFBRTtBQUFDLFVBQUlRLEtBQUcsQ0FBQztBQUFFLGVBQVNDLEtBQUk7QUFBQyxpQkFBUTNhLElBQUUsR0FBRUEsSUFBRTBhLEdBQUcsUUFBTzFhO0FBQUkwYSxhQUFHMWEsQ0FBQyxFQUFFLGdDQUE4QjtBQUFLMGEsV0FBRyxTQUFPO01BQUM7QUFBQyxVQUFJRSxLQUFHclgsR0FBRyx3QkFBdUJzWCxLQUFHdFgsR0FBRyx5QkFBd0J1WCxLQUFHLEdBQUVqWixLQUFFLE1BQUtDLEtBQUUsTUFBS0MsS0FBRSxNQUFLZ1osS0FBRyxPQUFHQyxLQUFHO0FBQUcsZUFBU0MsS0FBSTtBQUFDLGNBQU0sTUFBTWxiLEVBQUUsR0FBRyxDQUFDO01BQUU7QUFBQyxlQUFTbWIsR0FBR2xiLEdBQUVFLEdBQUU7QUFBQyxZQUFVQSxNQUFQO0FBQVMsaUJBQU07QUFBRyxpQkFBUUMsSUFBRSxHQUFFQSxJQUFFRCxFQUFFLFVBQVFDLElBQUVILEVBQUUsUUFBT0c7QUFBSSxjQUFHLENBQUN1UixHQUFHMVIsRUFBRUcsQ0FBQyxHQUFFRCxFQUFFQyxDQUFDLENBQUM7QUFBRSxtQkFBTTtBQUFHLGVBQU07TUFBRTtBQUNoWSxlQUFTZ2IsR0FBR25iLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVELEdBQUVLLEdBQUU7QUFBdUgsWUFBdEgyWixLQUFHM1osR0FBRVUsS0FBRTNCLEdBQUVBLEVBQUUsZ0JBQWMsTUFBS0EsRUFBRSxjQUFZLE1BQUtBLEVBQUUsUUFBTSxHQUFFMGEsR0FBRyxVQUFlNWEsTUFBUCxRQUFpQkEsRUFBRSxrQkFBVCxPQUF1Qm9iLEtBQUdDLElBQUdyYixJQUFFRyxFQUFFWSxHQUFFRCxDQUFDLEdBQUtrYSxJQUFHO0FBQUM3WixjQUFFO0FBQUUsYUFBRTtBQUFPLGdCQUFONlosS0FBRyxPQUFNLEVBQUUsS0FBRzdaO0FBQUcsb0JBQU0sTUFBTXBCLEVBQUUsR0FBRyxDQUFDO0FBQUVvQixpQkFBRyxHQUFFWSxLQUFFRCxLQUFFLE1BQUs1QixFQUFFLGNBQVksTUFBSzBhLEdBQUcsVUFBUVUsSUFBR3RiLElBQUVHLEVBQUVZLEdBQUVELENBQUM7VUFBQyxTQUFPa2E7UUFBRztBQUErRCxZQUE5REosR0FBRyxVQUFRVyxJQUFHcmIsSUFBUzRCLE9BQVAsUUFBaUJBLEdBQUUsU0FBVCxNQUFjZ1osS0FBRyxHQUFFL1ksS0FBRUQsS0FBRUQsS0FBRSxNQUFLa1osS0FBRyxPQUFNN2E7QUFBRSxnQkFBTSxNQUFNSCxFQUFFLEdBQUcsQ0FBQztBQUFFLGVBQU9DO01BQUM7QUFBQyxlQUFTd2IsS0FBSTtBQUFDLFlBQUl4YixJQUFFLEVBQUMsZUFBYyxNQUFLLFdBQVUsTUFBSyxXQUFVLE1BQUssT0FBTSxNQUFLLE1BQUssS0FBSTtBQUFFLGVBQU8rQixPQUFQLE9BQVNGLEdBQUUsZ0JBQWNFLEtBQUUvQixJQUFFK0IsS0FBRUEsR0FBRSxPQUFLL0IsR0FBUytCO01BQUM7QUFDaGYsZUFBUzBaLEtBQUk7QUFBQyxZQUFVM1osT0FBUCxNQUFTO0FBQUMsY0FBSTlCLElBQUU2QixHQUFFO0FBQVU3QixjQUFTQSxNQUFQLE9BQVNBLEVBQUUsZ0JBQWM7UUFBSTtBQUFNQSxjQUFFOEIsR0FBRTtBQUFLLFlBQUk1QixJQUFTNkIsT0FBUCxPQUFTRixHQUFFLGdCQUFjRSxHQUFFO0FBQUssWUFBVTdCLE1BQVA7QUFBUzZCLGVBQUU3QixHQUFFNEIsS0FBRTlCO2FBQU07QUFBQyxjQUFVQSxNQUFQO0FBQVMsa0JBQU0sTUFBTUQsRUFBRSxHQUFHLENBQUM7QUFBRStCLGVBQUU5QixHQUFFQSxJQUFFLEVBQUMsZUFBYzhCLEdBQUUsZUFBYyxXQUFVQSxHQUFFLFdBQVUsV0FBVUEsR0FBRSxXQUFVLE9BQU1BLEdBQUUsT0FBTSxNQUFLLEtBQUksR0FBU0MsT0FBUCxPQUFTRixHQUFFLGdCQUFjRSxLQUFFL0IsSUFBRStCLEtBQUVBLEdBQUUsT0FBSy9CO1FBQUM7QUFBQyxlQUFPK0I7TUFBQztBQUFDLGVBQVMyWixHQUFHMWIsR0FBRUUsR0FBRTtBQUFDLGVBQW1CLE9BQU9BLEtBQXBCLGFBQXNCQSxFQUFFRixDQUFDLElBQUVFO01BQUM7QUFDeFksZUFBU3liLEdBQUczYixHQUFFO0FBQUMsWUFBSUUsSUFBRXViLEdBQUcsR0FBRXRiLElBQUVELEVBQUU7QUFBTSxZQUFVQyxNQUFQO0FBQVMsZ0JBQU0sTUFBTUosRUFBRSxHQUFHLENBQUM7QUFBRUksVUFBRSxzQkFBb0JIO0FBQUUsWUFBSWUsSUFBRWUsSUFBRWhCLElBQUVDLEVBQUUsV0FBVUksSUFBRWhCLEVBQUU7QUFBUSxZQUFVZ0IsTUFBUCxNQUFTO0FBQUMsY0FBVUwsTUFBUCxNQUFTO0FBQUMsZ0JBQUlJLElBQUVKLEVBQUU7QUFBS0EsY0FBRSxPQUFLSyxFQUFFLE1BQUtBLEVBQUUsT0FBS0Q7VUFBQztBQUFDSCxZQUFFLFlBQVVELElBQUVLLEdBQUVoQixFQUFFLFVBQVE7UUFBSTtBQUFDLFlBQVVXLE1BQVAsTUFBUztBQUFDQSxjQUFFQSxFQUFFLE1BQUtDLElBQUVBLEVBQUU7QUFBVSxjQUFJRSxJQUFFQyxJQUFFQyxJQUFFLE1BQUtILElBQUVGO0FBQUUsYUFBRTtBQUFDLGdCQUFJLElBQUVFLEVBQUU7QUFBSyxpQkFBSThaLEtBQUcsT0FBSztBQUFTN1osb0JBQVAsU0FBV0EsSUFBRUEsRUFBRSxPQUFLLEVBQUMsTUFBSyxHQUFFLFFBQU9ELEVBQUUsUUFBTyxjQUFhQSxFQUFFLGNBQWEsWUFBV0EsRUFBRSxZQUFXLE1BQUssS0FBSSxJQUFHRCxJQUFFQyxFQUFFLGlCQUFlaEIsSUFBRWdCLEVBQUUsYUFBV2hCLEVBQUVlLEdBQUVDLEVBQUUsTUFBTTtpQkFBTTtBQUFDLGtCQUFJckMsSUFBRSxFQUFDLE1BQUssR0FBRSxRQUFPcUMsRUFBRSxRQUFPLGNBQWFBLEVBQUUsY0FDOWYsWUFBV0EsRUFBRSxZQUFXLE1BQUssS0FBSTtBQUFTQyxvQkFBUCxRQUFVQyxJQUFFRCxJQUFFdEMsR0FBRXdDLElBQUVKLEtBQUdFLElBQUVBLEVBQUUsT0FBS3RDLEdBQUVrRCxHQUFFLFNBQU8sR0FBRWtXLE1BQUk7WUFBQztBQUFDL1csZ0JBQUVBLEVBQUU7VUFBSSxTQUFjQSxNQUFQLFFBQVVBLE1BQUlGO0FBQVVHLGdCQUFQLE9BQVNFLElBQUVKLElBQUVFLEVBQUUsT0FBS0MsR0FBRXdRLEdBQUczUSxHQUFFYixFQUFFLGFBQWEsTUFBSW9YLEtBQUcsT0FBSXBYLEVBQUUsZ0JBQWNhLEdBQUViLEVBQUUsWUFBVWlCLEdBQUVqQixFQUFFLFlBQVVlLEdBQUVkLEVBQUUsb0JBQWtCWTtRQUFDO0FBQUMsZUFBTSxDQUFDYixFQUFFLGVBQWNDLEVBQUUsUUFBUTtNQUFDO0FBQy9RLGVBQVN5YixHQUFHNWIsR0FBRTtBQUFDLFlBQUlFLElBQUV1YixHQUFHLEdBQUV0YixJQUFFRCxFQUFFO0FBQU0sWUFBVUMsTUFBUDtBQUFTLGdCQUFNLE1BQU1KLEVBQUUsR0FBRyxDQUFDO0FBQUVJLFVBQUUsc0JBQW9CSDtBQUFFLFlBQUllLElBQUVaLEVBQUUsVUFBU1csSUFBRVgsRUFBRSxTQUFRZ0IsSUFBRWpCLEVBQUU7QUFBYyxZQUFVWSxNQUFQLE1BQVM7QUFBQ1gsWUFBRSxVQUFRO0FBQUssY0FBSWUsSUFBRUosSUFBRUEsRUFBRTtBQUFLO0FBQUdLLGdCQUFFbkIsRUFBRW1CLEdBQUVELEVBQUUsTUFBTSxHQUFFQSxJQUFFQSxFQUFFO2lCQUFXQSxNQUFJSjtBQUFHNFEsYUFBR3ZRLEdBQUVqQixFQUFFLGFBQWEsTUFBSW9YLEtBQUcsT0FBSXBYLEVBQUUsZ0JBQWNpQixHQUFTakIsRUFBRSxjQUFULFNBQXFCQSxFQUFFLFlBQVVpQixJQUFHaEIsRUFBRSxvQkFBa0JnQjtRQUFDO0FBQUMsZUFBTSxDQUFDQSxHQUFFSixDQUFDO01BQUM7QUFDclYsZUFBUzhhLEdBQUc3YixHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBSVksSUFBRWIsRUFBRTtBQUFZYSxZQUFFQSxFQUFFYixFQUFFLE9BQU87QUFBRSxZQUFJWSxJQUFFWixFQUFFO0FBQXlJLFlBQWpHWSxNQUFQLE9BQVNkLElBQUVjLE1BQUlDLEtBQVVmLElBQUVBLEVBQUUsbUJBQWlCQSxLQUFHOGEsS0FBRzlhLE9BQUtBLE9BQUVFLEVBQUUsZ0NBQThCYSxHQUFFMlosR0FBRyxLQUFLeGEsQ0FBQyxLQUFLRjtBQUFFLGlCQUFPRyxFQUFFRCxFQUFFLE9BQU87QUFBRSxjQUFBd2EsR0FBRyxLQUFLeGEsQ0FBQyxHQUFRLE1BQU1ILEVBQUUsR0FBRyxDQUFDO01BQUU7QUFDL1AsZUFBUytiLEdBQUc5YixHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQUMsWUFBSUQsSUFBRW9CO0FBQUUsWUFBVXBCLE1BQVA7QUFBUyxnQkFBTSxNQUFNZixFQUFFLEdBQUcsQ0FBQztBQUFFLFlBQUlvQixJQUFFakIsRUFBRSxhQUFZZ0IsSUFBRUMsRUFBRWpCLEVBQUUsT0FBTyxHQUFFZSxJQUFFMlosR0FBRyxTQUFRNVosSUFBRUMsRUFBRSxTQUFTLFdBQVU7QUFBQyxpQkFBTzRhLEdBQUcvYSxHQUFFWixHQUFFQyxDQUFDO1FBQUMsQ0FBQyxHQUFFLElBQUVhLEVBQUUsQ0FBQyxHQUFFckMsSUFBRXFDLEVBQUUsQ0FBQztBQUFFQSxZQUFFZTtBQUFFLFlBQUkzQixJQUFFSixFQUFFLGVBQWNULElBQUVhLEVBQUUsTUFBS0UsSUFBRWYsRUFBRSxhQUFZTyxJQUFFTSxFQUFFO0FBQU9BLFlBQUVBLEVBQUU7QUFBVSxZQUFJUCxJQUFFZ0M7QUFBRSxlQUFBN0IsRUFBRSxnQkFBYyxFQUFDLE1BQUtULEdBQUUsUUFBT1csR0FBRSxXQUFVYSxFQUFDLEdBQUVFLEVBQUUsVUFBVSxXQUFVO0FBQUMxQixZQUFFLGNBQVlZLEdBQUVaLEVBQUUsY0FBWTtBQUFFLGNBQUlTLElBQUVtQixFQUFFakIsRUFBRSxPQUFPO0FBQUUsY0FBRyxDQUFDd1IsR0FBR3hRLEdBQUVsQixDQUFDLEdBQUU7QUFBQ0EsZ0JBQUVHLEVBQUVELEVBQUUsT0FBTyxHQUFFd1IsR0FBRy9TLEdBQUVxQixDQUFDLE1BQUksRUFBRUEsQ0FBQyxHQUFFQSxJQUFFcVksR0FBR3hZLENBQUMsR0FBRWlCLEVBQUUsb0JBQWtCZCxJQUFFYyxFQUFFLGVBQWNkLElBQUVjLEVBQUUsa0JBQWlCQSxFQUFFLGtCQUFnQmQ7QUFBRSxxQkFBUWUsSUFDNWZELEVBQUUsZUFBY0csS0FBRWpCLEdBQUUsSUFBRWlCLE1BQUc7QUFBQyxrQkFBSUQsS0FBRSxLQUFHOEssR0FBRzdLLEVBQUMsR0FBRXJCLEtBQUUsS0FBR29CO0FBQUVELGdCQUFFQyxFQUFDLEtBQUdoQixHQUFFaUIsTUFBRyxDQUFDckI7WUFBQztVQUFDO1FBQUMsR0FBRSxDQUFDTyxHQUFFRCxHQUFFYSxDQUFDLENBQUMsR0FBRUUsRUFBRSxVQUFVLFdBQVU7QUFBQyxpQkFBT0YsRUFBRWIsRUFBRSxTQUFRLFdBQVU7QUFBQyxnQkFBSUYsSUFBRVQsRUFBRSxhQUFZWSxJQUFFWixFQUFFO0FBQVksZ0JBQUc7QUFBQ1ksZ0JBQUVILEVBQUVFLEVBQUUsT0FBTyxDQUFDO0FBQUUsa0JBQUlhLEtBQUVzWCxHQUFHeFksQ0FBQztBQUFFaUIsZ0JBQUUsb0JBQWtCQyxLQUFFRCxFQUFFO1lBQVksU0FBT3RCLElBQUU7QUFBQ1csZ0JBQUUsV0FBVTtBQUFDLHNCQUFNWDtjQUFFLENBQUM7WUFBQztVQUFDLENBQUM7UUFBQyxHQUFFLENBQUNVLEdBQUVhLENBQUMsQ0FBQyxHQUFFMlEsR0FBR3BSLEdBQUVILENBQUMsS0FBR3VSLEdBQUc1UixHQUFFSSxDQUFDLEtBQUd3UixHQUFHdFIsR0FBRVcsQ0FBQyxNQUFJZixJQUFFLEVBQUMsU0FBUSxNQUFLLFVBQVMsTUFBSyxxQkFBb0IwYixJQUFHLG1CQUFrQi9jLEVBQUMsR0FBRXFCLEVBQUUsV0FBUyxJQUFFK2IsR0FBRyxLQUFLLE1BQUtsYSxJQUFFN0IsQ0FBQyxHQUFFZ0IsRUFBRSxRQUFNaEIsR0FBRWdCLEVBQUUsWUFBVSxNQUFLckMsSUFBRWtkLEdBQUcvYSxHQUFFWixHQUFFQyxDQUFDLEdBQUVhLEVBQUUsZ0JBQWNBLEVBQUUsWUFBVXJDLElBQVVBO01BQUM7QUFDdmUsZUFBU3FkLEdBQUdoYyxHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBSVksSUFBRTBhLEdBQUc7QUFBRSxlQUFPSyxHQUFHL2EsR0FBRWYsR0FBRUUsR0FBRUMsQ0FBQztNQUFDO0FBQUMsZUFBUzhiLEdBQUdqYyxHQUFFO0FBQUMsWUFBSUUsSUFBRXNiLEdBQUc7QUFBRSxlQUFhLE9BQU94YixLQUFwQixlQUF3QkEsSUFBRUEsRUFBRSxJQUFHRSxFQUFFLGdCQUFjQSxFQUFFLFlBQVVGLEdBQUVBLElBQUVFLEVBQUUsUUFBTSxFQUFDLFNBQVEsTUFBSyxVQUFTLE1BQUsscUJBQW9Cd2IsSUFBRyxtQkFBa0IxYixFQUFDLEdBQUVBLElBQUVBLEVBQUUsV0FBUytiLEdBQUcsS0FBSyxNQUFLbGEsSUFBRTdCLENBQUMsR0FBUSxDQUFDRSxFQUFFLGVBQWNGLENBQUM7TUFBQztBQUNsUixlQUFTa2MsR0FBR2xjLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUU7QUFBQyxlQUFBZixJQUFFLEVBQUMsS0FBSUEsR0FBRSxRQUFPRSxHQUFFLFNBQVFDLEdBQUUsTUFBS1ksR0FBRSxNQUFLLEtBQUksR0FBRWIsSUFBRTJCLEdBQUUsYUFBbUIzQixNQUFQLFFBQVVBLElBQUUsRUFBQyxZQUFXLEtBQUksR0FBRTJCLEdBQUUsY0FBWTNCLEdBQUVBLEVBQUUsYUFBV0YsRUFBRSxPQUFLQSxNQUFJRyxJQUFFRCxFQUFFLFlBQWtCQyxNQUFQLE9BQVNELEVBQUUsYUFBV0YsRUFBRSxPQUFLQSxLQUFHZSxJQUFFWixFQUFFLE1BQUtBLEVBQUUsT0FBS0gsR0FBRUEsRUFBRSxPQUFLZSxHQUFFYixFQUFFLGFBQVdGLEtBQVdBO01BQUM7QUFBQyxlQUFTbWMsR0FBR25jLEdBQUU7QUFBQyxZQUFJRSxJQUFFc2IsR0FBRztBQUFFLGVBQUF4YixJQUFFLEVBQUMsU0FBUUEsRUFBQyxHQUFTRSxFQUFFLGdCQUFjRjtNQUFDO0FBQUMsZUFBU29jLEtBQUk7QUFBQyxlQUFPWCxHQUFHLEVBQUU7TUFBYTtBQUFDLGVBQVNZLEdBQUdyYyxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQUMsWUFBSUQsSUFBRTBhLEdBQUc7QUFBRTNaLFdBQUUsU0FBTzdCLEdBQUVjLEVBQUUsZ0JBQWNvYixHQUFHLElBQUVoYyxHQUFFQyxHQUFFLFFBQWdCWSxNQUFULFNBQVcsT0FBS0EsQ0FBQztNQUFDO0FBQ25jLGVBQVN1YixHQUFHdGMsR0FBRUUsR0FBRUMsR0FBRVksR0FBRTtBQUFDLFlBQUlELElBQUUyYSxHQUFHO0FBQUUxYSxZQUFXQSxNQUFULFNBQVcsT0FBS0E7QUFBRSxZQUFJSSxJQUFFO0FBQU8sWUFBVVcsT0FBUCxNQUFTO0FBQUMsY0FBSVosSUFBRVksR0FBRTtBQUEwQixjQUFaWCxJQUFFRCxFQUFFLFNBQWtCSCxNQUFQLFFBQVVtYSxHQUFHbmEsR0FBRUcsRUFBRSxJQUFJLEdBQUU7QUFBQ2diLGVBQUdoYyxHQUFFQyxHQUFFZ0IsR0FBRUosQ0FBQztBQUFFO1VBQU07UUFBQztBQUFDYyxXQUFFLFNBQU83QixHQUFFYyxFQUFFLGdCQUFjb2IsR0FBRyxJQUFFaGMsR0FBRUMsR0FBRWdCLEdBQUVKLENBQUM7TUFBQztBQUFDLGVBQVN3YixHQUFHdmMsR0FBRUUsR0FBRTtBQUFDLGVBQU9tYyxHQUFHLEtBQUksR0FBRXJjLEdBQUVFLENBQUM7TUFBQztBQUFDLGVBQVNzYyxHQUFHeGMsR0FBRUUsR0FBRTtBQUFDLGVBQU9vYyxHQUFHLEtBQUksR0FBRXRjLEdBQUVFLENBQUM7TUFBQztBQUFDLGVBQVN1YyxHQUFHemMsR0FBRUUsR0FBRTtBQUFDLGVBQU9vYyxHQUFHLEdBQUUsR0FBRXRjLEdBQUVFLENBQUM7TUFBQztBQUFDLGVBQVN3YyxHQUFHMWMsR0FBRUUsR0FBRTtBQUFDLFlBQWdCLE9BQU9BLEtBQXBCO0FBQXNCLGlCQUFPRixJQUFFQSxFQUFFLEdBQUVFLEVBQUVGLENBQUMsR0FBRSxXQUFVO0FBQUNFLGNBQUUsSUFBSTtVQUFDO0FBQUUsWUFBVUEsS0FBUDtBQUFxQixpQkFBT0YsSUFBRUEsRUFBRSxHQUFFRSxFQUFFLFVBQVFGLEdBQUUsV0FBVTtBQUFDRSxjQUFFLFVBQVE7VUFBSTtNQUFDO0FBQ25kLGVBQVN5YyxHQUFHM2MsR0FBRUUsR0FBRUMsR0FBRTtBQUFDLGVBQUFBLElBQVNBLEtBQVAsT0FBcUJBLEVBQUUsT0FBTyxDQUFDSCxDQUFDLENBQUMsSUFBRSxNQUFZc2MsR0FBRyxHQUFFLEdBQUVJLEdBQUcsS0FBSyxNQUFLeGMsR0FBRUYsQ0FBQyxHQUFFRyxDQUFDO01BQUM7QUFBQyxlQUFTeWMsS0FBSTtNQUFDO0FBQUMsZUFBU0MsR0FBRzdjLEdBQUVFLEdBQUU7QUFBQyxZQUFJQyxJQUFFc2IsR0FBRztBQUFFdmIsWUFBV0EsTUFBVCxTQUFXLE9BQUtBO0FBQUUsWUFBSWEsSUFBRVosRUFBRTtBQUFjLGVBQVVZLE1BQVAsUUFBaUJiLE1BQVAsUUFBVWdiLEdBQUdoYixHQUFFYSxFQUFFLENBQUMsQ0FBQyxJQUFTQSxFQUFFLENBQUMsS0FBRVosRUFBRSxnQkFBYyxDQUFDSCxHQUFFRSxDQUFDLEdBQVNGO01BQUM7QUFBQyxlQUFTOGMsR0FBRzljLEdBQUVFLEdBQUU7QUFBQyxZQUFJQyxJQUFFc2IsR0FBRztBQUFFdmIsWUFBV0EsTUFBVCxTQUFXLE9BQUtBO0FBQUUsWUFBSWEsSUFBRVosRUFBRTtBQUFjLGVBQVVZLE1BQVAsUUFBaUJiLE1BQVAsUUFBVWdiLEdBQUdoYixHQUFFYSxFQUFFLENBQUMsQ0FBQyxJQUFTQSxFQUFFLENBQUMsS0FBRWYsSUFBRUEsRUFBRSxHQUFFRyxFQUFFLGdCQUFjLENBQUNILEdBQUVFLENBQUMsR0FBU0Y7TUFBQztBQUMxWixlQUFTK2MsR0FBRy9jLEdBQUVFLEdBQUU7QUFBQyxZQUFJQyxJQUFFbVcsR0FBRztBQUFFRSxXQUFHLEtBQUdyVyxJQUFFLEtBQUdBLEdBQUUsV0FBVTtBQUFDSCxZQUFFLElBQUU7UUFBQyxDQUFDLEdBQUV3VyxHQUFHLEtBQUdyVyxJQUFFLEtBQUdBLEdBQUUsV0FBVTtBQUFDLGNBQUlBLElBQUUwYSxHQUFHO0FBQVdBLGFBQUcsYUFBVztBQUFFLGNBQUc7QUFBQzdhLGNBQUUsS0FBRSxHQUFFRSxFQUFFO1VBQUMsVUFBQTtBQUFTMmEsZUFBRyxhQUFXMWE7VUFBQztRQUFDLENBQUM7TUFBQztBQUNoSyxlQUFTNGIsR0FBRy9iLEdBQUVFLEdBQUVDLEdBQUU7QUFBQyxZQUFJWSxJQUFFcVgsR0FBRyxHQUFFdFgsSUFBRXVYLEdBQUdyWSxDQUFDLEdBQUVtQixJQUFFLEVBQUMsTUFBS0wsR0FBRSxRQUFPWCxHQUFFLGNBQWEsTUFBSyxZQUFXLE1BQUssTUFBSyxLQUFJLEdBQUVlLElBQUVoQixFQUFFO0FBQTZFLFlBQTlEZ0IsTUFBUCxPQUFTQyxFQUFFLE9BQUtBLEtBQUdBLEVBQUUsT0FBS0QsRUFBRSxNQUFLQSxFQUFFLE9BQUtDLElBQUdqQixFQUFFLFVBQVFpQixHQUFFRCxJQUFFbEIsRUFBRSxXQUFhQSxNQUFJNkIsTUFBVVgsTUFBUCxRQUFVQSxNQUFJVztBQUFFbVosZUFBR0QsS0FBRzthQUFPO0FBQUMsY0FBTy9hLEVBQUUsVUFBTixNQUFxQmtCLE1BQVAsUUFBY0EsRUFBRSxVQUFOLE9BQWVBLElBQUVoQixFQUFFLHFCQUEyQmdCLE1BQVA7QUFBVSxnQkFBRztBQUFDLGtCQUFJRCxJQUFFZixFQUFFLG1CQUFrQmMsSUFBRUUsRUFBRUQsR0FBRWQsQ0FBQztBQUFrQyxrQkFBaENnQixFQUFFLGVBQWFELEdBQUVDLEVBQUUsYUFBV0gsR0FBSzBRLEdBQUcxUSxHQUFFQyxDQUFDO0FBQUU7WUFBTSxRQUFTO1lBQUMsVUFBQTtZQUFTO0FBQUNxWCxhQUFHdFksR0FBRWMsR0FBRUMsQ0FBQztRQUFDO01BQUM7QUFDamEsVUFBSXdhLEtBQUcsRUFBQyxhQUFZaEUsSUFBRyxhQUFZMEQsSUFBRyxZQUFXQSxJQUFHLFdBQVVBLElBQUcscUJBQW9CQSxJQUFHLGlCQUFnQkEsSUFBRyxTQUFRQSxJQUFHLFlBQVdBLElBQUcsUUFBT0EsSUFBRyxVQUFTQSxJQUFHLGVBQWNBLElBQUcsa0JBQWlCQSxJQUFHLGVBQWNBLElBQUcsa0JBQWlCQSxJQUFHLHFCQUFvQkEsSUFBRywwQkFBeUIsTUFBRSxHQUFFRyxLQUFHLEVBQUMsYUFBWTdELElBQUcsYUFBWSxTQUFTdlgsR0FBRUUsR0FBRTtBQUFDLGVBQUFzYixHQUFHLEVBQUUsZ0JBQWMsQ0FBQ3hiLEdBQVdFLE1BQVQsU0FBVyxPQUFLQSxDQUFDLEdBQVNGO01BQUMsR0FBRSxZQUFXdVgsSUFBRyxXQUFVZ0YsSUFBRyxxQkFBb0IsU0FBU3ZjLEdBQUVFLEdBQUVDLEdBQUU7QUFBQyxlQUFBQSxJQUFTQSxLQUFQLE9BQXFCQSxFQUFFLE9BQU8sQ0FBQ0gsQ0FBQyxDQUFDLElBQUUsTUFBWXFjLEdBQUcsR0FBRSxHQUFFSyxHQUFHLEtBQUssTUFDdmZ4YyxHQUFFRixDQUFDLEdBQUVHLENBQUM7TUFBQyxHQUFFLGlCQUFnQixTQUFTSCxHQUFFRSxHQUFFO0FBQUMsZUFBT21jLEdBQUcsR0FBRSxHQUFFcmMsR0FBRUUsQ0FBQztNQUFDLEdBQUUsU0FBUSxTQUFTRixHQUFFRSxHQUFFO0FBQUMsWUFBSUMsSUFBRXFiLEdBQUc7QUFBRSxlQUFBdGIsSUFBV0EsTUFBVCxTQUFXLE9BQUtBLEdBQUVGLElBQUVBLEVBQUUsR0FBRUcsRUFBRSxnQkFBYyxDQUFDSCxHQUFFRSxDQUFDLEdBQVNGO01BQUMsR0FBRSxZQUFXLFNBQVNBLEdBQUVFLEdBQUVDLEdBQUU7QUFBQyxZQUFJWSxJQUFFeWEsR0FBRztBQUFFLGVBQUF0YixJQUFXQyxNQUFULFNBQVdBLEVBQUVELENBQUMsSUFBRUEsR0FBRWEsRUFBRSxnQkFBY0EsRUFBRSxZQUFVYixHQUFFRixJQUFFZSxFQUFFLFFBQU0sRUFBQyxTQUFRLE1BQUssVUFBUyxNQUFLLHFCQUFvQmYsR0FBRSxtQkFBa0JFLEVBQUMsR0FBRUYsSUFBRUEsRUFBRSxXQUFTK2IsR0FBRyxLQUFLLE1BQUtsYSxJQUFFN0IsQ0FBQyxHQUFRLENBQUNlLEVBQUUsZUFBY2YsQ0FBQztNQUFDLEdBQUUsUUFBT21jLElBQUcsVUFBU0YsSUFBRyxlQUFjVyxJQUFHLGtCQUFpQixTQUFTNWMsR0FBRTtBQUFDLFlBQUlFLElBQUUrYixHQUFHamMsQ0FBQyxHQUFFRyxJQUFFRCxFQUFFLENBQUMsR0FBRWEsSUFBRWIsRUFBRSxDQUFDO0FBQUUsZUFBQXFjLEdBQUcsV0FBVTtBQUFDLGNBQUlyYyxJQUFFMmEsR0FBRztBQUM5ZUEsYUFBRyxhQUFXO0FBQUUsY0FBRztBQUFDOVosY0FBRWYsQ0FBQztVQUFDLFVBQUE7QUFBUzZhLGVBQUcsYUFBVzNhO1VBQUM7UUFBQyxHQUFFLENBQUNGLENBQUMsQ0FBQyxHQUFTRztNQUFDLEdBQUUsZUFBYyxXQUFVO0FBQUMsWUFBSUgsSUFBRWljLEdBQUcsS0FBRSxHQUFFL2IsSUFBRUYsRUFBRSxDQUFDO0FBQUUsZUFBQUEsSUFBRStjLEdBQUcsS0FBSyxNQUFLL2MsRUFBRSxDQUFDLENBQUMsR0FBRW1jLEdBQUduYyxDQUFDLEdBQVEsQ0FBQ0EsR0FBRUUsQ0FBQztNQUFDLEdBQUUsa0JBQWlCLFNBQVNGLEdBQUVFLEdBQUVDLEdBQUU7QUFBQyxZQUFJWSxJQUFFeWEsR0FBRztBQUFFLGVBQUF6YSxFQUFFLGdCQUFjLEVBQUMsTUFBSyxFQUFDLGFBQVliLEdBQUUsYUFBWSxLQUFJLEdBQUUsUUFBT0YsR0FBRSxXQUFVRyxFQUFDLEdBQVMyYixHQUFHL2EsR0FBRWYsR0FBRUUsR0FBRUMsQ0FBQztNQUFDLEdBQUUscUJBQW9CLFdBQVU7QUFBQyxZQUFHK1osSUFBRztBQUFDLGNBQUlsYSxJQUFFLE9BQUdFLElBQUUrVCxHQUFHLFdBQVU7QUFBQyxrQkFBQWpVLE1BQUlBLElBQUUsTUFBR0csRUFBRSxRQUFNNlQsTUFBTSxTQUFTLEVBQUUsQ0FBQyxJQUFTLE1BQU1qVSxFQUFFLEdBQUcsQ0FBQztVQUFFLENBQUMsR0FBRUksSUFBRThiLEdBQUcvYixDQUFDLEVBQUUsQ0FBQztBQUFFLGlCQUFLLEVBQUEyQixHQUFFLE9BQUssT0FBS0EsR0FBRSxTQUFPLEtBQUlxYSxHQUFHLEdBQUUsV0FBVTtBQUFDL2IsY0FBRSxRQUFNNlQsTUFBTSxTQUFTLEVBQUUsQ0FBQztVQUFDLEdBQ3BmLFFBQU8sSUFBSSxJQUFVOVQ7UUFBQztBQUFDLGVBQUFBLElBQUUsUUFBTThULE1BQU0sU0FBUyxFQUFFLEdBQUVpSSxHQUFHL2IsQ0FBQyxHQUFTQTtNQUFDLEdBQUUsMEJBQXlCLE1BQUUsR0FBRW1iLEtBQUcsRUFBQyxhQUFZOUQsSUFBRyxhQUFZc0YsSUFBRyxZQUFXdEYsSUFBRyxXQUFVaUYsSUFBRyxxQkFBb0JHLElBQUcsaUJBQWdCRixJQUFHLFNBQVFLLElBQUcsWUFBV25CLElBQUcsUUFBT1MsSUFBRyxVQUFTLFdBQVU7QUFBQyxlQUFPVCxHQUFHRCxFQUFFO01BQUMsR0FBRSxlQUFja0IsSUFBRyxrQkFBaUIsU0FBUzVjLEdBQUU7QUFBQyxZQUFJRSxJQUFFeWIsR0FBR0QsRUFBRSxHQUFFdmIsSUFBRUQsRUFBRSxDQUFDLEdBQUVhLElBQUViLEVBQUUsQ0FBQztBQUFFLGVBQUFzYyxHQUFHLFdBQVU7QUFBQyxjQUFJdGMsSUFBRTJhLEdBQUc7QUFBV0EsYUFBRyxhQUFXO0FBQUUsY0FBRztBQUFDOVosY0FBRWYsQ0FBQztVQUFDLFVBQUE7QUFBUzZhLGVBQUcsYUFBVzNhO1VBQUM7UUFBQyxHQUFFLENBQUNGLENBQUMsQ0FBQyxHQUFTRztNQUFDLEdBQUUsZUFBYyxXQUFVO0FBQUMsWUFBSUgsSUFBRTJiLEdBQUdELEVBQUUsRUFBRSxDQUFDO0FBQUUsZUFBTSxDQUFDVSxHQUFHLEVBQUUsU0FDOWVwYyxDQUFDO01BQUMsR0FBRSxrQkFBaUJnYyxJQUFHLHFCQUFvQixXQUFVO0FBQUMsZUFBT0wsR0FBR0QsRUFBRSxFQUFFLENBQUM7TUFBQyxHQUFFLDBCQUF5QixNQUFFLEdBQUVKLEtBQUcsRUFBQyxhQUFZL0QsSUFBRyxhQUFZc0YsSUFBRyxZQUFXdEYsSUFBRyxXQUFVaUYsSUFBRyxxQkFBb0JHLElBQUcsaUJBQWdCRixJQUFHLFNBQVFLLElBQUcsWUFBV2xCLElBQUcsUUFBT1EsSUFBRyxVQUFTLFdBQVU7QUFBQyxlQUFPUixHQUFHRixFQUFFO01BQUMsR0FBRSxlQUFja0IsSUFBRyxrQkFBaUIsU0FBUzVjLEdBQUU7QUFBQyxZQUFJRSxJQUFFMGIsR0FBR0YsRUFBRSxHQUFFdmIsSUFBRUQsRUFBRSxDQUFDLEdBQUVhLElBQUViLEVBQUUsQ0FBQztBQUFFLGVBQUFzYyxHQUFHLFdBQVU7QUFBQyxjQUFJdGMsSUFBRTJhLEdBQUc7QUFBV0EsYUFBRyxhQUFXO0FBQUUsY0FBRztBQUFDOVosY0FBRWYsQ0FBQztVQUFDLFVBQUE7QUFBUzZhLGVBQUcsYUFBVzNhO1VBQUM7UUFBQyxHQUFFLENBQUNGLENBQUMsQ0FBQyxHQUFTRztNQUFDLEdBQUUsZUFBYyxXQUFVO0FBQUMsWUFBSUgsSUFBRTRiLEdBQUdGLEVBQUUsRUFBRSxDQUFDO0FBQUUsZUFBTSxDQUFDVSxHQUFHLEVBQUUsU0FDcmZwYyxDQUFDO01BQUMsR0FBRSxrQkFBaUJnYyxJQUFHLHFCQUFvQixXQUFVO0FBQUMsZUFBT0osR0FBR0YsRUFBRSxFQUFFLENBQUM7TUFBQyxHQUFFLDBCQUF5QixNQUFFLEdBQUVzQixLQUFHelosR0FBRyxtQkFBa0IrVCxLQUFHO0FBQUcsZUFBUzJGLEdBQUdqZCxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQUNiLFVBQUUsUUFBYUYsTUFBUCxPQUFTcVosR0FBR25aLEdBQUUsTUFBS0MsR0FBRVksQ0FBQyxJQUFFcVksR0FBR2xaLEdBQUVGLEVBQUUsT0FBTUcsR0FBRVksQ0FBQztNQUFDO0FBQUMsZUFBU21jLEdBQUdsZCxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFRCxHQUFFO0FBQUNYLFlBQUVBLEVBQUU7QUFBTyxZQUFJZ0IsSUFBRWpCLEVBQUU7QUFBOEIsZUFBMUJtWCxHQUFHblgsR0FBRVksQ0FBQyxHQUFFQyxJQUFFb2EsR0FBR25iLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVJLEdBQUVMLENBQUMsR0FBWWQsTUFBUCxRQUFVLENBQUNzWCxNQUFVcFgsRUFBRSxjQUFZRixFQUFFLGFBQVlFLEVBQUUsU0FBTyxNQUFLRixFQUFFLFNBQU8sQ0FBQ2MsR0FBRXFjLEdBQUduZCxHQUFFRSxHQUFFWSxDQUFDLE1BQUVaLEVBQUUsU0FBTyxHQUFFK2MsR0FBR2pkLEdBQUVFLEdBQUVhLEdBQUVELENBQUMsR0FBU1osRUFBRTtNQUFLO0FBQ2haLGVBQVNrZCxHQUFHcGQsR0FBRUUsR0FBRUMsR0FBRVksR0FBRUQsR0FBRUssR0FBRTtBQUFDLFlBQVVuQixNQUFQLE1BQVM7QUFBQyxjQUFJa0IsSUFBRWYsRUFBRTtBQUFLLGlCQUFnQixPQUFPZSxLQUFwQixjQUF1QixDQUFDbWMsR0FBR25jLENBQUMsS0FBWUEsRUFBRSxpQkFBWCxVQUFnQ2YsRUFBRSxZQUFULFFBQTJCQSxFQUFFLGlCQUFYLFVBQStCRCxFQUFFLE1BQUksSUFBR0EsRUFBRSxPQUFLZ0IsR0FBRW9jLEdBQUd0ZCxHQUFFRSxHQUFFZ0IsR0FBRUgsR0FBRUQsR0FBRUssQ0FBQyxNQUFFbkIsSUFBRWlaLEdBQUc5WSxFQUFFLE1BQUssTUFBS1ksR0FBRWIsR0FBRUEsRUFBRSxNQUFLaUIsQ0FBQyxHQUFFbkIsRUFBRSxNQUFJRSxFQUFFLEtBQUlGLEVBQUUsU0FBT0UsR0FBU0EsRUFBRSxRQUFNRjtRQUFDO0FBQVcsZUFBVmtCLElBQUVsQixFQUFFLE9BQWMsRUFBQWMsSUFBRUssT0FBS0wsSUFBRUksRUFBRSxlQUFjZixJQUFFQSxFQUFFLFNBQVFBLElBQVNBLE1BQVAsT0FBU0EsSUFBRXlSLElBQUd6UixFQUFFVyxHQUFFQyxDQUFDLEtBQUdmLEVBQUUsUUFBTUUsRUFBRSxPQUFZaWQsR0FBR25kLEdBQUVFLEdBQUVpQixDQUFDLEtBQUVqQixFQUFFLFNBQU8sR0FBRUYsSUFBRStZLEdBQUc3WCxHQUFFSCxDQUFDLEdBQUVmLEVBQUUsTUFBSUUsRUFBRSxLQUFJRixFQUFFLFNBQU9FLEdBQVNBLEVBQUUsUUFBTUY7TUFBQztBQUNuYixlQUFTc2QsR0FBR3RkLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVELEdBQUVLLEdBQUU7QUFBQyxZQUFVbkIsTUFBUCxRQUFVNFIsR0FBRzVSLEVBQUUsZUFBY2UsQ0FBQyxLQUFHZixFQUFFLFFBQU1FLEVBQUU7QUFBSSxjQUFHb1gsS0FBRyxRQUFRblcsSUFBRUwsT0FBUDtBQUFlZCxjQUFFLFFBQU0sVUFBU3NYLEtBQUc7O0FBQVMsbUJBQU9wWCxFQUFFLFFBQU1GLEVBQUUsT0FBTW1kLEdBQUduZCxHQUFFRSxHQUFFaUIsQ0FBQztBQUFFLGVBQU9vYyxHQUFHdmQsR0FBRUUsR0FBRUMsR0FBRVksR0FBRUksQ0FBQztNQUFDO0FBQ3JMLGVBQVNxYyxHQUFHeGQsR0FBRUUsR0FBRUMsR0FBRTtBQUFDLFlBQUlZLElBQUViLEVBQUUsY0FBYVksSUFBRUMsRUFBRSxVQUFTSSxJQUFTbkIsTUFBUCxPQUFTQSxFQUFFLGdCQUFjO0FBQUssWUFBY2UsRUFBRSxTQUFiLFlBQXFEQSxFQUFFLFNBQXBDO0FBQXlDLGNBQVEsRUFBQWIsRUFBRSxPQUFLO0FBQUdBLGNBQUUsZ0JBQWMsRUFBQyxXQUFVLEVBQUMsR0FBRXVkLEdBQUd2ZCxHQUFFQyxDQUFDO21CQUFlQSxJQUFFO0FBQVlELGNBQUUsZ0JBQWMsRUFBQyxXQUFVLEVBQUMsR0FBRXVkLEdBQUd2ZCxHQUFTaUIsTUFBUCxPQUFTQSxFQUFFLFlBQVVoQixDQUFDOztBQUFPLG1CQUFPSCxJQUFTbUIsTUFBUCxPQUFTQSxFQUFFLFlBQVVoQixJQUFFQSxHQUFFRCxFQUFFLFFBQU1BLEVBQUUsYUFBVyxZQUFXQSxFQUFFLGdCQUFjLEVBQUMsV0FBVUYsRUFBQyxHQUFFeWQsR0FBR3ZkLEdBQUVGLENBQUMsR0FBRTs7QUFBaUJtQixnQkFBUCxRQUFVSixJQUFFSSxFQUFFLFlBQVVoQixHQUFFRCxFQUFFLGdCQUFjLFFBQU1hLElBQUVaLEdBQUVzZCxHQUFHdmQsR0FBRWEsQ0FBQztBQUFFLGVBQUFrYyxHQUFHamQsR0FBRUUsR0FBRVksR0FBRVgsQ0FBQyxHQUFTRCxFQUFFO01BQUs7QUFDL2UsZUFBU3dkLEdBQUcxZCxHQUFFRSxHQUFFO0FBQUMsWUFBSUMsSUFBRUQsRUFBRTtBQUFBLFNBQWNGLE1BQVAsUUFBaUJHLE1BQVAsUUFBaUJILE1BQVAsUUFBVUEsRUFBRSxRQUFNRyxPQUFFRCxFQUFFLFNBQU87TUFBRztBQUFDLGVBQVNxZCxHQUFHdmQsR0FBRUUsR0FBRUMsR0FBRVksR0FBRUQsR0FBRTtBQUFDLFlBQUlLLElBQUV5VCxHQUFHelUsQ0FBQyxJQUFFdVUsS0FBR2xULEdBQUU7QUFBNEMsZUFBcENMLElBQUV3VCxHQUFHelUsR0FBRWlCLENBQUMsR0FBRWtXLEdBQUduWCxHQUFFWSxDQUFDLEdBQUVYLElBQUVnYixHQUFHbmIsR0FBRUUsR0FBRUMsR0FBRVksR0FBRUksR0FBRUwsQ0FBQyxHQUFZZCxNQUFQLFFBQVUsQ0FBQ3NYLE1BQVVwWCxFQUFFLGNBQVlGLEVBQUUsYUFBWUUsRUFBRSxTQUFPLE1BQUtGLEVBQUUsU0FBTyxDQUFDYyxHQUFFcWMsR0FBR25kLEdBQUVFLEdBQUVZLENBQUMsTUFBRVosRUFBRSxTQUFPLEdBQUUrYyxHQUFHamQsR0FBRUUsR0FBRUMsR0FBRVcsQ0FBQyxHQUFTWixFQUFFO01BQUs7QUFDdFMsZUFBU3lkLEdBQUczZCxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFRCxHQUFFO0FBQUMsWUFBRzhULEdBQUd6VSxDQUFDLEdBQUU7QUFBQyxjQUFJZ0IsSUFBRTtBQUFHNlQsYUFBRzlVLENBQUM7UUFBQztBQUFNaUIsY0FBRTtBQUFXLFlBQVJrVyxHQUFHblgsR0FBRVksQ0FBQyxHQUFZWixFQUFFLGNBQVQ7QUFBMEJGLGdCQUFQLFNBQVdBLEVBQUUsWUFBVSxNQUFLRSxFQUFFLFlBQVUsTUFBS0EsRUFBRSxTQUFPLElBQUdzWSxHQUFHdFksR0FBRUMsR0FBRVksQ0FBQyxHQUFFMlgsR0FBR3hZLEdBQUVDLEdBQUVZLEdBQUVELENBQUMsR0FBRUMsSUFBRTtpQkFBa0JmLE1BQVAsTUFBUztBQUFDLGNBQUlrQixJQUFFaEIsRUFBRSxXQUFVZSxJQUFFZixFQUFFO0FBQWNnQixZQUFFLFFBQU1EO0FBQUUsY0FBSUQsSUFBRUUsRUFBRSxTQUFRLElBQUVmLEVBQUU7QUFBdUIsaUJBQU8sS0FBbEIsWUFBNEIsTUFBUCxPQUFTLElBQUVvWCxHQUFHLENBQUMsS0FBRyxJQUFFM0MsR0FBR3pVLENBQUMsSUFBRXVVLEtBQUdsVCxHQUFFLFNBQVEsSUFBRW1ULEdBQUd6VSxHQUFFLENBQUM7QUFBRyxjQUFJdkIsSUFBRXdCLEVBQUUsMEJBQXlCQyxJQUFlLE9BQU96QixLQUFwQixjQUFvQyxPQUFPdUMsRUFBRSwyQkFBdEI7QUFBOENkLGVBQWdCLE9BQU9jLEVBQUUsb0NBQXRCLGNBQ2piLE9BQU9BLEVBQUUsNkJBQXRCLGVBQWtERCxNQUFJRixLQUFHQyxNQUFJLE1BQUl5WCxHQUFHdlksR0FBRWdCLEdBQUVILEdBQUUsQ0FBQyxHQUFFeVcsS0FBRztBQUFHLGNBQUlqWSxJQUFFVyxFQUFFO0FBQWNnQixZQUFFLFFBQU0zQixHQUFFdVksR0FBRzVYLEdBQUVhLEdBQUVHLEdBQUVKLENBQUMsR0FBRUUsSUFBRWQsRUFBRSxlQUFjZSxNQUFJRixLQUFHeEIsTUFBSXlCLEtBQUdTLEdBQUUsV0FBUytWLE1BQWlCLE9BQU83WSxLQUFwQixlQUF3QnVaLEdBQUdoWSxHQUFFQyxHQUFFeEIsR0FBRW9DLENBQUMsR0FBRUMsSUFBRWQsRUFBRSxpQkFBZ0JlLElBQUV1VyxNQUFJZSxHQUFHclksR0FBRUMsR0FBRWMsR0FBRUYsR0FBRXhCLEdBQUV5QixHQUFFLENBQUMsTUFBSVosS0FBZ0IsT0FBT2MsRUFBRSw2QkFBdEIsY0FBOEQsT0FBT0EsRUFBRSxzQkFBdEIsZUFBd0QsT0FBT0EsRUFBRSxzQkFBdEIsY0FBMENBLEVBQUUsbUJBQW1CLEdBQWUsT0FBT0EsRUFBRSw2QkFBdEIsY0FBaURBLEVBQUUsMEJBQTBCLElBQzdlLE9BQU9BLEVBQUUscUJBRHVlLGVBQ25kaEIsRUFBRSxTQUFPLE9BQWtCLE9BQU9nQixFQUFFLHFCQUF0QixlQUEwQ2hCLEVBQUUsU0FBTyxJQUFHQSxFQUFFLGdCQUFjYSxHQUFFYixFQUFFLGdCQUFjYyxJQUFHRSxFQUFFLFFBQU1ILEdBQUVHLEVBQUUsUUFBTUYsR0FBRUUsRUFBRSxVQUFRLEdBQUVILElBQUVFLE1BQWlCLE9BQU9DLEVBQUUscUJBQXRCLGVBQTBDaEIsRUFBRSxTQUFPLElBQUdhLElBQUU7UUFBRyxPQUFLO0FBQUNHLGNBQUVoQixFQUFFLFdBQVV3WCxHQUFHMVgsR0FBRUUsQ0FBQyxHQUFFZSxJQUFFZixFQUFFLGVBQWMsSUFBRUEsRUFBRSxTQUFPQSxFQUFFLGNBQVllLElBQUU0VixHQUFHM1csRUFBRSxNQUFLZSxDQUFDLEdBQUVDLEVBQUUsUUFBTSxHQUFFZCxJQUFFRixFQUFFLGNBQWFYLElBQUUyQixFQUFFLFNBQVFGLElBQUViLEVBQUUsYUFBdUIsT0FBT2EsS0FBbEIsWUFBNEJBLE1BQVAsT0FBU0EsSUFBRXVXLEdBQUd2VyxDQUFDLEtBQUdBLElBQUU0VCxHQUFHelUsQ0FBQyxJQUFFdVUsS0FBR2xULEdBQUUsU0FBUVIsSUFBRTJULEdBQUd6VSxHQUFFYyxDQUFDO0FBQUcsY0FBSVYsSUFBRUgsRUFBRTtBQUFBLFdBQTBCeEIsSUFBZSxPQUFPMkIsS0FBcEIsY0FDbGQsT0FBT1ksRUFBRSwyQkFBdEIsZUFBNkQsT0FBT0EsRUFBRSxvQ0FBdEIsY0FBcUUsT0FBT0EsRUFBRSw2QkFBdEIsZUFBa0RELE1BQUliLEtBQUdiLE1BQUl5QixNQUFJeVgsR0FBR3ZZLEdBQUVnQixHQUFFSCxHQUFFQyxDQUFDLEdBQUV3VyxLQUFHLE9BQUdqWSxJQUFFVyxFQUFFLGVBQWNnQixFQUFFLFFBQU0zQixHQUFFdVksR0FBRzVYLEdBQUVhLEdBQUVHLEdBQUVKLENBQUM7QUFBRSxjQUFJaEIsSUFBRUksRUFBRTtBQUFjZSxnQkFBSWIsS0FBR2IsTUFBSU8sS0FBRzJCLEdBQUUsV0FBUytWLE1BQWlCLE9BQU9sWCxLQUFwQixlQUF3QjRYLEdBQUdoWSxHQUFFQyxHQUFFRyxHQUFFUyxDQUFDLEdBQUVqQixJQUFFSSxFQUFFLGlCQUFnQixJQUFFc1gsTUFBSWUsR0FBR3JZLEdBQUVDLEdBQUUsR0FBRVksR0FBRXhCLEdBQUVPLEdBQUVrQixDQUFDLE1BQUlyQyxLQUFnQixPQUFPdUMsRUFBRSw4QkFBdEIsY0FBK0QsT0FBT0EsRUFBRSx1QkFBdEIsZUFBeUQsT0FBT0EsRUFBRSx1QkFBdEIsY0FBMkNBLEVBQUUsb0JBQW9CSCxHQUMxZ0JqQixHQUFFa0IsQ0FBQyxHQUFlLE9BQU9FLEVBQUUsOEJBQXRCLGNBQWtEQSxFQUFFLDJCQUEyQkgsR0FBRWpCLEdBQUVrQixDQUFDLElBQWdCLE9BQU9FLEVBQUUsc0JBQXRCLGVBQTJDaEIsRUFBRSxTQUFPLElBQWdCLE9BQU9nQixFQUFFLDJCQUF0QixlQUFnRGhCLEVBQUUsU0FBTyxTQUFvQixPQUFPZ0IsRUFBRSxzQkFBdEIsY0FBMENELE1BQUlqQixFQUFFLGlCQUFlVCxNQUFJUyxFQUFFLGtCQUFnQkUsRUFBRSxTQUFPLElBQWdCLE9BQU9nQixFQUFFLDJCQUF0QixjQUErQ0QsTUFBSWpCLEVBQUUsaUJBQWVULE1BQUlTLEVBQUUsa0JBQWdCRSxFQUFFLFNBQU8sTUFBS0EsRUFBRSxnQkFBY2EsR0FBRWIsRUFBRSxnQkFBY0osSUFBR29CLEVBQUUsUUFBTUgsR0FBRUcsRUFBRSxRQUFNcEIsR0FBRW9CLEVBQUUsVUFBUUYsR0FBRUQsSUFBRSxNQUFpQixPQUFPRyxFQUFFLHNCQUF0QixjQUN2ZUQsTUFBSWpCLEVBQUUsaUJBQWVULE1BQUlTLEVBQUUsa0JBQWdCRSxFQUFFLFNBQU8sSUFBZ0IsT0FBT2dCLEVBQUUsMkJBQXRCLGNBQStDRCxNQUFJakIsRUFBRSxpQkFBZVQsTUFBSVMsRUFBRSxrQkFBZ0JFLEVBQUUsU0FBTyxNQUFLYSxJQUFFO1FBQUc7QUFBQyxlQUFPNmMsR0FBRzVkLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVJLEdBQUVMLENBQUM7TUFBQztBQUMzTCxlQUFTOGMsR0FBRzVkLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVELEdBQUVLLEdBQUU7QUFBQ3VjLFdBQUcxZCxHQUFFRSxDQUFDO0FBQUUsWUFBSWdCLEtBQU9oQixFQUFFLFFBQU0sUUFBYjtBQUFpQixZQUFHLENBQUNhLEtBQUcsQ0FBQ0c7QUFBRSxpQkFBT0osS0FBR21VLEdBQUcvVSxHQUFFQyxHQUFFLEtBQUUsR0FBRWdkLEdBQUduZCxHQUFFRSxHQUFFaUIsQ0FBQztBQUFFSixZQUFFYixFQUFFLFdBQVU4YyxHQUFHLFVBQVE5YztBQUFFLFlBQUllLElBQUVDLEtBQWdCLE9BQU9mLEVBQUUsNEJBQXRCLGFBQStDLE9BQUtZLEVBQUUsT0FBTztBQUFFLGVBQUFiLEVBQUUsU0FBTyxHQUFTRixNQUFQLFFBQVVrQixLQUFHaEIsRUFBRSxRQUFNa1osR0FBR2xaLEdBQUVGLEVBQUUsT0FBTSxNQUFLbUIsQ0FBQyxHQUFFakIsRUFBRSxRQUFNa1osR0FBR2xaLEdBQUUsTUFBS2UsR0FBRUUsQ0FBQyxLQUFHOGIsR0FBR2pkLEdBQUVFLEdBQUVlLEdBQUVFLENBQUMsR0FBRWpCLEVBQUUsZ0JBQWNhLEVBQUUsT0FBTUQsS0FBR21VLEdBQUcvVSxHQUFFQyxHQUFFLElBQUUsR0FBU0QsRUFBRTtNQUFLO0FBQUMsZUFBUzJkLEdBQUc3ZCxHQUFFO0FBQUMsWUFBSUUsSUFBRUYsRUFBRTtBQUFVRSxVQUFFLGlCQUFlNFUsR0FBRzlVLEdBQUVFLEVBQUUsZ0JBQWVBLEVBQUUsbUJBQWlCQSxFQUFFLE9BQU8sSUFBRUEsRUFBRSxXQUFTNFUsR0FBRzlVLEdBQUVFLEVBQUUsU0FBUSxLQUFFLEdBQUV5WixHQUFHM1osR0FBRUUsRUFBRSxhQUFhO01BQUM7QUFDM2UsVUFBSTRkLEtBQUcsRUFBQyxZQUFXLE1BQUssV0FBVSxFQUFDO0FBQ25DLGVBQVNDLEdBQUcvZCxHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBSVksSUFBRWIsRUFBRSxjQUFhWSxJQUFFYSxHQUFFLFNBQVFSLElBQUUsT0FBR0Q7QUFBME0sZ0JBQXZNQSxLQUFPaEIsRUFBRSxRQUFNLFFBQWIsT0FBb0JnQixJQUFTbEIsTUFBUCxRQUFpQkEsRUFBRSxrQkFBVCxPQUF1QixTQUFRYyxJQUFFLE9BQVAsSUFBV0ksS0FBR0MsSUFBRSxNQUFHakIsRUFBRSxTQUFPLE9BQVlGLE1BQVAsUUFBaUJBLEVBQUUsa0JBQVQsUUFBaUNlLEVBQUUsYUFBWCxVQUEwQkEsRUFBRSwrQkFBUCxTQUFvQ0QsS0FBRyxJQUFHRixHQUFFZSxJQUFFYixJQUFFLENBQUMsR0FBWWQsTUFBUCxRQUFtQmUsRUFBRSxhQUFYLFVBQXFCdVosR0FBR3BhLENBQUMsR0FBRUYsSUFBRWUsRUFBRSxVQUFTRCxJQUFFQyxFQUFFLFVBQVlJLEtBQVNuQixJQUFFZ2UsR0FBRzlkLEdBQUVGLEdBQUVjLEdBQUVYLENBQUMsR0FBRUQsRUFBRSxNQUFNLGdCQUFjLEVBQUMsV0FBVUMsRUFBQyxHQUFFRCxFQUFFLGdCQUFjNGQsSUFBRzlkLEtBQWdCLE9BQU9lLEVBQUUsNkJBQXBCLFlBQXFEZixJQUFFZ2UsR0FBRzlkLEdBQUVGLEdBQUVjLEdBQUVYLENBQUMsR0FBRUQsRUFBRSxNQUFNLGdCQUFjLEVBQUMsV0FBVUMsRUFBQyxHQUNoZ0JELEVBQUUsZ0JBQWM0ZCxJQUFHNWQsRUFBRSxRQUFNLFVBQVNGLE1BQUVHLElBQUU4ZCxHQUFHLEVBQUMsTUFBSyxXQUFVLFVBQVNqZSxFQUFDLEdBQUVFLEVBQUUsTUFBS0MsR0FBRSxJQUFJLEdBQUVBLEVBQUUsU0FBT0QsR0FBU0EsRUFBRSxRQUFNQyxNQUFZSCxFQUFFLGtCQUFULE9BQTJCbUIsS0FBU0osSUFBRW1kLEdBQUdsZSxHQUFFRSxHQUFFYSxFQUFFLFVBQVNBLEVBQUUsVUFBU1osQ0FBQyxHQUFFZ0IsSUFBRWpCLEVBQUUsT0FBTVksSUFBRWQsRUFBRSxNQUFNLGVBQWNtQixFQUFFLGdCQUFxQkwsTUFBUCxPQUFTLEVBQUMsV0FBVVgsRUFBQyxJQUFFLEVBQUMsV0FBVVcsRUFBRSxZQUFVWCxFQUFDLEdBQUVnQixFQUFFLGFBQVduQixFQUFFLGFBQVcsQ0FBQ0csR0FBRUQsRUFBRSxnQkFBYzRkLElBQUcvYyxNQUFFWixJQUFFZ2UsR0FBR25lLEdBQUVFLEdBQUVhLEVBQUUsVUFBU1osQ0FBQyxHQUFFRCxFQUFFLGdCQUFjLE1BQVlDLEtBQUtnQixLQUFTSixJQUFFbWQsR0FBR2xlLEdBQUVFLEdBQUVhLEVBQUUsVUFBU0EsRUFBRSxVQUFTWixDQUFDLEdBQUVnQixJQUFFakIsRUFBRSxPQUFNWSxJQUFFZCxFQUFFLE1BQU0sZUFBY21CLEVBQUUsZ0JBQXFCTCxNQUFQLE9BQVMsRUFBQyxXQUFVWCxFQUFDLElBQzFmLEVBQUMsV0FBVVcsRUFBRSxZQUFVWCxFQUFDLEdBQUVnQixFQUFFLGFBQVduQixFQUFFLGFBQVcsQ0FBQ0csR0FBRUQsRUFBRSxnQkFBYzRkLElBQUcvYyxNQUFFWixJQUFFZ2UsR0FBR25lLEdBQUVFLEdBQUVhLEVBQUUsVUFBU1osQ0FBQyxHQUFFRCxFQUFFLGdCQUFjLE1BQVlDO01BQUM7QUFBQyxlQUFTNmQsR0FBR2hlLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUU7QUFBQyxZQUFJRCxJQUFFZCxFQUFFLE1BQUttQixJQUFFbkIsRUFBRTtBQUFNLGVBQUFFLElBQUUsRUFBQyxNQUFLLFVBQVMsVUFBU0EsRUFBQyxHQUFPLEVBQUFZLElBQUUsTUFBV0ssTUFBUCxRQUFVQSxFQUFFLGFBQVcsR0FBRUEsRUFBRSxlQUFhakIsS0FBR2lCLElBQUU4YyxHQUFHL2QsR0FBRVksR0FBRSxHQUFFLElBQUksR0FBRVgsSUFBRWdaLEdBQUdoWixHQUFFVyxHQUFFQyxHQUFFLElBQUksR0FBRUksRUFBRSxTQUFPbkIsR0FBRUcsRUFBRSxTQUFPSCxHQUFFbUIsRUFBRSxVQUFRaEIsR0FBRUgsRUFBRSxRQUFNbUIsR0FBU2hCO01BQUM7QUFDdFYsZUFBU2dlLEdBQUduZSxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQUMsWUFBSUQsSUFBRWQsRUFBRTtBQUFNLGVBQUFBLElBQUVjLEVBQUUsU0FBUVgsSUFBRTRZLEdBQUdqWSxHQUFFLEVBQUMsTUFBSyxXQUFVLFVBQVNYLEVBQUMsQ0FBQyxHQUFPLEVBQUFELEVBQUUsT0FBSyxPQUFLQyxFQUFFLFFBQU1ZLElBQUdaLEVBQUUsU0FBT0QsR0FBRUMsRUFBRSxVQUFRLE1BQVlILE1BQVAsU0FBV0EsRUFBRSxhQUFXLE1BQUtBLEVBQUUsUUFBTSxHQUFFRSxFQUFFLGNBQVlBLEVBQUUsYUFBV0YsSUFBVUUsRUFBRSxRQUFNQztNQUFDO0FBQzlOLGVBQVMrZCxHQUFHbGUsR0FBRUUsR0FBRUMsR0FBRVksR0FBRUQsR0FBRTtBQUFDLFlBQUlLLElBQUVqQixFQUFFLE1BQUtnQixJQUFFbEIsRUFBRTtBQUFNQSxZQUFFa0IsRUFBRTtBQUFRLFlBQUlELElBQUUsRUFBQyxNQUFLLFVBQVMsVUFBU2QsRUFBQztBQUFFLGVBQUssRUFBQWdCLElBQUUsTUFBSWpCLEVBQUUsVUFBUWdCLEtBQUdmLElBQUVELEVBQUUsT0FBTUMsRUFBRSxhQUFXLEdBQUVBLEVBQUUsZUFBYWMsR0FBRUMsSUFBRWYsRUFBRSxZQUFrQmUsTUFBUCxRQUFVaEIsRUFBRSxjQUFZQyxFQUFFLGFBQVlELEVBQUUsYUFBV2dCLEdBQUVBLEVBQUUsYUFBVyxRQUFNaEIsRUFBRSxjQUFZQSxFQUFFLGFBQVcsUUFBTUMsSUFBRTRZLEdBQUc3WCxHQUFFRCxDQUFDLEdBQVNqQixNQUFQLE9BQVNlLElBQUVnWSxHQUFHL1ksR0FBRWUsQ0FBQyxLQUFHQSxJQUFFb1ksR0FBR3BZLEdBQUVJLEdBQUVMLEdBQUUsSUFBSSxHQUFFQyxFQUFFLFNBQU8sSUFBR0EsRUFBRSxTQUFPYixHQUFFQyxFQUFFLFNBQU9ELEdBQUVDLEVBQUUsVUFBUVksR0FBRWIsRUFBRSxRQUFNQyxHQUFTWTtNQUFDO0FBQUMsZUFBU3FkLEdBQUdwZSxHQUFFRSxHQUFFO0FBQUNGLFVBQUUsU0FBT0U7QUFBRSxZQUFJQyxJQUFFSCxFQUFFO0FBQWlCRyxjQUFQLFNBQVdBLEVBQUUsU0FBT0QsSUFBR2tYLEdBQUdwWCxFQUFFLFFBQU9FLENBQUM7TUFBQztBQUN4ZCxlQUFTbWUsR0FBR3JlLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVELEdBQUVLLEdBQUU7QUFBQyxZQUFJRCxJQUFFbEIsRUFBRTtBQUFxQmtCLGNBQVAsT0FBU2xCLEVBQUUsZ0JBQWMsRUFBQyxhQUFZRSxHQUFFLFdBQVUsTUFBSyxvQkFBbUIsR0FBRSxNQUFLYSxHQUFFLE1BQUtaLEdBQUUsVUFBU1csR0FBRSxZQUFXSyxFQUFDLEtBQUdELEVBQUUsY0FBWWhCLEdBQUVnQixFQUFFLFlBQVUsTUFBS0EsRUFBRSxxQkFBbUIsR0FBRUEsRUFBRSxPQUFLSCxHQUFFRyxFQUFFLE9BQUtmLEdBQUVlLEVBQUUsV0FBU0osR0FBRUksRUFBRSxhQUFXQztNQUFFO0FBQ3pRLGVBQVNtZCxHQUFHdGUsR0FBRUUsR0FBRUMsR0FBRTtBQUFDLFlBQUlZLElBQUViLEVBQUUsY0FBYVksSUFBRUMsRUFBRSxhQUFZSSxJQUFFSixFQUFFO0FBQXNDLFlBQWpDa2MsR0FBR2pkLEdBQUVFLEdBQUVhLEVBQUUsVUFBU1osQ0FBQyxHQUFFWSxJQUFFWSxHQUFFLFNBQWdCWixJQUFFO0FBQUdBLGNBQUVBLElBQUUsSUFBRSxHQUFFYixFQUFFLFNBQU87YUFBTztBQUFDLGNBQVVGLE1BQVAsUUFBZUEsRUFBRSxRQUFNO0FBQUlBO0FBQUUsbUJBQUlBLElBQUVFLEVBQUUsT0FBYUYsTUFBUCxRQUFVO0FBQUMsb0JBQVFBLEVBQUUsUUFBUDtBQUFrQkEsb0JBQUUsa0JBQVQsUUFBd0JvZSxHQUFHcGUsR0FBRUcsQ0FBQzt5QkFBZUgsRUFBRSxRQUFQO0FBQVdvZSxxQkFBR3BlLEdBQUVHLENBQUM7eUJBQWlCSCxFQUFFLFVBQVQsTUFBZTtBQUFDQSxvQkFBRSxNQUFNLFNBQU9BLEdBQUVBLElBQUVBLEVBQUU7QUFBTTtnQkFBUTtBQUFDLG9CQUFHQSxNQUFJRTtBQUFFLHdCQUFNRjtBQUFFLHVCQUFZQSxFQUFFLFlBQVQsUUFBa0I7QUFBQyxzQkFBVUEsRUFBRSxXQUFULFFBQWlCQSxFQUFFLFdBQVNFO0FBQUUsMEJBQU1GO0FBQUVBLHNCQUFFQSxFQUFFO2dCQUFNO0FBQUNBLGtCQUFFLFFBQVEsU0FBT0EsRUFBRSxRQUFPQSxJQUFFQSxFQUFFO2NBQU87QUFBQ2UsZUFBRztRQUFDO0FBQVEsWUFBUEgsR0FBRWUsSUFBRVosQ0FBQyxHQUFVLEVBQUFiLEVBQUUsT0FBSztBQUFHQSxZQUFFLGdCQUN6ZTs7QUFBVSxrQkFBT1ksR0FBRTtZQUFDLEtBQUs7QUFBcUIsbUJBQVZYLElBQUVELEVBQUUsT0FBVVksSUFBRSxNQUFZWCxNQUFQO0FBQVVILG9CQUFFRyxFQUFFLFdBQWlCSCxNQUFQLFFBQWlCK1osR0FBRy9aLENBQUMsTUFBWCxTQUFlYyxJQUFFWCxJQUFHQSxJQUFFQSxFQUFFO0FBQVFBLGtCQUFFVyxHQUFTWCxNQUFQLFFBQVVXLElBQUVaLEVBQUUsT0FBTUEsRUFBRSxRQUFNLFNBQU9ZLElBQUVYLEVBQUUsU0FBUUEsRUFBRSxVQUFRLE9BQU1rZSxHQUFHbmUsR0FBRSxPQUFHWSxHQUFFWCxHQUFFZ0IsR0FBRWpCLEVBQUUsVUFBVTtBQUFFO1lBQU0sS0FBSztBQUE2QixtQkFBakJDLElBQUUsTUFBS1csSUFBRVosRUFBRSxPQUFVQSxFQUFFLFFBQU0sTUFBWVksTUFBUCxRQUFVO0FBQWUsb0JBQWRkLElBQUVjLEVBQUUsV0FBb0JkLE1BQVAsUUFBaUIrWixHQUFHL1osQ0FBQyxNQUFYLE1BQWE7QUFBQ0Usb0JBQUUsUUFBTVk7QUFBRTtnQkFBSztBQUFDZCxvQkFBRWMsRUFBRSxTQUFRQSxFQUFFLFVBQVFYLEdBQUVBLElBQUVXLEdBQUVBLElBQUVkO2NBQUM7QUFBQ3FlLGlCQUFHbmUsR0FBRSxNQUFHQyxHQUFFLE1BQUtnQixHQUFFakIsRUFBRSxVQUFVO0FBQUU7WUFBTSxLQUFLO0FBQVdtZSxpQkFBR25lLEdBQUUsT0FBRyxNQUFLLE1BQUssUUFBT0EsRUFBRSxVQUFVO0FBQUU7WUFBTTtBQUFRQSxnQkFBRSxnQkFBYztVQUFJO0FBQUMsZUFBT0EsRUFBRTtNQUFLO0FBQ3BnQixlQUFTaWQsR0FBR25kLEdBQUVFLEdBQUVDLEdBQUU7QUFBdUQsWUFBL0NILE1BQVAsU0FBV0UsRUFBRSxlQUFhRixFQUFFLGVBQWMrWCxNQUFJN1gsRUFBRSxPQUFjQyxJQUFFRCxFQUFFLFlBQVk7QUFBQyxjQUFVRixNQUFQLFFBQVVFLEVBQUUsVUFBUUYsRUFBRTtBQUFNLGtCQUFNLE1BQU1ELEVBQUUsR0FBRyxDQUFDO0FBQUUsY0FBVUcsRUFBRSxVQUFULE1BQWU7QUFBNEMsaUJBQTNDRixJQUFFRSxFQUFFLE9BQU1DLElBQUU0WSxHQUFHL1ksR0FBRUEsRUFBRSxZQUFZLEdBQUVFLEVBQUUsUUFBTUMsR0FBTUEsRUFBRSxTQUFPRCxHQUFTRixFQUFFLFlBQVQ7QUFBa0JBLGtCQUFFQSxFQUFFLFNBQVFHLElBQUVBLEVBQUUsVUFBUTRZLEdBQUcvWSxHQUFFQSxFQUFFLFlBQVksR0FBRUcsRUFBRSxTQUFPRDtBQUFFQyxjQUFFLFVBQVE7VUFBSTtBQUFDLGlCQUFPRCxFQUFFO1FBQUs7QUFBQyxlQUFPO01BQUk7QUFBQyxVQUFJcWUsSUFBR0MsSUFBR0MsSUFBR0M7QUFDbldILFdBQUcsU0FBU3ZlLEdBQUVFLEdBQUU7QUFBQyxpQkFBUUMsSUFBRUQsRUFBRSxPQUFhQyxNQUFQLFFBQVU7QUFBQyxjQUFPQSxFQUFFLFFBQU4sS0FBZUEsRUFBRSxRQUFOO0FBQVVILGNBQUUsWUFBWUcsRUFBRSxTQUFTO21CQUFjQSxFQUFFLFFBQU4sS0FBa0JBLEVBQUUsVUFBVCxNQUFlO0FBQUNBLGNBQUUsTUFBTSxTQUFPQSxHQUFFQSxJQUFFQSxFQUFFO0FBQU07VUFBUTtBQUFDLGNBQUdBLE1BQUlEO0FBQUU7QUFBTSxpQkFBWUMsRUFBRSxZQUFULFFBQWtCO0FBQUMsZ0JBQVVBLEVBQUUsV0FBVCxRQUFpQkEsRUFBRSxXQUFTRDtBQUFFO0FBQU9DLGdCQUFFQSxFQUFFO1VBQU07QUFBQ0EsWUFBRSxRQUFRLFNBQU9BLEVBQUUsUUFBT0EsSUFBRUEsRUFBRTtRQUFPO01BQUM7QUFBRXFlLFdBQUcsV0FBVTtNQUFDO0FBQ3hUQyxXQUFHLFNBQVN6ZSxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQUMsWUFBSUQsSUFBRWQsRUFBRTtBQUFjLFlBQUdjLE1BQUlDLEdBQUU7QUFBQ2YsY0FBRUUsRUFBRSxXQUFVd1osR0FBR0gsR0FBRyxPQUFPO0FBQUUsY0FBSXBZLElBQUU7QUFBSyxrQkFBT2hCLEdBQUU7WUFBQyxLQUFLO0FBQVFXLGtCQUFFeUUsR0FBR3ZGLEdBQUVjLENBQUMsR0FBRUMsSUFBRXdFLEdBQUd2RixHQUFFZSxDQUFDLEdBQUVJLElBQUUsQ0FBQztBQUFFO1lBQU0sS0FBSztBQUFTTCxrQkFBRWdGLEdBQUc5RixHQUFFYyxDQUFDLEdBQUVDLElBQUUrRSxHQUFHOUYsR0FBRWUsQ0FBQyxHQUFFSSxJQUFFLENBQUM7QUFBRTtZQUFNLEtBQUs7QUFBU0wsa0JBQUVNLEdBQUUsQ0FBQyxHQUFFTixHQUFFLEVBQUMsT0FBTSxPQUFNLENBQUMsR0FBRUMsSUFBRUssR0FBRSxDQUFDLEdBQUVMLEdBQUUsRUFBQyxPQUFNLE9BQU0sQ0FBQyxHQUFFSSxJQUFFLENBQUM7QUFBRTtZQUFNLEtBQUs7QUFBV0wsa0JBQUVrRixHQUFHaEcsR0FBRWMsQ0FBQyxHQUFFQyxJQUFFaUYsR0FBR2hHLEdBQUVlLENBQUMsR0FBRUksSUFBRSxDQUFDO0FBQUU7WUFBTTtBQUFxQixxQkFBT0wsRUFBRSxXQUF0QixjQUE0QyxPQUFPQyxFQUFFLFdBQXRCLGVBQWdDZixFQUFFLFVBQVFzVDtVQUFHO0FBQUN2TSxhQUFHNUcsR0FBRVksQ0FBQztBQUFFLGNBQUlHO0FBQUVmLGNBQUU7QUFBSyxlQUFJLEtBQUtXO0FBQUUsZ0JBQUcsQ0FBQ0MsRUFBRSxlQUFlLENBQUMsS0FBR0QsRUFBRSxlQUFlLENBQUMsS0FBU0EsRUFBRSxDQUFDLEtBQVQ7QUFBVyxrQkFDeGUsTUFEMmUsU0FDemU7QUFBQyxvQkFBSUcsSUFBRUgsRUFBRSxDQUFDO0FBQUUscUJBQUlJLEtBQUtEO0FBQUVBLG9CQUFFLGVBQWVDLENBQUMsTUFBSWYsTUFBSUEsSUFBRSxDQUFDLElBQUdBLEVBQUVlLENBQUMsSUFBRTtjQUFHO0FBQWlDLHNCQUE1Qiw2QkFBNEMsTUFBYixjQUFtRCxNQUFuQyxvQ0FBbUUsTUFBN0IsOEJBQThDLE1BQWQsZ0JBQWtCdUIsR0FBRyxlQUFlLENBQUMsSUFBRXRCLE1BQUlBLElBQUUsQ0FBQyxNQUFJQSxJQUFFQSxLQUFHLENBQUMsR0FBRyxLQUFLLEdBQUUsSUFBSTtBQUFHLGVBQUksS0FBS0osR0FBRTtBQUFDLGdCQUFJQyxJQUFFRCxFQUFFLENBQUM7QUFBd0IsZ0JBQXRCRSxJQUFVSCxJQUFFLENBQUMsR0FBWUMsRUFBRSxlQUFlLENBQUMsS0FBR0MsTUFBSUMsTUFBVUQsS0FBTixRQUFlQyxLQUFOO0FBQVMsa0JBQWEsTUFBVjtBQUFZLG9CQUFHQSxHQUFFO0FBQUMsdUJBQUlDLEtBQUtEO0FBQUUscUJBQUNBLEVBQUUsZUFBZUMsQ0FBQyxLQUFHRixLQUFHQSxFQUFFLGVBQWVFLENBQUMsTUFBSWYsTUFBSUEsSUFBRSxDQUFDLElBQUdBLEVBQUVlLENBQUMsSUFBRTtBQUFJLHVCQUFJQSxLQUFLRjtBQUFFQSxzQkFBRSxlQUFlRSxDQUFDLEtBQUdELEVBQUVDLENBQUMsTUFBSUYsRUFBRUUsQ0FBQyxNQUFJZixNQUNsZkEsSUFBRSxDQUFDLElBQUdBLEVBQUVlLENBQUMsSUFBRUYsRUFBRUUsQ0FBQztnQkFBRTtBQUFNZix3QkFBSWdCLE1BQUlBLElBQUUsQ0FBQyxJQUFHQSxFQUFFLEtBQUssR0FBRWhCLENBQUMsSUFBR0EsSUFBRWE7O0FBQWtDLHNCQUE1Qiw2QkFBK0JBLElBQUVBLElBQUVBLEVBQUUsU0FBTyxRQUFPQyxJQUFFQSxJQUFFQSxFQUFFLFNBQU8sUUFBYUQsS0FBTixRQUFTQyxNQUFJRCxNQUFJRyxJQUFFQSxLQUFHLENBQUMsR0FBRyxLQUFLLEdBQUVILENBQUMsS0FBZ0IsTUFBYixhQUEwQixPQUFPQSxLQUFsQixZQUFnQyxPQUFPQSxLQUFsQixhQUFzQkcsSUFBRUEsS0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFFLEtBQUdILENBQUMsSUFBcUMsTUFBbkMsb0NBQW1FLE1BQTdCLCtCQUFpQ3lCLEdBQUcsZUFBZSxDQUFDLEtBQVN6QixLQUFOLFFBQXNCLE1BQWIsY0FBZ0JOLEdBQUUsVUFBU1YsQ0FBQyxHQUFFbUIsS0FBR0YsTUFBSUQsTUFBSUcsSUFBRSxDQUFDLE1BQWUsT0FBT0gsS0FBbEIsWUFBNEJBLE1BQVAsUUFBVUEsRUFBRSxhQUFXcUQsS0FBR3JELEVBQUUsU0FBUyxLQUFHRyxJQUFFQSxLQUFHLENBQUMsR0FBRyxLQUFLLEdBQUVILENBQUM7VUFBRTtBQUFDYixnQkFBSWdCLElBQUVBLEtBQUcsQ0FBQyxHQUFHLEtBQUssU0FDL2VoQixDQUFDO0FBQUUsY0FBSSxJQUFFZ0I7QUFBQUEsV0FBS2pCLEVBQUUsY0FBWSxPQUFFQSxFQUFFLFNBQU87UUFBQztNQUFDO0FBQUV3ZSxXQUFHLFNBQVMxZSxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQUNaLGNBQUlZLE1BQUliLEVBQUUsU0FBTztNQUFFO0FBQUUsZUFBU3llLEdBQUczZSxHQUFFRSxHQUFFO0FBQUMsWUFBRyxDQUFDZ2E7QUFBRyxrQkFBT2xhLEVBQUUsVUFBUztZQUFDLEtBQUs7QUFBU0Usa0JBQUVGLEVBQUU7QUFBSyx1QkFBUUcsSUFBRSxNQUFZRCxNQUFQO0FBQWlCQSxrQkFBRSxjQUFULFNBQXFCQyxJQUFFRCxJQUFHQSxJQUFFQSxFQUFFO0FBQWVDLG9CQUFQLE9BQVNILEVBQUUsT0FBSyxPQUFLRyxFQUFFLFVBQVE7QUFBSztZQUFNLEtBQUs7QUFBWUEsa0JBQUVILEVBQUU7QUFBSyx1QkFBUWUsSUFBRSxNQUFZWixNQUFQO0FBQWlCQSxrQkFBRSxjQUFULFNBQXFCWSxJQUFFWixJQUFHQSxJQUFFQSxFQUFFO0FBQWVZLG9CQUFQLE9BQVNiLEtBQVVGLEVBQUUsU0FBVCxPQUFjQSxFQUFFLE9BQUssT0FBS0EsRUFBRSxLQUFLLFVBQVEsT0FBS2UsRUFBRSxVQUFRO1VBQUk7TUFBQztBQUNsYSxlQUFTNmQsR0FBRzVlLEdBQUVFLEdBQUVDLEdBQUU7QUFBQyxZQUFJWSxJQUFFYixFQUFFO0FBQWEsZ0JBQU9BLEVBQUUsS0FBSTtVQUFDLEtBQUs7VUFBRSxLQUFLO1VBQUcsS0FBSztVQUFHLEtBQUs7VUFBRSxLQUFLO1VBQUcsS0FBSztVQUFFLEtBQUs7VUFBRSxLQUFLO1VBQUcsS0FBSztVQUFFLEtBQUs7QUFBRyxtQkFBTztVQUFLLEtBQUs7QUFBRSxtQkFBTzBVLEdBQUcxVSxFQUFFLElBQUksS0FBRzJVLEdBQUcsR0FBRTtVQUFLLEtBQUs7QUFBRSxtQkFBQStFLEdBQUcsR0FBRWpaLEdBQUVjLEVBQUMsR0FBRWQsR0FBRWEsRUFBQyxHQUFFbVosR0FBRyxHQUFFNVosSUFBRWIsRUFBRSxXQUFVYSxFQUFFLG1CQUFpQkEsRUFBRSxVQUFRQSxFQUFFLGdCQUFlQSxFQUFFLGlCQUFlLFFBQWdCZixNQUFQLFFBQWlCQSxFQUFFLFVBQVQsVUFBZXdhLEdBQUd0YSxDQUFDLElBQUVBLEVBQUUsU0FBTyxJQUFFYSxFQUFFLFlBQVViLEVBQUUsU0FBTyxPQUFLc2UsR0FBR3RlLENBQUMsR0FBUztVQUFLLEtBQUs7QUFBRTRaLGVBQUc1WixDQUFDO0FBQUUsZ0JBQUlZLElBQUU0WSxHQUFHRCxHQUFHLE9BQU87QUFBVyxnQkFBVHRaLElBQUVELEVBQUUsTUFBZUYsTUFBUCxRQUFnQkUsRUFBRSxhQUFSO0FBQWtCdWUsaUJBQUd6ZSxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFRCxDQUFDLEdBQUVkLEVBQUUsUUFBTUUsRUFBRSxRQUFNQSxFQUFFLFNBQU87aUJBQVM7QUFBQyxrQkFBRyxDQUFDYSxHQUFFO0FBQUMsb0JBQzFmYixFQUFFLGNBRDJmO0FBQ2pmLHdCQUFNLE1BQU1ILEVBQUUsR0FBRyxDQUFDO0FBQUUsdUJBQU87Y0FBSTtBQUFrQixrQkFBakJDLElBQUUwWixHQUFHSCxHQUFHLE9BQU8sR0FBS2lCLEdBQUd0YSxDQUFDLEdBQUU7QUFBQ2Esb0JBQUViLEVBQUUsV0FBVUMsSUFBRUQsRUFBRTtBQUFLLG9CQUFJaUIsSUFBRWpCLEVBQUU7QUFBOEIsd0JBQWhCYSxFQUFFb1QsRUFBRSxJQUFFalUsR0FBRWEsRUFBRXFULEVBQUUsSUFBRWpULEdBQVNoQixHQUFFO2tCQUFDLEtBQUs7QUFBU08sdUJBQUUsVUFBU0ssQ0FBQyxHQUFFTCxHQUFFLFNBQVFLLENBQUM7QUFBRTtrQkFBTSxLQUFLO2tCQUFTLEtBQUs7a0JBQVMsS0FBSztBQUFRTCx1QkFBRSxRQUFPSyxDQUFDO0FBQUU7a0JBQU0sS0FBSztrQkFBUSxLQUFLO0FBQVEseUJBQUlmLElBQUUsR0FBRUEsSUFBRTBTLEdBQUcsUUFBTzFTO0FBQUlVLHlCQUFFZ1MsR0FBRzFTLENBQUMsR0FBRWUsQ0FBQztBQUFFO2tCQUFNLEtBQUs7QUFBU0wsdUJBQUUsU0FBUUssQ0FBQztBQUFFO2tCQUFNLEtBQUs7a0JBQU0sS0FBSztrQkFBUSxLQUFLO0FBQU9MLHVCQUFFLFNBQVFLLENBQUMsR0FBRUwsR0FBRSxRQUFPSyxDQUFDO0FBQUU7a0JBQU0sS0FBSztBQUFVTCx1QkFBRSxVQUFTSyxDQUFDO0FBQUU7a0JBQU0sS0FBSztBQUFReUUsdUJBQUd6RSxHQUFFSSxDQUFDLEdBQUVULEdBQUUsV0FBVUssQ0FBQztBQUFFO2tCQUFNLEtBQUs7QUFBU0Esc0JBQUUsZ0JBQzVmLEVBQUMsYUFBWSxDQUFDLENBQUNJLEVBQUUsU0FBUSxHQUFFVCxHQUFFLFdBQVVLLENBQUM7QUFBRTtrQkFBTSxLQUFLO0FBQVdrRix1QkFBR2xGLEdBQUVJLENBQUMsR0FBRVQsR0FBRSxXQUFVSyxDQUFDO2dCQUFDO0FBQUNnRyxtQkFBRzVHLEdBQUVnQixDQUFDLEdBQUVuQixJQUFFO0FBQUsseUJBQVFrQixLQUFLQztBQUFFQSxvQkFBRSxlQUFlRCxDQUFDLE1BQUlKLElBQUVLLEVBQUVELENBQUMsR0FBZUEsTUFBYixhQUEwQixPQUFPSixLQUFsQixXQUFvQkMsRUFBRSxnQkFBY0QsTUFBSWQsSUFBRSxDQUFDLFlBQVdjLENBQUMsS0FBYyxPQUFPQSxLQUFsQixZQUFxQkMsRUFBRSxnQkFBYyxLQUFHRCxNQUFJZCxJQUFFLENBQUMsWUFBVyxLQUFHYyxDQUFDLEtBQUcyQixHQUFHLGVBQWV2QixDQUFDLEtBQVNKLEtBQU4sUUFBc0JJLE1BQWIsY0FBZ0JSLEdBQUUsVUFBU0ssQ0FBQztBQUFHLHdCQUFPWixHQUFFO2tCQUFDLEtBQUs7QUFBUWlGLHVCQUFHckUsQ0FBQyxHQUFFNkUsR0FBRzdFLEdBQUVJLEdBQUUsSUFBRTtBQUFFO2tCQUFNLEtBQUs7QUFBV2lFLHVCQUFHckUsQ0FBQyxHQUFFb0YsR0FBR3BGLENBQUM7QUFBRTtrQkFBTSxLQUFLO2tCQUFTLEtBQUs7QUFBUztrQkFBTTtBQUFxQiwyQkFBT0ksRUFBRSxXQUF0QixlQUFnQ0osRUFBRSxVQUN0ZnVTO2dCQUFHO0FBQUN2UyxvQkFBRWYsR0FBRUUsRUFBRSxjQUFZYSxHQUFTQSxNQUFQLFNBQVdiLEVBQUUsU0FBTztjQUFFLE9BQUs7QUFBaVosd0JBQWhaZ0IsSUFBTUosRUFBRSxhQUFOLElBQWVBLElBQUVBLEVBQUUsZUFBY2QsTUFBSW9HLEdBQUcsU0FBT3BHLElBQUVxRyxHQUFHbEcsQ0FBQyxJQUFHSCxNQUFJb0csR0FBRyxPQUFnQmpHLE1BQVgsWUFBY0gsSUFBRWtCLEVBQUUsY0FBYyxLQUFLLEdBQUVsQixFQUFFLFlBQVUsc0JBQXVCQSxJQUFFQSxFQUFFLFlBQVlBLEVBQUUsVUFBVSxLQUFjLE9BQU9lLEVBQUUsTUFBcEIsV0FBdUJmLElBQUVrQixFQUFFLGNBQWNmLEdBQUUsRUFBQyxJQUFHWSxFQUFFLEdBQUUsQ0FBQyxLQUFHZixJQUFFa0IsRUFBRSxjQUFjZixDQUFDLEdBQWFBLE1BQVgsYUFBZWUsSUFBRWxCLEdBQUVlLEVBQUUsV0FBU0csRUFBRSxXQUFTLE9BQUdILEVBQUUsU0FBT0csRUFBRSxPQUFLSCxFQUFFLFVBQVFmLElBQUVrQixFQUFFLGdCQUFnQmxCLEdBQUVHLENBQUMsR0FBRUgsRUFBRW1VLEVBQUUsSUFBRWpVLEdBQUVGLEVBQUVvVSxFQUFFLElBQUVyVCxHQUFFd2QsR0FBR3ZlLEdBQUVFLEdBQUUsT0FBRyxLQUFFLEdBQUVBLEVBQUUsWUFBVUYsR0FBRWtCLElBQUU4RixHQUFHN0csR0FBRVksQ0FBQyxHQUFTWixHQUFFO2tCQUFDLEtBQUs7QUFBU08sdUJBQUUsVUFBU1YsQ0FBQyxHQUFFVSxHQUFFLFNBQVFWLENBQUMsR0FDcmZjLElBQUVDO0FBQUU7a0JBQU0sS0FBSztrQkFBUyxLQUFLO2tCQUFTLEtBQUs7QUFBUUwsdUJBQUUsUUFBT1YsQ0FBQyxHQUFFYyxJQUFFQztBQUFFO2tCQUFNLEtBQUs7a0JBQVEsS0FBSztBQUFRLHlCQUFJRCxJQUFFLEdBQUVBLElBQUU0UixHQUFHLFFBQU81UjtBQUFJSix5QkFBRWdTLEdBQUc1UixDQUFDLEdBQUVkLENBQUM7QUFBRWMsd0JBQUVDO0FBQUU7a0JBQU0sS0FBSztBQUFTTCx1QkFBRSxTQUFRVixDQUFDLEdBQUVjLElBQUVDO0FBQUU7a0JBQU0sS0FBSztrQkFBTSxLQUFLO2tCQUFRLEtBQUs7QUFBT0wsdUJBQUUsU0FBUVYsQ0FBQyxHQUFFVSxHQUFFLFFBQU9WLENBQUMsR0FBRWMsSUFBRUM7QUFBRTtrQkFBTSxLQUFLO0FBQVVMLHVCQUFFLFVBQVNWLENBQUMsR0FBRWMsSUFBRUM7QUFBRTtrQkFBTSxLQUFLO0FBQVF5RSx1QkFBR3hGLEdBQUVlLENBQUMsR0FBRUQsSUFBRXlFLEdBQUd2RixHQUFFZSxDQUFDLEdBQUVMLEdBQUUsV0FBVVYsQ0FBQztBQUFFO2tCQUFNLEtBQUs7QUFBU2Msd0JBQUVnRixHQUFHOUYsR0FBRWUsQ0FBQztBQUFFO2tCQUFNLEtBQUs7QUFBU2Ysc0JBQUUsZ0JBQWMsRUFBQyxhQUFZLENBQUMsQ0FBQ2UsRUFBRSxTQUFRLEdBQUVELElBQUVNLEdBQUUsQ0FBQyxHQUFFTCxHQUFFLEVBQUMsT0FBTSxPQUFNLENBQUMsR0FBRUwsR0FBRSxXQUFVVixDQUFDO0FBQUU7a0JBQU0sS0FBSztBQUFXaUcsdUJBQUdqRyxHQUFFZSxDQUFDLEdBQUVELElBQ3Bma0YsR0FBR2hHLEdBQUVlLENBQUMsR0FBRUwsR0FBRSxXQUFVVixDQUFDO0FBQUU7a0JBQU07QUFBUWMsd0JBQUVDO2dCQUFDO0FBQUNnRyxtQkFBRzVHLEdBQUVXLENBQUM7QUFBRSxvQkFBSUcsSUFBRUg7QUFBRSxxQkFBSUssS0FBS0Y7QUFBRSxzQkFBR0EsRUFBRSxlQUFlRSxDQUFDLEdBQUU7QUFBQyx3QkFBSUgsSUFBRUMsRUFBRUUsQ0FBQztBQUFZQSwwQkFBVixVQUFZMEYsR0FBRzdHLEdBQUVnQixDQUFDLElBQThCRyxNQUE1Qiw2QkFBK0JILElBQUVBLElBQUVBLEVBQUUsU0FBTyxRQUFhQSxLQUFOLFFBQVN3RixHQUFHeEcsR0FBRWdCLENBQUMsS0FBZ0JHLE1BQWIsYUFBMEIsT0FBT0gsS0FBbEIsWUFBa0NiLE1BQWIsY0FBcUJhLE1BQUwsT0FBU3lGLEdBQUd6RyxHQUFFZ0IsQ0FBQyxJQUFhLE9BQU9BLEtBQWxCLFlBQXFCeUYsR0FBR3pHLEdBQUUsS0FBR2dCLENBQUMsSUFBcUNHLE1BQW5DLG9DQUFtRUEsTUFBN0IsOEJBQThDQSxNQUFkLGdCQUFrQnNCLEdBQUcsZUFBZXRCLENBQUMsSUFBUUgsS0FBTixRQUFzQkcsTUFBYixjQUFnQlQsR0FBRSxVQUFTVixDQUFDLElBQVFnQixLQUFOLFFBQVNzQyxHQUFHdEQsR0FBRW1CLEdBQUVILEdBQUVFLENBQUM7a0JBQUU7QUFBQyx3QkFBT2YsR0FBRTtrQkFBQyxLQUFLO0FBQVFpRix1QkFBR3BGLENBQUMsR0FBRTRGLEdBQUc1RixHQUFFZSxHQUFFLEtBQUU7QUFDcmY7a0JBQU0sS0FBSztBQUFXcUUsdUJBQUdwRixDQUFDLEdBQUVtRyxHQUFHbkcsQ0FBQztBQUFFO2tCQUFNLEtBQUs7QUFBZWUsc0JBQUUsU0FBUixRQUFlZixFQUFFLGFBQWEsU0FBUSxLQUFHaUYsR0FBR2xFLEVBQUUsS0FBSyxDQUFDO0FBQUU7a0JBQU0sS0FBSztBQUFTZixzQkFBRSxXQUFTLENBQUMsQ0FBQ2UsRUFBRSxVQUFTSSxJQUFFSixFQUFFLE9BQVlJLEtBQU4sT0FBUTRFLEdBQUcvRixHQUFFLENBQUMsQ0FBQ2UsRUFBRSxVQUFTSSxHQUFFLEtBQUUsSUFBUUosRUFBRSxnQkFBUixRQUFzQmdGLEdBQUcvRixHQUFFLENBQUMsQ0FBQ2UsRUFBRSxVQUFTQSxFQUFFLGNBQWEsSUFBRTtBQUFFO2tCQUFNO0FBQXFCLDJCQUFPRCxFQUFFLFdBQXRCLGVBQWdDZCxFQUFFLFVBQVFzVDtnQkFBRztBQUFDRyxtQkFBR3RULEdBQUVZLENBQUMsTUFBSWIsRUFBRSxTQUFPO2NBQUU7QUFBUUEsZ0JBQUUsUUFBVCxTQUFlQSxFQUFFLFNBQU87WUFBSTtBQUFDLG1CQUFPO1VBQUssS0FBSztBQUFFLGdCQUFHRixLQUFTRSxFQUFFLGFBQVI7QUFBa0J3ZSxpQkFBRzFlLEdBQUVFLEdBQUVGLEVBQUUsZUFBY2UsQ0FBQztpQkFBTTtBQUFDLGtCQUFjLE9BQU9BLEtBQWxCLFlBQTRCYixFQUFFLGNBQVQ7QUFBbUIsc0JBQU0sTUFBTUgsRUFBRSxHQUFHLENBQUM7QUFDbmZJLGtCQUFFdVosR0FBR0QsR0FBRyxPQUFPLEdBQUVDLEdBQUdILEdBQUcsT0FBTyxHQUFFaUIsR0FBR3RhLENBQUMsS0FBR2EsSUFBRWIsRUFBRSxXQUFVQyxJQUFFRCxFQUFFLGVBQWNhLEVBQUVvVCxFQUFFLElBQUVqVSxHQUFFYSxFQUFFLGNBQVlaLE1BQUlELEVBQUUsU0FBTyxPQUFLYSxLQUFPWixFQUFFLGFBQU4sSUFBZUEsSUFBRUEsRUFBRSxlQUFlLGVBQWVZLENBQUMsR0FBRUEsRUFBRW9ULEVBQUUsSUFBRWpVLEdBQUVBLEVBQUUsWUFBVWE7WUFBRTtBQUFDLG1CQUFPO1VBQUssS0FBSztBQUEwQixtQkFBdkJKLEdBQUVnQixFQUFDLEdBQUVaLElBQUViLEVBQUUsZUFBc0JBLEVBQUUsUUFBTSxNQUFXQSxFQUFFLFFBQU1DLEdBQUVELE1BQUVhLElBQVNBLE1BQVAsTUFBU1osSUFBRSxPQUFVSCxNQUFQLE9BQWtCRSxFQUFFLGNBQWMsYUFBekIsVUFBbUNzYSxHQUFHdGEsQ0FBQyxJQUFFQyxJQUFTSCxFQUFFLGtCQUFULE1BQTBCZSxLQUFHLENBQUNaLEtBQVFELEVBQUUsT0FBSyxNQUFhRixNQUFQLFFBQWVFLEVBQUUsY0FBYywrQkFBckIsUUFBc0R5QixHQUFFLFVBQVEsSUFBT1EsT0FBSixNQUFRQSxLQUFFLE9BQWVBLE9BQUosS0FBV0EsT0FBSixPQUFNQSxLQUNyZixJQUFTRCxPQUFQLFFBQWUsRUFBQTZWLEtBQUcsY0FBaUIsRUFBQThHLEtBQUcsY0FBWUMsR0FBRzVjLElBQUVFLEVBQUMsTUFBS3JCLEtBQUdaLE9BQUVELEVBQUUsU0FBTyxJQUFTO1VBQUssS0FBSztBQUFFLG1CQUFPMFosR0FBRyxHQUFFNEUsR0FBR3RlLENBQUMsR0FBU0YsTUFBUCxRQUFVZ1QsR0FBRzlTLEVBQUUsVUFBVSxhQUFhLEdBQUU7VUFBSyxLQUFLO0FBQUcsbUJBQU9pWCxHQUFHalgsQ0FBQyxHQUFFO1VBQUssS0FBSztBQUFHLG1CQUFPMFUsR0FBRzFVLEVBQUUsSUFBSSxLQUFHMlUsR0FBRyxHQUFFO1VBQUssS0FBSztBQUEwQixnQkFBdkJsVSxHQUFFZ0IsRUFBQyxHQUFFWixJQUFFYixFQUFFLGVBQXdCYSxNQUFQO0FBQVMscUJBQU87QUFBc0MsZ0JBQWpDSSxLQUFPakIsRUFBRSxRQUFNLFFBQWIsR0FBaUJnQixJQUFFSCxFQUFFLFdBQW9CRyxNQUFQO0FBQVMsa0JBQUdDO0FBQUV3ZCxtQkFBRzVkLEdBQUUsS0FBRTttQkFBTTtBQUFDLG9CQUFPb0IsT0FBSixLQUFjbkMsTUFBUCxRQUFlQSxFQUFFLFFBQU07QUFBSSx1QkFBSUEsSUFBRUUsRUFBRSxPQUFhRixNQUFQLFFBQVU7QUFBUyx3QkFBUmtCLElBQUU2WSxHQUFHL1osQ0FBQyxHQUFZa0IsTUFBUCxNQUFTO0FBQ2pXLDJCQURrV2hCLEVBQUUsU0FBTyxJQUFHeWUsR0FBRzVkLEdBQUUsS0FBRSxHQUFFSSxJQUFFRCxFQUFFLGFBQW1CQyxNQUFQLFNBQVdqQixFQUFFLGNBQVlpQixHQUFFakIsRUFBRSxTQUFPLElBQzVlYSxFQUFFLGVBQVQsU0FBc0JiLEVBQUUsY0FBWSxPQUFNQSxFQUFFLGFBQVdhLEVBQUUsWUFBV0EsSUFBRVosR0FBTUEsSUFBRUQsRUFBRSxPQUFhQyxNQUFQO0FBQVVnQiw0QkFBRWhCLEdBQUVILElBQUVlLEdBQUVJLEVBQUUsU0FBTyxHQUFFQSxFQUFFLGFBQVcsTUFBS0EsRUFBRSxjQUFZLE1BQUtBLEVBQUUsYUFBVyxNQUFLRCxJQUFFQyxFQUFFLFdBQWlCRCxNQUFQLFFBQVVDLEVBQUUsYUFBVyxHQUFFQSxFQUFFLFFBQU1uQixHQUFFbUIsRUFBRSxRQUFNLE1BQUtBLEVBQUUsZ0JBQWMsTUFBS0EsRUFBRSxnQkFBYyxNQUFLQSxFQUFFLGNBQVksTUFBS0EsRUFBRSxlQUFhLE1BQUtBLEVBQUUsWUFBVSxTQUFPQSxFQUFFLGFBQVdELEVBQUUsWUFBV0MsRUFBRSxRQUFNRCxFQUFFLE9BQU1DLEVBQUUsUUFBTUQsRUFBRSxPQUFNQyxFQUFFLGdCQUFjRCxFQUFFLGVBQWNDLEVBQUUsZ0JBQWNELEVBQUUsZUFBY0MsRUFBRSxjQUFZRCxFQUFFLGFBQVlDLEVBQUUsT0FBS0QsRUFBRSxNQUFLbEIsSUFBRWtCLEVBQUUsY0FDcGZDLEVBQUUsZUFBb0JuQixNQUFQLE9BQVMsT0FBSyxFQUFDLE9BQU1BLEVBQUUsT0FBTSxjQUFhQSxFQUFFLGFBQVksSUFBR0csSUFBRUEsRUFBRTtBQUFRLDZCQUFBUyxHQUFFZSxJQUFFQSxHQUFFLFVBQVEsSUFBRSxDQUFDLEdBQVN6QixFQUFFO29CQUFLO0FBQUNGLHdCQUFFQSxFQUFFO2tCQUFPO0FBQVFlLGtCQUFFLFNBQVQsUUFBZVcsR0FBRSxJQUFFcWQsT0FBSzdlLEVBQUUsU0FBTyxJQUFHaUIsSUFBRSxNQUFHd2QsR0FBRzVkLEdBQUUsS0FBRSxHQUFFYixFQUFFLFFBQU07Y0FBUztpQkFBSztBQUFDLGtCQUFHLENBQUNpQjtBQUFFLG9CQUFHbkIsSUFBRStaLEdBQUc3WSxDQUFDLEdBQVNsQixNQUFQLE1BQUE7QUFBVSxzQkFBR0UsRUFBRSxTQUFPLElBQUdpQixJQUFFLE1BQUdoQixJQUFFSCxFQUFFLGFBQW1CRyxNQUFQLFNBQVdELEVBQUUsY0FBWUMsR0FBRUQsRUFBRSxTQUFPLElBQUd5ZSxHQUFHNWQsR0FBRSxJQUFFLEdBQVNBLEVBQUUsU0FBVCxRQUEwQkEsRUFBRSxhQUFiLFlBQXVCLENBQUNHLEVBQUUsYUFBVyxDQUFDZ1o7QUFBRywyQkFBT2hhLElBQUVBLEVBQUUsYUFBV2EsRUFBRSxZQUFrQmIsTUFBUCxTQUFXQSxFQUFFLGFBQVcsT0FBTTtnQkFBQTtBQUFVLHNCQUFFd0IsR0FBRSxJQUFFWCxFQUFFLHFCQUFtQmdlLE1BQWlCNWUsTUFBYixlQUFpQkQsRUFBRSxTQUNqZixJQUFHaUIsSUFBRSxNQUFHd2QsR0FBRzVkLEdBQUUsS0FBRSxHQUFFYixFQUFFLFFBQU07QUFBVWEsZ0JBQUUsZUFBYUcsRUFBRSxVQUFRaEIsRUFBRSxPQUFNQSxFQUFFLFFBQU1nQixNQUFJZixJQUFFWSxFQUFFLE1BQVlaLE1BQVAsT0FBU0EsRUFBRSxVQUFRZSxJQUFFaEIsRUFBRSxRQUFNZ0IsR0FBRUgsRUFBRSxPQUFLRztZQUFFO0FBQUMsbUJBQWNILEVBQUUsU0FBVCxRQUFlWixJQUFFWSxFQUFFLE1BQUtBLEVBQUUsWUFBVVosR0FBRVksRUFBRSxPQUFLWixFQUFFLFNBQVFZLEVBQUUsYUFBV2IsRUFBRSxZQUFXYSxFQUFFLHFCQUFtQlcsR0FBRSxHQUFFdkIsRUFBRSxVQUFRLE1BQUtELElBQUV5QixHQUFFLFNBQVFmLEdBQUVlLElBQUVSLElBQUVqQixJQUFFLElBQUUsSUFBRUEsSUFBRSxDQUFDLEdBQUVDLEtBQUc7VUFBSyxLQUFLO1VBQUcsS0FBSztBQUFHLG1CQUFPNmUsR0FBRyxHQUFTaGYsTUFBUCxRQUFpQkEsRUFBRSxrQkFBVCxTQUFpQ0UsRUFBRSxrQkFBVCxTQUEyRGEsRUFBRSxTQUFwQyxvQ0FBMkNiLEVBQUUsU0FBTyxJQUFHO1FBQUk7QUFBQyxjQUFNLE1BQU1ILEVBQUUsS0FBSUcsRUFBRSxHQUFHLENBQUM7TUFBRTtBQUN0ZCxlQUFTK2UsR0FBR2pmLEdBQUU7QUFBQyxnQkFBT0EsRUFBRSxLQUFJO1VBQUMsS0FBSztBQUFFNFUsZUFBRzVVLEVBQUUsSUFBSSxLQUFHNlUsR0FBRztBQUFFLGdCQUFJM1UsSUFBRUYsRUFBRTtBQUFNLG1CQUFPRSxJQUFFLFFBQU1GLEVBQUUsUUFBTUUsSUFBRSxRQUFNLElBQUdGLEtBQUc7VUFBSyxLQUFLO0FBQWdDLGdCQUE5QjRaLEdBQUcsR0FBRWpaLEdBQUVjLEVBQUMsR0FBRWQsR0FBRWEsRUFBQyxHQUFFbVosR0FBRyxHQUFFemEsSUFBRUYsRUFBRSxPQUFjRSxJQUFFO0FBQUksb0JBQU0sTUFBTUgsRUFBRSxHQUFHLENBQUM7QUFBRSxtQkFBQUMsRUFBRSxRQUFNRSxJQUFFLFFBQU0sSUFBVUY7VUFBRSxLQUFLO0FBQUUsbUJBQU84WixHQUFHOVosQ0FBQyxHQUFFO1VBQUssS0FBSztBQUFHLG1CQUFPVyxHQUFFZ0IsRUFBQyxHQUFFekIsSUFBRUYsRUFBRSxPQUFNRSxJQUFFLFFBQU1GLEVBQUUsUUFBTUUsSUFBRSxRQUFNLElBQUdGLEtBQUc7VUFBSyxLQUFLO0FBQUcsbUJBQU9XLEdBQUVnQixFQUFDLEdBQUU7VUFBSyxLQUFLO0FBQUUsbUJBQU9pWSxHQUFHLEdBQUU7VUFBSyxLQUFLO0FBQUcsbUJBQU96QyxHQUFHblgsQ0FBQyxHQUFFO1VBQUssS0FBSztVQUFHLEtBQUs7QUFBRyxtQkFBT2dmLEdBQUcsR0FBRTtVQUFLO0FBQVEsbUJBQU87UUFBSTtNQUFDO0FBQzFhLGVBQVNFLEdBQUdsZixHQUFFRSxHQUFFO0FBQUMsWUFBRztBQUFDLGNBQUlDLElBQUUsSUFBR1ksSUFBRWI7QUFBRTtBQUFHQyxpQkFBRzRFLEdBQUdoRSxDQUFDLEdBQUVBLElBQUVBLEVBQUU7aUJBQWFBO0FBQUcsY0FBSUQsSUFBRVg7UUFBQyxTQUFPZ0IsR0FBRTtBQUFDTCxjQUFFOzRCQUE2QkssRUFBRSxVQUFRO0lBQUtBLEVBQUU7UUFBSztBQUFDLGVBQU0sRUFBQyxPQUFNbkIsR0FBRSxRQUFPRSxHQUFFLE9BQU1ZLEVBQUM7TUFBQztBQUFDLGVBQVNxZSxHQUFHbmYsR0FBRUUsR0FBRTtBQUFDLFlBQUc7QUFBQyxrQkFBUSxNQUFNQSxFQUFFLEtBQUs7UUFBQyxTQUFPQyxHQUFFO0FBQUMscUJBQVcsV0FBVTtBQUFDLGtCQUFNQTtVQUFFLENBQUM7UUFBQztNQUFDO0FBQUMsVUFBSWlmLEtBQWdCLE9BQU8sV0FBcEIsYUFBNEIsVUFBUTtBQUFJLGVBQVNDLEdBQUdyZixHQUFFRSxHQUFFQyxHQUFFO0FBQUNBLFlBQUV3WCxHQUFHLElBQUd4WCxDQUFDLEdBQUVBLEVBQUUsTUFBSSxHQUFFQSxFQUFFLFVBQVEsRUFBQyxTQUFRLEtBQUk7QUFBRSxZQUFJWSxJQUFFYixFQUFFO0FBQU0sZUFBQUMsRUFBRSxXQUFTLFdBQVU7QUFBQ21mLGlCQUFLQSxLQUFHLE1BQUdDLEtBQUd4ZSxJQUFHb2UsR0FBR25mLEdBQUVFLENBQUM7UUFBQyxHQUFTQztNQUFDO0FBQ3JiLGVBQVNxZixHQUFHeGYsR0FBRUUsR0FBRUMsR0FBRTtBQUFDQSxZQUFFd1gsR0FBRyxJQUFHeFgsQ0FBQyxHQUFFQSxFQUFFLE1BQUk7QUFBRSxZQUFJWSxJQUFFZixFQUFFLEtBQUs7QUFBeUIsWUFBZ0IsT0FBT2UsS0FBcEIsWUFBc0I7QUFBQyxjQUFJRCxJQUFFWixFQUFFO0FBQU1DLFlBQUUsVUFBUSxXQUFVO0FBQUMsbUJBQUFnZixHQUFHbmYsR0FBRUUsQ0FBQyxHQUFTYSxFQUFFRCxDQUFDO1VBQUM7UUFBQztBQUFDLFlBQUlLLElBQUVuQixFQUFFO0FBQVUsZUFBT21CLE1BQVAsUUFBdUIsT0FBT0EsRUFBRSxxQkFBdEIsZUFBMENoQixFQUFFLFdBQVMsV0FBVTtBQUFjLGlCQUFPWSxLQUFwQixlQUErQjBlLE9BQVAsT0FBVUEsS0FBRyxvQkFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUVBLEdBQUcsSUFBSSxJQUFJLEdBQUVOLEdBQUduZixHQUFFRSxDQUFDO0FBQUcsY0FBSUMsSUFBRUQsRUFBRTtBQUFNLGVBQUssa0JBQWtCQSxFQUFFLE9BQU0sRUFBQyxnQkFBc0JDLE1BQVAsT0FBU0EsSUFBRSxHQUFFLENBQUM7UUFBQyxJQUFVQTtNQUFDO0FBQUMsVUFBSXVmLEtBQWdCLE9BQU8sV0FBcEIsYUFBNEIsVUFBUTtBQUN4YyxlQUFTQyxHQUFHM2YsR0FBRTtBQUFDLFlBQUlFLElBQUVGLEVBQUU7QUFBSSxZQUFVRSxNQUFQO0FBQVMsY0FBZ0IsT0FBT0EsS0FBcEI7QUFBc0IsZ0JBQUc7QUFBQ0EsZ0JBQUUsSUFBSTtZQUFDLFNBQU9DLEdBQUU7QUFBQ3lmLGlCQUFHNWYsR0FBRUcsQ0FBQztZQUFDOztBQUFNRCxjQUFFLFVBQVE7TUFBSTtBQUFDLGVBQVMyZixHQUFHN2YsR0FBRUUsR0FBRTtBQUFDLGdCQUFPQSxFQUFFLEtBQUk7VUFBQyxLQUFLO1VBQUUsS0FBSztVQUFHLEtBQUs7VUFBRyxLQUFLO0FBQUc7VUFBTyxLQUFLO0FBQUUsZ0JBQUdBLEVBQUUsUUFBTSxPQUFZRixNQUFQLE1BQVM7QUFBQyxrQkFBSUcsSUFBRUgsRUFBRSxlQUFjZSxJQUFFZixFQUFFO0FBQWNBLGtCQUFFRSxFQUFFLFdBQVVBLElBQUVGLEVBQUUsd0JBQXdCRSxFQUFFLGdCQUFjQSxFQUFFLE9BQUtDLElBQUUwVyxHQUFHM1csRUFBRSxNQUFLQyxDQUFDLEdBQUVZLENBQUMsR0FBRWYsRUFBRSxzQ0FBb0NFO1lBQUM7QUFBQztVQUFPLEtBQUs7QUFBRUEsY0FBRSxRQUFNLE9BQUsyVCxHQUFHM1QsRUFBRSxVQUFVLGFBQWE7QUFBRTtVQUFPLEtBQUs7VUFBRSxLQUFLO1VBQUUsS0FBSztVQUFFLEtBQUs7QUFBRztRQUFNO0FBQUMsY0FBTSxNQUFNSCxFQUFFLEdBQUcsQ0FBQztNQUFFO0FBQ2xmLGVBQVMrZixHQUFHOWYsR0FBRUUsR0FBRUMsR0FBRTtBQUFDLGdCQUFPQSxFQUFFLEtBQUk7VUFBQyxLQUFLO1VBQUUsS0FBSztVQUFHLEtBQUs7VUFBRyxLQUFLO0FBQWdELGdCQUE3Q0QsSUFBRUMsRUFBRSxhQUFZRCxJQUFTQSxNQUFQLE9BQVNBLEVBQUUsYUFBVyxNQUFlQSxNQUFQLE1BQVM7QUFBQ0Ysa0JBQUVFLElBQUVBLEVBQUU7QUFBSyxpQkFBRTtBQUFDLHFCQUFRRixFQUFFLE1BQUksT0FBWCxHQUFjO0FBQUMsc0JBQUllLElBQUVmLEVBQUU7QUFBT0Esb0JBQUUsVUFBUWUsRUFBRTtnQkFBQztBQUFDZixvQkFBRUEsRUFBRTtjQUFJLFNBQU9BLE1BQUlFO1lBQUU7QUFBOEMsZ0JBQTdDQSxJQUFFQyxFQUFFLGFBQVlELElBQVNBLE1BQVAsT0FBU0EsRUFBRSxhQUFXLE1BQWVBLE1BQVAsTUFBUztBQUFDRixrQkFBRUUsSUFBRUEsRUFBRTtBQUFLLGlCQUFFO0FBQUMsb0JBQUlZLElBQUVkO0FBQUVlLG9CQUFFRCxFQUFFLE1BQUtBLElBQUVBLEVBQUUsS0FBU0EsSUFBRSxLQUFTQSxJQUFFLE1BQUtpZixHQUFHNWYsR0FBRUgsQ0FBQyxHQUFFZ2dCLEdBQUc3ZixHQUFFSCxDQUFDLElBQUdBLElBQUVlO2NBQUMsU0FBT2YsTUFBSUU7WUFBRTtBQUFDO1VBQU8sS0FBSztBQUFFRixnQkFBRUcsRUFBRSxXQUFVQSxFQUFFLFFBQU0sTUFBV0QsTUFBUCxPQUFTRixFQUFFLGtCQUFrQixLQUFHZSxJQUFFWixFQUFFLGdCQUFjQSxFQUFFLE9BQUtELEVBQUUsZ0JBQWMyVyxHQUFHMVcsRUFBRSxNQUFLRCxFQUFFLGFBQWEsR0FBRUYsRUFBRSxtQkFBbUJlLEdBQ3hnQmIsRUFBRSxlQUFjRixFQUFFLG1DQUFtQyxLQUFJRSxJQUFFQyxFQUFFLGFBQW1CRCxNQUFQLFFBQVU4WCxHQUFHN1gsR0FBRUQsR0FBRUYsQ0FBQztBQUFFO1VBQU8sS0FBSztBQUFrQixnQkFBaEJFLElBQUVDLEVBQUUsYUFBc0JELE1BQVAsTUFBUztBQUFRLGtCQUFQRixJQUFFLE1BQWVHLEVBQUUsVUFBVDtBQUFlLHdCQUFPQSxFQUFFLE1BQU0sS0FBSTtrQkFBQyxLQUFLO0FBQUVILHdCQUFFRyxFQUFFLE1BQU07QUFBVTtrQkFBTSxLQUFLO0FBQUVILHdCQUFFRyxFQUFFLE1BQU07Z0JBQVM7QUFBQzZYLGlCQUFHN1gsR0FBRUQsR0FBRUYsQ0FBQztZQUFDO0FBQUM7VUFBTyxLQUFLO0FBQUVBLGdCQUFFRyxFQUFFLFdBQWlCRCxNQUFQLFFBQVVDLEVBQUUsUUFBTSxLQUFHc1QsR0FBR3RULEVBQUUsTUFBS0EsRUFBRSxhQUFhLEtBQUdILEVBQUUsTUFBTTtBQUFFO1VBQU8sS0FBSztBQUFFO1VBQU8sS0FBSztBQUFFO1VBQU8sS0FBSztBQUFHO1VBQU8sS0FBSztBQUFVRyxjQUFFLGtCQUFULFNBQXlCQSxJQUFFQSxFQUFFLFdBQWlCQSxNQUFQLFNBQVdBLElBQUVBLEVBQUUsZUFBcUJBLE1BQVAsU0FBV0EsSUFBRUEsRUFBRSxZQUFrQkEsTUFBUCxRQUFVd0ssR0FBR3hLLENBQUM7QUFDeGY7VUFBTyxLQUFLO1VBQUcsS0FBSztVQUFHLEtBQUs7VUFBRyxLQUFLO1VBQUcsS0FBSztVQUFHLEtBQUs7QUFBRztRQUFNO0FBQUMsY0FBTSxNQUFNSixFQUFFLEdBQUcsQ0FBQztNQUFFO0FBQ2xGLGVBQVNrZ0IsR0FBR2pnQixHQUFFRSxHQUFFO0FBQUMsaUJBQVFDLElBQUVILE9BQUk7QUFBQyxjQUFPRyxFQUFFLFFBQU4sR0FBVTtBQUFDLGdCQUFJWSxJQUFFWixFQUFFO0FBQVUsZ0JBQUdEO0FBQUVhLGtCQUFFQSxFQUFFLE9BQW1CLE9BQU9BLEVBQUUsZUFBdEIsYUFBa0NBLEVBQUUsWUFBWSxXQUFVLFFBQU8sV0FBVyxJQUFFQSxFQUFFLFVBQVE7aUJBQVc7QUFBQ0Esa0JBQUVaLEVBQUU7QUFBVSxrQkFBSVcsSUFBRVgsRUFBRSxjQUFjO0FBQU1XLGtCQUFxQkEsS0FBUCxRQUFVQSxFQUFFLGVBQWUsU0FBUyxJQUFFQSxFQUFFLFVBQVEsTUFBS0MsRUFBRSxNQUFNLFVBQVE2RixHQUFHLFdBQVU5RixDQUFDO1lBQUM7VUFBQyxXQUFhWCxFQUFFLFFBQU47QUFBVUEsY0FBRSxVQUFVLFlBQVVELElBQUUsS0FBR0MsRUFBRTtvQkFBNEJBLEVBQUUsUUFBUCxNQUFpQkEsRUFBRSxRQUFQLE1BQW1CQSxFQUFFLGtCQUFULFFBQXdCQSxNQUFJSCxNQUFXRyxFQUFFLFVBQVQsTUFBZTtBQUFDQSxjQUFFLE1BQU0sU0FBT0EsR0FBRUEsSUFBRUEsRUFBRTtBQUFNO1VBQVE7QUFBQyxjQUFHQSxNQUN0Zkg7QUFBRTtBQUFNLGlCQUFZRyxFQUFFLFlBQVQsUUFBa0I7QUFBQyxnQkFBVUEsRUFBRSxXQUFULFFBQWlCQSxFQUFFLFdBQVNIO0FBQUU7QUFBT0csZ0JBQUVBLEVBQUU7VUFBTTtBQUFDQSxZQUFFLFFBQVEsU0FBT0EsRUFBRSxRQUFPQSxJQUFFQSxFQUFFO1FBQU87TUFBQztBQUN6SCxlQUFTK2YsR0FBR2xnQixHQUFFRSxHQUFFO0FBQUMsWUFBR2lWLE1BQWlCLE9BQU9BLEdBQUcsd0JBQXZCO0FBQTRDLGNBQUc7QUFBQ0EsZUFBRyxxQkFBcUJELElBQUdoVixDQUFDO1VBQUMsUUFBUztVQUFDO0FBQUMsZ0JBQU9BLEVBQUUsS0FBSTtVQUFDLEtBQUs7VUFBRSxLQUFLO1VBQUcsS0FBSztVQUFHLEtBQUs7VUFBRyxLQUFLO0FBQW1CLGdCQUFoQkYsSUFBRUUsRUFBRSxhQUFzQkYsTUFBUCxTQUFXQSxJQUFFQSxFQUFFLFlBQWtCQSxNQUFQLE9BQVU7QUFBQyxrQkFBSUcsSUFBRUgsSUFBRUEsRUFBRTtBQUFLLGlCQUFFO0FBQUMsb0JBQUllLElBQUVaLEdBQUVXLElBQUVDLEVBQUU7QUFBZ0Isb0JBQVJBLElBQUVBLEVBQUUsS0FBZ0JELE1BQVQ7QUFBVyxzQkFBUUMsSUFBRTtBQUFHZ2YsdUJBQUc3ZixHQUFFQyxDQUFDO3VCQUFNO0FBQUNZLHdCQUFFYjtBQUFFLHdCQUFHO0FBQUNZLHdCQUFFO29CQUFDLFNBQU9LLEdBQUU7QUFBQ3llLHlCQUFHN2UsR0FBRUksQ0FBQztvQkFBQztrQkFBQztBQUFDaEIsb0JBQUVBLEVBQUU7Y0FBSSxTQUFPQSxNQUFJSDtZQUFFO0FBQUM7VUFBTSxLQUFLO0FBQXNCLGdCQUFwQjJmLEdBQUd6ZixDQUFDLEdBQUVGLElBQUVFLEVBQUUsV0FBMEIsT0FBT0YsRUFBRSx3QkFBdEI7QUFBMkMsa0JBQUc7QUFBQ0Esa0JBQUUsUUFBTUUsRUFBRSxlQUFjRixFQUFFLFFBQU1FLEVBQUUsZUFBY0YsRUFBRSxxQkFBcUI7Y0FBQyxTQUFPbUIsR0FBRTtBQUFDeWUsbUJBQUcxZixHQUMvZ0JpQixDQUFDO2NBQUM7QUFBQztVQUFNLEtBQUs7QUFBRXdlLGVBQUd6ZixDQUFDO0FBQUU7VUFBTSxLQUFLO0FBQUVpZ0IsZUFBR25nQixHQUFFRSxDQUFDO1FBQUM7TUFBQztBQUFDLGVBQVNrZ0IsR0FBR3BnQixHQUFFO0FBQUNBLFVBQUUsWUFBVSxNQUFLQSxFQUFFLFFBQU0sTUFBS0EsRUFBRSxlQUFhLE1BQUtBLEVBQUUsY0FBWSxNQUFLQSxFQUFFLGFBQVcsTUFBS0EsRUFBRSxnQkFBYyxNQUFLQSxFQUFFLGdCQUFjLE1BQUtBLEVBQUUsZUFBYSxNQUFLQSxFQUFFLFNBQU8sTUFBS0EsRUFBRSxjQUFZO01BQUk7QUFBQyxlQUFTcWdCLEdBQUdyZ0IsR0FBRTtBQUFDLGVBQVdBLEVBQUUsUUFBTixLQUFlQSxFQUFFLFFBQU4sS0FBZUEsRUFBRSxRQUFOO01BQVM7QUFDdFMsZUFBU3NnQixHQUFHdGdCLEdBQUU7QUFBQ0EsV0FBRTtBQUFDLG1CQUFRRSxJQUFFRixFQUFFLFFBQWNFLE1BQVAsUUFBVTtBQUFDLGdCQUFHbWdCLEdBQUduZ0IsQ0FBQztBQUFFLG9CQUFNRjtBQUFFRSxnQkFBRUEsRUFBRTtVQUFNO0FBQUMsZ0JBQU0sTUFBTUgsRUFBRSxHQUFHLENBQUM7UUFBRTtBQUFDLFlBQUlJLElBQUVEO0FBQWdCLGdCQUFkQSxJQUFFQyxFQUFFLFdBQWlCQSxFQUFFLEtBQUk7VUFBQyxLQUFLO0FBQUUsZ0JBQUlZLElBQUU7QUFBRztVQUFNLEtBQUs7QUFBRWIsZ0JBQUVBLEVBQUUsZUFBY2EsSUFBRTtBQUFHO1VBQU0sS0FBSztBQUFFYixnQkFBRUEsRUFBRSxlQUFjYSxJQUFFO0FBQUc7VUFBTTtBQUFRLGtCQUFNLE1BQU1oQixFQUFFLEdBQUcsQ0FBQztRQUFFO0FBQUNJLFVBQUUsUUFBTSxPQUFLc0csR0FBR3ZHLEdBQUUsRUFBRSxHQUFFQyxFQUFFLFNBQU87QUFBS0g7QUFBRUU7QUFBRSxpQkFBSUMsSUFBRUgsT0FBSTtBQUFDLHFCQUFZRyxFQUFFLFlBQVQsUUFBa0I7QUFBQyxvQkFBVUEsRUFBRSxXQUFULFFBQWlCa2dCLEdBQUdsZ0IsRUFBRSxNQUFNLEdBQUU7QUFBQ0Esc0JBQUU7QUFBSyx3QkFBTUg7Z0JBQUM7QUFBQ0csb0JBQUVBLEVBQUU7Y0FBTTtBQUEyQixtQkFBMUJBLEVBQUUsUUFBUSxTQUFPQSxFQUFFLFFBQVdBLElBQUVBLEVBQUUsU0FBWUEsRUFBRSxRQUFOLEtBQWVBLEVBQUUsUUFBTixLQUFnQkEsRUFBRSxRQUFQLE1BQVk7QUFBeUIsb0JBQXJCQSxFQUFFLFFBQU0sS0FDL2RBLEVBQUUsVUFENmUsUUFDbGVBLEVBQUUsUUFBTjtBQUFVLDJCQUFTRDtBQUFPQyxrQkFBRSxNQUFNLFNBQU9BLEdBQUVBLElBQUVBLEVBQUU7Y0FBSztBQUFDLGtCQUFHLEVBQUVBLEVBQUUsUUFBTSxJQUFHO0FBQUNBLG9CQUFFQSxFQUFFO0FBQVUsc0JBQU1IO2NBQUM7WUFBQztBQUFDZSxZQUFFd2YsR0FBR3ZnQixHQUFFRyxHQUFFRCxDQUFDLElBQUVzZ0IsR0FBR3hnQixHQUFFRyxHQUFFRCxDQUFDO01BQUM7QUFDM0gsZUFBU3FnQixHQUFHdmdCLEdBQUVFLEdBQUVDLEdBQUU7QUFBQyxZQUFJWSxJQUFFZixFQUFFLEtBQUljLElBQU1DLE1BQUosS0FBV0EsTUFBSjtBQUFNLFlBQUdEO0FBQUVkLGNBQUVjLElBQUVkLEVBQUUsWUFBVUEsRUFBRSxVQUFVLFVBQVNFLElBQU1DLEVBQUUsYUFBTixJQUFlQSxFQUFFLFdBQVcsYUFBYUgsR0FBRUUsQ0FBQyxJQUFFQyxFQUFFLGFBQWFILEdBQUVFLENBQUMsS0FBT0MsRUFBRSxhQUFOLEtBQWdCRCxJQUFFQyxFQUFFLFlBQVdELEVBQUUsYUFBYUYsR0FBRUcsQ0FBQyxNQUFJRCxJQUFFQyxHQUFFRCxFQUFFLFlBQVlGLENBQUMsSUFBR0csSUFBRUEsRUFBRSxxQkFBMkJBLEtBQVAsUUFBNkJELEVBQUUsWUFBVCxTQUFtQkEsRUFBRSxVQUFRb1Q7aUJBQWlCdlMsTUFBSixNQUFRZixJQUFFQSxFQUFFLE9BQWFBLE1BQVA7QUFBVSxlQUFJdWdCLEdBQUd2Z0IsR0FBRUUsR0FBRUMsQ0FBQyxHQUFFSCxJQUFFQSxFQUFFLFNBQWVBLE1BQVA7QUFBVXVnQixlQUFHdmdCLEdBQUVFLEdBQUVDLENBQUMsR0FBRUgsSUFBRUEsRUFBRTtNQUFPO0FBQ3JaLGVBQVN3Z0IsR0FBR3hnQixHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBSVksSUFBRWYsRUFBRSxLQUFJYyxJQUFNQyxNQUFKLEtBQVdBLE1BQUo7QUFBTSxZQUFHRDtBQUFFZCxjQUFFYyxJQUFFZCxFQUFFLFlBQVVBLEVBQUUsVUFBVSxVQUFTRSxJQUFFQyxFQUFFLGFBQWFILEdBQUVFLENBQUMsSUFBRUMsRUFBRSxZQUFZSCxDQUFDO2lCQUFjZSxNQUFKLE1BQVFmLElBQUVBLEVBQUUsT0FBYUEsTUFBUDtBQUFVLGVBQUl3Z0IsR0FBR3hnQixHQUFFRSxHQUFFQyxDQUFDLEdBQUVILElBQUVBLEVBQUUsU0FBZUEsTUFBUDtBQUFVd2dCLGVBQUd4Z0IsR0FBRUUsR0FBRUMsQ0FBQyxHQUFFSCxJQUFFQSxFQUFFO01BQU87QUFDNU4sZUFBU21nQixHQUFHbmdCLEdBQUVFLEdBQUU7QUFBQyxpQkFBUUMsSUFBRUQsR0FBRWEsSUFBRSxPQUFHRCxHQUFFSyxPQUFJO0FBQUMsY0FBRyxDQUFDSixHQUFFO0FBQUNBLGdCQUFFWixFQUFFO0FBQU9IO0FBQUUseUJBQU87QUFBQyxvQkFBVWUsTUFBUDtBQUFTLHdCQUFNLE1BQU1oQixFQUFFLEdBQUcsQ0FBQztBQUFnQix3QkFBZGUsSUFBRUMsRUFBRSxXQUFpQkEsRUFBRSxLQUFJO2tCQUFDLEtBQUs7QUFBRUksd0JBQUU7QUFBRywwQkFBTW5CO2tCQUFFLEtBQUs7QUFBRWMsd0JBQUVBLEVBQUUsZUFBY0ssSUFBRTtBQUFHLDBCQUFNbkI7a0JBQUUsS0FBSztBQUFFYyx3QkFBRUEsRUFBRSxlQUFjSyxJQUFFO0FBQUcsMEJBQU1uQjtnQkFBQztBQUFDZSxvQkFBRUEsRUFBRTtjQUFNO0FBQUNBLGdCQUFFO1VBQUU7QUFBQyxjQUFPWixFQUFFLFFBQU4sS0FBZUEsRUFBRSxRQUFOLEdBQVU7QUFBQ0g7QUFBRSx1QkFBUWtCLElBQUVsQixHQUFFaUIsSUFBRWQsR0FBRWEsSUFBRUM7QUFBSSxvQkFBR2lmLEdBQUdoZixHQUFFRixDQUFDLEdBQVNBLEVBQUUsVUFBVCxRQUFvQkEsRUFBRSxRQUFOO0FBQVVBLG9CQUFFLE1BQU0sU0FBT0EsR0FBRUEsSUFBRUEsRUFBRTtxQkFBVTtBQUFDLHNCQUFHQSxNQUFJQztBQUFFLDBCQUFNakI7QUFBRSx5QkFBWWdCLEVBQUUsWUFBVCxRQUFrQjtBQUFDLHdCQUFVQSxFQUFFLFdBQVQsUUFBaUJBLEVBQUUsV0FBU0M7QUFBRSw0QkFBTWpCO0FBQUVnQix3QkFBRUEsRUFBRTtrQkFBTTtBQUFDQSxvQkFBRSxRQUFRLFNBQU9BLEVBQUUsUUFBT0EsSUFBRUEsRUFBRTtnQkFBTztBQUFDRyxpQkFBR0QsSUFBRUosR0FBRUcsSUFBRWQsRUFBRSxXQUNqZmUsRUFBRSxhQUFOLElBQWVBLEVBQUUsV0FBVyxZQUFZRCxDQUFDLElBQUVDLEVBQUUsWUFBWUQsQ0FBQyxLQUFHSCxFQUFFLFlBQVlYLEVBQUUsU0FBUztVQUFDLFdBQWFBLEVBQUUsUUFBTixHQUFBO0FBQVcsZ0JBQVVBLEVBQUUsVUFBVCxNQUFlO0FBQUNXLGtCQUFFWCxFQUFFLFVBQVUsZUFBY2dCLElBQUUsTUFBR2hCLEVBQUUsTUFBTSxTQUFPQSxHQUFFQSxJQUFFQSxFQUFFO0FBQU07WUFBUTtVQUFBLFdBQVUrZixHQUFHbGdCLEdBQUVHLENBQUMsR0FBU0EsRUFBRSxVQUFULE1BQWU7QUFBQ0EsY0FBRSxNQUFNLFNBQU9BLEdBQUVBLElBQUVBLEVBQUU7QUFBTTtVQUFRO0FBQUMsY0FBR0EsTUFBSUQ7QUFBRTtBQUFNLGlCQUFZQyxFQUFFLFlBQVQsUUFBa0I7QUFBQyxnQkFBVUEsRUFBRSxXQUFULFFBQWlCQSxFQUFFLFdBQVNEO0FBQUU7QUFBT0MsZ0JBQUVBLEVBQUUsUUFBV0EsRUFBRSxRQUFOLE1BQVlZLElBQUU7VUFBRztBQUFDWixZQUFFLFFBQVEsU0FBT0EsRUFBRSxRQUFPQSxJQUFFQSxFQUFFO1FBQU87TUFBQztBQUMxWixlQUFTc2dCLEdBQUd6Z0IsR0FBRUUsR0FBRTtBQUFDLGdCQUFPQSxFQUFFLEtBQUk7VUFBQyxLQUFLO1VBQUUsS0FBSztVQUFHLEtBQUs7VUFBRyxLQUFLO1VBQUcsS0FBSztBQUFHLGdCQUFJQyxJQUFFRCxFQUFFO0FBQXlDLGdCQUE3QkMsSUFBU0EsTUFBUCxPQUFTQSxFQUFFLGFBQVcsTUFBZUEsTUFBUCxNQUFTO0FBQUMsa0JBQUlZLElBQUVaLElBQUVBLEVBQUU7QUFBSztBQUFBLGlCQUFRWSxFQUFFLE1BQUksT0FBWCxNQUFnQmYsSUFBRWUsRUFBRSxTQUFRQSxFQUFFLFVBQVEsUUFBZ0JmLE1BQVQsVUFBWUEsRUFBRSxJQUFHZSxJQUFFQSxFQUFFO3FCQUFXQSxNQUFJWjtZQUFFO0FBQUM7VUFBTyxLQUFLO0FBQUU7VUFBTyxLQUFLO0FBQWdCLGdCQUFkQSxJQUFFRCxFQUFFLFdBQW1CQyxLQUFOLE1BQVE7QUFBQ1ksa0JBQUViLEVBQUU7QUFBYyxrQkFBSVksSUFBU2QsTUFBUCxPQUFTQSxFQUFFLGdCQUFjZTtBQUFFZixrQkFBRUUsRUFBRTtBQUFLLGtCQUFJaUIsSUFBRWpCLEVBQUU7QUFBK0Isa0JBQW5CQSxFQUFFLGNBQVksTUFBZWlCLE1BQVAsTUFBUztBQUFnRixxQkFBL0VoQixFQUFFaVUsRUFBRSxJQUFFclQsR0FBWWYsTUFBVixXQUF1QmUsRUFBRSxTQUFaLFdBQXdCQSxFQUFFLFFBQVIsUUFBYzBFLEdBQUd0RixHQUFFWSxDQUFDLEdBQUVpRyxHQUFHaEgsR0FBRWMsQ0FBQyxHQUFFWixJQUFFOEcsR0FBR2hILEdBQUVlLENBQUMsR0FBTUQsSUFBRSxHQUFFQSxJQUFFSyxFQUFFLFFBQU9MLEtBQ2xmLEdBQUU7QUFBQyxzQkFBSUksSUFBRUMsRUFBRUwsQ0FBQyxHQUFFRyxJQUFFRSxFQUFFTCxJQUFFLENBQUM7QUFBWUksd0JBQVYsVUFBWTJGLEdBQUcxRyxHQUFFYyxDQUFDLElBQThCQyxNQUE1Qiw0QkFBOEJzRixHQUFHckcsR0FBRWMsQ0FBQyxJQUFlQyxNQUFiLGFBQWV1RixHQUFHdEcsR0FBRWMsQ0FBQyxJQUFFcUMsR0FBR25ELEdBQUVlLEdBQUVELEdBQUVmLENBQUM7Z0JBQUM7QUFBQyx3QkFBT0YsR0FBRTtrQkFBQyxLQUFLO0FBQVEwRix1QkFBR3ZGLEdBQUVZLENBQUM7QUFBRTtrQkFBTSxLQUFLO0FBQVdtRix1QkFBRy9GLEdBQUVZLENBQUM7QUFBRTtrQkFBTSxLQUFLO0FBQVNmLHdCQUFFRyxFQUFFLGNBQWMsYUFBWUEsRUFBRSxjQUFjLGNBQVksQ0FBQyxDQUFDWSxFQUFFLFVBQVNJLElBQUVKLEVBQUUsT0FBWUksS0FBTixPQUFRNEUsR0FBRzVGLEdBQUUsQ0FBQyxDQUFDWSxFQUFFLFVBQVNJLEdBQUUsS0FBRSxJQUFFbkIsTUFBSSxDQUFDLENBQUNlLEVBQUUsYUFBaUJBLEVBQUUsZ0JBQVIsT0FBcUJnRixHQUFHNUYsR0FBRSxDQUFDLENBQUNZLEVBQUUsVUFBU0EsRUFBRSxjQUFhLElBQUUsSUFBRWdGLEdBQUc1RixHQUFFLENBQUMsQ0FBQ1ksRUFBRSxVQUFTQSxFQUFFLFdBQVMsQ0FBQyxJQUFFLElBQUcsS0FBRTtnQkFBRTtjQUFDO1lBQUM7QUFBQztVQUFPLEtBQUs7QUFBRSxnQkFBVWIsRUFBRSxjQUFUO0FBQW1CLG9CQUFNLE1BQU1ILEVBQUUsR0FBRyxDQUFDO0FBQUVHLGNBQUUsVUFBVSxZQUNqZkEsRUFBRTtBQUFjO1VBQU8sS0FBSztBQUFFQyxnQkFBRUQsRUFBRSxXQUFVQyxFQUFFLFlBQVVBLEVBQUUsVUFBUSxPQUFHd0ssR0FBR3hLLEVBQUUsYUFBYTtBQUFHO1VBQU8sS0FBSztBQUFHO1VBQU8sS0FBSztBQUFVRCxjQUFFLGtCQUFULFNBQXlCd2dCLEtBQUdoZixHQUFFLEdBQUV1ZSxHQUFHL2YsRUFBRSxPQUFNLElBQUUsSUFBR3lnQixHQUFHemdCLENBQUM7QUFBRTtVQUFPLEtBQUs7QUFBR3lnQixlQUFHemdCLENBQUM7QUFBRTtVQUFPLEtBQUs7QUFBRztVQUFPLEtBQUs7VUFBRyxLQUFLO0FBQUcrZixlQUFHL2YsR0FBU0EsRUFBRSxrQkFBVCxJQUFzQjtBQUFFO1FBQU07QUFBQyxjQUFNLE1BQU1ILEVBQUUsR0FBRyxDQUFDO01BQUU7QUFBQyxlQUFTNGdCLEdBQUczZ0IsR0FBRTtBQUFDLFlBQUlFLElBQUVGLEVBQUU7QUFBWSxZQUFVRSxNQUFQLE1BQVM7QUFBQ0YsWUFBRSxjQUFZO0FBQUssY0FBSUcsSUFBRUgsRUFBRTtBQUFpQkcsZ0JBQVAsU0FBV0EsSUFBRUgsRUFBRSxZQUFVLElBQUkwZixPQUFJeGYsRUFBRSxRQUFRLFNBQVNBLEdBQUU7QUFBQyxnQkFBSWEsSUFBRTZmLEdBQUcsS0FBSyxNQUFLNWdCLEdBQUVFLENBQUM7QUFBRUMsY0FBRSxJQUFJRCxDQUFDLE1BQUlDLEVBQUUsSUFBSUQsQ0FBQyxHQUFFQSxFQUFFLEtBQUthLEdBQUVBLENBQUM7VUFBRSxDQUFDO1FBQUM7TUFBQztBQUN6ZSxlQUFTOGYsR0FBRzdnQixHQUFFRSxHQUFFO0FBQUMsZUFBY0YsTUFBUCxTQUFXQSxJQUFFQSxFQUFFLGVBQXFCQSxNQUFQLFFBQWlCQSxFQUFFLGVBQVQsU0FBc0JFLElBQUVBLEVBQUUsZUFBcUJBLE1BQVAsUUFBaUJBLEVBQUUsZUFBVCxRQUFxQjtNQUFFO0FBQUMsVUFBSTRnQixLQUFHLEtBQUssTUFBS0MsS0FBR3hkLEdBQUcsd0JBQXVCeWQsS0FBR3pkLEdBQUcsbUJBQWtCMGQsSUFBRSxHQUFFL2UsS0FBRSxNQUFLZ2YsS0FBRSxNQUFLOWUsS0FBRSxHQUFFK2UsS0FBRyxHQUFFQyxLQUFHNU0sR0FBRyxDQUFDLEdBQUVyUyxLQUFFLEdBQUVrZixLQUFHLE1BQUtDLEtBQUcsR0FBRXZKLEtBQUcsR0FBRThHLEtBQUcsR0FBRTBDLEtBQUcsR0FBRUMsS0FBRyxNQUFLZCxLQUFHLEdBQUUzQixLQUFHLElBQUE7QUFBUyxlQUFTMEMsS0FBSTtBQUFDMUMsYUFBR3JkLEdBQUUsSUFBRTtNQUFHO0FBQUMsVUFBSWdnQixJQUFFLE1BQUtwQyxLQUFHLE9BQUdDLEtBQUcsTUFBS0UsS0FBRyxNQUFLa0MsS0FBRyxPQUFHQyxLQUFHLE1BQUtDLEtBQUcsSUFBR0MsS0FBRyxDQUFDLEdBQUVDLEtBQUcsQ0FBQyxHQUFFQyxLQUFHLE1BQUtDLEtBQUcsR0FBRUMsS0FBRyxNQUFLQyxLQUFHLElBQUdDLEtBQUcsR0FBRUMsS0FBRyxHQUFFQyxLQUFHLE1BQUtDLEtBQUc7QUFBRyxlQUFTbkssS0FBSTtBQUFDLGVBQVk2SSxJQUFFLEtBQUl2ZixHQUFFLElBQU95Z0IsT0FBTCxLQUFRQSxLQUFHQSxLQUFHemdCLEdBQUU7TUFBQztBQUM5ZSxlQUFTMlcsR0FBR3JZLEdBQUU7QUFBVSxZQUFUQSxJQUFFQSxFQUFFLE1BQWEsRUFBQUEsSUFBRTtBQUFHLGlCQUFPO0FBQUUsWUFBUSxFQUFBQSxJQUFFO0FBQUcsaUJBQVlzVyxHQUFHLE1BQVIsS0FBVSxJQUFFO0FBQWtCLFlBQVo4TCxPQUFKLE1BQVNBLEtBQUdkLEtBQVcxSyxHQUFHLGVBQVAsR0FBa0I7QUFBS3lMLGlCQUFKLE1BQVNBLEtBQVViLE9BQVAsT0FBVUEsR0FBRyxlQUFhLElBQUd4aEIsSUFBRW9pQjtBQUFHLGNBQUlsaUIsSUFBRSxVQUFRLENBQUNtaUI7QUFBRyxpQkFBQW5pQixLQUFHLENBQUNBLEdBQU1BLE1BQUosTUFBUUYsSUFBRSxVQUFRLENBQUNBLEdBQUVFLElBQUVGLElBQUUsQ0FBQ0EsR0FBTUUsTUFBSixNQUFRQSxJQUFFLFFBQWNBO1FBQUM7QUFBQyxlQUFBRixJQUFFc1csR0FBRyxHQUFPMkssSUFBRSxLQUFTamhCLE1BQUwsS0FBT0EsSUFBRWdNLEdBQUcsSUFBR29XLEVBQUUsS0FBR3BpQixJQUFFMkwsR0FBRzNMLENBQUMsR0FBRUEsSUFBRWdNLEdBQUdoTSxHQUFFb2lCLEVBQUUsSUFBVXBpQjtNQUFDO0FBQ3BULGVBQVNzWSxHQUFHdFksR0FBRUUsR0FBRUMsR0FBRTtBQUFDLFlBQUcsS0FBRzhoQjtBQUFHLGdCQUFNQSxLQUFHLEdBQUVDLEtBQUcsTUFBSyxNQUFNbmlCLEVBQUUsR0FBRyxDQUFDO0FBQVksWUFBVkMsSUFBRXdpQixHQUFHeGlCLEdBQUVFLENBQUMsR0FBWUYsTUFBUDtBQUFTLGlCQUFPO0FBQUttTSxXQUFHbk0sR0FBRUUsR0FBRUMsQ0FBQyxHQUFFSCxNQUFJa0MsT0FBSTJjLE1BQUkzZSxHQUFNaUMsT0FBSixLQUFPMmMsR0FBRzllLEdBQUVvQyxFQUFDO0FBQUcsWUFBSXJCLElBQUV1VixHQUFHO0FBQU1wVyxjQUFKLElBQVcrZ0IsSUFBRSxLQUFTLEVBQUFBLElBQUUsTUFBSXdCLEdBQUd6aUIsQ0FBQyxLQUFHMGlCLEdBQUcxaUIsR0FBRUcsQ0FBQyxHQUFNOGdCLE1BQUosTUFBUVEsR0FBRyxHQUFFL0ssR0FBRyxPQUFVLEVBQUF1SyxJQUFFLE1BQVNsZ0IsTUFBTCxNQUFhQSxNQUFMLE9BQWdCaWhCLE9BQVAsT0FBVUEsS0FBRyxvQkFBSSxJQUFJLENBQUNoaUIsQ0FBQyxDQUFDLElBQUVnaUIsR0FBRyxJQUFJaGlCLENBQUMsSUFBRzBpQixHQUFHMWlCLEdBQUVHLENBQUMsSUFBR3FoQixLQUFHeGhCO01BQUM7QUFBQyxlQUFTd2lCLEdBQUd4aUIsR0FBRUUsR0FBRTtBQUFDRixVQUFFLFNBQU9FO0FBQUUsWUFBSUMsSUFBRUgsRUFBRTtBQUFxQyxhQUFwQkcsTUFBUCxTQUFXQSxFQUFFLFNBQU9ELElBQUdDLElBQUVILEdBQU1BLElBQUVBLEVBQUUsUUFBY0EsTUFBUDtBQUFVQSxZQUFFLGNBQVlFLEdBQUVDLElBQUVILEVBQUUsV0FBaUJHLE1BQVAsU0FBV0EsRUFBRSxjQUFZRCxJQUFHQyxJQUFFSCxHQUFFQSxJQUFFQSxFQUFFO0FBQU8sZUFBV0csRUFBRSxRQUFOLElBQVVBLEVBQUUsWUFBVTtNQUFJO0FBQzdlLGVBQVN1aUIsR0FBRzFpQixHQUFFRSxHQUFFO0FBQUMsaUJBQVFDLElBQUVILEVBQUUsY0FBYWUsSUFBRWYsRUFBRSxnQkFBZWMsSUFBRWQsRUFBRSxhQUFZbUIsSUFBRW5CLEVBQUUsaUJBQWdCa0IsSUFBRWxCLEVBQUUsY0FBYSxJQUFFa0IsS0FBRztBQUFDLGNBQUlELElBQUUsS0FBRzZLLEdBQUc1SyxDQUFDLEdBQUVGLElBQUUsS0FBR0MsR0FBRSxJQUFFRSxFQUFFRixDQUFDO0FBQUUsY0FBUSxNQUFMLElBQUE7QUFBUSxnQkFBUSxFQUFBRCxJQUFFRCxNQUFTQyxJQUFFRixHQUFHO0FBQUMsa0JBQUVaLEdBQUV3TCxHQUFHMUssQ0FBQztBQUFFLGtCQUFJckMsSUFBRThCO0FBQUVVLGdCQUFFRixDQUFDLElBQUUsTUFBSXRDLElBQUUsSUFBRSxNQUFJLEtBQUdBLElBQUUsSUFBRSxNQUFJO1lBQUU7VUFBQTtBQUFPLGlCQUFHdUIsTUFBSUYsRUFBRSxnQkFBY2dCO0FBQUdFLGVBQUcsQ0FBQ0Y7UUFBQztBQUF1QixZQUF0QkQsSUFBRThLLEdBQUc3TCxHQUFFQSxNQUFJa0MsS0FBRUUsS0FBRSxDQUFDLEdBQUVsQyxJQUFFTyxJQUFTTSxNQUFKO0FBQWFaLGdCQUFQLFNBQVdBLE1BQUk2VixNQUFJVixHQUFHblYsQ0FBQyxHQUFFSCxFQUFFLGVBQWEsTUFBS0EsRUFBRSxtQkFBaUI7YUFBTztBQUFDLGNBQVVHLE1BQVAsTUFBUztBQUFDLGdCQUFHSCxFQUFFLHFCQUFtQkU7QUFBRTtBQUFPQyxrQkFBSTZWLE1BQUlWLEdBQUduVixDQUFDO1VBQUM7QUFBTUQsZ0JBQUwsTUFBUUMsSUFBRXNpQixHQUFHLEtBQUssTUFBS3ppQixDQUFDLEdBQVNrVyxPQUFQLFFBQVdBLEtBQUcsQ0FBQy9WLENBQUMsR0FBRWdXLEtBQUdkLEdBQUdNLElBQUdnQixFQUFFLEtBQUdULEdBQUcsS0FBSy9WLENBQUMsR0FDdGZBLElBQUU2VixNQUFTOVYsTUFBTCxLQUFPQyxJQUFFc1csR0FBRyxJQUFHZ00sR0FBRyxLQUFLLE1BQUt6aUIsQ0FBQyxDQUFDLEtBQUdHLElBQUV5TCxHQUFHMUwsQ0FBQyxHQUFFQyxJQUFFc1csR0FBR3RXLEdBQUV3aUIsR0FBRyxLQUFLLE1BQUszaUIsQ0FBQyxDQUFDLElBQUdBLEVBQUUsbUJBQWlCRSxHQUFFRixFQUFFLGVBQWFHO1FBQUM7TUFBQztBQUM5RyxlQUFTd2lCLEdBQUczaUIsR0FBRTtBQUFlLFlBQWRtaUIsS0FBRyxJQUFHRSxLQUFHRCxLQUFHLEdBQVVuQixJQUFFO0FBQUksZ0JBQU0sTUFBTWxoQixFQUFFLEdBQUcsQ0FBQztBQUFFLFlBQUlHLElBQUVGLEVBQUU7QUFBYSxZQUFHNGlCLEdBQUcsS0FBRzVpQixFQUFFLGlCQUFlRTtBQUFFLGlCQUFPO0FBQUssWUFBSUMsSUFBRTBMLEdBQUc3TCxHQUFFQSxNQUFJa0MsS0FBRUUsS0FBRSxDQUFDO0FBQUUsWUFBT2pDLE1BQUo7QUFBTSxpQkFBTztBQUFLLFlBQUlZLElBQUVaLEdBQU1XLElBQUVtZ0I7QUFBRUEsYUFBRztBQUFHLFlBQUk5ZixJQUFFMGhCLEdBQUc7QUFBQSxTQUFLM2dCLE9BQUlsQyxLQUFHb0MsT0FBSXJCLE9BQUUwZ0IsR0FBRyxHQUFFcUIsR0FBRzlpQixHQUFFZSxDQUFDO0FBQUU7QUFBRyxjQUFHO0FBQUNnaUIsZUFBRztBQUFFO1VBQUssU0FBTzloQixHQUFFO0FBQUMraEIsZUFBR2hqQixHQUFFaUIsQ0FBQztVQUFDO2VBQU87QUFBdUQsWUFBcERpVyxHQUFHLEdBQUU2SixHQUFHLFVBQVE1ZixHQUFFOGYsSUFBRW5nQixHQUFTb2dCLE9BQVAsT0FBU25nQixJQUFFLEtBQUdtQixLQUFFLE1BQUtFLEtBQUUsR0FBRXJCLElBQUVvQixLQUFXbWYsS0FBR3pDO0FBQUlpRSxhQUFHOWlCLEdBQUUsQ0FBQztpQkFBY2UsTUFBSixHQUFNO0FBQXlGLGNBQXBGQSxNQUFKLE1BQVFrZ0IsS0FBRyxJQUFHamhCLEVBQUUsWUFBVUEsRUFBRSxVQUFRLE9BQUc2VCxHQUFHN1QsRUFBRSxhQUFhLElBQUdHLElBQUU0TCxHQUFHL0wsQ0FBQyxHQUFNRyxNQUFKLE1BQVFZLElBQUVraUIsR0FBR2pqQixHQUFFRyxDQUFDLEtBQVdZLE1BQUo7QUFBTSxrQkFBTWIsSUFBRW1oQixJQUFHeUIsR0FBRzlpQixHQUFFLENBQUMsR0FBRThlLEdBQUc5ZSxHQUFFRyxDQUFDLEdBQUV1aUIsR0FBRzFpQixHQUFFMEIsR0FBRSxDQUFDLEdBQUV4QjtBQUMzYyxrQkFENmNGLEVBQUUsZUFDcmZBLEVBQUUsUUFBUSxXQUFVQSxFQUFFLGdCQUFjRyxHQUFTWSxHQUFFO1lBQUMsS0FBSztZQUFFLEtBQUs7QUFBRSxvQkFBTSxNQUFNaEIsRUFBRSxHQUFHLENBQUM7WUFBRSxLQUFLO0FBQUVtakIsaUJBQUdsakIsQ0FBQztBQUFFO1lBQU0sS0FBSztBQUFVLGtCQUFSOGUsR0FBRzllLEdBQUVHLENBQUMsSUFBTUEsSUFBRSxjQUFZQSxNQUFJWSxJQUFFMmYsS0FBRyxNQUFJaGYsR0FBRSxHQUFFLEtBQUdYLElBQUc7QUFBQyxvQkFBTzhLLEdBQUc3TCxHQUFFLENBQUMsTUFBVjtBQUFZO0FBQXlCLG9CQUFuQmMsSUFBRWQsRUFBRSxpQkFBbUJjLElBQUVYLE9BQUtBLEdBQUU7QUFBQ2lZLHFCQUFHLEdBQUVwWSxFQUFFLGVBQWFBLEVBQUUsaUJBQWVjO0FBQUU7Z0JBQUs7QUFBQ2Qsa0JBQUUsZ0JBQWMyVCxHQUFHdVAsR0FBRyxLQUFLLE1BQUtsakIsQ0FBQyxHQUFFZSxDQUFDO0FBQUU7Y0FBSztBQUFDbWlCLGlCQUFHbGpCLENBQUM7QUFBRTtZQUFNLEtBQUs7QUFBVSxrQkFBUjhlLEdBQUc5ZSxHQUFFRyxDQUFDLElBQU1BLElBQUUsYUFBV0E7QUFBRTtBQUFxQixtQkFBZlksSUFBRWYsRUFBRSxZQUFlYyxJQUFFLElBQUcsSUFBRVgsS0FBRztBQUFDLG9CQUFJZSxJQUFFLEtBQUc0SyxHQUFHM0wsQ0FBQztBQUFFZ0Isb0JBQUUsS0FBR0QsR0FBRUEsSUFBRUgsRUFBRUcsQ0FBQyxHQUFFQSxJQUFFSixNQUFJQSxJQUFFSSxJQUFHZixLQUFHLENBQUNnQjtjQUFDO0FBQ2xaLGtCQURtWmhCLElBQUVXLEdBQUVYLElBQUV1QixHQUFFLElBQUV2QixHQUFFQSxLQUFHLE1BQUlBLElBQUUsTUFBSSxNQUFJQSxJQUFFLE1BQUksT0FBS0EsSUFBRSxPQUFLLE9BQUtBLElBQUUsT0FBSyxNQUFJQSxJQUFFLE1BQUksT0FDbGZBLElBQUUsT0FBSyxPQUFLMmdCLEdBQUczZ0IsSUFBRSxJQUFJLEtBQUdBLEdBQUssS0FBR0EsR0FBRTtBQUFDSCxrQkFBRSxnQkFBYzJULEdBQUd1UCxHQUFHLEtBQUssTUFBS2xqQixDQUFDLEdBQUVHLENBQUM7QUFBRTtjQUFLO0FBQUMraUIsaUJBQUdsakIsQ0FBQztBQUFFO1lBQU0sS0FBSztBQUFFa2pCLGlCQUFHbGpCLENBQUM7QUFBRTtZQUFNO0FBQVEsb0JBQU0sTUFBTUQsRUFBRSxHQUFHLENBQUM7VUFBRTtRQUFDO0FBQUMsZUFBQTJpQixHQUFHMWlCLEdBQUUwQixHQUFFLENBQUMsR0FBUzFCLEVBQUUsaUJBQWVFLElBQUV5aUIsR0FBRyxLQUFLLE1BQUszaUIsQ0FBQyxJQUFFO01BQUk7QUFBQyxlQUFTOGUsR0FBRzllLEdBQUVFLEdBQUU7QUFBcUQsYUFBcERBLEtBQUcsQ0FBQ3FoQixJQUFHcmhCLEtBQUcsQ0FBQzJlLElBQUc3ZSxFQUFFLGtCQUFnQkUsR0FBRUYsRUFBRSxlQUFhLENBQUNFLEdBQU1GLElBQUVBLEVBQUUsaUJBQWdCLElBQUVFLEtBQUc7QUFBQyxjQUFJQyxJQUFFLEtBQUcyTCxHQUFHNUwsQ0FBQyxHQUFFYSxJQUFFLEtBQUdaO0FBQUVILFlBQUVHLENBQUMsSUFBRSxJQUFHRCxLQUFHLENBQUNhO1FBQUM7TUFBQztBQUM1VSxlQUFTMGhCLEdBQUd6aUIsR0FBRTtBQUFDLFlBQVFpaEIsSUFBRTtBQUFJLGdCQUFNLE1BQU1saEIsRUFBRSxHQUFHLENBQUM7QUFBTyxZQUFMNmlCLEdBQUcsR0FBSzVpQixNQUFJa0MsTUFBUWxDLEVBQUUsZUFBYW9DLElBQUc7QUFBQyxjQUFJbEMsSUFBRWtDLElBQU1qQyxJQUFFOGlCLEdBQUdqakIsR0FBRUUsQ0FBQztBQUFPb2hCLGVBQUd6QyxPQUFNM2UsSUFBRTJMLEdBQUc3TCxHQUFFRSxDQUFDLEdBQUVDLElBQUU4aUIsR0FBR2pqQixHQUFFRSxDQUFDO1FBQUU7QUFBTUEsY0FBRTJMLEdBQUc3TCxHQUFFLENBQUMsR0FBRUcsSUFBRThpQixHQUFHampCLEdBQUVFLENBQUM7QUFBcUcsWUFBL0ZGLEVBQUUsUUFBTixLQUFlRyxNQUFKLE1BQVE4Z0IsS0FBRyxJQUFHamhCLEVBQUUsWUFBVUEsRUFBRSxVQUFRLE9BQUc2VCxHQUFHN1QsRUFBRSxhQUFhLElBQUdFLElBQUU2TCxHQUFHL0wsQ0FBQyxHQUFNRSxNQUFKLE1BQVFDLElBQUU4aUIsR0FBR2pqQixHQUFFRSxDQUFDLEtBQVdDLE1BQUo7QUFBTSxnQkFBTUEsSUFBRWtoQixJQUFHeUIsR0FBRzlpQixHQUFFLENBQUMsR0FBRThlLEdBQUc5ZSxHQUFFRSxDQUFDLEdBQUV3aUIsR0FBRzFpQixHQUFFMEIsR0FBRSxDQUFDLEdBQUV2QjtBQUFFLGVBQUFILEVBQUUsZUFBYUEsRUFBRSxRQUFRLFdBQVVBLEVBQUUsZ0JBQWNFLEdBQUVnakIsR0FBR2xqQixDQUFDLEdBQUUwaUIsR0FBRzFpQixHQUFFMEIsR0FBRSxDQUFDLEdBQVM7TUFBSTtBQUM3WSxlQUFTeWhCLEtBQUk7QUFBQyxZQUFVbkIsT0FBUCxNQUFVO0FBQUMsY0FBSWhpQixJQUFFZ2lCO0FBQUdBLGVBQUcsTUFBS2hpQixFQUFFLFFBQVEsU0FBU0EsR0FBRTtBQUFDQSxjQUFFLGdCQUFjLEtBQUdBLEVBQUUsY0FBYTBpQixHQUFHMWlCLEdBQUUwQixHQUFFLENBQUM7VUFBQyxDQUFDO1FBQUM7QUFBQ2dWLFdBQUc7TUFBQztBQUFDLGVBQVMwTSxHQUFHcGpCLEdBQUVFLEdBQUU7QUFBQyxZQUFJQyxJQUFFOGdCO0FBQUVBLGFBQUc7QUFBRSxZQUFHO0FBQUMsaUJBQU9qaEIsRUFBRUUsQ0FBQztRQUFDLFVBQUE7QUFBUytnQixjQUFFOWdCLEdBQU04Z0IsTUFBSixNQUFRUSxHQUFHLEdBQUUvSyxHQUFHO1FBQUU7TUFBQztBQUFDLGVBQVMyTSxHQUFHcmpCLEdBQUVFLEdBQUU7QUFBQyxZQUFJQyxJQUFFOGdCO0FBQUVBLGFBQUcsSUFBR0EsS0FBRztBQUFFLFlBQUc7QUFBQyxpQkFBT2poQixFQUFFRSxDQUFDO1FBQUMsVUFBQTtBQUFTK2dCLGNBQUU5Z0IsR0FBTThnQixNQUFKLE1BQVFRLEdBQUcsR0FBRS9LLEdBQUc7UUFBRTtNQUFDO0FBQUMsZUFBUytHLEdBQUd6ZCxHQUFFRSxHQUFFO0FBQUNVLFdBQUV3Z0IsSUFBR0QsRUFBRSxHQUFFQSxNQUFJamhCLEdBQUVvaEIsTUFBSXBoQjtNQUFDO0FBQUMsZUFBUzhlLEtBQUk7QUFBQ21DLGFBQUdDLEdBQUcsU0FBUXpnQixHQUFFeWdCLEVBQUU7TUFBQztBQUMvVixlQUFTMEIsR0FBRzlpQixHQUFFRSxHQUFFO0FBQUNGLFVBQUUsZUFBYSxNQUFLQSxFQUFFLGdCQUFjO0FBQUUsWUFBSUcsSUFBRUgsRUFBRTtBQUFpRCxZQUE5QkcsTUFBTCxPQUFTSCxFQUFFLGdCQUFjLElBQUc0VCxHQUFHelQsQ0FBQyxJQUFhK2dCLE9BQVA7QUFBUyxlQUFJL2dCLElBQUUrZ0IsR0FBRSxRQUFjL2dCLE1BQVAsUUFBVTtBQUFDLGdCQUFJWSxJQUFFWjtBQUFFLG9CQUFPWSxFQUFFLEtBQUk7Y0FBQyxLQUFLO0FBQUVBLG9CQUFFQSxFQUFFLEtBQUssbUJBQXlCQSxLQUFQLFFBQXNCOFQsR0FBRztBQUFFO2NBQU0sS0FBSztBQUFFK0UsbUJBQUcsR0FBRWpaLEdBQUVjLEVBQUMsR0FBRWQsR0FBRWEsRUFBQyxHQUFFbVosR0FBRztBQUFFO2NBQU0sS0FBSztBQUFFYixtQkFBRy9ZLENBQUM7QUFBRTtjQUFNLEtBQUs7QUFBRTZZLG1CQUFHO0FBQUU7Y0FBTSxLQUFLO0FBQUdqWixtQkFBRWdCLEVBQUM7QUFBRTtjQUFNLEtBQUs7QUFBR2hCLG1CQUFFZ0IsRUFBQztBQUFFO2NBQU0sS0FBSztBQUFHd1YsbUJBQUdwVyxDQUFDO0FBQUU7Y0FBTSxLQUFLO2NBQUcsS0FBSztBQUFHaWUsbUJBQUc7WUFBQztBQUFDN2UsZ0JBQUVBLEVBQUU7VUFBTTtBQUFDK0IsYUFBRWxDLEdBQUVraEIsS0FBRW5JLEdBQUcvWSxFQUFFLFNBQVEsSUFBSSxHQUFFb0MsS0FBRStlLEtBQUdHLEtBQUdwaEIsR0FBRWlDLEtBQUUsR0FBRWtmLEtBQUcsTUFBS0UsS0FBRzFDLEtBQUc5RyxLQUFHO01BQUM7QUFDeGMsZUFBU2lMLEdBQUdoakIsR0FBRUUsR0FBRTtBQUFDLFdBQUU7QUFBQyxjQUFJQyxJQUFFK2dCO0FBQUUsY0FBRztBQUFvQixnQkFBbkJoSyxHQUFHLEdBQUUwRCxHQUFHLFVBQVFXLElBQU1SLElBQUc7QUFBQyx1QkFBUWhhLElBQUVjLEdBQUUsZUFBcUJkLE1BQVAsUUFBVTtBQUFDLG9CQUFJRCxJQUFFQyxFQUFFO0FBQWFELHNCQUFQLFNBQVdBLEVBQUUsVUFBUSxPQUFNQyxJQUFFQSxFQUFFO2NBQUk7QUFBQ2dhLG1CQUFHO1lBQUU7QUFBdUMsZ0JBQXRDRCxLQUFHLEdBQUUvWSxLQUFFRCxLQUFFRCxLQUFFLE1BQUttWixLQUFHLE9BQUdnRyxHQUFHLFVBQVEsTUFBZTdnQixNQUFQLFFBQWlCQSxFQUFFLFdBQVQsTUFBZ0I7QUFBQ2dDLG1CQUFFLEdBQUVrZixLQUFHbmhCLEdBQUVnaEIsS0FBRTtBQUFLO1lBQUs7QUFBQ2xoQixlQUFFO0FBQUMsa0JBQUltQixJQUFFbkIsR0FBRWtCLElBQUVmLEVBQUUsUUFBT2MsSUFBRWQsR0FBRWEsSUFBRWQ7QUFBb0Qsa0JBQWxEQSxJQUFFa0MsSUFBRW5CLEVBQUUsU0FBTyxNQUFLQSxFQUFFLGNBQVlBLEVBQUUsYUFBVyxNQUFlRCxNQUFQLFFBQXFCLE9BQU9BLEtBQWxCLFlBQWtDLE9BQU9BLEVBQUUsUUFBdEIsWUFBMkI7QUFBQyxvQkFBSSxJQUFFQTtBQUFFLG9CQUFRLEVBQUFDLEVBQUUsT0FBSyxJQUFHO0FBQUMsc0JBQUl0QyxJQUFFc0MsRUFBRTtBQUFVdEMsdUJBQUdzQyxFQUFFLGNBQVl0QyxFQUFFLGFBQVlzQyxFQUFFLGdCQUFjdEMsRUFBRSxlQUFjc0MsRUFBRSxRQUFNdEMsRUFBRSxVQUNwZnNDLEVBQUUsY0FBWSxNQUFLQSxFQUFFLGdCQUFjO2dCQUFLO0FBQUMsb0JBQUliLEtBQU91QixHQUFFLFVBQVEsT0FBZixHQUFrQnBDLElBQUUyQjtBQUFFLG1CQUFFO0FBQUMsc0JBQUlaO0FBQUUsc0JBQUdBLElBQU9mLEVBQUUsUUFBUCxJQUFXO0FBQUMsd0JBQUlPLElBQUVQLEVBQUU7QUFBYyx3QkFBVU8sTUFBUDtBQUFTUSwwQkFBU1IsRUFBRSxlQUFUO3lCQUE4QjtBQUFDLDBCQUFJRCxJQUFFTixFQUFFO0FBQWNlLDBCQUFXVCxFQUFFLGFBQVgsU0FBb0IsUUFBUUEsRUFBRSwrQkFBUCxPQUFrQyxPQUFHLENBQUFPO29CQUFPO2tCQUFDO0FBQUMsc0JBQUdFLEdBQUU7QUFBQyx3QkFBSUwsSUFBRVYsRUFBRTtBQUFZLHdCQUFVVSxNQUFQLE1BQVM7QUFBQywwQkFBSU4sSUFBRSxvQkFBSTtBQUFJQSx3QkFBRSxJQUFJLENBQUMsR0FBRUosRUFBRSxjQUFZSTtvQkFBQztBQUFNTSx3QkFBRSxJQUFJLENBQUM7QUFBRSx3QkFBUSxFQUFBVixFQUFFLE9BQUssSUFBRztBQUEyQywwQkFBMUNBLEVBQUUsU0FBTyxJQUFHMEIsRUFBRSxTQUFPLE9BQU1BLEVBQUUsU0FBTyxPQUFhQSxFQUFFLFFBQU47QUFBVSw0QkFBVUEsRUFBRSxjQUFUO0FBQW1CQSw0QkFBRSxNQUFJOzZCQUFPO0FBQUMsOEJBQUl2QixLQUFFaVksR0FBRyxJQUFHLENBQUM7QUFBRWpZLDBCQUFBQSxHQUFFLE1BQUksR0FBRWtZLEdBQUczVyxHQUFFdkIsRUFBQzt3QkFBQztBQUFDdUIsd0JBQUUsU0FBTztBQUFFLDRCQUFNakI7b0JBQUM7QUFBQ2dCLHdCQUM1ZixRQUFPQyxJQUFFZjtBQUFFLHdCQUFJVixLQUFFMkIsRUFBRTtBQUErRyx3QkFBOUYzQixPQUFQLFFBQVVBLEtBQUUyQixFQUFFLFlBQVUsSUFBSWllLE1BQUdwZSxJQUFFLG9CQUFJLE9BQUl4QixHQUFFLElBQUksR0FBRXdCLENBQUMsTUFBSUEsSUFBRXhCLEdBQUUsSUFBSSxDQUFDLEdBQVd3QixNQUFULFdBQWFBLElBQUUsb0JBQUksT0FBSXhCLEdBQUUsSUFBSSxHQUFFd0IsQ0FBQyxLQUFPLENBQUNBLEVBQUUsSUFBSUMsQ0FBQyxHQUFFO0FBQUNELHdCQUFFLElBQUlDLENBQUM7QUFBRSwwQkFBSXJCLEtBQUUwakIsR0FBRyxLQUFLLE1BQUtuaUIsR0FBRSxHQUFFRixDQUFDO0FBQUUsd0JBQUUsS0FBS3JCLElBQUVBLEVBQUM7b0JBQUM7QUFBQ0wsc0JBQUUsU0FBTyxNQUFLQSxFQUFFLFFBQU1XO0FBQUUsMEJBQU1GO2tCQUFDO0FBQUNULHNCQUFFQSxFQUFFO2dCQUFNLFNBQWNBLE1BQVA7QUFBVXlCLG9CQUFFLE9BQU9nRSxHQUFHL0QsRUFBRSxJQUFJLEtBQUcsdUJBQXFCOztxSEFBdUw7Y0FBQztBQUFLa0IscUJBQUosTUFBUUEsS0FBRSxJQUFHbkIsSUFBRWtlLEdBQUdsZSxHQUFFQyxDQUFDLEdBQUUxQixJQUNwZjJCO0FBQUUsaUJBQUU7QUFBQyx3QkFBTzNCLEVBQUUsS0FBSTtrQkFBQyxLQUFLO0FBQUU0Qix3QkFBRUgsR0FBRXpCLEVBQUUsU0FBTyxNQUFLVyxLQUFHLENBQUNBLEdBQUVYLEVBQUUsU0FBT1c7QUFBRSx3QkFBSVcsSUFBRXdlLEdBQUc5ZixHQUFFNEIsR0FBRWpCLENBQUM7QUFBRTJYLHVCQUFHdFksR0FBRXNCLENBQUM7QUFBRSwwQkFBTWI7a0JBQUUsS0FBSztBQUFFbUIsd0JBQUVIO0FBQUUsd0JBQUlLLElBQUU5QixFQUFFLE1BQUtxQyxJQUFFckMsRUFBRTtBQUFVLHdCQUFRLEVBQUFBLEVBQUUsUUFBTSxRQUFtQixPQUFPOEIsRUFBRSw0QkFBdEIsY0FBdURPLE1BQVAsUUFBdUIsT0FBT0EsRUFBRSxxQkFBdEIsZUFBaUQ2ZCxPQUFQLFFBQVcsQ0FBQ0EsR0FBRyxJQUFJN2QsQ0FBQyxLQUFJO0FBQUNyQyx3QkFBRSxTQUFPLE1BQUtXLEtBQUcsQ0FBQ0EsR0FBRVgsRUFBRSxTQUFPVztBQUFFLDBCQUFJb0IsSUFBRWtlLEdBQUdqZ0IsR0FBRTRCLEdBQUVqQixDQUFDO0FBQUUyWCx5QkFBR3RZLEdBQUUrQixDQUFDO0FBQUUsNEJBQU10QjtvQkFBQztnQkFBQztBQUFDVCxvQkFBRUEsRUFBRTtjQUFNLFNBQWNBLE1BQVA7WUFBUztBQUFDZ2tCLGVBQUdwakIsQ0FBQztVQUFDLFNBQU9xakIsR0FBRztBQUFDdGpCLGdCQUFFc2pCLEdBQUd0QyxPQUFJL2dCLEtBQVVBLE1BQVAsU0FBVytnQixLQUFFL2dCLElBQUVBLEVBQUU7QUFBUTtVQUFRO0FBQUM7UUFBSyxTQUFPO01BQUU7QUFDN2IsZUFBUzBpQixLQUFJO0FBQUMsWUFBSTdpQixJQUFFK2dCLEdBQUc7QUFBUSxlQUFBQSxHQUFHLFVBQVF4RixJQUFpQnZiLE1BQVAsT0FBU3ViLEtBQUd2YjtNQUFDO0FBQUMsZUFBU2lqQixHQUFHampCLEdBQUVFLEdBQUU7QUFBQyxZQUFJQyxJQUFFOGdCO0FBQUVBLGFBQUc7QUFBRyxZQUFJbGdCLElBQUU4aEIsR0FBRztBQUFFM2dCLGVBQUlsQyxLQUFHb0MsT0FBSWxDLEtBQUc0aUIsR0FBRzlpQixHQUFFRSxDQUFDO0FBQUU7QUFBRyxjQUFHO0FBQUN1akIsZUFBRztBQUFFO1VBQUssU0FBTzNpQixHQUFFO0FBQUNraUIsZUFBR2hqQixHQUFFYyxDQUFDO1VBQUM7ZUFBTztBQUF5QixZQUF0Qm9XLEdBQUcsR0FBRStKLElBQUU5Z0IsR0FBRTRnQixHQUFHLFVBQVFoZ0IsR0FBWW1nQixPQUFQO0FBQVMsZ0JBQU0sTUFBTW5oQixFQUFFLEdBQUcsQ0FBQztBQUFFLGVBQUFtQyxLQUFFLE1BQUtFLEtBQUUsR0FBU0Q7TUFBQztBQUFDLGVBQVNzaEIsS0FBSTtBQUFDLGVBQVl2QyxPQUFQO0FBQVV3QyxhQUFHeEMsRUFBQztNQUFDO0FBQUMsZUFBUzZCLEtBQUk7QUFBQyxlQUFZN0IsT0FBUCxRQUFVLENBQUMzTCxHQUFHO0FBQUdtTyxhQUFHeEMsRUFBQztNQUFDO0FBQUMsZUFBU3dDLEdBQUcxakIsR0FBRTtBQUFDLFlBQUlFLElBQUV5akIsR0FBRzNqQixFQUFFLFdBQVVBLEdBQUVtaEIsRUFBRTtBQUFFbmhCLFVBQUUsZ0JBQWNBLEVBQUUsY0FBb0JFLE1BQVAsT0FBU3FqQixHQUFHdmpCLENBQUMsSUFBRWtoQixLQUFFaGhCLEdBQUU4Z0IsR0FBRyxVQUFRO01BQUk7QUFDaGIsZUFBU3VDLEdBQUd2akIsR0FBRTtBQUFDLFlBQUlFLElBQUVGO0FBQUUsV0FBRTtBQUFDLGNBQUlHLElBQUVELEVBQUU7QUFBcUIsY0FBWEYsSUFBRUUsRUFBRSxRQUFlQSxFQUFFLFFBQU0sTUFDSztBQUFTLGdCQUFSQyxJQUFFOGUsR0FBRy9lLENBQUMsR0FBWUMsTUFBUCxNQUFTO0FBQUNBLGdCQUFFLFNBQU8sTUFBSytnQixLQUFFL2dCO0FBQUU7WUFBTTtBQUFRSCxrQkFBUCxTQUFXQSxFQUFFLGNBQVlBLEVBQUUsYUFBVyxNQUFLQSxFQUFFLFNBQU87VUFBSyxPQUR2RztBQUFjLGdCQUFiRyxJQUFFeWUsR0FBR3plLEdBQUVELEdBQUVpaEIsRUFBRSxHQUFZaGhCLE1BQVAsTUFBUztBQUFDK2dCLG1CQUFFL2dCO0FBQUU7WUFBTTtBQUFLLGdCQUFKQSxJQUFFRCxHQUFVQyxFQUFFLFFBQVAsTUFBaUJBLEVBQUUsUUFBUCxNQUFtQkEsRUFBRSxrQkFBVCxRQUE2QmdoQixLQUFHLGNBQWtCLEVBQUFoaEIsRUFBRSxPQUFLLElBQUc7QUFBQyx1QkFBUVksSUFBRSxHQUFFRCxJQUFFWCxFQUFFLE9BQWFXLE1BQVA7QUFBVUMscUJBQUdELEVBQUUsUUFBTUEsRUFBRSxZQUFXQSxJQUFFQSxFQUFFO0FBQVFYLGdCQUFFLGFBQVdZO1lBQUM7QUFBUWYsa0JBQVAsUUFBZSxFQUFBQSxFQUFFLFFBQU0sVUFBZUEsRUFBRSxnQkFBVCxTQUF1QkEsRUFBRSxjQUFZRSxFQUFFLGNBQW9CQSxFQUFFLGVBQVQsU0FBNkJGLEVBQUUsZUFBVCxTQUFzQkEsRUFBRSxXQUFXLGFBQVdFLEVBQUUsY0FBYUYsRUFBRSxhQUFXRSxFQUFFLGFBQVksSUFBRUEsRUFBRSxVQUN2ZUYsRUFBRSxlQUQ2ZSxPQUNsZUEsRUFBRSxXQUFXLGFBQVdFLElBQUVGLEVBQUUsY0FBWUUsR0FBRUYsRUFBRSxhQUFXRTtVQUFHO0FBQTBILGNBQVpBLElBQUVBLEVBQUUsU0FBa0JBLE1BQVAsTUFBUztBQUFDZ2hCLGlCQUFFaGhCO0FBQUU7VUFBTTtBQUFDZ2hCLGVBQUVoaEIsSUFBRUY7UUFBQyxTQUFjRSxNQUFQO0FBQWNpQyxlQUFKLE1BQVFBLEtBQUU7TUFBRTtBQUFDLGVBQVMrZ0IsR0FBR2xqQixHQUFFO0FBQUMsWUFBSUUsSUFBRW9XLEdBQUc7QUFBRSxlQUFBRSxHQUFHLElBQUdvTixHQUFHLEtBQUssTUFBSzVqQixHQUFFRSxDQUFDLENBQUMsR0FBUztNQUFJO0FBQzFULGVBQVMwakIsR0FBRzVqQixHQUFFRSxHQUFFO0FBQUM7QUFBRzBpQixhQUFHO2VBQWVoQixPQUFQO0FBQVcsWUFBUVgsSUFBRTtBQUFJLGdCQUFNLE1BQU1saEIsRUFBRSxHQUFHLENBQUM7QUFBRSxZQUFJSSxJQUFFSCxFQUFFO0FBQWEsWUFBVUcsTUFBUDtBQUFTLGlCQUFPO0FBQTJDLFlBQXRDSCxFQUFFLGVBQWEsTUFBS0EsRUFBRSxnQkFBYyxHQUFLRyxNQUFJSCxFQUFFO0FBQVEsZ0JBQU0sTUFBTUQsRUFBRSxHQUFHLENBQUM7QUFBRUMsVUFBRSxlQUFhO0FBQUssWUFBSWUsSUFBRVosRUFBRSxRQUFNQSxFQUFFLFlBQVdXLElBQUVDLEdBQUVJLElBQUVuQixFQUFFLGVBQWEsQ0FBQ2M7QUFBRWQsVUFBRSxlQUFhYyxHQUFFZCxFQUFFLGlCQUFlLEdBQUVBLEVBQUUsY0FBWSxHQUFFQSxFQUFFLGdCQUFjYyxHQUFFZCxFQUFFLG9CQUFrQmMsR0FBRWQsRUFBRSxrQkFBZ0JjLEdBQUVBLElBQUVkLEVBQUU7QUFBYyxpQkFBUWtCLElBQUVsQixFQUFFLFlBQVdpQixJQUFFakIsRUFBRSxpQkFBZ0IsSUFBRW1CLEtBQUc7QUFBQyxjQUFJSCxJQUFFLEtBQUc4SyxHQUFHM0ssQ0FBQyxHQUFFLElBQUUsS0FBR0g7QUFBRUYsWUFBRUUsQ0FBQyxJQUFFLEdBQUVFLEVBQUVGLENBQUMsSUFBRSxJQUFHQyxFQUFFRCxDQUFDLElBQUUsSUFBR0csS0FBRyxDQUFDO1FBQUM7QUFDcFYsWUFBNUo2Z0IsT0FEaWYsUUFDeGUsRUFBQWpoQixJQUFFLE9BQUtpaEIsR0FBRyxJQUFJaGlCLENBQUMsS0FBR2dpQixHQUFHLE9BQU9oaUIsQ0FBQyxHQUFFQSxNQUFJa0MsT0FBSWdmLEtBQUVoZixLQUFFLE1BQUtFLEtBQUUsSUFBRyxJQUFFakMsRUFBRSxRQUFhQSxFQUFFLGVBQVQsUUFBcUJBLEVBQUUsV0FBVyxhQUFXQSxHQUFFWSxJQUFFWixFQUFFLGVBQWFZLElBQUVaLElBQUVZLElBQUVaLEVBQUUsYUFBc0JZLE1BQVAsTUFBUztBQUF3QyxjQUF2Q0QsSUFBRW1nQixHQUFFQSxLQUFHLElBQUdELEdBQUcsVUFBUSxNQUFLek4sS0FBRzlHLElBQUd2TCxJQUFFOFEsR0FBRyxHQUFLQyxHQUFHL1EsQ0FBQyxHQUFFO0FBQUMsZ0JBQUcsb0JBQW1CQTtBQUFFRCxrQkFBRSxFQUFDLE9BQU1DLEVBQUUsZ0JBQWUsS0FBSUEsRUFBRSxhQUFZOztBQUFPbEI7QUFBRSxvQkFBR2lCLEtBQUdBLElBQUVDLEVBQUUsa0JBQWdCRCxFQUFFLGVBQWEsU0FBUSxJQUFFQSxFQUFFLGdCQUFjQSxFQUFFLGFBQWEsTUFBUSxFQUFFLGVBQU4sR0FBaUI7QUFBQ0Esc0JBQUUsRUFBRSxZQUFXRSxJQUFFLEVBQUUsY0FBYUgsSUFBRSxFQUFFLFdBQVUsSUFBRSxFQUFFO0FBQVksc0JBQUc7QUFBQ0Msc0JBQUUsVUFBU0QsRUFBRTtrQkFBUSxRQUFVO0FBQUNDLHdCQUFFO0FBQ25mLDBCQUFNakI7a0JBQUM7QUFBQyxzQkFBSXJCLElBQUUsR0FBRXlCLElBQUUsSUFBR2IsSUFBRSxJQUFHZSxJQUFFLEdBQUVSLElBQUUsR0FBRUQsSUFBRXFCLEdBQUVqQixJQUFFO0FBQUtDO0FBQUUsK0JBQU87QUFBQywrQkFBUVAsR0FBS0UsTUFBSW9CLEtBQU9FLE1BQUosS0FBV3RCLEVBQUUsYUFBTixNQUFpQk8sSUFBRXpCLElBQUV3QyxJQUFHdEIsTUFBSW1CLEtBQU8sTUFBSixLQUFXbkIsRUFBRSxhQUFOLE1BQWlCTixJQUFFWixJQUFFLElBQU9rQixFQUFFLGFBQU4sTUFBaUJsQixLQUFHa0IsRUFBRSxVQUFVLFVBQW1CRixJQUFFRSxFQUFFLGdCQUFaO0FBQThCSSw0QkFBRUosR0FBRUEsSUFBRUY7QUFBRSxpQ0FBTztBQUFDLDRCQUFHRSxNQUFJcUI7QUFBRSxnQ0FBTWhCO0FBQThDLDRCQUE1Q0QsTUFBSWdCLEtBQUcsRUFBRVgsTUFBSWEsTUFBSWYsSUFBRXpCLElBQUdzQixNQUFJZSxLQUFHLEVBQUVsQixNQUFJLE1BQUlQLElBQUVaLEtBQWNnQixJQUFFRSxFQUFFLGlCQUFaO0FBQXlCO0FBQU1BLDRCQUFFSSxHQUFFQSxJQUFFSixFQUFFO3NCQUFVO0FBQUNBLDBCQUFFRjtvQkFBQztBQUFDc0Isc0JBQU9iLE1BQUwsTUFBYWIsTUFBTCxLQUFPLE9BQUssRUFBQyxPQUFNYSxHQUFFLEtBQUliLEVBQUM7Z0JBQUM7QUFBTTBCLHNCQUFFO0FBQUtBLGdCQUFFQSxLQUFHLEVBQUMsT0FBTSxHQUFFLEtBQUksRUFBQztVQUFDO0FBQU1BLGdCQUFFO0FBQUt1UyxlQUFHLEVBQUMsYUFBWXRTLEdBQUUsZ0JBQWVELEVBQUMsR0FBRXdMLEtBQUcsT0FBRzZWLEtBQUcsTUFBS0MsS0FBRyxPQUFHYixJQUFFM2dCO0FBQUU7QUFBRyxnQkFBRztBQUFDOGlCLGlCQUFHO1lBQUMsU0FBT0wsR0FBRztBQUFDLGtCQUNwZ0I5QixNQUR1Z0I7QUFDcmdCLHNCQUFNLE1BQU0zaEIsRUFBRSxHQUFHLENBQUM7QUFBRTZmLGlCQUFHOEIsR0FBRThCLENBQUUsR0FBRTlCLElBQUVBLEVBQUU7WUFBVTtpQkFBY0EsTUFBUDtBQUFVWSxlQUFHLE1BQUtaLElBQUUzZ0I7QUFBRTtBQUFHLGdCQUFHO0FBQUMsbUJBQUlHLElBQUVsQixHQUFTMGhCLE1BQVAsUUFBVTtBQUFDLG9CQUFJaGlCLEtBQUVnaUIsRUFBRTtBQUErQixvQkFBekJoaUIsS0FBRSxNQUFJK0csR0FBR2liLEVBQUUsV0FBVSxFQUFFLEdBQUtoaUIsS0FBRSxLQUFJO0FBQUMsc0JBQUlGLEtBQUVraUIsRUFBRTtBQUFVLHNCQUFVbGlCLE9BQVAsTUFBUztBQUFDLHdCQUFJSSxLQUFFSixHQUFFO0FBQVdJLG9CQUFBQSxPQUFQLFNBQXdCLE9BQU9BLE1BQXBCLGFBQXNCQSxHQUFFLElBQUksSUFBRUEsR0FBRSxVQUFRO2tCQUFLO2dCQUFDO0FBQUMsd0JBQU9GLEtBQUUsTUFBSztrQkFBQyxLQUFLO0FBQUU0Z0IsdUJBQUdvQixDQUFDLEdBQUVBLEVBQUUsU0FBTztBQUFHO2tCQUFNLEtBQUs7QUFBRXBCLHVCQUFHb0IsQ0FBQyxHQUFFQSxFQUFFLFNBQU8sSUFBR2pCLEdBQUdpQixFQUFFLFdBQVVBLENBQUM7QUFBRTtrQkFBTSxLQUFLO0FBQUtBLHNCQUFFLFNBQU87QUFBTTtrQkFBTSxLQUFLO0FBQUtBLHNCQUFFLFNBQU8sT0FBTWpCLEdBQUdpQixFQUFFLFdBQVVBLENBQUM7QUFBRTtrQkFBTSxLQUFLO0FBQUVqQix1QkFBR2lCLEVBQUUsV0FBVUEsQ0FBQztBQUFFO2tCQUFNLEtBQUs7QUFBRXpnQix3QkFBRXlnQixHQUFFdkIsR0FBR2pmLEdBQUVELENBQUM7QUFBRSx3QkFBSUosSUFBRUksRUFBRTtBQUFVbWYsdUJBQUduZixDQUFDLEdBQ2pmSixNQURtZixRQUNoZnVmLEdBQUd2ZixDQUFDO2dCQUFDO0FBQUM2Z0Isb0JBQUVBLEVBQUU7Y0FBVTtZQUFDLFNBQU84QixHQUFHO0FBQUMsa0JBQVU5QixNQUFQO0FBQVMsc0JBQU0sTUFBTTNoQixFQUFFLEdBQUcsQ0FBQztBQUFFNmYsaUJBQUc4QixHQUFFOEIsQ0FBRSxHQUFFOUIsSUFBRUEsRUFBRTtZQUFVO2lCQUFjQSxNQUFQO0FBQXlELGNBQS9DOWhCLEtBQUU0VCxJQUFHaFUsS0FBRXdTLEdBQUcsR0FBRXRTLEtBQUVFLEdBQUUsYUFBWXNCLElBQUV0QixHQUFFLGdCQUFrQkosT0FBSUUsTUFBR0EsTUFBR0EsR0FBRSxpQkFBZXFTLEdBQUdyUyxHQUFFLGNBQWMsaUJBQWdCQSxFQUFDLEdBQUU7QUFDOEksaUJBRHRJd0IsTUFBUCxRQUFVK1EsR0FBR3ZTLEVBQUMsTUFBSUYsS0FBRTBCLEVBQUUsT0FBTXRCLEtBQUVzQixFQUFFLEtBQWF0QixPQUFULFdBQWFBLEtBQUVKLEtBQUcsb0JBQW1CRSxNQUFHQSxHQUFFLGlCQUFlRixJQUFFRSxHQUFFLGVBQWEsS0FBSyxJQUFJRSxJQUFFRixHQUFFLE1BQU0sTUFBTSxNQUFJRSxNQUFHSixLQUFFRSxHQUFFLGlCQUFlLGFBQVdGLEdBQUUsZUFBYSxRQUFPSSxHQUFFLGlCQUFlQSxLQUFFQSxHQUFFLGFBQWEsR0FBRXFCLElBQUV2QixHQUFFLFlBQVksUUFBT21CLElBQUUsS0FBSyxJQUFJSyxFQUFFLE9BQU1ELENBQUMsR0FBRUMsSUFDbGZBLEVBQUUsUUFEa2YsU0FDOWVMLElBQUUsS0FBSyxJQUFJSyxFQUFFLEtBQUlELENBQUMsR0FBRSxDQUFDckIsR0FBRSxVQUFRaUIsSUFBRUssTUFBSUQsSUFBRUMsR0FBRUEsSUFBRUwsR0FBRUEsSUFBRUksSUFBR0EsSUFBRTZRLEdBQUdwUyxJQUFFbUIsQ0FBQyxHQUFFTSxJQUFFMlEsR0FBR3BTLElBQUV3QixDQUFDLEdBQUVELEtBQUdFLE1BQVF2QixHQUFFLGVBQU4sS0FBa0JBLEdBQUUsZUFBYXFCLEVBQUUsUUFBTXJCLEdBQUUsaUJBQWVxQixFQUFFLFVBQVFyQixHQUFFLGNBQVl1QixFQUFFLFFBQU12QixHQUFFLGdCQUFjdUIsRUFBRSxZQUFVM0IsS0FBRUEsR0FBRSxZQUFZLEdBQUVBLEdBQUUsU0FBU3lCLEVBQUUsTUFBS0EsRUFBRSxNQUFNLEdBQUVyQixHQUFFLGdCQUFnQixHQUFFaUIsSUFBRUssS0FBR3RCLEdBQUUsU0FBU0osRUFBQyxHQUFFSSxHQUFFLE9BQU91QixFQUFFLE1BQUtBLEVBQUUsTUFBTSxNQUFJM0IsR0FBRSxPQUFPMkIsRUFBRSxNQUFLQSxFQUFFLE1BQU0sR0FBRXZCLEdBQUUsU0FBU0osRUFBQyxRQUFPQSxLQUFFLENBQUMsR0FBTUksS0FBRUYsSUFBRUUsS0FBRUEsR0FBRTtBQUFnQkEsY0FBQUEsR0FBRSxhQUFOLEtBQWdCSixHQUFFLEtBQUssRUFBQyxTQUFRSSxJQUFFLE1BQUtBLEdBQUUsWUFBVyxLQUFJQSxHQUFFLFVBQVMsQ0FBQztBQUF5QyxpQkFBMUIsT0FBT0YsR0FBRSxTQUF0QixjQUE2QkEsR0FBRSxNQUFNLEdBQU1BLEtBQ3JmLEdBQUVBLEtBQUVGLEdBQUUsUUFBT0U7QUFBSUUsY0FBQUEsS0FBRUosR0FBRUUsRUFBQyxHQUFFRSxHQUFFLFFBQVEsYUFBV0EsR0FBRSxNQUFLQSxHQUFFLFFBQVEsWUFBVUEsR0FBRTtVQUFHO0FBQUM2TSxlQUFHLENBQUMsQ0FBQzhHLElBQUdDLEtBQUdELEtBQUcsTUFBS3ZULEVBQUUsVUFBUUcsR0FBRXVoQixJQUFFM2dCO0FBQUU7QUFBRyxnQkFBRztBQUFDLG1CQUFJckIsS0FBRU0sR0FBUzBoQixNQUFQLFFBQVU7QUFBQyxvQkFBSXJnQixJQUFFcWdCLEVBQUU7QUFBZ0Msb0JBQTFCcmdCLElBQUUsTUFBSXllLEdBQUdwZ0IsSUFBRWdpQixFQUFFLFdBQVVBLENBQUMsR0FBS3JnQixJQUFFLEtBQUk7QUFBQzdCLGtCQUFBQSxLQUFFO0FBQU8sc0JBQUlvQyxJQUFFOGYsRUFBRTtBQUFJLHNCQUFVOWYsTUFBUCxNQUFTO0FBQUMsd0JBQUlOLElBQUVvZ0IsRUFBRTtBQUFVLDRCQUFPQSxFQUFFLEtBQUk7c0JBQUMsS0FBSztBQUFFbGlCLHdCQUFBQSxLQUFFOEI7QUFBRTtzQkFBTTtBQUFROUIsd0JBQUFBLEtBQUU4QjtvQkFBQztBQUFjLDJCQUFPTSxLQUFwQixhQUFzQkEsRUFBRXBDLEVBQUMsSUFBRW9DLEVBQUUsVUFBUXBDO2tCQUFDO2dCQUFDO0FBQUNraUIsb0JBQUVBLEVBQUU7Y0FBVTtZQUFDLFNBQU84QixHQUFHO0FBQUMsa0JBQVU5QixNQUFQO0FBQVMsc0JBQU0sTUFBTTNoQixFQUFFLEdBQUcsQ0FBQztBQUFFNmYsaUJBQUc4QixHQUFFOEIsQ0FBRSxHQUFFOUIsSUFBRUEsRUFBRTtZQUFVO2lCQUFjQSxNQUFQO0FBQVVBLGNBQUUsTUFBS3pMLEdBQUcsR0FBRWdMLElBQUVuZ0I7UUFBQztBQUFNZCxZQUFFLFVBQVFHO0FBQUUsWUFBR3doQjtBQUFHQSxlQUFHLE9BQUdDLEtBQUc1aEIsR0FBRTZoQixLQUFHM2hCOztBQUFPLGVBQUl3aEIsSUFBRTNnQixHQUFTMmdCLE1BQVA7QUFBVXhoQixnQkFDcGZ3aEIsRUFBRSxZQUFXQSxFQUFFLGFBQVcsTUFBS0EsRUFBRSxRQUFNLE1BQUlyZ0IsSUFBRXFnQixHQUFFcmdCLEVBQUUsVUFBUSxNQUFLQSxFQUFFLFlBQVUsT0FBTXFnQixJQUFFeGhCO0FBQXFGLFlBQW5GYSxJQUFFZixFQUFFLGNBQWlCZSxNQUFKLE1BQVEwZSxLQUFHLE9BQVUxZSxNQUFKLElBQU1mLE1BQUlraUIsS0FBR0QsUUFBTUEsS0FBRyxHQUFFQyxLQUFHbGlCLEtBQUdpaUIsS0FBRyxHQUFFOWhCLElBQUVBLEVBQUUsV0FBYWdWLE1BQWlCLE9BQU9BLEdBQUcscUJBQXZCO0FBQXlDLGNBQUc7QUFBQ0EsZUFBRyxrQkFBa0JELElBQUcvVSxHQUFFLFNBQWFBLEVBQUUsUUFBUSxRQUFNLFFBQXRCLEVBQXlCO1VBQUMsUUFBVTtVQUFDO0FBQVcsWUFBVnVpQixHQUFHMWlCLEdBQUUwQixHQUFFLENBQUMsR0FBSzRkO0FBQUcsZ0JBQU1BLEtBQUcsT0FBR3RmLElBQUV1ZixJQUFHQSxLQUFHLE1BQUt2ZjtBQUFFLGVBQVFpaEIsSUFBRSxLQUFldkssR0FBRyxHQUFTO01BQUk7QUFDdFgsZUFBU21OLEtBQUk7QUFBQyxlQUFZbkMsTUFBUCxRQUFVO0FBQUMsY0FBSTFoQixJQUFFMGhCLEVBQUU7QUFBVWEsZ0JBQVdELE9BQVAsU0FBaUJaLEVBQUUsUUFBTSxJQUFHeFksR0FBR3dZLEdBQUVZLEVBQUUsTUFBSUMsS0FBRyxRQUFTYixFQUFFLFFBQVAsTUFBWWIsR0FBRzdnQixHQUFFMGhCLENBQUMsS0FBR3hZLEdBQUd3WSxHQUFFWSxFQUFFLE1BQUlDLEtBQUc7QUFBSyxjQUFJcmlCLElBQUV3aEIsRUFBRTtBQUFXeGhCLGNBQUUsT0FBTTJmLEdBQUc3ZixHQUFFMGhCLENBQUMsR0FBTyxFQUFBeGhCLElBQUUsUUFBTXloQixPQUFLQSxLQUFHLE1BQUdsTCxHQUFHLElBQUcsV0FBVTtBQUFDLG1CQUFBbU0sR0FBRyxHQUFTO1VBQUksQ0FBQyxJQUFHbEIsSUFBRUEsRUFBRTtRQUFVO01BQUM7QUFBQyxlQUFTa0IsS0FBSTtBQUFDLFlBQVFmLE9BQUwsSUFBUTtBQUFDLGNBQUk3aEIsSUFBRSxLQUFHNmhCLEtBQUcsS0FBR0E7QUFBRyxpQkFBQUEsS0FBRyxJQUFVckwsR0FBR3hXLEdBQUU4akIsRUFBRTtRQUFDO0FBQUMsZUFBTTtNQUFFO0FBQUMsZUFBUzlELEdBQUdoZ0IsR0FBRUUsR0FBRTtBQUFDNGhCLFdBQUcsS0FBSzVoQixHQUFFRixDQUFDLEdBQUUyaEIsT0FBS0EsS0FBRyxNQUFHbEwsR0FBRyxJQUFHLFdBQVU7QUFBQyxpQkFBQW1NLEdBQUcsR0FBUztRQUFJLENBQUM7TUFBRTtBQUFDLGVBQVM3QyxHQUFHL2YsR0FBRUUsR0FBRTtBQUFDNmhCLFdBQUcsS0FBSzdoQixHQUFFRixDQUFDLEdBQUUyaEIsT0FBS0EsS0FBRyxNQUFHbEwsR0FBRyxJQUFHLFdBQVU7QUFBQyxpQkFBQW1NLEdBQUcsR0FBUztRQUFJLENBQUM7TUFBRTtBQUNoZSxlQUFTa0IsS0FBSTtBQUFDLFlBQVVsQyxPQUFQO0FBQVUsaUJBQU07QUFBRyxZQUFJNWhCLElBQUU0aEI7QUFBVyxZQUFSQSxLQUFHLE1BQWFYLElBQUU7QUFBSSxnQkFBTSxNQUFNbGhCLEVBQUUsR0FBRyxDQUFDO0FBQUUsWUFBSUcsSUFBRStnQjtBQUFFQSxhQUFHO0FBQUcsWUFBSTlnQixJQUFFNGhCO0FBQUdBLGFBQUcsQ0FBQztBQUFFLGlCQUFRaGhCLElBQUUsR0FBRUEsSUFBRVosRUFBRSxRQUFPWSxLQUFHLEdBQUU7QUFBQyxjQUFJRCxJQUFFWCxFQUFFWSxDQUFDLEdBQUVJLElBQUVoQixFQUFFWSxJQUFFLENBQUMsR0FBRUcsSUFBRUosRUFBRTtBQUF5QixjQUFqQkEsRUFBRSxVQUFRLFFBQXVCLE9BQU9JLEtBQXBCO0FBQXNCLGdCQUFHO0FBQUNBLGdCQUFFO1lBQUMsU0FBT0YsR0FBRTtBQUFDLGtCQUFVRyxNQUFQO0FBQVMsc0JBQU0sTUFBTXBCLEVBQUUsR0FBRyxDQUFDO0FBQUU2ZixpQkFBR3plLEdBQUVILENBQUM7WUFBQztRQUFDO0FBQVksYUFBWGIsSUFBRTJoQixJQUFHQSxLQUFHLENBQUMsR0FBTS9nQixJQUFFLEdBQUVBLElBQUVaLEVBQUUsUUFBT1ksS0FBRyxHQUFFO0FBQUNELGNBQUVYLEVBQUVZLENBQUMsR0FBRUksSUFBRWhCLEVBQUVZLElBQUUsQ0FBQztBQUFFLGNBQUc7QUFBQyxnQkFBSUUsSUFBRUgsRUFBRTtBQUFPQSxjQUFFLFVBQVFHLEVBQUU7VUFBQyxTQUFPRCxHQUFFO0FBQUMsZ0JBQVVHLE1BQVA7QUFBUyxvQkFBTSxNQUFNcEIsRUFBRSxHQUFHLENBQUM7QUFBRTZmLGVBQUd6ZSxHQUFFSCxDQUFDO1VBQUM7UUFBQztBQUFDLGFBQUlDLElBQUVqQixFQUFFLFFBQVEsYUFBbUJpQixNQUFQO0FBQVVqQixjQUFFaUIsRUFBRSxZQUFXQSxFQUFFLGFBQVcsTUFBS0EsRUFBRSxRQUFNLE1BQUlBLEVBQUUsVUFDamYsTUFBS0EsRUFBRSxZQUFVLE9BQU1BLElBQUVqQjtBQUFFLGVBQUFpaEIsSUFBRS9nQixHQUFFd1csR0FBRyxHQUFRO01BQUU7QUFBQyxlQUFTcU4sR0FBRy9qQixHQUFFRSxHQUFFQyxHQUFFO0FBQUNELFlBQUVnZixHQUFHL2UsR0FBRUQsQ0FBQyxHQUFFQSxJQUFFbWYsR0FBR3JmLEdBQUVFLEdBQUUsQ0FBQyxHQUFFMFgsR0FBRzVYLEdBQUVFLENBQUMsR0FBRUEsSUFBRWtZLEdBQUcsR0FBRXBZLElBQUV3aUIsR0FBR3hpQixHQUFFLENBQUMsR0FBU0EsTUFBUCxTQUFXbU0sR0FBR25NLEdBQUUsR0FBRUUsQ0FBQyxHQUFFd2lCLEdBQUcxaUIsR0FBRUUsQ0FBQztNQUFFO0FBQzVJLGVBQVMwZixHQUFHNWYsR0FBRUUsR0FBRTtBQUFDLFlBQU9GLEVBQUUsUUFBTjtBQUFVK2pCLGFBQUcvakIsR0FBRUEsR0FBRUUsQ0FBQzs7QUFBTyxtQkFBUUMsSUFBRUgsRUFBRSxRQUFjRyxNQUFQLFFBQVU7QUFBQyxnQkFBT0EsRUFBRSxRQUFOLEdBQVU7QUFBQzRqQixpQkFBRzVqQixHQUFFSCxHQUFFRSxDQUFDO0FBQUU7WUFBSyxXQUFhQyxFQUFFLFFBQU4sR0FBVTtBQUFDLGtCQUFJWSxJQUFFWixFQUFFO0FBQVUsa0JBQWdCLE9BQU9BLEVBQUUsS0FBSyw0QkFBM0IsY0FBa0UsT0FBT1ksRUFBRSxxQkFBdEIsZUFBaUQwZSxPQUFQLFFBQVcsQ0FBQ0EsR0FBRyxJQUFJMWUsQ0FBQyxJQUFHO0FBQUNmLG9CQUFFa2YsR0FBR2hmLEdBQUVGLENBQUM7QUFBRSxvQkFBSWMsSUFBRTBlLEdBQUdyZixHQUFFSCxHQUFFLENBQUM7QUFBMkIsb0JBQXpCNFgsR0FBR3pYLEdBQUVXLENBQUMsR0FBRUEsSUFBRXNYLEdBQUcsR0FBRWpZLElBQUVxaUIsR0FBR3JpQixHQUFFLENBQUMsR0FBWUEsTUFBUDtBQUFTZ00scUJBQUdoTSxHQUFFLEdBQUVXLENBQUMsR0FBRTRoQixHQUFHdmlCLEdBQUVXLENBQUM7eUJBQXVCLE9BQU9DLEVBQUUscUJBQXRCLGVBQWlEMGUsT0FBUCxRQUFXLENBQUNBLEdBQUcsSUFBSTFlLENBQUM7QUFBRyxzQkFBRztBQUFDQSxzQkFBRSxrQkFBa0JiLEdBQUVGLENBQUM7a0JBQUMsUUFBUztrQkFBQztBQUFDO2NBQUs7WUFBQztBQUFDRyxnQkFBRUEsRUFBRTtVQUFNO01BQUM7QUFDM2QsZUFBU21qQixHQUFHdGpCLEdBQUVFLEdBQUVDLEdBQUU7QUFBQyxZQUFJWSxJQUFFZixFQUFFO0FBQWlCZSxjQUFQLFFBQVVBLEVBQUUsT0FBT2IsQ0FBQyxHQUFFQSxJQUFFa1ksR0FBRyxHQUFFcFksRUFBRSxlQUFhQSxFQUFFLGlCQUFlRyxHQUFFK0IsT0FBSWxDLE1BQUlvQyxLQUFFakMsT0FBS0EsTUFBUWdDLE9BQUosS0FBV0EsT0FBSixNQUFRQyxLQUFFLGNBQVlBLE1BQUcsTUFBSVYsR0FBRSxJQUFFZ2YsS0FBR29DLEdBQUc5aUIsR0FBRSxDQUFDLElBQUV1aEIsTUFBSXBoQixJQUFHdWlCLEdBQUcxaUIsR0FBRUUsQ0FBQztNQUFDO0FBQUMsZUFBUzBnQixHQUFHNWdCLEdBQUVFLEdBQUU7QUFBQyxZQUFJQyxJQUFFSCxFQUFFO0FBQWlCRyxjQUFQLFFBQVVBLEVBQUUsT0FBT0QsQ0FBQyxHQUFFQSxJQUFFLEdBQU1BLE1BQUosTUFBUUEsSUFBRUYsRUFBRSxNQUFVRSxJQUFFLElBQVlBLElBQUUsS0FBd0JraUIsT0FBSixNQUFTQSxLQUFHZCxLQUFJcGhCLElBQUUrTCxHQUFHLFdBQVMsQ0FBQ21XLEVBQUUsR0FBTWxpQixNQUFKLE1BQVFBLElBQUUsWUFBOURBLElBQU9vVyxHQUFHLE1BQVIsS0FBVSxJQUFFLElBQTVCcFcsSUFBRSxJQUFxRkMsSUFBRWlZLEdBQUcsR0FBRXBZLElBQUV3aUIsR0FBR3hpQixHQUFFRSxDQUFDLEdBQVNGLE1BQVAsU0FBV21NLEdBQUduTSxHQUFFRSxHQUFFQyxDQUFDLEdBQUV1aUIsR0FBRzFpQixHQUFFRyxDQUFDO01BQUU7QUFBQyxVQUFJd2pCO0FBQzNaQSxXQUFHLFNBQVMzakIsR0FBRUUsR0FBRUMsR0FBRTtBQUFDLFlBQUlZLElBQUViLEVBQUU7QUFBTSxZQUFVRixNQUFQO0FBQVMsY0FBR0EsRUFBRSxrQkFBZ0JFLEVBQUUsZ0JBQWN1QixHQUFFO0FBQVE2VixpQkFBRzttQkFBZ0JuWCxJQUFFWTtBQUFHdVcsaUJBQVEsQ0FBQSxFQUFBdFgsRUFBRSxRQUFNO2VBQWlCO0FBQU8sb0JBQU5zWCxLQUFHLE9BQVVwWCxFQUFFLEtBQUk7Y0FBQyxLQUFLO0FBQUUyZCxtQkFBRzNkLENBQUMsR0FBRXVhLEdBQUc7QUFBRTtjQUFNLEtBQUs7QUFBRVosbUJBQUczWixDQUFDO0FBQUU7Y0FBTSxLQUFLO0FBQUUwVSxtQkFBRzFVLEVBQUUsSUFBSSxLQUFHOFUsR0FBRzlVLENBQUM7QUFBRTtjQUFNLEtBQUs7QUFBRXlaLG1CQUFHelosR0FBRUEsRUFBRSxVQUFVLGFBQWE7QUFBRTtjQUFNLEtBQUs7QUFBR2Esb0JBQUViLEVBQUUsY0FBYztBQUFNLG9CQUFJWSxJQUFFWixFQUFFLEtBQUs7QUFBU1UsbUJBQUVrVyxJQUFHaFcsRUFBRSxhQUFhLEdBQUVBLEVBQUUsZ0JBQWNDO0FBQUU7Y0FBTSxLQUFLO0FBQUcsb0JBQVViLEVBQUUsa0JBQVQ7QUFBd0IseUJBQVFDLElBQUVELEVBQUUsTUFBTSxhQUFtQjZkLEdBQUcvZCxHQUFFRSxHQUFFQyxDQUFDLEtBQUVTLEdBQUVlLElBQUVBLEdBQUUsVUFBUSxDQUFDLEdBQUV6QixJQUFFaWQsR0FBR25kLEdBQUVFLEdBQUVDLENBQUMsR0FDbGZELE1BRDJmLE9BQ3pmQSxFQUFFLFVBQVE7QUFBS1UsbUJBQUVlLElBQUVBLEdBQUUsVUFBUSxDQUFDO0FBQUU7Y0FBTSxLQUFLO0FBQTBCLG9CQUF2QlosS0FBT1osSUFBRUQsRUFBRSxnQkFBVCxHQUE2QkYsRUFBRSxRQUFNLElBQUk7QUFBQyxzQkFBR2U7QUFBRSwyQkFBT3VkLEdBQUd0ZSxHQUFFRSxHQUFFQyxDQUFDO0FBQUVELG9CQUFFLFNBQU87Z0JBQUU7QUFBNkYsb0JBQTVGWSxJQUFFWixFQUFFLGVBQXFCWSxNQUFQLFNBQVdBLEVBQUUsWUFBVSxNQUFLQSxFQUFFLE9BQUssTUFBS0EsRUFBRSxhQUFXLE9BQU1GLEdBQUVlLElBQUVBLEdBQUUsT0FBTyxHQUFLWjtBQUFFO0FBQVcsdUJBQU87Y0FBSyxLQUFLO2NBQUcsS0FBSztBQUFHLHVCQUFPYixFQUFFLFFBQU0sR0FBRXNkLEdBQUd4ZCxHQUFFRSxHQUFFQyxDQUFDO1lBQUM7QUFBQyxtQkFBT2dkLEdBQUduZCxHQUFFRSxHQUFFQyxDQUFDO1VBQUM7O0FBQU1tWCxlQUFHO0FBQWEsZ0JBQVZwWCxFQUFFLFFBQU0sR0FBU0EsRUFBRSxLQUFJO1VBQUMsS0FBSztBQUErSSxnQkFBN0lhLElBQUViLEVBQUUsTUFBWUYsTUFBUCxTQUFXQSxFQUFFLFlBQVUsTUFBS0UsRUFBRSxZQUFVLE1BQUtBLEVBQUUsU0FBTyxJQUFHRixJQUFFRSxFQUFFLGNBQWFZLElBQUU2VCxHQUFHelUsR0FBRXNCLEdBQUUsT0FBTyxHQUFFNlYsR0FBR25YLEdBQUVDLENBQUMsR0FBRVcsSUFBRXFhLEdBQUcsTUFBS2piLEdBQUVhLEdBQUVmLEdBQUVjLEdBQUVYLENBQUMsR0FBRUQsRUFBRSxTQUFPLEdBQ3ZlLE9BQU9ZLEtBRHFlLFlBQzNkQSxNQUFQLFFBQXVCLE9BQU9BLEVBQUUsVUFBdEIsY0FBdUNBLEVBQUUsYUFBWCxRQUFvQjtBQUFpRCxrQkFBaERaLEVBQUUsTUFBSSxHQUFFQSxFQUFFLGdCQUFjLE1BQUtBLEVBQUUsY0FBWSxNQUFRMFUsR0FBRzdULENBQUMsR0FBRTtBQUFDLG9CQUFJSSxJQUFFO0FBQUc2VCxtQkFBRzlVLENBQUM7Y0FBQztBQUFNaUIsb0JBQUU7QUFBR2pCLGdCQUFFLGdCQUFxQlksRUFBRSxVQUFULFFBQXlCQSxFQUFFLFVBQVgsU0FBaUJBLEVBQUUsUUFBTSxNQUFLMlcsR0FBR3ZYLENBQUM7QUFBRSxrQkFBSWdCLElBQUVILEVBQUU7QUFBc0MscUJBQU9HLEtBQXBCLGNBQXVCZ1gsR0FBR2hZLEdBQUVhLEdBQUVHLEdBQUVsQixDQUFDLEdBQUVjLEVBQUUsVUFBUXFYLElBQUdqWSxFQUFFLFlBQVVZLEdBQUVBLEVBQUUsa0JBQWdCWixHQUFFd1ksR0FBR3hZLEdBQUVhLEdBQUVmLEdBQUVHLENBQUMsR0FBRUQsSUFBRTBkLEdBQUcsTUFBSzFkLEdBQUVhLEdBQUUsTUFBR0ksR0FBRWhCLENBQUM7WUFBQztBQUFNRCxnQkFBRSxNQUFJLEdBQUUrYyxHQUFHLE1BQUsvYyxHQUFFWSxHQUFFWCxDQUFDLEdBQUVELElBQUVBLEVBQUU7QUFBTSxtQkFBT0E7VUFBRSxLQUFLO0FBQUdZLGdCQUFFWixFQUFFO0FBQVlGLGVBQUU7QUFDaFgsc0JBRHdYQSxNQUFQLFNBQVdBLEVBQUUsWUFBVSxNQUFLRSxFQUFFLFlBQVUsTUFBS0EsRUFBRSxTQUFPLElBQ25mRixJQUFFRSxFQUFFLGNBQWFpQixJQUFFTCxFQUFFLE9BQU1BLElBQUVLLEVBQUVMLEVBQUUsUUFBUSxHQUFFWixFQUFFLE9BQUtZLEdBQUVLLElBQUVqQixFQUFFLE1BQUk4akIsR0FBR2xqQixDQUFDLEdBQUVkLElBQUU2VyxHQUFHL1YsR0FBRWQsQ0FBQyxHQUFTbUIsR0FBRTtnQkFBQyxLQUFLO0FBQUVqQixzQkFBRXFkLEdBQUcsTUFBS3JkLEdBQUVZLEdBQUVkLEdBQUVHLENBQUM7QUFBRSx3QkFBTUg7Z0JBQUUsS0FBSztBQUFFRSxzQkFBRXlkLEdBQUcsTUFBS3pkLEdBQUVZLEdBQUVkLEdBQUVHLENBQUM7QUFBRSx3QkFBTUg7Z0JBQUUsS0FBSztBQUFHRSxzQkFBRWdkLEdBQUcsTUFBS2hkLEdBQUVZLEdBQUVkLEdBQUVHLENBQUM7QUFBRSx3QkFBTUg7Z0JBQUUsS0FBSztBQUFHRSxzQkFBRWtkLEdBQUcsTUFBS2xkLEdBQUVZLEdBQUUrVixHQUFHL1YsRUFBRSxNQUFLZCxDQUFDLEdBQUVlLEdBQUVaLENBQUM7QUFBRSx3QkFBTUg7Y0FBQztBQUFDLG9CQUFNLE1BQU1ELEVBQUUsS0FBSWUsR0FBRSxFQUFFLENBQUM7WUFBRTtBQUFDLG1CQUFPWjtVQUFFLEtBQUs7QUFBRSxtQkFBT2EsSUFBRWIsRUFBRSxNQUFLWSxJQUFFWixFQUFFLGNBQWFZLElBQUVaLEVBQUUsZ0JBQWNhLElBQUVELElBQUUrVixHQUFHOVYsR0FBRUQsQ0FBQyxHQUFFeWMsR0FBR3ZkLEdBQUVFLEdBQUVhLEdBQUVELEdBQUVYLENBQUM7VUFBRSxLQUFLO0FBQUUsbUJBQU9ZLElBQUViLEVBQUUsTUFBS1ksSUFBRVosRUFBRSxjQUFhWSxJQUFFWixFQUFFLGdCQUFjYSxJQUFFRCxJQUFFK1YsR0FBRzlWLEdBQUVELENBQUMsR0FBRTZjLEdBQUczZCxHQUFFRSxHQUFFYSxHQUFFRCxHQUFFWCxDQUFDO1VBQUUsS0FBSztBQUF3QixnQkFBdEIwZCxHQUFHM2QsQ0FBQyxHQUFFYSxJQUFFYixFQUFFLGFBQXNCRixNQUFQLFFBQWlCZSxNQUFQO0FBQVMsb0JBQU0sTUFBTWhCLEVBQUUsR0FBRyxDQUFDO0FBQy9ZLGdCQUE5R2dCLElBQUViLEVBQUUsY0FBYVksSUFBRVosRUFBRSxlQUFjWSxJQUFTQSxNQUFQLE9BQVNBLEVBQUUsVUFBUSxNQUFLNFcsR0FBRzFYLEdBQUVFLENBQUMsR0FBRTRYLEdBQUc1WCxHQUFFYSxHQUFFLE1BQUtaLENBQUMsR0FBRVksSUFBRWIsRUFBRSxjQUFjLFNBQVdhLE1BQUlEO0FBQUUyWixpQkFBRyxHQUFFdmEsSUFBRWlkLEdBQUduZCxHQUFFRSxHQUFFQyxDQUFDO2lCQUFNO0FBQXVGLGtCQUF0RlcsSUFBRVosRUFBRSxZQUFhaUIsSUFBRUwsRUFBRSxhQUFRbVosS0FBR25HLEdBQUc1VCxFQUFFLFVBQVUsY0FBYyxVQUFVLEdBQUU4WixLQUFHOVosR0FBRWlCLElBQUUrWSxLQUFHLE9BQU0vWSxHQUFFO0FBQXFDLG9CQUFwQ25CLElBQUVjLEVBQUUsaUNBQXlDZCxLQUFOO0FBQVEsdUJBQUljLElBQUUsR0FBRUEsSUFBRWQsRUFBRSxRQUFPYyxLQUFHO0FBQUVLLHdCQUFFbkIsRUFBRWMsQ0FBQyxHQUFFSyxFQUFFLGdDQUE4Qm5CLEVBQUVjLElBQUUsQ0FBQyxHQUFFNFosR0FBRyxLQUFLdlosQ0FBQztBQUFtQixxQkFBakJoQixJQUFFa1osR0FBR25aLEdBQUUsTUFBS2EsR0FBRVosQ0FBQyxHQUFNRCxFQUFFLFFBQU1DLEdBQUVBO0FBQUdBLG9CQUFFLFFBQU1BLEVBQUUsUUFBTSxLQUFHLE1BQUtBLElBQUVBLEVBQUU7Y0FBTztBQUFNOGMsbUJBQUdqZCxHQUFFRSxHQUFFYSxHQUFFWixDQUFDLEdBQUVzYSxHQUFHO0FBQUV2YSxrQkFBRUEsRUFBRTtZQUFLO0FBQUMsbUJBQU9BO1VBQUUsS0FBSztBQUFFLG1CQUFPMlosR0FBRzNaLENBQUMsR0FBU0YsTUFBUCxRQUM1ZXNhLEdBQUdwYSxDQUFDLEdBQUVhLElBQUViLEVBQUUsTUFBS1ksSUFBRVosRUFBRSxjQUFhaUIsSUFBU25CLE1BQVAsT0FBU0EsRUFBRSxnQkFBYyxNQUFLa0IsSUFBRUosRUFBRSxVQUFTNFMsR0FBRzNTLEdBQUVELENBQUMsSUFBRUksSUFBRSxPQUFZQyxNQUFQLFFBQVV1UyxHQUFHM1MsR0FBRUksQ0FBQyxNQUFJakIsRUFBRSxTQUFPLEtBQUl3ZCxHQUFHMWQsR0FBRUUsQ0FBQyxHQUFFK2MsR0FBR2pkLEdBQUVFLEdBQUVnQixHQUFFZixDQUFDLEdBQUVELEVBQUU7VUFBTSxLQUFLO0FBQUUsbUJBQWNGLE1BQVAsUUFBVXNhLEdBQUdwYSxDQUFDLEdBQUU7VUFBSyxLQUFLO0FBQUcsbUJBQU82ZCxHQUFHL2QsR0FBRUUsR0FBRUMsQ0FBQztVQUFFLEtBQUs7QUFBRSxtQkFBT3daLEdBQUd6WixHQUFFQSxFQUFFLFVBQVUsYUFBYSxHQUFFYSxJQUFFYixFQUFFLGNBQW9CRixNQUFQLE9BQVNFLEVBQUUsUUFBTWtaLEdBQUdsWixHQUFFLE1BQUthLEdBQUVaLENBQUMsSUFBRThjLEdBQUdqZCxHQUFFRSxHQUFFYSxHQUFFWixDQUFDLEdBQUVELEVBQUU7VUFBTSxLQUFLO0FBQUcsbUJBQU9hLElBQUViLEVBQUUsTUFBS1ksSUFBRVosRUFBRSxjQUFhWSxJQUFFWixFQUFFLGdCQUFjYSxJQUFFRCxJQUFFK1YsR0FBRzlWLEdBQUVELENBQUMsR0FBRW9jLEdBQUdsZCxHQUFFRSxHQUFFYSxHQUFFRCxHQUFFWCxDQUFDO1VBQUUsS0FBSztBQUFFLG1CQUFPOGMsR0FBR2pkLEdBQUVFLEdBQUVBLEVBQUUsY0FBYUMsQ0FBQyxHQUFFRCxFQUFFO1VBQU0sS0FBSztBQUFFLG1CQUFPK2MsR0FBR2pkLEdBQUVFLEdBQUVBLEVBQUUsYUFBYSxVQUNoZkMsQ0FBQyxHQUFFRCxFQUFFO1VBQU0sS0FBSztBQUFHLG1CQUFPK2MsR0FBR2pkLEdBQUVFLEdBQUVBLEVBQUUsYUFBYSxVQUFTQyxDQUFDLEdBQUVELEVBQUU7VUFBTSxLQUFLO0FBQUdGLGVBQUU7QUFBQ2Usa0JBQUViLEVBQUUsS0FBSyxVQUFTWSxJQUFFWixFQUFFLGNBQWFnQixJQUFFaEIsRUFBRSxlQUFjaUIsSUFBRUwsRUFBRTtBQUFNLGtCQUFJRyxJQUFFZixFQUFFLEtBQUs7QUFBaUQsa0JBQXhDVSxHQUFFa1csSUFBRzdWLEVBQUUsYUFBYSxHQUFFQSxFQUFFLGdCQUFjRSxHQUFZRCxNQUFQO0FBQVMsb0JBQUdELElBQUVDLEVBQUUsT0FBTUMsSUFBRXVRLEdBQUd6USxHQUFFRSxDQUFDLElBQUUsS0FBZ0IsT0FBT0osRUFBRSx5QkFBdEIsYUFBNENBLEVBQUUsc0JBQXNCRSxHQUFFRSxDQUFDLElBQUUsY0FBWSxHQUFNQSxNQUFKLEdBQUE7QUFBTyxzQkFBR0QsRUFBRSxhQUFXSixFQUFFLFlBQVUsQ0FBQ1csR0FBRSxTQUFRO0FBQUN2Qix3QkFBRWlkLEdBQUduZCxHQUFFRSxHQUFFQyxDQUFDO0FBQUUsMEJBQU1IO2tCQUFDO2dCQUFBO0FBQU8sdUJBQUlpQixJQUFFZixFQUFFLE9BQWFlLE1BQVAsU0FBV0EsRUFBRSxTQUFPZixJQUFVZSxNQUFQLFFBQVU7QUFBQyx3QkFBSUQsSUFBRUMsRUFBRTtBQUFhLHdCQUFVRCxNQUFQLE1BQVM7QUFBQ0UsMEJBQUVELEVBQUU7QUFBTSwrQkFBUSxJQUN0ZkQsRUFBRSxjQUFvQixNQUFQLFFBQVU7QUFBQyw0QkFBRyxFQUFFLFlBQVVELEtBQVEsRUFBRSxlQUFhSSxHQUFHO0FBQUtGLDRCQUFFLFFBQU4sTUFBWSxJQUFFMFcsR0FBRyxJQUFHeFgsSUFBRSxDQUFDQSxDQUFDLEdBQUUsRUFBRSxNQUFJLEdBQUV5WCxHQUFHM1csR0FBRSxDQUFDLElBQUdBLEVBQUUsU0FBT2QsR0FBRSxJQUFFYyxFQUFFLFdBQWlCLE1BQVAsU0FBVyxFQUFFLFNBQU9kLElBQUdpWCxHQUFHblcsRUFBRSxRQUFPZCxDQUFDLEdBQUVhLEVBQUUsU0FBT2I7QUFBRTt3QkFBSztBQUFDLDRCQUFFLEVBQUU7c0JBQUk7b0JBQUM7QUFBTWUsMEJBQU9ELEVBQUUsUUFBUCxNQUFXQSxFQUFFLFNBQU9mLEVBQUUsT0FBSyxPQUFhZSxFQUFFO0FBQU0sd0JBQVVDLE1BQVA7QUFBU0Esd0JBQUUsU0FBT0Q7O0FBQU8sMkJBQUlDLElBQUVELEdBQVNDLE1BQVAsUUFBVTtBQUFDLDRCQUFHQSxNQUFJaEIsR0FBRTtBQUFDZ0IsOEJBQUU7QUFBSzt3QkFBSztBQUFhLDRCQUFaRCxJQUFFQyxFQUFFLFNBQWtCRCxNQUFQLE1BQVM7QUFBQ0EsNEJBQUUsU0FBT0MsRUFBRSxRQUFPQSxJQUFFRDtBQUFFO3dCQUFLO0FBQUNDLDRCQUFFQSxFQUFFO3NCQUFNO0FBQUNELHdCQUFFQztrQkFBQztBQUFDK2IsaUJBQUdqZCxHQUFFRSxHQUFFWSxFQUFFLFVBQVNYLENBQUMsR0FBRUQsSUFBRUEsRUFBRTtZQUFLO0FBQUMsbUJBQU9BO1VBQUUsS0FBSztBQUFFLG1CQUFPWSxJQUFFWixFQUFFLE1BQUtpQixJQUFFakIsRUFBRSxjQUFhYSxJQUFFSSxFQUFFLFVBQVNrVyxHQUFHblgsR0FBRUMsQ0FBQyxHQUFFVyxJQUFFeVcsR0FBR3pXLEdBQ3BmSyxFQUFFLHFCQUFxQixHQUFFSixJQUFFQSxFQUFFRCxDQUFDLEdBQUVaLEVBQUUsU0FBTyxHQUFFK2MsR0FBR2pkLEdBQUVFLEdBQUVhLEdBQUVaLENBQUMsR0FBRUQsRUFBRTtVQUFNLEtBQUs7QUFBRyxtQkFBT1ksSUFBRVosRUFBRSxNQUFLaUIsSUFBRTBWLEdBQUcvVixHQUFFWixFQUFFLFlBQVksR0FBRWlCLElBQUUwVixHQUFHL1YsRUFBRSxNQUFLSyxDQUFDLEdBQUVpYyxHQUFHcGQsR0FBRUUsR0FBRVksR0FBRUssR0FBRUosR0FBRVosQ0FBQztVQUFFLEtBQUs7QUFBRyxtQkFBT21kLEdBQUd0ZCxHQUFFRSxHQUFFQSxFQUFFLE1BQUtBLEVBQUUsY0FBYWEsR0FBRVosQ0FBQztVQUFFLEtBQUs7QUFBRyxtQkFBT1ksSUFBRWIsRUFBRSxNQUFLWSxJQUFFWixFQUFFLGNBQWFZLElBQUVaLEVBQUUsZ0JBQWNhLElBQUVELElBQUUrVixHQUFHOVYsR0FBRUQsQ0FBQyxHQUFTZCxNQUFQLFNBQVdBLEVBQUUsWUFBVSxNQUFLRSxFQUFFLFlBQVUsTUFBS0EsRUFBRSxTQUFPLElBQUdBLEVBQUUsTUFBSSxHQUFFMFUsR0FBRzdULENBQUMsS0FBR2YsSUFBRSxNQUFHZ1YsR0FBRzlVLENBQUMsS0FBR0YsSUFBRSxPQUFHcVgsR0FBR25YLEdBQUVDLENBQUMsR0FBRXFZLEdBQUd0WSxHQUFFYSxHQUFFRCxDQUFDLEdBQUU0WCxHQUFHeFksR0FBRWEsR0FBRUQsR0FBRVgsQ0FBQyxHQUFFeWQsR0FBRyxNQUFLMWQsR0FBRWEsR0FBRSxNQUFHZixHQUFFRyxDQUFDO1VBQUUsS0FBSztBQUFHLG1CQUFPbWUsR0FBR3RlLEdBQUVFLEdBQUVDLENBQUM7VUFBRSxLQUFLO0FBQUcsbUJBQU9xZCxHQUFHeGQsR0FBRUUsR0FBRUMsQ0FBQztVQUFFLEtBQUs7QUFBRyxtQkFBT3FkLEdBQUd4ZCxHQUFFRSxHQUFFQyxDQUFDO1FBQUM7QUFBQyxjQUFNLE1BQU1KLEVBQUUsS0FBSUcsRUFBRSxHQUFHLENBQUM7TUFDbmY7QUFBRSxlQUFTK2pCLEdBQUdqa0IsR0FBRUUsR0FBRUMsR0FBRVksR0FBRTtBQUFDLGFBQUssTUFBSWYsR0FBRSxLQUFLLE1BQUlHLEdBQUUsS0FBSyxVQUFRLEtBQUssUUFBTSxLQUFLLFNBQU8sS0FBSyxZQUFVLEtBQUssT0FBSyxLQUFLLGNBQVksTUFBSyxLQUFLLFFBQU0sR0FBRSxLQUFLLE1BQUksTUFBSyxLQUFLLGVBQWFELEdBQUUsS0FBSyxlQUFhLEtBQUssZ0JBQWMsS0FBSyxjQUFZLEtBQUssZ0JBQWMsTUFBSyxLQUFLLE9BQUthLEdBQUUsS0FBSyxRQUFNLEdBQUUsS0FBSyxhQUFXLEtBQUssY0FBWSxLQUFLLGFBQVcsTUFBSyxLQUFLLGFBQVcsS0FBSyxRQUFNLEdBQUUsS0FBSyxZQUFVO01BQUk7QUFBQyxlQUFTcVosR0FBR3BhLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUU7QUFBQyxlQUFPLElBQUlrakIsR0FBR2prQixHQUFFRSxHQUFFQyxHQUFFWSxDQUFDO01BQUM7QUFBQyxlQUFTc2MsR0FBR3JkLEdBQUU7QUFBQyxlQUFBQSxJQUFFQSxFQUFFLFdBQWdCLEVBQUUsQ0FBQ0EsS0FBRyxDQUFDQSxFQUFFO01BQWlCO0FBQ3RlLGVBQVNna0IsR0FBR2hrQixHQUFFO0FBQUMsWUFBZ0IsT0FBT0EsS0FBcEI7QUFBc0IsaUJBQU9xZCxHQUFHcmQsQ0FBQyxJQUFFLElBQUU7QUFBRSxZQUFzQkEsS0FBUCxNQUFTO0FBQWMsY0FBYkEsSUFBRUEsRUFBRSxVQUFZQSxNQUFJK0Q7QUFBRyxtQkFBTztBQUFHLGNBQUcvRCxNQUFJa0U7QUFBRyxtQkFBTztRQUFFO0FBQUMsZUFBTztNQUFDO0FBQy9JLGVBQVM2VSxHQUFHL1ksR0FBRUUsR0FBRTtBQUFDLFlBQUlDLElBQUVILEVBQUU7QUFBVSxlQUFPRyxNQUFQLFFBQVVBLElBQUVpYSxHQUFHcGEsRUFBRSxLQUFJRSxHQUFFRixFQUFFLEtBQUlBLEVBQUUsSUFBSSxHQUFFRyxFQUFFLGNBQVlILEVBQUUsYUFBWUcsRUFBRSxPQUFLSCxFQUFFLE1BQUtHLEVBQUUsWUFBVUgsRUFBRSxXQUFVRyxFQUFFLFlBQVVILEdBQUVBLEVBQUUsWUFBVUcsTUFBSUEsRUFBRSxlQUFhRCxHQUFFQyxFQUFFLE9BQUtILEVBQUUsTUFBS0csRUFBRSxRQUFNLEdBQUVBLEVBQUUsYUFBVyxNQUFLQSxFQUFFLGNBQVksTUFBS0EsRUFBRSxhQUFXLE9BQU1BLEVBQUUsYUFBV0gsRUFBRSxZQUFXRyxFQUFFLFFBQU1ILEVBQUUsT0FBTUcsRUFBRSxRQUFNSCxFQUFFLE9BQU1HLEVBQUUsZ0JBQWNILEVBQUUsZUFBY0csRUFBRSxnQkFBY0gsRUFBRSxlQUFjRyxFQUFFLGNBQVlILEVBQUUsYUFBWUUsSUFBRUYsRUFBRSxjQUFhRyxFQUFFLGVBQW9CRCxNQUFQLE9BQVMsT0FBSyxFQUFDLE9BQU1BLEVBQUUsT0FBTSxjQUFhQSxFQUFFLGFBQVksR0FDdmZDLEVBQUUsVUFBUUgsRUFBRSxTQUFRRyxFQUFFLFFBQU1ILEVBQUUsT0FBTUcsRUFBRSxNQUFJSCxFQUFFLEtBQVdHO01BQUM7QUFDeEQsZUFBUzhZLEdBQUdqWixHQUFFRSxHQUFFQyxHQUFFWSxHQUFFRCxHQUFFSyxHQUFFO0FBQUMsWUFBSUQsSUFBRTtBQUFNLFlBQUpILElBQUVmLEdBQWtCLE9BQU9BLEtBQXBCO0FBQXNCcWQsYUFBR3JkLENBQUMsTUFBSWtCLElBQUU7aUJBQXNCLE9BQU9sQixLQUFsQjtBQUFvQmtCLGNBQUU7O0FBQU9sQjtBQUFFLG9CQUFPQSxHQUFFO2NBQUMsS0FBSzBEO0FBQUcsdUJBQU95VixHQUFHaFosRUFBRSxVQUFTVyxHQUFFSyxHQUFFakIsQ0FBQztjQUFFLEtBQUtvRTtBQUFHcEQsb0JBQUUsR0FBRUosS0FBRztBQUFHO2NBQU0sS0FBSzZDO0FBQUd6QyxvQkFBRSxHQUFFSixLQUFHO0FBQUU7Y0FBTSxLQUFLOEM7QUFBRyx1QkFBTzVELElBQUVvYSxHQUFHLElBQUdqYSxHQUFFRCxHQUFFWSxJQUFFLENBQUMsR0FBRWQsRUFBRSxjQUFZNEQsSUFBRzVELEVBQUUsT0FBSzRELElBQUc1RCxFQUFFLFFBQU1tQixHQUFFbkI7Y0FBRSxLQUFLZ0U7QUFBRyx1QkFBT2hFLElBQUVvYSxHQUFHLElBQUdqYSxHQUFFRCxHQUFFWSxDQUFDLEdBQUVkLEVBQUUsT0FBS2dFLElBQUdoRSxFQUFFLGNBQVlnRSxJQUFHaEUsRUFBRSxRQUFNbUIsR0FBRW5CO2NBQUUsS0FBS2lFO0FBQUcsdUJBQU9qRSxJQUFFb2EsR0FBRyxJQUFHamEsR0FBRUQsR0FBRVksQ0FBQyxHQUFFZCxFQUFFLGNBQVlpRSxJQUFHakUsRUFBRSxRQUFNbUIsR0FBRW5CO2NBQUUsS0FBS3VFO0FBQUcsdUJBQU8wWixHQUFHOWQsR0FBRVcsR0FBRUssR0FBRWpCLENBQUM7Y0FBRSxLQUFLc0U7QUFBRyx1QkFBT3hFLElBQUVvYSxHQUFHLElBQUdqYSxHQUFFRCxHQUFFWSxDQUFDLEdBQUVkLEVBQUUsY0FBWXdFLElBQUd4RSxFQUFFLFFBQU1tQixHQUFFbkI7Y0FBRTtBQUFRLG9CQUNwZixPQUFPQSxLQURnZixZQUN0ZUEsTUFBUDtBQUFTLDBCQUFPQSxFQUFFLFVBQVM7b0JBQUMsS0FBSzZEO0FBQUczQywwQkFBRTtBQUFHLDRCQUFNbEI7b0JBQUUsS0FBSzhEO0FBQUc1QywwQkFBRTtBQUFFLDRCQUFNbEI7b0JBQUUsS0FBSytEO0FBQUc3QywwQkFBRTtBQUFHLDRCQUFNbEI7b0JBQUUsS0FBS2tFO0FBQUdoRCwwQkFBRTtBQUFHLDRCQUFNbEI7b0JBQUUsS0FBS21FO0FBQUdqRCwwQkFBRSxJQUFHSCxJQUFFO0FBQUssNEJBQU1mO29CQUFFLEtBQUtvRTtBQUFHbEQsMEJBQUU7QUFBRyw0QkFBTWxCO2tCQUFDO0FBQUMsc0JBQU0sTUFBTUQsRUFBRSxLQUFVQyxLQUFOLE9BQVFBLElBQUUsT0FBT0EsR0FBRSxFQUFFLENBQUM7WUFBRTtBQUFDLGVBQUFFLElBQUVrYSxHQUFHbFosR0FBRWYsR0FBRUQsR0FBRVksQ0FBQyxHQUFFWixFQUFFLGNBQVlGLEdBQUVFLEVBQUUsT0FBS2EsR0FBRWIsRUFBRSxRQUFNaUIsR0FBU2pCO01BQUM7QUFBQyxlQUFTaVosR0FBR25aLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUU7QUFBQyxlQUFBZixJQUFFb2EsR0FBRyxHQUFFcGEsR0FBRWUsR0FBRWIsQ0FBQyxHQUFFRixFQUFFLFFBQU1HLEdBQVNIO01BQUM7QUFBQyxlQUFTaWUsR0FBR2plLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUU7QUFBQyxlQUFBZixJQUFFb2EsR0FBRyxJQUFHcGEsR0FBRWUsR0FBRWIsQ0FBQyxHQUFFRixFQUFFLGNBQVl1RSxJQUFHdkUsRUFBRSxRQUFNRyxHQUFTSDtNQUFDO0FBQUMsZUFBU2daLEdBQUdoWixHQUFFRSxHQUFFQyxHQUFFO0FBQUMsZUFBQUgsSUFBRW9hLEdBQUcsR0FBRXBhLEdBQUUsTUFBS0UsQ0FBQyxHQUFFRixFQUFFLFFBQU1HLEdBQVNIO01BQUM7QUFDbmMsZUFBU2taLEdBQUdsWixHQUFFRSxHQUFFQyxHQUFFO0FBQUMsZUFBQUQsSUFBRWthLEdBQUcsR0FBU3BhLEVBQUUsYUFBVCxPQUFrQkEsRUFBRSxXQUFTLENBQUMsR0FBRUEsRUFBRSxLQUFJRSxDQUFDLEdBQUVBLEVBQUUsUUFBTUMsR0FBRUQsRUFBRSxZQUFVLEVBQUMsZUFBY0YsRUFBRSxlQUFjLGlCQUFnQixNQUFLLGdCQUFlQSxFQUFFLGVBQWMsR0FBU0U7TUFBQztBQUN0TCxlQUFTZ2tCLEdBQUdsa0IsR0FBRUUsR0FBRUMsR0FBRTtBQUFDLGFBQUssTUFBSUQsR0FBRSxLQUFLLGdCQUFjRixHQUFFLEtBQUssZUFBYSxLQUFLLFlBQVUsS0FBSyxVQUFRLEtBQUssa0JBQWdCLE1BQUssS0FBSyxnQkFBYyxJQUFHLEtBQUssaUJBQWUsS0FBSyxVQUFRLE1BQUssS0FBSyxVQUFRRyxHQUFFLEtBQUssZUFBYSxNQUFLLEtBQUssbUJBQWlCLEdBQUUsS0FBSyxhQUFXK0wsR0FBRyxDQUFDLEdBQUUsS0FBSyxrQkFBZ0JBLEdBQUcsRUFBRSxHQUFFLEtBQUssaUJBQWUsS0FBSyxnQkFBYyxLQUFLLG1CQUFpQixLQUFLLGVBQWEsS0FBSyxjQUFZLEtBQUssaUJBQWUsS0FBSyxlQUFhLEdBQUUsS0FBSyxnQkFBY0EsR0FBRyxDQUFDLEdBQUUsS0FBSyxrQ0FBZ0M7TUFBSTtBQUNqZixlQUFTaVksR0FBR25rQixHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBSVksSUFBRSxJQUFFLFVBQVUsVUFBaUIsVUFBVSxDQUFDLE1BQXBCLFNBQXNCLFVBQVUsQ0FBQyxJQUFFO0FBQUssZUFBTSxFQUFDLFVBQVMwQyxJQUFHLEtBQVUxQyxLQUFOLE9BQVEsT0FBSyxLQUFHQSxHQUFFLFVBQVNmLEdBQUUsZUFBY0UsR0FBRSxnQkFBZUMsRUFBQztNQUFDO0FBQzFLLGVBQVNpa0IsR0FBR3BrQixHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQUMsWUFBSUQsSUFBRVosRUFBRSxTQUFRaUIsSUFBRWlYLEdBQUcsR0FBRWxYLElBQUVtWCxHQUFHdlgsQ0FBQztBQUFFZDtBQUFFLGNBQUdHLEdBQUU7QUFBQ0EsZ0JBQUVBLEVBQUU7QUFBZ0JELGVBQUU7QUFBQyxrQkFBRzJJLEdBQUcxSSxDQUFDLE1BQUlBLEtBQU9BLEVBQUUsUUFBTjtBQUFVLHNCQUFNLE1BQU1KLEVBQUUsR0FBRyxDQUFDO0FBQUUsa0JBQUlrQixJQUFFZDtBQUFFLGlCQUFFO0FBQUMsd0JBQU9jLEVBQUUsS0FBSTtrQkFBQyxLQUFLO0FBQUVBLHdCQUFFQSxFQUFFLFVBQVU7QUFBUSwwQkFBTWY7a0JBQUUsS0FBSztBQUFFLHdCQUFHMFUsR0FBRzNULEVBQUUsSUFBSSxHQUFFO0FBQUNBLDBCQUFFQSxFQUFFLFVBQVU7QUFBMEMsNEJBQU1mO29CQUFDO2dCQUFDO0FBQUNlLG9CQUFFQSxFQUFFO2NBQU0sU0FBY0EsTUFBUDtBQUFVLG9CQUFNLE1BQU1sQixFQUFFLEdBQUcsQ0FBQztZQUFFO0FBQUMsZ0JBQU9JLEVBQUUsUUFBTixHQUFVO0FBQUMsa0JBQUlhLElBQUViLEVBQUU7QUFBSyxrQkFBR3lVLEdBQUc1VCxDQUFDLEdBQUU7QUFBQ2Isb0JBQUU0VSxHQUFHNVUsR0FBRWEsR0FBRUMsQ0FBQztBQUFFLHNCQUFNakI7Y0FBQztZQUFDO0FBQUNHLGdCQUFFYztVQUFDO0FBQU1kLGdCQUFFc1U7QUFBRyxlQUFPdlUsRUFBRSxZQUFULE9BQWlCQSxFQUFFLFVBQVFDLElBQUVELEVBQUUsaUJBQWVDLEdBQUVELElBQUV5WCxHQUFHeFcsR0FBRUQsQ0FBQyxHQUFFaEIsRUFBRSxVQUFRLEVBQUMsU0FBUUYsRUFBQyxHQUFFZSxJQUFXQSxNQUFULFNBQVcsT0FBS0EsR0FDOWVBLE1BRGdmLFNBQzVlYixFQUFFLFdBQVNhLElBQUc2VyxHQUFHOVcsR0FBRVosQ0FBQyxHQUFFb1ksR0FBR3hYLEdBQUVJLEdBQUVDLENBQUMsR0FBU0Q7TUFBQztBQUFDLGVBQVNtakIsR0FBR3JrQixHQUFFO0FBQWEsWUFBWkEsSUFBRUEsRUFBRSxTQUFXLENBQUNBLEVBQUU7QUFBTSxpQkFBTztBQUFLLGdCQUFPQSxFQUFFLE1BQU0sS0FBSTtVQUFDLEtBQUs7QUFBRSxtQkFBT0EsRUFBRSxNQUFNO1VBQVU7QUFBUSxtQkFBT0EsRUFBRSxNQUFNO1FBQVM7TUFBQztBQUFDLGVBQVNza0IsR0FBR3RrQixHQUFFRSxHQUFFO0FBQW1CLFlBQWxCRixJQUFFQSxFQUFFLGVBQXdCQSxNQUFQLFFBQWlCQSxFQUFFLGVBQVQsTUFBb0I7QUFBQyxjQUFJRyxJQUFFSCxFQUFFO0FBQVVBLFlBQUUsWUFBY0csTUFBSixLQUFPQSxJQUFFRCxJQUFFQyxJQUFFRDtRQUFDO01BQUM7QUFBQyxlQUFTcWtCLEdBQUd2a0IsR0FBRUUsR0FBRTtBQUFDb2tCLFdBQUd0a0IsR0FBRUUsQ0FBQyxJQUFHRixJQUFFQSxFQUFFLGNBQVlza0IsR0FBR3RrQixHQUFFRSxDQUFDO01BQUM7QUFBQyxlQUFTc2tCLEtBQUk7QUFBQyxlQUFPO01BQUk7QUFDcFgsZUFBU0MsR0FBR3prQixHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBSVksSUFBUVosS0FBTixRQUFlQSxFQUFFLG9CQUFSLFFBQTBCQSxFQUFFLGlCQUFpQixrQkFBZ0I7QUFBaUssWUFBNUpBLElBQUUsSUFBSStqQixHQUFHbGtCLEdBQUVFLEdBQVFDLEtBQU4sUUFBY0EsRUFBRSxZQUFQLElBQWMsR0FBRUQsSUFBRWthLEdBQUcsR0FBRSxNQUFLLE1BQVNsYSxNQUFKLElBQU0sSUFBTUEsTUFBSixJQUFNLElBQUUsQ0FBQyxHQUFFQyxFQUFFLFVBQVFELEdBQUVBLEVBQUUsWUFBVUMsR0FBRXNYLEdBQUd2WCxDQUFDLEdBQUVGLEVBQUVtVCxFQUFFLElBQUVoVCxFQUFFLFNBQVE2UyxHQUFPaFQsRUFBRSxhQUFOLElBQWVBLEVBQUUsYUFBV0EsQ0FBQyxHQUFLZTtBQUFFLGVBQUlmLElBQUUsR0FBRUEsSUFBRWUsRUFBRSxRQUFPZixLQUFJO0FBQUNFLGdCQUFFYSxFQUFFZixDQUFDO0FBQUUsZ0JBQUljLElBQUVaLEVBQUU7QUFBWVksZ0JBQUVBLEVBQUVaLEVBQUUsT0FBTyxHQUFRQyxFQUFFLG1DQUFSLE9BQXdDQSxFQUFFLGtDQUFnQyxDQUFDRCxHQUFFWSxDQUFDLElBQUVYLEVBQUUsZ0NBQWdDLEtBQUtELEdBQUVZLENBQUM7VUFBQztBQUFDLGFBQUssZ0JBQWNYO01BQUM7QUFDdmRza0IsU0FBRyxVQUFVLFNBQU8sU0FBU3prQixHQUFFO0FBQUNva0IsV0FBR3BrQixHQUFFLEtBQUssZUFBYyxNQUFLLElBQUk7TUFBQztBQUFFeWtCLFNBQUcsVUFBVSxVQUFRLFdBQVU7QUFBQyxZQUFJemtCLElBQUUsS0FBSyxlQUFjRSxJQUFFRixFQUFFO0FBQWNva0IsV0FBRyxNQUFLcGtCLEdBQUUsTUFBSyxXQUFVO0FBQUNFLFlBQUVpVCxFQUFFLElBQUU7UUFBSSxDQUFDO01BQUM7QUFBRSxlQUFTdVIsR0FBRzFrQixHQUFFO0FBQUMsZUFBTSxFQUFFLENBQUNBLEtBQU9BLEVBQUUsYUFBTixLQUFvQkEsRUFBRSxhQUFOLEtBQXFCQSxFQUFFLGFBQVAsT0FBc0JBLEVBQUUsYUFBTixLQUFpREEsRUFBRSxjQUFuQztNQUE4QztBQUNsVSxlQUFTMmtCLEdBQUcza0IsR0FBRUUsR0FBRTtBQUF3SCxZQUF2SEEsTUFBSUEsSUFBRUYsSUFBTUEsRUFBRSxhQUFOLElBQWVBLEVBQUUsa0JBQWdCQSxFQUFFLGFBQVcsTUFBS0UsSUFBRSxFQUFFLENBQUNBLEtBQU9BLEVBQUUsYUFBTixLQUFnQixDQUFDQSxFQUFFLGFBQWEsZ0JBQWdCLEtBQU8sQ0FBQ0E7QUFBRSxtQkFBUUMsR0FBRUEsSUFBRUgsRUFBRTtBQUFXQSxjQUFFLFlBQVlHLENBQUM7QUFBRSxlQUFPLElBQUlza0IsR0FBR3prQixHQUFFLEdBQUVFLElBQUUsRUFBQyxTQUFRLEtBQUUsSUFBRSxNQUFNO01BQUM7QUFDaE8sZUFBUzBrQixHQUFHNWtCLEdBQUVFLEdBQUVDLEdBQUVZLEdBQUVELEdBQUU7QUFBQyxZQUFJSyxJQUFFaEIsRUFBRTtBQUFvQixZQUFHZ0IsR0FBRTtBQUFDLGNBQUlELElBQUVDLEVBQUU7QUFBYyxjQUFnQixPQUFPTCxLQUFwQixZQUFzQjtBQUFDLGdCQUFJRyxJQUFFSDtBQUFFQSxnQkFBRSxXQUFVO0FBQUMsa0JBQUlkLElBQUVxa0IsR0FBR25qQixDQUFDO0FBQUVELGdCQUFFLEtBQUtqQixDQUFDO1lBQUM7VUFBQztBQUFDb2tCLGFBQUdsa0IsR0FBRWdCLEdBQUVsQixHQUFFYyxDQUFDO1FBQUMsT0FBSztBQUFtRCxjQUFsREssSUFBRWhCLEVBQUUsc0JBQW9Cd2tCLEdBQUd4a0IsR0FBRVksQ0FBQyxHQUFFRyxJQUFFQyxFQUFFLGVBQThCLE9BQU9MLEtBQXBCLFlBQXNCO0FBQUMsZ0JBQUlFLElBQUVGO0FBQUVBLGdCQUFFLFdBQVU7QUFBQyxrQkFBSWQsSUFBRXFrQixHQUFHbmpCLENBQUM7QUFBRUYsZ0JBQUUsS0FBS2hCLENBQUM7WUFBQztVQUFDO0FBQUNxakIsYUFBRyxXQUFVO0FBQUNlLGVBQUdsa0IsR0FBRWdCLEdBQUVsQixHQUFFYyxDQUFDO1VBQUMsQ0FBQztRQUFDO0FBQUMsZUFBT3VqQixHQUFHbmpCLENBQUM7TUFBQztBQUFDaUksV0FBRyxTQUFTbkosR0FBRTtBQUFDLFlBQVFBLEVBQUUsUUFBUCxJQUFXO0FBQUMsY0FBSUUsSUFBRWtZLEdBQUc7QUFBRUUsYUFBR3RZLEdBQUUsR0FBRUUsQ0FBQyxHQUFFcWtCLEdBQUd2a0IsR0FBRSxDQUFDO1FBQUM7TUFBQztBQUFFb0osV0FBRyxTQUFTcEosR0FBRTtBQUFDLFlBQVFBLEVBQUUsUUFBUCxJQUFXO0FBQUMsY0FBSUUsSUFBRWtZLEdBQUc7QUFBRUUsYUFBR3RZLEdBQUUsVUFBU0UsQ0FBQyxHQUFFcWtCLEdBQUd2a0IsR0FBRSxRQUFRO1FBQUM7TUFBQztBQUM3Y3FKLFdBQUcsU0FBU3JKLEdBQUU7QUFBQyxZQUFRQSxFQUFFLFFBQVAsSUFBVztBQUFDLGNBQUlFLElBQUVrWSxHQUFHLEdBQUVqWSxJQUFFa1ksR0FBR3JZLENBQUM7QUFBRXNZLGFBQUd0WSxHQUFFRyxHQUFFRCxDQUFDLEdBQUVxa0IsR0FBR3ZrQixHQUFFRyxDQUFDO1FBQUM7TUFBQztBQUFFbUosV0FBRyxTQUFTdEosR0FBRUUsR0FBRTtBQUFDLGVBQU9BLEVBQUU7TUFBQztBQUNoR2dILFdBQUcsU0FBU2xILEdBQUVFLEdBQUVDLEdBQUU7QUFBQyxnQkFBT0QsR0FBRTtVQUFDLEtBQUs7QUFBeUIsZ0JBQWpCd0YsR0FBRzFGLEdBQUVHLENBQUMsR0FBRUQsSUFBRUMsRUFBRSxNQUFrQkEsRUFBRSxTQUFaLFdBQXdCRCxLQUFOLE1BQVE7QUFBQyxtQkFBSUMsSUFBRUgsR0FBRUcsRUFBRTtBQUFZQSxvQkFBRUEsRUFBRTtBQUFzRixtQkFBM0VBLElBQUVBLEVBQUUsaUJBQWlCLGdCQUFjLEtBQUssVUFBVSxLQUFHRCxDQUFDLElBQUUsaUJBQWlCLEdBQU1BLElBQUUsR0FBRUEsSUFBRUMsRUFBRSxRQUFPRCxLQUFJO0FBQUMsb0JBQUlhLElBQUVaLEVBQUVELENBQUM7QUFBRSxvQkFBR2EsTUFBSWYsS0FBR2UsRUFBRSxTQUFPZixFQUFFLE1BQUs7QUFBQyxzQkFBSWMsSUFBRXlHLEdBQUd4RyxDQUFDO0FBQUUsc0JBQUcsQ0FBQ0Q7QUFBRSwwQkFBTSxNQUFNZixFQUFFLEVBQUUsQ0FBQztBQUFFc0YscUJBQUd0RSxDQUFDLEdBQUUyRSxHQUFHM0UsR0FBRUQsQ0FBQztnQkFBQztjQUFDO1lBQUM7QUFBQztVQUFNLEtBQUs7QUFBV29GLGVBQUdsRyxHQUFFRyxDQUFDO0FBQUU7VUFBTSxLQUFLO0FBQVNELGdCQUFFQyxFQUFFLE9BQVlELEtBQU4sUUFBUzZGLEdBQUcvRixHQUFFLENBQUMsQ0FBQ0csRUFBRSxVQUFTRCxHQUFFLEtBQUU7UUFBQztNQUFDO0FBQUV3SCxXQUFHMGI7QUFDOVp6YixXQUFHLFNBQVMzSCxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFRCxHQUFFO0FBQUMsWUFBSUssSUFBRThmO0FBQUVBLGFBQUc7QUFBRSxZQUFHO0FBQUMsaUJBQU96SyxHQUFHLElBQUd4VyxFQUFFLEtBQUssTUFBS0UsR0FBRUMsR0FBRVksR0FBRUQsQ0FBQyxDQUFDO1FBQUMsVUFBQTtBQUFTbWdCLGNBQUU5ZixHQUFNOGYsTUFBSixNQUFRUSxHQUFHLEdBQUUvSyxHQUFHO1FBQUU7TUFBQztBQUFFOU8sV0FBRyxXQUFVO0FBQU0sVUFBQXFaLElBQUUsUUFBTWtDLEdBQUcsR0FBRVAsR0FBRztNQUFFO0FBQUUvYSxXQUFHLFNBQVM3SCxHQUFFRSxHQUFFO0FBQUMsWUFBSUMsSUFBRThnQjtBQUFFQSxhQUFHO0FBQUUsWUFBRztBQUFDLGlCQUFPamhCLEVBQUVFLENBQUM7UUFBQyxVQUFBO0FBQVMrZ0IsY0FBRTlnQixHQUFNOGdCLE1BQUosTUFBUVEsR0FBRyxHQUFFL0ssR0FBRztRQUFFO01BQUM7QUFBRSxlQUFTbU8sR0FBRzdrQixHQUFFRSxHQUFFO0FBQUMsWUFBSUMsSUFBRSxJQUFFLFVBQVUsVUFBaUIsVUFBVSxDQUFDLE1BQXBCLFNBQXNCLFVBQVUsQ0FBQyxJQUFFO0FBQUssWUFBRyxDQUFDdWtCLEdBQUd4a0IsQ0FBQztBQUFFLGdCQUFNLE1BQU1ILEVBQUUsR0FBRyxDQUFDO0FBQUUsZUFBT29rQixHQUFHbmtCLEdBQUVFLEdBQUUsTUFBS0MsQ0FBQztNQUFDO0FBQUMsVUFBSTJrQixLQUFHLEVBQUMsUUFBTyxDQUFDeGQsSUFBR3VKLElBQUd0SixJQUFHQyxJQUFHQyxJQUFHbWIsSUFBRyxFQUFDLFNBQVEsTUFBRSxDQUFDLEVBQUMsR0FBRW1DLEtBQUcsRUFBQyx5QkFBd0IxYSxJQUFHLFlBQVcsR0FBRSxTQUFRLFVBQVMscUJBQW9CLFlBQVcsR0FDbGYyYSxLQUFHLEVBQUMsWUFBV0QsR0FBRyxZQUFXLFNBQVFBLEdBQUcsU0FBUSxxQkFBb0JBLEdBQUcscUJBQW9CLGdCQUFlQSxHQUFHLGdCQUFlLG1CQUFrQixNQUFLLDZCQUE0QixNQUFLLDZCQUE0QixNQUFLLGVBQWMsTUFBSyx5QkFBd0IsTUFBSyx5QkFBd0IsTUFBSyxvQkFBbUIsTUFBSyxnQkFBZSxNQUFLLHNCQUFxQnhoQixHQUFHLHdCQUF1Qix5QkFBd0IsU0FBU3ZELEdBQUU7QUFBQyxlQUFBQSxJQUFFaUosR0FBR2pKLENBQUMsR0FBZ0JBLE1BQVAsT0FBUyxPQUFLQSxFQUFFO01BQVMsR0FBRSx5QkFBd0Ira0IsR0FBRywyQkFDMWVQLElBQUcsNkJBQTRCLE1BQUssaUJBQWdCLE1BQUssY0FBYSxNQUFLLG1CQUFrQixNQUFLLGlCQUFnQixLQUFJO0FBQUUsVUFBaUIsT0FBTyxpQ0FBckIsUUFBeURTLEtBQUcsZ0NBQWtDLENBQUNBLEdBQUcsY0FBWUEsR0FBRztBQUFjLFlBQUc7QUFBQy9QLGVBQUcrUCxHQUFHLE9BQU9ELEVBQUUsR0FBRTdQLEtBQUc4UDtRQUFFLFFBQVM7UUFBQztBQUExRyxVQUFBQTtBQUE0R2xuQixTQUFRLHFEQUFtRCttQjtBQUFHL21CLFNBQVEsZUFBYThtQjtBQUNuWDltQixTQUFRLGNBQVksU0FBU2lDLEdBQUU7QUFBQyxZQUFTQSxLQUFOO0FBQVEsaUJBQU87QUFBSyxZQUFPQSxFQUFFLGFBQU47QUFBZSxpQkFBT0E7QUFBRSxZQUFJRSxJQUFFRixFQUFFO0FBQWdCLFlBQVlFLE1BQVQ7QUFBWSxnQkFBZ0IsT0FBT0YsRUFBRSxVQUF0QixhQUFtQyxNQUFNRCxFQUFFLEdBQUcsQ0FBQyxJQUFRLE1BQU1BLEVBQUUsS0FBSSxPQUFPLEtBQUtDLENBQUMsQ0FBQyxDQUFDO0FBQUcsZUFBQUEsSUFBRWlKLEdBQUcvSSxDQUFDLEdBQUVGLElBQVNBLE1BQVAsT0FBUyxPQUFLQSxFQUFFLFdBQWlCQTtNQUFDO0FBQUVqQyxTQUFRLFlBQVUsU0FBU2lDLEdBQUVFLEdBQUU7QUFBQyxZQUFJQyxJQUFFOGdCO0FBQUUsWUFBUTlnQixJQUFFO0FBQUksaUJBQU9ILEVBQUVFLENBQUM7QUFBRStnQixhQUFHO0FBQUUsWUFBRztBQUFDLGNBQUdqaEI7QUFBRSxtQkFBT3dXLEdBQUcsSUFBR3hXLEVBQUUsS0FBSyxNQUFLRSxDQUFDLENBQUM7UUFBQyxVQUFBO0FBQVMrZ0IsY0FBRTlnQixHQUFFdVcsR0FBRztRQUFDO01BQUM7QUFBRTNZLFNBQVEsVUFBUSxTQUFTaUMsR0FBRUUsR0FBRUMsR0FBRTtBQUFDLFlBQUcsQ0FBQ3VrQixHQUFHeGtCLENBQUM7QUFBRSxnQkFBTSxNQUFNSCxFQUFFLEdBQUcsQ0FBQztBQUFFLGVBQU82a0IsR0FBRyxNQUFLNWtCLEdBQUVFLEdBQUUsTUFBR0MsQ0FBQztNQUFDO0FBQ3JkcEMsU0FBUSxTQUFPLFNBQVNpQyxHQUFFRSxHQUFFQyxHQUFFO0FBQUMsWUFBRyxDQUFDdWtCLEdBQUd4a0IsQ0FBQztBQUFFLGdCQUFNLE1BQU1ILEVBQUUsR0FBRyxDQUFDO0FBQUUsZUFBTzZrQixHQUFHLE1BQUs1a0IsR0FBRUUsR0FBRSxPQUFHQyxDQUFDO01BQUM7QUFBRXBDLFNBQVEseUJBQXVCLFNBQVNpQyxHQUFFO0FBQUMsWUFBRyxDQUFDMGtCLEdBQUcxa0IsQ0FBQztBQUFFLGdCQUFNLE1BQU1ELEVBQUUsRUFBRSxDQUFDO0FBQUUsZUFBT0MsRUFBRSx1QkFBcUJxakIsR0FBRyxXQUFVO0FBQUN1QixhQUFHLE1BQUssTUFBSzVrQixHQUFFLE9BQUcsV0FBVTtBQUFDQSxjQUFFLHNCQUFvQixNQUFLQSxFQUFFbVQsRUFBRSxJQUFFO1VBQUksQ0FBQztRQUFDLENBQUMsR0FBRSxRQUFJO01BQUU7QUFBRXBWLFNBQVEsMEJBQXdCcWxCO0FBQUdybEIsU0FBUSx3QkFBc0IsU0FBU2lDLEdBQUVFLEdBQUU7QUFBQyxlQUFPMmtCLEdBQUc3a0IsR0FBRUUsR0FBRSxJQUFFLFVBQVUsVUFBaUIsVUFBVSxDQUFDLE1BQXBCLFNBQXNCLFVBQVUsQ0FBQyxJQUFFLElBQUk7TUFBQztBQUNuYm5DLFNBQVEsc0NBQW9DLFNBQVNpQyxHQUFFRSxHQUFFQyxHQUFFWSxHQUFFO0FBQUMsWUFBRyxDQUFDMmpCLEdBQUd2a0IsQ0FBQztBQUFFLGdCQUFNLE1BQU1KLEVBQUUsR0FBRyxDQUFDO0FBQUUsWUFBU0MsS0FBTixRQUFrQkEsRUFBRSxvQkFBWDtBQUEyQixnQkFBTSxNQUFNRCxFQUFFLEVBQUUsQ0FBQztBQUFFLGVBQU82a0IsR0FBRzVrQixHQUFFRSxHQUFFQyxHQUFFLE9BQUdZLENBQUM7TUFBQztBQUFFaEQsU0FBUSxVQUFRO0lBQUEsQ0FBQTtBQ3hTN0wsUUFBQW1uQixLQUFBcG5CLEVBQUEsQ0FBQUMsSUFBQUMsT0FBQTtBQUFBO0FBRUEsZUFBU21uQixLQUFXO0FBRWxCLFlBQ0UsRUFBQSxPQUFPLGlDQUFtQyxPQUMxQyxPQUFPLCtCQUErQixZQUFhO0FBY3JELGNBQUk7QUFFRiwyQ0FBK0IsU0FBU0EsRUFBUTtVQUNsRCxTQUFTQyxHQUFLO0FBR1osb0JBQVEsTUFBTUEsQ0FBRztVQUNuQjtNQUNGO0FBS0VELFNBQVMsR0FDVG5uQixHQUFPLFVBQVUsR0FBQTtJQUFBLENBQUE7QUNsQ25CLFFBQUFxbkIsS0FBQXZuQixFQUFBQyxRQUFBO0FBQUE7QUFTYSxVQUFJK0MsS0FBRSxFQUFBO0FBQWlCLGVBQVNHLEdBQUVqQixHQUFFRSxHQUFFO0FBQUMsZUFBT0YsTUFBSUUsTUFBUUYsTUFBSixLQUFPLElBQUVBLE1BQUksSUFBRUUsTUFBSUYsTUFBSUEsS0FBR0UsTUFBSUE7TUFBQztBQUFDLFVBQUljLEtBQWUsT0FBTyxPQUFPLE1BQTNCLGFBQThCLE9BQU8sS0FBR0MsSUFBRTNCLEtBQUV3QixHQUFFLFVBQVNNLEtBQUVOLEdBQUUsV0FBVW5DLEtBQUVtQyxHQUFFLGlCQUFnQnZCLEtBQUV1QixHQUFFO0FBQWMsZUFBU3RCLEdBQUVRLEdBQUVFLEdBQUU7QUFBQyxZQUFJYSxJQUFFYixFQUFFLEdBQUVpQixJQUFFN0IsR0FBRSxFQUFDLE1BQUssRUFBQyxPQUFNeUIsR0FBRSxhQUFZYixFQUFDLEVBQUMsQ0FBQyxHQUFFQyxJQUFFZ0IsRUFBRSxDQUFDLEVBQUUsTUFBS0QsSUFBRUMsRUFBRSxDQUFDO0FBQUUsZUFBQXhDLEdBQUUsV0FBVTtBQUFDd0IsWUFBRSxRQUFNWSxHQUFFWixFQUFFLGNBQVlELEdBQUVULEdBQUVVLENBQUMsS0FBR2UsRUFBRSxFQUFDLE1BQUtmLEVBQUMsQ0FBQztRQUFDLEdBQUUsQ0FBQ0gsR0FBRWUsR0FBRWIsQ0FBQyxDQUFDLEdBQUVrQixHQUFFLFdBQVU7QUFBQyxpQkFBQTNCLEdBQUVVLENBQUMsS0FBR2UsRUFBRSxFQUFDLE1BQUtmLEVBQUMsQ0FBQyxHQUFTSCxFQUFFLFdBQVU7QUFBQ1AsZUFBRVUsQ0FBQyxLQUFHZSxFQUFFLEVBQUMsTUFBS2YsRUFBQyxDQUFDO1VBQUMsQ0FBQztRQUFDLEdBQUUsQ0FBQ0gsQ0FBQyxDQUFDLEdBQUVULEdBQUV3QixDQUFDLEdBQVNBO01BQUM7QUFDbGMsZUFBU3RCLEdBQUVPLEdBQUU7QUFBQyxZQUFJRSxJQUFFRixFQUFFO0FBQVlBLFlBQUVBLEVBQUU7QUFBTSxZQUFHO0FBQUMsY0FBSWUsSUFBRWIsRUFBRTtBQUFFLGlCQUFNLENBQUNjLEdBQUVoQixHQUFFZSxDQUFDO1FBQUMsUUFBUztBQUFDLGlCQUFNO1FBQUU7TUFBQztBQUFDLGVBQVNyQixHQUFFTSxHQUFFRSxHQUFFO0FBQUMsZUFBT0EsRUFBRTtNQUFDO0FBQUMsVUFBSVAsS0FBZ0IsT0FBTyxTQUFyQixPQUEyQyxPQUFPLE9BQU8sV0FBNUIsT0FBb0QsT0FBTyxPQUFPLFNBQVMsZ0JBQXJDLE1BQW1ERCxLQUFFRjtBQUFFekIsU0FBUSx1QkFBOEIrQyxHQUFFLHlCQUFYLFNBQWdDQSxHQUFFLHVCQUFxQm5CO0lBQUFBLENBQUFBO0FDVjFVLFFBQUEybEIsS0FBQXhuQixFQUFBLENBQUFDLElBQUFDLE9BQUE7QUFBQTtBQUdFQSxTQUFPLFVBQVUsR0FBQTtJQUFBLENBQUE7QUNIbkIsUUFBQXVuQixLQUFBem5CLEVBQUFDLFFBQUE7QUFBQTtBQVNhLFVBQUlrRCxLQUFFLEVBQUEsR0FBaUJ0QyxLQUFFLEdBQUE7QUFBd0MsZUFBU1ksR0FBRVMsR0FBRUUsR0FBRTtBQUFDLGVBQU9GLE1BQUlFLE1BQVFGLE1BQUosS0FBTyxJQUFFQSxNQUFJLElBQUVFLE1BQUlGLE1BQUlBLEtBQUdFLE1BQUlBO01BQUM7QUFBQyxVQUFJVixLQUFlLE9BQU8sT0FBTyxNQUEzQixhQUE4QixPQUFPLEtBQUdELElBQUVFLEtBQUVkLEdBQUUsc0JBQXFCZSxLQUFFdUIsR0FBRSxRQUFPdEIsS0FBRXNCLEdBQUUsV0FBVXJCLEtBQUVxQixHQUFFLFNBQVFwQixLQUFFb0IsR0FBRTtBQUMvUGxELFNBQVEsbUNBQWlDLFNBQVNpQyxHQUFFRSxHQUFFWSxHQUFFeEIsR0FBRTRCLEdBQUU7QUFBQyxZQUFJZixJQUFFVCxHQUFFLElBQUk7QUFBRSxZQUFVUyxFQUFFLFlBQVQsTUFBaUI7QUFBQyxjQUFJZ0IsSUFBRSxFQUFDLFVBQVMsT0FBRyxPQUFNLEtBQUk7QUFBRWhCLFlBQUUsVUFBUWdCO1FBQUM7QUFBTUEsY0FBRWhCLEVBQUU7QUFBUUEsWUFBRVAsR0FBRSxXQUFVO0FBQUMsbUJBQVNJLEVBQUVBLEdBQUU7QUFBQyxnQkFBRyxDQUFDRyxHQUFFO0FBQWlCLGtCQUFoQkEsSUFBRSxNQUFHWSxJQUFFZixHQUFFQSxJQUFFVixFQUFFVSxDQUFDLEdBQWNrQixNQUFULFVBQVlDLEVBQUUsVUFBUztBQUFDLG9CQUFJakIsSUFBRWlCLEVBQUU7QUFBTSxvQkFBR0QsRUFBRWhCLEdBQUVGLENBQUM7QUFBRSx5QkFBT2dCLElBQUVkO2NBQUM7QUFBQyxxQkFBT2MsSUFBRWhCO1lBQUM7QUFBSyxnQkFBSkUsSUFBRWMsR0FBS3hCLEdBQUV1QixHQUFFZixDQUFDO0FBQUUscUJBQU9FO0FBQUUsZ0JBQUlZLElBQUV4QixFQUFFVSxDQUFDO0FBQUUsbUJBQVlrQixNQUFULFVBQVlBLEVBQUVoQixHQUFFWSxDQUFDLElBQVNaLEtBQUVhLElBQUVmLEdBQVNnQixJQUFFRjtVQUFDO0FBQUMsY0FBSVgsSUFBRSxPQUFHWSxHQUFFQyxHQUFFSSxJQUFXTixNQUFULFNBQVcsT0FBS0E7QUFBRSxpQkFBTSxDQUFDLFdBQVU7QUFBQyxtQkFBT2QsRUFBRUUsRUFBRSxDQUFDO1VBQUMsR0FBU2tCLE1BQVAsT0FBUyxTQUFPLFdBQVU7QUFBQyxtQkFBT3BCLEVBQUVvQixFQUFFLENBQUM7VUFBQyxDQUFDO1FBQUMsR0FBRSxDQUFDbEIsR0FBRVksR0FBRXhCLEdBQUU0QixDQUFDLENBQUM7QUFBRSxZQUFJSCxJQUFFdEIsR0FBRU8sR0FBRUcsRUFBRSxDQUFDLEdBQUVBLEVBQUUsQ0FBQyxDQUFDO0FBQ3JmLGVBQUFSLEdBQUUsV0FBVTtBQUFDd0IsWUFBRSxXQUFTLE1BQUdBLEVBQUUsUUFBTUo7UUFBQyxHQUFFLENBQUNBLENBQUMsQ0FBQyxHQUFFbEIsR0FBRWtCLENBQUMsR0FBU0E7TUFBQztJQUFBLENBQUE7QUNYeEQsUUFBQXlrQixLQUFBMW5CLEVBQUEsQ0FBQUMsSUFBQUMsT0FBQTtBQUFBO0FBR0VBLFNBQU8sVUFBVSxHQUFBO0lBQUEsQ0FBQTtBQ0hKLGFBQVJ5bkIsSUFBNEI7QUFDakMsYUFBQUEsSUFBVyxPQUFPLFNBQVMsT0FBTyxPQUFPLEtBQUssSUFBSSxTQUFVM21CLEdBQVE7QUFDbEUsaUJBQVNMLElBQUksR0FBR0EsSUFBSSxVQUFVLFFBQVFBLEtBQUs7QUFDekMsY0FBSU0sSUFBUyxVQUFVTixDQUFDO0FBQ3hCLG1CQUFTVyxLQUFPTDtBQUNWLG1CQUFPLFVBQVUsZUFBZSxLQUFLQSxHQUFRSyxDQUFHLE1BQ2xETixFQUFPTSxDQUFHLElBQUlMLEVBQU9LLENBQUc7UUFHOUI7QUFDQSxlQUFPTjtNQUNULEdBQ08ybUIsRUFBUyxNQUFNLE1BQU0sU0FBUztJQUN2QztBQWJBLFFBQUFDLElBQUFDLEdBQUEsTUFBQTtJQUFBLENBQUE7QUNBQSxRQUFBQyxLQUFBOW5CLEVBQUFDLFFBQUE7QUFBQTtBQVNhLFVBQUltQyxLQUFlLE9BQU8sVUFBcEIsY0FBNEIsT0FBTyxLQUFJQyxLQUFFRCxLQUFFLE9BQU8sSUFBSSxlQUFlLElBQUUsT0FBTWEsS0FBRWIsS0FBRSxPQUFPLElBQUksY0FBYyxJQUFFLE9BQU1ZLEtBQUVaLEtBQUUsT0FBTyxJQUFJLGdCQUFnQixJQUFFLE9BQU1pQixLQUFFakIsS0FBRSxPQUFPLElBQUksbUJBQW1CLElBQUUsT0FBTWdCLEtBQUVoQixLQUFFLE9BQU8sSUFBSSxnQkFBZ0IsSUFBRSxPQUFNZSxLQUFFZixLQUFFLE9BQU8sSUFBSSxnQkFBZ0IsSUFBRSxPQUFNYyxLQUFFZCxLQUFFLE9BQU8sSUFBSSxlQUFlLElBQUUsT0FBTVosS0FBRVksS0FBRSxPQUFPLElBQUksa0JBQWtCLElBQUUsT0FBTWtCLEtBQUVsQixLQUFFLE9BQU8sSUFBSSx1QkFBdUIsSUFBRSxPQUFNdkIsS0FBRXVCLEtBQUUsT0FBTyxJQUFJLG1CQUFtQixJQUFFLE9BQU1YLEtBQUVXLEtBQUUsT0FBTyxJQUFJLGdCQUFnQixJQUFFLE9BQU1WLEtBQUVVLEtBQ3BmLE9BQU8sSUFBSSxxQkFBcUIsSUFBRSxPQUFNVCxLQUFFUyxLQUFFLE9BQU8sSUFBSSxZQUFZLElBQUUsT0FBTVIsS0FBRVEsS0FBRSxPQUFPLElBQUksWUFBWSxJQUFFLE9BQU1OLEtBQUVNLEtBQUUsT0FBTyxJQUFJLGFBQWEsSUFBRSxPQUFNTCxLQUFFSyxLQUFFLE9BQU8sSUFBSSxtQkFBbUIsSUFBRSxPQUFNSixLQUFFSSxLQUFFLE9BQU8sSUFBSSxpQkFBaUIsSUFBRSxPQUFNSCxLQUFFRyxLQUFFLE9BQU8sSUFBSSxhQUFhLElBQUU7QUFDbFEsZUFBU0QsR0FBRUQsR0FBRTtBQUFDLFlBQWMsT0FBT0EsS0FBbEIsWUFBNEJBLE1BQVAsTUFBUztBQUFDLGNBQUlMLElBQUVLLEVBQUU7QUFBUyxrQkFBT0wsR0FBRTtZQUFDLEtBQUtRO0FBQUUsc0JBQU9ILElBQUVBLEVBQUUsTUFBS0EsR0FBRTtnQkFBQyxLQUFLVjtnQkFBRSxLQUFLOEI7Z0JBQUUsS0FBS047Z0JBQUUsS0FBS0k7Z0JBQUUsS0FBS0M7Z0JBQUUsS0FBSzVCO0FBQUUseUJBQU9TO2dCQUFFO0FBQVEsMEJBQU9BLElBQUVBLEtBQUdBLEVBQUUsVUFBU0EsR0FBRTtvQkFBQyxLQUFLZ0I7b0JBQUUsS0FBS3JDO29CQUFFLEtBQUtlO29CQUFFLEtBQUtEO29CQUFFLEtBQUt3QjtBQUFFLDZCQUFPakI7b0JBQUU7QUFBUSw2QkFBT0w7a0JBQUM7Y0FBQztZQUFDLEtBQUtvQjtBQUFFLHFCQUFPcEI7VUFBQztRQUFDO01BQUM7QUFBQyxlQUFTUyxHQUFFSixHQUFFO0FBQUMsZUFBT0MsR0FBRUQsQ0FBQyxNQUFJb0I7TUFBQztBQUFDckQsU0FBUSxZQUFVdUI7QUFBRXZCLFNBQVEsaUJBQWVxRDtBQUFFckQsU0FBUSxrQkFBZ0JpRDtBQUFFakQsU0FBUSxrQkFBZ0JrRDtBQUFFbEQsU0FBUSxVQUFRb0M7QUFBRXBDLFNBQVEsYUFBV1k7QUFBRVosU0FBUSxXQUFTK0M7QUFBRS9DLFNBQVEsT0FBSzJCO0FBQUUzQixTQUFRLE9BQUswQjtBQUFFMUIsU0FBUSxTQUFPZ0Q7QUFDaGZoRCxTQUFRLFdBQVNtRDtBQUFFbkQsU0FBUSxhQUFXb0Q7QUFBRXBELFNBQVEsV0FBU3dCO0FBQUV4QixTQUFRLGNBQVksU0FBU2lDLEdBQUU7QUFBQyxlQUFPSSxHQUFFSixDQUFDLEtBQUdDLEdBQUVELENBQUMsTUFBSVY7TUFBQztBQUFFdkIsU0FBUSxtQkFBaUJxQztBQUFFckMsU0FBUSxvQkFBa0IsU0FBU2lDLEdBQUU7QUFBQyxlQUFPQyxHQUFFRCxDQUFDLE1BQUlnQjtNQUFDO0FBQUVqRCxTQUFRLG9CQUFrQixTQUFTaUMsR0FBRTtBQUFDLGVBQU9DLEdBQUVELENBQUMsTUFBSWlCO01BQUM7QUFBRWxELFNBQVEsWUFBVSxTQUFTaUMsR0FBRTtBQUFDLGVBQWlCLE9BQU9BLEtBQWxCLFlBQTRCQSxNQUFQLFFBQVVBLEVBQUUsYUFBV0c7TUFBQztBQUFFcEMsU0FBUSxlQUFhLFNBQVNpQyxHQUFFO0FBQUMsZUFBT0MsR0FBRUQsQ0FBQyxNQUFJckI7TUFBQztBQUFFWixTQUFRLGFBQVcsU0FBU2lDLEdBQUU7QUFBQyxlQUFPQyxHQUFFRCxDQUFDLE1BQUljO01BQUM7QUFBRS9DLFNBQVEsU0FBTyxTQUFTaUMsR0FBRTtBQUFDLGVBQU9DLEdBQUVELENBQUMsTUFBSU47TUFBQztBQUMxZDNCLFNBQVEsU0FBTyxTQUFTaUMsR0FBRTtBQUFDLGVBQU9DLEdBQUVELENBQUMsTUFBSVA7TUFBQztBQUFFMUIsU0FBUSxXQUFTLFNBQVNpQyxHQUFFO0FBQUMsZUFBT0MsR0FBRUQsQ0FBQyxNQUFJZTtNQUFDO0FBQUVoRCxTQUFRLGFBQVcsU0FBU2lDLEdBQUU7QUFBQyxlQUFPQyxHQUFFRCxDQUFDLE1BQUlrQjtNQUFDO0FBQUVuRCxTQUFRLGVBQWEsU0FBU2lDLEdBQUU7QUFBQyxlQUFPQyxHQUFFRCxDQUFDLE1BQUltQjtNQUFDO0FBQUVwRCxTQUFRLGFBQVcsU0FBU2lDLEdBQUU7QUFBQyxlQUFPQyxHQUFFRCxDQUFDLE1BQUlUO01BQUM7QUFDMU94QixTQUFRLHFCQUFtQixTQUFTaUMsR0FBRTtBQUFDLGVBQWlCLE9BQU9BLEtBQWxCLFlBQWtDLE9BQU9BLEtBQXBCLGNBQXVCQSxNQUFJYyxNQUFHZCxNQUFJb0IsTUFBR3BCLE1BQUlrQixNQUFHbEIsTUFBSW1CLE1BQUduQixNQUFJVCxNQUFHUyxNQUFJUixNQUFjLE9BQU9RLEtBQWxCLFlBQTRCQSxNQUFQLFNBQVdBLEVBQUUsYUFBV04sTUFBR00sRUFBRSxhQUFXUCxNQUFHTyxFQUFFLGFBQVdpQixNQUFHakIsRUFBRSxhQUFXZ0IsTUFBR2hCLEVBQUUsYUFBV3JCLE1BQUdxQixFQUFFLGFBQVdILE1BQUdHLEVBQUUsYUFBV0YsTUFBR0UsRUFBRSxhQUFXRCxNQUFHQyxFQUFFLGFBQVdKO01BQUU7QUFBRTdCLFNBQVEsU0FBT2tDO0lBQUFBLENBQUFBO0FDZG5VLFFBQUE0bEIsS0FBQS9uQixFQUFBLENBQUFDLElBQUFDLE9BQUE7QUFBQTtBQUdFQSxTQUFPLFVBQVUsR0FBQTtJQUFBLENBQUE7QUNIbkIsUUFBQThuQixLQUFBaG9CLEVBQUEsQ0FBQUMsSUFBQUMsT0FBQTtBQUFBO0FBRUEsVUFBSStuQixLQUFVLEdBQUEsR0FNVkMsS0FBZ0IsRUFDbEIsbUJBQW1CLE1BQ25CLGFBQWEsTUFDYixjQUFjLE1BQ2QsY0FBYyxNQUNkLGFBQWEsTUFDYixpQkFBaUIsTUFDakIsMEJBQTBCLE1BQzFCLDBCQUEwQixNQUMxQixRQUFRLE1BQ1IsV0FBVyxNQUNYLE1BQU0sS0FDUixHQUNJQyxLQUFnQixFQUNsQixNQUFNLE1BQ04sUUFBUSxNQUNSLFdBQVcsTUFDWCxRQUFRLE1BQ1IsUUFBUSxNQUNSLFdBQVcsTUFDWCxPQUFPLEtBQ1QsR0FDSUMsS0FBc0IsRUFDeEIsVUFBWSxNQUNaLFFBQVEsTUFDUixjQUFjLE1BQ2QsYUFBYSxNQUNiLFdBQVcsS0FDYixHQUNJQyxLQUFlLEVBQ2pCLFVBQVksTUFDWixTQUFTLE1BQ1QsY0FBYyxNQUNkLGFBQWEsTUFDYixXQUFXLE1BQ1gsTUFBTSxLQUNSLEdBQ0lDLEtBQWUsQ0FBQztBQUNwQkEsU0FBYUwsR0FBUSxVQUFVLElBQUlHO0FBQ25DRSxTQUFhTCxHQUFRLElBQUksSUFBSUk7QUFFN0IsZUFBU0UsR0FBV0MsR0FBVztBQUU3QixlQUFJUCxHQUFRLE9BQU9PLENBQVMsSUFDbkJILEtBSUZDLEdBQWFFLEVBQVUsUUFBVyxLQUFLTjtNQUNoRDtBQUVBLFVBQUlPLEtBQWlCLE9BQU8sZ0JBQ3hCQyxLQUFzQixPQUFPLHFCQUM3QnZvQixLQUF3QixPQUFPLHVCQUMvQndvQixLQUEyQixPQUFPLDBCQUNsQ0MsS0FBaUIsT0FBTyxnQkFDeEJDLEtBQWtCLE9BQU87QUFDN0IsZUFBU0MsR0FBcUJDLEdBQWlCQyxHQUFpQkMsR0FBVztBQUN6RSxZQUFJLE9BQU9ELEtBQW9CLFVBQVU7QUFFdkMsY0FBSUgsSUFBaUI7QUFDbkIsZ0JBQUlLLElBQXFCTixHQUFlSSxDQUFlO0FBRW5ERSxpQkFBc0JBLE1BQXVCTCxNQUMvQ0MsR0FBcUJDLEdBQWlCRyxHQUFvQkQsQ0FBUztVQUV2RTtBQUVBLGNBQUlFLElBQU9ULEdBQW9CTSxDQUFlO0FBRTFDN29CLGlCQUNGZ3BCLElBQU9BLEVBQUssT0FBT2hwQixHQUFzQjZvQixDQUFlLENBQUM7QUFNM0QsbUJBSElJLElBQWdCYixHQUFXUSxDQUFlLEdBQzFDTSxJQUFnQmQsR0FBV1MsQ0FBZSxHQUVyQ3JvQixJQUFJLEdBQUdBLElBQUl3b0IsRUFBSyxRQUFRLEVBQUV4b0IsR0FBRztBQUNwQyxnQkFBSVcsSUFBTTZuQixFQUFLeG9CLENBQUM7QUFFaEIsZ0JBQUksQ0FBQ3duQixHQUFjN21CLENBQUcsS0FBSyxFQUFFMm5CLEtBQWFBLEVBQVUzbkIsQ0FBRyxNQUFNLEVBQUUrbkIsS0FBaUJBLEVBQWMvbkIsQ0FBRyxNQUFNLEVBQUU4bkIsS0FBaUJBLEVBQWM5bkIsQ0FBRyxJQUFJO0FBQzdJLGtCQUFJZ29CLElBQWFYLEdBQXlCSyxHQUFpQjFuQixDQUFHO0FBRTlELGtCQUFJO0FBRUZtbkIsbUJBQWVNLEdBQWlCem5CLEdBQUtnb0IsQ0FBVTtjQUNqRCxRQUFZO2NBQUM7WUFDZjtVQUNGO1FBQ0Y7QUFFQSxlQUFPUDtNQUNUO0FBRUE3b0IsU0FBTyxVQUFVNG9CO0lBQUFBLENBQUFBO0FDdEdqQixRQUFBaEIsS0FBQTluQixFQUFBQyxRQUFBO0FBQUE7QUFTYSxVQUFJbUMsS0FBRSxPQUFPLElBQUksZUFBZSxHQUFFQyxLQUFFLE9BQU8sSUFBSSxjQUFjLEdBQUVZLEtBQUUsT0FBTyxJQUFJLGdCQUFnQixHQUFFRCxLQUFFLE9BQU8sSUFBSSxtQkFBbUIsR0FBRUssS0FBRSxPQUFPLElBQUksZ0JBQWdCLEdBQUVELEtBQUUsT0FBTyxJQUFJLGdCQUFnQixHQUFFRCxLQUFFLE9BQU8sSUFBSSxlQUFlLEdBQUVELEtBQUUsT0FBTyxJQUFJLHNCQUFzQixHQUFFMUIsS0FBRSxPQUFPLElBQUksbUJBQW1CLEdBQUU4QixLQUFFLE9BQU8sSUFBSSxnQkFBZ0IsR0FBRXpDLEtBQUUsT0FBTyxJQUFJLHFCQUFxQixHQUFFWSxLQUFFLE9BQU8sSUFBSSxZQUFZLEdBQUVDLEtBQUUsT0FBTyxJQUFJLFlBQVksR0FBRUUsS0FBRSxPQUFPLElBQUksaUJBQWlCLEdBQUVDO0FBQUVBLFdBQUUsT0FBTyxJQUFJLHdCQUF3QjtBQUNoZixlQUFTQyxHQUFFSSxHQUFFO0FBQUMsWUFBYyxPQUFPQSxLQUFsQixZQUE0QkEsTUFBUCxNQUFTO0FBQUMsY0FBSVAsSUFBRU8sRUFBRTtBQUFTLGtCQUFPUCxHQUFFO1lBQUMsS0FBS1M7QUFBRSxzQkFBT0YsSUFBRUEsRUFBRSxNQUFLQSxHQUFFO2dCQUFDLEtBQUtlO2dCQUFFLEtBQUtJO2dCQUFFLEtBQUtMO2dCQUFFLEtBQUtNO2dCQUFFLEtBQUt6QztBQUFFLHlCQUFPcUI7Z0JBQUU7QUFBUSwwQkFBT0EsSUFBRUEsS0FBR0EsRUFBRSxVQUFTQSxHQUFFO29CQUFDLEtBQUtnQjtvQkFBRSxLQUFLQztvQkFBRSxLQUFLM0I7b0JBQUUsS0FBS0U7b0JBQUUsS0FBS0Q7b0JBQUUsS0FBSzJCO0FBQUUsNkJBQU9sQjtvQkFBRTtBQUFRLDZCQUFPUDtrQkFBQztjQUFDO1lBQUMsS0FBS1U7QUFBRSxxQkFBT1Y7VUFBQztRQUFDO01BQUM7QUFBQzFCLFNBQVEsa0JBQWdCa0Q7QUFBRWxELFNBQVEsa0JBQWdCbUQ7QUFBRW5ELFNBQVEsVUFBUW1DO0FBQUVuQyxTQUFRLGFBQVd1QjtBQUFFdkIsU0FBUSxXQUFTZ0Q7QUFBRWhELFNBQVEsT0FBS3lCO0FBQUV6QixTQUFRLE9BQUt3QjtBQUFFeEIsU0FBUSxTQUFPb0M7QUFBRXBDLFNBQVEsV0FBU29EO0FBQUVwRCxTQUFRLGFBQVcrQztBQUFFL0MsU0FBUSxXQUFTcUQ7QUFDaGVyRCxTQUFRLGVBQWFZO0FBQUVaLFNBQVEsY0FBWSxXQUFVO0FBQUMsZUFBTTtNQUFFO0FBQUVBLFNBQVEsbUJBQWlCLFdBQVU7QUFBQyxlQUFNO01BQUU7QUFBRUEsU0FBUSxvQkFBa0IsU0FBU2lDLEdBQUU7QUFBQyxlQUFPSixHQUFFSSxDQUFDLE1BQUlpQjtNQUFDO0FBQUVsRCxTQUFRLG9CQUFrQixTQUFTaUMsR0FBRTtBQUFDLGVBQU9KLEdBQUVJLENBQUMsTUFBSWtCO01BQUM7QUFBRW5ELFNBQVEsWUFBVSxTQUFTaUMsR0FBRTtBQUFDLGVBQWlCLE9BQU9BLEtBQWxCLFlBQTRCQSxNQUFQLFFBQVVBLEVBQUUsYUFBV0U7TUFBQztBQUFFbkMsU0FBUSxlQUFhLFNBQVNpQyxHQUFFO0FBQUMsZUFBT0osR0FBRUksQ0FBQyxNQUFJVjtNQUFDO0FBQUV2QixTQUFRLGFBQVcsU0FBU2lDLEdBQUU7QUFBQyxlQUFPSixHQUFFSSxDQUFDLE1BQUllO01BQUM7QUFBRWhELFNBQVEsU0FBTyxTQUFTaUMsR0FBRTtBQUFDLGVBQU9KLEdBQUVJLENBQUMsTUFBSVI7TUFBQztBQUFFekIsU0FBUSxTQUFPLFNBQVNpQyxHQUFFO0FBQUMsZUFBT0osR0FBRUksQ0FBQyxNQUFJVDtNQUFDO0FBQ3ZleEIsU0FBUSxXQUFTLFNBQVNpQyxHQUFFO0FBQUMsZUFBT0osR0FBRUksQ0FBQyxNQUFJRztNQUFDO0FBQUVwQyxTQUFRLGFBQVcsU0FBU2lDLEdBQUU7QUFBQyxlQUFPSixHQUFFSSxDQUFDLE1BQUltQjtNQUFDO0FBQUVwRCxTQUFRLGVBQWEsU0FBU2lDLEdBQUU7QUFBQyxlQUFPSixHQUFFSSxDQUFDLE1BQUljO01BQUM7QUFBRS9DLFNBQVEsYUFBVyxTQUFTaUMsR0FBRTtBQUFDLGVBQU9KLEdBQUVJLENBQUMsTUFBSW9CO01BQUM7QUFBRXJELFNBQVEsaUJBQWUsU0FBU2lDLEdBQUU7QUFBQyxlQUFPSixHQUFFSSxDQUFDLE1BQUlyQjtNQUFDO0FBQ2xQWixTQUFRLHFCQUFtQixTQUFTaUMsR0FBRTtBQUFDLGVBQWlCLE9BQU9BLEtBQWxCLFlBQWtDLE9BQU9BLEtBQXBCLGNBQXVCQSxNQUFJZSxNQUFHZixNQUFJbUIsTUFBR25CLE1BQUljLE1BQUdkLE1BQUlvQixNQUFHcEIsTUFBSXJCLE1BQUdxQixNQUFJTixNQUFjLE9BQU9NLEtBQWxCLFlBQTRCQSxNQUFQLFNBQVdBLEVBQUUsYUFBV1IsTUFBR1EsRUFBRSxhQUFXVCxNQUFHUyxFQUFFLGFBQVdrQixNQUFHbEIsRUFBRSxhQUFXaUIsTUFBR2pCLEVBQUUsYUFBV1YsTUFBR1UsRUFBRSxhQUFXTCxNQUFZSyxFQUFFLGdCQUFYO01BQTZCO0FBQUVqQyxTQUFRLFNBQU82QjtJQUFBQSxDQUFBQTtBQ2JqVCxRQUFBaW1CLEtBQUEvbkIsRUFBQSxDQUFBQyxJQUFBQyxPQUFBO0FBQUE7QUFHRUEsU0FBTyxVQUFVLEdBQUE7SUFBQSxDQUFBO0FDSG5CLFFBQUFxcEIsS0FBQXZwQixFQUFBLENBQUFDLElBQUFDLE9BQUE7QUFBQTtBQUlBLGVBQVNzcEIsR0FBUUMsR0FBS0MsR0FBVTtBQUc5QixpQkFGSVAsSUFBT00sRUFBSSxLQUFLLEdBQ2hCRSxHQUNFLEVBQUVBLElBQU9SLEVBQUssS0FBSyxHQUFHO0FBQzFCTyxZQUFVRCxFQUFJLElBQUlFLEVBQUssS0FBSyxHQUFHQSxFQUFLLE9BQU9GLENBQUc7TUFFbEQ7QUFFQSxVQUFJRyxLQUFZLFdBQVc7QUFDekIsWUFBSUM7QUFDQSxlQUFPLE1BQVEsUUFDakJBLElBQVUsS0FFTCxJQUFJLFVBQVUsU0FDakIsSUFBSSxVQUFVLE9BQU8sV0FBVztBQUM5QixjQUFJVixJQUFPLENBQUM7QUFDWixpQkFBQSxLQUFLLFFBQVEsU0FBU1csR0FBTXhvQixHQUFLO0FBQy9CNm5CLGNBQUssS0FBSzduQixDQUFHO1VBQ2YsQ0FBQyxHQUNNNm5CO1FBQ1Q7QUFJSixpQkFBU1MsRUFBU0csR0FBVTtBQUMxQixjQUFJQyxJQUFPO0FBRVhBLFlBQUssT0FBT0gsR0FFUkQsRUFBUyxRQUNYSSxFQUFLLE9BQU9KLEVBQVMsTUFHdkJJLEVBQUssSUFBSUEsRUFBSyxPQUFPLElBQUlBLEVBQUssU0FBUyxDQUFDLEdBRXBDRCxLQUNGQSxFQUFTLFFBQVEsU0FBU3BwQixHQUFHO0FBQzNCcXBCLGNBQUssSUFBSXJwQixFQUFFLENBQUMsR0FBR0EsRUFBRSxDQUFDLENBQUM7VUFDckIsQ0FBQztRQUVMO0FBTUFpcEIsVUFBUyxVQUFVLE1BQU0sU0FBU3RvQixHQUFLO0FBQ3JDLGlCQUFPLEtBQUssT0FBTyxLQUFLLEVBQUUsSUFBSUEsQ0FBRyxJQUFJLEtBQUssRUFBRUEsQ0FBRztRQUNqRCxHQU1Bc29CLEVBQVMsVUFBVSxNQUFNLFNBQVN0b0IsR0FBS2YsR0FBSztBQUMxQyxjQUFJMHBCLElBQU8sTUFBTSxVQUFVLE1BQU0sS0FBSyxTQUFTO0FBRS9DM29CLGNBQU0yb0IsRUFBSyxNQUFNO0FBRWpCLGNBQUlDLElBQVEsS0FBSyxJQUFJNW9CLENBQUc7QUFDeEIsaUJBQUs0b0IsTUFDSEEsSUFBUSxDQUFDLEdBQ0wsS0FBSyxPQUNQLEtBQUssRUFBRSxJQUFJNW9CLEdBQUs0b0IsQ0FBSyxJQUVyQixLQUFLLEVBQUU1b0IsQ0FBRyxJQUFJNG9CLElBR2xCLE1BQU0sVUFBVSxLQUFLLE1BQU1BLEdBQU9ELENBQUksR0FDL0I7UUFDVCxHQU9BTCxFQUFTLFVBQVUsU0FBUyxTQUFTdG9CLEdBQUtmLEdBQUs7QUFDN0MsY0FBSSxDQUFDLEtBQUssSUFBSWUsQ0FBRztBQUNmLG1CQUFPO0FBRVQsY0FBSSxVQUFVLFVBQVU7QUFDdEIsbUJBQUEsS0FBSyxPQUFRLEtBQUssRUFBRSxPQUFPQSxDQUFHLElBQU0sT0FBTyxLQUFLLEVBQUVBLENBQUcsR0FDOUM7QUFFUCxjQUFJNG9CLElBQVEsS0FBSyxJQUFJNW9CLENBQUcsR0FDcEI2b0IsSUFBTUQsRUFBTSxRQUFRM3BCLENBQUc7QUFDM0IsaUJBQUk0cEIsS0FBTyxNQUNURCxFQUFNLE9BQU9DLEdBQUssQ0FBQyxHQUNaLFFBSUo7UUFDVCxHQU9BUCxFQUFTLFVBQVUsTUFBTSxTQUFTdG9CLEdBQUtmLEdBQUs7QUFDMUMsY0FBSTZwQixJQUFTLEtBQUssT0FBTyxLQUFLLEVBQUUsSUFBSTlvQixDQUFHLElBQUksS0FBSyxFQUFFLGVBQWVBLENBQUc7QUFFcEUsY0FBSSxVQUFVLFVBQVUsS0FBSyxDQUFDOG9CO0FBQzVCLG1CQUFPQTtBQUVULGNBQUlGLElBQVEsS0FBSyxJQUFJNW9CLENBQUcsS0FBSyxDQUFDO0FBQzlCLGlCQUFPNG9CLEVBQU0sUUFBUTNwQixDQUFHLEtBQUs7UUFDL0IsR0FNQXFwQixFQUFTLFVBQVUsT0FBTyxXQUFXO0FBQ25DLGlCQUFJLEtBQUssT0FDQVMsRUFBYSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBRTVCQSxFQUFhLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN6QyxHQUtBVCxFQUFTLFVBQVUsU0FBUyxXQUFXO0FBQ3JDLGNBQUlVLElBQU8sQ0FBQztBQUNaLGlCQUFBLEtBQUssYUFBYSxTQUFTSixHQUFPO0FBQ2hDLGtCQUFNLFVBQVUsS0FBSyxNQUFNSSxHQUFNSixDQUFLO1VBQ3hDLENBQUMsR0FFTUcsRUFBYUMsQ0FBSTtRQUMxQixHQUtBVixFQUFTLFVBQVUsZUFBZSxTQUFTVyxHQUFNO0FBQy9DZixhQUFRLE1BQU1lLENBQUk7UUFDcEIsR0FFQVgsRUFBUyxVQUFVLFVBQVUsU0FBU1csR0FBTTtBQUMxQyxjQUFJUCxJQUFPO0FBQ1hBLFlBQUssYUFBYSxTQUFTRSxHQUFPNW9CLEdBQUs7QUFDckM0b0IsY0FBTSxRQUFRLFNBQVNKLEdBQU07QUFDM0JTLGdCQUFLVCxHQUFNeG9CLEdBQUswb0IsQ0FBSTtZQUN0QixDQUFDO1VBQ0gsQ0FBQztRQUNILEdBR0FKLEVBQVMsVUFBVSxRQUFRLFdBQVc7QUFDaEMsZUFBSyxPQUNQLEtBQUssRUFBRSxNQUFNLElBRWIsS0FBSyxJQUFJLENBQUM7UUFFZCxHQUVBLE9BQU8sZUFDTEEsRUFBUyxXQUNULFFBQVEsRUFDTixjQUFjLE9BQ2QsWUFBWSxNQUNaLEtBQUssV0FBVztBQUNkLGNBQUlZLElBQVE7QUFFWixpQkFBQWhCLEdBQVEsTUFBTSxTQUFTaUIsR0FBTTtBQUMzQkQsaUJBQVNDLEVBQU07VUFDakIsQ0FBQyxHQUVNRDtRQUNULEVBQ0YsQ0FBQyxHQUVILE9BQU8sZUFDTFosRUFBUyxXQUNULFNBQVMsRUFDUCxjQUFjLE9BQ2QsWUFBWSxNQUNaLEtBQUssV0FBVztBQUNkLGlCQUFPLEtBQUssRUFBRTtRQUNoQixFQUNGLENBQUM7QUFFSCxZQUFJYztBQUVKLFlBQUc7QUFDREEsY0FBYSxJQUFJLFNBQVMsWUFBWSxnQkFBZ0IseUdBQXlHO1FBQ2pLLFFBQWE7UUFFYjtBQUVBLGlCQUFTTCxFQUFhTSxHQUFTO0FBQzdCLGNBQUcsTUFBTSxRQUFRQSxDQUFRLEdBQUU7QUFDekIsZ0JBQUlDLElBQVk7QUFFaEIsbUJBQU8sRUFDTCxNQUFNLFdBQVU7QUFDZCxxQkFBT0EsSUFBWUQsRUFBUyxTQUMxQixFQUFDLE9BQU9BLEVBQVNDLEdBQVcsR0FBRyxNQUFNLE1BQUssSUFDNUMsRUFBQyxNQUFNLEtBQUk7WUFDYixFQUNGO1VBQ0Y7QUFHQSxpQkFBRyxDQUFDRCxFQUFTLFFBQVFELE1BQ25CQyxFQUFTLE9BQU9ELEVBQVdDLEdBQVVOLENBQVksSUFHNUNNO1FBQ1Q7QUFFQSxlQUFPZjtNQUNULEVBQUc7QUFHQSxhQUFPM3BCLE1BQVksWUFBWUMsTUFBVUEsR0FBTyxVQUNqREEsR0FBTyxVQUFVMHBCLEtBQ1gsT0FBTyxVQUFXLGNBQWMsT0FBTyxPQUM3QyxPQUFPLFdBQVc7QUFBRSxlQUFPQTtNQUFVLENBQUM7SUFBQSxDQUFBO0FDMU14QyxhQUFTaUIsR0FBWUMsR0FBSztBQUN4QixVQUFJQSxFQUFJO0FBRU4sZUFBT0EsRUFBSTtBQU1iLGVBQVNucUIsSUFBSSxHQUFHQSxJQUFJLFNBQVMsWUFBWSxRQUFRQTtBQUMvQyxZQUFJLFNBQVMsWUFBWUEsQ0FBQyxFQUFFLGNBQWNtcUI7QUFFeEMsaUJBQU8sU0FBUyxZQUFZbnFCLENBQUM7SUFHbkM7QUFFQSxhQUFTb3FCLEdBQW1CQyxHQUFTO0FBQ25DLFVBQUlGLElBQU0sU0FBUyxjQUFjLE9BQU87QUFDeEMsYUFBQUEsRUFBSSxhQUFhLGdCQUFnQkUsRUFBUSxHQUFHLEdBRXhDQSxFQUFRLFVBQVUsVUFDcEJGLEVBQUksYUFBYSxTQUFTRSxFQUFRLEtBQUssR0FHekNGLEVBQUksWUFBWSxTQUFTLGVBQWUsRUFBRSxDQUFDLEdBQzNDQSxFQUFJLGFBQWEsVUFBVSxFQUFFLEdBQ3RCQTtJQUNUO0FBbkRBLFFBcURJRyxJQXJESkMsS0FBQXJELEdBQUEsTUFBQTtBQXFESW9ELFdBQTBCLFdBQVk7QUFFeEMsaUJBQVNBLEVBQVdELEdBQVM7QUFDM0IsY0FBSUcsSUFBUTtBQUVaLGVBQUssYUFBYSxTQUFVTCxHQUFLO0FBQy9CLGdCQUFJTTtBQUVBRCxjQUFNLEtBQUssV0FBVyxJQUNwQkEsRUFBTSxpQkFDUkMsSUFBU0QsRUFBTSxlQUFlLGNBQ3JCQSxFQUFNLFVBQ2ZDLElBQVNELEVBQU0sVUFBVSxhQUV6QkMsSUFBU0QsRUFBTSxTQUdqQkMsSUFBU0QsRUFBTSxLQUFLQSxFQUFNLEtBQUssU0FBUyxDQUFDLEVBQUUsYUFHN0NBLEVBQU0sVUFBVSxhQUFhTCxHQUFLTSxDQUFNLEdBRXhDRCxFQUFNLEtBQUssS0FBS0wsQ0FBRztVQUNyQixHQUVBLEtBQUssV0FBV0UsRUFBUSxXQUFXLFNBQVksT0FBd0NBLEVBQVEsUUFDL0YsS0FBSyxPQUFPLENBQUMsR0FDYixLQUFLLE1BQU0sR0FDWCxLQUFLLFFBQVFBLEVBQVEsT0FFckIsS0FBSyxNQUFNQSxFQUFRLEtBQ25CLEtBQUssWUFBWUEsRUFBUSxXQUN6QixLQUFLLFVBQVVBLEVBQVEsU0FDdkIsS0FBSyxpQkFBaUJBLEVBQVEsZ0JBQzlCLEtBQUssU0FBUztRQUNoQjtBQUVBLFlBQUlLLElBQVNKLEVBQVc7QUFFeEIsZUFBQUksRUFBTyxVQUFVLFNBQWlCQyxHQUFPO0FBQ3ZDQSxZQUFNLFFBQVEsS0FBSyxVQUFVO1FBQy9CLEdBRUFELEVBQU8sU0FBUyxTQUFnQkUsR0FBTTtBQUloQyxlQUFLLE9BQU8sS0FBSyxXQUFXLE9BQVEsT0FBTyxLQUM3QyxLQUFLLFdBQVdSLEdBQW1CLElBQUksQ0FBQztBQUcxQyxjQUFJRCxJQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssU0FBUyxDQUFDO0FBRXhDLGNBQUk7QUFDRixnQkFBSVU7QUFXTixjQUFJLEtBQUssVUFBVTtBQUNqQixnQkFBSUMsSUFBUVosR0FBWUMsQ0FBRztBQUUzQixnQkFBSTtBQUdGVyxnQkFBTSxXQUFXRixHQUFNRSxFQUFNLFNBQVMsTUFBTTtZQUM5QyxRQUFZO1lBSVo7VUFDRjtBQUNFWCxjQUFJLFlBQVksU0FBUyxlQUFlUyxDQUFJLENBQUM7QUFHL0MsZUFBSztRQUNQLEdBRUFGLEVBQU8sUUFBUSxXQUFpQjtBQUU5QixlQUFLLEtBQUssUUFBUSxTQUFVUCxHQUFLO0FBQy9CLG1CQUFPQSxFQUFJLGNBQWNBLEVBQUksV0FBVyxZQUFZQSxDQUFHO1VBQ3pELENBQUMsR0FDRCxLQUFLLE9BQU8sQ0FBQyxHQUNiLEtBQUssTUFBTTtRQUtiLEdBRU9HO01BQ1QsRUFBRTtJQUFBLENBQUE7QUN2SkYsUUFBV1MsSUFDQUMsSUFDQUMsR0FFQUMsSUFDQUMsSUFDQUMsSUFJQUMsSUFNQUMsSUFJQUMsSUFwQlhDLEtBQUF0RSxHQUFBLE1BQUE7QUFBVzZELFdBQUssUUFDTEMsS0FBTSxTQUNOQyxJQUFTLFlBRVRDLEtBQVUsUUFDVkMsS0FBVSxRQUNWQyxLQUFjLFFBSWRDLEtBQVMsV0FNVEMsS0FBWSxjQUlaQyxLQUFRO0lBQUEsQ0FBQTtBQ0daLGFBQVNFLEdBQU0zQixHQUFPNEIsR0FBUTtBQUNwQyxhQUFPQyxHQUFPN0IsR0FBTyxDQUFDLElBQUksUUFBWTRCLEtBQVUsSUFBS0MsR0FBTzdCLEdBQU8sQ0FBQyxNQUFNLElBQUs2QixHQUFPN0IsR0FBTyxDQUFDLE1BQU0sSUFBSzZCLEdBQU83QixHQUFPLENBQUMsTUFBTSxJQUFLNkIsR0FBTzdCLEdBQU8sQ0FBQyxJQUFJO0lBQ3ZKO0FBTU8sYUFBUzhCLEdBQU05QixHQUFPO0FBQzVCLGFBQU9BLEVBQU0sS0FBSztJQUNuQjtBQU9PLGFBQVMrQixHQUFPL0IsR0FBT2dDLEdBQVM7QUFDdEMsY0FBUWhDLElBQVFnQyxFQUFRLEtBQUtoQyxDQUFLLEtBQUtBLEVBQU0sQ0FBQyxJQUFJQTtJQUNuRDtBQVFPLGFBQVNpQyxFQUFTakMsR0FBT2dDLEdBQVNFLEdBQWE7QUFDckQsYUFBT2xDLEVBQU0sUUFBUWdDLEdBQVNFLENBQVc7SUFDMUM7QUFPTyxhQUFTQyxHQUFTbkMsR0FBT29DLEdBQVE7QUFDdkMsYUFBT3BDLEVBQU0sUUFBUW9DLENBQU07SUFDNUI7QUFPTyxhQUFTUCxHQUFRN0IsR0FBT3FDLEdBQU87QUFDckMsYUFBT3JDLEVBQU0sV0FBV3FDLENBQUssSUFBSTtJQUNsQztBQVFPLGFBQVNDLEdBQVF0QyxHQUFPdUMsR0FBT0MsR0FBSztBQUMxQyxhQUFPeEMsRUFBTSxNQUFNdUMsR0FBT0MsQ0FBRztJQUM5QjtBQU1PLGFBQVNDLEdBQVF6QyxHQUFPO0FBQzlCLGFBQU9BLEVBQU07SUFDZDtBQU1PLGFBQVMwQyxHQUFRMUMsR0FBTztBQUM5QixhQUFPQSxFQUFNO0lBQ2Q7QUFPTyxhQUFTMkMsR0FBUTNDLEdBQU80QyxHQUFPO0FBQ3JDLGFBQU9BLEVBQU0sS0FBSzVDLENBQUssR0FBR0E7SUFDM0I7QUFPTyxhQUFTNkMsR0FBU0QsR0FBT0UsR0FBVTtBQUN6QyxhQUFPRixFQUFNLElBQUlFLENBQVEsRUFBRSxLQUFLLEVBQUU7SUFDbkM7QUFsSEEsUUFJV0MsSUFNQXRzQixJQU1BdXNCLElBaEJYQyxLQUFBN0YsR0FBQSxNQUFBO0FBSVcyRixXQUFNLEtBQUssS0FNWHRzQixLQUFPLE9BQU8sY0FNZHVzQixLQUFTLE9BQU87SUFBQSxDQUFBO0FDRXBCLGFBQVNFLEdBQU1sRCxHQUFPbUQsR0FBTUMsR0FBUUMsR0FBTUMsR0FBT0MsR0FBVTNCLEdBQVE7QUFDekUsYUFBTyxFQUFDLE9BQU81QixHQUFPLE1BQU1tRCxHQUFNLFFBQVFDLEdBQVEsTUFBTUMsR0FBTSxPQUFPQyxHQUFPLFVBQVVDLEdBQVUsTUFBTUMsSUFBTSxRQUFRQyxJQUFRLFFBQVE3QixHQUFRLFFBQVEsR0FBRTtJQUN2SjtBQU9PLGFBQVM4QixHQUFNUCxHQUFNRyxHQUFPO0FBQ2xDLGFBQU9OLEdBQU9FLEdBQUssSUFBSSxNQUFNLE1BQU0sSUFBSSxNQUFNLE1BQU0sQ0FBQyxHQUFHQyxHQUFNLEVBQUMsUUFBUSxDQUFDQSxFQUFLLE9BQU0sR0FBR0csQ0FBSztJQUMzRjtBQUtPLGFBQVNLLEtBQVE7QUFDdkIsYUFBT0M7SUFDUjtBQUtPLGFBQVNDLEtBQVE7QUFDdkIsYUFBQUQsS0FBWUUsS0FBVyxJQUFJakMsR0FBT2tDLElBQVksRUFBRUQsRUFBUSxJQUFJLEdBRXhETCxNQUFVRyxPQUFjLE9BQzNCSCxLQUFTLEdBQUdELE9BRU5JO0lBQ1I7QUFLTyxhQUFTMUUsS0FBUTtBQUN2QixhQUFBMEUsS0FBWUUsS0FBV2xDLEtBQVNDLEdBQU9rQyxJQUFZRCxJQUFVLElBQUksR0FFN0RMLE1BQVVHLE9BQWMsT0FDM0JILEtBQVMsR0FBR0QsT0FFTkk7SUFDUjtBQUtPLGFBQVNJLEtBQVE7QUFDdkIsYUFBT25DLEdBQU9rQyxJQUFZRCxFQUFRO0lBQ25DO0FBS08sYUFBU0csS0FBUztBQUN4QixhQUFPSDtJQUNSO0FBT08sYUFBU0ksR0FBTzNCLEdBQU9DLEdBQUs7QUFDbEMsYUFBT0YsR0FBT3lCLElBQVl4QixHQUFPQyxDQUFHO0lBQ3JDO0FBTU8sYUFBUzJCLEdBQU9kLEdBQU07QUFDNUIsY0FBUUEsR0FBTTtRQUViLEtBQUs7UUFBRyxLQUFLO1FBQUcsS0FBSztRQUFJLEtBQUs7UUFBSSxLQUFLO0FBQ3RDLGlCQUFPO1FBRVIsS0FBSztRQUFJLEtBQUs7UUFBSSxLQUFLO1FBQUksS0FBSztRQUFJLEtBQUs7UUFBSSxLQUFLO1FBQUksS0FBSztRQUUzRCxLQUFLO1FBQUksS0FBSztRQUFLLEtBQUs7QUFDdkIsaUJBQU87UUFFUixLQUFLO0FBQ0osaUJBQU87UUFFUixLQUFLO1FBQUksS0FBSztRQUFJLEtBQUs7UUFBSSxLQUFLO0FBQy9CLGlCQUFPO1FBRVIsS0FBSztRQUFJLEtBQUs7QUFDYixpQkFBTztNQUNUO0FBRUEsYUFBTztJQUNSO0FBTU8sYUFBU2UsR0FBT3BFLEdBQU87QUFDN0IsYUFBT3dELEtBQU9DLEtBQVMsR0FBRzdCLEtBQVNhLEdBQU9zQixLQUFhL0QsQ0FBSyxHQUFHOEQsS0FBVyxHQUFHLENBQUM7SUFDL0U7QUFNTyxhQUFTTyxHQUFTckUsR0FBTztBQUMvQixhQUFPK0QsS0FBYSxJQUFJL0Q7SUFDekI7QUFNTyxhQUFTc0UsR0FBU2pCLEdBQU07QUFDOUIsYUFBT3ZCLEdBQUtvQyxHQUFNSixLQUFXLEdBQUdTLEdBQVVsQixNQUFTLEtBQUtBLElBQU8sSUFBSUEsTUFBUyxLQUFLQSxJQUFPLElBQUlBLENBQUksQ0FBQyxDQUFDO0lBQ25HO0FBY08sYUFBU21CLEdBQVluQixHQUFNO0FBQ2pDLGNBQU9PLEtBQVlJLEdBQUssTUFDbkJKLEtBQVk7QUFDZjFFLFdBQUs7QUFJUCxhQUFPaUYsR0FBTWQsQ0FBSSxJQUFJLEtBQUtjLEdBQU1QLEVBQVMsSUFBSSxJQUFJLEtBQUs7SUFDdkQ7QUF3Qk8sYUFBU2EsR0FBVXBDLEdBQU9xQyxHQUFPO0FBQ3ZDLGFBQU8sRUFBRUEsS0FBU3hGLEdBQUssS0FFbEIsRUFBQTBFLEtBQVksTUFBTUEsS0FBWSxPQUFRQSxLQUFZLE1BQU1BLEtBQVksTUFBUUEsS0FBWSxNQUFNQSxLQUFZO0FBQTlHO0FBR0QsYUFBT00sR0FBTTdCLEdBQU80QixHQUFNLEtBQUtTLElBQVEsS0FBS1YsR0FBSyxLQUFLLE1BQU05RSxHQUFLLEtBQUssR0FBRztJQUMxRTtBQU1PLGFBQVNxRixHQUFXbEIsR0FBTTtBQUNoQyxhQUFPbkUsR0FBSztBQUNYLGdCQUFRMEUsSUFBVztVQUVsQixLQUFLUDtBQUNKLG1CQUFPUztVQUVSLEtBQUs7VUFBSSxLQUFLO0FBQ1RULGtCQUFTLE1BQU1BLE1BQVMsTUFDM0JrQixHQUFVWCxFQUFTO0FBQ3BCO1VBRUQsS0FBSztBQUNBUCxrQkFBUyxNQUNaa0IsR0FBVWxCLENBQUk7QUFDZjtVQUVELEtBQUs7QUFDSm5FLGVBQUs7QUFDTDtRQUNGO0FBRUQsYUFBTzRFO0lBQ1I7QUFPTyxhQUFTYSxHQUFXdEIsR0FBTWhCLEdBQU87QUFDdkMsYUFBT25ELEdBQUssS0FFUG1FLElBQU9PLE9BQWMsS0FBSztBQUd6QixZQUFJUCxJQUFPTyxPQUFjLEtBQUssTUFBTUksR0FBSyxNQUFNO0FBQ25EO0FBRUYsYUFBTyxPQUFPRSxHQUFNN0IsR0FBT3lCLEtBQVcsQ0FBQyxJQUFJLE1BQU1ydEIsR0FBSzRzQixNQUFTLEtBQUtBLElBQU9uRSxHQUFLLENBQUM7SUFDbEY7QUFNTyxhQUFTMEYsR0FBWXZDLEdBQU87QUFDbEMsYUFBTyxDQUFDOEIsR0FBTUgsR0FBSyxDQUFDO0FBQ25COUUsV0FBSztBQUVOLGFBQU9nRixHQUFNN0IsR0FBT3lCLEVBQVE7SUFDN0I7QUFyUEEsUUFFV04sSUFDQUMsSUFDQTdCLElBQ0FrQyxJQUNBRixJQUNBRyxJQVBYYyxLQUFBekgsR0FBQSxNQUFBO0FBQUE2RixTQUFBQTtBQUVXTyxXQUFPLEdBQ1BDLEtBQVMsR0FDVDdCLEtBQVMsR0FDVGtDLEtBQVcsR0FDWEYsS0FBWSxHQUNaRyxLQUFhO0lBQUEsQ0FBQTtBQ0NqQixhQUFTZSxHQUFTOUUsR0FBTztBQUMvQixhQUFPcUUsR0FBUVUsR0FBTSxJQUFJLE1BQU0sTUFBTSxNQUFNLENBQUMsRUFBRSxHQUFHL0UsSUFBUW9FLEdBQU1wRSxDQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBR0EsQ0FBSyxDQUFDO0lBQ3RGO0FBY08sYUFBUytFLEdBQU8vRSxHQUFPbUQsR0FBTUMsR0FBUXRDLEdBQU1rRSxHQUFPQyxHQUFVQyxHQUFRQyxHQUFRQyxHQUFjO0FBaUJoRyxlQWhCSS9DLElBQVEsR0FDUmdELElBQVMsR0FDVHpELElBQVNzRCxHQUNUSSxJQUFTLEdBQ1RDLElBQVcsR0FDWEMsSUFBVyxHQUNYQyxJQUFXLEdBQ1hDLElBQVcsR0FDWEMsSUFBWSxHQUNaL0IsS0FBWSxHQUNaUCxLQUFPLElBQ1BDLEtBQVEwQixHQUNSekIsSUFBVzBCLEdBQ1hXLElBQVk5RSxHQUNaaUQsSUFBYVYsSUFFVnFDO0FBQ04sZ0JBQVFGLElBQVc1QixJQUFXQSxLQUFZMUUsR0FBSyxHQUFHO1VBRWpELEtBQUs7QUFDSixnQkFBSXNHLEtBQVksT0FBTzNELEdBQU9rQyxHQUFZbkMsSUFBUyxDQUFDLEtBQUssSUFBSTtBQUN4RE8saUJBQVE0QixLQUFjOUIsRUFBUXFDLEdBQVFWLEVBQVMsR0FBRyxLQUFLLEtBQUssR0FBRyxLQUFLLEtBQUssT0FDNUUrQixJQUFZO0FBQ2I7WUFDRDtVQUVELEtBQUs7VUFBSSxLQUFLO1VBQUksS0FBSztBQUN0QjVCLGlCQUFjTyxHQUFRVixFQUFTO0FBQy9CO1VBRUQsS0FBSztVQUFHLEtBQUs7VUFBSSxLQUFLO1VBQUksS0FBSztBQUM5QkcsaUJBQWNTLEdBQVdnQixDQUFRO0FBQ2pDO1VBRUQsS0FBSztBQUNKekIsaUJBQWNVLEdBQVNSLEdBQU0sSUFBSSxHQUFHLENBQUM7QUFDckM7VUFFRCxLQUFLO0FBQ0osb0JBQVFELEdBQUssR0FBRztjQUNmLEtBQUs7Y0FBSSxLQUFLO0FBQ2JyQixtQkFBT2tELEdBQVFsQixHQUFVekYsR0FBSyxHQUFHK0UsR0FBTSxDQUFDLEdBQUdkLEdBQU1DLENBQU0sR0FBR2dDLENBQVk7QUFDdEU7Y0FDRDtBQUNDckIscUJBQWM7WUFDaEI7QUFDQTtVQUVELEtBQUssTUFBTTBCO0FBQ1ZOLGNBQU85QyxHQUFPLElBQUlJLEdBQU9zQixDQUFVLElBQUk0QjtVQUV4QyxLQUFLLE1BQU1GO1VBQVUsS0FBSztVQUFJLEtBQUs7QUFDbEMsb0JBQVE3QixJQUFXO2NBRWxCLEtBQUs7Y0FBRyxLQUFLO0FBQUs4QixvQkFBVztjQUU3QixLQUFLLEtBQUtMO0FBQVlNLHFCQUFhLE9BQUk1QixJQUFhOUIsRUFBUThCLEdBQVksT0FBTyxFQUFFLElBQzVFd0IsSUFBVyxLQUFNOUMsR0FBT3NCLENBQVUsSUFBSW5DLEtBQ3pDZSxHQUFPNEMsSUFBVyxLQUFLTyxHQUFZL0IsSUFBYSxLQUFLakQsR0FBTXNDLEdBQVF4QixJQUFTLENBQUMsSUFBSWtFLEdBQVk3RCxFQUFROEIsR0FBWSxLQUFLLEVBQUUsSUFBSSxLQUFLakQsR0FBTXNDLEdBQVF4QixJQUFTLENBQUMsR0FBR3dELENBQVk7QUFDeks7Y0FFRCxLQUFLO0FBQUlyQixxQkFBYztjQUV2QjtBQUdDLG9CQUZBcEIsR0FBT2lELElBQVlHLEdBQVFoQyxHQUFZWixHQUFNQyxHQUFRZixHQUFPZ0QsR0FBUUwsR0FBT0csR0FBUTlCLElBQU1DLEtBQVEsQ0FBQyxHQUFHQyxJQUFXLENBQUMsR0FBRzNCLENBQU0sR0FBR3FELENBQVEsR0FFaklyQixPQUFjO0FBQ2pCLHNCQUFJeUIsTUFBVztBQUNkTix1QkFBTWhCLEdBQVlaLEdBQU15QyxHQUFXQSxHQUFXdEMsSUFBTzJCLEdBQVVyRCxHQUFRdUQsR0FBUTVCLENBQVE7O0FBRXZGLDRCQUFRK0IsTUFBVyxNQUFNekQsR0FBT2tDLEdBQVksQ0FBQyxNQUFNLE1BQU0sTUFBTXVCLEdBQVE7c0JBRXRFLEtBQUs7c0JBQUssS0FBSztzQkFBSyxLQUFLO3NCQUFLLEtBQUs7QUFDbENQLDJCQUFNL0UsR0FBTzRGLEdBQVdBLEdBQVc5RSxLQUFRNkIsR0FBT29ELEdBQVEvRixHQUFPNEYsR0FBV0EsR0FBVyxHQUFHLEdBQUdaLEdBQU9HLEdBQVE5QixJQUFNMkIsR0FBTzFCLEtBQVEsQ0FBQyxHQUFHMUIsQ0FBTSxHQUFHMkIsQ0FBUSxHQUFHeUIsR0FBT3pCLEdBQVUzQixHQUFRdUQsR0FBUXJFLElBQU93QyxLQUFRQyxDQUFRO0FBQ2pOO3NCQUNEO0FBQ0N3QiwyQkFBTWhCLEdBQVk2QixHQUFXQSxHQUFXQSxHQUFXLENBQUMsRUFBRSxHQUFHckMsR0FBVSxHQUFHNEIsR0FBUTVCLENBQVE7b0JBQ3hGO1lBQ0o7QUFFQWxCLGdCQUFRZ0QsSUFBU0UsSUFBVyxHQUFHRSxJQUFXRSxJQUFZLEdBQUd0QyxLQUFPVSxJQUFhLElBQUluQyxJQUFTc0Q7QUFDMUY7VUFFRCxLQUFLO0FBQ0p0RCxnQkFBUyxJQUFJYSxHQUFPc0IsQ0FBVSxHQUFHd0IsSUFBV0M7VUFDN0M7QUFDQyxnQkFBSUMsSUFBVyxHQUFBO0FBQ2Qsa0JBQUk3QixNQUFhO0FBQ2hCLGtCQUFFNkI7dUJBQ003QixNQUFhLE9BQU82QixPQUFjLEtBQUs1QixHQUFLLEtBQUs7QUFDekQ7WUFBQTtBQUVGLG9CQUFRRSxLQUFjdHRCLEdBQUttdEIsRUFBUyxHQUFHQSxLQUFZNkIsR0FBVTtjQUU1RCxLQUFLO0FBQ0pFLG9CQUFZTixJQUFTLElBQUksS0FBS3RCLEtBQWMsTUFBTTtBQUNsRDtjQUVELEtBQUs7QUFDSm9CLGtCQUFPOUMsR0FBTyxLQUFLSSxHQUFPc0IsQ0FBVSxJQUFJLEtBQUs0QixHQUFXQSxJQUFZO0FBQ3BFO2NBRUQsS0FBSztBQUVBM0IsbUJBQUssTUFBTSxPQUNkRCxLQUFjTyxHQUFRcEYsR0FBSyxDQUFDLElBRTdCb0csSUFBU3RCLEdBQUssR0FBR3FCLElBQVN6RCxJQUFTYSxHQUFPWSxLQUFPVSxLQUFjYSxHQUFXWCxHQUFNLENBQUMsQ0FBQyxHQUFHTDtBQUNyRjtjQUVELEtBQUs7QUFDQTRCLHNCQUFhLE1BQU0vQyxHQUFPc0IsQ0FBVSxLQUFLLE1BQzVDMEIsSUFBVztZQUNkO1FBQ0Y7QUFFRCxhQUFPUjtJQUNSO0FBZ0JPLGFBQVNjLEdBQVMvRixHQUFPbUQsR0FBTUMsR0FBUWYsR0FBT2dELEdBQVFMLEdBQU9HLEdBQVE5QixHQUFNQyxHQUFPQyxHQUFVM0IsR0FBUTtBQUsxRyxlQUpJb0UsSUFBT1gsSUFBUyxHQUNoQnZFLElBQU91RSxNQUFXLElBQUlMLElBQVEsQ0FBQyxFQUFFLEdBQ2pDaUIsSUFBT3ZELEdBQU81QixDQUFJLEdBRWI1cUIsSUFBSSxHQUFHZ3dCLElBQUksR0FBR3p0QixJQUFJLEdBQUd2QyxJQUFJbXNCLEdBQU8sRUFBRW5zQjtBQUMxQyxpQkFBU3FCLElBQUksR0FBR0MsS0FBSThxQixHQUFPdEMsR0FBT2dHLElBQU8sR0FBR0EsSUFBT2pELEdBQUltRCxJQUFJZixFQUFPanZCLENBQUMsQ0FBQyxDQUFDLEdBQUd3QixLQUFJc29CLEdBQU96b0IsSUFBSTB1QixHQUFNLEVBQUUxdUI7QUFBQUEsV0FDMUZHLEtBQUlvcUIsR0FBS29FLElBQUksSUFBSXBGLEVBQUt2cEIsQ0FBQyxJQUFJLE1BQU1DLEtBQUl5cUIsRUFBUXpxQixJQUFHLFFBQVFzcEIsRUFBS3ZwQixDQUFDLENBQUMsQ0FBQyxPQUNuRStyQixFQUFNN3FCLEdBQUcsSUFBSWY7QUFFaEIsYUFBT3dyQixHQUFLbEQsR0FBT21ELEdBQU1DLEdBQVFpQyxNQUFXLElBQUloRSxLQUFVZ0MsR0FBTUMsR0FBT0MsR0FBVTNCLENBQU07SUFDeEY7QUFRTyxhQUFTaUUsR0FBUzdGLEdBQU9tRCxHQUFNQyxHQUFRO0FBQzdDLGFBQU9GLEdBQUtsRCxHQUFPbUQsR0FBTUMsR0FBUWhDLElBQVMzcUIsR0FBS2t0QixHQUFLLENBQUMsR0FBR3JCLEdBQU90QyxHQUFPLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDaEY7QUFTTyxhQUFTOEYsR0FBYTlGLEdBQU9tRCxHQUFNQyxHQUFReEIsR0FBUTtBQUN6RCxhQUFPc0IsR0FBS2xELEdBQU9tRCxHQUFNQyxHQUFROUIsSUFBYWdCLEdBQU90QyxHQUFPLEdBQUc0QixDQUFNLEdBQUdVLEdBQU90QyxHQUFPNEIsSUFBUyxHQUFHLEVBQUUsR0FBR0EsQ0FBTTtJQUM5RztBQTlMQSxRQUFBdUUsS0FBQS9JLEdBQUEsTUFBQTtBQUFBc0UsU0FBQUE7QUFDQXVCLFNBQUFBO0FBQ0E0QixTQUFBQTtJQUFBQSxDQUFBQTtBQ0ZBLFFBQUF1QixLQUFBaEosR0FBQSxNQUFBO0lBQUEsQ0FBQTtBQ1FPLGFBQVNpSixHQUFXOUMsR0FBVVQsR0FBVTtBQUk5QyxlQUhJd0QsSUFBUyxJQUNUMUUsSUFBU2MsR0FBT2EsQ0FBUSxHQUVuQnJ0QixJQUFJLEdBQUdBLElBQUkwckIsR0FBUTFyQjtBQUMzQm93QixhQUFVeEQsRUFBU1MsRUFBU3J0QixDQUFDLEdBQUdBLEdBQUdxdEIsR0FBVVQsQ0FBUSxLQUFLO0FBRTNELGFBQU93RDtJQUNSO0FBU08sYUFBU0MsR0FBV0MsR0FBU25FLEdBQU9rQixHQUFVVCxHQUFVO0FBQzlELGNBQVEwRCxFQUFRLE1BQU07UUFDckIsS0FBSy9FO0FBQU8sY0FBSStFLEVBQVEsU0FBUztBQUFRO1FBQ3pDLEtBQUtqRjtRQUFRLEtBQUtEO0FBQWEsaUJBQU9rRixFQUFRLFNBQVNBLEVBQVEsVUFBVUEsRUFBUTtRQUNqRixLQUFLcEY7QUFBUyxpQkFBTztRQUNyQixLQUFLSTtBQUFXLGlCQUFPZ0YsRUFBUSxTQUFTQSxFQUFRLFFBQVEsTUFBTUgsR0FBVUcsRUFBUSxVQUFVMUQsQ0FBUSxJQUFJO1FBQ3RHLEtBQUt6QjtBQUFTbUYsWUFBUSxRQUFRQSxFQUFRLE1BQU0sS0FBSyxHQUFHO01BQ3JEO0FBRUEsYUFBTy9ELEdBQU9jLElBQVc4QyxHQUFVRyxFQUFRLFVBQVUxRCxDQUFRLENBQUMsSUFBSTBELEVBQVEsU0FBU0EsRUFBUSxRQUFRLE1BQU1qRCxJQUFXLE1BQU07SUFDM0g7QUFuQ0EsUUFBQWtELEtBQUFySixHQUFBLE1BQUE7QUFBQXNFLFNBQUFBO0FBQ0F1QixTQUFBQTtJQUFBQSxDQUFBQTtBQ1NPLGFBQVN5RCxHQUFZQyxHQUFZO0FBQ3ZDLFVBQUkvRSxJQUFTYyxHQUFPaUUsQ0FBVTtBQUU5QixhQUFPLFNBQVVILEdBQVNuRSxHQUFPa0IsR0FBVVQsR0FBVTtBQUdwRCxpQkFGSXdELElBQVMsSUFFSnB3QixJQUFJLEdBQUdBLElBQUkwckIsR0FBUTFyQjtBQUMzQm93QixlQUFVSyxFQUFXendCLENBQUMsRUFBRXN3QixHQUFTbkUsR0FBT2tCLEdBQVVULENBQVEsS0FBSztBQUVoRSxlQUFPd0Q7TUFDUjtJQUNEO0FBTU8sYUFBU00sR0FBVzlELEdBQVU7QUFDcEMsYUFBTyxTQUFVMEQsR0FBUztBQUNwQkEsVUFBUSxTQUNSQSxJQUFVQSxFQUFRLFdBQ3JCMUQsRUFBUzBELENBQU87TUFDbkI7SUFDRDtBQWpDQSxRQUFBSyxLQUFBekosR0FBQSxNQUFBO0FBQ0E2RixTQUFBQTtJQUFBQSxDQUFBQTtBQ0RBLFFBQUE2RCxLQUFBMUosR0FBQSxNQUFBO0FBQUFzRSxTQUFBQTtBQUNBdUIsU0FBQUE7QUFDQWtELFNBQUFBO0FBQ0FDLFNBQUFBO0FBQ0F2QixTQUFBQTtBQUNBNEIsU0FBQUE7QUFDQUksU0FBQUE7SUFBQUEsQ0FBQUE7QUNOQSxRQUFJRSxJQUFKQyxLQUFBNUosR0FBQSxNQUFBO0FBQUkySixXQUFjLFNBQXFCRSxHQUFNO0FBRTNDLFlBQUlDLElBQVEsb0JBQUk7QUFDaEIsZUFBTyxTQUFVQyxHQUFLO0FBQ3BCLGNBQUlELEVBQU0sSUFBSUMsQ0FBRztBQUVmLG1CQUFPRCxFQUFNLElBQUlDLENBQUc7QUFHdEIsY0FBSUMsSUFBTUgsRUFBS0UsQ0FBRztBQUNsQixpQkFBQUQsRUFBTSxJQUFJQyxHQUFLQyxDQUFHLEdBQ1hBO1FBQ1Q7TUFDRjtJQUFBLENBQUE7QUNiQSxhQUFTQyxHQUFRQyxHQUFJO0FBQ25CLFVBQUlKLElBQVEsdUJBQU8sT0FBTyxJQUFJO0FBQzlCLGFBQU8sU0FBVUMsR0FBSztBQUNwQixlQUFJRCxFQUFNQyxDQUFHLE1BQU0sV0FBV0QsRUFBTUMsQ0FBRyxJQUFJRyxFQUFHSCxDQUFHLElBQzFDRCxFQUFNQyxDQUFHO01BQ2xCO0lBQ0Y7QUFOQSxRQUFBSSxLQUFBbkssR0FBQSxNQUFBO0lBQUEsQ0FBQTtBQ0FBLFFBQUFvSyxLQUFBLENBQUE7QUFBQUMsT0FBQUQsSUFBQSxFQUFBLFNBQUEsTUFBQUUsR0FBQUEsQ0FBQUE7QUFnUEEsYUFBU0MsR0FBTzNILEdBQU80QixHQUFRO0FBQzdCLGNBQVFELEdBQUszQixHQUFPNEIsQ0FBTSxHQUFHO1FBRTNCLEtBQUs7QUFDSCxpQkFBT1QsSUFBUyxXQUFXbkIsSUFBUUE7UUFHckMsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUVMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUVMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUVMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztBQUNILGlCQUFPbUIsSUFBU25CLElBQVFBO1FBRzFCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO0FBQ0gsaUJBQU9tQixJQUFTbkIsSUFBUWtCLEtBQU1sQixJQUFRaUIsS0FBS2pCLElBQVFBO1FBR3JELEtBQUs7UUFDTCxLQUFLO0FBQ0gsaUJBQU9tQixJQUFTbkIsSUFBUWlCLEtBQUtqQixJQUFRQTtRQUd2QyxLQUFLO0FBQ0gsaUJBQU9tQixJQUFTbkIsSUFBUWlCLEtBQUssVUFBVWpCLElBQVFBO1FBR2pELEtBQUs7QUFDSCxpQkFBT21CLElBQVNuQixJQUFRaUMsRUFBUWpDLEdBQU8sa0JBQWtCbUIsSUFBUyxhQUFhRixLQUFLLFdBQVcsSUFBSWpCO1FBR3JHLEtBQUs7QUFDSCxpQkFBT21CLElBQVNuQixJQUFRaUIsS0FBSyxlQUFlZ0IsRUFBUWpDLEdBQU8sZUFBZSxFQUFFLElBQUlBO1FBR2xGLEtBQUs7QUFDSCxpQkFBT21CLElBQVNuQixJQUFRaUIsS0FBSyxtQkFBbUJnQixFQUFRakMsR0FBTyw2QkFBNkIsRUFBRSxJQUFJQTtRQUdwRyxLQUFLO0FBQ0gsaUJBQU9tQixJQUFTbkIsSUFBUWlCLEtBQUtnQixFQUFRakMsR0FBTyxVQUFVLFVBQVUsSUFBSUE7UUFHdEUsS0FBSztBQUNILGlCQUFPbUIsSUFBU25CLElBQVFpQixLQUFLZ0IsRUFBUWpDLEdBQU8sU0FBUyxnQkFBZ0IsSUFBSUE7UUFHM0UsS0FBSztBQUNILGlCQUFPbUIsSUFBUyxTQUFTYyxFQUFRakMsR0FBTyxTQUFTLEVBQUUsSUFBSW1CLElBQVNuQixJQUFRaUIsS0FBS2dCLEVBQVFqQyxHQUFPLFFBQVEsVUFBVSxJQUFJQTtRQUdwSCxLQUFLO0FBQ0gsaUJBQU9tQixJQUFTYyxFQUFRakMsR0FBTyxzQkFBc0IsT0FBT21CLElBQVMsSUFBSSxJQUFJbkI7UUFHL0UsS0FBSztBQUNILGlCQUFPaUMsRUFBUUEsRUFBUUEsRUFBUWpDLEdBQU8sZ0JBQWdCbUIsSUFBUyxJQUFJLEdBQUcsZUFBZUEsSUFBUyxJQUFJLEdBQUduQixHQUFPLEVBQUUsSUFBSUE7UUFHcEgsS0FBSztRQUNMLEtBQUs7QUFDSCxpQkFBT2lDLEVBQVFqQyxHQUFPLHFCQUFxQm1CLElBQVMsUUFBYTtRQUduRSxLQUFLO0FBQ0gsaUJBQU9jLEVBQVFBLEVBQVFqQyxHQUFPLHFCQUFxQm1CLElBQVMsZ0JBQWdCRixLQUFLLGNBQWMsR0FBRyxjQUFjLFNBQVMsSUFBSUUsSUFBU25CLElBQVFBO1FBR2hKLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7QUFDSCxpQkFBT2lDLEVBQVFqQyxHQUFPLG1CQUFtQm1CLElBQVMsTUFBTSxJQUFJbkI7UUFHOUQsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO0FBRUgsY0FBSXlDLEdBQU96QyxDQUFLLElBQUksSUFBSTRCLElBQVM7QUFBRyxvQkFBUUMsR0FBTzdCLEdBQU80QixJQUFTLENBQUMsR0FBRztjQUVyRSxLQUFLO0FBRUgsb0JBQUlDLEdBQU83QixHQUFPNEIsSUFBUyxDQUFDLE1BQU07QUFBSTtjQUd4QyxLQUFLO0FBQ0gsdUJBQU9LLEVBQVFqQyxHQUFPLG9CQUFvQixPQUFPbUIsSUFBUyxZQUFpQkQsTUFBT1csR0FBTzdCLEdBQU80QixJQUFTLENBQUMsS0FBSyxNQUFNLE9BQU8sUUFBUSxJQUFJNUI7Y0FHMUksS0FBSztBQUNILHVCQUFPLENBQUNtQyxHQUFRbkMsR0FBTyxTQUFTLElBQUkySCxHQUFPMUYsRUFBUWpDLEdBQU8sV0FBVyxnQkFBZ0IsR0FBRzRCLENBQU0sSUFBSTVCLElBQVFBO1lBQzlHO0FBQ0E7UUFHRixLQUFLO0FBRUgsY0FBSTZCLEdBQU83QixHQUFPNEIsSUFBUyxDQUFDLE1BQU07QUFBSztRQUd6QyxLQUFLO0FBQ0gsa0JBQVFDLEdBQU83QixHQUFPeUMsR0FBT3pDLENBQUssSUFBSSxLQUFLLENBQUNtQyxHQUFRbkMsR0FBTyxZQUFZLEtBQUssR0FBRyxHQUFHO1lBRWhGLEtBQUs7QUFDSCxxQkFBT2lDLEVBQVFqQyxHQUFPLEtBQUssTUFBTW1CLENBQU0sSUFBSW5CO1lBRzdDLEtBQUs7QUFDSCxxQkFBT2lDLEVBQVFqQyxHQUFPLHlCQUF5QixPQUFPbUIsS0FBVVUsR0FBTzdCLEdBQU8sRUFBRSxNQUFNLEtBQUssWUFBWSxNQUFNLFlBQWlCbUIsSUFBUyxXQUFnQkYsS0FBSyxTQUFTLElBQUlqQjtVQUM3SztBQUVBO1FBR0YsS0FBSztBQUNILGtCQUFRNkIsR0FBTzdCLEdBQU80QixJQUFTLEVBQUUsR0FBRztZQUVsQyxLQUFLO0FBQ0gscUJBQU9ULElBQVNuQixJQUFRaUIsS0FBS2dCLEVBQVFqQyxHQUFPLHNCQUFzQixJQUFJLElBQUlBO1lBRzVFLEtBQUs7QUFDSCxxQkFBT21CLElBQVNuQixJQUFRaUIsS0FBS2dCLEVBQVFqQyxHQUFPLHNCQUFzQixPQUFPLElBQUlBO1lBRy9FLEtBQUs7QUFDSCxxQkFBT21CLElBQVNuQixJQUFRaUIsS0FBS2dCLEVBQVFqQyxHQUFPLHNCQUFzQixJQUFJLElBQUlBO1VBQzlFO0FBRUEsaUJBQU9tQixJQUFTbkIsSUFBUWlCLEtBQUtqQixJQUFRQTtNQUN6QztBQUVBLGFBQU9BO0lBQ1Q7QUEzWkEsUUFLSTRILElBc0JBQyxJQTJDQUMsSUFLQUMsSUFDQUMsSUF3Q0FDLElBeVNBQyxJQXFDQUMsSUFFQVQsSUFwY0pVLEtBQUFoTCxHQUFBLE1BQUE7QUFBQXFELFNBQUFBO0FBQ0FxRyxTQUFBQTtBQUNBRSxTQUFBQTtBQUNBTyxTQUFBQTtBQUVJSyxXQUE4QixTQUFxQ3JGLEdBQU80QyxHQUFROUMsR0FBTztBQUkzRixpQkFISW1ELElBQVcsR0FDWDVCLElBQVksR0FHZDRCLElBQVc1QixHQUNYQSxJQUFZSSxHQUFLLEdBRWJ3QixNQUFhLE1BQU01QixNQUFjLE9BQ25DdUIsRUFBTzlDLENBQUssSUFBSSxJQUdkLENBQUE4QixHQUFNUCxDQUFTO0FBSW5CMUUsYUFBSztBQUdQLGVBQU9nRixHQUFNM0IsR0FBT3VCLEVBQVE7TUFDOUIsR0FFSStELEtBQVUsU0FBaUJRLEdBQVFsRCxHQUFRO0FBRTdDLFlBQUk5QyxJQUFRLElBQ1J1QixJQUFZO0FBRWhCO0FBQ0Usa0JBQVFPLEdBQU1QLENBQVMsR0FBRztZQUN4QixLQUFLO0FBRUNBLG9CQUFjLE1BQU1JLEdBQUssTUFBTSxPQUtqQ21CLEVBQU85QyxDQUFLLElBQUksSUFHbEJnRyxFQUFPaEcsQ0FBSyxLQUFLdUYsR0FBNEI5RCxLQUFXLEdBQUdxQixHQUFROUMsQ0FBSztBQUN4RTtZQUVGLEtBQUs7QUFDSGdHLGdCQUFPaEcsQ0FBSyxLQUFLaUMsR0FBUVYsQ0FBUztBQUNsQztZQUVGLEtBQUs7QUFFSCxrQkFBSUEsTUFBYyxJQUFJO0FBRXBCeUUsa0JBQU8sRUFBRWhHLENBQUssSUFBSTJCLEdBQUssTUFBTSxLQUFLLFFBQVEsSUFDMUNtQixFQUFPOUMsQ0FBSyxJQUFJZ0csRUFBT2hHLENBQUssRUFBRTtBQUM5QjtjQUNGO1lBSUY7QUFDRWdHLGdCQUFPaEcsQ0FBSyxLQUFLNXJCLEdBQUttdEIsQ0FBUztVQUNuQztlQUNPQSxJQUFZMUUsR0FBSztBQUUxQixlQUFPbUo7TUFDVCxHQUVJUCxLQUFXLFNBQWtCOUgsR0FBT21GLEdBQVE7QUFDOUMsZUFBT2QsR0FBUXdELEdBQVF6RCxHQUFNcEUsQ0FBSyxHQUFHbUYsQ0FBTSxDQUFDO01BQzlDLEdBR0k0QyxLQUErQixvQkFBSSxXQUNuQ0MsS0FBUyxTQUFnQnhCLEdBQVM7QUFDcEMsWUFBSSxFQUFBQSxFQUFRLFNBQVMsVUFBVSxDQUFDQSxFQUFRLFVBRXhDQSxFQUFRLFNBQVMsSUFRakI7QUFBQSxtQkFKSXhHLElBQVF3RyxFQUFRLE9BQ2hCcEQsSUFBU29ELEVBQVEsUUFDakI4QixJQUFpQjlCLEVBQVEsV0FBV3BELEVBQU8sVUFBVW9ELEVBQVEsU0FBU3BELEVBQU8sTUFFMUVBLEVBQU8sU0FBUztBQUVyQixnQkFEQUEsSUFBU0EsRUFBTyxRQUNaLENBQUNBO0FBQVE7QUFJZixjQUFJLEVBQUFvRCxFQUFRLE1BQU0sV0FBVyxLQUFLeEcsRUFBTSxXQUFXLENBQUMsTUFBTSxNQUV2RCxDQUFDK0gsR0FBYyxJQUFJM0UsQ0FBTSxNQU14QixDQUFBa0YsR0FJSjtBQUFBUCxlQUFjLElBQUl2QixHQUFTLElBQUk7QUFLL0IscUJBSklyQixJQUFTLENBQUMsR0FDVkgsSUFBUThDLEdBQVM5SCxHQUFPbUYsQ0FBTSxHQUM5Qm9ELElBQWNuRixFQUFPLE9BRWhCbHRCLElBQUksR0FBR3VDLElBQUksR0FBR3ZDLElBQUk4dUIsRUFBTSxRQUFROXVCO0FBQ3ZDLHVCQUFTZ3dCLElBQUksR0FBR0EsSUFBSXFDLEVBQVksUUFBUXJDLEtBQUt6dEI7QUFDM0MrdEIsa0JBQVEsTUFBTS90QixDQUFDLElBQUkwc0IsRUFBT2p2QixDQUFDLElBQUk4dUIsRUFBTTl1QixDQUFDLEVBQUUsUUFBUSxRQUFRcXlCLEVBQVlyQyxDQUFDLENBQUMsSUFBSXFDLEVBQVlyQyxDQUFDLElBQUksTUFBTWxCLEVBQU05dUIsQ0FBQztVQUFBO1FBQUE7TUFHOUcsR0FDSSt4QixLQUFjLFNBQXFCekIsR0FBUztBQUM5QyxZQUFJQSxFQUFRLFNBQVMsUUFBUTtBQUMzQixjQUFJeEcsSUFBUXdHLEVBQVE7QUFHcEJ4RyxZQUFNLFdBQVcsQ0FBQyxNQUFNLE9BQ3hCQSxFQUFNLFdBQVcsQ0FBQyxNQUFNLE9BRXRCd0csRUFBUSxTQUFZLElBQ3BCQSxFQUFRLFFBQVE7UUFFcEI7TUFDRjtBQTZSSTBCLFdBQVcsU0FBa0IxQixHQUFTbkUsR0FBT2tCLEdBQVVULEdBQVU7QUFDbkUsWUFBSTBELEVBQVEsU0FBUyxNQUFRLENBQUNBLEVBQVE7QUFBVyxrQkFBUUEsRUFBUSxNQUFNO1lBQ3JFLEtBQUtsRjtBQUNIa0YsZ0JBQVEsU0FBWW1CLEdBQU9uQixFQUFRLE9BQU9BLEVBQVEsTUFBTTtBQUN4RDtZQUVGLEtBQUtoRjtBQUNILHFCQUFPNkUsR0FBVSxDQUFDM0MsR0FBSzhDLEdBQVMsRUFDOUIsT0FBT3ZFLEVBQVF1RSxFQUFRLE9BQU8sS0FBSyxNQUFNckYsQ0FBTSxFQUNqRCxDQUFDLENBQUMsR0FBRzJCLENBQVE7WUFFZixLQUFLekI7QUFDSCxrQkFBSW1GLEVBQVE7QUFBUSx1QkFBTzNELEdBQVEyRCxFQUFRLE9BQU8sU0FBVXhHLEdBQU87QUFDakUsMEJBQVErQixHQUFNL0IsR0FBTyx1QkFBdUIsR0FBRztvQkFFN0MsS0FBSztvQkFDTCxLQUFLO0FBQ0gsNkJBQU9xRyxHQUFVLENBQUMzQyxHQUFLOEMsR0FBUyxFQUM5QixPQUFPLENBQUN2RSxFQUFRakMsR0FBTyxlQUFlLE1BQU1rQixLQUFNLElBQUksQ0FBQyxFQUN6RCxDQUFDLENBQUMsR0FBRzRCLENBQVE7b0JBR2YsS0FBSztBQUNILDZCQUFPdUQsR0FBVSxDQUFDM0MsR0FBSzhDLEdBQVMsRUFDOUIsT0FBTyxDQUFDdkUsRUFBUWpDLEdBQU8sY0FBYyxNQUFNbUIsSUFBUyxVQUFVLENBQUMsRUFDakUsQ0FBQyxHQUFHdUMsR0FBSzhDLEdBQVMsRUFDaEIsT0FBTyxDQUFDdkUsRUFBUWpDLEdBQU8sY0FBYyxNQUFNa0IsS0FBTSxJQUFJLENBQUMsRUFDeEQsQ0FBQyxHQUFHd0MsR0FBSzhDLEdBQVMsRUFDaEIsT0FBTyxDQUFDdkUsRUFBUWpDLEdBQU8sY0FBY2lCLEtBQUssVUFBVSxDQUFDLEVBQ3ZELENBQUMsQ0FBQyxHQUFHNkIsQ0FBUTtrQkFDakI7QUFFQSx5QkFBTztnQkFDVCxDQUFDO1VBQ0w7TUFDRixHQUVJcUYsS0FBdUIsQ0FBQ0QsRUFBUSxHQUVoQ1IsS0FBYyxTQUFxQm5ILEdBQVM7QUFDOUMsWUFBSTFwQixJQUFNMHBCLEVBQVE7QUFNbEIsWUFBSTFwQixNQUFRLE9BQU87QUFDakIsY0FBSTJ4QixJQUFZLFNBQVMsaUJBQWlCLG1DQUFtQztBQUs3RSxnQkFBTSxVQUFVLFFBQVEsS0FBS0EsR0FBVyxTQUFVdEYsR0FBTTtBQU90RCxnQkFBSXVGLElBQXVCdkYsRUFBSyxhQUFhLGNBQWM7QUFFdkR1RixjQUFxQixRQUFRLEdBQUcsTUFBTSxPQUcxQyxTQUFTLEtBQUssWUFBWXZGLENBQUksR0FDOUJBLEVBQUssYUFBYSxVQUFVLEVBQUU7VUFDaEMsQ0FBQztRQUNIO0FBRUEsWUFBSXdGLElBQWdCbkksRUFBUSxpQkFBaUI0SCxJQVN6Q1EsSUFBVyxDQUFDLEdBQ1pDLEdBQ0FDLElBQWlCLENBQUM7QUFHcEJELFlBQVlySSxFQUFRLGFBQWEsU0FBUyxNQUMxQyxNQUFNLFVBQVUsUUFBUSxLQUV4QixTQUFTLGlCQUFpQiwwQkFBMkIxcEIsSUFBTSxLQUFNLEdBQUcsU0FBVXFzQixHQUFNO0FBR2xGLG1CQUZJNEYsSUFBUzVGLEVBQUssYUFBYSxjQUFjLEVBQUUsTUFBTSxHQUFHLEdBRS9DaHRCLElBQUksR0FBR0EsSUFBSTR5QixFQUFPLFFBQVE1eUI7QUFDakN5eUIsY0FBU0csRUFBTzV5QixDQUFDLENBQUMsSUFBSTtBQUd4QjJ5QixZQUFlLEtBQUszRixDQUFJO1FBQzFCLENBQUM7QUFHSCxZQUFJNkYsR0FFQUMsSUFBcUIsQ0FBQ2hCLElBQVFDLEVBQVc7QUFXN0M7QUFDRSxjQUFJZ0IsR0FDQUMsSUFBb0IsQ0FBQzNDLElBVXJCSyxHQUFVLFNBQVU5RixHQUFNO0FBQzVCbUksY0FBYSxPQUFPbkksQ0FBSTtVQUMxQixDQUFDLENBQUMsR0FDRXFJLElBQWF6QyxHQUFXc0MsRUFBbUIsT0FBT04sR0FBZVEsQ0FBaUIsQ0FBQyxHQUVuRkUsSUFBUyxTQUFnQkMsR0FBUTtBQUNuQyxtQkFBT2hELEdBQVV2QixHQUFRdUUsQ0FBTSxHQUFHRixDQUFVO1VBQzlDO0FBRUFKLGNBQVUsU0FBZ0JPLEdBQVVDLEdBQVl2SSxJQUFPd0ksSUFBYTtBQUNsRVAsZ0JBQWVqSSxJQVVmb0ksRUFBT0UsSUFBV0EsSUFBVyxNQUFNQyxFQUFXLFNBQVMsTUFBTUEsRUFBVyxNQUFNLEdBRTFFQyxPQUNGdEMsRUFBTSxTQUFTcUMsRUFBVyxJQUFJLElBQUk7VUFFdEM7UUFDRjtBQUVBLFlBQUlyQyxJQUFRLEVBQ1YsS0FBS3J3QixHQUNMLE9BQU8sSUFBSTJwQixHQUFXLEVBQ3BCLEtBQUszcEIsR0FDTCxXQUFXK3hCLEdBQ1gsT0FBT3JJLEVBQVEsT0FDZixRQUFRQSxFQUFRLFFBQ2hCLFNBQVNBLEVBQVEsU0FDakIsZ0JBQWdCQSxFQUFRLGVBQzFCLENBQUMsR0FDRCxPQUFPQSxFQUFRLE9BQ2YsVUFBVW9JLEdBQ1YsWUFBWSxDQUFDLEdBQ2IsUUFBUUksRUFDVjtBQUNBLGVBQUE3QixFQUFNLE1BQU0sUUFBUTJCLENBQWMsR0FDM0IzQjtNQUNUO0lBQUEsQ0FBQTtBQ3BrQkEsUUFBQXVDLElBTUlwTCxJQU5KcUwsS0FBQXRNLEdBQUEsTUFBQTtBQUFBcU0sV0FBbUMsRUFBQSxHQUFBLENBQUEsR0FNL0JwTCxLQUF3QixTQUFVQyxHQUFpQkMsR0FBaUI7QUFDdEUsZ0JBQUEsR0FBTyxHQUFBb0wsU0FBdUJyTCxHQUFpQkMsQ0FBZTtNQUNoRTtJQUFBLENBQUE7QUNQQSxhQUFTcUwsR0FBb0JDLEdBQVlDLEdBQWtCQyxHQUFZO0FBQ3JFLFVBQUlDLElBQWU7QUFDbkIsYUFBQUQsRUFBVyxNQUFNLEdBQUcsRUFBRSxRQUFRLFNBQVVFLEdBQVc7QUFDN0NKLFVBQVdJLENBQVMsTUFBTSxTQUM1QkgsRUFBaUIsS0FBS0QsRUFBV0ksQ0FBUyxJQUFJLEdBQUcsSUFFakRELEtBQWdCQyxJQUFZO01BRWhDLENBQUMsR0FDTUQ7SUFDVDtBQVhBLFFBQUlFLElBWUFDLElBZ0JBQyxJQTVCSkMsS0FBQWpOLEdBQUEsTUFBQTtBQUFJOE0sV0FBWTtBQVlaQyxXQUFpQixTQUF3QmpELEdBQU9xQyxHQUFZZSxHQUFhO0FBQzNFLFlBQUlMLElBQVkvQyxFQUFNLE1BQU0sTUFBTXFDLEVBQVc7QUFBQSxTQU81Q2UsTUFBZ0IsU0FJakJKLE9BQWMsVUFBV2hELEVBQU0sV0FBVytDLENBQVMsTUFBTSxXQUN2RC9DLEVBQU0sV0FBVytDLENBQVMsSUFBSVYsRUFBVztNQUU3QyxHQUNJYSxLQUFlLFNBQXNCbEQsR0FBT3FDLEdBQVllLEdBQWE7QUFDdkVILFdBQWVqRCxHQUFPcUMsR0FBWWUsQ0FBVztBQUM3QyxZQUFJTCxJQUFZL0MsRUFBTSxNQUFNLE1BQU1xQyxFQUFXO0FBRTdDLFlBQUlyQyxFQUFNLFNBQVNxQyxFQUFXLElBQUksTUFBTSxRQUFXO0FBQ2pELGNBQUlnQixJQUFVaEI7QUFFZDtBQUNFckMsY0FBTSxPQUFPcUMsTUFBZWdCLElBQVUsTUFBTU4sSUFBWSxJQUFJTSxHQUFTckQsRUFBTSxPQUFPLElBQUksR0FFdEZxRCxJQUFVQSxFQUFRO2lCQUNYQSxNQUFZO1FBQ3ZCO01BQ0Y7SUFBQSxDQUFBO0FDdENBLGFBQVNDLEdBQVFDLEdBQUs7QUFZcEIsZUFOSS94QixJQUFJLEdBRUpELEdBQ0F2QyxJQUFJLEdBQ0p3MEIsSUFBTUQsRUFBSSxRQUVQQyxLQUFPLEdBQUcsRUFBRXgwQixHQUFHdzBCLEtBQU87QUFDM0JqeUIsWUFBSWd5QixFQUFJLFdBQVd2MEIsQ0FBQyxJQUFJLE9BQVF1MEIsRUFBSSxXQUFXLEVBQUV2MEIsQ0FBQyxJQUFJLFFBQVMsS0FBS3UwQixFQUFJLFdBQVcsRUFBRXYwQixDQUFDLElBQUksUUFBUyxNQUFNdTBCLEVBQUksV0FBVyxFQUFFdjBCLENBQUMsSUFBSSxRQUFTLElBQ3hJdUMsS0FFQ0EsSUFBSSxTQUFVLGVBQWVBLE1BQU0sTUFBTSxTQUFVLEtBQ3BEQSxLQUVBQSxNQUFNLElBQ05DLEtBRUNELElBQUksU0FBVSxlQUFlQSxNQUFNLE1BQU0sU0FBVSxPQUVuREMsSUFBSSxTQUFVLGVBQWVBLE1BQU0sTUFBTSxTQUFVO0FBSXRELGNBQVFneUIsR0FBSztRQUNYLEtBQUs7QUFDSGh5QixnQkFBTSt4QixFQUFJLFdBQVd2MEIsSUFBSSxDQUFDLElBQUksUUFBUztRQUV6QyxLQUFLO0FBQ0h3QyxnQkFBTSt4QixFQUFJLFdBQVd2MEIsSUFBSSxDQUFDLElBQUksUUFBUztRQUV6QyxLQUFLO0FBQ0h3QyxlQUFLK3hCLEVBQUksV0FBV3YwQixDQUFDLElBQUksS0FDekJ3QyxLQUVDQSxJQUFJLFNBQVUsZUFBZUEsTUFBTSxNQUFNLFNBQVU7TUFDeEQ7QUFJQSxhQUFBQSxLQUFLQSxNQUFNLElBQ1hBLEtBRUNBLElBQUksU0FBVSxlQUFlQSxNQUFNLE1BQU0sU0FBVSxPQUMzQ0EsSUFBSUEsTUFBTSxRQUFRLEdBQUcsU0FBUyxFQUFFO0lBQzNDO0FBcERBLFFBQUFpeUIsS0FBQXZOLEdBQUEsTUFBQTtJQUFBLENBQUE7QUNBQSxRQUFJd04sSUFBSkMsS0FBQXpOLEdBQUEsTUFBQTtBQUFJd04sV0FBZSxFQUNqQix5QkFBeUIsR0FDekIsYUFBYSxHQUNiLG1CQUFtQixHQUNuQixrQkFBa0IsR0FDbEIsa0JBQWtCLEdBQ2xCLFNBQVMsR0FDVCxjQUFjLEdBQ2QsaUJBQWlCLEdBQ2pCLGFBQWEsR0FDYixTQUFTLEdBQ1QsTUFBTSxHQUNOLFVBQVUsR0FDVixjQUFjLEdBQ2QsWUFBWSxHQUNaLGNBQWMsR0FDZCxXQUFXLEdBQ1gsU0FBUyxHQUNULFlBQVksR0FDWixhQUFhLEdBQ2IsY0FBYyxHQUNkLFlBQVksR0FDWixlQUFlLEdBQ2YsZ0JBQWdCLEdBQ2hCLGlCQUFpQixHQUNqQixXQUFXLEdBQ1gsZUFBZSxHQUNmLGNBQWMsR0FDZCxrQkFBa0IsR0FDbEIsWUFBWSxHQUNaLFlBQVksR0FDWixTQUFTLEdBQ1QsT0FBTyxHQUNQLFNBQVMsR0FDVCxTQUFTLEdBQ1QsUUFBUSxHQUNSLFFBQVEsR0FDUixNQUFNLEdBQ04saUJBQWlCLEdBRWpCLGFBQWEsR0FDYixjQUFjLEdBQ2QsYUFBYSxHQUNiLGlCQUFpQixHQUNqQixrQkFBa0IsR0FDbEIsa0JBQWtCLEdBQ2xCLGVBQWUsR0FDZixhQUFhLEVBQ2Y7SUFBQSxDQUFBO0FDNEJBLGFBQVNFLEdBQW9CQyxHQUFhbEIsR0FBWW1CLEdBQWU7QUFDbkUsVUFBSUEsS0FBaUI7QUFDbkIsZUFBTztBQUdULFVBQUlBLEVBQWMscUJBQXFCO0FBS3JDLGVBQU9BO0FBR1QsY0FBUSxPQUFPQSxHQUFlO1FBQzVCLEtBQUs7QUFFRCxpQkFBTztRQUdYLEtBQUssVUFDSDtBQUNFLGNBQUlBLEVBQWMsU0FBUztBQUN6QixtQkFBQUMsS0FBUyxFQUNQLE1BQU1ELEVBQWMsTUFDcEIsUUFBUUEsRUFBYyxRQUN0QixNQUFNQyxHQUNSLEdBQ09ELEVBQWM7QUFHdkIsY0FBSUEsRUFBYyxXQUFXLFFBQVc7QUFDdEMsZ0JBQUk5TCxJQUFPOEwsRUFBYztBQUV6QixnQkFBSTlMLE1BQVM7QUFHWCxxQkFBT0EsTUFBUztBQUNkK0wscUJBQVMsRUFDUCxNQUFNL0wsRUFBSyxNQUNYLFFBQVFBLEVBQUssUUFDYixNQUFNK0wsR0FDUixHQUNBL0wsSUFBT0EsRUFBSztBQUloQixnQkFBSW1LLElBQVMyQixFQUFjLFNBQVM7QUFNcEMsbUJBQU8zQjtVQUNUO0FBRUEsaUJBQU82QixHQUF1QkgsR0FBYWxCLEdBQVltQixDQUFhO1FBQ3RFO1FBRUYsS0FBSyxZQUNIO0FBQ0UsY0FBSUQsTUFBZ0IsUUFBVztBQUM3QixnQkFBSUksSUFBaUJGLElBQ2pCRyxJQUFTSixFQUFjRCxDQUFXO0FBQ3RDLG1CQUFBRSxLQUFTRSxHQUNGTCxHQUFvQkMsR0FBYWxCLEdBQVl1QixDQUFNO1VBQzVEO0FBSUE7UUFDRjtRQUVGLEtBQUs7QUFDSCxjQUFJO0FBQ0YsZ0JBQUlDLEdBQ0FDO0FBV047TUFDSjtBQUdBLFVBQUl6QixLQUFjO0FBQ2hCLGVBQU9tQjtBQUdULFVBQUlPLElBQVMxQixFQUFXbUIsQ0FBYTtBQUNyQyxhQUFPTyxNQUFXLFNBQVlBLElBQVNQO0lBQ3pDO0FBRUEsYUFBU0UsR0FBdUJILEdBQWFsQixHQUFZMkIsR0FBSztBQUM1RCxVQUFJQyxJQUFTO0FBRWIsVUFBSSxNQUFNLFFBQVFELENBQUc7QUFDbkIsaUJBQVN0MUIsSUFBSSxHQUFHQSxJQUFJczFCLEVBQUksUUFBUXQxQjtBQUM5QnUxQixlQUFVWCxHQUFvQkMsR0FBYWxCLEdBQVkyQixFQUFJdDFCLENBQUMsQ0FBQyxJQUFJOztBQUduRSxpQkFBU3cxQixLQUFRRixHQUFLO0FBQ3BCLGNBQUl4TCxJQUFRd0wsRUFBSUUsQ0FBSTtBQUVwQixjQUFJLE9BQU8xTCxLQUFVO0FBQ2Y2SixpQkFBYyxRQUFRQSxFQUFXN0osQ0FBSyxNQUFNLFNBQzlDeUwsS0FBVUMsSUFBTyxNQUFNN0IsRUFBVzdKLENBQUssSUFBSSxNQUNsQzJMLEdBQW1CM0wsQ0FBSyxNQUNqQ3lMLEtBQVVHLEdBQWlCRixDQUFJLElBQUksTUFBTUcsR0FBa0JILEdBQU0xTCxDQUFLLElBQUk7bUJBT3hFLE1BQU0sUUFBUUEsQ0FBSyxLQUFLLE9BQU9BLEVBQU0sQ0FBQyxLQUFNLGFBQWE2SixLQUFjLFFBQVFBLEVBQVc3SixFQUFNLENBQUMsQ0FBQyxNQUFNO0FBQzFHLHFCQUFTOEwsSUFBSyxHQUFHQSxJQUFLOUwsRUFBTSxRQUFROEw7QUFDOUJILGlCQUFtQjNMLEVBQU04TCxDQUFFLENBQUMsTUFDOUJMLEtBQVVHLEdBQWlCRixDQUFJLElBQUksTUFBTUcsR0FBa0JILEdBQU0xTCxFQUFNOEwsQ0FBRSxDQUFDLElBQUk7ZUFHN0U7QUFDTCxnQkFBSUMsSUFBZWpCLEdBQW9CQyxHQUFhbEIsR0FBWTdKLENBQUs7QUFFckUsb0JBQVEwTCxHQUFNO2NBQ1osS0FBSztjQUNMLEtBQUssaUJBQ0g7QUFDRUQscUJBQVVHLEdBQWlCRixDQUFJLElBQUksTUFBTUssSUFBZTtBQUN4RDtjQUNGO2NBRUY7QUFNSU4scUJBQVVDLElBQU8sTUFBTUssSUFBZTtZQUU1QztVQUNGO1FBRUo7QUFHRixhQUFPTjtJQUNUO0FBcE9BLFFBTUlPLElBQ0FDLElBRUFDLElBSUFQLElBSUFDLElBSUFDLElBaU5BTSxJQVNBbEIsSUFDQW1CLElBaFBKQyxLQUFBalAsR0FBQSxNQUFBO0FBQUF1TixTQUFBQTtBQUNBRSxTQUFBQTtBQUNBdEQsU0FBQUE7QUFJSXlFLFdBQWlCLGNBQ2pCQyxLQUFpQiwrQkFFakJDLEtBQW1CLFNBQTBCM0csR0FBVTtBQUN6RCxlQUFPQSxFQUFTLFdBQVcsQ0FBQyxNQUFNO01BQ3BDLEdBRUlvRyxLQUFxQixTQUE0QjNMLEdBQU87QUFDMUQsZUFBT0EsS0FBUyxRQUFRLE9BQU9BLEtBQVU7TUFDM0MsR0FFSTRMLEtBQWtDdkUsR0FBUSxTQUFVaUYsR0FBVztBQUNqRSxlQUFPSixHQUFpQkksQ0FBUyxJQUFJQSxJQUFZQSxFQUFVLFFBQVFOLElBQWdCLEtBQUssRUFBRSxZQUFZO01BQ3hHLENBQUMsR0FFR0gsS0FBb0IsU0FBMkJoMUIsR0FBS21wQixHQUFPO0FBQzdELGdCQUFRbnBCLEdBQUs7VUFDWCxLQUFLO1VBQ0wsS0FBSztBQUVELGdCQUFJLE9BQU9tcEIsS0FBVTtBQUNuQixxQkFBT0EsRUFBTSxRQUFRaU0sSUFBZ0IsU0FBVWxLLEdBQU93SyxHQUFJQyxHQUFJO0FBQzVELHVCQUFBdkIsS0FBUyxFQUNQLE1BQU1zQixHQUNOLFFBQVFDLEdBQ1IsTUFBTXZCLEdBQ1IsR0FDT3NCO2NBQ1QsQ0FBQztRQUdUO0FBRUEsZUFBSTNCLEdBQVMvekIsQ0FBRyxNQUFNLEtBQUssQ0FBQ3ExQixHQUFpQnIxQixDQUFHLEtBQUssT0FBT21wQixLQUFVLFlBQVlBLE1BQVUsSUFDbkZBLElBQVEsT0FHVkE7TUFDVDtBQTBMSW1NLFdBQWUsa0NBVWZDLEtBQWtCLFNBQXlCNU0sR0FBTXFLLEdBQVlrQixHQUFhO0FBQzVFLFlBQUl2TCxFQUFLLFdBQVcsS0FBSyxPQUFPQSxFQUFLLENBQUMsS0FBTSxZQUFZQSxFQUFLLENBQUMsTUFBTSxRQUFRQSxFQUFLLENBQUMsRUFBRSxXQUFXO0FBQzdGLGlCQUFPQSxFQUFLLENBQUM7QUFHZixZQUFJaU4sSUFBYSxNQUNicEQsSUFBUztBQUNiNEIsYUFBUztBQUNULFlBQUl5QixJQUFVbE4sRUFBSyxDQUFDO0FBRWhCa04sYUFBVyxRQUFRQSxFQUFRLFFBQVEsVUFDckNELElBQWEsT0FDYnBELEtBQVV5QixHQUFvQkMsR0FBYWxCLEdBQVk2QyxDQUFPLEtBTTlEckQsS0FBVXFELEVBQVEsQ0FBQztBQUlyQixpQkFBU3gyQixJQUFJLEdBQUdBLElBQUlzcEIsRUFBSyxRQUFRdHBCO0FBQy9CbXpCLGVBQVV5QixHQUFvQkMsR0FBYWxCLEdBQVlySyxFQUFLdHBCLENBQUMsQ0FBQyxHQUUxRHUyQixNQUtGcEQsS0FBVXFELEVBQVF4MkIsQ0FBQztBQUl2QixZQUFJeTJCO0FBVUpSLFdBQWEsWUFBWTtBQUl6QixpQkFISVMsSUFBaUIsSUFDakI3SyxJQUVJQSxJQUFRb0ssR0FBYSxLQUFLOUMsQ0FBTSxPQUFPO0FBQzdDdUQsZUFBa0IsTUFDbEI3SyxFQUFNLENBQUM7QUFHVCxZQUFJOEssSUFBT3JDLEdBQVduQixDQUFNLElBQUl1RDtBQWVoQyxlQUFPLEVBQ0wsTUFBTUMsR0FDTixRQUFReEQsR0FDUixNQUFNNEIsR0FDUjtNQUNGO0lBQUEsQ0FBQTtBQ3pUQSxRQUFBNkIsSUFFSUMsSUFJQUMsSUFDQUMsSUFDQUMsSUFSSkMsS0FBQS9QLEdBQUEsTUFBQTtBQUFBMFAsV0FBdUIsRUFBQSxFQUFBLENBQUEsR0FFbkJDLEtBQWUsU0FBc0JLLEdBQVE7QUFDL0MsZUFBT0EsRUFBTztNQUNoQixHQUVJSixLQUEyQixHQUFBLHFCQUFtQyxHQUFBLHFCQUE2QixPQUMzRkMsS0FBMkNELE1BQXNCRCxJQUNqRUcsS0FBdUNGLE1BQTRCLEdBQUE7SUFBQSxDQUFBO0FDcUd2RSxhQUFTSyxHQUFVQyxHQUFXO0FBQzVCLFVBQUlDLElBQWdCRCxFQUFVLGVBQWVBLEVBQVUsUUFBUSxhQUUzREUsSUFBUyxTQUFnQmxLLEdBQU9tSyxHQUFLO0FBQ3ZDLFlBQUlDLElBQWMsR0FBQSxXQUFXQyxFQUFZO0FBQ3pDLGVBQTBCLEdBQUEsY0FBY0wsR0FBV3BRLEVBQVMsRUFDMUQsT0FBT3dRLEdBQ1AsS0FBS0QsRUFDUCxHQUFHbkssQ0FBSyxDQUFDO01BQ1gsR0FHSXNLLElBQStCLEdBQUEsV0FBV0osQ0FBTTtBQUNwRCxhQUFBSSxFQUFVLGNBQWMsZUFBZUwsSUFBZ0IsS0FDaERsUCxHQUFxQnVQLEdBQVdOLENBQVM7SUFDbEQ7QUE1SEEsUUFBQVIsSUFDQWUsSUFTSTNELElBQ0E0RCxJQUVBQyxJQWNBQyxJQUNBQyxJQUlBQyxJQWlDQVAsSUFNQVEsSUFJQUMsSUFrQkFDLElBS0FDLElBdUVBQyxJQUVBQyxJQXlCQUMsSUFZQUMsSUFtREFDLElBblFKQyxLQUFBeFIsR0FBQSxNQUFBO0FBQUEwUCxXQUF1QixFQUFBLEVBQUEsQ0FBQSxHQUN2QmUsS0FBdUMsRUFBQSxFQUFBLENBQUE7QUFDdkN6RixTQUFBQTtBQUNBakwsUUFBQUE7QUFDQTZKLFNBQUFBO0FBQ0EwQyxTQUFBQTtBQUNBVyxTQUFBQTtBQUNBZ0MsU0FBQUE7QUFDQWMsU0FBQUE7QUFFSWpELFdBQVksTUFDWjRELEtBQVMsQ0FBQyxFQUFFLGdCQUVaQyxLQUEyQyxHQUFBLGNBTS9DLE9BQU8sY0FBZ0IsTUFBNkJyRyxHQUFZLEVBQzlELEtBQUssTUFDUCxDQUFDLElBQUksSUFBSSxHQU1Mc0csS0FBZ0JELEdBQW9CLFVBQ3BDRSxLQUEyQixXQUEyQjtBQUN4RCxnQkFBQSxHQUFPLEdBQUEsWUFBV0YsRUFBbUI7TUFDdkMsR0FFSUcsS0FBbUIsU0FBMEJqSCxHQUFNO0FBRXJELGdCQUFBLEdBQW9CLEdBQUEsWUFBVyxTQUFVM0QsR0FBT21LLEdBQUs7QUFFbkQsY0FBSXZHLEtBQUFBLEdBQVEsR0FBQSxZQUFXNkcsRUFBbUI7QUFDMUMsaUJBQU85RyxFQUFLM0QsR0FBTzRELEdBQU91RyxDQUFHO1FBQy9CLENBQUM7TUFDSDtBQUVLdkQsYUFDSGdFLEtBQW1CLFNBQTBCakgsR0FBTTtBQUNqRCxlQUFPLFNBQVUzRCxHQUFPO0FBQ3RCLGNBQUk0RCxLQUFBQSxHQUFRLEdBQUEsWUFBVzZHLEVBQW1CO0FBRTFDLGlCQUFJN0csTUFBVSxRQU1aQSxJQUFRUSxHQUFZLEVBQ2xCLEtBQUssTUFDUCxDQUFDLEdBQ3lCLEdBQUEsY0FBY3FHLEdBQW9CLFVBQVUsRUFDcEUsT0FBTzdHLEVBQ1QsR0FBR0QsRUFBSzNELEdBQU80RCxDQUFLLENBQUMsS0FFZEQsRUFBSzNELEdBQU80RCxDQUFLO1FBRTVCO01BQ0Y7QUFHRXlHLFdBQW9DLEdBQUEsY0FBYyxDQUFDLENBQUMsR0FNcERRLEtBQVcsV0FBb0I7QUFDakMsZUFBYSxHQUFBLFdBQVdSLEVBQVk7TUFDdEMsR0FFSVMsS0FBVyxTQUFrQlMsR0FBWW5CLEdBQU87QUFDbEQsWUFBSSxPQUFPQSxLQUFVLFlBQVk7QUFDL0IsY0FBSW9CLElBQWNwQixFQUFNbUIsQ0FBVTtBQU1sQyxpQkFBT0M7UUFDVDtBQU1BLGVBQU81UixFQUFTLENBQUMsR0FBRzJSLEdBQVluQixDQUFLO01BQ3ZDLEdBRUlXLEtBQXNDdEgsR0FBWSxTQUFVOEgsR0FBWTtBQUMxRSxlQUFPOUgsR0FBWSxTQUFVMkcsR0FBTztBQUNsQyxpQkFBT1UsR0FBU1MsR0FBWW5CLENBQUs7UUFDbkMsQ0FBQztNQUNILENBQUMsR0FDR1ksS0FBZ0IsU0FBdUJoTCxHQUFPO0FBQ2hELFlBQUlvSyxJQUFjLEdBQUEsV0FBV0MsRUFBWTtBQUV6QyxlQUFJckssRUFBTSxVQUFVb0ssTUFDbEJBLElBQVFXLEdBQXFCWCxDQUFLLEVBQUVwSyxFQUFNLEtBQUssSUFHdkIsR0FBQSxjQUFjcUssR0FBYSxVQUFVLEVBQzdELE9BQU9ELEVBQ1QsR0FBR3BLLEVBQU0sUUFBUTtNQUNuQjtBQTZESWlMLFdBQWUsc0NBRWZDLEtBQXFCLFNBQTRCbkwsR0FBTUMsR0FBTztBQU1oRSxZQUFJeUwsSUFBVyxDQUFDO0FBRWhCLGlCQUFTbDRCLEtBQU95c0I7QUFDVndLLGFBQU8sS0FBS3hLLEdBQU96c0IsQ0FBRyxNQUN4Qms0QixFQUFTbDRCLENBQUcsSUFBSXlzQixFQUFNenNCLENBQUc7QUFPN0IsWUFIQWs0QixFQUFTUixFQUFZLElBQUlsTCxHQUdyQjtBQUNGLGNBQUkyTDtBQUlOLGVBQU9EO01BQ1QsR0FFSU4sS0FBWSxTQUFtQlEsR0FBTTtBQUN2QyxZQUFJL0gsSUFBUStILEVBQUssT0FDYjFGLElBQWEwRixFQUFLLFlBQ2xCM0UsSUFBYzJFLEVBQUs7QUFDdkIsZUFBQTlFLEdBQWVqRCxHQUFPcUMsR0FBWWUsQ0FBVyxHQUM3QzJDLEdBQXlDLFdBQVk7QUFDbkQsaUJBQU83QyxHQUFhbEQsR0FBT3FDLEdBQVllLENBQVc7UUFDcEQsQ0FBQyxHQUVNO01BQ1QsR0FFSW9FLEtBQXlCUixHQUFpQixTQUFVNUssR0FBTzRELEdBQU91RyxHQUFLO0FBQ3pFLFlBQUl5QixJQUFVNUwsRUFBTTtBQUloQixlQUFPNEwsS0FBWSxZQUFZaEksRUFBTSxXQUFXZ0ksQ0FBTyxNQUFNLFdBQy9EQSxJQUFVaEksRUFBTSxXQUFXZ0ksQ0FBTztBQUdwQyxZQUFJQyxJQUFtQjdMLEVBQU1pTCxFQUFZLEdBQ3JDekUsSUFBbUIsQ0FBQ29GLENBQU8sR0FDM0JqRixJQUFZO0FBRVosZUFBTzNHLEVBQU0sYUFBYyxXQUM3QjJHLElBQVlMLEdBQW9CMUMsRUFBTSxZQUFZNEMsR0FBa0J4RyxFQUFNLFNBQVMsSUFDMUVBLEVBQU0sYUFBYSxTQUM1QjJHLElBQVkzRyxFQUFNLFlBQVk7QUFHaEMsWUFBSWlHLElBQWE2QyxHQUFnQnRDLEdBQWtCLFFBQWlCLEdBQUEsV0FBVzZELEVBQVksQ0FBQztBQUU1RixZQUFJO0FBQ0YsY0FBSXlCO0FBT05uRixhQUFhL0MsRUFBTSxNQUFNLE1BQU1xQyxFQUFXO0FBQzFDLFlBQUl3RixJQUFXLENBQUM7QUFFaEIsaUJBQVNsNEIsS0FBT3lzQjtBQUNWd0ssYUFBTyxLQUFLeEssR0FBT3pzQixDQUFHLEtBQUtBLE1BQVEsU0FBU0EsTUFBUTAzQixPQUN0RFEsRUFBU2w0QixDQUFHLElBQUl5c0IsRUFBTXpzQixDQUFHO0FBSTdCLGVBQUFrNEIsRUFBUyxNQUFNdEIsR0FDZnNCLEVBQVMsWUFBWTlFLEdBQ0ssR0FBQSxjQUFvQixHQUFBLFVBQVUsTUFBeUIsR0FBQSxjQUFjd0UsSUFBVyxFQUN4RyxPQUFPdkgsR0FDUCxZQUFZcUMsR0FDWixhQUFhLE9BQU80RixLQUFxQixTQUMzQyxDQUFDLEdBQXNCLEdBQUEsY0FBY0EsR0FBa0JKLENBQVEsQ0FBQztNQUNsRSxDQUFDLEdBTUdKLEtBQVlEO0lBQUFBLENBQUFBO0FDblFoQixRQUFBVyxLQUFBLENBQUE7QUFBQTVILE9BQUE0SCxJQUFBLEVBQUEsZUFBQSxNQUFBckIsSUFBQSxZQUFBLE1BQUFzQixJQUFBLFFBQUEsTUFBQUMsSUFBQSxjQUFBLE1BQUE1QixJQUFBLGVBQUEsTUFBQVcsSUFBQSwwQkFBQSxNQUFBTCxJQUFBLGVBQUEsTUFBQXVCLElBQUEsS0FBQSxNQUFBQyxJQUFBLEtBQUEsTUFBQUQsSUFBQSxXQUFBLE1BQUFFLElBQUEsVUFBQSxNQUFBdkIsSUFBQSxrQkFBQSxNQUFBRCxJQUFBLFdBQUEsTUFBQWIsR0FBQUEsQ0FBQUE7QUFtUkEsYUFBU29DLEtBQU07QUFDYixlQUFTRSxJQUFPLFVBQVUsUUFBUW5RLElBQU8sSUFBSSxNQUFNbVEsQ0FBSSxHQUFHakUsSUFBTyxHQUFHQSxJQUFPaUUsR0FBTWpFO0FBQy9FbE0sVUFBS2tNLENBQUksSUFBSSxVQUFVQSxDQUFJO0FBRzdCLGFBQU9VLEdBQWdCNU0sQ0FBSTtJQUM3QjtBQW1FQSxhQUFTb1EsR0FBTS9GLEdBQVk0RixHQUFLeEYsR0FBVztBQUN6QyxVQUFJSCxJQUFtQixDQUFDLEdBQ3BCRSxJQUFlSixHQUFvQkMsR0FBWUMsR0FBa0JHLENBQVM7QUFFOUUsYUFBSUgsRUFBaUIsU0FBUyxJQUNyQkcsSUFHRkQsSUFBZXlGLEVBQUkzRixDQUFnQjtJQUM1QztBQXJXQSxRQUVBZ0QsSUFRQXJELElBc0lJK0YsSUF5QkFELElBa0hBRyxJQWNBRyxJQThEQXBCLElBYUFhLElBcFhKUSxLQUFBMVMsR0FBQSxNQUFBO0FBQUF3UixTQUFBQTtBQUNBQSxTQUFBQTtBQUNBOUIsV0FBdUIsRUFBQSxFQUFBLENBQUE7QUFDdkJ6QyxTQUFBQTtBQUNBOEMsU0FBQUE7QUFDQWQsU0FBQUE7QUFDQWpFLFNBQUFBO0FBQ0FqTCxRQUFBQTtBQUNBNkosU0FBQUE7QUFFQXlDLFdBQU8sRUFBQSxHQUFBLENBQUEsR0FzSUgrRixLQUFNLFNBQWFuTSxHQUFNQyxHQUFPO0FBQ2xDLFlBQUk5RCxJQUFPO0FBRVgsWUFBSThELEtBQVMsUUFBUSxDQUFDd0ssR0FBTyxLQUFLeEssR0FBTyxLQUFLO0FBRTVDLGlCQUFhLEdBQUEsY0FBYyxNQUFNLFFBQVc5RCxDQUFJO0FBR2xELFlBQUl1USxJQUFhdlEsRUFBSyxRQUNsQndRLElBQXdCLElBQUksTUFBTUQsQ0FBVTtBQUNoREMsVUFBc0IsQ0FBQyxJQUFJckIsSUFDM0JxQixFQUFzQixDQUFDLElBQUl4QixHQUFtQm5MLEdBQU1DLENBQUs7QUFFekQsaUJBQVNwdEIsSUFBSSxHQUFHQSxJQUFJNjVCLEdBQVk3NUI7QUFDOUI4NUIsWUFBc0I5NUIsQ0FBQyxJQUFJc3BCLEVBQUt0cEIsQ0FBQztBQUluQyxlQUFhLEdBQUEsY0FBYyxNQUFNLE1BQU04NUIsQ0FBcUI7TUFDOUQsR0FNSVQsS0FBd0JyQixHQUFpQixTQUFVNUssR0FBTzRELEdBQU87QUFVbkUsWUFBSW1DLElBQVMvRixFQUFNLFFBQ2ZpRyxJQUFhNkMsR0FBZ0IsQ0FBQy9DLENBQU0sR0FBRyxRQUFpQixHQUFBLFdBQVdzRSxFQUFZLENBQUM7QUFFcEYsWUFBSSxDQUFDekQsSUFBYTtBQU9oQixtQkFOSStFLEdBRUFnQixJQUFrQjFHLEVBQVcsTUFDN0IyRyxJQUFtQjNHLEVBQVcsUUFDOUJySyxJQUFPcUssRUFBVyxNQUVmckssTUFBUztBQUNkK1EsaUJBQW1CLE1BQU0vUSxFQUFLLE1BQzlCZ1IsS0FBb0JoUixFQUFLLFFBQ3pCQSxJQUFPQSxFQUFLO0FBR2QsY0FBSXNLLElBQWN0QyxFQUFNLFdBQVcsTUFDL0JsQyxJQUFRa0MsRUFBTSxPQUFPLElBQUksRUFDM0IsTUFBTStJLEdBQ04sUUFBUUMsRUFDVixHQUFHaEosRUFBTSxPQUFPc0MsQ0FBVztBQUUzQixpQkFBSUEsSUFDSyxPQUdpQixHQUFBLGNBQWMsVUFBVXlGLElBQU8sQ0FBQyxHQUFHQSxFQUFLLGNBQWMsSUFBSS9ILEVBQU0sTUFBTSxhQUFhK0ksR0FBaUJoQixFQUFLLDBCQUEwQixFQUMzSixRQUFRakssRUFDVixHQUFHaUssRUFBSyxRQUFRL0gsRUFBTSxNQUFNLE9BQU8rSCxFQUFLO1FBQzFDO0FBTUEsWUFBSWtCLElBQWlCLEdBQUEsT0FBTztBQUM1QixlQUFBakQsR0FBcUMsV0FBWTtBQUMvQyxjQUFJcjJCLElBQU1xd0IsRUFBTSxNQUFNLFdBRWxCbEcsSUFBUSxJQUFJa0csRUFBTSxNQUFNLFlBQVksRUFDdEMsS0FBS3J3QixHQUNMLE9BQU9xd0IsRUFBTSxNQUFNLE9BQ25CLFdBQVdBLEVBQU0sTUFBTSxXQUN2QixRQUFRQSxFQUFNLE1BQU0sU0FDdEIsQ0FBQyxHQUNHa0osSUFBYyxPQUVkbE4sSUFBTyxTQUFTLGNBQWMseUJBQTBCcnNCLElBQU0sTUFBTTB5QixFQUFXLE9BQU8sSUFBSztBQUUvRixpQkFBSXJDLEVBQU0sTUFBTSxLQUFLLFdBQ25CbEcsRUFBTSxTQUFTa0csRUFBTSxNQUFNLEtBQUssQ0FBQyxJQUcvQmhFLE1BQVMsU0FDWGtOLElBQWMsTUFFZGxOLEVBQUssYUFBYSxnQkFBZ0Jyc0IsQ0FBRyxHQUNyQ21xQixFQUFNLFFBQVEsQ0FBQ2tDLENBQUksQ0FBQyxJQUd0QmlOLEVBQVMsVUFBVSxDQUFDblAsR0FBT29QLENBQVcsR0FDL0IsV0FBWTtBQUNqQnBQLGNBQU0sTUFBTTtVQUNkO1FBQ0YsR0FBRyxDQUFDa0csQ0FBSyxDQUFDLEdBQ1ZnRyxHQUFxQyxXQUFZO0FBQy9DLGNBQUltRCxJQUFrQkYsRUFBUyxTQUMzQm5QLElBQVFxUCxFQUFnQixDQUFDLEdBQ3pCRCxJQUFjQyxFQUFnQixDQUFDO0FBRW5DLGNBQUlELEdBQWE7QUFDZkMsY0FBZ0IsQ0FBQyxJQUFJO0FBQ3JCO1VBQ0Y7QUFPQSxjQUxJOUcsRUFBVyxTQUFTLFVBRXRCYSxHQUFhbEQsR0FBT3FDLEVBQVcsTUFBTSxJQUFJLEdBR3ZDdkksRUFBTSxLQUFLLFFBQVE7QUFFckIsZ0JBQUl3RixJQUFVeEYsRUFBTSxLQUFLQSxFQUFNLEtBQUssU0FBUyxDQUFDLEVBQUU7QUFDaERBLGNBQU0sU0FBU3dGLEdBQ2Z4RixFQUFNLE1BQU07VUFDZDtBQUVBa0csWUFBTSxPQUFPLElBQUlxQyxHQUFZdkksR0FBTyxLQUFLO1FBQzNDLEdBQUcsQ0FBQ2tHLEdBQU9xQyxFQUFXLElBQUksQ0FBQyxHQUNwQjtNQUNULENBQUM7QUFjR21HLFdBQVksV0FBcUI7QUFDbkMsWUFBSVksSUFBYWIsR0FBSSxNQUFNLFFBQVEsU0FBUyxHQUN4QzVDLElBQU8sZUFBZXlELEVBQVc7QUFFckMsZUFBTyxFQUNMLE1BQU16RCxHQUNOLFFBQVEsZ0JBQWdCQSxJQUFPLE1BQU15RCxFQUFXLFNBQVMsS0FDekQsTUFBTSxHQUNOLFVBQVUsV0FBb0I7QUFDNUIsaUJBQU8sVUFBVSxLQUFLLE9BQU8sTUFBTSxLQUFLLFNBQVM7UUFDbkQsRUFDRjtNQUNGLEdBRUlULEtBQWEsU0FBU0EsRUFBV3JRLEdBQU07QUFLekMsaUJBSklrTCxJQUFNbEwsRUFBSyxRQUNYdHBCLElBQUksR0FDSnE2QixJQUFNLElBRUhyNkIsSUFBSXcwQixHQUFLeDBCLEtBQUs7QUFDbkIsY0FBSWl4QixJQUFNM0gsRUFBS3RwQixDQUFDO0FBQ2hCLGNBQUlpeEIsS0FBTyxNQUNYO0FBQUEsZ0JBQUlxSixJQUFRO0FBRVosb0JBQVEsT0FBT3JKLEdBQUs7Y0FDbEIsS0FBSztBQUNIO2NBRUYsS0FBSyxVQUNIO0FBQ0Usb0JBQUksTUFBTSxRQUFRQSxDQUFHO0FBQ25CcUosc0JBQVFYLEVBQVcxSSxDQUFHO3FCQUNqQjtBQUtMcUosc0JBQVE7QUFFUiwyQkFBUy8zQixLQUFLMHVCO0FBQ1JBLHNCQUFJMXVCLENBQUMsS0FBS0EsTUFDWiszQixNQUFVQSxLQUFTLE1BQ25CQSxLQUFTLzNCO2dCQUdmO0FBRUE7Y0FDRjtjQUVGO0FBRUkrM0Isb0JBQVFySjtZQUVkO0FBRUlxSixrQkFDRkQsTUFBUUEsS0FBTyxNQUNmQSxLQUFPQztVQUFBQTtRQUVYO0FBRUEsZUFBT0Q7TUFDVDtBQWFJOUIsV0FBWSxTQUFtQlEsR0FBTTtBQUN2QyxZQUFJL0gsSUFBUStILEVBQUssT0FDYndCLElBQWdCeEIsRUFBSztBQUN6QixlQUFBaEMsR0FBeUMsV0FBWTtBQUVuRCxtQkFBUy8yQixJQUFJLEdBQUdBLElBQUl1NkIsRUFBYyxRQUFRdjZCO0FBQ3hDazBCLGVBQWFsRCxHQUFPdUosRUFBY3Y2QixDQUFDLEdBQUcsS0FBSztRQUUvQyxDQUFDLEdBRU07TUFDVCxHQUVJbzVCLEtBQTRCcEIsR0FBaUIsU0FBVTVLLEdBQU80RCxHQUFPO0FBQ3ZFLFlBQUl3SixJQUFjLE9BQ2RELElBQWdCLENBQUMsR0FFakJoQixJQUFNLFdBQWU7QUFLdkIsbUJBQVNFLElBQU8sVUFBVSxRQUFRblEsSUFBTyxJQUFJLE1BQU1tUSxDQUFJLEdBQUdqRSxJQUFPLEdBQUdBLElBQU9pRSxHQUFNakU7QUFDL0VsTSxjQUFLa00sQ0FBSSxJQUFJLFVBQVVBLENBQUk7QUFHN0IsY0FBSW5DLElBQWE2QyxHQUFnQjVNLEdBQU0wSCxFQUFNLFVBQVU7QUFDdkQsaUJBQUF1SixFQUFjLEtBQUtsSCxDQUFVLEdBRTdCWSxHQUFlakQsR0FBT3FDLEdBQVksS0FBSyxHQUNoQ3JDLEVBQU0sTUFBTSxNQUFNcUMsRUFBVztRQUN0QyxHQUVJb0gsSUFBSyxXQUFjO0FBS3JCLG1CQUFTQyxJQUFRLFVBQVUsUUFBUXBSLElBQU8sSUFBSSxNQUFNb1IsQ0FBSyxHQUFHQyxJQUFRLEdBQUdBLElBQVFELEdBQU9DO0FBQ3BGclIsY0FBS3FSLENBQUssSUFBSSxVQUFVQSxDQUFLO0FBRy9CLGlCQUFPakIsR0FBTTFJLEVBQU0sWUFBWXVJLEdBQUtJLEdBQVdyUSxDQUFJLENBQUM7UUFDdEQsR0FFSXNSLElBQVUsRUFDWixLQUFLckIsR0FDTCxJQUFJa0IsR0FDSixPQUFhLEdBQUEsV0FBV2hELEVBQVksRUFDdEMsR0FDSW9ELElBQU16TixFQUFNLFNBQVN3TixDQUFPO0FBQ2hDLGVBQUFKLElBQWMsTUFDWSxHQUFBLGNBQW9CLEdBQUEsVUFBVSxNQUF5QixHQUFBLGNBQWNqQyxJQUFXLEVBQ3hHLE9BQU92SCxHQUNQLGVBQWV1SixFQUNqQixDQUFDLEdBQUdNLENBQUc7TUFDVCxDQUFDO0lBQUEsQ0FBQTtBQy9aRCxRQUFBQyxLQUFBejdCLEVBQUEsQ0FBQUMsSUFBQUMsT0FBQTtBQUFBLGVBQVN3N0IsR0FBdUJ6RixHQUFLO0FBQ25DLGVBQU9BLEtBQU9BLEVBQUksYUFBYUEsSUFBTSxFQUNuQyxTQUFXQSxFQUNiO01BQ0Y7QUFDQS8xQixTQUFPLFVBQVV3N0IsSUFBd0J4N0IsR0FBTyxRQUFRLGFBQWEsTUFBTUEsR0FBTyxRQUFRLFVBQWFBLEdBQU87SUFBQSxDQUFBO0FDTDlHLFFBQUF5N0IsS0FBQTM3QixFQUFBQyxRQUFBO0FBQUE7QUFFQSxhQUFPLGVBQWVBLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNEQSxTQUFRLFVBQVUyN0I7QUFNbEIsZUFBU0EsR0FBc0JDLEdBQU07QUFLbkMsWUFBSUMsSUFBTSw0Q0FBNENEO0FBQ3RELGlCQUFTbDdCLElBQUksR0FBR0EsSUFBSSxVQUFVLFFBQVFBLEtBQUs7QUFHekNtN0IsZUFBTyxhQUFhLG1CQUFtQixVQUFVbjdCLENBQUMsQ0FBQztBQUVyRCxlQUFPLHlCQUF5Qms3QixJQUFPLGFBQWFDLElBQU07TUFFNUQ7SUFBQSxDQUFBO0FDeEJBLFFBQUFILEtBQUEzN0IsRUFBQUMsUUFBQTtBQUFBO0FBRUEsVUFBSXk3QixLQUF5QixHQUFBO0FBQzdCLGFBQU8sZUFBZXo3QixJQUFTLGNBQWMsRUFDM0MsT0FBTyxLQUNULENBQUM7QUFDRCxhQUFPLGVBQWVBLElBQVMsV0FBVyxFQUN4QyxZQUFZLE1BQ1osS0FBSyxXQUFZO0FBQ2YsZUFBTzg3QixHQUF1QjtNQUNoQyxFQUNGLENBQUM7QUFDRCxVQUFJQSxLQUF5QkwsR0FBdUIsR0FBQSxDQUFrQztJQUFBLENBQUE7QUNadEYsUUFFSU0sSUFFQUMsSUFKSkMsS0FBQXJVLEdBQUEsTUFBQTtBQUFBbUssU0FBQUE7QUFFSWdLLFdBQWtCLDIrSEFFbEJDLEtBQTZCbkssR0FBUSxTQUFVcUssR0FBTTtBQUN2RCxlQUFPSCxHQUFnQixLQUFLRyxDQUFJLEtBQUtBLEVBQUssV0FBVyxDQUFDLE1BQU0sT0FFekRBLEVBQUssV0FBVyxDQUFDLE1BQU0sT0FFdkJBLEVBQUssV0FBVyxDQUFDLElBQUk7TUFDMUIsQ0FFQTtJQUFBLENBQUE7QUNaQSxRQUNBNUUsSUFPSTZFLElBRUFDLElBSUFDLElBTUFDLElBbUJBckQsSUFZQXNELElBbkRKQyxLQUFBNVUsR0FBQSxNQUFBO0FBQUFELFFBQUFBO0FBQ0EyUCxXQUF1QixFQUFBLEVBQUEsQ0FBQTtBQUN2QjJFLFNBQUFBO0FBQ0EzQixTQUFBQTtBQUNBekYsU0FBQUE7QUFDQWdDLFNBQUFBO0FBQ0FjLFNBQUFBO0FBRUl3RSxXQUEyQkgsSUFFM0JJLEtBQTJCLFNBQWtDLzZCLEdBQUs7QUFDcEUsZUFBT0EsTUFBUTtNQUNqQixHQUVJZzdCLEtBQThCLFNBQXFDeFIsR0FBSztBQUMxRSxlQUFPLE9BQU9BLEtBQVEsWUFHdEJBLEVBQUksV0FBVyxDQUFDLElBQUksS0FBS3NSLEtBQTJCQztNQUN0RCxHQUNJRSxLQUE0QixTQUFtQ3pSLEdBQUtFLEdBQVMwUixHQUFRO0FBQ3ZGLFlBQUlDO0FBRUosWUFBSTNSLEdBQVM7QUFDWCxjQUFJNFIsSUFBMkI1UixFQUFRO0FBQ3ZDMlIsY0FBb0I3UixFQUFJLHlCQUF5QjhSLElBQTJCLFNBQVVDLEdBQVU7QUFDOUYsbUJBQU8vUixFQUFJLHNCQUFzQitSLENBQVEsS0FBS0QsRUFBeUJDLENBQVE7VUFDakYsSUFBSUQ7UUFDTjtBQUVBLGVBQUksT0FBT0QsS0FBc0IsY0FBY0QsTUFDN0NDLElBQW9CN1IsRUFBSSx3QkFHbkI2UjtNQUNULEdBSUl6RCxLQUFZLFNBQW1CUSxHQUFNO0FBQ3ZDLFlBQUkvSCxJQUFRK0gsRUFBSyxPQUNiMUYsSUFBYTBGLEVBQUssWUFDbEIzRSxJQUFjMkUsRUFBSztBQUN2QixlQUFBOUUsR0FBZWpELEdBQU9xQyxHQUFZZSxDQUFXLEdBQzdDMkMsR0FBeUMsV0FBWTtBQUNuRCxpQkFBTzdDLEdBQWFsRCxHQUFPcUMsR0FBWWUsQ0FBVztRQUNwRCxDQUFDLEdBRU07TUFDVCxHQUVJeUgsS0FBZSxTQUFTQSxFQUFhMVIsR0FBS0UsR0FBUztBQU9yRCxZQUFJMFIsSUFBUzVSLEVBQUksbUJBQW1CQSxHQUNoQ2dTLElBQVVKLEtBQVU1UixFQUFJLGtCQUFrQkEsR0FDMUN1TSxHQUNBMEY7QUFFQS9SLGNBQVksV0FDZHFNLElBQWlCck0sRUFBUSxPQUN6QitSLElBQWtCL1IsRUFBUTtBQUc1QixZQUFJMlIsSUFBb0JKLEdBQTBCelIsR0FBS0UsR0FBUzBSLENBQU0sR0FDbEVNLElBQTJCTCxLQUFxQkwsR0FBNEJRLENBQU8sR0FDbkZHLElBQWMsQ0FBQ0QsRUFBeUIsSUFBSTtBQUNoRCxlQUFPLFdBQVk7QUFDakIsY0FBSS9TLElBQU8sV0FDUDZKLElBQVM0SSxLQUFVNVIsRUFBSSxxQkFBcUIsU0FBWUEsRUFBSSxpQkFBaUIsTUFBTSxDQUFDLElBQUksQ0FBQztBQU03RixjQUpJdU0sTUFBbUIsVUFDckJ2RCxFQUFPLEtBQUssV0FBV3VELElBQWlCLEdBQUcsR0FHekNwTixFQUFLLENBQUMsS0FBSyxRQUFRQSxFQUFLLENBQUMsRUFBRSxRQUFRO0FBQ3JDNkosY0FBTyxLQUFLLE1BQU1BLEdBQVE3SixDQUFJO2VBQ3pCO0FBS0w2SixjQUFPLEtBQUs3SixFQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFJdEIscUJBSElrTCxJQUFNbEwsRUFBSyxRQUNYdHBCLElBQUksR0FFREEsSUFBSXcwQixHQUFLeDBCO0FBS2RtekIsZ0JBQU8sS0FBSzdKLEVBQUt0cEIsQ0FBQyxHQUFHc3BCLEVBQUssQ0FBQyxFQUFFdHBCLENBQUMsQ0FBQztVQUVuQztBQUdBLGNBQUl1OEIsSUFBU3ZFLEdBQWlCLFNBQVU1SyxHQUFPNEQsR0FBT3VHLEdBQUs7QUFDekQsZ0JBQUlpRixLQUFXRixLQUFlbFAsRUFBTSxNQUFNK08sR0FDdENwSSxLQUFZLElBQ1owSSxLQUFzQixDQUFDLEdBQ3ZCNUgsSUFBY3pIO0FBRWxCLGdCQUFJQSxFQUFNLFNBQVMsTUFBTTtBQUN2QnlILGtCQUFjLENBQUM7QUFFZix1QkFBU2wwQixLQUFPeXNCO0FBQ2R5SCxrQkFBWWwwQixDQUFHLElBQUl5c0IsRUFBTXpzQixDQUFHO0FBRzlCazBCLGdCQUFZLFFBQWMsR0FBQSxXQUFXNEMsRUFBWTtZQUNuRDtBQUVJLG1CQUFPckssRUFBTSxhQUFjLFdBQzdCMkcsS0FBWUwsR0FBb0IxQyxFQUFNLFlBQVl5TCxJQUFxQnJQLEVBQU0sU0FBUyxJQUM3RUEsRUFBTSxhQUFhLFNBQzVCMkcsS0FBWTNHLEVBQU0sWUFBWTtBQUdoQyxnQkFBSWlHLElBQWE2QyxHQUFnQi9DLEVBQU8sT0FBT3NKLEVBQW1CLEdBQUd6TCxFQUFNLFlBQVk2RCxDQUFXO0FBQ2xHZCxZQUFBQSxNQUFhL0MsRUFBTSxNQUFNLE1BQU1xQyxFQUFXLE1BRXRDK0ksTUFBb0IsV0FDdEJySSxNQUFhLE1BQU1xSTtBQUdyQixnQkFBSU0sSUFBeUJKLEtBQWVOLE1BQXNCLFNBQVlMLEdBQTRCYSxFQUFRLElBQUlILEdBQ2xIeEQsSUFBVyxDQUFDO0FBRWhCLHFCQUFTckQsS0FBUXBJO0FBQ1hrUCxtQkFBZTlHLE1BQVMsUUFHNUJrSCxFQUF1QmxILENBQUksTUFDekJxRCxFQUFTckQsQ0FBSSxJQUFJcEksRUFBTW9JLENBQUk7QUFJL0IsbUJBQUFxRCxFQUFTLFlBQVk5RSxJQUNyQjhFLEVBQVMsTUFBTXRCLEdBQ1csR0FBQSxjQUFvQixHQUFBLFVBQVUsTUFBeUIsR0FBQSxjQUFjZ0IsSUFBVyxFQUN4RyxPQUFPdkgsR0FDUCxZQUFZcUMsR0FDWixhQUFhLE9BQU9tSixNQUFhLFNBQ25DLENBQUMsR0FBc0IsR0FBQSxjQUFjQSxJQUFVM0QsQ0FBUSxDQUFDO1VBQzFELENBQUM7QUFDRCxpQkFBQTBELEVBQU8sY0FBYzdGLE1BQW1CLFNBQVlBLElBQWlCLGFBQWEsT0FBT3lGLEtBQVksV0FBV0EsSUFBVUEsRUFBUSxlQUFlQSxFQUFRLFFBQVEsZUFBZSxLQUNoTEksRUFBTyxlQUFlcFMsRUFBSSxjQUMxQm9TLEVBQU8saUJBQWlCQSxHQUN4QkEsRUFBTyxpQkFBaUJKLEdBQ3hCSSxFQUFPLG1CQUFtQnBKLEdBQzFCb0osRUFBTyx3QkFBd0JQLEdBQy9CLE9BQU8sZUFBZU8sR0FBUSxZQUFZLEVBQ3hDLE9BQU8sV0FBaUI7QUFNdEIsbUJBQU8sTUFBTUg7VUFDZixFQUNGLENBQUMsR0FFREcsRUFBTyxnQkFBZ0IsU0FBVUksR0FBU0MsR0FBYTtBQUNyRCxtQkFBT2YsRUFBYWMsR0FBUzNWLEVBQVMsQ0FBQyxHQUFHcUQsR0FBU3VTLEdBQWEsRUFDOUQsbUJBQW1CaEIsR0FBMEJXLEdBQVFLLEdBQWEsSUFBSSxFQUN4RSxDQUFDLENBQUMsRUFBRSxNQUFNLFFBQVF6SixDQUFNO1VBQzFCLEdBRU9vSjtRQUNUO01BQ0Y7SUFBQSxDQUFBO0FDOUtBLFFBQUFNLEtBQUEsQ0FBQTtBQUFBdEwsT0FBQXNMLElBQUEsRUFBQSxTQUFBLE1BQUFDLEdBQUFBLENBQUFBO0FBQUEsUUFFQW5GLElBT0lvRixJQUdBRCxJQVpKRSxLQUFBOVYsR0FBQSxNQUFBO0FBQUE0VSxTQUFBQTtBQUNBN1UsUUFBQUE7QUFDQTBRLFdBQU8sRUFBQSxFQUFBLENBQUE7QUFDUDRELFNBQUFBO0FBRUFwSCxTQUFBQTtBQUNBZ0MsU0FBQUE7QUFDQWMsU0FBQUE7QUFFSThGLFdBQU8sQ0FBQyxLQUFLLFFBQVEsV0FBVyxRQUFRLFdBQVcsU0FBUyxTQUFTLEtBQUssUUFBUSxPQUFPLE9BQU8sT0FBTyxjQUFjLFFBQVEsTUFBTSxVQUFVLFVBQVUsV0FBVyxRQUFRLFFBQVEsT0FBTyxZQUFZLFFBQVEsWUFBWSxNQUFNLE9BQU8sV0FBVyxPQUFPLFVBQVUsT0FBTyxNQUFNLE1BQU0sTUFBTSxTQUFTLFlBQVksY0FBYyxVQUFVLFVBQVUsUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLFVBQVUsVUFBVSxNQUFNLFFBQVEsS0FBSyxVQUFVLE9BQU8sU0FBUyxPQUFPLE9BQU8sVUFBVSxTQUFTLFVBQVUsTUFBTSxRQUFRLFFBQVEsT0FBTyxRQUFRLFdBQVcsUUFBUSxZQUFZLFFBQVEsU0FBUyxPQUFPLFlBQVksVUFBVSxNQUFNLFlBQVksVUFBVSxVQUFVLEtBQUssU0FBUyxXQUFXLE9BQU8sWUFBWSxLQUFLLE1BQU0sTUFBTSxRQUFRLEtBQUssUUFBUSxVQUFVLFdBQVcsVUFBVSxTQUFTLFVBQVUsUUFBUSxVQUFVLFNBQVMsT0FBTyxXQUFXLE9BQU8sU0FBUyxTQUFTLE1BQU0sWUFBWSxTQUFTLE1BQU0sU0FBUyxRQUFRLFNBQVMsTUFBTSxTQUFTLEtBQUssTUFBTSxPQUFPLFNBQVMsT0FDNzdCLFVBQVUsWUFBWSxRQUFRLFdBQVcsaUJBQWlCLEtBQUssU0FBUyxRQUFRLGtCQUFrQixRQUFRLFFBQVEsV0FBVyxXQUFXLFlBQVksa0JBQWtCLFFBQVEsUUFBUSxPQUFPLFFBQVEsT0FBTyxHQUV4TUQsS0FBWWpCLEdBQWEsS0FBSztBQUNsQ2tCLFNBQUssUUFBUSxTQUFVRSxHQUFTO0FBRTlCSCxXQUFVRyxDQUFPLElBQUlILEdBQVVHLENBQU87TUFDeEMsQ0FBQztJQUFBLENBQUE7QUNoQkQsUUFBQUMsS0FBQTc5QixFQUFBLENBQUFDLElBQUFDLE9BQUE7QUFBQTtBQVNBLFVBQUk0OUIsS0FBdUI7QUFFM0I1OUIsU0FBTyxVQUFVNDlCO0lBQUFBLENBQUFBO0FDWGpCLFFBQUFDLEtBQUEvOUIsRUFBQSxDQUFBQyxJQUFBQyxPQUFBO0FBQUE7QUFTQSxVQUFJNDlCLEtBQXVCLEdBQUE7QUFFM0IsZUFBU0UsS0FBZ0I7TUFBQztBQUMxQixlQUFTQyxLQUF5QjtNQUFDO0FBQ25DQSxTQUF1QixvQkFBb0JEO0FBRTNDOTlCLFNBQU8sVUFBVSxXQUFXO0FBQzFCLGlCQUFTZytCLEVBQUtuUSxHQUFPOE8sR0FBVTdFLEdBQWVtRyxHQUFVQyxHQUFjQyxHQUFRO0FBQzVFLGNBQUlBLE1BQVdQLElBSWY7QUFBQSxnQkFBSXhXLElBQU0sSUFBSSxNQUNaLGlMQUdGO0FBQ0Esa0JBQUFBLEVBQUksT0FBTyx1QkFDTEE7VUFBQUE7UUFDUjtBQUNBNFcsVUFBSyxhQUFhQTtBQUNsQixpQkFBU0ksSUFBVTtBQUNqQixpQkFBT0o7UUFDVDtBQUdBLFlBQUlLLElBQWlCLEVBQ25CLE9BQU9MLEdBQ1AsUUFBUUEsR0FDUixNQUFNQSxHQUNOLE1BQU1BLEdBQ04sUUFBUUEsR0FDUixRQUFRQSxHQUNSLFFBQVFBLEdBQ1IsUUFBUUEsR0FFUixLQUFLQSxHQUNMLFNBQVNJLEdBQ1QsU0FBU0osR0FDVCxhQUFhQSxHQUNiLFlBQVlJLEdBQ1osTUFBTUosR0FDTixVQUFVSSxHQUNWLE9BQU9BLEdBQ1AsV0FBV0EsR0FDWCxPQUFPQSxHQUNQLE9BQU9BLEdBRVAsZ0JBQWdCTCxJQUNoQixtQkFBbUJELEdBQ3JCO0FBRUEsZUFBQU8sRUFBZSxZQUFZQSxHQUVwQkE7TUFDVDtJQUFBLENBQUE7QUNoRUEsUUFBQUMsS0FBQXgrQixFQUFBLENBQUFDLElBQUFDLE9BQUE7QUFpQkVBLFNBQU8sVUFBVSxHQUFBLEVBQXNDO0FBVG5ELFVBQUF1K0IsSUFJQUM7SUFBQUEsQ0FBQUE7QUNaTixRQUFBQyxLQUFBMytCLEVBQUFDLFFBQUE7QUFBQTtBQVFhLFNBQUE7QUFBeUIsVUFBSW9ELEtBQUUsRUFBQSxHQUFpQkQsS0FBRTtBQUFNbkQsU0FBUSxXQUFTO0FBQXNCLGFBQU8sVUFBcEIsY0FBNEIsT0FBTyxRQUFTa0QsS0FBRSxPQUFPLEtBQUlDLEtBQUVELEdBQUUsZUFBZSxHQUFFbEQsR0FBUSxXQUFTa0QsR0FBRSxnQkFBZ0I7QUFBckUsVUFBQUEsSUFBMkVHLEtBQUVELEdBQUUsbURBQW1ELG1CQUFrQnhDLEtBQUUsT0FBTyxVQUFVLGdCQUFlWSxLQUFFLEVBQUMsS0FBSSxNQUFHLEtBQUksTUFBRyxRQUFPLE1BQUcsVUFBUyxLQUFFO0FBQ3ZXLGVBQVNDLEdBQUVXLEdBQUVILEdBQUVnQixHQUFFO0FBQUMsWUFBSWQsR0FBRWEsSUFBRSxDQUFDLEdBQUVELElBQUUsTUFBS3hCLElBQUU7QUFBYzBCLGNBQVQsV0FBYUYsSUFBRSxLQUFHRSxJQUFZaEIsRUFBRSxRQUFYLFdBQWlCYyxJQUFFLEtBQUdkLEVBQUUsTUFBY0EsRUFBRSxRQUFYLFdBQWlCVixJQUFFVSxFQUFFO0FBQUssYUFBSUUsS0FBS0Y7QUFBRXJCLGFBQUUsS0FBS3FCLEdBQUVFLENBQUMsS0FBRyxDQUFDWCxHQUFFLGVBQWVXLENBQUMsTUFBSWEsRUFBRWIsQ0FBQyxJQUFFRixFQUFFRSxDQUFDO0FBQUcsWUFBR0MsS0FBR0EsRUFBRTtBQUFhLGVBQUlELEtBQUtGLElBQUVHLEVBQUUsY0FBYUg7QUFBV2UsY0FBRWIsQ0FBQyxNQUFaLFdBQWdCYSxFQUFFYixDQUFDLElBQUVGLEVBQUVFLENBQUM7QUFBRyxlQUFNLEVBQUMsVUFBU2dCLElBQUUsTUFBS2YsR0FBRSxLQUFJVyxHQUFFLEtBQUl4QixHQUFFLE9BQU15QixHQUFFLFFBQU9LLEdBQUUsUUFBTztNQUFDO0FBQUNyRCxTQUFRLE1BQUl5QjtBQUFFekIsU0FBUSxPQUFLeUI7SUFBQUEsQ0FBQUE7QUNUdlYsUUFBQWs5QixJQUFBNStCLEVBQUEsQ0FBQUMsSUFBQUMsT0FBQTtBQUFBO0FBR0VBLFNBQU8sVUFBVSxHQUFBO0lBQUEsQ0FBQTtBQ0huQixRQUFBMitCLEtBQUE3K0IsRUFBQUMsUUFBQTtBQUFBO0FBQUE7QUFHQSxVQUFJeTdCLEtBQXlCLEdBQUE7QUFDN0IsYUFBTyxlQUFlejdCLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNEQSxTQUFRLFVBQVU2K0I7QUFDbEIsVUFBSXZILEtBQVF3SCxHQUF3QixFQUFBLENBQWdCLEdBQ2hEQyxLQUFhdEQsR0FBdUIsR0FBQSxDQUFxQixHQUN6RHVELE1BQVUsR0FBQSxHQUFBLEdBQUEsRUFBQSxJQUNWQyxLQUFTeEQsSUFBdUIsR0FBQSxHQUFBLEdBQUEsRUFBQSxFQUF5QixHQUN6RHlELEtBQWMsRUFBQTtBQUNsQixlQUFTQyxHQUF5QixHQUFHO0FBQUUsWUFBa0IsT0FBTyxXQUFyQjtBQUE4QixpQkFBTztBQUFNLFlBQUl6OUIsSUFBSSxvQkFBSSxXQUFXQyxJQUFJLG9CQUFJO0FBQVcsZ0JBQVF3OUIsS0FBMkIsU0FBVXA4QixHQUFHO0FBQUUsaUJBQU9BLElBQUlwQixJQUFJRDtRQUFHLEdBQUcsQ0FBQztNQUFHO0FBQzNNLGVBQVNvOUIsR0FBd0IsR0FBR3A5QixHQUFHO0FBQUUsWUFBSSxDQUFDQSxLQUFLLEtBQUssRUFBRTtBQUFZLGlCQUFPO0FBQUcsWUFBYSxNQUFULFFBQTBCLE9BQU8sS0FBbkIsWUFBc0MsT0FBTyxLQUFyQjtBQUF3QixpQkFBTyxFQUFFLFNBQVMsRUFBRTtBQUFHLFlBQUlDLElBQUl3OUIsR0FBeUJ6OUIsQ0FBQztBQUFHLFlBQUlDLEtBQUtBLEVBQUUsSUFBSSxDQUFDO0FBQUcsaUJBQU9BLEVBQUUsSUFBSSxDQUFDO0FBQUcsWUFBSSxJQUFJLEVBQUUsV0FBVyxLQUFLLEdBQUdNLElBQUksT0FBTyxrQkFBa0IsT0FBTztBQUEwQixpQkFBU0wsS0FBSztBQUFHLGNBQWtCQSxNQUFkLGFBQW1CLE9BQU8sVUFBVSxlQUFlLEtBQUssR0FBR0EsQ0FBQyxHQUFHO0FBQUUsZ0JBQUlsQixJQUFJdUIsSUFBSSxPQUFPLHlCQUF5QixHQUFHTCxDQUFDLElBQUk7QUFBTWxCLGtCQUFNQSxFQUFFLE9BQU9BLEVBQUUsT0FBTyxPQUFPLGVBQWUsR0FBR2tCLEdBQUdsQixDQUFDLElBQUksRUFBRWtCLENBQUMsSUFBSSxFQUFFQSxDQUFDO1VBQUc7QUFBRSxlQUFPLEVBQUUsVUFBVSxHQUFHRCxLQUFLQSxFQUFFLElBQUksR0FBRyxDQUFDLEdBQUc7TUFBRztBQUdobEIsVUFBSSt2QjtBQUNBLGFBQU8sWUFBYSxhQUN0QkEsTUFBQUEsR0FBWXVOLEdBQU8sU0FBUyxFQUMxQixLQUFLLE9BQ0wsU0FBUyxLQUNYLENBQUM7QUFFSCxlQUFTSixHQUFxQi9RLEdBQU87QUFDbkMsWUFBTSxFQUNKLGFBQUFzUixHQUNBLFVBQUFyUixFQUNGLElBQUlEO0FBQ0osZUFBT3NSLEtBQWUxTixNQUFBQSxHQUF5QndOLEdBQVksS0FBS0YsR0FBUSxlQUFlLEVBQ3JGLE9BQU90TixJQUNQLFVBQVUzRCxFQUNaLENBQUMsSUFBSUE7TUFDUDtJQUFBLENBQUE7QUNqQ0EsUUFBQTZRLEtBQUE3K0IsRUFBQUMsUUFBQTtBQUFBO0FBQUE7QUFHQSxVQUFJeTdCLEtBQXlCLEdBQUE7QUFDN0IsYUFBTyxlQUFlejdCLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNELGFBQU8sZUFBZUEsSUFBUyxXQUFXLEVBQ3hDLFlBQVksTUFDWixLQUFLLFdBQVk7QUFDZixlQUFPcS9CLEdBQXNCO01BQy9CLEVBQ0YsQ0FBQztBQUNELFVBQUlBLEtBQXdCNUQsR0FBdUIsR0FBQSxDQUFpQztJQUFBLENBQUE7QUNicEYsUUFBQTZELEtBQUF2L0IsRUFBQUMsUUFBQTtBQUFBO0FBQUE7QUFHQSxVQUFJeTdCLEtBQXlCLEdBQUE7QUFDN0IsYUFBTyxlQUFlejdCLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNEQSxTQUFRLFVBQVV1L0I7QUFDbEIsVUFBSWpJLEtBQVF3SCxHQUF3QixFQUFBLENBQWdCLEdBQ2hEQyxLQUFhdEQsR0FBdUIsR0FBQSxDQUFxQixHQUN6RHVELE1BQVUsR0FBQSxHQUFBLEdBQUEsRUFBQSxJQUNWRSxLQUFjLEVBQUE7QUFDbEIsZUFBU0MsR0FBeUIsR0FBRztBQUFFLFlBQWtCLE9BQU8sV0FBckI7QUFBOEIsaUJBQU87QUFBTSxZQUFJejlCLElBQUksb0JBQUksV0FBV0MsSUFBSSxvQkFBSTtBQUFXLGdCQUFRdzlCLEtBQTJCLFNBQVVwOEIsR0FBRztBQUFFLGlCQUFPQSxJQUFJcEIsSUFBSUQ7UUFBRyxHQUFHLENBQUM7TUFBRztBQUMzTSxlQUFTbzlCLEdBQXdCLEdBQUdwOUIsR0FBRztBQUFFLFlBQUksQ0FBQ0EsS0FBSyxLQUFLLEVBQUU7QUFBWSxpQkFBTztBQUFHLFlBQWEsTUFBVCxRQUEwQixPQUFPLEtBQW5CLFlBQXNDLE9BQU8sS0FBckI7QUFBd0IsaUJBQU8sRUFBRSxTQUFTLEVBQUU7QUFBRyxZQUFJQyxJQUFJdzlCLEdBQXlCejlCLENBQUM7QUFBRyxZQUFJQyxLQUFLQSxFQUFFLElBQUksQ0FBQztBQUFHLGlCQUFPQSxFQUFFLElBQUksQ0FBQztBQUFHLFlBQUksSUFBSSxFQUFFLFdBQVcsS0FBSyxHQUFHTSxJQUFJLE9BQU8sa0JBQWtCLE9BQU87QUFBMEIsaUJBQVNMLEtBQUs7QUFBRyxjQUFrQkEsTUFBZCxhQUFtQixPQUFPLFVBQVUsZUFBZSxLQUFLLEdBQUdBLENBQUMsR0FBRztBQUFFLGdCQUFJbEIsSUFBSXVCLElBQUksT0FBTyx5QkFBeUIsR0FBR0wsQ0FBQyxJQUFJO0FBQU1sQixrQkFBTUEsRUFBRSxPQUFPQSxFQUFFLE9BQU8sT0FBTyxlQUFlLEdBQUdrQixHQUFHbEIsQ0FBQyxJQUFJLEVBQUVrQixDQUFDLElBQUksRUFBRUEsQ0FBQztVQUFHO0FBQUUsZUFBTyxFQUFFLFVBQVUsR0FBR0QsS0FBS0EsRUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFHO01BQUc7QUFDaGxCLGVBQVM2OUIsR0FBUXhKLEdBQUs7QUFDcEIsZUFBNEJBLEtBQVEsUUFBUSxPQUFPLEtBQUtBLENBQUcsRUFBRSxXQUFXO01BQzFFO0FBQ0EsZUFBU3VKLEdBQWF6UixHQUFPO0FBQzNCLFlBQU0sRUFDSixRQUFBK0YsR0FDQSxjQUFBNEwsSUFBZSxDQUFDLEVBQ2xCLElBQUkzUixHQUNFNFIsSUFBZSxPQUFPN0wsS0FBVyxhQUFhOEwsT0FBYzlMLEVBQU8yTCxHQUFRRyxDQUFVLElBQUlGLElBQWVFLENBQVUsSUFBSTlMO0FBQzVILGdCQUFBLEdBQXdCcUwsR0FBWSxLQUFLRixHQUFRLFFBQVEsRUFDdkQsUUFBUVUsRUFDVixDQUFDO01BQ0g7SUFBQSxDQUFBO0FDMUJBLFFBQUFKLEtBQUF2L0IsRUFBQUMsUUFBQTtBQUFBO0FBQUE7QUFHQSxVQUFJeTdCLEtBQXlCLEdBQUE7QUFDN0IsYUFBTyxlQUFlejdCLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNELGFBQU8sZUFBZUEsSUFBUyxXQUFXLEVBQ3hDLFlBQVksTUFDWixLQUFLLFdBQVk7QUFDZixlQUFPNC9CLEdBQWM7TUFDdkIsRUFDRixDQUFDO0FBQ0QsVUFBSUEsS0FBZ0JuRSxHQUF1QixHQUFBLENBQXlCO0lBQUEsQ0FBQTtBQ2JwRSxRQUFBb0UsS0FBQTkvQixFQUFBQyxRQUFBO0FBQUE7QUFBQTtBQVdBLFVBQUl5N0IsS0FBeUIsR0FBQTtBQUM3QixhQUFPLGVBQWV6N0IsSUFBUyxjQUFjLEVBQzNDLE9BQU8sS0FDVCxDQUFDO0FBQ0QsYUFBTyxlQUFlQSxJQUFTLGdCQUFnQixFQUM3QyxZQUFZLE1BQ1osS0FBSyxXQUFZO0FBQ2YsZUFBTzQvQixHQUFjO01BQ3ZCLEVBQ0YsQ0FBQztBQUNELGFBQU8sZUFBZTUvQixJQUFTLHdCQUF3QixFQUNyRCxZQUFZLE1BQ1osS0FBSyxXQUFZO0FBQ2YsZUFBT3EvQixHQUFzQjtNQUMvQixFQUNGLENBQUM7QUFDRCxhQUFPLGVBQWVyL0IsSUFBUyxnQkFBZ0IsRUFDN0MsWUFBWSxNQUNaLEtBQUssV0FBWTtBQUNmLGVBQU84L0IsR0FBTztNQUNoQixFQUNGLENBQUM7QUFDRCxhQUFPLGVBQWU5L0IsSUFBUyxPQUFPLEVBQ3BDLFlBQVksTUFDWixLQUFLLFdBQVk7QUFDZixlQUFPOC9CLEdBQU87TUFDaEIsRUFDRixDQUFDO0FBQ0Q5L0IsU0FBUSxVQUFVKy9CO0FBQ2xCLy9CLFNBQVEseUJBQXlCO0FBQ2pDLGFBQU8sZUFBZUEsSUFBUyxhQUFhLEVBQzFDLFlBQVksTUFDWixLQUFLLFdBQVk7QUFDZixlQUFPOC9CLEdBQU87TUFDaEIsRUFDRixDQUFDO0FBQ0QsVUFBSUUsS0FBVXZFLElBQXVCLEdBQUEsR0FBQSxHQUFBLEVBQUEsRUFBMEIsR0FDM0RxRSxNQUFTLEdBQUEsR0FBQSxHQUFBLEVBQUEsSUFDVFQsS0FBd0I1RCxHQUF1QixHQUFBLENBQWlDLEdBQ2hGbUUsS0FBZ0JuRSxHQUF1QixHQUFBLENBQXlCO0FBQ3BFLGVBQVNzRSxHQUFPbFYsR0FBS0UsR0FBUztBQWE1QixnQkFBQSxHQVowQmlWLEdBQVEsU0FBU25WLEdBQUtFLENBQU87TUFhekQ7QUFHQSxVQUFNa1YsS0FBeUIsQ0FBQ3BWLEdBQUtxVixNQUFjO0FBRzdDLGNBQU0sUUFBUXJWLEVBQUksZ0JBQWdCLE1BQ3BDQSxFQUFJLG1CQUFtQnFWLEVBQVVyVixFQUFJLGdCQUFnQjtNQUV6RDtBQUNBN3FCLFNBQVEseUJBQXlCaWdDO0lBQUFBLENBQUFBO0FDM0VqQyxRQUFBRSxLQUFBcGdDLEVBQUEsQ0FBQUMsSUFBQUMsT0FBQTtBQUFBLGVBQVN5bkIsS0FBVztBQUNsQixlQUFBem5CLEdBQU8sVUFBVXluQixLQUFXLE9BQU8sU0FBUyxPQUFPLE9BQU8sS0FBSyxJQUFJLFNBQVUzbUIsR0FBUTtBQUNuRixtQkFBU0wsSUFBSSxHQUFHQSxJQUFJLFVBQVUsUUFBUUEsS0FBSztBQUN6QyxnQkFBSU0sSUFBUyxVQUFVTixDQUFDO0FBQ3hCLHFCQUFTVyxLQUFPTDtBQUNWLHFCQUFPLFVBQVUsZUFBZSxLQUFLQSxHQUFRSyxDQUFHLE1BQ2xETixFQUFPTSxDQUFHLElBQUlMLEVBQU9LLENBQUc7VUFHOUI7QUFDQSxpQkFBT047UUFDVCxHQUFHZCxHQUFPLFFBQVEsYUFBYSxNQUFNQSxHQUFPLFFBQVEsVUFBYUEsR0FBTyxTQUNqRXluQixHQUFTLE1BQU0sTUFBTSxTQUFTO01BQ3ZDO0FBQ0F6bkIsU0FBTyxVQUFVeW5CLElBQVV6bkIsR0FBTyxRQUFRLGFBQWEsTUFBTUEsR0FBTyxRQUFRLFVBQWFBLEdBQU87SUFBQSxDQUFBO0FDZGhHLFFBQUFtZ0MsTUFBQXJnQyxFQUFBQyxRQUFBO0FBQUE7QUFFQSxVQUFJeTdCLEtBQXlCLEdBQUE7QUFDN0IsYUFBTyxlQUFlejdCLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNEQSxTQUFRLFVBQVVxZ0M7QUFDbEJyZ0MsU0FBUSxnQkFBZ0JzZ0M7QUFDeEIsVUFBSUMsS0FBWTlFLEdBQXVCLEdBQUEsQ0FBeUM7QUFFaEYsZUFBUzZFLEdBQWN6VyxHQUFNO0FBQzNCLFlBQUksT0FBT0EsS0FBUyxZQUFZQSxNQUFTO0FBQ3ZDLGlCQUFPO0FBRVQsWUFBTTJXLElBQVksT0FBTyxlQUFlM1csQ0FBSTtBQUM1QyxnQkFBUTJXLE1BQWMsUUFBUUEsTUFBYyxPQUFPLGFBQWEsT0FBTyxlQUFlQSxDQUFTLE1BQU0sU0FBUyxFQUFFLE9BQU8sZUFBZTNXLE1BQVMsRUFBRSxPQUFPLFlBQVlBO01BQ3RLO0FBQ0EsZUFBUzRXLEdBQVV6L0IsR0FBUTtBQUN6QixZQUFJLENBQUNzL0IsR0FBY3QvQixDQUFNO0FBQ3ZCLGlCQUFPQTtBQUVULFlBQU04dkIsSUFBUyxDQUFDO0FBQ2hCLGVBQUEsT0FBTyxLQUFLOXZCLENBQU0sRUFBRSxRQUFRSyxPQUFPO0FBQ2pDeXZCLFlBQU96dkIsQ0FBRyxJQUFJby9CLEdBQVV6L0IsRUFBT0ssQ0FBRyxDQUFDO1FBQ3JDLENBQUMsR0FDTXl2QjtNQUNUO0FBQ0EsZUFBU3VQLEdBQVV0L0IsR0FBUUMsR0FBUStwQixJQUFVLEVBQzNDLE9BQU8sS0FDVCxHQUFHO0FBQ0QsWUFBTStGLElBQVMvRixFQUFRLFNBQUEsR0FBWXdWLEdBQVUsU0FBUyxDQUFDLEdBQUd4L0IsQ0FBTSxJQUFJQTtBQUNwRSxlQUFJdS9CLEdBQWN2L0IsQ0FBTSxLQUFLdS9CLEdBQWN0L0IsQ0FBTSxLQUMvQyxPQUFPLEtBQUtBLENBQU0sRUFBRSxRQUFRSyxPQUFPO0FBRTdCQSxnQkFBUSxnQkFHUmkvQixHQUFjdC9CLEVBQU9LLENBQUcsQ0FBQyxLQUFLQSxLQUFPTixLQUFVdS9CLEdBQWN2L0IsRUFBT00sQ0FBRyxDQUFDLElBRTFFeXZCLEVBQU96dkIsQ0FBRyxJQUFJZy9CLEdBQVV0L0IsRUFBT00sQ0FBRyxHQUFHTCxFQUFPSyxDQUFHLEdBQUcwcEIsQ0FBTyxJQUNoREEsRUFBUSxRQUNqQitGLEVBQU96dkIsQ0FBRyxJQUFJaS9CLEdBQWN0L0IsRUFBT0ssQ0FBRyxDQUFDLElBQUlvL0IsR0FBVXovQixFQUFPSyxDQUFHLENBQUMsSUFBSUwsRUFBT0ssQ0FBRyxJQUU5RXl2QixFQUFPenZCLENBQUcsSUFBSUwsRUFBT0ssQ0FBRztRQUU1QixDQUFDLEdBRUl5dkI7TUFDVDtJQUFBLENBQUE7QUNoREEsUUFBQXNQLEtBQUFyZ0MsRUFBQUMsUUFBQTtBQUFBO0FBRUEsYUFBTyxlQUFlQSxJQUFTLGNBQWMsRUFDM0MsT0FBTyxLQUNULENBQUM7QUFDRCxVQUFJMGdDLEtBQWUsQ0FBQztBQUNwQixhQUFPLGVBQWUxZ0MsSUFBUyxXQUFXLEVBQ3hDLFlBQVksTUFDWixLQUFLLFdBQVk7QUFDZixlQUFPMmdDLEdBQVc7TUFDcEIsRUFDRixDQUFDO0FBQ0QsVUFBSUEsS0FBYTdCLEdBQXdCOEIsSUFBQSxDQUFzQjtBQUMvRCxhQUFPLEtBQUtELEVBQVUsRUFBRSxRQUFRLFNBQVV0L0IsR0FBSztBQUN6Q0EsY0FBUSxhQUFhQSxNQUFRLGdCQUM3QixPQUFPLFVBQVUsZUFBZSxLQUFLcS9CLElBQWNyL0IsQ0FBRyxLQUN0REEsS0FBT3JCLE1BQVdBLEdBQVFxQixDQUFHLE1BQU1zL0IsR0FBV3QvQixDQUFHLEtBQ3JELE9BQU8sZUFBZXJCLElBQVNxQixHQUFLLEVBQ2xDLFlBQVksTUFDWixLQUFLLFdBQVk7QUFDZixpQkFBT3MvQixHQUFXdC9CLENBQUc7UUFDdkIsRUFDRixDQUFDO01BQ0gsQ0FBQztBQUNELGVBQVM4OUIsR0FBeUIsR0FBRztBQUFFLFlBQWtCLE9BQU8sV0FBckI7QUFBOEIsaUJBQU87QUFBTSxZQUFJejlCLElBQUksb0JBQUksV0FBV0MsSUFBSSxvQkFBSTtBQUFXLGdCQUFRdzlCLEtBQTJCLFNBQVVwOEIsR0FBRztBQUFFLGlCQUFPQSxJQUFJcEIsSUFBSUQ7UUFBRyxHQUFHLENBQUM7TUFBRztBQUMzTSxlQUFTbzlCLEdBQXdCLEdBQUdwOUIsR0FBRztBQUFFLFlBQUksQ0FBQ0EsS0FBSyxLQUFLLEVBQUU7QUFBWSxpQkFBTztBQUFHLFlBQWEsTUFBVCxRQUEwQixPQUFPLEtBQW5CLFlBQXNDLE9BQU8sS0FBckI7QUFBd0IsaUJBQU8sRUFBRSxTQUFTLEVBQUU7QUFBRyxZQUFJQyxJQUFJdzlCLEdBQXlCejlCLENBQUM7QUFBRyxZQUFJQyxLQUFLQSxFQUFFLElBQUksQ0FBQztBQUFHLGlCQUFPQSxFQUFFLElBQUksQ0FBQztBQUFHLFlBQUksSUFBSSxFQUFFLFdBQVcsS0FBSyxHQUFHTSxJQUFJLE9BQU8sa0JBQWtCLE9BQU87QUFBMEIsaUJBQVNMLEtBQUs7QUFBRyxjQUFrQkEsTUFBZCxhQUFtQixPQUFPLFVBQVUsZUFBZSxLQUFLLEdBQUdBLENBQUMsR0FBRztBQUFFLGdCQUFJbEIsSUFBSXVCLElBQUksT0FBTyx5QkFBeUIsR0FBR0wsQ0FBQyxJQUFJO0FBQU1sQixrQkFBTUEsRUFBRSxPQUFPQSxFQUFFLE9BQU8sT0FBTyxlQUFlLEdBQUdrQixHQUFHbEIsQ0FBQyxJQUFJLEVBQUVrQixDQUFDLElBQUksRUFBRUEsQ0FBQztVQUFHO0FBQUUsZUFBTyxFQUFFLFVBQVUsR0FBR0QsS0FBS0EsRUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFHO01BQUc7SUFBQSxDQUFBO0FDekJobEIsUUFBQWsvQixLQUFBOWdDLEVBQUFDLFFBQUE7QUFBQTtBQUVBLFVBQUl5N0IsS0FBeUIsR0FBQTtBQUM3QixhQUFPLGVBQWV6N0IsSUFBUyxjQUFjLEVBQzNDLE9BQU8sS0FDVCxDQUFDO0FBQ0RBLFNBQVEsVUFBVThnQztBQUNsQixVQUFJQyxLQUEwQnRGLEdBQXVCLEdBQUEsQ0FBMkM7QUFLaEcsZUFBU3FGLEdBQVc3SyxHQUFRO0FBQzFCLFlBQUksT0FBT0EsS0FBVztBQUNwQixnQkFBTSxJQUFJLE9BQUEsR0FBNkc4SyxHQUF3QixTQUFTLENBQUMsQ0FBQztBQUU1SixlQUFPOUssRUFBTyxPQUFPLENBQUMsRUFBRSxZQUFZLElBQUlBLEVBQU8sTUFBTSxDQUFDO01BQ3hEO0lBQUEsQ0FBQTtBQ2pCQSxRQUFBNEssS0FBQTlnQyxFQUFBQyxRQUFBO0FBQUE7QUFFQSxVQUFJeTdCLEtBQXlCLEdBQUE7QUFDN0IsYUFBTyxlQUFlejdCLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNELGFBQU8sZUFBZUEsSUFBUyxXQUFXLEVBQ3hDLFlBQVksTUFDWixLQUFLLFdBQVk7QUFDZixlQUFPZ2hDLEdBQVk7TUFDckIsRUFDRixDQUFDO0FBQ0QsVUFBSUEsS0FBY3ZGLEdBQXVCLEdBQUEsQ0FBdUI7SUFBQSxDQUFBO0FDWmhFLFFBQUF3RixLQUFBbGhDLEVBQUFDLFFBQUE7QUFBQTtBQUVBLGFBQU8sZUFBZUEsSUFBUyxjQUFjLEVBQzNDLE9BQU8sS0FDVCxDQUFDO0FBQ0RBLFNBQVEsVUFBVWtoQztBQUNsQmxoQyxTQUFRLGtCQUFrQm1oQztBQUMxQixVQUFJQyxLQUFXLEdBQUEsR0FHVEMsS0FBbUI7QUFDekIsZUFBU0YsR0FBZ0JyUCxHQUFJO0FBQzNCLFlBQU12RixJQUFRLEdBQUd1RixDQUFFLEdBQUcsTUFBTXVQLEVBQWdCO0FBRTVDLGVBRGE5VSxLQUFTQSxFQUFNLENBQUMsS0FDZDtNQUNqQjtBQUNBLGVBQVMrVSxHQUF5QnhKLEdBQVd5SixJQUFXLElBQUk7QUFDMUQsZUFBT3pKLEVBQVUsZUFBZUEsRUFBVSxRQUFRcUosR0FBZ0JySixDQUFTLEtBQUt5SjtNQUNsRjtBQUNBLGVBQVNDLEdBQWVDLEdBQVdDLEdBQVdDLEdBQWE7QUFDekQsWUFBTUMsSUFBZU4sR0FBeUJJLENBQVM7QUFDdkQsZUFBT0QsRUFBVSxnQkFBZ0JHLE1BQWlCLEtBQUssR0FBR0QsQ0FBVyxJQUFJQyxDQUFZLE1BQU1EO01BQzdGO0FBT0EsZUFBU1QsR0FBZXBKLEdBQVc7QUFDakMsWUFBSUEsS0FBYSxNQUdqQjtBQUFBLGNBQUksT0FBT0EsS0FBYztBQUN2QixtQkFBT0E7QUFFVCxjQUFJLE9BQU9BLEtBQWM7QUFDdkIsbUJBQU93SixHQUF5QnhKLEdBQVcsV0FBVztBQUl4RCxjQUFJLE9BQU9BLEtBQWM7QUFDdkIsb0JBQVFBLEVBQVUsVUFBVTtjQUMxQixLQUFLc0osR0FBUztBQUNaLHVCQUFPSSxHQUFlMUosR0FBV0EsRUFBVSxRQUFRLFlBQVk7Y0FDakUsS0FBS3NKLEdBQVM7QUFDWix1QkFBT0ksR0FBZTFKLEdBQVdBLEVBQVUsTUFBTSxNQUFNO2NBQ3pEO0FBQ0U7WUFDSjtRQUFBO01BR0o7SUFBQSxDQUFBO0FDcERBLFFBQUFtSixLQUFBbGhDLEVBQUFDLFFBQUE7QUFBQTtBQUVBLGFBQU8sZUFBZUEsSUFBUyxjQUFjLEVBQzNDLE9BQU8sS0FDVCxDQUFDO0FBQ0QsVUFBSTBnQyxLQUFlLENBQUM7QUFDcEIsYUFBTyxlQUFlMWdDLElBQVMsV0FBVyxFQUN4QyxZQUFZLE1BQ1osS0FBSyxXQUFZO0FBQ2YsZUFBTzZoQyxHQUFnQjtNQUN6QixFQUNGLENBQUM7QUFDRCxVQUFJQSxLQUFrQi9DLEdBQXdCLEdBQUEsQ0FBMkI7QUFDekUsYUFBTyxLQUFLK0MsRUFBZSxFQUFFLFFBQVEsU0FBVXhnQyxHQUFLO0FBQzlDQSxjQUFRLGFBQWFBLE1BQVEsZ0JBQzdCLE9BQU8sVUFBVSxlQUFlLEtBQUtxL0IsSUFBY3IvQixDQUFHLEtBQ3REQSxLQUFPckIsTUFBV0EsR0FBUXFCLENBQUcsTUFBTXdnQyxHQUFnQnhnQyxDQUFHLEtBQzFELE9BQU8sZUFBZXJCLElBQVNxQixHQUFLLEVBQ2xDLFlBQVksTUFDWixLQUFLLFdBQVk7QUFDZixpQkFBT3dnQyxHQUFnQnhnQyxDQUFHO1FBQzVCLEVBQ0YsQ0FBQztNQUNILENBQUM7QUFDRCxlQUFTODlCLEdBQXlCLEdBQUc7QUFBRSxZQUFrQixPQUFPLFdBQXJCO0FBQThCLGlCQUFPO0FBQU0sWUFBSXo5QixJQUFJLG9CQUFJLFdBQVdDLElBQUksb0JBQUk7QUFBVyxnQkFBUXc5QixLQUEyQixTQUFVcDhCLEdBQUc7QUFBRSxpQkFBT0EsSUFBSXBCLElBQUlEO1FBQUcsR0FBRyxDQUFDO01BQUc7QUFDM00sZUFBU285QixHQUF3QixHQUFHcDlCLEdBQUc7QUFBRSxZQUFJLENBQUNBLEtBQUssS0FBSyxFQUFFO0FBQVksaUJBQU87QUFBRyxZQUFhLE1BQVQsUUFBMEIsT0FBTyxLQUFuQixZQUFzQyxPQUFPLEtBQXJCO0FBQXdCLGlCQUFPLEVBQUUsU0FBUyxFQUFFO0FBQUcsWUFBSUMsSUFBSXc5QixHQUF5Qno5QixDQUFDO0FBQUcsWUFBSUMsS0FBS0EsRUFBRSxJQUFJLENBQUM7QUFBRyxpQkFBT0EsRUFBRSxJQUFJLENBQUM7QUFBRyxZQUFJLElBQUksRUFBRSxXQUFXLEtBQUssR0FBR00sSUFBSSxPQUFPLGtCQUFrQixPQUFPO0FBQTBCLGlCQUFTTCxLQUFLO0FBQUcsY0FBa0JBLE1BQWQsYUFBbUIsT0FBTyxVQUFVLGVBQWUsS0FBSyxHQUFHQSxDQUFDLEdBQUc7QUFBRSxnQkFBSWxCLElBQUl1QixJQUFJLE9BQU8seUJBQXlCLEdBQUdMLENBQUMsSUFBSTtBQUFNbEIsa0JBQU1BLEVBQUUsT0FBT0EsRUFBRSxPQUFPLE9BQU8sZUFBZSxHQUFHa0IsR0FBR2xCLENBQUMsSUFBSSxFQUFFa0IsQ0FBQyxJQUFJLEVBQUVBLENBQUM7VUFBRztBQUFFLGVBQU8sRUFBRSxVQUFVLEdBQUdELEtBQUtBLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRztNQUFHO0lBQUEsQ0FBQTtBQ3pCaGxCLFFBQUFtZ0MsS0FBQS9oQyxFQUFBQyxRQUFBO0FBQUE7QUFFQSxhQUFPLGVBQWVBLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNEQSxTQUFRLFVBQVU7QUFDbEIsZUFBUytoQyxHQUFNemhDLEdBQUswaEMsSUFBTSxPQUFPLGtCQUFrQkMsSUFBTSxPQUFPLGtCQUFrQjtBQUNoRixlQUFPLEtBQUssSUFBSUQsR0FBSyxLQUFLLElBQUkxaEMsR0FBSzJoQyxDQUFHLENBQUM7TUFDekM7QUFDQSxVQUFJQyxLQUFXbGlDLEdBQVEsVUFBVStoQztJQUFBQSxDQUFBQTtBQ1RqQyxRQUFBRCxLQUFBL2hDLEVBQUFDLFFBQUE7QUFBQTtBQUVBLFVBQUl5N0IsS0FBeUIsR0FBQTtBQUM3QixhQUFPLGVBQWV6N0IsSUFBUyxjQUFjLEVBQzNDLE9BQU8sS0FDVCxDQUFDO0FBQ0QsYUFBTyxlQUFlQSxJQUFTLFdBQVcsRUFDeEMsWUFBWSxNQUNaLEtBQUssV0FBWTtBQUNmLGVBQU9taUMsR0FBTztNQUNoQixFQUNGLENBQUM7QUFDRCxVQUFJQSxLQUFTMUcsR0FBdUIsR0FBQSxDQUFrQjtJQUFBLENBQUE7QUNadEQsUUFBQTJHLEtBQUFyaUMsRUFBQUMsUUFBQTtBQUFBO0FBRUEsVUFBSXk3QixLQUF5QixHQUFBO0FBQzdCLGFBQU8sZUFBZXo3QixJQUFTLGNBQWMsRUFDM0MsT0FBTyxLQUNULENBQUM7QUFDREEsU0FBUSxVQUFVO0FBQ2xCLFVBQUkyZ0MsS0FBYWxGLEdBQXVCLEdBQUEsQ0FBK0I7QUFDdkUsZUFBU3JCLEdBQU1pSSxHQUFLeFksR0FBTTtBQUN4QixlQUFLQSxLQUFBQSxHQUdNOFcsR0FBVyxTQUFTMEIsR0FBS3hZLEdBQU0sRUFDeEMsT0FBTyxNQUNULENBQUMsSUFKUXdZO01BS1g7QUFDQSxVQUFJSCxLQUFXbGlDLEdBQVEsVUFBVW82QjtJQUFBQSxDQUFBQTtBQ2hCakMsUUFBQWtJLEtBQUF2aUMsRUFBQUMsUUFBQTtBQUFBO0FBRUEsVUFBSXk3QixLQUF5QixHQUFBO0FBQzdCLGFBQU8sZUFBZXo3QixJQUFTLGNBQWMsRUFDM0MsT0FBTyxLQUNULENBQUM7QUFDREEsU0FBUSxVQUFVO0FBQ2xCLFVBQUkrK0IsS0FBYXRELEdBQXVCLEdBQUEsQ0FBcUIsR0FDdkQ4RyxLQUF5TSxDQUFDLEdBQzVNTCxLQUFXbGlDLEdBQVEsVUFBVXVpQztJQUFBQSxDQUFBQTtBQ1RqQyxRQUFBQyxLQUFBemlDLEVBQUFDLFFBQUE7QUFBQTtBQUVBLFVBQUl5N0IsS0FBeUIsR0FBQTtBQUM3QixhQUFPLGVBQWV6N0IsSUFBUyxjQUFjLEVBQzNDLE9BQU8sS0FDVCxDQUFDO0FBQ0RBLFNBQVEseUJBQXlCeWlDO0FBQ2pDemlDLFNBQVEsOEJBQThCMGlDO0FBQ3RDMWlDLFNBQVEsVUFBVTtBQUNsQkEsU0FBUSxvQkFBb0IyaUM7QUFDNUIzaUMsU0FBUSwwQkFBMEI0aUM7QUFDbEM1aUMsU0FBUSwwQkFBMEI2aUM7QUFDbEM3aUMsU0FBUSwwQkFBMEI4aUM7QUFDbEM5aUMsU0FBUSxTQUFTO0FBQ2pCLFVBQUl1Z0MsS0FBWTlFLEdBQXVCLEdBQUEsQ0FBeUMsR0FDNUVzRCxLQUFhdEQsR0FBdUIsR0FBQSxDQUFxQixHQUN6RGtGLEtBQWFsRixHQUF1QixHQUFBLENBQStCLEdBQ25Fc0gsS0FBU3RILEdBQXVCLEdBQUEsQ0FBa0IsR0FHaER1SCxLQUFTaGpDLEdBQVEsU0FBUyxFQUM5QixJQUFJLEdBRUosSUFBSSxLQUVKLElBQUksS0FFSixJQUFJLE1BRUosSUFBSSxLQUNOLEdBQ01pakMsS0FBcUIsRUFHekIsTUFBTSxDQUFDLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxHQUNuQyxJQUFJNWhDLE9BQU8scUJBQXFCMmhDLEdBQU8zaEMsQ0FBRyxDQUFDLE1BQzdDO0FBQ0EsZUFBU3NoQyxHQUFrQjdVLEdBQU9vVixHQUFXQyxHQUFvQjtBQUMvRCxZQUFNakwsSUFBUXBLLEVBQU0sU0FBUyxDQUFDO0FBQzlCLFlBQUksTUFBTSxRQUFRb1YsQ0FBUyxHQUFHO0FBQzVCLGNBQU1FLElBQW1CbEwsRUFBTSxlQUFlK0s7QUFDOUMsaUJBQU9DLEVBQVUsT0FBTyxDQUFDYixHQUFLeFksR0FBTWdELE9BQ2xDd1YsRUFBSWUsRUFBaUIsR0FBR0EsRUFBaUIsS0FBS3ZXLENBQUssQ0FBQyxDQUFDLElBQUlzVyxFQUFtQkQsRUFBVXJXLENBQUssQ0FBQyxHQUNyRndWLElBQ04sQ0FBQyxDQUFDO1FBQ1A7QUFDQSxZQUFJLE9BQU9hLEtBQWMsVUFBVTtBQUNqQyxjQUFNRSxJQUFtQmxMLEVBQU0sZUFBZStLO0FBQzlDLGlCQUFPLE9BQU8sS0FBS0MsQ0FBUyxFQUFFLE9BQU8sQ0FBQ2IsR0FBS2dCLE1BQWU7QUFFeEQsZ0JBQUksT0FBTyxLQUFLRCxFQUFpQixVQUFVSixFQUFNLEVBQUUsUUFBUUssQ0FBVSxNQUFNLElBQUk7QUFDN0Usa0JBQU1DLElBQVdGLEVBQWlCLEdBQUdDLENBQVU7QUFDL0NoQixnQkFBSWlCLENBQVEsSUFBSUgsRUFBbUJELEVBQVVHLENBQVUsR0FBR0EsQ0FBVTtZQUN0RSxPQUFPO0FBQ0wsa0JBQU1FLElBQVNGO0FBQ2ZoQixnQkFBSWtCLENBQU0sSUFBSUwsRUFBVUssQ0FBTTtZQUNoQztBQUNBLG1CQUFPbEI7VUFDVCxHQUFHLENBQUMsQ0FBQztRQUNQO0FBRUEsZUFEZWMsRUFBbUJELENBQVM7TUFFN0M7QUFDQSxlQUFTTSxHQUFZQyxHQUFlO0FBR2xDLFlBQU1DLElBQW1CNVYsT0FBUztBQUNoQyxjQUFNb0ssSUFBUXBLLEVBQU0sU0FBUyxDQUFDLEdBQ3hCNlYsSUFBT0YsRUFBYzNWLENBQUssR0FDMUJzVixJQUFtQmxMLEVBQU0sZUFBZStLLElBQ3hDVyxJQUFXUixFQUFpQixLQUFLLE9BQU8sQ0FBQ2YsR0FBS2hoQyxPQUM5Q3lzQixFQUFNenNCLENBQUcsTUFDWGdoQyxJQUFNQSxLQUFPLENBQUMsR0FDZEEsRUFBSWUsRUFBaUIsR0FBRy9oQyxDQUFHLENBQUMsSUFBSW9pQyxHQUFBQSxHQUFrQmxELEdBQVUsU0FBUyxFQUNuRSxPQUFBckksRUFDRixHQUFHcEssRUFBTXpzQixDQUFHLENBQUMsQ0FBQyxJQUVUZ2hDLElBQ04sSUFBSTtBQUNQLGtCQUFBLEdBQVdVLEdBQU8sU0FBU1ksR0FBTUMsQ0FBUTtRQUMzQztBQUNBLGVBQUFGLEVBQWlCLFlBTVosQ0FBQyxHQUNOQSxFQUFpQixjQUFjLENBQUMsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLEdBQUdELEVBQWMsV0FBVyxHQUNuRkM7TUFDVDtBQUNBLGVBQVNoQixHQUE0Qm1CLElBQW1CLENBQUMsR0FBRztBQUMxRCxZQUFJQztBQU1KLGlCQUw0QkEsSUFBd0JELEVBQWlCLFNBQVMsT0FBTyxTQUFTQyxFQUFzQixPQUFPLENBQUN6QixHQUFLaGhDLE1BQVE7QUFDdkksY0FBTTBpQyxJQUFxQkYsRUFBaUIsR0FBR3hpQyxDQUFHO0FBQ2xELGlCQUFBZ2hDLEVBQUkwQixDQUFrQixJQUFJLENBQUMsR0FDcEIxQjtRQUNULEdBQUcsQ0FBQyxDQUFDLE1BQ3dCLENBQUM7TUFDaEM7QUFDQSxlQUFTUSxHQUF3Qm1CLEdBQWdCQyxHQUFPO0FBQ3RELGVBQU9ELEVBQWUsT0FBTyxDQUFDM0IsR0FBS2hoQyxNQUFRO0FBQ3pDLGNBQU02aUMsSUFBbUI3QixFQUFJaGhDLENBQUc7QUFFaEMsa0JBRDJCLENBQUM2aUMsS0FBb0IsT0FBTyxLQUFLQSxDQUFnQixFQUFFLFdBQVcsTUFFdkYsT0FBTzdCLEVBQUloaEMsQ0FBRyxHQUVUZ2hDO1FBQ1QsR0FBRzRCLENBQUs7TUFDVjtBQUNBLGVBQVNyQixHQUF3QmlCLE1BQXFCaFEsR0FBUTtBQUM1RCxZQUFNc1EsSUFBbUJ6QixHQUE0Qm1CLENBQWdCLEdBQy9ETyxJQUFlLENBQUNELEdBQWtCLEdBQUd0USxDQUFNLEVBQUUsT0FBTyxDQUFDeEYsR0FBTTNFLE9BQUFBLEdBQWFpWCxHQUFXLFNBQVN0UyxHQUFNM0UsQ0FBSSxHQUFHLENBQUMsQ0FBQztBQUNqSCxlQUFPbVosR0FBd0IsT0FBTyxLQUFLc0IsQ0FBZ0IsR0FBR0MsQ0FBWTtNQUM1RTtBQUtBLGVBQVMzQixHQUF1QjRCLEdBQWtCakIsR0FBa0I7QUFFbEUsWUFBSSxPQUFPaUIsS0FBcUI7QUFDOUIsaUJBQU8sQ0FBQztBQUVWLFlBQU1WLElBQU8sQ0FBQyxHQUNSVyxJQUFrQixPQUFPLEtBQUtsQixDQUFnQjtBQUNwRCxlQUFJLE1BQU0sUUFBUWlCLENBQWdCLElBQ2hDQyxFQUFnQixRQUFRLENBQUNqQixHQUFZLE1BQU07QUFDckMsY0FBSWdCLEVBQWlCLFdBQ3ZCVixFQUFLTixDQUFVLElBQUk7UUFFdkIsQ0FBQyxJQUVEaUIsRUFBZ0IsUUFBUWpCLE9BQWM7QUFDaENnQixZQUFpQmhCLENBQVUsS0FBSyxTQUNsQ00sRUFBS04sQ0FBVSxJQUFJO1FBRXZCLENBQUMsR0FFSU07TUFDVDtBQUNBLGVBQVNiLEdBQXdCLEVBQy9CLFFBQVF1QixHQUNSLGFBQWFqQixHQUNiLE1BQU1tQixFQUNSLEdBQUc7QUFDRCxZQUFNWixJQUFPWSxLQUFjOUIsR0FBdUI0QixHQUFrQmpCLENBQWdCLEdBQzlFbGEsSUFBTyxPQUFPLEtBQUt5YSxDQUFJO0FBQzdCLFlBQUl6YSxFQUFLLFdBQVc7QUFDbEIsaUJBQU9tYjtBQUVULFlBQUlyVTtBQUNKLGVBQU85RyxFQUFLLE9BQU8sQ0FBQ21aLEdBQUtnQixHQUFZM2lDLE9BQy9CLE1BQU0sUUFBUTJqQyxDQUFnQixLQUNoQ2hDLEVBQUlnQixDQUFVLElBQUlnQixFQUFpQjNqQyxDQUFDLEtBQUssT0FBTzJqQyxFQUFpQjNqQyxDQUFDLElBQUkyakMsRUFBaUJyVSxDQUFRLEdBQy9GQSxJQUFXdHZCLEtBQ0YsT0FBTzJqQyxLQUFxQixZQUNyQ2hDLEVBQUlnQixDQUFVLElBQUlnQixFQUFpQmhCLENBQVUsS0FBSyxPQUFPZ0IsRUFBaUJoQixDQUFVLElBQUlnQixFQUFpQnJVLENBQVEsR0FDakhBLElBQVdxVCxLQUVYaEIsRUFBSWdCLENBQVUsSUFBSWdCLEdBRWJoQyxJQUNOLENBQUMsQ0FBQztNQUNQO0FBQ0EsVUFBSUgsS0FBV2xpQyxHQUFRLFVBQVV3akM7SUFBQUEsQ0FBQUE7QUNyS2pDLFFBQUFnQixLQUFBemtDLEVBQUFDLFFBQUE7QUFBQTtBQUVBLFVBQUl5N0IsS0FBeUIsR0FBQTtBQUM3QixhQUFPLGVBQWV6N0IsSUFBUyxjQUFjLEVBQzNDLE9BQU8sS0FDVCxDQUFDO0FBQ0RBLFNBQVEsVUFBVTtBQUNsQkEsU0FBUSxVQUFVeWtDO0FBQ2xCemtDLFNBQVEsZ0JBQWdCMGtDO0FBQ3hCLFVBQUkxRCxLQUFjdkYsR0FBdUIsR0FBQSxDQUFnQyxHQUNyRWtKLEtBQXNCbEosR0FBdUIsR0FBQSxDQUErQixHQUM1RW1KLEtBQWUsR0FBQTtBQUNuQixlQUFTSCxHQUFRek8sR0FBSzZPLEdBQU1DLElBQVksTUFBTTtBQUM1QyxZQUFJLENBQUNELEtBQVEsT0FBT0EsS0FBUztBQUMzQixpQkFBTztBQUlULFlBQUk3TyxLQUFPQSxFQUFJLFFBQVE4TyxHQUFXO0FBQ2hDLGNBQU14a0MsSUFBTSxRQUFRdWtDLENBQUksR0FBRyxNQUFNLEdBQUcsRUFBRSxPQUFPLENBQUN4QyxHQUFLeFksTUFBU3dZLEtBQU9BLEVBQUl4WSxDQUFJLElBQUl3WSxFQUFJeFksQ0FBSSxJQUFJLE1BQU1tTSxDQUFHO0FBQ3BHLGNBQUkxMUIsS0FBTztBQUNULG1CQUFPQTtRQUVYO0FBQ0EsZUFBT3VrQyxFQUFLLE1BQU0sR0FBRyxFQUFFLE9BQU8sQ0FBQ3hDLEdBQUt4WSxNQUM5QndZLEtBQU9BLEVBQUl4WSxDQUFJLEtBQUssT0FDZndZLEVBQUl4WSxDQUFJLElBRVYsTUFDTm1NLENBQUc7TUFDUjtBQUNBLGVBQVMwTyxHQUFjSyxHQUFjQyxHQUFXQyxHQUFnQkMsSUFBWUQsR0FBZ0I7QUFDMUYsWUFBSXphO0FBQ0osZUFBSSxPQUFPdWEsS0FBaUIsYUFDMUJ2YSxJQUFRdWEsRUFBYUUsQ0FBYyxJQUMxQixNQUFNLFFBQVFGLENBQVksSUFDbkN2YSxJQUFRdWEsRUFBYUUsQ0FBYyxLQUFLQyxJQUV4QzFhLElBQVFpYSxHQUFRTSxHQUFjRSxDQUFjLEtBQUtDLEdBRS9DRixNQUNGeGEsSUFBUXdhLEVBQVV4YSxHQUFPMGEsR0FBV0gsQ0FBWSxJQUUzQ3ZhO01BQ1Q7QUFDQSxlQUFTeVosR0FBTWxaLEdBQVM7QUFDdEIsWUFBTSxFQUNKLE1BQUFtUixHQUNBLGFBQUFpSixJQUFjcGEsRUFBUSxNQUN0QixVQUFBcWEsR0FDQSxXQUFBSixFQUNGLElBQUlqYSxHQUlFK0csSUFBS2hFLE9BQVM7QUFDbEIsY0FBSUEsRUFBTW9PLENBQUksS0FBSztBQUNqQixtQkFBTztBQUVULGNBQU1nSCxJQUFZcFYsRUFBTW9PLENBQUksR0FDdEJoRSxJQUFRcEssRUFBTSxPQUNkaVgsSUFBZU4sR0FBUXZNLEdBQU9rTixDQUFRLEtBQUssQ0FBQyxHQUM1Q2pDLElBQXFCOEIsT0FBa0I7QUFDM0MsZ0JBQUl6YSxJQUFRa2EsR0FBY0ssR0FBY0MsR0FBV0MsQ0FBYztBQUtqRSxtQkFKSUEsTUFBbUJ6YSxLQUFTLE9BQU95YSxLQUFtQixhQUV4RHphLElBQVFrYSxHQUFjSyxHQUFjQyxHQUFXLEdBQUc5SSxDQUFJLEdBQUcrSSxNQUFtQixZQUFZLE1BQUEsR0FBU2pFLEdBQVksU0FBU2lFLENBQWMsQ0FBQyxJQUFJQSxDQUFjLElBRXJKRSxNQUFnQixRQUNYM2EsSUFFRixFQUNMLENBQUMyYSxDQUFXLEdBQUczYSxFQUNqQjtVQUNGO0FBQ0Esa0JBQUEsR0FBV29hLEdBQWEsbUJBQW1COVcsR0FBT29WLEdBQVdDLENBQWtCO1FBQ2pGO0FBQ0EsZUFBQXJSLEVBQUcsWUFFQyxDQUFDLEdBQ0xBLEVBQUcsY0FBYyxDQUFDb0ssQ0FBSSxHQUNmcEs7TUFDVDtBQUNBLFVBQUlvUSxLQUFXbGlDLEdBQVEsVUFBVWlrQztJQUFBQSxDQUFBQTtBQ25GakMsUUFBQW9CLEtBQUF0bEMsRUFBQUMsUUFBQTtBQUFBO0FBRUEsYUFBTyxlQUFlQSxJQUFTLGNBQWMsRUFDM0MsT0FBTyxLQUNULENBQUM7QUFDREEsU0FBUSxVQUFVNnhCO0FBQ2xCLGVBQVNBLEdBQVFDLEdBQUk7QUFDbkIsWUFBTUosSUFBUSxDQUFDO0FBQ2YsZUFBT0MsUUFDREQsRUFBTUMsQ0FBRyxNQUFNLFdBQ2pCRCxFQUFNQyxDQUFHLElBQUlHLEVBQUdILENBQUcsSUFFZEQsRUFBTUMsQ0FBRztNQUVwQjtJQUFBLENBQUE7QUNkQSxRQUFBMlQsS0FBQXZsQyxFQUFBQyxRQUFBO0FBQUE7QUFFQSxVQUFJeTdCLEtBQXlCLEdBQUE7QUFDN0IsYUFBTyxlQUFlejdCLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNEQSxTQUFRLHFCQUFxQnVsQztBQUM3QnZsQyxTQUFRLGtCQUFrQndsQztBQUMxQnhsQyxTQUFRLFVBQVU7QUFDbEJBLFNBQVEsd0JBQXdCeWxDO0FBQ2hDemxDLFNBQVEsV0FBVzBsQztBQUNuQjFsQyxTQUFRLFNBQVMybEM7QUFDakIzbEMsU0FBUSxhQUFhO0FBQ3JCQSxTQUFRLFVBQVU0bEM7QUFDbEI1bEMsU0FBUSxjQUFjO0FBQ3RCLFVBQUkya0MsS0FBc0JsSixHQUF1QixHQUFBLENBQStCLEdBQzVFbUosS0FBZSxHQUFBLEdBQ2ZpQixLQUFTLEdBQUEsR0FDVDlDLEtBQVN0SCxHQUF1QixHQUFBLENBQWtCLEdBQ2xEcUssS0FBV3JLLEdBQXVCLEdBQUEsQ0FBb0IsR0FDcERzSyxLQUFhLEVBQ2pCLEdBQUcsVUFDSCxHQUFHLFVBQ0wsR0FDTUMsS0FBYSxFQUNqQixHQUFHLE9BQ0gsR0FBRyxTQUNILEdBQUcsVUFDSCxHQUFHLFFBQ0gsR0FBRyxDQUFDLFFBQVEsT0FBTyxHQUNuQixHQUFHLENBQUMsT0FBTyxRQUFRLEVBQ3JCLEdBQ01DLEtBQVUsRUFDZCxTQUFTLE1BQ1QsU0FBUyxNQUNULFVBQVUsTUFDVixVQUFVLEtBQ1osR0FLTUMsTUFBQUEsR0FBdUJKLEdBQVMsU0FBUzVKLE9BQVE7QUFFckQsWUFBSUEsRUFBSyxTQUFTO0FBQ2hCLGNBQUkrSixHQUFRL0osQ0FBSTtBQUNkQSxnQkFBTytKLEdBQVEvSixDQUFJOztBQUVuQixtQkFBTyxDQUFDQSxDQUFJO0FBR2hCLFlBQU0sQ0FBQ2o2QixHQUFHRSxDQUFDLElBQUkrNUIsRUFBSyxNQUFNLEVBQUUsR0FDdEJuTSxJQUFXZ1csR0FBVzlqQyxDQUFDLEdBQ3ZCa2tDLElBQVlILEdBQVc3akMsQ0FBQyxLQUFLO0FBQ25DLGVBQU8sTUFBTSxRQUFRZ2tDLENBQVMsSUFBSUEsRUFBVSxJQUFJQyxPQUFPclcsSUFBV3FXLENBQUcsSUFBSSxDQUFDclcsSUFBV29XLENBQVM7TUFDaEcsQ0FBQyxHQUNLRSxLQUFhcm1DLEdBQVEsYUFBYSxDQUFDLEtBQUssTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sVUFBVSxhQUFhLGVBQWUsZ0JBQWdCLGNBQWMsV0FBVyxXQUFXLGdCQUFnQixxQkFBcUIsbUJBQW1CLGVBQWUsb0JBQW9CLGdCQUFnQixHQUNqUnNtQyxLQUFjdG1DLEdBQVEsY0FBYyxDQUFDLEtBQUssTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sV0FBVyxjQUFjLGdCQUFnQixpQkFBaUIsZUFBZSxZQUFZLFlBQVksaUJBQWlCLHNCQUFzQixvQkFBb0IsZ0JBQWdCLHFCQUFxQixpQkFBaUIsR0FDaFN1bUMsS0FBYyxDQUFDLEdBQUdGLElBQVksR0FBR0MsRUFBVztBQUNsRCxlQUFTZCxHQUFnQnROLEdBQU9rTixHQUFVb0IsR0FBYzVKLEdBQVU7QUFDaEUsWUFBSTZKO0FBQ0osWUFBTUMsS0FBZ0JELEtBQUFBLEdBQWVaLEdBQU8sU0FBUzNOLEdBQU9rTixHQUFVLEtBQUssTUFBTSxPQUFPcUIsSUFBV0Q7QUFDbkcsZUFBSSxPQUFPRSxLQUFpQixXQUNuQm5aLE9BQ0QsT0FBT0EsS0FBUSxXQUNWQSxJQU9GbVosSUFBZW5aLElBR3RCLE1BQU0sUUFBUW1aLENBQVksSUFDckJuWixPQUNELE9BQU9BLEtBQVEsV0FDVkEsSUFTRm1aLEVBQWFuWixDQUFHLElBR3ZCLE9BQU9tWixLQUFpQixhQUNuQkEsSUFLRixNQUFHO1FBQUE7TUFDWjtBQUNBLGVBQVNuQixHQUFtQnJOLEdBQU87QUFDakMsZUFBT3NOLEdBQWdCdE4sR0FBTyxXQUFXLEdBQUcsU0FBUztNQUN2RDtBQUNBLGVBQVN3TixHQUFTaUIsR0FBYXpELEdBQVc7QUFDeEMsWUFBSSxPQUFPQSxLQUFjLFlBQVlBLEtBQWE7QUFDaEQsaUJBQU9BO0FBRVQsWUFBTTNWLElBQU0sS0FBSyxJQUFJMlYsQ0FBUyxHQUN4QjBELElBQWNELEVBQVlwWixDQUFHO0FBQ25DLGVBQUkyVixLQUFhLElBQ1IwRCxJQUVMLE9BQU9BLEtBQWdCLFdBQ2xCLENBQUNBLElBRUgsSUFBSUEsQ0FBVztNQUN4QjtBQUNBLGVBQVNuQixHQUFzQm9CLEdBQWVGLEdBQWE7QUFDekQsZUFBT3pELE9BQWEyRCxFQUFjLE9BQU8sQ0FBQ3hFLEdBQUs4QyxPQUM3QzlDLEVBQUk4QyxDQUFXLElBQUlPLEdBQVNpQixHQUFhekQsQ0FBUyxHQUMzQ2IsSUFDTixDQUFDLENBQUM7TUFDUDtBQUNBLGVBQVN5RSxHQUFtQmhaLEdBQU81RSxHQUFNZ1QsR0FBTXlLLEdBQWE7QUFHMUQsWUFBSXpkLEVBQUssUUFBUWdULENBQUksTUFBTTtBQUN6QixpQkFBTztBQUVULFlBQU0ySyxJQUFnQlgsR0FBaUJoSyxDQUFJLEdBQ3JDaUgsSUFBcUJzQyxHQUFzQm9CLEdBQWVGLENBQVcsR0FDckV6RCxJQUFZcFYsRUFBTW9PLENBQUk7QUFDNUIsZ0JBQUEsR0FBVzBJLEdBQWEsbUJBQW1COVcsR0FBT29WLEdBQVdDLENBQWtCO01BQ2pGO0FBQ0EsZUFBU2MsR0FBTW5XLEdBQU81RSxHQUFNO0FBQzFCLFlBQU15ZCxJQUFjcEIsR0FBbUJ6WCxFQUFNLEtBQUs7QUFDbEQsZUFBTyxPQUFPLEtBQUtBLENBQUssRUFBRSxJQUFJb08sT0FBUTRLLEdBQW1CaFosR0FBTzVFLEdBQU1nVCxHQUFNeUssQ0FBVyxDQUFDLEVBQUUsT0FBTzVELEdBQU8sU0FBUyxDQUFDLENBQUM7TUFDckg7QUFDQSxlQUFTNEMsR0FBTzdYLEdBQU87QUFDckIsZUFBT21XLEdBQU1uVyxHQUFPdVksRUFBVTtNQUNoQztBQUNBVixTQUFPLFlBR0UsQ0FBQztBQUNWQSxTQUFPLGNBQWNVO0FBQ3JCLGVBQVNULEdBQVE5WCxHQUFPO0FBQ3RCLGVBQU9tVyxHQUFNblcsR0FBT3dZLEVBQVc7TUFDakM7QUFDQVYsU0FBUSxZQUdDLENBQUM7QUFDVkEsU0FBUSxjQUFjVTtBQUN0QixlQUFTUyxHQUFRalosR0FBTztBQUN0QixlQUFPbVcsR0FBTW5XLEdBQU95WSxFQUFXO01BQ2pDO0FBQ0FRLFNBQVEsWUFHQyxDQUFDO0FBQ1ZBLFNBQVEsY0FBY1I7QUFDdEIsVUFBSXJFLEtBQVdsaUMsR0FBUSxVQUFVK21DO0lBQUFBLENBQUFBO0FDaEtqQyxRQUFBQyxLQUFBam5DLEVBQUFDLFFBQUE7QUFBQTtBQUVBLFVBQUl5N0IsS0FBeUIsR0FBQTtBQUM3QixhQUFPLGVBQWV6N0IsSUFBUyxjQUFjLEVBQzNDLE9BQU8sS0FDVCxDQUFDO0FBQ0RBLFNBQVEsVUFBVTtBQUNsQixVQUFJK2lDLEtBQVN0SCxHQUF1QixHQUFBLENBQWtCO0FBQ3RELGVBQVN3TCxNQUFXcFQsR0FBUTtBQUMxQixZQUFNcVQsSUFBV3JULEVBQU8sT0FBTyxDQUFDd08sR0FBSzRCLE9BQ25DQSxFQUFNLFlBQVksUUFBUS9ILE9BQVE7QUFDaENtRyxZQUFJbkcsQ0FBSSxJQUFJK0g7UUFDZCxDQUFDLEdBQ001QixJQUNOLENBQUMsQ0FBQyxHQUlDdlEsSUFBS2hFLE9BQ0YsT0FBTyxLQUFLQSxDQUFLLEVBQUUsT0FBTyxDQUFDdVUsR0FBS25HLE1BQ2pDZ0wsRUFBU2hMLENBQUksS0FBQSxHQUNKNkcsR0FBTyxTQUFTVixHQUFLNkUsRUFBU2hMLENBQUksRUFBRXBPLENBQUssQ0FBQyxJQUVoRHVVLEdBQ04sQ0FBQyxDQUFDO0FBRVAsZUFBQXZRLEVBQUcsWUFBNkgsQ0FBQyxHQUNqSUEsRUFBRyxjQUFjK0IsRUFBTyxPQUFPLENBQUN3TyxHQUFLNEIsTUFBVTVCLEVBQUksT0FBTzRCLEVBQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUN6RW5TO01BQ1Q7QUFDQSxVQUFJb1EsS0FBV2xpQyxHQUFRLFVBQVVpbkM7SUFBQUEsQ0FBQUE7QUM5QmpDLFFBQUFFLEtBQUFwbkMsRUFBQUMsT0FBQTtBQUFBO0FBRUEsVUFBSXk3QixLQUF5QixHQUFBO0FBQzdCLGFBQU8sZUFBZXo3QixHQUFTLGNBQWMsRUFDM0MsT0FBTyxLQUNULENBQUM7QUFDREEsUUFBUSxpQkFBaUJBLEVBQVEsWUFBWUEsRUFBUSxtQkFBbUJBLEVBQVEsY0FBY0EsRUFBUSxlQUFlQSxFQUFRLGtCQUFrQkEsRUFBUSxhQUFhQSxFQUFRLGNBQWNBLEVBQVEsb0JBQW9CQSxFQUFRLGVBQWVBLEVBQVEsU0FBUztBQUM5UEEsUUFBUSxrQkFBa0JvbkM7QUFDMUJwbkMsUUFBUSxlQUFlQSxFQUFRLFVBQVVBLEVBQVEsVUFBVTtBQUMzRCxVQUFJMmtDLEtBQXNCbEosR0FBdUIsR0FBQSxDQUErQixHQUM1RW9LLEtBQVNwSyxHQUF1QixHQUFBLENBQWtCLEdBQ2xENEwsS0FBVzVMLEdBQXVCLEdBQUEsQ0FBb0IsR0FDdEQ2TCxLQUFXLEdBQUEsR0FDWDFDLEtBQWUsR0FBQTtBQUNuQixlQUFTd0MsR0FBZ0I1YyxHQUFPO0FBQzlCLGVBQUksT0FBT0EsS0FBVSxXQUNaQSxJQUVGLEdBQUdBLENBQUs7TUFDakI7QUFDQSxlQUFTK2MsR0FBa0JyTCxHQUFNOEksR0FBVztBQUMxQyxnQkFBQSxHQUFXYSxHQUFPLFNBQVMsRUFDekIsTUFBQTNKLEdBQ0EsVUFBVSxXQUNWLFdBQUE4SSxFQUNGLENBQUM7TUFDSDtBQUNBLFVBQU13QyxLQUFTeG5DLEVBQVEsU0FBU3VuQyxHQUFrQixVQUFVSCxFQUFlLEdBQ3JFSyxLQUFZem5DLEVBQVEsWUFBWXVuQyxHQUFrQixhQUFhSCxFQUFlLEdBQzlFTSxLQUFjMW5DLEVBQVEsY0FBY3VuQyxHQUFrQixlQUFlSCxFQUFlLEdBQ3BGTyxLQUFlM25DLEVBQVEsZUFBZXVuQyxHQUFrQixnQkFBZ0JILEVBQWUsR0FDdkZRLEtBQWE1bkMsRUFBUSxhQUFhdW5DLEdBQWtCLGNBQWNILEVBQWUsR0FDakZTLEtBQWM3bkMsRUFBUSxjQUFjdW5DLEdBQWtCLGFBQWEsR0FDbkVPLEtBQWlCOW5DLEVBQVEsaUJBQWlCdW5DLEdBQWtCLGdCQUFnQixHQUM1RVEsS0FBbUIvbkMsRUFBUSxtQkFBbUJ1bkMsR0FBa0Isa0JBQWtCLEdBQ2xGUyxLQUFvQmhvQyxFQUFRLG9CQUFvQnVuQyxHQUFrQixtQkFBbUIsR0FDckZVLE1BQWtCam9DLEVBQVEsa0JBQWtCdW5DLEdBQWtCLGlCQUFpQixHQUMvRVcsS0FBVWxvQyxFQUFRLFVBQVV1bkMsR0FBa0IsV0FBV0gsRUFBZSxHQUN4RWUsS0FBZW5vQyxFQUFRLGVBQWV1bkMsR0FBa0IsY0FBYyxHQUl0RWEsS0FBZXRhLE9BQVM7QUFDNUIsWUFBSUEsRUFBTSxpQkFBaUIsVUFBYUEsRUFBTSxpQkFBaUIsTUFBTTtBQUNuRSxjQUFNNlksS0FBQUEsR0FBa0JXLEdBQVMsaUJBQWlCeFosRUFBTSxPQUFPLHNCQUFzQixHQUFHLGNBQWMsR0FDaEdxVixJQUFxQkQsUUFBYyxFQUN2QyxlQUFBLEdBQWtCb0UsR0FBUyxVQUFVWCxHQUFhekQsQ0FBUyxFQUM3RDtBQUNBLGtCQUFBLEdBQVcwQixHQUFhLG1CQUFtQjlXLEdBQU9BLEVBQU0sY0FBY3FWLENBQWtCO1FBQzFGO0FBQ0EsZUFBTztNQUNUO0FBQ0FuakMsUUFBUSxlQUFlb29DO0FBQ3ZCQSxTQUFhLFlBRVQsQ0FBQztBQUNMQSxTQUFhLGNBQWMsQ0FBQyxjQUFjO0FBQzFDLFVBQU1DLE1BQUFBLEdBQWNoQixHQUFTLFNBQVNHLElBQVFDLElBQVdDLElBQWFDLElBQWNDLElBQVlDLElBQWFDLElBQWdCQyxJQUFrQkMsSUFBbUJDLEtBQWlCRyxJQUFjRixJQUFTQyxFQUFZLEdBQ2xOakcsS0FBV2xpQyxFQUFRLFVBQVVxb0M7SUFBQUEsQ0FBQUE7QUMxRGpDLFFBQUFDLEtBQUF2b0MsRUFBQUMsUUFBQTtBQUFBO0FBRUEsVUFBSXk3QixLQUF5QixHQUFBO0FBQzdCLGFBQU8sZUFBZXo3QixJQUFTLGNBQWMsRUFDM0MsT0FBTyxLQUNULENBQUM7QUFDREEsU0FBUSxTQUFTQSxHQUFRLG1CQUFtQkEsR0FBUSxzQkFBc0JBLEdBQVEsb0JBQW9CQSxHQUFRLFVBQVVBLEdBQVEsYUFBYUEsR0FBUSxlQUFlQSxHQUFRLGVBQWVBLEdBQVEsa0JBQWtCQSxHQUFRLFdBQVdBLEdBQVEsTUFBTUEsR0FBUSxVQUFVQSxHQUFRLFlBQVk7QUFDNVIsVUFBSTZsQyxLQUFTcEssR0FBdUIsR0FBQSxDQUFrQixHQUNsRDRMLEtBQVc1TCxHQUF1QixHQUFBLENBQW9CLEdBQ3RENkwsS0FBVyxHQUFBLEdBQ1gxQyxLQUFlLEdBQUEsR0FDZkQsS0FBc0JsSixHQUF1QixHQUFBLENBQStCLEdBRzFFOE0sS0FBTXphLE9BQVM7QUFDbkIsWUFBSUEsRUFBTSxRQUFRLFVBQWFBLEVBQU0sUUFBUSxNQUFNO0FBQ2pELGNBQU02WSxLQUFBQSxHQUFrQlcsR0FBUyxpQkFBaUJ4WixFQUFNLE9BQU8sV0FBVyxHQUFHLEtBQUssR0FDNUVxVixJQUFxQkQsUUFBYyxFQUN2QyxNQUFBLEdBQVNvRSxHQUFTLFVBQVVYLEdBQWF6RCxDQUFTLEVBQ3BEO0FBQ0Esa0JBQUEsR0FBVzBCLEdBQWEsbUJBQW1COVcsR0FBT0EsRUFBTSxLQUFLcVYsQ0FBa0I7UUFDakY7QUFDQSxlQUFPO01BQ1Q7QUFDQW5qQyxTQUFRLE1BQU11b0M7QUFDZEEsU0FBSSxZQUVBLENBQUM7QUFDTEEsU0FBSSxjQUFjLENBQUMsS0FBSztBQUl4QixVQUFNQyxLQUFZMWEsT0FBUztBQUN6QixZQUFJQSxFQUFNLGNBQWMsVUFBYUEsRUFBTSxjQUFjLE1BQU07QUFDN0QsY0FBTTZZLEtBQUFBLEdBQWtCVyxHQUFTLGlCQUFpQnhaLEVBQU0sT0FBTyxXQUFXLEdBQUcsV0FBVyxHQUNsRnFWLElBQXFCRCxRQUFjLEVBQ3ZDLFlBQUEsR0FBZW9FLEdBQVMsVUFBVVgsR0FBYXpELENBQVMsRUFDMUQ7QUFDQSxrQkFBQSxHQUFXMEIsR0FBYSxtQkFBbUI5VyxHQUFPQSxFQUFNLFdBQVdxVixDQUFrQjtRQUN2RjtBQUNBLGVBQU87TUFDVDtBQUNBbmpDLFNBQVEsWUFBWXdvQztBQUNwQkEsU0FBVSxZQUVOLENBQUM7QUFDTEEsU0FBVSxjQUFjLENBQUMsV0FBVztBQUlwQyxVQUFNQyxLQUFTM2EsT0FBUztBQUN0QixZQUFJQSxFQUFNLFdBQVcsVUFBYUEsRUFBTSxXQUFXLE1BQU07QUFDdkQsY0FBTTZZLEtBQUFBLEdBQWtCVyxHQUFTLGlCQUFpQnhaLEVBQU0sT0FBTyxXQUFXLEdBQUcsUUFBUSxHQUMvRXFWLElBQXFCRCxRQUFjLEVBQ3ZDLFNBQUEsR0FBWW9FLEdBQVMsVUFBVVgsR0FBYXpELENBQVMsRUFDdkQ7QUFDQSxrQkFBQSxHQUFXMEIsR0FBYSxtQkFBbUI5VyxHQUFPQSxFQUFNLFFBQVFxVixDQUFrQjtRQUNwRjtBQUNBLGVBQU87TUFDVDtBQUNBbmpDLFNBQVEsU0FBU3lvQztBQUNqQkEsU0FBTyxZQUVILENBQUM7QUFDTEEsU0FBTyxjQUFjLENBQUMsUUFBUTtBQUM5QixVQUFNQyxLQUFhMW9DLEdBQVEsY0FBQSxHQUFpQjZsQyxHQUFPLFNBQVMsRUFDMUQsTUFBTSxhQUNSLENBQUMsR0FDSzhDLEtBQVUzb0MsR0FBUSxXQUFBLEdBQWM2bEMsR0FBTyxTQUFTLEVBQ3BELE1BQU0sVUFDUixDQUFDLEdBQ0srQyxLQUFlNW9DLEdBQVEsZ0JBQUEsR0FBbUI2bEMsR0FBTyxTQUFTLEVBQzlELE1BQU0sZUFDUixDQUFDLEdBQ0tnRCxLQUFrQjdvQyxHQUFRLG1CQUFBLEdBQXNCNmxDLEdBQU8sU0FBUyxFQUNwRSxNQUFNLGtCQUNSLENBQUMsR0FDS2lELEtBQWU5b0MsR0FBUSxnQkFBQSxHQUFtQjZsQyxHQUFPLFNBQVMsRUFDOUQsTUFBTSxlQUNSLENBQUMsR0FDS2tELEtBQXNCL29DLEdBQVEsdUJBQUEsR0FBMEI2bEMsR0FBTyxTQUFTLEVBQzVFLE1BQU0sc0JBQ1IsQ0FBQyxHQUNLbUQsS0FBbUJocEMsR0FBUSxvQkFBQSxHQUF1QjZsQyxHQUFPLFNBQVMsRUFDdEUsTUFBTSxtQkFDUixDQUFDLEdBQ0tvRCxLQUFvQmpwQyxHQUFRLHFCQUFBLEdBQXdCNmxDLEdBQU8sU0FBUyxFQUN4RSxNQUFNLG9CQUNSLENBQUMsR0FDS3FELEtBQVdscEMsR0FBUSxZQUFBLEdBQWU2bEMsR0FBTyxTQUFTLEVBQ3RELE1BQU0sV0FDUixDQUFDLEdBQ0tzRCxNQUFBQSxHQUFXOUIsR0FBUyxTQUFTa0IsSUFBS0MsSUFBV0MsSUFBUUMsSUFBWUMsSUFBU0MsSUFBY0MsSUFBaUJDLElBQWNDLElBQXFCQyxJQUFrQkMsSUFBbUJDLEVBQVEsR0FDM0xoSCxLQUFXbGlDLEdBQVEsVUFBVW1wQztJQUFBQSxDQUFBQTtBQzdGakMsUUFBQUMsS0FBQXJwQyxFQUFBQyxRQUFBO0FBQUE7QUFFQSxVQUFJeTdCLEtBQXlCLEdBQUE7QUFDN0IsYUFBTyxlQUFlejdCLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNEQSxTQUFRLFVBQVVBLEdBQVEsUUFBUUEsR0FBUSxVQUFVQSxHQUFRLGtCQUFrQjtBQUM5RUEsU0FBUSxtQkFBbUJxcEM7QUFDM0IsVUFBSXhELEtBQVNwSyxHQUF1QixHQUFBLENBQWtCLEdBQ2xENEwsS0FBVzVMLEdBQXVCLEdBQUEsQ0FBb0I7QUFDMUQsZUFBUzROLEdBQWlCN2UsR0FBTzBhLEdBQVc7QUFDMUMsZUFBSUEsTUFBYyxTQUNUQSxJQUVGMWE7TUFDVDtBQUNBLFVBQU04ZSxLQUFRdHBDLEdBQVEsU0FBQSxHQUFZNmxDLEdBQU8sU0FBUyxFQUNoRCxNQUFNLFNBQ04sVUFBVSxXQUNWLFdBQVd3RCxHQUNiLENBQUMsR0FDS0UsS0FBVXZwQyxHQUFRLFdBQUEsR0FBYzZsQyxHQUFPLFNBQVMsRUFDcEQsTUFBTSxXQUNOLGFBQWEsbUJBQ2IsVUFBVSxXQUNWLFdBQVd3RCxHQUNiLENBQUMsR0FDS0csS0FBa0J4cEMsR0FBUSxtQkFBQSxHQUFzQjZsQyxHQUFPLFNBQVMsRUFDcEUsTUFBTSxtQkFDTixVQUFVLFdBQ1YsV0FBV3dELEdBQ2IsQ0FBQyxHQUNLSSxNQUFBQSxHQUFjcEMsR0FBUyxTQUFTaUMsSUFBT0MsSUFBU0MsRUFBZSxHQUNqRXRILEtBQVdsaUMsR0FBUSxVQUFVeXBDO0lBQUFBLENBQUFBO0FDakNqQyxRQUFBQyxLQUFBM3BDLEVBQUFDLFFBQUE7QUFBQTtBQUVBLFVBQUl5N0IsS0FBeUIsR0FBQTtBQUM3QixhQUFPLGVBQWV6N0IsSUFBUyxjQUFjLEVBQzNDLE9BQU8sS0FDVCxDQUFDO0FBQ0RBLFNBQVEsWUFBWUEsR0FBUSxhQUFhQSxHQUFRLFdBQVdBLEdBQVEsWUFBWUEsR0FBUSxXQUFXQSxHQUFRLFlBQVlBLEdBQVEsU0FBU0EsR0FBUSxVQUFVQSxHQUFRLFlBQVk7QUFDOUtBLFNBQVEsa0JBQWtCMnBDO0FBQzFCM3BDLFNBQVEsUUFBUTtBQUNoQixVQUFJNmxDLEtBQVNwSyxHQUF1QixHQUFBLENBQWtCLEdBQ2xENEwsS0FBVzVMLEdBQXVCLEdBQUEsQ0FBb0IsR0FDdERtSixLQUFlLEdBQUE7QUFDbkIsZUFBUytFLEdBQWdCbmYsR0FBTztBQUM5QixlQUFPQSxLQUFTLEtBQUtBLE1BQVUsSUFBSSxHQUFHQSxJQUFRLEdBQUcsTUFBTUE7TUFDekQ7QUFDQSxVQUFNb2YsS0FBUTVwQyxHQUFRLFNBQUEsR0FBWTZsQyxHQUFPLFNBQVMsRUFDaEQsTUFBTSxTQUNOLFdBQVc4RCxHQUNiLENBQUMsR0FDS0UsS0FBVy9iLE9BQVM7QUFDeEIsWUFBSUEsRUFBTSxhQUFhLFVBQWFBLEVBQU0sYUFBYSxNQUFNO0FBQzNELGNBQU1xVixJQUFxQkQsT0FBYTtBQUN0QyxnQkFBSTRHLEdBQWNDO0FBQ2xCLGdCQUFNMUcsTUFBZXlHLElBQWVoYyxFQUFNLFVBQVUsU0FBU2djLElBQWVBLEVBQWEsZ0JBQWdCLFNBQVNBLElBQWVBLEVBQWEsV0FBVyxPQUFPLFNBQVNBLEVBQWE1RyxDQUFTLE1BQU0wQixHQUFhLE9BQU8xQixDQUFTO0FBQ2xPLG1CQUFLRyxNQUtDMEcsSUFBZ0JqYyxFQUFNLFVBQVUsU0FBU2ljLElBQWdCQSxFQUFjLGdCQUFnQixPQUFPLFNBQVNBLEVBQWMsVUFBVSxPQUM1SCxFQUNMLFVBQVUsR0FBRzFHLENBQVUsR0FBR3ZWLEVBQU0sTUFBTSxZQUFZLElBQUksR0FDeEQsSUFFSyxFQUNMLFVBQVV1VixFQUNaLElBWFMsRUFDTCxVQUFVc0csR0FBZ0J6RyxDQUFTLEVBQ3JDO1VBVUo7QUFDQSxrQkFBQSxHQUFXMEIsR0FBYSxtQkFBbUI5VyxHQUFPQSxFQUFNLFVBQVVxVixDQUFrQjtRQUN0RjtBQUNBLGVBQU87TUFDVDtBQUNBbmpDLFNBQVEsV0FBVzZwQztBQUNuQkEsU0FBUyxjQUFjLENBQUMsVUFBVTtBQUNsQyxVQUFNRyxLQUFXaHFDLEdBQVEsWUFBQSxHQUFlNmxDLEdBQU8sU0FBUyxFQUN0RCxNQUFNLFlBQ04sV0FBVzhELEdBQ2IsQ0FBQyxHQUNLTSxLQUFTanFDLEdBQVEsVUFBQSxHQUFhNmxDLEdBQU8sU0FBUyxFQUNsRCxNQUFNLFVBQ04sV0FBVzhELEdBQ2IsQ0FBQyxHQUNLTyxLQUFZbHFDLEdBQVEsYUFBQSxHQUFnQjZsQyxHQUFPLFNBQVMsRUFDeEQsTUFBTSxhQUNOLFdBQVc4RCxHQUNiLENBQUMsR0FDS1EsS0FBWW5xQyxHQUFRLGFBQUEsR0FBZ0I2bEMsR0FBTyxTQUFTLEVBQ3hELE1BQU0sYUFDTixXQUFXOEQsR0FDYixDQUFDLEdBQ0tTLEtBQVlwcUMsR0FBUSxhQUFBLEdBQWdCNmxDLEdBQU8sU0FBUyxFQUN4RCxNQUFNLFFBQ04sYUFBYSxTQUNiLFdBQVc4RCxHQUNiLENBQUMsR0FDS1UsS0FBYXJxQyxHQUFRLGNBQUEsR0FBaUI2bEMsR0FBTyxTQUFTLEVBQzFELE1BQU0sUUFDTixhQUFhLFVBQ2IsV0FBVzhELEdBQ2IsQ0FBQyxHQUNLVyxLQUFZdHFDLEdBQVEsYUFBQSxHQUFnQjZsQyxHQUFPLFNBQVMsRUFDeEQsTUFBTSxZQUNSLENBQUMsR0FDSzBFLE1BQUFBLEdBQWFsRCxHQUFTLFNBQVN1QyxJQUFPQyxJQUFVRyxJQUFVQyxJQUFRQyxJQUFXQyxJQUFXRyxFQUFTLEdBQ25HcEksS0FBV2xpQyxHQUFRLFVBQVV1cUM7SUFBQUEsQ0FBQUE7QUMxRWpDLFFBQUFDLEtBQUF6cUMsRUFBQUMsUUFBQTtBQUFBO0FBRUEsYUFBTyxlQUFlQSxJQUFTLGNBQWMsRUFDM0MsT0FBTyxLQUNULENBQUM7QUFDREEsU0FBUSxVQUFVO0FBQ2xCLFVBQUlzbkMsSUFBVyxHQUFBLEdBQ1htRCxLQUFXLEdBQUEsR0FDWEMsS0FBVyxHQUFBLEdBQ1hDLEtBQVcsR0FBQSxHQUNYQyxLQUFVLEdBQUEsR0FDUkMsS0FBa0IsRUFFdEIsUUFBUSxFQUNOLFVBQVUsV0FDVixXQUFXSixHQUFTLGdCQUN0QixHQUNBLFdBQVcsRUFDVCxVQUFVLFdBQ1YsV0FBV0EsR0FBUyxnQkFDdEIsR0FDQSxhQUFhLEVBQ1gsVUFBVSxXQUNWLFdBQVdBLEdBQVMsZ0JBQ3RCLEdBQ0EsY0FBYyxFQUNaLFVBQVUsV0FDVixXQUFXQSxHQUFTLGdCQUN0QixHQUNBLFlBQVksRUFDVixVQUFVLFdBQ1YsV0FBV0EsR0FBUyxnQkFDdEIsR0FDQSxhQUFhLEVBQ1gsVUFBVSxVQUNaLEdBQ0EsZ0JBQWdCLEVBQ2QsVUFBVSxVQUNaLEdBQ0Esa0JBQWtCLEVBQ2hCLFVBQVUsVUFDWixHQUNBLG1CQUFtQixFQUNqQixVQUFVLFVBQ1osR0FDQSxpQkFBaUIsRUFDZixVQUFVLFVBQ1osR0FDQSxTQUFTLEVBQ1AsVUFBVSxXQUNWLFdBQVdBLEdBQVMsZ0JBQ3RCLEdBQ0EsY0FBYyxFQUNaLFVBQVUsVUFDWixHQUNBLGNBQWMsRUFDWixVQUFVLHNCQUNWLE9BQU9BLEdBQVMsYUFDbEIsR0FFQSxPQUFPLEVBQ0wsVUFBVSxXQUNWLFdBQVdFLEdBQVMsaUJBQ3RCLEdBQ0EsU0FBUyxFQUNQLFVBQVUsV0FDVixhQUFhLG1CQUNiLFdBQVdBLEdBQVMsaUJBQ3RCLEdBQ0EsaUJBQWlCLEVBQ2YsVUFBVSxXQUNWLFdBQVdBLEdBQVMsaUJBQ3RCLEdBRUEsR0FBRyxFQUNELE9BQU9yRCxFQUFTLFFBQ2xCLEdBQ0EsSUFBSSxFQUNGLE9BQU9BLEVBQVMsUUFDbEIsR0FDQSxJQUFJLEVBQ0YsT0FBT0EsRUFBUyxRQUNsQixHQUNBLElBQUksRUFDRixPQUFPQSxFQUFTLFFBQ2xCLEdBQ0EsSUFBSSxFQUNGLE9BQU9BLEVBQVMsUUFDbEIsR0FDQSxJQUFJLEVBQ0YsT0FBT0EsRUFBUyxRQUNsQixHQUNBLElBQUksRUFDRixPQUFPQSxFQUFTLFFBQ2xCLEdBQ0EsU0FBUyxFQUNQLE9BQU9BLEVBQVMsUUFDbEIsR0FDQSxZQUFZLEVBQ1YsT0FBT0EsRUFBUyxRQUNsQixHQUNBLGNBQWMsRUFDWixPQUFPQSxFQUFTLFFBQ2xCLEdBQ0EsZUFBZSxFQUNiLE9BQU9BLEVBQVMsUUFDbEIsR0FDQSxhQUFhLEVBQ1gsT0FBT0EsRUFBUyxRQUNsQixHQUNBLFVBQVUsRUFDUixPQUFPQSxFQUFTLFFBQ2xCLEdBQ0EsVUFBVSxFQUNSLE9BQU9BLEVBQVMsUUFDbEIsR0FDQSxlQUFlLEVBQ2IsT0FBT0EsRUFBUyxRQUNsQixHQUNBLG9CQUFvQixFQUNsQixPQUFPQSxFQUFTLFFBQ2xCLEdBQ0Esa0JBQWtCLEVBQ2hCLE9BQU9BLEVBQVMsUUFDbEIsR0FDQSxjQUFjLEVBQ1osT0FBT0EsRUFBUyxRQUNsQixHQUNBLG1CQUFtQixFQUNqQixPQUFPQSxFQUFTLFFBQ2xCLEdBQ0EsaUJBQWlCLEVBQ2YsT0FBT0EsRUFBUyxRQUNsQixHQUNBLEdBQUcsRUFDRCxPQUFPQSxFQUFTLE9BQ2xCLEdBQ0EsSUFBSSxFQUNGLE9BQU9BLEVBQVMsT0FDbEIsR0FDQSxJQUFJLEVBQ0YsT0FBT0EsRUFBUyxPQUNsQixHQUNBLElBQUksRUFDRixPQUFPQSxFQUFTLE9BQ2xCLEdBQ0EsSUFBSSxFQUNGLE9BQU9BLEVBQVMsT0FDbEIsR0FDQSxJQUFJLEVBQ0YsT0FBT0EsRUFBUyxPQUNsQixHQUNBLElBQUksRUFDRixPQUFPQSxFQUFTLE9BQ2xCLEdBQ0EsUUFBUSxFQUNOLE9BQU9BLEVBQVMsT0FDbEIsR0FDQSxXQUFXLEVBQ1QsT0FBT0EsRUFBUyxPQUNsQixHQUNBLGFBQWEsRUFDWCxPQUFPQSxFQUFTLE9BQ2xCLEdBQ0EsY0FBYyxFQUNaLE9BQU9BLEVBQVMsT0FDbEIsR0FDQSxZQUFZLEVBQ1YsT0FBT0EsRUFBUyxPQUNsQixHQUNBLFNBQVMsRUFDUCxPQUFPQSxFQUFTLE9BQ2xCLEdBQ0EsU0FBUyxFQUNQLE9BQU9BLEVBQVMsT0FDbEIsR0FDQSxjQUFjLEVBQ1osT0FBT0EsRUFBUyxPQUNsQixHQUNBLG1CQUFtQixFQUNqQixPQUFPQSxFQUFTLE9BQ2xCLEdBQ0EsaUJBQWlCLEVBQ2YsT0FBT0EsRUFBUyxPQUNsQixHQUNBLGFBQWEsRUFDWCxPQUFPQSxFQUFTLE9BQ2xCLEdBQ0Esa0JBQWtCLEVBQ2hCLE9BQU9BLEVBQVMsT0FDbEIsR0FDQSxnQkFBZ0IsRUFDZCxPQUFPQSxFQUFTLE9BQ2xCLEdBRUEsY0FBYyxFQUNaLGFBQWEsT0FDYixXQUFXOWMsUUFBVSxFQUNuQixnQkFBZ0IsRUFDZCxTQUFTQSxFQUNYLEVBQ0YsR0FDRixHQUNBLFNBQVMsQ0FBQyxHQUNWLFVBQVUsQ0FBQyxHQUNYLGNBQWMsQ0FBQyxHQUNmLFlBQVksQ0FBQyxHQUNiLFlBQVksQ0FBQyxHQUViLFdBQVcsQ0FBQyxHQUNaLGVBQWUsQ0FBQyxHQUNoQixVQUFVLENBQUMsR0FDWCxnQkFBZ0IsQ0FBQyxHQUNqQixZQUFZLENBQUMsR0FDYixjQUFjLENBQUMsR0FDZixPQUFPLENBQUMsR0FDUixNQUFNLENBQUMsR0FDUCxVQUFVLENBQUMsR0FDWCxZQUFZLENBQUMsR0FDYixXQUFXLENBQUMsR0FDWixjQUFjLENBQUMsR0FDZixhQUFhLENBQUMsR0FFZCxLQUFLLEVBQ0gsT0FBT2tnQixHQUFTLElBQ2xCLEdBQ0EsUUFBUSxFQUNOLE9BQU9BLEdBQVMsT0FDbEIsR0FDQSxXQUFXLEVBQ1QsT0FBT0EsR0FBUyxVQUNsQixHQUNBLFlBQVksQ0FBQyxHQUNiLFNBQVMsQ0FBQyxHQUNWLGNBQWMsQ0FBQyxHQUNmLGlCQUFpQixDQUFDLEdBQ2xCLGNBQWMsQ0FBQyxHQUNmLHFCQUFxQixDQUFDLEdBQ3RCLGtCQUFrQixDQUFDLEdBQ25CLG1CQUFtQixDQUFDLEdBQ3BCLFVBQVUsQ0FBQyxHQUVYLFVBQVUsQ0FBQyxHQUNYLFFBQVEsRUFDTixVQUFVLFNBQ1osR0FDQSxLQUFLLENBQUMsR0FDTixPQUFPLENBQUMsR0FDUixRQUFRLENBQUMsR0FDVCxNQUFNLENBQUMsR0FFUCxXQUFXLEVBQ1QsVUFBVSxVQUNaLEdBRUEsT0FBTyxFQUNMLFdBQVdFLEdBQVEsZ0JBQ3JCLEdBQ0EsVUFBVSxFQUNSLE9BQU9BLEdBQVEsU0FDakIsR0FDQSxVQUFVLEVBQ1IsV0FBV0EsR0FBUSxnQkFDckIsR0FDQSxRQUFRLEVBQ04sV0FBV0EsR0FBUSxnQkFDckIsR0FDQSxXQUFXLEVBQ1QsV0FBV0EsR0FBUSxnQkFDckIsR0FDQSxXQUFXLEVBQ1QsV0FBV0EsR0FBUSxnQkFDckIsR0FDQSxXQUFXLENBQUMsR0FFWixZQUFZLEVBQ1YsVUFBVSxhQUNaLEdBQ0EsVUFBVSxFQUNSLFVBQVUsYUFDWixHQUNBLFdBQVcsRUFDVCxVQUFVLGFBQ1osR0FDQSxZQUFZLEVBQ1YsVUFBVSxhQUNaLEdBQ0EsZUFBZSxDQUFDLEdBQ2hCLGVBQWUsQ0FBQyxHQUNoQixZQUFZLENBQUMsR0FDYixXQUFXLENBQUMsR0FDWixZQUFZLEVBQ1YsYUFBYSxPQUNiLFVBQVUsYUFDWixFQUNGLEdBQ0kxSSxLQUFXbGlDLEdBQVEsVUFBVTZxQztJQUFBQSxDQUFBQTtBQ3hTakMsUUFBQUMsS0FBQS9xQyxFQUFBQyxRQUFBO0FBQUE7QUFFQSxVQUFJeTdCLEtBQXlCLEdBQUE7QUFDN0IsYUFBTyxlQUFlejdCLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNEQSxTQUFRLFVBQVU7QUFDbEJBLFNBQVEsaUNBQWlDK3FDO0FBQ3pDLFVBQUkvSixLQUFjdkYsR0FBdUIsR0FBQSxDQUFnQyxHQUNyRXNILEtBQVN0SCxHQUF1QixHQUFBLENBQW1CLEdBQ25Eb0ssS0FBUyxHQUFBLEdBQ1RqQixLQUFlLEdBQUEsR0FDZm9HLEtBQW1CdlAsR0FBdUIsR0FBQSxDQUE0QjtBQUMxRSxlQUFTd1AsTUFBdUJDLEdBQVM7QUFDdkMsWUFBTUMsSUFBVUQsRUFBUSxPQUFPLENBQUNoaUIsR0FBTWtpQixNQUFXbGlCLEVBQUssT0FBTyxPQUFPLEtBQUtraUIsQ0FBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQy9FQyxJQUFRLElBQUksSUFBSUYsQ0FBTztBQUM3QixlQUFPRCxFQUFRLE1BQU1FLE9BQVVDLEVBQU0sU0FBUyxPQUFPLEtBQUtELENBQU0sRUFBRSxNQUFNO01BQzFFO0FBQ0EsZUFBU0UsR0FBU0MsR0FBUzVaLEdBQUs7QUFDOUIsZUFBTyxPQUFPNFosS0FBWSxhQUFhQSxFQUFRNVosQ0FBRyxJQUFJNFo7TUFDeEQ7QUFHQSxlQUFTUixLQUFpQztBQUN4QyxpQkFBU1MsRUFBY3RQLEdBQU01N0IsR0FBSzQzQixHQUFPdVQsR0FBUTtBQUMvQyxjQUFNM2QsSUFBUSxFQUNaLENBQUNvTyxDQUFJLEdBQUc1N0IsR0FDUixPQUFBNDNCLEVBQ0YsR0FDTW5OLElBQVUwZ0IsRUFBT3ZQLENBQUk7QUFDM0IsY0FBSSxDQUFDblI7QUFDSCxtQkFBTyxFQUNMLENBQUNtUixDQUFJLEdBQUc1N0IsRUFDVjtBQUVGLGNBQU0sRUFDSixhQUFBNmtDLElBQWNqSixHQUNkLFVBQUFrSixHQUNBLFdBQUFKLEdBQ0EsT0FBQWYsRUFDRixJQUFJbFo7QUFDSixjQUFJenFCLEtBQU87QUFDVCxtQkFBTztBQUlULGNBQUk4a0MsTUFBYSxnQkFBZ0I5a0MsTUFBUTtBQUN2QyxtQkFBTyxFQUNMLENBQUM0N0IsQ0FBSSxHQUFHNTdCLEVBQ1Y7QUFFRixjQUFNeWtDLEtBQUFBLEdBQW1CYyxHQUFPLFNBQVMzTixHQUFPa04sQ0FBUSxLQUFLLENBQUM7QUFDOUQsY0FBSW5CO0FBQ0YsbUJBQU9BLEVBQU1uVyxDQUFLO0FBRXBCLGNBQU1xVixJQUFxQjhCLE9BQWtCO0FBQzNDLGdCQUFJemEsS0FBQUEsR0FBWXFiLEdBQU8sZUFBZWQsR0FBY0MsR0FBV0MsQ0FBYztBQUs3RSxtQkFKSUEsTUFBbUJ6YSxLQUFTLE9BQU95YSxLQUFtQixhQUV4RHphLEtBQUFBLEdBQVlxYixHQUFPLGVBQWVkLEdBQWNDLEdBQVcsR0FBRzlJLENBQUksR0FBRytJLE1BQW1CLFlBQVksTUFBQSxHQUFTakUsR0FBWSxTQUFTaUUsQ0FBYyxDQUFDLElBQUlBLENBQWMsSUFFaktFLE1BQWdCLFFBQ1gzYSxJQUVGLEVBQ0wsQ0FBQzJhLENBQVcsR0FBRzNhLEVBQ2pCO1VBQ0Y7QUFDQSxrQkFBQSxHQUFXb2EsR0FBYSxtQkFBbUI5VyxHQUFPeHRCLEdBQUs2aUMsQ0FBa0I7UUFDM0U7QUFDQSxpQkFBU3VJLEVBQWdCNWQsR0FBTztBQUM5QixjQUFJNmQ7QUFDSixjQUFNLEVBQ0osSUFBQUMsR0FDQSxPQUFBMVQsSUFBUSxDQUFDLEVBQ1gsSUFBSXBLLEtBQVMsQ0FBQztBQUNkLGNBQUksQ0FBQzhkO0FBQ0gsbUJBQU87QUFFVCxjQUFNSCxLQUFVRSxJQUF3QnpULEVBQU0sc0JBQXNCLE9BQU95VCxJQUF3QlgsR0FBaUI7QUFPcEgsbUJBQVNhLEVBQVNDLEdBQVM7QUFDekIsZ0JBQUlDLElBQVdEO0FBQ2YsZ0JBQUksT0FBT0EsS0FBWTtBQUNyQkMsa0JBQVdELEVBQVE1VCxDQUFLO3FCQUNmLE9BQU80VCxLQUFZO0FBRTVCLHFCQUFPQTtBQUVULGdCQUFJLENBQUNDO0FBQ0gscUJBQU87QUFFVCxnQkFBTTVILEtBQUFBLEdBQXVCUyxHQUFhLDZCQUE2QjFNLEVBQU0sV0FBVyxHQUNsRm9NLElBQWtCLE9BQU8sS0FBS0gsQ0FBZ0IsR0FDaERsSyxJQUFNa0s7QUFDVixtQkFBQSxPQUFPLEtBQUs0SCxDQUFRLEVBQUUsUUFBUUMsT0FBWTtBQUN4QyxrQkFBTXhoQixJQUFROGdCLEdBQVNTLEVBQVNDLENBQVEsR0FBRzlULENBQUs7QUFDaEQsa0JBQUkxTixLQUFVO0FBQ1osb0JBQUksT0FBT0EsS0FBVTtBQUNuQixzQkFBSWloQixFQUFPTyxDQUFRO0FBQ2pCL1IseUJBQUFBLEdBQVU4SSxHQUFPLFNBQVM5SSxHQUFLdVIsRUFBY1EsR0FBVXhoQixHQUFPME4sR0FBT3VULENBQU0sQ0FBQzt1QkFDdkU7QUFDTCx3QkFBTVEsS0FBQUEsR0FBd0JySCxHQUFhLG1CQUFtQixFQUM1RCxPQUFBMU0sRUFDRixHQUFHMU4sR0FBT3pvQixRQUFNLEVBQ2QsQ0FBQ2lxQyxDQUFRLEdBQUdqcUMsRUFDZCxFQUFFO0FBQ0VrcEMsdUJBQW9CZ0IsR0FBbUJ6aEIsQ0FBSyxJQUM5Q3lQLEVBQUkrUixDQUFRLElBQUlOLEVBQWdCLEVBQzlCLElBQUlsaEIsR0FDSixPQUFBME4sRUFDRixDQUFDLElBRUQrQixLQUFBQSxHQUFVOEksR0FBTyxTQUFTOUksR0FBS2dTLENBQWlCO2tCQUVwRDs7QUFFQWhTLHVCQUFBQSxHQUFVOEksR0FBTyxTQUFTOUksR0FBS3VSLEVBQWNRLEdBQVV4aEIsR0FBTzBOLEdBQU91VCxDQUFNLENBQUM7WUFHbEYsQ0FBQyxJQUFBLEdBQ1U3RyxHQUFhLHlCQUF5Qk4sR0FBaUJySyxDQUFHO1VBQ3ZFO0FBQ0EsaUJBQU8sTUFBTSxRQUFRMlIsQ0FBRSxJQUFJQSxFQUFHLElBQUlDLENBQVEsSUFBSUEsRUFBU0QsQ0FBRTtRQUMzRDtBQUNBLGVBQU9GO01BQ1Q7QUFDQSxVQUFNQSxLQUFrQlgsR0FBK0I7QUFDdkRXLFNBQWdCLGNBQWMsQ0FBQyxJQUFJO0FBQ25DLFVBQUl4SixLQUFXbGlDLEdBQVEsVUFBVTByQztJQUFBQSxDQUFBQTtBQ3RJakMsUUFBQVEsS0FBQW5zQyxFQUFBLENBQUFDLElBQUFDLE9BQUE7QUFBQSxlQUFTa3NDLEdBQThCbnJDLEdBQVFvckMsR0FBVTtBQUN2RCxZQUFJcHJDLEtBQVU7QUFBTSxpQkFBTyxDQUFDO0FBQzVCLFlBQUlELElBQVMsQ0FBQyxHQUNWc3JDLElBQWEsT0FBTyxLQUFLcnJDLENBQU0sR0FDL0JLLEdBQUs7QUFDVCxhQUFLLElBQUksR0FBRyxJQUFJZ3JDLEVBQVcsUUFBUTtBQUNqQ2hyQyxjQUFNZ3JDLEVBQVcsQ0FBQyxHQUNkLEVBQUFELEVBQVMsUUFBUS9xQyxDQUFHLEtBQUssT0FDN0JOLEVBQU9NLENBQUcsSUFBSUwsRUFBT0ssQ0FBRztBQUUxQixlQUFPTjtNQUNUO0FBQ0FkLFNBQU8sVUFBVWtzQyxJQUErQmxzQyxHQUFPLFFBQVEsYUFBYSxNQUFNQSxHQUFPLFFBQVEsVUFBYUEsR0FBTztJQUFBLENBQUE7QUNackgsUUFBQXFzQyxLQUFBdnNDLEVBQUFDLFFBQUE7QUFBQTtBQUVBLFVBQUl5N0IsS0FBeUIsR0FBQTtBQUM3QixhQUFPLGVBQWV6N0IsSUFBUyxjQUFjLEVBQzNDLE9BQU8sS0FDVCxDQUFDO0FBQ0RBLFNBQVEsVUFBVXVzQztBQUNsQixVQUFJaE0sS0FBWTlFLEdBQXVCLEdBQUEsQ0FBeUMsR0FDNUUrUSxLQUFpQy9RLEdBQXVCLEdBQUEsQ0FBOEQsR0FDdEhrRixLQUFhLEdBQUEsR0FDYnFLLEtBQW1CdlAsR0FBdUIsR0FBQSxDQUE0QixHQUNwRWdSLEtBQVksQ0FBQyxJQUFJLEdBQ2pCQyxLQUFhNWUsT0FBUztBQUMxQixZQUFJNmUsR0FBdUI3QztBQUMzQixZQUFNbFUsSUFBUyxFQUNiLGFBQWEsQ0FBQyxHQUNkLFlBQVksQ0FBQyxFQUNmLEdBQ002VixLQUFVa0IsSUFBd0I3ZSxLQUFTLFNBQVNnYyxJQUFlaGMsRUFBTSxVQUFVLE9BQU8sU0FBU2djLEVBQWEsc0JBQXNCLE9BQU82QyxJQUF3QjNCLEdBQWlCO0FBQzVMLGVBQUEsT0FBTyxLQUFLbGQsQ0FBSyxFQUFFLFFBQVFvTyxPQUFRO0FBQzdCdVAsWUFBT3ZQLENBQUksSUFDYnRHLEVBQU8sWUFBWXNHLENBQUksSUFBSXBPLEVBQU1vTyxDQUFJLElBRXJDdEcsRUFBTyxXQUFXc0csQ0FBSSxJQUFJcE8sRUFBTW9PLENBQUk7UUFFeEMsQ0FBQyxHQUNNdEc7TUFDVDtBQUNBLGVBQVMyVyxHQUFhemUsR0FBTztBQUMzQixZQUFNLEVBQ0YsSUFBSThlLEVBQ04sSUFBSTllLEdBQ0orZSxLQUFBQSxHQUFZTCxHQUErQixTQUFTMWUsR0FBTzJlLEVBQVMsR0FDaEUsRUFDSixhQUFBSyxHQUNBLFlBQUFDLEVBQ0YsSUFBSUwsR0FBV0csQ0FBSyxHQUNoQkc7QUFDSixlQUFJLE1BQU0sUUFBUUosQ0FBSSxJQUNwQkksSUFBVSxDQUFDRixHQUFhLEdBQUdGLENBQUksSUFDdEIsT0FBT0EsS0FBUyxhQUN6QkksSUFBVSxJQUFJaGpCLE1BQVM7QUFDckIsY0FBTTRMLElBQVNnWCxFQUFLLEdBQUc1aUIsQ0FBSTtBQUMzQixrQkFBQSxHQUFTMlcsR0FBVyxlQUFlL0ssQ0FBTSxLQUFBLEdBRzlCMkssR0FBVSxTQUFTLENBQUMsR0FBR3VNLEdBQWFsWCxDQUFNLElBRjVDa1g7UUFHWCxJQUVBRSxLQUFBQSxHQUFjek0sR0FBVSxTQUFTLENBQUMsR0FBR3VNLEdBQWFGLENBQUksSUFBQSxHQUU3Q3JNLEdBQVUsU0FBUyxDQUFDLEdBQUd3TSxHQUFZLEVBQzVDLElBQUlDLEVBQ04sQ0FBQztNQUNIO0lBQUEsQ0FBQTtBQ3REQSxRQUFBbEMsS0FBQS9xQyxFQUFBQyxRQUFBO0FBQUE7QUFFQSxVQUFJeTdCLEtBQXlCLEdBQUE7QUFDN0IsYUFBTyxlQUFlejdCLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNELGFBQU8sZUFBZUEsSUFBUyxXQUFXLEVBQ3hDLFlBQVksTUFDWixLQUFLLFdBQVk7QUFDZixlQUFPaXRDLEdBQWlCO01BQzFCLEVBQ0YsQ0FBQztBQUNELGFBQU8sZUFBZWp0QyxJQUFTLGdCQUFnQixFQUM3QyxZQUFZLE1BQ1osS0FBSyxXQUFZO0FBQ2YsZUFBT2t0QyxHQUFjO01BQ3ZCLEVBQ0YsQ0FBQztBQUNELGFBQU8sZUFBZWx0QyxJQUFTLGtDQUFrQyxFQUMvRCxZQUFZLE1BQ1osS0FBSyxXQUFZO0FBQ2YsZUFBT2l0QyxHQUFpQjtNQUMxQixFQUNGLENBQUM7QUFDRCxhQUFPLGVBQWVqdEMsSUFBUyw0QkFBNEIsRUFDekQsWUFBWSxNQUNaLEtBQUssV0FBWTtBQUNmLGVBQU9nckMsR0FBaUI7TUFDMUIsRUFDRixDQUFDO0FBQ0QsVUFBSWlDLEtBQW1Cbk8sR0FBd0IsR0FBQSxDQUE0QixHQUN2RW9PLEtBQWdCelIsR0FBdUIsR0FBQSxDQUF5QixHQUNoRXVQLEtBQW1CdlAsR0FBdUIsR0FBQSxDQUE0QjtBQUMxRSxlQUFTMEQsR0FBeUIsR0FBRztBQUFFLFlBQWtCLE9BQU8sV0FBckI7QUFBOEIsaUJBQU87QUFBTSxZQUFJejlCLElBQUksb0JBQUksV0FBV0MsSUFBSSxvQkFBSTtBQUFXLGdCQUFRdzlCLEtBQTJCLFNBQVVwOEIsR0FBRztBQUFFLGlCQUFPQSxJQUFJcEIsSUFBSUQ7UUFBRyxHQUFHLENBQUM7TUFBRztBQUMzTSxlQUFTbzlCLEdBQXdCLEdBQUdwOUIsR0FBRztBQUFFLFlBQUksQ0FBQ0EsS0FBSyxLQUFLLEVBQUU7QUFBWSxpQkFBTztBQUFHLFlBQWEsTUFBVCxRQUEwQixPQUFPLEtBQW5CLFlBQXNDLE9BQU8sS0FBckI7QUFBd0IsaUJBQU8sRUFBRSxTQUFTLEVBQUU7QUFBRyxZQUFJQyxJQUFJdzlCLEdBQXlCejlCLENBQUM7QUFBRyxZQUFJQyxLQUFLQSxFQUFFLElBQUksQ0FBQztBQUFHLGlCQUFPQSxFQUFFLElBQUksQ0FBQztBQUFHLFlBQUksSUFBSSxFQUFFLFdBQVcsS0FBSyxHQUFHTSxJQUFJLE9BQU8sa0JBQWtCLE9BQU87QUFBMEIsaUJBQVNMLEtBQUs7QUFBRyxjQUFrQkEsTUFBZCxhQUFtQixPQUFPLFVBQVUsZUFBZSxLQUFLLEdBQUdBLENBQUMsR0FBRztBQUFFLGdCQUFJbEIsSUFBSXVCLElBQUksT0FBTyx5QkFBeUIsR0FBR0wsQ0FBQyxJQUFJO0FBQU1sQixrQkFBTUEsRUFBRSxPQUFPQSxFQUFFLE9BQU8sT0FBTyxlQUFlLEdBQUdrQixHQUFHbEIsQ0FBQyxJQUFJLEVBQUVrQixDQUFDLElBQUksRUFBRUEsQ0FBQztVQUFHO0FBQUUsZUFBTyxFQUFFLFVBQVUsR0FBR0QsS0FBS0EsRUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFHO01BQUc7SUFBQSxDQUFBO0FDbENobEIsUUFBQXdyQyxLQUFBcHRDLEVBQUFDLFFBQUE7QUFBQTtBQUVBLFVBQUl5N0IsS0FBeUIsR0FBQTtBQUM3QixhQUFPLGVBQWV6N0IsSUFBUyxjQUFjLEVBQzNDLE9BQU8sS0FDVCxDQUFDO0FBQ0RBLFNBQVEsaUJBQWlCO0FBQ3pCQSxTQUFRLFVBQVVvdEM7QUFDbEIsVUFBSVosS0FBaUMvUSxHQUF1QixHQUFBLENBQThELEdBQ3RIOEUsS0FBWTlFLEdBQXVCLEdBQUEsQ0FBeUMsR0FDMUVnUixLQUFZLENBQUMsVUFBVSxRQUFRLE1BQU0sR0FHckN6SSxLQUFpQmhrQyxHQUFRLGlCQUFpQixDQUFDLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSSxHQUN2RXF0QyxLQUF3QnJLLE9BQVU7QUFDdEMsWUFBTXNLLElBQXFCLE9BQU8sS0FBS3RLLENBQU0sRUFBRSxJQUFJM2hDLFFBQVEsRUFDekQsS0FBQUEsR0FDQSxLQUFLMmhDLEVBQU8zaEMsQ0FBRyxFQUNqQixFQUFFLEtBQUssQ0FBQztBQUVSLGVBQUFpc0MsRUFBbUIsS0FBSyxDQUFDQyxHQUFhQyxNQUFnQkQsRUFBWSxNQUFNQyxFQUFZLEdBQUcsR0FDaEZGLEVBQW1CLE9BQU8sQ0FBQ2pMLEdBQUtyTSxPQUFBQSxHQUMxQnVLLEdBQVUsU0FBUyxDQUFDLEdBQUc4QixHQUFLLEVBQ3JDLENBQUNyTSxFQUFJLEdBQUcsR0FBR0EsRUFBSSxJQUNqQixDQUFDLEdBQ0EsQ0FBQyxDQUFDO01BQ1A7QUFHQSxlQUFTb1gsR0FBa0I1SixHQUFhO0FBQ3RDLFlBQU0sRUFHRixRQUFBUixJQUFTLEVBQ1AsSUFBSSxHQUVKLElBQUksS0FFSixJQUFJLEtBRUosSUFBSSxNQUVKLElBQUksS0FDTixHQUNBLE1BQUF5SyxJQUFPLE1BQ1AsTUFBQUMsSUFBTyxFQUNULElBQUlsSyxHQUNKcUosS0FBQUEsR0FBWUwsR0FBK0IsU0FBU2hKLEdBQWFpSixFQUFTLEdBQ3RFa0IsSUFBZU4sR0FBc0JySyxDQUFNLEdBQzNDOVosSUFBTyxPQUFPLEtBQUt5a0IsQ0FBWTtBQUNyQyxpQkFBU0MsRUFBR3ZzQyxHQUFLO0FBRWYsaUJBQU8scUJBRE8sT0FBTzJoQyxFQUFPM2hDLENBQUcsS0FBTSxXQUFXMmhDLEVBQU8zaEMsQ0FBRyxJQUFJQSxDQUM3QixHQUFHb3NDLENBQUk7UUFDMUM7QUFDQSxpQkFBU0ksRUFBS3hzQyxHQUFLO0FBRWpCLGlCQUFPLHNCQURPLE9BQU8yaEMsRUFBTzNoQyxDQUFHLEtBQU0sV0FBVzJoQyxFQUFPM2hDLENBQUcsSUFBSUEsS0FDMUJxc0MsSUFBTyxHQUFHLEdBQUdELENBQUk7UUFDdkQ7QUFDQSxpQkFBU0ssRUFBUUMsR0FBTy9nQixHQUFLO0FBQzNCLGNBQU1naEIsSUFBVzlrQixFQUFLLFFBQVE4RCxDQUFHO0FBQ2pDLGlCQUFPLHFCQUFxQixPQUFPZ1csRUFBTytLLENBQUssS0FBTSxXQUFXL0ssRUFBTytLLENBQUssSUFBSUEsQ0FBSyxHQUFHTixDQUFJLHFCQUEwQk8sTUFBYSxNQUFNLE9BQU9oTCxFQUFPOVosRUFBSzhrQixDQUFRLENBQUMsS0FBTSxXQUFXaEwsRUFBTzlaLEVBQUs4a0IsQ0FBUSxDQUFDLElBQUloaEIsS0FBTzBnQixJQUFPLEdBQUcsR0FBR0QsQ0FBSTtRQUN6TztBQUNBLGlCQUFTUSxFQUFLNXNDLEdBQUs7QUFDakIsaUJBQUk2bkIsRUFBSyxRQUFRN25CLENBQUcsSUFBSSxJQUFJNm5CLEVBQUssU0FDeEI0a0IsRUFBUXpzQyxHQUFLNm5CLEVBQUtBLEVBQUssUUFBUTduQixDQUFHLElBQUksQ0FBQyxDQUFDLElBRTFDdXNDLEVBQUd2c0MsQ0FBRztRQUNmO0FBQ0EsaUJBQVM2c0MsRUFBSTdzQyxHQUFLO0FBRWhCLGNBQU04c0MsSUFBV2psQixFQUFLLFFBQVE3bkIsQ0FBRztBQUNqQyxpQkFBSThzQyxNQUFhLElBQ1JQLEVBQUcxa0IsRUFBSyxDQUFDLENBQUMsSUFFZmlsQixNQUFhamxCLEVBQUssU0FBUyxJQUN0QjJrQixFQUFLM2tCLEVBQUtpbEIsQ0FBUSxDQUFDLElBRXJCTCxFQUFRenNDLEdBQUs2bkIsRUFBS0EsRUFBSyxRQUFRN25CLENBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLFVBQVUsb0JBQW9CO1FBQ3pGO0FBQ0EsZ0JBQUEsR0FBV2svQixHQUFVLFNBQVMsRUFDNUIsTUFBQXJYLEdBQ0EsUUFBUXlrQixHQUNSLElBQUFDLEdBQ0EsTUFBQUMsR0FDQSxTQUFBQyxHQUNBLE1BQUFHLEdBQ0EsS0FBQUMsR0FDQSxNQUFBVCxFQUNGLEdBQUdaLENBQUs7TUFDVjtJQUFBLENBQUE7QUN6RkEsUUFBQXVCLEtBQUFydUMsRUFBQUMsUUFBQTtBQUFBO0FBRUEsYUFBTyxlQUFlQSxJQUFTLGNBQWMsRUFDM0MsT0FBTyxLQUNULENBQUM7QUFDREEsU0FBUSxVQUFVO0FBQ2xCLFVBQU1xdUMsS0FBUSxFQUNaLGNBQWMsRUFDaEIsR0FDSW5NLEtBQVdsaUMsR0FBUSxVQUFVcXVDO0lBQUFBLENBQUFBO0FDVGpDLFFBQUFDLEtBQUF2dUMsRUFBQUMsUUFBQTtBQUFBO0FBRUEsYUFBTyxlQUFlQSxJQUFTLGNBQWMsRUFDM0MsT0FBTyxLQUNULENBQUM7QUFDREEsU0FBUSxVQUFVdXVDO0FBQ2xCLFVBQUlqSCxLQUFXLEdBQUE7QUFJZixlQUFTaUgsR0FBY0MsSUFBZSxHQUFHO0FBRXZDLFlBQUlBLEVBQWE7QUFDZixpQkFBT0E7QUFNVCxZQUFNeEosS0FBQUEsR0FBZ0JzQyxHQUFTLG9CQUFvQixFQUNqRCxTQUFTa0gsRUFDWCxDQUFDLEdBQ0t6SCxJQUFVLElBQUkwSCxPQU1MQSxFQUFVLFdBQVcsSUFBSSxDQUFDLENBQUMsSUFBSUEsR0FDaEMsSUFBSUMsT0FBWTtBQUMxQixjQUFNNWQsSUFBU2tVLEVBQVUwSixDQUFRO0FBQ2pDLGlCQUFPLE9BQU81ZCxLQUFXLFdBQVcsR0FBR0EsQ0FBTSxPQUFPQTtRQUN0RCxDQUFDLEVBQUUsS0FBSyxHQUFHO0FBRWIsZUFBQWlXLEVBQVEsTUFBTSxNQUNQQTtNQUNUO0lBQUEsQ0FBQTtBQ3BDQSxRQUFBNEgsS0FBQTV1QyxFQUFBQyxRQUFBO0FBQUE7QUFFQSxhQUFPLGVBQWVBLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNEQSxTQUFRLFVBQVU0dUM7QUEyRGxCLGVBQVNBLEdBQVl2dEMsR0FBS3d5QixHQUFRO0FBRWhDLFlBQU1xRSxJQUFRO0FBQ2QsZUFBSUEsRUFBTSxRQUFRLE9BQU9BLEVBQU0sMEJBQTJCLGFBSWpELEVBQ0wsQ0FGZUEsRUFBTSx1QkFBdUI3MkIsQ0FBRyxFQUFFLFFBQVEsZ0JBQWdCLGFBQWEsQ0FFN0UsR0FBR3d5QixFQUNkLElBRUVxRSxFQUFNLFFBQVEsU0FBUzcyQixJQUNsQnd5QixJQUVGLENBQUM7TUFDVjtJQUFBLENBQUE7QUMvRUEsUUFBQWdiLEtBQUE5dUMsRUFBQUMsUUFBQTtBQUFBO0FBRUEsVUFBSXk3QixLQUF5QixHQUFBO0FBQzdCLGFBQU8sZUFBZXo3QixJQUFTLGNBQWMsRUFDM0MsT0FBTyxLQUNULENBQUM7QUFDREEsU0FBUSxVQUFVO0FBQ2xCLFVBQUl1Z0MsS0FBWTlFLEdBQXVCLEdBQUEsQ0FBeUMsR0FDNUUrUSxLQUFpQy9RLEdBQXVCLEdBQUEsQ0FBOEQsR0FDdEhrRixLQUFhbEYsR0FBdUIsR0FBQSxDQUErQixHQUNuRXFULEtBQXFCclQsR0FBdUIsR0FBQSxDQUE4QixHQUMxRXNULEtBQVN0VCxHQUF1QixHQUFBLENBQWtCLEdBQ2xEdVQsS0FBaUJ2VCxHQUF1QixHQUFBLENBQTBCLEdBQ2xFd1IsS0FBbUJ4UixHQUF1QixHQUFBLENBQTZDLEdBQ3ZGdVAsS0FBbUJ2UCxHQUF1QixHQUFBLENBQTZDLEdBQ3ZGd1QsS0FBZXhULEdBQXVCLEdBQUEsQ0FBd0IsR0FDNURnUixLQUFZLENBQUMsZUFBZSxXQUFXLFdBQVcsT0FBTztBQUMvRCxlQUFTeUMsR0FBWW5rQixJQUFVLENBQUMsTUFBTWYsR0FBTTtBQUMxQyxZQUFNLEVBQ0YsYUFBYTZaLElBQW1CLENBQUMsR0FDakMsU0FBU3NMLElBQWUsQ0FBQyxHQUN6QixTQUFTWCxHQUNULE9BQU9ZLElBQWEsQ0FBQyxFQUN2QixJQUFJcmtCLEdBQ0o4aEIsS0FBQUEsR0FBWUwsR0FBK0IsU0FBU3poQixHQUFTMGhCLEVBQVMsR0FDbEVqSixLQUFBQSxHQUFrQnNMLEdBQW1CLFNBQVNqTCxDQUFnQixHQUM5RGtELEtBQUFBLEdBQWNpSSxHQUFlLFNBQVNSLENBQVksR0FDcERhLEtBQUFBLEdBQWUxTyxHQUFXLFNBQVMsRUFDckMsYUFBQTZDLEdBQ0EsV0FBVyxPQUNYLFlBQVksQ0FBQyxHQUViLFVBQUEsR0FBYWpELEdBQVUsU0FBUyxFQUM5QixNQUFNLFFBQ1IsR0FBRzRPLENBQVksR0FDZixTQUFBcEksR0FDQSxRQUFBLEdBQVd4RyxHQUFVLFNBQVMsQ0FBQyxHQUFHd08sR0FBTyxTQUFTSyxDQUFVLEVBQzlELEdBQUd2QyxDQUFLO0FBQ1IsZUFBQXdDLEVBQVMsY0FBY0osR0FBYSxTQUNwQ0ksSUFBV3JsQixFQUFLLE9BQU8sQ0FBQ3FZLEdBQUtxTSxPQUFBQSxHQUFpQi9OLEdBQVcsU0FBUzBCLEdBQUtxTSxDQUFRLEdBQUdXLENBQVEsR0FDMUZBLEVBQVMscUJBQUEsR0FBd0I5TyxHQUFVLFNBQVMsQ0FBQyxHQUFHeUssR0FBaUIsU0FBa0M2QixHQUFNLGlCQUFpQixHQUNsSXdDLEVBQVMsY0FBYyxTQUFZdmhCLEdBQU87QUFDeEMsa0JBQUEsR0FBV21mLEdBQWlCLFNBQVMsRUFDbkMsSUFBSW5mLEdBQ0osT0FBTyxLQUNULENBQUM7UUFDSCxHQUNPdWhCO01BQ1Q7QUFDQSxVQUFJbk4sS0FBV2xpQyxHQUFRLFVBQVVrdkM7SUFBQUEsQ0FBQUE7QUNqRGpDLFFBQUFMLEtBQUE5dUMsRUFBQUMsUUFBQTtBQUFBO0FBRUEsVUFBSXk3QixLQUF5QixHQUFBO0FBQzdCLGFBQU8sZUFBZXo3QixJQUFTLGNBQWMsRUFDM0MsT0FBTyxLQUNULENBQUM7QUFDRCxhQUFPLGVBQWVBLElBQVMsV0FBVyxFQUN4QyxZQUFZLE1BQ1osS0FBSyxXQUFZO0FBQ2YsZUFBT3N2QyxHQUFhO01BQ3RCLEVBQ0YsQ0FBQztBQUNELGFBQU8sZUFBZXR2QyxJQUFTLDZCQUE2QixFQUMxRCxZQUFZLE1BQ1osS0FBSyxXQUFZO0FBQ2YsZUFBTzh1QyxHQUFtQjtNQUM1QixFQUNGLENBQUM7QUFDRCxhQUFPLGVBQWU5dUMsSUFBUyx3QkFBd0IsRUFDckQsWUFBWSxNQUNaLEtBQUssV0FBWTtBQUNmLGVBQU9pdkMsR0FBYTtNQUN0QixFQUNGLENBQUM7QUFDRCxVQUFJSyxLQUFlN1QsR0FBdUIsR0FBQSxDQUF3QixHQUM5RHFULEtBQXFCclQsR0FBdUIsR0FBQSxDQUE4QixHQUMxRXdULEtBQWV4VCxHQUF1QixHQUFBLENBQXdCO0lBQUEsQ0FBQTtBQzFCbEUsUUFBQThULEtBQUF4dkMsRUFBQUMsUUFBQTtBQUFBO0FBRUEsVUFBSXk3QixLQUF5QixHQUFBO0FBQzdCLGFBQU8sZUFBZXo3QixJQUFTLGNBQWMsRUFDM0MsT0FBTyxLQUNULENBQUM7QUFDREEsU0FBUSxRQUFRd3ZDO0FBQ2hCeHZDLFNBQVEsUUFBUXl2QztBQUNoQnp2QyxTQUFRLGVBQWU7QUFDdkJBLFNBQVEsU0FBUzB2QztBQUNqQjF2QyxTQUFRLGlCQUFpQjJ2QztBQUN6QjN2QyxTQUFRLFlBQVk0dkM7QUFDcEI1dkMsU0FBUSxtQkFBbUI2dkM7QUFDM0I3dkMsU0FBUSxlQUFlOHZDO0FBQ3ZCOXZDLFNBQVEsV0FBVyt2QztBQUNuQi92QyxTQUFRLFdBQVdnd0M7QUFDbkJod0MsU0FBUSxVQUFVaXdDO0FBQ2xCandDLFNBQVEsb0JBQW9Ca3dDO0FBQzVCbHdDLFNBQVEsMkJBQTJCO0FBQ25DQSxTQUFRLHFCQUFxQm13QztBQUM3Qm53QyxTQUFRLHdCQUF3Qm93QztBQUNoQ3B3QyxTQUFRLHNCQUFzQnF3QztBQUM5QnJ3QyxTQUFRLGlCQUFpQnN3QztBQUN6QnR3QyxTQUFRLFdBQVd1d0M7QUFDbkIsVUFBSXhQLEtBQTBCdEYsR0FBdUIsR0FBQSxDQUEyQyxHQUM1RjBHLEtBQVMxRyxHQUF1QixHQUFBLENBQTJCO0FBVS9ELGVBQVMrVSxHQUFhaG1CLEdBQU93WCxJQUFNLEdBQUdDLElBQU0sR0FBRztBQU03QyxnQkFBQSxHQUFXRSxHQUFPLFNBQVMzWCxHQUFPd1gsR0FBS0MsQ0FBRztNQUM1QztBQU9BLGVBQVM4TixHQUFTekcsR0FBTztBQUN2QkEsWUFBUUEsRUFBTSxNQUFNLENBQUM7QUFDckIsWUFBTTMyQixJQUFLLElBQUksT0FBTyxPQUFPMjJCLEVBQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FDMURtSCxJQUFTbkgsRUFBTSxNQUFNMzJCLENBQUU7QUFDM0IsZUFBSTg5QixLQUFVQSxFQUFPLENBQUMsRUFBRSxXQUFXLE1BQ2pDQSxJQUFTQSxFQUFPLElBQUksT0FBSyxJQUFJLENBQUMsSUFFekJBLElBQVMsTUFBTUEsRUFBTyxXQUFXLElBQUksTUFBTSxFQUFFLElBQUlBLEVBQU8sSUFBSSxDQUFDLEdBQUc1akIsTUFDOURBLElBQVEsSUFBSSxTQUFTLEdBQUcsRUFBRSxJQUFJLEtBQUssTUFBTSxTQUFTLEdBQUcsRUFBRSxJQUFJLE1BQU0sR0FBSSxJQUFJLEdBQ2pGLEVBQUUsS0FBSyxJQUFJLENBQUMsTUFBTTtNQUNyQjtBQUNBLGVBQVM2akIsR0FBU0MsR0FBSztBQUNyQixZQUFNQyxJQUFNRCxFQUFJLFNBQVMsRUFBRTtBQUMzQixlQUFPQyxFQUFJLFdBQVcsSUFBSSxJQUFJQSxDQUFHLEtBQUtBO01BQ3hDO0FBU0EsZUFBU2pCLEdBQWVyRyxHQUFPO0FBRTdCLFlBQUlBLEVBQU07QUFDUixpQkFBT0E7QUFFVCxZQUFJQSxFQUFNLE9BQU8sQ0FBQyxNQUFNO0FBQ3RCLGlCQUFPcUcsR0FBZUksR0FBU3pHLENBQUssQ0FBQztBQUV2QyxZQUFNdUgsSUFBU3ZILEVBQU0sUUFBUSxHQUFHLEdBQzFCemIsSUFBT3liLEVBQU0sVUFBVSxHQUFHdUgsQ0FBTTtBQUN0QyxZQUFJLENBQUMsT0FBTyxRQUFRLE9BQU8sUUFBUSxPQUFPLEVBQUUsUUFBUWhqQixDQUFJLE1BQU07QUFDNUQsZ0JBQU0sSUFBSSxPQUFBLEdBQ29Ga1QsR0FBd0IsU0FBUyxHQUFHdUksQ0FBSyxDQUFDO0FBRTFJLFlBQUl0RyxJQUFTc0csRUFBTSxVQUFVdUgsSUFBUyxHQUFHdkgsRUFBTSxTQUFTLENBQUMsR0FDckR3SDtBQUNKLFlBQUlqakIsTUFBUyxTQUFBO0FBTVgsY0FMQW1WLElBQVNBLEVBQU8sTUFBTSxHQUFHLEdBQ3pCOE4sSUFBYTlOLEVBQU8sTUFBTSxHQUN0QkEsRUFBTyxXQUFXLEtBQUtBLEVBQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLFFBQ2pEQSxFQUFPLENBQUMsSUFBSUEsRUFBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBRTNCLENBQUMsUUFBUSxjQUFjLFdBQVcsZ0JBQWdCLFVBQVUsRUFBRSxRQUFROE4sQ0FBVSxNQUFNO0FBQ3hGLGtCQUFNLElBQUksT0FBQSxHQUNvRi9QLEdBQXdCLFNBQVMsSUFBSStQLENBQVUsQ0FBQztRQUFBO0FBR2hKOU4sY0FBU0EsRUFBTyxNQUFNLEdBQUc7QUFFM0IsZUFBQUEsSUFBU0EsRUFBTyxJQUFJeFksT0FBUyxXQUFXQSxDQUFLLENBQUMsR0FDdkMsRUFDTCxNQUFBcUQsR0FDQSxRQUFBbVYsR0FDQSxZQUFBOE4sRUFDRjtNQUNGO0FBUUEsVUFBTUMsS0FBZXpILE9BQVM7QUFDNUIsWUFBTTBILElBQWtCckIsR0FBZXJHLENBQUs7QUFDNUMsZUFBTzBILEVBQWdCLE9BQU8sTUFBTSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMxd0MsR0FBSzRwQixNQUFROG1CLEVBQWdCLEtBQUssUUFBUSxLQUFLLE1BQU0sTUFBTTltQixNQUFRLElBQUksR0FBRzVwQixDQUFHLE1BQU1BLENBQUcsRUFBRSxLQUFLLEdBQUc7TUFDako7QUFDQU4sU0FBUSxlQUFlK3dDO0FBQ3ZCLFVBQU1FLEtBQTJCLENBQUMzSCxHQUFPNEgsTUFBWTtBQUNuRCxZQUFJO0FBQ0YsaUJBQU9ILEdBQWF6SCxDQUFLO1FBQzNCLFFBQWdCO0FBSWQsaUJBQU9BO1FBQ1Q7TUFDRjtBQVNBdHBDLFNBQVEsMkJBQTJCaXhDO0FBQ25DLGVBQVNYLEdBQWVoSCxHQUFPO0FBQzdCLFlBQU0sRUFDSixNQUFBemIsR0FDQSxZQUFBaWpCLEVBQ0YsSUFBSXhILEdBQ0EsRUFDRixRQUFBdEcsRUFDRixJQUFJc0c7QUFDSixlQUFJemIsRUFBSyxRQUFRLEtBQUssTUFBTSxLQUUxQm1WLElBQVNBLEVBQU8sSUFBSSxDQUFDcGlDLEdBQUcsTUFBTSxJQUFJLElBQUksU0FBU0EsR0FBRyxFQUFFLElBQUlBLENBQUMsSUFDaERpdEIsRUFBSyxRQUFRLEtBQUssTUFBTSxPQUNqQ21WLEVBQU8sQ0FBQyxJQUFJLEdBQUdBLEVBQU8sQ0FBQyxDQUFDLEtBQ3hCQSxFQUFPLENBQUMsSUFBSSxHQUFHQSxFQUFPLENBQUMsQ0FBQyxNQUV0Qm5WLEVBQUssUUFBUSxPQUFPLE1BQU0sS0FDNUJtVixJQUFTLEdBQUc4TixDQUFVLElBQUk5TixFQUFPLEtBQUssR0FBRyxDQUFDLEtBRTFDQSxJQUFTLEdBQUdBLEVBQU8sS0FBSyxJQUFJLENBQUMsSUFFeEIsR0FBR25WLENBQUksSUFBSW1WLENBQU07TUFDMUI7QUFPQSxlQUFTdU4sR0FBU2pILEdBQU87QUFFdkIsWUFBSUEsRUFBTSxRQUFRLEdBQUcsTUFBTTtBQUN6QixpQkFBT0E7QUFFVCxZQUFNLEVBQ0osUUFBQXRHLEVBQ0YsSUFBSTJNLEdBQWVyRyxDQUFLO0FBQ3hCLGVBQU8sSUFBSXRHLEVBQU8sSUFBSSxDQUFDcGlDLEdBQUdGLE1BQU1nd0MsR0FBU2h3QyxNQUFNLElBQUksS0FBSyxNQUFNLE1BQU1FLENBQUMsSUFBSUEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7TUFDdkY7QUFPQSxlQUFTb3ZDLEdBQVMxRyxHQUFPO0FBQ3ZCQSxZQUFRcUcsR0FBZXJHLENBQUs7QUFDNUIsWUFBTSxFQUNKLFFBQUF0RyxFQUNGLElBQUlzRyxHQUNFcG1DLElBQUk4L0IsRUFBTyxDQUFDLEdBQ1o1aEMsSUFBSTRoQyxFQUFPLENBQUMsSUFBSSxLQUNoQnpoQyxJQUFJeWhDLEVBQU8sQ0FBQyxJQUFJLEtBQ2hCL2dDLElBQUliLElBQUksS0FBSyxJQUFJRyxHQUFHLElBQUlBLENBQUMsR0FDekI2QixJQUFJLENBQUN4QyxHQUFHcUMsS0FBS3JDLElBQUlzQyxJQUFJLE1BQU0sT0FBTzNCLElBQUlVLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSWdCLElBQUksR0FBRyxJQUFJQSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQ2xGNHFCLElBQU8sT0FDTHNqQixJQUFNLENBQUMsS0FBSyxNQUFNL3RDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsR0FBRyxLQUFLLE1BQU1BLEVBQUUsQ0FBQyxJQUFJLEdBQUcsR0FBRyxLQUFLLE1BQU1BLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUNuRixlQUFJa21DLEVBQU0sU0FBUyxXQUNqQnpiLEtBQVEsS0FDUnNqQixFQUFJLEtBQUtuTyxFQUFPLENBQUMsQ0FBQyxJQUVic04sR0FBZSxFQUNwQixNQUFBemlCLEdBQ0EsUUFBUXNqQixFQUNWLENBQUM7TUFDSDtBQVNBLGVBQVNyQixHQUFheEcsR0FBTztBQUMzQkEsWUFBUXFHLEdBQWVyRyxDQUFLO0FBQzVCLFlBQUk2SCxJQUFNN0gsRUFBTSxTQUFTLFNBQVNBLEVBQU0sU0FBUyxTQUFTcUcsR0FBZUssR0FBUzFHLENBQUssQ0FBQyxFQUFFLFNBQVNBLEVBQU07QUFDekcsZUFBQTZILElBQU1BLEVBQUksSUFBSTd3QyxRQUNSZ3BDLEVBQU0sU0FBUyxZQUNqQmhwQyxLQUFPLE1BRUZBLEtBQU8sVUFBVUEsSUFBTSxVQUFVQSxJQUFNLFNBQVMsVUFBVSxJQUNsRSxHQUdNLFFBQVEsU0FBUzZ3QyxFQUFJLENBQUMsSUFBSSxTQUFTQSxFQUFJLENBQUMsSUFBSSxTQUFTQSxFQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztNQUNoRjtBQVVBLGVBQVN0QixHQUFpQnVCLEdBQVlDLEdBQVk7QUFDaEQsWUFBTUMsSUFBT3hCLEdBQWFzQixDQUFVLEdBQzlCRyxJQUFPekIsR0FBYXVCLENBQVU7QUFDcEMsZ0JBQVEsS0FBSyxJQUFJQyxHQUFNQyxDQUFJLElBQUksU0FBUyxLQUFLLElBQUlELEdBQU1DLENBQUksSUFBSTtNQUNqRTtBQVNBLGVBQVMvQixHQUFNbEcsR0FBTzllLEdBQU87QUFDM0IsZUFBQThlLElBQVFxRyxHQUFlckcsQ0FBSyxHQUM1QjllLElBQVFnbUIsR0FBYWhtQixDQUFLLElBQ3RCOGUsRUFBTSxTQUFTLFNBQVNBLEVBQU0sU0FBUyxXQUN6Q0EsRUFBTSxRQUFRLE1BRVpBLEVBQU0sU0FBUyxVQUNqQkEsRUFBTSxPQUFPLENBQUMsSUFBSSxJQUFJOWUsQ0FBSyxLQUUzQjhlLEVBQU0sT0FBTyxDQUFDLElBQUk5ZSxHQUViOGxCLEdBQWVoSCxDQUFLO01BQzdCO0FBQ0EsZUFBUzRHLEdBQWtCNUcsR0FBTzllLEdBQU8wbUIsR0FBUztBQUNoRCxZQUFJO0FBQ0YsaUJBQU8xQixHQUFNbEcsR0FBTzllLENBQUs7UUFDM0IsUUFBZ0I7QUFJZCxpQkFBTzhlO1FBQ1Q7TUFDRjtBQVFBLGVBQVNvRyxHQUFPcEcsR0FBT2tJLEdBQWE7QUFHbEMsWUFGQWxJLElBQVFxRyxHQUFlckcsQ0FBSyxHQUM1QmtJLElBQWNoQixHQUFhZ0IsQ0FBVyxHQUNsQ2xJLEVBQU0sS0FBSyxRQUFRLEtBQUssTUFBTTtBQUNoQ0EsWUFBTSxPQUFPLENBQUMsS0FBSyxJQUFJa0k7aUJBQ2RsSSxFQUFNLEtBQUssUUFBUSxLQUFLLE1BQU0sTUFBTUEsRUFBTSxLQUFLLFFBQVEsT0FBTyxNQUFNO0FBQzdFLG1CQUFTNW9DLElBQUksR0FBR0EsSUFBSSxHQUFHQSxLQUFLO0FBQzFCNG9DLGNBQU0sT0FBTzVvQyxDQUFDLEtBQUssSUFBSTh3QztBQUczQixlQUFPbEIsR0FBZWhILENBQUs7TUFDN0I7QUFDQSxlQUFTNkcsR0FBbUI3RyxHQUFPa0ksR0FBYU4sR0FBUztBQUN2RCxZQUFJO0FBQ0YsaUJBQU94QixHQUFPcEcsR0FBT2tJLENBQVc7UUFDbEMsUUFBZ0I7QUFJZCxpQkFBT2xJO1FBQ1Q7TUFDRjtBQVFBLGVBQVMyRyxHQUFRM0csR0FBT2tJLEdBQWE7QUFHbkMsWUFGQWxJLElBQVFxRyxHQUFlckcsQ0FBSyxHQUM1QmtJLElBQWNoQixHQUFhZ0IsQ0FBVyxHQUNsQ2xJLEVBQU0sS0FBSyxRQUFRLEtBQUssTUFBTTtBQUNoQ0EsWUFBTSxPQUFPLENBQUMsTUFBTSxNQUFNQSxFQUFNLE9BQU8sQ0FBQyxLQUFLa0k7aUJBQ3BDbEksRUFBTSxLQUFLLFFBQVEsS0FBSyxNQUFNO0FBQ3ZDLG1CQUFTNW9DLElBQUksR0FBR0EsSUFBSSxHQUFHQSxLQUFLO0FBQzFCNG9DLGNBQU0sT0FBTzVvQyxDQUFDLE1BQU0sTUFBTTRvQyxFQUFNLE9BQU81b0MsQ0FBQyxLQUFLOHdDO2lCQUV0Q2xJLEVBQU0sS0FBSyxRQUFRLE9BQU8sTUFBTTtBQUN6QyxtQkFBUzVvQyxJQUFJLEdBQUdBLElBQUksR0FBR0EsS0FBSztBQUMxQjRvQyxjQUFNLE9BQU81b0MsQ0FBQyxNQUFNLElBQUk0b0MsRUFBTSxPQUFPNW9DLENBQUMsS0FBSzh3QztBQUcvQyxlQUFPbEIsR0FBZWhILENBQUs7TUFDN0I7QUFDQSxlQUFTK0csR0FBb0IvRyxHQUFPa0ksR0FBYU4sR0FBUztBQUN4RCxZQUFJO0FBQ0YsaUJBQU9qQixHQUFRM0csR0FBT2tJLENBQVc7UUFDbkMsUUFBZ0I7QUFJZCxpQkFBT2xJO1FBQ1Q7TUFDRjtBQVNBLGVBQVNzRyxHQUFVdEcsR0FBT2tJLElBQWMsTUFBTTtBQUM1QyxlQUFPMUIsR0FBYXhHLENBQUssSUFBSSxNQUFNb0csR0FBT3BHLEdBQU9rSSxDQUFXLElBQUl2QixHQUFRM0csR0FBT2tJLENBQVc7TUFDNUY7QUFDQSxlQUFTcEIsR0FBc0I5RyxHQUFPa0ksR0FBYU4sR0FBUztBQUMxRCxZQUFJO0FBQ0YsaUJBQU9kLEdBQXNCOUcsR0FBT2tJLENBQVc7UUFDakQsUUFBZ0I7QUFJZCxpQkFBT2xJO1FBQ1Q7TUFDRjtBQVVBLGVBQVNtRyxHQUFNNEIsR0FBWUksR0FBU0MsR0FBU0MsSUFBUSxHQUFLO0FBQ3hELFlBQU1DLElBQWUsQ0FBQ3p2QyxHQUFHMHZDLE1BQU0sS0FBSyxPQUFPMXZDLE1BQU0sSUFBSXd2QyxNQUFVLElBQUlELEtBQVdHLE1BQU0sSUFBSUYsS0FBU0QsTUFBWUMsQ0FBSyxHQUM1R25JLElBQWtCbUcsR0FBZTBCLENBQVUsR0FDM0NTLElBQWVuQyxHQUFlOEIsQ0FBTyxHQUNyQ04sSUFBTSxDQUFDUyxFQUFhcEksRUFBZ0IsT0FBTyxDQUFDLEdBQUdzSSxFQUFhLE9BQU8sQ0FBQyxDQUFDLEdBQUdGLEVBQWFwSSxFQUFnQixPQUFPLENBQUMsR0FBR3NJLEVBQWEsT0FBTyxDQUFDLENBQUMsR0FBR0YsRUFBYXBJLEVBQWdCLE9BQU8sQ0FBQyxHQUFHc0ksRUFBYSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzlNLGVBQU94QixHQUFlLEVBQ3BCLE1BQU0sT0FDTixRQUFRYSxFQUNWLENBQUM7TUFDSDtJQUFBLENBQUE7QUNuWEEsUUFBQVksS0FBQWh5QyxFQUFBQyxRQUFBO0FBQUE7QUFFQSxVQUFJeTdCLEtBQXlCLEdBQUE7QUFDN0IsYUFBTyxlQUFlejdCLElBQVMsY0FBYyxFQUMzQyxPQUFPLEtBQ1QsQ0FBQztBQUNEQSxTQUFRLFVBQVV1OEI7QUFDbEJ2OEIsU0FBUSxvQkFBb0IwOEI7QUFDNUIxOEIsU0FBUSxxQkFBcUI7QUFDN0IsVUFBSXVnQyxLQUFZOUUsR0FBdUIsR0FBQSxDQUF5QyxHQUM1RStRLEtBQWlDL1EsR0FBdUIsR0FBQSxDQUE4RCxHQUN0SHVXLEtBQWdCbFQsR0FBd0IsR0FBQSxDQUE2QixHQUNyRTZCLEtBQWEsR0FBQSxHQUNiSyxLQUFjdkYsR0FBdUIsR0FBQSxDQUFnQyxHQUNyRW9HLEtBQWtCcEcsR0FBdUIsR0FBQSxDQUFvQyxHQUM3RTZULEtBQWU3VCxHQUF1QixHQUFBLENBQXdCLEdBQzlEd1IsS0FBbUJ4UixHQUF1QixHQUFBLENBQTRCLEdBQ3BFZ1IsS0FBWSxDQUFDLFlBQVksR0FDN0J3RixLQUFhLENBQUMsVUFBVSxHQUN4QkMsS0FBYSxDQUFDLFFBQVEsUUFBUSx3QkFBd0IsVUFBVSxtQkFBbUI7QUFFckYsZUFBUy9TLEdBQXlCLEdBQUc7QUFBRSxZQUFrQixPQUFPLFdBQXJCO0FBQThCLGlCQUFPO0FBQU0sWUFBSXo5QixJQUFJLG9CQUFJLFdBQVdDLElBQUksb0JBQUk7QUFBVyxnQkFBUXc5QixLQUEyQixTQUFVcDhCLEdBQUc7QUFBRSxpQkFBT0EsSUFBSXBCLElBQUlEO1FBQUcsR0FBRyxDQUFDO01BQUc7QUFDM00sZUFBU285QixHQUF3QixHQUFHcDlCLEdBQUc7QUFBRSxZQUFJLENBQUNBLEtBQUssS0FBSyxFQUFFO0FBQVksaUJBQU87QUFBRyxZQUFhLE1BQVQsUUFBMEIsT0FBTyxLQUFuQixZQUFzQyxPQUFPLEtBQXJCO0FBQXdCLGlCQUFPLEVBQUUsU0FBUyxFQUFFO0FBQUcsWUFBSUMsSUFBSXc5QixHQUF5Qno5QixDQUFDO0FBQUcsWUFBSUMsS0FBS0EsRUFBRSxJQUFJLENBQUM7QUFBRyxpQkFBT0EsRUFBRSxJQUFJLENBQUM7QUFBRyxZQUFJLElBQUksRUFBRSxXQUFXLEtBQUssR0FBR00sSUFBSSxPQUFPLGtCQUFrQixPQUFPO0FBQTBCLGlCQUFTTCxLQUFLO0FBQUcsY0FBa0JBLE1BQWQsYUFBbUIsT0FBTyxVQUFVLGVBQWUsS0FBSyxHQUFHQSxDQUFDLEdBQUc7QUFBRSxnQkFBSWxCLElBQUl1QixJQUFJLE9BQU8seUJBQXlCLEdBQUdMLENBQUMsSUFBSTtBQUFNbEIsa0JBQU1BLEVBQUUsT0FBT0EsRUFBRSxPQUFPLE9BQU8sZUFBZSxHQUFHa0IsR0FBR2xCLENBQUMsSUFBSSxFQUFFa0IsQ0FBQyxJQUFJLEVBQUVBLENBQUM7VUFBRztBQUFFLGVBQU8sRUFBRSxVQUFVLEdBQUdELEtBQUtBLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRztNQUFHO0FBQ2hsQixlQUFTNjlCLEdBQVF4SixHQUFLO0FBQ3BCLGVBQU8sT0FBTyxLQUFLQSxDQUFHLEVBQUUsV0FBVztNQUNyQztBQUdBLGVBQVNsQixHQUFZakssR0FBSztBQUN4QixlQUFPLE9BQU9BLEtBQVEsWUFJdEJBLEVBQUksV0FBVyxDQUFDLElBQUk7TUFDdEI7QUFHQSxlQUFTNlIsR0FBa0JSLEdBQU07QUFDL0IsZUFBT0EsTUFBUyxnQkFBZ0JBLE1BQVMsV0FBV0EsTUFBUyxRQUFRQSxNQUFTO01BQ2hGO0FBQ0EsVUFBTWlXLEtBQXFCbnlDLEdBQVEsc0JBQUEsR0FBeUJzdkMsR0FBYSxTQUFTLEdBQzVFOEMsS0FBdUJuYyxPQUN0QkEsS0FHRUEsRUFBTyxPQUFPLENBQUMsRUFBRSxZQUFZLElBQUlBLEVBQU8sTUFBTSxDQUFDO0FBRXhELGVBQVNvYyxHQUFhLEVBQ3BCLGNBQUE1UyxHQUNBLE9BQUF2SCxHQUNBLFNBQUFvYSxFQUNGLEdBQUc7QUFDRCxlQUFPOVMsR0FBUXRILENBQUssSUFBSXVILElBQWV2SCxFQUFNb2EsQ0FBTyxLQUFLcGE7TUFDM0Q7QUFDQSxlQUFTcWEsR0FBeUJDLEdBQU07QUFDdEMsZUFBS0EsSUFHRSxDQUFDMWtCLEdBQU8rRixNQUFXQSxFQUFPMmUsQ0FBSSxJQUY1QjtNQUdYO0FBQ0EsZUFBU0MsR0FBZ0JDLEdBQWVqWixHQUFNO0FBQzVDLFlBQUksRUFDQSxZQUFBa1osRUFDRixJQUFJbFosR0FDSjNMLEtBQUFBLEdBQVkwZSxHQUErQixTQUFTL1MsR0FBTWdULEVBQVMsR0FDL0RtRyxJQUFvQixPQUFPRixLQUFrQixhQUFhQSxHQUFBQSxHQUFrQm5TLEdBQVUsU0FBUyxFQUNuRyxZQUFBb1MsRUFDRixHQUFHN2tCLENBQUssQ0FBQyxJQUFJNGtCO0FBQ2IsWUFBSSxNQUFNLFFBQVFFLENBQWlCO0FBQ2pDLGlCQUFPQSxFQUFrQixRQUFRQyxPQUFpQkosR0FBZ0JJLElBQUFBLEdBQW1CdFMsR0FBVSxTQUFTLEVBQ3RHLFlBQUFvUyxFQUNGLEdBQUc3a0IsQ0FBSyxDQUFDLENBQUM7QUFFWixZQUFNOGtCLEtBQXFCLE9BQU9BLEtBQXNCLFlBQVksTUFBTSxRQUFRQSxFQUFrQixRQUFRLEdBQUc7QUFDN0csY0FBTSxFQUNGLFVBQUFFLElBQVcsQ0FBQyxFQUNkLElBQUlGLEdBRUZoZCxLQUFBQSxHQURnQjRXLEdBQStCLFNBQVNvRyxHQUFtQlgsRUFBVTtBQUV6RixpQkFBQWEsRUFBUyxRQUFRQyxPQUFXO0FBQzFCLGdCQUFJQyxJQUFVO0FBQ1YsbUJBQU9ELEVBQVEsU0FBVSxhQUMzQkMsSUFBVUQsRUFBUSxPQUFBLEdBQVV4UyxHQUFVLFNBQVMsRUFDN0MsWUFBQW9TLEVBQ0YsR0FBRzdrQixHQUFPNmtCLENBQVUsQ0FBQyxJQUVyQixPQUFPLEtBQUtJLEVBQVEsS0FBSyxFQUFFLFFBQVExeEMsT0FBTztBQUNMc3hDLGtCQUFXdHhDLENBQUcsTUFBTzB4QyxFQUFRLE1BQU0xeEMsQ0FBRyxLQUFLeXNCLEVBQU16c0IsQ0FBRyxNQUFNMHhDLEVBQVEsTUFBTTF4QyxDQUFHLE1BQzVHMnhDLElBQVU7WUFFZCxDQUFDLEdBRUNBLE1BQ0csTUFBTSxRQUFRcGQsQ0FBTSxNQUN2QkEsSUFBUyxDQUFDQSxDQUFNLElBRWxCQSxFQUFPLEtBQUssT0FBT21kLEVBQVEsU0FBVSxhQUFhQSxFQUFRLE9BQUEsR0FBVXhTLEdBQVUsU0FBUyxFQUNyRixZQUFBb1MsRUFDRixHQUFHN2tCLEdBQU82a0IsQ0FBVSxDQUFDLElBQUlJLEVBQVEsS0FBSztVQUUxQyxDQUFDLEdBQ01uZDtRQUNUO0FBQ0EsZUFBT2dkO01BQ1Q7QUFDQSxlQUFTclcsR0FBYTBXLElBQVEsQ0FBQyxHQUFHO0FBQ2hDLFlBQU0sRUFDSixTQUFBWCxHQUNBLGNBQUE3UyxJQUFlMFMsSUFDZix1QkFBQWUsSUFBd0J4VyxJQUN4Qix1QkFBQXlXLElBQXdCelcsR0FDMUIsSUFBSXVXLEdBQ0VHLElBQVd0bEIsUUFBQUEsR0FDSm1mLEdBQWlCLFVBQUEsR0FBYTFNLEdBQVUsU0FBUyxDQUFDLEdBQUd6UyxHQUFPLEVBQ3JFLE9BQU91a0IsSUFBQUEsR0FBaUI5UixHQUFVLFNBQVMsQ0FBQyxHQUFHelMsR0FBTyxFQUNwRCxjQUFBMlIsR0FDQSxTQUFBNlMsRUFDRixDQUFDLENBQUMsRUFDSixDQUFDLENBQUM7QUFFSixlQUFBYyxFQUFTLGlCQUFpQixNQUNuQixDQUFDdm9CLEdBQUt3b0IsSUFBZSxDQUFDLE1BQU07QUFBQSxXQUFBLEdBRTdCckIsR0FBYyx3QkFBd0JubkIsR0FBS2dKLE9BQVVBLEVBQU8sT0FBT29RLE9BQVMsRUFBRUEsS0FBUyxRQUFRQSxFQUFNLGVBQWUsQ0FBQztBQUN6SCxjQUFNLEVBQ0YsTUFBTWxNLEdBQ04sTUFBTXViLEdBQ04sc0JBQXNCQyxHQUN0QixRQUFRQyxHQUdSLG1CQUFBQyxJQUFvQmxCLEdBQXlCSCxHQUFxQmtCLENBQWEsQ0FBQyxFQUNsRixJQUFJRCxHQUNKdG9CLEtBQUFBLEdBQWN5aEIsR0FBK0IsU0FBUzZHLEdBQWNuQixFQUFVLEdBRzFFd0IsSUFBdUJILE1BQThCLFNBQVlBLElBR3ZFRCxLQUFpQkEsTUFBa0IsVUFBVUEsTUFBa0IsVUFBVSxPQUNuRUssSUFBU0gsS0FBZSxPQUMxQmhhLEdBUUFvYSxJQUEwQmxYO0FBSTFCNFcsZ0JBQWtCLFVBQVVBLE1BQWtCLFNBQ2hETSxJQUEwQlYsSUFDakJJLElBRVRNLElBQTBCVCxJQUNqQnJlLEdBQVlqSyxDQUFHLE1BRXhCK29CLElBQTBCO0FBRTVCLGNBQU1DLE1BQUFBLEdBQTRCN0IsR0FBYyxTQUFTbm5CLElBQUFBLEdBQVMwVixHQUFVLFNBQVMsRUFDbkYsbUJBQW1CcVQsR0FDbkIsT0FBQXBhLEVBQ0YsR0FBR3pPLENBQU8sQ0FBQyxHQUNMK29CLEtBQW9CQyxPQUlwQixPQUFPQSxLQUFjLGNBQWNBLEVBQVUsbUJBQW1CQSxNQUFBQSxHQUFpQnBULEdBQVcsZUFBZW9ULENBQVMsSUFDL0dqbUIsT0FBUzJrQixHQUFnQnNCLElBQUFBLEdBQWV4VCxHQUFVLFNBQVMsQ0FBQyxHQUFHelMsR0FBTyxFQUMzRSxPQUFPdWtCLEdBQWEsRUFDbEIsT0FBT3ZrQixFQUFNLE9BQ2IsY0FBQTJSLEdBQ0EsU0FBQTZTLEVBQ0YsQ0FBQyxFQUNILENBQUMsQ0FBQyxJQUVHeUIsR0FFSEMsS0FBb0IsQ0FBQ0MsTUFBYUMsTUFBZ0I7QUFDdEQsZ0JBQUlDLElBQXNCTCxHQUFrQkcsQ0FBUSxHQUM5Q0csSUFBOEJGLElBQWNBLEVBQVksSUFBSUosRUFBaUIsSUFBSSxDQUFDO0FBQ3BGL2IsaUJBQWlCMGIsS0FDbkJXLEVBQTRCLEtBQUt0bUIsT0FBUztBQUN4QyxrQkFBTW9LLElBQVFtYSxJQUFBQSxHQUFpQjlSLEdBQVUsU0FBUyxDQUFDLEdBQUd6UyxHQUFPLEVBQzNELGNBQUEyUixHQUNBLFNBQUE2UyxFQUNGLENBQUMsQ0FBQztBQUNGLGtCQUFJLENBQUNwYSxFQUFNLGNBQWMsQ0FBQ0EsRUFBTSxXQUFXSCxDQUFhLEtBQUssQ0FBQ0csRUFBTSxXQUFXSCxDQUFhLEVBQUU7QUFDNUYsdUJBQU87QUFFVCxrQkFBTXNjLElBQWlCbmMsRUFBTSxXQUFXSCxDQUFhLEVBQUUsZ0JBQ2pEdWMsSUFBeUIsQ0FBQztBQUVoQyxxQkFBQSxPQUFPLFFBQVFELENBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQ0UsR0FBU0MsRUFBUyxNQUFNO0FBQy9ERixrQkFBdUJDLENBQU8sSUFBSTlCLEdBQWdCK0IsS0FBQUEsR0FBZWpVLEdBQVUsU0FBUyxDQUFDLEdBQUd6UyxHQUFPLEVBQzdGLE9BQUFvSyxFQUNGLENBQUMsQ0FBQztjQUNKLENBQUMsR0FDTXViLEVBQWtCM2xCLEdBQU93bUIsQ0FBc0I7WUFDeEQsQ0FBQyxHQUVDdmMsS0FBaUIsQ0FBQzJiLEtBQ3BCVSxFQUE0QixLQUFLdG1CLE9BQVM7QUFDeEMsa0JBQUkybUI7QUFDSixrQkFBTXZjLElBQVFtYSxJQUFBQSxHQUFpQjlSLEdBQVUsU0FBUyxDQUFDLEdBQUd6UyxHQUFPLEVBQzNELGNBQUEyUixHQUNBLFNBQUE2UyxFQUNGLENBQUMsQ0FBQyxHQUNJb0MsSUFBZ0J4YyxLQUFTLFNBQVN1YyxJQUFvQnZjLEVBQU0sZUFBZSxTQUFTdWMsSUFBb0JBLEVBQWtCMWMsQ0FBYSxNQUFNLE9BQU8sU0FBUzBjLEVBQWtCO0FBQ3JMLHFCQUFPaEMsR0FBZ0IsRUFDckIsVUFBVWlDLEVBQ1osSUFBQSxHQUFPblUsR0FBVSxTQUFTLENBQUMsR0FBR3pTLEdBQU8sRUFDbkMsT0FBQW9LLEVBQ0YsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxHQUVFeWIsS0FDSFMsRUFBNEIsS0FBS2hCLENBQVE7QUFFM0MsZ0JBQU11QixJQUF3QlAsRUFBNEIsU0FBU0YsRUFBWTtBQUMvRSxnQkFBSSxNQUFNLFFBQVFELENBQVEsS0FBS1UsSUFBd0IsR0FBRztBQUN4RCxrQkFBTUMsSUFBZSxJQUFJLE1BQU1ELENBQXFCLEVBQUUsS0FBSyxFQUFFO0FBRTdEUixrQkFBc0IsQ0FBQyxHQUFHRixHQUFVLEdBQUdXLENBQVksR0FDbkRULEVBQW9CLE1BQU0sQ0FBQyxHQUFHRixFQUFTLEtBQUssR0FBR1csQ0FBWTtZQUM3RDtBQUNBLGdCQUFNOWMsSUFBWStiLEdBQXNCTSxHQUFxQixHQUFHQyxDQUEyQjtBQVczRixtQkFBSXZwQixFQUFJLFlBQ05pTixFQUFVLFVBQVVqTixFQUFJLFVBRW5CaU47VUFDVDtBQUNBLGlCQUFJK2IsR0FBc0IsZUFDeEJHLEdBQWtCLGFBQWFILEdBQXNCLGFBRWhERztRQUNUO01BQ0Y7SUFBQSxDQUFBO0FDMVBBLFFBQUEzYixLQUFvQyxFQUFBLEVBQUEsQ0FBQSxHQUNwQ3djLEtBQXFCLEVBQUEsR0FBQSxDQUFBO0FDRXJCLFFBQUFDLEtBQXFDLEVBQUEsR0FBQSxDQUFBLEdBQ3JDQyxLQUFpRCxFQUFBLEdBQUEsQ0FBQTtBQ0pqRCxRQUFBRixLQUF3QyxFQUFBLEdBQUEsQ0FBQTtBQ0N4QyxhQUFTRyxHQUFpQjFuQixHQUFVO0FBQ2xDQSxRQUFTO0lBQ1g7QUFFQSxRQUFJMm5CLEtBQVFELElBRUNFLEtBQVdDLE9BQVlGLEtBQVFFLEdBRS9CQyxLQUFXLE1BQU1IO0FDVDlCLFFBQUE1YyxLQUFtRCxFQUFBLEVBQUEsQ0FBQTtBQ0FuRCxRQUFBQSxLQUEyQixFQUFBLEVBQUEsQ0FBQTtBQ0EzQixRQUFBZixLQUF1QixFQUFBLEVBQUEsQ0FBQSxHQUNqQitkLEtBQWEsT0FBTyxJQUFJLHFCQUFxQixHQUM3Q0MsS0FBSyxPQUFPLGFBQWUsTUFBYyxhQUUvQyxDQUFDO0FBRUQsYUFBU0MsS0FBYTtBQUNwQixVQUFJQztBQUVKLFVBQUksQ0FBTyxHQUFBO0FBQWUsZUFBTyxDQUFDO0FBQ2xDLFVBQU1DLEtBQWNELElBQWlCRixHQUFHRCxFQUFVLE1BQU0sT0FBT0csSUFBaUJGLEdBQUdELEVBQVUsSUFBSSxvQkFBSSxPQUNqR0ssSUFBY0QsRUFBVyxJQUFVLEdBQUEsYUFBYTtBQUVwRCxhQUFLQyxNQUNIQSxJQUFvQixHQUFBLGNBQWMsSUFBSSxHQU10Q0QsRUFBVyxJQUFVLEdBQUEsZUFBZUMsQ0FBVyxJQUcxQ0E7SUFDVDtBQUVPLFFBQU1DLEtBQWlDSixHQUFXO0FEaEJsRCxhQUFTSyxHQUF1QkMsSUFBVUYsSUFBbUI7QUFDbEUsYUFBTyxXQUEyQjtBQU9oQyxnQkFBQSxHQU5xQixHQUFBLFlBQVdFLENBQU87TUFPekM7SUFDRjtBQWtCTyxRQUFNQyxLQUErQkYsR0FBdUI7QUV0QzVELFFBQU1HLEtBQWlCLE1BQU07QUFDbEMsWUFBTSxJQUFJLE1BQU0sdUJBQXVCO0lBQ3pDO0FIRUEsUUFBSUMsS0FBbUNELElBQzFCRSxLQUF3Qm5rQixPQUFNO0FBQ3pDa2tCLFdBQW1DbGtCO0lBQ3JDLEdBRU1va0IsS0FBYyxDQUFDajBDLEdBQUdFLE1BQU1GLE1BQU1FO0FBUzdCLGFBQVNnMEMsR0FBbUJOLElBQVVGLElBQW1CO0FBQzlELFVBQU1HLElBQWtCRCxNQUFZRixLQUFvQkcsS0FBeUJGLEdBQXVCQyxDQUFPO0FBQy9HLGFBQU8sU0FBcUIvaEIsR0FBVXNpQixJQUFzQixDQUFDLEdBQUc7QUFDOUQsWUFBTSxFQUNKLFlBQUFDLElBQWFILElBQ2IsZ0JBQUFJLElBQWlCLFFBQ2pCLFdBQUFDLElBQVksT0FDZCxJQUFJLE9BQU9ILEtBQXdCLGFBQWEsRUFDOUMsWUFBWUEsRUFDZCxJQUFJQSxHQWdCRSxFQUNKLE9BQUFJLEdBQ0EsY0FBQUMsR0FDQSxnQkFBQUMsR0FDQSxnQkFBZ0JDLEdBQ2hCLFdBQVdDLEVBQ2IsSUFBSWQsRUFBZ0IsR0FDZGUsS0FBQUEsR0FBVyxHQUFBLFFBQU8sSUFBSSxHQUN0QkMsS0FBQUEsR0FBa0IsR0FBQSxhQUFZLEVBQ2xDLENBQUNoakIsRUFBUyxJQUFJLEVBQUVpakIsR0FBTztBQUNyQixjQUFNQyxJQUFXbGpCLEVBQVNpakIsQ0FBSztBQUUvQixjQUFJLE9BQXVDO0FBR3pDLGlCQUFJRSxNQUF3QixZQUFZQSxNQUF3QixVQUFVSixFQUFTLFlBRzdFLENBQUNSLEVBQVdXLEdBQVVFLENBQVM7QUFHakMsa0JBQUk7Y0FFSixTQUFTbjBDLEdBQUc7Y0FLWjtBQWFKLGlCQUFJbzBDLE1BQW1CLFlBQVlBLE1BQW1CLFVBQVVOLEVBQVMsWUFFbkVHLE1BQWFEO0FBR2Ysa0JBQUk7Y0FFSixTQUFTaDBDLEdBQUc7Y0FLWjtVQVNOO0FBRUEsaUJBQU9pMEM7UUFDVCxFQUVGLEVBQUVsakIsRUFBUyxJQUFJLEdBQUcsQ0FBQ0EsR0FBVTZpQixHQUFzQkwsQ0FBYyxDQUFDLEdBQzVEYyxJQUFnQnBCLEdBQWlDUyxFQUFhLGNBQWNELEVBQU0sVUFBVUUsS0FBa0JGLEVBQU0sVUFBVU0sR0FBaUJULENBQVU7QUFDL0osZ0JBQUEsR0FBQSxHQUFBLGVBQWNlLENBQWEsR0FDcEJBO01BQ1Q7SUFDRjtBQXlCTyxRQUFNQyxLQUEyQmxCLEdBQW1CO0FJNUkzRHh1QixNQUFBQTtBQ0FlLGFBQVJ3a0IsRUFBK0NuckMsR0FBUW9yQyxHQUFVO0FBQ3RFLFVBQUlwckMsS0FBVTtBQUFNLGVBQU8sQ0FBQztBQUM1QixVQUFJRCxJQUFTLENBQUMsR0FDVnNyQyxJQUFhLE9BQU8sS0FBS3JyQyxDQUFNLEdBQy9CSyxHQUFLO0FBQ1QsV0FBSyxJQUFJLEdBQUcsSUFBSWdyQyxFQUFXLFFBQVE7QUFDakNockMsWUFBTWdyQyxFQUFXLENBQUMsR0FDZCxFQUFBRCxFQUFTLFFBQVEvcUMsQ0FBRyxLQUFLLE9BQzdCTixFQUFPTSxDQUFHLElBQUlMLEVBQU9LLENBQUc7QUFFMUIsYUFBT047SUFDVDtBRE5BLFFBQUFrekIsS0FBeUIsRUFBQSxHQUFBLENBQUEsR0FDekJxRCxLQUF1QixFQUFBLEVBQUEsQ0FBQSxHQUN2QmdnQixLQUFzRCxFQUFBLEdBQUEsQ0FBQTtBRVB0RDN2QixNQUFBQTtBQ0lBLGFBQVM0dkIsS0FBMkI7QUFDbEMsVUFBTXRDLElBQVFHLEdBQVMsR0FDbkJvQyxJQUFRLE1BQ1JDLElBQU87QUFDWCxhQUFPLEVBQ0wsUUFBUTtBQUNORCxZQUFRLE1BQ1JDLElBQU87TUFDVCxHQUVBLFNBQVM7QUFDUHhDLFVBQU0sTUFBTTtBQUNWLGNBQUl5QyxJQUFXRjtBQUVmLGlCQUFPRTtBQUNMQSxjQUFTLFNBQVMsR0FDbEJBLElBQVdBLEVBQVM7UUFFeEIsQ0FBQztNQUNILEdBRUEsTUFBTTtBQUNKLFlBQUlDLElBQVksQ0FBQyxHQUNiRCxJQUFXRjtBQUVmLGVBQU9FO0FBQ0xDLFlBQVUsS0FBS0QsQ0FBUSxHQUN2QkEsSUFBV0EsRUFBUztBQUd0QixlQUFPQztNQUNULEdBRUEsVUFBVXJxQixHQUFVO0FBQ2xCLFlBQUlzcUIsSUFBZSxNQUNmRixJQUFXRCxJQUFPLEVBQ3BCLFVBQUFucUIsR0FDQSxNQUFNLE1BQ04sTUFBTW1xQixFQUNSO0FBRUEsZUFBSUMsRUFBUyxPQUNYQSxFQUFTLEtBQUssT0FBT0EsSUFFckJGLElBQVFFLEdBR0gsV0FBdUI7QUFDeEIsV0FBQ0UsS0FBZ0JKLE1BQVUsU0FDL0JJLElBQWUsT0FFWEYsRUFBUyxPQUNYQSxFQUFTLEtBQUssT0FBT0EsRUFBUyxPQUU5QkQsSUFBT0MsRUFBUyxNQUdkQSxFQUFTLE9BQ1hBLEVBQVMsS0FBSyxPQUFPQSxFQUFTLE9BRTlCRixJQUFRRSxFQUFTO1FBRXJCO01BQ0YsRUFFRjtJQUNGO0FBRUEsUUFBTUcsS0FBZ0IsRUFDcEIsU0FBUztJQUFDLEdBRVYsS0FBSyxNQUFNLENBQUMsRUFDZDtBQUNPLGFBQVNDLEdBQW1CdEIsR0FBT3VCLEdBQVc7QUFDbkQsVUFBSUMsR0FDQUwsSUFBWUUsSUFFWkksSUFBc0IsR0FFdEJDLElBQWlCO0FBRXJCLGVBQVNDLEVBQWFULEdBQVU7QUFDOUJVLFVBQWE7QUFDYixZQUFNQyxJQUFrQlYsRUFBVSxVQUFVRCxDQUFRLEdBRWhEWSxJQUFVO0FBQ2QsZUFBTyxNQUFNO0FBQ05BLGdCQUNIQSxJQUFVLE1BQ1ZELEVBQWdCLEdBQ2hCRSxFQUFlO1FBRW5CO01BQ0Y7QUFFQSxlQUFTQyxJQUFtQjtBQUMxQmIsVUFBVSxPQUFPO01BQ25CO0FBRUEsZUFBU2MsSUFBc0I7QUFDekJoQyxVQUFhLGlCQUNmQSxFQUFhLGNBQWM7TUFFL0I7QUFFQSxlQUFTbUIsSUFBZTtBQUN0QixlQUFPTTtNQUNUO0FBRUEsZUFBU0UsSUFBZTtBQUN0QkgsYUFFS0QsTUFDSEEsSUFBY0QsSUFBWUEsRUFBVSxhQUFhVSxDQUFtQixJQUFJakMsRUFBTSxVQUFVaUMsQ0FBbUIsR0FDM0dkLElBQVlKLEdBQXlCO01BRXpDO0FBRUEsZUFBU2dCLElBQWlCO0FBQ3hCTixhQUVJRCxLQUFlQyxNQUF3QixNQUN6Q0QsRUFBWSxHQUNaQSxJQUFjLFFBQ2RMLEVBQVUsTUFBTSxHQUNoQkEsSUFBWUU7TUFFaEI7QUFFQSxlQUFTYSxJQUFtQjtBQUNyQlIsY0FDSEEsSUFBaUIsTUFDakJFLEVBQWE7TUFFakI7QUFFQSxlQUFTTyxJQUFxQjtBQUN4QlQsY0FDRkEsSUFBaUIsT0FDakJLLEVBQWU7TUFFbkI7QUFFQSxVQUFNOUIsSUFBZSxFQUNuQixjQUFBMEIsR0FDQSxrQkFBQUssR0FDQSxxQkFBQUMsR0FDQSxjQUFBYixHQUNBLGNBQWNjLEdBQ2QsZ0JBQWdCQyxHQUNoQixjQUFjLE1BQU1oQixFQUN0QjtBQUNBLGFBQU9sQjtJQUNUO0FDN0pBLFFBQUFuZixLQUF1QixFQUFBLEVBQUEsQ0FBQSxHQVVWc2hCLEtBQWUsT0FBTyxTQUFXLE9BQWUsT0FBTyxPQUFPLFdBQWEsT0FBZSxPQUFPLE9BQU8sU0FBUyxnQkFBa0IsS0FDbklDLEtBQTRCRCxLQUFrQixHQUFBLGtCQUF3QixHQUFBO0FKT25GLFFBQUlFLEtBQXVCL0MsSUFDZGdELEtBQW9Cam5CLE9BQU07QUFDckNnbkIsV0FBdUJobkI7SUFDekI7QUtyQkEsUUFBQXdGLEtBQXVCLEVBQUEsRUFBQSxDQUFBO0FBS3ZCLGFBQVMwaEIsR0FBUyxFQUNoQixPQUFBeEMsR0FDQSxTQUFBWCxHQUNBLFVBQUE5bkIsR0FDQSxhQUFBa3JCLEdBQ0EsZ0JBQUEzQyxJQUFpQixRQUNqQixXQUFBQyxJQUFZLE9BQ2QsR0FBRztBQUNELFVBQU0yQyxJQUFxQixHQUFBLFFBQVEsTUFBTTtBQUN2QyxZQUFNekMsSUFBZXFCLEdBQW1CdEIsQ0FBSztBQUM3QyxlQUFPLEVBQ0wsT0FBQUEsR0FDQSxjQUFBQyxHQUNBLGdCQUFnQndDLElBQWMsTUFBTUEsSUFBYyxRQUNsRCxnQkFBQTNDLEdBQ0EsV0FBQUMsRUFDRjtNQUNGLEdBQUcsQ0FBQ0MsR0FBT3lDLEdBQWEzQyxHQUFnQkMsQ0FBUyxDQUFDLEdBQzVDNEMsSUFBc0IsR0FBQSxRQUFRLE1BQU0zQyxFQUFNLFNBQVMsR0FBRyxDQUFDQSxDQUFLLENBQUM7QUFDbkUsYUFBQXFDLEdBQTBCLE1BQU07QUFDOUIsWUFBTSxFQUNKLGNBQUFwQyxFQUNGLElBQUl5QztBQUNKLGVBQUF6QyxFQUFhLGdCQUFnQkEsRUFBYSxrQkFDMUNBLEVBQWEsYUFBYSxHQUV0QjBDLE1BQWtCM0MsRUFBTSxTQUFTLEtBQ25DQyxFQUFhLGlCQUFpQixHQUd6QixNQUFNO0FBQ1hBLFlBQWEsZUFBZSxHQUM1QkEsRUFBYSxnQkFBZ0I7UUFDL0I7TUFDRixHQUFHLENBQUN5QyxHQUFjQyxDQUFhLENBQUMsR0FHTixHQUFBLGVBRlZ0RCxLQUFXRixJQUVxQixVQUFVLEVBQ3hELE9BQU91RCxFQUNULEdBQUduckIsQ0FBUTtJQUNiO0FBRUEsUUFBT3FyQixLQUFRSjtBQ3RDUixhQUFTSyxHQUFnQnhELElBQVVGLElBQW1CO0FBQzNELFVBQU1HLElBQ05ELE1BQVlGLEtBQW9CRyxLQUNoQ0YsR0FBdUJDLENBQU87QUFDOUIsYUFBTyxXQUFvQjtBQUN6QixZQUFNLEVBQ0osT0FBQVcsRUFDRixJQUFJVixFQUFnQjtBQUVwQixlQUFPVTtNQUNUO0lBQ0Y7QUFpQk8sUUFBTThDLEtBQXdCRCxHQUFnQjtBQzVCOUMsYUFBU0UsR0FBbUIxRCxJQUFVRixJQUFtQjtBQUM5RCxVQUFNMkQsSUFDTnpELE1BQVlGLEtBQW9CMkQsS0FBa0JELEdBQWdCeEQsQ0FBTztBQUN6RSxhQUFPLFdBQXVCO0FBRzVCLGVBRmN5RCxFQUFTLEVBRVY7TUFDZjtJQUNGO0FBdUJPLFFBQU1FLEtBQTJCRCxHQUFtQjtBZC9CM0R0RCxPQUFzQixHQUFBLGdDQUFnQztBQUN0RDhDLE9BQWtCLEdBQUEsb0JBQW9CO0FBR3RDN0QsT0FBUyxHQUFBLHVCQUFLO0FlVlAsUUFBTXVFLEtBQWlCLE1BQU1ELEdBQXlCLEdBQ2hERSxLQUFrRHJDO0FBQUFBLGFDd0MvQ3NDLEdBQUlDLEdBQUFBO0FBQUFBLGVBQUFBLElBQUFBLFVBQUFBLFFBQStCNXZCLElBQUFBLE1BQUFBLElBQUFBLElBQUFBLElBQUFBLElBQUFBLENBQUFBLEdBQUFBLElBQUFBLEdBQUFBLElBQUFBLEdBQUFBO0FBQUFBLFVBQUFBLElBQUFBLENBQUFBLElBQUFBLFVBQUFBLENBQUFBO0FBQUFBLFVBQUFBO0FBQ3JDLFlBQ05qbkIsR0FDQTgyQztBQUtxQkEsWUFFbEJDLE1BQUFBLGdDQUNxQkYsS0FDN0I1dkIsRUFBS29DLFNBQVMsTUFBTXBDLEVBQUtSLElBQUksU0FBQXBvQixHQUFBQTtBQUFBQSxlQUFBQSxNQUFTQSxJQUFBQTtNQUFBQSxDQUFBQSxFQUFNMjRDLEtBQUssR0FBQSxJQUFPLE1BQUEsa0RBQUE7SUFBQTtBQUFBLGFDdkMzQ0MsR0FBUXh2QixHQUFBQTtBQUFBQSxhQUFBQSxDQUFBQSxDQUNkQSxLQUFBQSxDQUFBQSxDQUFXQSxFQUFNeXZCLEVBQUFBO0lBQUFBO0FBQUFBLGFBS1hDLEdBQVkxdkIsR0FBQUE7QUFBQUEsVUFBQUE7QUFBQUEsYUFBQUEsQ0FBQUEsQ0FDdEJBLE1BQUFBLFNBYXdCQSxHQUFBQTtBQUFBQSxZQUFBQSxDQUN4QkEsS0FBMEIsT0FBVkEsS0FBVTtBQUFVLGlCQUFBO0FBQU8sWUFDMUMydkIsSUFBUUMsT0FBT3p4QixlQUFlNkIsQ0FBQUE7QUFBQUEsWUFDaEMydkIsTUFBVTtBQUFWQSxpQkFBQUE7QUFDSSxZQUVGRSxJQUNMRCxPQUFPajZDLGVBQWVtNkMsS0FBS0gsR0FBTyxhQUFBLEtBQWtCQSxFQUFNSTtBQUFBQSxlQUV2REYsTUFBU0QsVUFHRyxPQUFSQyxLQUFRLGNBQ2ZHLFNBQVNDLFNBQVNILEtBQUtELENBQUFBLE1BQVVLO01BQUFBLEVBeEJuQmx3QixDQUFBQSxLQUNkbXdCLE1BQU1DLFFBQVFwd0IsQ0FBQUEsS0FBQUEsQ0FBQUEsQ0FDWkEsRUFBTXF3QixFQUFBQSxLQUFBQSxDQUFBQSxFQUFBQSxHQUFBQSxJQUNOcndCLEVBQU0rdkIsaUJBREFNLFFBQ0FOLE1BQUFBLFdBQU5PLEVBQW9CRCxFQUFBQSxNQUN0QkUsR0FBTXZ3QixDQUFBQSxLQUNOd3dCLEdBQU14d0IsQ0FBQUE7SUFBQUE7QUEwRFIsYUFBZ0J5d0IsR0FBS2psQixHQUFVMUwsR0FBVzR3QixHQUFBQTtBQUFBQSxZQUFBQSxXQUFBQSxJQUFBQSxRQUNyQ0MsR0FBWW5sQixDQUFBQSxNQUQwQyxLQUV2RGtsQixJQUFpQmQsT0FBT2x4QixPQUFPa3lCLElBQVNwbEIsQ0FBQUEsRUFBS3FsQixRQUFRLFNBQUFoNkMsR0FBQUE7QUFDakQ2NUMsYUFBaUMsT0FBUjc1QyxLQUFRLFlBQVVpcEIsRUFBS2pwQixHQUFLMjBCLEVBQUkzMEIsQ0FBQUEsR0FBTTIwQixDQUFBQTtNQUFBQSxDQUFBQSxJQUdyRUEsRUFBSXFsQixRQUFRLFNBQUNweEIsR0FBWTRDLEdBQUFBO0FBQUFBLGVBQWV2QyxFQUFLdUMsR0FBTzVDLEdBQU8rTCxDQUFBQTtNQUFBQSxDQUFBQTtJQUFBQTtBQUFBQSxhQUs3Q21sQixHQUFZRyxHQUFBQTtBQUFBQSxVQUVyQnZFLElBQWdDdUUsRUFBTXJCLEVBQUFBO0FBQUFBLGFBQ3JDbEQsSUFDSkEsRUFBTXdFLElBQVEsSUFDYnhFLEVBQU13RSxJQUFRLElBQ2J4RSxFQUFNd0UsSUFDUlosTUFBTUMsUUFBUVUsQ0FBQUEsSUFBQUEsSUFFZFAsR0FBTU8sQ0FBQUEsSUFBQUEsSUFFTk4sR0FBTU0sQ0FBQUEsSUFBQUEsSUFBQUE7SUFBQUE7QUFBQUEsYUFNTUUsR0FBSUYsR0FBWXBmLEdBQUFBO0FBQUFBLGFBQ3hCaWYsR0FBWUcsQ0FBQUEsTUFEWXBmLElBRTVCb2YsRUFBTUUsSUFBSXRmLENBQUFBLElBQ1ZrZSxPQUFPNVosVUFBVXJnQyxlQUFlbTZDLEtBQUtnQixHQUFPcGYsQ0FBQUE7SUFBQUE7QUFBQUEsYUFJaEN1ZixHQUFJSCxHQUEyQnBmLEdBQUFBO0FBQUFBLGFBRXZDaWYsR0FBWUcsQ0FBQUEsTUFGMkJwZixJQUVEb2YsRUFBTUcsSUFBSXZmLENBQUFBLElBQVFvZixFQUFNcGYsQ0FBQUE7SUFBQUE7QUFJdEUsYUFBZ0J3ZixHQUFJSixHQUFZSyxHQUE2Qm54QixHQUFBQTtBQUFBQSxVQUN0RDdvQixJQUFJdzVDLEdBQVlHLENBQUFBO0FBQ2xCMzVDLFlBRGtCMjVDLElBQ0VBLEVBQU1JLElBQUlDLEdBQWdCbnhCLENBQUFBLElBQ3pDN29CLE1BRHlDNm9CLElBRWpEOHdCLEVBQU1NLElBQUlweEIsQ0FBQUEsSUFDSjh3QixFQUFNSyxDQUFBQSxJQUFrQm54QjtJQUFBQTtBQUFBQSxhQUloQnF4QixHQUFHOTVDLEdBQVFDLEdBQUFBO0FBQUFBLGFBRXRCRCxNQUFNQyxJQUNGRCxNQUFNLEtBQUssSUFBSUEsS0FBTSxJQUFJQyxJQUV6QkQsS0FBTUEsS0FBS0MsS0FBTUE7SUFBQUE7QUFBQUEsYUFLVis0QyxHQUFNaDZDLEdBQUFBO0FBQUFBLGFBQ2QrNkMsTUFBVS82QyxhQUFrQmc3QztJQUFBQTtBQUFBQSxhQUlwQmYsR0FBTWo2QyxHQUFBQTtBQUFBQSxhQUNkaTdDLE1BQVVqN0MsYUFBa0JrN0M7SUFBQUE7QUFBQUEsYUFHcEJDLEdBQU9uRixHQUFBQTtBQUFBQSxhQUNmQSxFQUFNb0YsS0FBU3BGLEVBQU1xRjtJQUFBQTtBQUFBQSxhQUliQyxHQUFZMVksR0FBQUE7QUFBQUEsVUFDdkJnWCxNQUFNQyxRQUFRalgsQ0FBQUE7QUFBTyxlQUFPZ1gsTUFBTW5hLFVBQVU5UixNQUFNNHJCLEtBQUszVyxDQUFBQTtBQUFBQSxVQUNyRDJZLElBQWNDLEdBQTBCNVksQ0FBQUE7QUFBQUEsYUFDdkMyWSxFQUFZckMsRUFBQUE7QUFBQUEsZUFDZi93QixJQUFPa3lCLEdBQVFrQixDQUFBQSxHQUNWNTdDLElBQUksR0FBR0EsSUFBSXdvQixFQUFLa0QsUUFBUTFyQixLQUFLO0FBQUEsWUFDL0JXLElBQVc2bkIsRUFBS3hvQixDQUFBQSxHQUNoQjg3QyxJQUFPRixFQUFZajdDLENBQUFBO0FBQ3JCbTdDLFVBQUtDLGFBRGdCcDdDLFVBRXhCbTdDLEVBQUtDLFdBQUFBLE1BQ0xELEVBQUtFLGVBQUFBLFFBS0ZGLEVBQUtmLE9BQU9lLEVBQUtkLFNBQ3BCWSxFQUFZajdDLENBQUFBLElBQU8sRUFDbEJxN0MsY0FBQUEsTUFDQUQsVUFBQUEsTUFDQUUsWUFBWUgsRUFBS0csWUFDakJueUIsT0FBT21aLEVBQUt0aUMsQ0FBQUEsRUFBQUE7TUFBQUE7QUFBQUEsYUFHUis0QyxPQUFPeGlCLE9BQU93aUIsT0FBT3p4QixlQUFlZ2IsQ0FBQUEsR0FBTzJZLENBQUFBO0lBQUFBO0FBQUFBLGFBV25DTSxHQUFVNW1CLEdBQVU2bUIsR0FBQUE7QUFBQUEsYUFBQUEsTUFBQUEsV0FBQUEsSUFBQUEsUUFDL0JDLEdBQVM5bUIsQ0FBQUEsS0FBUWdrQixHQUFRaGtCLENBQUFBLEtBQUFBLENBQVNra0IsR0FBWWxrQixDQUFBQSxNQUM5Q21sQixHQUFZbmxCLENBQUFBLElBQU8sTUFDdEJBLEVBQUkwbEIsTUFBTTFsQixFQUFJNGxCLE1BQU01bEIsRUFBSSttQixRQUFRL21CLEVBQUlnbkIsU0FBU0MsS0FFOUM3QyxPQUFPd0MsT0FBTzVtQixDQUFBQSxHQUNWNm1CLEtBQU01QixHQUFLamxCLEdBQUssU0FBQzMwQixHQUFLbXBCLEdBQUFBO0FBQUFBLGVBQVVveUIsR0FBT3B5QixHQUFBQSxJQUFPO01BQUEsR0FBQSxJQUFPLElBTE13TDtJQUFBQTtBQVNoRSxhQUFTaW5CLEtBQUFBO0FBQ1J0RCxTQUFJLENBQUE7SUFBQTtBQUFBLGFBR1dtRCxHQUFTOW1CLEdBQUFBO0FBQUFBLGFBQ3BCQSxLQUFPLFFBQXVCLE9BQVJBLEtBQVEsWUFFM0Jva0IsT0FBTzBDLFNBQVM5bUIsQ0FBQUE7SUFBQUE7QUFBQUEsYUN4S1JrbkIsR0FDZkMsR0FBQUE7QUFBQUEsVUFFTUMsSUFBU0MsR0FBUUYsQ0FBQUE7QUFBQUEsYUFDbEJDLEtBQ0p6RCxHQUFJLElBQUl3RCxDQUFBQSxHQUdGQztJQUFBQTtBQUFBQSxhQUdRRSxHQUNmSCxHQUNBSSxHQUFBQTtBQUVLRixTQUFRRixDQUFBQSxNQUFZRSxHQUFRRixDQUFBQSxJQUFhSTtJQUFBQTtBQ2xDL0MsYUFBZ0JDLEtBQUFBO0FBQUFBLGFBRVJDO0lBQUFBO0FBQUFBLGFBa0JRQyxHQUNmQyxHQUNBQyxHQUFBQTtBQUVJQSxZQUNIVixHQUFVLFNBQUEsR0FDVlMsRUFBTUUsSUFBVyxDQUFBLEdBQ2pCRixFQUFNRyxJQUFrQixDQUFBLEdBQ3hCSCxFQUFNSSxJQUFpQkg7SUFBQUE7QUFBQUEsYUFJVEksR0FBWUwsR0FBQUE7QUFDM0JNLFNBQVdOLENBQUFBLEdBQ1hBLEVBQU1PLEVBQVE3QyxRQUFROEMsRUFBQUEsR0FFdEJSLEVBQU1PLElBQVU7SUFBQTtBQUFBLGFBR0RELEdBQVdOLEdBQUFBO0FBQ3RCQSxZQUFVRixPQUNiQSxLQUFlRSxFQUFNUztJQUFBQTtBQUFBQSxhQUlQQyxHQUFXQyxHQUFBQTtBQUFBQSxhQUNsQmIsS0FyQ0QsRUFDTlMsR0FBUyxDQUFBLEdBQ1RFLEdBbUNrQ1gsSUFsQ2xDYyxHQWtDZ0RELEdBL0JoREUsR0FBQUEsTUFDQUMsR0FBb0IsRUFBQTtJQUFBO0FBaUN0QixhQUFTTixHQUFZTyxHQUFBQTtBQUFBQSxVQUNkM0gsSUFBb0IySCxFQUFNekUsRUFBQUE7QUFFL0JsRCxRQUFNd0UsTUFGeUJ0QixLQUcvQmxELEVBQU13RSxNQURBQSxJQUdOeEUsRUFBTTRILEVBQUFBLElBQ0Y1SCxFQUFNNkgsSUFBQUE7SUFBVztBQUFBLGFDOURQQyxHQUFjanBCLEdBQWErbkIsR0FBQUE7QUFDMUNBLFFBQU1jLElBQXFCZCxFQUFNTyxFQUFROXhCO0FBQUFBLFVBQ25DMHlCLElBQVluQixFQUFNTyxFQUFTLENBQUEsR0FDM0JhLElBQWFucEIsTUFBYm1wQixVQUFxQ25wQixNQUFXa3BCO0FBQUFBLGFBQ2pEbkIsRUFBTVksRUFBT1MsS0FDakI5QixHQUFVLEtBQUEsRUFBTytCLEVBQWlCdEIsR0FBTy9uQixHQUFRbXBCLENBQUFBLEdBQzlDQSxLQUNDRCxFQUFVN0UsRUFBQUEsRUFBYWlGLE1BQzFCbEIsR0FBWUwsQ0FBQUEsR0FDWmhFLEdBQUksQ0FBQSxJQUVETyxHQUFZdGtCLENBQUFBLE1BRWZBLElBQVN1cEIsR0FBU3hCLEdBQU8vbkIsQ0FBQUEsR0FDcEIrbkIsRUFBTVMsS0FBU2dCLEdBQVl6QixHQUFPL25CLENBQUFBLElBRXBDK25CLEVBQU1FLEtBQ1RYLEdBQVUsU0FBQSxFQUFXbUMsRUFDcEJQLEVBQVU3RSxFQUFBQSxFQUFhbUMsR0FDdkJ4bUIsR0FDQStuQixFQUFNRSxHQUNORixFQUFNRyxDQUFBQSxLQUtSbG9CLElBQVN1cEIsR0FBU3hCLEdBQU9tQixHQUFXLENBQUEsQ0FBQSxHQUVyQ2QsR0FBWUwsQ0FBQUEsR0FDUkEsRUFBTUUsS0FDVEYsRUFBTUksRUFBZ0JKLEVBQU1FLEdBQVVGLEVBQU1HLENBQUFBLEdBRXRDbG9CLE1BQVcwcEIsS0FBVTFwQixJQUFBQTtJQUFTMnBCO0FBR3RDLGFBQVNKLEdBQVNLLEdBQXVCaDFCLEdBQVlxYSxHQUFBQTtBQUFBQSxVQUVoRGlZLEdBQVN0eUIsQ0FBQUE7QUFBUSxlQUFPQTtBQUFBQSxVQUV0QnVzQixJQUFvQnZzQixFQUFNeXZCLEVBQUFBO0FBQUFBLFVBQUFBLENBRTNCbEQ7QUFBQUEsZUFDSmtFLEdBQ0N6d0IsR0FDQSxTQUFDbnBCLEdBQUtvK0MsR0FBQUE7QUFBQUEsaUJBQ0xDLEdBQWlCRixHQUFXekksR0FBT3ZzQixHQUFPbnBCLEdBQUtvK0MsR0FBWTVhLENBQUFBO1FBQUFBLEdBQUFBLElBQzVELEdBRU1yYTtBQUFBQSxVQUdKdXNCLEVBQU00SSxNQUFXSDtBQUFXLGVBQU9oMUI7QUFBQUEsVUFBQUEsQ0FFbEN1c0IsRUFBTW1JO0FBQUFBLGVBQ1ZFLEdBQVlJLEdBQVd6SSxFQUFNcUYsR0FBQUEsSUFBTyxHQUM3QnJGLEVBQU1xRjtBQUFBQSxVQUFBQSxDQUdUckYsRUFBTTZJLEdBQVk7QUFDdEI3SSxVQUFNNkksSUFBQUEsTUFDTjdJLEVBQU00SSxFQUFPbEI7QUFBQUEsWUFDUDdvQixJQUVMbWhCLEVBQU13RSxNQUZEM2xCLEtBRWtDbWhCLEVBQU13RSxNQUF2Q0EsSUFDRnhFLEVBQU1vRixJQUFRRSxHQUFZdEYsRUFBTThJLENBQUFBLElBQ2pDOUksRUFBTW9GLEdBS04yRCxJQUFhbHFCLEdBQ2JvbEIsSUFBQUE7QUFDQWpFLFVBQU13RSxNQURFLE1BRVh1RSxJQUFhLElBQUk3RCxJQUFJcm1CLENBQUFBLEdBQ3JCQSxFQUFPbW5CLE1BQUFBLEdBQ1AvQixJQUFBQSxPQUVEQyxHQUFLNkUsR0FBWSxTQUFDeitDLEdBQUtvK0MsR0FBQUE7QUFBQUEsaUJBQ3RCQyxHQUFpQkYsR0FBV3pJLEdBQU9uaEIsR0FBUXYwQixHQUFLbytDLEdBQVk1YSxHQUFNbVcsQ0FBQUE7UUFBQUEsQ0FBQUEsR0FHbkVvRSxHQUFZSSxHQUFXNXBCLEdBQUFBLEtBQVEsR0FFM0JpUCxLQUFRMmEsRUFBVTNCLEtBQ3JCWCxHQUFVLFNBQUEsRUFBVzZDLEVBQ3BCaEosR0FDQWxTLEdBQ0EyYSxFQUFVM0IsR0FDVjJCLEVBQVUxQixDQUFBQTtNQUFBQTtBQUFBQSxhQUlOL0csRUFBTW9GO0lBQUFBO0FBR2QsYUFBU3VELEdBQ1JGLEdBQ0FRLEdBQ0FDLEdBQ0EvakIsR0FDQXVqQixHQUNBUyxHQUNBQyxHQUFBQTtBQUFBQSxVQUdJbkcsR0FBUXlGLENBQUFBLEdBQWE7QUFBQSxZQVNsQlcsSUFBTWpCLEdBQVNLLEdBQVdDLEdBUC9CUyxLQUNBRixLQUNBQSxFQUFhekUsTUFEYnlFLEtBQ2F6RSxDQUNaQyxHQUFLd0UsRUFBOENLLEdBQVlua0IsQ0FBQUEsSUFDN0Rna0IsRUFBVUksT0FBT3BrQixDQUFBQSxJQUFBQSxNQUNqQnFqQjtBQUFBQSxZQUdKN0QsR0FBSXVFLEdBQWMvakIsR0FBTWtrQixDQUFBQSxHQUFBQSxDQUdwQnBHLEdBQVFvRyxDQUFBQTtBQUVMO0FBRE5aLFVBQVVoQixJQUFBQTtNQUFpQjtBQUVsQjJCLGFBQ1ZGLEVBQWFyRSxJQUFJNkQsQ0FBQUE7QUFBQUEsVUFHZHZGLEdBQVl1RixDQUFBQSxLQUFBQSxDQUFnQjNDLEdBQVMyQyxDQUFBQSxHQUFhO0FBQUEsWUFBQSxDQUNoREQsRUFBVWpCLEVBQU9nQyxLQUFlZixFQUFVZixJQUFxQjtBQUFBO0FBUXBFVSxXQUFTSyxHQUFXQyxDQUFBQSxHQUVmTyxLQUFnQkEsRUFBWUwsRUFBT3ZCLEtBQ3ZDZ0IsR0FBWUksR0FBV0MsQ0FBQUE7TUFBQUE7SUFBQUE7QUFJMUIsYUFBU0wsR0FBWXpCLEdBQW1CbnpCLEdBQVlxeUIsR0FBQUE7QUFBQUEsWUFBQUEsV0FBQUEsSUFBQUEsUUFBTyxDQUVyRGMsRUFBTVMsS0FBV1QsRUFBTVksRUFBT2dDLEtBQWU1QyxFQUFNYSxLQUN2RDVCLEdBQU9weUIsR0FBT3F5QixDQUFBQTtJQUFBQTtBQ3FFaEIsYUFBU3J1QixHQUFLa3dCLEdBQWdCeGlCLEdBQUFBO0FBQUFBLFVBQ3ZCNmEsSUFBUTJILEVBQU16RSxFQUFBQTtBQUFBQSxjQUNMbEQsSUFBUW1GLEdBQU9uRixDQUFBQSxJQUFTMkgsR0FDekJ4aUIsQ0FBQUE7SUFBQUE7QUFjZixhQUFTc2tCLEdBQ1J4L0MsR0FDQWs3QixHQUFBQTtBQUFBQSxVQUdNQSxLQUFRbDdCO0FBQUFBLGlCQUNWbTVDLElBQVFDLE9BQU96eEIsZUFBZTNuQixDQUFBQSxHQUMzQm01QyxLQUFPO0FBQUEsY0FDUHFDLElBQU9wQyxPQUFPMXhCLHlCQUF5Qnl4QixHQUFPamUsQ0FBQUE7QUFBQUEsY0FDaERzZ0I7QUFBTSxtQkFBT0E7QUFDakJyQyxjQUFRQyxPQUFPenhCLGVBQWV3eEIsQ0FBQUE7UUFBQUE7SUFBQUE7QUFBQUEsYUFLaEJzRyxHQUFZMUosR0FBQUE7QUFDdEJBLFFBQU1tSSxNQUNWbkksRUFBTW1JLElBQUFBLE1BQ0ZuSSxFQUFNcUgsS0FDVHFDLEdBQVkxSixFQUFNcUgsQ0FBQUE7SUFBQUE7QUFBQUEsYUFLTHNDLEdBQVkzSixHQUFBQTtBQUN0QkEsUUFBTW9GLE1BQ1ZwRixFQUFNb0YsSUFBUUUsR0FBWXRGLEVBQU1xRixDQUFBQTtJQUFBQTtBQ3REbEMsYUFBZ0J1RSxHQUNmckMsR0FDQTl6QixHQUNBb0QsR0FBQUE7QUFBQUEsVUFHTTh3QixJQUFpQjNELEdBQU12d0IsQ0FBQUEsSUFDMUIweUIsR0FBVSxRQUFBLEVBQVUwRCxFQUFVcDJCLEdBQU9vRCxDQUFBQSxJQUNyQ290QixHQUFNeHdCLENBQUFBLElBQ04weUIsR0FBVSxRQUFBLEVBQVUyRCxFQUFVcjJCLEdBQU9vRCxDQUFBQSxJQUNyQzB3QixFQUFNVSxJQUFBQSxTRHZMVHJiLEdBQ0EvVixHQUFBQTtBQUFBQSxZQUVNZ3RCLElBQVVELE1BQU1DLFFBQVFqWCxDQUFBQSxHQUN4Qm9ULElBQW9CLEVBQ3pCd0UsR0FBT1gsSUFBQUEsSUFBa0MsR0FFekMrRSxHQUFRL3hCLElBQVNBLEVBQU8reEIsSUFBU25DLEdBQUFBLEdBRWpDMEIsR0FBQUEsT0FFQVUsR0FBQUEsT0FFQVMsR0FBVyxDQUFBLEdBRVhqQyxHQUFTeHdCLEdBRVR3dUIsR0FBT3pZLEdBRVBrYyxHQUFRLE1BRVIxRCxHQUFPLE1BRVB3QyxHQUFTLE1BQ1RtQyxHQUFBQSxNQUFXLEdBU1IvL0MsSUFBWWcyQyxHQUNaZ0ssSUFBMkNDO0FBQzNDcEcsY0FDSDc1QyxJQUFTLENBQUNnMkMsQ0FBQUEsR0FDVmdLLElBQVFFO0FBQUFBLFlBQUFBLElBR2VDLE1BQU1DLFVBQVVwZ0QsR0FBUWdnRCxDQUFBQSxHQUF6Q0ssSUFBQUEsRUFBQUEsUUFBUUMsSUFBQUEsRUFBQUE7QUFBQUEsZUFDZnRLLEVBQU04SSxJQUFTd0IsR0FDZnRLLEVBQU00SCxJQUFVeUMsR0FDVEM7TUFBQUEsRUM2SWE3MkIsR0FBT29ELENBQUFBLElBQ3hCc3ZCLEdBQVUsS0FBQSxFQUFPb0UsRUFBZ0I5MkIsR0FBT29ELENBQUFBO0FBQUFBLGNBRTdCQSxJQUFTQSxFQUFPK3hCLElBQVNuQyxHQUFBQSxHQUNqQ1UsRUFBUXFELEtBQUs3QyxDQUFBQSxHQUNaQTtJQUFBQTtBQUFBQSxhQzlOUTNwQixHQUFRdkssR0FBQUE7QUFBQUEsYUFDbEJ3dkIsR0FBUXh2QixDQUFBQSxLQUFRbXZCLEdBQUksSUFBSW52QixDQUFBQSxHQUk5QixTQUFTZzNCLEVBQVloM0IsR0FBQUE7QUFBQUEsWUFBQUEsQ0FDZjB2QixHQUFZMXZCLENBQUFBO0FBQVEsaUJBQU9BO0FBQUFBLFlBRTVCMEQsR0FERTZvQixJQUFnQ3ZzQixFQUFNeXZCLEVBQUFBLEdBRXRDd0gsSUFBV3RHLEdBQVkzd0IsQ0FBQUE7QUFBQUEsWUFDekJ1c0IsR0FBTztBQUFBLGNBQUEsQ0FFUkEsRUFBTW1JLE1BQ05uSSxFQUFNd0UsSUFBUSxLQUFBLENBQU0yQixHQUFVLEtBQUEsRUFBT3dFLEVBQVkzSyxDQUFBQTtBQUVsRCxtQkFBT0EsRUFBTXFGO0FBRWRyRixZQUFNNkksSUFBQUEsTUFDTjF4QixJQUFPeXpCLEdBQVduM0IsR0FBT2kzQixDQUFBQSxHQUN6QjFLLEVBQU02SSxJQUFBQTtRQUFhO0FBRW5CMXhCLGNBQU95ekIsR0FBV24zQixHQUFPaTNCLENBQUFBO0FBQUFBLGVBRzFCeEcsR0FBSy9zQixHQUFNLFNBQUM3c0IsR0FBS28rQyxHQUFBQTtBQUNaMUksZUFBUzBFLEdBQUkxRSxFQUFNcUYsR0FBTy82QyxDQUFBQSxNQUFTbytDLEtBQ3ZDL0QsR0FBSXh0QixHQUFNN3NCLEdBQUttZ0QsRUFBWS9CLENBQUFBLENBQUFBO1FBQUFBLENBQUFBLEdBR3JCZ0MsTUFIcUJoQyxJQUdPLElBQUl4RCxJQUFJL3RCLENBQUFBLElBQVFBO01BQUFBLEVBM0JoQzFELENBQUFBO0lBQUFBO0FBOEJwQixhQUFTbTNCLEdBQVduM0IsR0FBWWkzQixHQUFBQTtBQUFBQSxjQUV2QkEsR0FBQUE7UUFBQUEsS0FBQUE7QUFBQUEsaUJBRUMsSUFBSTFGLElBQUl2eEIsQ0FBQUE7UUFBQUEsS0FBQUE7QUFBQUEsaUJBR1Jtd0IsTUFBTTE1QyxLQUFLdXBCLENBQUFBO01BQUFBO0FBQUFBLGFBRWI2eEIsR0FBWTd4QixDQUFBQTtJQUFBQTtBQUFBQSxhQ2xDSm8zQixLQUFBQTtBQUFBQSxlQThFTkMsRUFDUjNsQixHQUNBeWdCLEdBQUFBO0FBQUFBLFlBRUlILElBQU9GLEVBQVlwZ0IsQ0FBQUE7QUFBQUEsZUFDbkJzZ0IsSUFDSEEsRUFBS0csYUFBYUEsSUFFbEJMLEVBQVlwZ0IsQ0FBQUEsSUFBUXNnQixJQUFPLEVBQzFCRSxjQUFBQSxNQUNBQyxZQUFBQSxHQUNBbEIsS0FBQUEsV0FBQUE7QUFBQUEsY0FDTzFFLElBQVErSyxLQUFLN0gsRUFBQUE7QUFBQUEsaUJBR1orRyxHQUFZdkYsSUFBSTFFLEdBQU83YSxDQUFBQTtRQUFBQSxHQUUvQndmLEtBQUFBLFNBQWVseEIsR0FBQUE7QUFBQUEsY0FDUnVzQixJQUFRK0ssS0FBSzdILEVBQUFBO0FBR25CK0csYUFBWXRGLElBQUkzRSxHQUFPN2EsR0FBTTFSLENBQUFBO1FBQUFBLEVBQUFBLEdBSXpCZ3lCO01BQUFBO0FBQUFBLGVBSUN1RixFQUFpQkMsR0FBQUE7QUFBQUEsaUJBS2hCdGhELElBQUlzaEQsRUFBTzUxQixTQUFTLEdBQUcxckIsS0FBSyxHQUFHQSxLQUFLO0FBQUEsY0FDdENxMkMsSUFBa0JpTCxFQUFPdGhELENBQUFBLEVBQUd1NUMsRUFBQUE7QUFBQUEsY0FBQUEsQ0FDN0JsRCxFQUFNbUk7QUFBQUEsb0JBQ0ZuSSxFQUFNd0UsR0FBQUE7Y0FBQUEsS0FBQUE7QUFFUjBHLGtCQUFnQmxMLENBQUFBLEtBQVEwSixHQUFZMUosQ0FBQUE7QUFBQUE7Y0FBQUEsS0FBQUE7QUFHcENtTCxrQkFBaUJuTCxDQUFBQSxLQUFRMEosR0FBWTFKLENBQUFBO1lBQUFBO1FBQUFBO01BQUFBO0FBQUFBLGVBNkRyQ21MLEVBQWlCbkwsR0FBQUE7QUFBQUEsaUJBQ2xCcUYsSUFBaUJyRixFQUFqQnFGLEdBQU95RCxJQUFVOUksRUFBVjhJLEdBSVIzMkIsSUFBT2t5QixHQUFReUUsQ0FBQUEsR0FDWm4vQyxJQUFJd29CLEVBQUtrRCxTQUFTLEdBQUcxckIsS0FBSyxHQUFHQSxLQUFLO0FBQUEsY0FDcENXLElBQVc2bkIsRUFBS3hvQixDQUFBQTtBQUFBQSxjQUNsQlcsTUFBUTQ0QyxJQUFBQTtBQUFBQSxnQkFDTmtJLElBQVkvRixFQUFNLzZDLENBQUFBO0FBQUFBLGdCQUVwQjhnRCxNQUZvQjlnRCxVQUVwQjhnRCxDQUE0QjNHLEdBQUlZLEdBQU8vNkMsQ0FBQUE7QUFBQUEscUJBQUFBO0FBQ25DLGdCQUtEbXBCLElBQVFxMUIsRUFBT3grQyxDQUFBQSxHQUNmMDFDLElBQW9CdnNCLEtBQVNBLEVBQU15dkIsRUFBQUE7QUFBQUEsZ0JBQ3JDbEQsSUFBUUEsRUFBTXFGLE1BQVUrRixJQUFBQSxDQUFhdEcsR0FBR3J4QixHQUFPMjNCLENBQUFBO0FBQUFBLHFCQUFBQTtVQUMzQztRQUFBO0FBQUEsWUFPSkMsSUFBQUEsQ0FBQUEsQ0FBZ0JoRyxFQUFNbkMsRUFBQUE7QUFBQUEsZUFDckIvd0IsRUFBS2tELFdBQVdndkIsR0FBUWdCLENBQUFBLEVBQU9od0IsVUFBVWcyQixJQUFjLElBQUk7TUFBQTtBQUFBLGVBRzFESCxFQUFnQmxMLEdBQUFBO0FBQUFBLFlBQ2pCOEksSUFBVTlJLEVBQVY4STtBQUFBQSxZQUNIQSxFQUFPenpCLFdBQVcycUIsRUFBTXFGLEVBQU1od0I7QUFBUSxpQkFBQTtBQUFPLFlBUzNDL0MsSUFBYSt3QixPQUFPMXhCLHlCQUN6Qm0zQixHQUNBQSxFQUFPenpCLFNBQVMsQ0FBQTtBQUFBLFlBR2IvQyxLQUFBQSxDQUFlQSxFQUFXb3lCO0FBQUssaUJBQUE7QUFBTyxpQkFFakMvNkMsSUFBSSxHQUFHQSxJQUFJbS9DLEVBQU96ekIsUUFBUTFyQjtBQUFBQSxjQUFBQSxDQUM3Qm0vQyxFQUFPMS9DLGVBQWVPLENBQUFBO0FBQUksbUJBQUE7QUFBTyxlQUFBO01BR2hDO0FBQUEsZUFTQzJoRCxFQUFnQnRMLEdBQUFBO0FBQ3BCQSxVQUFNNkgsS0FBVWpGLEdBQUksR0FBRzJJLEtBQUt2eEIsVUFBVW1yQixHQUFPbkYsQ0FBQUEsQ0FBQUEsQ0FBQUE7TUFBQUE7QUFBQUEsVUF4SzVDdUYsSUFBb0QsQ0FBQTtBQTJLMURnQixTQUFXLE9BQU8sRUFDakJnRSxHQUFBQSxTQTVNQTNkLEdBQ0EvVixHQUFBQTtBQUFBQSxZQUVNZ3RCLElBQVVELE1BQU1DLFFBQVFqWCxDQUFBQSxHQUN4QithLElBQUFBLFNBMUJpQjlELEdBQWtCalgsR0FBQUE7QUFBQUEsY0FDckNpWCxHQUFTO0FBQUEscUJBQ044RCxJQUFZL0QsTUFBTWhYLEVBQUt2WCxNQUFBQSxHQUNwQjFyQixJQUFJLEdBQUdBLElBQUlpakMsRUFBS3ZYLFFBQVExckI7QUFDaEMwNUMscUJBQU81eEIsZUFBZWsyQixHQUFPLEtBQUtoK0MsR0FBR21oRCxFQUFjbmhELEdBQUFBLElBQUcsQ0FBQTtBQUFBLG1CQUNoRGcrQztVQUFBQTtBQUFBQSxjQUVEcEMsSUFBY0MsR0FBMEI1WSxDQUFBQTtBQUFBQSxpQkFDdkMyWSxFQUFZckMsRUFBQUE7QUFBQUEsbUJBQ2Ivd0IsSUFBT2t5QixHQUFRa0IsQ0FBQUEsR0FDWjU3QyxJQUFJLEdBQUdBLElBQUl3b0IsRUFBS2tELFFBQVExckIsS0FBSztBQUFBLGdCQUMvQlcsS0FBVzZuQixFQUFLeG9CLENBQUFBO0FBQ3RCNDdDLGNBQVlqN0MsRUFBQUEsSUFBT3dnRCxFQUNsQnhnRCxJQUNBdTVDLEtBQUFBLENBQUFBLENBQWEwQixFQUFZajdDLEVBQUFBLEVBQUtzN0MsVUFBQUE7VUFBQUE7QUFBQUEsaUJBR3pCdkMsT0FBT3hpQixPQUFPd2lCLE9BQU96eEIsZUFBZWdiLENBQUFBLEdBQU8yWSxDQUFBQTtRQUFBQSxFQVN0QjFCLEdBQVNqWCxDQUFBQSxHQUVoQ29ULElBQXdDLEVBQzdDd0UsR0FBT1gsSUFBQUEsSUFBZ0MsR0FDdkMrRSxHQUFRL3hCLElBQVNBLEVBQU8reEIsSUFBU25DLEdBQUFBLEdBQ2pDMEIsR0FBQUEsT0FDQVUsR0FBQUEsT0FDQVMsR0FBVyxDQUFBLEdBQ1hqQyxHQUFTeHdCLEdBRVR3dUIsR0FBT3pZLEdBRVBrYyxHQUFRbkIsR0FDUnZDLEdBQU8sTUFDUHlDLEdBQUFBLE9BQ0FrQyxHQUFBQSxNQUFXO0FBQUEsZUFHWjFHLE9BQU81eEIsZUFBZWsyQixHQUFPekUsSUFBYSxFQUN6Q3p2QixPQUFPdXNCLEdBRVAwRixVQUFBQSxLQUFVLENBQUEsR0FFSmlDO01BQUFBLEdBa0xQTyxHQUFBQSxTQXZQQXRCLEdBQ0EvbkIsR0FDQW1wQixHQUFBQTtBQUVLQSxZQVNKL0UsR0FBUXBrQixDQUFBQSxLQUNQQSxFQUFPcWtCLEVBQUFBLEVBQTBCMEYsTUFBV2hDLEtBRTdDb0UsRUFBaUJwRSxFQUFNTyxDQUFBQSxLQVhuQlAsRUFBTUUsS0FBQUEsU0F3SEgwRSxFQUF1Qm5YLEdBQUFBO0FBQUFBLGNBQzFCQSxLQUE0QixPQUFYQSxLQUFXLFVBQVhBO0FBQUFBLGdCQUNoQjJMLElBQThCM0wsRUFBTzZPLEVBQUFBO0FBQUFBLGdCQUN0Q2xELEdBQUFBO0FBQUFBLGtCQUNFcUYsSUFBbUNyRixFQUFuQ3FGLEdBQU95RCxJQUE0QjlJLEVBQTVCOEksR0FBUVEsSUFBb0J0SixFQUFwQnNKLEdBQVc5RSxJQUFTeEUsRUFBVHdFO0FBQUFBLGtCQUM3QkEsTUFENkJBO0FBTWhDTixtQkFBSzRFLEdBQVEsU0FBQXgrQyxJQUFBQTtBQUNQQSxrQkFBQUEsT0FBZ0I0NEMsT0FFaEJtQyxFQUFjLzZDLEVBQUFBLE1BRkU0NEMsVUFFcUJ1QixHQUFJWSxHQUFPLzZDLEVBQUFBLElBR3pDZy9DLEVBQVVoL0MsRUFBQUEsS0FFckJraEQsRUFBdUIxQyxFQUFPeCtDLEVBQUFBLENBQUFBLEtBSjlCZy9DLEVBQVVoL0MsRUFBQUEsSUFBQUEsTUFDVm8vQyxHQUFZMUosQ0FBQUE7Z0JBQUFBLENBQUFBLEdBT2RrRSxHQUFLbUIsR0FBTyxTQUFBLzZDLElBQUFBO0FBRVB3K0Msb0JBQU94K0MsRUFBQUEsTUFGQUEsVUFFdUJtNkMsR0FBSXFFLEdBQVF4K0MsRUFBQUEsTUFDN0NnL0MsRUFBVWgvQyxFQUFBQSxJQUFBQSxPQUNWby9DLEdBQVkxSixDQUFBQTtnQkFBQUEsQ0FBQUE7dUJBR0p3RSxNQUFKLEdBQWtDO0FBQUEsb0JBQ3BDMEcsRUFBZ0JsTCxDQUFBQSxNQUNuQjBKLEdBQVkxSixDQUFBQSxHQUNac0osRUFBVWowQixTQUFBQSxPQUdQeXpCLEVBQU96ekIsU0FBU2d3QixFQUFNaHdCO0FBQUFBLDJCQUNoQjFyQixJQUFJbS9DLEVBQU96ekIsUUFBUTFyQixJQUFJMDdDLEVBQU1od0IsUUFBUTFyQjtBQUFLMi9DLHNCQUFVMy9DLENBQUFBLElBQUFBOztBQUFLLDJCQUV6REEsSUFBSTA3QyxFQUFNaHdCLFFBQVExckIsSUFBSW0vQyxFQUFPenpCLFFBQVExckI7QUFBSzIvQyxzQkFBVTMvQyxDQUFBQSxJQUFBQTtBQUFLLHlCQUk3RHNoQyxLQUFNd2dCLEtBQUt4Z0IsSUFBSTZkLEVBQU96ekIsUUFBUWd3QixFQUFNaHdCLE1BQUFBLEdBRWpDMXJCLEtBQUksR0FBR0EsS0FBSXNoQyxJQUFLdGhDO0FBRW5CbS9DLG9CQUFPMS9DLGVBQWVPLEVBQUFBLE1BQzFCMi9DLEVBQVUzL0MsRUFBQUEsSUFBQUEsT0FFUDIvQyxFQUFVMy9DLEVBQUFBLE1BRkUsVUFFZ0I2aEQsRUFBdUIxQyxFQUFPbi9DLEVBQUFBLENBQUFBO2NBQUFBO1lBQUFBO1VBQUFBO1FBQUFBLEVBeEt2Q2k5QyxFQUFNTyxFQUFTLENBQUEsQ0FBQSxHQUd2QzZELEVBQWlCcEUsRUFBTU8sQ0FBQUE7TUFBQUEsR0ErT3hCd0QsR0FBQUEsU0Fib0IzSyxHQUFBQTtBQUFBQSxlQUNiQSxFQUFNd0UsTUFET3hFLElBRWpCbUwsRUFBaUJuTCxDQUFBQSxJQUNqQmtMLEVBQWdCbEwsQ0FBQUE7TUFBQUEsRUFBQUEsQ0FBQUE7SUFBQUE7QUk1SmJ2c0IsUUFBQUEsSVRuRkppekIsSVVwQkVnRixLQUNhLE9BQVhDLFNBQVcsT0FBc0MsT0FBaEJBLE9BQU8sR0FBQSxLQUFTLFVBQzVDNUcsS0FBd0IsT0FBUkMsTUFBUSxLQUN4QkMsS0FBd0IsT0FBUkMsTUFBUSxLQUN4QjBHLEtBQ0ssT0FBVnpCLFFBQVUsT0FDVkEsTUFBTUMsY0FETkQsVUFFWSxPQUFaMEIsVUFBWSxLQUtQdEQsS0FBbUJtRCxLQUM3QkMsT0FBT0csSUFBSSxlQUFBLE1BQUFsZ0QsS0FBQSxDQUFBLEdBQ1IsZUFBQSxJQUFBLE1BQWtCQSxLQVVYazRDLEtBQTJCNEgsS0FDckNDLE9BQU9HLElBQUksaUJBQUEsSUFDVixzQkFFUzVJLEtBQTZCd0ksS0FDdkNDLE9BQU9HLElBQUksYUFBQSxJQUNWO0FEeUVJcjRCLFFYekVGa3dCLEtBQW1CTixLQUFBQSxPQUFPNVosVUFBVStaLGFBNEI3QmEsS0FDTyxPQUFad0gsVUFBWSxPQUFlQSxRQUFReEgsVUFDdkN3SCxRQUFReEgsVUFDRGhCLE9BQU9sNkMsMEJBRE5rN0MsU0FFUixTQUFBcGxCLEdBQUFBO0FBQUFBLGFBQ0Fva0IsT0FBTzN4QixvQkFBb0J1TixDQUFBQSxFQUFLc3FCLE9BQy9CbEcsT0FBT2w2QyxzQkFBc0I4MUIsQ0FBQUEsQ0FBQUE7SUFBQUEsSUFFSG9rQixPQUFPM3hCLHFCQUV6Qjh6QixLQUNabkMsT0FBT21DLDZCQUNQLFNBQW1DeDdDLEdBQUFBO0FBQUFBLFVBRTVCcS9DLElBQVcsQ0FBQTtBQUFBLGFBQ2pCaEYsR0FBUXI2QyxDQUFBQSxFQUFRczZDLFFBQVEsU0FBQWg2QyxHQUFBQTtBQUN2QisrQyxVQUFJLytDLENBQUFBLElBQU8rNEMsT0FBTzF4Qix5QkFBeUIzbkIsR0FBUU0sQ0FBQUE7TUFBQUEsQ0FBQUEsR0FFN0MrK0M7SUFBQUEsR0NuRUgvQyxLQTRCRixDQUFBLEdHeURTMkQsS0FBd0MsRUFDcER2RixLQUFBQSxTQUFJMUUsR0FBTzdhLEdBQUFBO0FBQUFBLFVBQ05BLE1BQVMrZDtBQUFhLGVBQU9sRDtBQUFBQSxVQUUzQi8xQyxJQUFTazdDLEdBQU9uRixDQUFBQTtBQUFBQSxVQUFBQSxDQUNqQnlFLEdBQUl4NkMsR0FBUWs3QixDQUFBQTtBQUFBQSxlQXdJbkIsU0FBMkI2YSxHQUFtQi8xQyxHQUFhazdCLEdBQUFBO0FBQUFBLGNBQUFBLEdBQ3BEc2dCLElBQU9nRSxHQUF1QngvQyxHQUFRazdCLENBQUFBO0FBQUFBLGlCQUNyQ3NnQixJQUNKLFdBQVdBLElBQ1ZBLEVBQUtoeUIsU0FBQUEsSUFHTGd5QixFQUFLZixTQUhBanhCLFFBR0FpeEIsTUFBQUEsU0FBQUEsU0FBTHFILEVBQVV4SSxLQUFLdkQsRUFBTThJLENBQUFBLElBQUFBO1FBQ3RCTixFQTlJd0J4SSxHQUFPLzFDLEdBQVFrN0IsQ0FBQUE7QUFBQUEsVUFFbkMxUixJQUFReHBCLEVBQU9rN0IsQ0FBQUE7QUFBQUEsYUFDakI2YSxFQUFNNkksS0FBQUEsQ0FBZTFGLEdBQVkxdkIsQ0FBQUEsSUFDN0JBLElBSUpBLE1BQVVnRSxHQUFLdW9CLEVBQU1xRixHQUFPbGdCLENBQUFBLEtBQy9Cd2tCLEdBQVkzSixDQUFBQSxHQUNKQSxFQUFNb0YsRUFBT2pnQixDQUFBQSxJQUFleWtCLEdBQ25DNUosRUFBTTRJLEVBQU9wQixHQUNiL3pCLEdBQ0F1c0IsQ0FBQUEsS0FHS3ZzQjtJQUFBQSxHQUVSZ3hCLEtBQUFBLFNBQUl6RSxHQUFPN2EsR0FBQUE7QUFBQUEsYUFDSEEsS0FBUWdnQixHQUFPbkYsQ0FBQUE7SUFBQUEsR0FFdkJxRSxTQUFBQSxTQUFRckUsR0FBQUE7QUFBQUEsYUFDQTZMLFFBQVF4SCxRQUFRYyxHQUFPbkYsQ0FBQUEsQ0FBQUE7SUFBQUEsR0FFL0IyRSxLQUFBQSxTQUNDM0UsR0FDQTdhLEdBQ0ExUixHQUFBQTtBQUFBQSxVQUVNZ3lCLElBQU9nRSxHQUF1QnRFLEdBQU9uRixDQUFBQSxHQUFRN2EsQ0FBQUE7QUFBQUEsVUFDL0NzZ0IsR0FBTWQ7QUFBQUEsZUFHVGMsRUFBS2QsSUFBSXBCLEtBQUt2RCxFQUFNOEksR0FBUXIxQixDQUFBQSxHQUFBQTtBQUNyQixVQUFBLENBRUh1c0IsRUFBTW1JLEdBQVc7QUFBQSxZQUdmbnFCLElBQVV2RyxHQUFLMHRCLEdBQU9uRixDQUFBQSxHQUFRN2EsQ0FBQUEsR0FFOUI2bUIsSUFBaUNodUIsSUFBVWtsQixFQUFBQTtBQUFBQSxZQUM3QzhJLEtBQWdCQSxFQUFhM0csTUFBVTV4QjtBQUFBQSxpQkFDMUN1c0IsRUFBTW9GLEVBQU9qZ0IsQ0FBQUEsSUFBUTFSLEdBQ3JCdXNCLEVBQU1zSixFQUFVbmtCLENBQUFBLElBQUFBLE9BQVE7QUFDakIsWUFFSjJmLEdBQUdyeEIsR0FBT3VLLENBQUFBLE1BQWF2SyxNQUFidUssVUFBb0N5bUIsR0FBSXpFLEVBQU1xRixHQUFPbGdCLENBQUFBO0FBQ2xFLGlCQUFBO0FBQ0R3a0IsV0FBWTNKLENBQUFBLEdBQ1owSixHQUFZMUosQ0FBQUE7TUFBQUE7QUFBQUEsYUFJWEEsRUFBTW9GLEVBQU9qZ0IsQ0FBQUEsTUFBVTFSLE1BRXRCQSxNQUZzQkEsVUFFQzBSLEtBQVE2YSxFQUFNb0YsTUFFdEM2RyxPQUFPQyxNQUFNejRCLENBQUFBLEtBQVV3NEIsT0FBT0MsTUFBTWxNLEVBQU1vRixFQUFPamdCLENBQUFBLENBQUFBLE1BS25ENmEsRUFBTW9GLEVBQU9qZ0IsQ0FBQUEsSUFBUTFSLEdBQ3JCdXNCLEVBQU1zSixFQUFVbmtCLENBQUFBLElBQUFBLE9BQVE7SUFKaEIsR0FPVGduQixnQkFBQUEsU0FBZW5NLEdBQU83YSxHQUFBQTtBQUFBQSxhQUVqQjFOLEdBQUt1b0IsRUFBTXFGLEdBQU9sZ0IsQ0FBQUEsTUFGREEsVUFFd0JBLEtBQVE2YSxFQUFNcUYsS0FDMURyRixFQUFNc0osRUFBVW5rQixDQUFBQSxJQUFBQSxPQUNoQndrQixHQUFZM0osQ0FBQUEsR0FDWjBKLEdBQVkxSixDQUFBQSxLQUFBQSxPQUdMQSxFQUFNc0osRUFBVW5rQixDQUFBQSxHQUdwQjZhLEVBQU1vRixLQUFBQSxPQUFjcEYsRUFBTW9GLEVBQU1qZ0IsQ0FBQUEsR0FBQUE7SUFDN0IsR0FJUnhULDBCQUFBQSxTQUF5QnF1QixHQUFPN2EsR0FBQUE7QUFBQUEsVUFDekJpbkIsSUFBUWpILEdBQU9uRixDQUFBQSxHQUNmeUYsSUFBT29HLFFBQVFsNkIseUJBQXlCeTZCLEdBQU9qbkIsQ0FBQUE7QUFBQUEsYUFDaERzZ0IsS0FDRSxFQUNOQyxVQUFBQSxNQUNBQyxjQUFjM0YsRUFBTXdFLE1BQXBCbUIsS0FBc0R4Z0IsTUFBUyxVQUMvRHlnQixZQUFZSCxFQUFLRyxZQUNqQm55QixPQUFPMjRCLEVBQU1qbkIsQ0FBQUEsRUFBQUE7SUFMSXNnQixHQVFuQmgwQixnQkFBQUEsV0FBQUE7QUFDQ214QixTQUFJLEVBQUE7SUFBQSxHQUVMaHhCLGdCQUFBQSxTQUFlb3VCLEdBQUFBO0FBQUFBLGFBQ1BxRCxPQUFPenhCLGVBQWVvdUIsRUFBTXFGLENBQUFBO0lBQUFBLEdBRXBDZ0gsZ0JBQUFBLFdBQUFBO0FBQ0N6SixTQUFJLEVBQUE7SUFBQSxFQUFBLEdBUUFzSCxLQUE4QyxDQUFBO0FBQ3BEaEcsT0FBSytGLElBQWEsU0FBQzMvQyxHQUFLeXdCLEdBQUFBO0FBRXZCbXZCLFNBQVc1L0MsQ0FBQUEsSUFBTyxXQUFBO0FBQUEsZUFDakJnaUQsVUFBVSxDQUFBLElBQUtBLFVBQVUsQ0FBQSxFQUFHLENBQUEsR0FDckJ2eEIsRUFBR3d4QixNQUFNeEIsTUFBTXVCLFNBQUFBO01BQUFBO0lBQUFBLENBQUFBLEdBR3hCcEMsR0FBV2lDLGlCQUFpQixTQUFTbk0sR0FBTzdhLEdBQUFBO0FBQUFBLGFBR3BDK2tCLEdBQVd2RixJQUFLcEIsS0FBS3dILE1BQU0vSyxHQUFPN2EsR0FBQUEsTUFBTXFqQjtJQUFBQSxHQUVoRDBCLEdBQVd2RixNQUFNLFNBQVMzRSxHQUFPN2EsR0FBTTFSLEdBQUFBO0FBQUFBLGFBRS9CdzJCLEdBQVl0RixJQUFLcEIsS0FBS3dILE1BQU0vSyxFQUFNLENBQUEsR0FBSTdhLEdBQU0xUixHQUFPdXNCLEVBQU0sQ0FBQSxDQUFBO0lBQUE7QUFBQSxRQ3BNcER3TSxLQUFiLFdBQUE7QUFBQSxlQUFBLEVBS2E5WCxHQUFBQTtBQUFBQSxZQUFBQSxJQUFBQTtBQUFBQSxhQUFBQSxJQUpXa1gsSUFBQUEsS0FBQUEsSUFBQUEsTUFFQSxLQUFBLFVBNEJILFNBQUNoZixHQUFXNmYsR0FBYzVGLEdBQUFBO0FBQUFBLGNBRXpCLE9BQVRqYSxLQUFTLGNBQWdDLE9BQVg2ZixLQUFXLFlBQVk7QUFBQSxnQkFDekRDLElBQWNEO0FBQ3BCQSxnQkFBUzdmO0FBQUFBLGdCQUVINVosSUFBT21CO0FBQUFBLG1CQUNOLFNBRU55WSxHQUFBQTtBQUFBQSxrQkFBQUEsSUFBQUE7QUFBQUEsb0JBQUFBLFdBQUFBLElBQU84ZjtBQUFBQSx1QkFBQUEsSUFBQUEsVUFBQUEsUUFDSno1QixLQUFBQSxNQUFBQSxJQUFBQSxJQUFBQSxJQUFBQSxJQUFBQSxDQUFBQSxHQUFBQSxLQUFBQSxHQUFBQSxLQUFBQSxHQUFBQTtBQUFBQSxnQkFBQUEsR0FBQUEsS0FBQUEsQ0FBQUEsSUFBQUEsVUFBQUEsRUFBQUE7QUFBQUEscUJBRUlELEVBQUsyNUIsUUFBUS9mLEdBQU0sU0FBQythLElBQUFBO0FBQUFBLG9CQUFBQTtBQUFBQSx3QkFBQUEsSUFBbUI4RSxHQUFPbEosS0FBQUEsTUFBQUEsR0FBQUEsQ0FBS3FKLEdBQU1qRixFQUFBQSxFQUFBQSxPQUFVMTBCLEVBQUFBLENBQUFBO2NBQUFBLENBQUFBO1lBQUFBO1VBQUFBO0FBQUFBLGNBUXhFNEw7QUFBQUEsY0FKa0IsT0FBWDR0QixLQUFXLGNBQVk3SixHQUFJLENBQUEsR0FDbENpRSxNQURrQyxVQUNzQixPQUFsQkEsS0FBa0IsY0FDM0RqRSxHQUFJLENBQUEsR0FLRE8sR0FBWXZXLENBQUFBLEdBQU87QUFBQSxnQkFDaEJnYSxJQUFRVSxHQUFXbnpCLENBQUFBLEdBQ25CbTJCLElBQVFWLEdBQVl6MUIsR0FBTXlZLEdBQUFBLE1BQU00YixHQUNsQ3FFLElBQUFBO0FBQVcsZ0JBQUE7QUFFZGh1QixrQkFBUzR0QixFQUFPbkMsQ0FBQUEsR0FDaEJ1QyxJQUFBQTtZQUFXLFVBQUE7QUFHUEEsa0JBQVU1RixHQUFZTCxDQUFBQSxJQUNyQk0sR0FBV04sQ0FBQUE7WUFBQUE7QUFBQUEsbUJBRU0sT0FBWmtHLFVBQVksT0FBZWp1QixhQUFrQml1QixVQUNoRGp1QixFQUFPa3VCLEtBQ2IsU0FBQWx1QixHQUFBQTtBQUFBQSxxQkFDQzhuQixHQUFrQkMsR0FBT0MsQ0FBQUEsR0FDbEJpQixHQUFjanBCLEdBQVErbkIsQ0FBQUE7WUFBQUEsR0FFOUIsU0FBQS9ELEdBQUFBO0FBQUFBLG9CQUNDb0UsR0FBWUwsQ0FBQUEsR0FDTi9EO1lBQUFBLENBQUFBLEtBSVQ4RCxHQUFrQkMsR0FBT0MsQ0FBQUEsR0FDbEJpQixHQUFjanBCLEdBQVErbkIsQ0FBQUE7VUFBQUE7QUFDdkIsY0FBQSxDQUFLaGEsS0FBd0IsT0FBVEEsS0FBUyxVQUFVO0FBQUEsaUJBQzdDL04sSUFBUzR0QixFQUFPN2YsQ0FBQUEsT0FENkIsV0FFbkIvTixJQUFTK04sSUFDL0IvTixNQUFXMHBCLE9BQVMxcEIsSUFBQUEsU0FDcEIxSyxFQUFLcTFCLEtBQWEzRCxHQUFPaG5CLEdBQUFBLElBQVEsR0FDakNnb0IsR0FBZTtBQUFBLGtCQUNacDhDLElBQWEsQ0FBQSxHQUNidWlELElBQWMsQ0FBQTtBQUNwQjdHLGlCQUFVLFNBQUEsRUFBV21DLEVBQTRCMWIsR0FBTS9OLEdBQVFwMEIsR0FBR3VpRCxDQUFBQSxHQUNsRW5HLEVBQWNwOEMsR0FBR3VpRCxDQUFBQTtZQUFBQTtBQUFBQSxtQkFFWG51QjtVQUFBQTtBQUNEK2pCLGFBQUksSUFBSWhXLENBQUFBO1FBQUFBLEdBQUFBLEtBQUFBLHFCQUcwQixTQUFDQSxHQUFXNmYsR0FBQUE7QUFBQUEsY0FFakMsT0FBVDdmLEtBQVM7QUFBVEEsbUJBQ0gsU0FBQ29ULEdBQUFBO0FBQUFBLHVCQUFBQSxJQUFBQSxVQUFBQSxRQUFlL3NCLElBQUFBLE1BQUFBLElBQUFBLElBQUFBLElBQUFBLElBQUFBLENBQUFBLEdBQUFBLElBQUFBLEdBQUFBLElBQUFBLEdBQUFBO0FBQUFBLGtCQUFBQSxJQUFBQSxDQUFBQSxJQUFBQSxVQUFBQSxDQUFBQTtBQUFBQSxxQkFDdEJrQixFQUFLODRCLG1CQUFtQmpOLEdBQU8sU0FBQzJILEdBQUFBO0FBQUFBLHVCQUFlL2EsRUFBQUEsTUFBQUEsUUFBQUEsQ0FBSythLENBQUFBLEVBQUFBLE9BQVUxMEIsQ0FBQUEsQ0FBQUE7Y0FBQUEsQ0FBQUE7WUFBQUE7QUFBQUEsY0FHNURpNkIsR0FBa0JDLEdBQ2hCdHVCLElBQVMxSyxFQUFLdzRCLFFBQVEvZixHQUFNNmYsR0FBUSxTQUFDaGlELEdBQVl1aUQsR0FBQUE7QUFDdERFLGdCQUFVemlELEdBQ1YwaUQsSUFBaUJIO1VBQUFBLENBQUFBO0FBQUFBLGlCQUdLLE9BQVpGLFVBQVksT0FBZWp1QixhQUFrQml1QixVQUNoRGp1QixFQUFPa3VCLEtBQUssU0FBQUssR0FBQUE7QUFBQUEsbUJBQWEsQ0FBQ0EsR0FBV0YsR0FBVUMsQ0FBQUE7VUFBQUEsQ0FBQUEsSUFFaEQsQ0FBQ3R1QixHQUFRcXVCLEdBQVVDLENBQUFBO1FBQUFBLEdBekdRLE9BQXZCelksR0FBUTJZLGNBQWUsYUFDakN0QyxLQUFLdUMsY0FBYzVZLEVBQVEyWSxVQUFBQSxHQUNNLE9BQXZCM1ksR0FBUTZZLGNBQWUsYUFDakN4QyxLQUFLeUMsY0FBYzlZLEVBQVE2WSxVQUFBQTtNQUFBQTtBQUFBQSxVQUFBQSxJQUFBQSxFQUFBQTtBQUFBQSxhQUFBQSxFQXlHN0JFLGNBQUEsU0FBaUM3Z0IsR0FBQUE7QUFDM0J1VyxXQUFZdlcsQ0FBQUEsS0FBT2dXLEdBQUksQ0FBQSxHQUN4QkssR0FBUXJXLENBQUFBLE1BQU9BLElBQU81TyxHQUFRNE8sQ0FBQUE7QUFBQUEsWUFDNUJnYSxJQUFRVSxHQUFXeUQsSUFBQUEsR0FDbkJULElBQVFWLEdBQVltQixNQUFNbmUsR0FBQUEsTUFBTTRiO0FBQUFBLGVBQ3RDOEIsRUFBTXBILEVBQUFBLEVBQWE2RyxJQUFBQSxNQUNuQjdDLEdBQVdOLENBQUFBLEdBQ0owRDtNQUFBQSxHQUFBQSxFQUdSb0QsY0FBQSxTQUNDL0YsR0FDQWQsR0FBQUE7QUFBQUEsWUFFTTdHLElBQW9CMkgsS0FBVUEsRUFBY3pFLEVBQUFBLEdBS25DMEQsSUFBUzVHLEVBQWpCNEk7QUFBQUEsZUFDUGpDLEdBQWtCQyxHQUFPQyxDQUFBQSxHQUNsQmlCLEdBQUFBLFFBQXlCbEIsQ0FBQUE7TUFBQUEsR0FBQUEsRUFRakM0RyxnQkFBQSxTQUFjLzVCLEdBQUFBO0FBQUFBLGFBQ1IrMUIsSUFBYy8xQjtNQUFBQSxHQUFBQSxFQVNwQjY1QixnQkFBQSxTQUFjNzVCLEdBQUFBO0FBQ1RBLGFBQUFBLENBQVVtNEIsTUFDYmhKLEdBQUksRUFBQSxHQUFBLEtBRUFxRixJQUFjeDBCO01BQUFBLEdBQUFBLEVBR3BCazZCLGVBQUEsU0FBa0MvZ0IsR0FBU3NnQixHQUFBQTtBQUFBQSxZQUd0Q3ZqRDtBQUFBQSxhQUNDQSxJQUFJdWpELEVBQVE3M0IsU0FBUyxHQUFHMXJCLEtBQUssR0FBR0EsS0FBSztBQUFBLGNBQ25DaWtELElBQVFWLEVBQVF2akQsQ0FBQUE7QUFBQUEsY0FDbEJpa0QsRUFBTTlmLEtBQUt6WSxXQUFXLEtBQUt1NEIsRUFBTUMsT0FBTyxXQUFXO0FBQ3REamhCLGdCQUFPZ2hCLEVBQU1uNkI7QUFBQUE7VUFBQUE7UUFBQUE7QUFNWDlwQixZQUFBQSxPQUNIdWpELElBQVVBLEVBQVF2MUIsTUFBTWh1QixJQUFJLENBQUE7QUFBQSxZQUd2Qm1rRCxJQUFtQjNILEdBQVUsU0FBQSxFQUFXNEg7QUFBQUEsZUFDMUM5SyxHQUFRclcsQ0FBQUEsSUFFSmtoQixFQUFpQmxoQixHQUFNc2dCLENBQUFBLElBR3hCbkMsS0FBSzRCLFFBQVEvZixHQUFNLFNBQUMrYSxHQUFBQTtBQUFBQSxpQkFDMUJtRyxFQUFpQm5HLEdBQU91RixDQUFBQTtRQUFBQSxDQUFBQTtNQUFBQSxHQUFBQTtJQUFBQSxFQXhMM0IsR01aTTNGLEtBQVEsSUFBSWlGLE1BcUJMRyxLQUFvQnBGLEdBQU1vRixTQU8xQk0sS0FBMEMxRixHQUFNMEYsbUJBQW1CZSxLQUMvRXpHLEVBQUFBLEdBUVlpRyxLQUFnQmpHLEdBQU1pRyxjQUFjUSxLQUFLekcsRUFBQUEsR0FRekMrRixLQUFnQi9GLEdBQU0rRixjQUFjVSxLQUFLekcsRUFBQUEsR0FPekNvRyxLQUFlcEcsR0FBTW9HLGFBQWFLLEtBQUt6RyxFQUFBQSxHQU12Q2tHLEtBQWNsRyxHQUFNa0csWUFBWU8sS0FBS3pHLEVBQUFBLEdBVXJDbUcsS0FBY25HLEdBQU1tRyxZQUFZTSxLQUFLekcsRUFBQUEsR0FBQUEsS0FBQUE7QUUxRm5DLGFBQVIwRyxHQUF5Qm5ULEdBQUc7QUFDakM7QUFFQSxhQUFPbVQsS0FBd0IsT0FBTyxVQUFyQixjQUEyQyxPQUFPLE9BQU8sWUFBMUIsV0FBcUMsU0FBVW5ULEdBQUc7QUFDaEcsZUFBTyxPQUFPQTtNQUNoQixJQUFJLFNBQVVBLEdBQUc7QUFDZixlQUFPQSxLQUFtQixPQUFPLFVBQXJCLGNBQStCQSxFQUFFLGdCQUFnQixVQUFVQSxNQUFNLE9BQU8sWUFBWSxXQUFXLE9BQU9BO01BQ3BILEdBQUdtVCxHQUFRblQsQ0FBQztJQUNkO0FDUGUsYUFBUm9ULEdBQTZCdGpELEdBQUdELEdBQUc7QUFDeEMsVUFBZ0JzakQsR0FBUXJqRCxDQUFDLEtBQXJCLFlBQTBCLENBQUNBO0FBQUcsZUFBT0E7QUFDekMsVUFBSW9CLElBQUlwQixFQUFFLE9BQU8sV0FBVztBQUM1QixVQUFlb0IsTUFBWCxRQUFjO0FBQ2hCLFlBQUlyQyxJQUFJcUMsRUFBRSxLQUFLcEIsR0FBR0QsS0FBSyxTQUFTO0FBQ2hDLFlBQWdCc2pELEdBQVF0a0QsQ0FBQyxLQUFyQjtBQUF3QixpQkFBT0E7QUFDbkMsY0FBTSxJQUFJLFVBQVUsOENBQThDO01BQ3BFO0FBQ0EsY0FBcUJnQixNQUFiLFdBQWlCLFNBQVMsUUFBUUMsQ0FBQztJQUM3QztBQ1JlLGFBQVJ1akQsR0FBK0J2akQsR0FBRztBQUN2QyxVQUFJakIsSUFBSXVrRCxHQUFZdGpELEdBQUcsUUFBUTtBQUMvQixhQUFtQnFqRCxHQUFRdGtELENBQUMsS0FBckIsV0FBeUJBLElBQUksT0FBT0EsQ0FBQztJQUM5QztBQ0plLGFBQVJ5a0QsR0FBaUNudkIsR0FBSzMwQixHQUFLbXBCLEdBQU87QUFDdkQsYUFBQW5wQixJQUFNNmpELEdBQWM3akQsQ0FBRyxHQUNuQkEsS0FBTzIwQixJQUNULE9BQU8sZUFBZUEsR0FBSzMwQixHQUFLLEVBQzlCLE9BQU9tcEIsR0FDUCxZQUFZLE1BQ1osY0FBYyxNQUNkLFVBQVUsS0FDWixDQUFDLElBRUR3TCxFQUFJMzBCLENBQUcsSUFBSW1wQixHQUVOd0w7SUFDVDtBQ2JBLGFBQVNvbEIsR0FBUSxHQUFHMTVDLEdBQUc7QUFDckIsVUFBSUMsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNyQixVQUFJLE9BQU8sdUJBQXVCO0FBQ2hDLFlBQUlrd0MsSUFBSSxPQUFPLHNCQUFzQixDQUFDO0FBQ3RDbndDLGNBQU1td0MsSUFBSUEsRUFBRSxPQUFPLFNBQVVud0MsR0FBRztBQUM5QixpQkFBTyxPQUFPLHlCQUF5QixHQUFHQSxDQUFDLEVBQUU7UUFDL0MsQ0FBQyxJQUFJQyxFQUFFLEtBQUssTUFBTUEsR0FBR2t3QyxDQUFDO01BQ3hCO0FBQ0EsYUFBT2x3QztJQUNUO0FBQ2UsYUFBUnlqRCxHQUFnQyxHQUFHO0FBQ3hDLGVBQVMxakQsSUFBSSxHQUFHQSxJQUFJLFVBQVUsUUFBUUEsS0FBSztBQUN6QyxZQUFJQyxJQUFZLFVBQVVELENBQUMsS0FBbkIsT0FBdUIsVUFBVUEsQ0FBQyxJQUFJLENBQUM7QUFDL0NBLFlBQUksSUFBSTA1QyxHQUFRLE9BQU96NUMsQ0FBQyxHQUFHLElBQUUsRUFBRSxRQUFRLFNBQVVELEdBQUc7QUFDbER5akQsYUFBZSxHQUFHempELEdBQUdDLEVBQUVELENBQUMsQ0FBQztRQUMzQixDQUFDLElBQUksT0FBTyw0QkFBNEIsT0FBTyxpQkFBaUIsR0FBRyxPQUFPLDBCQUEwQkMsQ0FBQyxDQUFDLElBQUl5NUMsR0FBUSxPQUFPejVDLENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBVUQsR0FBRztBQUNoSixpQkFBTyxlQUFlLEdBQUdBLEdBQUcsT0FBTyx5QkFBeUJDLEdBQUdELENBQUMsQ0FBQztRQUNuRSxDQUFDO01BQ0g7QUFDQSxhQUFPO0lBQ1Q7QUNaQSxhQUFTMmpELEdBQXVCenBCLEdBQU07QUFDcEMsYUFBTywyQkFBMkJBLElBQU8sOENBQThDQSxJQUFPO0lBQ2hHO0FBR0EsUUFBSTBwQixLQUFnQixXQUFZO0FBQzlCLGFBQU8sT0FBTyxVQUFXLGNBQWMsT0FBTyxjQUFjO0lBQzlELEVBQUcsR0FRQ0MsS0FBZSxXQUF3QjtBQUN6QyxhQUFPLEtBQUssT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssR0FBRztJQUNuRSxHQUVJQyxLQUFjLEVBQ2hCLE1BQU0saUJBQWlCRCxHQUFhLEdBQ3BDLFNBQVMsb0JBQW9CQSxHQUFhLEdBQzFDLHNCQUFzQixXQUFnQztBQUNwRCxhQUFPLGlDQUFpQ0EsR0FBYTtJQUN2RCxFQUNGO0FBTUEsYUFBU2psQixHQUFjdEssR0FBSztBQUMxQixVQUFJLE9BQU9BLEtBQVEsWUFBWUEsTUFBUTtBQUFNLGVBQU87QUFHcEQsZUFGSW1rQixJQUFRbmtCLEdBRUwsT0FBTyxlQUFlbWtCLENBQUssTUFBTTtBQUN0Q0EsWUFBUSxPQUFPLGVBQWVBLENBQUs7QUFHckMsYUFBTyxPQUFPLGVBQWVua0IsQ0FBRyxNQUFNbWtCO0lBQ3hDO0FBdUZBLGFBQVNzTCxHQUFZQyxHQUFTQyxHQUFnQkMsR0FBVTtBQUN0RCxVQUFJQztBQUVKLFVBQUksT0FBT0YsS0FBbUIsY0FBYyxPQUFPQyxLQUFhLGNBQWMsT0FBT0EsS0FBYSxjQUFjLE9BQU8sVUFBVSxDQUFDLEtBQU07QUFDdEksY0FBTSxJQUFJLE1BQThDUCxHQUF1QixDQUFDLENBQWdSO0FBUWxXLFVBTEksT0FBT00sS0FBbUIsY0FBYyxPQUFPQyxJQUFhLFFBQzlEQSxJQUFXRCxHQUNYQSxJQUFpQixTQUdmLE9BQU9DLElBQWEsS0FBYTtBQUNuQyxZQUFJLE9BQU9BLEtBQWE7QUFDdEIsZ0JBQU0sSUFBSSxNQUE4Q1AsR0FBdUIsQ0FBQyxDQUEyRjtBQUc3SyxlQUFPTyxFQUFTSCxFQUFXLEVBQUVDLEdBQVNDLENBQWM7TUFDdEQ7QUFFQSxVQUFJLE9BQU9ELEtBQVk7QUFDckIsY0FBTSxJQUFJLE1BQThDTCxHQUF1QixDQUFDLENBQThGO0FBR2hMLFVBQUlTLElBQWlCSixHQUNqQjNDLElBQWU0QyxHQUNmSSxJQUFtQixDQUFDLEdBQ3BCQyxJQUFnQkQsR0FDaEJFLElBQWdCO0FBU3BCLGVBQVNDLElBQStCO0FBQ2xDRixjQUFrQkQsTUFDcEJDLElBQWdCRCxFQUFpQixNQUFNO01BRTNDO0FBUUEsZUFBU0ksSUFBVztBQUNsQixZQUFJRjtBQUNGLGdCQUFNLElBQUksTUFBOENaLEdBQXVCLENBQUMsQ0FBb047QUFHdFMsZUFBT3RDO01BQ1Q7QUEwQkEsZUFBU3FELEVBQVUxTyxHQUFVO0FBQzNCLFlBQUksT0FBT0EsS0FBYTtBQUN0QixnQkFBTSxJQUFJLE1BQThDMk4sR0FBdUIsQ0FBQyxDQUEyRjtBQUc3SyxZQUFJWTtBQUNGLGdCQUFNLElBQUksTUFBOENaLEdBQXVCLENBQUMsQ0FBb1U7QUFHdFosWUFBSXpOLElBQWU7QUFDbkIsZUFBQXNPLEVBQTZCLEdBQzdCRixFQUFjLEtBQUt0TyxDQUFRLEdBQ3BCLFdBQXVCO0FBQzVCLGNBQUtFLEdBSUw7QUFBQSxnQkFBSXFPO0FBQ0Ysb0JBQU0sSUFBSSxNQUE4Q1osR0FBdUIsQ0FBQyxDQUErSjtBQUdqUHpOLGdCQUFlLE9BQ2ZzTyxFQUE2QjtBQUM3QixnQkFBSXI1QixLQUFRbTVCLEVBQWMsUUFBUXRPLENBQVE7QUFDMUNzTyxjQUFjLE9BQU9uNUIsSUFBTyxDQUFDLEdBQzdCazVCLElBQW1CO1VBQUE7UUFDckI7TUFDRjtBQTRCQSxlQUFTTSxFQUFTQyxHQUFRO0FBQ3hCLFlBQUksQ0FBQ2htQixHQUFjZ21CLENBQU07QUFDdkIsZ0JBQU0sSUFBSSxNQUE4Q2pCLEdBQXVCLENBQUMsQ0FBb2E7QUFHdGYsWUFBSSxPQUFPaUIsRUFBTyxPQUFTO0FBQ3pCLGdCQUFNLElBQUksTUFBOENqQixHQUF1QixDQUFDLENBQWdIO0FBR2xNLFlBQUlZO0FBQ0YsZ0JBQU0sSUFBSSxNQUE4Q1osR0FBdUIsQ0FBQyxDQUF3QztBQUcxSCxZQUFJO0FBQ0ZZLGNBQWdCLE1BQ2hCbEQsSUFBZStDLEVBQWUvQyxHQUFjdUQsQ0FBTTtRQUNwRCxVQUFBO0FBQ0VMLGNBQWdCO1FBQ2xCO0FBSUEsaUJBRkl0TyxJQUFZb08sSUFBbUJDLEdBRTFCdGxELElBQUksR0FBR0EsSUFBSWkzQyxFQUFVLFFBQVFqM0MsS0FBSztBQUN6QyxjQUFJZzNDLEtBQVdDLEVBQVVqM0MsQ0FBQztBQUMxQmczQyxVQUFBQSxHQUFTO1FBQ1g7QUFFQSxlQUFPNE87TUFDVDtBQWFBLGVBQVNDLEVBQWVDLEdBQWE7QUFDbkMsWUFBSSxPQUFPQSxLQUFnQjtBQUN6QixnQkFBTSxJQUFJLE1BQThDbkIsR0FBdUIsRUFBRSxDQUEyRjtBQUc5S1MsWUFBaUJVLEdBS2pCSCxFQUFTLEVBQ1AsTUFBTWIsR0FBWSxRQUNwQixDQUFDO01BQ0g7QUFTQSxlQUFTaUIsSUFBYTtBQUNwQixZQUFJaHRCLEdBRUFpdEIsSUFBaUJOO0FBQ3JCLGVBQU8zc0IsSUFBTyxFQVNaLFdBQVcsU0FBbUJrdEIsSUFBVTtBQUN0QyxjQUFJLE9BQU9BLE1BQWEsWUFBWUEsT0FBYTtBQUMvQyxrQkFBTSxJQUFJLE1BQThDdEIsR0FBdUIsRUFBRSxDQUEwRjtBQUc3SyxtQkFBU3VCLEtBQWU7QUFDbEJELFlBQUFBLEdBQVMsUUFDWEEsR0FBUyxLQUFLUixFQUFTLENBQUM7VUFFNUI7QUFFQVMsVUFBQUEsR0FBYTtBQUNiLGNBQUk1TyxLQUFjME8sRUFBZUUsRUFBWTtBQUM3QyxpQkFBTyxFQUNMLGFBQWE1TyxHQUNmO1FBQ0YsRUFDRixHQUFHdmUsRUFBSzZyQixFQUFZLElBQUksV0FBWTtBQUNsQyxpQkFBTztRQUNULEdBQUc3ckI7TUFDTDtBQUtBLGFBQUE0c0IsRUFBUyxFQUNQLE1BQU1iLEdBQVksS0FDcEIsQ0FBQyxHQUNNSyxJQUFRLEVBQ2IsVUFBVVEsR0FDVixXQUFXRCxHQUNYLFVBQVVELEdBQ1YsZ0JBQWdCSSxFQUNsQixHQUFHVixFQUFNUCxFQUFZLElBQUltQixHQUFZWjtJQUN2QztBQWtGQSxhQUFTZ0IsR0FBbUJDLEdBQVU7QUFDcEMsYUFBTyxLQUFLQSxDQUFRLEVBQUUsUUFBUSxTQUFVemxELEdBQUs7QUFDM0MsWUFBSXFrRCxJQUFVb0IsRUFBU3psRCxDQUFHLEdBQ3RCMGxELElBQWVyQixFQUFRLFFBQVcsRUFDcEMsTUFBTUYsR0FBWSxLQUNwQixDQUFDO0FBRUQsWUFBSSxPQUFPdUIsSUFBaUI7QUFDMUIsZ0JBQU0sSUFBSSxNQUE4QzFCLEdBQXVCLEVBQUUsQ0FBOFU7QUFHamEsWUFBSSxPQUFPSyxFQUFRLFFBQVcsRUFDNUIsTUFBTUYsR0FBWSxxQkFBcUIsRUFDekMsQ0FBQyxJQUFNO0FBQ0wsZ0JBQU0sSUFBSSxNQUE4Q0gsR0FBdUIsRUFBRSxDQUF5ZDtNQUU5aUIsQ0FBQztJQUNIO0FBbUJBLGFBQVMyQixHQUFnQkYsR0FBVTtBQUlqQyxlQUhJRyxJQUFjLE9BQU8sS0FBS0gsQ0FBUSxHQUNsQ0ksSUFBZ0IsQ0FBQyxHQUVaeG1ELElBQUksR0FBR0EsSUFBSXVtRCxFQUFZLFFBQVF2bUQsS0FBSztBQUMzQyxZQUFJVyxJQUFNNGxELEVBQVl2bUQsQ0FBQztBQVFuQixlQUFPb21ELEVBQVN6bEQsQ0FBRyxLQUFNLGVBQzNCNmxELEVBQWM3bEQsQ0FBRyxJQUFJeWxELEVBQVN6bEQsQ0FBRztNQUVyQztBQUVBLFVBQUk4bEQsSUFBbUIsT0FBTyxLQUFLRCxDQUFhLEdBRzVDRSxHQU1BQztBQUVKLFVBQUk7QUFDRlIsV0FBbUJLLENBQWE7TUFDbEMsU0FBU25rRCxHQUFHO0FBQ1Zza0QsWUFBc0J0a0Q7TUFDeEI7QUFFQSxhQUFPLFNBQXFCZzBDLEdBQU91UCxHQUFRO0FBS3pDLFlBSkl2UCxNQUFVLFdBQ1pBLElBQVEsQ0FBQyxJQUdQc1E7QUFDRixnQkFBTUE7QUFHUixZQUFJO0FBQ0YsY0FBSUM7QUFVTixpQkFISUMsSUFBYSxPQUNicEQsSUFBWSxDQUFDLEdBRVI3dEIsSUFBSyxHQUFHQSxJQUFLNndCLEVBQWlCLFFBQVE3d0IsS0FBTTtBQUNuRCxjQUFJSixJQUFPaXhCLEVBQWlCN3dCLENBQUUsR0FDMUJvdkIsSUFBVXdCLEVBQWNoeEIsQ0FBSSxHQUM1QnN4QixJQUFzQnpRLEVBQU03Z0IsQ0FBSSxHQUNoQ3V4QixLQUFrQi9CLEVBQVE4QixHQUFxQmxCLENBQU07QUFFekQsY0FBSSxPQUFPbUIsS0FBb0IsS0FBYTtBQUMxQyxnQkFBSUMsS0FBYXBCLEtBQVVBLEVBQU87QUFDbEMsa0JBQU0sSUFBSSxNQUE4Q2pCLEdBQXVCLEVBQUUsQ0FBc1Y7VUFDemE7QUFFQWxCLFlBQVVqdUIsQ0FBSSxJQUFJdXhCLElBQ2xCRixJQUFhQSxLQUFjRSxPQUFvQkQ7UUFDakQ7QUFFQSxlQUFBRCxJQUFhQSxLQUFjSixFQUFpQixXQUFXLE9BQU8sS0FBS3BRLENBQUssRUFBRSxRQUNuRXdRLElBQWFwRCxJQUFZcE47TUFDbEM7SUFDRjtBQThEQSxhQUFTOVAsS0FBVTtBQUNqQixlQUFTOU0sSUFBTyxVQUFVLFFBQVF3dEIsSUFBUSxJQUFJLE1BQU14dEIsQ0FBSSxHQUFHakUsSUFBTyxHQUFHQSxJQUFPaUUsR0FBTWpFO0FBQ2hGeXhCLFVBQU16eEIsQ0FBSSxJQUFJLFVBQVVBLENBQUk7QUFHOUIsYUFBSXl4QixFQUFNLFdBQVcsSUFDWixTQUFVaDJCLEdBQUs7QUFDcEIsZUFBT0E7TUFDVCxJQUdFZzJCLEVBQU0sV0FBVyxJQUNaQSxFQUFNLENBQUMsSUFHVEEsRUFBTSxPQUFPLFNBQVUxbEQsR0FBR0UsR0FBRztBQUNsQyxlQUFPLFdBQVk7QUFDakIsaUJBQU9GLEVBQUVFLEVBQUUsTUFBTSxRQUFRLFNBQVMsQ0FBQztRQUNyQztNQUNGLENBQUM7SUFDSDtBQW1CQSxhQUFTeWxELEtBQWtCO0FBQ3pCLGVBQVN6dEIsSUFBTyxVQUFVLFFBQVEwdEIsSUFBYyxJQUFJLE1BQU0xdEIsQ0FBSSxHQUFHakUsSUFBTyxHQUFHQSxJQUFPaUUsR0FBTWpFO0FBQ3RGMnhCLFVBQVkzeEIsQ0FBSSxJQUFJLFVBQVVBLENBQUk7QUFHcEMsYUFBTyxTQUFVdXZCLEdBQWE7QUFDNUIsZUFBTyxXQUFZO0FBQ2pCLGNBQUlqUCxJQUFRaVAsRUFBWSxNQUFNLFFBQVEsU0FBUyxHQUUzQ3FDLElBQVksV0FBb0I7QUFDbEMsa0JBQU0sSUFBSSxNQUE4Q3pDLEdBQXVCLEVBQUUsQ0FBaUk7VUFDcE4sR0FFSTBDLElBQWdCLEVBQ2xCLFVBQVV2UixFQUFNLFVBQ2hCLFVBQVUsV0FBb0I7QUFDNUIsbUJBQU9zUixFQUFVLE1BQU0sUUFBUSxTQUFTO1VBQzFDLEVBQ0YsR0FDSUUsSUFBUUgsRUFBWSxJQUFJLFNBQVUzMkIsR0FBWTtBQUNoRCxtQkFBT0EsRUFBVzYyQixDQUFhO1VBQ2pDLENBQUM7QUFDRCxpQkFBQUQsSUFBWTdnQixHQUFRLE1BQU0sUUFBUStnQixDQUFLLEVBQUV4UixFQUFNLFFBQVEsR0FDaEQ0TyxHQUFjQSxHQUFjLENBQUMsR0FBRzVPLENBQUssR0FBRyxDQUFDLEdBQUcsRUFDakQsVUFBVXNSLEVBQ1osQ0FBQztRQUNIO01BQ0Y7SUFDRjtBQzNyQkEsYUFBU0csR0FBc0JDLEdBQWU7QUFHNUMsVUFBSWgzQixJQUFhLFNBQW9CdUksR0FBTTtBQUN6QyxZQUFJNHNCLElBQVc1c0IsRUFBSyxVQUNoQjBzQixJQUFXMXNCLEVBQUs7QUFDcEIsZUFBTyxTQUFVL1AsR0FBTTtBQUNyQixpQkFBTyxTQUFVNDhCLEdBQVE7QUFHdkIsbUJBQUksT0FBT0EsS0FBVyxhQUViQSxFQUFPRCxHQUFVRixHQUFVK0IsQ0FBYSxJQUkxQ3grQixFQUFLNDhCLENBQU07VUFDcEI7UUFDRjtNQUNGO0FBRUEsYUFBT3AxQjtJQUNUO0FBRUEsUUFBSWkzQixLQUFRRixHQUFzQjtBQUdsQ0UsT0FBTSxvQkFBb0JGO0FBQzFCLFFBQU9HLEtBQVFEO0FBQUFBLFFBQUFBLEtBQUFBLFdBQUFBO0FBQUFBLFVBQUFBLElBQUFBLFNBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLGVBQUFBLElBQUFBLE9BQUFBLGtCQUFBQSxFQUFBQSxXQUFBQSxDQUFBQSxFQUFBQSxhQUFBQSxTQUFBQSxTQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxZQUFBQSxZQUFBQTtRQUFBQSxLQUFBQSxTQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxtQkFBQUEsS0FBQUE7QUFBQUEsbUJBQUFBLFVBQUFBLGVBQUFBLEtBQUFBLEdBQUFBLENBQUFBLE1BQUFBLEVBQUFBLENBQUFBLElBQUFBLEVBQUFBLENBQUFBO1FBQUFBLEdBQUFBLEVBQUFBLEdBQUFBLENBQUFBO01BQUFBO0FBQUFBLGFBQUFBLFNBQUFBLEdBQUFBLEdBQUFBO0FBQUFBLFlBQUFBLE9BQUFBLEtBQUFBLGNBQUFBLE1BQUFBO0FBQUFBLGdCQUFBQSxJQUFBQSxVQUFBQSx5QkFBQUEsT0FBQUEsQ0FBQUEsSUFBQUEsK0JBQUFBO0FBQUFBLFVBQUFBLEdBQUFBLENBQUFBO0FBQUFBLGlCQUFBQSxJQUFBQTtBQUFBQSxlQUFBQSxjQUFBQTtRQUFBQTtBQUFBQSxVQUFBQSxZQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxPQUFBQSxDQUFBQSxLQUFBQSxFQUFBQSxZQUFBQSxFQUFBQSxXQUFBQSxJQUFBQTtNQUFBQTtJQUFBQSxFQUFBQSxHQUFBQSxLQUFBQSxTQUFBQSxHQUFBQSxHQUFBQTtBQUFBQSxVQUFBQSxJQUFBQSxFQUFBQSxPQUFBQSxHQUFBQSxNQUFBQSxXQUFBQTtBQUFBQSxZQUFBQSxFQUFBQSxDQUFBQSxJQUFBQTtBQUFBQSxnQkFBQUEsRUFBQUEsQ0FBQUE7QUFBQUEsZUFBQUEsRUFBQUEsQ0FBQUE7TUFBQUEsR0FBQUEsTUFBQUEsQ0FBQUEsR0FBQUEsS0FBQUEsQ0FBQUEsRUFBQUEsR0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsYUFBQUEsSUFBQUEsRUFBQUEsTUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsT0FBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsUUFBQUEsRUFBQUEsQ0FBQUEsRUFBQUEsR0FBQUEsT0FBQUEsVUFBQUEsZUFBQUEsRUFBQUEsT0FBQUEsUUFBQUEsSUFBQUEsV0FBQUE7QUFBQUEsZUFBQUE7TUFBQUEsSUFBQUE7QUFBQUEsZUFBQUEsRUFBQUEsR0FBQUE7QUFBQUEsZUFBQUEsU0FBQUEsR0FBQUE7QUFBQUEsaUJBQUFBLEVBQUFBLENBQUFBLEdBQUFBLENBQUFBLENBQUFBO1FBQUFBO01BQUFBO0FBQUFBLGVBQUFBLEVBQUFBLEdBQUFBO0FBQUFBLFlBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQSxVQUFBQSxpQ0FBQUE7QUFBQUEsZUFBQUE7QUFBQUEsY0FBQUE7QUFBQUEsZ0JBQUFBLElBQUFBLEdBQUFBLE1BQUFBLElBQUFBLEVBQUFBLENBQUFBLElBQUFBLElBQUFBLEVBQUFBLFNBQUFBLEVBQUFBLENBQUFBLElBQUFBLEVBQUFBLFdBQUFBLElBQUFBLEVBQUFBLFdBQUFBLEVBQUFBLEtBQUFBLENBQUFBLEdBQUFBLEtBQUFBLEVBQUFBLFNBQUFBLEVBQUFBLElBQUFBLEVBQUFBLEtBQUFBLEdBQUFBLEVBQUFBLENBQUFBLENBQUFBLEdBQUFBO0FBQUFBLHFCQUFBQTtBQUFBQSxvQkFBQUEsSUFBQUEsR0FBQUEsTUFBQUEsSUFBQUEsQ0FBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsR0FBQUEsRUFBQUEsS0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUE7Y0FBQUEsS0FBQUE7Y0FBQUEsS0FBQUE7QUFBQUEsb0JBQUFBO0FBQUFBO2NBQUFBLEtBQUFBO0FBQUFBLHVCQUFBQSxFQUFBQSxTQUFBQSxFQUFBQSxPQUFBQSxFQUFBQSxDQUFBQSxHQUFBQSxNQUFBQSxNQUFBQTtjQUFBQSxLQUFBQTtBQUFBQSxrQkFBQUEsU0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsSUFBQUEsQ0FBQUEsQ0FBQUE7QUFBQUE7Y0FBQUEsS0FBQUE7QUFBQUEsb0JBQUFBLEVBQUFBLElBQUFBLElBQUFBLEdBQUFBLEVBQUFBLEtBQUFBLElBQUFBO0FBQUFBO2NBQUFBO0FBQUFBLG9CQUFBQSxJQUFBQSxFQUFBQSxNQUFBQSxFQUFBQSxJQUFBQSxFQUFBQSxTQUFBQSxLQUFBQSxFQUFBQSxFQUFBQSxTQUFBQSxDQUFBQSxPQUFBQSxFQUFBQSxDQUFBQSxNQUFBQSxLQUFBQSxFQUFBQSxDQUFBQSxNQUFBQSxJQUFBQTtBQUFBQSxzQkFBQUE7QUFBQUE7Z0JBQUFBO0FBQUFBLG9CQUFBQSxFQUFBQSxDQUFBQSxNQUFBQSxNQUFBQSxDQUFBQSxLQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxLQUFBQSxFQUFBQSxDQUFBQSxJQUFBQSxFQUFBQSxDQUFBQSxJQUFBQTtBQUFBQSxvQkFBQUEsUUFBQUEsRUFBQUEsQ0FBQUE7QUFBQUE7Z0JBQUFBO0FBQUFBLG9CQUFBQSxFQUFBQSxDQUFBQSxNQUFBQSxLQUFBQSxFQUFBQSxRQUFBQSxFQUFBQSxDQUFBQSxHQUFBQTtBQUFBQSxvQkFBQUEsUUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsSUFBQUE7QUFBQUE7Z0JBQUFBO0FBQUFBLG9CQUFBQSxLQUFBQSxFQUFBQSxRQUFBQSxFQUFBQSxDQUFBQSxHQUFBQTtBQUFBQSxvQkFBQUEsUUFBQUEsRUFBQUEsQ0FBQUEsR0FBQUEsRUFBQUEsSUFBQUEsS0FBQUEsQ0FBQUE7QUFBQUE7Z0JBQUFBO0FBQUFBLGtCQUFBQSxDQUFBQSxLQUFBQSxFQUFBQSxJQUFBQSxJQUFBQSxHQUFBQSxFQUFBQSxLQUFBQSxJQUFBQTtBQUFBQTtZQUFBQTtBQUFBQSxnQkFBQUEsRUFBQUEsS0FBQUEsR0FBQUEsQ0FBQUE7VUFBQUEsU0FBQUEsR0FBQUE7QUFBQUEsZ0JBQUFBLENBQUFBLEdBQUFBLENBQUFBLEdBQUFBLElBQUFBO1VBQUFBLFVBQUFBO0FBQUFBLGdCQUFBQSxJQUFBQTtVQUFBQTtBQUFBQSxZQUFBQSxFQUFBQSxDQUFBQSxJQUFBQTtBQUFBQSxnQkFBQUEsRUFBQUEsQ0FBQUE7QUFBQUEsZUFBQUEsRUFBQUEsT0FBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsUUFBQUEsTUFBQUEsS0FBQUE7TUFBQUE7SUFBQUEsR0FBQUEsS0FBQUEsU0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsZUFBQUEsSUFBQUEsR0FBQUEsSUFBQUEsRUFBQUEsUUFBQUEsSUFBQUEsRUFBQUEsUUFBQUEsSUFBQUEsR0FBQUEsS0FBQUE7QUFBQUEsVUFBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUE7QUFBQUEsYUFBQUE7SUFBQUEsR0FBQUEsS0FBQUEsT0FBQUEsZ0JBQUFBLEtBQUFBLE9BQUFBLGtCQUFBQSxLQUFBQSxPQUFBQSwyQkFBQUEsS0FBQUEsT0FBQUEsdUJBQUFBLEtBQUFBLE9BQUFBLFVBQUFBLGdCQUFBQSxLQUFBQSxPQUFBQSxVQUFBQSxzQkFBQUEsS0FBQUEsU0FBQUEsR0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsYUFBQUEsS0FBQUEsSUFBQUEsR0FBQUEsR0FBQUEsR0FBQUEsRUFBQUEsWUFBQUEsTUFBQUEsY0FBQUEsTUFBQUEsVUFBQUEsTUFBQUEsT0FBQUEsRUFBQUEsQ0FBQUEsSUFBQUEsRUFBQUEsQ0FBQUEsSUFBQUE7SUFBQUEsR0FBQUEsS0FBQUEsU0FBQUEsR0FBQUEsR0FBQUE7QUFBQUEsZUFBQUEsS0FBQUEsTUFBQUEsSUFBQUEsQ0FBQUE7QUFBQUEsV0FBQUEsS0FBQUEsR0FBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsR0FBQUEsR0FBQUEsRUFBQUEsQ0FBQUEsQ0FBQUE7QUFBQUEsVUFBQUE7QUFBQUEsaUJBQUFBLElBQUFBLEdBQUFBLElBQUFBLEdBQUFBLENBQUFBLEdBQUFBLElBQUFBLEVBQUFBLFFBQUFBLEtBQUFBO0FBQUFBLGNBQUFBLElBQUFB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R0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUdBLEdBQWEsR0FBRyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBR0EsR0FBYSxHQUFHLEdBQUcsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHQSxHQUFhLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsSUFB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Z0NBQUFBLFFBQUEsY0FBQyxxQkFBa0IsTUFBSyxLQUFJLEdBQzFDLGdDQUFBQSxRQUFBLGNBQUMsU0FBSSxLQUFLLFdBQVcsV0FBVSxtQkFBa0IsT0FBTyxFQUFFLE9BQU8sU0FBUyxRQUFRLFNBQVMsUUFBTyxPQUFPLEdBQUcsQ0FDOUcsQ0FDRjtBQUFBLEVBRUo7QUFHQSxXQUFTLGdCQUFnQixPQUE2QixXQUFvQixVQUF1QjtBQUMvRix1QkFBQUMsUUFBUyxPQUFPLHVCQUF1QixLQUFLLEdBQUcsV0FBVyxRQUFRO0FBQUEsRUFDcEU7QUFFQSxXQUFTLHVCQUF1QixPQUE2QjtBQUMzRCxVQUFNLGNBQWMsSUFBSSxZQUFZO0FBQ3BDLFdBQ0UsZ0NBQUFELFFBQUEsY0FBQyxlQUFZLFdBQVUsV0FDckIsZ0NBQUFBLFFBQUEsY0FBQyx1QkFBb0IsUUFBUSxlQUMzQixnQ0FBQUEsUUFBQTtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0MsS0FBSyxNQUFNO0FBQUEsUUFDWCxLQUFLLE1BQU07QUFBQSxRQUNYLFlBQVksTUFBTTtBQUFBLFFBQ2xCLFdBQVcsTUFBTTtBQUFBLFFBQ2pCLFVBQVUsTUFBTTtBQUFBO0FBQUEsSUFDbEIsQ0FDRixDQUNGO0FBQUEsRUFFSjs7O0FDdFRBLEVBQUMsT0FBZSxpQkFBaUIsSUFBSTtBQUFBLElBQ2pDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNKOyIsCiAgIm5hbWVzIjogWyJoYXNPd25Qcm9wZXJ0eSIsICJmcm9tIiwgIlJlYWN0RGVidWdDdXJyZW50RnJhbWUiLCAiQ29tcG9uZW50IiwgIlB1cmVDb21wb25lbnQiLCAiY3JlYXRlUmVmIiwgIngiLCAiaGFzT3duUHJvcGVydHkiLCAiUmVhY3RFbGVtZW50IiwgInNlbGYiLCAiY3JlYXRlRWxlbWVudCIsICJjbG9uZUVsZW1lbnQiLCAiaXNWYWxpZEVsZW1lbnQiLCAib2JqZWN0IiwgIm1hdGNoIiwgImZ1bmMiLCAidG9BcnJheSIsICJjcmVhdGVDb250ZXh0IiwgImVycm9yIiwgImZvcndhcmRSZWYiLCAicmVuZGVyIiwgIm1lbW8iLCAidXNlQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VSZWR1Y2VyIiwgInJlZHVjZXIiLCAidXNlUmVmIiwgInVzZUVmZmVjdCIsICJ1c2VMYXlvdXRFZmZlY3QiLCAidXNlQ2FsbGJhY2siLCAidXNlTWVtbyIsICJwcmVmaXgiLCAicHJvdG90eXBlIiwgIm5vZGUiLCAia2V5cyIsICJDaGlsZHJlbiIsICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCAibm9kZSIsICJwZWVrIiwgImxlbmd0aCIsICJiIiwgImluaXRpYWxUaW1lIiwgIlJlYWN0IiwgIlJlYWN0RGVidWdDdXJyZW50RnJhbWUiLCAiRnJhZ21lbnQiLCAiaGFzT3duUHJvcGVydHkiLCAicHJlZml4IiwgInNhbml0aXplVVJMIiwgIl9yZWYiLCAiY2FwaXRhbGl6ZSIsICJ0b2tlbiIsICJub2RlIiwgIngiLCAibWF0Y2giLCAiQ29tcG9uZW50IiwgInByb3RvdHlwZSIsICJ3b3JrSW5Qcm9ncmVzcyIsICJ0b1N0cmluZyIsICJnZXQiLCAic2V0IiwgImdldEFjdGl2ZUVsZW1lbnQiLCAiaXNIeWRyYXRpbmciLCAidmFsaWRhdGVQcm9wcyIsICJpc0FycmF5IiwgIm9wdGlvbnMiLCAiZnVuYyIsICJpc0N1c3RvbVByb3BlcnR5IiwgInN0cmluZyIsICJjaGFyYWN0ZXIiLCAic3R5bGVzIiwgImRlbGltaXRlciIsICJzdHlsZSIsICJyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzIiwgInBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMiLCAiYiIsICJlcnJvciIsICJjYWxsQ2FsbGJhY2siLCAiY3VycmVudCIsICJyb290IiwgInF1ZXVlZEV2ZW50IiwgInByZWZpeGVzIiwgImluZGV4IiwgImxvZyIsICJpc0V2ZW50U3VwcG9ydGVkIiwgImZyb20iLCAibGVuZ3RoIiwgIm5leHQiLCAibm9vcCIsICJjcmVhdGVFbGVtZW50IiwgImNyZWF0ZUluc3RhbmNlIiwgImNhbmNlbFRpbWVvdXQiLCAiaGFzIiwgImN1cnNvciIsICJub3ciLCAiX3F1ZXVlIiwgInJlbmRlckxhbmVzIiwgInVwZGF0ZUZyYWdtZW50IiwgImNoaWxkIiwgInJlY29uY2lsZUNoaWxkRmliZXJzIiwgImlzT2JqZWN0IiwgInZlcnNpb24iLCAicmVkdWNlciIsICJyZW5kZXIiLCAic3VidHJlZVJlbmRlckxhbmVzIiwgImlzSGlkZGVuIiwgImVycm9yJDEiLCAiY29tbWl0VGltZSIsICJoeWRyYXRlIiwgImNyZWF0ZVBvcnRhbCIsICJjdXJyZW50SG9vayIsICJSZWFjdEN1cnJlbnREaXNwYXRjaGVyIiwgIm9iamVjdCIsICJFbGVtZW50IiwgIkZyYWdtZW50IiwgImlzRWxlbWVudCIsICJ4IiwgImFzc2lnbiIsICJ4IiwgImlzVmFsaWRFbGVtZW50IiwgInZhbGlkYXRlIiwgImkiLCAiY2hlY2tlciIsICJoYXNPd24iLCAiY2xhc3NOYW1lcyIsICJyZXF1aXJlX3JlYWN0X2lzX2RldmVsb3BtZW50IiwgIm9iamVjdCIsICJFbGVtZW50IiwgIkZyYWdtZW50IiwgImlzRWxlbWVudCIsICJyZXF1aXJlX3JlYWN0X2lzIiwgImdldFByb3RvdHlwZU9mIiwgImtleXMiLCAibGVuZ3RoIiwgImxlbmd0aCIsICJTeW1ib2wiLCAiU3ltYm9sIiwgImhhc093blByb3BlcnR5IiwgIlN5bWJvbCIsICJpc09iamVjdCIsICJpc09iamVjdCIsICJpc0Z1bmN0aW9uIiwgImZ1bmMiLCAiZnVuYyIsICJpc0Z1bmN0aW9uIiwgImlzT2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJvYmplY3QiLCAiTWFwIiwgImhhc093blByb3BlcnR5IiwgImhhc093blByb3BlcnR5IiwgImxlbmd0aCIsICJNYXAiLCAic2l6ZSIsICJsZW5ndGgiLCAiTWFwIiwgImxlbmd0aCIsICJsZW5ndGgiLCAib3RoVmFsdWUiLCAiVWludDhBcnJheSIsICJTeW1ib2wiLCAiVWludDhBcnJheSIsICJvYmplY3QiLCAibGVuZ3RoIiwgImlzQXJyYXkiLCAiaXNBcnJheSIsICJvYmplY3QiLCAibGVuZ3RoIiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJCdWZmZXIiLCAiaXNCdWZmZXIiLCAibGVuZ3RoIiwgImZ1bmMiLCAiaXNUeXBlZEFycmF5IiwgImlzQXJyYXkiLCAiaXNCdWZmZXIiLCAiaXNUeXBlZEFycmF5IiwgImhhc093blByb3BlcnR5IiwgImxlbmd0aCIsICJmdW5jIiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJpc0Z1bmN0aW9uIiwgImtleXMiLCAib2JqZWN0IiwgImtleXMiLCAib2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJQcm9taXNlIiwgIlNldCIsICJXZWFrTWFwIiwgIk1hcCIsICJQcm9taXNlIiwgIlNldCIsICJXZWFrTWFwIiwgImlzQXJyYXkiLCAiaXNCdWZmZXIiLCAiaXNUeXBlZEFycmF5IiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJpc0VxdWFsIiwgImdsb2JhbCIsICJpc0FycmF5IiwgImlzT2JqZWN0IiwgImIiLCAiaXNVbmRlZmluZWQiLCAiaXNOdW1iZXIiLCAiaXNEYXRlIiwgImV4dGVuZCIsICJmb3JtYXQiLCAibG9jYWxlIiwgInRvIiwgImZyb20iLCAiaXNGdW5jdGlvbiIsICJrZXlzIiwgImNhbGVuZGFyIiwgIm5vdyIsICJzaWduIiwgInRva2VuIiwgIm9yZGluYWwiLCAiZnVuYyIsICJsZW5ndGgiLCAiaSIsICJzdHJpbmciLCAiZGlmZiIsICJsb2NhbGVEYXRhIiwgImdldCIsICJ4IiwgImhvdXJzIiwgIm1pbnV0ZXMiLCAibmV4dCIsICJtYXRjaCIsICJkZWZhdWx0cyIsICJ0b2tlbnMiLCAibWVyaWRpZW0iLCAibWluIiwgIm1heCIsICJ5ZWFycyIsICJtb250aHMiLCAid2Vla3MiLCAiZGF5cyIsICJzZWNvbmRzIiwgIm1pbGxpc2Vjb25kcyIsICJvZmZzZXQiLCAibWF0Y2hlcyIsICJiYXNlIiwgImlzU3RyaW5nIiwgInByb3BlcnR5IiwgInRvU3RyaW5nIiwgInByZWZpeCIsICJ0b0FycmF5IiwgInRvSlNPTiIsICJhYnMiLCAicm91bmQiLCAidGhyZXNob2xkcyIsICJpc0FycmF5IiwgImlzU3RyaW5nIiwgImlzQm9vbGVhbiIsICJpc051bWJlciIsICJpc051bWJlciIsICJpc05hTiIsICJnbG9iYWwiLCAibnVtZXJhbCIsICJWRVJTSU9OIiwgImRlZmF1bHRzIiwgImFicyIsICJtaW4iLCAibWF4IiwgInN0cmluZyIsICJ4IiwgIm5leHQiLCAicHJvcGVydHkiLCAiYiIsICJudW0iLCAibWVtb2l6ZSIsICJmdW5jIiwgImlzQXJyYXkiLCAib2JqZWN0IiwgIm1lbW9pemUiLCAiZnVuYyIsICJzdHJpbmciLCAibWF0Y2giLCAibGVuZ3RoIiwgIlN5bWJvbCIsICJpc0FycmF5IiwgInRvU3RyaW5nIiwgImlzQXJyYXkiLCAidG9TdHJpbmciLCAib2JqZWN0IiwgIm9iamVjdCIsICJsZW5ndGgiLCAiZ2V0IiwgIm9iamVjdCIsICJsZW5ndGgiLCAiZnVuYyIsICJvYmplY3QiLCAiaGFzT3duUHJvcGVydHkiLCAib2JqZWN0IiwgIm9iamVjdCIsICJsZW5ndGgiLCAia2V5cyIsICJvYmplY3QiLCAib2JqZWN0IiwgImlzT2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgIm9iamVjdCIsICJvYmplY3QiLCAib2JqZWN0IiwgIkJ1ZmZlciIsICJsZW5ndGgiLCAibGVuZ3RoIiwgIm9iamVjdCIsICJvYmplY3QiLCAib2JqZWN0IiwgIm9iamVjdCIsICJoYXNPd25Qcm9wZXJ0eSIsICJsZW5ndGgiLCAiVWludDhBcnJheSIsICJTeW1ib2wiLCAib2JqZWN0IiwgImlzT2JqZWN0IiwgIm9iamVjdCIsICJvYmplY3QiLCAiaXNBcnJheSIsICJpc0J1ZmZlciIsICJpc09iamVjdCIsICJrZXlzIiwgIm9iamVjdCIsICJrZXkiLCAibGVuZ3RoIiwgImxlbmd0aCIsICJvYmplY3QiLCAib2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgImlzUGxhaW5PYmplY3QiLCAiaXNQbGFpbk9iamVjdCIsICJTeW1ib2wiLCAiaXNBcnJheSIsICJsZW5ndGgiLCAiZmxhdHRlbiIsICJsZW5ndGgiLCAiZnVuYyIsICJmdW5jIiwgImxlbmd0aCIsICJmdW5jIiwgInN0cmluZyIsICJmdW5jIiwgImZsYXR0ZW4iLCAiZnVuYyIsICJvYmplY3QiLCAibGVuZ3RoIiwgInJlcXVpcmVfcmVhY3RfaXNfZGV2ZWxvcG1lbnQiLCAib2JqZWN0IiwgIkVsZW1lbnQiLCAiRnJhZ21lbnQiLCAiaXNFbGVtZW50IiwgInJlcXVpcmVfcmVhY3RfaXMiLCAiZW5jb2RlIiwgInByZWZpeCIsICJtYXRjaCIsICJiYXNlIiwgInBhcnNlIiwgImNoYXIiLCAidG9TdHJpbmciLCAic3RyaW5naWZ5IiwgIl9leHRlbmRzIiwgIl9jcmVhdGVDbGFzcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAia2V5cyIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfaW5oZXJpdHMiLCAiY2xlYW5JbnB1dFByb3BzIiwgImNvcHlTdHlsZXMiLCAic3R5bGVzIiwgIm5vZGUiLCAiZ2VuZXJhdGVJZCIsICJBdXRvc2l6ZUlucHV0IiwgImZvY3VzIiwgImluamVjdFN0eWxlcyIsICJyZW5kZXIiLCAiX2NsYXNzQ2FsbENoZWNrIiwgImdsb2JhbCIsICJ0aGlzIiwgImZhaWxzIiwgImV4ZWMiLCAicmVxdWlyZSQkMCIsICJ0ZXN0IiwgIk5BVElWRV9CSU5EIiwgIkZ1bmN0aW9uUHJvdG90eXBlIiwgImFwcGx5IiwgImNhbGwiLCAidW5jdXJyeVRoaXMiLCAidG9TdHJpbmciLCAic3RyaW5nU2xpY2UiLCAiY2xhc3NvZlJhdyIsICJyZXF1aXJlJCQxIiwgImRvY3VtZW50QWxsIiwgIiRkb2N1bWVudEFsbCIsICJpc0NhbGxhYmxlIiwgImRlc2NyaXB0b3JzIiwgIiRwcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yIiwgImNsYXNzb2YiLCAicmVxdWlyZSQkMiIsICIkT2JqZWN0IiwgImlzTnVsbE9yVW5kZWZpbmVkIiwgIiRUeXBlRXJyb3IiLCAicmVxdWlyZU9iamVjdENvZXJjaWJsZSIsICJJbmRleGVkT2JqZWN0IiwgInRvSW5kZXhlZE9iamVjdCIsICJpc09iamVjdCIsICJwYXRoIiwgImdldEJ1aWx0SW4iLCAibWV0aG9kIiwgInVzZXJBZ2VudCIsICJwcm9jZXNzIiwgIkRlbm8iLCAibWF0Y2giLCAidmVyc2lvbiIsICJWOF9WRVJTSU9OIiwgIiRTdHJpbmciLCAic3ltYm9sIiwgIk5BVElWRV9TWU1CT0wiLCAiaXNQcm90b3R5cGVPZiIsICJVU0VfU1lNQk9MX0FTX1VJRCIsICJyZXF1aXJlJCQzIiwgImlzU3ltYm9sIiwgIiRTeW1ib2wiLCAidHJ5VG9TdHJpbmciLCAiYUNhbGxhYmxlIiwgImdldE1ldGhvZCIsICJmdW5jIiwgIm9yZGluYXJ5VG9QcmltaXRpdmUiLCAiZGVmaW5lUHJvcGVydHkiLCAiZGVmaW5lR2xvYmFsUHJvcGVydHkiLCAic3RvcmUiLCAic2hhcmVkTW9kdWxlIiwgInRvT2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgImhhc093biIsICJpZCIsICJ1aWQiLCAic2hhcmVkIiwgInJlcXVpcmUkJDQiLCAicmVxdWlyZSQkNSIsICJTeW1ib2wiLCAiV2VsbEtub3duU3ltYm9sc1N0b3JlIiwgIndlbGxLbm93blN5bWJvbCIsICJ0b1ByaW1pdGl2ZSIsICJ0b1Byb3BlcnR5S2V5IiwgImRvY3VtZW50IiwgIkVYSVNUUyIsICJkb2N1bWVudENyZWF0ZUVsZW1lbnQiLCAiREVTQ1JJUFRPUlMiLCAiY3JlYXRlRWxlbWVudCIsICJwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSIsICJyZXF1aXJlJCQ2IiwgIklFOF9ET01fREVGSU5FIiwgInJlcXVpcmUkJDciLCAiJGdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJpc0ZvcmNlZCIsICJzdHJpbmciLCAiYmluZCIsICJhbk9iamVjdCIsICJWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyIsICIkZGVmaW5lUHJvcGVydHkiLCAiQ09ORklHVVJBQkxFIiwgImRlZmluZVByb3BlcnR5TW9kdWxlIiwgImNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSIsICJvYmplY3QiLCAicmVxdWlyZSQkOCIsICJyZXF1aXJlJCQ5IiwgImIiLCAiRk9SQ0VEIiwgIiQiLCAiT2JqZWN0IiwgInBhcmVudCIsICJpc0FycmF5IiwgImZsb29yIiwgInRydW5jIiwgIngiLCAidG9JbnRlZ2VyT3JJbmZpbml0eSIsICJtaW4iLCAidG9MZW5ndGgiLCAibGVuZ3RoT2ZBcnJheUxpa2UiLCAiZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyIiwgImNyZWF0ZVByb3BlcnR5IiwgIlRPX1NUUklOR19UQUciLCAiVE9fU1RSSU5HX1RBR19TVVBQT1JUIiwgImluc3BlY3RTb3VyY2UiLCAibm9vcCIsICJjb25zdHJ1Y3QiLCAiaXNDb25zdHJ1Y3RvciIsICJjYWxsZWQiLCAiU1BFQ0lFUyIsICIkQXJyYXkiLCAiYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IiLCAiYXJyYXlTcGVjaWVzQ3JlYXRlIiwgImxlbmd0aCIsICJhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0IiwgInJlcXVpcmUkJDEwIiwgInJlcXVpcmUkJDExIiwgImNvbmNhdCIsICJpIiwgIm1heCIsICJ0b0Fic29sdXRlSW5kZXgiLCAiY3JlYXRlTWV0aG9kIiwgImhpZGRlbktleXMiLCAicHVzaCIsICJlbnVtQnVnS2V5cyIsICJpbnRlcm5hbE9iamVjdEtleXMiLCAib2JqZWN0S2V5cyIsICJrZXlzIiwgImRlZmluZVByb3BlcnRpZXMiLCAiaHRtbCIsICJzaGFyZWRLZXkiLCAiZGVmaW5lUHJvcGVydGllc01vZHVsZSIsICJQUk9UT1RZUEUiLCAiSUVfUFJPVE8iLCAiYWN0aXZlWERvY3VtZW50IiwgImNyZWF0ZSIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgIiRnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImFycmF5U2xpY2UiLCAiZGVmaW5lQnVpbHRJbiIsICJkZWZpbmVCdWlsdEluQWNjZXNzb3IiLCAid3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSIsICJTeW1ib2xQcm90b3R5cGUiLCAiVE9fUFJJTUlUSVZFIiwgInNldFRvU3RyaW5nVGFnIiwgIldlYWtNYXAiLCAiVHlwZUVycm9yIiwgInNldCIsICJnZXQiLCAic2VsZiIsICJyZXF1aXJlJCQxMiIsICJyZXF1aXJlJCQxMyIsICJyZXF1aXJlJCQxNCIsICJyZXF1aXJlJCQxNSIsICJyZXF1aXJlJCQxNiIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlIiwgInJlcXVpcmUkJDE3IiwgInJlcXVpcmUkJDE4IiwgImdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSIsICJyZXF1aXJlJCQxOSIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUiLCAicmVxdWlyZSQkMjAiLCAicmVxdWlyZSQkMjEiLCAicmVxdWlyZSQkMjIiLCAicmVxdWlyZSQkMjMiLCAicmVxdWlyZSQkMjQiLCAicmVxdWlyZSQkMjUiLCAicmVxdWlyZSQkMjYiLCAicmVxdWlyZSQkMjciLCAicmVxdWlyZSQkMjgiLCAicmVxdWlyZSQkMjkiLCAicmVxdWlyZSQkMzAiLCAicmVxdWlyZSQkMzEiLCAiZGVmaW5lV2VsbEtub3duU3ltYm9sIiwgInJlcXVpcmUkJDMyIiwgImRlZmluZVN5bWJvbFRvUHJpbWl0aXZlIiwgInJlcXVpcmUkJDMzIiwgInJlcXVpcmUkJDM0IiwgIkludGVybmFsU3RhdGVNb2R1bGUiLCAicmVxdWlyZSQkMzUiLCAiJGZvckVhY2giLCAicmVxdWlyZSQkMzYiLCAic2V0SW50ZXJuYWxTdGF0ZSIsICJnZXRJbnRlcm5hbFN0YXRlIiwgIk9iamVjdFByb3RvdHlwZSIsICJSYW5nZUVycm9yIiwgIm5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIiwgIlN5bWJvbFRvU3RyaW5nUmVnaXN0cnkiLCAia2V5Rm9yIiwgImNoYXJBdCIsICJjaGFyQ29kZUF0IiwgInJlcGxhY2UiLCAicHJldiIsICJuZXh0IiwgInN0cmluZ2lmeSIsICJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiJGdldE93blByb3BlcnR5U3ltYm9scyIsICJDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIiLCAiZ2V0UHJvdG90eXBlT2YiLCAiSVRFUkFUT1IiLCAiQlVHR1lfU0FGQVJJX0lURVJBVE9SUyIsICJJdGVyYXRvclByb3RvdHlwZSIsICJJdGVyYXRvcnMiLCAicmV0dXJuVGhpcyIsICJhUG9zc2libGVQcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAidmFsdWVzIiwgImVudHJpZXMiLCAiY3JlYXRlSXRlclJlc3VsdE9iamVjdCIsICJkZWZpbmVJdGVyYXRvciIsICJET01JdGVyYWJsZXMiLCAiTUVUQURBVEEiLCAidGhpc1N5bWJvbFZhbHVlIiwgImlzUmVnaXN0ZXJlZFN5bWJvbCIsICJpc1dlbGxLbm93blN5bWJvbCIsICJwb3NpdGlvbiIsICJzaXplIiwgIldyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUiLCAiaXRlcmF0b3IiLCAiX3R5cGVvZiIsICJfU3ltYm9sIiwgIl9TeW1ib2wkaXRlcmF0b3IiLCAibyIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfT2JqZWN0JGRlZmluZVByb3BlcnR5IiwgIl9jcmVhdGVDbGFzcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiZ2V0QnVpbHRJblByb3RvdHlwZU1ldGhvZCIsICJtZW1vIiwgImFycmF5TWV0aG9kSXNTdHJpY3QiLCAiSVNfTk9ERSIsICJyZWR1Y2UiLCAiQXJyYXlQcm90b3R5cGUiLCAiSEFTX1NQRUNJRVNfU1VQUE9SVCIsICJmaWx0ZXIiLCAibWFwIiwgImZsYXR0ZW5JbnRvQXJyYXkiLCAiZmxhdE1hcCIsICJjcmVhdGVOZXdEYXRhUGlwZUZyb20iLCAiZnJvbSIsICJEYXRhUGlwZVVuZGVyQ29uc3RydWN0aW9uIiwgIlNpbXBsZURhdGFQaXBlIiwgIl9zb3VyY2UiLCAiX3RyYW5zZm9ybWVycyIsICJfdGFyZ2V0IiwgIl9jb250ZXh0IiwgIl9jb250ZXh0MiIsICJfY29udGV4dDMiLCAiYWRkIiwgIl9iaW5kSW5zdGFuY2VQcm9wZXJ0eSIsICJfYWRkIiwgInJlbW92ZSIsICJfcmVtb3ZlIiwgInVwZGF0ZSIsICJfdXBkYXRlIiwgImtleSIsICJ2YWx1ZSIsICJhbGwiLCAiX3RyYW5zZm9ybUl0ZW1zIiwgInN0YXJ0IiwgIm9uIiwgIl9saXN0ZW5lcnMiLCAic3RvcCIsICJvZmYiLCAiaXRlbXMiLCAiX2NvbnRleHQ0IiwgIl9yZWR1Y2VJbnN0YW5jZVByb3BlcnR5IiwgInRyYW5zZm9ybSIsICJfbmFtZSIsICJwYXlsb2FkIiwgIm9sZERhdGEiLCAiY2FsbGJhY2siLCAiaW5wdXQiLCAiX2ZpbHRlckluc3RhbmNlUHJvcGVydHkiLCAiX21hcEluc3RhbmNlUHJvcGVydHkiLCAiX2ZsYXRNYXBJbnN0YW5jZVByb3BlcnR5IiwgInRvIiwgInRhcmdldCIsICJpdGVyYXRvckNsb3NlIiwgImNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmciLCAiRU5UUklFUyIsICJpc0FycmF5SXRlcmF0b3JNZXRob2QiLCAiZ2V0SXRlcmF0b3JNZXRob2QiLCAiZ2V0SXRlcmF0b3IiLCAiY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uIiwgIl9hcnJheVdpdGhIb2xlcyIsICJfQXJyYXkkaXNBcnJheSIsICJzZXRBcnJheUxlbmd0aCIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX2dldEl0ZXJhdG9yTWV0aG9kIiwgInIiLCAic2xpY2UiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgImFycmF5TGlrZVRvQXJyYXkiLCAiX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9zbGljZWRUb0FycmF5IiwgImFycmF5V2l0aEhvbGVzIiwgIml0ZXJhYmxlVG9BcnJheUxpbWl0IiwgInVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIm5vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgImFycmF5V2l0aG91dEhvbGVzIiwgIml0ZXJhYmxlVG9BcnJheSIsICJub25JdGVyYWJsZVNwcmVhZCIsICJvd25LZXlzIiwgIkZBSUxTX09OX1BSSU1JVElWRVMiLCAiU1RSSUNUX01FVEhPRCIsICJmb3JFYWNoIiwgInJldmVyc2UiLCAiZGVsZXRlUHJvcGVydHlPclRocm93IiwgInNwbGljZSIsICJhc3NpZ24iLCAidmFsaWRhdGVBcmd1bWVudHNMZW5ndGgiLCAiRnVuY3Rpb24iLCAic2NoZWR1bGVyc0ZpeCIsICJzZXRJbnRlcnZhbCIsICJzZXRUaW1lb3V0IiwgIkVtaXR0ZXIiLCAibW9kdWxlIiwgIl9leHRlbmRzIiwgIl9pbmhlcml0c0xvb3NlIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAicm91bmQiLCAiYWJzIiwgIm5vdyIsICJwcm9wZXJ0eSIsICJwcmVmaXgiLCAiZWFjaCIsICJUb3VjaEFjdGlvbiIsICJub2RlIiwgInYiLCAiSW5wdXQiLCAiUG9pbnRlckV2ZW50SW5wdXQiLCAidG9BcnJheSIsICJzb3J0IiwgIlRvdWNoSW5wdXQiLCAiTW91c2VJbnB1dCIsICJyZW1vdmVMYXN0VG91Y2giLCAiVG91Y2hNb3VzZUlucHV0IiwgIlJlY29nbml6ZXIiLCAiZW1pdCIsICJUYXBSZWNvZ25pemVyIiwgIkF0dHJSZWNvZ25pemVyIiwgIlBhblJlY29nbml6ZXIiLCAiU3dpcGVSZWNvZ25pemVyIiwgIlBpbmNoUmVjb2duaXplciIsICJSb3RhdGVSZWNvZ25pemVyIiwgIlByZXNzUmVjb2duaXplciIsICJkZWZhdWx0cyIsICJkYXRhIiwgIk1hbmFnZXIiLCAiU2luZ2xlVG91Y2hJbnB1dCIsICJsb2ciLCAiZXh0ZW5kIiwgIm1lcmdlIiwgImJhc2UiLCAiSGFtbWVyIiwgIkRFTEVURSIsICJwdXJlRGVlcE9iamVjdEFzc2lnbiIsICJfbGVuIiwgImFyZ3VtZW50cyIsICJ1cGRhdGVzIiwgIkFycmF5IiwgIl9rZXkiLCAiZGVlcE9iamVjdEFzc2lnbiIsICJfY29uY2F0SW5zdGFuY2VQcm9wZXJ0eSIsICJtZXJnZWQiLCAiZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5IiwgInN0cmlwRGVsZXRlIiwgIl9sZW4yIiwgIl9rZXkyIiwgImEiLCAiRGF0ZSIsICJzZXRUaW1lIiwgImdldFRpbWUiLCAiX2l0ZXJhdG9yIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9SZWZsZWN0JG93bktleXMiLCAiX3N0ZXAiLCAicyIsICJuIiwgImRvbmUiLCAicHJvcCIsICJwcm90b3R5cGUiLCAicHJvcGVydHlJc0VudW1lcmFibGUiLCAiY2xvbmUiLCAiZXJyIiwgImUiLCAiZiIsICJfaSIsICJfT2JqZWN0JGtleXMiLCAiX09iamVjdCRrZXlzMiIsICJhQ29uc3RydWN0b3IiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICJfc2V0UHJvdG90eXBlT2YiLCAicCIsICJfaW5oZXJpdHMiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9nZXRQcm90b3R5cGVPZiIsICJjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzIiwgImluc3RhbGxFcnJvckNhdXNlIiwgIiRFcnJvciIsICJpdGVyYXRlIiwgIm5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50IiwgInNldFNwZWNpZXMiLCAiYW5JbnN0YW5jZSIsICJzcGVjaWVzQ29uc3RydWN0b3IiLCAiSVNfSU9TIiwgIk1lc3NhZ2VDaGFubmVsIiwgIlN0cmluZyIsICJxdWV1ZSIsICJzZXRJbW1lZGlhdGUiLCAidGFzayIsICJRdWV1ZSIsICJNdXRhdGlvbk9ic2VydmVyIiwgIlByb21pc2UiLCAibWljcm90YXNrIiwgIm5vdGlmeSIsICJwcm9taXNlIiwgImhvc3RSZXBvcnRFcnJvcnMiLCAicGVyZm9ybSIsICJJU19ERU5PIiwgIk5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciIsICJOYXRpdmVQcm9taXNlUHJvdG90eXBlIiwgIk5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCIsICJGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiIsICJuZXdQcm9taXNlQ2FwYWJpbGl0eSIsICJuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSIsICJpc1RoZW5hYmxlIiwgInRoZW4iLCAiUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04iLCAiY291bnRlciIsICJwcm9taXNlUmVzb2x2ZSIsICJhbnkiLCAiaXNGdW5jdGlvbiIsICJfT2JqZWN0JGNyZWF0ZSIsICJfT2JqZWN0JGdldFByb3RvdHlwZU9mIiwgIl9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSIsICJfcHVzaEluc3RhbmNlUHJvcGVydHkiLCAiX09iamVjdCRzZXRQcm90b3R5cGVPZiIsICJfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkiLCAiX3JlZ2VuZXJhdG9yUnVudGltZSIsICJ0IiwgImRlZmluZSIsICJ3cmFwIiwgImMiLCAiQXN5bmNJdGVyYXRvciIsICJ1IiwgImgiLCAiaXNFeHRlbnNpYmxlIiwgImZhc3RLZXkiLCAiaW50ZXJuYWxNZXRhZGF0YU1vZHVsZSIsICJpbnRlcm5hbFN0YXRlR2V0dGVyRm9yIiwgImNvbGxlY3Rpb24iLCAiZGVmaW5lQnVpbHRJbnMiLCAiY29sbGVjdGlvblN0cm9uZyIsICJjbGVhciIsICJoYXMiLCAiTWFwIiwgInNvbWUiLCAiV0VCS0lUIiwgImdldFJhbmRvbVZhbHVlcyIsICJybmRzOCIsICJybmciLCAiYnl0ZVRvSGV4IiwgImlzSWQiLCAib3B0aW9ucyIsICJkZWxheSIsICJJbmZpbml0eSIsICJzZXRPcHRpb25zIiwgIl9mbHVzaElmTmVlZGVkIiwgImRlc3Ryb3kiLCAiZmx1c2giLCAiX2V4dGVuZGVkIiwgIm1ldGhvZHMiLCAib3JpZ2luYWwiLCAibmFtZSIsICJtZSIsICJFcnJvciIsICJhcmdzIiwgImZuIiwgImNvbnRleHQiLCAiZW50cnkiLCAiX3F1ZXVlIiwgIl90aGlzIiwgIl90aW1lb3V0IiwgImNsZWFyVGltZW91dCIsICJfc2V0VGltZW91dCIsICJfc3BsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJ1bmRlZmluZWQiLCAiRGF0YVNldFBhcnQiLCAiX3RyaWdnZXIiLCAiZXZlbnQiLCAic2VuZGVySWQiLCAiX3N1YnNjcmliZXJzIiwgInN1YnNjcmliZXIiLCAiU2V0IiwgIkRhdGFTdHJlYW0iLCAicGFpcnMiLCAiX3BhaXJzIiwgIm1hcmsiLCAiX3N0ZXAkdmFsdWUiLCAiaXRlbSIsICJ2YWx1ZSQiLCAidDAiLCAiZmluaXNoIiwgIl9pdGVyYXRvcjIiLCAiX3N0ZXAyIiwgIl9zdGVwMiR2YWx1ZSIsICJlbnRyaWVzJCIsICJfaXRlcmF0b3IzIiwgIl9zdGVwMyIsICJfc3RlcDMkdmFsdWUiLCAia2V5cyQiLCAiX2l0ZXJhdG9yNCIsICJfc3RlcDQiLCAiX3N0ZXA0JHZhbHVlIiwgInZhbHVlcyQiLCAidG9JZEFycmF5IiwgIl9jb250ZXh0NSIsICJwYWlyIiwgInRvSXRlbUFycmF5IiwgIl9jb250ZXh0NiIsICJ0b0VudHJ5QXJyYXkiLCAidG9PYmplY3RNYXAiLCAiX2l0ZXJhdG9yNSIsICJfc3RlcDUiLCAiX3N0ZXA1JHZhbHVlIiwgInRvTWFwIiwgIl9NYXAiLCAidG9JZFNldCIsICJfU2V0IiwgInRvSXRlbVNldCIsICJjYWNoZSIsICJkaXN0aW5jdCIsICJfaXRlcmF0b3I2IiwgIl9zdGVwNiIsICJfc3RlcDYkdmFsdWUiLCAiX1N5bWJvbCRpdGVyYXRvcjIiLCAiX2NhbGxlZSIsICJfaXRlcmF0b3I3IiwgIl9zdGVwNyIsICJfc3RlcDckdmFsdWUiLCAiX2NhbGxlZSQiLCAiX2NvbnRleHQ3IiwgIl9pdGVyYXRvcjgiLCAiX3N0ZXA4IiwgIl9zdGVwOCR2YWx1ZSIsICJfY2FsbGVlMiIsICJfaXRlcmF0b3I5IiwgIl9zdGVwOSIsICJfc3RlcDkkdmFsdWUiLCAiX2NhbGxlZTIkIiwgIl9jb250ZXh0OCIsICJpdGVyIiwgIl9nZXRJdGVyYXRvciIsICJjdXJyIiwgIm1heEl0ZW0iLCAibWF4VmFsdWUiLCAiX2N1cnIkdmFsdWUiLCAibWluSXRlbSIsICJtaW5WYWx1ZSIsICJfY3VyciR2YWx1ZTIiLCAiYWNjdW11bGF0b3IiLCAiX2l0ZXJhdG9yMTAiLCAiX3N0ZXAxMCIsICJfc3RlcDEwJHZhbHVlIiwgIl9jb250ZXh0OSIsICJfc29ydEluc3RhbmNlUHJvcGVydHkiLCAiX3JlZiIsICJfcmVmMiIsICJfcmVmMyIsICJpZEEiLCAiaXRlbUEiLCAiX3JlZjQiLCAiaWRCIiwgIml0ZW1CIiwgImVuc3VyZUZ1bGxJdGVtIiwgImlkUHJvcCIsICJ1dWlkNCIsICJEYXRhU2V0IiwgIl9EYXRhU2V0UGFydCIsICJfc3VwZXIiLCAiX2NyZWF0ZVN1cGVyIiwgIl9vcHRpb25zIiwgIl9kYXRhIiwgIl9pZFByb3AiLCAiZmllbGRJZCIsICJfdGhpczIiLCAiYWRkZWRJZHMiLCAiaWRzVG9BZGQiLCAiZCIsICJfc29tZUluc3RhbmNlUHJvcGVydHkiLCAibGVuIiwgIl9hZGRJdGVtIiwgIl90aGlzMyIsICJ1cGRhdGVkSWRzIiwgInVwZGF0ZWREYXRhIiwgImFkZE9yVXBkYXRlIiwgIm9yaWdJZCIsICJmdWxsSXRlbSIsICJvbGRJdGVtIiwgIl9PYmplY3QkYXNzaWduIiwgIl91cGRhdGVJdGVtIiwgImNvbnNvbGUiLCAid2FybiIsICJwcm9wcyIsICJ1cGRhdGVPbmx5IiwgIl90aGlzNCIsICJ1cGRhdGVFdmVudERhdGEiLCAiZmlyc3QiLCAic2Vjb25kIiwgImlkcyIsICJyZXR1cm5UeXBlIiwgIml0ZW1JZHMiLCAiaXRlbUlkIiwgIl9rZXlzSW5zdGFuY2VQcm9wZXJ0eSIsICJvcmRlciIsICJfc29ydCIsICJmaWVsZHMiLCAiX2ZpbHRlckZpZWxkcyIsICJyZXN1bHQiLCAicmVzdWx0YW50IiwgIl9pdGVtIiwgImdldElkcyIsICJnZXREYXRhU2V0IiwgIm1hcHBlZEl0ZW1zIiwgImZpbHRlcmVkSXRlbSIsICJmaWVsZCIsICJhdiIsICJidiIsICJyZW1vdmVkSWRzIiwgInJlbW92ZWRJdGVtcyIsICJpZGVudCIsICJkZWxldGUiLCAibWF4RmllbGQiLCAiX3ZhbHVlc0luc3RhbmNlUHJvcGVydHkiLCAiaXRlbUZpZWxkIiwgIm1pbkZpZWxkIiwgImNvdW50IiwgImV4aXN0cyIsICJqIiwgIl9KU09OJHN0cmluZ2lmeSIsICJfb2JqZWN0U3ByZWFkIiwgInN0cmVhbSIsICJfZW50cmllc0luc3RhbmNlUHJvcGVydHkiLCAiRGF0YVZpZXciLCAiX2xpc3RlbmVyIiwgIl9vbkV2ZW50IiwgInNldERhdGEiLCAiX2lkcyIsICJyZWZyZXNoIiwgIm9sZElkcyIsICJuZXdJZHMiLCAiZXJyb3IiLCAidmlld09wdGlvbnMiLCAidGhpc0ZpbHRlciIsICJvcHRpb25zRmlsdGVyIiwgImRlZmF1bHRGaWx0ZXIiLCAiZGlzcG9zZSIsICJfdGhpcyRfZGF0YSIsICJtZXNzYWdlIiwgInJlcGxhY2VtZW50IiwgImNvbmZpZ3VyYWJsZSIsICJwYXJhbXMiLCAib2xkSXRlbXMiLCAidXBkYXRlZEl0ZW1zIiwgImlzRGF0YVNldExpa2UiLCAiaXNEYXRhVmlld0xpa2UiLCAiY2hlY2siLCAiaXQiLCAiTWF0aCIsICJnbG9iYWwiLCAiZ2xvYmFsVGhpcyIsICJ3aW5kb3ciLCAic2VsZiIsICJ0aGlzIiwgIkZ1bmN0aW9uIiwgImZhaWxzIiwgImV4ZWMiLCAiZXJyb3IiLCAiZnVuY3Rpb25CaW5kTmF0aXZlIiwgInJlcXVpcmUkJDAiLCAidGVzdCIsICJiaW5kIiwgImhhc093blByb3BlcnR5IiwgIk5BVElWRV9CSU5EIiwgIkZ1bmN0aW9uUHJvdG90eXBlIiwgInByb3RvdHlwZSIsICJhcHBseSIsICJjYWxsIiwgImZ1bmN0aW9uQXBwbHkiLCAiUmVmbGVjdCIsICJhcmd1bWVudHMiLCAidW5jdXJyeVRoaXNXaXRoQmluZCIsICJmdW5jdGlvblVuY3VycnlUaGlzIiwgImZuIiwgInVuY3VycnlUaGlzIiwgInRvU3RyaW5nIiwgInN0cmluZ1NsaWNlIiwgInNsaWNlIiwgImNsYXNzb2ZSYXciLCAicmVxdWlyZSQkMSIsICJmdW5jdGlvblVuY3VycnlUaGlzQ2xhdXNlIiwgImRvY3VtZW50QWxsIiwgImRvY3VtZW50IiwgImFsbCIsICJkb2N1bWVudEFsbF8xIiwgIklTX0hUTUxEREEiLCAiaXNDYWxsYWJsZSIsICJhcmd1bWVudCIsICJkZXNjcmlwdG9ycyIsICJPYmplY3QiLCAiZGVmaW5lUHJvcGVydHkiLCAiZ2V0IiwgImZ1bmN0aW9uQ2FsbCIsICIkcHJvcGVydHlJc0VudW1lcmFibGUiLCAicHJvcGVydHlJc0VudW1lcmFibGUiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIk5BU0hPUk5fQlVHIiwgIm9iamVjdFByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImYiLCAiViIsICJkZXNjcmlwdG9yIiwgImVudW1lcmFibGUiLCAibWF0Y2giLCAidmVyc2lvbiIsICJjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IiLCAiYml0bWFwIiwgInZhbHVlIiwgImNvbmZpZ3VyYWJsZSIsICJ3cml0YWJsZSIsICJjbGFzc29mIiwgInJlcXVpcmUkJDIiLCAiJE9iamVjdCIsICJzcGxpdCIsICJpbmRleGVkT2JqZWN0IiwgImlzTnVsbE9yVW5kZWZpbmVkIiwgIiRUeXBlRXJyb3IiLCAiVHlwZUVycm9yIiwgInJlcXVpcmVPYmplY3RDb2VyY2libGUiLCAiSW5kZXhlZE9iamVjdCIsICJ0b0luZGV4ZWRPYmplY3QiLCAiaXNPYmplY3QiLCAicGF0aCIsICJhRnVuY3Rpb24iLCAidmFyaWFibGUiLCAiZ2V0QnVpbHRJbiIsICJuYW1lc3BhY2UiLCAibWV0aG9kIiwgImxlbmd0aCIsICJvYmplY3RJc1Byb3RvdHlwZU9mIiwgImlzUHJvdG90eXBlT2YiLCAiZW5naW5lVXNlckFnZW50IiwgIm5hdmlnYXRvciIsICJTdHJpbmciLCAidXNlckFnZW50IiwgInByb2Nlc3MiLCAiRGVubyIsICJ2ZXJzaW9ucyIsICJ2OCIsICJlbmdpbmVWOFZlcnNpb24iLCAiVjhfVkVSU0lPTiIsICIkU3RyaW5nIiwgInN5bWJvbENvbnN0cnVjdG9yRGV0ZWN0aW9uIiwgImdldE93blByb3BlcnR5U3ltYm9scyIsICJzeW1ib2wiLCAiU3ltYm9sIiwgInNoYW0iLCAidXNlU3ltYm9sQXNVaWQiLCAiaXRlcmF0b3IiLCAiaXNTeW1ib2wiLCAicmVxdWlyZSQkMyIsICIkU3ltYm9sIiwgInRyeVRvU3RyaW5nIiwgImFDYWxsYWJsZSIsICJnZXRNZXRob2QiLCAiUCIsICJmdW5jIiwgImRlZmluZUdsb2JhbFByb3BlcnR5IiwgImtleSIsICJTSEFSRUQiLCAic2hhcmVkU3RvcmUiLCAic3RvcmUiLCAic2hhcmVkTW9kdWxlIiwgInB1c2giLCAibW9kZSIsICJjb3B5cmlnaHQiLCAibGljZW5zZSIsICJzb3VyY2UiLCAidG9PYmplY3QiLCAiaGFzT3duUHJvcGVydHlfMSIsICJoYXNPd24iLCAiaWQiLCAicG9zdGZpeCIsICJyYW5kb20iLCAidWlkIiwgInNoYXJlZCIsICJOQVRJVkVfU1lNQk9MIiwgInJlcXVpcmUkJDQiLCAiVVNFX1NZTUJPTF9BU19VSUQiLCAicmVxdWlyZSQkNSIsICJXZWxsS25vd25TeW1ib2xzU3RvcmUiLCAiY3JlYXRlV2VsbEtub3duU3ltYm9sIiwgIndpdGhvdXRTZXR0ZXIiLCAid2VsbEtub3duU3ltYm9sIiwgIm5hbWUiLCAib3JkaW5hcnlUb1ByaW1pdGl2ZSIsICJpbnB1dCIsICJwcmVmIiwgInZhbCIsICJ2YWx1ZU9mIiwgIlRPX1BSSU1JVElWRSIsICJ0b1ByaW1pdGl2ZSIsICJyZXN1bHQiLCAiZXhvdGljVG9QcmltIiwgInRvUHJvcGVydHlLZXkiLCAiRVhJU1RTIiwgImNyZWF0ZUVsZW1lbnQiLCAiZG9jdW1lbnRDcmVhdGVFbGVtZW50IiwgImllOERvbURlZmluZSIsICJhIiwgIkRFU0NSSVBUT1JTIiwgInByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlIiwgInJlcXVpcmUkJDYiLCAiSUU4X0RPTV9ERUZJTkUiLCAicmVxdWlyZSQkNyIsICIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIm9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJPIiwgInJlcGxhY2VtZW50IiwgImlzRm9yY2VkIiwgImZlYXR1cmUiLCAiZGV0ZWN0aW9uIiwgImRhdGEiLCAibm9ybWFsaXplIiwgIlBPTFlGSUxMIiwgIk5BVElWRSIsICJzdHJpbmciLCAicmVwbGFjZSIsICJ0b0xvd2VyQ2FzZSIsICJpc0ZvcmNlZF8xIiwgImZ1bmN0aW9uQmluZENvbnRleHQiLCAidGhhdCIsICJ2OFByb3RvdHlwZURlZmluZUJ1ZyIsICJhbk9iamVjdCIsICJWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyIsICIkZGVmaW5lUHJvcGVydHkiLCAiRU5VTUVSQUJMRSIsICJDT05GSUdVUkFCTEUiLCAiV1JJVEFCTEUiLCAib2JqZWN0RGVmaW5lUHJvcGVydHkiLCAiQXR0cmlidXRlcyIsICJjdXJyZW50IiwgImRlZmluZVByb3BlcnR5TW9kdWxlIiwgImNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSIsICJvYmplY3QiLCAicmVxdWlyZSQkOCIsICJyZXF1aXJlJCQ5IiwgIndyYXBDb25zdHJ1Y3RvciIsICJOYXRpdmVDb25zdHJ1Y3RvciIsICJXcmFwcGVyIiwgImIiLCAiYyIsICJfZXhwb3J0IiwgIm9wdGlvbnMiLCAiRk9SQ0VEIiwgIlVTRV9OQVRJVkUiLCAiVklSVFVBTF9QUk9UT1RZUEUiLCAic291cmNlUHJvcGVydHkiLCAidGFyZ2V0UHJvcGVydHkiLCAibmF0aXZlUHJvcGVydHkiLCAicmVzdWx0UHJvcGVydHkiLCAiVEFSR0VUIiwgInRhcmdldCIsICJHTE9CQUwiLCAiU1RBVElDIiwgInN0YXQiLCAiUFJPVE8iLCAicHJvdG8iLCAibmF0aXZlU291cmNlIiwgInRhcmdldFByb3RvdHlwZSIsICJmb3JjZWQiLCAiZG9udENhbGxHZXRTZXQiLCAid3JhcCIsICJyZWFsIiwgImNlaWwiLCAiZmxvb3IiLCAidHJ1bmMiLCAieCIsICJuIiwgInRvSW50ZWdlck9ySW5maW5pdHkiLCAibnVtYmVyIiwgIm1heCIsICJtaW4iLCAidG9BYnNvbHV0ZUluZGV4IiwgImluZGV4IiwgImludGVnZXIiLCAidG9MZW5ndGgiLCAibGVuZ3RoT2ZBcnJheUxpa2UiLCAib2JqIiwgImNyZWF0ZU1ldGhvZCIsICJJU19JTkNMVURFUyIsICIkdGhpcyIsICJlbCIsICJmcm9tSW5kZXgiLCAiYXJyYXlJbmNsdWRlcyIsICJpbmNsdWRlcyIsICJpbmRleE9mIiwgImhpZGRlbktleXMiLCAib2JqZWN0S2V5c0ludGVybmFsIiwgIm5hbWVzIiwgImkiLCAiZW51bUJ1Z0tleXMiLCAiaW50ZXJuYWxPYmplY3RLZXlzIiwgIm9iamVjdEtleXMiLCAia2V5cyIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlIiwgIiRhc3NpZ24iLCAiYXNzaWduIiwgImNvbmNhdCIsICJvYmplY3RBc3NpZ24iLCAiQSIsICJCIiwgImFscGhhYmV0IiwgImZvckVhY2giLCAiY2hyIiwgImpvaW4iLCAiVCIsICJhcmd1bWVudHNMZW5ndGgiLCAiUyIsICJqIiwgImFyaXR5IiwgImFycmF5U2xpY2UiLCAiJEZ1bmN0aW9uIiwgImZhY3RvcmllcyIsICJmdW5jdGlvbkJpbmQiLCAiRiIsICJQcm90b3R5cGUiLCAicGFydEFyZ3MiLCAiYm91bmRGdW5jdGlvbiIsICJhcmdzIiwgIkMiLCAiYXJnc0xlbmd0aCIsICJsaXN0IiwgImVudHJ5VmlydHVhbCIsICJDT05TVFJVQ1RPUiIsICJwYXJlbnQiLCAib3duIiwgImRyYXdDaXJjbGUiLCAiY3R4IiwgInkiLCAiciIsICJiZWdpblBhdGgiLCAiYXJjIiwgIlBJIiwgImNsb3NlUGF0aCIsICJkcmF3Um91bmRSZWN0IiwgInciLCAiaCIsICJyMmQiLCAibW92ZVRvIiwgImxpbmVUbyIsICJkcmF3RWxsaXBzZSIsICJrYXBwYSIsICJveCIsICJveSIsICJ4ZSIsICJ5ZSIsICJ4bSIsICJ5bSIsICJiZXppZXJDdXJ2ZVRvIiwgImRyYXdEYXRhYmFzZSIsICJoRWxsaXBzZSIsICJ5bWIiLCAieWViIiwgImRyYXdEYXNoZWRMaW5lIiwgIngyIiwgInkyIiwgInBhdHRlcm4iLCAicGF0dGVybkxlbmd0aCIsICJkeCIsICJkeSIsICJzbG9wZSIsICJkaXN0UmVtYWluaW5nIiwgInNxcnQiLCAicGF0dGVybkluZGV4IiwgImRyYXciLCAieFN0ZXAiLCAiZGFzaExlbmd0aCIsICJzaGFwZU1hcCIsICJjaXJjbGUiLCAiZGFzaGVkTGluZSIsICJkYXRhYmFzZSIsICJkaWFtb25kIiwgImVsbGlwc2UiLCAiZWxsaXBzZV92aXMiLCAiaGV4YWdvbiIsICJjb3MiLCAic2luIiwgInJvdW5kUmVjdCIsICJzcXVhcmUiLCAicmVjdCIsICJzdGFyIiwgInJhZGl1cyIsICJ0cmlhbmdsZSIsICJzIiwgInMyIiwgImlyIiwgInRyaWFuZ2xlRG93biIsICJ0IiwgIkVtaXR0ZXIiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAib24iLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJldmVudCIsICJfY2FsbGJhY2tzIiwgIm9uY2UiLCAib2ZmIiwgInJlbW92ZUxpc3RlbmVyIiwgInJlbW92ZUFsbExpc3RlbmVycyIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgImNiIiwgImNhbGxiYWNrcyIsICJzcGxpY2UiLCAiZW1pdCIsICJBcnJheSIsICJsZW4iLCAibGlzdGVuZXJzIiwgImhhc0xpc3RlbmVycyIsICJzZXQiLCAiaGFzIiwgInRvU3RyaW5nVGFnU3VwcG9ydCIsICJUT19TVFJJTkdfVEFHX1NVUFBPUlQiLCAiVE9fU1RSSU5HX1RBRyIsICJDT1JSRUNUX0FSR1VNRU5UUyIsICJ0YWciLCAiY2FsbGVlIiwgImNoYXJBdCIsICJjaGFyQ29kZUF0IiwgIkNPTlZFUlRfVE9fU1RSSU5HIiwgInBvcyIsICJmaXJzdCIsICJzZWNvbmQiLCAicG9zaXRpb24iLCAic2l6ZSIsICJzdHJpbmdNdWx0aWJ5dGUiLCAiY29kZUF0IiwgIldlYWtNYXAiLCAid2Vha01hcEJhc2ljRGV0ZWN0aW9uIiwgInNoYXJlZEtleSIsICJOQVRJVkVfV0VBS19NQVAiLCAiT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQiLCAic3RhdGUiLCAibWV0YWRhdGEiLCAiZmFjYWRlIiwgIlNUQVRFIiwgImludGVybmFsU3RhdGUiLCAiZW5mb3JjZSIsICJnZXR0ZXJGb3IiLCAiVFlQRSIsICJ0eXBlIiwgImdldERlc2NyaXB0b3IiLCAiZnVuY3Rpb25OYW1lIiwgIlBST1BFUiIsICJvYmplY3REZWZpbmVQcm9wZXJ0aWVzIiwgImRlZmluZVByb3BlcnRpZXMiLCAiUHJvcGVydGllcyIsICJwcm9wcyIsICJhY3RpdmVYRG9jdW1lbnQiLCAiaHRtbCIsICJkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlIiwgIlBST1RPVFlQRSIsICJTQ1JJUFQiLCAiSUVfUFJPVE8iLCAiRW1wdHlDb25zdHJ1Y3RvciIsICJzY3JpcHRUYWciLCAiY29udGVudCIsICJMVCIsICJOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYIiwgIndyaXRlIiwgImNsb3NlIiwgInRlbXAiLCAicGFyZW50V2luZG93IiwgIk51bGxQcm90b09iamVjdCIsICJBY3RpdmVYT2JqZWN0IiwgImlmcmFtZURvY3VtZW50IiwgImlmcmFtZSIsICJKUyIsICJkb21haW4iLCAic3R5bGUiLCAiZGlzcGxheSIsICJhcHBlbmRDaGlsZCIsICJzcmMiLCAiY29udGVudFdpbmRvdyIsICJvcGVuIiwgIkl0ZXJhdG9yUHJvdG90eXBlIiwgIlByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSIsICJhcnJheUl0ZXJhdG9yIiwgIm9iamVjdENyZWF0ZSIsICJjcmVhdGUiLCAiY29ycmVjdFByb3RvdHlwZUdldHRlciIsICJjb25zdHJ1Y3RvciIsICJnZXRQcm90b3R5cGVPZiIsICJDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIiLCAiT2JqZWN0UHJvdG90eXBlIiwgIm9iamVjdEdldFByb3RvdHlwZU9mIiwgImRlZmluZUJ1aWx0SW4iLCAiSVRFUkFUT1IiLCAiQlVHR1lfU0FGQVJJX0lURVJBVE9SUyIsICJORVdfSVRFUkFUT1JfUFJPVE9UWVBFIiwgIml0ZXJhdG9yc0NvcmUiLCAib2JqZWN0VG9TdHJpbmciLCAic2V0VG9TdHJpbmdUYWciLCAiVEFHIiwgIlNFVF9NRVRIT0QiLCAiaXRlcmF0b3JzIiwgIkl0ZXJhdG9ycyIsICJyZXR1cm5UaGlzIiwgInVuY3VycnlUaGlzQWNjZXNzb3IiLCAiYVBvc3NpYmxlUHJvdG90eXBlIiwgIm9iamVjdFNldFByb3RvdHlwZU9mIiwgInNldFByb3RvdHlwZU9mIiwgInNldHRlciIsICJDT1JSRUNUX1NFVFRFUiIsICJfX3Byb3RvX18iLCAiJCIsICJGdW5jdGlvbk5hbWUiLCAiY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciIsICJJdGVyYXRvckNvbnN0cnVjdG9yIiwgIk5BTUUiLCAibmV4dCIsICJFTlVNRVJBQkxFX05FWFQiLCAicmVxdWlyZSQkMTAiLCAicmVxdWlyZSQkMTIiLCAiSXRlcmF0b3JzQ29yZSIsICJyZXF1aXJlJCQxMyIsICJQUk9QRVJfRlVOQ1RJT05fTkFNRSIsICJyZXF1aXJlJCQxMSIsICJLRVlTIiwgIlZBTFVFUyIsICJFTlRSSUVTIiwgIml0ZXJhdG9yRGVmaW5lIiwgIkl0ZXJhYmxlIiwgIkRFRkFVTFQiLCAiSVNfU0VUIiwgIkN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSIsICJtZXRob2RzIiwgIktFWSIsICJnZXRJdGVyYXRpb25NZXRob2QiLCAiS0lORCIsICJkZWZhdWx0SXRlcmF0b3IiLCAiSXRlcmFibGVQcm90b3R5cGUiLCAiSU5DT1JSRUNUX1ZBTFVFU19OQU1FIiwgIm5hdGl2ZUl0ZXJhdG9yIiwgImFueU5hdGl2ZUl0ZXJhdG9yIiwgImVudHJpZXMiLCAidmFsdWVzIiwgImNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QiLCAiZG9uZSIsICJJbnRlcm5hbFN0YXRlTW9kdWxlIiwgImRlZmluZUl0ZXJhdG9yIiwgIlNUUklOR19JVEVSQVRPUiIsICJzZXRJbnRlcm5hbFN0YXRlIiwgImdldEludGVybmFsU3RhdGUiLCAiaXRlcmF0ZWQiLCAicG9pbnQiLCAidW5kZWZpbmVkIiwgIml0ZXJhdG9yQ2xvc2UiLCAia2luZCIsICJpbm5lclJlc3VsdCIsICJpbm5lckVycm9yIiwgIkFycmF5UHJvdG90eXBlIiwgImlzQXJyYXlJdGVyYXRvck1ldGhvZCIsICJmdW5jdGlvblRvU3RyaW5nIiwgImluc3BlY3RTb3VyY2UiLCAibm9vcCIsICJlbXB0eSIsICJjb25zdHJ1Y3QiLCAiY29uc3RydWN0b3JSZWdFeHAiLCAiSU5DT1JSRUNUX1RPX1NUUklORyIsICJpc0NvbnN0cnVjdG9yTW9kZXJuIiwgImlzQ29uc3RydWN0b3JMZWdhY3kiLCAiaXNDb25zdHJ1Y3RvciIsICJjYWxsZWQiLCAiY3JlYXRlUHJvcGVydHkiLCAicHJvcGVydHlLZXkiLCAiZ2V0SXRlcmF0b3JNZXRob2QiLCAiZ2V0SXRlcmF0b3IiLCAidXNpbmdJdGVyYXRvciIsICJpdGVyYXRvck1ldGhvZCIsICJjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nIiwgIiRBcnJheSIsICJTQUZFX0NMT1NJTkciLCAiaXRlcmF0b3JXaXRoUmV0dXJuIiwgInJldHVybiIsICJmcm9tIiwgImFycmF5TGlrZSIsICJJU19DT05TVFJVQ1RPUiIsICJtYXBmbiIsICJtYXBwaW5nIiwgInN0ZXAiLCAiY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uIiwgIlNLSVBfQ0xPU0lORyIsICJJVEVSQVRJT05fU1VQUE9SVCIsICJpdGVyYWJsZSIsICJBUlJBWV9JVEVSQVRPUiIsICJkZWZpbmVJdGVyYXRvciQxIiwgIkFyZ3VtZW50cyIsICJnZXRJdGVyYXRvck1ldGhvZF8xIiwgIkRPTUl0ZXJhYmxlcyIsICJDU1NSdWxlTGlzdCIsICJDU1NTdHlsZURlY2xhcmF0aW9uIiwgIkNTU1ZhbHVlTGlzdCIsICJDbGllbnRSZWN0TGlzdCIsICJET01SZWN0TGlzdCIsICJET01TdHJpbmdMaXN0IiwgIkRPTVRva2VuTGlzdCIsICJEYXRhVHJhbnNmZXJJdGVtTGlzdCIsICJGaWxlTGlzdCIsICJIVE1MQWxsQ29sbGVjdGlvbiIsICJIVE1MQ29sbGVjdGlvbiIsICJIVE1MRm9ybUVsZW1lbnQiLCAiSFRNTFNlbGVjdEVsZW1lbnQiLCAiTWVkaWFMaXN0IiwgIk1pbWVUeXBlQXJyYXkiLCAiTmFtZWROb2RlTWFwIiwgIk5vZGVMaXN0IiwgIlBhaW50UmVxdWVzdExpc3QiLCAiUGx1Z2luIiwgIlBsdWdpbkFycmF5IiwgIlNWR0xlbmd0aExpc3QiLCAiU1ZHTnVtYmVyTGlzdCIsICJTVkdQYXRoU2VnTGlzdCIsICJTVkdQb2ludExpc3QiLCAiU1ZHU3RyaW5nTGlzdCIsICJTVkdUcmFuc2Zvcm1MaXN0IiwgIlNvdXJjZUJ1ZmZlckxpc3QiLCAiU3R5bGVTaGVldExpc3QiLCAiVGV4dFRyYWNrQ3VlTGlzdCIsICJUZXh0VHJhY2tMaXN0IiwgIlRvdWNoTGlzdCIsICJDT0xMRUNUSU9OX05BTUUiLCAiQ29sbGVjdGlvbiIsICJDb2xsZWN0aW9uUHJvdG90eXBlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJpbnN0YW5jZSIsICJDb25zdHJ1Y3RvciIsICIkJEsiLCAiZGVzYyIsICJpc0FycmF5IiwgImRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciIsICJTUEVDSUVTIiwgImFycmF5U3BlY2llc0NvbnN0cnVjdG9yIiwgIm9yaWdpbmFsQXJyYXkiLCAiYXJyYXlTcGVjaWVzQ3JlYXRlIiwgImFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQiLCAiTUVUSE9EX05BTUUiLCAiYXJyYXkiLCAiZm9vIiwgIkJvb2xlYW4iLCAiSVNfQ09OQ0FUX1NQUkVBREFCTEUiLCAiSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCIsICJpc0NvbmNhdFNwcmVhZGFibGUiLCAic3ByZWFkYWJsZSIsICJhcmciLCAiayIsICJFIiwgIm9iamVjdEdldE93blByb3BlcnR5TmFtZXMiLCAiZ2V0T3duUHJvcGVydHlOYW1lcyIsICJhcnJheVNsaWNlU2ltcGxlIiwgInN0YXJ0IiwgImVuZCIsICJmaW4iLCAiJGdldE93blByb3BlcnR5TmFtZXMiLCAid2luZG93TmFtZXMiLCAib2JqZWN0R2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsIiwgImRlZmluZUJ1aWx0SW5BY2Nlc3NvciIsICJ3ZWxsS25vd25TeW1ib2xXcmFwcGVkIiwgIndyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUiLCAid2VsbEtub3duU3ltYm9sRGVmaW5lIiwgInN5bWJvbERlZmluZVRvUHJpbWl0aXZlIiwgIlN5bWJvbFByb3RvdHlwZSIsICJoaW50IiwgIklTX01BUCIsICJJU19GSUxURVIiLCAiSVNfU09NRSIsICJJU19FVkVSWSIsICJJU19GSU5EX0lOREVYIiwgIklTX0ZJTFRFUl9SRUpFQ1QiLCAiTk9fSE9MRVMiLCAiY2FsbGJhY2tmbiIsICJzcGVjaWZpY0NyZWF0ZSIsICJhcnJheUl0ZXJhdGlvbiIsICJtYXAiLCAiZmlsdGVyIiwgInNvbWUiLCAiZXZlcnkiLCAiZmluZCIsICJmaW5kSW5kZXgiLCAiZmlsdGVyUmVqZWN0IiwgIiR0b1N0cmluZyIsICJyZXF1aXJlJCQxNCIsICJuYXRpdmVPYmplY3RDcmVhdGUiLCAicmVxdWlyZSQkMTUiLCAicmVxdWlyZSQkMTYiLCAiZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSIsICJyZXF1aXJlJCQxNyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwiLCAicmVxdWlyZSQkMTgiLCAicmVxdWlyZSQkMTkiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlIiwgInJlcXVpcmUkJDIwIiwgInJlcXVpcmUkJDIxIiwgInJlcXVpcmUkJDIyIiwgInJlcXVpcmUkJDIzIiwgInJlcXVpcmUkJDI0IiwgInJlcXVpcmUkJDI1IiwgInJlcXVpcmUkJDI2IiwgInJlcXVpcmUkJDI4IiwgInJlcXVpcmUkJDI5IiwgInJlcXVpcmUkJDMwIiwgInJlcXVpcmUkJDMxIiwgImRlZmluZVdlbGxLbm93blN5bWJvbCIsICJyZXF1aXJlJCQzMiIsICJkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSIsICJyZXF1aXJlJCQzMyIsICJyZXF1aXJlJCQzNCIsICJyZXF1aXJlJCQzNSIsICIkZm9yRWFjaCIsICJyZXF1aXJlJCQzNiIsICJISURERU4iLCAicmVxdWlyZSQkMjciLCAiU1lNQk9MIiwgIlJhbmdlRXJyb3IiLCAiUU9iamVjdCIsICJuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAibmF0aXZlRGVmaW5lUHJvcGVydHkiLCAibmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyIsICJuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSIsICJBbGxTeW1ib2xzIiwgIk9iamVjdFByb3RvdHlwZVN5bWJvbHMiLCAiVVNFX1NFVFRFUiIsICJmaW5kQ2hpbGQiLCAiZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSIsICJPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yIiwgInNldFN5bWJvbERlc2NyaXB0b3IiLCAiZGVzY3JpcHRpb24iLCAiJGRlZmluZVByb3BlcnRpZXMiLCAicHJvcGVydGllcyIsICIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgIklTX09CSkVDVF9QUk9UT1RZUEUiLCAiJCRJIiwgIiRmb3JFYWNoJDEiLCAidXNlU2V0dGVyIiwgInVzZVNpbXBsZSIsICJzeW1ib2xSZWdpc3RyeURldGVjdGlvbiIsICJrZXlGb3IiLCAiTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSIsICJTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5IiwgIlN5bWJvbFRvU3RyaW5nUmVnaXN0cnkiLCAiZm9yIiwgInN5bSIsICJnZXRSZXBsYWNlckZ1bmN0aW9uIiwgInJlcGxhY2VyIiwgInJhd0xlbmd0aCIsICJlbGVtZW50IiwgImtleXNMZW5ndGgiLCAicm9vdCIsICIkc3RyaW5naWZ5IiwgIm51bWJlclRvU3RyaW5nIiwgInRlc3RlciIsICJsb3ciLCAiaGkiLCAiV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIiwgIklMTF9GT1JNRURfVU5JQ09ERSIsICJzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCIsICIkcmVwbGFjZXIiLCAiZml4SWxsRm9ybWVkIiwgIm9mZnNldCIsICJwcmV2IiwgInN0cmluZ2lmeSIsICJzcGFjZSIsICJKU09OIiwgIk1FVEFEQVRBIiwgInRoaXNTeW1ib2xWYWx1ZSIsICJzeW1ib2xJc1JlZ2lzdGVyZWQiLCAiaXNSZWdpc3RlcmVkU3ltYm9sIiwgIiRpc1dlbGxLbm93blN5bWJvbCIsICJpc1dlbGxLbm93blN5bWJvbCIsICJzeW1ib2xLZXlzIiwgInN5bWJvbEtleXNMZW5ndGgiLCAic3ltYm9sS2V5IiwgInN5bWJvbElzV2VsbEtub3duIiwgImlzUmVnaXN0ZXJlZCIsICJpc1dlbGxLbm93biIsICJfdHlwZW9mIiwgIm8iLCAiX1N5bWJvbCIsICJfU3ltYm9sJGl0ZXJhdG9yIiwgIl90b1Byb3BlcnR5S2V5IiwgInByaW0iLCAiX1N5bWJvbCR0b1ByaW1pdGl2ZSIsICJyZXMiLCAiTnVtYmVyIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9PYmplY3QkZGVmaW5lUHJvcGVydHkiLCAiX2NyZWF0ZUNsYXNzIiwgInByb3RvUHJvcHMiLCAic3RhdGljUHJvcHMiLCAiYXJyYXlTZXRMZW5ndGgiLCAic2V0QXJyYXlMZW5ndGgiLCAicHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoIiwgIml0ZW0iLCAiYXJnQ291bnQiLCAibmF0aXZlU2xpY2UiLCAiSEFTX1NQRUNJRVNfU1VQUE9SVCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJhcnIiLCAiYXJyMiIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAibWluTGVuIiwgIl9jb250ZXh0IiwgImFycmF5TGlrZVRvQXJyYXkiLCAiX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJfQXJyYXkkZnJvbSIsICJfc2xpY2VkVG9BcnJheSIsICJfQXJyYXkkaXNBcnJheSIsICJsIiwgIl9nZXRJdGVyYXRvck1ldGhvZCIsICJlIiwgInUiLCAiX3B1c2hJbnN0YW5jZVByb3BlcnR5IiwgInVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIm5vbkl0ZXJhYmxlUmVzdCIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiaXRlciIsICJub25JdGVyYWJsZVNwcmVhZCIsICJvd25LZXlzIiwgIiRtYXAiLCAibmF0aXZlS2V5cyIsICIkRGF0ZSIsICJEYXRlIiwgInRoaXNUaW1lVmFsdWUiLCAiZ2V0VGltZSIsICIkJHUiLCAibm93IiwgImFycmF5TWV0aG9kSXNTdHJpY3QiLCAiYXJyYXlGb3JFYWNoIiwgIm5hdGl2ZVJldmVyc2UiLCAicmV2ZXJzZSIsICIkJHMiLCAiZGVsZXRlUHJvcGVydHlPclRocm93IiwgImRlbGV0ZUNvdW50IiwgImluc2VydENvdW50IiwgImFjdHVhbERlbGV0ZUNvdW50IiwgInRvIiwgImFjdHVhbFN0YXJ0IiwgIiRpbmNsdWRlcyIsICJNQVRDSCIsICJpc1JlZ0V4cCIsICJub3RBUmVnRXhwIiwgImNvcnJlY3RJc1JlZ0V4cExvZ2ljIiwgInJlZ2V4cCIsICJlcnJvcjEiLCAiZXJyb3IyIiwgInN0cmluZ0luZGV4T2YiLCAic2VhcmNoU3RyaW5nIiwgImFycmF5TWV0aG9kIiwgInN0cmluZ01ldGhvZCIsICJTdHJpbmdQcm90b3R5cGUiLCAibmF0aXZlR2V0UHJvdG90eXBlT2YiLCAiJGZpbHRlciIsICJ3aGl0ZXNwYWNlcyIsICJsdHJpbSIsICJSZWdFeHAiLCAicnRyaW0iLCAic3RyaW5nVHJpbSIsICJ0cmltIiwgIiRwYXJzZUludCIsICJwYXJzZUludCIsICJoZXgiLCAibnVtYmVyUGFyc2VJbnQiLCAicmFkaXgiLCAiJGluZGV4T2YiLCAibmF0aXZlSW5kZXhPZiIsICJORUdBVElWRV9aRVJPIiwgInNlYXJjaEVsZW1lbnQiLCAiRCIsICJlbmdpbmVJc0J1biIsICJCdW4iLCAiRU5HSU5FX0lTX0JVTiIsICJVU0VSX0FHRU5UIiwgInZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoIiwgInBhc3NlZCIsICJyZXF1aXJlZCIsICJXUkFQIiwgInNjaGVkdWxlcnNGaXgiLCAic2NoZWR1bGVyIiwgImhhc1RpbWVBcmciLCAiZmlyc3RQYXJhbUluZGV4IiwgImhhbmRsZXIiLCAidGltZW91dCIsICJib3VuZEFyZ3MiLCAicGFyYW1zIiwgImNhbGxiYWNrIiwgInNldEludGVydmFsIiwgInNldFRpbWVvdXQiLCAiZmlsbCIsICJlbmRQb3MiLCAiX2V4dGVuZHMiLCAiX2luaGVyaXRzTG9vc2UiLCAic3ViQ2xhc3MiLCAic3VwZXJDbGFzcyIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIlJlZmVyZW5jZUVycm9yIiwgIm91dHB1dCIsICJuZXh0S2V5IiwgIndpbiIsICJhc3NpZ24kMSIsICJWRU5ET1JfUFJFRklYRVMiLCAiVEVTVF9FTEVNRU5UIiwgInJvdW5kIiwgImFicyIsICJwcmVmaXhlZCIsICJwcm9wZXJ0eSIsICJwcmVmaXgiLCAicHJvcCIsICJjYW1lbFByb3AiLCAidG9VcHBlckNhc2UiLCAiUFJFRklYRURfVE9VQ0hfQUNUSU9OIiwgIk5BVElWRV9UT1VDSF9BQ1RJT04iLCAiVE9VQ0hfQUNUSU9OX0NPTVBVVEUiLCAiVE9VQ0hfQUNUSU9OX0FVVE8iLCAiVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTiIsICJUT1VDSF9BQ1RJT05fTk9ORSIsICJUT1VDSF9BQ1RJT05fUEFOX1giLCAiVE9VQ0hfQUNUSU9OX1BBTl9ZIiwgIlRPVUNIX0FDVElPTl9NQVAiLCAidG91Y2hNYXAiLCAiY3NzU3VwcG9ydHMiLCAiQ1NTIiwgInN1cHBvcnRzIiwgImdldFRvdWNoQWN0aW9uUHJvcHMiLCAiU1VQUE9SVF9UT1VDSCIsICJTVVBQT1JUX1BPSU5URVJfRVZFTlRTIiwgIlNVUFBPUlRfT05MWV9UT1VDSCIsICJJTlBVVF9UWVBFX1RPVUNIIiwgIklOUFVUX1RZUEVfTU9VU0UiLCAiQ09NUFVURV9JTlRFUlZBTCIsICJJTlBVVF9TVEFSVCIsICJJTlBVVF9FTkQiLCAiSU5QVVRfQ0FOQ0VMIiwgIkRJUkVDVElPTl9OT05FIiwgIkRJUkVDVElPTl9MRUZUIiwgIkRJUkVDVElPTl9SSUdIVCIsICJESVJFQ1RJT05fVVAiLCAiRElSRUNUSU9OX0RPV04iLCAiRElSRUNUSU9OX0hPUklaT05UQUwiLCAiRElSRUNUSU9OX1ZFUlRJQ0FMIiwgIkRJUkVDVElPTl9BTEwiLCAiUFJPUFNfWFkiLCAiUFJPUFNfQ0xJRU5UX1hZIiwgImVhY2giLCAiY29udGV4dCIsICJib29sT3JGbiIsICJpblN0ciIsICJzdHIiLCAiVG91Y2hBY3Rpb24iLCAibWFuYWdlciIsICJfcHJvdG8iLCAiY29tcHV0ZSIsICJhY3Rpb25zIiwgInVwZGF0ZSIsICJ0b3VjaEFjdGlvbiIsICJyZWNvZ25pemVycyIsICJyZWNvZ25pemVyIiwgImVuYWJsZSIsICJnZXRUb3VjaEFjdGlvbiIsICJoYXNQYW5YIiwgImhhc1BhblkiLCAicHJldmVudERlZmF1bHRzIiwgInNyY0V2ZW50IiwgImRpcmVjdGlvbiIsICJvZmZzZXREaXJlY3Rpb24iLCAic2Vzc2lvbiIsICJwcmV2ZW50ZWQiLCAicHJldmVudERlZmF1bHQiLCAiaGFzTm9uZSIsICJpc1RhcFBvaW50ZXIiLCAicG9pbnRlcnMiLCAiaXNUYXBNb3ZlbWVudCIsICJkaXN0YW5jZSIsICJpc1RhcFRvdWNoVGltZSIsICJkZWx0YVRpbWUiLCAicHJldmVudFNyYyIsICJoYXNQYXJlbnQiLCAibm9kZSIsICJwYXJlbnROb2RlIiwgImdldENlbnRlciIsICJwb2ludGVyc0xlbmd0aCIsICJjbGllbnRYIiwgImNsaWVudFkiLCAic2ltcGxlQ2xvbmVJbnB1dERhdGEiLCAidGltZVN0YW1wIiwgImNlbnRlciIsICJkZWx0YVgiLCAiZGVsdGFZIiwgImdldERpc3RhbmNlIiwgInAxIiwgInAyIiwgImdldEFuZ2xlIiwgImF0YW4yIiwgImdldERpcmVjdGlvbiIsICJnZXRWZWxvY2l0eSIsICJjb21wdXRlSW5wdXREYXRhIiwgImZpcnN0SW5wdXQiLCAiZmlyc3RNdWx0aXBsZSIsICJvZmZzZXRDZW50ZXIiLCAiYW5nbGUiLCAib2Zmc2V0RGVsdGEiLCAicHJldkRlbHRhIiwgInByZXZJbnB1dCIsICJldmVudFR5cGUiLCAib3ZlcmFsbFZlbG9jaXR5IiwgIm92ZXJhbGxWZWxvY2l0eVgiLCAib3ZlcmFsbFZlbG9jaXR5WSIsICJzY2FsZSIsICJyb3RhdGlvbiIsICJtYXhQb2ludGVycyIsICJ2ZWxvY2l0eSIsICJ2ZWxvY2l0eVgiLCAidmVsb2NpdHlZIiwgImxhc3QiLCAibGFzdEludGVydmFsIiwgInYiLCAic3JjRXZlbnRUYXJnZXQiLCAiY29tcG9zZWRQYXRoIiwgImlucHV0SGFuZGxlciIsICJwb2ludGVyc0xlbiIsICJjaGFuZ2VkUG9pbnRlcnNMZW4iLCAiY2hhbmdlZFBvaW50ZXJzIiwgImlzRmlyc3QiLCAiaXNGaW5hbCIsICJyZWNvZ25pemUiLCAic3BsaXRTdHIiLCAiYWRkRXZlbnRMaXN0ZW5lcnMiLCAidHlwZXMiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lcnMiLCAiZ2V0V2luZG93Rm9yRWxlbWVudCIsICJkb2MiLCAib3duZXJEb2N1bWVudCIsICJkZWZhdWx0VmlldyIsICJJbnB1dCIsICJpbnB1dFRhcmdldCIsICJkb21IYW5kbGVyIiwgImV2IiwgImluaXQiLCAiZXZFbCIsICJldlRhcmdldCIsICJldldpbiIsICJkZXN0cm95IiwgImluQXJyYXkiLCAiZmluZEJ5S2V5IiwgIlBPSU5URVJfSU5QVVRfTUFQIiwgInBvaW50ZXJkb3duIiwgInBvaW50ZXJtb3ZlIiwgInBvaW50ZXJ1cCIsICJwb2ludGVyY2FuY2VsIiwgInBvaW50ZXJvdXQiLCAiSUUxMF9QT0lOVEVSX1RZUEVfRU5VTSIsICJQT0lOVEVSX0VMRU1FTlRfRVZFTlRTIiwgIlBPSU5URVJfV0lORE9XX0VWRU5UUyIsICJNU1BvaW50ZXJFdmVudCIsICJQb2ludGVyRXZlbnQiLCAiUG9pbnRlckV2ZW50SW5wdXQiLCAiX0lucHV0IiwgIl90aGlzIiwgInBvaW50ZXJFdmVudHMiLCAicmVtb3ZlUG9pbnRlciIsICJldmVudFR5cGVOb3JtYWxpemVkIiwgInBvaW50ZXJUeXBlIiwgImlzVG91Y2giLCAic3RvcmVJbmRleCIsICJwb2ludGVySWQiLCAiYnV0dG9uIiwgInRvQXJyYXkiLCAidW5pcXVlQXJyYXkiLCAic29ydCIsICJyZXN1bHRzIiwgIlRPVUNIX0lOUFVUX01BUCIsICJ0b3VjaHN0YXJ0IiwgInRvdWNobW92ZSIsICJ0b3VjaGVuZCIsICJ0b3VjaGNhbmNlbCIsICJUb3VjaElucHV0IiwgInRhcmdldElkcyIsICJ0b3VjaGVzIiwgImdldFRvdWNoZXMiLCAidGFyZ2V0VG91Y2hlcyIsICJhbGxUb3VjaGVzIiwgImlkZW50aWZpZXIiLCAiY2hhbmdlZFRvdWNoZXMiLCAiY2hhbmdlZFRhcmdldFRvdWNoZXMiLCAidG91Y2giLCAiTU9VU0VfSU5QVVRfTUFQIiwgIm1vdXNlZG93biIsICJtb3VzZW1vdmUiLCAibW91c2V1cCIsICJNb3VzZUlucHV0IiwgInByZXNzZWQiLCAid2hpY2giLCAiREVEVVBfVElNRU9VVCIsICJzZXRMYXN0VG91Y2giLCAiZXZlbnREYXRhIiwgInByaW1hcnlUb3VjaCIsICJsYXN0VG91Y2giLCAibHRzIiwgImxhc3RUb3VjaGVzIiwgInJlY29yZFRvdWNoZXMiLCAiaXNTeW50aGV0aWNFdmVudCIsICJUb3VjaE1vdXNlSW5wdXQiLCAiX21hbmFnZXIiLCAiaW5wdXRFdmVudCIsICJpbnB1dERhdGEiLCAiaXNNb3VzZSIsICJzb3VyY2VDYXBhYmlsaXRpZXMiLCAiZmlyZXNUb3VjaEV2ZW50cyIsICJtb3VzZSIsICJpbnZva2VBcnJheUFyZyIsICJTVEFURV9GQUlMRUQiLCAiX3VuaXF1ZUlkIiwgImdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIiLCAib3RoZXJSZWNvZ25pemVyIiwgInN0YXRlU3RyIiwgIlJlY29nbml6ZXIiLCAic2ltdWx0YW5lb3VzIiwgInJlcXVpcmVGYWlsIiwgInJlY29nbml6ZVdpdGgiLCAiZHJvcFJlY29nbml6ZVdpdGgiLCAicmVxdWlyZUZhaWx1cmUiLCAiZHJvcFJlcXVpcmVGYWlsdXJlIiwgImhhc1JlcXVpcmVGYWlsdXJlcyIsICJjYW5SZWNvZ25pemVXaXRoIiwgImFkZGl0aW9uYWxFdmVudCIsICJ0cnlFbWl0IiwgImNhbkVtaXQiLCAiaW5wdXREYXRhQ2xvbmUiLCAicmVzZXQiLCAiVGFwUmVjb2duaXplciIsICJfUmVjb2duaXplciIsICJ0YXBzIiwgImludGVydmFsIiwgInRpbWUiLCAidGhyZXNob2xkIiwgInBvc1RocmVzaG9sZCIsICJwVGltZSIsICJwQ2VudGVyIiwgIl90aW1lciIsICJfaW5wdXQiLCAiY291bnQiLCAiX3RoaXMyIiwgInZhbGlkUG9pbnRlcnMiLCAidmFsaWRNb3ZlbWVudCIsICJ2YWxpZFRvdWNoVGltZSIsICJmYWlsVGltZW91dCIsICJ2YWxpZEludGVydmFsIiwgInZhbGlkTXVsdGlUYXAiLCAiX3RoaXMzIiwgImNsZWFyVGltZW91dCIsICJ0YXBDb3VudCIsICJBdHRyUmVjb2duaXplciIsICJhdHRyVGVzdCIsICJvcHRpb25Qb2ludGVycyIsICJpc1JlY29nbml6ZWQiLCAiaXNWYWxpZCIsICJkaXJlY3Rpb25TdHIiLCAiUGFuUmVjb2duaXplciIsICJfQXR0clJlY29nbml6ZXIiLCAicFgiLCAicFkiLCAiZGlyZWN0aW9uVGVzdCIsICJoYXNNb3ZlZCIsICJTd2lwZVJlY29nbml6ZXIiLCAiUGluY2hSZWNvZ25pemVyIiwgImluT3V0IiwgIlJvdGF0ZVJlY29nbml6ZXIiLCAiUHJlc3NSZWNvZ25pemVyIiwgInZhbGlkVGltZSIsICJkZWZhdWx0cyIsICJkb21FdmVudHMiLCAiaW5wdXRDbGFzcyIsICJjc3NQcm9wcyIsICJ1c2VyU2VsZWN0IiwgInRvdWNoU2VsZWN0IiwgInRvdWNoQ2FsbG91dCIsICJjb250ZW50Wm9vbWluZyIsICJ1c2VyRHJhZyIsICJ0YXBIaWdobGlnaHRDb2xvciIsICJwcmVzZXQiLCAidG9nZ2xlQ3NzUHJvcHMiLCAiYWRkIiwgIm9sZENzc1Byb3BzIiwgIk1hbmFnZXIiLCAiaGFuZGxlcnMiLCAic3RvcCIsICJmb3JjZSIsICJzdG9wcGVkIiwgImN1clJlY29nbml6ZXIiLCAiZXhpc3RpbmciLCAicmVtb3ZlIiwgInRhcmdldFJlY29nbml6ZXIiLCAiZXZlbnRzIiwgImdlc3R1cmVFdmVudCIsICJjcmVhdGVFdmVudCIsICJpbml0RXZlbnQiLCAiZ2VzdHVyZSIsICJkaXNwYXRjaEV2ZW50IiwgIlNJTkdMRV9UT1VDSF9JTlBVVF9NQVAiLCAiU2luZ2xlVG91Y2hJbnB1dCIsICJzdGFydGVkIiwgIm5vcm1hbGl6ZVNpbmdsZVRvdWNoZXMiLCAiY2hhbmdlZCIsICJkZXByZWNhdGUiLCAibWVzc2FnZSIsICJkZXByZWNhdGlvbk1lc3NhZ2UiLCAiRXJyb3IiLCAic3RhY2siLCAibG9nIiwgImNvbnNvbGUiLCAid2FybiIsICJleHRlbmQiLCAiZGVzdCIsICJtZXJnZSIsICJpbmhlcml0IiwgImNoaWxkIiwgImJhc2UiLCAiY2hpbGRQIiwgImJhc2VQIiwgIl9zdXBlciIsICJiaW5kRm4iLCAiSGFtbWVyIiwgIlZFUlNJT04iLCAiSU5QVVRfTU9WRSIsICJTVEFURV9QT1NTSUJMRSIsICJTVEFURV9CRUdBTiIsICJTVEFURV9DSEFOR0VEIiwgIlNUQVRFX0VOREVEIiwgIlNUQVRFX1JFQ09HTklaRUQiLCAiU1RBVEVfQ0FOQ0VMTEVEIiwgIlRhcCIsICJQYW4iLCAiU3dpcGUiLCAiUGluY2giLCAiUm90YXRlIiwgIlByZXNzIiwgIlJlYWxIYW1tZXIiLCAiZCIsICJwIiwgInBhcnNlRE9UIiwgImRvdCIsICJncmFwaCIsICJnZXRUb2tlbiIsICJ0b2tlbiIsICJzdHJpY3QiLCAidG9rZW5UeXBlIiwgIlRPS0VOVFlQRSIsICJJREVOVElGSUVSIiwgIm5ld1N5bnRheEVycm9yIiwgInBhcnNlU3RhdGVtZW50cyIsICJlZGdlIiwgInBhcnNlR3JhcGgiLCAiTk9ERV9BVFRSX01BUFBJTkciLCAiZm9udHNpemUiLCAiZm9udGNvbG9yIiwgImxhYmVsZm9udGNvbG9yIiwgImZvbnRuYW1lIiwgImNvbG9yIiwgImZpbGxjb2xvciIsICJ0b29sdGlwIiwgImxhYmVsdG9vbHRpcCIsICJFREdFX0FUVFJfTUFQUElORyIsICJfT2JqZWN0JGNyZWF0ZSIsICJOVUxMIiwgIkRFTElNSVRFUiIsICJVTktOT1dOIiwgIkRFTElNSVRFUlMiLCAibmV4dFByZXZpZXciLCAiaXNBbHBoYU51bWVyaWMiLCAiY2hhckNvZGUiLCAic2V0VmFsdWUiLCAic2hpZnQiLCAiYWRkTm9kZSIsICJncmFwaHMiLCAibm9kZXMiLCAiYXR0ciIsICJnIiwgIl9pbmRleE9mSW5zdGFuY2VQcm9wZXJ0eSIsICJhZGRFZGdlIiwgImVkZ2VzIiwgImNyZWF0ZUVkZ2UiLCAiZW5hYmxlZCIsICJhcnJvd3MiLCAiaXNDb21tZW50IiwgImMyIiwgImlzTmFOIiwgIlN5bnRheEVycm9yIiwgImNob3AiLCAicGFyc2VTdGF0ZW1lbnQiLCAic3ViZ3JhcGgiLCAicGFyc2VTdWJncmFwaCIsICJwYXJzZUVkZ2UiLCAicGFyc2VBdHRyaWJ1dGVMaXN0IiwgInN1YmdyYXBocyIsICJub2ZfYXR0cl9saXN0IiwgImVkZ2VTdHlsZXMiLCAiZGFzaGVkIiwgInNvbGlkIiwgImRvdHRlZCIsICJhcnJvd1R5cGVzIiwgImJveCIsICJjcm93IiwgImN1cnZlIiwgImljdXJ2ZSIsICJub3JtYWwiLCAiaW52IiwgInRlZSIsICJ2ZWUiLCAiYXR0cl9saXN0IiwgImF0dHJfbmFtZXMiLCAiX2luY2x1ZGVzSW5zdGFuY2VQcm9wZXJ0eSIsICJpZHgiLCAiZGlyIiwgImZyb21fdHlwZSIsICJ0b190eXBlIiwgImRpcl90eXBlIiwgIl9zcGxpY2VJbnN0YW5jZVByb3BlcnR5IiwgImlkeF9hcnJvdyIsICJ0bXBfYXR0cl9saXN0IiwgInRleHQiLCAibWF4TGVuZ3RoIiwgInN1YnN0ciIsICJzZXRQcm9wIiwgInBvcCIsICJjb252ZXJ0QXR0ciIsICJjb252ZXJ0ZWQiLCAidmlzUHJvcCIsICJfZm9yRWFjaEluc3RhbmNlUHJvcGVydHkiLCAidmlzUHJvcEkiLCAiRE9UVG9HcmFwaCIsICJfY29udGV4dDIiLCAiZG90RGF0YSIsICJncmFwaERhdGEiLCAiZG90Tm9kZSIsICJncmFwaE5vZGUiLCAibGFiZWwiLCAiaW1hZ2UiLCAic2hhcGUiLCAiX2NvbnRleHQzIiwgImNvbnZlcnRFZGdlIiwgImRvdEVkZ2UiLCAiZ3JhcGhFZGdlIiwgIl9jb250ZXh0NCIsICJhcnJheTEiLCAiYXJyYXkyIiwgIl9jb250ZXh0NSIsICJzdWJFZGdlIiwgImVsZW0xIiwgImVsZW0yIiwgInBhcnNlR2VwaGkiLCAiZ2VwaGlKU09OIiwgIm9wdGlvbnNPYmoiLCAiaW5oZXJpdENvbG9yIiwgImZpeGVkIiwgInBhcnNlQ29sb3IiLCAiZ0VkZ2VzIiwgInZFZGdlcyIsICJfbWFwSW5zdGFuY2VQcm9wZXJ0eSIsICJnRWRnZSIsICJ2RWRnZSIsICJhdHRyaWJ1dGVzIiwgInRpdGxlIiwgImdOb2RlIiwgInZOb2RlIiwgImJhY2tncm91bmQiLCAiYm9yZGVyIiwgImhpZ2hsaWdodCIsICJob3ZlciIsICJhZGREZXNjcmlwdGlvbiIsICJiYWNrIiwgImNyZWF0ZUVkZ2VFcnJvciIsICJkZWwiLCAiZGVsZXRlQ2x1c3RlckVycm9yIiwgImVkZ2VEZXNjcmlwdGlvbiIsICJlZGl0IiwgImVkaXRDbHVzdGVyRXJyb3IiLCAiZWRpdEVkZ2UiLCAiZWRpdEVkZ2VEZXNjcmlwdGlvbiIsICJlZGl0Tm9kZSIsICJDYWNoZWRJbWFnZSIsICJOVU1fSVRFUkFUSU9OUyIsICJJbWFnZSIsICJjYW52YXMiLCAiaW5pdGlhbGl6ZWQiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImgyIiwgImg0IiwgImg4IiwgImgxNiIsICJ3MiIsICJ3NCIsICJ3OCIsICJ3MTYiLCAiY29vcmRpbmF0ZXMiLCAiX2ZpbGxNaXBNYXAiLCAiZ2V0Q29udGV4dCIsICJkcmF3SW1hZ2UiLCAiaXRlcmF0aW9ucyIsICJmYWN0b3IiLCAibGVmdCIsICJ0b3AiLCAiSW1hZ2VzIiwgImltYWdlcyIsICJpbWFnZUJyb2tlbiIsICJ1cmwiLCAiYnJva2VuVXJsIiwgImltYWdlVG9Mb2FkQnJva2VuVXJsT24iLCAib25lcnJvciIsICJpbWFnZVRvUmVkcmF3V2l0aCIsICJjYWNoZWRJbWFnZSIsICJpbWciLCAib25sb2FkIiwgIl9maXhJbWFnZUNvb3JkaW5hdGVzIiwgIl9yZWRyYXdXaXRoSW1hZ2UiLCAiX3RyeWxvYWRCcm9rZW5VcmwiLCAiaW1hZ2VUb0NhY2hlIiwgImJvZHkiLCAib2Zmc2V0V2lkdGgiLCAib2Zmc2V0SGVpZ2h0IiwgInJlbW92ZUNoaWxkIiwgImFycmF5QnVmZmVyTm9uRXh0ZW5zaWJsZSIsICJBcnJheUJ1ZmZlciIsICJidWZmZXIiLCAiaXNFeHRlbnNpYmxlIiwgIkFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSIsICIkaXNFeHRlbnNpYmxlIiwgIm9iamVjdElzRXh0ZW5zaWJsZSIsICJmcmVlemluZyIsICJwcmV2ZW50RXh0ZW5zaW9ucyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUiLCAiRlJFRVpJTkciLCAiUkVRVUlSRUQiLCAic2V0TWV0YWRhdGEiLCAib2JqZWN0SUQiLCAid2Vha0RhdGEiLCAibWV0YSIsICJpbnRlcm5hbE1ldGFkYXRhTW9kdWxlIiwgImZhc3RLZXkiLCAiZ2V0V2Vha0RhdGEiLCAib25GcmVlemUiLCAiUmVzdWx0IiwgIlJlc3VsdFByb3RvdHlwZSIsICJpdGVyYXRlIiwgInVuYm91bmRGdW5jdGlvbiIsICJpdGVyRm4iLCAiQVNfRU5UUklFUyIsICJJU19SRUNPUkQiLCAiSVNfSVRFUkFUT1IiLCAiSU5URVJSVVBURUQiLCAiY29uZGl0aW9uIiwgImNhbGxGbiIsICJhbkluc3RhbmNlIiwgIkludGVybmFsTWV0YWRhdGFNb2R1bGUiLCAiaW50ZXJuYWxTdGF0ZUdldHRlckZvciIsICJjb2xsZWN0aW9uIiwgIkNPTlNUUlVDVE9SX05BTUUiLCAid3JhcHBlciIsICJjb21tb24iLCAiSVNfV0VBSyIsICJBRERFUiIsICJOYXRpdmVQcm90b3R5cGUiLCAiZXhwb3J0ZWQiLCAiSVNfQURERVIiLCAiZ2V0Q29uc3RydWN0b3IiLCAic2V0U3Ryb25nIiwgImRlZmluZUJ1aWx0SW5zIiwgInVuc2FmZSIsICJzZXRTcGVjaWVzIiwgImNvbGxlY3Rpb25TdHJvbmciLCAiZGVmaW5lIiwgInByZXZpb3VzIiwgImVudHJ5IiwgImdldEVudHJ5IiwgInJlbW92ZWQiLCAiY2xlYXIiLCAiZGVsZXRlIiwgIklURVJBVE9SX05BTUUiLCAiZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUiLCAiZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlIiwgIk1hcCIsICJHcm91cHMiLCAiX2RlZmF1bHRJbmRleCIsICJfZ3JvdXBJbmRleCIsICJfZGVmYXVsdEdyb3VwcyIsICJkZWZhdWx0T3B0aW9ucyIsICJ1c2VEZWZhdWx0R3JvdXBzIiwgIl9PYmplY3QkYXNzaWduIiwgIm9wdGlvbkZpZWxkcyIsICJncm91cE5hbWUiLCAiZ3JvdXAiLCAiX2dyb3VwcyIsICJfTWFwIiwgIl9ncm91cE5hbWVzIiwgImdyb3VwbmFtZSIsICJzaG91bGRDcmVhdGUiLCAiZ2xvYmFsSXNGaW5pdGUiLCAiaXNGaW5pdGUiLCAibnVtYmVySXNGaW5pdGUiLCAiJHNvbWUiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICIkJDkiLCAiX2RlZmluZVByb3BlcnR5IiwgIiRwYXJzZUZsb2F0IiwgInBhcnNlRmxvYXQiLCAibnVtYmVyUGFyc2VGbG9hdCIsICJJbmZpbml0eSIsICJ0cmltbWVkU3RyaW5nIiwgImNob29zaWZ5IiwgInN1Yk9wdGlvbiIsICJwaWxlIiwgImFsbG93ZWQiLCAiY2hvc2VuIiwgInRvcE1vc3QiLCAiY2hvc2VuRWRnZSIsICJwb2ludEluUmVjdCIsICJyb3RhdGlvblBvaW50IiwgInRtcCIsICJyaWdodCIsICJib3R0b20iLCAiaXNWYWxpZExhYmVsIiwgImdldFNlbGZSZWZDb29yZGluYXRlcyIsICJkaXN0YW5jZVRvQm9yZGVyIiwgInRvQm9yZGVyRGlzdCIsICJ5RnJvbU5vZGVDZW50ZXIiLCAieEZyb21Ob2RlQ2VudGVyIiwgIkxhYmVsQWNjdW11bGF0b3IiLCAibWVhc3VyZVRleHQiLCAibGluZXMiLCAibW9kIiwgImJsb2NrcyIsICJ0bXBUZXh0IiwgImJsb2NrIiwgIl92YWx1ZXNJbnN0YW5jZVByb3BlcnR5IiwgImxpbmUiLCAiX2FkZCIsICJ0bXBMaW5lcyIsICJ0bXBMaW5lIiwgImZpcnN0RW1wdHlCbG9jayIsICJ0bXBCbG9ja3MiLCAiZGV0ZXJtaW5lTGluZUhlaWdodHMiLCAiZGV0ZXJtaW5lTGFiZWxTaXplIiwgInJlbW92ZUVtcHR5QmxvY2tzIiwgInRhZ1BhdHRlcm4iLCAiXyIsICJhZnRlckJvbGQiLCAiYWZ0ZXJJdGFsIiwgImFmdGVyTW9ubyIsICJNYXJrdXBBY2N1bXVsYXRvciIsICJib2xkIiwgIml0YWwiLCAibW9ubyIsICJzcGFjaW5nIiwgIm1vZFN0YWNrIiwgIm1vZE5hbWUiLCAiY2giLCAidGFnTmFtZSIsICJlbWl0QmxvY2siLCAidW5zaGlmdCIsICJzZXRUYWciLCAiYWR2YW5jZSIsICJfdGhpcyRwcmVwYXJlUmVnRXhwMiIsICJwcmVwYXJlUmVnRXhwIiwgInJlZ0V4cCIsICJtYXRjaGVkIiwgIm5leHRUYWciLCAiY2hlY2tUYWciLCAidW5zZXRUYWciLCAicHJlcGFyZWQiLCAiTGFiZWxTcGxpdHRlciIsICJzZWxlY3RlZCIsICJnZXRGb3JtYXR0aW5nVmFsdWVzIiwgImZpbmFsaXplIiwgImZvbnQiLCAiZm9udE9wdGlvbnMiLCAibmxMaW5lcyIsICJsaW5lQ291bnQiLCAibXVsdGkiLCAic3BsaXRCbG9ja3MiLCAibWF4V2R0IiwgInNwbGl0U3RyaW5nSW50b0xpbmVzIiwgImFwcGVuZCIsICJuZXdMaW5lIiwgIm1hcmt1cFN5c3RlbSIsICJzeXN0ZW0iLCAicGFyc2VFbnRpdGllcyIsICJwYXJzZVdTIiwgInBhcnNlU3RhcnRUYWciLCAicGFyc2VFbmRUYWciLCAiYmVnaW5hYmxlIiwgInBhcnNlT3ZlcnJpZGUiLCAiZGVjb2RlTWFya3VwU3lzdGVtIiwgInNwbGl0TWFya2Rvd25CbG9ja3MiLCAic3BsaXRIdG1sQmxvY2tzIiwgImN1cldpZHRoIiwgIndvcmRzIiwgIm5ld1RleHQiLCAib3Zlck1heFdpZHRoIiwgImFwcGVuZExhc3QiLCAiZ2V0TG9uZ2VzdEZpdCIsICJ3b3JkIiwgImdldExvbmdlc3RGaXRXb3JkIiwgIm5ld1ciLCAibXVsdGlGb250U3R5bGUiLCAiTGFiZWwiLCAiZWRnZWxhYmVsIiwgInBvaW50VG9TZWxmIiwgImJhc2VTaXplIiwgInNldE9wdGlvbnMiLCAieUxpbmUiLCAiaXNFZGdlTGFiZWwiLCAiZWxlbWVudE9wdGlvbnMiLCAiaW5pdEZvbnRPcHRpb25zIiwgImxhYmVsRGlydHkiLCAibmV3Rm9udE9wdGlvbnMiLCAicGFyc2VGb250U3RyaW5nIiwgInZhZGp1c3QiLCAiY29uc3RyYWluV2lkdGgiLCAibWluV2R0IiwgImNvbnN0cmFpbkhlaWdodCIsICJtaW5IZ3QiLCAidmFsaWduIiwgIndpZHRoQ29uc3RyYWludCIsICJ3aWR0aENvbnN0cmFpbnRNYXhpbXVtIiwgIndpZHRoQ29uc3RyYWludE1pbmltdW0iLCAiaGVpZ2h0Q29uc3RyYWludCIsICJoZWlnaHRDb25zdHJhaW50TWluaW11bSIsICJoZWlnaHRDb25zdHJhaW50VmFsaWduIiwgInByb3BhZ2F0ZUZvbnRzIiwgImRlZXBFeHRlbmQiLCAiY29uc3RyYWluIiwgImNob29zZXIiLCAibWFyZ2lucyIsICJ3aWR0aEJpYXMiLCAiaGVpZ2h0QmlhcyIsICJkc3RQaWxlIiwgInNyY1BpbGUiLCAiYWRkRm9udFRvUGlsZSIsICJyZXQiLCAidG1wU2hvcnRoYW5kIiwgIm9wdCIsICJtdWx0aU5hbWUiLCAib3B0aW9uIiwgIm11bHRpRm9udCIsICJvcHRpb25OYW1lcyIsICJnZXRGb250T3B0aW9uIiwgImZvbnRQaWxlIiwgImFkZEZvbnRPcHRpb25zVG9QaWxlIiwgImdldEJhc2ljT3B0aW9ucyIsICJfbG9vcCIsICJtb2RPcHRpb25zIiwgImdldEZvbnRPcHRpb25zIiwgImJhc2VsaW5lIiwgInZpZXdGb250U2l6ZSIsICJ2aWV3IiwgInNjYWxpbmciLCAiZHJhd1RocmVzaG9sZCIsICJtYXhWaXNpYmxlIiwgImNhbGN1bGF0ZUxhYmVsU2l6ZSIsICJfZHJhd0JhY2tncm91bmQiLCAiX2RyYXdUZXh0IiwgImZpbGxTdHlsZSIsICJnZXRTaXplIiwgImZpbGxSZWN0IiwgIl90aGlzJF9zZXRBbGlnbm1lbnQyIiwgIl9zZXRBbGlnbm1lbnQiLCAidGV4dEFsaWduIiwgImxhYmVsSGVpZ2h0IiwgImFsaWduIiwgIl90aGlzJF9nZXRDb2xvcjIiLCAiX2dldENvbG9yIiwgInN0cm9rZUNvbG9yIiwgImZvbnRDb2xvciIsICJzdHJva2VXaWR0aCIsICJsaW5lV2lkdGgiLCAic3Ryb2tlU3R5bGUiLCAibGluZUpvaW4iLCAic3Ryb2tlVGV4dCIsICJmaWxsVGV4dCIsICJ0ZXh0QmFzZWxpbmUiLCAiaW5pdGlhbFN0cm9rZUNvbG9yIiwgIm9wYWNpdHkiLCAib3ZlcnJpZGVPcGFjaXR5IiwgIl9wcm9jZXNzTGFiZWwiLCAiZ2V0VmFsdWUiLCAiZmFjZSIsICJsYWJlbEhpZ2hsaWdodEJvbGQiLCAiZm9udFN0cmluZyIsICJzZWxlY3RlZFN0YXRlIiwgImhvdmVyU3RhdGUiLCAiaW5UZXh0IiwgImRpZmZlcmVudFN0YXRlIiwgIl9wcm9jZXNzTGFiZWxUZXh0IiwgIm91dE9wdGlvbnMiLCAiaW5PcHRpb25zIiwgIm5ld09wdGlvbnNBcnJheSIsICJhQ29uc3RydWN0b3IiLCAibmF0aXZlQ29uc3RydWN0IiwgIk5FV19UQVJHRVRfQlVHIiwgIkFSR1NfQlVHIiwgIlRhcmdldCIsICJuZXdUYXJnZXQiLCAiJGFyZ3MiLCAiX3NldFByb3RvdHlwZU9mIiwgIl9PYmplY3Qkc2V0UHJvdG90eXBlT2YiLCAiX2JpbmRJbnN0YW5jZVByb3BlcnR5IiwgIl9pbmhlcml0cyIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX09iamVjdCRnZXRQcm90b3R5cGVPZiIsICJOb2RlQmFzZSIsICJsYWJlbE1vZHVsZSIsICJtYXJnaW4iLCAicmVmcmVzaE5lZWRlZCIsICJib3VuZGluZ0JveCIsICJhZGp1c3RTaXplcyIsICJib3JkZXJXaWR0aCIsICJyZXNpemUiLCAic2hhZG93IiwgInNoYWRvd0NvbG9yIiwgInNoYWRvd0JsdXIiLCAic2hhZG93U2l6ZSIsICJzaGFkb3dPZmZzZXRYIiwgInNoYWRvd1giLCAic2hhZG93T2Zmc2V0WSIsICJzaGFkb3dZIiwgImJvcmRlckRhc2hlcyIsICJzZXRMaW5lRGFzaCIsICJkYXNoZXMiLCAic2hhcGVQcm9wZXJ0aWVzIiwgImJvcmRlckNvbG9yIiwgInNhdmUiLCAiZW5hYmxlQm9yZGVyRGFzaGVzIiwgInN0cm9rZSIsICJkaXNhYmxlQm9yZGVyRGFzaGVzIiwgInJlc3RvcmUiLCAiZW5hYmxlU2hhZG93IiwgIl9maWxsSW5zdGFuY2VQcm9wZXJ0eSIsICJkaXNhYmxlU2hhZG93IiwgInBlcmZvcm1TdHJva2UiLCAiX3VwZGF0ZUJvdW5kaW5nQm94IiwgInRleHRTaXplIiwgImdldFRleHRTaXplIiwgIl9jcmVhdGVTdXBlciIsICJEZXJpdmVkIiwgImhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX1JlZmxlY3QkY29uc3RydWN0IiwgIlByb3h5IiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiU3VwZXIiLCAiTmV3VGFyZ2V0IiwgIkJveCIsICJfTm9kZUJhc2UiLCAiX3NldE1hcmdpbnMiLCAibmVlZHNSZWZyZXNoIiwgImRpbWVuc2lvbnMiLCAiZ2V0RGltZW5zaW9uc0Zyb21MYWJlbCIsICJpbml0Q29udGV4dEZvckRyYXciLCAiYm9yZGVyUmFkaXVzIiwgInBlcmZvcm1GaWxsIiwgInVwZGF0ZUJvdW5kaW5nQm94IiwgIl9hZGRCb3VuZGluZ0JveE1hcmdpbiIsICJDaXJjbGVJbWFnZUJhc2UiLCAibGFiZWxPZmZzZXQiLCAiaW1hZ2VPYmoiLCAiaW1hZ2VPYmpBbHQiLCAic2V0SW1hZ2VzIiwgInNlbGVjdGlvbl9jaGFuZ2VkIiwgImltYWdlVG1wIiwgImltZ1BhZGRpbmciLCAiaW1hZ2VQYWRkaW5nIiwgIm9wdEltZ1BhZGRpbmciLCAidXNlSW1hZ2VTaXplIiwgInJhdGlvX3dpZHRoIiwgInJhdGlvX2hlaWdodCIsICJfZ2V0SW1hZ2VQYWRkaW5nIiwgImdsb2JhbEFscGhhIiwgImludGVycG9sYXRpb24iLCAiaW1nUG9zTGVmdCIsICJpbWdQb3NUb3AiLCAiaW1nV2lkdGgiLCAiaW1nSGVpZ2h0IiwgImRyYXdJbWFnZUF0UG9zaXRpb24iLCAibGFiZWxEaW1lbnNpb25zIiwgInlMYWJlbCIsICJDaXJjbGUiLCAiX0NpcmNsZUltYWdlQmFzZSIsICJkaWFtZXRlciIsICJfZHJhd1Jhd0NpcmNsZSIsICJDaXJjdWxhckltYWdlIiwgIl9yZXNpemVJbWFnZSIsICJzd2l0Y2hJbWFnZXMiLCAibGFiZWxYIiwgImxhYmVsWSIsICJjb29yZGluYXRlT3JpZ2luIiwgImNsaXAiLCAiX2RyYXdJbWFnZUF0UG9zaXRpb24iLCAiX2RyYXdJbWFnZUxhYmVsIiwgIlNoYXBlQmFzZSIsICJfdGhpcyRjdXN0b21TaXplV2lkdGgiLCAiX3RoaXMkY3VzdG9tU2l6ZUhlaWdoIiwgImN1c3RvbVNpemVXaWR0aCIsICJjdXN0b21TaXplSGVpZ2h0IiwgInNpemVNdWx0aXBsaWVyIiwgIl9sZW4iLCAiX2tleSIsICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQiLCAiaWNvbiIsICJjb2RlIiwgImRyYXdFeHRlcm5hbExhYmVsIiwgIl9PYmplY3Qka2V5cyIsICJfT2JqZWN0JGdldE93blByb3BlcnR5U3ltYm9scyIsICJfZmlsdGVySW5zdGFuY2VQcm9wZXJ0eSIsICJfT2JqZWN0JGdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJfb2JqZWN0U3ByZWFkIiwgIl9PYmplY3QkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICJfT2JqZWN0JGRlZmluZVByb3BlcnRpZXMiLCAiQ3VzdG9tU2hhcGUiLCAiX1NoYXBlQmFzZSIsICJjdHhSZW5kZXJlciIsICJkcmF3TGF0ZXIiLCAiZHJhd05vZGUiLCAibm9kZURpbWVuc2lvbnMiLCAiX2Rpc3RhbmNlVG9Cb3JkZXIiLCAiRGF0YWJhc2UiLCAiRGlhbW9uZCIsICJfZHJhd1NoYXBlIiwgIkRvdCIsICJFbGxpcHNlIiwgIkljb24iLCAiaWNvblNpemUiLCAiX2ljb24iLCAid2VpZ2h0IiwgInNpZGUiLCAidXNlQm9yZGVyV2l0aEltYWdlIiwgIm5ldXRyYWxib3JkZXJXaWR0aCIsICJzZWxlY3Rpb25MaW5lV2lkdGgiLCAiYm9yZGVyV2lkdGhTZWxlY3RlZCIsICJTcXVhcmUiLCAiSGV4YWdvbiIsICJTdGFyIiwgIlRleHQiLCAiVHJpYW5nbGUiLCAiVHJpYW5nbGVEb3duIiwgIk5vZGUiLCAiaW1hZ2VsaXN0IiwgImdyb3VwbGlzdCIsICJnbG9iYWxPcHRpb25zIiwgImJyaWRnZU9iamVjdCIsICJiYXNlRm9udFNpemUiLCAicHJlZGVmaW5lZFBvc2l0aW9uIiwgImN1cnJlbnRTaGFwZSIsICJfbG9jYWxDb2xvciIsICJjaGVja01hc3MiLCAiX3BhcnNlSW50IiwgIl9wYXJzZUZsb2F0IiwgInBhcnNlT3B0aW9ucyIsICJfbG9hZF9pbWFnZXMiLCAidXBkYXRlTGFiZWxNb2R1bGUiLCAiY2hlY2tPcGFjaXR5IiwgInVwZGF0ZVNoYXBlIiwgImhpZGRlbiIsICJwaHlzaWNzIiwgImxvYWQiLCAiYnJva2VuSW1hZ2UiLCAidW5zZWxlY3RlZCIsICJ1cGRhdGVHcm91cE9wdGlvbnMiLCAiY3VycmVudEdyb3VwIiwgInRvdGFsIiwgImN1c3RvbVNjYWxpbmdGdW5jdGlvbiIsICJzaXplRGlmZiIsICJmb250RGlmZiIsICJ2aXNpYmxlIiwgIm5vZGVJZCIsICJsYWJlbElkIiwgIm9yaWdpbiIsICJwYXJlbnRPcHRpb25zIiwgIm5ld09wdGlvbnMiLCAiZ3JvdXBMaXN0IiwgImdyb3VwT2JqIiwgInNraXBQcm9wZXJ0aWVzIiwgIl9PYmplY3QkZ2V0T3duUHJvcGVydHlOYW1lcyIsICJzZWxlY3RpdmVOb3REZWVwRXh0ZW5kIiwgImFsbG93RGVsZXRpb24iLCAiY2hlY2tDb29yZGluYXRlT3JpZ2luIiwgIm1lcmdlT3B0aW9ucyIsICJwYXJzZWRDb2xvciIsICJmaWxsSWZEZWZpbmVkIiwgIm1hc3MiLCAic3RySWQiLCAiVkFMSURBVE9SX1BSSU5UX1NUWUxFIiwgIk5vZGVzSGFuZGxlciIsICJncm91cHMiLCAibGF5b3V0RW5naW5lIiwgImZ1bmN0aW9ucyIsICJjcmVhdGVOb2RlIiwgIm5vZGVzTGlzdGVuZXJzIiwgIml0ZW1zIiwgIm9sZERhdGEiLCAiYm9sZGl0YWwiLCAibGV2ZWwiLCAiYmluZEV2ZW50TGlzdGVuZXJzIiwgImVtaXR0ZXIiLCAicmVmcmVzaCIsICJfTnVtYmVyJGlzTmFOIiwgIl9OdW1iZXIkaXNGaW5pdGUiLCAiX2kiLCAiX09iamVjdCRrZXlzMiIsICJkb05vdEVtaXQiLCAib2xkTm9kZXNEYXRhIiwgImlzRGF0YVZpZXdMaWtlIiwgIkRhdGFTZXQiLCAibWUiLCAiaWRzIiwgImdldElkcyIsICJuZXdOb2RlcyIsICJwb3NpdGlvbkluaXRpYWxseSIsICJjaGFuZ2VkRGF0YSIsICJkYXRhQ2hhbmdlZCIsICJfc29tZUluc3RhbmNlUHJvcGVydHkiLCAibmV3VmFsdWUiLCAib2xkVmFsdWUiLCAiY2xlYXJQb3NpdGlvbnMiLCAiZGF0YUFycmF5IiwgIm5vZGVJbmRpY2VzIiwgIl9zdGVwIiwgImRhdGFzZXQiLCAiZ2V0RGF0YVNldCIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiZHNOb2RlIiwgImJvZHlOb2RlIiwgImVyciIsICJub2RlTGlzdCIsICJub2RlT2JqIiwgInRvSWQiLCAiZnJvbUlkIiwgImVkZ2VMaXN0IiwgIl90aGlzNCIsICJfc2V0VGltZW91dCIsICJpc0RhdGFEZXNjcmlwdG9yIiwgInJlY2VpdmVyIiwgIl9nZXQiLCAiX1JlZmxlY3QkZ2V0IiwgIiRoeXBvdCIsICJoeXBvdCIsICJOYU4iLCAidmFsdWUxIiwgInZhbHVlMiIsICJkaXYiLCAic3VtIiwgImFMZW4iLCAibGFyZyIsICJFbmRQb2ludCIsICJwb2ludHMiLCAiYXJyb3dEYXRhIiwgInh0IiwgInl0IiwgIl9FbmRQb2ludCIsICJ0cmFuc2xhdGUiLCAicm90YXRlIiwgImltYWdlV2lkdGgiLCAiaW1hZ2VIZWlnaHQiLCAiQXJyb3ciLCAiX0VuZFBvaW50MiIsICJfc3VwZXIyIiwgInRyYW5zZm9ybSIsICJkcmF3UGF0aCIsICJDcm93IiwgIkN1cnZlIiwgInBpIiwgInN0YXJ0QW5nbGUiLCAiZW5kQW5nbGUiLCAiSW52ZXJ0ZWRDdXJ2ZSIsICJJbnZlcnRlZFRyaWFuZ2xlIiwgIkJhciIsICJWZWUiLCAiRW5kUG9pbnRzIiwgIkVkZ2VCYXNlIiwgIl9ib2R5IiwgIl9sYWJlbE1vZHVsZSIsICJjb2xvckRpcnR5IiwgImhvdmVyV2lkdGgiLCAic2VsZWN0aW9uV2lkdGgiLCAiZnJvbVBvaW50IiwgInRvUG9pbnQiLCAiX3NlbGVjdGVkIiwgIl9ob3ZlciIsICJ2aWFOb2RlIiwgImdldFZpYU5vZGUiLCAiZ2V0Q29sb3IiLCAiX2RyYXdEYXNoZWRMaW5lIiwgIl9kcmF3TGluZSIsICJfbGluZSIsICJfdGhpcyRfZ2V0Q2lyY2xlRGF0YTIiLCAiX2dldENpcmNsZURhdGEiLCAiX2NpcmNsZSIsICJfZnJvbVBvaW50IiwgIl90b1BvaW50IiwgImxpbmVDYXAiLCAibGluZURhc2hPZmZzZXQiLCAiX3RoaXMkX2dldENpcmNsZURhdGE0IiwgIl90aGlzJF9nZXRDaXJjbGVEYXRhNiIsICJfZmluZEJvcmRlclBvc2l0aW9uIiwgIl9maW5kQm9yZGVyUG9zaXRpb25DaXJjbGUiLCAiX3RoaXMkX2dldENpcmNsZURhdGEkMiIsICJoaWdoIiwgInNlbGZSZWZlcmVuY2UiLCAibmVhck5vZGUiLCAibWlkZGxlIiwgImVuZFBvaW50T2Zmc2V0IiwgImFycm93U3RyaWtldGhyb3VnaCIsICJpdGVyYXRpb24iLCAiX3BvaW50T25DaXJjbGUiLCAiZGlmZmVyZW5jZSIsICJwb3ciLCAiaW5oZXJpdHNDb2xvciIsICJncmQiLCAiY3JlYXRlTGluZWFyR3JhZGllbnQiLCAiZnJvbUNvbG9yIiwgInRvQ29sb3IiLCAiYWRkQ29sb3JTdG9wIiwgImFuZ2xlRnJvbSIsICJhbmdsZVRvIiwgInJlbmRlckJlaGluZFRoZU5vZGUiLCAicG9pbnRURnJvbSIsICJwb2ludFRUbyIsICJ4MSIsICJ5MSIsICJ4MyIsICJ5MyIsICJfZ2V0RGlzdGFuY2VUb0VkZ2UiLCAiX3RoaXMkX2dldENpcmNsZURhdGE4IiwgInB4IiwgInB5IiwgImFycm93UG9pbnQiLCAibm9kZTEiLCAibm9kZTIiLCAicmV2ZXJzZWQiLCAic2NhbGVGYWN0b3IiLCAiZnJvbUFycm93U2NhbGUiLCAiZnJvbUFycm93VHlwZSIsICJ0b0Fycm93U2NhbGUiLCAidG9BcnJvd1R5cGUiLCAibWlkZGxlQXJyb3dTY2FsZSIsICJtaWRkbGVBcnJvd1R5cGUiLCAicmVsYXRpdmVMZW5ndGgiLCAiX01hdGgkaHlwb3QiLCAic21vb3RoIiwgInBvaW50VCIsICJ2aWEiLCAiZ3VpZGVQb3MiLCAiZ2V0UG9pbnQiLCAiaGFsZkxlbmd0aCIsICJndWlkZVBvczEiLCAiZ3VpZGVQb3MyIiwgIl90aGlzJF9nZXRDaXJjbGVEYXRhMTAiLCAiY29yZSIsICJvcmlnQ3R4QXR0ciIsICJiYWNrZ3JvdW5kQ29sb3IiLCAiYmFja2dyb3VuZFNpemUiLCAic2V0U3Ryb2tlRGFzaGVkIiwgImJhY2tncm91bmREYXNoZXMiLCAiQmV6aWVyRWRnZUJhc2UiLCAiX0VkZ2VCYXNlIiwgIl9nZXRWaWFDb29yZGluYXRlcyIsICJtaW5EaXN0YW5jZSIsICJsYXN0WCIsICJsYXN0WSIsICJfZ2V0RGlzdGFuY2VUb0xpbmUiLCAidmlhTm9kZTEiLCAidmlhTm9kZTIiLCAicXVhZHJhdGljQ3VydmVUbyIsICJkcmF3QmFja2dyb3VuZCIsICJCZXppZXJFZGdlRHluYW1pYyIsICJfQmV6aWVyRWRnZUJhc2UiLCAiX2JvdW5kRnVuY3Rpb24iLCAicG9zaXRpb25CZXppZXJOb2RlIiwgInBoeXNpY3NDaGFuZ2UiLCAic2V0dXBTdXBwb3J0Tm9kZSIsICJjb25uZWN0IiwgInBhcmVudEVkZ2VJZCIsICJfYmV6aWVyQ3VydmUiLCAiY3giLCAiY3kiLCAiY3IiLCAiX2ZpbmRCb3JkZXJQb3NpdGlvbkJlemllciIsICJfZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UiLCAiQmV6aWVyRWRnZVN0YXRpYyIsICJzdGVwWCIsICJzdGVwWSIsICJyb3VuZG5lc3MiLCAieFZpYSIsICJ5VmlhIiwgIm15QW5nbGUiLCAiQ3ViaWNCZXppZXJFZGdlQmFzZSIsICJ2aWExIiwgInZpYTIiLCAidmVjIiwgIkN1YmljQmV6aWVyRWRnZSIsICJfQ3ViaWNCZXppZXJFZGdlQmFzZSIsICJ2aWFOb2RlcyIsICJmb3JjZURpcmVjdGlvbiIsICJfcmVmMiIsICJfZ2V0RGlzdGFuY2VUb0JlemllckVkZ2UyIiwgIl9yZWY0IiwgIlN0cmFpZ2h0RWRnZSIsICJlZGdlU2VnbWVudExlbmd0aCIsICJ0b0JvcmRlclBvaW50IiwgIkVkZ2UiLCAiYmFzZVdpZHRoIiwgImVkZ2VUeXBlIiwgImNvbm5lY3RlZCIsICJhZmZlY3RzTGF5b3V0IiwgInVwZGF0ZUVkZ2VUeXBlIiwgIl9zZXRJbnRlcmFjdGlvbldpZHRocyIsICJ0b0Fycm93IiwgImZyb21BcnJvdyIsICJtaWRkbGVBcnJvdyIsICJ0b0Fycm93U3JjIiwgInRvQXJyb3dJbWFnZVdpZHRoIiwgInRvQXJyb3dJbWFnZUhlaWdodCIsICJtaWRkbGVBcnJvd1NyYyIsICJtaWRkbGVBcnJvd0ltYWdlV2lkdGgiLCAibWlkZGxlQXJyb3dJbWFnZUhlaWdodCIsICJmcm9tQXJyb3dTcmMiLCAiZnJvbUFycm93SW1hZ2VXaWR0aCIsICJmcm9tQXJyb3dJbWFnZUhlaWdodCIsICJzZWxlY3RlZFdpZHRoIiwgImNoYW5nZUluVHlwZSIsICJjbGVhbnVwIiwgImRpc2Nvbm5lY3QiLCAiYXR0YWNoRWRnZSIsICJkZXRhY2hFZGdlIiwgIndpZHRoRGlmZiIsICJkcmF3TGluZSIsICJkcmF3TGFiZWwiLCAiZ2V0QXJyb3dEYXRhIiwgImRyYXdBcnJvd0hlYWQiLCAiX2dldFJvdGF0aW9uIiwgImVkZ2VJZCIsICJpc092ZXJsYXBwaW5nV2l0aCIsICJ4RnJvbSIsICJ5RnJvbSIsICJ4VG8iLCAieVRvIiwgInhPYmoiLCAieU9iaiIsICJnZXREaXN0YW5jZVRvRWRnZSIsICJjb3B5RnJvbUdsb2JhbHMiLCAic2VsZWN0aXZlRGVlcEV4dGVuZCIsICJfSlNPTiRzdHJpbmdpZnkiLCAiaXNTdHJpbmciLCAiY29sb3JzRGVmaW5lZCIsICJzZWxmUmVmZXJlbmNlU2l6ZSIsICJFZGdlc0hhbmRsZXIiLCAiZWRnZXNMaXN0ZW5lcnMiLCAiZWRnZURhdGEiLCAic21vb3RoT3B0aW9ucyIsICJyZWNvbm5lY3RFZGdlcyIsICJvbGRFZGdlc0RhdGEiLCAiZWRnZXNEYXRhIiwgIm9sZEVkZ2UiLCAic2hvd0ludGVybmFsSWRzIiwgIl9hZGRNaXNzaW5nRWRnZXMiLCAiX3JlbW92ZUludmFsaWRFZGdlcyIsICJfdGhpczUiLCAiZWRnZXNUb0RlbGV0ZSIsICJ0b05vZGUiLCAiZnJvbU5vZGUiLCAiaXNDbHVzdGVyIiwgImFkZElkcyIsICJCYXJuZXNIdXRTb2x2ZXIiLCAicGh5c2ljc0JvZHkiLCAiYmFybmVzSHV0VHJlZSIsICJfcm5nIiwgIkFsZWEiLCAidGhldGFJbnZlcnNlZCIsICJ0aGV0YSIsICJvdmVybGFwQXZvaWRhbmNlRmFjdG9yIiwgImF2b2lkT3ZlcmxhcCIsICJncmF2aXRhdGlvbmFsQ29uc3RhbnQiLCAicGh5c2ljc05vZGVJbmRpY2VzIiwgIm5vZGVDb3VudCIsICJfZm9ybUJhcm5lc0h1dFRyZWUiLCAiX2dldEZvcmNlQ29udHJpYnV0aW9ucyIsICJwYXJlbnRCcmFuY2giLCAiX2dldEZvcmNlQ29udHJpYnV0aW9uIiwgImNoaWxkcmVuIiwgIk5XIiwgIk5FIiwgIlNXIiwgIlNFIiwgImNoaWxkcmVuQ291bnQiLCAiY2VudGVyT2ZNYXNzIiwgImNhbGNTaXplIiwgIl9jYWxjdWxhdGVGb3JjZXMiLCAiZ3Jhdml0eUZvcmNlIiwgImZ4IiwgImZ5IiwgImZvcmNlcyIsICJtaW5YIiwgIm1pblkiLCAibWF4WCIsICJtYXhZIiwgInJvb3RTaXplIiwgImhhbGZSb290U2l6ZSIsICJjZW50ZXJYIiwgImNlbnRlclkiLCAicmFuZ2UiLCAibWF4V2lkdGgiLCAiX3NwbGl0QnJhbmNoIiwgIl9wbGFjZUluVHJlZSIsICJ0b3RhbE1hc3MiLCAidG90YWxNYXNzSW52IiwgImJpZ2dlc3RTaXplIiwgInNraXBNYXNzVXBkYXRlIiwgIl91cGRhdGVCcmFuY2hNYXNzIiwgInJlZ2lvbiIsICJfcGxhY2VJblJlZ2lvbiIsICJjb250YWluZWROb2RlIiwgIl9pbnNlcnRSZWdpb24iLCAiY2hpbGRTaXplIiwgIl9kcmF3QnJhbmNoIiwgImJyYW5jaCIsICJSZXB1bHNpb25Tb2x2ZXIiLCAicmVwdWxzaW5nRm9yY2UiLCAibm9kZURpc3RhbmNlIiwgIkhpZXJhcmNoaWNhbFJlcHVsc2lvblNvbHZlciIsICJ0aGVzZU5vZGVzRGlzdGFuY2UiLCAiU3ByaW5nU29sdmVyIiwgImVkZ2VMZW5ndGgiLCAibm9kZTMiLCAiZWRnZUluZGljZXMiLCAicGh5c2ljc0VkZ2VJbmRpY2VzIiwgInNwcmluZ0xlbmd0aCIsICJfY2FsY3VsYXRlU3ByaW5nRm9yY2UiLCAic3ByaW5nRm9yY2UiLCAic3ByaW5nQ29uc3RhbnQiLCAiSGllcmFyY2hpY2FsU3ByaW5nU29sdmVyIiwgInNwcmluZ0Z4IiwgInNwcmluZ0Z5IiwgInRvdGFsRngiLCAidG90YWxGeSIsICJjb3JyZWN0aW9uRngiLCAiY29ycmVjdGlvbkZ5IiwgIkNlbnRyYWxHcmF2aXR5U29sdmVyIiwgImNlbnRyYWxHcmF2aXR5IiwgIkZvcmNlQXRsYXMyQmFzZWRSZXB1bHNpb25Tb2x2ZXIiLCAiX0Jhcm5lc0h1dFNvbHZlciIsICJkZWdyZWUiLCAiRm9yY2VBdGxhczJCYXNlZENlbnRyYWxHcmF2aXR5U29sdmVyIiwgIl9DZW50cmFsR3Jhdml0eVNvbHZlciIsICJQaHlzaWNzRW5naW5lIiwgInZlbG9jaXRpZXMiLCAicGh5c2ljc0VuYWJsZWQiLCAic2ltdWxhdGlvbkludGVydmFsIiwgInJlcXVpcmVzVGltZW91dCIsICJwcmV2aW91c1N0YXRlcyIsICJyZWZlcmVuY2VTdGF0ZSIsICJmcmVlemVDYWNoZSIsICJyZW5kZXJUaW1lciIsICJhZGFwdGl2ZVRpbWVzdGVwIiwgImFkYXB0aXZlVGltZXN0ZXBFbmFibGVkIiwgImFkYXB0aXZlQ291bnRlciIsICJhZGFwdGl2ZUludGVydmFsIiwgInN0YWJpbGl6ZWQiLCAic3RhcnRlZFN0YWJpbGl6YXRpb24iLCAic3RhYmlsaXphdGlvbkl0ZXJhdGlvbnMiLCAicmVhZHkiLCAiYmFybmVzSHV0IiwgImRhbXBpbmciLCAiZm9yY2VBdGxhczJCYXNlZCIsICJyZXB1bHNpb24iLCAiaGllcmFyY2hpY2FsUmVwdWxzaW9uIiwgIm1heFZlbG9jaXR5IiwgIm1pblZlbG9jaXR5IiwgInNvbHZlciIsICJzdGFiaWxpemF0aW9uIiwgInVwZGF0ZUludGVydmFsIiwgIm9ubHlEeW5hbWljRWRnZXMiLCAiZml0IiwgInRpbWVzdGVwIiwgIndpbmQiLCAibGF5b3V0RmFpbGVkIiwgImluaXRQaHlzaWNzIiwgInN0b3BTaW11bGF0aW9uIiwgInN0YXJ0U2ltdWxhdGlvbiIsICJ1cGRhdGVQaHlzaWNzRGF0YSIsICJub2Rlc1NvbHZlciIsICJlZGdlc1NvbHZlciIsICJncmF2aXR5U29sdmVyIiwgIlJlcHVsc2lvbiIsICJIaWVyYXJjaGljYWxSZXB1bHNpb24iLCAibW9kZWxPcHRpb25zIiwgInN0YWJpbGl6ZSIsICJ2aWV3RnVuY3Rpb24iLCAic2ltdWxhdGlvblN0ZXAiLCAiX2VtaXRTdGFiaWxpemVkIiwgInN0YXJ0VGltZSIsICJfRGF0ZSRub3ciLCAicGh5c2ljc1RpY2siLCAicnVuRG91YmxlU3BlZWQiLCAiYW1vdW50T2ZJdGVyYXRpb25zIiwgInNvbHZlIiwgIm1vdmVOb2RlcyIsICJfZXZhbHVhdGVTdGVwUXVhbGl0eSIsICJfc3RhcnRTdGFiaWxpemluZyIsICJwaHlzaWNzU3RlcCIsICJyZXZlcnQiLCAiYWRqdXN0VGltZVN0ZXAiLCAibm9kZUlkcyIsICJwb3NpdGlvbnMiLCAidngiLCAidnkiLCAicmVmZXJlbmNlIiwgIm1heE5vZGVWZWxvY2l0eSIsICJhdmVyYWdlTm9kZVZlbG9jaXR5IiwgIm5vZGVWZWxvY2l0eSIsICJfcGVyZm9ybVN0ZXAiLCAibSIsICJtYXhWIiwgImNhbGN1bGF0ZUNvbXBvbmVudFZlbG9jaXR5IiwgInRhcmdldEl0ZXJhdGlvbnMiLCAiX2ZyZWV6ZU5vZGVzIiwgIl9zdGFiaWxpemF0aW9uQmF0Y2giLCAicnVubmluZyIsICJzZW5kUHJvZ3Jlc3MiLCAiX2ZpbmFsaXplU3RhYmlsaXphdGlvbiIsICJfcmVzdG9yZUZyb3plbk5vZGVzIiwgImZvcmNlU2l6ZSIsICJhcnJvd1NpemUiLCAiSFNWVG9IZXgiLCAiZ2V0UmFuZG9tVmFsdWVzIiwgInJuZHM4IiwgIlVpbnQ4QXJyYXkiLCAicm5nIiwgImNyeXB0byIsICJieXRlVG9IZXgiLCAibmF0aXZlIiwgInJhbmRvbVVVSUQiLCAidjQiLCAiYnVmIiwgInJuZHMiLCAiTmV0d29ya1V0aWwiLCAiYWxsTm9kZXMiLCAic3BlY2lmaWNOb2RlcyIsICJjbG9uZWRPcHRpb25zIiwgImFtb3VudE9mQ29ubmVjdGlvbnMiLCAiQ2x1c3RlciIsICJfTm9kZSIsICJjb250YWluZWROb2RlcyIsICJjb250YWluZWRFZGdlcyIsICJjaGlsZENsdXN0ZXJJZCIsICJjaGlsZENsdXN0ZXIiLCAiY2x1c3RlckVkZ2UiLCAicGFyZW50Q2x1c3RlckVkZ2UiLCAiY2x1c3RlcmluZ0VkZ2VSZXBsYWNpbmdJZHMiLCAic3JjSWQiLCAiZWRnZVJlcGxhY2VkQnlJZCIsICJDbHVzdGVyRW5naW5lIiwgImNsdXN0ZXJlZE5vZGVzIiwgImNsdXN0ZXJlZEVkZ2VzIiwgImh1YnNpemUiLCAiX2dldEh1YlNpemUiLCAiX2NoZWNrT3B0aW9ucyIsICJub2Rlc1RvQ2x1c3RlciIsICJjbHVzdGVyQnlDb25uZWN0aW9uIiwgInJlZnJlc2hEYXRhIiwgImpvaW5Db25kaXRpb24iLCAiY2hpbGROb2Rlc09iaiIsICJjaGlsZEVkZ2VzT2JqIiwgIl9jbHVzdGVyIiwgImVkZ2VDb3VudCIsICJyZWxldmFudEVkZ2VDb3VudCIsICJjbHVzdGVycyIsICJ1c2VkTm9kZXMiLCAiY2hlY2tKb2luQ29uZGl0aW9uIiwgImNsb25lT3B0aW9ucyIsICJnYXRoZXJpbmdTdWNjZXNzZnVsIiwgImNoaWxkTm9kZUlkIiwgIl9nZXRDb25uZWN0ZWRJZCIsICJmb3VuZENsdXN0ZXIiLCAiZmluZENsdXN0ZXJEYXRhIiwgImNsdXN0ZXJCeUVkZ2VDb3VudCIsICJjbHVzdGVyTm9kZVByb3BlcnRpZXMiLCAicGFyZW50Tm9kZUlkIiwgInBhcmVudENsb25lZE9wdGlvbnMiLCAiY2hpbGRDbG9uZWRPcHRpb25zIiwgImNoaWxkTm9kZUlEcyIsICJjaGlsZE5vZGUiLCAiY2hpbGROb2RlS2V5IiwgImNoaWxkRWRnZSIsICJjbHVzdGVyRWRnZVByb3BlcnRpZXMiLCAib3RoZXJOb2RlSWQiLCAiY2hpbGRLZXlzIiwgImNyZWF0ZUVkZ2VzIiwgIm5ld0VkZ2VzIiwgImdldE5ld0VkZ2UiLCAiY3JlYXRlZEVkZ2UiLCAibmV3RWRnZSIsICJtYXRjaFRvRGlyZWN0aW9uIiwgIm1hdGNoRnJvbURpcmVjdGlvbiIsICJfY3JlYXRlQ2x1c3RlcmVkRWRnZSIsICJfYmFja3VwRWRnZU9wdGlvbnMiLCAidG1wTm9kZXNUb1JlbW92ZSIsICJhbGxvd1NpbmdsZU5vZGVDbHVzdGVyIiwgInByb2Nlc3NQcm9wZXJ0aWVzIiwgImNoaWxkTm9kZXNPcHRpb25zIiwgImNoaWxkRWRnZXNPcHRpb25zIiwgImNsdXN0ZXJJZCIsICJfZ2V0Q2x1c3RlclBvc2l0aW9uIiwgImNsdXN0ZXJOb2RlIiwgIl9jbHVzdGVyRWRnZXMiLCAib3JpZ2luYWxPcHRpb25zIiwgImNsdXN0ZXJOb2RlSWQiLCAiZmluZE5vZGUiLCAicGFyZW50SW5kZXgiLCAicGFyZW50Q2x1c3Rlck5vZGVJZCIsICJfb3BlbkNoaWxkQ2x1c3RlciIsICJyZWxlYXNlRnVuY3Rpb24iLCAiY2x1c3RlclBvc2l0aW9uIiwgIm5ld1Bvc2l0aW9ucyIsICJlZGdlc1RvQmVEZWxldGVkIiwgIm90aGVyTm9kZSIsICJ0cmFuc2ZlcklkIiwgInRyYW5zZmVyRWRnZSIsICJvdGhlckNsdXN0ZXIiLCAiX3Jlc3RvcmVFZGdlIiwgIm5vZGVzQXJyYXkiLCAiY291bnRlciIsICJfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkiLCAiY2x1c3RlcmVkTm9kZUlkIiwgInN0YXJ0RWRnZUlkIiwgImFsbEVkZ2VJZHMiLCAiZ2V0Q2x1c3RlcmVkRWRnZXMiLCAiY2x1c3RlcmVkRWRnZUlkIiwgImdldEJhc2VFZGdlcyIsICJJZHNUb0hhbmRsZSIsICJkb25lSWRzIiwgImZvdW5kSWRzIiwgIm5leHRJZCIsICJuZXh0RWRnZSIsICJyZXBsYWNpbmdJZHMiLCAicmVwbGFjaW5nSWQiLCAiYXZlcmFnZSIsICJhdmVyYWdlU3F1YXJlZCIsICJodWJDb3VudGVyIiwgImxhcmdlc3RIdWIiLCAidmFyaWFuY2UiLCAic3RhbmRhcmREZXZpYXRpb24iLCAiaHViVGhyZXNob2xkIiwgImJhc2VFZGdlIiwgImV4dHJhT3B0aW9ucyIsICJjaGlsZE5vZGVzIiwgImNoaWxkRWRnZXMiLCAiX2NyZWF0ZUNsdXN0ZXJFZGdlcyIsICJjbHVzdGVyZWROb2RlIiwgImRlbGV0ZWROb2RlSWRzIiwgImRlbGV0ZWRFZGdlSWRzIiwgImVhY2hDbHVzdGVyTm9kZSIsICJlbmRQb2ludHNWYWxpZCIsICJyZXBsYWNlZElkcyIsICJudW1WYWxpZCIsICJjb250YWluZWRFZGdlSWQiLCAiY29udGFpbmVkRWRnZSIsICJkZWxldGVkRWRnZUlkIiwgIl9maWx0ZXIiLCAic2hvdWxkQmVDbHVzdGVyZWQiLCAiX2lzQ2x1c3RlcmVkTm9kZSIsICJfaXNDbHVzdGVyZWRFZGdlIiwgImNsdXN0ZXJGcm9tIiwgIl9nZXRDbHVzdGVyTm9kZUZvck5vZGUiLCAiY2x1c3RlclRvIiwgImNvbnRpbnVlTG9vcCIsICJfbG9vcDIiLCAiY2x1c3RlcnNUb09wZW4iLCAibnVtTm9kZXMiLCAiYWxsb3dTaW5nbGUiLCAib3BlbkNsdXN0ZXIiLCAiX3VwZGF0ZVN0YXRlIiwgIkNhbnZhc1JlbmRlcmVyIiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJtb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAid2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgIm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgInJlZHJhd1JlcXVlc3RlZCIsICJyZW5kZXJpbmdBY3RpdmUiLCAicmVuZGVyUmVxdWVzdHMiLCAiYWxsb3dSZWRyYXciLCAiZHJhZ2dpbmciLCAiem9vbWluZyIsICJoaWRlRWRnZXNPbkRyYWciLCAiaGlkZUVkZ2VzT25ab29tIiwgImhpZGVOb2Rlc09uRHJhZyIsICJfZGV0ZXJtaW5lQnJvd3Nlck1ldGhvZCIsICJ6b29tVGltZW91dElkIiwgIl9yZXF1ZXN0UmVkcmF3IiwgIl9yZXNpemVOb2RlcyIsICJfcmVkcmF3IiwgIl9zdGFydFJlbmRlcmluZyIsICJjYW5jZWxBbmltYXRpb25GcmFtZSIsICJkZWxheSIsICJ0aW1lciIsICJteVdpbmRvdyIsICJfcmVxdWVzdE5leHRGcmFtZSIsICJfcmVuZGVyU3RlcCIsICJkcmF3RXh0ZXJuYWxMYWJlbHMiLCAiZnJhbWUiLCAic2V0U2l6ZSIsICJzZXRUcmFuc2Zvcm0iLCAiY2xpZW50V2lkdGgiLCAiY2xpZW50SGVpZ2h0IiwgImNsZWFyUmVjdCIsICJ0cmFuc2xhdGlvbiIsICJfZHJhd0VkZ2VzIiwgIl9kcmF3Tm9kZXMiLCAiX2RyYXdBcnJvd3MiLCAiX2RyYXdTZWxlY3Rpb25Cb3giLCAiYWx3YXlzU2hvdyIsICJob3ZlcmVkIiwgInRvcExlZnQiLCAiRE9NdG9DYW52YXMiLCAiYm90dG9tUmlnaHQiLCAidmlld2FibGVBcmVhIiwgImlzU2VsZWN0ZWQiLCAiaXNCb3VuZGluZ0JveE92ZXJsYXBwaW5nV2l0aCIsICJzZWxlY3RlZExlbmd0aCIsICJob3ZlcmVkTGVuZ3RoIiwgIl9pMiIsICJfZHJhd0V4dGVybmFsTGFiZWxzMiIsICJkcmF3QXJyb3dzIiwgImJyb3dzZXJUeXBlIiwgInNlbGVjdGlvbkJveCIsICJzaG93IiwgIm9uVG91Y2giLCAiaGFtbWVyIiwgIm9uUmVsZWFzZSIsICJDYW52YXMiLCAicGl4ZWxSYXRpbyIsICJjYW1lcmFTdGF0ZSIsICJjYW52YXNWaWV3Q2VudGVyIiwgIl9jbGVhbnVwQ2FsbGJhY2tzIiwgImF1dG9SZXNpemUiLCAiaGFtbWVyRnJhbWUiLCAiX2NsZWFuVXAiLCAiUmVzaXplT2JzZXJ2ZXIiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZSIsICJ1bm9ic2VydmUiLCAicmVzaXplVGltZXIiLCAiX3NldEludGVydmFsIiwgImNsZWFySW50ZXJ2YWwiLCAicmVzaXplRnVuY3Rpb24iLCAiX29uUmVzaXplIiwgInByZXZpb3VzV2lkdGgiLCAicHJldmlvdXNIZWlnaHQiLCAid2lkdGhSYXRpbyIsICJoZWlnaHRSYXRpbyIsICJuZXdTY2FsZSIsICJjdXJyZW50Vmlld0NlbnRlciIsICJkaXN0YW5jZUZyb21DZW50ZXIiLCAiY29udGFpbmVyIiwgImhhc0NoaWxkTm9kZXMiLCAiZmlyc3RDaGlsZCIsICJjbGFzc05hbWUiLCAib3ZlcmZsb3ciLCAidGFiSW5kZXgiLCAiX3NldFBpeGVsUmF0aW8iLCAibm9DYW52YXMiLCAiZm9udFdlaWdodCIsICJwYWRkaW5nIiwgImlubmVyVGV4dCIsICJfYmluZEhhbW1lciIsICJkcmFnIiwgInBpbmNoIiwgImV2ZW50TGlzdGVuZXJzIiwgIm9uVGFwIiwgIm9uRG91YmxlVGFwIiwgIm9uSG9sZCIsICJvbkRyYWdTdGFydCIsICJvbkRyYWciLCAib25EcmFnRW5kIiwgIm9uUGluY2giLCAib25Nb3VzZVdoZWVsIiwgIm9uTW91c2VNb3ZlIiwgIm9uQ29udGV4dCIsICJfcHJlcGFyZVZhbHVlIiwgImVtaXRFdmVudCIsICJvbGRXaWR0aCIsICJvbGRIZWlnaHQiLCAicHJldmlvdXNSYXRpbyIsICJfZ2V0Q2FtZXJhU3RhdGUiLCAibmV3V2lkdGgiLCAibmV3SGVpZ2h0IiwgIl9zZXRDYW1lcmFTdGF0ZSIsICJudW1lcmF0b3IiLCAiZGV2aWNlUGl4ZWxSYXRpbyIsICJ3ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIiwgIm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8iLCAibXNCYWNraW5nU3RvcmVQaXhlbFJhdGlvIiwgIm9CYWNraW5nU3RvcmVQaXhlbFJhdGlvIiwgImJhY2tpbmdTdG9yZVBpeGVsUmF0aW8iLCAiX2RldGVybWluZVBpeGVsUmF0aW8iLCAiX1hjb252ZXJ0Q2FudmFzVG9ET00iLCAiX1ljb252ZXJ0Q2FudmFzVG9ET00iLCAiX1hjb252ZXJ0RE9NdG9DYW52YXMiLCAiX1ljb252ZXJ0RE9NdG9DYW52YXMiLCAiVmlldyIsICJhbmltYXRpb25TcGVlZCIsICJyZW5kZXJSZWZyZXNoUmF0ZSIsICJhbmltYXRpb25FYXNpbmdGdW5jdGlvbiIsICJlYXNpbmdUaW1lIiwgInNvdXJjZVNjYWxlIiwgInRhcmdldFNjYWxlIiwgInNvdXJjZVRyYW5zbGF0aW9uIiwgInRhcmdldFRyYW5zbGF0aW9uIiwgImxvY2tlZE9uTm9kZUlkIiwgImxvY2tlZE9uTm9kZU9mZnNldCIsICJ0b3VjaFRpbWUiLCAicmVsZWFzZU5vZGUiLCAiaW5pdGlhbFpvb20iLCAicmF3T3B0aW9ucyIsICJhbGxOb2RlSWRzIiwgIm1pblpvb21MZXZlbCIsICJNSU5fVkFMVUUiLCAibWF4Wm9vbUxldmVsIiwgInpvb21MZXZlbCIsICJjYW52YXNXaWR0aCIsICJjYW52YXNIZWlnaHQiLCAiZ2V0UmFuZ2UiLCAicG9zaXRpb25EZWZpbmVkIiwgInhab29tTGV2ZWwiLCAieVpvb21MZXZlbCIsICJhbmltYXRpb25PcHRpb25zIiwgImZpbmRDZW50ZXIiLCAiYW5pbWF0aW9uIiwgIm5vZGVQb3NpdGlvbiIsICJsb2NrZWRPbk5vZGUiLCAiZ2V0Vmlld1Bvc2l0aW9uIiwgImR1cmF0aW9uIiwgImVhc2luZ0Z1bmN0aW9uIiwgImFuaW1hdGVWaWV3IiwgImxvY2tlZCIsICJfdHJhbnNpdGlvblJlZHJhdyIsICJ2aWV3Q2VudGVyIiwgIl9sb2NrZWRSZWRyYXciLCAiZmluaXNoZWQiLCAicHJvZ3Jlc3MiLCAiZWFzaW5nRnVuY3Rpb25zIiwgImtleWNoYXJtIiwgIl9leHBvcnRGdW5jdGlvbnMiLCAiX2JvdW5kIiwgImtleWRvd24iLCAia2V5dXAiLCAiX2tleXMiLCAiZnJvbUNoYXJDb2RlIiwgImRvd24iLCAiaGFuZGxlRXZlbnQiLCAidXAiLCAia2V5Q29kZSIsICJib3VuZCIsICJzaGlmdEtleSIsICJiaW5kQWxsIiwgImdldEtleSIsICJ1bmJpbmQiLCAibmV3QmluZGluZ3MiLCAiTmF2aWdhdGlvbkhhbmRsZXIiLCAiaWNvbnNDcmVhdGVkIiwgIm5hdmlnYXRpb25IYW1tZXJzIiwgImJvdW5kRnVuY3Rpb25zIiwgImFjdGl2YXRlZCIsICJjb25maWd1cmVLZXlib2FyZEJpbmRpbmdzIiwgIm5hdmlnYXRpb25CdXR0b25zIiwgImxvYWROYXZpZ2F0aW9uRWxlbWVudHMiLCAiY2xlYW5OYXZpZ2F0aW9uIiwgIm5hdmlnYXRpb25ET00iLCAibmF2aWdhdGlvbkRpdnMiLCAibmF2aWdhdGlvbkRpdkFjdGlvbnMiLCAiX2ZpdCIsICJiaW5kVG9SZWRyYXciLCAiX3N0b3BNb3ZlbWVudCIsICJhY3Rpb24iLCAiYm91bmRBY3Rpb24iLCAia2V5Ym9hcmQiLCAic3BlZWQiLCAic2NhbGVPbGQiLCAiem9vbSIsICJzY2FsZUZyYWMiLCAidHgiLCAidHkiLCAicG9pbnRlciIsICJfY29udGV4dDYiLCAiX2NvbnRleHQ3IiwgIl9jb250ZXh0OCIsICJfY29udGV4dDkiLCAiX2NvbnRleHQxMCIsICJfY29udGV4dDExIiwgIl9jb250ZXh0MTIiLCAiX2NvbnRleHQxMyIsICJfY29udGV4dDE0IiwgIl9jb250ZXh0MTUiLCAiX2NvbnRleHQxNiIsICJfY29udGV4dDE3IiwgIl9jb250ZXh0MTgiLCAiX2NvbnRleHQxOSIsICJfY29udGV4dDIwIiwgIl9jb250ZXh0MjEiLCAiX2NvbnRleHQyMiIsICJfY29udGV4dDIzIiwgIl9jb250ZXh0MjQiLCAiX2NvbnRleHQyNSIsICJfY29udGV4dDI2IiwgIl9jb250ZXh0MjciLCAiYmluZFRvV2luZG93IiwgInVuYmluZEZyb21SZWRyYXciLCAiSW50ZXJhY3Rpb25IYW5kbGVyIiwgInNlbGVjdGlvbkhhbmRsZXIiLCAibmF2aWdhdGlvbkhhbmRsZXIiLCAicG9wdXAiLCAicG9wdXBPYmoiLCAicG9wdXBUaW1lciIsICJnZXRQb2ludGVyIiwgImRyYWdOb2RlcyIsICJkcmFnVmlldyIsICJhdXRvRm9jdXMiLCAidG9vbHRpcERlbGF5IiwgInpvb21WaWV3IiwgInpvb21TcGVlZCIsICJnZXRBYnNvbHV0ZVRvcCIsICJwaW5jaGVkIiwgIm11bHRpc2VsZWN0IiwgImN0cmxLZXkiLCAibWV0YUtleSIsICJjaGVja1NlbGVjdGlvbkNoYW5nZXMiLCAiY29tbWl0QW5kRW1pdCIsICJnZW5lcmF0ZUNsaWNrRXZlbnQiLCAic2VsZWN0QWRkaXRpb25hbE9uUG9pbnQiLCAic2VsZWN0T25Qb2ludCIsICJmaXJzdFNldCIsICJzZWNvbmRTZXQiLCAiYXJyYXlEaWZmIiwgImZpcnN0QXJyIiwgInNlY29uZEFyciIsICJnZXROb2RlQXQiLCAic2VsZWN0aW9uIiwgInNldFNlbGVjdGlvbiIsICJnZXRTZWxlY3RlZE5vZGVzIiwgInhGaXhlZCIsICJ5Rml4ZWQiLCAiZGlmZlgiLCAiZGlmZlkiLCAic2VsZWN0aW9uQm94UG9zaXRpb24iLCAic2VsZWN0aW9uQm94UG9zaXRpb25NaW5NYXgiLCAidG9CZVNlbGVjdGVkTm9kZXMiLCAic2VsZWN0T2JqZWN0IiwgInByZVNjYWxlRHJhZ1BvaW50ZXIiLCAicG9zdFNjYWxlRHJhZ1BvaW50ZXIiLCAiY2FudmFzVG9ET00iLCAicG9wdXBWaXNpYmxlIiwgIl9jaGVja0hpZGVQb3B1cCIsICJzZXRQb3NpdGlvbiIsICJmb2N1cyIsICJfY2hlY2tTaG93UG9wdXAiLCAiaG92ZXJPYmplY3QiLCAicG9pbnRlck9iaiIsICJwcmV2aW91c1BvcHVwT2JqSWQiLCAibm9kZVVuZGVyQ3Vyc29yIiwgInBvcHVwVHlwZSIsICJvdmVybGFwcGluZ05vZGVzIiwgImdldFRpdGxlIiwgIm92ZXJsYXBwaW5nRWRnZXMiLCAiUG9wdXAiLCAicG9wdXBUYXJnZXRUeXBlIiwgInBvcHVwVGFyZ2V0SWQiLCAic2V0VGV4dCIsICJoaWRlIiwgIl9wb2ludGVyVG9Qb3NpdGlvbk9iamVjdCIsICJzdGlsbE9uT2JqIiwgIm92ZXJOb2RlIiwgIlNldCIsICJ1bmNhdWdodEZyb3plblN0b3JlIiwgImZyb3plbiIsICJVbmNhdWdodEZyb3plblN0b3JlIiwgImZpbmRVbmNhdWdodEZyb3plbiIsICJJbnRlcm5hbFdlYWtNYXAiLCAiY29sbGVjdGlvbldlYWsiLCAiZW5mb3JjZUludGVybmFsU3RhdGUiLCAiaXNGcm96ZW4iLCAiaXNTZWFsZWQiLCAiZnJlZXplIiwgInNlYWwiLCAiRlJPWkVOIiwgIlNFQUxFRCIsICJJU19JRTExIiwgIiRXZWFrTWFwIiwgIldlYWtNYXBQcm90b3R5cGUiLCAibmF0aXZlU2V0IiwgIm5hdGl2ZURlbGV0ZSIsICJuYXRpdmVIYXMiLCAibmF0aXZlR2V0IiwgImZyb3plbkFycmF5IiwgImFycmF5SW50ZWdyaXR5TGV2ZWwiLCAiZGlmZlNldHMiLCAiZGlmZiIsICJfU2V0IiwgIlNpbmdsZVR5cGVTZWxlY3Rpb25BY2N1bXVsYXRvciIsICJfU2luZ2xlVHlwZVNlbGVjdGlvbkFjY3VtdWxhdG9yX3ByZXZpb3VzU2VsZWN0aW9uIiwgIl9TaW5nbGVUeXBlU2VsZWN0aW9uQWNjdW11bGF0b3Jfc2VsZWN0aW9uIiwgIl9fY2xhc3NQcml2YXRlRmllbGRHZXQiLCAiX2l0ZW1zIiwgIl9sZW4yIiwgIl9rZXkyIiwgIl9pdGVtczIiLCAiYWRkZWQiLCAiZGVsZXRlZCIsICJjaGFuZ2VzIiwgImdldENoYW5nZXMiLCAiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsICJfc3RlcDIiLCAiX2l0ZXJhdG9yMiIsICJzZWxlY3QiLCAiX3N0ZXAzIiwgIl9pdGVyYXRvcjMiLCAidW5zZWxlY3QiLCAiU2VsZWN0aW9uQWNjdW11bGF0b3IiLCAiY29tbWl0SGFuZGxlciIsICJfU2VsZWN0aW9uQWNjdW11bGF0b3Jfbm9kZXMiLCAiX1NlbGVjdGlvbkFjY3VtdWxhdG9yX2VkZ2VzIiwgIl9TZWxlY3Rpb25BY2N1bXVsYXRvcl9jb21taXRIYW5kbGVyIiwgImdldFNlbGVjdGlvbiIsICJfY2xhc3NQcml2YXRlRmllbGRHZSIsICJfY2xhc3NQcml2YXRlRmllbGRHZTIiLCAiX2NsYXNzUHJpdmF0ZUZpZWxkR2UzIiwgInN1bW1hcnkiLCAiY29tbWl0IiwgIl9sZW4zIiwgInJlc3QiLCAiX2tleTMiLCAiX2NvbmNhdEluc3RhbmNlUHJvcGVydHkiLCAiU2VsZWN0aW9uSGFuZGxlciIsICJfc2VsZWN0aW9uQWNjdW11bGF0b3IiLCAiaG92ZXJPYmoiLCAic2VsZWN0YWJsZSIsICJzZWxlY3RDb25uZWN0ZWRFZGdlcyIsICJob3ZlckNvbm5lY3RlZEVkZ2VzIiwgInVwZGF0ZVNlbGVjdGlvbiIsICJnZXRFZGdlQXQiLCAidW5zZWxlY3RBbGwiLCAic2VsZWN0aW9uQ2hhbmdlZCIsICJkZXNlbGVjdE9iamVjdCIsICJET00iLCAib2xkU2VsZWN0aW9uIiwgImVtcHR5U2VsZWN0aW9uIiwgIl9pbml0QmFzZUV2ZW50IiwgImdldENsaWNrZWRJdGVtcyIsICJjb250cm9sRWRnZSIsICJoaWdobGlnaHRFZGdlcyIsICJfdGhpcyRfc2VsZWN0aW9uQWNjdW0iLCAiYWRkRWRnZXMiLCAiYWRkTm9kZXMiLCAiX3JlbW92ZUZyb21TZWxlY3Rpb24iLCAiY2FudmFzUG9zIiwgInJldHVybk5vZGUiLCAicG9zaXRpb25PYmplY3QiLCAiX2dldEFsbE5vZGVzT3ZlcmxhcHBpbmdXaXRoIiwgIl9nZXRFZGdlc092ZXJsYXBwaW5nV2l0aCIsICJyZXR1cm5FZGdlIiwgIm1pbmRpc3QiLCAib3ZlcmxhcHBpbmdFZGdlIiwgImRpc3QiLCAiX3RoaXMkX3NlbGVjdGlvbkFjY3VtMiIsICJkZWxldGVOb2RlcyIsICJkZWxldGVFZGdlcyIsICJzaXplTm9kZXMiLCAic2l6ZUVkZ2VzIiwgIl9hZGRUb0hvdmVyIiwgImhvdmVyQ2hhbmdlZCIsICJlbWl0Qmx1ckV2ZW50IiwgImhvdmVyZWRFZGdlc0NvdW50IiwgImhvdmVyZWROb2Rlc0NvdW50IiwgImVtaXRIb3ZlckV2ZW50IiwgIl9ob3ZlckNvbm5lY3RlZEVkZ2VzIiwgInNlbGVjdGlvbkNoYW5nZXMiLCAicHJldmlvdXNTZWxlY3Rpb24iLCAiZ2V0U2VsZWN0ZWROb2RlSWRzIiwgImdldFNlbGVjdGVkRWRnZUlkcyIsICJnZXROb2RlcyIsICJnZXRFZGdlcyIsICJnZXRJdGVtc09uUG9pbnQiLCAibWVyZ2VTb3J0IiwgImNvbXBhcmVmbiIsICJpbnNlcnRpb25Tb3J0IiwgImxsZW5ndGgiLCAicmxlbmd0aCIsICJsaW5kZXgiLCAicmluZGV4IiwgImFycmF5U29ydCIsICJmaXJlZm94IiwgImVuZ2luZUZmVmVyc2lvbiIsICJlbmdpbmVJc0llT3JFZGdlIiwgIndlYmtpdCIsICJlbmdpbmVXZWJraXRWZXJzaW9uIiwgImludGVybmFsU29ydCIsICJGRiIsICJJRV9PUl9FREdFIiwgIlY4IiwgIldFQktJVCIsICJuYXRpdmVTb3J0IiwgIkZBSUxTX09OX1VOREVGSU5FRCIsICJGQUlMU19PTl9OVUxMIiwgIlNUUklDVF9NRVRIT0QiLCAiU1RBQkxFX1NPUlQiLCAiaXRlbXNMZW5ndGgiLCAiYXJyYXlMZW5ndGgiLCAiSVNfUklHSFQiLCAibWVtbyIsICJhcnJheVJlZHVjZSIsICJlbmdpbmVJc05vZGUiLCAiJHJlZHVjZSIsICJyZWR1Y2UiLCAiRGlyZWN0aW9uSW50ZXJmYWNlIiwgImFic3RyYWN0IiwgImZha2VfdXNlIiwgIm5vZGVBcnJheSIsICJWZXJ0aWNhbFN0cmF0ZWd5IiwgIl9EaXJlY3Rpb25JbnRlcmZhY2UiLCAibGF5b3V0IiwgImhpZXJhcmNoaWNhbCIsICJhZGRUb09yZGVyaW5nIiwgImdldFRyZWVTaXplIiwgIm1pbl94IiwgIm1heF94IiwgIl9zb3J0SW5zdGFuY2VQcm9wZXJ0eSIsICJsZXZlbFNlcGFyYXRpb24iLCAiSG9yaXpvbnRhbFN0cmF0ZWd5IiwgIl9EaXJlY3Rpb25JbnRlcmZhY2UyIiwgIm1pbl95IiwgIm1heF95IiwgIiRldmVyeSIsICJmaWxsTGV2ZWxzQnlEaXJlY3Rpb25DeWNsaWMiLCAibGV2ZWxzIiwgImZpbGxMZXZlbHNCeURpcmVjdGlvbiIsICJpc0VudHJ5Tm9kZSIsICJzaG91bGRMZXZlbEJlUmVwbGFjZWQiLCAibGltaXQiLCAiX3JlZHVjZUluc3RhbmNlUHJvcGVydHkiLCAiYWNjIiwgImVkZ2VJZFByb3AiLCAibmV3TGV2ZWxEaWZmIiwgIl9yZXQiLCAiX3N0ZXAkdmFsdWUiLCAiZW50cnlOb2RlSWQiLCAiZW50cnlOb2RlIiwgIl9yZXQyIiwgIm5ld0xldmVsIiwgInRhcmdldE5vZGVJZCIsICJvbGRMZXZlbCIsICJIaWVyYXJjaGljYWxTdGF0dXMiLCAiY2hpbGRyZW5SZWZlcmVuY2UiLCAicGFyZW50UmVmZXJlbmNlIiwgInRyZWVzIiwgImRpc3RyaWJ1dGlvbk9yZGVyaW5nIiwgImRpc3RyaWJ1dGlvbkluZGV4IiwgImlzVHJlZSIsICJ0cmVlSW5kZXgiLCAidHJlZUlkIiwgImFjY3VtdWxhdG9yIiwgIl9nZXRNYXhMZXZlbCIsICJub2RlQSIsICJub2RlQiIsICJtaW5MZXZlbCIsICJwYXJlbnRzMSIsICJwYXJlbnRzMiIsICJpc1ByZXNlbnQiLCAiY3VyTGV2ZWwiLCAiTGF5b3V0RW5naW5lIiwgIl9yZXNldFJORyIsICJzZXRQaHlzaWNzIiwgIm9wdGlvbnNCYWNrdXAiLCAicmFuZG9tU2VlZCIsICJpbXByb3ZlZExheW91dCIsICJjbHVzdGVyVGhyZXNob2xkIiwgIm5vZGVTcGFjaW5nIiwgInRyZWVTcGFjaW5nIiwgImJsb2NrU2hpZnRpbmciLCAiZWRnZU1pbmltaXphdGlvbiIsICJwYXJlbnRDZW50cmFsaXphdGlvbiIsICJzb3J0TWV0aG9kIiwgInNldHVwSGllcmFyY2hpY2FsTGF5b3V0IiwgImxheW91dE5ldHdvcmsiLCAiY3VydmVUeXBlIiwgImFsbE9wdGlvbnMiLCAicHJldkhpZXJhcmNoaWNhbFN0YXRlIiwgInNldERpcmVjdGlvblN0cmF0ZWd5IiwgImFkYXB0QWxsT3B0aW9uc0ZvckhpZXJhcmNoaWNhbExheW91dCIsICJzZWVkIiwgImluaXRpYWxSYW5kb21TZWVkIiwgImJhY2t1cFBoeXNpY3MiLCAiaW5kaWNlcyIsICJjbHVzdGVyT3B0aW9ucyIsICJzdGFydExlbmd0aCIsICJiZWZvcmUiLCAibW9kdWxlcyIsICJjbHVzdGVyaW5nIiwgImNsdXN0ZXJCcmlkZ2VzIiwgImNsdXN0ZXJPdXRsaWVycyIsICJfZGVjbHVzdGVyQWxsIiwgImluZm8iLCAia2FtYWRhS2F3YWkiLCAiX3NoaWZ0VG9DZW50ZXIiLCAiZ2V0UmFuZ2VDb3JlIiwgImNsdXN0ZXJzUHJlc2VudCIsICJkZWZpbmVkTGV2ZWwiLCAidW5kZWZpbmVkTGV2ZWwiLCAibGFzdE5vZGVPbkxldmVsIiwgIl9kZXRlcm1pbmVMZXZlbHNCeUh1YnNpemUiLCAiX2RldGVybWluZUxldmVsc0RpcmVjdGVkIiwgIl9kZXRlcm1pbmVMZXZlbHNDdXN0b21DYWxsYmFjayIsICJlbnN1cmVMZXZlbCIsICJkaXN0cmlidXRpb24iLCAiX2dldERpc3RyaWJ1dGlvbiIsICJfZ2VuZXJhdGVNYXAiLCAiX3BsYWNlTm9kZXNCeUhpZXJhcmNoeSIsICJfY29uZGVuc2VIaWVyYXJjaHkiLCAic3RpbGxTaGlmdGluZyIsICJicmFuY2hlcyIsICJzaGlmdFRyZWUiLCAiZ2V0VHJlZVNpemVzIiwgInRyZWVXaWR0aHMiLCAibnVtVHJlZXMiLCAiZ2V0QnJhbmNoTm9kZXMiLCAiZ2V0QnJhbmNoQm91bmRhcnkiLCAiYnJhbmNoTWFwIiwgIm1heExldmVsIiwgIm1pblNwYWNlIiwgIm1heFNwYWNlIiwgImJyYW5jaE5vZGUiLCAiZ2V0UG9zaXRpb24iLCAiX3RoaXMzJF9nZXRTcGFjZUFyb3VuMiIsICJfZ2V0U3BhY2VBcm91bmROb2RlIiwgIm1pblNwYWNlTm9kZSIsICJtYXhTcGFjZU5vZGUiLCAic2hpZnRFbGVtZW50c0Nsb3NlciIsICJjZW50ZXJQYXJlbnRzIiwgImhpZXIiLCAibGV2ZWxOb2RlcyIsICJoYXNTYW1lUGFyZW50IiwgImluU2FtZVN1Yk5ldHdvcmsiLCAiYnJhbmNoU2hpZnRDYWxsYmFjayIsICJjZW50ZXJQYXJlbnQiLCAicG9zMSIsICJwb3MyIiwgImRpZmZBYnMiLCAiYnJhbmNoTm9kZXMxIiwgImJyYW5jaE5vZGVzMiIsICJtYXhMZXZlbDEiLCAiZ2V0TWF4TGV2ZWwiLCAibWF4TGV2ZWwyIiwgImJyYW5jaE5vZGVCb3VuZGFyeTEiLCAiYnJhbmNoTm9kZUJvdW5kYXJ5MiIsICJtYXgxIiwgIm1pbjIiLCAibWluU3BhY2UyIiwgIl9zaGlmdEJsb2NrIiwgIl9jZW50ZXJQYXJlbnQiLCAibWluaW1pemVFZGdlTGVuZ3RoIiwgImFsbEVkZ2VzIiwgIm5vZGVMZXZlbCIsICJDMiIsICJyZWZlcmVuY2VOb2RlcyIsICJhYm92ZUVkZ2VzIiwgImdldEZ4IiwgImdldERGeCIsICJnZXRHdWVzcyIsICJndWVzcyIsICJndWVzc01hcCIsICJkZngiLCAiYnJhbmNoTm9kZXMiLCAiYnJhbmNoQm91bmRhcnkiLCAibWluU3BhY2VCcmFuY2giLCAibWF4U3BhY2VCcmFuY2giLCAiYnJhbmNoT2Zmc2V0IiwgIl90aGlzMyRfZ2V0U3BhY2VBcm91bjQiLCAibmV3UG9zaXRpb24iLCAiZ2V0TGV2ZWxzIiwgImNlbnRlckFsbFBhcmVudHMiLCAiY2VudGVyQWxsUGFyZW50c0JvdHRvbVVwIiwgInRyZWVTaXplcyIsICJzaGlmdEJ5IiwgInNoaWZ0VHJlZXMiLCAidXNlTWFwIiwgIm9yZGVyaW5nIiwgInByZXZOb2RlIiwgIm5leHROb2RlIiwgIm5leHRQb3MiLCAicGFyZW50cyIsICJwYXJlbnRJZCIsICJfZ2V0Q2VudGVyUG9zaXRpb24iLCAiX3RoaXMkX2dldFNwYWNlQXJvdW5kMiIsICJwb3NpdGlvbmVkTm9kZXMiLCAiX2luZGV4QXJyYXlUb05vZGVzIiwgImhhbmRsZWROb2RlQ291bnQiLCAiX3ZhbGlkYXRlUG9zaXRpb25BbmRDb250aW51ZSIsICJwYXJlbnRMZXZlbCIsICJjaGlsZFJlZiIsICJjaGlsZE5vZGVMZXZlbCIsICJwcmV2aW91c1BvcyIsICJzaGFyZWRQYXJlbnQiLCAiX2ZpbmRDb21tb25QYXJlbnQiLCAid2l0aENoaWxkIiwgIl9wbGFjZUJyYW5jaE5vZGVzIiwgImlkQXJyYXkiLCAiZml4IiwgImh1YlNpemVzIiwgImh1YlNpemUiLCAiX2dldEFjdGl2ZUVkZ2VzIiwgIl90aGlzNiIsICJsZXZlbERvd25zdHJlYW0iLCAiX2dldEh1YlNpemVzIiwgIl9jcmF3bE5ldHdvcmsiLCAiX3RoaXM3IiwgImxldmVsQSIsICJzZXRNaW5MZXZlbFRvWmVybyIsICJfdGhpczgiLCAic2hha2VUb3dhcmRzIiwgIl9ldmVyeUluc3RhbmNlUHJvcGVydHkiLCAiX3RoaXM5IiwgImFkZFJlbGF0aW9uIiwgImNoZWNrSWZUcmVlIiwgIl90aGlzMTAiLCAic3RhcnRpbmdOb2RlSWQiLCAiY3Jhd2xlciIsICJ0cmVlIiwgInNldFRyZWVJbmRleCIsICJfdGhpczExIiwgInNoaWZ0ZXIiLCAiY2hpbGRBIiwgImNoaWxkQiIsICJfdGhpczEyIiwgIml0ZXJhdGVQYXJlbnRzIiwgInBhcmVudFJlZiIsICJmaW5kUGFyZW50IiwgImZvdW5kUGFyZW50IiwgImlzVmVydGljYWwiLCAibWluUG9zIiwgIm1heFBvcyIsICJNYW5pcHVsYXRpb25TeXN0ZW0iLCAiaW50ZXJhY3Rpb25IYW5kbGVyIiwgImVkaXRNb2RlIiwgIm1hbmlwdWxhdGlvbkRpdiIsICJlZGl0TW9kZURpdiIsICJjbG9zZURpdiIsICJfZG9tRXZlbnRMaXN0ZW5lckNsZWFudXBRdWV1ZSIsICJ0ZW1wb3JhcnlVSUZ1bmN0aW9ucyIsICJ0ZW1wb3JhcnlFdmVudEZ1bmN0aW9ucyIsICJ0ZW1wb3JhcnlJZHMiLCAiZ3VpRW5hYmxlZCIsICJpbk1vZGUiLCAic2VsZWN0ZWRDb250cm9sTm9kZSIsICJpbml0aWFsbHlBY3RpdmUiLCAiZGVsZXRlTm9kZSIsICJkZWxldGVFZGdlIiwgImNvbnRyb2xOb2RlU3R5bGUiLCAiX2NsZWFuIiwgIl9yZXN0b3JlIiwgImVuYWJsZUVkaXRNb2RlIiwgImRpc2FibGVFZGl0TW9kZSIsICJsb2NhbGUiLCAibG9jYWxlcyIsICJfc2V0dXAiLCAic2hvd01hbmlwdWxhdG9yVG9vbGJhciIsICJfY3JlYXRlRWRpdEJ1dHRvbiIsICJtYW5pcHVsYXRpb25ET00iLCAic2VsZWN0ZWROb2RlQ291bnQiLCAiZ2V0U2VsZWN0ZWROb2RlQ291bnQiLCAic2VsZWN0ZWRFZGdlQ291bnQiLCAiZ2V0U2VsZWN0ZWRFZGdlQ291bnQiLCAic2VsZWN0ZWRUb3RhbENvdW50IiwgIm5lZWRTZXBlcmF0b3IiLCAiX2NyZWF0ZUFkZE5vZGVCdXR0b24iLCAiX2NyZWF0ZVNlcGVyYXRvciIsICJfY3JlYXRlQWRkRWRnZUJ1dHRvbiIsICJfY3JlYXRlRWRpdE5vZGVCdXR0b24iLCAiX2NyZWF0ZUVkaXRFZGdlQnV0dG9uIiwgIl9jcmVhdGVEZWxldGVCdXR0b24iLCAiX2JpbmRFbGVtZW50RXZlbnRzIiwgInRvZ2dsZUVkaXRNb2RlIiwgIl90ZW1wb3JhcnlCaW5kRXZlbnQiLCAiX2NyZWF0ZUJhY2tCdXR0b24iLCAiX2NyZWF0ZURlc2NyaXB0aW9uIiwgIl9wZXJmb3JtQWRkTm9kZSIsICJmaW5hbGl6ZWREYXRhIiwgImFsZXJ0IiwgIl90ZW1wb3JhcnlCaW5kVUkiLCAiX2hhbmRsZUNvbm5lY3QiLCAiX2ZpbmlzaENvbm5lY3QiLCAiX2RyYWdDb250cm9sTm9kZSIsICJfZHJhZ1N0YXJ0RWRnZSIsICJlZGl0V2l0aG91dERyYWciLCAiZWRnZUJlaW5nRWRpdGVkSWQiLCAiY29udHJvbE5vZGVGcm9tIiwgIl9nZXROZXdUYXJnZXROb2RlIiwgImNvbnRyb2xOb2RlVG8iLCAiX2NvbnRyb2xOb2RlVG91Y2giLCAiX2NvbnRyb2xOb2RlRHJhZ1N0YXJ0IiwgIl9jb250cm9sTm9kZURyYWciLCAiX2NvbnRyb2xOb2RlRHJhZ0VuZCIsICJmaW5kQm9yZGVyUG9zaXRpb25zIiwgIl9wZXJmb3JtRWRpdEVkZ2UiLCAic2VsZWN0ZWROb2RlcyIsICJzZWxlY3RlZEVkZ2VzIiwgImRlbGV0ZUZ1bmN0aW9uIiwgIl9jcmVhdGVXcmFwcGVycyIsICJfcmVtb3ZlTWFuaXB1bGF0aW9uRE9NIiwgIl90aGlzJG9wdGlvbnMkbG9jYWxlcyIsICJfdGhpcyRvcHRpb25zJGxvY2FsZXMyIiwgInNldEF0dHJpYnV0ZSIsICJyZWN1cnNpdmVET01EZWxldGUiLCAiX2NyZWF0ZUJ1dHRvbiIsICJfY2xlYW51cERPTUV2ZW50TGlzdGVuZXJzIiwgIl9jbGVhbnVwVGVtcG9yYXJ5Tm9kZXNBbmRFZGdlcyIsICJfdW5iaW5kVGVtcG9yYXJ5VUlzIiwgIl91bmJpbmRUZW1wb3JhcnlFdmVudHMiLCAiYWRkTm9kZU1vZGUiLCAiYWRkRWRnZU1vZGUiLCAiZWRpdEVkZ2VNb2RlIiwgImRlbGV0ZUJ0bkNsYXNzIiwgInJ0bCIsICJkZWxldGVTZWxlY3RlZCIsICJsYWJlbENsYXNzTmFtZSIsICJuZXdGdW5jdGlvbiIsICJVSWZ1bmN0aW9uTmFtZSIsICJldmVudE5hbWUiLCAiZG9tRWxlbWVudCIsICJrZXl1cExpc3RlbmVyIiwgIl9yZWYiLCAiaW5kZXhUZW1wRWRnZSIsICJfY29udGV4dDI4IiwgIl9jb250ZXh0MjkiLCAiaW5kZXhUZW1wTm9kZSIsICJmcm9tU2VsZWN0IiwgInRvU2VsZWN0IiwgIm92ZXJsYXBwaW5nTm9kZUlkcyIsICJ0YXJnZXROb2RlIiwgImNvbm5lY3Rpb25FZGdlIiwgImNvbm5lY3RGcm9tSWQiLCAiX2NvbnRleHQzMCIsICJfY29udGV4dDMxIiwgIl9wZXJmb3JtQWRkRWRnZSIsICJjbGlja0RhdGEiLCAiZGVmYXVsdERhdGEiLCAic291cmNlTm9kZUlkIiwgImVlRnVuY3QiLCAiYm9vbCIsICJlbmRQb2ludHMiLCAibm9kZU9wdGlvbnMiLCAiYm9vbGVhbiIsICJmdW5jdGlvbiIsICJfX3R5cGVfXyIsICJtaW5pbXVtIiwgImRvbSIsICJtYXhpbXVtIiwgImNvbmZpZ3VyZSIsICJzaG93QnV0dG9uIiwgIl9fYW55X18iLCAiaW50ZXJhY3Rpb24iLCAibWFuaXB1bGF0aW9uIiwgImNsaWNrVG9Vc2UiLCAiYW55IiwgImNvbmZpZ3VyZU9wdGlvbnMiLCAiY29uZmlndXJhdG9ySGlkZU9wdGlvbiIsICJwYXJlbnRQYXRoIiwgIm9wdGlvbk5hbWUiLCAiRmxveWRXYXJzaGFsbCIsICJlZGdlc0FycmF5IiwgIkRfbWF0cml4IiwgImNlbGwiLCAia25vZGUiLCAia2NvbG0iLCAiaW5vZGUiLCAiaWNvbG0iLCAiam5vZGUiLCAiamNvbG0iLCAiS2FtYWRhS2F3YWkiLCAiZWRnZVN0cmVuZ3RoIiwgImRpc3RhbmNlU29sdmVyIiwgImlnbm9yZUNsdXN0ZXJzIiwgImdldERpc3RhbmNlcyIsICJfY3JlYXRlTF9tYXRyaXgiLCAiX2NyZWF0ZUtfbWF0cml4IiwgIl9jcmVhdGVFX21hdHJpeCIsICJtYXhJdGVyYXRpb25zIiwgIm1heEVuZXJneSIsICJoaWdoRV9ub2RlSWQiLCAiZEVfZHgiLCAiZEVfZHkiLCAiZGVsdGFfbSIsICJzdWJJdGVyYXRpb25zIiwgIl90aGlzJF9nZXRIaWdoZXN0RW5lcjIiLCAiX2dldEhpZ2hlc3RFbmVyZ3lOb2RlIiwgIl9tb3ZlTm9kZSIsICJfdGhpcyRfZ2V0RW5lcmd5MiIsICJfZ2V0RW5lcmd5IiwgIm1heEVuZXJneU5vZGVJZCIsICJkRV9keF9tYXgiLCAiZEVfZHlfbWF4IiwgIm5vZGVJZHgiLCAiX3RoaXMkX2dldEVuZXJneTQiLCAiX3RoaXMkRV9zdW1zJG0iLCAiRV9zdW1zIiwgImQyRV9keDIiLCAiZDJFX2R4ZHkiLCAiZDJFX2R5MiIsICJ4X20iLCAieV9tIiwgImttIiwgIktfbWF0cml4IiwgImxtIiwgIkxfbWF0cml4IiwgImlJZHgiLCAieF9pIiwgInlfaSIsICJrbWF0IiwgImxtYXQiLCAiZGVub21pbmF0b3IiLCAiX3VwZGF0ZUVfbWF0cml4IiwgIkVfbWF0cml4IiwgIm1JZHgiLCAiY29sbSIsICJsY29sbSIsICJvbGREeCIsICJvbGREeSIsICJOZXR3b3JrIiwgInJlbmRlcmVyIiwgIm5vZGVzSGFuZGxlciIsICJlZGdlc0hhbmRsZXIiLCAiX2NyZWF0ZSIsICJzZXREYXRhIiwgIlZhbGlkYXRvciIsICJ2YWxpZGF0ZSIsICJyYXdDb2RlIiwgIl9yYXdDb2RlJHNwbGl0MiIsICJyYXdMYW5ndWFnZSIsICJyYXdDb3VudHJ5IiwgImxhbmd1YWdlIiwgImNvdW50cnkiLCAiY29uZmlndXJhdG9yIiwgIkNvbmZpZ3VyYXRvciIsICJuZXR3b3JrT3B0aW9ucyIsICJzZXRNb2R1bGVPcHRpb25zIiwgImFjdGl2YXRvciIsICJBY3RpdmF0b3IiLCAiX3VwZGF0ZVZpc2libGVJbmRpY2VzIiwgImVkZ2VOb2Rlc1ByZXNlbnQiLCAiX3VwZGF0ZVZhbHVlUmFuZ2UiLCAiZ2VwaGkiLCAiZ2VwaGlEYXRhIiwgInZhbHVlTWluIiwgInZhbHVlTWF4IiwgInZhbHVlVG90YWwiLCAic2V0VmFsdWVSYW5nZSIsICJpc0FjdGl2ZSIsICJhY3RpdmUiLCAiY2x1c3RlciIsICJnZXROb2Rlc0luQ2x1c3RlciIsICJjbHVzdGVyQnlIdWJzaXplIiwgInVwZGF0ZUNsdXN0ZXJlZE5vZGUiLCAiZ2V0QmFzZUVkZ2UiLCAidXBkYXRlRWRnZSIsICJnZXRTZWVkIiwgImVkaXROb2RlTW9kZSIsICJnZXRQb3NpdGlvbnMiLCAic3RvcmVQb3NpdGlvbnMiLCAibW92ZU5vZGUiLCAiZ2V0Qm91bmRpbmdCb3giLCAiZ2V0Q29ubmVjdGVkTm9kZXMiLCAib2JqZWN0SWQiLCAiZ2V0Q29ubmVjdGVkRWRnZXMiLCAiZ2V0U2VsZWN0ZWRFZGdlcyIsICJzZWxlY3ROb2RlcyIsICJzZWxlY3RFZGdlcyIsICJjb21taXRXaXRob3V0RW1pdHRpbmciLCAicmVkcmF3IiwgImdldFNjYWxlIiwgImdldE9wdGlvbnNGcm9tQ29uZmlndXJhdG9yIiwgImdldE9wdGlvbnMiLCAicGFyc2VET1ROZXR3b3JrIiwgImRvdHBhcnNlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiaW5zdGFuY2UiLCAiQ29uc3RydWN0b3IiLCAiVHlwZUVycm9yIiwgInQiLCAiY2hlY2siLCAiaXQiLCAiTWF0aCIsICJnbG9iYWwiLCAiZ2xvYmFsVGhpcyIsICJ3aW5kb3ciLCAic2VsZiIsICJ0aGlzIiwgIkZ1bmN0aW9uIiwgImZhaWxzIiwgImV4ZWMiLCAiZXJyb3IiLCAiZnVuY3Rpb25CaW5kTmF0aXZlIiwgInJlcXVpcmUkJDAiLCAidGVzdCIsICJiaW5kIiwgImhhc093blByb3BlcnR5IiwgIk5BVElWRV9CSU5EIiwgIkZ1bmN0aW9uUHJvdG90eXBlIiwgInByb3RvdHlwZSIsICJhcHBseSIsICJjYWxsIiwgImZ1bmN0aW9uQXBwbHkiLCAiUmVmbGVjdCIsICJhcmd1bWVudHMiLCAidW5jdXJyeVRoaXNXaXRoQmluZCIsICJmdW5jdGlvblVuY3VycnlUaGlzIiwgImZuIiwgInVuY3VycnlUaGlzIiwgInRvU3RyaW5nIiwgInN0cmluZ1NsaWNlIiwgInNsaWNlIiwgImNsYXNzb2ZSYXciLCAicmVxdWlyZSQkMSIsICJmdW5jdGlvblVuY3VycnlUaGlzQ2xhdXNlIiwgImRvY3VtZW50QWxsIiwgImRvY3VtZW50IiwgImFsbCIsICJkb2N1bWVudEFsbF8xIiwgIklTX0hUTUxEREEiLCAiaXNDYWxsYWJsZSIsICJhcmd1bWVudCIsICJkZXNjcmlwdG9ycyIsICJPYmplY3QiLCAiZGVmaW5lUHJvcGVydHkiLCAiZ2V0IiwgImZ1bmN0aW9uQ2FsbCIsICIkcHJvcGVydHlJc0VudW1lcmFibGUiLCAicHJvcGVydHlJc0VudW1lcmFibGUiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIk5BU0hPUk5fQlVHIiwgIm9iamVjdFByb3BlcnR5SXNFbnVtZXJhYmxlIiwgImYiLCAiViIsICJkZXNjcmlwdG9yIiwgImVudW1lcmFibGUiLCAibWF0Y2giLCAidmVyc2lvbiIsICJjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IiLCAiYml0bWFwIiwgInZhbHVlIiwgImNvbmZpZ3VyYWJsZSIsICJ3cml0YWJsZSIsICJjbGFzc29mIiwgInJlcXVpcmUkJDIiLCAiJE9iamVjdCIsICJzcGxpdCIsICJpbmRleGVkT2JqZWN0IiwgImlzTnVsbE9yVW5kZWZpbmVkIiwgIiRUeXBlRXJyb3IiLCAicmVxdWlyZU9iamVjdENvZXJjaWJsZSIsICJJbmRleGVkT2JqZWN0IiwgInRvSW5kZXhlZE9iamVjdCIsICJpc09iamVjdCIsICJwYXRoIiwgImFGdW5jdGlvbiIsICJ2YXJpYWJsZSIsICJnZXRCdWlsdEluIiwgIm5hbWVzcGFjZSIsICJtZXRob2QiLCAibGVuZ3RoIiwgIm9iamVjdElzUHJvdG90eXBlT2YiLCAiaXNQcm90b3R5cGVPZiIsICJlbmdpbmVVc2VyQWdlbnQiLCAibmF2aWdhdG9yIiwgIlN0cmluZyIsICJ1c2VyQWdlbnQiLCAicHJvY2VzcyIsICJEZW5vIiwgInZlcnNpb25zIiwgInY4IiwgImVuZ2luZVY4VmVyc2lvbiIsICJWOF9WRVJTSU9OIiwgIiRTdHJpbmciLCAic3ltYm9sQ29uc3RydWN0b3JEZXRlY3Rpb24iLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwgInN5bWJvbCIsICJTeW1ib2wiLCAic2hhbSIsICJ1c2VTeW1ib2xBc1VpZCIsICJpdGVyYXRvciIsICJpc1N5bWJvbCIsICJyZXF1aXJlJCQzIiwgIiRTeW1ib2wiLCAidHJ5VG9TdHJpbmciLCAiYUNhbGxhYmxlIiwgImdldE1ldGhvZCIsICJQIiwgImZ1bmMiLCAiZGVmaW5lR2xvYmFsUHJvcGVydHkiLCAia2V5IiwgIlNIQVJFRCIsICJzaGFyZWRTdG9yZSIsICJzdG9yZSIsICJzaGFyZWRNb2R1bGUiLCAicHVzaCIsICJtb2RlIiwgImNvcHlyaWdodCIsICJsaWNlbnNlIiwgInNvdXJjZSIsICJ0b09iamVjdCIsICJoYXNPd25Qcm9wZXJ0eV8xIiwgImhhc093biIsICJpZCIsICJwb3N0Zml4IiwgInJhbmRvbSIsICJ1aWQiLCAic2hhcmVkIiwgIk5BVElWRV9TWU1CT0wiLCAicmVxdWlyZSQkNCIsICJVU0VfU1lNQk9MX0FTX1VJRCIsICJyZXF1aXJlJCQ1IiwgIldlbGxLbm93blN5bWJvbHNTdG9yZSIsICJjcmVhdGVXZWxsS25vd25TeW1ib2wiLCAid2l0aG91dFNldHRlciIsICJ3ZWxsS25vd25TeW1ib2wiLCAibmFtZSIsICJvcmRpbmFyeVRvUHJpbWl0aXZlIiwgImlucHV0IiwgInByZWYiLCAidmFsIiwgInZhbHVlT2YiLCAiVE9fUFJJTUlUSVZFIiwgInRvUHJpbWl0aXZlIiwgInJlc3VsdCIsICJleG90aWNUb1ByaW0iLCAidG9Qcm9wZXJ0eUtleSIsICJFWElTVFMiLCAiY3JlYXRlRWxlbWVudCIsICJkb2N1bWVudENyZWF0ZUVsZW1lbnQiLCAiaWU4RG9tRGVmaW5lIiwgImEiLCAiREVTQ1JJUFRPUlMiLCAicHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUiLCAicmVxdWlyZSQkNiIsICJJRThfRE9NX0RFRklORSIsICJyZXF1aXJlJCQ3IiwgIiRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAib2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwgIk8iLCAicmVwbGFjZW1lbnQiLCAiaXNGb3JjZWQiLCAiZmVhdHVyZSIsICJkZXRlY3Rpb24iLCAiZGF0YSIsICJub3JtYWxpemUiLCAiUE9MWUZJTEwiLCAiTkFUSVZFIiwgInN0cmluZyIsICJyZXBsYWNlIiwgInRvTG93ZXJDYXNlIiwgImlzRm9yY2VkXzEiLCAiZnVuY3Rpb25CaW5kQ29udGV4dCIsICJ0aGF0IiwgInY4UHJvdG90eXBlRGVmaW5lQnVnIiwgImFuT2JqZWN0IiwgIlY4X1BST1RPVFlQRV9ERUZJTkVfQlVHIiwgIiRkZWZpbmVQcm9wZXJ0eSIsICJFTlVNRVJBQkxFIiwgIkNPTkZJR1VSQUJMRSIsICJXUklUQUJMRSIsICJvYmplY3REZWZpbmVQcm9wZXJ0eSIsICJBdHRyaWJ1dGVzIiwgImN1cnJlbnQiLCAiZGVmaW5lUHJvcGVydHlNb2R1bGUiLCAiY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5IiwgIm9iamVjdCIsICJyZXF1aXJlJCQ4IiwgInJlcXVpcmUkJDkiLCAid3JhcENvbnN0cnVjdG9yIiwgIk5hdGl2ZUNvbnN0cnVjdG9yIiwgIldyYXBwZXIiLCAiYiIsICJjIiwgIl9leHBvcnQiLCAib3B0aW9ucyIsICJGT1JDRUQiLCAiVVNFX05BVElWRSIsICJWSVJUVUFMX1BST1RPVFlQRSIsICJzb3VyY2VQcm9wZXJ0eSIsICJ0YXJnZXRQcm9wZXJ0eSIsICJuYXRpdmVQcm9wZXJ0eSIsICJyZXN1bHRQcm9wZXJ0eSIsICJUQVJHRVQiLCAidGFyZ2V0IiwgIkdMT0JBTCIsICJTVEFUSUMiLCAic3RhdCIsICJQUk9UTyIsICJwcm90byIsICJuYXRpdmVTb3VyY2UiLCAidGFyZ2V0UHJvdG90eXBlIiwgImZvcmNlZCIsICJkb250Q2FsbEdldFNldCIsICJ3cmFwIiwgInJlYWwiLCAiJCIsICIkJFAiLCAiZXhwb3J0cyIsICJkZXNjIiwgImlzQXJyYXkiLCAiQXJyYXkiLCAiY2VpbCIsICJmbG9vciIsICJ0cnVuYyIsICJ4IiwgIm4iLCAidG9JbnRlZ2VyT3JJbmZpbml0eSIsICJudW1iZXIiLCAibWluIiwgInRvTGVuZ3RoIiwgImxlbmd0aE9mQXJyYXlMaWtlIiwgIm9iaiIsICJkb2VzTm90RXhjZWVkU2FmZUludGVnZXIiLCAiY3JlYXRlUHJvcGVydHkiLCAicHJvcGVydHlLZXkiLCAidG9TdHJpbmdUYWdTdXBwb3J0IiwgIlRPX1NUUklOR19UQUdfU1VQUE9SVCIsICJUT19TVFJJTkdfVEFHIiwgIkNPUlJFQ1RfQVJHVU1FTlRTIiwgInRhZyIsICJjYWxsZWUiLCAiZnVuY3Rpb25Ub1N0cmluZyIsICJpbnNwZWN0U291cmNlIiwgIm5vb3AiLCAiZW1wdHkiLCAiY29uc3RydWN0IiwgImNvbnN0cnVjdG9yUmVnRXhwIiwgIklOQ09SUkVDVF9UT19TVFJJTkciLCAiaXNDb25zdHJ1Y3Rvck1vZGVybiIsICJpc0NvbnN0cnVjdG9yTGVnYWN5IiwgImlzQ29uc3RydWN0b3IiLCAiY2FsbGVkIiwgIlNQRUNJRVMiLCAiJEFycmF5IiwgImFycmF5U3BlY2llc0NvbnN0cnVjdG9yIiwgIm9yaWdpbmFsQXJyYXkiLCAiQyIsICJjb25zdHJ1Y3RvciIsICJ1bmRlZmluZWQiLCAiYXJyYXlTcGVjaWVzQ3JlYXRlIiwgImFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQiLCAiTUVUSE9EX05BTUUiLCAiYXJyYXkiLCAiZm9vIiwgIkJvb2xlYW4iLCAicmVxdWlyZSQkMTEiLCAiSVNfQ09OQ0FUX1NQUkVBREFCTEUiLCAicmVxdWlyZSQkMTAiLCAiSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCIsICJjb25jYXQiLCAiaXNDb25jYXRTcHJlYWRhYmxlIiwgInNwcmVhZGFibGUiLCAiYXJpdHkiLCAiYXJnIiwgImkiLCAiayIsICJsZW4iLCAiRSIsICJBIiwgIm1heCIsICJ0b0Fic29sdXRlSW5kZXgiLCAiaW5kZXgiLCAiaW50ZWdlciIsICJjcmVhdGVNZXRob2QiLCAiSVNfSU5DTFVERVMiLCAiJHRoaXMiLCAiZWwiLCAiZnJvbUluZGV4IiwgImFycmF5SW5jbHVkZXMiLCAiaW5jbHVkZXMiLCAiaW5kZXhPZiIsICJoaWRkZW5LZXlzIiwgIm9iamVjdEtleXNJbnRlcm5hbCIsICJuYW1lcyIsICJlbnVtQnVnS2V5cyIsICJpbnRlcm5hbE9iamVjdEtleXMiLCAib2JqZWN0S2V5cyIsICJrZXlzIiwgIm9iamVjdERlZmluZVByb3BlcnRpZXMiLCAiZGVmaW5lUHJvcGVydGllcyIsICJQcm9wZXJ0aWVzIiwgInByb3BzIiwgImFjdGl2ZVhEb2N1bWVudCIsICJodG1sIiwgInNoYXJlZEtleSIsICJkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlIiwgIlBST1RPVFlQRSIsICJTQ1JJUFQiLCAiSUVfUFJPVE8iLCAiRW1wdHlDb25zdHJ1Y3RvciIsICJzY3JpcHRUYWciLCAiY29udGVudCIsICJMVCIsICJOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYIiwgIndyaXRlIiwgImNsb3NlIiwgInRlbXAiLCAicGFyZW50V2luZG93IiwgIk51bGxQcm90b09iamVjdCIsICJBY3RpdmVYT2JqZWN0IiwgImlmcmFtZURvY3VtZW50IiwgImlmcmFtZSIsICJKUyIsICJkb21haW4iLCAic3R5bGUiLCAiZGlzcGxheSIsICJhcHBlbmRDaGlsZCIsICJzcmMiLCAiY29udGVudFdpbmRvdyIsICJvcGVuIiwgIkYiLCAib2JqZWN0Q3JlYXRlIiwgImNyZWF0ZSIsICJvYmplY3RHZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImdldE93blByb3BlcnR5TmFtZXMiLCAiYXJyYXlTbGljZVNpbXBsZSIsICJzdGFydCIsICJlbmQiLCAiZmluIiwgIiRnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImFycmF5U2xpY2UiLCAid2luZG93TmFtZXMiLCAib2JqZWN0R2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsIiwgIm9iamVjdEdldE93blByb3BlcnR5U3ltYm9scyIsICJkZWZpbmVCdWlsdEluIiwgImRlZmluZUJ1aWx0SW5BY2Nlc3NvciIsICJ3ZWxsS25vd25TeW1ib2xXcmFwcGVkIiwgInNldCIsICJoYXMiLCAid3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSIsICJ3ZWxsS25vd25TeW1ib2xEZWZpbmUiLCAiTkFNRSIsICJzeW1ib2xEZWZpbmVUb1ByaW1pdGl2ZSIsICJTeW1ib2xQcm90b3R5cGUiLCAiaGludCIsICJvYmplY3RUb1N0cmluZyIsICJzZXRUb1N0cmluZ1RhZyIsICJUQUciLCAiU0VUX01FVEhPRCIsICJXZWFrTWFwIiwgIk5BVElWRV9XRUFLX01BUCIsICJPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCIsICJzdGF0ZSIsICJtZXRhZGF0YSIsICJmYWNhZGUiLCAiU1RBVEUiLCAiaW50ZXJuYWxTdGF0ZSIsICJlbmZvcmNlIiwgImdldHRlckZvciIsICJUWVBFIiwgInR5cGUiLCAiSVNfTUFQIiwgIklTX0ZJTFRFUiIsICJJU19TT01FIiwgIklTX0VWRVJZIiwgIklTX0ZJTkRfSU5ERVgiLCAiSVNfRklMVEVSX1JFSkVDVCIsICJOT19IT0xFUyIsICJjYWxsYmFja2ZuIiwgInNwZWNpZmljQ3JlYXRlIiwgImJvdW5kRnVuY3Rpb24iLCAiYXJyYXlJdGVyYXRpb24iLCAiZm9yRWFjaCIsICJtYXAiLCAiZmlsdGVyIiwgInNvbWUiLCAiZXZlcnkiLCAiZmluZCIsICJmaW5kSW5kZXgiLCAiZmlsdGVyUmVqZWN0IiwgInJlcXVpcmUkJDEyIiwgIiR0b1N0cmluZyIsICJyZXF1aXJlJCQxMyIsICJyZXF1aXJlJCQxNCIsICJuYXRpdmVPYmplY3RDcmVhdGUiLCAicmVxdWlyZSQkMTUiLCAicmVxdWlyZSQkMTYiLCAiZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSIsICJyZXF1aXJlJCQxNyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwiLCAicmVxdWlyZSQkMTgiLCAiZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlIiwgInJlcXVpcmUkJDE5IiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSIsICJyZXF1aXJlJCQyMCIsICJyZXF1aXJlJCQyMSIsICJyZXF1aXJlJCQyMiIsICJyZXF1aXJlJCQyMyIsICJyZXF1aXJlJCQyNCIsICJyZXF1aXJlJCQyNSIsICJyZXF1aXJlJCQyNiIsICJyZXF1aXJlJCQyOCIsICJyZXF1aXJlJCQyOSIsICJyZXF1aXJlJCQzMCIsICJyZXF1aXJlJCQzMSIsICJkZWZpbmVXZWxsS25vd25TeW1ib2wiLCAicmVxdWlyZSQkMzIiLCAiZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUiLCAicmVxdWlyZSQkMzMiLCAicmVxdWlyZSQkMzQiLCAiSW50ZXJuYWxTdGF0ZU1vZHVsZSIsICJyZXF1aXJlJCQzNSIsICIkZm9yRWFjaCIsICJyZXF1aXJlJCQzNiIsICJISURERU4iLCAicmVxdWlyZSQkMjciLCAiU1lNQk9MIiwgInNldEludGVybmFsU3RhdGUiLCAiZ2V0SW50ZXJuYWxTdGF0ZSIsICJPYmplY3RQcm90b3R5cGUiLCAiUmFuZ2VFcnJvciIsICJRT2JqZWN0IiwgIm5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJuYXRpdmVEZWZpbmVQcm9wZXJ0eSIsICJuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzIiwgIm5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlIiwgIkFsbFN5bWJvbHMiLCAiT2JqZWN0UHJvdG90eXBlU3ltYm9scyIsICJVU0VfU0VUVEVSIiwgImZpbmRDaGlsZCIsICJmYWxsYmFja0RlZmluZVByb3BlcnR5IiwgIk9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IiLCAic2V0U3ltYm9sRGVzY3JpcHRvciIsICJkZXNjcmlwdGlvbiIsICIkZGVmaW5lUHJvcGVydGllcyIsICJwcm9wZXJ0aWVzIiwgIiRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCAiSVNfT0JKRUNUX1BST1RPVFlQRSIsICJzZXR0ZXIiLCAiJCROIiwgIiRmb3JFYWNoJDEiLCAidXNlU2V0dGVyIiwgInVzZVNpbXBsZSIsICJzeW1ib2xSZWdpc3RyeURldGVjdGlvbiIsICJrZXlGb3IiLCAiTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSIsICJTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5IiwgIlN5bWJvbFRvU3RyaW5nUmVnaXN0cnkiLCAiZm9yIiwgInN5bSIsICJnZXRSZXBsYWNlckZ1bmN0aW9uIiwgInJlcGxhY2VyIiwgInJhd0xlbmd0aCIsICJlbGVtZW50IiwgImtleXNMZW5ndGgiLCAicm9vdCIsICJqIiwgIiRzdHJpbmdpZnkiLCAiY2hhckF0IiwgImNoYXJDb2RlQXQiLCAibnVtYmVyVG9TdHJpbmciLCAidGVzdGVyIiwgImxvdyIsICJoaSIsICJXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04iLCAiSUxMX0ZPUk1FRF9VTklDT0RFIiwgInN0cmluZ2lmeVdpdGhTeW1ib2xzRml4IiwgImFyZ3MiLCAiJHJlcGxhY2VyIiwgImZpeElsbEZvcm1lZCIsICJvZmZzZXQiLCAicHJldiIsICJuZXh0IiwgInN0cmluZ2lmeSIsICJzcGFjZSIsICJKU09OIiwgIkl0ZXJhdG9yUHJvdG90eXBlIiwgIlByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSIsICJhcnJheUl0ZXJhdG9yIiwgIml0ZXJhdG9ycyIsICJnZXREZXNjcmlwdG9yIiwgImZ1bmN0aW9uTmFtZSIsICJQUk9QRVIiLCAiY29ycmVjdFByb3RvdHlwZUdldHRlciIsICJnZXRQcm90b3R5cGVPZiIsICJDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIiLCAib2JqZWN0R2V0UHJvdG90eXBlT2YiLCAiSVRFUkFUT1IiLCAiQlVHR1lfU0FGQVJJX0lURVJBVE9SUyIsICJORVdfSVRFUkFUT1JfUFJPVE9UWVBFIiwgIml0ZXJhdG9yc0NvcmUiLCAiSXRlcmF0b3JzIiwgInJldHVyblRoaXMiLCAidW5jdXJyeVRoaXNBY2Nlc3NvciIsICJhUG9zc2libGVQcm90b3R5cGUiLCAib2JqZWN0U2V0UHJvdG90eXBlT2YiLCAic2V0UHJvdG90eXBlT2YiLCAiQ09SUkVDVF9TRVRURVIiLCAiX19wcm90b19fIiwgIkZ1bmN0aW9uTmFtZSIsICJjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yIiwgIkl0ZXJhdG9yQ29uc3RydWN0b3IiLCAiRU5VTUVSQUJMRV9ORVhUIiwgIkl0ZXJhdG9yc0NvcmUiLCAiUFJPUEVSX0ZVTkNUSU9OX05BTUUiLCAiS0VZUyIsICJWQUxVRVMiLCAiRU5UUklFUyIsICJpdGVyYXRvckRlZmluZSIsICJJdGVyYWJsZSIsICJERUZBVUxUIiwgIklTX1NFVCIsICJDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUiLCAibWV0aG9kcyIsICJLRVkiLCAiZ2V0SXRlcmF0aW9uTWV0aG9kIiwgIktJTkQiLCAiZGVmYXVsdEl0ZXJhdG9yIiwgIkl0ZXJhYmxlUHJvdG90eXBlIiwgIklOQ09SUkVDVF9WQUxVRVNfTkFNRSIsICJuYXRpdmVJdGVyYXRvciIsICJhbnlOYXRpdmVJdGVyYXRvciIsICJlbnRyaWVzIiwgInZhbHVlcyIsICJjcmVhdGVJdGVyUmVzdWx0T2JqZWN0IiwgImRvbmUiLCAiZGVmaW5lSXRlcmF0b3IiLCAiQVJSQVlfSVRFUkFUT1IiLCAiZGVmaW5lSXRlcmF0b3IkMiIsICJpdGVyYXRlZCIsICJraW5kIiwgIkFyZ3VtZW50cyIsICJET01JdGVyYWJsZXMiLCAiQ1NTUnVsZUxpc3QiLCAiQ1NTU3R5bGVEZWNsYXJhdGlvbiIsICJDU1NWYWx1ZUxpc3QiLCAiQ2xpZW50UmVjdExpc3QiLCAiRE9NUmVjdExpc3QiLCAiRE9NU3RyaW5nTGlzdCIsICJET01Ub2tlbkxpc3QiLCAiRGF0YVRyYW5zZmVySXRlbUxpc3QiLCAiRmlsZUxpc3QiLCAiSFRNTEFsbENvbGxlY3Rpb24iLCAiSFRNTENvbGxlY3Rpb24iLCAiSFRNTEZvcm1FbGVtZW50IiwgIkhUTUxTZWxlY3RFbGVtZW50IiwgIk1lZGlhTGlzdCIsICJNaW1lVHlwZUFycmF5IiwgIk5hbWVkTm9kZU1hcCIsICJOb2RlTGlzdCIsICJQYWludFJlcXVlc3RMaXN0IiwgIlBsdWdpbiIsICJQbHVnaW5BcnJheSIsICJTVkdMZW5ndGhMaXN0IiwgIlNWR051bWJlckxpc3QiLCAiU1ZHUGF0aFNlZ0xpc3QiLCAiU1ZHUG9pbnRMaXN0IiwgIlNWR1N0cmluZ0xpc3QiLCAiU1ZHVHJhbnNmb3JtTGlzdCIsICJTb3VyY2VCdWZmZXJMaXN0IiwgIlN0eWxlU2hlZXRMaXN0IiwgIlRleHRUcmFja0N1ZUxpc3QiLCAiVGV4dFRyYWNrTGlzdCIsICJUb3VjaExpc3QiLCAiQ09MTEVDVElPTl9OQU1FIiwgIkNvbGxlY3Rpb24iLCAiQ29sbGVjdGlvblByb3RvdHlwZSIsICJNRVRBREFUQSIsICJ0aGlzU3ltYm9sVmFsdWUiLCAic3ltYm9sSXNSZWdpc3RlcmVkIiwgImlzUmVnaXN0ZXJlZFN5bWJvbCIsICIkaXNXZWxsS25vd25TeW1ib2wiLCAiaXNXZWxsS25vd25TeW1ib2wiLCAic3ltYm9sS2V5cyIsICJzeW1ib2xLZXlzTGVuZ3RoIiwgInN5bWJvbEtleSIsICJzeW1ib2xJc1dlbGxLbm93biIsICJpc1JlZ2lzdGVyZWQiLCAiaXNXZWxsS25vd24iLCAiQ09OVkVSVF9UT19TVFJJTkciLCAicG9zIiwgImZpcnN0IiwgInNlY29uZCIsICJTIiwgInBvc2l0aW9uIiwgInNpemUiLCAiY29kZUF0IiwgIlNUUklOR19JVEVSQVRPUiIsICJwb2ludCIsICJfdHlwZW9mIiwgIm8iLCAiX1N5bWJvbCIsICJfU3ltYm9sJGl0ZXJhdG9yIiwgIl90b1Byb3BlcnR5S2V5IiwgInByaW0iLCAiX1N5bWJvbCR0b1ByaW1pdGl2ZSIsICJyZXMiLCAiTnVtYmVyIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9PYmplY3QkZGVmaW5lUHJvcGVydHkiLCAiX2NyZWF0ZUNsYXNzIiwgInByb3RvUHJvcHMiLCAic3RhdGljUHJvcHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIiRGdW5jdGlvbiIsICJqb2luIiwgImZhY3RvcmllcyIsICJmdW5jdGlvbkJpbmQiLCAiUHJvdG90eXBlIiwgInBhcnRBcmdzIiwgImFyZ3NMZW5ndGgiLCAibGlzdCIsICJnZXRCdWlsdEluUHJvdG90eXBlTWV0aG9kIiwgIkNPTlNUUlVDVE9SIiwgIk1FVEhPRCIsICJOYW1lc3BhY2UiLCAicHVyZU1ldGhvZCIsICJOYXRpdmVQcm90b3R5cGUiLCAib3duIiwgIklTX1JJR0hUIiwgImFyZ3VtZW50c0xlbmd0aCIsICJtZW1vIiwgImFycmF5UmVkdWNlIiwgImxlZnQiLCAicmlnaHQiLCAiYXJyYXlNZXRob2RJc1N0cmljdCIsICJlbmdpbmVJc05vZGUiLCAiJHJlZHVjZSIsICJyZWR1Y2UiLCAiQXJyYXlQcm90b3R5cGUiLCAiJGZpbHRlciIsICIkbWFwIiwgImZsYXR0ZW5JbnRvQXJyYXkiLCAib3JpZ2luYWwiLCAic291cmNlTGVuIiwgImRlcHRoIiwgIm1hcHBlciIsICJ0aGlzQXJnIiwgImVsZW1lbnRMZW4iLCAidGFyZ2V0SW5kZXgiLCAic291cmNlSW5kZXgiLCAibWFwRm4iLCAiZmxhdE1hcCIsICJTaW1wbGVEYXRhUGlwZSIsICJfc291cmNlIiwgIl90cmFuc2Zvcm1lcnMiLCAiX3RhcmdldCIsICJfY29udGV4dCIsICJfY29udGV4dDIiLCAiX2NvbnRleHQzIiwgImFkZCIsICJfYmluZEluc3RhbmNlUHJvcGVydHkiLCAiX2FkZCIsICJyZW1vdmUiLCAiX3JlbW92ZSIsICJ1cGRhdGUiLCAiX3VwZGF0ZSIsICJfdHJhbnNmb3JtSXRlbXMiLCAib24iLCAiX2xpc3RlbmVycyIsICJvZmYiLCAiaXRlbXMiLCAiX2NvbnRleHQ0IiwgIl9yZWR1Y2VJbnN0YW5jZVByb3BlcnR5IiwgInRyYW5zZm9ybSIsICJfbmFtZSIsICJwYXlsb2FkIiwgIm9sZERhdGEiLCAiRGF0YVBpcGVVbmRlckNvbnN0cnVjdGlvbiIsICJjYWxsYmFjayIsICJfZmlsdGVySW5zdGFuY2VQcm9wZXJ0eSIsICJfbWFwSW5zdGFuY2VQcm9wZXJ0eSIsICJfZmxhdE1hcEluc3RhbmNlUHJvcGVydHkiLCAiaXRlcmF0b3JDbG9zZSIsICJpbm5lclJlc3VsdCIsICJpbm5lckVycm9yIiwgImlzQXJyYXlJdGVyYXRvck1ldGhvZCIsICJnZXRJdGVyYXRvck1ldGhvZCIsICJnZXRJdGVyYXRvciIsICJ1c2luZ0l0ZXJhdG9yIiwgIml0ZXJhdG9yTWV0aG9kIiwgImNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmciLCAiU0FGRV9DTE9TSU5HIiwgIml0ZXJhdG9yV2l0aFJldHVybiIsICJyZXR1cm4iLCAiZnJvbSIsICJjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24iLCAiU0tJUF9DTE9TSU5HIiwgIklURVJBVElPTl9TVVBQT1JUIiwgImFycmF5TGlrZSIsICJJU19DT05TVFJVQ1RPUiIsICJtYXBmbiIsICJtYXBwaW5nIiwgInN0ZXAiLCAiaXRlcmFibGUiLCAiYXJyYXlTZXRMZW5ndGgiLCAic2V0QXJyYXlMZW5ndGgiLCAicHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoIiwgIml0ZW0iLCAiYXJnQ291bnQiLCAibmF0aXZlU2xpY2UiLCAiSEFTX1NQRUNJRVNfU1VQUE9SVCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJhcnIiLCAiYXJyMiIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAibWluTGVuIiwgImFycmF5TGlrZVRvQXJyYXkiLCAiX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJfQXJyYXkkZnJvbSIsICJfc2xpY2VkVG9BcnJheSIsICJfQXJyYXkkaXNBcnJheSIsICJyIiwgImwiLCAiX2dldEl0ZXJhdG9yTWV0aG9kIiwgImUiLCAidSIsICJfcHVzaEluc3RhbmNlUHJvcGVydHkiLCAidW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAibm9uSXRlcmFibGVSZXN0IiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJpdGVyIiwgIm5vbkl0ZXJhYmxlU3ByZWFkIiwgIm93bktleXMiLCAibmF0aXZlS2V5cyIsICJhcnJheUZvckVhY2giLCAibmF0aXZlUmV2ZXJzZSIsICJyZXZlcnNlIiwgIiQkciIsICJkZWxldGVQcm9wZXJ0eU9yVGhyb3ciLCAic3BsaWNlIiwgImRlbGV0ZUNvdW50IiwgImluc2VydENvdW50IiwgImFjdHVhbERlbGV0ZUNvdW50IiwgInRvIiwgImFjdHVhbFN0YXJ0IiwgIiRhc3NpZ24iLCAiYXNzaWduIiwgIm9iamVjdEFzc2lnbiIsICJCIiwgImFscGhhYmV0IiwgImNociIsICJUIiwgIm5hdGl2ZUdldFByb3RvdHlwZU9mIiwgIkQiLCAicGFyZW50IiwgImVuZ2luZUlzQnVuIiwgIkJ1biIsICJ2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCIsICJwYXNzZWQiLCAicmVxdWlyZWQiLCAiRU5HSU5FX0lTX0JVTiIsICJVU0VSX0FHRU5UIiwgIldSQVAiLCAic2NoZWR1bGVyc0ZpeCIsICJzY2hlZHVsZXIiLCAiaGFzVGltZUFyZyIsICJmaXJzdFBhcmFtSW5kZXgiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImJvdW5kQXJncyIsICJwYXJhbXMiLCAic2V0SW50ZXJ2YWwiLCAic2V0VGltZW91dCIsICJFbWl0dGVyIiwgIl9jYWxsYmFja3MiLCAiTWFwIiwgImV2ZW50IiwgImxpc3RlbmVyIiwgImNhbGxiYWNrcyIsICJvbmNlIiwgImFyZ3VtZW50c18iLCAiY2xlYXIiLCAiZGVsZXRlIiwgImVtaXQiLCAiY2FsbGJhY2tzQ29weSIsICJsaXN0ZW5lcnMiLCAibGlzdGVuZXJDb3VudCIsICJ0b3RhbENvdW50IiwgImhhc0xpc3RlbmVycyIsICJhZGRFdmVudExpc3RlbmVyIiwgInJlbW92ZUxpc3RlbmVyIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAicmVtb3ZlQWxsTGlzdGVuZXJzIiwgIm1vZHVsZSIsICJfZXh0ZW5kcyIsICJfaW5oZXJpdHNMb29zZSIsICJzdWJDbGFzcyIsICJzdXBlckNsYXNzIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiUmVmZXJlbmNlRXJyb3IiLCAib3V0cHV0IiwgIm5leHRLZXkiLCAid2luIiwgImFzc2lnbiQxIiwgIlZFTkRPUl9QUkVGSVhFUyIsICJURVNUX0VMRU1FTlQiLCAicm91bmQiLCAiYWJzIiwgIm5vdyIsICJEYXRlIiwgInByZWZpeGVkIiwgInByb3BlcnR5IiwgInByZWZpeCIsICJwcm9wIiwgImNhbWVsUHJvcCIsICJ0b1VwcGVyQ2FzZSIsICJQUkVGSVhFRF9UT1VDSF9BQ1RJT04iLCAiTkFUSVZFX1RPVUNIX0FDVElPTiIsICJUT1VDSF9BQ1RJT05fQ09NUFVURSIsICJUT1VDSF9BQ1RJT05fQVVUTyIsICJUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OIiwgIlRPVUNIX0FDVElPTl9OT05FIiwgIlRPVUNIX0FDVElPTl9QQU5fWCIsICJUT1VDSF9BQ1RJT05fUEFOX1kiLCAiVE9VQ0hfQUNUSU9OX01BUCIsICJ0b3VjaE1hcCIsICJjc3NTdXBwb3J0cyIsICJDU1MiLCAic3VwcG9ydHMiLCAiZ2V0VG91Y2hBY3Rpb25Qcm9wcyIsICJTVVBQT1JUX1RPVUNIIiwgIlNVUFBPUlRfUE9JTlRFUl9FVkVOVFMiLCAiU1VQUE9SVF9PTkxZX1RPVUNIIiwgIklOUFVUX1RZUEVfVE9VQ0giLCAiSU5QVVRfVFlQRV9NT1VTRSIsICJDT01QVVRFX0lOVEVSVkFMIiwgIklOUFVUX1NUQVJUIiwgIklOUFVUX0VORCIsICJJTlBVVF9DQU5DRUwiLCAiRElSRUNUSU9OX05PTkUiLCAiRElSRUNUSU9OX0xFRlQiLCAiRElSRUNUSU9OX1JJR0hUIiwgIkRJUkVDVElPTl9VUCIsICJESVJFQ1RJT05fRE9XTiIsICJESVJFQ1RJT05fSE9SSVpPTlRBTCIsICJESVJFQ1RJT05fVkVSVElDQUwiLCAiRElSRUNUSU9OX0FMTCIsICJQUk9QU19YWSIsICJQUk9QU19DTElFTlRfWFkiLCAiZWFjaCIsICJjb250ZXh0IiwgImJvb2xPckZuIiwgImluU3RyIiwgInN0ciIsICJUb3VjaEFjdGlvbiIsICJtYW5hZ2VyIiwgIl9wcm90byIsICJjb21wdXRlIiwgImFjdGlvbnMiLCAidHJpbSIsICJ0b3VjaEFjdGlvbiIsICJyZWNvZ25pemVycyIsICJyZWNvZ25pemVyIiwgImVuYWJsZSIsICJnZXRUb3VjaEFjdGlvbiIsICJoYXNQYW5YIiwgImhhc1BhblkiLCAicHJldmVudERlZmF1bHRzIiwgInNyY0V2ZW50IiwgImRpcmVjdGlvbiIsICJvZmZzZXREaXJlY3Rpb24iLCAic2Vzc2lvbiIsICJwcmV2ZW50ZWQiLCAicHJldmVudERlZmF1bHQiLCAiaGFzTm9uZSIsICJpc1RhcFBvaW50ZXIiLCAicG9pbnRlcnMiLCAiaXNUYXBNb3ZlbWVudCIsICJkaXN0YW5jZSIsICJpc1RhcFRvdWNoVGltZSIsICJkZWx0YVRpbWUiLCAicHJldmVudFNyYyIsICJoYXNQYXJlbnQiLCAibm9kZSIsICJwYXJlbnROb2RlIiwgImdldENlbnRlciIsICJwb2ludGVyc0xlbmd0aCIsICJjbGllbnRYIiwgInkiLCAiY2xpZW50WSIsICJzaW1wbGVDbG9uZUlucHV0RGF0YSIsICJ0aW1lU3RhbXAiLCAiY2VudGVyIiwgImRlbHRhWCIsICJkZWx0YVkiLCAiZ2V0RGlzdGFuY2UiLCAicDEiLCAicDIiLCAic3FydCIsICJnZXRBbmdsZSIsICJhdGFuMiIsICJQSSIsICJnZXREaXJlY3Rpb24iLCAiZ2V0VmVsb2NpdHkiLCAiY29tcHV0ZUlucHV0RGF0YSIsICJmaXJzdElucHV0IiwgImZpcnN0TXVsdGlwbGUiLCAib2Zmc2V0Q2VudGVyIiwgImFuZ2xlIiwgIm9mZnNldERlbHRhIiwgInByZXZEZWx0YSIsICJwcmV2SW5wdXQiLCAiZXZlbnRUeXBlIiwgIm92ZXJhbGxWZWxvY2l0eSIsICJvdmVyYWxsVmVsb2NpdHlYIiwgIm92ZXJhbGxWZWxvY2l0eVkiLCAic2NhbGUiLCAicm90YXRpb24iLCAibWF4UG9pbnRlcnMiLCAidmVsb2NpdHkiLCAidmVsb2NpdHlYIiwgInZlbG9jaXR5WSIsICJsYXN0IiwgImxhc3RJbnRlcnZhbCIsICJ2IiwgInNyY0V2ZW50VGFyZ2V0IiwgImNvbXBvc2VkUGF0aCIsICJpbnB1dEhhbmRsZXIiLCAicG9pbnRlcnNMZW4iLCAiY2hhbmdlZFBvaW50ZXJzTGVuIiwgImNoYW5nZWRQb2ludGVycyIsICJpc0ZpcnN0IiwgImlzRmluYWwiLCAicmVjb2duaXplIiwgInNwbGl0U3RyIiwgImFkZEV2ZW50TGlzdGVuZXJzIiwgInR5cGVzIiwgInJlbW92ZUV2ZW50TGlzdGVuZXJzIiwgImdldFdpbmRvd0ZvckVsZW1lbnQiLCAiZG9jIiwgIm93bmVyRG9jdW1lbnQiLCAiZGVmYXVsdFZpZXciLCAiSW5wdXQiLCAiaW5wdXRUYXJnZXQiLCAiZG9tSGFuZGxlciIsICJldiIsICJpbml0IiwgImV2RWwiLCAiZXZUYXJnZXQiLCAiZXZXaW4iLCAiZGVzdHJveSIsICJpbkFycmF5IiwgImZpbmRCeUtleSIsICJQT0lOVEVSX0lOUFVUX01BUCIsICJwb2ludGVyZG93biIsICJwb2ludGVybW92ZSIsICJwb2ludGVydXAiLCAicG9pbnRlcmNhbmNlbCIsICJwb2ludGVyb3V0IiwgIklFMTBfUE9JTlRFUl9UWVBFX0VOVU0iLCAiUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyIsICJQT0lOVEVSX1dJTkRPV19FVkVOVFMiLCAiTVNQb2ludGVyRXZlbnQiLCAiUG9pbnRlckV2ZW50IiwgIlBvaW50ZXJFdmVudElucHV0IiwgIl9JbnB1dCIsICJfdGhpcyIsICJwb2ludGVyRXZlbnRzIiwgInJlbW92ZVBvaW50ZXIiLCAiZXZlbnRUeXBlTm9ybWFsaXplZCIsICJwb2ludGVyVHlwZSIsICJpc1RvdWNoIiwgInN0b3JlSW5kZXgiLCAicG9pbnRlcklkIiwgImJ1dHRvbiIsICJ0b0FycmF5IiwgInVuaXF1ZUFycmF5IiwgInNvcnQiLCAicmVzdWx0cyIsICJUT1VDSF9JTlBVVF9NQVAiLCAidG91Y2hzdGFydCIsICJ0b3VjaG1vdmUiLCAidG91Y2hlbmQiLCAidG91Y2hjYW5jZWwiLCAiVG91Y2hJbnB1dCIsICJ0YXJnZXRJZHMiLCAidG91Y2hlcyIsICJnZXRUb3VjaGVzIiwgInRhcmdldFRvdWNoZXMiLCAiYWxsVG91Y2hlcyIsICJpZGVudGlmaWVyIiwgImNoYW5nZWRUb3VjaGVzIiwgImNoYW5nZWRUYXJnZXRUb3VjaGVzIiwgInRvdWNoIiwgIk1PVVNFX0lOUFVUX01BUCIsICJtb3VzZWRvd24iLCAibW91c2Vtb3ZlIiwgIm1vdXNldXAiLCAiTW91c2VJbnB1dCIsICJwcmVzc2VkIiwgIndoaWNoIiwgIkRFRFVQX1RJTUVPVVQiLCAic2V0TGFzdFRvdWNoIiwgImV2ZW50RGF0YSIsICJwcmltYXJ5VG91Y2giLCAibGFzdFRvdWNoIiwgImx0cyIsICJsYXN0VG91Y2hlcyIsICJyZWNvcmRUb3VjaGVzIiwgImlzU3ludGhldGljRXZlbnQiLCAiZHgiLCAiZHkiLCAiVG91Y2hNb3VzZUlucHV0IiwgIl9tYW5hZ2VyIiwgImlucHV0RXZlbnQiLCAiaW5wdXREYXRhIiwgImlzTW91c2UiLCAic291cmNlQ2FwYWJpbGl0aWVzIiwgImZpcmVzVG91Y2hFdmVudHMiLCAibW91c2UiLCAiaW52b2tlQXJyYXlBcmciLCAiU1RBVEVfRkFJTEVEIiwgIl91bmlxdWVJZCIsICJnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyIiwgIm90aGVyUmVjb2duaXplciIsICJzdGF0ZVN0ciIsICJSZWNvZ25pemVyIiwgInNpbXVsdGFuZW91cyIsICJyZXF1aXJlRmFpbCIsICJyZWNvZ25pemVXaXRoIiwgImRyb3BSZWNvZ25pemVXaXRoIiwgInJlcXVpcmVGYWlsdXJlIiwgImRyb3BSZXF1aXJlRmFpbHVyZSIsICJoYXNSZXF1aXJlRmFpbHVyZXMiLCAiY2FuUmVjb2duaXplV2l0aCIsICJhZGRpdGlvbmFsRXZlbnQiLCAidHJ5RW1pdCIsICJjYW5FbWl0IiwgImlucHV0RGF0YUNsb25lIiwgInJlc2V0IiwgIlRhcFJlY29nbml6ZXIiLCAiX1JlY29nbml6ZXIiLCAidGFwcyIsICJpbnRlcnZhbCIsICJ0aW1lIiwgInRocmVzaG9sZCIsICJwb3NUaHJlc2hvbGQiLCAicFRpbWUiLCAicENlbnRlciIsICJfdGltZXIiLCAiX2lucHV0IiwgImNvdW50IiwgIl90aGlzMiIsICJ2YWxpZFBvaW50ZXJzIiwgInZhbGlkTW92ZW1lbnQiLCAidmFsaWRUb3VjaFRpbWUiLCAiZmFpbFRpbWVvdXQiLCAidmFsaWRJbnRlcnZhbCIsICJ2YWxpZE11bHRpVGFwIiwgIl90aGlzMyIsICJjbGVhclRpbWVvdXQiLCAidGFwQ291bnQiLCAiQXR0clJlY29nbml6ZXIiLCAiYXR0clRlc3QiLCAib3B0aW9uUG9pbnRlcnMiLCAiaXNSZWNvZ25pemVkIiwgImlzVmFsaWQiLCAiZGlyZWN0aW9uU3RyIiwgIlBhblJlY29nbml6ZXIiLCAiX0F0dHJSZWNvZ25pemVyIiwgInBYIiwgInBZIiwgImRpcmVjdGlvblRlc3QiLCAiaGFzTW92ZWQiLCAiU3dpcGVSZWNvZ25pemVyIiwgIlBpbmNoUmVjb2duaXplciIsICJpbk91dCIsICJSb3RhdGVSZWNvZ25pemVyIiwgIlByZXNzUmVjb2duaXplciIsICJ2YWxpZFRpbWUiLCAiZGVmYXVsdHMiLCAiZG9tRXZlbnRzIiwgImlucHV0Q2xhc3MiLCAiY3NzUHJvcHMiLCAidXNlclNlbGVjdCIsICJ0b3VjaFNlbGVjdCIsICJ0b3VjaENhbGxvdXQiLCAiY29udGVudFpvb21pbmciLCAidXNlckRyYWciLCAidGFwSGlnaGxpZ2h0Q29sb3IiLCAicHJlc2V0IiwgInRvZ2dsZUNzc1Byb3BzIiwgIm9sZENzc1Byb3BzIiwgIk1hbmFnZXIiLCAiaGFuZGxlcnMiLCAic3RvcCIsICJmb3JjZSIsICJzdG9wcGVkIiwgImN1clJlY29nbml6ZXIiLCAiZXhpc3RpbmciLCAidGFyZ2V0UmVjb2duaXplciIsICJldmVudHMiLCAiZ2VzdHVyZUV2ZW50IiwgImNyZWF0ZUV2ZW50IiwgImluaXRFdmVudCIsICJnZXN0dXJlIiwgImRpc3BhdGNoRXZlbnQiLCAiU0lOR0xFX1RPVUNIX0lOUFVUX01BUCIsICJTaW5nbGVUb3VjaElucHV0IiwgInN0YXJ0ZWQiLCAibm9ybWFsaXplU2luZ2xlVG91Y2hlcyIsICJjaGFuZ2VkIiwgImRlcHJlY2F0ZSIsICJtZXNzYWdlIiwgImRlcHJlY2F0aW9uTWVzc2FnZSIsICJFcnJvciIsICJzdGFjayIsICJsb2ciLCAiY29uc29sZSIsICJ3YXJuIiwgImV4dGVuZCIsICJkZXN0IiwgIm1lcmdlIiwgImluaGVyaXQiLCAiY2hpbGQiLCAiYmFzZSIsICJjaGlsZFAiLCAiYmFzZVAiLCAiX3N1cGVyIiwgImJpbmRGbiIsICJSZWFsSGFtbWVyIiwgIkhhbW1lciIsICJWRVJTSU9OIiwgIklOUFVUX01PVkUiLCAiU1RBVEVfUE9TU0lCTEUiLCAiU1RBVEVfQkVHQU4iLCAiU1RBVEVfQ0hBTkdFRCIsICJTVEFURV9FTkRFRCIsICJTVEFURV9SRUNPR05JWkVEIiwgIlNUQVRFX0NBTkNFTExFRCIsICJUYXAiLCAiUGFuIiwgIlN3aXBlIiwgIlBpbmNoIiwgIlJvdGF0ZSIsICJQcmVzcyIsICJERUxFVEUiLCAiZGVlcE9iamVjdEFzc2lnbiIsICJtZXJnZWQiLCAiZGVlcE9iamVjdEFzc2lnbk5vbmVudHJ5IiwgInN0cmlwRGVsZXRlIiwgIl9sZW4yIiwgIl9rZXkyIiwgIl9jb25jYXRJbnN0YW5jZVByb3BlcnR5IiwgInNldFRpbWUiLCAiZ2V0VGltZSIsICJfc3RlcCIsICJfaXRlcmF0b3IiLCAiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCAiX1JlZmxlY3Qkb3duS2V5cyIsICJzIiwgImNsb25lIiwgImVyciIsICJfaSIsICJfT2JqZWN0JGtleXMiLCAiX09iamVjdCRrZXlzMiIsICJhQ29uc3RydWN0b3IiLCAibmF0aXZlQ29uc3RydWN0IiwgIk5FV19UQVJHRVRfQlVHIiwgIkFSR1NfQlVHIiwgIlRhcmdldCIsICJuZXdUYXJnZXQiLCAiJGFyZ3MiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICIkJGgiLCAiX3NldFByb3RvdHlwZU9mIiwgInAiLCAiX09iamVjdCRzZXRQcm90b3R5cGVPZiIsICJfaW5oZXJpdHMiLCAiX09iamVjdCRjcmVhdGUiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAiYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9nZXRQcm90b3R5cGVPZiIsICJfT2JqZWN0JGdldFByb3RvdHlwZU9mIiwgIl9fZXNNb2R1bGUiLCAiJEVycm9yIiwgIlRFU1QiLCAiVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZIiwgIklTX1Y4X09SX0NIQUtSQV9TVEFDSyIsICJlcnJvclN0YWNrSW5zdGFsbGFibGUiLCAiY2xlYXJFcnJvclN0YWNrIiwgImRyb3BFbnRyaWVzIiwgInByZXBhcmVTdGFja1RyYWNlIiwgIkVSUk9SX1NUQUNLX0lOU1RBTExBQkxFIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIlJlc3VsdCIsICJSZXN1bHRQcm90b3R5cGUiLCAiaXRlcmF0ZSIsICJ1bmJvdW5kRnVuY3Rpb24iLCAiaXRlckZuIiwgIkFTX0VOVFJJRVMiLCAiSVNfUkVDT1JEIiwgIklTX0lURVJBVE9SIiwgIklOVEVSUlVQVEVEIiwgImNvbmRpdGlvbiIsICJjYWxsRm4iLCAiY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyIsICJleGNlcHRpb25zIiwgImluc3RhbGxFcnJvckNhdXNlIiwgImNhdXNlIiwgImluc3RhbGxFcnJvclN0YWNrIiwgIm5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50IiwgIiRkZWZhdWx0IiwgIiRBZ2dyZWdhdGVFcnJvciIsICJlcnJvcnMiLCAiaXNJbnN0YW5jZSIsICJBZ2dyZWdhdGVFcnJvclByb3RvdHlwZSIsICJlcnJvcnNBcnJheSIsICJBZ2dyZWdhdGVFcnJvciIsICIkbG9jYXRpb24iLCAiZGVmZXIiLCAiY2hhbm5lbCIsICJwb3J0IiwgInNldFNwZWNpZXMiLCAiQ09OU1RSVUNUT1JfTkFNRSIsICJhbkluc3RhbmNlIiwgInNwZWNpZXNDb25zdHJ1Y3RvciIsICJkZWZhdWx0Q29uc3RydWN0b3IiLCAiZW5naW5lSXNJb3MiLCAiSVNfSU9TIiwgIklTX05PREUiLCAic2V0SW1tZWRpYXRlIiwgImNsZWFySW1tZWRpYXRlIiwgIkRpc3BhdGNoIiwgIk1lc3NhZ2VDaGFubmVsIiwgImNvdW50ZXIiLCAicXVldWUiLCAiT05SRUFEWVNUQVRFQ0hBTkdFIiwgImxvY2F0aW9uIiwgInJ1biIsICJydW5uZXIiLCAiZXZlbnRMaXN0ZW5lciIsICJnbG9iYWxQb3N0TWVzc2FnZURlZmVyIiwgInBvc3RNZXNzYWdlIiwgInByb3RvY29sIiwgImhvc3QiLCAibmV4dFRpY2siLCAicG9ydDIiLCAicG9ydDEiLCAib25tZXNzYWdlIiwgImltcG9ydFNjcmlwdHMiLCAicmVtb3ZlQ2hpbGQiLCAidGFzayIsICJRdWV1ZSIsICJoZWFkIiwgInRhaWwiLCAiUXVldWUkMyIsICJlbnRyeSIsICJub3RpZnkiLCAidG9nZ2xlIiwgInByb21pc2UiLCAidGhlbiIsICJlbmdpbmVJc0lvc1BlYmJsZSIsICJQZWJibGUiLCAiZW5naW5lSXNXZWJvc1dlYmtpdCIsICJtYWNyb3Rhc2siLCAiSVNfSU9TX1BFQkJMRSIsICJJU19XRUJPU19XRUJLSVQiLCAiTXV0YXRpb25PYnNlcnZlciIsICJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiwgIlByb21pc2UiLCAicXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yIiwgIm1pY3JvdGFzayIsICJmbHVzaCIsICJleGl0IiwgImVudGVyIiwgInJlc29sdmUiLCAiY3JlYXRlVGV4dE5vZGUiLCAib2JzZXJ2ZSIsICJjaGFyYWN0ZXJEYXRhIiwgIm1pY3JvdGFza18xIiwgInBlcmZvcm0iLCAicHJvbWlzZU5hdGl2ZUNvbnN0cnVjdG9yIiwgImVuZ2luZUlzRGVubyIsICJlbmdpbmVJc0Jyb3dzZXIiLCAiTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yIiwgIklTX0JST1dTRVIiLCAiSVNfREVOTyIsICJOYXRpdmVQcm9taXNlUHJvdG90eXBlIiwgIlNVQkNMQVNTSU5HIiwgIk5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCIsICJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLCAiRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IiLCAiUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UiLCAiR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSIsICJGYWtlUHJvbWlzZSIsICJwcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24iLCAiUkVKRUNUSU9OX0VWRU5UIiwgIlByb21pc2VDYXBhYmlsaXR5IiwgInJlamVjdCIsICIkJHJlc29sdmUiLCAiJCRyZWplY3QiLCAibmV3UHJvbWlzZUNhcGFiaWxpdHkiLCAiSW50ZXJuYWwiLCAiT3duUHJvbWlzZUNhcGFiaWxpdHkiLCAiaG9zdFJlcG9ydEVycm9ycyIsICJQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24iLCAibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCAiUFJPTUlTRSIsICJnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSIsICJQcm9taXNlQ29uc3RydWN0b3IiLCAiUHJvbWlzZVByb3RvdHlwZSIsICJuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkiLCAiRElTUEFUQ0hfRVZFTlQiLCAiVU5IQU5ETEVEX1JFSkVDVElPTiIsICJpc1RoZW5hYmxlIiwgImNhbGxSZWFjdGlvbiIsICJyZWFjdGlvbiIsICJleGl0ZWQiLCAib2siLCAiZmFpbCIsICJyZWplY3Rpb24iLCAib25IYW5kbGVVbmhhbmRsZWQiLCAiaXNSZWplY3QiLCAibm90aWZpZWQiLCAicmVhY3Rpb25zIiwgIm9uVW5oYW5kbGVkIiwgInJlYXNvbiIsICJpc1VuaGFuZGxlZCIsICJ1bndyYXAiLCAiaW50ZXJuYWxSZWplY3QiLCAiaW50ZXJuYWxSZXNvbHZlIiwgIndyYXBwZXIiLCAiZXhlY3V0b3IiLCAib25GdWxmaWxsZWQiLCAib25SZWplY3RlZCIsICJQcm9taXNlV3JhcHBlciIsICJzZXRUb1N0cmluZ1RhZyQxIiwgInNldFNwZWNpZXMkMSIsICJwcm9taXNlU3RhdGljc0luY29ycmVjdEl0ZXJhdGlvbiIsICJjYXBhYmlsaXR5IiwgIiRwcm9taXNlUmVzb2x2ZSIsICJyZW1haW5pbmciLCAiYWxyZWFkeUNhbGxlZCIsICJjYXRjaCIsICJyYWNlIiwgInByb21pc2VSZXNvbHZlIiwgInByb21pc2VDYXBhYmlsaXR5IiwgIlByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIiLCAiQ0hFQ0tfV1JBUFBFUiIsICJhbGxTZXR0bGVkIiwgInN0YXR1cyIsICJQUk9NSVNFX0FOWV9FUlJPUiIsICJhbnkiLCAiYWxyZWFkeVJlc29sdmVkIiwgImFscmVhZHlSZWplY3RlZCIsICJmaW5hbGx5IiwgIm9uRmluYWxseSIsICJpc0Z1bmN0aW9uIiwgIndpdGhSZXNvbHZlcnMiLCAidHJ5IiwgIl9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eSIsICJfUHJvbWlzZSIsICJfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkiLCAiX3JlZ2VuZXJhdG9yUnVudGltZSIsICJhc3luY0l0ZXJhdG9yIiwgInRvU3RyaW5nVGFnIiwgImRlZmluZSIsICJHZW5lcmF0b3IiLCAiQ29udGV4dCIsICJtYWtlSW52b2tlTWV0aG9kIiwgInRyeUNhdGNoIiwgImgiLCAiR2VuZXJhdG9yRnVuY3Rpb24iLCAiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCAiZyIsICJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCAiX2ludm9rZSIsICJBc3luY0l0ZXJhdG9yIiwgImludm9rZSIsICJfX2F3YWl0IiwgImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwgImRlbGVnYXRlIiwgIm1heWJlSW52b2tlRGVsZWdhdGUiLCAic2VudCIsICJfc2VudCIsICJkaXNwYXRjaEV4Y2VwdGlvbiIsICJhYnJ1cHQiLCAicmVzdWx0TmFtZSIsICJuZXh0TG9jIiwgInB1c2hUcnlFbnRyeSIsICJ0cnlMb2MiLCAiY2F0Y2hMb2MiLCAiZmluYWxseUxvYyIsICJhZnRlckxvYyIsICJ0cnlFbnRyaWVzIiwgInJlc2V0VHJ5RW50cnkiLCAiY29tcGxldGlvbiIsICJpc05hTiIsICJkaXNwbGF5TmFtZSIsICJpc0dlbmVyYXRvckZ1bmN0aW9uIiwgIm1hcmsiLCAiYXdyYXAiLCAiYXN5bmMiLCAicG9wIiwgInJ2YWwiLCAiaGFuZGxlIiwgImNvbXBsZXRlIiwgImZpbmlzaCIsICJkZWxlZ2F0ZVlpZWxkIiwgInJ1bnRpbWUiLCAicmVnZW5lcmF0b3IiLCAicmVnZW5lcmF0b3JSdW50aW1lIiwgImFjY2lkZW50YWxTdHJpY3RNb2RlIiwgImFycmF5QnVmZmVyTm9uRXh0ZW5zaWJsZSIsICJBcnJheUJ1ZmZlciIsICJidWZmZXIiLCAiaXNFeHRlbnNpYmxlIiwgIkFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSIsICIkaXNFeHRlbnNpYmxlIiwgIm9iamVjdElzRXh0ZW5zaWJsZSIsICJmcmVlemluZyIsICJwcmV2ZW50RXh0ZW5zaW9ucyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUiLCAiRlJFRVpJTkciLCAiUkVRVUlSRUQiLCAic2V0TWV0YWRhdGEiLCAib2JqZWN0SUQiLCAid2Vha0RhdGEiLCAibWV0YSIsICJpbnRlcm5hbE1ldGFkYXRhTW9kdWxlIiwgImZhc3RLZXkiLCAiZ2V0V2Vha0RhdGEiLCAib25GcmVlemUiLCAiSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSIsICJpbnRlcm5hbFN0YXRlR2V0dGVyRm9yIiwgImNvbGxlY3Rpb24iLCAiY29tbW9uIiwgIklTX1dFQUsiLCAiQURERVIiLCAiZXhwb3J0ZWQiLCAiSVNfQURERVIiLCAiZ2V0Q29uc3RydWN0b3IiLCAic2V0U3Ryb25nIiwgImRlZmluZUJ1aWx0SW5zIiwgInVuc2FmZSIsICJjb2xsZWN0aW9uU3Ryb25nIiwgInByZXZpb3VzIiwgImdldEVudHJ5IiwgInJlbW92ZWQiLCAiSVRFUkFUT1JfTkFNRSIsICJnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSIsICJnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUiLCAiJHNvbWUiLCAibWVyZ2VTb3J0IiwgImNvbXBhcmVmbiIsICJtaWRkbGUiLCAiaW5zZXJ0aW9uU29ydCIsICJsbGVuZ3RoIiwgInJsZW5ndGgiLCAibGluZGV4IiwgInJpbmRleCIsICJhcnJheVNvcnQiLCAiZmlyZWZveCIsICJlbmdpbmVGZlZlcnNpb24iLCAiZW5naW5lSXNJZU9yRWRnZSIsICJ3ZWJraXQiLCAiZW5naW5lV2Via2l0VmVyc2lvbiIsICJpbnRlcm5hbFNvcnQiLCAiRkYiLCAiSUVfT1JfRURHRSIsICJWOCIsICJXRUJLSVQiLCAibmF0aXZlU29ydCIsICJGQUlMU19PTl9VTkRFRklORUQiLCAiRkFJTFNfT05fTlVMTCIsICJTVFJJQ1RfTUVUSE9EIiwgIlNUQUJMRV9TT1JUIiwgImNvZGUiLCAiZnJvbUNoYXJDb2RlIiwgIml0ZW1zTGVuZ3RoIiwgImFycmF5TGVuZ3RoIiwgImdldFJhbmRvbVZhbHVlcyIsICJybmRzOCIsICJVaW50OEFycmF5IiwgInJuZyIsICJjcnlwdG8iLCAiYnl0ZVRvSGV4IiwgIm5hdGl2ZSIsICJyYW5kb21VVUlEIiwgInY0IiwgImJ1ZiIsICJybmRzIiwgImlzSWQiLCAiZGVsYXkiLCAiSW5maW5pdHkiLCAic2V0T3B0aW9ucyIsICJfZmx1c2hJZk5lZWRlZCIsICJfZXh0ZW5kZWQiLCAibWUiLCAiX2xlbiIsICJfa2V5IiwgIl9xdWV1ZSIsICJfdGltZW91dCIsICJfc2V0VGltZW91dCIsICJfc3BsaWNlSW5zdGFuY2VQcm9wZXJ0eSIsICJEYXRhU2V0UGFydCIsICJzZW5kZXJJZCIsICJfc3Vic2NyaWJlcnMiLCAic3Vic2NyaWJlciIsICJTZXQiLCAiRGF0YVN0cmVhbSIsICJwYWlycyIsICJfcGFpcnMiLCAiX3N0ZXAkdmFsdWUiLCAidDAiLCAiX2l0ZXJhdG9yMiIsICJfc3RlcDIiLCAiX3N0ZXAyJHZhbHVlIiwgIl9pdGVyYXRvcjMiLCAiX3N0ZXAzIiwgIl9zdGVwMyR2YWx1ZSIsICJfaXRlcmF0b3I0IiwgIl9zdGVwNCIsICJfc3RlcDQkdmFsdWUiLCAiX2NvbnRleHQ1IiwgInBhaXIiLCAiX2NvbnRleHQ2IiwgIl9zdGVwNSIsICJfaXRlcmF0b3I1IiwgIl9zdGVwNSR2YWx1ZSIsICJfTWFwIiwgIl9TZXQiLCAidG9JZEFycmF5IiwgInRvSXRlbUFycmF5IiwgIl9zdGVwNiIsICJfaXRlcmF0b3I2IiwgIl9zdGVwNiR2YWx1ZSIsICJfU3ltYm9sJGl0ZXJhdG9yMiIsICJfY2FsbGVlIiwgIl9pdGVyYXRvcjciLCAiX3N0ZXA3IiwgIl9zdGVwNyR2YWx1ZSIsICJfY29udGV4dDciLCAiX3N0ZXA4IiwgIl9pdGVyYXRvcjgiLCAiX3N0ZXA4JHZhbHVlIiwgIl9jYWxsZWUyIiwgIl9pdGVyYXRvcjkiLCAiX3N0ZXA5IiwgIl9zdGVwOSR2YWx1ZSIsICJfY29udGV4dDgiLCAiX2dldEl0ZXJhdG9yIiwgImN1cnIiLCAibWF4SXRlbSIsICJtYXhWYWx1ZSIsICJfY3VyciR2YWx1ZSIsICJtaW5JdGVtIiwgIm1pblZhbHVlIiwgIl9jdXJyJHZhbHVlMiIsICJhY2N1bXVsYXRvciIsICJfc3RlcDEwIiwgIl9pdGVyYXRvcjEwIiwgIl9zdGVwMTAkdmFsdWUiLCAiX2NvbnRleHQ5IiwgIl9zb3J0SW5zdGFuY2VQcm9wZXJ0eSIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgImlkQSIsICJpdGVtQSIsICJfcmVmNCIsICJpZEIiLCAiaXRlbUIiLCAiRGF0YVNldCIsICJfRGF0YVNldFBhcnQiLCAiX2NyZWF0ZVN1cGVyIiwgIl9vcHRpb25zIiwgIl9kYXRhIiwgIl9pZFByb3AiLCAiZmllbGRJZCIsICJhZGRlZElkcyIsICJpZHNUb0FkZCIsICJkIiwgIl9zb21lSW5zdGFuY2VQcm9wZXJ0eSIsICJfYWRkSXRlbSIsICJfdHJpZ2dlciIsICJ1cGRhdGVkSWRzIiwgInVwZGF0ZWREYXRhIiwgImlkUHJvcCIsICJhZGRPclVwZGF0ZSIsICJvcmlnSWQiLCAiZnVsbEl0ZW0iLCAib2xkSXRlbSIsICJfT2JqZWN0JGFzc2lnbiIsICJfdXBkYXRlSXRlbSIsICJfdGhpczQiLCAidXBkYXRlRXZlbnREYXRhIiwgInVwZGF0ZXMiLCAiaWRzIiwgIl9pdGVtIiwgInJldHVyblR5cGUiLCAiaXRlbUlkcyIsICJpdGVtSWQiLCAiX2tleXNJbnN0YW5jZVByb3BlcnR5IiwgIm9yZGVyIiwgIl9zb3J0IiwgImZpZWxkcyIsICJfZmlsdGVyRmllbGRzIiwgInJlc3VsdGFudCIsICJtYXBwZWRJdGVtcyIsICJmaWx0ZXJlZEl0ZW0iLCAiZmllbGQiLCAiYXYiLCAiYnYiLCAicmVtb3ZlZElkcyIsICJyZW1vdmVkSXRlbXMiLCAiaWRlbnQiLCAibWF4RmllbGQiLCAiX3ZhbHVlc0luc3RhbmNlUHJvcGVydHkiLCAiaXRlbUZpZWxkIiwgIm1pbkZpZWxkIiwgImV4aXN0cyIsICJ1dWlkNCIsICJfSlNPTiRzdHJpbmdpZnkiLCAiX29iamVjdFNwcmVhZCIsICJfZW50cmllc0luc3RhbmNlUHJvcGVydHkiLCAiRGF0YVZpZXciLCAiX2xpc3RlbmVyIiwgIl9vbkV2ZW50IiwgInNldERhdGEiLCAiZ2V0RGF0YVNldCIsICJnZXRJZHMiLCAiX2lkcyIsICJvbGRJZHMiLCAibmV3SWRzIiwgInZpZXdPcHRpb25zIiwgInRoaXNGaWx0ZXIiLCAib3B0aW9uc0ZpbHRlciIsICJkZWZhdWx0RmlsdGVyIiwgInN0cmVhbSIsICJfdGhpcyRfZGF0YSIsICJvbGRJdGVtcyIsICJ1cGRhdGVkSXRlbXMiLCAiaXNEYXRhU2V0TGlrZSIsICJkaXN0aW5jdCIsICJ1cGRhdGVPbmx5IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgInByb3RvdHlwZSIsICJrZXlzIiwgImIiLCAiZGVzY3JpcHRvcnMiLCAiZmlsdGVyIiwgInBvc2l0aW9uIiwgIm1hdGNoZXMiLCAiaGFzT3duUHJvcGVydHkiLCAicmVkdWNlciIsICJkZWxpbWl0ZXIiLCAiZGVmaW5lIiwgInNpemUiLCAibGVuZ3RoIiwgInRva2VuIiwgImZpbHRlciIsICJlYWNoIiwgInRva2VuIiwgIm1hdGNoIiwgInByb3RvdHlwZSIsICJ0b1N0cmluZyIsICJlYWNoIiwgImVuY29kZSIsICJtYXRjaCIsICJrZXlzIiwgImlzRm9ybURhdGEiLCAiaXNGaWxlTGlzdCIsICJ0cmFuc2l0aW9uYWwiLCAibGluZSIsICJtYXRjaCIsICJmaWx0ZXIiLCAiY2hhciIsICJzZWxmIiwgImtleXMiLCAiY29tcHV0ZWQiLCAicHJvdG90eXBlIiwgInZhbGlkYXRlU3RhdHVzIiwgIm1hdGNoIiwgIm1pbiIsICJub3ciLCAibm93IiwgIm1hdGNoIiwgImIiLCAibWVyZ2UiLCAidG9rZW4iLCAidHJhbnNpdGlvbmFsIiwgImxlbmd0aCIsICJzaWduYWwiLCAiZG9uZSIsICJyZXMiLCAibGVuZ3RoIiwgImxlbmd0aCIsICJ2ZXJzaW9uIiwgImtleXMiLCAidmFsaWRhdG9ycyIsICJ0cmFuc2l0aW9uYWwiLCAidG9rZW4iLCAiQXhpb3MiLCAiQXhpb3NFcnJvciIsICJDYW5jZWxlZEVycm9yIiwgImlzQ2FuY2VsIiwgIkNhbmNlbFRva2VuIiwgIlZFUlNJT04iLCAiYWxsIiwgImlzQXhpb3NFcnJvciIsICJzcHJlYWQiLCAidG9Gb3JtRGF0YSIsICJBeGlvc0hlYWRlcnMiLCAiSHR0cFN0YXR1c0NvZGUiLCAibWVyZ2VDb25maWciLCAidiIsICJpTG9hZGVkQ2hpbGRyZW4iLCAiYiIsICJiIiwgImN5Y2xlQ2hlY2siLCAibm9kZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiUmVhY3QiLCAiU3R5bGVTaGVldCIsICJsZW5ndGgiLCAidHJpbSIsICJhcHBlbmQiLCAibGVuZ3RoIiwgInRyaW0iLCAibGVuZ3RoIiwgInByb3BlcnR5IiwgImNoYXJhY3RlciIsICJjaGFyYWN0ZXJzIiwgImFwcGVuZCIsICJzaXplIiwgIngiLCAidHJpbSIsICJsZW5ndGgiLCAibGVuZ3RoIiwgImlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyIsICJjaGFyYWN0ZXIiLCAidG9SdWxlcyIsICJnZXRSdWxlcyIsICJjb21wYXQiLCAicmVtb3ZlTGFiZWwiLCAibGVuZ3RoIiwgInByZWZpeGVyIiwgImNyZWF0ZUNhY2hlIiwgIm5vZGUiLCAic3R5bGlzIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgInJlZ2lzdGVyU3R5bGVzIiwgImluc2VydFN0eWxlcyIsICJpc0RldmVsb3BtZW50IiwgImlzQ3VzdG9tUHJvcGVydHkiLCAicHJvcGVydHkiLCAiaXNQcm9jZXNzYWJsZVZhbHVlIiwgInByb2Nlc3NTdHlsZVZhbHVlIiwgIm1hdGNoIiwgImtleWZyYW1lcyIsICJuZXh0IiwgInN0eWxlcyIsICJzdHJpbmciLCAic3luY0ZhbGxiYWNrIiwgInVzZUluc2VydGlvbkVmZmVjdCIsICJpc0RldmVsb3BtZW50IiwgIndpdGhFbW90aW9uQ2FjaGUiLCAiZnVuYyIsICJjcmVhdGVFbW90aW9uUHJvcHMiLCAiSW5zZXJ0aW9uIiwgIl9yZWYiLCAiaXNEZXZlbG9wbWVudCIsICJSZWFjdCIsICJqc3giLCAic3R5bGVzIiwgIm5vZGUiLCAia2V5ZnJhbWVzIiwgInRvU3RyaW5nIiwgIm9iamVjdCIsICJrZXlzIiwgImNsb25lRWxlbWVudFdpdGhDc3MiLCAiZXVpU2NyZWVuUmVhZGVyT25seSIsICJldWlTY3JlZW5SZWFkZXJPbmx5U3R5bGVzIiwgIkV1aVNjcmVlblJlYWRlck9ubHkiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiRXVpU2NyZWVuUmVhZGVyTGl2ZSIsICJfcmVmIiwgInRvZ2dsZSIsICJQcm9wVHlwZXMiLCAiY2FuZGlkYXRlU2VsZWN0b3JzIiwgImNhbmRpZGF0ZVNlbGVjdG9yIiwgImpvaW4iLCAiTm9FbGVtZW50IiwgIkVsZW1lbnQiLCAibWF0Y2hlcyIsICJwcm90b3R5cGUiLCAibXNNYXRjaGVzU2VsZWN0b3IiLCAid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwgImdldFJvb3ROb2RlIiwgImVsZW1lbnQiLCAib3duZXJEb2N1bWVudCIsICJnZXRDYW5kaWRhdGVzIiwgImVsIiwgImluY2x1ZGVDb250YWluZXIiLCAiZmlsdGVyIiwgImNhbmRpZGF0ZXMiLCAiQXJyYXkiLCAic2xpY2UiLCAiYXBwbHkiLCAicXVlcnlTZWxlY3RvckFsbCIsICJjYWxsIiwgInVuc2hpZnQiLCAiZ2V0Q2FuZGlkYXRlc0l0ZXJhdGl2ZWx5IiwgImVsZW1lbnRzIiwgIm9wdGlvbnMiLCAiZWxlbWVudHNUb0NoZWNrIiwgImZyb20iLCAibGVuZ3RoIiwgInNoaWZ0IiwgInRhZ05hbWUiLCAiYXNzaWduZWQiLCAiYXNzaWduZWRFbGVtZW50cyIsICJjb250ZW50IiwgImNoaWxkcmVuIiwgIm5lc3RlZENhbmRpZGF0ZXMiLCAiZmxhdHRlbiIsICJwdXNoIiwgInNjb3BlIiwgInZhbGlkQ2FuZGlkYXRlIiwgImluY2x1ZGVzIiwgInNoYWRvd1Jvb3QiLCAiZ2V0U2hhZG93Um9vdCIsICJ2YWxpZFNoYWRvd1Jvb3QiLCAic2hhZG93Um9vdEZpbHRlciIsICJnZXRUYWJpbmRleCIsICJub2RlIiwgImlzU2NvcGUiLCAidGFiSW5kZXgiLCAidGVzdCIsICJpc0NvbnRlbnRFZGl0YWJsZSIsICJpc05hTiIsICJwYXJzZUludCIsICJnZXRBdHRyaWJ1dGUiLCAic29ydE9yZGVyZWRUYWJiYWJsZXMiLCAiYSIsICJiIiwgImRvY3VtZW50T3JkZXIiLCAiaXNJbnB1dCIsICJpc0hpZGRlbklucHV0IiwgInR5cGUiLCAiaXNEZXRhaWxzV2l0aFN1bW1hcnkiLCAiciIsICJzb21lIiwgImNoaWxkIiwgImdldENoZWNrZWRSYWRpbyIsICJub2RlcyIsICJmb3JtIiwgImkiLCAiY2hlY2tlZCIsICJpc1RhYmJhYmxlUmFkaW8iLCAibmFtZSIsICJyYWRpb1Njb3BlIiwgInF1ZXJ5UmFkaW9zIiwgInJhZGlvU2V0IiwgIndpbmRvdyIsICJDU1MiLCAiZXNjYXBlIiwgImVyciIsICJjb25zb2xlIiwgImVycm9yIiwgIm1lc3NhZ2UiLCAiaXNSYWRpbyIsICJpc05vblRhYmJhYmxlUmFkaW8iLCAiaXNaZXJvQXJlYSIsICJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImlzSGlkZGVuIiwgIl9yZWYiLCAiZGlzcGxheUNoZWNrIiwgImdldENvbXB1dGVkU3R5bGUiLCAidmlzaWJpbGl0eSIsICJpc0RpcmVjdFN1bW1hcnkiLCAibm9kZVVuZGVyRGV0YWlscyIsICJwYXJlbnRFbGVtZW50IiwgIm5vZGVSb290SG9zdCIsICJob3N0IiwgIm5vZGVJc0F0dGFjaGVkIiwgImNvbnRhaW5zIiwgIm9yaWdpbmFsTm9kZSIsICJyb290Tm9kZSIsICJhc3NpZ25lZFNsb3QiLCAiZ2V0Q2xpZW50UmVjdHMiLCAiaXNEaXNhYmxlZEZyb21GaWVsZHNldCIsICJwYXJlbnROb2RlIiwgImRpc2FibGVkIiwgIml0ZW0iLCAiaXNOb2RlTWF0Y2hpbmdTZWxlY3RvckZvY3VzYWJsZSIsICJpc05vZGVNYXRjaGluZ1NlbGVjdG9yVGFiYmFibGUiLCAiaXNWYWxpZFNoYWRvd1Jvb3RUYWJiYWJsZSIsICJzaGFkb3dIb3N0Tm9kZSIsICJzb3J0QnlPcmRlciIsICJyZWd1bGFyVGFiYmFibGVzIiwgIm9yZGVyZWRUYWJiYWJsZXMiLCAiZm9yRWFjaCIsICJjYW5kaWRhdGVUYWJpbmRleCIsICJzb3J0IiwgInJlZHVjZSIsICJhY2MiLCAic29ydGFibGUiLCAiY29uY2F0IiwgInRhYmJhYmxlIiwgImJpbmQiLCAiZm9jdXNhYmxlIiwgImtleXMiLCAic3RyaW5naWZ5IiwgImIiLCAibm9kZSIsICJpbXBvcnRfcmVhY3QiLCAicHJlZml4IiwgInVzZUdlbmVyYXRlZEh0bWxJZCIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX3R5cGVvZiIsICJvYmoiLCAiaXNPYmplY3QiLCAiaXNJbnZlcnNlQ29sb3JNb2RlIiwgImdldENvbG9yTW9kZSIsICJnZXRPbiIsICJub2RlIiwgInNldE9uIiwgIkNvbXB1dGVkIiwgImJhc2UiLCAiX3JlZiIsICJfcmVmMiIsICJnZXRDb21wdXRlZCIsICJvdmVyIiwgImJ1aWxkVGhlbWUiLCAiZ2V0UHJvdG90eXBlT2YiLCAicHJvdG90eXBlIiwgImtleSIsICJwcm9wZXJ0eSIsICJnZXQiLCAibWVyZ2VEZWVwIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiYiIsICJ4IiwgInJnYiIsICJiIiwgInJnYiIsICJtYXgiLCAiYiIsICJiIiwgInJvdW5kIiwgImIiLCAicm91bmQiLCAiY3NzIiwgInJnYiIsICJoc2wiLCAicmdiIiwgImIiLCAidiIsICJiIiwgImIiLCAicm91bmQiLCAiYiIsICJiIiwgIm1pbiIsICJiIiwgImZsb29yIiwgInYiLCAiYiIsICJtaW4iLCAibWF4IiwgInJnYjJoc2wiLCAiYiIsICJ2IiwgImIiLCAieCIsICJwb3ciLCAiYiIsICJ4IiwgImNvcyIsICJiIiwgInNxcnQiLCAicm91bmQiLCAiYiIsICJiIiwgIm51bSIsICJiIiwgImIiLCAicm91bmQiLCAicm5kIiwgInYiLCAiYiIsICJyb3VuZCIsICJyZ2IiLCAiYiIsICJwb3ciLCAiYiIsICJhYnMiLCAicG93IiwgInNpZ24iLCAiYiIsICJhYnMiLCAiYiIsICJiIiwgImxhYiIsICJwb3ciLCAidGVzdCIsICJyZ2IiLCAiYiIsICJ4IiwgInJnYiIsICJsY2giLCAic3FydCIsICJwb3ciLCAicG93IiwgInNxcnQiLCAiUEkiLCAiY29zIiwgInNpbiIsICJhdGFuMiIsICJjb2xvcnMiLCAiYiIsICJyZ2IiLCAicG93IiwgImNvbG9ycyIsICJ2IiwgImYiLCAiX3BvcyIsICJjb2xvcnMiLCAibGFiIiwgImIiLCAicG93IiwgInNpbiIsICJjb3MiLCAibGlnaHRuZXNzIiwgImIiLCAiZmxvb3IiLCAibG9nIiwgInBvdyIsICJmbG9vciIsICJhYnMiLCAibnVtIiwgIm1pbiIsICJtYXgiLCAiYiIsICJsaW1pdHMiLCAidiIsICJiIiwgInNxcnQiLCAicG93IiwgIm1pbiIsICJtYXgiLCAiYXRhbjIiLCAiYWJzIiwgImNvcyIsICJzaW4iLCAiUEkiLCAiYiIsICJiMiIsICJiIiwgImNvbG9ycyIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJmbGF0dGVuIiwgIl9yZWYiLCAiZXVpUGFsZXR0ZUNvbG9yQmxpbmQiLCAiX3JlZjIiLCAiY29sb3JzIiwgImJhc2UiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgImIiLCAiX2xvb3AiLCAiaSIsICJldWlQYWxldHRlQ29sb3JCbGluZEJlaGluZFRleHQiLCAiaW5PcmlnaW5hbEZvcm1hdCIsICJ0cmFuc3BhcmVudGl6ZSIsICJ0aW50IiwgInNoYWRlIiwgImxpZ2h0bmVzcyIsICJfdHlwZW9mIiwgIm9iaiIsICJtYWtlSGlnaENvbnRyYXN0Q29sb3IiLCAibGlnaHRuZXNzIiwgIm1ha2VEaXNhYmxlZENvbnRyYXN0Q29sb3IiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3JlZjUiLCAiY29sb3JzIiwgIl9yZWY2IiwgIl9yZWY3IiwgIl9yZWY4IiwgIl9yZWY5IiwgIl9yZWYxMCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAibG9naWNhbENTUyIsICJwcm9wZXJ0eSIsICJsb2dpY2FsU2l6ZUNTUyIsICJsb2dpY2FsVGV4dEFsaWduQ1NTIiwgIl90eXBlb2YiLCAib2JqIiwgInNpemVUb1BpeGVsIiwgImJhc2UiLCAiX3JlZiIsICJiYXNlIiwgImZvbnQiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfcmVmIiwgIl9yZWYyIiwgIl9yZWYzIiwgIl9yZWY0IiwgIl9yZWY1IiwgIl9yZWY2IiwgIl9yZWY3IiwgIl9yZWY4IiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfcmVmIiwgIl9yZWYyIiwgImJhc2UiLCAiaW1wb3J0X3JlYWN0IiwgIl9leHRlbmRzIiwgInVzZUV1aVRoZW1lIiwgIndpdGhFdWlUaGVtZSIsICJDb21wb25lbnQiLCAiUmVuZGVyIiwgImltcG9ydF9yZWFjdCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIkV1aVRoZW1lUHJvdmlkZXIiLCAiX3JlZiIsICJpc0VxdWFsIiwgInRocm90dGxlIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiQ3VycmVudEV1aUJyZWFrcG9pbnRQcm92aWRlciIsICJfcmVmIiwgInRocm90dGxlIiwgImltcG9ydF9yZWFjdCIsICJ1c2VDdXJyZW50RXVpQnJlYWtwb2ludCIsICJ1c2VJc1dpdGhpbkJyZWFrcG9pbnRzIiwgImZpbmRFbGVtZW50QnlTZWxlY3Rvck9yUmVmIiwgIm5vZGUiLCAiaXNVbmRlZmluZWQiLCAiaXNOdWxsIiwgImlzTmlsIiwgImlzRGF0ZSIsICJtb21lbnQiLCAiaXNGdW5jdGlvbiIsICJfaXNGdW5jdGlvbiIsICJpc0FycmF5IiwgIl9pc0FycmF5IiwgImlzU3RyaW5nIiwgIl9pc1N0cmluZyIsICJpc0Jvb2xlYW4iLCAiX2lzQm9vbGVhbiIsICJpc051bWJlciIsICJfaXNOdW1iZXIiLCAiaXNOYU4iLCAiX2lzTmFOIiwgImZvcm1hdEJvb2xlYW4iLCAiX3JlZiIsICJpbXBvcnRfbW9tZW50IiwgIl90eXBlb2YiLCAib2JqIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiY2FsZW5kYXIiLCAibW9tZW50IiwgIngiLCAiZm9ybWF0RGF0ZSIsICJpc1N0cmluZyIsICJpc0Z1bmN0aW9uIiwgImZvcm1hdE51bWJlciIsICJyb3VuZCIsICJpc1N0cmluZyIsICJudW1lcmFsIiwgImZvcm1hdFRleHQiLCAiZm9ybWF0QXV0byIsICJpc05hTiIsICJpc1N0cmluZyIsICJpc0RhdGUiLCAiaXNCb29sZWFuIiwgImlzTnVtYmVyIiwgImlzQXJyYXkiLCAiaXNEb21haW5TZWN1cmUiLCAiZ2V0U2VjdXJlUmVsRm9yVGFyZ2V0IiwgIl9yZWYiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9nZXQiLCAiZ2V0IiwgIm9iamVjdCIsICJfZ2V0IiwgInYxIiwgInJldmVyc2UiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiZ2V0QnVmZmVyVmFsdWVzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9yZWYiLCAicG9zaXRpb24iLCAiX3JlZjIiLCAiX3JlZjMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9yZWY0IiwgIl9yZWY1IiwgIm5vZGUiLCAiZ2V0VHJhbnNpdGlvblRpbWluZ3MiLCAiZ2V0V2FpdER1cmF0aW9uIiwgInBlcmZvcm1PbkZyYW1lIiwgIm9uRnJhbWUiLCAiaW1wb3J0X3JlYWN0IiwgInVzZUNvbWJpbmVkUmVmcyIsICJub2RlIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiUmVhY3QiLCAiX2V4dGVuZHMiLCAiRXVpSWNvbkFjY2Vzc2liaWxpdHkiLCAiX3JlZiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFnZ3JlZ2F0ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BbGVydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BbmFseXplRXZlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQW5hbHl6ZUV2ZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFubm90YXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBtVHJhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQWRkRGF0YSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBZHZhbmNlZFNldHRpbmdzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFnZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEFwbSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBBcHBTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQXVkaXRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENhbnZhcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDYXNlcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBDb2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcENvbnNvbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwQ3Jvc3NDbHVzdGVyUmVwbGljYXRpb24iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwRGFzaGJvYXJkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERldnRvb2xzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcERpc2NvdmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEVtcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBGaWxlYmVhdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBGbGVldCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBHaXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR3JhcGgiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwR3JvayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBIZWFydGJlYXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwSW5kZXhNYW5hZ2VtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcEluZGV4UGF0dGVybiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBJbmRleFJvbGx1cCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBMZW5zIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcExvZ3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWFuYWdlbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBNZXRyaWNiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcE1ldHJpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwTW9uaXRvcmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBOb3RlYm9vayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBQYWNrZXRiZWF0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFBpcGVsaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFJlY2VudGx5Vmlld2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFJlcG9ydGluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBTYXZlZE9iamVjdHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VhcmNoUHJvZmlsZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VjdXJpdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU2VjdXJpdHlBbmFseXRpY3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXBwU3BhY2VzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFNxbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBUaW1lbGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVcGdyYWRlQXNzaXN0YW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFVwdGltZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBVc2Vyc1JvbGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFZpc3VhbGl6ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBXYXRjaGVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFwcFdvcmtwbGFjZVNlYXJjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcHBzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93RW5kIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93U3RhcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXJyb3dEb3duIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25BcnJvd1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkFycm93VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQXN0ZXJpc2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmVha2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJlbGwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQmVsbFNsYXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJvbHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQm94ZXNIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJveGVzVmVydGljYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnJhbmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJyYW5jaFVzZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnJvb20iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnJ1c2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQnVnIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkJ1bGxzZXllIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNhbGVuZGFyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNoZWNrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNoZWNrSW5DaXJjbGVGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2hlZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2xvdWREcml6emxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb3VkU3Rvcm15IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNsb3VkU3VubnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ2x1c3RlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db2xvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db21wdXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnNvbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGFpbmVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvbnRpbnVpdHlBYm92ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5QWJvdmVCZWxvdyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250aW51aXR5QmVsb3ciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udGludWl0eVdpdGhpbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db250cm9sc0hvcml6b250YWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ29udHJvbHNWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Db3B5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkNvcHlDbGlwYm9hcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3NJbkFDaXJjbGVGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uQ3Jvc3NoYWlycyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DdXJyZW5jeSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25DdXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRGF0YWJhc2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRGVza3RvcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudEVkaXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG9jdW1lbnRhdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb2N1bWVudHMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRG90IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvdWJsZUFycm93TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Eb3VibGVBcnJvd1JpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkRvd25sb2FkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVIb3Jpem9udGFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckRpc3RyaWJ1dGVWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JJdGVtQWxpZ25Cb3R0b20iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduQ2VudGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnbkxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9ySXRlbUFsaWduTWlkZGxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnblJpZ2h0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0ZW1BbGlnblRvcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvbkJvdHRvbUxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Cb3R0b21SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JQb3NpdGlvblRvcExlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yUG9zaXRpb25Ub3BSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnbkNlbnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JBbGlnbkxlZnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQWxpZ25SaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JCb2xkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckNoZWNrbGlzdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JDb2RlQmxvY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yQ29tbWVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JIZWFkaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvckl0YWxpYyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JMaW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvck9yZGVyZWRMaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclJlZG8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRWRpdG9yU3RyaWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclRhYmxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVuZGVybGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FZGl0b3JVbmRvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVkaXRvclVub3JkZXJlZExpc3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW1haWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkVyYXNlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeGl0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4cGFuZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeHBhbmRNaW5pIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkV4cG9ydCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25FeWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRXllQ2xvc2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZhY2VIYXBweSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GYWNlTmV1dHJhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GYWNlU2FkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZpbHRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GbGFnIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyQ2hlY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRm9sZGVyQ2xvc2VkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGRlckV4Y2xhbWF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZvbGRlck9wZW4iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnJhbWVOZXh0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkZyYW1lUHJldmlvdXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnVsbFNjcmVlbkV4aXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uRnVsbFNjcmVlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25GdW5jdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HZWFyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkdsYXNzZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR2xvYmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uR3JhYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HcmFiSG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25HcmlkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkhlYXJ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkhlYXRtYXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSGVscCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ib21lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbklJbkNpcmNsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbWFnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbXBvcnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhDbG9zZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleEVkaXQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhGbHVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleE1hcHBpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW5kZXhPcGVuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluZGV4UnVudGltZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25JbmRleFNldHRpbmdzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbklucHV0T3V0cHV0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkluc3BlY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uSW52ZXJ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbklwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktleWJvYXJkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbEZpZWxkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbEZ1bmN0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbktxbE9wZXJhbmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsU2VsZWN0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3FsVmFsdWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3ViZXJuZXRlc05vZGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uS3ViZXJuZXRlc1BvZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MYXllcnMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGV0dGVyaW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpbmVEYXNoZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluZURvdHRlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaW5lU29saWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTGluayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25MaXN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxpc3RBZGQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9jayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2NrT3BlbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQWVyb3NwaWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BcGFjaGUiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQXBwU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Bd3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0F3c01vbm8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0F6dXJlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29BenVyZU1vbm8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0JlYXRzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29CdXNpbmVzc0FuYWx5dGljcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ2VwaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ2xvdWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Nsb3VkRWNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Db2RlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Db2Rlc2FuZGJveCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvQ291Y2hiYXNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Eb2NrZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0Ryb3B3aXphcmQiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRWxhc3RpYyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvRWxhc3RpY1N0YWNrIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FbGFzdGljc2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FbnRlcnByaXNlU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29FdGNkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29HY3AiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR2NwTW9ubyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR2l0aHViIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29HbWFpbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvR29sYW5nIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Hb29nbGVHIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0hhcHJveHkiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvSWJtIiwgIl9yZWYiLCAiZ2VuZXJhdGVJZCIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0libU1vbm8iLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0thZmthIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29LaWJhbmEiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0t1YmVybmV0ZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0xvZ2dpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb0xvZ3N0YXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29NYXBzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29NZW1jYWNoZWQiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTWV0cmljcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTW9uZ29kYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvTXlzcWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb05naW54IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29PYnNlcnZhYmlsaXR5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29Pc3F1ZXJ5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29QaHAiLCAiX3JlZiIsICJnZW5lcmF0ZUlkIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvUG9zdGdyZXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1Byb21ldGhldXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1JhYmJpdG1xIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ29SZWRpcyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvU2VjdXJpdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NpdGVTZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1NrZXRjaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvU2xhY2siLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nb1VwdGltZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvV2ViaG9vayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvV2luZG93cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dvV29ya3BsYWNlU2VhcmNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoRmlsdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbkxvZ3N0YXNoSWYiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTG9nc3Rhc2hJbnB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaE91dHB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Mb2dzdGFzaFF1ZXVlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25ldCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NYWduaWZ5V2l0aEV4Y2xhbWF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hZ25pZnlXaXRoTWludXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWFnbmlmeVdpdGhQbHVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1hcE1hcmtlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW1vcnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVudSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51RG93biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51TGVmdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NZW51UmlnaHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWVudVVwIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1lcmdlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbmltaXplIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbnVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1pbnVzSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWludXNJbkNpcmNsZUZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENsYXNzaWZpY2F0aW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1sQ3JlYXRlQWR2YW5jZWRKb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDcmVhdGVNdWx0aU1ldHJpY0pvYiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbENyZWF0ZVBvcHVsYXRpb25Kb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxDcmVhdGVTaW5nbGVNZXRyaWNKb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxEYXRhVmlzdWFsaXplciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25NbE91dGxpZXJEZXRlY3Rpb25Kb2IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTWxSZWdyZXNzaW9uSm9iIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk1vYmlsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Nb29uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvbk5hbWVzcGFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25OZXN0ZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uTm9kZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25OdW1iZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uT2ZmbGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25PbmxpbmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGFja2FnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYWdlU2VsZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhZ2VzU2VsZWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhaW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhcGVyQ2xpcCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QYXJ0aWFsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBhdXNlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBheW1lbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGVuY2lsIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBlcmNlbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGluIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBpbkZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbGF5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBsYXlGaWxsZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGx1cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QbHVzSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUGx1c0luQ2lyY2xlRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblBvcG91dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25QdXNoIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblF1ZXN0aW9uSW5DaXJjbGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUXVvdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uUmVmcmVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25SZXBvcnRlciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25SZXR1cm5LZXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2F2ZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TY2FsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWFyY2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2VjdXJpdHlTaWduYWwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2VjdXJpdHlTaWduYWxEZXRlY3RlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TZWN1cml0eVNpZ25hbFJlc29sdmVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNlc3Npb25WaWV3ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2hhcmQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU2hhcmUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU25vd2ZsYWtlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRMZWZ0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblNvcnRSaWdodCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0RG93biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Tb3J0VXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU29ydGFibGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhclBsdXNFbXB0eSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyUGx1c0ZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckVtcHR5U3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RhckZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdGFyRmlsbGVkU3BhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3Rhck1pbnVzRW1wdHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3Rhck1pbnVzRmlsbGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0YXRzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN0b3AiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcEZpbGxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdG9wU2xhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3RvcmFnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TdHJpbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uU3VibW9kdWxlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblN1biIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Td2F0Y2hJbnB1dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25TeW1saW5rIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlT2ZDb250ZW50cyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWJsZURlbnNpdHlDb21wYWN0IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eUV4cGFuZGVkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRhYmxlRGVuc2l0eU5vcm1hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UYWciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVGVhciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UZW1wZXJhdHVyZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lUmVmcmVzaCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lbGluZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaW1lc2xpZGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQWxpYXMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Bbm5vdGF0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQXJyYXkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5CaW5hcnkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Cb29sZWFuIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ2xhc3MiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Db21wbGV0aW9uU3VnZ2VzdGVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuQ29uc3RhbnQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5EYXRlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRGVuc2VWZWN0b3IiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FbGVtZW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRW51bSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkVudW1NZW1iZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5FdmVudCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkV4Y2VwdGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkZpZWxkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuRmlsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkZsYXR0ZW5lZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbkZ1bmN0aW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuR2VvIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSGlzdG9ncmFtIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuSVAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5JbnRlcmZhY2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Kb2luIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuS2V5IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuS2V5d29yZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk1ldGhvZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk1ldHJpY0NvdW50ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5NZXRyaWNHYXVnZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk1vZHVsZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk5hbWVzcGFjZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk5lc3RlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlbk51bGwiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5OdW1iZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5PYmplY3QiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5PcGVyYXRvciIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblBhY2thZ2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5QYXJhbWV0ZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5QZXJjb2xhdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUHJvcGVydHkiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5SYW5nZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblJhbmtGZWF0dXJlIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUmFua0ZlYXR1cmVzIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuUmVwbyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblNlYXJjaFR5cGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5TaGFwZSIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblN0cmluZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblN0cnVjdCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblN5bWJvbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblRhZyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Ub2tlblRleHQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVG9rZW5Ub2tlbkNvdW50IiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblRva2VuVmFyaWFibGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhaW5pbmciLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVHJhc2giLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVW5mb2xkIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVubGluayIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25Vc2VyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblVzZXJBdmF0YXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVXNlcnMiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmVjdG9yIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpZGVvUGxheWVyIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc0FyZWEiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQXJlYVN0YWNrZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzQmFySG9yaXpvbnRhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJIb3Jpem9udGFsU3RhY2tlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJWZXJ0aWNhbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNCYXJWZXJ0aWNhbFN0YWNrZWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzR2F1Z2UiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzR29hbCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNMaW5lIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc01hcENvb3JkaW5hdGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzTWFwUmVnaW9uIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc01ldHJpYyIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNQaWUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVGFibGUiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVGFnQ2xvdWQiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uVmlzVGV4dCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNUaW1lbGlvbiIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25WaXNWZWdhIiwgIl9yZWYiLCAiaWNvbiIsICJpY29uIiwgIlJlYWN0IiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpSWNvblZpc1Zpc3VhbEJ1aWxkZXIiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV29yZFdyYXAiLCAiX3JlZiIsICJpY29uIiwgImljb24iLCAiUmVhY3QiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlJY29uV29yZFdyYXBEaXNhYmxlZCIsICJfcmVmIiwgImljb24iLCAiaWNvbiIsICJSZWFjdCIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25XcmVuY2giLCAiX3JlZiIsICJpY29uIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiZXVpQmFja2dyb3VuZENvbG9yIiwgIl9yZWYiLCAiX3JlZjIiLCAidGludE9yU2hhZGUiLCAiY29sb3IiLCAidXNlRXVpQmFja2dyb3VuZENvbG9yIiwgIl9yZWYzIiwgInVzZUV1aUJhY2tncm91bmRDb2xvckNTUyIsICJldWlTY3JvbGxCYXJTdHlsZXMiLCAiX3JlZiIsICJjb2xvcnMiLCAic2l6ZSIsICJfcmVmMiIsICJldWlQYWRkaW5nU2l6ZSIsICJfcmVmIiwgInNpemUiLCAidXNlRXVpUGFkZGluZ1NpemUiLCAidXNlRXVpUGFkZGluZ0NTUyIsICJwcm9wZXJ0eSIsICJldWlGb2N1c1JpbmciLCAiZXVpRm9udFNpemUiLCAiX3JlZiIsICJldWlUZXh0QnJlYWtXb3JkIiwgIkV1aUdsb2JhbFN0eWxlcyIsICJfcmVmIiwgImJhc2UiLCAiY29sb3JzIiwgImZvbnQiLCAic3R5bGVzIiwgImljb25TaXplIiwgInNpemUiLCAiZXVpSWNvblN0eWxlcyIsICJfcmVmMyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgInNlbGYiLCAiX2dldFByb3RvdHlwZU9mIiwgImdldElzQXBwSWNvbiIsICJ4IiwgImljb24iLCAiRXVpSWNvbkNsYXNzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydHkiLCAiX3JlZiIsICJpY29uIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9vYmplY3RTcHJlYWQiLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiZm9jdXNhYmxlIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkV1aUNvbnRleHQiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAib2JqIiwgImlzQm9vbGVhbiIsICJpc1N0cmluZyIsICJpc051bWJlciIsICJpc1VuZGVmaW5lZCIsICJjaGFyIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAidG9rZW4iLCAicmVuZGVyIiwgIkNvbXBvbmVudCIsICJSZWFjdCIsICJ4IiwgIkV1aUkxOG4iLCAiX3JlZiIsICJfcmVmMiIsICJ1c2VMb2FkaW5nQXJpYUxhYmVsIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJzcGlubmVyQ29sb3JzQ1NTIiwgImJvcmRlciIsICJoaWdobGlnaHQiLCAiZXVpTG9hZGluZ1NwaW5uZXJTdHlsZXMiLCAiX3JlZiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUxvYWRpbmdTcGlubmVyIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUJ1dHRvbkNvbnRlbnREZXByZWNhdGVkIiwgIl9yZWYiLCAiaWNvblNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiVVJMIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJTSVpFUyIsICJFdWlCdXR0b24iLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiX3JlZjIiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlPYnNlcnZlciIsICJyZW5kZXIiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl90eXBlb2YiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpUmVzaXplT2JzZXJ2ZXIiLCAibWFrZVJlc2l6ZU9ic2VydmVyIiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9jb2xvckNTUyIsICJldWlMaW5rSG92ZXJDU1MiLCAiZXVpTGlua0ZvY3VzQ1NTIiwgImV1aUxpbmtDU1MiLCAiX3JlZiIsICJldWlMaW5rU3R5bGVzIiwgIl9yZWYyIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiZXVpVGl0bGUiLCAiX3JlZiIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlUaXRsZVN0eWxlcyIsICJldWlUZXh0IiwgImV1aVNjYWxlVGV4dCIsICJldWlUZXh0U3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVRleHRDb2xvclN0eWxlcyIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiQ09MT1JTIiwgIkV1aVRleHRDb2xvciIsICJfcmVmIiwgImNsb25lRWxlbWVudCIsICJpc05hbWVkQ29sb3IiLCAic3R5bGVzIiwgIkNvbXBvbmVudCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImV1aVRleHRBbGlnblN0eWxlcyIsICJfZXhjbHVkZWQiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGV4dEFsaWduIiwgIl9yZWYiLCAiY2xvbmVFbGVtZW50IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGV4dCIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJjb2xvclRvQ2xhc3NOYW1lTWFwIiwgIkNPTE9SUyIsICJzaXplVG9DbGFzc05hbWVNYXAiLCAiU0laRVMiLCAiRXVpQnV0dG9uRW1wdHkiLCAiX3JlZiIsICJpY29uU2l6ZSIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImNvbG9yVG9DbGFzc05hbWVNYXAiLCAiQ09MT1JTIiwgInNpemVUb0NsYXNzTmFtZU1hcCIsICJTSVpFUyIsICJFdWlCdXR0b25JY29uIiwgIl9yZWYiLCAiaWNvblNpemUiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiX3NsaWNlZFRvQXJyYXkiLCAiX2FycmF5V2l0aEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlUmVzdCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJub2RlIiwgIkV1aUlubmVyVGV4dCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiY2FuY2VsRnJhbWUiLCAiYW5pbWF0aW9uIiwgImNzcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlBdXRvU2l6ZXIiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgInBhcnNlQ29sb3IiLCAicmdiIiwgImNocm9tYVZhbGlkIiwgIl90eXBlb2YiLCAiX2V4Y2x1ZGVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJpY29uU2lkZVRvQ2xhc3NOYW1lTWFwIiwgIklDT05fU0lERVMiLCAiRXVpQmFkZ2UiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIkVsZW1lbnQiLCAiUHJvcFR5cGVzIiwgImlzTmFtZWRDb2xvciIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIl90eXBlb2YiLCAib2JqIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiRXVpUG9ydGFsIiwgInBvc2l0aW9uIiwgInJlbmRlciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlUb29sVGlwUG9wb3ZlciIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJkaXNwbGF5VG9DbGFzc05hbWVNYXAiLCAiRXVpVG9vbFRpcCIsICJwb3NpdGlvbiIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJhbmNob3IiLCAib25Gb2N1cyIsICJvbkJsdXIiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUljb25UaXAiLCAiX3JlZiIsICJzaXplIiwgInBvc2l0aW9uIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkNPTE9SUyIsICJTSVpFUyIsICJFdWlCZXRhQmFkZ2UiLCAiX3JlZiIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiaWNvbiIsICJFbGVtZW50IiwgIlByb3BUeXBlcyIsICJnZXRTaGFkb3dDb2xvciIsICJldWlTaGFkb3dYU21hbGwiLCAiX3JlZiIsICJfcmVmMiIsICJldWlTaGFkb3dTbWFsbCIsICJfcmVmMyIsICJfcmVmNCIsICJldWlTaGFkb3dNZWRpdW0iLCAiX3JlZjUiLCAiX3JlZjYiLCAicHJvcGVydHkiLCAidiIsICJldWlTaGFkb3dMYXJnZSIsICJfcmVmNyIsICJfcmVmOCIsICJldWlTaGFkb3dYTGFyZ2UiLCAiX3JlZjkiLCAiX3JlZjEwIiwgInJldmVyc2UiLCAiZXVpU2hhZG93RmxhdCIsICJldWlTaGFkb3ciLCAic2l6ZSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9yZWYiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiX29iamVjdFNwcmVhZCIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX19hc3NpZ24iLCAiZnJvbSIsICJSZWFjdCIsICJSZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAiX19hc3NpZ24iLCAiX19yZXN0IiwgImRlZmF1bHRzIiwgIm1pZGRsZXdhcmUiLCAieCIsICJjYnMiLCAiZmlsdGVyIiwgIl9fYXNzaWduIiwgIlJlYWN0IiwgIl9fcmVzdCIsICJfX2Fzc2lnbiIsICJTaWRlQ2FyIiwgIlJlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIlJlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkluRm9jdXNHdWFyZCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJfZXh0ZW5kczIiLCAiU2lkZUNhciIsICJfcmVmIiwgImNhcHR1cmVGb2N1c1Jlc3RvcmUiLCAib25Gb2N1cyIsICJvbkJsdXIiLCAiZXh0cmFjdFJlZiIsICJlZmZlY3RDYXIiLCAiU2lkZUNhciIsICJlZmZlY3RDYXIiLCAiUmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3NldFByb3RvdHlwZU9mIiwgInQiLCAiZSIsICJfc2V0UHJvdG90eXBlT2YiLCAiX3R5cGVvZiIsICJvIiwgIl90eXBlb2YiLCAiX3R5cGVvZiIsICJfZGVmaW5lUHJvcGVydHkiLCAiaW1wb3J0X3JlYWN0IiwgInJlZHVjZVByb3BzVG9TdGF0ZSIsICJoYW5kbGVTdGF0ZUNoYW5nZU9uQ2xpZW50IiwgIlNpZGVFZmZlY3QiLCAicGVlayIsICJyZW5kZXIiLCAiUmVhY3QiLCAiX2RlZmluZVByb3BlcnR5IiwgInRvQXJyYXkiLCAiYXNBcnJheSIsICJub2RlIiwgIngiLCAiYiIsICJub2RlIiwgInRvQXJyYXkiLCAidG9BcnJheSIsICJub2RlIiwgInRvQXJyYXkiLCAibm9kZSIsICJwb3NpdGlvbiIsICJub2RlIiwgImFzQXJyYXkiLCAidG9BcnJheSIsICJ0b0FycmF5IiwgIm5vZGUiLCAidG9BcnJheSIsICJub2RlIiwgIm5vZGUiLCAibm9kZSIsICJub2RlIiwgIm5vZGUiLCAiYXNBcnJheSIsICJub2RlIiwgImFzQXJyYXkiLCAibm9kZSIsICJmb2N1c2FibGUiLCAibGluZSIsICJmb2N1c2FibGUiLCAiYXNBcnJheSIsICJub2RlIiwgIm5leHQiLCAicHJldiIsICJmb2N1c09uQm9keSIsICJpc0ZyZWVGb2N1cyIsICJ0cnlSZXN0b3JlRm9jdXMiLCAiZGVmYXVsdFdoaXRlbGlzdCIsICJmb2N1c1doaXRlbGlzdGVkIiwgInJlY29yZFBvcnRhbCIsICJmb2N1c0lzUG9ydGFsZWRQYWlyIiwgImZvY3VzV2FzT3V0c2lkZSIsICJjaGVja0luSG9zdCIsICJ3aXRoaW5Ib3N0IiwgImdldE5vZGVGb2N1c2FibGVzIiwgImlzTm90Rm9jdXNhYmxlIiwgIm5vZGUiLCAiYWN0aXZhdGVUcmFwIiwgInNob3VsZEZvcmNlUmVzdG9yZUZvY3VzIiwgIl9yZWYiLCAiX3JlZjIiLCAiX3JlZjMiLCAiX3JlZjQiLCAib25UcmFwIiwgIm9uQmx1ciIsICJvbkZvY3VzIiwgIkZvY3VzV2F0Y2hlciIsICJGb2N1c1RyYXAiLCAiX3JlZjUiLCAiUHJvcFR5cGVzIiwgIm9uV2luZG93Rm9jdXMiLCAib25XaW5kb3dCbHVyIiwgImF0dGFjaEhhbmRsZXIiLCAiZGV0YWNoSGFuZGxlciIsICJfcmVmNiIsICJfcmVmNyIsICJSZWFjdCIsICJSZWFjdCIsICJSZWFjdCIsICJjc3MiLCAic3R5bGVzIiwgInN0eWxlcyIsICJwYXJzZSIsICJ4IiwgIm5vZGUiLCAic3R5bGVzIiwgInBvc2l0aW9uIiwgImV4dHJhY3RSZWYiLCAieCIsICJTdHlsZSIsICJub2RlIiwgInNpZGVjYXJfZGVmYXVsdCIsICJSZWFjdCIsICJub2RlIiwgIngiLCAiUmVhY3QiLCAiU3R5bGUiLCAiaW1wb3J0X3JlYWN0IiwgImV4dHJhY3RSZWYiLCAibm9kZSIsICJzaWRlY2FyX2RlZmF1bHQiLCAiZWZmZWN0Q2FyIiwgInNpZGVjYXJfZGVmYXVsdCIsICJGb2N1c09uIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpRm9jdXNUcmFwIiwgIm5vZGUiLCAicmVuZGVyIiwgIkZvY3VzT24iLCAiUHJvcFR5cGVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiX3R5cGVvZiIsICJvYmoiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlNdXRhdGlvbk9ic2VydmVyIiwgIm1ha2VNdXRhdGlvbk9ic2VydmVyIiwgIm5vZGUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aU91dHNpZGVDbGlja0RldGVjdG9yIiwgInJlbmRlciIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImV1aVBvcG92ZXJBcnJvd1N0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVBvcG92ZXJBcnJvdyIsICJfcmVmIiwgInBvc2l0aW9uIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJldWlQb3BvdmVyU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlQYW5lbFN0eWxlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYW5lbCIsICJfcmVmIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJldWlQb3BvdmVyUGFuZWxTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQb3BvdmVyUGFuZWwiLCAiX3JlZiIsICJwb3NpdGlvbiIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX3JlZiIsICJfcmVmMiIsICJfc2xpY2VkVG9BcnJheSIsICJfcmVmMyIsICJfcmVmNCIsICJfaW5oZXJpdHMiLCAiRXVpUG9wb3ZlciIsICJfY3JlYXRlU3VwZXIiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfcmVmNSIsICJkdXJhdGlvbk1hdGNoIiwgImRlbGF5TWF0Y2giLCAiX3JlZjYiLCAicG9zaXRpb24iLCAiX29iamVjdFNwcmVhZCIsICJub2RlIiwgIl9jcmVhdGVDbGFzcyIsICJyZW5kZXIiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJpbml0aWFsRm9jdXMiLCAiX2V4dGVuZHMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUaXRsZSIsICJfcmVmIiwgInNpemUiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9leGNsdWRlZCIsICJzdHlsZXMiLCAiY2xhc3NOYW1lcyIsICJfb2JqZWN0U3ByZWFkIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ2FyZFNlbGVjdCIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpQ2FyZCIsICJfcmVmIiwgImljb24iLCAib3V0ZXJPbkNsaWNrIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAibm9kZSIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJUWVBFUyIsICJFdWlDaGVja2JveCIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiaXNWYWxpZEVsZW1lbnQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRmxleEl0ZW0iLCAiX3JlZiIsICJDb21wb25lbnQiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJzaXplVG9DbGFzc05hbWVNYXAiLCAiU0laRVMiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRDbGVhckJ1dHRvbiIsICJfcmVmIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpRm9ybUNvbnRyb2xMYXlvdXRDdXN0b21JY29uIiwgIl9yZWYiLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJpY29uIiwgIl9pbmhlcml0cyIsICJFdWlGb3JtQ29udHJvbExheW91dEljb25zIiwgIl9jcmVhdGVTdXBlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtTGFiZWwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJFdWlGb3JtQ29udHJvbExheW91dCIsICJyZW5kZXIiLCAiaWNvbiIsICJhcHBlbmQiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJzdHJpbmciLCAibm9kZSIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIkV1aVZhbGlkYXRhYmxlQ29udHJvbCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJfcmVmIiwgImljb24iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlGaWVsZFNlYXJjaCIsICJvblNlYXJjaCIsICJvbkNoYW5nZSIsICJyZW5kZXIiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUZvcm1FcnJvclRleHQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlGb3JtSGVscFRleHQiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl90b0NvbnN1bWFibGVBcnJheSIsICJfYXJyYXlXaXRob3V0SG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheSIsICJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCAiX25vbkl0ZXJhYmxlU3ByZWFkIiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9leHRlbmRzIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJkaXNwbGF5VG9DbGFzc05hbWVNYXAiLCAiRElTUExBWVMiLCAiRXVpRm9ybVJvdyIsICJfcmVmIiwgInJlbmRlciIsICJfcmVmMiIsICJjbGFzc05hbWVzIiwgImhlbHBUZXh0IiwgImVycm9yIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgInNpemVUb0NsYXNzTmFtZU1hcCIsICJTSVpFUyIsICJFdWlDb250ZXh0TWVudUl0ZW0iLCAicmVuZGVyIiwgImljb24iLCAic2l6ZSIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiU0laRVMiLCAiRXVpQ29udGV4dE1lbnVQYW5lbCIsICJub2RlIiwgInJlbmRlciIsICJzaXplIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJldWlIb3Jpem9udGFsUnVsZVN0eWxlcyIsICJfcmVmIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUhvcml6b250YWxSdWxlIiwgIl9yZWYiLCAic2l6ZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU3dpdGNoIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJpc0VxdWFsIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImhhc05hdGl2ZVBlcmZvcm1hbmNlTm93IiwgInBlcmZvcm1hbmNlIiwgIm5vdyIsICJEYXRlIiwgImNhbmNlbFRpbWVvdXQiLCAidGltZW91dElEIiwgImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwgImlkIiwgInJlcXVlc3RUaW1lb3V0IiwgImNhbGxiYWNrIiwgImRlbGF5IiwgInN0YXJ0IiwgInRpY2siLCAiY2FsbCIsICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCAic2l6ZSIsICJnZXRTY3JvbGxiYXJTaXplIiwgInJlY2FsY3VsYXRlIiwgImRpdiIsICJkb2N1bWVudCIsICJjcmVhdGVFbGVtZW50IiwgInN0eWxlIiwgIndpZHRoIiwgImhlaWdodCIsICJvdmVyZmxvdyIsICJib2R5IiwgImFwcGVuZENoaWxkIiwgIm9mZnNldFdpZHRoIiwgImNsaWVudFdpZHRoIiwgInJlbW92ZUNoaWxkIiwgImNhY2hlZFJUTFJlc3VsdCIsICJnZXRSVExPZmZzZXRUeXBlIiwgIm91dGVyRGl2IiwgIm91dGVyU3R5bGUiLCAiZGlyZWN0aW9uIiwgImlubmVyRGl2IiwgImlubmVyU3R5bGUiLCAic2Nyb2xsTGVmdCIsICJkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQiLCAiZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQiLCAiZGV2V2FybmluZ3NUYWdOYW1lIiwgInByb2Nlc3MiLCAid2luZG93IiwgIldlYWtTZXQiLCAiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMIiwgImRlZmF1bHRJdGVtS2V5IiwgImluZGV4IiwgImRhdGEiLCAiZGV2V2FybmluZ3NEaXJlY3Rpb24iLCAiZGV2V2FybmluZ3NUYWdOYW1lIiwgInByb2Nlc3MiLCAid2luZG93IiwgIldlYWtTZXQiLCAiY3JlYXRlTGlzdENvbXBvbmVudCIsICJfcmVmIiwgImdldEl0ZW1PZmZzZXQiLCAiZ2V0RXN0aW1hdGVkVG90YWxTaXplIiwgImdldEl0ZW1TaXplIiwgImdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50IiwgImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCAiZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsICJpbml0SW5zdGFuY2VQcm9wcyIsICJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwgInZhbGlkYXRlUHJvcHMiLCAicHJvcHMiLCAiX2luc3RhbmNlUHJvcHMiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfb3V0ZXJSZWYiLCAiX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQiLCAic3RhdGUiLCAiaW5zdGFuY2UiLCAiaXNTY3JvbGxpbmciLCAic2Nyb2xsRGlyZWN0aW9uIiwgInNjcm9sbE9mZnNldCIsICJpbml0aWFsU2Nyb2xsT2Zmc2V0IiwgInNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsICJfY2FsbE9uSXRlbXNSZW5kZXJlZCIsICJtZW1vaXplT25lIiwgIm92ZXJzY2FuU3RhcnRJbmRleCIsICJvdmVyc2NhblN0b3BJbmRleCIsICJ2aXNpYmxlU3RhcnRJbmRleCIsICJ2aXNpYmxlU3RvcEluZGV4IiwgIm9uSXRlbXNSZW5kZXJlZCIsICJfY2FsbE9uU2Nyb2xsIiwgIm9uU2Nyb2xsIiwgIl9nZXRJdGVtU3R5bGUiLCAiZGlyZWN0aW9uIiwgIml0ZW1TaXplIiwgImxheW91dCIsICJpdGVtU3R5bGVDYWNoZSIsICJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCAic3R5bGUiLCAiaGFzT3duUHJvcGVydHkiLCAib2Zmc2V0IiwgInNpemUiLCAiaXNIb3Jpem9udGFsIiwgImlzUnRsIiwgIm9mZnNldEhvcml6b250YWwiLCAicG9zaXRpb24iLCAibGVmdCIsICJ1bmRlZmluZWQiLCAicmlnaHQiLCAidG9wIiwgImhlaWdodCIsICJ3aWR0aCIsICJfIiwgIl9fIiwgIl9fXyIsICJfb25TY3JvbGxIb3Jpem9udGFsIiwgImV2ZW50IiwgImN1cnJlbnRUYXJnZXQiLCAiY2xpZW50V2lkdGgiLCAic2Nyb2xsTGVmdCIsICJzY3JvbGxXaWR0aCIsICJzZXRTdGF0ZSIsICJwcmV2U3RhdGUiLCAiZ2V0UlRMT2Zmc2V0VHlwZSIsICJNYXRoIiwgIm1heCIsICJtaW4iLCAiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCAiX29uU2Nyb2xsVmVydGljYWwiLCAiY2xpZW50SGVpZ2h0IiwgInNjcm9sbEhlaWdodCIsICJzY3JvbGxUb3AiLCAiX291dGVyUmVmU2V0dGVyIiwgInJlZiIsICJvdXRlclJlZiIsICJjdXJyZW50IiwgImNhbmNlbFRpbWVvdXQiLCAicmVxdWVzdFRpbWVvdXQiLCAiX3Jlc2V0SXNTY3JvbGxpbmciLCAiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwgIm5leHRQcm9wcyIsICJ2YWxpZGF0ZVNoYXJlZFByb3BzIiwgInNjcm9sbFRvIiwgInNjcm9sbFRvSXRlbSIsICJhbGlnbiIsICJpdGVtQ291bnQiLCAic2Nyb2xsYmFyU2l6ZSIsICJnZXRTY3JvbGxiYXJTaXplIiwgImNvbXBvbmVudERpZE1vdW50IiwgIl9jYWxsUHJvcHNDYWxsYmFja3MiLCAiY29tcG9uZW50RGlkVXBkYXRlIiwgImNvbXBvbmVudFdpbGxVbm1vdW50IiwgInJlbmRlciIsICJjaGlsZHJlbiIsICJjbGFzc05hbWUiLCAiaW5uZXJSZWYiLCAiaW5uZXJFbGVtZW50VHlwZSIsICJpbm5lclRhZ05hbWUiLCAiaXRlbURhdGEiLCAiaXRlbUtleSIsICJvdXRlckVsZW1lbnRUeXBlIiwgIm91dGVyVGFnTmFtZSIsICJ1c2VJc1Njcm9sbGluZyIsICJfZ2V0UmFuZ2VUb1JlbmRlciIsICJzdGFydEluZGV4IiwgInN0b3BJbmRleCIsICJpdGVtcyIsICJwdXNoIiwgImNyZWF0ZUVsZW1lbnQiLCAia2V5IiwgImVzdGltYXRlZFRvdGFsU2l6ZSIsICJvdmVyZmxvdyIsICJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsICJ3aWxsQ2hhbmdlIiwgInBvaW50ZXJFdmVudHMiLCAib3ZlcnNjYW5Db3VudCIsICJvdmVyc2NhbkJhY2t3YXJkIiwgIm92ZXJzY2FuRm9yd2FyZCIsICJQdXJlQ29tcG9uZW50IiwgImRlZmF1bHRQcm9wcyIsICJfcmVmMiIsICJfcmVmMyIsICJoYXMiLCAiYWRkIiwgImNvbnNvbGUiLCAid2FybiIsICJFcnJvciIsICJGaXhlZFNpemVMaXN0IiwgImNyZWF0ZUxpc3RDb21wb25lbnQiLCAiZ2V0SXRlbU9mZnNldCIsICJfcmVmIiwgImluZGV4IiwgIml0ZW1TaXplIiwgImdldEl0ZW1TaXplIiwgIl9yZWYyIiwgImdldEVzdGltYXRlZFRvdGFsU2l6ZSIsICJfcmVmMyIsICJpdGVtQ291bnQiLCAiZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQiLCAiX3JlZjQiLCAiYWxpZ24iLCAic2Nyb2xsT2Zmc2V0IiwgImluc3RhbmNlUHJvcHMiLCAic2Nyb2xsYmFyU2l6ZSIsICJkaXJlY3Rpb24iLCAiaGVpZ2h0IiwgImxheW91dCIsICJ3aWR0aCIsICJpc0hvcml6b250YWwiLCAic2l6ZSIsICJsYXN0SXRlbU9mZnNldCIsICJNYXRoIiwgIm1heCIsICJtYXhPZmZzZXQiLCAibWluIiwgIm1pbk9mZnNldCIsICJtaWRkbGVPZmZzZXQiLCAicm91bmQiLCAiY2VpbCIsICJmbG9vciIsICJnZXRTdGFydEluZGV4Rm9yT2Zmc2V0IiwgIl9yZWY1IiwgIm9mZnNldCIsICJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwgIl9yZWY2IiwgInN0YXJ0SW5kZXgiLCAibnVtVmlzaWJsZUl0ZW1zIiwgImluaXRJbnN0YW5jZVByb3BzIiwgInByb3BzIiwgInNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UiLCAidmFsaWRhdGVQcm9wcyIsICJfcmVmNyIsICJwcm9jZXNzIiwgIkVycm9yIiwgInNoYWxsb3dEaWZmZXJzIiwgInByZXYiLCAibmV4dCIsICJhdHRyaWJ1dGUiLCAiYXJlRXF1YWwiLCAicHJldlByb3BzIiwgIm5leHRQcm9wcyIsICJwcmV2U3R5bGUiLCAic3R5bGUiLCAicHJldlJlc3QiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2V4Y2x1ZGVkIiwgIm5leHRTdHlsZSIsICJuZXh0UmVzdCIsICJfZXhjbHVkZWQyIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3RfZG9tIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlPdmVybGF5TWFzayIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAibGlzdGVuZXIiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJfcmVmIiwgImV1aVNwYWNlclN0eWxlcyIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlTcGFjZXIiLCAiX3JlZiIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAic3R5bGVzIiwgImNsYXNzTmFtZXMiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiZXVpTWFya1N0eWxlcyIsICJfcmVmIiwgIl9yZWYyIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpTWFyayIsICJfcmVmIiwgInVzZVRoZW1lIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgImhpZ2hsaWdodCIsICJtYXRjaCIsICJnZXRIaWdodGxpZ2h0V29yZHMiLCAibWF0Y2hlcyIsICJmaWxsSW5DaHVua3MiLCAiYXBwZW5kIiwgIkV1aUhpZ2hsaWdodCIsICJfcmVmIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiRXVpQ29tYm9Cb3hUaXRsZSIsICJfcmVmIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfZGVmaW5lUHJvcGVydGllcyIsICJfY3JlYXRlQ2xhc3MiLCAiX2luaGVyaXRzIiwgIl9zZXRQcm90b3R5cGVPZiIsICJvIiwgInAiLCAiX2NyZWF0ZVN1cGVyIiwgIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCAiX2dldFByb3RvdHlwZU9mIiwgIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwgInNlbGYiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJfZGVmaW5lUHJvcGVydHkiLCAicmVzb2x2ZUljb25BbmRDb2xvciIsICJFdWlGaWx0ZXJTZWxlY3RJdGVtIiwgInJlbmRlciIsICJjbGFzc05hbWVzIiwgImljb24iLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aUNvbWJvQm94T3B0aW9uc0xpc3QiLCAiX3JlZiIsICJyZW5kZXIiLCAiZ2V0U2VsZWN0ZWRPcHRpb25Gb3JTZWFyY2hWYWx1ZSIsICJwb3NpdGlvbiIsICJkZWxpbWl0ZXIiLCAiaGlnaGxpZ2h0U2VhcmNoVmFsdWUiLCAic2VhcmNoVmFsdWUiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiZmxhdHRlbk9wdGlvbkdyb3VwcyIsICJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIiwgImNvbGxlY3RNYXRjaGluZ09wdGlvbiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAib2JqZWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aUNvbWJvQm94UGlsbCIsICJyZW5kZXIiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aUNvbWJvQm94SW5wdXQiLCAicmVuZGVyIiwgImFwcGVuZCIsICJvbkNsaWNrIiwgImljb24iLCAiY2xhc3NOYW1lcyIsICJBdXRvc2l6ZUlucHV0IiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIm93bktleXMiLCAib2JqZWN0IiwgImtleXMiLCAiX29iamVjdFNwcmVhZCIsICJfZGVmaW5lUHJvcGVydHkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aUNvbWJvQm94IiwgIl9yZWYiLCAicG9zaXRpb24iLCAiX3JlZjIiLCAiX3JlZjMiLCAiZGVsaW1pdGVyIiwgInJlbmRlciIsICJvbkJsdXIiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYWdpbmF0aW9uQnV0dG9uIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leHRlbmRzIiwgIlRZUEVTIiwgIkV1aVBhZ2luYXRpb25CdXR0b25BcnJvdyIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlQYWdpbmF0aW9uIiwgIl9yZWYiLCAic2FmZUNsaWNrIiwgImNsYXNzTmFtZXMiLCAiYWNjZXNzaWJsZVBhZ2VTdHJpbmciLCAiUHJvcFR5cGVzIiwgIlBhZ2luYXRpb25CdXR0b25XcmFwcGVyIiwgIl9yZWYyIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfc2xpY2VkVG9BcnJheSIsICJfYXJyYXlXaXRoSG9sZXMiLCAiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVSZXN0IiwgIl9hcnJheUxpa2VUb0FycmF5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVBhZ2luYXRpb24iLCAiX3JlZiIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFiIiwgIl9yZWYiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgInNpemVUb0NsYXNzTmFtZU1hcCIsICJTSVpFUyIsICJfcmVmIiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9pbmhlcml0cyIsICJFdWlUYWJiZWRDb250ZW50IiwgIl9jcmVhdGVTdXBlciIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnR5IiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2NyZWF0ZUNsYXNzIiwgInJlbmRlciIsICJzaXplIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX3JlZiIsICJfZXh0ZW5kcyIsICJfZXhjbHVkZWQyIiwgIl9vYmplY3RTcHJlYWQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkV1aURlbGF5UmVuZGVyIiwgIl9yZWYiLCAicmVuZGVyIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiX0VNT1RJT05fU1RSSU5HSUZJRURfQ1NTX0VSUk9SX18iLCAiX3JlZiIsICJfcmVmMiIsICJldWlIZWFsdGhTdHlsZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlIZWFsdGgiLCAiX3JlZiIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX2V4Y2x1ZGVkIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIl9leHRlbmRzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9FTU9USU9OX1NUUklOR0lGSUVEX0NTU19FUlJPUl9fIiwgIl9yZWYiLCAiZXVpSW1hZ2VXcmFwcGVyU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfRU1PVElPTl9TVFJJTkdJRklFRF9DU1NfRVJST1JfXyIsICJldWlJbWFnZUJ1dHRvblN0eWxlcyIsICJfcmVmIiwgImV1aUltYWdlQnV0dG9uSWNvblN0eWxlcyIsICJfcmVmMiIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUltYWdlQnV0dG9uIiwgIl9yZWYiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJldWlJbWFnZUNhcHRpb25TdHlsZXMiLCAiX3JlZiIsICJzdHlsZXMiLCAiUHJvcFR5cGVzIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiRXVpSW1hZ2VXcmFwcGVyIiwgIl9yZWYiLCAib3BlbkZ1bGxTY3JlZW4iLCAiY2xhc3NOYW1lcyIsICJzdHlsZXMiLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgImV1aUltYWdlU3R5bGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfdGVtcGxhdGVPYmplY3QiLCAiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsICJldWlJbWFnZUZ1bGxzY3JlZW5XcmFwcGVyU3R5bGVzIiwgImV1aUltYWdlRnVsbFNjcmVlbiIsICJzaXplIiwgIl9leHRlbmRzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiRXVpSW1hZ2VGdWxsU2NyZWVuV3JhcHBlciIsICJfcmVmIiwgInN0eWxlcyIsICJjbGFzc05hbWVzIiwgIm9uS2V5RG93biIsICJjbG9zZUZ1bGxTY3JlZW4iLCAiUmVhY3QiLCAiUHJvcFR5cGVzIiwgIlNJWkVTIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aUltYWdlIiwgIl9yZWYiLCAic2l6ZSIsICJTSVpFUyIsICJjbGFzc05hbWVzIiwgInN0eWxlcyIsICJSZWFjdCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJFdWlVdGlsaXR5Q2xhc3NlcyIsICJpbXBvcnRfcmVhY3QiLCAiRXVpQ2FjaGVQcm92aWRlciIsICJfcmVmIiwgIlJlYWN0IiwgImlzRW1vdGlvbkNhY2hlT2JqZWN0IiwgIkV1aVByb3ZpZGVyIiwgIl9yZWYiLCAiUmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX3RvQ29uc3VtYWJsZUFycmF5IiwgIl9hcnJheVdpdGhvdXRIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5IiwgIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsICJfbm9uSXRlcmFibGVTcHJlYWQiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJ4IiwgImRpc3BsYXlUb0NsYXNzTmFtZU1hcCIsICJFdWlUcmVlVmlldyIsICJfcmVmIiwgIl9yZWYyIiwgIm5vZGUiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUmVhY3QiLCAicmVmIiwgIl9yZWYzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9jbGFzc25hbWVzIiwgImdldFNlYXJjaGFibGVMYWJlbCIsICJnZXRTZWxlY3RlZE9wdGlvbkZvclNlYXJjaFZhbHVlIiwgImNvbGxlY3RNYXRjaGluZ09wdGlvbiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlTZWxlY3RhYmxlU2VhcmNoIiwgIl9yZWYiLCAiZ2V0TWF0Y2hpbmdPcHRpb25zIiwgImNsYXNzTmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpU2VsZWN0YWJsZU1lc3NhZ2UiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXhjbHVkZWQyIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgInJlc29sdmVJY29uQW5kQ29sb3IiLCAicGFkZGluZ1NpemVUb0NsYXNzTmFtZU1hcCIsICJQQURESU5HX1NJWkVTIiwgIkV1aVNlbGVjdGFibGVMaXN0SXRlbSIsICJyZW5kZXIiLCAiYXBwZW5kIiwgImNsYXNzTmFtZXMiLCAiaWNvbiIsICJQcm9wVHlwZXMiLCAiX3R5cGVvZiIsICJvYmoiLCAiX2V4Y2x1ZGVkIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiRXVpU2VsZWN0YWJsZUxpc3QiLCAiX3JlZiIsICJhcHBlbmQiLCAib3B0aW9uIiwgIl9yZWYyIiwgInJlbmRlciIsICJjbGFzc05hbWVzIiwgIl9yZWYzIiwgIlJlYWN0IiwgIlByb3BUeXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfZXhjbHVkZWQzIiwgIl9zbGljZWRUb0FycmF5IiwgIl9hcnJheVdpdGhIb2xlcyIsICJfaXRlcmFibGVUb0FycmF5TGltaXQiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVJlc3QiLCAiX2FycmF5TGlrZVRvQXJyYXkiLCAiX2V4dGVuZHMiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIkV1aVNlbGVjdGFibGUiLCAiX3JlZiIsICJnZXRNYXRjaGluZ09wdGlvbnMiLCAiaW5pdGlhbFNlYXJjaFZhbHVlIiwgInJlbmRlciIsICJfcmVmMiIsICJfcmVmMyIsICJjbGFzc05hbWVzIiwgIlJlYWN0IiwgImdldEFjY2Vzc2libGVOYW1lIiwgImlucHV0UmVmIiwgIm5vZGUiLCAiX2RlZmF1bHQiLCAiX3JlZjQiLCAicmVzdWx0c0xlbmd0aCIsICJfcmVmNSIsICJfcmVmNiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGUiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiX2V4Y2x1ZGVkIiwgIl9leHRlbmRzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZUJvZHkiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVGb290ZXIiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJyZXNvbHZlV2lkdGhBc1N0eWxlIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVGb290ZXJDZWxsIiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVIZWFkZXIiLCAiX3JlZiIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiQ2VsbENvbnRlbnRzIiwgIl9yZWYiLCAiRXVpVGFibGVIZWFkZXJDZWxsIiwgIl9yZWYyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlSGVhZGVyQ2VsbENoZWNrYm94IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVIZWFkZXJNb2JpbGUiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgIlByb3BUeXBlcyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3Byb3BfdHlwZXMiLCAiaW1wb3J0X2NsYXNzbmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiRXVpVGFibGVTb3J0TW9iaWxlSXRlbSIsICJfcmVmIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgIl90eXBlb2YiLCAib2JqIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAiX2NsYXNzQ2FsbENoZWNrIiwgIl9kZWZpbmVQcm9wZXJ0aWVzIiwgIl9jcmVhdGVDbGFzcyIsICJfaW5oZXJpdHMiLCAiX3NldFByb3RvdHlwZU9mIiwgIm8iLCAicCIsICJfY3JlYXRlU3VwZXIiLCAiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsICJfZ2V0UHJvdG90eXBlT2YiLCAiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCAic2VsZiIsICJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJFdWlUYWJsZVNvcnRNb2JpbGUiLCAicmVuZGVyIiwgImNsYXNzTmFtZXMiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUm93IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJvbktleURvd24iLCAib25LZXlVcCIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgIl9leGNsdWRlZCIsICJfZXh0ZW5kcyIsICJvd25LZXlzIiwgIm9iamVjdCIsICJrZXlzIiwgIl9vYmplY3RTcHJlYWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJFdWlUYWJsZVJvd0NlbGwiLCAiX3JlZiIsICJjbGFzc05hbWVzIiwgImNoaWxkcmVuIiwgIlJlYWN0IiwgIkVsZW1lbnQiLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJfZXhjbHVkZWQiLCAiX2V4dGVuZHMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwgIkV1aVRhYmxlUm93Q2VsbENoZWNrYm94IiwgIl9yZWYiLCAiY2xhc3NOYW1lcyIsICJQcm9wVHlwZXMiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9wcm9wX3R5cGVzIiwgImltcG9ydF9jbGFzc25hbWVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkNvbGxhcHNlZEl0ZW1BY3Rpb25zIiwgInJlbmRlciIsICJvbkZvY3VzIiwgImNvbnRyb2xzIiwgImljb24iLCAiaXNTdHJpbmciLCAiUHJvcFR5cGVzIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfY2xhc3NuYW1lcyIsICJpbXBvcnRfcmVhY3QiLCAiRGVmYXVsdEl0ZW1BY3Rpb24iLCAiX3JlZiIsICJpc1N0cmluZyIsICJpY29uIiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcHJvcF90eXBlcyIsICJfdHlwZW9mIiwgIm9iaiIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgIkN1c3RvbUl0ZW1BY3Rpb24iLCAicmVuZGVyIiwgIlByb3BUeXBlcyIsICJpc0N1c3RvbUl0ZW1BY3Rpb24iLCAiRXhwYW5kZWRJdGVtQWN0aW9ucyIsICJfcmVmIiwgIlJlYWN0IiwgImNsYXNzTmFtZXMiLCAiaW1wb3J0X3JlYWN0IiwgImRlZmF1bHRzIiwgIlBhZ2luYXRpb25CYXIiLCAiX3JlZiIsICJfdHlwZW9mIiwgIm9iaiIsICJfZXhjbHVkZWQiLCAiX2V4Y2x1ZGVkMiIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiX2FycmF5V2l0aG91dEhvbGVzIiwgIl9pdGVyYWJsZVRvQXJyYXkiLCAiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwgIl9ub25JdGVyYWJsZVNwcmVhZCIsICJfYXJyYXlMaWtlVG9BcnJheSIsICJfZXh0ZW5kcyIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCAiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCAib3duS2V5cyIsICJvYmplY3QiLCAia2V5cyIsICJfb2JqZWN0U3ByZWFkIiwgIl9kZWZpbmVQcm9wZXJ0eSIsICJfY2xhc3NDYWxsQ2hlY2siLCAiX2RlZmluZVByb3BlcnRpZXMiLCAiX2NyZWF0ZUNsYXNzIiwgIl9pbmhlcml0cyIsICJfc2V0UHJvdG90eXBlT2YiLCAibyIsICJwIiwgIl9jcmVhdGVTdXBlciIsICJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwgIl9nZXRQcm90b3R5cGVPZiIsICJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsICJzZWxmIiwgIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCAicmVuZGVyIiwgImlzRnVuY3Rpb24iLCAiY29sdW1uIiwgIl9yZWYiLCAiX3JlZjIiLCAieCIsICJFdWlCYXNpY1RhYmxlIiwgImxpc3RlbmVyIiwgIm9uQ2hhbmdlIiwgIl9yZWYzIiwgIl9yZWY0IiwgInNpemUiLCAiY2xhc3NOYW1lcyIsICJfcmVmNSIsICJfcmVmNiIsICJfcmVmNyIsICJudW0iLCAic2VsZWN0aW9uIiwgImFjdGlvbkVuYWJsZWQiLCAiaXRlbSIsICJfcmVmOCIsICJQcm9wVHlwZXMiLCAiU3Vic2NyaWJhYmxlIiwgIngiLCAibm9vcCIsICJhc0FycmF5IiwgImlzUGxhaW5PYmplY3QiLCAiYiIsICJjb3B5IiwgIkZvY3VzTWFuYWdlciIsICJvbkZvY3VzIiwgImxpc3RlbmVyIiwgIk9ubGluZU1hbmFnZXIiLCAibGlzdGVuZXIiLCAiQ2FuY2VsbGVkRXJyb3IiLCAiUmV0cnllciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJwYXVzZSIsICJydW4iLCAiY2FuY2VsRm4iLCAiTm90aWZ5TWFuYWdlciIsICJRdWVyeSIsICJub29wIiwgImlzU3RhbGUiLCAib25Gb2N1cyIsICJ4IiwgImZldGNoIiwgImdldCIsICJmZXRjaEZuIiwgImdldERlZmF1bHRTdGF0ZSIsICJyZWR1Y2VyIiwgIlF1ZXJ5Q2FjaGUiLCAieCIsICJnZXQiLCAib25Gb2N1cyIsICJNdXRhdGlvbiIsICJ4IiwgIm5vb3AiLCAiTXV0YXRpb25DYWNoZSIsICJ4IiwgIm9uRm9jdXMiLCAibm9vcCIsICJidWlsZE5ld1BhZ2VzIiwgInBhcmFtIiwgImZldGNoUGFnZSIsICJtYW51YWwiLCAicHJvbWlzZSIsICJfbG9vcCIsICJpIiwgIlF1ZXJ5Q2xpZW50IiwgIl9yZWYiLCAiX3JlZjIiLCAibm9vcCIsICJfcmVmMyIsICJ4IiwgIlF1ZXJ5T2JzZXJ2ZXIiLCAidHJhY2tQcm9wIiwgImdldCIsICJmZXRjaCIsICJub29wIiwgIngiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsICJSZWFjdERPTSIsICJ1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyIsICJsb2dnZXIiLCAibG9nZ2VyIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJ1c2VRdWVyeUNsaWVudCIsICJRdWVyeUNsaWVudFByb3ZpZGVyIiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgInVzZVF1ZXJ5RXJyb3JSZXNldEJvdW5kYXJ5IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJ4IiwgIl9yZWYiLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgInZpc0NvbG9ycyIsICJzZWFyY2hWYWx1ZSIsICJwcmVmaXgiLCAiUmVhY3QiLCAieCIsICJvcHRpb25zIiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiUmVhY3QiLCAibiIsICJtYXRjaCIsICJiIiwgIm4yIiwgImltcG9ydF9yZWFjdF9kb20iLCAiZW50aXR5IiwgIlJlYWN0IiwgImtleXMiLCAicHJvcGVydHkiLCAiZG9tYWlucyIsICJyYW5nZXMiLCAiaXJpIiwgInYiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0IiwgInJlcXVpcmVfb2JqZWN0X2Fzc2lnbiIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdldE93blByb3BlcnR5U3ltYm9scyIsICJoYXNPd25Qcm9wZXJ0eSIsICJwcm9wSXNFbnVtZXJhYmxlIiwgInRvT2JqZWN0IiwgInZhbCIsICJzaG91bGRVc2VOYXRpdmUiLCAidGVzdDEiLCAidGVzdDIiLCAiaSIsICJvcmRlcjIiLCAibiIsICJ0ZXN0MyIsICJsZXR0ZXIiLCAidGFyZ2V0IiwgInNvdXJjZSIsICJmcm9tIiwgInRvIiwgInN5bWJvbHMiLCAicyIsICJrZXkiLCAicmVxdWlyZV9yZWFjdF9wcm9kdWN0aW9uX21pbiIsICJsIiwgInAiLCAicSIsICJyIiwgInQiLCAidSIsICJ2IiwgInciLCAieCIsICJ5IiwgImEiLCAieiIsICJiIiwgImMiLCAiQSIsICJCIiwgIkMiLCAiRCIsICJFIiwgIkYiLCAiRyIsICJIIiwgIkkiLCAiSiIsICJlIiwgImQiLCAiayIsICJoIiwgImciLCAiZiIsICJtIiwgIksiLCAiTCIsICJlc2NhcGUiLCAiTSIsICJOIiwgIk8iLCAiUCIsICJRIiwgIlIiLCAiUyIsICJUIiwgInJlcXVpcmVfcmVhY3QiLCAicmVxdWlyZV9zY2hlZHVsZXJfcHJvZHVjdGlvbl9taW4iLCAiVSIsICJWIiwgIlciLCAicmVxdWlyZV9zY2hlZHVsZXIiLCAicmVxdWlyZV9yZWFjdF9kb21fcHJvZHVjdGlvbl9taW4iLCAiYWEiLCAiYmEiLCAiY2EiLCAiZGEiLCAiZWEiLCAiZmEiLCAiaGEiLCAiaWEiLCAiamEiLCAia2EiLCAibGEiLCAibWEiLCAibmEiLCAib2EiLCAicGEiLCAicWEiLCAicmEiLCAic2EiLCAidGEiLCAidWEiLCAid2EiLCAieGEiLCAieWEiLCAiemEiLCAiQWEiLCAiQmEiLCAiQ2EiLCAiRGEiLCAiRWEiLCAiRmEiLCAiR2EiLCAiSGEiLCAiSWEiLCAiSmEiLCAiS2EiLCAiTGEiLCAiTWEiLCAiTmEiLCAiT2EiLCAiUGEiLCAiUWEiLCAiUmEiLCAiU2EiLCAiVGEiLCAiVWEiLCAiVmEiLCAiV2EiLCAiWGEiLCAiWWEiLCAiWmEiLCAiJGEiLCAiYWIiLCAiYmIiLCAiY2IiLCAiZGIiLCAiZWIiLCAiZmIiLCAiZ2IiLCAiaGIiLCAiaWIiLCAiamIiLCAia2IiLCAibGIiLCAibWIiLCAibmIiLCAib2IiLCAicGIiLCAicWIiLCAicmIiLCAic2IiLCAidGIiLCAidWIiLCAidmIiLCAid2IiLCAieGIiLCAieWIiLCAiemIiLCAiQWIiLCAiQmIiLCAiQ2IiLCAiRGIiLCAiRWIiLCAiRmIiLCAiR2IiLCAiSGIiLCAiSWIiLCAiSmIiLCAiS2IiLCAiTGIiLCAiTWIiLCAiTmIiLCAiT2IiLCAiUGIiLCAiUWIiLCAiUmIiLCAiU2IiLCAiVGIiLCAiVWIiLCAiVmIiLCAiV2IiLCAiWGIiLCAiWWIiLCAiWmIiLCAiJGIiLCAiYWMiLCAiYmMiLCAiY2MiLCAiZGMiLCAiZWMiLCAiZmMiLCAiZ2MiLCAiaGMiLCAiaWMiLCAiamMiLCAia2MiLCAibGMiLCAibWMiLCAibmMiLCAib2MiLCAicGMiLCAicWMiLCAicmMiLCAic2MiLCAidGMiLCAidWMiLCAidmMiLCAid2MiLCAieGMiLCAieWMiLCAiemMiLCAiQWMiLCAiQmMiLCAiQ2MiLCAiRGMiLCAiRWMiLCAiRmMiLCAiR2MiLCAiSGMiLCAiSWMiLCAiSmMiLCAiS2MiLCAiTGMiLCAiTWMiLCAiTmMiLCAiT2MiLCAiUGMiLCAiUWMiLCAiUmMiLCAiU2MiLCAiVGMiLCAiVWMiLCAiVmMiLCAiV2MiLCAiWGMiLCAiWWMiLCAiWmMiLCAiJGMiLCAiYWQiLCAiYmQiLCAiY2QiLCAiZGQiLCAiZWQiLCAiZmQiLCAiZ2QiLCAiaGQiLCAiaWQiLCAiamQiLCAia2QiLCAibGQiLCAibWQiLCAibmQiLCAib2QiLCAicGQiLCAicWQiLCAicmQiLCAic2QiLCAidGQiLCAidWQiLCAidmQiLCAid2QiLCAieGQiLCAieWQiLCAiQWQiLCAiemQiLCAiQmQiLCAiQ2QiLCAiRGQiLCAiRWQiLCAiRmQiLCAiR2QiLCAiSGQiLCAiSWQiLCAiSmQiLCAiS2QiLCAiTGQiLCAiTWQiLCAiTmQiLCAiT2QiLCAiUGQiLCAiUWQiLCAiUmQiLCAiU2QiLCAiVGQiLCAiVWQiLCAiVmQiLCAiV2QiLCAiWGQiLCAiWWQiLCAiWmQiLCAiJGQiLCAiYWUiLCAiYmUiLCAiY2UiLCAiZGUiLCAiZWUiLCAiZmUiLCAiZ2UiLCAiaGUiLCAiaWUiLCAiamUiLCAia2UiLCAibGUiLCAibWUiLCAibmUiLCAib2UiLCAicGUiLCAicWUiLCAicmUiLCAic2UiLCAidGUiLCAidWUiLCAidmUiLCAid2UiLCAieWUiLCAiemUiLCAieGUiLCAiQWUiLCAiQmUiLCAiQ2UiLCAiRGUiLCAiRWUiLCAiRmUiLCAiR2UiLCAiSGUiLCAiSWUiLCAiSmUiLCAiS2UiLCAiTGUiLCAiTWUiLCAiTmUiLCAiT2UiLCAiUGUiLCAiUWUiLCAiUmUiLCAiU2UiLCAiVGUiLCAiVWUiLCAiVmUiLCAiV2UiLCAiWGUiLCAiWWUiLCAiWmUiLCAiJGUiLCAiYWYiLCAiYmYiLCAiY2YiLCAiZGYiLCAiZWYiLCAiZmYiLCAiZ2YiLCAiaGYiLCAiamYiLCAia2YiLCAibGYiLCAibWYiLCAibmYiLCAib2YiLCAicGYiLCAicWYiLCAicmYiLCAic2YiLCAidGYiLCAidWYiLCAidmYiLCAid2YiLCAieGYiLCAieWYiLCAiemYiLCAiQWYiLCAiQmYiLCAiQ2YiLCAiRGYiLCAiRWYiLCAiRmYiLCAiR2YiLCAiSGYiLCAiSWYiLCAiSmYiLCAiS2YiLCAiTGYiLCAiTWYiLCAiTmYiLCAiT2YiLCAiUGYiLCAiUWYiLCAiUmYiLCAiU2YiLCAiVGYiLCAiVWYiLCAiVmYiLCAiV2YiLCAiWGYiLCAiWWYiLCAiWmYiLCAiJGYiLCAiYWciLCAiYmciLCAiY2ciLCAiZGciLCAiZWciLCAiZmciLCAiZ2ciLCAiaGciLCAiaWciLCAiamciLCAia2ciLCAibGciLCAibWciLCAibmciLCAib2ciLCAicGciLCAicWciLCAicmciLCAic2ciLCAidGciLCAidWciLCAidmciLCAid2ciLCAieGciLCAieWciLCAiemciLCAiQWciLCAiQmciLCAiQ2ciLCAiRGciLCAiRWciLCAiRmciLCAiR2ciLCAiS2ciLCAiSGciLCAiSWciLCAiSmciLCAiTGciLCAiTWciLCAiTmciLCAiT2ciLCAiUGciLCAiUWciLCAiUmciLCAiU2ciLCAiVGciLCAiVWciLCAiVmciLCAiV2ciLCAiWGciLCAiWWciLCAiWmciLCAiJGciLCAiYWgiLCAiYmgiLCAiY2giLCAiZGgiLCAiZWgiLCAiZmgiLCAiZ2giLCAiaGgiLCAiaWgiLCAiamgiLCAia2giLCAibGgiLCAibWgiLCAibmgiLCAib2giLCAicGgiLCAicWgiLCAicmgiLCAic2giLCAidGgiLCAidWgiLCAidmgiLCAid2giLCAieGgiLCAieWgiLCAiemgiLCAiQWgiLCAiQmgiLCAiQ2giLCAiRGgiLCAiRWgiLCAiRmgiLCAiR2giLCAiSGgiLCAiSWgiLCAiSmgiLCAiS2giLCAiTGgiLCAiTWgiLCAiTmgiLCAiT2giLCAiUGgiLCAiUWgiLCAiUmgiLCAiU2giLCAiVGgiLCAiVWgiLCAiVmgiLCAiV2giLCAiWGgiLCAiWWgiLCAiWmgiLCAiJGgiLCAiYWkiLCAiYmkiLCAiY2kiLCAiZGkiLCAiZWkiLCAiZmkiLCAiZ2kiLCAiaGkiLCAiaWkiLCAiamkiLCAia2kiLCAibGkiLCAibWkiLCAibmkiLCAib2kiLCAicGkiLCAicWkiLCAicmkiLCAic2kiLCAidGkiLCAidWkiLCAidmkiLCAid2kiLCAieGkiLCAieWkiLCAiemkiLCAiQWkiLCAiQmkiLCAiQ2kiLCAiRGkiLCAiRWkiLCAiRmkiLCAiR2kiLCAiSGkiLCAiSWkiLCAiSmkiLCAiS2kiLCAiTGkiLCAiTWkiLCAiTmkiLCAiT2kiLCAiUGkiLCAiUWkiLCAiUmkiLCAiU2kiLCAiVGkiLCAiVWkiLCAiVmkiLCAiV2kiLCAiWGkiLCAiWWkiLCAiWmkiLCAiJGkiLCAiYWoiLCAiYmoiLCAiY2oiLCAiZGoiLCAiZWoiLCAiZmoiLCAiZ2oiLCAiaGoiLCAiaWoiLCAiamoiLCAia2oiLCAibGoiLCAibWoiLCAibmoiLCAib2oiLCAicGoiLCAiWCIsICJZIiwgInFqIiwgInJqIiwgInNqIiwgInRqIiwgInVqIiwgInZqIiwgIndqIiwgIloiLCAieGoiLCAieWoiLCAiemoiLCAiQWoiLCAiQmoiLCAiQ2oiLCAiRGoiLCAiRWoiLCAiRmoiLCAiR2oiLCAiSGoiLCAiSWoiLCAiSmoiLCAiS2oiLCAiTGoiLCAiTWoiLCAiTmoiLCAiT2oiLCAiUGoiLCAiUWoiLCAiUmoiLCAiU2oiLCAiVGoiLCAiVWoiLCAiVmoiLCAiV2oiLCAiWGoiLCAiWWoiLCAiWmoiLCAidmEiLCAiYWsiLCAiYmsiLCAiY2siLCAiZGsiLCAiZWsiLCAiZmsiLCAiZ2siLCAiaGsiLCAiaWsiLCAiamsiLCAia2siLCAibGsiLCAibWsiLCAibmsiLCAib2siLCAicGsiLCAicWsiLCAicmsiLCAic2siLCAidGsiLCAidWsiLCAidmsiLCAid2siLCAieGsiLCAieWsiLCAicmVxdWlyZV9yZWFjdF9kb20iLCAiY2hlY2tEQ0UiLCAiZXJyIiwgInJlcXVpcmVfdXNlX3N5bmNfZXh0ZXJuYWxfc3RvcmVfc2hpbV9wcm9kdWN0aW9uX21pbiIsICJyZXF1aXJlX3NoaW0iLCAicmVxdWlyZV93aXRoX3NlbGVjdG9yX3Byb2R1Y3Rpb25fbWluIiwgInJlcXVpcmVfd2l0aF9zZWxlY3RvciIsICJfZXh0ZW5kcyIsICJpbml0X2V4dGVuZHMiLCAiX19lc21NaW4iLCAicmVxdWlyZV9yZWFjdF9pc19wcm9kdWN0aW9uX21pbiIsICJyZXF1aXJlX3JlYWN0X2lzIiwgInJlcXVpcmVfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfY2pzIiwgInJlYWN0SXMiLCAiUkVBQ1RfU1RBVElDUyIsICJLTk9XTl9TVEFUSUNTIiwgIkZPUldBUkRfUkVGX1NUQVRJQ1MiLCAiTUVNT19TVEFUSUNTIiwgIlRZUEVfU1RBVElDUyIsICJnZXRTdGF0aWNzIiwgImNvbXBvbmVudCIsICJkZWZpbmVQcm9wZXJ0eSIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJnZXRQcm90b3R5cGVPZiIsICJvYmplY3RQcm90b3R5cGUiLCAiaG9pc3ROb25SZWFjdFN0YXRpY3MiLCAidGFyZ2V0Q29tcG9uZW50IiwgInNvdXJjZUNvbXBvbmVudCIsICJibGFja2xpc3QiLCAiaW5oZXJpdGVkQ29tcG9uZW50IiwgImtleXMiLCAidGFyZ2V0U3RhdGljcyIsICJzb3VyY2VTdGF0aWNzIiwgImRlc2NyaXB0b3IiLCAicmVxdWlyZV9tdWx0aW1hcCIsICJtYXBFYWNoIiwgIm1hcCIsICJvcGVyYXRpb24iLCAibmV4dCIsICJNdWx0aW1hcCIsICJtYXBDdG9yIiwgIml0ZW0iLCAiaXRlcmFibGUiLCAic2VsZiIsICJhcmdzIiwgImVudHJ5IiwgImlkeCIsICJoYXNLZXkiLCAibWFrZUl0ZXJhdG9yIiwgInZhbHMiLCAiaXRlciIsICJ0b3RhbCIsICJ2YWx1ZSIsICJzYWZhcmlOZXh0IiwgIml0ZXJhdG9yIiwgIm5leHRJbmRleCIsICJzaGVldEZvclRhZyIsICJ0YWciLCAiY3JlYXRlU3R5bGVFbGVtZW50IiwgIm9wdGlvbnMiLCAiU3R5bGVTaGVldCIsICJpbml0X2Vtb3Rpb25fc2hlZXRfYnJvd3Nlcl9lc20iLCAiX3RoaXMiLCAiYmVmb3JlIiwgIl9wcm90byIsICJub2RlcyIsICJydWxlIiwgImlzSW1wb3J0UnVsZSIsICJzaGVldCIsICJNUyIsICJNT1oiLCAiV0VCS0lUIiwgIkNPTU1FTlQiLCAiUlVMRVNFVCIsICJERUNMQVJBVElPTiIsICJJTVBPUlQiLCAiS0VZRlJBTUVTIiwgIkxBWUVSIiwgImluaXRfRW51bSIsICJoYXNoIiwgImxlbmd0aCIsICJjaGFyYXQiLCAidHJpbSIsICJtYXRjaCIsICJwYXR0ZXJuIiwgInJlcGxhY2UiLCAicmVwbGFjZW1lbnQiLCAiaW5kZXhvZiIsICJzZWFyY2giLCAiaW5kZXgiLCAic3Vic3RyIiwgImJlZ2luIiwgImVuZCIsICJzdHJsZW4iLCAic2l6ZW9mIiwgImFwcGVuZCIsICJhcnJheSIsICJjb21iaW5lIiwgImNhbGxiYWNrIiwgImFicyIsICJhc3NpZ24iLCAiaW5pdF9VdGlsaXR5IiwgIm5vZGUiLCAicm9vdCIsICJwYXJlbnQiLCAidHlwZSIsICJwcm9wcyIsICJjaGlsZHJlbiIsICJsaW5lIiwgImNvbHVtbiIsICJjb3B5IiwgImNoYXIiLCAiY2hhcmFjdGVyIiwgInByZXYiLCAicG9zaXRpb24iLCAiY2hhcmFjdGVycyIsICJwZWVrIiwgImNhcmV0IiwgInNsaWNlIiwgInRva2VuIiwgImFsbG9jIiwgImRlYWxsb2MiLCAiZGVsaW1pdCIsICJkZWxpbWl0ZXIiLCAid2hpdGVzcGFjZSIsICJlc2NhcGluZyIsICJjb3VudCIsICJjb21tZW50ZXIiLCAiaWRlbnRpZmllciIsICJpbml0X1Rva2VuaXplciIsICJjb21waWxlIiwgInBhcnNlIiwgInJ1bGVzIiwgInJ1bGVzZXRzIiwgInBzZXVkbyIsICJwb2ludHMiLCAiZGVjbGFyYXRpb25zIiwgIm9mZnNldCIsICJhdHJ1bGUiLCAicHJvcGVydHkiLCAicHJldmlvdXMiLCAidmFyaWFibGUiLCAic2Nhbm5pbmciLCAiYW1wZXJzYW5kIiwgInJlZmVyZW5jZSIsICJjb21tZW50IiwgImRlY2xhcmF0aW9uIiwgInJ1bGVzZXQiLCAicG9zdCIsICJzaXplIiwgImoiLCAiaW5pdF9QYXJzZXIiLCAiaW5pdF9QcmVmaXhlciIsICJzZXJpYWxpemUiLCAib3V0cHV0IiwgInN0cmluZ2lmeSIsICJlbGVtZW50IiwgImluaXRfU2VyaWFsaXplciIsICJtaWRkbGV3YXJlIiwgImNvbGxlY3Rpb24iLCAicnVsZXNoZWV0IiwgImluaXRfTWlkZGxld2FyZSIsICJpbml0X3N0eWxpcyIsICJ3ZWFrTWVtb2l6ZSIsICJpbml0X2Vtb3Rpb25fd2Vha19tZW1vaXplX2VzbSIsICJmdW5jIiwgImNhY2hlIiwgImFyZyIsICJyZXQiLCAibWVtb2l6ZSIsICJmbiIsICJpbml0X2Vtb3Rpb25fbWVtb2l6ZV9lc20iLCAiZW1vdGlvbl9jYWNoZV9icm93c2VyX2VzbV9leHBvcnRzIiwgIl9fZXhwb3J0IiwgImNyZWF0ZUNhY2hlIiwgInByZWZpeCIsICJpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmciLCAidG9SdWxlcyIsICJnZXRSdWxlcyIsICJmaXhlZEVsZW1lbnRzIiwgImNvbXBhdCIsICJyZW1vdmVMYWJlbCIsICJwcmVmaXhlciIsICJkZWZhdWx0U3R5bGlzUGx1Z2lucyIsICJpbml0X2Vtb3Rpb25fY2FjaGVfYnJvd3Nlcl9lc20iLCAicGFyc2VkIiwgImlzSW1wbGljaXRSdWxlIiwgInBhcmVudFJ1bGVzIiwgInNzclN0eWxlcyIsICJkYXRhRW1vdGlvbkF0dHJpYnV0ZSIsICJzdHlsaXNQbHVnaW5zIiwgImluc2VydGVkIiwgImNvbnRhaW5lciIsICJub2Rlc1RvSHlkcmF0ZSIsICJhdHRyaWIiLCAiX2luc2VydCIsICJvbW5pcHJlc2VudFBsdWdpbnMiLCAiY3VycmVudFNoZWV0IiwgImZpbmFsaXppbmdQbHVnaW5zIiwgInNlcmlhbGl6ZXIiLCAic3R5bGlzIiwgInN0eWxlcyIsICJzZWxlY3RvciIsICJzZXJpYWxpemVkIiwgInNob3VsZENhY2hlIiwgImltcG9ydF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljcyIsICJpbml0X2Vtb3Rpb25fcmVhY3RfaXNvbGF0ZWRfaG5yc19icm93c2VyX2VzbSIsICJob2lzdE5vblJlYWN0U3RhdGljcyQxIiwgImdldFJlZ2lzdGVyZWRTdHlsZXMiLCAicmVnaXN0ZXJlZCIsICJyZWdpc3RlcmVkU3R5bGVzIiwgImNsYXNzTmFtZXMiLCAicmF3Q2xhc3NOYW1lIiwgImNsYXNzTmFtZSIsICJpc0Jyb3dzZXIiLCAicmVnaXN0ZXJTdHlsZXMiLCAiaW5zZXJ0U3R5bGVzIiwgImluaXRfZW1vdGlvbl91dGlsc19icm93c2VyX2VzbSIsICJpc1N0cmluZ1RhZyIsICJjdXJyZW50IiwgIm11cm11cjIiLCAic3RyIiwgImxlbiIsICJpbml0X2Vtb3Rpb25faGFzaF9lc20iLCAidW5pdGxlc3NLZXlzIiwgImluaXRfZW1vdGlvbl91bml0bGVzc19lc20iLCAiaGFuZGxlSW50ZXJwb2xhdGlvbiIsICJtZXJnZWRQcm9wcyIsICJpbnRlcnBvbGF0aW9uIiwgImN1cnNvciIsICJjcmVhdGVTdHJpbmdGcm9tT2JqZWN0IiwgInByZXZpb3VzQ3Vyc29yIiwgInJlc3VsdCIsICJtYXRjaGVkIiwgInJlcGxhY2VkIiwgImNhY2hlZCIsICJvYmoiLCAic3RyaW5nIiwgIl9rZXkiLCAiaXNQcm9jZXNzYWJsZVZhbHVlIiwgInByb2Nlc3NTdHlsZU5hbWUiLCAicHJvY2Vzc1N0eWxlVmFsdWUiLCAiX2kiLCAiaW50ZXJwb2xhdGVkIiwgImh5cGhlbmF0ZVJlZ2V4IiwgImFuaW1hdGlvblJlZ2V4IiwgImlzQ3VzdG9tUHJvcGVydHkiLCAibGFiZWxQYXR0ZXJuIiwgInNlcmlhbGl6ZVN0eWxlcyIsICJpbml0X2Vtb3Rpb25fc2VyaWFsaXplX2Jyb3dzZXJfZXNtIiwgInN0eWxlTmFtZSIsICJwMSIsICJwMiIsICJzdHJpbmdNb2RlIiwgInN0cmluZ3MiLCAic291cmNlTWFwIiwgImlkZW50aWZpZXJOYW1lIiwgIm5hbWUiLCAiUmVhY3QiLCAic3luY0ZhbGxiYWNrIiwgInVzZUluc2VydGlvbkVmZmVjdCIsICJ1c2VJbnNlcnRpb25FZmZlY3RBbHdheXNXaXRoU3luY0ZhbGxiYWNrIiwgInVzZUluc2VydGlvbkVmZmVjdFdpdGhMYXlvdXRGYWxsYmFjayIsICJpbml0X2Vtb3Rpb25fdXNlX2luc2VydGlvbl9lZmZlY3Rfd2l0aF9mYWxsYmFja3NfYnJvd3Nlcl9lc20iLCAiY3JlYXRlIiwgIndpdGhUaGVtZSIsICJDb21wb25lbnQiLCAiY29tcG9uZW50TmFtZSIsICJyZW5kZXIiLCAicmVmIiwgInRoZW1lIiwgIlRoZW1lQ29udGV4dCIsICJXaXRoVGhlbWUiLCAiaW1wb3J0X3JlYWN0IiwgImhhc093biIsICJFbW90aW9uQ2FjaGVDb250ZXh0IiwgIkNhY2hlUHJvdmlkZXIiLCAiX191bnNhZmVfdXNlRW1vdGlvbkNhY2hlIiwgIndpdGhFbW90aW9uQ2FjaGUiLCAidXNlVGhlbWUiLCAiZ2V0VGhlbWUiLCAiY3JlYXRlQ2FjaGVXaXRoVGhlbWUiLCAiVGhlbWVQcm92aWRlciIsICJ0eXBlUHJvcE5hbWUiLCAiY3JlYXRlRW1vdGlvblByb3BzIiwgIkluc2VydGlvbiIsICJFbW90aW9uIiwgIkVtb3Rpb24kMSIsICJpbml0X2Vtb3Rpb25fZWxlbWVudF80M2M2ZmVhMF9icm93c2VyX2VzbSIsICJvdXRlclRoZW1lIiwgIm1lcmdlZFRoZW1lIiwgIm5ld1Byb3BzIiwgImxhYmVsIiwgIl9yZWYiLCAiY3NzUHJvcCIsICJXcmFwcGVkQ29tcG9uZW50IiwgImxhYmVsRnJvbVN0YWNrIiwgImVtb3Rpb25fcmVhY3RfYnJvd3Nlcl9lc21fZXhwb3J0cyIsICJDbGFzc05hbWVzIiwgIkdsb2JhbCIsICJqc3giLCAiY3NzIiwgImtleWZyYW1lcyIsICJfbGVuIiwgIm1lcmdlIiwgImNsYXNzbmFtZXMiLCAiaW5pdF9lbW90aW9uX3JlYWN0X2Jyb3dzZXJfZXNtIiwgImFyZ3NMZW5ndGgiLCAiY3JlYXRlRWxlbWVudEFyZ0FycmF5IiwgInNlcmlhbGl6ZWROYW1lcyIsICJzZXJpYWxpemVkU3R5bGVzIiwgInNoZWV0UmVmIiwgInJlaHlkcmF0aW5nIiwgInNoZWV0UmVmQ3VycmVudCIsICJpbnNlcnRhYmxlIiwgImNscyIsICJ0b0FkZCIsICJzZXJpYWxpemVkQXJyIiwgImhhc1JlbmRlcmVkIiwgImN4IiwgIl9sZW4yIiwgIl9rZXkyIiwgImNvbnRlbnQiLCAiZWxlIiwgInJlcXVpcmVfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwgIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCAicmVxdWlyZV9mb3JtYXRNdWlFcnJvck1lc3NhZ2UiLCAiZm9ybWF0TXVpRXJyb3JNZXNzYWdlIiwgImNvZGUiLCAidXJsIiwgIl9mb3JtYXRNdWlFcnJvck1lc3NhZ2UiLCAicmVhY3RQcm9wc1JlZ2V4IiwgImlzUHJvcFZhbGlkIiwgImluaXRfZW1vdGlvbl9pc19wcm9wX3ZhbGlkX2VzbSIsICJwcm9wIiwgInRlc3RPbWl0UHJvcHNPblN0cmluZ1RhZyIsICJ0ZXN0T21pdFByb3BzT25Db21wb25lbnQiLCAiZ2V0RGVmYXVsdFNob3VsZEZvcndhcmRQcm9wIiwgImNvbXBvc2VTaG91bGRGb3J3YXJkUHJvcHMiLCAiY3JlYXRlU3R5bGVkIiwgImluaXRfZW1vdGlvbl9zdHlsZWRfYmFzZV9icm93c2VyX2VzbSIsICJpc1JlYWwiLCAic2hvdWxkRm9yd2FyZFByb3AiLCAib3B0aW9uc1Nob3VsZEZvcndhcmRQcm9wIiwgInByb3BOYW1lIiwgImJhc2VUYWciLCAidGFyZ2V0Q2xhc3NOYW1lIiwgImRlZmF1bHRTaG91bGRGb3J3YXJkUHJvcCIsICJzaG91bGRVc2VBcyIsICJTdHlsZWQiLCAiRmluYWxUYWciLCAiY2xhc3NJbnRlcnBvbGF0aW9ucyIsICJmaW5hbFNob3VsZEZvcndhcmRQcm9wIiwgIm5leHRUYWciLCAibmV4dE9wdGlvbnMiLCAiZW1vdGlvbl9zdHlsZWRfYnJvd3Nlcl9lc21fZXhwb3J0cyIsICJuZXdTdHlsZWQiLCAidGFncyIsICJpbml0X2Vtb3Rpb25fc3R5bGVkX2Jyb3dzZXJfZXNtIiwgInRhZ05hbWUiLCAicmVxdWlyZV9SZWFjdFByb3BUeXBlc1NlY3JldCIsICJSZWFjdFByb3BUeXBlc1NlY3JldCIsICJyZXF1aXJlX2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcyIsICJlbXB0eUZ1bmN0aW9uIiwgImVtcHR5RnVuY3Rpb25XaXRoUmVzZXQiLCAic2hpbSIsICJsb2NhdGlvbiIsICJwcm9wRnVsbE5hbWUiLCAic2VjcmV0IiwgImdldFNoaW0iLCAiUmVhY3RQcm9wVHlwZXMiLCAicmVxdWlyZV9wcm9wX3R5cGVzIiwgIlJlYWN0SXMiLCAidGhyb3dPbkRpcmVjdEFjY2VzcyIsICJyZXF1aXJlX3JlYWN0X2pzeF9ydW50aW1lX3Byb2R1Y3Rpb25fbWluIiwgInJlcXVpcmVfanN4X3J1bnRpbWUiLCAicmVxdWlyZV9TdHlsZWRFbmdpbmVQcm92aWRlciIsICJTdHlsZWRFbmdpbmVQcm92aWRlciIsICJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsICJfcHJvcFR5cGVzIiwgIl9yZWFjdDIiLCAiX2NhY2hlIiwgIl9qc3hSdW50aW1lIiwgIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsICJpbmplY3RGaXJzdCIsICJfU3R5bGVkRW5naW5lUHJvdmlkZXIiLCAicmVxdWlyZV9HbG9iYWxTdHlsZXMiLCAiR2xvYmFsU3R5bGVzIiwgImlzRW1wdHkiLCAiZGVmYXVsdFRoZW1lIiwgImdsb2JhbFN0eWxlcyIsICJ0aGVtZUlucHV0IiwgIl9HbG9iYWxTdHlsZXMiLCAicmVxdWlyZV9ub2RlIiwgIl9yZWFjdCIsICJzdHlsZWQiLCAiX3N0eWxlZCIsICJpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIiwgInByb2Nlc3NvciIsICJyZXF1aXJlX2V4dGVuZHMiLCAicmVxdWlyZV9kZWVwbWVyZ2UiLCAiZGVlcG1lcmdlIiwgImlzUGxhaW5PYmplY3QiLCAiX2V4dGVuZHMyIiwgInByb3RvdHlwZSIsICJkZWVwQ2xvbmUiLCAiX2V4cG9ydE5hbWVzIiwgIl9kZWVwbWVyZ2UiLCAidjEiLCAicmVxdWlyZV9jYXBpdGFsaXplIiwgImNhcGl0YWxpemUiLCAiX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIiLCAiX2NhcGl0YWxpemUiLCAicmVxdWlyZV9nZXREaXNwbGF5TmFtZSIsICJnZXREaXNwbGF5TmFtZSIsICJnZXRGdW5jdGlvbk5hbWUiLCAiX3JlYWN0SXMiLCAiZm5OYW1lTWF0Y2hSZWdleCIsICJnZXRGdW5jdGlvbkNvbXBvbmVudE5hbWUiLCAiZmFsbGJhY2siLCAiZ2V0V3JhcHBlZE5hbWUiLCAib3V0ZXJUeXBlIiwgImlubmVyVHlwZSIsICJ3cmFwcGVyTmFtZSIsICJmdW5jdGlvbk5hbWUiLCAiX2dldERpc3BsYXlOYW1lIiwgInJlcXVpcmVfY2xhbXAiLCAiY2xhbXAiLCAibWluIiwgIm1heCIsICJfZGVmYXVsdCIsICJfY2xhbXAiLCAicmVxdWlyZV9tZXJnZSIsICJhY2MiLCAicmVxdWlyZV9yZXNwb25zaXZlUHJvcFR5cGUiLCAicmVzcG9uc2l2ZVByb3BUeXBlIiwgInJlcXVpcmVfYnJlYWtwb2ludHMiLCAiY29tcHV0ZUJyZWFrcG9pbnRzQmFzZSIsICJjcmVhdGVFbXB0eUJyZWFrcG9pbnRPYmplY3QiLCAiaGFuZGxlQnJlYWtwb2ludHMiLCAibWVyZ2VCcmVha3BvaW50c0luT3JkZXIiLCAicmVtb3ZlVW51c2VkQnJlYWtwb2ludHMiLCAicmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMiLCAiX21lcmdlIiwgInZhbHVlcyIsICJkZWZhdWx0QnJlYWtwb2ludHMiLCAicHJvcFZhbHVlIiwgInN0eWxlRnJvbVByb3BWYWx1ZSIsICJ0aGVtZUJyZWFrcG9pbnRzIiwgImJyZWFrcG9pbnQiLCAibWVkaWFLZXkiLCAiY3NzS2V5IiwgImJyZWFrcG9pbnRzIiwgInN0eWxlRnVuY3Rpb24iLCAibmV3U3R5bGVGdW5jdGlvbiIsICJiYXNlIiwgImV4dGVuZGVkIiwgImJyZWFrcG9pbnRzSW5wdXQiLCAiX2JyZWFrcG9pbnRzSW5wdXQka2V5IiwgImJyZWFrcG9pbnRTdHlsZUtleSIsICJicmVha3BvaW50S2V5cyIsICJzdHlsZSIsICJicmVha3BvaW50T3V0cHV0IiwgImVtcHR5QnJlYWtwb2ludHMiLCAibWVyZ2VkT3V0cHV0IiwgImJyZWFrcG9pbnRWYWx1ZXMiLCAiYnJlYWtwb2ludHNLZXlzIiwgImN1c3RvbUJhc2UiLCAicmVxdWlyZV9zdHlsZSIsICJnZXRQYXRoIiwgImdldFN0eWxlVmFsdWUiLCAiX3Jlc3BvbnNpdmVQcm9wVHlwZSIsICJfYnJlYWtwb2ludHMiLCAicGF0aCIsICJjaGVja1ZhcnMiLCAidGhlbWVNYXBwaW5nIiwgInRyYW5zZm9ybSIsICJwcm9wVmFsdWVGaW5hbCIsICJ1c2VyVmFsdWUiLCAiY3NzUHJvcGVydHkiLCAidGhlbWVLZXkiLCAicmVxdWlyZV9tZW1vaXplIiwgInJlcXVpcmVfc3BhY2luZyIsICJjcmVhdGVVbmFyeVNwYWNpbmciLCAiY3JlYXRlVW5hcnlVbml0IiwgImdldFN0eWxlRnJvbVByb3BWYWx1ZSIsICJnZXRWYWx1ZSIsICJtYXJnaW4iLCAicGFkZGluZyIsICJfc3R5bGUiLCAiX21lbW9pemUiLCAicHJvcGVydGllcyIsICJkaXJlY3Rpb25zIiwgImFsaWFzZXMiLCAiZ2V0Q3NzUHJvcGVydGllcyIsICJkaXJlY3Rpb24iLCAiZGlyIiwgIm1hcmdpbktleXMiLCAicGFkZGluZ0tleXMiLCAic3BhY2luZ0tleXMiLCAiZGVmYXVsdFZhbHVlIiwgIl9nZXRQYXRoIiwgInRoZW1lU3BhY2luZyIsICJ0cmFuc2Zvcm1lciIsICJ0cmFuc2Zvcm1lZCIsICJjc3NQcm9wZXJ0aWVzIiwgInJlc29sdmVDc3NQcm9wZXJ0eSIsICJzcGFjaW5nIiwgInJlcXVpcmVfY29tcG9zZSIsICJjb21wb3NlIiwgImhhbmRsZXJzIiwgInJlcXVpcmVfYm9yZGVycyIsICJib3JkZXJUcmFuc2Zvcm0iLCAiX2NvbXBvc2UiLCAiX3NwYWNpbmciLCAiY3JlYXRlQm9yZGVyU3R5bGUiLCAiYm9yZGVyIiwgImJvcmRlclRvcCIsICJib3JkZXJSaWdodCIsICJib3JkZXJCb3R0b20iLCAiYm9yZGVyTGVmdCIsICJib3JkZXJDb2xvciIsICJib3JkZXJUb3BDb2xvciIsICJib3JkZXJSaWdodENvbG9yIiwgImJvcmRlckJvdHRvbUNvbG9yIiwgImJvcmRlckxlZnRDb2xvciIsICJvdXRsaW5lIiwgIm91dGxpbmVDb2xvciIsICJib3JkZXJSYWRpdXMiLCAiYm9yZGVycyIsICJyZXF1aXJlX2Nzc0dyaWQiLCAiZ2FwIiwgImNvbHVtbkdhcCIsICJyb3dHYXAiLCAiZ3JpZENvbHVtbiIsICJncmlkUm93IiwgImdyaWRBdXRvRmxvdyIsICJncmlkQXV0b0NvbHVtbnMiLCAiZ3JpZEF1dG9Sb3dzIiwgImdyaWRUZW1wbGF0ZUNvbHVtbnMiLCAiZ3JpZFRlbXBsYXRlUm93cyIsICJncmlkVGVtcGxhdGVBcmVhcyIsICJncmlkQXJlYSIsICJncmlkIiwgInJlcXVpcmVfcGFsZXR0ZSIsICJwYWxldHRlVHJhbnNmb3JtIiwgImNvbG9yIiwgImJnY29sb3IiLCAiYmFja2dyb3VuZENvbG9yIiwgInBhbGV0dGUiLCAicmVxdWlyZV9zaXppbmciLCAic2l6aW5nVHJhbnNmb3JtIiwgIndpZHRoIiwgIm1heFdpZHRoIiwgIl9wcm9wcyR0aGVtZSIsICJfcHJvcHMkdGhlbWUyIiwgIm1pbldpZHRoIiwgImhlaWdodCIsICJtYXhIZWlnaHQiLCAibWluSGVpZ2h0IiwgInNpemVXaWR0aCIsICJzaXplSGVpZ2h0IiwgImJveFNpemluZyIsICJzaXppbmciLCAicmVxdWlyZV9kZWZhdWx0U3hDb25maWciLCAiX2JvcmRlcnMiLCAiX2Nzc0dyaWQiLCAiX3BhbGV0dGUiLCAiX3NpemluZyIsICJkZWZhdWx0U3hDb25maWciLCAicmVxdWlyZV9zdHlsZUZ1bmN0aW9uU3giLCAidW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4IiwgIl9kZWZhdWx0U3hDb25maWciLCAib2JqZWN0c0hhdmVTYW1lS2V5cyIsICJvYmplY3RzIiwgImFsbEtleXMiLCAib2JqZWN0IiwgInVuaW9uIiwgImNhbGxJZkZuIiwgIm1heWJlRm4iLCAiZ2V0VGhlbWVWYWx1ZSIsICJjb25maWciLCAic3R5bGVGdW5jdGlvblN4IiwgIl90aGVtZSR1bnN0YWJsZV9zeENvbiIsICJzeCIsICJ0cmF2ZXJzZSIsICJzeElucHV0IiwgInN4T2JqZWN0IiwgInN0eWxlS2V5IiwgImJyZWFrcG9pbnRzVmFsdWVzIiwgInJlcXVpcmVfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsICJleGNsdWRlZCIsICJzb3VyY2VLZXlzIiwgInJlcXVpcmVfZXh0ZW5kU3hQcm9wIiwgImV4dGVuZFN4UHJvcCIsICJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIiLCAiX2V4Y2x1ZGVkIiwgInNwbGl0UHJvcHMiLCAiX3Byb3BzJHRoZW1lJHVuc3RhYmxlIiwgImluU3giLCAib3RoZXIiLCAic3lzdGVtUHJvcHMiLCAib3RoZXJQcm9wcyIsICJmaW5hbFN4IiwgIl9zdHlsZUZ1bmN0aW9uU3giLCAiX2V4dGVuZFN4UHJvcCIsICJyZXF1aXJlX2NyZWF0ZUJyZWFrcG9pbnRzIiwgImNyZWF0ZUJyZWFrcG9pbnRzIiwgInNvcnRCcmVha3BvaW50c1ZhbHVlcyIsICJicmVha3BvaW50c0FzQXJyYXkiLCAiYnJlYWtwb2ludDEiLCAiYnJlYWtwb2ludDIiLCAidW5pdCIsICJzdGVwIiwgInNvcnRlZFZhbHVlcyIsICJ1cCIsICJkb3duIiwgImJldHdlZW4iLCAic3RhcnQiLCAiZW5kSW5kZXgiLCAib25seSIsICJub3QiLCAia2V5SW5kZXgiLCAicmVxdWlyZV9zaGFwZSIsICJzaGFwZSIsICJyZXF1aXJlX2NyZWF0ZVNwYWNpbmciLCAiY3JlYXRlU3BhY2luZyIsICJzcGFjaW5nSW5wdXQiLCAiYXJnc0lucHV0IiwgImFyZ3VtZW50IiwgInJlcXVpcmVfYXBwbHlTdHlsZXMiLCAiYXBwbHlTdHlsZXMiLCAicmVxdWlyZV9jcmVhdGVUaGVtZSIsICJfY3JlYXRlQnJlYWtwb2ludHMiLCAiX3NoYXBlIiwgIl9jcmVhdGVTcGFjaW5nIiwgIl9hcHBseVN0eWxlcyIsICJjcmVhdGVUaGVtZSIsICJwYWxldHRlSW5wdXQiLCAic2hhcGVJbnB1dCIsICJtdWlUaGVtZSIsICJfY3JlYXRlVGhlbWUiLCAicmVxdWlyZV9jb2xvck1hbmlwdWxhdG9yIiwgImFscGhhIiwgImJsZW5kIiwgImRhcmtlbiIsICJkZWNvbXBvc2VDb2xvciIsICJlbXBoYXNpemUiLCAiZ2V0Q29udHJhc3RSYXRpbyIsICJnZXRMdW1pbmFuY2UiLCAiaGV4VG9SZ2IiLCAiaHNsVG9SZ2IiLCAibGlnaHRlbiIsICJwcml2YXRlX3NhZmVBbHBoYSIsICJwcml2YXRlX3NhZmVEYXJrZW4iLCAicHJpdmF0ZV9zYWZlRW1waGFzaXplIiwgInByaXZhdGVfc2FmZUxpZ2h0ZW4iLCAicmVjb21wb3NlQ29sb3IiLCAicmdiVG9IZXgiLCAiY2xhbXBXcmFwcGVyIiwgImNvbG9ycyIsICJpbnRUb0hleCIsICJpbnQiLCAiaGV4IiwgIm1hcmtlciIsICJjb2xvclNwYWNlIiwgImNvbG9yQ2hhbm5lbCIsICJkZWNvbXBvc2VkQ29sb3IiLCAicHJpdmF0ZV9zYWZlQ29sb3JDaGFubmVsIiwgIndhcm5pbmciLCAicmdiIiwgImZvcmVncm91bmQiLCAiYmFja2dyb3VuZCIsICJsdW1BIiwgImx1bUIiLCAiY29lZmZpY2llbnQiLCAib3ZlcmxheSIsICJvcGFjaXR5IiwgImdhbW1hIiwgImJsZW5kQ2hhbm5lbCIsICJvIiwgIm92ZXJsYXlDb2xvciIsICJyZXF1aXJlX2NyZWF0ZVN0eWxlZCIsICJfc3R5bGVkRW5naW5lIiwgIl9leGNsdWRlZDIiLCAiX2V4Y2x1ZGVkMyIsICJzeXN0ZW1EZWZhdWx0VGhlbWUiLCAibG93ZXJjYXNlRmlyc3RMZXR0ZXIiLCAicmVzb2x2ZVRoZW1lIiwgInRoZW1lSWQiLCAiZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyIiwgInNsb3QiLCAicHJvY2Vzc1N0eWxlQXJnIiwgImNhbGxhYmxlU3R5bGUiLCAib3duZXJTdGF0ZSIsICJyZXNvbHZlZFN0eWxlc0FyZyIsICJyZXNvbHZlZFN0eWxlIiwgInZhcmlhbnRzIiwgInZhcmlhbnQiLCAiaXNNYXRjaCIsICJpbnB1dCIsICJyb290U2hvdWxkRm9yd2FyZFByb3AiLCAic2xvdFNob3VsZEZvcndhcmRQcm9wIiwgInN5c3RlbVN4IiwgImlucHV0T3B0aW9ucyIsICJjb21wb25lbnRTbG90IiwgImlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIiLCAiaW5wdXRTa2lwU3giLCAib3ZlcnJpZGVzUmVzb2x2ZXIiLCAic2tpcFZhcmlhbnRzUmVzb2x2ZXIiLCAic2tpcFN4IiwgInNob3VsZEZvcndhcmRQcm9wT3B0aW9uIiwgImRlZmF1bHRTdHlsZWRSZXNvbHZlciIsICJ0cmFuc2Zvcm1TdHlsZUFyZyIsICJzdHlsZXNBcmciLCAibXVpU3R5bGVkUmVzb2x2ZXIiLCAic3R5bGVBcmciLCAiZXhwcmVzc2lvbnMiLCAidHJhbnNmb3JtZWRTdHlsZUFyZyIsICJleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUiLCAic3R5bGVPdmVycmlkZXMiLCAicmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyIsICJzbG90S2V5IiwgInNsb3RTdHlsZSIsICJfdGhlbWUkY29tcG9uZW50cyIsICJ0aGVtZVZhcmlhbnRzIiwgIm51bU9mQ3VzdG9tRm5zQXBwbGllZCIsICJwbGFjZWhvbGRlcnMiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJpbXBvcnRfc2hpbSIsICJpbXBvcnRfd2l0aF9zZWxlY3RvciIsICJkZWZhdWx0Tm9vcEJhdGNoIiwgImJhdGNoIiwgInNldEJhdGNoIiwgIm5ld0JhdGNoIiwgImdldEJhdGNoIiwgIkNvbnRleHRLZXkiLCAiZ1QiLCAiZ2V0Q29udGV4dCIsICJfZ1QkQ29udGV4dEtleSIsICJjb250ZXh0TWFwIiwgInJlYWxDb250ZXh0IiwgIlJlYWN0UmVkdXhDb250ZXh0IiwgImNyZWF0ZVJlZHV4Q29udGV4dEhvb2siLCAiY29udGV4dCIsICJ1c2VSZWR1eENvbnRleHQiLCAibm90SW5pdGlhbGl6ZWQiLCAidXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IiLCAiaW5pdGlhbGl6ZVVzZVNlbGVjdG9yIiwgInJlZkVxdWFsaXR5IiwgImNyZWF0ZVNlbGVjdG9ySG9vayIsICJlcXVhbGl0eUZuT3JPcHRpb25zIiwgImVxdWFsaXR5Rm4iLCAic3RhYmlsaXR5Q2hlY2siLCAibm9vcENoZWNrIiwgInN0b3JlIiwgInN1YnNjcmlwdGlvbiIsICJnZXRTZXJ2ZXJTdGF0ZSIsICJnbG9iYWxTdGFiaWxpdHlDaGVjayIsICJnbG9iYWxOb29wQ2hlY2siLCAiZmlyc3RSdW4iLCAid3JhcHBlZFNlbGVjdG9yIiwgInN0YXRlIiwgInNlbGVjdGVkIiwgImZpbmFsU3RhYmlsaXR5Q2hlY2siLCAidG9Db21wYXJlIiwgImZpbmFsTm9vcENoZWNrIiwgInNlbGVjdGVkU3RhdGUiLCAidXNlU2VsZWN0b3IiLCAiaW1wb3J0X3JlYWN0X2lzIiwgImNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbiIsICJmaXJzdCIsICJsYXN0IiwgImxpc3RlbmVyIiwgImxpc3RlbmVycyIsICJpc1N1YnNjcmliZWQiLCAibnVsbExpc3RlbmVycyIsICJjcmVhdGVTdWJzY3JpcHRpb24iLCAicGFyZW50U3ViIiwgInVuc3Vic2NyaWJlIiwgInN1YnNjcmlwdGlvbnNBbW91bnQiLCAic2VsZlN1YnNjcmliZWQiLCAiYWRkTmVzdGVkU3ViIiwgInRyeVN1YnNjcmliZSIsICJjbGVhbnVwTGlzdGVuZXIiLCAicmVtb3ZlZCIsICJ0cnlVbnN1YnNjcmliZSIsICJub3RpZnlOZXN0ZWRTdWJzIiwgImhhbmRsZUNoYW5nZVdyYXBwZXIiLCAidHJ5U3Vic2NyaWJlU2VsZiIsICJ0cnlVbnN1YnNjcmliZVNlbGYiLCAiY2FuVXNlRE9NIiwgInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCAidXNlU3luY0V4dGVybmFsU3RvcmUiLCAiaW5pdGlhbGl6ZUNvbm5lY3QiLCAiUHJvdmlkZXIiLCAic2VydmVyU3RhdGUiLCAiY29udGV4dFZhbHVlIiwgInByZXZpb3VzU3RhdGUiLCAiUHJvdmlkZXJfZGVmYXVsdCIsICJjcmVhdGVTdG9yZUhvb2siLCAidXNlU3RvcmUiLCAiY3JlYXRlRGlzcGF0Y2hIb29rIiwgInVzZURpc3BhdGNoIiwgInVzZUFwcERpc3BhdGNoIiwgInVzZUFwcFNlbGVjdG9yIiwgImRpZSIsICJlcnJvciIsICJtc2ciLCAiRXJyb3IiLCAiam9pbiIsICJpc0RyYWZ0IiwgIkRSQUZUX1NUQVRFIiwgImlzRHJhZnRhYmxlIiwgInByb3RvIiwgIk9iamVjdCIsICJDdG9yIiwgImNhbGwiLCAiY29uc3RydWN0b3IiLCAiRnVuY3Rpb24iLCAidG9TdHJpbmciLCAib2JqZWN0Q3RvclN0cmluZyIsICJBcnJheSIsICJpc0FycmF5IiwgIkRSQUZUQUJMRSIsICJfdmFsdWUkY29uc3RydWN0b3IiLCAiaXNNYXAiLCAiaXNTZXQiLCAiZWFjaCIsICJlbnVtZXJhYmxlT25seSIsICJnZXRBcmNodHlwZSIsICJvd25LZXlzIiwgImZvckVhY2giLCAidGhpbmciLCAidHlwZV8iLCAiaGFzIiwgImdldCIsICJzZXQiLCAicHJvcE9yT2xkVmFsdWUiLCAiYWRkIiwgImlzIiwgImhhc01hcCIsICJNYXAiLCAiaGFzU2V0IiwgIlNldCIsICJsYXRlc3QiLCAiY29weV8iLCAiYmFzZV8iLCAic2hhbGxvd0NvcHkiLCAiZGVzY3JpcHRvcnMiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICJkZXNjIiwgIndyaXRhYmxlIiwgImNvbmZpZ3VyYWJsZSIsICJlbnVtZXJhYmxlIiwgImZyZWV6ZSIsICJkZWVwIiwgImlzRnJvemVuIiwgImNsZWFyIiwgImRlbGV0ZSIsICJkb250TXV0YXRlRnJvemVuQ29sbGVjdGlvbnMiLCAiZ2V0UGx1Z2luIiwgInBsdWdpbktleSIsICJwbHVnaW4iLCAicGx1Z2lucyIsICJsb2FkUGx1Z2luIiwgImltcGxlbWVudGF0aW9uIiwgImdldEN1cnJlbnRTY29wZSIsICJjdXJyZW50U2NvcGUiLCAidXNlUGF0Y2hlc0luU2NvcGUiLCAic2NvcGUiLCAicGF0Y2hMaXN0ZW5lciIsICJwYXRjaGVzXyIsICJpbnZlcnNlUGF0Y2hlc18iLCAicGF0Y2hMaXN0ZW5lcl8iLCAicmV2b2tlU2NvcGUiLCAibGVhdmVTY29wZSIsICJkcmFmdHNfIiwgInJldm9rZURyYWZ0IiwgInBhcmVudF8iLCAiZW50ZXJTY29wZSIsICJpbW1lciIsICJpbW1lcl8iLCAiY2FuQXV0b0ZyZWV6ZV8iLCAidW5maW5hbGl6ZWREcmFmdHNfIiwgImRyYWZ0IiwgInJldm9rZV8iLCAicmV2b2tlZF8iLCAicHJvY2Vzc1Jlc3VsdCIsICJiYXNlRHJhZnQiLCAiaXNSZXBsYWNlZCIsICJ1c2VQcm94aWVzXyIsICJ3aWxsRmluYWxpemVFUzVfIiwgIm1vZGlmaWVkXyIsICJmaW5hbGl6ZSIsICJtYXliZUZyZWV6ZSIsICJnZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc18iLCAiTk9USElORyIsICJ1bmRlZmluZWQiLCAicm9vdFNjb3BlIiwgImNoaWxkVmFsdWUiLCAiZmluYWxpemVQcm9wZXJ0eSIsICJzY29wZV8iLCAiZmluYWxpemVkXyIsICJkcmFmdF8iLCAicmVzdWx0RWFjaCIsICJnZW5lcmF0ZVBhdGNoZXNfIiwgInBhcmVudFN0YXRlIiwgInRhcmdldE9iamVjdCIsICJyb290UGF0aCIsICJ0YXJnZXRJc1NldCIsICJyZXMiLCAiYXNzaWduZWRfIiwgImNvbmNhdCIsICJhdXRvRnJlZXplXyIsICJnZXREZXNjcmlwdG9yRnJvbVByb3RvIiwgIm1hcmtDaGFuZ2VkIiwgInByZXBhcmVDb3B5IiwgImNyZWF0ZVByb3h5IiwgInByb3h5TWFwXyIsICJwcm94eVNldF8iLCAiaXNNYW51YWxfIiwgInRyYXBzIiwgIm9iamVjdFRyYXBzIiwgImFycmF5VHJhcHMiLCAiUHJveHkiLCAicmV2b2NhYmxlIiwgInJldm9rZSIsICJwcm94eSIsICJjcmVhdGVFUzVQcm94eV8iLCAicHVzaCIsICJjdXJyZW50SW1wbCIsICJhcmNoVHlwZSIsICJoYXNDaGFuZ2VzXyIsICJjb3B5SGVscGVyIiwgImVuYWJsZUVTNSIsICJwcm94eVByb3BlcnR5IiwgInRoaXMiLCAibWFya0NoYW5nZXNTd2VlcCIsICJkcmFmdHMiLCAiaGFzQXJyYXlDaGFuZ2VzIiwgImhhc09iamVjdENoYW5nZXMiLCAiYmFzZVZhbHVlIiwgImJhc2VJc0RyYWZ0IiwgImFzc2VydFVucmV2b2tlZCIsICJKU09OIiwgIm1hcmtDaGFuZ2VzUmVjdXJzaXZlbHkiLCAiTWF0aCIsICJoYXNTeW1ib2wiLCAiU3ltYm9sIiwgImhhc1Byb3hpZXMiLCAiUmVmbGVjdCIsICJmb3IiLCAiX2Rlc2MkZ2V0IiwgImN1cnJlbnRTdGF0ZSIsICJOdW1iZXIiLCAiaXNOYU4iLCAiZGVsZXRlUHJvcGVydHkiLCAib3duZXIiLCAic2V0UHJvdG90eXBlT2YiLCAiYXJndW1lbnRzIiwgImFwcGx5IiwgIkltbWVyIiwgInJlY2lwZSIsICJkZWZhdWx0QmFzZSIsICJwcm9kdWNlIiwgIl90aGlzMiIsICJoYXNFcnJvciIsICJQcm9taXNlIiwgInRoZW4iLCAiaXAiLCAicHJvZHVjZVdpdGhQYXRjaGVzIiwgInBhdGNoZXMiLCAiaW52ZXJzZVBhdGNoZXMiLCAibmV4dFN0YXRlIiwgInVzZVByb3hpZXMiLCAic2V0VXNlUHJveGllcyIsICJhdXRvRnJlZXplIiwgInNldEF1dG9GcmVlemUiLCAiY3JlYXRlRHJhZnQiLCAiZmluaXNoRHJhZnQiLCAiYXBwbHlQYXRjaGVzIiwgInBhdGNoIiwgIm9wIiwgImFwcGx5UGF0Y2hlc0ltcGwiLCAiYXBwbHlQYXRjaGVzXyIsICJiaW5kIiwgIl90eXBlb2YiLCAidG9QcmltaXRpdmUiLCAidG9Qcm9wZXJ0eUtleSIsICJfZGVmaW5lUHJvcGVydHkiLCAiX29iamVjdFNwcmVhZDIiLCAiZm9ybWF0UHJvZEVycm9yTWVzc2FnZSIsICIkJG9ic2VydmFibGUiLCAicmFuZG9tU3RyaW5nIiwgIkFjdGlvblR5cGVzIiwgImNyZWF0ZVN0b3JlIiwgInJlZHVjZXIiLCAicHJlbG9hZGVkU3RhdGUiLCAiZW5oYW5jZXIiLCAiX3JlZjIiLCAiY3VycmVudFJlZHVjZXIiLCAiY3VycmVudExpc3RlbmVycyIsICJuZXh0TGlzdGVuZXJzIiwgImlzRGlzcGF0Y2hpbmciLCAiZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycyIsICJnZXRTdGF0ZSIsICJzdWJzY3JpYmUiLCAiZGlzcGF0Y2giLCAiYWN0aW9uIiwgInJlcGxhY2VSZWR1Y2VyIiwgIm5leHRSZWR1Y2VyIiwgIm9ic2VydmFibGUiLCAib3V0ZXJTdWJzY3JpYmUiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZVN0YXRlIiwgImFzc2VydFJlZHVjZXJTaGFwZSIsICJyZWR1Y2VycyIsICJpbml0aWFsU3RhdGUiLCAiY29tYmluZVJlZHVjZXJzIiwgInJlZHVjZXJLZXlzIiwgImZpbmFsUmVkdWNlcnMiLCAiZmluYWxSZWR1Y2VyS2V5cyIsICJ1bmV4cGVjdGVkS2V5Q2FjaGUiLCAic2hhcGVBc3NlcnRpb25FcnJvciIsICJ3YXJuaW5nTWVzc2FnZSIsICJoYXNDaGFuZ2VkIiwgInByZXZpb3VzU3RhdGVGb3JLZXkiLCAibmV4dFN0YXRlRm9yS2V5IiwgImFjdGlvblR5cGUiLCAiZnVuY3MiLCAiYXBwbHlNaWRkbGV3YXJlIiwgIm1pZGRsZXdhcmVzIiwgIl9kaXNwYXRjaCIsICJtaWRkbGV3YXJlQVBJIiwgImNoYWluIiwgImNyZWF0ZVRodW5rTWlkZGxld2FyZSIsICJleHRyYUFyZ3VtZW50IiwgInRodW5rIiwgImVzX2RlZmF1bHQiLCAiY29tcG9zZVdpdGhEZXZUb29scyIsICJkZXZUb29sc0VuaGFuY2VyIiwgIm5vb3AyIiwgImJhc2VQcm90byIsICJjcmVhdGVBY3Rpb24iLCAicHJlcGFyZUFjdGlvbiIsICJhY3Rpb25DcmVhdG9yIiwgInByZXBhcmVkIiwgIl9fc3ByZWFkVmFsdWVzIiwgIk1pZGRsZXdhcmVBcnJheSIsICJfc3VwZXIiLCAiX19leHRlbmRzIiwgImFyciIsICJfX3NwcmVhZEFycmF5IiwgIkVuaGFuY2VyQXJyYXkiLCAiZnJlZXplRHJhZnRhYmxlIiwgImltbWVyX2VzbV9kZWZhdWx0IiwgImlzQm9vbGVhbiIsICJjdXJyeUdldERlZmF1bHRNaWRkbGV3YXJlIiwgImdldERlZmF1bHRNaWRkbGV3YXJlIiwgIl9jIiwgIl9kIiwgImltbXV0YWJsZUNoZWNrIiwgIl9lIiwgInNlcmlhbGl6YWJsZUNoZWNrIiwgIl9mIiwgImFjdGlvbkNyZWF0b3JDaGVjayIsICJtaWRkbGV3YXJlQXJyYXkiLCAiaW1tdXRhYmxlT3B0aW9ucyIsICJzZXJpYWxpemFibGVPcHRpb25zIiwgImFjdGlvbkNyZWF0b3JPcHRpb25zIiwgIklTX1BST0RVQ1RJT04iLCAiY29uZmlndXJlU3RvcmUiLCAiY3VycmllZEdldERlZmF1bHRNaWRkbGV3YXJlIiwgImRldlRvb2xzIiwgIl9nIiwgIl9oIiwgImVuaGFuY2VycyIsICJyb290UmVkdWNlciIsICJmaW5hbE1pZGRsZXdhcmUiLCAibWlkZGxld2FyZUVuaGFuY2VyIiwgImZpbmFsQ29tcG9zZSIsICJkZWZhdWx0RW5oYW5jZXJzIiwgInN0b3JlRW5oYW5jZXJzIiwgImNvbXBvc2VkRW5oYW5jZXIiLCAiZXhlY3V0ZVJlZHVjZXJCdWlsZGVyQ2FsbGJhY2siLCAiYnVpbGRlckNhbGxiYWNrIiwgImFjdGlvbnNNYXAiLCAiYWN0aW9uTWF0Y2hlcnMiLCAiZGVmYXVsdENhc2VSZWR1Y2VyIiwgImJ1aWxkZXIiLCAidHlwZU9yQWN0aW9uQ3JlYXRvciIsICJtYXRjaGVyIiwgImlzU3RhdGVGdW5jdGlvbiIsICJjcmVhdGVSZWR1Y2VyIiwgIm1hcE9yQnVpbGRlckNhbGxiYWNrIiwgImZpbmFsQWN0aW9uTWF0Y2hlcnMiLCAiZmluYWxEZWZhdWx0Q2FzZVJlZHVjZXIiLCAiZ2V0SW5pdGlhbFN0YXRlIiwgImZyb3plbkluaXRpYWxTdGF0ZV8xIiwgImNhc2VSZWR1Y2VycyIsICJyZWR1Y2VyMiIsICJjciIsICJjYXNlUmVkdWNlciIsICJnZXRUeXBlMiIsICJhY3Rpb25LZXkiLCAiY3JlYXRlU2xpY2UiLCAicmVkdWNlck5hbWVzIiwgInNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lIiwgInNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlIiwgImFjdGlvbkNyZWF0b3JzIiwgInJlZHVjZXJOYW1lIiwgIm1heWJlUmVkdWNlcldpdGhQcmVwYXJlIiwgInByZXBhcmVDYWxsYmFjayIsICJidWlsZFJlZHVjZXIiLCAiZXh0cmFSZWR1Y2VycyIsICJmaW5hbENhc2VSZWR1Y2VycyIsICJhY3Rpb25NYXRjaGVyc18xIiwgIl9yZWR1Y2VyIiwgInVybEFscGhhYmV0IiwgIm5hbm9pZCIsICJjb21tb25Qcm9wZXJ0aWVzIiwgIlJlamVjdFdpdGhWYWx1ZSIsICJwYXlsb2FkIiwgIm1ldGEiLCAiRnVsZmlsbFdpdGhNZXRhIiwgIm1pbmlTZXJpYWxpemVFcnJvciIsICJzaW1wbGVFcnJvciIsICJjb21tb25Qcm9wZXJ0aWVzXzEiLCAiY3JlYXRlQXN5bmNUaHVuayIsICJjcmVhdGVBc3luY1RodW5rMiIsICJ0eXBlUHJlZml4IiwgInBheWxvYWRDcmVhdG9yIiwgImZ1bGZpbGxlZCIsICJyZXF1ZXN0SWQiLCAiX19zcHJlYWRQcm9wcyIsICJwZW5kaW5nIiwgInJlamVjdGVkIiwgImRpc3BsYXllZFdhcm5pbmciLCAiQUMiLCAiY2xhc3NfMSIsICJleHRyYSIsICJhYm9ydENvbnRyb2xsZXIiLCAiYWJvcnRSZWFzb24iLCAic3RhcnRlZCIsICJhYm9ydCIsICJyZWFzb24iLCAicHJvbWlzZTIiLCAiX19hc3luYyIsICJjb25kaXRpb25SZXN1bHQiLCAiX2EiLCAiaXNUaGVuYWJsZSIsICJhYm9ydGVkUHJvbWlzZSIsICJfIiwgInJlamVjdCIsICJfYiIsICJmaW5hbEFjdGlvbiIsICJlcnJfMSIsICJza2lwRGlzcGF0Y2giLCAidW53cmFwUmVzdWx0IiwgInRhc2siLCAiY29tcGxldGVkIiwgImNhbmNlbGxlZCIsICJ0YXNrQ2FuY2VsbGVkIiwgInRhc2tDb21wbGV0ZWQiLCAibGlzdGVuZXJDYW5jZWxsZWQiLCAibGlzdGVuZXJDb21wbGV0ZWQiLCAiVGFza0Fib3J0RXJyb3IiLCAiYWxtIiwgImFkZExpc3RlbmVyIiwgImNsZWFyQWxsTGlzdGVuZXJzIiwgInJlbW92ZUxpc3RlbmVyIiwgInByb21pc2UiLCAicXVldWVNaWNyb3Rhc2tTaGltIiwgImNyZWF0ZVF1ZXVlV2l0aFRpbWVyIiwgInRpbWVvdXQiLCAibm90aWZ5IiwgInJBRiIsICJyZXF1ZXN0IiwgInJlcVBhcmFtcyIsICJpbml0IiwgImFwaVVybCIsICJtZXNzYWdlIiwgIlBhZ2UiLCAiX1BhZ2UiLCAicGFnZSIsICJudW1FbGVtZW50cyIsICJ0b3RhbFBhZ2VzIiwgInRvdGFsRWxlbWVudHMiLCAiZWxlbWVudHMiLCAiZmFjZXRGaWVsZHNUb0NvdW50cyIsICJnZXRQYWdpbmF0ZWQiLCAibm9ybWFsaXplIiwgInN0ckFycmF5IiwgInJlc3VsdEFycmF5IiwgInBhcnRzIiwgInVybEpvaW4iLCAiZ2V0U3RhdHMiLCAicmVqZWN0V2l0aFZhbHVlIiwgImdldEJhbm5lclRleHQiLCAiaG9tZVNsaWNlIiwgImhvbWVTbGljZV9kZWZhdWx0IiwgIlJlaWZpZWQiLCAiX1JlaWZpZWQiLCAiYXhpb21zIiwgImpzb25Ob2RlIiwgImF4aW9tIiwgImV4aXN0aW5nIiwgIkxpbmtlZEVudGl0aWVzIiwgIl9MaW5rZWRFbnRpdGllcyIsICJsaW5rZWRFbnRpdGllcyIsICJpcmkiLCAibGlua2VkRW50aXR5IiwgIlRoaW5nIiwgInR5cGVzIiwgImFzQXJyYXkiLCAibGFiZWxzIiwgImRlZmluaXRpb24iLCAiZGVmIiwgIkVudGl0eSIsICJkZWZpbml0aW9uUHJvcGVydGllcyIsICJzeW5vbnltUHJvcGVydGllcyIsICJoaWVyYXJjaGljYWxQcm9wZXJ0aWVzIiwgImFubm90YXRpb25QcmVkaWNhdGVzIiwgInByZWRpY2F0ZSIsICJwYXJlbnRJcmkiLCAiaGllcmFyY2hpY2FsUGFyZW50cyIsICJDbGFzcyIsICJJbmRpdmlkdWFsIiwgInJkZlR5cGVzIiwgIlByb3BlcnR5IiwgInRoaW5nRnJvbUpzb25Qcm9wZXJ0aWVzIiwgIm1hcFRvQXBpUGFyYW1zIiwgInNlYXJjaFBhcmFtcyIsICJzZWFyY2hQYXJhbXNDb3B5IiwgIm5ld0tleSIsICJ0b0NhbWVsIiwgIiQxIiwgIk9udG9sb2d5IiwgIm5hbWVzIiwgImRlc2NyaXB0aW9ucyIsICJ2ZXJzaW9uSXJpIiwgInZlcnNpb25Gcm9tRGF0ZSIsICJ2ZXJzaW9uRnJvbU51bWJlciIsICJpbXBvcnRfbXVsdGltYXAiLCAiZXh0cmFjdEVudGl0eUhpZXJhcmNoeSIsICJlbnRpdGllcyIsICJjaGlsZFRvUGFyZW50UmVsYXRpb25zIiwgInVyaVRvTm9kZSIsICJlbnRpdHkiLCAiaXNUb3AiLCAicGFyZW50UmVsYXRpb24iLCAicGFyZW50RW50aXR5IiwgInBhcmVudFJlbGF0aW9uVG9DaGlsZCIsICJjaGlsZFJlbGF0aW9uVG9QYXJlbnQiLCAicmVsYXRpb24iLCAiYnJlYWtDeWNsZXMiLCAiY3VycmVudElyaSIsICJ2aXNpdGVkSXJpcyIsICJwYXJlbnRSZWxhdGlvbnMiLCAicGFyZW50VG9DaGlsZFJlbGF0aW9ucyIsICJjaGlsZElyaSIsICJyZWxhdGlvbnMiLCAiY3JlYXRlVHJlZUZyb21FbnRpdGllcyIsICJwcmVmZXJyZWRSb290cyIsICJvbnRvbG9neSIsICJyb290RW50aXRpZXMiLCAicHJlZmVycmVkIiwgImFsbE5vZGVzIiwgIm5vZGVDaGlsZHJlbiIsICJhdXRvbWF0aWNhbGx5RXhwYW5kZWROb2RlcyIsICJyb290RW50aXR5IiwgImNyZWF0ZVRyZWVOb2RlIiwgImRlYnVnTnVtSXRlcmF0aW9ucyIsICJjaGlsZE5vZGVzIiwgInRyZWVOb2RlIiwgImNoaWxkTm9kZSIsICJyZXNldFRyZWVDb250ZW50IiwgInJlc2V0VHJlZVNldHRpbmdzIiwgImVuYWJsZVByZWZlcnJlZFJvb3RzIiwgImRpc2FibGVQcmVmZXJyZWRSb290cyIsICJvcGVuTm9kZSIsICJjbG9zZU5vZGUiLCAic2hvd09ic29sZXRlIiwgImhpZGVPYnNvbGV0ZSIsICJzaG93U2libGluZ3MiLCAiaGlkZVNpYmxpbmdzIiwgInNob3dDb3VudHMiLCAiaGlkZUNvdW50cyIsICJnZXRPbnRvbG9neSIsICJvbnRvbG9neUlkIiwgImxhbmciLCAib250b2xvZ3lQcm9wZXJ0aWVzIiwgImdldEVudGl0eVdpdGhUeXBlIiwgImVudGl0eVR5cGUiLCAiZW50aXR5SXJpIiwgImFwaVNlYXJjaFBhcmFtcyIsICJkb3VibGVFbmNvZGVkVGVybVVyaSIsICJlbnRpdHlKc29uUHJvcGVydGllcyIsICJyZXN1bHRzIiwgImdldEVudGl0eSIsICJnZXRDbGFzc0luc3RhbmNlcyIsICJjbGFzc0lyaSIsICJnZXRPbnRvbG9naWVzIiwgInJvd3NQZXJQYWdlIiwgImdldEVudGl0aWVzIiwgImdldEFuY2VzdG9ycyIsICJzaG93T2Jzb2xldGVFbmFibGVkIiwgImRvdWJsZUVuY29kZWRVcmkiLCAiYW5jZXN0b3JzUGFnZSIsICJnZXRSb290RW50aXRpZXMiLCAiY2xhc3Nlc1dpdGhJbmRpdmlkdWFscyIsICJvcnBoYW5lZEluZGl2aWR1YWxzIiwgInJvb3RzUGFnZSIsICJnZXROb2RlQ2hpbGRyZW4iLCAiZW50aXR5VHlwZVBsdXJhbCIsICJhYnNvbHV0ZUlkZW50aXR5IiwgImNoaWxkcmVuUGFnZSIsICJ0ZXJtIiwgInBhcmVudGhvb2RNZXRhZGF0YSIsICJvbnRvbG9naWVzU2xpY2UiLCAicm9vdE5vZGVzIiwgInJvb3RUZXJtcyIsICJzZWxlY3RlZElzRGVzY2VuZGFudE9mUHJlZmVycmVkUm9vdHMiLCAiYWJzSWQiLCAib250b2xvZ2llc1NsaWNlX2RlZmF1bHQiLCAiZ2V0U2VhcmNoUmVzdWx0cyIsICJxdWVyeSIsICJwYXJhbSIsICJwYXJzZWRRdWVyeSIsICJzZWFyY2hTbGljZSIsICJzZWFyY2hTbGljZV9kZWZhdWx0IiwgImNvbW1vbiIsICJjb21tb25fZGVmYXVsdCIsICJyZWQiLCAicmVkX2RlZmF1bHQiLCAicHVycGxlIiwgInB1cnBsZV9kZWZhdWx0IiwgImJsdWUiLCAiYmx1ZV9kZWZhdWx0IiwgImxpZ2h0Qmx1ZSIsICJsaWdodEJsdWVfZGVmYXVsdCIsICJncmVlbiIsICJncmVlbl9kZWZhdWx0IiwgIm9yYW5nZSIsICJvcmFuZ2VfZGVmYXVsdCIsICJncmV5IiwgImdyZXlfZGVmYXVsdCIsICJpZGVudGlmaWVyX2RlZmF1bHQiLCAiaW1wb3J0X3N0eWxlZF9lbmdpbmUiLCAiaW1wb3J0X2RlZXBtZXJnZSIsICJzaGFwZV9kZWZhdWx0IiwgIm1lcmdlX2RlZmF1bHQiLCAiaW1wb3J0X2NhcGl0YWxpemUiLCAic3R5bGVfZGVmYXVsdCIsICJjb21wb3NlX2RlZmF1bHQiLCAiZGVmYXVsdFN4Q29uZmlnX2RlZmF1bHQiLCAic3R5bGVGdW5jdGlvblN4X2RlZmF1bHQiLCAiY3JlYXRlVGhlbWVfZGVmYXVsdCIsICJpc09iamVjdEVtcHR5IiwgImNvbnRleHRUaGVtZSIsICJ1c2VUaGVtZVdpdGhvdXREZWZhdWx0X2RlZmF1bHQiLCAidXNlVGhlbWVfZGVmYXVsdCIsICJkZWZhdWx0R2VuZXJhdG9yIiwgImNyZWF0ZUNsYXNzTmFtZUdlbmVyYXRvciIsICJnZW5lcmF0ZSIsICJnZW5lcmF0b3IiLCAiQ2xhc3NOYW1lR2VuZXJhdG9yIiwgIkNsYXNzTmFtZUdlbmVyYXRvcl9kZWZhdWx0IiwgImNsc3giLCAiY2xzeF9kZWZhdWx0IiwgImdsb2JhbFN0YXRlQ2xhc3NlcyIsICJnZW5lcmF0ZVV0aWxpdHlDbGFzcyIsICJnbG9iYWxTdGF0ZVByZWZpeCIsICJnbG9iYWxTdGF0ZUNsYXNzIiwgImdlbmVyYXRlVXRpbGl0eUNsYXNzZXMiLCAic2xvdHMiLCAicHJvY2Vzc1N0eWxlcyIsICJzdHlsZWRFbmdpbmVTdHlsZWQiLCAic3R5bGVkX2RlZmF1bHQiLCAicmVzb2x2ZVByb3BzIiwgImRlZmF1bHRQcm9wcyIsICJkZWZhdWx0U2xvdFByb3BzIiwgInNsb3RQcm9wcyIsICJzbG90UHJvcE5hbWUiLCAiZ2V0VGhlbWVQcm9wcyIsICJwYXJhbXMiLCAidXNlVGhlbWVQcm9wcyIsICJ1c2VFbmhhbmNlZEVmZmVjdCIsICJ1c2VFbmhhbmNlZEVmZmVjdF9kZWZhdWx0IiwgImNyZWF0ZUNoYWluZWRGdW5jdGlvbiIsICJpc011aUVsZW1lbnQiLCAibXVpTmFtZXMiLCAiX211aU5hbWUiLCAiX2VsZW1lbnQkdHlwZSIsICJzZXRSZWYiLCAiZ2xvYmFsSWQiLCAidXNlR2xvYmFsSWQiLCAiaWRPdmVycmlkZSIsICJkZWZhdWx0SWQiLCAic2V0RGVmYXVsdElkIiwgIm1heWJlUmVhY3RVc2VJZCIsICJ1c2VJZCIsICJyZWFjdElkIiwgInVzZUNvbnRyb2xsZWQiLCAiY29udHJvbGxlZCIsICJkZWZhdWx0UHJvcCIsICJpc0NvbnRyb2xsZWQiLCAidmFsdWVTdGF0ZSIsICJzZXRWYWx1ZSIsICJzZXRWYWx1ZUlmVW5jb250cm9sbGVkIiwgIm5ld1ZhbHVlIiwgInVzZUV2ZW50Q2FsbGJhY2siLCAidXNlRXZlbnRDYWxsYmFja19kZWZhdWx0IiwgInVzZUZvcmtSZWYiLCAicmVmcyIsICJpbnN0YW5jZSIsICJVTklOSVRJQUxJWkVEIiwgInVzZUxhenlSZWYiLCAiaW5pdEFyZyIsICJFTVBUWSIsICJ1c2VPbk1vdW50IiwgIlRpbWVvdXQiLCAiX1RpbWVvdXQiLCAiZGVsYXkiLCAidXNlVGltZW91dCIsICJoYWRLZXlib2FyZEV2ZW50IiwgImhhZEZvY3VzVmlzaWJsZVJlY2VudGx5IiwgImhhZEZvY3VzVmlzaWJsZVJlY2VudGx5VGltZW91dCIsICJpbnB1dFR5cGVzV2hpdGVsaXN0IiwgImZvY3VzVHJpZ2dlcnNLZXlib2FyZE1vZGFsaXR5IiwgImhhbmRsZUtleURvd24iLCAiZXZlbnQiLCAiaGFuZGxlUG9pbnRlckRvd24iLCAiaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSIsICJwcmVwYXJlIiwgImRvYyIsICJpc0ZvY3VzVmlzaWJsZSIsICJ1c2VJc0ZvY3VzVmlzaWJsZSIsICJpc0ZvY3VzVmlzaWJsZVJlZiIsICJoYW5kbGVCbHVyVmlzaWJsZSIsICJoYW5kbGVGb2N1c1Zpc2libGUiLCAiY29tcG9zZUNsYXNzZXMiLCAiZ2V0VXRpbGl0eUNsYXNzIiwgImNsYXNzZXMiLCAidXRpbGl0eUNsYXNzIiwgImltcG9ydF9qc3hfcnVudGltZSIsICJkZWZhdWx0Q3JlYXRlU3R5bGVkQ29tcG9uZW50IiwgInVzZVRoZW1lUHJvcHNEZWZhdWx0IiwgImpvaW5DaGlsZHJlbiIsICJzZXBhcmF0b3IiLCAiY2hpbGRyZW5BcnJheSIsICJjaGlsZCIsICJnZXRTaWRlRnJvbURpcmVjdGlvbiIsICJkaXJlY3Rpb25WYWx1ZXMiLCAic3BhY2luZ1ZhbHVlcyIsICJwcmV2aW91c0RpcmVjdGlvblZhbHVlIiwgImNyZWF0ZVN0YWNrIiwgImNyZWF0ZVN0eWxlZENvbXBvbmVudCIsICJ1c2VVdGlsaXR5Q2xhc3NlcyIsICJTdGFja1Jvb3QiLCAiaW5Qcm9wcyIsICJ0aGVtZVByb3BzIiwgImRpdmlkZXIiLCAidXNlRmxleEdhcCIsICJfanN4IiwgImltcG9ydF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UiLCAiaW1wb3J0X3N0eWxlRnVuY3Rpb25TeCIsICJpbXBvcnRfY3JlYXRlVGhlbWUiLCAiY3JlYXRlTWl4aW5zIiwgIm1peGlucyIsICJpbXBvcnRfY29sb3JNYW5pcHVsYXRvciIsICJsaWdodCIsICJkYXJrIiwgImFkZExpZ2h0T3JEYXJrIiwgImludGVudCIsICJzaGFkZSIsICJ0b25hbE9mZnNldCIsICJ0b25hbE9mZnNldExpZ2h0IiwgInRvbmFsT2Zmc2V0RGFyayIsICJnZXREZWZhdWx0UHJpbWFyeSIsICJtb2RlIiwgImdldERlZmF1bHRTZWNvbmRhcnkiLCAiZ2V0RGVmYXVsdEVycm9yIiwgImdldERlZmF1bHRJbmZvIiwgImdldERlZmF1bHRTdWNjZXNzIiwgImdldERlZmF1bHRXYXJuaW5nIiwgImNyZWF0ZVBhbGV0dGUiLCAiY29udHJhc3RUaHJlc2hvbGQiLCAicHJpbWFyeSIsICJzZWNvbmRhcnkiLCAiaW5mbyIsICJzdWNjZXNzIiwgImdldENvbnRyYXN0VGV4dCIsICJhdWdtZW50Q29sb3IiLCAibWFpblNoYWRlIiwgImxpZ2h0U2hhZGUiLCAiZGFya1NoYWRlIiwgIm1vZGVzIiwgInJvdW5kIiwgImNhc2VBbGxDYXBzIiwgImRlZmF1bHRGb250RmFtaWx5IiwgImNyZWF0ZVR5cG9ncmFwaHkiLCAidHlwb2dyYXBoeSIsICJmb250RmFtaWx5IiwgImZvbnRTaXplIiwgImZvbnRXZWlnaHRMaWdodCIsICJmb250V2VpZ2h0UmVndWxhciIsICJmb250V2VpZ2h0TWVkaXVtIiwgImZvbnRXZWlnaHRCb2xkIiwgImh0bWxGb250U2l6ZSIsICJhbGxWYXJpYW50cyIsICJweFRvUmVtMiIsICJjb2VmIiwgInB4VG9SZW0iLCAiYnVpbGRWYXJpYW50IiwgImZvbnRXZWlnaHQiLCAibGluZUhlaWdodCIsICJsZXR0ZXJTcGFjaW5nIiwgImNhc2luZyIsICJjcmVhdGVTaGFkb3ciLCAicHgiLCAic2hhZG93cyIsICJzaGFkb3dzX2RlZmF1bHQiLCAiZWFzaW5nIiwgImR1cmF0aW9uIiwgImZvcm1hdE1zIiwgIm1pbGxpc2Vjb25kcyIsICJnZXRBdXRvSGVpZ2h0RHVyYXRpb24iLCAiY29uc3RhbnQiLCAiY3JlYXRlVHJhbnNpdGlvbnMiLCAiaW5wdXRUcmFuc2l0aW9ucyIsICJtZXJnZWRFYXNpbmciLCAibWVyZ2VkRHVyYXRpb24iLCAiZHVyYXRpb25PcHRpb24iLCAiZWFzaW5nT3B0aW9uIiwgImFuaW1hdGVkUHJvcCIsICJ6SW5kZXgiLCAiekluZGV4X2RlZmF1bHQiLCAibWl4aW5zSW5wdXQiLCAidHJhbnNpdGlvbnNJbnB1dCIsICJ0eXBvZ3JhcGh5SW5wdXQiLCAic3lzdGVtVGhlbWUiLCAic3lzdGVtQ3JlYXRlVGhlbWUiLCAiZGVmYXVsdFRoZW1lX2RlZmF1bHQiLCAiaW1wb3J0X2NyZWF0ZVN0eWxlZCIsICJjYXBpdGFsaXplX2RlZmF1bHQiLCAiY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uX2RlZmF1bHQiLCAiZ2V0U3ZnSWNvblV0aWxpdHlDbGFzcyIsICJzdmdJY29uQ2xhc3NlcyIsICJTdmdJY29uUm9vdCIsICJfdGhlbWUkdHJhbnNpdGlvbnMiLCAiX3RoZW1lJHRyYW5zaXRpb25zJGNyIiwgIl90aGVtZSR0cmFuc2l0aW9uczIiLCAiX3RoZW1lJHR5cG9ncmFwaHkiLCAiX3RoZW1lJHR5cG9ncmFwaHkkcHhUIiwgIl90aGVtZSR0eXBvZ3JhcGh5MiIsICJfdGhlbWUkdHlwb2dyYXBoeTIkcHgiLCAiX3RoZW1lJHR5cG9ncmFwaHkzIiwgIl90aGVtZSR0eXBvZ3JhcGh5MyRweCIsICJfcGFsZXR0ZSRvd25lclN0YXRlJGMiLCAiX3BhbGV0dGUyIiwgIl9wYWxldHRlMyIsICJTdmdJY29uIiwgImh0bWxDb2xvciIsICJpbmhlcml0Vmlld0JveCIsICJ0aXRsZUFjY2VzcyIsICJ2aWV3Qm94IiwgImhhc1N2Z0FzQ2hpbGQiLCAibW9yZSIsICJfanN4cyIsICJTdmdJY29uX2RlZmF1bHQiLCAiY3JlYXRlU3ZnSWNvbiIsICJkaXNwbGF5TmFtZSIsICJpc011aUVsZW1lbnRfZGVmYXVsdCIsICJ1c2VJZF9kZWZhdWx0IiwgInVzZUNvbnRyb2xsZWRfZGVmYXVsdCIsICJ1c2VGb3JrUmVmX2RlZmF1bHQiLCAidXNlSXNGb2N1c1Zpc2libGVfZGVmYXVsdCIsICJfc2V0UHJvdG90eXBlT2YiLCAiX2luaGVyaXRzTG9vc2UiLCAic3ViQ2xhc3MiLCAic3VwZXJDbGFzcyIsICJUcmFuc2l0aW9uR3JvdXBDb250ZXh0X2RlZmF1bHQiLCAiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsICJnZXRDaGlsZE1hcHBpbmciLCAibWFwRm4iLCAibWFwcGVyIiwgIm1lcmdlQ2hpbGRNYXBwaW5ncyIsICJnZXRWYWx1ZUZvcktleSIsICJuZXh0S2V5c1BlbmRpbmciLCAicGVuZGluZ0tleXMiLCAicHJldktleSIsICJjaGlsZE1hcHBpbmciLCAibmV4dEtleSIsICJwZW5kaW5nTmV4dEtleSIsICJnZXRQcm9wIiwgImdldEluaXRpYWxDaGlsZE1hcHBpbmciLCAib25FeGl0ZWQiLCAiZ2V0TmV4dENoaWxkTWFwcGluZyIsICJuZXh0UHJvcHMiLCAicHJldkNoaWxkTWFwcGluZyIsICJuZXh0Q2hpbGRNYXBwaW5nIiwgImhhc1ByZXYiLCAiaGFzTmV4dCIsICJwcmV2Q2hpbGQiLCAiaXNMZWF2aW5nIiwgIlRyYW5zaXRpb25Hcm91cCIsICJfUmVhY3QkQ29tcG9uZW50IiwgImhhbmRsZUV4aXRlZCIsICJmaXJzdFJlbmRlciIsICJjdXJyZW50Q2hpbGRNYXBwaW5nIiwgIl90aGlzJHByb3BzIiwgImNoaWxkRmFjdG9yeSIsICJUcmFuc2l0aW9uR3JvdXBfZGVmYXVsdCIsICJSaXBwbGUiLCAicHVsc2F0ZSIsICJyaXBwbGVYIiwgInJpcHBsZVkiLCAicmlwcGxlU2l6ZSIsICJpblByb3AiLCAibGVhdmluZyIsICJzZXRMZWF2aW5nIiwgInJpcHBsZUNsYXNzTmFtZSIsICJyaXBwbGVTdHlsZXMiLCAiY2hpbGRDbGFzc05hbWUiLCAidGltZW91dElkIiwgIlJpcHBsZV9kZWZhdWx0IiwgInRvdWNoUmlwcGxlQ2xhc3NlcyIsICJ0b3VjaFJpcHBsZUNsYXNzZXNfZGVmYXVsdCIsICJfdCIsICJfdDIiLCAiX3QzIiwgIl90NCIsICJEVVJBVElPTiIsICJERUxBWV9SSVBQTEUiLCAiZW50ZXJLZXlmcmFtZSIsICJleGl0S2V5ZnJhbWUiLCAicHVsc2F0ZUtleWZyYW1lIiwgIlRvdWNoUmlwcGxlUm9vdCIsICJUb3VjaFJpcHBsZVJpcHBsZSIsICJUb3VjaFJpcHBsZSIsICJjZW50ZXJQcm9wIiwgInJpcHBsZXMiLCAic2V0UmlwcGxlcyIsICJyaXBwbGVDYWxsYmFjayIsICJpZ25vcmluZ01vdXNlRG93biIsICJzdGFydFRpbWVyIiwgInN0YXJ0VGltZXJDb21taXQiLCAic3RhcnRDb21taXQiLCAib2xkUmlwcGxlcyIsICJjZW50ZXIiLCAiZmFrZUVsZW1lbnQiLCAicmVjdCIsICJjbGllbnRYIiwgImNsaWVudFkiLCAic2l6ZVgiLCAic2l6ZVkiLCAic3RvcCIsICJUb3VjaFJpcHBsZV9kZWZhdWx0IiwgImdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MiLCAiYnV0dG9uQmFzZUNsYXNzZXMiLCAiYnV0dG9uQmFzZUNsYXNzZXNfZGVmYXVsdCIsICJkaXNhYmxlZCIsICJmb2N1c1Zpc2libGUiLCAiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lIiwgImNvbXBvc2VkQ2xhc3NlcyIsICJCdXR0b25CYXNlUm9vdCIsICJCdXR0b25CYXNlIiwgImNlbnRlclJpcHBsZSIsICJkaXNhYmxlUmlwcGxlIiwgImRpc2FibGVUb3VjaFJpcHBsZSIsICJmb2N1c1JpcHBsZSIsICJMaW5rQ29tcG9uZW50IiwgIm9uQmx1ciIsICJvbkNsaWNrIiwgIm9uQ29udGV4dE1lbnUiLCAib25EcmFnTGVhdmUiLCAib25Gb2N1cyIsICJvbkZvY3VzVmlzaWJsZSIsICJvbktleURvd24iLCAib25LZXlVcCIsICJvbk1vdXNlRG93biIsICJvbk1vdXNlTGVhdmUiLCAib25Nb3VzZVVwIiwgIm9uVG91Y2hFbmQiLCAib25Ub3VjaE1vdmUiLCAib25Ub3VjaFN0YXJ0IiwgInRhYkluZGV4IiwgIlRvdWNoUmlwcGxlUHJvcHMiLCAidG91Y2hSaXBwbGVSZWYiLCAiYnV0dG9uUmVmIiwgInJpcHBsZVJlZiIsICJoYW5kbGVSaXBwbGVSZWYiLCAiZm9jdXNWaXNpYmxlUmVmIiwgInNldEZvY3VzVmlzaWJsZSIsICJtb3VudGVkU3RhdGUiLCAic2V0TW91bnRlZFN0YXRlIiwgImVuYWJsZVRvdWNoUmlwcGxlIiwgInVzZVJpcHBsZUhhbmRsZXIiLCAicmlwcGxlQWN0aW9uIiwgImV2ZW50Q2FsbGJhY2siLCAic2tpcFJpcHBsZUFjdGlvbiIsICJoYW5kbGVNb3VzZURvd24iLCAiaGFuZGxlQ29udGV4dE1lbnUiLCAiaGFuZGxlRHJhZ0xlYXZlIiwgImhhbmRsZU1vdXNlVXAiLCAiaGFuZGxlTW91c2VMZWF2ZSIsICJoYW5kbGVUb3VjaFN0YXJ0IiwgImhhbmRsZVRvdWNoRW5kIiwgImhhbmRsZVRvdWNoTW92ZSIsICJoYW5kbGVCbHVyIiwgImhhbmRsZUZvY3VzIiwgImlzTm9uTmF0aXZlQnV0dG9uIiwgImJ1dHRvbiIsICJrZXlkb3duUmVmIiwgImhhbmRsZUtleVVwIiwgIkNvbXBvbmVudFByb3AiLCAiYnV0dG9uUHJvcHMiLCAiaGFuZGxlUmVmIiwgIkJ1dHRvbkJhc2VfZGVmYXVsdCIsICJnZXRUeXBvZ3JhcGh5VXRpbGl0eUNsYXNzIiwgInR5cG9ncmFwaHlDbGFzc2VzIiwgImFsaWduIiwgImd1dHRlckJvdHRvbSIsICJub1dyYXAiLCAicGFyYWdyYXBoIiwgIlR5cG9ncmFwaHlSb290IiwgImRlZmF1bHRWYXJpYW50TWFwcGluZyIsICJjb2xvclRyYW5zZm9ybWF0aW9ucyIsICJ0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzIiwgIlR5cG9ncmFwaHkiLCAidmFyaWFudE1hcHBpbmciLCAiVHlwb2dyYXBoeV9kZWZhdWx0IiwgImZvcm1Db250cm9sU3RhdGUiLCAic3RhdGVzIiwgIm11aUZvcm1Db250cm9sIiwgIkZvcm1Db250cm9sQ29udGV4dCIsICJGb3JtQ29udHJvbENvbnRleHRfZGVmYXVsdCIsICJ1c2VGb3JtQ29udHJvbCIsICJoYXNWYWx1ZSIsICJpc0ZpbGxlZCIsICJTU1IiLCAiaXNBZG9ybmVkU3RhcnQiLCAiZ2V0U3dpdGNoQmFzZVV0aWxpdHlDbGFzcyIsICJzd2l0Y2hCYXNlQ2xhc3NlcyIsICJjaGVja2VkIiwgImVkZ2UiLCAiU3dpdGNoQmFzZVJvb3QiLCAiU3dpdGNoQmFzZUlucHV0IiwgIlN3aXRjaEJhc2UiLCAiYXV0b0ZvY3VzIiwgImNoZWNrZWRQcm9wIiwgImNoZWNrZWRJY29uIiwgImRlZmF1bHRDaGVja2VkIiwgImRpc2FibGVkUHJvcCIsICJkaXNhYmxlRm9jdXNSaXBwbGUiLCAiaWNvbiIsICJpbnB1dFByb3BzIiwgImlucHV0UmVmIiwgIm9uQ2hhbmdlIiwgInJlYWRPbmx5IiwgInJlcXVpcmVkIiwgInNldENoZWNrZWRTdGF0ZSIsICJoYW5kbGVJbnB1dENoYW5nZSIsICJuZXdDaGVja2VkIiwgImhhc0xhYmVsRm9yIiwgIlN3aXRjaEJhc2VfZGVmYXVsdCIsICJDaGVja0JveE91dGxpbmVCbGFua19kZWZhdWx0IiwgIkNoZWNrQm94X2RlZmF1bHQiLCAiSW5kZXRlcm1pbmF0ZUNoZWNrQm94X2RlZmF1bHQiLCAiZ2V0Q2hlY2tib3hVdGlsaXR5Q2xhc3MiLCAiY2hlY2tib3hDbGFzc2VzIiwgImNoZWNrYm94Q2xhc3Nlc19kZWZhdWx0IiwgImluZGV0ZXJtaW5hdGUiLCAiQ2hlY2tib3hSb290IiwgImRlZmF1bHRDaGVja2VkSWNvbiIsICJkZWZhdWx0SWNvbiIsICJkZWZhdWx0SW5kZXRlcm1pbmF0ZUljb24iLCAiQ2hlY2tib3giLCAiX2ljb24kcHJvcHMkZm9udFNpemUiLCAiX2luZGV0ZXJtaW5hdGVJY29uJHByIiwgImljb25Qcm9wIiwgImluZGV0ZXJtaW5hdGVJY29uUHJvcCIsICJpbmRldGVybWluYXRlSWNvbiIsICJDaGVja2JveF9kZWZhdWx0IiwgImdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3MiLCAiY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMiLCAiU0laRSIsICJjaXJjdWxhclJvdGF0ZUtleWZyYW1lIiwgImNpcmN1bGFyRGFzaEtleWZyYW1lIiwgImRpc2FibGVTaHJpbmsiLCAiQ2lyY3VsYXJQcm9ncmVzc1Jvb3QiLCAiQ2lyY3VsYXJQcm9ncmVzc1NWRyIsICJDaXJjdWxhclByb2dyZXNzQ2lyY2xlIiwgIkNpcmN1bGFyUHJvZ3Jlc3MiLCAidGhpY2tuZXNzIiwgImNpcmNsZVN0eWxlIiwgInJvb3RTdHlsZSIsICJyb290UHJvcHMiLCAiY2lyY3VtZmVyZW5jZSIsICJDaXJjdWxhclByb2dyZXNzX2RlZmF1bHQiLCAiZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyIsICJmb3JtQ29udHJvbENsYXNzZXMiLCAiZnVsbFdpZHRoIiwgIkZvcm1Db250cm9sUm9vdCIsICJGb3JtQ29udHJvbCIsICJ2aXN1YWxseUZvY3VzZWQiLCAiaGlkZGVuTGFiZWwiLCAiYWRvcm5lZFN0YXJ0IiwgInNldEFkb3JuZWRTdGFydCIsICJpbml0aWFsQWRvcm5lZFN0YXJ0IiwgImZpbGxlZCIsICJzZXRGaWxsZWQiLCAiaW5pdGlhbEZpbGxlZCIsICJmb2N1c2VkU3RhdGUiLCAic2V0Rm9jdXNlZCIsICJmb2N1c2VkIiwgInJlZ2lzdGVyRWZmZWN0IiwgImNoaWxkQ29udGV4dCIsICJGb3JtQ29udHJvbF9kZWZhdWx0IiwgIlN0YWNrIiwgIlN0YWNrX2RlZmF1bHQiLCAiZ2V0Rm9ybUNvbnRyb2xMYWJlbFV0aWxpdHlDbGFzc2VzIiwgImZvcm1Db250cm9sTGFiZWxDbGFzc2VzIiwgImZvcm1Db250cm9sTGFiZWxDbGFzc2VzX2RlZmF1bHQiLCAibGFiZWxQbGFjZW1lbnQiLCAiRm9ybUNvbnRyb2xMYWJlbFJvb3QiLCAiQXN0ZXJpc2tDb21wb25lbnQiLCAiRm9ybUNvbnRyb2xMYWJlbCIsICJfc2xvdFByb3BzJHR5cG9ncmFwaHkiLCAiY29tcG9uZW50c1Byb3BzIiwgImNvbnRyb2wiLCAiZGlzYWJsZVR5cG9ncmFwaHkiLCAibGFiZWxQcm9wIiwgInJlcXVpcmVkUHJvcCIsICJjb250cm9sUHJvcHMiLCAiZmNzIiwgInR5cG9ncmFwaHlTbG90UHJvcHMiLCAiRm9ybUNvbnRyb2xMYWJlbF9kZWZhdWx0IiwgImdldEZvcm1Hcm91cFV0aWxpdHlDbGFzcyIsICJmb3JtR3JvdXBDbGFzc2VzIiwgInJvdyIsICJGb3JtR3JvdXBSb290IiwgIkZvcm1Hcm91cCIsICJGb3JtR3JvdXBfZGVmYXVsdCIsICJSYWRpb0J1dHRvblVuY2hlY2tlZF9kZWZhdWx0IiwgIlJhZGlvQnV0dG9uQ2hlY2tlZF9kZWZhdWx0IiwgIlJhZGlvQnV0dG9uSWNvblJvb3QiLCAiUmFkaW9CdXR0b25JY29uQmFja2dyb3VuZCIsICJSYWRpb0J1dHRvbkljb25Eb3QiLCAiUmFkaW9CdXR0b25JY29uIiwgIlJhZGlvQnV0dG9uSWNvbl9kZWZhdWx0IiwgIlJhZGlvR3JvdXBDb250ZXh0IiwgIlJhZGlvR3JvdXBDb250ZXh0X2RlZmF1bHQiLCAidXNlUmFkaW9Hcm91cCIsICJnZXRSYWRpb1V0aWxpdHlDbGFzcyIsICJyYWRpb0NsYXNzZXMiLCAicmFkaW9DbGFzc2VzX2RlZmF1bHQiLCAiUmFkaW9Sb290IiwgImFyZUVxdWFsVmFsdWVzIiwgIlJhZGlvIiwgIl9kZWZhdWx0SWNvbiRwcm9wcyRmbyIsICJfZGVmYXVsdENoZWNrZWRJY29uJHAiLCAibmFtZVByb3AiLCAib25DaGFuZ2VQcm9wIiwgInJhZGlvR3JvdXAiLCAiUmFkaW9fZGVmYXVsdCIsICJSYWRpb0dyb3VwIiwgImFjdGlvbnMiLCAidmFsdWVQcm9wIiwgInJvb3RSZWYiLCAic2V0VmFsdWVTdGF0ZSIsICJSYWRpb0dyb3VwX2RlZmF1bHQiLCAiTm9kZSIsICJleHBhbmRhYmxlIiwgImV4cGFuZGVkIiwgImhpZ2hsaWdodCIsICJpc0xhc3QiLCAiRW50aXR5VHJlZSIsICJzZWxlY3RlZEVudGl0eSIsICJvbk5hdmlnYXRlVG9FbnRpdHkiLCAib25OYXZpZ2F0ZVRvT250b2xvZ3kiLCAibm9kZXNXaXRoQ2hpbGRyZW5Mb2FkZWQiLCAibnVtUGVuZGluZ1RyZWVSZXF1ZXN0cyIsICJtYW51YWxseUV4cGFuZGVkTm9kZXMiLCAic2hvd1NpYmxpbmdzRW5hYmxlZCIsICJzaG93Q291bnRzRW5hYmxlZCIsICJ0b2dnbGVOb2RlIiwgImlzRXhwYW5kZWQiLCAibm9kZXNNaXNzaW5nQ2hpbGRyZW4iLCAicHJvbWlzZXMiLCAidG9nZ2xlU2hvd09ic29sZXRlIiwgInRvZ2dsZVNob3dTaWJsaW5ncyIsICJ0b2dnbGVTaG93Q291bnRzIiwgInJlbmRlck5vZGVDaGlsZHJlbiIsICJjaGlsZHJlbkNvcHkiLCAidGl0bGVBIiwgInRpdGxlQiIsICJjaGlsZHJlblNvcnRlZCIsICJUcmVlTGluayIsICJ0aXRsZSIsICJkZWZpbmVkQnkiLCAiZGVmaW5pbmdPbnRvbG9neSIsICJTdWJzY3JpYmFibGUiLCAiaXNTZXJ2ZXIiLCAibm9vcCIsICJmdW5jdGlvbmFsVXBkYXRlIiwgInVwZGF0ZXIiLCAiaXNWYWxpZFRpbWVvdXQiLCAiZW5zdXJlUXVlcnlLZXlBcnJheSIsICJ0aW1lVW50aWxTdGFsZSIsICJ1cGRhdGVkQXQiLCAic3RhbGVUaW1lIiwgInBhcnNlUXVlcnlBcmdzIiwgImFyZzEiLCAiYXJnMiIsICJhcmczIiwgImlzUXVlcnlLZXkiLCAicGFyc2VGaWx0ZXJBcmdzIiwgIm1hcFF1ZXJ5U3RhdHVzRmlsdGVyIiwgImFjdGl2ZSIsICJpbmFjdGl2ZSIsICJpc0FjdGl2ZSIsICJtYXRjaFF1ZXJ5IiwgImZpbHRlcnMiLCAiZXhhY3QiLCAiZmV0Y2hpbmciLCAicXVlcnlLZXkiLCAic3RhbGUiLCAiaGFzaFF1ZXJ5S2V5QnlPcHRpb25zIiwgInBhcnRpYWxNYXRjaEtleSIsICJxdWVyeVN0YXR1c0ZpbHRlciIsICJtYXRjaE11dGF0aW9uIiwgIm11dGF0aW9uIiwgIm11dGF0aW9uS2V5IiwgImhhc2hRdWVyeUtleSIsICJoYXNoRm4iLCAic3RhYmxlVmFsdWVIYXNoIiwgInBhcnRpYWxEZWVwRXF1YWwiLCAicmVwbGFjZUVxdWFsRGVlcCIsICJhU2l6ZSIsICJiSXRlbXMiLCAiYlNpemUiLCAiZXF1YWxJdGVtcyIsICJoYXNPYmplY3RQcm90b3R5cGUiLCAiY3RvciIsICJwcm90IiwgInNsZWVwIiwgInJlc29sdmUiLCAic2NoZWR1bGVNaWNyb3Rhc2siLCAiZ2V0QWJvcnRDb250cm9sbGVyIiwgIkZvY3VzTWFuYWdlciIsICJfU3Vic2NyaWJhYmxlIiwgIl93aW5kb3ciLCAiX3RoaXMkY2xlYW51cCIsICJzZXR1cCIsICJfdGhpcyRjbGVhbnVwMiIsICJmb2N1c01hbmFnZXIiLCAiT25saW5lTWFuYWdlciIsICJvbk9ubGluZSIsICJvbmxpbmUiLCAib25saW5lTWFuYWdlciIsICJkZWZhdWx0UmV0cnlEZWxheSIsICJmYWlsdXJlQ291bnQiLCAiaXNDYW5jZWxhYmxlIiwgIkNhbmNlbGxlZEVycm9yIiwgImlzQ2FuY2VsbGVkRXJyb3IiLCAiUmV0cnllciIsICJjYW5jZWxSZXRyeSIsICJjYW5jZWxGbiIsICJjb250aW51ZUZuIiwgInByb21pc2VSZXNvbHZlIiwgInByb21pc2VSZWplY3QiLCAiY2FuY2VsT3B0aW9ucyIsICJvdXRlclJlc29sdmUiLCAib3V0ZXJSZWplY3QiLCAicGF1c2UiLCAiY29udGludWVSZXNvbHZlIiwgInJ1biIsICJwcm9taXNlT3JWYWx1ZSIsICJfY29uZmlnJHJldHJ5IiwgIl9jb25maWckcmV0cnlEZWxheSIsICJyZXRyeSIsICJyZXRyeURlbGF5IiwgInNob3VsZFJldHJ5IiwgIk5vdGlmeU1hbmFnZXIiLCAiX3RoaXMzIiwgInF1ZXVlIiwgIm5vdGlmeU1hbmFnZXIiLCAibG9nZ2VyIiwgImdldExvZ2dlciIsICJzZXRMb2dnZXIiLCAibmV3TG9nZ2VyIiwgIlF1ZXJ5IiwgIl90aGlzJG9wdGlvbnMkY2FjaGVUaSIsICJfdGhpcyRvcHRpb25zJGlzRGF0YUUiLCAiX3RoaXMkb3B0aW9ucyIsICJwcmV2RGF0YSIsICJkYXRhIiwgInNldFN0YXRlT3B0aW9ucyIsICJfdGhpcyRyZXRyeWVyIiwgIl90aGlzJHJldHJ5ZXIyIiwgIl90aGlzJHJldHJ5ZXIzIiwgImZldGNoT3B0aW9ucyIsICJfdGhpcyRvcHRpb25zJGJlaGF2aW8iLCAiX2NvbnRleHQkZmV0Y2hPcHRpb25zIiwgIl9hYm9ydENvbnRyb2xsZXIkYWJvciIsICJfdGhpcyRyZXRyeWVyNCIsICJxdWVyeUZuQ29udGV4dCIsICJmZXRjaEZuIiwgIl90aGlzJG9wdGlvbnMkYmVoYXZpbzIiLCAiX2NvbnRleHQkZmV0Y2hPcHRpb25zMiIsICJoYXNJbml0aWFsRGF0YSIsICJpbml0aWFsRGF0YVVwZGF0ZWRBdCIsICJoYXNEYXRhIiwgIl9hY3Rpb24kbWV0YSIsICJfYWN0aW9uJGRhdGFVcGRhdGVkQXQiLCAiUXVlcnlDYWNoZSIsICJjbGllbnQiLCAiX29wdGlvbnMkcXVlcnlIYXNoIiwgInF1ZXJ5SGFzaCIsICJxdWVyeUluTWFwIiwgIl9wYXJzZUZpbHRlckFyZ3MiLCAiX3BhcnNlRmlsdGVyQXJnczIiLCAiX3RoaXM0IiwgIl90aGlzNSIsICJNdXRhdGlvbiIsICJnZXREZWZhdWx0U3RhdGUiLCAicmVzdG9yZWQiLCAiX3RoaXMkb3B0aW9ucyRyZXRyeSIsICJNdXRhdGlvbkNhY2hlIiwgInBhdXNlZE11dGF0aW9ucyIsICJpbmZpbml0ZVF1ZXJ5QmVoYXZpb3IiLCAiX2NvbnRleHQkZmV0Y2hPcHRpb25zMyIsICJfY29udGV4dCRmZXRjaE9wdGlvbnM0IiwgIl9jb250ZXh0JHN0YXRlJGRhdGEiLCAiX2NvbnRleHQkc3RhdGUkZGF0YTIiLCAicmVmZXRjaFBhZ2UiLCAiZmV0Y2hNb3JlIiwgInBhZ2VQYXJhbSIsICJpc0ZldGNoaW5nTmV4dFBhZ2UiLCAiaXNGZXRjaGluZ1ByZXZpb3VzUGFnZSIsICJvbGRQYWdlcyIsICJvbGRQYWdlUGFyYW1zIiwgImFib3J0U2lnbmFsIiwgIm5ld1BhZ2VQYXJhbXMiLCAicXVlcnlGbiIsICJidWlsZE5ld1BhZ2VzIiwgInBhZ2VzIiwgImZldGNoUGFnZSIsICJtYW51YWwiLCAicXVlcnlGblJlc3VsdCIsICJwcm9taXNlQXNBbnkiLCAiZ2V0TmV4dFBhZ2VQYXJhbSIsICJfbWFudWFsIiwgIl9wYXJhbSIsICJnZXRQcmV2aW91c1BhZ2VQYXJhbSIsICJzaG91bGRGZXRjaEZpcnN0UGFnZSIsICJfbG9vcCIsICJzaG91bGRGZXRjaE5leHRQYWdlIiwgIl9wYXJhbTIiLCAiZmluYWxQcm9taXNlIiwgImZpbmFsUHJvbWlzZUFzQW55IiwgIlF1ZXJ5Q2xpZW50IiwgIl90aGlzJHVuc3Vic2NyaWJlRm9jdSIsICJfdGhpcyR1bnN1YnNjcmliZU9ubGkiLCAiX3RoaXMkcXVlcnlDYWNoZSRmaW5kIiwgInF1ZXJ5S2V5T3JGaWx0ZXJzIiwgInBhcnNlZE9wdGlvbnMiLCAiZGVmYXVsdGVkT3B0aW9ucyIsICJfdGhpcyRxdWVyeUNhY2hlJGZpbmQyIiwgInF1ZXJ5Q2FjaGUiLCAiX3BhcnNlRmlsdGVyQXJnczMiLCAicmVmZXRjaEZpbHRlcnMiLCAiX3BhcnNlRmlsdGVyQXJnczQiLCAiX3BhcnNlRmlsdGVyQXJnczQkIiwgIl9yZWYzIiwgIl9maWx0ZXJzJHJlZmV0Y2hBY3RpdiIsICJfZmlsdGVycyRyZWZldGNoSW5hY3QiLCAiX3BhcnNlRmlsdGVyQXJnczUiLCAiX3RoaXM2IiwgIl9wYXJzZUZpbHRlckFyZ3M2IiwgIl90aGlzNyIsICJfdGhpcyRxdWVyeURlZmF1bHRzJGYiLCAiX3RoaXMkbXV0YXRpb25EZWZhdWx0IiwgInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwgIlJlYWN0RE9NIiwgImRlZmF1bHRDb250ZXh0IiwgIlF1ZXJ5Q2xpZW50U2hhcmluZ0NvbnRleHQiLCAiZ2V0UXVlcnlDbGllbnRDb250ZXh0IiwgImNvbnRleHRTaGFyaW5nIiwgIlF1ZXJ5Q2xpZW50UHJvdmlkZXIiLCAiX3JlZiRjb250ZXh0U2hhcmluZyIsICJDb250ZXh0IiwgImNyZWF0ZUVudGl0eVRyZWUiLCAiRW50aXR5VHJlZVdpZGdldCIsICJxdWVyeUNsaWVudCIsICJFbnRpdHlUcmVlV2lkZ2V0SW5uZXIiLCAibG9hZGluZ09udG9sb2d5IiwgImxvYWRpbmdFbnRpdHkiLCAibG9hZGluZ0NsYXNzSW5zdGFuY2VzIiwgImhhbmRsZU5hdmlnYXRlVG9FbnRpdHkiLCAiaGFuZGxlTmF2aWdhdGVUb09udG9sb2d5IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgIlJlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJ4IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIkRFRkFVTFRfSEFTX1RJVExFIiwgIm9udG9sb2d5IiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgInJlbmRlciIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgInJlbmRlciIsICJkYXRhIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIm5vZGUiLCAiYiIsICJjeWNsZUNoZWNrIiwgImN5Y2xlQ2hlY2siLCAibm9kZSIsICJiIiwgIlJlYWN0IiwgIngiLCAibm9kZSIsICJoaWVyYXJjaHkiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIlJlYWN0IiwgIlJlYWN0RE9NIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgImltcG9ydF9yZWFjdCIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiTUFYX09OVE9MT0dJRVNfT05fRElTUExBWSIsICJSZWFjdCIsICJyZW5kZXIiLCAiZGF0YSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJwYWdlSW5kZXgiLCAicGFnZVNpemUiLCAic29ydEZpZWxkIiwgInNvcnREaXJlY3Rpb24iLCAicGFnZU9mSXRlbXMiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAic2VhcmNoVmFsdWUiLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJSZWFjdCIsICJSZWFjdERPTSIsICJSZWFjdCIsICJpbXBvcnRfcmVhY3RfZG9tIiwgIkRFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMiLCAicmVuZGVyIiwgIm9wdGlvbiIsICJSZWFjdCIsICJSZWFjdERPTSIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X2RvbSIsICJERUZBVUxUX0hBU19USVRMRSIsICJSZWFjdCIsICJwcm9wZXJ0eSIsICJwcmVkaWNhdGVzIiwgImVudGl0eSIsICJpbnN0YW5jZXMiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAiUmVhY3QiLCAiUmVhY3RET00iLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9yZWFjdF9kb20iLCAibm9kZSIsICJkYXRhIiwgImlzUG9wb3Zlck9wZW4iLCAiUmVhY3QiLCAiUmVhY3RET00iXQp9Cg== diff --git a/dist_plainjs/terminology-service-suite.min.js b/dist_plainjs/terminology-service-suite.min.js index 19e3cddb..b3011b70 100644 --- a/dist_plainjs/terminology-service-suite.min.js +++ b/dist_plainjs/terminology-service-suite.min.js @@ -1,23 +1,23 @@ -"use strict";(()=>{var MAe=Object.create;var rY=Object.defineProperty;var RAe=Object.getOwnPropertyDescriptor;var DAe=Object.getOwnPropertyNames;var zAe=Object.getPrototypeOf,NAe=Object.prototype.hasOwnProperty;var d0e=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var ot=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),de=(e,t)=>{for(var n in t)rY(e,n,{get:t[n],enumerable:!0})},LAe=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of DAe(t))!NAe.call(e,o)&&o!==n&&rY(e,o,{get:()=>t[o],enumerable:!(r=RAe(t,o))||r.enumerable});return e};var V=(e,t,n)=>(n=e!=null?MAe(zAe(e)):{},LAe(t||!e||!e.__esModule?rY(n,"default",{value:e,enumerable:!0}):n,e));var nY=ot((C$t,m0e)=>{"use strict";var h0e=Object.getOwnPropertySymbols,FAe=Object.prototype.hasOwnProperty,BAe=Object.prototype.propertyIsEnumerable;function WAe(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function HAe(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map(function(i){return t[i]});if(r.join("")!=="0123456789")return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(i){o[i]=i}),Object.keys(Object.assign({},o)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}m0e.exports=HAe()?Object.assign:function(e,t){for(var n,r=WAe(e),o,i=1;i{"use strict";var iY=nY(),bP=60103,y0e=60106;Yo.Fragment=60107;Yo.StrictMode=60108;Yo.Profiler=60114;var b0e=60109,w0e=60110,O0e=60112;Yo.Suspense=60113;var x0e=60115,_0e=60116;typeof Symbol=="function"&&Symbol.for&&(Ty=Symbol.for,bP=Ty("react.element"),y0e=Ty("react.portal"),Yo.Fragment=Ty("react.fragment"),Yo.StrictMode=Ty("react.strict_mode"),Yo.Profiler=Ty("react.profiler"),b0e=Ty("react.provider"),w0e=Ty("react.context"),O0e=Ty("react.forward_ref"),Yo.Suspense=Ty("react.suspense"),x0e=Ty("react.memo"),_0e=Ty("react.lazy"));var Ty,v0e=typeof Symbol=="function"&&Symbol.iterator;function $Ae(e){return e===null||typeof e!="object"?null:(e=v0e&&e[v0e]||e["@@iterator"],typeof e=="function"?e:null)}function nT(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n{"use strict";A0e.exports=T0e()});var L0e=ot(ji=>{"use strict";var xP,aT,a$,vY;typeof performance=="object"&&typeof performance.now=="function"?(M0e=performance,ji.unstable_now=function(){return M0e.now()}):(cY=Date,R0e=cY.now(),ji.unstable_now=function(){return cY.now()-R0e});var M0e,cY,R0e;typeof window>"u"||typeof MessageChannel!="function"?(OP=null,fY=null,pY=function(){if(OP!==null)try{var e=ji.unstable_now();OP(!0,e),OP=null}catch(t){throw setTimeout(pY,0),t}},xP=function(e){OP!==null?setTimeout(xP,0,e):(OP=e,setTimeout(pY,0))},aT=function(e,t){fY=setTimeout(e,t)},a$=function(){clearTimeout(fY)},ji.unstable_shouldYield=function(){return!1},vY=ji.unstable_forceFrameRate=function(){}):(D0e=window.setTimeout,z0e=window.clearTimeout,typeof console<"u"&&(N0e=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof N0e!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),oT=!1,iT=null,n$=-1,dY=5,hY=0,ji.unstable_shouldYield=function(){return ji.unstable_now()>=hY},vY=function(){},ji.unstable_forceFrameRate=function(e){0>e||125>>1,o=e[r];if(o!==void 0&&0i$(d,n))_!==void 0&&0>i$(_,d)?(e[r]=_,e[y]=n,r=y):(e[r]=d,e[i]=n,r=i);else if(_!==void 0&&0>i$(_,n))e[r]=_,e[y]=n,r=y;else break e}}return t}return null}function i$(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}var YO=[],qS=[],JAe=1,Ay=null,qp=3,l$=!1,HI=!1,sT=!1;function yY(e){for(var t=w3(qS);t!==null;){if(t.callback===null)s$(qS);else if(t.startTime<=e)s$(qS),t.sortIndex=t.expirationTime,gY(YO,t);else break;t=w3(qS)}}function bY(e){if(sT=!1,yY(e),!HI)if(w3(YO)!==null)HI=!0,xP(wY);else{var t=w3(qS);t!==null&&aT(bY,t.startTime-e)}}function wY(e,t){HI=!1,sT&&(sT=!1,a$()),l$=!0;var n=qp;try{for(yY(t),Ay=w3(YO);Ay!==null&&(!(Ay.expirationTime>t)||e&&!ji.unstable_shouldYield());){var r=Ay.callback;if(typeof r=="function"){Ay.callback=null,qp=Ay.priorityLevel;var o=r(Ay.expirationTime<=t);t=ji.unstable_now(),typeof o=="function"?Ay.callback=o:Ay===w3(YO)&&s$(YO),yY(t)}else s$(YO);Ay=w3(YO)}if(Ay!==null)var i=!0;else{var d=w3(qS);d!==null&&aT(bY,d.startTime-t),i=!1}return i}finally{Ay=null,qp=n,l$=!1}}var XAe=vY;ji.unstable_IdlePriority=5;ji.unstable_ImmediatePriority=1;ji.unstable_LowPriority=4;ji.unstable_NormalPriority=3;ji.unstable_Profiling=null;ji.unstable_UserBlockingPriority=2;ji.unstable_cancelCallback=function(e){e.callback=null};ji.unstable_continueExecution=function(){HI||l$||(HI=!0,xP(wY))};ji.unstable_getCurrentPriorityLevel=function(){return qp};ji.unstable_getFirstCallbackNode=function(){return w3(YO)};ji.unstable_next=function(e){switch(qp){case 1:case 2:case 3:var t=3;break;default:t=qp}var n=qp;qp=t;try{return e()}finally{qp=n}};ji.unstable_pauseExecution=function(){};ji.unstable_requestPaint=XAe;ji.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=qp;qp=e;try{return t()}finally{qp=n}};ji.unstable_scheduleCallback=function(e,t,n){var r=ji.unstable_now();switch(typeof n=="object"&&n!==null?(n=n.delay,n=typeof n=="number"&&0r?(e.sortIndex=n,gY(qS,e),w3(YO)===null&&e===w3(qS)&&(sT?a$():sT=!0,aT(bY,n-r))):(e.sortIndex=o,gY(YO,e),HI||l$||(HI=!0,xP(wY))),e};ji.unstable_wrapCallback=function(e){var t=qp;return function(){var n=qp;qp=t;try{return e.apply(this,arguments)}finally{qp=n}}}});var B0e=ot((R$t,F0e)=>{"use strict";F0e.exports=L0e()});var Ive=ot(Ly=>{"use strict";var tV=ne(),ds=nY(),Mc=B0e();function ar(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),KAe=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,W0e=Object.prototype.hasOwnProperty,H0e={},$0e={};function YAe(e){return W0e.call($0e,e)?!0:W0e.call(H0e,e)?!1:KAe.test(e)?$0e[e]=!0:(H0e[e]=!0,!1)}function QAe(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function ZAe(e,t,n,r){if(t===null||typeof t>"u"||QAe(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ah(e,t,n,r,o,i,d){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=d}var Df={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Df[e]=new ah(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Df[t]=new ah(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Df[e]=new ah(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Df[e]=new ah(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Df[e]=new ah(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Df[e]=new ah(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Df[e]=new ah(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Df[e]=new ah(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Df[e]=new ah(e,5,!1,e.toLowerCase(),null,!1,!1)});var jQ=/[\-:]([a-z])/g;function CQ(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(jQ,CQ);Df[t]=new ah(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(jQ,CQ);Df[t]=new ah(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(jQ,CQ);Df[t]=new ah(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Df[e]=new ah(e,1,!1,e.toLowerCase(),null,!1,!1)});Df.xlinkHref=new ah("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Df[e]=new ah(e,1,!1,e.toLowerCase(),null,!0,!0)});function TQ(e,t,n,r){var o=Df.hasOwnProperty(t)?Df[t]:null,i=o!==null?o.type===0:r?!1:!(!(2{var MAe=Object.create;var rY=Object.defineProperty;var RAe=Object.getOwnPropertyDescriptor;var DAe=Object.getOwnPropertyNames;var zAe=Object.getPrototypeOf,NAe=Object.prototype.hasOwnProperty;var d0e=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var ot=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),de=(e,t)=>{for(var n in t)rY(e,n,{get:t[n],enumerable:!0})},LAe=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of DAe(t))!NAe.call(e,o)&&o!==n&&rY(e,o,{get:()=>t[o],enumerable:!(r=RAe(t,o))||r.enumerable});return e};var V=(e,t,n)=>(n=e!=null?MAe(zAe(e)):{},LAe(t||!e||!e.__esModule?rY(n,"default",{value:e,enumerable:!0}):n,e));var nY=ot((C$t,m0e)=>{"use strict";var h0e=Object.getOwnPropertySymbols,FAe=Object.prototype.hasOwnProperty,BAe=Object.prototype.propertyIsEnumerable;function WAe(e){if(e==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function HAe(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de",Object.getOwnPropertyNames(e)[0]==="5")return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map(function(i){return t[i]});if(r.join("")!=="0123456789")return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(i){o[i]=i}),Object.keys(Object.assign({},o)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}m0e.exports=HAe()?Object.assign:function(e,t){for(var n,r=WAe(e),o,i=1;i{"use strict";var iY=nY(),bP=60103,y0e=60106;Yo.Fragment=60107;Yo.StrictMode=60108;Yo.Profiler=60114;var b0e=60109,w0e=60110,O0e=60112;Yo.Suspense=60113;var x0e=60115,_0e=60116;typeof Symbol=="function"&&Symbol.for&&(Ty=Symbol.for,bP=Ty("react.element"),y0e=Ty("react.portal"),Yo.Fragment=Ty("react.fragment"),Yo.StrictMode=Ty("react.strict_mode"),Yo.Profiler=Ty("react.profiler"),b0e=Ty("react.provider"),w0e=Ty("react.context"),O0e=Ty("react.forward_ref"),Yo.Suspense=Ty("react.suspense"),x0e=Ty("react.memo"),_0e=Ty("react.lazy"));var Ty,v0e=typeof Symbol=="function"&&Symbol.iterator;function $Ae(e){return e===null||typeof e!="object"?null:(e=v0e&&e[v0e]||e["@@iterator"],typeof e=="function"?e:null)}function nT(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n{"use strict";A0e.exports=T0e()});var L0e=ot(ji=>{"use strict";var xP,aT,a$,vY;typeof performance=="object"&&typeof performance.now=="function"?(M0e=performance,ji.unstable_now=function(){return M0e.now()}):(cY=Date,R0e=cY.now(),ji.unstable_now=function(){return cY.now()-R0e});var M0e,cY,R0e;typeof window>"u"||typeof MessageChannel!="function"?(OP=null,fY=null,pY=function(){if(OP!==null)try{var e=ji.unstable_now();OP(!0,e),OP=null}catch(t){throw setTimeout(pY,0),t}},xP=function(e){OP!==null?setTimeout(xP,0,e):(OP=e,setTimeout(pY,0))},aT=function(e,t){fY=setTimeout(e,t)},a$=function(){clearTimeout(fY)},ji.unstable_shouldYield=function(){return!1},vY=ji.unstable_forceFrameRate=function(){}):(D0e=window.setTimeout,z0e=window.clearTimeout,typeof console<"u"&&(N0e=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof N0e!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),oT=!1,iT=null,n$=-1,dY=5,hY=0,ji.unstable_shouldYield=function(){return ji.unstable_now()>=hY},vY=function(){},ji.unstable_forceFrameRate=function(e){0>e||125>>1,o=e[r];if(o!==void 0&&0i$(d,n))_!==void 0&&0>i$(_,d)?(e[r]=_,e[y]=n,r=y):(e[r]=d,e[i]=n,r=i);else if(_!==void 0&&0>i$(_,n))e[r]=_,e[y]=n,r=y;else break e}}return t}return null}function i$(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}var YO=[],qS=[],JAe=1,Ay=null,qp=3,l$=!1,HI=!1,sT=!1;function yY(e){for(var t=w3(qS);t!==null;){if(t.callback===null)s$(qS);else if(t.startTime<=e)s$(qS),t.sortIndex=t.expirationTime,gY(YO,t);else break;t=w3(qS)}}function bY(e){if(sT=!1,yY(e),!HI)if(w3(YO)!==null)HI=!0,xP(wY);else{var t=w3(qS);t!==null&&aT(bY,t.startTime-e)}}function wY(e,t){HI=!1,sT&&(sT=!1,a$()),l$=!0;var n=qp;try{for(yY(t),Ay=w3(YO);Ay!==null&&(!(Ay.expirationTime>t)||e&&!ji.unstable_shouldYield());){var r=Ay.callback;if(typeof r=="function"){Ay.callback=null,qp=Ay.priorityLevel;var o=r(Ay.expirationTime<=t);t=ji.unstable_now(),typeof o=="function"?Ay.callback=o:Ay===w3(YO)&&s$(YO),yY(t)}else s$(YO);Ay=w3(YO)}if(Ay!==null)var i=!0;else{var d=w3(qS);d!==null&&aT(bY,d.startTime-t),i=!1}return i}finally{Ay=null,qp=n,l$=!1}}var XAe=vY;ji.unstable_IdlePriority=5;ji.unstable_ImmediatePriority=1;ji.unstable_LowPriority=4;ji.unstable_NormalPriority=3;ji.unstable_Profiling=null;ji.unstable_UserBlockingPriority=2;ji.unstable_cancelCallback=function(e){e.callback=null};ji.unstable_continueExecution=function(){HI||l$||(HI=!0,xP(wY))};ji.unstable_getCurrentPriorityLevel=function(){return qp};ji.unstable_getFirstCallbackNode=function(){return w3(YO)};ji.unstable_next=function(e){switch(qp){case 1:case 2:case 3:var t=3;break;default:t=qp}var n=qp;qp=t;try{return e()}finally{qp=n}};ji.unstable_pauseExecution=function(){};ji.unstable_requestPaint=XAe;ji.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=qp;qp=e;try{return t()}finally{qp=n}};ji.unstable_scheduleCallback=function(e,t,n){var r=ji.unstable_now();switch(typeof n=="object"&&n!==null?(n=n.delay,n=typeof n=="number"&&0r?(e.sortIndex=n,gY(qS,e),w3(YO)===null&&e===w3(qS)&&(sT?a$():sT=!0,aT(bY,n-r))):(e.sortIndex=o,gY(YO,e),HI||l$||(HI=!0,xP(wY))),e};ji.unstable_wrapCallback=function(e){var t=qp;return function(){var n=qp;qp=t;try{return e.apply(this,arguments)}finally{qp=n}}}});var B0e=ot((R$t,F0e)=>{"use strict";F0e.exports=L0e()});var Ive=ot(Ly=>{"use strict";var tV=ne(),ds=nY(),Mc=B0e();function sr(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),KAe=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,W0e=Object.prototype.hasOwnProperty,H0e={},$0e={};function YAe(e){return W0e.call($0e,e)?!0:W0e.call(H0e,e)?!1:KAe.test(e)?$0e[e]=!0:(H0e[e]=!0,!1)}function QAe(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function ZAe(e,t,n,r){if(t===null||typeof t>"u"||QAe(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ah(e,t,n,r,o,i,d){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=d}var Df={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Df[e]=new ah(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Df[t]=new ah(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Df[e]=new ah(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Df[e]=new ah(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Df[e]=new ah(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Df[e]=new ah(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Df[e]=new ah(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Df[e]=new ah(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Df[e]=new ah(e,5,!1,e.toLowerCase(),null,!1,!1)});var jQ=/[\-:]([a-z])/g;function CQ(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(jQ,CQ);Df[t]=new ah(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(jQ,CQ);Df[t]=new ah(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(jQ,CQ);Df[t]=new ah(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Df[e]=new ah(e,1,!1,e.toLowerCase(),null,!1,!1)});Df.xlinkHref=new ah("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Df[e]=new ah(e,1,!1,e.toLowerCase(),null,!0,!0)});function TQ(e,t,n,r){var o=Df.hasOwnProperty(t)?Df[t]:null,i=o!==null?o.type===0:r?!1:!(!(2y||o[d]!==i[y])return` -`+o[d].replace(" at new "," at ");while(1<=d&&0<=y);break}}}finally{xY=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?OT(e):""}function eMe(e){switch(e.tag){case 5:return OT(e.type);case 16:return OT("Lazy");case 13:return OT("Suspense");case 19:return OT("SuspenseList");case 0:case 2:case 15:return e=u$(e.type,!1),e;case 11:return e=u$(e.type.render,!1),e;case 22:return e=u$(e.type._render,!1),e;case 1:return e=u$(e.type,!0),e;default:return""}}function MP(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case GS:return"Fragment";case VI:return"Portal";case ET:return"Profiler";case AQ:return"StrictMode";case IT:return"Suspense";case A$:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case RQ:return(e.displayName||"Context")+".Consumer";case MQ:return(e._context.displayName||"Context")+".Provider";case rV:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case nV:return MP(e.type);case zQ:return MP(e._render);case DQ:t=e._payload,e=e._init;try{return MP(e(t))}catch{}}return null}function iE(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function t1e(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function tMe(e){var t=t1e(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(d){r=""+d,i.call(this,d)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(d){r=""+d},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function c$(e){e._valueTracker||(e._valueTracker=tMe(e))}function r1e(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=t1e(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function M$(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function VY(e,t){var n=t.checked;return ds({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function q0e(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=iE(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function n1e(e,t){t=t.checked,t!=null&&TQ(e,"checked",t,!1)}function qY(e,t){n1e(e,t);var n=iE(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?UY(e,t.type,n):t.hasOwnProperty("defaultValue")&&UY(e,t.type,iE(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function U0e(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function UY(e,t,n){(t!=="number"||M$(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function rMe(e){var t="";return tV.Children.forEach(e,function(n){n!=null&&(t+=n)}),t}function GY(e,t){return e=ds({children:void 0},t),(t=rMe(t.children))&&(e.children=t),e}function RP(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o=n.length))throw Error(ar(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:iE(n)}}function o1e(e,t){var n=iE(t.value),r=iE(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=""+r)}function J0e(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}var XY={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function i1e(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function KY(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?i1e(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var f$,a1e=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e}(function(e,t){if(e.namespaceURI!==XY.svg||"innerHTML"in e)e.innerHTML=t;else{for(f$=f$||document.createElement("div"),f$.innerHTML=""+t.valueOf().toString()+"",t=f$.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function LT(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var kT={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},nMe=["Webkit","ms","Moz","O"];Object.keys(kT).forEach(function(e){nMe.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),kT[t]=kT[e]})});function s1e(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||kT.hasOwnProperty(e)&&kT[e]?(""+t).trim():t+"px"}function l1e(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=s1e(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var oMe=ds({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function YY(e,t){if(t){if(oMe[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(ar(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(ar(60));if(!(typeof t.dangerouslySetInnerHTML=="object"&&"__html"in t.dangerouslySetInnerHTML))throw Error(ar(61))}if(t.style!=null&&typeof t.style!="object")throw Error(ar(62))}}function QY(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function FQ(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var ZY=null,DP=null,zP=null;function X0e(e){if(e=QT(e)){if(typeof ZY!="function")throw Error(ar(280));var t=e.stateNode;t&&(t=uV(t),ZY(e.stateNode,e.type,t))}}function u1e(e){DP?zP?zP.push(e):zP=[e]:DP=e}function c1e(){if(DP){var e=DP,t=zP;if(zP=DP=null,X0e(e),t)for(e=0;er?0:1<n;n++)t.push(e);return t}function iV(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,e=e.eventTimes,t=31-aE(t),e[t]=n}var aE=Math.clz32?Math.clz32:wMe,yMe=Math.log,bMe=Math.LN2;function wMe(e){return e===0?32:31-(yMe(e)/bMe|0)|0}var OMe=Mc.unstable_UserBlockingPriority,xMe=Mc.unstable_runWithPriority,_$=!0;function _Me(e,t,n,r){qI||WQ();var o=UQ,i=qI;qI=!0;try{f1e(o,e,t,n,r)}finally{(qI=i)||HQ()}}function SMe(e,t,n,r){xMe(OMe,UQ.bind(null,e,t,n,r))}function UQ(e,t,n,r){if(_$){var o;if((o=(t&4)===0)&&0=jT),ime=String.fromCharCode(32),ame=!1;function P1e(e,t){switch(e){case"keyup":return GMe.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function j1e(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var PP=!1;function XMe(e,t){switch(e){case"compositionend":return j1e(t);case"keypress":return t.which!==32?null:(ame=!0,ime);case"textInput":return e=t.data,e===ime&&ame?null:e;default:return null}}function KMe(e,t){if(PP)return e==="compositionend"||!YQ&&P1e(e,t)?(e=I1e(),S$=JQ=JS=null,PP=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ume(n)}}function M1e(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?M1e(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function fme(){for(var e=window,t=M$();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=M$(e.document)}return t}function oQ(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var aRe=M_&&"documentMode"in document&&11>=document.documentMode,jP=null,iQ=null,TT=null,aQ=!1;function pme(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;aQ||jP==null||jP!==M$(r)||(r=jP,"selectionStart"in r&&oQ(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),TT&&VT(TT,r)||(TT=r,r=N$(iQ,"onSelect"),0TP||(e.current=lQ[TP],lQ[TP]=null,TP--)}function ul(e,t){TP++,lQ[TP]=e.current,e.current=t}var sE={},Xp=cE(sE),G0=cE(!1),KI=sE;function VP(e,t){var n=e.type.contextTypes;if(!n)return sE;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function J0(e){return e=e.childContextTypes,e!=null}function B$(){Xa(G0),Xa(Xp)}function wme(e,t,n){if(Xp.current!==sE)throw Error(ar(168));ul(Xp,t),ul(G0,n)}function W1e(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in e))throw Error(ar(108,MP(t)||"Unknown",o));return ds({},n,r)}function I$(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||sE,KI=Xp.current,ul(Xp,e),ul(G0,G0.current),!0}function Ome(e,t,n){var r=e.stateNode;if(!r)throw Error(ar(169));n?(e=W1e(e,t,KI),r.__reactInternalMemoizedMergedChildContext=e,Xa(G0),Xa(Xp),ul(Xp,e)):Xa(G0),ul(G0,n)}var ZQ=null,XI=null,uRe=Mc.unstable_runWithPriority,eZ=Mc.unstable_scheduleCallback,uQ=Mc.unstable_cancelCallback,cRe=Mc.unstable_shouldYield,xme=Mc.unstable_requestPaint,cQ=Mc.unstable_now,fRe=Mc.unstable_getCurrentPriorityLevel,cV=Mc.unstable_ImmediatePriority,H1e=Mc.unstable_UserBlockingPriority,$1e=Mc.unstable_NormalPriority,V1e=Mc.unstable_LowPriority,q1e=Mc.unstable_IdlePriority,RY={},pRe=xme!==void 0?xme:function(){},P_=null,k$=null,DY=!1,_me=cQ(),Gp=1e4>_me?cQ:function(){return cQ()-_me};function qP(){switch(fRe()){case cV:return 99;case H1e:return 98;case $1e:return 97;case V1e:return 96;case q1e:return 95;default:throw Error(ar(332))}}function U1e(e){switch(e){case 99:return cV;case 98:return H1e;case 97:return $1e;case 96:return V1e;case 95:return q1e;default:throw Error(ar(332))}}function YI(e,t){return e=U1e(e),uRe(e,t)}function UT(e,t,n){return e=U1e(e),eZ(e,t,n)}function n4(){if(k$!==null){var e=k$;k$=null,uQ(e)}G1e()}function G1e(){if(!DY&&P_!==null){DY=!0;var e=0;try{var t=P_;YI(99,function(){for(;eae?(Pe=ge,ge=null):Pe=ge.sibling;var Ne=L(U,ge,Z[ae],fe);if(Ne===null){ge===null&&(ge=Pe);break}e&&ge&&Ne.alternate===null&&t(U,ge),X=i(Ne,X,ae),ye===null?me=Ne:ye.sibling=Ne,ye=Ne,ge=Pe}if(ae===Z.length)return n(U,ge),me;if(ge===null){for(;aeae?(Pe=ge,ge=null):Pe=ge.sibling;var Ye=L(U,ge,Ne.value,fe);if(Ye===null){ge===null&&(ge=Pe);break}e&&ge&&Ye.alternate===null&&t(U,ge),X=i(Ye,X,ae),ye===null?me=Ye:ye.sibling=Ye,ye=Ye,ge=Pe}if(Ne.done)return n(U,ge),me;if(ge===null){for(;!Ne.done;ae++,Ne=Z.next())Ne=N(U,Ne.value,fe),Ne!==null&&(X=i(Ne,X,ae),ye===null?me=Ne:ye.sibling=Ne,ye=Ne);return me}for(ge=r(U,ge);!Ne.done;ae++,Ne=Z.next())Ne=Y(ge,U,ae,Ne.value,fe),Ne!==null&&(e&&Ne.alternate!==null&&ge.delete(Ne.key===null?ae:Ne.key),X=i(Ne,X,ae),ye===null?me=Ne:ye.sibling=Ne,ye=Ne);return e&&ge.forEach(function(Je){return t(U,Je)}),me}return function(U,X,Z,fe){var me=typeof Z=="object"&&Z!==null&&Z.type===GS&&Z.key===null;me&&(Z=Z.props.children);var ye=typeof Z=="object"&&Z!==null;if(ye)switch(Z.$$typeof){case wT:e:{for(ye=Z.key,me=X;me!==null;){if(me.key===ye){switch(me.tag){case 7:if(Z.type===GS){n(U,me.sibling),X=o(me,Z.props.children),X.return=U,U=X;break e}break;default:if(me.elementType===Z.type){n(U,me.sibling),X=o(me,Z.props),X.ref=dT(U,me,Z),X.return=U,U=X;break e}}n(U,me);break}else t(U,me);me=me.sibling}Z.type===GS?(X=HP(Z.props.children,U.mode,fe,Z.key),X.return=U,U=X):(fe=T$(Z.type,Z.key,Z.props,null,U.mode,fe),fe.ref=dT(U,X,Z),fe.return=U,U=fe)}return d(U);case VI:e:{for(me=Z.key;X!==null;){if(X.key===me)if(X.tag===4&&X.stateNode.containerInfo===Z.containerInfo&&X.stateNode.implementation===Z.implementation){n(U,X.sibling),X=o(X,Z.children||[]),X.return=U,U=X;break e}else{n(U,X);break}else t(U,X);X=X.sibling}X=WY(Z,U.mode,fe),X.return=U,U=X}return d(U)}if(typeof Z=="string"||typeof Z=="number")return Z=""+Z,X!==null&&X.tag===6?(n(U,X.sibling),X=o(X,Z),X.return=U,U=X):(n(U,X),X=BY(Z,U.mode,fe),X.return=U,U=X),d(U);if(g$(Z))return q(U,X,Z,fe);if(lT(Z))return K(U,X,Z,fe);if(ye&&y$(U,Z),typeof Z>"u"&&!me)switch(U.tag){case 1:case 22:case 0:case 11:case 15:throw Error(ar(152,MP(U.type)||"Component"))}return n(U,X)}}var q$=Q1e(!0),Z1e=Q1e(!1),ZT={},t4=cE(ZT),JT=cE(ZT),XT=cE(ZT);function GI(e){if(e===ZT)throw Error(ar(174));return e}function pQ(e,t){switch(ul(XT,t),ul(JT,e),ul(t4,ZT),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:KY(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=KY(t,e)}Xa(t4),ul(t4,t)}function UP(){Xa(t4),Xa(JT),Xa(XT)}function Pme(e){GI(XT.current);var t=GI(t4.current),n=KY(t,e.type);t!==n&&(ul(JT,e),ul(t4,n))}function oZ(e){JT.current===e&&(Xa(t4),Xa(JT))}var ll=cE(0);function U$(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&64)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var C_=null,KS=null,r4=!1;function eve(e,t){var n=Ry(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,e.lastEffect!==null?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function jme(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,!0):!1;case 13:return!1;default:return!1}}function dQ(e){if(r4){var t=KS;if(t){var n=t;if(!jme(e,t)){if(t=NP(n.nextSibling),!t||!jme(e,t)){e.flags=e.flags&-1025|2,r4=!1,C_=e;return}eve(C_,n)}C_=e,KS=NP(t.firstChild)}else e.flags=e.flags&-1025|2,r4=!1,C_=e}}function Cme(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;C_=e}function b$(e){if(e!==C_)return!1;if(!r4)return Cme(e),r4=!0,!1;var t=e.type;if(e.tag!==5||t!=="head"&&t!=="body"&&!sQ(t,e.memoizedProps))for(t=KS;t;)eve(e,t),t=NP(t.nextSibling);if(Cme(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(ar(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){KS=NP(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}KS=null}}else KS=C_?NP(e.stateNode.nextSibling):null;return!0}function zY(){KS=C_=null,r4=!1}var FP=[];function iZ(){for(var e=0;ei))throw Error(ar(301));i+=1,Mf=Up=null,t.updateQueue=null,AT.current=gRe,e=n(r,o)}while(MT)}if(AT.current=Y$,t=Up!==null&&Up.next!==null,KT=0,Mf=Up=Ll=null,G$=!1,t)throw Error(ar(300));return e}function JI(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Mf===null?Ll.memoizedState=Mf=e:Mf=Mf.next=e,Mf}function rk(){if(Up===null){var e=Ll.alternate;e=e!==null?e.memoizedState:null}else e=Up.next;var t=Mf===null?Ll.memoizedState:Mf.next;if(t!==null)Mf=t,Up=e;else{if(e===null)throw Error(ar(310));Up=e,e={memoizedState:Up.memoizedState,baseState:Up.baseState,baseQueue:Up.baseQueue,queue:Up.queue,next:null},Mf===null?Ll.memoizedState=Mf=e:Mf=Mf.next=e}return Mf}function ZO(e,t){return typeof t=="function"?t(e):t}function hT(e){var t=rk(),n=t.queue;if(n===null)throw Error(ar(311));n.lastRenderedReducer=e;var r=Up,o=r.baseQueue,i=n.pending;if(i!==null){if(o!==null){var d=o.next;o.next=i.next,i.next=d}r.baseQueue=o=i,n.pending=null}if(o!==null){o=o.next,r=r.baseState;var y=d=i=null,_=o;do{var k=_.lane;if((KT&k)===k)y!==null&&(y=y.next={lane:0,action:_.action,eagerReducer:_.eagerReducer,eagerState:_.eagerState,next:null}),r=_.eagerReducer===e?_.eagerState:e(r,_.action);else{var T={lane:k,action:_.action,eagerReducer:_.eagerReducer,eagerState:_.eagerState,next:null};y===null?(d=y=T,i=r):y=y.next=T,Ll.lanes|=k,eA|=k}_=_.next}while(_!==null&&_!==o);y===null?i=r:y.next=d,My(r,t.memoizedState)||(x3=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=y,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function mT(e){var t=rk(),n=t.queue;if(n===null)throw Error(ar(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(o!==null){n.pending=null;var d=o=o.next;do i=e(i,d.action),d=d.next;while(d!==o);My(i,t.memoizedState)||(x3=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Tme(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(o!==null?e=o===r:(e=e.mutableReadLanes,(e=(KT&e)===e)&&(t._workInProgressVersionPrimary=r,FP.push(t))),e)return n(t._source);throw FP.push(t),Error(ar(350))}function tve(e,t,n,r){var o=ih;if(o===null)throw Error(ar(349));var i=t._getVersion,d=i(t._source),y=AT.current,_=y.useState(function(){return Tme(o,t,n)}),k=_[1],T=_[0];_=Mf;var N=e.memoizedState,L=N.refs,Y=L.getSnapshot,q=N.source;N=N.subscribe;var K=Ll;return e.memoizedState={refs:L,source:t,subscribe:r},y.useEffect(function(){L.getSnapshot=n,L.setSnapshot=k;var U=i(t._source);if(!My(d,U)){U=n(t._source),My(T,U)||(k(U),U=rE(K),o.mutableReadLanes|=U&o.pendingLanes),U=o.mutableReadLanes,o.entangledLanes|=U;for(var X=o.entanglements,Z=U;0n?98:n,function(){e(!0)}),YI(97<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=d.createElement(n,{is:r.is}):(e=d.createElement(n),n==="select"&&(d=e,r.multiple?d.multiple=!0:r.size&&(d.size=r.size))):e=d.createElementNS(e,n),e[XS]=t,e[F$]=r,cve(e,t,!1,!1),t.stateNode=e,d=QY(n,r),n){case"dialog":Ja("cancel",e),Ja("close",e),o=r;break;case"iframe":case"object":case"embed":Ja("load",e),o=r;break;case"video":case"audio":for(o=0;o_Q&&(t.flags|=64,i=!0,gT(r,!1),t.lanes=33554432)}else{if(!i)if(e=U$(d),e!==null){if(t.flags|=64,i=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),gT(r,!0),r.tail===null&&r.tailMode==="hidden"&&!d.alternate&&!r4)return t=t.lastEffect=r.lastEffect,t!==null&&(t.nextEffect=null),null}else 2*Gp()-r.renderingStartTime>_Q&&n!==1073741824&&(t.flags|=64,i=!0,gT(r,!1),t.lanes=33554432);r.isBackwards?(d.sibling=t.child,t.child=d):(n=r.last,n!==null?n.sibling=d:t.child=d,r.last=d)}return r.tail!==null?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Gp(),n.sibling=null,t=ll.current,ul(ll,i?t&1|2:t&1),n):null;case 23:case 24:return mZ(),e!==null&&e.memoizedState!==null!=(t.memoizedState!==null)&&r.mode!=="unstable-defer-without-hiding"&&(t.flags|=4),null}throw Error(ar(156,t.tag))}function wRe(e){switch(e.tag){case 1:J0(e.type)&&B$();var t=e.flags;return t&4096?(e.flags=t&-4097|64,e):null;case 3:if(UP(),Xa(G0),Xa(Xp),iZ(),t=e.flags,t&64)throw Error(ar(285));return e.flags=t&-4097|64,e;case 5:return oZ(e),null;case 13:return Xa(ll),t=e.flags,t&4096?(e.flags=t&-4097|64,e):null;case 19:return Xa(ll),null;case 4:return UP(),null;case 10:return rZ(e),null;case 23:case 24:return mZ(),null;default:return null}}function fZ(e,t){try{var n="",r=t;do n+=eMe(r),r=r.return;while(r);var o=n}catch(i){o=` +`+o[d].replace(" at new "," at ");while(1<=d&&0<=y);break}}}finally{xY=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?OT(e):""}function eMe(e){switch(e.tag){case 5:return OT(e.type);case 16:return OT("Lazy");case 13:return OT("Suspense");case 19:return OT("SuspenseList");case 0:case 2:case 15:return e=u$(e.type,!1),e;case 11:return e=u$(e.type.render,!1),e;case 22:return e=u$(e.type._render,!1),e;case 1:return e=u$(e.type,!0),e;default:return""}}function MP(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case GS:return"Fragment";case VI:return"Portal";case ET:return"Profiler";case AQ:return"StrictMode";case IT:return"Suspense";case A$:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case RQ:return(e.displayName||"Context")+".Consumer";case MQ:return(e._context.displayName||"Context")+".Provider";case rV:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case nV:return MP(e.type);case zQ:return MP(e._render);case DQ:t=e._payload,e=e._init;try{return MP(e(t))}catch{}}return null}function iE(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function t1e(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function tMe(e){var t=t1e(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var o=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(d){r=""+d,i.call(this,d)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(d){r=""+d},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function c$(e){e._valueTracker||(e._valueTracker=tMe(e))}function r1e(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=t1e(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function M$(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function VY(e,t){var n=t.checked;return ds({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function q0e(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=iE(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function n1e(e,t){t=t.checked,t!=null&&TQ(e,"checked",t,!1)}function qY(e,t){n1e(e,t);var n=iE(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?UY(e,t.type,n):t.hasOwnProperty("defaultValue")&&UY(e,t.type,iE(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function U0e(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function UY(e,t,n){(t!=="number"||M$(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function rMe(e){var t="";return tV.Children.forEach(e,function(n){n!=null&&(t+=n)}),t}function GY(e,t){return e=ds({children:void 0},t),(t=rMe(t.children))&&(e.children=t),e}function RP(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o=n.length))throw Error(sr(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:iE(n)}}function o1e(e,t){var n=iE(t.value),r=iE(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=""+r)}function J0e(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}var XY={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function i1e(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function KY(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?i1e(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var f$,a1e=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,o)})}:e}(function(e,t){if(e.namespaceURI!==XY.svg||"innerHTML"in e)e.innerHTML=t;else{for(f$=f$||document.createElement("div"),f$.innerHTML=""+t.valueOf().toString()+"",t=f$.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function LT(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var kT={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},nMe=["Webkit","ms","Moz","O"];Object.keys(kT).forEach(function(e){nMe.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),kT[t]=kT[e]})});function s1e(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||kT.hasOwnProperty(e)&&kT[e]?(""+t).trim():t+"px"}function l1e(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,o=s1e(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}var oMe=ds({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function YY(e,t){if(t){if(oMe[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(sr(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(sr(60));if(!(typeof t.dangerouslySetInnerHTML=="object"&&"__html"in t.dangerouslySetInnerHTML))throw Error(sr(61))}if(t.style!=null&&typeof t.style!="object")throw Error(sr(62))}}function QY(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function FQ(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var ZY=null,DP=null,zP=null;function X0e(e){if(e=QT(e)){if(typeof ZY!="function")throw Error(sr(280));var t=e.stateNode;t&&(t=uV(t),ZY(e.stateNode,e.type,t))}}function u1e(e){DP?zP?zP.push(e):zP=[e]:DP=e}function c1e(){if(DP){var e=DP,t=zP;if(zP=DP=null,X0e(e),t)for(e=0;er?0:1<n;n++)t.push(e);return t}function iV(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,e=e.eventTimes,t=31-aE(t),e[t]=n}var aE=Math.clz32?Math.clz32:wMe,yMe=Math.log,bMe=Math.LN2;function wMe(e){return e===0?32:31-(yMe(e)/bMe|0)|0}var OMe=Mc.unstable_UserBlockingPriority,xMe=Mc.unstable_runWithPriority,_$=!0;function _Me(e,t,n,r){qI||WQ();var o=UQ,i=qI;qI=!0;try{f1e(o,e,t,n,r)}finally{(qI=i)||HQ()}}function SMe(e,t,n,r){xMe(OMe,UQ.bind(null,e,t,n,r))}function UQ(e,t,n,r){if(_$){var o;if((o=(t&4)===0)&&0=jT),ime=String.fromCharCode(32),ame=!1;function P1e(e,t){switch(e){case"keyup":return GMe.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function j1e(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var PP=!1;function XMe(e,t){switch(e){case"compositionend":return j1e(t);case"keypress":return t.which!==32?null:(ame=!0,ime);case"textInput":return e=t.data,e===ime&&ame?null:e;default:return null}}function KMe(e,t){if(PP)return e==="compositionend"||!YQ&&P1e(e,t)?(e=I1e(),S$=JQ=JS=null,PP=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ume(n)}}function M1e(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?M1e(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function fme(){for(var e=window,t=M$();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=M$(e.document)}return t}function oQ(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}var aRe=M_&&"documentMode"in document&&11>=document.documentMode,jP=null,iQ=null,TT=null,aQ=!1;function pme(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;aQ||jP==null||jP!==M$(r)||(r=jP,"selectionStart"in r&&oQ(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),TT&&VT(TT,r)||(TT=r,r=N$(iQ,"onSelect"),0TP||(e.current=lQ[TP],lQ[TP]=null,TP--)}function ul(e,t){TP++,lQ[TP]=e.current,e.current=t}var sE={},Xp=cE(sE),G0=cE(!1),KI=sE;function VP(e,t){var n=e.type.contextTypes;if(!n)return sE;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o={},i;for(i in n)o[i]=t[i];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function J0(e){return e=e.childContextTypes,e!=null}function B$(){Xa(G0),Xa(Xp)}function wme(e,t,n){if(Xp.current!==sE)throw Error(sr(168));ul(Xp,t),ul(G0,n)}function W1e(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var o in r)if(!(o in e))throw Error(sr(108,MP(t)||"Unknown",o));return ds({},n,r)}function I$(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||sE,KI=Xp.current,ul(Xp,e),ul(G0,G0.current),!0}function Ome(e,t,n){var r=e.stateNode;if(!r)throw Error(sr(169));n?(e=W1e(e,t,KI),r.__reactInternalMemoizedMergedChildContext=e,Xa(G0),Xa(Xp),ul(Xp,e)):Xa(G0),ul(G0,n)}var ZQ=null,XI=null,uRe=Mc.unstable_runWithPriority,eZ=Mc.unstable_scheduleCallback,uQ=Mc.unstable_cancelCallback,cRe=Mc.unstable_shouldYield,xme=Mc.unstable_requestPaint,cQ=Mc.unstable_now,fRe=Mc.unstable_getCurrentPriorityLevel,cV=Mc.unstable_ImmediatePriority,H1e=Mc.unstable_UserBlockingPriority,$1e=Mc.unstable_NormalPriority,V1e=Mc.unstable_LowPriority,q1e=Mc.unstable_IdlePriority,RY={},pRe=xme!==void 0?xme:function(){},P_=null,k$=null,DY=!1,_me=cQ(),Gp=1e4>_me?cQ:function(){return cQ()-_me};function qP(){switch(fRe()){case cV:return 99;case H1e:return 98;case $1e:return 97;case V1e:return 96;case q1e:return 95;default:throw Error(sr(332))}}function U1e(e){switch(e){case 99:return cV;case 98:return H1e;case 97:return $1e;case 96:return V1e;case 95:return q1e;default:throw Error(sr(332))}}function YI(e,t){return e=U1e(e),uRe(e,t)}function UT(e,t,n){return e=U1e(e),eZ(e,t,n)}function n4(){if(k$!==null){var e=k$;k$=null,uQ(e)}G1e()}function G1e(){if(!DY&&P_!==null){DY=!0;var e=0;try{var t=P_;YI(99,function(){for(;eae?(Pe=ge,ge=null):Pe=ge.sibling;var Ne=L(U,ge,Z[ae],fe);if(Ne===null){ge===null&&(ge=Pe);break}e&&ge&&Ne.alternate===null&&t(U,ge),X=i(Ne,X,ae),ye===null?me=Ne:ye.sibling=Ne,ye=Ne,ge=Pe}if(ae===Z.length)return n(U,ge),me;if(ge===null){for(;aeae?(Pe=ge,ge=null):Pe=ge.sibling;var Ye=L(U,ge,Ne.value,fe);if(Ye===null){ge===null&&(ge=Pe);break}e&&ge&&Ye.alternate===null&&t(U,ge),X=i(Ye,X,ae),ye===null?me=Ye:ye.sibling=Ye,ye=Ye,ge=Pe}if(Ne.done)return n(U,ge),me;if(ge===null){for(;!Ne.done;ae++,Ne=Z.next())Ne=N(U,Ne.value,fe),Ne!==null&&(X=i(Ne,X,ae),ye===null?me=Ne:ye.sibling=Ne,ye=Ne);return me}for(ge=r(U,ge);!Ne.done;ae++,Ne=Z.next())Ne=Y(ge,U,ae,Ne.value,fe),Ne!==null&&(e&&Ne.alternate!==null&&ge.delete(Ne.key===null?ae:Ne.key),X=i(Ne,X,ae),ye===null?me=Ne:ye.sibling=Ne,ye=Ne);return e&&ge.forEach(function(Je){return t(U,Je)}),me}return function(U,X,Z,fe){var me=typeof Z=="object"&&Z!==null&&Z.type===GS&&Z.key===null;me&&(Z=Z.props.children);var ye=typeof Z=="object"&&Z!==null;if(ye)switch(Z.$$typeof){case wT:e:{for(ye=Z.key,me=X;me!==null;){if(me.key===ye){switch(me.tag){case 7:if(Z.type===GS){n(U,me.sibling),X=o(me,Z.props.children),X.return=U,U=X;break e}break;default:if(me.elementType===Z.type){n(U,me.sibling),X=o(me,Z.props),X.ref=dT(U,me,Z),X.return=U,U=X;break e}}n(U,me);break}else t(U,me);me=me.sibling}Z.type===GS?(X=HP(Z.props.children,U.mode,fe,Z.key),X.return=U,U=X):(fe=T$(Z.type,Z.key,Z.props,null,U.mode,fe),fe.ref=dT(U,X,Z),fe.return=U,U=fe)}return d(U);case VI:e:{for(me=Z.key;X!==null;){if(X.key===me)if(X.tag===4&&X.stateNode.containerInfo===Z.containerInfo&&X.stateNode.implementation===Z.implementation){n(U,X.sibling),X=o(X,Z.children||[]),X.return=U,U=X;break e}else{n(U,X);break}else t(U,X);X=X.sibling}X=WY(Z,U.mode,fe),X.return=U,U=X}return d(U)}if(typeof Z=="string"||typeof Z=="number")return Z=""+Z,X!==null&&X.tag===6?(n(U,X.sibling),X=o(X,Z),X.return=U,U=X):(n(U,X),X=BY(Z,U.mode,fe),X.return=U,U=X),d(U);if(g$(Z))return q(U,X,Z,fe);if(lT(Z))return K(U,X,Z,fe);if(ye&&y$(U,Z),typeof Z>"u"&&!me)switch(U.tag){case 1:case 22:case 0:case 11:case 15:throw Error(sr(152,MP(U.type)||"Component"))}return n(U,X)}}var q$=Q1e(!0),Z1e=Q1e(!1),ZT={},t4=cE(ZT),JT=cE(ZT),XT=cE(ZT);function GI(e){if(e===ZT)throw Error(sr(174));return e}function pQ(e,t){switch(ul(XT,t),ul(JT,e),ul(t4,ZT),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:KY(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=KY(t,e)}Xa(t4),ul(t4,t)}function UP(){Xa(t4),Xa(JT),Xa(XT)}function Pme(e){GI(XT.current);var t=GI(t4.current),n=KY(t,e.type);t!==n&&(ul(JT,e),ul(t4,n))}function oZ(e){JT.current===e&&(Xa(t4),Xa(JT))}var ll=cE(0);function U$(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&64)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var C_=null,KS=null,r4=!1;function eve(e,t){var n=Ry(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,e.lastEffect!==null?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function jme(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,!0):!1;case 13:return!1;default:return!1}}function dQ(e){if(r4){var t=KS;if(t){var n=t;if(!jme(e,t)){if(t=NP(n.nextSibling),!t||!jme(e,t)){e.flags=e.flags&-1025|2,r4=!1,C_=e;return}eve(C_,n)}C_=e,KS=NP(t.firstChild)}else e.flags=e.flags&-1025|2,r4=!1,C_=e}}function Cme(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;C_=e}function b$(e){if(e!==C_)return!1;if(!r4)return Cme(e),r4=!0,!1;var t=e.type;if(e.tag!==5||t!=="head"&&t!=="body"&&!sQ(t,e.memoizedProps))for(t=KS;t;)eve(e,t),t=NP(t.nextSibling);if(Cme(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(sr(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){KS=NP(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}KS=null}}else KS=C_?NP(e.stateNode.nextSibling):null;return!0}function zY(){KS=C_=null,r4=!1}var FP=[];function iZ(){for(var e=0;ei))throw Error(sr(301));i+=1,Mf=Up=null,t.updateQueue=null,AT.current=gRe,e=n(r,o)}while(MT)}if(AT.current=Y$,t=Up!==null&&Up.next!==null,KT=0,Mf=Up=Ll=null,G$=!1,t)throw Error(sr(300));return e}function JI(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Mf===null?Ll.memoizedState=Mf=e:Mf=Mf.next=e,Mf}function rk(){if(Up===null){var e=Ll.alternate;e=e!==null?e.memoizedState:null}else e=Up.next;var t=Mf===null?Ll.memoizedState:Mf.next;if(t!==null)Mf=t,Up=e;else{if(e===null)throw Error(sr(310));Up=e,e={memoizedState:Up.memoizedState,baseState:Up.baseState,baseQueue:Up.baseQueue,queue:Up.queue,next:null},Mf===null?Ll.memoizedState=Mf=e:Mf=Mf.next=e}return Mf}function ZO(e,t){return typeof t=="function"?t(e):t}function hT(e){var t=rk(),n=t.queue;if(n===null)throw Error(sr(311));n.lastRenderedReducer=e;var r=Up,o=r.baseQueue,i=n.pending;if(i!==null){if(o!==null){var d=o.next;o.next=i.next,i.next=d}r.baseQueue=o=i,n.pending=null}if(o!==null){o=o.next,r=r.baseState;var y=d=i=null,_=o;do{var k=_.lane;if((KT&k)===k)y!==null&&(y=y.next={lane:0,action:_.action,eagerReducer:_.eagerReducer,eagerState:_.eagerState,next:null}),r=_.eagerReducer===e?_.eagerState:e(r,_.action);else{var T={lane:k,action:_.action,eagerReducer:_.eagerReducer,eagerState:_.eagerState,next:null};y===null?(d=y=T,i=r):y=y.next=T,Ll.lanes|=k,eA|=k}_=_.next}while(_!==null&&_!==o);y===null?i=r:y.next=d,My(r,t.memoizedState)||(x3=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=y,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function mT(e){var t=rk(),n=t.queue;if(n===null)throw Error(sr(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(o!==null){n.pending=null;var d=o=o.next;do i=e(i,d.action),d=d.next;while(d!==o);My(i,t.memoizedState)||(x3=!0),t.memoizedState=i,t.baseQueue===null&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Tme(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(o!==null?e=o===r:(e=e.mutableReadLanes,(e=(KT&e)===e)&&(t._workInProgressVersionPrimary=r,FP.push(t))),e)return n(t._source);throw FP.push(t),Error(sr(350))}function tve(e,t,n,r){var o=ih;if(o===null)throw Error(sr(349));var i=t._getVersion,d=i(t._source),y=AT.current,_=y.useState(function(){return Tme(o,t,n)}),k=_[1],T=_[0];_=Mf;var N=e.memoizedState,L=N.refs,Y=L.getSnapshot,q=N.source;N=N.subscribe;var K=Ll;return e.memoizedState={refs:L,source:t,subscribe:r},y.useEffect(function(){L.getSnapshot=n,L.setSnapshot=k;var U=i(t._source);if(!My(d,U)){U=n(t._source),My(T,U)||(k(U),U=rE(K),o.mutableReadLanes|=U&o.pendingLanes),U=o.mutableReadLanes,o.entangledLanes|=U;for(var X=o.entanglements,Z=U;0n?98:n,function(){e(!0)}),YI(97<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=d.createElement(n,{is:r.is}):(e=d.createElement(n),n==="select"&&(d=e,r.multiple?d.multiple=!0:r.size&&(d.size=r.size))):e=d.createElementNS(e,n),e[XS]=t,e[F$]=r,cve(e,t,!1,!1),t.stateNode=e,d=QY(n,r),n){case"dialog":Ja("cancel",e),Ja("close",e),o=r;break;case"iframe":case"object":case"embed":Ja("load",e),o=r;break;case"video":case"audio":for(o=0;o_Q&&(t.flags|=64,i=!0,gT(r,!1),t.lanes=33554432)}else{if(!i)if(e=U$(d),e!==null){if(t.flags|=64,i=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),gT(r,!0),r.tail===null&&r.tailMode==="hidden"&&!d.alternate&&!r4)return t=t.lastEffect=r.lastEffect,t!==null&&(t.nextEffect=null),null}else 2*Gp()-r.renderingStartTime>_Q&&n!==1073741824&&(t.flags|=64,i=!0,gT(r,!1),t.lanes=33554432);r.isBackwards?(d.sibling=t.child,t.child=d):(n=r.last,n!==null?n.sibling=d:t.child=d,r.last=d)}return r.tail!==null?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Gp(),n.sibling=null,t=ll.current,ul(ll,i?t&1|2:t&1),n):null;case 23:case 24:return mZ(),e!==null&&e.memoizedState!==null!=(t.memoizedState!==null)&&r.mode!=="unstable-defer-without-hiding"&&(t.flags|=4),null}throw Error(sr(156,t.tag))}function wRe(e){switch(e.tag){case 1:J0(e.type)&&B$();var t=e.flags;return t&4096?(e.flags=t&-4097|64,e):null;case 3:if(UP(),Xa(G0),Xa(Xp),iZ(),t=e.flags,t&64)throw Error(sr(285));return e.flags=t&-4097|64,e;case 5:return oZ(e),null;case 13:return Xa(ll),t=e.flags,t&4096?(e.flags=t&-4097|64,e):null;case 19:return Xa(ll),null;case 4:return UP(),null;case 10:return rZ(e),null;case 23:case 24:return mZ(),null;default:return null}}function fZ(e,t){try{var n="",r=t;do n+=eMe(r),r=r.return;while(r);var o=n}catch(i){o=` Error generating stack: `+i.message+` -`+i.stack}return{value:e,source:t,stack:o}}function yQ(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var ORe=typeof WeakMap=="function"?WeakMap:Map;function dve(e,t,n){n=eE(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Z$||(Z$=!0,SQ=r),yQ(e,t)},n}function hve(e,t,n){n=eE(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var o=t.value;n.payload=function(){return yQ(e,t),r(o)}}var i=e.stateNode;return i!==null&&typeof i.componentDidCatch=="function"&&(n.callback=function(){typeof r!="function"&&(e4===null?e4=new Set([this]):e4.add(this),yQ(e,t));var d=t.stack;this.componentDidCatch(t.value,{componentStack:d!==null?d:""})}),n}var xRe=typeof WeakSet=="function"?WeakSet:Set;function Vme(e){var t=e.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(n){oE(e,n)}else t.current=null}function _Re(e,t){switch(t.tag){case 0:case 11:case 15:case 22:return;case 1:if(t.flags&256&&e!==null){var n=e.memoizedProps,r=e.memoizedState;e=t.stateNode,t=e.getSnapshotBeforeUpdate(t.elementType===t.type?n:O3(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:t.flags&256&&QQ(t.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(ar(163))}function SRe(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(t=n.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{if((e.tag&3)===3){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(t=n.updateQueue,t=t!==null?t.lastEffect:null,t!==null){e=t=t.next;do{var o=e;r=o.next,o=o.tag,o&4&&o&1&&(_ve(n,e),ARe(n,e)),e=r}while(e!==t)}return;case 1:e=n.stateNode,n.flags&4&&(t===null?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:O3(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),t=n.updateQueue,t!==null&&Eme(n,t,e);return;case 3:if(t=n.updateQueue,t!==null){if(e=null,n.child!==null)switch(n.child.tag){case 5:e=n.child.stateNode;break;case 1:e=n.child.stateNode}Eme(n,t,e)}return;case 5:e=n.stateNode,t===null&&n.flags&4&&F1e(n.type,n.memoizedProps)&&e.focus();return;case 6:return;case 4:return;case 12:return;case 13:n.memoizedState===null&&(n=n.alternate,n!==null&&(n=n.memoizedState,n!==null&&(n=n.dehydrated,n!==null&&y1e(n))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(ar(163))}function qme(e,t){for(var n=e;;){if(n.tag===5){var r=n.stateNode;if(t)r=r.style,typeof r.setProperty=="function"?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=o!=null&&o.hasOwnProperty("display")?o.display:null,r.style.display=s1e("display",o)}}else if(n.tag===6)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((n.tag!==23&&n.tag!==24||n.memoizedState===null||n===e)&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===e)break;for(;n.sibling===null;){if(n.return===null||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function Ume(e,t){if(XI&&typeof XI.onCommitFiberUnmount=="function")try{XI.onCommitFiberUnmount(ZQ,t)}catch{}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(e=t.updateQueue,e!==null&&(e=e.lastEffect,e!==null)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,o!==void 0)if(r&4)_ve(t,n);else{r=t;try{o()}catch(i){oE(r,i)}}n=n.next}while(n!==e)}break;case 1:if(Vme(t),e=t.stateNode,typeof e.componentWillUnmount=="function")try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(i){oE(t,i)}break;case 5:Vme(t);break;case 4:mve(e,t)}}function Gme(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function Jme(e){return e.tag===5||e.tag===3||e.tag===4}function Xme(e){e:{for(var t=e.return;t!==null;){if(Jme(t))break e;t=t.return}throw Error(ar(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:t=t.containerInfo,r=!0;break;case 4:t=t.containerInfo,r=!0;break;default:throw Error(ar(161))}n.flags&16&&(LT(t,""),n.flags&=-17);e:t:for(n=e;;){for(;n.sibling===null;){if(n.return===null||Jme(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.flags&2||n.child===null||n.tag===4)continue t;n.child.return=n,n=n.child}if(!(n.flags&2)){n=n.stateNode;break e}}r?bQ(e,n,t):wQ(e,n,t)}function bQ(e,t,n){var r=e.tag,o=r===5||r===6;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=L$));else if(r!==4&&(e=e.child,e!==null))for(bQ(e,t,n),e=e.sibling;e!==null;)bQ(e,t,n),e=e.sibling}function wQ(e,t,n){var r=e.tag,o=r===5||r===6;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(wQ(e,t,n),e=e.sibling;e!==null;)wQ(e,t,n),e=e.sibling}function mve(e,t){for(var n=t,r=!1,o,i;;){if(!r){r=n.return;e:for(;;){if(r===null)throw Error(ar(160));switch(o=r.stateNode,r.tag){case 5:i=!1;break e;case 3:o=o.containerInfo,i=!0;break e;case 4:o=o.containerInfo,i=!0;break e}r=r.return}r=!0}if(n.tag===5||n.tag===6){e:for(var d=e,y=n,_=y;;)if(Ume(d,_),_.child!==null&&_.tag!==4)_.child.return=_,_=_.child;else{if(_===y)break e;for(;_.sibling===null;){if(_.return===null||_.return===y)break e;_=_.return}_.sibling.return=_.return,_=_.sibling}i?(d=o,y=n.stateNode,d.nodeType===8?d.parentNode.removeChild(y):d.removeChild(y)):o.removeChild(n.stateNode)}else if(n.tag===4){if(n.child!==null){o=n.stateNode.containerInfo,i=!0,n.child.return=n,n=n.child;continue}}else if(Ume(e,n),n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return,n.tag===4&&(r=!1)}n.sibling.return=n.return,n=n.sibling}}function FY(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var r=n=n.next;do(r.tag&3)===3&&(e=r.destroy,r.destroy=void 0,e!==void 0&&e()),r=r.next;while(r!==n)}return;case 1:return;case 5:if(n=t.stateNode,n!=null){r=t.memoizedProps;var o=e!==null?e.memoizedProps:r;e=t.type;var i=t.updateQueue;if(t.updateQueue=null,i!==null){for(n[F$]=r,e==="input"&&r.type==="radio"&&r.name!=null&&n1e(n,r),QY(e,o),t=QY(e,r),o=0;oo&&(o=d),n&=~i}if(n=o,n=Gp()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*IRe(n/1960))-n,10o&&(o=d),n&=~i}if(n=o,n=Gp()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*IRe(n/1960))-n,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}Rf!==5&&(Rf=2),_=fZ(_,y),L=d;do{switch(L.tag){case 3:i=_,L.flags|=4096,t&=-t,L.lanes|=t;var ye=dve(L,i,t);Sme(L,ye);break e;case 1:i=_;var ge=L.type,ae=L.stateNode;if(!(L.flags&64)&&(typeof ge.getDerivedStateFromError=="function"||ae!==null&&typeof ae.componentDidCatch=="function"&&(e4===null||!e4.has(ae)))){L.flags|=4096,t&=-t,L.lanes|=t;var Pe=hve(L,i,t);Sme(L,Pe);break e}}L=L.return}while(L!==null)}xve(n)}catch(Ne){t=Ne,ic===n&&n!==null&&(ic=n=n.return);continue}break}while(1)}function wve(){var e=Q$.current;return Q$.current=Y$,e===null?Y$:e}function ST(e,t){var n=Wn;Wn|=16;var r=wve();ih===e&&Jp===t||WP(e,t);do try{PRe();break}catch(o){bve(e,o)}while(1);if(tZ(),Wn=n,Q$.current=r,ic!==null)throw Error(ar(261));return ih=null,Jp=0,Rf}function PRe(){for(;ic!==null;)Ove(ic)}function jRe(){for(;ic!==null&&!cRe();)Ove(ic)}function Ove(e){var t=Sve(e.alternate,e,QI);e.memoizedProps=e.pendingProps,t===null?xve(e):ic=t,pZ.current=null}function xve(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&2048){if(n=wRe(t),n!==null){n.flags&=2047,ic=n;return}e!==null&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}else{if(n=bRe(n,t,QI),n!==null){ic=n;return}if(n=t,n.tag!==24&&n.tag!==23||n.memoizedState===null||QI&1073741824||!(n.mode&4)){for(var r=0,o=n.child;o!==null;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}e!==null&&!(e.flags&2048)&&(e.firstEffect===null&&(e.firstEffect=t.firstEffect),t.lastEffect!==null&&(e.lastEffect!==null&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1d&&(y=d,d=ye,ye=y),y=cme(Z,ye),i=cme(Z,d),y&&i&&(me.rangeCount!==1||me.anchorNode!==y.node||me.anchorOffset!==y.offset||me.focusNode!==i.node||me.focusOffset!==i.offset)&&(fe=fe.createRange(),fe.setStart(y.node,y.offset),me.removeAllRanges(),ye>d?(me.addRange(fe),me.extend(i.node,i.offset)):(fe.setEnd(i.node,i.offset),me.addRange(fe)))))),fe=[],me=Z;me=me.parentNode;)me.nodeType===1&&fe.push({element:me,left:me.scrollLeft,top:me.scrollTop});for(typeof Z.focus=="function"&&Z.focus(),Z=0;ZGp()-hZ?WP(e,0):dZ|=n),Ny(e,t)}function DRe(e,t){var n=e.stateNode;n!==null&&n.delete(t),t=0,t===0&&(t=e.mode,t&2?t&4?(j_===0&&(j_=XP),t=IP(62914560&~j_),t===0&&(t=4194304)):t=qP()===99?1:2:t=1),n=nv(),e=dV(e,t),e!==null&&(iV(e,t,n),Ny(e,n))}var Sve;Sve=function(e,t,n){var r=t.lanes;if(e!==null)if(e.memoizedProps!==t.pendingProps||G0.current)x3=!0;else if(n&r)x3=!!(e.flags&16384);else{switch(x3=!1,t.tag){case 3:Nme(t),zY();break;case 5:Pme(t);break;case 1:J0(t.type)&&I$(t);break;case 4:pQ(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;ul(W$,o._currentValue),o._currentValue=r;break;case 13:if(t.memoizedState!==null)return n&t.child.childLanes?Lme(e,t,n):(ul(ll,ll.current&1),t=T_(e,t,n),t!==null?t.sibling:null);ul(ll,ll.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&64){if(r)return $me(e,t,n);t.flags|=64}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),ul(ll,ll.current),r)break;return null;case 23:case 24:return t.lanes=0,NY(e,t,n)}return T_(e,t,n)}else x3=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=VP(t,Xp.current),LP(t,n),o=sZ(null,t,r,e,o,n),t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,J0(r)){var i=!0;I$(t)}else i=!1;t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,nZ(t);var d=r.getDerivedStateFromProps;typeof d=="function"&&V$(t,r,d,e),o.updater=fV,t.stateNode=o,o._reactInternals=t,fQ(t,r,e,n),t=vQ(null,t,r,!0,i,n)}else t.tag=0,U0(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,i=o._init,o=i(o._payload),t.type=o,i=t.tag=NRe(o),e=O3(o,e),i){case 0:t=mQ(null,t,o,e,n);break e;case 1:t=zme(null,t,o,e,n);break e;case 11:t=Rme(null,t,o,e,n);break e;case 14:t=Dme(null,t,o,O3(o.type,e),r,n);break e}throw Error(ar(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:O3(r,o),mQ(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:O3(r,o),zme(e,t,r,o,n);case 3:if(Nme(t),r=t.updateQueue,e===null||r===null)throw Error(ar(282));if(r=t.pendingProps,o=t.memoizedState,o=o!==null?o.element:null,X1e(e,t),GT(t,r,null,n),r=t.memoizedState.element,r===o)zY(),t=T_(e,t,n);else{if(o=t.stateNode,(i=o.hydrate)&&(KS=NP(t.stateNode.containerInfo.firstChild),C_=t,i=r4=!0),i){if(e=o.mutableSourceEagerHydrationData,e!=null)for(o=0;o{"use strict";function kve(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(kve)}catch(e){console.error(e)}}kve(),Pve.exports=Ive()});var yge=ot((KJt,gge)=>{"use strict";var uze="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";gge.exports=uze});var xge=ot((YJt,Oge)=>{"use strict";var cze=yge();function bge(){}function wge(){}wge.resetWarningCache=bge;Oge.exports=function(){function e(r,o,i,d,y,_){if(_!==cze){var k=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw k.name="Invariant Violation",k}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:wge,resetWarningCache:bge};return n.PropTypes=n,n}});var er=ot((eXt,_ge)=>{_ge.exports=xge()();var QJt,ZJt});var Ar=ot((tXt,HV)=>{(function(){"use strict";var e={}.hasOwnProperty;function t(){for(var o="",i=0;i{"use strict";var Dc=typeof Symbol=="function"&&Symbol.for,QZ=Dc?Symbol.for("react.element"):60103,ZZ=Dc?Symbol.for("react.portal"):60106,KV=Dc?Symbol.for("react.fragment"):60107,YV=Dc?Symbol.for("react.strict_mode"):60108,QV=Dc?Symbol.for("react.profiler"):60114,ZV=Dc?Symbol.for("react.provider"):60109,eq=Dc?Symbol.for("react.context"):60110,eee=Dc?Symbol.for("react.async_mode"):60111,tq=Dc?Symbol.for("react.concurrent_mode"):60111,rq=Dc?Symbol.for("react.forward_ref"):60112,nq=Dc?Symbol.for("react.suspense"):60113,xze=Dc?Symbol.for("react.suspense_list"):60120,oq=Dc?Symbol.for("react.memo"):60115,iq=Dc?Symbol.for("react.lazy"):60116,_ze=Dc?Symbol.for("react.block"):60121,Sze=Dc?Symbol.for("react.fundamental"):60117,Eze=Dc?Symbol.for("react.responder"):60118,Ize=Dc?Symbol.for("react.scope"):60119;function sv(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case QZ:switch(e=e.type,e){case eee:case tq:case KV:case QV:case YV:case nq:return e;default:switch(e=e&&e.$$typeof,e){case eq:case rq:case iq:case oq:case ZV:return e;default:return t}}case ZZ:return t}}}function Gge(e){return sv(e)===tq}Fi.AsyncMode=eee;Fi.ConcurrentMode=tq;Fi.ContextConsumer=eq;Fi.ContextProvider=ZV;Fi.Element=QZ;Fi.ForwardRef=rq;Fi.Fragment=KV;Fi.Lazy=iq;Fi.Memo=oq;Fi.Portal=ZZ;Fi.Profiler=QV;Fi.StrictMode=YV;Fi.Suspense=nq;Fi.isAsyncMode=function(e){return Gge(e)||sv(e)===eee};Fi.isConcurrentMode=Gge;Fi.isContextConsumer=function(e){return sv(e)===eq};Fi.isContextProvider=function(e){return sv(e)===ZV};Fi.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===QZ};Fi.isForwardRef=function(e){return sv(e)===rq};Fi.isFragment=function(e){return sv(e)===KV};Fi.isLazy=function(e){return sv(e)===iq};Fi.isMemo=function(e){return sv(e)===oq};Fi.isPortal=function(e){return sv(e)===ZZ};Fi.isProfiler=function(e){return sv(e)===QV};Fi.isStrictMode=function(e){return sv(e)===YV};Fi.isSuspense=function(e){return sv(e)===nq};Fi.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===KV||e===tq||e===QV||e===YV||e===nq||e===xze||typeof e=="object"&&e!==null&&(e.$$typeof===iq||e.$$typeof===oq||e.$$typeof===ZV||e.$$typeof===eq||e.$$typeof===rq||e.$$typeof===Sze||e.$$typeof===Eze||e.$$typeof===Ize||e.$$typeof===_ze)};Fi.typeOf=sv});var Kge=ot((EXt,Xge)=>{"use strict";Xge.exports=Jge()});var nye=ot((IXt,rye)=>{"use strict";var tee=Kge(),kze={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Pze={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},jze={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},eye={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},ree={};ree[tee.ForwardRef]=jze;ree[tee.Memo]=eye;function Yge(e){return tee.isMemo(e)?eye:ree[e.$$typeof]||kze}var Cze=Object.defineProperty,Tze=Object.getOwnPropertyNames,Qge=Object.getOwnPropertySymbols,Aze=Object.getOwnPropertyDescriptor,Mze=Object.getPrototypeOf,Zge=Object.prototype;function tye(e,t,n){if(typeof t!="string"){if(Zge){var r=Mze(t);r&&r!==Zge&&tye(e,r,n)}var o=Tze(t);Qge&&(o=o.concat(Qge(t)));for(var i=Yge(e),d=Yge(t),y=0;y{function gBe(){this.__data__=[],this.size=0}i2e.exports=gBe});var qq=ot((jor,s2e)=>{function yBe(e,t){return e===t||e!==e&&t!==t}s2e.exports=yBe});var HA=ot((Cor,l2e)=>{var bBe=qq();function wBe(e,t){for(var n=e.length;n--;)if(bBe(e[n][0],t))return n;return-1}l2e.exports=wBe});var c2e=ot((Tor,u2e)=>{var OBe=HA(),xBe=Array.prototype,_Be=xBe.splice;function SBe(e){var t=this.__data__,n=OBe(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():_Be.call(t,n,1),--this.size,!0}u2e.exports=SBe});var p2e=ot((Aor,f2e)=>{var EBe=HA();function IBe(e){var t=this.__data__,n=EBe(t,e);return n<0?void 0:t[n][1]}f2e.exports=IBe});var h2e=ot((Mor,d2e)=>{var kBe=HA();function PBe(e){return kBe(this.__data__,e)>-1}d2e.exports=PBe});var v2e=ot((Ror,m2e)=>{var jBe=HA();function CBe(e,t){var n=this.__data__,r=jBe(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}m2e.exports=CBe});var $A=ot((Dor,g2e)=>{var TBe=a2e(),ABe=c2e(),MBe=p2e(),RBe=h2e(),DBe=v2e();function Cj(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var zBe=$A();function NBe(){this.__data__=new zBe,this.size=0}y2e.exports=NBe});var O2e=ot((Nor,w2e)=>{function LBe(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}w2e.exports=LBe});var _2e=ot((Lor,x2e)=>{function FBe(e){return this.__data__.get(e)}x2e.exports=FBe});var E2e=ot((For,S2e)=>{function BBe(e){return this.__data__.has(e)}S2e.exports=BBe});var tte=ot((Bor,I2e)=>{var WBe=typeof global=="object"&&global&&global.Object===Object&&global;I2e.exports=WBe});var T3=ot((Wor,k2e)=>{var HBe=tte(),$Be=typeof self=="object"&&self&&self.Object===Object&&self,VBe=HBe||$Be||Function("return this")();k2e.exports=VBe});var hk=ot((Hor,P2e)=>{var qBe=T3(),UBe=qBe.Symbol;P2e.exports=UBe});var A2e=ot(($or,T2e)=>{var j2e=hk(),C2e=Object.prototype,GBe=C2e.hasOwnProperty,JBe=C2e.toString,VA=j2e?j2e.toStringTag:void 0;function XBe(e){var t=GBe.call(e,VA),n=e[VA];try{e[VA]=void 0;var r=!0}catch{}var o=JBe.call(e);return r&&(t?e[VA]=n:delete e[VA]),o}T2e.exports=XBe});var R2e=ot((Vor,M2e)=>{var KBe=Object.prototype,YBe=KBe.toString;function QBe(e){return YBe.call(e)}M2e.exports=QBe});var f4=ot((qor,N2e)=>{var D2e=hk(),ZBe=A2e(),eWe=R2e(),tWe="[object Null]",rWe="[object Undefined]",z2e=D2e?D2e.toStringTag:void 0;function nWe(e){return e==null?e===void 0?rWe:tWe:z2e&&z2e in Object(e)?ZBe(e):eWe(e)}N2e.exports=nWe});var mk=ot((Uor,L2e)=>{function oWe(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}L2e.exports=oWe});var Uq=ot((Gor,F2e)=>{var iWe=f4(),aWe=mk(),sWe="[object AsyncFunction]",lWe="[object Function]",uWe="[object GeneratorFunction]",cWe="[object Proxy]";function fWe(e){if(!aWe(e))return!1;var t=iWe(e);return t==lWe||t==uWe||t==sWe||t==cWe}F2e.exports=fWe});var W2e=ot((Jor,B2e)=>{var pWe=T3(),dWe=pWe["__core-js_shared__"];B2e.exports=dWe});var V2e=ot((Xor,$2e)=>{var rte=W2e(),H2e=function(){var e=/[^.]+$/.exec(rte&&rte.keys&&rte.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function hWe(e){return!!H2e&&H2e in e}$2e.exports=hWe});var nte=ot((Kor,q2e)=>{var mWe=Function.prototype,vWe=mWe.toString;function gWe(e){if(e!=null){try{return vWe.call(e)}catch{}try{return e+""}catch{}}return""}q2e.exports=gWe});var G2e=ot((Yor,U2e)=>{var yWe=Uq(),bWe=V2e(),wWe=mk(),OWe=nte(),xWe=/[\\^$.*+?()[\]{}|]/g,_We=/^\[object .+?Constructor\]$/,SWe=Function.prototype,EWe=Object.prototype,IWe=SWe.toString,kWe=EWe.hasOwnProperty,PWe=RegExp("^"+IWe.call(kWe).replace(xWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function jWe(e){if(!wWe(e)||bWe(e))return!1;var t=yWe(e)?PWe:_We;return t.test(OWe(e))}U2e.exports=jWe});var X2e=ot((Qor,J2e)=>{function CWe(e,t){return e?.[t]}J2e.exports=CWe});var PE=ot((Zor,K2e)=>{var TWe=G2e(),AWe=X2e();function MWe(e,t){var n=AWe(e,t);return TWe(n)?n:void 0}K2e.exports=MWe});var Gq=ot((eir,Y2e)=>{var RWe=PE(),DWe=T3(),zWe=RWe(DWe,"Map");Y2e.exports=zWe});var qA=ot((tir,Q2e)=>{var NWe=PE(),LWe=NWe(Object,"create");Q2e.exports=LWe});var t3e=ot((rir,e3e)=>{var Z2e=qA();function FWe(){this.__data__=Z2e?Z2e(null):{},this.size=0}e3e.exports=FWe});var n3e=ot((nir,r3e)=>{function BWe(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}r3e.exports=BWe});var i3e=ot((oir,o3e)=>{var WWe=qA(),HWe="__lodash_hash_undefined__",$We=Object.prototype,VWe=$We.hasOwnProperty;function qWe(e){var t=this.__data__;if(WWe){var n=t[e];return n===HWe?void 0:n}return VWe.call(t,e)?t[e]:void 0}o3e.exports=qWe});var s3e=ot((iir,a3e)=>{var UWe=qA(),GWe=Object.prototype,JWe=GWe.hasOwnProperty;function XWe(e){var t=this.__data__;return UWe?t[e]!==void 0:JWe.call(t,e)}a3e.exports=XWe});var u3e=ot((air,l3e)=>{var KWe=qA(),YWe="__lodash_hash_undefined__";function QWe(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=KWe&&t===void 0?YWe:t,this}l3e.exports=QWe});var f3e=ot((sir,c3e)=>{var ZWe=t3e(),eHe=n3e(),tHe=i3e(),rHe=s3e(),nHe=u3e();function Tj(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var p3e=f3e(),oHe=$A(),iHe=Gq();function aHe(){this.size=0,this.__data__={hash:new p3e,map:new(iHe||oHe),string:new p3e}}d3e.exports=aHe});var v3e=ot((uir,m3e)=>{function sHe(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}m3e.exports=sHe});var UA=ot((cir,g3e)=>{var lHe=v3e();function uHe(e,t){var n=e.__data__;return lHe(t)?n[typeof t=="string"?"string":"hash"]:n.map}g3e.exports=uHe});var b3e=ot((fir,y3e)=>{var cHe=UA();function fHe(e){var t=cHe(this,e).delete(e);return this.size-=t?1:0,t}y3e.exports=fHe});var O3e=ot((pir,w3e)=>{var pHe=UA();function dHe(e){return pHe(this,e).get(e)}w3e.exports=dHe});var _3e=ot((dir,x3e)=>{var hHe=UA();function mHe(e){return hHe(this,e).has(e)}x3e.exports=mHe});var E3e=ot((hir,S3e)=>{var vHe=UA();function gHe(e,t){var n=vHe(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}S3e.exports=gHe});var Jq=ot((mir,I3e)=>{var yHe=h3e(),bHe=b3e(),wHe=O3e(),OHe=_3e(),xHe=E3e();function Aj(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var _He=$A(),SHe=Gq(),EHe=Jq(),IHe=200;function kHe(e,t){var n=this.__data__;if(n instanceof _He){var r=n.__data__;if(!SHe||r.length{var PHe=$A(),jHe=b2e(),CHe=O2e(),THe=_2e(),AHe=E2e(),MHe=P3e();function Mj(e){var t=this.__data__=new PHe(e);this.size=t.size}Mj.prototype.clear=jHe;Mj.prototype.delete=CHe;Mj.prototype.get=THe;Mj.prototype.has=AHe;Mj.prototype.set=MHe;j3e.exports=Mj});var T3e=ot((yir,C3e)=>{var RHe="__lodash_hash_undefined__";function DHe(e){return this.__data__.set(e,RHe),this}C3e.exports=DHe});var M3e=ot((bir,A3e)=>{function zHe(e){return this.__data__.has(e)}A3e.exports=zHe});var D3e=ot((wir,R3e)=>{var NHe=Jq(),LHe=T3e(),FHe=M3e();function Xq(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new NHe;++t{function BHe(e,t){for(var n=-1,r=e==null?0:e.length;++n{function WHe(e,t){return e.has(t)}L3e.exports=WHe});var ite=ot((_ir,B3e)=>{var HHe=D3e(),$He=N3e(),VHe=F3e(),qHe=1,UHe=2;function GHe(e,t,n,r,o,i){var d=n&qHe,y=e.length,_=t.length;if(y!=_&&!(d&&_>y))return!1;var k=i.get(e),T=i.get(t);if(k&&T)return k==t&&T==e;var N=-1,L=!0,Y=n&UHe?new HHe:void 0;for(i.set(e,t),i.set(t,e);++N{var JHe=T3(),XHe=JHe.Uint8Array;W3e.exports=XHe});var $3e=ot((Eir,H3e)=>{function KHe(e){var t=-1,n=Array(e.size);return e.forEach(function(r,o){n[++t]=[o,r]}),n}H3e.exports=KHe});var q3e=ot((Iir,V3e)=>{function YHe(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}V3e.exports=YHe});var K3e=ot((kir,X3e)=>{var U3e=hk(),G3e=ate(),QHe=qq(),ZHe=ite(),e$e=$3e(),t$e=q3e(),r$e=1,n$e=2,o$e="[object Boolean]",i$e="[object Date]",a$e="[object Error]",s$e="[object Map]",l$e="[object Number]",u$e="[object RegExp]",c$e="[object Set]",f$e="[object String]",p$e="[object Symbol]",d$e="[object ArrayBuffer]",h$e="[object DataView]",J3e=U3e?U3e.prototype:void 0,ste=J3e?J3e.valueOf:void 0;function m$e(e,t,n,r,o,i,d){switch(n){case h$e:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case d$e:return!(e.byteLength!=t.byteLength||!i(new G3e(e),new G3e(t)));case o$e:case i$e:case l$e:return QHe(+e,+t);case a$e:return e.name==t.name&&e.message==t.message;case u$e:case f$e:return e==t+"";case s$e:var y=e$e;case c$e:var _=r&r$e;if(y||(y=t$e),e.size!=t.size&&!_)return!1;var k=d.get(e);if(k)return k==t;r|=n$e,d.set(e,t);var T=ZHe(y(e),y(t),r,o,i,d);return d.delete(e),T;case p$e:if(ste)return ste.call(e)==ste.call(t)}return!1}X3e.exports=m$e});var Kq=ot((Pir,Y3e)=>{function v$e(e,t){for(var n=-1,r=t.length,o=e.length;++n{var g$e=Array.isArray;Q3e.exports=g$e});var lte=ot((Cir,Z3e)=>{var y$e=Kq(),b$e=A3();function w$e(e,t,n){var r=t(e);return b$e(e)?r:y$e(r,n(e))}Z3e.exports=w$e});var t5e=ot((Tir,e5e)=>{function O$e(e,t){for(var n=-1,r=e==null?0:e.length,o=0,i=[];++n{function x$e(){return[]}r5e.exports=x$e});var Yq=ot((Mir,o5e)=>{var _$e=t5e(),S$e=ute(),E$e=Object.prototype,I$e=E$e.propertyIsEnumerable,n5e=Object.getOwnPropertySymbols,k$e=n5e?function(e){return e==null?[]:(e=Object(e),_$e(n5e(e),function(t){return I$e.call(e,t)}))}:S$e;o5e.exports=k$e});var a5e=ot((Rir,i5e)=>{function P$e(e,t){for(var n=-1,r=Array(e);++n{function j$e(e){return e!=null&&typeof e=="object"}s5e.exports=j$e});var u5e=ot((zir,l5e)=>{var C$e=f4(),T$e=Uy(),A$e="[object Arguments]";function M$e(e){return T$e(e)&&C$e(e)==A$e}l5e.exports=M$e});var cte=ot((Nir,p5e)=>{var c5e=u5e(),R$e=Uy(),f5e=Object.prototype,D$e=f5e.hasOwnProperty,z$e=f5e.propertyIsEnumerable,N$e=c5e(function(){return arguments}())?c5e:function(e){return R$e(e)&&D$e.call(e,"callee")&&!z$e.call(e,"callee")};p5e.exports=N$e});var h5e=ot((Lir,d5e)=>{function L$e(){return!1}d5e.exports=L$e});var Qq=ot((GA,Rj)=>{var F$e=T3(),B$e=h5e(),g5e=typeof GA=="object"&&GA&&!GA.nodeType&&GA,m5e=g5e&&typeof Rj=="object"&&Rj&&!Rj.nodeType&&Rj,W$e=m5e&&m5e.exports===g5e,v5e=W$e?F$e.Buffer:void 0,H$e=v5e?v5e.isBuffer:void 0,$$e=H$e||B$e;Rj.exports=$$e});var b5e=ot((Fir,y5e)=>{var V$e=9007199254740991,q$e=/^(?:0|[1-9]\d*)$/;function U$e(e,t){var n=typeof e;return t=t??V$e,!!t&&(n=="number"||n!="symbol"&&q$e.test(e))&&e>-1&&e%1==0&&e{var G$e=9007199254740991;function J$e(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=G$e}w5e.exports=J$e});var x5e=ot((Wir,O5e)=>{var X$e=f4(),K$e=fte(),Y$e=Uy(),Q$e="[object Arguments]",Z$e="[object Array]",eVe="[object Boolean]",tVe="[object Date]",rVe="[object Error]",nVe="[object Function]",oVe="[object Map]",iVe="[object Number]",aVe="[object Object]",sVe="[object RegExp]",lVe="[object Set]",uVe="[object String]",cVe="[object WeakMap]",fVe="[object ArrayBuffer]",pVe="[object DataView]",dVe="[object Float32Array]",hVe="[object Float64Array]",mVe="[object Int8Array]",vVe="[object Int16Array]",gVe="[object Int32Array]",yVe="[object Uint8Array]",bVe="[object Uint8ClampedArray]",wVe="[object Uint16Array]",OVe="[object Uint32Array]",Ka={};Ka[dVe]=Ka[hVe]=Ka[mVe]=Ka[vVe]=Ka[gVe]=Ka[yVe]=Ka[bVe]=Ka[wVe]=Ka[OVe]=!0;Ka[Q$e]=Ka[Z$e]=Ka[fVe]=Ka[eVe]=Ka[pVe]=Ka[tVe]=Ka[rVe]=Ka[nVe]=Ka[oVe]=Ka[iVe]=Ka[aVe]=Ka[sVe]=Ka[lVe]=Ka[uVe]=Ka[cVe]=!1;function xVe(e){return Y$e(e)&&K$e(e.length)&&!!Ka[X$e(e)]}O5e.exports=xVe});var Zq=ot((Hir,_5e)=>{function _Ve(e){return function(t){return e(t)}}_5e.exports=_Ve});var eU=ot((JA,Dj)=>{var SVe=tte(),S5e=typeof JA=="object"&&JA&&!JA.nodeType&&JA,XA=S5e&&typeof Dj=="object"&&Dj&&!Dj.nodeType&&Dj,EVe=XA&&XA.exports===S5e,pte=EVe&&SVe.process,IVe=function(){try{var e=XA&&XA.require&&XA.require("util").types;return e||pte&&pte.binding&&pte.binding("util")}catch{}}();Dj.exports=IVe});var dte=ot(($ir,k5e)=>{var kVe=x5e(),PVe=Zq(),E5e=eU(),I5e=E5e&&E5e.isTypedArray,jVe=I5e?PVe(I5e):kVe;k5e.exports=jVe});var hte=ot((Vir,P5e)=>{var CVe=a5e(),TVe=cte(),AVe=A3(),MVe=Qq(),RVe=b5e(),DVe=dte(),zVe=Object.prototype,NVe=zVe.hasOwnProperty;function LVe(e,t){var n=AVe(e),r=!n&&TVe(e),o=!n&&!r&&MVe(e),i=!n&&!r&&!o&&DVe(e),d=n||r||o||i,y=d?CVe(e.length,String):[],_=y.length;for(var k in e)(t||NVe.call(e,k))&&!(d&&(k=="length"||o&&(k=="offset"||k=="parent")||i&&(k=="buffer"||k=="byteLength"||k=="byteOffset")||RVe(k,_)))&&y.push(k);return y}P5e.exports=LVe});var tU=ot((qir,j5e)=>{var FVe=Object.prototype;function BVe(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||FVe;return e===n}j5e.exports=BVe});var mte=ot((Uir,C5e)=>{function WVe(e,t){return function(n){return e(t(n))}}C5e.exports=WVe});var A5e=ot((Gir,T5e)=>{var HVe=mte(),$Ve=HVe(Object.keys,Object);T5e.exports=$Ve});var R5e=ot((Jir,M5e)=>{var VVe=tU(),qVe=A5e(),UVe=Object.prototype,GVe=UVe.hasOwnProperty;function JVe(e){if(!VVe(e))return qVe(e);var t=[];for(var n in Object(e))GVe.call(e,n)&&n!="constructor"&&t.push(n);return t}M5e.exports=JVe});var vte=ot((Xir,D5e)=>{var XVe=Uq(),KVe=fte();function YVe(e){return e!=null&&KVe(e.length)&&!XVe(e)}D5e.exports=YVe});var rU=ot((Kir,z5e)=>{var QVe=hte(),ZVe=R5e(),eqe=vte();function tqe(e){return eqe(e)?QVe(e):ZVe(e)}z5e.exports=tqe});var gte=ot((Yir,N5e)=>{var rqe=lte(),nqe=Yq(),oqe=rU();function iqe(e){return rqe(e,oqe,nqe)}N5e.exports=iqe});var B5e=ot((Qir,F5e)=>{var L5e=gte(),aqe=1,sqe=Object.prototype,lqe=sqe.hasOwnProperty;function uqe(e,t,n,r,o,i){var d=n&aqe,y=L5e(e),_=y.length,k=L5e(t),T=k.length;if(_!=T&&!d)return!1;for(var N=_;N--;){var L=y[N];if(!(d?L in t:lqe.call(t,L)))return!1}var Y=i.get(e),q=i.get(t);if(Y&&q)return Y==t&&q==e;var K=!0;i.set(e,t),i.set(t,e);for(var U=d;++N<_;){L=y[N];var X=e[L],Z=t[L];if(r)var fe=d?r(Z,X,L,t,e,i):r(X,Z,L,e,t,i);if(!(fe===void 0?X===Z||o(X,Z,n,r,i):fe)){K=!1;break}U||(U=L=="constructor")}if(K&&!U){var me=e.constructor,ye=t.constructor;me!=ye&&"constructor"in e&&"constructor"in t&&!(typeof me=="function"&&me instanceof me&&typeof ye=="function"&&ye instanceof ye)&&(K=!1)}return i.delete(e),i.delete(t),K}F5e.exports=uqe});var H5e=ot((Zir,W5e)=>{var cqe=PE(),fqe=T3(),pqe=cqe(fqe,"DataView");W5e.exports=pqe});var V5e=ot((ear,$5e)=>{var dqe=PE(),hqe=T3(),mqe=dqe(hqe,"Promise");$5e.exports=mqe});var U5e=ot((tar,q5e)=>{var vqe=PE(),gqe=T3(),yqe=vqe(gqe,"Set");q5e.exports=yqe});var J5e=ot((rar,G5e)=>{var bqe=PE(),wqe=T3(),Oqe=bqe(wqe,"WeakMap");G5e.exports=Oqe});var KA=ot((nar,twe)=>{var yte=H5e(),bte=Gq(),wte=V5e(),Ote=U5e(),xte=J5e(),ewe=f4(),zj=nte(),X5e="[object Map]",xqe="[object Object]",K5e="[object Promise]",Y5e="[object Set]",Q5e="[object WeakMap]",Z5e="[object DataView]",_qe=zj(yte),Sqe=zj(bte),Eqe=zj(wte),Iqe=zj(Ote),kqe=zj(xte),vk=ewe;(yte&&vk(new yte(new ArrayBuffer(1)))!=Z5e||bte&&vk(new bte)!=X5e||wte&&vk(wte.resolve())!=K5e||Ote&&vk(new Ote)!=Y5e||xte&&vk(new xte)!=Q5e)&&(vk=function(e){var t=ewe(e),n=t==xqe?e.constructor:void 0,r=n?zj(n):"";if(r)switch(r){case _qe:return Z5e;case Sqe:return X5e;case Eqe:return K5e;case Iqe:return Y5e;case kqe:return Q5e}return t});twe.exports=vk});var uwe=ot((oar,lwe)=>{var _te=ote(),Pqe=ite(),jqe=K3e(),Cqe=B5e(),rwe=KA(),nwe=A3(),owe=Qq(),Tqe=dte(),Aqe=1,iwe="[object Arguments]",awe="[object Array]",nU="[object Object]",Mqe=Object.prototype,swe=Mqe.hasOwnProperty;function Rqe(e,t,n,r,o,i){var d=nwe(e),y=nwe(t),_=d?awe:rwe(e),k=y?awe:rwe(t);_=_==iwe?nU:_,k=k==iwe?nU:k;var T=_==nU,N=k==nU,L=_==k;if(L&&owe(e)){if(!owe(t))return!1;d=!0,T=!1}if(L&&!T)return i||(i=new _te),d||Tqe(e)?Pqe(e,t,n,r,o,i):jqe(e,t,_,n,r,o,i);if(!(n&Aqe)){var Y=T&&swe.call(e,"__wrapped__"),q=N&&swe.call(t,"__wrapped__");if(Y||q){var K=Y?e.value():e,U=q?t.value():t;return i||(i=new _te),o(K,U,n,r,i)}}return L?(i||(i=new _te),Cqe(e,t,n,r,o,i)):!1}lwe.exports=Rqe});var dwe=ot((iar,pwe)=>{var Dqe=uwe(),cwe=Uy();function fwe(e,t,n,r,o){return e===t?!0:e==null||t==null||!cwe(e)&&!cwe(t)?e!==e&&t!==t:Dqe(e,t,n,r,fwe,o)}pwe.exports=fwe});var mwe=ot((aar,hwe)=>{var zqe=dwe();function Nqe(e,t){return zqe(e,t)}hwe.exports=Nqe});var Pte=ot((kte,Lj)=>{(function(e,t){typeof kte=="object"&&typeof Lj<"u"?Lj.exports=t():typeof define=="function"&&define.amd?define(t):e.moment=t()})(kte,function(){"use strict";var e;function t(){return e.apply(null,arguments)}function n(j){e=j}function r(j){return j instanceof Array||Object.prototype.toString.call(j)==="[object Array]"}function o(j){return j!=null&&Object.prototype.toString.call(j)==="[object Object]"}function i(j,$){return Object.prototype.hasOwnProperty.call(j,$)}function d(j){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(j).length===0;var $;for($ in j)if(i(j,$))return!1;return!0}function y(j){return j===void 0}function _(j){return typeof j=="number"||Object.prototype.toString.call(j)==="[object Number]"}function k(j){return j instanceof Date||Object.prototype.toString.call(j)==="[object Date]"}function T(j,$){var oe=[],ce,Ee=j.length;for(ce=0;ce>>0,ce;for(ce=0;ce0)for(oe=0;oe component higher in the tree to provide a loading indicator or placeholder to display.`)}Rf!==5&&(Rf=2),_=fZ(_,y),L=d;do{switch(L.tag){case 3:i=_,L.flags|=4096,t&=-t,L.lanes|=t;var ye=dve(L,i,t);Sme(L,ye);break e;case 1:i=_;var ge=L.type,ae=L.stateNode;if(!(L.flags&64)&&(typeof ge.getDerivedStateFromError=="function"||ae!==null&&typeof ae.componentDidCatch=="function"&&(e4===null||!e4.has(ae)))){L.flags|=4096,t&=-t,L.lanes|=t;var Pe=hve(L,i,t);Sme(L,Pe);break e}}L=L.return}while(L!==null)}xve(n)}catch(Ne){t=Ne,ic===n&&n!==null&&(ic=n=n.return);continue}break}while(1)}function wve(){var e=Q$.current;return Q$.current=Y$,e===null?Y$:e}function ST(e,t){var n=Wn;Wn|=16;var r=wve();ih===e&&Jp===t||WP(e,t);do try{PRe();break}catch(o){bve(e,o)}while(1);if(tZ(),Wn=n,Q$.current=r,ic!==null)throw Error(sr(261));return ih=null,Jp=0,Rf}function PRe(){for(;ic!==null;)Ove(ic)}function jRe(){for(;ic!==null&&!cRe();)Ove(ic)}function Ove(e){var t=Sve(e.alternate,e,QI);e.memoizedProps=e.pendingProps,t===null?xve(e):ic=t,pZ.current=null}function xve(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&2048){if(n=wRe(t),n!==null){n.flags&=2047,ic=n;return}e!==null&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}else{if(n=bRe(n,t,QI),n!==null){ic=n;return}if(n=t,n.tag!==24&&n.tag!==23||n.memoizedState===null||QI&1073741824||!(n.mode&4)){for(var r=0,o=n.child;o!==null;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}e!==null&&!(e.flags&2048)&&(e.firstEffect===null&&(e.firstEffect=t.firstEffect),t.lastEffect!==null&&(e.lastEffect!==null&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1d&&(y=d,d=ye,ye=y),y=cme(Z,ye),i=cme(Z,d),y&&i&&(me.rangeCount!==1||me.anchorNode!==y.node||me.anchorOffset!==y.offset||me.focusNode!==i.node||me.focusOffset!==i.offset)&&(fe=fe.createRange(),fe.setStart(y.node,y.offset),me.removeAllRanges(),ye>d?(me.addRange(fe),me.extend(i.node,i.offset)):(fe.setEnd(i.node,i.offset),me.addRange(fe)))))),fe=[],me=Z;me=me.parentNode;)me.nodeType===1&&fe.push({element:me,left:me.scrollLeft,top:me.scrollTop});for(typeof Z.focus=="function"&&Z.focus(),Z=0;ZGp()-hZ?WP(e,0):dZ|=n),Ny(e,t)}function DRe(e,t){var n=e.stateNode;n!==null&&n.delete(t),t=0,t===0&&(t=e.mode,t&2?t&4?(j_===0&&(j_=XP),t=IP(62914560&~j_),t===0&&(t=4194304)):t=qP()===99?1:2:t=1),n=nv(),e=dV(e,t),e!==null&&(iV(e,t,n),Ny(e,n))}var Sve;Sve=function(e,t,n){var r=t.lanes;if(e!==null)if(e.memoizedProps!==t.pendingProps||G0.current)x3=!0;else if(n&r)x3=!!(e.flags&16384);else{switch(x3=!1,t.tag){case 3:Nme(t),zY();break;case 5:Pme(t);break;case 1:J0(t.type)&&I$(t);break;case 4:pQ(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;ul(W$,o._currentValue),o._currentValue=r;break;case 13:if(t.memoizedState!==null)return n&t.child.childLanes?Lme(e,t,n):(ul(ll,ll.current&1),t=T_(e,t,n),t!==null?t.sibling:null);ul(ll,ll.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&64){if(r)return $me(e,t,n);t.flags|=64}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),ul(ll,ll.current),r)break;return null;case 23:case 24:return t.lanes=0,NY(e,t,n)}return T_(e,t,n)}else x3=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=VP(t,Xp.current),LP(t,n),o=sZ(null,t,r,e,o,n),t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,J0(r)){var i=!0;I$(t)}else i=!1;t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,nZ(t);var d=r.getDerivedStateFromProps;typeof d=="function"&&V$(t,r,d,e),o.updater=fV,t.stateNode=o,o._reactInternals=t,fQ(t,r,e,n),t=vQ(null,t,r,!0,i,n)}else t.tag=0,U0(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,i=o._init,o=i(o._payload),t.type=o,i=t.tag=NRe(o),e=O3(o,e),i){case 0:t=mQ(null,t,o,e,n);break e;case 1:t=zme(null,t,o,e,n);break e;case 11:t=Rme(null,t,o,e,n);break e;case 14:t=Dme(null,t,o,O3(o.type,e),r,n);break e}throw Error(sr(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:O3(r,o),mQ(e,t,r,o,n);case 1:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:O3(r,o),zme(e,t,r,o,n);case 3:if(Nme(t),r=t.updateQueue,e===null||r===null)throw Error(sr(282));if(r=t.pendingProps,o=t.memoizedState,o=o!==null?o.element:null,X1e(e,t),GT(t,r,null,n),r=t.memoizedState.element,r===o)zY(),t=T_(e,t,n);else{if(o=t.stateNode,(i=o.hydrate)&&(KS=NP(t.stateNode.containerInfo.firstChild),C_=t,i=r4=!0),i){if(e=o.mutableSourceEagerHydrationData,e!=null)for(o=0;o{"use strict";function kve(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(kve)}catch(e){console.error(e)}}kve(),Pve.exports=Ive()});var yge=ot((KJt,gge)=>{"use strict";var uze="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";gge.exports=uze});var xge=ot((YJt,Oge)=>{"use strict";var cze=yge();function bge(){}function wge(){}wge.resetWarningCache=bge;Oge.exports=function(){function e(r,o,i,d,y,_){if(_!==cze){var k=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw k.name="Invariant Violation",k}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:wge,resetWarningCache:bge};return n.PropTypes=n,n}});var er=ot((eXt,_ge)=>{_ge.exports=xge()();var QJt,ZJt});var Ar=ot((tXt,HV)=>{(function(){"use strict";var e={}.hasOwnProperty;function t(){for(var o="",i=0;i{"use strict";var Dc=typeof Symbol=="function"&&Symbol.for,QZ=Dc?Symbol.for("react.element"):60103,ZZ=Dc?Symbol.for("react.portal"):60106,KV=Dc?Symbol.for("react.fragment"):60107,YV=Dc?Symbol.for("react.strict_mode"):60108,QV=Dc?Symbol.for("react.profiler"):60114,ZV=Dc?Symbol.for("react.provider"):60109,eq=Dc?Symbol.for("react.context"):60110,eee=Dc?Symbol.for("react.async_mode"):60111,tq=Dc?Symbol.for("react.concurrent_mode"):60111,rq=Dc?Symbol.for("react.forward_ref"):60112,nq=Dc?Symbol.for("react.suspense"):60113,xze=Dc?Symbol.for("react.suspense_list"):60120,oq=Dc?Symbol.for("react.memo"):60115,iq=Dc?Symbol.for("react.lazy"):60116,_ze=Dc?Symbol.for("react.block"):60121,Sze=Dc?Symbol.for("react.fundamental"):60117,Eze=Dc?Symbol.for("react.responder"):60118,Ize=Dc?Symbol.for("react.scope"):60119;function sv(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case QZ:switch(e=e.type,e){case eee:case tq:case KV:case QV:case YV:case nq:return e;default:switch(e=e&&e.$$typeof,e){case eq:case rq:case iq:case oq:case ZV:return e;default:return t}}case ZZ:return t}}}function Gge(e){return sv(e)===tq}Fi.AsyncMode=eee;Fi.ConcurrentMode=tq;Fi.ContextConsumer=eq;Fi.ContextProvider=ZV;Fi.Element=QZ;Fi.ForwardRef=rq;Fi.Fragment=KV;Fi.Lazy=iq;Fi.Memo=oq;Fi.Portal=ZZ;Fi.Profiler=QV;Fi.StrictMode=YV;Fi.Suspense=nq;Fi.isAsyncMode=function(e){return Gge(e)||sv(e)===eee};Fi.isConcurrentMode=Gge;Fi.isContextConsumer=function(e){return sv(e)===eq};Fi.isContextProvider=function(e){return sv(e)===ZV};Fi.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===QZ};Fi.isForwardRef=function(e){return sv(e)===rq};Fi.isFragment=function(e){return sv(e)===KV};Fi.isLazy=function(e){return sv(e)===iq};Fi.isMemo=function(e){return sv(e)===oq};Fi.isPortal=function(e){return sv(e)===ZZ};Fi.isProfiler=function(e){return sv(e)===QV};Fi.isStrictMode=function(e){return sv(e)===YV};Fi.isSuspense=function(e){return sv(e)===nq};Fi.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===KV||e===tq||e===QV||e===YV||e===nq||e===xze||typeof e=="object"&&e!==null&&(e.$$typeof===iq||e.$$typeof===oq||e.$$typeof===ZV||e.$$typeof===eq||e.$$typeof===rq||e.$$typeof===Sze||e.$$typeof===Eze||e.$$typeof===Ize||e.$$typeof===_ze)};Fi.typeOf=sv});var Kge=ot((EXt,Xge)=>{"use strict";Xge.exports=Jge()});var nye=ot((IXt,rye)=>{"use strict";var tee=Kge(),kze={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},Pze={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},jze={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},eye={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},ree={};ree[tee.ForwardRef]=jze;ree[tee.Memo]=eye;function Yge(e){return tee.isMemo(e)?eye:ree[e.$$typeof]||kze}var Cze=Object.defineProperty,Tze=Object.getOwnPropertyNames,Qge=Object.getOwnPropertySymbols,Aze=Object.getOwnPropertyDescriptor,Mze=Object.getPrototypeOf,Zge=Object.prototype;function tye(e,t,n){if(typeof t!="string"){if(Zge){var r=Mze(t);r&&r!==Zge&&tye(e,r,n)}var o=Tze(t);Qge&&(o=o.concat(Qge(t)));for(var i=Yge(e),d=Yge(t),y=0;y{function gBe(){this.__data__=[],this.size=0}i2e.exports=gBe});var qq=ot((jor,s2e)=>{function yBe(e,t){return e===t||e!==e&&t!==t}s2e.exports=yBe});var HA=ot((Cor,l2e)=>{var bBe=qq();function wBe(e,t){for(var n=e.length;n--;)if(bBe(e[n][0],t))return n;return-1}l2e.exports=wBe});var c2e=ot((Tor,u2e)=>{var OBe=HA(),xBe=Array.prototype,_Be=xBe.splice;function SBe(e){var t=this.__data__,n=OBe(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():_Be.call(t,n,1),--this.size,!0}u2e.exports=SBe});var p2e=ot((Aor,f2e)=>{var EBe=HA();function IBe(e){var t=this.__data__,n=EBe(t,e);return n<0?void 0:t[n][1]}f2e.exports=IBe});var h2e=ot((Mor,d2e)=>{var kBe=HA();function PBe(e){return kBe(this.__data__,e)>-1}d2e.exports=PBe});var v2e=ot((Ror,m2e)=>{var jBe=HA();function CBe(e,t){var n=this.__data__,r=jBe(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}m2e.exports=CBe});var $A=ot((Dor,g2e)=>{var TBe=a2e(),ABe=c2e(),MBe=p2e(),RBe=h2e(),DBe=v2e();function Cj(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var zBe=$A();function NBe(){this.__data__=new zBe,this.size=0}y2e.exports=NBe});var O2e=ot((Nor,w2e)=>{function LBe(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}w2e.exports=LBe});var _2e=ot((Lor,x2e)=>{function FBe(e){return this.__data__.get(e)}x2e.exports=FBe});var E2e=ot((For,S2e)=>{function BBe(e){return this.__data__.has(e)}S2e.exports=BBe});var tte=ot((Bor,I2e)=>{var WBe=typeof global=="object"&&global&&global.Object===Object&&global;I2e.exports=WBe});var T3=ot((Wor,k2e)=>{var HBe=tte(),$Be=typeof self=="object"&&self&&self.Object===Object&&self,VBe=HBe||$Be||Function("return this")();k2e.exports=VBe});var hk=ot((Hor,P2e)=>{var qBe=T3(),UBe=qBe.Symbol;P2e.exports=UBe});var A2e=ot(($or,T2e)=>{var j2e=hk(),C2e=Object.prototype,GBe=C2e.hasOwnProperty,JBe=C2e.toString,VA=j2e?j2e.toStringTag:void 0;function XBe(e){var t=GBe.call(e,VA),n=e[VA];try{e[VA]=void 0;var r=!0}catch{}var o=JBe.call(e);return r&&(t?e[VA]=n:delete e[VA]),o}T2e.exports=XBe});var R2e=ot((Vor,M2e)=>{var KBe=Object.prototype,YBe=KBe.toString;function QBe(e){return YBe.call(e)}M2e.exports=QBe});var f4=ot((qor,N2e)=>{var D2e=hk(),ZBe=A2e(),eWe=R2e(),tWe="[object Null]",rWe="[object Undefined]",z2e=D2e?D2e.toStringTag:void 0;function nWe(e){return e==null?e===void 0?rWe:tWe:z2e&&z2e in Object(e)?ZBe(e):eWe(e)}N2e.exports=nWe});var mk=ot((Uor,L2e)=>{function oWe(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}L2e.exports=oWe});var Uq=ot((Gor,F2e)=>{var iWe=f4(),aWe=mk(),sWe="[object AsyncFunction]",lWe="[object Function]",uWe="[object GeneratorFunction]",cWe="[object Proxy]";function fWe(e){if(!aWe(e))return!1;var t=iWe(e);return t==lWe||t==uWe||t==sWe||t==cWe}F2e.exports=fWe});var W2e=ot((Jor,B2e)=>{var pWe=T3(),dWe=pWe["__core-js_shared__"];B2e.exports=dWe});var V2e=ot((Xor,$2e)=>{var rte=W2e(),H2e=function(){var e=/[^.]+$/.exec(rte&&rte.keys&&rte.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function hWe(e){return!!H2e&&H2e in e}$2e.exports=hWe});var nte=ot((Kor,q2e)=>{var mWe=Function.prototype,vWe=mWe.toString;function gWe(e){if(e!=null){try{return vWe.call(e)}catch{}try{return e+""}catch{}}return""}q2e.exports=gWe});var G2e=ot((Yor,U2e)=>{var yWe=Uq(),bWe=V2e(),wWe=mk(),OWe=nte(),xWe=/[\\^$.*+?()[\]{}|]/g,_We=/^\[object .+?Constructor\]$/,SWe=Function.prototype,EWe=Object.prototype,IWe=SWe.toString,kWe=EWe.hasOwnProperty,PWe=RegExp("^"+IWe.call(kWe).replace(xWe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function jWe(e){if(!wWe(e)||bWe(e))return!1;var t=yWe(e)?PWe:_We;return t.test(OWe(e))}U2e.exports=jWe});var X2e=ot((Qor,J2e)=>{function CWe(e,t){return e?.[t]}J2e.exports=CWe});var PE=ot((Zor,K2e)=>{var TWe=G2e(),AWe=X2e();function MWe(e,t){var n=AWe(e,t);return TWe(n)?n:void 0}K2e.exports=MWe});var Gq=ot((eir,Y2e)=>{var RWe=PE(),DWe=T3(),zWe=RWe(DWe,"Map");Y2e.exports=zWe});var qA=ot((tir,Q2e)=>{var NWe=PE(),LWe=NWe(Object,"create");Q2e.exports=LWe});var t3e=ot((rir,e3e)=>{var Z2e=qA();function FWe(){this.__data__=Z2e?Z2e(null):{},this.size=0}e3e.exports=FWe});var n3e=ot((nir,r3e)=>{function BWe(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}r3e.exports=BWe});var i3e=ot((oir,o3e)=>{var WWe=qA(),HWe="__lodash_hash_undefined__",$We=Object.prototype,VWe=$We.hasOwnProperty;function qWe(e){var t=this.__data__;if(WWe){var n=t[e];return n===HWe?void 0:n}return VWe.call(t,e)?t[e]:void 0}o3e.exports=qWe});var s3e=ot((iir,a3e)=>{var UWe=qA(),GWe=Object.prototype,JWe=GWe.hasOwnProperty;function XWe(e){var t=this.__data__;return UWe?t[e]!==void 0:JWe.call(t,e)}a3e.exports=XWe});var u3e=ot((air,l3e)=>{var KWe=qA(),YWe="__lodash_hash_undefined__";function QWe(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=KWe&&t===void 0?YWe:t,this}l3e.exports=QWe});var f3e=ot((sir,c3e)=>{var ZWe=t3e(),eHe=n3e(),tHe=i3e(),rHe=s3e(),nHe=u3e();function Tj(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var p3e=f3e(),oHe=$A(),iHe=Gq();function aHe(){this.size=0,this.__data__={hash:new p3e,map:new(iHe||oHe),string:new p3e}}d3e.exports=aHe});var v3e=ot((uir,m3e)=>{function sHe(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}m3e.exports=sHe});var UA=ot((cir,g3e)=>{var lHe=v3e();function uHe(e,t){var n=e.__data__;return lHe(t)?n[typeof t=="string"?"string":"hash"]:n.map}g3e.exports=uHe});var b3e=ot((fir,y3e)=>{var cHe=UA();function fHe(e){var t=cHe(this,e).delete(e);return this.size-=t?1:0,t}y3e.exports=fHe});var O3e=ot((pir,w3e)=>{var pHe=UA();function dHe(e){return pHe(this,e).get(e)}w3e.exports=dHe});var _3e=ot((dir,x3e)=>{var hHe=UA();function mHe(e){return hHe(this,e).has(e)}x3e.exports=mHe});var E3e=ot((hir,S3e)=>{var vHe=UA();function gHe(e,t){var n=vHe(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}S3e.exports=gHe});var Jq=ot((mir,I3e)=>{var yHe=h3e(),bHe=b3e(),wHe=O3e(),OHe=_3e(),xHe=E3e();function Aj(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{var _He=$A(),SHe=Gq(),EHe=Jq(),IHe=200;function kHe(e,t){var n=this.__data__;if(n instanceof _He){var r=n.__data__;if(!SHe||r.length{var PHe=$A(),jHe=b2e(),CHe=O2e(),THe=_2e(),AHe=E2e(),MHe=P3e();function Mj(e){var t=this.__data__=new PHe(e);this.size=t.size}Mj.prototype.clear=jHe;Mj.prototype.delete=CHe;Mj.prototype.get=THe;Mj.prototype.has=AHe;Mj.prototype.set=MHe;j3e.exports=Mj});var T3e=ot((yir,C3e)=>{var RHe="__lodash_hash_undefined__";function DHe(e){return this.__data__.set(e,RHe),this}C3e.exports=DHe});var M3e=ot((bir,A3e)=>{function zHe(e){return this.__data__.has(e)}A3e.exports=zHe});var D3e=ot((wir,R3e)=>{var NHe=Jq(),LHe=T3e(),FHe=M3e();function Xq(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new NHe;++t{function BHe(e,t){for(var n=-1,r=e==null?0:e.length;++n{function WHe(e,t){return e.has(t)}L3e.exports=WHe});var ite=ot((_ir,B3e)=>{var HHe=D3e(),$He=N3e(),VHe=F3e(),qHe=1,UHe=2;function GHe(e,t,n,r,o,i){var d=n&qHe,y=e.length,_=t.length;if(y!=_&&!(d&&_>y))return!1;var k=i.get(e),T=i.get(t);if(k&&T)return k==t&&T==e;var N=-1,L=!0,Y=n&UHe?new HHe:void 0;for(i.set(e,t),i.set(t,e);++N{var JHe=T3(),XHe=JHe.Uint8Array;W3e.exports=XHe});var $3e=ot((Eir,H3e)=>{function KHe(e){var t=-1,n=Array(e.size);return e.forEach(function(r,o){n[++t]=[o,r]}),n}H3e.exports=KHe});var q3e=ot((Iir,V3e)=>{function YHe(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}V3e.exports=YHe});var K3e=ot((kir,X3e)=>{var U3e=hk(),G3e=ate(),QHe=qq(),ZHe=ite(),e$e=$3e(),t$e=q3e(),r$e=1,n$e=2,o$e="[object Boolean]",i$e="[object Date]",a$e="[object Error]",s$e="[object Map]",l$e="[object Number]",u$e="[object RegExp]",c$e="[object Set]",f$e="[object String]",p$e="[object Symbol]",d$e="[object ArrayBuffer]",h$e="[object DataView]",J3e=U3e?U3e.prototype:void 0,ste=J3e?J3e.valueOf:void 0;function m$e(e,t,n,r,o,i,d){switch(n){case h$e:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case d$e:return!(e.byteLength!=t.byteLength||!i(new G3e(e),new G3e(t)));case o$e:case i$e:case l$e:return QHe(+e,+t);case a$e:return e.name==t.name&&e.message==t.message;case u$e:case f$e:return e==t+"";case s$e:var y=e$e;case c$e:var _=r&r$e;if(y||(y=t$e),e.size!=t.size&&!_)return!1;var k=d.get(e);if(k)return k==t;r|=n$e,d.set(e,t);var T=ZHe(y(e),y(t),r,o,i,d);return d.delete(e),T;case p$e:if(ste)return ste.call(e)==ste.call(t)}return!1}X3e.exports=m$e});var Kq=ot((Pir,Y3e)=>{function v$e(e,t){for(var n=-1,r=t.length,o=e.length;++n{var g$e=Array.isArray;Q3e.exports=g$e});var lte=ot((Cir,Z3e)=>{var y$e=Kq(),b$e=A3();function w$e(e,t,n){var r=t(e);return b$e(e)?r:y$e(r,n(e))}Z3e.exports=w$e});var t5e=ot((Tir,e5e)=>{function O$e(e,t){for(var n=-1,r=e==null?0:e.length,o=0,i=[];++n{function x$e(){return[]}r5e.exports=x$e});var Yq=ot((Mir,o5e)=>{var _$e=t5e(),S$e=ute(),E$e=Object.prototype,I$e=E$e.propertyIsEnumerable,n5e=Object.getOwnPropertySymbols,k$e=n5e?function(e){return e==null?[]:(e=Object(e),_$e(n5e(e),function(t){return I$e.call(e,t)}))}:S$e;o5e.exports=k$e});var a5e=ot((Rir,i5e)=>{function P$e(e,t){for(var n=-1,r=Array(e);++n{function j$e(e){return e!=null&&typeof e=="object"}s5e.exports=j$e});var u5e=ot((zir,l5e)=>{var C$e=f4(),T$e=Uy(),A$e="[object Arguments]";function M$e(e){return T$e(e)&&C$e(e)==A$e}l5e.exports=M$e});var cte=ot((Nir,p5e)=>{var c5e=u5e(),R$e=Uy(),f5e=Object.prototype,D$e=f5e.hasOwnProperty,z$e=f5e.propertyIsEnumerable,N$e=c5e(function(){return arguments}())?c5e:function(e){return R$e(e)&&D$e.call(e,"callee")&&!z$e.call(e,"callee")};p5e.exports=N$e});var h5e=ot((Lir,d5e)=>{function L$e(){return!1}d5e.exports=L$e});var Qq=ot((GA,Rj)=>{var F$e=T3(),B$e=h5e(),g5e=typeof GA=="object"&&GA&&!GA.nodeType&&GA,m5e=g5e&&typeof Rj=="object"&&Rj&&!Rj.nodeType&&Rj,W$e=m5e&&m5e.exports===g5e,v5e=W$e?F$e.Buffer:void 0,H$e=v5e?v5e.isBuffer:void 0,$$e=H$e||B$e;Rj.exports=$$e});var b5e=ot((Fir,y5e)=>{var V$e=9007199254740991,q$e=/^(?:0|[1-9]\d*)$/;function U$e(e,t){var n=typeof e;return t=t??V$e,!!t&&(n=="number"||n!="symbol"&&q$e.test(e))&&e>-1&&e%1==0&&e{var G$e=9007199254740991;function J$e(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=G$e}w5e.exports=J$e});var x5e=ot((Wir,O5e)=>{var X$e=f4(),K$e=fte(),Y$e=Uy(),Q$e="[object Arguments]",Z$e="[object Array]",eVe="[object Boolean]",tVe="[object Date]",rVe="[object Error]",nVe="[object Function]",oVe="[object Map]",iVe="[object Number]",aVe="[object Object]",sVe="[object RegExp]",lVe="[object Set]",uVe="[object String]",cVe="[object WeakMap]",fVe="[object ArrayBuffer]",pVe="[object DataView]",dVe="[object Float32Array]",hVe="[object Float64Array]",mVe="[object Int8Array]",vVe="[object Int16Array]",gVe="[object Int32Array]",yVe="[object Uint8Array]",bVe="[object Uint8ClampedArray]",wVe="[object Uint16Array]",OVe="[object Uint32Array]",Ka={};Ka[dVe]=Ka[hVe]=Ka[mVe]=Ka[vVe]=Ka[gVe]=Ka[yVe]=Ka[bVe]=Ka[wVe]=Ka[OVe]=!0;Ka[Q$e]=Ka[Z$e]=Ka[fVe]=Ka[eVe]=Ka[pVe]=Ka[tVe]=Ka[rVe]=Ka[nVe]=Ka[oVe]=Ka[iVe]=Ka[aVe]=Ka[sVe]=Ka[lVe]=Ka[uVe]=Ka[cVe]=!1;function xVe(e){return Y$e(e)&&K$e(e.length)&&!!Ka[X$e(e)]}O5e.exports=xVe});var Zq=ot((Hir,_5e)=>{function _Ve(e){return function(t){return e(t)}}_5e.exports=_Ve});var eU=ot((JA,Dj)=>{var SVe=tte(),S5e=typeof JA=="object"&&JA&&!JA.nodeType&&JA,XA=S5e&&typeof Dj=="object"&&Dj&&!Dj.nodeType&&Dj,EVe=XA&&XA.exports===S5e,pte=EVe&&SVe.process,IVe=function(){try{var e=XA&&XA.require&&XA.require("util").types;return e||pte&&pte.binding&&pte.binding("util")}catch{}}();Dj.exports=IVe});var dte=ot(($ir,k5e)=>{var kVe=x5e(),PVe=Zq(),E5e=eU(),I5e=E5e&&E5e.isTypedArray,jVe=I5e?PVe(I5e):kVe;k5e.exports=jVe});var hte=ot((Vir,P5e)=>{var CVe=a5e(),TVe=cte(),AVe=A3(),MVe=Qq(),RVe=b5e(),DVe=dte(),zVe=Object.prototype,NVe=zVe.hasOwnProperty;function LVe(e,t){var n=AVe(e),r=!n&&TVe(e),o=!n&&!r&&MVe(e),i=!n&&!r&&!o&&DVe(e),d=n||r||o||i,y=d?CVe(e.length,String):[],_=y.length;for(var k in e)(t||NVe.call(e,k))&&!(d&&(k=="length"||o&&(k=="offset"||k=="parent")||i&&(k=="buffer"||k=="byteLength"||k=="byteOffset")||RVe(k,_)))&&y.push(k);return y}P5e.exports=LVe});var tU=ot((qir,j5e)=>{var FVe=Object.prototype;function BVe(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||FVe;return e===n}j5e.exports=BVe});var mte=ot((Uir,C5e)=>{function WVe(e,t){return function(n){return e(t(n))}}C5e.exports=WVe});var A5e=ot((Gir,T5e)=>{var HVe=mte(),$Ve=HVe(Object.keys,Object);T5e.exports=$Ve});var R5e=ot((Jir,M5e)=>{var VVe=tU(),qVe=A5e(),UVe=Object.prototype,GVe=UVe.hasOwnProperty;function JVe(e){if(!VVe(e))return qVe(e);var t=[];for(var n in Object(e))GVe.call(e,n)&&n!="constructor"&&t.push(n);return t}M5e.exports=JVe});var vte=ot((Xir,D5e)=>{var XVe=Uq(),KVe=fte();function YVe(e){return e!=null&&KVe(e.length)&&!XVe(e)}D5e.exports=YVe});var rU=ot((Kir,z5e)=>{var QVe=hte(),ZVe=R5e(),eqe=vte();function tqe(e){return eqe(e)?QVe(e):ZVe(e)}z5e.exports=tqe});var gte=ot((Yir,N5e)=>{var rqe=lte(),nqe=Yq(),oqe=rU();function iqe(e){return rqe(e,oqe,nqe)}N5e.exports=iqe});var B5e=ot((Qir,F5e)=>{var L5e=gte(),aqe=1,sqe=Object.prototype,lqe=sqe.hasOwnProperty;function uqe(e,t,n,r,o,i){var d=n&aqe,y=L5e(e),_=y.length,k=L5e(t),T=k.length;if(_!=T&&!d)return!1;for(var N=_;N--;){var L=y[N];if(!(d?L in t:lqe.call(t,L)))return!1}var Y=i.get(e),q=i.get(t);if(Y&&q)return Y==t&&q==e;var K=!0;i.set(e,t),i.set(t,e);for(var U=d;++N<_;){L=y[N];var X=e[L],Z=t[L];if(r)var fe=d?r(Z,X,L,t,e,i):r(X,Z,L,e,t,i);if(!(fe===void 0?X===Z||o(X,Z,n,r,i):fe)){K=!1;break}U||(U=L=="constructor")}if(K&&!U){var me=e.constructor,ye=t.constructor;me!=ye&&"constructor"in e&&"constructor"in t&&!(typeof me=="function"&&me instanceof me&&typeof ye=="function"&&ye instanceof ye)&&(K=!1)}return i.delete(e),i.delete(t),K}F5e.exports=uqe});var H5e=ot((Zir,W5e)=>{var cqe=PE(),fqe=T3(),pqe=cqe(fqe,"DataView");W5e.exports=pqe});var V5e=ot((ear,$5e)=>{var dqe=PE(),hqe=T3(),mqe=dqe(hqe,"Promise");$5e.exports=mqe});var U5e=ot((tar,q5e)=>{var vqe=PE(),gqe=T3(),yqe=vqe(gqe,"Set");q5e.exports=yqe});var J5e=ot((rar,G5e)=>{var bqe=PE(),wqe=T3(),Oqe=bqe(wqe,"WeakMap");G5e.exports=Oqe});var KA=ot((nar,twe)=>{var yte=H5e(),bte=Gq(),wte=V5e(),Ote=U5e(),xte=J5e(),ewe=f4(),zj=nte(),X5e="[object Map]",xqe="[object Object]",K5e="[object Promise]",Y5e="[object Set]",Q5e="[object WeakMap]",Z5e="[object DataView]",_qe=zj(yte),Sqe=zj(bte),Eqe=zj(wte),Iqe=zj(Ote),kqe=zj(xte),vk=ewe;(yte&&vk(new yte(new ArrayBuffer(1)))!=Z5e||bte&&vk(new bte)!=X5e||wte&&vk(wte.resolve())!=K5e||Ote&&vk(new Ote)!=Y5e||xte&&vk(new xte)!=Q5e)&&(vk=function(e){var t=ewe(e),n=t==xqe?e.constructor:void 0,r=n?zj(n):"";if(r)switch(r){case _qe:return Z5e;case Sqe:return X5e;case Eqe:return K5e;case Iqe:return Y5e;case kqe:return Q5e}return t});twe.exports=vk});var uwe=ot((oar,lwe)=>{var _te=ote(),Pqe=ite(),jqe=K3e(),Cqe=B5e(),rwe=KA(),nwe=A3(),owe=Qq(),Tqe=dte(),Aqe=1,iwe="[object Arguments]",awe="[object Array]",nU="[object Object]",Mqe=Object.prototype,swe=Mqe.hasOwnProperty;function Rqe(e,t,n,r,o,i){var d=nwe(e),y=nwe(t),_=d?awe:rwe(e),k=y?awe:rwe(t);_=_==iwe?nU:_,k=k==iwe?nU:k;var T=_==nU,N=k==nU,L=_==k;if(L&&owe(e)){if(!owe(t))return!1;d=!0,T=!1}if(L&&!T)return i||(i=new _te),d||Tqe(e)?Pqe(e,t,n,r,o,i):jqe(e,t,_,n,r,o,i);if(!(n&Aqe)){var Y=T&&swe.call(e,"__wrapped__"),q=N&&swe.call(t,"__wrapped__");if(Y||q){var K=Y?e.value():e,U=q?t.value():t;return i||(i=new _te),o(K,U,n,r,i)}}return L?(i||(i=new _te),Cqe(e,t,n,r,o,i)):!1}lwe.exports=Rqe});var dwe=ot((iar,pwe)=>{var Dqe=uwe(),cwe=Uy();function fwe(e,t,n,r,o){return e===t?!0:e==null||t==null||!cwe(e)&&!cwe(t)?e!==e&&t!==t:Dqe(e,t,n,r,fwe,o)}pwe.exports=fwe});var mwe=ot((aar,hwe)=>{var zqe=dwe();function Nqe(e,t){return zqe(e,t)}hwe.exports=Nqe});var Pte=ot((kte,Lj)=>{(function(e,t){typeof kte=="object"&&typeof Lj<"u"?Lj.exports=t():typeof define=="function"&&define.amd?define(t):e.moment=t()})(kte,function(){"use strict";var e;function t(){return e.apply(null,arguments)}function n(j){e=j}function r(j){return j instanceof Array||Object.prototype.toString.call(j)==="[object Array]"}function o(j){return j!=null&&Object.prototype.toString.call(j)==="[object Object]"}function i(j,$){return Object.prototype.hasOwnProperty.call(j,$)}function d(j){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(j).length===0;var $;for($ in j)if(i(j,$))return!1;return!0}function y(j){return j===void 0}function _(j){return typeof j=="number"||Object.prototype.toString.call(j)==="[object Number]"}function k(j){return j instanceof Date||Object.prototype.toString.call(j)==="[object Date]"}function T(j,$){var oe=[],ce,Ee=j.length;for(ce=0;ce>>0,ce;for(ce=0;ce0)for(oe=0;oe=0;return(He?oe?"+":"":"-")+Math.pow(10,Math.max(0,Ee)).toString().substr(1)+ce}var _t=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Nt=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Rt={},sr={};function Pt(j,$,oe,ce){var Ee=ce;typeof ce=="string"&&(Ee=function(){return this[ce]()}),j&&(sr[j]=Ee),$&&(sr[$[0]]=function(){return wt(Ee.apply(this,arguments),$[1],$[2])}),oe&&(sr[oe]=function(){return this.localeData().ordinal(Ee.apply(this,arguments),j)})}function Sr(j){return j.match(/\[[\s\S]/)?j.replace(/^\[|\]$/g,""):j.replace(/\\/g,"")}function Nr(j){var $=j.match(_t),oe,ce;for(oe=0,ce=$.length;oe=0&&Nt.test(j);)j=j.replace(Nt,ce),Nt.lastIndex=0,oe-=1;return j}var qn={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function An(j){var $=this._longDateFormat[j],oe=this._longDateFormat[j.toUpperCase()];return $||!oe?$:(this._longDateFormat[j]=oe.match(_t).map(function(ce){return ce==="MMMM"||ce==="MM"||ce==="DD"||ce==="dddd"?ce.slice(1):ce}).join(""),this._longDateFormat[j])}var Oo="Invalid date";function yn(){return this._invalidDate}var Vr="%d",eo=/\d{1,2}/;function Sn(j){return this._ordinal.replace("%d",j)}var Ti={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Mo(j,$,oe,ce){var Ee=this._relativeTime[oe];return Je(Ee)?Ee(j,$,oe,ce):Ee.replace(/%d/i,j)}function xo(j,$){var oe=this._relativeTime[j>0?"future":"past"];return Je(oe)?oe($):oe.replace(/%s/i,$)}var Qa={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function Dn(j){return typeof j=="string"?Qa[j]||Qa[j.toLowerCase()]:void 0}function mr(j){var $={},oe,ce;for(ce in j)i(j,ce)&&(oe=Dn(ce),oe&&($[oe]=j[ce]));return $}var Un={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function Za(j){var $=[],oe;for(oe in j)i(j,oe)&&$.push({unit:oe,priority:Un[oe]});return $.sort(function(ce,Ee){return ce.priority-Ee.priority}),$}var Ai=/\d/,mn=/\d\d/,rn=/\d{3}/,Mn=/\d{4}/,go=/[+-]?\d{6}/,cn=/\d\d?/,ms=/\d\d\d\d?/,Oi=/\d\d\d\d\d\d?/,cc=/\d{1,3}/,ko=/\d{1,4}/,Ws=/[+-]?\d{1,6}/,Hs=/\d+/,es=/[+-]?\d+/,rb=/Z|[+-]\d\d:?\d\d/gi,am=/Z|[+-]\d\d(?::?\d\d)?/gi,Wc=/[+-]?\d+(\.\d{1,3})?/,ql=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,Na=/^[1-9]\d?/,fc=/^([1-9]\d|\d)/,vs;vs={};function vr(j,$,oe){vs[j]=Je($)?$:function(ce,Ee){return ce&&oe?oe:$}}function ia(j,$){return i(vs,j)?vs[j]($._strict,$._locale):new RegExp(Uo(j))}function Uo(j){return Vi(j.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function($,oe,ce,Ee,He){return oe||ce||Ee||He}))}function Vi(j){return j.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function li(j){return j<0?Math.ceil(j)||0:Math.floor(j)}function Gn(j){var $=+j,oe=0;return $!==0&&isFinite($)&&(oe=li($)),oe}var nd={};function Xn(j,$){var oe,ce=$,Ee;for(typeof j=="string"&&(j=[j]),_($)&&(ce=function(He,xt){xt[$]=Gn(He)}),Ee=j.length,oe=0;oe68?1900:2e3)};var Jf=qs("FullYear",!0);function xu(){return vh(this.year())}function qs(j,$){return function(oe){return oe!=null?(ts(this,j,oe),t.updateOffset(this,$),this):Xf(this,j)}}function Xf(j,$){if(!j.isValid())return NaN;var oe=j._d,ce=j._isUTC;switch($){case"Milliseconds":return ce?oe.getUTCMilliseconds():oe.getMilliseconds();case"Seconds":return ce?oe.getUTCSeconds():oe.getSeconds();case"Minutes":return ce?oe.getUTCMinutes():oe.getMinutes();case"Hours":return ce?oe.getUTCHours():oe.getHours();case"Date":return ce?oe.getUTCDate():oe.getDate();case"Day":return ce?oe.getUTCDay():oe.getDay();case"Month":return ce?oe.getUTCMonth():oe.getMonth();case"FullYear":return ce?oe.getUTCFullYear():oe.getFullYear();default:return NaN}}function ts(j,$,oe){var ce,Ee,He,xt,Kt;if(!(!j.isValid()||isNaN(oe))){switch(ce=j._d,Ee=j._isUTC,$){case"Milliseconds":return void(Ee?ce.setUTCMilliseconds(oe):ce.setMilliseconds(oe));case"Seconds":return void(Ee?ce.setUTCSeconds(oe):ce.setSeconds(oe));case"Minutes":return void(Ee?ce.setUTCMinutes(oe):ce.setMinutes(oe));case"Hours":return void(Ee?ce.setUTCHours(oe):ce.setHours(oe));case"Date":return void(Ee?ce.setUTCDate(oe):ce.setDate(oe));case"FullYear":break;default:return}He=oe,xt=j.month(),Kt=j.date(),Kt=Kt===29&&xt===1&&!vh(He)?28:Kt,Ee?ce.setUTCFullYear(He,xt,Kt):ce.setFullYear(He,xt,Kt)}}function gs(j){return j=Dn(j),Je(this[j])?this[j]():this}function nb(j,$){if(typeof j=="object"){j=mr(j);var oe=Za(j),ce,Ee=oe.length;for(ce=0;ce=0?(Kt=new Date(j+400,$,oe,ce,Ee,He,xt),isFinite(Kt.getFullYear())&&Kt.setFullYear(j)):Kt=new Date(j,$,oe,ce,Ee,He,xt),Kt}function Hc(j){var $,oe;return j<100&&j>=0?(oe=Array.prototype.slice.call(arguments),oe[0]=j+400,$=new Date(Date.UTC.apply(null,oe)),isFinite($.getUTCFullYear())&&$.setUTCFullYear(j)):$=new Date(Date.UTC.apply(null,arguments)),$}function bv(j,$,oe){var ce=7+$-oe,Ee=(7+Hc(j,0,ce).getUTCDay()-$)%7;return-Ee+ce-1}function ab(j,$,oe,ce,Ee){var He=(7+oe-ce)%7,xt=bv(j,ce,Ee),Kt=1+7*($-1)+He+xt,Qr,Fn;return Kt<=0?(Qr=j-1,Fn=pc(Qr)+Kt):Kt>pc(j)?(Qr=j+1,Fn=Kt-pc(j)):(Qr=j,Fn=Kt),{year:Qr,dayOfYear:Fn}}function $c(j,$,oe){var ce=bv(j.year(),$,oe),Ee=Math.floor((j.dayOfYear()-ce-1)/7)+1,He,xt;return Ee<1?(xt=j.year()-1,He=Ee+_u(xt,$,oe)):Ee>_u(j.year(),$,oe)?(He=Ee-_u(j.year(),$,oe),xt=j.year()+1):(xt=j.year(),He=Ee),{week:He,year:xt}}function _u(j,$,oe){var ce=bv(j,$,oe),Ee=bv(j+1,$,oe);return(pc(j)-ce+Ee)/7}Pt("w",["ww",2],"wo","week"),Pt("W",["WW",2],"Wo","isoWeek"),vr("w",cn,Na),vr("ww",cn,mn),vr("W",cn,Na),vr("WW",cn,mn),va(["w","ww","W","WW"],function(j,$,oe,ce){$[ce.substr(0,1)]=Gn(j)});function gh(j){return $c(j,this._week.dow,this._week.doy).week}var Vc={dow:0,doy:6};function yh(){return this._week.dow}function lm(){return this._week.doy}function Su(j){var $=this.localeData().week(this);return j==null?$:this.add((j-$)*7,"d")}function ml(j){var $=$c(this,1,4).week;return j==null?$:this.add((j-$)*7,"d")}Pt("d",0,"do","day"),Pt("dd",0,0,function(j){return this.localeData().weekdaysMin(this,j)}),Pt("ddd",0,0,function(j){return this.localeData().weekdaysShort(this,j)}),Pt("dddd",0,0,function(j){return this.localeData().weekdays(this,j)}),Pt("e",0,0,"weekday"),Pt("E",0,0,"isoWeekday"),vr("d",cn),vr("e",cn),vr("E",cn),vr("dd",function(j,$){return $.weekdaysMinRegex(j)}),vr("ddd",function(j,$){return $.weekdaysShortRegex(j)}),vr("dddd",function(j,$){return $.weekdaysRegex(j)}),va(["dd","ddd","dddd"],function(j,$,oe,ce){var Ee=oe._locale.weekdaysParse(j,ce,oe._strict);Ee!=null?$.d=Ee:q(oe).invalidWeekday=j}),va(["d","e","E"],function(j,$,oe,ce){$[ce]=Gn(j)});function ad(j,$){return typeof j!="string"?j:isNaN(j)?(j=$.weekdaysParse(j),typeof j=="number"?j:null):parseInt(j,10)}function um(j,$){return typeof j=="string"?$.weekdaysParse(j)%7||7:isNaN(j)?null:j}function Lo(j,$){return j.slice($,7).concat(j.slice(0,$))}var sb="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),bh="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),wv="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ov=ql,j4=ql,ys=ql;function wh(j,$){var oe=r(this._weekdays)?this._weekdays:this._weekdays[j&&j!==!0&&this._weekdays.isFormat.test($)?"format":"standalone"];return j===!0?Lo(oe,this._week.dow):j?oe[j.day()]:oe}function xv(j){return j===!0?Lo(this._weekdaysShort,this._week.dow):j?this._weekdaysShort[j.day()]:this._weekdaysShort}function _v(j){return j===!0?Lo(this._weekdaysMin,this._week.dow):j?this._weekdaysMin[j.day()]:this._weekdaysMin}function Oh(j,$,oe){var ce,Ee,He,xt=j.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],ce=0;ce<7;++ce)He=L([2e3,1]).day(ce),this._minWeekdaysParse[ce]=this.weekdaysMin(He,"").toLocaleLowerCase(),this._shortWeekdaysParse[ce]=this.weekdaysShort(He,"").toLocaleLowerCase(),this._weekdaysParse[ce]=this.weekdays(He,"").toLocaleLowerCase();return oe?$==="dddd"?(Ee=En.call(this._weekdaysParse,xt),Ee!==-1?Ee:null):$==="ddd"?(Ee=En.call(this._shortWeekdaysParse,xt),Ee!==-1?Ee:null):(Ee=En.call(this._minWeekdaysParse,xt),Ee!==-1?Ee:null):$==="dddd"?(Ee=En.call(this._weekdaysParse,xt),Ee!==-1||(Ee=En.call(this._shortWeekdaysParse,xt),Ee!==-1)?Ee:(Ee=En.call(this._minWeekdaysParse,xt),Ee!==-1?Ee:null)):$==="ddd"?(Ee=En.call(this._shortWeekdaysParse,xt),Ee!==-1||(Ee=En.call(this._weekdaysParse,xt),Ee!==-1)?Ee:(Ee=En.call(this._minWeekdaysParse,xt),Ee!==-1?Ee:null)):(Ee=En.call(this._minWeekdaysParse,xt),Ee!==-1||(Ee=En.call(this._weekdaysParse,xt),Ee!==-1)?Ee:(Ee=En.call(this._shortWeekdaysParse,xt),Ee!==-1?Ee:null))}function xh(j,$,oe){var ce,Ee,He;if(this._weekdaysParseExact)return Oh.call(this,j,$,oe);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),ce=0;ce<7;ce++){if(Ee=L([2e3,1]).day(ce),oe&&!this._fullWeekdaysParse[ce]&&(this._fullWeekdaysParse[ce]=new RegExp("^"+this.weekdays(Ee,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[ce]=new RegExp("^"+this.weekdaysShort(Ee,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[ce]=new RegExp("^"+this.weekdaysMin(Ee,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[ce]||(He="^"+this.weekdays(Ee,"")+"|^"+this.weekdaysShort(Ee,"")+"|^"+this.weekdaysMin(Ee,""),this._weekdaysParse[ce]=new RegExp(He.replace(".",""),"i")),oe&&$==="dddd"&&this._fullWeekdaysParse[ce].test(j))return ce;if(oe&&$==="ddd"&&this._shortWeekdaysParse[ce].test(j))return ce;if(oe&&$==="dd"&&this._minWeekdaysParse[ce].test(j))return ce;if(!oe&&this._weekdaysParse[ce].test(j))return ce}}function qc(j){if(!this.isValid())return j!=null?this:NaN;var $=Xf(this,"Day");return j!=null?(j=ad(j,this.localeData()),this.add(j-$,"d")):$}function sd(j){if(!this.isValid())return j!=null?this:NaN;var $=(this.day()+7-this.localeData()._week.dow)%7;return j==null?$:this.add(j-$,"d")}function Eu(j){if(!this.isValid())return j!=null?this:NaN;if(j!=null){var $=um(j,this.localeData());return this.day(this.day()%7?$:$-7)}else return this.day()||7}function Sv(j){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||fm.call(this),j?this._weekdaysStrictRegex:this._weekdaysRegex):(i(this,"_weekdaysRegex")||(this._weekdaysRegex=Ov),this._weekdaysStrictRegex&&j?this._weekdaysStrictRegex:this._weekdaysRegex)}function t5(j){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||fm.call(this),j?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(i(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=j4),this._weekdaysShortStrictRegex&&j?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function cm(j){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||fm.call(this),j?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(i(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=ys),this._weekdaysMinStrictRegex&&j?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function fm(){function j(Ri,nu){return nu.length-Ri.length}var $=[],oe=[],ce=[],Ee=[],He,xt,Kt,Qr,Fn;for(He=0;He<7;He++)xt=L([2e3,1]).day(He),Kt=Vi(this.weekdaysMin(xt,"")),Qr=Vi(this.weekdaysShort(xt,"")),Fn=Vi(this.weekdays(xt,"")),$.push(Kt),oe.push(Qr),ce.push(Fn),Ee.push(Kt),Ee.push(Qr),Ee.push(Fn);$.sort(j),oe.sort(j),ce.sort(j),Ee.sort(j),this._weekdaysRegex=new RegExp("^("+Ee.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+ce.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+oe.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+$.join("|")+")","i")}function _h(){return this.hours()%12||12}function Sh(){return this.hours()||24}Pt("H",["HH",2],0,"hour"),Pt("h",["hh",2],0,_h),Pt("k",["kk",2],0,Sh),Pt("hmm",0,0,function(){return""+_h.apply(this)+wt(this.minutes(),2)}),Pt("hmmss",0,0,function(){return""+_h.apply(this)+wt(this.minutes(),2)+wt(this.seconds(),2)}),Pt("Hmm",0,0,function(){return""+this.hours()+wt(this.minutes(),2)}),Pt("Hmmss",0,0,function(){return""+this.hours()+wt(this.minutes(),2)+wt(this.seconds(),2)});function ci(j,$){Pt(j,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),$)})}ci("a",!0),ci("A",!1);function La(j,$){return $._meridiemParse}vr("a",La),vr("A",La),vr("H",cn,fc),vr("h",cn,Na),vr("k",cn,Na),vr("HH",cn,mn),vr("hh",cn,mn),vr("kk",cn,mn),vr("hmm",ms),vr("hmmss",Oi),vr("Hmm",ms),vr("Hmmss",Oi),Xn(["H","HH"],No),Xn(["k","kk"],function(j,$,oe){var ce=Gn(j);$[No]=ce===24?0:ce}),Xn(["a","A"],function(j,$,oe){oe._isPm=oe._locale.isPM(j),oe._meridiem=j}),Xn(["h","hh"],function(j,$,oe){$[No]=Gn(j),q(oe).bigHour=!0}),Xn("hmm",function(j,$,oe){var ce=j.length-2;$[No]=Gn(j.substr(0,ce)),$[Ul]=Gn(j.substr(ce)),q(oe).bigHour=!0}),Xn("hmmss",function(j,$,oe){var ce=j.length-4,Ee=j.length-2;$[No]=Gn(j.substr(0,ce)),$[Ul]=Gn(j.substr(ce,2)),$[Ou]=Gn(j.substr(Ee)),q(oe).bigHour=!0}),Xn("Hmm",function(j,$,oe){var ce=j.length-2;$[No]=Gn(j.substr(0,ce)),$[Ul]=Gn(j.substr(ce))}),Xn("Hmmss",function(j,$,oe){var ce=j.length-4,Ee=j.length-2;$[No]=Gn(j.substr(0,ce)),$[Ul]=Gn(j.substr(ce,2)),$[Ou]=Gn(j.substr(Ee))});function lb(j){return(j+"").toLowerCase().charAt(0)==="p"}var r5=/[ap]\.?m?\.?/i,Ev=qs("Hours",!0);function Us(j,$,oe){return j>11?oe?"pm":"PM":oe?"am":"AM"}var Gs={calendar:yt,longDateFormat:qn,invalidDate:Oo,ordinal:Vr,dayOfMonthOrdinalParse:eo,relativeTime:Ti,months:Y3,monthsShort:ob,week:Vc,weekdays:sb,weekdaysMin:wv,weekdaysShort:bh,meridiemParse:r5},fo={},pm={},Iu;function Eh(j,$){var oe,ce=Math.min(j.length,$.length);for(oe=0;oe0;){if(Ee=ld(He.slice(0,oe).join("-")),Ee)return Ee;if(ce&&ce.length>=oe&&Eh(He,ce)>=oe-1)break;oe--}$++}return Iu}function Qf(j){return!!(j&&j.match("^[^/\\\\]*$"))}function ld(j){var $=null,oe;if(fo[j]===void 0&&typeof Lj<"u"&&Lj&&Lj.exports&&Qf(j))try{$=Iu._abbr,oe=d0e,oe("./locale/"+j),rs($)}catch{fo[j]=null}return fo[j]}function rs(j,$){var oe;return j&&(y($)?oe=vl(j):oe=to(j,$),oe?Iu=oe:typeof console<"u"&&console.warn&&console.warn("Locale "+j+" not found. Did you forget to load it?")),Iu._abbr}function to(j,$){if($!==null){var oe,ce=Gs;if($.abbr=j,fo[j]!=null)Ye("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),ce=fo[j]._config;else if($.parentLocale!=null)if(fo[$.parentLocale]!=null)ce=fo[$.parentLocale]._config;else if(oe=ld($.parentLocale),oe!=null)ce=oe._config;else return pm[$.parentLocale]||(pm[$.parentLocale]=[]),pm[$.parentLocale].push({name:j,config:$}),null;return fo[j]=new Ue(Ve(ce,$)),pm[j]&&pm[j].forEach(function(Ee){to(Ee.name,Ee.config)}),rs(j),fo[j]}else return delete fo[j],null}function ub(j,$){if($!=null){var oe,ce,Ee=Gs;fo[j]!=null&&fo[j].parentLocale!=null?fo[j].set(Ve(fo[j]._config,$)):(ce=ld(j),ce!=null&&(Ee=ce._config),$=Ve(Ee,$),ce==null&&($.abbr=j),oe=new Ue($),oe.parentLocale=fo[j],fo[j]=oe),rs(j)}else fo[j]!=null&&(fo[j].parentLocale!=null?(fo[j]=fo[j].parentLocale,j===rs()&&rs(j)):fo[j]!=null&&delete fo[j]);return fo[j]}function vl(j){var $;if(j&&j._locale&&j._locale._abbr&&(j=j._locale._abbr),!j)return Iu;if(!r(j)){if($=ld(j),$)return $;j=[j]}return kv(j)}function Zf(){return ht(fo)}function bs(j){var $,oe=j._a;return oe&&q(j).overflow===-2&&($=oe[xi]<0||oe[xi]>11?xi:oe[$s]<1||oe[$s]>yv(oe[qi],oe[xi])?$s:oe[No]<0||oe[No]>24||oe[No]===24&&(oe[Ul]!==0||oe[Ou]!==0||oe[Gf]!==0)?No:oe[Ul]<0||oe[Ul]>59?Ul:oe[Ou]<0||oe[Ou]>59?Ou:oe[Gf]<0||oe[Gf]>999?Gf:-1,q(j)._overflowDayOfYear&&($$s)&&($=$s),q(j)._overflowWeeks&&$===-1&&($=Vs),q(j)._overflowWeekday&&$===-1&&($=gv),q(j).overflow=$),j}var dm=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ih=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Uc=/Z|[+-]\d\d(?::?\d\d)?/,ga=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],hm=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],ep=/^\/?Date\((-?\d+)/i,tp=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,ud={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function rp(j){var $,oe,ce=j._i,Ee=dm.exec(ce)||Ih.exec(ce),He,xt,Kt,Qr,Fn=ga.length,Ri=hm.length;if(Ee){for(q(j).iso=!0,$=0,oe=Fn;$pc(xt)||j._dayOfYear===0)&&(q(j)._overflowDayOfYear=!0),oe=Hc(xt,0,j._dayOfYear),j._a[xi]=oe.getUTCMonth(),j._a[$s]=oe.getUTCDate()),$=0;$<3&&j._a[$]==null;++$)j._a[$]=ce[$]=Ee[$];for(;$<7;$++)j._a[$]=ce[$]=j._a[$]==null?$===2?1:0:j._a[$];j._a[No]===24&&j._a[Ul]===0&&j._a[Ou]===0&&j._a[Gf]===0&&(j._nextDay=!0,j._a[No]=0),j._d=(j._useUTC?Hc:e5).apply(null,ce),He=j._useUTC?j._d.getUTCDay():j._d.getDay(),j._tzm!=null&&j._d.setUTCMinutes(j._d.getUTCMinutes()-j._tzm),j._nextDay&&(j._a[No]=24),j._w&&typeof j._w.d<"u"&&j._w.d!==He&&(q(j).weekdayMismatch=!0)}}function kh(j){var $,oe,ce,Ee,He,xt,Kt,Qr,Fn;$=j._w,$.GG!=null||$.W!=null||$.E!=null?(He=1,xt=4,oe=Jc($.GG,j._a[qi],$c(ro(),1,4).year),ce=Jc($.W,1),Ee=Jc($.E,1),(Ee<1||Ee>7)&&(Qr=!0)):(He=j._locale._week.dow,xt=j._locale._week.doy,Fn=$c(ro(),He,xt),oe=Jc($.gg,j._a[qi],Fn.year),ce=Jc($.w,Fn.week),$.d!=null?(Ee=$.d,(Ee<0||Ee>6)&&(Qr=!0)):$.e!=null?(Ee=$.e+He,($.e<0||$.e>6)&&(Qr=!0)):Ee=He),ce<1||ce>_u(oe,He,xt)?q(j)._overflowWeeks=!0:Qr!=null?q(j)._overflowWeekday=!0:(Kt=ab(oe,ce,Ee,He,xt),j._a[qi]=Kt.year,j._dayOfYear=Kt.dayOfYear)}t.ISO_8601=function(){},t.RFC_2822=function(){};function mm(j){if(j._f===t.ISO_8601){rp(j);return}if(j._f===t.RFC_2822){Gc(j);return}j._a=[],q(j).empty=!0;var $=""+j._i,oe,ce,Ee,He,xt,Kt=$.length,Qr=0,Fn,Ri;for(Ee=xr(j._f,j._locale).match(_t)||[],Ri=Ee.length,oe=0;oe0&&q(j).unusedInput.push(xt),$=$.slice($.indexOf(ce)+ce.length),Qr+=ce.length),sr[He]?(ce?q(j).empty=!1:q(j).unusedTokens.push(He),K3(He,ce,j)):j._strict&&!ce&&q(j).unusedTokens.push(He);q(j).charsLeftOver=Kt-Qr,$.length>0&&q(j).unusedInput.push($),j._a[No]<=12&&q(j).bigHour===!0&&j._a[No]>0&&(q(j).bigHour=void 0),q(j).parsedDateParts=j._a.slice(0),q(j).meridiem=j._meridiem,j._a[No]=dc(j._locale,j._a[No],j._meridiem),Fn=q(j).era,Fn!==null&&(j._a[qi]=j._locale.erasConvertYear(Fn,j._a[qi])),Ln(j),bs(j)}function dc(j,$,oe){var ce;return oe==null?$:j.meridiemHour!=null?j.meridiemHour($,oe):(j.isPM!=null&&(ce=j.isPM(oe),ce&&$<12&&($+=12),!ce&&$===12&&($=0)),$)}function Gl(j){var $,oe,ce,Ee,He,xt,Kt=!1,Qr=j._f.length;if(Qr===0){q(j).invalidFormat=!0,j._d=new Date(NaN);return}for(Ee=0;Eethis?this:j:X()});function vm(j,$){var oe,ce;if($.length===1&&r($[0])&&($=$[0]),!$.length)return ro();for(oe=$[0],ce=1;ce<$.length;++ce)(!$[ce].isValid()||$[ce][j](oe))&&(oe=$[ce]);return oe}function jh(){var j=[].slice.call(arguments,0);return vm("isBefore",j)}function gm(){var j=[].slice.call(arguments,0);return vm("isAfter",j)}var hc=function(){return Date.now?Date.now():+new Date},ba=["year","quarter","month","week","day","hour","minute","second","millisecond"];function cd(j){var $,oe=!1,ce,Ee=ba.length;for($ in j)if(i(j,$)&&!(En.call(ba,$)!==-1&&(j[$]==null||!isNaN(j[$]))))return!1;for(ce=0;cethis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ch(){if(!y(this._isDSTShifted))return this._isDSTShifted;var j={},$;return me(j,this),j=gl(j),j._a?($=j._isUTC?L(j._a):ro(j._a),this._isDSTShifted=this.isValid()&&n5(j._a,$.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function mb(){return this.isValid()?!this._isUTC:!1}function Th(){return this.isValid()?this._isUTC:!1}function s5(){return this.isValid()?this._isUTC&&this._offset===0:!1}var Rv=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Ah=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Jl(j,$){var oe=j,ce=null,Ee,He,xt;return Xc(j)?oe={ms:j._milliseconds,d:j._days,M:j._months}:_(j)||!isNaN(+j)?(oe={},$?oe[$]=+j:oe.milliseconds=+j):(ce=Rv.exec(j))?(Ee=ce[1]==="-"?-1:1,oe={y:0,d:Gn(ce[$s])*Ee,h:Gn(ce[No])*Ee,m:Gn(ce[Ul])*Ee,s:Gn(ce[Ou])*Ee,ms:Gn(pb(ce[Gf]*1e3))*Ee}):(ce=Ah.exec(j))?(Ee=ce[1]==="-"?-1:1,oe={y:Pu(ce[2],Ee),M:Pu(ce[3],Ee),w:Pu(ce[4],Ee),d:Pu(ce[5],Ee),h:Pu(ce[6],Ee),m:Pu(ce[7],Ee),s:Pu(ce[8],Ee)}):oe==null?oe={}:typeof oe=="object"&&("from"in oe||"to"in oe)&&(xt=yl(ro(oe.from),ro(oe.to)),oe={},oe.ms=xt.milliseconds,oe.M=xt.months),He=new ku(oe),Xc(j)&&i(j,"_locale")&&(He._locale=j._locale),Xc(j)&&i(j,"_isValid")&&(He._isValid=j._isValid),He}Jl.fn=ku.prototype,Jl.invalid=fd;function Pu(j,$){var oe=j&&parseFloat(j.replace(",","."));return(isNaN(oe)?0:oe)*$}function Dv(j,$){var oe={};return oe.months=$.month()-j.month()+($.year()-j.year())*12,j.clone().add(oe.months,"M").isAfter($)&&--oe.months,oe.milliseconds=+$-+j.clone().add(oe.months,"M"),oe}function yl(j,$){var oe;return j.isValid()&&$.isValid()?($=Kc($,j),j.isBefore($)?oe=Dv(j,$):(oe=Dv($,j),oe.milliseconds=-oe.milliseconds,oe.months=-oe.months),oe):{milliseconds:0,months:0}}function zv(j,$){return function(oe,ce){var Ee,He;return ce!==null&&!isNaN(+ce)&&(Ye($,"moment()."+$+"(period, number) is deprecated. Please use moment()."+$+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),He=oe,oe=ce,ce=He),Ee=Jl(oe,ce),bm(this,Ee,j),this}}function bm(j,$,oe,ce){var Ee=$._milliseconds,He=pb($._days),xt=pb($._months);j.isValid()&&(ce=ce??!0,xt&&hl(j,Xf(j,"Month")+xt*oe),He&&ts(j,"Date",Xf(j,"Date")+He*oe),Ee&&j._d.setTime(j._d.valueOf()+Ee*oe),ce&&t.updateOffset(j,He||xt))}var Mh=zv(1,"add"),Nv=zv(-1,"subtract");function fi(j){return typeof j=="string"||j instanceof String}function l5(j){return ge(j)||k(j)||fi(j)||_(j)||np(j)||Rh(j)||j===null||j===void 0}function Rh(j){var $=o(j)&&!d(j),oe=!1,ce=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],Ee,He,xt=ce.length;for(Ee=0;Eeoe.valueOf():oe.valueOf()9999?ir(oe,$?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):Je(Date.prototype.toISOString)?$?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",ir(oe,"Z")):ir(oe,$?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function dd(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var j="moment",$="",oe,ce,Ee,He;return this.isLocal()||(j=this.utcOffset()===0?"moment.utc":"moment.parseZone",$="Z"),oe="["+j+'("]',ce=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",Ee="-MM-DD[T]HH:mm:ss.SSS",He=$+'[")]',this.format(oe+ce+Ee+He)}function _m(j){j||(j=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var $=ir(this,j);return this.localeData().postformat($)}function Lv(j,$){return this.isValid()&&(ge(j)&&j.isValid()||ro(j).isValid())?Jl({to:this,from:j}).locale(this.locale()).humanize(!$):this.localeData().invalidDate()}function hd(j){return this.from(ro(),j)}function Fv(j,$){return this.isValid()&&(ge(j)&&j.isValid()||ro(j).isValid())?Jl({from:this,to:j}).locale(this.locale()).humanize(!$):this.localeData().invalidDate()}function Sm(j){return this.to(ro(),j)}function Bv(j){var $;return j===void 0?this._locale._abbr:($=vl(j),$!=null&&(this._locale=$),this)}var u5=Pe("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(j){return j===void 0?this.localeData():this.locale(j)});function Em(){return this._locale}var Kl=1e3,Dh=60*Kl,Im=60*Dh,Xs=(365*400+97)*24*Im;function Qc(j,$){return(j%$+$)%$}function Gi(j,$,oe){return j<100&&j>=0?new Date(j+400,$,oe)-Xs:new Date(j,$,oe).valueOf()}function aa(j,$,oe){return j<100&&j>=0?Date.UTC(j+400,$,oe)-Xs:Date.UTC(j,$,oe)}function Zc(j){var $,oe;if(j=Dn(j),j===void 0||j==="millisecond"||!this.isValid())return this;switch(oe=this._isUTC?aa:Gi,j){case"year":$=oe(this.year(),0,1);break;case"quarter":$=oe(this.year(),this.month()-this.month()%3,1);break;case"month":$=oe(this.year(),this.month(),1);break;case"week":$=oe(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":$=oe(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":$=oe(this.year(),this.month(),this.date());break;case"hour":$=this._d.valueOf(),$-=Qc($+(this._isUTC?0:this.utcOffset()*Dh),Im);break;case"minute":$=this._d.valueOf(),$-=Qc($,Dh);break;case"second":$=this._d.valueOf(),$-=Qc($,Kl);break}return this._d.setTime($),t.updateOffset(this,!0),this}function Yl(j){var $,oe;if(j=Dn(j),j===void 0||j==="millisecond"||!this.isValid())return this;switch(oe=this._isUTC?aa:Gi,j){case"year":$=oe(this.year()+1,0,1)-1;break;case"quarter":$=oe(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":$=oe(this.year(),this.month()+1,1)-1;break;case"week":$=oe(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":$=oe(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":$=oe(this.year(),this.month(),this.date()+1)-1;break;case"hour":$=this._d.valueOf(),$+=Im-Qc($+(this._isUTC?0:this.utcOffset()*Dh),Im)-1;break;case"minute":$=this._d.valueOf(),$+=Dh-Qc($,Dh)-1;break;case"second":$=this._d.valueOf(),$+=Kl-Qc($,Kl)-1;break}return this._d.setTime($),t.updateOffset(this,!0),this}function ef(){return this._d.valueOf()-(this._offset||0)*6e4}function md(){return Math.floor(this.valueOf()/1e3)}function op(){return new Date(this.valueOf())}function Ob(){var j=this;return[j.year(),j.month(),j.date(),j.hour(),j.minute(),j.second(),j.millisecond()]}function c5(){var j=this;return{years:j.year(),months:j.month(),date:j.date(),hours:j.hours(),minutes:j.minutes(),seconds:j.seconds(),milliseconds:j.milliseconds()}}function Wv(){return this.isValid()?this.toISOString():null}function vd(){return U(this)}function xb(){return N({},q(this))}function Ql(){return q(this).overflow}function zh(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}Pt("N",0,0,"eraAbbr"),Pt("NN",0,0,"eraAbbr"),Pt("NNN",0,0,"eraAbbr"),Pt("NNNN",0,0,"eraName"),Pt("NNNNN",0,0,"eraNarrow"),Pt("y",["y",1],"yo","eraYear"),Pt("y",["yy",2],0,"eraYear"),Pt("y",["yyy",3],0,"eraYear"),Pt("y",["yyyy",4],0,"eraYear"),vr("N",Pm),vr("NN",Pm),vr("NNN",Pm),vr("NNNN",bl),vr("NNNNN",tf),Xn(["N","NN","NNN","NNNN","NNNNN"],function(j,$,oe,ce){var Ee=oe._locale.erasParse(j,ce,oe._strict);Ee?q(oe).era=Ee:q(oe).invalidEra=j}),vr("y",Hs),vr("yy",Hs),vr("yyy",Hs),vr("yyyy",Hs),vr("yo",ju),Xn(["y","yy","yyy","yyyy"],qi),Xn(["yo"],function(j,$,oe,ce){var Ee;oe._locale._eraYearOrdinalRegex&&(Ee=j.match(oe._locale._eraYearOrdinalRegex)),oe._locale.eraYearOrdinalParse?$[qi]=oe._locale.eraYearOrdinalParse(j,Ee):$[qi]=parseInt(j,10)});function _b(j,$){var oe,ce,Ee,He=this._eras||vl("en")._eras;for(oe=0,ce=He.length;oe=0)return He[ce]}function Sb(j,$){var oe=j.since<=j.until?1:-1;return $===void 0?t(j.since).year():t(j.since).year()+($-j.offset)*oe}function Fa(){var j,$,oe,ce=this.localeData().eras();for(j=0,$=ce.length;j<$;++j)if(oe=this.clone().startOf("day").valueOf(),ce[j].since<=oe&&oe<=ce[j].until||ce[j].until<=oe&&oe<=ce[j].since)return ce[j].name;return""}function Hv(){var j,$,oe,ce=this.localeData().eras();for(j=0,$=ce.length;j<$;++j)if(oe=this.clone().startOf("day").valueOf(),ce[j].since<=oe&&oe<=ce[j].until||ce[j].until<=oe&&oe<=ce[j].since)return ce[j].narrow;return""}function km(){var j,$,oe,ce=this.localeData().eras();for(j=0,$=ce.length;j<$;++j)if(oe=this.clone().startOf("day").valueOf(),ce[j].since<=oe&&oe<=ce[j].until||ce[j].until<=oe&&oe<=ce[j].since)return ce[j].abbr;return""}function $v(){var j,$,oe,ce,Ee=this.localeData().eras();for(j=0,$=Ee.length;j<$;++j)if(oe=Ee[j].since<=Ee[j].until?1:-1,ce=this.clone().startOf("day").valueOf(),Ee[j].since<=ce&&ce<=Ee[j].until||Ee[j].until<=ce&&ce<=Ee[j].since)return(this.year()-t(Ee[j].since).year())*oe+Ee[j].offset;return this.year()}function gd(j){return i(this,"_erasNameRegex")||mc.call(this),j?this._erasNameRegex:this._erasRegex}function Vv(j){return i(this,"_erasAbbrRegex")||mc.call(this),j?this._erasAbbrRegex:this._erasRegex}function qv(j){return i(this,"_erasNarrowRegex")||mc.call(this),j?this._erasNarrowRegex:this._erasRegex}function Pm(j,$){return $.erasAbbrRegex(j)}function bl(j,$){return $.erasNameRegex(j)}function tf(j,$){return $.erasNarrowRegex(j)}function ju(j,$){return $._eraYearOrdinalRegex||Hs}function mc(){var j=[],$=[],oe=[],ce=[],Ee,He,xt,Kt,Qr,Fn=this.eras();for(Ee=0,He=Fn.length;EeHe&&($=He),Cm.call(this,j,$,oe,ce,Ee))}function Cm(j,$,oe,ce,Ee){var He=ab(j,$,oe,ce,Ee),xt=Hc(He.year,0,He.dayOfYear);return this.year(xt.getUTCFullYear()),this.month(xt.getUTCMonth()),this.date(xt.getUTCDate()),this}Pt("Q",0,"Qo","quarter"),vr("Q",Ai),Xn("Q",function(j,$){$[xi]=(Gn(j)-1)*3});function Tm(j){return j==null?Math.ceil((this.month()+1)/3):this.month((j-1)*3+this.month()%3)}Pt("D",["DD",2],"Do","date"),vr("D",cn,Na),vr("DD",cn,mn),vr("Do",function(j,$){return j?$._dayOfMonthOrdinalParse||$._ordinalParse:$._dayOfMonthOrdinalParseLenient}),Xn(["D","DD"],$s),Xn("Do",function(j,$){$[$s]=Gn(j.match(cn)[0])});var Lh=qs("Date",!0);Pt("DDD",["DDDD",3],"DDDo","dayOfYear"),vr("DDD",cc),vr("DDDD",rn),Xn(["DDD","DDDD"],function(j,$,oe){oe._dayOfYear=Gn(j)});function p5(j){var $=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return j==null?$:this.add(j-$,"d")}Pt("m",["mm",2],0,"minute"),vr("m",cn,fc),vr("mm",cn,mn),Xn(["m","mm"],Ul);var bd=qs("Minutes",!1);Pt("s",["ss",2],0,"second"),vr("s",cn,fc),vr("ss",cn,mn),Xn(["s","ss"],Ou);var d5=qs("Seconds",!1);Pt("S",0,0,function(){return~~(this.millisecond()/100)}),Pt(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Pt(0,["SSS",3],0,"millisecond"),Pt(0,["SSSS",4],0,function(){return this.millisecond()*10}),Pt(0,["SSSSS",5],0,function(){return this.millisecond()*100}),Pt(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),Pt(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),Pt(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),Pt(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),vr("S",cc,Ai),vr("SS",cc,mn),vr("SSS",cc,rn);var rf,Eb;for(rf="SSSS";rf.length<=9;rf+="S")vr(rf,Hs);function Ro(j,$){$[Gf]=Gn(("0."+j)*1e3)}for(rf="S";rf.length<=9;rf+="S")Xn(rf,Ro);Eb=qs("Milliseconds",!1),Pt("z",0,0,"zoneAbbr"),Pt("zz",0,0,"zoneName");function R4(){return this._isUTC?"UTC":""}function gc(){return this._isUTC?"Coordinated Universal Time":""}var Ht=ye.prototype;Ht.add=Mh,Ht.calendar=wm,Ht.clone=Vt,Ht.diff=M4,Ht.endOf=Yl,Ht.format=_m,Ht.from=Lv,Ht.fromNow=hd,Ht.to=Fv,Ht.toNow=Sm,Ht.get=gs,Ht.invalidAt=Ql,Ht.isAfter=gb,Ht.isBefore=Om,Ht.isBetween=yb,Ht.isSame=bb,Ht.isSameOrAfter=Fo,Ht.isSameOrBefore=A4,Ht.isValid=vd,Ht.lang=u5,Ht.locale=Bv,Ht.localeData=Em,Ht.max=T4,Ht.min=ws,Ht.parsingFlags=xb,Ht.set=nb,Ht.startOf=Zc,Ht.subtract=Nv,Ht.toArray=Ob,Ht.toObject=c5,Ht.toDate=op,Ht.toISOString=xm,Ht.inspect=dd,typeof Symbol<"u"&&Symbol.for!=null&&(Ht[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),Ht.toJSON=Wv,Ht.toString=wb,Ht.unix=md,Ht.valueOf=ef,Ht.creationData=zh,Ht.eraName=Fa,Ht.eraNarrow=Hv,Ht.eraAbbr=km,Ht.eraYear=$v,Ht.year=Jf,Ht.isLeapYear=xu,Ht.weekYear=jm,Ht.isoWeekYear=vc,Ht.quarter=Ht.quarters=Tm,Ht.month=Mi,Ht.daysInMonth=Go,Ht.week=Ht.weeks=Su,Ht.isoWeek=Ht.isoWeeks=ml,Ht.weeksInYear=yd,Ht.weeksInWeekYear=ap,Ht.isoWeeksInYear=Nh,Ht.isoWeeksInISOWeekYear=Uv,Ht.date=Lh,Ht.day=Ht.days=qc,Ht.weekday=sd,Ht.isoWeekday=Eu,Ht.dayOfYear=p5,Ht.hour=Ht.hours=Ev,Ht.minute=Ht.minutes=bd,Ht.second=Ht.seconds=d5,Ht.millisecond=Ht.milliseconds=Eb,Ht.utcOffset=Mv,Ht.utc=i5,Ht.local=hb,Ht.parseZone=ym,Ht.hasAlignedHourOffset=a5,Ht.isDST=Po,Ht.isLocal=mb,Ht.isUtcOffset=Th,Ht.isUtc=s5,Ht.isUTC=s5,Ht.zoneAbbr=R4,Ht.zoneName=gc,Ht.dates=Pe("dates accessor is deprecated. Use date instead.",Lh),Ht.months=Pe("months accessor is deprecated. Use month instead",Mi),Ht.years=Pe("years accessor is deprecated. Use year instead",Jf),Ht.zone=Pe("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",pd),Ht.isDSTShifted=Pe("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ch);function wd(j){return ro(j*1e3)}function sp(){return ro.apply(null,arguments).parseZone()}function Cu(j){return j}var no=Ue.prototype;no.calendar=Mt,no.longDateFormat=An,no.invalidDate=yn,no.ordinal=Sn,no.preparse=Cu,no.postformat=Cu,no.relativeTime=Mo,no.pastFuture=xo,no.set=Me,no.eras=_b,no.erasParse=f5,no.erasConvertYear=Sb,no.erasAbbrRegex=Vv,no.erasNameRegex=gd,no.erasNarrowRegex=qv,no.months=sm,no.monthsShort=Q3,no.monthsParse=id,no.monthsRegex=Z3,no.monthsShortRegex=ui,no.week=gh,no.firstDayOfYear=lm,no.firstDayOfWeek=yh,no.weekdays=wh,no.weekdaysMin=_v,no.weekdaysShort=xv,no.weekdaysParse=xh,no.weekdaysRegex=Sv,no.weekdaysShortRegex=t5,no.weekdaysMinRegex=cm,no.isPM=lb,no.meridiem=Us;function pi(j,$,oe,ce){var Ee=vl(),He=L().set(ce,$);return Ee[oe](He,j)}function Gv(j,$,oe){if(_(j)&&($=j,j=void 0),j=j||"",$!=null)return pi(j,$,oe,"month");var ce,Ee=[];for(ce=0;ce<12;ce++)Ee[ce]=pi(j,ce,oe,"month");return Ee}function nf(j,$,oe,ce){typeof j=="boolean"?(_($)&&(oe=$,$=void 0),$=$||""):($=j,oe=$,j=!1,_($)&&(oe=$,$=void 0),$=$||"");var Ee=vl(),He=j?Ee._week.dow:0,xt,Kt=[];if(oe!=null)return pi($,(oe+He)%7,ce,"day");for(xt=0;xt<7;xt++)Kt[xt]=pi($,(xt+He)%7,ce,"day");return Kt}function yc(j,$){return Gv(j,$,"months")}function D4(j,$){return Gv(j,$,"monthsShort")}function Od(j,$,oe){return nf(j,$,oe,"weekdays")}function of(j,$,oe){return nf(j,$,oe,"weekdaysShort")}function Jv(j,$,oe){return nf(j,$,oe,"weekdaysMin")}rs("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(j){var $=j%10,oe=Gn(j%100/10)===1?"th":$===1?"st":$===2?"nd":$===3?"rd":"th";return j+oe}}),t.lang=Pe("moment.lang is deprecated. Use moment.locale instead.",rs),t.langData=Pe("moment.langData is deprecated. Use moment.localeData instead.",vl);var Tu=Math.abs;function Am(){var j=this._data;return this._milliseconds=Tu(this._milliseconds),this._days=Tu(this._days),this._months=Tu(this._months),j.milliseconds=Tu(j.milliseconds),j.seconds=Tu(j.seconds),j.minutes=Tu(j.minutes),j.hours=Tu(j.hours),j.months=Tu(j.months),j.years=Tu(j.years),this}function h5(j,$,oe,ce){var Ee=Jl($,oe);return j._milliseconds+=ce*Ee._milliseconds,j._days+=ce*Ee._days,j._months+=ce*Ee._months,j._bubble()}function z4(j,$){return h5(this,j,$,1)}function di(j,$){return h5(this,j,$,-1)}function Fh(j){return j<0?Math.floor(j):Math.ceil(j)}function m5(){var j=this._milliseconds,$=this._days,oe=this._months,ce=this._data,Ee,He,xt,Kt,Qr;return j>=0&&$>=0&&oe>=0||j<=0&&$<=0&&oe<=0||(j+=Fh(Mm(oe)+$)*864e5,$=0,oe=0),ce.milliseconds=j%1e3,Ee=li(j/1e3),ce.seconds=Ee%60,He=li(Ee/60),ce.minutes=He%60,xt=li(He/60),ce.hours=xt%24,$+=li(xt/24),Qr=li(Ji($)),oe+=Qr,$-=Fh(Mm(Qr)),Kt=li(oe/12),oe%=12,ce.days=$,ce.months=oe,ce.years=Kt,this}function Ji(j){return j*4800/146097}function Mm(j){return j*146097/4800}function Au(j){if(!this.isValid())return NaN;var $,oe,ce=this._milliseconds;if(j=Dn(j),j==="month"||j==="quarter"||j==="year")switch($=this._days+ce/864e5,oe=this._months+Ji($),j){case"month":return oe;case"quarter":return oe/3;case"year":return oe/12}else switch($=this._days+Math.round(Mm(this._months)),j){case"week":return $/7+ce/6048e5;case"day":return $+ce/864e5;case"hour":return $*24+ce/36e5;case"minute":return $*1440+ce/6e4;case"second":return $*86400+ce/1e3;case"millisecond":return Math.floor($*864e5)+ce;default:throw new Error("Unknown unit "+j)}}function eu(j){return function(){return this.as(j)}}var v5=eu("ms"),Ib=eu("s"),N4=eu("m"),g5=eu("h"),Xv=eu("d"),kb=eu("w"),Rm=eu("M"),af=eu("Q"),Dm=eu("y"),zm=v5;function y5(){return Jl(this)}function sf(j){return j=Dn(j),this.isValid()?this[j+"s"]():NaN}function lp(j){return function(){return this.isValid()?this._data[j]:NaN}}var b5=lp("milliseconds"),Pb=lp("seconds"),xd=lp("minutes"),Nm=lp("hours"),tu=lp("days"),ru=lp("months"),bc=lp("years");function jb(){return li(this.days()/7)}var wa=Math.round,wl={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function up(j,$,oe,ce,Ee){return Ee.relativeTime($||1,!!oe,j,ce)}function L4(j,$,oe,ce){var Ee=Jl(j).abs(),He=wa(Ee.as("s")),xt=wa(Ee.as("m")),Kt=wa(Ee.as("h")),Qr=wa(Ee.as("d")),Fn=wa(Ee.as("M")),Ri=wa(Ee.as("w")),nu=wa(Ee.as("y")),Ru=He<=oe.ss&&["s",He]||He0,Ru[4]=ce,up.apply(null,Ru)}function Xi(j){return j===void 0?wa:typeof j=="function"?(wa=j,!0):!1}function F4(j,$){return wl[j]===void 0?!1:$===void 0?wl[j]:(wl[j]=$,j==="s"&&(wl.ss=$-1),!0)}function B4(j,$){if(!this.isValid())return this.localeData().invalidDate();var oe=!1,ce=wl,Ee,He;return typeof j=="object"&&($=j,j=!1),typeof j=="boolean"&&(oe=j),typeof $=="object"&&(ce=Object.assign({},wl,$),$.s!=null&&$.ss==null&&(ce.ss=$.s-1)),Ee=this.localeData(),He=L4(this,!oe,ce,Ee),oe&&(He=Ee.pastFuture(+this,He)),Ee.postformat(He)}var Bh=Math.abs;function _d(j){return(j>0)-(j<0)||+j}function Mu(){if(!this.isValid())return this.localeData().invalidDate();var j=Bh(this._milliseconds)/1e3,$=Bh(this._days),oe=Bh(this._months),ce,Ee,He,xt,Kt=this.asSeconds(),Qr,Fn,Ri,nu;return Kt?(ce=li(j/60),Ee=li(ce/60),j%=60,ce%=60,He=li(oe/12),oe%=12,xt=j?j.toFixed(3).replace(/\.?0+$/,""):"",Qr=Kt<0?"-":"",Fn=_d(this._months)!==_d(Kt)?"-":"",Ri=_d(this._days)!==_d(Kt)?"-":"",nu=_d(this._milliseconds)!==_d(Kt)?"-":"",Qr+"P"+(He?Fn+He+"Y":"")+(oe?Fn+oe+"M":"")+($?Ri+$+"D":"")+(Ee||ce||j?"T":"")+(Ee?nu+Ee+"H":"")+(ce?nu+ce+"M":"")+(j?nu+xt+"S":"")):"P0D"}var Rn=ku.prototype;Rn.isValid=Gr,Rn.abs=Am,Rn.add=z4,Rn.subtract=di,Rn.as=Au,Rn.asMilliseconds=v5,Rn.asSeconds=Ib,Rn.asMinutes=N4,Rn.asHours=g5,Rn.asDays=Xv,Rn.asWeeks=kb,Rn.asMonths=Rm,Rn.asQuarters=af,Rn.asYears=Dm,Rn.valueOf=zm,Rn._bubble=m5,Rn.clone=y5,Rn.get=sf,Rn.milliseconds=b5,Rn.seconds=Pb,Rn.minutes=xd,Rn.hours=Nm,Rn.days=tu,Rn.weeks=jb,Rn.months=ru,Rn.years=bc,Rn.humanize=B4,Rn.toISOString=Mu,Rn.toString=Mu,Rn.toJSON=Mu,Rn.locale=Bv,Rn.localeData=Em,Rn.toIsoString=Pe("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Mu),Rn.lang=u5,Pt("X",0,0,"unix"),Pt("x",0,0,"valueOf"),vr("x",es),vr("X",Wc),Xn("X",function(j,$,oe){oe._d=new Date(parseFloat(j)*1e3)}),Xn("x",function(j,$,oe){oe._d=new Date(Gn(j))});return t.version="2.30.1",n(ro),t.fn=Ht,t.min=jh,t.max=gm,t.now=hc,t.utc=L,t.unix=wd,t.months=yc,t.isDate=k,t.locale=rs,t.invalid=X,t.duration=Jl,t.isMoment=ge,t.weekdays=Od,t.parseZone=sp,t.localeData=vl,t.isDuration=Xc,t.monthsShort=D4,t.weekdaysMin=Jv,t.defineLocale=to,t.updateLocale=ub,t.locales=Zf,t.weekdaysShort=of,t.normalizeUnits=Dn,t.relativeTimeRounding=Xi,t.relativeTimeThreshold=F4,t.calendarFormat=vb,t.prototype=Ht,t.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},t})});var Swe=ot((Car,_we)=>{var Jqe=f4(),Xqe=A3(),Kqe=Uy(),Yqe="[object String]";function Qqe(e){return typeof e=="string"||!Xqe(e)&&Kqe(e)&&Jqe(e)==Yqe}_we.exports=Qqe});var Iwe=ot((Tar,Ewe)=>{var Zqe=f4(),eUe=Uy(),tUe="[object Boolean]";function rUe(e){return e===!0||e===!1||eUe(e)&&Zqe(e)==tUe}Ewe.exports=rUe});var Cte=ot((Aar,kwe)=>{var nUe=f4(),oUe=Uy(),iUe="[object Number]";function aUe(e){return typeof e=="number"||oUe(e)&&nUe(e)==iUe}kwe.exports=aUe});var jwe=ot((Mar,Pwe)=>{var sUe=Cte();function lUe(e){return sUe(e)&&e!=+e}Pwe.exports=lUe});var Wwe=ot((Bwe,fU)=>{(function(e,t){typeof define=="function"&&define.amd?define(t):typeof fU=="object"&&fU.exports?fU.exports=t():e.numeral=t()})(Bwe,function(){var e,t,n="2.0.6",r={},o={},i={currentLocale:"en",zeroFormat:null,nullFormat:null,defaultFormat:"0,0",scalePercentBy100:!0},d={currentLocale:i.currentLocale,zeroFormat:i.zeroFormat,nullFormat:i.nullFormat,defaultFormat:i.defaultFormat,scalePercentBy100:i.scalePercentBy100};function y(_,k){this._input=_,this._value=k}return e=function(_){var k,T,N,L;if(e.isNumeral(_))k=_.value();else if(_===0||typeof _>"u")k=0;else if(_===null||t.isNaN(_))k=null;else if(typeof _=="string")if(d.zeroFormat&&_===d.zeroFormat)k=0;else if(d.nullFormat&&_===d.nullFormat||!_.replace(/[^0-9]+/g,"").length)k=null;else{for(T in r)if(L=typeof r[T].regexps.unformat=="function"?r[T].regexps.unformat():r[T].regexps.unformat,L&&_.match(L)){N=r[T].unformat;break}N=N||e._.stringToNumber,k=N(_)}else k=Number(_)||null;return new y(_,k)},e.version=n,e.isNumeral=function(_){return _ instanceof y},e._=t={numberToFormat:function(_,k,T){var N=o[e.options.currentLocale],L=!1,Y=!1,q=0,K="",U=1e12,X=1e9,Z=1e6,fe=1e3,me="",ye=!1,ge,ae,Pe,Ne,Ye,Je,Me,Ve,Ue,ht;if(_=_||0,ae=Math.abs(_),e._.includes(k,"(")?(L=!0,k=k.replace(/[\(|\)]/g,"")):(e._.includes(k,"+")||e._.includes(k,"-"))&&(Ve=e._.includes(k,"+")?k.indexOf("+"):_<0?k.indexOf("-"):-1,k=k.replace(/[\+|\-]/g,"")),e._.includes(k,"a")&&(ge=k.match(/a(k|m|b|t)?/),ge=ge?ge[1]:!1,e._.includes(k," a")&&(K=" "),k=k.replace(new RegExp(K+"a[kmbt]?"),""),ae>=U&&!ge||ge==="t"?(K+=N.abbreviations.trillion,_=_/U):ae=X&&!ge||ge==="b"?(K+=N.abbreviations.billion,_=_/X):ae=Z&&!ge||ge==="m"?(K+=N.abbreviations.million,_=_/Z):(ae=fe&&!ge||ge==="k")&&(K+=N.abbreviations.thousand,_=_/fe)),e._.includes(k,"[.]")&&(Y=!0,k=k.replace("[.]",".")),Je=_.toString().split(".")[0],Me=k.split(".")[1],Ue=k.indexOf(","),q=(k.split(".")[0].split(",")[0].match(/0/g)||[]).length,Me?(e._.includes(Me,"[")?(Me=Me.replace("]",""),Me=Me.split("["),me=e._.toFixed(_,Me[0].length+Me[1].length,T,Me[1].length)):me=e._.toFixed(_,Me.length,T),Je=me.split(".")[0],e._.includes(me,".")?me=N.delimiters.decimal+me.split(".")[1]:me="",Y&&Number(me.slice(1))===0&&(me="")):Je=e._.toFixed(_,0,T),K&&!ge&&Number(Je)>=1e3&&K!==N.abbreviations.trillion)switch(Je=String(Number(Je)/1e3),K){case N.abbreviations.thousand:K=N.abbreviations.million;break;case N.abbreviations.million:K=N.abbreviations.billion;break;case N.abbreviations.billion:K=N.abbreviations.trillion;break}if(e._.includes(Je,"-")&&(Je=Je.slice(1),ye=!0),Je.length0;yt--)Je="0"+Je;return Ue>-1&&(Je=Je.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+N.delimiters.thousands)),k.indexOf(".")===0&&(Je=""),ht=Je+me+(K||""),L?ht=(L&&ye?"(":"")+ht+(L&&ye?")":""):Ve>=0?ht=Ve===0?(ye?"-":"+")+ht:ht+(ye?"-":"+"):ye&&(ht="-"+ht),ht},stringToNumber:function(_){var k=o[d.currentLocale],T=_,N={thousand:3,million:6,billion:9,trillion:12},L,Y,q,K;if(d.zeroFormat&&_===d.zeroFormat)Y=0;else if(d.nullFormat&&_===d.nullFormat||!_.replace(/[^0-9]+/g,"").length)Y=null;else{Y=1,k.delimiters.decimal!=="."&&(_=_.replace(/\./g,"").replace(k.delimiters.decimal,"."));for(L in N)if(K=new RegExp("[^a-zA-Z]"+k.abbreviations[L]+"(?:\\)|(\\"+k.currency.symbol+")?(?:\\))?)?$"),T.match(K)){Y*=Math.pow(10,N[L]);break}Y*=(_.split("-").length+Math.min(_.split("(").length-1,_.split(")").length-1))%2?1:-1,_=_.replace(/[^0-9\.]+/g,""),Y*=Number(_)}return Y},isNaN:function(_){return typeof _=="number"&&isNaN(_)},includes:function(_,k){return _.indexOf(k)!==-1},insert:function(_,k,T){return _.slice(0,T)+k+_.slice(T)},reduce:function(_,k){if(this===null)throw new TypeError("Array.prototype.reduce called on null or undefined");if(typeof k!="function")throw new TypeError(k+" is not a function");var T=Object(_),N=T.length>>>0,L=0,Y;if(arguments.length===3)Y=arguments[2];else{for(;L=N)throw new TypeError("Reduce of empty array with no initial value");Y=T[L++]}for(;LN?k:N},1)},toFixed:function(_,k,T,N){var L=_.toString().split("."),Y=k-(N||0),q,K,U,X;return L.length===2?q=Math.min(Math.max(L[1].length,Y),k):q=Y,U=Math.pow(10,q),X=(T(_+"e+"+q)/U).toFixed(q),N>k-q&&(K=new RegExp("\\.?0{1,"+(N-(k-q))+"}$"),X=X.replace(K,"")),X}},e.options=d,e.formats=r,e.locales=o,e.locale=function(_){return _&&(d.currentLocale=_.toLowerCase()),d.currentLocale},e.localeData=function(_){if(!_)return o[d.currentLocale];if(_=_.toLowerCase(),!o[_])throw new Error("Unknown locale : "+_);return o[_]},e.reset=function(){for(var _ in i)d[_]=i[_]},e.zeroFormat=function(_){d.zeroFormat=typeof _=="string"?_:null},e.nullFormat=function(_){d.nullFormat=typeof _=="string"?_:null},e.defaultFormat=function(_){d.defaultFormat=typeof _=="string"?_:"0.0"},e.register=function(_,k,T){if(k=k.toLowerCase(),this[_+"s"][k])throw new TypeError(k+" "+_+" already registered.");return this[_+"s"][k]=T,T},e.validate=function(_,k){var T,N,L,Y,q,K,U,X;if(typeof _!="string"&&(_+="",console.warn&&console.warn("Numeral.js: Value is not string. It has been co-erced to: ",_)),_=_.trim(),_.match(/^\d+$/))return!0;if(_==="")return!1;try{U=e.localeData(k)}catch{U=e.localeData(e.locale())}return L=U.currency.symbol,q=U.abbreviations,T=U.delimiters.decimal,U.delimiters.thousands==="."?N="\\.":N=U.delimiters.thousands,X=_.match(/^[^\d]+/),X!==null&&(_=_.substr(1),X[0]!==L)||(X=_.match(/[^\d]+$/),X!==null&&(_=_.slice(0,-1),X[0]!==q.thousand&&X[0]!==q.million&&X[0]!==q.billion&&X[0]!==q.trillion))?!1:(K=new RegExp(N+"{2}"),_.match(/[^\d.,]/g)?!1:(Y=_.split(T),Y.length>2?!1:Y.length<2?!!Y[0].match(/^\d+.*\d$/)&&!Y[0].match(K):Y[0].length===1?!!Y[0].match(/^\d+$/)&&!Y[0].match(K)&&!!Y[1].match(/^\d+$/):!!Y[0].match(/^\d+.*\d$/)&&!Y[0].match(K)&&!!Y[1].match(/^\d+$/)))},e.fn=y.prototype={clone:function(){return e(this)},format:function(_,k){var T=this._value,N=_||d.defaultFormat,L,Y,q;if(k=k||Math.round,T===0&&d.zeroFormat!==null)Y=d.zeroFormat;else if(T===null&&d.nullFormat!==null)Y=d.nullFormat;else{for(L in r)if(N.match(r[L].regexps.format)){q=r[L].format;break}q=q||e._.numberToFormat,Y=q(T,N,k)}return Y},value:function(){return this._value},input:function(){return this._input},set:function(_){return this._value=Number(_),this},add:function(_){var k=t.correctionFactor.call(null,this._value,_);function T(N,L,Y,q){return N+Math.round(k*L)}return this._value=t.reduce([this._value,_],T,0)/k,this},subtract:function(_){var k=t.correctionFactor.call(null,this._value,_);function T(N,L,Y,q){return N-Math.round(k*L)}return this._value=t.reduce([_],T,Math.round(this._value*k))/k,this},multiply:function(_){function k(T,N,L,Y){var q=t.correctionFactor(T,N);return Math.round(T*q)*Math.round(N*q)/Math.round(q*q)}return this._value=t.reduce([this._value,_],k,1),this},divide:function(_){function k(T,N,L,Y){var q=t.correctionFactor(T,N);return Math.round(T*q)/Math.round(N*q)}return this._value=t.reduce([this._value,_],k),this},difference:function(_){return Math.abs(e(this._value).subtract(_).value())}},e.register("locale","en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(_){var k=_%10;return~~(_%100/10)===1?"th":k===1?"st":k===2?"nd":k===3?"rd":"th"},currency:{symbol:"$"}}),function(){e.register("format","bps",{regexps:{format:/(BPS)/,unformat:/(BPS)/},format:function(_,k,T){var N=e._.includes(k," BPS")?" ":"",L;return _=_*1e4,k=k.replace(/\s?BPS/,""),L=e._.numberToFormat(_,k,T),e._.includes(L,")")?(L=L.split(""),L.splice(-1,0,N+"BPS"),L=L.join("")):L=L+N+"BPS",L},unformat:function(_){return+(e._.stringToNumber(_)*1e-4).toFixed(15)}})}(),function(){var _={base:1e3,suffixes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},k={base:1024,suffixes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},T=_.suffixes.concat(k.suffixes.filter(function(L){return _.suffixes.indexOf(L)<0})),N=T.join("|");N="("+N.replace("B","B(?!PS)")+")",e.register("format","bytes",{regexps:{format:/([0\s]i?b)/,unformat:new RegExp(N)},format:function(L,Y,q){var K,U=e._.includes(Y,"ib")?k:_,X=e._.includes(Y," b")||e._.includes(Y," ib")?" ":"",Z,fe,me;for(Y=Y.replace(/\s?i?b/,""),Z=0;Z<=U.suffixes.length;Z++)if(fe=Math.pow(U.base,Z),me=Math.pow(U.base,Z+1),L===null||L===0||L>=fe&&L0&&(L=L/fe);break}return K=e._.numberToFormat(L,Y,q),K+X},unformat:function(L){var Y=e._.stringToNumber(L),q,K;if(Y){for(q=_.suffixes.length-1;q>=0;q--){if(e._.includes(L,_.suffixes[q])){K=Math.pow(_.base,q);break}if(e._.includes(L,k.suffixes[q])){K=Math.pow(k.base,q);break}}Y*=K||1}return Y}})}(),function(){e.register("format","currency",{regexps:{format:/(\$)/},format:function(_,k,T){var N=e.locales[e.options.currentLocale],L={before:k.match(/^([\+|\-|\(|\s|\$]*)/)[0],after:k.match(/([\+|\-|\)|\s|\$]*)$/)[0]},Y,q,K;for(k=k.replace(/\s?\$\s?/,""),Y=e._.numberToFormat(_,k,T),_>=0?(L.before=L.before.replace(/[\-\(]/,""),L.after=L.after.replace(/[\-\)]/,"")):_<0&&!e._.includes(L.before,"-")&&!e._.includes(L.before,"(")&&(L.before="-"+L.before),K=0;K=0;K--)switch(q=L.after[K],q){case"$":Y=K===L.after.length-1?Y+N.currency.symbol:e._.insert(Y,N.currency.symbol,-(L.after.length-(1+K)));break;case" ":Y=K===L.after.length-1?Y+" ":e._.insert(Y," ",-(L.after.length-(1+K)+N.currency.symbol.length-1));break}return Y}})}(),function(){e.register("format","exponential",{regexps:{format:/(e\+|e-)/,unformat:/(e\+|e-)/},format:function(_,k,T){var N,L=typeof _=="number"&&!e._.isNaN(_)?_.toExponential():"0e+0",Y=L.split("e");return k=k.replace(/e[\+|\-]{1}0/,""),N=e._.numberToFormat(Number(Y[0]),k,T),N+"e"+Y[1]},unformat:function(_){var k=e._.includes(_,"e+")?_.split("e+"):_.split("e-"),T=Number(k[0]),N=Number(k[1]);N=e._.includes(_,"e-")?N*=-1:N;function L(Y,q,K,U){var X=e._.correctionFactor(Y,q),Z=Y*X*(q*X)/(X*X);return Z}return e._.reduce([T,Math.pow(10,N)],L,1)}})}(),function(){e.register("format","ordinal",{regexps:{format:/(o)/},format:function(_,k,T){var N=e.locales[e.options.currentLocale],L,Y=e._.includes(k," o")?" ":"";return k=k.replace(/\s?o/,""),Y+=N.ordinal(_),L=e._.numberToFormat(_,k,T),L+Y}})}(),function(){e.register("format","percentage",{regexps:{format:/(%)/,unformat:/(%)/},format:function(_,k,T){var N=e._.includes(k," %")?" ":"",L;return e.options.scalePercentBy100&&(_=_*100),k=k.replace(/\s?\%/,""),L=e._.numberToFormat(_,k,T),e._.includes(L,")")?(L=L.split(""),L.splice(-1,0,N+"%"),L=L.join("")):L=L+N+"%",L},unformat:function(_){var k=e._.stringToNumber(_);return e.options.scalePercentBy100?k*.01:k}})}(),function(){e.register("format","time",{regexps:{format:/(:)/,unformat:/(:)/},format:function(_,k,T){var N=Math.floor(_/60/60),L=Math.floor((_-N*60*60)/60),Y=Math.round(_-N*60*60-L*60);return N+":"+(L<10?"0"+L:L)+":"+(Y<10?"0"+Y:Y)},unformat:function(_){var k=_.split(":"),T=0;return k.length===3?(T=T+Number(k[0])*60*60,T=T+Number(k[1])*60,T=T+Number(k[2])):k.length===2&&(T=T+Number(k[0])*60,T=T+Number(k[1])),Number(T)}})}(),e})});var qwe=ot((tsr,Vwe)=>{var $we=Jq(),hUe="Expected a function";function Ate(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(hUe);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var d=e.apply(this,r);return n.cache=i.set(o,d)||i,d};return n.cache=new(Ate.Cache||$we),n}Ate.Cache=$we;Vwe.exports=Ate});var hU=ot((lsr,Xwe)=>{var vUe=f4(),gUe=Uy(),yUe="[object Symbol]";function bUe(e){return typeof e=="symbol"||gUe(e)&&vUe(e)==yUe}Xwe.exports=bUe});var Ywe=ot((usr,Kwe)=>{var wUe=A3(),OUe=hU(),xUe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,_Ue=/^\w*$/;function SUe(e,t){if(wUe(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||OUe(e)?!0:_Ue.test(e)||!xUe.test(e)||t!=null&&e in Object(t)}Kwe.exports=SUe});var Zwe=ot((csr,Qwe)=>{var EUe=qwe(),IUe=500;function kUe(e){var t=EUe(e,function(r){return n.size===IUe&&n.clear(),r}),n=t.cache;return t}Qwe.exports=kUe});var tOe=ot((fsr,eOe)=>{var PUe=Zwe(),jUe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,CUe=/\\(\\)?/g,TUe=PUe(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(jUe,function(n,r,o,i){t.push(o?i.replace(CUe,"$1"):r||n)}),t});eOe.exports=TUe});var Rte=ot((psr,rOe)=>{function AUe(e,t){for(var n=-1,r=e==null?0:e.length,o=Array(r);++n{var nOe=hk(),MUe=Rte(),RUe=A3(),DUe=hU(),zUe=1/0,oOe=nOe?nOe.prototype:void 0,iOe=oOe?oOe.toString:void 0;function aOe(e){if(typeof e=="string")return e;if(RUe(e))return MUe(e,aOe)+"";if(DUe(e))return iOe?iOe.call(e):"";var t=e+"";return t=="0"&&1/e==-zUe?"-0":t}sOe.exports=aOe});var cOe=ot((hsr,uOe)=>{var NUe=lOe();function LUe(e){return e==null?"":NUe(e)}uOe.exports=LUe});var mU=ot((msr,fOe)=>{var FUe=A3(),BUe=Ywe(),WUe=tOe(),HUe=cOe();function $Ue(e,t){return FUe(e)?e:BUe(e,t)?[e]:WUe(HUe(e))}fOe.exports=$Ue});var Dte=ot((vsr,pOe)=>{var VUe=hU(),qUe=1/0;function UUe(e){if(typeof e=="string"||VUe(e))return e;var t=e+"";return t=="0"&&1/e==-qUe?"-0":t}pOe.exports=UUe});var zte=ot((gsr,dOe)=>{var GUe=mU(),JUe=Dte();function XUe(e,t){t=GUe(t,e);for(var n=0,r=t.length;e!=null&&n{var KUe=zte();function YUe(e,t,n){var r=e==null?void 0:KUe(e,t);return r===void 0?n:r}hOe.exports=YUe});var gOe=ot((bsr,vOe)=>{function QUe(e,t){for(var n=-1,r=e==null?0:e.length;++n{var ZUe=PE(),eGe=function(){try{var e=ZUe(Object,"defineProperty");return e({},"",{}),e}catch{}}();yOe.exports=eGe});var Lte=ot((Osr,wOe)=>{var bOe=Nte();function tGe(e,t,n){t=="__proto__"&&bOe?bOe(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}wOe.exports=tGe});var Fte=ot((xsr,OOe)=>{var rGe=Lte(),nGe=qq(),oGe=Object.prototype,iGe=oGe.hasOwnProperty;function aGe(e,t,n){var r=e[t];(!(iGe.call(e,t)&&nGe(r,n))||n===void 0&&!(t in e))&&rGe(e,t,n)}OOe.exports=aGe});var $j=ot((_sr,xOe)=>{var sGe=Fte(),lGe=Lte();function uGe(e,t,n,r){var o=!n;n||(n={});for(var i=-1,d=t.length;++i{var cGe=$j(),fGe=rU();function pGe(e,t){return e&&cGe(t,fGe(t),e)}_Oe.exports=pGe});var IOe=ot((Esr,EOe)=>{function dGe(e){var t=[];if(e!=null)for(var n in Object(e))t.push(n);return t}EOe.exports=dGe});var POe=ot((Isr,kOe)=>{var hGe=mk(),mGe=tU(),vGe=IOe(),gGe=Object.prototype,yGe=gGe.hasOwnProperty;function bGe(e){if(!hGe(e))return vGe(e);var t=mGe(e),n=[];for(var r in e)r=="constructor"&&(t||!yGe.call(e,r))||n.push(r);return n}kOe.exports=bGe});var vU=ot((ksr,jOe)=>{var wGe=hte(),OGe=POe(),xGe=vte();function _Ge(e){return xGe(e)?wGe(e,!0):OGe(e)}jOe.exports=_Ge});var TOe=ot((Psr,COe)=>{var SGe=$j(),EGe=vU();function IGe(e,t){return e&&SGe(t,EGe(t),e)}COe.exports=IGe});var zOe=ot((ZA,Vj)=>{var kGe=T3(),DOe=typeof ZA=="object"&&ZA&&!ZA.nodeType&&ZA,AOe=DOe&&typeof Vj=="object"&&Vj&&!Vj.nodeType&&Vj,PGe=AOe&&AOe.exports===DOe,MOe=PGe?kGe.Buffer:void 0,ROe=MOe?MOe.allocUnsafe:void 0;function jGe(e,t){if(t)return e.slice();var n=e.length,r=ROe?ROe(n):new e.constructor(n);return e.copy(r),r}Vj.exports=jGe});var LOe=ot((jsr,NOe)=>{function CGe(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n{var TGe=$j(),AGe=Yq();function MGe(e,t){return TGe(e,AGe(e),t)}FOe.exports=MGe});var gU=ot((Tsr,WOe)=>{var RGe=mte(),DGe=RGe(Object.getPrototypeOf,Object);WOe.exports=DGe});var Bte=ot((Asr,HOe)=>{var zGe=Kq(),NGe=gU(),LGe=Yq(),FGe=ute(),BGe=Object.getOwnPropertySymbols,WGe=BGe?function(e){for(var t=[];e;)zGe(t,LGe(e)),e=NGe(e);return t}:FGe;HOe.exports=WGe});var VOe=ot((Msr,$Oe)=>{var HGe=$j(),$Ge=Bte();function VGe(e,t){return HGe(e,$Ge(e),t)}$Oe.exports=VGe});var Wte=ot((Rsr,qOe)=>{var qGe=lte(),UGe=Bte(),GGe=vU();function JGe(e){return qGe(e,GGe,UGe)}qOe.exports=JGe});var GOe=ot((Dsr,UOe)=>{var XGe=Object.prototype,KGe=XGe.hasOwnProperty;function YGe(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]=="string"&&KGe.call(e,"index")&&(n.index=e.index,n.input=e.input),n}UOe.exports=YGe});var yU=ot((zsr,XOe)=>{var JOe=ate();function QGe(e){var t=new e.constructor(e.byteLength);return new JOe(t).set(new JOe(e)),t}XOe.exports=QGe});var YOe=ot((Nsr,KOe)=>{var ZGe=yU();function eJe(e,t){var n=t?ZGe(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}KOe.exports=eJe});var ZOe=ot((Lsr,QOe)=>{var tJe=/\w*$/;function rJe(e){var t=new e.constructor(e.source,tJe.exec(e));return t.lastIndex=e.lastIndex,t}QOe.exports=rJe});var o4e=ot((Fsr,n4e)=>{var e4e=hk(),t4e=e4e?e4e.prototype:void 0,r4e=t4e?t4e.valueOf:void 0;function nJe(e){return r4e?Object(r4e.call(e)):{}}n4e.exports=nJe});var a4e=ot((Bsr,i4e)=>{var oJe=yU();function iJe(e,t){var n=t?oJe(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}i4e.exports=iJe});var l4e=ot((Wsr,s4e)=>{var aJe=yU(),sJe=YOe(),lJe=ZOe(),uJe=o4e(),cJe=a4e(),fJe="[object Boolean]",pJe="[object Date]",dJe="[object Map]",hJe="[object Number]",mJe="[object RegExp]",vJe="[object Set]",gJe="[object String]",yJe="[object Symbol]",bJe="[object ArrayBuffer]",wJe="[object DataView]",OJe="[object Float32Array]",xJe="[object Float64Array]",_Je="[object Int8Array]",SJe="[object Int16Array]",EJe="[object Int32Array]",IJe="[object Uint8Array]",kJe="[object Uint8ClampedArray]",PJe="[object Uint16Array]",jJe="[object Uint32Array]";function CJe(e,t,n){var r=e.constructor;switch(t){case bJe:return aJe(e);case fJe:case pJe:return new r(+e);case wJe:return sJe(e,n);case OJe:case xJe:case _Je:case SJe:case EJe:case IJe:case kJe:case PJe:case jJe:return cJe(e,n);case dJe:return new r;case hJe:case gJe:return new r(e);case mJe:return lJe(e);case vJe:return new r;case yJe:return uJe(e)}}s4e.exports=CJe});var f4e=ot((Hsr,c4e)=>{var TJe=mk(),u4e=Object.create,AJe=function(){function e(){}return function(t){if(!TJe(t))return{};if(u4e)return u4e(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();c4e.exports=AJe});var d4e=ot(($sr,p4e)=>{var MJe=f4e(),RJe=gU(),DJe=tU();function zJe(e){return typeof e.constructor=="function"&&!DJe(e)?MJe(RJe(e)):{}}p4e.exports=zJe});var m4e=ot((Vsr,h4e)=>{var NJe=KA(),LJe=Uy(),FJe="[object Map]";function BJe(e){return LJe(e)&&NJe(e)==FJe}h4e.exports=BJe});var b4e=ot((qsr,y4e)=>{var WJe=m4e(),HJe=Zq(),v4e=eU(),g4e=v4e&&v4e.isMap,$Je=g4e?HJe(g4e):WJe;y4e.exports=$Je});var O4e=ot((Usr,w4e)=>{var VJe=KA(),qJe=Uy(),UJe="[object Set]";function GJe(e){return qJe(e)&&VJe(e)==UJe}w4e.exports=GJe});var E4e=ot((Gsr,S4e)=>{var JJe=O4e(),XJe=Zq(),x4e=eU(),_4e=x4e&&x4e.isSet,KJe=_4e?XJe(_4e):JJe;S4e.exports=KJe});var C4e=ot((Jsr,j4e)=>{var YJe=ote(),QJe=gOe(),ZJe=Fte(),eXe=SOe(),tXe=TOe(),rXe=zOe(),nXe=LOe(),oXe=BOe(),iXe=VOe(),aXe=gte(),sXe=Wte(),lXe=KA(),uXe=GOe(),cXe=l4e(),fXe=d4e(),pXe=A3(),dXe=Qq(),hXe=b4e(),mXe=mk(),vXe=E4e(),gXe=rU(),yXe=vU(),bXe=1,wXe=2,OXe=4,I4e="[object Arguments]",xXe="[object Array]",_Xe="[object Boolean]",SXe="[object Date]",EXe="[object Error]",k4e="[object Function]",IXe="[object GeneratorFunction]",kXe="[object Map]",PXe="[object Number]",P4e="[object Object]",jXe="[object RegExp]",CXe="[object Set]",TXe="[object String]",AXe="[object Symbol]",MXe="[object WeakMap]",RXe="[object ArrayBuffer]",DXe="[object DataView]",zXe="[object Float32Array]",NXe="[object Float64Array]",LXe="[object Int8Array]",FXe="[object Int16Array]",BXe="[object Int32Array]",WXe="[object Uint8Array]",HXe="[object Uint8ClampedArray]",$Xe="[object Uint16Array]",VXe="[object Uint32Array]",Ra={};Ra[I4e]=Ra[xXe]=Ra[RXe]=Ra[DXe]=Ra[_Xe]=Ra[SXe]=Ra[zXe]=Ra[NXe]=Ra[LXe]=Ra[FXe]=Ra[BXe]=Ra[kXe]=Ra[PXe]=Ra[P4e]=Ra[jXe]=Ra[CXe]=Ra[TXe]=Ra[AXe]=Ra[WXe]=Ra[HXe]=Ra[$Xe]=Ra[VXe]=!0;Ra[EXe]=Ra[k4e]=Ra[MXe]=!1;function bU(e,t,n,r,o,i){var d,y=t&bXe,_=t&wXe,k=t&OXe;if(n&&(d=o?n(e,r,o,i):n(e)),d!==void 0)return d;if(!mXe(e))return e;var T=pXe(e);if(T){if(d=uXe(e),!y)return nXe(e,d)}else{var N=lXe(e),L=N==k4e||N==IXe;if(dXe(e))return rXe(e,y);if(N==P4e||N==I4e||L&&!o){if(d=_||L?{}:fXe(e),!y)return _?iXe(e,tXe(d,e)):oXe(e,eXe(d,e))}else{if(!Ra[N])return o?e:{};d=cXe(e,N,y)}}i||(i=new YJe);var Y=i.get(e);if(Y)return Y;i.set(e,d),vXe(e)?e.forEach(function(U){d.add(bU(U,t,n,U,e,i))}):hXe(e)&&e.forEach(function(U,X){d.set(X,bU(U,t,n,X,e,i))});var q=k?_?sXe:aXe:_?yXe:gXe,K=T?void 0:q(e);return QJe(K||e,function(U,X){K&&(X=U,U=e[X]),ZJe(d,X,bU(U,t,n,X,e,i))}),d}j4e.exports=bU});var A4e=ot((Xsr,T4e)=>{function qXe(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}T4e.exports=qXe});var R4e=ot((Ksr,M4e)=>{function UXe(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),n=n>o?o:n,n<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(o);++r{var GXe=zte(),JXe=R4e();function XXe(e,t){return t.length<2?e:GXe(e,JXe(t,0,-1))}D4e.exports=XXe});var L4e=ot((Qsr,N4e)=>{var KXe=mU(),YXe=A4e(),QXe=z4e(),ZXe=Dte();function eKe(e,t){return t=KXe(t,e),e=QXe(e,t),e==null||delete e[ZXe(YXe(t))]}N4e.exports=eKe});var W4e=ot((Zsr,B4e)=>{var tKe=f4(),rKe=gU(),nKe=Uy(),oKe="[object Object]",iKe=Function.prototype,aKe=Object.prototype,F4e=iKe.toString,sKe=aKe.hasOwnProperty,lKe=F4e.call(Object);function uKe(e){if(!nKe(e)||tKe(e)!=oKe)return!1;var t=rKe(e);if(t===null)return!0;var n=sKe.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&F4e.call(n)==lKe}B4e.exports=uKe});var $4e=ot((elr,H4e)=>{var cKe=W4e();function fKe(e){return cKe(e)?void 0:e}H4e.exports=fKe});var G4e=ot((tlr,U4e)=>{var V4e=hk(),pKe=cte(),dKe=A3(),q4e=V4e?V4e.isConcatSpreadable:void 0;function hKe(e){return dKe(e)||pKe(e)||!!(q4e&&e&&e[q4e])}U4e.exports=hKe});var K4e=ot((rlr,X4e)=>{var mKe=Kq(),vKe=G4e();function J4e(e,t,n,r,o){var i=-1,d=e.length;for(n||(n=vKe),o||(o=[]);++i0&&n(y)?t>1?J4e(y,t-1,n,r,o):mKe(o,y):r||(o[o.length]=y)}return o}X4e.exports=J4e});var Q4e=ot((nlr,Y4e)=>{var gKe=K4e();function yKe(e){var t=e==null?0:e.length;return t?gKe(e,1):[]}Y4e.exports=yKe});var e6e=ot((olr,Z4e)=>{function bKe(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}Z4e.exports=bKe});var n6e=ot((ilr,r6e)=>{var wKe=e6e(),t6e=Math.max;function OKe(e,t,n){return t=t6e(t===void 0?e.length-1:t,0),function(){for(var r=arguments,o=-1,i=t6e(r.length-t,0),d=Array(i);++o{function xKe(e){return function(){return e}}o6e.exports=xKe});var s6e=ot((slr,a6e)=>{function _Ke(e){return e}a6e.exports=_Ke});var c6e=ot((llr,u6e)=>{var SKe=i6e(),l6e=Nte(),EKe=s6e(),IKe=l6e?function(e,t){return l6e(e,"toString",{configurable:!0,enumerable:!1,value:SKe(t),writable:!0})}:EKe;u6e.exports=IKe});var p6e=ot((ulr,f6e)=>{var kKe=800,PKe=16,jKe=Date.now;function CKe(e){var t=0,n=0;return function(){var r=jKe(),o=PKe-(r-n);if(n=r,o>0){if(++t>=kKe)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}f6e.exports=CKe});var h6e=ot((clr,d6e)=>{var TKe=c6e(),AKe=p6e(),MKe=AKe(TKe);d6e.exports=MKe});var v6e=ot((flr,m6e)=>{var RKe=Q4e(),DKe=n6e(),zKe=h6e();function NKe(e){return zKe(DKe(e,void 0,RKe),e+"")}m6e.exports=NKe});var y6e=ot((plr,g6e)=>{var LKe=Rte(),FKe=C4e(),BKe=L4e(),WKe=mU(),HKe=$j(),$Ke=$4e(),VKe=v6e(),qKe=Wte(),UKe=1,GKe=2,JKe=4,XKe=VKe(function(e,t){var n={};if(e==null)return n;var r=!1;t=LKe(t,function(i){return i=WKe(i,e),r||(r=i.length>1),i}),HKe(e,qKe(e),n),r&&(n=FKe(n,UKe|GKe|JKe,$Ke));for(var o=t.length;o--;)BKe(n,t[o]);return n});g6e.exports=XKe});var K6e=ot(da=>{"use strict";var TU=60103,AU=60106,jW=60107,CW=60108,TW=60114,AW=60109,MW=60110,RW=60112,DW=60113,yce=60120,zW=60115,NW=60116,q6e=60121,U6e=60122,G6e=60117,J6e=60129,X6e=60131;typeof Symbol=="function"&&Symbol.for&&(Nc=Symbol.for,TU=Nc("react.element"),AU=Nc("react.portal"),jW=Nc("react.fragment"),CW=Nc("react.strict_mode"),TW=Nc("react.profiler"),AW=Nc("react.provider"),MW=Nc("react.context"),RW=Nc("react.forward_ref"),DW=Nc("react.suspense"),yce=Nc("react.suspense_list"),zW=Nc("react.memo"),NW=Nc("react.lazy"),q6e=Nc("react.block"),U6e=Nc("react.server.block"),G6e=Nc("react.fundamental"),J6e=Nc("react.debug_trace_mode"),X6e=Nc("react.legacy_hidden"));var Nc;function M3(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case TU:switch(e=e.type,e){case jW:case TW:case CW:case DW:case yce:return e;default:switch(e=e&&e.$$typeof,e){case MW:case RW:case NW:case zW:case AW:return e;default:return t}}case AU:return t}}}var Cjt=AW,Tjt=TU,Ajt=RW,Mjt=jW,Rjt=NW,Djt=zW,zjt=AU,Njt=TW,Ljt=CW,Fjt=DW;da.ContextConsumer=MW;da.ContextProvider=Cjt;da.Element=Tjt;da.ForwardRef=Ajt;da.Fragment=Mjt;da.Lazy=Rjt;da.Memo=Djt;da.Portal=zjt;da.Profiler=Njt;da.StrictMode=Ljt;da.Suspense=Fjt;da.isAsyncMode=function(){return!1};da.isConcurrentMode=function(){return!1};da.isContextConsumer=function(e){return M3(e)===MW};da.isContextProvider=function(e){return M3(e)===AW};da.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===TU};da.isForwardRef=function(e){return M3(e)===RW};da.isFragment=function(e){return M3(e)===jW};da.isLazy=function(e){return M3(e)===NW};da.isMemo=function(e){return M3(e)===zW};da.isPortal=function(e){return M3(e)===AU};da.isProfiler=function(e){return M3(e)===TW};da.isStrictMode=function(e){return M3(e)===CW};da.isSuspense=function(e){return M3(e)===DW};da.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===jW||e===TW||e===J6e||e===CW||e===DW||e===yce||e===X6e||typeof e=="object"&&e!==null&&(e.$$typeof===NW||e.$$typeof===zW||e.$$typeof===AW||e.$$typeof===MW||e.$$typeof===RW||e.$$typeof===G6e||e.$$typeof===q6e||e[0]===U6e)};da.typeOf=M3});var Q6e=ot((e4r,Y6e)=>{"use strict";Y6e.exports=K6e()});var fxe=ot((A4r,cxe)=>{"use strict";cxe.exports=function(t,n){if(n=n.split(":")[0],t=+t,!t)return!1;switch(n){case"http":case"ws":return t!==80;case"https":case"wss":return t!==443;case"ftp":return t!==21;case"gopher":return t!==70;case"file":return!1}return t!==0}});var hxe=ot(Oce=>{"use strict";var nCt=Object.prototype.hasOwnProperty,oCt;function pxe(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return null}}function dxe(e){try{return encodeURIComponent(e)}catch{return null}}function iCt(e){for(var t=/([^=?#&]+)=?([^&]*)/g,n={},r;r=t.exec(e);){var o=pxe(r[1]),i=pxe(r[2]);o===null||i===null||o in n||(n[o]=i)}return n}function aCt(e,t){t=t||"";var n=[],r,o;typeof t!="string"&&(t="?");for(o in e)if(nCt.call(e,o)){if(r=e[o],!r&&(r===null||r===oCt||isNaN(r))&&(r=""),o=dxe(o),r=dxe(r),o===null||r===null)continue;n.push(o+"="+r)}return n.length?t+n.join("&"):""}Oce.stringify=aCt;Oce.parse=iCt});var xxe=ot((R4r,Oxe)=>{"use strict";var vxe=fxe(),DU=hxe(),sCt=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,gxe=/[\n\r\t]/g,lCt=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,yxe=/:\d+$/,uCt=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,cCt=/^[a-zA-Z]:/;function _ce(e){return(e||"").toString().replace(sCt,"")}var xce=[["#","hash"],["?","query"],function(t,n){return d4(n.protocol)?t.replace(/\\/g,"/"):t},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],mxe={hash:1,query:1};function bxe(e){var t;typeof window<"u"?t=window:typeof global<"u"?t=global:typeof self<"u"?t=self:t={};var n=t.location||{};e=e||n;var r={},o=typeof e,i;if(e.protocol==="blob:")r=new h4(unescape(e.pathname),{});else if(o==="string"){r=new h4(e,{});for(i in mxe)delete r[i]}else if(o==="object"){for(i in e)i in mxe||(r[i]=e[i]);r.slashes===void 0&&(r.slashes=lCt.test(e.href))}return r}function d4(e){return e==="file:"||e==="ftp:"||e==="http:"||e==="https:"||e==="ws:"||e==="wss:"}function wxe(e,t){e=_ce(e),e=e.replace(gxe,""),t=t||{};var n=uCt.exec(e),r=n[1]?n[1].toLowerCase():"",o=!!n[2],i=!!n[3],d=0,y;return o?i?(y=n[2]+n[3]+n[4],d=n[2].length+n[3].length):(y=n[2]+n[4],d=n[2].length):i?(y=n[3]+n[4],d=n[3].length):y=n[4],r==="file:"?d>=2&&(y=y.slice(2)):d4(r)?y=n[4]:r?o&&(y=y.slice(2)):d>=2&&d4(t.protocol)&&(y=n[4]),{protocol:r,slashes:o||d4(r),slashesCount:d,rest:y}}function fCt(e,t){if(e==="")return t;for(var n=(t||"/").split("/").slice(0,-1).concat(e.split("/")),r=n.length,o=n[r-1],i=!1,d=0;r--;)n[r]==="."?n.splice(r,1):n[r]===".."?(n.splice(r,1),d++):d&&(r===0&&(i=!0),n.splice(r,1),d--);return i&&n.unshift(""),(o==="."||o==="..")&&n.push(""),n.join("/")}function h4(e,t,n){if(e=_ce(e),e=e.replace(gxe,""),!(this instanceof h4))return new h4(e,t,n);var r,o,i,d,y,_,k=xce.slice(),T=typeof t,N=this,L=0;for(T!=="object"&&T!=="string"&&(n=t,t=null),n&&typeof n!="function"&&(n=DU.parse),t=bxe(t),o=wxe(e||"",t),r=!o.protocol&&!o.slashes,N.slashes=o.slashes||r&&t.slashes,N.protocol=o.protocol||t.protocol||"",e=o.rest,(o.protocol==="file:"&&(o.slashesCount!==2||cCt.test(e))||!o.slashes&&(o.protocol||o.slashesCount<2||!d4(N.protocol)))&&(k[3]=[/(.*)/,"pathname"]);L{"use strict";Object.defineProperty(Lpe,"__esModule",{value:!0});var zpe=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function GNt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function JNt(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t&&(typeof t=="object"||typeof t=="function")?t:e}function XNt(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var kSe={position:"absolute",top:0,left:0,visibility:"hidden",height:0,overflow:"scroll",whiteSpace:"pre"},KNt=["extraWidth","injectStyles","inputClassName","inputRef","inputStyle","minWidth","onAutosize","placeholderIsMinWidth"],YNt=function(t){return KNt.forEach(function(n){return delete t[n]}),t},PSe=function(t,n){n.style.fontSize=t.fontSize,n.style.fontFamily=t.fontFamily,n.style.fontWeight=t.fontWeight,n.style.fontStyle=t.fontStyle,n.style.letterSpacing=t.letterSpacing,n.style.textTransform=t.textTransform},ASe=typeof window<"u"&&window.navigator?/MSIE |Trident\/|Edge\//.test(window.navigator.userAgent):!1,jSe=function(){return ASe?"_"+Math.random().toString(36).substr(2,12):void 0},Npe=function(e){XNt(t,e),ISe(t,null,[{key:"getDerivedStateFromProps",value:function(r,o){var i=r.id;return i!==o.prevId?{inputId:i||jSe(),prevId:i}:null}}]);function t(n){GNt(this,t);var r=JNt(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,n));return r.inputRef=function(o){r.input=o,typeof r.props.inputRef=="function"&&r.props.inputRef(o)},r.placeHolderSizerRef=function(o){r.placeHolderSizer=o},r.sizerRef=function(o){r.sizer=o},r.state={inputWidth:n.minWidth,inputId:n.id||jSe(),prevId:n.id},r}return ISe(t,[{key:"componentDidMount",value:function(){this.mounted=!0,this.copyInputStyles(),this.updateInputWidth()}},{key:"componentDidUpdate",value:function(r,o){o.inputWidth!==this.state.inputWidth&&typeof this.props.onAutosize=="function"&&this.props.onAutosize(this.state.inputWidth),this.updateInputWidth()}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"copyInputStyles",value:function(){if(!(!this.mounted||!window.getComputedStyle)){var r=this.input&&window.getComputedStyle(this.input);r&&(PSe(r,this.sizer),this.placeHolderSizer&&PSe(r,this.placeHolderSizer))}}},{key:"updateInputWidth",value:function(){if(!(!this.mounted||!this.sizer||typeof this.sizer.scrollWidth>"u")){var r=void 0;this.props.placeholder&&(!this.props.value||this.props.value&&this.props.placeholderIsMinWidth)?r=Math.max(this.sizer.scrollWidth,this.placeHolderSizer.scrollWidth)+2:r=this.sizer.scrollWidth+2;var o=this.props.type==="number"&&this.props.extraWidth===void 0?16:parseInt(this.props.extraWidth)||0;r+=o,r{(function(e,t){typeof yK=="object"&&typeof bke<"u"?t(yK):typeof define=="function"&&define.amd?define(["exports"],t):(e=typeof globalThis<"u"?globalThis:e||self,t(e.vis=e.vis||{}))})(yK,function(e){function t(I,A){if(!(I instanceof A))throw new TypeError("Cannot call a class as a function")}var n=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function r(I){return I&&I.__esModule&&Object.prototype.hasOwnProperty.call(I,"default")?I.default:I}var o={exports:{}},i=function(I){return I&&I.Math===Math&&I},d=i(typeof globalThis=="object"&&globalThis)||i(typeof window=="object"&&window)||i(typeof self=="object"&&self)||i(typeof n=="object"&&n)||function(){return this}()||n||Function("return this")(),y=function(I){try{return!!I()}catch{return!0}},_=y,k=!_(function(){var I=function(){}.bind();return typeof I!="function"||I.hasOwnProperty("prototype")}),T=k,N=Function.prototype,L=N.apply,Y=N.call,q=typeof Reflect=="object"&&Reflect.apply||(T?Y.bind(L):function(){return Y.apply(L,arguments)}),K=k,U=Function.prototype,X=U.call,Z=K&&U.bind.bind(X,X),fe=K?Z:function(I){return function(){return X.apply(I,arguments)}},me=fe,ye=me({}.toString),ge=me("".slice),ae=function(I){return ge(ye(I),8,-1)},Pe=ae,Ne=fe,Ye=function(I){if(Pe(I)==="Function")return Ne(I)},Je=typeof document=="object"&&document.all,Me=typeof Je>"u"&&Je!==void 0,Ve={all:Je,IS_HTMLDDA:Me},Ue=Ve,ht=Ue.all,yt=Ue.IS_HTMLDDA?function(I){return typeof I=="function"||I===ht}:function(I){return typeof I=="function"},Mt={},wt=y,_t=!wt(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),Nt=k,Rt=Function.prototype.call,sr=Nt?Rt.bind(Rt):function(){return Rt.apply(Rt,arguments)},Pt={},Sr={}.propertyIsEnumerable,Nr=Object.getOwnPropertyDescriptor,ir=Nr&&!Sr.call({1:2},1);Pt.f=ir?function(A){var B=Nr(this,A);return!!B&&B.enumerable}:Sr;var xr=function(I,A){return{enumerable:!(I&1),configurable:!(I&2),writable:!(I&4),value:A}},qn=fe,An=y,Oo=ae,yn=Object,Vr=qn("".split),eo=An(function(){return!yn("z").propertyIsEnumerable(0)})?function(I){return Oo(I)==="String"?Vr(I,""):yn(I)}:yn,Sn=function(I){return I==null},Ti=Sn,Mo=TypeError,xo=function(I){if(Ti(I))throw new Mo("Can't call method on "+I);return I},Qa=eo,Dn=xo,mr=function(I){return Qa(Dn(I))},Un=yt,Za=Ve,Ai=Za.all,mn=Za.IS_HTMLDDA?function(I){return typeof I=="object"?I!==null:Un(I)||I===Ai}:function(I){return typeof I=="object"?I!==null:Un(I)},rn={},Mn=rn,go=d,cn=yt,ms=function(I){return cn(I)?I:void 0},Oi=function(I,A){return arguments.length<2?ms(Mn[I])||ms(go[I]):Mn[I]&&Mn[I][A]||go[I]&&go[I][A]},cc=fe,ko=cc({}.isPrototypeOf),Ws=typeof navigator<"u"&&String(navigator.userAgent)||"",Hs=d,es=Ws,rb=Hs.process,am=Hs.Deno,Wc=rb&&rb.versions||am&&am.version,ql=Wc&&Wc.v8,Na,fc;ql&&(Na=ql.split("."),fc=Na[0]>0&&Na[0]<4?1:+(Na[0]+Na[1])),!fc&&es&&(Na=es.match(/Edge\/(\d+)/),(!Na||Na[1]>=74)&&(Na=es.match(/Chrome\/(\d+)/),Na&&(fc=+Na[1])));var vs=fc,vr=vs,ia=y,Uo=d,Vi=Uo.String,li=!!Object.getOwnPropertySymbols&&!ia(function(){var I=Symbol("symbol detection");return!Vi(I)||!(Object(I)instanceof Symbol)||!Symbol.sham&&vr&&vr<41}),Gn=li,nd=Gn&&!Symbol.sham&&typeof Symbol.iterator=="symbol",Xn=Oi,va=yt,K3=ko,vh=nd,qi=Object,xi=vh?function(I){return typeof I=="symbol"}:function(I){var A=Xn("Symbol");return va(A)&&K3(A.prototype,qi(I))},$s=String,No=function(I){try{return $s(I)}catch{return"Object"}},Ul=yt,Ou=No,Gf=TypeError,Vs=function(I){if(Ul(I))return I;throw new Gf(Ou(I)+" is not a function")},gv=Vs,pc=Sn,Jf=function(I,A){var B=I[A];return pc(B)?void 0:gv(B)},xu=sr,qs=yt,Xf=mn,ts=TypeError,gs=function(I,A){var B,W;if(A==="string"&&qs(B=I.toString)&&!Xf(W=xu(B,I))||qs(B=I.valueOf)&&!Xf(W=xu(B,I))||A!=="string"&&qs(B=I.toString)&&!Xf(W=xu(B,I)))return W;throw new ts("Can't convert object to primitive value")},nb={exports:{}},Ui=!0,En=d,yv=Object.defineProperty,Y3=function(I,A){try{yv(En,I,{value:A,configurable:!0,writable:!0})}catch{En[I]=A}return A},ob=d,Kf=Y3,od="__core-js_shared__",ib=ob[od]||Kf(od,{}),sm=ib,Q3=sm;(nb.exports=function(I,A){return Q3[I]||(Q3[I]=A!==void 0?A:{})})("versions",[]).push({version:"3.33.2",mode:"pure",copyright:"\xA9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.2/LICENSE",source:"https://github.com/zloirock/core-js"});var Yf=nb.exports,id=xo,hl=Object,Mi=function(I){return hl(id(I))},Go=fe,ui=Mi,Z3=Go({}.hasOwnProperty),Zo=Object.hasOwn||function(A,B){return Z3(ui(A),B)},e5=fe,Hc=0,bv=Math.random(),ab=e5(1 .toString),$c=function(I){return"Symbol("+(I===void 0?"":I)+")_"+ab(++Hc+bv,36)},_u=d,gh=Yf,Vc=Zo,yh=$c,lm=li,Su=nd,ml=_u.Symbol,ad=gh("wks"),um=Su?ml.for||ml:ml&&ml.withoutSetter||yh,Lo=function(I){return Vc(ad,I)||(ad[I]=lm&&Vc(ml,I)?ml[I]:um("Symbol."+I)),ad[I]},sb=sr,bh=mn,wv=xi,Ov=Jf,j4=gs,ys=Lo,wh=TypeError,xv=ys("toPrimitive"),_v=function(I,A){if(!bh(I)||wv(I))return I;var B=Ov(I,xv),W;if(B){if(A===void 0&&(A="default"),W=sb(B,I,A),!bh(W)||wv(W))return W;throw new wh("Can't convert object to primitive value")}return A===void 0&&(A="number"),j4(I,A)},Oh=_v,xh=xi,qc=function(I){var A=Oh(I,"string");return xh(A)?A:A+""},sd=d,Eu=mn,Sv=sd.document,t5=Eu(Sv)&&Eu(Sv.createElement),cm=function(I){return t5?Sv.createElement(I):{}},fm=_t,_h=y,Sh=cm,ci=!fm&&!_h(function(){return Object.defineProperty(Sh("div"),"a",{get:function(){return 7}}).a!==7}),La=_t,lb=sr,r5=Pt,Ev=xr,Us=mr,Gs=qc,fo=Zo,pm=ci,Iu=Object.getOwnPropertyDescriptor;Mt.f=La?Iu:function(A,B){if(A=Us(A),B=Gs(B),pm)try{return Iu(A,B)}catch{}if(fo(A,B))return Ev(!lb(r5.f,A,B),A[B])};var Eh=y,Iv=yt,kv=/#|\.prototype\./,Qf=function(I,A){var B=rs[ld(I)];return B===ub?!0:B===to?!1:Iv(A)?Eh(A):!!A},ld=Qf.normalize=function(I){return String(I).replace(kv,".").toLowerCase()},rs=Qf.data={},to=Qf.NATIVE="N",ub=Qf.POLYFILL="P",vl=Qf,Zf=Ye,bs=Vs,dm=k,Ih=Zf(Zf.bind),Uc=function(I,A){return bs(I),A===void 0?I:dm?Ih(I,A):function(){return I.apply(A,arguments)}},ga={},hm=_t,ep=y,tp=hm&&ep(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),ud=mn,rp=String,cb=TypeError,Pr=function(I){if(ud(I))return I;throw new cb(rp(I)+" is not an object")},Xr=_t,Pv=ci,C4=tp,Gc=Pr,fb=qc,Jc=TypeError,jv=Object.defineProperty,Ln=Object.getOwnPropertyDescriptor,kh="enumerable",mm="configurable",dc="writable";ga.f=Xr?C4?function(A,B,W){if(Gc(A),B=fb(B),Gc(W),typeof A=="function"&&B==="prototype"&&"value"in W&&dc in W&&!W[dc]){var J=Ln(A,B);J&&J[dc]&&(A[B]=W.value,W={configurable:mm in W?W[mm]:J[mm],enumerable:kh in W?W[kh]:J[kh],writable:!1})}return jv(A,B,W)}:jv:function(A,B,W){if(Gc(A),B=fb(B),Gc(W),Pv)try{return jv(A,B,W)}catch{}if("get"in W||"set"in W)throw new Jc("Accessors not supported");return"value"in W&&(A[B]=W.value),A};var Gl=_t,Cv=ga,Ph=xr,gl=Gl?function(I,A,B){return Cv.f(I,A,Ph(1,B))}:function(I,A,B){return I[A]=B,I},ya=d,Tv=q,ro=Ye,ws=yt,T4=Mt.f,vm=vl,jh=rn,gm=Uc,hc=gl,ba=Zo,cd=function(I){var A=function(B,W,J){if(this instanceof A){switch(arguments.length){case 0:return new I;case 1:return new I(B);case 2:return new I(B,W)}return new I(B,W,J)}return Tv(I,this,arguments)};return A.prototype=I.prototype,A},Gr=function(I,A){var B=I.target,W=I.global,J=I.stat,ie=I.proto,ve=W?ya:J?ya[B]:(ya[B]||{}).prototype,je=W?jh:jh[B]||hc(jh,B,{})[B],xe=je.prototype,Re,We,ut,rt,bt,gr,vn,On,Yn;for(rt in A)Re=vm(W?rt:B+(J?".":"#")+rt,I.forced),We=!Re&&ve&&ba(ve,rt),gr=je[rt],We&&(I.dontCallGetSet?(Yn=T4(ve,rt),vn=Yn&&Yn.value):vn=ve[rt]),bt=We&&vn?vn:A[rt],!(We&&typeof gr==typeof bt)&&(I.bind&&We?On=gm(bt,ya):I.wrap&&We?On=cd(bt):ie&&ws(bt)?On=ro(bt):On=bt,(I.sham||bt&&bt.sham||gr&&gr.sham)&&hc(On,"sham",!0),hc(je,rt,On),ie&&(ut=B+"Prototype",ba(jh,ut)||hc(jh,ut,{}),hc(jh[ut],rt,bt),I.real&&xe&&(Re||!xe[rt])&&hc(xe,rt,bt)))},fd=Gr,ku=_t,Xc=ga.f;fd({target:"Object",stat:!0,forced:Object.defineProperty!==Xc,sham:!ku},{defineProperty:Xc});var pb=rn,n5=pb.Object,o5=o.exports=function(A,B,W){return n5.defineProperty(A,B,W)};n5.defineProperty.sham&&(o5.sham=!0);var Js=o.exports,Av=Js,Kc=Av,db=Kc,Mv=db,pd=Mv,i5=pd,hb=i5,ym=r(hb),a5=ae,Po=Array.isArray||function(A){return a5(A)==="Array"},Ch=Math.ceil,mb=Math.floor,Th=Math.trunc||function(A){var B=+A;return(B>0?mb:Ch)(B)},s5=Th,Rv=function(I){var A=+I;return A!==A||A===0?0:s5(A)},Ah=Rv,Jl=Math.min,Pu=function(I){return I>0?Jl(Ah(I),9007199254740991):0},Dv=Pu,yl=function(I){return Dv(I.length)},zv=TypeError,bm=9007199254740991,Mh=function(I){if(I>bm)throw zv("Maximum allowed index exceeded");return I},Nv=qc,fi=ga,l5=xr,Rh=function(I,A,B){var W=Nv(A);W in I?fi.f(I,W,l5(0,B)):I[W]=B},np=Lo,Yc=np("toStringTag"),vb={};vb[Yc]="z";var wm=String(vb)==="[object z]",Vt=wm,gb=yt,Om=ae,yb=Lo,bb=yb("toStringTag"),Fo=Object,A4=Om(function(){return arguments}())==="Arguments",M4=function(I,A){try{return I[A]}catch{}},Xl=Vt?Om:function(I){var A,B,W;return I===void 0?"Undefined":I===null?"Null":typeof(B=M4(A=Fo(I),bb))=="string"?B:A4?Om(A):(W=Om(A))==="Object"&&gb(A.callee)?"Arguments":W},wb=fe,xm=yt,dd=sm,_m=wb(Function.toString);xm(dd.inspectSource)||(dd.inspectSource=function(I){return _m(I)});var Lv=dd.inspectSource,hd=fe,Fv=y,Sm=yt,Bv=Xl,u5=Oi,Em=Lv,Kl=function(){},Dh=[],Im=u5("Reflect","construct"),Xs=/^\s*(?:class|function)\b/,Qc=hd(Xs.exec),Gi=!Xs.test(Kl),aa=function(A){if(!Sm(A))return!1;try{return Im(Kl,Dh,A),!0}catch{return!1}},Zc=function(A){if(!Sm(A))return!1;switch(Bv(A)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return Gi||!!Qc(Xs,Em(A))}catch{return!0}};Zc.sham=!0;var Yl=!Im||Fv(function(){var I;return aa(aa.call)||!aa(Object)||!aa(function(){I=!0})||I})?Zc:aa,ef=Po,md=Yl,op=mn,Ob=Lo,c5=Ob("species"),Wv=Array,vd=function(I){var A;return ef(I)&&(A=I.constructor,md(A)&&(A===Wv||ef(A.prototype))?A=void 0:op(A)&&(A=A[c5],A===null&&(A=void 0))),A===void 0?Wv:A},xb=vd,Ql=function(I,A){return new(xb(I))(A===0?0:A)},zh=y,_b=Lo,f5=vs,Sb=_b("species"),Fa=function(I){return f5>=51||!zh(function(){var A=[],B=A.constructor={};return B[Sb]=function(){return{foo:1}},A[I](Boolean).foo!==1})},Hv=Gr,km=y,$v=Po,gd=mn,Vv=Mi,qv=yl,Pm=Mh,bl=Rh,tf=Ql,ju=Fa,mc=Lo,ip=vs,jm=mc("isConcatSpreadable"),vc=ip>=51||!km(function(){var I=[];return I[jm]=!1,I.concat()[0]!==I}),Nh=function(I){if(!gd(I))return!1;var A=I[jm];return A!==void 0?!!A:$v(I)},Uv=!vc||!ju("concat");Hv({target:"Array",proto:!0,arity:1,forced:Uv},{concat:function(A){var B=Vv(this),W=tf(B,0),J=0,ie,ve,je,xe,Re;for(ie=-1,je=arguments.length;ieve;)if(je=J[ve++],je!==je)return!0}else for(;ie>ve;ve++)if((I||ve in J)&&J[ve]===B)return I||ve||0;return!I&&-1}},R4={includes:Ro(!0),indexOf:Ro(!1)},gc={},Ht=fe,wd=Zo,sp=mr,Cu=R4.indexOf,no=gc,pi=Ht([].push),Gv=function(I,A){var B=sp(I),W=0,J=[],ie;for(ie in B)!wd(no,ie)&&wd(B,ie)&&pi(J,ie);for(;A.length>W;)wd(B,ie=A[W++])&&(~Cu(J,ie)||pi(J,ie));return J},nf=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],yc=Gv,D4=nf,Od=Object.keys||function(A){return yc(A,D4)},of=_t,Jv=tp,Tu=ga,Am=Pr,h5=mr,z4=Od;Cm.f=of&&!Jv?Object.defineProperties:function(A,B){Am(A);for(var W=h5(B),J=z4(B),ie=J.length,ve=0,je;ie>ve;)Tu.f(A,je=J[ve++],W[je]);return A};var di=Oi,Fh=di("document","documentElement"),m5=Yf,Ji=$c,Mm=m5("keys"),Au=function(I){return Mm[I]||(Mm[I]=Ji(I))},eu=Pr,v5=Cm,Ib=nf,N4=gc,g5=Fh,Xv=cm,kb=Au,Rm=">",af="<",Dm="prototype",zm="script",y5=kb("IE_PROTO"),sf=function(){},lp=function(I){return af+zm+Rm+I+af+"/"+zm+Rm},b5=function(I){I.write(lp("")),I.close();var A=I.parentWindow.Object;return I=null,A},Pb=function(){var I=Xv("iframe"),A="java"+zm+":",B;return I.style.display="none",g5.appendChild(I),I.src=String(A),B=I.contentWindow.document,B.open(),B.write(lp("document.F=Object")),B.close(),B.F},xd,Nm=function(){try{xd=new ActiveXObject("htmlfile")}catch{}Nm=typeof document<"u"?document.domain&&xd?b5(xd):Pb():b5(xd);for(var I=Ib.length;I--;)delete Nm[Dm][Ib[I]];return Nm()};N4[y5]=!0;var tu=Object.create||function(A,B){var W;return A!==null?(sf[Dm]=eu(A),W=new sf,sf[Dm]=null,W[y5]=A):W=Nm(),B===void 0?W:v5.f(W,B)},ru={},bc=Gv,jb=nf,wa=jb.concat("length","prototype");ru.f=Object.getOwnPropertyNames||function(A){return bc(A,wa)};var wl={},up=bd,L4=yl,Xi=Rh,F4=Array,B4=Math.max,Bh=function(I,A,B){for(var W=L4(I),J=up(A,W),ie=up(B===void 0?W:B,W),ve=F4(B4(ie-J,0)),je=0;JOn;On++)if((je||On in bt)&&(nc=bt[On],Fs=gr(nc,On,rt),I))if(A)mo[On]=Fs;else if(Fs)switch(I){case 3:return!0;case 5:return nc;case 6:return On;case 2:Mb(mo,nc)}else switch(I){case 4:return!1;case 7:Mb(mo,nc)}return ie?-1:W||J?J:mo}},Ba={forEach:lf(0),map:lf(1),filter:lf(2),some:lf(3),every:lf(4),find:lf(5),findIndex:lf(6),filterReject:lf(7)},eg=Gr,Fm=d,Bm=sr,f7=fe,Wm=_t,Hm=li,U4=y,Wa=Zo,I5=ko,Rb=Pr,Db=mr,k5=qc,P5=Zl,tg=xr,qh=tu,rg=Od,$m=ru,ng=wl,j5=ce,og=Mt,ig=ga,G4=Cm,J4=Pt,zb=He,Nb=Kt,X4=Yf,Lb=Au,C5=gc,Ed=$c,ag=Lo,K4=Qr,Vm=Jo,c9=Lm,Id=Yv,fp=cp,wc=Ba.forEach,Ol=Lb("hidden"),kd="Symbol",Fb="prototype",sg=fp.set,p7=fp.getterFor(kd),Ys=Object[Fb],Pd=Fm.Symbol,qm=Pd&&Pd[Fb],Bb=Fm.RangeError,Uh=Fm.TypeError,lg=Fm.QObject,T5=og.f,Gh=ig.f,Jh=ng.f,rr=J4.f,Y4=f7([].push),xl=X4("symbols"),ug=X4("op-symbols"),Q4=X4("wks"),Xh=!lg||!lg[Fb]||!lg[Fb].findChild,jd=function(I,A,B){var W=T5(Ys,A);W&&delete Ys[A],Gh(I,A,B),W&&I!==Ys&&Gh(Ys,A,W)},Um=Wm&&U4(function(){return qh(Gh({},"a",{get:function(){return Gh(this,"a",{value:7}).a}})).a!==7})?jd:Gh,Qs=function(I,A){var B=xl[I]=qh(qm);return sg(B,{type:kd,tag:I,description:A}),Wm||(B.description=A),B},cg=function(A,B,W){A===Ys&&cg(ug,B,W),Rb(A);var J=k5(B);return Rb(W),Wa(xl,J)?(W.enumerable?(Wa(A,Ol)&&A[Ol][J]&&(A[Ol][J]=!1),W=qh(W,{enumerable:tg(0,!1)})):(Wa(A,Ol)||Gh(A,Ol,tg(1,{})),A[Ol][J]=!0),Um(A,J,W)):Gh(A,J,W)},pp=function(A,B){Rb(A);var W=Db(B),J=rg(W).concat(Wb(W));return wc(J,function(ie){(!Wm||Bm(A5,W,ie))&&cg(A,ie,W[ie])}),A},Z4=function(A,B){return B===void 0?qh(A):pp(qh(A),B)},A5=function(A){var B=k5(A),W=Bm(rr,this,B);return this===Ys&&Wa(xl,B)&&!Wa(ug,B)?!1:W||!Wa(this,B)||!Wa(xl,B)||Wa(this,Ol)&&this[Ol][B]?W:!0},fg=function(A,B){var W=Db(A),J=k5(B);if(!(W===Ys&&Wa(xl,J)&&!Wa(ug,J))){var ie=T5(W,J);return ie&&Wa(xl,J)&&!(Wa(W,Ol)&&W[Ol][J])&&(ie.enumerable=!0),ie}},d7=function(A){var B=Jh(Db(A)),W=[];return wc(B,function(J){!Wa(xl,J)&&!Wa(C5,J)&&Y4(W,J)}),W},Wb=function(I){var A=I===Ys,B=Jh(A?ug:Db(I)),W=[];return wc(B,function(J){Wa(xl,J)&&(!A||Wa(Ys,J))&&Y4(W,xl[J])}),W};Hm||(Pd=function(){if(I5(qm,this))throw new Uh("Symbol is not a constructor");var A=!arguments.length||arguments[0]===void 0?void 0:P5(arguments[0]),B=Ed(A),W=function(J){var ie=this===void 0?Fm:this;ie===Ys&&Bm(W,ug,J),Wa(ie,Ol)&&Wa(ie[Ol],B)&&(ie[Ol][B]=!1);var ve=tg(1,J);try{Um(ie,B,ve)}catch(je){if(!(je instanceof Bb))throw je;jd(ie,B,ve)}};return Wm&&Xh&&Um(Ys,B,{configurable:!0,set:W}),Qs(B,A)},qm=Pd[Fb],zb(qm,"toString",function(){return p7(this).tag}),zb(Pd,"withoutSetter",function(I){return Qs(Ed(I),I)}),J4.f=A5,ig.f=cg,G4.f=pp,og.f=fg,$m.f=ng.f=d7,j5.f=Wb,K4.f=function(I){return Qs(ag(I),I)},Wm&&Nb(qm,"description",{configurable:!0,get:function(){return p7(this).description}})),eg({global:!0,constructor:!0,wrap:!0,forced:!Hm,sham:!Hm},{Symbol:Pd}),wc(rg(Q4),function(I){Vm(I)}),eg({target:kd,stat:!0,forced:!Hm},{useSetter:function(){Xh=!0},useSimple:function(){Xh=!1}}),eg({target:"Object",stat:!0,forced:!Hm,sham:!Wm},{create:Z4,defineProperty:cg,defineProperties:pp,getOwnPropertyDescriptor:fg}),eg({target:"Object",stat:!0,forced:!Hm},{getOwnPropertyNames:d7}),c9(),Id(Pd,kd),C5[Ol]=!0;var M5=li,e6=M5&&!!Symbol.for&&!!Symbol.keyFor,Ki=Gr,Hb=Oi,f9=Zo,R5=Zl,t6=Yf,$b=e6,Vb=t6("string-to-symbol-registry"),r6=t6("symbol-to-string-registry");Ki({target:"Symbol",stat:!0,forced:!$b},{for:function(I){var A=R5(I);if(f9(Vb,A))return Vb[A];var B=Hb("Symbol")(A);return Vb[A]=B,r6[B]=A,B}});var n6=Gr,qb=Zo,Ub=xi,Kh=No,h7=Yf,o6=e6,D5=h7("symbol-to-string-registry");n6({target:"Symbol",stat:!0,forced:!o6},{keyFor:function(A){if(!Ub(A))throw new TypeError(Kh(A)+" is not a symbol");if(qb(D5,A))return D5[A]}});var Yi=fe,ei=Yi([].slice),i6=fe,m7=Po,p9=yt,pg=ae,z5=Zl,zu=i6([].push),_l=function(I){if(p9(I))return I;if(m7(I)){for(var A=I.length,B=[],W=0;W=A.length)return I.target=void 0,tw(void 0,!0);switch(I.kind){case"keys":return tw(B,!1);case"values":return tw(A[B],!1)}return tw([B,A[B]],!1)},"values"),mp.Arguments=mp.Array;var rw={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},$7=rw,P9=d,j9=Xl,Nu=gl,la=gg,V7=Lo,k6=V7("toStringTag");for(var nw in $7){var P6=P9[nw],r2=P6&&P6.prototype;r2&&j9(r2)!==k6&&Nu(r2,k6,nw),la[nw]=la.Array}var Lu=p6,j6=Lu,C9=Lo,T9=ga.f,q7=C9("metadata"),C6=Function.prototype;C6[q7]===void 0&&T9(C6,q7,{value:null});var ow=Jo;ow("asyncDispose");var U7=Jo;U7("dispose");var A9=Jo;A9("metadata");var G7=j6,T6=G7,M9=Oi,A6=fe,n2=M9("Symbol"),iw=n2.keyFor,M6=A6(n2.prototype.valueOf),aw=n2.isRegisteredSymbol||function(A){try{return iw(M6(A))!==void 0}catch{return!1}},R9=Gr,J7=aw;R9({target:"Symbol",stat:!0},{isRegisteredSymbol:J7});for(var X7=Yf,K7=Oi,Y7=fe,sw=xi,Q7=Lo,o2=K7("Symbol"),Z7=o2.isWellKnownSymbol,R6=K7("Object","getOwnPropertyNames"),i2=Y7(o2.prototype.valueOf),lw=X7("wks"),uw=0,ti=R6(o2),e8=ti.length;uw=ie?I?"":void 0:(ve=L6(W,J),ve<55296||ve>56319||J+1===ie||(je=L6(W,J+1))<56320||je>57343?I?pw(W,J):ve:I?F6(W,J,J+2):(ve-55296<<10)+(je-56320)+65536)}},F9={codeAt:B6(!1),charAt:B6(!0)},i8=F9.charAt,dw=Zl,hw=cp,a8=ew,s2=e1,mw="String Iterator",W6=hw.set,B9=hw.getterFor(mw);a8(String,"String",function(I){W6(this,{type:mw,string:dw(I),index:0})},function(){var A=B9(this),B=A.string,W=A.index,J;return W>=B.length?s2(void 0,!0):(J=i8(B,W),A.index+=J.length,s2(J,!1))});var l2=Qr,H6=l2.f("iterator"),$6=H6,vw=$6,gw=vw,V6=gw,W9=V6,u2=W9,Og=u2,s8=r(Og);function r1(I){"@babel/helpers - typeof";return r1=typeof pf=="function"&&typeof s8=="symbol"?function(A){return typeof A}:function(A){return A&&typeof pf=="function"&&A.constructor===pf&&A!==pf.prototype?"symbol":typeof A},r1(I)}var yw=Qr,n1=yw.f("toPrimitive"),vp=n1,Ei=vp,df=Ei,su=df,H9=su,l8=H9,$9=l8,q6=r($9);function U6(I,A){if(r1(I)!=="object"||I===null)return I;var B=I[q6];if(B!==void 0){var W=B.call(I,A||"default");if(r1(W)!=="object")return W;throw new TypeError("@@toPrimitive must return a primitive value.")}return(A==="string"?String:Number)(I)}function bw(I){var A=U6(I,"string");return r1(A)==="symbol"?A:String(A)}function ri(I,A){for(var B=0;B=0:je>xe;xe+=Re)xe in ve&&(J=B(J,ve[xe],xe,ie));return J}},m8={left:h8(!1),right:h8(!0)},eP=y,d2=function(I,A){var B=[][I];return!!B&&eP(function(){B.call(null,A||function(){return 1},1)})},Q9=d,Z9=ae,h2=Z9(Q9.process)==="process",_g=Gr,eI=m8.left,e0=d2,yp=vs,v8=h2,X6=!v8&&yp>79&&yp<83,tI=X6||!e0("reduce");_g({target:"Array",proto:!0,forced:tI},{reduce:function(A){var B=arguments.length;return eI(this,A,B,B>1?arguments[1]:void 0)}});var g8=xs,y8=g8("Array","reduce"),rI=ko,K6=y8,Sg=Array.prototype,Y6=function(I){var A=I.reduce;return I===Sg||rI(Sg,I)&&A===Sg.reduce?K6:A},nI=Y6,xw=nI,Q6=xw,Z6=r(Q6),oI=Gr,tP=Ba.filter,iI=Fa,aI=iI("filter");oI({target:"Array",proto:!0,forced:!aI},{filter:function(A){return tP(this,A,arguments.length>1?arguments[1]:void 0)}});var sI=xs,ex=sI("Array","filter"),lI=ko,Rd=ex,tx=Array.prototype,_w=function(I){var A=I.filter;return I===tx||lI(tx,I)&&A===tx.filter?Rd:A},rP=_w,uI=rP,cI=uI,Ss=r(cI),fI=Gr,pI=Ba.map,b8=Fa,w8=b8("map");fI({target:"Array",proto:!0,forced:!w8},{map:function(A){return pI(this,A,arguments.length>1?arguments[1]:void 0)}});var O8=xs,x8=O8("Array","map"),dI=ko,rx=x8,t0=Array.prototype,_8=function(I){var A=I.map;return I===t0||dI(t0,I)&&A===t0.map?rx:A},hI=_8,mI=hI,nx=mI,xa=r(nx),S8=Po,r0=yl,ox=Mh,ix=Uc,ax=function(I,A,B,W,J,ie,ve,je){for(var xe=J,Re=0,We=ve?ix(ve,je):!1,ut,rt;Re0&&S8(ut)?(rt=r0(ut),xe=ax(I,A,ut,rt,xe,ie-1)-1):(ox(xe+1),I[xe]=ut),xe++),Re++;return xe},vI=ax,m2=Gr,gI=vI,Sw=Vs,E8=Mi,sx=yl,Ew=Ql;m2({target:"Array",proto:!0},{flatMap:function(A){var B=E8(this),W=sx(B),J;return Sw(A),J=Ew(B,0),J.length=gI(J,B,B,W,0,1,A,arguments.length>1?arguments[1]:void 0),J}});var Iw=xs,ua=Iw("Array","flatMap"),lx=ko,yI=ua,ux=Array.prototype,cx=function(I){var A=I.flatMap;return I===ux||lx(ux,I)&&A===ux.flatMap?yI:A},fx=cx,I8=fx,bI=I8,px=r(bI);function n0(I){return new nP(I)}var k8=function(){function I(A,B,W){var J,ie,ve;t(this,I),Fu(this,"_listeners",{add:Md(J=this._add).call(J,this),remove:Md(ie=this._remove).call(ie,this),update:Md(ve=this._update).call(ve,this)}),this._source=A,this._transformers=B,this._target=W}return Ha(I,[{key:"all",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:"start",value:function(){return this._source.on("add",this._listeners.add),this._source.on("remove",this._listeners.remove),this._source.on("update",this._listeners.update),this}},{key:"stop",value:function(){return this._source.off("add",this._listeners.add),this._source.off("remove",this._listeners.remove),this._source.off("update",this._listeners.update),this}},{key:"_transformItems",value:function(B){var W;return Z6(W=this._transformers).call(W,function(J,ie){return ie(J)},B)}},{key:"_add",value:function(B,W){W!=null&&this._target.add(this._transformItems(this._source.get(W.items)))}},{key:"_update",value:function(B,W){W!=null&&this._target.update(this._transformItems(this._source.get(W.items)))}},{key:"_remove",value:function(B,W){W!=null&&this._target.remove(this._transformItems(W.oldData))}}]),I}(),nP=function(){function I(A){t(this,I),Fu(this,"_transformers",[]),this._source=A}return Ha(I,[{key:"filter",value:function(B){return this._transformers.push(function(W){return Ss(W).call(W,B)}),this}},{key:"map",value:function(B){return this._transformers.push(function(W){return xa(W).call(W,B)}),this}},{key:"flatMap",value:function(B){return this._transformers.push(function(W){return px(W).call(W,B)}),this}},{key:"to",value:function(B){return new k8(this._source,this._transformers,B)}}]),I}(),P8=sr,j8=Pr,wI=Jf,kw=function(I,A,B){var W,J;j8(I);try{if(W=wI(I,"return"),!W){if(A==="throw")throw B;return B}W=P8(W,I)}catch(ie){J=!0,W=ie}if(A==="throw")throw B;if(J)throw W;return j8(W),B},v2=Pr,dx=kw,Pw=function(I,A,B,W){try{return W?A(v2(B)[0],B[1]):A(B)}catch(J){dx(I,"throw",J)}},C8=Lo,T8=gg,hx=C8("iterator"),hf=Array.prototype,i1=function(I){return I!==void 0&&(T8.Array===I||hf[hx]===I)},A8=Xl,jw=Jf,Bu=Sn,Wu=gg,Cw=Lo,o0=Cw("iterator"),bp=function(I){if(!Bu(I))return jw(I,o0)||jw(I,"@@iterator")||Wu[A8(I)]},i0=sr,OI=Vs,Kn=Pr,Eg=No,Tw=bp,wp=TypeError,Ig=function(I,A){var B=arguments.length<2?Tw(I):A;if(OI(B))return Kn(i0(B,I));throw new wp(Eg(I)+" is not iterable")},M8=Uc,R8=sr,kg=Mi,g2=Pw,a1=i1,y2=Yl,Aw=yl,b2=Rh,D8=Ig,oP=bp,z8=Array,w2=function(A){var B=kg(A),W=y2(this),J=arguments.length,ie=J>1?arguments[1]:void 0,ve=ie!==void 0;ve&&(ie=M8(ie,J>2?arguments[2]:void 0));var je=oP(B),xe=0,Re,We,ut,rt,bt,gr;if(je&&!(this===z8&&a1(je)))for(rt=D8(B,je),bt=rt.next,We=W?new this:[];!(ut=R8(bt,rt)).done;xe++)gr=ve?g2(rt,ie,[ut.value,xe],!0):ut.value,b2(We,xe,gr);else for(Re=Aw(B),We=W?new this(Re):z8(Re);Re>xe;xe++)gr=ve?ie(B[xe],xe):B[xe],b2(We,xe,gr);return We.length=xe,We},Mw=Lo,N8=Mw("iterator"),Es=!1;try{var _a=0,rl={next:function(){return{done:!!_a++}},return:function(){Es=!0}};rl[N8]=function(){return this},Array.from(rl,function(){throw 2})}catch{}var Pg=function(I,A){try{if(!A&&!Es)return!1}catch{return!1}var B=!1;try{var W={};W[N8]=function(){return{next:function(){return{done:B=!0}}}},I(W)}catch{}return B},jg=Gr,Cg=w2,Tg=Pg,El=!Tg(function(I){Array.from(I)});jg({target:"Array",stat:!0,forced:El},{from:Cg});var mf=rn,a0=mf.Array.from,L8=a0,mx=L8,Ag=mx,lu=r(Ag),Rw=bp,s1=Rw,Dw=s1,vx=Dw,l1=vx,Hu=l1,Il=Hu,u1=Il,$u=u1,Op=r($u),F8=$u,zw=r(F8),xp=Gr,ls=Po;xp({target:"Array",stat:!0},{isArray:ls});var c1=rn,f1=c1.Array.isArray,p1=f1,oo=p1,B8=oo,W8=B8,d1=W8,Dd=d1,Sa=Dd,_p=r(Sa);function Mg(I){if(_p(I))return I}var O2=_t,gx=Po,yx=TypeError,xc=Object.getOwnPropertyDescriptor,x2=O2&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(I){return I instanceof TypeError}}(),bx=x2?function(I,A){if(gx(I)&&!xc(I,"length").writable)throw new yx("Cannot set read only .length");return I.length=A}:function(I,A){return I.length=A},Is=Gr,Zi=Mi,Ea=yl,_2=bx,Vu=Mh,qu=y,Rg=qu(function(){return[].push.call({length:4294967296},1)!==4294967297}),vf=function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(I){return I instanceof TypeError}},_c=Rg||!vf();Is({target:"Array",proto:!0,arity:1,forced:_c},{push:function(A){var B=Zi(this),W=Ea(B),J=arguments.length;Vu(W+J);for(var ie=0;ieI.length)&&(A=I.length);for(var B=0,W=new Array(A);B=0;return(He?oe?"+":"":"-")+Math.pow(10,Math.max(0,Ee)).toString().substr(1)+ce}var _t=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Nt=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,At={},ir={};function Pt(j,$,oe,ce){var Ee=ce;typeof ce=="string"&&(Ee=function(){return this[ce]()}),j&&(ir[j]=Ee),$&&(ir[$[0]]=function(){return wt(Ee.apply(this,arguments),$[1],$[2])}),oe&&(ir[oe]=function(){return this.localeData().ordinal(Ee.apply(this,arguments),j)})}function Sr(j){return j.match(/\[[\s\S]/)?j.replace(/^\[|\]$/g,""):j.replace(/\\/g,"")}function Nr(j){var $=j.match(_t),oe,ce;for(oe=0,ce=$.length;oe=0&&Nt.test(j);)j=j.replace(Nt,ce),Nt.lastIndex=0,oe-=1;return j}var qn={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function An(j){var $=this._longDateFormat[j],oe=this._longDateFormat[j.toUpperCase()];return $||!oe?$:(this._longDateFormat[j]=oe.match(_t).map(function(ce){return ce==="MMMM"||ce==="MM"||ce==="DD"||ce==="dddd"?ce.slice(1):ce}).join(""),this._longDateFormat[j])}var Oo="Invalid date";function yn(){return this._invalidDate}var Vr="%d",eo=/\d{1,2}/;function Sn(j){return this._ordinal.replace("%d",j)}var Ti={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Mo(j,$,oe,ce){var Ee=this._relativeTime[oe];return Je(Ee)?Ee(j,$,oe,ce):Ee.replace(/%d/i,j)}function xo(j,$){var oe=this._relativeTime[j>0?"future":"past"];return Je(oe)?oe($):oe.replace(/%s/i,$)}var Qa={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function Dn(j){return typeof j=="string"?Qa[j]||Qa[j.toLowerCase()]:void 0}function mr(j){var $={},oe,ce;for(ce in j)i(j,ce)&&(oe=Dn(ce),oe&&($[oe]=j[ce]));return $}var Un={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function Za(j){var $=[],oe;for(oe in j)i(j,oe)&&$.push({unit:oe,priority:Un[oe]});return $.sort(function(ce,Ee){return ce.priority-Ee.priority}),$}var Ai=/\d/,mn=/\d\d/,rn=/\d{3}/,Mn=/\d{4}/,go=/[+-]?\d{6}/,cn=/\d\d?/,ms=/\d\d\d\d?/,Oi=/\d\d\d\d\d\d?/,cc=/\d{1,3}/,ko=/\d{1,4}/,Ws=/[+-]?\d{1,6}/,Hs=/\d+/,es=/[+-]?\d+/,rb=/Z|[+-]\d\d:?\d\d/gi,am=/Z|[+-]\d\d(?::?\d\d)?/gi,Wc=/[+-]?\d+(\.\d{1,3})?/,ql=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,Na=/^[1-9]\d?/,fc=/^([1-9]\d|\d)/,vs;vs={};function vr(j,$,oe){vs[j]=Je($)?$:function(ce,Ee){return ce&&oe?oe:$}}function ia(j,$){return i(vs,j)?vs[j]($._strict,$._locale):new RegExp(Uo(j))}function Uo(j){return Vi(j.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function($,oe,ce,Ee,He){return oe||ce||Ee||He}))}function Vi(j){return j.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function li(j){return j<0?Math.ceil(j)||0:Math.floor(j)}function Gn(j){var $=+j,oe=0;return $!==0&&isFinite($)&&(oe=li($)),oe}var nd={};function Xn(j,$){var oe,ce=$,Ee;for(typeof j=="string"&&(j=[j]),_($)&&(ce=function(He,xt){xt[$]=Gn(He)}),Ee=j.length,oe=0;oe68?1900:2e3)};var Jf=qs("FullYear",!0);function xu(){return vh(this.year())}function qs(j,$){return function(oe){return oe!=null?(ts(this,j,oe),t.updateOffset(this,$),this):Xf(this,j)}}function Xf(j,$){if(!j.isValid())return NaN;var oe=j._d,ce=j._isUTC;switch($){case"Milliseconds":return ce?oe.getUTCMilliseconds():oe.getMilliseconds();case"Seconds":return ce?oe.getUTCSeconds():oe.getSeconds();case"Minutes":return ce?oe.getUTCMinutes():oe.getMinutes();case"Hours":return ce?oe.getUTCHours():oe.getHours();case"Date":return ce?oe.getUTCDate():oe.getDate();case"Day":return ce?oe.getUTCDay():oe.getDay();case"Month":return ce?oe.getUTCMonth():oe.getMonth();case"FullYear":return ce?oe.getUTCFullYear():oe.getFullYear();default:return NaN}}function ts(j,$,oe){var ce,Ee,He,xt,Kt;if(!(!j.isValid()||isNaN(oe))){switch(ce=j._d,Ee=j._isUTC,$){case"Milliseconds":return void(Ee?ce.setUTCMilliseconds(oe):ce.setMilliseconds(oe));case"Seconds":return void(Ee?ce.setUTCSeconds(oe):ce.setSeconds(oe));case"Minutes":return void(Ee?ce.setUTCMinutes(oe):ce.setMinutes(oe));case"Hours":return void(Ee?ce.setUTCHours(oe):ce.setHours(oe));case"Date":return void(Ee?ce.setUTCDate(oe):ce.setDate(oe));case"FullYear":break;default:return}He=oe,xt=j.month(),Kt=j.date(),Kt=Kt===29&&xt===1&&!vh(He)?28:Kt,Ee?ce.setUTCFullYear(He,xt,Kt):ce.setFullYear(He,xt,Kt)}}function gs(j){return j=Dn(j),Je(this[j])?this[j]():this}function nb(j,$){if(typeof j=="object"){j=mr(j);var oe=Za(j),ce,Ee=oe.length;for(ce=0;ce=0?(Kt=new Date(j+400,$,oe,ce,Ee,He,xt),isFinite(Kt.getFullYear())&&Kt.setFullYear(j)):Kt=new Date(j,$,oe,ce,Ee,He,xt),Kt}function Hc(j){var $,oe;return j<100&&j>=0?(oe=Array.prototype.slice.call(arguments),oe[0]=j+400,$=new Date(Date.UTC.apply(null,oe)),isFinite($.getUTCFullYear())&&$.setUTCFullYear(j)):$=new Date(Date.UTC.apply(null,arguments)),$}function bv(j,$,oe){var ce=7+$-oe,Ee=(7+Hc(j,0,ce).getUTCDay()-$)%7;return-Ee+ce-1}function ab(j,$,oe,ce,Ee){var He=(7+oe-ce)%7,xt=bv(j,ce,Ee),Kt=1+7*($-1)+He+xt,Qr,Fn;return Kt<=0?(Qr=j-1,Fn=pc(Qr)+Kt):Kt>pc(j)?(Qr=j+1,Fn=Kt-pc(j)):(Qr=j,Fn=Kt),{year:Qr,dayOfYear:Fn}}function $c(j,$,oe){var ce=bv(j.year(),$,oe),Ee=Math.floor((j.dayOfYear()-ce-1)/7)+1,He,xt;return Ee<1?(xt=j.year()-1,He=Ee+_u(xt,$,oe)):Ee>_u(j.year(),$,oe)?(He=Ee-_u(j.year(),$,oe),xt=j.year()+1):(xt=j.year(),He=Ee),{week:He,year:xt}}function _u(j,$,oe){var ce=bv(j,$,oe),Ee=bv(j+1,$,oe);return(pc(j)-ce+Ee)/7}Pt("w",["ww",2],"wo","week"),Pt("W",["WW",2],"Wo","isoWeek"),vr("w",cn,Na),vr("ww",cn,mn),vr("W",cn,Na),vr("WW",cn,mn),va(["w","ww","W","WW"],function(j,$,oe,ce){$[ce.substr(0,1)]=Gn(j)});function gh(j){return $c(j,this._week.dow,this._week.doy).week}var Vc={dow:0,doy:6};function yh(){return this._week.dow}function lm(){return this._week.doy}function Su(j){var $=this.localeData().week(this);return j==null?$:this.add((j-$)*7,"d")}function ml(j){var $=$c(this,1,4).week;return j==null?$:this.add((j-$)*7,"d")}Pt("d",0,"do","day"),Pt("dd",0,0,function(j){return this.localeData().weekdaysMin(this,j)}),Pt("ddd",0,0,function(j){return this.localeData().weekdaysShort(this,j)}),Pt("dddd",0,0,function(j){return this.localeData().weekdays(this,j)}),Pt("e",0,0,"weekday"),Pt("E",0,0,"isoWeekday"),vr("d",cn),vr("e",cn),vr("E",cn),vr("dd",function(j,$){return $.weekdaysMinRegex(j)}),vr("ddd",function(j,$){return $.weekdaysShortRegex(j)}),vr("dddd",function(j,$){return $.weekdaysRegex(j)}),va(["dd","ddd","dddd"],function(j,$,oe,ce){var Ee=oe._locale.weekdaysParse(j,ce,oe._strict);Ee!=null?$.d=Ee:q(oe).invalidWeekday=j}),va(["d","e","E"],function(j,$,oe,ce){$[ce]=Gn(j)});function ad(j,$){return typeof j!="string"?j:isNaN(j)?(j=$.weekdaysParse(j),typeof j=="number"?j:null):parseInt(j,10)}function um(j,$){return typeof j=="string"?$.weekdaysParse(j)%7||7:isNaN(j)?null:j}function Lo(j,$){return j.slice($,7).concat(j.slice(0,$))}var sb="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),bh="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),wv="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ov=ql,j4=ql,ys=ql;function wh(j,$){var oe=r(this._weekdays)?this._weekdays:this._weekdays[j&&j!==!0&&this._weekdays.isFormat.test($)?"format":"standalone"];return j===!0?Lo(oe,this._week.dow):j?oe[j.day()]:oe}function xv(j){return j===!0?Lo(this._weekdaysShort,this._week.dow):j?this._weekdaysShort[j.day()]:this._weekdaysShort}function _v(j){return j===!0?Lo(this._weekdaysMin,this._week.dow):j?this._weekdaysMin[j.day()]:this._weekdaysMin}function Oh(j,$,oe){var ce,Ee,He,xt=j.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],ce=0;ce<7;++ce)He=L([2e3,1]).day(ce),this._minWeekdaysParse[ce]=this.weekdaysMin(He,"").toLocaleLowerCase(),this._shortWeekdaysParse[ce]=this.weekdaysShort(He,"").toLocaleLowerCase(),this._weekdaysParse[ce]=this.weekdays(He,"").toLocaleLowerCase();return oe?$==="dddd"?(Ee=En.call(this._weekdaysParse,xt),Ee!==-1?Ee:null):$==="ddd"?(Ee=En.call(this._shortWeekdaysParse,xt),Ee!==-1?Ee:null):(Ee=En.call(this._minWeekdaysParse,xt),Ee!==-1?Ee:null):$==="dddd"?(Ee=En.call(this._weekdaysParse,xt),Ee!==-1||(Ee=En.call(this._shortWeekdaysParse,xt),Ee!==-1)?Ee:(Ee=En.call(this._minWeekdaysParse,xt),Ee!==-1?Ee:null)):$==="ddd"?(Ee=En.call(this._shortWeekdaysParse,xt),Ee!==-1||(Ee=En.call(this._weekdaysParse,xt),Ee!==-1)?Ee:(Ee=En.call(this._minWeekdaysParse,xt),Ee!==-1?Ee:null)):(Ee=En.call(this._minWeekdaysParse,xt),Ee!==-1||(Ee=En.call(this._weekdaysParse,xt),Ee!==-1)?Ee:(Ee=En.call(this._shortWeekdaysParse,xt),Ee!==-1?Ee:null))}function xh(j,$,oe){var ce,Ee,He;if(this._weekdaysParseExact)return Oh.call(this,j,$,oe);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),ce=0;ce<7;ce++){if(Ee=L([2e3,1]).day(ce),oe&&!this._fullWeekdaysParse[ce]&&(this._fullWeekdaysParse[ce]=new RegExp("^"+this.weekdays(Ee,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[ce]=new RegExp("^"+this.weekdaysShort(Ee,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[ce]=new RegExp("^"+this.weekdaysMin(Ee,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[ce]||(He="^"+this.weekdays(Ee,"")+"|^"+this.weekdaysShort(Ee,"")+"|^"+this.weekdaysMin(Ee,""),this._weekdaysParse[ce]=new RegExp(He.replace(".",""),"i")),oe&&$==="dddd"&&this._fullWeekdaysParse[ce].test(j))return ce;if(oe&&$==="ddd"&&this._shortWeekdaysParse[ce].test(j))return ce;if(oe&&$==="dd"&&this._minWeekdaysParse[ce].test(j))return ce;if(!oe&&this._weekdaysParse[ce].test(j))return ce}}function qc(j){if(!this.isValid())return j!=null?this:NaN;var $=Xf(this,"Day");return j!=null?(j=ad(j,this.localeData()),this.add(j-$,"d")):$}function sd(j){if(!this.isValid())return j!=null?this:NaN;var $=(this.day()+7-this.localeData()._week.dow)%7;return j==null?$:this.add(j-$,"d")}function Eu(j){if(!this.isValid())return j!=null?this:NaN;if(j!=null){var $=um(j,this.localeData());return this.day(this.day()%7?$:$-7)}else return this.day()||7}function Sv(j){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||fm.call(this),j?this._weekdaysStrictRegex:this._weekdaysRegex):(i(this,"_weekdaysRegex")||(this._weekdaysRegex=Ov),this._weekdaysStrictRegex&&j?this._weekdaysStrictRegex:this._weekdaysRegex)}function t5(j){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||fm.call(this),j?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(i(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=j4),this._weekdaysShortStrictRegex&&j?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function cm(j){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||fm.call(this),j?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(i(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=ys),this._weekdaysMinStrictRegex&&j?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function fm(){function j(Ri,nu){return nu.length-Ri.length}var $=[],oe=[],ce=[],Ee=[],He,xt,Kt,Qr,Fn;for(He=0;He<7;He++)xt=L([2e3,1]).day(He),Kt=Vi(this.weekdaysMin(xt,"")),Qr=Vi(this.weekdaysShort(xt,"")),Fn=Vi(this.weekdays(xt,"")),$.push(Kt),oe.push(Qr),ce.push(Fn),Ee.push(Kt),Ee.push(Qr),Ee.push(Fn);$.sort(j),oe.sort(j),ce.sort(j),Ee.sort(j),this._weekdaysRegex=new RegExp("^("+Ee.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+ce.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+oe.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+$.join("|")+")","i")}function _h(){return this.hours()%12||12}function Sh(){return this.hours()||24}Pt("H",["HH",2],0,"hour"),Pt("h",["hh",2],0,_h),Pt("k",["kk",2],0,Sh),Pt("hmm",0,0,function(){return""+_h.apply(this)+wt(this.minutes(),2)}),Pt("hmmss",0,0,function(){return""+_h.apply(this)+wt(this.minutes(),2)+wt(this.seconds(),2)}),Pt("Hmm",0,0,function(){return""+this.hours()+wt(this.minutes(),2)}),Pt("Hmmss",0,0,function(){return""+this.hours()+wt(this.minutes(),2)+wt(this.seconds(),2)});function ci(j,$){Pt(j,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),$)})}ci("a",!0),ci("A",!1);function La(j,$){return $._meridiemParse}vr("a",La),vr("A",La),vr("H",cn,fc),vr("h",cn,Na),vr("k",cn,Na),vr("HH",cn,mn),vr("hh",cn,mn),vr("kk",cn,mn),vr("hmm",ms),vr("hmmss",Oi),vr("Hmm",ms),vr("Hmmss",Oi),Xn(["H","HH"],No),Xn(["k","kk"],function(j,$,oe){var ce=Gn(j);$[No]=ce===24?0:ce}),Xn(["a","A"],function(j,$,oe){oe._isPm=oe._locale.isPM(j),oe._meridiem=j}),Xn(["h","hh"],function(j,$,oe){$[No]=Gn(j),q(oe).bigHour=!0}),Xn("hmm",function(j,$,oe){var ce=j.length-2;$[No]=Gn(j.substr(0,ce)),$[Ul]=Gn(j.substr(ce)),q(oe).bigHour=!0}),Xn("hmmss",function(j,$,oe){var ce=j.length-4,Ee=j.length-2;$[No]=Gn(j.substr(0,ce)),$[Ul]=Gn(j.substr(ce,2)),$[Ou]=Gn(j.substr(Ee)),q(oe).bigHour=!0}),Xn("Hmm",function(j,$,oe){var ce=j.length-2;$[No]=Gn(j.substr(0,ce)),$[Ul]=Gn(j.substr(ce))}),Xn("Hmmss",function(j,$,oe){var ce=j.length-4,Ee=j.length-2;$[No]=Gn(j.substr(0,ce)),$[Ul]=Gn(j.substr(ce,2)),$[Ou]=Gn(j.substr(Ee))});function lb(j){return(j+"").toLowerCase().charAt(0)==="p"}var r5=/[ap]\.?m?\.?/i,Ev=qs("Hours",!0);function Us(j,$,oe){return j>11?oe?"pm":"PM":oe?"am":"AM"}var Gs={calendar:yt,longDateFormat:qn,invalidDate:Oo,ordinal:Vr,dayOfMonthOrdinalParse:eo,relativeTime:Ti,months:Y3,monthsShort:ob,week:Vc,weekdays:sb,weekdaysMin:wv,weekdaysShort:bh,meridiemParse:r5},fo={},pm={},Iu;function Eh(j,$){var oe,ce=Math.min(j.length,$.length);for(oe=0;oe0;){if(Ee=ld(He.slice(0,oe).join("-")),Ee)return Ee;if(ce&&ce.length>=oe&&Eh(He,ce)>=oe-1)break;oe--}$++}return Iu}function Qf(j){return!!(j&&j.match("^[^/\\\\]*$"))}function ld(j){var $=null,oe;if(fo[j]===void 0&&typeof Lj<"u"&&Lj&&Lj.exports&&Qf(j))try{$=Iu._abbr,oe=d0e,oe("./locale/"+j),rs($)}catch{fo[j]=null}return fo[j]}function rs(j,$){var oe;return j&&(y($)?oe=vl(j):oe=to(j,$),oe?Iu=oe:typeof console<"u"&&console.warn&&console.warn("Locale "+j+" not found. Did you forget to load it?")),Iu._abbr}function to(j,$){if($!==null){var oe,ce=Gs;if($.abbr=j,fo[j]!=null)Ye("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),ce=fo[j]._config;else if($.parentLocale!=null)if(fo[$.parentLocale]!=null)ce=fo[$.parentLocale]._config;else if(oe=ld($.parentLocale),oe!=null)ce=oe._config;else return pm[$.parentLocale]||(pm[$.parentLocale]=[]),pm[$.parentLocale].push({name:j,config:$}),null;return fo[j]=new Ue(Ve(ce,$)),pm[j]&&pm[j].forEach(function(Ee){to(Ee.name,Ee.config)}),rs(j),fo[j]}else return delete fo[j],null}function ub(j,$){if($!=null){var oe,ce,Ee=Gs;fo[j]!=null&&fo[j].parentLocale!=null?fo[j].set(Ve(fo[j]._config,$)):(ce=ld(j),ce!=null&&(Ee=ce._config),$=Ve(Ee,$),ce==null&&($.abbr=j),oe=new Ue($),oe.parentLocale=fo[j],fo[j]=oe),rs(j)}else fo[j]!=null&&(fo[j].parentLocale!=null?(fo[j]=fo[j].parentLocale,j===rs()&&rs(j)):fo[j]!=null&&delete fo[j]);return fo[j]}function vl(j){var $;if(j&&j._locale&&j._locale._abbr&&(j=j._locale._abbr),!j)return Iu;if(!r(j)){if($=ld(j),$)return $;j=[j]}return kv(j)}function Zf(){return ht(fo)}function bs(j){var $,oe=j._a;return oe&&q(j).overflow===-2&&($=oe[xi]<0||oe[xi]>11?xi:oe[$s]<1||oe[$s]>yv(oe[qi],oe[xi])?$s:oe[No]<0||oe[No]>24||oe[No]===24&&(oe[Ul]!==0||oe[Ou]!==0||oe[Gf]!==0)?No:oe[Ul]<0||oe[Ul]>59?Ul:oe[Ou]<0||oe[Ou]>59?Ou:oe[Gf]<0||oe[Gf]>999?Gf:-1,q(j)._overflowDayOfYear&&($$s)&&($=$s),q(j)._overflowWeeks&&$===-1&&($=Vs),q(j)._overflowWeekday&&$===-1&&($=gv),q(j).overflow=$),j}var dm=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ih=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Uc=/Z|[+-]\d\d(?::?\d\d)?/,ga=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],hm=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],ep=/^\/?Date\((-?\d+)/i,tp=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,ud={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function rp(j){var $,oe,ce=j._i,Ee=dm.exec(ce)||Ih.exec(ce),He,xt,Kt,Qr,Fn=ga.length,Ri=hm.length;if(Ee){for(q(j).iso=!0,$=0,oe=Fn;$pc(xt)||j._dayOfYear===0)&&(q(j)._overflowDayOfYear=!0),oe=Hc(xt,0,j._dayOfYear),j._a[xi]=oe.getUTCMonth(),j._a[$s]=oe.getUTCDate()),$=0;$<3&&j._a[$]==null;++$)j._a[$]=ce[$]=Ee[$];for(;$<7;$++)j._a[$]=ce[$]=j._a[$]==null?$===2?1:0:j._a[$];j._a[No]===24&&j._a[Ul]===0&&j._a[Ou]===0&&j._a[Gf]===0&&(j._nextDay=!0,j._a[No]=0),j._d=(j._useUTC?Hc:e5).apply(null,ce),He=j._useUTC?j._d.getUTCDay():j._d.getDay(),j._tzm!=null&&j._d.setUTCMinutes(j._d.getUTCMinutes()-j._tzm),j._nextDay&&(j._a[No]=24),j._w&&typeof j._w.d<"u"&&j._w.d!==He&&(q(j).weekdayMismatch=!0)}}function kh(j){var $,oe,ce,Ee,He,xt,Kt,Qr,Fn;$=j._w,$.GG!=null||$.W!=null||$.E!=null?(He=1,xt=4,oe=Jc($.GG,j._a[qi],$c(ro(),1,4).year),ce=Jc($.W,1),Ee=Jc($.E,1),(Ee<1||Ee>7)&&(Qr=!0)):(He=j._locale._week.dow,xt=j._locale._week.doy,Fn=$c(ro(),He,xt),oe=Jc($.gg,j._a[qi],Fn.year),ce=Jc($.w,Fn.week),$.d!=null?(Ee=$.d,(Ee<0||Ee>6)&&(Qr=!0)):$.e!=null?(Ee=$.e+He,($.e<0||$.e>6)&&(Qr=!0)):Ee=He),ce<1||ce>_u(oe,He,xt)?q(j)._overflowWeeks=!0:Qr!=null?q(j)._overflowWeekday=!0:(Kt=ab(oe,ce,Ee,He,xt),j._a[qi]=Kt.year,j._dayOfYear=Kt.dayOfYear)}t.ISO_8601=function(){},t.RFC_2822=function(){};function mm(j){if(j._f===t.ISO_8601){rp(j);return}if(j._f===t.RFC_2822){Gc(j);return}j._a=[],q(j).empty=!0;var $=""+j._i,oe,ce,Ee,He,xt,Kt=$.length,Qr=0,Fn,Ri;for(Ee=xr(j._f,j._locale).match(_t)||[],Ri=Ee.length,oe=0;oe0&&q(j).unusedInput.push(xt),$=$.slice($.indexOf(ce)+ce.length),Qr+=ce.length),ir[He]?(ce?q(j).empty=!1:q(j).unusedTokens.push(He),K3(He,ce,j)):j._strict&&!ce&&q(j).unusedTokens.push(He);q(j).charsLeftOver=Kt-Qr,$.length>0&&q(j).unusedInput.push($),j._a[No]<=12&&q(j).bigHour===!0&&j._a[No]>0&&(q(j).bigHour=void 0),q(j).parsedDateParts=j._a.slice(0),q(j).meridiem=j._meridiem,j._a[No]=dc(j._locale,j._a[No],j._meridiem),Fn=q(j).era,Fn!==null&&(j._a[qi]=j._locale.erasConvertYear(Fn,j._a[qi])),Ln(j),bs(j)}function dc(j,$,oe){var ce;return oe==null?$:j.meridiemHour!=null?j.meridiemHour($,oe):(j.isPM!=null&&(ce=j.isPM(oe),ce&&$<12&&($+=12),!ce&&$===12&&($=0)),$)}function Gl(j){var $,oe,ce,Ee,He,xt,Kt=!1,Qr=j._f.length;if(Qr===0){q(j).invalidFormat=!0,j._d=new Date(NaN);return}for(Ee=0;Eethis?this:j:X()});function vm(j,$){var oe,ce;if($.length===1&&r($[0])&&($=$[0]),!$.length)return ro();for(oe=$[0],ce=1;ce<$.length;++ce)(!$[ce].isValid()||$[ce][j](oe))&&(oe=$[ce]);return oe}function jh(){var j=[].slice.call(arguments,0);return vm("isBefore",j)}function gm(){var j=[].slice.call(arguments,0);return vm("isAfter",j)}var hc=function(){return Date.now?Date.now():+new Date},ba=["year","quarter","month","week","day","hour","minute","second","millisecond"];function cd(j){var $,oe=!1,ce,Ee=ba.length;for($ in j)if(i(j,$)&&!(En.call(ba,$)!==-1&&(j[$]==null||!isNaN(j[$]))))return!1;for(ce=0;cethis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ch(){if(!y(this._isDSTShifted))return this._isDSTShifted;var j={},$;return me(j,this),j=gl(j),j._a?($=j._isUTC?L(j._a):ro(j._a),this._isDSTShifted=this.isValid()&&n5(j._a,$.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function mb(){return this.isValid()?!this._isUTC:!1}function Th(){return this.isValid()?this._isUTC:!1}function s5(){return this.isValid()?this._isUTC&&this._offset===0:!1}var Rv=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Ah=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Jl(j,$){var oe=j,ce=null,Ee,He,xt;return Xc(j)?oe={ms:j._milliseconds,d:j._days,M:j._months}:_(j)||!isNaN(+j)?(oe={},$?oe[$]=+j:oe.milliseconds=+j):(ce=Rv.exec(j))?(Ee=ce[1]==="-"?-1:1,oe={y:0,d:Gn(ce[$s])*Ee,h:Gn(ce[No])*Ee,m:Gn(ce[Ul])*Ee,s:Gn(ce[Ou])*Ee,ms:Gn(pb(ce[Gf]*1e3))*Ee}):(ce=Ah.exec(j))?(Ee=ce[1]==="-"?-1:1,oe={y:Pu(ce[2],Ee),M:Pu(ce[3],Ee),w:Pu(ce[4],Ee),d:Pu(ce[5],Ee),h:Pu(ce[6],Ee),m:Pu(ce[7],Ee),s:Pu(ce[8],Ee)}):oe==null?oe={}:typeof oe=="object"&&("from"in oe||"to"in oe)&&(xt=yl(ro(oe.from),ro(oe.to)),oe={},oe.ms=xt.milliseconds,oe.M=xt.months),He=new ku(oe),Xc(j)&&i(j,"_locale")&&(He._locale=j._locale),Xc(j)&&i(j,"_isValid")&&(He._isValid=j._isValid),He}Jl.fn=ku.prototype,Jl.invalid=fd;function Pu(j,$){var oe=j&&parseFloat(j.replace(",","."));return(isNaN(oe)?0:oe)*$}function Dv(j,$){var oe={};return oe.months=$.month()-j.month()+($.year()-j.year())*12,j.clone().add(oe.months,"M").isAfter($)&&--oe.months,oe.milliseconds=+$-+j.clone().add(oe.months,"M"),oe}function yl(j,$){var oe;return j.isValid()&&$.isValid()?($=Kc($,j),j.isBefore($)?oe=Dv(j,$):(oe=Dv($,j),oe.milliseconds=-oe.milliseconds,oe.months=-oe.months),oe):{milliseconds:0,months:0}}function zv(j,$){return function(oe,ce){var Ee,He;return ce!==null&&!isNaN(+ce)&&(Ye($,"moment()."+$+"(period, number) is deprecated. Please use moment()."+$+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),He=oe,oe=ce,ce=He),Ee=Jl(oe,ce),bm(this,Ee,j),this}}function bm(j,$,oe,ce){var Ee=$._milliseconds,He=pb($._days),xt=pb($._months);j.isValid()&&(ce=ce??!0,xt&&hl(j,Xf(j,"Month")+xt*oe),He&&ts(j,"Date",Xf(j,"Date")+He*oe),Ee&&j._d.setTime(j._d.valueOf()+Ee*oe),ce&&t.updateOffset(j,He||xt))}var Mh=zv(1,"add"),Nv=zv(-1,"subtract");function fi(j){return typeof j=="string"||j instanceof String}function l5(j){return ge(j)||k(j)||fi(j)||_(j)||np(j)||Rh(j)||j===null||j===void 0}function Rh(j){var $=o(j)&&!d(j),oe=!1,ce=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],Ee,He,xt=ce.length;for(Ee=0;Eeoe.valueOf():oe.valueOf()9999?ar(oe,$?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):Je(Date.prototype.toISOString)?$?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",ar(oe,"Z")):ar(oe,$?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function dd(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var j="moment",$="",oe,ce,Ee,He;return this.isLocal()||(j=this.utcOffset()===0?"moment.utc":"moment.parseZone",$="Z"),oe="["+j+'("]',ce=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",Ee="-MM-DD[T]HH:mm:ss.SSS",He=$+'[")]',this.format(oe+ce+Ee+He)}function _m(j){j||(j=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var $=ar(this,j);return this.localeData().postformat($)}function Lv(j,$){return this.isValid()&&(ge(j)&&j.isValid()||ro(j).isValid())?Jl({to:this,from:j}).locale(this.locale()).humanize(!$):this.localeData().invalidDate()}function hd(j){return this.from(ro(),j)}function Fv(j,$){return this.isValid()&&(ge(j)&&j.isValid()||ro(j).isValid())?Jl({from:this,to:j}).locale(this.locale()).humanize(!$):this.localeData().invalidDate()}function Sm(j){return this.to(ro(),j)}function Bv(j){var $;return j===void 0?this._locale._abbr:($=vl(j),$!=null&&(this._locale=$),this)}var u5=Pe("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(j){return j===void 0?this.localeData():this.locale(j)});function Em(){return this._locale}var Kl=1e3,Dh=60*Kl,Im=60*Dh,Xs=(365*400+97)*24*Im;function Qc(j,$){return(j%$+$)%$}function Gi(j,$,oe){return j<100&&j>=0?new Date(j+400,$,oe)-Xs:new Date(j,$,oe).valueOf()}function aa(j,$,oe){return j<100&&j>=0?Date.UTC(j+400,$,oe)-Xs:Date.UTC(j,$,oe)}function Zc(j){var $,oe;if(j=Dn(j),j===void 0||j==="millisecond"||!this.isValid())return this;switch(oe=this._isUTC?aa:Gi,j){case"year":$=oe(this.year(),0,1);break;case"quarter":$=oe(this.year(),this.month()-this.month()%3,1);break;case"month":$=oe(this.year(),this.month(),1);break;case"week":$=oe(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":$=oe(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":$=oe(this.year(),this.month(),this.date());break;case"hour":$=this._d.valueOf(),$-=Qc($+(this._isUTC?0:this.utcOffset()*Dh),Im);break;case"minute":$=this._d.valueOf(),$-=Qc($,Dh);break;case"second":$=this._d.valueOf(),$-=Qc($,Kl);break}return this._d.setTime($),t.updateOffset(this,!0),this}function Yl(j){var $,oe;if(j=Dn(j),j===void 0||j==="millisecond"||!this.isValid())return this;switch(oe=this._isUTC?aa:Gi,j){case"year":$=oe(this.year()+1,0,1)-1;break;case"quarter":$=oe(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":$=oe(this.year(),this.month()+1,1)-1;break;case"week":$=oe(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":$=oe(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":$=oe(this.year(),this.month(),this.date()+1)-1;break;case"hour":$=this._d.valueOf(),$+=Im-Qc($+(this._isUTC?0:this.utcOffset()*Dh),Im)-1;break;case"minute":$=this._d.valueOf(),$+=Dh-Qc($,Dh)-1;break;case"second":$=this._d.valueOf(),$+=Kl-Qc($,Kl)-1;break}return this._d.setTime($),t.updateOffset(this,!0),this}function ef(){return this._d.valueOf()-(this._offset||0)*6e4}function md(){return Math.floor(this.valueOf()/1e3)}function op(){return new Date(this.valueOf())}function Ob(){var j=this;return[j.year(),j.month(),j.date(),j.hour(),j.minute(),j.second(),j.millisecond()]}function c5(){var j=this;return{years:j.year(),months:j.month(),date:j.date(),hours:j.hours(),minutes:j.minutes(),seconds:j.seconds(),milliseconds:j.milliseconds()}}function Wv(){return this.isValid()?this.toISOString():null}function vd(){return U(this)}function xb(){return N({},q(this))}function Ql(){return q(this).overflow}function zh(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}Pt("N",0,0,"eraAbbr"),Pt("NN",0,0,"eraAbbr"),Pt("NNN",0,0,"eraAbbr"),Pt("NNNN",0,0,"eraName"),Pt("NNNNN",0,0,"eraNarrow"),Pt("y",["y",1],"yo","eraYear"),Pt("y",["yy",2],0,"eraYear"),Pt("y",["yyy",3],0,"eraYear"),Pt("y",["yyyy",4],0,"eraYear"),vr("N",Pm),vr("NN",Pm),vr("NNN",Pm),vr("NNNN",bl),vr("NNNNN",tf),Xn(["N","NN","NNN","NNNN","NNNNN"],function(j,$,oe,ce){var Ee=oe._locale.erasParse(j,ce,oe._strict);Ee?q(oe).era=Ee:q(oe).invalidEra=j}),vr("y",Hs),vr("yy",Hs),vr("yyy",Hs),vr("yyyy",Hs),vr("yo",ju),Xn(["y","yy","yyy","yyyy"],qi),Xn(["yo"],function(j,$,oe,ce){var Ee;oe._locale._eraYearOrdinalRegex&&(Ee=j.match(oe._locale._eraYearOrdinalRegex)),oe._locale.eraYearOrdinalParse?$[qi]=oe._locale.eraYearOrdinalParse(j,Ee):$[qi]=parseInt(j,10)});function _b(j,$){var oe,ce,Ee,He=this._eras||vl("en")._eras;for(oe=0,ce=He.length;oe=0)return He[ce]}function Sb(j,$){var oe=j.since<=j.until?1:-1;return $===void 0?t(j.since).year():t(j.since).year()+($-j.offset)*oe}function Fa(){var j,$,oe,ce=this.localeData().eras();for(j=0,$=ce.length;j<$;++j)if(oe=this.clone().startOf("day").valueOf(),ce[j].since<=oe&&oe<=ce[j].until||ce[j].until<=oe&&oe<=ce[j].since)return ce[j].name;return""}function Hv(){var j,$,oe,ce=this.localeData().eras();for(j=0,$=ce.length;j<$;++j)if(oe=this.clone().startOf("day").valueOf(),ce[j].since<=oe&&oe<=ce[j].until||ce[j].until<=oe&&oe<=ce[j].since)return ce[j].narrow;return""}function km(){var j,$,oe,ce=this.localeData().eras();for(j=0,$=ce.length;j<$;++j)if(oe=this.clone().startOf("day").valueOf(),ce[j].since<=oe&&oe<=ce[j].until||ce[j].until<=oe&&oe<=ce[j].since)return ce[j].abbr;return""}function $v(){var j,$,oe,ce,Ee=this.localeData().eras();for(j=0,$=Ee.length;j<$;++j)if(oe=Ee[j].since<=Ee[j].until?1:-1,ce=this.clone().startOf("day").valueOf(),Ee[j].since<=ce&&ce<=Ee[j].until||Ee[j].until<=ce&&ce<=Ee[j].since)return(this.year()-t(Ee[j].since).year())*oe+Ee[j].offset;return this.year()}function gd(j){return i(this,"_erasNameRegex")||mc.call(this),j?this._erasNameRegex:this._erasRegex}function Vv(j){return i(this,"_erasAbbrRegex")||mc.call(this),j?this._erasAbbrRegex:this._erasRegex}function qv(j){return i(this,"_erasNarrowRegex")||mc.call(this),j?this._erasNarrowRegex:this._erasRegex}function Pm(j,$){return $.erasAbbrRegex(j)}function bl(j,$){return $.erasNameRegex(j)}function tf(j,$){return $.erasNarrowRegex(j)}function ju(j,$){return $._eraYearOrdinalRegex||Hs}function mc(){var j=[],$=[],oe=[],ce=[],Ee,He,xt,Kt,Qr,Fn=this.eras();for(Ee=0,He=Fn.length;EeHe&&($=He),Cm.call(this,j,$,oe,ce,Ee))}function Cm(j,$,oe,ce,Ee){var He=ab(j,$,oe,ce,Ee),xt=Hc(He.year,0,He.dayOfYear);return this.year(xt.getUTCFullYear()),this.month(xt.getUTCMonth()),this.date(xt.getUTCDate()),this}Pt("Q",0,"Qo","quarter"),vr("Q",Ai),Xn("Q",function(j,$){$[xi]=(Gn(j)-1)*3});function Tm(j){return j==null?Math.ceil((this.month()+1)/3):this.month((j-1)*3+this.month()%3)}Pt("D",["DD",2],"Do","date"),vr("D",cn,Na),vr("DD",cn,mn),vr("Do",function(j,$){return j?$._dayOfMonthOrdinalParse||$._ordinalParse:$._dayOfMonthOrdinalParseLenient}),Xn(["D","DD"],$s),Xn("Do",function(j,$){$[$s]=Gn(j.match(cn)[0])});var Lh=qs("Date",!0);Pt("DDD",["DDDD",3],"DDDo","dayOfYear"),vr("DDD",cc),vr("DDDD",rn),Xn(["DDD","DDDD"],function(j,$,oe){oe._dayOfYear=Gn(j)});function p5(j){var $=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return j==null?$:this.add(j-$,"d")}Pt("m",["mm",2],0,"minute"),vr("m",cn,fc),vr("mm",cn,mn),Xn(["m","mm"],Ul);var bd=qs("Minutes",!1);Pt("s",["ss",2],0,"second"),vr("s",cn,fc),vr("ss",cn,mn),Xn(["s","ss"],Ou);var d5=qs("Seconds",!1);Pt("S",0,0,function(){return~~(this.millisecond()/100)}),Pt(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Pt(0,["SSS",3],0,"millisecond"),Pt(0,["SSSS",4],0,function(){return this.millisecond()*10}),Pt(0,["SSSSS",5],0,function(){return this.millisecond()*100}),Pt(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),Pt(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),Pt(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),Pt(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),vr("S",cc,Ai),vr("SS",cc,mn),vr("SSS",cc,rn);var rf,Eb;for(rf="SSSS";rf.length<=9;rf+="S")vr(rf,Hs);function Ro(j,$){$[Gf]=Gn(("0."+j)*1e3)}for(rf="S";rf.length<=9;rf+="S")Xn(rf,Ro);Eb=qs("Milliseconds",!1),Pt("z",0,0,"zoneAbbr"),Pt("zz",0,0,"zoneName");function R4(){return this._isUTC?"UTC":""}function gc(){return this._isUTC?"Coordinated Universal Time":""}var Ht=ye.prototype;Ht.add=Mh,Ht.calendar=wm,Ht.clone=Vt,Ht.diff=M4,Ht.endOf=Yl,Ht.format=_m,Ht.from=Lv,Ht.fromNow=hd,Ht.to=Fv,Ht.toNow=Sm,Ht.get=gs,Ht.invalidAt=Ql,Ht.isAfter=gb,Ht.isBefore=Om,Ht.isBetween=yb,Ht.isSame=bb,Ht.isSameOrAfter=Fo,Ht.isSameOrBefore=A4,Ht.isValid=vd,Ht.lang=u5,Ht.locale=Bv,Ht.localeData=Em,Ht.max=T4,Ht.min=ws,Ht.parsingFlags=xb,Ht.set=nb,Ht.startOf=Zc,Ht.subtract=Nv,Ht.toArray=Ob,Ht.toObject=c5,Ht.toDate=op,Ht.toISOString=xm,Ht.inspect=dd,typeof Symbol<"u"&&Symbol.for!=null&&(Ht[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),Ht.toJSON=Wv,Ht.toString=wb,Ht.unix=md,Ht.valueOf=ef,Ht.creationData=zh,Ht.eraName=Fa,Ht.eraNarrow=Hv,Ht.eraAbbr=km,Ht.eraYear=$v,Ht.year=Jf,Ht.isLeapYear=xu,Ht.weekYear=jm,Ht.isoWeekYear=vc,Ht.quarter=Ht.quarters=Tm,Ht.month=Mi,Ht.daysInMonth=Go,Ht.week=Ht.weeks=Su,Ht.isoWeek=Ht.isoWeeks=ml,Ht.weeksInYear=yd,Ht.weeksInWeekYear=ap,Ht.isoWeeksInYear=Nh,Ht.isoWeeksInISOWeekYear=Uv,Ht.date=Lh,Ht.day=Ht.days=qc,Ht.weekday=sd,Ht.isoWeekday=Eu,Ht.dayOfYear=p5,Ht.hour=Ht.hours=Ev,Ht.minute=Ht.minutes=bd,Ht.second=Ht.seconds=d5,Ht.millisecond=Ht.milliseconds=Eb,Ht.utcOffset=Mv,Ht.utc=i5,Ht.local=hb,Ht.parseZone=ym,Ht.hasAlignedHourOffset=a5,Ht.isDST=Po,Ht.isLocal=mb,Ht.isUtcOffset=Th,Ht.isUtc=s5,Ht.isUTC=s5,Ht.zoneAbbr=R4,Ht.zoneName=gc,Ht.dates=Pe("dates accessor is deprecated. Use date instead.",Lh),Ht.months=Pe("months accessor is deprecated. Use month instead",Mi),Ht.years=Pe("years accessor is deprecated. Use year instead",Jf),Ht.zone=Pe("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",pd),Ht.isDSTShifted=Pe("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ch);function wd(j){return ro(j*1e3)}function sp(){return ro.apply(null,arguments).parseZone()}function Cu(j){return j}var no=Ue.prototype;no.calendar=Rt,no.longDateFormat=An,no.invalidDate=yn,no.ordinal=Sn,no.preparse=Cu,no.postformat=Cu,no.relativeTime=Mo,no.pastFuture=xo,no.set=Me,no.eras=_b,no.erasParse=f5,no.erasConvertYear=Sb,no.erasAbbrRegex=Vv,no.erasNameRegex=gd,no.erasNarrowRegex=qv,no.months=sm,no.monthsShort=Q3,no.monthsParse=id,no.monthsRegex=Z3,no.monthsShortRegex=ui,no.week=gh,no.firstDayOfYear=lm,no.firstDayOfWeek=yh,no.weekdays=wh,no.weekdaysMin=_v,no.weekdaysShort=xv,no.weekdaysParse=xh,no.weekdaysRegex=Sv,no.weekdaysShortRegex=t5,no.weekdaysMinRegex=cm,no.isPM=lb,no.meridiem=Us;function pi(j,$,oe,ce){var Ee=vl(),He=L().set(ce,$);return Ee[oe](He,j)}function Gv(j,$,oe){if(_(j)&&($=j,j=void 0),j=j||"",$!=null)return pi(j,$,oe,"month");var ce,Ee=[];for(ce=0;ce<12;ce++)Ee[ce]=pi(j,ce,oe,"month");return Ee}function nf(j,$,oe,ce){typeof j=="boolean"?(_($)&&(oe=$,$=void 0),$=$||""):($=j,oe=$,j=!1,_($)&&(oe=$,$=void 0),$=$||"");var Ee=vl(),He=j?Ee._week.dow:0,xt,Kt=[];if(oe!=null)return pi($,(oe+He)%7,ce,"day");for(xt=0;xt<7;xt++)Kt[xt]=pi($,(xt+He)%7,ce,"day");return Kt}function yc(j,$){return Gv(j,$,"months")}function D4(j,$){return Gv(j,$,"monthsShort")}function Od(j,$,oe){return nf(j,$,oe,"weekdays")}function of(j,$,oe){return nf(j,$,oe,"weekdaysShort")}function Jv(j,$,oe){return nf(j,$,oe,"weekdaysMin")}rs("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(j){var $=j%10,oe=Gn(j%100/10)===1?"th":$===1?"st":$===2?"nd":$===3?"rd":"th";return j+oe}}),t.lang=Pe("moment.lang is deprecated. Use moment.locale instead.",rs),t.langData=Pe("moment.langData is deprecated. Use moment.localeData instead.",vl);var Tu=Math.abs;function Am(){var j=this._data;return this._milliseconds=Tu(this._milliseconds),this._days=Tu(this._days),this._months=Tu(this._months),j.milliseconds=Tu(j.milliseconds),j.seconds=Tu(j.seconds),j.minutes=Tu(j.minutes),j.hours=Tu(j.hours),j.months=Tu(j.months),j.years=Tu(j.years),this}function h5(j,$,oe,ce){var Ee=Jl($,oe);return j._milliseconds+=ce*Ee._milliseconds,j._days+=ce*Ee._days,j._months+=ce*Ee._months,j._bubble()}function z4(j,$){return h5(this,j,$,1)}function di(j,$){return h5(this,j,$,-1)}function Fh(j){return j<0?Math.floor(j):Math.ceil(j)}function m5(){var j=this._milliseconds,$=this._days,oe=this._months,ce=this._data,Ee,He,xt,Kt,Qr;return j>=0&&$>=0&&oe>=0||j<=0&&$<=0&&oe<=0||(j+=Fh(Mm(oe)+$)*864e5,$=0,oe=0),ce.milliseconds=j%1e3,Ee=li(j/1e3),ce.seconds=Ee%60,He=li(Ee/60),ce.minutes=He%60,xt=li(He/60),ce.hours=xt%24,$+=li(xt/24),Qr=li(Ji($)),oe+=Qr,$-=Fh(Mm(Qr)),Kt=li(oe/12),oe%=12,ce.days=$,ce.months=oe,ce.years=Kt,this}function Ji(j){return j*4800/146097}function Mm(j){return j*146097/4800}function Au(j){if(!this.isValid())return NaN;var $,oe,ce=this._milliseconds;if(j=Dn(j),j==="month"||j==="quarter"||j==="year")switch($=this._days+ce/864e5,oe=this._months+Ji($),j){case"month":return oe;case"quarter":return oe/3;case"year":return oe/12}else switch($=this._days+Math.round(Mm(this._months)),j){case"week":return $/7+ce/6048e5;case"day":return $+ce/864e5;case"hour":return $*24+ce/36e5;case"minute":return $*1440+ce/6e4;case"second":return $*86400+ce/1e3;case"millisecond":return Math.floor($*864e5)+ce;default:throw new Error("Unknown unit "+j)}}function eu(j){return function(){return this.as(j)}}var v5=eu("ms"),Ib=eu("s"),N4=eu("m"),g5=eu("h"),Xv=eu("d"),kb=eu("w"),Rm=eu("M"),af=eu("Q"),Dm=eu("y"),zm=v5;function y5(){return Jl(this)}function sf(j){return j=Dn(j),this.isValid()?this[j+"s"]():NaN}function lp(j){return function(){return this.isValid()?this._data[j]:NaN}}var b5=lp("milliseconds"),Pb=lp("seconds"),xd=lp("minutes"),Nm=lp("hours"),tu=lp("days"),ru=lp("months"),bc=lp("years");function jb(){return li(this.days()/7)}var wa=Math.round,wl={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function up(j,$,oe,ce,Ee){return Ee.relativeTime($||1,!!oe,j,ce)}function L4(j,$,oe,ce){var Ee=Jl(j).abs(),He=wa(Ee.as("s")),xt=wa(Ee.as("m")),Kt=wa(Ee.as("h")),Qr=wa(Ee.as("d")),Fn=wa(Ee.as("M")),Ri=wa(Ee.as("w")),nu=wa(Ee.as("y")),Ru=He<=oe.ss&&["s",He]||He0,Ru[4]=ce,up.apply(null,Ru)}function Xi(j){return j===void 0?wa:typeof j=="function"?(wa=j,!0):!1}function F4(j,$){return wl[j]===void 0?!1:$===void 0?wl[j]:(wl[j]=$,j==="s"&&(wl.ss=$-1),!0)}function B4(j,$){if(!this.isValid())return this.localeData().invalidDate();var oe=!1,ce=wl,Ee,He;return typeof j=="object"&&($=j,j=!1),typeof j=="boolean"&&(oe=j),typeof $=="object"&&(ce=Object.assign({},wl,$),$.s!=null&&$.ss==null&&(ce.ss=$.s-1)),Ee=this.localeData(),He=L4(this,!oe,ce,Ee),oe&&(He=Ee.pastFuture(+this,He)),Ee.postformat(He)}var Bh=Math.abs;function _d(j){return(j>0)-(j<0)||+j}function Mu(){if(!this.isValid())return this.localeData().invalidDate();var j=Bh(this._milliseconds)/1e3,$=Bh(this._days),oe=Bh(this._months),ce,Ee,He,xt,Kt=this.asSeconds(),Qr,Fn,Ri,nu;return Kt?(ce=li(j/60),Ee=li(ce/60),j%=60,ce%=60,He=li(oe/12),oe%=12,xt=j?j.toFixed(3).replace(/\.?0+$/,""):"",Qr=Kt<0?"-":"",Fn=_d(this._months)!==_d(Kt)?"-":"",Ri=_d(this._days)!==_d(Kt)?"-":"",nu=_d(this._milliseconds)!==_d(Kt)?"-":"",Qr+"P"+(He?Fn+He+"Y":"")+(oe?Fn+oe+"M":"")+($?Ri+$+"D":"")+(Ee||ce||j?"T":"")+(Ee?nu+Ee+"H":"")+(ce?nu+ce+"M":"")+(j?nu+xt+"S":"")):"P0D"}var Rn=ku.prototype;Rn.isValid=Gr,Rn.abs=Am,Rn.add=z4,Rn.subtract=di,Rn.as=Au,Rn.asMilliseconds=v5,Rn.asSeconds=Ib,Rn.asMinutes=N4,Rn.asHours=g5,Rn.asDays=Xv,Rn.asWeeks=kb,Rn.asMonths=Rm,Rn.asQuarters=af,Rn.asYears=Dm,Rn.valueOf=zm,Rn._bubble=m5,Rn.clone=y5,Rn.get=sf,Rn.milliseconds=b5,Rn.seconds=Pb,Rn.minutes=xd,Rn.hours=Nm,Rn.days=tu,Rn.weeks=jb,Rn.months=ru,Rn.years=bc,Rn.humanize=B4,Rn.toISOString=Mu,Rn.toString=Mu,Rn.toJSON=Mu,Rn.locale=Bv,Rn.localeData=Em,Rn.toIsoString=Pe("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Mu),Rn.lang=u5,Pt("X",0,0,"unix"),Pt("x",0,0,"valueOf"),vr("x",es),vr("X",Wc),Xn("X",function(j,$,oe){oe._d=new Date(parseFloat(j)*1e3)}),Xn("x",function(j,$,oe){oe._d=new Date(Gn(j))});return t.version="2.30.1",n(ro),t.fn=Ht,t.min=jh,t.max=gm,t.now=hc,t.utc=L,t.unix=wd,t.months=yc,t.isDate=k,t.locale=rs,t.invalid=X,t.duration=Jl,t.isMoment=ge,t.weekdays=Od,t.parseZone=sp,t.localeData=vl,t.isDuration=Xc,t.monthsShort=D4,t.weekdaysMin=Jv,t.defineLocale=to,t.updateLocale=ub,t.locales=Zf,t.weekdaysShort=of,t.normalizeUnits=Dn,t.relativeTimeRounding=Xi,t.relativeTimeThreshold=F4,t.calendarFormat=vb,t.prototype=Ht,t.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},t})});var Swe=ot((Car,_we)=>{var Jqe=f4(),Xqe=A3(),Kqe=Uy(),Yqe="[object String]";function Qqe(e){return typeof e=="string"||!Xqe(e)&&Kqe(e)&&Jqe(e)==Yqe}_we.exports=Qqe});var Iwe=ot((Tar,Ewe)=>{var Zqe=f4(),eUe=Uy(),tUe="[object Boolean]";function rUe(e){return e===!0||e===!1||eUe(e)&&Zqe(e)==tUe}Ewe.exports=rUe});var Cte=ot((Aar,kwe)=>{var nUe=f4(),oUe=Uy(),iUe="[object Number]";function aUe(e){return typeof e=="number"||oUe(e)&&nUe(e)==iUe}kwe.exports=aUe});var jwe=ot((Mar,Pwe)=>{var sUe=Cte();function lUe(e){return sUe(e)&&e!=+e}Pwe.exports=lUe});var Wwe=ot((Bwe,fU)=>{(function(e,t){typeof define=="function"&&define.amd?define(t):typeof fU=="object"&&fU.exports?fU.exports=t():e.numeral=t()})(Bwe,function(){var e,t,n="2.0.6",r={},o={},i={currentLocale:"en",zeroFormat:null,nullFormat:null,defaultFormat:"0,0",scalePercentBy100:!0},d={currentLocale:i.currentLocale,zeroFormat:i.zeroFormat,nullFormat:i.nullFormat,defaultFormat:i.defaultFormat,scalePercentBy100:i.scalePercentBy100};function y(_,k){this._input=_,this._value=k}return e=function(_){var k,T,N,L;if(e.isNumeral(_))k=_.value();else if(_===0||typeof _>"u")k=0;else if(_===null||t.isNaN(_))k=null;else if(typeof _=="string")if(d.zeroFormat&&_===d.zeroFormat)k=0;else if(d.nullFormat&&_===d.nullFormat||!_.replace(/[^0-9]+/g,"").length)k=null;else{for(T in r)if(L=typeof r[T].regexps.unformat=="function"?r[T].regexps.unformat():r[T].regexps.unformat,L&&_.match(L)){N=r[T].unformat;break}N=N||e._.stringToNumber,k=N(_)}else k=Number(_)||null;return new y(_,k)},e.version=n,e.isNumeral=function(_){return _ instanceof y},e._=t={numberToFormat:function(_,k,T){var N=o[e.options.currentLocale],L=!1,Y=!1,q=0,K="",U=1e12,X=1e9,Z=1e6,fe=1e3,me="",ye=!1,ge,ae,Pe,Ne,Ye,Je,Me,Ve,Ue,ht;if(_=_||0,ae=Math.abs(_),e._.includes(k,"(")?(L=!0,k=k.replace(/[\(|\)]/g,"")):(e._.includes(k,"+")||e._.includes(k,"-"))&&(Ve=e._.includes(k,"+")?k.indexOf("+"):_<0?k.indexOf("-"):-1,k=k.replace(/[\+|\-]/g,"")),e._.includes(k,"a")&&(ge=k.match(/a(k|m|b|t)?/),ge=ge?ge[1]:!1,e._.includes(k," a")&&(K=" "),k=k.replace(new RegExp(K+"a[kmbt]?"),""),ae>=U&&!ge||ge==="t"?(K+=N.abbreviations.trillion,_=_/U):ae=X&&!ge||ge==="b"?(K+=N.abbreviations.billion,_=_/X):ae=Z&&!ge||ge==="m"?(K+=N.abbreviations.million,_=_/Z):(ae=fe&&!ge||ge==="k")&&(K+=N.abbreviations.thousand,_=_/fe)),e._.includes(k,"[.]")&&(Y=!0,k=k.replace("[.]",".")),Je=_.toString().split(".")[0],Me=k.split(".")[1],Ue=k.indexOf(","),q=(k.split(".")[0].split(",")[0].match(/0/g)||[]).length,Me?(e._.includes(Me,"[")?(Me=Me.replace("]",""),Me=Me.split("["),me=e._.toFixed(_,Me[0].length+Me[1].length,T,Me[1].length)):me=e._.toFixed(_,Me.length,T),Je=me.split(".")[0],e._.includes(me,".")?me=N.delimiters.decimal+me.split(".")[1]:me="",Y&&Number(me.slice(1))===0&&(me="")):Je=e._.toFixed(_,0,T),K&&!ge&&Number(Je)>=1e3&&K!==N.abbreviations.trillion)switch(Je=String(Number(Je)/1e3),K){case N.abbreviations.thousand:K=N.abbreviations.million;break;case N.abbreviations.million:K=N.abbreviations.billion;break;case N.abbreviations.billion:K=N.abbreviations.trillion;break}if(e._.includes(Je,"-")&&(Je=Je.slice(1),ye=!0),Je.length0;yt--)Je="0"+Je;return Ue>-1&&(Je=Je.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+N.delimiters.thousands)),k.indexOf(".")===0&&(Je=""),ht=Je+me+(K||""),L?ht=(L&&ye?"(":"")+ht+(L&&ye?")":""):Ve>=0?ht=Ve===0?(ye?"-":"+")+ht:ht+(ye?"-":"+"):ye&&(ht="-"+ht),ht},stringToNumber:function(_){var k=o[d.currentLocale],T=_,N={thousand:3,million:6,billion:9,trillion:12},L,Y,q,K;if(d.zeroFormat&&_===d.zeroFormat)Y=0;else if(d.nullFormat&&_===d.nullFormat||!_.replace(/[^0-9]+/g,"").length)Y=null;else{Y=1,k.delimiters.decimal!=="."&&(_=_.replace(/\./g,"").replace(k.delimiters.decimal,"."));for(L in N)if(K=new RegExp("[^a-zA-Z]"+k.abbreviations[L]+"(?:\\)|(\\"+k.currency.symbol+")?(?:\\))?)?$"),T.match(K)){Y*=Math.pow(10,N[L]);break}Y*=(_.split("-").length+Math.min(_.split("(").length-1,_.split(")").length-1))%2?1:-1,_=_.replace(/[^0-9\.]+/g,""),Y*=Number(_)}return Y},isNaN:function(_){return typeof _=="number"&&isNaN(_)},includes:function(_,k){return _.indexOf(k)!==-1},insert:function(_,k,T){return _.slice(0,T)+k+_.slice(T)},reduce:function(_,k){if(this===null)throw new TypeError("Array.prototype.reduce called on null or undefined");if(typeof k!="function")throw new TypeError(k+" is not a function");var T=Object(_),N=T.length>>>0,L=0,Y;if(arguments.length===3)Y=arguments[2];else{for(;L=N)throw new TypeError("Reduce of empty array with no initial value");Y=T[L++]}for(;LN?k:N},1)},toFixed:function(_,k,T,N){var L=_.toString().split("."),Y=k-(N||0),q,K,U,X;return L.length===2?q=Math.min(Math.max(L[1].length,Y),k):q=Y,U=Math.pow(10,q),X=(T(_+"e+"+q)/U).toFixed(q),N>k-q&&(K=new RegExp("\\.?0{1,"+(N-(k-q))+"}$"),X=X.replace(K,"")),X}},e.options=d,e.formats=r,e.locales=o,e.locale=function(_){return _&&(d.currentLocale=_.toLowerCase()),d.currentLocale},e.localeData=function(_){if(!_)return o[d.currentLocale];if(_=_.toLowerCase(),!o[_])throw new Error("Unknown locale : "+_);return o[_]},e.reset=function(){for(var _ in i)d[_]=i[_]},e.zeroFormat=function(_){d.zeroFormat=typeof _=="string"?_:null},e.nullFormat=function(_){d.nullFormat=typeof _=="string"?_:null},e.defaultFormat=function(_){d.defaultFormat=typeof _=="string"?_:"0.0"},e.register=function(_,k,T){if(k=k.toLowerCase(),this[_+"s"][k])throw new TypeError(k+" "+_+" already registered.");return this[_+"s"][k]=T,T},e.validate=function(_,k){var T,N,L,Y,q,K,U,X;if(typeof _!="string"&&(_+="",console.warn&&console.warn("Numeral.js: Value is not string. It has been co-erced to: ",_)),_=_.trim(),_.match(/^\d+$/))return!0;if(_==="")return!1;try{U=e.localeData(k)}catch{U=e.localeData(e.locale())}return L=U.currency.symbol,q=U.abbreviations,T=U.delimiters.decimal,U.delimiters.thousands==="."?N="\\.":N=U.delimiters.thousands,X=_.match(/^[^\d]+/),X!==null&&(_=_.substr(1),X[0]!==L)||(X=_.match(/[^\d]+$/),X!==null&&(_=_.slice(0,-1),X[0]!==q.thousand&&X[0]!==q.million&&X[0]!==q.billion&&X[0]!==q.trillion))?!1:(K=new RegExp(N+"{2}"),_.match(/[^\d.,]/g)?!1:(Y=_.split(T),Y.length>2?!1:Y.length<2?!!Y[0].match(/^\d+.*\d$/)&&!Y[0].match(K):Y[0].length===1?!!Y[0].match(/^\d+$/)&&!Y[0].match(K)&&!!Y[1].match(/^\d+$/):!!Y[0].match(/^\d+.*\d$/)&&!Y[0].match(K)&&!!Y[1].match(/^\d+$/)))},e.fn=y.prototype={clone:function(){return e(this)},format:function(_,k){var T=this._value,N=_||d.defaultFormat,L,Y,q;if(k=k||Math.round,T===0&&d.zeroFormat!==null)Y=d.zeroFormat;else if(T===null&&d.nullFormat!==null)Y=d.nullFormat;else{for(L in r)if(N.match(r[L].regexps.format)){q=r[L].format;break}q=q||e._.numberToFormat,Y=q(T,N,k)}return Y},value:function(){return this._value},input:function(){return this._input},set:function(_){return this._value=Number(_),this},add:function(_){var k=t.correctionFactor.call(null,this._value,_);function T(N,L,Y,q){return N+Math.round(k*L)}return this._value=t.reduce([this._value,_],T,0)/k,this},subtract:function(_){var k=t.correctionFactor.call(null,this._value,_);function T(N,L,Y,q){return N-Math.round(k*L)}return this._value=t.reduce([_],T,Math.round(this._value*k))/k,this},multiply:function(_){function k(T,N,L,Y){var q=t.correctionFactor(T,N);return Math.round(T*q)*Math.round(N*q)/Math.round(q*q)}return this._value=t.reduce([this._value,_],k,1),this},divide:function(_){function k(T,N,L,Y){var q=t.correctionFactor(T,N);return Math.round(T*q)/Math.round(N*q)}return this._value=t.reduce([this._value,_],k),this},difference:function(_){return Math.abs(e(this._value).subtract(_).value())}},e.register("locale","en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(_){var k=_%10;return~~(_%100/10)===1?"th":k===1?"st":k===2?"nd":k===3?"rd":"th"},currency:{symbol:"$"}}),function(){e.register("format","bps",{regexps:{format:/(BPS)/,unformat:/(BPS)/},format:function(_,k,T){var N=e._.includes(k," BPS")?" ":"",L;return _=_*1e4,k=k.replace(/\s?BPS/,""),L=e._.numberToFormat(_,k,T),e._.includes(L,")")?(L=L.split(""),L.splice(-1,0,N+"BPS"),L=L.join("")):L=L+N+"BPS",L},unformat:function(_){return+(e._.stringToNumber(_)*1e-4).toFixed(15)}})}(),function(){var _={base:1e3,suffixes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},k={base:1024,suffixes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},T=_.suffixes.concat(k.suffixes.filter(function(L){return _.suffixes.indexOf(L)<0})),N=T.join("|");N="("+N.replace("B","B(?!PS)")+")",e.register("format","bytes",{regexps:{format:/([0\s]i?b)/,unformat:new RegExp(N)},format:function(L,Y,q){var K,U=e._.includes(Y,"ib")?k:_,X=e._.includes(Y," b")||e._.includes(Y," ib")?" ":"",Z,fe,me;for(Y=Y.replace(/\s?i?b/,""),Z=0;Z<=U.suffixes.length;Z++)if(fe=Math.pow(U.base,Z),me=Math.pow(U.base,Z+1),L===null||L===0||L>=fe&&L0&&(L=L/fe);break}return K=e._.numberToFormat(L,Y,q),K+X},unformat:function(L){var Y=e._.stringToNumber(L),q,K;if(Y){for(q=_.suffixes.length-1;q>=0;q--){if(e._.includes(L,_.suffixes[q])){K=Math.pow(_.base,q);break}if(e._.includes(L,k.suffixes[q])){K=Math.pow(k.base,q);break}}Y*=K||1}return Y}})}(),function(){e.register("format","currency",{regexps:{format:/(\$)/},format:function(_,k,T){var N=e.locales[e.options.currentLocale],L={before:k.match(/^([\+|\-|\(|\s|\$]*)/)[0],after:k.match(/([\+|\-|\)|\s|\$]*)$/)[0]},Y,q,K;for(k=k.replace(/\s?\$\s?/,""),Y=e._.numberToFormat(_,k,T),_>=0?(L.before=L.before.replace(/[\-\(]/,""),L.after=L.after.replace(/[\-\)]/,"")):_<0&&!e._.includes(L.before,"-")&&!e._.includes(L.before,"(")&&(L.before="-"+L.before),K=0;K=0;K--)switch(q=L.after[K],q){case"$":Y=K===L.after.length-1?Y+N.currency.symbol:e._.insert(Y,N.currency.symbol,-(L.after.length-(1+K)));break;case" ":Y=K===L.after.length-1?Y+" ":e._.insert(Y," ",-(L.after.length-(1+K)+N.currency.symbol.length-1));break}return Y}})}(),function(){e.register("format","exponential",{regexps:{format:/(e\+|e-)/,unformat:/(e\+|e-)/},format:function(_,k,T){var N,L=typeof _=="number"&&!e._.isNaN(_)?_.toExponential():"0e+0",Y=L.split("e");return k=k.replace(/e[\+|\-]{1}0/,""),N=e._.numberToFormat(Number(Y[0]),k,T),N+"e"+Y[1]},unformat:function(_){var k=e._.includes(_,"e+")?_.split("e+"):_.split("e-"),T=Number(k[0]),N=Number(k[1]);N=e._.includes(_,"e-")?N*=-1:N;function L(Y,q,K,U){var X=e._.correctionFactor(Y,q),Z=Y*X*(q*X)/(X*X);return Z}return e._.reduce([T,Math.pow(10,N)],L,1)}})}(),function(){e.register("format","ordinal",{regexps:{format:/(o)/},format:function(_,k,T){var N=e.locales[e.options.currentLocale],L,Y=e._.includes(k," o")?" ":"";return k=k.replace(/\s?o/,""),Y+=N.ordinal(_),L=e._.numberToFormat(_,k,T),L+Y}})}(),function(){e.register("format","percentage",{regexps:{format:/(%)/,unformat:/(%)/},format:function(_,k,T){var N=e._.includes(k," %")?" ":"",L;return e.options.scalePercentBy100&&(_=_*100),k=k.replace(/\s?\%/,""),L=e._.numberToFormat(_,k,T),e._.includes(L,")")?(L=L.split(""),L.splice(-1,0,N+"%"),L=L.join("")):L=L+N+"%",L},unformat:function(_){var k=e._.stringToNumber(_);return e.options.scalePercentBy100?k*.01:k}})}(),function(){e.register("format","time",{regexps:{format:/(:)/,unformat:/(:)/},format:function(_,k,T){var N=Math.floor(_/60/60),L=Math.floor((_-N*60*60)/60),Y=Math.round(_-N*60*60-L*60);return N+":"+(L<10?"0"+L:L)+":"+(Y<10?"0"+Y:Y)},unformat:function(_){var k=_.split(":"),T=0;return k.length===3?(T=T+Number(k[0])*60*60,T=T+Number(k[1])*60,T=T+Number(k[2])):k.length===2&&(T=T+Number(k[0])*60,T=T+Number(k[1])),Number(T)}})}(),e})});var qwe=ot((tsr,Vwe)=>{var $we=Jq(),hUe="Expected a function";function Ate(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(hUe);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var d=e.apply(this,r);return n.cache=i.set(o,d)||i,d};return n.cache=new(Ate.Cache||$we),n}Ate.Cache=$we;Vwe.exports=Ate});var hU=ot((lsr,Xwe)=>{var vUe=f4(),gUe=Uy(),yUe="[object Symbol]";function bUe(e){return typeof e=="symbol"||gUe(e)&&vUe(e)==yUe}Xwe.exports=bUe});var Ywe=ot((usr,Kwe)=>{var wUe=A3(),OUe=hU(),xUe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,_Ue=/^\w*$/;function SUe(e,t){if(wUe(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||OUe(e)?!0:_Ue.test(e)||!xUe.test(e)||t!=null&&e in Object(t)}Kwe.exports=SUe});var Zwe=ot((csr,Qwe)=>{var EUe=qwe(),IUe=500;function kUe(e){var t=EUe(e,function(r){return n.size===IUe&&n.clear(),r}),n=t.cache;return t}Qwe.exports=kUe});var tOe=ot((fsr,eOe)=>{var PUe=Zwe(),jUe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,CUe=/\\(\\)?/g,TUe=PUe(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(jUe,function(n,r,o,i){t.push(o?i.replace(CUe,"$1"):r||n)}),t});eOe.exports=TUe});var Rte=ot((psr,rOe)=>{function AUe(e,t){for(var n=-1,r=e==null?0:e.length,o=Array(r);++n{var nOe=hk(),MUe=Rte(),RUe=A3(),DUe=hU(),zUe=1/0,oOe=nOe?nOe.prototype:void 0,iOe=oOe?oOe.toString:void 0;function aOe(e){if(typeof e=="string")return e;if(RUe(e))return MUe(e,aOe)+"";if(DUe(e))return iOe?iOe.call(e):"";var t=e+"";return t=="0"&&1/e==-zUe?"-0":t}sOe.exports=aOe});var cOe=ot((hsr,uOe)=>{var NUe=lOe();function LUe(e){return e==null?"":NUe(e)}uOe.exports=LUe});var mU=ot((msr,fOe)=>{var FUe=A3(),BUe=Ywe(),WUe=tOe(),HUe=cOe();function $Ue(e,t){return FUe(e)?e:BUe(e,t)?[e]:WUe(HUe(e))}fOe.exports=$Ue});var Dte=ot((vsr,pOe)=>{var VUe=hU(),qUe=1/0;function UUe(e){if(typeof e=="string"||VUe(e))return e;var t=e+"";return t=="0"&&1/e==-qUe?"-0":t}pOe.exports=UUe});var zte=ot((gsr,dOe)=>{var GUe=mU(),JUe=Dte();function XUe(e,t){t=GUe(t,e);for(var n=0,r=t.length;e!=null&&n{var KUe=zte();function YUe(e,t,n){var r=e==null?void 0:KUe(e,t);return r===void 0?n:r}hOe.exports=YUe});var gOe=ot((bsr,vOe)=>{function QUe(e,t){for(var n=-1,r=e==null?0:e.length;++n{var ZUe=PE(),eGe=function(){try{var e=ZUe(Object,"defineProperty");return e({},"",{}),e}catch{}}();yOe.exports=eGe});var Lte=ot((Osr,wOe)=>{var bOe=Nte();function tGe(e,t,n){t=="__proto__"&&bOe?bOe(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}wOe.exports=tGe});var Fte=ot((xsr,OOe)=>{var rGe=Lte(),nGe=qq(),oGe=Object.prototype,iGe=oGe.hasOwnProperty;function aGe(e,t,n){var r=e[t];(!(iGe.call(e,t)&&nGe(r,n))||n===void 0&&!(t in e))&&rGe(e,t,n)}OOe.exports=aGe});var $j=ot((_sr,xOe)=>{var sGe=Fte(),lGe=Lte();function uGe(e,t,n,r){var o=!n;n||(n={});for(var i=-1,d=t.length;++i{var cGe=$j(),fGe=rU();function pGe(e,t){return e&&cGe(t,fGe(t),e)}_Oe.exports=pGe});var IOe=ot((Esr,EOe)=>{function dGe(e){var t=[];if(e!=null)for(var n in Object(e))t.push(n);return t}EOe.exports=dGe});var POe=ot((Isr,kOe)=>{var hGe=mk(),mGe=tU(),vGe=IOe(),gGe=Object.prototype,yGe=gGe.hasOwnProperty;function bGe(e){if(!hGe(e))return vGe(e);var t=mGe(e),n=[];for(var r in e)r=="constructor"&&(t||!yGe.call(e,r))||n.push(r);return n}kOe.exports=bGe});var vU=ot((ksr,jOe)=>{var wGe=hte(),OGe=POe(),xGe=vte();function _Ge(e){return xGe(e)?wGe(e,!0):OGe(e)}jOe.exports=_Ge});var TOe=ot((Psr,COe)=>{var SGe=$j(),EGe=vU();function IGe(e,t){return e&&SGe(t,EGe(t),e)}COe.exports=IGe});var zOe=ot((ZA,Vj)=>{var kGe=T3(),DOe=typeof ZA=="object"&&ZA&&!ZA.nodeType&&ZA,AOe=DOe&&typeof Vj=="object"&&Vj&&!Vj.nodeType&&Vj,PGe=AOe&&AOe.exports===DOe,MOe=PGe?kGe.Buffer:void 0,ROe=MOe?MOe.allocUnsafe:void 0;function jGe(e,t){if(t)return e.slice();var n=e.length,r=ROe?ROe(n):new e.constructor(n);return e.copy(r),r}Vj.exports=jGe});var LOe=ot((jsr,NOe)=>{function CGe(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n{var TGe=$j(),AGe=Yq();function MGe(e,t){return TGe(e,AGe(e),t)}FOe.exports=MGe});var gU=ot((Tsr,WOe)=>{var RGe=mte(),DGe=RGe(Object.getPrototypeOf,Object);WOe.exports=DGe});var Bte=ot((Asr,HOe)=>{var zGe=Kq(),NGe=gU(),LGe=Yq(),FGe=ute(),BGe=Object.getOwnPropertySymbols,WGe=BGe?function(e){for(var t=[];e;)zGe(t,LGe(e)),e=NGe(e);return t}:FGe;HOe.exports=WGe});var VOe=ot((Msr,$Oe)=>{var HGe=$j(),$Ge=Bte();function VGe(e,t){return HGe(e,$Ge(e),t)}$Oe.exports=VGe});var Wte=ot((Rsr,qOe)=>{var qGe=lte(),UGe=Bte(),GGe=vU();function JGe(e){return qGe(e,GGe,UGe)}qOe.exports=JGe});var GOe=ot((Dsr,UOe)=>{var XGe=Object.prototype,KGe=XGe.hasOwnProperty;function YGe(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]=="string"&&KGe.call(e,"index")&&(n.index=e.index,n.input=e.input),n}UOe.exports=YGe});var yU=ot((zsr,XOe)=>{var JOe=ate();function QGe(e){var t=new e.constructor(e.byteLength);return new JOe(t).set(new JOe(e)),t}XOe.exports=QGe});var YOe=ot((Nsr,KOe)=>{var ZGe=yU();function eJe(e,t){var n=t?ZGe(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}KOe.exports=eJe});var ZOe=ot((Lsr,QOe)=>{var tJe=/\w*$/;function rJe(e){var t=new e.constructor(e.source,tJe.exec(e));return t.lastIndex=e.lastIndex,t}QOe.exports=rJe});var o4e=ot((Fsr,n4e)=>{var e4e=hk(),t4e=e4e?e4e.prototype:void 0,r4e=t4e?t4e.valueOf:void 0;function nJe(e){return r4e?Object(r4e.call(e)):{}}n4e.exports=nJe});var a4e=ot((Bsr,i4e)=>{var oJe=yU();function iJe(e,t){var n=t?oJe(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}i4e.exports=iJe});var l4e=ot((Wsr,s4e)=>{var aJe=yU(),sJe=YOe(),lJe=ZOe(),uJe=o4e(),cJe=a4e(),fJe="[object Boolean]",pJe="[object Date]",dJe="[object Map]",hJe="[object Number]",mJe="[object RegExp]",vJe="[object Set]",gJe="[object String]",yJe="[object Symbol]",bJe="[object ArrayBuffer]",wJe="[object DataView]",OJe="[object Float32Array]",xJe="[object Float64Array]",_Je="[object Int8Array]",SJe="[object Int16Array]",EJe="[object Int32Array]",IJe="[object Uint8Array]",kJe="[object Uint8ClampedArray]",PJe="[object Uint16Array]",jJe="[object Uint32Array]";function CJe(e,t,n){var r=e.constructor;switch(t){case bJe:return aJe(e);case fJe:case pJe:return new r(+e);case wJe:return sJe(e,n);case OJe:case xJe:case _Je:case SJe:case EJe:case IJe:case kJe:case PJe:case jJe:return cJe(e,n);case dJe:return new r;case hJe:case gJe:return new r(e);case mJe:return lJe(e);case vJe:return new r;case yJe:return uJe(e)}}s4e.exports=CJe});var f4e=ot((Hsr,c4e)=>{var TJe=mk(),u4e=Object.create,AJe=function(){function e(){}return function(t){if(!TJe(t))return{};if(u4e)return u4e(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();c4e.exports=AJe});var d4e=ot(($sr,p4e)=>{var MJe=f4e(),RJe=gU(),DJe=tU();function zJe(e){return typeof e.constructor=="function"&&!DJe(e)?MJe(RJe(e)):{}}p4e.exports=zJe});var m4e=ot((Vsr,h4e)=>{var NJe=KA(),LJe=Uy(),FJe="[object Map]";function BJe(e){return LJe(e)&&NJe(e)==FJe}h4e.exports=BJe});var b4e=ot((qsr,y4e)=>{var WJe=m4e(),HJe=Zq(),v4e=eU(),g4e=v4e&&v4e.isMap,$Je=g4e?HJe(g4e):WJe;y4e.exports=$Je});var O4e=ot((Usr,w4e)=>{var VJe=KA(),qJe=Uy(),UJe="[object Set]";function GJe(e){return qJe(e)&&VJe(e)==UJe}w4e.exports=GJe});var E4e=ot((Gsr,S4e)=>{var JJe=O4e(),XJe=Zq(),x4e=eU(),_4e=x4e&&x4e.isSet,KJe=_4e?XJe(_4e):JJe;S4e.exports=KJe});var C4e=ot((Jsr,j4e)=>{var YJe=ote(),QJe=gOe(),ZJe=Fte(),eXe=SOe(),tXe=TOe(),rXe=zOe(),nXe=LOe(),oXe=BOe(),iXe=VOe(),aXe=gte(),sXe=Wte(),lXe=KA(),uXe=GOe(),cXe=l4e(),fXe=d4e(),pXe=A3(),dXe=Qq(),hXe=b4e(),mXe=mk(),vXe=E4e(),gXe=rU(),yXe=vU(),bXe=1,wXe=2,OXe=4,I4e="[object Arguments]",xXe="[object Array]",_Xe="[object Boolean]",SXe="[object Date]",EXe="[object Error]",k4e="[object Function]",IXe="[object GeneratorFunction]",kXe="[object Map]",PXe="[object Number]",P4e="[object Object]",jXe="[object RegExp]",CXe="[object Set]",TXe="[object String]",AXe="[object Symbol]",MXe="[object WeakMap]",RXe="[object ArrayBuffer]",DXe="[object DataView]",zXe="[object Float32Array]",NXe="[object Float64Array]",LXe="[object Int8Array]",FXe="[object Int16Array]",BXe="[object Int32Array]",WXe="[object Uint8Array]",HXe="[object Uint8ClampedArray]",$Xe="[object Uint16Array]",VXe="[object Uint32Array]",Ra={};Ra[I4e]=Ra[xXe]=Ra[RXe]=Ra[DXe]=Ra[_Xe]=Ra[SXe]=Ra[zXe]=Ra[NXe]=Ra[LXe]=Ra[FXe]=Ra[BXe]=Ra[kXe]=Ra[PXe]=Ra[P4e]=Ra[jXe]=Ra[CXe]=Ra[TXe]=Ra[AXe]=Ra[WXe]=Ra[HXe]=Ra[$Xe]=Ra[VXe]=!0;Ra[EXe]=Ra[k4e]=Ra[MXe]=!1;function bU(e,t,n,r,o,i){var d,y=t&bXe,_=t&wXe,k=t&OXe;if(n&&(d=o?n(e,r,o,i):n(e)),d!==void 0)return d;if(!mXe(e))return e;var T=pXe(e);if(T){if(d=uXe(e),!y)return nXe(e,d)}else{var N=lXe(e),L=N==k4e||N==IXe;if(dXe(e))return rXe(e,y);if(N==P4e||N==I4e||L&&!o){if(d=_||L?{}:fXe(e),!y)return _?iXe(e,tXe(d,e)):oXe(e,eXe(d,e))}else{if(!Ra[N])return o?e:{};d=cXe(e,N,y)}}i||(i=new YJe);var Y=i.get(e);if(Y)return Y;i.set(e,d),vXe(e)?e.forEach(function(U){d.add(bU(U,t,n,U,e,i))}):hXe(e)&&e.forEach(function(U,X){d.set(X,bU(U,t,n,X,e,i))});var q=k?_?sXe:aXe:_?yXe:gXe,K=T?void 0:q(e);return QJe(K||e,function(U,X){K&&(X=U,U=e[X]),ZJe(d,X,bU(U,t,n,X,e,i))}),d}j4e.exports=bU});var A4e=ot((Xsr,T4e)=>{function qXe(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}T4e.exports=qXe});var R4e=ot((Ksr,M4e)=>{function UXe(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),n=n>o?o:n,n<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(o);++r{var GXe=zte(),JXe=R4e();function XXe(e,t){return t.length<2?e:GXe(e,JXe(t,0,-1))}D4e.exports=XXe});var L4e=ot((Qsr,N4e)=>{var KXe=mU(),YXe=A4e(),QXe=z4e(),ZXe=Dte();function eKe(e,t){return t=KXe(t,e),e=QXe(e,t),e==null||delete e[ZXe(YXe(t))]}N4e.exports=eKe});var W4e=ot((Zsr,B4e)=>{var tKe=f4(),rKe=gU(),nKe=Uy(),oKe="[object Object]",iKe=Function.prototype,aKe=Object.prototype,F4e=iKe.toString,sKe=aKe.hasOwnProperty,lKe=F4e.call(Object);function uKe(e){if(!nKe(e)||tKe(e)!=oKe)return!1;var t=rKe(e);if(t===null)return!0;var n=sKe.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&F4e.call(n)==lKe}B4e.exports=uKe});var $4e=ot((elr,H4e)=>{var cKe=W4e();function fKe(e){return cKe(e)?void 0:e}H4e.exports=fKe});var G4e=ot((tlr,U4e)=>{var V4e=hk(),pKe=cte(),dKe=A3(),q4e=V4e?V4e.isConcatSpreadable:void 0;function hKe(e){return dKe(e)||pKe(e)||!!(q4e&&e&&e[q4e])}U4e.exports=hKe});var K4e=ot((rlr,X4e)=>{var mKe=Kq(),vKe=G4e();function J4e(e,t,n,r,o){var i=-1,d=e.length;for(n||(n=vKe),o||(o=[]);++i0&&n(y)?t>1?J4e(y,t-1,n,r,o):mKe(o,y):r||(o[o.length]=y)}return o}X4e.exports=J4e});var Q4e=ot((nlr,Y4e)=>{var gKe=K4e();function yKe(e){var t=e==null?0:e.length;return t?gKe(e,1):[]}Y4e.exports=yKe});var e6e=ot((olr,Z4e)=>{function bKe(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}Z4e.exports=bKe});var n6e=ot((ilr,r6e)=>{var wKe=e6e(),t6e=Math.max;function OKe(e,t,n){return t=t6e(t===void 0?e.length-1:t,0),function(){for(var r=arguments,o=-1,i=t6e(r.length-t,0),d=Array(i);++o{function xKe(e){return function(){return e}}o6e.exports=xKe});var s6e=ot((slr,a6e)=>{function _Ke(e){return e}a6e.exports=_Ke});var c6e=ot((llr,u6e)=>{var SKe=i6e(),l6e=Nte(),EKe=s6e(),IKe=l6e?function(e,t){return l6e(e,"toString",{configurable:!0,enumerable:!1,value:SKe(t),writable:!0})}:EKe;u6e.exports=IKe});var p6e=ot((ulr,f6e)=>{var kKe=800,PKe=16,jKe=Date.now;function CKe(e){var t=0,n=0;return function(){var r=jKe(),o=PKe-(r-n);if(n=r,o>0){if(++t>=kKe)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}f6e.exports=CKe});var h6e=ot((clr,d6e)=>{var TKe=c6e(),AKe=p6e(),MKe=AKe(TKe);d6e.exports=MKe});var v6e=ot((flr,m6e)=>{var RKe=Q4e(),DKe=n6e(),zKe=h6e();function NKe(e){return zKe(DKe(e,void 0,RKe),e+"")}m6e.exports=NKe});var y6e=ot((plr,g6e)=>{var LKe=Rte(),FKe=C4e(),BKe=L4e(),WKe=mU(),HKe=$j(),$Ke=$4e(),VKe=v6e(),qKe=Wte(),UKe=1,GKe=2,JKe=4,XKe=VKe(function(e,t){var n={};if(e==null)return n;var r=!1;t=LKe(t,function(i){return i=WKe(i,e),r||(r=i.length>1),i}),HKe(e,qKe(e),n),r&&(n=FKe(n,UKe|GKe|JKe,$Ke));for(var o=t.length;o--;)BKe(n,t[o]);return n});g6e.exports=XKe});var K6e=ot(da=>{"use strict";var TU=60103,AU=60106,jW=60107,CW=60108,TW=60114,AW=60109,MW=60110,RW=60112,DW=60113,yce=60120,zW=60115,NW=60116,q6e=60121,U6e=60122,G6e=60117,J6e=60129,X6e=60131;typeof Symbol=="function"&&Symbol.for&&(Nc=Symbol.for,TU=Nc("react.element"),AU=Nc("react.portal"),jW=Nc("react.fragment"),CW=Nc("react.strict_mode"),TW=Nc("react.profiler"),AW=Nc("react.provider"),MW=Nc("react.context"),RW=Nc("react.forward_ref"),DW=Nc("react.suspense"),yce=Nc("react.suspense_list"),zW=Nc("react.memo"),NW=Nc("react.lazy"),q6e=Nc("react.block"),U6e=Nc("react.server.block"),G6e=Nc("react.fundamental"),J6e=Nc("react.debug_trace_mode"),X6e=Nc("react.legacy_hidden"));var Nc;function M3(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case TU:switch(e=e.type,e){case jW:case TW:case CW:case DW:case yce:return e;default:switch(e=e&&e.$$typeof,e){case MW:case RW:case NW:case zW:case AW:return e;default:return t}}case AU:return t}}}var Cjt=AW,Tjt=TU,Ajt=RW,Mjt=jW,Rjt=NW,Djt=zW,zjt=AU,Njt=TW,Ljt=CW,Fjt=DW;da.ContextConsumer=MW;da.ContextProvider=Cjt;da.Element=Tjt;da.ForwardRef=Ajt;da.Fragment=Mjt;da.Lazy=Rjt;da.Memo=Djt;da.Portal=zjt;da.Profiler=Njt;da.StrictMode=Ljt;da.Suspense=Fjt;da.isAsyncMode=function(){return!1};da.isConcurrentMode=function(){return!1};da.isContextConsumer=function(e){return M3(e)===MW};da.isContextProvider=function(e){return M3(e)===AW};da.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===TU};da.isForwardRef=function(e){return M3(e)===RW};da.isFragment=function(e){return M3(e)===jW};da.isLazy=function(e){return M3(e)===NW};da.isMemo=function(e){return M3(e)===zW};da.isPortal=function(e){return M3(e)===AU};da.isProfiler=function(e){return M3(e)===TW};da.isStrictMode=function(e){return M3(e)===CW};da.isSuspense=function(e){return M3(e)===DW};da.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===jW||e===TW||e===J6e||e===CW||e===DW||e===yce||e===X6e||typeof e=="object"&&e!==null&&(e.$$typeof===NW||e.$$typeof===zW||e.$$typeof===AW||e.$$typeof===MW||e.$$typeof===RW||e.$$typeof===G6e||e.$$typeof===q6e||e[0]===U6e)};da.typeOf=M3});var Q6e=ot((e4r,Y6e)=>{"use strict";Y6e.exports=K6e()});var fxe=ot((A4r,cxe)=>{"use strict";cxe.exports=function(t,n){if(n=n.split(":")[0],t=+t,!t)return!1;switch(n){case"http":case"ws":return t!==80;case"https":case"wss":return t!==443;case"ftp":return t!==21;case"gopher":return t!==70;case"file":return!1}return t!==0}});var hxe=ot(Oce=>{"use strict";var nCt=Object.prototype.hasOwnProperty,oCt;function pxe(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch{return null}}function dxe(e){try{return encodeURIComponent(e)}catch{return null}}function iCt(e){for(var t=/([^=?#&]+)=?([^&]*)/g,n={},r;r=t.exec(e);){var o=pxe(r[1]),i=pxe(r[2]);o===null||i===null||o in n||(n[o]=i)}return n}function aCt(e,t){t=t||"";var n=[],r,o;typeof t!="string"&&(t="?");for(o in e)if(nCt.call(e,o)){if(r=e[o],!r&&(r===null||r===oCt||isNaN(r))&&(r=""),o=dxe(o),r=dxe(r),o===null||r===null)continue;n.push(o+"="+r)}return n.length?t+n.join("&"):""}Oce.stringify=aCt;Oce.parse=iCt});var xxe=ot((R4r,Oxe)=>{"use strict";var vxe=fxe(),DU=hxe(),sCt=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,gxe=/[\n\r\t]/g,lCt=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,yxe=/:\d+$/,uCt=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,cCt=/^[a-zA-Z]:/;function _ce(e){return(e||"").toString().replace(sCt,"")}var xce=[["#","hash"],["?","query"],function(t,n){return d4(n.protocol)?t.replace(/\\/g,"/"):t},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],mxe={hash:1,query:1};function bxe(e){var t;typeof window<"u"?t=window:typeof global<"u"?t=global:typeof self<"u"?t=self:t={};var n=t.location||{};e=e||n;var r={},o=typeof e,i;if(e.protocol==="blob:")r=new h4(unescape(e.pathname),{});else if(o==="string"){r=new h4(e,{});for(i in mxe)delete r[i]}else if(o==="object"){for(i in e)i in mxe||(r[i]=e[i]);r.slashes===void 0&&(r.slashes=lCt.test(e.href))}return r}function d4(e){return e==="file:"||e==="ftp:"||e==="http:"||e==="https:"||e==="ws:"||e==="wss:"}function wxe(e,t){e=_ce(e),e=e.replace(gxe,""),t=t||{};var n=uCt.exec(e),r=n[1]?n[1].toLowerCase():"",o=!!n[2],i=!!n[3],d=0,y;return o?i?(y=n[2]+n[3]+n[4],d=n[2].length+n[3].length):(y=n[2]+n[4],d=n[2].length):i?(y=n[3]+n[4],d=n[3].length):y=n[4],r==="file:"?d>=2&&(y=y.slice(2)):d4(r)?y=n[4]:r?o&&(y=y.slice(2)):d>=2&&d4(t.protocol)&&(y=n[4]),{protocol:r,slashes:o||d4(r),slashesCount:d,rest:y}}function fCt(e,t){if(e==="")return t;for(var n=(t||"/").split("/").slice(0,-1).concat(e.split("/")),r=n.length,o=n[r-1],i=!1,d=0;r--;)n[r]==="."?n.splice(r,1):n[r]===".."?(n.splice(r,1),d++):d&&(r===0&&(i=!0),n.splice(r,1),d--);return i&&n.unshift(""),(o==="."||o==="..")&&n.push(""),n.join("/")}function h4(e,t,n){if(e=_ce(e),e=e.replace(gxe,""),!(this instanceof h4))return new h4(e,t,n);var r,o,i,d,y,_,k=xce.slice(),T=typeof t,N=this,L=0;for(T!=="object"&&T!=="string"&&(n=t,t=null),n&&typeof n!="function"&&(n=DU.parse),t=bxe(t),o=wxe(e||"",t),r=!o.protocol&&!o.slashes,N.slashes=o.slashes||r&&t.slashes,N.protocol=o.protocol||t.protocol||"",e=o.rest,(o.protocol==="file:"&&(o.slashesCount!==2||cCt.test(e))||!o.slashes&&(o.protocol||o.slashesCount<2||!d4(N.protocol)))&&(k[3]=[/(.*)/,"pathname"]);L{"use strict";Object.defineProperty(Lpe,"__esModule",{value:!0});var zpe=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function GNt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function JNt(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t&&(typeof t=="object"||typeof t=="function")?t:e}function XNt(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var kSe={position:"absolute",top:0,left:0,visibility:"hidden",height:0,overflow:"scroll",whiteSpace:"pre"},KNt=["extraWidth","injectStyles","inputClassName","inputRef","inputStyle","minWidth","onAutosize","placeholderIsMinWidth"],YNt=function(t){return KNt.forEach(function(n){return delete t[n]}),t},PSe=function(t,n){n.style.fontSize=t.fontSize,n.style.fontFamily=t.fontFamily,n.style.fontWeight=t.fontWeight,n.style.fontStyle=t.fontStyle,n.style.letterSpacing=t.letterSpacing,n.style.textTransform=t.textTransform},ASe=typeof window<"u"&&window.navigator?/MSIE |Trident\/|Edge\//.test(window.navigator.userAgent):!1,jSe=function(){return ASe?"_"+Math.random().toString(36).substr(2,12):void 0},Npe=function(e){XNt(t,e),ISe(t,null,[{key:"getDerivedStateFromProps",value:function(r,o){var i=r.id;return i!==o.prevId?{inputId:i||jSe(),prevId:i}:null}}]);function t(n){GNt(this,t);var r=JNt(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,n));return r.inputRef=function(o){r.input=o,typeof r.props.inputRef=="function"&&r.props.inputRef(o)},r.placeHolderSizerRef=function(o){r.placeHolderSizer=o},r.sizerRef=function(o){r.sizer=o},r.state={inputWidth:n.minWidth,inputId:n.id||jSe(),prevId:n.id},r}return ISe(t,[{key:"componentDidMount",value:function(){this.mounted=!0,this.copyInputStyles(),this.updateInputWidth()}},{key:"componentDidUpdate",value:function(r,o){o.inputWidth!==this.state.inputWidth&&typeof this.props.onAutosize=="function"&&this.props.onAutosize(this.state.inputWidth),this.updateInputWidth()}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"copyInputStyles",value:function(){if(!(!this.mounted||!window.getComputedStyle)){var r=this.input&&window.getComputedStyle(this.input);r&&(PSe(r,this.sizer),this.placeHolderSizer&&PSe(r,this.placeHolderSizer))}}},{key:"updateInputWidth",value:function(){if(!(!this.mounted||!this.sizer||typeof this.sizer.scrollWidth>"u")){var r=void 0;this.props.placeholder&&(!this.props.value||this.props.value&&this.props.placeholderIsMinWidth)?r=Math.max(this.sizer.scrollWidth,this.placeHolderSizer.scrollWidth)+2:r=this.sizer.scrollWidth+2;var o=this.props.type==="number"&&this.props.extraWidth===void 0?16:parseInt(this.props.extraWidth)||0;r+=o,r{(function(e,t){typeof yK=="object"&&typeof bke<"u"?t(yK):typeof define=="function"&&define.amd?define(["exports"],t):(e=typeof globalThis<"u"?globalThis:e||self,t(e.vis=e.vis||{}))})(yK,function(e){function t(I,A){if(!(I instanceof A))throw new TypeError("Cannot call a class as a function")}var n=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function r(I){return I&&I.__esModule&&Object.prototype.hasOwnProperty.call(I,"default")?I.default:I}var o={exports:{}},i=function(I){return I&&I.Math===Math&&I},d=i(typeof globalThis=="object"&&globalThis)||i(typeof window=="object"&&window)||i(typeof self=="object"&&self)||i(typeof n=="object"&&n)||function(){return this}()||n||Function("return this")(),y=function(I){try{return!!I()}catch{return!0}},_=y,k=!_(function(){var I=function(){}.bind();return typeof I!="function"||I.hasOwnProperty("prototype")}),T=k,N=Function.prototype,L=N.apply,Y=N.call,q=typeof Reflect=="object"&&Reflect.apply||(T?Y.bind(L):function(){return Y.apply(L,arguments)}),K=k,U=Function.prototype,X=U.call,Z=K&&U.bind.bind(X,X),fe=K?Z:function(I){return function(){return X.apply(I,arguments)}},me=fe,ye=me({}.toString),ge=me("".slice),ae=function(I){return ge(ye(I),8,-1)},Pe=ae,Ne=fe,Ye=function(I){if(Pe(I)==="Function")return Ne(I)},Je=typeof document=="object"&&document.all,Me=typeof Je>"u"&&Je!==void 0,Ve={all:Je,IS_HTMLDDA:Me},Ue=Ve,ht=Ue.all,yt=Ue.IS_HTMLDDA?function(I){return typeof I=="function"||I===ht}:function(I){return typeof I=="function"},Rt={},wt=y,_t=!wt(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),Nt=k,At=Function.prototype.call,ir=Nt?At.bind(At):function(){return At.apply(At,arguments)},Pt={},Sr={}.propertyIsEnumerable,Nr=Object.getOwnPropertyDescriptor,ar=Nr&&!Sr.call({1:2},1);Pt.f=ar?function(A){var B=Nr(this,A);return!!B&&B.enumerable}:Sr;var xr=function(I,A){return{enumerable:!(I&1),configurable:!(I&2),writable:!(I&4),value:A}},qn=fe,An=y,Oo=ae,yn=Object,Vr=qn("".split),eo=An(function(){return!yn("z").propertyIsEnumerable(0)})?function(I){return Oo(I)==="String"?Vr(I,""):yn(I)}:yn,Sn=function(I){return I==null},Ti=Sn,Mo=TypeError,xo=function(I){if(Ti(I))throw new Mo("Can't call method on "+I);return I},Qa=eo,Dn=xo,mr=function(I){return Qa(Dn(I))},Un=yt,Za=Ve,Ai=Za.all,mn=Za.IS_HTMLDDA?function(I){return typeof I=="object"?I!==null:Un(I)||I===Ai}:function(I){return typeof I=="object"?I!==null:Un(I)},rn={},Mn=rn,go=d,cn=yt,ms=function(I){return cn(I)?I:void 0},Oi=function(I,A){return arguments.length<2?ms(Mn[I])||ms(go[I]):Mn[I]&&Mn[I][A]||go[I]&&go[I][A]},cc=fe,ko=cc({}.isPrototypeOf),Ws=typeof navigator<"u"&&String(navigator.userAgent)||"",Hs=d,es=Ws,rb=Hs.process,am=Hs.Deno,Wc=rb&&rb.versions||am&&am.version,ql=Wc&&Wc.v8,Na,fc;ql&&(Na=ql.split("."),fc=Na[0]>0&&Na[0]<4?1:+(Na[0]+Na[1])),!fc&&es&&(Na=es.match(/Edge\/(\d+)/),(!Na||Na[1]>=74)&&(Na=es.match(/Chrome\/(\d+)/),Na&&(fc=+Na[1])));var vs=fc,vr=vs,ia=y,Uo=d,Vi=Uo.String,li=!!Object.getOwnPropertySymbols&&!ia(function(){var I=Symbol("symbol detection");return!Vi(I)||!(Object(I)instanceof Symbol)||!Symbol.sham&&vr&&vr<41}),Gn=li,nd=Gn&&!Symbol.sham&&typeof Symbol.iterator=="symbol",Xn=Oi,va=yt,K3=ko,vh=nd,qi=Object,xi=vh?function(I){return typeof I=="symbol"}:function(I){var A=Xn("Symbol");return va(A)&&K3(A.prototype,qi(I))},$s=String,No=function(I){try{return $s(I)}catch{return"Object"}},Ul=yt,Ou=No,Gf=TypeError,Vs=function(I){if(Ul(I))return I;throw new Gf(Ou(I)+" is not a function")},gv=Vs,pc=Sn,Jf=function(I,A){var B=I[A];return pc(B)?void 0:gv(B)},xu=ir,qs=yt,Xf=mn,ts=TypeError,gs=function(I,A){var B,W;if(A==="string"&&qs(B=I.toString)&&!Xf(W=xu(B,I))||qs(B=I.valueOf)&&!Xf(W=xu(B,I))||A!=="string"&&qs(B=I.toString)&&!Xf(W=xu(B,I)))return W;throw new ts("Can't convert object to primitive value")},nb={exports:{}},Ui=!0,En=d,yv=Object.defineProperty,Y3=function(I,A){try{yv(En,I,{value:A,configurable:!0,writable:!0})}catch{En[I]=A}return A},ob=d,Kf=Y3,od="__core-js_shared__",ib=ob[od]||Kf(od,{}),sm=ib,Q3=sm;(nb.exports=function(I,A){return Q3[I]||(Q3[I]=A!==void 0?A:{})})("versions",[]).push({version:"3.33.2",mode:"pure",copyright:"\xA9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.2/LICENSE",source:"https://github.com/zloirock/core-js"});var Yf=nb.exports,id=xo,hl=Object,Mi=function(I){return hl(id(I))},Go=fe,ui=Mi,Z3=Go({}.hasOwnProperty),Zo=Object.hasOwn||function(A,B){return Z3(ui(A),B)},e5=fe,Hc=0,bv=Math.random(),ab=e5(1 .toString),$c=function(I){return"Symbol("+(I===void 0?"":I)+")_"+ab(++Hc+bv,36)},_u=d,gh=Yf,Vc=Zo,yh=$c,lm=li,Su=nd,ml=_u.Symbol,ad=gh("wks"),um=Su?ml.for||ml:ml&&ml.withoutSetter||yh,Lo=function(I){return Vc(ad,I)||(ad[I]=lm&&Vc(ml,I)?ml[I]:um("Symbol."+I)),ad[I]},sb=ir,bh=mn,wv=xi,Ov=Jf,j4=gs,ys=Lo,wh=TypeError,xv=ys("toPrimitive"),_v=function(I,A){if(!bh(I)||wv(I))return I;var B=Ov(I,xv),W;if(B){if(A===void 0&&(A="default"),W=sb(B,I,A),!bh(W)||wv(W))return W;throw new wh("Can't convert object to primitive value")}return A===void 0&&(A="number"),j4(I,A)},Oh=_v,xh=xi,qc=function(I){var A=Oh(I,"string");return xh(A)?A:A+""},sd=d,Eu=mn,Sv=sd.document,t5=Eu(Sv)&&Eu(Sv.createElement),cm=function(I){return t5?Sv.createElement(I):{}},fm=_t,_h=y,Sh=cm,ci=!fm&&!_h(function(){return Object.defineProperty(Sh("div"),"a",{get:function(){return 7}}).a!==7}),La=_t,lb=ir,r5=Pt,Ev=xr,Us=mr,Gs=qc,fo=Zo,pm=ci,Iu=Object.getOwnPropertyDescriptor;Rt.f=La?Iu:function(A,B){if(A=Us(A),B=Gs(B),pm)try{return Iu(A,B)}catch{}if(fo(A,B))return Ev(!lb(r5.f,A,B),A[B])};var Eh=y,Iv=yt,kv=/#|\.prototype\./,Qf=function(I,A){var B=rs[ld(I)];return B===ub?!0:B===to?!1:Iv(A)?Eh(A):!!A},ld=Qf.normalize=function(I){return String(I).replace(kv,".").toLowerCase()},rs=Qf.data={},to=Qf.NATIVE="N",ub=Qf.POLYFILL="P",vl=Qf,Zf=Ye,bs=Vs,dm=k,Ih=Zf(Zf.bind),Uc=function(I,A){return bs(I),A===void 0?I:dm?Ih(I,A):function(){return I.apply(A,arguments)}},ga={},hm=_t,ep=y,tp=hm&&ep(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),ud=mn,rp=String,cb=TypeError,Pr=function(I){if(ud(I))return I;throw new cb(rp(I)+" is not an object")},Xr=_t,Pv=ci,C4=tp,Gc=Pr,fb=qc,Jc=TypeError,jv=Object.defineProperty,Ln=Object.getOwnPropertyDescriptor,kh="enumerable",mm="configurable",dc="writable";ga.f=Xr?C4?function(A,B,W){if(Gc(A),B=fb(B),Gc(W),typeof A=="function"&&B==="prototype"&&"value"in W&&dc in W&&!W[dc]){var J=Ln(A,B);J&&J[dc]&&(A[B]=W.value,W={configurable:mm in W?W[mm]:J[mm],enumerable:kh in W?W[kh]:J[kh],writable:!1})}return jv(A,B,W)}:jv:function(A,B,W){if(Gc(A),B=fb(B),Gc(W),Pv)try{return jv(A,B,W)}catch{}if("get"in W||"set"in W)throw new Jc("Accessors not supported");return"value"in W&&(A[B]=W.value),A};var Gl=_t,Cv=ga,Ph=xr,gl=Gl?function(I,A,B){return Cv.f(I,A,Ph(1,B))}:function(I,A,B){return I[A]=B,I},ya=d,Tv=q,ro=Ye,ws=yt,T4=Rt.f,vm=vl,jh=rn,gm=Uc,hc=gl,ba=Zo,cd=function(I){var A=function(B,W,J){if(this instanceof A){switch(arguments.length){case 0:return new I;case 1:return new I(B);case 2:return new I(B,W)}return new I(B,W,J)}return Tv(I,this,arguments)};return A.prototype=I.prototype,A},Gr=function(I,A){var B=I.target,W=I.global,J=I.stat,ie=I.proto,ve=W?ya:J?ya[B]:(ya[B]||{}).prototype,je=W?jh:jh[B]||hc(jh,B,{})[B],xe=je.prototype,Re,We,ut,rt,bt,gr,vn,On,Yn;for(rt in A)Re=vm(W?rt:B+(J?".":"#")+rt,I.forced),We=!Re&&ve&&ba(ve,rt),gr=je[rt],We&&(I.dontCallGetSet?(Yn=T4(ve,rt),vn=Yn&&Yn.value):vn=ve[rt]),bt=We&&vn?vn:A[rt],!(We&&typeof gr==typeof bt)&&(I.bind&&We?On=gm(bt,ya):I.wrap&&We?On=cd(bt):ie&&ws(bt)?On=ro(bt):On=bt,(I.sham||bt&&bt.sham||gr&&gr.sham)&&hc(On,"sham",!0),hc(je,rt,On),ie&&(ut=B+"Prototype",ba(jh,ut)||hc(jh,ut,{}),hc(jh[ut],rt,bt),I.real&&xe&&(Re||!xe[rt])&&hc(xe,rt,bt)))},fd=Gr,ku=_t,Xc=ga.f;fd({target:"Object",stat:!0,forced:Object.defineProperty!==Xc,sham:!ku},{defineProperty:Xc});var pb=rn,n5=pb.Object,o5=o.exports=function(A,B,W){return n5.defineProperty(A,B,W)};n5.defineProperty.sham&&(o5.sham=!0);var Js=o.exports,Av=Js,Kc=Av,db=Kc,Mv=db,pd=Mv,i5=pd,hb=i5,ym=r(hb),a5=ae,Po=Array.isArray||function(A){return a5(A)==="Array"},Ch=Math.ceil,mb=Math.floor,Th=Math.trunc||function(A){var B=+A;return(B>0?mb:Ch)(B)},s5=Th,Rv=function(I){var A=+I;return A!==A||A===0?0:s5(A)},Ah=Rv,Jl=Math.min,Pu=function(I){return I>0?Jl(Ah(I),9007199254740991):0},Dv=Pu,yl=function(I){return Dv(I.length)},zv=TypeError,bm=9007199254740991,Mh=function(I){if(I>bm)throw zv("Maximum allowed index exceeded");return I},Nv=qc,fi=ga,l5=xr,Rh=function(I,A,B){var W=Nv(A);W in I?fi.f(I,W,l5(0,B)):I[W]=B},np=Lo,Yc=np("toStringTag"),vb={};vb[Yc]="z";var wm=String(vb)==="[object z]",Vt=wm,gb=yt,Om=ae,yb=Lo,bb=yb("toStringTag"),Fo=Object,A4=Om(function(){return arguments}())==="Arguments",M4=function(I,A){try{return I[A]}catch{}},Xl=Vt?Om:function(I){var A,B,W;return I===void 0?"Undefined":I===null?"Null":typeof(B=M4(A=Fo(I),bb))=="string"?B:A4?Om(A):(W=Om(A))==="Object"&&gb(A.callee)?"Arguments":W},wb=fe,xm=yt,dd=sm,_m=wb(Function.toString);xm(dd.inspectSource)||(dd.inspectSource=function(I){return _m(I)});var Lv=dd.inspectSource,hd=fe,Fv=y,Sm=yt,Bv=Xl,u5=Oi,Em=Lv,Kl=function(){},Dh=[],Im=u5("Reflect","construct"),Xs=/^\s*(?:class|function)\b/,Qc=hd(Xs.exec),Gi=!Xs.test(Kl),aa=function(A){if(!Sm(A))return!1;try{return Im(Kl,Dh,A),!0}catch{return!1}},Zc=function(A){if(!Sm(A))return!1;switch(Bv(A)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return Gi||!!Qc(Xs,Em(A))}catch{return!0}};Zc.sham=!0;var Yl=!Im||Fv(function(){var I;return aa(aa.call)||!aa(Object)||!aa(function(){I=!0})||I})?Zc:aa,ef=Po,md=Yl,op=mn,Ob=Lo,c5=Ob("species"),Wv=Array,vd=function(I){var A;return ef(I)&&(A=I.constructor,md(A)&&(A===Wv||ef(A.prototype))?A=void 0:op(A)&&(A=A[c5],A===null&&(A=void 0))),A===void 0?Wv:A},xb=vd,Ql=function(I,A){return new(xb(I))(A===0?0:A)},zh=y,_b=Lo,f5=vs,Sb=_b("species"),Fa=function(I){return f5>=51||!zh(function(){var A=[],B=A.constructor={};return B[Sb]=function(){return{foo:1}},A[I](Boolean).foo!==1})},Hv=Gr,km=y,$v=Po,gd=mn,Vv=Mi,qv=yl,Pm=Mh,bl=Rh,tf=Ql,ju=Fa,mc=Lo,ip=vs,jm=mc("isConcatSpreadable"),vc=ip>=51||!km(function(){var I=[];return I[jm]=!1,I.concat()[0]!==I}),Nh=function(I){if(!gd(I))return!1;var A=I[jm];return A!==void 0?!!A:$v(I)},Uv=!vc||!ju("concat");Hv({target:"Array",proto:!0,arity:1,forced:Uv},{concat:function(A){var B=Vv(this),W=tf(B,0),J=0,ie,ve,je,xe,Re;for(ie=-1,je=arguments.length;ieve;)if(je=J[ve++],je!==je)return!0}else for(;ie>ve;ve++)if((I||ve in J)&&J[ve]===B)return I||ve||0;return!I&&-1}},R4={includes:Ro(!0),indexOf:Ro(!1)},gc={},Ht=fe,wd=Zo,sp=mr,Cu=R4.indexOf,no=gc,pi=Ht([].push),Gv=function(I,A){var B=sp(I),W=0,J=[],ie;for(ie in B)!wd(no,ie)&&wd(B,ie)&&pi(J,ie);for(;A.length>W;)wd(B,ie=A[W++])&&(~Cu(J,ie)||pi(J,ie));return J},nf=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],yc=Gv,D4=nf,Od=Object.keys||function(A){return yc(A,D4)},of=_t,Jv=tp,Tu=ga,Am=Pr,h5=mr,z4=Od;Cm.f=of&&!Jv?Object.defineProperties:function(A,B){Am(A);for(var W=h5(B),J=z4(B),ie=J.length,ve=0,je;ie>ve;)Tu.f(A,je=J[ve++],W[je]);return A};var di=Oi,Fh=di("document","documentElement"),m5=Yf,Ji=$c,Mm=m5("keys"),Au=function(I){return Mm[I]||(Mm[I]=Ji(I))},eu=Pr,v5=Cm,Ib=nf,N4=gc,g5=Fh,Xv=cm,kb=Au,Rm=">",af="<",Dm="prototype",zm="script",y5=kb("IE_PROTO"),sf=function(){},lp=function(I){return af+zm+Rm+I+af+"/"+zm+Rm},b5=function(I){I.write(lp("")),I.close();var A=I.parentWindow.Object;return I=null,A},Pb=function(){var I=Xv("iframe"),A="java"+zm+":",B;return I.style.display="none",g5.appendChild(I),I.src=String(A),B=I.contentWindow.document,B.open(),B.write(lp("document.F=Object")),B.close(),B.F},xd,Nm=function(){try{xd=new ActiveXObject("htmlfile")}catch{}Nm=typeof document<"u"?document.domain&&xd?b5(xd):Pb():b5(xd);for(var I=Ib.length;I--;)delete Nm[Dm][Ib[I]];return Nm()};N4[y5]=!0;var tu=Object.create||function(A,B){var W;return A!==null?(sf[Dm]=eu(A),W=new sf,sf[Dm]=null,W[y5]=A):W=Nm(),B===void 0?W:v5.f(W,B)},ru={},bc=Gv,jb=nf,wa=jb.concat("length","prototype");ru.f=Object.getOwnPropertyNames||function(A){return bc(A,wa)};var wl={},up=bd,L4=yl,Xi=Rh,F4=Array,B4=Math.max,Bh=function(I,A,B){for(var W=L4(I),J=up(A,W),ie=up(B===void 0?W:B,W),ve=F4(B4(ie-J,0)),je=0;JOn;On++)if((je||On in bt)&&(nc=bt[On],Fs=gr(nc,On,rt),I))if(A)mo[On]=Fs;else if(Fs)switch(I){case 3:return!0;case 5:return nc;case 6:return On;case 2:Mb(mo,nc)}else switch(I){case 4:return!1;case 7:Mb(mo,nc)}return ie?-1:W||J?J:mo}},Ba={forEach:lf(0),map:lf(1),filter:lf(2),some:lf(3),every:lf(4),find:lf(5),findIndex:lf(6),filterReject:lf(7)},eg=Gr,Fm=d,Bm=ir,f7=fe,Wm=_t,Hm=li,U4=y,Wa=Zo,I5=ko,Rb=Pr,Db=mr,k5=qc,P5=Zl,tg=xr,qh=tu,rg=Od,$m=ru,ng=wl,j5=ce,og=Rt,ig=ga,G4=Cm,J4=Pt,zb=He,Nb=Kt,X4=Yf,Lb=Au,C5=gc,Ed=$c,ag=Lo,K4=Qr,Vm=Jo,c9=Lm,Id=Yv,fp=cp,wc=Ba.forEach,Ol=Lb("hidden"),kd="Symbol",Fb="prototype",sg=fp.set,p7=fp.getterFor(kd),Ys=Object[Fb],Pd=Fm.Symbol,qm=Pd&&Pd[Fb],Bb=Fm.RangeError,Uh=Fm.TypeError,lg=Fm.QObject,T5=og.f,Gh=ig.f,Jh=ng.f,rr=J4.f,Y4=f7([].push),xl=X4("symbols"),ug=X4("op-symbols"),Q4=X4("wks"),Xh=!lg||!lg[Fb]||!lg[Fb].findChild,jd=function(I,A,B){var W=T5(Ys,A);W&&delete Ys[A],Gh(I,A,B),W&&I!==Ys&&Gh(Ys,A,W)},Um=Wm&&U4(function(){return qh(Gh({},"a",{get:function(){return Gh(this,"a",{value:7}).a}})).a!==7})?jd:Gh,Qs=function(I,A){var B=xl[I]=qh(qm);return sg(B,{type:kd,tag:I,description:A}),Wm||(B.description=A),B},cg=function(A,B,W){A===Ys&&cg(ug,B,W),Rb(A);var J=k5(B);return Rb(W),Wa(xl,J)?(W.enumerable?(Wa(A,Ol)&&A[Ol][J]&&(A[Ol][J]=!1),W=qh(W,{enumerable:tg(0,!1)})):(Wa(A,Ol)||Gh(A,Ol,tg(1,{})),A[Ol][J]=!0),Um(A,J,W)):Gh(A,J,W)},pp=function(A,B){Rb(A);var W=Db(B),J=rg(W).concat(Wb(W));return wc(J,function(ie){(!Wm||Bm(A5,W,ie))&&cg(A,ie,W[ie])}),A},Z4=function(A,B){return B===void 0?qh(A):pp(qh(A),B)},A5=function(A){var B=k5(A),W=Bm(rr,this,B);return this===Ys&&Wa(xl,B)&&!Wa(ug,B)?!1:W||!Wa(this,B)||!Wa(xl,B)||Wa(this,Ol)&&this[Ol][B]?W:!0},fg=function(A,B){var W=Db(A),J=k5(B);if(!(W===Ys&&Wa(xl,J)&&!Wa(ug,J))){var ie=T5(W,J);return ie&&Wa(xl,J)&&!(Wa(W,Ol)&&W[Ol][J])&&(ie.enumerable=!0),ie}},d7=function(A){var B=Jh(Db(A)),W=[];return wc(B,function(J){!Wa(xl,J)&&!Wa(C5,J)&&Y4(W,J)}),W},Wb=function(I){var A=I===Ys,B=Jh(A?ug:Db(I)),W=[];return wc(B,function(J){Wa(xl,J)&&(!A||Wa(Ys,J))&&Y4(W,xl[J])}),W};Hm||(Pd=function(){if(I5(qm,this))throw new Uh("Symbol is not a constructor");var A=!arguments.length||arguments[0]===void 0?void 0:P5(arguments[0]),B=Ed(A),W=function(J){var ie=this===void 0?Fm:this;ie===Ys&&Bm(W,ug,J),Wa(ie,Ol)&&Wa(ie[Ol],B)&&(ie[Ol][B]=!1);var ve=tg(1,J);try{Um(ie,B,ve)}catch(je){if(!(je instanceof Bb))throw je;jd(ie,B,ve)}};return Wm&&Xh&&Um(Ys,B,{configurable:!0,set:W}),Qs(B,A)},qm=Pd[Fb],zb(qm,"toString",function(){return p7(this).tag}),zb(Pd,"withoutSetter",function(I){return Qs(Ed(I),I)}),J4.f=A5,ig.f=cg,G4.f=pp,og.f=fg,$m.f=ng.f=d7,j5.f=Wb,K4.f=function(I){return Qs(ag(I),I)},Wm&&Nb(qm,"description",{configurable:!0,get:function(){return p7(this).description}})),eg({global:!0,constructor:!0,wrap:!0,forced:!Hm,sham:!Hm},{Symbol:Pd}),wc(rg(Q4),function(I){Vm(I)}),eg({target:kd,stat:!0,forced:!Hm},{useSetter:function(){Xh=!0},useSimple:function(){Xh=!1}}),eg({target:"Object",stat:!0,forced:!Hm,sham:!Wm},{create:Z4,defineProperty:cg,defineProperties:pp,getOwnPropertyDescriptor:fg}),eg({target:"Object",stat:!0,forced:!Hm},{getOwnPropertyNames:d7}),c9(),Id(Pd,kd),C5[Ol]=!0;var M5=li,e6=M5&&!!Symbol.for&&!!Symbol.keyFor,Ki=Gr,Hb=Oi,f9=Zo,R5=Zl,t6=Yf,$b=e6,Vb=t6("string-to-symbol-registry"),r6=t6("symbol-to-string-registry");Ki({target:"Symbol",stat:!0,forced:!$b},{for:function(I){var A=R5(I);if(f9(Vb,A))return Vb[A];var B=Hb("Symbol")(A);return Vb[A]=B,r6[B]=A,B}});var n6=Gr,qb=Zo,Ub=xi,Kh=No,h7=Yf,o6=e6,D5=h7("symbol-to-string-registry");n6({target:"Symbol",stat:!0,forced:!o6},{keyFor:function(A){if(!Ub(A))throw new TypeError(Kh(A)+" is not a symbol");if(qb(D5,A))return D5[A]}});var Yi=fe,ei=Yi([].slice),i6=fe,m7=Po,p9=yt,pg=ae,z5=Zl,zu=i6([].push),_l=function(I){if(p9(I))return I;if(m7(I)){for(var A=I.length,B=[],W=0;W=A.length)return I.target=void 0,tw(void 0,!0);switch(I.kind){case"keys":return tw(B,!1);case"values":return tw(A[B],!1)}return tw([B,A[B]],!1)},"values"),mp.Arguments=mp.Array;var rw={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},$7=rw,P9=d,j9=Xl,Nu=gl,la=gg,V7=Lo,k6=V7("toStringTag");for(var nw in $7){var P6=P9[nw],r2=P6&&P6.prototype;r2&&j9(r2)!==k6&&Nu(r2,k6,nw),la[nw]=la.Array}var Lu=p6,j6=Lu,C9=Lo,T9=ga.f,q7=C9("metadata"),C6=Function.prototype;C6[q7]===void 0&&T9(C6,q7,{value:null});var ow=Jo;ow("asyncDispose");var U7=Jo;U7("dispose");var A9=Jo;A9("metadata");var G7=j6,T6=G7,M9=Oi,A6=fe,n2=M9("Symbol"),iw=n2.keyFor,M6=A6(n2.prototype.valueOf),aw=n2.isRegisteredSymbol||function(A){try{return iw(M6(A))!==void 0}catch{return!1}},R9=Gr,J7=aw;R9({target:"Symbol",stat:!0},{isRegisteredSymbol:J7});for(var X7=Yf,K7=Oi,Y7=fe,sw=xi,Q7=Lo,o2=K7("Symbol"),Z7=o2.isWellKnownSymbol,R6=K7("Object","getOwnPropertyNames"),i2=Y7(o2.prototype.valueOf),lw=X7("wks"),uw=0,ti=R6(o2),e8=ti.length;uw=ie?I?"":void 0:(ve=L6(W,J),ve<55296||ve>56319||J+1===ie||(je=L6(W,J+1))<56320||je>57343?I?pw(W,J):ve:I?F6(W,J,J+2):(ve-55296<<10)+(je-56320)+65536)}},F9={codeAt:B6(!1),charAt:B6(!0)},i8=F9.charAt,dw=Zl,hw=cp,a8=ew,s2=e1,mw="String Iterator",W6=hw.set,B9=hw.getterFor(mw);a8(String,"String",function(I){W6(this,{type:mw,string:dw(I),index:0})},function(){var A=B9(this),B=A.string,W=A.index,J;return W>=B.length?s2(void 0,!0):(J=i8(B,W),A.index+=J.length,s2(J,!1))});var l2=Qr,H6=l2.f("iterator"),$6=H6,vw=$6,gw=vw,V6=gw,W9=V6,u2=W9,Og=u2,s8=r(Og);function r1(I){"@babel/helpers - typeof";return r1=typeof pf=="function"&&typeof s8=="symbol"?function(A){return typeof A}:function(A){return A&&typeof pf=="function"&&A.constructor===pf&&A!==pf.prototype?"symbol":typeof A},r1(I)}var yw=Qr,n1=yw.f("toPrimitive"),vp=n1,Ei=vp,df=Ei,su=df,H9=su,l8=H9,$9=l8,q6=r($9);function U6(I,A){if(r1(I)!=="object"||I===null)return I;var B=I[q6];if(B!==void 0){var W=B.call(I,A||"default");if(r1(W)!=="object")return W;throw new TypeError("@@toPrimitive must return a primitive value.")}return(A==="string"?String:Number)(I)}function bw(I){var A=U6(I,"string");return r1(A)==="symbol"?A:String(A)}function ri(I,A){for(var B=0;B=0:je>xe;xe+=Re)xe in ve&&(J=B(J,ve[xe],xe,ie));return J}},m8={left:h8(!1),right:h8(!0)},eP=y,d2=function(I,A){var B=[][I];return!!B&&eP(function(){B.call(null,A||function(){return 1},1)})},Q9=d,Z9=ae,h2=Z9(Q9.process)==="process",_g=Gr,eI=m8.left,e0=d2,yp=vs,v8=h2,X6=!v8&&yp>79&&yp<83,tI=X6||!e0("reduce");_g({target:"Array",proto:!0,forced:tI},{reduce:function(A){var B=arguments.length;return eI(this,A,B,B>1?arguments[1]:void 0)}});var g8=xs,y8=g8("Array","reduce"),rI=ko,K6=y8,Sg=Array.prototype,Y6=function(I){var A=I.reduce;return I===Sg||rI(Sg,I)&&A===Sg.reduce?K6:A},nI=Y6,xw=nI,Q6=xw,Z6=r(Q6),oI=Gr,tP=Ba.filter,iI=Fa,aI=iI("filter");oI({target:"Array",proto:!0,forced:!aI},{filter:function(A){return tP(this,A,arguments.length>1?arguments[1]:void 0)}});var sI=xs,ex=sI("Array","filter"),lI=ko,Rd=ex,tx=Array.prototype,_w=function(I){var A=I.filter;return I===tx||lI(tx,I)&&A===tx.filter?Rd:A},rP=_w,uI=rP,cI=uI,Ss=r(cI),fI=Gr,pI=Ba.map,b8=Fa,w8=b8("map");fI({target:"Array",proto:!0,forced:!w8},{map:function(A){return pI(this,A,arguments.length>1?arguments[1]:void 0)}});var O8=xs,x8=O8("Array","map"),dI=ko,rx=x8,t0=Array.prototype,_8=function(I){var A=I.map;return I===t0||dI(t0,I)&&A===t0.map?rx:A},hI=_8,mI=hI,nx=mI,xa=r(nx),S8=Po,r0=yl,ox=Mh,ix=Uc,ax=function(I,A,B,W,J,ie,ve,je){for(var xe=J,Re=0,We=ve?ix(ve,je):!1,ut,rt;Re0&&S8(ut)?(rt=r0(ut),xe=ax(I,A,ut,rt,xe,ie-1)-1):(ox(xe+1),I[xe]=ut),xe++),Re++;return xe},vI=ax,m2=Gr,gI=vI,Sw=Vs,E8=Mi,sx=yl,Ew=Ql;m2({target:"Array",proto:!0},{flatMap:function(A){var B=E8(this),W=sx(B),J;return Sw(A),J=Ew(B,0),J.length=gI(J,B,B,W,0,1,A,arguments.length>1?arguments[1]:void 0),J}});var Iw=xs,ua=Iw("Array","flatMap"),lx=ko,yI=ua,ux=Array.prototype,cx=function(I){var A=I.flatMap;return I===ux||lx(ux,I)&&A===ux.flatMap?yI:A},fx=cx,I8=fx,bI=I8,px=r(bI);function n0(I){return new nP(I)}var k8=function(){function I(A,B,W){var J,ie,ve;t(this,I),Fu(this,"_listeners",{add:Md(J=this._add).call(J,this),remove:Md(ie=this._remove).call(ie,this),update:Md(ve=this._update).call(ve,this)}),this._source=A,this._transformers=B,this._target=W}return Ha(I,[{key:"all",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:"start",value:function(){return this._source.on("add",this._listeners.add),this._source.on("remove",this._listeners.remove),this._source.on("update",this._listeners.update),this}},{key:"stop",value:function(){return this._source.off("add",this._listeners.add),this._source.off("remove",this._listeners.remove),this._source.off("update",this._listeners.update),this}},{key:"_transformItems",value:function(B){var W;return Z6(W=this._transformers).call(W,function(J,ie){return ie(J)},B)}},{key:"_add",value:function(B,W){W!=null&&this._target.add(this._transformItems(this._source.get(W.items)))}},{key:"_update",value:function(B,W){W!=null&&this._target.update(this._transformItems(this._source.get(W.items)))}},{key:"_remove",value:function(B,W){W!=null&&this._target.remove(this._transformItems(W.oldData))}}]),I}(),nP=function(){function I(A){t(this,I),Fu(this,"_transformers",[]),this._source=A}return Ha(I,[{key:"filter",value:function(B){return this._transformers.push(function(W){return Ss(W).call(W,B)}),this}},{key:"map",value:function(B){return this._transformers.push(function(W){return xa(W).call(W,B)}),this}},{key:"flatMap",value:function(B){return this._transformers.push(function(W){return px(W).call(W,B)}),this}},{key:"to",value:function(B){return new k8(this._source,this._transformers,B)}}]),I}(),P8=ir,j8=Pr,wI=Jf,kw=function(I,A,B){var W,J;j8(I);try{if(W=wI(I,"return"),!W){if(A==="throw")throw B;return B}W=P8(W,I)}catch(ie){J=!0,W=ie}if(A==="throw")throw B;if(J)throw W;return j8(W),B},v2=Pr,dx=kw,Pw=function(I,A,B,W){try{return W?A(v2(B)[0],B[1]):A(B)}catch(J){dx(I,"throw",J)}},C8=Lo,T8=gg,hx=C8("iterator"),hf=Array.prototype,i1=function(I){return I!==void 0&&(T8.Array===I||hf[hx]===I)},A8=Xl,jw=Jf,Bu=Sn,Wu=gg,Cw=Lo,o0=Cw("iterator"),bp=function(I){if(!Bu(I))return jw(I,o0)||jw(I,"@@iterator")||Wu[A8(I)]},i0=ir,OI=Vs,Kn=Pr,Eg=No,Tw=bp,wp=TypeError,Ig=function(I,A){var B=arguments.length<2?Tw(I):A;if(OI(B))return Kn(i0(B,I));throw new wp(Eg(I)+" is not iterable")},M8=Uc,R8=ir,kg=Mi,g2=Pw,a1=i1,y2=Yl,Aw=yl,b2=Rh,D8=Ig,oP=bp,z8=Array,w2=function(A){var B=kg(A),W=y2(this),J=arguments.length,ie=J>1?arguments[1]:void 0,ve=ie!==void 0;ve&&(ie=M8(ie,J>2?arguments[2]:void 0));var je=oP(B),xe=0,Re,We,ut,rt,bt,gr;if(je&&!(this===z8&&a1(je)))for(rt=D8(B,je),bt=rt.next,We=W?new this:[];!(ut=R8(bt,rt)).done;xe++)gr=ve?g2(rt,ie,[ut.value,xe],!0):ut.value,b2(We,xe,gr);else for(Re=Aw(B),We=W?new this(Re):z8(Re);Re>xe;xe++)gr=ve?ie(B[xe],xe):B[xe],b2(We,xe,gr);return We.length=xe,We},Mw=Lo,N8=Mw("iterator"),Es=!1;try{var _a=0,rl={next:function(){return{done:!!_a++}},return:function(){Es=!0}};rl[N8]=function(){return this},Array.from(rl,function(){throw 2})}catch{}var Pg=function(I,A){try{if(!A&&!Es)return!1}catch{return!1}var B=!1;try{var W={};W[N8]=function(){return{next:function(){return{done:B=!0}}}},I(W)}catch{}return B},jg=Gr,Cg=w2,Tg=Pg,El=!Tg(function(I){Array.from(I)});jg({target:"Array",stat:!0,forced:El},{from:Cg});var mf=rn,a0=mf.Array.from,L8=a0,mx=L8,Ag=mx,lu=r(Ag),Rw=bp,s1=Rw,Dw=s1,vx=Dw,l1=vx,Hu=l1,Il=Hu,u1=Il,$u=u1,Op=r($u),F8=$u,zw=r(F8),xp=Gr,ls=Po;xp({target:"Array",stat:!0},{isArray:ls});var c1=rn,f1=c1.Array.isArray,p1=f1,oo=p1,B8=oo,W8=B8,d1=W8,Dd=d1,Sa=Dd,_p=r(Sa);function Mg(I){if(_p(I))return I}var O2=_t,gx=Po,yx=TypeError,xc=Object.getOwnPropertyDescriptor,x2=O2&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(I){return I instanceof TypeError}}(),bx=x2?function(I,A){if(gx(I)&&!xc(I,"length").writable)throw new yx("Cannot set read only .length");return I.length=A}:function(I,A){return I.length=A},Is=Gr,Zi=Mi,Ea=yl,_2=bx,Vu=Mh,qu=y,Rg=qu(function(){return[].push.call({length:4294967296},1)!==4294967297}),vf=function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(I){return I instanceof TypeError}},_c=Rg||!vf();Is({target:"Array",proto:!0,arity:1,forced:_c},{push:function(A){var B=Zi(this),W=Ea(B),J=arguments.length;Vu(W+J);for(var ie=0;ieI.length)&&(A=I.length);for(var B=0,W=new Array(A);B1?arguments[1]:void 0)},bn=Gr,v1=Sp;bn({target:"Array",proto:!0,forced:[].forEach!==v1},{forEach:v1});var Hw=xs,Bd=Hw("Array","forEach"),I2=Bd,X8=I2,Ex=Xl,$w=Zo,d0=ko,k2=X8,h0=Array.prototype,K8={DOMTokenList:!0,NodeList:!0},Vw=function(I){var A=I.forEach;return I===h0||d0(h0,I)&&A===h0.forEach||$w(K8,Ex(I))?k2:A},Vg=Vw,bf=r(Vg),Di=Gr,qw=fe,Ep=Po,m0=qw([].reverse),wn=[1,2];Di({target:"Array",proto:!0,forced:String(wn)===String(wn.reverse())},{reverse:function(){return Ep(this)&&(this.length=this.length),m0(this)}});var Lr=xs,kl=Lr("Array","reverse"),Ia=ko,Wd=kl,v0=Array.prototype,Hd=function(I){var A=I.reverse;return I===v0||Ia(v0,I)&&A===v0.reverse?Wd:A},Ix=Hd,Uw=Ix,g1=Uw,Gw=r(g1),So=No,Y8=TypeError,wf=function(I,A){if(!delete I[A])throw new Y8("Cannot delete property "+So(A)+" of "+So(I))},qg=Gr,Of=Mi,Ip=bd,ka=Rv,y1=yl,P2=bx,Jw=Mh,kx=Ql,Q8=Rh,Ug=wf,b1=Fa,Z8=b1("splice"),Xw=Math.max,Px=Math.min;qg({target:"Array",proto:!0,forced:!Z8},{splice:function(A,B){var W=Of(this),J=y1(W),ie=Ip(A,J),ve=arguments.length,je,xe,Re,We,ut,rt;for(ve===0?je=xe=0:ve===1?(je=0,xe=J-ie):(je=ve-2,xe=Px(Xw(ka(B),0),J-ie)),Jw(J+je-xe),Re=kx(W,xe),We=0;WeJ-xe+je;We--)Ug(W,We-1)}else if(je>xe)for(We=J-xe;We>ie;We--)ut=We+xe-1,rt=We+je-1,ut in W?W[rt]=W[ut]:Ug(W,rt);for(We=0;Weie;)for(var xe=Cx(arguments[ie++]),Re=ve?nS(Yw(xe),ve(xe)):Yw(xe),We=Re.length,ut=0,rt;We>ut;)rt=Re[ut++],(!jp||C2(je,xe,rt))&&(W[rt]=xe[rt]);return W}:w1,T2=Gr,y0=Zw;T2({target:"Object",stat:!0,arity:2,forced:Object.assign!==y0},{assign:y0});var b0=rn,O1=b0.Object.assign,A2=O1,eO=A2,M2=eO,tO=r(M2),rO=Gr,Tx=y,x1=Mi,Xg=Td,R2=V5,Kg=Tx(function(){Xg(1)});rO({target:"Object",stat:!0,forced:Kg,sham:!R2},{getPrototypeOf:function(A){return Xg(x1(A))}});var D2=rn,nO=D2.Object.getPrototypeOf,oi=nO,Yg=oi,qd=Gr,oS=_t,z2=tu;qd({target:"Object",stat:!0,sham:!oS},{create:z2});var oO=rn,iO=oO.Object,Qg=function(A,B){return iO.create(A,B)},Ax=Qg,N2=Ax,Cp=N2,iS=r(Cp),aO=rn,aS=q;aO.JSON||(aO.JSON={stringify:JSON.stringify});var sO=function(A,B,W){return aS(aO.JSON.stringify,null,arguments)},sS=sO,Zg=sS,lO=Zg,uO=r(lO),L2=typeof Bun=="function"&&Bun&&typeof Bun.version=="string",w0=TypeError,Ps=function(I,A){if(IB,ve=lS(W)?W:ey(W),je=ie?uS(arguments,B):[],xe=ie?function(){cO(ve,this,je)}:ve;return A?I(xe,J):I(xe)}:I},Rx=Gr,B2=d,pO=ty,_1=pO(B2.setInterval,!0);Rx({global:!0,bind:!0,forced:B2.setInterval!==_1},{setInterval:_1});var Gd=Gr,dO=d,ry=ty,Xu=ry(dO.setTimeout,!0);Gd({global:!0,bind:!0,forced:dO.setTimeout!==Xu},{setTimeout:Xu});var Dx=rn,hO=Dx.setTimeout,SI=hO,W2=r(SI),zx={exports:{}};(function(I){function A(W){if(W)return B(W);this._callbacks=new Map}function B(W){return Object.assign(W,A.prototype),W._callbacks=new Map,W}A.prototype.on=function(W,J){let ie=this._callbacks.get(W)??[];return ie.push(J),this._callbacks.set(W,ie),this},A.prototype.once=function(W,J){let ie=(...ve)=>{this.off(W,ie),J.apply(this,ve)};return ie.fn=J,this.on(W,ie),this},A.prototype.off=function(W,J){if(W===void 0&&J===void 0)return this._callbacks.clear(),this;if(J===void 0)return this._callbacks.delete(W),this;let ie=this._callbacks.get(W);if(ie){for(let[ve,je]of ie.entries())if(je===J||je.fn===J){ie.splice(ve,1);break}ie.length===0?this._callbacks.delete(W):this._callbacks.set(W,ie)}return this},A.prototype.emit=function(W,...J){let ie=this._callbacks.get(W);if(ie){let ve=[...ie];for(let je of ve)je.apply(this,J)}return this},A.prototype.listeners=function(W){return this._callbacks.get(W)??[]},A.prototype.listenerCount=function(W){if(W)return this.listeners(W).length;let J=0;for(let ie of this._callbacks.values())J+=ie.length;return J},A.prototype.hasListeners=function(W){return this.listenerCount(W)>0},A.prototype.addEventListener=A.prototype.on,A.prototype.removeListener=A.prototype.off,A.prototype.removeEventListener=A.prototype.off,A.prototype.removeAllListeners=A.prototype.off,I.exports=A})(zx);var EI=zx.exports,Tp=r(EI);function $a(){return $a=Object.assign||function(I){for(var A=1;A"u"?{style:{}}:document.createElement("div"),O0="function",S1=Math.round,x0=Math.abs,gO=Date.now;function ny(I,A){for(var B,W,J=A[0].toUpperCase()+A.slice(1),ie=0;ie"u"?Ap={}:Ap=window;var Fx=ny(Lx.style,"touchAction"),Bx=Fx!==void 0;function cS(){if(!Bx)return!1;var I={},A=Ap.CSS&&Ap.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(B){return I[B]=A?Ap.CSS.supports("touch-action",B):!0}),I}var H2="compute",Sc="auto",_0="manipulation",Mp="none",E1="pan-x",oy="pan-y",fu=cS(),Wx=/mobile|tablet|ip(ad|hone|od)|android/i,Hx="ontouchstart"in Ap,Rp=ny(Ap,"PointerEvent")!==void 0,yO=Hx&&Wx.test(navigator.userAgent),I1="touch",$x="pen",Xd="mouse",k1="kinect",S0=25,Pa=1,E0=2,Ii=4,Cl=8,iy=1,I0=2,xf=4,Kd=8,k0=16,js=I0|xf,Ku=Kd|k0,bO=js|Ku,fS=["x","y"],P1=["clientX","clientY"];function Yd(I,A,B){var W;if(I)if(I.forEach)I.forEach(A,B);else if(I.length!==void 0)for(W=0;W-1}function C1(I){if(j1(I,Mp))return Mp;var A=j1(I,E1),B=j1(I,oy);return A&&B?Mp:A||B?A?E1:oy:j1(I,_0)?_0:Sc}var $2=function(){function I(B,W){this.manager=B,this.set(W)}var A=I.prototype;return A.set=function(W){W===H2&&(W=this.compute()),Bx&&this.manager.element.style&&fu[W]&&(this.manager.element.style[Fx]=W),this.actions=W.toLowerCase().trim()},A.update=function(){this.set(this.manager.options.touchAction)},A.compute=function(){var W=[];return Yd(this.manager.recognizers,function(J){Tl(J.options.enable,[J])&&(W=W.concat(J.getTouchAction()))}),C1(W.join(" "))},A.preventDefaults=function(W){var J=W.srcEvent,ie=W.offsetDirection;if(this.manager.session.prevented){J.preventDefault();return}var ve=this.actions,je=j1(ve,Mp)&&!fu[Mp],xe=j1(ve,oy)&&!fu[oy],Re=j1(ve,E1)&&!fu[E1];if(je){var We=W.pointers.length===1,ut=W.distance<2,rt=W.deltaTime<250;if(We&&ut&&rt)return}if(!(Re&&xe)&&(je||xe&&ie&js||Re&&ie&Ku))return this.preventSrc(J)},A.preventSrc=function(W){this.manager.session.prevented=!0,W.preventDefault()},I}();function T1(I,A){for(;I;){if(I===A)return!0;I=I.parentNode}return!1}function wO(I){var A=I.length;if(A===1)return{x:S1(I[0].clientX),y:S1(I[0].clientY)};for(var B=0,W=0,J=0;J=x0(A)?I<0?I0:xf:A<0?Kd:k0}function Ux(I,A){var B=A.center,W=I.offsetDelta||{},J=I.prevDelta||{},ie=I.prevInput||{};(A.eventType===Pa||ie.eventType===Ii)&&(J=I.prevDelta={x:ie.deltaX||0,y:ie.deltaY||0},W=I.offsetDelta={x:B.x,y:B.y}),A.deltaX=J.x+(B.x-W.x),A.deltaY=J.y+(B.y-W.y)}function P0(I,A,B){return{x:A/I||0,y:B/I||0}}function Gx(I,A){return ay(A[0],A[1],P1)/ay(I[0],I[1],P1)}function pS(I,A){return qx(A[1],A[0],P1)+qx(I[1],I[0],P1)}function OO(I,A){var B=I.lastInterval||A,W=A.timeStamp-B.timeStamp,J,ie,ve,je;if(A.eventType!==Cl&&(W>S0||B.velocity===void 0)){var xe=A.deltaX-B.deltaX,Re=A.deltaY-B.deltaY,We=P0(W,xe,Re);ie=We.x,ve=We.y,J=x0(We.x)>x0(We.y)?We.x:We.y,je=A1(xe,Re),I.lastInterval=A}else J=B.velocity,ie=B.velocityX,ve=B.velocityY,je=B.direction;A.velocity=J,A.velocityX=ie,A.velocityY=ve,A.direction=je}function xO(I,A){var B=I.session,W=A.pointers,J=W.length;B.firstInput||(B.firstInput=Vx(A)),J>1&&!B.firstMultiple?B.firstMultiple=Vx(A):J===1&&(B.firstMultiple=!1);var ie=B.firstInput,ve=B.firstMultiple,je=ve?ve.center:ie.center,xe=A.center=wO(W);A.timeStamp=gO(),A.deltaTime=A.timeStamp-ie.timeStamp,A.angle=qx(je,xe),A.distance=ay(je,xe),Ux(B,A),A.offsetDirection=A1(A.deltaX,A.deltaY);var Re=P0(A.deltaTime,A.deltaX,A.deltaY);A.overallVelocityX=Re.x,A.overallVelocityY=Re.y,A.overallVelocity=x0(Re.x)>x0(Re.y)?Re.x:Re.y,A.scale=ve?Gx(ve.pointers,W):1,A.rotation=ve?pS(ve.pointers,W):0,A.maxPointers=B.prevInput?A.pointers.length>B.prevInput.maxPointers?A.pointers.length:B.prevInput.maxPointers:A.pointers.length,OO(B,A);var We=I.element,ut=A.srcEvent,rt;ut.composedPath?rt=ut.composedPath()[0]:ut.path?rt=ut.path[0]:rt=ut.target,T1(rt,We)&&(We=rt),A.target=We}function sy(I,A,B){var W=B.pointers.length,J=B.changedPointers.length,ie=A&Pa&&W-J===0,ve=A&(Ii|Cl)&&W-J===0;B.isFirst=!!ie,B.isFinal=!!ve,ie&&(I.session={}),B.eventType=A,xO(I,B),I.emit("hammer.input",B),I.recognize(B),I.session.prevInput=B}function M1(I){return I.trim().split(/\s+/g)}function ly(I,A,B){Yd(M1(A),function(W){I.addEventListener(W,B,!1)})}function Dp(I,A,B){Yd(M1(A),function(W){I.removeEventListener(W,B,!1)})}function Ko(I){var A=I.ownerDocument||I;return A.defaultView||A.parentWindow||window}var R1=function(){function I(B,W){var J=this;this.manager=B,this.callback=W,this.element=B.element,this.target=B.options.inputTarget,this.domHandler=function(ie){Tl(B.options.enable,[B])&&J.handler(ie)},this.init()}var A=I.prototype;return A.handler=function(){},A.init=function(){this.evEl&&ly(this.element,this.evEl,this.domHandler),this.evTarget&&ly(this.target,this.evTarget,this.domHandler),this.evWin&&ly(Ko(this.element),this.evWin,this.domHandler)},A.destroy=function(){this.evEl&&Dp(this.element,this.evEl,this.domHandler),this.evTarget&&Dp(this.target,this.evTarget,this.domHandler),this.evWin&&Dp(Ko(this.element),this.evWin,this.domHandler)},I}();function j0(I,A,B){if(I.indexOf&&!B)return I.indexOf(A);for(var W=0;Wxe[A]}):W=W.sort()),W}var _O={touchstart:Pa,touchmove:E0,touchend:Ii,touchcancel:Cl},SO="touchstart touchmove touchend touchcancel",D1=function(I){il(A,I);function A(){var W;return A.prototype.evTarget=SO,W=I.apply(this,arguments)||this,W.targetIds={},W}var B=A.prototype;return B.handler=function(J){var ie=_O[J.type],ve=mS.call(this,J,ie);ve&&this.callback(this.manager,ie,{pointers:ve[0],changedPointers:ve[1],pointerType:I1,srcEvent:J})},A}(R1);function mS(I,A){var B=zp(I.touches),W=this.targetIds;if(A&(Pa|E0)&&B.length===1)return W[B[0].identifier]=!0,[B,B];var J,ie,ve=zp(I.changedTouches),je=[],xe=this.target;if(ie=B.filter(function(Re){return T1(Re.target,xe)}),A===Pa)for(J=0;J-1&&J.splice(je,1)};setTimeout(ie,At)}}function kO(I,A){I&Pa?(this.primaryTouch=A.changedPointers[0].identifier,py.call(this,A)):I&(Ii|Cl)&&py.call(this,A)}function dy(I){for(var A=I.srcEvent.clientX,B=I.srcEvent.clientY,W=0;W-1&&this.requireFail.splice(J,1),this},A.hasRequireFailures=function(){return this.requireFail.length>0},A.canRecognizeWith=function(W){return!!this.simultaneous[W.id]},A.emit=function(W){var J=this,ie=this.state;function ve(je){J.manager.emit(je,W)}ie=Yu&&ve(J.options.event+zi(ie))},A.tryEmit=function(W){if(this.canEmit())return this.emit(W);this.state=vi},A.canEmit=function(){for(var W=0;Wie.threshold&&xe&ie.direction},B.attrTest=function(J){return ea.prototype.attrTest.call(this,J)&&(this.state&ki||!(this.state&ki)&&this.directionTest(J))},B.emit=function(J){this.pX=J.deltaX,this.pY=J.deltaY;var ie=A0(J.direction);ie&&(J.additionalEvent=this.options.event+ie),I.prototype.emit.call(this,J)},A}(ea),Ml=function(I){il(A,I);function A(W){return W===void 0&&(W={}),I.call(this,$a({event:"swipe",threshold:10,velocity:.3,direction:js|Ku,pointers:1},W))||this}var B=A.prototype;return B.getTouchAction=function(){return M0.prototype.getTouchAction.call(this)},B.attrTest=function(J){var ie=this.options.direction,ve;return ie&(js|Ku)?ve=J.overallVelocity:ie&js?ve=J.overallVelocityX:ie&Ku&&(ve=J.overallVelocityY),I.prototype.attrTest.call(this,J)&&ie&J.offsetDirection&&J.distance>this.options.threshold&&J.maxPointers===this.options.pointers&&x0(ve)>this.options.velocity&&J.eventType&Ii},B.emit=function(J){var ie=A0(J.offsetDirection);ie&&this.manager.emit(this.options.event+ie,J),this.manager.emit(this.options.event,J)},A}(ea),U2=function(I){il(A,I);function A(W){return W===void 0&&(W={}),I.call(this,$a({event:"pinch",threshold:0,pointers:2},W))||this}var B=A.prototype;return B.getTouchAction=function(){return[Mp]},B.attrTest=function(J){return I.prototype.attrTest.call(this,J)&&(Math.abs(J.scale-1)>this.options.threshold||this.state&ki)},B.emit=function(J){if(J.scale!==1){var ie=J.scale<1?"in":"out";J.additionalEvent=this.options.event+ie}I.prototype.emit.call(this,J)},A}(ea),Kx=function(I){il(A,I);function A(W){return W===void 0&&(W={}),I.call(this,$a({event:"rotate",threshold:0,pointers:2},W))||this}var B=A.prototype;return B.getTouchAction=function(){return[Mp]},B.attrTest=function(J){return I.prototype.attrTest.call(this,J)&&(Math.abs(J.rotation)>this.options.threshold||this.state&ki)},A}(ea),Yx=function(I){il(A,I);function A(W){var J;return W===void 0&&(W={}),J=I.call(this,$a({event:"press",pointers:1,time:251,threshold:9},W))||this,J._timer=null,J._input=null,J}var B=A.prototype;return B.getTouchAction=function(){return[Sc]},B.process=function(J){var ie=this,ve=this.options,je=J.pointers.length===ve.pointers,xe=J.distanceve.time;if(this._input=J,!xe||!je||J.eventType&(Ii|Cl)&&!Re)this.reset();else if(J.eventType&Pa)this.reset(),this._timer=setTimeout(function(){ie.state=Al,ie.tryEmit()},ve.time);else if(J.eventType&Ii)return Al;return vi},B.reset=function(){clearTimeout(this._timer)},B.emit=function(J){this.state===Al&&(J&&J.eventType&Ii?this.manager.emit(this.options.event+"up",J):(this._input.timeStamp=gO(),this.manager.emit(this.options.event,this._input)))},A}(Va),N1={domEvents:!1,touchAction:H2,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},Qx=[[Kx,{enable:!1}],[U2,{enable:!1},["rotate"]],[Ml,{direction:js}],[M0,{direction:js},["swipe"]],[ja],[ja,{event:"doubletap",taps:2},["tap"]],[Yx]],PO=1,R0=2;function jO(I,A){var B=I.element;if(B.style){var W;Yd(I.options.cssProps,function(J,ie){W=ny(B.style,ie),A?(I.oldCssProps[W]=B.style[W],B.style[W]=J):B.style[W]=I.oldCssProps[W]||""}),A||(I.oldCssProps={})}}function Zx(I,A){var B=document.createEvent("Event");B.initEvent(I,!0,!0),B.gesture=A,A.target.dispatchEvent(B)}var G2=function(){function I(B,W){var J=this;this.options=Jd({},N1,W||{}),this.options.inputTarget=this.options.inputTarget||B,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=B,this.input=Eo(this),this.touchAction=new $2(this,this.options.touchAction),jO(this,!0),Yd(this.options.recognizers,function(ie){var ve=J.add(new ie[0](ie[1]));ie[2]&&ve.recognizeWith(ie[2]),ie[3]&&ve.requireFailure(ie[3])},this)}var A=I.prototype;return A.set=function(W){return Jd(this.options,W),W.touchAction&&this.touchAction.update(),W.inputTarget&&(this.input.destroy(),this.input.target=W.inputTarget,this.input.init()),this},A.stop=function(W){this.session.stopped=W?R0:PO},A.recognize=function(W){var J=this.session;if(!J.stopped){this.touchAction.preventDefaults(W);var ie,ve=this.recognizers,je=J.curRecognizer;(!je||je&&je.state&Al)&&(J.curRecognizer=null,je=null);for(var xe=0;xe1?arguments[1]:void 0)},bn=Gr,v1=Sp;bn({target:"Array",proto:!0,forced:[].forEach!==v1},{forEach:v1});var Hw=xs,Bd=Hw("Array","forEach"),I2=Bd,X8=I2,Ex=Xl,$w=Zo,d0=ko,k2=X8,h0=Array.prototype,K8={DOMTokenList:!0,NodeList:!0},Vw=function(I){var A=I.forEach;return I===h0||d0(h0,I)&&A===h0.forEach||$w(K8,Ex(I))?k2:A},Vg=Vw,bf=r(Vg),Di=Gr,qw=fe,Ep=Po,m0=qw([].reverse),wn=[1,2];Di({target:"Array",proto:!0,forced:String(wn)===String(wn.reverse())},{reverse:function(){return Ep(this)&&(this.length=this.length),m0(this)}});var Lr=xs,kl=Lr("Array","reverse"),Ia=ko,Wd=kl,v0=Array.prototype,Hd=function(I){var A=I.reverse;return I===v0||Ia(v0,I)&&A===v0.reverse?Wd:A},Ix=Hd,Uw=Ix,g1=Uw,Gw=r(g1),So=No,Y8=TypeError,wf=function(I,A){if(!delete I[A])throw new Y8("Cannot delete property "+So(A)+" of "+So(I))},qg=Gr,Of=Mi,Ip=bd,ka=Rv,y1=yl,P2=bx,Jw=Mh,kx=Ql,Q8=Rh,Ug=wf,b1=Fa,Z8=b1("splice"),Xw=Math.max,Px=Math.min;qg({target:"Array",proto:!0,forced:!Z8},{splice:function(A,B){var W=Of(this),J=y1(W),ie=Ip(A,J),ve=arguments.length,je,xe,Re,We,ut,rt;for(ve===0?je=xe=0:ve===1?(je=0,xe=J-ie):(je=ve-2,xe=Px(Xw(ka(B),0),J-ie)),Jw(J+je-xe),Re=kx(W,xe),We=0;WeJ-xe+je;We--)Ug(W,We-1)}else if(je>xe)for(We=J-xe;We>ie;We--)ut=We+xe-1,rt=We+je-1,ut in W?W[rt]=W[ut]:Ug(W,rt);for(We=0;Weie;)for(var xe=Cx(arguments[ie++]),Re=ve?nS(Yw(xe),ve(xe)):Yw(xe),We=Re.length,ut=0,rt;We>ut;)rt=Re[ut++],(!jp||C2(je,xe,rt))&&(W[rt]=xe[rt]);return W}:w1,T2=Gr,y0=Zw;T2({target:"Object",stat:!0,arity:2,forced:Object.assign!==y0},{assign:y0});var b0=rn,O1=b0.Object.assign,A2=O1,eO=A2,M2=eO,tO=r(M2),rO=Gr,Tx=y,x1=Mi,Xg=Td,R2=V5,Kg=Tx(function(){Xg(1)});rO({target:"Object",stat:!0,forced:Kg,sham:!R2},{getPrototypeOf:function(A){return Xg(x1(A))}});var D2=rn,nO=D2.Object.getPrototypeOf,oi=nO,Yg=oi,qd=Gr,oS=_t,z2=tu;qd({target:"Object",stat:!0,sham:!oS},{create:z2});var oO=rn,iO=oO.Object,Qg=function(A,B){return iO.create(A,B)},Ax=Qg,N2=Ax,Cp=N2,iS=r(Cp),aO=rn,aS=q;aO.JSON||(aO.JSON={stringify:JSON.stringify});var sO=function(A,B,W){return aS(aO.JSON.stringify,null,arguments)},sS=sO,Zg=sS,lO=Zg,uO=r(lO),L2=typeof Bun=="function"&&Bun&&typeof Bun.version=="string",w0=TypeError,Ps=function(I,A){if(IB,ve=lS(W)?W:ey(W),je=ie?uS(arguments,B):[],xe=ie?function(){cO(ve,this,je)}:ve;return A?I(xe,J):I(xe)}:I},Rx=Gr,B2=d,pO=ty,_1=pO(B2.setInterval,!0);Rx({global:!0,bind:!0,forced:B2.setInterval!==_1},{setInterval:_1});var Gd=Gr,dO=d,ry=ty,Xu=ry(dO.setTimeout,!0);Gd({global:!0,bind:!0,forced:dO.setTimeout!==Xu},{setTimeout:Xu});var Dx=rn,hO=Dx.setTimeout,SI=hO,W2=r(SI),zx={exports:{}};(function(I){function A(W){if(W)return B(W);this._callbacks=new Map}function B(W){return Object.assign(W,A.prototype),W._callbacks=new Map,W}A.prototype.on=function(W,J){let ie=this._callbacks.get(W)??[];return ie.push(J),this._callbacks.set(W,ie),this},A.prototype.once=function(W,J){let ie=(...ve)=>{this.off(W,ie),J.apply(this,ve)};return ie.fn=J,this.on(W,ie),this},A.prototype.off=function(W,J){if(W===void 0&&J===void 0)return this._callbacks.clear(),this;if(J===void 0)return this._callbacks.delete(W),this;let ie=this._callbacks.get(W);if(ie){for(let[ve,je]of ie.entries())if(je===J||je.fn===J){ie.splice(ve,1);break}ie.length===0?this._callbacks.delete(W):this._callbacks.set(W,ie)}return this},A.prototype.emit=function(W,...J){let ie=this._callbacks.get(W);if(ie){let ve=[...ie];for(let je of ve)je.apply(this,J)}return this},A.prototype.listeners=function(W){return this._callbacks.get(W)??[]},A.prototype.listenerCount=function(W){if(W)return this.listeners(W).length;let J=0;for(let ie of this._callbacks.values())J+=ie.length;return J},A.prototype.hasListeners=function(W){return this.listenerCount(W)>0},A.prototype.addEventListener=A.prototype.on,A.prototype.removeListener=A.prototype.off,A.prototype.removeEventListener=A.prototype.off,A.prototype.removeAllListeners=A.prototype.off,I.exports=A})(zx);var EI=zx.exports,Tp=r(EI);function $a(){return $a=Object.assign||function(I){for(var A=1;A"u"?{style:{}}:document.createElement("div"),O0="function",S1=Math.round,x0=Math.abs,gO=Date.now;function ny(I,A){for(var B,W,J=A[0].toUpperCase()+A.slice(1),ie=0;ie"u"?Ap={}:Ap=window;var Fx=ny(Lx.style,"touchAction"),Bx=Fx!==void 0;function cS(){if(!Bx)return!1;var I={},A=Ap.CSS&&Ap.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(B){return I[B]=A?Ap.CSS.supports("touch-action",B):!0}),I}var H2="compute",Sc="auto",_0="manipulation",Mp="none",E1="pan-x",oy="pan-y",fu=cS(),Wx=/mobile|tablet|ip(ad|hone|od)|android/i,Hx="ontouchstart"in Ap,Rp=ny(Ap,"PointerEvent")!==void 0,yO=Hx&&Wx.test(navigator.userAgent),I1="touch",$x="pen",Xd="mouse",k1="kinect",S0=25,Pa=1,E0=2,Ii=4,Cl=8,iy=1,I0=2,xf=4,Kd=8,k0=16,js=I0|xf,Ku=Kd|k0,bO=js|Ku,fS=["x","y"],P1=["clientX","clientY"];function Yd(I,A,B){var W;if(I)if(I.forEach)I.forEach(A,B);else if(I.length!==void 0)for(W=0;W-1}function C1(I){if(j1(I,Mp))return Mp;var A=j1(I,E1),B=j1(I,oy);return A&&B?Mp:A||B?A?E1:oy:j1(I,_0)?_0:Sc}var $2=function(){function I(B,W){this.manager=B,this.set(W)}var A=I.prototype;return A.set=function(W){W===H2&&(W=this.compute()),Bx&&this.manager.element.style&&fu[W]&&(this.manager.element.style[Fx]=W),this.actions=W.toLowerCase().trim()},A.update=function(){this.set(this.manager.options.touchAction)},A.compute=function(){var W=[];return Yd(this.manager.recognizers,function(J){Tl(J.options.enable,[J])&&(W=W.concat(J.getTouchAction()))}),C1(W.join(" "))},A.preventDefaults=function(W){var J=W.srcEvent,ie=W.offsetDirection;if(this.manager.session.prevented){J.preventDefault();return}var ve=this.actions,je=j1(ve,Mp)&&!fu[Mp],xe=j1(ve,oy)&&!fu[oy],Re=j1(ve,E1)&&!fu[E1];if(je){var We=W.pointers.length===1,ut=W.distance<2,rt=W.deltaTime<250;if(We&&ut&&rt)return}if(!(Re&&xe)&&(je||xe&&ie&js||Re&&ie&Ku))return this.preventSrc(J)},A.preventSrc=function(W){this.manager.session.prevented=!0,W.preventDefault()},I}();function T1(I,A){for(;I;){if(I===A)return!0;I=I.parentNode}return!1}function wO(I){var A=I.length;if(A===1)return{x:S1(I[0].clientX),y:S1(I[0].clientY)};for(var B=0,W=0,J=0;J=x0(A)?I<0?I0:xf:A<0?Kd:k0}function Ux(I,A){var B=A.center,W=I.offsetDelta||{},J=I.prevDelta||{},ie=I.prevInput||{};(A.eventType===Pa||ie.eventType===Ii)&&(J=I.prevDelta={x:ie.deltaX||0,y:ie.deltaY||0},W=I.offsetDelta={x:B.x,y:B.y}),A.deltaX=J.x+(B.x-W.x),A.deltaY=J.y+(B.y-W.y)}function P0(I,A,B){return{x:A/I||0,y:B/I||0}}function Gx(I,A){return ay(A[0],A[1],P1)/ay(I[0],I[1],P1)}function pS(I,A){return qx(A[1],A[0],P1)+qx(I[1],I[0],P1)}function OO(I,A){var B=I.lastInterval||A,W=A.timeStamp-B.timeStamp,J,ie,ve,je;if(A.eventType!==Cl&&(W>S0||B.velocity===void 0)){var xe=A.deltaX-B.deltaX,Re=A.deltaY-B.deltaY,We=P0(W,xe,Re);ie=We.x,ve=We.y,J=x0(We.x)>x0(We.y)?We.x:We.y,je=A1(xe,Re),I.lastInterval=A}else J=B.velocity,ie=B.velocityX,ve=B.velocityY,je=B.direction;A.velocity=J,A.velocityX=ie,A.velocityY=ve,A.direction=je}function xO(I,A){var B=I.session,W=A.pointers,J=W.length;B.firstInput||(B.firstInput=Vx(A)),J>1&&!B.firstMultiple?B.firstMultiple=Vx(A):J===1&&(B.firstMultiple=!1);var ie=B.firstInput,ve=B.firstMultiple,je=ve?ve.center:ie.center,xe=A.center=wO(W);A.timeStamp=gO(),A.deltaTime=A.timeStamp-ie.timeStamp,A.angle=qx(je,xe),A.distance=ay(je,xe),Ux(B,A),A.offsetDirection=A1(A.deltaX,A.deltaY);var Re=P0(A.deltaTime,A.deltaX,A.deltaY);A.overallVelocityX=Re.x,A.overallVelocityY=Re.y,A.overallVelocity=x0(Re.x)>x0(Re.y)?Re.x:Re.y,A.scale=ve?Gx(ve.pointers,W):1,A.rotation=ve?pS(ve.pointers,W):0,A.maxPointers=B.prevInput?A.pointers.length>B.prevInput.maxPointers?A.pointers.length:B.prevInput.maxPointers:A.pointers.length,OO(B,A);var We=I.element,ut=A.srcEvent,rt;ut.composedPath?rt=ut.composedPath()[0]:ut.path?rt=ut.path[0]:rt=ut.target,T1(rt,We)&&(We=rt),A.target=We}function sy(I,A,B){var W=B.pointers.length,J=B.changedPointers.length,ie=A&Pa&&W-J===0,ve=A&(Ii|Cl)&&W-J===0;B.isFirst=!!ie,B.isFinal=!!ve,ie&&(I.session={}),B.eventType=A,xO(I,B),I.emit("hammer.input",B),I.recognize(B),I.session.prevInput=B}function M1(I){return I.trim().split(/\s+/g)}function ly(I,A,B){Yd(M1(A),function(W){I.addEventListener(W,B,!1)})}function Dp(I,A,B){Yd(M1(A),function(W){I.removeEventListener(W,B,!1)})}function Ko(I){var A=I.ownerDocument||I;return A.defaultView||A.parentWindow||window}var R1=function(){function I(B,W){var J=this;this.manager=B,this.callback=W,this.element=B.element,this.target=B.options.inputTarget,this.domHandler=function(ie){Tl(B.options.enable,[B])&&J.handler(ie)},this.init()}var A=I.prototype;return A.handler=function(){},A.init=function(){this.evEl&&ly(this.element,this.evEl,this.domHandler),this.evTarget&&ly(this.target,this.evTarget,this.domHandler),this.evWin&&ly(Ko(this.element),this.evWin,this.domHandler)},A.destroy=function(){this.evEl&&Dp(this.element,this.evEl,this.domHandler),this.evTarget&&Dp(this.target,this.evTarget,this.domHandler),this.evWin&&Dp(Ko(this.element),this.evWin,this.domHandler)},I}();function j0(I,A,B){if(I.indexOf&&!B)return I.indexOf(A);for(var W=0;Wxe[A]}):W=W.sort()),W}var _O={touchstart:Pa,touchmove:E0,touchend:Ii,touchcancel:Cl},SO="touchstart touchmove touchend touchcancel",D1=function(I){il(A,I);function A(){var W;return A.prototype.evTarget=SO,W=I.apply(this,arguments)||this,W.targetIds={},W}var B=A.prototype;return B.handler=function(J){var ie=_O[J.type],ve=mS.call(this,J,ie);ve&&this.callback(this.manager,ie,{pointers:ve[0],changedPointers:ve[1],pointerType:I1,srcEvent:J})},A}(R1);function mS(I,A){var B=zp(I.touches),W=this.targetIds;if(A&(Pa|E0)&&B.length===1)return W[B[0].identifier]=!0,[B,B];var J,ie,ve=zp(I.changedTouches),je=[],xe=this.target;if(ie=B.filter(function(Re){return T1(Re.target,xe)}),A===Pa)for(J=0;J-1&&J.splice(je,1)};setTimeout(ie,Mt)}}function kO(I,A){I&Pa?(this.primaryTouch=A.changedPointers[0].identifier,py.call(this,A)):I&(Ii|Cl)&&py.call(this,A)}function dy(I){for(var A=I.srcEvent.clientX,B=I.srcEvent.clientY,W=0;W-1&&this.requireFail.splice(J,1),this},A.hasRequireFailures=function(){return this.requireFail.length>0},A.canRecognizeWith=function(W){return!!this.simultaneous[W.id]},A.emit=function(W){var J=this,ie=this.state;function ve(je){J.manager.emit(je,W)}ie=Yu&&ve(J.options.event+zi(ie))},A.tryEmit=function(W){if(this.canEmit())return this.emit(W);this.state=vi},A.canEmit=function(){for(var W=0;Wie.threshold&&xe&ie.direction},B.attrTest=function(J){return ea.prototype.attrTest.call(this,J)&&(this.state&ki||!(this.state&ki)&&this.directionTest(J))},B.emit=function(J){this.pX=J.deltaX,this.pY=J.deltaY;var ie=A0(J.direction);ie&&(J.additionalEvent=this.options.event+ie),I.prototype.emit.call(this,J)},A}(ea),Ml=function(I){il(A,I);function A(W){return W===void 0&&(W={}),I.call(this,$a({event:"swipe",threshold:10,velocity:.3,direction:js|Ku,pointers:1},W))||this}var B=A.prototype;return B.getTouchAction=function(){return M0.prototype.getTouchAction.call(this)},B.attrTest=function(J){var ie=this.options.direction,ve;return ie&(js|Ku)?ve=J.overallVelocity:ie&js?ve=J.overallVelocityX:ie&Ku&&(ve=J.overallVelocityY),I.prototype.attrTest.call(this,J)&&ie&J.offsetDirection&&J.distance>this.options.threshold&&J.maxPointers===this.options.pointers&&x0(ve)>this.options.velocity&&J.eventType&Ii},B.emit=function(J){var ie=A0(J.offsetDirection);ie&&this.manager.emit(this.options.event+ie,J),this.manager.emit(this.options.event,J)},A}(ea),U2=function(I){il(A,I);function A(W){return W===void 0&&(W={}),I.call(this,$a({event:"pinch",threshold:0,pointers:2},W))||this}var B=A.prototype;return B.getTouchAction=function(){return[Mp]},B.attrTest=function(J){return I.prototype.attrTest.call(this,J)&&(Math.abs(J.scale-1)>this.options.threshold||this.state&ki)},B.emit=function(J){if(J.scale!==1){var ie=J.scale<1?"in":"out";J.additionalEvent=this.options.event+ie}I.prototype.emit.call(this,J)},A}(ea),Kx=function(I){il(A,I);function A(W){return W===void 0&&(W={}),I.call(this,$a({event:"rotate",threshold:0,pointers:2},W))||this}var B=A.prototype;return B.getTouchAction=function(){return[Mp]},B.attrTest=function(J){return I.prototype.attrTest.call(this,J)&&(Math.abs(J.rotation)>this.options.threshold||this.state&ki)},A}(ea),Yx=function(I){il(A,I);function A(W){var J;return W===void 0&&(W={}),J=I.call(this,$a({event:"press",pointers:1,time:251,threshold:9},W))||this,J._timer=null,J._input=null,J}var B=A.prototype;return B.getTouchAction=function(){return[Sc]},B.process=function(J){var ie=this,ve=this.options,je=J.pointers.length===ve.pointers,xe=J.distanceve.time;if(this._input=J,!xe||!je||J.eventType&(Ii|Cl)&&!Re)this.reset();else if(J.eventType&Pa)this.reset(),this._timer=setTimeout(function(){ie.state=Al,ie.tryEmit()},ve.time);else if(J.eventType&Ii)return Al;return vi},B.reset=function(){clearTimeout(this._timer)},B.emit=function(J){this.state===Al&&(J&&J.eventType&Ii?this.manager.emit(this.options.event+"up",J):(this._input.timeStamp=gO(),this.manager.emit(this.options.event,this._input)))},A}(Va),N1={domEvents:!1,touchAction:H2,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},Qx=[[Kx,{enable:!1}],[U2,{enable:!1},["rotate"]],[Ml,{direction:js}],[M0,{direction:js},["swipe"]],[ja],[ja,{event:"doubletap",taps:2},["tap"]],[Yx]],PO=1,R0=2;function jO(I,A){var B=I.element;if(B.style){var W;Yd(I.options.cssProps,function(J,ie){W=ny(B.style,ie),A?(I.oldCssProps[W]=B.style[W],B.style[W]=J):B.style[W]=I.oldCssProps[W]||""}),A||(I.oldCssProps={})}}function Zx(I,A){var B=document.createEvent("Event");B.initEvent(I,!0,!0),B.gesture=A,A.target.dispatchEvent(B)}var G2=function(){function I(B,W){var J=this;this.options=Jd({},N1,W||{}),this.options.inputTarget=this.options.inputTarget||B,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=B,this.input=Eo(this),this.touchAction=new $2(this,this.options.touchAction),jO(this,!0),Yd(this.options.recognizers,function(ie){var ve=J.add(new ie[0](ie[1]));ie[2]&&ve.recognizeWith(ie[2]),ie[3]&&ve.requireFailure(ie[3])},this)}var A=I.prototype;return A.set=function(W){return Jd(this.options,W),W.touchAction&&this.touchAction.update(),W.inputTarget&&(this.input.destroy(),this.input.target=W.inputTarget,this.input.init()),this},A.stop=function(W){this.session.stopped=W?R0:PO},A.recognize=function(W){var J=this.session;if(!J.stopped){this.touchAction.preventDefaults(W);var ie,ve=this.recognizers,je=J.curRecognizer;(!je||je&&je.state&Al)&&(J.curRecognizer=null,je=null);for(var xe=0;xe\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",ve=window.console&&(window.console.warn||window.console.log);return ve&&ve.call(window.console,W,ie),I.apply(this,arguments)}}var t_=e_(function(I,A,B){for(var W=Object.keys(A),J=0;J=I.length?{done:!0}:{done:!1,value:I[W++]}},e:function(Re){throw Re},f:J}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ie=!0,ve=!1,je;return{s:function(){B=B.call(I)},n:function(){var Re=B.next();return ie=Re.done,Re},e:function(Re){ve=!0,je=Re},f:function(){try{!ie&&B.return!=null&&B.return()}finally{if(ve)throw je}}}}function TO(I,A){var B;if(I){if(typeof I=="string")return AO(I,A);var W=Tr(B=Object.prototype.toString.call(I)).call(B,8,-1);if(W==="Object"&&I.constructor&&(W=I.constructor.name),W==="Map"||W==="Set")return lu(I);if(W==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(W))return AO(I,A)}}function AO(I,A){(A==null||A>I.length)&&(A=I.length);for(var B=0,W=new Array(A);B1?B-1:0),J=1;J2){var W;return Lp.apply(void 0,zt(W=[MO(A[0],A[1])]).call(W,Te(Tr(A).call(A,2))))}var J=A[0],ie=A[1];if(J instanceof Date&&ie instanceof Date)return J.setTime(ie.getTime()),J;var ve=K2(cs(ie)),je;try{for(ve.s();!(je=ve.n()).done;){var xe=je.value;Object.prototype.propertyIsEnumerable.call(ie,xe)&&(ie[xe]===To?delete J[xe]:J[xe]!==null&&ie[xe]!==null&&typeof J[xe]=="object"&&typeof ie[xe]=="object"&&!Co(J[xe])&&!Co(ie[xe])?J[xe]=Lp(J[xe],ie[xe]):J[xe]=L1(ie[xe]))}}catch(Re){ve.e(Re)}finally{ve.f()}return J}function L1(I){return Co(I)?xa(I).call(I,function(A){return L1(A)}):typeof I=="object"&&I!==null?I instanceof Date?new Date(I.getTime()):Lp({},I):I}function _f(I){for(var A=0,B=Fd(I);Ave;)xe=W(B,je=J[ve++]),xe!==void 0&&by(ie,je,xe);return ie}});var tc=rn,kc=tc.Object.getOwnPropertyDescriptors,gi=kc,al=gi,Cs=al,fa=r(Cs),U1={exports:{}},Ua=Gr,Ts=_t,BO=Cm.f;Ua({target:"Object",stat:!0,forced:Object.defineProperties!==BO,sham:!Ts},{defineProperties:BO});var G1=rn,Hp=G1.Object,Pc=U1.exports=function(A,B){return Hp.defineProperties(A,B)};Hp.defineProperties.sham&&(Pc.sham=!0);var s3=U1.exports,D0=s3,c_=D0,SS=c_,ES=r(SS),z0=Kc,l3=r(z0);function J1(I){if(I===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return I}var If=N2,f_=If,th=f_,IS=th,wy=IS,u3=r(wy),WO=Gr,kS=Qm;WO({target:"Object",stat:!0},{setPrototypeOf:kS});var p_=rn,X1=p_.Object.setPrototypeOf,PS=X1,jS=PS,Ga=jS,c3=Ga,jI=c3,d_=jI,h_=d_,HO=r(h_),As=f8,Ms=As,rc=Ms,K1=rc,$O=K1,f3=r($O);function Oy(I,A){var B;return Oy=HO?f3(B=HO).call(B):function(J,ie){return J.__proto__=ie,J},Oy(I,A)}function rh(I,A){if(typeof A!="function"&&A!==null)throw new TypeError("Super expression must either be null or a function");I.prototype=u3(A&&A.prototype,{constructor:{value:I,writable:!0,configurable:!0}}),ym(I,"prototype",{writable:!1}),A&&Oy(I,A)}function p3(I,A){if(A&&(r1(A)==="object"||typeof A=="function"))return A;if(A!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return J1(I)}var m_=Yg,v_=m_,d3=v_,xy=d3,_y=xy,g_=r(_y);function N0(I){var A;return N0=HO?f3(A=g_).call(A):function(W){return W.__proto__||g_(W)},N0(I)}var E={exports:{}},M={exports:{}};(function(I){var A=fw,B=Og;function W(J){"@babel/helpers - typeof";return I.exports=W=typeof A=="function"&&typeof B=="symbol"?function(ie){return typeof ie}:function(ie){return ie&&typeof A=="function"&&ie.constructor===A&&ie!==A.prototype?"symbol":typeof ie},I.exports.__esModule=!0,I.exports.default=I.exports,W(J)}I.exports=W,I.exports.__esModule=!0,I.exports.default=I.exports})(M);var D=M.exports,F=Vw,Q=F,le=Q,Oe=le,we=Oe,Se=Zo,Be=Gt,Xe=Mt,et=ga,jt=function(I,A,B){for(var W=Be(A),J=et.f,ie=Xe.f,ve=0;veut;ut++)if(bt=Yn(I[ut]),bt&&Ta(L0,bt))return bt;return new jc(!1)}Re=Y1(I,We)}for(gr=ie?I.next:Re.next;!(vn=$p(gr,Re)).done;){try{bt=Yn(vn.value)}catch(mo){fs(Re,"throw",mo)}if(typeof bt=="object"&&bt&&Ta(L0,bt))return bt}return new jc(!1)},Ut=Zl,Jt=function(I,A){return I===void 0?arguments.length<2?"":A:Ut(I)},kn=Gr,qr=ko,bo=Td,Zt=Qm,ps=jt,sl=tu,zs=gl,zl=xr,Pf=cr,qO=VO,CS=Ft,F0=Jt,B0=Lo,y_=B0("toStringTag"),UO=Error,TS=[].push,Cc=function(A,B){var W=qr(v3,this),J;Zt?J=Zt(new UO,W?bo(this):v3):(J=W?this:sl(v3),zs(J,y_,"Error")),B!==void 0&&zs(J,"message",F0(B)),qO(J,Cc,J.stack,1),arguments.length>2&&Pf(J,arguments[2]);var ie=[];return CS(A,TS,{that:ie}),zs(J,"errors",ie),J};Zt?Zt(Cc,UO):ps(Cc,UO,{name:!0});var v3=Cc.prototype=sl(UO.prototype,{constructor:zl(1,Cc),message:zl(1,""),name:zl(1,"AggregateError")});kn({global:!0,constructor:!0,arity:2},{AggregateError:Cc});var b_=Oi,AS=Kt,jf=Lo,W0=_t,Q1=jf("species"),Z1=function(I){var A=b_(I);W0&&A&&!A[Q1]&&AS(A,Q1,{configurable:!0,get:function(){return this}})},Vp=ko,iP=TypeError,ky=function(I,A){if(Vp(A,I))return I;throw new iP("Incorrect invocation")},MS=Pr,XC=B1,CI=Sn,aP=Lo,RS=aP("species"),DS=function(I,A){var B=MS(I).constructor,W;return B===void 0||CI(W=MS(B)[RS])?A:XC(W)},GO=Ws,TI=/(?:ipad|iphone|ipod).*applewebkit/i.test(GO),Tc=d,g3=q,KC=Uc,AI=yt,MI=Zo,zS=y,Py=Fh,YC=ei,sP=cm,jy=Ps,QC=TI,lP=h2,w_=Tc.setImmediate,NS=Tc.clearImmediate,ev=Tc.process,RI=Tc.Dispatch,uP=Tc.Function,DI=Tc.MessageChannel,cP=Tc.String,Ac=0,y3={},fP="onreadystatechange",Cf,H0,Xt,qt;zS(function(){Cf=Tc.location});var Ot=function(I){if(MI(y3,I)){var A=y3[I];delete y3[I],A()}},tv=function(I){return function(){Ot(I)}},Hr=function(I){Ot(I.data)},LS=function(I){Tc.postMessage(cP(I),Cf.protocol+"//"+Cf.host)};(!w_||!NS)&&(w_=function(A){jy(arguments.length,1);var B=AI(A)?A:uP(A),W=YC(arguments,1);return y3[++Ac]=function(){g3(B,void 0,W)},H0(Ac),Ac},NS=function(A){delete y3[A]},lP?H0=function(I){ev.nextTick(tv(I))}:RI&&RI.now?H0=function(I){RI.now(tv(I))}:DI&&!QC?(Xt=new DI,qt=Xt.port2,Xt.port1.onmessage=Hr,H0=KC(qt.postMessage,qt)):Tc.addEventListener&&AI(Tc.postMessage)&&!Tc.importScripts&&Cf&&Cf.protocol!=="file:"&&!zS(LS)?(H0=LS,Tc.addEventListener("message",Hr,!1)):fP in sP("script")?H0=function(I){Py.appendChild(sP("script"))[fP]=function(){Py.removeChild(this),Ot(I)}}:H0=function(I){setTimeout(tv(I),0)});var b3={set:w_,clear:NS},O_=function(){this.head=null,this.tail=null};O_.prototype={add:function(I){var A={item:I,next:null},B=this.tail;B?B.next=A:this.head=A,this.tail=A},get:function(){var I=this.head;if(I){var A=this.head=I.next;return A===null&&(this.tail=null),I.item}}};var x_=O_,FS=Ws,ZC=/ipad|iphone|ipod/i.test(FS)&&typeof Pebble<"u",zI=Ws,__=/web0s(?!.*chrome)/i.test(zI),Ir=d,S_=Uc,m=Mt.f,s=b3.set,l=x_,f=TI,g=ZC,a=__,u=h2,p=Ir.MutationObserver||Ir.WebKitMutationObserver,O=Ir.document,P=Ir.process,z=Ir.Promise,H=m(Ir,"queueMicrotask"),ee=H&&H.value,pe,be,Ae,Qe,$e;if(!ee){var mt=new l,It=function(){var I,A;for(u&&(I=P.domain)&&I.exit();A=mt.get();)try{A()}catch(B){throw mt.head&&pe(),B}I&&I.enter()};!f&&!u&&!a&&p&&O?(be=!0,Ae=O.createTextNode(""),new p(It).observe(Ae,{characterData:!0}),pe=function(){Ae.data=be=!be}):!g&&z&&z.resolve?(Qe=z.resolve(void 0),Qe.constructor=z,$e=S_(Qe.then,Qe),pe=function(){$e(It)}):u?pe=function(){P.nextTick(It)}:(s=S_(s,Ir),pe=function(){s(It)}),ee=function(I){mt.head||pe(),mt.add(I)}}var Ct=ee,qe=function(I,A){try{arguments.length===1?console.error(I):console.error(I,A)}catch{}},Fe=function(I){try{return{error:!1,value:I()}}catch(A){return{error:!0,value:A}}},Ge=d,pt=Ge.Promise,ft=typeof Deno=="object"&&Deno&&typeof Deno.version=="object",yr=ft,$t=h2,wr=!yr&&!$t&&typeof window=="object"&&typeof document=="object",Fr=d,zr=pt,Ns=yt,Ls=vl,pP=Lv,jke=Lo,Cke=wr,Tke=ft,OK=vs,lhe=zr&&zr.prototype,Ake=jke("species"),xK=!1,uhe=Ns(Fr.PromiseRejectionEvent),Mke=Ls("Promise",function(){var I=pP(zr),A=I!==String(zr);if(!A&&OK===66||!(lhe.catch&&lhe.finally))return!0;if(!OK||OK<51||!/native code/.test(I)){var B=new zr(function(ie){ie(1)}),W=function(ie){ie(function(){},function(){})},J=B.constructor={};if(J[Ake]=W,xK=B.then(function(){})instanceof W,!xK)return!0}return!A&&(Cke||Tke)&&!uhe}),eT={CONSTRUCTOR:Mke,REJECTION_EVENT:uhe,SUBCLASSING:xK},JO={},che=Vs,Rke=TypeError,Dke=function(I){var A,B;this.promise=new I(function(W,J){if(A!==void 0||B!==void 0)throw new Rke("Bad Promise constructor");A=W,B=J}),this.resolve=che(A),this.reject=che(B)};JO.f=function(I){return new Dke(I)};var zke=Gr,$H=h2,BS=d,tT=sr,Nke=He,Lke=Yv,Fke=Z1,Bke=Vs,_K=yt,Wke=mn,Hke=ky,$ke=DS,fhe=b3.set,SK=Ct,Vke=qe,qke=Fe,Uke=x_,phe=cp,EK=pt,IK=eT,dhe=JO,VH="Promise",hhe=IK.CONSTRUCTOR,Gke=IK.REJECTION_EVENT;IK.SUBCLASSING;var kK=phe.getterFor(VH),Jke=phe.set,Xke=EK&&EK.prototype,dP=EK,PK=Xke,mhe=BS.TypeError,jK=BS.document,CK=BS.process,TK=dhe.f,Kke=TK,Yke=!!(jK&&jK.createEvent&&BS.dispatchEvent),vhe="unhandledrejection",Qke="rejectionhandled",ghe=0,yhe=1,Zke=2,AK=1,bhe=2,qH,whe,ePe,Ohe=function(I){var A;return Wke(I)&&_K(A=I.then)?A:!1},xhe=function(I,A){var B=A.value,W=A.state===yhe,J=W?I.ok:I.fail,ie=I.resolve,ve=I.reject,je=I.domain,xe,Re,We;try{J?(W||(A.rejection===bhe&&rPe(A),A.rejection=AK),J===!0?xe=B:(je&&je.enter(),xe=J(B),je&&(je.exit(),We=!0)),xe===I.promise?ve(new mhe("Promise-chain cycle")):(Re=Ohe(xe))?tT(Re,xe,ie,ve):ie(xe)):ve(B)}catch(ut){je&&!We&&je.exit(),ve(ut)}},_he=function(I,A){I.notified||(I.notified=!0,SK(function(){for(var B=I.reactions,W;W=B.get();)xhe(W,I);I.notified=!1,A&&!I.rejection&&tPe(I)}))},She=function(I,A,B){var W,J;Yke?(W=jK.createEvent("Event"),W.promise=A,W.reason=B,W.initEvent(I,!1,!0),BS.dispatchEvent(W)):W={promise:A,reason:B},!Gke&&(J=BS["on"+I])?J(W):I===vhe&&Vke("Unhandled promise rejection",B)},tPe=function(I){tT(fhe,BS,function(){var A=I.facade,B=I.value,W=Ehe(I),J;if(W&&(J=qke(function(){$H?CK.emit("unhandledRejection",B,A):She(vhe,A,B)}),I.rejection=$H||Ehe(I)?bhe:AK,J.error))throw J.value})},Ehe=function(I){return I.rejection!==AK&&!I.parent},rPe=function(I){tT(fhe,BS,function(){var A=I.facade;$H?CK.emit("rejectionHandled",A):She(Qke,A,I.value)})},hP=function(I,A,B){return function(W){I(A,W,B)}},mP=function(I,A,B){I.done||(I.done=!0,B&&(I=B),I.value=A,I.state=Zke,_he(I,!0))},MK=function(I,A,B){if(!I.done){I.done=!0,B&&(I=B);try{if(I.facade===A)throw new mhe("Promise can't be resolved itself");var W=Ohe(A);W?SK(function(){var J={done:!1};try{tT(W,A,hP(MK,J,I),hP(mP,J,I))}catch(ie){mP(J,ie,I)}}):(I.value=A,I.state=yhe,_he(I,!1))}catch(J){mP({done:!1},J,I)}}};hhe&&(dP=function(A){Hke(this,PK),Bke(A),tT(qH,this);var B=kK(this);try{A(hP(MK,B),hP(mP,B))}catch(W){mP(B,W)}},PK=dP.prototype,qH=function(A){Jke(this,{type:VH,done:!1,notified:!1,parent:!1,reactions:new Uke,rejection:!1,state:ghe,value:void 0})},qH.prototype=Nke(PK,"then",function(A,B){var W=kK(this),J=TK($ke(this,dP));return W.parent=!0,J.ok=_K(A)?A:!0,J.fail=_K(B)&&B,J.domain=$H?CK.domain:void 0,W.state===ghe?W.reactions.add(J):SK(function(){xhe(J,W)}),J.promise}),whe=function(){var I=new qH,A=kK(I);this.promise=I,this.resolve=hP(MK,A),this.reject=hP(mP,A)},dhe.f=TK=function(I){return I===dP||I===ePe?new whe(I):Kke(I)}),zke({global:!0,constructor:!0,wrap:!0,forced:hhe},{Promise:dP}),Lke(dP,VH,!1,!0),Fke(VH);var nPe=pt,oPe=Pg,iPe=eT.CONSTRUCTOR,UH=iPe||!oPe(function(I){nPe.all(I).then(void 0,function(){})}),aPe=Gr,sPe=sr,lPe=Vs,uPe=JO,cPe=Fe,fPe=Ft,pPe=UH;aPe({target:"Promise",stat:!0,forced:pPe},{all:function(A){var B=this,W=uPe.f(B),J=W.resolve,ie=W.reject,ve=cPe(function(){var je=lPe(B.resolve),xe=[],Re=0,We=1;fPe(A,function(ut){var rt=Re++,bt=!1;We++,sPe(je,B,ut).then(function(gr){bt||(bt=!0,xe[rt]=gr,--We||J(xe))},ie)}),--We||J(xe)});return ve.error&&ie(ve.value),W.promise}});var dPe=Gr,hPe=eT.CONSTRUCTOR,Ihe=pt;Ihe&&Ihe.prototype,dPe({target:"Promise",proto:!0,forced:hPe,real:!0},{catch:function(I){return this.then(void 0,I)}});var mPe=Gr,vPe=sr,gPe=Vs,yPe=JO,bPe=Fe,wPe=Ft,OPe=UH;mPe({target:"Promise",stat:!0,forced:OPe},{race:function(A){var B=this,W=yPe.f(B),J=W.reject,ie=bPe(function(){var ve=gPe(B.resolve);wPe(A,function(je){vPe(ve,B,je).then(W.resolve,J)})});return ie.error&&J(ie.value),W.promise}});var xPe=Gr,_Pe=sr,SPe=JO,EPe=eT.CONSTRUCTOR;xPe({target:"Promise",stat:!0,forced:EPe},{reject:function(A){var B=SPe.f(this);return _Pe(B.reject,void 0,A),B.promise}});var IPe=Pr,kPe=mn,PPe=JO,khe=function(I,A){if(IPe(I),kPe(A)&&A.constructor===I)return A;var B=PPe.f(I),W=B.resolve;return W(A),B.promise},jPe=Gr,CPe=Oi,TPe=Ui,APe=pt,MPe=eT.CONSTRUCTOR,RPe=khe,DPe=CPe("Promise"),zPe=!MPe;jPe({target:"Promise",stat:!0,forced:TPe},{resolve:function(A){return RPe(zPe&&this===DPe?APe:this,A)}});var NPe=Gr,LPe=sr,FPe=Vs,BPe=JO,WPe=Fe,HPe=Ft,$Pe=UH;NPe({target:"Promise",stat:!0,forced:$Pe},{allSettled:function(A){var B=this,W=BPe.f(B),J=W.resolve,ie=W.reject,ve=WPe(function(){var je=FPe(B.resolve),xe=[],Re=0,We=1;HPe(A,function(ut){var rt=Re++,bt=!1;We++,LPe(je,B,ut).then(function(gr){bt||(bt=!0,xe[rt]={status:"fulfilled",value:gr},--We||J(xe))},function(gr){bt||(bt=!0,xe[rt]={status:"rejected",reason:gr},--We||J(xe))})}),--We||J(xe)});return ve.error&&ie(ve.value),W.promise}});var VPe=Gr,qPe=sr,UPe=Vs,GPe=Oi,JPe=JO,XPe=Fe,KPe=Ft,YPe=UH,Phe="No one promise resolved";VPe({target:"Promise",stat:!0,forced:YPe},{any:function(A){var B=this,W=GPe("AggregateError"),J=JPe.f(B),ie=J.resolve,ve=J.reject,je=XPe(function(){var xe=UPe(B.resolve),Re=[],We=0,ut=1,rt=!1;KPe(A,function(bt){var gr=We++,vn=!1;ut++,qPe(xe,B,bt).then(function(On){vn||rt||(rt=!0,ie(On))},function(On){vn||rt||(vn=!0,Re[gr]=On,--ut||ve(new W(Re,Phe)))})}),--ut||ve(new W(Re,Phe))});return je.error&&ve(je.value),J.promise}});var QPe=Gr,RK=pt,ZPe=y,eje=Oi,tje=yt,rje=DS,jhe=khe,nje=RK&&RK.prototype,oje=!!RK&&ZPe(function(){nje.finally.call({then:function(){}},function(){})});QPe({target:"Promise",proto:!0,real:!0,forced:oje},{finally:function(I){var A=rje(this,eje("Promise")),B=tje(I);return this.then(B?function(W){return jhe(A,I()).then(function(){return W})}:I,B?function(W){return jhe(A,I()).then(function(){throw W})}:I)}});var ije=rn,aje=ije.Promise,sje=aje,lje=sje,uje=Gr,cje=JO;uje({target:"Promise",stat:!0},{withResolvers:function(){var A=cje.f(this);return{promise:A.promise,resolve:A.resolve,reject:A.reject}}});var fje=lje,pje=fje,dje=Gr,hje=JO,mje=Fe;dje({target:"Promise",stat:!0,forced:!0},{try:function(I){var A=hje.f(this),B=mje(I);return(B.error?A.reject:A.resolve)(B.value),A.promise}});var vje=pje,gje=vje,yje=gje,bje=Uw,wje=bje,Oje=wje,xje=Oje,_je=xje;(function(I){var A=D.default,B=hb,W=fw,J=wy,ie=_y,ve=we,je=Lg,xe=h_,Re=yje,We=_je,ut=S;function rt(){I.exports=rt=function(){return gr},I.exports.__esModule=!0,I.exports.default=I.exports;var bt,gr={},vn=Object.prototype,On=vn.hasOwnProperty,Yn=B||function(kr,tr,lr){kr[tr]=lr.value},mo=typeof W=="function"?W:{},nc=mo.iterator||"@@iterator",Fs=mo.asyncIterator||"@@asyncIterator",Af=mo.toStringTag||"@@toStringTag";function Bs(kr,tr,lr){return B(kr,tr,{value:lr,enumerable:!0,configurable:!0,writable:!0}),kr[tr]}try{Bs({},"")}catch{Bs=function(lr,un,ao){return lr[un]=ao}}function I_(kr,tr,lr,un){var ao=tr&&tr.prototype instanceof gP?tr:gP,Bn=J(ao.prototype),Nl=new eY(un||[]);return Yn(Bn,"_invoke",{value:TAe(kr,lr,Nl)}),Bn}function rv(kr,tr,lr){try{return{type:"normal",arg:kr.call(tr,lr)}}catch(un){return{type:"throw",arg:un}}}gr.wrap=I_;var HS="suspendedStart",vP="suspendedYield",$S="executing",KO="completed",Cy={};function gP(){}function QH(){}function FI(){}var YK={};Bs(YK,nc,function(){return this});var QK=ie,ZH=QK&&QK(QK(tY([])));ZH&&ZH!==vn&&On.call(ZH,nc)&&(YK=ZH);var yP=FI.prototype=gP.prototype=J(YK);function f0e(kr){var tr;ve(tr=["next","throw","return"]).call(tr,function(lr){Bs(kr,lr,function(un){return this._invoke(lr,un)})})}function e$(kr,tr){function lr(ao,Bn,Nl,oh){var V0=rv(kr[ao],kr,Bn);if(V0.type!=="throw"){var BI=V0.arg,VS=BI.value;return VS&&A(VS)=="object"&&On.call(VS,"__await")?tr.resolve(VS.__await).then(function(WI){lr("next",WI,Nl,oh)},function(WI){lr("throw",WI,Nl,oh)}):tr.resolve(VS).then(function(WI){BI.value=WI,Nl(BI)},function(WI){return lr("throw",WI,Nl,oh)})}oh(V0.arg)}var un;Yn(this,"_invoke",{value:function(Bn,Nl){function oh(){return new tr(function(V0,BI){lr(Bn,Nl,V0,BI)})}return un=un?un.then(oh,oh):oh()}})}function TAe(kr,tr,lr){var un=HS;return function(ao,Bn){if(un===$S)throw new Error("Generator is already running");if(un===KO){if(ao==="throw")throw Bn;return{value:bt,done:!0}}for(lr.method=ao,lr.arg=Bn;;){var Nl=lr.delegate;if(Nl){var oh=p0e(Nl,lr);if(oh){if(oh===Cy)continue;return oh}}if(lr.method==="next")lr.sent=lr._sent=lr.arg;else if(lr.method==="throw"){if(un===HS)throw un=KO,lr.arg;lr.dispatchException(lr.arg)}else lr.method==="return"&&lr.abrupt("return",lr.arg);un=$S;var V0=rv(kr,tr,lr);if(V0.type==="normal"){if(un=lr.done?KO:vP,V0.arg===Cy)continue;return{value:V0.arg,done:lr.done}}V0.type==="throw"&&(un=KO,lr.method="throw",lr.arg=V0.arg)}}}function p0e(kr,tr){var lr=tr.method,un=kr.iterator[lr];if(un===bt)return tr.delegate=null,lr==="throw"&&kr.iterator.return&&(tr.method="return",tr.arg=bt,p0e(kr,tr),tr.method==="throw")||lr!=="return"&&(tr.method="throw",tr.arg=new TypeError("The iterator does not provide a '"+lr+"' method")),Cy;var ao=rv(un,kr.iterator,tr.arg);if(ao.type==="throw")return tr.method="throw",tr.arg=ao.arg,tr.delegate=null,Cy;var Bn=ao.arg;return Bn?Bn.done?(tr[kr.resultName]=Bn.value,tr.next=kr.nextLoc,tr.method!=="return"&&(tr.method="next",tr.arg=bt),tr.delegate=null,Cy):Bn:(tr.method="throw",tr.arg=new TypeError("iterator result is not an object"),tr.delegate=null,Cy)}function AAe(kr){var tr,lr={tryLoc:kr[0]};1 in kr&&(lr.catchLoc=kr[1]),2 in kr&&(lr.finallyLoc=kr[2],lr.afterLoc=kr[3]),je(tr=this.tryEntries).call(tr,lr)}function ZK(kr){var tr=kr.completion||{};tr.type="normal",delete tr.arg,kr.completion=tr}function eY(kr){this.tryEntries=[{tryLoc:"root"}],ve(kr).call(kr,AAe,this),this.reset(!0)}function tY(kr){if(kr||kr===""){var tr=kr[nc];if(tr)return tr.call(kr);if(typeof kr.next=="function")return kr;if(!isNaN(kr.length)){var lr=-1,un=function ao(){for(;++lr=0;--ao){var Bn=this.tryEntries[ao],Nl=Bn.completion;if(Bn.tryLoc==="root")return un("end");if(Bn.tryLoc<=this.prev){var oh=On.call(Bn,"catchLoc"),V0=On.call(Bn,"finallyLoc");if(oh&&V0){if(this.prev=0;--un){var ao=this.tryEntries[un];if(ao.tryLoc<=this.prev&&On.call(ao,"finallyLoc")&&this.prev=0;--lr){var un=this.tryEntries[lr];if(un.finallyLoc===tr)return this.complete(un.completion,un.afterLoc),ZK(un),Cy}},catch:function(tr){for(var lr=this.tryEntries.length-1;lr>=0;--lr){var un=this.tryEntries[lr];if(un.tryLoc===tr){var ao=un.completion;if(ao.type==="throw"){var Bn=ao.arg;ZK(un)}return Bn}}throw new Error("illegal catch attempt")},delegateYield:function(tr,lr,un){return this.delegate={iterator:tY(tr),resultName:lr,nextLoc:un},this.method==="next"&&(this.arg=bt),Cy}},gr}I.exports=rt,I.exports.__esModule=!0,I.exports.default=I.exports})(E);var Sje=E.exports,GH=Sje(),Eje=GH;try{regeneratorRuntime=GH}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=GH:Function("r","regeneratorRuntime = r")(GH)}var $0=r(Eje),Che={exports:{}},Ije=y,kje=Ije(function(){if(typeof ArrayBuffer=="function"){var I=new ArrayBuffer(8);Object.isExtensible(I)&&Object.defineProperty(I,"a",{value:8})}}),Pje=y,jje=mn,Cje=ae,The=kje,JH=Object.isExtensible,Tje=Pje(function(){JH(1)}),Aje=Tje||The?function(A){return!jje(A)||The&&Cje(A)==="ArrayBuffer"?!1:JH?JH(A):!0}:JH,Mje=y,Rje=!Mje(function(){return Object.isExtensible(Object.preventExtensions({}))}),Dje=Gr,zje=fe,Nje=gc,Lje=mn,DK=Zo,Fje=ga.f,Ahe=ru,Bje=wl,zK=Aje,Wje=$c,Hje=Rje,Mhe=!1,E_=Wje("meta"),$je=0,NK=function(I){Fje(I,E_,{value:{objectID:"O"+$je++,weakData:{}}})},Vje=function(I,A){if(!Lje(I))return typeof I=="symbol"?I:(typeof I=="string"?"S":"P")+I;if(!DK(I,E_)){if(!zK(I))return"F";if(!A)return"E";NK(I)}return I[E_].objectID},qje=function(I,A){if(!DK(I,E_)){if(!zK(I))return!0;if(!A)return!1;NK(I)}return I[E_].weakData},Uje=function(I){return Hje&&Mhe&&zK(I)&&!DK(I,E_)&&NK(I),I},Gje=function(){Jje.enable=function(){},Mhe=!0;var I=Ahe.f,A=zje([].splice),B={};B[E_]=1,I(B).length&&(Ahe.f=function(W){for(var J=I(W),ie=0,ve=J.length;ie1?arguments[1]:void 0),bt;bt=bt?bt.next:ut.first;)for(rt(bt.value,bt.key,this);bt&&bt.removed;)bt=bt.previous},has:function(We){return!!xe(this,We)}}),Nhe(ie,B?{get:function(We){var ut=xe(this,We);return ut&&ut.value},set:function(We,ut){return je(this,We===0?0:We,ut)}}:{add:function(We){return je(this,We=We===0?0:We,We)}}),rT&&hCe(ie,"size",{configurable:!0,get:function(){return ve(this).size}}),J},setStrong:function(I,A,B){var W=A+" Iterator",J=LK(A),ie=LK(W);bCe(I,A,function(ve,je){Bhe(this,{type:W,target:ve,state:J(ve),kind:je,last:void 0})},function(){for(var ve=ie(this),je=ve.kind,xe=ve.last;xe&&xe.removed;)xe=xe.previous;return!ve.target||!(ve.last=xe=xe?xe.next:ve.state.first)?(ve.target=void 0,XH(void 0,!0)):XH(je==="keys"?xe.key:je==="values"?xe.value:[xe.key,xe.value],!1)},B?"entries":"values",!B,!0),wCe(A)}},OCe=zhe,xCe=Whe;OCe("Map",function(I){return function(){return I(this,arguments.length?arguments[0]:void 0)}},xCe);var _Ce=rn,SCe=_Ce.Map,ECe=SCe,ICe=ECe,kCe=ICe,Hhe=r(kCe),PCe=Gr,jCe=Ba.some,CCe=d2,TCe=CCe("some");PCe({target:"Array",proto:!0,forced:!TCe},{some:function(A){return jCe(this,A,arguments.length>1?arguments[1]:void 0)}});var ACe=xs,MCe=ACe("Array","some"),RCe=ko,DCe=MCe,FK=Array.prototype,zCe=function(I){var A=I.some;return I===FK||RCe(FK,I)&&A===FK.some?DCe:A},NCe=zCe,LCe=NCe,FCe=LCe,BCe=r(FCe),WCe=xs,HCe=WCe("Array","keys"),$Ce=HCe,VCe=$Ce,qCe=Xl,UCe=Zo,GCe=ko,JCe=VCe,BK=Array.prototype,XCe={DOMTokenList:!0,NodeList:!0},KCe=function(I){var A=I.keys;return I===BK||GCe(BK,I)&&A===BK.keys||UCe(XCe,qCe(I))?JCe:A},YCe=KCe,NI=r(YCe),$he=Bh,QCe=Math.floor,WK=function(I,A){var B=I.length,W=QCe(B/2);return B<8?ZCe(I,A):eTe(I,WK($he(I,0,W),A),WK($he(I,W),A),A)},ZCe=function(I,A){for(var B=I.length,W=1,J,ie;W0;)I[ie]=I[--ie];ie!==W++&&(I[ie]=J)}return I},eTe=function(I,A,B,W){for(var J=A.length,ie=B.length,ve=0,je=0;ve3)){if(hTe)return!0;if(Yhe)return Yhe<603;var I="",A,B,W,J;for(A=65;A<76;A++){switch(B=String.fromCharCode(A),A){case 66:case 69:case 70:case 72:W=3;break;case 68:case 71:W=4;break;default:W=2}for(J=0;J<47;J++)WS.push({k:B+J,v:W})}for(WS.sort(function(ie,ve){return ve.v-ie.v}),J=0;JJhe(B)?1:-1}};lTe({target:"Array",proto:!0,forced:bTe},{sort:function(A){A!==void 0&&uTe(A);var B=cTe(this);if(Zhe)return A===void 0?Qhe(B):Qhe(B,A);var W=[],J=Ghe(B),ie,ve;for(ve=0;vethis.max&&this.flush(),this._timeout!=null&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&typeof this.delay=="number"&&(this._timeout=W2(function(){B.flush()},this.delay))}},{key:"flush",value:function(){var B,W;bf(B=$d(W=this._queue).call(W,0)).call(B,function(J){J.fn.apply(J.context||J.fn,J.args||[])})}}],[{key:"extend",value:function(B,W){var J=new I(W);if(B.flush!==void 0)throw new Error("Target object already has a property flush");B.flush=function(){J.flush()};var ie=[{name:"flush",original:void 0}];if(W&&W.replace)for(var ve=0;ve=I.length?{done:!0}:{done:!1,value:I[W++]}},e:function(Re){throw Re},f:J}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ie=!0,ve=!1,je;return{s:function(){B=B.call(I)},n:function(){var Re=B.next();return ie=Re.done,Re},e:function(Re){ve=!0,je=Re},f:function(){try{!ie&&B.return!=null&&B.return()}finally{if(ve)throw je}}}}function TO(I,A){var B;if(I){if(typeof I=="string")return AO(I,A);var W=Tr(B=Object.prototype.toString.call(I)).call(B,8,-1);if(W==="Object"&&I.constructor&&(W=I.constructor.name),W==="Map"||W==="Set")return lu(I);if(W==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(W))return AO(I,A)}}function AO(I,A){(A==null||A>I.length)&&(A=I.length);for(var B=0,W=new Array(A);B1?B-1:0),J=1;J2){var W;return Lp.apply(void 0,zt(W=[MO(A[0],A[1])]).call(W,Te(Tr(A).call(A,2))))}var J=A[0],ie=A[1];if(J instanceof Date&&ie instanceof Date)return J.setTime(ie.getTime()),J;var ve=K2(cs(ie)),je;try{for(ve.s();!(je=ve.n()).done;){var xe=je.value;Object.prototype.propertyIsEnumerable.call(ie,xe)&&(ie[xe]===To?delete J[xe]:J[xe]!==null&&ie[xe]!==null&&typeof J[xe]=="object"&&typeof ie[xe]=="object"&&!Co(J[xe])&&!Co(ie[xe])?J[xe]=Lp(J[xe],ie[xe]):J[xe]=L1(ie[xe]))}}catch(Re){ve.e(Re)}finally{ve.f()}return J}function L1(I){return Co(I)?xa(I).call(I,function(A){return L1(A)}):typeof I=="object"&&I!==null?I instanceof Date?new Date(I.getTime()):Lp({},I):I}function _f(I){for(var A=0,B=Fd(I);Ave;)xe=W(B,je=J[ve++]),xe!==void 0&&by(ie,je,xe);return ie}});var tc=rn,kc=tc.Object.getOwnPropertyDescriptors,gi=kc,al=gi,Cs=al,fa=r(Cs),U1={exports:{}},Ua=Gr,Ts=_t,BO=Cm.f;Ua({target:"Object",stat:!0,forced:Object.defineProperties!==BO,sham:!Ts},{defineProperties:BO});var G1=rn,Hp=G1.Object,Pc=U1.exports=function(A,B){return Hp.defineProperties(A,B)};Hp.defineProperties.sham&&(Pc.sham=!0);var s3=U1.exports,D0=s3,c_=D0,SS=c_,ES=r(SS),z0=Kc,l3=r(z0);function J1(I){if(I===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return I}var If=N2,f_=If,th=f_,IS=th,wy=IS,u3=r(wy),WO=Gr,kS=Qm;WO({target:"Object",stat:!0},{setPrototypeOf:kS});var p_=rn,X1=p_.Object.setPrototypeOf,PS=X1,jS=PS,Ga=jS,c3=Ga,jI=c3,d_=jI,h_=d_,HO=r(h_),As=f8,Ms=As,rc=Ms,K1=rc,$O=K1,f3=r($O);function Oy(I,A){var B;return Oy=HO?f3(B=HO).call(B):function(J,ie){return J.__proto__=ie,J},Oy(I,A)}function rh(I,A){if(typeof A!="function"&&A!==null)throw new TypeError("Super expression must either be null or a function");I.prototype=u3(A&&A.prototype,{constructor:{value:I,writable:!0,configurable:!0}}),ym(I,"prototype",{writable:!1}),A&&Oy(I,A)}function p3(I,A){if(A&&(r1(A)==="object"||typeof A=="function"))return A;if(A!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return J1(I)}var m_=Yg,v_=m_,d3=v_,xy=d3,_y=xy,g_=r(_y);function N0(I){var A;return N0=HO?f3(A=g_).call(A):function(W){return W.__proto__||g_(W)},N0(I)}var E={exports:{}},M={exports:{}};(function(I){var A=fw,B=Og;function W(J){"@babel/helpers - typeof";return I.exports=W=typeof A=="function"&&typeof B=="symbol"?function(ie){return typeof ie}:function(ie){return ie&&typeof A=="function"&&ie.constructor===A&&ie!==A.prototype?"symbol":typeof ie},I.exports.__esModule=!0,I.exports.default=I.exports,W(J)}I.exports=W,I.exports.__esModule=!0,I.exports.default=I.exports})(M);var D=M.exports,F=Vw,Q=F,le=Q,Oe=le,we=Oe,Se=Zo,Be=Gt,Xe=Rt,et=ga,jt=function(I,A,B){for(var W=Be(A),J=et.f,ie=Xe.f,ve=0;veut;ut++)if(bt=Yn(I[ut]),bt&&Ta(L0,bt))return bt;return new jc(!1)}Re=Y1(I,We)}for(gr=ie?I.next:Re.next;!(vn=$p(gr,Re)).done;){try{bt=Yn(vn.value)}catch(mo){fs(Re,"throw",mo)}if(typeof bt=="object"&&bt&&Ta(L0,bt))return bt}return new jc(!1)},Ut=Zl,Jt=function(I,A){return I===void 0?arguments.length<2?"":A:Ut(I)},kn=Gr,qr=ko,bo=Td,Zt=Qm,ps=jt,sl=tu,zs=gl,zl=xr,Pf=cr,qO=VO,CS=Ft,F0=Jt,B0=Lo,y_=B0("toStringTag"),UO=Error,TS=[].push,Cc=function(A,B){var W=qr(v3,this),J;Zt?J=Zt(new UO,W?bo(this):v3):(J=W?this:sl(v3),zs(J,y_,"Error")),B!==void 0&&zs(J,"message",F0(B)),qO(J,Cc,J.stack,1),arguments.length>2&&Pf(J,arguments[2]);var ie=[];return CS(A,TS,{that:ie}),zs(J,"errors",ie),J};Zt?Zt(Cc,UO):ps(Cc,UO,{name:!0});var v3=Cc.prototype=sl(UO.prototype,{constructor:zl(1,Cc),message:zl(1,""),name:zl(1,"AggregateError")});kn({global:!0,constructor:!0,arity:2},{AggregateError:Cc});var b_=Oi,AS=Kt,jf=Lo,W0=_t,Q1=jf("species"),Z1=function(I){var A=b_(I);W0&&A&&!A[Q1]&&AS(A,Q1,{configurable:!0,get:function(){return this}})},Vp=ko,iP=TypeError,ky=function(I,A){if(Vp(A,I))return I;throw new iP("Incorrect invocation")},MS=Pr,XC=B1,CI=Sn,aP=Lo,RS=aP("species"),DS=function(I,A){var B=MS(I).constructor,W;return B===void 0||CI(W=MS(B)[RS])?A:XC(W)},GO=Ws,TI=/(?:ipad|iphone|ipod).*applewebkit/i.test(GO),Tc=d,g3=q,KC=Uc,AI=yt,MI=Zo,zS=y,Py=Fh,YC=ei,sP=cm,jy=Ps,QC=TI,lP=h2,w_=Tc.setImmediate,NS=Tc.clearImmediate,ev=Tc.process,RI=Tc.Dispatch,uP=Tc.Function,DI=Tc.MessageChannel,cP=Tc.String,Ac=0,y3={},fP="onreadystatechange",Cf,H0,Xt,qt;zS(function(){Cf=Tc.location});var Ot=function(I){if(MI(y3,I)){var A=y3[I];delete y3[I],A()}},tv=function(I){return function(){Ot(I)}},Hr=function(I){Ot(I.data)},LS=function(I){Tc.postMessage(cP(I),Cf.protocol+"//"+Cf.host)};(!w_||!NS)&&(w_=function(A){jy(arguments.length,1);var B=AI(A)?A:uP(A),W=YC(arguments,1);return y3[++Ac]=function(){g3(B,void 0,W)},H0(Ac),Ac},NS=function(A){delete y3[A]},lP?H0=function(I){ev.nextTick(tv(I))}:RI&&RI.now?H0=function(I){RI.now(tv(I))}:DI&&!QC?(Xt=new DI,qt=Xt.port2,Xt.port1.onmessage=Hr,H0=KC(qt.postMessage,qt)):Tc.addEventListener&&AI(Tc.postMessage)&&!Tc.importScripts&&Cf&&Cf.protocol!=="file:"&&!zS(LS)?(H0=LS,Tc.addEventListener("message",Hr,!1)):fP in sP("script")?H0=function(I){Py.appendChild(sP("script"))[fP]=function(){Py.removeChild(this),Ot(I)}}:H0=function(I){setTimeout(tv(I),0)});var b3={set:w_,clear:NS},O_=function(){this.head=null,this.tail=null};O_.prototype={add:function(I){var A={item:I,next:null},B=this.tail;B?B.next=A:this.head=A,this.tail=A},get:function(){var I=this.head;if(I){var A=this.head=I.next;return A===null&&(this.tail=null),I.item}}};var x_=O_,FS=Ws,ZC=/ipad|iphone|ipod/i.test(FS)&&typeof Pebble<"u",zI=Ws,__=/web0s(?!.*chrome)/i.test(zI),Ir=d,S_=Uc,m=Rt.f,s=b3.set,l=x_,f=TI,g=ZC,a=__,u=h2,p=Ir.MutationObserver||Ir.WebKitMutationObserver,O=Ir.document,P=Ir.process,z=Ir.Promise,H=m(Ir,"queueMicrotask"),ee=H&&H.value,pe,be,Ae,Qe,$e;if(!ee){var mt=new l,It=function(){var I,A;for(u&&(I=P.domain)&&I.exit();A=mt.get();)try{A()}catch(B){throw mt.head&&pe(),B}I&&I.enter()};!f&&!u&&!a&&p&&O?(be=!0,Ae=O.createTextNode(""),new p(It).observe(Ae,{characterData:!0}),pe=function(){Ae.data=be=!be}):!g&&z&&z.resolve?(Qe=z.resolve(void 0),Qe.constructor=z,$e=S_(Qe.then,Qe),pe=function(){$e(It)}):u?pe=function(){P.nextTick(It)}:(s=S_(s,Ir),pe=function(){s(It)}),ee=function(I){mt.head||pe(),mt.add(I)}}var Ct=ee,qe=function(I,A){try{arguments.length===1?console.error(I):console.error(I,A)}catch{}},Fe=function(I){try{return{error:!1,value:I()}}catch(A){return{error:!0,value:A}}},Ge=d,pt=Ge.Promise,ft=typeof Deno=="object"&&Deno&&typeof Deno.version=="object",yr=ft,$t=h2,wr=!yr&&!$t&&typeof window=="object"&&typeof document=="object",Fr=d,zr=pt,Ns=yt,Ls=vl,pP=Lv,jke=Lo,Cke=wr,Tke=ft,OK=vs,lhe=zr&&zr.prototype,Ake=jke("species"),xK=!1,uhe=Ns(Fr.PromiseRejectionEvent),Mke=Ls("Promise",function(){var I=pP(zr),A=I!==String(zr);if(!A&&OK===66||!(lhe.catch&&lhe.finally))return!0;if(!OK||OK<51||!/native code/.test(I)){var B=new zr(function(ie){ie(1)}),W=function(ie){ie(function(){},function(){})},J=B.constructor={};if(J[Ake]=W,xK=B.then(function(){})instanceof W,!xK)return!0}return!A&&(Cke||Tke)&&!uhe}),eT={CONSTRUCTOR:Mke,REJECTION_EVENT:uhe,SUBCLASSING:xK},JO={},che=Vs,Rke=TypeError,Dke=function(I){var A,B;this.promise=new I(function(W,J){if(A!==void 0||B!==void 0)throw new Rke("Bad Promise constructor");A=W,B=J}),this.resolve=che(A),this.reject=che(B)};JO.f=function(I){return new Dke(I)};var zke=Gr,$H=h2,BS=d,tT=ir,Nke=He,Lke=Yv,Fke=Z1,Bke=Vs,_K=yt,Wke=mn,Hke=ky,$ke=DS,fhe=b3.set,SK=Ct,Vke=qe,qke=Fe,Uke=x_,phe=cp,EK=pt,IK=eT,dhe=JO,VH="Promise",hhe=IK.CONSTRUCTOR,Gke=IK.REJECTION_EVENT;IK.SUBCLASSING;var kK=phe.getterFor(VH),Jke=phe.set,Xke=EK&&EK.prototype,dP=EK,PK=Xke,mhe=BS.TypeError,jK=BS.document,CK=BS.process,TK=dhe.f,Kke=TK,Yke=!!(jK&&jK.createEvent&&BS.dispatchEvent),vhe="unhandledrejection",Qke="rejectionhandled",ghe=0,yhe=1,Zke=2,AK=1,bhe=2,qH,whe,ePe,Ohe=function(I){var A;return Wke(I)&&_K(A=I.then)?A:!1},xhe=function(I,A){var B=A.value,W=A.state===yhe,J=W?I.ok:I.fail,ie=I.resolve,ve=I.reject,je=I.domain,xe,Re,We;try{J?(W||(A.rejection===bhe&&rPe(A),A.rejection=AK),J===!0?xe=B:(je&&je.enter(),xe=J(B),je&&(je.exit(),We=!0)),xe===I.promise?ve(new mhe("Promise-chain cycle")):(Re=Ohe(xe))?tT(Re,xe,ie,ve):ie(xe)):ve(B)}catch(ut){je&&!We&&je.exit(),ve(ut)}},_he=function(I,A){I.notified||(I.notified=!0,SK(function(){for(var B=I.reactions,W;W=B.get();)xhe(W,I);I.notified=!1,A&&!I.rejection&&tPe(I)}))},She=function(I,A,B){var W,J;Yke?(W=jK.createEvent("Event"),W.promise=A,W.reason=B,W.initEvent(I,!1,!0),BS.dispatchEvent(W)):W={promise:A,reason:B},!Gke&&(J=BS["on"+I])?J(W):I===vhe&&Vke("Unhandled promise rejection",B)},tPe=function(I){tT(fhe,BS,function(){var A=I.facade,B=I.value,W=Ehe(I),J;if(W&&(J=qke(function(){$H?CK.emit("unhandledRejection",B,A):She(vhe,A,B)}),I.rejection=$H||Ehe(I)?bhe:AK,J.error))throw J.value})},Ehe=function(I){return I.rejection!==AK&&!I.parent},rPe=function(I){tT(fhe,BS,function(){var A=I.facade;$H?CK.emit("rejectionHandled",A):She(Qke,A,I.value)})},hP=function(I,A,B){return function(W){I(A,W,B)}},mP=function(I,A,B){I.done||(I.done=!0,B&&(I=B),I.value=A,I.state=Zke,_he(I,!0))},MK=function(I,A,B){if(!I.done){I.done=!0,B&&(I=B);try{if(I.facade===A)throw new mhe("Promise can't be resolved itself");var W=Ohe(A);W?SK(function(){var J={done:!1};try{tT(W,A,hP(MK,J,I),hP(mP,J,I))}catch(ie){mP(J,ie,I)}}):(I.value=A,I.state=yhe,_he(I,!1))}catch(J){mP({done:!1},J,I)}}};hhe&&(dP=function(A){Hke(this,PK),Bke(A),tT(qH,this);var B=kK(this);try{A(hP(MK,B),hP(mP,B))}catch(W){mP(B,W)}},PK=dP.prototype,qH=function(A){Jke(this,{type:VH,done:!1,notified:!1,parent:!1,reactions:new Uke,rejection:!1,state:ghe,value:void 0})},qH.prototype=Nke(PK,"then",function(A,B){var W=kK(this),J=TK($ke(this,dP));return W.parent=!0,J.ok=_K(A)?A:!0,J.fail=_K(B)&&B,J.domain=$H?CK.domain:void 0,W.state===ghe?W.reactions.add(J):SK(function(){xhe(J,W)}),J.promise}),whe=function(){var I=new qH,A=kK(I);this.promise=I,this.resolve=hP(MK,A),this.reject=hP(mP,A)},dhe.f=TK=function(I){return I===dP||I===ePe?new whe(I):Kke(I)}),zke({global:!0,constructor:!0,wrap:!0,forced:hhe},{Promise:dP}),Lke(dP,VH,!1,!0),Fke(VH);var nPe=pt,oPe=Pg,iPe=eT.CONSTRUCTOR,UH=iPe||!oPe(function(I){nPe.all(I).then(void 0,function(){})}),aPe=Gr,sPe=ir,lPe=Vs,uPe=JO,cPe=Fe,fPe=Ft,pPe=UH;aPe({target:"Promise",stat:!0,forced:pPe},{all:function(A){var B=this,W=uPe.f(B),J=W.resolve,ie=W.reject,ve=cPe(function(){var je=lPe(B.resolve),xe=[],Re=0,We=1;fPe(A,function(ut){var rt=Re++,bt=!1;We++,sPe(je,B,ut).then(function(gr){bt||(bt=!0,xe[rt]=gr,--We||J(xe))},ie)}),--We||J(xe)});return ve.error&&ie(ve.value),W.promise}});var dPe=Gr,hPe=eT.CONSTRUCTOR,Ihe=pt;Ihe&&Ihe.prototype,dPe({target:"Promise",proto:!0,forced:hPe,real:!0},{catch:function(I){return this.then(void 0,I)}});var mPe=Gr,vPe=ir,gPe=Vs,yPe=JO,bPe=Fe,wPe=Ft,OPe=UH;mPe({target:"Promise",stat:!0,forced:OPe},{race:function(A){var B=this,W=yPe.f(B),J=W.reject,ie=bPe(function(){var ve=gPe(B.resolve);wPe(A,function(je){vPe(ve,B,je).then(W.resolve,J)})});return ie.error&&J(ie.value),W.promise}});var xPe=Gr,_Pe=ir,SPe=JO,EPe=eT.CONSTRUCTOR;xPe({target:"Promise",stat:!0,forced:EPe},{reject:function(A){var B=SPe.f(this);return _Pe(B.reject,void 0,A),B.promise}});var IPe=Pr,kPe=mn,PPe=JO,khe=function(I,A){if(IPe(I),kPe(A)&&A.constructor===I)return A;var B=PPe.f(I),W=B.resolve;return W(A),B.promise},jPe=Gr,CPe=Oi,TPe=Ui,APe=pt,MPe=eT.CONSTRUCTOR,RPe=khe,DPe=CPe("Promise"),zPe=!MPe;jPe({target:"Promise",stat:!0,forced:TPe},{resolve:function(A){return RPe(zPe&&this===DPe?APe:this,A)}});var NPe=Gr,LPe=ir,FPe=Vs,BPe=JO,WPe=Fe,HPe=Ft,$Pe=UH;NPe({target:"Promise",stat:!0,forced:$Pe},{allSettled:function(A){var B=this,W=BPe.f(B),J=W.resolve,ie=W.reject,ve=WPe(function(){var je=FPe(B.resolve),xe=[],Re=0,We=1;HPe(A,function(ut){var rt=Re++,bt=!1;We++,LPe(je,B,ut).then(function(gr){bt||(bt=!0,xe[rt]={status:"fulfilled",value:gr},--We||J(xe))},function(gr){bt||(bt=!0,xe[rt]={status:"rejected",reason:gr},--We||J(xe))})}),--We||J(xe)});return ve.error&&ie(ve.value),W.promise}});var VPe=Gr,qPe=ir,UPe=Vs,GPe=Oi,JPe=JO,XPe=Fe,KPe=Ft,YPe=UH,Phe="No one promise resolved";VPe({target:"Promise",stat:!0,forced:YPe},{any:function(A){var B=this,W=GPe("AggregateError"),J=JPe.f(B),ie=J.resolve,ve=J.reject,je=XPe(function(){var xe=UPe(B.resolve),Re=[],We=0,ut=1,rt=!1;KPe(A,function(bt){var gr=We++,vn=!1;ut++,qPe(xe,B,bt).then(function(On){vn||rt||(rt=!0,ie(On))},function(On){vn||rt||(vn=!0,Re[gr]=On,--ut||ve(new W(Re,Phe)))})}),--ut||ve(new W(Re,Phe))});return je.error&&ve(je.value),J.promise}});var QPe=Gr,RK=pt,ZPe=y,eje=Oi,tje=yt,rje=DS,jhe=khe,nje=RK&&RK.prototype,oje=!!RK&&ZPe(function(){nje.finally.call({then:function(){}},function(){})});QPe({target:"Promise",proto:!0,real:!0,forced:oje},{finally:function(I){var A=rje(this,eje("Promise")),B=tje(I);return this.then(B?function(W){return jhe(A,I()).then(function(){return W})}:I,B?function(W){return jhe(A,I()).then(function(){throw W})}:I)}});var ije=rn,aje=ije.Promise,sje=aje,lje=sje,uje=Gr,cje=JO;uje({target:"Promise",stat:!0},{withResolvers:function(){var A=cje.f(this);return{promise:A.promise,resolve:A.resolve,reject:A.reject}}});var fje=lje,pje=fje,dje=Gr,hje=JO,mje=Fe;dje({target:"Promise",stat:!0,forced:!0},{try:function(I){var A=hje.f(this),B=mje(I);return(B.error?A.reject:A.resolve)(B.value),A.promise}});var vje=pje,gje=vje,yje=gje,bje=Uw,wje=bje,Oje=wje,xje=Oje,_je=xje;(function(I){var A=D.default,B=hb,W=fw,J=wy,ie=_y,ve=we,je=Lg,xe=h_,Re=yje,We=_je,ut=S;function rt(){I.exports=rt=function(){return gr},I.exports.__esModule=!0,I.exports.default=I.exports;var bt,gr={},vn=Object.prototype,On=vn.hasOwnProperty,Yn=B||function(kr,tr,lr){kr[tr]=lr.value},mo=typeof W=="function"?W:{},nc=mo.iterator||"@@iterator",Fs=mo.asyncIterator||"@@asyncIterator",Af=mo.toStringTag||"@@toStringTag";function Bs(kr,tr,lr){return B(kr,tr,{value:lr,enumerable:!0,configurable:!0,writable:!0}),kr[tr]}try{Bs({},"")}catch{Bs=function(lr,un,ao){return lr[un]=ao}}function I_(kr,tr,lr,un){var ao=tr&&tr.prototype instanceof gP?tr:gP,Bn=J(ao.prototype),Nl=new eY(un||[]);return Yn(Bn,"_invoke",{value:TAe(kr,lr,Nl)}),Bn}function rv(kr,tr,lr){try{return{type:"normal",arg:kr.call(tr,lr)}}catch(un){return{type:"throw",arg:un}}}gr.wrap=I_;var HS="suspendedStart",vP="suspendedYield",$S="executing",KO="completed",Cy={};function gP(){}function QH(){}function FI(){}var YK={};Bs(YK,nc,function(){return this});var QK=ie,ZH=QK&&QK(QK(tY([])));ZH&&ZH!==vn&&On.call(ZH,nc)&&(YK=ZH);var yP=FI.prototype=gP.prototype=J(YK);function f0e(kr){var tr;ve(tr=["next","throw","return"]).call(tr,function(lr){Bs(kr,lr,function(un){return this._invoke(lr,un)})})}function e$(kr,tr){function lr(ao,Bn,Nl,oh){var V0=rv(kr[ao],kr,Bn);if(V0.type!=="throw"){var BI=V0.arg,VS=BI.value;return VS&&A(VS)=="object"&&On.call(VS,"__await")?tr.resolve(VS.__await).then(function(WI){lr("next",WI,Nl,oh)},function(WI){lr("throw",WI,Nl,oh)}):tr.resolve(VS).then(function(WI){BI.value=WI,Nl(BI)},function(WI){return lr("throw",WI,Nl,oh)})}oh(V0.arg)}var un;Yn(this,"_invoke",{value:function(Bn,Nl){function oh(){return new tr(function(V0,BI){lr(Bn,Nl,V0,BI)})}return un=un?un.then(oh,oh):oh()}})}function TAe(kr,tr,lr){var un=HS;return function(ao,Bn){if(un===$S)throw new Error("Generator is already running");if(un===KO){if(ao==="throw")throw Bn;return{value:bt,done:!0}}for(lr.method=ao,lr.arg=Bn;;){var Nl=lr.delegate;if(Nl){var oh=p0e(Nl,lr);if(oh){if(oh===Cy)continue;return oh}}if(lr.method==="next")lr.sent=lr._sent=lr.arg;else if(lr.method==="throw"){if(un===HS)throw un=KO,lr.arg;lr.dispatchException(lr.arg)}else lr.method==="return"&&lr.abrupt("return",lr.arg);un=$S;var V0=rv(kr,tr,lr);if(V0.type==="normal"){if(un=lr.done?KO:vP,V0.arg===Cy)continue;return{value:V0.arg,done:lr.done}}V0.type==="throw"&&(un=KO,lr.method="throw",lr.arg=V0.arg)}}}function p0e(kr,tr){var lr=tr.method,un=kr.iterator[lr];if(un===bt)return tr.delegate=null,lr==="throw"&&kr.iterator.return&&(tr.method="return",tr.arg=bt,p0e(kr,tr),tr.method==="throw")||lr!=="return"&&(tr.method="throw",tr.arg=new TypeError("The iterator does not provide a '"+lr+"' method")),Cy;var ao=rv(un,kr.iterator,tr.arg);if(ao.type==="throw")return tr.method="throw",tr.arg=ao.arg,tr.delegate=null,Cy;var Bn=ao.arg;return Bn?Bn.done?(tr[kr.resultName]=Bn.value,tr.next=kr.nextLoc,tr.method!=="return"&&(tr.method="next",tr.arg=bt),tr.delegate=null,Cy):Bn:(tr.method="throw",tr.arg=new TypeError("iterator result is not an object"),tr.delegate=null,Cy)}function AAe(kr){var tr,lr={tryLoc:kr[0]};1 in kr&&(lr.catchLoc=kr[1]),2 in kr&&(lr.finallyLoc=kr[2],lr.afterLoc=kr[3]),je(tr=this.tryEntries).call(tr,lr)}function ZK(kr){var tr=kr.completion||{};tr.type="normal",delete tr.arg,kr.completion=tr}function eY(kr){this.tryEntries=[{tryLoc:"root"}],ve(kr).call(kr,AAe,this),this.reset(!0)}function tY(kr){if(kr||kr===""){var tr=kr[nc];if(tr)return tr.call(kr);if(typeof kr.next=="function")return kr;if(!isNaN(kr.length)){var lr=-1,un=function ao(){for(;++lr=0;--ao){var Bn=this.tryEntries[ao],Nl=Bn.completion;if(Bn.tryLoc==="root")return un("end");if(Bn.tryLoc<=this.prev){var oh=On.call(Bn,"catchLoc"),V0=On.call(Bn,"finallyLoc");if(oh&&V0){if(this.prev=0;--un){var ao=this.tryEntries[un];if(ao.tryLoc<=this.prev&&On.call(ao,"finallyLoc")&&this.prev=0;--lr){var un=this.tryEntries[lr];if(un.finallyLoc===tr)return this.complete(un.completion,un.afterLoc),ZK(un),Cy}},catch:function(tr){for(var lr=this.tryEntries.length-1;lr>=0;--lr){var un=this.tryEntries[lr];if(un.tryLoc===tr){var ao=un.completion;if(ao.type==="throw"){var Bn=ao.arg;ZK(un)}return Bn}}throw new Error("illegal catch attempt")},delegateYield:function(tr,lr,un){return this.delegate={iterator:tY(tr),resultName:lr,nextLoc:un},this.method==="next"&&(this.arg=bt),Cy}},gr}I.exports=rt,I.exports.__esModule=!0,I.exports.default=I.exports})(E);var Sje=E.exports,GH=Sje(),Eje=GH;try{regeneratorRuntime=GH}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=GH:Function("r","regeneratorRuntime = r")(GH)}var $0=r(Eje),Che={exports:{}},Ije=y,kje=Ije(function(){if(typeof ArrayBuffer=="function"){var I=new ArrayBuffer(8);Object.isExtensible(I)&&Object.defineProperty(I,"a",{value:8})}}),Pje=y,jje=mn,Cje=ae,The=kje,JH=Object.isExtensible,Tje=Pje(function(){JH(1)}),Aje=Tje||The?function(A){return!jje(A)||The&&Cje(A)==="ArrayBuffer"?!1:JH?JH(A):!0}:JH,Mje=y,Rje=!Mje(function(){return Object.isExtensible(Object.preventExtensions({}))}),Dje=Gr,zje=fe,Nje=gc,Lje=mn,DK=Zo,Fje=ga.f,Ahe=ru,Bje=wl,zK=Aje,Wje=$c,Hje=Rje,Mhe=!1,E_=Wje("meta"),$je=0,NK=function(I){Fje(I,E_,{value:{objectID:"O"+$je++,weakData:{}}})},Vje=function(I,A){if(!Lje(I))return typeof I=="symbol"?I:(typeof I=="string"?"S":"P")+I;if(!DK(I,E_)){if(!zK(I))return"F";if(!A)return"E";NK(I)}return I[E_].objectID},qje=function(I,A){if(!DK(I,E_)){if(!zK(I))return!0;if(!A)return!1;NK(I)}return I[E_].weakData},Uje=function(I){return Hje&&Mhe&&zK(I)&&!DK(I,E_)&&NK(I),I},Gje=function(){Jje.enable=function(){},Mhe=!0;var I=Ahe.f,A=zje([].splice),B={};B[E_]=1,I(B).length&&(Ahe.f=function(W){for(var J=I(W),ie=0,ve=J.length;ie1?arguments[1]:void 0),bt;bt=bt?bt.next:ut.first;)for(rt(bt.value,bt.key,this);bt&&bt.removed;)bt=bt.previous},has:function(We){return!!xe(this,We)}}),Nhe(ie,B?{get:function(We){var ut=xe(this,We);return ut&&ut.value},set:function(We,ut){return je(this,We===0?0:We,ut)}}:{add:function(We){return je(this,We=We===0?0:We,We)}}),rT&&hCe(ie,"size",{configurable:!0,get:function(){return ve(this).size}}),J},setStrong:function(I,A,B){var W=A+" Iterator",J=LK(A),ie=LK(W);bCe(I,A,function(ve,je){Bhe(this,{type:W,target:ve,state:J(ve),kind:je,last:void 0})},function(){for(var ve=ie(this),je=ve.kind,xe=ve.last;xe&&xe.removed;)xe=xe.previous;return!ve.target||!(ve.last=xe=xe?xe.next:ve.state.first)?(ve.target=void 0,XH(void 0,!0)):XH(je==="keys"?xe.key:je==="values"?xe.value:[xe.key,xe.value],!1)},B?"entries":"values",!B,!0),wCe(A)}},OCe=zhe,xCe=Whe;OCe("Map",function(I){return function(){return I(this,arguments.length?arguments[0]:void 0)}},xCe);var _Ce=rn,SCe=_Ce.Map,ECe=SCe,ICe=ECe,kCe=ICe,Hhe=r(kCe),PCe=Gr,jCe=Ba.some,CCe=d2,TCe=CCe("some");PCe({target:"Array",proto:!0,forced:!TCe},{some:function(A){return jCe(this,A,arguments.length>1?arguments[1]:void 0)}});var ACe=xs,MCe=ACe("Array","some"),RCe=ko,DCe=MCe,FK=Array.prototype,zCe=function(I){var A=I.some;return I===FK||RCe(FK,I)&&A===FK.some?DCe:A},NCe=zCe,LCe=NCe,FCe=LCe,BCe=r(FCe),WCe=xs,HCe=WCe("Array","keys"),$Ce=HCe,VCe=$Ce,qCe=Xl,UCe=Zo,GCe=ko,JCe=VCe,BK=Array.prototype,XCe={DOMTokenList:!0,NodeList:!0},KCe=function(I){var A=I.keys;return I===BK||GCe(BK,I)&&A===BK.keys||UCe(XCe,qCe(I))?JCe:A},YCe=KCe,NI=r(YCe),$he=Bh,QCe=Math.floor,WK=function(I,A){var B=I.length,W=QCe(B/2);return B<8?ZCe(I,A):eTe(I,WK($he(I,0,W),A),WK($he(I,W),A),A)},ZCe=function(I,A){for(var B=I.length,W=1,J,ie;W0;)I[ie]=I[--ie];ie!==W++&&(I[ie]=J)}return I},eTe=function(I,A,B,W){for(var J=A.length,ie=B.length,ve=0,je=0;ve3)){if(hTe)return!0;if(Yhe)return Yhe<603;var I="",A,B,W,J;for(A=65;A<76;A++){switch(B=String.fromCharCode(A),A){case 66:case 69:case 70:case 72:W=3;break;case 68:case 71:W=4;break;default:W=2}for(J=0;J<47;J++)WS.push({k:B+J,v:W})}for(WS.sort(function(ie,ve){return ve.v-ie.v}),J=0;JJhe(B)?1:-1}};lTe({target:"Array",proto:!0,forced:bTe},{sort:function(A){A!==void 0&&uTe(A);var B=cTe(this);if(Zhe)return A===void 0?Qhe(B):Qhe(B,A);var W=[],J=Ghe(B),ie,ve;for(ve=0;vethis.max&&this.flush(),this._timeout!=null&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&typeof this.delay=="number"&&(this._timeout=W2(function(){B.flush()},this.delay))}},{key:"flush",value:function(){var B,W;bf(B=$d(W=this._queue).call(W,0)).call(B,function(J){J.fn.apply(J.context||J.fn,J.args||[])})}}],[{key:"extend",value:function(B,W){var J=new I(W);if(B.flush!==void 0)throw new Error("Target object already has a property flush");B.flush=function(){J.flush()};var ie=[{name:"flush",original:void 0}];if(W&&W.replace)for(var ve=0;ve=I.length?{done:!0}:{done:!1,value:I[W++]}},e:function(Re){throw Re},f:J}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ie=!0,ve=!1,je;return{s:function(){B=B.call(I)},n:function(){var Re=B.next();return ie=Re.done,Re},e:function(Re){ve=!0,je=Re},f:function(){try{!ie&&B.return!=null&&B.return()}finally{if(ve)throw je}}}}function wAe(I,A){var B;if(I){if(typeof I=="string")return o0e(I,A);var W=Tr(B=Object.prototype.toString.call(I)).call(B,8,-1);if(W==="Object"&&I.constructor&&(W=I.constructor.name),W==="Map"||W==="Set")return lu(I);if(W==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(W))return o0e(I,A)}}function o0e(I,A){(A==null||A>I.length)&&(A=I.length);for(var B=0,W=new Array(A);Bje&&(je=ut,ve=We)}return ve}},{key:"min",value:function(W){var J=JK(this._pairs),ie=J.next();if(ie.done)return null;for(var ve=ie.value[1],je=W(ie.value[1],ie.value[0]);!(ie=J.next()).done;){var xe=Ce(ie.value,2),Re=xe[0],We=xe[1],ut=W(We,Re);ut=I.length?{done:!0}:{done:!1,value:I[W++]}},e:function(Re){throw Re},f:J}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ie=!0,ve=!1,je;return{s:function(){B=B.call(I)},n:function(){var Re=B.next();return ie=Re.done,Re},e:function(Re){ve=!0,je=Re},f:function(){try{!ie&&B.return!=null&&B.return()}finally{if(ve)throw je}}}}function OAe(I,A){var B;if(I){if(typeof I=="string")return s0e(I,A);var W=Tr(B=Object.prototype.toString.call(I)).call(B,8,-1);if(W==="Object"&&I.constructor&&(W=I.constructor.name),W==="Map"||W==="Set")return lu(I);if(W==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(W))return s0e(I,A)}}function s0e(I,A){(A==null||A>I.length)&&(A=I.length);for(var B=0,W=new Array(A);B"u"||!Zu||Zu.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Zu(Boolean,[],function(){})),!0}catch{return!1}}function SAe(I,A){return I[A]==null&&(I[A]=rAe()),I}var l0e=function(I){rh(B,I);var A=xAe(B);function B(W,J){var ie;return t(this,B),ie=A.call(this),Fu(J1(ie),"_queue",null),W&&!Co(W)&&(J=W,W=[]),ie._options=J||{},ie._data=new Hhe,ie.length=0,ie._idProp=ie._options.fieldId||"id",W&&W.length&&ie.add(W),ie.setOptions(J),ie}return Ha(B,[{key:"idProp",get:function(){return this._idProp}},{key:"setOptions",value:function(J){J&&J.queue!==void 0&&(J.queue===!1?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=r0e.extend(this,{replace:["add","update","remove"]})),J.queue&&typeof J.queue=="object"&&this._queue.setOptions(J.queue)))}},{key:"add",value:function(J,ie){var ve=this,je=[],xe;if(Co(J)){var Re=xa(J).call(J,function(rt){return rt[ve._idProp]});if(BCe(Re).call(Re,function(rt){return ve._data.has(rt)}))throw new Error("A duplicate id was found in the parameter array.");for(var We=0,ut=J.length;WeWe?1:Reje)&&(ve=We,je=ut)}}catch(rt){xe.e(rt)}finally{xe.f()}return ve||null}},{key:"min",value:function(J){var ie,ve=null,je=null,xe=KK(e0e(ie=this._data).call(ie)),Re;try{for(xe.s();!(Re=xe.n()).done;){var We=Re.value,ut=We[J];typeof ut=="number"&&(je==null||ut=I.length?{done:!0}:{done:!1,value:I[W++]}},e:function(Re){throw Re},f:J}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ie=!0,ve=!1,je;return{s:function(){B=B.call(I)},n:function(){var Re=B.next();return ie=Re.done,Re},e:function(Re){ve=!0,je=Re},f:function(){try{!ie&&B.return!=null&&B.return()}finally{if(ve)throw je}}}}function IAe(I,A){var B;if(I){if(typeof I=="string")return u0e(I,A);var W=Tr(B=Object.prototype.toString.call(I)).call(B,8,-1);if(W==="Object"&&I.constructor&&(W=I.constructor.name),W==="Map"||W==="Set")return lu(I);if(W==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(W))return u0e(I,A)}}function u0e(I,A){(A==null||A>I.length)&&(A=I.length);for(var B=0,W=new Array(A);B"u"||!Zu||Zu.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Zu(Boolean,[],function(){})),!0}catch{return!1}}var jAe=function(I){rh(B,I);var A=kAe(B);function B(W,J){var ie,ve;return t(this,B),ve=A.call(this),Fu(J1(ve),"length",0),Fu(J1(ve),"_ids",new YH),ve._options=J||{},ve._listener=Md(ie=ve._onEvent).call(ie,J1(ve)),ve.setData(W),ve}return Ha(B,[{key:"idProp",get:function(){return this.getDataSet().idProp}},{key:"setData",value:function(J){if(this._data){this._data.off&&this._data.off("*",this._listener);var ie=this._data.getIds({filter:Ss(this._options)}),ve=this._data.get(ie);this._ids.clear(),this.length=0,this._trigger("remove",{items:ie,oldData:ve})}if(J!=null){this._data=J;for(var je=this._data.getIds({filter:Ss(this._options)}),xe=0,Re=je.length;xe{(function(e,t){typeof bK=="object"&&typeof Oke<"u"?t(bK,wke()):typeof define=="function"&&define.amd?define(["exports","vis-data/peer/umd/vis-data.js"],t):t((e=typeof globalThis<"u"?globalThis:e||self).vis=e.vis||{},e.vis)})(bK,function(e,t){var n=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function r(m){return m&&m.__esModule&&Object.prototype.hasOwnProperty.call(m,"default")?m.default:m}var o=function(m){return m&&m.Math===Math&&m},i=o(typeof globalThis=="object"&&globalThis)||o(typeof window=="object"&&window)||o(typeof self=="object"&&self)||o(typeof n=="object"&&n)||function(){return this}()||n||Function("return this")(),d=function(m){try{return!!m()}catch{return!0}},y=!d(function(){var m=function(){}.bind();return typeof m!="function"||m.hasOwnProperty("prototype")}),_=y,k=Function.prototype,T=k.apply,N=k.call,L=typeof Reflect=="object"&&Reflect.apply||(_?N.bind(T):function(){return N.apply(T,arguments)}),Y=y,q=Function.prototype,K=q.call,U=Y&&q.bind.bind(K,K),X=Y?U:function(m){return function(){return K.apply(m,arguments)}},Z=X,fe=Z({}.toString),me=Z("".slice),ye=function(m){return me(fe(m),8,-1)},ge=ye,ae=X,Pe=function(m){if(ge(m)==="Function")return ae(m)},Ne=typeof document=="object"&&document.all,Ye={all:Ne,IS_HTMLDDA:Ne===void 0&&Ne!==void 0},Je=Ye.all,Me=Ye.IS_HTMLDDA?function(m){return typeof m=="function"||m===Je}:function(m){return typeof m=="function"},Ve={},Ue=!d(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),ht=y,yt=Function.prototype.call,Mt=ht?yt.bind(yt):function(){return yt.apply(yt,arguments)},wt={},_t={}.propertyIsEnumerable,Nt=Object.getOwnPropertyDescriptor,Rt=Nt&&!_t.call({1:2},1);wt.f=Rt?function(m){var s=Nt(this,m);return!!s&&s.enumerable}:_t;var sr,Pt,Sr=function(m,s){return{enumerable:!(1&m),configurable:!(2&m),writable:!(4&m),value:s}},Nr=d,ir=ye,xr=Object,qn=X("".split),An=Nr(function(){return!xr("z").propertyIsEnumerable(0)})?function(m){return ir(m)==="String"?qn(m,""):xr(m)}:xr,Oo=function(m){return m==null},yn=Oo,Vr=TypeError,eo=function(m){if(yn(m))throw new Vr("Can't call method on "+m);return m},Sn=An,Ti=eo,Mo=function(m){return Sn(Ti(m))},xo=Me,Qa=Ye.all,Dn=Ye.IS_HTMLDDA?function(m){return typeof m=="object"?m!==null:xo(m)||m===Qa}:function(m){return typeof m=="object"?m!==null:xo(m)},mr={},Un=mr,Za=i,Ai=Me,mn=function(m){return Ai(m)?m:void 0},rn=function(m,s){return arguments.length<2?mn(Un[m])||mn(Za[m]):Un[m]&&Un[m][s]||Za[m]&&Za[m][s]},Mn=X({}.isPrototypeOf),go=typeof navigator<"u"&&String(navigator.userAgent)||"",cn=i,ms=go,Oi=cn.process,cc=cn.Deno,ko=Oi&&Oi.versions||cc&&cc.version,Ws=ko&&ko.v8;Ws&&(Pt=(sr=Ws.split("."))[0]>0&&sr[0]<4?1:+(sr[0]+sr[1])),!Pt&&ms&&(!(sr=ms.match(/Edge\/(\d+)/))||sr[1]>=74)&&(sr=ms.match(/Chrome\/(\d+)/))&&(Pt=+sr[1]);var Hs=Pt,es=Hs,rb=d,am=i.String,Wc=!!Object.getOwnPropertySymbols&&!rb(function(){var m=Symbol("symbol detection");return!am(m)||!(Object(m)instanceof Symbol)||!Symbol.sham&&es&&es<41}),ql=Wc&&!Symbol.sham&&typeof Symbol.iterator=="symbol",Na=rn,fc=Me,vs=Mn,vr=Object,ia=ql?function(m){return typeof m=="symbol"}:function(m){var s=Na("Symbol");return fc(s)&&vs(s.prototype,vr(m))},Uo=String,Vi=function(m){try{return Uo(m)}catch{return"Object"}},li=Me,Gn=Vi,nd=TypeError,Xn=function(m){if(li(m))return m;throw new nd(Gn(m)+" is not a function")},va=Xn,K3=Oo,vh=function(m,s){var l=m[s];return K3(l)?void 0:va(l)},qi=Mt,xi=Me,$s=Dn,No=TypeError,Ul={exports:{}},Ou=i,Gf=Object.defineProperty,Vs=function(m,s){try{Gf(Ou,m,{value:s,configurable:!0,writable:!0})}catch{Ou[m]=s}return s},gv="__core-js_shared__",pc=i[gv]||Vs(gv,{}),Jf=pc;(Ul.exports=function(m,s){return Jf[m]||(Jf[m]=s!==void 0?s:{})})("versions",[]).push({version:"3.33.0",mode:"pure",copyright:"\xA9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE",source:"https://github.com/zloirock/core-js"});var xu=Ul.exports,qs=eo,Xf=Object,ts=function(m){return Xf(qs(m))},gs=ts,nb=X({}.hasOwnProperty),Ui=Object.hasOwn||function(m,s){return nb(gs(m),s)},En=X,yv=0,Y3=Math.random(),ob=En(1 .toString),Kf=function(m){return"Symbol("+(m===void 0?"":m)+")_"+ob(++yv+Y3,36)},od=xu,ib=Ui,sm=Kf,Q3=Wc,Yf=ql,id=i.Symbol,hl=od("wks"),Mi=Yf?id.for||id:id&&id.withoutSetter||sm,Go=function(m){return ib(hl,m)||(hl[m]=Q3&&ib(id,m)?id[m]:Mi("Symbol."+m)),hl[m]},ui=Mt,Z3=Dn,Zo=ia,e5=vh,Hc=function(m,s){var l,f;if(s==="string"&&xi(l=m.toString)&&!$s(f=qi(l,m))||xi(l=m.valueOf)&&!$s(f=qi(l,m))||s!=="string"&&xi(l=m.toString)&&!$s(f=qi(l,m)))return f;throw new No("Can't convert object to primitive value")},bv=TypeError,ab=Go("toPrimitive"),$c=function(m,s){if(!Z3(m)||Zo(m))return m;var l,f=e5(m,ab);if(f){if(s===void 0&&(s="default"),l=ui(f,m,s),!Z3(l)||Zo(l))return l;throw new bv("Can't convert object to primitive value")}return s===void 0&&(s="number"),Hc(m,s)},_u=ia,gh=function(m){var s=$c(m,"string");return _u(s)?s:s+""},Vc=Dn,yh=i.document,lm=Vc(yh)&&Vc(yh.createElement),Su=function(m){return lm?yh.createElement(m):{}},ml=Su,ad=!Ue&&!d(function(){return Object.defineProperty(ml("div"),"a",{get:function(){return 7}}).a!==7}),um=Ue,Lo=Mt,sb=wt,bh=Sr,wv=Mo,Ov=gh,j4=Ui,ys=ad,wh=Object.getOwnPropertyDescriptor;Ve.f=um?wh:function(m,s){if(m=wv(m),s=Ov(s),ys)try{return wh(m,s)}catch{}if(j4(m,s))return bh(!Lo(sb.f,m,s),m[s])};var xv=d,_v=Me,Oh=/#|\.prototype\./,xh=function(m,s){var l=sd[qc(m)];return l===Sv||l!==Eu&&(_v(s)?xv(s):!!s)},qc=xh.normalize=function(m){return String(m).replace(Oh,".").toLowerCase()},sd=xh.data={},Eu=xh.NATIVE="N",Sv=xh.POLYFILL="P",t5=xh,cm=Xn,fm=y,_h=Pe(Pe.bind),Sh=function(m,s){return cm(m),s===void 0?m:fm?_h(m,s):function(){return m.apply(s,arguments)}},ci={},La=Ue&&d(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),lb=Dn,r5=String,Ev=TypeError,Us=function(m){if(lb(m))return m;throw new Ev(r5(m)+" is not an object")},Gs=Ue,fo=ad,pm=La,Iu=Us,Eh=gh,Iv=TypeError,kv=Object.defineProperty,Qf=Object.getOwnPropertyDescriptor,ld="enumerable",rs="configurable",to="writable";ci.f=Gs?pm?function(m,s,l){if(Iu(m),s=Eh(s),Iu(l),typeof m=="function"&&s==="prototype"&&"value"in l&&to in l&&!l[to]){var f=Qf(m,s);f&&f[to]&&(m[s]=l.value,l={configurable:rs in l?l[rs]:f[rs],enumerable:ld in l?l[ld]:f[ld],writable:!1})}return kv(m,s,l)}:kv:function(m,s,l){if(Iu(m),s=Eh(s),Iu(l),fo)try{return kv(m,s,l)}catch{}if("get"in l||"set"in l)throw new Iv("Accessors not supported");return"value"in l&&(m[s]=l.value),m};var ub=ci,vl=Sr,Zf=Ue?function(m,s,l){return ub.f(m,s,vl(1,l))}:function(m,s,l){return m[s]=l,m},bs=i,dm=L,Ih=Pe,Uc=Me,ga=Ve.f,hm=t5,ep=mr,tp=Sh,ud=Zf,rp=Ui,cb=function(m){var s=function(l,f,g){if(this instanceof s){switch(arguments.length){case 0:return new m;case 1:return new m(l);case 2:return new m(l,f)}return new m(l,f,g)}return dm(m,this,arguments)};return s.prototype=m.prototype,s},Pr=function(m,s){var l,f,g,a,u,p,O,P,z,H=m.target,ee=m.global,pe=m.stat,be=m.proto,Ae=ee?bs:pe?bs[H]:(bs[H]||{}).prototype,Qe=ee?ep:ep[H]||ud(ep,H,{})[H],$e=Qe.prototype;for(a in s)f=!(l=hm(ee?a:H+(pe?".":"#")+a,m.forced))&&Ae&&rp(Ae,a),p=Qe[a],f&&(O=m.dontCallGetSet?(z=ga(Ae,a))&&z.value:Ae[a]),u=f&&O?O:s[a],f&&typeof p==typeof u||(P=m.bind&&f?tp(u,bs):m.wrap&&f?cb(u):be&&Uc(u)?Ih(u):u,(m.sham||u&&u.sham||p&&p.sham)&&ud(P,"sham",!0),ud(Qe,a,P),be&&(rp(ep,g=H+"Prototype")||ud(ep,g,{}),ud(ep[g],a,u),m.real&&$e&&(l||!$e[a])&&ud($e,a,u)))},Xr=Math.ceil,Pv=Math.floor,C4=Math.trunc||function(m){var s=+m;return(s>0?Pv:Xr)(s)},Gc=function(m){var s=+m;return s!=s||s===0?0:C4(s)},fb=Gc,Jc=Math.max,jv=Math.min,Ln=function(m,s){var l=fb(m);return l<0?Jc(l+s,0):jv(l,s)},kh=Gc,mm=Math.min,dc=function(m){return m>0?mm(kh(m),9007199254740991):0},Gl=function(m){return dc(m.length)},Cv=Mo,Ph=Ln,gl=Gl,ya=function(m){return function(s,l,f){var g,a=Cv(s),u=gl(a),p=Ph(f,u);if(m&&l!=l){for(;u>p;)if((g=a[p++])!=g)return!0}else for(;u>p;p++)if((m||p in a)&&a[p]===l)return m||p||0;return!m&&-1}},Tv={includes:ya(!0),indexOf:ya(!1)},ro={},ws=Ui,T4=Mo,vm=Tv.indexOf,jh=ro,gm=X([].push),hc=function(m,s){var l,f=T4(m),g=0,a=[];for(l in f)!ws(jh,l)&&ws(f,l)&&gm(a,l);for(;s.length>g;)ws(f,l=s[g++])&&(~vm(a,l)||gm(a,l));return a},ba=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],cd=hc,Gr=ba,fd=Object.keys||function(m){return cd(m,Gr)},ku={};ku.f=Object.getOwnPropertySymbols;var Xc=Ue,pb=X,n5=Mt,o5=d,Js=fd,Av=ku,Kc=wt,db=ts,Mv=An,pd=Object.assign,i5=Object.defineProperty,hb=pb([].concat),ym=!pd||o5(function(){if(Xc&&pd({b:1},pd(i5({},"a",{enumerable:!0,get:function(){i5(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var m={},s={},l=Symbol("assign detection"),f="abcdefghijklmnopqrst";return m[l]=7,f.split("").forEach(function(g){s[g]=g}),pd({},m)[l]!==7||Js(pd({},s)).join("")!==f})?function(m,s){for(var l=db(m),f=arguments.length,g=1,a=Av.f,u=Kc.f;f>g;)for(var p,O=Mv(arguments[g++]),P=a?hb(Js(O),a(O)):Js(O),z=P.length,H=0;z>H;)p=P[H++],Xc&&!n5(u,O,p)||(l[p]=O[p]);return l}:pd,a5=ym;Pr({target:"Object",stat:!0,arity:2,forced:Object.assign!==a5},{assign:a5});var Po=r(mr.Object.assign),Ch=X([].slice),mb=X,Th=Xn,s5=Dn,Rv=Ui,Ah=Ch,Jl=y,Pu=Function,Dv=mb([].concat),yl=mb([].join),zv={},bm=Jl?Pu.bind:function(m){var s=Th(this),l=s.prototype,f=Ah(arguments,1),g=function(){var a=Dv(f,Ah(arguments));return this instanceof g?function(u,p,O){if(!Rv(zv,p)){for(var P=[],z=0;z=.1;)(be=+a[H++%u])>z&&(be=z),pe=Math.sqrt(be*be/(1+P*P)),s+=pe=p<0?-pe:pe,l+=P*pe,ee===!0?m.lineTo(s,l):m.moveTo(s,l),z-=be,ee=!ee}var A4={circle:gb,dashedLine:Fo,database:bb,diamond:function(m,s,l,f){m.beginPath(),m.lineTo(s,l+f),m.lineTo(s+f,l),m.lineTo(s,l-f),m.lineTo(s-f,l),m.closePath()},ellipse:yb,ellipse_vis:yb,hexagon:function(m,s,l,f){m.beginPath();var g=2*Math.PI/6;m.moveTo(s+f,l);for(var a=1;a<6;a++)m.lineTo(s+f*Math.cos(g*a),l+f*Math.sin(g*a));m.closePath()},roundRect:Om,square:function(m,s,l,f){m.beginPath(),m.rect(s-f,l-f,2*f,2*f),m.closePath()},star:function(m,s,l,f){m.beginPath(),l+=.1*(f*=.82);for(var g=0;g<10;g++){var a=g%2==0?1.3*f:.5*f;m.lineTo(s+a*Math.sin(2*g*Math.PI/10),l-a*Math.cos(2*g*Math.PI/10))}m.closePath()},triangle:function(m,s,l,f){m.beginPath(),l+=.275*(f*=1.15);var g=2*f,a=g/2,u=Math.sqrt(3)/6*g,p=Math.sqrt(g*g-a*a);m.moveTo(s,l-(p-u)),m.lineTo(s+a,l+u),m.lineTo(s-a,l+u),m.lineTo(s,l-(p-u)),m.closePath()},triangleDown:function(m,s,l,f){m.beginPath(),l-=.275*(f*=1.15);var g=2*f,a=g/2,u=Math.sqrt(3)/6*g,p=Math.sqrt(g*g-a*a);m.moveTo(s,l+(p-u)),m.lineTo(s+a,l-u),m.lineTo(s-a,l-u),m.lineTo(s,l+(p-u)),m.closePath()}},M4={exports:{}};(function(m){function s(l){if(l)return function(f){for(var g in s.prototype)f[g]=s.prototype[g];return f}(l)}m.exports=s,s.prototype.on=s.prototype.addEventListener=function(l,f){return this._callbacks=this._callbacks||{},(this._callbacks["$"+l]=this._callbacks["$"+l]||[]).push(f),this},s.prototype.once=function(l,f){function g(){this.off(l,g),f.apply(this,arguments)}return g.fn=f,this.on(l,g),this},s.prototype.off=s.prototype.removeListener=s.prototype.removeAllListeners=s.prototype.removeEventListener=function(l,f){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var g,a=this._callbacks["$"+l];if(!a)return this;if(arguments.length==1)return delete this._callbacks["$"+l],this;for(var u=0;u=p?m?"":void 0:(f=ef(a,u))<55296||f>56319||u+1===p||(g=ef(a,u+1))<56320||g>57343?m?Yl(a,u):f:m?md(a,u,u+2):g-56320+(f-55296<<10)+65536}},Ob={codeAt:op(!1),charAt:op(!0)},c5=Me,Wv=i.WeakMap,vd=c5(Wv)&&/native code/.test(String(Wv)),xb=Kf,Ql=xu("keys"),zh=function(m){return Ql[m]||(Ql[m]=xb(m))},_b=vd,f5=i,Sb=Dn,Fa=Zf,Hv=Ui,km=pc,$v=zh,gd=ro,Vv="Object already initialized",qv=f5.TypeError,Pm=f5.WeakMap;if(_b||km.state){var bl=km.state||(km.state=new Pm);bl.get=bl.get,bl.has=bl.has,bl.set=bl.set,xm=function(m,s){if(bl.has(m))throw new qv(Vv);return s.facade=m,bl.set(m,s),s},dd=function(m){return bl.get(m)||{}},_m=function(m){return bl.has(m)}}else{var tf=$v("state");gd[tf]=!0,xm=function(m,s){if(Hv(m,tf))throw new qv(Vv);return s.facade=m,Fa(m,tf,s),s},dd=function(m){return Hv(m,tf)?m[tf]:{}},_m=function(m){return Hv(m,tf)}}var ju={set:xm,get:dd,has:_m,enforce:function(m){return _m(m)?dd(m):xm(m,{})},getterFor:function(m){return function(s){var l;if(!Sb(s)||(l=dd(s)).type!==m)throw new qv("Incompatible receiver, "+m+" required");return l}}},mc=Ue,ip=Ui,jm=Function.prototype,vc=mc&&Object.getOwnPropertyDescriptor,Nh=ip(jm,"name"),Uv={EXISTS:Nh,PROPER:Nh&&function(){}.name==="something",CONFIGURABLE:Nh&&(!mc||mc&&vc(jm,"name").configurable)},yd={},ap=Ue,Zl=La,Cm=ci,Tm=Us,Lh=Mo,p5=fd;yd.f=ap&&!Zl?Object.defineProperties:function(m,s){Tm(m);for(var l,f=Lh(s),g=p5(s),a=g.length,u=0;a>u;)Cm.f(m,l=g[u++],f[l]);return m};var bd,d5=rn("document","documentElement"),rf=Us,Eb=yd,Ro=ba,R4=ro,gc=d5,Ht=Su,wd="prototype",sp="script",Cu=zh("IE_PROTO"),no=function(){},pi=function(m){return"<"+sp+">"+m+""},Gv=function(m){m.write(pi("")),m.close();var s=m.parentWindow.Object;return m=null,s},nf=function(){try{bd=new ActiveXObject("htmlfile")}catch{}var m,s,l;nf=typeof document<"u"?document.domain&&bd?Gv(bd):(s=Ht("iframe"),l="java"+sp+":",s.style.display="none",gc.appendChild(s),s.src=String(l),(m=s.contentWindow.document).open(),m.write(pi("document.F=Object")),m.close(),m.F):Gv(bd);for(var f=Ro.length;f--;)delete nf[wd][Ro[f]];return nf()};R4[Cu]=!0;var yc,D4,Od,of=Object.create||function(m,s){var l;return m!==null?(no[wd]=rf(m),l=new no,no[wd]=null,l[Cu]=m):l=nf(),s===void 0?l:Eb.f(l,s)},Jv=!d(function(){function m(){}return m.prototype.constructor=null,Object.getPrototypeOf(new m)!==m.prototype}),Tu=Ui,Am=Me,h5=ts,z4=Jv,di=zh("IE_PROTO"),Fh=Object,m5=Fh.prototype,Ji=z4?Fh.getPrototypeOf:function(m){var s=h5(m);if(Tu(s,di))return s[di];var l=s.constructor;return Am(l)&&s instanceof l?l.prototype:s instanceof Fh?m5:null},Mm=Zf,Au=function(m,s,l,f){return f&&f.enumerable?m[s]=l:Mm(m,s,l),m},eu=d,v5=Me,Ib=Dn,N4=of,g5=Ji,Xv=Au,kb=Go("iterator"),Rm=!1;[].keys&&("next"in(Od=[].keys())?(D4=g5(g5(Od)))!==Object.prototype&&(yc=D4):Rm=!0);var af=!Ib(yc)||eu(function(){var m={};return yc[kb].call(m)!==m});v5((yc=af?{}:N4(yc))[kb])||Xv(yc,kb,function(){return this});var Dm={IteratorPrototype:yc,BUGGY_SAFARI_ITERATORS:Rm},zm=Kl,y5=Lv?{}.toString:function(){return"[object "+zm(this)+"]"},sf=Lv,lp=ci.f,b5=Zf,Pb=Ui,xd=y5,Nm=Go("toStringTag"),tu=function(m,s,l,f){if(m){var g=l?m:m.prototype;Pb(g,Nm)||lp(g,Nm,{configurable:!0,value:s}),f&&!sf&&b5(g,"toString",xd)}},ru={},bc=Dm.IteratorPrototype,jb=of,wa=Sr,wl=tu,up=ru,L4=function(){return this},Xi=X,F4=Xn,B4=Me,Bh=String,_d=TypeError,Mu=function(m,s,l){try{return Xi(F4(Object.getOwnPropertyDescriptor(m,s)[l]))}catch{}},Rn=Us,j=function(m){if(typeof m=="object"||B4(m))return m;throw new _d("Can't set "+Bh(m)+" as a prototype")},$=Object.setPrototypeOf||("__proto__"in{}?function(){var m,s=!1,l={};try{(m=Mu(Object.prototype,"__proto__","set"))(l,[]),s=l instanceof Array}catch{}return function(f,g){return Rn(f),j(g),s?m(f,g):f.__proto__=g,f}}():void 0),oe=Pr,ce=Mt,Ee=Uv,He=function(m,s,l,f){var g=s+" Iterator";return m.prototype=jb(bc,{next:wa(+!f,l)}),wl(m,g,!1,!0),up[g]=L4,m},xt=Ji,Kt=tu,Qr=Au,Fn=ru,Ri=Dm,nu=Ee.PROPER,Ru=Ri.BUGGY_SAFARI_ITERATORS,Ks=Go("iterator"),Jo="keys",Cb="values",a7="entries",W4=function(){return this},w5=function(m,s,l,f,g,a,u){He(l,s,f);var p,O,P,z=function($e){if($e===g&&Ae)return Ae;if(!Ru&&$e&&$e in pe)return pe[$e];switch($e){case Jo:case Cb:case a7:return function(){return new l(this,$e)}}return function(){return new l(this)}},H=s+" Iterator",ee=!1,pe=m.prototype,be=pe[Ks]||pe["@@iterator"]||g&&pe[g],Ae=!Ru&&be||z(g),Qe=s==="Array"&&pe.entries||be;if(Qe&&(p=xt(Qe.call(new m)))!==Object.prototype&&p.next&&(Kt(p,H,!0,!0),Fn[H]=W4),nu&&g===Cb&&be&&be.name!==Cb&&(ee=!0,Ae=function(){return ce(be,this)}),g)if(O={values:z(Cb),keys:a?Ae:z(Jo),entries:z(a7)},u)for(P in O)(Ru||ee||!(P in pe))&&Qr(pe,P,O[P]);else oe({target:s,proto:!0,forced:Ru||ee},O);return u&&pe[Ks]!==Ae&&Qr(pe,Ks,Ae,{name:g}),Fn[s]=Ae,O},Lm=function(m,s){return{value:m,done:s}},i9=Ob.charAt,Kk=Xs,s7=ju,a9=w5,s9=Lm,Kv="String Iterator",l9=s7.set,u9=s7.getterFor(Kv);a9(String,"String",function(m){l9(this,{type:Kv,string:Kk(m),index:0})},function(){var m,s=u9(this),l=s.string,f=s.index;return f>=l.length?s9(void 0,!0):(m=i9(l,f),s.index+=m.length,s9(m,!1))});var Yk=Mt,O5=Us,Yv=vh,l7=function(m,s,l){var f,g;O5(m);try{if(!(f=Yv(m,"return"))){if(s==="throw")throw l;return l}f=Yk(f,m)}catch(a){g=!0,f=a}if(s==="throw")throw l;if(g)throw f;return O5(f),l},Qk=Us,H4=l7,x5=ru,Xo=Go("iterator"),Sd=Array.prototype,Qv=function(m){return m!==void 0&&(x5.Array===m||Sd[Xo]===m)},$4=Me,Wh=pc,ou=X(Function.toString);$4(Wh.inspectSource)||(Wh.inspectSource=function(m){return ou(m)});var Hh=Wh.inspectSource,_5=X,u7=d,V4=Me,hi=Kl,Tb=Hh,Du=function(){},$h=[],c7=rn("Reflect","construct"),S5=/^\s*(?:class|function)\b/,ns=_5(S5.exec),Bo=!S5.test(Du),cp=function(m){if(!V4(m))return!1;try{return c7(Du,$h,m),!0}catch{return!1}},iu=function(m){if(!V4(m))return!1;switch(hi(m)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return Bo||!!ns(S5,Tb(m))}catch{return!0}};iu.sham=!0;var Zv=!c7||u7(function(){var m;return cp(cp.call)||!cp(Object)||!cp(function(){m=!0})||m})?iu:cp,q4=gh,E5=ci,Ab=Sr,Vh=function(m,s,l){var f=q4(s);f in m?E5.f(m,f,Ab(0,l)):m[f]=l},Mb=Kl,lf=vh,Ba=Oo,eg=ru,Fm=Go("iterator"),Bm=function(m){if(!Ba(m))return lf(m,Fm)||lf(m,"@@iterator")||eg[Mb(m)]},f7=Mt,Wm=Xn,Hm=Us,U4=Vi,Wa=Bm,I5=TypeError,Rb=function(m,s){var l=arguments.length<2?Wa(m):s;if(Wm(l))return Hm(f7(l,m));throw new I5(U4(m)+" is not iterable")},Db=Sh,k5=Mt,P5=ts,tg=function(m,s,l,f){try{return f?s(Qk(l)[0],l[1]):s(l)}catch(g){H4(m,"throw",g)}},qh=Qv,rg=Zv,$m=Gl,ng=Vh,j5=Rb,og=Bm,ig=Array,G4=Go("iterator"),J4=!1;try{var zb=0,Nb={next:function(){return{done:!!zb++}},return:function(){J4=!0}};Nb[G4]=function(){return this},Array.from(Nb,function(){throw 2})}catch{}var X4=function(m){var s=P5(m),l=rg(this),f=arguments.length,g=f>1?arguments[1]:void 0,a=g!==void 0;a&&(g=Db(g,f>2?arguments[2]:void 0));var u,p,O,P,z,H,ee=og(s),pe=0;if(!ee||this===ig&&qh(ee))for(u=$m(s),p=l?new this(u):ig(u);u>pe;pe++)H=a?g(s[pe],pe):s[pe],ng(p,pe,H);else for(z=(P=j5(s,ee)).next,p=l?new this:[];!(O=k5(z,P)).done;pe++)H=a?tg(P,g,[O.value,pe],!0):O.value,ng(p,pe,H);return p.length=pe,p},Lb=function(m,s){try{if(!s&&!J4)return!1}catch{return!1}var l=!1;try{var f={};f[G4]=function(){return{next:function(){return{done:l=!0}}}},m(f)}catch{}return l};Pr({target:"Array",stat:!0,forced:!Lb(function(m){Array.from(m)})},{from:X4});var C5=mr.Array.from,Ed=r(C5),ag=Mo,K4=ru,Vm=ju;ci.f;var c9=w5,Id=Lm,fp="Array Iterator",wc=Vm.set,Ol=Vm.getterFor(fp);c9(Array,"Array",function(m,s){wc(this,{type:fp,target:ag(m),index:0,kind:s})},function(){var m=Ol(this),s=m.target,l=m.kind,f=m.index++;if(!s||f>=s.length)return m.target=void 0,Id(void 0,!0);switch(l){case"keys":return Id(f,!1);case"values":return Id(s[f],!1)}return Id([f,s[f]],!1)},"values"),K4.Arguments=K4.Array;var kd=Bm,Fb={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},sg=i,p7=Kl,Ys=Zf,Pd=ru,qm=Go("toStringTag");for(var Bb in Fb){var Uh=sg[Bb],lg=Uh&&Uh.prototype;lg&&p7(lg)!==qm&&Ys(lg,qm,Bb),Pd[Bb]=Pd.Array}var T5=kd,Gh=r(T5),Jh=r(T5);function rr(m,s){if(!(m instanceof s))throw new TypeError("Cannot call a class as a function")}var Y4={exports:{}},xl=Pr,ug=Ue,Q4=ci.f;xl({target:"Object",stat:!0,forced:Object.defineProperty!==Q4,sham:!ug},{defineProperty:Q4});var Xh=mr.Object,jd=Y4.exports=function(m,s,l){return Xh.defineProperty(m,s,l)};Xh.defineProperty.sham&&(jd.sham=!0);var Um=Y4.exports,Qs=r(Um),cg=ye,pp=Array.isArray||function(m){return cg(m)==="Array"},Z4=TypeError,A5=function(m){if(m>9007199254740991)throw Z4("Maximum allowed index exceeded");return m},fg=pp,d7=Zv,Wb=Dn,M5=Go("species"),e6=Array,Ki=function(m){var s;return fg(m)&&(s=m.constructor,(d7(s)&&(s===e6||fg(s.prototype))||Wb(s)&&(s=s[M5])===null)&&(s=void 0)),s===void 0?e6:s},Hb=function(m,s){return new(Ki(m))(s===0?0:s)},f9=d,R5=Hs,t6=Go("species"),$b=function(m){return R5>=51||!f9(function(){var s=[];return(s.constructor={})[t6]=function(){return{foo:1}},s[m](Boolean).foo!==1})},Vb=Pr,r6=d,n6=pp,qb=Dn,Ub=ts,Kh=Gl,h7=A5,o6=Vh,D5=Hb,Yi=$b,ei=Hs,i6=Go("isConcatSpreadable"),m7=ei>=51||!r6(function(){var m=[];return m[i6]=!1,m.concat()[0]!==m}),p9=function(m){if(!qb(m))return!1;var s=m[i6];return s!==void 0?!!s:n6(m)};Vb({target:"Array",proto:!0,arity:1,forced:!m7||!Yi("concat")},{concat:function(m){var s,l,f,g,a,u=Ub(this),p=D5(u,0),O=0;for(s=-1,f=arguments.length;smt;mt++)if((p||mt in Ae)&&(pe=Qe(ee=Ae[mt],mt,be),m))if(s)Ct[mt]=pe;else if(pe)switch(m){case 3:return!0;case 5:return ee;case 6:return mt;case 2:I7(Ct,ee)}else switch(m){case 4:return!1;case 7:I7(Ct,ee)}return a?-1:f||g?g:Ct}},sa={forEach:Jm(0),map:Jm(1),filter:Jm(2),some:Jm(3),every:Jm(4),find:Jm(5),findIndex:Jm(6),filterReject:Jm(7)},B5=Pr,mg=i,W5=Mt,k7=X,Qh=Ue,Xm=Wc,P7=d,os=Ui,g9=Mn,j7=Us,Jb=Mo,vg=gh,y9=Xs,c6=Sr,Km=of,f6=fd,C7=pg,p6=_l,gg=ku,Xb=Ve,H5=ci,T7=yd,A7=wt,Ym=Au,M7=au,$5=xu,R7=ro,d6=Kf,V5=Go,D7=Gm,b9=_i,z7=l6,N7=tu,Kb=ju,dp=sa.forEach,is=zh("hidden"),q5="Symbol",Td="prototype",w9=Kb.set,Qi=Kb.getterFor(q5),Oc=Object[Td],as=mg.Symbol,Zs=as&&as[Td],L7=mg.RangeError,O9=mg.TypeError,yg=mg.QObject,h6=Xb.f,el=H5.f,Yb=p6.f,m6=A7.f,U5=k7([].push),uf=$5("symbols"),bg=$5("op-symbols"),G5=$5("wks"),Zh=!yg||!yg[Td]||!yg[Td].findChild,Qb=function(m,s,l){var f=h6(Oc,s);f&&delete Oc[s],el(m,s,l),f&&m!==Oc&&el(Oc,s,f)},J5=Qh&&P7(function(){return Km(el({},"a",{get:function(){return el(this,"a",{value:7}).a}})).a!==7})?Qb:el,X5=function(m,s){var l=uf[m]=Km(Zs);return w9(l,{type:q5,tag:m,description:s}),Qh||(l.description=s),l},hp=function(m,s,l){m===Oc&&hp(bg,s,l),j7(m);var f=vg(s);return j7(l),os(uf,f)?(l.enumerable?(os(m,is)&&m[is][f]&&(m[is][f]=!1),l=Km(l,{enumerable:c6(0,!1)})):(os(m,is)||el(m,is,c6(1,{})),m[is][f]=!0),J5(m,f,l)):el(m,f,l)},Sl=function(m,s){j7(m);var l=Jb(s),f=f6(l).concat(F7(l));return dp(f,function(g){Qh&&!W5(v6,l,g)||hp(m,g,l[g])}),m},v6=function(m){var s=vg(m),l=W5(m6,this,s);return!(this===Oc&&os(uf,s)&&!os(bg,s))&&(!(l||!os(this,s)||!os(uf,s)||os(this,is)&&this[is][s])||l)},g6=function(m,s){var l=Jb(m),f=vg(s);if(l!==Oc||!os(uf,f)||os(bg,f)){var g=h6(l,f);return!g||!os(uf,f)||os(l,is)&&l[is][f]||(g.enumerable=!0),g}},y6=function(m){var s=Yb(Jb(m)),l=[];return dp(s,function(f){os(uf,f)||os(R7,f)||U5(l,f)}),l},F7=function(m){var s=m===Oc,l=Yb(s?bg:Jb(m)),f=[];return dp(l,function(g){!os(uf,g)||s&&!os(Oc,g)||U5(f,uf[g])}),f};Xm||(as=function(){if(g9(Zs,this))throw new O9("Symbol is not a constructor");var m=arguments.length&&arguments[0]!==void 0?y9(arguments[0]):void 0,s=d6(m),l=function(f){this===Oc&&W5(l,bg,f),os(this,is)&&os(this[is],s)&&(this[is][s]=!1);var g=c6(1,f);try{J5(this,s,g)}catch(a){if(!(a instanceof L7))throw a;Qb(this,s,g)}};return Qh&&Zh&&J5(Oc,s,{configurable:!0,set:l}),X5(s,m)},Ym(Zs=as[Td],"toString",function(){return Qi(this).tag}),Ym(as,"withoutSetter",function(m){return X5(d6(m),m)}),A7.f=v6,H5.f=hp,T7.f=Sl,Xb.f=g6,C7.f=p6.f=y6,gg.f=F7,D7.f=function(m){return X5(V5(m),m)},Qh&&M7(Zs,"description",{configurable:!0,get:function(){return Qi(this).description}})),B5({global:!0,constructor:!0,wrap:!0,forced:!Xm,sham:!Xm},{Symbol:as}),dp(f6(G5),function(m){b9(m)}),B5({target:q5,stat:!0,forced:!Xm},{useSetter:function(){Zh=!0},useSimple:function(){Zh=!1}}),B5({target:"Object",stat:!0,forced:!Xm,sham:!Qh},{create:function(m,s){return s===void 0?Km(m):Sl(Km(m),s)},defineProperty:hp,defineProperties:Sl,getOwnPropertyDescriptor:g6}),B5({target:"Object",stat:!0,forced:!Xm},{getOwnPropertyNames:y6}),z7(),N7(as,q5),R7[is]=!0;var b6=Wc&&!!Symbol.for&&!!Symbol.keyFor,x9=Pr,B7=rn,_9=Ui,S9=Xs,Qm=xu,w6=b6,K5=Qm("string-to-symbol-registry"),O6=Qm("symbol-to-string-registry");x9({target:"Symbol",stat:!0,forced:!w6},{for:function(m){var s=S9(m);if(_9(K5,s))return K5[s];var l=B7("Symbol")(s);return K5[s]=l,O6[l]=s,l}});var E9=Pr,ss=Ui,I9=ia,x6=Vi,k9=b6,Zb=xu("symbol-to-string-registry");E9({target:"Symbol",stat:!0,forced:!k9},{keyFor:function(m){if(!I9(m))throw new TypeError(x6(m)+" is not a symbol");if(ss(Zb,m))return Zb[m]}});var Y5=pp,Zm=Me,e2=ye,Q5=Xs,_6=X([].push),Z5=Pr,S6=rn,E6=L,ew=Mt,e1=X,wg=d,mp=Me,t2=ia,W7=Ch,tw=function(m){if(Zm(m))return m;if(Y5(m)){for(var s=m.length,l=[],f=0;fm.length)&&(s=m.length);for(var l=0,f=new Array(s);lI.length)&&(A=I.length);for(var B=0,W=new Array(A);B"u"||!Zu||Zu.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Zu(Boolean,[],function(){})),!0}catch{return!1}}var jAe=function(I){rh(B,I);var A=kAe(B);function B(W,J){var ie,ve;return t(this,B),ve=A.call(this),Fu(J1(ve),"length",0),Fu(J1(ve),"_ids",new YH),ve._options=J||{},ve._listener=Md(ie=ve._onEvent).call(ie,J1(ve)),ve.setData(W),ve}return Ha(B,[{key:"idProp",get:function(){return this.getDataSet().idProp}},{key:"setData",value:function(J){if(this._data){this._data.off&&this._data.off("*",this._listener);var ie=this._data.getIds({filter:Ss(this._options)}),ve=this._data.get(ie);this._ids.clear(),this.length=0,this._trigger("remove",{items:ie,oldData:ve})}if(J!=null){this._data=J;for(var je=this._data.getIds({filter:Ss(this._options)}),xe=0,Re=je.length;xe{(function(e,t){typeof bK=="object"&&typeof Oke<"u"?t(bK,wke()):typeof define=="function"&&define.amd?define(["exports","vis-data/peer/umd/vis-data.js"],t):t((e=typeof globalThis<"u"?globalThis:e||self).vis=e.vis||{},e.vis)})(bK,function(e,t){var n=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function r(m){return m&&m.__esModule&&Object.prototype.hasOwnProperty.call(m,"default")?m.default:m}var o=function(m){return m&&m.Math===Math&&m},i=o(typeof globalThis=="object"&&globalThis)||o(typeof window=="object"&&window)||o(typeof self=="object"&&self)||o(typeof n=="object"&&n)||function(){return this}()||n||Function("return this")(),d=function(m){try{return!!m()}catch{return!0}},y=!d(function(){var m=function(){}.bind();return typeof m!="function"||m.hasOwnProperty("prototype")}),_=y,k=Function.prototype,T=k.apply,N=k.call,L=typeof Reflect=="object"&&Reflect.apply||(_?N.bind(T):function(){return N.apply(T,arguments)}),Y=y,q=Function.prototype,K=q.call,U=Y&&q.bind.bind(K,K),X=Y?U:function(m){return function(){return K.apply(m,arguments)}},Z=X,fe=Z({}.toString),me=Z("".slice),ye=function(m){return me(fe(m),8,-1)},ge=ye,ae=X,Pe=function(m){if(ge(m)==="Function")return ae(m)},Ne=typeof document=="object"&&document.all,Ye={all:Ne,IS_HTMLDDA:Ne===void 0&&Ne!==void 0},Je=Ye.all,Me=Ye.IS_HTMLDDA?function(m){return typeof m=="function"||m===Je}:function(m){return typeof m=="function"},Ve={},Ue=!d(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),ht=y,yt=Function.prototype.call,Rt=ht?yt.bind(yt):function(){return yt.apply(yt,arguments)},wt={},_t={}.propertyIsEnumerable,Nt=Object.getOwnPropertyDescriptor,At=Nt&&!_t.call({1:2},1);wt.f=At?function(m){var s=Nt(this,m);return!!s&&s.enumerable}:_t;var ir,Pt,Sr=function(m,s){return{enumerable:!(1&m),configurable:!(2&m),writable:!(4&m),value:s}},Nr=d,ar=ye,xr=Object,qn=X("".split),An=Nr(function(){return!xr("z").propertyIsEnumerable(0)})?function(m){return ar(m)==="String"?qn(m,""):xr(m)}:xr,Oo=function(m){return m==null},yn=Oo,Vr=TypeError,eo=function(m){if(yn(m))throw new Vr("Can't call method on "+m);return m},Sn=An,Ti=eo,Mo=function(m){return Sn(Ti(m))},xo=Me,Qa=Ye.all,Dn=Ye.IS_HTMLDDA?function(m){return typeof m=="object"?m!==null:xo(m)||m===Qa}:function(m){return typeof m=="object"?m!==null:xo(m)},mr={},Un=mr,Za=i,Ai=Me,mn=function(m){return Ai(m)?m:void 0},rn=function(m,s){return arguments.length<2?mn(Un[m])||mn(Za[m]):Un[m]&&Un[m][s]||Za[m]&&Za[m][s]},Mn=X({}.isPrototypeOf),go=typeof navigator<"u"&&String(navigator.userAgent)||"",cn=i,ms=go,Oi=cn.process,cc=cn.Deno,ko=Oi&&Oi.versions||cc&&cc.version,Ws=ko&&ko.v8;Ws&&(Pt=(ir=Ws.split("."))[0]>0&&ir[0]<4?1:+(ir[0]+ir[1])),!Pt&&ms&&(!(ir=ms.match(/Edge\/(\d+)/))||ir[1]>=74)&&(ir=ms.match(/Chrome\/(\d+)/))&&(Pt=+ir[1]);var Hs=Pt,es=Hs,rb=d,am=i.String,Wc=!!Object.getOwnPropertySymbols&&!rb(function(){var m=Symbol("symbol detection");return!am(m)||!(Object(m)instanceof Symbol)||!Symbol.sham&&es&&es<41}),ql=Wc&&!Symbol.sham&&typeof Symbol.iterator=="symbol",Na=rn,fc=Me,vs=Mn,vr=Object,ia=ql?function(m){return typeof m=="symbol"}:function(m){var s=Na("Symbol");return fc(s)&&vs(s.prototype,vr(m))},Uo=String,Vi=function(m){try{return Uo(m)}catch{return"Object"}},li=Me,Gn=Vi,nd=TypeError,Xn=function(m){if(li(m))return m;throw new nd(Gn(m)+" is not a function")},va=Xn,K3=Oo,vh=function(m,s){var l=m[s];return K3(l)?void 0:va(l)},qi=Rt,xi=Me,$s=Dn,No=TypeError,Ul={exports:{}},Ou=i,Gf=Object.defineProperty,Vs=function(m,s){try{Gf(Ou,m,{value:s,configurable:!0,writable:!0})}catch{Ou[m]=s}return s},gv="__core-js_shared__",pc=i[gv]||Vs(gv,{}),Jf=pc;(Ul.exports=function(m,s){return Jf[m]||(Jf[m]=s!==void 0?s:{})})("versions",[]).push({version:"3.33.0",mode:"pure",copyright:"\xA9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE",source:"https://github.com/zloirock/core-js"});var xu=Ul.exports,qs=eo,Xf=Object,ts=function(m){return Xf(qs(m))},gs=ts,nb=X({}.hasOwnProperty),Ui=Object.hasOwn||function(m,s){return nb(gs(m),s)},En=X,yv=0,Y3=Math.random(),ob=En(1 .toString),Kf=function(m){return"Symbol("+(m===void 0?"":m)+")_"+ob(++yv+Y3,36)},od=xu,ib=Ui,sm=Kf,Q3=Wc,Yf=ql,id=i.Symbol,hl=od("wks"),Mi=Yf?id.for||id:id&&id.withoutSetter||sm,Go=function(m){return ib(hl,m)||(hl[m]=Q3&&ib(id,m)?id[m]:Mi("Symbol."+m)),hl[m]},ui=Rt,Z3=Dn,Zo=ia,e5=vh,Hc=function(m,s){var l,f;if(s==="string"&&xi(l=m.toString)&&!$s(f=qi(l,m))||xi(l=m.valueOf)&&!$s(f=qi(l,m))||s!=="string"&&xi(l=m.toString)&&!$s(f=qi(l,m)))return f;throw new No("Can't convert object to primitive value")},bv=TypeError,ab=Go("toPrimitive"),$c=function(m,s){if(!Z3(m)||Zo(m))return m;var l,f=e5(m,ab);if(f){if(s===void 0&&(s="default"),l=ui(f,m,s),!Z3(l)||Zo(l))return l;throw new bv("Can't convert object to primitive value")}return s===void 0&&(s="number"),Hc(m,s)},_u=ia,gh=function(m){var s=$c(m,"string");return _u(s)?s:s+""},Vc=Dn,yh=i.document,lm=Vc(yh)&&Vc(yh.createElement),Su=function(m){return lm?yh.createElement(m):{}},ml=Su,ad=!Ue&&!d(function(){return Object.defineProperty(ml("div"),"a",{get:function(){return 7}}).a!==7}),um=Ue,Lo=Rt,sb=wt,bh=Sr,wv=Mo,Ov=gh,j4=Ui,ys=ad,wh=Object.getOwnPropertyDescriptor;Ve.f=um?wh:function(m,s){if(m=wv(m),s=Ov(s),ys)try{return wh(m,s)}catch{}if(j4(m,s))return bh(!Lo(sb.f,m,s),m[s])};var xv=d,_v=Me,Oh=/#|\.prototype\./,xh=function(m,s){var l=sd[qc(m)];return l===Sv||l!==Eu&&(_v(s)?xv(s):!!s)},qc=xh.normalize=function(m){return String(m).replace(Oh,".").toLowerCase()},sd=xh.data={},Eu=xh.NATIVE="N",Sv=xh.POLYFILL="P",t5=xh,cm=Xn,fm=y,_h=Pe(Pe.bind),Sh=function(m,s){return cm(m),s===void 0?m:fm?_h(m,s):function(){return m.apply(s,arguments)}},ci={},La=Ue&&d(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),lb=Dn,r5=String,Ev=TypeError,Us=function(m){if(lb(m))return m;throw new Ev(r5(m)+" is not an object")},Gs=Ue,fo=ad,pm=La,Iu=Us,Eh=gh,Iv=TypeError,kv=Object.defineProperty,Qf=Object.getOwnPropertyDescriptor,ld="enumerable",rs="configurable",to="writable";ci.f=Gs?pm?function(m,s,l){if(Iu(m),s=Eh(s),Iu(l),typeof m=="function"&&s==="prototype"&&"value"in l&&to in l&&!l[to]){var f=Qf(m,s);f&&f[to]&&(m[s]=l.value,l={configurable:rs in l?l[rs]:f[rs],enumerable:ld in l?l[ld]:f[ld],writable:!1})}return kv(m,s,l)}:kv:function(m,s,l){if(Iu(m),s=Eh(s),Iu(l),fo)try{return kv(m,s,l)}catch{}if("get"in l||"set"in l)throw new Iv("Accessors not supported");return"value"in l&&(m[s]=l.value),m};var ub=ci,vl=Sr,Zf=Ue?function(m,s,l){return ub.f(m,s,vl(1,l))}:function(m,s,l){return m[s]=l,m},bs=i,dm=L,Ih=Pe,Uc=Me,ga=Ve.f,hm=t5,ep=mr,tp=Sh,ud=Zf,rp=Ui,cb=function(m){var s=function(l,f,g){if(this instanceof s){switch(arguments.length){case 0:return new m;case 1:return new m(l);case 2:return new m(l,f)}return new m(l,f,g)}return dm(m,this,arguments)};return s.prototype=m.prototype,s},Pr=function(m,s){var l,f,g,a,u,p,O,P,z,H=m.target,ee=m.global,pe=m.stat,be=m.proto,Ae=ee?bs:pe?bs[H]:(bs[H]||{}).prototype,Qe=ee?ep:ep[H]||ud(ep,H,{})[H],$e=Qe.prototype;for(a in s)f=!(l=hm(ee?a:H+(pe?".":"#")+a,m.forced))&&Ae&&rp(Ae,a),p=Qe[a],f&&(O=m.dontCallGetSet?(z=ga(Ae,a))&&z.value:Ae[a]),u=f&&O?O:s[a],f&&typeof p==typeof u||(P=m.bind&&f?tp(u,bs):m.wrap&&f?cb(u):be&&Uc(u)?Ih(u):u,(m.sham||u&&u.sham||p&&p.sham)&&ud(P,"sham",!0),ud(Qe,a,P),be&&(rp(ep,g=H+"Prototype")||ud(ep,g,{}),ud(ep[g],a,u),m.real&&$e&&(l||!$e[a])&&ud($e,a,u)))},Xr=Math.ceil,Pv=Math.floor,C4=Math.trunc||function(m){var s=+m;return(s>0?Pv:Xr)(s)},Gc=function(m){var s=+m;return s!=s||s===0?0:C4(s)},fb=Gc,Jc=Math.max,jv=Math.min,Ln=function(m,s){var l=fb(m);return l<0?Jc(l+s,0):jv(l,s)},kh=Gc,mm=Math.min,dc=function(m){return m>0?mm(kh(m),9007199254740991):0},Gl=function(m){return dc(m.length)},Cv=Mo,Ph=Ln,gl=Gl,ya=function(m){return function(s,l,f){var g,a=Cv(s),u=gl(a),p=Ph(f,u);if(m&&l!=l){for(;u>p;)if((g=a[p++])!=g)return!0}else for(;u>p;p++)if((m||p in a)&&a[p]===l)return m||p||0;return!m&&-1}},Tv={includes:ya(!0),indexOf:ya(!1)},ro={},ws=Ui,T4=Mo,vm=Tv.indexOf,jh=ro,gm=X([].push),hc=function(m,s){var l,f=T4(m),g=0,a=[];for(l in f)!ws(jh,l)&&ws(f,l)&&gm(a,l);for(;s.length>g;)ws(f,l=s[g++])&&(~vm(a,l)||gm(a,l));return a},ba=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],cd=hc,Gr=ba,fd=Object.keys||function(m){return cd(m,Gr)},ku={};ku.f=Object.getOwnPropertySymbols;var Xc=Ue,pb=X,n5=Rt,o5=d,Js=fd,Av=ku,Kc=wt,db=ts,Mv=An,pd=Object.assign,i5=Object.defineProperty,hb=pb([].concat),ym=!pd||o5(function(){if(Xc&&pd({b:1},pd(i5({},"a",{enumerable:!0,get:function(){i5(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var m={},s={},l=Symbol("assign detection"),f="abcdefghijklmnopqrst";return m[l]=7,f.split("").forEach(function(g){s[g]=g}),pd({},m)[l]!==7||Js(pd({},s)).join("")!==f})?function(m,s){for(var l=db(m),f=arguments.length,g=1,a=Av.f,u=Kc.f;f>g;)for(var p,O=Mv(arguments[g++]),P=a?hb(Js(O),a(O)):Js(O),z=P.length,H=0;z>H;)p=P[H++],Xc&&!n5(u,O,p)||(l[p]=O[p]);return l}:pd,a5=ym;Pr({target:"Object",stat:!0,arity:2,forced:Object.assign!==a5},{assign:a5});var Po=r(mr.Object.assign),Ch=X([].slice),mb=X,Th=Xn,s5=Dn,Rv=Ui,Ah=Ch,Jl=y,Pu=Function,Dv=mb([].concat),yl=mb([].join),zv={},bm=Jl?Pu.bind:function(m){var s=Th(this),l=s.prototype,f=Ah(arguments,1),g=function(){var a=Dv(f,Ah(arguments));return this instanceof g?function(u,p,O){if(!Rv(zv,p)){for(var P=[],z=0;z=.1;)(be=+a[H++%u])>z&&(be=z),pe=Math.sqrt(be*be/(1+P*P)),s+=pe=p<0?-pe:pe,l+=P*pe,ee===!0?m.lineTo(s,l):m.moveTo(s,l),z-=be,ee=!ee}var A4={circle:gb,dashedLine:Fo,database:bb,diamond:function(m,s,l,f){m.beginPath(),m.lineTo(s,l+f),m.lineTo(s+f,l),m.lineTo(s,l-f),m.lineTo(s-f,l),m.closePath()},ellipse:yb,ellipse_vis:yb,hexagon:function(m,s,l,f){m.beginPath();var g=2*Math.PI/6;m.moveTo(s+f,l);for(var a=1;a<6;a++)m.lineTo(s+f*Math.cos(g*a),l+f*Math.sin(g*a));m.closePath()},roundRect:Om,square:function(m,s,l,f){m.beginPath(),m.rect(s-f,l-f,2*f,2*f),m.closePath()},star:function(m,s,l,f){m.beginPath(),l+=.1*(f*=.82);for(var g=0;g<10;g++){var a=g%2==0?1.3*f:.5*f;m.lineTo(s+a*Math.sin(2*g*Math.PI/10),l-a*Math.cos(2*g*Math.PI/10))}m.closePath()},triangle:function(m,s,l,f){m.beginPath(),l+=.275*(f*=1.15);var g=2*f,a=g/2,u=Math.sqrt(3)/6*g,p=Math.sqrt(g*g-a*a);m.moveTo(s,l-(p-u)),m.lineTo(s+a,l+u),m.lineTo(s-a,l+u),m.lineTo(s,l-(p-u)),m.closePath()},triangleDown:function(m,s,l,f){m.beginPath(),l-=.275*(f*=1.15);var g=2*f,a=g/2,u=Math.sqrt(3)/6*g,p=Math.sqrt(g*g-a*a);m.moveTo(s,l+(p-u)),m.lineTo(s+a,l-u),m.lineTo(s-a,l-u),m.lineTo(s,l+(p-u)),m.closePath()}},M4={exports:{}};(function(m){function s(l){if(l)return function(f){for(var g in s.prototype)f[g]=s.prototype[g];return f}(l)}m.exports=s,s.prototype.on=s.prototype.addEventListener=function(l,f){return this._callbacks=this._callbacks||{},(this._callbacks["$"+l]=this._callbacks["$"+l]||[]).push(f),this},s.prototype.once=function(l,f){function g(){this.off(l,g),f.apply(this,arguments)}return g.fn=f,this.on(l,g),this},s.prototype.off=s.prototype.removeListener=s.prototype.removeAllListeners=s.prototype.removeEventListener=function(l,f){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var g,a=this._callbacks["$"+l];if(!a)return this;if(arguments.length==1)return delete this._callbacks["$"+l],this;for(var u=0;u=p?m?"":void 0:(f=ef(a,u))<55296||f>56319||u+1===p||(g=ef(a,u+1))<56320||g>57343?m?Yl(a,u):f:m?md(a,u,u+2):g-56320+(f-55296<<10)+65536}},Ob={codeAt:op(!1),charAt:op(!0)},c5=Me,Wv=i.WeakMap,vd=c5(Wv)&&/native code/.test(String(Wv)),xb=Kf,Ql=xu("keys"),zh=function(m){return Ql[m]||(Ql[m]=xb(m))},_b=vd,f5=i,Sb=Dn,Fa=Zf,Hv=Ui,km=pc,$v=zh,gd=ro,Vv="Object already initialized",qv=f5.TypeError,Pm=f5.WeakMap;if(_b||km.state){var bl=km.state||(km.state=new Pm);bl.get=bl.get,bl.has=bl.has,bl.set=bl.set,xm=function(m,s){if(bl.has(m))throw new qv(Vv);return s.facade=m,bl.set(m,s),s},dd=function(m){return bl.get(m)||{}},_m=function(m){return bl.has(m)}}else{var tf=$v("state");gd[tf]=!0,xm=function(m,s){if(Hv(m,tf))throw new qv(Vv);return s.facade=m,Fa(m,tf,s),s},dd=function(m){return Hv(m,tf)?m[tf]:{}},_m=function(m){return Hv(m,tf)}}var ju={set:xm,get:dd,has:_m,enforce:function(m){return _m(m)?dd(m):xm(m,{})},getterFor:function(m){return function(s){var l;if(!Sb(s)||(l=dd(s)).type!==m)throw new qv("Incompatible receiver, "+m+" required");return l}}},mc=Ue,ip=Ui,jm=Function.prototype,vc=mc&&Object.getOwnPropertyDescriptor,Nh=ip(jm,"name"),Uv={EXISTS:Nh,PROPER:Nh&&function(){}.name==="something",CONFIGURABLE:Nh&&(!mc||mc&&vc(jm,"name").configurable)},yd={},ap=Ue,Zl=La,Cm=ci,Tm=Us,Lh=Mo,p5=fd;yd.f=ap&&!Zl?Object.defineProperties:function(m,s){Tm(m);for(var l,f=Lh(s),g=p5(s),a=g.length,u=0;a>u;)Cm.f(m,l=g[u++],f[l]);return m};var bd,d5=rn("document","documentElement"),rf=Us,Eb=yd,Ro=ba,R4=ro,gc=d5,Ht=Su,wd="prototype",sp="script",Cu=zh("IE_PROTO"),no=function(){},pi=function(m){return"<"+sp+">"+m+""},Gv=function(m){m.write(pi("")),m.close();var s=m.parentWindow.Object;return m=null,s},nf=function(){try{bd=new ActiveXObject("htmlfile")}catch{}var m,s,l;nf=typeof document<"u"?document.domain&&bd?Gv(bd):(s=Ht("iframe"),l="java"+sp+":",s.style.display="none",gc.appendChild(s),s.src=String(l),(m=s.contentWindow.document).open(),m.write(pi("document.F=Object")),m.close(),m.F):Gv(bd);for(var f=Ro.length;f--;)delete nf[wd][Ro[f]];return nf()};R4[Cu]=!0;var yc,D4,Od,of=Object.create||function(m,s){var l;return m!==null?(no[wd]=rf(m),l=new no,no[wd]=null,l[Cu]=m):l=nf(),s===void 0?l:Eb.f(l,s)},Jv=!d(function(){function m(){}return m.prototype.constructor=null,Object.getPrototypeOf(new m)!==m.prototype}),Tu=Ui,Am=Me,h5=ts,z4=Jv,di=zh("IE_PROTO"),Fh=Object,m5=Fh.prototype,Ji=z4?Fh.getPrototypeOf:function(m){var s=h5(m);if(Tu(s,di))return s[di];var l=s.constructor;return Am(l)&&s instanceof l?l.prototype:s instanceof Fh?m5:null},Mm=Zf,Au=function(m,s,l,f){return f&&f.enumerable?m[s]=l:Mm(m,s,l),m},eu=d,v5=Me,Ib=Dn,N4=of,g5=Ji,Xv=Au,kb=Go("iterator"),Rm=!1;[].keys&&("next"in(Od=[].keys())?(D4=g5(g5(Od)))!==Object.prototype&&(yc=D4):Rm=!0);var af=!Ib(yc)||eu(function(){var m={};return yc[kb].call(m)!==m});v5((yc=af?{}:N4(yc))[kb])||Xv(yc,kb,function(){return this});var Dm={IteratorPrototype:yc,BUGGY_SAFARI_ITERATORS:Rm},zm=Kl,y5=Lv?{}.toString:function(){return"[object "+zm(this)+"]"},sf=Lv,lp=ci.f,b5=Zf,Pb=Ui,xd=y5,Nm=Go("toStringTag"),tu=function(m,s,l,f){if(m){var g=l?m:m.prototype;Pb(g,Nm)||lp(g,Nm,{configurable:!0,value:s}),f&&!sf&&b5(g,"toString",xd)}},ru={},bc=Dm.IteratorPrototype,jb=of,wa=Sr,wl=tu,up=ru,L4=function(){return this},Xi=X,F4=Xn,B4=Me,Bh=String,_d=TypeError,Mu=function(m,s,l){try{return Xi(F4(Object.getOwnPropertyDescriptor(m,s)[l]))}catch{}},Rn=Us,j=function(m){if(typeof m=="object"||B4(m))return m;throw new _d("Can't set "+Bh(m)+" as a prototype")},$=Object.setPrototypeOf||("__proto__"in{}?function(){var m,s=!1,l={};try{(m=Mu(Object.prototype,"__proto__","set"))(l,[]),s=l instanceof Array}catch{}return function(f,g){return Rn(f),j(g),s?m(f,g):f.__proto__=g,f}}():void 0),oe=Pr,ce=Rt,Ee=Uv,He=function(m,s,l,f){var g=s+" Iterator";return m.prototype=jb(bc,{next:wa(+!f,l)}),wl(m,g,!1,!0),up[g]=L4,m},xt=Ji,Kt=tu,Qr=Au,Fn=ru,Ri=Dm,nu=Ee.PROPER,Ru=Ri.BUGGY_SAFARI_ITERATORS,Ks=Go("iterator"),Jo="keys",Cb="values",a7="entries",W4=function(){return this},w5=function(m,s,l,f,g,a,u){He(l,s,f);var p,O,P,z=function($e){if($e===g&&Ae)return Ae;if(!Ru&&$e&&$e in pe)return pe[$e];switch($e){case Jo:case Cb:case a7:return function(){return new l(this,$e)}}return function(){return new l(this)}},H=s+" Iterator",ee=!1,pe=m.prototype,be=pe[Ks]||pe["@@iterator"]||g&&pe[g],Ae=!Ru&&be||z(g),Qe=s==="Array"&&pe.entries||be;if(Qe&&(p=xt(Qe.call(new m)))!==Object.prototype&&p.next&&(Kt(p,H,!0,!0),Fn[H]=W4),nu&&g===Cb&&be&&be.name!==Cb&&(ee=!0,Ae=function(){return ce(be,this)}),g)if(O={values:z(Cb),keys:a?Ae:z(Jo),entries:z(a7)},u)for(P in O)(Ru||ee||!(P in pe))&&Qr(pe,P,O[P]);else oe({target:s,proto:!0,forced:Ru||ee},O);return u&&pe[Ks]!==Ae&&Qr(pe,Ks,Ae,{name:g}),Fn[s]=Ae,O},Lm=function(m,s){return{value:m,done:s}},i9=Ob.charAt,Kk=Xs,s7=ju,a9=w5,s9=Lm,Kv="String Iterator",l9=s7.set,u9=s7.getterFor(Kv);a9(String,"String",function(m){l9(this,{type:Kv,string:Kk(m),index:0})},function(){var m,s=u9(this),l=s.string,f=s.index;return f>=l.length?s9(void 0,!0):(m=i9(l,f),s.index+=m.length,s9(m,!1))});var Yk=Rt,O5=Us,Yv=vh,l7=function(m,s,l){var f,g;O5(m);try{if(!(f=Yv(m,"return"))){if(s==="throw")throw l;return l}f=Yk(f,m)}catch(a){g=!0,f=a}if(s==="throw")throw l;if(g)throw f;return O5(f),l},Qk=Us,H4=l7,x5=ru,Xo=Go("iterator"),Sd=Array.prototype,Qv=function(m){return m!==void 0&&(x5.Array===m||Sd[Xo]===m)},$4=Me,Wh=pc,ou=X(Function.toString);$4(Wh.inspectSource)||(Wh.inspectSource=function(m){return ou(m)});var Hh=Wh.inspectSource,_5=X,u7=d,V4=Me,hi=Kl,Tb=Hh,Du=function(){},$h=[],c7=rn("Reflect","construct"),S5=/^\s*(?:class|function)\b/,ns=_5(S5.exec),Bo=!S5.test(Du),cp=function(m){if(!V4(m))return!1;try{return c7(Du,$h,m),!0}catch{return!1}},iu=function(m){if(!V4(m))return!1;switch(hi(m)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return Bo||!!ns(S5,Tb(m))}catch{return!0}};iu.sham=!0;var Zv=!c7||u7(function(){var m;return cp(cp.call)||!cp(Object)||!cp(function(){m=!0})||m})?iu:cp,q4=gh,E5=ci,Ab=Sr,Vh=function(m,s,l){var f=q4(s);f in m?E5.f(m,f,Ab(0,l)):m[f]=l},Mb=Kl,lf=vh,Ba=Oo,eg=ru,Fm=Go("iterator"),Bm=function(m){if(!Ba(m))return lf(m,Fm)||lf(m,"@@iterator")||eg[Mb(m)]},f7=Rt,Wm=Xn,Hm=Us,U4=Vi,Wa=Bm,I5=TypeError,Rb=function(m,s){var l=arguments.length<2?Wa(m):s;if(Wm(l))return Hm(f7(l,m));throw new I5(U4(m)+" is not iterable")},Db=Sh,k5=Rt,P5=ts,tg=function(m,s,l,f){try{return f?s(Qk(l)[0],l[1]):s(l)}catch(g){H4(m,"throw",g)}},qh=Qv,rg=Zv,$m=Gl,ng=Vh,j5=Rb,og=Bm,ig=Array,G4=Go("iterator"),J4=!1;try{var zb=0,Nb={next:function(){return{done:!!zb++}},return:function(){J4=!0}};Nb[G4]=function(){return this},Array.from(Nb,function(){throw 2})}catch{}var X4=function(m){var s=P5(m),l=rg(this),f=arguments.length,g=f>1?arguments[1]:void 0,a=g!==void 0;a&&(g=Db(g,f>2?arguments[2]:void 0));var u,p,O,P,z,H,ee=og(s),pe=0;if(!ee||this===ig&&qh(ee))for(u=$m(s),p=l?new this(u):ig(u);u>pe;pe++)H=a?g(s[pe],pe):s[pe],ng(p,pe,H);else for(z=(P=j5(s,ee)).next,p=l?new this:[];!(O=k5(z,P)).done;pe++)H=a?tg(P,g,[O.value,pe],!0):O.value,ng(p,pe,H);return p.length=pe,p},Lb=function(m,s){try{if(!s&&!J4)return!1}catch{return!1}var l=!1;try{var f={};f[G4]=function(){return{next:function(){return{done:l=!0}}}},m(f)}catch{}return l};Pr({target:"Array",stat:!0,forced:!Lb(function(m){Array.from(m)})},{from:X4});var C5=mr.Array.from,Ed=r(C5),ag=Mo,K4=ru,Vm=ju;ci.f;var c9=w5,Id=Lm,fp="Array Iterator",wc=Vm.set,Ol=Vm.getterFor(fp);c9(Array,"Array",function(m,s){wc(this,{type:fp,target:ag(m),index:0,kind:s})},function(){var m=Ol(this),s=m.target,l=m.kind,f=m.index++;if(!s||f>=s.length)return m.target=void 0,Id(void 0,!0);switch(l){case"keys":return Id(f,!1);case"values":return Id(s[f],!1)}return Id([f,s[f]],!1)},"values"),K4.Arguments=K4.Array;var kd=Bm,Fb={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},sg=i,p7=Kl,Ys=Zf,Pd=ru,qm=Go("toStringTag");for(var Bb in Fb){var Uh=sg[Bb],lg=Uh&&Uh.prototype;lg&&p7(lg)!==qm&&Ys(lg,qm,Bb),Pd[Bb]=Pd.Array}var T5=kd,Gh=r(T5),Jh=r(T5);function rr(m,s){if(!(m instanceof s))throw new TypeError("Cannot call a class as a function")}var Y4={exports:{}},xl=Pr,ug=Ue,Q4=ci.f;xl({target:"Object",stat:!0,forced:Object.defineProperty!==Q4,sham:!ug},{defineProperty:Q4});var Xh=mr.Object,jd=Y4.exports=function(m,s,l){return Xh.defineProperty(m,s,l)};Xh.defineProperty.sham&&(jd.sham=!0);var Um=Y4.exports,Qs=r(Um),cg=ye,pp=Array.isArray||function(m){return cg(m)==="Array"},Z4=TypeError,A5=function(m){if(m>9007199254740991)throw Z4("Maximum allowed index exceeded");return m},fg=pp,d7=Zv,Wb=Dn,M5=Go("species"),e6=Array,Ki=function(m){var s;return fg(m)&&(s=m.constructor,(d7(s)&&(s===e6||fg(s.prototype))||Wb(s)&&(s=s[M5])===null)&&(s=void 0)),s===void 0?e6:s},Hb=function(m,s){return new(Ki(m))(s===0?0:s)},f9=d,R5=Hs,t6=Go("species"),$b=function(m){return R5>=51||!f9(function(){var s=[];return(s.constructor={})[t6]=function(){return{foo:1}},s[m](Boolean).foo!==1})},Vb=Pr,r6=d,n6=pp,qb=Dn,Ub=ts,Kh=Gl,h7=A5,o6=Vh,D5=Hb,Yi=$b,ei=Hs,i6=Go("isConcatSpreadable"),m7=ei>=51||!r6(function(){var m=[];return m[i6]=!1,m.concat()[0]!==m}),p9=function(m){if(!qb(m))return!1;var s=m[i6];return s!==void 0?!!s:n6(m)};Vb({target:"Array",proto:!0,arity:1,forced:!m7||!Yi("concat")},{concat:function(m){var s,l,f,g,a,u=Ub(this),p=D5(u,0),O=0;for(s=-1,f=arguments.length;smt;mt++)if((p||mt in Ae)&&(pe=Qe(ee=Ae[mt],mt,be),m))if(s)Ct[mt]=pe;else if(pe)switch(m){case 3:return!0;case 5:return ee;case 6:return mt;case 2:I7(Ct,ee)}else switch(m){case 4:return!1;case 7:I7(Ct,ee)}return a?-1:f||g?g:Ct}},sa={forEach:Jm(0),map:Jm(1),filter:Jm(2),some:Jm(3),every:Jm(4),find:Jm(5),findIndex:Jm(6),filterReject:Jm(7)},B5=Pr,mg=i,W5=Rt,k7=X,Qh=Ue,Xm=Wc,P7=d,os=Ui,g9=Mn,j7=Us,Jb=Mo,vg=gh,y9=Xs,c6=Sr,Km=of,f6=fd,C7=pg,p6=_l,gg=ku,Xb=Ve,H5=ci,T7=yd,A7=wt,Ym=Au,M7=au,$5=xu,R7=ro,d6=Kf,V5=Go,D7=Gm,b9=_i,z7=l6,N7=tu,Kb=ju,dp=sa.forEach,is=zh("hidden"),q5="Symbol",Td="prototype",w9=Kb.set,Qi=Kb.getterFor(q5),Oc=Object[Td],as=mg.Symbol,Zs=as&&as[Td],L7=mg.RangeError,O9=mg.TypeError,yg=mg.QObject,h6=Xb.f,el=H5.f,Yb=p6.f,m6=A7.f,U5=k7([].push),uf=$5("symbols"),bg=$5("op-symbols"),G5=$5("wks"),Zh=!yg||!yg[Td]||!yg[Td].findChild,Qb=function(m,s,l){var f=h6(Oc,s);f&&delete Oc[s],el(m,s,l),f&&m!==Oc&&el(Oc,s,f)},J5=Qh&&P7(function(){return Km(el({},"a",{get:function(){return el(this,"a",{value:7}).a}})).a!==7})?Qb:el,X5=function(m,s){var l=uf[m]=Km(Zs);return w9(l,{type:q5,tag:m,description:s}),Qh||(l.description=s),l},hp=function(m,s,l){m===Oc&&hp(bg,s,l),j7(m);var f=vg(s);return j7(l),os(uf,f)?(l.enumerable?(os(m,is)&&m[is][f]&&(m[is][f]=!1),l=Km(l,{enumerable:c6(0,!1)})):(os(m,is)||el(m,is,c6(1,{})),m[is][f]=!0),J5(m,f,l)):el(m,f,l)},Sl=function(m,s){j7(m);var l=Jb(s),f=f6(l).concat(F7(l));return dp(f,function(g){Qh&&!W5(v6,l,g)||hp(m,g,l[g])}),m},v6=function(m){var s=vg(m),l=W5(m6,this,s);return!(this===Oc&&os(uf,s)&&!os(bg,s))&&(!(l||!os(this,s)||!os(uf,s)||os(this,is)&&this[is][s])||l)},g6=function(m,s){var l=Jb(m),f=vg(s);if(l!==Oc||!os(uf,f)||os(bg,f)){var g=h6(l,f);return!g||!os(uf,f)||os(l,is)&&l[is][f]||(g.enumerable=!0),g}},y6=function(m){var s=Yb(Jb(m)),l=[];return dp(s,function(f){os(uf,f)||os(R7,f)||U5(l,f)}),l},F7=function(m){var s=m===Oc,l=Yb(s?bg:Jb(m)),f=[];return dp(l,function(g){!os(uf,g)||s&&!os(Oc,g)||U5(f,uf[g])}),f};Xm||(as=function(){if(g9(Zs,this))throw new O9("Symbol is not a constructor");var m=arguments.length&&arguments[0]!==void 0?y9(arguments[0]):void 0,s=d6(m),l=function(f){this===Oc&&W5(l,bg,f),os(this,is)&&os(this[is],s)&&(this[is][s]=!1);var g=c6(1,f);try{J5(this,s,g)}catch(a){if(!(a instanceof L7))throw a;Qb(this,s,g)}};return Qh&&Zh&&J5(Oc,s,{configurable:!0,set:l}),X5(s,m)},Ym(Zs=as[Td],"toString",function(){return Qi(this).tag}),Ym(as,"withoutSetter",function(m){return X5(d6(m),m)}),A7.f=v6,H5.f=hp,T7.f=Sl,Xb.f=g6,C7.f=p6.f=y6,gg.f=F7,D7.f=function(m){return X5(V5(m),m)},Qh&&M7(Zs,"description",{configurable:!0,get:function(){return Qi(this).description}})),B5({global:!0,constructor:!0,wrap:!0,forced:!Xm,sham:!Xm},{Symbol:as}),dp(f6(G5),function(m){b9(m)}),B5({target:q5,stat:!0,forced:!Xm},{useSetter:function(){Zh=!0},useSimple:function(){Zh=!1}}),B5({target:"Object",stat:!0,forced:!Xm,sham:!Qh},{create:function(m,s){return s===void 0?Km(m):Sl(Km(m),s)},defineProperty:hp,defineProperties:Sl,getOwnPropertyDescriptor:g6}),B5({target:"Object",stat:!0,forced:!Xm},{getOwnPropertyNames:y6}),z7(),N7(as,q5),R7[is]=!0;var b6=Wc&&!!Symbol.for&&!!Symbol.keyFor,x9=Pr,B7=rn,_9=Ui,S9=Xs,Qm=xu,w6=b6,K5=Qm("string-to-symbol-registry"),O6=Qm("symbol-to-string-registry");x9({target:"Symbol",stat:!0,forced:!w6},{for:function(m){var s=S9(m);if(_9(K5,s))return K5[s];var l=B7("Symbol")(s);return K5[s]=l,O6[l]=s,l}});var E9=Pr,ss=Ui,I9=ia,x6=Vi,k9=b6,Zb=xu("symbol-to-string-registry");E9({target:"Symbol",stat:!0,forced:!k9},{keyFor:function(m){if(!I9(m))throw new TypeError(x6(m)+" is not a symbol");if(ss(Zb,m))return Zb[m]}});var Y5=pp,Zm=Me,e2=ye,Q5=Xs,_6=X([].push),Z5=Pr,S6=rn,E6=L,ew=Rt,e1=X,wg=d,mp=Me,t2=ia,W7=Ch,tw=function(m){if(Zm(m))return m;if(Y5(m)){for(var s=m.length,l=[],f=0;fm.length)&&(s=m.length);for(var l=0,f=new Array(s);l1?arguments[1]:void 0)}});var G6=fi("Array").map,p2=Mn,u8=G6,o1=Array.prototype,ww=function(m){var s=m.map;return m===o1||p2(o1,m)&&s===o1.map?u8:s},Ad=r(ww),tl=ts,Os=fd;Pr({target:"Object",stat:!0,forced:d(function(){Os(1)})},{keys:function(m){return Os(tl(m))}});var ni=r(mr.Object.keys),G9=Pr,xs=Date,J9=X(xs.prototype.getTime);G9({target:"Date",stat:!0},{now:function(){return J9(new xs)}});var xg=r(mr.Date.now),Ow=d,gp=function(m,s){var l=[][m];return!!l&&Ow(function(){l.call(null,s||function(){return 1},1)})},J6=sa.forEach,c8=gp("forEach")?[].forEach:function(m){return J6(this,m,arguments.length>1?arguments[1]:void 0)};Pr({target:"Array",proto:!0,forced:[].forEach!==c8},{forEach:c8});var X9=fi("Array").forEach,f8=Kl,K9=Ui,Md=Mn,p8=X9,_s=Array.prototype,Y9={DOMTokenList:!0,NodeList:!0},d8=function(m){var s=m.forEach;return m===_s||Md(_s,m)&&s===_s.forEach||K9(Y9,f8(m))?p8:s},Do=r(d8),h8=Pr,m8=pp,eP=X([].reverse),d2=[1,2];h8({target:"Array",proto:!0,forced:String(d2)===String(d2.reverse())},{reverse:function(){return m8(this)&&(this.length=this.length),eP(this)}});var Q9=fi("Array").reverse,Z9=Mn,h2=Q9,_g=Array.prototype,eI=function(m){var s=m.reverse;return m===_g||Z9(_g,m)&&s===_g.reverse?h2:s},e0=r(eI),yp=Vi,v8=TypeError,X6=function(m,s){if(!delete m[s])throw new v8("Cannot delete property "+yp(s)+" of "+yp(m))},tI=Pr,g8=ts,y8=Ln,rI=Gc,K6=Gl,Sg=z6,Y6=A5,nI=Hb,xw=Vh,Q6=X6,Z6=$b("splice"),oI=Math.max,tP=Math.min;tI({target:"Array",proto:!0,forced:!Z6},{splice:function(m,s){var l,f,g,a,u,p,O=g8(this),P=K6(O),z=y8(m,P),H=arguments.length;for(H===0?l=f=0:H===1?(l=0,f=P-z):(l=H-2,f=tP(oI(rI(s),0),P-z)),Y6(P+l-f),g=nI(O,f),a=0;aP-f+l;a--)Q6(O,a-1)}else if(l>f)for(a=P-f;a>z;a--)p=a+l-1,(u=a+f-1)in O?O[p]=O[u]:Q6(O,p);for(a=0;a1?arguments[1]:void 0)}});var _w=fi("Array").includes,rP=Dn,uI=ye,cI=Go("match"),Ss=function(m){var s;return rP(m)&&((s=m[cI])!==void 0?!!s:uI(m)==="RegExp")},fI=TypeError,pI=Go("match"),b8=Pr,w8=function(m){if(Ss(m))throw new fI("The method doesn't accept regular expressions");return m},O8=eo,x8=Xs,dI=function(m){var s=/./;try{"/./"[m](s)}catch{try{return s[pI]=!1,"/./"[m](s)}catch{}}return!1},rx=X("".indexOf);b8({target:"String",proto:!0,forced:!dI("includes")},{includes:function(m){return!!~rx(x8(O8(this)),x8(w8(m)),arguments.length>1?arguments[1]:void 0)}});var t0=fi("String").includes,_8=Mn,hI=_w,mI=t0,nx=Array.prototype,xa=String.prototype,S8=function(m){var s=m.includes;return m===nx||_8(nx,m)&&s===nx.includes?hI:typeof m=="string"||m===xa||_8(xa,m)&&s===xa.includes?mI:s},r0=r(S8),ox=ts,ix=Ji,ax=Jv;Pr({target:"Object",stat:!0,forced:d(function(){ix(1)}),sham:!ax},{getPrototypeOf:function(m){return ix(ox(m))}});var vI=mr.Object.getPrototypeOf,m2=r(vI),gI=sa.filter;Pr({target:"Array",proto:!0,forced:!$b("filter")},{filter:function(m){return gI(this,m,arguments.length>1?arguments[1]:void 0)}});var Sw=fi("Array").filter,E8=Mn,sx=Sw,Ew=Array.prototype,Iw=function(m){var s=m.filter;return m===Ew||E8(Ew,m)&&s===Ew.filter?sx:s},ua=r(Iw),lx=` \v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`,yI=eo,ux=Xs,cx=lx,fx=X("".replace),I8=RegExp("^["+cx+"]+"),bI=RegExp("(^|[^"+cx+"])["+cx+"]+$"),px=function(m){return function(s){var l=ux(yI(s));return 1&m&&(l=fx(l,I8,"")),2&m&&(l=fx(l,bI,"$1")),l}},n0={start:px(1),end:px(2),trim:px(3)},k8=i,nP=d,P8=X,j8=Xs,wI=n0.trim,kw=lx,v2=k8.parseInt,dx=k8.Symbol,Pw=dx&&dx.iterator,C8=/^[+-]?0x/i,T8=P8(C8.exec),hx=v2(kw+"08")!==8||v2(kw+"0x16")!==22||Pw&&!nP(function(){v2(Object(Pw))})?function(m,s){var l=wI(j8(m));return v2(l,s>>>0||(T8(C8,l)?16:10))}:v2;Pr({global:!0,forced:parseInt!==hx},{parseInt:hx});var hf=r(mr.parseInt),i1=Pr,A8=Tv.indexOf,jw=gp,Bu=Pe([].indexOf),Wu=!!Bu&&1/Bu([1],1,-0)<0;i1({target:"Array",proto:!0,forced:Wu||!jw("indexOf")},{indexOf:function(m){var s=arguments.length>1?arguments[1]:void 0;return Wu?Bu(this,m,s)||0:A8(this,m,s)}});var Cw=fi("Array").indexOf,o0=Mn,bp=Cw,i0=Array.prototype,OI=function(m){var s=m.indexOf;return m===i0||o0(i0,m)&&s===i0.indexOf?bp:s},Kn=r(OI);Pr({target:"Object",stat:!0,sham:!Ue},{create:of});var Eg=mr.Object,Tw=function(m,s){return Eg.create(m,s)},wp=r(Tw),Ig=mr,M8=L;Ig.JSON||(Ig.JSON={stringify:JSON.stringify});var R8=function(m,s,l){return M8(Ig.JSON.stringify,null,arguments)},kg=r(R8),g2=typeof Bun=="function"&&Bun&&typeof Bun.version=="string",a1=TypeError,y2=i,Aw=L,b2=Me,D8=g2,oP=go,z8=Ch,w2=function(m,s){if(ml,u=b2(f)?f:Mw(f),p=a?z8(arguments,l):[],O=a?function(){Aw(u,this,p)}:u;return s?m(O,g):m(O)}:m},_a=Pr,rl=i,Pg=Es(rl.setInterval,!0);_a({global:!0,bind:!0,forced:rl.setInterval!==Pg},{setInterval:Pg});var jg=Pr,Cg=i,Tg=Es(Cg.setTimeout,!0);jg({global:!0,bind:!0,forced:Cg.setTimeout!==Tg},{setTimeout:Tg});var El=r(mr.setTimeout),mf=ts,a0=Ln,L8=Gl,mx=function(m){for(var s=mf(this),l=L8(s),f=arguments.length,g=a0(f>1?arguments[1]:void 0,l),a=f>2?arguments[2]:void 0,u=a===void 0?l:a0(a,l);u>g;)s[g++]=m;return s};Pr({target:"Array",proto:!0},{fill:mx});var Ag,lu=fi("Array").fill,Rw=Mn,s1=lu,Dw=Array.prototype,vx=function(m){var s=m.fill;return m===Dw||Rw(Dw,m)&&s===Dw.fill?s1:s},l1=r(vx);function Hu(){return Hu=Object.assign||function(m){for(var s=1;s"u"?{style:{}}:document.createElement("div"),xp=Math.round,ls=Math.abs,c1=Date.now;function f1(m,s){for(var l,f,g=s[0].toUpperCase()+s.slice(1),a=0;a"u"?{}:window;var p1=f1(zw.style,"touchAction"),oo=p1!==void 0,B8="compute",W8="auto",d1="manipulation",Dd="none",Sa="pan-x",_p="pan-y",Mg=function(){if(!oo)return!1;var m={},s=$u.CSS&&$u.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(l){return m[l]=!s||$u.CSS.supports("touch-action",l)}),m}(),O2="ontouchstart"in $u,gx=f1($u,"PointerEvent")!==void 0,yx=O2&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),xc="touch",x2="mouse",bx=25,Is=1,Zi=4,Ea=8,_2=1,Vu=2,qu=4,Rg=8,vf=16,_c=Vu|qu,uu=Rg|vf,Nw=_c|uu,s0=["x","y"],Dg=["clientX","clientY"];function Uu(m,s,l){var f;if(m)if(m.forEach)m.forEach(s,l);else if(m.length!==void 0)for(f=0;f-1}var zg=function(){function m(l,f){this.manager=l,this.set(f)}var s=m.prototype;return s.set=function(l){l===B8&&(l=this.compute()),oo&&this.manager.element.style&&Mg[l]&&(this.manager.element.style[p1]=l),this.actions=l.toLowerCase().trim()},s.update=function(){this.set(this.manager.options.touchAction)},s.compute=function(){var l=[];return Uu(this.manager.recognizers,function(f){l0(f.options.enable,[f])&&(l=l.concat(f.getTouchAction()))}),function(f){if(u0(f,Dd))return Dd;var g=u0(f,Sa),a=u0(f,_p);return g&&a?Dd:g||a?g?Sa:_p:u0(f,d1)?d1:W8}(l.join(" "))},s.preventDefaults=function(l){var f=l.srcEvent,g=l.offsetDirection;if(this.manager.session.prevented)f.preventDefault();else{var a=this.actions,u=u0(a,Dd)&&!Mg[Dd],p=u0(a,_p)&&!Mg[_p],O=u0(a,Sa)&&!Mg[Sa];if(u){var P=l.pointers.length===1,z=l.distance<2,H=l.deltaTime<250;if(P&&z&&H)return}if(!O||!p)return u||p&&g&_c||O&&g&uu?this.preventSrc(f):void 0}},s.preventSrc=function(l){this.manager.session.prevented=!0,l.preventDefault()},m}();function Lw(m,s){for(;m;){if(m===s)return!0;m=m.parentNode}return!1}function Ng(m){var s=m.length;if(s===1)return{x:xp(m[0].clientX),y:xp(m[0].clientY)};for(var l=0,f=0,g=0;g=ls(s)?m<0?Vu:qu:s<0?Rg:vf}function us(m,s,l){return{x:s/m||0,y:l/m||0}}function $8(m,s){var l=m.session,f=s.pointers,g=f.length;l.firstInput||(l.firstInput=Fw(s)),g>1&&!l.firstMultiple?l.firstMultiple=Fw(s):g===1&&(l.firstMultiple=!1);var a=l.firstInput,u=l.firstMultiple,p=u?u.center:a.center,O=s.center=Ng(f);s.timeStamp=c1(),s.deltaTime=s.timeStamp-a.timeStamp,s.angle=Lg(p,O),s.distance=h1(p,O),function(Ae,Qe){var $e=Qe.center,mt=Ae.offsetDelta||{},It=Ae.prevDelta||{},Ct=Ae.prevInput||{};Qe.eventType!==Is&&Ct.eventType!==Zi||(It=Ae.prevDelta={x:Ct.deltaX||0,y:Ct.deltaY||0},mt=Ae.offsetDelta={x:$e.x,y:$e.y}),Qe.deltaX=It.x+($e.x-mt.x),Qe.deltaY=It.y+($e.y-mt.y)}(l,s),s.offsetDirection=H8(s.deltaX,s.deltaY);var P,z,H=us(s.deltaTime,s.deltaX,s.deltaY);s.overallVelocityX=H.x,s.overallVelocityY=H.y,s.overallVelocity=ls(H.x)>ls(H.y)?H.x:H.y,s.scale=u?(P=u.pointers,h1((z=f)[0],z[1],Dg)/h1(P[0],P[1],Dg)):1,s.rotation=u?function(Ae,Qe){return Lg(Qe[1],Qe[0],Dg)+Lg(Ae[1],Ae[0],Dg)}(u.pointers,f):0,s.maxPointers=l.prevInput?s.pointers.length>l.prevInput.maxPointers?s.pointers.length:l.prevInput.maxPointers:s.pointers.length,function(Ae,Qe){var $e,mt,It,Ct,qe=Ae.lastInterval||Qe,Fe=Qe.timeStamp-qe.timeStamp;if(Qe.eventType!==Ea&&(Fe>bx||qe.velocity===void 0)){var Ge=Qe.deltaX-qe.deltaX,pt=Qe.deltaY-qe.deltaY,ft=us(Fe,Ge,pt);mt=ft.x,It=ft.y,$e=ls(ft.x)>ls(ft.y)?ft.x:ft.y,Ct=H8(Ge,pt),Ae.lastInterval=Qe}else $e=qe.velocity,mt=qe.velocityX,It=qe.velocityY,Ct=qe.direction;Qe.velocity=$e,Qe.velocityX=mt,Qe.velocityY=It,Qe.direction=Ct}(l,s);var ee,pe=m.element,be=s.srcEvent;Lw(ee=be.composedPath?be.composedPath()[0]:be.path?be.path[0]:be.target,pe)&&(pe=ee),s.target=pe}function Bw(m,s,l){var f=l.pointers.length,g=l.changedPointers.length,a=s&Is&&f-g==0,u=s&(Zi|Ea)&&f-g==0;l.isFirst=!!a,l.isFinal=!!u,a&&(m.session={}),l.eventType=s,$8(m,l),m.emit("hammer.input",l),m.recognize(l),m.session.prevInput=l}function Fg(m){return m.trim().split(/\s+/g)}function S2(m,s,l){Uu(Fg(s),function(f){m.addEventListener(f,l,!1)})}function Bg(m,s,l){Uu(Fg(s),function(f){m.removeEventListener(f,l,!1)})}function wx(m){var s=m.ownerDocument||m;return s.defaultView||s.parentWindow||window}var Wg=function(){function m(l,f){var g=this;this.manager=l,this.callback=f,this.element=l.element,this.target=l.options.inputTarget,this.domHandler=function(a){l0(l.options.enable,[l])&&g.handler(a)},this.init()}var s=m.prototype;return s.handler=function(){},s.init=function(){this.evEl&&S2(this.element,this.evEl,this.domHandler),this.evTarget&&S2(this.target,this.evTarget,this.domHandler),this.evWin&&S2(wx(this.element),this.evWin,this.domHandler)},s.destroy=function(){this.evEl&&Bg(this.element,this.evEl,this.domHandler),this.evTarget&&Bg(this.target,this.evTarget,this.domHandler),this.evWin&&Bg(wx(this.element),this.evWin,this.domHandler)},m}();function c0(m,s,l){if(m.indexOf&&!l)return m.indexOf(s);for(var f=0;fO[s]}):f.sort()),f}var zd={touchstart:Is,touchmove:2,touchend:Zi,touchcancel:Ea},m1=function(m){function s(){var l;return s.prototype.evTarget="touchstart touchmove touchend touchcancel",(l=m.apply(this,arguments)||this).targetIds={},l}return Il(s,m),s.prototype.handler=function(l){var f=zd[l.type],g=q8.call(this,l,f);g&&this.callback(this.manager,f,{pointers:g[0],changedPointers:g[1],pointerType:xc,srcEvent:l})},s}(Wg);function q8(m,s){var l,f,g=f0(m.touches),a=this.targetIds;if(s&(2|Is)&&g.length===1)return a[g[0].identifier]=!0,[g,g];var u=f0(m.changedTouches),p=[],O=this.target;if(f=g.filter(function(P){return Lw(P.target,O)}),s===Is)for(l=0;l-1&&f.splice(g,1)},_I)}}function U8(m,s){m&Is?(this.primaryTouch=s.changedPointers[0].identifier,Nd.call(this,s)):m&(Zi|Ea)&&Nd.call(this,s)}function G8(m){for(var s=m.srcEvent.clientX,l=m.srcEvent.clientY,f=0;f-1&&this.requireFail.splice(f,1),this},s.hasRequireFailures=function(){return this.requireFail.length>0},s.canRecognizeWith=function(l){return!!this.simultaneous[l.id]},s.emit=function(l){var f=this,g=this.state;function a(u){f.manager.emit(u,l)}g<8&&a(f.options.event+R(g)),a(f.options.event),l.additionalEvent&&a(l.additionalEvent),g>=8&&a(f.options.event+R(g))},s.tryEmit=function(l){if(this.canEmit())return this.emit(l);this.state=w},s.canEmit=function(){for(var l=0;lg.threshold&&p&g.direction},l.attrTest=function(f){return re.prototype.attrTest.call(this,f)&&(2&this.state||!(2&this.state)&&this.directionTest(f))},l.emit=function(f){this.pX=f.deltaX,this.pY=f.deltaY;var g=ue(f.direction);g&&(f.additionalEvent=this.options.event+g),m.prototype.emit.call(this,f)},s}(re),he=function(m){function s(f){return f===void 0&&(f={}),m.call(this,Hu({event:"swipe",threshold:10,velocity:.3,direction:_c|uu,pointers:1},f))||this}Il(s,m);var l=s.prototype;return l.getTouchAction=function(){return se.prototype.getTouchAction.call(this)},l.attrTest=function(f){var g,a=this.options.direction;return a&(_c|uu)?g=f.overallVelocity:a&_c?g=f.overallVelocityX:a&uu&&(g=f.overallVelocityY),m.prototype.attrTest.call(this,f)&&a&f.offsetDirection&&f.distance>this.options.threshold&&f.maxPointers===this.options.pointers&&ls(g)>this.options.velocity&&f.eventType&Zi},l.emit=function(f){var g=ue(f.offsetDirection);g&&this.manager.emit(this.options.event+g,f),this.manager.emit(this.options.event,f)},s}(re),_e=function(m){function s(f){return f===void 0&&(f={}),m.call(this,Hu({event:"pinch",threshold:0,pointers:2},f))||this}Il(s,m);var l=s.prototype;return l.getTouchAction=function(){return[Dd]},l.attrTest=function(f){return m.prototype.attrTest.call(this,f)&&(Math.abs(f.scale-1)>this.options.threshold||2&this.state)},l.emit=function(f){if(f.scale!==1){var g=f.scale<1?"in":"out";f.additionalEvent=this.options.event+g}m.prototype.emit.call(this,f)},s}(re),Ie=function(m){function s(f){return f===void 0&&(f={}),m.call(this,Hu({event:"rotate",threshold:0,pointers:2},f))||this}Il(s,m);var l=s.prototype;return l.getTouchAction=function(){return[Dd]},l.attrTest=function(f){return m.prototype.attrTest.call(this,f)&&(Math.abs(f.rotation)>this.options.threshold||2&this.state)},s}(re),Ce=function(m){function s(f){var g;return f===void 0&&(f={}),(g=m.call(this,Hu({event:"press",pointers:1,time:251,threshold:9},f))||this)._timer=null,g._input=null,g}Il(s,m);var l=s.prototype;return l.getTouchAction=function(){return[W8]},l.process=function(f){var g=this,a=this.options,u=f.pointers.length===a.pointers,p=f.distancea.time;if(this._input=f,!p||!u||f.eventType&(Zi|Ea)&&!O)this.reset();else if(f.eventType&Is)this.reset(),this._timer=setTimeout(function(){g.state=8,g.tryEmit()},a.time);else if(f.eventType&Zi)return 8;return w},l.reset=function(){clearTimeout(this._timer)},l.emit=function(f){this.state===8&&(f&&f.eventType&Zi?this.manager.emit(this.options.event+"up",f):(this._input.timeStamp=c1(),this.manager.emit(this.options.event,this._input)))},s}(G),ke={domEvents:!1,touchAction:B8,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},ze=[[Ie,{enable:!1}],[_e,{enable:!1},["rotate"]],[he,{direction:_c}],[se,{direction:_c},["swipe"]],[te],[te,{event:"doubletap",taps:2},["tap"]],[Ce]];function Le(m,s){var l,f=m.element;f.style&&(Uu(m.options.cssProps,function(g,a){l=f1(f.style,a),s?(m.oldCssProps[l]=f.style[l],f.style[l]=g):f.style[l]=m.oldCssProps[l]||""}),s||(m.oldCssProps={}))}var Te=function(){function m(l,f){var g,a=this;this.options=Op({},ke,f||{}),this.options.inputTarget=this.options.inputTarget||l,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=l,this.input=new((g=this).options.inputClass||(gx?xx:yx?m1:O2?J8:Hg))(g,Bw),this.touchAction=new zg(this,this.options.touchAction),Le(this,!0),Uu(this.options.recognizers,function(u){var p=a.add(new u[0](u[1]));u[2]&&p.recognizeWith(u[2]),u[3]&&p.requireFailure(u[3])},this)}var s=m.prototype;return s.set=function(l){return Op(this.options,l),l.touchAction&&this.touchAction.update(),l.inputTarget&&(this.input.destroy(),this.input.target=l.inputTarget,this.input.init()),this},s.stop=function(l){this.session.stopped=l?2:1},s.recognize=function(l){var f=this.session;if(!f.stopped){var g;this.touchAction.preventDefaults(l);var a=this.recognizers,u=f.curRecognizer;(!u||u&&8&u.state)&&(f.curRecognizer=null,u=null);for(var p=0;p"||Lr==="--";){var l,f=Lr;So();var g=qg(m);if(g)l=g;else{if(kl!=Di.IDENTIFIER)throw ka("Identifier or subgraph expected");Uw(m,{id:l=Lr}),So()}g1(m,Gw(m,s,l,f,Ip())),s=l}}function Ip(){for(var m,s,l=null,f={dashed:!0,solid:!1,dotted:[1,5]},g={dot:"circle",box:"box",crow:"crow",curve:"curve",icurve:"inv_curve",normal:"triangle",inv:"inv_triangle",diamond:"diamond",tee:"bar",vee:"vee"},a=new Array,u=new Array;Lr==="[";){for(So(),l={};Lr!==""&&Lr!="]";){if(kl!=Di.IDENTIFIER)throw ka("Attribute name expected");var p=Lr;if(So(),Lr!="=")throw ka("Equal sign = expected");if(So(),kl!=Di.IDENTIFIER)throw ka("Attribute value expected");var O=Lr;p==="style"&&(O=f[O]),p==="arrowhead"&&(p="arrows",O={to:{enabled:!0,type:g[O]}}),p==="arrowtail"&&(p="arrows",O={from:{enabled:!0,type:g[O]}}),a.push({attr:l,name:p,value:O}),u.push(p),So(),Lr==","&&So()}if(Lr!="]")throw ka("Bracket ] expected");So()}if(r0(u).call(u,"dir")){var P={arrows:{}};for(m=0;m"&&(p.arrows="to"),p};Do(g=l.edges).call(g,function(u){var p,O,P,z,H,ee,pe;p=u.from instanceof Object?u.from.nodes:{id:u.from},O=u.to instanceof Object?u.to.nodes:{id:u.to},u.from instanceof Object&&u.from.edges&&Do(P=u.from.edges).call(P,function(be){var Ae=a(be);f.edges.push(Ae)}),H=O,ee=function(be,Ae){var Qe=Gw(f,be.id,Ae.id,u.type,u.attr),$e=a(Qe);f.edges.push($e)},zn(z=p)?Do(z).call(z,function(be){zn(H)?Do(H).call(H,function(Ae){ee(be,Ae)}):ee(be,H)}):zn(H)?Do(H).call(H,function(be){ee(z,be)}):ee(z,H),u.to instanceof Object&&u.to.edges&&Do(pe=u.to.edges).call(pe,function(be){var Ae=a(be);f.edges.push(Ae)})})}return l.attr&&(f.options=l.attr),f}var Q8=Object.freeze({__proto__:null,DOTToGraph:kx,parseDOT:Vw});function Ug(m,s){var l,f={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};s!=null&&(s.fixed!=null&&(f.nodes.fixed=s.fixed),s.parseColor!=null&&(f.nodes.parseColor=s.parseColor),s.inheritColor!=null&&(f.edges.inheritColor=s.inheritColor));var g=m.edges,a=Ad(g).call(g,function(u){var p={from:u.source,id:u.id,to:u.target};return u.attributes!=null&&(p.attributes=u.attributes),u.label!=null&&(p.label=u.label),u.attributes!=null&&u.attributes.title!=null&&(p.title=u.attributes.title),u.type==="Directed"&&(p.arrows="to"),u.color&&f.edges.inheritColor===!1&&(p.color=u.color),p});return{nodes:Ad(l=m.nodes).call(l,function(u){var p={id:u.id,fixed:f.nodes.fixed&&u.x!=null&&u.y!=null};return u.attributes!=null&&(p.attributes=u.attributes),u.label!=null&&(p.label=u.label),u.size!=null&&(p.size=u.size),u.attributes!=null&&u.attributes.title!=null&&(p.title=u.attributes.title),u.title!=null&&(p.title=u.title),u.x!=null&&(p.x=u.x),u.y!=null&&(p.y=u.y),u.color!=null&&(f.nodes.parseColor===!0?p.color=u.color:p.color={background:u.color,border:u.color,highlight:{background:u.color,border:u.color},hover:{background:u.color,border:u.color}}),p}),edges:a}}var b1=Object.freeze({__proto__:null,parseGephi:Ug}),Z8=Object.freeze({__proto__:null,cn:{addDescription:"\u5355\u51FB\u7A7A\u767D\u5904\u653E\u7F6E\u65B0\u8282\u70B9\u3002",addEdge:"\u6DFB\u52A0\u8FDE\u63A5\u7EBF",addNode:"\u6DFB\u52A0\u8282\u70B9",back:"\u8FD4\u56DE",close:"\u95DC\u9589",createEdgeError:"\u65E0\u6CD5\u5C06\u8FDE\u63A5\u7EBF\u8FDE\u63A5\u5230\u7FA4\u96C6\u3002",del:"\u5220\u9664\u9009\u5B9A",deleteClusterError:"\u65E0\u6CD5\u5220\u9664\u7FA4\u96C6\u3002",edgeDescription:"\u5355\u51FB\u67D0\u4E2A\u8282\u70B9\u5E76\u5C06\u8BE5\u8FDE\u63A5\u7EBF\u62D6\u52A8\u5230\u53E6\u4E00\u4E2A\u8282\u70B9\u4EE5\u8FDE\u63A5\u5B83\u4EEC\u3002",edit:"\u7F16\u8F91",editClusterError:"\u65E0\u6CD5\u7F16\u8F91\u7FA4\u96C6\u3002",editEdge:"\u7F16\u8F91\u8FDE\u63A5\u7EBF",editEdgeDescription:"\u5355\u51FB\u63A7\u5236\u8282\u70B9\u5E76\u5C06\u5B83\u4EEC\u62D6\u5230\u8282\u70B9\u4E0A\u8FDE\u63A5\u3002",editNode:"\u7F16\u8F91\u8282\u70B9"},cs:{addDescription:"Kluknut\xEDm do pr\xE1zdn\xE9ho prostoru m\u016F\u017Eete p\u0159idat nov\xFD vrchol.",addEdge:"P\u0159idat hranu",addNode:"P\u0159idat vrchol",back:"Zp\u011Bt",close:"Zav\u0159\xEDt",createEdgeError:"Nelze p\u0159ipojit hranu ke shluku.",del:"Smazat v\xFDb\u011Br",deleteClusterError:"Nelze mazat shluky.",edgeDescription:"P\u0159eta\u017Een\xEDm z jednoho vrcholu do druh\xE9ho m\u016F\u017Eete spojit tyto vrcholy novou hranou.",edit:"Upravit",editClusterError:"Nelze upravovat shluky.",editEdge:"Upravit hranu",editEdgeDescription:"P\u0159eta\u017Een\xEDm kontroln\xEDho vrcholu hrany ji m\u016F\u017Eete p\u0159ipojit k jin\xE9mu vrcholu.",editNode:"Upravit vrchol"},de:{addDescription:"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.",addEdge:"Kante hinzuf\xFCgen",addNode:"Knoten hinzuf\xFCgen",back:"Zur\xFCck",close:"Schlie\xDFen",createEdgeError:"Es ist nicht m\xF6glich, Kanten mit Clustern zu verbinden.",del:"L\xF6sche Auswahl",deleteClusterError:"Cluster k\xF6nnen nicht gel\xF6scht werden.",edgeDescription:"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.",edit:"Editieren",editClusterError:"Cluster k\xF6nnen nicht editiert werden.",editEdge:"Kante editieren",editEdgeDescription:"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.",editNode:"Knoten editieren"},en:{addDescription:"Click in an empty space to place a new node.",addEdge:"Add Edge",addNode:"Add Node",back:"Back",close:"Close",createEdgeError:"Cannot link edges to a cluster.",del:"Delete selected",deleteClusterError:"Clusters cannot be deleted.",edgeDescription:"Click on a node and drag the edge to another node to connect them.",edit:"Edit",editClusterError:"Clusters cannot be edited.",editEdge:"Edit Edge",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",editNode:"Edit Node"},es:{addDescription:"Haga clic en un lugar vac\xEDo para colocar un nuevo nodo.",addEdge:"A\xF1adir arista",addNode:"A\xF1adir nodo",back:"Atr\xE1s",close:"Cerrar",createEdgeError:"No se puede conectar una arista a un grupo.",del:"Eliminar selecci\xF3n",deleteClusterError:"No es posible eliminar grupos.",edgeDescription:"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.",edit:"Editar",editClusterError:"No es posible editar grupos.",editEdge:"Editar arista",editEdgeDescription:"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.",editNode:"Editar nodo"},fr:{addDescription:"Cliquez dans un endroit vide pour placer un n\u0153ud.",addEdge:"Ajouter un lien",addNode:"Ajouter un n\u0153ud",back:"Retour",close:"Fermer",createEdgeError:"Impossible de cr\xE9er un lien vers un cluster.",del:"Effacer la s\xE9lection",deleteClusterError:"Les clusters ne peuvent pas \xEAtre effac\xE9s.",edgeDescription:"Cliquez sur un n\u0153ud et glissez le lien vers un autre n\u0153ud pour les connecter.",edit:"\xC9diter",editClusterError:"Les clusters ne peuvent pas \xEAtre \xE9dit\xE9s.",editEdge:"\xC9diter le lien",editEdgeDescription:"Cliquez sur les points de contr\xF4le et glissez-les pour connecter un n\u0153ud.",editNode:"\xC9diter le n\u0153ud"},it:{addDescription:"Clicca per aggiungere un nuovo nodo",addEdge:"Aggiungi un vertice",addNode:"Aggiungi un nodo",back:"Indietro",close:"Chiudere",createEdgeError:"Non si possono collegare vertici ad un cluster",del:"Cancella la selezione",deleteClusterError:"I cluster non possono essere cancellati",edgeDescription:"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.",edit:"Modifica",editClusterError:"I clusters non possono essere modificati.",editEdge:"Modifica il vertice",editEdgeDescription:"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.",editNode:"Modifica il nodo"},nl:{addDescription:"Klik op een leeg gebied om een nieuwe node te maken.",addEdge:"Link toevoegen",addNode:"Node toevoegen",back:"Terug",close:"Sluiten",createEdgeError:"Kan geen link maken naar een cluster.",del:"Selectie verwijderen",deleteClusterError:"Clusters kunnen niet worden verwijderd.",edgeDescription:"Klik op een node en sleep de link naar een andere node om ze te verbinden.",edit:"Wijzigen",editClusterError:"Clusters kunnen niet worden aangepast.",editEdge:"Link wijzigen",editEdgeDescription:"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.",editNode:"Node wijzigen"},pt:{addDescription:"Clique em um espa\xE7o em branco para adicionar um novo n\xF3",addEdge:"Adicionar aresta",addNode:"Adicionar n\xF3",back:"Voltar",close:"Fechar",createEdgeError:"N\xE3o foi poss\xEDvel linkar arestas a um cluster.",del:"Remover selecionado",deleteClusterError:"Clusters n\xE3o puderam ser removidos.",edgeDescription:"Clique em um n\xF3 e arraste a aresta at\xE9 outro n\xF3 para conect\xE1-los",edit:"Editar",editClusterError:"Clusters n\xE3o puderam ser editados.",editEdge:"Editar aresta",editEdgeDescription:"Clique nos pontos de controle e os arraste para um n\xF3 para conect\xE1-los",editNode:"Editar n\xF3"},ru:{addDescription:"\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u0432 \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u043E\u0435 \u043C\u0435\u0441\u0442\u043E, \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0443\u0437\u0435\u043B.",addEdge:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0440\u0435\u0431\u0440\u043E",addNode:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0443\u0437\u0435\u043B",back:"\u041D\u0430\u0437\u0430\u0434",close:"\u0417\u0430\u043A\u0440\u044B\u0432\u0430\u0442\u044C",createEdgeError:"\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u0440\u0435\u0431\u0440\u0430 \u0432 \u043A\u043B\u0430\u0441\u0442\u0435\u0440.",del:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0435",deleteClusterError:"\u041A\u043B\u0430\u0441\u0442\u0435\u0440\u044B \u043D\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0443\u0434\u0430\u043B\u0435\u043D\u044B",edgeDescription:"\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u043D\u0430 \u0443\u0437\u0435\u043B \u0438 \u043F\u0440\u043E\u0442\u044F\u043D\u0438\u0442\u0435 \u0440\u0435\u0431\u0440\u043E \u043A \u0434\u0440\u0443\u0433\u043E\u043C\u0443 \u0443\u0437\u043B\u0443, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u0438\u0445.",edit:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C",editClusterError:"\u041A\u043B\u0430\u0441\u0442\u0435\u0440\u044B \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F.",editEdge:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0440\u0435\u0431\u0440\u043E",editEdgeDescription:"\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u043D\u0430 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044C\u043D\u044B\u0435 \u0442\u043E\u0447\u043A\u0438 \u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0438\u0445 \u0432 \u0443\u0437\u0435\u043B, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043A \u043D\u0435\u043C\u0443.",editNode:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0437\u0435\u043B"},uk:{addDescription:"K\u043B\u0456\u043A\u043D\u0456\u0442\u044C \u043D\u0430 \u0432\u0456\u043B\u044C\u043D\u0435 \u043C\u0456\u0441\u0446\u0435, \u0449\u043E\u0431 \u0434\u043E\u0434\u0430\u0442\u0438 \u043D\u043E\u0432\u0438\u0439 \u0432\u0443\u0437\u043E\u043B.",addEdge:"\u0414\u043E\u0434\u0430\u0442\u0438 \u043A\u0440\u0430\u0439",addNode:"\u0414\u043E\u0434\u0430\u0442\u0438 \u0432\u0443\u0437\u043E\u043B",back:"\u041D\u0430\u0437\u0430\u0434",close:"\u0417\u0430\u043A\u0440\u0438\u0442\u0438",createEdgeError:"\u041D\u0435 \u043C\u043E\u0436\u043B\u0438\u0432\u043E \u043E\u0431'\u0454\u0434\u043D\u0430\u0442\u0438 \u043A\u0440\u0430\u0457 \u0432 \u0433\u0440\u0443\u043F\u0443.",del:"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u043E\u0431\u0440\u0430\u043D\u0435",deleteClusterError:"\u0413\u0440\u0443\u043F\u0438 \u043D\u0435 \u043C\u043E\u0436\u0443\u0442\u044C \u0431\u0443\u0442\u0438 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u0456.",edgeDescription:"\u041A\u043B\u0456\u043A\u043D\u0456\u0442\u044C \u043D\u0430 \u0432\u0443\u0437\u043E\u043B \u0456 \u043F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u043A\u0440\u0430\u0439 \u0434\u043E \u0456\u043D\u0448\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430, \u0449\u043E\u0431 \u0457\u0445 \u0437'\u0454\u0434\u043D\u0430\u0442\u0438.",edit:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438",editClusterError:"\u0413\u0440\u0443\u043F\u0438 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0456 \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043D\u043D\u044F.",editEdge:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043A\u0440\u0430\u0439",editEdgeDescription:"\u041A\u043B\u0456\u043A\u043D\u0456\u0442\u044C \u043D\u0430 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044C\u043D\u0456 \u0442\u043E\u0447\u043A\u0438 \u0456 \u043F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u0457\u0445 \u0443 \u0432\u0443\u0437\u043E\u043B, \u0449\u043E\u0431 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u0434\u043E \u043D\u044C\u043E\u0433\u043E.",editNode:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0443\u0437\u043E\u043B"}}),Xw=function(){function m(){rr(this,m),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement("canvas")}return nr(m,[{key:"init",value:function(){if(!this.initialized()){this.src=this.image.src;var s=this.image.width,l=this.image.height;this.width=s,this.height=l;var f=Math.floor(l/2),g=Math.floor(l/4),a=Math.floor(l/8),u=Math.floor(l/16),p=Math.floor(s/2),O=Math.floor(s/4),P=Math.floor(s/8),z=Math.floor(s/16);this.canvas.width=3*O,this.canvas.height=f,this.coordinates=[[0,0,p,f],[p,0,O,g],[p,g,P,a],[5*P,g,z,u]],this._fillMipMap()}}},{key:"initialized",value:function(){return this.coordinates!==void 0}},{key:"_fillMipMap",value:function(){var s=this.canvas.getContext("2d"),l=this.coordinates[0];s.drawImage(this.image,l[0],l[1],l[2],l[3]);for(var f=1;f2){l*=.5;for(var p=0;l>2&&p=this.NUM_ITERATIONS&&(p=this.NUM_ITERATIONS-1);var O=this.coordinates[p];s.drawImage(this.canvas,O[0],O[1],O[2],O[3],f,g,a,u)}else s.drawImage(this.image,f,g,a,u)}}]),m}(),Px=function(){function m(s){rr(this,m),this.images={},this.imageBroken={},this.callback=s}return nr(m,[{key:"_tryloadBrokenUrl",value:function(s,l,f){s!==void 0&&f!==void 0&&(l!==void 0?(f.image.onerror=function(){console.error("Could not load brokenImage:",l)},f.image.src=l):console.warn("No broken url image defined"))}},{key:"_redrawWithImage",value:function(s){this.callback&&this.callback(s)}},{key:"load",value:function(s,l){var f=this,g=this.images[s];if(g)return g;var a=new Xw;return this.images[s]=a,a.image.onload=function(){f._fixImageCoordinates(a.image),a.init(),f._redrawWithImage(a)},a.image.onerror=function(){console.error("Could not load image:",s),f._tryloadBrokenUrl(s,l,a)},a.image.src=s,a}},{key:"_fixImageCoordinates",value:function(s){s.width===0&&(document.body.appendChild(s),s.width=s.offsetWidth,s.height=s.offsetHeight,document.body.removeChild(s))}}]),m}(),jx={exports:{}},eS=d(function(){if(typeof ArrayBuffer=="function"){var m=new ArrayBuffer(8);Object.isExtensible(m)&&Object.defineProperty(m,"a",{value:8})}}),tS=d,Kw=Dn,j2=ye,Pl=eS,Gg=Object.isExtensible,kp=tS(function(){Gg(1)})||Pl?function(m){return!!Kw(m)&&(!Pl||j2(m)!=="ArrayBuffer")&&(!Gg||Gg(m))}:Gg,Pp=!d(function(){return Object.isExtensible(Object.preventExtensions({}))}),$d=Pr,jp=X,Jg=ro,C2=Dn,g0=Ui,Yw=ci.f,Qw=pg,rS=_l,Vd=kp,Cx=Pp,w1=!1,jl=Kf("meta"),nS=0,Zw=function(m){Yw(m,jl,{value:{objectID:"O"+nS++,weakData:{}}})},T2=jx.exports={enable:function(){T2.enable=function(){},w1=!0;var m=Qw.f,s=jp([].splice),l={};l[jl]=1,m(l).length&&(Qw.f=function(f){for(var g=m(f),a=0,u=g.length;aa;a++)if((p=$e(m[a]))&&rO(D2,p))return p;return new Kg(!1)}f=Tx(m,g)}for(O=ee?m.next:f.next;!(P=O1(O,f)).done;){try{p=$e(P.value)}catch(mt){Xg(f,"throw",mt)}if(typeof p=="object"&&p&&rO(D2,p))return p}return new Kg(!1)},oi=Mn,Yg=TypeError,qd=function(m,s){if(oi(s,m))return m;throw new Yg("Incorrect invocation")},oS=Pr,z2=i,oO=y0,iO=d,Qg=Zf,Ax=nO,N2=qd,Cp=Me,iS=Dn,aO=Oo,aS=tu,sO=ci.f,sS=sa.forEach,Zg=Ue,lO=ju.set,uO=ju.getterFor,L2=function(m,s,l){var f,g=m.indexOf("Map")!==-1,a=m.indexOf("Weak")!==-1,u=g?"set":"add",p=z2[m],O=p&&p.prototype,P={};if(Zg&&Cp(p)&&(a||O.forEach&&!iO(function(){new p().entries().next()}))){var z=(f=s(function(ee,pe){lO(N2(ee,z),{type:m,collection:new p}),aO(pe)||Ax(pe,ee[u],{that:ee,AS_ENTRIES:g})})).prototype,H=uO(m);sS(["add","clear","delete","forEach","get","has","set","keys","values","entries"],function(ee){var pe=ee==="add"||ee==="set";!(ee in O)||a&&ee==="clear"||Qg(z,ee,function(be,Ae){var Qe=H(this).collection;if(!pe&&a&&!iS(be))return ee==="get"&&void 0;var $e=Qe[ee](be===0?0:be,Ae);return pe?this:$e})}),a||sO(z,"size",{configurable:!0,get:function(){return H(this).collection.size}})}else f=l.getConstructor(s,m,g,u),oO.enable();return aS(f,m,!1,!0),P[m]=f,oS({global:!0,forced:!0},P),a||l.setStrong(f,m,g),f},w0=Au,Ps=function(m,s,l){for(var f in s)l&&l.unsafe&&m[f]?m[f]=s[f]:w0(m,f,s[f],l);return m},F2=rn,cO=au,lS=Ue,Ud=Go("species"),fO=of,uS=au,cu=Ps,ey=Sh,Mx=qd,ty=Oo,Rx=nO,B2=w5,pO=Lm,_1=function(m){var s=F2(m);lS&&s&&!s[Ud]&&cO(s,Ud,{configurable:!0,get:function(){return this}})},Gd=Ue,dO=y0.fastKey,ry=ju.set,Xu=ju.getterFor,Dx={getConstructor:function(m,s,l,f){var g=m(function(P,z){Mx(P,a),ry(P,{type:s,index:fO(null),first:void 0,last:void 0,size:0}),Gd||(P.size=0),ty(z)||Rx(z,P[f],{that:P,AS_ENTRIES:l})}),a=g.prototype,u=Xu(s),p=function(P,z,H){var ee,pe,be=u(P),Ae=O(P,z);return Ae?Ae.value=H:(be.last=Ae={index:pe=dO(z,!0),key:z,value:H,previous:ee=be.last,next:void 0,removed:!1},be.first||(be.first=Ae),ee&&(ee.next=Ae),Gd?be.size++:P.size++,pe!=="F"&&(be.index[pe]=Ae)),P},O=function(P,z){var H,ee=u(P),pe=dO(z);if(pe!=="F")return ee.index[pe];for(H=ee.first;H;H=H.next)if(H.key===z)return H};return cu(a,{clear:function(){for(var P=u(this),z=P.index,H=P.first;H;)H.removed=!0,H.previous&&(H.previous=H.previous.next=void 0),delete z[H.index],H=H.next;P.first=P.last=void 0,Gd?P.size=0:this.size=0},delete:function(P){var z=this,H=u(z),ee=O(z,P);if(ee){var pe=ee.next,be=ee.previous;delete H.index[ee.index],ee.removed=!0,be&&(be.next=pe),pe&&(pe.previous=be),H.first===ee&&(H.first=pe),H.last===ee&&(H.last=be),Gd?H.size--:z.size--}return!!ee},forEach:function(P){for(var z,H=u(this),ee=ey(P,arguments.length>1?arguments[1]:void 0);z=z?z.next:H.first;)for(ee(z.value,z.key,this);z&&z.removed;)z=z.previous},has:function(P){return!!O(this,P)}}),cu(a,l?{get:function(P){var z=O(this,P);return z&&z.value},set:function(P,z){return p(this,P===0?0:P,z)}}:{add:function(P){return p(this,P=P===0?0:P,P)}}),Gd&&uS(a,"size",{configurable:!0,get:function(){return u(this).size}}),g},setStrong:function(m,s,l){var f=s+" Iterator",g=Xu(s),a=Xu(f);B2(m,s,function(u,p){ry(this,{type:f,target:u,state:g(u),kind:p,last:void 0})},function(){for(var u=a(this),p=u.kind,O=u.last;O&&O.removed;)O=O.previous;return u.target&&(u.last=O=O?O.next:u.state.first)?pO(p==="keys"?O.key:p==="values"?O.value:[O.key,O.value],!1):(u.target=void 0,pO(void 0,!0))},l?"entries":"values",!l,!0),_1(s)}};L2("Map",function(m){return function(){return m(this,arguments.length?arguments[0]:void 0)}},Dx);var hO=r(mr.Map),SI=function(){function m(){rr(this,m),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}},{border:"#990000",background:"#EE0000",highlight:{border:"#BB0000",background:"#FF3333"},hover:{border:"#BB0000",background:"#FF3333"}},{border:"#FF6000",background:"#FF6000",highlight:{border:"#FF6000",background:"#FF6000"},hover:{border:"#FF6000",background:"#FF6000"}},{border:"#97C2FC",background:"#2B7CE9",highlight:{border:"#D2E5FF",background:"#2B7CE9"},hover:{border:"#D2E5FF",background:"#2B7CE9"}},{border:"#399605",background:"#255C03",highlight:{border:"#399605",background:"#255C03"},hover:{border:"#399605",background:"#255C03"}},{border:"#B70054",background:"#FF007E",highlight:{border:"#B70054",background:"#FF007E"},hover:{border:"#B70054",background:"#FF007E"}},{border:"#AD85E4",background:"#7C29F0",highlight:{border:"#D3BDF0",background:"#7C29F0"},hover:{border:"#D3BDF0",background:"#7C29F0"}},{border:"#4557FA",background:"#000EA1",highlight:{border:"#6E6EFD",background:"#000EA1"},hover:{border:"#6E6EFD",background:"#000EA1"}},{border:"#FFC0CB",background:"#FD5A77",highlight:{border:"#FFD1D9",background:"#FD5A77"},hover:{border:"#FFD1D9",background:"#FD5A77"}},{border:"#C2FABC",background:"#74D66A",highlight:{border:"#E6FFE3",background:"#74D66A"},hover:{border:"#E6FFE3",background:"#74D66A"}},{border:"#EE0000",background:"#990000",highlight:{border:"#FF3333",background:"#BB0000"},hover:{border:"#FF3333",background:"#BB0000"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},Po(this.options,this.defaultOptions)}return nr(m,[{key:"setOptions",value:function(s){var l=["useDefaultGroups"];if(s!==void 0){for(var f in s)if(Object.prototype.hasOwnProperty.call(s,f)&&Kn(l).call(l,f)===-1){var g=s[f];this.add(f,g)}}}},{key:"clear",value:function(){this._groups=new hO,this._groupNames=[]}},{key:"get",value:function(s){var l=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],f=this._groups.get(s);if(f===void 0&&l)if(this.options.useDefaultGroups===!1&&this._groupNames.length>0){var g=this._groupIndex%this._groupNames.length;++this._groupIndex,(f={}).color=this._groups.get(this._groupNames[g]),this._groups.set(s,f)}else{var a=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(f={}).color=this._defaultGroups[a],this._groups.set(s,f)}return f}},{key:"add",value:function(s,l){return this._groups.has(s)||this._groupNames.push(s),this._groups.set(s,l),l}}]),m}();Pr({target:"Number",stat:!0},{isNaN:function(m){return m!=m}});var W2=r(mr.Number.isNaN),zx=i.isFinite,EI=Number.isFinite||function(m){return typeof m=="number"&&zx(m)};Pr({target:"Number",stat:!0},{isFinite:EI});var Tp=r(mr.Number.isFinite),$a=sa.some;Pr({target:"Array",proto:!0,forced:!gp("some")},{some:function(m){return $a(this,m,arguments.length>1?arguments[1]:void 0)}});var il=fi("Array").some,mO=Mn,Nx=il,Jd=Array.prototype,vO=function(m){var s=m.some;return m===Jd||mO(Jd,m)&&s===Jd.some?Nx:s},Lx=r(vO),O0=r(mr.Object.getOwnPropertySymbols),S1={exports:{}},x0=Pr,gO=d,ny=Mo,Ap=Ve.f,Fx=Ue;x0({target:"Object",stat:!0,forced:!Fx||gO(function(){Ap(1)}),sham:!Fx},{getOwnPropertyDescriptor:function(m,s){return Ap(ny(m),s)}});var Bx=mr.Object,cS=S1.exports=function(m,s){return Bx.getOwnPropertyDescriptor(m,s)};Bx.getOwnPropertyDescriptor.sham&&(cS.sham=!0);var H2=S1.exports,Sc=r(H2),_0=U9,Mp=Mo,E1=Ve,oy=Vh;Pr({target:"Object",stat:!0,sham:!Ue},{getOwnPropertyDescriptors:function(m){for(var s,l,f=Mp(m),g=E1.f,a=_0(f),u={},p=0;a.length>p;)(l=g(f,s=a[p++]))!==void 0&&oy(u,s,l);return u}});var fu=r(mr.Object.getOwnPropertyDescriptors),Wx={exports:{}},Hx=Pr,Rp=Ue,yO=yd.f;Hx({target:"Object",stat:!0,forced:Object.defineProperties!==yO,sham:!Rp},{defineProperties:yO});var I1=mr.Object,$x=Wx.exports=function(m,s){return I1.defineProperties(m,s)};I1.defineProperties.sham&&($x.sham=!0);var Xd=r(Wx.exports),k1=r(Um);function S0(m,s,l){return(s=D6(s))in m?Qs(m,s,{value:l,enumerable:!0,configurable:!0,writable:!0}):m[s]=l,m}var Pa=i,E0=d,Ii=Xs,Cl=n0.trim,iy=lx,I0=X("".charAt),xf=Pa.parseFloat,Kd=Pa.Symbol,k0=Kd&&Kd.iterator,js=1/xf(iy+"-0")!=-1/0||k0&&!E0(function(){xf(Object(k0))})?function(m){var s=Cl(Ii(m)),l=xf(s);return l===0&&I0(s,0)==="-"?-0:l}:xf;Pr({global:!0,forced:parseFloat!==js},{parseFloat:js});var Ku=r(mr.parseFloat),bO=Pr,fS=d,P1=_l.f;bO({target:"Object",stat:!0,forced:fS(function(){return!Object.getOwnPropertyNames(1)})},{getOwnPropertyNames:P1});var Yd=mr.Object,Tl=function(m){return Yd.getOwnPropertyNames(m)},j1=r(Tl);function C1(m,s){var l=["node","edge","label"],f=!0,g=ol(s,"chosen");if(typeof g=="boolean")f=g;else if(Wo(g)==="object"){if(Kn(l).call(l,m)===-1)throw new Error("choosify: subOption '"+m+"' should be one of '"+l.join("', '")+"'");var a=ol(s,["chosen",m]);typeof a!="boolean"&&typeof a!="function"||(f=a)}return f}function $2(m,s,l){if(m.width<=0||m.height<=0)return!1;if(l!==void 0){var f={x:s.x-l.x,y:s.y-l.y};if(l.angle!==0){var g=-l.angle;s={x:Math.cos(g)*f.x-Math.sin(g)*f.y,y:Math.sin(g)*f.x+Math.cos(g)*f.y}}else s=f}var a=m.x+m.width,u=m.y+m.width;return m.lefts.x&&m.tops.y}function T1(m){return typeof m=="string"&&m!==""}function wO(m,s,l,f){var g=f.x,a=f.y;if(typeof f.distanceToBorder=="function"){var u=f.distanceToBorder(m,s),p=Math.sin(s)*u,O=Math.cos(s)*u;O===u?(g+=u,a=f.y):p===u?(g=f.x,a-=u):(g+=O,a-=p)}else f.shape.width>f.shape.height?(g=f.x+.5*f.shape.width,a=f.y-l):(g=f.x+l,a=f.y-.5*f.shape.height);return{x:g,y:a}}var Vx=fi("Array").values,ay=Kl,qx=Ui,A1=Mn,Ux=Vx,P0=Array.prototype,Gx={DOMTokenList:!0,NodeList:!0},pS=function(m){var s=m.values;return m===P0||A1(P0,m)&&s===P0.values||qx(Gx,ay(m))?Ux:s},OO=r(pS),xO=function(){function m(s){rr(this,m),this.measureText=s,this.current=0,this.width=0,this.height=0,this.lines=[]}return nr(m,[{key:"_add",value:function(s,l){var f=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"normal";this.lines[s]===void 0&&(this.lines[s]={width:0,height:0,blocks:[]});var g=l;l!==void 0&&l!==""||(g=" ");var a=this.measureText(g,f),u=Po({},OO(a));u.text=l,u.width=a.width,u.mod=f,l!==void 0&&l!==""||(u.width=0),this.lines[s].blocks.push(u),this.lines[s].width+=u.width}},{key:"curWidth",value:function(){var s=this.lines[this.current];return s===void 0?0:s.width}},{key:"append",value:function(s){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"normal";this._add(this.current,s,l)}},{key:"newLine",value:function(s){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"normal";this._add(this.current,s,l),this.current++}},{key:"determineLineHeights",value:function(){for(var s=0;ss&&(s=g.width),l+=g.height}this.width=s,this.height=l}},{key:"removeEmptyBlocks",value:function(){for(var s=[],l=0;l"://,""://,""://,"":/<\/b>/,"":/<\/i>/,"":/<\/code>/,"*":/\*/,_:/_/,"`":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},M1=function(){function m(s){rr(this,m),this.text=s,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer="",this.modStack=[],this.blocks=[]}return nr(m,[{key:"mod",value:function(){return this.modStack.length===0?"normal":this.modStack[0]}},{key:"modName",value:function(){return this.modStack.length===0?"normal":this.modStack[0]==="mono"?"mono":this.bold&&this.ital?"boldital":this.bold?"bold":this.ital?"ital":void 0}},{key:"emitBlock",value:function(){this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer="")}},{key:"add",value:function(s){s===" "&&(this.spacing=!0),this.spacing&&(this.buffer+=" ",this.spacing=!1),s!=" "&&(this.buffer+=s)}},{key:"parseWS",value:function(s){return!!/[ \t]/.test(s)&&(this.mono?this.add(s):this.spacing=!0,!0)}},{key:"setTag",value:function(s){this.emitBlock(),this[s]=!0,this.modStack.unshift(s)}},{key:"unsetTag",value:function(s){this.emitBlock(),this[s]=!1,this.modStack.shift()}},{key:"parseStartTag",value:function(s,l){return!(this.mono||this[s]||!this.match(l))&&(this.setTag(s),!0)}},{key:"match",value:function(s){var l=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],f=Ei(this.prepareRegExp(s),2),g=f[0],a=f[1],u=g.test(this.text.substr(this.position,a));return u&&l&&(this.position+=a-1),u}},{key:"parseEndTag",value:function(s,l,f){var g=this.mod()===s;return!(!(g=s==="mono"?g&&this.mono:g&&!this.mono)||!this.match(l))&&(f!==void 0?(this.position===this.text.length-1||this.match(f,!1))&&this.unsetTag(s):this.unsetTag(s),!0)}},{key:"replace",value:function(s,l){return!!this.match(s)&&(this.add(l),this.position+=length-1,!0)}},{key:"prepareRegExp",value:function(s){var l,f;if(s instanceof RegExp)f=s,l=1;else{var g=sy[s];f=g!==void 0?g:new RegExp(s),l=s.length}return[f,l]}}]),m}(),ly=function(){function m(s,l,f,g){var a=this;rr(this,m),this.ctx=s,this.parent=l,this.selected=f,this.hover=g,this.lines=new xO(function(u,p){if(u===void 0)return 0;var O=a.parent.getFormattingValues(s,f,g,p),P=0;return u!==""&&(P=a.ctx.measureText(u).width),{width:P,values:O}})}return nr(m,[{key:"process",value:function(s){if(!T1(s))return this.lines.finalize();var l=this.parent.fontOptions;s=(s=s.replace(/\r\n/g,` +`,Ia()):Lr+=wn,Ia();if(wn!='"')throw ka('End of string " expected');return Ia(),void(kl=Di.IDENTIFIER)}for(kl=Di.UNKNOWN;wn!="";)Lr+=wn,Ia();throw new SyntaxError('Syntax error in part "'+y1(Lr,30)+'"')}kl=Di.DELIMITER}function Y8(m){for(;Lr!==""&&Lr!="}";)wf(m),Lr===";"&&So()}function wf(m){var s=qg(m);if(s)Of(m,s);else{var l=function(g){return Lr==="node"?(So(),g.node=Ip(),"node"):Lr==="edge"?(So(),g.edge=Ip(),"edge"):Lr==="graph"?(So(),g.graph=Ip(),"graph"):null}(m);if(!l){if(kl!=Di.IDENTIFIER)throw ka("Identifier expected");var f=Lr;if(So(),Lr==="="){if(So(),kl!=Di.IDENTIFIER)throw ka("Identifier expected");m[f]=Lr,So()}else(function(g,a){var u={id:a},p=Ip();p&&(u.attr=p),Uw(g,u),Of(g,a)})(m,f)}}}function qg(m){var s=null;if(Lr==="subgraph"&&((s={}).type="subgraph",So(),kl===Di.IDENTIFIER&&(s.id=Lr,So())),Lr==="{"){if(So(),s||(s={}),s.parent=m,s.node=m.node,s.edge=m.edge,s.graph=m.graph,Y8(s),Lr!="}")throw ka("Angle bracket } expected");So(),delete s.node,delete s.edge,delete s.graph,delete s.parent,m.subgraphs||(m.subgraphs=[]),m.subgraphs.push(s)}return s}function Of(m,s){for(;Lr==="->"||Lr==="--";){var l,f=Lr;So();var g=qg(m);if(g)l=g;else{if(kl!=Di.IDENTIFIER)throw ka("Identifier or subgraph expected");Uw(m,{id:l=Lr}),So()}g1(m,Gw(m,s,l,f,Ip())),s=l}}function Ip(){for(var m,s,l=null,f={dashed:!0,solid:!1,dotted:[1,5]},g={dot:"circle",box:"box",crow:"crow",curve:"curve",icurve:"inv_curve",normal:"triangle",inv:"inv_triangle",diamond:"diamond",tee:"bar",vee:"vee"},a=new Array,u=new Array;Lr==="[";){for(So(),l={};Lr!==""&&Lr!="]";){if(kl!=Di.IDENTIFIER)throw ka("Attribute name expected");var p=Lr;if(So(),Lr!="=")throw ka("Equal sign = expected");if(So(),kl!=Di.IDENTIFIER)throw ka("Attribute value expected");var O=Lr;p==="style"&&(O=f[O]),p==="arrowhead"&&(p="arrows",O={to:{enabled:!0,type:g[O]}}),p==="arrowtail"&&(p="arrows",O={from:{enabled:!0,type:g[O]}}),a.push({attr:l,name:p,value:O}),u.push(p),So(),Lr==","&&So()}if(Lr!="]")throw ka("Bracket ] expected");So()}if(r0(u).call(u,"dir")){var P={arrows:{}};for(m=0;m"&&(p.arrows="to"),p};Do(g=l.edges).call(g,function(u){var p,O,P,z,H,ee,pe;p=u.from instanceof Object?u.from.nodes:{id:u.from},O=u.to instanceof Object?u.to.nodes:{id:u.to},u.from instanceof Object&&u.from.edges&&Do(P=u.from.edges).call(P,function(be){var Ae=a(be);f.edges.push(Ae)}),H=O,ee=function(be,Ae){var Qe=Gw(f,be.id,Ae.id,u.type,u.attr),$e=a(Qe);f.edges.push($e)},zn(z=p)?Do(z).call(z,function(be){zn(H)?Do(H).call(H,function(Ae){ee(be,Ae)}):ee(be,H)}):zn(H)?Do(H).call(H,function(be){ee(z,be)}):ee(z,H),u.to instanceof Object&&u.to.edges&&Do(pe=u.to.edges).call(pe,function(be){var Ae=a(be);f.edges.push(Ae)})})}return l.attr&&(f.options=l.attr),f}var Q8=Object.freeze({__proto__:null,DOTToGraph:kx,parseDOT:Vw});function Ug(m,s){var l,f={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};s!=null&&(s.fixed!=null&&(f.nodes.fixed=s.fixed),s.parseColor!=null&&(f.nodes.parseColor=s.parseColor),s.inheritColor!=null&&(f.edges.inheritColor=s.inheritColor));var g=m.edges,a=Ad(g).call(g,function(u){var p={from:u.source,id:u.id,to:u.target};return u.attributes!=null&&(p.attributes=u.attributes),u.label!=null&&(p.label=u.label),u.attributes!=null&&u.attributes.title!=null&&(p.title=u.attributes.title),u.type==="Directed"&&(p.arrows="to"),u.color&&f.edges.inheritColor===!1&&(p.color=u.color),p});return{nodes:Ad(l=m.nodes).call(l,function(u){var p={id:u.id,fixed:f.nodes.fixed&&u.x!=null&&u.y!=null};return u.attributes!=null&&(p.attributes=u.attributes),u.label!=null&&(p.label=u.label),u.size!=null&&(p.size=u.size),u.attributes!=null&&u.attributes.title!=null&&(p.title=u.attributes.title),u.title!=null&&(p.title=u.title),u.x!=null&&(p.x=u.x),u.y!=null&&(p.y=u.y),u.color!=null&&(f.nodes.parseColor===!0?p.color=u.color:p.color={background:u.color,border:u.color,highlight:{background:u.color,border:u.color},hover:{background:u.color,border:u.color}}),p}),edges:a}}var b1=Object.freeze({__proto__:null,parseGephi:Ug}),Z8=Object.freeze({__proto__:null,cn:{addDescription:"\u5355\u51FB\u7A7A\u767D\u5904\u653E\u7F6E\u65B0\u8282\u70B9\u3002",addEdge:"\u6DFB\u52A0\u8FDE\u63A5\u7EBF",addNode:"\u6DFB\u52A0\u8282\u70B9",back:"\u8FD4\u56DE",close:"\u95DC\u9589",createEdgeError:"\u65E0\u6CD5\u5C06\u8FDE\u63A5\u7EBF\u8FDE\u63A5\u5230\u7FA4\u96C6\u3002",del:"\u5220\u9664\u9009\u5B9A",deleteClusterError:"\u65E0\u6CD5\u5220\u9664\u7FA4\u96C6\u3002",edgeDescription:"\u5355\u51FB\u67D0\u4E2A\u8282\u70B9\u5E76\u5C06\u8BE5\u8FDE\u63A5\u7EBF\u62D6\u52A8\u5230\u53E6\u4E00\u4E2A\u8282\u70B9\u4EE5\u8FDE\u63A5\u5B83\u4EEC\u3002",edit:"\u7F16\u8F91",editClusterError:"\u65E0\u6CD5\u7F16\u8F91\u7FA4\u96C6\u3002",editEdge:"\u7F16\u8F91\u8FDE\u63A5\u7EBF",editEdgeDescription:"\u5355\u51FB\u63A7\u5236\u8282\u70B9\u5E76\u5C06\u5B83\u4EEC\u62D6\u5230\u8282\u70B9\u4E0A\u8FDE\u63A5\u3002",editNode:"\u7F16\u8F91\u8282\u70B9"},cs:{addDescription:"Kluknut\xEDm do pr\xE1zdn\xE9ho prostoru m\u016F\u017Eete p\u0159idat nov\xFD vrchol.",addEdge:"P\u0159idat hranu",addNode:"P\u0159idat vrchol",back:"Zp\u011Bt",close:"Zav\u0159\xEDt",createEdgeError:"Nelze p\u0159ipojit hranu ke shluku.",del:"Smazat v\xFDb\u011Br",deleteClusterError:"Nelze mazat shluky.",edgeDescription:"P\u0159eta\u017Een\xEDm z jednoho vrcholu do druh\xE9ho m\u016F\u017Eete spojit tyto vrcholy novou hranou.",edit:"Upravit",editClusterError:"Nelze upravovat shluky.",editEdge:"Upravit hranu",editEdgeDescription:"P\u0159eta\u017Een\xEDm kontroln\xEDho vrcholu hrany ji m\u016F\u017Eete p\u0159ipojit k jin\xE9mu vrcholu.",editNode:"Upravit vrchol"},de:{addDescription:"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.",addEdge:"Kante hinzuf\xFCgen",addNode:"Knoten hinzuf\xFCgen",back:"Zur\xFCck",close:"Schlie\xDFen",createEdgeError:"Es ist nicht m\xF6glich, Kanten mit Clustern zu verbinden.",del:"L\xF6sche Auswahl",deleteClusterError:"Cluster k\xF6nnen nicht gel\xF6scht werden.",edgeDescription:"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.",edit:"Editieren",editClusterError:"Cluster k\xF6nnen nicht editiert werden.",editEdge:"Kante editieren",editEdgeDescription:"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.",editNode:"Knoten editieren"},en:{addDescription:"Click in an empty space to place a new node.",addEdge:"Add Edge",addNode:"Add Node",back:"Back",close:"Close",createEdgeError:"Cannot link edges to a cluster.",del:"Delete selected",deleteClusterError:"Clusters cannot be deleted.",edgeDescription:"Click on a node and drag the edge to another node to connect them.",edit:"Edit",editClusterError:"Clusters cannot be edited.",editEdge:"Edit Edge",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",editNode:"Edit Node"},es:{addDescription:"Haga clic en un lugar vac\xEDo para colocar un nuevo nodo.",addEdge:"A\xF1adir arista",addNode:"A\xF1adir nodo",back:"Atr\xE1s",close:"Cerrar",createEdgeError:"No se puede conectar una arista a un grupo.",del:"Eliminar selecci\xF3n",deleteClusterError:"No es posible eliminar grupos.",edgeDescription:"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.",edit:"Editar",editClusterError:"No es posible editar grupos.",editEdge:"Editar arista",editEdgeDescription:"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.",editNode:"Editar nodo"},fr:{addDescription:"Cliquez dans un endroit vide pour placer un n\u0153ud.",addEdge:"Ajouter un lien",addNode:"Ajouter un n\u0153ud",back:"Retour",close:"Fermer",createEdgeError:"Impossible de cr\xE9er un lien vers un cluster.",del:"Effacer la s\xE9lection",deleteClusterError:"Les clusters ne peuvent pas \xEAtre effac\xE9s.",edgeDescription:"Cliquez sur un n\u0153ud et glissez le lien vers un autre n\u0153ud pour les connecter.",edit:"\xC9diter",editClusterError:"Les clusters ne peuvent pas \xEAtre \xE9dit\xE9s.",editEdge:"\xC9diter le lien",editEdgeDescription:"Cliquez sur les points de contr\xF4le et glissez-les pour connecter un n\u0153ud.",editNode:"\xC9diter le n\u0153ud"},it:{addDescription:"Clicca per aggiungere un nuovo nodo",addEdge:"Aggiungi un vertice",addNode:"Aggiungi un nodo",back:"Indietro",close:"Chiudere",createEdgeError:"Non si possono collegare vertici ad un cluster",del:"Cancella la selezione",deleteClusterError:"I cluster non possono essere cancellati",edgeDescription:"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.",edit:"Modifica",editClusterError:"I clusters non possono essere modificati.",editEdge:"Modifica il vertice",editEdgeDescription:"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.",editNode:"Modifica il nodo"},nl:{addDescription:"Klik op een leeg gebied om een nieuwe node te maken.",addEdge:"Link toevoegen",addNode:"Node toevoegen",back:"Terug",close:"Sluiten",createEdgeError:"Kan geen link maken naar een cluster.",del:"Selectie verwijderen",deleteClusterError:"Clusters kunnen niet worden verwijderd.",edgeDescription:"Klik op een node en sleep de link naar een andere node om ze te verbinden.",edit:"Wijzigen",editClusterError:"Clusters kunnen niet worden aangepast.",editEdge:"Link wijzigen",editEdgeDescription:"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.",editNode:"Node wijzigen"},pt:{addDescription:"Clique em um espa\xE7o em branco para adicionar um novo n\xF3",addEdge:"Adicionar aresta",addNode:"Adicionar n\xF3",back:"Voltar",close:"Fechar",createEdgeError:"N\xE3o foi poss\xEDvel linkar arestas a um cluster.",del:"Remover selecionado",deleteClusterError:"Clusters n\xE3o puderam ser removidos.",edgeDescription:"Clique em um n\xF3 e arraste a aresta at\xE9 outro n\xF3 para conect\xE1-los",edit:"Editar",editClusterError:"Clusters n\xE3o puderam ser editados.",editEdge:"Editar aresta",editEdgeDescription:"Clique nos pontos de controle e os arraste para um n\xF3 para conect\xE1-los",editNode:"Editar n\xF3"},ru:{addDescription:"\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u0432 \u0441\u0432\u043E\u0431\u043E\u0434\u043D\u043E\u0435 \u043C\u0435\u0441\u0442\u043E, \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0443\u0437\u0435\u043B.",addEdge:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0440\u0435\u0431\u0440\u043E",addNode:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0443\u0437\u0435\u043B",back:"\u041D\u0430\u0437\u0430\u0434",close:"\u0417\u0430\u043A\u0440\u044B\u0432\u0430\u0442\u044C",createEdgeError:"\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u0440\u0435\u0431\u0440\u0430 \u0432 \u043A\u043B\u0430\u0441\u0442\u0435\u0440.",del:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0435",deleteClusterError:"\u041A\u043B\u0430\u0441\u0442\u0435\u0440\u044B \u043D\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0443\u0434\u0430\u043B\u0435\u043D\u044B",edgeDescription:"\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u043D\u0430 \u0443\u0437\u0435\u043B \u0438 \u043F\u0440\u043E\u0442\u044F\u043D\u0438\u0442\u0435 \u0440\u0435\u0431\u0440\u043E \u043A \u0434\u0440\u0443\u0433\u043E\u043C\u0443 \u0443\u0437\u043B\u0443, \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u0438\u0445.",edit:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C",editClusterError:"\u041A\u043B\u0430\u0441\u0442\u0435\u0440\u044B \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F.",editEdge:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0440\u0435\u0431\u0440\u043E",editEdgeDescription:"\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u043D\u0430 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044C\u043D\u044B\u0435 \u0442\u043E\u0447\u043A\u0438 \u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0438\u0445 \u0432 \u0443\u0437\u0435\u043B, \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043A \u043D\u0435\u043C\u0443.",editNode:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0437\u0435\u043B"},uk:{addDescription:"K\u043B\u0456\u043A\u043D\u0456\u0442\u044C \u043D\u0430 \u0432\u0456\u043B\u044C\u043D\u0435 \u043C\u0456\u0441\u0446\u0435, \u0449\u043E\u0431 \u0434\u043E\u0434\u0430\u0442\u0438 \u043D\u043E\u0432\u0438\u0439 \u0432\u0443\u0437\u043E\u043B.",addEdge:"\u0414\u043E\u0434\u0430\u0442\u0438 \u043A\u0440\u0430\u0439",addNode:"\u0414\u043E\u0434\u0430\u0442\u0438 \u0432\u0443\u0437\u043E\u043B",back:"\u041D\u0430\u0437\u0430\u0434",close:"\u0417\u0430\u043A\u0440\u0438\u0442\u0438",createEdgeError:"\u041D\u0435 \u043C\u043E\u0436\u043B\u0438\u0432\u043E \u043E\u0431'\u0454\u0434\u043D\u0430\u0442\u0438 \u043A\u0440\u0430\u0457 \u0432 \u0433\u0440\u0443\u043F\u0443.",del:"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u043E\u0431\u0440\u0430\u043D\u0435",deleteClusterError:"\u0413\u0440\u0443\u043F\u0438 \u043D\u0435 \u043C\u043E\u0436\u0443\u0442\u044C \u0431\u0443\u0442\u0438 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u0456.",edgeDescription:"\u041A\u043B\u0456\u043A\u043D\u0456\u0442\u044C \u043D\u0430 \u0432\u0443\u0437\u043E\u043B \u0456 \u043F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u043A\u0440\u0430\u0439 \u0434\u043E \u0456\u043D\u0448\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430, \u0449\u043E\u0431 \u0457\u0445 \u0437'\u0454\u0434\u043D\u0430\u0442\u0438.",edit:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438",editClusterError:"\u0413\u0440\u0443\u043F\u0438 \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0456 \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043D\u043D\u044F.",editEdge:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043A\u0440\u0430\u0439",editEdgeDescription:"\u041A\u043B\u0456\u043A\u043D\u0456\u0442\u044C \u043D\u0430 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044C\u043D\u0456 \u0442\u043E\u0447\u043A\u0438 \u0456 \u043F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u0457\u0445 \u0443 \u0432\u0443\u0437\u043E\u043B, \u0449\u043E\u0431 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u0434\u043E \u043D\u044C\u043E\u0433\u043E.",editNode:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0443\u0437\u043E\u043B"}}),Xw=function(){function m(){rr(this,m),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement("canvas")}return nr(m,[{key:"init",value:function(){if(!this.initialized()){this.src=this.image.src;var s=this.image.width,l=this.image.height;this.width=s,this.height=l;var f=Math.floor(l/2),g=Math.floor(l/4),a=Math.floor(l/8),u=Math.floor(l/16),p=Math.floor(s/2),O=Math.floor(s/4),P=Math.floor(s/8),z=Math.floor(s/16);this.canvas.width=3*O,this.canvas.height=f,this.coordinates=[[0,0,p,f],[p,0,O,g],[p,g,P,a],[5*P,g,z,u]],this._fillMipMap()}}},{key:"initialized",value:function(){return this.coordinates!==void 0}},{key:"_fillMipMap",value:function(){var s=this.canvas.getContext("2d"),l=this.coordinates[0];s.drawImage(this.image,l[0],l[1],l[2],l[3]);for(var f=1;f2){l*=.5;for(var p=0;l>2&&p=this.NUM_ITERATIONS&&(p=this.NUM_ITERATIONS-1);var O=this.coordinates[p];s.drawImage(this.canvas,O[0],O[1],O[2],O[3],f,g,a,u)}else s.drawImage(this.image,f,g,a,u)}}]),m}(),Px=function(){function m(s){rr(this,m),this.images={},this.imageBroken={},this.callback=s}return nr(m,[{key:"_tryloadBrokenUrl",value:function(s,l,f){s!==void 0&&f!==void 0&&(l!==void 0?(f.image.onerror=function(){console.error("Could not load brokenImage:",l)},f.image.src=l):console.warn("No broken url image defined"))}},{key:"_redrawWithImage",value:function(s){this.callback&&this.callback(s)}},{key:"load",value:function(s,l){var f=this,g=this.images[s];if(g)return g;var a=new Xw;return this.images[s]=a,a.image.onload=function(){f._fixImageCoordinates(a.image),a.init(),f._redrawWithImage(a)},a.image.onerror=function(){console.error("Could not load image:",s),f._tryloadBrokenUrl(s,l,a)},a.image.src=s,a}},{key:"_fixImageCoordinates",value:function(s){s.width===0&&(document.body.appendChild(s),s.width=s.offsetWidth,s.height=s.offsetHeight,document.body.removeChild(s))}}]),m}(),jx={exports:{}},eS=d(function(){if(typeof ArrayBuffer=="function"){var m=new ArrayBuffer(8);Object.isExtensible(m)&&Object.defineProperty(m,"a",{value:8})}}),tS=d,Kw=Dn,j2=ye,Pl=eS,Gg=Object.isExtensible,kp=tS(function(){Gg(1)})||Pl?function(m){return!!Kw(m)&&(!Pl||j2(m)!=="ArrayBuffer")&&(!Gg||Gg(m))}:Gg,Pp=!d(function(){return Object.isExtensible(Object.preventExtensions({}))}),$d=Pr,jp=X,Jg=ro,C2=Dn,g0=Ui,Yw=ci.f,Qw=pg,rS=_l,Vd=kp,Cx=Pp,w1=!1,jl=Kf("meta"),nS=0,Zw=function(m){Yw(m,jl,{value:{objectID:"O"+nS++,weakData:{}}})},T2=jx.exports={enable:function(){T2.enable=function(){},w1=!0;var m=Qw.f,s=jp([].splice),l={};l[jl]=1,m(l).length&&(Qw.f=function(f){for(var g=m(f),a=0,u=g.length;aa;a++)if((p=$e(m[a]))&&rO(D2,p))return p;return new Kg(!1)}f=Tx(m,g)}for(O=ee?m.next:f.next;!(P=O1(O,f)).done;){try{p=$e(P.value)}catch(mt){Xg(f,"throw",mt)}if(typeof p=="object"&&p&&rO(D2,p))return p}return new Kg(!1)},oi=Mn,Yg=TypeError,qd=function(m,s){if(oi(s,m))return m;throw new Yg("Incorrect invocation")},oS=Pr,z2=i,oO=y0,iO=d,Qg=Zf,Ax=nO,N2=qd,Cp=Me,iS=Dn,aO=Oo,aS=tu,sO=ci.f,sS=sa.forEach,Zg=Ue,lO=ju.set,uO=ju.getterFor,L2=function(m,s,l){var f,g=m.indexOf("Map")!==-1,a=m.indexOf("Weak")!==-1,u=g?"set":"add",p=z2[m],O=p&&p.prototype,P={};if(Zg&&Cp(p)&&(a||O.forEach&&!iO(function(){new p().entries().next()}))){var z=(f=s(function(ee,pe){lO(N2(ee,z),{type:m,collection:new p}),aO(pe)||Ax(pe,ee[u],{that:ee,AS_ENTRIES:g})})).prototype,H=uO(m);sS(["add","clear","delete","forEach","get","has","set","keys","values","entries"],function(ee){var pe=ee==="add"||ee==="set";!(ee in O)||a&&ee==="clear"||Qg(z,ee,function(be,Ae){var Qe=H(this).collection;if(!pe&&a&&!iS(be))return ee==="get"&&void 0;var $e=Qe[ee](be===0?0:be,Ae);return pe?this:$e})}),a||sO(z,"size",{configurable:!0,get:function(){return H(this).collection.size}})}else f=l.getConstructor(s,m,g,u),oO.enable();return aS(f,m,!1,!0),P[m]=f,oS({global:!0,forced:!0},P),a||l.setStrong(f,m,g),f},w0=Au,Ps=function(m,s,l){for(var f in s)l&&l.unsafe&&m[f]?m[f]=s[f]:w0(m,f,s[f],l);return m},F2=rn,cO=au,lS=Ue,Ud=Go("species"),fO=of,uS=au,cu=Ps,ey=Sh,Mx=qd,ty=Oo,Rx=nO,B2=w5,pO=Lm,_1=function(m){var s=F2(m);lS&&s&&!s[Ud]&&cO(s,Ud,{configurable:!0,get:function(){return this}})},Gd=Ue,dO=y0.fastKey,ry=ju.set,Xu=ju.getterFor,Dx={getConstructor:function(m,s,l,f){var g=m(function(P,z){Mx(P,a),ry(P,{type:s,index:fO(null),first:void 0,last:void 0,size:0}),Gd||(P.size=0),ty(z)||Rx(z,P[f],{that:P,AS_ENTRIES:l})}),a=g.prototype,u=Xu(s),p=function(P,z,H){var ee,pe,be=u(P),Ae=O(P,z);return Ae?Ae.value=H:(be.last=Ae={index:pe=dO(z,!0),key:z,value:H,previous:ee=be.last,next:void 0,removed:!1},be.first||(be.first=Ae),ee&&(ee.next=Ae),Gd?be.size++:P.size++,pe!=="F"&&(be.index[pe]=Ae)),P},O=function(P,z){var H,ee=u(P),pe=dO(z);if(pe!=="F")return ee.index[pe];for(H=ee.first;H;H=H.next)if(H.key===z)return H};return cu(a,{clear:function(){for(var P=u(this),z=P.index,H=P.first;H;)H.removed=!0,H.previous&&(H.previous=H.previous.next=void 0),delete z[H.index],H=H.next;P.first=P.last=void 0,Gd?P.size=0:this.size=0},delete:function(P){var z=this,H=u(z),ee=O(z,P);if(ee){var pe=ee.next,be=ee.previous;delete H.index[ee.index],ee.removed=!0,be&&(be.next=pe),pe&&(pe.previous=be),H.first===ee&&(H.first=pe),H.last===ee&&(H.last=be),Gd?H.size--:z.size--}return!!ee},forEach:function(P){for(var z,H=u(this),ee=ey(P,arguments.length>1?arguments[1]:void 0);z=z?z.next:H.first;)for(ee(z.value,z.key,this);z&&z.removed;)z=z.previous},has:function(P){return!!O(this,P)}}),cu(a,l?{get:function(P){var z=O(this,P);return z&&z.value},set:function(P,z){return p(this,P===0?0:P,z)}}:{add:function(P){return p(this,P=P===0?0:P,P)}}),Gd&&uS(a,"size",{configurable:!0,get:function(){return u(this).size}}),g},setStrong:function(m,s,l){var f=s+" Iterator",g=Xu(s),a=Xu(f);B2(m,s,function(u,p){ry(this,{type:f,target:u,state:g(u),kind:p,last:void 0})},function(){for(var u=a(this),p=u.kind,O=u.last;O&&O.removed;)O=O.previous;return u.target&&(u.last=O=O?O.next:u.state.first)?pO(p==="keys"?O.key:p==="values"?O.value:[O.key,O.value],!1):(u.target=void 0,pO(void 0,!0))},l?"entries":"values",!l,!0),_1(s)}};L2("Map",function(m){return function(){return m(this,arguments.length?arguments[0]:void 0)}},Dx);var hO=r(mr.Map),SI=function(){function m(){rr(this,m),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}},{border:"#990000",background:"#EE0000",highlight:{border:"#BB0000",background:"#FF3333"},hover:{border:"#BB0000",background:"#FF3333"}},{border:"#FF6000",background:"#FF6000",highlight:{border:"#FF6000",background:"#FF6000"},hover:{border:"#FF6000",background:"#FF6000"}},{border:"#97C2FC",background:"#2B7CE9",highlight:{border:"#D2E5FF",background:"#2B7CE9"},hover:{border:"#D2E5FF",background:"#2B7CE9"}},{border:"#399605",background:"#255C03",highlight:{border:"#399605",background:"#255C03"},hover:{border:"#399605",background:"#255C03"}},{border:"#B70054",background:"#FF007E",highlight:{border:"#B70054",background:"#FF007E"},hover:{border:"#B70054",background:"#FF007E"}},{border:"#AD85E4",background:"#7C29F0",highlight:{border:"#D3BDF0",background:"#7C29F0"},hover:{border:"#D3BDF0",background:"#7C29F0"}},{border:"#4557FA",background:"#000EA1",highlight:{border:"#6E6EFD",background:"#000EA1"},hover:{border:"#6E6EFD",background:"#000EA1"}},{border:"#FFC0CB",background:"#FD5A77",highlight:{border:"#FFD1D9",background:"#FD5A77"},hover:{border:"#FFD1D9",background:"#FD5A77"}},{border:"#C2FABC",background:"#74D66A",highlight:{border:"#E6FFE3",background:"#74D66A"},hover:{border:"#E6FFE3",background:"#74D66A"}},{border:"#EE0000",background:"#990000",highlight:{border:"#FF3333",background:"#BB0000"},hover:{border:"#FF3333",background:"#BB0000"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},Po(this.options,this.defaultOptions)}return nr(m,[{key:"setOptions",value:function(s){var l=["useDefaultGroups"];if(s!==void 0){for(var f in s)if(Object.prototype.hasOwnProperty.call(s,f)&&Kn(l).call(l,f)===-1){var g=s[f];this.add(f,g)}}}},{key:"clear",value:function(){this._groups=new hO,this._groupNames=[]}},{key:"get",value:function(s){var l=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],f=this._groups.get(s);if(f===void 0&&l)if(this.options.useDefaultGroups===!1&&this._groupNames.length>0){var g=this._groupIndex%this._groupNames.length;++this._groupIndex,(f={}).color=this._groups.get(this._groupNames[g]),this._groups.set(s,f)}else{var a=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(f={}).color=this._defaultGroups[a],this._groups.set(s,f)}return f}},{key:"add",value:function(s,l){return this._groups.has(s)||this._groupNames.push(s),this._groups.set(s,l),l}}]),m}();Pr({target:"Number",stat:!0},{isNaN:function(m){return m!=m}});var W2=r(mr.Number.isNaN),zx=i.isFinite,EI=Number.isFinite||function(m){return typeof m=="number"&&zx(m)};Pr({target:"Number",stat:!0},{isFinite:EI});var Tp=r(mr.Number.isFinite),$a=sa.some;Pr({target:"Array",proto:!0,forced:!gp("some")},{some:function(m){return $a(this,m,arguments.length>1?arguments[1]:void 0)}});var il=fi("Array").some,mO=Mn,Nx=il,Jd=Array.prototype,vO=function(m){var s=m.some;return m===Jd||mO(Jd,m)&&s===Jd.some?Nx:s},Lx=r(vO),O0=r(mr.Object.getOwnPropertySymbols),S1={exports:{}},x0=Pr,gO=d,ny=Mo,Ap=Ve.f,Fx=Ue;x0({target:"Object",stat:!0,forced:!Fx||gO(function(){Ap(1)}),sham:!Fx},{getOwnPropertyDescriptor:function(m,s){return Ap(ny(m),s)}});var Bx=mr.Object,cS=S1.exports=function(m,s){return Bx.getOwnPropertyDescriptor(m,s)};Bx.getOwnPropertyDescriptor.sham&&(cS.sham=!0);var H2=S1.exports,Sc=r(H2),_0=U9,Mp=Mo,E1=Ve,oy=Vh;Pr({target:"Object",stat:!0,sham:!Ue},{getOwnPropertyDescriptors:function(m){for(var s,l,f=Mp(m),g=E1.f,a=_0(f),u={},p=0;a.length>p;)(l=g(f,s=a[p++]))!==void 0&&oy(u,s,l);return u}});var fu=r(mr.Object.getOwnPropertyDescriptors),Wx={exports:{}},Hx=Pr,Rp=Ue,yO=yd.f;Hx({target:"Object",stat:!0,forced:Object.defineProperties!==yO,sham:!Rp},{defineProperties:yO});var I1=mr.Object,$x=Wx.exports=function(m,s){return I1.defineProperties(m,s)};I1.defineProperties.sham&&($x.sham=!0);var Xd=r(Wx.exports),k1=r(Um);function S0(m,s,l){return(s=D6(s))in m?Qs(m,s,{value:l,enumerable:!0,configurable:!0,writable:!0}):m[s]=l,m}var Pa=i,E0=d,Ii=Xs,Cl=n0.trim,iy=lx,I0=X("".charAt),xf=Pa.parseFloat,Kd=Pa.Symbol,k0=Kd&&Kd.iterator,js=1/xf(iy+"-0")!=-1/0||k0&&!E0(function(){xf(Object(k0))})?function(m){var s=Cl(Ii(m)),l=xf(s);return l===0&&I0(s,0)==="-"?-0:l}:xf;Pr({global:!0,forced:parseFloat!==js},{parseFloat:js});var Ku=r(mr.parseFloat),bO=Pr,fS=d,P1=_l.f;bO({target:"Object",stat:!0,forced:fS(function(){return!Object.getOwnPropertyNames(1)})},{getOwnPropertyNames:P1});var Yd=mr.Object,Tl=function(m){return Yd.getOwnPropertyNames(m)},j1=r(Tl);function C1(m,s){var l=["node","edge","label"],f=!0,g=ol(s,"chosen");if(typeof g=="boolean")f=g;else if(Wo(g)==="object"){if(Kn(l).call(l,m)===-1)throw new Error("choosify: subOption '"+m+"' should be one of '"+l.join("', '")+"'");var a=ol(s,["chosen",m]);typeof a!="boolean"&&typeof a!="function"||(f=a)}return f}function $2(m,s,l){if(m.width<=0||m.height<=0)return!1;if(l!==void 0){var f={x:s.x-l.x,y:s.y-l.y};if(l.angle!==0){var g=-l.angle;s={x:Math.cos(g)*f.x-Math.sin(g)*f.y,y:Math.sin(g)*f.x+Math.cos(g)*f.y}}else s=f}var a=m.x+m.width,u=m.y+m.width;return m.lefts.x&&m.tops.y}function T1(m){return typeof m=="string"&&m!==""}function wO(m,s,l,f){var g=f.x,a=f.y;if(typeof f.distanceToBorder=="function"){var u=f.distanceToBorder(m,s),p=Math.sin(s)*u,O=Math.cos(s)*u;O===u?(g+=u,a=f.y):p===u?(g=f.x,a-=u):(g+=O,a-=p)}else f.shape.width>f.shape.height?(g=f.x+.5*f.shape.width,a=f.y-l):(g=f.x+l,a=f.y-.5*f.shape.height);return{x:g,y:a}}var Vx=fi("Array").values,ay=Kl,qx=Ui,A1=Mn,Ux=Vx,P0=Array.prototype,Gx={DOMTokenList:!0,NodeList:!0},pS=function(m){var s=m.values;return m===P0||A1(P0,m)&&s===P0.values||qx(Gx,ay(m))?Ux:s},OO=r(pS),xO=function(){function m(s){rr(this,m),this.measureText=s,this.current=0,this.width=0,this.height=0,this.lines=[]}return nr(m,[{key:"_add",value:function(s,l){var f=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"normal";this.lines[s]===void 0&&(this.lines[s]={width:0,height:0,blocks:[]});var g=l;l!==void 0&&l!==""||(g=" ");var a=this.measureText(g,f),u=Po({},OO(a));u.text=l,u.width=a.width,u.mod=f,l!==void 0&&l!==""||(u.width=0),this.lines[s].blocks.push(u),this.lines[s].width+=u.width}},{key:"curWidth",value:function(){var s=this.lines[this.current];return s===void 0?0:s.width}},{key:"append",value:function(s){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"normal";this._add(this.current,s,l)}},{key:"newLine",value:function(s){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"normal";this._add(this.current,s,l),this.current++}},{key:"determineLineHeights",value:function(){for(var s=0;ss&&(s=g.width),l+=g.height}this.width=s,this.height=l}},{key:"removeEmptyBlocks",value:function(){for(var s=[],l=0;l"://,""://,""://,"":/<\/b>/,"":/<\/i>/,"":/<\/code>/,"*":/\*/,_:/_/,"`":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},M1=function(){function m(s){rr(this,m),this.text=s,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer="",this.modStack=[],this.blocks=[]}return nr(m,[{key:"mod",value:function(){return this.modStack.length===0?"normal":this.modStack[0]}},{key:"modName",value:function(){return this.modStack.length===0?"normal":this.modStack[0]==="mono"?"mono":this.bold&&this.ital?"boldital":this.bold?"bold":this.ital?"ital":void 0}},{key:"emitBlock",value:function(){this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer="")}},{key:"add",value:function(s){s===" "&&(this.spacing=!0),this.spacing&&(this.buffer+=" ",this.spacing=!1),s!=" "&&(this.buffer+=s)}},{key:"parseWS",value:function(s){return!!/[ \t]/.test(s)&&(this.mono?this.add(s):this.spacing=!0,!0)}},{key:"setTag",value:function(s){this.emitBlock(),this[s]=!0,this.modStack.unshift(s)}},{key:"unsetTag",value:function(s){this.emitBlock(),this[s]=!1,this.modStack.shift()}},{key:"parseStartTag",value:function(s,l){return!(this.mono||this[s]||!this.match(l))&&(this.setTag(s),!0)}},{key:"match",value:function(s){var l=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1],f=Ei(this.prepareRegExp(s),2),g=f[0],a=f[1],u=g.test(this.text.substr(this.position,a));return u&&l&&(this.position+=a-1),u}},{key:"parseEndTag",value:function(s,l,f){var g=this.mod()===s;return!(!(g=s==="mono"?g&&this.mono:g&&!this.mono)||!this.match(l))&&(f!==void 0?(this.position===this.text.length-1||this.match(f,!1))&&this.unsetTag(s):this.unsetTag(s),!0)}},{key:"replace",value:function(s,l){return!!this.match(s)&&(this.add(l),this.position+=length-1,!0)}},{key:"prepareRegExp",value:function(s){var l,f;if(s instanceof RegExp)f=s,l=1;else{var g=sy[s];f=g!==void 0?g:new RegExp(s),l=s.length}return[f,l]}}]),m}(),ly=function(){function m(s,l,f,g){var a=this;rr(this,m),this.ctx=s,this.parent=l,this.selected=f,this.hover=g,this.lines=new xO(function(u,p){if(u===void 0)return 0;var O=a.parent.getFormattingValues(s,f,g,p),P=0;return u!==""&&(P=a.ctx.measureText(u).width),{width:P,values:O}})}return nr(m,[{key:"process",value:function(s){if(!T1(s))return this.lines.finalize();var l=this.parent.fontOptions;s=(s=s.replace(/\r\n/g,` `)).replace(/\r/g,` `);var f=String(s).split(` -`),g=f.length;if(l.multi)for(var a=0;a0)for(var p=0;p0)for(var pe=0;pe")||l.parseStartTag("ital","")||l.parseStartTag("mono","")||l.parseEndTag("bold","")||l.parseEndTag("ital","")||l.parseEndTag("mono",""))||f(g)||l.add(g),l.position++}return l.emitBlock(),l.blocks}},{key:"splitMarkdownBlocks",value:function(s){for(var l=this,f=new M1(s),g=!0,a=function(p){return!!/\\/.test(p)&&(f.positionthis.parent.fontOptions.maxWdt}},{key:"getLongestFit",value:function(s){for(var l="",f=0;f1&&arguments[1]!==void 0?arguments[1]:"normal",f=arguments.length>2&&arguments[2]!==void 0&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,l);for(var g=(s=(s=s.replace(/^( +)/g,"$1\r")).replace(/([^\r][^ ]*)( +)/g,"$1\r$2\r")).split("\r");g.length>0;){var a=this.getLongestFit(g);if(a===0){var u=g[0],p=this.getLongestFitWord(u);this.lines.newLine(ri(u).call(u,0,p),l),g[0]=ri(u).call(u,p)}else{var O=a;g[a-1]===" "?a--:g[O]===" "&&O++;var P=ri(g).call(g,0,a).join("");a==g.length&&f?this.lines.append(P,l):this.lines.newLine(P,l),g=ri(g).call(g,O)}}}}]),m}(),Dp=["bold","ital","boldital","mono"],Ko=function(){function m(s,l){var f=arguments.length>2&&arguments[2]!==void 0&&arguments[2];rr(this,m),this.body=s,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(l),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=f}return nr(m,[{key:"setOptions",value:function(s){if(this.elementOptions=s,this.initFontOptions(s.font),T1(s.label)?this.labelDirty=!0:s.label=void 0,s.font!==void 0&&s.font!==null){if(typeof s.font=="string")this.baseSize=this.fontOptions.size;else if(Wo(s.font)==="object"){var l=s.font.size;l!==void 0&&(this.baseSize=l)}}}},{key:"initFontOptions",value:function(s){var l=this;In(Dp,function(f){l.fontOptions[f]={}}),m.parseFontString(this.fontOptions,s)?this.fontOptions.vadjust=0:In(s,function(f,g){f!=null&&Wo(f)!=="object"&&(l.fontOptions[g]=f)})}},{key:"constrain",value:function(s){var l={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:"middle"},f=ol(s,"widthConstraint");if(typeof f=="number")l.maxWdt=Number(f),l.minWdt=Number(f);else if(Wo(f)==="object"){var g=ol(s,["widthConstraint","maximum"]);typeof g=="number"&&(l.maxWdt=Number(g));var a=ol(s,["widthConstraint","minimum"]);typeof a=="number"&&(l.minWdt=Number(a))}var u=ol(s,"heightConstraint");if(typeof u=="number")l.minHgt=Number(u);else if(Wo(u)==="object"){var p=ol(s,["heightConstraint","minimum"]);typeof p=="number"&&(l.minHgt=Number(p));var O=ol(s,["heightConstraint","valign"]);typeof O=="string"&&(O!=="top"&&O!=="bottom"||(l.valign=O))}return l}},{key:"update",value:function(s,l){this.setOptions(s,!0),this.propagateFonts(l),Kr(this.fontOptions,this.constrain(l)),this.fontOptions.chooser=C1("label",l)}},{key:"adjustSizes",value:function(s){var l=s?s.right+s.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=l,this.fontOptions.minWdt-=l);var f=s?s.top+s.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=f)}},{key:"addFontOptionsToPile",value:function(s,l){for(var f=0;f5&&arguments[5]!==void 0?arguments[5]:"middle";if(this.elementOptions.label!==void 0){var p=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&p=this.elementOptions.scaling.label.maxVisible&&(p=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(s,g,a,l,f,u),this._drawBackground(s),this._drawText(s,l,this.size.yLine,u,p))}}},{key:"_drawBackground",value:function(s){if(this.fontOptions.background!==void 0&&this.fontOptions.background!=="none"){s.fillStyle=this.fontOptions.background;var l=this.getSize();s.fillRect(l.left,l.top,l.width,l.height)}}},{key:"_drawText",value:function(s,l,f){var g=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"middle",a=arguments.length>4?arguments[4]:void 0,u=Ei(this._setAlignment(s,l,f,g),2);l=u[0],f=u[1],s.textAlign="left",l-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(this.fontOptions.valign==="top"&&(f-=(this.size.height-this.size.labelHeight)/2),this.fontOptions.valign==="bottom"&&(f+=(this.size.height-this.size.labelHeight)/2));for(var p=0;p0&&(s.lineWidth=H.strokeWidth,s.strokeStyle=be,s.lineJoin="round"),s.fillStyle=pe,H.strokeWidth>0&&s.strokeText(H.text,l+P,f+H.vadjust),s.fillText(H.text,l+P,f+H.vadjust),P+=H.width}f+=O.height}}}},{key:"_setAlignment",value:function(s,l,f,g){return this.isEdgeLabel&&this.fontOptions.align!=="horizontal"&&this.pointToSelf===!1?(l=0,f=0,this.fontOptions.align==="top"?(s.textBaseline="alphabetic",f-=4):this.fontOptions.align==="bottom"?(s.textBaseline="hanging",f+=4):s.textBaseline="middle"):s.textBaseline=g,[l,f]}},{key:"_getColor",value:function(s,l,f){var g=s||"#000000",a=f||"#ffffff";if(l<=this.elementOptions.scaling.label.drawThreshold){var u=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-l)));g=mi(g,u),a=mi(a,u)}return[g,a]}},{key:"getTextSize",value:function(s){var l=arguments.length>1&&arguments[1]!==void 0&&arguments[1],f=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return this._processLabel(s,l,f),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:"getSize",value:function(){var s=this.size.left,l=this.size.top-1;if(this.isEdgeLabel){var f=.5*-this.size.width;switch(this.fontOptions.align){case"middle":s=f,l=.5*-this.size.height;break;case"top":s=f,l=-(this.size.height+2);break;case"bottom":s=f,l=2}}return{left:s,top:l,width:this.size.width,height:this.size.height}}},{key:"calculateLabelSize",value:function(s,l,f){var g=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0,u=arguments.length>5&&arguments[5]!==void 0?arguments[5]:"middle";this._processLabel(s,l,f),this.size.left=g-.5*this.size.width,this.size.top=a-.5*this.size.height,this.size.yLine=a+.5*(1-this.lineCount)*this.fontOptions.size,u==="hanging"&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:"getFormattingValues",value:function(s,l,f,g){var a=function(O,P,z){return P==="normal"?z==="mod"?"":O[z]:O[P][z]!==void 0?O[P][z]:O[z]},u={color:a(this.fontOptions,g,"color"),size:a(this.fontOptions,g,"size"),face:a(this.fontOptions,g,"face"),mod:a(this.fontOptions,g,"mod"),vadjust:a(this.fontOptions,g,"vadjust"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(l||f)&&(g==="normal"&&this.fontOptions.chooser===!0&&this.elementOptions.labelHighlightBold?u.mod="bold":typeof this.fontOptions.chooser=="function"&&this.fontOptions.chooser(u,this.elementOptions.id,l,f));var p="";return u.mod!==void 0&&u.mod!==""&&(p+=u.mod+" "),p+=u.size+"px "+u.face,s.font=p.replace(/"/g,""),u.font=s.font,u.height=u.size,u}},{key:"differentState",value:function(s,l){return s!==this.selectedState||l!==this.hoverState}},{key:"_processLabelText",value:function(s,l,f,g){return new ly(s,this,l,f).process(g)}},{key:"_processLabel",value:function(s,l,f){if(this.labelDirty!==!1||this.differentState(l,f)){var g=this._processLabelText(s,l,f,this.elementOptions.label);this.fontOptions.minWdt>0&&g.width0&&g.height0&&(this.enableBorderDashes(s,l),s.stroke(),this.disableBorderDashes(s,l)),s.restore()}},{key:"performFill",value:function(s,l){s.save(),s.fillStyle=l.color,this.enableShadow(s,l),l1(s).call(s),this.disableShadow(s,l),s.restore(),this.performStroke(s,l)}},{key:"_addBoundingBoxMargin",value:function(s){this.boundingBox.left-=s,this.boundingBox.top-=s,this.boundingBox.bottom+=s,this.boundingBox.right+=s}},{key:"_updateBoundingBox",value:function(s,l,f,g,a){f!==void 0&&this.resize(f,g,a),this.left=s-this.width/2,this.top=l-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"updateBoundingBox",value:function(s,l,f,g,a){this._updateBoundingBox(s,l,f,g,a)}},{key:"getDimensionsFromLabel",value:function(s,l,f){this.textSize=this.labelModule.getTextSize(s,l,f);var g=this.textSize.width,a=this.textSize.height;return g===0&&(g=14,a=14),{width:g,height:a}}}]),m}();function Np(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Yu=function(m){Hn(l,m);var s=Np(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a))._setMargins(a),u}return nr(l,[{key:"resize",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.needsRefresh(g,a)){var u=this.getDimensionsFromLabel(f,g,a);this.width=u.width+this.margin.right+this.margin.left,this.height=u.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:"draw",value:function(f,g,a,u,p,O){this.resize(f,u,p),this.left=g-this.width/2,this.top=a-this.height/2,this.initContextForDraw(f,O),Om(f,this.left,this.top,this.width,this.height,O.borderRadius),this.performFill(f,O),this.updateBoundingBox(g,a,f,u,p),this.labelModule.draw(f,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,u,p)}},{key:"updateBoundingBox",value:function(f,g,a,u,p){this._updateBoundingBox(f,g,a,u,p);var O=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(O)}},{key:"distanceToBorder",value:function(f,g){f&&this.resize(f);var a=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(g)),Math.abs(this.height/2/Math.sin(g)))+a}}]),l}(ki);function Al(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var C0=function(m){Hn(l,m);var s=Al(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a)).labelOffset=0,u.selected=!1,u}return nr(l,[{key:"setOptions",value:function(f,g,a){this.options=f,g===void 0&&a===void 0||this.setImages(g,a)}},{key:"setImages",value:function(f,g){g&&this.selected?(this.imageObj=g,this.imageObjAlt=f):(this.imageObj=f,this.imageObjAlt=g)}},{key:"switchImages",value:function(f){var g=f&&!this.selected||!f&&this.selected;if(this.selected=f,this.imageObjAlt!==void 0&&g){var a=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=a}}},{key:"_getImagePadding",value:function(){var f={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var g=this.options.imagePadding;Wo(g)=="object"?(f.top=g.top,f.right=g.right,f.bottom=g.bottom,f.left=g.left):(f.top=g,f.right=g,f.bottom=g,f.left=g)}return f}},{key:"_resizeImage",value:function(){var f,g;if(this.options.shapeProperties.useImageSize===!1){var a=1,u=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?a=this.imageObj.width/this.imageObj.height:u=this.imageObj.height/this.imageObj.width),f=2*this.options.size*a,g=2*this.options.size*u}else{var p=this._getImagePadding();f=this.imageObj.width+p.left+p.right,g=this.imageObj.height+p.top+p.bottom}this.width=f,this.height=g,this.radius=.5*this.width}},{key:"_drawRawCircle",value:function(f,g,a,u){this.initContextForDraw(f,u),gb(f,g,a,u.size),this.performFill(f,u)}},{key:"_drawImageAtPosition",value:function(f,g){if(this.imageObj.width!=0){f.globalAlpha=g.opacity!==void 0?g.opacity:1,this.enableShadow(f,g);var a=1;this.options.shapeProperties.interpolation===!0&&(a=this.imageObj.width/this.width/this.body.view.scale);var u=this._getImagePadding(),p=this.left+u.left,O=this.top+u.top,P=this.width-u.left-u.right,z=this.height-u.top-u.bottom;this.imageObj.drawImageAtPosition(f,a,p,O,P,z),this.disableShadow(f,g)}}},{key:"_drawImageLabel",value:function(f,g,a,u,p){var O=0;if(this.height!==void 0){O=.5*this.height;var P=this.labelModule.getTextSize(f,u,p);P.lineCount>=1&&(O+=P.height/2)}var z=a+O;this.options.label&&(this.labelOffset=O),this.labelModule.draw(f,g,z,u,p,"hanging")}}]),l}(ki);function vi(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var z1=function(m){Hn(l,m);var s=vi(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a))._setMargins(a),u}return nr(l,[{key:"resize",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.needsRefresh(g,a)){var u=this.getDimensionsFromLabel(f,g,a),p=Math.max(u.width+this.margin.right+this.margin.left,u.height+this.margin.top+this.margin.bottom);this.options.size=p/2,this.width=p,this.height=p,this.radius=this.width/2}}},{key:"draw",value:function(f,g,a,u,p,O){this.resize(f,u,p),this.left=g-this.width/2,this.top=a-this.height/2,this._drawRawCircle(f,g,a,O),this.updateBoundingBox(g,a),this.labelModule.draw(f,this.left+this.textSize.width/2+this.margin.left,a,u,p)}},{key:"updateBoundingBox",value:function(f,g){this.boundingBox.top=g-this.options.size,this.boundingBox.left=f-this.options.size,this.boundingBox.right=f+this.options.size,this.boundingBox.bottom=g+this.options.size}},{key:"distanceToBorder",value:function(f){return f&&this.resize(f),.5*this.width}}]),l}(C0);function T0(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Ho=function(m){Hn(l,m);var s=T0(l);function l(f,g,a,u,p){var O;return rr(this,l),(O=s.call(this,f,g,a)).setImages(u,p),O}return nr(l,[{key:"resize",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.imageObj.src===void 0||this.imageObj.width===void 0||this.imageObj.height===void 0){var u=2*this.options.size;return this.width=u,this.height=u,void(this.radius=.5*this.width)}this.needsRefresh(g,a)&&this._resizeImage()}},{key:"draw",value:function(f,g,a,u,p,O){this.switchImages(u),this.resize();var P=g,z=a;this.options.shapeProperties.coordinateOrigin==="top-left"?(this.left=g,this.top=a,P+=this.width/2,z+=this.height/2):(this.left=g-this.width/2,this.top=a-this.height/2),this._drawRawCircle(f,P,z,O),f.save(),f.clip(),this._drawImageAtPosition(f,O),f.restore(),this._drawImageLabel(f,P,z,u,p),this.updateBoundingBox(g,a)}},{key:"updateBoundingBox",value:function(f,g){this.options.shapeProperties.coordinateOrigin==="top-left"?(this.boundingBox.top=g,this.boundingBox.left=f,this.boundingBox.right=f+2*this.options.size,this.boundingBox.bottom=g+2*this.options.size):(this.boundingBox.top=g-this.options.size,this.boundingBox.left=f-this.options.size,this.boundingBox.right=f+this.options.size,this.boundingBox.bottom=g+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:"distanceToBorder",value:function(f){return f&&this.resize(f),.5*this.width}}]),l}(C0);function zi(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Va=function(m){Hn(l,m);var s=zi(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"resize",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover,u=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{size:this.options.size};if(this.needsRefresh(g,a)){var p,O;this.labelModule.getTextSize(f,g,a);var P=2*u.size;this.width=(p=this.customSizeWidth)!==null&&p!==void 0?p:P,this.height=(O=this.customSizeHeight)!==null&&O!==void 0?O:P,this.radius=.5*this.width}}},{key:"_drawShape",value:function(f,g,a,u,p,O,P,z){var H,ee=this;return this.resize(f,O,P,z),this.left=u-this.width/2,this.top=p-this.height/2,this.initContextForDraw(f,z),(H=g,Object.prototype.hasOwnProperty.call(A4,H)?A4[H]:function(pe){for(var be=arguments.length,Ae=new Array(be>1?be-1:0),Qe=1;Qe0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),l}(ki);function ja(m,s){var l=ni(m);if(O0){var f=O0(m);s&&(f=ua(f).call(f,function(g){return Sc(m,g).enumerable})),l.push.apply(l,f)}return l}function ea(m){for(var s=1;s"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var M0=function(m){Hn(l,m);var s=A0(l);function l(f,g,a,u){var p;return rr(this,l),(p=s.call(this,f,g,a,u)).ctxRenderer=u,p}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){this.resize(f,u,p,O),this.left=g-this.width/2,this.top=a-this.height/2,f.save();var P=this.ctxRenderer({ctx:f,id:this.options.id,x:g,y:a,state:{selected:u,hover:p},style:ea({},O),label:this.options.label});if(P.drawNode!=null&&P.drawNode(),f.restore(),P.drawExternalLabel){var z=P.drawExternalLabel;P.drawExternalLabel=function(){f.save(),z(),f.restore()}}return P.nodeDimensions&&(this.customSizeWidth=P.nodeDimensions.width,this.customSizeHeight=P.nodeDimensions.height),P}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function Ml(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var U2=function(m){Hn(l,m);var s=Ml(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a))._setMargins(a),u}return nr(l,[{key:"resize",value:function(f,g,a){if(this.needsRefresh(g,a)){var u=this.getDimensionsFromLabel(f,g,a).width+this.margin.right+this.margin.left;this.width=u,this.height=u,this.radius=this.width/2}}},{key:"draw",value:function(f,g,a,u,p,O){this.resize(f,u,p),this.left=g-this.width/2,this.top=a-this.height/2,this.initContextForDraw(f,O),bb(f,g-this.width/2,a-this.height/2,this.width,this.height),this.performFill(f,O),this.updateBoundingBox(g,a,f,u,p),this.labelModule.draw(f,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,u,p)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(ki);function Kx(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Yx=function(m){Hn(l,m);var s=Kx(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"diamond",4,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function N1(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Qx=function(m){Hn(l,m);var s=N1(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"circle",2,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f){return f&&this.resize(f),this.options.size}}]),l}(Va);function PO(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var R0=function(m){Hn(l,m);var s=PO(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"resize",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.needsRefresh(g,a)){var u=this.getDimensionsFromLabel(f,g,a);this.height=2*u.height,this.width=u.width+u.height,this.radius=.5*this.width}}},{key:"draw",value:function(f,g,a,u,p,O){this.resize(f,u,p),this.left=g-.5*this.width,this.top=a-.5*this.height,this.initContextForDraw(f,O),yb(f,this.left,this.top,this.width,this.height),this.performFill(f,O),this.updateBoundingBox(g,a,f,u,p),this.labelModule.draw(f,g,a,u,p)}},{key:"distanceToBorder",value:function(f,g){f&&this.resize(f);var a=.5*this.width,u=.5*this.height,p=Math.sin(g)*a,O=Math.cos(g)*u;return a*u/Math.sqrt(p*p+O*O)}}]),l}(ki);function jO(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Zx=function(m){Hn(l,m);var s=jO(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a))._setMargins(a),u}return nr(l,[{key:"resize",value:function(f,g,a){this.needsRefresh(g,a)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(f,g,a,u,p,O){var P=this;return this.resize(f,u,p),this.options.icon.size=this.options.icon.size||50,this.left=g-this.width/2,this.top=a-this.height/2,this._icon(f,g,a,u,p,O),{drawExternalLabel:function(){P.options.label!==void 0&&P.labelModule.draw(f,P.left+P.iconSize.width/2+P.margin.left,a+P.height/2+5,u),P.updateBoundingBox(g,a)}}}},{key:"updateBoundingBox",value:function(f,g){this.boundingBox.top=g-.5*this.options.icon.size,this.boundingBox.left=f-.5*this.options.icon.size,this.boundingBox.right=f+.5*this.options.icon.size,this.boundingBox.bottom=g+.5*this.options.icon.size,this.options.label!==void 0&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5))}},{key:"_icon",value:function(f,g,a,u,p,O){var P=Number(this.options.icon.size);this.options.icon.code!==void 0?(f.font=[this.options.icon.weight!=null?this.options.icon.weight:u?"bold":"",(this.options.icon.weight!=null&&u?5:0)+P+"px",this.options.icon.face].join(" "),f.fillStyle=this.options.icon.color||"black",f.textAlign="center",f.textBaseline="middle",this.enableShadow(f,O),f.fillText(this.options.icon.code,g,a),this.disableShadow(f,O)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(ki);function G2(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Qd=function(m){Hn(l,m);var s=G2(l);function l(f,g,a,u,p){var O;return rr(this,l),(O=s.call(this,f,g,a)).setImages(u,p),O}return nr(l,[{key:"resize",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.imageObj.src===void 0||this.imageObj.width===void 0||this.imageObj.height===void 0){var u=2*this.options.size;return this.width=u,void(this.height=u)}this.needsRefresh(g,a)&&this._resizeImage()}},{key:"draw",value:function(f,g,a,u,p,O){f.save(),this.switchImages(u),this.resize();var P=g,z=a;if(this.options.shapeProperties.coordinateOrigin==="top-left"?(this.left=g,this.top=a,P+=this.width/2,z+=this.height/2):(this.left=g-this.width/2,this.top=a-this.height/2),this.options.shapeProperties.useBorderWithImage===!0){var H=this.options.borderWidth,ee=this.options.borderWidthSelected||2*this.options.borderWidth,pe=(u?ee:H)/this.body.view.scale;f.lineWidth=Math.min(this.width,pe),f.beginPath();var be=u?this.options.color.highlight.border:p?this.options.color.hover.border:this.options.color.border,Ae=u?this.options.color.highlight.background:p?this.options.color.hover.background:this.options.color.background;O.opacity!==void 0&&(be=mi(be,O.opacity),Ae=mi(Ae,O.opacity)),f.strokeStyle=be,f.fillStyle=Ae,f.rect(this.left-.5*f.lineWidth,this.top-.5*f.lineWidth,this.width+f.lineWidth,this.height+f.lineWidth),l1(f).call(f),this.performStroke(f,O),f.closePath()}this._drawImageAtPosition(f,O),this._drawImageLabel(f,P,z,u,p),this.updateBoundingBox(g,a),f.restore()}},{key:"updateBoundingBox",value:function(f,g){this.resize(),this.options.shapeProperties.coordinateOrigin==="top-left"?(this.left=f,this.top=g):(this.left=f-this.width/2,this.top=g-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,this.options.label!==void 0&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(C0);function vS(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var J2=function(m){Hn(l,m);var s=vS(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"square",2,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function II(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var X2=function(m){Hn(l,m);var s=II(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"hexagon",4,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function e_(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var t_=function(m){Hn(l,m);var s=e_(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"star",4,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function gS(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var yS=function(m){Hn(l,m);var s=gS(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a))._setMargins(a),u}return nr(l,[{key:"resize",value:function(f,g,a){this.needsRefresh(g,a)&&(this.textSize=this.labelModule.getTextSize(f,g,a),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(f,g,a,u,p,O){this.resize(f,u,p),this.left=g-this.width/2,this.top=a-this.height/2,this.enableShadow(f,O),this.labelModule.draw(f,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,u,p),this.disableShadow(f,O),this.updateBoundingBox(g,a,f,u,p)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(ki);function CO(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var kI=function(m){Hn(l,m);var s=CO(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"triangle",3,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function Zd(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var K2=function(m){Hn(l,m);var s=Zd(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"triangleDown",3,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function TO(m,s){var l=ni(m);if(O0){var f=O0(m);s&&(f=ua(f).call(f,function(g){return Sc(m,g).enumerable})),l.push.apply(l,f)}return l}function AO(m){for(var s=1;ss.left&&this.shape.tops.top}},{key:"isBoundingBoxOverlappingWith",value:function(s){return this.shape.boundingBox.lefts.left&&this.shape.boundingBox.tops.top}}],[{key:"checkOpacity",value:function(s){return 0<=s&&s<=1}},{key:"checkCoordinateOrigin",value:function(s){return s===void 0||s==="center"||s==="top-left"}},{key:"updateGroupOptions",value:function(s,l,f){var g;if(f!==void 0){var a=s.group;if(l!==void 0&&l.group!==void 0&&a!==l.group)throw new Error("updateGroupOptions: group values in options don't match.");if(typeof a=="number"||typeof a=="string"&&a!=""){var u=f.get(a);u.opacity!==void 0&&l.opacity===void 0&&(m.checkOpacity(u.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+u.opacity),u.opacity=void 0));var p=ua(g=j1(l)).call(g,function(O){return l[O]!=null});p.push("font"),_o(p,s,u),s.color=nl(s.color)}}}},{key:"parseOptions",value:function(s,l){var f=arguments.length>2&&arguments[2]!==void 0&&arguments[2],g=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},a=arguments.length>4?arguments[4]:void 0;if(_o(["color","fixed","shadow"],s,l,f),m.checkMass(l),s.opacity!==void 0&&(m.checkOpacity(s.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+s.opacity),s.opacity=void 0)),l.opacity!==void 0&&(m.checkOpacity(l.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+l.opacity),l.opacity=void 0)),l.shapeProperties&&!m.checkCoordinateOrigin(l.shapeProperties.coordinateOrigin)&&console.error("Invalid option for node coordinateOrigin, found: "+l.shapeProperties.coordinateOrigin),ks(s,l,"shadow",g),l.color!==void 0&&l.color!==null){var u=nl(l.color);nn(s.color,u)}else f===!0&&l.color===null&&(s.color=yf(g.color));l.fixed!==void 0&&l.fixed!==null&&(typeof l.fixed=="boolean"?(s.fixed.x=l.fixed,s.fixed.y=l.fixed):(l.fixed.x!==void 0&&typeof l.fixed.x=="boolean"&&(s.fixed.x=l.fixed.x),l.fixed.y!==void 0&&typeof l.fixed.y=="boolean"&&(s.fixed.y=l.fixed.y))),f===!0&&l.font===null&&(s.font=yf(g.font)),m.updateGroupOptions(s,l,a),l.scaling!==void 0&&ks(s.scaling,l.scaling,"label",g.scaling)}},{key:"checkMass",value:function(s,l){if(s.mass!==void 0&&s.mass<=0){var f="";l!==void 0&&(f=" in node id: "+l),console.error("%cNegative or zero mass disallowed"+f+", setting mass to 1.",h0),s.mass=1}}}]),m}();function hy(m,s){var l=su!==void 0&&Jh(m)||m["@@iterator"];if(!l){if(zn(m)||(l=function(O,P){var z;if(O){if(typeof O=="string")return MO(O,P);var H=ri(z=Object.prototype.toString.call(O)).call(z,8,-1);if(H==="Object"&&O.constructor&&(H=O.constructor.name),H==="Map"||H==="Set")return Ed(O);if(H==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(H))return MO(O,P)}}(m))||s&&m&&typeof m.length=="number"){l&&(m=l);var f=0,g=function(){};return{s:g,n:function(){return f>=m.length?{done:!0}:{done:!1,value:m[f++]}},e:function(O){throw O},f:g}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,u=!0,p=!1;return{s:function(){l=l.call(m)},n:function(){var O=l.next();return u=O.done,O},e:function(O){p=!0,a=O},f:function(){try{u||l.return==null||l.return()}finally{if(p)throw a}}}}function MO(m,s){(s==null||s>m.length)&&(s=m.length);for(var l=0,f=new Array(s);l1?console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+s.opacity):this.options.opacity=s.opacity),s.shape!==void 0)for(var l in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,l)&&this.body.nodes[l].updateShape();if(s.font!==void 0||s.widthConstraint!==void 0||s.heightConstraint!==void 0)for(var f=0,g=ni(this.body.nodes);f1&&arguments[1]!==void 0&&arguments[1],f=this.body.data.nodes;if(t.isDataViewLike("id",s))this.body.data.nodes=s;else if(zn(s))this.body.data.nodes=new t.DataSet,this.body.data.nodes.add(s);else{if(s)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new t.DataSet}if(f&&In(this.nodesListeners,function(u,p){f.off(p,u)}),this.body.nodes={},this.body.data.nodes){var g=this;In(this.nodesListeners,function(u,p){g.body.data.nodes.on(p,u)});var a=this.body.data.nodes.getIds();this.add(a,!0)}l===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(s){for(var l,f=arguments.length>1&&arguments[1]!==void 0&&arguments[1],g=[],a=0;a1&&arguments[1]!==void 0?arguments[1]:To)(s,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:"refresh",value:function(){var s=this,l=arguments.length>0&&arguments[0]!==void 0&&arguments[0];In(this.body.nodes,function(f,g){var a=s.body.data.nodes.get(g);a!==void 0&&(l===!0&&f.setOptions({x:null,y:null}),f.setOptions({fixed:!1}),f.setOptions(a))})}},{key:"getPositions",value:function(s){var l={};if(s!==void 0){if(zn(s)===!0){for(var f=0;f0?(f=l/p)*f:l;return p===1/0?1/0:p*Ic(g)}});var Qu=r(mr.Math.hypot);function Q2(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Pi=function(){function m(){rr(this,m)}return nr(m,null,[{key:"transform",value:function(s,l){zn(s)||(s=[s]);for(var f=l.point.x,g=l.point.y,a=l.angle,u=l.length,p=0;p4&&arguments[4]!==void 0?arguments[4]:this.getViaNode();s.strokeStyle=this.getColor(s,l),s.lineWidth=l.width,l.dashes!==!1?this._drawDashedLine(s,l,a):this._drawLine(s,l,a)}},{key:"_drawLine",value:function(s,l,f,g,a){if(this.from!=this.to)this._line(s,l,f,g,a);else{var u=Ei(this._getCircleData(s),3),p=u[0],O=u[1],P=u[2];this._circle(s,l,p,O,P)}}},{key:"_drawDashedLine",value:function(s,l,f,g,a){s.lineCap="round";var u=zn(l.dashes)?l.dashes:[5,5];if(s.setLineDash!==void 0){if(s.save(),s.setLineDash(u),s.lineDashOffset=0,this.from!=this.to)this._line(s,l,f);else{var p=Ei(this._getCircleData(s),3),O=p[0],P=p[1],z=p[2];this._circle(s,l,O,P,z)}s.setLineDash([0]),s.lineDashOffset=0,s.restore()}else{if(this.from!=this.to)Fo(s,this.from.x,this.from.y,this.to.x,this.to.y,u);else{var H=Ei(this._getCircleData(s),3),ee=H[0],pe=H[1],be=H[2];this._circle(s,l,ee,pe,be)}this.enableShadow(s,l),s.stroke(),this.disableShadow(s,l)}}},{key:"findBorderPosition",value:function(s,l,f){return this.from!=this.to?this._findBorderPosition(s,l,f):this._findBorderPositionCircle(s,l,f)}},{key:"findBorderPositions",value:function(s){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,s),to:this._findBorderPosition(this.to,s)};var l,f=Ei(ri(l=this._getCircleData(s)).call(l,0,2),2),g=f[0],a=f[1];return{from:this._findBorderPositionCircle(this.from,s,{x:g,y:a,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,s,{x:g,y:a,low:.6,high:.8,direction:1})}}},{key:"_getCircleData",value:function(s){var l=this.options.selfReference.size;s!==void 0&&this.from.shape.width===void 0&&this.from.shape.resize(s);var f=wO(s,this.options.selfReference.angle,l,this.from);return[f.x,f.y,l]}},{key:"_pointOnCircle",value:function(s,l,f,g){var a=2*g*Math.PI;return{x:s+f*Math.cos(a),y:l-f*Math.sin(a)}}},{key:"_findBorderPositionCircle",value:function(s,l,f){var g,a=f.x,u=f.y,p=f.low,O=f.high,P=f.direction,z=this.options.selfReference.size,H=.5*(p+O),ee=0;this.options.arrowStrikethrough===!0&&(P===-1?ee=this.options.endPointOffset.from:P===1&&(ee=this.options.endPointOffset.to));var pe=0;do{H=.5*(p+O),g=this._pointOnCircle(a,u,z,H);var be=Math.atan2(s.y-g.y,s.x-g.x),Ae=s.distanceToBorder(l,be)+ee-Math.sqrt(Math.pow(g.x-s.x,2)+Math.pow(g.y-s.y,2));if(Math.abs(Ae)<.05)break;Ae>0?P>0?p=H:O=H:P>0?O=H:p=H,++pe}while(p<=O&&pe<10);return H1(H1({},g),{},{t:H})}},{key:"getLineWidth",value:function(s,l){return s===!0?Math.max(this.selectionWidth,.3/this._body.view.scale):l===!0?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:"getColor",value:function(s,l){if(l.inheritsColor!==!1){if(l.inheritsColor==="both"&&this.from.id!==this.to.id){var f=s.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),g=this.from.options.color.highlight.border,a=this.to.options.color.highlight.border;return this.from.selected===!1&&this.to.selected===!1?(g=mi(this.from.options.color.border,l.opacity),a=mi(this.to.options.color.border,l.opacity)):this.from.selected===!0&&this.to.selected===!1?a=this.to.options.color.border:this.from.selected===!1&&this.to.selected===!0&&(g=this.from.options.color.border),f.addColorStop(0,g),f.addColorStop(1,a),f}return l.inheritsColor==="to"?mi(this.to.options.color.border,l.opacity):mi(this.from.options.color.border,l.opacity)}return mi(l.color,l.opacity)}},{key:"_circle",value:function(s,l,f,g,a){this.enableShadow(s,l);var u=0,p=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var O=this.options.selfReference.angle,P=this.options.selfReference.angle+Math.PI,z=this._findBorderPositionCircle(this.from,s,{x:f,y:g,low:O,high:P,direction:-1}),H=this._findBorderPositionCircle(this.from,s,{x:f,y:g,low:O,high:P,direction:1});u=Math.atan2(z.y-g,z.x-f),p=Math.atan2(H.y-g,H.x-f)}s.beginPath(),s.arc(f,g,a,u,p,!1),s.stroke(),this.disableShadow(s,l)}},{key:"getDistanceToEdge",value:function(s,l,f,g,a,u){if(this.from!=this.to)return this._getDistanceToEdge(s,l,f,g,a,u);var p=Ei(this._getCircleData(void 0),3),O=p[0],P=p[1],z=p[2],H=O-a,ee=P-u;return Math.abs(Math.sqrt(H*H+ee*ee)-z)}},{key:"_getDistanceToLine",value:function(s,l,f,g,a,u){var p=f-s,O=g-l,P=((a-s)*p+(u-l)*O)/(p*p+O*O);P>1?P=1:P<0&&(P=0);var z=s+P*p-a,H=l+P*O-u;return Math.sqrt(z*z+H*H)}},{key:"getArrowData",value:function(s,l,f,g,a,u){var p,O,P,z,H,ee,pe,be=u.width;l==="from"?(P=this.from,z=this.to,H=u.fromArrowScale<0,ee=Math.abs(u.fromArrowScale),pe=u.fromArrowType):l==="to"?(P=this.to,z=this.from,H=u.toArrowScale<0,ee=Math.abs(u.toArrowScale),pe=u.toArrowType):(P=this.to,z=this.from,H=u.middleArrowScale<0,ee=Math.abs(u.middleArrowScale),pe=u.middleArrowType);var Ae=15*ee+3*be;if(P!=z){var Qe=Ae/Qu(P.x-z.x,P.y-z.y);if(l!=="middle")if(this.options.smooth.enabled===!0){var $e=this._findBorderPosition(P,s,{via:f}),mt=this.getPoint($e.t+Qe*(l==="from"?1:-1),f);p=Math.atan2($e.y-mt.y,$e.x-mt.x),O=$e}else p=Math.atan2(P.y-z.y,P.x-z.x),O=this._findBorderPosition(P,s);else{var It=(H?-Qe:Qe)/2,Ct=this.getPoint(.5+It,f),qe=this.getPoint(.5-It,f);p=Math.atan2(Ct.y-qe.y,Ct.x-qe.x),O=this.getPoint(.5,f)}}else{var Fe=Ei(this._getCircleData(s),3),Ge=Fe[0],pt=Fe[1],ft=Fe[2];if(l==="from"){var yr=this.options.selfReference.angle,$t=this.options.selfReference.angle+Math.PI,wr=this._findBorderPositionCircle(this.from,s,{x:Ge,y:pt,low:yr,high:$t,direction:-1});p=-2*wr.t*Math.PI+1.5*Math.PI+.1*Math.PI,O=wr}else if(l==="to"){var Fr=this.options.selfReference.angle,zr=this.options.selfReference.angle+Math.PI,Ns=this._findBorderPositionCircle(this.from,s,{x:Ge,y:pt,low:Fr,high:zr,direction:1});p=-2*Ns.t*Math.PI+1.5*Math.PI-1.1*Math.PI,O=Ns}else{var Ls=this.options.selfReference.angle/(2*Math.PI);O=this._pointOnCircle(Ge,pt,ft,Ls),p=-2*Ls*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:O,core:{x:O.x-.9*Ae*Math.cos(p),y:O.y-.9*Ae*Math.sin(p)},angle:p,length:Ae,type:pe}}},{key:"drawArrowHead",value:function(s,l,f,g,a){s.strokeStyle=this.getColor(s,l),s.fillStyle=s.strokeStyle,s.lineWidth=l.width,r3.draw(s,a)&&(this.enableShadow(s,l),l1(s).call(s),this.disableShadow(s,l))}},{key:"enableShadow",value:function(s,l){l.shadow===!0&&(s.shadowColor=l.shadowColor,s.shadowBlur=l.shadowSize,s.shadowOffsetX=l.shadowX,s.shadowOffsetY=l.shadowY)}},{key:"disableShadow",value:function(s,l){l.shadow===!0&&(s.shadowColor="rgba(0,0,0,0)",s.shadowBlur=0,s.shadowOffsetX=0,s.shadowOffsetY=0)}},{key:"drawBackground",value:function(s,l){if(l.background!==!1){var f={strokeStyle:s.strokeStyle,lineWidth:s.lineWidth,dashes:s.dashes};s.strokeStyle=l.backgroundColor,s.lineWidth=l.backgroundSize,this.setStrokeDashed(s,l.backgroundDashes),s.stroke(),s.strokeStyle=f.strokeStyle,s.lineWidth=f.lineWidth,s.dashes=f.dashes,this.setStrokeDashed(s,l.dashes)}}},{key:"setStrokeDashed",value:function(s,l){if(l!==!1)if(s.setLineDash!==void 0){var f=zn(l)?l:[5,5];s.setLineDash(f)}else console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.");else s.setLineDash!==void 0?s.setLineDash([]):console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.")}}]),m}();function Sf(m,s){var l=ni(m);if(O0){var f=O0(m);s&&(f=ua(f).call(f,function(g){return Sc(m,g).enumerable})),l.push.apply(l,f)}return l}function zO(m){for(var s=1;s"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Rl=function(m){Hn(l,m);var s=n3(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"_findBorderPositionBezier",value:function(f,g){var a,u,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this._getViaCoordinates(),O=!1,P=1,z=0,H=this.to,ee=this.options.endPointOffset?this.options.endPointOffset.to:0;f.id===this.from.id&&(H=this.from,O=!0,ee=this.options.endPointOffset?this.options.endPointOffset.from:0),this.options.arrowStrikethrough===!1&&(ee=0);var pe=0;do{u=.5*(z+P),a=this.getPoint(u,p);var be=Math.atan2(H.y-a.y,H.x-a.x),Ae=H.distanceToBorder(g,be)+ee-Math.sqrt(Math.pow(a.x-H.x,2)+Math.pow(a.y-H.y,2));if(Math.abs(Ae)<.2)break;Ae<0?O===!1?z=u:P=u:O===!1?P=u:z=u,++pe}while(z<=P&&pe<10);return zO(zO({},a),{},{t:u})}},{key:"_getDistanceToBezierEdge",value:function(f,g,a,u,p,O,P){var z,H,ee,pe,be,Ae=1e9,Qe=f,$e=g;for(H=1;H<10;H++)ee=.1*H,pe=Math.pow(1-ee,2)*f+2*ee*(1-ee)*P.x+Math.pow(ee,2)*a,be=Math.pow(1-ee,2)*g+2*ee*(1-ee)*P.y+Math.pow(ee,2)*u,H>0&&(Ae=(z=this._getDistanceToLine(Qe,$e,pe,be,p,O))"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var vy=function(m){Hn(l,m);var s=my(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a)).via=u.via,u._boundFunction=function(){u.positionBezierNode()},u._body.emitter.on("_repositionBezierNodes",u._boundFunction),u}return nr(l,[{key:"setOptions",value:function(f){B1(Er(l.prototype),"setOptions",this).call(this,f);var g=!1;this.options.physics!==f.physics&&(g=!0),this.options=f,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),g===!0&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:"connect",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.from===void 0||this.to===void 0||this.options.physics===!1||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:"cleanup",value:function(){return this._body.emitter.off("_repositionBezierNodes",this._boundFunction),this.via!==void 0&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:"setupSupportNode",value:function(){if(this.via===void 0){var f="edgeId:"+this.id,g=this._body.functions.createNode({id:f,shape:"circle",physics:!0,hidden:!0});this._body.nodes[f]=g,this.via=g,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:"positionBezierNode",value:function(){this.via!==void 0&&this.from!==void 0&&this.to!==void 0?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):this.via!==void 0&&(this.via.x=0,this.via.y=0)}},{key:"_line",value:function(f,g,a){this._bezierCurve(f,g,a)}},{key:"_getViaCoordinates",value:function(){return this.via}},{key:"getViaNode",value:function(){return this.via}},{key:"getPoint",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.via;if(this.from===this.to){var a=Ei(this._getCircleData(),3),u=a[0],p=a[1],O=a[2],P=2*Math.PI*(1-f);return{x:u+O*Math.sin(P),y:p+O-O*(1-Math.cos(P))}}return{x:Math.pow(1-f,2)*this.fromPoint.x+2*f*(1-f)*g.x+Math.pow(f,2)*this.toPoint.x,y:Math.pow(1-f,2)*this.fromPoint.y+2*f*(1-f)*g.y+Math.pow(f,2)*this.toPoint.y}}},{key:"_findBorderPosition",value:function(f,g){return this._findBorderPositionBezier(f,g,this.via)}},{key:"_getDistanceToEdge",value:function(f,g,a,u,p,O){return this._getDistanceToBezierEdge(f,g,a,u,p,O,this.via)}}]),l}(Rl);function $1(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var o3=function(m){Hn(l,m);var s=$1(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"_line",value:function(f,g,a){this._bezierCurve(f,g,a)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_getViaCoordinates",value:function(){var f,g,a=this.options.smooth.roundness,u=this.options.smooth.type,p=Math.abs(this.from.x-this.to.x),O=Math.abs(this.from.y-this.to.y);if(u==="discrete"||u==="diagonalCross"){var P,z;P=z=p<=O?a*O:a*p,this.from.x>this.to.x&&(P=-P),this.from.y>=this.to.y&&(z=-z);var H=this.from.x+P,ee=this.from.y+z;return u==="discrete"&&(p<=O?H=pthis.to.x&&(f=-f),this.from.y>=this.to.y&&(g=-g);var Ge=this.from.x+f,pt=this.from.y+g;return p<=O?Ge=this.from.x<=this.to.x?this.to.xGe?this.to.x:Ge:pt=this.from.y>=this.to.y?this.to.y>pt?this.to.y:pt:this.to.y2&&arguments[2]!==void 0?arguments[2]:{};return this._findBorderPositionBezier(f,g,a.via)}},{key:"_getDistanceToEdge",value:function(f,g,a,u,p,O){var P=arguments.length>6&&arguments[6]!==void 0?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(f,g,a,u,p,O,P)}},{key:"getPoint",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this._getViaCoordinates(),a=f;return{x:Math.pow(1-a,2)*this.fromPoint.x+2*a*(1-a)*g.x+Math.pow(a,2)*this.toPoint.x,y:Math.pow(1-a,2)*this.fromPoint.y+2*a*(1-a)*g.y+Math.pow(a,2)*this.toPoint.y}}}]),l}(Rl);function V1(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var l_=function(m){Hn(l,m);var s=V1(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"_getDistanceToBezierEdge2",value:function(f,g,a,u,p,O,P,z){for(var H=1e9,ee=f,pe=g,be=[0,0,0,0],Ae=1;Ae<10;Ae++){var Qe=.1*Ae;be[0]=Math.pow(1-Qe,3),be[1]=3*Qe*Math.pow(1-Qe,2),be[2]=3*Math.pow(Qe,2)*(1-Qe),be[3]=Math.pow(Qe,3);var $e=be[0]*f+be[1]*P.x+be[2]*z.x+be[3]*a,mt=be[0]*g+be[1]*P.y+be[2]*z.y+be[3]*u;if(Ae>0){var It=this._getDistanceToLine(ee,pe,$e,mt,p,O);H=It"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Ni=function(m){Hn(l,m);var s=NO(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"_line",value:function(f,g,a){var u=a[0],p=a[1];this._bezierCurve(f,g,u,p)}},{key:"_getViaCoordinates",value:function(){var f,g,a,u,p=this.from.x-this.to.x,O=this.from.y-this.to.y,P=this.options.smooth.roundness;return(Math.abs(p)>Math.abs(O)||this.options.smooth.forceDirection===!0||this.options.smooth.forceDirection==="horizontal")&&this.options.smooth.forceDirection!=="vertical"?(g=this.from.y,u=this.to.y,f=this.from.x-P*p,a=this.to.x+P*p):(g=this.from.y-P*O,u=this.to.y+P*O,f=this.from.x,a=this.to.x),[{x:f,y:g},{x:a,y:u}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(f,g){return this._findBorderPositionBezier(f,g)}},{key:"_getDistanceToEdge",value:function(f,g,a,u,p,O){var P=Ei(arguments.length>6&&arguments[6]!==void 0?arguments[6]:this._getViaCoordinates(),2),z=P[0],H=P[1];return this._getDistanceToBezierEdge2(f,g,a,u,p,O,z,H)}},{key:"getPoint",value:function(f){var g=Ei(arguments.length>1&&arguments[1]!==void 0?arguments[1]:this._getViaCoordinates(),2),a=g[0],u=g[1],p=f,O=[Math.pow(1-p,3),3*p*Math.pow(1-p,2),3*Math.pow(p,2)*(1-p),Math.pow(p,3)];return{x:O[0]*this.fromPoint.x+O[1]*a.x+O[2]*u.x+O[3]*this.toPoint.x,y:O[0]*this.fromPoint.y+O[1]*a.y+O[2]*u.y+O[3]*this.toPoint.y}}}]),l}(l_);function i3(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Ef=function(m){Hn(l,m);var s=i3(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"_line",value:function(f,g){f.beginPath(),f.moveTo(this.fromPoint.x,this.fromPoint.y),f.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(f,g),f.stroke(),this.disableShadow(f,g)}},{key:"getViaNode",value:function(){}},{key:"getPoint",value:function(f){return{x:(1-f)*this.fromPoint.x+f*this.toPoint.x,y:(1-f)*this.fromPoint.y+f*this.toPoint.y}}},{key:"_findBorderPosition",value:function(f,g){var a=this.to,u=this.from;f.id===this.from.id&&(a=this.from,u=this.to);var p=Math.atan2(a.y-u.y,a.x-u.x),O=a.x-u.x,P=a.y-u.y,z=Math.sqrt(O*O+P*P),H=(z-f.distanceToBorder(g,p))/z;return{x:(1-H)*u.x+H*a.x,y:(1-H)*u.y+H*a.y,t:0}}},{key:"_getDistanceToEdge",value:function(f,g,a,u,p,O){return this._getDistanceToLine(f,g,a,u,p,O)}}]),l}(s_),ec=function(){function m(s,l,f,g,a){if(rr(this,m),l===void 0)throw new Error("No body provided");this.options=yf(g),this.globalOptions=g,this.defaultOptions=a,this.body=l,this.imagelist=f,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new Ko(this.body,this.options,!0),this.setOptions(s)}return nr(m,[{key:"setOptions",value:function(s){if(s){var l=s.physics!==void 0&&this.options.physics!==s.physics||s.hidden!==void 0&&(this.options.hidden||!1)!==(s.hidden||!1)||s.from!==void 0&&this.options.from!==s.from||s.to!==void 0&&this.options.to!==s.to;m.parseOptions(this.options,s,!0,this.globalOptions),s.id!==void 0&&(this.id=s.id),s.from!==void 0&&(this.fromId=s.from),s.to!==void 0&&(this.toId=s.to),s.title!==void 0&&(this.title=s.title),s.value!==void 0&&(s.value=Ku(s.value));var f=[s,this.options,this.defaultOptions];return this.chooser=C1("edge",f),this.updateLabelModule(s),l=this.updateEdgeType()||l,this._setInteractionWidths(),this.connect(),l}}},{key:"getFormattingValues",value:function(){var s=this.options.arrows.to===!0||this.options.arrows.to.enabled===!0,l=this.options.arrows.from===!0||this.options.arrows.from.enabled===!0,f=this.options.arrows.middle===!0||this.options.arrows.middle.enabled===!0,g=this.options.color.inherit,a={toArrow:s,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:f,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:l,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:g?void 0:this.options.color.color,inheritsColor:g,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(this.chooser===!0){if(this.selected){var u=this.options.selectionWidth;typeof u=="function"?a.width=u(a.width):typeof u=="number"&&(a.width+=u),a.width=Math.max(a.width,.3/this.body.view.scale),a.color=this.options.color.highlight,a.shadow=this.options.shadow.enabled}else if(this.hover){var p=this.options.hoverWidth;typeof p=="function"?a.width=p(a.width):typeof p=="number"&&(a.width+=p),a.width=Math.max(a.width,.3/this.body.view.scale),a.color=this.options.color.hover,a.shadow=this.options.shadow.enabled}}else typeof this.chooser=="function"&&(this.chooser(a,this.options.id,this.selected,this.hover),a.color!==void 0&&(a.inheritsColor=!1),a.shadow===!1&&(a.shadowColor===this.options.shadow.color&&a.shadowSize===this.options.shadow.size&&a.shadowX===this.options.shadow.x&&a.shadowY===this.options.shadow.y||(a.shadow=!0)));else a.shadow=this.options.shadow.enabled,a.width=Math.max(a.width,.3/this.body.view.scale);return a}},{key:"updateLabelModule",value:function(s){var l=[s,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,l),this.labelModule.baseSize!==void 0&&(this.baseFontSize=this.labelModule.baseSize)}},{key:"updateEdgeType",value:function(){var s=this.options.smooth,l=!1,f=!0;return this.edgeType!==void 0&&((this.edgeType instanceof vy&&s.enabled===!0&&s.type==="dynamic"||this.edgeType instanceof Ni&&s.enabled===!0&&s.type==="cubicBezier"||this.edgeType instanceof o3&&s.enabled===!0&&s.type!=="dynamic"&&s.type!=="cubicBezier"||this.edgeType instanceof Ef&&s.type.enabled===!1)&&(f=!1),f===!0&&(l=this.cleanup())),f===!0?s.enabled===!0?s.type==="dynamic"?(l=!0,this.edgeType=new vy(this.options,this.body,this.labelModule)):s.type==="cubicBezier"?this.edgeType=new Ni(this.options,this.body,this.labelModule):this.edgeType=new o3(this.options,this.body,this.labelModule):this.edgeType=new Ef(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),l}},{key:"connect",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=this.from!==void 0&&this.to!==void 0,this.connected===!0?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:"disconnect",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:"getTitle",value:function(){return this.title}},{key:"isSelected",value:function(){return this.selected}},{key:"getValue",value:function(){return this.options.value}},{key:"setValueRange",value:function(s,l,f){if(this.options.value!==void 0){var g=this.options.scaling.customScalingFunction(s,l,f,this.options.value),a=this.options.scaling.max-this.options.scaling.min;if(this.options.scaling.label.enabled===!0){var u=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+g*u}this.options.width=this.options.scaling.min+g*a}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:"_setInteractionWidths",value:function(){typeof this.options.hoverWidth=="function"?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,typeof this.options.selectionWidth=="function"?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:"draw",value:function(s){var l=this.getFormattingValues();if(!l.hidden){var f=this.edgeType.getViaNode();this.edgeType.drawLine(s,l,this.selected,this.hover,f),this.drawLabel(s,f)}}},{key:"drawArrows",value:function(s){var l=this.getFormattingValues();if(!l.hidden){var f=this.edgeType.getViaNode(),g={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,l.fromArrow&&(g.from=this.edgeType.getArrowData(s,"from",f,this.selected,this.hover,l),l.arrowStrikethrough===!1&&(this.edgeType.fromPoint=g.from.core),l.fromArrowSrc&&(g.from.image=this.imagelist.load(l.fromArrowSrc)),l.fromArrowImageWidth&&(g.from.imageWidth=l.fromArrowImageWidth),l.fromArrowImageHeight&&(g.from.imageHeight=l.fromArrowImageHeight)),l.toArrow&&(g.to=this.edgeType.getArrowData(s,"to",f,this.selected,this.hover,l),l.arrowStrikethrough===!1&&(this.edgeType.toPoint=g.to.core),l.toArrowSrc&&(g.to.image=this.imagelist.load(l.toArrowSrc)),l.toArrowImageWidth&&(g.to.imageWidth=l.toArrowImageWidth),l.toArrowImageHeight&&(g.to.imageHeight=l.toArrowImageHeight)),l.middleArrow&&(g.middle=this.edgeType.getArrowData(s,"middle",f,this.selected,this.hover,l),l.middleArrowSrc&&(g.middle.image=this.imagelist.load(l.middleArrowSrc)),l.middleArrowImageWidth&&(g.middle.imageWidth=l.middleArrowImageWidth),l.middleArrowImageHeight&&(g.middle.imageHeight=l.middleArrowImageHeight)),l.fromArrow&&this.edgeType.drawArrowHead(s,l,this.selected,this.hover,g.from),l.middleArrow&&this.edgeType.drawArrowHead(s,l,this.selected,this.hover,g.middle),l.toArrow&&this.edgeType.drawArrowHead(s,l,this.selected,this.hover,g.to)}}},{key:"drawLabel",value:function(s,l){if(this.options.label!==void 0){var f,g=this.from,a=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(s,this.selected,this.hover),g.id!=a.id){this.labelModule.pointToSelf=!1,f=this.edgeType.getPoint(.5,l),s.save();var u=this._getRotation(s);u.angle!=0&&(s.translate(u.x,u.y),s.rotate(u.angle)),this.labelModule.draw(s,f.x,f.y,this.selected,this.hover),s.restore()}else{this.labelModule.pointToSelf=!0;var p=wO(s,this.options.selfReference.angle,this.options.selfReference.size,g);f=this._pointOnCircle(p.x,p.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(s,f.x,f.y,this.selected,this.hover)}}}},{key:"getItemsOnPoint",value:function(s){var l=[];if(this.labelModule.visible()){var f=this._getRotation();$2(this.labelModule.getSize(),s,f)&&l.push({edgeId:this.id,labelId:0})}var g={left:s.x,top:s.y};return this.isOverlappingWith(g)&&l.push({edgeId:this.id}),l}},{key:"isOverlappingWith",value:function(s){if(this.connected){var l=this.from.x,f=this.from.y,g=this.to.x,a=this.to.y,u=s.left,p=s.top;return this.edgeType.getDistanceToEdge(l,f,g,a,u,p)<10}return!1}},{key:"_getRotation",value:function(s){var l=this.edgeType.getViaNode(),f=this.edgeType.getPoint(.5,l);s!==void 0&&this.labelModule.calculateLabelSize(s,this.selected,this.hover,f.x,f.y);var g={x:f.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible()||this.options.font.align==="horizontal")return g;var a=this.from.y-this.to.y,u=this.from.x-this.to.x,p=Math.atan2(a,u);return(p<-1&&u<0||p>0&&u<0)&&(p+=Math.PI),g.angle=p,g}},{key:"_pointOnCircle",value:function(s,l,f,g){return{x:s+f*Math.cos(g),y:l-f*Math.sin(g)}}},{key:"select",value:function(){this.selected=!0}},{key:"unselect",value:function(){this.selected=!1}},{key:"cleanup",value:function(){return this.edgeType.cleanup()}},{key:"remove",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:"endPointsValid",value:function(){return this.body.nodes[this.fromId]!==void 0&&this.body.nodes[this.toId]!==void 0}}],[{key:"parseOptions",value:function(s,l){var f=arguments.length>2&&arguments[2]!==void 0&&arguments[2],g=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},a=arguments.length>4&&arguments[4]!==void 0&&arguments[4];if(dn(["endPointOffset","arrowStrikethrough","id","from","hidden","hoverWidth","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","selfReference","to","title","value","width","font","chosen","widthConstraint"],s,l,f),l.endPointOffset!==void 0&&l.endPointOffset.from!==void 0&&(Tp(l.endPointOffset.from)?s.endPointOffset.from=l.endPointOffset.from:(s.endPointOffset.from=g.endPointOffset.from!==void 0?g.endPointOffset.from:0,console.error("endPointOffset.from is not a valid number"))),l.endPointOffset!==void 0&&l.endPointOffset.to!==void 0&&(Tp(l.endPointOffset.to)?s.endPointOffset.to=l.endPointOffset.to:(s.endPointOffset.to=g.endPointOffset.to!==void 0?g.endPointOffset.to:0,console.error("endPointOffset.to is not a valid number"))),T1(l.label)?s.label=l.label:T1(s.label)||(s.label=void 0),ks(s,l,"smooth",g),ks(s,l,"shadow",g),ks(s,l,"background",g),l.dashes!==void 0&&l.dashes!==null?s.dashes=l.dashes:f===!0&&l.dashes===null&&(s.dashes=wp(g.dashes)),l.scaling!==void 0&&l.scaling!==null?(l.scaling.min!==void 0&&(s.scaling.min=l.scaling.min),l.scaling.max!==void 0&&(s.scaling.max=l.scaling.max),ks(s.scaling,l.scaling,"label",g.scaling)):f===!0&&l.scaling===null&&(s.scaling=wp(g.scaling)),l.arrows!==void 0&&l.arrows!==null)if(typeof l.arrows=="string"){var u=l.arrows.toLowerCase();s.arrows.to.enabled=Kn(u).call(u,"to")!=-1,s.arrows.middle.enabled=Kn(u).call(u,"middle")!=-1,s.arrows.from.enabled=Kn(u).call(u,"from")!=-1}else{if(Wo(l.arrows)!=="object")throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+kg(l.arrows));ks(s.arrows,l.arrows,"to",g.arrows),ks(s.arrows,l.arrows,"middle",g.arrows),ks(s.arrows,l.arrows,"from",g.arrows)}else f===!0&&l.arrows===null&&(s.arrows=wp(g.arrows));if(l.color!==void 0&&l.color!==null){var p=Gt(l.color)?{color:l.color,highlight:l.color,hover:l.color,inherit:!1,opacity:1}:l.color,O=s.color;if(a)Kr(O,g.color,!1,f);else for(var P in O)Object.prototype.hasOwnProperty.call(O,P)&&delete O[P];if(Gt(O))O.color=O,O.highlight=O,O.hover=O,O.inherit=!1,p.opacity===void 0&&(O.opacity=1);else{var z=!1;p.color!==void 0&&(O.color=p.color,z=!0),p.highlight!==void 0&&(O.highlight=p.highlight,z=!0),p.hover!==void 0&&(O.hover=p.hover,z=!0),p.inherit!==void 0&&(O.inherit=p.inherit),p.opacity!==void 0&&(O.opacity=Math.min(1,Math.max(0,p.opacity))),z===!0?O.inherit=!1:O.inherit===void 0&&(O.inherit="from")}}else f===!0&&l.color===null&&(s.color=yf(g.color));f===!0&&l.font===null&&(s.font=yf(g.font)),Object.prototype.hasOwnProperty.call(l,"selfReferenceSize")&&(console.warn("The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}"),s.selfReference.size=l.selfReferenceSize)}}]),m}(),Wp=function(){function m(s,l,f){var g,a=this;rr(this,m),this.body=s,this.images=l,this.groups=f,this.body.functions.createEdge=Vt(g=this.create).call(g,this),this.edgesListeners={add:function(u,p){a.add(p.items)},update:function(u,p){a.update(p.items)},remove:function(u,p){a.remove(p.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:"arrow"},middle:{enabled:!1,scaleFactor:1,type:"arrow"},from:{enabled:!1,scaleFactor:1,type:"arrow"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:"#848484",highlight:"#848484",hover:"#848484",inherit:"from",opacity:1},dashes:!1,font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:2,strokeColor:"#ffffff",align:"horizontal",multi:!1,vadjust:0,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(u,p,O,P){if(p===u)return .5;var z=1/(p-u);return Math.max(0,(P-u)*z)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},background:{enabled:!1,color:"rgba(111,111,111,1)",size:10,dashes:!1},smooth:{enabled:!0,type:"dynamic",forceDirection:"none",roundness:.5},title:void 0,width:1,value:void 0},Kr(this.options,this.defaultOptions),this.bindEventListeners()}return nr(m,[{key:"bindEventListeners",value:function(){var s,l,f=this;this.body.emitter.on("_forceDisableDynamicCurves",function(g){var a=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];g==="dynamic"&&(g="continuous");var u=!1;for(var p in f.body.edges)if(Object.prototype.hasOwnProperty.call(f.body.edges,p)){var O=f.body.edges[p],P=f.body.data.edges.get(p);if(P!=null){var z=P.smooth;z!==void 0&&z.enabled===!0&&z.type==="dynamic"&&(g===void 0?O.setOptions({smooth:!1}):O.setOptions({smooth:{type:g}}),u=!0)}}a===!0&&u===!0&&f.body.emitter.emit("_dataChanged")}),this.body.emitter.on("_dataUpdated",function(){f.reconnectEdges()}),this.body.emitter.on("refreshEdges",Vt(s=this.refresh).call(s,this)),this.body.emitter.on("refresh",Vt(l=this.refresh).call(l,this)),this.body.emitter.on("destroy",function(){In(f.edgesListeners,function(g,a){f.body.data.edges&&f.body.data.edges.off(a,g)}),delete f.body.functions.createEdge,delete f.edgesListeners.add,delete f.edgesListeners.update,delete f.edgesListeners.remove,delete f.edgesListeners})}},{key:"setOptions",value:function(s){if(s!==void 0){ec.parseOptions(this.options,s,!0,this.defaultOptions,!0);var l=!1;if(s.smooth!==void 0)for(var f in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,f)&&(l=this.body.edges[f].updateEdgeType()||l);if(s.font!==void 0)for(var g in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,g)&&this.body.edges[g].updateLabelModule();s.hidden===void 0&&s.physics===void 0&&l!==!0||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(s){var l=this,f=arguments.length>1&&arguments[1]!==void 0&&arguments[1],g=this.body.data.edges;if(t.isDataViewLike("id",s))this.body.data.edges=s;else if(zn(s))this.body.data.edges=new t.DataSet,this.body.data.edges.add(s);else{if(s)throw new TypeError("Array or DataSet expected");this.body.data.edges=new t.DataSet}if(g&&In(this.edgesListeners,function(u,p){g.off(p,u)}),this.body.edges={},this.body.data.edges){In(this.edgesListeners,function(u,p){l.body.data.edges.on(p,u)});var a=this.body.data.edges.getIds();this.add(a,!0)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),f===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(s){for(var l=arguments.length>1&&arguments[1]!==void 0&&arguments[1],f=this.body.edges,g=this.body.data.edges,a=0;a1&&arguments[1]!==void 0)||arguments[1];if(s.length!==0){var f=this.body.edges;In(s,function(g){var a=f[g];a!==void 0&&a.remove()}),l&&this.body.emitter.emit("_dataChanged")}}},{key:"refresh",value:function(){var s=this;In(this.body.edges,function(l,f){var g=s.body.data.edges.get(f);g!==void 0&&l.setOptions(g)})}},{key:"create",value:function(s){return new ec(s,this.body,this.images,this.options,this.defaultOptions)}},{key:"reconnectEdges",value:function(){var s,l=this.body.nodes,f=this.body.edges;for(s in l)Object.prototype.hasOwnProperty.call(l,s)&&(l[s].edges=[]);for(s in f)if(Object.prototype.hasOwnProperty.call(f,s)){var g=f[s];g.from=null,g.to=null,g.connect()}}},{key:"getConnectedNodes",value:function(s){var l=[];if(this.body.edges[s]!==void 0){var f=this.body.edges[s];f.fromId!==void 0&&l.push(f.fromId),f.toId!==void 0&&l.push(f.toId)}return l}},{key:"_updateState",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:"_removeInvalidEdges",value:function(){var s=this,l=[];In(this.body.edges,function(f,g){var a=s.body.nodes[f.toId],u=s.body.nodes[f.fromId];a!==void 0&&a.isCluster===!0||u!==void 0&&u.isCluster===!0||a!==void 0&&u!==void 0||l.push(g)}),this.remove(l,!1)}},{key:"_addMissingEdges",value:function(){var s=this.body.data.edges;if(s!=null){var l=this.body.edges,f=[];Do(s).call(s,function(g,a){l[a]===void 0&&f.push(a)}),this.add(f,!0)}}}]),m}(),LO=function(){function m(s,l,f){rr(this,m),this.body=s,this.physicsBody=l,this.barnesHutTree,this.setOptions(f),this._rng=Yt("BARNES HUT SOLVER")}return nr(m,[{key:"setOptions",value:function(s){this.options=s,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:"solve",value:function(){if(this.options.gravitationalConstant!==0&&this.physicsBody.physicsNodeIndices.length>0){var s,l=this.body.nodes,f=this.physicsBody.physicsNodeIndices,g=f.length,a=this._formBarnesHutTree(l,f);this.barnesHutTree=a;for(var u=0;u0&&this._getForceContributions(a.root,s)}}},{key:"_getForceContributions",value:function(s,l){this._getForceContribution(s.children.NW,l),this._getForceContribution(s.children.NE,l),this._getForceContribution(s.children.SW,l),this._getForceContribution(s.children.SE,l)}},{key:"_getForceContribution",value:function(s,l){if(s.childrenCount>0){var f=s.centerOfMass.x-l.x,g=s.centerOfMass.y-l.y,a=Math.sqrt(f*f+g*g);a*s.calcSize>this.thetaInversed?this._calculateForces(a,f,g,l,s):s.childrenCount===4?this._getForceContributions(s,l):s.children.data.id!=l.id&&this._calculateForces(a,f,g,l,s)}}},{key:"_calculateForces",value:function(s,l,f,g,a){s===0&&(l=s=.1),this.overlapAvoidanceFactor<1&&g.shape.radius&&(s=Math.max(.1+this.overlapAvoidanceFactor*g.shape.radius,s-g.shape.radius));var u=this.options.gravitationalConstant*a.mass*g.options.mass/Math.pow(s,3),p=l*u,O=f*u;this.physicsBody.forces[g.id].x+=p,this.physicsBody.forces[g.id].y+=O}},{key:"_formBarnesHutTree",value:function(s,l){for(var f,g=l.length,a=s[l[0]].x,u=s[l[0]].y,p=s[l[0]].x,O=s[l[0]].y,P=1;P0&&(Hp&&(p=H),eeO&&(O=ee))}var pe=Math.abs(p-a)-Math.abs(O-u);pe>0?(u-=.5*pe,O+=.5*pe):(a+=.5*pe,p-=.5*pe);var be=Math.max(1e-5,Math.abs(p-a)),Ae=.5*be,Qe=.5*(a+p),$e=.5*(u+O),mt={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:Qe-Ae,maxX:Qe+Ae,minY:$e-Ae,maxY:$e+Ae},size:be,calcSize:1/be,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(mt.root);for(var It=0;It0&&this._placeInTree(mt.root,f);return mt}},{key:"_updateBranchMass",value:function(s,l){var f=s.centerOfMass,g=s.mass+l.options.mass,a=1/g;f.x=f.x*s.mass+l.x*l.options.mass,f.x*=a,f.y=f.y*s.mass+l.y*l.options.mass,f.y*=a,s.mass=g;var u=Math.max(Math.max(l.height,l.radius),l.width);s.maxWidth=s.maxWidthl.x?a.maxY>l.y?"NW":"SW":a.maxY>l.y?"NE":"SE",this._placeInRegion(s,l,g)}},{key:"_placeInRegion",value:function(s,l,f){var g=s.children[f];switch(g.childrenCount){case 0:g.children.data=l,g.childrenCount=1,this._updateBranchMass(g,l);break;case 1:g.children.data.x===l.x&&g.children.data.y===l.y?(l.x+=this._rng(),l.y+=this._rng()):(this._splitBranch(g),this._placeInTree(g,l));break;case 4:this._placeInTree(g,l)}}},{key:"_splitBranch",value:function(s){var l=null;s.childrenCount===1&&(l=s.children.data,s.mass=0,s.centerOfMass.x=0,s.centerOfMass.y=0),s.childrenCount=4,s.children.data=null,this._insertRegion(s,"NW"),this._insertRegion(s,"NE"),this._insertRegion(s,"SW"),this._insertRegion(s,"SE"),l!=null&&this._placeInTree(s,l)}},{key:"_insertRegion",value:function(s,l){var f,g,a,u,p=.5*s.size;switch(l){case"NW":f=s.range.minX,g=s.range.minX+p,a=s.range.minY,u=s.range.minY+p;break;case"NE":f=s.range.minX+p,g=s.range.maxX,a=s.range.minY,u=s.range.minY+p;break;case"SW":f=s.range.minX,g=s.range.minX+p,a=s.range.minY+p,u=s.range.maxY;break;case"SE":f=s.range.minX+p,g=s.range.maxX,a=s.range.minY+p,u=s.range.maxY}s.children[l]={centerOfMass:{x:0,y:0},mass:0,range:{minX:f,maxX:g,minY:a,maxY:u},size:.5*s.size,calcSize:2*s.calcSize,children:{data:null},maxWidth:0,level:s.level+1,childrenCount:0}}},{key:"_debug",value:function(s,l){this.barnesHutTree!==void 0&&(s.lineWidth=1,this._drawBranch(this.barnesHutTree.root,s,l))}},{key:"_drawBranch",value:function(s,l,f){f===void 0&&(f="#FF0000"),s.childrenCount===4&&(this._drawBranch(s.children.NW,l),this._drawBranch(s.children.NE,l),this._drawBranch(s.children.SE,l),this._drawBranch(s.children.SW,l)),l.strokeStyle=f,l.beginPath(),l.moveTo(s.range.minX,s.range.minY),l.lineTo(s.range.maxX,s.range.minY),l.stroke(),l.beginPath(),l.moveTo(s.range.maxX,s.range.minY),l.lineTo(s.range.maxX,s.range.maxY),l.stroke(),l.beginPath(),l.moveTo(s.range.maxX,s.range.maxY),l.lineTo(s.range.minX,s.range.maxY),l.stroke(),l.beginPath(),l.moveTo(s.range.minX,s.range.maxY),l.lineTo(s.range.minX,s.range.minY),l.stroke()}}]),m}(),_S=function(){function m(s,l,f){rr(this,m),this._rng=Yt("REPULSION SOLVER"),this.body=s,this.physicsBody=l,this.setOptions(f)}return nr(m,[{key:"setOptions",value:function(s){this.options=s}},{key:"solve",value:function(){for(var s,l,f,g,a,u,p,O,P=this.body.nodes,z=this.physicsBody.physicsNodeIndices,H=this.physicsBody.forces,ee=this.options.nodeDistance,pe=-2/3/ee,be=0;be"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var u_=function(m){Hn(l,m);var s=q1(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a))._rng=Yt("FORCE ATLAS 2 BASED REPULSION SOLVER"),u}return nr(l,[{key:"_calculateForces",value:function(f,g,a,u,p){f===0&&(g=f=.1*this._rng()),this.overlapAvoidanceFactor<1&&u.shape.radius&&(f=Math.max(.1+this.overlapAvoidanceFactor*u.shape.radius,f-u.shape.radius));var O=u.edges.length+1,P=this.options.gravitationalConstant*p.mass*u.options.mass*O/Math.pow(f,2),z=g*P,H=a*P;this.physicsBody.forces[u.id].x+=z,this.physicsBody.forces[u.id].y+=H}}]),l}(LO);function by(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var tc=function(m){Hn(l,m);var s=by(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"_calculateForces",value:function(f,g,a,u,p){if(f>0){var O=p.edges.length+1,P=this.options.centralGravity*O*p.options.mass;u[p.id].x=g*P,u[p.id].y=a*P}}}]),l}(yy),kc=function(){function m(s){rr(this,m),this.body=s,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},Po(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return nr(m,[{key:"bindEventListeners",value:function(){var s=this;this.body.emitter.on("initPhysics",function(){s.initPhysics()}),this.body.emitter.on("_layoutFailed",function(){s.layoutFailed=!0}),this.body.emitter.on("resetPhysics",function(){s.stopSimulation(),s.ready=!1}),this.body.emitter.on("disablePhysics",function(){s.physicsEnabled=!1,s.stopSimulation()}),this.body.emitter.on("restorePhysics",function(){s.setOptions(s.options),s.ready===!0&&s.startSimulation()}),this.body.emitter.on("startSimulation",function(){s.ready===!0&&s.startSimulation()}),this.body.emitter.on("stopSimulation",function(){s.stopSimulation()}),this.body.emitter.on("destroy",function(){s.stopSimulation(!1),s.body.emitter.off()}),this.body.emitter.on("_dataChanged",function(){s.updatePhysicsData()})}},{key:"setOptions",value:function(s){if(s!==void 0)if(s===!1)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(s===!0)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,_o(["stabilization"],this.options,s),ks(this.options,s,"stabilization"),s.enabled===void 0&&(this.options.enabled=!0),this.options.enabled===!1&&(this.physicsEnabled=!1,this.stopSimulation());var l=this.options.wind;l&&((typeof l.x!="number"||W2(l.x))&&(l.x=0),(typeof l.y!="number"||W2(l.y))&&(l.y=0)),this.timestep=this.options.timestep}this.init()}},{key:"init",value:function(){var s;this.options.solver==="forceAtlas2Based"?(s=this.options.forceAtlas2Based,this.nodesSolver=new u_(this.body,this.physicsBody,s),this.edgesSolver=new gy(this.body,this.physicsBody,s),this.gravitySolver=new tc(this.body,this.physicsBody,s)):this.options.solver==="repulsion"?(s=this.options.repulsion,this.nodesSolver=new _S(this.body,this.physicsBody,s),this.edgesSolver=new gy(this.body,this.physicsBody,s),this.gravitySolver=new yy(this.body,this.physicsBody,s)):this.options.solver==="hierarchicalRepulsion"?(s=this.options.hierarchicalRepulsion,this.nodesSolver=new a3(this.body,this.physicsBody,s),this.edgesSolver=new FO(this.body,this.physicsBody,s),this.gravitySolver=new yy(this.body,this.physicsBody,s)):(s=this.options.barnesHut,this.nodesSolver=new LO(this.body,this.physicsBody,s),this.edgesSolver=new gy(this.body,this.physicsBody,s),this.gravitySolver=new yy(this.body,this.physicsBody,s)),this.modelOptions=s}},{key:"initPhysics",value:function(){this.physicsEnabled===!0&&this.options.enabled===!0?this.options.stabilization.enabled===!0?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}},{key:"startSimulation",value:function(){var s;this.physicsEnabled===!0&&this.options.enabled===!0?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),this.viewFunction===void 0&&(this.viewFunction=Vt(s=this.simulationStep).call(s,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}},{key:"stopSimulation",value:function(){var s=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];this.stabilized=!0,s===!0&&this._emitStabilized(),this.viewFunction!==void 0&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,s===!0&&this.body.emitter.emit("_stopRendering"))}},{key:"simulationStep",value:function(){var s=xg();this.physicsTick(),(xg()-s<.4*this.simulationInterval||this.runDoubleSpeed===!0)&&this.stabilized===!1&&(this.physicsTick(),this.runDoubleSpeed=!0),this.stabilized===!0&&this.stopSimulation()}},{key:"_emitStabilized",value:function(){var s=this,l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||this.startedStabilization===!0)&&El(function(){s.body.emitter.emit("stabilized",{iterations:l}),s.startedStabilization=!1,s.stabilizationIterations=0},0)}},{key:"physicsStep",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:"adjustTimeStep",value:function(){this._evaluateStepQuality()===!0?this.timestep=1.2*this.timestep:this.timestep/1.2.3))return!1;return!0}},{key:"moveNodes",value:function(){for(var s=this.physicsBody.physicsNodeIndices,l=0,f=0,g=0;gg&&(s=s>0?g:-g),s}},{key:"_performStep",value:function(s){var l=this.body.nodes[s],f=this.physicsBody.forces[s];this.options.wind&&(f.x+=this.options.wind.x,f.y+=this.options.wind.y);var g=this.physicsBody.velocities[s];return this.previousStates[s]={x:l.x,y:l.y,vx:g.x,vy:g.y},l.options.fixed.x===!1?(g.x=this.calculateComponentVelocity(g.x,f.x,l.options.mass),l.x+=g.x*this.timestep):(f.x=0,g.x=0),l.options.fixed.y===!1?(g.y=this.calculateComponentVelocity(g.y,f.y,l.options.mass),l.y+=g.y*this.timestep):(f.y=0,g.y=0),Math.sqrt(Math.pow(g.x,2)+Math.pow(g.y,2))}},{key:"_freezeNodes",value:function(){var s=this.body.nodes;for(var l in s)if(Object.prototype.hasOwnProperty.call(s,l)&&s[l].x&&s[l].y){var f=s[l].options.fixed;this.freezeCache[l]={x:f.x,y:f.y},f.x=!0,f.y=!0}}},{key:"_restoreFrozenNodes",value:function(){var s=this.body.nodes;for(var l in s)Object.prototype.hasOwnProperty.call(s,l)&&this.freezeCache[l]!==void 0&&(s[l].options.fixed.x=this.freezeCache[l].x,s[l].options.fixed.y=this.freezeCache[l].y);this.freezeCache={}}},{key:"stabilize",value:function(){var s=this,l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.stabilization.iterations;typeof l!="number"&&(l=this.options.stabilization.iterations,console.error("The stabilize method needs a numeric amount of iterations. Switching to default: ",l)),this.physicsBody.physicsNodeIndices.length!==0?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=l,this.options.stabilization.onlyDynamicEdges===!0&&this._freezeNodes(),this.stabilizationIterations=0,El(function(){return s._stabilizationBatch()},0)):this.ready=!0}},{key:"_startStabilizing",value:function(){return this.startedStabilization!==!0&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0,!0)}},{key:"_stabilizationBatch",value:function(){var s=this,l=function(){return s.stabilized===!1&&s.stabilizationIterations1&&arguments[1]!==void 0?arguments[1]:[],g=1e9,a=-1e9,u=1e9,p=-1e9;if(f.length>0)for(var O=0;O(l=s[f[O]]).shape.boundingBox.left&&(u=l.shape.boundingBox.left),pl.shape.boundingBox.top&&(g=l.shape.boundingBox.top),a1&&arguments[1]!==void 0?arguments[1]:[],g=1e9,a=-1e9,u=1e9,p=-1e9;if(f.length>0)for(var O=0;O(l=s[f[O]]).x&&(u=l.x),pl.y&&(g=l.y),a"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var G1=function(m){Hn(l,m);var s=BO(l);function l(f,g,a,u,p,O){var P;return rr(this,l),(P=s.call(this,f,g,a,u,p,O)).isCluster=!0,P.containedNodes={},P.containedEdges={},P}return nr(l,[{key:"_openChildCluster",value:function(f){var g=this,a=this.body.nodes[f];if(this.containedNodes[f]===void 0)throw new Error("node with id: "+f+" not in current cluster");if(!a.isCluster)throw new Error("node with id: "+f+" is not a cluster");delete this.containedNodes[f],In(a.edges,function(u){delete g.containedEdges[u.id]}),In(a.containedNodes,function(u,p){g.containedNodes[p]=u}),a.containedNodes={},In(a.containedEdges,function(u,p){g.containedEdges[p]=u}),a.containedEdges={},In(a.edges,function(u){In(g.edges,function(p){var O,P,z=Kn(O=p.clusteringEdgeReplacingIds).call(O,u.id);z!==-1&&(In(u.clusteringEdgeReplacingIds,function(H){p.clusteringEdgeReplacingIds.push(H),g.body.edges[H].edgeReplacedById=p.id}),Rd(P=p.clusteringEdgeReplacingIds).call(P,z,1))})}),a.edges=[]}}]),l}(To),Hp=function(){function m(s){var l=this;rr(this,m),this.body=s,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},Po(this.options,this.defaultOptions),this.body.emitter.on("_resetData",function(){l.clusteredNodes={},l.clusteredEdges={}})}return nr(m,[{key:"clusterByHubsize",value:function(s,l){s===void 0?s=this._getHubSize():Wo(s)==="object"&&(l=this._checkOptions(s),s=this._getHubSize());for(var f=[],g=0;g=s&&f.push(a.id)}for(var u=0;u0&&arguments[0]!==void 0?arguments[0]:{},f=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];if(l.joinCondition===void 0)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");l=this._checkOptions(l);var g={},a={};In(this.body.nodes,function(u,p){u.options&&l.joinCondition(u.options)===!0&&(g[p]=u,In(u.edges,function(O){s.clusteredEdges[O.id]===void 0&&(a[O.id]=O)}))}),this._cluster(g,a,l,f)}},{key:"clusterByEdgeCount",value:function(s,l){var f=this,g=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];l=this._checkOptions(l);for(var a,u,p,O=[],P={},z=function(){var pe={},be={},Ae=f.body.nodeIndices[H],Qe=f.body.nodes[Ae];if(P[Ae]===void 0){p=0,u=[];for(var $e=0;$e0&&ni(be).length>0&&It===!0){var Fe=function(){for(var ft=0;ft1&&arguments[1]!==void 0)||arguments[1];this.clusterByEdgeCount(1,s,l)}},{key:"clusterBridges",value:function(s){var l=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];this.clusterByEdgeCount(2,s,l)}},{key:"clusterByConnection",value:function(s,l){var f,g=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];if(s===void 0)throw new Error("No nodeId supplied to clusterByConnection!");if(this.body.nodes[s]===void 0)throw new Error("The nodeId given to clusterByConnection does not exist!");var a=this.body.nodes[s];(l=this._checkOptions(l,a)).clusterNodeProperties.x===void 0&&(l.clusterNodeProperties.x=a.x),l.clusterNodeProperties.y===void 0&&(l.clusterNodeProperties.y=a.y),l.clusterNodeProperties.fixed===void 0&&(l.clusterNodeProperties.fixed={},l.clusterNodeProperties.fixed.x=a.options.fixed.x,l.clusterNodeProperties.fixed.y=a.options.fixed.y);var u={},p={},O=a.id,P=Ts.cloneOptions(a);u[O]=a;for(var z=0;z-1&&(p[mt.id]=mt)}this._cluster(u,p,l,g)}},{key:"_createClusterEdges",value:function(s,l,f,g){for(var a,u,p,O,P,z,H=ni(s),ee=[],pe=0;pe0&&arguments[0]!==void 0?arguments[0]:{};return s.clusterEdgeProperties===void 0&&(s.clusterEdgeProperties={}),s.clusterNodeProperties===void 0&&(s.clusterNodeProperties={}),s}},{key:"_cluster",value:function(s,l,f){var g=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],a=[];for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&this.clusteredNodes[u]!==void 0&&a.push(u);for(var p=0;pa?l.x:a,u=l.yp?l.y:p;return{x:.5*(g+a),y:.5*(u+p)}}},{key:"openCluster",value:function(s,l){var f=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];if(s===void 0)throw new Error("No clusterNodeId supplied to openCluster.");var g=this.body.nodes[s];if(g===void 0)throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(g.isCluster!==!0||g.containedNodes===void 0||g.containedEdges===void 0)throw new Error("The node:"+s+" is not a valid cluster.");var a=this.findNode(s),u=Kn(a).call(a,s)-1;if(u>=0){var p=a[u];return this.body.nodes[p]._openChildCluster(s),delete this.body.nodes[s],void(f===!0&&this.body.emitter.emit("_dataChanged"))}var O=g.containedNodes,P=g.containedEdges;if(l!==void 0&&l.releaseFunction!==void 0&&typeof l.releaseFunction=="function"){var z={},H={x:g.x,y:g.y};for(var ee in O)if(Object.prototype.hasOwnProperty.call(O,ee)){var pe=this.body.nodes[ee];z[ee]={x:pe.x,y:pe.y}}var be=l.releaseFunction(H,z);for(var Ae in O)if(Object.prototype.hasOwnProperty.call(O,Ae)){var Qe=this.body.nodes[Ae];be[Ae]!==void 0&&(Qe.x=be[Ae].x===void 0?g.x:be[Ae].x,Qe.y=be[Ae].y===void 0?g.y:be[Ae].y)}}else In(O,function(Ls){Ls.options.fixed.x===!1&&(Ls.x=g.x),Ls.options.fixed.y===!1&&(Ls.y=g.y)});for(var $e in O)if(Object.prototype.hasOwnProperty.call(O,$e)){var mt=this.body.nodes[$e];mt.vx=g.vx,mt.vy=g.vy,mt.setOptions({physics:!0}),delete this.clusteredNodes[$e]}for(var It=[],Ct=0;Ct0&&a<100;){var u=l.pop();if(u!==void 0){var p=this.body.edges[u];if(p!==void 0){a++;var O=p.clusteringEdgeReplacingIds;if(O===void 0)g.push(u);else for(var P=0;Pg&&(g=u.edges.length),s+=u.edges.length,l+=Math.pow(u.edges.length,2),f+=1}s/=f;var p=(l/=f)-Math.pow(s,2),O=Math.sqrt(p),P=Math.floor(s+2*O);return P>g&&(P=g),P}},{key:"_createClusteredEdge",value:function(s,l,f,g,a){var u=Ts.cloneOptions(f,"edge");Kr(u,g),u.from=s,u.to=l,u.id="clusterEdge:"+Ua(),a!==void 0&&Kr(u,a);var p=this.body.functions.createEdge(u);return p.clusteringEdgeReplacingIds=[f.id],p.connect(),this.body.edges[p.id]=p,p}},{key:"_clusterEdges",value:function(s,l,f,g){if(l instanceof ec){var a=l,u={};u[a.id]=a,l=u}if(s instanceof To){var p=s,O={};O[p.id]=p,s=O}if(f==null)throw new Error("_clusterEdges: parameter clusterNode required");for(var P in g===void 0&&(g=f.clusterEdgeProperties),this._createClusterEdges(s,l,f,g),l)if(Object.prototype.hasOwnProperty.call(l,P)&&this.body.edges[P]!==void 0){var z=this.body.edges[P];this._backupEdgeOptions(z),z.setOptions({physics:!1})}for(var H in s)Object.prototype.hasOwnProperty.call(s,H)&&(this.clusteredNodes[H]={clusterId:f.id,node:this.body.nodes[H]},this.body.nodes[H].setOptions({physics:!1}))}},{key:"_getClusterNodeForNode",value:function(s){if(s!==void 0){var l=this.clusteredNodes[s];if(l!==void 0){var f=l.clusterId;if(f!==void 0)return this.body.nodes[f]}}}},{key:"_filter",value:function(s,l){var f=[];return In(s,function(g){l(g)&&f.push(g)}),f}},{key:"_updateState",value:function(){var s,l=this,f=[],g={},a=function(z){In(l.body.nodes,function(H){H.isCluster===!0&&z(H)})};for(s in this.clusteredNodes)Object.prototype.hasOwnProperty.call(this.clusteredNodes,s)&&this.body.nodes[s]===void 0&&f.push(s);a(function(z){for(var H=0;H0}z.endPointsValid()&&ee||(g[H]=H)}),a(function(z){In(g,function(H){delete z.containedEdges[H],In(z.edges,function(ee,pe){ee.id!==H?ee.clusteringEdgeReplacingIds=l._filter(ee.clusteringEdgeReplacingIds,function(be){return!g[be]}):z.edges[pe]=null}),z.edges=l._filter(z.edges,function(ee){return ee!==null})})}),In(g,function(z){delete l.clusteredEdges[z]}),In(g,function(z){delete l.body.edges[z]}),In(ni(this.body.edges),function(z){var H=l.body.edges[z],ee=l._isClusteredNode(H.fromId)||l._isClusteredNode(H.toId);if(ee!==l._isClusteredEdge(H.id))if(ee){var pe=l._getClusterNodeForNode(H.fromId);pe!==void 0&&l._clusterEdges(l.body.nodes[H.fromId],H,pe);var be=l._getClusterNodeForNode(H.toId);be!==void 0&&l._clusterEdges(l.body.nodes[H.toId],H,be)}else delete l._clusterEdges[z],l._restoreEdge(H)});for(var p=!1,O=!0,P=function(){var z=[];a(function(ee){var pe=ni(ee.containedNodes).length,be=ee.options.allowSingleNodeCluster===!0;(be&&pe<1||!be&&pe<2)&&z.push(ee.id)});for(var H=0;H0,p=p||O};O;)P();p&&this._updateState()}},{key:"_isClusteredNode",value:function(s){return this.clusteredNodes[s]!==void 0}},{key:"_isClusteredEdge",value:function(s){return this.clusteredEdges[s]!==void 0}}]),m}(),Pc=function(){function m(s,l){var f;rr(this,m),window!==void 0&&(f=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=f===void 0?function(g){g()}:f,this.body=s,this.canvas=l,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},Po(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return nr(m,[{key:"bindEventListeners",value:function(){var s,l=this;this.body.emitter.on("dragStart",function(){l.dragging=!0}),this.body.emitter.on("dragEnd",function(){l.dragging=!1}),this.body.emitter.on("zoom",function(){l.zooming=!0,window.clearTimeout(l.zoomTimeoutId),l.zoomTimeoutId=El(function(){var f;l.zooming=!1,Vt(f=l._requestRedraw).call(f,l)()},250)}),this.body.emitter.on("_resizeNodes",function(){l._resizeNodes()}),this.body.emitter.on("_redraw",function(){l.renderingActive===!1&&l._redraw()}),this.body.emitter.on("_blockRedraw",function(){l.allowRedraw=!1}),this.body.emitter.on("_allowRedraw",function(){l.allowRedraw=!0,l.redrawRequested=!1}),this.body.emitter.on("_requestRedraw",Vt(s=this._requestRedraw).call(s,this)),this.body.emitter.on("_startRendering",function(){l.renderRequests+=1,l.renderingActive=!0,l._startRendering()}),this.body.emitter.on("_stopRendering",function(){l.renderRequests-=1,l.renderingActive=l.renderRequests>0,l.renderTimer=void 0}),this.body.emitter.on("destroy",function(){l.renderRequests=0,l.allowRedraw=!1,l.renderingActive=!1,l.requiresTimeout===!0?clearTimeout(l.renderTimer):window.cancelAnimationFrame(l.renderTimer),l.body.emitter.off()})}},{key:"setOptions",value:function(s){s!==void 0&&dn(["hideEdgesOnDrag","hideEdgesOnZoom","hideNodesOnDrag"],this.options,s)}},{key:"_requestNextFrame",value:function(s,l){if(typeof window<"u"){var f,g=window;return this.requiresTimeout===!0?f=El(s,l):g.requestAnimationFrame&&(f=g.requestAnimationFrame(s)),f}}},{key:"_startRendering",value:function(){var s;this.renderingActive===!0&&this.renderTimer===void 0&&(this.renderTimer=this._requestNextFrame(Vt(s=this._renderStep).call(s,this),this.simulationInterval))}},{key:"_renderStep",value:function(){this.renderingActive===!0&&(this.renderTimer=void 0,this.requiresTimeout===!0&&this._startRendering(),this._redraw(),this.requiresTimeout===!1&&this._startRendering())}},{key:"redraw",value:function(){this.body.emitter.emit("setSize"),this._redraw()}},{key:"_requestRedraw",value:function(){var s=this;this.redrawRequested!==!0&&this.renderingActive===!1&&this.allowRedraw===!0&&(this.redrawRequested=!0,this._requestNextFrame(function(){s._redraw(!1)},0))}},{key:"_redraw",value:function(){var s=arguments.length>0&&arguments[0]!==void 0&&arguments[0];if(this.allowRedraw===!0){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1;var l={drawExternalLabels:null};this.canvas.frame.canvas.width!==0&&this.canvas.frame.canvas.height!==0||this.canvas.setSize(),this.canvas.setTransform();var f=this.canvas.getContext(),g=this.canvas.frame.canvas.clientWidth,a=this.canvas.frame.canvas.clientHeight;if(f.clearRect(0,0,g,a),this.canvas.frame.clientWidth===0)return;if(f.save(),f.translate(this.body.view.translation.x,this.body.view.translation.y),f.scale(this.body.view.scale,this.body.view.scale),f.beginPath(),this.body.emitter.emit("beforeDrawing",f),f.closePath(),s===!1&&(this.dragging===!1||this.dragging===!0&&this.options.hideEdgesOnDrag===!1)&&(this.zooming===!1||this.zooming===!0&&this.options.hideEdgesOnZoom===!1)&&this._drawEdges(f),this.dragging===!1||this.dragging===!0&&this.options.hideNodesOnDrag===!1){var u=this._drawNodes(f,s).drawExternalLabels;l.drawExternalLabels=u}s===!1&&(this.dragging===!1||this.dragging===!0&&this.options.hideEdgesOnDrag===!1)&&(this.zooming===!1||this.zooming===!0&&this.options.hideEdgesOnZoom===!1)&&this._drawArrows(f),l.drawExternalLabels!=null&&l.drawExternalLabels(),s===!1&&this._drawSelectionBox(f),f.beginPath(),this.body.emitter.emit("afterDrawing",f),f.closePath(),f.restore(),s===!0&&f.clearRect(0,0,g,a)}}},{key:"_resizeNodes",value:function(){this.canvas.setTransform();var s=this.canvas.getContext();s.save(),s.translate(this.body.view.translation.x,this.body.view.translation.y),s.scale(this.body.view.scale,this.body.view.scale);var l,f=this.body.nodes;for(var g in f)Object.prototype.hasOwnProperty.call(f,g)&&((l=f[g]).resize(s),l.updateBoundingBox(s,l.selected));s.restore()}},{key:"_drawNodes",value:function(s){for(var l,f,g=arguments.length>1&&arguments[1]!==void 0&&arguments[1],a=this.body.nodes,u=this.body.nodeIndices,p=[],O=[],P=this.canvas.DOMtoCanvas({x:-20,y:-20}),z=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+20,y:this.canvas.frame.canvas.clientHeight+20}),H={top:P.y,left:P.x,bottom:z.y,right:z.x},ee=[],pe=0;pe0&&arguments[0]!==void 0?arguments[0]:this.pixelRatio;this.initialized===!0&&(this.cameraState.previousWidth=this.frame.canvas.width/s,this.cameraState.previousHeight=this.frame.canvas.height/s,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/s,y:.5*this.frame.canvas.height/s}))}},{key:"_setCameraState",value:function(){if(this.cameraState.scale!==void 0&&this.frame.canvas.clientWidth!==0&&this.frame.canvas.clientHeight!==0&&this.pixelRatio!==0&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var s=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,l=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,f=this.cameraState.scale;s!=1&&l!=1?f=.5*this.cameraState.scale*(s+l):s!=1?f=this.cameraState.scale*s:l!=1&&(f=this.cameraState.scale*l),this.body.view.scale=f;var g=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),a={x:g.x-this.cameraState.position.x,y:g.y-this.cameraState.position.y};this.body.view.translation.x+=a.x*this.body.view.scale,this.body.view.translation.y+=a.y*this.body.view.scale}}},{key:"_prepareValue",value:function(s){if(typeof s=="number")return s+"px";if(typeof s=="string"){if(Kn(s).call(s,"%")!==-1||Kn(s).call(s,"px")!==-1)return s;if(Kn(s).call(s,"%")===-1)return s+"px"}throw new Error("Could not use the value supplied for width or height:"+s)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=0,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var s=document.createElement("DIV");s.style.color="red",s.style.fontWeight="bold",s.style.padding="10px",s.innerText="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(s)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var s=this;this.hammer!==void 0&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new d0(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:d0.DIRECTION_ALL}),D0(this.hammer,function(l){s.body.eventListeners.onTouch(l)}),this.hammer.on("tap",function(l){s.body.eventListeners.onTap(l)}),this.hammer.on("doubletap",function(l){s.body.eventListeners.onDoubleTap(l)}),this.hammer.on("press",function(l){s.body.eventListeners.onHold(l)}),this.hammer.on("panstart",function(l){s.body.eventListeners.onDragStart(l)}),this.hammer.on("panmove",function(l){s.body.eventListeners.onDrag(l)}),this.hammer.on("panend",function(l){s.body.eventListeners.onDragEnd(l)}),this.hammer.on("pinch",function(l){s.body.eventListeners.onPinch(l)}),this.frame.canvas.addEventListener("wheel",function(l){s.body.eventListeners.onMouseWheel(l)}),this.frame.canvas.addEventListener("mousemove",function(l){s.body.eventListeners.onMouseMove(l)}),this.frame.canvas.addEventListener("contextmenu",function(l){s.body.eventListeners.onContext(l)}),this.hammerFrame=new d0(this.frame),c_(this.hammerFrame,function(l){s.body.eventListeners.onRelease(l)})}},{key:"setSize",value:function(){var s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.width,l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.height;s=this._prepareValue(s),l=this._prepareValue(l);var f=!1,g=this.frame.canvas.width,a=this.frame.canvas.height,u=this.pixelRatio;if(this._setPixelRatio(),s!=this.options.width||l!=this.options.height||this.frame.style.width!=s||this.frame.style.height!=l)this._getCameraState(u),this.frame.style.width=s,this.frame.style.height=l,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=s,this.options.height=l,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},f=!0;else{var p=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),O=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===p&&this.frame.canvas.height===O||this._getCameraState(u),this.frame.canvas.width!==p&&(this.frame.canvas.width=p,f=!0),this.frame.canvas.height!==O&&(this.frame.canvas.height=O,f=!0)}return f===!0&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(g/this.pixelRatio),oldHeight:Math.round(a/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,f}},{key:"getContext",value:function(){return this.frame.canvas.getContext("2d")}},{key:"_determinePixelRatio",value:function(){var s=this.getContext();if(s===void 0)throw new Error("Could not get canvax context");var l=1;return typeof window<"u"&&(l=window.devicePixelRatio||1),l/(s.webkitBackingStorePixelRatio||s.mozBackingStorePixelRatio||s.msBackingStorePixelRatio||s.oBackingStorePixelRatio||s.backingStorePixelRatio||1)}},{key:"_setPixelRatio",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:"setTransform",value:function(){var s=this.getContext();if(s===void 0)throw new Error("Could not get canvax context");s.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:"_XconvertDOMtoCanvas",value:function(s){return(s-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(s){return s*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(s){return(s-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(s){return s*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(s){return{x:this._XconvertCanvasToDOM(s.x),y:this._YconvertCanvasToDOM(s.y)}}},{key:"DOMtoCanvas",value:function(s){return{x:this._XconvertDOMtoCanvas(s.x),y:this._YconvertDOMtoCanvas(s.y)}}}]),m}(),ES=function(){function m(s,l){var f,g,a=this;rr(this,m),this.body=s,this.canvas=l,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on("fit",Vt(f=this.fit).call(f,this)),this.body.emitter.on("animationFinished",function(){a.body.emitter.emit("_stopRendering")}),this.body.emitter.on("unlockNode",Vt(g=this.releaseNode).call(g,this))}return nr(m,[{key:"setOptions",value:function(){var s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.options=s}},{key:"fit",value:function(s){var l=arguments.length>1&&arguments[1]!==void 0&&arguments[1];s=function(ee,pe){var be=Po({nodes:pe,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},ee??{});if(!zn(be.nodes))throw new TypeError("Nodes has to be an array of ids.");if(be.nodes.length===0&&(be.nodes=pe),!(typeof be.minZoomLevel=="number"&&be.minZoomLevel>0))throw new TypeError("Min zoom level has to be a number higher than zero.");if(!(typeof be.maxZoomLevel=="number"&&be.minZoomLevel<=be.maxZoomLevel))throw new TypeError("Max zoom level has to be a number higher than min zoom level.");return be}(s,this.body.nodeIndices);var f,g,a=this.canvas.frame.canvas.clientWidth,u=this.canvas.frame.canvas.clientHeight;if(a===0||u===0)g=1,f=Ts.getRange(this.body.nodes,s.nodes);else if(l===!0){var p=0;for(var O in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,O)&&this.body.nodes[O].predefinedPosition===!0&&(p+=1);if(p>.5*this.body.nodeIndices.length)return void this.fit(s,!1);f=Ts.getRange(this.body.nodes,s.nodes),g=12.662/(this.body.nodeIndices.length+7.4147)+.0964822,g*=Math.min(a/600,u/600)}else{this.body.emitter.emit("_resizeNodes"),f=Ts.getRange(this.body.nodes,s.nodes);var P=a/(1.1*Math.abs(f.maxX-f.minX)),z=u/(1.1*Math.abs(f.maxY-f.minY));g=P<=z?P:z}g>s.maxZoomLevel?g=s.maxZoomLevel:g1&&arguments[1]!==void 0?arguments[1]:{};if(this.body.nodes[s]!==void 0){var f={x:this.body.nodes[s].x,y:this.body.nodes[s].y};l.position=f,l.lockedOnNode=s,this.moveTo(l)}else console.error("Node: "+s+" cannot be found.")}},{key:"moveTo",value:function(s){if(s!==void 0){if(s.offset!=null){if(s.offset.x!=null){if(s.offset.x=+s.offset.x,!Tp(s.offset.x))throw new TypeError('The option "offset.x" has to be a finite number.')}else s.offset.x=0;if(s.offset.y!=null){if(s.offset.y=+s.offset.y,!Tp(s.offset.y))throw new TypeError('The option "offset.y" has to be a finite number.')}else s.offset.x=0}else s.offset={x:0,y:0};if(s.position!=null){if(s.position.x!=null){if(s.position.x=+s.position.x,!Tp(s.position.x))throw new TypeError('The option "position.x" has to be a finite number.')}else s.position.x=0;if(s.position.y!=null){if(s.position.y=+s.position.y,!Tp(s.position.y))throw new TypeError('The option "position.y" has to be a finite number.')}else s.position.x=0}else s.position=this.getViewPosition();if(s.scale!=null){if(s.scale=+s.scale,!(s.scale>0))throw new TypeError('The option "scale" has to be a number greater than zero.')}else s.scale=this.body.view.scale;s.animation===void 0&&(s.animation={duration:0}),s.animation===!1&&(s.animation={duration:0}),s.animation===!0&&(s.animation={}),s.animation.duration===void 0&&(s.animation.duration=1e3),s.animation.easingFunction===void 0&&(s.animation.easingFunction="easeInOutQuad"),this.animateView(s)}else s={}}},{key:"animateView",value:function(s){if(s!==void 0){this.animationEasingFunction=s.animation.easingFunction,this.releaseNode(),s.locked===!0&&(this.lockedOnNodeId=s.lockedOnNode,this.lockedOnNodeOffset=s.offset),this.easingTime!=0&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=s.scale,this.body.view.scale=this.targetScale;var l,f,g=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),a=g.x-s.position.x,u=g.y-s.position.y;this.targetTranslation={x:this.sourceTranslation.x+a*this.targetScale+s.offset.x,y:this.sourceTranslation.y+u*this.targetScale+s.offset.y},s.animation.duration===0?this.lockedOnNodeId!=null?(this.viewFunction=Vt(l=this._lockedRedraw).call(l,this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*s.animation.duration*.001)||1/60,this.animationEasingFunction=s.animation.easingFunction,this.viewFunction=Vt(f=this._transitionRedraw).call(f,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}}},{key:"_lockedRedraw",value:function(){var s=this.body.nodes[this.lockedOnNodeId].x,l=this.body.nodes[this.lockedOnNodeId].y,f=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),g=f.x-s,a=f.y-l,u=this.body.view.translation,p={x:u.x+g*this.body.view.scale+this.lockedOnNodeOffset.x,y:u.y+a*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=p}},{key:"releaseNode",value:function(){this.lockedOnNodeId!==void 0&&this.viewFunction!==void 0&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var s=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=s===!0?1:this.easingTime;var l=Fd[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*l,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*l,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*l},this.easingTime>=1){var f;this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,this.lockedOnNodeId!=null&&(this.viewFunction=Vt(f=this._lockedRedraw).call(f,this),this.body.emitter.on("initRedraw",this.viewFunction)),this.body.emitter.emit("animationFinished")}}},{key:"getScale",value:function(){return this.body.view.scale}},{key:"getViewPosition",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),m}();function z0(m){var s,l=m&&m.preventDefault||!1,f=m&&m.container||window,g={},a={keydown:{},keyup:{}},u={};for(s=97;s<=122;s++)u[String.fromCharCode(s)]={code:s-97+65,shift:!1};for(s=65;s<=90;s++)u[String.fromCharCode(s)]={code:s,shift:!0};for(s=0;s<=9;s++)u[""+s]={code:48+s,shift:!1};for(s=1;s<=12;s++)u["F"+s]={code:111+s,shift:!1};for(s=0;s<=9;s++)u["num"+s]={code:96+s,shift:!1};u["num*"]={code:106,shift:!1},u["num+"]={code:107,shift:!1},u["num-"]={code:109,shift:!1},u["num/"]={code:111,shift:!1},u["num."]={code:110,shift:!1},u.left={code:37,shift:!1},u.up={code:38,shift:!1},u.right={code:39,shift:!1},u.down={code:40,shift:!1},u.space={code:32,shift:!1},u.enter={code:13,shift:!1},u.shift={code:16,shift:void 0},u.esc={code:27,shift:!1},u.backspace={code:8,shift:!1},u.tab={code:9,shift:!1},u.ctrl={code:17,shift:!1},u.alt={code:18,shift:!1},u.delete={code:46,shift:!1},u.pageup={code:33,shift:!1},u.pagedown={code:34,shift:!1},u["="]={code:187,shift:!1},u["-"]={code:189,shift:!1},u["]"]={code:221,shift:!1},u["["]={code:219,shift:!1};var p=function(z){P(z,"keydown")},O=function(z){P(z,"keyup")},P=function(z,H){if(a[H][z.keyCode]!==void 0){for(var ee=a[H][z.keyCode],pe=0;pe700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=new Date().valueOf())}},{key:"_stopMovement",value:function(){for(var s in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,s)&&(this.body.emitter.off("initRedraw",this.boundFunctions[s]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}},{key:"_moveUp",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:"_moveDown",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:"_moveLeft",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:"_moveRight",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:"_zoomIn",value:function(){var s=this.body.view.scale,l=this.body.view.scale*(1+this.options.keyboard.speed.zoom),f=this.body.view.translation,g=l/s,a=(1-g)*this.canvas.canvasViewCenter.x+f.x*g,u=(1-g)*this.canvas.canvasViewCenter.y+f.y*g;this.body.view.scale=l,this.body.view.translation={x:a,y:u},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}},{key:"_zoomOut",value:function(){var s=this.body.view.scale,l=this.body.view.scale/(1+this.options.keyboard.speed.zoom),f=this.body.view.translation,g=l/s,a=(1-g)*this.canvas.canvasViewCenter.x+f.x*g,u=(1-g)*this.canvas.canvasViewCenter.y+f.y*g;this.body.view.scale=l,this.body.view.translation={x:a,y:u},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}},{key:"configureKeyboardBindings",value:function(){var s,l,f,g,a,u,p,O,P,z,H,ee,pe,be,Ae,Qe,$e,mt,It,Ct,qe,Fe,Ge,pt,ft=this;this.keycharm!==void 0&&this.keycharm.destroy(),this.options.keyboard.enabled===!0&&(this.options.keyboard.bindToWindow===!0?this.keycharm=z0({container:window,preventDefault:!0}):this.keycharm=z0({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),this.activated===!0&&(Vt(s=this.keycharm).call(s,"up",function(){ft.bindToRedraw("_moveUp")},"keydown"),Vt(l=this.keycharm).call(l,"down",function(){ft.bindToRedraw("_moveDown")},"keydown"),Vt(f=this.keycharm).call(f,"left",function(){ft.bindToRedraw("_moveLeft")},"keydown"),Vt(g=this.keycharm).call(g,"right",function(){ft.bindToRedraw("_moveRight")},"keydown"),Vt(a=this.keycharm).call(a,"=",function(){ft.bindToRedraw("_zoomIn")},"keydown"),Vt(u=this.keycharm).call(u,"num+",function(){ft.bindToRedraw("_zoomIn")},"keydown"),Vt(p=this.keycharm).call(p,"num-",function(){ft.bindToRedraw("_zoomOut")},"keydown"),Vt(O=this.keycharm).call(O,"-",function(){ft.bindToRedraw("_zoomOut")},"keydown"),Vt(P=this.keycharm).call(P,"[",function(){ft.bindToRedraw("_zoomOut")},"keydown"),Vt(z=this.keycharm).call(z,"]",function(){ft.bindToRedraw("_zoomIn")},"keydown"),Vt(H=this.keycharm).call(H,"pageup",function(){ft.bindToRedraw("_zoomIn")},"keydown"),Vt(ee=this.keycharm).call(ee,"pagedown",function(){ft.bindToRedraw("_zoomOut")},"keydown"),Vt(pe=this.keycharm).call(pe,"up",function(){ft.unbindFromRedraw("_moveUp")},"keyup"),Vt(be=this.keycharm).call(be,"down",function(){ft.unbindFromRedraw("_moveDown")},"keyup"),Vt(Ae=this.keycharm).call(Ae,"left",function(){ft.unbindFromRedraw("_moveLeft")},"keyup"),Vt(Qe=this.keycharm).call(Qe,"right",function(){ft.unbindFromRedraw("_moveRight")},"keyup"),Vt($e=this.keycharm).call($e,"=",function(){ft.unbindFromRedraw("_zoomIn")},"keyup"),Vt(mt=this.keycharm).call(mt,"num+",function(){ft.unbindFromRedraw("_zoomIn")},"keyup"),Vt(It=this.keycharm).call(It,"num-",function(){ft.unbindFromRedraw("_zoomOut")},"keyup"),Vt(Ct=this.keycharm).call(Ct,"-",function(){ft.unbindFromRedraw("_zoomOut")},"keyup"),Vt(qe=this.keycharm).call(qe,"[",function(){ft.unbindFromRedraw("_zoomOut")},"keyup"),Vt(Fe=this.keycharm).call(Fe,"]",function(){ft.unbindFromRedraw("_zoomIn")},"keyup"),Vt(Ge=this.keycharm).call(Ge,"pageup",function(){ft.unbindFromRedraw("_zoomIn")},"keyup"),Vt(pt=this.keycharm).call(pt,"pagedown",function(){ft.unbindFromRedraw("_zoomOut")},"keyup")))}}]),m}();function J1(m,s){var l=su!==void 0&&Jh(m)||m["@@iterator"];if(!l){if(zn(m)||(l=function(O,P){var z;if(O){if(typeof O=="string")return If(O,P);var H=ri(z=Object.prototype.toString.call(O)).call(z,8,-1);if(H==="Object"&&O.constructor&&(H=O.constructor.name),H==="Map"||H==="Set")return Ed(O);if(H==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(H))return If(O,P)}}(m))||s&&m&&typeof m.length=="number"){l&&(m=l);var f=0,g=function(){};return{s:g,n:function(){return f>=m.length?{done:!0}:{done:!1,value:m[f++]}},e:function(O){throw O},f:g}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +`),g=f.length;if(l.multi)for(var a=0;a0)for(var p=0;p0)for(var pe=0;pe")||l.parseStartTag("ital","")||l.parseStartTag("mono","")||l.parseEndTag("bold","")||l.parseEndTag("ital","")||l.parseEndTag("mono",""))||f(g)||l.add(g),l.position++}return l.emitBlock(),l.blocks}},{key:"splitMarkdownBlocks",value:function(s){for(var l=this,f=new M1(s),g=!0,a=function(p){return!!/\\/.test(p)&&(f.positionthis.parent.fontOptions.maxWdt}},{key:"getLongestFit",value:function(s){for(var l="",f=0;f1&&arguments[1]!==void 0?arguments[1]:"normal",f=arguments.length>2&&arguments[2]!==void 0&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,l);for(var g=(s=(s=s.replace(/^( +)/g,"$1\r")).replace(/([^\r][^ ]*)( +)/g,"$1\r$2\r")).split("\r");g.length>0;){var a=this.getLongestFit(g);if(a===0){var u=g[0],p=this.getLongestFitWord(u);this.lines.newLine(ri(u).call(u,0,p),l),g[0]=ri(u).call(u,p)}else{var O=a;g[a-1]===" "?a--:g[O]===" "&&O++;var P=ri(g).call(g,0,a).join("");a==g.length&&f?this.lines.append(P,l):this.lines.newLine(P,l),g=ri(g).call(g,O)}}}}]),m}(),Dp=["bold","ital","boldital","mono"],Ko=function(){function m(s,l){var f=arguments.length>2&&arguments[2]!==void 0&&arguments[2];rr(this,m),this.body=s,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(l),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=f}return nr(m,[{key:"setOptions",value:function(s){if(this.elementOptions=s,this.initFontOptions(s.font),T1(s.label)?this.labelDirty=!0:s.label=void 0,s.font!==void 0&&s.font!==null){if(typeof s.font=="string")this.baseSize=this.fontOptions.size;else if(Wo(s.font)==="object"){var l=s.font.size;l!==void 0&&(this.baseSize=l)}}}},{key:"initFontOptions",value:function(s){var l=this;In(Dp,function(f){l.fontOptions[f]={}}),m.parseFontString(this.fontOptions,s)?this.fontOptions.vadjust=0:In(s,function(f,g){f!=null&&Wo(f)!=="object"&&(l.fontOptions[g]=f)})}},{key:"constrain",value:function(s){var l={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:"middle"},f=ol(s,"widthConstraint");if(typeof f=="number")l.maxWdt=Number(f),l.minWdt=Number(f);else if(Wo(f)==="object"){var g=ol(s,["widthConstraint","maximum"]);typeof g=="number"&&(l.maxWdt=Number(g));var a=ol(s,["widthConstraint","minimum"]);typeof a=="number"&&(l.minWdt=Number(a))}var u=ol(s,"heightConstraint");if(typeof u=="number")l.minHgt=Number(u);else if(Wo(u)==="object"){var p=ol(s,["heightConstraint","minimum"]);typeof p=="number"&&(l.minHgt=Number(p));var O=ol(s,["heightConstraint","valign"]);typeof O=="string"&&(O!=="top"&&O!=="bottom"||(l.valign=O))}return l}},{key:"update",value:function(s,l){this.setOptions(s,!0),this.propagateFonts(l),Kr(this.fontOptions,this.constrain(l)),this.fontOptions.chooser=C1("label",l)}},{key:"adjustSizes",value:function(s){var l=s?s.right+s.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=l,this.fontOptions.minWdt-=l);var f=s?s.top+s.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=f)}},{key:"addFontOptionsToPile",value:function(s,l){for(var f=0;f5&&arguments[5]!==void 0?arguments[5]:"middle";if(this.elementOptions.label!==void 0){var p=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&p=this.elementOptions.scaling.label.maxVisible&&(p=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(s,g,a,l,f,u),this._drawBackground(s),this._drawText(s,l,this.size.yLine,u,p))}}},{key:"_drawBackground",value:function(s){if(this.fontOptions.background!==void 0&&this.fontOptions.background!=="none"){s.fillStyle=this.fontOptions.background;var l=this.getSize();s.fillRect(l.left,l.top,l.width,l.height)}}},{key:"_drawText",value:function(s,l,f){var g=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"middle",a=arguments.length>4?arguments[4]:void 0,u=Ei(this._setAlignment(s,l,f,g),2);l=u[0],f=u[1],s.textAlign="left",l-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&(this.fontOptions.valign==="top"&&(f-=(this.size.height-this.size.labelHeight)/2),this.fontOptions.valign==="bottom"&&(f+=(this.size.height-this.size.labelHeight)/2));for(var p=0;p0&&(s.lineWidth=H.strokeWidth,s.strokeStyle=be,s.lineJoin="round"),s.fillStyle=pe,H.strokeWidth>0&&s.strokeText(H.text,l+P,f+H.vadjust),s.fillText(H.text,l+P,f+H.vadjust),P+=H.width}f+=O.height}}}},{key:"_setAlignment",value:function(s,l,f,g){return this.isEdgeLabel&&this.fontOptions.align!=="horizontal"&&this.pointToSelf===!1?(l=0,f=0,this.fontOptions.align==="top"?(s.textBaseline="alphabetic",f-=4):this.fontOptions.align==="bottom"?(s.textBaseline="hanging",f+=4):s.textBaseline="middle"):s.textBaseline=g,[l,f]}},{key:"_getColor",value:function(s,l,f){var g=s||"#000000",a=f||"#ffffff";if(l<=this.elementOptions.scaling.label.drawThreshold){var u=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-l)));g=mi(g,u),a=mi(a,u)}return[g,a]}},{key:"getTextSize",value:function(s){var l=arguments.length>1&&arguments[1]!==void 0&&arguments[1],f=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return this._processLabel(s,l,f),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:"getSize",value:function(){var s=this.size.left,l=this.size.top-1;if(this.isEdgeLabel){var f=.5*-this.size.width;switch(this.fontOptions.align){case"middle":s=f,l=.5*-this.size.height;break;case"top":s=f,l=-(this.size.height+2);break;case"bottom":s=f,l=2}}return{left:s,top:l,width:this.size.width,height:this.size.height}}},{key:"calculateLabelSize",value:function(s,l,f){var g=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0,u=arguments.length>5&&arguments[5]!==void 0?arguments[5]:"middle";this._processLabel(s,l,f),this.size.left=g-.5*this.size.width,this.size.top=a-.5*this.size.height,this.size.yLine=a+.5*(1-this.lineCount)*this.fontOptions.size,u==="hanging"&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:"getFormattingValues",value:function(s,l,f,g){var a=function(O,P,z){return P==="normal"?z==="mod"?"":O[z]:O[P][z]!==void 0?O[P][z]:O[z]},u={color:a(this.fontOptions,g,"color"),size:a(this.fontOptions,g,"size"),face:a(this.fontOptions,g,"face"),mod:a(this.fontOptions,g,"mod"),vadjust:a(this.fontOptions,g,"vadjust"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(l||f)&&(g==="normal"&&this.fontOptions.chooser===!0&&this.elementOptions.labelHighlightBold?u.mod="bold":typeof this.fontOptions.chooser=="function"&&this.fontOptions.chooser(u,this.elementOptions.id,l,f));var p="";return u.mod!==void 0&&u.mod!==""&&(p+=u.mod+" "),p+=u.size+"px "+u.face,s.font=p.replace(/"/g,""),u.font=s.font,u.height=u.size,u}},{key:"differentState",value:function(s,l){return s!==this.selectedState||l!==this.hoverState}},{key:"_processLabelText",value:function(s,l,f,g){return new ly(s,this,l,f).process(g)}},{key:"_processLabel",value:function(s,l,f){if(this.labelDirty!==!1||this.differentState(l,f)){var g=this._processLabelText(s,l,f,this.elementOptions.label);this.fontOptions.minWdt>0&&g.width0&&g.height0&&(this.enableBorderDashes(s,l),s.stroke(),this.disableBorderDashes(s,l)),s.restore()}},{key:"performFill",value:function(s,l){s.save(),s.fillStyle=l.color,this.enableShadow(s,l),l1(s).call(s),this.disableShadow(s,l),s.restore(),this.performStroke(s,l)}},{key:"_addBoundingBoxMargin",value:function(s){this.boundingBox.left-=s,this.boundingBox.top-=s,this.boundingBox.bottom+=s,this.boundingBox.right+=s}},{key:"_updateBoundingBox",value:function(s,l,f,g,a){f!==void 0&&this.resize(f,g,a),this.left=s-this.width/2,this.top=l-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"updateBoundingBox",value:function(s,l,f,g,a){this._updateBoundingBox(s,l,f,g,a)}},{key:"getDimensionsFromLabel",value:function(s,l,f){this.textSize=this.labelModule.getTextSize(s,l,f);var g=this.textSize.width,a=this.textSize.height;return g===0&&(g=14,a=14),{width:g,height:a}}}]),m}();function Np(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Yu=function(m){Hn(l,m);var s=Np(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a))._setMargins(a),u}return nr(l,[{key:"resize",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.needsRefresh(g,a)){var u=this.getDimensionsFromLabel(f,g,a);this.width=u.width+this.margin.right+this.margin.left,this.height=u.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:"draw",value:function(f,g,a,u,p,O){this.resize(f,u,p),this.left=g-this.width/2,this.top=a-this.height/2,this.initContextForDraw(f,O),Om(f,this.left,this.top,this.width,this.height,O.borderRadius),this.performFill(f,O),this.updateBoundingBox(g,a,f,u,p),this.labelModule.draw(f,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,u,p)}},{key:"updateBoundingBox",value:function(f,g,a,u,p){this._updateBoundingBox(f,g,a,u,p);var O=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(O)}},{key:"distanceToBorder",value:function(f,g){f&&this.resize(f);var a=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(g)),Math.abs(this.height/2/Math.sin(g)))+a}}]),l}(ki);function Al(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var C0=function(m){Hn(l,m);var s=Al(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a)).labelOffset=0,u.selected=!1,u}return nr(l,[{key:"setOptions",value:function(f,g,a){this.options=f,g===void 0&&a===void 0||this.setImages(g,a)}},{key:"setImages",value:function(f,g){g&&this.selected?(this.imageObj=g,this.imageObjAlt=f):(this.imageObj=f,this.imageObjAlt=g)}},{key:"switchImages",value:function(f){var g=f&&!this.selected||!f&&this.selected;if(this.selected=f,this.imageObjAlt!==void 0&&g){var a=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=a}}},{key:"_getImagePadding",value:function(){var f={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var g=this.options.imagePadding;Wo(g)=="object"?(f.top=g.top,f.right=g.right,f.bottom=g.bottom,f.left=g.left):(f.top=g,f.right=g,f.bottom=g,f.left=g)}return f}},{key:"_resizeImage",value:function(){var f,g;if(this.options.shapeProperties.useImageSize===!1){var a=1,u=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?a=this.imageObj.width/this.imageObj.height:u=this.imageObj.height/this.imageObj.width),f=2*this.options.size*a,g=2*this.options.size*u}else{var p=this._getImagePadding();f=this.imageObj.width+p.left+p.right,g=this.imageObj.height+p.top+p.bottom}this.width=f,this.height=g,this.radius=.5*this.width}},{key:"_drawRawCircle",value:function(f,g,a,u){this.initContextForDraw(f,u),gb(f,g,a,u.size),this.performFill(f,u)}},{key:"_drawImageAtPosition",value:function(f,g){if(this.imageObj.width!=0){f.globalAlpha=g.opacity!==void 0?g.opacity:1,this.enableShadow(f,g);var a=1;this.options.shapeProperties.interpolation===!0&&(a=this.imageObj.width/this.width/this.body.view.scale);var u=this._getImagePadding(),p=this.left+u.left,O=this.top+u.top,P=this.width-u.left-u.right,z=this.height-u.top-u.bottom;this.imageObj.drawImageAtPosition(f,a,p,O,P,z),this.disableShadow(f,g)}}},{key:"_drawImageLabel",value:function(f,g,a,u,p){var O=0;if(this.height!==void 0){O=.5*this.height;var P=this.labelModule.getTextSize(f,u,p);P.lineCount>=1&&(O+=P.height/2)}var z=a+O;this.options.label&&(this.labelOffset=O),this.labelModule.draw(f,g,z,u,p,"hanging")}}]),l}(ki);function vi(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var z1=function(m){Hn(l,m);var s=vi(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a))._setMargins(a),u}return nr(l,[{key:"resize",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.needsRefresh(g,a)){var u=this.getDimensionsFromLabel(f,g,a),p=Math.max(u.width+this.margin.right+this.margin.left,u.height+this.margin.top+this.margin.bottom);this.options.size=p/2,this.width=p,this.height=p,this.radius=this.width/2}}},{key:"draw",value:function(f,g,a,u,p,O){this.resize(f,u,p),this.left=g-this.width/2,this.top=a-this.height/2,this._drawRawCircle(f,g,a,O),this.updateBoundingBox(g,a),this.labelModule.draw(f,this.left+this.textSize.width/2+this.margin.left,a,u,p)}},{key:"updateBoundingBox",value:function(f,g){this.boundingBox.top=g-this.options.size,this.boundingBox.left=f-this.options.size,this.boundingBox.right=f+this.options.size,this.boundingBox.bottom=g+this.options.size}},{key:"distanceToBorder",value:function(f){return f&&this.resize(f),.5*this.width}}]),l}(C0);function T0(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Ho=function(m){Hn(l,m);var s=T0(l);function l(f,g,a,u,p){var O;return rr(this,l),(O=s.call(this,f,g,a)).setImages(u,p),O}return nr(l,[{key:"resize",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.imageObj.src===void 0||this.imageObj.width===void 0||this.imageObj.height===void 0){var u=2*this.options.size;return this.width=u,this.height=u,void(this.radius=.5*this.width)}this.needsRefresh(g,a)&&this._resizeImage()}},{key:"draw",value:function(f,g,a,u,p,O){this.switchImages(u),this.resize();var P=g,z=a;this.options.shapeProperties.coordinateOrigin==="top-left"?(this.left=g,this.top=a,P+=this.width/2,z+=this.height/2):(this.left=g-this.width/2,this.top=a-this.height/2),this._drawRawCircle(f,P,z,O),f.save(),f.clip(),this._drawImageAtPosition(f,O),f.restore(),this._drawImageLabel(f,P,z,u,p),this.updateBoundingBox(g,a)}},{key:"updateBoundingBox",value:function(f,g){this.options.shapeProperties.coordinateOrigin==="top-left"?(this.boundingBox.top=g,this.boundingBox.left=f,this.boundingBox.right=f+2*this.options.size,this.boundingBox.bottom=g+2*this.options.size):(this.boundingBox.top=g-this.options.size,this.boundingBox.left=f-this.options.size,this.boundingBox.right=f+this.options.size,this.boundingBox.bottom=g+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:"distanceToBorder",value:function(f){return f&&this.resize(f),.5*this.width}}]),l}(C0);function zi(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Va=function(m){Hn(l,m);var s=zi(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"resize",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover,u=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{size:this.options.size};if(this.needsRefresh(g,a)){var p,O;this.labelModule.getTextSize(f,g,a);var P=2*u.size;this.width=(p=this.customSizeWidth)!==null&&p!==void 0?p:P,this.height=(O=this.customSizeHeight)!==null&&O!==void 0?O:P,this.radius=.5*this.width}}},{key:"_drawShape",value:function(f,g,a,u,p,O,P,z){var H,ee=this;return this.resize(f,O,P,z),this.left=u-this.width/2,this.top=p-this.height/2,this.initContextForDraw(f,z),(H=g,Object.prototype.hasOwnProperty.call(A4,H)?A4[H]:function(pe){for(var be=arguments.length,Ae=new Array(be>1?be-1:0),Qe=1;Qe0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),l}(ki);function ja(m,s){var l=ni(m);if(O0){var f=O0(m);s&&(f=ua(f).call(f,function(g){return Sc(m,g).enumerable})),l.push.apply(l,f)}return l}function ea(m){for(var s=1;s"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var M0=function(m){Hn(l,m);var s=A0(l);function l(f,g,a,u){var p;return rr(this,l),(p=s.call(this,f,g,a,u)).ctxRenderer=u,p}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){this.resize(f,u,p,O),this.left=g-this.width/2,this.top=a-this.height/2,f.save();var P=this.ctxRenderer({ctx:f,id:this.options.id,x:g,y:a,state:{selected:u,hover:p},style:ea({},O),label:this.options.label});if(P.drawNode!=null&&P.drawNode(),f.restore(),P.drawExternalLabel){var z=P.drawExternalLabel;P.drawExternalLabel=function(){f.save(),z(),f.restore()}}return P.nodeDimensions&&(this.customSizeWidth=P.nodeDimensions.width,this.customSizeHeight=P.nodeDimensions.height),P}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function Ml(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var U2=function(m){Hn(l,m);var s=Ml(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a))._setMargins(a),u}return nr(l,[{key:"resize",value:function(f,g,a){if(this.needsRefresh(g,a)){var u=this.getDimensionsFromLabel(f,g,a).width+this.margin.right+this.margin.left;this.width=u,this.height=u,this.radius=this.width/2}}},{key:"draw",value:function(f,g,a,u,p,O){this.resize(f,u,p),this.left=g-this.width/2,this.top=a-this.height/2,this.initContextForDraw(f,O),bb(f,g-this.width/2,a-this.height/2,this.width,this.height),this.performFill(f,O),this.updateBoundingBox(g,a,f,u,p),this.labelModule.draw(f,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,u,p)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(ki);function Kx(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Yx=function(m){Hn(l,m);var s=Kx(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"diamond",4,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function N1(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Qx=function(m){Hn(l,m);var s=N1(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"circle",2,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f){return f&&this.resize(f),this.options.size}}]),l}(Va);function PO(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var R0=function(m){Hn(l,m);var s=PO(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"resize",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.needsRefresh(g,a)){var u=this.getDimensionsFromLabel(f,g,a);this.height=2*u.height,this.width=u.width+u.height,this.radius=.5*this.width}}},{key:"draw",value:function(f,g,a,u,p,O){this.resize(f,u,p),this.left=g-.5*this.width,this.top=a-.5*this.height,this.initContextForDraw(f,O),yb(f,this.left,this.top,this.width,this.height),this.performFill(f,O),this.updateBoundingBox(g,a,f,u,p),this.labelModule.draw(f,g,a,u,p)}},{key:"distanceToBorder",value:function(f,g){f&&this.resize(f);var a=.5*this.width,u=.5*this.height,p=Math.sin(g)*a,O=Math.cos(g)*u;return a*u/Math.sqrt(p*p+O*O)}}]),l}(ki);function jO(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Zx=function(m){Hn(l,m);var s=jO(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a))._setMargins(a),u}return nr(l,[{key:"resize",value:function(f,g,a){this.needsRefresh(g,a)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(f,g,a,u,p,O){var P=this;return this.resize(f,u,p),this.options.icon.size=this.options.icon.size||50,this.left=g-this.width/2,this.top=a-this.height/2,this._icon(f,g,a,u,p,O),{drawExternalLabel:function(){P.options.label!==void 0&&P.labelModule.draw(f,P.left+P.iconSize.width/2+P.margin.left,a+P.height/2+5,u),P.updateBoundingBox(g,a)}}}},{key:"updateBoundingBox",value:function(f,g){this.boundingBox.top=g-.5*this.options.icon.size,this.boundingBox.left=f-.5*this.options.icon.size,this.boundingBox.right=f+.5*this.options.icon.size,this.boundingBox.bottom=g+.5*this.options.icon.size,this.options.label!==void 0&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5))}},{key:"_icon",value:function(f,g,a,u,p,O){var P=Number(this.options.icon.size);this.options.icon.code!==void 0?(f.font=[this.options.icon.weight!=null?this.options.icon.weight:u?"bold":"",(this.options.icon.weight!=null&&u?5:0)+P+"px",this.options.icon.face].join(" "),f.fillStyle=this.options.icon.color||"black",f.textAlign="center",f.textBaseline="middle",this.enableShadow(f,O),f.fillText(this.options.icon.code,g,a),this.disableShadow(f,O)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(ki);function G2(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Qd=function(m){Hn(l,m);var s=G2(l);function l(f,g,a,u,p){var O;return rr(this,l),(O=s.call(this,f,g,a)).setImages(u,p),O}return nr(l,[{key:"resize",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selected,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.hover;if(this.imageObj.src===void 0||this.imageObj.width===void 0||this.imageObj.height===void 0){var u=2*this.options.size;return this.width=u,void(this.height=u)}this.needsRefresh(g,a)&&this._resizeImage()}},{key:"draw",value:function(f,g,a,u,p,O){f.save(),this.switchImages(u),this.resize();var P=g,z=a;if(this.options.shapeProperties.coordinateOrigin==="top-left"?(this.left=g,this.top=a,P+=this.width/2,z+=this.height/2):(this.left=g-this.width/2,this.top=a-this.height/2),this.options.shapeProperties.useBorderWithImage===!0){var H=this.options.borderWidth,ee=this.options.borderWidthSelected||2*this.options.borderWidth,pe=(u?ee:H)/this.body.view.scale;f.lineWidth=Math.min(this.width,pe),f.beginPath();var be=u?this.options.color.highlight.border:p?this.options.color.hover.border:this.options.color.border,Ae=u?this.options.color.highlight.background:p?this.options.color.hover.background:this.options.color.background;O.opacity!==void 0&&(be=mi(be,O.opacity),Ae=mi(Ae,O.opacity)),f.strokeStyle=be,f.fillStyle=Ae,f.rect(this.left-.5*f.lineWidth,this.top-.5*f.lineWidth,this.width+f.lineWidth,this.height+f.lineWidth),l1(f).call(f),this.performStroke(f,O),f.closePath()}this._drawImageAtPosition(f,O),this._drawImageLabel(f,P,z,u,p),this.updateBoundingBox(g,a),f.restore()}},{key:"updateBoundingBox",value:function(f,g){this.resize(),this.options.shapeProperties.coordinateOrigin==="top-left"?(this.left=f,this.top=g):(this.left=f-this.width/2,this.top=g-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,this.options.label!==void 0&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(C0);function vS(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var J2=function(m){Hn(l,m);var s=vS(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"square",2,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function II(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var X2=function(m){Hn(l,m);var s=II(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"hexagon",4,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function e_(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var t_=function(m){Hn(l,m);var s=e_(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"star",4,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function gS(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var yS=function(m){Hn(l,m);var s=gS(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a))._setMargins(a),u}return nr(l,[{key:"resize",value:function(f,g,a){this.needsRefresh(g,a)&&(this.textSize=this.labelModule.getTextSize(f,g,a),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(f,g,a,u,p,O){this.resize(f,u,p),this.left=g-this.width/2,this.top=a-this.height/2,this.enableShadow(f,O),this.labelModule.draw(f,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,u,p),this.disableShadow(f,O),this.updateBoundingBox(g,a,f,u,p)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(ki);function CO(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var kI=function(m){Hn(l,m);var s=CO(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"triangle",3,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function Zd(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var K2=function(m){Hn(l,m);var s=Zd(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"draw",value:function(f,g,a,u,p,O){return this._drawShape(f,"triangleDown",3,g,a,u,p,O)}},{key:"distanceToBorder",value:function(f,g){return this._distanceToBorder(f,g)}}]),l}(Va);function TO(m,s){var l=ni(m);if(O0){var f=O0(m);s&&(f=ua(f).call(f,function(g){return Sc(m,g).enumerable})),l.push.apply(l,f)}return l}function AO(m){for(var s=1;ss.left&&this.shape.tops.top}},{key:"isBoundingBoxOverlappingWith",value:function(s){return this.shape.boundingBox.lefts.left&&this.shape.boundingBox.tops.top}}],[{key:"checkOpacity",value:function(s){return 0<=s&&s<=1}},{key:"checkCoordinateOrigin",value:function(s){return s===void 0||s==="center"||s==="top-left"}},{key:"updateGroupOptions",value:function(s,l,f){var g;if(f!==void 0){var a=s.group;if(l!==void 0&&l.group!==void 0&&a!==l.group)throw new Error("updateGroupOptions: group values in options don't match.");if(typeof a=="number"||typeof a=="string"&&a!=""){var u=f.get(a);u.opacity!==void 0&&l.opacity===void 0&&(m.checkOpacity(u.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+u.opacity),u.opacity=void 0));var p=ua(g=j1(l)).call(g,function(O){return l[O]!=null});p.push("font"),_o(p,s,u),s.color=nl(s.color)}}}},{key:"parseOptions",value:function(s,l){var f=arguments.length>2&&arguments[2]!==void 0&&arguments[2],g=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},a=arguments.length>4?arguments[4]:void 0;if(_o(["color","fixed","shadow"],s,l,f),m.checkMass(l),s.opacity!==void 0&&(m.checkOpacity(s.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+s.opacity),s.opacity=void 0)),l.opacity!==void 0&&(m.checkOpacity(l.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+l.opacity),l.opacity=void 0)),l.shapeProperties&&!m.checkCoordinateOrigin(l.shapeProperties.coordinateOrigin)&&console.error("Invalid option for node coordinateOrigin, found: "+l.shapeProperties.coordinateOrigin),ks(s,l,"shadow",g),l.color!==void 0&&l.color!==null){var u=nl(l.color);nn(s.color,u)}else f===!0&&l.color===null&&(s.color=yf(g.color));l.fixed!==void 0&&l.fixed!==null&&(typeof l.fixed=="boolean"?(s.fixed.x=l.fixed,s.fixed.y=l.fixed):(l.fixed.x!==void 0&&typeof l.fixed.x=="boolean"&&(s.fixed.x=l.fixed.x),l.fixed.y!==void 0&&typeof l.fixed.y=="boolean"&&(s.fixed.y=l.fixed.y))),f===!0&&l.font===null&&(s.font=yf(g.font)),m.updateGroupOptions(s,l,a),l.scaling!==void 0&&ks(s.scaling,l.scaling,"label",g.scaling)}},{key:"checkMass",value:function(s,l){if(s.mass!==void 0&&s.mass<=0){var f="";l!==void 0&&(f=" in node id: "+l),console.error("%cNegative or zero mass disallowed"+f+", setting mass to 1.",h0),s.mass=1}}}]),m}();function hy(m,s){var l=su!==void 0&&Jh(m)||m["@@iterator"];if(!l){if(zn(m)||(l=function(O,P){var z;if(O){if(typeof O=="string")return MO(O,P);var H=ri(z=Object.prototype.toString.call(O)).call(z,8,-1);if(H==="Object"&&O.constructor&&(H=O.constructor.name),H==="Map"||H==="Set")return Ed(O);if(H==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(H))return MO(O,P)}}(m))||s&&m&&typeof m.length=="number"){l&&(m=l);var f=0,g=function(){};return{s:g,n:function(){return f>=m.length?{done:!0}:{done:!1,value:m[f++]}},e:function(O){throw O},f:g}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,u=!0,p=!1;return{s:function(){l=l.call(m)},n:function(){var O=l.next();return u=O.done,O},e:function(O){p=!0,a=O},f:function(){try{u||l.return==null||l.return()}finally{if(p)throw a}}}}function MO(m,s){(s==null||s>m.length)&&(s=m.length);for(var l=0,f=new Array(s);l1?console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+s.opacity):this.options.opacity=s.opacity),s.shape!==void 0)for(var l in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,l)&&this.body.nodes[l].updateShape();if(s.font!==void 0||s.widthConstraint!==void 0||s.heightConstraint!==void 0)for(var f=0,g=ni(this.body.nodes);f1&&arguments[1]!==void 0&&arguments[1],f=this.body.data.nodes;if(t.isDataViewLike("id",s))this.body.data.nodes=s;else if(zn(s))this.body.data.nodes=new t.DataSet,this.body.data.nodes.add(s);else{if(s)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new t.DataSet}if(f&&In(this.nodesListeners,function(u,p){f.off(p,u)}),this.body.nodes={},this.body.data.nodes){var g=this;In(this.nodesListeners,function(u,p){g.body.data.nodes.on(p,u)});var a=this.body.data.nodes.getIds();this.add(a,!0)}l===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(s){for(var l,f=arguments.length>1&&arguments[1]!==void 0&&arguments[1],g=[],a=0;a1&&arguments[1]!==void 0?arguments[1]:To)(s,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:"refresh",value:function(){var s=this,l=arguments.length>0&&arguments[0]!==void 0&&arguments[0];In(this.body.nodes,function(f,g){var a=s.body.data.nodes.get(g);a!==void 0&&(l===!0&&f.setOptions({x:null,y:null}),f.setOptions({fixed:!1}),f.setOptions(a))})}},{key:"getPositions",value:function(s){var l={};if(s!==void 0){if(zn(s)===!0){for(var f=0;f0?(f=l/p)*f:l;return p===1/0?1/0:p*Ic(g)}});var Qu=r(mr.Math.hypot);function Q2(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Pi=function(){function m(){rr(this,m)}return nr(m,null,[{key:"transform",value:function(s,l){zn(s)||(s=[s]);for(var f=l.point.x,g=l.point.y,a=l.angle,u=l.length,p=0;p4&&arguments[4]!==void 0?arguments[4]:this.getViaNode();s.strokeStyle=this.getColor(s,l),s.lineWidth=l.width,l.dashes!==!1?this._drawDashedLine(s,l,a):this._drawLine(s,l,a)}},{key:"_drawLine",value:function(s,l,f,g,a){if(this.from!=this.to)this._line(s,l,f,g,a);else{var u=Ei(this._getCircleData(s),3),p=u[0],O=u[1],P=u[2];this._circle(s,l,p,O,P)}}},{key:"_drawDashedLine",value:function(s,l,f,g,a){s.lineCap="round";var u=zn(l.dashes)?l.dashes:[5,5];if(s.setLineDash!==void 0){if(s.save(),s.setLineDash(u),s.lineDashOffset=0,this.from!=this.to)this._line(s,l,f);else{var p=Ei(this._getCircleData(s),3),O=p[0],P=p[1],z=p[2];this._circle(s,l,O,P,z)}s.setLineDash([0]),s.lineDashOffset=0,s.restore()}else{if(this.from!=this.to)Fo(s,this.from.x,this.from.y,this.to.x,this.to.y,u);else{var H=Ei(this._getCircleData(s),3),ee=H[0],pe=H[1],be=H[2];this._circle(s,l,ee,pe,be)}this.enableShadow(s,l),s.stroke(),this.disableShadow(s,l)}}},{key:"findBorderPosition",value:function(s,l,f){return this.from!=this.to?this._findBorderPosition(s,l,f):this._findBorderPositionCircle(s,l,f)}},{key:"findBorderPositions",value:function(s){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,s),to:this._findBorderPosition(this.to,s)};var l,f=Ei(ri(l=this._getCircleData(s)).call(l,0,2),2),g=f[0],a=f[1];return{from:this._findBorderPositionCircle(this.from,s,{x:g,y:a,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,s,{x:g,y:a,low:.6,high:.8,direction:1})}}},{key:"_getCircleData",value:function(s){var l=this.options.selfReference.size;s!==void 0&&this.from.shape.width===void 0&&this.from.shape.resize(s);var f=wO(s,this.options.selfReference.angle,l,this.from);return[f.x,f.y,l]}},{key:"_pointOnCircle",value:function(s,l,f,g){var a=2*g*Math.PI;return{x:s+f*Math.cos(a),y:l-f*Math.sin(a)}}},{key:"_findBorderPositionCircle",value:function(s,l,f){var g,a=f.x,u=f.y,p=f.low,O=f.high,P=f.direction,z=this.options.selfReference.size,H=.5*(p+O),ee=0;this.options.arrowStrikethrough===!0&&(P===-1?ee=this.options.endPointOffset.from:P===1&&(ee=this.options.endPointOffset.to));var pe=0;do{H=.5*(p+O),g=this._pointOnCircle(a,u,z,H);var be=Math.atan2(s.y-g.y,s.x-g.x),Ae=s.distanceToBorder(l,be)+ee-Math.sqrt(Math.pow(g.x-s.x,2)+Math.pow(g.y-s.y,2));if(Math.abs(Ae)<.05)break;Ae>0?P>0?p=H:O=H:P>0?O=H:p=H,++pe}while(p<=O&&pe<10);return H1(H1({},g),{},{t:H})}},{key:"getLineWidth",value:function(s,l){return s===!0?Math.max(this.selectionWidth,.3/this._body.view.scale):l===!0?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:"getColor",value:function(s,l){if(l.inheritsColor!==!1){if(l.inheritsColor==="both"&&this.from.id!==this.to.id){var f=s.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),g=this.from.options.color.highlight.border,a=this.to.options.color.highlight.border;return this.from.selected===!1&&this.to.selected===!1?(g=mi(this.from.options.color.border,l.opacity),a=mi(this.to.options.color.border,l.opacity)):this.from.selected===!0&&this.to.selected===!1?a=this.to.options.color.border:this.from.selected===!1&&this.to.selected===!0&&(g=this.from.options.color.border),f.addColorStop(0,g),f.addColorStop(1,a),f}return l.inheritsColor==="to"?mi(this.to.options.color.border,l.opacity):mi(this.from.options.color.border,l.opacity)}return mi(l.color,l.opacity)}},{key:"_circle",value:function(s,l,f,g,a){this.enableShadow(s,l);var u=0,p=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var O=this.options.selfReference.angle,P=this.options.selfReference.angle+Math.PI,z=this._findBorderPositionCircle(this.from,s,{x:f,y:g,low:O,high:P,direction:-1}),H=this._findBorderPositionCircle(this.from,s,{x:f,y:g,low:O,high:P,direction:1});u=Math.atan2(z.y-g,z.x-f),p=Math.atan2(H.y-g,H.x-f)}s.beginPath(),s.arc(f,g,a,u,p,!1),s.stroke(),this.disableShadow(s,l)}},{key:"getDistanceToEdge",value:function(s,l,f,g,a,u){if(this.from!=this.to)return this._getDistanceToEdge(s,l,f,g,a,u);var p=Ei(this._getCircleData(void 0),3),O=p[0],P=p[1],z=p[2],H=O-a,ee=P-u;return Math.abs(Math.sqrt(H*H+ee*ee)-z)}},{key:"_getDistanceToLine",value:function(s,l,f,g,a,u){var p=f-s,O=g-l,P=((a-s)*p+(u-l)*O)/(p*p+O*O);P>1?P=1:P<0&&(P=0);var z=s+P*p-a,H=l+P*O-u;return Math.sqrt(z*z+H*H)}},{key:"getArrowData",value:function(s,l,f,g,a,u){var p,O,P,z,H,ee,pe,be=u.width;l==="from"?(P=this.from,z=this.to,H=u.fromArrowScale<0,ee=Math.abs(u.fromArrowScale),pe=u.fromArrowType):l==="to"?(P=this.to,z=this.from,H=u.toArrowScale<0,ee=Math.abs(u.toArrowScale),pe=u.toArrowType):(P=this.to,z=this.from,H=u.middleArrowScale<0,ee=Math.abs(u.middleArrowScale),pe=u.middleArrowType);var Ae=15*ee+3*be;if(P!=z){var Qe=Ae/Qu(P.x-z.x,P.y-z.y);if(l!=="middle")if(this.options.smooth.enabled===!0){var $e=this._findBorderPosition(P,s,{via:f}),mt=this.getPoint($e.t+Qe*(l==="from"?1:-1),f);p=Math.atan2($e.y-mt.y,$e.x-mt.x),O=$e}else p=Math.atan2(P.y-z.y,P.x-z.x),O=this._findBorderPosition(P,s);else{var It=(H?-Qe:Qe)/2,Ct=this.getPoint(.5+It,f),qe=this.getPoint(.5-It,f);p=Math.atan2(Ct.y-qe.y,Ct.x-qe.x),O=this.getPoint(.5,f)}}else{var Fe=Ei(this._getCircleData(s),3),Ge=Fe[0],pt=Fe[1],ft=Fe[2];if(l==="from"){var yr=this.options.selfReference.angle,$t=this.options.selfReference.angle+Math.PI,wr=this._findBorderPositionCircle(this.from,s,{x:Ge,y:pt,low:yr,high:$t,direction:-1});p=-2*wr.t*Math.PI+1.5*Math.PI+.1*Math.PI,O=wr}else if(l==="to"){var Fr=this.options.selfReference.angle,zr=this.options.selfReference.angle+Math.PI,Ns=this._findBorderPositionCircle(this.from,s,{x:Ge,y:pt,low:Fr,high:zr,direction:1});p=-2*Ns.t*Math.PI+1.5*Math.PI-1.1*Math.PI,O=Ns}else{var Ls=this.options.selfReference.angle/(2*Math.PI);O=this._pointOnCircle(Ge,pt,ft,Ls),p=-2*Ls*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:O,core:{x:O.x-.9*Ae*Math.cos(p),y:O.y-.9*Ae*Math.sin(p)},angle:p,length:Ae,type:pe}}},{key:"drawArrowHead",value:function(s,l,f,g,a){s.strokeStyle=this.getColor(s,l),s.fillStyle=s.strokeStyle,s.lineWidth=l.width,r3.draw(s,a)&&(this.enableShadow(s,l),l1(s).call(s),this.disableShadow(s,l))}},{key:"enableShadow",value:function(s,l){l.shadow===!0&&(s.shadowColor=l.shadowColor,s.shadowBlur=l.shadowSize,s.shadowOffsetX=l.shadowX,s.shadowOffsetY=l.shadowY)}},{key:"disableShadow",value:function(s,l){l.shadow===!0&&(s.shadowColor="rgba(0,0,0,0)",s.shadowBlur=0,s.shadowOffsetX=0,s.shadowOffsetY=0)}},{key:"drawBackground",value:function(s,l){if(l.background!==!1){var f={strokeStyle:s.strokeStyle,lineWidth:s.lineWidth,dashes:s.dashes};s.strokeStyle=l.backgroundColor,s.lineWidth=l.backgroundSize,this.setStrokeDashed(s,l.backgroundDashes),s.stroke(),s.strokeStyle=f.strokeStyle,s.lineWidth=f.lineWidth,s.dashes=f.dashes,this.setStrokeDashed(s,l.dashes)}}},{key:"setStrokeDashed",value:function(s,l){if(l!==!1)if(s.setLineDash!==void 0){var f=zn(l)?l:[5,5];s.setLineDash(f)}else console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.");else s.setLineDash!==void 0?s.setLineDash([]):console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.")}}]),m}();function Sf(m,s){var l=ni(m);if(O0){var f=O0(m);s&&(f=ua(f).call(f,function(g){return Sc(m,g).enumerable})),l.push.apply(l,f)}return l}function zO(m){for(var s=1;s"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Rl=function(m){Hn(l,m);var s=n3(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"_findBorderPositionBezier",value:function(f,g){var a,u,p=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this._getViaCoordinates(),O=!1,P=1,z=0,H=this.to,ee=this.options.endPointOffset?this.options.endPointOffset.to:0;f.id===this.from.id&&(H=this.from,O=!0,ee=this.options.endPointOffset?this.options.endPointOffset.from:0),this.options.arrowStrikethrough===!1&&(ee=0);var pe=0;do{u=.5*(z+P),a=this.getPoint(u,p);var be=Math.atan2(H.y-a.y,H.x-a.x),Ae=H.distanceToBorder(g,be)+ee-Math.sqrt(Math.pow(a.x-H.x,2)+Math.pow(a.y-H.y,2));if(Math.abs(Ae)<.2)break;Ae<0?O===!1?z=u:P=u:O===!1?P=u:z=u,++pe}while(z<=P&&pe<10);return zO(zO({},a),{},{t:u})}},{key:"_getDistanceToBezierEdge",value:function(f,g,a,u,p,O,P){var z,H,ee,pe,be,Ae=1e9,Qe=f,$e=g;for(H=1;H<10;H++)ee=.1*H,pe=Math.pow(1-ee,2)*f+2*ee*(1-ee)*P.x+Math.pow(ee,2)*a,be=Math.pow(1-ee,2)*g+2*ee*(1-ee)*P.y+Math.pow(ee,2)*u,H>0&&(Ae=(z=this._getDistanceToLine(Qe,$e,pe,be,p,O))"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var vy=function(m){Hn(l,m);var s=my(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a)).via=u.via,u._boundFunction=function(){u.positionBezierNode()},u._body.emitter.on("_repositionBezierNodes",u._boundFunction),u}return nr(l,[{key:"setOptions",value:function(f){B1(Er(l.prototype),"setOptions",this).call(this,f);var g=!1;this.options.physics!==f.physics&&(g=!0),this.options=f,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),g===!0&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:"connect",value:function(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.from===void 0||this.to===void 0||this.options.physics===!1||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:"cleanup",value:function(){return this._body.emitter.off("_repositionBezierNodes",this._boundFunction),this.via!==void 0&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}},{key:"setupSupportNode",value:function(){if(this.via===void 0){var f="edgeId:"+this.id,g=this._body.functions.createNode({id:f,shape:"circle",physics:!0,hidden:!0});this._body.nodes[f]=g,this.via=g,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:"positionBezierNode",value:function(){this.via!==void 0&&this.from!==void 0&&this.to!==void 0?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):this.via!==void 0&&(this.via.x=0,this.via.y=0)}},{key:"_line",value:function(f,g,a){this._bezierCurve(f,g,a)}},{key:"_getViaCoordinates",value:function(){return this.via}},{key:"getViaNode",value:function(){return this.via}},{key:"getPoint",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.via;if(this.from===this.to){var a=Ei(this._getCircleData(),3),u=a[0],p=a[1],O=a[2],P=2*Math.PI*(1-f);return{x:u+O*Math.sin(P),y:p+O-O*(1-Math.cos(P))}}return{x:Math.pow(1-f,2)*this.fromPoint.x+2*f*(1-f)*g.x+Math.pow(f,2)*this.toPoint.x,y:Math.pow(1-f,2)*this.fromPoint.y+2*f*(1-f)*g.y+Math.pow(f,2)*this.toPoint.y}}},{key:"_findBorderPosition",value:function(f,g){return this._findBorderPositionBezier(f,g,this.via)}},{key:"_getDistanceToEdge",value:function(f,g,a,u,p,O){return this._getDistanceToBezierEdge(f,g,a,u,p,O,this.via)}}]),l}(Rl);function $1(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var o3=function(m){Hn(l,m);var s=$1(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"_line",value:function(f,g,a){this._bezierCurve(f,g,a)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_getViaCoordinates",value:function(){var f,g,a=this.options.smooth.roundness,u=this.options.smooth.type,p=Math.abs(this.from.x-this.to.x),O=Math.abs(this.from.y-this.to.y);if(u==="discrete"||u==="diagonalCross"){var P,z;P=z=p<=O?a*O:a*p,this.from.x>this.to.x&&(P=-P),this.from.y>=this.to.y&&(z=-z);var H=this.from.x+P,ee=this.from.y+z;return u==="discrete"&&(p<=O?H=pthis.to.x&&(f=-f),this.from.y>=this.to.y&&(g=-g);var Ge=this.from.x+f,pt=this.from.y+g;return p<=O?Ge=this.from.x<=this.to.x?this.to.xGe?this.to.x:Ge:pt=this.from.y>=this.to.y?this.to.y>pt?this.to.y:pt:this.to.y2&&arguments[2]!==void 0?arguments[2]:{};return this._findBorderPositionBezier(f,g,a.via)}},{key:"_getDistanceToEdge",value:function(f,g,a,u,p,O){var P=arguments.length>6&&arguments[6]!==void 0?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(f,g,a,u,p,O,P)}},{key:"getPoint",value:function(f){var g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this._getViaCoordinates(),a=f;return{x:Math.pow(1-a,2)*this.fromPoint.x+2*a*(1-a)*g.x+Math.pow(a,2)*this.toPoint.x,y:Math.pow(1-a,2)*this.fromPoint.y+2*a*(1-a)*g.y+Math.pow(a,2)*this.toPoint.y}}}]),l}(Rl);function V1(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var l_=function(m){Hn(l,m);var s=V1(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"_getDistanceToBezierEdge2",value:function(f,g,a,u,p,O,P,z){for(var H=1e9,ee=f,pe=g,be=[0,0,0,0],Ae=1;Ae<10;Ae++){var Qe=.1*Ae;be[0]=Math.pow(1-Qe,3),be[1]=3*Qe*Math.pow(1-Qe,2),be[2]=3*Math.pow(Qe,2)*(1-Qe),be[3]=Math.pow(Qe,3);var $e=be[0]*f+be[1]*P.x+be[2]*z.x+be[3]*a,mt=be[0]*g+be[1]*P.y+be[2]*z.y+be[3]*u;if(Ae>0){var It=this._getDistanceToLine(ee,pe,$e,mt,p,O);H=It"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Ni=function(m){Hn(l,m);var s=NO(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"_line",value:function(f,g,a){var u=a[0],p=a[1];this._bezierCurve(f,g,u,p)}},{key:"_getViaCoordinates",value:function(){var f,g,a,u,p=this.from.x-this.to.x,O=this.from.y-this.to.y,P=this.options.smooth.roundness;return(Math.abs(p)>Math.abs(O)||this.options.smooth.forceDirection===!0||this.options.smooth.forceDirection==="horizontal")&&this.options.smooth.forceDirection!=="vertical"?(g=this.from.y,u=this.to.y,f=this.from.x-P*p,a=this.to.x+P*p):(g=this.from.y-P*O,u=this.to.y+P*O,f=this.from.x,a=this.to.x),[{x:f,y:g},{x:a,y:u}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(f,g){return this._findBorderPositionBezier(f,g)}},{key:"_getDistanceToEdge",value:function(f,g,a,u,p,O){var P=Ei(arguments.length>6&&arguments[6]!==void 0?arguments[6]:this._getViaCoordinates(),2),z=P[0],H=P[1];return this._getDistanceToBezierEdge2(f,g,a,u,p,O,z,H)}},{key:"getPoint",value:function(f){var g=Ei(arguments.length>1&&arguments[1]!==void 0?arguments[1]:this._getViaCoordinates(),2),a=g[0],u=g[1],p=f,O=[Math.pow(1-p,3),3*p*Math.pow(1-p,2),3*Math.pow(p,2)*(1-p),Math.pow(p,3)];return{x:O[0]*this.fromPoint.x+O[1]*a.x+O[2]*u.x+O[3]*this.toPoint.x,y:O[0]*this.fromPoint.y+O[1]*a.y+O[2]*u.y+O[3]*this.toPoint.y}}}]),l}(l_);function i3(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var Ef=function(m){Hn(l,m);var s=i3(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"_line",value:function(f,g){f.beginPath(),f.moveTo(this.fromPoint.x,this.fromPoint.y),f.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(f,g),f.stroke(),this.disableShadow(f,g)}},{key:"getViaNode",value:function(){}},{key:"getPoint",value:function(f){return{x:(1-f)*this.fromPoint.x+f*this.toPoint.x,y:(1-f)*this.fromPoint.y+f*this.toPoint.y}}},{key:"_findBorderPosition",value:function(f,g){var a=this.to,u=this.from;f.id===this.from.id&&(a=this.from,u=this.to);var p=Math.atan2(a.y-u.y,a.x-u.x),O=a.x-u.x,P=a.y-u.y,z=Math.sqrt(O*O+P*P),H=(z-f.distanceToBorder(g,p))/z;return{x:(1-H)*u.x+H*a.x,y:(1-H)*u.y+H*a.y,t:0}}},{key:"_getDistanceToEdge",value:function(f,g,a,u,p,O){return this._getDistanceToLine(f,g,a,u,p,O)}}]),l}(s_),ec=function(){function m(s,l,f,g,a){if(rr(this,m),l===void 0)throw new Error("No body provided");this.options=yf(g),this.globalOptions=g,this.defaultOptions=a,this.body=l,this.imagelist=f,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new Ko(this.body,this.options,!0),this.setOptions(s)}return nr(m,[{key:"setOptions",value:function(s){if(s){var l=s.physics!==void 0&&this.options.physics!==s.physics||s.hidden!==void 0&&(this.options.hidden||!1)!==(s.hidden||!1)||s.from!==void 0&&this.options.from!==s.from||s.to!==void 0&&this.options.to!==s.to;m.parseOptions(this.options,s,!0,this.globalOptions),s.id!==void 0&&(this.id=s.id),s.from!==void 0&&(this.fromId=s.from),s.to!==void 0&&(this.toId=s.to),s.title!==void 0&&(this.title=s.title),s.value!==void 0&&(s.value=Ku(s.value));var f=[s,this.options,this.defaultOptions];return this.chooser=C1("edge",f),this.updateLabelModule(s),l=this.updateEdgeType()||l,this._setInteractionWidths(),this.connect(),l}}},{key:"getFormattingValues",value:function(){var s=this.options.arrows.to===!0||this.options.arrows.to.enabled===!0,l=this.options.arrows.from===!0||this.options.arrows.from.enabled===!0,f=this.options.arrows.middle===!0||this.options.arrows.middle.enabled===!0,g=this.options.color.inherit,a={toArrow:s,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:f,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:l,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:g?void 0:this.options.color.color,inheritsColor:g,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(this.chooser===!0){if(this.selected){var u=this.options.selectionWidth;typeof u=="function"?a.width=u(a.width):typeof u=="number"&&(a.width+=u),a.width=Math.max(a.width,.3/this.body.view.scale),a.color=this.options.color.highlight,a.shadow=this.options.shadow.enabled}else if(this.hover){var p=this.options.hoverWidth;typeof p=="function"?a.width=p(a.width):typeof p=="number"&&(a.width+=p),a.width=Math.max(a.width,.3/this.body.view.scale),a.color=this.options.color.hover,a.shadow=this.options.shadow.enabled}}else typeof this.chooser=="function"&&(this.chooser(a,this.options.id,this.selected,this.hover),a.color!==void 0&&(a.inheritsColor=!1),a.shadow===!1&&(a.shadowColor===this.options.shadow.color&&a.shadowSize===this.options.shadow.size&&a.shadowX===this.options.shadow.x&&a.shadowY===this.options.shadow.y||(a.shadow=!0)));else a.shadow=this.options.shadow.enabled,a.width=Math.max(a.width,.3/this.body.view.scale);return a}},{key:"updateLabelModule",value:function(s){var l=[s,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,l),this.labelModule.baseSize!==void 0&&(this.baseFontSize=this.labelModule.baseSize)}},{key:"updateEdgeType",value:function(){var s=this.options.smooth,l=!1,f=!0;return this.edgeType!==void 0&&((this.edgeType instanceof vy&&s.enabled===!0&&s.type==="dynamic"||this.edgeType instanceof Ni&&s.enabled===!0&&s.type==="cubicBezier"||this.edgeType instanceof o3&&s.enabled===!0&&s.type!=="dynamic"&&s.type!=="cubicBezier"||this.edgeType instanceof Ef&&s.type.enabled===!1)&&(f=!1),f===!0&&(l=this.cleanup())),f===!0?s.enabled===!0?s.type==="dynamic"?(l=!0,this.edgeType=new vy(this.options,this.body,this.labelModule)):s.type==="cubicBezier"?this.edgeType=new Ni(this.options,this.body,this.labelModule):this.edgeType=new o3(this.options,this.body,this.labelModule):this.edgeType=new Ef(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),l}},{key:"connect",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=this.from!==void 0&&this.to!==void 0,this.connected===!0?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:"disconnect",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:"getTitle",value:function(){return this.title}},{key:"isSelected",value:function(){return this.selected}},{key:"getValue",value:function(){return this.options.value}},{key:"setValueRange",value:function(s,l,f){if(this.options.value!==void 0){var g=this.options.scaling.customScalingFunction(s,l,f,this.options.value),a=this.options.scaling.max-this.options.scaling.min;if(this.options.scaling.label.enabled===!0){var u=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+g*u}this.options.width=this.options.scaling.min+g*a}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:"_setInteractionWidths",value:function(){typeof this.options.hoverWidth=="function"?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,typeof this.options.selectionWidth=="function"?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:"draw",value:function(s){var l=this.getFormattingValues();if(!l.hidden){var f=this.edgeType.getViaNode();this.edgeType.drawLine(s,l,this.selected,this.hover,f),this.drawLabel(s,f)}}},{key:"drawArrows",value:function(s){var l=this.getFormattingValues();if(!l.hidden){var f=this.edgeType.getViaNode(),g={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,l.fromArrow&&(g.from=this.edgeType.getArrowData(s,"from",f,this.selected,this.hover,l),l.arrowStrikethrough===!1&&(this.edgeType.fromPoint=g.from.core),l.fromArrowSrc&&(g.from.image=this.imagelist.load(l.fromArrowSrc)),l.fromArrowImageWidth&&(g.from.imageWidth=l.fromArrowImageWidth),l.fromArrowImageHeight&&(g.from.imageHeight=l.fromArrowImageHeight)),l.toArrow&&(g.to=this.edgeType.getArrowData(s,"to",f,this.selected,this.hover,l),l.arrowStrikethrough===!1&&(this.edgeType.toPoint=g.to.core),l.toArrowSrc&&(g.to.image=this.imagelist.load(l.toArrowSrc)),l.toArrowImageWidth&&(g.to.imageWidth=l.toArrowImageWidth),l.toArrowImageHeight&&(g.to.imageHeight=l.toArrowImageHeight)),l.middleArrow&&(g.middle=this.edgeType.getArrowData(s,"middle",f,this.selected,this.hover,l),l.middleArrowSrc&&(g.middle.image=this.imagelist.load(l.middleArrowSrc)),l.middleArrowImageWidth&&(g.middle.imageWidth=l.middleArrowImageWidth),l.middleArrowImageHeight&&(g.middle.imageHeight=l.middleArrowImageHeight)),l.fromArrow&&this.edgeType.drawArrowHead(s,l,this.selected,this.hover,g.from),l.middleArrow&&this.edgeType.drawArrowHead(s,l,this.selected,this.hover,g.middle),l.toArrow&&this.edgeType.drawArrowHead(s,l,this.selected,this.hover,g.to)}}},{key:"drawLabel",value:function(s,l){if(this.options.label!==void 0){var f,g=this.from,a=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(s,this.selected,this.hover),g.id!=a.id){this.labelModule.pointToSelf=!1,f=this.edgeType.getPoint(.5,l),s.save();var u=this._getRotation(s);u.angle!=0&&(s.translate(u.x,u.y),s.rotate(u.angle)),this.labelModule.draw(s,f.x,f.y,this.selected,this.hover),s.restore()}else{this.labelModule.pointToSelf=!0;var p=wO(s,this.options.selfReference.angle,this.options.selfReference.size,g);f=this._pointOnCircle(p.x,p.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(s,f.x,f.y,this.selected,this.hover)}}}},{key:"getItemsOnPoint",value:function(s){var l=[];if(this.labelModule.visible()){var f=this._getRotation();$2(this.labelModule.getSize(),s,f)&&l.push({edgeId:this.id,labelId:0})}var g={left:s.x,top:s.y};return this.isOverlappingWith(g)&&l.push({edgeId:this.id}),l}},{key:"isOverlappingWith",value:function(s){if(this.connected){var l=this.from.x,f=this.from.y,g=this.to.x,a=this.to.y,u=s.left,p=s.top;return this.edgeType.getDistanceToEdge(l,f,g,a,u,p)<10}return!1}},{key:"_getRotation",value:function(s){var l=this.edgeType.getViaNode(),f=this.edgeType.getPoint(.5,l);s!==void 0&&this.labelModule.calculateLabelSize(s,this.selected,this.hover,f.x,f.y);var g={x:f.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible()||this.options.font.align==="horizontal")return g;var a=this.from.y-this.to.y,u=this.from.x-this.to.x,p=Math.atan2(a,u);return(p<-1&&u<0||p>0&&u<0)&&(p+=Math.PI),g.angle=p,g}},{key:"_pointOnCircle",value:function(s,l,f,g){return{x:s+f*Math.cos(g),y:l-f*Math.sin(g)}}},{key:"select",value:function(){this.selected=!0}},{key:"unselect",value:function(){this.selected=!1}},{key:"cleanup",value:function(){return this.edgeType.cleanup()}},{key:"remove",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:"endPointsValid",value:function(){return this.body.nodes[this.fromId]!==void 0&&this.body.nodes[this.toId]!==void 0}}],[{key:"parseOptions",value:function(s,l){var f=arguments.length>2&&arguments[2]!==void 0&&arguments[2],g=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},a=arguments.length>4&&arguments[4]!==void 0&&arguments[4];if(dn(["endPointOffset","arrowStrikethrough","id","from","hidden","hoverWidth","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","selfReference","to","title","value","width","font","chosen","widthConstraint"],s,l,f),l.endPointOffset!==void 0&&l.endPointOffset.from!==void 0&&(Tp(l.endPointOffset.from)?s.endPointOffset.from=l.endPointOffset.from:(s.endPointOffset.from=g.endPointOffset.from!==void 0?g.endPointOffset.from:0,console.error("endPointOffset.from is not a valid number"))),l.endPointOffset!==void 0&&l.endPointOffset.to!==void 0&&(Tp(l.endPointOffset.to)?s.endPointOffset.to=l.endPointOffset.to:(s.endPointOffset.to=g.endPointOffset.to!==void 0?g.endPointOffset.to:0,console.error("endPointOffset.to is not a valid number"))),T1(l.label)?s.label=l.label:T1(s.label)||(s.label=void 0),ks(s,l,"smooth",g),ks(s,l,"shadow",g),ks(s,l,"background",g),l.dashes!==void 0&&l.dashes!==null?s.dashes=l.dashes:f===!0&&l.dashes===null&&(s.dashes=wp(g.dashes)),l.scaling!==void 0&&l.scaling!==null?(l.scaling.min!==void 0&&(s.scaling.min=l.scaling.min),l.scaling.max!==void 0&&(s.scaling.max=l.scaling.max),ks(s.scaling,l.scaling,"label",g.scaling)):f===!0&&l.scaling===null&&(s.scaling=wp(g.scaling)),l.arrows!==void 0&&l.arrows!==null)if(typeof l.arrows=="string"){var u=l.arrows.toLowerCase();s.arrows.to.enabled=Kn(u).call(u,"to")!=-1,s.arrows.middle.enabled=Kn(u).call(u,"middle")!=-1,s.arrows.from.enabled=Kn(u).call(u,"from")!=-1}else{if(Wo(l.arrows)!=="object")throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+kg(l.arrows));ks(s.arrows,l.arrows,"to",g.arrows),ks(s.arrows,l.arrows,"middle",g.arrows),ks(s.arrows,l.arrows,"from",g.arrows)}else f===!0&&l.arrows===null&&(s.arrows=wp(g.arrows));if(l.color!==void 0&&l.color!==null){var p=Gt(l.color)?{color:l.color,highlight:l.color,hover:l.color,inherit:!1,opacity:1}:l.color,O=s.color;if(a)Kr(O,g.color,!1,f);else for(var P in O)Object.prototype.hasOwnProperty.call(O,P)&&delete O[P];if(Gt(O))O.color=O,O.highlight=O,O.hover=O,O.inherit=!1,p.opacity===void 0&&(O.opacity=1);else{var z=!1;p.color!==void 0&&(O.color=p.color,z=!0),p.highlight!==void 0&&(O.highlight=p.highlight,z=!0),p.hover!==void 0&&(O.hover=p.hover,z=!0),p.inherit!==void 0&&(O.inherit=p.inherit),p.opacity!==void 0&&(O.opacity=Math.min(1,Math.max(0,p.opacity))),z===!0?O.inherit=!1:O.inherit===void 0&&(O.inherit="from")}}else f===!0&&l.color===null&&(s.color=yf(g.color));f===!0&&l.font===null&&(s.font=yf(g.font)),Object.prototype.hasOwnProperty.call(l,"selfReferenceSize")&&(console.warn("The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}"),s.selfReference.size=l.selfReferenceSize)}}]),m}(),Wp=function(){function m(s,l,f){var g,a=this;rr(this,m),this.body=s,this.images=l,this.groups=f,this.body.functions.createEdge=Vt(g=this.create).call(g,this),this.edgesListeners={add:function(u,p){a.add(p.items)},update:function(u,p){a.update(p.items)},remove:function(u,p){a.remove(p.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:"arrow"},middle:{enabled:!1,scaleFactor:1,type:"arrow"},from:{enabled:!1,scaleFactor:1,type:"arrow"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:"#848484",highlight:"#848484",hover:"#848484",inherit:"from",opacity:1},dashes:!1,font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:2,strokeColor:"#ffffff",align:"horizontal",multi:!1,vadjust:0,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(u,p,O,P){if(p===u)return .5;var z=1/(p-u);return Math.max(0,(P-u)*z)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},background:{enabled:!1,color:"rgba(111,111,111,1)",size:10,dashes:!1},smooth:{enabled:!0,type:"dynamic",forceDirection:"none",roundness:.5},title:void 0,width:1,value:void 0},Kr(this.options,this.defaultOptions),this.bindEventListeners()}return nr(m,[{key:"bindEventListeners",value:function(){var s,l,f=this;this.body.emitter.on("_forceDisableDynamicCurves",function(g){var a=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];g==="dynamic"&&(g="continuous");var u=!1;for(var p in f.body.edges)if(Object.prototype.hasOwnProperty.call(f.body.edges,p)){var O=f.body.edges[p],P=f.body.data.edges.get(p);if(P!=null){var z=P.smooth;z!==void 0&&z.enabled===!0&&z.type==="dynamic"&&(g===void 0?O.setOptions({smooth:!1}):O.setOptions({smooth:{type:g}}),u=!0)}}a===!0&&u===!0&&f.body.emitter.emit("_dataChanged")}),this.body.emitter.on("_dataUpdated",function(){f.reconnectEdges()}),this.body.emitter.on("refreshEdges",Vt(s=this.refresh).call(s,this)),this.body.emitter.on("refresh",Vt(l=this.refresh).call(l,this)),this.body.emitter.on("destroy",function(){In(f.edgesListeners,function(g,a){f.body.data.edges&&f.body.data.edges.off(a,g)}),delete f.body.functions.createEdge,delete f.edgesListeners.add,delete f.edgesListeners.update,delete f.edgesListeners.remove,delete f.edgesListeners})}},{key:"setOptions",value:function(s){if(s!==void 0){ec.parseOptions(this.options,s,!0,this.defaultOptions,!0);var l=!1;if(s.smooth!==void 0)for(var f in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,f)&&(l=this.body.edges[f].updateEdgeType()||l);if(s.font!==void 0)for(var g in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,g)&&this.body.edges[g].updateLabelModule();s.hidden===void 0&&s.physics===void 0&&l!==!0||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(s){var l=this,f=arguments.length>1&&arguments[1]!==void 0&&arguments[1],g=this.body.data.edges;if(t.isDataViewLike("id",s))this.body.data.edges=s;else if(zn(s))this.body.data.edges=new t.DataSet,this.body.data.edges.add(s);else{if(s)throw new TypeError("Array or DataSet expected");this.body.data.edges=new t.DataSet}if(g&&In(this.edgesListeners,function(u,p){g.off(p,u)}),this.body.edges={},this.body.data.edges){In(this.edgesListeners,function(u,p){l.body.data.edges.on(p,u)});var a=this.body.data.edges.getIds();this.add(a,!0)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),f===!1&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(s){for(var l=arguments.length>1&&arguments[1]!==void 0&&arguments[1],f=this.body.edges,g=this.body.data.edges,a=0;a1&&arguments[1]!==void 0)||arguments[1];if(s.length!==0){var f=this.body.edges;In(s,function(g){var a=f[g];a!==void 0&&a.remove()}),l&&this.body.emitter.emit("_dataChanged")}}},{key:"refresh",value:function(){var s=this;In(this.body.edges,function(l,f){var g=s.body.data.edges.get(f);g!==void 0&&l.setOptions(g)})}},{key:"create",value:function(s){return new ec(s,this.body,this.images,this.options,this.defaultOptions)}},{key:"reconnectEdges",value:function(){var s,l=this.body.nodes,f=this.body.edges;for(s in l)Object.prototype.hasOwnProperty.call(l,s)&&(l[s].edges=[]);for(s in f)if(Object.prototype.hasOwnProperty.call(f,s)){var g=f[s];g.from=null,g.to=null,g.connect()}}},{key:"getConnectedNodes",value:function(s){var l=[];if(this.body.edges[s]!==void 0){var f=this.body.edges[s];f.fromId!==void 0&&l.push(f.fromId),f.toId!==void 0&&l.push(f.toId)}return l}},{key:"_updateState",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:"_removeInvalidEdges",value:function(){var s=this,l=[];In(this.body.edges,function(f,g){var a=s.body.nodes[f.toId],u=s.body.nodes[f.fromId];a!==void 0&&a.isCluster===!0||u!==void 0&&u.isCluster===!0||a!==void 0&&u!==void 0||l.push(g)}),this.remove(l,!1)}},{key:"_addMissingEdges",value:function(){var s=this.body.data.edges;if(s!=null){var l=this.body.edges,f=[];Do(s).call(s,function(g,a){l[a]===void 0&&f.push(a)}),this.add(f,!0)}}}]),m}(),LO=function(){function m(s,l,f){rr(this,m),this.body=s,this.physicsBody=l,this.barnesHutTree,this.setOptions(f),this._rng=Yt("BARNES HUT SOLVER")}return nr(m,[{key:"setOptions",value:function(s){this.options=s,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:"solve",value:function(){if(this.options.gravitationalConstant!==0&&this.physicsBody.physicsNodeIndices.length>0){var s,l=this.body.nodes,f=this.physicsBody.physicsNodeIndices,g=f.length,a=this._formBarnesHutTree(l,f);this.barnesHutTree=a;for(var u=0;u0&&this._getForceContributions(a.root,s)}}},{key:"_getForceContributions",value:function(s,l){this._getForceContribution(s.children.NW,l),this._getForceContribution(s.children.NE,l),this._getForceContribution(s.children.SW,l),this._getForceContribution(s.children.SE,l)}},{key:"_getForceContribution",value:function(s,l){if(s.childrenCount>0){var f=s.centerOfMass.x-l.x,g=s.centerOfMass.y-l.y,a=Math.sqrt(f*f+g*g);a*s.calcSize>this.thetaInversed?this._calculateForces(a,f,g,l,s):s.childrenCount===4?this._getForceContributions(s,l):s.children.data.id!=l.id&&this._calculateForces(a,f,g,l,s)}}},{key:"_calculateForces",value:function(s,l,f,g,a){s===0&&(l=s=.1),this.overlapAvoidanceFactor<1&&g.shape.radius&&(s=Math.max(.1+this.overlapAvoidanceFactor*g.shape.radius,s-g.shape.radius));var u=this.options.gravitationalConstant*a.mass*g.options.mass/Math.pow(s,3),p=l*u,O=f*u;this.physicsBody.forces[g.id].x+=p,this.physicsBody.forces[g.id].y+=O}},{key:"_formBarnesHutTree",value:function(s,l){for(var f,g=l.length,a=s[l[0]].x,u=s[l[0]].y,p=s[l[0]].x,O=s[l[0]].y,P=1;P0&&(Hp&&(p=H),eeO&&(O=ee))}var pe=Math.abs(p-a)-Math.abs(O-u);pe>0?(u-=.5*pe,O+=.5*pe):(a+=.5*pe,p-=.5*pe);var be=Math.max(1e-5,Math.abs(p-a)),Ae=.5*be,Qe=.5*(a+p),$e=.5*(u+O),mt={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:Qe-Ae,maxX:Qe+Ae,minY:$e-Ae,maxY:$e+Ae},size:be,calcSize:1/be,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(mt.root);for(var It=0;It0&&this._placeInTree(mt.root,f);return mt}},{key:"_updateBranchMass",value:function(s,l){var f=s.centerOfMass,g=s.mass+l.options.mass,a=1/g;f.x=f.x*s.mass+l.x*l.options.mass,f.x*=a,f.y=f.y*s.mass+l.y*l.options.mass,f.y*=a,s.mass=g;var u=Math.max(Math.max(l.height,l.radius),l.width);s.maxWidth=s.maxWidthl.x?a.maxY>l.y?"NW":"SW":a.maxY>l.y?"NE":"SE",this._placeInRegion(s,l,g)}},{key:"_placeInRegion",value:function(s,l,f){var g=s.children[f];switch(g.childrenCount){case 0:g.children.data=l,g.childrenCount=1,this._updateBranchMass(g,l);break;case 1:g.children.data.x===l.x&&g.children.data.y===l.y?(l.x+=this._rng(),l.y+=this._rng()):(this._splitBranch(g),this._placeInTree(g,l));break;case 4:this._placeInTree(g,l)}}},{key:"_splitBranch",value:function(s){var l=null;s.childrenCount===1&&(l=s.children.data,s.mass=0,s.centerOfMass.x=0,s.centerOfMass.y=0),s.childrenCount=4,s.children.data=null,this._insertRegion(s,"NW"),this._insertRegion(s,"NE"),this._insertRegion(s,"SW"),this._insertRegion(s,"SE"),l!=null&&this._placeInTree(s,l)}},{key:"_insertRegion",value:function(s,l){var f,g,a,u,p=.5*s.size;switch(l){case"NW":f=s.range.minX,g=s.range.minX+p,a=s.range.minY,u=s.range.minY+p;break;case"NE":f=s.range.minX+p,g=s.range.maxX,a=s.range.minY,u=s.range.minY+p;break;case"SW":f=s.range.minX,g=s.range.minX+p,a=s.range.minY+p,u=s.range.maxY;break;case"SE":f=s.range.minX+p,g=s.range.maxX,a=s.range.minY+p,u=s.range.maxY}s.children[l]={centerOfMass:{x:0,y:0},mass:0,range:{minX:f,maxX:g,minY:a,maxY:u},size:.5*s.size,calcSize:2*s.calcSize,children:{data:null},maxWidth:0,level:s.level+1,childrenCount:0}}},{key:"_debug",value:function(s,l){this.barnesHutTree!==void 0&&(s.lineWidth=1,this._drawBranch(this.barnesHutTree.root,s,l))}},{key:"_drawBranch",value:function(s,l,f){f===void 0&&(f="#FF0000"),s.childrenCount===4&&(this._drawBranch(s.children.NW,l),this._drawBranch(s.children.NE,l),this._drawBranch(s.children.SE,l),this._drawBranch(s.children.SW,l)),l.strokeStyle=f,l.beginPath(),l.moveTo(s.range.minX,s.range.minY),l.lineTo(s.range.maxX,s.range.minY),l.stroke(),l.beginPath(),l.moveTo(s.range.maxX,s.range.minY),l.lineTo(s.range.maxX,s.range.maxY),l.stroke(),l.beginPath(),l.moveTo(s.range.maxX,s.range.maxY),l.lineTo(s.range.minX,s.range.maxY),l.stroke(),l.beginPath(),l.moveTo(s.range.minX,s.range.maxY),l.lineTo(s.range.minX,s.range.minY),l.stroke()}}]),m}(),_S=function(){function m(s,l,f){rr(this,m),this._rng=Yt("REPULSION SOLVER"),this.body=s,this.physicsBody=l,this.setOptions(f)}return nr(m,[{key:"setOptions",value:function(s){this.options=s}},{key:"solve",value:function(){for(var s,l,f,g,a,u,p,O,P=this.body.nodes,z=this.physicsBody.physicsNodeIndices,H=this.physicsBody.forces,ee=this.options.nodeDistance,pe=-2/3/ee,be=0;be"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var u_=function(m){Hn(l,m);var s=q1(l);function l(f,g,a){var u;return rr(this,l),(u=s.call(this,f,g,a))._rng=Yt("FORCE ATLAS 2 BASED REPULSION SOLVER"),u}return nr(l,[{key:"_calculateForces",value:function(f,g,a,u,p){f===0&&(g=f=.1*this._rng()),this.overlapAvoidanceFactor<1&&u.shape.radius&&(f=Math.max(.1+this.overlapAvoidanceFactor*u.shape.radius,f-u.shape.radius));var O=u.edges.length+1,P=this.options.gravitationalConstant*p.mass*u.options.mass*O/Math.pow(f,2),z=g*P,H=a*P;this.physicsBody.forces[u.id].x+=z,this.physicsBody.forces[u.id].y+=H}}]),l}(LO);function by(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var tc=function(m){Hn(l,m);var s=by(l);function l(f,g,a){return rr(this,l),s.call(this,f,g,a)}return nr(l,[{key:"_calculateForces",value:function(f,g,a,u,p){if(f>0){var O=p.edges.length+1,P=this.options.centralGravity*O*p.options.mass;u[p.id].x=g*P,u[p.id].y=a*P}}}]),l}(yy),kc=function(){function m(s){rr(this,m),this.body=s,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},Po(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return nr(m,[{key:"bindEventListeners",value:function(){var s=this;this.body.emitter.on("initPhysics",function(){s.initPhysics()}),this.body.emitter.on("_layoutFailed",function(){s.layoutFailed=!0}),this.body.emitter.on("resetPhysics",function(){s.stopSimulation(),s.ready=!1}),this.body.emitter.on("disablePhysics",function(){s.physicsEnabled=!1,s.stopSimulation()}),this.body.emitter.on("restorePhysics",function(){s.setOptions(s.options),s.ready===!0&&s.startSimulation()}),this.body.emitter.on("startSimulation",function(){s.ready===!0&&s.startSimulation()}),this.body.emitter.on("stopSimulation",function(){s.stopSimulation()}),this.body.emitter.on("destroy",function(){s.stopSimulation(!1),s.body.emitter.off()}),this.body.emitter.on("_dataChanged",function(){s.updatePhysicsData()})}},{key:"setOptions",value:function(s){if(s!==void 0)if(s===!1)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(s===!0)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,_o(["stabilization"],this.options,s),ks(this.options,s,"stabilization"),s.enabled===void 0&&(this.options.enabled=!0),this.options.enabled===!1&&(this.physicsEnabled=!1,this.stopSimulation());var l=this.options.wind;l&&((typeof l.x!="number"||W2(l.x))&&(l.x=0),(typeof l.y!="number"||W2(l.y))&&(l.y=0)),this.timestep=this.options.timestep}this.init()}},{key:"init",value:function(){var s;this.options.solver==="forceAtlas2Based"?(s=this.options.forceAtlas2Based,this.nodesSolver=new u_(this.body,this.physicsBody,s),this.edgesSolver=new gy(this.body,this.physicsBody,s),this.gravitySolver=new tc(this.body,this.physicsBody,s)):this.options.solver==="repulsion"?(s=this.options.repulsion,this.nodesSolver=new _S(this.body,this.physicsBody,s),this.edgesSolver=new gy(this.body,this.physicsBody,s),this.gravitySolver=new yy(this.body,this.physicsBody,s)):this.options.solver==="hierarchicalRepulsion"?(s=this.options.hierarchicalRepulsion,this.nodesSolver=new a3(this.body,this.physicsBody,s),this.edgesSolver=new FO(this.body,this.physicsBody,s),this.gravitySolver=new yy(this.body,this.physicsBody,s)):(s=this.options.barnesHut,this.nodesSolver=new LO(this.body,this.physicsBody,s),this.edgesSolver=new gy(this.body,this.physicsBody,s),this.gravitySolver=new yy(this.body,this.physicsBody,s)),this.modelOptions=s}},{key:"initPhysics",value:function(){this.physicsEnabled===!0&&this.options.enabled===!0?this.options.stabilization.enabled===!0?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}},{key:"startSimulation",value:function(){var s;this.physicsEnabled===!0&&this.options.enabled===!0?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),this.viewFunction===void 0&&(this.viewFunction=Vt(s=this.simulationStep).call(s,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}},{key:"stopSimulation",value:function(){var s=!(arguments.length>0&&arguments[0]!==void 0)||arguments[0];this.stabilized=!0,s===!0&&this._emitStabilized(),this.viewFunction!==void 0&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,s===!0&&this.body.emitter.emit("_stopRendering"))}},{key:"simulationStep",value:function(){var s=xg();this.physicsTick(),(xg()-s<.4*this.simulationInterval||this.runDoubleSpeed===!0)&&this.stabilized===!1&&(this.physicsTick(),this.runDoubleSpeed=!0),this.stabilized===!0&&this.stopSimulation()}},{key:"_emitStabilized",value:function(){var s=this,l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||this.startedStabilization===!0)&&El(function(){s.body.emitter.emit("stabilized",{iterations:l}),s.startedStabilization=!1,s.stabilizationIterations=0},0)}},{key:"physicsStep",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:"adjustTimeStep",value:function(){this._evaluateStepQuality()===!0?this.timestep=1.2*this.timestep:this.timestep/1.2.3))return!1;return!0}},{key:"moveNodes",value:function(){for(var s=this.physicsBody.physicsNodeIndices,l=0,f=0,g=0;gg&&(s=s>0?g:-g),s}},{key:"_performStep",value:function(s){var l=this.body.nodes[s],f=this.physicsBody.forces[s];this.options.wind&&(f.x+=this.options.wind.x,f.y+=this.options.wind.y);var g=this.physicsBody.velocities[s];return this.previousStates[s]={x:l.x,y:l.y,vx:g.x,vy:g.y},l.options.fixed.x===!1?(g.x=this.calculateComponentVelocity(g.x,f.x,l.options.mass),l.x+=g.x*this.timestep):(f.x=0,g.x=0),l.options.fixed.y===!1?(g.y=this.calculateComponentVelocity(g.y,f.y,l.options.mass),l.y+=g.y*this.timestep):(f.y=0,g.y=0),Math.sqrt(Math.pow(g.x,2)+Math.pow(g.y,2))}},{key:"_freezeNodes",value:function(){var s=this.body.nodes;for(var l in s)if(Object.prototype.hasOwnProperty.call(s,l)&&s[l].x&&s[l].y){var f=s[l].options.fixed;this.freezeCache[l]={x:f.x,y:f.y},f.x=!0,f.y=!0}}},{key:"_restoreFrozenNodes",value:function(){var s=this.body.nodes;for(var l in s)Object.prototype.hasOwnProperty.call(s,l)&&this.freezeCache[l]!==void 0&&(s[l].options.fixed.x=this.freezeCache[l].x,s[l].options.fixed.y=this.freezeCache[l].y);this.freezeCache={}}},{key:"stabilize",value:function(){var s=this,l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.stabilization.iterations;typeof l!="number"&&(l=this.options.stabilization.iterations,console.error("The stabilize method needs a numeric amount of iterations. Switching to default: ",l)),this.physicsBody.physicsNodeIndices.length!==0?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=l,this.options.stabilization.onlyDynamicEdges===!0&&this._freezeNodes(),this.stabilizationIterations=0,El(function(){return s._stabilizationBatch()},0)):this.ready=!0}},{key:"_startStabilizing",value:function(){return this.startedStabilization!==!0&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0,!0)}},{key:"_stabilizationBatch",value:function(){var s=this,l=function(){return s.stabilized===!1&&s.stabilizationIterations1&&arguments[1]!==void 0?arguments[1]:[],g=1e9,a=-1e9,u=1e9,p=-1e9;if(f.length>0)for(var O=0;O(l=s[f[O]]).shape.boundingBox.left&&(u=l.shape.boundingBox.left),pl.shape.boundingBox.top&&(g=l.shape.boundingBox.top),a1&&arguments[1]!==void 0?arguments[1]:[],g=1e9,a=-1e9,u=1e9,p=-1e9;if(f.length>0)for(var O=0;O(l=s[f[O]]).x&&(u=l.x),pl.y&&(g=l.y),a"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var G1=function(m){Hn(l,m);var s=BO(l);function l(f,g,a,u,p,O){var P;return rr(this,l),(P=s.call(this,f,g,a,u,p,O)).isCluster=!0,P.containedNodes={},P.containedEdges={},P}return nr(l,[{key:"_openChildCluster",value:function(f){var g=this,a=this.body.nodes[f];if(this.containedNodes[f]===void 0)throw new Error("node with id: "+f+" not in current cluster");if(!a.isCluster)throw new Error("node with id: "+f+" is not a cluster");delete this.containedNodes[f],In(a.edges,function(u){delete g.containedEdges[u.id]}),In(a.containedNodes,function(u,p){g.containedNodes[p]=u}),a.containedNodes={},In(a.containedEdges,function(u,p){g.containedEdges[p]=u}),a.containedEdges={},In(a.edges,function(u){In(g.edges,function(p){var O,P,z=Kn(O=p.clusteringEdgeReplacingIds).call(O,u.id);z!==-1&&(In(u.clusteringEdgeReplacingIds,function(H){p.clusteringEdgeReplacingIds.push(H),g.body.edges[H].edgeReplacedById=p.id}),Rd(P=p.clusteringEdgeReplacingIds).call(P,z,1))})}),a.edges=[]}}]),l}(To),Hp=function(){function m(s){var l=this;rr(this,m),this.body=s,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},Po(this.options,this.defaultOptions),this.body.emitter.on("_resetData",function(){l.clusteredNodes={},l.clusteredEdges={}})}return nr(m,[{key:"clusterByHubsize",value:function(s,l){s===void 0?s=this._getHubSize():Wo(s)==="object"&&(l=this._checkOptions(s),s=this._getHubSize());for(var f=[],g=0;g=s&&f.push(a.id)}for(var u=0;u0&&arguments[0]!==void 0?arguments[0]:{},f=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];if(l.joinCondition===void 0)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");l=this._checkOptions(l);var g={},a={};In(this.body.nodes,function(u,p){u.options&&l.joinCondition(u.options)===!0&&(g[p]=u,In(u.edges,function(O){s.clusteredEdges[O.id]===void 0&&(a[O.id]=O)}))}),this._cluster(g,a,l,f)}},{key:"clusterByEdgeCount",value:function(s,l){var f=this,g=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];l=this._checkOptions(l);for(var a,u,p,O=[],P={},z=function(){var pe={},be={},Ae=f.body.nodeIndices[H],Qe=f.body.nodes[Ae];if(P[Ae]===void 0){p=0,u=[];for(var $e=0;$e0&&ni(be).length>0&&It===!0){var Fe=function(){for(var ft=0;ft1&&arguments[1]!==void 0)||arguments[1];this.clusterByEdgeCount(1,s,l)}},{key:"clusterBridges",value:function(s){var l=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];this.clusterByEdgeCount(2,s,l)}},{key:"clusterByConnection",value:function(s,l){var f,g=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];if(s===void 0)throw new Error("No nodeId supplied to clusterByConnection!");if(this.body.nodes[s]===void 0)throw new Error("The nodeId given to clusterByConnection does not exist!");var a=this.body.nodes[s];(l=this._checkOptions(l,a)).clusterNodeProperties.x===void 0&&(l.clusterNodeProperties.x=a.x),l.clusterNodeProperties.y===void 0&&(l.clusterNodeProperties.y=a.y),l.clusterNodeProperties.fixed===void 0&&(l.clusterNodeProperties.fixed={},l.clusterNodeProperties.fixed.x=a.options.fixed.x,l.clusterNodeProperties.fixed.y=a.options.fixed.y);var u={},p={},O=a.id,P=Ts.cloneOptions(a);u[O]=a;for(var z=0;z-1&&(p[mt.id]=mt)}this._cluster(u,p,l,g)}},{key:"_createClusterEdges",value:function(s,l,f,g){for(var a,u,p,O,P,z,H=ni(s),ee=[],pe=0;pe0&&arguments[0]!==void 0?arguments[0]:{};return s.clusterEdgeProperties===void 0&&(s.clusterEdgeProperties={}),s.clusterNodeProperties===void 0&&(s.clusterNodeProperties={}),s}},{key:"_cluster",value:function(s,l,f){var g=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3],a=[];for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&this.clusteredNodes[u]!==void 0&&a.push(u);for(var p=0;pa?l.x:a,u=l.yp?l.y:p;return{x:.5*(g+a),y:.5*(u+p)}}},{key:"openCluster",value:function(s,l){var f=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];if(s===void 0)throw new Error("No clusterNodeId supplied to openCluster.");var g=this.body.nodes[s];if(g===void 0)throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(g.isCluster!==!0||g.containedNodes===void 0||g.containedEdges===void 0)throw new Error("The node:"+s+" is not a valid cluster.");var a=this.findNode(s),u=Kn(a).call(a,s)-1;if(u>=0){var p=a[u];return this.body.nodes[p]._openChildCluster(s),delete this.body.nodes[s],void(f===!0&&this.body.emitter.emit("_dataChanged"))}var O=g.containedNodes,P=g.containedEdges;if(l!==void 0&&l.releaseFunction!==void 0&&typeof l.releaseFunction=="function"){var z={},H={x:g.x,y:g.y};for(var ee in O)if(Object.prototype.hasOwnProperty.call(O,ee)){var pe=this.body.nodes[ee];z[ee]={x:pe.x,y:pe.y}}var be=l.releaseFunction(H,z);for(var Ae in O)if(Object.prototype.hasOwnProperty.call(O,Ae)){var Qe=this.body.nodes[Ae];be[Ae]!==void 0&&(Qe.x=be[Ae].x===void 0?g.x:be[Ae].x,Qe.y=be[Ae].y===void 0?g.y:be[Ae].y)}}else In(O,function(Ls){Ls.options.fixed.x===!1&&(Ls.x=g.x),Ls.options.fixed.y===!1&&(Ls.y=g.y)});for(var $e in O)if(Object.prototype.hasOwnProperty.call(O,$e)){var mt=this.body.nodes[$e];mt.vx=g.vx,mt.vy=g.vy,mt.setOptions({physics:!0}),delete this.clusteredNodes[$e]}for(var It=[],Ct=0;Ct0&&a<100;){var u=l.pop();if(u!==void 0){var p=this.body.edges[u];if(p!==void 0){a++;var O=p.clusteringEdgeReplacingIds;if(O===void 0)g.push(u);else for(var P=0;Pg&&(g=u.edges.length),s+=u.edges.length,l+=Math.pow(u.edges.length,2),f+=1}s/=f;var p=(l/=f)-Math.pow(s,2),O=Math.sqrt(p),P=Math.floor(s+2*O);return P>g&&(P=g),P}},{key:"_createClusteredEdge",value:function(s,l,f,g,a){var u=Ts.cloneOptions(f,"edge");Kr(u,g),u.from=s,u.to=l,u.id="clusterEdge:"+Ua(),a!==void 0&&Kr(u,a);var p=this.body.functions.createEdge(u);return p.clusteringEdgeReplacingIds=[f.id],p.connect(),this.body.edges[p.id]=p,p}},{key:"_clusterEdges",value:function(s,l,f,g){if(l instanceof ec){var a=l,u={};u[a.id]=a,l=u}if(s instanceof To){var p=s,O={};O[p.id]=p,s=O}if(f==null)throw new Error("_clusterEdges: parameter clusterNode required");for(var P in g===void 0&&(g=f.clusterEdgeProperties),this._createClusterEdges(s,l,f,g),l)if(Object.prototype.hasOwnProperty.call(l,P)&&this.body.edges[P]!==void 0){var z=this.body.edges[P];this._backupEdgeOptions(z),z.setOptions({physics:!1})}for(var H in s)Object.prototype.hasOwnProperty.call(s,H)&&(this.clusteredNodes[H]={clusterId:f.id,node:this.body.nodes[H]},this.body.nodes[H].setOptions({physics:!1}))}},{key:"_getClusterNodeForNode",value:function(s){if(s!==void 0){var l=this.clusteredNodes[s];if(l!==void 0){var f=l.clusterId;if(f!==void 0)return this.body.nodes[f]}}}},{key:"_filter",value:function(s,l){var f=[];return In(s,function(g){l(g)&&f.push(g)}),f}},{key:"_updateState",value:function(){var s,l=this,f=[],g={},a=function(z){In(l.body.nodes,function(H){H.isCluster===!0&&z(H)})};for(s in this.clusteredNodes)Object.prototype.hasOwnProperty.call(this.clusteredNodes,s)&&this.body.nodes[s]===void 0&&f.push(s);a(function(z){for(var H=0;H0}z.endPointsValid()&&ee||(g[H]=H)}),a(function(z){In(g,function(H){delete z.containedEdges[H],In(z.edges,function(ee,pe){ee.id!==H?ee.clusteringEdgeReplacingIds=l._filter(ee.clusteringEdgeReplacingIds,function(be){return!g[be]}):z.edges[pe]=null}),z.edges=l._filter(z.edges,function(ee){return ee!==null})})}),In(g,function(z){delete l.clusteredEdges[z]}),In(g,function(z){delete l.body.edges[z]}),In(ni(this.body.edges),function(z){var H=l.body.edges[z],ee=l._isClusteredNode(H.fromId)||l._isClusteredNode(H.toId);if(ee!==l._isClusteredEdge(H.id))if(ee){var pe=l._getClusterNodeForNode(H.fromId);pe!==void 0&&l._clusterEdges(l.body.nodes[H.fromId],H,pe);var be=l._getClusterNodeForNode(H.toId);be!==void 0&&l._clusterEdges(l.body.nodes[H.toId],H,be)}else delete l._clusterEdges[z],l._restoreEdge(H)});for(var p=!1,O=!0,P=function(){var z=[];a(function(ee){var pe=ni(ee.containedNodes).length,be=ee.options.allowSingleNodeCluster===!0;(be&&pe<1||!be&&pe<2)&&z.push(ee.id)});for(var H=0;H0,p=p||O};O;)P();p&&this._updateState()}},{key:"_isClusteredNode",value:function(s){return this.clusteredNodes[s]!==void 0}},{key:"_isClusteredEdge",value:function(s){return this.clusteredEdges[s]!==void 0}}]),m}(),Pc=function(){function m(s,l){var f;rr(this,m),window!==void 0&&(f=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=f===void 0?function(g){g()}:f,this.body=s,this.canvas=l,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},Po(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return nr(m,[{key:"bindEventListeners",value:function(){var s,l=this;this.body.emitter.on("dragStart",function(){l.dragging=!0}),this.body.emitter.on("dragEnd",function(){l.dragging=!1}),this.body.emitter.on("zoom",function(){l.zooming=!0,window.clearTimeout(l.zoomTimeoutId),l.zoomTimeoutId=El(function(){var f;l.zooming=!1,Vt(f=l._requestRedraw).call(f,l)()},250)}),this.body.emitter.on("_resizeNodes",function(){l._resizeNodes()}),this.body.emitter.on("_redraw",function(){l.renderingActive===!1&&l._redraw()}),this.body.emitter.on("_blockRedraw",function(){l.allowRedraw=!1}),this.body.emitter.on("_allowRedraw",function(){l.allowRedraw=!0,l.redrawRequested=!1}),this.body.emitter.on("_requestRedraw",Vt(s=this._requestRedraw).call(s,this)),this.body.emitter.on("_startRendering",function(){l.renderRequests+=1,l.renderingActive=!0,l._startRendering()}),this.body.emitter.on("_stopRendering",function(){l.renderRequests-=1,l.renderingActive=l.renderRequests>0,l.renderTimer=void 0}),this.body.emitter.on("destroy",function(){l.renderRequests=0,l.allowRedraw=!1,l.renderingActive=!1,l.requiresTimeout===!0?clearTimeout(l.renderTimer):window.cancelAnimationFrame(l.renderTimer),l.body.emitter.off()})}},{key:"setOptions",value:function(s){s!==void 0&&dn(["hideEdgesOnDrag","hideEdgesOnZoom","hideNodesOnDrag"],this.options,s)}},{key:"_requestNextFrame",value:function(s,l){if(typeof window<"u"){var f,g=window;return this.requiresTimeout===!0?f=El(s,l):g.requestAnimationFrame&&(f=g.requestAnimationFrame(s)),f}}},{key:"_startRendering",value:function(){var s;this.renderingActive===!0&&this.renderTimer===void 0&&(this.renderTimer=this._requestNextFrame(Vt(s=this._renderStep).call(s,this),this.simulationInterval))}},{key:"_renderStep",value:function(){this.renderingActive===!0&&(this.renderTimer=void 0,this.requiresTimeout===!0&&this._startRendering(),this._redraw(),this.requiresTimeout===!1&&this._startRendering())}},{key:"redraw",value:function(){this.body.emitter.emit("setSize"),this._redraw()}},{key:"_requestRedraw",value:function(){var s=this;this.redrawRequested!==!0&&this.renderingActive===!1&&this.allowRedraw===!0&&(this.redrawRequested=!0,this._requestNextFrame(function(){s._redraw(!1)},0))}},{key:"_redraw",value:function(){var s=arguments.length>0&&arguments[0]!==void 0&&arguments[0];if(this.allowRedraw===!0){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1;var l={drawExternalLabels:null};this.canvas.frame.canvas.width!==0&&this.canvas.frame.canvas.height!==0||this.canvas.setSize(),this.canvas.setTransform();var f=this.canvas.getContext(),g=this.canvas.frame.canvas.clientWidth,a=this.canvas.frame.canvas.clientHeight;if(f.clearRect(0,0,g,a),this.canvas.frame.clientWidth===0)return;if(f.save(),f.translate(this.body.view.translation.x,this.body.view.translation.y),f.scale(this.body.view.scale,this.body.view.scale),f.beginPath(),this.body.emitter.emit("beforeDrawing",f),f.closePath(),s===!1&&(this.dragging===!1||this.dragging===!0&&this.options.hideEdgesOnDrag===!1)&&(this.zooming===!1||this.zooming===!0&&this.options.hideEdgesOnZoom===!1)&&this._drawEdges(f),this.dragging===!1||this.dragging===!0&&this.options.hideNodesOnDrag===!1){var u=this._drawNodes(f,s).drawExternalLabels;l.drawExternalLabels=u}s===!1&&(this.dragging===!1||this.dragging===!0&&this.options.hideEdgesOnDrag===!1)&&(this.zooming===!1||this.zooming===!0&&this.options.hideEdgesOnZoom===!1)&&this._drawArrows(f),l.drawExternalLabels!=null&&l.drawExternalLabels(),s===!1&&this._drawSelectionBox(f),f.beginPath(),this.body.emitter.emit("afterDrawing",f),f.closePath(),f.restore(),s===!0&&f.clearRect(0,0,g,a)}}},{key:"_resizeNodes",value:function(){this.canvas.setTransform();var s=this.canvas.getContext();s.save(),s.translate(this.body.view.translation.x,this.body.view.translation.y),s.scale(this.body.view.scale,this.body.view.scale);var l,f=this.body.nodes;for(var g in f)Object.prototype.hasOwnProperty.call(f,g)&&((l=f[g]).resize(s),l.updateBoundingBox(s,l.selected));s.restore()}},{key:"_drawNodes",value:function(s){for(var l,f,g=arguments.length>1&&arguments[1]!==void 0&&arguments[1],a=this.body.nodes,u=this.body.nodeIndices,p=[],O=[],P=this.canvas.DOMtoCanvas({x:-20,y:-20}),z=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+20,y:this.canvas.frame.canvas.clientHeight+20}),H={top:P.y,left:P.x,bottom:z.y,right:z.x},ee=[],pe=0;pe0&&arguments[0]!==void 0?arguments[0]:this.pixelRatio;this.initialized===!0&&(this.cameraState.previousWidth=this.frame.canvas.width/s,this.cameraState.previousHeight=this.frame.canvas.height/s,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/s,y:.5*this.frame.canvas.height/s}))}},{key:"_setCameraState",value:function(){if(this.cameraState.scale!==void 0&&this.frame.canvas.clientWidth!==0&&this.frame.canvas.clientHeight!==0&&this.pixelRatio!==0&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var s=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,l=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,f=this.cameraState.scale;s!=1&&l!=1?f=.5*this.cameraState.scale*(s+l):s!=1?f=this.cameraState.scale*s:l!=1&&(f=this.cameraState.scale*l),this.body.view.scale=f;var g=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),a={x:g.x-this.cameraState.position.x,y:g.y-this.cameraState.position.y};this.body.view.translation.x+=a.x*this.body.view.scale,this.body.view.translation.y+=a.y*this.body.view.scale}}},{key:"_prepareValue",value:function(s){if(typeof s=="number")return s+"px";if(typeof s=="string"){if(Kn(s).call(s,"%")!==-1||Kn(s).call(s,"px")!==-1)return s;if(Kn(s).call(s,"%")===-1)return s+"px"}throw new Error("Could not use the value supplied for width or height:"+s)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=0,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var s=document.createElement("DIV");s.style.color="red",s.style.fontWeight="bold",s.style.padding="10px",s.innerText="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(s)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var s=this;this.hammer!==void 0&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new d0(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:d0.DIRECTION_ALL}),D0(this.hammer,function(l){s.body.eventListeners.onTouch(l)}),this.hammer.on("tap",function(l){s.body.eventListeners.onTap(l)}),this.hammer.on("doubletap",function(l){s.body.eventListeners.onDoubleTap(l)}),this.hammer.on("press",function(l){s.body.eventListeners.onHold(l)}),this.hammer.on("panstart",function(l){s.body.eventListeners.onDragStart(l)}),this.hammer.on("panmove",function(l){s.body.eventListeners.onDrag(l)}),this.hammer.on("panend",function(l){s.body.eventListeners.onDragEnd(l)}),this.hammer.on("pinch",function(l){s.body.eventListeners.onPinch(l)}),this.frame.canvas.addEventListener("wheel",function(l){s.body.eventListeners.onMouseWheel(l)}),this.frame.canvas.addEventListener("mousemove",function(l){s.body.eventListeners.onMouseMove(l)}),this.frame.canvas.addEventListener("contextmenu",function(l){s.body.eventListeners.onContext(l)}),this.hammerFrame=new d0(this.frame),c_(this.hammerFrame,function(l){s.body.eventListeners.onRelease(l)})}},{key:"setSize",value:function(){var s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.width,l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.height;s=this._prepareValue(s),l=this._prepareValue(l);var f=!1,g=this.frame.canvas.width,a=this.frame.canvas.height,u=this.pixelRatio;if(this._setPixelRatio(),s!=this.options.width||l!=this.options.height||this.frame.style.width!=s||this.frame.style.height!=l)this._getCameraState(u),this.frame.style.width=s,this.frame.style.height=l,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=s,this.options.height=l,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},f=!0;else{var p=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),O=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===p&&this.frame.canvas.height===O||this._getCameraState(u),this.frame.canvas.width!==p&&(this.frame.canvas.width=p,f=!0),this.frame.canvas.height!==O&&(this.frame.canvas.height=O,f=!0)}return f===!0&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(g/this.pixelRatio),oldHeight:Math.round(a/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,f}},{key:"getContext",value:function(){return this.frame.canvas.getContext("2d")}},{key:"_determinePixelRatio",value:function(){var s=this.getContext();if(s===void 0)throw new Error("Could not get canvax context");var l=1;return typeof window<"u"&&(l=window.devicePixelRatio||1),l/(s.webkitBackingStorePixelRatio||s.mozBackingStorePixelRatio||s.msBackingStorePixelRatio||s.oBackingStorePixelRatio||s.backingStorePixelRatio||1)}},{key:"_setPixelRatio",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:"setTransform",value:function(){var s=this.getContext();if(s===void 0)throw new Error("Could not get canvax context");s.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:"_XconvertDOMtoCanvas",value:function(s){return(s-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(s){return s*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(s){return(s-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(s){return s*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(s){return{x:this._XconvertCanvasToDOM(s.x),y:this._YconvertCanvasToDOM(s.y)}}},{key:"DOMtoCanvas",value:function(s){return{x:this._XconvertDOMtoCanvas(s.x),y:this._YconvertDOMtoCanvas(s.y)}}}]),m}(),ES=function(){function m(s,l){var f,g,a=this;rr(this,m),this.body=s,this.canvas=l,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on("fit",Vt(f=this.fit).call(f,this)),this.body.emitter.on("animationFinished",function(){a.body.emitter.emit("_stopRendering")}),this.body.emitter.on("unlockNode",Vt(g=this.releaseNode).call(g,this))}return nr(m,[{key:"setOptions",value:function(){var s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.options=s}},{key:"fit",value:function(s){var l=arguments.length>1&&arguments[1]!==void 0&&arguments[1];s=function(ee,pe){var be=Po({nodes:pe,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},ee??{});if(!zn(be.nodes))throw new TypeError("Nodes has to be an array of ids.");if(be.nodes.length===0&&(be.nodes=pe),!(typeof be.minZoomLevel=="number"&&be.minZoomLevel>0))throw new TypeError("Min zoom level has to be a number higher than zero.");if(!(typeof be.maxZoomLevel=="number"&&be.minZoomLevel<=be.maxZoomLevel))throw new TypeError("Max zoom level has to be a number higher than min zoom level.");return be}(s,this.body.nodeIndices);var f,g,a=this.canvas.frame.canvas.clientWidth,u=this.canvas.frame.canvas.clientHeight;if(a===0||u===0)g=1,f=Ts.getRange(this.body.nodes,s.nodes);else if(l===!0){var p=0;for(var O in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,O)&&this.body.nodes[O].predefinedPosition===!0&&(p+=1);if(p>.5*this.body.nodeIndices.length)return void this.fit(s,!1);f=Ts.getRange(this.body.nodes,s.nodes),g=12.662/(this.body.nodeIndices.length+7.4147)+.0964822,g*=Math.min(a/600,u/600)}else{this.body.emitter.emit("_resizeNodes"),f=Ts.getRange(this.body.nodes,s.nodes);var P=a/(1.1*Math.abs(f.maxX-f.minX)),z=u/(1.1*Math.abs(f.maxY-f.minY));g=P<=z?P:z}g>s.maxZoomLevel?g=s.maxZoomLevel:g1&&arguments[1]!==void 0?arguments[1]:{};if(this.body.nodes[s]!==void 0){var f={x:this.body.nodes[s].x,y:this.body.nodes[s].y};l.position=f,l.lockedOnNode=s,this.moveTo(l)}else console.error("Node: "+s+" cannot be found.")}},{key:"moveTo",value:function(s){if(s!==void 0){if(s.offset!=null){if(s.offset.x!=null){if(s.offset.x=+s.offset.x,!Tp(s.offset.x))throw new TypeError('The option "offset.x" has to be a finite number.')}else s.offset.x=0;if(s.offset.y!=null){if(s.offset.y=+s.offset.y,!Tp(s.offset.y))throw new TypeError('The option "offset.y" has to be a finite number.')}else s.offset.x=0}else s.offset={x:0,y:0};if(s.position!=null){if(s.position.x!=null){if(s.position.x=+s.position.x,!Tp(s.position.x))throw new TypeError('The option "position.x" has to be a finite number.')}else s.position.x=0;if(s.position.y!=null){if(s.position.y=+s.position.y,!Tp(s.position.y))throw new TypeError('The option "position.y" has to be a finite number.')}else s.position.x=0}else s.position=this.getViewPosition();if(s.scale!=null){if(s.scale=+s.scale,!(s.scale>0))throw new TypeError('The option "scale" has to be a number greater than zero.')}else s.scale=this.body.view.scale;s.animation===void 0&&(s.animation={duration:0}),s.animation===!1&&(s.animation={duration:0}),s.animation===!0&&(s.animation={}),s.animation.duration===void 0&&(s.animation.duration=1e3),s.animation.easingFunction===void 0&&(s.animation.easingFunction="easeInOutQuad"),this.animateView(s)}else s={}}},{key:"animateView",value:function(s){if(s!==void 0){this.animationEasingFunction=s.animation.easingFunction,this.releaseNode(),s.locked===!0&&(this.lockedOnNodeId=s.lockedOnNode,this.lockedOnNodeOffset=s.offset),this.easingTime!=0&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=s.scale,this.body.view.scale=this.targetScale;var l,f,g=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),a=g.x-s.position.x,u=g.y-s.position.y;this.targetTranslation={x:this.sourceTranslation.x+a*this.targetScale+s.offset.x,y:this.sourceTranslation.y+u*this.targetScale+s.offset.y},s.animation.duration===0?this.lockedOnNodeId!=null?(this.viewFunction=Vt(l=this._lockedRedraw).call(l,this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*s.animation.duration*.001)||1/60,this.animationEasingFunction=s.animation.easingFunction,this.viewFunction=Vt(f=this._transitionRedraw).call(f,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}}},{key:"_lockedRedraw",value:function(){var s=this.body.nodes[this.lockedOnNodeId].x,l=this.body.nodes[this.lockedOnNodeId].y,f=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),g=f.x-s,a=f.y-l,u=this.body.view.translation,p={x:u.x+g*this.body.view.scale+this.lockedOnNodeOffset.x,y:u.y+a*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=p}},{key:"releaseNode",value:function(){this.lockedOnNodeId!==void 0&&this.viewFunction!==void 0&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var s=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=s===!0?1:this.easingTime;var l=Fd[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*l,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*l,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*l},this.easingTime>=1){var f;this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,this.lockedOnNodeId!=null&&(this.viewFunction=Vt(f=this._lockedRedraw).call(f,this),this.body.emitter.on("initRedraw",this.viewFunction)),this.body.emitter.emit("animationFinished")}}},{key:"getScale",value:function(){return this.body.view.scale}},{key:"getViewPosition",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),m}();function z0(m){var s,l=m&&m.preventDefault||!1,f=m&&m.container||window,g={},a={keydown:{},keyup:{}},u={};for(s=97;s<=122;s++)u[String.fromCharCode(s)]={code:s-97+65,shift:!1};for(s=65;s<=90;s++)u[String.fromCharCode(s)]={code:s,shift:!0};for(s=0;s<=9;s++)u[""+s]={code:48+s,shift:!1};for(s=1;s<=12;s++)u["F"+s]={code:111+s,shift:!1};for(s=0;s<=9;s++)u["num"+s]={code:96+s,shift:!1};u["num*"]={code:106,shift:!1},u["num+"]={code:107,shift:!1},u["num-"]={code:109,shift:!1},u["num/"]={code:111,shift:!1},u["num."]={code:110,shift:!1},u.left={code:37,shift:!1},u.up={code:38,shift:!1},u.right={code:39,shift:!1},u.down={code:40,shift:!1},u.space={code:32,shift:!1},u.enter={code:13,shift:!1},u.shift={code:16,shift:void 0},u.esc={code:27,shift:!1},u.backspace={code:8,shift:!1},u.tab={code:9,shift:!1},u.ctrl={code:17,shift:!1},u.alt={code:18,shift:!1},u.delete={code:46,shift:!1},u.pageup={code:33,shift:!1},u.pagedown={code:34,shift:!1},u["="]={code:187,shift:!1},u["-"]={code:189,shift:!1},u["]"]={code:221,shift:!1},u["["]={code:219,shift:!1};var p=function(z){P(z,"keydown")},O=function(z){P(z,"keyup")},P=function(z,H){if(a[H][z.keyCode]!==void 0){for(var ee=a[H][z.keyCode],pe=0;pe700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=new Date().valueOf())}},{key:"_stopMovement",value:function(){for(var s in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,s)&&(this.body.emitter.off("initRedraw",this.boundFunctions[s]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}},{key:"_moveUp",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:"_moveDown",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:"_moveLeft",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:"_moveRight",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:"_zoomIn",value:function(){var s=this.body.view.scale,l=this.body.view.scale*(1+this.options.keyboard.speed.zoom),f=this.body.view.translation,g=l/s,a=(1-g)*this.canvas.canvasViewCenter.x+f.x*g,u=(1-g)*this.canvas.canvasViewCenter.y+f.y*g;this.body.view.scale=l,this.body.view.translation={x:a,y:u},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}},{key:"_zoomOut",value:function(){var s=this.body.view.scale,l=this.body.view.scale/(1+this.options.keyboard.speed.zoom),f=this.body.view.translation,g=l/s,a=(1-g)*this.canvas.canvasViewCenter.x+f.x*g,u=(1-g)*this.canvas.canvasViewCenter.y+f.y*g;this.body.view.scale=l,this.body.view.translation={x:a,y:u},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}},{key:"configureKeyboardBindings",value:function(){var s,l,f,g,a,u,p,O,P,z,H,ee,pe,be,Ae,Qe,$e,mt,It,Ct,qe,Fe,Ge,pt,ft=this;this.keycharm!==void 0&&this.keycharm.destroy(),this.options.keyboard.enabled===!0&&(this.options.keyboard.bindToWindow===!0?this.keycharm=z0({container:window,preventDefault:!0}):this.keycharm=z0({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),this.activated===!0&&(Vt(s=this.keycharm).call(s,"up",function(){ft.bindToRedraw("_moveUp")},"keydown"),Vt(l=this.keycharm).call(l,"down",function(){ft.bindToRedraw("_moveDown")},"keydown"),Vt(f=this.keycharm).call(f,"left",function(){ft.bindToRedraw("_moveLeft")},"keydown"),Vt(g=this.keycharm).call(g,"right",function(){ft.bindToRedraw("_moveRight")},"keydown"),Vt(a=this.keycharm).call(a,"=",function(){ft.bindToRedraw("_zoomIn")},"keydown"),Vt(u=this.keycharm).call(u,"num+",function(){ft.bindToRedraw("_zoomIn")},"keydown"),Vt(p=this.keycharm).call(p,"num-",function(){ft.bindToRedraw("_zoomOut")},"keydown"),Vt(O=this.keycharm).call(O,"-",function(){ft.bindToRedraw("_zoomOut")},"keydown"),Vt(P=this.keycharm).call(P,"[",function(){ft.bindToRedraw("_zoomOut")},"keydown"),Vt(z=this.keycharm).call(z,"]",function(){ft.bindToRedraw("_zoomIn")},"keydown"),Vt(H=this.keycharm).call(H,"pageup",function(){ft.bindToRedraw("_zoomIn")},"keydown"),Vt(ee=this.keycharm).call(ee,"pagedown",function(){ft.bindToRedraw("_zoomOut")},"keydown"),Vt(pe=this.keycharm).call(pe,"up",function(){ft.unbindFromRedraw("_moveUp")},"keyup"),Vt(be=this.keycharm).call(be,"down",function(){ft.unbindFromRedraw("_moveDown")},"keyup"),Vt(Ae=this.keycharm).call(Ae,"left",function(){ft.unbindFromRedraw("_moveLeft")},"keyup"),Vt(Qe=this.keycharm).call(Qe,"right",function(){ft.unbindFromRedraw("_moveRight")},"keyup"),Vt($e=this.keycharm).call($e,"=",function(){ft.unbindFromRedraw("_zoomIn")},"keyup"),Vt(mt=this.keycharm).call(mt,"num+",function(){ft.unbindFromRedraw("_zoomIn")},"keyup"),Vt(It=this.keycharm).call(It,"num-",function(){ft.unbindFromRedraw("_zoomOut")},"keyup"),Vt(Ct=this.keycharm).call(Ct,"-",function(){ft.unbindFromRedraw("_zoomOut")},"keyup"),Vt(qe=this.keycharm).call(qe,"[",function(){ft.unbindFromRedraw("_zoomOut")},"keyup"),Vt(Fe=this.keycharm).call(Fe,"]",function(){ft.unbindFromRedraw("_zoomIn")},"keyup"),Vt(Ge=this.keycharm).call(Ge,"pageup",function(){ft.unbindFromRedraw("_zoomIn")},"keyup"),Vt(pt=this.keycharm).call(pt,"pagedown",function(){ft.unbindFromRedraw("_zoomOut")},"keyup")))}}]),m}();function J1(m,s){var l=su!==void 0&&Jh(m)||m["@@iterator"];if(!l){if(zn(m)||(l=function(O,P){var z;if(O){if(typeof O=="string")return If(O,P);var H=ri(z=Object.prototype.toString.call(O)).call(z,8,-1);if(H==="Object"&&O.constructor&&(H=O.constructor.name),H==="Map"||H==="Set")return Ed(O);if(H==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(H))return If(O,P)}}(m))||s&&m&&typeof m.length=="number"){l&&(m=l);var f=0,g=function(){};return{s:g,n:function(){return f>=m.length?{done:!0}:{done:!1,value:m[f++]}},e:function(O){throw O},f:g}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,u=!0,p=!1;return{s:function(){l=l.call(m)},n:function(){var O=l.next();return u=O.done,O},e:function(O){p=!0,a=O},f:function(){try{u||l.return==null||l.return()}finally{if(p)throw a}}}}function If(m,s){(s==null||s>m.length)&&(s=m.length);for(var l=0,f=new Array(s);l50&&(this.drag.pointer=this.getPointer(s.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=new Date().valueOf())}},{key:"onTap",value:function(s){var l=this.getPointer(s.center),f=this.selectionHandler.options.multiselect&&(s.changedPointers[0].ctrlKey||s.changedPointers[0].metaKey);this.checkSelectionChanges(l,f),this.selectionHandler.commitAndEmit(l,s),this.selectionHandler.generateClickEvent("click",s,l)}},{key:"onDoubleTap",value:function(s){var l=this.getPointer(s.center);this.selectionHandler.generateClickEvent("doubleClick",s,l)}},{key:"onHold",value:function(s){var l=this.getPointer(s.center),f=this.selectionHandler.options.multiselect;this.checkSelectionChanges(l,f),this.selectionHandler.commitAndEmit(l,s),this.selectionHandler.generateClickEvent("click",s,l),this.selectionHandler.generateClickEvent("hold",s,l)}},{key:"onRelease",value:function(s){if(new Date().valueOf()-this.touchTime>10){var l=this.getPointer(s.center);this.selectionHandler.generateClickEvent("release",s,l),this.touchTime=new Date().valueOf()}}},{key:"onContext",value:function(s){var l=this.getPointer({x:s.clientX,y:s.clientY});this.selectionHandler.generateClickEvent("oncontext",s,l)}},{key:"checkSelectionChanges",value:function(s){(arguments.length>1&&arguments[1]!==void 0&&arguments[1])===!0?this.selectionHandler.selectAdditionalOnPoint(s):this.selectionHandler.selectOnPoint(s)}},{key:"_determineDifference",value:function(s,l){var f=function(g,a){for(var u=[],p=0;p=a.minX&&z.x<=a.maxX&&z.y>=a.minY&&z.y<=a.maxY});Do(u).call(u,function(P){return l.selectionHandler.selectObject(l.body.nodes[P])});var p=this.getPointer(s.center);this.selectionHandler.commitAndEmit(p,s),this.selectionHandler.generateClickEvent("dragEnd",s,this.getPointer(s.center),void 0,!0),this.body.emitter.emit("_requestRedraw")}else{var O=this.drag.selection;O&&O.length?(Do(O).call(O,function(P){P.node.options.fixed.x=P.xFixed,P.node.options.fixed.y=P.yFixed}),this.selectionHandler.generateClickEvent("dragEnd",s,this.getPointer(s.center)),this.body.emitter.emit("startSimulation")):(this.selectionHandler.generateClickEvent("dragEnd",s,this.getPointer(s.center),void 0,!0),this.body.emitter.emit("_requestRedraw"))}}},{key:"onPinch",value:function(s){var l=this.getPointer(s.center);this.drag.pinched=!0,this.pinch.scale===void 0&&(this.pinch.scale=1);var f=this.pinch.scale*s.scale;this.zoom(f,l)}},{key:"zoom",value:function(s,l){if(this.options.zoomView===!0){var f=this.body.view.scale;s<1e-5&&(s=1e-5),s>10&&(s=10);var g=void 0;this.drag!==void 0&&this.drag.dragging===!0&&(g=this.canvas.DOMtoCanvas(this.drag.pointer));var a=this.body.view.translation,u=s/f,p=(1-u)*l.x+a.x*u,O=(1-u)*l.y+a.y*u;if(this.body.view.scale=s,this.body.view.translation={x:p,y:O},g!=null){var P=this.canvas.canvasToDOM(g);this.drag.pointer.x=P.x,this.drag.pointer.y=P.y}this.body.emitter.emit("_requestRedraw"),f0&&(this.popupObj=z[H[H.length-1]],u=!0)}if(this.popupObj===void 0&&u===!1){for(var pe,be=this.body.edgeIndices,Ae=this.body.edges,Qe=[],$e=0;$e0&&(this.popupObj=Ae[Qe[Qe.length-1]],p="edge")}this.popupObj!==void 0?this.popupObj.id!==a&&(this.popup===void 0&&(this.popup=new k2(this.canvas.frame)),this.popup.popupTargetType=p,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(s.x+3,s.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit("showPopup",this.popupObj.id)):this.popup!==void 0&&(this.popup.hide(),this.body.emitter.emit("hidePopup"))}},{key:"_checkHidePopup",value:function(s){var l=this.selectionHandler._pointerToPositionObject(s),f=!1;if(this.popup.popupTargetType==="node"){if(this.body.nodes[this.popup.popupTargetId]!==void 0&&(f=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(l))===!0){var g=this.selectionHandler.getNodeAt(s);f=g!==void 0&&g.id===this.popup.popupTargetId}}else this.selectionHandler.getNodeAt(s)===void 0&&this.body.edges[this.popup.popupTargetId]!==void 0&&(f=this.body.edges[this.popup.popupTargetId].isOverlappingWith(l));f===!1&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit("hidePopup"))}}]),m}();L2("Set",function(m){return function(){return m(this,arguments.length?arguments[0]:void 0)}},Dx);var th=r(mr.Set),IS=X,wy=Ps,u3=y0.getWeakData,WO=qd,kS=Us,p_=Oo,X1=Dn,PS=nO,jS=Ui,Ga=ju.set,c3=ju.getterFor,jI=sa.find,d_=sa.findIndex,h_=IS([].splice),HO=0,As=function(m){return m.frozen||(m.frozen=new Ms)},Ms=function(){this.entries=[]},rc=function(m,s){return jI(m.entries,function(l){return l[0]===s})};Ms.prototype={get:function(m){var s=rc(this,m);if(s)return s[1]},has:function(m){return!!rc(this,m)},set:function(m,s){var l=rc(this,m);l?l[1]=s:this.entries.push([m,s])},delete:function(m){var s=d_(this.entries,function(l){return l[0]===m});return~s&&h_(this.entries,s,1),!!~s}};var K1,$O={getConstructor:function(m,s,l,f){var g=m(function(O,P){WO(O,a),Ga(O,{type:s,id:HO++,frozen:void 0}),p_(P)||PS(P,O[f],{that:O,AS_ENTRIES:l})}),a=g.prototype,u=c3(s),p=function(O,P,z){var H=u(O),ee=u3(kS(P),!0);return ee===!0?As(H).set(P,z):ee[H.id]=z,O};return wy(a,{delete:function(O){var P=u(this);if(!X1(O))return!1;var z=u3(O);return z===!0?As(P).delete(O):z&&jS(z,P.id)&&delete z[P.id]},has:function(O){var P=u(this);if(!X1(O))return!1;var z=u3(O);return z===!0?As(P).has(O):z&&jS(z,P.id)}}),wy(a,l?{get:function(O){var P=u(this);if(X1(O)){var z=u3(O);return z===!0?As(P).get(O):z?z[P.id]:void 0}},set:function(O,P){return p(this,O,P)}}:{add:function(O){return p(this,O,!0)}}),g}},f3=Pp,Oy=i,rh=X,p3=Ps,m_=y0,v_=L2,d3=$O,xy=Dn,_y=ju.enforce,g_=d,N0=vd,E=Object,M=Array.isArray,D=E.isExtensible,F=E.isFrozen,Q=E.isSealed,le=E.freeze,Oe=E.seal,we={},Se={},Be=!Oy.ActiveXObject&&"ActiveXObject"in Oy,Xe=function(m){return function(){return m(this,arguments.length?arguments[0]:void 0)}},et=v_("WeakMap",Xe,d3),jt=et.prototype,Wt=rh(jt.set);if(N0)if(Be){K1=d3.getConstructor(Xe,"WeakMap",!0),m_.enable();var dr=rh(jt.delete),cr=rh(jt.has),Dr=rh(jt.get);p3(jt,{delete:function(m){if(xy(m)&&!D(m)){var s=_y(this);return s.frozen||(s.frozen=new K1),dr(this,m)||s.frozen.delete(m)}return dr(this,m)},has:function(m){if(xy(m)&&!D(m)){var s=_y(this);return s.frozen||(s.frozen=new K1),cr(this,m)||s.frozen.has(m)}return cr(this,m)},get:function(m){if(xy(m)&&!D(m)){var s=_y(this);return s.frozen||(s.frozen=new K1),cr(this,m)?Dr(this,m):s.frozen.get(m)}return Dr(this,m)},set:function(m,s){if(xy(m)&&!D(m)){var l=_y(this);l.frozen||(l.frozen=new K1),cr(this,m)?Wt(this,m,s):l.frozen.set(m,s)}else Wt(this,m,s);return this}})}else f3&&g_(function(){var m=le([]);return Wt(new et,m,1),!F(m)})&&p3(jt,{set:function(m,s){var l;return M(m)&&(F(m)?l=we:Q(m)&&(l=Se)),Wt(this,m,s),l===we&&le(m),l===Se&&Oe(m),this}});var en,jr,po,ho,zo,ta=r(mr.WeakMap);function io(m,s,l,f){if(l==="a"&&!f)throw new TypeError("Private accessor was defined without a getter");if(typeof s=="function"?m!==s||!f:!s.has(m))throw new TypeError("Cannot read private member from an object whose class did not declare it");return l==="m"?f:l==="a"?f.call(m):f?f.value:s.get(m)}function Rs(m,s,l,f,g){if(f==="m")throw new TypeError("Private method is not writable");if(f==="a"&&!g)throw new TypeError("Private accessor was defined without a setter");if(typeof s=="function"?m!==s||!g:!s.has(m))throw new TypeError("Cannot write private member to an object whose class did not declare it");return f==="a"?g.call(m,l):g?g.value=l:s.set(m,l),l}function Ds(m,s){var l=su!==void 0&&Jh(m)||m["@@iterator"];if(!l){if(zn(m)||(l=function(O,P){var z;if(O){if(typeof O=="string")return kf(O,P);var H=ri(z=Object.prototype.toString.call(O)).call(z,8,-1);if(H==="Object"&&O.constructor&&(H=O.constructor.name),H==="Map"||H==="Set")return Ed(O);if(H==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(H))return kf(O,P)}}(m))||s&&m&&typeof m.length=="number"){l&&(m=l);var f=0,g=function(){};return{s:g,n:function(){return f>=m.length?{done:!0}:{done:!1,value:m[f++]}},e:function(O){throw O},f:g}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,u=!0,p=!1;return{s:function(){l=l.call(m)},n:function(){var O=l.next();return u=O.done,O},e:function(O){p=!0,a=O},f:function(){try{u||l.return==null||l.return()}finally{if(p)throw a}}}}function kf(m,s){(s==null||s>m.length)&&(s=m.length);for(var l=0,f=new Array(s);l0&&arguments[0]!==void 0?arguments[0]:function(){};rr(this,m),po.set(this,new nh),ho.set(this,new nh),zo.set(this,void 0),Rs(this,zo,s,"f")}return nr(m,[{key:"sizeNodes",get:function(){return io(this,po,"f").size}},{key:"sizeEdges",get:function(){return io(this,ho,"f").size}},{key:"getNodes",value:function(){return io(this,po,"f").getSelection()}},{key:"getEdges",value:function(){return io(this,ho,"f").getSelection()}},{key:"addNodes",value:function(){var s;(s=io(this,po,"f")).add.apply(s,arguments)}},{key:"addEdges",value:function(){var s;(s=io(this,ho,"f")).add.apply(s,arguments)}},{key:"deleteNodes",value:function(s){io(this,po,"f").delete(s)}},{key:"deleteEdges",value:function(s){io(this,ho,"f").delete(s)}},{key:"clear",value:function(){io(this,po,"f").clear(),io(this,ho,"f").clear()}},{key:"commit",value:function(){for(var s,l,f={nodes:io(this,po,"f").commit(),edges:io(this,ho,"f").commit()},g=arguments.length,a=new Array(g),u=0;u=m.length?{done:!0}:{done:!1,value:m[f++]}},e:function(O){throw O},f:g}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,u=!0,p=!1;return{s:function(){l=l.call(m)},n:function(){var O=l.next();return u=O.done,O},e:function(O){p=!0,a=O},f:function(){try{u||l.return==null||l.return()}finally{if(p)throw a}}}}function h3(m,s){(s==null||s>m.length)&&(s=m.length);for(var l=0,f=new Array(s);l4&&arguments[4]!==void 0&&arguments[4],u=this._initBaseEvent(l,f);if(a===!0)u.nodes=[],u.edges=[];else{var p=this.getSelection();u.nodes=p.nodes,u.edges=p.edges}g!==void 0&&(u.previousSelection=g),s=="click"&&(u.items=this.getClickedItems(f)),l.controlEdge!==void 0&&(u.controlEdge=l.controlEdge),this.body.emitter.emit(s,u)}},{key:"selectObject",value:function(s){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.selectConnectedEdges;if(s!==void 0){if(s instanceof To){var f;l===!0&&(f=this._selectionAccumulator).addEdges.apply(f,df(s.edges)),this._selectionAccumulator.addNodes(s)}else this._selectionAccumulator.addEdges(s);return!0}return!1}},{key:"deselectObject",value:function(s){s.isSelected()===!0&&(s.selected=!1,this._removeFromSelection(s))}},{key:"_getAllNodesOverlappingWith",value:function(s){for(var l=[],f=this.body.nodes,g=0;g1&&arguments[1]!==void 0)||arguments[1],f=this._pointerToPositionObject(s),g=this._getAllNodesOverlappingWith(f);return g.length>0?l===!0?this.body.nodes[g[g.length-1]]:g[g.length-1]:void 0}},{key:"_getEdgesOverlappingWith",value:function(s,l){for(var f=this.body.edges,g=0;g1&&arguments[1]!==void 0)||arguments[1],f=this.canvas.DOMtoCanvas(s),g=10,a=null,u=this.body.edges,p=0;p0&&(this.generateClickEvent("deselectEdge",l,s,a),f=!0),g.nodes.deleted.length>0&&(this.generateClickEvent("deselectNode",l,s,a),f=!0),g.nodes.added.length>0&&(this.generateClickEvent("selectNode",l,s),f=!0),g.edges.added.length>0&&(this.generateClickEvent("selectEdge",l,s),f=!0),f===!0&&this.generateClickEvent("select",l,s)}},{key:"getSelection",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:"getSelectedNodes",value:function(){return this._selectionAccumulator.getNodes()}},{key:"getSelectedEdges",value:function(){return this._selectionAccumulator.getEdges()}},{key:"getSelectedNodeIds",value:function(){var s;return Ad(s=this._selectionAccumulator.getNodes()).call(s,function(l){return l.id})}},{key:"getSelectedEdgeIds",value:function(){var s;return Ad(s=this._selectionAccumulator.getEdges()).call(s,function(l){return l.id})}},{key:"setSelection",value:function(s){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!s||!s.nodes&&!s.edges)throw new TypeError("Selection must be an object with nodes and/or edges properties");if((l.unselectAll||l.unselectAll===void 0)&&this.unselectAll(),s.nodes){var f,g=VO(s.nodes);try{for(g.s();!(f=g.n()).done;){var a=f.value,u=this.body.nodes[a];if(!u)throw new RangeError('Node with id "'+a+'" not found');this.selectObject(u,l.highlightEdges)}}catch(H){g.e(H)}finally{g.f()}}if(s.edges){var p,O=VO(s.edges);try{for(O.s();!(p=O.n()).done;){var P=p.value,z=this.body.edges[P];if(!z)throw new RangeError('Edge with id "'+P+'" not found');this.selectObject(z)}}catch(H){O.e(H)}finally{O.f()}}this.body.emitter.emit("_requestRedraw"),this._selectionAccumulator.commit()}},{key:"selectNodes",value:function(s){var l=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];if(!s||s.length===void 0)throw"Selection must be an array with ids";this.setSelection({nodes:s},{highlightEdges:l})}},{key:"selectEdges",value:function(s){if(!s||s.length===void 0)throw"Selection must be an array with ids";this.setSelection({edges:s})}},{key:"updateSelection",value:function(){for(var s in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,s.id)||this._selectionAccumulator.deleteNodes(s);for(var l in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,l.id)||this._selectionAccumulator.deleteEdges(l)}},{key:"getClickedItems",value:function(s){for(var l=this.canvas.DOMtoCanvas(s),f=[],g=this.body.nodeIndices,a=this.body.nodes,u=g.length-1;u>=0;u--){var p=a[g[u]].getItemsOnPoint(l);f.push.apply(f,p)}for(var O=this.body.edgeIndices,P=this.body.edges,z=O.length-1;z>=0;z--){var H=P[O[z]].getItemsOnPoint(l);f.push.apply(f,H)}return f}}]),m}(),Ey=a6,fn=Math.floor,ra=function(m,s){var l=m.length,f=fn(l/2);return l<8?Ca(m,s):Ta(m,ra(Ey(m,0,f),s),ra(Ey(m,f),s),s)},Ca=function(m,s){for(var l,f,g=m.length,a=1;a0;)m[f]=m[--f];f!==a++&&(m[f]=l)}return m},Ta=function(m,s,l,f){for(var g=s.length,a=l.length,u=0,p=0;u3)){if(Pf)return!0;if(CS)return CS<603;var m,s,l,f,g="";for(m=65;m<76;m++){switch(s=String.fromCharCode(m),m){case 66:case 69:case 70:case 72:l=3;break;case 68:case 71:l=4;break;default:l=2}for(f=0;f<47;f++)F0.push({k:s+f,v:l})}for(F0.sort(function(a,u){return u.v-a.v}),f=0;fZt(O)?1:-1}}(m)),l=qr(g),f=0;f=0:p>O;O+=P)O in u&&(g=l(g,u[O],O,a));return g}},aP={left:CI(!1),right:CI(!0)},RS=ye(i.process)==="process",DS=aP.left;Pr({target:"Array",proto:!0,forced:!RS&&Hs>79&&Hs<83||!gp("reduce")},{reduce:function(m){var s=arguments.length;return DS(this,m,s,s>1?arguments[1]:void 0)}});var GO=fi("Array").reduce,TI=Mn,Tc=GO,g3=Array.prototype,KC=function(m){var s=m.reduce;return m===g3||TI(g3,m)&&s===g3.reduce?Tc:s},AI=r(KC);function MI(m){var s=function(){if(typeof Reflect>"u"||!At||At.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(At(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=At(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var zS=function(){function m(){rr(this,m)}return nr(m,[{key:"abstract",value:function(){throw new Error("Can't instantiate abstract class!")}},{key:"fake_use",value:function(){}},{key:"curveType",value:function(){return this.abstract()}},{key:"getPosition",value:function(s){return this.fake_use(s),this.abstract()}},{key:"setPosition",value:function(s,l){var f=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;this.fake_use(s,l,f),this.abstract()}},{key:"getTreeSize",value:function(s){return this.fake_use(s),this.abstract()}},{key:"sort",value:function(s){this.fake_use(s),this.abstract()}},{key:"fix",value:function(s,l){this.fake_use(s,l),this.abstract()}},{key:"shift",value:function(s,l){this.fake_use(s,l),this.abstract()}}]),m}(),Py=function(m){Hn(l,m);var s=MI(l);function l(f){var g;return rr(this,l),(g=s.call(this)).layout=f,g}return nr(l,[{key:"curveType",value:function(){return"horizontal"}},{key:"getPosition",value:function(f){return f.x}},{key:"setPosition",value:function(f,g){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;a!==void 0&&this.layout.hierarchical.addToOrdering(f,a),f.x=g}},{key:"getTreeSize",value:function(f){var g=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,f);return{min:g.min_x,max:g.max_x}}},{key:"sort",value:function(f){Z1(f).call(f,function(g,a){return g.x-a.x})}},{key:"fix",value:function(f,g){f.y=this.layout.options.hierarchical.levelSeparation*g,f.options.fixed.y=!0}},{key:"shift",value:function(f,g){this.layout.body.nodes[f].x+=g}}]),l}(zS),YC=function(m){Hn(l,m);var s=MI(l);function l(f){var g;return rr(this,l),(g=s.call(this)).layout=f,g}return nr(l,[{key:"curveType",value:function(){return"vertical"}},{key:"getPosition",value:function(f){return f.y}},{key:"setPosition",value:function(f,g){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;a!==void 0&&this.layout.hierarchical.addToOrdering(f,a),f.y=g}},{key:"getTreeSize",value:function(f){var g=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,f);return{min:g.min_y,max:g.max_y}}},{key:"sort",value:function(f){Z1(f).call(f,function(g,a){return g.y-a.y})}},{key:"fix",value:function(f,g){f.x=this.layout.options.hierarchical.levelSeparation*g,f.options.fixed.x=!0}},{key:"shift",value:function(f,g){this.layout.body.nodes[f].y+=g}}]),l}(zS),sP=sa.every;Pr({target:"Array",proto:!0,forced:!gp("every")},{every:function(m){return sP(this,m,arguments.length>1?arguments[1]:void 0)}});var jy=fi("Array").every,QC=Mn,lP=jy,w_=Array.prototype,NS=function(m){var s=m.every;return m===w_||QC(w_,m)&&s===w_.every?lP:s},ev=r(NS);function RI(m,s){var l=su!==void 0&&Jh(m)||m["@@iterator"];if(!l){if(zn(m)||(l=function(O,P){var z;if(O){if(typeof O=="string")return uP(O,P);var H=ri(z=Object.prototype.toString.call(O)).call(z,8,-1);if(H==="Object"&&O.constructor&&(H=O.constructor.name),H==="Map"||H==="Set")return Ed(O);if(H==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(H))return uP(O,P)}}(m))||s&&m&&typeof m.length=="number"){l&&(m=l);var f=0,g=function(){};return{s:g,n:function(){return f>=m.length?{done:!0}:{done:!1,value:m[f++]}},e:function(O){throw O},f:g}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,u=!0,p=!1;return{s:function(){l=l.call(m)},n:function(){var O=l.next();return u=O.done,O},e:function(O){p=!0,a=O},f:function(){try{u||l.return==null||l.return()}finally{if(p)throw a}}}}function h3(m,s){(s==null||s>m.length)&&(s=m.length);for(var l=0,f=new Array(s);l4&&arguments[4]!==void 0&&arguments[4],u=this._initBaseEvent(l,f);if(a===!0)u.nodes=[],u.edges=[];else{var p=this.getSelection();u.nodes=p.nodes,u.edges=p.edges}g!==void 0&&(u.previousSelection=g),s=="click"&&(u.items=this.getClickedItems(f)),l.controlEdge!==void 0&&(u.controlEdge=l.controlEdge),this.body.emitter.emit(s,u)}},{key:"selectObject",value:function(s){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.selectConnectedEdges;if(s!==void 0){if(s instanceof To){var f;l===!0&&(f=this._selectionAccumulator).addEdges.apply(f,df(s.edges)),this._selectionAccumulator.addNodes(s)}else this._selectionAccumulator.addEdges(s);return!0}return!1}},{key:"deselectObject",value:function(s){s.isSelected()===!0&&(s.selected=!1,this._removeFromSelection(s))}},{key:"_getAllNodesOverlappingWith",value:function(s){for(var l=[],f=this.body.nodes,g=0;g1&&arguments[1]!==void 0)||arguments[1],f=this._pointerToPositionObject(s),g=this._getAllNodesOverlappingWith(f);return g.length>0?l===!0?this.body.nodes[g[g.length-1]]:g[g.length-1]:void 0}},{key:"_getEdgesOverlappingWith",value:function(s,l){for(var f=this.body.edges,g=0;g1&&arguments[1]!==void 0)||arguments[1],f=this.canvas.DOMtoCanvas(s),g=10,a=null,u=this.body.edges,p=0;p0&&(this.generateClickEvent("deselectEdge",l,s,a),f=!0),g.nodes.deleted.length>0&&(this.generateClickEvent("deselectNode",l,s,a),f=!0),g.nodes.added.length>0&&(this.generateClickEvent("selectNode",l,s),f=!0),g.edges.added.length>0&&(this.generateClickEvent("selectEdge",l,s),f=!0),f===!0&&this.generateClickEvent("select",l,s)}},{key:"getSelection",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:"getSelectedNodes",value:function(){return this._selectionAccumulator.getNodes()}},{key:"getSelectedEdges",value:function(){return this._selectionAccumulator.getEdges()}},{key:"getSelectedNodeIds",value:function(){var s;return Ad(s=this._selectionAccumulator.getNodes()).call(s,function(l){return l.id})}},{key:"getSelectedEdgeIds",value:function(){var s;return Ad(s=this._selectionAccumulator.getEdges()).call(s,function(l){return l.id})}},{key:"setSelection",value:function(s){var l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!s||!s.nodes&&!s.edges)throw new TypeError("Selection must be an object with nodes and/or edges properties");if((l.unselectAll||l.unselectAll===void 0)&&this.unselectAll(),s.nodes){var f,g=VO(s.nodes);try{for(g.s();!(f=g.n()).done;){var a=f.value,u=this.body.nodes[a];if(!u)throw new RangeError('Node with id "'+a+'" not found');this.selectObject(u,l.highlightEdges)}}catch(H){g.e(H)}finally{g.f()}}if(s.edges){var p,O=VO(s.edges);try{for(O.s();!(p=O.n()).done;){var P=p.value,z=this.body.edges[P];if(!z)throw new RangeError('Edge with id "'+P+'" not found');this.selectObject(z)}}catch(H){O.e(H)}finally{O.f()}}this.body.emitter.emit("_requestRedraw"),this._selectionAccumulator.commit()}},{key:"selectNodes",value:function(s){var l=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];if(!s||s.length===void 0)throw"Selection must be an array with ids";this.setSelection({nodes:s},{highlightEdges:l})}},{key:"selectEdges",value:function(s){if(!s||s.length===void 0)throw"Selection must be an array with ids";this.setSelection({edges:s})}},{key:"updateSelection",value:function(){for(var s in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,s.id)||this._selectionAccumulator.deleteNodes(s);for(var l in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,l.id)||this._selectionAccumulator.deleteEdges(l)}},{key:"getClickedItems",value:function(s){for(var l=this.canvas.DOMtoCanvas(s),f=[],g=this.body.nodeIndices,a=this.body.nodes,u=g.length-1;u>=0;u--){var p=a[g[u]].getItemsOnPoint(l);f.push.apply(f,p)}for(var O=this.body.edgeIndices,P=this.body.edges,z=O.length-1;z>=0;z--){var H=P[O[z]].getItemsOnPoint(l);f.push.apply(f,H)}return f}}]),m}(),Ey=a6,fn=Math.floor,ra=function(m,s){var l=m.length,f=fn(l/2);return l<8?Ca(m,s):Ta(m,ra(Ey(m,0,f),s),ra(Ey(m,f),s),s)},Ca=function(m,s){for(var l,f,g=m.length,a=1;a0;)m[f]=m[--f];f!==a++&&(m[f]=l)}return m},Ta=function(m,s,l,f){for(var g=s.length,a=l.length,u=0,p=0;u3)){if(Pf)return!0;if(CS)return CS<603;var m,s,l,f,g="";for(m=65;m<76;m++){switch(s=String.fromCharCode(m),m){case 66:case 69:case 70:case 72:l=3;break;case 68:case 71:l=4;break;default:l=2}for(f=0;f<47;f++)F0.push({k:s+f,v:l})}for(F0.sort(function(a,u){return u.v-a.v}),f=0;fZt(O)?1:-1}}(m)),l=qr(g),f=0;f=0:p>O;O+=P)O in u&&(g=l(g,u[O],O,a));return g}},aP={left:CI(!1),right:CI(!0)},RS=ye(i.process)==="process",DS=aP.left;Pr({target:"Array",proto:!0,forced:!RS&&Hs>79&&Hs<83||!gp("reduce")},{reduce:function(m){var s=arguments.length;return DS(this,m,s,s>1?arguments[1]:void 0)}});var GO=fi("Array").reduce,TI=Mn,Tc=GO,g3=Array.prototype,KC=function(m){var s=m.reduce;return m===g3||TI(g3,m)&&s===g3.reduce?Tc:s},AI=r(KC);function MI(m){var s=function(){if(typeof Reflect>"u"||!Mt||Mt.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Mt(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var l,f=Er(m);if(s){var g=Er(this).constructor;l=Mt(f,arguments,g)}else l=f.apply(this,arguments);return Eo(this,l)}}var zS=function(){function m(){rr(this,m)}return nr(m,[{key:"abstract",value:function(){throw new Error("Can't instantiate abstract class!")}},{key:"fake_use",value:function(){}},{key:"curveType",value:function(){return this.abstract()}},{key:"getPosition",value:function(s){return this.fake_use(s),this.abstract()}},{key:"setPosition",value:function(s,l){var f=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;this.fake_use(s,l,f),this.abstract()}},{key:"getTreeSize",value:function(s){return this.fake_use(s),this.abstract()}},{key:"sort",value:function(s){this.fake_use(s),this.abstract()}},{key:"fix",value:function(s,l){this.fake_use(s,l),this.abstract()}},{key:"shift",value:function(s,l){this.fake_use(s,l),this.abstract()}}]),m}(),Py=function(m){Hn(l,m);var s=MI(l);function l(f){var g;return rr(this,l),(g=s.call(this)).layout=f,g}return nr(l,[{key:"curveType",value:function(){return"horizontal"}},{key:"getPosition",value:function(f){return f.x}},{key:"setPosition",value:function(f,g){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;a!==void 0&&this.layout.hierarchical.addToOrdering(f,a),f.x=g}},{key:"getTreeSize",value:function(f){var g=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,f);return{min:g.min_x,max:g.max_x}}},{key:"sort",value:function(f){Z1(f).call(f,function(g,a){return g.x-a.x})}},{key:"fix",value:function(f,g){f.y=this.layout.options.hierarchical.levelSeparation*g,f.options.fixed.y=!0}},{key:"shift",value:function(f,g){this.layout.body.nodes[f].x+=g}}]),l}(zS),YC=function(m){Hn(l,m);var s=MI(l);function l(f){var g;return rr(this,l),(g=s.call(this)).layout=f,g}return nr(l,[{key:"curveType",value:function(){return"vertical"}},{key:"getPosition",value:function(f){return f.y}},{key:"setPosition",value:function(f,g){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;a!==void 0&&this.layout.hierarchical.addToOrdering(f,a),f.y=g}},{key:"getTreeSize",value:function(f){var g=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,f);return{min:g.min_y,max:g.max_y}}},{key:"sort",value:function(f){Z1(f).call(f,function(g,a){return g.y-a.y})}},{key:"fix",value:function(f,g){f.x=this.layout.options.hierarchical.levelSeparation*g,f.options.fixed.x=!0}},{key:"shift",value:function(f,g){this.layout.body.nodes[f].y+=g}}]),l}(zS),sP=sa.every;Pr({target:"Array",proto:!0,forced:!gp("every")},{every:function(m){return sP(this,m,arguments.length>1?arguments[1]:void 0)}});var jy=fi("Array").every,QC=Mn,lP=jy,w_=Array.prototype,NS=function(m){var s=m.every;return m===w_||QC(w_,m)&&s===w_.every?lP:s},ev=r(NS);function RI(m,s){var l=su!==void 0&&Jh(m)||m["@@iterator"];if(!l){if(zn(m)||(l=function(O,P){var z;if(O){if(typeof O=="string")return uP(O,P);var H=ri(z=Object.prototype.toString.call(O)).call(z,8,-1);if(H==="Object"&&O.constructor&&(H=O.constructor.name),H==="Map"||H==="Set")return Ed(O);if(H==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(H))return uP(O,P)}}(m))||s&&m&&typeof m.length=="number"){l&&(m=l);var f=0,g=function(){};return{s:g,n:function(){return f>=m.length?{done:!0}:{done:!1,value:m[f++]}},e:function(O){throw O},f:g}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,u=!0,p=!1;return{s:function(){l=l.call(m)},n:function(){var O=l.next();return u=O.done,O},e:function(O){p=!0,a=O},f:function(){try{u||l.return==null||l.return()}finally{if(p)throw a}}}}function uP(m,s){(s==null||s>m.length)&&(s=m.length);for(var l=0,f=new Array(s);l=s[a])&&(s[a]=s[g]+1)}),s}function cP(m,s,l,f){var g,a,u=wp(null),p=AI(g=df(OO(f).call(f))).call(g,function(pe,be){return pe+1+be.edges.length},0),O=l+"Id",P=l==="to"?1:-1,z=RI(f);try{var H,ee=function(){var pe=Ei(a.value,2),be=pe[0],Ae=pe[1];if(!f.has(be)||!m(Ae))return 0;u[be]=0;for(var Qe,$e,mt=[Ae],It=0,Ct=function(){var qe,Fe;if(!f.has(be))return 0;var Ge=u[Qe.id]+P;if(Do(qe=ua(Fe=Qe.edges).call(Fe,function(pt){return pt.connected&&pt.to!==pt.from&&pt[l]!==Qe&&f.has(pt.toId)&&f.has(pt.fromId)})).call(qe,function(pt){var ft=pt[O],yr=u[ft];(yr==null||s(Ge,yr))&&(u[ft]=Ge,mt.push(pt[l]))}),It>p)return{v:{v:DI(f,u)}};++It};Qe=mt.pop();)if(($e=Ct())!==0&&$e)return $e.v};for(z.s();!(a=z.n()).done;)if((H=ee())!==0&&H)return H.v}catch(pe){z.e(pe)}finally{z.f()}return u}var Ac=function(){function m(){rr(this,m),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return nr(m,[{key:"addRelation",value:function(s,l){this.childrenReference[s]===void 0&&(this.childrenReference[s]=[]),this.childrenReference[s].push(l),this.parentReference[l]===void 0&&(this.parentReference[l]=[]),this.parentReference[l].push(s)}},{key:"checkIfTree",value:function(){for(var s in this.parentReference)if(this.parentReference[s].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:"numTrees",value:function(){return this.treeIndex+1}},{key:"setTreeIndex",value:function(s,l){l!==void 0&&this.trees[s.id]===void 0&&(this.trees[s.id]=l,this.treeIndex=Math.max(l,this.treeIndex))}},{key:"ensureLevel",value:function(s){this.levels[s]===void 0&&(this.levels[s]=0)}},{key:"getMaxLevel",value:function(s){var l=this,f={};return function g(a){if(f[a]!==void 0)return f[a];var u=l.levels[a];if(l.childrenReference[a]){var p=l.childrenReference[a];if(p.length>0)for(var O=0;O0&&(f.levelSeparation*=-1):f.levelSeparation<0&&(f.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(l);if(g===!0)return this.body.emitter.emit("refresh"),Kr(l,this.optionsBackup)}return l}},{key:"_resetRNG",value:function(s){this.initialRandomSeed=s,this._rng=Yt(this.initialRandomSeed)}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(s){if(this.options.hierarchical.enabled===!0){var l=this.optionsBackup.physics;s.physics===void 0||s.physics===!0?(s.physics={enabled:l.enabled===void 0||l.enabled,solver:"hierarchicalRepulsion"},l.enabled=l.enabled===void 0||l.enabled,l.solver=l.solver||"barnesHut"):Wo(s.physics)==="object"?(l.enabled=s.physics.enabled===void 0||s.physics.enabled,l.solver=s.physics.solver||"barnesHut",s.physics.solver="hierarchicalRepulsion"):s.physics!==!1&&(l.solver="barnesHut",s.physics={solver:"hierarchicalRepulsion"});var f=this.direction.curveType();if(s.edges===void 0)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},s.edges={smooth:!1};else if(s.edges.smooth===void 0)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},s.edges.smooth=!1;else if(typeof s.edges.smooth=="boolean")this.optionsBackup.edges={smooth:s.edges.smooth},s.edges.smooth={enabled:s.edges.smooth,type:f};else{var g=s.edges.smooth;g.type!==void 0&&g.type!=="dynamic"&&(f=g.type),this.optionsBackup.edges={smooth:{enabled:g.enabled===void 0||g.enabled,type:g.type===void 0?"dynamic":g.type,roundness:g.roundness===void 0?.5:g.roundness,forceDirection:g.forceDirection!==void 0&&g.forceDirection}},s.edges.smooth={enabled:g.enabled===void 0||g.enabled,type:f,roundness:g.roundness===void 0?.5:g.roundness,forceDirection:g.forceDirection!==void 0&&g.forceDirection}}this.body.emitter.emit("_forceDisableDynamicCurves",f)}return s}},{key:"positionInitially",value:function(s){if(this.options.hierarchical.enabled!==!0){this._resetRNG(this.initialRandomSeed);for(var l=s.length+50,f=0;fa){for(var p=s.length;s.length>a&&g<=10;){g+=1;var O=s.length;if(g%3==0?this.body.modules.clustering.clusterBridges(u):this.body.modules.clustering.clusterOutliers(u),O==s.length&&g%3!=0)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*p)})}g>10&&console.info("The clustering didn't succeed within the amount of interations allowed, progressing with partial result."),this.body.modules.kamadaKawai.solve(s,this.body.edgeIndices,!0),this._shiftToCenter();for(var P=0;P0){var s,l,f=!1,g=!1;for(l in this.lastNodeOnLevel={},this.hierarchical=new Ac,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,l)&&((s=this.body.nodes[l]).options.level!==void 0?(f=!0,this.hierarchical.levels[l]=s.options.level):g=!0);if(g===!0&&f===!0)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");if(g===!0){var a=this.options.hierarchical.sortMethod;a==="hubsize"?this._determineLevelsByHubsize():a==="directed"?this._determineLevelsDirected():a==="custom"&&this._determineLevelsCustomCallback()}for(var u in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,u)&&this.hierarchical.ensureLevel(u);var p=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(p),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var s=this,l=!1,f={},g=function(H,ee){var pe=s.hierarchical.trees;for(var be in pe)Object.prototype.hasOwnProperty.call(pe,be)&&pe[be]===H&&s.direction.shift(be,ee)},a=function(){for(var H=[],ee=0;ee0)for(var Ae=0;Ae1&&arguments[1]!==void 0?arguments[1]:1e9,pe=1e9,be=1e9,Ae=1e9,Qe=-1e9;for(var $e in H)if(Object.prototype.hasOwnProperty.call(H,$e)){var mt=s.body.nodes[$e],It=s.hierarchical.levels[mt.id],Ct=s.direction.getPosition(mt),qe=Ei(s._getSpaceAroundNode(mt,H),2),Fe=qe[0],Ge=qe[1];pe=Math.min(Fe,pe),be=Math.min(Ge,be),It<=ee&&(Ae=Math.min(Ct,Ae),Qe=Math.max(Ct,Qe))}return[Ae,Qe,pe,be]},O=function(H,ee,pe){for(var be=s.hierarchical,Ae=0;Ae1)for(var mt=0;mt<$e.length-1;mt++){var It=$e[mt],Ct=$e[mt+1];be.hasSameParent(It,Ct)&&be.inSameSubNetwork(It,Ct)&&H(It,Ct,pe)}}},P=function(H,ee){var pe=arguments.length>2&&arguments[2]!==void 0&&arguments[2],be=s.direction.getPosition(H),Ae=s.direction.getPosition(ee),Qe=Math.abs(Ae-be),$e=s.options.hierarchical.nodeSpacing;if(Qe>$e){var mt={},It={};u(H,mt),u(ee,It);var Ct=function($t,wr){var Fr=s.hierarchical.getMaxLevel($t.id),zr=s.hierarchical.getMaxLevel(wr.id);return Math.min(Fr,zr)}(H,ee),qe=p(mt,Ct),Fe=p(It,Ct),Ge=qe[1],pt=Fe[0],ft=Fe[2];if(Math.abs(Ge-pt)>$e){var yr=Ge-pt+$e;yr<-ft+$e&&(yr=-ft+$e),yr<0&&(s._shiftBlock(ee.id,yr),l=!0,pe===!0&&s._centerParent(ee))}}},z=function(H,ee){for(var pe=ee.id,be=ee.edges,Ae=s.hierarchical.levels[ee.id],Qe=s.options.hierarchical.levelSeparation*s.options.hierarchical.levelSeparation,$e={},mt=[],It=0;It0?pP=Math.min(Ls,Ns-s.options.hierarchical.nodeSpacing):Ls<0&&(pP=-Math.min(-Ls,zr-s.options.hierarchical.nodeSpacing)),pP!=0&&(s._shiftBlock(ee.id,pP),l=!0)})(ft),function(yr){var $t=s.direction.getPosition(ee),wr=Ei(s._getSpaceAroundNode(ee),2),Fr=wr[0],zr=wr[1],Ns=yr-$t,Ls=$t;Ns>0?Ls=Math.min($t+(zr-s.options.hierarchical.nodeSpacing),yr):Ns<0&&(Ls=Math.max($t-(Fr-s.options.hierarchical.nodeSpacing),yr)),Ls!==$t&&(s.direction.setPosition(ee,Ls),l=!0)}(ft=pt(H,be))};this.options.hierarchical.blockShifting===!0&&(function(H){var ee=s.hierarchical.getLevels();ee=e0(ee).call(ee);for(var pe=0;pe0&&Math.abs(ee)0&&(P=this.direction.getPosition(g[u-1])+O),this.direction.setPosition(p,P,l),this._validatePositionAndContinue(p,l,P),a++}}}}},{key:"_placeBranchNodes",value:function(s,l){var f,g=this.hierarchical.childrenReference[s];if(g!==void 0){for(var a=[],u=0;ul&&this.positionedNodes[O.id]===void 0))return;var z=this.options.hierarchical.nodeSpacing,H=void 0;H=p===0?this.direction.getPosition(this.body.nodes[s]):this.direction.getPosition(a[p-1])+z,this.direction.setPosition(O,H,P),this._validatePositionAndContinue(O,P,H)}var ee=this._getCenterPosition(a);this.direction.setPosition(this.body.nodes[s],ee,l)}}},{key:"_validatePositionAndContinue",value:function(s,l,f){if(this.hierarchical.isTree){if(this.lastNodeOnLevel[l]!==void 0){var g=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[l]]);if(f-ga},"from",g)}(f),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:"_generateMap",value:function(){var s=this;this._crawlNetwork(function(l,f){s.hierarchical.levels[f.id]>s.hierarchical.levels[l.id]&&s.hierarchical.addRelation(l.id,f.id)}),this.hierarchical.checkIfTree()}},{key:"_crawlNetwork",value:function(){var s=this,l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(){},f=arguments.length>1?arguments[1]:void 0,g={},a=function z(H,ee){if(g[H.id]===void 0){var pe;s.hierarchical.setTreeIndex(H,ee),g[H.id]=!0;for(var be=s._getActiveEdges(H),Ae=0;Ae=m.length?{done:!0}:{done:!1,value:m[f++]}},e:function(O){throw O},f:g}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,u=!0,p=!1;return{s:function(){l=l.call(m)},n:function(){var O=l.next();return u=O.done,O},e:function(O){p=!0,a=O},f:function(){try{u||l.return==null||l.return()}finally{if(p)throw a}}}}function Cf(m,s){(s==null||s>m.length)&&(s=m.length);for(var l=0,f=new Array(s);l0&&this.options.deleteNode!==!1||f===0&&this.options.deleteEdge!==!1)&&(p===!0&&this._createSeperator(4),this._createDeleteButton(u)),this._bindElementEvents(this.closeDiv,Vt(s=this.toggleEditMode).call(s,this)),this._temporaryBindEvent("select",Vt(l=this.showManipulatorToolbar).call(l,this))}this.body.emitter.emit("_redraw")}},{key:"addNodeMode",value:function(){var s;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addNode",this.guiEnabled===!0){var l,f=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(f),this._createSeperator(),this._createDescription(f.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Vt(l=this.toggleEditMode).call(l,this))}this._temporaryBindEvent("click",Vt(s=this._performAddNode).call(s,this))}},{key:"editNode",value:function(){var s=this;this.editMode!==!0&&this.enableEditMode(),this._clean();var l=this.selectionHandler.getSelectedNodes()[0];if(l!==void 0){if(this.inMode="editNode",typeof this.options.editNode!="function")throw new Error("No function has been configured to handle the editing of nodes.");if(l.isCluster!==!0){var f=Kr({},l.options,!1);if(f.x=l.x,f.y=l.y,this.options.editNode.length!==2)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(f,function(g){g!=null&&s.inMode==="editNode"&&s.body.data.nodes.getDataSet().update(g),s.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){var s,l,f,g,a;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addEdge",this.guiEnabled===!0){var u,p=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(p),this._createSeperator(),this._createDescription(p.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Vt(u=this.toggleEditMode).call(u,this))}this._temporaryBindUI("onTouch",Vt(s=this._handleConnect).call(s,this)),this._temporaryBindUI("onDragEnd",Vt(l=this._finishConnect).call(l,this)),this._temporaryBindUI("onDrag",Vt(f=this._dragControlNode).call(f,this)),this._temporaryBindUI("onRelease",Vt(g=this._finishConnect).call(g,this)),this._temporaryBindUI("onDragStart",Vt(a=this._dragStartEdge).call(a,this)),this._temporaryBindUI("onHold",function(){})}},{key:"editEdgeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="editEdge",Wo(this.options.editEdge)!=="object"||typeof this.options.editEdge.editWithoutDrag!="function"||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],this.edgeBeingEditedId===void 0)){if(this.guiEnabled===!0){var s,l=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(l),this._createSeperator(),this._createDescription(l.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Vt(s=this.toggleEditMode).call(s,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],this.edgeBeingEditedId!==void 0){var f,g,a,u,p=this.body.edges[this.edgeBeingEditedId],O=this._getNewTargetNode(p.from.x,p.from.y),P=this._getNewTargetNode(p.to.x,p.to.y);this.temporaryIds.nodes.push(O.id),this.temporaryIds.nodes.push(P.id),this.body.nodes[O.id]=O,this.body.nodeIndices.push(O.id),this.body.nodes[P.id]=P,this.body.nodeIndices.push(P.id),this._temporaryBindUI("onTouch",Vt(f=this._controlNodeTouch).call(f,this)),this._temporaryBindUI("onTap",function(){}),this._temporaryBindUI("onHold",function(){}),this._temporaryBindUI("onDragStart",Vt(g=this._controlNodeDragStart).call(g,this)),this._temporaryBindUI("onDrag",Vt(a=this._controlNodeDrag).call(a,this)),this._temporaryBindUI("onDragEnd",Vt(u=this._controlNodeDragEnd).call(u,this)),this._temporaryBindUI("onMouseMove",function(){}),this._temporaryBindEvent("beforeDrawing",function(H){var ee=p.edgeType.findBorderPositions(H);O.selected===!1&&(O.x=ee.from.x,O.y=ee.from.y),P.selected===!1&&(P.x=ee.to.x,P.y=ee.to.y)}),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}else{var z=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(z.from.id,z.to.id)}}},{key:"deleteSelected",value:function(){var s=this;this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="delete";var l=this.selectionHandler.getSelectedNodeIds(),f=this.selectionHandler.getSelectedEdgeIds(),g=void 0;if(l.length>0){for(var a=0;a0&&typeof this.options.deleteEdge=="function"&&(g=this.options.deleteEdge);if(typeof g=="function"){var u={nodes:l,edges:f};if(g.length!==2)throw new Error("The function for delete does not support two arguments (data, callback)");g(u,function(p){p!=null&&s.inMode==="delete"?(s.body.data.edges.getDataSet().remove(p.edges),s.body.data.nodes.getDataSet().remove(p.nodes),s.body.emitter.emit("startSimulation"),s.showManipulatorToolbar()):(s.body.emitter.emit("startSimulation"),s.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().remove(f),this.body.data.nodes.getDataSet().remove(l),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}},{key:"_setup",value:function(){this.options.enabled===!0?(this.guiEnabled=!0,this._createWrappers(),this.editMode===!1?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:"_createWrappers",value:function(){var s,l;this.manipulationDiv===void 0&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",this.editMode===!0?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),this.editModeDiv===void 0&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",this.editMode===!0?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),this.closeDiv===void 0&&(this.closeDiv=document.createElement("button"),this.closeDiv.className="vis-close",this.closeDiv.setAttribute("aria-label",(s=(l=this.options.locales[this.options.locale])===null||l===void 0?void 0:l.close)!==null&&s!==void 0?s:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:"_getNewTargetNode",value:function(s,l){var f=Kr({},this.options.controlNodeStyle);f.id="targetNode"+Ua(),f.hidden=!1,f.physics=!1,f.x=s,f.y=l;var g=this.body.functions.createNode(f);return g.shape.boundingBox={left:s,right:s,top:l,bottom:l},g}},{key:"_createEditButton",value:function(){var s;this._clean(),this.manipulationDOM={},Dt(this.editModeDiv);var l=this.options.locales[this.options.locale],f=this._createButton("editMode","vis-edit vis-edit-mode",l.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(f),this._bindElementEvents(f,Vt(s=this.toggleEditMode).call(s,this))}},{key:"_clean",value:function(){this.inMode=!1,this.guiEnabled===!0&&(Dt(this.editModeDiv),Dt(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}},{key:"_cleanupDOMEventListeners",value:function(){var s,l,f=fP(Rd(s=this._domEventListenerCleanupQueue).call(s,0));try{for(f.s();!(l=f.n()).done;)(0,l.value)()}catch(g){f.e(g)}finally{f.f()}}},{key:"_removeManipulationDOM",value:function(){this._clean(),Dt(this.manipulationDiv),Dt(this.editModeDiv),Dt(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:"_createSeperator",value:function(){var s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+s]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+s].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+s])}},{key:"_createAddNodeButton",value:function(s){var l,f=this._createButton("addNode","vis-add",s.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(f),this._bindElementEvents(f,Vt(l=this.addNodeMode).call(l,this))}},{key:"_createAddEdgeButton",value:function(s){var l,f=this._createButton("addEdge","vis-connect",s.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(f),this._bindElementEvents(f,Vt(l=this.addEdgeMode).call(l,this))}},{key:"_createEditNodeButton",value:function(s){var l,f=this._createButton("editNode","vis-edit",s.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(f),this._bindElementEvents(f,Vt(l=this.editNode).call(l,this))}},{key:"_createEditEdgeButton",value:function(s){var l,f=this._createButton("editEdge","vis-edit",s.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(f),this._bindElementEvents(f,Vt(l=this.editEdgeMode).call(l,this))}},{key:"_createDeleteButton",value:function(s){var l,f;f=this.options.rtl?"vis-delete-rtl":"vis-delete";var g=this._createButton("delete",f,s.del||this.options.locales.en.del);this.manipulationDiv.appendChild(g),this._bindElementEvents(g,Vt(l=this.deleteSelected).call(l,this))}},{key:"_createBackButton",value:function(s){var l,f=this._createButton("back","vis-back",s.back||this.options.locales.en.back);this.manipulationDiv.appendChild(f),this._bindElementEvents(f,Vt(l=this.showManipulatorToolbar).call(l,this))}},{key:"_createButton",value:function(s,l,f){var g=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"vis-label";return this.manipulationDOM[s+"Div"]=document.createElement("button"),this.manipulationDOM[s+"Div"].className="vis-button "+l,this.manipulationDOM[s+"Label"]=document.createElement("div"),this.manipulationDOM[s+"Label"].className=g,this.manipulationDOM[s+"Label"].innerText=f,this.manipulationDOM[s+"Div"].appendChild(this.manipulationDOM[s+"Label"]),this.manipulationDOM[s+"Div"]}},{key:"_createDescription",value:function(s){this.manipulationDOM.descriptionLabel=document.createElement("div"),this.manipulationDOM.descriptionLabel.className="vis-none",this.manipulationDOM.descriptionLabel.innerText=s,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:"_temporaryBindEvent",value:function(s,l){this.temporaryEventFunctions.push({event:s,boundFunction:l}),this.body.emitter.on(s,l)}},{key:"_temporaryBindUI",value:function(s,l){if(this.body.eventListeners[s]===void 0)throw new Error("This UI function does not exist. Typo? You tried: "+s+" possible are: "+kg(ni(this.body.eventListeners)));this.temporaryUIFunctions[s]=this.body.eventListeners[s],this.body.eventListeners[s]=l}},{key:"_unbindTemporaryUIs",value:function(){for(var s in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,s)&&(this.body.eventListeners[s]=this.temporaryUIFunctions[s],delete this.temporaryUIFunctions[s]);this.temporaryUIFunctions={}}},{key:"_unbindTemporaryEvents",value:function(){for(var s=0;s=0;p--)if(a[p]!==this.selectedControlNode.id){u=this.body.nodes[a[p]];break}if(u!==void 0&&this.selectedControlNode!==void 0)if(u.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var O=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===O.id?this._performEditEdge(u.id,g.to.id):this._performEditEdge(g.from.id,u.id)}else g.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}}},{key:"_handleConnect",value:function(s){if(new Date().valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(s.center),this.lastTouch.translation=Po({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var l=this.lastTouch,f=this.selectionHandler.getNodeAt(l);if(f!==void 0)if(f.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var g=this._getNewTargetNode(f.x,f.y);this.body.nodes[g.id]=g,this.body.nodeIndices.push(g.id);var a=this.body.functions.createEdge({id:"connectionEdge"+Ua(),from:f.id,to:g.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[a.id]=a,this.body.edgeIndices.push(a.id),this.temporaryIds.nodes.push(g.id),this.temporaryIds.edges.push(a.id)}this.touchTime=new Date().valueOf()}}},{key:"_dragControlNode",value:function(s){var l=this.body.functions.getPointer(s.center),f=this.selectionHandler._pointerToPositionObject(l),g=void 0;this.temporaryIds.edges[0]!==void 0&&(g=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var a=this.selectionHandler._getAllNodesOverlappingWith(f),u=void 0,p=a.length-1;p>=0;p--){var O;if(Kn(O=this.temporaryIds.nodes).call(O,a[p])===-1){u=this.body.nodes[a[p]];break}}if(s.controlEdge={from:g,to:u?u.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragging",s,l),this.temporaryIds.nodes[0]!==void 0){var P=this.body.nodes[this.temporaryIds.nodes[0]];P.x=this.canvas._XconvertDOMtoCanvas(l.x),P.y=this.canvas._YconvertDOMtoCanvas(l.y),this.body.emitter.emit("_redraw")}else this.interactionHandler.onDrag(s)}},{key:"_finishConnect",value:function(s){var l=this.body.functions.getPointer(s.center),f=this.selectionHandler._pointerToPositionObject(l),g=void 0;this.temporaryIds.edges[0]!==void 0&&(g=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var a=this.selectionHandler._getAllNodesOverlappingWith(f),u=void 0,p=a.length-1;p>=0;p--){var O;if(Kn(O=this.temporaryIds.nodes).call(O,a[p])===-1){u=this.body.nodes[a[p]];break}}this._cleanupTemporaryNodesAndEdges(),u!==void 0&&(u.isCluster===!0?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):this.body.nodes[g]!==void 0&&this.body.nodes[u.id]!==void 0&&this._performAddEdge(g,u.id)),s.controlEdge={from:g,to:u?u.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragEnd",s,l),this.body.emitter.emit("_redraw")}},{key:"_dragStartEdge",value:function(s){var l=this.lastTouch;this.selectionHandler.generateClickEvent("dragStart",s,l,void 0,!0)}},{key:"_performAddNode",value:function(s){var l=this,f={id:Ua(),x:s.pointer.canvas.x,y:s.pointer.canvas.y,label:"new"};if(typeof this.options.addNode=="function"){if(this.options.addNode.length!==2)throw this.showManipulatorToolbar(),new Error("The function for add does not support two arguments (data,callback)");this.options.addNode(f,function(g){g!=null&&l.inMode==="addNode"&&l.body.data.nodes.getDataSet().add(g),l.showManipulatorToolbar()})}else this.body.data.nodes.getDataSet().add(f),this.showManipulatorToolbar()}},{key:"_performAddEdge",value:function(s,l){var f=this,g={from:s,to:l};if(typeof this.options.addEdge=="function"){if(this.options.addEdge.length!==2)throw new Error("The function for connect does not support two arguments (data,callback)");this.options.addEdge(g,function(a){a!=null&&f.inMode==="addEdge"&&(f.body.data.edges.getDataSet().add(a),f.selectionHandler.unselectAll(),f.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().add(g),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:"_performEditEdge",value:function(s,l){var f=this,g={id:this.edgeBeingEditedId,from:s,to:l,label:this.body.data.edges.get(this.edgeBeingEditedId).label},a=this.options.editEdge;if(Wo(a)==="object"&&(a=a.editWithoutDrag),typeof a=="function"){if(a.length!==2)throw new Error("The function for edit does not support two arguments (data, callback)");a(g,function(u){u==null||f.inMode!=="editEdge"?(f.body.edges[g.id].updateEdgeType(),f.body.emitter.emit("_redraw"),f.showManipulatorToolbar()):(f.body.data.edges.getDataSet().update(u),f.selectionHandler.unselectAll(),f.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().update(g),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),m}(),Xt="string",qt="boolean",Ot="number",tv="array",Hr="object",LS=["arrow","bar","box","circle","crow","curve","diamond","image","inv_curve","inv_triangle","triangle","vee"],b3={borderWidth:{number:Ot},borderWidthSelected:{number:Ot,undefined:"undefined"},brokenImage:{string:Xt,undefined:"undefined"},chosen:{label:{boolean:qt,function:"function"},node:{boolean:qt,function:"function"},__type__:{object:Hr,boolean:qt}},color:{border:{string:Xt},background:{string:Xt},highlight:{border:{string:Xt},background:{string:Xt},__type__:{object:Hr,string:Xt}},hover:{border:{string:Xt},background:{string:Xt},__type__:{object:Hr,string:Xt}},__type__:{object:Hr,string:Xt}},opacity:{number:Ot,undefined:"undefined"},fixed:{x:{boolean:qt},y:{boolean:qt},__type__:{object:Hr,boolean:qt}},font:{align:{string:Xt},color:{string:Xt},size:{number:Ot},face:{string:Xt},background:{string:Xt},strokeWidth:{number:Ot},strokeColor:{string:Xt},vadjust:{number:Ot},multi:{boolean:qt,string:Xt},bold:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},boldital:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},ital:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},mono:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},__type__:{object:Hr,string:Xt}},group:{string:Xt,number:Ot,undefined:"undefined"},heightConstraint:{minimum:{number:Ot},valign:{string:Xt},__type__:{object:Hr,boolean:qt,number:Ot}},hidden:{boolean:qt},icon:{face:{string:Xt},code:{string:Xt},size:{number:Ot},color:{string:Xt},weight:{string:Xt,number:Ot},__type__:{object:Hr}},id:{string:Xt,number:Ot},image:{selected:{string:Xt,undefined:"undefined"},unselected:{string:Xt,undefined:"undefined"},__type__:{object:Hr,string:Xt}},imagePadding:{top:{number:Ot},right:{number:Ot},bottom:{number:Ot},left:{number:Ot},__type__:{object:Hr,number:Ot}},label:{string:Xt,undefined:"undefined"},labelHighlightBold:{boolean:qt},level:{number:Ot,undefined:"undefined"},margin:{top:{number:Ot},right:{number:Ot},bottom:{number:Ot},left:{number:Ot},__type__:{object:Hr,number:Ot}},mass:{number:Ot},physics:{boolean:qt},scaling:{min:{number:Ot},max:{number:Ot},label:{enabled:{boolean:qt},min:{number:Ot},max:{number:Ot},maxVisible:{number:Ot},drawThreshold:{number:Ot},__type__:{object:Hr,boolean:qt}},customScalingFunction:{function:"function"},__type__:{object:Hr}},shadow:{enabled:{boolean:qt},color:{string:Xt},size:{number:Ot},x:{number:Ot},y:{number:Ot},__type__:{object:Hr,boolean:qt}},shape:{string:["custom","ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon","hexagon"]},ctxRenderer:{function:"function"},shapeProperties:{borderDashes:{boolean:qt,array:tv},borderRadius:{number:Ot},interpolation:{boolean:qt},useImageSize:{boolean:qt},useBorderWithImage:{boolean:qt},coordinateOrigin:{string:["center","top-left"]},__type__:{object:Hr}},size:{number:Ot},title:{string:Xt,dom:"dom",undefined:"undefined"},value:{number:Ot,undefined:"undefined"},widthConstraint:{minimum:{number:Ot},maximum:{number:Ot},__type__:{object:Hr,boolean:qt,number:Ot}},x:{number:Ot},y:{number:Ot},__type__:{object:Hr}},O_={configure:{enabled:{boolean:qt},filter:{boolean:qt,string:Xt,array:tv,function:"function"},container:{dom:"dom"},showButton:{boolean:qt},__type__:{object:Hr,boolean:qt,string:Xt,array:tv,function:"function"}},edges:{arrows:{to:{enabled:{boolean:qt},scaleFactor:{number:Ot},type:{string:LS},imageHeight:{number:Ot},imageWidth:{number:Ot},src:{string:Xt},__type__:{object:Hr,boolean:qt}},middle:{enabled:{boolean:qt},scaleFactor:{number:Ot},type:{string:LS},imageWidth:{number:Ot},imageHeight:{number:Ot},src:{string:Xt},__type__:{object:Hr,boolean:qt}},from:{enabled:{boolean:qt},scaleFactor:{number:Ot},type:{string:LS},imageWidth:{number:Ot},imageHeight:{number:Ot},src:{string:Xt},__type__:{object:Hr,boolean:qt}},__type__:{string:["from","to","middle"],object:Hr}},endPointOffset:{from:{number:Ot},to:{number:Ot},__type__:{object:Hr,number:Ot}},arrowStrikethrough:{boolean:qt},background:{enabled:{boolean:qt},color:{string:Xt},size:{number:Ot},dashes:{boolean:qt,array:tv},__type__:{object:Hr,boolean:qt}},chosen:{label:{boolean:qt,function:"function"},edge:{boolean:qt,function:"function"},__type__:{object:Hr,boolean:qt}},color:{color:{string:Xt},highlight:{string:Xt},hover:{string:Xt},inherit:{string:["from","to","both"],boolean:qt},opacity:{number:Ot},__type__:{object:Hr,string:Xt}},dashes:{boolean:qt,array:tv},font:{color:{string:Xt},size:{number:Ot},face:{string:Xt},background:{string:Xt},strokeWidth:{number:Ot},strokeColor:{string:Xt},align:{string:["horizontal","top","middle","bottom"]},vadjust:{number:Ot},multi:{boolean:qt,string:Xt},bold:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},boldital:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},ital:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},mono:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},__type__:{object:Hr,string:Xt}},hidden:{boolean:qt},hoverWidth:{function:"function",number:Ot},label:{string:Xt,undefined:"undefined"},labelHighlightBold:{boolean:qt},length:{number:Ot,undefined:"undefined"},physics:{boolean:qt},scaling:{min:{number:Ot},max:{number:Ot},label:{enabled:{boolean:qt},min:{number:Ot},max:{number:Ot},maxVisible:{number:Ot},drawThreshold:{number:Ot},__type__:{object:Hr,boolean:qt}},customScalingFunction:{function:"function"},__type__:{object:Hr}},selectionWidth:{function:"function",number:Ot},selfReferenceSize:{number:Ot},selfReference:{size:{number:Ot},angle:{number:Ot},renderBehindTheNode:{boolean:qt},__type__:{object:Hr}},shadow:{enabled:{boolean:qt},color:{string:Xt},size:{number:Ot},x:{number:Ot},y:{number:Ot},__type__:{object:Hr,boolean:qt}},smooth:{enabled:{boolean:qt},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:Ot},forceDirection:{string:["horizontal","vertical","none"],boolean:qt},__type__:{object:Hr,boolean:qt}},title:{string:Xt,undefined:"undefined"},width:{number:Ot},widthConstraint:{maximum:{number:Ot},__type__:{object:Hr,boolean:qt,number:Ot}},value:{number:Ot,undefined:"undefined"},__type__:{object:Hr}},groups:{useDefaultGroups:{boolean:qt},__any__:b3,__type__:{object:Hr}},interaction:{dragNodes:{boolean:qt},dragView:{boolean:qt},hideEdgesOnDrag:{boolean:qt},hideEdgesOnZoom:{boolean:qt},hideNodesOnDrag:{boolean:qt},hover:{boolean:qt},keyboard:{enabled:{boolean:qt},speed:{x:{number:Ot},y:{number:Ot},zoom:{number:Ot},__type__:{object:Hr}},bindToWindow:{boolean:qt},autoFocus:{boolean:qt},__type__:{object:Hr,boolean:qt}},multiselect:{boolean:qt},navigationButtons:{boolean:qt},selectable:{boolean:qt},selectConnectedEdges:{boolean:qt},hoverConnectedEdges:{boolean:qt},tooltipDelay:{number:Ot},zoomView:{boolean:qt},zoomSpeed:{number:Ot},__type__:{object:Hr}},layout:{randomSeed:{undefined:"undefined",number:Ot,string:Xt},improvedLayout:{boolean:qt},clusterThreshold:{number:Ot},hierarchical:{enabled:{boolean:qt},levelSeparation:{number:Ot},nodeSpacing:{number:Ot},treeSpacing:{number:Ot},blockShifting:{boolean:qt},edgeMinimization:{boolean:qt},parentCentralization:{boolean:qt},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},shakeTowards:{string:["leaves","roots"]},__type__:{object:Hr,boolean:qt}},__type__:{object:Hr}},manipulation:{enabled:{boolean:qt},initiallyActive:{boolean:qt},addNode:{boolean:qt,function:"function"},addEdge:{boolean:qt,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:Hr,boolean:qt,function:"function"}},deleteNode:{boolean:qt,function:"function"},deleteEdge:{boolean:qt,function:"function"},controlNodeStyle:b3,__type__:{object:Hr,boolean:qt}},nodes:b3,physics:{enabled:{boolean:qt},barnesHut:{theta:{number:Ot},gravitationalConstant:{number:Ot},centralGravity:{number:Ot},springLength:{number:Ot},springConstant:{number:Ot},damping:{number:Ot},avoidOverlap:{number:Ot},__type__:{object:Hr}},forceAtlas2Based:{theta:{number:Ot},gravitationalConstant:{number:Ot},centralGravity:{number:Ot},springLength:{number:Ot},springConstant:{number:Ot},damping:{number:Ot},avoidOverlap:{number:Ot},__type__:{object:Hr}},repulsion:{centralGravity:{number:Ot},springLength:{number:Ot},springConstant:{number:Ot},nodeDistance:{number:Ot},damping:{number:Ot},__type__:{object:Hr}},hierarchicalRepulsion:{centralGravity:{number:Ot},springLength:{number:Ot},springConstant:{number:Ot},nodeDistance:{number:Ot},damping:{number:Ot},avoidOverlap:{number:Ot},__type__:{object:Hr}},maxVelocity:{number:Ot},minVelocity:{number:Ot},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{boolean:qt},iterations:{number:Ot},updateInterval:{number:Ot},onlyDynamicEdges:{boolean:qt},fit:{boolean:qt},__type__:{object:Hr,boolean:qt}},timestep:{number:Ot},adaptiveTimestep:{boolean:qt},wind:{x:{number:Ot},y:{number:Ot},__type__:{object:Hr}},__type__:{object:Hr,boolean:qt}},autoResize:{boolean:qt},clickToUse:{boolean:qt},locale:{string:Xt},locales:{__any__:{any:"any"},__type__:{object:Hr}},height:{string:Xt},width:{string:Xt},__type__:{object:Hr}},x_={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown","hexagon"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"],shakeTowards:["leaves","roots"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},FS=function(m,s,l){var f;return!(!r0(m).call(m,"physics")||!r0(f=x_.physics.solver).call(f,s)||l.physics.solver===s||s==="wind")},ZC=Object.freeze({__proto__:null,allOptions:O_,configuratorHideOption:FS,configureOptions:x_}),zI=function(){function m(){rr(this,m)}return nr(m,[{key:"getDistances",value:function(s,l,f){for(var g={},a=s.edges,u=0;u2&&arguments[2]!==void 0&&arguments[2],g=this.distanceSolver.getDistances(this.body,s,l);this._createL_matrix(g),this._createK_matrix(g),this._createE_matrix();for(var a=0,u=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),p=1e9,O=0,P=0,z=0,H=0,ee=0;p>.01&&a1&&ee<5;){ee+=1,this._moveNode(O,P,z);var be=Ei(this._getEnergy(O),3);H=be[0],P=be[1],z=be[2]}}}},{key:"_getHighestEnergyNode",value:function(s){for(var l=this.body.nodeIndices,f=this.body.nodes,g=0,a=l[0],u=0,p=0,O=0;O{(function(e,t){typeof wK=="object"&&typeof _ke<"u"?t(wK):typeof define=="function"&&define.amd?define(["exports"],t):t((e=typeof globalThis<"u"?globalThis:e||self).vis=e.vis||{})})(wK,function(e){function t(E,M){if(!(E instanceof M))throw new TypeError("Cannot call a class as a function")}var n=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function r(E){return E&&E.__esModule&&Object.prototype.hasOwnProperty.call(E,"default")?E.default:E}var o={exports:{}},i=function(E){return E&&E.Math===Math&&E},d=i(typeof globalThis=="object"&&globalThis)||i(typeof window=="object"&&window)||i(typeof self=="object"&&self)||i(typeof n=="object"&&n)||function(){return this}()||n||Function("return this")(),y=function(E){try{return!!E()}catch{return!0}},_=!y(function(){var E=function(){}.bind();return typeof E!="function"||E.hasOwnProperty("prototype")}),k=_,T=Function.prototype,N=T.apply,L=T.call,Y=typeof Reflect=="object"&&Reflect.apply||(k?L.bind(N):function(){return L.apply(N,arguments)}),q=_,K=Function.prototype,U=K.call,X=q&&K.bind.bind(U,U),Z=q?X:function(E){return function(){return U.apply(E,arguments)}},fe=Z,me=fe({}.toString),ye=fe("".slice),ge=function(E){return ye(me(E),8,-1)},ae=ge,Pe=Z,Ne=function(E){if(ae(E)==="Function")return Pe(E)},Ye=typeof document=="object"&&document.all,Je={all:Ye,IS_HTMLDDA:Ye===void 0&&Ye!==void 0},Me=Je.all,Ve=Je.IS_HTMLDDA?function(E){return typeof E=="function"||E===Me}:function(E){return typeof E=="function"},Ue={},ht=!y(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),yt=_,Mt=Function.prototype.call,wt=yt?Mt.bind(Mt):function(){return Mt.apply(Mt,arguments)},_t={},Nt={}.propertyIsEnumerable,Rt=Object.getOwnPropertyDescriptor,sr=Rt&&!Nt.call({1:2},1);_t.f=sr?function(E){var M=Rt(this,E);return!!M&&M.enumerable}:Nt;var Pt,Sr,Nr=function(E,M){return{enumerable:!(1&E),configurable:!(2&E),writable:!(4&E),value:M}},ir=y,xr=ge,qn=Object,An=Z("".split),Oo=ir(function(){return!qn("z").propertyIsEnumerable(0)})?function(E){return xr(E)==="String"?An(E,""):qn(E)}:qn,yn=function(E){return E==null},Vr=yn,eo=TypeError,Sn=function(E){if(Vr(E))throw new eo("Can't call method on "+E);return E},Ti=Oo,Mo=Sn,xo=function(E){return Ti(Mo(E))},Qa=Ve,Dn=Je.all,mr=Je.IS_HTMLDDA?function(E){return typeof E=="object"?E!==null:Qa(E)||E===Dn}:function(E){return typeof E=="object"?E!==null:Qa(E)},Un={},Za=Un,Ai=d,mn=Ve,rn=function(E){return mn(E)?E:void 0},Mn=function(E,M){return arguments.length<2?rn(Za[E])||rn(Ai[E]):Za[E]&&Za[E][M]||Ai[E]&&Ai[E][M]},go=Z({}.isPrototypeOf),cn=typeof navigator<"u"&&String(navigator.userAgent)||"",ms=d,Oi=cn,cc=ms.process,ko=ms.Deno,Ws=cc&&cc.versions||ko&&ko.version,Hs=Ws&&Ws.v8;Hs&&(Sr=(Pt=Hs.split("."))[0]>0&&Pt[0]<4?1:+(Pt[0]+Pt[1])),!Sr&&Oi&&(!(Pt=Oi.match(/Edge\/(\d+)/))||Pt[1]>=74)&&(Pt=Oi.match(/Chrome\/(\d+)/))&&(Sr=+Pt[1]);var es=Sr,rb=es,am=y,Wc=d.String,ql=!!Object.getOwnPropertySymbols&&!am(function(){var E=Symbol("symbol detection");return!Wc(E)||!(Object(E)instanceof Symbol)||!Symbol.sham&&rb&&rb<41}),Na=ql&&!Symbol.sham&&typeof Symbol.iterator=="symbol",fc=Mn,vs=Ve,vr=go,ia=Object,Uo=Na?function(E){return typeof E=="symbol"}:function(E){var M=fc("Symbol");return vs(M)&&vr(M.prototype,ia(E))},Vi=String,li=function(E){try{return Vi(E)}catch{return"Object"}},Gn=Ve,nd=li,Xn=TypeError,va=function(E){if(Gn(E))return E;throw new Xn(nd(E)+" is not a function")},K3=va,vh=yn,qi=function(E,M){var D=E[M];return vh(D)?void 0:K3(D)},xi=wt,$s=Ve,No=mr,Ul=TypeError,Ou={exports:{}},Gf=d,Vs=Object.defineProperty,gv=function(E,M){try{Vs(Gf,E,{value:M,configurable:!0,writable:!0})}catch{Gf[E]=M}return M},pc="__core-js_shared__",Jf=d[pc]||gv(pc,{}),xu=Jf;(Ou.exports=function(E,M){return xu[E]||(xu[E]=M!==void 0?M:{})})("versions",[]).push({version:"3.33.2",mode:"pure",copyright:"\xA9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.2/LICENSE",source:"https://github.com/zloirock/core-js"});var qs=Ou.exports,Xf=Sn,ts=Object,gs=function(E){return ts(Xf(E))},nb=gs,Ui=Z({}.hasOwnProperty),En=Object.hasOwn||function(E,M){return Ui(nb(E),M)},yv=Z,Y3=0,ob=Math.random(),Kf=yv(1 .toString),od=function(E){return"Symbol("+(E===void 0?"":E)+")_"+Kf(++Y3+ob,36)},ib=qs,sm=En,Q3=od,Yf=ql,id=Na,hl=d.Symbol,Mi=ib("wks"),Go=id?hl.for||hl:hl&&hl.withoutSetter||Q3,ui=function(E){return sm(Mi,E)||(Mi[E]=Yf&&sm(hl,E)?hl[E]:Go("Symbol."+E)),Mi[E]},Z3=wt,Zo=mr,e5=Uo,Hc=qi,bv=function(E,M){var D,F;if(M==="string"&&$s(D=E.toString)&&!No(F=xi(D,E))||$s(D=E.valueOf)&&!No(F=xi(D,E))||M!=="string"&&$s(D=E.toString)&&!No(F=xi(D,E)))return F;throw new Ul("Can't convert object to primitive value")},ab=TypeError,$c=ui("toPrimitive"),_u=function(E,M){if(!Zo(E)||e5(E))return E;var D,F=Hc(E,$c);if(F){if(M===void 0&&(M="default"),D=Z3(F,E,M),!Zo(D)||e5(D))return D;throw new ab("Can't convert object to primitive value")}return M===void 0&&(M="number"),bv(E,M)},gh=Uo,Vc=function(E){var M=_u(E,"string");return gh(M)?M:M+""},yh=mr,lm=d.document,Su=yh(lm)&&yh(lm.createElement),ml=function(E){return Su?lm.createElement(E):{}},ad=ml,um=!ht&&!y(function(){return Object.defineProperty(ad("div"),"a",{get:function(){return 7}}).a!==7}),Lo=ht,sb=wt,bh=_t,wv=Nr,Ov=xo,j4=Vc,ys=En,wh=um,xv=Object.getOwnPropertyDescriptor;Ue.f=Lo?xv:function(E,M){if(E=Ov(E),M=j4(M),wh)try{return xv(E,M)}catch{}if(ys(E,M))return wv(!sb(bh.f,E,M),E[M])};var _v=y,Oh=Ve,xh=/#|\.prototype\./,qc=function(E,M){var D=Eu[sd(E)];return D===t5||D!==Sv&&(Oh(M)?_v(M):!!M)},sd=qc.normalize=function(E){return String(E).replace(xh,".").toLowerCase()},Eu=qc.data={},Sv=qc.NATIVE="N",t5=qc.POLYFILL="P",cm=qc,fm=va,_h=_,Sh=Ne(Ne.bind),ci=function(E,M){return fm(E),M===void 0?E:_h?Sh(E,M):function(){return E.apply(M,arguments)}},La={},lb=ht&&y(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),r5=mr,Ev=String,Us=TypeError,Gs=function(E){if(r5(E))return E;throw new Us(Ev(E)+" is not an object")},fo=ht,pm=um,Iu=lb,Eh=Gs,Iv=Vc,kv=TypeError,Qf=Object.defineProperty,ld=Object.getOwnPropertyDescriptor,rs="enumerable",to="configurable",ub="writable";La.f=fo?Iu?function(E,M,D){if(Eh(E),M=Iv(M),Eh(D),typeof E=="function"&&M==="prototype"&&"value"in D&&ub in D&&!D[ub]){var F=ld(E,M);F&&F[ub]&&(E[M]=D.value,D={configurable:to in D?D[to]:F[to],enumerable:rs in D?D[rs]:F[rs],writable:!1})}return Qf(E,M,D)}:Qf:function(E,M,D){if(Eh(E),M=Iv(M),Eh(D),pm)try{return Qf(E,M,D)}catch{}if("get"in D||"set"in D)throw new kv("Accessors not supported");return"value"in D&&(E[M]=D.value),E};var vl=La,Zf=Nr,bs=ht?function(E,M,D){return vl.f(E,M,Zf(1,D))}:function(E,M,D){return E[M]=D,E},dm=d,Ih=Y,Uc=Ne,ga=Ve,hm=Ue.f,ep=cm,tp=Un,ud=ci,rp=bs,cb=En,Pr=function(E){var M=function(D,F,Q){if(this instanceof M){switch(arguments.length){case 0:return new E;case 1:return new E(D);case 2:return new E(D,F)}return new E(D,F,Q)}return Ih(E,this,arguments)};return M.prototype=E.prototype,M},Xr=function(E,M){var D,F,Q,le,Oe,we,Se,Be,Xe,et=E.target,jt=E.global,Wt=E.stat,dr=E.proto,cr=jt?dm:Wt?dm[et]:(dm[et]||{}).prototype,Dr=jt?tp:tp[et]||rp(tp,et,{})[et],en=Dr.prototype;for(le in M)F=!(D=ep(jt?le:et+(Wt?".":"#")+le,E.forced))&&cr&&cb(cr,le),we=Dr[le],F&&(Se=E.dontCallGetSet?(Xe=hm(cr,le))&&Xe.value:cr[le]),Oe=F&&Se?Se:M[le],F&&typeof we==typeof Oe||(Be=E.bind&&F?ud(Oe,dm):E.wrap&&F?Pr(Oe):dr&&ga(Oe)?Uc(Oe):Oe,(E.sham||Oe&&Oe.sham||we&&we.sham)&&rp(Be,"sham",!0),rp(Dr,le,Be),dr&&(cb(tp,Q=et+"Prototype")||rp(tp,Q,{}),rp(tp[Q],le,Oe),E.real&&en&&(D||!en[le])&&rp(en,le,Oe)))},Pv=Xr,C4=ht,Gc=La.f;Pv({target:"Object",stat:!0,forced:Object.defineProperty!==Gc,sham:!C4},{defineProperty:Gc});var fb=Un.Object,Jc=o.exports=function(E,M,D){return fb.defineProperty(E,M,D)};fb.defineProperty.sham&&(Jc.sham=!0);var jv=o.exports,Ln=jv,kh=r(Ln),mm=ge,dc=Array.isArray||function(E){return mm(E)==="Array"},Gl=Math.ceil,Cv=Math.floor,Ph=Math.trunc||function(E){var M=+E;return(M>0?Cv:Gl)(M)},gl=function(E){var M=+E;return M!=M||M===0?0:Ph(M)},ya=gl,Tv=Math.min,ro=function(E){return E>0?Tv(ya(E),9007199254740991):0},ws=function(E){return ro(E.length)},T4=TypeError,vm=function(E){if(E>9007199254740991)throw T4("Maximum allowed index exceeded");return E},jh=Vc,gm=La,hc=Nr,ba=function(E,M,D){var F=jh(M);F in E?gm.f(E,F,hc(0,D)):E[F]=D},cd={};cd[ui("toStringTag")]="z";var Gr=String(cd)==="[object z]",fd=Gr,ku=Ve,Xc=ge,pb=ui("toStringTag"),n5=Object,o5=Xc(function(){return arguments}())==="Arguments",Js=fd?Xc:function(E){var M,D,F;return E===void 0?"Undefined":E===null?"Null":typeof(D=function(Q,le){try{return Q[le]}catch{}}(M=n5(E),pb))=="string"?D:o5?Xc(M):(F=Xc(M))==="Object"&&ku(M.callee)?"Arguments":F},Av=Ve,Kc=Jf,db=Z(Function.toString);Av(Kc.inspectSource)||(Kc.inspectSource=function(E){return db(E)});var Mv=Kc.inspectSource,pd=Z,i5=y,hb=Ve,ym=Js,a5=Mv,Po=function(){},Ch=[],mb=Mn("Reflect","construct"),Th=/^\s*(?:class|function)\b/,s5=pd(Th.exec),Rv=!Th.test(Po),Ah=function(E){if(!hb(E))return!1;try{return mb(Po,Ch,E),!0}catch{return!1}},Jl=function(E){if(!hb(E))return!1;switch(ym(E)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return Rv||!!s5(Th,a5(E))}catch{return!0}};Jl.sham=!0;var Pu=!mb||i5(function(){var E;return Ah(Ah.call)||!Ah(Object)||!Ah(function(){E=!0})||E})?Jl:Ah,Dv=dc,yl=Pu,zv=mr,bm=ui("species"),Mh=Array,Nv=function(E){var M;return Dv(E)&&(M=E.constructor,(yl(M)&&(M===Mh||Dv(M.prototype))||zv(M)&&(M=M[bm])===null)&&(M=void 0)),M===void 0?Mh:M},fi=function(E,M){return new(Nv(E))(M===0?0:M)},l5=y,Rh=es,np=ui("species"),Yc=function(E){return Rh>=51||!l5(function(){var M=[];return(M.constructor={})[np]=function(){return{foo:1}},M[E](Boolean).foo!==1})},vb=Xr,wm=y,Vt=dc,gb=mr,Om=gs,yb=ws,bb=vm,Fo=ba,A4=fi,M4=Yc,Xl=es,wb=ui("isConcatSpreadable"),xm=Xl>=51||!wm(function(){var E=[];return E[wb]=!1,E.concat()[0]!==E}),dd=function(E){if(!gb(E))return!1;var M=E[wb];return M!==void 0?!!M:Vt(E)};vb({target:"Array",proto:!0,arity:1,forced:!xm||!M4("concat")},{concat:function(E){var M,D,F,Q,le,Oe=Om(this),we=A4(Oe,0),Se=0;for(M=-1,F=arguments.length;Mwe;)if((Q=le[we++])!=Q)return!0}else for(;Oe>we;we++)if((E||we in le)&&le[we]===D)return E||we||0;return!E&&-1}},Qc={includes:Xs(!0),indexOf:Xs(!1)},Gi={},aa=En,Zc=xo,Yl=Qc.indexOf,ef=Gi,md=Z([].push),op=function(E,M){var D,F=Zc(E),Q=0,le=[];for(D in F)!aa(ef,D)&&aa(F,D)&&md(le,D);for(;M.length>Q;)aa(F,D=M[Q++])&&(~Yl(le,D)||md(le,D));return le},Ob=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],c5=op,Wv=Ob,vd=Object.keys||function(E){return c5(E,Wv)},xb=ht,Ql=lb,zh=La,_b=Gs,f5=xo,Sb=vd;Fv.f=xb&&!Ql?Object.defineProperties:function(E,M){_b(E);for(var D,F=f5(M),Q=Sb(M),le=Q.length,Oe=0;le>Oe;)zh.f(E,D=Q[Oe++],F[D]);return E};var Fa,Hv=Mn("document","documentElement"),km=od,$v=qs("keys"),gd=function(E){return $v[E]||($v[E]=km(E))},Vv=Gs,qv=Fv,Pm=Ob,bl=Gi,tf=Hv,ju=ml,mc="prototype",ip="script",jm=gd("IE_PROTO"),vc=function(){},Nh=function(E){return"<"+ip+">"+E+""},Uv=function(E){E.write(Nh("")),E.close();var M=E.parentWindow.Object;return E=null,M},yd=function(){try{Fa=new ActiveXObject("htmlfile")}catch{}var E,M,D;yd=typeof document<"u"?document.domain&&Fa?Uv(Fa):(M=ju("iframe"),D="java"+ip+":",M.style.display="none",tf.appendChild(M),M.src=String(D),(E=M.contentWindow.document).open(),E.write(Nh("document.F=Object")),E.close(),E.F):Uv(Fa);for(var F=Pm.length;F--;)delete yd[mc][Pm[F]];return yd()};bl[jm]=!0;var ap=Object.create||function(E,M){var D;return E!==null?(vc[mc]=Vv(E),D=new vc,vc[mc]=null,D[jm]=E):D=yd(),M===void 0?D:qv.f(D,M)},Zl={},Cm=op,Tm=Ob.concat("length","prototype");Zl.f=Object.getOwnPropertyNames||function(E){return Cm(E,Tm)};var Lh={},p5=Em,bd=ws,d5=ba,rf=Array,Eb=Math.max,Ro=function(E,M,D){for(var F=bd(E),Q=p5(M,F),le=p5(D===void 0?F:D,F),Oe=rf(Eb(le-Q,0)),we=0;Qjr;jr++)if((we||jr in cr)&&(Wt=Dr(jt=cr[jr],jr,dr),E))if(M)ho[jr]=Wt;else if(Wt)switch(E){case 3:return!0;case 5:return jt;case 6:return jr;case 2:_d(ho,jt)}else switch(E){case 4:return!1;case 7:_d(ho,jt)}return le?-1:F||Q?Q:ho}},Rn={forEach:Mu(0),map:Mu(1),filter:Mu(2),some:Mu(3),every:Mu(4),find:Mu(5),findIndex:Mu(6),filterReject:Mu(7)},j=Xr,$=d,oe=wt,ce=Z,Ee=ht,He=ql,xt=y,Kt=En,Qr=go,Fn=Gs,Ri=xo,nu=Vc,Ru=hd,Ks=Nr,Jo=ap,Cb=vd,a7=Zl,W4=Lh,w5=Cu,Lm=Ue,i9=La,Kk=Fv,s7=_t,a9=pi,s9=nf,Kv=qs,l9=Gi,u9=od,Yk=ui,O5=yc,Yv=di,l7=Au,Qk=af,H4=up,x5=Rn.forEach,Xo=gd("hidden"),Sd="Symbol",Qv="prototype",$4=H4.set,Wh=H4.getterFor(Sd),ou=Object[Qv],Hh=$.Symbol,_5=Hh&&Hh[Qv],u7=$.RangeError,V4=$.TypeError,hi=$.QObject,Tb=Lm.f,Du=i9.f,$h=W4.f,c7=s7.f,S5=ce([].push),ns=Kv("symbols"),Bo=Kv("op-symbols"),cp=Kv("wks"),iu=!hi||!hi[Qv]||!hi[Qv].findChild,Zv=function(E,M,D){var F=Tb(ou,M);F&&delete ou[M],Du(E,M,D),F&&E!==ou&&Du(ou,M,F)},q4=Ee&&xt(function(){return Jo(Du({},"a",{get:function(){return Du(this,"a",{value:7}).a}})).a!==7})?Zv:Du,E5=function(E,M){var D=ns[E]=Jo(_5);return $4(D,{type:Sd,tag:E,description:M}),Ee||(D.description=M),D},Ab=function(E,M,D){E===ou&&Ab(Bo,M,D),Fn(E);var F=nu(M);return Fn(D),Kt(ns,F)?(D.enumerable?(Kt(E,Xo)&&E[Xo][F]&&(E[Xo][F]=!1),D=Jo(D,{enumerable:Ks(0,!1)})):(Kt(E,Xo)||Du(E,Xo,Ks(1,{})),E[Xo][F]=!0),q4(E,F,D)):Du(E,F,D)},Vh=function(E,M){Fn(E);var D=Ri(M),F=Cb(D).concat(eg(D));return x5(F,function(Q){Ee&&!oe(Mb,D,Q)||Ab(E,Q,D[Q])}),E},Mb=function(E){var M=nu(E),D=oe(c7,this,M);return!(this===ou&&Kt(ns,M)&&!Kt(Bo,M))&&(!(D||!Kt(this,M)||!Kt(ns,M)||Kt(this,Xo)&&this[Xo][M])||D)},lf=function(E,M){var D=Ri(E),F=nu(M);if(D!==ou||!Kt(ns,F)||Kt(Bo,F)){var Q=Tb(D,F);return!Q||!Kt(ns,F)||Kt(D,Xo)&&D[Xo][F]||(Q.enumerable=!0),Q}},Ba=function(E){var M=$h(Ri(E)),D=[];return x5(M,function(F){Kt(ns,F)||Kt(l9,F)||S5(D,F)}),D},eg=function(E){var M=E===ou,D=$h(M?Bo:Ri(E)),F=[];return x5(D,function(Q){!Kt(ns,Q)||M&&!Kt(ou,Q)||S5(F,ns[Q])}),F};He||(Hh=function(){if(Qr(_5,this))throw new V4("Symbol is not a constructor");var E=arguments.length&&arguments[0]!==void 0?Ru(arguments[0]):void 0,M=u9(E),D=function(F){var Q=this===void 0?$:this;Q===ou&&oe(D,Bo,F),Kt(Q,Xo)&&Kt(Q[Xo],M)&&(Q[Xo][M]=!1);var le=Ks(1,F);try{q4(Q,M,le)}catch(Oe){if(!(Oe instanceof u7))throw Oe;Zv(Q,M,le)}};return Ee&&iu&&q4(ou,M,{configurable:!0,set:D}),E5(M,E)},a9(_5=Hh[Qv],"toString",function(){return Wh(this).tag}),a9(Hh,"withoutSetter",function(E){return E5(u9(E),E)}),s7.f=Mb,i9.f=Ab,Kk.f=Vh,Lm.f=lf,a7.f=W4.f=Ba,w5.f=eg,O5.f=function(E){return E5(Yk(E),E)},Ee&&s9(_5,"description",{configurable:!0,get:function(){return Wh(this).description}})),j({global:!0,constructor:!0,wrap:!0,forced:!He,sham:!He},{Symbol:Hh}),x5(Cb(cp),function(E){Yv(E)}),j({target:Sd,stat:!0,forced:!He},{useSetter:function(){iu=!0},useSimple:function(){iu=!1}}),j({target:"Object",stat:!0,forced:!He,sham:!Ee},{create:function(E,M){return M===void 0?Jo(E):Vh(Jo(E),M)},defineProperty:Ab,defineProperties:Vh,getOwnPropertyDescriptor:lf}),j({target:"Object",stat:!0,forced:!He},{getOwnPropertyNames:Ba}),l7(),Qk(Hh,Sd),l9[Xo]=!0;var Fm=ql&&!!Symbol.for&&!!Symbol.keyFor,Bm=Xr,f7=Mn,Wm=En,Hm=hd,U4=qs,Wa=Fm,I5=U4("string-to-symbol-registry"),Rb=U4("symbol-to-string-registry");Bm({target:"Symbol",stat:!0,forced:!Wa},{for:function(E){var M=Hm(E);if(Wm(I5,M))return I5[M];var D=f7("Symbol")(M);return I5[M]=D,Rb[D]=M,D}});var Db=Xr,k5=En,P5=Uo,tg=li,qh=Fm,rg=qs("symbol-to-string-registry");Db({target:"Symbol",stat:!0,forced:!qh},{keyFor:function(E){if(!P5(E))throw new TypeError(tg(E)+" is not a symbol");if(k5(rg,E))return rg[E]}});var $m=Z([].slice),ng=dc,j5=Ve,og=ge,ig=hd,G4=Z([].push),J4=Xr,zb=Mn,Nb=Y,X4=wt,Lb=Z,C5=y,Ed=Ve,ag=Uo,K4=$m,Vm=function(E){if(j5(E))return E;if(ng(E)){for(var M=E.length,D=[],F=0;F=M.length)return E.target=void 0,Cd(void 0,!0);switch(E.kind){case"keys":return Cd(D,!1);case"values":return Cd(M[D],!1)}return Cd([D,M[D]],!1)},"values"),l6.Arguments=l6.Array;var Jm={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},sa=d,B5=Js,mg=bs,W5=jd,k7=ui("toStringTag");for(var Qh in Jm){var Xm=sa[Qh],P7=Xm&&Xm.prototype;P7&&B5(P7)!==k7&&mg(P7,k7,Qh),W5[Qh]=W5.Array}var os=Xh,g9=ui,j7=La.f,Jb=g9("metadata"),vg=Function.prototype;vg[Jb]===void 0&&j7(vg,Jb,{value:null}),di("asyncDispose"),di("dispose"),di("metadata");var y9=os,c6=Z,Km=Mn("Symbol"),f6=Km.keyFor,C7=c6(Km.prototype.valueOf),p6=Km.isRegisteredSymbol||function(E){try{return f6(C7(E))!==void 0}catch{return!1}};Xr({target:"Symbol",stat:!0},{isRegisteredSymbol:p6});for(var gg=qs,Xb=Mn,H5=Z,T7=Uo,A7=ui,Ym=Xb("Symbol"),M7=Ym.isWellKnownSymbol,$5=Xb("Object","getOwnPropertyNames"),R7=H5(Ym.prototype.valueOf),d6=gg("wks"),V5=0,D7=$5(Ym),b9=D7.length;V5=we?E?"":void 0:(F=Oc(le,Oe))<55296||F>56319||Oe+1===we||(Q=Oc(le,Oe+1))<56320||Q>57343?E?Qi(le,Oe):F:E?as(le,Oe,Oe+2):Q-56320+(F-55296<<10)+65536}},L7={codeAt:Zs(!1),charAt:Zs(!0)}.charAt,O9=hd,yg=up,h6=L5,el=F5,Yb="String Iterator",m6=yg.set,U5=yg.getterFor(Yb);h6(String,"String",function(E){m6(this,{type:Yb,string:O9(E),index:0})},function(){var E,M=U5(this),D=M.string,F=M.index;return F>=D.length?el(void 0,!0):(E=L7(D,F),M.index+=E.length,el(E,!1))});var uf=yc.f("iterator"),bg=uf,G5=r(bg);function Zh(E){return Zh=typeof dp=="function"&&typeof G5=="symbol"?function(M){return typeof M}:function(M){return M&&typeof dp=="function"&&M.constructor===dp&&M!==dp.prototype?"symbol":typeof M},Zh(E)}var Qb=r(yc.f("toPrimitive"));function J5(E){var M=function(D,F){if(Zh(D)!=="object"||D===null)return D;var Q=D[Qb];if(Q!==void 0){var le=Q.call(D,F||"default");if(Zh(le)!=="object")return le;throw new TypeError("@@toPrimitive must return a primitive value.")}return(F==="string"?String:Number)(D)}(E,"string");return Zh(M)==="symbol"?M:String(M)}function X5(E,M){for(var D=0;D=0:we>Se;Se+=Be)Se in Oe&&(Q=D(Q,Oe[Se],Se,le));return Q}},ew={left:E6(!1),right:E6(!0)},e1=y,wg=function(E,M){var D=[][E];return!!D&&e1(function(){D.call(null,M||function(){return 1},1)})},mp=ge(d.process)==="process",t2=ew.left;Xr({target:"Array",proto:!0,forced:!mp&&es>79&&es<83||!wg("reduce")},{reduce:function(E){var M=arguments.length;return t2(this,E,M,M>1?arguments[1]:void 0)}});var W7=ss("Array","reduce"),tw=go,H7=W7,I6=Array.prototype,cf=r(function(E){var M=E.reduce;return E===I6||tw(I6,E)&&M===I6.reduce?H7:M}),rw=Rn.filter;Xr({target:"Array",proto:!0,forced:!Yc("filter")},{filter:function(E){return rw(this,E,arguments.length>1?arguments[1]:void 0)}});var $7=ss("Array","filter"),P9=go,j9=$7,Nu=Array.prototype,la=r(function(E){var M=E.filter;return E===Nu||P9(Nu,E)&&M===Nu.filter?j9:M}),V7=Rn.map;Xr({target:"Array",proto:!0,forced:!Yc("map")},{map:function(E){return V7(this,E,arguments.length>1?arguments[1]:void 0)}});var k6=ss("Array","map"),nw=go,P6=k6,r2=Array.prototype,Lu=r(function(E){var M=E.map;return E===r2||nw(r2,E)&&M===r2.map?P6:M}),j6=dc,C9=ws,T9=vm,q7=ci,C6=function(E,M,D,F,Q,le,Oe,we){for(var Se,Be,Xe=Q,et=0,jt=!!Oe&&q7(Oe,we);et0&&j6(Se)?(Be=C9(Se),Xe=C6(E,M,Se,Be,Xe,le-1)-1):(T9(Xe+1),E[Xe]=Se),Xe++),et++;return Xe},ow=C6,U7=va,A9=gs,G7=ws,T6=fi;Xr({target:"Array",proto:!0},{flatMap:function(E){var M,D=A9(this),F=G7(D);return U7(E),(M=T6(D,0)).length=ow(M,D,D,F,0,1,E,arguments.length>1?arguments[1]:void 0),M}});var M9=ss("Array","flatMap"),A6=go,n2=M9,iw=Array.prototype,M6=r(function(E){var M=E.flatMap;return E===iw||A6(iw,E)&&M===iw.flatMap?n2:M}),aw=function(){function E(M,D,F){var Q,le,Oe;t(this,E),Sl(this,"_listeners",{add:Zm(Q=this._add).call(Q,this),remove:Zm(le=this._remove).call(le,this),update:Zm(Oe=this._update).call(Oe,this)}),this._source=M,this._transformers=D,this._target=F}return hp(E,[{key:"all",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:"start",value:function(){return this._source.on("add",this._listeners.add),this._source.on("remove",this._listeners.remove),this._source.on("update",this._listeners.update),this}},{key:"stop",value:function(){return this._source.off("add",this._listeners.add),this._source.off("remove",this._listeners.remove),this._source.off("update",this._listeners.update),this}},{key:"_transformItems",value:function(M){var D;return cf(D=this._transformers).call(D,function(F,Q){return Q(F)},M)}},{key:"_add",value:function(M,D){D!=null&&this._target.add(this._transformItems(this._source.get(D.items)))}},{key:"_update",value:function(M,D){D!=null&&this._target.update(this._transformItems(this._source.get(D.items)))}},{key:"_remove",value:function(M,D){D!=null&&this._target.remove(this._transformItems(D.oldData))}}]),E}(),R9=function(){function E(M){t(this,E),Sl(this,"_transformers",[]),this._source=M}return hp(E,[{key:"filter",value:function(M){return this._transformers.push(function(D){return la(D).call(D,M)}),this}},{key:"map",value:function(M){return this._transformers.push(function(D){return Lu(D).call(D,M)}),this}},{key:"flatMap",value:function(M){return this._transformers.push(function(D){return M6(D).call(D,M)}),this}},{key:"to",value:function(M){return new aw(this._source,this._transformers,M)}}]),E}(),J7=wt,X7=Gs,K7=qi,Y7=function(E,M,D){var F,Q;X7(E);try{if(!(F=K7(E,"return"))){if(M==="throw")throw D;return D}F=J7(F,E)}catch(le){Q=!0,F=le}if(M==="throw")throw D;if(Q)throw F;return X7(F),D},sw=Gs,Q7=Y7,o2=jd,Z7=ui("iterator"),R6=Array.prototype,i2=function(E){return E!==void 0&&(o2.Array===E||R6[Z7]===E)},lw=Js,uw=qi,ti=yn,e8=jd,t1=ui("iterator"),a2=function(E){if(!ti(E))return uw(E,t1)||uw(E,"@@iterator")||e8[lw(E)]},Wo=wt,D9=va,D6=Gs,t8=li,nr=a2,r8=TypeError,cw=function(E,M){var D=arguments.length<2?nr(E):M;if(D9(D))return D6(Wo(D,E));throw new r8(t8(E)+" is not iterable")},z9=ci,N9=wt,n8=gs,L9=function(E,M,D,F){try{return F?M(sw(D)[0],D[1]):M(D)}catch(Q){Q7(E,"throw",Q)}},z6=i2,ff=Pu,fw=ws,pf=ba,N6=cw,Oa=a2,o8=Array,Si=ui("iterator"),pw=!1;try{var L6=0,F6={next:function(){return{done:!!L6++}},return:function(){pw=!0}};F6[Si]=function(){return this},Array.from(F6,function(){throw 2})}catch{}var B6=function(E,M){try{if(!M&&!pw)return!1}catch{return!1}var D=!1;try{var F={};F[Si]=function(){return{next:function(){return{done:D=!0}}}},E(F)}catch{}return D},F9=function(E){var M=n8(E),D=ff(this),F=arguments.length,Q=F>1?arguments[1]:void 0,le=Q!==void 0;le&&(Q=z9(Q,F>2?arguments[2]:void 0));var Oe,we,Se,Be,Xe,et,jt=Oa(M),Wt=0;if(!jt||this===o8&&z6(jt))for(Oe=fw(M),we=D?new this(Oe):o8(Oe);Oe>Wt;Wt++)et=le?Q(M[Wt],Wt):M[Wt],pf(we,Wt,et);else for(Xe=(Be=N6(M,jt)).next,we=D?new this:[];!(Se=N9(Xe,Be)).done;Wt++)et=le?L9(Be,Q,[Se.value,Wt],!0):Se.value,pf(we,Wt,et);return we.length=Wt,we};Xr({target:"Array",stat:!0,forced:!B6(function(E){Array.from(E)})},{from:F9});var i8=Un.Array.from,dw=r(i8),hw=a2,a8=r(hw),s2=r(hw);Xr({target:"Array",stat:!0},{isArray:dc});var mw=Un.Array.isArray,W6=r(mw),B9=ht,l2=dc,H6=TypeError,$6=Object.getOwnPropertyDescriptor,vw=B9&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(E){return E instanceof TypeError}}()?function(E,M){if(l2(E)&&!$6(E,"length").writable)throw new H6("Cannot set read only .length");return E.length=M}:function(E,M){return E.length=M},gw=gs,V6=ws,W9=vw,u2=vm;Xr({target:"Array",proto:!0,arity:1,forced:y(function(){return[].push.call({length:4294967296},1)!==4294967297})||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(E){return E instanceof TypeError}}()},{push:function(E){var M=gw(this),D=V6(M),F=arguments.length;u2(D+F);for(var Q=0;QE.length)&&(M=E.length);for(var D=0,F=new Array(M);Dm.length)&&(s=m.length);for(var l=0,f=new Array(s);l0&&this.options.deleteNode!==!1||f===0&&this.options.deleteEdge!==!1)&&(p===!0&&this._createSeperator(4),this._createDeleteButton(u)),this._bindElementEvents(this.closeDiv,Vt(s=this.toggleEditMode).call(s,this)),this._temporaryBindEvent("select",Vt(l=this.showManipulatorToolbar).call(l,this))}this.body.emitter.emit("_redraw")}},{key:"addNodeMode",value:function(){var s;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addNode",this.guiEnabled===!0){var l,f=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(f),this._createSeperator(),this._createDescription(f.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Vt(l=this.toggleEditMode).call(l,this))}this._temporaryBindEvent("click",Vt(s=this._performAddNode).call(s,this))}},{key:"editNode",value:function(){var s=this;this.editMode!==!0&&this.enableEditMode(),this._clean();var l=this.selectionHandler.getSelectedNodes()[0];if(l!==void 0){if(this.inMode="editNode",typeof this.options.editNode!="function")throw new Error("No function has been configured to handle the editing of nodes.");if(l.isCluster!==!0){var f=Kr({},l.options,!1);if(f.x=l.x,f.y=l.y,this.options.editNode.length!==2)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(f,function(g){g!=null&&s.inMode==="editNode"&&s.body.data.nodes.getDataSet().update(g),s.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){var s,l,f,g,a;if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="addEdge",this.guiEnabled===!0){var u,p=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(p),this._createSeperator(),this._createDescription(p.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Vt(u=this.toggleEditMode).call(u,this))}this._temporaryBindUI("onTouch",Vt(s=this._handleConnect).call(s,this)),this._temporaryBindUI("onDragEnd",Vt(l=this._finishConnect).call(l,this)),this._temporaryBindUI("onDrag",Vt(f=this._dragControlNode).call(f,this)),this._temporaryBindUI("onRelease",Vt(g=this._finishConnect).call(g,this)),this._temporaryBindUI("onDragStart",Vt(a=this._dragStartEdge).call(a,this)),this._temporaryBindUI("onHold",function(){})}},{key:"editEdgeMode",value:function(){if(this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="editEdge",Wo(this.options.editEdge)!=="object"||typeof this.options.editEdge.editWithoutDrag!="function"||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],this.edgeBeingEditedId===void 0)){if(this.guiEnabled===!0){var s,l=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(l),this._createSeperator(),this._createDescription(l.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Vt(s=this.toggleEditMode).call(s,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],this.edgeBeingEditedId!==void 0){var f,g,a,u,p=this.body.edges[this.edgeBeingEditedId],O=this._getNewTargetNode(p.from.x,p.from.y),P=this._getNewTargetNode(p.to.x,p.to.y);this.temporaryIds.nodes.push(O.id),this.temporaryIds.nodes.push(P.id),this.body.nodes[O.id]=O,this.body.nodeIndices.push(O.id),this.body.nodes[P.id]=P,this.body.nodeIndices.push(P.id),this._temporaryBindUI("onTouch",Vt(f=this._controlNodeTouch).call(f,this)),this._temporaryBindUI("onTap",function(){}),this._temporaryBindUI("onHold",function(){}),this._temporaryBindUI("onDragStart",Vt(g=this._controlNodeDragStart).call(g,this)),this._temporaryBindUI("onDrag",Vt(a=this._controlNodeDrag).call(a,this)),this._temporaryBindUI("onDragEnd",Vt(u=this._controlNodeDragEnd).call(u,this)),this._temporaryBindUI("onMouseMove",function(){}),this._temporaryBindEvent("beforeDrawing",function(H){var ee=p.edgeType.findBorderPositions(H);O.selected===!1&&(O.x=ee.from.x,O.y=ee.from.y),P.selected===!1&&(P.x=ee.to.x,P.y=ee.to.y)}),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}else{var z=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(z.from.id,z.to.id)}}},{key:"deleteSelected",value:function(){var s=this;this.editMode!==!0&&this.enableEditMode(),this._clean(),this.inMode="delete";var l=this.selectionHandler.getSelectedNodeIds(),f=this.selectionHandler.getSelectedEdgeIds(),g=void 0;if(l.length>0){for(var a=0;a0&&typeof this.options.deleteEdge=="function"&&(g=this.options.deleteEdge);if(typeof g=="function"){var u={nodes:l,edges:f};if(g.length!==2)throw new Error("The function for delete does not support two arguments (data, callback)");g(u,function(p){p!=null&&s.inMode==="delete"?(s.body.data.edges.getDataSet().remove(p.edges),s.body.data.nodes.getDataSet().remove(p.nodes),s.body.emitter.emit("startSimulation"),s.showManipulatorToolbar()):(s.body.emitter.emit("startSimulation"),s.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().remove(f),this.body.data.nodes.getDataSet().remove(l),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}},{key:"_setup",value:function(){this.options.enabled===!0?(this.guiEnabled=!0,this._createWrappers(),this.editMode===!1?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:"_createWrappers",value:function(){var s,l;this.manipulationDiv===void 0&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",this.editMode===!0?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),this.editModeDiv===void 0&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",this.editMode===!0?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),this.closeDiv===void 0&&(this.closeDiv=document.createElement("button"),this.closeDiv.className="vis-close",this.closeDiv.setAttribute("aria-label",(s=(l=this.options.locales[this.options.locale])===null||l===void 0?void 0:l.close)!==null&&s!==void 0?s:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:"_getNewTargetNode",value:function(s,l){var f=Kr({},this.options.controlNodeStyle);f.id="targetNode"+Ua(),f.hidden=!1,f.physics=!1,f.x=s,f.y=l;var g=this.body.functions.createNode(f);return g.shape.boundingBox={left:s,right:s,top:l,bottom:l},g}},{key:"_createEditButton",value:function(){var s;this._clean(),this.manipulationDOM={},Dt(this.editModeDiv);var l=this.options.locales[this.options.locale],f=this._createButton("editMode","vis-edit vis-edit-mode",l.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(f),this._bindElementEvents(f,Vt(s=this.toggleEditMode).call(s,this))}},{key:"_clean",value:function(){this.inMode=!1,this.guiEnabled===!0&&(Dt(this.editModeDiv),Dt(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}},{key:"_cleanupDOMEventListeners",value:function(){var s,l,f=fP(Rd(s=this._domEventListenerCleanupQueue).call(s,0));try{for(f.s();!(l=f.n()).done;)(0,l.value)()}catch(g){f.e(g)}finally{f.f()}}},{key:"_removeManipulationDOM",value:function(){this._clean(),Dt(this.manipulationDiv),Dt(this.editModeDiv),Dt(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:"_createSeperator",value:function(){var s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+s]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+s].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+s])}},{key:"_createAddNodeButton",value:function(s){var l,f=this._createButton("addNode","vis-add",s.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(f),this._bindElementEvents(f,Vt(l=this.addNodeMode).call(l,this))}},{key:"_createAddEdgeButton",value:function(s){var l,f=this._createButton("addEdge","vis-connect",s.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(f),this._bindElementEvents(f,Vt(l=this.addEdgeMode).call(l,this))}},{key:"_createEditNodeButton",value:function(s){var l,f=this._createButton("editNode","vis-edit",s.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(f),this._bindElementEvents(f,Vt(l=this.editNode).call(l,this))}},{key:"_createEditEdgeButton",value:function(s){var l,f=this._createButton("editEdge","vis-edit",s.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(f),this._bindElementEvents(f,Vt(l=this.editEdgeMode).call(l,this))}},{key:"_createDeleteButton",value:function(s){var l,f;f=this.options.rtl?"vis-delete-rtl":"vis-delete";var g=this._createButton("delete",f,s.del||this.options.locales.en.del);this.manipulationDiv.appendChild(g),this._bindElementEvents(g,Vt(l=this.deleteSelected).call(l,this))}},{key:"_createBackButton",value:function(s){var l,f=this._createButton("back","vis-back",s.back||this.options.locales.en.back);this.manipulationDiv.appendChild(f),this._bindElementEvents(f,Vt(l=this.showManipulatorToolbar).call(l,this))}},{key:"_createButton",value:function(s,l,f){var g=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"vis-label";return this.manipulationDOM[s+"Div"]=document.createElement("button"),this.manipulationDOM[s+"Div"].className="vis-button "+l,this.manipulationDOM[s+"Label"]=document.createElement("div"),this.manipulationDOM[s+"Label"].className=g,this.manipulationDOM[s+"Label"].innerText=f,this.manipulationDOM[s+"Div"].appendChild(this.manipulationDOM[s+"Label"]),this.manipulationDOM[s+"Div"]}},{key:"_createDescription",value:function(s){this.manipulationDOM.descriptionLabel=document.createElement("div"),this.manipulationDOM.descriptionLabel.className="vis-none",this.manipulationDOM.descriptionLabel.innerText=s,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:"_temporaryBindEvent",value:function(s,l){this.temporaryEventFunctions.push({event:s,boundFunction:l}),this.body.emitter.on(s,l)}},{key:"_temporaryBindUI",value:function(s,l){if(this.body.eventListeners[s]===void 0)throw new Error("This UI function does not exist. Typo? You tried: "+s+" possible are: "+kg(ni(this.body.eventListeners)));this.temporaryUIFunctions[s]=this.body.eventListeners[s],this.body.eventListeners[s]=l}},{key:"_unbindTemporaryUIs",value:function(){for(var s in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,s)&&(this.body.eventListeners[s]=this.temporaryUIFunctions[s],delete this.temporaryUIFunctions[s]);this.temporaryUIFunctions={}}},{key:"_unbindTemporaryEvents",value:function(){for(var s=0;s=0;p--)if(a[p]!==this.selectedControlNode.id){u=this.body.nodes[a[p]];break}if(u!==void 0&&this.selectedControlNode!==void 0)if(u.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var O=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===O.id?this._performEditEdge(u.id,g.to.id):this._performEditEdge(g.from.id,u.id)}else g.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}}},{key:"_handleConnect",value:function(s){if(new Date().valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(s.center),this.lastTouch.translation=Po({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var l=this.lastTouch,f=this.selectionHandler.getNodeAt(l);if(f!==void 0)if(f.isCluster===!0)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var g=this._getNewTargetNode(f.x,f.y);this.body.nodes[g.id]=g,this.body.nodeIndices.push(g.id);var a=this.body.functions.createEdge({id:"connectionEdge"+Ua(),from:f.id,to:g.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[a.id]=a,this.body.edgeIndices.push(a.id),this.temporaryIds.nodes.push(g.id),this.temporaryIds.edges.push(a.id)}this.touchTime=new Date().valueOf()}}},{key:"_dragControlNode",value:function(s){var l=this.body.functions.getPointer(s.center),f=this.selectionHandler._pointerToPositionObject(l),g=void 0;this.temporaryIds.edges[0]!==void 0&&(g=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var a=this.selectionHandler._getAllNodesOverlappingWith(f),u=void 0,p=a.length-1;p>=0;p--){var O;if(Kn(O=this.temporaryIds.nodes).call(O,a[p])===-1){u=this.body.nodes[a[p]];break}}if(s.controlEdge={from:g,to:u?u.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragging",s,l),this.temporaryIds.nodes[0]!==void 0){var P=this.body.nodes[this.temporaryIds.nodes[0]];P.x=this.canvas._XconvertDOMtoCanvas(l.x),P.y=this.canvas._YconvertDOMtoCanvas(l.y),this.body.emitter.emit("_redraw")}else this.interactionHandler.onDrag(s)}},{key:"_finishConnect",value:function(s){var l=this.body.functions.getPointer(s.center),f=this.selectionHandler._pointerToPositionObject(l),g=void 0;this.temporaryIds.edges[0]!==void 0&&(g=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var a=this.selectionHandler._getAllNodesOverlappingWith(f),u=void 0,p=a.length-1;p>=0;p--){var O;if(Kn(O=this.temporaryIds.nodes).call(O,a[p])===-1){u=this.body.nodes[a[p]];break}}this._cleanupTemporaryNodesAndEdges(),u!==void 0&&(u.isCluster===!0?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):this.body.nodes[g]!==void 0&&this.body.nodes[u.id]!==void 0&&this._performAddEdge(g,u.id)),s.controlEdge={from:g,to:u?u.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragEnd",s,l),this.body.emitter.emit("_redraw")}},{key:"_dragStartEdge",value:function(s){var l=this.lastTouch;this.selectionHandler.generateClickEvent("dragStart",s,l,void 0,!0)}},{key:"_performAddNode",value:function(s){var l=this,f={id:Ua(),x:s.pointer.canvas.x,y:s.pointer.canvas.y,label:"new"};if(typeof this.options.addNode=="function"){if(this.options.addNode.length!==2)throw this.showManipulatorToolbar(),new Error("The function for add does not support two arguments (data,callback)");this.options.addNode(f,function(g){g!=null&&l.inMode==="addNode"&&l.body.data.nodes.getDataSet().add(g),l.showManipulatorToolbar()})}else this.body.data.nodes.getDataSet().add(f),this.showManipulatorToolbar()}},{key:"_performAddEdge",value:function(s,l){var f=this,g={from:s,to:l};if(typeof this.options.addEdge=="function"){if(this.options.addEdge.length!==2)throw new Error("The function for connect does not support two arguments (data,callback)");this.options.addEdge(g,function(a){a!=null&&f.inMode==="addEdge"&&(f.body.data.edges.getDataSet().add(a),f.selectionHandler.unselectAll(),f.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().add(g),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:"_performEditEdge",value:function(s,l){var f=this,g={id:this.edgeBeingEditedId,from:s,to:l,label:this.body.data.edges.get(this.edgeBeingEditedId).label},a=this.options.editEdge;if(Wo(a)==="object"&&(a=a.editWithoutDrag),typeof a=="function"){if(a.length!==2)throw new Error("The function for edit does not support two arguments (data, callback)");a(g,function(u){u==null||f.inMode!=="editEdge"?(f.body.edges[g.id].updateEdgeType(),f.body.emitter.emit("_redraw"),f.showManipulatorToolbar()):(f.body.data.edges.getDataSet().update(u),f.selectionHandler.unselectAll(),f.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().update(g),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),m}(),Xt="string",qt="boolean",Ot="number",tv="array",Hr="object",LS=["arrow","bar","box","circle","crow","curve","diamond","image","inv_curve","inv_triangle","triangle","vee"],b3={borderWidth:{number:Ot},borderWidthSelected:{number:Ot,undefined:"undefined"},brokenImage:{string:Xt,undefined:"undefined"},chosen:{label:{boolean:qt,function:"function"},node:{boolean:qt,function:"function"},__type__:{object:Hr,boolean:qt}},color:{border:{string:Xt},background:{string:Xt},highlight:{border:{string:Xt},background:{string:Xt},__type__:{object:Hr,string:Xt}},hover:{border:{string:Xt},background:{string:Xt},__type__:{object:Hr,string:Xt}},__type__:{object:Hr,string:Xt}},opacity:{number:Ot,undefined:"undefined"},fixed:{x:{boolean:qt},y:{boolean:qt},__type__:{object:Hr,boolean:qt}},font:{align:{string:Xt},color:{string:Xt},size:{number:Ot},face:{string:Xt},background:{string:Xt},strokeWidth:{number:Ot},strokeColor:{string:Xt},vadjust:{number:Ot},multi:{boolean:qt,string:Xt},bold:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},boldital:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},ital:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},mono:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},__type__:{object:Hr,string:Xt}},group:{string:Xt,number:Ot,undefined:"undefined"},heightConstraint:{minimum:{number:Ot},valign:{string:Xt},__type__:{object:Hr,boolean:qt,number:Ot}},hidden:{boolean:qt},icon:{face:{string:Xt},code:{string:Xt},size:{number:Ot},color:{string:Xt},weight:{string:Xt,number:Ot},__type__:{object:Hr}},id:{string:Xt,number:Ot},image:{selected:{string:Xt,undefined:"undefined"},unselected:{string:Xt,undefined:"undefined"},__type__:{object:Hr,string:Xt}},imagePadding:{top:{number:Ot},right:{number:Ot},bottom:{number:Ot},left:{number:Ot},__type__:{object:Hr,number:Ot}},label:{string:Xt,undefined:"undefined"},labelHighlightBold:{boolean:qt},level:{number:Ot,undefined:"undefined"},margin:{top:{number:Ot},right:{number:Ot},bottom:{number:Ot},left:{number:Ot},__type__:{object:Hr,number:Ot}},mass:{number:Ot},physics:{boolean:qt},scaling:{min:{number:Ot},max:{number:Ot},label:{enabled:{boolean:qt},min:{number:Ot},max:{number:Ot},maxVisible:{number:Ot},drawThreshold:{number:Ot},__type__:{object:Hr,boolean:qt}},customScalingFunction:{function:"function"},__type__:{object:Hr}},shadow:{enabled:{boolean:qt},color:{string:Xt},size:{number:Ot},x:{number:Ot},y:{number:Ot},__type__:{object:Hr,boolean:qt}},shape:{string:["custom","ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon","hexagon"]},ctxRenderer:{function:"function"},shapeProperties:{borderDashes:{boolean:qt,array:tv},borderRadius:{number:Ot},interpolation:{boolean:qt},useImageSize:{boolean:qt},useBorderWithImage:{boolean:qt},coordinateOrigin:{string:["center","top-left"]},__type__:{object:Hr}},size:{number:Ot},title:{string:Xt,dom:"dom",undefined:"undefined"},value:{number:Ot,undefined:"undefined"},widthConstraint:{minimum:{number:Ot},maximum:{number:Ot},__type__:{object:Hr,boolean:qt,number:Ot}},x:{number:Ot},y:{number:Ot},__type__:{object:Hr}},O_={configure:{enabled:{boolean:qt},filter:{boolean:qt,string:Xt,array:tv,function:"function"},container:{dom:"dom"},showButton:{boolean:qt},__type__:{object:Hr,boolean:qt,string:Xt,array:tv,function:"function"}},edges:{arrows:{to:{enabled:{boolean:qt},scaleFactor:{number:Ot},type:{string:LS},imageHeight:{number:Ot},imageWidth:{number:Ot},src:{string:Xt},__type__:{object:Hr,boolean:qt}},middle:{enabled:{boolean:qt},scaleFactor:{number:Ot},type:{string:LS},imageWidth:{number:Ot},imageHeight:{number:Ot},src:{string:Xt},__type__:{object:Hr,boolean:qt}},from:{enabled:{boolean:qt},scaleFactor:{number:Ot},type:{string:LS},imageWidth:{number:Ot},imageHeight:{number:Ot},src:{string:Xt},__type__:{object:Hr,boolean:qt}},__type__:{string:["from","to","middle"],object:Hr}},endPointOffset:{from:{number:Ot},to:{number:Ot},__type__:{object:Hr,number:Ot}},arrowStrikethrough:{boolean:qt},background:{enabled:{boolean:qt},color:{string:Xt},size:{number:Ot},dashes:{boolean:qt,array:tv},__type__:{object:Hr,boolean:qt}},chosen:{label:{boolean:qt,function:"function"},edge:{boolean:qt,function:"function"},__type__:{object:Hr,boolean:qt}},color:{color:{string:Xt},highlight:{string:Xt},hover:{string:Xt},inherit:{string:["from","to","both"],boolean:qt},opacity:{number:Ot},__type__:{object:Hr,string:Xt}},dashes:{boolean:qt,array:tv},font:{color:{string:Xt},size:{number:Ot},face:{string:Xt},background:{string:Xt},strokeWidth:{number:Ot},strokeColor:{string:Xt},align:{string:["horizontal","top","middle","bottom"]},vadjust:{number:Ot},multi:{boolean:qt,string:Xt},bold:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},boldital:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},ital:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},mono:{color:{string:Xt},size:{number:Ot},face:{string:Xt},mod:{string:Xt},vadjust:{number:Ot},__type__:{object:Hr,string:Xt}},__type__:{object:Hr,string:Xt}},hidden:{boolean:qt},hoverWidth:{function:"function",number:Ot},label:{string:Xt,undefined:"undefined"},labelHighlightBold:{boolean:qt},length:{number:Ot,undefined:"undefined"},physics:{boolean:qt},scaling:{min:{number:Ot},max:{number:Ot},label:{enabled:{boolean:qt},min:{number:Ot},max:{number:Ot},maxVisible:{number:Ot},drawThreshold:{number:Ot},__type__:{object:Hr,boolean:qt}},customScalingFunction:{function:"function"},__type__:{object:Hr}},selectionWidth:{function:"function",number:Ot},selfReferenceSize:{number:Ot},selfReference:{size:{number:Ot},angle:{number:Ot},renderBehindTheNode:{boolean:qt},__type__:{object:Hr}},shadow:{enabled:{boolean:qt},color:{string:Xt},size:{number:Ot},x:{number:Ot},y:{number:Ot},__type__:{object:Hr,boolean:qt}},smooth:{enabled:{boolean:qt},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:Ot},forceDirection:{string:["horizontal","vertical","none"],boolean:qt},__type__:{object:Hr,boolean:qt}},title:{string:Xt,undefined:"undefined"},width:{number:Ot},widthConstraint:{maximum:{number:Ot},__type__:{object:Hr,boolean:qt,number:Ot}},value:{number:Ot,undefined:"undefined"},__type__:{object:Hr}},groups:{useDefaultGroups:{boolean:qt},__any__:b3,__type__:{object:Hr}},interaction:{dragNodes:{boolean:qt},dragView:{boolean:qt},hideEdgesOnDrag:{boolean:qt},hideEdgesOnZoom:{boolean:qt},hideNodesOnDrag:{boolean:qt},hover:{boolean:qt},keyboard:{enabled:{boolean:qt},speed:{x:{number:Ot},y:{number:Ot},zoom:{number:Ot},__type__:{object:Hr}},bindToWindow:{boolean:qt},autoFocus:{boolean:qt},__type__:{object:Hr,boolean:qt}},multiselect:{boolean:qt},navigationButtons:{boolean:qt},selectable:{boolean:qt},selectConnectedEdges:{boolean:qt},hoverConnectedEdges:{boolean:qt},tooltipDelay:{number:Ot},zoomView:{boolean:qt},zoomSpeed:{number:Ot},__type__:{object:Hr}},layout:{randomSeed:{undefined:"undefined",number:Ot,string:Xt},improvedLayout:{boolean:qt},clusterThreshold:{number:Ot},hierarchical:{enabled:{boolean:qt},levelSeparation:{number:Ot},nodeSpacing:{number:Ot},treeSpacing:{number:Ot},blockShifting:{boolean:qt},edgeMinimization:{boolean:qt},parentCentralization:{boolean:qt},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},shakeTowards:{string:["leaves","roots"]},__type__:{object:Hr,boolean:qt}},__type__:{object:Hr}},manipulation:{enabled:{boolean:qt},initiallyActive:{boolean:qt},addNode:{boolean:qt,function:"function"},addEdge:{boolean:qt,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:Hr,boolean:qt,function:"function"}},deleteNode:{boolean:qt,function:"function"},deleteEdge:{boolean:qt,function:"function"},controlNodeStyle:b3,__type__:{object:Hr,boolean:qt}},nodes:b3,physics:{enabled:{boolean:qt},barnesHut:{theta:{number:Ot},gravitationalConstant:{number:Ot},centralGravity:{number:Ot},springLength:{number:Ot},springConstant:{number:Ot},damping:{number:Ot},avoidOverlap:{number:Ot},__type__:{object:Hr}},forceAtlas2Based:{theta:{number:Ot},gravitationalConstant:{number:Ot},centralGravity:{number:Ot},springLength:{number:Ot},springConstant:{number:Ot},damping:{number:Ot},avoidOverlap:{number:Ot},__type__:{object:Hr}},repulsion:{centralGravity:{number:Ot},springLength:{number:Ot},springConstant:{number:Ot},nodeDistance:{number:Ot},damping:{number:Ot},__type__:{object:Hr}},hierarchicalRepulsion:{centralGravity:{number:Ot},springLength:{number:Ot},springConstant:{number:Ot},nodeDistance:{number:Ot},damping:{number:Ot},avoidOverlap:{number:Ot},__type__:{object:Hr}},maxVelocity:{number:Ot},minVelocity:{number:Ot},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{boolean:qt},iterations:{number:Ot},updateInterval:{number:Ot},onlyDynamicEdges:{boolean:qt},fit:{boolean:qt},__type__:{object:Hr,boolean:qt}},timestep:{number:Ot},adaptiveTimestep:{boolean:qt},wind:{x:{number:Ot},y:{number:Ot},__type__:{object:Hr}},__type__:{object:Hr,boolean:qt}},autoResize:{boolean:qt},clickToUse:{boolean:qt},locale:{string:Xt},locales:{__any__:{any:"any"},__type__:{object:Hr}},height:{string:Xt},width:{string:Xt},__type__:{object:Hr}},x_={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown","hexagon"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"],shakeTowards:["leaves","roots"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},FS=function(m,s,l){var f;return!(!r0(m).call(m,"physics")||!r0(f=x_.physics.solver).call(f,s)||l.physics.solver===s||s==="wind")},ZC=Object.freeze({__proto__:null,allOptions:O_,configuratorHideOption:FS,configureOptions:x_}),zI=function(){function m(){rr(this,m)}return nr(m,[{key:"getDistances",value:function(s,l,f){for(var g={},a=s.edges,u=0;u2&&arguments[2]!==void 0&&arguments[2],g=this.distanceSolver.getDistances(this.body,s,l);this._createL_matrix(g),this._createK_matrix(g),this._createE_matrix();for(var a=0,u=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),p=1e9,O=0,P=0,z=0,H=0,ee=0;p>.01&&a1&&ee<5;){ee+=1,this._moveNode(O,P,z);var be=Ei(this._getEnergy(O),3);H=be[0],P=be[1],z=be[2]}}}},{key:"_getHighestEnergyNode",value:function(s){for(var l=this.body.nodeIndices,f=this.body.nodes,g=0,a=l[0],u=0,p=0,O=0;O{(function(e,t){typeof wK=="object"&&typeof _ke<"u"?t(wK):typeof define=="function"&&define.amd?define(["exports"],t):t((e=typeof globalThis<"u"?globalThis:e||self).vis=e.vis||{})})(wK,function(e){function t(E,M){if(!(E instanceof M))throw new TypeError("Cannot call a class as a function")}var n=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function r(E){return E&&E.__esModule&&Object.prototype.hasOwnProperty.call(E,"default")?E.default:E}var o={exports:{}},i=function(E){return E&&E.Math===Math&&E},d=i(typeof globalThis=="object"&&globalThis)||i(typeof window=="object"&&window)||i(typeof self=="object"&&self)||i(typeof n=="object"&&n)||function(){return this}()||n||Function("return this")(),y=function(E){try{return!!E()}catch{return!0}},_=!y(function(){var E=function(){}.bind();return typeof E!="function"||E.hasOwnProperty("prototype")}),k=_,T=Function.prototype,N=T.apply,L=T.call,Y=typeof Reflect=="object"&&Reflect.apply||(k?L.bind(N):function(){return L.apply(N,arguments)}),q=_,K=Function.prototype,U=K.call,X=q&&K.bind.bind(U,U),Z=q?X:function(E){return function(){return U.apply(E,arguments)}},fe=Z,me=fe({}.toString),ye=fe("".slice),ge=function(E){return ye(me(E),8,-1)},ae=ge,Pe=Z,Ne=function(E){if(ae(E)==="Function")return Pe(E)},Ye=typeof document=="object"&&document.all,Je={all:Ye,IS_HTMLDDA:Ye===void 0&&Ye!==void 0},Me=Je.all,Ve=Je.IS_HTMLDDA?function(E){return typeof E=="function"||E===Me}:function(E){return typeof E=="function"},Ue={},ht=!y(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),yt=_,Rt=Function.prototype.call,wt=yt?Rt.bind(Rt):function(){return Rt.apply(Rt,arguments)},_t={},Nt={}.propertyIsEnumerable,At=Object.getOwnPropertyDescriptor,ir=At&&!Nt.call({1:2},1);_t.f=ir?function(E){var M=At(this,E);return!!M&&M.enumerable}:Nt;var Pt,Sr,Nr=function(E,M){return{enumerable:!(1&E),configurable:!(2&E),writable:!(4&E),value:M}},ar=y,xr=ge,qn=Object,An=Z("".split),Oo=ar(function(){return!qn("z").propertyIsEnumerable(0)})?function(E){return xr(E)==="String"?An(E,""):qn(E)}:qn,yn=function(E){return E==null},Vr=yn,eo=TypeError,Sn=function(E){if(Vr(E))throw new eo("Can't call method on "+E);return E},Ti=Oo,Mo=Sn,xo=function(E){return Ti(Mo(E))},Qa=Ve,Dn=Je.all,mr=Je.IS_HTMLDDA?function(E){return typeof E=="object"?E!==null:Qa(E)||E===Dn}:function(E){return typeof E=="object"?E!==null:Qa(E)},Un={},Za=Un,Ai=d,mn=Ve,rn=function(E){return mn(E)?E:void 0},Mn=function(E,M){return arguments.length<2?rn(Za[E])||rn(Ai[E]):Za[E]&&Za[E][M]||Ai[E]&&Ai[E][M]},go=Z({}.isPrototypeOf),cn=typeof navigator<"u"&&String(navigator.userAgent)||"",ms=d,Oi=cn,cc=ms.process,ko=ms.Deno,Ws=cc&&cc.versions||ko&&ko.version,Hs=Ws&&Ws.v8;Hs&&(Sr=(Pt=Hs.split("."))[0]>0&&Pt[0]<4?1:+(Pt[0]+Pt[1])),!Sr&&Oi&&(!(Pt=Oi.match(/Edge\/(\d+)/))||Pt[1]>=74)&&(Pt=Oi.match(/Chrome\/(\d+)/))&&(Sr=+Pt[1]);var es=Sr,rb=es,am=y,Wc=d.String,ql=!!Object.getOwnPropertySymbols&&!am(function(){var E=Symbol("symbol detection");return!Wc(E)||!(Object(E)instanceof Symbol)||!Symbol.sham&&rb&&rb<41}),Na=ql&&!Symbol.sham&&typeof Symbol.iterator=="symbol",fc=Mn,vs=Ve,vr=go,ia=Object,Uo=Na?function(E){return typeof E=="symbol"}:function(E){var M=fc("Symbol");return vs(M)&&vr(M.prototype,ia(E))},Vi=String,li=function(E){try{return Vi(E)}catch{return"Object"}},Gn=Ve,nd=li,Xn=TypeError,va=function(E){if(Gn(E))return E;throw new Xn(nd(E)+" is not a function")},K3=va,vh=yn,qi=function(E,M){var D=E[M];return vh(D)?void 0:K3(D)},xi=wt,$s=Ve,No=mr,Ul=TypeError,Ou={exports:{}},Gf=d,Vs=Object.defineProperty,gv=function(E,M){try{Vs(Gf,E,{value:M,configurable:!0,writable:!0})}catch{Gf[E]=M}return M},pc="__core-js_shared__",Jf=d[pc]||gv(pc,{}),xu=Jf;(Ou.exports=function(E,M){return xu[E]||(xu[E]=M!==void 0?M:{})})("versions",[]).push({version:"3.33.2",mode:"pure",copyright:"\xA9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.2/LICENSE",source:"https://github.com/zloirock/core-js"});var qs=Ou.exports,Xf=Sn,ts=Object,gs=function(E){return ts(Xf(E))},nb=gs,Ui=Z({}.hasOwnProperty),En=Object.hasOwn||function(E,M){return Ui(nb(E),M)},yv=Z,Y3=0,ob=Math.random(),Kf=yv(1 .toString),od=function(E){return"Symbol("+(E===void 0?"":E)+")_"+Kf(++Y3+ob,36)},ib=qs,sm=En,Q3=od,Yf=ql,id=Na,hl=d.Symbol,Mi=ib("wks"),Go=id?hl.for||hl:hl&&hl.withoutSetter||Q3,ui=function(E){return sm(Mi,E)||(Mi[E]=Yf&&sm(hl,E)?hl[E]:Go("Symbol."+E)),Mi[E]},Z3=wt,Zo=mr,e5=Uo,Hc=qi,bv=function(E,M){var D,F;if(M==="string"&&$s(D=E.toString)&&!No(F=xi(D,E))||$s(D=E.valueOf)&&!No(F=xi(D,E))||M!=="string"&&$s(D=E.toString)&&!No(F=xi(D,E)))return F;throw new Ul("Can't convert object to primitive value")},ab=TypeError,$c=ui("toPrimitive"),_u=function(E,M){if(!Zo(E)||e5(E))return E;var D,F=Hc(E,$c);if(F){if(M===void 0&&(M="default"),D=Z3(F,E,M),!Zo(D)||e5(D))return D;throw new ab("Can't convert object to primitive value")}return M===void 0&&(M="number"),bv(E,M)},gh=Uo,Vc=function(E){var M=_u(E,"string");return gh(M)?M:M+""},yh=mr,lm=d.document,Su=yh(lm)&&yh(lm.createElement),ml=function(E){return Su?lm.createElement(E):{}},ad=ml,um=!ht&&!y(function(){return Object.defineProperty(ad("div"),"a",{get:function(){return 7}}).a!==7}),Lo=ht,sb=wt,bh=_t,wv=Nr,Ov=xo,j4=Vc,ys=En,wh=um,xv=Object.getOwnPropertyDescriptor;Ue.f=Lo?xv:function(E,M){if(E=Ov(E),M=j4(M),wh)try{return xv(E,M)}catch{}if(ys(E,M))return wv(!sb(bh.f,E,M),E[M])};var _v=y,Oh=Ve,xh=/#|\.prototype\./,qc=function(E,M){var D=Eu[sd(E)];return D===t5||D!==Sv&&(Oh(M)?_v(M):!!M)},sd=qc.normalize=function(E){return String(E).replace(xh,".").toLowerCase()},Eu=qc.data={},Sv=qc.NATIVE="N",t5=qc.POLYFILL="P",cm=qc,fm=va,_h=_,Sh=Ne(Ne.bind),ci=function(E,M){return fm(E),M===void 0?E:_h?Sh(E,M):function(){return E.apply(M,arguments)}},La={},lb=ht&&y(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),r5=mr,Ev=String,Us=TypeError,Gs=function(E){if(r5(E))return E;throw new Us(Ev(E)+" is not an object")},fo=ht,pm=um,Iu=lb,Eh=Gs,Iv=Vc,kv=TypeError,Qf=Object.defineProperty,ld=Object.getOwnPropertyDescriptor,rs="enumerable",to="configurable",ub="writable";La.f=fo?Iu?function(E,M,D){if(Eh(E),M=Iv(M),Eh(D),typeof E=="function"&&M==="prototype"&&"value"in D&&ub in D&&!D[ub]){var F=ld(E,M);F&&F[ub]&&(E[M]=D.value,D={configurable:to in D?D[to]:F[to],enumerable:rs in D?D[rs]:F[rs],writable:!1})}return Qf(E,M,D)}:Qf:function(E,M,D){if(Eh(E),M=Iv(M),Eh(D),pm)try{return Qf(E,M,D)}catch{}if("get"in D||"set"in D)throw new kv("Accessors not supported");return"value"in D&&(E[M]=D.value),E};var vl=La,Zf=Nr,bs=ht?function(E,M,D){return vl.f(E,M,Zf(1,D))}:function(E,M,D){return E[M]=D,E},dm=d,Ih=Y,Uc=Ne,ga=Ve,hm=Ue.f,ep=cm,tp=Un,ud=ci,rp=bs,cb=En,Pr=function(E){var M=function(D,F,Q){if(this instanceof M){switch(arguments.length){case 0:return new E;case 1:return new E(D);case 2:return new E(D,F)}return new E(D,F,Q)}return Ih(E,this,arguments)};return M.prototype=E.prototype,M},Xr=function(E,M){var D,F,Q,le,Oe,we,Se,Be,Xe,et=E.target,jt=E.global,Wt=E.stat,dr=E.proto,cr=jt?dm:Wt?dm[et]:(dm[et]||{}).prototype,Dr=jt?tp:tp[et]||rp(tp,et,{})[et],en=Dr.prototype;for(le in M)F=!(D=ep(jt?le:et+(Wt?".":"#")+le,E.forced))&&cr&&cb(cr,le),we=Dr[le],F&&(Se=E.dontCallGetSet?(Xe=hm(cr,le))&&Xe.value:cr[le]),Oe=F&&Se?Se:M[le],F&&typeof we==typeof Oe||(Be=E.bind&&F?ud(Oe,dm):E.wrap&&F?Pr(Oe):dr&&ga(Oe)?Uc(Oe):Oe,(E.sham||Oe&&Oe.sham||we&&we.sham)&&rp(Be,"sham",!0),rp(Dr,le,Be),dr&&(cb(tp,Q=et+"Prototype")||rp(tp,Q,{}),rp(tp[Q],le,Oe),E.real&&en&&(D||!en[le])&&rp(en,le,Oe)))},Pv=Xr,C4=ht,Gc=La.f;Pv({target:"Object",stat:!0,forced:Object.defineProperty!==Gc,sham:!C4},{defineProperty:Gc});var fb=Un.Object,Jc=o.exports=function(E,M,D){return fb.defineProperty(E,M,D)};fb.defineProperty.sham&&(Jc.sham=!0);var jv=o.exports,Ln=jv,kh=r(Ln),mm=ge,dc=Array.isArray||function(E){return mm(E)==="Array"},Gl=Math.ceil,Cv=Math.floor,Ph=Math.trunc||function(E){var M=+E;return(M>0?Cv:Gl)(M)},gl=function(E){var M=+E;return M!=M||M===0?0:Ph(M)},ya=gl,Tv=Math.min,ro=function(E){return E>0?Tv(ya(E),9007199254740991):0},ws=function(E){return ro(E.length)},T4=TypeError,vm=function(E){if(E>9007199254740991)throw T4("Maximum allowed index exceeded");return E},jh=Vc,gm=La,hc=Nr,ba=function(E,M,D){var F=jh(M);F in E?gm.f(E,F,hc(0,D)):E[F]=D},cd={};cd[ui("toStringTag")]="z";var Gr=String(cd)==="[object z]",fd=Gr,ku=Ve,Xc=ge,pb=ui("toStringTag"),n5=Object,o5=Xc(function(){return arguments}())==="Arguments",Js=fd?Xc:function(E){var M,D,F;return E===void 0?"Undefined":E===null?"Null":typeof(D=function(Q,le){try{return Q[le]}catch{}}(M=n5(E),pb))=="string"?D:o5?Xc(M):(F=Xc(M))==="Object"&&ku(M.callee)?"Arguments":F},Av=Ve,Kc=Jf,db=Z(Function.toString);Av(Kc.inspectSource)||(Kc.inspectSource=function(E){return db(E)});var Mv=Kc.inspectSource,pd=Z,i5=y,hb=Ve,ym=Js,a5=Mv,Po=function(){},Ch=[],mb=Mn("Reflect","construct"),Th=/^\s*(?:class|function)\b/,s5=pd(Th.exec),Rv=!Th.test(Po),Ah=function(E){if(!hb(E))return!1;try{return mb(Po,Ch,E),!0}catch{return!1}},Jl=function(E){if(!hb(E))return!1;switch(ym(E)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return Rv||!!s5(Th,a5(E))}catch{return!0}};Jl.sham=!0;var Pu=!mb||i5(function(){var E;return Ah(Ah.call)||!Ah(Object)||!Ah(function(){E=!0})||E})?Jl:Ah,Dv=dc,yl=Pu,zv=mr,bm=ui("species"),Mh=Array,Nv=function(E){var M;return Dv(E)&&(M=E.constructor,(yl(M)&&(M===Mh||Dv(M.prototype))||zv(M)&&(M=M[bm])===null)&&(M=void 0)),M===void 0?Mh:M},fi=function(E,M){return new(Nv(E))(M===0?0:M)},l5=y,Rh=es,np=ui("species"),Yc=function(E){return Rh>=51||!l5(function(){var M=[];return(M.constructor={})[np]=function(){return{foo:1}},M[E](Boolean).foo!==1})},vb=Xr,wm=y,Vt=dc,gb=mr,Om=gs,yb=ws,bb=vm,Fo=ba,A4=fi,M4=Yc,Xl=es,wb=ui("isConcatSpreadable"),xm=Xl>=51||!wm(function(){var E=[];return E[wb]=!1,E.concat()[0]!==E}),dd=function(E){if(!gb(E))return!1;var M=E[wb];return M!==void 0?!!M:Vt(E)};vb({target:"Array",proto:!0,arity:1,forced:!xm||!M4("concat")},{concat:function(E){var M,D,F,Q,le,Oe=Om(this),we=A4(Oe,0),Se=0;for(M=-1,F=arguments.length;Mwe;)if((Q=le[we++])!=Q)return!0}else for(;Oe>we;we++)if((E||we in le)&&le[we]===D)return E||we||0;return!E&&-1}},Qc={includes:Xs(!0),indexOf:Xs(!1)},Gi={},aa=En,Zc=xo,Yl=Qc.indexOf,ef=Gi,md=Z([].push),op=function(E,M){var D,F=Zc(E),Q=0,le=[];for(D in F)!aa(ef,D)&&aa(F,D)&&md(le,D);for(;M.length>Q;)aa(F,D=M[Q++])&&(~Yl(le,D)||md(le,D));return le},Ob=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],c5=op,Wv=Ob,vd=Object.keys||function(E){return c5(E,Wv)},xb=ht,Ql=lb,zh=La,_b=Gs,f5=xo,Sb=vd;Fv.f=xb&&!Ql?Object.defineProperties:function(E,M){_b(E);for(var D,F=f5(M),Q=Sb(M),le=Q.length,Oe=0;le>Oe;)zh.f(E,D=Q[Oe++],F[D]);return E};var Fa,Hv=Mn("document","documentElement"),km=od,$v=qs("keys"),gd=function(E){return $v[E]||($v[E]=km(E))},Vv=Gs,qv=Fv,Pm=Ob,bl=Gi,tf=Hv,ju=ml,mc="prototype",ip="script",jm=gd("IE_PROTO"),vc=function(){},Nh=function(E){return"<"+ip+">"+E+""},Uv=function(E){E.write(Nh("")),E.close();var M=E.parentWindow.Object;return E=null,M},yd=function(){try{Fa=new ActiveXObject("htmlfile")}catch{}var E,M,D;yd=typeof document<"u"?document.domain&&Fa?Uv(Fa):(M=ju("iframe"),D="java"+ip+":",M.style.display="none",tf.appendChild(M),M.src=String(D),(E=M.contentWindow.document).open(),E.write(Nh("document.F=Object")),E.close(),E.F):Uv(Fa);for(var F=Pm.length;F--;)delete yd[mc][Pm[F]];return yd()};bl[jm]=!0;var ap=Object.create||function(E,M){var D;return E!==null?(vc[mc]=Vv(E),D=new vc,vc[mc]=null,D[jm]=E):D=yd(),M===void 0?D:qv.f(D,M)},Zl={},Cm=op,Tm=Ob.concat("length","prototype");Zl.f=Object.getOwnPropertyNames||function(E){return Cm(E,Tm)};var Lh={},p5=Em,bd=ws,d5=ba,rf=Array,Eb=Math.max,Ro=function(E,M,D){for(var F=bd(E),Q=p5(M,F),le=p5(D===void 0?F:D,F),Oe=rf(Eb(le-Q,0)),we=0;Qjr;jr++)if((we||jr in cr)&&(Wt=Dr(jt=cr[jr],jr,dr),E))if(M)ho[jr]=Wt;else if(Wt)switch(E){case 3:return!0;case 5:return jt;case 6:return jr;case 2:_d(ho,jt)}else switch(E){case 4:return!1;case 7:_d(ho,jt)}return le?-1:F||Q?Q:ho}},Rn={forEach:Mu(0),map:Mu(1),filter:Mu(2),some:Mu(3),every:Mu(4),find:Mu(5),findIndex:Mu(6),filterReject:Mu(7)},j=Xr,$=d,oe=wt,ce=Z,Ee=ht,He=ql,xt=y,Kt=En,Qr=go,Fn=Gs,Ri=xo,nu=Vc,Ru=hd,Ks=Nr,Jo=ap,Cb=vd,a7=Zl,W4=Lh,w5=Cu,Lm=Ue,i9=La,Kk=Fv,s7=_t,a9=pi,s9=nf,Kv=qs,l9=Gi,u9=od,Yk=ui,O5=yc,Yv=di,l7=Au,Qk=af,H4=up,x5=Rn.forEach,Xo=gd("hidden"),Sd="Symbol",Qv="prototype",$4=H4.set,Wh=H4.getterFor(Sd),ou=Object[Qv],Hh=$.Symbol,_5=Hh&&Hh[Qv],u7=$.RangeError,V4=$.TypeError,hi=$.QObject,Tb=Lm.f,Du=i9.f,$h=W4.f,c7=s7.f,S5=ce([].push),ns=Kv("symbols"),Bo=Kv("op-symbols"),cp=Kv("wks"),iu=!hi||!hi[Qv]||!hi[Qv].findChild,Zv=function(E,M,D){var F=Tb(ou,M);F&&delete ou[M],Du(E,M,D),F&&E!==ou&&Du(ou,M,F)},q4=Ee&&xt(function(){return Jo(Du({},"a",{get:function(){return Du(this,"a",{value:7}).a}})).a!==7})?Zv:Du,E5=function(E,M){var D=ns[E]=Jo(_5);return $4(D,{type:Sd,tag:E,description:M}),Ee||(D.description=M),D},Ab=function(E,M,D){E===ou&&Ab(Bo,M,D),Fn(E);var F=nu(M);return Fn(D),Kt(ns,F)?(D.enumerable?(Kt(E,Xo)&&E[Xo][F]&&(E[Xo][F]=!1),D=Jo(D,{enumerable:Ks(0,!1)})):(Kt(E,Xo)||Du(E,Xo,Ks(1,{})),E[Xo][F]=!0),q4(E,F,D)):Du(E,F,D)},Vh=function(E,M){Fn(E);var D=Ri(M),F=Cb(D).concat(eg(D));return x5(F,function(Q){Ee&&!oe(Mb,D,Q)||Ab(E,Q,D[Q])}),E},Mb=function(E){var M=nu(E),D=oe(c7,this,M);return!(this===ou&&Kt(ns,M)&&!Kt(Bo,M))&&(!(D||!Kt(this,M)||!Kt(ns,M)||Kt(this,Xo)&&this[Xo][M])||D)},lf=function(E,M){var D=Ri(E),F=nu(M);if(D!==ou||!Kt(ns,F)||Kt(Bo,F)){var Q=Tb(D,F);return!Q||!Kt(ns,F)||Kt(D,Xo)&&D[Xo][F]||(Q.enumerable=!0),Q}},Ba=function(E){var M=$h(Ri(E)),D=[];return x5(M,function(F){Kt(ns,F)||Kt(l9,F)||S5(D,F)}),D},eg=function(E){var M=E===ou,D=$h(M?Bo:Ri(E)),F=[];return x5(D,function(Q){!Kt(ns,Q)||M&&!Kt(ou,Q)||S5(F,ns[Q])}),F};He||(Hh=function(){if(Qr(_5,this))throw new V4("Symbol is not a constructor");var E=arguments.length&&arguments[0]!==void 0?Ru(arguments[0]):void 0,M=u9(E),D=function(F){var Q=this===void 0?$:this;Q===ou&&oe(D,Bo,F),Kt(Q,Xo)&&Kt(Q[Xo],M)&&(Q[Xo][M]=!1);var le=Ks(1,F);try{q4(Q,M,le)}catch(Oe){if(!(Oe instanceof u7))throw Oe;Zv(Q,M,le)}};return Ee&&iu&&q4(ou,M,{configurable:!0,set:D}),E5(M,E)},a9(_5=Hh[Qv],"toString",function(){return Wh(this).tag}),a9(Hh,"withoutSetter",function(E){return E5(u9(E),E)}),s7.f=Mb,i9.f=Ab,Kk.f=Vh,Lm.f=lf,a7.f=W4.f=Ba,w5.f=eg,O5.f=function(E){return E5(Yk(E),E)},Ee&&s9(_5,"description",{configurable:!0,get:function(){return Wh(this).description}})),j({global:!0,constructor:!0,wrap:!0,forced:!He,sham:!He},{Symbol:Hh}),x5(Cb(cp),function(E){Yv(E)}),j({target:Sd,stat:!0,forced:!He},{useSetter:function(){iu=!0},useSimple:function(){iu=!1}}),j({target:"Object",stat:!0,forced:!He,sham:!Ee},{create:function(E,M){return M===void 0?Jo(E):Vh(Jo(E),M)},defineProperty:Ab,defineProperties:Vh,getOwnPropertyDescriptor:lf}),j({target:"Object",stat:!0,forced:!He},{getOwnPropertyNames:Ba}),l7(),Qk(Hh,Sd),l9[Xo]=!0;var Fm=ql&&!!Symbol.for&&!!Symbol.keyFor,Bm=Xr,f7=Mn,Wm=En,Hm=hd,U4=qs,Wa=Fm,I5=U4("string-to-symbol-registry"),Rb=U4("symbol-to-string-registry");Bm({target:"Symbol",stat:!0,forced:!Wa},{for:function(E){var M=Hm(E);if(Wm(I5,M))return I5[M];var D=f7("Symbol")(M);return I5[M]=D,Rb[D]=M,D}});var Db=Xr,k5=En,P5=Uo,tg=li,qh=Fm,rg=qs("symbol-to-string-registry");Db({target:"Symbol",stat:!0,forced:!qh},{keyFor:function(E){if(!P5(E))throw new TypeError(tg(E)+" is not a symbol");if(k5(rg,E))return rg[E]}});var $m=Z([].slice),ng=dc,j5=Ve,og=ge,ig=hd,G4=Z([].push),J4=Xr,zb=Mn,Nb=Y,X4=wt,Lb=Z,C5=y,Ed=Ve,ag=Uo,K4=$m,Vm=function(E){if(j5(E))return E;if(ng(E)){for(var M=E.length,D=[],F=0;F=M.length)return E.target=void 0,Cd(void 0,!0);switch(E.kind){case"keys":return Cd(D,!1);case"values":return Cd(M[D],!1)}return Cd([D,M[D]],!1)},"values"),l6.Arguments=l6.Array;var Jm={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},sa=d,B5=Js,mg=bs,W5=jd,k7=ui("toStringTag");for(var Qh in Jm){var Xm=sa[Qh],P7=Xm&&Xm.prototype;P7&&B5(P7)!==k7&&mg(P7,k7,Qh),W5[Qh]=W5.Array}var os=Xh,g9=ui,j7=La.f,Jb=g9("metadata"),vg=Function.prototype;vg[Jb]===void 0&&j7(vg,Jb,{value:null}),di("asyncDispose"),di("dispose"),di("metadata");var y9=os,c6=Z,Km=Mn("Symbol"),f6=Km.keyFor,C7=c6(Km.prototype.valueOf),p6=Km.isRegisteredSymbol||function(E){try{return f6(C7(E))!==void 0}catch{return!1}};Xr({target:"Symbol",stat:!0},{isRegisteredSymbol:p6});for(var gg=qs,Xb=Mn,H5=Z,T7=Uo,A7=ui,Ym=Xb("Symbol"),M7=Ym.isWellKnownSymbol,$5=Xb("Object","getOwnPropertyNames"),R7=H5(Ym.prototype.valueOf),d6=gg("wks"),V5=0,D7=$5(Ym),b9=D7.length;V5=we?E?"":void 0:(F=Oc(le,Oe))<55296||F>56319||Oe+1===we||(Q=Oc(le,Oe+1))<56320||Q>57343?E?Qi(le,Oe):F:E?as(le,Oe,Oe+2):Q-56320+(F-55296<<10)+65536}},L7={codeAt:Zs(!1),charAt:Zs(!0)}.charAt,O9=hd,yg=up,h6=L5,el=F5,Yb="String Iterator",m6=yg.set,U5=yg.getterFor(Yb);h6(String,"String",function(E){m6(this,{type:Yb,string:O9(E),index:0})},function(){var E,M=U5(this),D=M.string,F=M.index;return F>=D.length?el(void 0,!0):(E=L7(D,F),M.index+=E.length,el(E,!1))});var uf=yc.f("iterator"),bg=uf,G5=r(bg);function Zh(E){return Zh=typeof dp=="function"&&typeof G5=="symbol"?function(M){return typeof M}:function(M){return M&&typeof dp=="function"&&M.constructor===dp&&M!==dp.prototype?"symbol":typeof M},Zh(E)}var Qb=r(yc.f("toPrimitive"));function J5(E){var M=function(D,F){if(Zh(D)!=="object"||D===null)return D;var Q=D[Qb];if(Q!==void 0){var le=Q.call(D,F||"default");if(Zh(le)!=="object")return le;throw new TypeError("@@toPrimitive must return a primitive value.")}return(F==="string"?String:Number)(D)}(E,"string");return Zh(M)==="symbol"?M:String(M)}function X5(E,M){for(var D=0;D=0:we>Se;Se+=Be)Se in Oe&&(Q=D(Q,Oe[Se],Se,le));return Q}},ew={left:E6(!1),right:E6(!0)},e1=y,wg=function(E,M){var D=[][E];return!!D&&e1(function(){D.call(null,M||function(){return 1},1)})},mp=ge(d.process)==="process",t2=ew.left;Xr({target:"Array",proto:!0,forced:!mp&&es>79&&es<83||!wg("reduce")},{reduce:function(E){var M=arguments.length;return t2(this,E,M,M>1?arguments[1]:void 0)}});var W7=ss("Array","reduce"),tw=go,H7=W7,I6=Array.prototype,cf=r(function(E){var M=E.reduce;return E===I6||tw(I6,E)&&M===I6.reduce?H7:M}),rw=Rn.filter;Xr({target:"Array",proto:!0,forced:!Yc("filter")},{filter:function(E){return rw(this,E,arguments.length>1?arguments[1]:void 0)}});var $7=ss("Array","filter"),P9=go,j9=$7,Nu=Array.prototype,la=r(function(E){var M=E.filter;return E===Nu||P9(Nu,E)&&M===Nu.filter?j9:M}),V7=Rn.map;Xr({target:"Array",proto:!0,forced:!Yc("map")},{map:function(E){return V7(this,E,arguments.length>1?arguments[1]:void 0)}});var k6=ss("Array","map"),nw=go,P6=k6,r2=Array.prototype,Lu=r(function(E){var M=E.map;return E===r2||nw(r2,E)&&M===r2.map?P6:M}),j6=dc,C9=ws,T9=vm,q7=ci,C6=function(E,M,D,F,Q,le,Oe,we){for(var Se,Be,Xe=Q,et=0,jt=!!Oe&&q7(Oe,we);et0&&j6(Se)?(Be=C9(Se),Xe=C6(E,M,Se,Be,Xe,le-1)-1):(T9(Xe+1),E[Xe]=Se),Xe++),et++;return Xe},ow=C6,U7=va,A9=gs,G7=ws,T6=fi;Xr({target:"Array",proto:!0},{flatMap:function(E){var M,D=A9(this),F=G7(D);return U7(E),(M=T6(D,0)).length=ow(M,D,D,F,0,1,E,arguments.length>1?arguments[1]:void 0),M}});var M9=ss("Array","flatMap"),A6=go,n2=M9,iw=Array.prototype,M6=r(function(E){var M=E.flatMap;return E===iw||A6(iw,E)&&M===iw.flatMap?n2:M}),aw=function(){function E(M,D,F){var Q,le,Oe;t(this,E),Sl(this,"_listeners",{add:Zm(Q=this._add).call(Q,this),remove:Zm(le=this._remove).call(le,this),update:Zm(Oe=this._update).call(Oe,this)}),this._source=M,this._transformers=D,this._target=F}return hp(E,[{key:"all",value:function(){return this._target.update(this._transformItems(this._source.get())),this}},{key:"start",value:function(){return this._source.on("add",this._listeners.add),this._source.on("remove",this._listeners.remove),this._source.on("update",this._listeners.update),this}},{key:"stop",value:function(){return this._source.off("add",this._listeners.add),this._source.off("remove",this._listeners.remove),this._source.off("update",this._listeners.update),this}},{key:"_transformItems",value:function(M){var D;return cf(D=this._transformers).call(D,function(F,Q){return Q(F)},M)}},{key:"_add",value:function(M,D){D!=null&&this._target.add(this._transformItems(this._source.get(D.items)))}},{key:"_update",value:function(M,D){D!=null&&this._target.update(this._transformItems(this._source.get(D.items)))}},{key:"_remove",value:function(M,D){D!=null&&this._target.remove(this._transformItems(D.oldData))}}]),E}(),R9=function(){function E(M){t(this,E),Sl(this,"_transformers",[]),this._source=M}return hp(E,[{key:"filter",value:function(M){return this._transformers.push(function(D){return la(D).call(D,M)}),this}},{key:"map",value:function(M){return this._transformers.push(function(D){return Lu(D).call(D,M)}),this}},{key:"flatMap",value:function(M){return this._transformers.push(function(D){return M6(D).call(D,M)}),this}},{key:"to",value:function(M){return new aw(this._source,this._transformers,M)}}]),E}(),J7=wt,X7=Gs,K7=qi,Y7=function(E,M,D){var F,Q;X7(E);try{if(!(F=K7(E,"return"))){if(M==="throw")throw D;return D}F=J7(F,E)}catch(le){Q=!0,F=le}if(M==="throw")throw D;if(Q)throw F;return X7(F),D},sw=Gs,Q7=Y7,o2=jd,Z7=ui("iterator"),R6=Array.prototype,i2=function(E){return E!==void 0&&(o2.Array===E||R6[Z7]===E)},lw=Js,uw=qi,ti=yn,e8=jd,t1=ui("iterator"),a2=function(E){if(!ti(E))return uw(E,t1)||uw(E,"@@iterator")||e8[lw(E)]},Wo=wt,D9=va,D6=Gs,t8=li,nr=a2,r8=TypeError,cw=function(E,M){var D=arguments.length<2?nr(E):M;if(D9(D))return D6(Wo(D,E));throw new r8(t8(E)+" is not iterable")},z9=ci,N9=wt,n8=gs,L9=function(E,M,D,F){try{return F?M(sw(D)[0],D[1]):M(D)}catch(Q){Q7(E,"throw",Q)}},z6=i2,ff=Pu,fw=ws,pf=ba,N6=cw,Oa=a2,o8=Array,Si=ui("iterator"),pw=!1;try{var L6=0,F6={next:function(){return{done:!!L6++}},return:function(){pw=!0}};F6[Si]=function(){return this},Array.from(F6,function(){throw 2})}catch{}var B6=function(E,M){try{if(!M&&!pw)return!1}catch{return!1}var D=!1;try{var F={};F[Si]=function(){return{next:function(){return{done:D=!0}}}},E(F)}catch{}return D},F9=function(E){var M=n8(E),D=ff(this),F=arguments.length,Q=F>1?arguments[1]:void 0,le=Q!==void 0;le&&(Q=z9(Q,F>2?arguments[2]:void 0));var Oe,we,Se,Be,Xe,et,jt=Oa(M),Wt=0;if(!jt||this===o8&&z6(jt))for(Oe=fw(M),we=D?new this(Oe):o8(Oe);Oe>Wt;Wt++)et=le?Q(M[Wt],Wt):M[Wt],pf(we,Wt,et);else for(Xe=(Be=N6(M,jt)).next,we=D?new this:[];!(Se=N9(Xe,Be)).done;Wt++)et=le?L9(Be,Q,[Se.value,Wt],!0):Se.value,pf(we,Wt,et);return we.length=Wt,we};Xr({target:"Array",stat:!0,forced:!B6(function(E){Array.from(E)})},{from:F9});var i8=Un.Array.from,dw=r(i8),hw=a2,a8=r(hw),s2=r(hw);Xr({target:"Array",stat:!0},{isArray:dc});var mw=Un.Array.isArray,W6=r(mw),B9=ht,l2=dc,H6=TypeError,$6=Object.getOwnPropertyDescriptor,vw=B9&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(E){return E instanceof TypeError}}()?function(E,M){if(l2(E)&&!$6(E,"length").writable)throw new H6("Cannot set read only .length");return E.length=M}:function(E,M){return E.length=M},gw=gs,V6=ws,W9=vw,u2=vm;Xr({target:"Array",proto:!0,arity:1,forced:y(function(){return[].push.call({length:4294967296},1)!==4294967297})||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(E){return E instanceof TypeError}}()},{push:function(E){var M=gw(this),D=V6(M),F=arguments.length;u2(D+F);for(var Q=0;QE.length)&&(M=E.length);for(var D=0,F=new Array(M);D1?arguments[1]:void 0)};Xr({target:"Array",proto:!0,forced:[].forEach!==m8},{forEach:m8});var eP=ss("Array","forEach"),d2=Js,Q9=En,Z9=go,h2=eP,_g=Array.prototype,eI={DOMTokenList:!0,NodeList:!0},e0=function(E){var M=E.forEach;return E===_g||Z9(_g,E)&&M===_g.forEach||Q9(eI,d2(E))?h2:M},yp=r(e0),v8=Xr,X6=dc,tI=Z([].reverse),g8=[1,2];v8({target:"Array",proto:!0,forced:String(g8)===String(g8.reverse())},{reverse:function(){return X6(this)&&(this.length=this.length),tI(this)}});var y8=ss("Array","reverse"),rI=go,K6=y8,Sg=Array.prototype,Y6=function(E){var M=E.reverse;return E===Sg||rI(Sg,E)&&M===Sg.reverse?K6:M},nI=r(Y6),xw=li,Q6=TypeError,Z6=function(E,M){if(!delete E[M])throw new Q6("Cannot delete property "+xw(M)+" of "+xw(E))},oI=Xr,tP=gs,iI=Em,aI=gl,sI=ws,ex=vw,lI=vm,Rd=fi,tx=ba,_w=Z6,rP=Yc("splice"),uI=Math.max,cI=Math.min;oI({target:"Array",proto:!0,forced:!rP},{splice:function(E,M){var D,F,Q,le,Oe,we,Se=tP(this),Be=sI(Se),Xe=iI(E,Be),et=arguments.length;for(et===0?D=F=0:et===1?(D=0,F=Be-Xe):(D=et-2,F=cI(uI(aI(M),0),Be-Xe)),lI(Be+D-F),Q=Rd(Se,F),le=0;leBe-F+D;le--)_w(Se,le-1)}else if(D>F)for(le=Be-F;le>Xe;le--)we=le+D-1,(Oe=le+F-1)in Se?Se[we]=Se[Oe]:_w(Se,we);for(le=0;leQ;)for(var we,Se=nx(arguments[Q++]),Be=le?r0(t0(Se),le(Se)):t0(Se),Xe=Be.length,et=0;Xe>et;)we=Be[et++],O8&&!dI(Oe,Se,we)||(D[we]=Se[we]);return D}:xa,ix=ox;Xr({target:"Object",stat:!0,arity:2,forced:Object.assign!==ix},{assign:ix});var ax=r(Un.Object.assign),vI=gs,m2=R5,gI=fg;Xr({target:"Object",stat:!0,forced:y(function(){m2(1)}),sham:!gI},{getPrototypeOf:function(E){return m2(vI(E))}});var Sw=Un.Object.getPrototypeOf;Xr({target:"Object",stat:!0,sham:!ht},{create:ap});var E8=Un.Object,sx=function(E,M){return E8.create(E,M)},Ew=r(sx),Iw=Un,ua=Y;Iw.JSON||(Iw.JSON={stringify:JSON.stringify});var lx=function(E,M,D){return ua(Iw.JSON.stringify,null,arguments)},yI=r(lx),ux=typeof Bun=="function"&&Bun&&typeof Bun.version=="string",cx=TypeError,fx=function(E,M){if(ED,Oe=px(F)?F:j8(F),we=le?nP(arguments,D):[],Se=le?function(){bI(Oe,this,we)}:Oe;return M?E(Se,Q):E(Se)}:E},v2=Xr,dx=d,Pw=kw(dx.setInterval,!0);v2({global:!0,bind:!0,forced:dx.setInterval!==Pw},{setInterval:Pw});var C8=Xr,T8=d,hx=kw(T8.setTimeout,!0);C8({global:!0,bind:!0,forced:T8.setTimeout!==hx},{setTimeout:hx});var hf=r(Un.setTimeout),i1={exports:{}};(function(E){function M(D){if(D)return function(F){return Object.assign(F,M.prototype),F._callbacks=new Map,F}(D);this._callbacks=new Map}M.prototype.on=function(D,F){let Q=this._callbacks.get(D)??[];return Q.push(F),this._callbacks.set(D,Q),this},M.prototype.once=function(D,F){let Q=(...le)=>{this.off(D,Q),F.apply(this,le)};return Q.fn=F,this.on(D,Q),this},M.prototype.off=function(D,F){if(D===void 0&&F===void 0)return this._callbacks.clear(),this;if(F===void 0)return this._callbacks.delete(D),this;let Q=this._callbacks.get(D);if(Q){for(let[le,Oe]of Q.entries())if(Oe===F||Oe.fn===F){Q.splice(le,1);break}Q.length===0?this._callbacks.delete(D):this._callbacks.set(D,Q)}return this},M.prototype.emit=function(D,...F){let Q=this._callbacks.get(D);if(Q){let le=[...Q];for(let Oe of le)Oe.apply(this,F)}return this},M.prototype.listeners=function(D){return this._callbacks.get(D)??[]},M.prototype.listenerCount=function(D){if(D)return this.listeners(D).length;let F=0;for(let Q of this._callbacks.values())F+=Q.length;return F},M.prototype.hasListeners=function(D){return this.listenerCount(D)>0},M.prototype.addEventListener=M.prototype.on,M.prototype.removeListener=M.prototype.off,M.prototype.removeEventListener=M.prototype.off,M.prototype.removeAllListeners=M.prototype.off,E.exports=M})(i1);var A8,jw=r(i1.exports);function Bu(){return Bu=Object.assign||function(E){for(var M=1;M"u"?{style:{}}:document.createElement("div"),Kn=Math.round,Eg=Math.abs,Tw=Date.now;function wp(E,M){for(var D,F,Q=M[0].toUpperCase()+M.slice(1),le=0;le"u"?{}:window;var Ig=wp(OI.style,"touchAction"),M8=Ig!==void 0,R8="compute",kg="auto",g2="manipulation",a1="none",y2="pan-x",Aw="pan-y",b2=function(){if(!M8)return!1;var E={},M=o0.CSS&&o0.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(D){return E[D]=!M||o0.CSS.supports("touch-action",D)}),E}(),D8="ontouchstart"in o0,oP=wp(o0,"PointerEvent")!==void 0,z8=D8&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),w2="touch",Mw="mouse",N8=25,Es=1,_a=4,rl=8,Pg=1,jg=2,Cg=4,Tg=8,El=16,mf=jg|Cg,a0=Tg|El,L8=mf|a0,mx=["x","y"],Ag=["clientX","clientY"];function lu(E,M,D){var F;if(E)if(E.forEach)E.forEach(M,D);else if(E.length!==void 0)for(F=0;F-1}var Dw=function(){function E(D,F){this.manager=D,this.set(F)}var M=E.prototype;return M.set=function(D){D===R8&&(D=this.compute()),M8&&this.manager.element.style&&b2[D]&&(this.manager.element.style[Ig]=D),this.actions=D.toLowerCase().trim()},M.update=function(){this.set(this.manager.options.touchAction)},M.compute=function(){var D=[];return lu(this.manager.recognizers,function(F){Rw(F.options.enable,[F])&&(D=D.concat(F.getTouchAction()))}),function(F){if(s1(F,a1))return a1;var Q=s1(F,y2),le=s1(F,Aw);return Q&&le?a1:Q||le?Q?y2:Aw:s1(F,g2)?g2:kg}(D.join(" "))},M.preventDefaults=function(D){var F=D.srcEvent,Q=D.offsetDirection;if(this.manager.session.prevented)F.preventDefault();else{var le=this.actions,Oe=s1(le,a1)&&!b2[a1],we=s1(le,Aw)&&!b2[Aw],Se=s1(le,y2)&&!b2[y2];if(Oe){var Be=D.pointers.length===1,Xe=D.distance<2,et=D.deltaTime<250;if(Be&&Xe&&et)return}if(!Se||!we)return Oe||we&&Q&mf||Se&&Q&a0?this.preventSrc(F):void 0}},M.preventSrc=function(D){this.manager.session.prevented=!0,D.preventDefault()},E}();function vx(E,M){for(;E;){if(E===M)return!0;E=E.parentNode}return!1}function l1(E){var M=E.length;if(M===1)return{x:Kn(E[0].clientX),y:Kn(E[0].clientY)};for(var D=0,F=0,Q=0;Q=Eg(M)?E<0?jg:Cg:M<0?Tg:El}function Op(E,M,D){return{x:M/E||0,y:D/E||0}}function F8(E,M){var D=E.session,F=M.pointers,Q=F.length;D.firstInput||(D.firstInput=Hu(M)),Q>1&&!D.firstMultiple?D.firstMultiple=Hu(M):Q===1&&(D.firstMultiple=!1);var le=D.firstInput,Oe=D.firstMultiple,we=Oe?Oe.center:le.center,Se=M.center=l1(F);M.timeStamp=Tw(),M.deltaTime=M.timeStamp-le.timeStamp,M.angle=u1(we,Se),M.distance=Il(we,Se),function(cr,Dr){var en=Dr.center,jr=cr.offsetDelta||{},po=cr.prevDelta||{},ho=cr.prevInput||{};Dr.eventType!==Es&&ho.eventType!==_a||(po=cr.prevDelta={x:ho.deltaX||0,y:ho.deltaY||0},jr=cr.offsetDelta={x:en.x,y:en.y}),Dr.deltaX=po.x+(en.x-jr.x),Dr.deltaY=po.y+(en.y-jr.y)}(D,M),M.offsetDirection=$u(M.deltaX,M.deltaY);var Be,Xe,et=Op(M.deltaTime,M.deltaX,M.deltaY);M.overallVelocityX=et.x,M.overallVelocityY=et.y,M.overallVelocity=Eg(et.x)>Eg(et.y)?et.x:et.y,M.scale=Oe?(Be=Oe.pointers,Il((Xe=F)[0],Xe[1],Ag)/Il(Be[0],Be[1],Ag)):1,M.rotation=Oe?function(cr,Dr){return u1(Dr[1],Dr[0],Ag)+u1(cr[1],cr[0],Ag)}(Oe.pointers,F):0,M.maxPointers=D.prevInput?M.pointers.length>D.prevInput.maxPointers?M.pointers.length:D.prevInput.maxPointers:M.pointers.length,function(cr,Dr){var en,jr,po,ho,zo=cr.lastInterval||Dr,ta=Dr.timeStamp-zo.timeStamp;if(Dr.eventType!==rl&&(ta>N8||zo.velocity===void 0)){var io=Dr.deltaX-zo.deltaX,Rs=Dr.deltaY-zo.deltaY,Ds=Op(ta,io,Rs);jr=Ds.x,po=Ds.y,en=Eg(Ds.x)>Eg(Ds.y)?Ds.x:Ds.y,ho=$u(io,Rs),cr.lastInterval=Dr}else en=zo.velocity,jr=zo.velocityX,po=zo.velocityY,ho=zo.direction;Dr.velocity=en,Dr.velocityX=jr,Dr.velocityY=po,Dr.direction=ho}(D,M);var jt,Wt=E.element,dr=M.srcEvent;vx(jt=dr.composedPath?dr.composedPath()[0]:dr.path?dr.path[0]:dr.target,Wt)&&(Wt=jt),M.target=Wt}function zw(E,M,D){var F=D.pointers.length,Q=D.changedPointers.length,le=M&Es&&F-Q==0,Oe=M&(_a|rl)&&F-Q==0;D.isFirst=!!le,D.isFinal=!!Oe,le&&(E.session={}),D.eventType=M,F8(E,D),E.emit("hammer.input",D),E.recognize(D),E.session.prevInput=D}function xp(E){return E.trim().split(/\s+/g)}function ls(E,M,D){lu(xp(M),function(F){E.addEventListener(F,D,!1)})}function c1(E,M,D){lu(xp(M),function(F){E.removeEventListener(F,D,!1)})}function f1(E){var M=E.ownerDocument||E;return M.defaultView||M.parentWindow||window}var p1=function(){function E(D,F){var Q=this;this.manager=D,this.callback=F,this.element=D.element,this.target=D.options.inputTarget,this.domHandler=function(le){Rw(D.options.enable,[D])&&Q.handler(le)},this.init()}var M=E.prototype;return M.handler=function(){},M.init=function(){this.evEl&&ls(this.element,this.evEl,this.domHandler),this.evTarget&&ls(this.target,this.evTarget,this.domHandler),this.evWin&&ls(f1(this.element),this.evWin,this.domHandler)},M.destroy=function(){this.evEl&&c1(this.element,this.evEl,this.domHandler),this.evTarget&&c1(this.target,this.evTarget,this.domHandler),this.evWin&&c1(f1(this.element),this.evWin,this.domHandler)},E}();function oo(E,M,D){if(E.indexOf&&!D)return E.indexOf(M);for(var F=0;FSe[M]}):F.sort()),F}var O2={touchstart:Es,touchmove:2,touchend:_a,touchcancel:rl},gx=function(E){function M(){var D;return M.prototype.evTarget="touchstart touchmove touchend touchcancel",(D=E.apply(this,arguments)||this).targetIds={},D}return Wu(M,E),M.prototype.handler=function(D){var F=O2[D.type],Q=yx.call(this,D,F);Q&&this.callback(this.manager,F,{pointers:Q[0],changedPointers:Q[1],pointerType:w2,srcEvent:D})},M}(p1);function yx(E,M){var D,F,Q=_p(E.touches),le=this.targetIds;if(M&(2|Es)&&Q.length===1)return le[Q[0].identifier]=!0,[Q,Q];var Oe=_p(E.changedTouches),we=[],Se=this.target;if(F=Q.filter(function(Be){return vx(Be.target,Se)}),M===Es)for(D=0;D-1&&F.splice(Q,1)},bx)}}function Zi(E,M){E&Es?(this.primaryTouch=M.changedPointers[0].identifier,Is.call(this,M)):E&(_a|rl)&&Is.call(this,M)}function Ea(E){for(var M=E.srcEvent.clientX,D=E.srcEvent.clientY,F=0;F-1&&this.requireFail.splice(F,1),this},M.hasRequireFailures=function(){return this.requireFail.length>0},M.canRecognizeWith=function(D){return!!this.simultaneous[D.id]},M.emit=function(D){var F=this,Q=this.state;function le(Oe){F.manager.emit(Oe,D)}Q<8&&le(F.options.event+_c(Q)),le(F.options.event),D.additionalEvent&&le(D.additionalEvent),Q>=8&&le(F.options.event+_c(Q))},M.tryEmit=function(D){if(this.canEmit())return this.emit(D);this.state=qu},M.canEmit=function(){for(var D=0;DQ.threshold&&we&Q.direction},D.attrTest=function(F){return s0.prototype.attrTest.call(this,F)&&(2&this.state||!(2&this.state)&&this.directionTest(F))},D.emit=function(F){this.pX=F.deltaX,this.pY=F.deltaY;var Q=Dg(F.direction);Q&&(F.additionalEvent=this.options.event+Q),E.prototype.emit.call(this,F)},M}(s0),l0=function(E){function M(F){return F===void 0&&(F={}),E.call(this,Bu({event:"swipe",threshold:10,velocity:.3,direction:mf|a0,pointers:1},F))||this}Wu(M,E);var D=M.prototype;return D.getTouchAction=function(){return Uu.prototype.getTouchAction.call(this)},D.attrTest=function(F){var Q,le=this.options.direction;return le&(mf|a0)?Q=F.overallVelocity:le&mf?Q=F.overallVelocityX:le&a0&&(Q=F.overallVelocityY),E.prototype.attrTest.call(this,F)&&le&F.offsetDirection&&F.distance>this.options.threshold&&F.maxPointers===this.options.pointers&&Eg(Q)>this.options.velocity&&F.eventType&_a},D.emit=function(F){var Q=Dg(F.offsetDirection);Q&&this.manager.emit(this.options.event+Q,F),this.manager.emit(this.options.event,F)},M}(s0),u0=function(E){function M(F){return F===void 0&&(F={}),E.call(this,Bu({event:"pinch",threshold:0,pointers:2},F))||this}Wu(M,E);var D=M.prototype;return D.getTouchAction=function(){return[a1]},D.attrTest=function(F){return E.prototype.attrTest.call(this,F)&&(Math.abs(F.scale-1)>this.options.threshold||2&this.state)},D.emit=function(F){if(F.scale!==1){var Q=F.scale<1?"in":"out";F.additionalEvent=this.options.event+Q}E.prototype.emit.call(this,F)},M}(s0),zg=function(E){function M(F){return F===void 0&&(F={}),E.call(this,Bu({event:"rotate",threshold:0,pointers:2},F))||this}Wu(M,E);var D=M.prototype;return D.getTouchAction=function(){return[a1]},D.attrTest=function(F){return E.prototype.attrTest.call(this,F)&&(Math.abs(F.rotation)>this.options.threshold||2&this.state)},M}(s0),Lw=function(E){function M(F){var Q;return F===void 0&&(F={}),(Q=E.call(this,Bu({event:"press",pointers:1,time:251,threshold:9},F))||this)._timer=null,Q._input=null,Q}Wu(M,E);var D=M.prototype;return D.getTouchAction=function(){return[kg]},D.process=function(F){var Q=this,le=this.options,Oe=F.pointers.length===le.pointers,we=F.distancele.time;if(this._input=F,!we||!Oe||F.eventType&(_a|rl)&&!Se)this.reset();else if(F.eventType&Es)this.reset(),this._timer=setTimeout(function(){Q.state=8,Q.tryEmit()},le.time);else if(F.eventType&_a)return 8;return qu},D.reset=function(){clearTimeout(this._timer)},D.emit=function(F){this.state===8&&(F&&F.eventType&_a?this.manager.emit(this.options.event+"up",F):(this._input.timeStamp=Tw(),this.manager.emit(this.options.event,this._input)))},M}(uu),Ng={domEvents:!1,touchAction:R8,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},Fw=[[zg,{enable:!1}],[u0,{enable:!1},["rotate"]],[l0,{direction:mf}],[Uu,{direction:mf},["swipe"]],[Nw],[Nw,{event:"doubletap",taps:2},["tap"]],[Lw]];function h1(E,M){var D,F=E.element;F.style&&(lu(E.options.cssProps,function(Q,le){D=wp(F.style,le),M?(E.oldCssProps[D]=F.style[D],F.style[D]=Q):F.style[D]=E.oldCssProps[D]||""}),M||(E.oldCssProps={}))}var Lg=function(){function E(D,F){var Q,le=this;this.options=bp({},Ng,F||{}),this.options.inputTarget=this.options.inputTarget||D,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=D,this.input=new((Q=this).options.inputClass||(oP?Sa:z8?gx:D8?_2:x2))(Q,zw),this.touchAction=new Dw(this,this.options.touchAction),h1(this,!0),lu(this.options.recognizers,function(Oe){var we=le.add(new Oe[0](Oe[1]));Oe[2]&&we.recognizeWith(Oe[2]),Oe[3]&&we.requireFailure(Oe[3])},this)}var M=E.prototype;return M.set=function(D){return bp(this.options,D),D.touchAction&&this.touchAction.update(),D.inputTarget&&(this.input.destroy(),this.input.target=D.inputTarget,this.input.init()),this},M.stop=function(D){this.session.stopped=D?2:1},M.recognize=function(D){var F=this.session;if(!F.stopped){var Q;this.touchAction.preventDefaults(D);var le=this.recognizers,Oe=F.curRecognizer;(!Oe||Oe&&8&Oe.state)&&(F.curRecognizer=null,Oe=null);for(var we=0;we\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",Oe=window.console&&(window.console.warn||window.console.log);return Oe&&Oe.call(window.console,F,le),E.apply(this,arguments)}}var Fg=Bw(function(E,M,D){for(var F=Object.keys(M),Q=0;Q=E.length?{done:!0}:{done:!1,value:E[F++]}},e:function(Se){throw Se},f:Q}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var le,Oe=!0,we=!1;return{s:function(){D=D.call(E)},n:function(){var Se=D.next();return Oe=Se.done,Se},e:function(Se){we=!0,le=Se},f:function(){try{Oe||D.return==null||D.return()}finally{if(we)throw le}}}}function V8(E,M){(M==null||M>E.length)&&(M=E.length);for(var D=0,F=new Array(M);D2)return E2.apply(void 0,Ow(F=[Ww(M[0],M[1])]).call(F,Os(gp(M).call(M,2))));var Q=M[0],le=M[1];if(Q instanceof Date&&le instanceof Date)return Q.setTime(le.getTime()),Q;var Oe,we=c0(p8(le));try{for(we.s();!(Oe=we.n()).done;){var Se=Oe.value;Object.prototype.propertyIsEnumerable.call(le,Se)&&(le[Se]===Ox?delete Q[Se]:Q[Se]===null||le[Se]===null||typeof Q[Se]!="object"||typeof le[Se]!="object"||_s(Q[Se])||_s(le[Se])?Q[Se]=xx(le[Se]):Q[Se]=E2(Q[Se],le[Se]))}}catch(Be){we.e(Be)}finally{we.f()}return Q}function xx(E){return _s(E)?Lu(E).call(E,function(M){return xx(M)}):typeof E=="object"&&E!==null?E instanceof Date?new Date(E.getTime()):E2({},E):E}function f0(E){for(var M=0,D=Do(E);M({set:E})}}()};function zd(E){var M,D=this;this._cleanupQueue=[],this.active=!1,this._dom={container:E,overlay:document.createElement("div")},this._dom.overlay.classList.add("vis-overlay"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push(function(){D._dom.overlay.parentNode.removeChild(D._dom.overlay)});var F=_x(this._dom.overlay);F.on("tap",Zm(M=this._onTapOverlay).call(M,this)),this._cleanupQueue.push(function(){F.destroy()});var Q=["tap","doubletap","press","pinch","pan","panstart","panmove","panend"];yp(Q).call(Q,function(le){F.on(le,function(Oe){Oe.srcEvent.stopPropagation()})}),document&&document.body&&(this._onClick=function(le){(function(Oe,we){for(;Oe;){if(Oe===we)return!0;Oe=Oe.parentNode}return!1})(le.target,E)||D.deactivate()},document.body.addEventListener("click",this._onClick),this._cleanupQueue.push(function(){document.body.removeEventListener("click",D._onClick)})),this._escListener=function(le){("key"in le?le.key==="Escape":le.keyCode===27)&&D.deactivate()}}jw(zd.prototype),zd.current=null,zd.prototype.destroy=function(){var E,M;this.deactivate();var D,F=c0(nI(E=w8(M=this._cleanupQueue).call(M,0)).call(E));try{for(F.s();!(D=F.n()).done;)(0,D.value)()}catch(Q){F.e(Q)}finally{F.f()}},zd.prototype.activate=function(){zd.current&&zd.current.deactivate(),zd.current=this,this.active=!0,this._dom.overlay.style.display="none",this._dom.container.classList.add("vis-active"),this.emit("change"),this.emit("activate"),document.body.addEventListener("keydown",this._escListener)},zd.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display="block",this._dom.container.classList.remove("vis-active"),document.body.removeEventListener("keydown",this._escListener),this.emit("change"),this.emit("deactivate")},zd.prototype._onTapOverlay=function(E){this.activate(),E.srcEvent.stopPropagation()};var m1=Pu,q8=li,xI=TypeError,Hg=function(E){if(m1(E))return E;throw new xI(q8(E)+" is not a constructor")},_I=Xr,Nd=Y,U8=w6,G8=Hg,J8=Gs,h=mr,w=ap,S=y,C=Mn("Reflect","construct"),R=Object.prototype,G=[].push,te=S(function(){function E(){}return!(C(function(){},[],E)instanceof E)}),re=!S(function(){C(function(){})}),ue=te||re;_I({target:"Reflect",stat:!0,forced:ue,sham:ue},{construct:function(E,M){G8(E),J8(M);var D=arguments.length<3?E:G8(arguments[2]);if(re&&!te)return C(E,M,D);if(E===D){switch(M.length){case 0:return new E;case 1:return new E(M[0]);case 2:return new E(M[0],M[1]);case 3:return new E(M[0],M[1],M[2]);case 4:return new E(M[0],M[1],M[2],M[3])}var F=[null];return Nd(G,F,M),new(Nd(U8,E,F))}var Q=D.prototype,le=w(h(Q)?Q:R),Oe=Nd(E,le,M);return h(Oe)?Oe:le}});var se=r(Un.Reflect.construct),he=r(Un.Object.getOwnPropertySymbols),_e={exports:{}},Ie=Xr,Ce=y,ke=xo,ze=Ue.f,Le=ht;Ie({target:"Object",stat:!0,forced:!Le||Ce(function(){ze(1)}),sham:!Le},{getOwnPropertyDescriptor:function(E,M){return ze(ke(E),M)}});var Te=Un.Object,lt=_e.exports=function(E,M){return Te.getOwnPropertyDescriptor(E,M)};Te.getOwnPropertyDescriptor.sham&&(lt.sham=!0);var dt=r(_e.exports),tt=Md,it=xo,Ke=Ue,st=ba;Xr({target:"Object",stat:!0,sham:!ht},{getOwnPropertyDescriptors:function(E){for(var M,D,F=it(E),Q=Ke.f,le=tt(F),Oe={},we=0;le.length>we;)(D=Q(F,M=le[we++]))!==void 0&&st(Oe,M,D);return Oe}});var De=r(Un.Object.getOwnPropertyDescriptors),Ze={exports:{}},ct=Xr,gt=ht,Et=Fv.f;ct({target:"Object",stat:!0,forced:Object.defineProperties!==Et,sham:!gt},{defineProperties:Et});var zt=Un.Object,Yt=Ze.exports=function(E,M){return zt.defineProperties(E,M)};zt.defineProperties.sham&&(Yt.sham=!0);var Tr=r(Ze.exports),_r=r(jv);function Zr(E){if(E===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return E}var at=sx,Bt=r(at);Xr({target:"Object",stat:!0},{setPrototypeOf:dg});var pn=Un.Object.setPrototypeOf,Dt=r(pn),Gt=r(Y5);function fr(E,M){var D;return fr=Dt?Gt(D=Dt).call(D):function(F,Q){return F.__proto__=Q,F},fr(E,M)}function pr(E,M){if(typeof M!="function"&&M!==null)throw new TypeError("Super expression must either be null or a function");E.prototype=Bt(M&&M.prototype,{constructor:{value:E,writable:!0,configurable:!0}}),kh(E,"prototype",{writable:!1}),M&&fr(E,M)}function nn(E,M){if(M&&(Zh(M)==="object"||typeof M=="function"))return M;if(M!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Zr(E)}var dn=Sw,_o=r(dn);function Kr(E){var M;return Kr=Dt?Gt(M=_o).call(M):function(D){return D.__proto__||_o(D)},Kr(E)}var jo={exports:{}},cs={exports:{}};(function(E){var M=Kb,D=bg;function F(Q){return E.exports=F=typeof M=="function"&&typeof D=="symbol"?function(le){return typeof le}:function(le){return le&&typeof M=="function"&&le.constructor===M&&le!==M.prototype?"symbol":typeof le},E.exports.__esModule=!0,E.exports.default=E.exports,F(Q)}E.exports=F,E.exports.__esModule=!0,E.exports.default=E.exports})(cs);var In=cs.exports,Co=e0,mi=En,p0=Md,nl=Ue,ca=La,Gu=mr,Ju=bs,gf=Error,Ld=Z("".replace),yf=String(new gf("zxcasd").stack),ks=/\n\s*at [^:]*:[^\n]*/,Fd=ks.test(yf),ol=Nr,Sx=!y(function(){var E=new Error("a");return!("stack"in E)||(Object.defineProperty(E,"stack",ol(1,7)),E.stack!==7)}),$g=bs,Sp=function(E,M){if(Fd&&typeof E=="string"&&!gf.prepareStackTrace)for(;M--;)E=Ld(E,ks,"");return E},bn=Sx,v1=Error.captureStackTrace,Hw=ci,Bd=wt,I2=Gs,X8=li,Ex=i2,$w=ws,d0=go,k2=cw,h0=a2,K8=Y7,Vw=TypeError,Vg=function(E,M){this.stopped=E,this.result=M},bf=Vg.prototype,Di=function(E,M,D){var F,Q,le,Oe,we,Se,Be,Xe=D&&D.that,et=!(!D||!D.AS_ENTRIES),jt=!(!D||!D.IS_RECORD),Wt=!(!D||!D.IS_ITERATOR),dr=!(!D||!D.INTERRUPTED),cr=Hw(M,Xe),Dr=function(jr){return F&&K8(F,"normal",jr),new Vg(!0,jr)},en=function(jr){return et?(I2(jr),dr?cr(jr[0],jr[1],Dr):cr(jr[0],jr[1])):dr?cr(jr,Dr):cr(jr)};if(jt)F=E.iterator;else if(Wt)F=E;else{if(!(Q=h0(E)))throw new Vw(X8(E)+" is not iterable");if(Ex(Q)){for(le=0,Oe=$w(E);Oe>le;le++)if((we=en(E[le]))&&d0(bf,we))return we;return new Vg(!1)}F=k2(E,Q)}for(Se=jt?E.next:F.next;!(Be=Bd(Se,F)).done;){try{we=en(Be.value)}catch(jr){K8(F,"throw",jr)}if(typeof we=="object"&&we&&d0(bf,we))return we}return new Vg(!1)},qw=hd,Ep=Xr,m0=go,wn=R5,Lr=dg,kl=function(E,M,D){for(var F=p0(M),Q=ca.f,le=nl.f,Oe=0;Oe2&&Hd(D,arguments[2]);var Q=[];return Uw(E,Y8,{that:Q}),Wd(D,"errors",Q),D};Lr?Lr(wf,So):kl(wf,So,{name:!0});var qg=wf.prototype=Ia(So.prototype,{constructor:v0(1,wf),message:v0(1,""),name:v0(1,"AggregateError")});Ep({global:!0,constructor:!0,arity:2},{AggregateError:wf});var Of,Ip,ka,y1,P2=Mn,Jw=nf,kx=ht,Q8=ui("species"),Ug=function(E){var M=P2(E);kx&&M&&!M[Q8]&&Jw(M,Q8,{configurable:!0,get:function(){return this}})},b1=go,Z8=TypeError,Xw=function(E,M){if(b1(M,E))return E;throw new Z8("Incorrect invocation")},Px=Gs,jx=Hg,eS=yn,tS=ui("species"),Kw=function(E,M){var D,F=Px(E).constructor;return F===void 0||eS(D=Px(F)[tS])?M:jx(D)},j2=/(?:ipad|iphone|ipod).*applewebkit/i.test(cn),Pl=d,Gg=Y,kp=ci,Pp=Ve,$d=En,jp=y,Jg=Hv,C2=$m,g0=ml,Yw=fx,Qw=j2,rS=mp,Vd=Pl.setImmediate,Cx=Pl.clearImmediate,w1=Pl.process,jl=Pl.Dispatch,nS=Pl.Function,Zw=Pl.MessageChannel,T2=Pl.String,y0=0,b0={},O1="onreadystatechange";jp(function(){Of=Pl.location});var A2=function(E){if($d(b0,E)){var M=b0[E];delete b0[E],M()}},eO=function(E){return function(){A2(E)}},M2=function(E){A2(E.data)},tO=function(E){Pl.postMessage(T2(E),Of.protocol+"//"+Of.host)};Vd&&Cx||(Vd=function(E){Yw(arguments.length,1);var M=Pp(E)?E:nS(E),D=C2(arguments,1);return b0[++y0]=function(){Gg(M,void 0,D)},Ip(y0),y0},Cx=function(E){delete b0[E]},rS?Ip=function(E){w1.nextTick(eO(E))}:jl&&jl.now?Ip=function(E){jl.now(eO(E))}:Zw&&!Qw?(y1=(ka=new Zw).port2,ka.port1.onmessage=M2,Ip=kp(y1.postMessage,y1)):Pl.addEventListener&&Pp(Pl.postMessage)&&!Pl.importScripts&&Of&&Of.protocol!=="file:"&&!jp(tO)?(Ip=tO,Pl.addEventListener("message",M2,!1)):Ip=O1 in g0("script")?function(E){Jg.appendChild(g0("script"))[O1]=function(){Jg.removeChild(this),A2(E)}}:function(E){setTimeout(eO(E),0)});var rO={set:Vd,clear:Cx},Tx=function(){this.head=null,this.tail=null};Tx.prototype={add:function(E){var M={item:E,next:null},D=this.tail;D?D.next=M:this.head=M,this.tail=M},get:function(){var E=this.head;if(E)return(this.head=E.next)===null&&(this.tail=null),E.item}};var x1,Xg,R2,Kg,D2,nO=Tx,oi=/ipad|iphone|ipod/i.test(cn)&&typeof Pebble<"u",Yg=/web0s(?!.*chrome)/i.test(cn),qd=d,oS=ci,z2=Ue.f,oO=rO.set,iO=nO,Qg=j2,Ax=oi,N2=Yg,Cp=mp,iS=qd.MutationObserver||qd.WebKitMutationObserver,aO=qd.document,aS=qd.process,sO=qd.Promise,sS=z2(qd,"queueMicrotask"),Zg=sS&&sS.value;if(!Zg){var lO=new iO,uO=function(){var E,M;for(Cp&&(E=aS.domain)&&E.exit();M=lO.get();)try{M()}catch(D){throw lO.head&&x1(),D}E&&E.enter()};Qg||Cp||N2||!iS||!aO?!Ax&&sO&&sO.resolve?((Kg=sO.resolve(void 0)).constructor=sO,D2=oS(Kg.then,Kg),x1=function(){D2(uO)}):Cp?x1=function(){aS.nextTick(uO)}:(oO=oS(oO,qd),x1=function(){oO(uO)}):(Xg=!0,R2=aO.createTextNode(""),new iS(uO).observe(R2,{characterData:!0}),x1=function(){R2.data=Xg=!Xg}),Zg=function(E){lO.head||x1(),lO.add(E)}}var L2=Zg,w0=function(E){try{return{error:!1,value:E()}}catch(M){return{error:!0,value:M}}},Ps=d.Promise,F2=typeof Deno=="object"&&Deno&&typeof Deno.version=="object",cO=!F2&&!mp&&typeof window=="object"&&typeof document=="object",lS=d,Ud=Ps,fO=Ve,uS=cm,cu=Mv,ey=ui,Mx=cO,ty=F2,Rx=es,B2=Ud&&Ud.prototype,pO=ey("species"),_1=!1,Gd=fO(lS.PromiseRejectionEvent),dO=uS("Promise",function(){var E=cu(Ud),M=E!==String(Ud);if(!M&&Rx===66||!B2.catch||!B2.finally)return!0;if(!Rx||Rx<51||!/native code/.test(E)){var D=new Ud(function(Q){Q(1)}),F=function(Q){Q(function(){},function(){})};if((D.constructor={})[pO]=F,!(_1=D.then(function(){})instanceof F))return!0}return!M&&(Mx||ty)&&!Gd}),ry={CONSTRUCTOR:dO,REJECTION_EVENT:Gd,SUBCLASSING:_1},Xu={},Dx=va,hO=TypeError,SI=function(E){var M,D;this.promise=new E(function(F,Q){if(M!==void 0||D!==void 0)throw new hO("Bad Promise constructor");M=F,D=Q}),this.resolve=Dx(M),this.reject=Dx(D)};Xu.f=function(E){return new SI(E)};var W2,zx,EI=Xr,Tp=mp,$a=d,il=wt,mO=pi,Nx=af,Jd=Ug,vO=va,Lx=Ve,O0=mr,S1=Xw,x0=Kw,gO=rO.set,ny=L2,Ap=function(E,M){try{arguments.length===1?console.error(E):console.error(E,M)}catch{}},Fx=w0,Bx=nO,cS=up,H2=Ps,Sc=ry,_0=Xu,Mp="Promise",E1=Sc.CONSTRUCTOR,oy=Sc.REJECTION_EVENT,fu=cS.getterFor(Mp),Wx=cS.set,Hx=H2&&H2.prototype,Rp=H2,yO=Hx,I1=$a.TypeError,$x=$a.document,Xd=$a.process,k1=_0.f,S0=k1,Pa=!!($x&&$x.createEvent&&$a.dispatchEvent),E0="unhandledrejection",Ii=function(E){var M;return!(!O0(E)||!Lx(M=E.then))&&M},Cl=function(E,M){var D,F,Q,le=M.value,Oe=M.state===1,we=Oe?E.ok:E.fail,Se=E.resolve,Be=E.reject,Xe=E.domain;try{we?(Oe||(M.rejection===2&&k0(M),M.rejection=1),we===!0?D=le:(Xe&&Xe.enter(),D=we(le),Xe&&(Xe.exit(),Q=!0)),D===E.promise?Be(new I1("Promise-chain cycle")):(F=Ii(D))?il(F,D,Se,Be):Se(D)):Be(le)}catch(et){Xe&&!Q&&Xe.exit(),Be(et)}},iy=function(E,M){E.notified||(E.notified=!0,ny(function(){for(var D,F=E.reactions;D=F.get();)Cl(D,E);E.notified=!1,M&&!E.rejection&&xf(E)}))},I0=function(E,M,D){var F,Q;Pa?((F=$x.createEvent("Event")).promise=M,F.reason=D,F.initEvent(E,!1,!0),$a.dispatchEvent(F)):F={promise:M,reason:D},!oy&&(Q=$a["on"+E])?Q(F):E===E0&&Ap("Unhandled promise rejection",D)},xf=function(E){il(gO,$a,function(){var M,D=E.facade,F=E.value;if(Kd(E)&&(M=Fx(function(){Tp?Xd.emit("unhandledRejection",F,D):I0(E0,D,F)}),E.rejection=Tp||Kd(E)?2:1,M.error))throw M.value})},Kd=function(E){return E.rejection!==1&&!E.parent},k0=function(E){il(gO,$a,function(){var M=E.facade;Tp?Xd.emit("rejectionHandled",M):I0("rejectionhandled",M,E.value)})},js=function(E,M,D){return function(F){E(M,F,D)}},Ku=function(E,M,D){E.done||(E.done=!0,D&&(E=D),E.value=M,E.state=2,iy(E,!0))},bO=function(E,M,D){if(!E.done){E.done=!0,D&&(E=D);try{if(E.facade===M)throw new I1("Promise can't be resolved itself");var F=Ii(M);F?ny(function(){var Q={done:!1};try{il(F,M,js(bO,Q,E),js(Ku,Q,E))}catch(le){Ku(Q,le,E)}}):(E.value=M,E.state=1,iy(E,!1))}catch(Q){Ku({done:!1},Q,E)}}};E1&&(yO=(Rp=function(E){S1(this,yO),vO(E),il(W2,this);var M=fu(this);try{E(js(bO,M),js(Ku,M))}catch(D){Ku(M,D)}}).prototype,(W2=function(E){Wx(this,{type:Mp,done:!1,notified:!1,parent:!1,reactions:new Bx,rejection:!1,state:0,value:void 0})}).prototype=mO(yO,"then",function(E,M){var D=fu(this),F=k1(x0(this,Rp));return D.parent=!0,F.ok=!Lx(E)||E,F.fail=Lx(M)&&M,F.domain=Tp?Xd.domain:void 0,D.state===0?D.reactions.add(F):ny(function(){Cl(F,D)}),F.promise}),zx=function(){var E=new W2,M=fu(E);this.promise=E,this.resolve=js(bO,M),this.reject=js(Ku,M)},_0.f=k1=function(E){return E===Rp||E===void 0?new zx(E):S0(E)}),EI({global:!0,constructor:!0,wrap:!0,forced:E1},{Promise:Rp}),Nx(Rp,Mp,!1,!0),Jd(Mp);var fS=Ps,P1=ry.CONSTRUCTOR||!B6(function(E){fS.all(E).then(void 0,function(){})}),Yd=wt,Tl=va,j1=Xu,C1=w0,$2=Di;Xr({target:"Promise",stat:!0,forced:P1},{all:function(E){var M=this,D=j1.f(M),F=D.resolve,Q=D.reject,le=C1(function(){var Oe=Tl(M.resolve),we=[],Se=0,Be=1;$2(E,function(Xe){var et=Se++,jt=!1;Be++,Yd(Oe,M,Xe).then(function(Wt){jt||(jt=!0,we[et]=Wt,--Be||F(we))},Q)}),--Be||F(we)});return le.error&&Q(le.value),D.promise}});var T1=Xr,wO=ry.CONSTRUCTOR;Ps&&Ps.prototype,T1({target:"Promise",proto:!0,forced:wO,real:!0},{catch:function(E){return this.then(void 0,E)}});var Vx=wt,ay=va,qx=Xu,A1=w0,Ux=Di;Xr({target:"Promise",stat:!0,forced:P1},{race:function(E){var M=this,D=qx.f(M),F=D.reject,Q=A1(function(){var le=ay(M.resolve);Ux(E,function(Oe){Vx(le,M,Oe).then(D.resolve,F)})});return Q.error&&F(Q.value),D.promise}});var P0=wt,Gx=Xu;Xr({target:"Promise",stat:!0,forced:ry.CONSTRUCTOR},{reject:function(E){var M=Gx.f(this);return P0(M.reject,void 0,E),M.promise}});var pS=Gs,OO=mr,xO=Xu,sy=function(E,M){if(pS(E),OO(M)&&M.constructor===E)return M;var D=xO.f(E);return(0,D.resolve)(M),D.promise},M1=Xr,ly=Ps,Dp=ry.CONSTRUCTOR,Ko=sy,R1=Mn("Promise"),j0=!Dp;M1({target:"Promise",stat:!0,forced:!0},{resolve:function(E){return Ko(j0&&this===R1?ly:this,E)}});var dS=wt,hS=va,V2=Xu,uy=w0,cy=Di;Xr({target:"Promise",stat:!0,forced:P1},{allSettled:function(E){var M=this,D=V2.f(M),F=D.resolve,Q=D.reject,le=uy(function(){var Oe=hS(M.resolve),we=[],Se=0,Be=1;cy(E,function(Xe){var et=Se++,jt=!1;Be++,dS(Oe,M,Xe).then(function(Wt){jt||(jt=!0,we[et]={status:"fulfilled",value:Wt},--Be||F(we))},function(Wt){jt||(jt=!0,we[et]={status:"rejected",reason:Wt},--Be||F(we))})}),--Be||F(we)});return le.error&&Q(le.value),D.promise}});var zp=wt,q2=va,_O=Mn,SO=Xu,D1=w0,mS=Di,EO="No one promise resolved";Xr({target:"Promise",stat:!0,forced:P1},{any:function(E){var M=this,D=_O("AggregateError"),F=SO.f(M),Q=F.resolve,le=F.reject,Oe=D1(function(){var we=q2(M.resolve),Se=[],Be=0,Xe=1,et=!1;mS(E,function(jt){var Wt=Be++,dr=!1;Xe++,zp(we,M,jt).then(function(cr){dr||et||(et=!0,Q(cr))},function(cr){dr||et||(dr=!0,Se[Wt]=cr,--Xe||le(new D(Se,EO)))})}),--Xe||le(new D(Se,EO))});return Oe.error&&le(Oe.value),F.promise}});var Jx=Xr,IO=Ps,fy=y,At=Mn,Xx=Ve,py=Kw,kO=sy,dy=IO&&IO.prototype;Jx({target:"Promise",proto:!0,real:!0,forced:!!IO&&fy(function(){dy.finally.call({then:function(){}},function(){})})},{finally:function(E){var M=py(this,At("Promise")),D=Xx(E);return this.then(D?function(F){return kO(M,E()).then(function(){return F})}:E,D?function(F){return kO(M,E()).then(function(){throw F})}:E)}});var Hn=Un.Promise,Eo=Xu;Xr({target:"Promise",stat:!0},{withResolvers:function(){var E=Eo.f(this);return{promise:E.promise,resolve:E.resolve,reject:E.reject}}});var Ec=Hn,Er=Xu,ki=w0;Xr({target:"Promise",stat:!0,forced:!0},{try:function(E){var M=Er.f(this),D=ki(E);return(D.error?M.reject:M.resolve)(D.value),M.promise}});var Np=Ec,Yu=Y6;(function(E){var M=In.default,D=Ln,F=Kb,Q=at,le=dn,Oe=Co,we=n1,Se=pn,Be=Np,Xe=Yu,et=p2;function jt(){E.exports=jt=function(){return dr},E.exports.__esModule=!0,E.exports.default=E.exports;var Wt,dr={},cr=Object.prototype,Dr=cr.hasOwnProperty,en=D||function(Ft,Ut,Jt){Ft[Ut]=Jt.value},jr=typeof F=="function"?F:{},po=jr.iterator||"@@iterator",ho=jr.asyncIterator||"@@asyncIterator",zo=jr.toStringTag||"@@toStringTag";function ta(Ft,Ut,Jt){return D(Ft,Ut,{value:Jt,enumerable:!0,configurable:!0,writable:!0}),Ft[Ut]}try{ta({},"")}catch{ta=function(Ut,Jt,kn){return Ut[Jt]=kn}}function io(Ft,Ut,Jt,kn){var qr=Ut&&Ut.prototype instanceof VO?Ut:VO,bo=Q(qr.prototype),Zt=new jc(kn||[]);return en(bo,"_invoke",{value:Y1(Ft,Jt,Zt)}),bo}function Rs(Ft,Ut,Jt){try{return{type:"normal",arg:Ft.call(Ut,Jt)}}catch(kn){return{type:"throw",arg:kn}}}dr.wrap=io;var Ds="suspendedStart",kf="suspendedYield",Sy="executing",nh="completed",Dl={};function VO(){}function h3(){}function $p(){}var Ey={};ta(Ey,po,function(){return this});var fn=le&&le(le(L0([])));fn&&fn!==cr&&Dr.call(fn,po)&&(Ey=fn);var ra=$p.prototype=VO.prototype=Q(Ey);function Ca(Ft){var Ut;Oe(Ut=["next","throw","return"]).call(Ut,function(Jt){ta(Ft,Jt,function(kn){return this._invoke(Jt,kn)})})}function Ta(Ft,Ut){function Jt(qr,bo,Zt,ps){var sl=Rs(Ft[qr],Ft,bo);if(sl.type!=="throw"){var zs=sl.arg,zl=zs.value;return zl&&M(zl)=="object"&&Dr.call(zl,"__await")?Ut.resolve(zl.__await).then(function(Pf){Jt("next",Pf,Zt,ps)},function(Pf){Jt("throw",Pf,Zt,ps)}):Ut.resolve(zl).then(function(Pf){zs.value=Pf,Zt(zs)},function(Pf){return Jt("throw",Pf,Zt,ps)})}ps(sl.arg)}var kn;en(this,"_invoke",{value:function(qr,bo){function Zt(){return new Ut(function(ps,sl){Jt(qr,bo,ps,sl)})}return kn=kn?kn.then(Zt,Zt):Zt()}})}function Y1(Ft,Ut,Jt){var kn=Ds;return function(qr,bo){if(kn===Sy)throw new Error("Generator is already running");if(kn===nh){if(qr==="throw")throw bo;return{value:Wt,done:!0}}for(Jt.method=qr,Jt.arg=bo;;){var Zt=Jt.delegate;if(Zt){var ps=m3(Zt,Jt);if(ps){if(ps===Dl)continue;return ps}}if(Jt.method==="next")Jt.sent=Jt._sent=Jt.arg;else if(Jt.method==="throw"){if(kn===Ds)throw kn=nh,Jt.arg;Jt.dispatchException(Jt.arg)}else Jt.method==="return"&&Jt.abrupt("return",Jt.arg);kn=Sy;var sl=Rs(Ft,Ut,Jt);if(sl.type==="normal"){if(kn=Jt.done?nh:kf,sl.arg===Dl)continue;return{value:sl.arg,done:Jt.done}}sl.type==="throw"&&(kn=nh,Jt.method="throw",Jt.arg=sl.arg)}}}function m3(Ft,Ut){var Jt=Ut.method,kn=Ft.iterator[Jt];if(kn===Wt)return Ut.delegate=null,Jt==="throw"&&Ft.iterator.return&&(Ut.method="return",Ut.arg=Wt,m3(Ft,Ut),Ut.method==="throw")||Jt!=="return"&&(Ut.method="throw",Ut.arg=new TypeError("The iterator does not provide a '"+Jt+"' method")),Dl;var qr=Rs(kn,Ft.iterator,Ut.arg);if(qr.type==="throw")return Ut.method="throw",Ut.arg=qr.arg,Ut.delegate=null,Dl;var bo=qr.arg;return bo?bo.done?(Ut[Ft.resultName]=bo.value,Ut.next=Ft.nextLoc,Ut.method!=="return"&&(Ut.method="next",Ut.arg=Wt),Ut.delegate=null,Dl):bo:(Ut.method="throw",Ut.arg=new TypeError("iterator result is not an object"),Ut.delegate=null,Dl)}function fs(Ft){var Ut,Jt={tryLoc:Ft[0]};1 in Ft&&(Jt.catchLoc=Ft[1]),2 in Ft&&(Jt.finallyLoc=Ft[2],Jt.afterLoc=Ft[3]),we(Ut=this.tryEntries).call(Ut,Jt)}function Iy(Ft){var Ut=Ft.completion||{};Ut.type="normal",delete Ut.arg,Ft.completion=Ut}function jc(Ft){this.tryEntries=[{tryLoc:"root"}],Oe(Ft).call(Ft,fs,this),this.reset(!0)}function L0(Ft){if(Ft||Ft===""){var Ut=Ft[po];if(Ut)return Ut.call(Ft);if(typeof Ft.next=="function")return Ft;if(!isNaN(Ft.length)){var Jt=-1,kn=function qr(){for(;++Jt=0;--kn){var qr=this.tryEntries[kn],bo=qr.completion;if(qr.tryLoc==="root")return Jt("end");if(qr.tryLoc<=this.prev){var Zt=Dr.call(qr,"catchLoc"),ps=Dr.call(qr,"finallyLoc");if(Zt&&ps){if(this.prev=0;--Jt){var kn=this.tryEntries[Jt];if(kn.tryLoc<=this.prev&&Dr.call(kn,"finallyLoc")&&this.prev=0;--Ut){var Jt=this.tryEntries[Ut];if(Jt.finallyLoc===Ft)return this.complete(Jt.completion,Jt.afterLoc),Iy(Jt),Dl}},catch:function(Ft){for(var Ut=this.tryEntries.length-1;Ut>=0;--Ut){var Jt=this.tryEntries[Ut];if(Jt.tryLoc===Ft){var kn=Jt.completion;if(kn.type==="throw"){var qr=kn.arg;Iy(Jt)}return qr}}throw new Error("illegal catch attempt")},delegateYield:function(Ft,Ut,Jt){return this.delegate={iterator:L0(Ft),resultName:Ut,nextLoc:Jt},this.method==="next"&&(this.arg=Wt),Dl}},dr}E.exports=jt,E.exports.__esModule=!0,E.exports.default=E.exports})(jo);var Al=(0,jo.exports)(),C0=Al;try{regeneratorRuntime=Al}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=Al:Function("r","regeneratorRuntime = r")(Al)}var vi=r(C0),z1={exports:{}},T0=y(function(){if(typeof ArrayBuffer=="function"){var E=new ArrayBuffer(8);Object.isExtensible(E)&&Object.defineProperty(E,"a",{value:8})}}),Ho=y,zi=mr,Va=ge,ja=T0,ea=Object.isExtensible,A0=Ho(function(){ea(1)})||ja?function(E){return!!zi(E)&&(!ja||Va(E)!=="ArrayBuffer")&&(!ea||ea(E))}:ea,M0=!y(function(){return Object.isExtensible(Object.preventExtensions({}))}),Ml=Xr,U2=Z,Kx=Gi,Yx=mr,N1=En,Qx=La.f,PO=Zl,R0=Lh,jO=A0,Zx=M0,G2=!1,Qd=od("meta"),vS=0,J2=function(E){Qx(E,Qd,{value:{objectID:"O"+vS++,weakData:{}}})},II=z1.exports={enable:function(){II.enable=function(){},G2=!0;var E=PO.f,M=U2([].splice),D={};D[Qd]=1,E(D).length&&(PO.f=function(F){for(var Q=E(F),le=0,Oe=Q.length;le1?arguments[1]:void 0);Xe=Xe?Xe.next:et.first;)for(jt(Xe.value,Xe.key,this);Xe&&Xe.removed;)Xe=Xe.previous},has:function(Be){return!!Se(this,Be)}}),Y2(le,D?{get:function(Be){var Xe=Se(this,Be);return Xe&&Xe.value},set:function(Be,Xe){return we(this,Be===0?0:Be,Xe)}}:{add:function(Be){return we(this,Be=Be===0?0:Be,Be)}}),Qu&&RO(le,"size",{configurable:!0,get:function(){return Oe(this).size}}),Q},setStrong:function(E,M,D){var F=M+" Iterator",Q=Fp(M),le=Fp(F);o_(E,M,function(Oe,we){Pi(this,{type:F,target:Oe,state:Q(Oe),kind:we,last:void 0})},function(){for(var Oe=le(this),we=Oe.kind,Se=Oe.last;Se&&Se.removed;)Se=Se.previous;return Oe.target&&(Oe.last=Se=Se?Se.next:Oe.state.first)?eh(we==="keys"?Se.key:we==="values"?Se.value:[Se.key,Se.value],!1):(Oe.target=void 0,eh(void 0,!0))},D?"entries":"values",!D,!0),Ic(M)}};r_("Map",function(E){return function(){return E(this,arguments.length?arguments[0]:void 0)}},Bp);var Z2=r(Un.Map),e3=Rn.some;Xr({target:"Array",proto:!0,forced:!wg("some")},{some:function(E){return e3(this,E,arguments.length>1?arguments[1]:void 0)}});var bS=ss("Array","some"),i_=go,t3=bS,W1=Array.prototype,wS=r(function(E){var M=E.some;return E===W1||i_(W1,E)&&M===W1.some?t3:M}),OS=ss("Array","keys"),xS=Js,a_=En,r3=go,Zu=OS,H1=Array.prototype,s_={DOMTokenList:!0,NodeList:!0},Sf=r(function(E){var M=E.keys;return E===H1||r3(H1,E)&&M===H1.keys||a_(s_,xS(E))?Zu:M}),zO=Ro,n3=Math.floor,Rl=function(E,M){var D=E.length,F=n3(D/2);return D<8?my(E,M):vy(E,Rl(zO(E,0,F),M),Rl(zO(E,F),M),M)},my=function(E,M){for(var D,F,Q=E.length,le=1;le0;)E[F]=E[--F];F!==le++&&(E[F]=D)}return E},vy=function(E,M,D,F){for(var Q=M.length,le=D.length,Oe=0,we=0;Oe3)){if(u_)return!0;if(tc)return tc<603;var E,M,D,F,Q="";for(E=65;E<76;E++){switch(M=String.fromCharCode(E),E){case 66:case 69:case 70:case 72:D=3;break;case 68:case 71:D=4;break;default:D=2}for(F=0;F<47;F++)kc.push({k:M+F,v:D})}for(kc.sort(function(le,Oe){return Oe.v-le.v}),F=0;Fa3(Se)?1:-1}}(E)),D=LO(Q),F=0;Fthis.max&&this.flush(),this._timeout!=null&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&typeof this.delay=="number"&&(this._timeout=hf(function(){M.flush()},this.delay))}},{key:"flush",value:function(){var M,D;yp(M=w8(D=this._queue).call(D,0)).call(M,function(F){F.fn.apply(F.context||F.fn,F.args||[])})}}],[{key:"extend",value:function(M,D){var F=new E(D);if(M.flush!==void 0)throw new Error("Target object already has a property flush");M.flush=function(){F.flush()};var Q=[{name:"flush",original:void 0}];if(D&&D.replace)for(var le=0;le=E.length?{done:!0}:{done:!1,value:E[F++]}},e:function(Se){throw Se},f:Q}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var le,Oe=!0,we=!1;return{s:function(){D=D.call(E)},n:function(){var Se=D.next();return Oe=Se.done,Se},e:function(Se){we=!0,le=Se},f:function(){try{Oe||D.return==null||D.return()}finally{if(we)throw le}}}}function V8(E,M){(M==null||M>E.length)&&(M=E.length);for(var D=0,F=new Array(M);D2)return E2.apply(void 0,Ow(F=[Ww(M[0],M[1])]).call(F,Os(gp(M).call(M,2))));var Q=M[0],le=M[1];if(Q instanceof Date&&le instanceof Date)return Q.setTime(le.getTime()),Q;var Oe,we=c0(p8(le));try{for(we.s();!(Oe=we.n()).done;){var Se=Oe.value;Object.prototype.propertyIsEnumerable.call(le,Se)&&(le[Se]===Ox?delete Q[Se]:Q[Se]===null||le[Se]===null||typeof Q[Se]!="object"||typeof le[Se]!="object"||_s(Q[Se])||_s(le[Se])?Q[Se]=xx(le[Se]):Q[Se]=E2(Q[Se],le[Se]))}}catch(Be){we.e(Be)}finally{we.f()}return Q}function xx(E){return _s(E)?Lu(E).call(E,function(M){return xx(M)}):typeof E=="object"&&E!==null?E instanceof Date?new Date(E.getTime()):E2({},E):E}function f0(E){for(var M=0,D=Do(E);M({set:E})}}()};function zd(E){var M,D=this;this._cleanupQueue=[],this.active=!1,this._dom={container:E,overlay:document.createElement("div")},this._dom.overlay.classList.add("vis-overlay"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push(function(){D._dom.overlay.parentNode.removeChild(D._dom.overlay)});var F=_x(this._dom.overlay);F.on("tap",Zm(M=this._onTapOverlay).call(M,this)),this._cleanupQueue.push(function(){F.destroy()});var Q=["tap","doubletap","press","pinch","pan","panstart","panmove","panend"];yp(Q).call(Q,function(le){F.on(le,function(Oe){Oe.srcEvent.stopPropagation()})}),document&&document.body&&(this._onClick=function(le){(function(Oe,we){for(;Oe;){if(Oe===we)return!0;Oe=Oe.parentNode}return!1})(le.target,E)||D.deactivate()},document.body.addEventListener("click",this._onClick),this._cleanupQueue.push(function(){document.body.removeEventListener("click",D._onClick)})),this._escListener=function(le){("key"in le?le.key==="Escape":le.keyCode===27)&&D.deactivate()}}jw(zd.prototype),zd.current=null,zd.prototype.destroy=function(){var E,M;this.deactivate();var D,F=c0(nI(E=w8(M=this._cleanupQueue).call(M,0)).call(E));try{for(F.s();!(D=F.n()).done;)(0,D.value)()}catch(Q){F.e(Q)}finally{F.f()}},zd.prototype.activate=function(){zd.current&&zd.current.deactivate(),zd.current=this,this.active=!0,this._dom.overlay.style.display="none",this._dom.container.classList.add("vis-active"),this.emit("change"),this.emit("activate"),document.body.addEventListener("keydown",this._escListener)},zd.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display="block",this._dom.container.classList.remove("vis-active"),document.body.removeEventListener("keydown",this._escListener),this.emit("change"),this.emit("deactivate")},zd.prototype._onTapOverlay=function(E){this.activate(),E.srcEvent.stopPropagation()};var m1=Pu,q8=li,xI=TypeError,Hg=function(E){if(m1(E))return E;throw new xI(q8(E)+" is not a constructor")},_I=Xr,Nd=Y,U8=w6,G8=Hg,J8=Gs,h=mr,w=ap,S=y,C=Mn("Reflect","construct"),R=Object.prototype,G=[].push,te=S(function(){function E(){}return!(C(function(){},[],E)instanceof E)}),re=!S(function(){C(function(){})}),ue=te||re;_I({target:"Reflect",stat:!0,forced:ue,sham:ue},{construct:function(E,M){G8(E),J8(M);var D=arguments.length<3?E:G8(arguments[2]);if(re&&!te)return C(E,M,D);if(E===D){switch(M.length){case 0:return new E;case 1:return new E(M[0]);case 2:return new E(M[0],M[1]);case 3:return new E(M[0],M[1],M[2]);case 4:return new E(M[0],M[1],M[2],M[3])}var F=[null];return Nd(G,F,M),new(Nd(U8,E,F))}var Q=D.prototype,le=w(h(Q)?Q:R),Oe=Nd(E,le,M);return h(Oe)?Oe:le}});var se=r(Un.Reflect.construct),he=r(Un.Object.getOwnPropertySymbols),_e={exports:{}},Ie=Xr,Ce=y,ke=xo,ze=Ue.f,Le=ht;Ie({target:"Object",stat:!0,forced:!Le||Ce(function(){ze(1)}),sham:!Le},{getOwnPropertyDescriptor:function(E,M){return ze(ke(E),M)}});var Te=Un.Object,lt=_e.exports=function(E,M){return Te.getOwnPropertyDescriptor(E,M)};Te.getOwnPropertyDescriptor.sham&&(lt.sham=!0);var dt=r(_e.exports),tt=Md,it=xo,Ke=Ue,st=ba;Xr({target:"Object",stat:!0,sham:!ht},{getOwnPropertyDescriptors:function(E){for(var M,D,F=it(E),Q=Ke.f,le=tt(F),Oe={},we=0;le.length>we;)(D=Q(F,M=le[we++]))!==void 0&&st(Oe,M,D);return Oe}});var De=r(Un.Object.getOwnPropertyDescriptors),Ze={exports:{}},ct=Xr,gt=ht,Et=Fv.f;ct({target:"Object",stat:!0,forced:Object.defineProperties!==Et,sham:!gt},{defineProperties:Et});var zt=Un.Object,Yt=Ze.exports=function(E,M){return zt.defineProperties(E,M)};zt.defineProperties.sham&&(Yt.sham=!0);var Tr=r(Ze.exports),_r=r(jv);function Zr(E){if(E===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return E}var at=sx,Bt=r(at);Xr({target:"Object",stat:!0},{setPrototypeOf:dg});var pn=Un.Object.setPrototypeOf,Dt=r(pn),Gt=r(Y5);function fr(E,M){var D;return fr=Dt?Gt(D=Dt).call(D):function(F,Q){return F.__proto__=Q,F},fr(E,M)}function pr(E,M){if(typeof M!="function"&&M!==null)throw new TypeError("Super expression must either be null or a function");E.prototype=Bt(M&&M.prototype,{constructor:{value:E,writable:!0,configurable:!0}}),kh(E,"prototype",{writable:!1}),M&&fr(E,M)}function nn(E,M){if(M&&(Zh(M)==="object"||typeof M=="function"))return M;if(M!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Zr(E)}var dn=Sw,_o=r(dn);function Kr(E){var M;return Kr=Dt?Gt(M=_o).call(M):function(D){return D.__proto__||_o(D)},Kr(E)}var jo={exports:{}},cs={exports:{}};(function(E){var M=Kb,D=bg;function F(Q){return E.exports=F=typeof M=="function"&&typeof D=="symbol"?function(le){return typeof le}:function(le){return le&&typeof M=="function"&&le.constructor===M&&le!==M.prototype?"symbol":typeof le},E.exports.__esModule=!0,E.exports.default=E.exports,F(Q)}E.exports=F,E.exports.__esModule=!0,E.exports.default=E.exports})(cs);var In=cs.exports,Co=e0,mi=En,p0=Md,nl=Ue,ca=La,Gu=mr,Ju=bs,gf=Error,Ld=Z("".replace),yf=String(new gf("zxcasd").stack),ks=/\n\s*at [^:]*:[^\n]*/,Fd=ks.test(yf),ol=Nr,Sx=!y(function(){var E=new Error("a");return!("stack"in E)||(Object.defineProperty(E,"stack",ol(1,7)),E.stack!==7)}),$g=bs,Sp=function(E,M){if(Fd&&typeof E=="string"&&!gf.prepareStackTrace)for(;M--;)E=Ld(E,ks,"");return E},bn=Sx,v1=Error.captureStackTrace,Hw=ci,Bd=wt,I2=Gs,X8=li,Ex=i2,$w=ws,d0=go,k2=cw,h0=a2,K8=Y7,Vw=TypeError,Vg=function(E,M){this.stopped=E,this.result=M},bf=Vg.prototype,Di=function(E,M,D){var F,Q,le,Oe,we,Se,Be,Xe=D&&D.that,et=!(!D||!D.AS_ENTRIES),jt=!(!D||!D.IS_RECORD),Wt=!(!D||!D.IS_ITERATOR),dr=!(!D||!D.INTERRUPTED),cr=Hw(M,Xe),Dr=function(jr){return F&&K8(F,"normal",jr),new Vg(!0,jr)},en=function(jr){return et?(I2(jr),dr?cr(jr[0],jr[1],Dr):cr(jr[0],jr[1])):dr?cr(jr,Dr):cr(jr)};if(jt)F=E.iterator;else if(Wt)F=E;else{if(!(Q=h0(E)))throw new Vw(X8(E)+" is not iterable");if(Ex(Q)){for(le=0,Oe=$w(E);Oe>le;le++)if((we=en(E[le]))&&d0(bf,we))return we;return new Vg(!1)}F=k2(E,Q)}for(Se=jt?E.next:F.next;!(Be=Bd(Se,F)).done;){try{we=en(Be.value)}catch(jr){K8(F,"throw",jr)}if(typeof we=="object"&&we&&d0(bf,we))return we}return new Vg(!1)},qw=hd,Ep=Xr,m0=go,wn=R5,Lr=dg,kl=function(E,M,D){for(var F=p0(M),Q=ca.f,le=nl.f,Oe=0;Oe2&&Hd(D,arguments[2]);var Q=[];return Uw(E,Y8,{that:Q}),Wd(D,"errors",Q),D};Lr?Lr(wf,So):kl(wf,So,{name:!0});var qg=wf.prototype=Ia(So.prototype,{constructor:v0(1,wf),message:v0(1,""),name:v0(1,"AggregateError")});Ep({global:!0,constructor:!0,arity:2},{AggregateError:wf});var Of,Ip,ka,y1,P2=Mn,Jw=nf,kx=ht,Q8=ui("species"),Ug=function(E){var M=P2(E);kx&&M&&!M[Q8]&&Jw(M,Q8,{configurable:!0,get:function(){return this}})},b1=go,Z8=TypeError,Xw=function(E,M){if(b1(M,E))return E;throw new Z8("Incorrect invocation")},Px=Gs,jx=Hg,eS=yn,tS=ui("species"),Kw=function(E,M){var D,F=Px(E).constructor;return F===void 0||eS(D=Px(F)[tS])?M:jx(D)},j2=/(?:ipad|iphone|ipod).*applewebkit/i.test(cn),Pl=d,Gg=Y,kp=ci,Pp=Ve,$d=En,jp=y,Jg=Hv,C2=$m,g0=ml,Yw=fx,Qw=j2,rS=mp,Vd=Pl.setImmediate,Cx=Pl.clearImmediate,w1=Pl.process,jl=Pl.Dispatch,nS=Pl.Function,Zw=Pl.MessageChannel,T2=Pl.String,y0=0,b0={},O1="onreadystatechange";jp(function(){Of=Pl.location});var A2=function(E){if($d(b0,E)){var M=b0[E];delete b0[E],M()}},eO=function(E){return function(){A2(E)}},M2=function(E){A2(E.data)},tO=function(E){Pl.postMessage(T2(E),Of.protocol+"//"+Of.host)};Vd&&Cx||(Vd=function(E){Yw(arguments.length,1);var M=Pp(E)?E:nS(E),D=C2(arguments,1);return b0[++y0]=function(){Gg(M,void 0,D)},Ip(y0),y0},Cx=function(E){delete b0[E]},rS?Ip=function(E){w1.nextTick(eO(E))}:jl&&jl.now?Ip=function(E){jl.now(eO(E))}:Zw&&!Qw?(y1=(ka=new Zw).port2,ka.port1.onmessage=M2,Ip=kp(y1.postMessage,y1)):Pl.addEventListener&&Pp(Pl.postMessage)&&!Pl.importScripts&&Of&&Of.protocol!=="file:"&&!jp(tO)?(Ip=tO,Pl.addEventListener("message",M2,!1)):Ip=O1 in g0("script")?function(E){Jg.appendChild(g0("script"))[O1]=function(){Jg.removeChild(this),A2(E)}}:function(E){setTimeout(eO(E),0)});var rO={set:Vd,clear:Cx},Tx=function(){this.head=null,this.tail=null};Tx.prototype={add:function(E){var M={item:E,next:null},D=this.tail;D?D.next=M:this.head=M,this.tail=M},get:function(){var E=this.head;if(E)return(this.head=E.next)===null&&(this.tail=null),E.item}};var x1,Xg,R2,Kg,D2,nO=Tx,oi=/ipad|iphone|ipod/i.test(cn)&&typeof Pebble<"u",Yg=/web0s(?!.*chrome)/i.test(cn),qd=d,oS=ci,z2=Ue.f,oO=rO.set,iO=nO,Qg=j2,Ax=oi,N2=Yg,Cp=mp,iS=qd.MutationObserver||qd.WebKitMutationObserver,aO=qd.document,aS=qd.process,sO=qd.Promise,sS=z2(qd,"queueMicrotask"),Zg=sS&&sS.value;if(!Zg){var lO=new iO,uO=function(){var E,M;for(Cp&&(E=aS.domain)&&E.exit();M=lO.get();)try{M()}catch(D){throw lO.head&&x1(),D}E&&E.enter()};Qg||Cp||N2||!iS||!aO?!Ax&&sO&&sO.resolve?((Kg=sO.resolve(void 0)).constructor=sO,D2=oS(Kg.then,Kg),x1=function(){D2(uO)}):Cp?x1=function(){aS.nextTick(uO)}:(oO=oS(oO,qd),x1=function(){oO(uO)}):(Xg=!0,R2=aO.createTextNode(""),new iS(uO).observe(R2,{characterData:!0}),x1=function(){R2.data=Xg=!Xg}),Zg=function(E){lO.head||x1(),lO.add(E)}}var L2=Zg,w0=function(E){try{return{error:!1,value:E()}}catch(M){return{error:!0,value:M}}},Ps=d.Promise,F2=typeof Deno=="object"&&Deno&&typeof Deno.version=="object",cO=!F2&&!mp&&typeof window=="object"&&typeof document=="object",lS=d,Ud=Ps,fO=Ve,uS=cm,cu=Mv,ey=ui,Mx=cO,ty=F2,Rx=es,B2=Ud&&Ud.prototype,pO=ey("species"),_1=!1,Gd=fO(lS.PromiseRejectionEvent),dO=uS("Promise",function(){var E=cu(Ud),M=E!==String(Ud);if(!M&&Rx===66||!B2.catch||!B2.finally)return!0;if(!Rx||Rx<51||!/native code/.test(E)){var D=new Ud(function(Q){Q(1)}),F=function(Q){Q(function(){},function(){})};if((D.constructor={})[pO]=F,!(_1=D.then(function(){})instanceof F))return!0}return!M&&(Mx||ty)&&!Gd}),ry={CONSTRUCTOR:dO,REJECTION_EVENT:Gd,SUBCLASSING:_1},Xu={},Dx=va,hO=TypeError,SI=function(E){var M,D;this.promise=new E(function(F,Q){if(M!==void 0||D!==void 0)throw new hO("Bad Promise constructor");M=F,D=Q}),this.resolve=Dx(M),this.reject=Dx(D)};Xu.f=function(E){return new SI(E)};var W2,zx,EI=Xr,Tp=mp,$a=d,il=wt,mO=pi,Nx=af,Jd=Ug,vO=va,Lx=Ve,O0=mr,S1=Xw,x0=Kw,gO=rO.set,ny=L2,Ap=function(E,M){try{arguments.length===1?console.error(E):console.error(E,M)}catch{}},Fx=w0,Bx=nO,cS=up,H2=Ps,Sc=ry,_0=Xu,Mp="Promise",E1=Sc.CONSTRUCTOR,oy=Sc.REJECTION_EVENT,fu=cS.getterFor(Mp),Wx=cS.set,Hx=H2&&H2.prototype,Rp=H2,yO=Hx,I1=$a.TypeError,$x=$a.document,Xd=$a.process,k1=_0.f,S0=k1,Pa=!!($x&&$x.createEvent&&$a.dispatchEvent),E0="unhandledrejection",Ii=function(E){var M;return!(!O0(E)||!Lx(M=E.then))&&M},Cl=function(E,M){var D,F,Q,le=M.value,Oe=M.state===1,we=Oe?E.ok:E.fail,Se=E.resolve,Be=E.reject,Xe=E.domain;try{we?(Oe||(M.rejection===2&&k0(M),M.rejection=1),we===!0?D=le:(Xe&&Xe.enter(),D=we(le),Xe&&(Xe.exit(),Q=!0)),D===E.promise?Be(new I1("Promise-chain cycle")):(F=Ii(D))?il(F,D,Se,Be):Se(D)):Be(le)}catch(et){Xe&&!Q&&Xe.exit(),Be(et)}},iy=function(E,M){E.notified||(E.notified=!0,ny(function(){for(var D,F=E.reactions;D=F.get();)Cl(D,E);E.notified=!1,M&&!E.rejection&&xf(E)}))},I0=function(E,M,D){var F,Q;Pa?((F=$x.createEvent("Event")).promise=M,F.reason=D,F.initEvent(E,!1,!0),$a.dispatchEvent(F)):F={promise:M,reason:D},!oy&&(Q=$a["on"+E])?Q(F):E===E0&&Ap("Unhandled promise rejection",D)},xf=function(E){il(gO,$a,function(){var M,D=E.facade,F=E.value;if(Kd(E)&&(M=Fx(function(){Tp?Xd.emit("unhandledRejection",F,D):I0(E0,D,F)}),E.rejection=Tp||Kd(E)?2:1,M.error))throw M.value})},Kd=function(E){return E.rejection!==1&&!E.parent},k0=function(E){il(gO,$a,function(){var M=E.facade;Tp?Xd.emit("rejectionHandled",M):I0("rejectionhandled",M,E.value)})},js=function(E,M,D){return function(F){E(M,F,D)}},Ku=function(E,M,D){E.done||(E.done=!0,D&&(E=D),E.value=M,E.state=2,iy(E,!0))},bO=function(E,M,D){if(!E.done){E.done=!0,D&&(E=D);try{if(E.facade===M)throw new I1("Promise can't be resolved itself");var F=Ii(M);F?ny(function(){var Q={done:!1};try{il(F,M,js(bO,Q,E),js(Ku,Q,E))}catch(le){Ku(Q,le,E)}}):(E.value=M,E.state=1,iy(E,!1))}catch(Q){Ku({done:!1},Q,E)}}};E1&&(yO=(Rp=function(E){S1(this,yO),vO(E),il(W2,this);var M=fu(this);try{E(js(bO,M),js(Ku,M))}catch(D){Ku(M,D)}}).prototype,(W2=function(E){Wx(this,{type:Mp,done:!1,notified:!1,parent:!1,reactions:new Bx,rejection:!1,state:0,value:void 0})}).prototype=mO(yO,"then",function(E,M){var D=fu(this),F=k1(x0(this,Rp));return D.parent=!0,F.ok=!Lx(E)||E,F.fail=Lx(M)&&M,F.domain=Tp?Xd.domain:void 0,D.state===0?D.reactions.add(F):ny(function(){Cl(F,D)}),F.promise}),zx=function(){var E=new W2,M=fu(E);this.promise=E,this.resolve=js(bO,M),this.reject=js(Ku,M)},_0.f=k1=function(E){return E===Rp||E===void 0?new zx(E):S0(E)}),EI({global:!0,constructor:!0,wrap:!0,forced:E1},{Promise:Rp}),Nx(Rp,Mp,!1,!0),Jd(Mp);var fS=Ps,P1=ry.CONSTRUCTOR||!B6(function(E){fS.all(E).then(void 0,function(){})}),Yd=wt,Tl=va,j1=Xu,C1=w0,$2=Di;Xr({target:"Promise",stat:!0,forced:P1},{all:function(E){var M=this,D=j1.f(M),F=D.resolve,Q=D.reject,le=C1(function(){var Oe=Tl(M.resolve),we=[],Se=0,Be=1;$2(E,function(Xe){var et=Se++,jt=!1;Be++,Yd(Oe,M,Xe).then(function(Wt){jt||(jt=!0,we[et]=Wt,--Be||F(we))},Q)}),--Be||F(we)});return le.error&&Q(le.value),D.promise}});var T1=Xr,wO=ry.CONSTRUCTOR;Ps&&Ps.prototype,T1({target:"Promise",proto:!0,forced:wO,real:!0},{catch:function(E){return this.then(void 0,E)}});var Vx=wt,ay=va,qx=Xu,A1=w0,Ux=Di;Xr({target:"Promise",stat:!0,forced:P1},{race:function(E){var M=this,D=qx.f(M),F=D.reject,Q=A1(function(){var le=ay(M.resolve);Ux(E,function(Oe){Vx(le,M,Oe).then(D.resolve,F)})});return Q.error&&F(Q.value),D.promise}});var P0=wt,Gx=Xu;Xr({target:"Promise",stat:!0,forced:ry.CONSTRUCTOR},{reject:function(E){var M=Gx.f(this);return P0(M.reject,void 0,E),M.promise}});var pS=Gs,OO=mr,xO=Xu,sy=function(E,M){if(pS(E),OO(M)&&M.constructor===E)return M;var D=xO.f(E);return(0,D.resolve)(M),D.promise},M1=Xr,ly=Ps,Dp=ry.CONSTRUCTOR,Ko=sy,R1=Mn("Promise"),j0=!Dp;M1({target:"Promise",stat:!0,forced:!0},{resolve:function(E){return Ko(j0&&this===R1?ly:this,E)}});var dS=wt,hS=va,V2=Xu,uy=w0,cy=Di;Xr({target:"Promise",stat:!0,forced:P1},{allSettled:function(E){var M=this,D=V2.f(M),F=D.resolve,Q=D.reject,le=uy(function(){var Oe=hS(M.resolve),we=[],Se=0,Be=1;cy(E,function(Xe){var et=Se++,jt=!1;Be++,dS(Oe,M,Xe).then(function(Wt){jt||(jt=!0,we[et]={status:"fulfilled",value:Wt},--Be||F(we))},function(Wt){jt||(jt=!0,we[et]={status:"rejected",reason:Wt},--Be||F(we))})}),--Be||F(we)});return le.error&&Q(le.value),D.promise}});var zp=wt,q2=va,_O=Mn,SO=Xu,D1=w0,mS=Di,EO="No one promise resolved";Xr({target:"Promise",stat:!0,forced:P1},{any:function(E){var M=this,D=_O("AggregateError"),F=SO.f(M),Q=F.resolve,le=F.reject,Oe=D1(function(){var we=q2(M.resolve),Se=[],Be=0,Xe=1,et=!1;mS(E,function(jt){var Wt=Be++,dr=!1;Xe++,zp(we,M,jt).then(function(cr){dr||et||(et=!0,Q(cr))},function(cr){dr||et||(dr=!0,Se[Wt]=cr,--Xe||le(new D(Se,EO)))})}),--Xe||le(new D(Se,EO))});return Oe.error&&le(Oe.value),F.promise}});var Jx=Xr,IO=Ps,fy=y,Mt=Mn,Xx=Ve,py=Kw,kO=sy,dy=IO&&IO.prototype;Jx({target:"Promise",proto:!0,real:!0,forced:!!IO&&fy(function(){dy.finally.call({then:function(){}},function(){})})},{finally:function(E){var M=py(this,Mt("Promise")),D=Xx(E);return this.then(D?function(F){return kO(M,E()).then(function(){return F})}:E,D?function(F){return kO(M,E()).then(function(){throw F})}:E)}});var Hn=Un.Promise,Eo=Xu;Xr({target:"Promise",stat:!0},{withResolvers:function(){var E=Eo.f(this);return{promise:E.promise,resolve:E.resolve,reject:E.reject}}});var Ec=Hn,Er=Xu,ki=w0;Xr({target:"Promise",stat:!0,forced:!0},{try:function(E){var M=Er.f(this),D=ki(E);return(D.error?M.reject:M.resolve)(D.value),M.promise}});var Np=Ec,Yu=Y6;(function(E){var M=In.default,D=Ln,F=Kb,Q=at,le=dn,Oe=Co,we=n1,Se=pn,Be=Np,Xe=Yu,et=p2;function jt(){E.exports=jt=function(){return dr},E.exports.__esModule=!0,E.exports.default=E.exports;var Wt,dr={},cr=Object.prototype,Dr=cr.hasOwnProperty,en=D||function(Ft,Ut,Jt){Ft[Ut]=Jt.value},jr=typeof F=="function"?F:{},po=jr.iterator||"@@iterator",ho=jr.asyncIterator||"@@asyncIterator",zo=jr.toStringTag||"@@toStringTag";function ta(Ft,Ut,Jt){return D(Ft,Ut,{value:Jt,enumerable:!0,configurable:!0,writable:!0}),Ft[Ut]}try{ta({},"")}catch{ta=function(Ut,Jt,kn){return Ut[Jt]=kn}}function io(Ft,Ut,Jt,kn){var qr=Ut&&Ut.prototype instanceof VO?Ut:VO,bo=Q(qr.prototype),Zt=new jc(kn||[]);return en(bo,"_invoke",{value:Y1(Ft,Jt,Zt)}),bo}function Rs(Ft,Ut,Jt){try{return{type:"normal",arg:Ft.call(Ut,Jt)}}catch(kn){return{type:"throw",arg:kn}}}dr.wrap=io;var Ds="suspendedStart",kf="suspendedYield",Sy="executing",nh="completed",Dl={};function VO(){}function h3(){}function $p(){}var Ey={};ta(Ey,po,function(){return this});var fn=le&&le(le(L0([])));fn&&fn!==cr&&Dr.call(fn,po)&&(Ey=fn);var ra=$p.prototype=VO.prototype=Q(Ey);function Ca(Ft){var Ut;Oe(Ut=["next","throw","return"]).call(Ut,function(Jt){ta(Ft,Jt,function(kn){return this._invoke(Jt,kn)})})}function Ta(Ft,Ut){function Jt(qr,bo,Zt,ps){var sl=Rs(Ft[qr],Ft,bo);if(sl.type!=="throw"){var zs=sl.arg,zl=zs.value;return zl&&M(zl)=="object"&&Dr.call(zl,"__await")?Ut.resolve(zl.__await).then(function(Pf){Jt("next",Pf,Zt,ps)},function(Pf){Jt("throw",Pf,Zt,ps)}):Ut.resolve(zl).then(function(Pf){zs.value=Pf,Zt(zs)},function(Pf){return Jt("throw",Pf,Zt,ps)})}ps(sl.arg)}var kn;en(this,"_invoke",{value:function(qr,bo){function Zt(){return new Ut(function(ps,sl){Jt(qr,bo,ps,sl)})}return kn=kn?kn.then(Zt,Zt):Zt()}})}function Y1(Ft,Ut,Jt){var kn=Ds;return function(qr,bo){if(kn===Sy)throw new Error("Generator is already running");if(kn===nh){if(qr==="throw")throw bo;return{value:Wt,done:!0}}for(Jt.method=qr,Jt.arg=bo;;){var Zt=Jt.delegate;if(Zt){var ps=m3(Zt,Jt);if(ps){if(ps===Dl)continue;return ps}}if(Jt.method==="next")Jt.sent=Jt._sent=Jt.arg;else if(Jt.method==="throw"){if(kn===Ds)throw kn=nh,Jt.arg;Jt.dispatchException(Jt.arg)}else Jt.method==="return"&&Jt.abrupt("return",Jt.arg);kn=Sy;var sl=Rs(Ft,Ut,Jt);if(sl.type==="normal"){if(kn=Jt.done?nh:kf,sl.arg===Dl)continue;return{value:sl.arg,done:Jt.done}}sl.type==="throw"&&(kn=nh,Jt.method="throw",Jt.arg=sl.arg)}}}function m3(Ft,Ut){var Jt=Ut.method,kn=Ft.iterator[Jt];if(kn===Wt)return Ut.delegate=null,Jt==="throw"&&Ft.iterator.return&&(Ut.method="return",Ut.arg=Wt,m3(Ft,Ut),Ut.method==="throw")||Jt!=="return"&&(Ut.method="throw",Ut.arg=new TypeError("The iterator does not provide a '"+Jt+"' method")),Dl;var qr=Rs(kn,Ft.iterator,Ut.arg);if(qr.type==="throw")return Ut.method="throw",Ut.arg=qr.arg,Ut.delegate=null,Dl;var bo=qr.arg;return bo?bo.done?(Ut[Ft.resultName]=bo.value,Ut.next=Ft.nextLoc,Ut.method!=="return"&&(Ut.method="next",Ut.arg=Wt),Ut.delegate=null,Dl):bo:(Ut.method="throw",Ut.arg=new TypeError("iterator result is not an object"),Ut.delegate=null,Dl)}function fs(Ft){var Ut,Jt={tryLoc:Ft[0]};1 in Ft&&(Jt.catchLoc=Ft[1]),2 in Ft&&(Jt.finallyLoc=Ft[2],Jt.afterLoc=Ft[3]),we(Ut=this.tryEntries).call(Ut,Jt)}function Iy(Ft){var Ut=Ft.completion||{};Ut.type="normal",delete Ut.arg,Ft.completion=Ut}function jc(Ft){this.tryEntries=[{tryLoc:"root"}],Oe(Ft).call(Ft,fs,this),this.reset(!0)}function L0(Ft){if(Ft||Ft===""){var Ut=Ft[po];if(Ut)return Ut.call(Ft);if(typeof Ft.next=="function")return Ft;if(!isNaN(Ft.length)){var Jt=-1,kn=function qr(){for(;++Jt=0;--kn){var qr=this.tryEntries[kn],bo=qr.completion;if(qr.tryLoc==="root")return Jt("end");if(qr.tryLoc<=this.prev){var Zt=Dr.call(qr,"catchLoc"),ps=Dr.call(qr,"finallyLoc");if(Zt&&ps){if(this.prev=0;--Jt){var kn=this.tryEntries[Jt];if(kn.tryLoc<=this.prev&&Dr.call(kn,"finallyLoc")&&this.prev=0;--Ut){var Jt=this.tryEntries[Ut];if(Jt.finallyLoc===Ft)return this.complete(Jt.completion,Jt.afterLoc),Iy(Jt),Dl}},catch:function(Ft){for(var Ut=this.tryEntries.length-1;Ut>=0;--Ut){var Jt=this.tryEntries[Ut];if(Jt.tryLoc===Ft){var kn=Jt.completion;if(kn.type==="throw"){var qr=kn.arg;Iy(Jt)}return qr}}throw new Error("illegal catch attempt")},delegateYield:function(Ft,Ut,Jt){return this.delegate={iterator:L0(Ft),resultName:Ut,nextLoc:Jt},this.method==="next"&&(this.arg=Wt),Dl}},dr}E.exports=jt,E.exports.__esModule=!0,E.exports.default=E.exports})(jo);var Al=(0,jo.exports)(),C0=Al;try{regeneratorRuntime=Al}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=Al:Function("r","regeneratorRuntime = r")(Al)}var vi=r(C0),z1={exports:{}},T0=y(function(){if(typeof ArrayBuffer=="function"){var E=new ArrayBuffer(8);Object.isExtensible(E)&&Object.defineProperty(E,"a",{value:8})}}),Ho=y,zi=mr,Va=ge,ja=T0,ea=Object.isExtensible,A0=Ho(function(){ea(1)})||ja?function(E){return!!zi(E)&&(!ja||Va(E)!=="ArrayBuffer")&&(!ea||ea(E))}:ea,M0=!y(function(){return Object.isExtensible(Object.preventExtensions({}))}),Ml=Xr,U2=Z,Kx=Gi,Yx=mr,N1=En,Qx=La.f,PO=Zl,R0=Lh,jO=A0,Zx=M0,G2=!1,Qd=od("meta"),vS=0,J2=function(E){Qx(E,Qd,{value:{objectID:"O"+vS++,weakData:{}}})},II=z1.exports={enable:function(){II.enable=function(){},G2=!0;var E=PO.f,M=U2([].splice),D={};D[Qd]=1,E(D).length&&(PO.f=function(F){for(var Q=E(F),le=0,Oe=Q.length;le1?arguments[1]:void 0);Xe=Xe?Xe.next:et.first;)for(jt(Xe.value,Xe.key,this);Xe&&Xe.removed;)Xe=Xe.previous},has:function(Be){return!!Se(this,Be)}}),Y2(le,D?{get:function(Be){var Xe=Se(this,Be);return Xe&&Xe.value},set:function(Be,Xe){return we(this,Be===0?0:Be,Xe)}}:{add:function(Be){return we(this,Be=Be===0?0:Be,Be)}}),Qu&&RO(le,"size",{configurable:!0,get:function(){return Oe(this).size}}),Q},setStrong:function(E,M,D){var F=M+" Iterator",Q=Fp(M),le=Fp(F);o_(E,M,function(Oe,we){Pi(this,{type:F,target:Oe,state:Q(Oe),kind:we,last:void 0})},function(){for(var Oe=le(this),we=Oe.kind,Se=Oe.last;Se&&Se.removed;)Se=Se.previous;return Oe.target&&(Oe.last=Se=Se?Se.next:Oe.state.first)?eh(we==="keys"?Se.key:we==="values"?Se.value:[Se.key,Se.value],!1):(Oe.target=void 0,eh(void 0,!0))},D?"entries":"values",!D,!0),Ic(M)}};r_("Map",function(E){return function(){return E(this,arguments.length?arguments[0]:void 0)}},Bp);var Z2=r(Un.Map),e3=Rn.some;Xr({target:"Array",proto:!0,forced:!wg("some")},{some:function(E){return e3(this,E,arguments.length>1?arguments[1]:void 0)}});var bS=ss("Array","some"),i_=go,t3=bS,W1=Array.prototype,wS=r(function(E){var M=E.some;return E===W1||i_(W1,E)&&M===W1.some?t3:M}),OS=ss("Array","keys"),xS=Js,a_=En,r3=go,Zu=OS,H1=Array.prototype,s_={DOMTokenList:!0,NodeList:!0},Sf=r(function(E){var M=E.keys;return E===H1||r3(H1,E)&&M===H1.keys||a_(s_,xS(E))?Zu:M}),zO=Ro,n3=Math.floor,Rl=function(E,M){var D=E.length,F=n3(D/2);return D<8?my(E,M):vy(E,Rl(zO(E,0,F),M),Rl(zO(E,F),M),M)},my=function(E,M){for(var D,F,Q=E.length,le=1;le0;)E[F]=E[--F];F!==le++&&(E[F]=D)}return E},vy=function(E,M,D,F){for(var Q=M.length,le=D.length,Oe=0,we=0;Oe3)){if(u_)return!0;if(tc)return tc<603;var E,M,D,F,Q="";for(E=65;E<76;E++){switch(M=String.fromCharCode(E),E){case 66:case 69:case 70:case 72:D=3;break;case 68:case 71:D=4;break;default:D=2}for(F=0;F<47;F++)kc.push({k:M+F,v:D})}for(kc.sort(function(le,Oe){return Oe.v-le.v}),F=0;Fa3(Se)?1:-1}}(E)),D=LO(Q),F=0;Fthis.max&&this.flush(),this._timeout!=null&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&typeof this.delay=="number"&&(this._timeout=hf(function(){M.flush()},this.delay))}},{key:"flush",value:function(){var M,D;yp(M=w8(D=this._queue).call(D,0)).call(M,function(F){F.fn.apply(F.context||F.fn,F.args||[])})}}],[{key:"extend",value:function(M,D){var F=new E(D);if(M.flush!==void 0)throw new Error("Target object already has a property flush");M.flush=function(){F.flush()};var Q=[{name:"flush",original:void 0}];if(D&&D.replace)for(var le=0;le=E.length?{done:!0}:{done:!1,value:E[F++]}},e:function(Se){throw Se},f:Q}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var le,Oe=!0,we=!1;return{s:function(){D=D.call(E)},n:function(){var Se=D.next();return Oe=Se.done,Se},e:function(Se){we=!0,le=Se},f:function(){try{Oe||D.return==null||D.return()}finally{if(we)throw le}}}}function K1(E,M){(M==null||M>E.length)&&(M=E.length);for(var D=0,F=new Array(M);Dvi.mark(function Q(){var le,Oe,we,Se,Be;return vi.wrap(function(Xe){for(;;)switch(Xe.prev=Xe.next){case 0:le=rc(F),Xe.prev=1,le.s();case 3:if((Oe=le.n()).done){Xe.next=10;break}if(we=tl(Oe.value,2),Se=we[0],Be=we[1],!D(Be,Se)){Xe.next=8;break}return Xe.next=8,[Se,Be];case 8:Xe.next=3;break;case 10:Xe.next=15;break;case 12:Xe.prev=12,Xe.t0=Xe.catch(1),le.e(Xe.t0);case 15:return Xe.prev=15,le.f(),Xe.finish(15);case 18:case"end":return Xe.stop()}},Q,null,[[1,12,15,18]])})()})}},{key:"forEach",value:function(D){var F,Q=rc(this._pairs);try{for(Q.s();!(F=Q.n()).done;){var le=tl(F.value,2),Oe=le[0];D(le[1],Oe)}}catch(we){Q.e(we)}finally{Q.f()}}},{key:"map",value:function(D){var F=this._pairs;return new M({[If]:()=>vi.mark(function Q(){var le,Oe,we,Se,Be;return vi.wrap(function(Xe){for(;;)switch(Xe.prev=Xe.next){case 0:le=rc(F),Xe.prev=1,le.s();case 3:if((Oe=le.n()).done){Xe.next=9;break}return we=tl(Oe.value,2),Se=we[0],Be=we[1],Xe.next=7,[Se,D(Be,Se)];case 7:Xe.next=3;break;case 9:Xe.next=14;break;case 11:Xe.prev=11,Xe.t0=Xe.catch(1),le.e(Xe.t0);case 14:return Xe.prev=14,le.f(),Xe.finish(14);case 17:case"end":return Xe.stop()}},Q,null,[[1,11,14,17]])})()})}},{key:"max",value:function(D){var F=Ms(this._pairs),Q=F.next();if(Q.done)return null;for(var le=Q.value[1],Oe=D(Q.value[1],Q.value[0]);!(Q=F.next()).done;){var we=tl(Q.value,2),Se=we[0],Be=we[1],Xe=D(Be,Se);Xe>Oe&&(Oe=Xe,le=Be)}return le}},{key:"min",value:function(D){var F=Ms(this._pairs),Q=F.next();if(Q.done)return null;for(var le=Q.value[1],Oe=D(Q.value[1],Q.value[0]);!(Q=F.next()).done;){var we=tl(Q.value,2),Se=we[0],Be=we[1],Xe=D(Be,Se);Xe=E.length?{done:!0}:{done:!1,value:E[F++]}},e:function(Se){throw Se},f:Q}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var le,Oe=!0,we=!1;return{s:function(){D=D.call(E)},n:function(){var Se=D.next();return Oe=Se.done,Se},e:function(Se){we=!0,le=Se},f:function(){try{Oe||D.return==null||D.return()}finally{if(we)throw le}}}}function p3(E,M){(M==null||M>E.length)&&(M=E.length);for(var D=0,F=new Array(M);D"u"||!se||se.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(se(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var D,F=Kr(E);if(M){var Q=Kr(this).constructor;D=se(F,arguments,Q)}else D=F.apply(this,arguments);return nn(this,D)}}var v_=function(E){pr(D,E);var M=m_(D);function D(F,Q){var le;return t(this,D),Sl(Zr(le=M.call(this)),"_queue",null),F&&!_s(F)&&(Q=F,F=[]),le._options=Q||{},le._data=new Z2,le.length=0,le._idProp=le._options.fieldId||"id",F&&F.length&&le.add(F),le.setOptions(Q),le}return hp(D,[{key:"idProp",get:function(){return this._idProp}},{key:"setOptions",value:function(F){F&&F.queue!==void 0&&(F.queue===!1?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=h_.extend(this,{replace:["add","update","remove"]})),F.queue&&typeof F.queue=="object"&&this._queue.setOptions(F.queue)))}},{key:"add",value:function(F,Q){var le,Oe=this,we=[];if(_s(F)){var Se=Lu(F).call(F,function(et){return et[Oe._idProp]});if(wS(Se).call(Se,function(et){return Oe._data.has(et)}))throw new Error("A duplicate id was found in the parameter array.");for(var Be=0,Xe=F.length;Be1?Dr-1:0),jr=1;jrBe?1:Sewe)&&(Oe=Be,we=Xe)}}catch(et){Se.e(et)}finally{Se.f()}return Oe||null}},{key:"min",value:function(F){var Q,le,Oe=null,we=null,Se=rh(J1(Q=this._data).call(Q));try{for(Se.s();!(le=Se.n()).done;){var Be=le.value,Xe=Be[F];typeof Xe=="number"&&(we==null||Xevi.mark(function Oe(){var we,Se,Be,Xe;return vi.wrap(function(et){for(;;)switch(et.prev=et.next){case 0:we=rh(F),et.prev=1,we.s();case 3:if((Se=we.n()).done){et.next=11;break}if(Be=Se.value,(Xe=Q.get(Be))==null){et.next=9;break}return et.next=9,[Be,Xe];case 9:et.next=3;break;case 11:et.next=16;break;case 13:et.prev=13,et.t0=et.catch(1),we.e(et.t0);case 16:return et.prev=16,we.f(),et.finish(16);case 19:case"end":return et.stop()}},Oe,null,[[1,13,16,19]])})()})}var le;return new $O({[If]:Zm(le=p_(this._data)).call(le,this._data)})}}]),D}(HO);function d3(E,M){var D=ni!==void 0&&s2(E)||E["@@iterator"];if(!D){if(_s(E)||(D=function(Se,Be){var Xe;if(Se){if(typeof Se=="string")return xy(Se,Be);var et=gp(Xe=Object.prototype.toString.call(Se)).call(Xe,8,-1);if(et==="Object"&&Se.constructor&&(et=Se.constructor.name),et==="Map"||et==="Set")return dw(Se);if(et==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(et))return xy(Se,Be)}}(E))||M&&E&&typeof E.length=="number"){D&&(E=D);var F=0,Q=function(){};return{s:Q,n:function(){return F>=E.length?{done:!0}:{done:!1,value:E[F++]}},e:function(Se){throw Se},f:Q}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var le,Oe=!0,we=!1;return{s:function(){D=D.call(E)},n:function(){var Se=D.next();return Oe=Se.done,Se},e:function(Se){we=!0,le=Se},f:function(){try{Oe||D.return==null||D.return()}finally{if(we)throw le}}}}function xy(E,M){(M==null||M>E.length)&&(M=E.length);for(var D=0,F=new Array(M);D"u"||!se||se.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(se(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var D,F=Kr(E);if(M){var Q=Kr(this).constructor;D=se(F,arguments,Q)}else D=F.apply(this,arguments);return nn(this,D)}}var g_=function(E){pr(D,E);var M=_y(D);function D(F,Q){var le,Oe;return t(this,D),Sl(Zr(Oe=M.call(this)),"length",0),Sl(Zr(Oe),"_ids",new As),Oe._options=Q||{},Oe._listener=Zm(le=Oe._onEvent).call(le,Zr(Oe)),Oe.setData(F),Oe}return hp(D,[{key:"idProp",get:function(){return this.getDataSet().idProp}},{key:"setData",value:function(F){if(this._data){this._data.off&&this._data.off("*",this._listener);var Q=this._data.getIds({filter:la(this._options)}),le=this._data.get(Q);this._ids.clear(),this.length=0,this._trigger("remove",{items:Q,oldData:le})}if(F!=null){this._data=F;for(var Oe=this._data.getIds({filter:la(this._options)}),we=0,Se=Oe.length;wet=>{let n=VRe.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),_3=e=>(e=e.toLowerCase(),t=>vV(t)===e),gV=e=>t=>typeof t===e,{isArray:QP}=Array,nA=gV("undefined");function qRe(e){return e!==null&&!nA(e)&&e.constructor!==null&&!nA(e.constructor)&&iv(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var Tve=_3("ArrayBuffer");function URe(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Tve(e.buffer),t}var GRe=gV("string"),iv=gV("function"),Ave=gV("number"),yV=e=>e!==null&&typeof e=="object",JRe=e=>e===!0||e===!1,mV=e=>{if(vV(e)!=="object")return!1;let t=xZ(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},XRe=_3("Date"),KRe=_3("File"),YRe=_3("Blob"),QRe=_3("FileList"),ZRe=e=>yV(e)&&iv(e.pipe),eDe=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||iv(e.append)&&((t=vV(e))==="formdata"||t==="object"&&iv(e.toString)&&e.toString()==="[object FormData]"))},tDe=_3("URLSearchParams"),[rDe,nDe,oDe,iDe]=["ReadableStream","Request","Response","Headers"].map(_3),aDe=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function oA(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,o;if(typeof e!="object"&&(e=[e]),QP(e))for(r=0,o=e.length;r0;)if(o=n[r],t===o.toLowerCase())return o;return null}var nk=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),Rve=e=>!nA(e)&&e!==nk;function OZ(){let{caseless:e}=Rve(this)&&this||{},t={},n=(r,o)=>{let i=e&&Mve(t,o)||o;mV(t[i])&&mV(r)?t[i]=OZ(t[i],r):mV(r)?t[i]=OZ({},r):QP(r)?t[i]=r.slice():t[i]=r};for(let r=0,o=arguments.length;r(oA(t,(o,i)=>{n&&iv(o)?e[i]=rA(o,n):e[i]=o},{allOwnKeys:r}),e),lDe=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),uDe=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},cDe=(e,t,n,r)=>{let o,i,d,y={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)d=o[i],(!r||r(d,e,t))&&!y[d]&&(t[d]=e[d],y[d]=!0);e=n!==!1&&xZ(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},fDe=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;let r=e.indexOf(t,n);return r!==-1&&r===n},pDe=e=>{if(!e)return null;if(QP(e))return e;let t=e.length;if(!Ave(t))return null;let n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},dDe=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&xZ(Uint8Array)),hDe=(e,t)=>{let r=(e&&e[Symbol.iterator]).call(e),o;for(;(o=r.next())&&!o.done;){let i=o.value;t.call(e,i[0],i[1])}},mDe=(e,t)=>{let n,r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},vDe=_3("HTMLFormElement"),gDe=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,o){return r.toUpperCase()+o}),jve=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),yDe=_3("RegExp"),Dve=(e,t)=>{let n=Object.getOwnPropertyDescriptors(e),r={};oA(n,(o,i)=>{let d;(d=t(o,i,e))!==!1&&(r[i]=d||o)}),Object.defineProperties(e,r)},bDe=e=>{Dve(e,(t,n)=>{if(iv(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;let r=e[n];if(iv(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},wDe=(e,t)=>{let n={},r=o=>{o.forEach(i=>{n[i]=!0})};return QP(e)?r(e):r(String(e).split(t)),n},ODe=()=>{},xDe=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t,wZ="abcdefghijklmnopqrstuvwxyz",Cve="0123456789",zve={DIGIT:Cve,ALPHA:wZ,ALPHA_DIGIT:wZ+wZ.toUpperCase()+Cve},_De=(e=16,t=zve.ALPHA_DIGIT)=>{let n="",{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n};function SDe(e){return!!(e&&iv(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}var EDe=e=>{let t=new Array(10),n=(r,o)=>{if(yV(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[o]=r;let i=QP(r)?[]:{};return oA(r,(d,y)=>{let _=n(d,o+1);!nA(_)&&(i[y]=_)}),t[o]=void 0,i}}return r};return n(e,0)},IDe=_3("AsyncFunction"),kDe=e=>e&&(yV(e)||iv(e))&&iv(e.then)&&iv(e.catch),Nve=((e,t)=>e?setImmediate:t?((n,r)=>(nk.addEventListener("message",({source:o,data:i})=>{o===nk&&i===n&&r.length&&r.shift()()},!1),o=>{r.push(o),nk.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",iv(nk.postMessage)),PDe=typeof queueMicrotask<"u"?queueMicrotask.bind(nk):typeof process<"u"&&process.nextTick||Nve,vt={isArray:QP,isArrayBuffer:Tve,isBuffer:qRe,isFormData:eDe,isArrayBufferView:URe,isString:GRe,isNumber:Ave,isBoolean:JRe,isObject:yV,isPlainObject:mV,isReadableStream:rDe,isRequest:nDe,isResponse:oDe,isHeaders:iDe,isUndefined:nA,isDate:XRe,isFile:KRe,isBlob:YRe,isRegExp:yDe,isFunction:iv,isStream:ZRe,isURLSearchParams:tDe,isTypedArray:dDe,isFileList:QRe,forEach:oA,merge:OZ,extend:sDe,trim:aDe,stripBOM:lDe,inherits:uDe,toFlatObject:cDe,kindOf:vV,kindOfTest:_3,endsWith:fDe,toArray:pDe,forEachEntry:hDe,matchAll:mDe,isHTMLForm:vDe,hasOwnProperty:jve,hasOwnProp:jve,reduceDescriptors:Dve,freezeMethods:bDe,toObjectSet:wDe,toCamelCase:gDe,noop:ODe,toFiniteNumber:xDe,findKey:Mve,global:nk,isContextDefined:Rve,ALPHABET:zve,generateString:_De,isSpecCompliantForm:SDe,toJSONObject:EDe,isAsyncFn:IDe,isThenable:kDe,setImmediate:Nve,asap:PDe};function ZP(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}vt.inherits(ZP,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:vt.toJSONObject(this.config),code:this.code,status:this.status}}});var Lve=ZP.prototype,Fve={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{Fve[e]={value:e}});Object.defineProperties(ZP,Fve);Object.defineProperty(Lve,"isAxiosError",{value:!0});ZP.from=(e,t,n,r,o,i)=>{let d=Object.create(Lve);return vt.toFlatObject(e,d,function(_){return _!==Error.prototype},y=>y!=="isAxiosError"),ZP.call(d,e.message,t,n,r,o),d.cause=e,d.name=e.name,i&&Object.assign(d,i),d};var Nn=ZP;var bV=null;function _Z(e){return vt.isPlainObject(e)||vt.isArray(e)}function Wve(e){return vt.endsWith(e,"[]")?e.slice(0,-2):e}function Bve(e,t,n){return e?e.concat(t).map(function(o,i){return o=Wve(o),!n&&i?"["+o+"]":o}).join(n?".":""):t}function jDe(e){return vt.isArray(e)&&!e.some(_Z)}var CDe=vt.toFlatObject(vt,{},null,function(t){return/^is[A-Z]/.test(t)});function TDe(e,t,n){if(!vt.isObject(e))throw new TypeError("target must be an object");t=t||new(bV||FormData),n=vt.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(K,U){return!vt.isUndefined(U[K])});let r=n.metaTokens,o=n.visitor||T,i=n.dots,d=n.indexes,_=(n.Blob||typeof Blob<"u"&&Blob)&&vt.isSpecCompliantForm(t);if(!vt.isFunction(o))throw new TypeError("visitor must be a function");function k(q){if(q===null)return"";if(vt.isDate(q))return q.toISOString();if(!_&&vt.isBlob(q))throw new Nn("Blob is not supported. Use a Buffer instead.");return vt.isArrayBuffer(q)||vt.isTypedArray(q)?_&&typeof Blob=="function"?new Blob([q]):Buffer.from(q):q}function T(q,K,U){let X=q;if(q&&!U&&typeof q=="object"){if(vt.endsWith(K,"{}"))K=r?K:K.slice(0,-2),q=JSON.stringify(q);else if(vt.isArray(q)&&jDe(q)||(vt.isFileList(q)||vt.endsWith(K,"[]"))&&(X=vt.toArray(q)))return K=Wve(K),X.forEach(function(fe,me){!(vt.isUndefined(fe)||fe===null)&&t.append(d===!0?Bve([K],me,i):d===null?K:K+"[]",k(fe))}),!1}return _Z(q)?!0:(t.append(Bve(U,K,i),k(q)),!1)}let N=[],L=Object.assign(CDe,{defaultVisitor:T,convertValue:k,isVisitable:_Z});function Y(q,K){if(!vt.isUndefined(q)){if(N.indexOf(q)!==-1)throw Error("Circular reference detected in "+K.join("."));N.push(q),vt.forEach(q,function(X,Z){(!(vt.isUndefined(X)||X===null)&&o.call(t,X,vt.isString(Z)?Z.trim():Z,K,L))===!0&&Y(X,K?K.concat(Z):[Z])}),N.pop()}}if(!vt.isObject(e))throw new TypeError("data must be an object");return Y(e),t}var pE=TDe;function Hve(e){let t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function $ve(e,t){this._pairs=[],e&&pE(e,this,t)}var Vve=$ve.prototype;Vve.append=function(t,n){this._pairs.push([t,n])};Vve.toString=function(t){let n=t?function(r){return t.call(this,r,Hve)}:Hve;return this._pairs.map(function(o){return n(o[0])+"="+n(o[1])},"").join("&")};var wV=$ve;function ADe(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function iA(e,t,n){if(!t)return e;let r=n&&n.encode||ADe,o=n&&n.serialize,i;if(o?i=o(t,n):i=vt.isURLSearchParams(t)?t.toString():new wV(t,n).toString(r),i){let d=e.indexOf("#");d!==-1&&(e=e.slice(0,d)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}var SZ=class{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){vt.forEach(this.handlers,function(r){r!==null&&t(r)})}},EZ=SZ;var OV={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var qve=typeof URLSearchParams<"u"?URLSearchParams:wV;var Uve=typeof FormData<"u"?FormData:null;var Gve=typeof Blob<"u"?Blob:null;var Jve={isBrowser:!0,classes:{URLSearchParams:qve,FormData:Uve,Blob:Gve},protocols:["http","https","file","blob","url","data"]};var PZ={};de(PZ,{hasBrowserEnv:()=>kZ,hasStandardBrowserEnv:()=>MDe,hasStandardBrowserWebWorkerEnv:()=>RDe,navigator:()=>IZ,origin:()=>DDe});var kZ=typeof window<"u"&&typeof document<"u",IZ=typeof navigator=="object"&&navigator||void 0,MDe=kZ&&(!IZ||["ReactNative","NativeScript","NS"].indexOf(IZ.product)<0),RDe=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),DDe=kZ&&window.location.href||"http://localhost";var Fl={...PZ,...Jve};function jZ(e,t){return pE(e,new Fl.classes.URLSearchParams,Object.assign({visitor:function(n,r,o,i){return Fl.isNode&&vt.isBuffer(n)?(this.append(r,n.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},t))}function zDe(e){return vt.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function NDe(e){let t={},n=Object.keys(e),r,o=n.length,i;for(r=0;r=n.length;return d=!d&&vt.isArray(o)?o.length:d,_?(vt.hasOwnProp(o,d)?o[d]=[o[d],r]:o[d]=r,!y):((!o[d]||!vt.isObject(o[d]))&&(o[d]=[]),t(n,r,o[d],i)&&vt.isArray(o[d])&&(o[d]=NDe(o[d])),!y)}if(vt.isFormData(e)&&vt.isFunction(e.entries)){let n={};return vt.forEachEntry(e,(r,o)=>{t(zDe(r),o,n,0)}),n}return null}var xV=LDe;function FDe(e,t,n){if(vt.isString(e))try{return(t||JSON.parse)(e),vt.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}var CZ={transitional:OV,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){let r=n.getContentType()||"",o=r.indexOf("application/json")>-1,i=vt.isObject(t);if(i&&vt.isHTMLForm(t)&&(t=new FormData(t)),vt.isFormData(t))return o?JSON.stringify(xV(t)):t;if(vt.isArrayBuffer(t)||vt.isBuffer(t)||vt.isStream(t)||vt.isFile(t)||vt.isBlob(t)||vt.isReadableStream(t))return t;if(vt.isArrayBufferView(t))return t.buffer;if(vt.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let y;if(i){if(r.indexOf("application/x-www-form-urlencoded")>-1)return jZ(t,this.formSerializer).toString();if((y=vt.isFileList(t))||r.indexOf("multipart/form-data")>-1){let _=this.env&&this.env.FormData;return pE(y?{"files[]":t}:t,_&&new _,this.formSerializer)}}return i||o?(n.setContentType("application/json",!1),FDe(t)):t}],transformResponse:[function(t){let n=this.transitional||CZ.transitional,r=n&&n.forcedJSONParsing,o=this.responseType==="json";if(vt.isResponse(t)||vt.isReadableStream(t))return t;if(t&&vt.isString(t)&&(r&&!this.responseType||o)){let d=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(y){if(d)throw y.name==="SyntaxError"?Nn.from(y,Nn.ERR_BAD_RESPONSE,this,null,this.response):y}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Fl.classes.FormData,Blob:Fl.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};vt.forEach(["delete","get","head","post","put","patch"],e=>{CZ.headers[e]={}});var ej=CZ;var BDe=vt.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Xve=e=>{let t={},n,r,o;return e&&e.split(` @@ -83,7 +83,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho `},gye=function(t){return{euiScreenReaderOnly:t?nt("&:not(:focus):not(:active){",wE(),";};label:euiScreenReaderOnly;"):nt(wE(),";label:euiScreenReaderOnly;")}};var na=function(t){var n=t.children,r=t.className,o=t.showOnFocus,i=(0,yye.default)(r,n.props.className),d=gye(o),y=[d.euiScreenReaderOnly],_={className:i.length?i:void 0,css:y};return bE(n,_)};na.propTypes={children:dq.default.element.isRequired,showOnFocus:dq.default.bool,className:dq.default.string};function Vze(e,t){return Jze(e)||Gze(e,t)||Uze(e,t)||qze()}function qze(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Uze(e,t){if(e){if(typeof e=="string")return bye(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bye(e,t)}}function bye(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nsummary:first-of-type","details"],uee=Xze.join(","),xye=typeof Element>"u",AA=xye?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,cee=!xye&&Element.prototype.getRootNode?function(e){return e.getRootNode()}:function(e){return e.ownerDocument},_ye=function(t,n,r){var o=Array.prototype.slice.apply(t.querySelectorAll(uee));return n&&AA.call(t,uee)&&o.unshift(t),o=o.filter(r),o},Sye=function e(t,n,r){for(var o=[],i=Array.from(t);i.length;){var d=i.shift();if(d.tagName==="SLOT"){var y=d.assignedElements(),_=y.length?y:d.children,k=e(_,!0,r);r.flatten?o.push.apply(o,k):o.push({scope:d,candidates:k})}else{var T=AA.call(d,uee);T&&r.filter(d)&&(n||!t.includes(d))&&o.push(d);var N=d.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(d),L=!r.shadowRootFilter||r.shadowRootFilter(d);if(N&&L){var Y=e(N===!0?d.children:N.children,!0,r);r.flatten?o.push.apply(o,Y):o.push({scope:d,candidates:Y})}else i.unshift.apply(i,d.children)}}return o},Eye=function(t,n){return t.tabIndex<0&&(n||/^(AUDIO|VIDEO|DETAILS)$/.test(t.tagName)||t.isContentEditable)&&isNaN(parseInt(t.getAttribute("tabindex"),10))?0:t.tabIndex},Kze=function(t,n){return t.tabIndex===n.tabIndex?t.documentOrder-n.documentOrder:t.tabIndex-n.tabIndex},Iye=function(t){return t.tagName==="INPUT"},Yze=function(t){return Iye(t)&&t.type==="hidden"},Qze=function(t){var n=t.tagName==="DETAILS"&&Array.prototype.slice.apply(t.children).some(function(r){return r.tagName==="SUMMARY"});return n},Zze=function(t,n){for(var r=0;rsummary:first-of-type"),d=i?t.parentElement:t;if(AA.call(d,"details:not([open]) *"))return!0;var y=cee(t).host,_=y?.ownerDocument.contains(y)||t.ownerDocument.contains(t);if(!r||r==="full"){if(typeof o=="function"){for(var k=t;t;){var T=t.parentElement,N=cee(t);if(T&&!T.shadowRoot&&o(T)===!0)return wye(t);t.assignedSlot?t=t.assignedSlot:!T&&N!==t.ownerDocument?t=N.host:t=T}t=k}if(_)return!t.getClientRects().length}else if(r==="non-zero-area")return wye(t);return!1},oNe=function(t){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(t.tagName))for(var n=t.parentElement;n;){if(n.tagName==="FIELDSET"&&n.disabled){for(var r=0;r=0)},aNe=function e(t){var n=[],r=[];return t.forEach(function(o,i){var d=!!o.scope,y=d?o.scope:o,_=Eye(y,d),k=d?e(o.candidates):y;_===0?d?n.push.apply(n,k):n.push(y):r.push({documentOrder:i,tabIndex:_,item:o,isScope:d,content:k})}),r.sort(Kze).reduce(function(o,i){return i.isScope?o.push.apply(o,i.content):o.push(i.content),o},[]).concat(n)},kye=function(t,n){n=n||{};var r;return n.getShadowRoot?r=Sye([t],n.includeContainer,{filter:Oye.bind(null,n),flatten:!1,getShadowRoot:n.getShadowRoot,shadowRootFilter:iNe}):r=_ye(t,n.includeContainer,Oye.bind(null,n)),aNe(r)},Pye=function(t,n){n=n||{};var r;return n.getShadowRoot?r=Sye([t],n.includeContainer,{filter:fee.bind(null,n),flatten:!0,getShadowRoot:n.getShadowRoot}):r=_ye(t,n.includeContainer,fee.bind(null,n)),r};var Vo={};de(Vo,{ALT:()=>fNe,ARROW_DOWN:()=>mee,ARROW_LEFT:()=>gee,ARROW_RIGHT:()=>yee,ARROW_UP:()=>vee,BACKSPACE:()=>uNe,CTRL:()=>dNe,END:()=>gNe,ENTER:()=>sNe,ESCAPE:()=>dee,F2:()=>cNe,HOME:()=>yNe,META:()=>hNe,PAGE_DOWN:()=>vNe,PAGE_UP:()=>mNe,SHIFT:()=>pNe,SPACE:()=>lNe,TAB:()=>hee,keys:()=>pee});var sNe="Enter",lNe=" ",dee="Escape",hee="Tab",uNe="Backspace",cNe="F2",fNe="Alt",pNe="Shift",dNe="Control",hNe="Meta",mee="ArrowDown",vee="ArrowUp",gee="ArrowLeft",yee="ArrowRight",mNe="PageUp",vNe="PageDown",gNe="End",yNe="Home",pee;(function(e){e.ENTER="Enter",e.SPACE=" ",e.ESCAPE="Escape",e.TAB="Tab",e.BACKSPACE="Backspace",e.F2="F2",e.ALT="Alt",e.SHIFT="Shift",e.CTRL="Control",e.META="Meta",e.ARROW_DOWN="ArrowDown",e.ARROW_UP="ArrowUp",e.ARROW_LEFT="ArrowLeft",e.ARROW_RIGHT="ArrowRight",e.PAGE_UP="PageUp",e.PAGE_DOWN="PageDown",e.END="End",e.HOME="Home"})(pee||(pee={}));var a4={ARROW_DOWN:mee,ARROW_LEFT:gee,ARROW_RIGHT:yee,ARROW_UP:vee,ESCAPE:dee,TAB:hee};var hq,bNe=new Uint8Array(16);function bee(){if(!hq&&(hq=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!hq))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return hq(bNe)}var jye=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function wNe(e){return typeof e=="string"&&jye.test(e)}var Cye=wNe;var Nf=[];for(mq=0;mq<256;++mq)Nf.push((mq+256).toString(16).substr(1));var mq;function ONe(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=(Nf[e[t+0]]+Nf[e[t+1]]+Nf[e[t+2]]+Nf[e[t+3]]+"-"+Nf[e[t+4]]+Nf[e[t+5]]+"-"+Nf[e[t+6]]+Nf[e[t+7]]+"-"+Nf[e[t+8]]+Nf[e[t+9]]+"-"+Nf[e[t+10]]+Nf[e[t+11]]+Nf[e[t+12]]+Nf[e[t+13]]+Nf[e[t+14]]+Nf[e[t+15]]).toLowerCase();if(!Cye(n))throw TypeError("Stringified UUID is invalid");return n}var Tye=ONe;var Aye,wee,Oee=0,xee=0;function xNe(e,t,n){var r=t&&n||0,o=t||new Array(16);e=e||{};var i=e.node||Aye,d=e.clockseq!==void 0?e.clockseq:wee;if(i==null||d==null){var y=e.random||(e.rng||bee)();i==null&&(i=Aye=[y[0]|1,y[1],y[2],y[3],y[4],y[5]]),d==null&&(d=wee=(y[6]<<8|y[7])&16383)}var _=e.msecs!==void 0?e.msecs:Date.now(),k=e.nsecs!==void 0?e.nsecs:xee+1,T=_-Oee+(k-xee)/1e4;if(T<0&&e.clockseq===void 0&&(d=d+1&16383),(T<0||_>Oee)&&e.nsecs===void 0&&(k=0),k>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");Oee=_,xee=k,wee=d,_+=122192928e5;var N=((_&268435455)*1e4+k)%4294967296;o[r++]=N>>>24&255,o[r++]=N>>>16&255,o[r++]=N>>>8&255,o[r++]=N&255;var L=_/4294967296*1e4&268435455;o[r++]=L>>>8&255,o[r++]=L&255,o[r++]=L>>>24&15|16,o[r++]=L>>>16&255,o[r++]=d>>>8|128,o[r++]=d&255;for(var Y=0;Y<6;++Y)o[r+Y]=i[Y];return t||Tye(o)}var vq=xNe;var Mye=V(ne());function yo(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",t=vq();return function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"",r="".concat(e).concat(e!==""?"_":"i"),o=n?"_".concat(n):"";return"".concat(r).concat(o?t:vq()).concat(o)}}var N_=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.prefix,r=t.suffix,o=t.conditionalId;return(0,Mye.useMemo)(function(){return o||yo(n)(r)},[o,n,r])};var $y="left",j3="right",L_="center";function Yr(e){return Object.keys(e)}var gq={xl:1200,l:992,m:768,s:575,xs:0};var _ee=gq,Rye=Yr(_ee);function yq(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:_ee;return Rye.find(function(n){return t[n]<=e})}var Nj=V(ne());var LA=V(ne());var OE={light:"LIGHT",dark:"DARK"},Dye="INVERSE";function zye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function See(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:[];jNe(this,e),this.computer=t,this.dependencies=n}return CNe(e,[{key:"getValue",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;if(!this.dependencies.length)return this.computer(o);if(!Array.isArray(this.dependencies)){var d,y;return this.computer((d=(y=F_(o,this.dependencies))!==null&&y!==void 0?y:F_(r,this.dependencies,i))!==null&&d!==void 0?d:F_(n,this.dependencies,i))}return this.computer(this.dependencies.map(function(_){var k,T;return(k=(T=F_(o,_))!==null&&T!==void 0?T:F_(r,_,i))!==null&&k!==void 0?k:F_(n,_,i)}))}}]),e}();function lo(e,t){return new MA(e,t)}var RA=function(t,n,r){var o={themeName:t.key};function i(d,y){var _=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,k=arguments.length>3?arguments[3]:void 0;Object.keys(d).forEach(function(T){var N=k?"".concat(k,".").concat(T):"".concat(T);if([].concat(SNe(Object.values(OE)),[r]).includes(T)){if(T!==r)return;var L=new RegExp("(\\.".concat(r,"\\b)|(\\b").concat(r,"\\.)"));N=N.replace(L,"")}var Y=_&&F_(o,N);if(!Y||fk(Y)){var q=d[T]instanceof MA?d[T].getValue(d.root,y.root,o,r):d[T],K=y[T]instanceof MA?y[T].getValue(d.root,y.root,o,r):y[T];fk(q)&&!Array.isArray(q)?i(q,K??{},_,N):ANe(o,N,K??q)}})}return i(t,n),i(n,{},!0),o},DA=function(t,n){var r={getPrototypeOf:function(d){return Reflect.getPrototypeOf(d.model)},setPrototypeOf:function(d,y){return Reflect.setPrototypeOf(d.model,y)},isExtensible:function(d){return Reflect.isExtensible(d)},preventExtensions:function(d){return Reflect.preventExtensions(d.model)},getOwnPropertyDescriptor:function(d,y){return Reflect.getOwnPropertyDescriptor(d.model,y)},defineProperty:function(d,y,_){return Reflect.defineProperty(d.model,y,_)},has:function(d,y){return Reflect.has(d.model,y)},get:function(d,y){if(y==="key")return d[y];if(y==="__proto__")return{};var _=y==="root"?d:d.model||d,k=_[y];return fk(k)&&!Array.isArray(k)?new Proxy({model:k,root:d.root,key:"_".concat(d.key)},r):k},set:function(d){return d},deleteProperty:function(d){return d},ownKeys:function(d){return Reflect.ownKeys(d.model)},apply:function(d){return d},construct:function(d){return d}},o=new Proxy({model:t,root:t,key:n},r);return o},kee=function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=See({},t);return!fk(r)||!fk(n)?n:(Object.keys(n).forEach(function(o){var i=r[o],d=n[o];fk(i)&&fk(d)?r[o]=e(See({},i),See({},d)):r[o]=d}),r)};function MNe(e,t){return NNe(e)||zNe(e,t)||DNe(e,t)||RNe()}function RNe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function DNe(e,t){if(e){if(typeof e=="string")return Lye(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Lye(e,t)}}function Lye(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nwj(Oj(t,e),n);var pk=e=>{e._clipped=!1,e._unclipped=e.slice(0);for(let t=0;t<=3;t++)t<3?((e[t]<0||e[t]>255)&&(e._clipped=!0),e[t]=s4(e[t],0,255)):t===3&&(e[t]=s4(e[t],0,1));return e};var Fye={};for(let e of["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"])Fye[`[object ${e}]`]=e.toLowerCase();function $r(e){return Fye[Object.prototype.toString.call(e)]||"object"}var br=(e,t=null)=>e.length>=3?Array.prototype.slice.call(e):$r(e[0])=="object"&&t?t.split("").filter(n=>e[0][n]!==void 0).map(n=>e[0][n]):e[0];var B_=e=>{if(e.length<2)return null;let t=e.length-1;return $r(e[t])=="string"?e[t].toLowerCase():null};var{PI:xq,min:wj,max:Oj}=Math,Vy=xq*2,_q=xq/3,Bye=xq/180,Wye=180/xq;var Jr={format:{},autodetect:[]};var jee=class{constructor(...t){let n=this;if($r(t[0])==="object"&&t[0].constructor&&t[0].constructor===this.constructor)return t[0];let r=B_(t),o=!1;if(!r){o=!0,Jr.sorted||(Jr.autodetect=Jr.autodetect.sort((i,d)=>d.p-i.p),Jr.sorted=!0);for(let i of Jr.autodetect)if(r=i.test(...t),r)break}if(Jr.format[r]){let i=Jr.format[r].apply(null,o?t:t.slice(0,-1));n._rgb=pk(i)}else throw new Error("unknown format: "+t);n._rgb.length===3&&n._rgb.push(1)}toString(){return $r(this.hex)=="function"?this.hex():`[${this._rgb.join(",")}]`}},kt=jee;var Hye="2.6.0";var Sq=(...e)=>new Sq.Color(...e);Sq.Color=kt;Sq.version=Hye;var on=Sq;var LNe=(...e)=>{e=br(e,"cmyk");let[t,n,r,o]=e,i=e.length>4?e[4]:1;return o===1?[0,0,0,i]:[t>=1?0:255*(1-t)*(1-o),n>=1?0:255*(1-n)*(1-o),r>=1?0:255*(1-r)*(1-o),i]},$ye=LNe;var{max:Vye}=Math,FNe=(...e)=>{let[t,n,r]=br(e,"rgb");t=t/255,n=n/255,r=r/255;let o=1-Vye(t,Vye(n,r)),i=o<1?1/(1-o):0,d=(1-t-o)*i,y=(1-n-o)*i,_=(1-r-o)*i;return[d,y,_,o]},qye=FNe;kt.prototype.cmyk=function(){return qye(this._rgb)};on.cmyk=(...e)=>new kt(...e,"cmyk");Jr.format.cmyk=$ye;Jr.autodetect.push({p:2,test:(...e)=>{if(e=br(e,"cmyk"),$r(e)==="array"&&e.length===4)return"cmyk"}});var Cee=e=>Math.round(e*100)/100,BNe=(...e)=>{let t=br(e,"hsla"),n=B_(e)||"lsa";return t[0]=Cee(t[0]||0),t[1]=Cee(t[1]*100)+"%",t[2]=Cee(t[2]*100)+"%",n==="hsla"||t.length>3&&t[3]<1?(t[3]=t.length>3?t[3]:1,n="hsla"):t.length=3,`${n}(${t.join(",")})`},Uye=BNe;var WNe=(...e)=>{e=br(e,"rgba");let[t,n,r]=e;t/=255,n/=255,r/=255;let o=wj(t,n,r),i=Oj(t,n,r),d=(i+o)/2,y,_;return i===o?(y=0,_=Number.NaN):y=d<.5?(i-o)/(i+o):(i-o)/(2-i-o),t==i?_=(n-r)/(i-o):n==i?_=2+(r-t)/(i-o):r==i&&(_=4+(t-n)/(i-o)),_*=60,_<0&&(_+=360),e.length>3&&e[3]!==void 0?[_,y,d,e[3]]:[_,y,d]},Eq=WNe;var{round:Tee}=Math,HNe=(...e)=>{let t=br(e,"rgba"),n=B_(e)||"rgb";return n.substr(0,3)=="hsl"?Uye(Eq(t),n):(t[0]=Tee(t[0]),t[1]=Tee(t[1]),t[2]=Tee(t[2]),(n==="rgba"||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),`${n}(${t.slice(0,n==="rgb"?3:4).join(",")})`)},Gye=HNe;var{round:Aee}=Math,$Ne=(...e)=>{e=br(e,"hsl");let[t,n,r]=e,o,i,d;if(n===0)o=i=d=r*255;else{let y=[0,0,0],_=[0,0,0],k=r<.5?r*(1+n):r+n-r*n,T=2*r-k,N=t/360;y[0]=N+1/3,y[1]=N,y[2]=N-1/3;for(let L=0;L<3;L++)y[L]<0&&(y[L]+=1),y[L]>1&&(y[L]-=1),6*y[L]<1?_[L]=T+(k-T)*6*y[L]:2*y[L]<1?_[L]=k:3*y[L]<2?_[L]=T+(k-T)*(2/3-y[L])*6:_[L]=T;[o,i,d]=[Aee(_[0]*255),Aee(_[1]*255),Aee(_[2]*255)]}return e.length>3?[o,i,d,e[3]]:[o,i,d,1]},zA=$Ne;var Xye=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Kye=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,Yye=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,Qye=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,Zye=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,ebe=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,{round:Jye}=Math,tbe=e=>{e=e.toLowerCase().trim();let t;if(Jr.format.named)try{return Jr.format.named(e)}catch{}if(t=e.match(Xye)){let n=t.slice(1,4);for(let r=0;r<3;r++)n[r]=+n[r];return n[3]=1,n}if(t=e.match(Kye)){let n=t.slice(1,5);for(let r=0;r<4;r++)n[r]=+n[r];return n}if(t=e.match(Yye)){let n=t.slice(1,4);for(let r=0;r<3;r++)n[r]=Jye(n[r]*2.55);return n[3]=1,n}if(t=e.match(Qye)){let n=t.slice(1,5);for(let r=0;r<3;r++)n[r]=Jye(n[r]*2.55);return n[3]=+n[3],n}if(t=e.match(Zye)){let n=t.slice(1,4);n[1]*=.01,n[2]*=.01;let r=zA(n);return r[3]=1,r}if(t=e.match(ebe)){let n=t.slice(1,4);n[1]*=.01,n[2]*=.01;let r=zA(n);return r[3]=+t[4],r}};tbe.test=e=>Xye.test(e)||Kye.test(e)||Yye.test(e)||Qye.test(e)||Zye.test(e)||ebe.test(e);var Mee=tbe;kt.prototype.css=function(e){return Gye(this._rgb,e)};on.css=(...e)=>new kt(...e,"css");Jr.format.css=Mee;Jr.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&$r(e)==="string"&&Mee.test(e))return"css"}});Jr.format.gl=(...e)=>{let t=br(e,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t};on.gl=(...e)=>new kt(...e,"gl");kt.prototype.gl=function(){let e=this._rgb;return[e[0]/255,e[1]/255,e[2]/255,e[3]]};var{floor:VNe}=Math,qNe=(...e)=>{e=br(e,"hcg");let[t,n,r]=e,o,i,d;r=r*255;let y=n*255;if(n===0)o=i=d=r;else{t===360&&(t=0),t>360&&(t-=360),t<0&&(t+=360),t/=60;let _=VNe(t),k=t-_,T=r*(1-n),N=T+y*(1-k),L=T+y*k,Y=T+y;switch(_){case 0:[o,i,d]=[Y,L,T];break;case 1:[o,i,d]=[N,Y,T];break;case 2:[o,i,d]=[T,Y,L];break;case 3:[o,i,d]=[T,N,Y];break;case 4:[o,i,d]=[L,T,Y];break;case 5:[o,i,d]=[Y,T,N];break}}return[o,i,d,e.length>3?e[3]:1]},rbe=qNe;var UNe=(...e)=>{let[t,n,r]=br(e,"rgb"),o=wj(t,n,r),i=Oj(t,n,r),d=i-o,y=d*100/255,_=o/(255-d)*100,k;return d===0?k=Number.NaN:(t===i&&(k=(n-r)/d),n===i&&(k=2+(r-t)/d),r===i&&(k=4+(t-n)/d),k*=60,k<0&&(k+=360)),[k,y,_]},nbe=UNe;kt.prototype.hcg=function(){return nbe(this._rgb)};on.hcg=(...e)=>new kt(...e,"hcg");Jr.format.hcg=rbe;Jr.autodetect.push({p:1,test:(...e)=>{if(e=br(e,"hcg"),$r(e)==="array"&&e.length===3)return"hcg"}});var GNe=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,JNe=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,XNe=e=>{if(e.match(GNe)){(e.length===4||e.length===7)&&(e=e.substr(1)),e.length===3&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]);let t=parseInt(e,16),n=t>>16,r=t>>8&255,o=t&255;return[n,r,o,1]}if(e.match(JNe)){(e.length===5||e.length===9)&&(e=e.substr(1)),e.length===4&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]);let t=parseInt(e,16),n=t>>24&255,r=t>>16&255,o=t>>8&255,i=Math.round((t&255)/255*100)/100;return[n,r,o,i]}throw new Error(`unknown hex color: ${e}`)},Iq=XNe;var{round:kq}=Math,KNe=(...e)=>{let[t,n,r,o]=br(e,"rgba"),i=B_(e)||"auto";o===void 0&&(o=1),i==="auto"&&(i=o<1?"rgba":"rgb"),t=kq(t),n=kq(n),r=kq(r);let y="000000"+(t<<16|n<<8|r).toString(16);y=y.substr(y.length-6);let _="0"+kq(o*255).toString(16);switch(_=_.substr(_.length-2),i.toLowerCase()){case"rgba":return`#${y}${_}`;case"argb":return`#${_}${y}`;default:return`#${y}`}},Pq=KNe;kt.prototype.hex=function(e){return Pq(this._rgb,e)};on.hex=(...e)=>new kt(...e,"hex");Jr.format.hex=Iq;Jr.autodetect.push({p:4,test:(e,...t)=>{if(!t.length&&$r(e)==="string"&&[3,4,5,6,7,8,9].indexOf(e.length)>=0)return"hex"}});var{cos:xj}=Math,YNe=(...e)=>{e=br(e,"hsi");let[t,n,r]=e,o,i,d;return isNaN(t)&&(t=0),isNaN(n)&&(n=0),t>360&&(t-=360),t<0&&(t+=360),t/=360,t<1/3?(d=(1-n)/3,o=(1+n*xj(Vy*t)/xj(_q-Vy*t))/3,i=1-(d+o)):t<2/3?(t-=1/3,o=(1-n)/3,i=(1+n*xj(Vy*t)/xj(_q-Vy*t))/3,d=1-(o+i)):(t-=2/3,i=(1-n)/3,d=(1+n*xj(Vy*t)/xj(_q-Vy*t))/3,o=1-(i+d)),o=s4(r*o*3),i=s4(r*i*3),d=s4(r*d*3),[o*255,i*255,d*255,e.length>3?e[3]:1]},obe=YNe;var{min:QNe,sqrt:ZNe,acos:eLe}=Math,tLe=(...e)=>{let[t,n,r]=br(e,"rgb");t/=255,n/=255,r/=255;let o,i=QNe(t,n,r),d=(t+n+r)/3,y=d>0?1-i/d:0;return y===0?o=NaN:(o=(t-n+(t-r))/2,o/=ZNe((t-n)*(t-n)+(t-r)*(n-r)),o=eLe(o),r>n&&(o=Vy-o),o/=Vy),[o*360,y,d]},ibe=tLe;kt.prototype.hsi=function(){return ibe(this._rgb)};on.hsi=(...e)=>new kt(...e,"hsi");Jr.format.hsi=obe;Jr.autodetect.push({p:2,test:(...e)=>{if(e=br(e,"hsi"),$r(e)==="array"&&e.length===3)return"hsi"}});kt.prototype.hsl=function(){return Eq(this._rgb)};on.hsl=(...e)=>new kt(...e,"hsl");Jr.format.hsl=zA;Jr.autodetect.push({p:2,test:(...e)=>{if(e=br(e,"hsl"),$r(e)==="array"&&e.length===3)return"hsl"}});var{floor:rLe}=Math,nLe=(...e)=>{e=br(e,"hsv");let[t,n,r]=e,o,i,d;if(r*=255,n===0)o=i=d=r;else{t===360&&(t=0),t>360&&(t-=360),t<0&&(t+=360),t/=60;let y=rLe(t),_=t-y,k=r*(1-n),T=r*(1-n*_),N=r*(1-n*(1-_));switch(y){case 0:[o,i,d]=[r,N,k];break;case 1:[o,i,d]=[T,r,k];break;case 2:[o,i,d]=[k,r,N];break;case 3:[o,i,d]=[k,T,r];break;case 4:[o,i,d]=[N,k,r];break;case 5:[o,i,d]=[r,k,T];break}}return[o,i,d,e.length>3?e[3]:1]},abe=nLe;var{min:oLe,max:iLe}=Math,aLe=(...e)=>{e=br(e,"rgb");let[t,n,r]=e,o=oLe(t,n,r),i=iLe(t,n,r),d=i-o,y,_,k;return k=i/255,i===0?(y=Number.NaN,_=0):(_=d/i,t===i&&(y=(n-r)/d),n===i&&(y=2+(r-t)/d),r===i&&(y=4+(t-n)/d),y*=60,y<0&&(y+=360)),[y,_,k]},sbe=aLe;kt.prototype.hsv=function(){return sbe(this._rgb)};on.hsv=(...e)=>new kt(...e,"hsv");Jr.format.hsv=abe;Jr.autodetect.push({p:2,test:(...e)=>{if(e=br(e,"hsv"),$r(e)==="array"&&e.length===3)return"hsv"}});var zc={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452};var{pow:sLe}=Math,lLe=(...e)=>{e=br(e,"lab");let[t,n,r]=e,o,i,d,y,_,k;return i=(t+16)/116,o=isNaN(n)?i:i+n/500,d=isNaN(r)?i:i-r/200,i=zc.Yn*Dee(i),o=zc.Xn*Dee(o),d=zc.Zn*Dee(d),y=Ree(3.2404542*o-1.5371385*i-.4985314*d),_=Ree(-.969266*o+1.8760108*i+.041556*d),k=Ree(.0556434*o-.2040259*i+1.0572252*d),[y,_,k,e.length>3?e[3]:1]},Ree=e=>255*(e<=.00304?12.92*e:1.055*sLe(e,1/2.4)-.055),Dee=e=>e>zc.t1?e*e*e:zc.t2*(e-zc.t0),jq=lLe;var{pow:lbe}=Math,uLe=(...e)=>{let[t,n,r]=br(e,"rgb"),[o,i,d]=cLe(t,n,r),y=116*i-16;return[y<0?0:y,500*(o-i),200*(i-d)]},zee=e=>(e/=255)<=.04045?e/12.92:lbe((e+.055)/1.055,2.4),Nee=e=>e>zc.t3?lbe(e,1/3):e/zc.t2+zc.t0,cLe=(e,t,n)=>{e=zee(e),t=zee(t),n=zee(n);let r=Nee((.4124564*e+.3575761*t+.1804375*n)/zc.Xn),o=Nee((.2126729*e+.7151522*t+.072175*n)/zc.Yn),i=Nee((.0193339*e+.119192*t+.9503041*n)/zc.Zn);return[r,o,i]},Cq=uLe;kt.prototype.lab=function(){return Cq(this._rgb)};on.lab=(...e)=>new kt(...e,"lab");Jr.format.lab=jq;Jr.autodetect.push({p:2,test:(...e)=>{if(e=br(e,"lab"),$r(e)==="array"&&e.length===3)return"lab"}});var{sin:fLe,cos:pLe}=Math,dLe=(...e)=>{let[t,n,r]=br(e,"lch");return isNaN(r)&&(r=0),r=r*Bye,[t,pLe(r)*n,fLe(r)*n]},Tq=dLe;var hLe=(...e)=>{e=br(e,"lch");let[t,n,r]=e,[o,i,d]=Tq(t,n,r),[y,_,k]=jq(o,i,d);return[y,_,k,e.length>3?e[3]:1]},Aq=hLe;var mLe=(...e)=>{let t=br(e,"hcl").reverse();return Aq(...t)},ube=mLe;var{sqrt:vLe,atan2:gLe,round:yLe}=Math,bLe=(...e)=>{let[t,n,r]=br(e,"lab"),o=vLe(n*n+r*r),i=(gLe(r,n)*Wye+360)%360;return yLe(o*1e4)===0&&(i=Number.NaN),[t,o,i]},Mq=bLe;var wLe=(...e)=>{let[t,n,r]=br(e,"rgb"),[o,i,d]=Cq(t,n,r);return Mq(o,i,d)},Lee=wLe;kt.prototype.lch=function(){return Lee(this._rgb)};kt.prototype.hcl=function(){return Lee(this._rgb).reverse()};on.lch=(...e)=>new kt(...e,"lch");on.hcl=(...e)=>new kt(...e,"hcl");Jr.format.lch=Aq;Jr.format.hcl=ube;["lch","hcl"].forEach(e=>Jr.autodetect.push({p:2,test:(...t)=>{if(t=br(t,e),$r(t)==="array"&&t.length===3)return e}}));var OLe={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},xE=OLe;kt.prototype.name=function(){let e=Pq(this._rgb,"rgb");for(let t of Object.keys(xE))if(xE[t]===e)return t.toLowerCase();return e};Jr.format.named=e=>{if(e=e.toLowerCase(),xE[e])return Iq(xE[e]);throw new Error("unknown color name: "+e)};Jr.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&$r(e)==="string"&&xE[e.toLowerCase()])return"named"}});var xLe=e=>{if($r(e)=="number"&&e>=0&&e<=16777215){let t=e>>16,n=e>>8&255,r=e&255;return[t,n,r,1]}throw new Error("unknown num color: "+e)},cbe=xLe;var _Le=(...e)=>{let[t,n,r]=br(e,"rgb");return(t<<16)+(n<<8)+r},fbe=_Le;kt.prototype.num=function(){return fbe(this._rgb)};on.num=(...e)=>new kt(...e,"num");Jr.format.num=cbe;Jr.autodetect.push({p:5,test:(...e)=>{if(e.length===1&&$r(e[0])==="number"&&e[0]>=0&&e[0]<=16777215)return"num"}});var{round:pbe}=Math;kt.prototype.rgb=function(e=!0){return e===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(pbe)};kt.prototype.rgba=function(e=!0){return this._rgb.slice(0,4).map((t,n)=>n<3?e===!1?t:pbe(t):t)};on.rgb=(...e)=>new kt(...e,"rgb");Jr.format.rgb=(...e)=>{let t=br(e,"rgba");return t[3]===void 0&&(t[3]=1),t};Jr.autodetect.push({p:3,test:(...e)=>{if(e=br(e,"rgba"),$r(e)==="array"&&(e.length===3||e.length===4&&$r(e[3])=="number"&&e[3]>=0&&e[3]<=1))return"rgb"}});var{log:Rq}=Math,SLe=e=>{let t=e/100,n,r,o;return t<66?(n=255,r=t<6?0:-155.25485562709179-.44596950469579133*(r=t-2)+104.49216199393888*Rq(r),o=t<20?0:-254.76935184120902+.8274096064007395*(o=t-10)+115.67994401066147*Rq(o)):(n=351.97690566805693+.114206453784165*(n=t-55)-40.25366309332127*Rq(n),r=325.4494125711974+.07943456536662342*(r=t-50)-28.0852963507957*Rq(r),o=255),[n,r,o,1]},Dq=SLe;var{round:ELe}=Math,ILe=(...e)=>{let t=br(e,"rgb"),n=t[0],r=t[2],o=1e3,i=4e4,d=.4,y;for(;i-o>d;){y=(i+o)*.5;let _=Dq(y);_[2]/_[0]>=r/n?i=y:o=y}return ELe(y)},dbe=ILe;kt.prototype.temp=kt.prototype.kelvin=kt.prototype.temperature=function(){return dbe(this._rgb)};on.temp=on.kelvin=on.temperature=(...e)=>new kt(...e,"temp");Jr.format.temp=Jr.format.kelvin=Jr.format.temperature=Dq;var{pow:zq,sign:kLe}=Math,PLe=(...e)=>{e=br(e,"lab");let[t,n,r]=e,o=zq(t+.3963377774*n+.2158037573*r,3),i=zq(t-.1055613458*n-.0638541728*r,3),d=zq(t-.0894841775*n-1.291485548*r,3);return[255*Fee(4.0767416621*o-3.3077115913*i+.2309699292*d),255*Fee(-1.2684380046*o+2.6097574011*i-.3413193965*d),255*Fee(-.0041960863*o-.7034186147*i+1.707614701*d),e.length>3?e[3]:1]},Nq=PLe;function Fee(e){let t=Math.abs(e);return t>.0031308?(kLe(e)||1)*(1.055*zq(t,1/2.4)-.055):e*12.92}var{cbrt:Bee,pow:jLe,sign:CLe}=Math,TLe=(...e)=>{let[t,n,r]=br(e,"rgb"),[o,i,d]=[Wee(t/255),Wee(n/255),Wee(r/255)],y=Bee(.4122214708*o+.5363325363*i+.0514459929*d),_=Bee(.2119034982*o+.6806995451*i+.1073969566*d),k=Bee(.0883024619*o+.2817188376*i+.6299787005*d);return[.2104542553*y+.793617785*_-.0040720468*k,1.9779984951*y-2.428592205*_+.4505937099*k,.0259040371*y+.7827717662*_-.808675766*k]},Lq=TLe;function Wee(e){let t=Math.abs(e);return t<.04045?e/12.92:(CLe(e)||1)*jLe((t+.055)/1.055,2.4)}kt.prototype.oklab=function(){return Lq(this._rgb)};on.oklab=(...e)=>new kt(...e,"oklab");Jr.format.oklab=Nq;Jr.autodetect.push({p:3,test:(...e)=>{if(e=br(e,"oklab"),$r(e)==="array"&&e.length===3)return"oklab"}});var ALe=(...e)=>{e=br(e,"lch");let[t,n,r]=e,[o,i,d]=Tq(t,n,r),[y,_,k]=Nq(o,i,d);return[y,_,k,e.length>3?e[3]:1]},hbe=ALe;var MLe=(...e)=>{let[t,n,r]=br(e,"rgb"),[o,i,d]=Lq(t,n,r);return Mq(o,i,d)},mbe=MLe;kt.prototype.oklch=function(){return mbe(this._rgb)};on.oklch=(...e)=>new kt(...e,"oklch");Jr.format.oklch=hbe;Jr.autodetect.push({p:3,test:(...e)=>{if(e=br(e,"oklch"),$r(e)==="array"&&e.length===3)return"oklch"}});kt.prototype.alpha=function(e,t=!1){return e!==void 0&&$r(e)==="number"?t?(this._rgb[3]=e,this):new kt([this._rgb[0],this._rgb[1],this._rgb[2],e],"rgb"):this._rgb[3]};kt.prototype.clipped=function(){return this._rgb._clipped||!1};kt.prototype.darken=function(e=1){let t=this,n=t.lab();return n[0]-=zc.Kn*e,new kt(n,"lab").alpha(t.alpha(),!0)};kt.prototype.brighten=function(e=1){return this.darken(-e)};kt.prototype.darker=kt.prototype.darken;kt.prototype.brighter=kt.prototype.brighten;kt.prototype.get=function(e){let[t,n]=e.split("."),r=this[t]();if(n){let o=t.indexOf(n)-(t.substr(0,2)==="ok"?2:0);if(o>-1)return r[o];throw new Error(`unknown channel ${n} in mode ${t}`)}else return r};var{pow:RLe}=Math,DLe=1e-7,zLe=20;kt.prototype.luminance=function(e,t="rgb"){if(e!==void 0&&$r(e)==="number"){if(e===0)return new kt([0,0,0,this._rgb[3]],"rgb");if(e===1)return new kt([255,255,255,this._rgb[3]],"rgb");let n=this.luminance(),r=zLe,o=(d,y)=>{let _=d.interpolate(y,.5,t),k=_.luminance();return Math.abs(e-k)e?o(d,_):o(_,y)},i=(n>e?o(new kt([0,0,0]),this):o(this,new kt([255,255,255]))).rgb();return new kt([...i,this._rgb[3]])}return NLe(...this._rgb.slice(0,3))};var NLe=(e,t,n)=>(e=Hee(e),t=Hee(t),n=Hee(n),.2126*e+.7152*t+.0722*n),Hee=e=>(e/=255,e<=.03928?e/12.92:RLe((e+.055)/1.055,2.4));var oa={};var _E=(e,t,n=.5,...r)=>{let o=r[0]||"lrgb";if(!oa[o]&&!r.length&&(o=Object.keys(oa)[0]),!oa[o])throw new Error(`interpolation mode ${o} is not defined`);return $r(e)!=="object"&&(e=new kt(e)),$r(t)!=="object"&&(t=new kt(t)),oa[o](e,t,n).alpha(e.alpha()+n*(t.alpha()-e.alpha()))};kt.prototype.mix=kt.prototype.interpolate=function(e,t=.5,...n){return _E(this,e,t,...n)};kt.prototype.premultiply=function(e=!1){let t=this._rgb,n=t[3];return e?(this._rgb=[t[0]*n,t[1]*n,t[2]*n,n],this):new kt([t[0]*n,t[1]*n,t[2]*n,n],"rgb")};kt.prototype.saturate=function(e=1){let t=this,n=t.lch();return n[1]+=zc.Kn*e,n[1]<0&&(n[1]=0),new kt(n,"lch").alpha(t.alpha(),!0)};kt.prototype.desaturate=function(e=1){return this.saturate(-e)};kt.prototype.set=function(e,t,n=!1){let[r,o]=e.split("."),i=this[r]();if(o){let d=r.indexOf(o)-(r.substr(0,2)==="ok"?2:0);if(d>-1){if($r(t)=="string")switch(t.charAt(0)){case"+":i[d]+=+t;break;case"-":i[d]+=+t;break;case"*":i[d]*=+t.substr(1);break;case"/":i[d]/=+t.substr(1);break;default:i[d]=+t}else if($r(t)==="number")i[d]=t;else throw new Error("unsupported value for Color.set");let y=new kt(i,r);return n?(this._rgb=y._rgb,this):y}throw new Error(`unknown channel ${o} in mode ${r}`)}else return i};kt.prototype.tint=function(e=.5,...t){return _E(this,"white",e,...t)};kt.prototype.shade=function(e=.5,...t){return _E(this,"black",e,...t)};var LLe=(e,t,n)=>{let r=e._rgb,o=t._rgb;return new kt(r[0]+n*(o[0]-r[0]),r[1]+n*(o[1]-r[1]),r[2]+n*(o[2]-r[2]),"rgb")};oa.rgb=LLe;var{sqrt:$ee,pow:_j}=Math,FLe=(e,t,n)=>{let[r,o,i]=e._rgb,[d,y,_]=t._rgb;return new kt($ee(_j(r,2)*(1-n)+_j(d,2)*n),$ee(_j(o,2)*(1-n)+_j(y,2)*n),$ee(_j(i,2)*(1-n)+_j(_,2)*n),"rgb")};oa.lrgb=FLe;var BLe=(e,t,n)=>{let r=e.lab(),o=t.lab();return new kt(r[0]+n*(o[0]-r[0]),r[1]+n*(o[1]-r[1]),r[2]+n*(o[2]-r[2]),"lab")};oa.lab=BLe;var qy=(e,t,n,r)=>{let o,i;r==="hsl"?(o=e.hsl(),i=t.hsl()):r==="hsv"?(o=e.hsv(),i=t.hsv()):r==="hcg"?(o=e.hcg(),i=t.hcg()):r==="hsi"?(o=e.hsi(),i=t.hsi()):r==="lch"||r==="hcl"?(r="hcl",o=e.hcl(),i=t.hcl()):r==="oklch"&&(o=e.oklch().reverse(),i=t.oklch().reverse());let d,y,_,k,T,N;(r.substr(0,1)==="h"||r==="oklch")&&([d,_,T]=o,[y,k,N]=i);let L,Y,q,K;return!isNaN(d)&&!isNaN(y)?(y>d&&y-d>180?K=y-(d+360):y180?K=y+360-d:K=y-d,Y=d+n*K):isNaN(d)?isNaN(y)?Y=Number.NaN:(Y=y,(T==1||T==0)&&r!="hsv"&&(L=k)):(Y=d,(N==1||N==0)&&r!="hsv"&&(L=_)),L===void 0&&(L=_+n*(k-_)),q=T+n*(N-T),r==="oklch"?new kt([q,L,Y],r):new kt([Y,L,q],r)};var vbe=(e,t,n)=>qy(e,t,n,"lch");oa.lch=vbe;oa.hcl=vbe;var WLe=(e,t,n)=>{let r=e.num(),o=t.num();return new kt(r+n*(o-r),"num")};oa.num=WLe;var HLe=(e,t,n)=>qy(e,t,n,"hcg");oa.hcg=HLe;var $Le=(e,t,n)=>qy(e,t,n,"hsi");oa.hsi=$Le;var VLe=(e,t,n)=>qy(e,t,n,"hsl");oa.hsl=VLe;var qLe=(e,t,n)=>qy(e,t,n,"hsv");oa.hsv=qLe;var ULe=(e,t,n)=>{let r=e.oklab(),o=t.oklab();return new kt(r[0]+n*(o[0]-r[0]),r[1]+n*(o[1]-r[1]),r[2]+n*(o[2]-r[2]),"oklab")};oa.oklab=ULe;var GLe=(e,t,n)=>qy(e,t,n,"oklch");oa.oklch=GLe;var{pow:Vee,sqrt:qee,PI:Uee,cos:gbe,sin:ybe,atan2:JLe}=Math,bbe=(e,t="lrgb",n=null)=>{let r=e.length;n||(n=Array.from(new Array(r)).map(()=>1));let o=r/n.reduce(function(N,L){return N+L});if(n.forEach((N,L)=>{n[L]*=o}),e=e.map(N=>new kt(N)),t==="lrgb")return XLe(e,n);let i=e.shift(),d=i.get(t),y=[],_=0,k=0;for(let N=0;N{let Y=N.get(t);T+=N.alpha()*n[L+1];for(let q=0;q=360;)L-=360;d[N]=L}else d[N]=d[N]/y[N];return T/=r,new kt(d,t).alpha(T>.99999?1:T,!0)},XLe=(e,t)=>{let n=e.length,r=[0,0,0,0];for(let o=0;o.9999999&&(r[3]=1),new kt(pk(r))};var{pow:KLe}=Math;function dk(e){let t="rgb",n=on("#ccc"),r=0,o=[0,1],i=[],d=[0,0],y=!1,_=[],k=!1,T=0,N=1,L=!1,Y={},q=!0,K=1,U=function(ae){if(ae=ae||["#fff","#000"],ae&&$r(ae)==="string"&&on.brewer&&on.brewer[ae.toLowerCase()]&&(ae=on.brewer[ae.toLowerCase()]),$r(ae)==="array"){ae.length===1&&(ae=[ae[0],ae[0]]),ae=ae.slice(0);for(let Pe=0;Pe=y[Ne];)Ne++;return Ne-1}return 0},Z=ae=>ae,fe=ae=>ae,me=function(ae,Pe){let Ne,Ye;if(Pe==null&&(Pe=!1),isNaN(ae)||ae===null)return n;Pe?Ye=ae:y&&y.length>2?Ye=X(ae)/(y.length-2):N!==T?Ye=(ae-T)/(N-T):Ye=1,Ye=fe(Ye),Pe||(Ye=Z(Ye)),K!==1&&(Ye=KLe(Ye,K)),Ye=d[0]+Ye*(1-d[0]-d[1]),Ye=s4(Ye,0,1);let Je=Math.floor(Ye*1e4);if(q&&Y[Je])Ne=Y[Je];else{if($r(_)==="array")for(let Me=0;Me=Ve&&Me===i.length-1){Ne=_[Me];break}if(Ye>Ve&&YeY={};U(e);let ge=function(ae){let Pe=on(me(ae));return k&&Pe[k]?Pe[k]():Pe};return ge.classes=function(ae){if(ae!=null){if($r(ae)==="array")y=ae,o=[ae[0],ae[ae.length-1]];else{let Pe=on.analyze(o);ae===0?y=[Pe.min,Pe.max]:y=on.limits(Pe,"e",ae)}return ge}return y},ge.domain=function(ae){if(!arguments.length)return o;T=ae[0],N=ae[ae.length-1],i=[];let Pe=_.length;if(ae.length===Pe&&T!==N)for(let Ne of Array.from(ae))i.push((Ne-T)/(N-T));else{for(let Ne=0;Ne2){let Ne=ae.map((Je,Me)=>Me/(ae.length-1)),Ye=ae.map(Je=>(Je-T)/(N-T));Ye.every((Je,Me)=>Ne[Me]===Je)||(fe=Je=>{if(Je<=0||Je>=1)return Je;let Me=0;for(;Je>=Ye[Me+1];)Me++;let Ve=(Je-Ye[Me])/(Ye[Me+1]-Ye[Me]);return Ne[Me]+Ve*(Ne[Me+1]-Ne[Me])})}}return o=[T,N],ge},ge.mode=function(ae){return arguments.length?(t=ae,ye(),ge):t},ge.range=function(ae,Pe){return U(ae,Pe),ge},ge.out=function(ae){return k=ae,ge},ge.spread=function(ae){return arguments.length?(r=ae,ge):r},ge.correctLightness=function(ae){return ae==null&&(ae=!0),L=ae,ye(),L?Z=function(Pe){let Ne=me(0,!0).lab()[0],Ye=me(1,!0).lab()[0],Je=Ne>Ye,Me=me(Pe,!0).lab()[0],Ve=Ne+(Ye-Ne)*Pe,Ue=Me-Ve,ht=0,yt=1,Mt=20;for(;Math.abs(Ue)>.01&&Mt-- >0;)(function(){return Je&&(Ue*=-1),Ue<0?(ht=Pe,Pe+=(yt-Pe)*.5):(yt=Pe,Pe+=(ht-Pe)*.5),Me=me(Pe,!0).lab()[0],Ue=Me-Ve})();return Pe}:Z=Pe=>Pe,ge},ge.padding=function(ae){return ae!=null?($r(ae)==="number"&&(ae=[ae,ae]),d=ae,ge):d},ge.colors=function(ae,Pe){arguments.length<2&&(Pe="hex");let Ne=[];if(arguments.length===0)Ne=_.slice(0);else if(ae===1)Ne=[ge(.5)];else if(ae>1){let Ye=o[0],Je=o[1]-Ye;Ne=YLe(0,ae,!1).map(Me=>ge(Ye+Me/(ae-1)*Je))}else{e=[];let Ye=[];if(y&&y.length>2)for(let Je=1,Me=y.length,Ve=1<=Me;Ve?JeMe;Ve?Je++:Je--)Ye.push((y[Je-1]+y[Je])*.5);else Ye=o;Ne=Ye.map(Je=>ge(Je))}return on[Pe]&&(Ne=Ne.map(Ye=>Ye[Pe]())),Ne},ge.cache=function(ae){return ae!=null?(q=ae,ge):q},ge.gamma=function(ae){return ae!=null?(K=ae,ge):K},ge.nodata=function(ae){return ae!=null?(n=on(ae),ge):n},ge}function YLe(e,t,n){let r=[],o=ei;o?d++:d--)r.push(d);return r}var QLe=function(e){let t=[1,1];for(let n=1;nnew kt(i)),e.length===2)[n,r]=e.map(i=>i.lab()),t=function(i){let d=[0,1,2].map(y=>n[y]+i*(r[y]-n[y]));return new kt(d,"lab")};else if(e.length===3)[n,r,o]=e.map(i=>i.lab()),t=function(i){let d=[0,1,2].map(y=>(1-i)*(1-i)*n[y]+2*(1-i)*i*r[y]+i*i*o[y]);return new kt(d,"lab")};else if(e.length===4){let i;[n,r,o,i]=e.map(d=>d.lab()),t=function(d){let y=[0,1,2].map(_=>(1-d)*(1-d)*(1-d)*n[_]+3*(1-d)*(1-d)*d*r[_]+3*(1-d)*d*d*o[_]+d*d*d*i[_]);return new kt(y,"lab")}}else if(e.length>=5){let i,d,y;i=e.map(_=>_.lab()),y=e.length-1,d=QLe(y),t=function(_){let k=1-_,T=[0,1,2].map(N=>i.reduce((L,Y,q)=>L+d[q]*k**(y-q)*_**q*Y[N],0));return new kt(T,"lab")}}else throw new RangeError("No point in running bezier with only one color.");return t},wbe=e=>{let t=ZLe(e);return t.scale=()=>dk(t),t};var C3=(e,t,n)=>{if(!C3[n])throw new Error("unknown blend mode "+n);return C3[n](e,t)},SE=e=>(t,n)=>{let r=on(n).rgb(),o=on(t).rgb();return on.rgb(e(r,o))},EE=e=>(t,n)=>{let r=[];return r[0]=e(t[0],n[0]),r[1]=e(t[1],n[1]),r[2]=e(t[2],n[2]),r},eFe=e=>e,tFe=(e,t)=>e*t/255,rFe=(e,t)=>e>t?t:e,nFe=(e,t)=>e>t?e:t,oFe=(e,t)=>255*(1-(1-e/255)*(1-t/255)),iFe=(e,t)=>t<128?2*e*t/255:255*(1-2*(1-e/255)*(1-t/255)),aFe=(e,t)=>255*(1-(1-t/255)/(e/255)),sFe=(e,t)=>e===255?255:(e=255*(t/255)/(1-e/255),e>255?255:e);C3.normal=SE(EE(eFe));C3.multiply=SE(EE(tFe));C3.screen=SE(EE(oFe));C3.overlay=SE(EE(iFe));C3.darken=SE(EE(rFe));C3.lighten=SE(EE(nFe));C3.dodge=SE(EE(sFe));C3.burn=SE(EE(aFe));var Obe=C3;var{pow:lFe,sin:uFe,cos:cFe}=Math;function xbe(e=300,t=-1.5,n=1,r=1,o=[0,1]){let i=0,d;$r(o)==="array"?d=o[1]-o[0]:(d=0,o=[o,o]);let y=function(_){let k=Vy*((e+120)/360+t*_),T=lFe(o[0]+d*_,r),L=(i!==0?n[0]+_*i:n)*T*(1-T)/2,Y=cFe(k),q=uFe(k),K=T+L*(-.14861*Y+1.78277*q),U=T+L*(-.29227*Y-.90649*q),X=T+L*(1.97294*Y);return on(pk([K*255,U*255,X*255,1]))};return y.start=function(_){return _==null?e:(e=_,y)},y.rotations=function(_){return _==null?t:(t=_,y)},y.gamma=function(_){return _==null?r:(r=_,y)},y.hue=function(_){return _==null?n:(n=_,$r(n)==="array"?(i=n[1]-n[0],i===0&&(n=n[1])):i=0,y)},y.lightness=function(_){return _==null?o:($r(_)==="array"?(o=_,d=_[1]-_[0]):(o=[_,_],d=0),y)},y.scale=()=>on.scale(y),y.hue(n),y}var fFe="0123456789abcdef",{floor:pFe,random:dFe}=Math,_be=()=>{let e="#";for(let t=0;t<6;t++)e+=fFe.charAt(pFe(dFe()*16));return new kt(e,"hex")};var{log:Sbe,pow:hFe,floor:mFe,abs:vFe}=Math;function Gee(e,t=null){let n={min:Number.MAX_VALUE,max:Number.MAX_VALUE*-1,sum:0,values:[],count:0};return $r(e)==="object"&&(e=Object.values(e)),e.forEach(r=>{t&&$r(r)==="object"&&(r=r[t]),r!=null&&!isNaN(r)&&(n.values.push(r),n.sum+=r,rn.max&&(n.max=r),n.count+=1)}),n.domain=[n.min,n.max],n.limits=(r,o)=>Jee(n,r,o),n}function Jee(e,t="equal",n=7){$r(e)=="array"&&(e=Gee(e));let{min:r,max:o}=e,i=e.values.sort((y,_)=>y-_);if(n===1)return[r,o];let d=[];if(t.substr(0,1)==="c"&&(d.push(r),d.push(o)),t.substr(0,1)==="e"){d.push(r);for(let y=1;y 0");let y=Math.LOG10E*Sbe(r),_=Math.LOG10E*Sbe(o);d.push(r);for(let k=1;k200&&(N=!1)}let q={};for(let U=0;UU-X),d.push(K[0]);for(let U=1;U{e=new kt(e),t=new kt(t);let n=e.luminance(),r=t.luminance();return n>r?(n+.05)/(r+.05):(r+.05)/(n+.05)};var{sqrt:W_,pow:hu,min:gFe,max:yFe,atan2:Ibe,abs:kbe,cos:Fq,sin:Pbe,exp:bFe,PI:jbe}=Math;function Cbe(e,t,n=1,r=1,o=1){var i=function(Pt){return 360*Pt/(2*jbe)},d=function(Pt){return 2*jbe*Pt/360};e=new kt(e),t=new kt(t);let[y,_,k]=Array.from(e.lab()),[T,N,L]=Array.from(t.lab()),Y=(y+T)/2,q=W_(hu(_,2)+hu(k,2)),K=W_(hu(N,2)+hu(L,2)),U=(q+K)/2,X=.5*(1-W_(hu(U,7)/(hu(U,7)+hu(25,7)))),Z=_*(1+X),fe=N*(1+X),me=W_(hu(Z,2)+hu(k,2)),ye=W_(hu(fe,2)+hu(L,2)),ge=(me+ye)/2,ae=i(Ibe(k,Z)),Pe=i(Ibe(L,fe)),Ne=ae>=0?ae:ae+360,Ye=Pe>=0?Pe:Pe+360,Je=kbe(Ne-Ye)>180?(Ne+Ye+360)/2:(Ne+Ye)/2,Me=1-.17*Fq(d(Je-30))+.24*Fq(d(2*Je))+.32*Fq(d(3*Je+6))-.2*Fq(d(4*Je-63)),Ve=Ye-Ne;Ve=kbe(Ve)<=180?Ve:Ye<=Ne?Ve+360:Ve-360,Ve=2*W_(me*ye)*Pbe(d(Ve)/2);let Ue=T-y,ht=ye-me,yt=1+.015*hu(Y-50,2)/W_(20+hu(Y-50,2)),Mt=1+.045*ge,wt=1+.015*ge*Me,_t=30*bFe(-hu((Je-275)/25,2)),Rt=-(2*W_(hu(ge,7)/(hu(ge,7)+hu(25,7))))*Pbe(2*d(_t)),sr=W_(hu(Ue/(n*yt),2)+hu(ht/(r*Mt),2)+hu(Ve/(o*wt),2)+Rt*(ht/(r*Mt))*(Ve/(o*wt)));return yFe(0,gFe(100,sr))}function Tbe(e,t,n="lab"){e=new kt(e),t=new kt(t);let r=e.get(n),o=t.get(n),i=0;for(let d in r){let y=(r[d]||0)-(o[d]||0);i+=y*y}return Math.sqrt(i)}var Abe=(...e)=>{try{return new kt(...e),!0}catch{return!1}};var Mbe={cool(){return dk([on.hsl(180,1,.9),on.hsl(250,.7,.4)])},hot(){return dk(["#000","#f00","#ff0","#fff"],[0,.25,.75,1]).mode("rgb")}};var Bq={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]};for(let e of Object.keys(Bq))Bq[e.toLowerCase()]=Bq[e];var Rbe=Bq;Object.assign(on,{average:bbe,bezier:wbe,blend:Obe,cubehelix:xbe,mix:_E,interpolate:_E,random:_be,scale:dk,analyze:Gee,contrast:Ebe,deltaE:Cbe,distance:Tbe,limits:Jee,valid:Abe,scales:Mbe,input:Jr,colors:xE,brewer:Rbe});var pa=on;var Dbe="#EBEFF5";function Sj(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:10,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,o=e.slice(),i=[],d=t%2===0,y=n?Math.ceil(t/2)+(d?1:0):t,_=n?Math.ceil(t/2)+(d?1:0):0;if(o.length===1&&o.unshift(Dbe),n){o.length<3&&(o[2]=o[1],o[1]=Dbe);var k=Math.ceil(o.length/2),T=o.filter(function(K,U){if(Ue.length)&&(t=e.length);for(var n=0,r=new Array(t);nwj(Oj(t,e),n);var pk=e=>{e._clipped=!1,e._unclipped=e.slice(0);for(let t=0;t<=3;t++)t<3?((e[t]<0||e[t]>255)&&(e._clipped=!0),e[t]=s4(e[t],0,255)):t===3&&(e[t]=s4(e[t],0,1));return e};var Fye={};for(let e of["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"])Fye[`[object ${e}]`]=e.toLowerCase();function $r(e){return Fye[Object.prototype.toString.call(e)]||"object"}var br=(e,t=null)=>e.length>=3?Array.prototype.slice.call(e):$r(e[0])=="object"&&t?t.split("").filter(n=>e[0][n]!==void 0).map(n=>e[0][n]):e[0];var B_=e=>{if(e.length<2)return null;let t=e.length-1;return $r(e[t])=="string"?e[t].toLowerCase():null};var{PI:xq,min:wj,max:Oj}=Math,Vy=xq*2,_q=xq/3,Bye=xq/180,Wye=180/xq;var Jr={format:{},autodetect:[]};var jee=class{constructor(...t){let n=this;if($r(t[0])==="object"&&t[0].constructor&&t[0].constructor===this.constructor)return t[0];let r=B_(t),o=!1;if(!r){o=!0,Jr.sorted||(Jr.autodetect=Jr.autodetect.sort((i,d)=>d.p-i.p),Jr.sorted=!0);for(let i of Jr.autodetect)if(r=i.test(...t),r)break}if(Jr.format[r]){let i=Jr.format[r].apply(null,o?t:t.slice(0,-1));n._rgb=pk(i)}else throw new Error("unknown format: "+t);n._rgb.length===3&&n._rgb.push(1)}toString(){return $r(this.hex)=="function"?this.hex():`[${this._rgb.join(",")}]`}},kt=jee;var Hye="2.6.0";var Sq=(...e)=>new Sq.Color(...e);Sq.Color=kt;Sq.version=Hye;var on=Sq;var LNe=(...e)=>{e=br(e,"cmyk");let[t,n,r,o]=e,i=e.length>4?e[4]:1;return o===1?[0,0,0,i]:[t>=1?0:255*(1-t)*(1-o),n>=1?0:255*(1-n)*(1-o),r>=1?0:255*(1-r)*(1-o),i]},$ye=LNe;var{max:Vye}=Math,FNe=(...e)=>{let[t,n,r]=br(e,"rgb");t=t/255,n=n/255,r=r/255;let o=1-Vye(t,Vye(n,r)),i=o<1?1/(1-o):0,d=(1-t-o)*i,y=(1-n-o)*i,_=(1-r-o)*i;return[d,y,_,o]},qye=FNe;kt.prototype.cmyk=function(){return qye(this._rgb)};on.cmyk=(...e)=>new kt(...e,"cmyk");Jr.format.cmyk=$ye;Jr.autodetect.push({p:2,test:(...e)=>{if(e=br(e,"cmyk"),$r(e)==="array"&&e.length===4)return"cmyk"}});var Cee=e=>Math.round(e*100)/100,BNe=(...e)=>{let t=br(e,"hsla"),n=B_(e)||"lsa";return t[0]=Cee(t[0]||0),t[1]=Cee(t[1]*100)+"%",t[2]=Cee(t[2]*100)+"%",n==="hsla"||t.length>3&&t[3]<1?(t[3]=t.length>3?t[3]:1,n="hsla"):t.length=3,`${n}(${t.join(",")})`},Uye=BNe;var WNe=(...e)=>{e=br(e,"rgba");let[t,n,r]=e;t/=255,n/=255,r/=255;let o=wj(t,n,r),i=Oj(t,n,r),d=(i+o)/2,y,_;return i===o?(y=0,_=Number.NaN):y=d<.5?(i-o)/(i+o):(i-o)/(2-i-o),t==i?_=(n-r)/(i-o):n==i?_=2+(r-t)/(i-o):r==i&&(_=4+(t-n)/(i-o)),_*=60,_<0&&(_+=360),e.length>3&&e[3]!==void 0?[_,y,d,e[3]]:[_,y,d]},Eq=WNe;var{round:Tee}=Math,HNe=(...e)=>{let t=br(e,"rgba"),n=B_(e)||"rgb";return n.substr(0,3)=="hsl"?Uye(Eq(t),n):(t[0]=Tee(t[0]),t[1]=Tee(t[1]),t[2]=Tee(t[2]),(n==="rgba"||t.length>3&&t[3]<1)&&(t[3]=t.length>3?t[3]:1,n="rgba"),`${n}(${t.slice(0,n==="rgb"?3:4).join(",")})`)},Gye=HNe;var{round:Aee}=Math,$Ne=(...e)=>{e=br(e,"hsl");let[t,n,r]=e,o,i,d;if(n===0)o=i=d=r*255;else{let y=[0,0,0],_=[0,0,0],k=r<.5?r*(1+n):r+n-r*n,T=2*r-k,N=t/360;y[0]=N+1/3,y[1]=N,y[2]=N-1/3;for(let L=0;L<3;L++)y[L]<0&&(y[L]+=1),y[L]>1&&(y[L]-=1),6*y[L]<1?_[L]=T+(k-T)*6*y[L]:2*y[L]<1?_[L]=k:3*y[L]<2?_[L]=T+(k-T)*(2/3-y[L])*6:_[L]=T;[o,i,d]=[Aee(_[0]*255),Aee(_[1]*255),Aee(_[2]*255)]}return e.length>3?[o,i,d,e[3]]:[o,i,d,1]},zA=$Ne;var Xye=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,Kye=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,Yye=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,Qye=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,Zye=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,ebe=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,{round:Jye}=Math,tbe=e=>{e=e.toLowerCase().trim();let t;if(Jr.format.named)try{return Jr.format.named(e)}catch{}if(t=e.match(Xye)){let n=t.slice(1,4);for(let r=0;r<3;r++)n[r]=+n[r];return n[3]=1,n}if(t=e.match(Kye)){let n=t.slice(1,5);for(let r=0;r<4;r++)n[r]=+n[r];return n}if(t=e.match(Yye)){let n=t.slice(1,4);for(let r=0;r<3;r++)n[r]=Jye(n[r]*2.55);return n[3]=1,n}if(t=e.match(Qye)){let n=t.slice(1,5);for(let r=0;r<3;r++)n[r]=Jye(n[r]*2.55);return n[3]=+n[3],n}if(t=e.match(Zye)){let n=t.slice(1,4);n[1]*=.01,n[2]*=.01;let r=zA(n);return r[3]=1,r}if(t=e.match(ebe)){let n=t.slice(1,4);n[1]*=.01,n[2]*=.01;let r=zA(n);return r[3]=+t[4],r}};tbe.test=e=>Xye.test(e)||Kye.test(e)||Yye.test(e)||Qye.test(e)||Zye.test(e)||ebe.test(e);var Mee=tbe;kt.prototype.css=function(e){return Gye(this._rgb,e)};on.css=(...e)=>new kt(...e,"css");Jr.format.css=Mee;Jr.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&$r(e)==="string"&&Mee.test(e))return"css"}});Jr.format.gl=(...e)=>{let t=br(e,"rgba");return t[0]*=255,t[1]*=255,t[2]*=255,t};on.gl=(...e)=>new kt(...e,"gl");kt.prototype.gl=function(){let e=this._rgb;return[e[0]/255,e[1]/255,e[2]/255,e[3]]};var{floor:VNe}=Math,qNe=(...e)=>{e=br(e,"hcg");let[t,n,r]=e,o,i,d;r=r*255;let y=n*255;if(n===0)o=i=d=r;else{t===360&&(t=0),t>360&&(t-=360),t<0&&(t+=360),t/=60;let _=VNe(t),k=t-_,T=r*(1-n),N=T+y*(1-k),L=T+y*k,Y=T+y;switch(_){case 0:[o,i,d]=[Y,L,T];break;case 1:[o,i,d]=[N,Y,T];break;case 2:[o,i,d]=[T,Y,L];break;case 3:[o,i,d]=[T,N,Y];break;case 4:[o,i,d]=[L,T,Y];break;case 5:[o,i,d]=[Y,T,N];break}}return[o,i,d,e.length>3?e[3]:1]},rbe=qNe;var UNe=(...e)=>{let[t,n,r]=br(e,"rgb"),o=wj(t,n,r),i=Oj(t,n,r),d=i-o,y=d*100/255,_=o/(255-d)*100,k;return d===0?k=Number.NaN:(t===i&&(k=(n-r)/d),n===i&&(k=2+(r-t)/d),r===i&&(k=4+(t-n)/d),k*=60,k<0&&(k+=360)),[k,y,_]},nbe=UNe;kt.prototype.hcg=function(){return nbe(this._rgb)};on.hcg=(...e)=>new kt(...e,"hcg");Jr.format.hcg=rbe;Jr.autodetect.push({p:1,test:(...e)=>{if(e=br(e,"hcg"),$r(e)==="array"&&e.length===3)return"hcg"}});var GNe=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,JNe=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,XNe=e=>{if(e.match(GNe)){(e.length===4||e.length===7)&&(e=e.substr(1)),e.length===3&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]);let t=parseInt(e,16),n=t>>16,r=t>>8&255,o=t&255;return[n,r,o,1]}if(e.match(JNe)){(e.length===5||e.length===9)&&(e=e.substr(1)),e.length===4&&(e=e.split(""),e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]);let t=parseInt(e,16),n=t>>24&255,r=t>>16&255,o=t>>8&255,i=Math.round((t&255)/255*100)/100;return[n,r,o,i]}throw new Error(`unknown hex color: ${e}`)},Iq=XNe;var{round:kq}=Math,KNe=(...e)=>{let[t,n,r,o]=br(e,"rgba"),i=B_(e)||"auto";o===void 0&&(o=1),i==="auto"&&(i=o<1?"rgba":"rgb"),t=kq(t),n=kq(n),r=kq(r);let y="000000"+(t<<16|n<<8|r).toString(16);y=y.substr(y.length-6);let _="0"+kq(o*255).toString(16);switch(_=_.substr(_.length-2),i.toLowerCase()){case"rgba":return`#${y}${_}`;case"argb":return`#${_}${y}`;default:return`#${y}`}},Pq=KNe;kt.prototype.hex=function(e){return Pq(this._rgb,e)};on.hex=(...e)=>new kt(...e,"hex");Jr.format.hex=Iq;Jr.autodetect.push({p:4,test:(e,...t)=>{if(!t.length&&$r(e)==="string"&&[3,4,5,6,7,8,9].indexOf(e.length)>=0)return"hex"}});var{cos:xj}=Math,YNe=(...e)=>{e=br(e,"hsi");let[t,n,r]=e,o,i,d;return isNaN(t)&&(t=0),isNaN(n)&&(n=0),t>360&&(t-=360),t<0&&(t+=360),t/=360,t<1/3?(d=(1-n)/3,o=(1+n*xj(Vy*t)/xj(_q-Vy*t))/3,i=1-(d+o)):t<2/3?(t-=1/3,o=(1-n)/3,i=(1+n*xj(Vy*t)/xj(_q-Vy*t))/3,d=1-(o+i)):(t-=2/3,i=(1-n)/3,d=(1+n*xj(Vy*t)/xj(_q-Vy*t))/3,o=1-(i+d)),o=s4(r*o*3),i=s4(r*i*3),d=s4(r*d*3),[o*255,i*255,d*255,e.length>3?e[3]:1]},obe=YNe;var{min:QNe,sqrt:ZNe,acos:eLe}=Math,tLe=(...e)=>{let[t,n,r]=br(e,"rgb");t/=255,n/=255,r/=255;let o,i=QNe(t,n,r),d=(t+n+r)/3,y=d>0?1-i/d:0;return y===0?o=NaN:(o=(t-n+(t-r))/2,o/=ZNe((t-n)*(t-n)+(t-r)*(n-r)),o=eLe(o),r>n&&(o=Vy-o),o/=Vy),[o*360,y,d]},ibe=tLe;kt.prototype.hsi=function(){return ibe(this._rgb)};on.hsi=(...e)=>new kt(...e,"hsi");Jr.format.hsi=obe;Jr.autodetect.push({p:2,test:(...e)=>{if(e=br(e,"hsi"),$r(e)==="array"&&e.length===3)return"hsi"}});kt.prototype.hsl=function(){return Eq(this._rgb)};on.hsl=(...e)=>new kt(...e,"hsl");Jr.format.hsl=zA;Jr.autodetect.push({p:2,test:(...e)=>{if(e=br(e,"hsl"),$r(e)==="array"&&e.length===3)return"hsl"}});var{floor:rLe}=Math,nLe=(...e)=>{e=br(e,"hsv");let[t,n,r]=e,o,i,d;if(r*=255,n===0)o=i=d=r;else{t===360&&(t=0),t>360&&(t-=360),t<0&&(t+=360),t/=60;let y=rLe(t),_=t-y,k=r*(1-n),T=r*(1-n*_),N=r*(1-n*(1-_));switch(y){case 0:[o,i,d]=[r,N,k];break;case 1:[o,i,d]=[T,r,k];break;case 2:[o,i,d]=[k,r,N];break;case 3:[o,i,d]=[k,T,r];break;case 4:[o,i,d]=[N,k,r];break;case 5:[o,i,d]=[r,k,T];break}}return[o,i,d,e.length>3?e[3]:1]},abe=nLe;var{min:oLe,max:iLe}=Math,aLe=(...e)=>{e=br(e,"rgb");let[t,n,r]=e,o=oLe(t,n,r),i=iLe(t,n,r),d=i-o,y,_,k;return k=i/255,i===0?(y=Number.NaN,_=0):(_=d/i,t===i&&(y=(n-r)/d),n===i&&(y=2+(r-t)/d),r===i&&(y=4+(t-n)/d),y*=60,y<0&&(y+=360)),[y,_,k]},sbe=aLe;kt.prototype.hsv=function(){return sbe(this._rgb)};on.hsv=(...e)=>new kt(...e,"hsv");Jr.format.hsv=abe;Jr.autodetect.push({p:2,test:(...e)=>{if(e=br(e,"hsv"),$r(e)==="array"&&e.length===3)return"hsv"}});var zc={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452};var{pow:sLe}=Math,lLe=(...e)=>{e=br(e,"lab");let[t,n,r]=e,o,i,d,y,_,k;return i=(t+16)/116,o=isNaN(n)?i:i+n/500,d=isNaN(r)?i:i-r/200,i=zc.Yn*Dee(i),o=zc.Xn*Dee(o),d=zc.Zn*Dee(d),y=Ree(3.2404542*o-1.5371385*i-.4985314*d),_=Ree(-.969266*o+1.8760108*i+.041556*d),k=Ree(.0556434*o-.2040259*i+1.0572252*d),[y,_,k,e.length>3?e[3]:1]},Ree=e=>255*(e<=.00304?12.92*e:1.055*sLe(e,1/2.4)-.055),Dee=e=>e>zc.t1?e*e*e:zc.t2*(e-zc.t0),jq=lLe;var{pow:lbe}=Math,uLe=(...e)=>{let[t,n,r]=br(e,"rgb"),[o,i,d]=cLe(t,n,r),y=116*i-16;return[y<0?0:y,500*(o-i),200*(i-d)]},zee=e=>(e/=255)<=.04045?e/12.92:lbe((e+.055)/1.055,2.4),Nee=e=>e>zc.t3?lbe(e,1/3):e/zc.t2+zc.t0,cLe=(e,t,n)=>{e=zee(e),t=zee(t),n=zee(n);let r=Nee((.4124564*e+.3575761*t+.1804375*n)/zc.Xn),o=Nee((.2126729*e+.7151522*t+.072175*n)/zc.Yn),i=Nee((.0193339*e+.119192*t+.9503041*n)/zc.Zn);return[r,o,i]},Cq=uLe;kt.prototype.lab=function(){return Cq(this._rgb)};on.lab=(...e)=>new kt(...e,"lab");Jr.format.lab=jq;Jr.autodetect.push({p:2,test:(...e)=>{if(e=br(e,"lab"),$r(e)==="array"&&e.length===3)return"lab"}});var{sin:fLe,cos:pLe}=Math,dLe=(...e)=>{let[t,n,r]=br(e,"lch");return isNaN(r)&&(r=0),r=r*Bye,[t,pLe(r)*n,fLe(r)*n]},Tq=dLe;var hLe=(...e)=>{e=br(e,"lch");let[t,n,r]=e,[o,i,d]=Tq(t,n,r),[y,_,k]=jq(o,i,d);return[y,_,k,e.length>3?e[3]:1]},Aq=hLe;var mLe=(...e)=>{let t=br(e,"hcl").reverse();return Aq(...t)},ube=mLe;var{sqrt:vLe,atan2:gLe,round:yLe}=Math,bLe=(...e)=>{let[t,n,r]=br(e,"lab"),o=vLe(n*n+r*r),i=(gLe(r,n)*Wye+360)%360;return yLe(o*1e4)===0&&(i=Number.NaN),[t,o,i]},Mq=bLe;var wLe=(...e)=>{let[t,n,r]=br(e,"rgb"),[o,i,d]=Cq(t,n,r);return Mq(o,i,d)},Lee=wLe;kt.prototype.lch=function(){return Lee(this._rgb)};kt.prototype.hcl=function(){return Lee(this._rgb).reverse()};on.lch=(...e)=>new kt(...e,"lch");on.hcl=(...e)=>new kt(...e,"hcl");Jr.format.lch=Aq;Jr.format.hcl=ube;["lch","hcl"].forEach(e=>Jr.autodetect.push({p:2,test:(...t)=>{if(t=br(t,e),$r(t)==="array"&&t.length===3)return e}}));var OLe={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},xE=OLe;kt.prototype.name=function(){let e=Pq(this._rgb,"rgb");for(let t of Object.keys(xE))if(xE[t]===e)return t.toLowerCase();return e};Jr.format.named=e=>{if(e=e.toLowerCase(),xE[e])return Iq(xE[e]);throw new Error("unknown color name: "+e)};Jr.autodetect.push({p:5,test:(e,...t)=>{if(!t.length&&$r(e)==="string"&&xE[e.toLowerCase()])return"named"}});var xLe=e=>{if($r(e)=="number"&&e>=0&&e<=16777215){let t=e>>16,n=e>>8&255,r=e&255;return[t,n,r,1]}throw new Error("unknown num color: "+e)},cbe=xLe;var _Le=(...e)=>{let[t,n,r]=br(e,"rgb");return(t<<16)+(n<<8)+r},fbe=_Le;kt.prototype.num=function(){return fbe(this._rgb)};on.num=(...e)=>new kt(...e,"num");Jr.format.num=cbe;Jr.autodetect.push({p:5,test:(...e)=>{if(e.length===1&&$r(e[0])==="number"&&e[0]>=0&&e[0]<=16777215)return"num"}});var{round:pbe}=Math;kt.prototype.rgb=function(e=!0){return e===!1?this._rgb.slice(0,3):this._rgb.slice(0,3).map(pbe)};kt.prototype.rgba=function(e=!0){return this._rgb.slice(0,4).map((t,n)=>n<3?e===!1?t:pbe(t):t)};on.rgb=(...e)=>new kt(...e,"rgb");Jr.format.rgb=(...e)=>{let t=br(e,"rgba");return t[3]===void 0&&(t[3]=1),t};Jr.autodetect.push({p:3,test:(...e)=>{if(e=br(e,"rgba"),$r(e)==="array"&&(e.length===3||e.length===4&&$r(e[3])=="number"&&e[3]>=0&&e[3]<=1))return"rgb"}});var{log:Rq}=Math,SLe=e=>{let t=e/100,n,r,o;return t<66?(n=255,r=t<6?0:-155.25485562709179-.44596950469579133*(r=t-2)+104.49216199393888*Rq(r),o=t<20?0:-254.76935184120902+.8274096064007395*(o=t-10)+115.67994401066147*Rq(o)):(n=351.97690566805693+.114206453784165*(n=t-55)-40.25366309332127*Rq(n),r=325.4494125711974+.07943456536662342*(r=t-50)-28.0852963507957*Rq(r),o=255),[n,r,o,1]},Dq=SLe;var{round:ELe}=Math,ILe=(...e)=>{let t=br(e,"rgb"),n=t[0],r=t[2],o=1e3,i=4e4,d=.4,y;for(;i-o>d;){y=(i+o)*.5;let _=Dq(y);_[2]/_[0]>=r/n?i=y:o=y}return ELe(y)},dbe=ILe;kt.prototype.temp=kt.prototype.kelvin=kt.prototype.temperature=function(){return dbe(this._rgb)};on.temp=on.kelvin=on.temperature=(...e)=>new kt(...e,"temp");Jr.format.temp=Jr.format.kelvin=Jr.format.temperature=Dq;var{pow:zq,sign:kLe}=Math,PLe=(...e)=>{e=br(e,"lab");let[t,n,r]=e,o=zq(t+.3963377774*n+.2158037573*r,3),i=zq(t-.1055613458*n-.0638541728*r,3),d=zq(t-.0894841775*n-1.291485548*r,3);return[255*Fee(4.0767416621*o-3.3077115913*i+.2309699292*d),255*Fee(-1.2684380046*o+2.6097574011*i-.3413193965*d),255*Fee(-.0041960863*o-.7034186147*i+1.707614701*d),e.length>3?e[3]:1]},Nq=PLe;function Fee(e){let t=Math.abs(e);return t>.0031308?(kLe(e)||1)*(1.055*zq(t,1/2.4)-.055):e*12.92}var{cbrt:Bee,pow:jLe,sign:CLe}=Math,TLe=(...e)=>{let[t,n,r]=br(e,"rgb"),[o,i,d]=[Wee(t/255),Wee(n/255),Wee(r/255)],y=Bee(.4122214708*o+.5363325363*i+.0514459929*d),_=Bee(.2119034982*o+.6806995451*i+.1073969566*d),k=Bee(.0883024619*o+.2817188376*i+.6299787005*d);return[.2104542553*y+.793617785*_-.0040720468*k,1.9779984951*y-2.428592205*_+.4505937099*k,.0259040371*y+.7827717662*_-.808675766*k]},Lq=TLe;function Wee(e){let t=Math.abs(e);return t<.04045?e/12.92:(CLe(e)||1)*jLe((t+.055)/1.055,2.4)}kt.prototype.oklab=function(){return Lq(this._rgb)};on.oklab=(...e)=>new kt(...e,"oklab");Jr.format.oklab=Nq;Jr.autodetect.push({p:3,test:(...e)=>{if(e=br(e,"oklab"),$r(e)==="array"&&e.length===3)return"oklab"}});var ALe=(...e)=>{e=br(e,"lch");let[t,n,r]=e,[o,i,d]=Tq(t,n,r),[y,_,k]=Nq(o,i,d);return[y,_,k,e.length>3?e[3]:1]},hbe=ALe;var MLe=(...e)=>{let[t,n,r]=br(e,"rgb"),[o,i,d]=Lq(t,n,r);return Mq(o,i,d)},mbe=MLe;kt.prototype.oklch=function(){return mbe(this._rgb)};on.oklch=(...e)=>new kt(...e,"oklch");Jr.format.oklch=hbe;Jr.autodetect.push({p:3,test:(...e)=>{if(e=br(e,"oklch"),$r(e)==="array"&&e.length===3)return"oklch"}});kt.prototype.alpha=function(e,t=!1){return e!==void 0&&$r(e)==="number"?t?(this._rgb[3]=e,this):new kt([this._rgb[0],this._rgb[1],this._rgb[2],e],"rgb"):this._rgb[3]};kt.prototype.clipped=function(){return this._rgb._clipped||!1};kt.prototype.darken=function(e=1){let t=this,n=t.lab();return n[0]-=zc.Kn*e,new kt(n,"lab").alpha(t.alpha(),!0)};kt.prototype.brighten=function(e=1){return this.darken(-e)};kt.prototype.darker=kt.prototype.darken;kt.prototype.brighter=kt.prototype.brighten;kt.prototype.get=function(e){let[t,n]=e.split("."),r=this[t]();if(n){let o=t.indexOf(n)-(t.substr(0,2)==="ok"?2:0);if(o>-1)return r[o];throw new Error(`unknown channel ${n} in mode ${t}`)}else return r};var{pow:RLe}=Math,DLe=1e-7,zLe=20;kt.prototype.luminance=function(e,t="rgb"){if(e!==void 0&&$r(e)==="number"){if(e===0)return new kt([0,0,0,this._rgb[3]],"rgb");if(e===1)return new kt([255,255,255,this._rgb[3]],"rgb");let n=this.luminance(),r=zLe,o=(d,y)=>{let _=d.interpolate(y,.5,t),k=_.luminance();return Math.abs(e-k)e?o(d,_):o(_,y)},i=(n>e?o(new kt([0,0,0]),this):o(this,new kt([255,255,255]))).rgb();return new kt([...i,this._rgb[3]])}return NLe(...this._rgb.slice(0,3))};var NLe=(e,t,n)=>(e=Hee(e),t=Hee(t),n=Hee(n),.2126*e+.7152*t+.0722*n),Hee=e=>(e/=255,e<=.03928?e/12.92:RLe((e+.055)/1.055,2.4));var oa={};var _E=(e,t,n=.5,...r)=>{let o=r[0]||"lrgb";if(!oa[o]&&!r.length&&(o=Object.keys(oa)[0]),!oa[o])throw new Error(`interpolation mode ${o} is not defined`);return $r(e)!=="object"&&(e=new kt(e)),$r(t)!=="object"&&(t=new kt(t)),oa[o](e,t,n).alpha(e.alpha()+n*(t.alpha()-e.alpha()))};kt.prototype.mix=kt.prototype.interpolate=function(e,t=.5,...n){return _E(this,e,t,...n)};kt.prototype.premultiply=function(e=!1){let t=this._rgb,n=t[3];return e?(this._rgb=[t[0]*n,t[1]*n,t[2]*n,n],this):new kt([t[0]*n,t[1]*n,t[2]*n,n],"rgb")};kt.prototype.saturate=function(e=1){let t=this,n=t.lch();return n[1]+=zc.Kn*e,n[1]<0&&(n[1]=0),new kt(n,"lch").alpha(t.alpha(),!0)};kt.prototype.desaturate=function(e=1){return this.saturate(-e)};kt.prototype.set=function(e,t,n=!1){let[r,o]=e.split("."),i=this[r]();if(o){let d=r.indexOf(o)-(r.substr(0,2)==="ok"?2:0);if(d>-1){if($r(t)=="string")switch(t.charAt(0)){case"+":i[d]+=+t;break;case"-":i[d]+=+t;break;case"*":i[d]*=+t.substr(1);break;case"/":i[d]/=+t.substr(1);break;default:i[d]=+t}else if($r(t)==="number")i[d]=t;else throw new Error("unsupported value for Color.set");let y=new kt(i,r);return n?(this._rgb=y._rgb,this):y}throw new Error(`unknown channel ${o} in mode ${r}`)}else return i};kt.prototype.tint=function(e=.5,...t){return _E(this,"white",e,...t)};kt.prototype.shade=function(e=.5,...t){return _E(this,"black",e,...t)};var LLe=(e,t,n)=>{let r=e._rgb,o=t._rgb;return new kt(r[0]+n*(o[0]-r[0]),r[1]+n*(o[1]-r[1]),r[2]+n*(o[2]-r[2]),"rgb")};oa.rgb=LLe;var{sqrt:$ee,pow:_j}=Math,FLe=(e,t,n)=>{let[r,o,i]=e._rgb,[d,y,_]=t._rgb;return new kt($ee(_j(r,2)*(1-n)+_j(d,2)*n),$ee(_j(o,2)*(1-n)+_j(y,2)*n),$ee(_j(i,2)*(1-n)+_j(_,2)*n),"rgb")};oa.lrgb=FLe;var BLe=(e,t,n)=>{let r=e.lab(),o=t.lab();return new kt(r[0]+n*(o[0]-r[0]),r[1]+n*(o[1]-r[1]),r[2]+n*(o[2]-r[2]),"lab")};oa.lab=BLe;var qy=(e,t,n,r)=>{let o,i;r==="hsl"?(o=e.hsl(),i=t.hsl()):r==="hsv"?(o=e.hsv(),i=t.hsv()):r==="hcg"?(o=e.hcg(),i=t.hcg()):r==="hsi"?(o=e.hsi(),i=t.hsi()):r==="lch"||r==="hcl"?(r="hcl",o=e.hcl(),i=t.hcl()):r==="oklch"&&(o=e.oklch().reverse(),i=t.oklch().reverse());let d,y,_,k,T,N;(r.substr(0,1)==="h"||r==="oklch")&&([d,_,T]=o,[y,k,N]=i);let L,Y,q,K;return!isNaN(d)&&!isNaN(y)?(y>d&&y-d>180?K=y-(d+360):y180?K=y+360-d:K=y-d,Y=d+n*K):isNaN(d)?isNaN(y)?Y=Number.NaN:(Y=y,(T==1||T==0)&&r!="hsv"&&(L=k)):(Y=d,(N==1||N==0)&&r!="hsv"&&(L=_)),L===void 0&&(L=_+n*(k-_)),q=T+n*(N-T),r==="oklch"?new kt([q,L,Y],r):new kt([Y,L,q],r)};var vbe=(e,t,n)=>qy(e,t,n,"lch");oa.lch=vbe;oa.hcl=vbe;var WLe=(e,t,n)=>{let r=e.num(),o=t.num();return new kt(r+n*(o-r),"num")};oa.num=WLe;var HLe=(e,t,n)=>qy(e,t,n,"hcg");oa.hcg=HLe;var $Le=(e,t,n)=>qy(e,t,n,"hsi");oa.hsi=$Le;var VLe=(e,t,n)=>qy(e,t,n,"hsl");oa.hsl=VLe;var qLe=(e,t,n)=>qy(e,t,n,"hsv");oa.hsv=qLe;var ULe=(e,t,n)=>{let r=e.oklab(),o=t.oklab();return new kt(r[0]+n*(o[0]-r[0]),r[1]+n*(o[1]-r[1]),r[2]+n*(o[2]-r[2]),"oklab")};oa.oklab=ULe;var GLe=(e,t,n)=>qy(e,t,n,"oklch");oa.oklch=GLe;var{pow:Vee,sqrt:qee,PI:Uee,cos:gbe,sin:ybe,atan2:JLe}=Math,bbe=(e,t="lrgb",n=null)=>{let r=e.length;n||(n=Array.from(new Array(r)).map(()=>1));let o=r/n.reduce(function(N,L){return N+L});if(n.forEach((N,L)=>{n[L]*=o}),e=e.map(N=>new kt(N)),t==="lrgb")return XLe(e,n);let i=e.shift(),d=i.get(t),y=[],_=0,k=0;for(let N=0;N{let Y=N.get(t);T+=N.alpha()*n[L+1];for(let q=0;q=360;)L-=360;d[N]=L}else d[N]=d[N]/y[N];return T/=r,new kt(d,t).alpha(T>.99999?1:T,!0)},XLe=(e,t)=>{let n=e.length,r=[0,0,0,0];for(let o=0;o.9999999&&(r[3]=1),new kt(pk(r))};var{pow:KLe}=Math;function dk(e){let t="rgb",n=on("#ccc"),r=0,o=[0,1],i=[],d=[0,0],y=!1,_=[],k=!1,T=0,N=1,L=!1,Y={},q=!0,K=1,U=function(ae){if(ae=ae||["#fff","#000"],ae&&$r(ae)==="string"&&on.brewer&&on.brewer[ae.toLowerCase()]&&(ae=on.brewer[ae.toLowerCase()]),$r(ae)==="array"){ae.length===1&&(ae=[ae[0],ae[0]]),ae=ae.slice(0);for(let Pe=0;Pe=y[Ne];)Ne++;return Ne-1}return 0},Z=ae=>ae,fe=ae=>ae,me=function(ae,Pe){let Ne,Ye;if(Pe==null&&(Pe=!1),isNaN(ae)||ae===null)return n;Pe?Ye=ae:y&&y.length>2?Ye=X(ae)/(y.length-2):N!==T?Ye=(ae-T)/(N-T):Ye=1,Ye=fe(Ye),Pe||(Ye=Z(Ye)),K!==1&&(Ye=KLe(Ye,K)),Ye=d[0]+Ye*(1-d[0]-d[1]),Ye=s4(Ye,0,1);let Je=Math.floor(Ye*1e4);if(q&&Y[Je])Ne=Y[Je];else{if($r(_)==="array")for(let Me=0;Me=Ve&&Me===i.length-1){Ne=_[Me];break}if(Ye>Ve&&YeY={};U(e);let ge=function(ae){let Pe=on(me(ae));return k&&Pe[k]?Pe[k]():Pe};return ge.classes=function(ae){if(ae!=null){if($r(ae)==="array")y=ae,o=[ae[0],ae[ae.length-1]];else{let Pe=on.analyze(o);ae===0?y=[Pe.min,Pe.max]:y=on.limits(Pe,"e",ae)}return ge}return y},ge.domain=function(ae){if(!arguments.length)return o;T=ae[0],N=ae[ae.length-1],i=[];let Pe=_.length;if(ae.length===Pe&&T!==N)for(let Ne of Array.from(ae))i.push((Ne-T)/(N-T));else{for(let Ne=0;Ne2){let Ne=ae.map((Je,Me)=>Me/(ae.length-1)),Ye=ae.map(Je=>(Je-T)/(N-T));Ye.every((Je,Me)=>Ne[Me]===Je)||(fe=Je=>{if(Je<=0||Je>=1)return Je;let Me=0;for(;Je>=Ye[Me+1];)Me++;let Ve=(Je-Ye[Me])/(Ye[Me+1]-Ye[Me]);return Ne[Me]+Ve*(Ne[Me+1]-Ne[Me])})}}return o=[T,N],ge},ge.mode=function(ae){return arguments.length?(t=ae,ye(),ge):t},ge.range=function(ae,Pe){return U(ae,Pe),ge},ge.out=function(ae){return k=ae,ge},ge.spread=function(ae){return arguments.length?(r=ae,ge):r},ge.correctLightness=function(ae){return ae==null&&(ae=!0),L=ae,ye(),L?Z=function(Pe){let Ne=me(0,!0).lab()[0],Ye=me(1,!0).lab()[0],Je=Ne>Ye,Me=me(Pe,!0).lab()[0],Ve=Ne+(Ye-Ne)*Pe,Ue=Me-Ve,ht=0,yt=1,Rt=20;for(;Math.abs(Ue)>.01&&Rt-- >0;)(function(){return Je&&(Ue*=-1),Ue<0?(ht=Pe,Pe+=(yt-Pe)*.5):(yt=Pe,Pe+=(ht-Pe)*.5),Me=me(Pe,!0).lab()[0],Ue=Me-Ve})();return Pe}:Z=Pe=>Pe,ge},ge.padding=function(ae){return ae!=null?($r(ae)==="number"&&(ae=[ae,ae]),d=ae,ge):d},ge.colors=function(ae,Pe){arguments.length<2&&(Pe="hex");let Ne=[];if(arguments.length===0)Ne=_.slice(0);else if(ae===1)Ne=[ge(.5)];else if(ae>1){let Ye=o[0],Je=o[1]-Ye;Ne=YLe(0,ae,!1).map(Me=>ge(Ye+Me/(ae-1)*Je))}else{e=[];let Ye=[];if(y&&y.length>2)for(let Je=1,Me=y.length,Ve=1<=Me;Ve?JeMe;Ve?Je++:Je--)Ye.push((y[Je-1]+y[Je])*.5);else Ye=o;Ne=Ye.map(Je=>ge(Je))}return on[Pe]&&(Ne=Ne.map(Ye=>Ye[Pe]())),Ne},ge.cache=function(ae){return ae!=null?(q=ae,ge):q},ge.gamma=function(ae){return ae!=null?(K=ae,ge):K},ge.nodata=function(ae){return ae!=null?(n=on(ae),ge):n},ge}function YLe(e,t,n){let r=[],o=ei;o?d++:d--)r.push(d);return r}var QLe=function(e){let t=[1,1];for(let n=1;nnew kt(i)),e.length===2)[n,r]=e.map(i=>i.lab()),t=function(i){let d=[0,1,2].map(y=>n[y]+i*(r[y]-n[y]));return new kt(d,"lab")};else if(e.length===3)[n,r,o]=e.map(i=>i.lab()),t=function(i){let d=[0,1,2].map(y=>(1-i)*(1-i)*n[y]+2*(1-i)*i*r[y]+i*i*o[y]);return new kt(d,"lab")};else if(e.length===4){let i;[n,r,o,i]=e.map(d=>d.lab()),t=function(d){let y=[0,1,2].map(_=>(1-d)*(1-d)*(1-d)*n[_]+3*(1-d)*(1-d)*d*r[_]+3*(1-d)*d*d*o[_]+d*d*d*i[_]);return new kt(y,"lab")}}else if(e.length>=5){let i,d,y;i=e.map(_=>_.lab()),y=e.length-1,d=QLe(y),t=function(_){let k=1-_,T=[0,1,2].map(N=>i.reduce((L,Y,q)=>L+d[q]*k**(y-q)*_**q*Y[N],0));return new kt(T,"lab")}}else throw new RangeError("No point in running bezier with only one color.");return t},wbe=e=>{let t=ZLe(e);return t.scale=()=>dk(t),t};var C3=(e,t,n)=>{if(!C3[n])throw new Error("unknown blend mode "+n);return C3[n](e,t)},SE=e=>(t,n)=>{let r=on(n).rgb(),o=on(t).rgb();return on.rgb(e(r,o))},EE=e=>(t,n)=>{let r=[];return r[0]=e(t[0],n[0]),r[1]=e(t[1],n[1]),r[2]=e(t[2],n[2]),r},eFe=e=>e,tFe=(e,t)=>e*t/255,rFe=(e,t)=>e>t?t:e,nFe=(e,t)=>e>t?e:t,oFe=(e,t)=>255*(1-(1-e/255)*(1-t/255)),iFe=(e,t)=>t<128?2*e*t/255:255*(1-2*(1-e/255)*(1-t/255)),aFe=(e,t)=>255*(1-(1-t/255)/(e/255)),sFe=(e,t)=>e===255?255:(e=255*(t/255)/(1-e/255),e>255?255:e);C3.normal=SE(EE(eFe));C3.multiply=SE(EE(tFe));C3.screen=SE(EE(oFe));C3.overlay=SE(EE(iFe));C3.darken=SE(EE(rFe));C3.lighten=SE(EE(nFe));C3.dodge=SE(EE(sFe));C3.burn=SE(EE(aFe));var Obe=C3;var{pow:lFe,sin:uFe,cos:cFe}=Math;function xbe(e=300,t=-1.5,n=1,r=1,o=[0,1]){let i=0,d;$r(o)==="array"?d=o[1]-o[0]:(d=0,o=[o,o]);let y=function(_){let k=Vy*((e+120)/360+t*_),T=lFe(o[0]+d*_,r),L=(i!==0?n[0]+_*i:n)*T*(1-T)/2,Y=cFe(k),q=uFe(k),K=T+L*(-.14861*Y+1.78277*q),U=T+L*(-.29227*Y-.90649*q),X=T+L*(1.97294*Y);return on(pk([K*255,U*255,X*255,1]))};return y.start=function(_){return _==null?e:(e=_,y)},y.rotations=function(_){return _==null?t:(t=_,y)},y.gamma=function(_){return _==null?r:(r=_,y)},y.hue=function(_){return _==null?n:(n=_,$r(n)==="array"?(i=n[1]-n[0],i===0&&(n=n[1])):i=0,y)},y.lightness=function(_){return _==null?o:($r(_)==="array"?(o=_,d=_[1]-_[0]):(o=[_,_],d=0),y)},y.scale=()=>on.scale(y),y.hue(n),y}var fFe="0123456789abcdef",{floor:pFe,random:dFe}=Math,_be=()=>{let e="#";for(let t=0;t<6;t++)e+=fFe.charAt(pFe(dFe()*16));return new kt(e,"hex")};var{log:Sbe,pow:hFe,floor:mFe,abs:vFe}=Math;function Gee(e,t=null){let n={min:Number.MAX_VALUE,max:Number.MAX_VALUE*-1,sum:0,values:[],count:0};return $r(e)==="object"&&(e=Object.values(e)),e.forEach(r=>{t&&$r(r)==="object"&&(r=r[t]),r!=null&&!isNaN(r)&&(n.values.push(r),n.sum+=r,rn.max&&(n.max=r),n.count+=1)}),n.domain=[n.min,n.max],n.limits=(r,o)=>Jee(n,r,o),n}function Jee(e,t="equal",n=7){$r(e)=="array"&&(e=Gee(e));let{min:r,max:o}=e,i=e.values.sort((y,_)=>y-_);if(n===1)return[r,o];let d=[];if(t.substr(0,1)==="c"&&(d.push(r),d.push(o)),t.substr(0,1)==="e"){d.push(r);for(let y=1;y 0");let y=Math.LOG10E*Sbe(r),_=Math.LOG10E*Sbe(o);d.push(r);for(let k=1;k200&&(N=!1)}let q={};for(let U=0;UU-X),d.push(K[0]);for(let U=1;U{e=new kt(e),t=new kt(t);let n=e.luminance(),r=t.luminance();return n>r?(n+.05)/(r+.05):(r+.05)/(n+.05)};var{sqrt:W_,pow:hu,min:gFe,max:yFe,atan2:Ibe,abs:kbe,cos:Fq,sin:Pbe,exp:bFe,PI:jbe}=Math;function Cbe(e,t,n=1,r=1,o=1){var i=function(Pt){return 360*Pt/(2*jbe)},d=function(Pt){return 2*jbe*Pt/360};e=new kt(e),t=new kt(t);let[y,_,k]=Array.from(e.lab()),[T,N,L]=Array.from(t.lab()),Y=(y+T)/2,q=W_(hu(_,2)+hu(k,2)),K=W_(hu(N,2)+hu(L,2)),U=(q+K)/2,X=.5*(1-W_(hu(U,7)/(hu(U,7)+hu(25,7)))),Z=_*(1+X),fe=N*(1+X),me=W_(hu(Z,2)+hu(k,2)),ye=W_(hu(fe,2)+hu(L,2)),ge=(me+ye)/2,ae=i(Ibe(k,Z)),Pe=i(Ibe(L,fe)),Ne=ae>=0?ae:ae+360,Ye=Pe>=0?Pe:Pe+360,Je=kbe(Ne-Ye)>180?(Ne+Ye+360)/2:(Ne+Ye)/2,Me=1-.17*Fq(d(Je-30))+.24*Fq(d(2*Je))+.32*Fq(d(3*Je+6))-.2*Fq(d(4*Je-63)),Ve=Ye-Ne;Ve=kbe(Ve)<=180?Ve:Ye<=Ne?Ve+360:Ve-360,Ve=2*W_(me*ye)*Pbe(d(Ve)/2);let Ue=T-y,ht=ye-me,yt=1+.015*hu(Y-50,2)/W_(20+hu(Y-50,2)),Rt=1+.045*ge,wt=1+.015*ge*Me,_t=30*bFe(-hu((Je-275)/25,2)),At=-(2*W_(hu(ge,7)/(hu(ge,7)+hu(25,7))))*Pbe(2*d(_t)),ir=W_(hu(Ue/(n*yt),2)+hu(ht/(r*Rt),2)+hu(Ve/(o*wt),2)+At*(ht/(r*Rt))*(Ve/(o*wt)));return yFe(0,gFe(100,ir))}function Tbe(e,t,n="lab"){e=new kt(e),t=new kt(t);let r=e.get(n),o=t.get(n),i=0;for(let d in r){let y=(r[d]||0)-(o[d]||0);i+=y*y}return Math.sqrt(i)}var Abe=(...e)=>{try{return new kt(...e),!0}catch{return!1}};var Mbe={cool(){return dk([on.hsl(180,1,.9),on.hsl(250,.7,.4)])},hot(){return dk(["#000","#f00","#ff0","#fff"],[0,.25,.75,1]).mode("rgb")}};var Bq={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]};for(let e of Object.keys(Bq))Bq[e.toLowerCase()]=Bq[e];var Rbe=Bq;Object.assign(on,{average:bbe,bezier:wbe,blend:Obe,cubehelix:xbe,mix:_E,interpolate:_E,random:_be,scale:dk,analyze:Gee,contrast:Ebe,deltaE:Cbe,distance:Tbe,limits:Jee,valid:Abe,scales:Mbe,input:Jr,colors:xE,brewer:Rbe});var pa=on;var Dbe="#EBEFF5";function Sj(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:10,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,o=e.slice(),i=[],d=t%2===0,y=n?Math.ceil(t/2)+(d?1:0):t,_=n?Math.ceil(t/2)+(d?1:0):0;if(o.length===1&&o.unshift(Dbe),n){o.length<3&&(o[2]=o[1],o[1]=Dbe);var k=Math.ceil(o.length/2),T=o.filter(function(K,U){if(Ue.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:{},n=t.rotations,r=n===void 0?1:n,o=t.order,i=o===void 0?"append":o,d=t.direction,y=d===void 0?"lighter":d,_=t.sortBy,k=_===void 0?"default":_,T=t.sortShift,N=T===void 0?"-100":T,L=[],Y=["#54B399","#6092C0","#D36086","#9170B8","#CA8EAE","#D6BF57","#B9A888","#DA8B45","#AA6556","#E7664C"];if(k==="natural"&&(Y=Xee(Y).sort(function(X,Z){return pa(X).set("hsl.h",N).hsl()[0]-pa(Z).set("hsl.h",N).hsl()[0]})),r>1){var q=Y.map(function(X){var Z=Sj(["black",X,"white"],5,!1,!0);switch(Z.pop(),Z.shift(),y){case"lighter":return Sj([Z[1],Z[2]],r,!1,!0);case"darker":return Sj([Z[1],Z[0]],r,!1,!0);case"both":return Sj(Z,r,!1,!0)}});if(i==="group")L=SFe(q);else for(var K=function(Z){var fe,me=q.map(function(ye){return ye[Z]});(fe=L).push.apply(fe,Xee(me))},U=0;U0&&arguments[0]!==void 0?arguments[0]:{},n=H_(t),r=n.map(function(o){return pa(o).brighten(.5).hex()});return r};var Snr=H_()[9],Enr=[H_()[1],"#6092C0"],Inr=[H_()[7],H_()[9]];var zbe=function(t,n){return Pee(t)?n.hex():n.css()},lv=function(t,n){return pa(t).alpha(n).css()},l4=function(t,n){var r=pa.mix(t,"#fff",n,"rgb");return zbe(t,r)},u4=function(t,n){var r=pa.mix(t,"#000",n,"rgb");return zbe(t,r)};var Wq=function(t){return pa(t).get("hsl.l")*100};function NA(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?NA=function(n){return typeof n}:NA=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},NA(e)}var c4=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:4.85;return function(r){var o,i=NA(r)==="object"&&(o=F_(r,t))!==null&&o!==void 0?o:t,d=NA(r)==="object"?r.colors.body:r;(pa(i).alpha()<1||pa(d).alpha()<1)&&console.warn(`Contrast cannot be accurately calculated when colors have alpha channel opacity. Make sure the provided foreground and background colors have no transparency: Foreground: `.concat(i,` @@ -96,7 +96,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function cBe(e,t){if(e){if(typeof e=="string")return t2e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return t2e(e,t)}}function t2e(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:50,r=Date.now();return function(){r+n-Date.now()<0&&(t.apply(void 0,arguments),r=Date.now())}};function Hqe(e,t){return Uqe(e)||qqe(e,t)||Vqe(e,t)||$qe()}function $qe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Vqe(e,t){if(e){if(typeof e=="string")return ywe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ywe(e,t)}}function ywe(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:!0,r=Ite();return r&&n?t.includes(r):!1};var wwe=function(t){var n=t instanceof HTMLElement?t:null;return typeof t=="string"?n=document.querySelector(t):typeof t=="function"&&(n=t()),n};var Owe=V(Pte());var jte=function(t){return t===void 0},Gqe=function(t){return t===null},Gy=function(t){return jte(t)||Gqe(t)};var xwe=function(t){return Owe.default.isDate(t)};var Cwe=V(Uq()),Twe=V(A3()),Awe=V(Swe()),Mwe=V(Iwe()),Rwe=V(Cte()),Dwe=V(jwe()),uUe=V(mk()),jE=function(t){return(0,Cwe.default)(t)},zwe=function(t){return(0,Twe.default)(t)},fh=function(t){return(0,Awe.default)(t)},sU=function(t){return(0,Mwe.default)(t)},lU=function(t){return(0,Rwe.default)(t)},Nwe=function(t){return(0,Dwe.default)(t)};var Fj=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.yes,o=r===void 0?"Yes":r,i=n.no,d=i===void 0?"No":i,y=n.nil,_=y===void 0?"":y;return Gy(t)?_:t?o:d};var cU=V(Pte());function uU(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?uU=function(n){return typeof n}:uU=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},uU(e)}function Lwe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function Fwe(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},r=n.refTime;return(0,cU.default)(t).calendar(r,n)},QA={date:"D MMM YYYY",longDate:"DD MMMM YYYY",shortDate:"D MMM YY",dateTime:"D MMM YYYY HH:mm",longDateTime:"DD MMMM YYYY HH:mm:ss",shortDateTime:"D MMM YY HH:mm",dobShort:"Do MMM YY",dobLong:"Do MMMM YYYY",iso8601:"YYYY-MM-DDTHH:mm:ss.SSSZ",calendar:Tte,calendarDateTime:function(t,n){return Tte(t,Fwe({sameDay:"[Today at] H:mmA",nextDay:"[Tomorrow at] H:mmA",nextWeek:"dddd [at] H:mmA",lastDay:"[Yesterday at] H:mmA",lastWeek:"[Last] dddd [at] H:mmA",sameElse:"Do MMM YYYY [at] H:mmA"},n))},calendarDate:function(t,n){return Tte(t,Fwe({sameDay:"[Today]",nextDay:"[Tomorrow]",nextWeek:"dddd",lastDay:"[Yesterday]",lastWeek:"[Last] dddd",sameElse:"Do MMM YYYY"},n))}};function fUe(e){return QA.hasOwnProperty(e)}function pUe(e){return uU(e)==="object"&&(e.hasOwnProperty("format")||e.hasOwnProperty("nil")||e.hasOwnProperty("options"))}var Bj=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"dateTime";if(fh(n)){if(Gy(t))return"";var r=fUe(n)?QA[n]:n;if(jE(r))return r(t,{});if(fh(r))return(0,cU.default)(t).format(r)}if(pUe(n)){var o=n.format,i=o===void 0?"dateTime":o,d=n.nil,y=d===void 0?"":d,_=n.options,k=QA[i]||i;if(Gy(t))return y;if(jE(k))return k(t,_);if(fh(k))return(0,cU.default)(t).format(k)}throw new Error("Failed to format value using dateFormatKeyOrConfig: ".concat(n))};var Hwe=V(Wwe());var dUe={decimal1:"0,0.0",decimal2:"0,0.00",decimal3:"0,0.000",ordinal:"0o",integer:"0,0"},Wj=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r,o="",i;if(fh(n)?r=n:(r=n.format,o=n.nil||"",i=n.round),!r)return Gy(t)?o:t.toString();var d=i?Math.round:Math.floor,y=dUe[r]||r;return Gy(t)?o:(0,Hwe.default)(t).format(y,d)};var Hj=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{nil:""};return Gy(t)?n.nil:t.toString()};var pU=function e(t){return Gy(t)||Nwe(t)?"":fh(t)?Hj(t):xwe(t)?Bj(t):sU(t)?Fj(t):lU(t)?Wj(t):zwe(t)?Array.isArray(t)?t.map(function(n){return e(n)}).join(", "):e(t):JSON.stringify(t)};var mUe=/^([a-zA-Z0-9]+\.)*elastic\.co$/,Uwe=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";try{var n=new URL(t),r=n.protocol==="http:"||n.protocol==="https:",o=!!n.host.match(mUe);return r&&o}catch{return!1}};var vu=function(t){var n=t.href,r=t.target,o=r===void 0?"":r,i=t.rel,d=!!n&&Uwe(n),y=i?i.split(" ").filter(function(_){return!!_.length&&_!=="noreferrer"}):[];return d||y.push("noreferrer"),o.includes("_blank")&&y.indexOf("noopener")===-1&&y.push("noopener"),y.sort().join(" ").trim()};var Gwe=V(er()),dU="asc",Mte="desc",Jy=Object.freeze({ASC:dU,DESC:Mte,isAsc:function(t){return t===dU},reverse:function(t){return this.isAsc(t)?Mte:dU}}),Jwe=Gwe.default.oneOf([dU,Mte]);var b6e=V(mOe()),KKe=V(y6e()),gk=function(t,n,r){return(0,b6e.default)(t,n,r)};var eM=Object.freeze({default:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Jy.ASC;return function(n,r){var o=n!=null,i=r!=null;if(o&&!i)return-1;if(!o&&i)return 1;if(!o&&!i||n===r)return 0;var d=n>r?1:-1;return Jy.isAsc(t)?d:-1*d}},reverse:function(t){return function(n,r){return t(r,n)}},value:function(e){function t(n,r){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e,t){return t||(t=this.default(Jy.ASC)),function(n,r){return t(e(n),e(r))}}),property:function(t,n){return this.value(function(r){return gk(r,t)},n)}});function wU(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function qte(e,t){return eYe(e)||ZKe(e,t)||QKe(e,t)||YKe()}function YKe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function QKe(e,t){if(e){if(typeof e=="string")return w6e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return w6e(e,t)}}function w6e(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nae)&&(ae=Je.fit,Pe={fit:Je.fit,position:Ye,top:Je.top+window.pageYOffset,left:Je.left+window.pageXOffset,arrow:Je.arrow},ae===1))break}if(Pe==null)throw new Error("Failed to calculate bestPosition");return q&&(Pe.anchorBoundingBox=K),Pe}function tYe(e){var t,n,r=e.position,o=e.align,i=e.anchorBoundingBox,d=e.popoverBoundingBox,y=e.windowBoundingBox,_=e.containerBoundingBox,k=e.arrowConfig,T=e.offset,N=T===void 0?0:T,L=e.buffer,Y=L===void 0?0:L,q=Vte[r],K=qj[q],U=$te[q],X=x6e(Y),Z=qte(X,4),fe=Z[0],me=Z[1],ye=Z[2],ge=Z[3],ae=rYe({crossAxisFirstSide:q,crossAxisSecondSide:K,crossAxisDimension:U,position:r,align:o,buffer:Y,offset:N,windowBoundingBox:y,containerBoundingBox:_,popoverBoundingBox:d,anchorBoundingBox:i,arrowConfig:k}),Pe=ae.crossAxisPosition,Ne=ae.crossAxisArrowPosition,Ye=$te[r],Je=O6e[Ye],Me=nYe({position:r,offset:N,popoverBoundingBox:d,anchorBoundingBox:i,arrowConfig:k}),Ve=Me.primaryAxisPosition,Ue=Me.primaryAxisArrowPosition,ht=(t={},wU(t,q,Pe),wU(t,Je,Ve),t),yt=Ute(y,_);yt.top+=fe,yt.right-=me,yt.bottom-=ye,yt.left+=ge;var Mt=iYe({top:ht.top,right:ht.left+d.width,bottom:ht.top+d.height,left:ht.left,width:d.width,height:d.height},yt),wt=k?(n={},wU(n,q,Ne-ht[q]),wU(n,Je,Ue),n):void 0;return{fit:Mt,top:ht.top,left:ht.left,arrow:wt?{left:wt.left,top:wt.top}:void 0}}function rYe(e){var t=e.crossAxisFirstSide,n=e.crossAxisSecondSide,r=e.crossAxisDimension,o=e.position,i=e.align,d=e.buffer,y=e.offset,_=e.windowBoundingBox,k=e.containerBoundingBox,T=e.popoverBoundingBox,N=e.anchorBoundingBox,L=e.arrowConfig,Y=T[r],q=N[r],K=q/2,U=N[t]+K-Y/2,X=Ute(_,k),Z=oYe(N,X,d,y,o),fe=L?L.arrowBuffer:0,me=(Y-q)/2,ye=0,ge=1,ae=0,Pe=1;if(i!=null){ge=i==="top"||i==="left"?1:-1,ye=me;var Ne=me+ye,Ye=Ne>Z[qj[i]];ae=Ye?Ne-Z[qj[i]]:0,Pe=-1*ge}else{var Je=Z[t],Me=Z[n],Ve=Je>Me;Pe=Ve?-1:1;var Ue=Math.min(Je,Me),ht=me>Ue;ae=ht?me-Ue:0}var yt=ae*Pe,Mt=U+yt+ye*ge,wt;if(L){var _t=L.arrowWidth;if(wt=N[t]+K-_t/2,wtMt+Y){var Rt=Mt+Y,sr=wt-(Rt-fe-_t);Mt+=sr}}return{crossAxisPosition:Mt,crossAxisArrowPosition:wt}}function nYe(e){var t=e.position,n=e.offset,r=e.popoverBoundingBox,o=e.anchorBoundingBox,i=e.arrowConfig,d=t==="top"||t==="left",y=$te[t],_=r[y],k=O6e[y],T=o[k],N=o[y],L=d?_:N,Y=(n+L)*(d?-1:1),q=T+Y,K;return i&&(K=d?_:0),{primaryAxisPosition:q,primaryAxisArrowPosition:K}}function Hte(e){var t=e.getBoundingClientRect();return{top:t.top,right:t.right,bottom:t.bottom,left:t.left,height:t.height,width:t.width}}function oYe(e,t,n,r,o){var i=x6e(n),d=qte(i,4),y=d[0],_=d[1],k=d[2],T=d[3];return{top:e.top-t.top-y-(o==="top"?r:0),right:t.right-e.right-_-(o==="right"?r:0),bottom:t.bottom-e.bottom-k-(o==="bottom"?r:0),left:e.left-t.left-T-(o==="left"?r:0)}}function iYe(e,t){var n=Ute(e,t);if(n.left>n.right||n.top>n.top)return 0;var r=(n.right-n.left)*(n.bottom-n.top),o=(e.right-e.left)*(e.bottom-e.top);return r/o}function Ute(e,t){var n=Math.max(e.top,t.top),r=Math.min(e.right,t.right),o=Math.min(e.bottom,t.bottom),i=Math.max(e.left,t.left),d=Math.max(o-n,0),y=Math.max(r-i,0);return{top:n,right:r,bottom:o,left:i,height:d,width:y}}function tM(e,t){for(var n=[];n.push(e),e=e.offsetParent,!(e==null||e.contains(t)););n.reverse();for(var r=0,o=n;r0){var r=Date.now(),o=r+t,i=function d(){n(),o>Date.now()&&requestAnimationFrame(d)};requestAnimationFrame(i)}};var E6e=V(ne()),I6e=function(t){return(0,E6e.useCallback)(function(n){return t.forEach(function(r){r&&(typeof r=="function"?r(n):r.current=n)})},[t])};var FU=V(ne()),an=V(er()),zU=V(Ar());var S4r=V(ne()),Lf=V(er()),lxe=V(Ar());var nM={};de(nM,{icon:()=>pYe});var cur=V(ne());var lYe=["title","titleId"];function Gte(){return Gte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fYe=function(t){var n=t.title,r=t.titleId,o=uYe(t,lYe);return c("svg",Gte({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 0a8 8 0 110 16A8 8 0 018 0zm0 1a7 7 0 100 14A7 7 0 008 1zm3.974 4.342a.5.5 0 01-.233.596l-.083.036L9 6.86v2.559l.974 2.923a.5.5 0 01-.233.596l-.083.036a.5.5 0 01-.596-.233l-.036-.083-1-3L8 9.5l-.026.158-1 3a.5.5 0 01-.97-.228l.022-.088L7 9.416V6.86l-2.658-.886a.5.5 0 01.228-.97l.088.022L7.583 6h.833l2.926-.974a.5.5 0 01.632.316zM8 3a1 1 0 110 2 1 1 0 010-2z"}))},pYe=fYe;var oM={};de(oM,{icon:()=>gYe});var pur=V(ne());var dYe=["title","titleId"];function Jte(){return Jte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vYe=function(t){var n=t.title,r=t.titleId,o=hYe(t,dYe);return c("svg",Jte({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M2.5 2a.5.5 0 100 1 .5.5 0 000-1zm0-1a1.5 1.5 0 011.415 1h1.908a1.5 1.5 0 011.393.943L8.839 7H12.5a.5.5 0 010 1H8.839l-1.623 4.057A1.5 1.5 0 015.823 13H3.915a1.5 1.5 0 110-1h1.908a.5.5 0 00.464-.314L7.761 8H3.915a1.5 1.5 0 110-1H7.76L6.287 3.314A.5.5 0 005.823 3H3.915A1.5 1.5 0 112.5 1zm0 11a.5.5 0 110 1 .5.5 0 010-1zM3 7.5a.5.5 0 10-1 0 .5.5 0 001 0zm9.354-3.354a.5.5 0 00-.708.708L13.793 7a.707.707 0 010 1l-2.147 2.146a.5.5 0 00.708.708L14.5 8.707a1.707 1.707 0 000-2.414l-2.146-2.147z"}))},gYe=vYe;var iM={};de(iM,{icon:()=>xYe});var hur=V(ne());var yYe=["title","titleId"];function Xte(){return Xte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OYe=function(t){var n=t.title,r=t.titleId,o=bYe(t,yYe);return c("svg",Xte({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.59 10.059L7.35 5.18h1.3L8.4 10.06h-.81zm.394 1.901a.61.61 0 01-.448-.186.606.606 0 01-.186-.444c0-.174.062-.323.186-.446a.614.614 0 01.448-.184c.169 0 .315.06.44.182.124.122.186.27.186.448a.6.6 0 01-.189.446.607.607 0 01-.437.184zM2 14a1 1 0 01-.878-1.479l6-11a1 1 0 011.756 0l6 11A1 1 0 0114 14H2zm0-1h12L8 2 2 13z"}))},xYe=OYe;var aM={};de(aM,{icon:()=>kYe});var vur=V(ne());var _Ye=["title","titleId"];function Kte(){return Kte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IYe=function(t){var n=t.title,r=t.titleId,o=SYe(t,_Ye);return c("svg",Kte({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8 9.169L2 5.25v6.17l6 3.428 6-3.428V5.25L8 9.17zM15 4v8l-7 4-7-4V4l7-4 7 4zm-1.428.336L8 1.152 2.428 4.336 8 7.974l5.572-3.638z"}))},kYe=IYe;var sM={};de(sM,{icon:()=>AYe});var yur=V(ne());var PYe=["title","titleId"];function Yte(){return Yte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TYe=function(t){var n=t.title,r=t.titleId,o=jYe(t,PYe);return c("svg",Yte({xmlns:"http://www.w3.org/2000/svg",width:14,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13.924 4.013a.605.605 0 00-.228-.236L7.304.082a.607.607 0 00-.608 0L.304 3.777A.62.62 0 000 4.304v7.392c0 .217.116.418.304.527l6.392 3.695c.188.11.42.11.608 0l6.392-3.695a.609.609 0 00.304-.527V4.304a.607.607 0 00-.076-.291zM1 5.079v6.391l6 3.47 6-3.47V5.08L7.252 8.432 7 8.579l-.252-.147L1 5.079zm11.476-.852L7 1.06 1.524 4.227 7 7.42l5.476-3.194z"}))},AYe=TYe;var lM={};de(lM,{icon:()=>NYe});var wur=V(ne());var MYe=["title","titleId"];function Qte(){return Qte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zYe=function(t){var n=t.title,r=t.titleId,o=RYe(t,MYe);return c("svg",Qte({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 6.5a4.5 4.5 0 115 4.473V16H7v-5.027A4.5 4.5 0 013 6.5z"}))},NYe=zYe;var uM={};de(uM,{icon:()=>HYe});var xur=V(ne());var LYe=["title","titleId"];function Zte(){return Zte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WYe=function(t){var n=t.title,r=t.titleId,o=FYe(t,LYe);return c("svg",Zte({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 0h12a2 2 0 012 2v12a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2zm0 1a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1V2a1 1 0 00-1-1H2zm.5 2h10a.5.5 0 110 1h-10a.5.5 0 010-1zm1 3h6a.5.5 0 010 1h-6a.5.5 0 010-1zm2 3h4a.5.5 0 010 1h-4a.5.5 0 010-1zm3 3h5a.5.5 0 110 1h-5a.5.5 0 110-1z"}))},HYe=WYe;var cM={};de(cM,{icon:()=>GYe});var Sur=V(ne());var $Ye=["title","titleId"];function ere(){return ere=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UYe=function(t){var n=t.title,r=t.titleId,o=VYe(t,$Ye);return c("svg",ere({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M32 30H0V3h12.57l3 5H32v22zM2 28h28V10H14.43l-3-5H2v23z"}),c("path",{className:"euiIcon__fillSecondary",d:"M21 18h-4v-4h-2v4h-4v2h4v4h2v-4h4z"}))},GYe=UYe;var fM={};de(fM,{icon:()=>QYe});var Iur=V(ne());var JYe=["title","titleId"];function tre(){return tre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YYe=function(t){var n=t.title,r=t.titleId,o=XYe(t,JYe);return c("svg",tre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M2.909 26.182h1.939v4.848H2.909z"}),c("path",{d:"M4.848 16.62V0H2.91v16.62a3.879 3.879 0 101.94 0zm-.97 5.683a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.879z"}),c("path",{className:"euiIcon__fillSecondary",d:"M14.545 16.485h1.939V31.03h-1.939z"}),c("path",{d:"M16.485 6.924V0h-1.94v6.924a3.879 3.879 0 101.94 0zm-.97 5.682a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.88z"}),c("path",{className:"euiIcon__fillSecondary",d:"M26.182 26.182h1.939v4.848h-1.939z"}),c("path",{d:"M28.121 16.62V0h-1.94v16.62a3.879 3.879 0 101.94 0zm-.97 5.683a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.879z"}))},QYe=YYe;var pM={};de(pM,{icon:()=>nQe});var Pur=V(ne());var ZYe=["title","titleId"];function rre(){return rre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rQe=function(t){var n=t.title,r=t.titleId,o=eQe(t,ZYe);return c("svg",rre({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M21 2.82L16 .038 11 2.82v2.289l5-2.782 5 2.782v-2.29z"}),c("path",{className:"euiIcon__fillSecondary",d:"M21 7.282L16 4.5l-5 2.782V9.57l5-2.781 5 2.781V7.282z"}),c("path",{d:"M7 5.045L2 7.827v15.577l14 7.788 14-7.788V7.827l-5-2.782v2.289l3 1.669v13.225l-12 6.676-12-6.676V9.003l3-1.669V5.045z"}),c("path",{className:"euiIcon__fillSecondary",fillRule:"evenodd",clipRule:"evenodd",d:"M22 12.5L16 9l-6 3.5v7l6 3.5 6-3.5v-7zm-9.974 1.205L16 11.387l3.974 2.318v4.59L16 20.613l-3.974-2.318v-4.59z"}))},nQe=rQe;var dM={};de(dM,{icon:()=>lQe});var Cur=V(ne());var oQe=["title","titleId"];function nre(){return nre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sQe=function(t){var n=t.title,r=t.titleId,o=iQe(t,oQe);return c("svg",nre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 10h4v2H1V1h30v6h-2V3H3v7zm26 19v-6h2v8H18v-8h2v6h9z"}),c("path",{className:"euiIcon__fillSecondary",d:"M31 10H9v11h12c5.523 0 10-4.477 10-10v-1zm-10 9H11v-7h17.938A8.001 8.001 0 0121 19z"}))},lQe=sQe;var hM={};de(hM,{icon:()=>dQe});var Aur=V(ne());var uQe=["title","titleId"];function ore(){return ore=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pQe=function(t){var n=t.title,r=t.titleId,o=cQe(t,uQe);return c("svg",ore({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M15.5 11.915L27 5.279 19.5.938a7.002 7.002 0 00-7 0l-8 4.62A7 7 0 001 11.62v9.237a7 7 0 003.5 6.061l7.5 4.33V17.98a7 7 0 013.5-6.063zM10 27.785v-9.808a9 9 0 014.5-7.793l8.503-4.91L18.5 2.672a5.003 5.003 0 00-5 0l-8 4.619A5 5 0 003 11.62v9.238a5 5 0 002.5 4.33l4.5 2.598z"}),c("path",{fillRule:"evenodd",className:"euiIcon__fillSecondary",d:"M18.409 13.55a7.089 7.089 0 011.035 1.711A6.93 6.93 0 0120 17.98v13.27l7.5-4.33a7 7 0 003.5-6.061v-9.239a6.992 6.992 0 00-1.587-4.421L18.409 13.55zm2.777.705A8.933 8.933 0 0122 17.979v9.807l4.5-2.598a5 5 0 002.5-4.33V11.62c0-.588-.106-1.161-.303-1.7l-7.511 4.335z"}))},dQe=pQe;var mM={};de(mM,{icon:()=>yQe});var Rur=V(ne());var hQe=["title","titleId"];function ire(){return ire=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gQe=function(t){var n=t.title,r=t.titleId,o=mQe(t,hQe);return c("svg",ire({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M15 0h2v32h-2z"}),c("path",{d:"M0 32h13v-2H2V2h11V0H0zM19 0v2h11v28H19v2h13V0z"}))},yQe=gQe;var vM={};de(vM,{icon:()=>_Qe});var zur=V(ne());var bQe=["title","titleId"];function are(){return are=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function OQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xQe=function(t){var n=t.title,r=t.titleId,o=wQe(t,bQe);return c("svg",are({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M7 17h2v7H7zM12 14h2v10h-2zM17 16h2v8h-2zM22 14h3v2h-3zM22 18h3v2h-3zM22 22h3v2h-3z"}),c("path",{d:"M30.73 24a6.47 6.47 0 01.45-2.19c.337-.9.52-1.85.54-2.81a8.55 8.55 0 00-.54-2.81 6.47 6.47 0 01-.45-2.19 9.2 9.2 0 01.62-2.49c.53-1.57 1.08-3.19.08-4.2-1-1.01-2.41-.44-3.52.05a5.59 5.59 0 01-2.09.64 5.3 5.3 0 01-.59 0L16 .28 6.77 8a5.3 5.3 0 01-.59 0 5.59 5.59 0 01-2.09-.65C3 6.87 1.6 6.25.57 7.31c-1.03 1.06-.45 2.63.08 4.2A9.2 9.2 0 011.27 14a6.47 6.47 0 01-.45 2.19A8.55 8.55 0 00.28 19c.02.96.203 1.91.54 2.81A6.47 6.47 0 011.27 24a9.2 9.2 0 01-.62 2.49c-.53 1.57-1.08 3.19-.08 4.2.353.38.852.59 1.37.58a5.67 5.67 0 002.15-.63A5.59 5.59 0 016.18 30a7.13 7.13 0 012.29.47 8 8 0 002.62.53 7.37 7.37 0 002.47-.51A7.14 7.14 0 0116 30a6.24 6.24 0 012.14.45 8 8 0 002.77.55 8.08 8.08 0 002.77-.55 6.24 6.24 0 012.14-.45 5.59 5.59 0 012.09.65c1.11.49 2.49 1.11 3.52.05 1.03-1.06.45-2.63-.08-4.2a9.2 9.2 0 01-.62-2.5zM21.17 7h-.26a8 8 0 00-2.77.55A6.24 6.24 0 0116 8a6.24 6.24 0 01-2.14-.45A8 8 0 0011.09 7h-.26L16 2.72 21.17 7zm8.89 22.27a4.42 4.42 0 01-1.34-.46 7.08 7.08 0 00-2.9-.82 8.14 8.14 0 00-2.78.55 6.13 6.13 0 01-2.13.45 6.24 6.24 0 01-2.14-.45A8 8 0 0016 28a9 9 0 00-3.08.6 5.74 5.74 0 01-1.83.4 6.36 6.36 0 01-2-.43A8.72 8.72 0 006.18 28a7.08 7.08 0 00-2.9.82 9.65 9.65 0 01-1.28.52 6.08 6.08 0 01.52-2.21c.403-1 .65-2.055.73-3.13a8.55 8.55 0 00-.54-2.81A6.47 6.47 0 012.27 19a6.47 6.47 0 01.44-2.19c.337-.9.52-1.85.54-2.81a10.48 10.48 0 00-.72-3.13 9 9 0 01-.59-2.16H2c.447.1.88.255 1.29.46a7.08 7.08 0 002.9.82A8.14 8.14 0 009 9.44 6.13 6.13 0 0111.09 9a6.13 6.13 0 012.13.45A8.14 8.14 0 0016 10a8.14 8.14 0 002.78-.55A6.13 6.13 0 0120.91 9a6.13 6.13 0 012.09.44 8.14 8.14 0 002.78.55 7.08 7.08 0 002.9-.82A9.65 9.65 0 0130 8.66a6.08 6.08 0 01-.52 2.21c-.403 1-.65 2.055-.73 3.13.02.96.203 1.91.54 2.81a6.47 6.47 0 01.44 2.19 6.47 6.47 0 01-.44 2.19 8.55 8.55 0 00-.54 2.81c.078 1.074.32 2.13.72 3.13a9 9 0 01.59 2.16v-.02z"}))},_Qe=xQe;var gM={};de(gM,{icon:()=>PQe});var Lur=V(ne());var SQe=["title","titleId"];function sre(){return sre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function IQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kQe=function(t){var n=t.title,r=t.titleId,o=EQe(t,SQe);return c("svg",sre({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M22.5 24a5.5 5.5 0 100-11 5.5 5.5 0 000 11zm0 2a7.5 7.5 0 100-15 7.5 7.5 0 000 15z"}),c("path",{d:"M30.293 27.707l-4-4 1.414-1.414 4 4-1.414 1.414zM6 4H2v27h25v-3h-2v1H4V6h2V4zm19 6h2V4h-4v2h2v4z"}),c("path",{className:"euiIcon__fillSecondary",fillRule:"evenodd",clipRule:"evenodd",d:"M16.381 3.024l.538 1.158h2.274l.636 2.545H9.68l.637-2.545h2.558l.538-1.158c.292-.63.955-1.024 1.484-1.024.53 0 1.193.394 1.485 1.024zm6.01 5.703l-1.636-6.545h-2.56C17.6.898 16.262 0 14.897 0c-1.364 0-2.703.898-3.299 2.182H8.755L7.118 8.727h15.273zM7 15h6v-2H7v2zm6 5H7v-2h6v2zm-6 5h6v-2H7v2z"}))},PQe=kQe;var yM={};de(yM,{icon:()=>MQe});var Bur=V(ne());var jQe=["title","titleId"];function lre(){return lre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AQe=function(t){var n=t.title,r=t.titleId,o=CQe(t,jQe);return c("svg",lre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.276 29l.594 2H0l7.621-14.29.811 2.73L3.333 29h7.943zM28.92 31l-4.987-16.598A16 16 0 008.688 3l1.8 6H8.4L6 1h2.607a18 18 0 0117.241 12.828L31 31h-2.08z"}),c("path",{className:"euiIcon__fillSecondary",d:"M12.037 14.02L16.492 29h6.827l-2.333-7.849a10 10 0 00-8.949-7.13zM9.35 12h2.05a12 12 0 0111.503 8.581L26 31H15L9.35 12z"}))},MQe=AQe;var bM={};de(bM,{icon:()=>LQe});var Hur=V(ne());var RQe=["title","titleId"];function ure(){return ure=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NQe=function(t){var n=t.title,r=t.titleId,o=DQe(t,RQe);return c("svg",ure({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M29 9H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v3a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v3a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}),c("path",{className:"euiIcon__fillSecondary",d:"M29 32H3a3 3 0 01-3-3V14a3 3 0 013-3h26a3 3 0 013 3v15a3 3 0 01-3 3zM3 13a1 1 0 00-1 1v15a1 1 0 001 1h26a1 1 0 001-1V14a1 1 0 00-1-1H3z"}),c("path",{d:"M7.29 17.71l3.3 3.29-3.3 3.29 1.42 1.42 4.7-4.71-4.7-4.71zM15 24h9v2h-9z"}))},LQe=NQe;var wM={};de(wM,{icon:()=>$Qe});var Vur=V(ne());var FQe=["title","titleId"];function cre(){return cre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var HQe=function(t){var n=t.title,r=t.titleId,o=BQe(t,FQe);return c("svg",cre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M0 0v16h8.7l5.3-6V0H0zm2 2h10v7H7v5H2V2zm8.45 9L9 12.64V11h1.45zM18 16v16h8.7l5.3-6V16H18zm2 2h10v7h-5v5h-5V18zm8.45 9L27 28.64V27h1.45z"}),c("path",{className:"euiIcon__fillSecondary",d:"M5 18H3c0 6.075 4.925 11 11 11h2v-2h-2a9 9 0 01-9-9zM18 3h-2v2h2a9 9 0 019 9h2c0-6.075-4.925-11-11-11z"}))},$Qe=HQe;var OM={};de(OM,{icon:()=>JQe});var Uur=V(ne());var VQe=["title","titleId"];function fre(){return fre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GQe=function(t){var n=t.title,r=t.titleId,o=qQe(t,VQe);return c("svg",fre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M29 9H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v3a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v3a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}),c("path",{className:"euiIcon__fillSecondary",d:"M12 20H3a3 3 0 01-3-3v-3a3 3 0 013-3h9a3 3 0 013 3v3a3 3 0 01-3 3zm-9-7a1 1 0 00-1 1v3a1 1 0 001 1h9a1 1 0 001-1v-3a1 1 0 00-1-1H3z"}),c("path",{d:"M12 31H3a3 3 0 01-3-3v-3a3 3 0 013-3h9a3 3 0 013 3v3a3 3 0 01-3 3zm-9-7a1 1 0 00-1 1v3a1 1 0 001 1h9a1 1 0 001-1v-3a1 1 0 00-1-1H3z"}),c("path",{className:"euiIcon__fillSecondary",d:"M29 31h-9a3 3 0 01-3-3V14a3 3 0 013-3h9a3 3 0 013 3v14a3 3 0 01-3 3zm-9-18a1 1 0 00-1 1v14a1 1 0 001 1h9a1 1 0 001-1V14a1 1 0 00-1-1h-9z"}))},JQe=GQe;var xM={};de(xM,{icon:()=>ZQe});var Jur=V(ne());var XQe=["title","titleId"];function pre(){return pre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var QQe=function(t){var n=t.title,r=t.titleId,o=KQe(t,XQe);return c("svg",pre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M21 28h-2v-8.49l.6-.26A9 9 0 0021 3.52V11H11V3.52a9 9 0 001.4 15.73l.6.26V28h-2v-7.21A11 11 0 0111.6.92L13 .31V9h6V.31l1.4.61a11 11 0 01.6 19.87V28z"}),c("path",{className:"euiIcon__fillSecondary",d:"M11 30h10v2H11z"}))},ZQe=QQe;var _M={};de(_M,{icon:()=>oZe});var Kur=V(ne());var eZe=["title","titleId"];function dre(){return dre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nZe=function(t){var n=t.title,r=t.titleId,o=tZe(t,eZe);return c("svg",dre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M8.33 23.67l4.79-10.55 10.55-4.79-4.79 10.55-10.55 4.79zm6.3-9l-2.28 5 5-2.28 2.28-5-5 2.28z"}),c("path",{d:"M16 0C7.163 0 0 7.163 0 16s7.163 16 16 16 16-7.163 16-16A16 16 0 0016 0zm1 29.95V28h-2v1.95A14 14 0 012.05 17H4v-2H2.05A14 14 0 0115 2.05V4h2V2.05A14 14 0 0129.95 15H28v2h1.95A14 14 0 0117 29.95z"}))},oZe=nZe;var SM={};de(SM,{icon:()=>uZe});var Qur=V(ne());var iZe=["title","titleId"];function hre(){return hre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lZe=function(t){var n=t.title,r=t.titleId,o=aZe(t,iZe);return c("svg",hre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M3 22h3v2H1V1h23v5h-2V3H3z"}),c("path",{d:"M15.228 29c1.492-1.678 1.353-2.859.009-5.654-.049-.1-.049-.1-.097-.203-1.369-2.855-1.626-4.491-.325-6.582 2.796-4.498 9.514-2.642 14.185 2.317V10H10v19h5.228zm2.47 0H29v-6.983c-3.88-5.406-10.376-7.795-12.487-4.4-.83 1.336-.669 2.37.43 4.662l.097.2c1.352 2.814 1.731 4.63.659 6.521zM31 8v23H8V8h23z"}))},uZe=lZe;var EM={};de(EM,{icon:()=>hZe});var ecr=V(ne());var cZe=["title","titleId"];function mre(){return mre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dZe=function(t){var n=t.title,r=t.titleId,o=fZe(t,cZe);return c("svg",mre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M8 18h16v2H8zM8 13h9v2H8zM8 23h16v2H8z"}),c("path",{d:"M21.41 0H5a3 3 0 00-3 3v26a3 3 0 003 3h22a3 3 0 003-3V8.59L21.41 0zM22 3.41L26.59 8H22V3.41zM27 30H5a1 1 0 01-1-1V3a1 1 0 011-1h15v8h8v19a1 1 0 01-1 1z"}))},hZe=dZe;var IM={};de(IM,{icon:()=>bZe});var rcr=V(ne());var mZe=["title","titleId"];function vre(){return vre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yZe=function(t){var n=t.title,r=t.titleId,o=vZe(t,mZe);return c("svg",vre({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2.996 18.636L0 20.434v6.132l6 3.6 5-3 5 3 5-3 5 3 6-3.6v-6.132l-5-3v-5l-5-3v-5l-6-3.6-6 3.6v2.832l2 .033V5.566l4-2.4 4 2.4v3.868l-1.996 1.197 1 1.733L21 11.166l4 2.4v3.868l-4 2.4-2.257-1.354-.971 1.75L20 21.565v3.868l-4 2.4-4-2.4v-1.7l-2-.033v1.733l-4 2.4-4-2.4v-3.868l1.996-1.197-1-1.733zM22 25.434v-3.868l4-2.4 4 2.4v3.868l-4 2.4-4-2.4z"}),c("path",{className:"euiIcon__fillSecondary",d:"M11 22.166l-6-3.6v-6.132l6-3.6 6 3.6v6.132l-6 3.6zm4-4.732v-3.868l-4-2.4-4 2.4v3.868l4 2.4 4-2.4z"}))},bZe=yZe;var kM={};de(kM,{icon:()=>SZe});var ocr=V(ne());var wZe=["title","titleId"];function gre(){return gre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _Ze=function(t){var n=t.title,r=t.titleId,o=OZe(t,wZe);return c("svg",gre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M29.014 23.89l2.296 1.145L16 32.101.53 24.961l2.49-1.056 2.453 1.132-.003.002L16 29.899l10.69-4.934-.003-.001 2.327-1.074zm-4.972-7.482l7.268 3.627L16 27.101.53 19.961l7.668-3.252c.392.486.838 1.02 1.34 1.604L5.47 20.039 16 24.899l10.69-4.934-3.954-1.973c.493-.58.928-1.107 1.306-1.584z"}),c("path",{d:"M18 9a2 2 0 10-4 0 2 2 0 004 0zm2 0a4 4 0 11-8 0 4 4 0 018 0zm-3.268 12.681l-.732.787-.732-.787c-3.557-3.824-5.817-6.462-6.81-7.96A8.746 8.746 0 017 8.875C7 3.97 11.033 0 16 0s9 3.97 9 8.875a8.746 8.746 0 01-1.459 4.846c-.992 1.498-3.252 4.136-6.809 7.96zm5.142-9.064A6.747 6.747 0 0023 8.875C23 5.081 19.87 2 16 2S9 5.081 9 8.875c0 1.349.394 2.636 1.126 3.742.846 1.277 2.812 3.593 5.874 6.912 3.062-3.32 5.028-5.635 5.874-6.912z"}))},SZe=_Ze;var PM={};de(PM,{icon:()=>jZe});var acr=V(ne());var EZe=["title","titleId"];function yre(){return yre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PZe=function(t){var n=t.title,r=t.titleId,o=IZe(t,EZe);return c("svg",yre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M24 20a4 4 0 110-8 4 4 0 010 8zm0-6a2 2 0 100 4 2 2 0 000-4zm-8.2-5.62A4 4 0 1118 1.06a4 4 0 01-2.2 7.32zm0-6a2 2 0 10.01 0h-.01zm.01 29.24a4 4 0 11-.083-8 4 4 0 01.083 8zm0-6a2 2 0 10.39 0 2 2 0 00-.4 0h.01z"}),c("path",{d:"M18 17v-2h-6.14a4 4 0 00-.86-1.64l2.31-3.44-1.68-1.12-2.31 3.44A4 4 0 008 12a4 4 0 100 8 4 4 0 001.32-.24l2.31 3.44 1.66-1.12L11 18.64a4 4 0 00.86-1.64H18zM6 16a2 2 0 114 0 2 2 0 01-4 0z"}))},jZe=PZe;var jM={};de(jM,{icon:()=>RZe});var lcr=V(ne());var CZe=["title","titleId"];function bre(){return bre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function AZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MZe=function(t){var n=t.title,r=t.titleId,o=TZe(t,CZe);return c("svg",bre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.727 2.91V.97c-1.357 0-4.18 0-5.818 1.94-.97 1.182-1.328 2.908-.97 4.983.563 3.307.97 6.332.301 7.157-.3.31-.97.465-2.24.465v1.94c1.27 0 1.94.155 2.25.494.698.824.262 3.879-.3 7.156-.35 2.124-.01 3.802.96 4.956C5.527 32 8.35 32 9.726 32v-1.94c-1.144 0-3.287 0-4.315-1.221a4.112 4.112 0 01-.533-3.414c.843-5.042.97-7.37-.136-8.727-.068-.077-.145-.136-.213-.203-.068-.068.145-.127.213-.204 1.144-1.367.97-3.695.136-8.727a4.112 4.112 0 01.543-3.414C6.44 2.91 8.583 2.91 9.727 2.91zM32.03 17.454v-1.94c-1.27 0-1.94-.155-2.25-.494-.698-.825-.261-3.88.301-7.157.35-2.123 0-3.801-.97-4.984C27.493.94 24.672.94 23.294.94v1.97c1.145 0 3.288 0 4.315 1.22a4.112 4.112 0 01.544 3.414c-.844 5.043-.97 7.37.135 8.728.068.077.146.135.214.203.067.068-.146.126-.214.204-1.144 1.367-.97 3.694-.135 8.727.329 1.162.13 2.41-.544 3.413-1.018 1.242-3.16 1.242-4.305 1.242V32c1.358 0 4.18 0 5.818-1.94.97-1.182 1.329-2.908.97-4.984-.563-3.306-.97-6.332-.3-7.156.3-.31.969-.465 2.24-.465z"}),c("path",{className:"euiIcon__fillSecondary",d:"M26.212 15.515h-2.007a7.758 7.758 0 00-6.72-6.72V6.788h-1.94v2.007a7.758 7.758 0 00-6.72 6.72H6.818v1.94h2.007a7.758 7.758 0 006.72 6.72v2.007h1.94v-2.007a7.758 7.758 0 006.72-6.72h2.007v-1.94zm-8.727 6.7v-1.851h-1.94v1.852a5.818 5.818 0 01-4.76-4.761h1.851v-1.94h-1.852a5.818 5.818 0 014.761-4.761v1.852h1.94v-1.852a5.818 5.818 0 014.761 4.761h-1.852v1.94h1.852a5.818 5.818 0 01-4.761 4.76z"}))},RZe=MZe;var CM={};de(CM,{icon:()=>FZe});var ccr=V(ne());var DZe=["title","titleId"];function wre(){return wre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LZe=function(t){var n=t.title,r=t.titleId,o=zZe(t,DZe);return c("svg",wre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M4.14 15.39a8.058 8.058 0 01-2.2-4.043A6.788 6.788 0 014.198 5.47a6.73 6.73 0 018.727-.213l1.26-1.464a8.65 8.65 0 00-11.277.232A8.727 8.727 0 00.068 11.6a10.172 10.172 0 002.793 5.275l1.28-1.484z"}),c("path",{d:"M15.515 31.274L4.548 18.454 15.855 4.763a8.67 8.67 0 0112.266-.746 8.727 8.727 0 012.91 7.205c-.243 2.695-2.037 4.732-3.482 6.37L15.515 31.275zm-8.427-12.82l8.427 9.862 10.55-11.995c1.32-1.503 2.822-3.21 3.007-5.265a6.788 6.788 0 00-2.24-5.586 6.73 6.73 0 00-9.504.563L7.088 18.455z"}))},FZe=LZe;var TM={};de(TM,{icon:()=>VZe});var pcr=V(ne());var BZe=["title","titleId"];function Ore(){return Ore=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $Ze=function(t){var n=t.title,r=t.titleId,o=WZe(t,BZe);return c("svg",Ore({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),c("path",{className:"euiIcon__fillSecondary",d:"M4 32a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zM23 8V6h-2.1a5 5 0 00-.73-1.75l1.49-1.49-1.42-1.42-1.49 1.49A5 5 0 0017 2.1V0h-2v2.1a5 5 0 00-1.75.73l-1.49-1.49-1.42 1.42 1.49 1.49A5 5 0 0011.1 6H9v2h2.1a5 5 0 00.73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 001.76.74V14h2v-2.1a5 5 0 001.75-.73l1.49 1.49 1.41-1.41-1.48-1.5A5 5 0 0020.9 8H23zm-7 2a3 3 0 110-6 3 3 0 010 6z"}),c("path",{d:"M16 8a1 1 0 01-1-1 1.39 1.39 0 010-.2.65.65 0 01.06-.18.74.74 0 01.09-.18 1.61 1.61 0 01.12-.15.93.93 0 01.33-.21 1 1 0 011.09.21l.12.15a.78.78 0 01.09.18.62.62 0 01.1.18 1.27 1.27 0 010 .2 1 1 0 01-1 1z"}))},VZe=$Ze;var AM={};de(AM,{icon:()=>XZe});var hcr=V(ne());var qZe=["title","titleId"];function xre(){return xre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JZe=function(t){var n=t.title,r=t.titleId,o=UZe(t,qZe);return c("svg",xre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M20 14h-8a3 3 0 01-3-3V3a3 3 0 013-3h8a3 3 0 013 3v8a3 3 0 01-3 3zM12 2a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V3a1 1 0 00-1-1h-8zM17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),c("path",{className:"euiIcon__fillSecondary",d:"M4 32a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zM13 4h6v2h-6zM13 8h6v2h-6z"}))},XZe=JZe;var MM={};de(MM,{icon:()=>eet});var vcr=V(ne());var KZe=["title","titleId"];function _re(){return _re=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZZe=function(t){var n=t.title,r=t.titleId,o=YZe(t,KZe);return c("svg",_re({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M32 26v-2h-2.1a5 5 0 00-.73-1.75l1.49-1.49-1.41-1.41-1.49 1.49A5 5 0 0026 20.1V18h-2v2.1a5 5 0 00-1.75.73l-1.49-1.49-1.41 1.41 1.49 1.49A5 5 0 0020.1 24H18v2h2.1a5 5 0 00.73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 001.76.74V32h2v-2.1a5 5 0 001.75-.73l1.49 1.49 1.41-1.41-1.49-1.49A5 5 0 0029.9 26H32zm-7 2a3 3 0 110-6 3 3 0 010 6z"}),c("path",{d:"M25.71 24.29a1 1 0 00-1.09-.21 1.15 1.15 0 00-.33.21.93.93 0 00-.21.33 1 1 0 001.3 1.3 1.15 1.15 0 00.33-.21 1 1 0 00.21-1.09.94.94 0 00-.21-.33z"}),c("path",{className:"euiIcon__fillSecondary",d:"M5 6h16v2H5zM5 12h16v2H5zM5 18h10v2H5zM5 24h8v2H5z"}),c("path",{d:"M16 32H3a3 3 0 01-3-3V3a3 3 0 013-3h20a3 3 0 013 3v13h-2V3a1 1 0 00-1-1H3a1 1 0 00-1 1v26a1 1 0 001 1h13v2z"}))},eet=ZZe;var RM={};de(RM,{icon:()=>iet});var ycr=V(ne());var tet=["title","titleId"];function Sre(){return Sre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function net(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oet=function(t){var n=t.title,r=t.titleId,o=ret(t,tet);return c("svg",Sre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M23.793 14.293l1.414 1.414-6.408 6.409-3.75-3.25-4.342 4.341-1.414-1.414 5.658-5.659 3.75 3.25 5.092-5.091zM12 11v5l-2 2v-7h2zm10-6v8l-2 2V5h2zm-5 3v7l-2-2V8h2z"}),c("path",{d:"M17 0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-3.782 0-7.238-1.4-9.876-3.71l-5.417 5.417-1.414-1.414 5.417-5.417A14.943 14.943 0 012 15c0-1.05.108-2.074.313-3.062l1.906.672C4.075 13.385 4 14.184 4 15c0 7.18 5.82 13 13 13s13-5.82 13-13S24.18 2 17 2c-1.002 0-1.978.113-2.915.328l-.75-1.877A15.031 15.031 0 0117 0zM9.621 1.937l.75 1.877a13.062 13.062 0 00-4.82 5.024l-1.907-.673a15.068 15.068 0 015.977-6.228z"}))},iet=oet;var DM={};de(DM,{icon:()=>fet});var wcr=V(ne());var aet=["title","titleId"];function Ere(){return Ere=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cet=function(t){var n=t.title,r=t.titleId,o=set(t,aet);return c("svg",Ere({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1 8c3.983 0 7.732 1.013 11.001 2.797v2.312A20.887 20.887 0 002 10.023v11.025c4.85.462 9.27 4.183 9.955 8.691l.035.261H12v2h-1.938l-.018-1.236c-.116-4.015-4.336-7.631-8.793-7.76L0 22.986V8h1zm13-8h1c9.28 0 16.825 7.437 16.997 16.677L32 17v15h-2V17c0-7.84-6.014-14.274-13.68-14.943L16 2.033v7.681l-2-1.143V0h1-1z"}),c("path",{className:"euiIcon__fillSecondary",d:"M26.997 30.636L27.009 32H14V11.305l1.483.82c6.994 3.861 11.382 10.735 11.514 18.51zm-2.048-1.04C24.505 23.556 21.205 18.2 16 14.771V30h8.974l-.025-.404z"}))},fet=cet;var zM={};de(zM,{icon:()=>vet});var xcr=V(ne());var pet=["title","titleId"];function Ire(){return Ire=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function het(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var met=function(t){var n=t.title,r=t.titleId,o=det(t,pet);return c("svg",Ire({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M16 21a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z"}),c("path",{d:"M20 32h-8v-4.06a1 1 0 00-1.61-.67l-2.88 2.87-5.65-5.65 2.87-2.87a.92.92 0 00.2-1 .93.93 0 00-.86-.6H0V12h4.06a.92.92 0 00.85-.58.94.94 0 00-.19-1L1.86 7.51l5.65-5.65 2.87 2.87A1 1 0 0012 4.06V0h8v4.06a1 1 0 001.61.67l2.87-2.87 5.66 5.66-2.87 2.87a.92.92 0 00-.2 1 .93.93 0 00.86.6H32v8h-4.06a.92.92 0 00-.85.58.94.94 0 00.19 1l2.87 2.87-5.66 5.66-2.87-2.87a1 1 0 00-1.61.67L20 32zm-6-2h4v-2.06a3 3 0 015-2.08l1.46 1.46 2.83-2.83L25.86 23a3 3 0 012.08-5H30v-4h-2.06a3 3 0 01-2.08-5l1.46-1.46-2.83-2.85L23 6.14a3 3 0 01-5-2.08V2h-4v2.06a3 3 0 01-5 2.08L7.51 4.69 4.69 7.51 6.14 9a3 3 0 01-2.08 5H2v4h2.06a3 3 0 012.08 5l-1.45 1.49 2.83 2.83L9 25.86a3 3 0 015 2.08V30z"}))},vet=met;var NM={};de(NM,{icon:()=>Oet});var Scr=V(ne());var get=["title","titleId"];function kre(){return kre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wet=function(t){var n=t.title,r=t.titleId,o=yet(t,get);return c("svg",kre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),c("path",{className:"euiIcon__fillSecondary",d:"M28 16h-2c0-5.523-4.477-10-10-10S6 10.477 6 16H4C4 9.373 9.373 4 16 4s12 5.373 12 12z"}),c("path",{d:"M21.71 11.71L20.3 10.3 18 12.57a4 4 0 00-2-.57 4 4 0 104 4 4 4 0 00-.57-2l2.28-2.29zM16 18a2 2 0 110-4 2 2 0 010 4z"}))},Oet=wet;var LM={};de(LM,{icon:()=>ket});var Icr=V(ne());var xet=["title","titleId"];function Pre(){return Pre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iet=function(t){var n=t.title,r=t.titleId,o=_et(t,xet);return c("svg",Pre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M30 19.092v12.88H2v-5.386l6.747-6.747.708.708c.236.236.48.463.733.68L4 27.414v2.558h24v-8.91c.186-.166.369-.339.546-.516L30 19.092zm-20.85-3.19A10.955 10.955 0 018 11C8 4.925 12.925 0 19 0s11 4.925 11 11c0 1.76-.414 3.425-1.15 4.9l-1.51-1.51A8.973 8.973 0 0028 11a9 9 0 10-17.34 3.391l-1.51 1.51z"}),c("path",{className:"euiIcon__fillSecondary",d:"M19 20a8.96 8.96 0 005.618-1.968l-4.202-4.204a2 2 0 00-2.828 0l-4.205 4.205A8.96 8.96 0 0019 20zm-2.826-7.586a4 4 0 015.656 0l5.656 5.657-.707.707A10.967 10.967 0 0119 22a10.967 10.967 0 01-7.778-3.221l-.707-.707 5.659-5.658z"}))},ket=Iet;var FM={};de(FM,{icon:()=>Aet});var Pcr=V(ne());var Pet=["title","titleId"];function jre(){return jre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tet=function(t){var n=t.title,r=t.titleId,o=jet(t,Pet);return c("svg",jre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M10 18v.56a1 1 0 01-.68.95L3 21.61V10a1 1 0 01.4-.8l3.2-2.4-1.2-1.6-3.2 2.4A3 3 0 001 10v12a3 3 0 001.2 2.4l3.2 2.4 1.2-1.6-2.47-1.85 5.82-1.95A3 3 0 0012 18.56V18h-2zM29.8 7.6l-3.2-2.4-1.2 1.6 3.2 2.4a1 1 0 01.4.8v11.61l-6.32-2.11a1 1 0 01-.68-.95V18h-2v.56a3 3 0 002.05 2.85l5.82 1.94-2.47 1.85 1.2 1.6 3.2-2.4A3 3 0 0031 22V10a3 3 0 00-1.2-2.4z"}),c("path",{d:"M11 6A3 3 0 018.88.88a3.07 3.07 0 014.24 0A3 3 0 0111 6zm0-4a1 1 0 10-.012 2A1 1 0 0011 2zm0 30a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0111 32zm0-4a1 1 0 10-.012 2A1 1 0 0011 28zm0-12a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0111 16zm0-4a1 1 0 10-.012 2A1 1 0 0011 12zm10-6A3 3 0 0118.88.88a3.07 3.07 0 014.24 0A3 3 0 0121 6zm0-4a1 1 0 10-.012 2A1 1 0 0021 2zm0 30a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0121 32zm0-4a1 1 0 10-.012 2A1 1 0 0021 28zm0-12a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0121 16zm0-4a1 1 0 10-.012 2A1 1 0 0021 12z"}))},Aet=Tet;var BM={};de(BM,{icon:()=>Net});var Ccr=V(ne());var Met=["title","titleId"];function Cre(){return Cre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Det(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zet=function(t){var n=t.title,r=t.titleId,o=Ret(t,Met);return c("svg",Cre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.81 15.19A8.94 8.94 0 0115.62 3.86l.38.42.38-.42a8.94 8.94 0 0114.26 10.68l-1.7-1.07a6.94 6.94 0 00-11.07-8.28L16 7.29l-1.87-2.1A6.94 6.94 0 003.41 14l-1.6 1.19zM16 31.18l-7.74-8.51 1.48-1.34L16 28.21l6.26-6.88 1.48 1.34z"}),c("path",{className:"euiIcon__fillSecondary",d:"M16.16 23.29l-4.1-7.17L10.62 19H0v-2h9.38l2.56-5.12 3.9 6.83 4.13-10.32L23.66 17H32v2h-9.66l-2.31-5.39z"}))},Net=zet;var WM={};de(WM,{icon:()=>Het});var Acr=V(ne());var Let=["title","titleId"];function Tre(){return Tre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wet=function(t){var n=t.title,r=t.titleId,o=Fet(t,Let);return c("svg",Tre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M25 2h-5V0h-2v2h-3V0h-2v2h-3V0H8v2H3v26h22V2zm-2 24H5V4h3v2h2V4h3v2h2V4h3v2h2V4h3v22z"}),c("path",{d:"M27 7v23H8v2h21V7z"}),c("path",{className:"euiIcon__fillSecondary",d:"M8 12h12v2H8zM8 17h12v2H8z"}))},Het=Wet;var HM={};de(HM,{icon:()=>Get});var Rcr=V(ne());var $et=["title","titleId"];function Are(){return Are=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uet=function(t){var n=t.title,r=t.titleId,o=Vet(t,$et);return c("svg",Are({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M16 20a4 4 0 110-8 4 4 0 010 8zm0-6a2 2 0 100 4 2 2 0 000-4z"}),c("path",{d:"M8 4a4 4 0 10-4 4 4 4 0 002-.57l5.27 5.27 1.41-1.41L7.43 6A4 4 0 008 4zM4 6a2 2 0 110-4 2 2 0 010 4zm16.71 6.71L26 7.43A4 4 0 0028 8a4 4 0 10-4-4 4 4 0 00.57 2l-5.27 5.27 1.41 1.44zM28 2a2 2 0 110 4 2 2 0 010-4zM11.29 19.29L6 24.57A4 4 0 004 24a4 4 0 104 4 4 4 0 00-.57-2l5.27-5.27-1.41-1.44zM4 30a2 2 0 110-4 2 2 0 010 4zm24-6a4 4 0 00-2 .57l-5.27-5.27-1.41 1.41L24.57 26a4 4 0 00-.57 2 4 4 0 104-4zm0 6a2 2 0 110-4 2 2 0 010 4z"}))},Get=Uet;var $M={};de($M,{icon:()=>Qet});var zcr=V(ne());var Jet=["title","titleId"];function Mre(){return Mre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ket(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yet=function(t){var n=t.title,r=t.titleId,o=Xet(t,Jet);return c("svg",Mre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M29 12a3 3 0 00-3 3h-4a3 3 0 00-3-3h-6a3 3 0 00-3 3H6a3 3 0 00-3-3H0v14h3a3 3 0 003-3h4a3 3 0 003 3h6a3 3 0 003-3h4a3 3 0 003 3h3V12h-3zM3 24H2V14h1a1 1 0 011 1v8a1 1 0 01-1 1zm17-3v2a1 1 0 01-1 1h-6a1 1 0 01-1-1v-2H6v-4h6v-2a1 1 0 011-1h6a1 1 0 011 1v2h6v4h-6zm10 3h-1a1 1 0 01-1-1v-8a1 1 0 011-1h1v10z"}),c("path",{className:"euiIcon__fillSecondary",d:"M22 6H10v2h5v2h2V8h5z"}))},Qet=Yet;var VM={};de(VM,{icon:()=>ntt});var Lcr=V(ne());var Zet=["title","titleId"];function Rre(){return Rre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ttt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rtt=function(t){var n=t.title,r=t.titleId,o=ett(t,Zet);return c("svg",Rre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),c("path",{className:"euiIcon__fillSecondary",d:"M15 4h2v9.17A3.009 3.009 0 0118.83 15H26v2h-7.17A3.001 3.001 0 1115 13.17V4zm1 13a1 1 0 100-2 1 1 0 000 2z"}))},ntt=rtt;var qM={};de(qM,{icon:()=>ltt});var Bcr=V(ne());var ott=["title","titleId"];function Dre(){return Dre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function att(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var stt=function(t){var n=t.title,r=t.titleId,o=itt(t,ott);return c("svg",Dre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M25 5h-.17v2H25a1 1 0 011 1v20a1 1 0 01-1 1H7a1 1 0 01-1-1V8a1 1 0 011-1h.17V5H7a3 3 0 00-3 3v20a3 3 0 003 3h18a3 3 0 003-3V8a3 3 0 00-3-3z"}),c("path",{d:"M23 3h-3V0h-8v3H9v6h14V3zm-2 4H11V5h3V2h4v3h3v2z"}),c("path",{className:"euiIcon__fillSecondary",d:"M10 13h12v2H10zM10 18h12v2H10zM10 23h12v2H10z"}))},ltt=stt;var UM={};de(UM,{icon:()=>dtt});var Hcr=V(ne());var utt=["title","titleId"];function zre(){return zre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ftt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ptt=function(t){var n=t.title,r=t.titleId,o=ctt(t,utt);return c("svg",zre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M20.38 7.001L17 9.619V0h-2v9.619l-3.37-2.618-1.25 1.513L16 12.878l5.63-4.364z"}),c("path",{d:"M21.06.165l-1.11 1.61 9.25 5.983L16 16.29 2.8 7.758l9.25-5.983-1.1-1.61L0 7.234v13.653l16 10.337 16-10.337V7.234L21.06.164zM2 9.57l13 8.407v10.279L2 19.84V9.57zm15 18.676V17.978l13-8.407V19.85l-13 8.397z"}))},dtt=ptt;var GM={};de(GM,{icon:()=>ytt});var Vcr=V(ne());var htt=["title","titleId"];function Nre(){return Nre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gtt=function(t){var n=t.title,r=t.titleId,o=mtt(t,htt);return c("svg",Nre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M11.63 8h7.38v2h-7.38z"}),c("path",{d:"M7 8h3.19v2H7z"}),c("path",{className:"euiIcon__fillSecondary",d:"M7 16h7.38v2H7z"}),c("path",{d:"M15.81 16H19v2h-3.19zM7 12h9v2H7z"}),c("path",{d:"M13 0C5.82 0 0 5.82 0 13s5.82 13 13 13 13-5.82 13-13A13 13 0 0013 0zm0 24C6.925 24 2 19.075 2 13S6.925 2 13 2s11 4.925 11 11-4.925 11-11 11zM22.581 23.993l1.414-1.414 7.708 7.708-1.414 1.414z"}))},ytt=gtt;var JM={};de(JM,{icon:()=>_tt});var Ucr=V(ne());var btt=["title","titleId"];function Lre(){return Lre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ott(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xtt=function(t){var n=t.title,r=t.titleId,o=wtt(t,btt);return c("svg",Lre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14 32l-.36-.14A21.07 21.07 0 010 12.07V5.44L14 .06l14 5.38v6.63a21.07 21.07 0 01-13.64 19.78L14 32zM2 6.82v5.25a19.08 19.08 0 0012 17.77 19.08 19.08 0 0012-17.77V6.82L14 2.2 2 6.82z"}),c("path",{className:"euiIcon__fillSecondary",d:"M9 17.83h2V23H9zM11 10.18V7H9v3.18a3 3 0 102 0zM10 14a1 1 0 110-2 1 1 0 010 2zM17 7h2v5.17h-2zM21 17a3 3 0 10-4 2.82V23h2v-3.18A3 3 0 0021 17zm-3 1a1 1 0 110-2 1 1 0 010 2z"}))},_tt=xtt;var XM={};de(XM,{icon:()=>Ptt});var Jcr=V(ne());var Stt=["title","titleId"];function Fre(){return Fre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Itt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ktt=function(t){var n=t.title,r=t.titleId,o=Ett(t,Stt);return c("svg",Fre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 10h4v2H5v7.928c0 1.299.808 2.795 2.88 4.48 1.83 1.489 4.524 3.02 8.12 4.584V26h2v5.992l-1.38-.567c-4.372-1.797-7.724-3.613-10-5.465C4.358 24.122 3 22.114 3 19.928V10z"}),c("path",{className:"euiIcon__fillSecondary",d:"M9 10h9v14l-1.272-.458c-1.367-.494-3.23-1.314-4.768-2.39C10.484 20.118 9 18.636 9 16.761V10zm1.895 1.876v4.887c0 .877.744 1.867 2.158 2.856.937.656 2.038 1.219 3.052 1.657v-9.4h-5.21z"}),c("path",{d:"M29 1H9v7h2V2.966h16V16.73c0 .558-.245 1.128-.756 1.72-.515.596-1.256 1.158-2.12 1.668-1.381.818-2.961 1.434-4.124 1.817V24c1.26-.378 3.334-1.12 5.155-2.197.965-.57 1.905-1.261 2.612-2.08.712-.822 1.233-1.827 1.233-2.992V1z"}))},Ptt=ktt;var KM={};de(KM,{icon:()=>Mtt});var Kcr=V(ne());var jtt=["title","titleId"];function Bre(){return Bre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ttt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Att=function(t){var n=t.title,r=t.titleId,o=Ctt(t,jtt);return c("svg",Bre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M4 4h6v2H4zM22 4h6v2h-6zM4 22h6v2H4z"}),c("path",{d:"M0 14h14V0H0v14zM2 2h10v10H2V2zm16-2v14h14V0H18zm12 12H20V2h10v10zM0 32h14V18H0v14zm2-12h10v10H2V20zm16 12h14V18H18v14zm2-12h10v10H20V20z"}),c("path",{className:"euiIcon__fillSecondary",d:"M22 22h6v2h-6z"}))},Mtt=Att;var YM={};de(YM,{icon:()=>Ltt});var Qcr=V(ne());var Rtt=["title","titleId"];function Wre(){return Wre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ztt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ntt=function(t){var n=t.title,r=t.titleId,o=Dtt(t,Rtt);return c("svg",Wre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M18 6h9v2h-9zM5 6h9v2H5zM5 12h9v2H5zM18 12h9v2h-9zM5 18h9v2H5zM18 18h9v2h-9zM18 24h9v2h-9zM5 24h9v2H5z"}),c("path",{d:"M29 32H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v26a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v26a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},Ltt=Ntt;var QM={};de(QM,{icon:()=>$tt});var efr=V(ne());var Ftt=["title","titleId"];function Hre(){return Hre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Htt=function(t){var n=t.title,r=t.titleId,o=Btt(t,Ftt);return c("svg",Hre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 4v20.34L16 32l12-7.64V4H4zm22 2v4h-4a3 3 0 00-3 3v5h-6v-5a3 3 0 00-3-3H6V6h20zm-7.87 14L16 22.52 13.87 20h4.26zM6 12h4a1 1 0 011 1v6.7l3.69 4.37-2.58 3.06L6 23.24V12zm7.81 16.22l2.19-2.6 2.19 2.6L16 29.61l-2.19-1.39zm6.08-1.09l-2.58-3.06L21 19.7V13a1 1 0 011-1h4v11.24l-6.11 3.89z"}),c("path",{className:"euiIcon__fillSecondary",d:"M4 0h24v2H4z"}))},$tt=Htt;var ZM={};de(ZM,{icon:()=>Jtt});var rfr=V(ne());var Vtt=["title","titleId"];function $re(){return $re=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Utt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gtt=function(t){var n=t.title,r=t.titleId,o=qtt(t,Vtt);return c("svg",$re({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M16 21a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z"}),c("path",{d:"M27.42 19.69a12 12 0 01-23.11-1l2.27-.45-4.32-4.47L0 19.55l2.39-.47a14 14 0 0027 1.23l-1.97-.62zm2.23-6.77a14 14 0 00-27-1.23l1.9.62a12 12 0 0123.11 1l-2.27.45 4.32 4.46L32 12.45l-2.35.47z"}))},Jtt=Gtt;var eR={};de(eR,{icon:()=>Ztt});var ofr=V(ne());var Xtt=["title","titleId"];function Vre(){return Vre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ytt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qtt=function(t){var n=t.title,r=t.titleId,o=Ktt(t,Xtt);return c("svg",Vre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M4.216 12.377A10.948 10.948 0 002.181 17H.153a12.941 12.941 0 012.693-6.118l1.37 1.495zm2.948-2.703l-1.37-1.495A12.94 12.94 0 0113 6v2c-2.144 0-4.144.613-5.836 1.674z"}),c("path",{d:"M26 4.414V19c0 7.18-5.82 13-13 13C6.5 32 1.115 27.23.153 21H2.18c.94 5.12 5.427 9 10.819 9 6.075 0 11-4.925 11-11V4.414l-4.293 4.293-1.414-1.414L25 .586l6.707 6.707-1.414 1.414L26 4.414zm-7.836 9.909l1.472 1.354-7.577 8.235-4.835-4.442 1.353-1.473 3.364 3.09 6.223-6.764z"}))},Ztt=Qtt;var tR={};de(tR,{icon:()=>ort});var afr=V(ne());var ert=["title","titleId"];function qre(){return qre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nrt=function(t){var n=t.title,r=t.titleId,o=trt(t,ert);return c("svg",qre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M19.307 3.21a2.91 2.91 0 10-.223 1.94 11.636 11.636 0 018.232 7.049l1.775-.698a13.576 13.576 0 00-9.784-8.291zm-2.822 1.638a.97.97 0 110-1.939.97.97 0 010 1.94zm-4.267.805l-.717-1.774a13.576 13.576 0 00-8.291 9.784 2.91 2.91 0 101.94.223 11.636 11.636 0 017.068-8.233zm-8.34 11.802a.97.97 0 110-1.94.97.97 0 010 1.94zm12.607 8.727a2.91 2.91 0 00-2.599 1.62 11.636 11.636 0 01-8.233-7.05l-1.774.717a13.576 13.576 0 009.813 8.291 2.91 2.91 0 102.793-3.578zm0 3.879a.97.97 0 110-1.94.97.97 0 010 1.94zM32 16.485a2.91 2.91 0 10-4.199 2.599 11.636 11.636 0 01-7.05 8.232l.718 1.775a13.576 13.576 0 008.291-9.813A2.91 2.91 0 0032 16.485zm-2.91.97a.97.97 0 110-1.94.97.97 0 010 1.94z"}),c("path",{className:"euiIcon__fillSecondary",d:"M19.19 16.35a3.879 3.879 0 10-5.42 0 4.848 4.848 0 00-2.134 4.014v1.939h9.697v-1.94a4.848 4.848 0 00-2.143-4.014zm-4.645-2.774a1.94 1.94 0 113.88 0 1.94 1.94 0 01-3.88 0zm-.97 6.788a2.91 2.91 0 115.819 0h-5.818z"}))},ort=nrt;var rR={};de(rR,{icon:()=>urt});var lfr=V(ne());var irt=["title","titleId"];function Ure(){return Ure=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function srt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lrt=function(t){var n=t.title,r=t.titleId,o=art(t,irt);return c("svg",Ure({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M32 32H4a4 4 0 01-4-4V0h2v28a2 2 0 002 2h28v2z"}),c("path",{d:"M6 20h2v7H6zM16 12h2v15h-2zM26 17h2v10h-2z"}),c("path",{d:"M27 6a3 3 0 00-2.08.84L20 4.36A2.2 2.2 0 0020 4a3 3 0 00-6 0c.001.341.062.68.18 1l-5.6 4.46A3 3 0 007 9a3 3 0 103 3 2.93 2.93 0 00-.18-1l5.6-4.48A3 3 0 0017 7a3 3 0 002.08-.84l5 2.48A2.2 2.2 0 0024 9a3 3 0 103-3zM7 13a1 1 0 110-2 1 1 0 010 2zm10-8a1 1 0 110-2 1 1 0 010 2zm10 5a1 1 0 110-2 1 1 0 010 2z"}))},urt=lrt;var nR={};de(nR,{icon:()=>hrt});var cfr=V(ne());var crt=["title","titleId"];function Gre(){return Gre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function prt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var drt=function(t){var n=t.title,r=t.titleId,o=frt(t,crt);return c("svg",Gre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.74 7.73l-1.5-1.32a13 13 0 000 17.19l1.5-1.32a11 11 0 010-14.54v-.01z"}),c("path",{d:"M6.51 3.66L5 2.34c-6.377 7.24-6.377 18.09 0 25.33l1.5-1.32C.792 19.867.792 10.153 6.5 3.67l.01-.01zm17.25 2.75l-1.5 1.32a11 11 0 010 14.54l1.5 1.32a13 13 0 000-17.19v.01z"}),c("path",{d:"M27 2.34l-1.5 1.32c5.708 6.483 5.708 16.197 0 22.68l1.5 1.33c6.377-7.24 6.377-18.09 0-25.33z"}),c("path",{className:"euiIcon__fillSecondary",d:"M21 15a5 5 0 10-6 4.9V31h2V19.9a5 5 0 004-4.9zm-5 3a3 3 0 110-6 3 3 0 010 6z"}))},hrt=drt;var oR={};de(oR,{icon:()=>brt});var pfr=V(ne());var mrt=["title","titleId"];function Jre(){return Jre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function grt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yrt=function(t){var n=t.title,r=t.titleId,o=vrt(t,mrt);return c("svg",Jre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.81 1H2v30h5.815c1.705 0 3.343-.783 4.38-2.094l3.182-4.023.006.006 2.607-3.137.01-.014a9.42 9.42 0 001.953-4.826 9.112 9.112 0 00-1.891-6.522l-.01-.012-2.603-3.156L12.197 3.1C11.16 1.786 9.52 1 7.81 1zm6.118 7.523l-3.31-4.195C9.968 3.512 8.917 3 7.81 3H4v26h3.815c1.1 0 2.15-.508 2.8-1.32l3.33-4.21-1.796-1.77-.027-.033c-2.84-3.317-2.83-8.195.028-11.287l.004-.004a98.893 98.893 0 011.774-1.853zm4.043 8.099c-.12 1.279-.616 2.537-1.49 3.64l-1.288 1.63-1.578-1.556c-2.19-2.59-2.118-6.3.001-8.596.6-.64 1.119-1.183 1.561-1.635l1.293 1.638v.002l.014.016c.942 1.192 1.446 2.564 1.51 3.949a7.09 7.09 0 01-.023.912z"}),c("path",{fillRule:"evenodd",className:"euiIcon__fillSecondary",d:"M23.801 3c-.382 0-1.052.231-1.925.812-.636.422-1.228.928-1.677 1.357l1.771 2.245.005.007.024.03.008.01c4.003 5.099 3.99 12.057-.035 17.145l-1.793 2.267a8.206 8.206 0 001.769 1.498c.698.427 1.337.629 1.852.629H28V3h-4.199zm-6.148 23.842l.765 1.053.023.027c.717.851 1.566 1.607 2.464 2.156.89.544 1.89.922 2.895.922H30V1h-6.199c-.987 0-2.066.505-3.032 1.146a14.934 14.934 0 00-2.352 1.974l-.276.288-.595.628 2.855 3.619.006.006c3.459 4.375 3.457 10.329-.004 14.704l-2.75 3.477z"}))},brt=yrt;var iR={};de(iR,{icon:()=>Srt});var hfr=V(ne());var wrt=["title","titleId"];function Xre(){return Xre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _rt=function(t){var n=t.title,r=t.titleId,o=Ort(t,wrt);return c("svg",Xre({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 4V2h2v2H2zm5 0V2h2v2H7zm5 0V2h2v2h-2zM2 9V7h2v2H2zm5 0V7h2v2H7zm5 0V7h2v2h-2zM2 14v-2h2v2H2zm5 0v-2h2v2H7zm5 0v-2h2v2h-2z"}))},Srt=_rt;var aR={};de(aR,{icon:()=>jrt});var vfr=V(ne());var Ert=["title","titleId"];function Kre(){return Kre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function krt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Prt=function(t){var n=t.title,r=t.titleId,o=Irt(t,Ert);return c("svg",Kre({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.857 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}),c("path",{d:"M10.5 2.75a.75.75 0 011.5 0v10.5a.75.75 0 01-1.5 0V2.75z"}))},jrt=Prt;var sR={};de(sR,{icon:()=>Rrt});var yfr=V(ne());var Crt=["title","titleId"];function Yre(){return Yre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Art(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mrt=function(t){var n=t.title,r=t.titleId,o=Trt(t,Crt);return c("svg",Yre({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 2.75a.75.75 0 011.5 0v10.5a.75.75 0 01-1.5 0V2.75z"}),c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M13.135 14.043a.75.75 0 00.025-1.06l-4.59-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 00-1.085-1.035l-4.59 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.286.3.76.31 1.06.024z"}))},Rrt=Mrt;var lR={};de(lR,{icon:()=>Frt});var wfr=V(ne());var Drt=["title","titleId"];function Qre(){return Qre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lrt=function(t){var n=t.title,r=t.titleId,o=zrt(t,Drt);return c("svg",Qre({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.957 4.982a.75.75 0 011.06-.025l4.81 4.591a.25.25 0 00.346 0l4.81-4.59a.75.75 0 011.035 1.085l-4.81 4.59a1.75 1.75 0 01-2.416 0l-4.81-4.59a.75.75 0 01-.025-1.06z"}))},Frt=Lrt;var uR={};de(uR,{icon:()=>Vrt});var xfr=V(ne());var Brt=["title","titleId"];function Zre(){return Zre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $rt=function(t){var n=t.title,r=t.titleId,o=Wrt(t,Brt);return c("svg",Zre({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.018 14.043a.75.75 0 00.024-1.06l-4.59-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.085-1.035l-4.59 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.286.3.761.31 1.06.024z"}))},Vrt=$rt;var cR={};de(cR,{icon:()=>Xrt});var Sfr=V(ne());var qrt=["title","titleId"];function ene(){return ene=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Grt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jrt=function(t){var n=t.title,r=t.titleId,o=Urt(t,qrt);return c("svg",ene({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.982 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}))},Xrt=Jrt;var fR={};de(fR,{icon:()=>ent});var Ifr=V(ne());var Krt=["title","titleId"];function tne(){return tne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zrt=function(t){var n=t.title,r=t.titleId,o=Yrt(t,Krt);return c("svg",tne({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.957 11.018c.286.3.761.31 1.06.024l4.81-4.59a.25.25 0 01.346 0l4.81 4.59a.75.75 0 001.035-1.085l-4.81-4.59a1.75 1.75 0 00-2.416 0l-4.81 4.59a.75.75 0 00-.025 1.06z"}))},ent=Zrt;var pR={};de(pR,{icon:()=>int});var Pfr=V(ne());var tnt=["title","titleId"];function rne(){return rne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ont=function(t){var n=t.title,r=t.titleId,o=rnt(t,tnt);return c("svg",rne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.928 8.468L4 7.618l.446-1.427L7.375 7.25 7.287 4h1.484l-.097 3.296 2.88-1.039L12 7.693l-2.977.86 1.92 2.56L9.741 12 7.937 9.28l-1.745 2.654-1.213-.86z"}))},int=ont;var dR={};de(dR,{icon:()=>cnt});var Cfr=V(ne());var ant=["title","titleId"];function nne(){return nne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var unt=function(t){var n=t.title,r=t.titleId,o=snt(t,ant);return c("svg",nne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.277 10.088c.02.014.04.03.057.047.582.55 1.134.812 1.666.812.586 0 1.84-.293 3.713-.88L9 6.212V2H7v4.212l-1.723 3.876zm-.438.987L3.539 14h8.922l-1.32-2.969C9.096 11.677 7.733 12 7 12c-.74 0-1.463-.315-2.161-.925zM6 2H5V1h6v1h-1v4l3.375 7.594A1 1 0 0112.461 15H3.54a1 1 0 01-.914-1.406L6 6V2z"}))},cnt=unt;var hR={};de(hR,{icon:()=>mnt});var Afr=V(ne());var fnt=["title","titleId"];function one(){return one=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hnt=function(t){var n=t.title,r=t.titleId,o=pnt(t,fnt);return c("svg",one({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M2.316 12h10.368c-.188-.704-.28-1.691-.348-3.037-.07-1.382-.103-1.888-.19-2.612-.028-.236-.06-.462-.096-.68-.31-1.892-1.506-2.923-3.708-3.131a1 1 0 10-1.684 0c-2.202.208-3.397 1.24-3.708 3.13a16.01 16.01 0 00-.096.68c-.087.725-.12 1.23-.19 2.613-.068 1.346-.16 2.333-.348 3.037zm10.843 1H1.84c-.308.353-.737.5-1.341.5a.5.5 0 110-1c.786 0 1.024-.783 1.166-3.587.07-1.407.105-1.926.196-2.681.03-.25.063-.49.102-.724.334-2.041 1.546-3.313 3.556-3.792a2 2 0 013.96 0c2.01.479 3.222 1.75 3.557 3.792a17 17 0 01.102.724c.09.755.125 1.274.196 2.681.14 2.804.379 3.587 1.165 3.587a.5.5 0 110 1c-.604 0-1.033-.147-1.341-.5zM5.5 14h4a2 2 0 11-4 0z"}))},mnt=hnt;var mR={};de(mR,{icon:()=>wnt});var Rfr=V(ne());var vnt=["title","titleId"];function ine(){return ine=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ynt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bnt=function(t){var n=t.title,r=t.titleId,o=gnt(t,vnt);return c("svg",ine({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.5 14l-.005.15a2 2 0 01-3.972.153l-.018-.154L5.5 14h4zm5.38-12.825a.5.5 0 01.008.64l-.063.065-14 12a.5.5 0 01-.713-.695l.063-.065 14-12a.5.5 0 01.705.055zM13.036 5.51l.055.353.048.368c.066.554.103.98.145 1.724l.08 1.491c.146 2.371.402 3.053 1.136 3.053a.5.5 0 110 1c-.603 0-1.031-.146-1.34-.499H4.185l1.182-1h7.317c-.172-.644-.264-1.528-.33-2.708l-.09-1.638c-.033-.514-.066-.87-.118-1.304l-.011-.077.901-.763zM7.5 0a2 2 0 011.98 1.717c.476.113.907.27 1.292.472l-.838.71a5.728 5.728 0 00-1.591-.36 1 1 0 10-1.684 0C4.455 2.75 3.26 3.78 2.95 5.671l-.05.334-.046.347c-.08.676-.115 1.161-.176 2.347l-.014.265-.005.09-1.058.897c.018-.234.035-.488.05-.763l.077-1.427c.038-.626.073-1.025.134-1.528.03-.25.063-.49.102-.724.334-2.04 1.546-3.313 3.555-3.792l.004-.019A2 2 0 017.5 0z"}))},wnt=bnt;var vR={};de(vR,{icon:()=>Ent});var zfr=V(ne());var Ont=["title","titleId"];function ane(){return ane=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _nt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Snt=function(t){var n=t.title,r=t.titleId,o=xnt(t,Ont);return c("svg",ane({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.04 13.274a.5.5 0 10.892.453l3.014-5.931a.5.5 0 00-.445-.727H5.316L8.03 1.727a.5.5 0 10-.892-.453L4.055 7.343a.5.5 0 00.446.726h5.185L7.04 13.274z"}))},Ent=Snt;var gR={};de(gR,{icon:()=>Cnt});var Lfr=V(ne());var Int=["title","titleId"];function sne(){return sne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jnt=function(t){var n=t.title,r=t.titleId,o=knt(t,Int);return c("svg",sne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M0 6h4v4H0V6zm1 1v2h2V7H1zm5-1h4v4H6V6zm1 1v2h2V7H7zm5-1h4v4h-4V6zm1 3h2V7h-2v2z"}))},Cnt=jnt;var yR={};de(yR,{icon:()=>Dnt});var Bfr=V(ne());var Tnt=["title","titleId"];function lne(){return lne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rnt=function(t){var n=t.title,r=t.titleId,o=Ant(t,Tnt);return c("svg",lne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 1v2h2V1H7zM6 0h4v4H6V0zm0 6h4v4H6V6zm1 1v2h2V7H7zm-1 5h4v4H6v-4zm1 1v2h2v-2H7z"}))},Dnt=Rnt;var bR={};de(bR,{icon:()=>Bnt});var Hfr=V(ne());var znt=["title","titleId"];function une(){return une=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fnt=function(t){var n=t.title,r=t.titleId,o=Nnt(t,znt);return c("svg",une({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 10.038a3.49 3.49 0 012.5-1.05h2a2.5 2.5 0 002.462-2.061 2 2 0 111.008.017A3.5 3.5 0 019.5 9.987h-2a2.5 2.5 0 00-2.466 2.085A2 2 0 114 12.063V3.937a2 2 0 111 0v6.1zM4.5 3a1 1 0 100-2 1 1 0 000 2zm0 12a1 1 0 100-2 1 1 0 000 2zm8-9a1 1 0 100-2 1 1 0 000 2z"}))},Bnt=Fnt;var wR={};de(wR,{icon:()=>qnt});var Vfr=V(ne());var Wnt=["title","titleId"];function cne(){return cne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $nt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vnt=function(t){var n=t.title,r=t.titleId,o=Hnt(t,Wnt);return c("svg",cne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 7.987a3.49 3.49 0 00-2.5 1.05v-4.1a2 2 0 10-1 0v6.126a2 2 0 101.034.01A2.5 2.5 0 016 8.986h1a3.5 3.5 0 003.47-3.043 2 2 0 10-1.009-.017A2.5 2.5 0 017 7.987H6zM4 3a1 1 0 11-2 0 1 1 0 012 0zm0 10a1 1 0 11-2 0 1 1 0 012 0zm7-9a1 1 0 11-2 0 1 1 0 012 0z",clipRule:"evenodd"}),c("path",{d:"M13.5 10.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM9 15c.284-1.223 1.519-2.143 3-2.143s2.716.92 3 2.143H9z"}))},qnt=Vnt;var OR={};de(OR,{icon:()=>Knt});var Ufr=V(ne());var Unt=["title","titleId"];function fne(){return fne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xnt=function(t){var n=t.title,r=t.titleId,o=Gnt(t,Unt);return c("svg",fne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3.732 13.096l-.197-.197 2.83-2.828.706.707-2.829 2.828.708.708 2.828-2.828a1 1 0 000-1.414L5.658 7.95a.993.993 0 00-.708-.293.994.994 0 00-.708.293l-2.828 2.829.707.707 2.829-2.83.707.708-2.829 2.829.904.903zm1.218-6.44c.512 0 1.023.196 1.414.587l2.121 2.12a2 2 0 010 2.83L4.95 15.728 0 10.778l3.535-3.535a1.993 1.993 0 011.415-.586zM14.02 1l.708.707-6.95 6.95-.707-.707L14.021 1z"}))},Knt=Xnt;var xR={};de(xR,{icon:()=>tot});var Jfr=V(ne());var Ynt=["title","titleId"];function pne(){return pne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Znt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eot=function(t){var n=t.title,r=t.titleId,o=Qnt(t,Ynt);return c("svg",pne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 013.999 8.17V6.662h7.994V8.17zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486zM4 5.658V1.005h1.262v4.653H4zm2.261 0V1.005h1.244v4.653H6.26zm2.244 0V1.005h1.235v4.653H8.504zm2.234 0V1.005h1.254v4.653h-1.254zM3.008 0L3 8.17a2.509 2.509 0 002.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 002.498-2.512L13 0H3.008z"}))},tot=eot;var _R={};de(_R,{icon:()=>aot});var Kfr=V(ne());var rot=["title","titleId"];function dne(){return dne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iot=function(t){var n=t.title,r=t.titleId,o=not(t,rot);return c("svg",dne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.651 5.126l.922-.455.884-2.343a.5.5 0 01.939.344L12.374 5.39l-1.45.717A5.3 5.3 0 0111 7h1.043l2.3 2.198a.5.5 0 01-.692.723L11.642 8h-.737c-.09.466-.24.899-.441 1.283l.892.49 1.278 3.554a.5.5 0 01-.94.342l-1.15-3.2-.655-.36C9.373 10.665 8.716 11 8 11s-1.374-.335-1.89-.893l-.658.361-1.15 3.201a.5.5 0 11-.94-.342l1.279-3.554.895-.491A4.7 4.7 0 015.095 8h-.74l-2.01 1.92a.5.5 0 01-.69-.722L3.952 7H5a5.3 5.3 0 01.075-.892L3.623 5.39 2.6 2.672a.5.5 0 11.939-.344l.884 2.343.924.457c.17-.428.397-.81.668-1.128h.57a1.5 1.5 0 112.83 0h.568c.27.318.497.699.667 1.126zM8 4a.5.5 0 100-1 .5.5 0 000 1zm1.751 1.571A3.326 3.326 0 009.476 5H6.524c-.107.175-.2.367-.276.573-.11.295-.186.618-.223.957a4.354 4.354 0 00.09 1.465c.071.294.172.565.295.806.168.328.38.601.616.803.295.253.631.396.974.396.342 0 .678-.142.973-.394.237-.203.448-.476.616-.803a3.62 3.62 0 00.296-.807 4.263 4.263 0 00.09-1.466 3.988 3.988 0 00-.224-.959z"}))},aot=iot;var SR={};de(SR,{icon:()=>fot});var Qfr=V(ne());var sot=["title","titleId"];function hne(){return hne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cot=function(t){var n=t.title,r=t.titleId,o=lot(t,sot);return c("svg",hne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 14A6 6 0 108 2a6 6 0 000 12zm0 1A7 7 0 118 1a7 7 0 010 14zm0-3a4 4 0 100-8 4 4 0 000 8zm0-1a3 3 0 110-6 3 3 0 010 6zm0-2a1 1 0 100-2 1 1 0 000 2z"}))},fot=cot;var ER={};de(ER,{icon:()=>vot});var epr=V(ne());var pot=["title","titleId"];function mne(){return mne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mot=function(t){var n=t.title,r=t.titleId,o=dot(t,pot);return c("svg",mne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14 4v-.994C14 2.45 13.55 2 12.994 2H11v1h-1V2H6v1H5V2H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14h9.988C13.55 14 14 13.55 14 12.994V5H2V4h12zm-3-3h1.994C14.102 1 15 1.897 15 3.006v9.988A2.005 2.005 0 0112.994 15H3.006A2.005 2.005 0 011 12.994V3.006C1 1.898 1.897 1 3.006 1H5V0h1v1h4V0h1v1zM4 7h2v1H4V7zm3 0h2v1H7V7zm3 0h2v1h-2V7zM4 9h2v1H4V9zm3 0h2v1H7V9zm3 0h2v1h-2V9zm-6 2h2v1H4v-1zm3 0h2v1H7v-1zm3 0h2v1h-2v-1z",fillRule:"evenodd"}))},vot=mot;var IR={};de(IR,{icon:()=>Oot});var rpr=V(ne());var got=["title","titleId"];function vne(){return vne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wot=function(t){var n=t.title,r=t.titleId,o=yot(t,got);return c("svg",vne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6.5 12a.502.502 0 01-.354-.146l-4-4a.502.502 0 01.708-.708L6.5 10.793l6.646-6.647a.502.502 0 01.708.708l-7 7A.502.502 0 016.5 12"}))},Oot=wot;var kR={};de(kR,{icon:()=>Iot});var opr=V(ne());var xot=["title","titleId"];function gne(){return gne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Eot=function(t){var n=t.title,r=t.titleId,o=_ot(t,xot);return c("svg",gne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 16A8 8 0 118 0a8 8 0 010 16zm3.65-10.857L6.91 9.8 4.35 7.286a.5.5 0 00-.7.714l2.909 2.857a.5.5 0 00.7 0l5.091-5a.5.5 0 10-.7-.714z"}))},Iot=Eot;var PR={};de(PR,{icon:()=>Tot});var apr=V(ne());var kot=["title","titleId"];function yne(){return yne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cot=function(t){var n=t.title,r=t.titleId,o=Pot(t,kot);return c("svg",yne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.934 3.063a1.5 1.5 0 01.547.321l.112.115 6.07 6.915a1.5 1.5 0 01-.646 2.41l-.142.04-9.031 2.097A1.5 1.5 0 01.037 13.19l.043-.159L3.04 4.02a1.5 1.5 0 011.893-.957zM4.027 4.25l-.036.083-2.961 9.011a.5.5 0 00.498.656l.09-.013 2.937-.681-1.399-1.508a.5.5 0 01.666-.74l.067.06 1.788 1.927 2.634-.611-3.198-3.601a.5.5 0 01.682-.726l.066.062 3.559 4.007 1.229-.284a.5.5 0 00.15-.063l.067-.049a.5.5 0 00.099-.632l-.053-.073-6.07-6.916a.5.5 0 00-.138-.11l-.082-.035-.088-.02a.5.5 0 00-.507.256zm11.66 5.039a2.5 2.5 0 01-.975 3.399.5.5 0 01-.485-.875 1.5 1.5 0 00-1.454-2.624.5.5 0 01-.485-.875 2.5 2.5 0 013.399.975zm-5.03-6.206a.5.5 0 01.338.544l-.02.088-.677 2.035 2.068-.721a.5.5 0 01.6.225l.036.082a.5.5 0 01-.225.6l-.082.037L9.67 7.028a.5.5 0 01-.659-.55l.02-.08.995-3a.5.5 0 01.632-.316zM14.5 4a.5.5 0 110 1 .5.5 0 010-1zM7.862.403a2.5 2.5 0 01.735 3.459.5.5 0 01-.839-.545 1.5 1.5 0 10-2.516-1.634.5.5 0 01-.839-.545A2.5 2.5 0 017.862.403zM13.5 2a.5.5 0 110 1 .5.5 0 010-1zm-3-1a.5.5 0 110 1 .5.5 0 010-1zm4-1a.5.5 0 110 1 .5.5 0 010-1z"}))},Tot=Cot;var jR={};de(jR,{icon:()=>zot});var lpr=V(ne());var Aot=["title","titleId"];function bne(){return bne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dot=function(t){var n=t.title,r=t.titleId,o=Mot(t,Aot);return c("svg",bne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.5 13A5.506 5.506 0 012 7.5C2 4.467 4.467 2 7.5 2S13 4.467 13 7.5 10.533 13 7.5 13m0-12a6.5 6.5 0 100 13 6.5 6.5 0 000-13m3 6H8V3.5a.5.5 0 00-1 0v4a.5.5 0 00.5.5h3a.5.5 0 000-1"}))},zot=Dot;var CR={};de(CR,{icon:()=>Wot});var cpr=V(ne());var Not=["title","titleId"];function wne(){return wne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bot=function(t){var n=t.title,r=t.titleId,o=Lot(t,Not);return c("svg",wne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.348 3.761A3.995 3.995 0 018 7a.5.5 0 01-1 0 3 3 0 10-4.878 2.34.5.5 0 01-.627.779 4 4 0 013.973-6.84 5.502 5.502 0 0110.096 4.37.5.5 0 11-.92-.39 4.5 4.5 0 10-8.296-3.497zm-1.61 4.935a.5.5 0 11.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84zm7.62-3.647a.5.5 0 01.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84zm7.62-3.647a.5.5 0 11.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84z"}))},Wot=Bot;var TR={};de(TR,{icon:()=>Uot});var ppr=V(ne());var Hot=["title","titleId"];function One(){return One=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qot=function(t){var n=t.title,r=t.titleId,o=$ot(t,Hot);return c("svg",One({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.421 4.93a.5.5 0 11-.87.49 3 3 0 10-4.43 3.918.5.5 0 01-.626.78 4 4 0 013.973-6.84l.032.018V3.28a5.5 5.5 0 117.003 7.357.5.5 0 11-.36-.934 4.5 4.5 0 10-5.77-5.923c.42.31.778.701 1.05 1.15h-.002zM9.6 11c.669.002.794.67.36 1.003l-4.68 3.882c-.457.378-1.053-.26-.643-.689l3.08-3.193A5411.7 5411.7 0 015.113 12c-.668-.001-.793-.669-.36-1.003l4.68-3.881c.458-.379 1.053.26.643.688l-3.08 3.193L9.6 11z"}))},Uot=qot;var AR={};de(AR,{icon:()=>Yot});var hpr=V(ne());var Got=["title","titleId"];function xne(){return xne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kot=function(t){var n=t.title,r=t.titleId,o=Jot(t,Got);return c("svg",xne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.746 5.005A5.5 5.5 0 0110.5 16H4a4 4 0 01-1.61-7.663A4.473 4.473 0 012.029 7H.5a.5.5 0 010-1h1.527a4.479 4.479 0 01.957-2.309L1.646 2.354a.5.5 0 11.708-.708L3.69 2.984A4.479 4.479 0 016 2.027V.5a.5.5 0 011 0v1.528a4.493 4.493 0 012.309.956l1.337-1.338a.5.5 0 01.708.708L10.016 3.69c.311.388.56.831.73 1.314zM4 15h6.5a4.5 4.5 0 10-4.152-6.239A3.995 3.995 0 018 12a.5.5 0 11-1 0 3 3 0 10-3 3zm5.691-9.94a3.5 3.5 0 10-6.33 2.991 4.029 4.029 0 012.106.227 5.505 5.505 0 014.224-3.219z"}))},Yot=Kot;var MR={};de(MR,{icon:()=>rit});var vpr=V(ne());var Qot=["title","titleId"];function _ne(){return _ne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tit=function(t){var n=t.title,r=t.titleId,o=Zot(t,Qot);return c("svg",_ne({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 7a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm0-6a3.5 3.5 0 013.465 3h3.12a1.5 1.5 0 110 1h-3.12a3.482 3.482 0 01-.662 1.596l2.1 2.1A3.5 3.5 0 118.036 12h-3.12a1.5 1.5 0 110-.999h3.12a3.482 3.482 0 01.662-1.596l-2.1-2.1A3.5 3.5 0 114.5 1zM12 4.5a.5.5 0 101 0 .5.5 0 00-1 0zm-.5 9.5a2.5 2.5 0 110-5 2.5 2.5 0 010 5zM4 11.5a.5.5 0 11-1 0 .5.5 0 011 0z"}))},rit=tit;var RR={};de(RR,{icon:()=>sit});var ypr=V(ne());var nit=["title","titleId"];function Sne(){return Sne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ait=function(t){var n=t.title,r=t.titleId,o=oit(t,nit);return c("svg",Sne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 11c1.334 1.393 2 2.435 2 3.125C15 15.161 14.105 16 13 16c-1.104 0-2-.84-2-1.875 0-.69.667-1.732 2-3.125zM5.857.15l6.34 6.45.016.02.324.321a1.5 1.5 0 01.11 2.006l-.103.114-4.474 4.513a1.5 1.5 0 01-2.123.008L1.464 9.06a1.5 1.5 0 01.007-2.12l4.472-4.45c.145-.146.313-.254.492-.327L5.144.85a.5.5 0 01.713-.7zm1.496 3.049a.5.5 0 00-.705 0L2.177 7.65a.498.498 0 00-.148.35h9.95a.498.498 0 00-.148-.35L7.353 3.2z"}))},sit=ait;var DR={};de(DR,{icon:()=>pit});var wpr=V(ne());var lit=["title","titleId"];function Ene(){return Ene=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fit=function(t){var n=t.title,r=t.titleId,o=uit(t,lit);return c("svg",Ene({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 3a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V4a1 1 0 00-1-1H4zm10 8v1a2 2 0 01-2 2h-1v2h-1v-2H8.5v2h-1v-2H6v2H5v-2H4a2 2 0 01-2-2v-1H0v-1h2V8.5H0v-1h2V6H0V5h2V4a2 2 0 012-2h1V0h1v2h1.5V0h1v2H10V0h1v2h1a2 2 0 012 2v1h2v1h-2v1.5h2v1h-2V10h2v1h-2z"}),c("rect",{width:6,height:6,x:5,y:5,rx:1}))},pit=fit;var zR={};de(zR,{icon:()=>git});var xpr=V(ne());var dit=["title","titleId"];function Ine(){return Ine=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vit=function(t){var n=t.title,r=t.titleId,o=hit(t,dit);return c("svg",Ine({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.157 12.224L5.768 8.32a.404.404 0 000-.64l-4.61-3.904a.407.407 0 010-.643.608.608 0 01.759 0l4.61 3.904c.631.534.63 1.393 0 1.926l-4.61 3.904a.608.608 0 01-.76 0 .407.407 0 010-.643zM9 12h6v1H9v-1z"}))},git=vit;var NR={};de(NR,{icon:()=>xit});var Spr=V(ne());var yit=["title","titleId"];function kne(){return kne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oit=function(t){var n=t.title,r=t.titleId,o=bit(t,yit);return c("svg",kne({fill:"none",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 2.5A.5.5 0 01.5 2h15a.5.5 0 010 1H15v10h.5a.5.5 0 010 1H.5a.5.5 0 010-1H1V3H.5a.5.5 0 01-.5-.5zM2 3h12v10H2V3zm3 2a.5.5 0 00-.5.5v5a.5.5 0 001 0v-5A.5.5 0 005 5zm5.5.5a.5.5 0 011 0v5a.5.5 0 01-1 0v-5zM8 5a.5.5 0 00-.5.5v5a.5.5 0 001 0v-5A.5.5 0 008 5z"}))},xit=Oit;var LR={};de(LR,{icon:()=>kit});var Ipr=V(ne());var _it=["title","titleId"];function Pne(){return Pne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iit=function(t){var n=t.title,r=t.titleId,o=Sit(t,_it);return c("svg",Pne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.5 3a.5.5 0 00-.5.5v9a.5.5 0 001 0v-9a.5.5 0 00-.5-.5zm3 0a.5.5 0 00-.5.5v9a.5.5 0 001 0V9h6v1.5a.5.5 0 00.82.384l3-2.5a.5.5 0 000-.768l-3-2.5A.5.5 0 0011 5.5V7H5V3.5a.5.5 0 00-.5-.5z"}))},kit=Iit;var FR={};de(FR,{icon:()=>Ait});var Ppr=V(ne());var Pit=["title","titleId"];function jne(){return jne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tit=function(t){var n=t.title,r=t.titleId,o=jit(t,Pit);return c("svg",jne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.5 3a.5.5 0 01.5.5v9a.5.5 0 01-1 0V9H4v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 014 5.5V7h2V3.5a.5.5 0 01.5-.5zm3 0a.5.5 0 00-.5.5v9a.5.5 0 001 0V9h2v1.5a.5.5 0 00.82.384l3-2.5a.5.5 0 000-.768l-3-2.5A.5.5 0 0012 5.5V7h-2V3.5a.5.5 0 00-.5-.5z"}))},Ait=Tit;var BR={};de(BR,{icon:()=>Nit});var Cpr=V(ne());var Mit=["title","titleId"];function Cne(){return Cne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zit=function(t){var n=t.title,r=t.titleId,o=Rit(t,Mit);return c("svg",Cne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.5 3a.5.5 0 01.5.5v9a.5.5 0 01-1 0V9H5v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 015 5.5V7h6V3.5a.5.5 0 01.5-.5zm3 0a.5.5 0 01.5.5v9a.5.5 0 01-1 0v-9a.5.5 0 01.5-.5z"}))},Nit=zit;var WR={};de(WR,{icon:()=>Hit});var Apr=V(ne());var Lit=["title","titleId"];function Tne(){return Tne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wit=function(t){var n=t.title,r=t.titleId,o=Fit(t,Lit);return c("svg",Tne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M.5 3a.5.5 0 00-.5.5v9a.5.5 0 001 0v-9A.5.5 0 00.5 3zm14.5.5a.5.5 0 011 0v9a.5.5 0 01-1 0v-9zm-4.712 1.547a.5.5 0 01.532.069l3 2.5a.5.5 0 010 .768l-3 2.5A.5.5 0 0110 10.5V9H6v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 016 5.5V7h4V5.5a.5.5 0 01.288-.453z"}))},Hit=Wit;var HR={};de(HR,{icon:()=>Git});var Rpr=V(ne());var $it=["title","titleId"];function Ane(){return Ane=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uit=function(t){var n=t.title,r=t.titleId,o=Vit(t,$it);return c("svg",Ane({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8.05 10a2.5 2.5 0 014.9 0h1.55a.5.5 0 110 1h-1.55a2.5 2.5 0 01-4.9 0H1.5a.5.5 0 110-1h6.55zm-.1-4a2.5 2.5 0 01-4.9 0H1.5a.5.5 0 010-1h1.55a2.5 2.5 0 014.9 0h6.55a.5.5 0 110 1H7.95zM4 5.5a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm8 5a1.5 1.5 0 10-3 0 1.5 1.5 0 003 0z"}))},Git=Uit;var $R={};de($R,{icon:()=>Qit});var zpr=V(ne());var Jit=["title","titleId"];function Mne(){return Mne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yit=function(t){var n=t.title,r=t.titleId,o=Xit(t,Jit);return c("svg",Mne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M10 7.95a2.5 2.5 0 010-4.9V1.5a.5.5 0 111 0v1.55a2.5 2.5 0 010 4.9v6.55a.5.5 0 11-1 0V7.95zm-4 .1a2.5 2.5 0 010 4.9v1.55a.5.5 0 11-1 0v-1.55a2.5 2.5 0 010-4.9V1.5a.5.5 0 011 0v6.55zM5.5 12a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm5-8a1.5 1.5 0 100 3 1.5 1.5 0 000-3z"}))},Qit=Yit;var VR={};de(VR,{icon:()=>nat});var Lpr=V(ne());var Zit=["title","titleId"];function Rne(){return Rne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rat=function(t){var n=t.title,r=t.titleId,o=eat(t,Zit);return c("svg",Rne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.4 0c.235 0 .46.099.622.273l2.743 3c.151.162.235.378.235.602v9.25a.867.867 0 01-.857.875H3.857A.867.867 0 013 13.125V.875C3 .392 3.384 0 3.857 0H11.4zM14 4h-2.6a.4.4 0 01-.4-.4V1H4v12h10V4z"}),c("path",{d:"M3 1H2a1 1 0 00-1 1v13a1 1 0 001 1h10a1 1 0 001-1v-1h-1v1H2V2h1V1z"}))},nat=rat;var qR={};de(qR,{icon:()=>lat});var Bpr=V(ne());var oat=["title","titleId"];function Dne(){return Dne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sat=function(t){var n=t.title,r=t.titleId,o=iat(t,oat);return c("svg",Dne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 2.729V2a1 1 0 011-1h2v1H3v12h4v1H3a1 1 0 01-1-1V2.729zM14 5V2a1 1 0 00-1-1h-2v1h2v3h1zm-1 1h2v9H8V6h5V5H8a1 1 0 00-1 1v9a1 1 0 001 1h7a1 1 0 001-1V6a1 1 0 00-1-1h-2v1z"}),c("path",{d:"M9 10h5V9H9v1zm0-2h5V7H9v1zm0 4h5v-1H9v1zm0 2h5v-1H9v1zm2-12V1a1 1 0 00-1-1H6a1 1 0 00-1 1v1h1V1h4v1h1zM5 3h6V2H5v1z"}))},lat=sat;var UR={};de(UR,{icon:()=>dat});var Hpr=V(ne());var uat=["title","titleId"];function zne(){return zne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pat=function(t){var n=t.title,r=t.titleId,o=cat(t,uat);return c("svg",zne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.293 8L3.146 3.854a.5.5 0 11.708-.708L8 7.293l4.146-4.147a.5.5 0 01.708.708L8.707 8l4.147 4.146a.5.5 0 01-.708.708L8 8.707l-4.146 4.147a.5.5 0 01-.708-.708L7.293 8z"}))},dat=pat;var GR={};de(GR,{icon:()=>yat});var Vpr=V(ne());var hat=["title","titleId"];function Nne(){return Nne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gat=function(t){var n=t.title,r=t.titleId,o=mat(t,hat);return c("svg",Nne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.746 8l3.1-3.1a.527.527 0 10-.746-.746L8 7.254l-3.1-3.1a.527.527 0 10-.746.746l3.1 3.1-3.1 3.1a.527.527 0 10.746.746l3.1-3.1 3.1 3.1a.527.527 0 10.746-.746L8.746 8zM8 16A8 8 0 118 0a8 8 0 010 16z"}))},yat=gat;var JR={};de(JR,{icon:()=>_at});var Upr=V(ne());var bat=["title","titleId"];function Lne(){return Lne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Oat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xat=function(t){var n=t.title,r=t.titleId,o=wat(t,bat);return c("svg",Lne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.822 1.874a.5.5 0 11.335.942 5.517 5.517 0 00-3.34 3.341.5.5 0 11-.943-.335 6.517 6.517 0 013.948-3.948zM1.864 10.15a.5.5 0 11.944-.33 5.517 5.517 0 003.365 3.37.5.5 0 01-.333.943 6.517 6.517 0 01-3.976-3.983zm8.302 3.981a.5.5 0 11-.333-.943 5.517 5.517 0 003.347-3.332.5.5 0 11.941.337 6.517 6.517 0 01-3.955 3.938zm3.968-8.285a.5.5 0 11-.943.331A5.517 5.517 0 009.85 2.82a.5.5 0 01.337-.942 6.517 6.517 0 013.946 3.968zM8.5 3.5a.5.5 0 01-1 0V.997a.5.5 0 011 0V3.5zm-4.997 4a.5.5 0 010 1H1a.5.5 0 010-1h2.503zM7.5 12.497a.5.5 0 011 0V15a.5.5 0 11-1 0v-2.503zM12.497 8.5a.5.5 0 010-1H15a.5.5 0 110 1h-2.503zM8 9a1 1 0 110-2 1 1 0 010 2z"}))},_at=xat;var XR={};de(XR,{icon:()=>Pat});var Jpr=V(ne());var Sat=["title","titleId"];function Fne(){return Fne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Iat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kat=function(t){var n=t.title,r=t.titleId,o=Eat(t,Sat);return c("svg",Fne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.95 1.636l1.414 1.414-2.192 2.193C12.695 6.033 13 6.98 13 8c0 1.02-.305 1.967-.828 2.757l2.192 2.193-1.414 1.414-2.193-2.192A4.977 4.977 0 018 13a4.977 4.977 0 01-2.757-.828L3.05 14.364 1.636 12.95l2.192-2.193A4.977 4.977 0 013 8c0-1.02.305-1.967.828-2.757L1.636 3.05 3.05 1.636l2.193 2.192A4.977 4.977 0 018 3c1.02 0 1.967.305 2.757.828l2.193-2.192zM8 5a2.99 2.99 0 00-1.168.236l-.126.057-.218.116-.132.081-.073.05a3.013 3.013 0 00-.241.187l-.113.103-.147.15c-.05.054-.097.11-.142.168l-.1.135-.05.073-.06.097c-.05.082-.096.166-.137.253l-.057.126A2.99 2.99 0 005 8c0 .414.084.809.236 1.168l.057.126.116.218.081.132c.059.089.121.175.189.257l.15.17.151.147c.056.051.114.1.174.147l.142.105c.054.037.109.072.165.106l-.124-.079.092.06.094.055c.436.247.94.388 1.477.388a2.99 2.99 0 001.168-.236l.125-.056.213-.113.151-.094.05-.034a3.011 3.011 0 00.323-.258l-.15.129.09-.075.168-.159.08-.084c.051-.056.1-.114.147-.174l.105-.142.106-.165c.047-.08.091-.161.131-.245l.057-.126A2.99 2.99 0 0011 8a2.99 2.99 0 00-.236-1.168l-.056-.125-.112-.211-.096-.155-.033-.049a3.011 3.011 0 00-.258-.322l.129.15-.075-.09-.159-.168-.084-.08a3.015 3.015 0 00-.174-.147l-.183-.132-.124-.079a2.993 2.993 0 00-.245-.131l-.126-.057A2.99 2.99 0 008 5z"}))},Pat=kat;var KR={};de(KR,{icon:()=>Mat});var Kpr=V(ne());var jat=["title","titleId"];function Bne(){return Bne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Aat=function(t){var n=t.title,r=t.titleId,o=Cat(t,jat);return c("svg",Bne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M5.142 11.074l-1.912.548a2.532 2.532 0 11-1.395-4.867l1.947-.559a2.532 2.532 0 012.555.713l1.53-5.335c.139-.485.6-.897 1.159-1.238.27-.164.52-.278.779-.32.814-.132 1.503.558 1.261 1.422L9.574 6.643l4.988-1.43c.864-.242 1.554.447 1.422 1.26-.042.26-.156.51-.32.78-.341.56-.753 1.02-1.238 1.16L9.523 9.817a2.53 2.53 0 01.56 2.4l-.56 1.947a2.532 2.532 0 11-4.867-1.395l.486-1.696zm.33-1.148l.48-1.673a1.52 1.52 0 00-1.89-1.083l-1.948.558a1.52 1.52 0 00.837 2.92l2.52-.722zm3.773-2.135l-.33 1.148 5.232-1.5c.324-.093 1.182-1.39.694-1.253L9.245 7.791zM5.63 13.049a1.52 1.52 0 002.92.837l.559-1.947a1.52 1.52 0 00-1.553-1.935l2.537-8.845c.136-.488-1.16.37-1.253.694L5.63 13.05zm.973.279l.559-1.947a.506.506 0 11.973.279l-.558 1.947a.506.506 0 11-.974-.28zm-3.93-3.653a.506.506 0 11-.28-.973l1.947-.558a.506.506 0 01.28.973l-1.948.558z"}))},Mat=Aat;var YR={};de(YR,{icon:()=>Lat});var Qpr=V(ne());var Rat=["title","titleId"];function Wne(){return Wne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nat=function(t){var n=t.title,r=t.titleId,o=Dat(t,Rat);return c("svg",Wne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 12h12v-1.97c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V12zm-1 0V3c0-1.105 3.134-2 7-2s7 .895 7 2v9c0 1.105-3.134 2-7 2s-7-.895-7-2zm1-3h12V7.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V9zm0-4.97V6h12V4.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97zm10.675-1.483C11.467 2.202 9.795 2 8 2c-1.794 0-3.467.202-4.675.547-.492.14-.88.298-1.136.453.256.155.644.312 1.136.453C4.533 3.798 6.205 4 8 4c1.794 0 3.467-.202 4.675-.547.492-.14.88-.298 1.136-.453-.256-.155-.644-.312-1.136-.453zM2 6c.257.155.833.312 1.325.453C4.533 6.798 6.205 7 8 7c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2zm0 3c.257.155.833.312 1.325.453C4.533 9.798 6.205 10 8 10c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2zm0 3c.257.155.833.312 1.325.453C4.533 12.798 6.205 13 8 13c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2z"}))},Lat=Nat;var QR={};de(QR,{icon:()=>$at});var edr=V(ne());var Fat=["title","titleId"];function Hne(){return Hne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hat=function(t){var n=t.title,r=t.titleId,o=Bat(t,Fat);return c("svg",Hne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M2 2a1 1 0 00-1 1v7a1 1 0 001 1h4l-1 3H3.5a.5.5 0 000 1h9a.5.5 0 000-1H11l-1-3h4a1 1 0 001-1V3a1 1 0 00-1-1H2zm0 8V3h12v7H2zm5 1h2l1 3H6l1-3z",clipRule:"evenodd"}),c("path",{d:"M4.5 6a.5.5 0 000 1h1a.5.5 0 000-1h-1zm3 0a.5.5 0 000 1h1a.5.5 0 000-1h-1zm2.5.5a.5.5 0 01.5-.5h1a.5.5 0 010 1h-1a.5.5 0 01-.5-.5z"}))},$at=Hat;var ZR={};de(ZR,{icon:()=>Jat});var rdr=V(ne());var Vat=["title","titleId"];function $ne(){return $ne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gat=function(t){var n=t.title,r=t.titleId,o=qat(t,Vat);return c("svg",$ne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V15a1 1 0 01-1 1H2a1 1 0 01-1-1V1a1 1 0 011-1h8.8zM14 5h-3.5a.5.5 0 01-.5-.5V1H2v14h12V5zm-8.5 7a.5.5 0 110-1h5a.5.5 0 110 1h-5zm0-3a.5.5 0 010-1h5a.5.5 0 110 1h-5z"}))},Jat=Gat;var eD={};de(eD,{icon:()=>Zat});var odr=V(ne());var Xat=["title","titleId"];function Vne(){return Vne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Yat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qat=function(t){var n=t.title,r=t.titleId,o=Kat(t,Xat);return c("svg",Vne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.505 8.995l6.453-6.44-1.5-1.5-6.453 6.44 1.5 1.5zM12.968.19c.258-.238.657-.26.91 0l1.928 1.929a.642.642 0 010 .909l-6.78 6.784A.641.641 0 018.57 10H6.643A.643.643 0 016 9.357V7.43c0-.17.067-.335.188-.455L12.968.19zM4.5 13a.5.5 0 110-1h7a.5.5 0 110 1h-7zm4-12a.5.5 0 010 1H2v13h12V7.5a.5.5 0 111 0V15a1 1 0 01-1 1H2a1 1 0 01-1-1V2a1 1 0 011-1h6.5z"}))},Zat=Qat;var tD={};de(tD,{icon:()=>ost});var adr=V(ne());var est=["title","titleId"];function qne(){return qne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nst=function(t){var n=t.title,r=t.titleId,o=tst(t,est);return c("svg",qne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 3.5a.5.5 0 11-1 0 .5.5 0 011 0zM9 5v3h1v1H8V6H7V5h2z"}),c("path",{d:"M13.855 14.147a1.34 1.34 0 01-.158-.246A1.998 1.998 0 0113.5 13c0-.414.103-.713.197-.901a1.34 1.34 0 01.158-.246l.003-.005A.5.5 0 0014 11.5V.5a.5.5 0 00-.5-.5H3.461l-.083.005a2.957 2.957 0 00-1.102.298 2.257 2.257 0 00-.88.763C1.148 1.44 1 1.913 1 2.5V13c0 .463.117.843.318 1.145.2.298.462.491.708.615a2.344 2.344 0 00.94.24H3v-1c-.005 0-.015 0-.029-.002a1.344 1.344 0 01-.498-.133.817.817 0 01-.323-.275C2.07 13.47 2 13.287 2 13s.07-.47.15-.59a.817.817 0 01.324-.275A1.344 1.344 0 013 12h9.658c-.091.27-.158.605-.158 1s.067.73.158 1H8v1h5.5a.5.5 0 00.359-.848l-.004-.005zm-.001 0l.002.002-.002-.002zM2.724 1.197c.092-.046.186-.082.276-.11C3 2.918 3.001 11 2.999 11h-.033a1.977 1.977 0 00-.283.03 2.344 2.344 0 00-.657.21L2 11.254V2.5c0-.413.102-.689.229-.879.128-.193.304-.328.495-.424zM4 11V1h9v10H4z"}),c("path",{d:"M7 13H4v2.5a.5.5 0 00.854.354l.646-.647.646.647A.5.5 0 007 15.5V13z"}))},ost=nst;var rD={};de(rD,{icon:()=>ust});var ldr=V(ne());var ist=["title","titleId"];function Une(){return Une=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lst=function(t){var n=t.title,r=t.titleId,o=ast(t,ist);return c("svg",Une({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V13a1 1 0 01-1 1H2a1 1 0 01-1-1V1a1 1 0 011-1h6.8zM12 5H8.5a.5.5 0 01-.5-.5V1H2v12h10V5zm-7.5 6a.5.5 0 110-1h5a.5.5 0 110 1h-5zm0-3a.5.5 0 010-1h5a.5.5 0 110 1h-5zm1 8a.5.5 0 110-1H14V6.5a.5.5 0 111 0V15a1 1 0 01-1 1H5.5z"}))},ust=lst;var nD={};de(nD,{icon:()=>hst});var cdr=V(ne());var cst=["title","titleId"];function Gne(){return Gne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dst=function(t){var n=t.title,r=t.titleId,o=fst(t,cst);return c("svg",Gne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("circle",{cx:8,cy:8,r:4}))},hst=dst;var oD={};de(oD,{icon:()=>bst});var pdr=V(ne());var mst=["title","titleId"];function Jne(){return Jne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yst=function(t){var n=t.title,r=t.titleId,o=vst(t,mst);return c("svg",Jne({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.135 14.043a.75.75 0 00.025-1.06l-4.591-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.084-1.035l-4.591 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.287.3.761.31 1.061.024z"}),c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14.135 14.043a.75.75 0 00.025-1.06l-4.591-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.084-1.035l-4.591 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.287.3.761.31 1.061.024z"}))},bst=yst;var iD={};de(iD,{icon:()=>Sst});var hdr=V(ne());var wst=["title","titleId"];function Xne(){return Xne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _st=function(t){var n=t.title,r=t.titleId,o=Ost(t,wst);return c("svg",Xne({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.232 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}),c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.232 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}))},Sst=_st;var aD={};de(aD,{icon:()=>jst});var vdr=V(ne());var Est=["title","titleId"];function Kne(){return Kne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pst=function(t){var n=t.title,r=t.titleId,o=Ist(t,Est);return c("svg",Kne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 9.114l1.85-1.943a.52.52 0 01.77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 01-2.31 0L5.41 8a.617.617 0 010-.829.52.52 0 01.77 0L8 9.082V.556C8 .249 8.224 0 8.5 0s.5.249.5.556v8.558z"}),c("path",{d:"M16 13.006V10h-1v3.006a.995.995 0 01-.994.994H3.01a.995.995 0 01-.994-.994V10h-1v3.006c0 1.1.892 1.994 1.994 1.994h10.996c1.1 0 1.994-.893 1.994-1.994z"}))},jst=Pst;var sD={};de(sD,{icon:()=>Rst});var ydr=V(ne());var Cst=["title","titleId"];function Yne(){return Yne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ast(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mst=function(t){var n=t.title,r=t.titleId,o=Tst(t,Cst);return c("svg",Yne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 2h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V4a2 2 0 012-2zM1.5 1a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5zm13 0a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},Rst=Mst;var lD={};de(lD,{icon:()=>Fst});var wdr=V(ne());var Dst=["title","titleId"];function Qne(){return Qne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lst=function(t){var n=t.title,r=t.titleId,o=zst(t,Dst);return c("svg",Qne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 5h8a2 2 0 012 2v2a2 2 0 01-2 2H4a2 2 0 01-2-2V7a2 2 0 012-2zM1.5 1h13a.5.5 0 110 1h-13a.5.5 0 010-1zm0 13h13a.5.5 0 110 1h-13a.5.5 0 110-1z"}))},Fst=Lst;var uD={};de(uD,{icon:()=>Vst});var xdr=V(ne());var Bst=["title","titleId"];function Zne(){return Zne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $st=function(t){var n=t.title,r=t.titleId,o=Wst(t,Bst);return c("svg",Zne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 1h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V3a2 2 0 012-2zM1.5 14h13a.5.5 0 110 1h-13a.5.5 0 110-1z"}))},Vst=$st;var cD={};de(cD,{icon:()=>Xst});var Sdr=V(ne());var qst=["title","titleId"];function eoe(){return eoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jst=function(t){var n=t.title,r=t.titleId,o=Ust(t,qst);return c("svg",eoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 4H7V1.5a.5.5 0 011 0V4zm0 8v2.5a.5.5 0 11-1 0V12h1zM3 5h9a2 2 0 012 2v2a2 2 0 01-2 2H3a2 2 0 01-2-2V7a2 2 0 012-2z"}))},Xst=Jst;var fD={};de(fD,{icon:()=>elt});var Idr=V(ne());var Kst=["title","titleId"];function toe(){return toe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zst=function(t){var n=t.title,r=t.titleId,o=Yst(t,Kst);return c("svg",toe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 5h8a2 2 0 012 2v2a2 2 0 01-2 2H5a2 2 0 01-2-2V7a2 2 0 012-2zM1.5 1a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},elt=Zst;var pD={};de(pD,{icon:()=>ilt});var Pdr=V(ne());var tlt=["title","titleId"];function roe(){return roe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var olt=function(t){var n=t.title,r=t.titleId,o=rlt(t,tlt);return c("svg",roe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 7v1H1.5a.5.5 0 010-1H4zm8 0h2.5a.5.5 0 110 1H12V7zM7 1h2a2 2 0 012 2v9a2 2 0 01-2 2H7a2 2 0 01-2-2V3a2 2 0 012-2z"}))},ilt=olt;var dD={};de(dD,{icon:()=>clt});var Cdr=V(ne());var alt=["title","titleId"];function noe(){return noe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function llt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ult=function(t){var n=t.title,r=t.titleId,o=slt(t,alt);return c("svg",noe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 5h8a2 2 0 012 2v2a2 2 0 01-2 2H3a2 2 0 01-2-2V7a2 2 0 012-2zm11.5-4a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},clt=ult;var hD={};de(hD,{icon:()=>mlt});var Adr=V(ne());var flt=["title","titleId"];function ooe(){return ooe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hlt=function(t){var n=t.title,r=t.titleId,o=plt(t,flt);return c("svg",ooe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 3h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V5a2 2 0 012-2zM1.5 1h13a.5.5 0 110 1h-13a.5.5 0 010-1z"}))},mlt=hlt;var mD={};de(mD,{icon:()=>wlt});var Rdr=V(ne());var vlt=["title","titleId"];function ioe(){return ioe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ylt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var blt=function(t){var n=t.title,r=t.titleId,o=glt(t,vlt);return c("svg",ioe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 8h5a1 1 0 011 1v5H3a1 1 0 01-1-1V8zm1-7h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},wlt=blt;var vD={};de(vD,{icon:()=>Elt});var zdr=V(ne());var Olt=["title","titleId"];function aoe(){return aoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _lt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Slt=function(t){var n=t.title,r=t.titleId,o=xlt(t,Olt);return c("svg",aoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 8h5v5a1 1 0 01-1 1H8V9a1 1 0 011-1zM3 1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},Elt=Slt;var gD={};de(gD,{icon:()=>Clt});var Ldr=V(ne());var Ilt=["title","titleId"];function soe(){return soe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Plt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jlt=function(t){var n=t.title,r=t.titleId,o=klt(t,Ilt);return c("svg",soe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 2h5v5a1 1 0 01-1 1H2V3a1 1 0 011-1zm0-1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},Clt=jlt;var yD={};de(yD,{icon:()=>Dlt});var Bdr=V(ne());var Tlt=["title","titleId"];function loe(){return loe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rlt=function(t){var n=t.title,r=t.titleId,o=Alt(t,Tlt);return c("svg",loe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 2h5a1 1 0 011 1v5H9a1 1 0 01-1-1V2zM3 1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},Dlt=Rlt;var bD={};de(bD,{icon:()=>Blt});var Hdr=V(ne());var zlt=["title","titleId"];function uoe(){return uoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Llt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Flt=function(t){var n=t.title,r=t.titleId,o=Nlt(t,zlt);return c("svg",uoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 4V3h6v1H5zM3 7V6h10v1H3zm2 3V9h6v1H5zm-2 3v-1h10v1H3z"}))},Blt=Flt;var wD={};de(wD,{icon:()=>qlt});var Vdr=V(ne());var Wlt=["title","titleId"];function coe(){return coe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $lt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vlt=function(t){var n=t.title,r=t.titleId,o=Hlt(t,Wlt);return c("svg",coe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 4V3h6v1H2zm0 3V6h10v1H2zm0 3V9h6v1H2zm0 3v-1h10v1H2z"}))},qlt=Vlt;var OD={};de(OD,{icon:()=>Klt});var Udr=V(ne());var Ult=["title","titleId"];function foe(){return foe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xlt=function(t){var n=t.title,r=t.titleId,o=Glt(t,Ult);return c("svg",foe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 4V3h6v1H8zM4 7V6h10v1H4zm4 3V9h6v1H8zm-4 3v-1h10v1H4z"}))},Klt=Xlt;var xD={};de(xD,{icon:()=>tut});var Jdr=V(ne());var Ylt=["title","titleId"];function poe(){return poe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eut=function(t){var n=t.title,r=t.titleId,o=Qlt(t,Ylt);return c("svg",poe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.193 13H4V3h4.151c1.816 0 2.987.977 2.987 2.495 0 1.074-.797 2.01-1.823 2.176v.055c1.359.132 2.308 1.11 2.308 2.433 0 1.76-1.296 2.841-3.43 2.841zM5.788 4.393v2.82h1.635c1.248 0 1.948-.526 1.948-1.455 0-.873-.603-1.365-1.67-1.365H5.788zm0 7.214h1.996c1.316 0 2.016-.547 2.016-1.573 0-1.019-.72-1.552-2.092-1.552h-1.92v3.125z"}))},tut=eut;var _D={};de(_D,{icon:()=>aut});var Kdr=V(ne());var rut=["title","titleId"];function doe(){return doe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function out(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iut=function(t){var n=t.title,r=t.titleId,o=nut(t,rut);return c("svg",doe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.597 3a.411.411 0 00-.299.132l-1.85 1.993-.756-.7a.412.412 0 00-.28-.124.42.42 0 00-.292.098.333.333 0 00-.12.257.335.335 0 00.127.254l1.064.982A.418.418 0 002.488 6a.411.411 0 00.288-.126L4.904 3.58a.328.328 0 00.095-.25.337.337 0 00-.126-.238A.421.421 0 004.597 3zm-.299 4.132A.411.411 0 014.597 7a.421.421 0 01.276.093c.076.062.12.147.126.238a.328.328 0 01-.095.25L2.776 9.874a.411.411 0 01-.288.126.418.418 0 01-.297-.108L1.127 8.91A.335.335 0 011 8.656a.333.333 0 01.12-.257.42.42 0 01.292-.098c.108.005.21.05.28.123l.757.701 1.849-1.993zM4.597 11a.411.411 0 00-.299.132l-1.85 1.993-.756-.7a.412.412 0 00-.28-.124.421.421 0 00-.292.098.333.333 0 00-.12.257.335.335 0 00.127.254l1.064.982a.418.418 0 00.297.108.411.411 0 00.288-.126l2.128-2.293a.328.328 0 00.095-.25.337.337 0 00-.126-.238.421.421 0 00-.276-.093zM6.5 4a.5.5 0 000 1h7a.5.5 0 000-1h-7zM6 8.5a.5.5 0 01.5-.5h7a.5.5 0 010 1h-7a.5.5 0 01-.5-.5zm.5 3.5a.5.5 0 000 1h7a.5.5 0 000-1h-7z"}))},aut=iut;var SD={};de(SD,{icon:()=>fut});var Qdr=V(ne());var sut=["title","titleId"];function hoe(){return hoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cut=function(t){var n=t.title,r=t.titleId,o=lut(t,sut);return c("svg",hoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2.414 8.036L4.89 10.51a.5.5 0 01-.707.708L1.354 8.389a.5.5 0 010-.707l2.828-2.828a.5.5 0 11.707.707L2.414 8.036zm8.768 2.474l2.475-2.474-2.475-2.475a.5.5 0 01.707-.707l2.829 2.828a.5.5 0 010 .707l-2.829 2.829a.5.5 0 11-.707-.708zM8.559 2.506a.5.5 0 01.981.19L7.441 13.494a.5.5 0 01-.981-.19L8.559 2.506z"}))},fut=cut;var ED={};de(ED,{icon:()=>vut});var ehr=V(ne());var put=["title","titleId"];function moe(){return moe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mut=function(t){var n=t.title,r=t.titleId,o=dut(t,put);return c("svg",moe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.111 10H12a1 1 0 001-1V5a1 1 0 00-1-1H4a1 1 0 00-1 1v4a1 1 0 001 1h1v1.297L6.111 10zm.46 1L4 14v-3a2 2 0 01-2-2V5a2 2 0 012-2h8a2 2 0 012 2v4a2 2 0 01-2 2H6.571z"}))},vut=mut;var ID={};de(ID,{icon:()=>Out});var rhr=V(ne());var gut=["title","titleId"];function voe(){return voe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function but(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wut=function(t){var n=t.title,r=t.titleId,o=yut(t,gut);return c("svg",voe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6 11a1 1 0 010 2H4a1 1 0 010-2V5a1 1 0 110-2h2a1 1 0 110 2v2h4V5a1 1 0 110-2h2a1 1 0 010 2v6a1 1 0 010 2h-2a1 1 0 010-2V9H6v2z"}))},Out=wut;var kD={};de(kD,{icon:()=>Iut});var ohr=V(ne());var xut=["title","titleId"];function goe(){return goe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Eut=function(t){var n=t.title,r=t.titleId,o=_ut(t,xut);return c("svg",goe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.16 12H9.5a.5.5 0 110 1h-4a.5.5 0 110-1h1.639l1.7-8H7.5a.5.5 0 010-1h4a.5.5 0 110 1H9.861l-1.7 8z"}))},Iut=Eut;var PD={};de(PD,{icon:()=>Tut});var ahr=V(ne());var kut=["title","titleId"];function yoe(){return yoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cut=function(t){var n=t.title,r=t.titleId,o=Put(t,kut);return c("svg",yoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.556 5.051a.45.45 0 00.637.637l1.503-1.504c.432-.431 1.278-.382 1.89.23.612.612.662 1.458.23 1.89L9.519 8.6c-.432.432-1.278.383-1.89-.23a.45.45 0 10-.636.637c.914.914 2.33 1.063 3.162.23l2.297-2.297c.833-.833.684-2.248-.23-3.162-.914-.915-2.33-1.063-3.162-.23L7.556 5.051zm.888 5.261a.45.45 0 00-.637 0l-1.503 1.504c-.432.431-1.278.382-1.89-.23-.612-.612-.661-1.458-.23-1.89L6.481 7.4c.432-.432 1.278-.383 1.89.23a.45.45 0 00.636-.637c-.914-.914-2.33-1.063-3.162-.23L3.548 9.06c-.833.833-.685 2.248.23 3.162.914.915 2.33 1.063 3.162.23l1.504-1.503a.45.45 0 000-.637zM7.877 5.76a.39.39 0 00.274-.114l1.503-1.504-1.503 1.504a.39.39 0 01-.274.114zm.912 3.183c-.4.003-.843-.172-1.202-.53.359.358.802.533 1.202.53zM12.18 3.82c-.502-.503-1.155-.766-1.773-.76.618-.006 1.27.257 1.773.76.898.898 1.034 2.275.23 3.078l-2.297 2.297 2.297-2.297c.804-.803.668-2.18-.23-3.078zm-4.062 6.42a.39.39 0 01.284.667L6.898 12.41l1.504-1.503a.39.39 0 00-.284-.667zm-.926-3.965c.618-.006 1.27.257 1.773.76-.502-.503-1.155-.766-1.773-.76zM5.414 12.15a1.762 1.762 0 01-1.042-.522c-.626-.627-.692-1.511-.23-1.974L6.44 7.358 4.142 9.654c-.462.463-.396 1.348.23 1.974.311.311.687.484 1.042.522z"}))},Tut=Cut;var jD={};de(jD,{icon:()=>zut});var lhr=V(ne());var Aut=["title","titleId"];function boe(){return boe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dut=function(t){var n=t.title,r=t.titleId,o=Mut(t,Aut);return c("svg",boe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 8v1h1v1H1V9h1V8H1V7h3v1H3zm1 4v2H1v-1h1v-1H1v-1h3v1zM3 5h1v1H1V5h1V4H1V3h2v2zm2.5-1h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 110-1z"}))},zut=Dut;var CD={};de(CD,{icon:()=>Wut});var chr=V(ne());var Nut=["title","titleId"];function woe(){return woe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var But=function(t){var n=t.title,r=t.titleId,o=Lut(t,Nut);return c("svg",woe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10 6H5C3.057 6 2 7.057 2 9s1.057 3 3 3h1.5v-1H5c-1.39 0-2-.61-2-2 0-1.39.61-2 2-2h5v3l3.5-3.5L10 3v3z"}))},Wut=But;var TD={};de(TD,{icon:()=>Uut});var phr=V(ne());var Hut=["title","titleId"];function Ooe(){return Ooe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qut=function(t){var n=t.title,r=t.titleId,o=$ut(t,Hut);return c("svg",Ooe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.023 10h1.274c.006.08.01.164.01.25a2.557 2.557 0 01-.883 1.949c-.284.25-.627.446-1.03.588A4.087 4.087 0 018.028 13a4.616 4.616 0 01-3.382-1.426c-.193-.259-.193-.5 0-.724.193-.223.438-.266.735-.13.343.363.748.655 1.213.876.466.22.949.33 1.449.33.637 0 1.132-.144 1.485-.433.353-.29.53-.67.53-1.14a1.72 1.72 0 00-.034-.353zM5.586 7a2.49 2.49 0 01-.294-.507 2.316 2.316 0 01-.177-.934c0-.363.076-.701.228-1.015.152-.314.363-.586.633-.816.27-.23.588-.41.955-.537A3.683 3.683 0 018.145 3c.578 0 1.112.11 1.603.33.49.221.907.508 1.25.861.16.282.16.512 0 .692-.16.18-.38.214-.662.102a3.438 3.438 0 00-.978-.669 2.914 2.914 0 00-1.213-.242c-.54 0-.973.125-1.302.375-.328.25-.492.595-.492 1.036 0 .236.046.434.14.596.092.162.217.304.374.426.157.123.329.23.515.324.119.06.24.116.362.169H5.586zM2.5 8h11a.5.5 0 110 1h-11a.5.5 0 010-1z"}))},Uut=qut;var AD={};de(AD,{icon:()=>Yut});var hhr=V(ne());var Gut=["title","titleId"];function xoe(){return xoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kut=function(t){var n=t.title,r=t.titleId,o=Jut(t,Gut);return c("svg",xoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14 3v2H2V3v10h12V3zM2 2h12c.552 0 1 .413 1 .923v10.154c0 .51-.448.923-1 .923H2c-.552 0-1-.413-1-.923V2.923C1 2.413 1.448 2 2 2zm0 5h12v1H2V7zm0 3h12v1H2v-1z"}))},Yut=Kut;var MD={};de(MD,{icon:()=>rct});var vhr=V(ne());var Qut=["title","titleId"];function _oe(){return _oe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ect(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tct=function(t){var n=t.title,r=t.titleId,o=Zut(t,Qut);return c("svg",_oe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 3.536V7.8c0 1.628 1.224 2.6 3 2.6 1.783 0 3-.972 3-2.6V3.536c0-.357.167-.536.5-.536.333 0 .5.179.5.536v4.318c0 2.093-1.665 3.546-4 3.546S4 9.893 4 7.8V3.536C4 3.179 4.167 3 4.5 3c.333 0 .5.179.5.536zM2.5 13h11a.5.5 0 110 1h-11a.5.5 0 110-1z"}))},rct=tct;var RD={};de(RD,{icon:()=>sct});var yhr=V(ne());var nct=["title","titleId"];function Soe(){return Soe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ict(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var act=function(t){var n=t.title,r=t.titleId,o=oct(t,nct);return c("svg",Soe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.5 6h5c1.943 0 3 1.057 3 3s-1.057 3-3 3H9v-1h1.5c1.39 0 2-.61 2-2 0-1.39-.61-2-2-2h-5v3L2 6.5 5.5 3v3z"}))},sct=act;var DD={};de(DD,{icon:()=>pct});var whr=V(ne());var lct=["title","titleId"];function Eoe(){return Eoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fct=function(t){var n=t.title,r=t.titleId,o=uct(t,lct);return c("svg",Eoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.5 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 110-1zm-3-7a.5.5 0 110-1 .5.5 0 010 1zm0 4a.5.5 0 110-1 .5.5 0 010 1zm0 4a.5.5 0 110-1 .5.5 0 010 1z"}))},pct=fct;var zD={};de(zD,{icon:()=>gct});var xhr=V(ne());var dct=["title","titleId"];function Ioe(){return Ioe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vct=function(t){var n=t.title,r=t.titleId,o=hct(t,dct);return c("svg",Ioe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M14.95 3.684L8.637 8.912a1 1 0 01-1.276 0L1.051 3.684A.999.999 0 001 4v8a1 1 0 001 1h12a1 1 0 001-1V4a.999.999 0 00-.05-.316zM2 2h12a2 2 0 012 2v8a2 2 0 01-2 2H2a2 2 0 01-2-2V4a2 2 0 012-2zm-.21 1l5.576 4.603a1 1 0 001.27.003L14.268 3H1.79z"}))},gct=vct;var ND={};de(ND,{icon:()=>_U});var Shr=V(ne());var yct=["title","titleId"];function koe(){return koe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oct=function(t){var n=t.title,r=t.titleId,o=bct(t,yct);return c("svg",koe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o))},_U=Oct;var LD={};de(LD,{icon:()=>Ict});var Ihr=V(ne());var xct=["title","titleId"];function Poe(){return Poe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ect=function(t){var n=t.title,r=t.titleId,o=_ct(t,xct);return c("svg",Poe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M15.862 14.18v.001a.482.482 0 01.1.521.5.5 0 01-.447.299h-3.149c-.07 0-.136 0-.2-.003a.664.664 0 01-.414-.14c-.35-.31-.684-.637-1.001-.981l-1.772-1.738a5.941 5.941 0 01-3.802.14l-.045-.012a5.89 5.89 0 01-2.682-1.712A5.715 5.715 0 011.08 7.72a5.66 5.66 0 01.348-3.118A5.78 5.78 0 013.39 2.124a5.979 5.979 0 016.136-.505 5.836 5.836 0 012.356 2.123 5.67 5.67 0 01.873 3.017l.001.003c0 .128-.051.25-.143.34a.495.495 0 01-.694 0 .476.476 0 01-.143-.34c0-.95-.288-1.878-.826-2.668a4.88 4.88 0 00-2.198-1.769 4.99 4.99 0 00-2.83-.273 4.93 4.93 0 00-2.509 1.314 4.774 4.774 0 00-1.34 2.46A4.715 4.715 0 002.352 8.6a4.82 4.82 0 001.804 2.155c.805.528 1.752.81 2.721.81a4.899 4.899 0 001.296-.194l.032-.009.717-.211a.506.506 0 01.483.111l1.11 1.026 1.788 1.752h2.03l-3.657-3.583a.475.475 0 01.014-.666.495.495 0 01.679-.013l4.493 4.402z"}),c("path",{d:"M7.097 3.468L9.679 4.93a.433.433 0 01.218.37v2.924a.422.422 0 01-.218.37l-2.582 1.461a.438.438 0 01-.437 0L4.077 8.594a.433.433 0 01-.218-.37V5.3a.422.422 0 01.218-.37L6.66 3.467a.446.446 0 01.437 0zm1.845 4.27V5.784a.328.328 0 00-.17-.287L7.047 4.52a.342.342 0 00-.338 0l-1.726.977a.336.336 0 00-.168.287v1.953a.326.326 0 00.17.287l1.724.977a.342.342 0 00.338 0l1.726-.978a.334.334 0 00.169-.287z"}))},Ict=Ect;var FD={};de(FD,{icon:()=>Tct});var Phr=V(ne());var kct=["title","titleId"];function joe(){return joe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cct=function(t){var n=t.title,r=t.titleId,o=Pct(t,kct);return c("svg",joe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2.648 9.937l7.29-7.288a2.21 2.21 0 013.124 0l2.29 2.288a2.21 2.21 0 010 3.126L10.413 13H12.5a.5.5 0 010 1H4.501a2.21 2.21 0 01-1.563-.647l.707-.707c.227.226.535.354.856.354h4.005a1.21 1.21 0 00.848-.354l1.292-1.293-4-4-3.29 3.291a1.21 1.21 0 000 1.712l.29.29-.708.707-.29-.29a2.21 2.21 0 010-3.126zM8 6h6.89a1.208 1.208 0 00-.246-.356L14 5H9L8 6zm2-2h3l-.645-.644a1.21 1.21 0 00-1.71 0L10 4zm4.89 3H7.708l1 1H14l.644-.644A1.22 1.22 0 0014.891 7zM9.708 9l1.646 1.646L13 9H9.707z"}),c("path",{d:"M14 11.5a.5.5 0 11-1 0 .5.5 0 011 0zm1.5-.5a.5.5 0 100-1 .5.5 0 000 1zm-1 2a.5.5 0 000 1h1a.5.5 0 000-1h-1z"}))},Tct=Cct;var BD={};de(BD,{icon:()=>zct});var Chr=V(ne());var Act=["title","titleId"];function Coe(){return Coe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dct=function(t){var n=t.title,r=t.titleId,o=Mct(t,Act);return c("svg",Coe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M12.535 12.493a.47.47 0 01.468.468v2.564a.473.473 0 01-.466.475H3V0H12.595a.45.45 0 01.398.463v2.565a.469.469 0 01-.468.467h-.065a.468.468 0 01-.467-.467V1H4v14h8.01l-.007-2.04c0-.257.21-.467.467-.467h.065zm-1.096-7.59l2.121 2.122a1.5 1.5 0 010 2.121l-2.12 2.122a.5.5 0 11-.708-.708l2.121-2.12a.5.5 0 000-.708l-2.121-2.121a.5.5 0 01.707-.707z"}))},zct=Dct;var WD={};de(WD,{icon:()=>Wct});var Ahr=V(ne());var Nct=["title","titleId"];function Toe(){return Toe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bct=function(t){var n=t.title,r=t.titleId,o=Lct(t,Nct);return c("svg",Toe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M4.354 12.354l8-8a.5.5 0 00-.708-.708l-8 8a.5.5 0 00.708.708zM1 10.5a.5.5 0 111 0v3a.5.5 0 00.5.5h3a.5.5 0 110 1h-3A1.5 1.5 0 011 13.5v-3zm14-5a.5.5 0 11-1 0v-3a.5.5 0 00-.5-.5h-3a.5.5 0 110-1h3A1.5 1.5 0 0115 2.5v3z"}))},Wct=Bct;var HD={};de(HD,{icon:()=>Uct});var Rhr=V(ne());var Hct=["title","titleId"];function Aoe(){return Aoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qct=function(t){var n=t.title,r=t.titleId,o=$ct(t,Hct);return c("svg",Aoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6.707 10L10 6.707A.5.5 0 009.293 6L6 9.293a.5.5 0 10.707.707zM4 9.5a.5.5 0 011 0v1a.5.5 0 00.5.5h1a.5.5 0 110 1h-1A1.5 1.5 0 014 10.5v-1zm8-3a.5.5 0 11-1 0v-1a.5.5 0 00-.5-.5h-1a.5.5 0 010-1h1A1.5 1.5 0 0112 5.5v1z"}))},Uct=qct;var $D={};de($D,{icon:()=>Yct});var zhr=V(ne());var Gct=["title","titleId"];function Moe(){return Moe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kct=function(t){var n=t.title,r=t.titleId,o=Jct(t,Gct);return c("svg",Moe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.505 1c.422-.003.844.17 1.166.516l1.95 2.05c.213.228.213.6 0 .828a.52.52 0 01-.771 0L9 2.451v7.993c0 .307-.224.556-.5.556s-.5-.249-.5-.556v-7.96l-1.82 1.91a.52.52 0 01-.77 0 .617.617 0 010-.829l1.95-2.05A1.575 1.575 0 018.5 1h.005zM4.18 7c-.473 0-.88.294-.972.703l-1.189 5.25a.776.776 0 00-.019.172c0 .483.444.875.99.875H14.01c.065 0 .13-.006.194-.017.537-.095.885-.556.778-1.03l-1.19-5.25C13.7 7.294 13.293 7 12.822 7H4.18zM6 6v1h5V6h1.825c.946 0 1.76.606 1.946 1.447l1.19 5.4c.215.975-.482 1.923-1.556 2.118a2.18 2.18 0 01-.39.035H2.985C1.888 15 1 14.194 1 13.2c0-.119.013-.237.039-.353l1.19-5.4C2.414 6.606 3.229 6 4.174 6H6z"}))},Yct=Kct;var VD={};de(VD,{icon:()=>rft});var Lhr=V(ne());var Qct=["title","titleId"];function Roe(){return Roe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tft=function(t){var n=t.title,r=t.titleId,o=Zct(t,Qct);return c("svg",Roe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M15.98 7.873c.013.03.02.064.02.098v.06a.24.24 0 01-.02.097C15.952 8.188 13.291 14 8 14S.047 8.188.02 8.128A.24.24 0 010 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2s7.953 5.813 7.98 5.873zm-1.37-.424a12.097 12.097 0 00-1.385-1.862C11.739 3.956 9.999 3 8 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 00-1.701 2.414 12.095 12.095 0 001.7 2.413C4.26 12.043 6.002 13 8 13s3.74-.956 5.225-2.587A12.097 12.097 0 0014.926 8c-.08-.15-.189-.343-.315-.551zM8 4.75A3.253 3.253 0 0111.25 8 3.254 3.254 0 018 11.25 3.253 3.253 0 014.75 8 3.252 3.252 0 018 4.75zm0 1C6.76 5.75 5.75 6.76 5.75 8S6.76 10.25 8 10.25 10.25 9.24 10.25 8 9.24 5.75 8 5.75zm0 1.5a.75.75 0 100 1.5.75.75 0 000-1.5z"}))},rft=tft;var qD={};de(qD,{icon:()=>sft});var Bhr=V(ne());var nft=["title","titleId"];function Doe(){return Doe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ift(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aft=function(t){var n=t.title,r=t.titleId,o=oft(t,nft);return c("svg",Doe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.318 13.47l.776-.776A6.04 6.04 0 008 13c1.999 0 3.74-.956 5.225-2.587A12.097 12.097 0 0014.926 8a12.097 12.097 0 00-1.701-2.413l-.011-.012.707-.708c1.359 1.476 2.045 2.976 2.058 3.006.014.03.021.064.021.098v.06a.24.24 0 01-.02.097C15.952 8.188 13.291 14 8 14a7.03 7.03 0 01-2.682-.53zM2.04 11.092C.707 9.629.034 8.158.02 8.128A.24.24 0 010 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2c.962 0 1.837.192 2.625.507l-.78.78A6.039 6.039 0 008 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 00-1.701 2.414 12.11 12.11 0 001.674 2.383l-.708.708zM8.362 4.77L7.255 5.877a2.262 2.262 0 00-1.378 1.378L4.77 8.362A3.252 3.252 0 018.362 4.77zm2.86 2.797a3.254 3.254 0 01-3.654 3.654l1.06-1.06a2.262 2.262 0 001.533-1.533l1.06-1.06zm-9.368 7.287a.5.5 0 01-.708-.708l13-13a.5.5 0 01.708.708l-13 13z"}))},sft=aft;var UD={};de(UD,{icon:()=>pft});var Hhr=V(ne());var lft=["title","titleId"];function zoe(){return zoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fft=function(t){var n=t.title,r=t.titleId,o=uft(t,lft);return c("svg",zoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zM2.739 8.802a.533.533 0 01.922-.537C4.815 10.245 6.249 11.2 8 11.2c1.75 0 3.185-.956 4.34-2.935a.533.533 0 01.92.537c-1.333 2.287-3.1 3.465-5.26 3.465-2.16 0-3.927-1.178-5.26-3.465z"}))},pft=fft;var GD={};de(GD,{icon:()=>gft});var Vhr=V(ne());var dft=["title","titleId"];function Noe(){return Noe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vft=function(t){var n=t.title,r=t.titleId,o=hft(t,dft);return c("svg",Noe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zM3.2 10.667a.533.533 0 010-1.067h9.6a.533.533 0 110 1.067H3.2z",fillRule:"evenodd"}))},gft=vft;var JD={};de(JD,{icon:()=>xft});var Uhr=V(ne());var yft=["title","titleId"];function Loe(){return Loe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oft=function(t){var n=t.title,r=t.titleId,o=bft(t,yft);return c("svg",Loe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm2.487 3.868a.533.533 0 11-.708.797C10.936 9.725 9.458 9.067 8 9.067c-1.458 0-2.937.657-4.446 1.998a.533.533 0 11-.708-.797C4.536 8.765 6.258 8 8 8s3.463.765 5.154 2.268z"}))},xft=Oft;var XD={};de(XD,{icon:()=>kft});var Jhr=V(ne());var _ft=["title","titleId"];function Foe(){return Foe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ift=function(t){var n=t.title,r=t.titleId,o=Sft(t,_ft);return c("svg",Foe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.999 15.999a8 8 0 110-16 8 8 0 010 16zM8 15A7 7 0 108 1a7 7 0 000 14zM3.5 5h9a.5.5 0 110 1h-9a.5.5 0 010-1zm2 3h5a.5.5 0 110 1h-5a.5.5 0 010-1zm2 3h1a.5.5 0 110 1h-1a.5.5 0 110-1z"}))},kft=Ift;var KD={};de(KD,{icon:()=>Aft});var Khr=V(ne());var Pft=["title","titleId"];function Boe(){return Boe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tft=function(t){var n=t.title,r=t.titleId,o=jft(t,Pft);return c("svg",Boe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.686 8.464c1.547-.619 3.08-.619 4.628 0A.5.5 0 0013 8V2a.5.5 0 00-.276-.447C11.259.82 9.458.82 7.342 1.526c-1.884.628-3.417.628-4.618.027A.5.5 0 002 2v12.5a.5.5 0 101 0V8.553c1.411.627 2.983.592 4.686-.089zM3 2.741c1.322.42 2.878.327 4.658-.267C9.4 1.894 10.843 1.85 12 2.322v4.975c-1.56-.464-3.128-.384-4.686.239-1.54.616-2.892.616-4.09.017A.498.498 0 003 7.5V2.74z"}))},Aft=Tft;var YD={};de(YD,{icon:()=>Nft});var Qhr=V(ne());var Mft=["title","titleId"];function Woe(){return Woe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zft=function(t){var n=t.title,r=t.titleId,o=Rft(t,Mft);return c("svg",Woe({viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.14.192L7.53 2.49a.67.67 0 00.942 0L10.86.192a.677.677 0 01.944 0 .65.65 0 010 .93l-2.388 2.3a2.02 2.02 0 01-2.832 0l-2.388-2.3a.65.65 0 010-.93.677.677 0 01.944 0zm0 15.616l2.39-2.298a.67.67 0 01.942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 000-.93l-2.388-2.3a2.02 2.02 0 00-2.832 0l-2.388 2.3a.65.65 0 000 .93c.26.256.683.256.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},Nft=zft;var QD={};de(QD,{icon:()=>Hft});var e0r=V(ne());var Lft=["title","titleId"];function Hoe(){return Hoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wft=function(t){var n=t.title,r=t.titleId,o=Fft(t,Lft);return c("svg",Hoe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2H1v11h6.1c.07.348.177.682.316 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v3.416a4.962 4.962 0 00-1-.316V4H7.125A1.125 1.125 0 016 2.875V2zm10 10a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},Hft=Wft;var ZD={};de(ZD,{icon:()=>Gft});var r0r=V(ne());var $ft=["title","titleId"];function $oe(){return $oe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uft=function(t){var n=t.title,r=t.titleId,o=Vft(t,$ft);return c("svg",$oe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 2H2v11h12V4H8.125A1.125 1.125 0 017 2.875V2zm.25-1a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H14a1 1 0 011 1v9a1 1 0 01-1 1H2a1 1 0 01-1-1V2a1 1 0 011-1h5.25z"}))},Gft=Uft;var ez={};de(ez,{icon:()=>Qft});var o0r=V(ne());var Jft=["title","titleId"];function Voe(){return Voe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yft=function(t){var n=t.title,r=t.titleId,o=Xft(t,Jft);return c("svg",Voe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M1 9.5l.826-3.717A1 1 0 012.802 5H13V4H7.125A1.125 1.125 0 016 2.875V2H1v7.5zm.247 3.5H7.1c.07.348.177.682.316 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v1h.753a1 1 0 01.977 1.217l-.447 2.011a5.015 5.015 0 00-.887-.618L14.753 6H2.803l-1.556 7zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-4 .5a.577.577 0 01-.57-.495l-.29-2.015a.867.867 0 111.718 0l-.288 2.015a.577.577 0 01-.57.495zm0 2.5a1 1 0 100-2 1 1 0 000 2z"}))},Qft=Yft;var tz={};de(tz,{icon:()=>npt});var a0r=V(ne());var Zft=["title","titleId"];function qoe(){return qoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rpt=function(t){var n=t.title,r=t.titleId,o=ept(t,Zft);return c("svg",qoe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1 9.5l.826-3.717A1 1 0 012.802 5H13V4H7.125A1.125 1.125 0 016 2.875V2H1v7.5zm.247 3.5h11.95l1.556-7H2.803l-1.556 7zM13 14H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v1h.753a1 1 0 01.977 1.217l-1.556 7a1 1 0 01-.976.783H13z"}))},npt=rpt;var rz={};de(rz,{icon:()=>lpt});var l0r=V(ne());var opt=["title","titleId"];function Uoe(){return Uoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function apt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var spt=function(t){var n=t.title,r=t.titleId,o=ipt(t,opt);return c("svg",Uoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 2a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1zm5.146.22l7.2 4.581a1.425 1.425 0 010 2.398l-7.2 4.581C7.21 14.375 6 13.692 6 12.581V3.42c0-1.112 1.21-1.795 2.146-1.2z",clipRule:"evenodd"}))},lpt=spt;var nz={};de(nz,{icon:()=>dpt});var c0r=V(ne());var upt=["title","titleId"];function Goe(){return Goe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ppt=function(t){var n=t.title,r=t.titleId,o=cpt(t,upt);return c("svg",Goe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 2a1 1 0 011 1v10a1 1 0 11-2 0V3a1 1 0 011-1zm-5.146.22l-7.2 4.581a1.425 1.425 0 000 2.398l7.2 4.581c.936.595 2.146-.088 2.146-1.199V3.42c0-1.111-1.21-1.794-2.146-1.199z",clipRule:"evenodd"}))},dpt=ppt;var oz={};de(oz,{icon:()=>ypt});var p0r=V(ne());var hpt=["title","titleId"];function Joe(){return Joe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gpt=function(t){var n=t.title,r=t.titleId,o=mpt(t,hpt);return c("svg",Joe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 7V3h1v3h3v1H9zM7 7H3V6h3V3h1v4zm2 2h4v1h-3v3H9V9zM7 9v4H6v-3H3V9h4zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994z"}))},ypt=gpt;var iz={};de(iz,{icon:()=>_pt});var h0r=V(ne());var bpt=["title","titleId"];function Xoe(){return Xoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Opt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xpt=function(t){var n=t.title,r=t.titleId,o=wpt(t,bpt);return c("svg",Xoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 3v4h-1V4H9V3h4zM3 3h4v1H4v3H3V3zm10 10H9v-1h3V9h1v4zM3 13V9h1v3h3v1H3zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994z",fillRule:"evenodd"}))},_pt=xpt;var az={};de(az,{icon:()=>Ppt});var v0r=V(ne());var Spt=["title","titleId"];function Koe(){return Koe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ipt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kpt=function(t){var n=t.title,r=t.titleId,o=Ept(t,Spt);return c("svg",Koe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 2.226v2.218c-.359-.143-.845-.218-1.315-.218-1.059 0-1.631.519-1.802 1.565l-.168.937h2.798v2.159H9.41l-.313 1.674C8.696 12.987 7.261 14 4.785 14c-.718 0-1.35-.092-1.785-.251v-2.243c.418.176.905.268 1.383.268 1.008 0 1.546-.435 1.725-1.523l.24-1.364H3.787V6.728h2.812l.288-1.264C7.286 3.071 8.662 2 11.352 2c.598 0 1.306.1 1.648.226z"}))},Ppt=kpt;var sz={};de(sz,{icon:()=>Mpt});var y0r=V(ne());var jpt=["title","titleId"];function Yoe(){return Yoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Apt=function(t){var n=t.title,r=t.titleId,o=Cpt(t,jpt);return c("svg",Yoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M.164 10.329L1.87 8 .163 5.67c.18-.601.43-1.19.758-1.757a8.197 8.197 0 011.142-1.535l2.872.313L6.099.05a8.166 8.166 0 013.8-.003l1.166 2.644 2.872-.313a8.166 8.166 0 011.899 3.293L14.13 8l1.706 2.33c-.18.601-.43 1.19-.758 1.757a8.197 8.197 0 01-1.142 1.535l-2.872-.313-1.164 2.641a8.166 8.166 0 01-3.8.003l-1.166-2.644-2.872.313a8.166 8.166 0 01-1.899-3.293zm4.663 1.986a1 1 0 011.023.591l.957 2.17c.79.134 1.597.132 2.387-.001l.956-2.169a1 1 0 011.023-.59l2.358.256a7.23 7.23 0 001.194-2.068l-1.401-1.913a1 1 0 010-1.182l1.4-1.912a7.165 7.165 0 00-1.192-2.069l-2.359.257a1 1 0 01-1.023-.591L9.193.924a7.165 7.165 0 00-2.387.001L5.85 3.094a1 1 0 01-1.023.59l-2.358-.256a7.23 7.23 0 00-1.194 2.068l1.401 1.913a1 1 0 010 1.182l-1.4 1.912c.28.751.681 1.45 1.192 2.069l2.359-.257zM8 11a3 3 0 110-6 3 3 0 010 6zm0-1a2 2 0 100-4 2 2 0 000 4z"}))},Mpt=Apt;var lz={};de(lz,{icon:()=>Lpt});var w0r=V(ne());var Rpt=["title","titleId"];function Qoe(){return Qoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Npt=function(t){var n=t.title,r=t.titleId,o=Dpt(t,Rpt);return c("svg",Qoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.035 9A3.5 3.5 0 0115 7.05V4.5c0-1.072-.648-1.72-2.098-2.01a.5.5 0 01.196-.98C14.981 1.886 16 2.905 16 4.5v4.25c0 .072-.015.14-.043.202A3.5 3.5 0 119.035 10h-2.07A3.5 3.5 0 11.043 8.952.498.498 0 010 8.75V4.5c0-1.595 1.019-2.614 2.902-2.99a.5.5 0 01.196.98C1.648 2.78 1 3.428 1 4.5v2.55A3.5 3.5 0 016.965 9h2.07zM3.5 12a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm9 0a2.5 2.5 0 100-5 2.5 2.5 0 000 5z"}))},Lpt=Npt;var uz={};de(uz,{icon:()=>$pt});var x0r=V(ne());var Fpt=["title","titleId"];function Zoe(){return Zoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hpt=function(t){var n=t.title,r=t.titleId,o=Bpt(t,Fpt);return c("svg",Zoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.019 8a6.462 6.462 0 001.003 3h2.382a14.469 14.469 0 01-.396-3h-2.99zm0-1h2.989c.033-1.078.172-2.094.396-3H2.022a6.462 6.462 0 00-1.003 3zM13.98 8h-2.989a14.469 14.469 0 01-.396 3h2.382a6.462 6.462 0 001.003-3zm0-1a6.462 6.462 0 00-1.003-3h-2.382c.224.906.363 1.922.396 3h2.99zM5.008 8c.037 1.107.195 2.127.429 3h4.126c.234-.873.392-1.893.429-3H5.008zm0-1h4.984a13.422 13.422 0 00-.429-3H5.437a13.422 13.422 0 00-.429 3zM.016 8H0V7h.016a7.5 7.5 0 0114.968 0H15v1h-.016A7.5 7.5 0 01.016 8zm2.794 4a6.501 6.501 0 002.717 1.695A7.315 7.315 0 014.7 12H2.81zm9.38 0H10.3c-.23.657-.51 1.23-.827 1.695A6.501 6.501 0 0012.19 12zm-6.428 0c.484 1.24 1.132 2 1.738 2 .606 0 1.254-.76 1.738-2H5.762zM2.81 3H4.7c.23-.657.51-1.23.827-1.695A6.501 6.501 0 002.81 3zm9.38 0a6.501 6.501 0 00-2.717-1.695c.317.465.597 1.038.827 1.695h1.89zM5.762 3h3.476C8.754 1.76 8.106 1 7.5 1c-.606 0-1.254.76-1.738 2z"}))},$pt=Hpt;var cz={};de(cz,{icon:()=>Jpt});var S0r=V(ne());var Vpt=["title","titleId"];function eie(){return eie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Upt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gpt=function(t){var n=t.title,r=t.titleId,o=qpt(t,Vpt);return c("svg",eie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13.5 6c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 01-.5-.5c0-.276.229-.5.5-.5h11zm0 3c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 01-.5-.5c0-.276.229-.5.5-.5h11z"}))},Jpt=Gpt;var fz={};de(fz,{icon:()=>Zpt});var I0r=V(ne());var Xpt=["title","titleId"];function tie(){return tie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ypt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qpt=function(t){var n=t.title,r=t.titleId,o=Kpt(t,Xpt);return c("svg",tie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2.5c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 01-.5-.5v-11zm3 0c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 01-.5-.5v-11z"}))},Zpt=Qpt;var pz={};de(pz,{icon:()=>odt});var P0r=V(ne());var edt=["title","titleId"];function rie(){return rie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ndt=function(t){var n=t.title,r=t.titleId,o=tdt(t,edt);return c("svg",rie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1 5V1h4v4H1zm3-1V2H2v2h2zm2 1V1h4v4H6zm3-1V2H7v2h2zm2 1V1h4v4h-4zm1-1h2V2h-2v2zM1 10V6h4v4H1zm3-1V7H2v2h2zm2 1V6h4v4H6zm3-1V7H7v2h2zm2 1V6h4v4h-4zm3-1V7h-2v2h2zM1 15v-4h4v4H1zm1-1h2v-2H2v2zm4 1v-4h4v4H6zm1-1h2v-2H7v2zm4 1v-4h4v4h-4zm1-1h2v-2h-2v2z"}))},odt=ndt;var dz={};de(dz,{icon:()=>udt});var C0r=V(ne());var idt=["title","titleId"];function nie(){return nie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ldt=function(t){var n=t.title,r=t.titleId,o=adt(t,idt);return c("svg",nie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.402 3.098a3.75 3.75 0 00-5.304 5.304l5.558 5.27L8 14l5.892-5.588a3.75 3.75 0 10-5.294-5.313L8 3.697l-.598-.599zM2.796 7.685a2.747 2.747 0 01.01-3.88 2.75 2.75 0 013.889 0L8 5.111l1.305-1.306a2.75 2.75 0 113.89 3.89L8 12.62 2.796 7.685z"}))},udt=ldt;var hz={};de(hz,{icon:()=>hdt});var A0r=V(ne());var cdt=["title","titleId"];function oie(){return oie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ddt=function(t){var n=t.title,r=t.titleId,o=fdt(t,cdt);return c("svg",oie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 9a3 3 0 110 6 3 3 0 010-6zm0 1a2 2 0 100 4 2 2 0 000-4zM4 2a2 2 0 110 4 2 2 0 010-4zm0 1a1 1 0 100 2 1 1 0 000-2zm0 5a4 4 0 110 8 4 4 0 010-8zm0 1a3 3 0 100 6 3 3 0 000-6zm8-9a4 4 0 110 8 4 4 0 010-8zm0 1a3 3 0 100 6 3 3 0 000-6z"}))},hdt=ddt;var mz={};de(mz,{icon:()=>bdt});var R0r=V(ne());var mdt=["title","titleId"];function iie(){return iie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ydt=function(t){var n=t.title,r=t.titleId,o=vdt(t,mdt);return c("svg",iie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 00-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 010 8.373zM8 15A6.956 6.956 0 013.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 002.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 018 15zm-5.601-2.813a6.963 6.963 0 010-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 003 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 118 4a4 4 0 010 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 008 3a4.979 4.979 0 00-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 018 1zm0-1a8.001 8.001 0 10.003 16.002A8.001 8.001 0 008 0z"}))},bdt=ydt;var vz={};de(vz,{icon:()=>Sdt});var z0r=V(ne());var wdt=["title","titleId"];function aie(){return aie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _dt=function(t){var n=t.title,r=t.titleId,o=Odt(t,wdt);return c("svg",aie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.13 1.229l5.5 4.47a1 1 0 01.37.777V14a1 1 0 01-1 1H2a1 1 0 01-1-1V6.476a1 1 0 01.37-.776l5.5-4.471a1 1 0 011.26 0zM13 6.476L7.5 2.005 2 6.475V14h11V6.476z"}))},Sdt=_dt;var gz={};de(gz,{icon:()=>jdt});var L0r=V(ne());var Edt=["title","titleId"];function sie(){return sie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pdt=function(t){var n=t.title,r=t.titleId,o=Idt(t,Edt);return c("svg",sie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.5 11.508L7.468 8H6.25V7h2.401l.03 3.508H9.8v1H7.5zm-.25-6.202a.83.83 0 01.207-.577c.137-.153.334-.229.59-.229.256 0 .454.076.594.23.14.152.209.345.209.576 0 .228-.07.417-.21.568-.14.15-.337.226-.593.226-.256 0-.453-.075-.59-.226a.81.81 0 01-.207-.568zM8 13A5 5 0 108 3a5 5 0 000 10zm0 1A6 6 0 118 2a6 6 0 010 12z"}))},jdt=Pdt;var yz={};de(yz,{icon:()=>Rdt});var B0r=V(ne());var Cdt=["title","titleId"];function lie(){return lie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Adt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mdt=function(t){var n=t.title,r=t.titleId,o=Tdt(t,Cdt);return c("svg",lie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6 5a2 2 0 11-4 0 2 2 0 014 0zm9-4a1 1 0 011 1v12a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1zm-3.448 6.134l-3.76 2.769a.5.5 0 01-.436.077l-.087-.034-1.713-.87L1 11.8V14h14V9.751l-3.448-2.617zM15 2H1v8.635l4.28-2.558a.5.5 0 01.389-.054l.094.037 1.684.855 3.813-2.807a.5.5 0 01.52-.045l.079.05L15 8.495V2z"}))},Rdt=Mdt;var bz={};de(bz,{icon:()=>Fdt});var H0r=V(ne());var Ddt=["title","titleId"];function uie(){return uie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ndt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ldt=function(t){var n=t.title,r=t.titleId,o=zdt(t,Ddt);return c("svg",uie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 10.114l1.85-1.943a.52.52 0 01.77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 01-2.31 0L5.41 9a.617.617 0 010-.829.52.52 0 01.77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 00-.972.804l-1.189 6A.995.995 0 002.991 14h11.018a1 1 0 00.972-1.196l-1.19-6a.993.993 0 00-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0114.016 15H2.984a1.992 1.992 0 01-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z"}))},Fdt=Ldt;var wz={};de(wz,{icon:()=>Vdt});var V0r=V(ne());var Bdt=["title","titleId"];function cie(){return cie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $dt=function(t){var n=t.title,r=t.titleId,o=Wdt(t,Bdt);return c("svg",cie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h3v1H5zM3 8V7h1v1H3zm2 3v-1h2v1H5zm5.5-1.207L9.086 8.379l-.707.707L9.793 10.5l-1.414 1.414.707.707 1.414-1.414 1.414 1.414.707-.707-1.414-1.414 1.414-1.414-.707-.707L10.5 9.793zM3 11v-1h1v1H3zm7.5-5a4.5 4.5 0 110 9 4.5 4.5 0 010-9z"}))},Vdt=$dt;var Oz={};de(Oz,{icon:()=>Xdt});var U0r=V(ne());var qdt=["title","titleId"];function fie(){return fie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jdt=function(t){var n=t.title,r=t.titleId,o=Udt(t,qdt);return c("svg",fie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 2H2v11h4v1H1V1h12v5h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h6v1H5zM3 8V7h1v1H3zm2 3v-1h3v1H5zm-2 0v-1h1v1H3zm4.502 1.41L12.913 7 15 9.087l-5.41 5.41L7 15l.502-2.59z"}))},Xdt=Jdt;var xz={};de(xz,{icon:()=>eht});var J0r=V(ne());var Kdt=["title","titleId"];function pie(){return pie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zdt=function(t){var n=t.title,r=t.titleId,o=Ydt(t,Kdt);return c("svg",pie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M14.516 9H10.5a.5.5 0 010-1h4.016L13.11 5.948c-.171-.252-.137-.62.079-.821.217-.2.531-.159.703.092l2 2.916a.648.648 0 01.108.397.643.643 0 01-.108.332l-2 2.918A.478.478 0 0113.5 12a.457.457 0 01-.312-.127c-.216-.202-.25-.57-.079-.82L14.516 9zM3 15H1a1 1 0 01-1-1V2a1 1 0 011-1h7.8c.274 0 .537.113.726.312l2.2 2.428c.176.186.274.433.274.689V7h-1V5H8.5a.5.5 0 01-.5-.5V2H3v12h8v-4h1v4a1 1 0 01-1 1H3zm-1-1V2H1v12h1z"}))},eht=Zdt;var _z={};de(_z,{icon:()=>iht});var K0r=V(ne());var tht=["title","titleId"];function die(){return die=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oht=function(t){var n=t.title,r=t.titleId,o=rht(t,tht);return c("svg",die({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 8H4.915a1.5 1.5 0 110-1H8V2.5A1.5 1.5 0 019.5 1h2.585a1.5 1.5 0 110 1H9.5a.5.5 0 00-.5.5v10a.5.5 0 00.5.5h2.585a1.5 1.5 0 110 1H9.5A1.5 1.5 0 018 12.5V8zM3.5 3a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm0 12a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm10-6a1.5 1.5 0 110-3 1.5 1.5 0 010 3z"}))},iht=oht;var Sz={};de(Sz,{icon:()=>cht});var Q0r=V(ne());var aht=["title","titleId"];function hie(){return hie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uht=function(t){var n=t.title,r=t.titleId,o=sht(t,aht);return c("svg",hie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h3v1H5zM3 8V7h1v1H3zm2 3v-1h2v1H5zm5-1H8v1h2v2h1v-2h2v-1h-2V8h-1v2zm-7 1v-1h1v1H3zm7.5-5a4.5 4.5 0 110 9 4.5 4.5 0 010-9z"}))},cht=uht;var Ez={};de(Ez,{icon:()=>mht});var emr=V(ne());var fht=["title","titleId"];function mie(){return mie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hht=function(t){var n=t.title,r=t.titleId,o=pht(t,fht);return c("svg",mie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 2H2v11h6v1H1V1h12v6.839l-1-.707V2z"}),c("path",{d:"M8 11v-1H5v1h3zm0-3.055c0-.342.082-.664.23-.945H5v1h3v-.055zM5 5h5.999V4H5v1zM3 4v1h1V4H3zm0 3v1h1V7H3zm0 3v1h1v-1H3zm11.607.2l-4.32-3.055C9.727 6.75 9 7.204 9 7.945v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598z"}))},mht=hht;var Iz={};de(Iz,{icon:()=>wht});var rmr=V(ne());var vht=["title","titleId"];function vie(){return vie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bht=function(t){var n=t.title,r=t.titleId,o=ght(t,vht);return c("svg",vie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 5h5.999V4H5v1zM3 5h1V4H3v1zm0 3h1V7H3v1zm6.022-1l-.15.333-.737-.078-.467-.05-.33.342A5.13 5.13 0 006.948 8H5V7h4.022zm-3.005 3L6 10.056l.306.411.399.533H5v-1h1.017zM3 11h1v-1H3v1z"}),c("path",{d:"M13 7.05l-.162-.359-.2-.447-.47-.11A5.019 5.019 0 0012 6.098V2H2v11h4.36c.157.354.355.69.59 1H1V1h12v6.05z"}),c("path",{d:"M11.004 7c.322 0 .646.036.966.109l.595 1.293 1.465-.152c.457.462.786 1.016.969 1.61l-.87 1.14.871 1.141a3.94 3.94 0 01-.387.859 4.058 4.058 0 01-.583.75l-1.465-.152-.594 1.292a4.37 4.37 0 01-1.941.001l-.594-1.293-1.466.152a3.954 3.954 0 01-.969-1.61l.87-1.14L7 9.86a3.947 3.947 0 01.97-1.61l1.466.152.593-1.292a4.37 4.37 0 01.975-.11zM11 12a1 1 0 10.002-1.998A1 1 0 0011 12z"}))},wht=bht;var kz={};de(kz,{icon:()=>Eht});var omr=V(ne());var Oht=["title","titleId"];function gie(){return gie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _ht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sht=function(t){var n=t.title,r=t.titleId,o=xht(t,Oht);return c("svg",gie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10 13.999v-2.99h1V15H0V1h11v3.999h-1V2.001H1v11.998z"}),c("path",{d:"M4.5 10V9H11v1zM13 9.5l3-3-3-3z"}),c("path",{d:"M5.5 6.5v6l-3-3zM7 7V6h6.5v1z"}))},Eht=Sht;var Pz={};de(Pz,{icon:()=>Cht});var amr=V(ne());var Iht=["title","titleId"];function yie(){return yie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jht=function(t){var n=t.title,r=t.titleId,o=kht(t,Iht);return c("svg",yie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M15.363 14.658a.5.5 0 11-.713.7l-2.97-3.023a.5.5 0 01.001-.7A3.9 3.9 0 108.9 12.8a.5.5 0 110 .999 4.9 4.9 0 113.821-1.833l2.642 2.691zM3.094 13a.5.5 0 110 1H2.5A2.5 2.5 0 010 11.5v-9A2.5 2.5 0 012.5 0h9A2.5 2.5 0 0114 2.5v.599a.5.5 0 11-1 0V2.5A1.5 1.5 0 0011.5 1h-9A1.5 1.5 0 001 2.5v9A1.5 1.5 0 002.5 13h.594zM2.5 3a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-4 2a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-2 1a.5.5 0 110 1 .5.5 0 010-1zm0 3a.5.5 0 110-1 .5.5 0 010 1zm6-6a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-8 8a.5.5 0 110-1 .5.5 0 010 1z"}))},Cht=jht;var jz={};de(jz,{icon:()=>Dht});var lmr=V(ne());var Tht=["title","titleId"];function bie(){return bie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rht=function(t){var n=t.title,r=t.titleId,o=Aht(t,Tht);return c("svg",bie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 13.25a5.25 5.25 0 100-10.5 5.25 5.25 0 000 10.5zM8 14A6 6 0 118 2a6 6 0 010 12z"}),c("path",{d:"M8 2a6 6 0 100 12V2z"}))},Dht=Rht;var Cz={};de(Cz,{icon:()=>Bht});var cmr=V(ne());var zht=["title","titleId"];function wie(){return wie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fht=function(t){var n=t.title,r=t.titleId,o=Nht(t,zht);return c("svg",wie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 2a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2h8zm-2 3H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5zM6 5H5v6h1V5zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984z"}))},Bht=Fht;var Tz={};de(Tz,{icon:()=>qht});var pmr=V(ne());var Wht=["title","titleId"];function Oie(){return Oie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $ht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vht=function(t){var n=t.title,r=t.titleId,o=Hht(t,Wht);return c("svg",Oie({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 3h16v11H0V3zm15 10V4H1v9h14zM2 5h2v1H2V5zm2 7v-1H2v1h2zm10-1v1h-2v-1h2zm-3 1v-1H5v1h6zM5 5h1v1H5V5zM3 7H2v1h1V7zm3 0h1v1H6V7zM3 9H2v1h1V9zm3 0h1v1H6V9zm2-4H7v1h1V5zM4 7h1v1H4V7zm5 0H8v1h1V7zm1 0h1v1h-1V7zM5 9H4v1h1V9zm3 0h1v1H8V9zm3 0h-1v1h1V9zM9 5h1v1H9V5zm3 0h-1v1h1V5zm1 0h1v1h-1V5zm1 2h-2v3h2V7z"}))},qht=Vht;var Az={};de(Az,{icon:()=>Kht});var hmr=V(ne());var Uht=["title","titleId"];function xie(){return xie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xht=function(t){var n=t.title,r=t.titleId,o=Ght(t,Uht);return c("svg",xie({xmlns:"http://www.w3.org/2000/svg",width:16,height:10,viewBox:"0 0 16 10","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 9a5 5 0 110-8 5 5 0 110 8zm.75-.692a4 4 0 100-6.615A4.981 4.981 0 0110 5a4.981 4.981 0 01-1.25 3.308zM4.133 8V5.559h2.496v-.625H4.133V2.996h2.719v-.633H3.43V8h.703z"}))},Kht=Xht;var Mz={};de(Mz,{icon:()=>t0t});var vmr=V(ne());var Yht=["title","titleId"];function _ie(){return _ie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e0t=function(t){var n=t.title,r=t.titleId,o=Qht(t,Yht);return c("svg",_ie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 7H3v2h4v2l3-3-3-3v2zM6 6V5a1 1 0 011.707-.707l3 3a1 1 0 010 1.414l-3 3A1 1 0 016 11v-1H3a1 1 0 01-1-1V7a1 1 0 011-1h3zm7.5-3a.5.5 0 01.5.5v9a.5.5 0 11-1 0v-9a.5.5 0 01.5-.5z"}))},t0t=e0t;var Rz={};de(Rz,{icon:()=>a0t});var ymr=V(ne());var r0t=["title","titleId"];function Sie(){return Sie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i0t=function(t){var n=t.title,r=t.titleId,o=n0t(t,r0t);return c("svg",Sie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.192 10.145l2.298-1.792c.259-.196.259-.509 0-.706l-2.298-1.792c-.256-.196-.256-.513 0-.708a.81.81 0 01.93 0l2.3 1.791c.772.59.77 1.537 0 2.124l-2.3 1.791a.81.81 0 01-.93 0c-.256-.195-.256-.512 0-.708zm-6.384-4.29L2.51 7.647c-.259.196-.259.509 0 .706l2.298 1.792c.256.196.256.513 0 .708a.81.81 0 01-.93 0l-2.3-1.791c-.772-.59-.77-1.537 0-2.124l2.3-1.791a.81.81 0 01.93 0c.256.195.256.512 0 .708zM6.5 6h3a.5.5 0 010 1h-3a.5.5 0 010-1zm0 3h3a.5.5 0 010 1h-3a.5.5 0 010-1z"}))},a0t=i0t;var Dz={};de(Dz,{icon:()=>f0t});var wmr=V(ne());var s0t=["title","titleId"];function Eie(){return Eie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c0t=function(t){var n=t.title,r=t.titleId,o=l0t(t,s0t);return c("svg",Eie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 12a4 4 0 100-8 4 4 0 000 8zm0 1A5 5 0 115 3a5 5 0 010 10zm6-1a4 4 0 100-8 4 4 0 000 8zm0 1a5 5 0 110-10 5 5 0 010 10z"}))},f0t=c0t;var zz={};de(zz,{icon:()=>v0t});var xmr=V(ne());var p0t=["title","titleId"];function Iie(){return Iie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function h0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var m0t=function(t){var n=t.title,r=t.titleId,o=d0t(t,p0t);return c("svg",Iie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 4a5 5 0 110 8 5 5 0 110-8zm-.75.692a4 4 0 100 6.615A4.981 4.981 0 016 8c0-1.268.472-2.426 1.25-3.308zM11.348 11l2.078-5.637h-.739l-1.656 4.727h-.062L9.313 5.363h-.739L10.652 11h.696z"}))},v0t=m0t;var Nz={};de(Nz,{icon:()=>O0t});var Smr=V(ne());var g0t=["title","titleId"];function kie(){return kie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w0t=function(t){var n=t.title,r=t.titleId,o=y0t(t,g0t);return c("svg",kie({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 11.42V4.58L8 1.152 2 4.58v6.84l6 3.428 6-3.428zM8 16l7-4V4L8 0 1 4v8l7 4zM8 4.607l3 1.714V9.68l-3 1.714-3-1.714V6.32l3-1.714zm4 1.134v4.518l-4 2.286-4-2.286V5.741l4-2.286 4 2.286z"}))},O0t=w0t;var Lz={};de(Lz,{icon:()=>I0t});var Imr=V(ne());var x0t=["title","titleId"];function Pie(){return Pie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E0t=function(t){var n=t.title,r=t.titleId,o=_0t(t,x0t);return c("svg",Pie({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 5.151v6.269l-5.5 3.142V8.29L14 5.151zm-.508-.861L8 1.152 2.508 4.29 8 7.424l5.492-3.134zM2 5.151l5.5 3.14v6.272L2 11.42V5.15zM15 12l-7 4-7-4V4l7-4 7 4v8z"}))},I0t=E0t;var Fz={};de(Fz,{icon:()=>T0t});var Pmr=V(ne());var k0t=["title","titleId"];function jie(){return jie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C0t=function(t){var n=t.title,r=t.titleId,o=P0t(t,k0t);return c("svg",jie({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.276 1.053a.5.5 0 01.448 0l6 3a.5.5 0 010 .894l-6 3a.5.5 0 01-.448 0l-6-3a.5.5 0 010-.894l6-3zM2.618 4.5L7.5 6.941 12.382 4.5 7.5 2.059 2.618 4.5z"}),c("path",{d:"M1.053 7.276a.5.5 0 01.67-.223L7.5 9.94l5.776-2.888a.5.5 0 11.448.894l-6 3a.5.5 0 01-.448 0l-6-3a.5.5 0 01-.223-.67z"}),c("path",{d:"M1.724 10.053a.5.5 0 10-.448.894l6 3a.5.5 0 00.448 0l6-3a.5.5 0 10-.448-.894L7.5 12.94l-5.776-2.888z"}))},T0t=C0t;var Bz={};de(Bz,{icon:()=>z0t});var Cmr=V(ne());var A0t=["title","titleId"];function Cie(){return Cie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var D0t=function(t){var n=t.title,r=t.titleId,o=M0t(t,A0t);return c("svg",Cie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M5 3l3 9H7L6 9H3l-1 3H1l3-9h1zm-.5 1.5L5.667 8H3.333L4.5 4.5zm7.99 1.647C12.16 6.005 11.76 6 11.5 6c-.359 0-1.022.175-1.632.838l-.736-.676C9.929 5.294 10.859 5 11.5 5h.016c.25 0 .836 0 1.369.228.281.12.568.313.782.617.216.307.333.693.333 1.155v5h-1v-.354a2.101 2.101 0 01-.064.038c-.554.317-1.166.316-1.42.316h-.032c-.25 0-.836 0-1.368-.228a1.81 1.81 0 01-.783-.617C9.117 10.848 9 10.462 9 10c0-.462.117-.848.333-1.155.214-.304.5-.496.783-.617C10.648 8 11.233 8 11.484 8h.016c.258 0 .69-.003 1.05-.106a.889.889 0 00.364-.179c.053-.05.086-.108.086-.215V7c0-.288-.07-.465-.151-.58a.814.814 0 00-.358-.273zM13 8.8c-.06.022-.118.04-.175.057C12.32 9 11.762 9 11.513 9H11.5c-.259 0-.66.005-.99.147a.814.814 0 00-.359.274c-.08.114-.151.291-.151.579s.07.465.151.58a.813.813 0 00.358.273c.331.142.732.147.991.147.257 0 .63-.008.94-.184.255-.146.56-.463.56-1.316v-.701z"}))},z0t=D0t;var Wz={};de(Wz,{icon:()=>W0t});var Amr=V(ne());var N0t=["title","titleId"];function Tie(){return Tie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var B0t=function(t){var n=t.title,r=t.titleId,o=L0t(t,N0t);return c("svg",Tie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.707 4.707a1 1 0 11-1.414-1.414l2-2a1 1 0 111.414 1.414l-2 2zm-6.414 5a1 1 0 001.414 0l2-2a1 1 0 10-1.414-1.414l-2 2a1 1 0 000 1.414zm-5 5a1 1 0 001.414 0l2-2a1 1 0 10-1.414-1.414l-2 2a1 1 0 000 1.414z"}))},W0t=B0t;var Hz={};de(Hz,{icon:()=>U0t});var Rmr=V(ne());var H0t=["title","titleId"];function Aie(){return Aie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function V0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var q0t=function(t){var n=t.title,r=t.titleId,o=$0t(t,H0t);return c("svg",Aie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13.5 3a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM11 5.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM5.5 11a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm-4 4a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"}))},U0t=q0t;var $z={};de($z,{icon:()=>Y0t});var zmr=V(ne());var G0t=["title","titleId"];function Mie(){return Mie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K0t=function(t){var n=t.title,r=t.titleId,o=J0t(t,G0t);return c("svg",Mie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.293 14.707a1 1 0 001.414 0l12-12a1 1 0 10-1.414-1.414l-12 12a1 1 0 000 1.414z"}))},Y0t=K0t;var Vz={};de(Vz,{icon:()=>rmt});var Lmr=V(ne());var Q0t=["title","titleId"];function Rie(){return Rie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function emt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tmt=function(t){var n=t.title,r=t.titleId,o=Z0t(t,Q0t);return c("svg",Rie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.66 3.803a.5.5 0 11-.706-.707L9.268.78c1.187-1.187 3.242-1 4.596.354s1.54 3.409.354 4.596l-3.536 3.536c-1.187 1.187-3.242 1-4.596-.354a.5.5 0 11.707-.707c.99.99 2.417 1.119 3.182.354l3.536-3.536c.765-.765.635-2.193-.354-3.182-.99-.99-2.417-1.119-3.182-.354L7.661 3.803zm-.32 7.392a.5.5 0 11.707.707l-2.315 2.314c-1.187 1.188-3.242 1-4.596-.353-1.354-1.354-1.54-3.41-.353-4.596L4.318 5.73c1.187-1.187 3.242-1 4.596.354a.5.5 0 01-.707.707c-.989-.99-2.416-1.12-3.182-.354L1.49 9.974c-.766.765-.636 2.193.353 3.182.99.989 2.417 1.119 3.182.353l2.315-2.314z"}))},rmt=tmt;var qz={};de(qz,{icon:()=>smt});var Bmr=V(ne());var nmt=["title","titleId"];function Die(){return Die=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function imt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var amt=function(t){var n=t.title,r=t.titleId,o=omt(t,nmt);return c("svg",Die({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 4V3h2v1H2zm4 0V3h8v1H6zm0 3V6h8v1H6zm0 3V9h8v1H6zM2 7V6h2v1H2zm0 3V9h2v1H2zm4 3v-1h8v1H6zm-4 0v-1h2v1H2z"}))},smt=amt;var Uz={};de(Uz,{icon:()=>pmt});var Hmr=V(ne());var lmt=["title","titleId"];function zie(){return zie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fmt=function(t){var n=t.title,r=t.titleId,o=umt(t,lmt);return c("svg",zie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11 11H9v1h2v2h1v-2h2v-1h-2V9h-1v2zM7.758 9a4.5 4.5 0 11-.502 4H6v-1h1.027a4.548 4.548 0 01.23-2H6V9h1.758zM2 4V3h2v1H2zm4 0V3h8v1H6zm0 3V6h8v1H6zM2 7V6h2v1H2zm0 3V9h2v1H2zm0 3v-1h2v1H2z"}))},pmt=fmt;var Gz={};de(Gz,{icon:()=>gmt});var Vmr=V(ne());var dmt=["title","titleId"];function Nie(){return Nie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vmt=function(t){var n=t.title,r=t.titleId,o=hmt(t,dmt);return c("svg",Nie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 5v-.8C4 1.88 5.79 0 8 0s4 1.88 4 4.2V5h1.143c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H2.857C2.384 16 2 15.552 2 15V6c0-.552.384-1 .857-1H4zM3 15h10V6H3v9zm5.998-3.706L9.5 12.5h-3l.502-1.206A1.644 1.644 0 016.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194zM11 4.36C11 2.504 9.657 1 8 1S5 2.504 5 4.36V5h6v-.64z"}))},gmt=vmt;var Jz={};de(Jz,{icon:()=>xmt});var Umr=V(ne());var ymt=["title","titleId"];function Lie(){return Lie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Omt=function(t){var n=t.title,r=t.titleId,o=bmt(t,ymt);return c("svg",Lie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.143 5c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H.857C.384 16 0 15.552 0 15V6c0-.552.384-1 .857-1H8v-.8C8 1.88 9.79 0 12 0s4 1.88 4 4.2V5h-1v-.64C15 2.504 13.657 1 12 1S9 2.504 9 4.36V5h2.143zM1 15h10V6H1v9zm5.998-3.706L7.5 12.5h-3l.502-1.206A1.644 1.644 0 014.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194z"}))},xmt=Omt;var Xz={};de(Xz,{icon:()=>kmt});var Jmr=V(ne());var _mt=["title","titleId"];function Fie(){return Fie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Emt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Imt=function(t){var n=t.title,r=t.titleId,o=Smt(t,_mt);return c("svg",Fie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#C4373A",d:"M0 31.806h32V.776H0z"}),c("path",{fill:"#FFF",d:"M19.448 12.508l-8.986 3.86 8.986 3.883v-7.743zm-11.304 4.73l-2.094-.863 2.094-.931 17.749-7.741v2.062l-4.654 1.99v9.25l4.654 2.01v1.968L8.143 17.24z"})))},kmt=Imt;var Kz={};de(Kz,{icon:()=>Amt});var Kmr=V(ne());var Pmt=["title","titleId"];function Bie(){return Bie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tmt=function(t){var n=t.title,r=t.titleId,o=jmt(t,Pmt),i=yo("logo_apache");return c("svg",Bie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("defs",null,c("linearGradient",{id:i("a"),x1:"21.902%",x2:"141.879%",y1:"63.905%",y2:"20.213%"},c("stop",{offset:"0%",stopColor:"#F69923"}),c("stop",{offset:"31.23%",stopColor:"#F79A23"}),c("stop",{offset:"83.83%",stopColor:"#E97826"})),c("linearGradient",{id:i("b"),x1:"-217.651%",x2:"74.743%",y1:"177.127%",y2:"36.665%"},c("stop",{offset:"32.33%",stopColor:"#9E2064"}),c("stop",{offset:"63.02%",stopColor:"#C92037"}),c("stop",{offset:"75.14%",stopColor:"#CD2335"}),c("stop",{offset:"100%",stopColor:"#E97826"})),c("linearGradient",{id:i("c"),x1:"-80.044%",x2:"146.24%",y1:"73.574%",y2:"31.539%"},c("stop",{offset:"32.33%",stopColor:"#9E2064"}),c("stop",{offset:"63.02%",stopColor:"#C92037"}),c("stop",{offset:"75.14%",stopColor:"#CD2335"}),c("stop",{offset:"100%",stopColor:"#E97826"})),c("linearGradient",{id:i("d"),x1:"-18.316%",x2:"165.002%",y1:"52.497%",y2:"41.656%"},c("stop",{offset:"0%",stopColor:"#282662"}),c("stop",{offset:"9.548%",stopColor:"#662E8D"}),c("stop",{offset:"78.82%",stopColor:"#9F2064"}),c("stop",{offset:"94.87%",stopColor:"#CD2032"})),c("linearGradient",{id:i("e"),x1:"-109.701%",x2:"64.617%",y1:"463.715%",y2:"17.19%"},c("stop",{offset:"32.33%",stopColor:"#9E2064"}),c("stop",{offset:"63.02%",stopColor:"#C92037"}),c("stop",{offset:"75.14%",stopColor:"#CD2335"}),c("stop",{offset:"100%",stopColor:"#E97826"})),c("linearGradient",{id:i("f"),x1:"-34.88%",x2:"110.599%",y1:"130.522%",y2:"-9.118%"},c("stop",{offset:"32.33%",stopColor:"#9E2064"}),c("stop",{offset:"63.02%",stopColor:"#C92037"}),c("stop",{offset:"75.14%",stopColor:"#CD2335"}),c("stop",{offset:"100%",stopColor:"#E97826"})),c("linearGradient",{id:i("g"),x1:"-13.673%",x2:"117.858%",y1:"192.564%",y2:"-136.906%"},c("stop",{offset:"0%",stopColor:"#282662"}),c("stop",{offset:"9.548%",stopColor:"#662E8D"}),c("stop",{offset:"78.82%",stopColor:"#9F2064"}),c("stop",{offset:"94.87%",stopColor:"#CD2032"}))),c("g",{fill:"none"},c("path",{fill:"url(#".concat(i("a"),")"),d:"M13.628.18c-.498.293-1.332 1.134-2.328 2.348v.074l.871 1.613.044.03c.641-.914 1.289-1.742 1.948-2.446.05-.056.075-.08.075-.08-.025.024-.05.055-.075.08-.211.237-.859.984-1.83 2.478l.112.025s2.273-.224 3.368-.41l.062-.057c.35-1.955-.342-2.851-.342-2.851S14.661-.423 13.628.18z",transform:"translate(8)"}),c("path",{fill:"url(#".concat(i("b"),")"),d:"M9.525 8.697c.28-.516.56-1.027.84-1.519.293-.51.592-1.008.897-1.488a.397.397 0 00.05-.087c.299-.473.598-.921.903-1.357L11.3 2.52c-.069.081-.137.168-.206.256-.261.33-.535.678-.815 1.052a51.783 51.783 0 00-1.893 2.708c-.261.405-.53.816-.79 1.245l-.032.05V7.9l1.14 2.26.05.019c.255-.498.51-.996.771-1.482z",transform:"translate(8)"}),c("path",{fill:"url(#".concat(i("c"),")"),d:"M4.563 19.76c.206-.535.424-1.077.642-1.625.211-.523.423-1.052.647-1.58.218-.53.448-1.06.679-1.595.236-.541.473-1.083.716-1.618.242-.53.485-1.059.734-1.582.087-.186.18-.38.274-.566.156-.324.318-.648.473-.965.007-.019.02-.031.025-.05L7.564 7.832l-.056.093c-.274.455-.554.915-.822 1.389a54.535 54.535 0 00-1.45 2.714c-.044.087-.081.168-.125.255a32.15 32.15 0 00-.703 1.544c-.237.56-.448 1.096-.635 1.606-.125.337-.23.654-.336.965-.081.262-.162.53-.237.791-.18.623-.33 1.239-.454 1.862l.018.074 1.14 2.266.037.02c.155-.424.317-.848.485-1.283.044-.125.094-.243.137-.368z",transform:"translate(8)"}),c("path",{fill:"url(#".concat(i("d"),")"),d:"M2.733 19.132a18.84 18.84 0 00-.311 2.253c0 .025-.006.05-.006.081-.374-.598-1.37-1.177-1.37-1.177.716 1.034 1.258 2.061 1.338 3.07-.38.08-.902-.038-1.512-.255.628.578 1.102.74 1.288.784-.579.037-1.183.436-1.793.89.89-.36 1.607-.504 2.123-.392-.815 2.31-1.63 4.862-2.453 7.564.25-.075.399-.243.486-.473.143-.492 1.114-3.704 2.627-7.931.044-.119.087-.243.13-.362.013-.03.026-.068.038-.1.162-.441.324-.896.498-1.356.038-.106.081-.212.119-.318v-.006l-1.19-2.353c0 .03-.006.056-.012.08z",transform:"translate(8)"}),c("path",{fill:"url(#".concat(i("e"),")"),d:"M12.333 4.283c-.268.411-.56.878-.878 1.407-.018.025-.03.056-.05.081a62.538 62.538 0 00-1.687 3.05c-.249.48-.504.984-.765 1.526l.056.025 2.895-.311.068-.05c.878-.405 1.27-.772 1.65-1.301.1-.143.205-.3.305-.455.311-.485.616-1.015.884-1.544.261-.51.492-1.02.672-1.475a6.56 6.56 0 00.398-1.395c-1.17.206-2.608.399-3.548.442z",transform:"translate(8)"}),c("path",{fill:"url(#".concat(i("f"),")"),d:"M8.84 10.59c-.1.212-.205.43-.31.647-.113.237-.231.486-.343.735-.056.124-.119.255-.175.38-.18.386-.354.784-.541 1.195a107.035 107.035 0 00-1.357 3.194c-.218.529-.436 1.077-.654 1.637-.2.504-.399 1.015-.598 1.55-.012.025-.018.05-.03.075-.2.53-.394 1.068-.6 1.622-.006.012-.017.045-.023.057l.043.01.866-.094.048-.02c-.018-.006-.03-.03-.048-.037 1.145-.143 2.67-1.002 3.66-2.06.455-.486.866-1.065 1.252-1.738.286-.504.547-1.058.803-1.675.224-.535.435-1.12.64-1.749a3.457 3.457 0 01-.896.311 8.977 8.977 0 01-.18.038c-.062.012-.125.018-.18.03 1.07-.41 1.743-1.207 2.234-2.178-.28.193-.74.442-1.288.566a2.52 2.52 0 01-.23.044c-.02 0-.038.006-.057.006.374-.155.685-.33.959-.535.056-.044.112-.087.168-.137.081-.075.162-.15.237-.224.05-.05.093-.1.143-.156.106-.124.205-.261.299-.41.03-.044.056-.094.087-.138.037-.068.068-.137.1-.205.149-.3.267-.567.36-.803.05-.119.088-.224.125-.33.013-.038.025-.081.044-.119.037-.112.068-.211.093-.305.037-.13.056-.236.069-.311a1.077 1.077 0 01-.125.087c-.324.193-.878.368-1.326.448l.884-.1-.884.1c-.062.013-.106.02-.156.032.004-.005-.994.101-2.995.316a2.313 2.313 0 00-.118.244z",transform:"translate(8)"}),c("path",{fill:"url(#".concat(i("g"),")"),d:"M4.115 21.914c-.155.43-.317.872-.473 1.32 0 .006-.006.013-.006.019-.025.062-.044.124-.069.193-.106.305-.199.573-.41 1.195.348.162.628.58.896 1.059a1.876 1.876 0 00-.623-1.314c1.725.075 3.213-.361 3.979-1.619.068-.112.13-.23.186-.355-.348.442-.784.63-1.593.586h-.007.007c1.201-.536 1.799-1.052 2.334-1.905.125-.206.25-.424.374-.667-1.052 1.078-2.266 1.383-3.543 1.152l-.958.106c-.032.069-.063.15-.094.23z",transform:"translate(8)"})))},Amt=Tmt;var Yz={};de(Yz,{icon:()=>Nmt});var Zmr=V(ne());var Mmt=["title","titleId"];function Wie(){return Wie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zmt=function(t){var n=t.title,r=t.titleId,o=Rmt(t,Mmt);return c("svg",Wie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#0080D5",d:"M19.5.938a7.002 7.002 0 00-7 0l-8 4.619A7 7 0 001 11.62v9.237a7 7 0 003.5 6.062l7.5 4.33V17.979a7 7 0 013.5-6.062L27 5.276 19.5.939z"}),c("path",{className:"euiIcon__fillNegative",d:"M19.5.938a7.002 7.002 0 00-7 0L5 5.277l11 6.35 11-6.35-7.5-4.34z"}),c("path",{fill:"#FA744E",d:"M28.435 7.76l-10.026 5.79a6.994 6.994 0 011.59 4.428v13.27l7.5-4.33a7 7 0 003.5-6.061v-9.238a6.992 6.992 0 00-1.586-4.422l-.978.564z"}))},Nmt=zmt;var Qz={};de(Qz,{icon:()=>Hmt});var t1r=V(ne());var Lmt=["title","titleId"];function Hie(){return Hie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wmt=function(t){var n=t.title,r=t.titleId,o=Fmt(t,Lmt);return c("svg",Hie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{className:"euiIcon__fillNegative",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 01.075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 01-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 01-.383-.494 8.109 8.109 0 01-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 01-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 01.298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 011.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 001.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 00-.98-.179 8.113 8.113 0 00-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915zm13.675.284a7.122 7.122 0 01-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 01-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 01.192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 00.554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 01-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 011.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 01.32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 01-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22z"}),c("g",{fill:"#F90"},c("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799z"}),c("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944z"}))))},Hmt=Wmt;var Zz={};de(Zz,{icon:()=>Gmt});var n1r=V(ne());var $mt=["title","titleId"];function $ie(){return $ie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Umt=function(t){var n=t.title,r=t.titleId,o=Vmt(t,$mt);return c("svg",$ie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fillRule:"evenodd"},c("path",{fillRule:"nonzero",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 01.075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 01-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 01-.383-.494 8.109 8.109 0 01-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 01-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 01.298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 011.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 001.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 00-.98-.179 8.113 8.113 0 00-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915zm13.675.284a7.122 7.122 0 01-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 01-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 01.192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 00.554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 01-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 011.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 01.32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 01-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22z"}),c("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799z"}),c("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944z"})))},Gmt=Umt;var eN={};de(eN,{icon:()=>Qmt});var i1r=V(ne());var Jmt=["title","titleId"];function Vie(){return Vie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ymt=function(t){var n=t.title,r=t.titleId,o=Xmt(t,Jmt);return c("svg",Vie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#0072C6",d:"M17.448 4l-9.414 8.01L0 26.157h7.243L17.448 4zM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874z"}))},Qmt=Ymt;var tN={};de(tN,{icon:()=>n1t});var s1r=V(ne());var Zmt=["title","titleId"];function qie(){return qie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r1t=function(t){var n=t.title,r=t.titleId,o=e1t(t,Zmt);return c("svg",qie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M17.448 4l-9.414 8.01L0 26.157h7.243L17.448 4zM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874z"}))},n1t=r1t;var rN={};de(rN,{icon:()=>l1t});var u1r=V(ne());var o1t=["title","titleId"];function Uie(){return Uie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var s1t=function(t){var n=t.title,r=t.titleId,o=i1t(t,o1t);return c("svg",Uie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#0080D5",d:"M15 20H4V0h11c5.522 0 10 4.478 10 10s-4.478 10-10 10"}),c("path",{fill:"#00C2B3",d:"M26.702 15.624C24.6 19.979 20.152 23 15 23H4v9h15c5.522 0 10-4.478 10-10a9.952 9.952 0 00-2.298-6.376"}),c("path",{className:"euiIcon__fillNegative",d:"M24.338 13.554A9.942 9.942 0 0019 12H4v8h11c4.27 0 7.903-2.68 9.338-6.446"}))},l1t=s1t;var nN={};de(nN,{icon:()=>d1t});var f1r=V(ne());var u1t=["title","titleId"];function Gie(){return Gie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function f1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var p1t=function(t){var n=t.title,r=t.titleId,o=c1t(t,u1t);return c("svg",Gie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#00BFB3",d:"M0 22c0 5.522 4.478 10 10 10V12C4.478 12 0 16.478 0 22"}),c("path",{className:"euiIcon__fillNegative",d:"M10 12v10h10c0-5.522-4.478-10-10-10"}),c("path",{fill:"#F04E98",d:"M10 0v9c7.168 0 13 5.832 13 13h9C32 9.85 22.15 0 10 0"})))},d1t=p1t;var oN={};de(oN,{icon:()=>y1t});var d1r=V(ne());var h1t=["title","titleId"];function Jie(){return Jie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function v1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var g1t=function(t){var n=t.title,r=t.titleId,o=m1t(t,h1t);return c("svg",Jie({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M25.471 27.56c-1.06-.567-1.676-1.206-1.811-1.902-.13-.673.17-1.421.918-2.288a11.29 11.29 0 002.773-7.42A11.324 11.324 0 0016.042 4.64l-.05.001h-.05A11.324 11.324 0 004.632 15.949a11.291 11.291 0 002.774 7.422c.753.872 1.047 1.591.928 2.257-.13.694-.74 1.342-1.817 1.93-1.657-1.375-3.116-3.212-4.01-5.056a14.943 14.943 0 01-1.117-3.139A14.997 14.997 0 011 15.95a14.901 14.901 0 014.378-10.57 14.924 14.924 0 014.752-3.204C11.97 1.395 13.95.996 15.948 1h.101a14.888 14.888 0 0110.57 4.378 14.912 14.912 0 013.982 13.985 14.871 14.871 0 01-1.118 3.14c-.9 1.843-2.358 3.681-4.01 5.057h-.003zm-5.523 2.798c-.173-.11-.767-.55-1.345-1.353a6.122 6.122 0 01-1.174-3.738 8.26 8.26 0 01.611-2.964 8.42 8.42 0 011.627-2.54l.004-.008.154-.178c.263-.305.536-.622.753-.99.268-.454.462-.931.578-1.42.178-.758.188-1.547.029-2.31a5.3 5.3 0 00-.858-1.956 5.264 5.264 0 00-4.29-2.217h-.108a5.25 5.25 0 00-4.29 2.216 5.31 5.31 0 00-.856 1.956c-.16.763-.15 1.552.03 2.311.115.488.31.965.576 1.419.219.37.49.684.753.99l.155.179.003.007a8.384 8.384 0 011.628 2.54 8.24 8.24 0 01.61 2.964 6.123 6.123 0 01-1.173 3.738c-.58.795-1.174 1.243-1.346 1.352l-.867-.26a15.434 15.434 0 01-2.49-1.098 4.245 4.245 0 002.234-3.736c0-1.034-.403-2.028-1.195-2.95l-.034-.034-.237-.26-.636-.746a8.924 8.924 0 01-1.525-3.26 8.983 8.983 0 01-.05-3.905 8.906 8.906 0 011.46-3.313A8.993 8.993 0 0111.23 8.39a8.937 8.937 0 014.702-1.344h.112c.42 0 .84.029 1.255.088a8.938 8.938 0 013.448 1.256 9.003 9.003 0 012.554 2.404 9.093 9.093 0 011.459 3.313 9.043 9.043 0 01-.05 3.912 8.925 8.925 0 01-1.526 3.26c-.2.265-.409.495-.637.745l-.23.254c-.017.016-.03.027-.04.043-.804.961-1.195 1.927-1.195 2.948a4.25 4.25 0 002.237 3.735c-.795.441-1.63.809-2.491 1.098l-.862.26-.018-.004zm-3.956-11.314a2.957 2.957 0 01-2.952-2.952 2.957 2.957 0 012.952-2.952 2.956 2.956 0 012.95 2.952 2.957 2.957 0 01-2.95 2.952",fill:"#F05C56"}))},y1t=g1t;var iN={};de(iN,{icon:()=>_1t});var m1r=V(ne());var b1t=["title","titleId"];function Xie(){return Xie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x1t=function(t){var n=t.title,r=t.titleId,o=w1t(t,b1t);return c("svg",Xie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{className:"euiIcon__fillNegative",d:"M12.37 18.352c.032-.01.066-.014.1-.023A6 6 0 0118 10V0C9.163 0 2 7.164 2 16c0 2.793.72 5.417 1.976 7.702a18.947 18.947 0 018.393-5.349"}),c("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 005.717 5.75a16.006 16.006 0 007.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0118 10a5.94 5.94 0 012.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 007.541-5.032A15.959 15.959 0 0018 0"}),c("path",{fill:"#00BFB3",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0118 22a5.94 5.94 0 01-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 00-7.54 5.032A15.959 15.959 0 0018 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 00-7.54-5.032"})))},_1t=x1t;var aN={};de(aN,{icon:()=>P1t});var g1r=V(ne());var S1t=["title","titleId"];function Kie(){return Kie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function I1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k1t=function(t){var n=t.title,r=t.titleId,o=E1t(t,S1t);return c("svg",Kie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillNegative",d:"M18 0v10a6 6 0 00-5.53 8.33c-.034.009-.068.012-.1.023A18.947 18.947 0 003.975 23.7 15.934 15.934 0 012 16C2 7.164 9.163 0 18 0zm0 13a3 3 0 110 6 3 3 0 010-6z"}),c("path",{fill:"#00AEFA",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0118 22a5.94 5.94 0 01-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 00-7.54 5.032A15.959 15.959 0 0018 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 00-7.54-5.032"}),c("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 005.717 5.75a16.006 16.006 0 007.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0118 10a5.94 5.94 0 012.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 007.541-5.032A15.959 15.959 0 0018 0"}))},P1t=k1t;var sN={};de(sN,{icon:()=>M1t});var b1r=V(ne());var j1t=["title","titleId"];function Yie(){return Yie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function T1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var A1t=function(t){var n=t.title,r=t.titleId,o=C1t(t,j1t);return c("svg",Yie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillNegative",d:"M9.75 12L16 32h10l-3.4-10.88A13 13 0 0010.19 12h-.44z"}),c("path",{fill:"#22A7F3",d:"M25.725 11.93A17 17 0 009.5 0H6l3.75 12h.44a13 13 0 0112.41 9.12L26 32h6l-6.275-20.07z"}),c("path",{fill:"#0377CA",d:"M7.91 16.175L0 32h12.855z"}))},M1t=A1t;var lN={};de(lN,{icon:()=>L1t});var O1r=V(ne());var R1t=["title","titleId"];function Qie(){return Qie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function z1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var N1t=function(t){var n=t.title,r=t.titleId,o=D1t(t,R1t);return c("svg",Qie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14.738 28.044V16.681L3.172 10.919v6.46l5.32 2.67v4.889l6.246 3.106zm2.344.066l6.357-3.17v-5.002l5.353-2.686V10.87l-11.71 5.854V28.11zM27.306 8.993l-6.003-3.012-5.286 2.656-5.325-2.659L4.637 9.03l11.317 5.638 11.352-5.675zM.828 23.744V8.324L15.981.689l15.155 7.604V23.72L15.98 31.28.828 23.743z"}))},L1t=N1t;var uN={};de(uN,{icon:()=>$1t});var _1r=V(ne());var F1t=["title","titleId"];function Zie(){return Zie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function W1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H1t=function(t){var n=t.title,r=t.titleId,o=B1t(t,F1t);return c("svg",Zie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#ED2226",d:"M16.072.024C7.29.024.144 7.146.144 15.952c0 8.782 7.122 15.928 15.928 15.928C24.854 31.88 32 24.758 32 15.952 32 7.146 24.854.024 16.072.024zm10.755 18.719c0 .962-.553 1.804-1.636 1.997-1.877.336-5.823.53-9.119.53-3.296 0-7.242-.194-9.119-.53-1.082-.193-1.636-1.035-1.636-1.997v-6.208c0-.962.746-1.852 1.636-1.997.554-.096 1.853-.192 2.864-.192.385 0 .697.289.697.746v4.355l5.582-.12 5.582.12v-4.355c0-.457.313-.746.698-.746 1.01 0 2.31.096 2.863.192.914.145 1.636 1.035 1.636 1.997-.048 2.045-.048 4.139-.048 6.208z"}))},$1t=H1t;var cN={};de(cN,{icon:()=>J1t});var E1r=V(ne());var V1t=["title","titleId"];function eae(){return eae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var G1t=function(t){var n=t.title,r=t.titleId,o=q1t(t,V1t);return c("svg",eae({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M18.099 15.108h3.304v-2.973H18.1v2.973zm-3.905 0h3.304v-2.973h-3.304v2.973zm-3.905 0h3.304v-2.973H10.29v2.973zm-3.905 0H9.69v-2.973H6.384v2.973zm-3.904 0h3.304v-2.973H2.48v2.973zm3.904-3.568H9.69V8.568H6.384v2.972zm3.905 0h3.304V8.568H10.29v2.972zm3.905 0h3.304V8.568h-3.304v2.972zm0-3.567h3.304V5h-3.304v2.973zm17.139 5.402c-.722-.478-2.38-.653-3.656-.415-.164-1.19-.834-2.221-2.052-3.153l-.7-.463-.468.694c-.598.893-.897 2.13-.8 3.317.045.418.183 1.164.617 1.82-.433.231-1.29.549-2.42.528H.124l-.043.247c-.204 1.193-.2 4.914 2.24 7.774C4.178 25.898 6.96 27 10.59 27c7.87 0 13.693-3.586 16.42-10.104 1.073.02 3.381.006 4.567-2.237.031-.051.102-.186.31-.61l.113-.234-.667-.44z",fill:"#136EA3",fillRule:"evenodd"}))},J1t=G1t;var fN={};de(fN,{icon:()=>Z1t});var k1r=V(ne());var X1t=["title","titleId"];function tae(){return tae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q1t=function(t){var n=t.title,r=t.titleId,o=K1t(t,X1t),i=yo("logo_dropwizard");return c("svg",tae({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 29.61s9.55 4.74 16.856-.893c-1.905-5.114-5.25-19.867-7.226-26.383-.422-1.389-.49-1.527-.663-1.909-.964-2.134-1.978 4.142-3.628 10.459C12.749 13.148 8 29.61 8 29.61",fill:"url(#".concat(i("a"),")")}),c("path",{d:"M9.926 28.563s8.17 4.794 14.93.154c-.18-.807-.642-2.103-.955-3.311-1.664-6.416-4.676-17.248-6.144-22.626-1.59-5.822-2.105.986-3.961 8.23-.564 2.204-3.87 17.553-3.87 17.553",fill:"url(#".concat(i("b"),")")}),c("path",{d:"M12.14 24.41l.85-1.466.793 1.544-.908 1.99-.735-2.069zm6.934-5.545l.85-1.465.793 1.543-.908 1.99-.735-2.068zm-4.747-5.851l.85-1.465.792 1.543-.908 1.99-.734-2.068",fill:"#F9A72B"}),c("path",{d:"M12.14 24.41l.85-1.716.793 1.794-.907 1.468-.736-1.546zm6.934-5.545l.851-1.716.792 1.794-.906 1.468-.737-1.546zm-4.747-5.851l.85-1.716.792 1.794-.906 1.468-.736-1.546",fill:"#FFF200"}),c("path",{d:"M12.987 28.422s6.082 1.015 10.086-1.549c-.502 1.55-4.991 3.314-10.086 1.55",fill:"#24265D"}),c("defs",null,c("linearGradient",{id:i("a"),x1:33.473,y1:7.674,x2:7.751,y2:21.331,gradientUnits:"userSpaceOnUse"},c("stop",{stopColor:"#3871C1"}),c("stop",{offset:.515,stopColor:"#2C3792"}),c("stop",{offset:.865,stopColor:"#24265D"}),c("stop",{offset:1,stopColor:"#252761"})),c("linearGradient",{id:i("b"),x1:21.028,y1:14.928,x2:6.017,y2:18.844,gradientUnits:"userSpaceOnUse"},c("stop",{stopColor:"#3871C1"}),c("stop",{offset:.515,stopColor:"#2C3792"}),c("stop",{offset:.865,stopColor:"#24265D"}),c("stop",{offset:1,stopColor:"#252761"}))))},Z1t=Q1t;var pN={};de(pN,{icon:()=>ovt});var C1r=V(ne());var evt=["title","titleId"];function rae(){return rae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nvt=function(t){var n=t.title,r=t.titleId,o=tvt(t,evt);return c("svg",rae({"data-type":"logoElastic",xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"outline",fillRule:"evenodd",clipRule:"evenodd",d:"M30.86 13.129A6.333 6.333 0 0132 16.77a6.419 6.419 0 01-1.162 3.652 6.382 6.382 0 01-3.032 2.331 4.833 4.833 0 01-1.672 5.542 4.789 4.789 0 01-5.77-.074 9.016 9.016 0 01-4.5 3.322 8.982 8.982 0 01-5.587.023 9.014 9.014 0 01-4.526-3.287 9.067 9.067 0 01-1.727-5.333c0-.579.053-1.156.16-1.725A6.305 6.305 0 011.145 18.9 6.341 6.341 0 010 15.242a6.42 6.42 0 011.163-3.652 6.384 6.384 0 013.035-2.33 4.833 4.833 0 011.658-5.557 4.789 4.789 0 015.78.07 9.037 9.037 0 014.93-3.446 9.007 9.007 0 015.994.419 9.05 9.05 0 014.407 4.098 9.097 9.097 0 01.873 5.965 6.298 6.298 0 013.02 2.32zm-18.28.658l7.002 3.211 7.066-6.213a7.85 7.85 0 00.152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 00-4.02-2.869 7.87 7.87 0 00-4.932.086 7.9 7.9 0 00-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001zm-7.247 7.441A7.964 7.964 0 006.72 27.53a7.918 7.918 0 004.04 2.874 7.89 7.89 0 004.95-.097 7.92 7.92 0 003.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001zm4.755-11.024l-4.8-1.137.002-.002a3.82 3.82 0 011.312-4.358 3.785 3.785 0 014.538.023l-1.052 5.474zm-5.216.01a5.294 5.294 0 00-2.595 1.882 5.324 5.324 0 00-.142 6.124 5.287 5.287 0 002.505 2l6.733-6.101-1.235-2.65-5.266-1.255zm18.286 17.848a3.737 3.737 0 01-2.285-.785l1.037-5.454 4.8 1.125a3.812 3.812 0 01-1.801 4.68c-.54.283-1.14.432-1.751.434zm-1.31-7.499l5.28 1.238a5.34 5.34 0 002.622-1.938 5.37 5.37 0 001.013-3.106 5.311 5.311 0 00-.936-3.01 5.282 5.282 0 00-2.475-1.944l-6.904 6.07 1.4 2.69z",fill:"#fff"}),c("path",{d:"M12.58 13.787l7.002 3.211 7.066-6.213a7.849 7.849 0 00.152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 00-4.02-2.869 7.87 7.87 0 00-4.932.086 7.9 7.9 0 00-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001z",fill:"#FEC514"}),c("path",{d:"M5.333 21.228A7.964 7.964 0 006.72 27.53a7.918 7.918 0 004.04 2.874 7.89 7.89 0 004.95-.097 7.92 7.92 0 003.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001z",fill:"#00BFB3"}),c("path",{d:"M5.288 9.067l4.8 1.137L11.14 4.73a3.785 3.785 0 00-5.914 1.94 3.82 3.82 0 00.064 2.395",fill:"#F04E98"}),c("path",{d:"M4.872 10.214a5.294 5.294 0 00-2.595 1.882 5.324 5.324 0 00-.142 6.124 5.287 5.287 0 002.505 2l6.733-6.101-1.235-2.65-5.266-1.255z",fill:"#1BA9F5"}),c("path",{d:"M20.873 27.277a3.736 3.736 0 002.285.785 3.783 3.783 0 003.101-1.63 3.812 3.812 0 00.451-3.484l-4.8-1.125-1.037 5.454z",fill:"#93C90E"}),c("path",{d:"M21.848 20.563l5.28 1.238a5.34 5.34 0 002.622-1.938 5.37 5.37 0 001.013-3.106 5.312 5.312 0 00-.936-3.01 5.283 5.283 0 00-2.475-1.944l-6.904 6.07 1.4 2.69z",fill:"#07C"}))},ovt=nvt;var dN={};de(dN,{icon:()=>uvt});var A1r=V(ne());var ivt=["title","titleId"];function nae(){return nae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function svt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lvt=function(t){var n=t.title,r=t.titleId,o=avt(t,ivt);return c("svg",nae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#F04E98",d:"M32 9V2.5A2.5 2.5 0 0029.5 0h-27A2.5 2.5 0 000 2.5V9h32z"}),c("path",{fill:"#00BFB3",d:"M0 20h32v-8H0z"}),c("path",{fill:"#0080D5",d:"M14.5 23H0v6.5A2.5 2.5 0 002.5 32h12v-9z"}),c("path",{fill:"#FEC514",d:"M17.5 23v9h12a2.5 2.5 0 002.5-2.5V23H17.5z"})))},uvt=lvt;var hN={};de(hN,{icon:()=>hvt});var R1r=V(ne());var cvt=["title","titleId"];function oae(){return oae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dvt=function(t){var n=t.title,r=t.titleId,o=fvt(t,cvt);return c("svg",oae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{className:"euiIcon__fillNegative",d:"M2 16c0 1.384.194 2.72.524 4H22a4 4 0 000-8H2.524A15.984 15.984 0 002 16"}),c("path",{fill:"#FEC514",d:"M28.924 7.662A15.381 15.381 0 0030.48 6C27.547 2.346 23.05 0 18 0 11.679 0 6.239 3.678 3.644 9H25.51a5.039 5.039 0 003.413-1.338"}),c("path",{fill:"#00BFB3",d:"M25.51 23H3.645C6.24 28.323 11.679 32 18 32c5.05 0 9.547-2.346 12.48-6a15.381 15.381 0 00-1.556-1.662A5.034 5.034 0 0025.51 23"})))},hvt=dvt;var mN={};de(mN,{icon:()=>bvt});var z1r=V(ne());var mvt=["title","titleId"];function iae(){return iae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yvt=function(t){var n=t.title,r=t.titleId,o=vvt(t,mvt);return c("svg",iae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#00BFB3",fillRule:"evenodd",d:"M16 0c-2.918 0-5.645.794-8 2.158 4.777 2.768 8 7.923 8 13.842 0 5.919-3.223 11.074-8 13.842A15.907 15.907 0 0016 32c8.837 0 16-7.163 16-16S24.837 0 16 0z",clipRule:"evenodd"}),c("path",{fill:"#FEC514",fillRule:"evenodd",d:"M8 24h2.222A12.996 12.996 0 0013 16c0-2.935-1.012-5.744-2.778-8H8a8 8 0 000 16z",clipRule:"evenodd"}),c("path",{className:"euiIcon__fillNegative",fillRule:"evenodd",d:"M16 8h-2.152A15.877 15.877 0 0116 16c0 2.918-.786 5.647-2.152 8H16a8 8 0 000-16z",clipRule:"evenodd"}))},bvt=yvt;var vN={};de(vN,{icon:()=>Svt});var L1r=V(ne());var wvt=["title","titleId"];function aae(){return aae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _vt=function(t){var n=t.title,r=t.titleId,o=Ovt(t,wvt);return c("svg",aae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"#419EDA"},c("path",{d:"M14.65 14.164c0 1.189-.933 2.15-2.083 2.15-1.152 0-2.082-.961-2.082-2.15 0-1.185.93-2.15 2.082-2.15 1.15 0 2.083.965 2.083 2.15zm2.693 0c0 1.189.934 2.15 2.084 2.15s2.083-.961 2.083-2.15c0-1.185-.933-2.15-2.083-2.15-1.15 0-2.084.965-2.084 2.15z"}),c("path",{d:"M31.522 16.495a5.845 5.845 0 01-3.105-.618c.272-1.603.387-3.218.357-4.827a24.896 24.896 0 00-3.027-3.703 6.137 6.137 0 012.133-2.36l.391-.25-.304-.354c-1.57-1.825-3.444-3.235-5.568-4.193L21.975 0l-.107.462a6.248 6.248 0 01-1.51 2.829 23.77 23.77 0 00-4.362-1.855 23.79 23.79 0 00-4.355 1.851A6.246 6.246 0 0110.137.465l-.108-.462-.423.189c-2.097.943-4.022 2.392-5.566 4.19l-.306.355.39.25a6.125 6.125 0 012.129 2.347 25.001 25.001 0 00-3.022 3.689 26.068 26.068 0 00.347 4.86 5.832 5.832 0 01-3.09.612L.03 16.46l.043.473a16.723 16.723 0 002.14 6.765l.234.41.35-.308a5.914 5.914 0 012.837-1.372 25.255 25.255 0 002.429 4.083c1.475.533 3.013.93 4.601 1.167a6.359 6.359 0 01-.383 3.243l-.175.439.45.102c1.15.261 2.31.394 3.447.394l3.447-.394.45-.102-.175-.44a6.376 6.376 0 01-.383-3.244 23.905 23.905 0 004.585-1.165 25.286 25.286 0 002.43-4.086 5.94 5.94 0 012.851 1.373l.35.306.233-.408a16.661 16.661 0 002.14-6.764l.042-.472-.45.036zM20.93 22.278c-1.63.458-3.287.689-4.933.689-1.65 0-3.304-.231-4.936-.69a20.028 20.028 0 01-2.113-4.594 20.072 20.072 0 01-.89-5.04 19.076 19.076 0 013.576-3.516 18.867 18.867 0 014.363-2.448 18.944 18.944 0 014.355 2.443 19.19 19.19 0 013.592 3.538c-.09 1.73-.39 3.41-.899 5.019a19.965 19.965 0 01-2.115 4.599z"})))},Svt=_vt;var gN={};de(gN,{icon:()=>jvt});var B1r=V(ne());var Evt=["title","titleId"];function sae(){return sae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pvt=function(t){var n=t.title,r=t.titleId,o=Ivt(t,Evt),i=yo("logo_gcp");return c("svg",sae({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("defs",null,c("path",{id:i("a"),d:"M.085.1h4.549v6.291H.085z"})),c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#DB4437",fillRule:"nonzero",d:"M22.57 29.982h-5.749c.527 0 .987-.282 1.233-.7L25.857 16 20.93 7.61l5.748.001c.492 0 .97.251 1.232.7l3.698 6.291c.49.837.526 1.9 0 2.797l-6.572 11.185a2.853 2.853 0 01-2.464 1.398zm-.71-2.796c0 .386.318.7.71.7a.705.705 0 00.712-.7c0-.386-.318-.7-.711-.7a.705.705 0 00-.712.7zm6.927-10.58c.34.193.775.078.971-.256a.692.692 0 00-.26-.955.718.718 0 00-.972.256.692.692 0 00.26.955z"}),c("path",{fill:"#4285F4",fillRule:"nonzero",d:"M25.036 3.416l2.873 4.894a1.427 1.427 0 00-1.232-.699H11.071l-4.928 8.388-2.874-4.892a1.377 1.377 0 010-1.399l3.696-6.292a2.853 2.853 0 012.464-1.398h13.143c.982 0 1.937.502 2.464 1.398zM10.14 4.814c0-.386-.318-.7-.71-.7a.705.705 0 00-.712.7c0 .386.318.7.711.7a.705.705 0 00.711-.7zm12.787.606a.692.692 0 00.26-.955.718.718 0 00-.971-.256.692.692 0 00-.26.955.718.718 0 00.971.256z"}),c("path",{fill:"#F4B400",fillRule:"nonzero",d:"M.394 14.601l2.875-4.893c-.263.449-.245.98 0 1.399L11.07 24.39h9.857l-2.874 4.892c-.246.418-.706.7-1.233.7H9.428a2.854 2.854 0 01-2.464-1.398L.394 17.398a2.754 2.754 0 010-2.797zm2.82.793a.718.718 0 00-.972.256.693.693 0 00.26.955c.34.193.775.078.971-.256a.692.692 0 00-.26-.955zM9.072 26.58a.692.692 0 00-.26.955.718.718 0 00.971.256.692.692 0 00.26-.955.718.718 0 00-.971-.256z"}),c("path",{fill:"#000",d:"M18.054 29.282l2.875-4.892H17.96l-1.138 5.591c.526 0 .986-.28 1.232-.699M26.678 7.611h-5.749l1.484 2.527L27.91 8.31a1.427 1.427 0 00-1.232-.7",opacity:.1}),c("g",{opacity:.1,transform:"translate(2.994 9.609)"},c("mask",{id:i("b"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("a"))})),c("path",{fill:"#000",d:"M.275 1.498L3.15 6.391l1.485-2.527L.275.1c-.263.448-.245.98 0 1.398",mask:"url(#".concat(i("b"),")")})),c("path",{fill:"#CCC",fillRule:"nonzero",d:"M11.071 24.39L6.143 16l4.928-8.39h9.858L25.857 16l-4.928 8.39H11.07zM20.268 16c0-2.317-1.91-4.194-4.268-4.194-2.357 0-4.268 1.877-4.268 4.194 0 2.316 1.91 4.194 4.268 4.194 2.357 0 4.268-1.878 4.268-4.194z"})))},jvt=Pvt;var yN={};de(yN,{icon:()=>Rvt});var $1r=V(ne());var Cvt=["title","titleId"];function lae(){return lae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Avt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mvt=function(t){var n=t.title,r=t.titleId,o=Tvt(t,Cvt);return c("svg",lae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M20.256 15.982c0-2.316-1.91-4.194-4.268-4.194-2.357 0-4.268 1.878-4.268 4.194 0 2.317 1.911 4.195 4.268 4.195 2.357 0 4.268-1.878 4.268-4.195"}),c("path",{d:"M29.87 16.543a.862.862 0 01-1.167.308.832.832 0 01-.312-1.147.862.862 0 011.167-.308.832.832 0 01.312 1.147M22.56 28.15a.847.847 0 01-.855-.84c0-.464.383-.84.855-.84s.854.376.854.84c0 .464-.382.84-.854.84m-12.715-.113a.863.863 0 01-1.167-.308.832.832 0 01.312-1.147.862.862 0 011.167.308.832.832 0 01-.312 1.147M3.586 16.542a.863.863 0 01-1.167.308.832.832 0 01-.313-1.147.862.862 0 011.167-.308.832.832 0 01.313 1.147M22.987 5.665a.862.862 0 01-1.167-.308.832.832 0 01.312-1.147.863.863 0 011.168.308.832.832 0 01-.313 1.147m-13.57.112a.847.847 0 01-.854-.84c0-.464.382-.84.854-.84s.855.376.855.84c0 .464-.383.84-.855.84m22.178 8.797l-3.697-6.292c-.014-.023-.03-.043-.045-.065l-2.83-4.818A2.854 2.854 0 0022.56 2H9.417a2.853 2.853 0 00-2.464 1.398L3.257 9.69l3.284 5.59 4.519-7.69h15.605c.491 0 .969.251 1.232.699h-6.565l4.513 7.682-4.935 8.4-2.87 4.883a1.426 1.426 0 01-1.23.699l3.279-5.582h-9.03l-4.544-7.738-.384-.653-2.874-4.893a1.377 1.377 0 01-.003-1.391L.382 14.584a2.754 2.754 0 000 2.796l6.57 11.186a2.854 2.854 0 002.465 1.398h7.392c.054 0 .107-.005.16-.011h5.59a2.853 2.853 0 002.464-1.397l6.572-11.186c.526-.896.49-1.96 0-2.796"}))},Rvt=Mvt;var bN={};de(bN,{icon:()=>Fvt});var q1r=V(ne());var Dvt=["title","titleId"];function uae(){return uae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lvt=function(t){var n=t.title,r=t.titleId,o=zvt(t,Dvt);return c("svg",uae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 0C7.164 0 0 7.343 0 16.4c0 7.248 4.584 13.394 10.942 15.562.8.15 1.092-.356 1.092-.789 0-.39-.014-1.684-.022-3.053-4.45.991-5.39-1.934-5.39-1.934-.728-1.894-1.776-2.398-1.776-2.398-1.454-1.017.11-.997.11-.997 1.606.114 2.452 1.69 2.452 1.69 1.428 2.506 3.746 1.781 4.656 1.36.146-1.056.56-1.78 1.016-2.19-3.552-.414-7.288-1.821-7.288-8.105 0-1.792.624-3.254 1.646-4.402-.164-.416-.714-2.085.158-4.342 0 0 1.341-.44 4.4 1.681A14.882 14.882 0 0116 7.932c1.36.006 2.728.188 4.006.553 3.053-2.124 4.396-1.681 4.396-1.681.875 2.259.325 3.926.16 4.34 1.026 1.148 1.645 2.61 1.645 4.402 0 6.3-3.742 7.687-7.307 8.094.577.508 1.086 1.505 1.086 3.035 0 2.192-.021 3.96-.021 4.5 0 .437.29.947 1.101.787C27.42 29.79 32 23.644 32 16.4 32 7.343 24.836 0 16 0z"}))},Fvt=Lvt;var wN={};de(wN,{icon:()=>Vvt});var G1r=V(ne());var Bvt=["title","titleId"];function cae(){return cae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $vt=function(t){var n=t.title,r=t.titleId,o=Wvt(t,Bvt);return c("svg",cae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#E65A4D",d:"M29.162 4.149c.29-.175.588-.078.873 0a2.616 2.616 0 011.907 2.476c.006.29-.007.581-.007.866-.084 0-.135.052-.2.097-.815.582-1.642 1.164-2.45 1.752-.33.239-.692.426-.97.73-.116 0-.2.078-.284.136-2.69 1.855-5.379 3.704-8.062 5.56-1.331.918-2.663 1.849-3.995 2.773h-.11c-.058-.045-.11-.103-.168-.142L5.863 11.55c-.672-.466-1.344-.938-2.017-1.403-.077-.052-.148-.162-.245-.104-.09.052-.033.175-.045.272-.007.032 0 .065 0 .097v16.194c0 .116.006.24.012.355 0 .065-.006.123-.006.188-1.228.149-2.347-.02-3.116-1.131a2.381 2.381 0 01-.44-1.364c0-6.032-.006-12.057.007-18.089 0-1.228.995-2.314 2.217-2.488.194-.026.388-.052.556.077.04.039.071.078.117.11 4.273 3.168 8.546 6.335 12.819 9.51.168.122.278.116.446-.007 3.413-2.521 6.833-5.036 10.247-7.55.905-.692 1.823-1.384 2.747-2.07z"}),c("path",{fill:"#F6F4EC",d:"M29.162 4.149c-.924.685-1.842 1.377-2.767 2.062-3.413 2.521-6.833 5.03-10.246 7.55-.168.123-.272.13-.446.007-4.267-3.174-8.54-6.335-12.813-9.51-.046-.032-.078-.07-.117-.11.078-.129.214-.083.324-.083h25.742c.11 0 .239-.046.323.084z"}),c("path",{fill:"#E6E3D6",d:"M3.556 26.95a6.533 6.533 0 01-.013-.356V10.4c0-.032-.007-.065 0-.097.013-.09-.046-.213.045-.271.097-.059.174.051.246.103.672.465 1.344.937 2.017 1.403l9.832 6.846c.058.045.117.097.168.142-.026.026-.058.045-.084.071l-.064.065c-.052 0-.104.013-.13.064l-.064.065c-.007.013-.02.02-.026.032.013-.006.02-.019.032-.025l.065-.065c.052 0 .103-.013.13-.065.018-.02.044-.045.064-.064.064 0 .129-.007.194-.007.898.627 1.803 1.248 2.702 1.875 2.676 1.855 5.353 3.704 8.023 5.572.478.337 1.002.628 1.428 1.035-.116.11-.258.039-.388.058.007-.149-.122-.188-.22-.252-.49-.343-.995-.672-1.473-1.028-.802-.588-1.617-1.15-2.431-1.72-.679-.472-1.351-.963-2.05-1.409-.607-.388-1.17-.853-1.777-1.248-.685-.44-1.332-.93-2.01-1.377-.563-.368-1.113-.762-1.662-1.15-.11-.078-.207-.11-.323-.033-.233.168-.53.278-.724.46-.556.51-1.235.84-1.817 1.305-.743.589-1.545 1.112-2.34 1.636-1.319.873-2.599 1.816-3.911 2.696a43.697 43.697 0 00-2.308 1.629c-.207.155-.485.226-.614.485-.13-.013-.272.038-.395-.046 2.315-1.616 4.63-3.226 6.937-4.842.304-.213.646-.381.899-.666.045-.013.103-.019.097-.084 0-.006-.013-.02-.02-.02-.065-.006-.077.046-.09.091-.233.013-.375.194-.55.31-2.463 1.7-4.932 3.388-7.395 5.075zm11.119-7.564l.064-.065c.052 0 .104-.013.13-.064l.064-.065c.052 0 .104-.013.13-.065.006-.013.019-.02.025-.032-.012.006-.019.02-.032.026-.052 0-.103.013-.13.064l-.064.065c-.051 0-.103.013-.13.065-.018.026-.038.045-.057.07-.013.007-.026.014-.033.027.013-.007.026-.013.033-.026zm-.84.575c-.052 0-.104.013-.13.065-.039.006-.09.006-.097.065 0 .012.026.038.039.038.052-.006.058-.051.065-.09.051-.007.096-.013.122-.078a.311.311 0 00.071-.058c.052 0 .104-.013.13-.065l.064-.064c.052 0 .104-.013.13-.065.006-.013.02-.02.026-.032-.013.006-.02.02-.033.026-.051 0-.103.013-.13.064-.018.02-.044.046-.064.065-.051 0-.103.013-.129.065l-.065.064zm-.841.588c-.052 0-.103.013-.13.065-.051.007-.103.013-.096.084 0 .007.013.02.02.02.07.006.077-.046.083-.097.052-.007.097-.02.123-.072.026-.012.045-.038.071-.058.052 0 .103-.013.13-.064l.064-.065c.052 0 .103-.013.13-.065.006-.013.019-.019.025-.032-.013.007-.02.02-.032.026-.052 0-.104.013-.13.065l-.064.064c-.052 0-.104.013-.13.065a.306.306 0 00-.064.064zm-.647.46c.052-.007.104-.013.097-.085 0-.006-.012-.019-.019-.019-.071-.006-.078.045-.084.097-.052 0-.097.013-.13.065a.223.223 0 00-.193.129c-.045.013-.104.013-.097.084 0 .006.013.02.02.02.064.006.077-.046.083-.098.09 0 .181-.006.194-.129.058-.006.104-.02.13-.065zm2.128-1.533c-.008.027-.025.054-.033.072.025.009.05.035.067.027.016-.01.025-.045.033-.072a.55.55 0 01-.067-.027zm-1.81 1.35c-.008-.024-.015-.056-.03-.056-.015-.008-.052.008-.06.024-.022.033-.007.074.03.074.022 0 .037-.025.06-.041zM15.355 19a.185.185 0 01.034-.072c-.025-.009-.05-.035-.067-.026-.016.008-.025.044-.033.07.017.01.042.019.067.028zm-3.526 2.402c-.016-.024-.031-.05-.04-.057-.015 0-.055.016-.055.033-.016.04.008.074.048.065.016 0 .031-.024.047-.04z"}),c("path",{fill:"#B6B5AC",d:"M28.121 27.085c-.426-.413-.944-.698-1.428-1.034-2.67-1.862-5.347-3.717-8.023-5.573-.899-.627-1.804-1.247-2.702-1.874 0-.02-.007-.046-.007-.065l3.995-2.773c2.69-1.856 5.379-3.705 8.062-5.56.084-.058.168-.136.284-.136v17.073c-.051-.019-.116-.038-.18-.058z"}),c("path",{fill:"#E6E3D6",d:"M4.073 27.143c.123-.258.407-.33.614-.484a47.845 47.845 0 012.308-1.63c1.312-.885 2.592-1.823 3.91-2.695.796-.524 1.598-1.048 2.341-1.636.588-.465 1.26-.795 1.817-1.306.2-.18.49-.29.724-.459.11-.084.207-.051.323.033.55.388 1.099.782 1.661 1.15.68.446 1.326.944 2.01 1.377.608.388 1.17.854 1.779 1.248.698.446 1.37.937 2.049 1.41.814.568 1.635 1.13 2.43 1.719.485.355.983.685 1.475 1.028.09.064.226.103.22.252-7.888-.007-15.774-.007-23.661-.007z"}),c("path",{fill:"#B1392F",d:"M28.315 27.143V10.07c.278-.304.64-.491.97-.73.814-.595 1.635-1.17 2.45-1.752.058-.045.116-.097.2-.097.007.11.013.213.013.323 0 5.502 0 11.01.007 16.51 0 .376-.013.75-.104 1.126-.161.691-.575 1.17-1.247 1.409-.744.259-1.513.33-2.289.284z"}),c("path",{fill:"#BEBDB3",d:"M11.514 21.59c-.253.285-.595.453-.9.666a2650.078 2650.078 0 01-6.936 4.842l-.129.039c0-.065.007-.123.007-.188 2.47-1.687 4.932-3.374 7.402-5.061.174-.117.31-.304.55-.31l.006.012z"})))},Vvt=$vt;var ON={};de(ON,{icon:()=>Xvt});var X1r=V(ne());var qvt=["title","titleId"];function fae(){return fae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jvt=function(t){var n=t.title,r=t.titleId,o=Uvt(t,qvt);return c("svg",fae({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.315 17.301c.045.946 1 .5 1.416.21.415-.29.5-.045.56-.6a9.07 9.07 0 00.045-1.09 2.676 2.676 0 00-1.786.455c-.26.19-.745.79-.24 1",fill:"#F6D2A2"}),c("path",{d:"M4.805 17.987a.6.6 0 01-.27-.06.62.62 0 01-.31-.55A.41.41 0 014 17.05a1.15 1.15 0 01.5-.83 2.752 2.752 0 011.846-.47h.075v.074c.01.286.003.572-.025.856v.25c-.025.39-.1.45-.3.5a1.118 1.118 0 00-.3.145c-.288.223-.63.364-.99.41zm1.271-2.067a2.502 2.502 0 00-1.47.45 1 1 0 00-.42.671.25.25 0 00.17.205h.05v.055a.5.5 0 00.21.45 1.31 1.31 0 001.065-.31 1.29 1.29 0 01.34-.17c.13-.045.16-.055.18-.365v-.25c.024-.25.034-.5.03-.75h-.155v.014z",fill:"#010101"}),c("path",{d:"M4.315 17.3a.745.745 0 00.376-.21z",fill:"#C7B199"}),c("path",{d:"M4.315 17.391a.092.092 0 11-.055-.175h.06a.54.54 0 00.275-.16.092.092 0 01.06-.035.09.09 0 01.068.017.09.09 0 01.035.06.091.091 0 01-.018.068.7.7 0 01-.36.22h-.065v.005z",fill:"#010101"}),c("path",{d:"M6.496 6.05C2.88 5.049 5.571.43 8.498 2.322L6.496 6.05z",fill:"#74CDDD"}),c("path",{d:"M6.541 6.154h-.07c-1.03-.29-1.666-.9-1.786-1.716a2.396 2.396 0 011.116-2.26 2.421 2.421 0 012.722.09l.07.044L6.54 6.154zm.5-4.192c-.41 0-.811.12-1.155.345A2.211 2.211 0 004.85 4.393c.11.726.67 1.276 1.586 1.551l1.901-3.587a2.501 2.501 0 00-1.28-.38l-.015-.015z",fill:"#010101"}),c("path",{d:"M22.566 1.977c2.862-2.001 5.448 2.502 2.121 3.667l-2.121-3.667z",fill:"#74CDDD"}),c("path",{d:"M24.647 5.754l-2.201-3.802.065-.045a2.362 2.362 0 012.626-.22 2.427 2.427 0 011.196 2.241c-.05.5-.32 1.356-1.616 1.801l-.07.025zm-1.961-3.752l2.041 3.532a1.956 1.956 0 001.426-1.62 2.24 2.24 0 00-1.106-2.077 2.126 2.126 0 00-2.361.165z",fill:"#010101"}),c("path",{d:"M23.181 28.928c.726.45 2.056 1.811.966 2.471-1.046.961-1.636-1.055-2.557-1.33a2.549 2.549 0 011.591-1.141z",fill:"#F6D2A2"}),c("path",{d:"M23.592 31.745h-.04c-.416-.025-.756-.43-1.086-.816a2.33 2.33 0 00-.9-.775l-.12-.035.074-.125a2.656 2.656 0 011.646-1.176h.065c.466.29 1.426 1.13 1.421 1.891a.835.835 0 01-.45.725.905.905 0 01-.61.31zm-1.861-1.721c.339.2.633.467.865.785.219.36.56.628.96.755a.716.716 0 00.5-.235.661.661 0 00.371-.58c0-.61-.77-1.376-1.306-1.721a2.351 2.351 0 00-1.386.996h-.005z",fill:"#010101"}),c("path",{d:"M24.147 31.494a.09.09 0 01-.08-.05c-.053-.11-.1-.224-.14-.34a1.5 1.5 0 00-.33-.61.091.091 0 01-.022-.098.09.09 0 01.147-.032c.172.188.3.414.37.66.039.11.084.216.135.32a.09.09 0 01-.04.12l-.04.03z",fill:"#010101"}),c("path",{d:"M10.189 30.464c-.856.13-1.336.9-2.046 1.29a.62.62 0 01-1.001-.235.325.325 0 01-.26-.12c-.62-1 .645-1.696 1.31-2.186.936-.18 1.511.615 1.997 1.25z",fill:"#F6D2A2"}),c("path",{d:"M7.692 31.995a.613.613 0 01-.16 0 .74.74 0 01-.435-.375.301.301 0 01-.245-.13c-.6-.946.42-1.662 1.096-2.137l.235-.17c.945-.19 1.546.59 2.026 1.22l.135.181h-.15a2.586 2.586 0 00-1.266.725c-.23.212-.482.4-.75.56a1.001 1.001 0 01-.486.126zm-.6-.58a.245.245 0 01.105 0h.025l.04.08a.58.58 0 00.335.305.686.686 0 00.5-.12c.26-.155.503-.337.726-.54a3 3 0 011.206-.736c-.46-.6-1-1.25-1.786-1.1l-.225.16c-.69.5-1.546 1.09-1.051 1.885a.146.146 0 00.105.07l.02-.005z",fill:"#010101"}),c("path",{d:"M7.157 31.614a.09.09 0 01-.09-.12c.037-.24.137-.466.29-.655.072-.1.136-.205.19-.315a.09.09 0 11.165.075c-.058.12-.127.236-.205.345-.132.17-.217.372-.245.585a.09.09 0 01-.067.084.09.09 0 01-.038.002zM6.647 4.78c-.5-.25-.826-.596-.536-1.146.29-.55.77-.455 1.251-.205l-.715 1.35zm17.285-.48c.5-.25.825-.596.535-1.146-.29-.55-.77-.456-1.25-.205l.715 1.35z",fill:"#010101"}),c("path",{d:"M27.219 17.181c-.045.946-1.001.5-1.416.21-.416-.29-.5-.045-.56-.6a9.068 9.068 0 01-.046-1.09 2.677 2.677 0 011.787.454c.26.19.745.79.24 1.001",fill:"#F6D2A2"}),c("path",{d:"M26.728 17.846a2.046 2.046 0 01-.955-.36 1.117 1.117 0 00-.3-.145c-.2-.07-.275-.13-.3-.5v-.25a6.516 6.516 0 01-.026-.856v-.12h.076a2.751 2.751 0 011.846.47 1.15 1.15 0 01.5.83.412.412 0 01-.225.326.62.62 0 01-.31.55.605.605 0 01-.306.055zm-1.456-2.06c-.003.25.007.5.03.75v.25c0 .305.046.315.18.365.122.04.236.097.34.17a1.307 1.307 0 001.067.31.502.502 0 00.21-.45v-.06h.05a.25.25 0 00.17-.205 1.002 1.002 0 00-.42-.67 2.552 2.552 0 00-1.627-.46z",fill:"#010101"}),c("path",{d:"M27.218 17.181a.746.746 0 01-.375-.195z",fill:"#C7B199"}),c("path",{d:"M27.219 17.271h-.095a.7.7 0 01-.35-.25.09.09 0 01-.007-.101.091.091 0 01.152-.01.54.54 0 00.275.16h.06a.101.101 0 11-.035.201z",fill:"#010101"}),c("path",{d:"M15.407.066c3.622 0 7.004.5 8.785 4.002 1.586 3.898 1 8.105 1.266 12.223.21 3.537.67 7.624-.97 10.906-1.717 3.442-6.05 4.297-9.601 4.182-2.792-.1-6.164-1-7.74-3.562-1.851-3.002-.976-7.444-.84-10.771.16-3.942-1.071-7.9.225-11.762C7.877 1.282 11.5.376 15.402.066",fill:"#74CDDD"}),c("path",{d:"M15.502 31.494h-.62a13.202 13.202 0 01-4.358-.87 6.969 6.969 0 01-3.457-2.737c-1.501-2.421-1.23-5.763-1-8.715.06-.74.114-1.446.14-2.106.026-1.4-.034-2.8-.18-4.192-.211-2.502-.431-5.089.41-7.595a6.644 6.644 0 013.501-4.047C11.29.572 12.94.19 15.367 0c3.572-.025 7.094.475 8.905 4.022 1.16 2.852 1.176 5.914 1.196 8.876 0 1.11 0 2.256.08 3.377 0 .34.04.685.065 1.03.21 3.247.45 6.934-1.046 9.916-1.871 3.732-6.574 4.272-9.065 4.272zM15.407.156c-3.768.32-7.44 1.13-8.79 5.158-.831 2.471-.61 5.038-.406 7.504.147 1.4.207 2.806.18 4.213-.025.665-.085 1.37-.14 2.116-.23 2.922-.5 6.239.966 8.605.615 1 2.596 3.337 7.67 3.502 2.196.08 7.504-.17 9.505-4.142 1.47-2.942 1.236-6.599 1.026-9.826 0-.35-.045-.695-.065-1.03a67.451 67.451 0 01-.08-3.353c0-2.941-.03-6.003-1.181-8.805A6.438 6.438 0 0020.445.841a14.96 14.96 0 00-5.038-.685z",fill:"#010101"}),c("path",{d:"M16.042 4.924c.65 3.777 6.824 2.781 5.938-1.03-.795-3.418-6.153-2.472-5.938 1.03z",fill:"#fff"}),c("path",{d:"M18.979 7.39a3.457 3.457 0 01-1.13-.185 2.797 2.797 0 01-1.892-2.266 2.882 2.882 0 01.78-2.222 3.407 3.407 0 012.002-1 3.202 3.202 0 012.031.35 2.727 2.727 0 011.296 1.806 2.643 2.643 0 01-.77 2.682 3.502 3.502 0 01-2.317.835zm-2.847-2.476a2.626 2.626 0 001.776 2.126 3.417 3.417 0 003.277-.62 2.502 2.502 0 00.716-2.502 2.672 2.672 0 00-3.132-2.031 2.887 2.887 0 00-2.637 3.027z",fill:"#010101"}),c("path",{d:"M8.663 5.539c.84 3.287 6.103 2.441 5.908-.855-.235-3.953-6.714-3.207-5.908.855z",fill:"#fff"}),c("path",{d:"M11.474 7.705a3.232 3.232 0 01-1.536-.375 2.727 2.727 0 01-1.355-1.776 2.757 2.757 0 01.94-2.827 3.552 3.552 0 013.532-.45 2.672 2.672 0 011.601 2.402c.105 1.75-1.286 2.771-2.617 3.001a3.657 3.657 0 01-.565.025zM8.763 5.52A2.732 2.732 0 0012.03 7.52c1.26-.2 2.576-1.16 2.476-2.806a2.501 2.501 0 00-1.5-2.262 3.377 3.377 0 00-3.358.43 2.597 2.597 0 00-.885 2.637z",fill:"#010101"}),c("path",{d:"M16.767 9.481c.049.521.049 1.046 0 1.566a1 1 0 01-.585.36.861.861 0 01-.655-.5c-.032-.59-.017-1.183.045-1.77l1.195.344z",fill:"#fff"}),c("path",{d:"M16.237 11.483h-.025a.944.944 0 01-.725-.566 5.95 5.95 0 010-1.215c0-.185.03-.38.035-.57v-.15l1.35.414v.085c0 .16 0 .33.026.5.045.358.045.72 0 1.076v.025a.75.75 0 01-.476.34l-.155.06h-.03zm-.58-.63a.766.766 0 00.56.445l.14-.056a.6.6 0 00.366-.26c.04-.332.04-.668 0-1 0-.155 0-.305-.026-.455l-1-.306c0 .155 0 .31-.03.46-.044.388-.05.778-.015 1.166l.005.005zM10.114 5.964c.491 0 .89-.432.89-.965 0-.534-.399-.966-.89-.966-.492 0-.89.432-.89.966 0 .533.398.965.89.965z",fill:"#010101"}),c("path",{d:"M10.519 5.464c.116 0 .21-.11.21-.245s-.094-.245-.21-.245c-.116 0-.21.11-.21.245s.094.245.21.245z",fill:"#fff"}),c("path",{d:"M17.568 5.724c.483 0 .875-.432.875-.965 0-.533-.392-.966-.875-.966-.484 0-.876.433-.876.966 0 .533.392.965.876.965z",fill:"#010101"}),c("path",{d:"M17.963 5.224c.114 0 .206-.11.206-.245 0-.136-.092-.245-.206-.245-.113 0-.205.11-.205.245s.092.245.205.245zM14.266 9.406c-.39.941.215 2.822 1.27 1.436a11.12 11.12 0 01.046-1.77l-1.316.334z",fill:"#fff"}),c("path",{d:"M14.812 11.428a.5.5 0 01-.26-.07c-.426-.246-.691-1.251-.39-2.002v-.04l1.5-.38v.12c0 .195 0 .39-.035.575a5.71 5.71 0 000 1.181v.065a1.056 1.056 0 01-.815.55zm-.496-1.947c-.215.586-.045 1.501.33 1.716.27.155.57-.115.78-.385a6.128 6.128 0 010-1.18c0-.146 0-.3.031-.45l-1.14.3z",fill:"#010101"}),c("path",{d:"M14.38 7.595a1.146 1.146 0 00-.94 1.601c.5.9 1.611-.08 2.302 0 .795 0 1.45.84 2.09.15.711-.77-.304-1.5-1.1-1.856l-2.351.105z",fill:"#F6D2A2"}),c("path",{d:"M17.268 9.727a2 2 0 01-.73-.206 2.207 2.207 0 00-.791-.22c-.287 0-.57.062-.83.18-.561.195-1.196.416-1.557-.23a1.08 1.08 0 010-1.05 1.281 1.281 0 011.001-.686l2.406-.105c.59.25 1.266.706 1.381 1.236a.955.955 0 01-.88 1.08zm-1.501-.606c.296.024.584.104.85.235.45.19.806.335 1.166-.055a.664.664 0 00.205-.605c-.1-.46-.735-.88-1.256-1.1l-2.326.094a1.11 1.11 0 00-.85.59.906.906 0 000 .876c.285.5.795.335 1.34.15.274-.122.57-.185.87-.185z",fill:"#231F20"}),c("path",{d:"M14.266 7.56c-.055-1.25 2.336-1.41 2.617-.36.28 1.05-2.502 1.29-2.617.36z",fill:"#010101"}))},Xvt=Jvt;var xN={};de(xN,{icon:()=>egt});var Y1r=V(ne());var Kvt=["title","titleId"];function pae(){return pae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zvt=function(t){var n=t.title,r=t.titleId,o=Yvt(t,Kvt),i=yo("logo_google_g");return c("svg",pae({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32",width:32,height:32,"aria-labelledby":r},o),n?c("title",{id:r},n):null,c("defs",null,c("path",{id:i("a"),d:"M15.319 3.278c0-1.131-.102-2.22-.29-3.264H0v6.172h8.587c-.37 1.995-1.494 3.685-3.184 4.816v4.004h5.157c3.017-2.778 4.758-6.869 4.758-11.728z"}),c("path",{id:i("c"),d:"M14.343 12.956c4.308 0 7.92-1.43 10.56-3.866l-5.157-4.004c-1.429.958-3.256 1.523-5.403 1.523-4.156 0-7.674-2.806-8.928-6.578H.084v4.134c2.625 5.215 8.021 8.79 14.259 8.79z"}),c("path",{id:i("e"),d:"M7.028 10.25a9.59 9.59 0 01-.5-3.032 9.59 9.59 0 01.5-3.032V.052h-5.33A15.95 15.95 0 000 7.218c0 2.575.617 5.012 1.697 7.166l5.331-4.134z"}),c("path",{id:i("g"),d:"M14.343 6.392c2.342 0 4.446.805 6.1 2.386l4.576-4.576C22.256 1.627 18.644.046 14.343.046 8.105.046 2.709 3.622.083 8.836l5.332 4.134c1.254-3.77 4.772-6.578 8.928-6.578z"})),c("g",{fill:"none",fillRule:"evenodd"},c("g",{transform:"translate(15.955 13.087)"},c("mask",{id:i("b"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("a"))})),c("path",{fill:"#4285F4",fillRule:"nonzero",mask:"url(#".concat(i("b"),")"),d:"M.001 15.006h15.318V.014H.001z"})),c("g",{transform:"translate(1.613 19.003)"},c("mask",{id:i("d"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("c"))})),c("path",{fill:"#34A853",fillRule:"nonzero",mask:"url(#".concat(i("d"),")"),d:"M.084 12.956h24.819V.031H.084z"})),c("g",{transform:"translate(0 8.784)"},c("mask",{id:i("f"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("e"))})),c("path",{fill:"#FBBC04",fillRule:"nonzero",mask:"url(#".concat(i("f"),")"),d:"M0 14.384h7.028V.052H0z"})),c("g",{transform:"translate(1.613)"},c("mask",{id:i("h"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("g"))})),c("path",{fill:"#EA4335",fillRule:"nonzero",mask:"url(#".concat(i("h"),")"),d:"M.084 12.97h24.935V.046H.084z"}))))},egt=Zvt;var _N={};de(_N,{icon:()=>igt});var evr=V(ne());var tgt=["title","titleId"];function dae(){return dae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ngt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ogt=function(t){var n=t.title,r=t.titleId,o=rgt(t,tgt),i=yo("logo_haproxy");return c("svg",dae({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{clipPath:"url(#".concat(i("clip0"),")")},c("path",{d:"M16.05 13.237l-3.11-3.612",stroke:"#05486D",strokeWidth:.12,strokeMiterlimit:10}),c("path",{d:"M6.117 10.528l2.509 3.512",stroke:"#05486D",strokeWidth:.06,strokeMiterlimit:10}),c("path",{d:"M16.05 13.237l3.11-3.612M19.863 17.15l3.712-3.11M19.863 17.15l3.712 3.311M19.16 24.575l-3.11-3.511M12.94 24.575l3.11-3.511M8.625 20.26l3.512-3.11M8.625 14.04l3.512 3.11M16.05 13.238l-7.425.802M16.05 13.238l7.525.802M19.863 17.15l-.702-7.525M19.863 17.15l-.702 7.425M23.575 20.461l-7.525.602M8.625 20.261l7.425.803M12.94 24.575l-.803-7.425M12.94 9.625l-.803 7.525",stroke:"#05486D",strokeWidth:.12,strokeMiterlimit:10}),c("path",{d:"M5.114 15.043l3.511-1.003M9.328 7.117l3.612 2.509M13.743 5.512l-.803 4.113M13.743 5.512l5.418 4.113M18.358 5.512l.803 4.113M22.773 7.117L19.16 9.626M25.983 10.528l-6.822-.903M23.575 14.04l2.408-3.512M23.575 14.04l3.412 1.003M23.575 14.04l3.412 5.217M18.358 5.512L12.94 9.625M23.576 14.04l-.803-6.923M23.575 20.462l3.412-1.204M23.575 20.462l3.412-5.418M23.575 20.461l2.408 3.312M23.576 20.461l-.803 6.723M19.16 24.575l3.613 2.609M19.16 24.575l6.823-.802M19.16 24.575l-.802 4.214M19.16 24.575l-5.417 4.214M12.94 24.575l.803 4.214M12.94 24.575l5.418 4.214M12.94 24.575l-3.612 2.609M12.94 24.575l-6.823-.802M8.626 20.261l-2.509 3.512M8.625 20.261l.703 6.923M8.625 20.26l-3.511-1.002M8.625 14.04l-3.511 5.217M8.625 20.26l-3.511-5.217M9.328 7.117l-.703 6.923M6.117 10.528l6.823-.903",stroke:"#05486D",strokeWidth:.06,strokeMiterlimit:10}),c("path",{d:"M9.327 7.117L6.72 5.813M9.328 7.117l-.201-2.91M13.742 5.512L9.127 4.207M13.742 5.512l-2.006-2.509M13.743 5.512l.802-2.91M9.328 7.117l2.408-4.114M18.358 5.512l-3.813-2.91M18.358 5.512l-.803-3.01M13.743 5.512l3.812-3.01M18.358 5.512l2.007-2.509M22.773 7.117l-2.408-4.114M22.773 7.117l.301-2.91M18.358 5.512l4.716-1.305M22.773 7.117l2.709-1.405M22.773 7.117l4.716.703M25.983 10.528l1.505-2.709M25.984 10.528l-.502-4.816M25.983 10.528l3.11-.3M25.983 10.528l4.214 2.308M26.987 15.044l2.107-4.817M26.987 15.043l3.21-2.207M26.987 15.043l3.612.703M26.987 19.258l3.612-3.512M26.987 19.258l3.712-.703M26.987 15.043l3.712 3.512M26.987 19.258l3.11 2.107M25.983 23.773l4.114-2.409M25.983 23.773l3.11.3M26.987 19.258l2.107 4.816M25.983 23.773l1.505 2.709M25.984 23.773l-.502 4.715M25.482 28.488l-2.71-1.304M22.773 27.184l.2 2.91M22.773 27.184l4.716-.703M22.773 27.184l-2.408 4.114M18.358 28.79l2.007 2.508M18.358 28.79l4.615 1.304M18.358 28.79l-.803 3.01M18.358 28.79l-3.813 3.01M13.743 28.79l.802 3.01M13.743 28.79l3.812 3.01M13.742 28.79l-2.006 2.508M9.328 27.184l2.408 4.114M13.742 28.79l-4.615 1.404M9.328 27.184l-.201 3.01M9.328 27.184l-2.71 1.404M6.117 23.773l.502 4.816M9.328 27.184l-4.716-.703M6.117 23.773l-1.505 2.709M6.117 23.773l-3.11.3M6.117 23.773l-4.214-2.409M5.114 19.258l-3.21 2.107M5.114 19.258L1.4 18.555M5.114 19.258l-2.107 4.816M5.114 15.043L1.4 18.555M5.114 19.258L1.4 15.746M5.114 15.043l-3.11-2.106M5.114 15.043l-3.713.703M5.114 15.044l-2.007-4.817M6.117 10.528l-3.01-.3M6.117 10.528l-4.114 2.408M6.117 10.528L4.712 7.92M6.117 10.528l.602-4.715M9.328 7.117l-4.616.803",stroke:"#083D5F",strokeWidth:.05,strokeMiterlimit:10}),c("path",{d:"M13.943 15.244h-3.612v3.592h3.612v-3.592zM17.756 11.331h-3.612v3.592h3.612v-3.592zM17.756 19.157h-3.612v3.592h3.612v-3.592zM21.669 15.244h-3.612v3.592h3.612v-3.592z",fill:"#006DA8"}),c("path",{d:"M20.365 8.421h-2.509V10.9h2.509V8.42zM14.144 8.321h-2.509v2.478h2.509V8.321zM9.83 12.836H7.32v2.478H9.83v-2.478zM9.83 18.956H7.32v2.479H9.83v-2.479zM24.679 18.956H22.17v2.479h2.509v-2.479zM24.679 12.736H22.17v2.478h2.509v-2.478z",fill:"#2F77BC"}),c("path",{d:"M6.92 9.625H5.314v1.676H6.92V9.625zM10.13 6.214H8.526v1.675h1.606V6.214zM14.445 4.609h-1.606v1.675h1.606V4.61zM5.916 14.14H4.311v1.676h1.605V14.14zM26.786 9.826H25.08v1.646h1.706V9.826zM23.575 6.415H21.87V8.06h1.705V6.415zM19.26 4.81h-1.705v1.645h1.706V4.809zM27.689 14.441h-1.605v1.646h1.605V14.44z",fill:"#139BD7"}),c("path",{d:"M14.144 23.27h-2.509v2.479h2.509v-2.478zM20.264 23.27h-2.508v2.479h2.508v-2.478z",fill:"#2F77BC"}),c("path",{d:"M26.685 22.77H25.08v1.675h1.605v-1.676zM23.375 26.08H21.77v1.676h1.605V26.08zM19.06 27.686h-1.605v1.675h1.605v-1.675zM27.589 18.254h-1.606v1.676h1.606v-1.676zM6.92 22.97H5.214v1.646H6.92V22.97zM10.03 26.381H8.325v1.646h1.705V26.38zM14.445 27.987h-1.706v1.645h1.706v-1.645zM5.816 18.355H4.21V20h1.606v-1.645z",fill:"#139BD7"}),c("path",{d:"M7.12 5.311h-.903v.933h.903v-.933zM1.903 15.244H1v.933h.903v-.933zM25.782 5.21h-.903v.934h.903V5.21zM2.505 12.335h-.903v.933h.903v-.934zM12.137 2.502h-.903v.933h.903v-.933zM3.508 9.726h-.903v.933h.903v-.933zM5.113 7.318H4.21v.933h.903v-.933zM9.629 3.806h-.903v.903h.903v-.903zM15.047 2.1h-.903v.903h.903V2.1zM23.374 3.605h-.903v.933h.903v-.933zM29.295 9.726h-.903v.933h.903v-.933zM30.498 12.335h-.903v.933h.903v-.934zM27.69 7.318h-.904v.933h.903v-.933zM30.9 15.144h-.903v.933h.903v-.933zM17.856 2h-.903v.933h.903V2zM20.665 2.602h-.903v.933h.903v-.933z",fill:"#03A9DA"}),c("path",{d:"M7.12 5.311h-.903v.933h.903v-.933zM1.903 15.244H1v.933h.903v-.933zM25.782 5.21h-.903v.934h.903V5.21zM2.505 12.335h-.903v.933h.903v-.934zM12.137 2.502h-.903v.933h.903v-.933zM3.508 9.726h-.903v.933h.903v-.933zM5.113 7.318H4.21v.933h.903v-.933zM9.629 3.806h-.903v.903h.903v-.903zM15.047 2.1h-.903v.903h.903V2.1zM23.374 3.605h-.903v.933h.903v-.933zM29.295 9.726h-.903v.933h.903v-.933zM30.498 12.335h-.903v.933h.903v-.934zM27.69 7.318h-.904v.933h.903v-.933zM30.9 15.144h-.903v.933h.903v-.933zM17.856 2h-.903v.933h.903V2zM20.665 2.602h-.903v.933h.903v-.933zM25.682 27.886h-.903v.933h.903v-.933zM31 17.953h-.903v.933H31v-.933zM7.12 27.987h-.903v.933h.903v-.933zM30.398 20.763h-.903v.933h.903v-.933zM20.665 30.596h-.903v.933h.903v-.933zM29.295 23.371h-.903v.933h.903v-.933zM27.69 25.78h-.904v.932h.903v-.933zM23.274 29.793h-.903v.902h.903v-.902zM17.756 31.498h-.903v.903h.903v-.903zM9.428 29.492h-.903v.933h.903v-.933zM3.508 23.472h-.903v.933h.903v-.933zM2.304 20.863h-.903v.933h.903v-.933zM5.013 25.88H4.11v.933h.903v-.933zM1.903 17.953H1v.933h.903v-.933zM14.947 31.498h-.903v.933h.902v-.933zM12.137 30.596h-.903v.933h.903v-.933z",fill:"#03A9DA"})),c("defs",null,c("clipPath",{id:i("clip0")},c("path",{d:"M0 0h32v32H0V0z",fill:"#fff"}))))},igt=ogt;var SN={};de(SN,{icon:()=>cgt});var nvr=V(ne());var agt=["title","titleId"];function hae(){return hae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ugt=function(t){var n=t.title,r=t.titleId,o=sgt(t,agt),i=yo("logo_ibm");return c("svg",hae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("defs",null,c("linearGradient",{id:i("a"),x1:"8.005%",x2:"53.33%",y1:"79.323%",y2:"79.324%"},c("stop",{offset:"0%",stopColor:"#3BDADE",stopOpacity:0}),c("stop",{offset:"30.476%",stopColor:"#36CEE1",stopOpacity:.383}),c("stop",{offset:"100%",stopColor:"#21A2EF"})),c("linearGradient",{id:i("b"),x1:"19.496%",x2:"71.309%",y1:"83.344%",y2:"17.638%"},c("stop",{offset:"0%",stopColor:"#207FFA"}),c("stop",{offset:"100%",stopColor:"#6EAFF1",stopOpacity:0})),c("linearGradient",{id:i("c"),x1:"21.909%",x2:"21.909%",y1:"96.314%",y2:"29.454%"},c("stop",{offset:"0%",stopColor:"#42C1E6",stopOpacity:0}),c("stop",{offset:"57.076%",stopColor:"#6FB9EF"}),c("stop",{offset:"86.716%",stopColor:"#60CBE7"}),c("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),c("linearGradient",{id:i("d"),x1:"96.205%",x2:"-1.172%",y1:"12.667%",y2:"-22.252%"},c("stop",{offset:"0%",stopColor:"#6FB9EF",stopOpacity:0}),c("stop",{offset:"22.427%",stopColor:"#38D2E0"}),c("stop",{offset:"91.203%",stopColor:"#6ABFEC"}),c("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),c("linearGradient",{id:i("e"),x1:"9.408%",x2:"80.589%",y1:"87.764%",y2:"83.138%"},c("stop",{offset:"0%",stopColor:"#126CFD"}),c("stop",{offset:"100%",stopColor:"#21A1EF"}))),c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#38D2E0",d:"M4.262 13.122a.604.604 0 01-.3-.08l-2.844-1.625a.617.617 0 01-.295-.734.608.608 0 01.868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 01-.533.32zm4.914-4.864a.603.603 0 01-.522-.298L7.012 5.144a.615.615 0 01.115-.782.606.606 0 01.91.157l1.64 2.813a.617.617 0 01-.158.819c-.1.07-.22.107-.343.107zm6.107-2.416V2.635a.624.624 0 01.575-.634.605.605 0 01.443.164.593.593 0 01.186.431v3.285a.593.593 0 01-.186.43.605.605 0 01-.443.165.624.624 0 01-.575-.634zm7.312 2.416a.604.604 0 01-.343-.107.617.617 0 01-.159-.82l1.64-2.812a.602.602 0 01.911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 01-.522.298zm4.914 4.864a.602.602 0 01-.534-.319.616.616 0 01.262-.81l2.818-1.611a.626.626 0 01.783.112.592.592 0 01-.156.906l-2.873 1.643a.604.604 0 01-.3.08z"}),c("path",{fill:"url(#".concat(i("a"),")"),d:"M16.536 19.645l-1.204-.009c.026-3.377 2.146-6.391 5.337-7.585a8.308 8.308 0 019.068 2.197l-.897.795a7.097 7.097 0 00-7.745-1.876c-2.726 1.019-4.537 3.593-4.559 6.478z",transform:"translate(0 2)"}),c("path",{fill:"url(#".concat(i("b"),")"),d:"M.029 20.909c.022-3.354 2.475-6.208 5.815-6.764l.201 1.176c-2.764.46-4.794 2.82-4.812 5.596L.029 20.91z",transform:"translate(0 2)"}),c("path",{fill:"url(#".concat(i("c"),")"),d:"M8.246 24.737a10.625 10.625 0 010-15.131c4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 011.384 1.678l-1.004.657a9.517 9.517 0 00-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.442 9.442 0 000 13.445l-.851.843z",transform:"translate(0 2)"}),c("path",{fill:"url(#".concat(i("d"),")"),d:"M5.836 13.234c.404-1.332 1.33-2.56 2.41-3.628 4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 011.384 1.678l-1.004.657a9.517 9.517 0 00-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.474 9.474 0 00-2.074 3.06c-1.452 3.45-2.358 3.593-1.187-.275z",transform:"translate(0 2)"}),c("path",{fill:"url(#".concat(i("e"),")"),d:"M23.524 27.87H6.96a7.012 7.012 0 01-4.922-2.059A6.876 6.876 0 01.029 20.91l1.204.009a5.69 5.69 0 001.66 4.055 5.802 5.802 0 004.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 00-1.18-7.505l.897-.795a8.112 8.112 0 011.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838h-.063z",transform:"translate(0 2)"})))},cgt=ugt;var EN={};de(EN,{icon:()=>mgt});var avr=V(ne());var fgt=["title","titleId"];function mae(){return mae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hgt=function(t){var n=t.title,r=t.titleId,o=pgt(t,fgt);return c("svg",mae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M.047 22.909l1.186.009a5.69 5.69 0 001.66 4.055 5.802 5.802 0 004.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 00-1.18-7.505l.897-.795a8.112 8.112 0 011.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838H6.96a7.012 7.012 0 01-4.922-2.06A6.876 6.876 0 01.029 22.91h.018-.018c.017-2.71 1.62-5.091 3.997-6.2.114-.054.32.29.619 1.03a5.71 5.71 0 00-3.412 5.18l-1.186-.01zm4.215-9.787a.604.604 0 01-.3-.08l-2.844-1.625a.617.617 0 01-.295-.734.608.608 0 01.868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 01-.533.32zm4.914-4.864a.603.603 0 01-.522-.298L7.012 5.144a.615.615 0 01.115-.782.606.606 0 01.91.157l1.64 2.813a.617.617 0 01-.158.819c-.1.07-.22.107-.343.107zm6.107-2.416V2.635a.624.624 0 01.575-.634.605.605 0 01.443.164.593.593 0 01.186.431v3.285a.593.593 0 01-.186.43.605.605 0 01-.443.165.624.624 0 01-.575-.634zm7.312 2.416a.604.604 0 01-.343-.107.617.617 0 01-.159-.82l1.64-2.812a.602.602 0 01.911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 01-.522.298zm4.914 4.864a.602.602 0 01-.534-.319.616.616 0 01.262-.81l2.818-1.611a.626.626 0 01.783.112.592.592 0 01-.156.906l-2.873 1.643a.604.604 0 01-.3.08zM16.366 19.78H16a2.322 2.322 0 01-.302 0c-.09-.011-.152.05-.086-.196a8.204 8.204 0 015.057-5.533 8.308 8.308 0 019.068 2.197l-.897.795a7.097 7.097 0 00-7.745-1.876 7.009 7.009 0 00-4.288 4.613c-.115.399-.115.399 0 0h-.44zM6.154 23.826a10.626 10.626 0 012.092-12.22c4.219-4.178 11.06-4.178 15.279 0l-.851.843c-3.75-3.713-9.828-3.713-13.577 0A9.442 9.442 0 007.264 23.36a6.99 6.99 0 00-.418.172l-.212.094-.162.077-.094.03-.09.039c.648-.282.965-.42.95-.412-.026.015-1.073.489-1.084.466z"}))},mgt=hgt;var IN={};de(IN,{icon:()=>wgt});var lvr=V(ne());var vgt=["title","titleId"];function vae(){return vae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ygt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bgt=function(t){var n=t.title,r=t.titleId,o=ggt(t,vgt);return c("svg",vae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M21.565 17.623c-1.173 0-2.225.52-2.945 1.337l-1.845-1.306c.196-.54.309-1.118.309-1.724 0-.596-.109-1.165-.298-1.696l1.84-1.293a3.914 3.914 0 002.939 1.331 3.93 3.93 0 003.926-3.926 3.93 3.93 0 00-3.926-3.926 3.93 3.93 0 00-3.926 3.926c0 .387.058.761.163 1.115l-1.842 1.293a5.068 5.068 0 00-3.14-1.825V8.71a3.932 3.932 0 003.119-3.842A3.93 3.93 0 0012.012.941a3.93 3.93 0 00-3.926 3.926 3.93 3.93 0 003.048 3.824v2.249a5.075 5.075 0 00-4.193 4.99 5.075 5.075 0 004.229 4.995V23.3a3.931 3.931 0 00-3.084 3.833 3.93 3.93 0 003.926 3.926 3.93 3.93 0 003.927-3.926 3.931 3.931 0 00-3.084-3.833v-2.375a5.07 5.07 0 003.087-1.795l1.857 1.314c-.103.351-.16.721-.16 1.105a3.93 3.93 0 003.926 3.926 3.93 3.93 0 003.926-3.926 3.93 3.93 0 00-3.926-3.926zm0-9.18c1.05 0 1.903.853 1.903 1.903s-.854 1.903-1.903 1.903a1.906 1.906 0 01-1.904-1.903c0-1.05.854-1.904 1.904-1.904zM10.109 4.866c0-1.05.854-1.903 1.903-1.903 1.05 0 1.904.854 1.904 1.903 0 1.05-.854 1.904-1.904 1.904a1.906 1.906 0 01-1.903-1.904zm3.807 22.266c0 1.05-.854 1.903-1.904 1.903a1.906 1.906 0 01-1.903-1.903c0-1.05.854-1.904 1.903-1.904 1.05 0 1.904.854 1.904 1.904zm-1.904-8.548a2.658 2.658 0 01-2.655-2.655 2.658 2.658 0 012.655-2.655 2.658 2.658 0 012.655 2.655 2.658 2.658 0 01-2.655 2.655zm9.553 4.867a1.906 1.906 0 01-1.904-1.903c0-1.05.854-1.904 1.904-1.904 1.05 0 1.903.854 1.903 1.904 0 1.05-.854 1.903-1.903 1.903z"}))},wgt=bgt;var kN={};de(kN,{icon:()=>Egt});var cvr=V(ne());var Ogt=["title","titleId"];function gae(){return gae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _gt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sgt=function(t){var n=t.title,r=t.titleId,o=xgt(t,Ogt);return c("svg",gae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#F04E98",d:"M4 0v28.789L28.935.017z"}),c("path",{className:"euiIcon__fillNegative",d:"M4 12v16.789l11.906-13.738A24.721 24.721 0 004 12"}),c("path",{fill:"#00BFB3",d:"M18.479 16.664L6.268 30.754l-1.073 1.237h23.191c-1.252-6.292-4.883-11.719-9.908-15.327"})))},Egt=Sgt;var PN={};de(PN,{icon:()=>Cgt});var pvr=V(ne());var Igt=["title","titleId"];function yae(){return yae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jgt=function(t){var n=t.title,r=t.titleId,o=kgt(t,Igt);return c("svg",yae({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M15.89.003a2.14 2.14 0 011.03.206l11.127 5.304a2.11 2.11 0 011.15 1.429l2.75 11.921a2.09 2.09 0 01-.412 1.783l-7.697 9.56c-.404.5-1.016.792-1.663.791L9.827 31c-.648 0-1.26-.292-1.664-.793l-7.7-9.558a2.107 2.107 0 01-.41-1.783L2.798 6.945a2.11 2.11 0 011.151-1.43L15.074.21c.255-.122.532-.192.815-.206zM16 4.06c-.368 0-.667.33-.667.738l.002.019c0 .055-.003.122-.002.17.01.236.06.416.091.632.057.464.103.849.074 1.206-.028.135-.127.258-.216.344l-.015.281a8.569 8.569 0 00-5.555 2.666 9.98 9.98 0 01-.24-.17c-.12.016-.24.053-.396-.038-.298-.2-.57-.477-.898-.81-.15-.16-.26-.31-.438-.464-.04-.035-.103-.082-.148-.118a.793.793 0 00-.464-.175.642.642 0 00-.53.234c-.23.288-.156.726.163.98l.01.008c.044.035.098.08.138.11.19.14.363.212.552.323.398.246.729.45.99.695.103.108.12.3.134.383l.214.19a8.592 8.592 0 00-1.36 5.998l-.278.08c-.074.096-.177.245-.286.29-.343.107-.728.147-1.194.195-.218.018-.407.008-.639.051-.05.01-.122.029-.177.042l-.006.001-.01.003c-.393.095-.645.455-.564.81.082.355.465.57.86.485l.01-.001.013-.004c.055-.012.124-.026.172-.039.228-.06.393-.15.597-.228.44-.158.806-.29 1.161-.341.149-.012.305.091.383.135l.29-.05a8.654 8.654 0 003.84 4.787l-.12.29c.043.113.091.265.059.376-.13.334-.35.688-.603 1.081-.122.182-.247.324-.357.532-.026.05-.06.126-.086.179-.17.365-.045.786.284.944.33.16.741-.008.919-.375l.001-.001v-.002c.025-.051.061-.12.083-.169.094-.215.125-.4.192-.609.176-.442.273-.905.515-1.194.067-.08.175-.11.287-.14l.151-.273a8.616 8.616 0 006.145.016l.142.256c.114.037.239.056.34.206.182.31.306.675.457 1.118.066.208.1.393.194.61.021.048.057.117.082.17.177.367.59.535.92.376.33-.158.455-.58.284-.945-.026-.052-.06-.129-.087-.179-.11-.208-.235-.348-.357-.53-.252-.393-.461-.72-.59-1.055-.055-.173.009-.28.05-.392-.025-.029-.079-.192-.11-.268a8.654 8.654 0 003.838-4.822c.086.014.236.04.285.05.1-.066.192-.152.373-.138.355.052.72.183 1.16.341.205.078.37.17.598.23.048.013.117.025.172.037l.013.004.01.002c.395.085.778-.131.86-.486.08-.355-.171-.715-.564-.81-.057-.013-.138-.035-.193-.045-.232-.044-.42-.033-.64-.051-.465-.049-.85-.089-1.193-.196-.14-.054-.239-.22-.287-.289l-.27-.078a8.572 8.572 0 00-.139-3.104 8.599 8.599 0 00-1.247-2.88c.068-.062.199-.177.236-.21.01-.12.001-.245.125-.377.262-.246.592-.45.99-.695.19-.11.364-.182.554-.322.043-.032.101-.082.146-.118.32-.255.393-.693.164-.98-.23-.287-.674-.314-.993-.06-.046.036-.107.083-.148.118-.179.153-.29.305-.44.464-.328.333-.6.611-.898.812-.129.075-.318.049-.404.044l-.253.18a8.732 8.732 0 00-5.528-2.666 16.036 16.036 0 01-.015-.297c-.087-.083-.192-.154-.218-.333-.029-.357.02-.742.076-1.206.03-.216.082-.396.09-.632.003-.053 0-.13 0-.189 0-.408-.299-.738-.667-.738zm-.834 5.156l-.198 3.488-.014.007a.587.587 0 01-.932.449l-.006.002-2.864-2.027a6.862 6.862 0 014.014-1.919zm1.668 0a6.922 6.922 0 013.99 1.92l-2.846 2.015-.01-.004a.588.588 0 01-.933-.448l-.003-.001-.198-3.482zm-6.72 3.222l2.614 2.335-.003.014a.585.585 0 01-.23 1.008l-.003.01-3.352.967a6.838 6.838 0 01.973-4.334zm11.753.001c.388.63.683 1.331.858 2.093a6.91 6.91 0 01.145 2.229l-3.37-.97-.002-.013a.586.586 0 01-.23-1.008l-.002-.007 2.6-2.324zm-6.404 2.515h1.071l.666.83-.239 1.038-.962.461-.964-.463-.24-1.037.668-.83zm3.435 2.844a.585.585 0 01.135.01l.005-.008 3.468.586a6.858 6.858 0 01-2.776 3.481l-1.346-3.246.004-.005a.586.586 0 01.51-.818zm-5.824.014a.587.587 0 01.53.817l.01.012-1.331 3.214a6.886 6.886 0 01-2.767-3.458l3.437-.582.006.007a.595.595 0 01.115-.01zm2.904 1.407a.582.582 0 01.275.059.583.583 0 01.263.25h.013l1.694 3.057c-.22.073-.446.136-.677.189a6.896 6.896 0 01-3.758-.194l1.69-3.05h.003a.588.588 0 01.497-.31z",fill:"#326CE5"}))},Cgt=jgt;var jN={};de(jN,{icon:()=>Dgt});var hvr=V(ne());var Tgt=["title","titleId"];function bae(){return bae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rgt=function(t){var n=t.title,r=t.titleId,o=Agt(t,Tgt);return c("svg",bae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#0080D5",d:"M2 10v13a9 9 0 019 9h13c0-12.15-9.85-22-22-22"}),c("path",{className:"euiIcon__fillNegative",d:"M14 13.565V32h10c0-7.722-3.981-14.51-10-18.436"}),c("path",{fill:"#00BFB3",d:"M14 0v10.226C21.666 14.468 26.869 22.636 26.869 32H30V16c0-8.837-7.163-16-16-16"}))},Dgt=Rgt;var CN={};de(CN,{icon:()=>Bgt});var vvr=V(ne());var zgt=["title","titleId"];function wae(){return wae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fgt=function(t){var n=t.title,r=t.titleId,o=Ngt(t,zgt);return c("svg",wae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#3EBEB0",d:"M19 32h11V20H19z"}),c("path",{fill:"#FEC514",d:"M4 0H3v20h13v-8C16 5.373 10.627 0 4 0"}),c("path",{className:"euiIcon__fillNegative",d:"M3 20c0 6.627 5.373 12 12 12h1V20H3z"}))},Bgt=Fgt;var TN={};de(TN,{icon:()=>qgt});var yvr=V(ne());var Wgt=["title","titleId"];function Oae(){return Oae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $gt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vgt=function(t){var n=t.title,r=t.titleId,o=Hgt(t,Wgt);return c("svg",Oae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#22A7F3",d:"M25.5 9.5c0 6.65-9.5 11.425-9.5 11.425S6.5 16.15 6.5 9.5A9.5 9.5 0 0116 0a9.5 9.5 0 019.5 9.5"}),c("path",{className:"euiIcon__fillNegative",d:"M16 20.925s4.326-2.183 7.141-5.645l-2.505-1.878a7.725 7.725 0 00-9.272 0L8.859 15.28C11.674 18.742 16 20.925 16 20.925"}),c("path",{fill:"#FA744E",d:"M25.53 17.073a21.124 21.124 0 01-2.834 2.916c-2.62 2.235-5.239 3.561-5.349 3.616L16 24.282l-1.348-.677c-.109-.055-2.728-1.381-5.349-3.616a21.182 21.182 0 01-2.834-2.916L0 21.925l11.364 8.523a7.724 7.724 0 009.271 0L32 21.925l-6.47-4.852z"}))},qgt=Vgt;var AN={};de(AN,{icon:()=>Kgt});var wvr=V(ne());var Ugt=["title","titleId"];function xae(){return xae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xgt=function(t){var n=t.title,r=t.titleId,o=Ggt(t,Ugt),i=yo("logo_memcached");return c("svg",xae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("defs",null,c("radialGradient",{id:i("c"),cx:"41.406%",cy:"42.708%",r:"0%",fx:"41.406%",fy:"42.708%"},c("stop",{offset:"0%",stopColor:"#DB7C7C"}),c("stop",{offset:"100%",stopColor:"#C83737"})),c("radialGradient",{id:i("d"),cx:"44.271%",cy:"42.708%",r:"0%",fx:"44.271%",fy:"42.708%"},c("stop",{offset:"0%",stopColor:"#DB7C7C"}),c("stop",{offset:"100%",stopColor:"#C83737"})),c("linearGradient",{id:i("a"),x1:"50%",x2:"50%",y1:"100%",y2:"0%"},c("stop",{offset:"0%",stopColor:"#574C4A"}),c("stop",{offset:"100%",stopColor:"#80716D"})),c("linearGradient",{id:i("b"),x1:"88.778%",x2:"30.149%",y1:"98.342%",y2:"-8.68%"},c("stop",{offset:"0%",stopColor:"#268D83"}),c("stop",{offset:"100%",stopColor:"#2EA19E"}))),c("g",{fill:"none"},c("path",{fill:"url(#".concat(i("a"),")"),d:"M0 21.567V10.352C0 1.294 1.293 0 10.342 0h11.236c9.049 0 10.341 1.294 10.341 10.352v11.215c0 9.059-1.292 10.352-10.341 10.352H10.342C1.292 31.92 0 30.626 0 21.567z"}),c("path",{fill:"url(#".concat(i("b"),")"),d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27h4.904c-.466-2.483-2.14-13.824-.748-13.861.746.118 4.156 9.621 4.156 9.621s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.41-9.503 4.157-9.621c1.392.037-.282 11.378-.748 13.86h4.904s.82-9.31-.748-19.253h-4.54c-.865.01-4.153 5.777-4.531 5.777-.378 0-3.666-5.767-4.53-5.777H6.889z"}),c("path",{fill:"url(#".concat(i("c"),")"),d:"M14.993 24.109a1.16 1.16 0 11-2.322 0 1.16 1.16 0 012.322 0z"}),c("path",{fill:"url(#".concat(i("d"),")"),d:"M19.249 24.109a1.16 1.16 0 11-2.322 0 1.16 1.16 0 012.322 0z"}),c("path",{fill:"#000",d:"M24.8 6.345c.707 4.79.873 9.388.86 12.813-.013 3.503-.214 5.78-.214 5.78h-4.128l-.443.332h4.904s.82-9.31-.748-19.254l-.232.329zm-12.996-.121c1.288 1.433 3.516 5.237 3.823 5.237-.817-1.045-2.823-4.378-3.823-5.237zm-1.84 4.852c-1.392.038.282 11.379.749 13.861H6.43l-.29.333h4.904c-.464-2.47-2.123-13.71-.769-13.861-.126-.19-.235-.32-.311-.333zm11.326 0c-.746.119-4.156 9.622-4.156 9.622s-.751-.094-1.507-.094c-.447 0-.832.028-1.092.052l-.082.374s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.385-9.44 4.146-9.621c-.082-.208-.183-.33-.322-.333z",opacity:.1}),c("path",{fill:"#FFF",d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27l.289-.325c-.148-2.197-.543-10.14.791-18.597h4.541c.096.002.225.08.374.208-.297-.33-.544-.538-.706-.54H6.889zm13.601 0c-.864.01-4.152 5.777-4.53 5.777.154.197.279.333.332.333.378 0 3.666-5.767 4.53-5.777h4.008l.2-.333h-4.54zm-9.881 5.725c1.103 1.657 3.844 9.29 3.844 9.29l.08-.373c-.676-1.856-3.256-8.814-3.903-8.917h-.021zm11.346 0c.74 1.887-.66 11.295-1.08 13.529l.444-.348c.568-3.331 1.936-13.146.636-13.18z",opacity:.3})))},Kgt=Xgt;var MN={};de(MN,{icon:()=>tyt});var _vr=V(ne());var Ygt=["title","titleId"];function _ae(){return _ae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eyt=function(t){var n=t.title,r=t.titleId,o=Qgt(t,Ygt);return c("svg",_ae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#F04E98",d:"M2 32h28V20l-6.465-6.465a5 5 0 00-7.07 0L2 28v4z"}),c("path",{className:"euiIcon__fillNegative",d:"M16.465 13.535l-3.536 3.536a9.965 9.965 0 007.07 2.93 9.965 9.965 0 007.072-2.93l-3.536-3.536a5 5 0 00-7.07 0"}),c("path",{fill:"#FEC514",d:"M14.343 11.414A7.951 7.951 0 0120 9.071c2.137 0 4.146.832 5.657 2.343l3.207 3.207A9.955 9.955 0 0030 10.001c0-5.524-4.477-10-10-10-5.522 0-10 4.476-10 10 0 1.667.414 3.237 1.137 4.62l3.206-3.207z"})))},tyt=eyt;var RN={};de(RN,{icon:()=>ayt});var Evr=V(ne());var ryt=["title","titleId"];function Sae(){return Sae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iyt=function(t){var n=t.title,r=t.titleId,o=nyt(t,ryt);return c("svg",Sae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#FFF",d:"M16.844 31.847l-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345z"}),c("path",{fill:"#A6A385",d:"M16.844 31.847l-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345z"}),c("path",{fill:"#FFF",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),c("path",{fill:"#499D4A",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),c("path",{fill:"#FFF",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473z"}),c("path",{fill:"#58AA50",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473z"})))},ayt=iyt;var DN={};de(DN,{icon:()=>fyt});var kvr=V(ne());var syt=["title","titleId"];function Eae(){return Eae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cyt=function(t){var n=t.title,r=t.titleId,o=lyt(t,syt);return c("svg",Eae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"#00546B"},c("path",{d:"M29.456 24.276c-1.74-.043-3.088.131-4.219.61-.326.13-.848.13-.892.543.174.174.196.457.348.696.261.435.718 1.022 1.131 1.327.457.348.914.696 1.392 1 .848.522 1.805.827 2.631 1.349.48.304.957.695 1.436 1.022.24.173.391.456.696.565v-.065c-.153-.196-.196-.479-.348-.696-.218-.218-.435-.413-.653-.63a10.316 10.316 0 00-2.261-2.197c-.696-.479-2.219-1.131-2.501-1.936l-.044-.043c.479-.044 1.044-.218 1.5-.348.74-.196 1.414-.153 2.175-.348.348-.087.696-.196 1.044-.305v-.195c-.391-.392-.674-.914-1.087-1.284-1.11-.957-2.327-1.892-3.588-2.674-.675-.435-1.545-.718-2.262-1.088-.261-.13-.696-.196-.848-.413-.392-.479-.61-1.11-.892-1.675a54.922 54.922 0 01-1.783-3.784c-.392-.848-.63-1.696-1.11-2.479-2.24-3.697-4.675-5.937-8.416-8.134-.804-.456-1.761-.652-2.783-.891-.544-.022-1.088-.065-1.631-.087-.348-.152-.696-.566-1-.761-1.24-.783-4.437-2.48-5.35-.24-.588 1.414.87 2.806 1.37 3.524.37.5.848 1.065 1.109 1.63.152.37.195.762.347 1.153.348.957.675 2.023 1.131 2.914.24.457.5.936.805 1.349.174.239.478.348.544.74-.305.434-.327 1.087-.5 1.63-.783 2.458-.479 5.502.63 7.307.348.544 1.175 1.74 2.284 1.284.978-.392.76-1.632 1.043-2.719.066-.261.022-.435.153-.609v.044c.304.609.609 1.196.891 1.805.675 1.065 1.849 2.174 2.828 2.914.522.391.935 1.065 1.587 1.305v-.066h-.043c-.13-.195-.327-.282-.5-.435-.392-.39-.827-.87-1.131-1.304-.914-1.218-1.719-2.567-2.436-3.958-.348-.675-.653-1.414-.935-2.088-.13-.261-.13-.653-.348-.783-.327.478-.805.892-1.044 1.479-.413.935-.457 2.088-.61 3.284-.086.021-.043 0-.086.043-.696-.174-.935-.891-1.196-1.5-.653-1.545-.761-4.024-.196-5.807.152-.457.805-1.892.544-2.327-.13-.413-.566-.652-.805-.979a8.764 8.764 0 01-.783-1.392c-.522-1.217-.783-2.566-1.348-3.784-.261-.565-.718-1.152-1.087-1.674-.414-.587-.87-1-1.197-1.697-.108-.239-.26-.63-.087-.891.044-.174.13-.24.305-.283.283-.24 1.087.065 1.37.196.805.326 1.479.63 2.153 1.087.304.218.63.631 1.022.74h.457c.696.152 1.479.043 2.131.239 1.153.37 2.196.913 3.132 1.5a19.294 19.294 0 016.785 7.438c.261.5.37.957.609 1.479.457 1.066 1.022 2.153 1.479 3.197.456 1.022.891 2.066 1.544 2.914.326.457 1.63.696 2.218.935.435.196 1.11.37 1.5.61.74.456 1.48.978 2.175 1.478.348.26 1.436.805 1.501 1.24z"}),c("path",{d:"M7.273 5.378c-.37 0-.63.043-.891.109v.043h.043c.174.348.479.587.696.892.174.348.326.696.5 1.044l.044-.044c.304-.217.457-.565.457-1.087-.131-.152-.153-.305-.261-.457-.13-.218-.414-.326-.588-.5z"})))},fyt=cyt;var zN={};de(zN,{icon:()=>vyt});var jvr=V(ne());var pyt=["title","titleId"];function Iae(){return Iae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var myt=function(t){var n=t.title,r=t.titleId,o=dyt(t,pyt);return c("svg",Iae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#119639",d:"M16 0l13.856 8v16L16 32 2.144 24V8z"}),c("path",{fill:"#FFF",fillRule:"nonzero",d:"M11.17 13.512v8.376a1.607 1.607 0 11-3.215 0V9.632c0-1.432 1.731-2.149 2.744-1.136l9.51 9.512V9.632a1.607 1.607 0 013.215 0v12.256c0 1.432-1.731 2.149-2.744 1.136l-9.51-9.512z"})))},vyt=myt;var NN={};de(NN,{icon:()=>Oyt});var Tvr=V(ne());var gyt=["title","titleId"];function kae(){return kae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function byt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wyt=function(t){var n=t.title,r=t.titleId,o=yyt(t,gyt);return c("svg",kae({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10 32H7.238C3.793 32 1 28.865 1 24.998V15h9v17z",fill:"#F04E98"}),c("path",{className:"euiIcon__fillNegative",d:"M10 32h9V8h-9z"}),c("path",{d:"M31 32h-9V0l1.973.024C27.866.072 31 3.731 31 8.228V32z",fill:"#07C"}))},Oyt=wyt;var LN={};de(LN,{icon:()=>Iyt});var Mvr=V(ne());var xyt=["title","titleId"];function Pae(){return Pae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Syt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Eyt=function(t){var n=t.title,r=t.titleId,o=_yt(t,xyt);return c("svg",Pae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#A596FF",d:"M31.907.032v7.969l-7.952 7.951V7.967L31.907.032"}),c("path",{fill:"#333",d:"M16.003.032v7.969l7.952 7.951V7.967L16.003.032"}),c("path",{fill:"#A596FF",d:"M31.923 31.855h-7.968l-7.952-7.951h7.985l7.935 7.951"}),c("path",{fill:"#333",d:"M31.923 15.952h-7.968l-7.952 7.952h7.985l7.935-7.952"}),c("path",{fill:"#A596FF",d:"M.1 31.872v-7.968l7.952-7.952v7.985L.1 31.872"}),c("path",{fill:"#333",d:"M16.004 31.872v-7.968l-7.952-7.952v7.985l7.952 7.935"}),c("path",{fill:"#A596FF",d:"M.084.048h7.968L16.004 8H8.019L.084.048"}),c("path",{fill:"#333",d:"M.084 15.952h7.968L16.004 8H8.019L.084 15.952"})))},Iyt=Eyt;var FN={};de(FN,{icon:()=>Tyt});var Dvr=V(ne());var kyt=["title","titleId"];function jae(){return jae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cyt=function(t){var n=t.title,r=t.titleId,o=Pyt(t,kyt),i=yo("logo_php");return c("svg",jae({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("defs",null,c("path",{id:i("a"),d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}),c("path",{id:i("d"),d:"M0 17.43h30.987V0H0z"}),c("path",{id:i("f"),d:"M0 17.43h30.987V0H0z"}),c("radialGradient",{id:i("b"),cx:"30.02%",cy:"82.422%",r:"124.814%",fx:"30.02%",fy:"82.422%",gradientTransform:"matrix(.52604 0 0 1 .142 0)"},c("stop",{offset:"0%",stopColor:"#AEB2D5"}),c("stop",{offset:"30%",stopColor:"#AEB2D5"}),c("stop",{offset:"75%",stopColor:"#484C89"}),c("stop",{offset:"100%",stopColor:"#484C89"}))),c("g",{fill:"none",fillRule:"evenodd",transform:"matrix(1 0 0 -1 .026 25.413)"},c("g",{transform:"translate(.592 .86)"},c("mask",{id:i("c"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("a"))})),c("g",{fill:"url(#".concat(i("b"),")"),fillRule:"nonzero",mask:"url(#".concat(i("c"),")")},c("path",{d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}))),c("mask",{id:i("e"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("d"))})),c("g",{mask:"url(#".concat(i("e"),")")},c("path",{fill:"#777BB3",fillRule:"nonzero",d:"M15.494 1.472c7.894 0 14.293 3.243 14.293 7.243s-6.4 7.244-14.293 7.244c-7.894 0-14.293-3.243-14.293-7.244 0-4 6.4-7.243 14.293-7.243"})),c("mask",{id:i("g"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("f"))})),c("g",{fillRule:"nonzero",mask:"url(#".concat(i("g"),")")},c("path",{fill:"#000",d:"M8.701 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306H8.433l-.575-2.959h.843zM5.31 4.172a.161.161 0 00-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.686 3.686 0 00-.395-1.098 3.676 3.676 0 00-.727-.91 3.189 3.189 0 00-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 00-.158-.13H5.309z"}),c("path",{fill:"#FFF",d:"M8.566 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.291-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636zm1.551 1.883H6.833a.323.323 0 01-.317-.261L4.992 4.396a.323.323 0 01.317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888zM7.663 7.656h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36H8.3l-.638-3.282zm2.454 4.52c.989 0 1.71-.26 2.162-.779.453-.518.59-1.242.41-2.172a3.51 3.51 0 00-.378-1.05 3.502 3.502 0 00-.695-.87 3.017 3.017 0 00-1.137-.683c-.417-.135-.948-.203-1.594-.203H7.422l-.405-2.085H5.309l1.524 7.841h3.284z"}),c("path",{fill:"#000",d:"M16.763 6.257a.161.161 0 00-.159.192l.674 3.47c.064.33.049.566-.044.666-.057.061-.228.164-.732.164H15.28l-.847-4.361a.161.161 0 00-.159-.131H12.58a.161.161 0 00-.159.192l1.524 7.841c.015.076.082.13.159.13h1.694a.161.161 0 00.159-.191l-.368-1.893h1.314c1 0 1.68-.176 2.075-.54.403-.37.529-.962.374-1.76l-.71-3.648a.161.161 0 00-.158-.131h-1.721z"}),c("path",{fill:"#FFF",d:"M15.799 14.582h-1.695a.323.323 0 01-.317-.261L12.263 6.48a.323.323 0 01.317-.385h1.695c.154 0 .287.11.317.262l.822 4.23h1.088c.504 0 .61-.107.614-.112.03-.033.07-.185.004-.526l-.674-3.47a.323.323 0 01.317-.384h1.721c.155 0 .288.11.317.262l.71 3.648c.166.857.023 1.5-.424 1.91-.426.392-1.14.582-2.184.582h-1.118l.33 1.7a.323.323 0 01-.316.385m0-.323l-.406-2.084h1.51c.95 0 1.605-.166 1.966-.497.36-.332.468-.869.324-1.611l-.709-3.649h-1.721l.674 3.47c.077.394.048.663-.085.807-.133.143-.416.215-.85.215h-1.354l-.873-4.492H12.58l1.524 7.841h1.695"}),c("path",{fill:"#000",d:"M22.033 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306h-1.038l-.575-2.959h.843zm-3.392-3.645a.161.161 0 00-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.689 3.689 0 00-.395-1.098 3.676 3.676 0 00-.727-.91 3.189 3.189 0 00-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 00-.158-.13H18.64z"}),c("path",{fill:"#FFF",d:"M21.898 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.292-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636zm1.551 1.883h-3.284a.323.323 0 01-.317-.261l-1.524-7.841a.323.323 0 01.317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888zm-2.454-4.842h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36h-1.17l-.638-3.282zm2.454 4.52c.989 0 1.71-.26 2.162-.779.454-.518.59-1.242.41-2.172a3.51 3.51 0 00-.378-1.05 3.502 3.502 0 00-.695-.87 3.017 3.017 0 00-1.137-.683c-.417-.135-.948-.203-1.594-.203h-1.463l-.405-2.085h-1.708l1.524 7.841h3.284z"}))))},Tyt=Cyt;var BN={};de(BN,{icon:()=>zyt});var Lvr=V(ne());var Ayt=["title","titleId"];function Cae(){return Cae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ryt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dyt=function(t){var n=t.title,r=t.titleId,o=Myt(t,Ayt);return c("svg",Cae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#000",d:"M31.876 19.162c-.192-.564-.695-.956-1.345-1.05-.306-.045-.657-.026-1.072.057-.724.145-1.261.2-1.654.211 1.48-2.422 2.683-5.185 3.376-7.785 1.12-4.205.521-6.12-.178-6.987-1.85-2.293-4.551-3.525-7.809-3.563a14.239 14.239 0 00-4.06.551 15.573 15.573 0 00-2.373-.21c-1.567-.024-2.952.307-4.135.988a19.334 19.334 0 00-2.92-.711C6.85.208 4.549.563 2.866 1.716.828 3.112-.117 5.537.058 8.926.113 10 .734 13.273 1.71 16.376c.561 1.784 1.16 3.266 1.78 4.404.878 1.614 1.818 2.564 2.873 2.906.591.19 1.666.325 2.796-.588.143.168.334.335.588.49.322.198.716.359 1.109.454 1.418.344 2.745.258 3.878-.224.007.195.013.382.017.543.008.262.015.518.025.758.067 1.62.181 2.881.518 3.763l.07.201c.168.5.449 1.335 1.164 1.99.74.677 1.637.885 2.457.885.412 0 .804-.052 1.149-.124 1.227-.255 2.621-.643 3.63-2.036.953-1.316 1.417-3.299 1.5-6.423l.031-.253.02-.165.225.019.058.004c1.25.055 2.779-.202 3.718-.625.741-.334 3.119-1.55 2.559-3.194"}),c("path",{fill:"#336791",d:"M29.738 19.481c-3.717.744-3.973-.476-3.973-.476 3.925-5.648 5.566-12.817 4.15-14.571C26.052-.352 19.365 1.91 19.254 1.97l-.036.006a13.657 13.657 0 00-2.48-.25c-1.682-.027-2.958.427-3.927 1.14 0 0-11.928-4.766-11.374 5.992.118 2.289 3.383 17.318 7.278 12.779a70.443 70.443 0 012.798-3.064c.683.44 1.501.665 2.358.584l.067-.055c-.02.206-.011.408.027.647-1.004 1.087-.709 1.277-2.714 1.678-2.03.405-.837 1.127-.06 1.316.944.229 3.127.553 4.602-1.45l-.058.23c.393.304.669 1.985.623 3.508-.047 1.524-.078 2.57.232 3.387.31.817.619 2.655 3.255 2.107 2.203-.458 3.345-1.644 3.503-3.623.113-1.407.368-1.199.384-2.457l.205-.595c.236-1.907.037-2.522 1.394-2.236l.33.028c1 .044 2.307-.156 3.074-.502 1.652-.743 2.632-1.985 1.003-1.659"}),c("path",{fill:"#FFF",d:"M13.51 9.882c-.335-.045-.639-.004-.792.11a.28.28 0 00-.12.187c-.02.133.077.282.136.358.169.216.414.365.658.398.035.004.07.007.105.007.405 0 .774-.307.807-.533.04-.283-.383-.472-.795-.527m11.099.009c-.032-.222-.44-.285-.826-.233-.386.052-.76.22-.73.443.026.173.348.468.73.468a.718.718 0 00.097-.006.947.947 0 00.53-.281c.135-.138.213-.291.199-.391"}),c("path",{fill:"#FFF",d:"M30.975 19.397c-.142-.416-.598-.55-1.356-.398-2.25.45-3.056.139-3.321-.05 1.75-2.584 3.189-5.708 3.965-8.623.368-1.38.57-2.663.587-3.708.019-1.147-.183-1.99-.598-2.505-1.675-2.075-4.134-3.189-7.11-3.22-2.047-.022-3.775.486-4.11.629a10.549 10.549 0 00-2.313-.288c-1.536-.024-2.864.332-3.963 1.06a18.131 18.131 0 00-3.22-.82c-2.61-.407-4.683-.098-6.163.918C1.608 3.605.793 5.773.951 8.836c.053 1.03.658 4.2 1.614 7.236 1.258 3.996 2.625 6.257 4.063 6.723.169.054.363.092.577.092.525 0 1.168-.23 1.838-1.01a64.894 64.894 0 012.532-2.778 4.18 4.18 0 001.822.475l.005.048c-.11.127-.217.255-.321.385-.44.542-.532.655-1.95.938-.403.08-1.473.294-1.489 1.022-.017.795 1.266 1.13 1.412 1.165.509.123 1 .184 1.467.184 1.138 0 2.14-.363 2.94-1.064-.025 2.834.097 5.628.448 6.479.288.696.99 2.4 3.208 2.399a5.3 5.3 0 001.078-.119c2.315-.48 3.32-1.473 3.71-3.66.208-1.17.565-3.961.733-5.459.354.107.81.156 1.304.156 1.029 0 2.216-.212 2.961-.547.837-.377 2.346-1.3 2.072-2.104zM25.462 9.278c-.008.442-.07.844-.137 1.262-.072.451-.145.917-.164 1.482-.019.55.052 1.123.12 1.676.14 1.118.282 2.268-.269 3.403a4.37 4.37 0 01-.243-.485c-.069-.161-.217-.42-.423-.777-.8-1.39-2.673-4.648-1.714-5.977.286-.396 1.01-.803 2.83-.584zm-2.206-7.49c2.667.058 4.777 1.025 6.27 2.876 1.146 1.42-.116 7.879-3.767 13.45l-.111-.135-.046-.056c.943-1.51.759-3.006.595-4.331-.068-.544-.132-1.058-.115-1.541.016-.511.086-.95.154-1.375.082-.522.167-1.063.144-1.701a.684.684 0 00.015-.24c-.06-.611-.78-2.441-2.247-4.098a10.094 10.094 0 00-3.572-2.604 12.407 12.407 0 012.68-.244zM8.334 21.307c-.737.86-1.246.695-1.414.641-1.091-.353-2.357-2.59-3.474-6.136-.966-3.069-1.53-6.155-1.575-7.02-.141-2.737.543-4.644 2.033-5.669 2.426-1.668 6.414-.67 8.016-.163-.023.022-.047.042-.07.065-2.63 2.575-2.567 6.974-2.56 7.243 0 .104.008.251.02.453.046.74.13 2.117-.095 3.677-.209 1.45.252 2.868 1.264 3.892.104.105.213.205.327.3-.45.467-1.43 1.502-2.472 2.717zm2.81-3.635c-.816-.826-1.186-1.974-1.017-3.15.238-1.648.15-3.083.103-3.854l-.016-.277c.384-.33 2.165-1.255 3.434-.973.58.129.932.511 1.08 1.17.759 3.406.1 4.825-.43 5.966-.109.235-.212.458-.3.687l-.068.178c-.173.45-.334.867-.434 1.264a3.325 3.325 0 01-2.352-1.011zm.133 4.594a2.07 2.07 0 01-.614-.256c.111-.051.31-.12.654-.19 1.668-.332 1.925-.567 2.487-1.26.13-.158.275-.338.478-.557.301-.328.44-.272.69-.172.202.082.4.328.48.599.037.128.08.37-.06.56-1.174 1.595-2.886 1.574-4.115 1.276zm8.725 7.873c-2.04.424-2.761-.586-3.237-1.74-.308-.744-.459-4.102-.351-7.81a.434.434 0 00-.02-.143 1.823 1.823 0 00-.057-.262c-.16-.54-.548-.99-1.013-1.178-.185-.074-.525-.21-.933-.11.087-.347.238-.74.402-1.165l.068-.178c.078-.202.175-.41.277-.632.554-1.194 1.313-2.829.49-6.522-.309-1.384-1.34-2.06-2.901-1.903-.936.094-1.793.46-2.22.67a7.255 7.255 0 00-.255.132c.12-1.394.57-4 2.255-5.647 1.062-1.038 2.475-1.55 4.196-1.523 3.393.054 5.569 1.742 6.796 3.15 1.058 1.211 1.631 2.433 1.86 3.091-1.72-.17-2.889.16-3.482.982-1.29 1.787.706 5.257 1.665 6.924.175.306.327.57.375.682.312.734.716 1.224 1.012 1.582.09.11.178.215.245.308-.521.146-1.456.482-1.371 2.164-.069.843-.558 4.793-.806 6.189-.328 1.843-1.028 2.53-2.995 2.939zm8.513-9.447c-.532.24-1.424.42-2.27.458-.935.043-1.411-.101-1.523-.19-.053-1.048.35-1.157.775-1.273a3.35 3.35 0 00.195-.058c.04.031.082.062.13.092.75.481 2.091.533 3.984.154l.02-.004c-.255.232-.692.542-1.31.821z"})))},zyt=Dyt;var WN={};de(WN,{icon:()=>Wyt});var Bvr=V(ne());var Nyt=["title","titleId"];function Tae(){return Tae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Byt=function(t){var n=t.title,r=t.titleId,o=Lyt(t,Nyt);return c("svg",Tae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#E6522C",d:"M15.907.187C7.122.187 0 7.308 0 16.093S7.122 32 15.907 32c8.784 0 15.906-7.121 15.906-15.906S24.69.187 15.907.187zm0 29.77c-2.5 0-4.526-1.67-4.526-3.729h9.051c0 2.06-2.026 3.73-4.525 3.73zm7.475-4.963H8.43v-2.711h14.95v2.71zm-.054-4.107H8.473c-.05-.057-.1-.113-.147-.17-1.53-1.859-1.891-2.829-2.241-3.818-.006-.032 1.855.38 3.176.678 0 0 .679.157 1.672.338-.953-1.118-1.52-2.539-1.52-3.991 0-3.189 2.446-5.975 1.564-8.227.858.07 1.777 1.812 1.839 4.537.913-1.262 1.295-3.566 1.295-4.978 0-1.463.963-3.161 1.927-3.22-.86 1.417.223 2.63 1.184 5.642.361 1.132.315 3.035.594 4.243.092-2.508.523-6.167 2.114-7.43-.702 1.591.104 3.581.655 4.538.889 1.544 1.428 2.714 1.428 4.926 0 1.483-.548 2.88-1.472 3.971 1.05-.197 1.776-.374 1.776-.374l3.411-.666s-.495 2.038-2.4 4.001z"}))},Wyt=Byt;var HN={};de(HN,{icon:()=>Uyt});var Hvr=V(ne());var Hyt=["title","titleId"];function Aae(){return Aae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qyt=function(t){var n=t.title,r=t.titleId,o=$yt(t,Hyt);return c("svg",Aae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#F60",d:"M30.083 13.197h-9.878c-.79-.088-1.391-.74-1.391-1.508V1.97c0-.83-.718-1.495-1.595-1.495h-3.456c-.885 0-1.595.672-1.595 1.495v9.82c-.043.74-.696 1.338-1.478 1.406H8.102c-.76-.088-1.348-.686-1.398-1.406V1.97c0-.83-.718-1.495-1.595-1.495H1.652C.768.476.058 1.148.058 1.97v28.358c0 .83.717 1.495 1.594 1.495h28.439c.884 0 1.594-.673 1.594-1.495V14.692c-.007-.829-.718-1.495-1.602-1.495zm-4.55 10.724c0 .829-.718 1.495-1.595 1.495H20.48c-.884 0-1.595-.673-1.595-1.495v-3.058c0-.83.718-1.495 1.595-1.495h3.457c.884 0 1.594.672 1.594 1.495v3.058z"}))},Uyt=qyt;var $N={};de($N,{icon:()=>Yyt});var Vvr=V(ne());var Gyt=["title","titleId"];function Mae(){return Mae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kyt=function(t){var n=t.title,r=t.titleId,o=Jyt(t,Gyt);return c("svg",Mae({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{transform:"translate(0 3)",fill:"none"},c("path",{d:"M30.594 20.791c-1.689.875-10.438 4.451-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.437-12.46-5.234-.838-.399-1.278-.735-1.278-1.052v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.118 1.666.607 11.623 2.393 13.27 2.992l-.001 3.135c0 .314-.38.659-1.24 1.104z",fill:"#A41E11"}),c("path",{d:"M30.594 17.61c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.956-4.37.256-1.471-.698-10.782-4.438-12.46-5.234-1.676-.797-1.712-1.345-.064-1.987 1.647-.641 10.907-4.252 12.864-4.95 1.957-.698 2.636-.723 4.301-.117 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z",fill:"#D82C20"}),c("path",{d:"M30.594 15.606c-1.689.875-10.438 4.45-12.3 5.416-1.863.965-2.898.956-4.37.257-1.471-.7-10.782-4.438-12.46-5.235-.838-.398-1.278-.734-1.278-1.051v-3.18S12.307 9.19 14.264 8.492c1.957-.698 2.636-.723 4.301-.117 1.666.606 11.623 2.392 13.27 2.991l-.001 3.135c0 .315-.38.66-1.24 1.105z",fill:"#A41E11"}),c("path",{d:"M30.594 12.425c-1.689.875-10.438 4.45-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.438-12.46-5.235-1.676-.796-1.712-1.345-.064-1.986 1.647-.641 10.907-4.253 12.864-4.95 1.957-.698 2.636-.724 4.301-.117 1.666.606 10.363 4.047 12.009 4.646 1.646.6 1.71 1.094.02 1.969z",fill:"#D82C20"}),c("path",{d:"M30.594 10.228c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.438-12.46-5.234C.627 10.268.187 9.932.187 9.615v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.117 1.666.606 11.623 2.391 13.27 2.99l-.001 3.136c0 .314-.38.659-1.24 1.104z",fill:"#A41E11"}),c("path",{d:"M30.594 7.047c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.437-12.46-5.234C-.211 6.689-.247 6.14 1.4 5.499S12.307 1.247 14.264.55c1.957-.7 2.636-.724 4.301-.118 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z",fill:"#D82C20"}),c("path",{fill:"#FFF",d:"M20.157 3.985l-2.742.283-.614 1.468-.992-1.638-3.166-.283 2.362-.847-.708-1.3 2.212.86 2.085-.68-.563 1.345zm-3.52 7.123l-5.118-2.11 7.334-1.119z"}),c("ellipse",{fill:"#FFF",cx:9.541,cy:6.311,rx:3.92,ry:1.51}),c("path",{fill:"#7A0C00",d:"M23.398 4.386l4.34 1.705-4.336 1.703z"}),c("path",{fill:"#AD2115",d:"M18.596 6.274l4.802-1.888.004 3.408-.471.183z"})))},Yyt=Kyt;var VN={};de(VN,{icon:()=>rbt});var Uvr=V(ne());var Qyt=["title","titleId"];function Rae(){return Rae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ebt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tbt=function(t){var n=t.title,r=t.titleId,o=Zyt(t,Qyt);return c("svg",Rae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 7.008V0h20v16.744c0 3.913-6.378 6.477-9.015 7.256V7.008H9z",fill:"#FA744E"}),c("path",{d:"M3 20.073V10h14v22C7.667 27.98 3 24.004 3 20.073z",fill:"#1DBAB0"}),c("path",{d:"M9 10h8v14c-2.983-1.14-8-3.756-8-7.043V10z",className:"euiIcon__fillNegative"}))},rbt=tbt;var qN={};de(qN,{icon:()=>sbt});var Jvr=V(ne());var nbt=["title","titleId"];function Dae(){return Dae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ibt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var abt=function(t){var n=t.title,r=t.titleId,o=obt(t,nbt);return c("svg",Dae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#FA744E",d:"M27.05 10h-7.34l-11 22s15.696-4.96 21.855-16.076C32.037 13.266 30.088 10 27.05 10"}),c("path",{fill:"#00BFB3",d:"M21.355 0H7.533L.427 14.211C-.903 16.871 1.032 20 4.004 20h7.351l10-20z"}),c("path",{className:"euiIcon__fillNegative",d:"M2.533 10L.428 14.211C-.903 16.871 1.032 20 4.005 20h7.35l5-10H2.533z"})))},sbt=abt;var UN={};de(UN,{icon:()=>pbt});var Kvr=V(ne());var lbt=["title","titleId"];function zae(){return zae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fbt=function(t){var n=t.title,r=t.titleId,o=ubt(t,lbt);return c("svg",zae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#FFAE00",d:"M16 32L0 11.454l6.931-10.38L16 0l9.069 1.074L32 11.454z"}),c("path",{fill:"#EC6C00",d:"M16 32L0 11.454h32z"}),c("path",{fill:"#FFAE00",d:"M16 32L6.477 11.454h19.045z"}),c("path",{fill:"#FFEFB4",d:"M16 0L6.477 11.454h19.045z"}),c("path",{fill:"#FFAE00",d:"M6.932 1.074L3.369 6.3.001 11.454h6.542zM25.069 1.074L28.632 6.3 32 11.454h-6.542z"}),c("path",{fill:"#FED305",d:"M6.931 1.074l-.453 10.38L16 0zM25.069 1.074l.453 10.38L16 0z"})))},pbt=fbt;var GN={};de(GN,{icon:()=>gbt});var Qvr=V(ne());var dbt=["title","titleId"];function Nae(){return Nae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vbt=function(t){var n=t.title,r=t.titleId,o=hbt(t,dbt);return c("svg",Nae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#E01E5A",d:"M6.813 20.18a3.337 3.337 0 01-3.33 3.33 3.337 3.337 0 01-3.328-3.33 3.337 3.337 0 013.329-3.329h3.329v3.33zm1.677 0a3.337 3.337 0 013.33-3.329 3.337 3.337 0 013.328 3.33v8.335a3.337 3.337 0 01-3.329 3.329 3.337 3.337 0 01-3.329-3.33V20.18z"}),c("path",{fill:"#36C5F0",d:"M11.82 6.813a3.337 3.337 0 01-3.33-3.33A3.337 3.337 0 0111.82.156a3.337 3.337 0 013.328 3.329v3.329H11.82zm0 1.677a3.337 3.337 0 013.328 3.33 3.337 3.337 0 01-3.329 3.328H3.484a3.337 3.337 0 01-3.33-3.329 3.337 3.337 0 013.33-3.329h8.335z"}),c("path",{fill:"#2EB67D",d:"M25.187 11.82a3.337 3.337 0 013.329-3.33 3.337 3.337 0 013.329 3.33 3.337 3.337 0 01-3.33 3.328h-3.328V11.82zm-1.678 0a3.337 3.337 0 01-3.329 3.328 3.337 3.337 0 01-3.329-3.329V3.484a3.337 3.337 0 013.33-3.33 3.337 3.337 0 013.328 3.33v8.335z"}),c("path",{fill:"#ECB22E",d:"M20.18 25.187a3.337 3.337 0 013.33 3.329 3.337 3.337 0 01-3.33 3.329 3.337 3.337 0 01-3.329-3.33v-3.328h3.33zm0-1.678a3.337 3.337 0 01-3.329-3.329 3.337 3.337 0 013.33-3.329h8.335a3.337 3.337 0 013.329 3.33 3.337 3.337 0 01-3.33 3.328H20.18z"})))},gbt=vbt;var JN={};de(JN,{icon:()=>xbt});var egr=V(ne());var ybt=["title","titleId"];function Lae(){return Lae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Obt=function(t){var n=t.title,r=t.titleId,o=bbt(t,ybt);return c("svg",Lae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#3EBEB0",d:"M19 15c0 7.062-4.888 12.969-11.46 14.563A15.914 15.914 0 0016 32c8.836 0 16-7.163 16-16v-3l-6.5-6-6.5 6v2z"}),c("path",{fill:"#07C",d:"M6.833 26.646a11.954 11.954 0 008.544-7.834A12.43 12.43 0 0113 11.5V.292C5.6 1.696 0 8.19 0 16.002c0 4.358 1.75 8.306 4.577 11.192l2.256-.547z"}),c("path",{className:"euiIcon__fillNegative",d:"M30.362 23.02c-1.494.63-3.137.98-4.861.98a12.443 12.443 0 01-7.852-2.78 15.042 15.042 0 01-10.11 8.343A15.91 15.91 0 0016.002 32c6.314 0 11.758-3.669 14.36-8.98"}))},xbt=Obt;var XN={};de(XN,{icon:()=>kbt});var rgr=V(ne());var _bt=["title","titleId"];function Fae(){return Fae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ebt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ibt=function(t){var n=t.title,r=t.titleId,o=Sbt(t,_bt);return c("svg",Fae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#C73A63",d:"M14.943 13.563c-1.327 2.23-2.597 4.388-3.894 6.531-.334.55-.498.998-.232 1.698.734 1.931-.302 3.811-2.25 4.321-1.837.482-3.627-.726-3.992-2.692-.323-1.741 1.028-3.448 2.948-3.72.16-.023.325-.026.595-.046l2.92-4.896C9.2 12.933 8.108 10.8 8.35 8.154c.171-1.87.907-3.486 2.25-4.81a7.639 7.639 0 019.531-1c2.91 1.87 4.244 5.512 3.107 8.629l-2.668-.724c.357-1.733.093-3.29-1.076-4.623-.772-.88-1.763-1.341-2.89-1.511-2.258-.341-4.476 1.11-5.134 3.327-.748 2.516.383 4.572 3.473 6.121z"}),c("path",{fill:"#4B4B4B",d:"M18.73 10.926l2.823 4.98c4.753-1.47 8.336 1.16 9.622 3.977 1.552 3.402.491 7.432-2.558 9.531-3.13 2.155-7.089 1.787-9.862-.981l2.176-1.821c2.739 1.774 5.135 1.69 6.913-.41a4.766 4.766 0 00-.077-6.219c-1.8-2.025-4.213-2.086-7.13-.143-1.209-2.146-2.44-4.275-3.61-6.436-.396-.729-.832-1.152-1.722-1.306-1.487-.257-2.446-1.534-2.504-2.964a3.258 3.258 0 012.08-3.192 3.243 3.243 0 013.671 1.002c.71.896.935 1.905.562 3.01-.104.309-.238.607-.384.972z"}),c("path",{fill:"#4A4A4A",d:"M20.963 24.401h-5.72c-.55 2.256-1.734 4.077-3.775 5.235-1.586.9-3.296 1.205-5.116.911C3 30.007.26 26.99.019 23.593c-.273-3.848 2.372-7.268 5.898-8.036l.732 2.658c-3.234 1.65-4.353 3.73-3.448 6.33.797 2.287 3.06 3.541 5.518 3.056 2.51-.495 3.776-2.581 3.621-5.929 2.38 0 4.761-.024 7.14.012.93.015 1.648-.081 2.348-.9 1.152-1.349 3.273-1.227 4.515.046 1.268 1.301 1.207 3.395-.135 4.641a3.236 3.236 0 01-4.553-.157c-.249-.267-.445-.585-.692-.913z"})))},kbt=Ibt;var KN={};de(KN,{icon:()=>Abt});var ogr=V(ne());var Pbt=["title","titleId"];function Bae(){return Bae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tbt=function(t){var n=t.title,r=t.titleId,o=jbt(t,Pbt);return c("svg",Bae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#00ADEF",d:"M0 4.51l12.977-1.768.006 12.518-12.971.074L0 4.51zm12.97 12.192l.011 12.529-12.97-1.784-.002-10.829 12.962.084zm1.574-14.19L31.751 0v15.1l-17.207.137V2.511zm17.21 14.308l-.003 15.033-17.207-2.429-.024-12.632 17.235.028z"}))},Abt=Tbt;var YN={};de(YN,{icon:()=>Nbt});var agr=V(ne());var Mbt=["title","titleId"];function Wae(){return Wae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zbt=function(t){var n=t.title,r=t.titleId,o=Rbt(t,Mbt);return c("svg",Wae({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M17.557 5.05c.17-.202.457-.512.86-.93C19.483 3.017 21.828 1 23.801 1H30v30h-6.2c-1.972 0-3.995-1.449-5.383-3.106l-.764-1.052 2.75-3.477c3.462-4.376 3.463-10.332.001-14.707L17.557 5.05z",fill:"#FEC514"}),c("path",{d:"M2 31V1h5.81c1.71 0 3.35.786 4.387 2.1l5.855 7.42c2.598 3.283 2.598 7.698-.002 10.983l-5.855 7.403C11.158 30.217 9.52 31 7.815 31H2z",fill:"#F04E98"}),c("path",{d:"M15.384 24.89L12.15 21.7c-2.868-3.318-2.868-8.22.002-11.322 1.535-1.639 2.611-2.718 3.23-3.238l2.67 3.238c2.637 3.385 2.575 7.987-.062 11.374l-2.607 3.137z",className:"euiIcon__fillNegative"}))},Nbt=zbt;var QN={};de(QN,{icon:()=>Hbt});var lgr=V(ne());var Lbt=["title","titleId"];function Hae(){return Hae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wbt=function(t){var n=t.title,r=t.titleId,o=Fbt(t,Lbt);return c("svg",Hae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.914 1c-3.6 0-5.897 1.111-5.897 1.876 0 .766 2.297 1.877 5.897 1.877s5.897-1.111 5.897-1.877C13.811 2.111 11.514 1 7.914 1m3.98 7.988c-1.187.331-2.601.502-3.98.502-1.383 0-2.801-.172-3.991-.505l2.863 3.242v2.515c.136.08.515.214 1.128.214.61 0 .989-.133 1.126-.213v-2.515l2.854-3.24zm2.394-1.206l-4.248 4.823v2.246h.004c0 .763-1.069 1.105-2.13 1.105-1.06 0-2.13-.342-2.13-1.105h.002v-2.245L1.321 7.55l.01-.008A1.53 1.53 0 011 6.607V2.78h.02C1.14.973 4.627 0 7.913 0c3.286 0 6.774.973 6.894 2.78h.02v3.827c0 .343-.12.657-.335.941l-.003.004c-.06.079-.128.155-.202.23zm-.578-.856a.56.56 0 00.118-.319V4.411c-1.288.879-3.649 1.342-5.914 1.342C5.65 5.753 3.288 5.29 2 4.411v2.196C2 7.375 4.304 8.49 7.914 8.49c2.879 0 4.927-.709 5.639-1.385l.157-.18z"}))},Hbt=Wbt;var ZN={};de(ZN,{icon:()=>Gbt});var cgr=V(ne());var $bt=["title","titleId"];function $ae(){return $ae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ubt=function(t){var n=t.title,r=t.titleId,o=Vbt(t,$bt);return c("svg",$ae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.918 9.799l-4.82 4.819 2.88-.43.148.987L0 15.943l.768-5.126.988.148-.453 3.033 4.936-4.935a2.003 2.003 0 011.265-2.885V0h1v6.178a2.003 2.003 0 011.263 2.884l4.865 4.866-.443-2.963.988-.147.768 5.126-5.127-.769.15-.988 2.95.441-4.83-4.83c-.312.203-.685.32-1.085.32-.4 0-.773-.117-1.085-.32z"}))},Gbt=Ubt;var eL={};de(eL,{icon:()=>Qbt});var pgr=V(ne());var Jbt=["title","titleId"];function Vae(){return Vae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ybt=function(t){var n=t.title,r=t.titleId,o=Xbt(t,Jbt);return c("svg",Vae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.747 10.992h13.1a.123.123 0 00.122-.123V8.51a.122.122 0 00-.122-.122H1.122A.122.122 0 001 8.51v2.36c0 .066.055.122.122.122h.625zm12.011 1H2.21V16h-1v-4.008h-.088A1.124 1.124 0 010 10.87V8.51c0-.62.503-1.122 1.122-1.122h13.725c.62 0 1.122.502 1.122 1.122v2.36c0 .618-.503 1.122-1.122 1.122h-.089V16h-1v-4.008zm-6.27-7.487V0h1v4.529l2.407-2.262.685.73L8 6.356 4.42 2.995l.685-.729 2.383 2.24z"}))},Qbt=Ybt;var tL={};de(tL,{icon:()=>n2t});var hgr=V(ne());var Zbt=["title","titleId"];function qae(){return qae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r2t=function(t){var n=t.title,r=t.titleId,o=e2t(t,Zbt);return c("svg",qae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2.21 4.008H13.76V0h1v4.008h.088c.619 0 1.122.504 1.122 1.123V7.49c0 .62-.503 1.122-1.122 1.122H1.122A1.122 1.122 0 010 7.49V5.13c0-.618.503-1.122 1.122-1.122h.089V0h1v4.008zm11.549 1H1.12A.123.123 0 001 5.13V7.49c0 .068.055.122.122.122h13.725a.122.122 0 00.122-.122V5.13a.123.123 0 00-.122-.122h-1.088zm-5.301 9.097l2.405-2.26.686.728-3.58 3.363-3.58-3.363.686-.728 2.383 2.24V9.577h1v4.528z"}))},n2t=r2t;var rL={};de(rL,{icon:()=>l2t});var vgr=V(ne());var o2t=["title","titleId"];function Uae(){return Uae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var s2t=function(t){var n=t.title,r=t.titleId,o=i2t(t,o2t);return c("svg",Uae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.339 15.464H4.77a3.248 3.248 0 01-3.245-3.244V4.549H0v-1h2.526v8.67a2.247 2.247 0 002.245 2.245h6.568a2.247 2.247 0 002.244-2.244V3.549h2.455v1h-1.455v7.67a3.247 3.247 0 01-3.244 3.245zm.513-5.962v1.095l-3.848 1.72-3.85-1.72V9.502l3.85 1.72 3.848-1.72zm0-4.251v1.095l-3.848 1.72-3.85-1.72V5.25l3.85 1.72 3.848-1.72zm0-4.251v1.095l-3.848 1.72-3.85-1.72V1l3.85 1.72L11.852 1z"}))},l2t=s2t;var nL={};de(nL,{icon:()=>d2t});var ygr=V(ne());var u2t=["title","titleId"];function Gae(){return Gae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function f2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var p2t=function(t){var n=t.title,r=t.titleId,o=c2t(t,u2t);return c("svg",Gae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.552 10.71a3.008 3.008 0 004.19.738l1.642-1.15 1.15 1.642-1.643 1.15a5.013 5.013 0 11-5.75-8.212l1.642-1.15 1.15 1.643-1.642 1.15a3.007 3.007 0 00-.739 4.189zm8.296-2.137l1.15 1.643-1.643 1.149-1.15-1.642 1.643-1.15zm-4.6-6.571l1.15 1.643-1.643 1.15-1.15-1.642 1.642-1.151zm1.97 1.068L9.07 1.428a1.003 1.003 0 00-1.397-.246L3.566 4.057A5.995 5.995 0 001.092 7.94a5.993 5.993 0 00.996 4.495 5.99 5.99 0 003.883 2.473 5.991 5.991 0 004.495-.996l4.107-2.875c.454-.318.563-.943.246-1.396l-1.15-1.643a1.002 1.002 0 00-1.396-.246l-4.107 2.875a2.002 2.002 0 01-1.498.332 2 2 0 01-1.627-2.323c.09-.505.371-.976.824-1.294l4.107-2.876c.454-.317.564-.942.246-1.396z"}))},d2t=p2t;var oL={};de(oL,{icon:()=>y2t});var wgr=V(ne());var h2t=["title","titleId"];function Jae(){return Jae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function v2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var g2t=function(t){var n=t.title,r=t.titleId,o=m2t(t,h2t);return c("svg",Jae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M15.143 15.85l-3.872-3.872a.5.5 0 01-.034-.738 6.01 6.01 0 000-8.486 6.004 6.004 0 00-8.484 0 6.01 6.01 0 000 8.486 5.96 5.96 0 004.242 1.757.5.5 0 010 1 6.955 6.955 0 01-4.949-2.05c-2.728-2.73-2.728-7.171 0-9.9 2.728-2.73 7.168-2.73 9.898 0 2.609 2.61 2.723 6.785.342 9.532l3.565 3.564a.502.502 0 01-.708.708zM6.254 3l.277 5.063h.935L7.754 3h-1.5zm.222 7.548a.727.727 0 00.533.222.717.717 0 00.52-.22.715.715 0 00.225-.53.716.716 0 00-.222-.534.724.724 0 00-.523-.216.731.731 0 00-.533.219.719.719 0 00-.222.53c0 .205.074.38.222.529z"}))},y2t=g2t;var iL={};de(iL,{icon:()=>_2t});var xgr=V(ne());var b2t=["title","titleId"];function Xae(){return Xae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x2t=function(t){var n=t.title,r=t.titleId,o=w2t(t,b2t);return c("svg",Xae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.5 6a.5.5 0 010 1h-6a.5.5 0 010-1h6zm.74 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0012 6.5 5.5 5.5 0 106.5 12a.5.5 0 110 1 6.5 6.5 0 114.936-2.27l4.419 4.418a.5.5 0 01-.707.707l-4.768-4.768a.499.499 0 01-.14-.347z"}))},_2t=x2t;var aL={};de(aL,{icon:()=>P2t});var Sgr=V(ne());var S2t=["title","titleId"];function Kae(){return Kae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function I2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k2t=function(t){var n=t.title,r=t.titleId,o=E2t(t,S2t);return c("svg",Kae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 6h2.5a.5.5 0 010 1H7v2.5a.5.5 0 01-1 0V7H3.5a.5.5 0 010-1H6V3.5a.5.5 0 011 0V6zm3.24 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0012 6.5 5.5 5.5 0 106.5 12a.5.5 0 110 1 6.5 6.5 0 114.936-2.27l4.419 4.418a.5.5 0 01-.707.707l-4.768-4.768a.499.499 0 01-.14-.347z"}))},P2t=k2t;var sL={};de(sL,{icon:()=>M2t});var Igr=V(ne());var j2t=["title","titleId"];function Yae(){return Yae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function T2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var A2t=function(t){var n=t.title,r=t.titleId,o=C2t(t,j2t);return c("svg",Yae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.55 14.224a.502.502 0 00.897 0l4-8a.5.5 0 00.053-.235 4.672 4.672 0 00-.084-.705 5.538 5.538 0 00-.505-1.512C11.189 2.362 9.906 1.5 8 1.5c-1.906 0-3.19.862-3.91 2.272-.248.485-.41.998-.506 1.512-.058.31-.08.554-.084.705a.5.5 0 00.053.235l3.997 8zM8 5a1 1 0 100 2 1 1 0 000-2zm-3.493.895c.009-.106.027-.253.06-.429.079-.424.213-.848.413-1.238C5.537 3.138 6.487 2.5 8 2.5c1.513 0 2.463.638 3.02 1.728.2.39.334.814.413 1.238.033.176.051.323.06.43L8 12.881 4.507 5.895z"}))},M2t=A2t;var lL={};de(lL,{icon:()=>L2t});var Pgr=V(ne());var R2t=["title","titleId"];function Qae(){return Qae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function z2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var N2t=function(t){var n=t.title,r=t.titleId,o=D2t(t,R2t);return c("svg",Qae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 10h2V6H7zM3 10h2V6H3zM11.025 10h2V6h-2zM3.5 13.75h1v-2.4h-1zM6.175 13.75h1.001v-2.4H6.175zM8.85 13.75h1v-2.4h-1zM11.525 13.75h1v-2.4h-1z"}),c("path",{d:"M0 3v7.05h1v3.698h1v-3.699h12v3.699h1v-3.699h1V3H0zm1 6h14V4H1v5z"}))},L2t=N2t;var uL={};de(uL,{icon:()=>$2t});var Cgr=V(ne());var F2t=["title","titleId"];function Zae(){return Zae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function W2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H2t=function(t){var n=t.title,r=t.titleId,o=B2t(t,F2t);return c("svg",Zae({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M0 2h16v2H0V2zm0 5h16v2H0V7zm16 5H0v2h16v-2z"}))},$2t=H2t;var cL={};de(cL,{icon:()=>J2t});var Agr=V(ne());var V2t=["title","titleId"];function ese(){return ese=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var G2t=function(t){var n=t.title,r=t.titleId,o=q2t(t,V2t);return c("svg",ese({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L3 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 7.5zM3.51 4a.513.513 0 01-.502-.412L3 3.5c0-.276.228-.5.51-.5h8.98c.25 0 .459.183.502.412L13 3.5c0 .276-.228.5-.51.5H8.493v7.792l2.06-2.06a.5.5 0 11.707.707L9.14 12.56A1.496 1.496 0 018.026 13L7.993 13a.501.501 0 01-.118-.014 1.493 1.493 0 01-.857-.426l-2.122-2.12a.5.5 0 01.708-.708l1.889 1.89V4H3.51zM13 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L10 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L13 7.5z"}))},J2t=G2t;var fL={};de(fL,{icon:()=>Z2t});var Rgr=V(ne());var X2t=["title","titleId"];function tse(){return tse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q2t=function(t){var n=t.title,r=t.titleId,o=K2t(t,X2t);return c("svg",tse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.014 7.382a.501.501 0 00-.013.152c-.014.4.133.806.439 1.112l2.12 2.122a.5.5 0 10.708-.708L2.208 8H14.5a.5.5 0 000-1H2.379l1.889-1.89a.5.5 0 00-.707-.706L1.44 6.524c-.241.242-.383.544-.426.858zM14.5 3h-7a.5.5 0 000 1h7a.5.5 0 000-1zm0 8h-7a.5.5 0 100 1h7a.5.5 0 100-1z"}))},Z2t=Q2t;var pL={};de(pL,{icon:()=>o3t});var zgr=V(ne());var e3t=["title","titleId"];function rse(){return rse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function r3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var n3t=function(t){var n=t.title,r=t.titleId,o=t3t(t,e3t);return c("svg",rse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14.986 7.382a.501.501 0 01.013.152c.014.4-.133.806-.439 1.112l-2.12 2.122a.5.5 0 11-.708-.708L13.792 8H1.5a.5.5 0 010-1h12.121l-1.889-1.89a.5.5 0 01.707-.706l2.121 2.12c.241.242.383.544.426.858zM1.5 3h7a.5.5 0 010 1h-7a.5.5 0 010-1zm0 8h7a.5.5 0 110 1h-7a.5.5 0 110-1z"}))},o3t=n3t;var dL={};de(dL,{icon:()=>u3t});var Lgr=V(ne());var i3t=["title","titleId"];function nse(){return nse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function s3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l3t=function(t){var n=t.title,r=t.titleId,o=a3t(t,i3t);return c("svg",nse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.01 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412l.008.088c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L10.01 8.5zM12.5 12c.25 0 .459.183.502.412l.008.088c0 .276-.228.5-.51.5H3.52a.513.513 0 01-.502-.412L3.01 12.5c0-.276.228-.5.51-.5h3.987V4.208l-2.06 2.06a.5.5 0 11-.707-.707L6.86 3.44A1.496 1.496 0 017.974 3L8.007 3c.04 0 .08.005.118.014.314.043.616.185.857.426l2.122 2.12a.5.5 0 01-.708.708l-1.889-1.89V12H12.5zM3 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 8.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L3 8.5z"}))},u3t=l3t;var hL={};de(hL,{icon:()=>h3t});var Bgr=V(ne());var c3t=["title","titleId"];function ose(){return ose=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var d3t=function(t){var n=t.title,r=t.titleId,o=f3t(t,c3t);return c("svg",ose({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.352 6H2.5a.5.5 0 010-1h4.852L5.12 2.721c-.18-.183-.155-.46.055-.616a.551.551 0 01.705.048l3 3.062c.16.164.16.405 0 .57l-3 3.062A.532.532 0 015.5 9a.54.54 0 01-.325-.106c-.21-.157-.235-.433-.055-.616L7.352 6zm1.296 4H13.5a.5.5 0 010 1H8.648l2.232 2.278c.18.183.155.46-.055.617A.54.54 0 0110.5 14a.532.532 0 01-.38-.153l-3-3.063a.397.397 0 010-.568l3-3.063a.551.551 0 01.705-.047c.21.156.235.433.055.616L8.648 10z"}))},h3t=d3t;var mL={};de(mL,{icon:()=>b3t});var Hgr=V(ne());var m3t=["title","titleId"];function ise(){return ise=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var y3t=function(t){var n=t.title,r=t.titleId,o=v3t(t,m3t);return c("svg",ise({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.146 14.146l4-4a.5.5 0 01.765.638l-.057.07-4 4a.5.5 0 01-.765-.638l.057-.07 4-4-4 4zM6.5 8A1.5 1.5 0 018 9.5v3a.5.5 0 11-1 0v-3a.5.5 0 00-.5-.5h-3a.5.5 0 010-1h3zm2-5a.5.5 0 01.5.5v3a.5.5 0 00.5.5h3a.5.5 0 110 1h-3A1.5 1.5 0 018 6.5v-3a.5.5 0 01.5-.5zm1.651 2.146l4-4a.5.5 0 01.765.638l-.057.07-4 4a.5.5 0 01-.765-.638l.057-.07 4-4-4 4z"}))},b3t=y3t;var vL={};de(vL,{icon:()=>S3t});var Vgr=V(ne());var w3t=["title","titleId"];function ase(){return ase=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function x3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _3t=function(t){var n=t.title,r=t.titleId,o=O3t(t,w3t);return c("svg",ase({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("rect",{width:10,height:1.5,x:3,y:7.25,rx:.5}))},S3t=_3t;var gL={};de(gL,{icon:()=>j3t});var Ugr=V(ne());var E3t=["title","titleId"];function sse(){return sse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function k3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var P3t=function(t){var n=t.title,r=t.titleId,o=I3t(t,E3t);return c("svg",sse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 007.5.882zM3.5 7h8a.5.5 0 110 1h-8a.5.5 0 010-1z"}))},j3t=P3t;var yL={};de(yL,{icon:()=>R3t});var Jgr=V(ne());var C3t=["title","titleId"];function lse(){return lse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M3t=function(t){var n=t.title,r=t.titleId,o=T3t(t,C3t);return c("svg",lse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm-4 7a.5.5 0 000 1h8a.5.5 0 100-1h-8z"}))},R3t=M3t;var bL={};de(bL,{icon:()=>F3t});var Kgr=V(ne());var D3t=["title","titleId"];function use(){return use=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function N3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L3t=function(t){var n=t.title,r=t.titleId,o=z3t(t,D3t);return c("svg",use({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 16v5h2.038a13.179 13.179 0 000 2H7v5H5v-5H0v-2h5v-5h2zM7 0v5h5v2H7v5H5V7H0V5h5V0h2zm16 0v5h5v2h-5v2.038a13.179 13.179 0 00-2 0V7h-5V5h5V0h2z"}),c("path",{className:"euiIcon__fillSecondary",d:"M22 10c3.073 0 5.877 1.155 8 3.056v3.252A9.82 9.82 0 1016.307 30h-3.251A11.955 11.955 0 0110 22c0-6.627 5.373-12 12-12zm1 8v3h3v2h-3v3h-2v-3h-3v-2h3v-3h2z"}))},F3t=L3t;var wL={};de(wL,{icon:()=>V3t});var Qgr=V(ne());var B3t=["title","titleId"];function cse(){return cse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function H3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $3t=function(t){var n=t.title,r=t.titleId,o=W3t(t,B3t);return c("svg",cse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16h-2c0-7.732-6.268-14-14-14S2 8.268 2 16s6.268 14 14 14v2z"}),c("path",{className:"euiIcon__fillSecondary",d:"M27 20v12h-2V20h2zm-5 4v8h-2v-8h2zm10-2v10h-2V22h2zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2z"}))},V3t=$3t;var OL={};de(OL,{icon:()=>X3t});var eyr=V(ne());var q3t=["title","titleId"];function fse(){return fse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J3t=function(t){var n=t.title,r=t.titleId,o=U3t(t,q3t);return c("svg",fse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M4 24a4 4 0 110 8 4 4 0 010-8zm24 0a4 4 0 110 8 4 4 0 010-8zM4 26a2 2 0 100 4 2 2 0 000-4zm24 0a2 2 0 100 4 2 2 0 000-4zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2zM4 0a4 4 0 110 8 4 4 0 010-8zm24 0a4 4 0 110 8 4 4 0 010-8zm0 2a2 2 0 100 4 2 2 0 000-4zM4 2a2 2 0 100 4 2 2 0 000-4z"}),c("path",{d:"M21.078 29.05c.102.677.3 1.322.582 1.92A15.963 15.963 0 0116 32c-1.993 0-3.9-.364-5.66-1.03.281-.598.48-1.243.582-1.92 1.574.614 3.287.95 5.078.95 1.791 0 3.504-.336 5.078-.95zm9.892-18.71A15.963 15.963 0 0132 16c0 1.993-.364 3.9-1.03 5.66a6.948 6.948 0 00-1.92-.582c.614-1.574.95-3.287.95-5.078 0-1.791-.336-3.504-.95-5.078a6.948 6.948 0 001.92-.582zm-29.94 0c.598.281 1.243.48 1.92.582A13.965 13.965 0 002 16c0 1.791.336 3.504.95 5.078-.677.102-1.322.3-1.92.582A15.964 15.964 0 010 16c0-1.993.364-3.9 1.03-5.66zM16 0c1.993 0 3.9.364 5.66 1.03a6.948 6.948 0 00-.582 1.92A13.965 13.965 0 0016 2c-1.791 0-3.504.336-5.078.95a6.948 6.948 0 00-.582-1.92A15.964 15.964 0 0116 0z"}))},X3t=J3t;var xL={};de(xL,{icon:()=>e5t});var ryr=V(ne());var K3t=["title","titleId"];function pse(){return pse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Q3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Z3t=function(t){var n=t.title,r=t.titleId,o=Y3t(t,K3t);return c("svg",pse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 0c5.523 0 10 4.477 10 10s-4.477 10-10 10S6 15.523 6 10 10.477 0 16 0zm0 2a8 8 0 100 16 8 8 0 000-16z"}),c("path",{className:"euiIcon__fillSecondary",d:"M8.4 19.288c.492.402 1.015.766 1.566 1.087L7.26 23.682a4 4 0 11-1.437-1.243l2.578-3.151zm15.2 0l2.577 3.15a4 4 0 11-1.437 1.243l-2.706-3.306a12.032 12.032 0 001.565-1.087zM4 24a2 2 0 100 4 2 2 0 000-4zm24 0a2 2 0 100 4 2 2 0 000-4zM17 6v3h3v2h-3v3h-2v-3h-3V9h3V6h2z"}))},e5t=Z3t;var _L={};de(_L,{icon:()=>i5t});var oyr=V(ne());var t5t=["title","titleId"];function dse(){return dse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function n5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var o5t=function(t){var n=t.title,r=t.titleId,o=r5t(t,t5t);return c("svg",dse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),c("path",{className:"euiIcon__fillSecondary",d:"M23 15h-6V9h-2v6H9v2h6v6h2v-6h6z"}))},i5t=o5t;var SL={};de(SL,{icon:()=>c5t});var ayr=V(ne());var a5t=["title","titleId"];function hse(){return hse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function l5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var u5t=function(t){var n=t.title,r=t.titleId,o=s5t(t,a5t);return c("svg",hse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 20v10h10v2H0V20h2zm30 0v12H20v-2h10V20h2zM12 4a8 8 0 110 16 8 8 0 010-16zm0 2a6 6 0 100 12 6 6 0 000-12zm0-6v2H2v10H0V0h12zm20 0v12h-2V2H20V0h12z"}),c("path",{className:"euiIcon__fillSecondary",d:"M21.997 12.251c-.017.689-.104 1.36-.253 2.006a6 6 0 11-7.487 7.487c-.646.15-1.317.236-2.006.253a8 8 0 109.746-9.746z"}))},c5t=u5t;var EL={};de(EL,{icon:()=>m5t});var lyr=V(ne());var f5t=["title","titleId"];function mse(){return mse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function d5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var h5t=function(t){var n=t.title,r=t.titleId,o=p5t(t,f5t);return c("svg",mse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 12v6h6v2H0v-8h2zm18 0v8h-8v-2h6v-6h2zM8 0v2H2v6H0V0h8zm12 0v8h-2V2h-6V0h8z"}),c("path",{className:"euiIcon__fillSecondary",d:"M16 24a4 4 0 110 8 4 4 0 010-8zm12 0a4 4 0 110 8 4 4 0 010-8zm-12 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zm12 0a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zM28 12a4 4 0 110 8 4 4 0 010-8zm0 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zM10 6a4 4 0 110 8 4 4 0 010-8zm0 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5z"}))},m5t=h5t;var IL={};de(IL,{icon:()=>w5t});var cyr=V(ne());var v5t=["title","titleId"];function vse(){return vse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function y5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var b5t=function(t){var n=t.title,r=t.titleId,o=g5t(t,v5t);return c("svg",vse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M24 0a8 8 0 11-4.906 14.32l-4.774 4.774a8 8 0 11-1.414-1.414l4.774-4.774A8 8 0 0124 0zM8 18a6 6 0 100 12 6 6 0 000-12zM24 2a6 6 0 100 12 6 6 0 000-12z"}),c("path",{className:"euiIcon__fillSecondary",d:"M32 20v12H20V20h12zm-2 2h-8v8h8v-8zM12 0v12H0V0h12zm-2 2H2v8h8V2z"}))},w5t=b5t;var kL={};de(kL,{icon:()=>E5t});var pyr=V(ne());var O5t=["title","titleId"];function gse(){return gse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var S5t=function(t){var n=t.title,r=t.titleId,o=x5t(t,O5t);return c("svg",gse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6 2.5a.5.5 0 01.5-.5h3a.5.5 0 010 1h-3a.5.5 0 01-.5-.5z"}),c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 0A1.5 1.5 0 003 1.5v13A1.5 1.5 0 004.5 16h7a1.5 1.5 0 001.5-1.5v-13A1.5 1.5 0 0011.5 0h-7zM4 1.5a.5.5 0 01.5-.5h7a.5.5 0 01.5.5V4H4V1.5zM4 13v1.5a.5.5 0 00.5.5h7a.5.5 0 00.5-.5V13H4zm0-1h8V5H4v7z"}))},E5t=S5t;var PL={};de(PL,{icon:()=>C5t});var hyr=V(ne());var I5t=["title","titleId"];function yse(){return yse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function P5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var j5t=function(t){var n=t.title,r=t.titleId,o=k5t(t,I5t);return c("svg",yse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.796 9.048c-1.552-2.238-1.199-5.323.61-8.1-3.47-.12-6.6 2.232-7.269 5.672-.742 3.82 1.83 7.533 5.749 8.294a7.226 7.226 0 007.526-3.218c-2.794.177-5.27-.711-6.616-2.648z"}))},C5t=j5t;var jL={};de(jL,{icon:()=>D5t});var vyr=V(ne());var T5t=["title","titleId"];function bse(){return bse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function M5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var R5t=function(t){var n=t.title,r=t.titleId,o=A5t(t,T5t);return c("svg",bse({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1 1h14v14H1V1zm13 12v1H2V2h12v11zM6 6h4v4H6V6zm-1 5V5h6v6H5z"}))},D5t=R5t;var CL={};de(CL,{icon:()=>B5t});var yyr=V(ne());var z5t=["title","titleId"];function wse(){return wse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function L5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var F5t=function(t){var n=t.title,r=t.titleId,o=N5t(t,z5t);return c("svg",wse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.5 1a.5.5 0 010 1H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14H5.5a.5.5 0 110 1H3.006A2.005 2.005 0 011 12.994V3.006C1 1.898 1.897 1 3.006 1H5.5zm7.494 0c1.059 0 1.924.818 2 1.856l.006.15v9.988a2.005 2.005 0 01-1.856 2l-.15.006H10.5a.5.5 0 01-.09-.992L10.5 14h2.494c.516 0 .941-.388 1-.888l.006-.118V3.006c0-.516-.388-.941-.888-1L12.994 2H10.5a.5.5 0 01-.09-.992L10.5 1h2.494zM5 7a1 1 0 110 2 1 1 0 010-2zm3 0a1 1 0 110 2 1 1 0 010-2zm3 0a1 1 0 110 2 1 1 0 010-2z"}))},B5t=F5t;var TL={};de(TL,{icon:()=>q5t});var wyr=V(ne());var W5t=["title","titleId"];function Ose(){return Ose=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var V5t=function(t){var n=t.title,r=t.titleId,o=H5t(t,W5t);return c("svg",Ose({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.5 1.443a1 1 0 00-1 0L2.572 4.29a1 1 0 00-.5.866v5.69a1 1 0 00.5.866L7.5 14.557a1 1 0 001 0l4.928-2.846a1 1 0 00.5-.866v-5.69a1 1 0 00-.5-.866L8.5 1.443zM9 .577l4.928 2.846a2 2 0 011 1.732v5.69a2 2 0 01-1 1.732L9 15.423a2 2 0 01-2 0l-4.928-2.846a2 2 0 01-1-1.732v-5.69a2 2 0 011-1.732L7 .577a2 2 0 012 0z"}))},q5t=V5t;var AL={};de(AL,{icon:()=>K5t});var xyr=V(ne());var U5t=["title","titleId"];function xse(){return xse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function J5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var X5t=function(t){var n=t.title,r=t.titleId,o=G5t(t,U5t);return c("svg",xse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.808 10.197H6.796L5.859 13H4.485l.937-2.803H3.966l.219-1.25h1.647l.608-1.805H4.991l.226-1.251h1.64l.95-2.844h1.368l-.95 2.844h1.018l.95-2.844h1.374l-.95 2.844h1.51l-.218 1.25h-1.702l-.608 1.805h1.497l-.219 1.251H9.182L8.252 13H6.878l.93-2.803zm-.602-1.25h1.012l.615-1.805H7.814l-.608 1.804z",fillRule:"evenodd"}))},K5t=X5t;var ML={};de(ML,{icon:()=>twt});var Syr=V(ne());var Y5t=["title","titleId"];function _se(){return _se=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Z5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ewt=function(t){var n=t.title,r=t.titleId,o=Q5t(t,Y5t);return c("svg",_se({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.517 12.271l1.254-1.254a1.5 1.5 0 11-1.254 1.254zm2.945-2.944l.74-.74c.361.208.694.467.987.772a.5.5 0 01-.721.693 3.424 3.424 0 00-1.006-.725zm2.162-2.163l.716-.715c.308.232.599.49.87.772a.5.5 0 11-.722.692 6.26 6.26 0 00-.864-.749zM7.061 6.07A6.198 6.198 0 003.54 7.885a.5.5 0 01-.717-.697 7.199 7.199 0 015.309-2.187l-1.07 1.07zm6.672-1.014l.71-.71c.274.23.536.476.786.736a.5.5 0 01-.721.692 9.1 9.1 0 00-.775-.718zm-3.807-1.85A9.06 9.06 0 008 3a8.99 8.99 0 00-6.469 2.734.5.5 0 11-.717-.697A9.99 9.99 0 018 2c.944 0 1.868.131 2.75.382l-.824.824zM8 13a.5.5 0 100-1 .5.5 0 000 1zm-5.424 1a.5.5 0 01-.707-.707L14.146 1.146a.5.5 0 01.708.708L2.576 14z"}))},twt=ewt;var RL={};de(RL,{icon:()=>awt});var Iyr=V(ne());var rwt=["title","titleId"];function Sse(){return Sse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function owt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iwt=function(t){var n=t.title,r=t.titleId,o=nwt(t,rwt);return c("svg",Sse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 14a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm0-1a.5.5 0 100-1 .5.5 0 000 1zm3.189-3.64a.5.5 0 01-.721.692A3.408 3.408 0 008 9c-.937 0-1.813.378-2.453 1.037a.5.5 0 01-.717-.697A4.408 4.408 0 018 8c1.22 0 2.361.497 3.189 1.36zm2.02-2.14a.5.5 0 11-.721.693A6.2 6.2 0 008 6a6.199 6.199 0 00-4.46 1.885.5.5 0 01-.718-.697A7.199 7.199 0 018 5a7.2 7.2 0 015.21 2.22zm2.02-2.138a.5.5 0 01-.721.692A8.99 8.99 0 008 3a8.99 8.99 0 00-6.469 2.734.5.5 0 11-.717-.697A9.99 9.99 0 018 2a9.99 9.99 0 017.23 3.082z"}))},awt=iwt;var DL={};de(DL,{icon:()=>fwt});var Pyr=V(ne());var swt=["title","titleId"];function Ese(){return Ese=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cwt=function(t){var n=t.title,r=t.titleId,o=lwt(t,swt);return c("svg",Ese({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14.447 3.724l-6-3a1 1 0 00-.894 0l-6 3A1 1 0 001 4.618v6.764a1 1 0 00.553.894l6 3a1 1 0 00.894 0l6-3a1 1 0 00.553-.894V4.618a1 1 0 00-.553-.894zM5.871 5.897l5.343-2.672 2.158 1.079L8 6.943zM8 1.618l2.096 1.048-5.353 2.677-2.115-1.039zM2 5.11l2.25 1.105V9a.5.5 0 001 0V6.706L7.5 7.811v6.321L2 11.382zm6.5 9.022v-6.32L14 5.11v6.272z"}))},fwt=cwt;var zL={};de(zL,{icon:()=>vwt});var Cyr=V(ne());var pwt=["title","titleId"];function Ise(){return Ise=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mwt=function(t){var n=t.title,r=t.titleId,o=dwt(t,pwt);return c("svg",Ise({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M3 1a1 1 0 00-1 1v12a1 1 0 001 1h5a4.995 4.995 0 01-.584-1H3V2h7v2a1 1 0 001 1h2v2.1c.348.07.682.177 1 .316V4a1 1 0 00-.293-.707l-2-2A1 1 0 0011 1H3zm13 11a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},vwt=mwt;var NL={};de(NL,{icon:()=>Owt});var Ayr=V(ne());var gwt=["title","titleId"];function kse(){return kse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wwt=function(t){var n=t.title,r=t.titleId,o=ywt(t,gwt);return c("svg",kse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M3 1a1 1 0 011-1h8a1 1 0 01.707.293l2 2A1 1 0 0115 3v5a4.995 4.995 0 00-1-.584V4h-2a1 1 0 01-1-1V1H4v12h3.1c.07.348.177.682.316 1H4a1 1 0 01-1-1V1zm5 14H2V2a1 1 0 00-1 1v12a1 1 0 001 1h7a5.029 5.029 0 01-1-1zm8-3a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},Owt=wwt;var LL={};de(LL,{icon:()=>Iwt});var Ryr=V(ne());var xwt=["title","titleId"];function Pse(){return Pse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Swt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ewt=function(t){var n=t.title,r=t.titleId,o=_wt(t,xwt);return c("svg",Pse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 013.999 8.17V6.662h7.994V8.17zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486zM4 5.658h1.262V1.005H4v4.653zm2.261 0h1.244V1.005H6.26v4.653zm2.244 0h1.235V1.005H8.504v4.653zm2.234 0h1.254V1.005h-1.254v4.653zM3.008 0L3 8.17a2.509 2.509 0 002.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 002.498-2.512L13 0H3.008z"}))},Iwt=Ewt;var FL={};de(FL,{icon:()=>Twt});var zyr=V(ne());var kwt=["title","titleId"];function jse(){return jse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cwt=function(t){var n=t.title,r=t.titleId,o=Pwt(t,kwt);return c("svg",jse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.84 2.019L3.046 8.57c-.987.952-1.133 2.517-.199 3.516.951 1.021 2.58 1.106 3.64.19.034-.03.068-.061.1-.092l5.655-5.452a.484.484 0 000-.703.53.53 0 00-.729 0L5.92 11.421c-.572.551-1.505.657-2.131.163a1.455 1.455 0 01-.118-2.211l6.899-6.651a2.646 2.646 0 013.644 0 2.422 2.422 0 010 3.513L7.3 12.901c-1.333 1.285-3.497 1.493-4.95.336-1.54-1.22-1.764-3.411-.5-4.897a3.33 3.33 0 01.238-.252l5.78-5.572a.484.484 0 000-.703.53.53 0 00-.73 0l-5.78 5.572a4.36 4.36 0 000 6.324c2.188 2.109 5.202 1.31 6.66-.095l6.925-6.676a3.39 3.39 0 000-4.92C13.534.66 11.25.66 9.841 2.019z"}))},Twt=Cwt;var BL={};de(BL,{icon:()=>zwt});var Lyr=V(ne());var Awt=["title","titleId"];function Cse(){return Cse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dwt=function(t){var n=t.title,r=t.titleId,o=Mwt(t,Awt);return c("svg",Cse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.664 14.871a7 7 0 01-2.42-12.778.5.5 0 01.612.06c.456.431 8.216 8.212 8.98 9.002a.5.5 0 01.063.618 7.002 7.002 0 01-7.235 3.098zm6.168-3.312a1961.733 1961.733 0 00-8.377-8.4 6 6 0 108.378 8.4zm2.095-2.548a.5.5 0 11-.99-.144c.01-.066.01-.066.018-.133a6.007 6.007 0 00-.034-1.714.5.5 0 11.987-.163c.108.655.122 1.326.04 1.999l-.021.155zm-1.273-5.138a.5.5 0 11-.808.59 6.026 6.026 0 00-1.304-1.308.5.5 0 01.59-.806 7.026 7.026 0 011.522 1.524zM9.169 1.098a.5.5 0 11-.166.986 6.105 6.105 0 00-1.849-.026.5.5 0 01-.14-.99 7.02 7.02 0 012.155.03z"}))},zwt=Dwt;var WL={};de(WL,{icon:()=>Wwt});var Byr=V(ne());var Nwt=["title","titleId"];function Tse(){return Tse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bwt=function(t){var n=t.title,r=t.titleId,o=Lwt(t,Nwt);return c("svg",Tse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 2a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1zm6 0a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1z"}))},Wwt=Bwt;var HL={};de(HL,{icon:()=>Uwt});var Hyr=V(ne());var Hwt=["title","titleId"];function Ase(){return Ase=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qwt=function(t){var n=t.title,r=t.titleId,o=$wt(t,Hwt);return c("svg",Ase({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M.586 2.586A2 2 0 000 4h1a1 1 0 011-1V2a2 2 0 00-1.414.586zM2 2h10.5a.5.5 0 010 1H2V2zM0 4h1v6.5a.5.5 0 01-1 0V4zm2.586.586A2 2 0 002 6h1a1 1 0 011-1V4a2 2 0 00-1.414.586zm0 8.828A2 2 0 012 12h1a1 1 0 001 1v1a2 2 0 01-1.414-.586zm12.828-8.828A2 2 0 0116 6h-1a1 1 0 00-1-1V4a2 2 0 011.414.586zm0 8.828A2 2 0 0016 12h-1a1 1 0 01-1 1v1a2 2 0 001.414-.586zM4 4h10v1H4zM3 7h12v1H3zm1 6h10v1H4zM2 6h1v6H2zm13 0h1v6h-1zm-5.5 4a.5.5 0 010 1H7.496a.5.5 0 010-1H9.5zm4 0a.5.5 0 010 1h-2.004a.5.5 0 010-1H13.5z"}))},Uwt=qwt;var $L={};de($L,{icon:()=>Ywt});var Vyr=V(ne());var Gwt=["title","titleId"];function Mse(){return Mse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kwt=function(t){var n=t.title,r=t.titleId,o=Jwt(t,Gwt);return c("svg",Mse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 01-.708 0 .502.502 0 010-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 010 1.414l-9 9A.997.997 0 015 15H2a1 1 0 01-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0111 1zM5 14H2v-3l3 3z"}))},Ywt=Kwt;var VL={};de(VL,{icon:()=>rOt});var Uyr=V(ne());var Qwt=["title","titleId"];function Rse(){return Rse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tOt=function(t){var n=t.title,r=t.titleId,o=Zwt(t,Qwt);return c("svg",Rse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M5 8c1.105 0 2-1.12 2-2.5S6.105 3 5 3 3 4.12 3 5.5 3.895 8 5 8zm0-1c.356 0 1-.452 1-1.5S5.356 4 5 4s-1 .452-1 1.5S4.644 7 5 7z"}),c("path",{d:"M10.5 3H12L5.5 13H4l6.5-10z"}),c("path",{fillRule:"evenodd",d:"M13 10.5c0 1.38-.895 2.5-2 2.5s-2-1.12-2-2.5S9.895 8 11 8s2 1.12 2 2.5zm-1 0c0 1.048-.644 1.5-1 1.5s-1-.452-1-1.5.644-1.5 1-1.5 1 .452 1 1.5z"}))},rOt=tOt;var qL={};de(qL,{icon:()=>sOt});var Jyr=V(ne());var nOt=["title","titleId"];function Dse(){return Dse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aOt=function(t){var n=t.title,r=t.titleId,o=oOt(t,nOt);return c("svg",Dse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 11h4.5a.5.5 0 100-1h-10a.5.5 0 000 1H7v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11zM4 4h1v6H4V4zm6 0h1v6h-1V4zM4.286 2C4.08 2 4 2.063 4 2v1c0-.063.08 0 .286 0h6.428C10.92 3 11 2.937 11 3V2c0 .063-.08 0-.286 0H4.286zm0-1h6.428C11.424 1 12 1.448 12 2v1c0 .552-.576 1-1.286 1H4.286C3.576 4 3 3.552 3 3V2c0-.552.576-1 1.286-1z"}))},sOt=aOt;var UL={};de(UL,{icon:()=>pOt});var Kyr=V(ne());var lOt=["title","titleId"];function zse(){return zse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fOt=function(t){var n=t.title,r=t.titleId,o=uOt(t,lOt);return c("svg",zse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 11h4.5a.5.5 0 100-1h-10a.5.5 0 100 1H8v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11zM5 4h7v6H5V4zm.286-3h6.428C12.424 1 13 1.448 13 2v1c0 .552-.576 1-1.286 1H5.286C4.576 4 4 3.552 4 3V2c0-.552.576-1 1.286-1z"}))},pOt=fOt;var GL={};de(GL,{icon:()=>gOt});var Qyr=V(ne());var dOt=["title","titleId"];function Nse(){return Nse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vOt=function(t){var n=t.title,r=t.titleId,o=hOt(t,dOt);return c("svg",Nse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.608 3.063C4.345 2.895 4 3.089 4 3.418v9.167c0 .329.345.523.608.356l7.2-4.584a.426.426 0 000-.711l-7.2-4.583zm.538-.844l7.2 4.583a1.426 1.426 0 010 2.399l-7.2 4.583C4.21 14.38 3 13.696 3 12.585V3.418C3 2.307 4.21 1.624 5.146 2.22z"}))},gOt=vOt;var JL={};de(JL,{icon:()=>xOt});var ebr=V(ne());var yOt=["title","titleId"];function Lse(){return Lse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OOt=function(t){var n=t.title,r=t.titleId,o=bOt(t,yOt);return c("svg",Lse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.345 6.801l-7.2-4.581C4.21 1.625 3 2.308 3 3.419v9.162c0 1.111 1.21 1.794 2.146 1.199l7.2-4.581a1.425 1.425 0 000-2.398z"}))},xOt=OOt;var XL={};de(XL,{icon:()=>kOt});var rbr=V(ne());var _Ot=["title","titleId"];function Fse(){return Fse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IOt=function(t){var n=t.title,r=t.titleId,o=SOt(t,_Ot);return c("svg",Fse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.25 3a.5.5 0 01.5.5v3.75h3.75a.5.5 0 01.5.5v.5a.5.5 0 01-.5.5H8.75v3.75a.5.5 0 01-.5.5h-.5a.5.5 0 01-.5-.5V8.75H3.5a.5.5 0 01-.5-.5v-.5a.5.5 0 01.5-.5h3.75V3.5a.5.5 0 01.5-.5h.5z"}))},kOt=IOt;var KL={};de(KL,{icon:()=>AOt});var obr=V(ne());var POt=["title","titleId"];function Bse(){return Bse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function COt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TOt=function(t){var n=t.title,r=t.titleId,o=jOt(t,POt);return c("svg",Bse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 7h3.5a.5.5 0 110 1H8v3.5a.5.5 0 11-1 0V8H3.5a.5.5 0 010-1H7V3.5a.5.5 0 011 0V7zm-.5-7C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 007.5.882z"}))},AOt=TOt;var YL={};de(YL,{icon:()=>NOt});var abr=V(ne());var MOt=["title","titleId"];function Wse(){return Wse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zOt=function(t){var n=t.title,r=t.titleId,o=ROt(t,MOt);return c("svg",Wse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 7V3.5a.5.5 0 00-1 0V7H3.5a.5.5 0 000 1H7v3.5a.5.5 0 101 0V8h3.5a.5.5 0 100-1H8zm-.5 8a7.5 7.5 0 110-15 7.5 7.5 0 010 15z"}))},NOt=zOt;var QL={};de(QL,{icon:()=>HOt});var lbr=V(ne());var LOt=["title","titleId"];function Hse(){return Hse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WOt=function(t){var n=t.title,r=t.titleId,o=FOt(t,LOt);return c("svg",Hse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 8.5a.5.5 0 111 0V12a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2h3.5a.5.5 0 010 1H4a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V8.5zm-5.12.339a.5.5 0 11-.706-.707L13.305 2H10.5a.5.5 0 110-1H14a1 1 0 011 1v3.5a.5.5 0 11-1 0V2.72L7.88 8.838z"}))},HOt=WOt;var ZL={};de(ZL,{icon:()=>GOt});var cbr=V(ne());var $Ot=["title","titleId"];function $se(){return $se=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UOt=function(t){var n=t.title,r=t.titleId,o=VOt(t,$Ot);return c("svg",$se({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.171 5.15L10.114 7H1.556C1.249 7 1 7.224 1 7.5s.249.5.556.5h8.526l-1.91 1.82a.52.52 0 000 .77c.227.213.6.213.828 0l2.05-1.95a1.552 1.552 0 000-2.31L9 4.38a.617.617 0 00-.829 0 .52.52 0 000 .77z"}),c("path",{d:"M6.804 12.792A.993.993 0 016 11.82V10H5v1.826c0 .945.673 1.76 1.608 1.945l6 1.19A1.992 1.992 0 0015 13.016V1.984A2 2 0 0012.608.04l-6 1.19C5.673 1.415 5 2.23 5 3.175V5h1V3.18c0-.472.336-.879.804-.972l6-1.189A1 1 0 0114 1.991v11.018a.995.995 0 01-1.196.972l-6-1.19z"}))},GOt=UOt;var eF={};de(eF,{icon:()=>QOt});var pbr=V(ne());var JOt=["title","titleId"];function Vse(){return Vse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YOt=function(t){var n=t.title,r=t.titleId,o=XOt(t,JOt);return c("svg",Vse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 14A6 6 0 118 2a6 6 0 010 12zm0-1A5 5 0 108 3a5 5 0 000 10zm-.186-1.065A.785.785 0 017 11.12c0-.48.34-.82.814-.82.475 0 .809.34.809.82 0 .475-.334.815-.809.815zM5.9 6.317C5.96 5.168 6.755 4.4 8.048 4.4c1.218 0 2.091.759 2.091 1.8 0 .736-.36 1.304-1.03 1.707-.56.33-.717.56-.717 1.022v.305l-.1.1H7.47l-.1-.1v-.431c-.005-.646.302-1.104.987-1.514.527-.322.708-.59.708-1.047 0-.536-.416-.91-1.05-.91-.652 0-1.064.374-1.112.998l-.1.092H6l-.1-.105z"}))},QOt=YOt;var tF={};de(tF,{icon:()=>n4t});var hbr=V(ne());var ZOt=["title","titleId"];function qse(){return qse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r4t=function(t){var n=t.title,r=t.titleId,o=e4t(t,ZOt);return c("svg",qse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.848 2.47a1 1 0 01-.318 1.378A7.284 7.284 0 003.75 7.01 3 3 0 111 10v-.027a3.521 3.521 0 01.01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 011.378.318zm7 0a1 1 0 01-.318 1.378 7.283 7.283 0 00-2.78 3.162A3 3 0 118 10v-.027a3.521 3.521 0 01.01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 011.378.318z"}))},n4t=r4t;var rF={};de(rF,{icon:()=>l4t});var vbr=V(ne());var o4t=["title","titleId"];function Use(){return Use=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var s4t=function(t){var n=t.title,r=t.titleId,o=i4t(t,o4t);return c("svg",Use({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.228 2.942a.5.5 0 11-.538.842A5 5 0 1013 8a.5.5 0 111 0 6 6 0 11-2.772-5.058zM14 1.5v3A1.5 1.5 0 0112.5 6h-3a.5.5 0 010-1h3a.5.5 0 00.5-.5v-3a.5.5 0 111 0z"}))},l4t=s4t;var nF={};de(nF,{icon:()=>d4t});var ybr=V(ne());var u4t=["title","titleId"];function Gse(){return Gse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function f4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var p4t=function(t){var n=t.title,r=t.titleId,o=c4t(t,u4t);return c("svg",Gse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.684.895L6.074.358a1 1 0 00-1.296.753L4.2 4H2.5a.5.5 0 000 1h1.626a4.007 4.007 0 00.11 2.359l-2.072-.345A1 1 0 001 8v1c.364 0 .706.097 1 .268V8l1 .167 1.859.31 2.163.36.478.08v6L2 14v-1.268A1.99 1.99 0 011 13v1a1 1 0 00.836.986l6 1c.108.018.22.018.328 0l6-1A1 1 0 0015 14v-1a1.99 1.99 0 01-1-.268V14l-5.5.917v-6l.478-.08 2.163-.36L13 8.166 14 8v1.268A1.99 1.99 0 0115 9V8a1 1 0 00-1.164-.986l-2.073.345A3.991 3.991 0 0011.874 5H13.5a.5.5 0 000-1h-1.7l-.578-2.89A1 1 0 009.925.359L8.316.895a1 1 0 01-.632 0zm2.88 6.664A3.013 3.013 0 0010.83 5H5.17a3.013 3.013 0 00.266 2.559L8 7.986l2.564-.427zM10.8 4H9.2L9 3l1.5-.5.3 1.5zM1 12a1 1 0 100-2 1 1 0 000 2zm14 0a1 1 0 100-2 1 1 0 000 2z"}))},d4t=p4t;var oF={};de(oF,{icon:()=>y4t});var wbr=V(ne());var h4t=["title","titleId"];function Jse(){return Jse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function v4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var g4t=function(t){var n=t.title,r=t.titleId,o=m4t(t,h4t);return c("svg",Jse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.994 4c1.059 0 1.924.818 2 1.856l.006.15v1.988a2.005 2.005 0 01-1.856 2L12 10H3.484l1.91 1.82a.52.52 0 010 .77.616.616 0 01-.829 0l-2.05-1.95a1.551 1.551 0 010-2.31l2.05-1.95a.617.617 0 01.83 0 .52.52 0 010 .77L3.45 9H12c.514-.003.935-.39.993-.888L13 7.994V6.006c0-.516-.388-.941-.888-1L11.994 5H9.5a.5.5 0 01-.09-.992L9.5 4h2.494z"}))},y4t=g4t;var iF={};de(iF,{icon:()=>_4t});var xbr=V(ne());var b4t=["title","titleId"];function Xse(){return Xse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x4t=function(t){var n=t.title,r=t.titleId,o=w4t(t,b4t);return c("svg",Xse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.008 2H2.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275v11.436c0 .181.002.245.007.275.03.005.094.007.275.007h11.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V4.62c0-.13-.001-.18-.004-.204a2.654 2.654 0 00-.141-.147L11.73 2.145a2.654 2.654 0 00-.147-.141A2.654 2.654 0 0011.38 2h-.388c.005.08.008.172.008.282v2.436c0 .446-.046.607-.134.77a.909.909 0 01-.378.378c-.163.088-.324.134-.77.134H6.282c-.446 0-.607-.046-.77-.134a.909.909 0 01-.378-.378C5.046 5.325 5 5.164 5 4.718V2.282c0-.11.003-.202.008-.282zM2.282 1h9.098c.259 0 .348.01.447.032a.87.87 0 01.273.113c.086.054.156.11.338.293l2.124 2.124c.182.182.239.252.293.338a.87.87 0 01.113.273c.023.1.032.188.032.447v9.098c0 .446-.046.607-.134.77a.909.909 0 01-.378.378c-.163.088-.324.134-.77.134H2.282c-.446 0-.607-.046-.77-.134a.909.909 0 01-.378-.378c-.088-.163-.134-.324-.134-.77V2.282c0-.446.046-.607.134-.77a.909.909 0 01.378-.378c.163-.088.324-.134.77-.134zM6 2.282v2.436c0 .181.002.245.007.275.03.005.094.007.275.007h3.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V2.282c0-.181-.002-.245-.007-.275A2.248 2.248 0 009.718 2H6.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275zM8 12a2 2 0 110-4 2 2 0 010 4zm0-1a1 1 0 100-2 1 1 0 000 2z"}))},_4t=x4t;var aF={};de(aF,{icon:()=>P4t});var Sbr=V(ne());var S4t=["title","titleId"];function Kse(){return Kse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function I4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k4t=function(t){var n=t.title,r=t.titleId,o=E4t(t,S4t);return c("svg",Kse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M12.5 12a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm4-2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm2-1a.5.5 0 110-1 .5.5 0 010 1zm0-3a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm0 2a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm2-2a.5.5 0 110 1 .5.5 0 010-1zm6-6a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1z"}))},P4t=k4t;var sF={};de(sF,{icon:()=>M4t});var Ibr=V(ne());var j4t=["title","titleId"];function Yse(){return Yse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function T4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var A4t=function(t){var n=t.title,r=t.titleId,o=C4t(t,j4t);return c("svg",Yse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.271 11.978l3.872 3.873a.502.502 0 00.708 0 .502.502 0 000-.708l-3.565-3.564c2.38-2.747 2.267-6.923-.342-9.532-2.73-2.73-7.17-2.73-9.898 0-2.728 2.729-2.728 7.17 0 9.9a6.955 6.955 0 004.949 2.05.5.5 0 000-1 5.96 5.96 0 01-4.242-1.757 6.01 6.01 0 010-8.486c2.337-2.34 6.143-2.34 8.484 0a6.01 6.01 0 010 8.486.5.5 0 00.034.738z"}))},M4t=A4t;var lF={};de(lF,{icon:()=>L4t});var Pbr=V(ne());var R4t=["title","titleId"];function Qse(){return Qse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function z4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var N4t=function(t){var n=t.title,r=t.titleId,o=D4t(t,R4t);return c("svg",Qse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M11.875 3.418a6 6 0 10.707.707l-2.46 2.46-1.156 1.156a1 1 0 11-.707-.707l.757-.757a2 2 0 00-2.43 3.137.5.5 0 11-.707.707 3 3 0 013.86-4.567l.714-.714A4 4 0 108 12a.5.5 0 110 1 5 5 0 113.164-8.871l.71-.71zm.709-.709a7 7 0 10.707.707l.366-.366a.5.5 0 10-.707-.707l-.366.366z"}))},L4t=N4t;var uF={};de(uF,{icon:()=>$4t});var Cbr=V(ne());var F4t=["title","titleId"];function Zse(){return Zse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function W4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H4t=function(t){var n=t.title,r=t.titleId,o=B4t(t,F4t);return c("svg",Zse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 00-.707-.707l-.366.366A7 7 0 108 15a4.994 4.994 0 01-.597-1.03 6 6 0 114.471-10.552l-.71.71a5 5 0 10-4.08 8.788 5.027 5.027 0 01-.082-1.042A4.002 4.002 0 018 4a3.98 3.98 0 012.453.84l-.715.714a3 3 0 00-3.86 4.567.5.5 0 10.708-.707 2 2 0 012.43-3.137l-.757.757a1 1 0 10.707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 011.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-4 .5a.577.577 0 01-.57-.495l-.29-2.015a.867.867 0 111.718 0l-.288 2.015a.577.577 0 01-.57.495zm0 2.5a1 1 0 100-2 1 1 0 000 2z"}))},$4t=H4t;var cF={};de(cF,{icon:()=>J4t});var Abr=V(ne());var V4t=["title","titleId"];function ele(){return ele=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var G4t=function(t){var n=t.title,r=t.titleId,o=q4t(t,V4t);return c("svg",ele({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 10-.707-.707l-.366.366A7 7 0 108 15a4.994 4.994 0 01-.597-1.03 6 6 0 114.471-10.552l-.71.71a5 5 0 10-4.08 8.788 5.028 5.028 0 01-.082-1.042A4.002 4.002 0 018 4a3.98 3.98 0 012.453.84l-.715.714a3 3 0 00-3.86 4.567.5.5 0 10.708-.707 2 2 0 012.43-3.137l-.757.757a1 1 0 10.707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 011.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .707l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.707l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},J4t=G4t;var fF={};de(fF,{icon:()=>Z4t});var Rbr=V(ne());var X4t=["title","titleId"];function tle(){return tle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q4t=function(t){var n=t.title,r=t.titleId,o=K4t(t,X4t);return c("svg",tle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 6h1v1H4V6zm2 2H5V7h1v1zm0 1V8h1v1H6zm-1 1V9h1v1H5zm0 0v1H4v-1h1zm2 0h4v1H7v-1z"}),c("path",{fillRule:"evenodd",d:"M1 3a1 1 0 011-1h12a1 1 0 011 1v10a1 1 0 01-1 1H2a1 1 0 01-1-1V3zm1 1h12v9H2V4z",clipRule:"evenodd"}))},Z4t=Q4t;var pF={};de(pF,{icon:()=>o6t});var zbr=V(ne());var e6t=["title","titleId"];function rle(){return rle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function r6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var n6t=function(t){var n=t.title,r=t.titleId,o=t6t(t,e6t);return c("svg",rle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.134 7.031L8 12.764l2.866-5.733L8 2.016 5.134 7.03zM8 0l4 7-4 8-4-8 4-7z"}))},o6t=n6t;var dF={};de(dF,{icon:()=>u6t});var Lbr=V(ne());var i6t=["title","titleId"];function nle(){return nle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function s6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l6t=function(t){var n=t.title,r=t.titleId,o=a6t(t,i6t);return c("svg",nle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 6.81v6.38c0 .493.448.9.992.9h7.016c.543 0 .992-.406.992-.9V6.81c0-.493-.448-.9-.992-.9H3.992c-.543 0-.992.406-.992.9zM6 5v.91h3V5h2.008C12.108 5 13 5.818 13 6.81v6.38c0 1-.9 1.81-1.992 1.81H3.992C2.892 15 2 14.182 2 13.19V6.81C2 5.81 2.9 5 3.992 5H6zm1.997-3.552A.506.506 0 018 1.5v8a.5.5 0 01-1 0v-8a.51.51 0 010-.017L5.18 3.394a.52.52 0 01-.77 0 .617.617 0 010-.829L6.36.515a1.552 1.552 0 012.31 0l1.95 2.05c.214.229.214.601 0 .83a.52.52 0 01-.77 0L7.997 1.447z"}))},u6t=l6t;var hF={};de(hF,{icon:()=>h6t});var Bbr=V(ne());var c6t=["title","titleId"];function ole(){return ole=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var d6t=function(t){var n=t.title,r=t.titleId,o=f6t(t,c6t);return c("svg",ole({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.007.5a.5.5 0 011 0v2.024a.999.999 0 00.268-.227l1.027-1.233a.5.5 0 01.769.64L8.275 3.86a.999.999 0 01-.268.227v2.548l2.207-1.274c0-.114.02-.231.062-.346l.968-2.632a.5.5 0 11.938.345l-.554 1.506a.998.998 0 00-.062.346l1.753-1.012a.5.5 0 11.5.866l-1.753 1.012c.1.057.21.098.33.119l1.582.273a.5.5 0 11-.17.986l-2.764-.478a1 1 0 01-.33-.12L8.506 7.5l2.207 1.274a1 1 0 01.33-.119l2.764-.478a.5.5 0 11.17.986l-1.582.273a.999.999 0 00-.33.12l1.753 1.011a.5.5 0 11-.5.866l-1.753-1.012c0 .115.02.231.062.346l.554 1.506a.5.5 0 01-.938.345l-.968-2.632a.999.999 0 01-.062-.346L8.007 8.366v2.548c.098.058.19.133.268.227l1.796 2.155a.5.5 0 01-.769.64l-1.027-1.233a.999.999 0 00-.268-.226V14.5a.5.5 0 01-1 0v-2.024a.999.999 0 00-.269.227l-1.027 1.233a.5.5 0 01-.768-.64l1.795-2.155a.999.999 0 01.269-.227V8.366L4.8 9.64c0 .114-.02.231-.062.346l-.969 2.632a.5.5 0 11-.938-.345l.554-1.506a1 1 0 00.062-.346l-1.753 1.012a.5.5 0 01-.5-.866l1.753-1.012a.999.999 0 00-.33-.119l-1.582-.273a.5.5 0 01.17-.986l2.764.478c.12.02.232.062.33.12L6.508 7.5 4.3 6.226a.999.999 0 01-.33.119l-2.765.478a.5.5 0 11-.17-.986l1.582-.273a.999.999 0 00.33-.12L1.194 4.434a.5.5 0 11.5-.866l1.753 1.012c0-.114-.02-.231-.062-.346L2.83 2.727a.5.5 0 11.938-.345l.969 2.632a.999.999 0 01.062.346l2.207 1.274V4.086a1 1 0 01-.269-.227L4.943 1.704a.5.5 0 01.768-.64l1.027 1.233c.079.094.17.17.269.227V.5z"}))},h6t=d6t;var mF={};de(mF,{icon:()=>b6t});var Hbr=V(ne());var m6t=["title","titleId"];function ile(){return ile=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var y6t=function(t){var n=t.title,r=t.titleId,o=v6t(t,m6t);return c("svg",ile({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.308 7h8.136c.307 0 .556.224.556.5s-.249.5-.556.5H4.308l4.096 4.096a.5.5 0 01-.707.707L3.454 8.561a1.494 1.494 0 01-.433-.925.454.454 0 010-.272c.03-.338.175-.666.433-.925l4.243-4.242a.5.5 0 11.707.707L4.308 7z",fillRule:"evenodd"}))},b6t=y6t;var vF={};de(vF,{icon:()=>S6t});var Vbr=V(ne());var w6t=["title","titleId"];function ale(){return ale=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function x6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _6t=function(t){var n=t.title,r=t.titleId,o=O6t(t,w6t);return c("svg",ale({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.692 7H3.556C3.249 7 3 7.224 3 7.5s.249.5.556.5h8.136l-4.096 4.096a.5.5 0 00.707.707l4.243-4.242c.258-.259.403-.587.433-.925a.454.454 0 000-.272 1.494 1.494 0 00-.433-.925L8.303 2.197a.5.5 0 10-.707.707L11.692 7z"}))},S6t=_6t;var gF={};de(gF,{icon:()=>j6t});var Ubr=V(ne());var E6t=["title","titleId"];function sle(){return sle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function k6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var P6t=function(t){var n=t.title,r=t.titleId,o=I6t(t,E6t);return c("svg",sle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 11.692V3.556C7 3.249 7.224 3 7.5 3s.5.249.5.556v8.136l4.096-4.096a.5.5 0 01.707.707l-4.242 4.243a1.494 1.494 0 01-.925.433.454.454 0 01-.272 0 1.494 1.494 0 01-.925-.433L2.197 8.303a.5.5 0 11.707-.707L7 11.692z"}))},j6t=P6t;var yF={};de(yF,{icon:()=>R6t});var Jbr=V(ne());var C6t=["title","titleId"];function lle(){return lle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M6t=function(t){var n=t.title,r=t.titleId,o=T6t(t,C6t);return c("svg",lle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 4.207v8.237c0 .307-.224.556-.5.556s-.5-.249-.5-.556V4.207L2.904 8.303a.5.5 0 01-.707-.707l4.242-4.242a1.5 1.5 0 012.122 0l4.242 4.242a.5.5 0 11-.707.707L8 4.207z"}))},R6t=M6t;var bF={};de(bF,{icon:()=>F6t});var Kbr=V(ne());var D6t=["title","titleId"];function ule(){return ule=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function N6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L6t=function(t){var n=t.title,r=t.titleId,o=z6t(t,D6t);return c("svg",ule({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 12.786V3.2L3.604 6.596a.5.5 0 01-.708-.707l3.536-3.535a1.5 1.5 0 012.121 0l3.536 3.535a.5.5 0 01-.707.707L8 3.214v9.557l3.382-3.382a.5.5 0 01.707.707l-3.536 3.536a1.5 1.5 0 01-2.121 0l-3.536-3.536a.5.5 0 01.708-.707L7 12.786z"}))},F6t=L6t;var wF={};de(wF,{icon:()=>V6t});var Qbr=V(ne());var B6t=["title","titleId"];function cle(){return cle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function H6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $6t=function(t){var n=t.title,r=t.titleId,o=W6t(t,B6t);return c("svg",cle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m8 8h2v1h-2v2h-1v-2h-2v-1h2V8h1v2zM6 3c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3z"}))},V6t=$6t;var OF={};de(OF,{icon:()=>X6t});var e2r=V(ne());var q6t=["title","titleId"];function fle(){return fle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J6t=function(t){var n=t.title,r=t.titleId,o=U6t(t,q6t);return c("svg",fle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M14 10h2v1h-2v2h-1v-2h-2v-1h2V8h1v2zM6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2"}))},X6t=J6t;var xF={};de(xF,{icon:()=>ext});var r2r=V(ne());var K6t=["title","titleId"];function ple(){return ple=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Q6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Z6t=function(t){var n=t.title,r=t.titleId,o=Y6t(t,K6t);return c("svg",ple({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 004.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 008 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126l-2.202 2.226-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L8 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C7.905 3.05 7.927 3 8 3"}))},ext=Z6t;var _F={};de(_F,{icon:()=>ixt});var o2r=V(ne());var txt=["title","titleId"];function dle(){return dle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oxt=function(t){var n=t.title,r=t.titleId,o=rxt(t,txt);return c("svg",dle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3"}))},ixt=oxt;var SF={};de(SF,{icon:()=>cxt});var a2r=V(ne());var axt=["title","titleId"];function hle(){return hle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uxt=function(t){var n=t.title,r=t.titleId,o=sxt(t,axt);return c("svg",hle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 004.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 008 2"}))},cxt=uxt;var EF={};de(EF,{icon:()=>mxt});var l2r=V(ne());var fxt=["title","titleId"];function mle(){return mle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hxt=function(t){var n=t.title,r=t.titleId,o=pxt(t,fxt);return c("svg",mle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2"}))},mxt=hxt;var IF={};de(IF,{icon:()=>wxt});var c2r=V(ne());var vxt=["title","titleId"];function vle(){return vle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bxt=function(t){var n=t.title,r=t.titleId,o=gxt(t,vxt);return c("svg",vle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3zm10 7v1h-5v-1h5z"}))},wxt=bxt;var kF={};de(kF,{icon:()=>Ext});var p2r=V(ne());var Oxt=["title","titleId"];function gle(){return gle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _xt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sxt=function(t){var n=t.title,r=t.titleId,o=xxt(t,Oxt);return c("svg",gle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 01.792.511l1.33 2.924 3.128.446c.71.102 1.001.976.496 1.487L9.433 9.704l.563 3.268A.877.877 0 019.136 14a.862.862 0 01-.429-.116L6 12.342l-2.707 1.542a.862.862 0 01-.43.116.877.877 0 01-.859-1.027l.563-3.269L.254 7.368C-.25 6.857.04 5.983.75 5.88l3.128-.446 1.33-2.923A.86.86 0 016 2zm10 8v1h-5v-1h5z"}))},Ext=Sxt;var PF={};de(PF,{icon:()=>Cxt});var h2r=V(ne());var Ixt=["title","titleId"];function yle(){return yle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jxt=function(t){var n=t.title,r=t.titleId,o=kxt(t,Ixt);return c("svg",yle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 14v-4h1v4h5V5h1v9a1 1 0 01-1 1H2a1 1 0 01-1-1v-2h1v2h6zm4.853-10.146l-2.999 3a1.5 1.5 0 01-2.538 1.568l-2.714.904L4 9.527a1.5 1.5 0 11-.316-.948L7 7.473a1.5 1.5 0 012.146-1.327l3-3a1.5 1.5 0 11.707.707z"}))},Cxt=jxt;var jF={};de(jF,{icon:()=>Dxt});var v2r=V(ne());var Txt=["title","titleId"];function ble(){return ble=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rxt=function(t){var n=t.title,r=t.titleId,o=Axt(t,Txt);return c("svg",ble({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 2h8a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2zm0 1a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V4a1 1 0 00-1-1H4z",fillRule:"evenodd"}))},Dxt=Rxt;var CF={};de(CF,{icon:()=>Bxt});var y2r=V(ne());var zxt=["title","titleId"];function wle(){return wle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fxt=function(t){var n=t.title,r=t.titleId,o=Nxt(t,zxt);return c("svg",wle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("rect",{width:12,height:12,x:2,y:2,rx:2,fillRule:"evenodd"}))},Bxt=Fxt;var TF={};de(TF,{icon:()=>qxt});var w2r=V(ne());var Wxt=["title","titleId"];function Ole(){return Ole=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $xt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vxt=function(t){var n=t.title,r=t.titleId,o=Hxt(t,Wxt);return c("svg",Ole({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.259 3.034A1.001 1.001 0 0012 3H4a1 1 0 00-1 1v8c0 .09.012.176.034.259l9.225-9.225zm.707.707l-9.225 9.225c.083.022.17.034.259.034h8a1 1 0 001-1V4c0-.09-.012-.176-.034-.259zM4 2h8a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2z"}))},qxt=Vxt;var AF={};de(AF,{icon:()=>Kxt});var x2r=V(ne());var Uxt=["title","titleId"];function xle(){return xle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xxt=function(t){var n=t.title,r=t.titleId,o=Gxt(t,Uxt);return c("svg",xle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fillRule:"evenodd",transform:"translate(0 2)"},c("path",{fillRule:"nonzero",d:"M2 6a1 1 0 01-1-1V2a1 1 0 011-1h12a1 1 0 011 1v3a1 1 0 01-1 1H2zm13 2v3a1 1 0 01-1 1H2a1 1 0 01-1-1V8a1 1 0 011-1h12a1 1 0 011 1zm1-3V2a2 2 0 00-2-2H2a2 2 0 00-2 2v3c0 .601.271 1.133.69 1.5C.271 6.867 0 7.399 0 8v3a2 2 0 002 2h12a2 2 0 002-2V8c0-.601-.271-1.133-.689-1.5.418-.367.689-.899.689-1.5z"}),c("circle",{cx:4.5,cy:9.5,r:1.5}),c("circle",{cx:4.5,cy:3.5,r:1.5}),c("path",{d:"M12 8h1v3h-1zM10 8h1v3h-1zM12 2h1v3h-1zM10 2h1v3h-1z"})))},Kxt=Xxt;var MF={};de(MF,{icon:()=>t_t});var S2r=V(ne());var Yxt=["title","titleId"];function _le(){return _le=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e_t=function(t){var n=t.title,r=t.titleId,o=Qxt(t,Yxt);return c("svg",_le({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M9.297 3L8.93 5.102h1.351l-.32 1.828H8.609l-.656 3.883c-.036.265-.02.466.05.601.071.135.247.208.528.219.11.005.334-.008.672-.04L9.016 13.5a4.16 4.16 0 01-1.383.195c-.797-.01-1.393-.244-1.79-.703-.395-.458-.557-1.08-.484-1.867l.688-4.195H5l.313-1.828h1.046L6.727 3h2.57z"}))},t_t=e_t;var RF={};de(RF,{icon:()=>a_t});var I2r=V(ne());var r_t=["title","titleId"];function Sle(){return Sle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i_t=function(t){var n=t.title,r=t.titleId,o=n_t(t,r_t);return c("svg",Sle({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M6 2H1v12h3V7a1 1 0 011-1h5a1 1 0 011 1v1h4V4H7c-.621 0-1-.379-1-1V2zm10 6v6a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75l-.004.206C6.99 2.317 6.974 3 7 3h8a1 1 0 011 1v4zm-1 1h-4a1 1 0 01-1-1V7H5v7h10V9zM2 4.5a.5.5 0 01.5-.5h2a.5.5 0 010 1h-2a.5.5 0 01-.5-.5zM6.5 9a.5.5 0 000 1h2a.5.5 0 000-1h-2z"}))},a_t=i_t;var DF={};de(DF,{icon:()=>f_t});var P2r=V(ne());var s_t=["title","titleId"];function Ele(){return Ele=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c_t=function(t){var n=t.title,r=t.titleId,o=l_t(t,s_t);return c("svg",Ele({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 8a4 4 0 11-8 0 4 4 0 018 0zM7.25.75a.75.75 0 011.5 0v1.5a.75.75 0 11-1.5 0V.75zm0 13a.75.75 0 011.5 0v1.5a.75.75 0 01-1.5 0v-1.5zm5.346-11.407a.75.75 0 011.06 1.06l-1.06 1.061a.75.75 0 01-1.06-1.06l1.06-1.06zm-9.192 9.193a.75.75 0 111.06 1.06l-1.06 1.06a.75.75 0 01-1.06-1.06l1.06-1.06zM.75 8.75a.75.75 0 010-1.5h1.5a.75.75 0 110 1.5H.75zm13 0a.75.75 0 010-1.5h1.5a.75.75 0 010 1.5h-1.5zM2.343 3.404a.75.75 0 111.06-1.06l1.061 1.06a.75.75 0 01-1.06 1.06l-1.06-1.06zm9.193 9.192a.75.75 0 011.06-1.06l1.06 1.06a.75.75 0 01-1.06 1.06l-1.06-1.06z"}))},f_t=c_t;var zF={};de(zF,{icon:()=>v_t});var C2r=V(ne());var p_t=["title","titleId"];function Ile(){return Ile=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function h_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var m_t=function(t){var n=t.title,r=t.titleId,o=d_t(t,p_t);return c("svg",Ile({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("rect",{x:2,y:2,width:12,height:12,rx:3}),c("rect",{className:"euiSwatchInput__stroke",x:2.5,y:2.5,width:11,height:11,rx:2}))},v_t=m_t;var NF={};de(NF,{icon:()=>O_t});var A2r=V(ne());var g_t=["title","titleId"];function kle(){return kle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w_t=function(t){var n=t.title,r=t.titleId,o=y_t(t,g_t);return c("svg",kle({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M10.8 0H2a1 1 0 00-1 1v8l1-1V1h8v3.5a.5.5 0 00.5.5H14v10H2v-1a3.5 3.5 0 013.5-3.5H8V13l3-3-3-3v2.5H5.5A4.5 4.5 0 001 14v1a1 1 0 001 1h12a1 1 0 001-1V4.429c0-.256-.098-.503-.274-.689l-3.2-3.428A1.002 1.002 0 0010.8 0z"}))},O_t=w_t;var LF={};de(LF,{icon:()=>I_t});var R2r=V(ne());var x_t=["title","titleId"];function Ple(){return Ple=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E_t=function(t){var n=t.title,r=t.titleId,o=__t(t,x_t);return c("svg",Ple({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1 1v14h14V1H1zM0 0h16v16H0V0zm9 1v14h1V1H9zM3 3.5h4v-1H3v1zm0 3h4v-1H3v1zm0 3h4v-1H3v1z"}))},I_t=E_t;var FF={};de(FF,{icon:()=>T_t});var z2r=V(ne());var k_t=["title","titleId"];function jle(){return jle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C_t=function(t){var n=t.title,r=t.titleId,o=P_t(t,k_t);return c("svg",jle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.496 7a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 8 6 7.776 6 7.5s.128-.5.286-.5h3.428zM4.496 5a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 6 6 5.776 6 5.5s.128-.5.286-.5h3.428zM4.496 9a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428zm-5.218 2a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 12 6 11.776 6 11.5s.128-.5.286-.5h3.428zm-5.218 2a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm9-6a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0-2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 4a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm-3.782 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 14 6 13.776 6 13.5s.128-.5.286-.5h3.428z"}))},T_t=C_t;var BF={};de(BF,{icon:()=>z_t});var L2r=V(ne());var A_t=["title","titleId"];function Cle(){return Cle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var D_t=function(t){var n=t.title,r=t.titleId,o=M_t(t,A_t);return c("svg",Cle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 7a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 4a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 110-1h6z"}))},z_t=D_t;var WF={};de(WF,{icon:()=>W_t});var B2r=V(ne());var N_t=["title","titleId"];function Tle(){return Tle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var B_t=function(t){var n=t.title,r=t.titleId,o=L_t(t,N_t);return c("svg",Tle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 6a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 7 6 6.776 6 6.5s.128-.5.286-.5h3.428zM4.5 9a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428zM4.5 12a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9-6a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm0 3a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm0 3a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm-3.786 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 13 6 12.776 6 12.5s.128-.5.286-.5h3.428z"}))},W_t=B_t;var HF={};de(HF,{icon:()=>U_t});var H2r=V(ne());var H_t=["title","titleId"];function Ale(){return Ale=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function V_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var q_t=function(t){var n=t.title,r=t.titleId,o=$_t(t,H_t);return c("svg",Ale({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.254 14.97L.996 9.712c-.315-.316-.397-.463-.45-.64a.909.909 0 010-.534c.053-.177.135-.324.45-.64L7.43 1.466c.182-.183.252-.24.338-.293a.87.87 0 01.273-.113c.099-.023.188-.032.446-.032h5.173c.445 0 .607.046.77.133.162.087.29.214.377.377.088.162.134.324.136.769l.015 5.15c0 .259-.009.348-.032.448a.87.87 0 01-.112.273c-.054.087-.111.157-.294.34L8.067 14.97c-.315.315-.462.396-.639.45a.909.909 0 01-.535 0c-.176-.054-.324-.135-.639-.45zm1.106-.707l6.453-6.453c.092-.092.126-.128.141-.147.003-.025.004-.074.004-.204l-.015-5.15c0-.181-.003-.245-.009-.275a2.247 2.247 0 00-.274-.007H8.487c-.13 0-.179.001-.203.004-.02.015-.055.05-.147.141L1.703 8.606a2.248 2.248 0 00-.189.2c.017.024.061.07.19.198l5.257 5.259c.128.128.175.171.2.188.024-.017.071-.06.2-.188zm4.972-10.607a2 2 0 11-2.828 2.828 2 2 0 012.828-2.828zm-.707.707a1 1 0 10-1.414 1.414 1 1 0 001.414-1.414zM6.807 11.28L4.686 9.159a.5.5 0 11.707-.707l2.121 2.12a.5.5 0 11-.707.708zm1.414-1.414l-2.12-2.122a.5.5 0 11.706-.707L8.928 9.16a.5.5 0 11-.707.707z"}))},U_t=q_t;var $F={};de($F,{icon:()=>Y_t});var V2r=V(ne());var G_t=["title","titleId"];function Mle(){return Mle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K_t=function(t){var n=t.title,r=t.titleId,o=J_t(t,G_t);return c("svg",Mle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.553 1.776a.5.5 0 01.894 0l4 8a.5.5 0 01.053.235c-.004.15-.026.396-.084.705a5.538 5.538 0 01-.505 1.512C11.189 13.638 9.906 14.5 8 14.5c-1.906 0-3.19-.862-3.91-2.272a5.538 5.538 0 01-.506-1.512 4.672 4.672 0 01-.084-.705.5.5 0 01.053-.235l4-8zm-3.046 8.329c.009.106.027.253.06.429.079.424.213.848.413 1.238C5.537 12.862 6.487 13.5 8 13.5c1.513 0 2.463-.638 3.02-1.728.2-.39.334-.814.413-1.238.033-.176.051-.323.06-.43L8 3.119l-3.493 6.987z"}))},Y_t=K_t;var VF={};de(VF,{icon:()=>r7t});var U2r=V(ne());var Q_t=["title","titleId"];function Rle(){return Rle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function e7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var t7t=function(t){var n=t.title,r=t.titleId,o=Z_t(t,Q_t);return c("svg",Rle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.5 15a3.5 3.5 0 01-1.75-6.532L7 8.324V2.5A1.496 1.496 0 019.908 2H8.5v1H10v1H8.5v1H10v1H8.5v1H10v1.324l.25.144A3.5 3.5 0 018.5 15M11 7.758V2.5a2.5 2.5 0 10-5 0v5.258a4.5 4.5 0 105 0"}),c("path",{d:"M8.5 9a2.5 2.5 0 110 5 2.5 2.5 0 010-5"}))},r7t=t7t;var qF={};de(qF,{icon:()=>s7t});var J2r=V(ne());var n7t=["title","titleId"];function Dle(){return Dle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function i7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var a7t=function(t){var n=t.title,r=t.titleId,o=o7t(t,n7t);return c("svg",Dle({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.809 8.807a4.5 4.5 0 01-5.572-5.75A5 5 0 003.04 9.31a.5.5 0 01-.966.259 6 6 0 015.672-7.553 4.5 4.5 0 116.117 6.313 6.002 6.002 0 01-7.803 5.409.5.5 0 11.303-.954 5.001 5.001 0 006.445-3.979zM11.859 5H13.5a.5.5 0 000-1H12V1.5a.5.5 0 00-1 0v3a.5.5 0 00.5.5h.36z"}),c("path",{d:"M3.757 15.848l-.776-2.897a1.5 1.5 0 011.06-1.838l2.898-.776a.5.5 0 11.259.966l-2.898.776a.5.5 0 00-.353.613l.776 2.898a.5.5 0 01-.966.258z"}))},s7t=a7t;var UF={};de(UF,{icon:()=>p7t});var K2r=V(ne());var l7t=["title","titleId"];function zle(){return zle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function c7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var f7t=function(t){var n=t.title,r=t.titleId,o=u7t(t,l7t);return c("svg",zle({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7 4.5a.5.5 0 001 0V4h1a1 1 0 001-1V1a1 1 0 00-1-1H6a1 1 0 00-1 1v2a1 1 0 001 1h1v.5zM9 1H6v2h3V1zM2 7.5a.5.5 0 111 0 .5.5 0 01-1 0zM2.5 9a1.5 1.5 0 01-1.415-1H.5a.5.5 0 010-1h.585a1.5 1.5 0 012.83 0h2.17a1.5 1.5 0 012.83 0h2.17a1.5 1.5 0 012.83 0h.585a.5.5 0 010 1h-.585a1.5 1.5 0 01-2.83 0h-2.17a1.5 1.5 0 01-2.83 0h-2.17A1.5 1.5 0 012.5 9zM13 7.5a.5.5 0 10-1 0 .5.5 0 001 0zm-5 0a.5.5 0 10-1 0 .5.5 0 001 0zM2.5 10a.5.5 0 00-.5.5v.5H1a1 1 0 00-1 1v2a1 1 0 001 1h3a1 1 0 001-1v-2a1 1 0 00-1-1H3v-.5a.5.5 0 00-.5-.5zM4 14v-2H1v2h3zm8-3.5a.5.5 0 011 0v.5h1a1 1 0 011 1v2a1 1 0 01-1 1h-3a1 1 0 01-1-1v-2a1 1 0 011-1h1v-.5zm2 2.5v1h-3v-2h3v1z"}))},p7t=f7t;var GF={};de(GF,{icon:()=>g7t});var Q2r=V(ne());var d7t=["title","titleId"];function Nle(){return Nle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v7t=function(t){var n=t.title,r=t.titleId,o=h7t(t,d7t);return c("svg",Nle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13.923 8A5.93 5.93 0 008 2.077 5.93 5.93 0 002.077 8a5.93 5.93 0 006.296 5.912c.328-.021.625.227.625.556a.504.504 0 01-.458.511 7 7 0 116.43-6.333c-.036.398-.487.58-.817.354a.595.595 0 01-.248-.54c.012-.152.018-.305.018-.46zm1.684 3.2l-4.32-3.055c-.56-.396-1.287.059-1.287.8v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598zM7.462 7.462H4.769a.539.539 0 000 1.076H8A.539.539 0 008.538 8V3.692a.539.539 0 00-1.076 0v3.77z",clipRule:"evenodd"}))},g7t=v7t;var JF={};de(JF,{icon:()=>x7t});var e3r=V(ne());var y7t=["title","titleId"];function Lle(){return Lle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function w7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var O7t=function(t){var n=t.title,r=t.titleId,o=b7t(t,y7t);return c("svg",Lle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M9.075 6.953a.5.5 0 11-.707.707 1.5 1.5 0 00-2.122 0L4.125 9.782a1.5 1.5 0 102.121 2.121l1.145-1.144a.5.5 0 01.707.707L6.953 12.61a2.5 2.5 0 11-3.535-3.535l2.121-2.122a2.5 2.5 0 013.536 0zm3.535-3.535a2.5 2.5 0 010 3.535L10.49 9.075a2.5 2.5 0 01-3.536 0 .5.5 0 11.707-.708 1.5 1.5 0 002.122 0l2.121-2.12a1.5 1.5 0 10-2.121-2.122L8.637 5.269a.5.5 0 11-.707-.707l1.145-1.144a2.5 2.5 0 013.535 0z"}))},x7t=O7t;var XF={};de(XF,{icon:()=>k7t});var r3r=V(ne());var _7t=["title","titleId"];function Fle(){return Fle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function E7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var I7t=function(t){var n=t.title,r=t.titleId,o=S7t(t,_7t);return c("svg",Fle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8.15 3.392c2.797 0 4.524 1.644 4.517 4.289.007 1.816-.708 2.893-2.21 3.004-.908.076-1.081-.287-1.157-.725h-.041c-.163.42-.964.732-1.744.683-1.053-.065-2.082-.842-2.09-2.572.008-1.72 1.071-2.441 1.959-2.586.804-.135 1.598.158 1.723.462h.051v-.386h1.195v3.452c.007.3.128.425.304.425.4 0 .677-.583.673-1.861.004-2.376-1.705-2.914-3.187-2.914-2.34 0-3.415 1.522-3.422 3.387.007 2.127 1.22 3.277 3.433 3.277.808 0 1.598-.176 2.006-.349l.393 1.122c-.435.27-1.419.508-2.493.508-2.98 0-4.723-1.66-4.727-4.496.004-2.804 1.748-4.72 4.817-4.72zM7.964 6.79c-.76 0-1.185.459-1.188 1.24.003.683.3 1.332 1.202 1.332.821 0 1.094-.473 1.077-1.343-.004-.718-.204-1.23-1.091-1.23z"}))},k7t=I7t;var KF={};de(KF,{icon:()=>A7t});var o3r=V(ne());var P7t=["title","titleId"];function Ble(){return Ble=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function C7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var T7t=function(t){var n=t.title,r=t.titleId,o=j7t(t,P7t);return c("svg",Ble({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M4.392 12V4h2.713v1.14h-1.21v5.72h1.21V12H4.392zm7.692-8v8H9.37v-1.14h1.209V5.14H9.37V4h2.714z"}))},A7t=T7t;var YF={};de(YF,{icon:()=>N7t});var a3r=V(ne());var M7t=["title","titleId"];function Wle(){return Wle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var z7t=function(t){var n=t.title,r=t.titleId,o=R7t(t,M7t);return c("svg",Wle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M12 4H4v8h8V4zM8.5 5.5h-3v5h3v-5z"}))},N7t=z7t;var QF={};de(QF,{icon:()=>H7t});var l3r=V(ne());var L7t=["title","titleId"];function Hle(){return Hle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var W7t=function(t){var n=t.title,r=t.titleId,o=F7t(t,L7t);return c("svg",Hle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 13A5 5 0 118 3a5 5 0 010 10zm-2.828-2.172a4 4 0 015.656-5.656c.004.013-5.645 5.674-5.656 5.656z"}))},H7t=W7t;var ZF={};de(ZF,{icon:()=>G7t});var c3r=V(ne());var $7t=["title","titleId"];function $le(){return $le=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U7t=function(t){var n=t.title,r=t.titleId,o=V7t(t,$7t);return c("svg",$le({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M11.333 7.027H9.375c-.056-.708-.48-1.187-1.222-1.187-.972 0-1.5.806-1.5 2.16 0 1.43.545 2.16 1.486 2.16.708 0 1.139-.415 1.236-1.08l1.958.015C11.236 10.418 10.181 12 8.097 12c-1.958 0-3.43-1.41-3.43-4 0-2.6 1.514-4 3.43-4 1.792 0 3.084 1.095 3.236 3.027z"}))},G7t=U7t;var eB={};de(eB,{icon:()=>Q7t});var p3r=V(ne());var J7t=["title","titleId"];function Vle(){return Vle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function K7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Y7t=function(t){var n=t.title,r=t.titleId,o=X7t(t,J7t);return c("svg",Vle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M3 4a1 1 0 011-1h8a1 1 0 011 1v5.996a1 1 0 01-1 1h-1.661L7.4 13.2A.25.25 0 017 13v-2.004H4a1 1 0 01-1-1V4zm1.5 1a.5.5 0 01.5-.5h6a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-.9L8 11V9.5H5a.5.5 0 01-.5-.5V5z",clipRule:"evenodd"}),c("path",{d:"M6.75 6a1 1 0 100 2 1 1 0 000-2zm2.5 0a1 1 0 100 2 1 1 0 000-2z"}))},Q7t=Y7t;var tB={};de(tB,{icon:()=>n8t});var h3r=V(ne());var Z7t=["title","titleId"];function qle(){return qle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r8t=function(t){var n=t.title,r=t.titleId,o=e8t(t,Z7t);return c("svg",qle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M9.414 3.757l2.829 2.829a2 2 0 010 2.828l-2.829 2.829a2 2 0 01-2.828 0L3.757 9.414a2 2 0 010-2.828l2.829-2.829a2 2 0 012.828 0zm-1.747 2.91a1 1 0 00-1 1v.666a1 1 0 001 1h.666a1 1 0 001-1v-.666a1 1 0 00-1-1h-.666z"}))},n8t=r8t;var rB={};de(rB,{icon:()=>l8t});var v3r=V(ne());var o8t=["title","titleId"];function Ule(){return Ule=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var s8t=function(t){var n=t.title,r=t.titleId,o=i8t(t,o8t);return c("svg",Ule({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13 11.567C13 12.36 12.36 13 11.567 13H4.433C3.64 13 3 12.36 3 11.567V4.433C3 3.64 3.64 3 4.433 3H6v-.495a.51.51 0 01.412-.497L6.5 2c.276 0 .5.214.5.505V3h2v-.495a.51.51 0 01.412-.497L9.5 2c.276 0 .5.214.5.505V3h1.567C12.36 3 13 3.64 13 4.433v7.134zM4 6v5.33c0 .37.3.67.67.67h6.66c.37 0 .67-.3.67-.67V6H4zm1.5 4c.245 0 .45.183.492.412L6 10.5c0 .245-.183.45-.412.492L5.5 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L5.5 10zM8 10c.245 0 .45.183.492.412l.008.088c0 .245-.183.45-.412.492L8 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 10zm2.5 0c.245 0 .45.183.492.412L11 10.5c0 .245-.183.45-.412.492L10.5 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L10.5 10zm-5-1.5c.245 0 .45.183.492.412L6 9c0 .245-.183.45-.412.492L5.5 9.5A.505.505 0 015 9c0-.245.183-.45.412-.492L5.5 8.5zm2.5 0c.245 0 .45.183.492.412L8.5 9c0 .245-.183.45-.412.492L8 9.5a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 8.5zm2.5 0c.245 0 .45.183.492.412L11 9c0 .245-.183.45-.412.492L10.5 9.5A.505.505 0 0110 9c0-.245.183-.45.412-.492L10.5 8.5zM5.5 7c.245 0 .45.183.492.412L6 7.5c0 .245-.183.45-.412.492L5.5 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L5.5 7zM8 7c.245 0 .45.183.492.412L8.5 7.5c0 .245-.183.45-.412.492L8 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 7zm2.5 0c.245 0 .45.183.492.412L11 7.5c0 .245-.183.45-.412.492L10.5 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L10.5 7zM4 5h8v-.33c0-.37-.3-.67-.67-.67H4.67C4.3 4 4 4.3 4 4.67V5z"}))},l8t=s8t;var nB={};de(nB,{icon:()=>d8t});var y3r=V(ne());var u8t=["title","titleId"];function Gle(){return Gle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function f8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var p8t=function(t){var n=t.title,r=t.titleId,o=c8t(t,u8t);return c("svg",Gle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.154 12V4h2.713v1.14H5.658v5.72h1.21V12H4.153zm7.692-8v8H9.133v-1.14h1.209V5.14h-1.21V4h2.714z"}))},d8t=p8t;var oB={};de(oB,{icon:()=>y8t});var w3r=V(ne());var h8t=["title","titleId"];function Jle(){return Jle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function v8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var g8t=function(t){var n=t.title,r=t.titleId,o=m8t(t,h8t);return c("svg",Jle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.39 9.736l-1.041.94L3.258 8l3.09-2.677 1.041.94-2.032 1.722v.03l2.032 1.721zm2.777.94l-1.04-.94 2.032-1.721v-.03L9.126 6.264l1.04-.94L13.259 8l-3.091 2.677z"}))},y8t=g8t;var iB={};de(iB,{icon:()=>_8t});var x3r=V(ne());var b8t=["title","titleId"];function Xle(){return Xle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x8t=function(t){var n=t.title,r=t.titleId,o=w8t(t,b8t);return c("svg",Xle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M5.211 12V4h5.578v1.57H7.145v1.641h3.359v1.574H7.145v1.645h3.644V12z"}))},_8t=x8t;var aB={};de(aB,{icon:()=>P8t});var S3r=V(ne());var S8t=["title","titleId"];function Kle(){return Kle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function I8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k8t=function(t){var n=t.title,r=t.titleId,o=E8t(t,S8t);return c("svg",Kle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.682 12V9.247l1.023-.861a.5.5 0 00-.003-.768l-1.02-.844V4h5.578v1.57H9.615v1.64h3.36v1.575h-3.36v1.645h3.645V12H7.682zm.743-4.103a.138.138 0 010 .206L6.158 9.97a.133.133 0 01-.218-.103v-.934H2.873A.133.133 0 012.74 8.8V7.2c0-.074.06-.133.133-.133H5.94v-.934a.133.133 0 01.218-.103l2.267 1.867z"}))},P8t=k8t;var sB={};de(sB,{icon:()=>M8t});var I3r=V(ne());var j8t=["title","titleId"];function Yle(){return Yle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function T8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var A8t=function(t){var n=t.title,r=t.titleId,o=C8t(t,j8t);return c("svg",Yle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M11.225 5.656c0 .423-.106.79-.318 1.102-.211.311-.51.57-.898.775a5.435 5.435 0 01-1.392.485c-.54.117-1.14.193-1.798.229a6.047 6.047 0 00-.035.67c0 .258.02.51.062.757.04.247.114.464.22.652s.25.34.432.458.414.176.696.176c.211 0 .467-.044.766-.132.3-.088.62-.244.96-.467.106-.07.192-.129.256-.176a.365.365 0 01.22-.07c.118 0 .197.061.238.185a.99.99 0 01.062.255 7.1 7.1 0 01-.573.467 4.93 4.93 0 01-.775.467c-.288.141-.6.261-.934.361-.335.1-.678.15-1.03.15-.541 0-.982-.088-1.322-.264a2.072 2.072 0 01-.793-.688 2.626 2.626 0 01-.388-.933 4.949 4.949 0 01-.106-1.005c0-.634.103-1.257.309-1.868.205-.61.499-1.157.88-1.638.383-.482.838-.87 1.366-1.163A3.567 3.567 0 019.093 4c.599 0 1.104.126 1.515.379.411.252.617.678.617 1.277zm-2.467-.951c-.223 0-.435.08-.635.238-.2.158-.381.373-.546.643-.164.27-.305.578-.423.925a6.42 6.42 0 00-.264 1.101c.47-.047.863-.135 1.18-.264.318-.13.57-.285.758-.467.188-.182.323-.388.405-.617.083-.229.124-.467.124-.713 0-.27-.056-.479-.168-.626a.519.519 0 00-.431-.22z"}))},M8t=A8t;var lB={};de(lB,{icon:()=>L8t});var P3r=V(ne());var R8t=["title","titleId"];function Qle(){return Qle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function z8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var N8t=function(t){var n=t.title,r=t.titleId,o=D8t(t,R8t);return c("svg",Qle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.461 7.31h3.055a.74.74 0 01.66 1.074l-2.141 4.211a.74.74 0 11-1.319-.67L9.31 8.79H6.256a.74.74 0 01-.66-1.075l2.19-4.31a.74.74 0 011.319.67L7.461 7.31z"}))},L8t=N8t;var uB={};de(uB,{icon:()=>$8t});var C3r=V(ne());var F8t=["title","titleId"];function Zle(){return Zle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function W8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H8t=function(t){var n=t.title,r=t.titleId,o=B8t(t,F8t);return c("svg",Zle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M5.27 12V4h5.46v1.57H7.203v1.641h3.18v1.574h-3.18V12z"}))},$8t=H8t;var cB={};de(cB,{icon:()=>J8t});var A3r=V(ne());var V8t=["title","titleId"];function eue(){return eue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var G8t=function(t){var n=t.title,r=t.titleId,o=q8t(t,V8t);return c("svg",eue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.867 2.667H4a.667.667 0 00-.667.666v9.334c0 .368.299.666.667.666h8a.667.667 0 00.667-.666V5.619a.669.669 0 00-.183-.459l-2.133-2.285a.668.668 0 00-.484-.208m1.466 4V12H4.667V4h4v2.333c0 .184.149.334.333.334h2.333z"}))},J8t=G8t;var fB={};de(fB,{icon:()=>Z8t});var R3r=V(ne());var X8t=["title","titleId"];function tue(){return tue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q8t=function(t){var n=t.title,r=t.titleId,o=K8t(t,X8t);return c("svg",tue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3.25 3a.25.25 0 00-.25.25v2c0 .138.112.25.25.25h9.5a.25.25 0 00.25-.25v-2a.25.25 0 00-.25-.25h-9.5zm0 3.75A.25.25 0 003 7v2c0 .138.112.25.25.25H5.5A.25.25 0 005.75 9V7a.25.25 0 00-.25-.25H3.25zm-.25 4a.25.25 0 01.25-.25H5.5a.25.25 0 01.25.25v2a.25.25 0 01-.25.25H3.25a.25.25 0 01-.25-.25v-2zm3.31-.727c-.082-.073-.082-.224 0-.296l3.054-2.683a.17.17 0 01.19-.026c.064.032.104.1.104.174v1.341l3.161-.016c.1 0 .18.086.18.192v2.3c0 .105-.08.191-.18.191l-3.161.017v1.341c0 .074-.04.142-.103.174a.17.17 0 01-.19-.025L6.31 10.023z"}))},Z8t=Q8t;var pB={};de(pB,{icon:()=>oSt});var z3r=V(ne());var eSt=["title","titleId"];function rue(){return rue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nSt=function(t){var n=t.title,r=t.titleId,o=tSt(t,eSt);return c("svg",rue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M11.266 4.15V5.63a2.41 2.41 0 00-.859-.145c-.692 0-1.065.346-1.177 1.043l-.11.625h1.828v1.44H8.921l-.204 1.115C8.455 11.325 7.517 12 5.9 12c-.469 0-.882-.061-1.166-.167v-1.495c.273.117.591.178.903.178.659 0 1.01-.29 1.127-1.015l.157-.91H5.247V7.152h1.837l.188-.842C7.534 4.714 8.432 4 10.19 4c.39 0 .853.067 1.076.15z"}))},oSt=nSt;var dB={};de(dB,{icon:()=>uSt});var L3r=V(ne());var iSt=["title","titleId"];function nue(){return nue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lSt=function(t){var n=t.title,r=t.titleId,o=aSt(t,iSt);return c("svg",nue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 3c1.636 0 3.088.785 4 2 .628.836 1 1.875 1 3a4.978 4.978 0 01-.999 3H12a4.992 4.992 0 01-4 2 4.992 4.992 0 01-4-1.999V11a5 5 0 014-8zm.948 8H7.052c.277.626.623 1 .948 1 .325 0 .67-.374.948-1zM6 11l-.645.001c.274.242.581.446.914.606A5.445 5.445 0 016 11.001zm4.645.001H10a5.51 5.51 0 01-.269.606c.333-.16.64-.364.914-.606zm-5.133-2.5H4.031c.068.54.243 1.048.505 1.5h1.172a9.186 9.186 0 01-.196-1.5zm3.975 0H6.513c.03.544.104 1.05.21 1.5h2.553c.107-.45.182-.956.21-1.5zm2.482 0h-1.481a9.186 9.186 0 01-.196 1.5h1.172c.262-.452.437-.96.505-1.5zM5.708 6L4.535 6c-.261.452-.437.96-.504 1.5h1.481A9.187 9.187 0 015.708 6zm3.568 0H6.724c-.107.449-.182.955-.21 1.499h2.973a8.479 8.479 0 00-.21-1.5zM11.465 6h-1.173c.102.467.17.972.196 1.5h1.481a3.974 3.974 0 00-.504-1.5zM6.269 4.393l-.124.062c-.286.15-.551.333-.79.545H6a5.51 5.51 0 01.269-.607zM8 4c-.326 0-.671.375-.948 1h1.896C8.671 4.376 8.326 4 8 4zm1.73.393l.038.071c.083.168.161.347.232.536h.646a4.006 4.006 0 00-.915-.607z"}))},uSt=lSt;var hB={};de(hB,{icon:()=>hSt});var B3r=V(ne());var cSt=["title","titleId"];function oue(){return oue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dSt=function(t){var n=t.title,r=t.titleId,o=fSt(t,cSt);return c("svg",oue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 3h4v5h2V5.5h4V13H3.001v-1H3V3zm1 9h2V4H4v8zm3 0h2V9H7v3zm3 0h2V6.5h-2V12z"}))},hSt=dSt;var mB={};de(mB,{icon:()=>bSt});var H3r=V(ne());var mSt=["title","titleId"];function iue(){return iue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ySt=function(t){var n=t.title,r=t.titleId,o=vSt(t,mSt);return c("svg",iue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M11 3a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h6zm-1 2H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5zM6 5H5v6h1V5zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984z"}))},bSt=ySt;var vB={};de(vB,{icon:()=>SSt});var V3r=V(ne());var wSt=["title","titleId"];function aue(){return aue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _St=function(t){var n=t.title,r=t.titleId,o=OSt(t,wSt);return c("svg",aue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8.967 10.653h1.727V12H5.306v-1.347h1.727V5.347H5.306V4h5.388v1.347H8.967v5.306z"}))},SSt=_St;var gB={};de(gB,{icon:()=>jSt});var U3r=V(ne());var ESt=["title","titleId"];function sue(){return sue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PSt=function(t){var n=t.title,r=t.titleId,o=ISt(t,ESt);return c("svg",sue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.5 4.5v1.025c0 1.269-1.185 1.908-2.112 1.737a.75.75 0 100 1.475c.927-.17 2.112.47 2.112 1.739v1.023h4v-1.005a2.5 2.5 0 010-4.988V4.5h-4zM13 4a1 1 0 00-1-1H7a1 1 0 00-1 1v1.525c0 .172-.172.293-.341.262a2.25 2.25 0 100 4.426c.17-.031.341.09.341.262V12a1 1 0 001 1h5a1 1 0 001-1V9.004a.16.16 0 00-.04-.105c-.109-.125-.594-.16-.732-.068a1 1 0 110-1.662c.138.092.623.057.732-.068a.16.16 0 00.04-.105V4z"}))},jSt=PSt;var yB={};de(yB,{icon:()=>RSt});var J3r=V(ne());var CSt=["title","titleId"];function lue(){return lue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ASt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MSt=function(t){var n=t.title,r=t.titleId,o=TSt(t,CSt);return c("svg",lue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M12.667 6.542A3.208 3.208 0 018.86 9.694l-.438.492a.437.437 0 01-.327.147h-.678v.73a.437.437 0 01-.438.437H6.25v.73a.437.437 0 01-.438.437H3.772a.437.437 0 01-.438-.438v-1.423c0-.116.046-.227.128-.31l2.95-2.949a3.208 3.208 0 013.047-4.214 3.202 3.202 0 013.209 3.209zm-3.209-.875a.875.875 0 101.75 0 .875.875 0 00-1.75 0z"}))},RSt=MSt;var bB={};de(bB,{icon:()=>FSt});var K3r=V(ne());var DSt=["title","titleId"];function uue(){return uue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LSt=function(t){var n=t.title,r=t.titleId,o=zSt(t,DSt);return c("svg",uue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.33 10.28c-.12.04-.29.07-.42.07-.23 0-.43-.08-.53-.3l-.63-1.34 2.32-2.81H9.3L7.76 7.93h-.09L8.22 4H6.59l-1.05 7.5h1.63l.27-1.94h.1l.43 1.12c.27.71.74.92 1.33.92.23 0 .6-.04.86-.11l.17-1.21z"}))},FSt=LSt;var wB={};de(wB,{icon:()=>VSt});var Q3r=V(ne());var BSt=["title","titleId"];function cue(){return cue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $St=function(t){var n=t.title,r=t.titleId,o=WSt(t,BSt);return c("svg",cue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M3.333 11.027V5.05h2.059v1.136h.063c.25-.747.891-1.214 1.728-1.214.848 0 1.524.483 1.65 1.214h.063c.204-.731.927-1.214 1.822-1.214 1.155 0 1.949.798 1.949 2.023v4.03h-2.169V7.542c0-.521-.29-.84-.738-.84s-.723.319-.723.84v3.486H6.963V7.54c0-.521-.29-.84-.739-.84-.447 0-.722.319-.722.84v3.486H3.333z"}))},VSt=$St;var OB={};de(OB,{icon:()=>XSt});var e5r=V(ne());var qSt=["title","titleId"];function fue(){return fue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JSt=function(t){var n=t.title,r=t.titleId,o=USt(t,qSt);return c("svg",fue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11 3a1 1 0 00-1 1v1H9a1 1 0 000 2h1v1a1 1 0 102 0V7h1a1 1 0 100-2h-1V4a1 1 0 00-1-1zM5 7a1 1 0 00-1 1v1H3a1 1 0 000 2h1v1a1 1 0 102 0v-1h1a1 1 0 100-2H6V8a1 1 0 00-1-1z"}))},XSt=JSt;var xB={};de(xB,{icon:()=>eEt});var r5r=V(ne());var KSt=["title","titleId"];function pue(){return pue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZSt=function(t){var n=t.title,r=t.titleId,o=YSt(t,KSt);return c("svg",pue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 4h-.5a.5.5 0 010-1h1a.5.5 0 01.5.5v9a.5.5 0 01-.5.5h-1a.5.5 0 010-1H5v-2h-.5a.5.5 0 010-1H5V7h-.5a.5.5 0 010-1H5V4zm3 1a1 1 0 00-1 1v6a1 1 0 001 1h2a1 1 0 001-1V6a1 1 0 00-1-1H8z"}))},eEt=ZSt;var _B={};de(_B,{icon:()=>iEt});var o5r=V(ne());var tEt=["title","titleId"];function due(){return due=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oEt=function(t){var n=t.title,r=t.titleId,o=rEt(t,tEt);return c("svg",due({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 2l5.196 3v.178l-.866.468V5.5L8 3 3.67 5.5v5L8 13l4.33-2.5V5.77l.866-.474V11L8 14l-5.196-3V5L8 2z"}),c("path",{d:"M5.243 4.429L9.597 7.04 8 7.928 3.743 5.563a.5.5 0 10-.486.874L7.5 8.794V13.5h1V8.794l4.243-2.357a.508.508 0 00.06-.04l.392-.202V5.047l-.917.505a.573.573 0 00-.02.01l-.106.06-.191.105-1.355.753-4.849-2.909-.514.858z"}))},iEt=oEt;var SB={};de(SB,{icon:()=>cEt});var a5r=V(ne());var aEt=["title","titleId"];function hue(){return hue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uEt=function(t){var n=t.title,r=t.titleId,o=sEt(t,aEt);return c("svg",hue({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.556 8.416l-.804-1.68h-.036v5.64H5V4h1.992l2.292 3.96.804 1.68h.036V4h1.716v8.376H9.848l-2.292-3.96z"}))},cEt=uEt;var EB={};de(EB,{icon:()=>mEt});var l5r=V(ne());var fEt=["title","titleId"];function mue(){return mue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hEt=function(t){var n=t.title,r=t.titleId,o=pEt(t,fEt);return c("svg",mue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fillRule:"evenodd"},c("path",{d:"M11 3c1.044 0 1.913.757 1.994 1.736l.006.149v6.23c0 1-.82 1.805-1.845 1.88L11 13H9.501a.5.5 0 01-.09-.992l.09-.008H11c.52 0 .937-.35.993-.783l.007-.102v-6.23c0-.445-.379-.827-.882-.879L11 4H9.5a.5.5 0 01-.09-.992L9.5 3H11zM6.5 3a.5.5 0 01.09.992L6.5 4H5c-.52 0-.937.35-.993.783L4 4.885v6.23c0 .445.379.827.882.879L5 12h1.5a.5.5 0 01.09.992L6.5 13H5c-1.044 0-1.913-.757-1.994-1.736L3 11.115v-6.23c0-1 .82-1.805 1.845-1.88L5 3h1.5z"}),c("path",{d:"M5.864 7.25a.714.714 0 110 1.429.714.714 0 010-1.429zm2.143 0a.714.714 0 110 1.429.714.714 0 010-1.429zm2.143 0a.714.714 0 110 1.429.714.714 0 010-1.429z"})))},mEt=hEt;var IB={};de(IB,{icon:()=>wEt});var c5r=V(ne());var vEt=["title","titleId"];function vue(){return vue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bEt=function(t){var n=t.title,r=t.titleId,o=gEt(t,vEt);return c("svg",vue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.002 12.412l-.962.962a1 1 0 01-1.414-1.414l.962-.962a5.333 5.333 0 017.41-7.41l.962-.962a1 1 0 111.414 1.414l-.962.962a5.333 5.333 0 01-7.41 7.41zm.966-.966a4 4 0 005.478-5.478l-5.478 5.478zm-1.414-1.414l5.478-5.478a4 4 0 00-5.478 5.478z"}))},wEt=bEt;var kB={};de(kB,{icon:()=>EEt});var p5r=V(ne());var OEt=["title","titleId"];function gue(){return gue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Et(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SEt=function(t){var n=t.title,r=t.titleId,o=xEt(t,OEt);return c("svg",gue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.8 9.812h-.842l-.78 2.335H5.031l.78-2.335H4.6l.182-1.043h1.373l.507-1.504H5.454l.188-1.042h1.367l.792-2.37H8.94l-.792 2.37h.849l.792-2.37h1.145l-.792 2.37H11.4l-.182 1.042H9.8L9.293 8.77h1.248l-.183 1.043H8.946l-.775 2.335H7.026L7.8 9.812zm-.5-1.043h.842l.513-1.504h-.849L7.3 8.77z"}))},EEt=SEt;var PB={};de(PB,{icon:()=>CEt});var h5r=V(ne());var IEt=["title","titleId"];function yue(){return yue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jEt=function(t){var n=t.title,r=t.titleId,o=kEt(t,IEt);return c("svg",yue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6.63 12c-1.294 0-2.383-.105-2.383-1.802V9.6c0-.638-.247-.914-.98-.914v-1.37c.733 0 .98-.28.98-.915v-.6C4.247 4.105 5.336 4 6.631 4v1.14c-.759 0-.886.272-.886.843v.813c0 .479-.225.936-1.212 1.133v.142c.987.197 1.212.654 1.212 1.133v.813c0 .57.127.844.886.844V12zm2.266-8c1.295 0 2.384.105 2.384 1.802V6.4c0 .638.247.914.98.914v1.37c-.733 0-.98.28-.98.915v.6C11.28 11.895 10.19 12 8.896 12v-1.14c.759 0 .886-.272.886-.843v-.813c0-.479.225-.936 1.212-1.133V7.93c-.987-.197-1.212-.654-1.212-1.133v-.813c0-.57-.127-.844-.886-.844V4z"}))},CEt=jEt;var jB={};de(jB,{icon:()=>DEt});var v5r=V(ne());var TEt=["title","titleId"];function bue(){return bue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var REt=function(t){var n=t.title,r=t.titleId,o=AEt(t,TEt);return c("svg",bue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M2.667 8.002c0-1.5.394-2.743 1.248-3.822h1.437c-.652.8-1.14 2.388-1.14 3.822 0 1.43.488 3.018 1.14 3.818H3.915c-.854-1.08-1.248-2.322-1.248-3.818zM6.77 9.998l-.818-.803 1.23-1.197-1.23-1.203.83-.793 1.221 1.193L9.23 6.002l.818.793-1.227 1.2 1.227 1.2-.818.803L8 8.795 6.77 9.998zm6.563-2c0 1.5-.394 2.743-1.248 3.822h-1.437c.652-.8 1.14-2.388 1.14-3.822 0-1.43-.488-3.018-1.14-3.818h1.437c.854 1.08 1.248 2.322 1.248 3.818z"}))},DEt=REt;var CB={};de(CB,{icon:()=>BEt});var y5r=V(ne());var zEt=["title","titleId"];function wue(){return wue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FEt=function(t){var n=t.title,r=t.titleId,o=NEt(t,zEt);return c("svg",wue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8.049 3.785l3.852 1.006-4.049 1.103L4 4.791l3.951-1.006a.19.19 0 01.098 0zm.073 2.654l4.545-1.306v5.45l-.131.184-4.414 1.455V6.439zm-4.789 4.145V5.188L7.498 6.41v5.81l-4.034-1.453-.13-.183z"}))},BEt=FEt;var TB={};de(TB,{icon:()=>qEt});var w5r=V(ne());var WEt=["title","titleId"];function Oue(){return Oue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $Et(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VEt=function(t){var n=t.title,r=t.titleId,o=HEt(t,WEt);return c("svg",Oue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433z"}))},qEt=VEt;var AB={};de(AB,{icon:()=>KEt});var x5r=V(ne());var UEt=["title","titleId"];function xue(){return xue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XEt=function(t){var n=t.title,r=t.titleId,o=GEt(t,UEt);return c("svg",xue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M5.5 7a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm0 1a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM11 9a1 1 0 100-2 1 1 0 000 2zm0 1a2 2 0 100-4 2 2 0 000 4zm-2.5 1.5a.5.5 0 11-1 0 .5.5 0 011 0zm1 0a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z"}))},KEt=XEt;var MB={};de(MB,{icon:()=>t9t});var S5r=V(ne());var YEt=["title","titleId"];function _ue(){return _ue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e9t=function(t){var n=t.title,r=t.titleId,o=QEt(t,YEt);return c("svg",_ue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433z"}))},t9t=e9t;var RB={};de(RB,{icon:()=>a9t});var I5r=V(ne());var r9t=["title","titleId"];function Sue(){return Sue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i9t=function(t){var n=t.title,r=t.titleId,o=n9t(t,r9t);return c("svg",Sue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fillRule:"evenodd"},c("path",{d:"M9.82 5.116a.5.5 0 00-.704.704l.064.064L11.719 8l-2.54 2.116a.5.5 0 00-.114.63l.05.074a.5.5 0 00.63.115l.075-.05 3-2.5a.5.5 0 00.071-.697l-.07-.072-3-2.5zM6.18 5.116a.5.5 0 01.704.704l-.064.064L4.281 8l2.54 2.116a.5.5 0 01.114.63l-.05.074a.5.5 0 01-.63.115l-.075-.05-3-2.5a.5.5 0 01-.071-.697l.07-.072 3-2.5z"})))},a9t=i9t;var DB={};de(DB,{icon:()=>f9t});var P5r=V(ne());var s9t=["title","titleId"];function Eue(){return Eue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c9t=function(t){var n=t.title,r=t.titleId,o=l9t(t,s9t);return c("svg",Eue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6z"}))},f9t=c9t;var zB={};de(zB,{icon:()=>v9t});var C5r=V(ne());var p9t=["title","titleId"];function Iue(){return Iue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function h9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var m9t=function(t){var n=t.title,r=t.titleId,o=d9t(t,p9t);return c("svg",Iue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6z"}))},v9t=m9t;var NB={};de(NB,{icon:()=>O9t});var A5r=V(ne());var g9t=["title","titleId"];function kue(){return kue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w9t=function(t){var n=t.title,r=t.titleId,o=y9t(t,g9t);return c("svg",kue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8.533 9.067c-1.792 0-2.378.72-2.57 1.194a1.601 1.601 0 11-1.163-.037V5.776a1.595 1.595 0 01-1.067-1.51c0-.885.715-1.6 1.6-1.6.886 0 1.6.715 1.6 1.6 0 .7-.442 1.291-1.066 1.51v2.821C6.336 8.251 7.019 8 8 8c1.424 0 1.899-.715 2.053-1.19a1.603 1.603 0 01-.986-1.477c0-.885.714-1.6 1.6-1.6.885 0 1.6.715 1.6 1.6a1.59 1.59 0 01-1.115 1.526c-.139.762-.656 2.208-2.619 2.208zm-3.2 2.133a.535.535 0 00-.533.533c0 .294.24.534.533.534a.535.535 0 000-1.067zm0-7.467a.535.535 0 00-.533.534c0 .293.24.533.533.533.294 0 .534-.24.534-.533a.535.535 0 00-.534-.534zM10.667 4.8a.535.535 0 00-.534.533.535.535 0 001.067 0 .535.535 0 00-.533-.533z"}))},O9t=w9t;var LB={};de(LB,{icon:()=>I9t});var R5r=V(ne());var x9t=["title","titleId"];function Pue(){return Pue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E9t=function(t){var n=t.title,r=t.titleId,o=_9t(t,x9t);return c("svg",Pue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.27 7.5a1 1 0 112 0 1 1 0 01-2 0zM8.77 7.5a1 1 0 112 0 1 1 0 01-2 0z"}),c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.702 10.682a4.501 4.501 0 01-5.796.482L4.28 12.789a.75.75 0 01-1.06-1.06L4.847 10.1a4.501 4.501 0 116.855.581zm-5.304-1.06a3 3 0 104.243-4.243A3 3 0 006.398 9.62z"}))},I9t=E9t;var FB={};de(FB,{icon:()=>T9t});var z5r=V(ne());var k9t=["title","titleId"];function jue(){return jue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C9t=function(t){var n=t.title,r=t.titleId,o=P9t(t,k9t);return c("svg",jue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13 10v3h-3v-1H6v1H3v-3h1V6H3V3h3v1h4V3h3v3h-1v4h1zm-8 1H4v1h1v-1zm7 0h-1v1h1v-1zM5 4H4v1h1V4zm7 0h-1v1h1V4zm-1 2h-1V5H6v1H5v4h1v1h4v-1h1V6z"}))},T9t=C9t;var BB={};de(BB,{icon:()=>z9t});var L5r=V(ne());var A9t=["title","titleId"];function Cue(){return Cue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var D9t=function(t){var n=t.title,r=t.titleId,o=M9t(t,A9t);return c("svg",Cue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.147 4.297l-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78z"}))},z9t=D9t;var WB={};de(WB,{icon:()=>W9t});var B5r=V(ne());var N9t=["title","titleId"];function Tue(){return Tue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var B9t=function(t){var n=t.title,r=t.titleId,o=L9t(t,N9t);return c("svg",Tue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M4.667 4.667h2.666v2.666H4.667V4.667zm0 4h2.666v2.666H4.667V8.667zm4-4h2.666v2.666H8.667V4.667zm0 4h2.666v2.666H8.667V8.667zM3.333 3.333v9.334h9.334V3.333H3.333zm0-1.333h9.334C13.403 2 14 2.597 14 3.333v9.334c0 .736-.597 1.333-1.333 1.333H3.333A1.333 1.333 0 012 12.667V3.333C2 2.597 2.597 2 3.333 2z"}))},W9t=B9t;var HB={};de(HB,{icon:()=>U9t});var H5r=V(ne());var H9t=["title","titleId"];function Aue(){return Aue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function V9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var q9t=function(t){var n=t.title,r=t.titleId,o=$9t(t,H9t);return c("svg",Aue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.316 14a6 6 0 110-12 6 6 0 010 12zm0-1.333a4.667 4.667 0 100-9.334 4.667 4.667 0 000 9.334zm2.19-5.72h1.143c.019 1.448-.793 2.338-1.922 2.338-.632 0-1.194-.267-1.706-.811-.36-.397-.636-.576-1-.576-.517 0-.849.355-.885 1.083H4.983c.014-1.47.858-2.314 1.95-2.314.595 0 1.125.249 1.678.802.392.382.641.595 1.038.595.484 0 .857-.323.857-1.116z"}))},U9t=q9t;var $B={};de($B,{icon:()=>Y9t});var V5r=V(ne());var G9t=["title","titleId"];function Mue(){return Mue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K9t=function(t){var n=t.title,r=t.titleId,o=J9t(t,G9t);return c("svg",Mue({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10 8a1 1 0 11-2 0 1 1 0 012 0z"}),c("path",{fillRule:"evenodd",d:"M4 4a1 1 0 00-1 1v6a1 1 0 001 1h6.989a1 1 0 00.825-.436l2.05-3a1 1 0 000-1.128l-2.05-3A1 1 0 0010.99 4H4zm.75 1.25a.5.5 0 00-.5.5v4.5a.5.5 0 00.5.5h5.745a.5.5 0 00.405-.206l1.636-2.25a.5.5 0 000-.588L10.9 5.456a.5.5 0 00-.405-.206H4.75z"}))},Y9t=K9t;var VB={};de(VB,{icon:()=>rIt});var U5r=V(ne());var Q9t=["title","titleId"];function Rue(){return Rue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tIt=function(t){var n=t.title,r=t.titleId,o=Z9t(t,Q9t);return c("svg",Rue({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.147 4.297l-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78z"}))},rIt=tIt;var qB={};de(qB,{icon:()=>sIt});var J5r=V(ne());var nIt=["title","titleId"];function Due(){return Due=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aIt=function(t){var n=t.title,r=t.titleId,o=oIt(t,nIt);return c("svg",Due({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 4H3v3h5V4zM13 9H8v3h5V9zM10 4h3v3h-3V4zM6 9H3v3h3V9z"}))},sIt=aIt;var UB={};de(UB,{icon:()=>pIt});var K5r=V(ne());var lIt=["title","titleId"];function zue(){return zue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fIt=function(t){var n=t.title,r=t.titleId,o=uIt(t,lIt);return c("svg",zue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6.649 4.667l1.326 4.7h.05l1.326-4.7h1.982l-2.134 6.666H6.801L4.667 4.667z"}))},pIt=fIt;var GB={};de(GB,{icon:()=>gIt});var Q5r=V(ne());var dIt=["title","titleId"];function Nue(){return Nue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vIt=function(t){var n=t.title,r=t.titleId,o=hIt(t,dIt);return c("svg",Nue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.386 9.836a2.5 2.5 0 113.611.667C15.212 11.173 16 12.46 16 14v1.5a.5.5 0 11-1 0V14c0-1.724-1.276-3-3-3-.91 0-1.298-.02-1.805-.122-1.25-.254-2.333-1-3.585-2.566a.5.5 0 11.78-.624c.9 1.124 1.653 1.74 2.434 2.043.155.052.345.083.562.105zm1.785.128c.083.01.167.021.251.034L12.5 10a1.5 1.5 0 10-.33-.036zM9.78 11.97a.5.5 0 01.5.5c0 .076-.047.226-.05.231-.179.38-.23.774-.23 1.302v1.5a.5.5 0 11-1 0v-1.5c0-.657.072-1.186.307-1.696a.5.5 0 01.473-.337zM5.958 5.772a.5.5 0 01-.78.625L3.11 3.812a.5.5 0 11.78-.624l2.068 2.584zM1 11h5.5a.5.5 0 110 1h-6a.5.5 0 01-.5-.5V.5A.5.5 0 01.5 0h12a.5.5 0 01.5.5v3a.5.5 0 11-1 0V1H1v10z"}))},gIt=vIt;var JB={};de(JB,{icon:()=>xIt});var ewr=V(ne());var yIt=["title","titleId"];function Lue(){return Lue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OIt=function(t){var n=t.title,r=t.titleId,o=bIt(t,yIt);return c("svg",Lue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11 3h5v1H0V3h5V1a1 1 0 011-1h4a1 1 0 011 1v2zm-7.056 8H7v1H4.1l.392 2.519c.042.269.254.458.493.458h6.03c.239 0 .451-.189.493-.458l1.498-9.576H14l-1.504 9.73c-.116.747-.74 1.304-1.481 1.304h-6.03c-.741 0-1.365-.557-1.481-1.304l-1.511-9.73H9V5.95H3.157L3.476 8H8v1H3.632l.312 2zM6 3h4V1H6v2z"}))},xIt=OIt;var XB={};de(XB,{icon:()=>kIt});var rwr=V(ne());var _It=["title","titleId"];function Fue(){return Fue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IIt=function(t){var n=t.title,r=t.titleId,o=SIt(t,_It);return c("svg",Fue({viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.14 3.808L7.53 1.51a.67.67 0 01.942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 000-.93L9.416.578a2.02 2.02 0 00-2.832 0l-2.388 2.3a.65.65 0 000 .93c.26.256.683.256.944 0zm0 8.384l2.39 2.298a.67.67 0 00.942 0l2.389-2.298a.677.677 0 01.944 0 .65.65 0 010 .93l-2.388 2.3a2.02 2.02 0 01-2.832 0l-2.388-2.3a.65.65 0 010-.93.677.677 0 01.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},kIt=IIt;var KB={};de(KB,{icon:()=>AIt});var owr=V(ne());var PIt=["title","titleId"];function Bue(){return Bue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TIt=function(t){var n=t.title,r=t.titleId,o=jIt(t,PIt);return c("svg",Bue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.565 10.83a.5.5 0 11.819.573l-1.877 2.68c-.963 1.376-3.02 1.55-4.588.45C.35 13.436-.191 11.445.773 10.07L3.64 5.973c.963-1.375 3.019-1.548 4.587-.45a.5.5 0 11-.573.82C6.509 5.54 5.08 5.66 4.46 6.546l-2.868 4.095c-.621.887-.245 2.27.9 3.073 1.146.802 2.575.682 3.196-.205l1.877-2.68z"}),c("path",{d:"M7.892 3.43a.5.5 0 11-.574-.819L10 .734c1.376-.963 3.367-.422 4.465 1.146 1.098 1.569.926 3.625-.45 4.588L9.918 9.336c-1.375.963-3.366.422-4.464-1.146a.5.5 0 11.819-.574c.802 1.146 2.185 1.522 3.072.9L13.44 5.65c.886-.621 1.006-2.05.204-3.195-.802-1.146-2.186-1.522-3.072-.9L7.892 3.43zM6 .5v3a.5.5 0 01-1 0v-3a.5.5 0 011 0zM1.058 2.23l2.458 1.72a.5.5 0 01-.574.82L.484 3.05a.5.5 0 11.574-.82zm12 7.093l2.457 1.72a.5.5 0 11-.573.82l-2.457-1.72a.5.5 0 11.573-.82zm-2.099 1.181v3a.5.5 0 11-1 0v-3a.5.5 0 111 0z"}))},AIt=TIt;var YB={};de(YB,{icon:()=>NIt});var awr=V(ne());var MIt=["title","titleId"];function Wue(){return Wue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zIt=function(t){var n=t.title,r=t.titleId,o=RIt(t,MIt);return c("svg",Wue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 9a4 4 0 100-8 4 4 0 000 8zm0-1a3 3 0 100-6 3 3 0 000 6z",clipRule:"evenodd"}),c("path",{d:"M15 14.291A9.053 9.053 0 008 11a9.053 9.053 0 00-7 3.291l.715.71A8.047 8.047 0 018 11.996 8.047 8.047 0 0114.286 15l.714-.71z"}))},NIt=zIt;var QB={};de(QB,{icon:()=>HIt});var lwr=V(ne());var LIt=["title","titleId"];function Hue(){return Hue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WIt=function(t){var n=t.title,r=t.titleId,o=FIt(t,LIt);return c("svg",Hue({xmlns:"http://www.w3.org/2000/svg",width:18,height:18,viewBox:"0 0 18 18","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fillRule:"evenodd"},c("path",{d:"M13.689 11.132c1.155 1.222 1.953 2.879 2.183 4.748a1.007 1.007 0 01-1 1.12H3.007a1.005 1.005 0 01-1-1.12c.23-1.87 1.028-3.526 2.183-4.748.247.228.505.442.782.633-1.038 1.069-1.765 2.55-1.972 4.237L14.872 16c-.204-1.686-.93-3.166-1.966-4.235a7.01 7.01 0 00.783-.633zM8.939 1c1.9 0 3 2 4.38 2.633a2.483 2.483 0 01-1.88.867c-.298 0-.579-.06-.844-.157A3.726 3.726 0 017.69 5.75c-1.395 0-3.75.25-3.245-1.903C5.94 3 6.952 1 8.94 1z"}),c("path",{d:"M8.94 2c2.205 0 4 1.794 4 4s-1.795 4-4 4c-2.207 0-4-1.794-4-4s1.793-4 4-4m0 9A5 5 0 108.937.999 5 5 0 008.94 11"})))},HIt=WIt;var ZB={};de(ZB,{icon:()=>GIt});var cwr=V(ne());var $It=["title","titleId"];function $ue(){return $ue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UIt=function(t){var n=t.title,r=t.titleId,o=VIt(t,$It);return c("svg",$ue({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M5.482 4.344a2 2 0 10-2.963 0c-.08.042-.156.087-.23.136-.457.305-.75.704-.933 1.073A3.457 3.457 0 001 6.978V9a1 1 0 001 1h2.5a3.69 3.69 0 01.684-.962L5.171 9H2V7s0-2 2-2c1.007 0 1.507.507 1.755 1.01.225-.254.493-.47.793-.636a2.717 2.717 0 00-1.066-1.03zM4 4a1 1 0 100-2 1 1 0 000 2zm10 6h-2.5a3.684 3.684 0 00-.684-.962L10.829 9H14V7s0-2-2-2c-1.007 0-1.507.507-1.755 1.01a3.012 3.012 0 00-.793-.636 2.716 2.716 0 011.066-1.03 2 2 0 112.963 0c.08.042.156.087.23.136.457.305.75.704.933 1.073A3.453 3.453 0 0115 6.944V9a1 1 0 01-1 1zm-2-6a1 1 0 100-2 1 1 0 000 2z"}),c("path",{fillRule:"evenodd",d:"M10 8c0 .517-.196.989-.518 1.344a2.755 2.755 0 011.163 1.21A3.453 3.453 0 0111 11.977V14a1 1 0 01-1 1H6a1 1 0 01-1-1v-2.022a2.005 2.005 0 01.006-.135 3.456 3.456 0 01.35-1.29 2.755 2.755 0 011.162-1.21A2 2 0 1110 8zm-4 4v2h4v-2s0-2-2-2-2 2-2 2zm3-4a1 1 0 11-2 0 1 1 0 012 0z"}))},GIt=UIt;var eW={};de(eW,{icon:()=>QIt});var pwr=V(ne());var JIt=["title","titleId"];function Vue(){return Vue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YIt=function(t){var n=t.title,r=t.titleId,o=XIt(t,JIt);return c("svg",Vue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.5 11V5H11V3.5H5V5H3.5v6H5v1.5h6V11h1.5zm1 0H15v4h-4v-1.5H5V15H1v-4h1.5V5H1V1h4v1.5h6V1h4v4h-1.5v6zM4 4V2H2v2h2zm8 0h2V2h-2v2zM2 14h2v-2H2v2zm10 0h2v-2h-2v2z"}))},QIt=YIt;var tW={};de(tW,{icon:()=>nkt});var hwr=V(ne());var ZIt=["title","titleId"];function que(){return que=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rkt=function(t){var n=t.title,r=t.titleId,o=ekt(t,ZIt);return c("svg",que({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994zM1 4h14v1H1V4zm1.5-1a.5.5 0 010-1h1a.5.5 0 010 1h-1zm3 0a.5.5 0 010-1h1a.5.5 0 010 1h-1zm4.947 6.106a1 1 0 010 1.788l-3 2A1 1 0 016 12V8a1 1 0 011.447-.894l3 2zM10 10L7 8v4l3-2z"}))},nkt=rkt;var rW={};de(rW,{icon:()=>lkt});var vwr=V(ne());var okt=["title","titleId"];function Uue(){return Uue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function akt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var skt=function(t){var n=t.title,r=t.titleId,o=ikt(t,okt);return c("svg",Uue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 13h10V9.913l-2.571-2.826L8.56 8.753a.5.5 0 01-.728-.067L4.448 4.317 3 6.191V13zm5.295-5.35l1.837-1.64a.5.5 0 01.703.037l3.035 3.336a.5.5 0 01.13.337v3.78a.5.5 0 01-.5.5h-11a.5.5 0 01-.5-.5V6.02a.5.5 0 01.104-.305l1.947-2.52a.5.5 0 01.791-.001L8.295 7.65zM1 15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14a.5.5 0 011 0V15z"}))},lkt=skt;var nW={};de(nW,{icon:()=>dkt});var ywr=V(ne());var ukt=["title","titleId"];function Gue(){return Gue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pkt=function(t){var n=t.title,r=t.titleId,o=ckt(t,ukt);return c("svg",Gue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M.5 1a.5.5 0 01.5.5V15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14A.5.5 0 01.5 1zm4.342 2.194L8.295 7.65l1.837-1.64a.5.5 0 01.703.037l3.035 3.336a.5.5 0 01.13.337v3.78a.5.5 0 01-.5.5h-11a.5.5 0 01-.5-.5V6.02a.5.5 0 01.104-.305l1.947-2.52a.5.5 0 01.791-.001zm-.394 1.123L3 6.191v4.101l1.146-1.146a.5.5 0 01.493-.126l.085.033L8.5 10.94l1.776-.888a.5.5 0 01.36-.034l.088.034L13 11.19V9.913l-2.571-2.826L8.56 8.753a.5.5 0 01-.728-.067L4.448 4.317z"}))},dkt=pkt;var oW={};de(oW,{icon:()=>ykt});var wwr=V(ne());var hkt=["title","titleId"];function Jue(){return Jue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gkt=function(t){var n=t.title,r=t.titleId,o=mkt(t,hkt);return c("svg",Jue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.5 10h-6a.5.5 0 010-1H8V6H2.5a.5.5 0 010-1H13V2H2.5a.5.5 0 010-1h11a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H9v3h2.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-9a.5.5 0 110-1H11v-3H8.5zM0 .5a.5.5 0 111 0v14a.5.5 0 11-1 0V.5z"}))},ykt=gkt;var iW={};de(iW,{icon:()=>_kt});var xwr=V(ne());var bkt=["title","titleId"];function Xue(){return Xue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Okt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xkt=function(t){var n=t.title,r=t.titleId,o=wkt(t,bkt);return c("svg",Xue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M.5 0a.5.5 0 01.5.5v14a.5.5 0 11-1 0V.5A.5.5 0 01.5 0zm13 1a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H9v3h2.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-9a.5.5 0 110-1H9v-3H2.5a.5.5 0 010-1H6V6H2.5a.5.5 0 010-1H10V2H2.5a.5.5 0 010-1h11z"}))},_kt=xkt;var aW={};de(aW,{icon:()=>Pkt});var Swr=V(ne());var Skt=["title","titleId"];function Kue(){return Kue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ikt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kkt=function(t){var n=t.title,r=t.titleId,o=Ekt(t,Skt);return c("svg",Kue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10 7.5v6a.5.5 0 11-1 0V8H6v5.5a.5.5 0 11-1 0V3H2v10.5a.5.5 0 11-1 0v-11a.5.5 0 01.5-.5h4a.5.5 0 01.5.5V7h3V4.5a.5.5 0 01.5-.5h4a.5.5 0 01.5.5v9a.5.5 0 11-1 0V5h-3v2.5zM.5 16a.5.5 0 110-1h14a.5.5 0 110 1H.5z"}))},Pkt=kkt;var sW={};de(sW,{icon:()=>Mkt});var Iwr=V(ne());var jkt=["title","titleId"];function Yue(){return Yue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Akt=function(t){var n=t.title,r=t.titleId,o=Ckt(t,jkt);return c("svg",Yue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14.5 15a.5.5 0 110 1H.5a.5.5 0 110-1h14zm-9-13a.5.5 0 01.5.5L5.999 7H9V4.5a.5.5 0 01.5-.5h4a.5.5 0 01.5.5v9a.5.5 0 11-1 0V7h-3v6.5a.5.5 0 01-.41.492L9.5 14a.5.5 0 01-.5-.5V10H6v3.5a.5.5 0 01-.992.09L5 13.5V6H2v7.5a.5.5 0 11-1 0v-11a.5.5 0 01.5-.5h4z"}))},Mkt=Akt;var lW={};de(lW,{icon:()=>Lkt});var Pwr=V(ne());var Rkt=["title","titleId"];function Que(){return Que=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nkt=function(t){var n=t.title,r=t.titleId,o=Dkt(t,Rkt);return c("svg",Que({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.877 5.847l-1.02 1.02a.5.5 0 01-.708-.707l1.1-1.099c-.05-.053-.1-.106-.152-.157A6.471 6.471 0 008 3.019V4.5a.5.5 0 01-1 0V3.019a6.47 6.47 0 00-4.261 2.055l1.07 1.071a.5.5 0 01-.706.707l-.99-.99A6.46 6.46 0 001.018 10H2.5a.5.5 0 110 1H1.174c.083.353.196.697.337 1.03a.5.5 0 11-.922.39A7.487 7.487 0 010 9.5a7.483 7.483 0 012.197-5.304A7.487 7.487 0 017.5 2a7.487 7.487 0 015.304 2.197A7.483 7.483 0 0115 9.5a7.487 7.487 0 01-.59 2.92.5.5 0 01-.92-.39c.14-.333.253-.677.336-1.03H12.5a.5.5 0 110-1h1.481a6.483 6.483 0 00-1.104-4.153zm-6.041 5.317a.993.993 0 01-.01-1.404c.384-.385 2.882-2.002 3.149-1.735.267.267-1.35 2.765-1.735 3.15a.993.993 0 01-1.404-.01z"}))},Lkt=Nkt;var uW={};de(uW,{icon:()=>$kt});var Cwr=V(ne());var Fkt=["title","titleId"];function Zue(){return Zue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hkt=function(t){var n=t.title,r=t.titleId,o=Bkt(t,Fkt);return c("svg",Zue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.725 3.653a6 6 0 012.847 7.576.5.5 0 01-.928-.372 5 5 0 10-9.293-.014.5.5 0 01-.218.619L1.39 12.47a.5.5 0 01-.708-.23A7.99 7.99 0 010 9a8 8 0 0111.212-7.329.5.5 0 01.234.704l-.721 1.278zm-.933-.38l.5-.889a7 7 0 00-8.902 8.93l.886-.511a6 6 0 017.516-7.53zM6.73 9.467a1.75 1.75 0 112.539 0 2 2 0 11-2.539 0zM8 12.013a1 1 0 100-2 1 1 0 000 2zm0-3a.75.75 0 100-1.5.75.75 0 000 1.5z"}))},$kt=Hkt;var cW={};de(cW,{icon:()=>Jkt});var Awr=V(ne());var Vkt=["title","titleId"];function ece(){return ece=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ukt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gkt=function(t){var n=t.title,r=t.titleId,o=qkt(t,Vkt);return c("svg",ece({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.654 3.48c.248.225.552.389.888.467L11.24 9.43a1.99 1.99 0 00-.915-.404l2.33-5.547zM9.146 9.19a2.008 2.008 0 00-.769.64l-1.572-2c.311-.136.581-.35.785-.618l1.556 1.978zM5.581 7.956l-2.134 4.268a.5.5 0 01-.894-.448l2.134-4.268c.25.22.557.376.894.448zM1 15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14a.5.5 0 011 0V15zm5-8a1 1 0 110-2 1 1 0 010 2zm4 5a1 1 0 110-2 1 1 0 010 2zm4-9a1 1 0 110-2 1 1 0 010 2z"}))},Jkt=Gkt;var fW={};de(fW,{icon:()=>Zkt});var Rwr=V(ne());var Xkt=["title","titleId"];function tce(){return tce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ykt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qkt=function(t){var n=t.title,r=t.titleId,o=Kkt(t,Xkt);return c("svg",tce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.5 15C5.77 15 2 9.97 2 6.595 2 3.507 4.46 1 7.5 1S13 3.507 13 6.595C13 9.97 9.23 15 7.5 15zm0-1c.286 0 1.48-1.044 2.459-2.35C11.219 9.969 12 8.153 12 6.596 12 4.055 9.983 2 7.5 2S3 4.055 3 6.595c0 1.557.78 3.373 2.041 5.056C6.02 12.956 7.214 14 7.5 14zm0-4.996a2.5 2.5 0 110-5 2.5 2.5 0 010 5zm0-1a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"}))},Zkt=Qkt;var pW={};de(pW,{icon:()=>oPt});var zwr=V(ne());var ePt=["title","titleId"];function rce(){return rce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nPt=function(t){var n=t.title,r=t.titleId,o=tPt(t,ePt);return c("svg",rce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.5 2.309v8.69a.499.499 0 01-.032.176L9.5 12.691V3.809l-3-1.5zm-1-.04L2 3.825v8.906l3.527-1.568a.5.5 0 01-.027-.164V2.27zm.274-1.216a.498.498 0 01.471.01l3.768 1.884 4.284-1.904A.5.5 0 0115 1.5v10a.5.5 0 01-.297.457l-4.5 2a.5.5 0 01-.427-.01l-3.789-1.894-4.283 1.904a.5.5 0 01-.703-.457v-10a.5.5 0 01.297-.457l4.476-1.99zM10.5 3.825v8.906l3.5-1.556V2.27l-3.5 1.556z"}))},oPt=nPt;var dW={};de(dW,{icon:()=>uPt});var Lwr=V(ne());var iPt=["title","titleId"];function nce(){return nce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lPt=function(t){var n=t.title,r=t.titleId,o=aPt(t,iPt);return c("svg",nce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.532 7.34a2.161 2.161 0 112.936 0 2.746 2.746 0 11-2.936 0zM2 0h12a2 2 0 012 2v12a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2zm0 1a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1V2a1 1 0 00-1-1H2zm6 5.915a1.161 1.161 0 100-2.322 1.161 1.161 0 000 2.322zm0 4.492a1.746 1.746 0 100-3.492 1.746 1.746 0 000 3.492z"}))},uPt=lPt;var hW={};de(hW,{icon:()=>hPt});var Bwr=V(ne());var cPt=["title","titleId"];function oce(){return oce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dPt=function(t){var n=t.title,r=t.titleId,o=fPt(t,cPt);return c("svg",oce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.5 9a.5.5 0 01-.5-.5V3.023A5.5 5.5 0 1011.978 9H6.5zM7 8h5.5a.5.5 0 01.5.5A6.5 6.5 0 116.5 2a.5.5 0 01.5.5V8zm2-6.972V6h4.972C13.696 3.552 11.448 1.304 9 1.028zM14.5 7h-6a.5.5 0 01-.5-.5v-6a.5.5 0 01.5-.5C11.853 0 15 3.147 15 6.5a.5.5 0 01-.5.5zM6.146 8.854a.5.5 0 11.708-.708l4 4a.5.5 0 01-.708.708l-4-4z"}))},hPt=dPt;var mW={};de(mW,{icon:()=>bPt});var Hwr=V(ne());var mPt=["title","titleId"];function ice(){return ice=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yPt=function(t){var n=t.title,r=t.titleId,o=vPt(t,mPt);return c("svg",ice({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 6a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 3a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 3a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 110-1h6z"}))},bPt=yPt;var vW={};de(vW,{icon:()=>SPt});var Vwr=V(ne());var wPt=["title","titleId"];function ace(){return ace=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _Pt=function(t){var n=t.title,r=t.titleId,o=OPt(t,wPt);return c("svg",ace({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.5 9.047a.5.5 0 100 1h13a.5.5 0 000-1h-13zm0-1h13a1.5 1.5 0 010 3h-13a1.5 1.5 0 010-3zM10 13a.5.5 0 110 1H4a.5.5 0 110-1h6zM8.001 2.015a.5.5 0 11-.002 1l-5-.015a.5.5 0 11.003-1l5 .015zM14 5a.5.5 0 110 1H6a.5.5 0 010-1h8z"}))},SPt=_Pt;var gW={};de(gW,{icon:()=>jPt});var Uwr=V(ne());var EPt=["title","titleId"];function sce(){return sce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PPt=function(t){var n=t.title,r=t.titleId,o=IPt(t,EPt);return c("svg",sce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.5 5v6h2a.5.5 0 110 1h-5a.5.5 0 110-1h2V5H5v.5a.5.5 0 01-1 0v-1a.5.5 0 01.5-.5h7a.5.5 0 01.5.51l-.021 1a.5.5 0 11-1-.02l.01-.49H8.5zM1 15h1.5a.5.5 0 110 1h-2a.5.5 0 01-.5-.5v-1.996a.5.5 0 011 0V15zM1 1v1.497a.5.5 0 11-1 0V.5A.5.5 0 01.5 0h2a.5.5 0 010 1H1zm14 0h-1.495a.5.5 0 010-1H15.5a.5.5 0 01.5.5v2a.5.5 0 11-1 0V1zm0 14v-1.5a.5.5 0 111 0v2a.5.5 0 01-.5.5h-2a.5.5 0 110-1H15zM0 6.5a.5.5 0 011 0v3a.5.5 0 01-1 0v-3zM9.5 0a.5.5 0 010 1h-3a.5.5 0 010-1h3zM15 6.5a.5.5 0 111 0v3a.5.5 0 11-1 0v-3zM9.5 15a.5.5 0 110 1h-3a.5.5 0 110-1h3z"}))},jPt=PPt;var yW={};de(yW,{icon:()=>RPt});var Jwr=V(ne());var CPt=["title","titleId"];function lce(){return lce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function APt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MPt=function(t){var n=t.title,r=t.titleId,o=TPt(t,CPt);return c("svg",lce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.884 1.802c1.171-.309 2.22-.24 3.103.07.295.104.507.212.631.292l.164.106.048.188c.278 1.066.2 2.175-.091 3.23a6.728 6.728 0 01-.194.598c.035.12.074.273.112.454.227 1.065.247 2.193-.08 3.267a4.855 4.855 0 01-.534 1.175c-.324.514-.7.954-1.117 1.323-.806.712-1.616 1.071-2.235 1.206-.14.179-.346.381-.629.578-.643.447-1.493.711-2.561.711-1.07 0-1.92-.264-2.563-.711a2.874 2.874 0 01-.629-.578c-.618-.134-1.428-.493-2.232-1.203-.419-.37-.796-.81-1.12-1.326a4.855 4.855 0 01-.534-1.175C.096 8.933.116 7.805.343 6.74a6.74 6.74 0 01.112-.454 6.728 6.728 0 01-.194-.598C-.03 4.633-.108 3.524.17 2.458l.048-.188.164-.106c.124-.08.336-.188.63-.291.885-.31 1.933-.38 3.104-.07.184-.108.434-.23.748-.348C5.616 1.17 6.497 1 7.501 1c1.002 0 1.883.17 2.634.455.315.119.565.24.75.347zm3.027 1.116a3.13 3.13 0 00-.255-.102c-.749-.263-1.66-.309-2.708.007l-.238.072-.201-.147c-.11-.08-.354-.217-.728-.358C9.14 2.147 8.38 2 7.501 2c-.88 0-1.641.147-2.283.39-.373.141-.617.278-.727.358l-.2.147-.24-.072c-1.048-.316-1.958-.27-2.707-.007a3.13 3.13 0 00-.255.102c-.167.812-.094 1.674.136 2.503.084.303.166.524.217.637l.082.182-.066.19c-.032.09-.084.27-.137.518-.195.914-.212 1.88.059 2.767.1.333.241.645.423.935.273.434.588.801.936 1.108.434.383.898.655 1.36.834.27.105.474.155.575.17l.248.034.12.22c.051.091.199.266.466.452.476.33 1.127.532 1.993.532.865 0 1.516-.202 1.99-.532.268-.186.416-.36.466-.452l.121-.22.248-.034c.101-.015.305-.065.576-.17.462-.18.927-.452 1.362-.836.347-.307.66-.674.933-1.107.182-.29.322-.601.423-.934.271-.887.254-1.853.06-2.767a4.597 4.597 0 00-.138-.519l-.066-.189.082-.182c.05-.113.133-.334.217-.637.23-.829.303-1.691.136-2.503zM5 5.008c.004.181-.048.364-.264.616-.428.498-.985.488-1.431.049-.326-.321-.325-.732-.29-1.047.085-.76.748-.722 1.262-.44.486.27.717.616.723.823zm5 0c.006-.206.237-.553.724-.821.514-.283 1.176-.321 1.26.44.036.314.038.725-.288 1.046-.446.44-1.005.449-1.433-.05-.217-.25-.267-.434-.263-.614zM7.5 8c-.503 0-.976-.24-1.375-.672-.398-.432-.592-1.126 0-1.528.384-.259 1.082-.3 1.375-.3.294 0 .991.041 1.375.3.593.402.397 1.096 0 1.528C8.477 7.76 8.002 8 7.5 8zm0 1c.808 0 2.656.994 2.49 2.074-.153.993-2.114.925-2.49.925-.374 0-2.336.068-2.49-.925C4.845 9.994 6.693 9 7.5 9z"}))},RPt=MPt;var bW={};de(bW,{icon:()=>FPt});var Kwr=V(ne());var DPt=["title","titleId"];function uce(){return uce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LPt=function(t){var n=t.title,r=t.titleId,o=zPt(t,DPt);return c("svg",uce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2.414 8.036L4.89 10.51a.5.5 0 01-.707.708L1.354 8.389a.5.5 0 010-.707l2.828-2.828a.5.5 0 11.707.707L2.414 8.036zm8.768 2.474l2.475-2.474-2.475-2.475a.5.5 0 01.707-.707l2.829 2.828a.5.5 0 010 .707l-2.829 2.829a.5.5 0 11-.707-.708zM8.559 2.506a.5.5 0 01.981.19L7.441 13.494a.5.5 0 01-.981-.19L8.559 2.506z"}))},FPt=LPt;var wW={};de(wW,{icon:()=>VPt});var Qwr=V(ne());var BPt=["title","titleId"];function cce(){return cce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $Pt=function(t){var n=t.title,r=t.titleId,o=WPt(t,BPt);return c("svg",cce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.837 7c.11.93.165 1.886.165 2.869V13.5a.5.5 0 11-1 0V9.869A23.3 23.3 0 008.83 7H7.29c-.195 1.04-.292 1.985-.292 2.835V13.5a.5.5 0 11-1 0V9.835c0-.864.092-1.809.276-2.835H2.5a.5.5 0 01-.495-.57c.285-2.023 1.626-3.358 3.931-3.96 1.967-.514 4.22-.606 6.756-.278A1.5 1.5 0 0114 3.679V5.5A1.5 1.5 0 0112.5 7H9.837zm-.569-1H12.5a.5.5 0 00.5-.5V3.68a.5.5 0 00-.436-.497c-2.416-.311-4.54-.225-6.375.254C4.494 3.88 3.491 4.724 3.117 6H9.268zM2 10v3.5a.5.5 0 11-1 0v-4a.5.5 0 01.5-.5h3a.5.5 0 01.5.5v4a.5.5 0 11-1 0V10H2zm10 3.5a.5.5 0 11-1 0v-2a.5.5 0 01.5-.5h3a.5.5 0 01.5.5v2a.5.5 0 11-1 0V12h-2v1.5zM1.016 16.026a.5.5 0 010-1H15a.5.5 0 110 1H1.016z"}))},VPt=$Pt;var OW={};de(OW,{icon:()=>XPt});var eOr=V(ne());var qPt=["title","titleId"];function fce(){return fce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JPt=function(t){var n=t.title,r=t.titleId,o=UPt(t,qPt);return c("svg",fce({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 3h12v1H2V3zm0 8h6v1H2v-1z"}),c("path",{d:"M2 7h9.5v.5V7h.039l.083.005a2.958 2.958 0 011.102.298c.309.154.633.394.88.763.248.373.396.847.396 1.434 0 .588-.148 1.061-.396 1.434a2.257 2.257 0 01-.88.763 2.957 2.957 0 01-1.185.302h-.025l-.009.001h-.003s-.002 0-.002-.5v.5H11v1l-2-1.5 2-1.5v1h.506l.044-.003a1.959 1.959 0 00.726-.195c.191-.095.367-.23.495-.423.127-.19.229-.466.229-.879s-.102-.689-.229-.879a1.256 1.256 0 00-.495-.424 1.958 1.958 0 00-.77-.197H2V7z"}))},XPt=JPt;var xW={};de(xW,{icon:()=>ejt});var rOr=V(ne());var KPt=["title","titleId"];function pce(){return pce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZPt=function(t){var n=t.title,r=t.titleId,o=YPt(t,KPt);return c("svg",pce({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14 3.5L12 2v1H2v1h10v1l2-1.5zM12 9V8H2V7h10V6l2 1.5L12 9zm0 3v1l2-1.5-2-1.5v1H2v1h10z"}))},ejt=ZPt;var _W={};de(_W,{icon:()=>ijt});var oOr=V(ne());var tjt=["title","titleId"];function dce(){return dce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function njt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ojt=function(t){var n=t.title,r=t.titleId,o=rjt(t,tjt);return c("svg",dce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.918 9.746l4.537 4.537a2 2 0 102.828-2.829l-3.157-3.156a.5.5 0 01.708-.708l3.156 3.157a3 3 0 11-4.243 4.243l-4.949-4.95a5.001 5.001 0 01-5.22-7.106.5.5 0 01.805-.138L3.676 5.09a1 1 0 101.415-1.414L2.797 1.382a.5.5 0 01.138-.805 5.001 5.001 0 113.983 9.169zM1.226 4.054a4.002 4.002 0 006.693 3.865 4 4 0 00-3.865-6.693l1.744 1.743a2 2 0 11-2.829 2.828L1.226 4.054zm10.229 8.814a1 1 0 111.414-1.414 1 1 0 01-1.414 1.414z"}))},ijt=ojt;var B6e=V(ne()),Yp=V(er()),W6e=V(Ar());var SU={accessibility:"accessibility",addDataApp:"app_add_data",advancedSettingsApp:"app_advanced_settings",agentApp:"app_fleet",aggregate:"aggregate",alert:"alert",analyzeEvent:"analyzeEvent",annotation:"annotation",apmApp:"app_apm",apmTrace:"apm_trace",appSearchApp:"app_app_search",apps:"apps",arrowDown:"arrow_down",arrowLeft:"arrow_left",arrowRight:"arrow_right",arrowUp:"arrow_up",arrowStart:"arrowStart",arrowEnd:"arrowEnd",asterisk:"asterisk",auditbeatApp:"app_auditbeat",beaker:"beaker",bell:"bell",bellSlash:"bellSlash",bolt:"bolt",boxesHorizontal:"boxes_horizontal",boxesVertical:"boxes_vertical",branch:"branch",branchUser:"branchUser",broom:"broom",brush:"brush",bug:"bug",bullseye:"bullseye",calendar:"calendar",canvasApp:"app_canvas",casesApp:"app_cases",check:"check",checkInCircleFilled:"checkInCircleFilled",cheer:"cheer",classificationJob:"ml_classification_job",clock:"clock",cloudDrizzle:"cloudDrizzle",cloudStormy:"cloudStormy",cloudSunny:"cloudSunny",cluster:"cluster",codeApp:"app_code",color:"color",compute:"compute",console:"console",consoleApp:"app_console",container:"container",continuityAbove:"continuityAbove",continuityAboveBelow:"continuityAboveBelow",continuityBelow:"continuityBelow",continuityWithin:"continuityWithin",controlsHorizontal:"controls_horizontal",controlsVertical:"controls_vertical",copy:"copy",copyClipboard:"copy_clipboard",createAdvancedJob:"ml_create_advanced_job",createMultiMetricJob:"ml_create_multi_metric_job",createPopulationJob:"ml_create_population_job",createSingleMetricJob:"ml_create_single_metric_job",cross:"cross",crossClusterReplicationApp:"app_cross_cluster_replication",crossInACircleFilled:"crossInACircleFilled",crosshairs:"crosshairs",currency:"currency",cut:"cut",dashboardApp:"app_dashboard",dataVisualizer:"ml_data_visualizer",database:"database",desktop:"desktop",devToolsApp:"app_devtools",discoverApp:"app_discover",document:"document",documentEdit:"documentEdit",documentation:"documentation",documents:"documents",dot:"dot",doubleArrowLeft:"doubleArrowLeft",doubleArrowRight:"doubleArrowRight",download:"download",editorAlignCenter:"editor_align_center",editorAlignLeft:"editor_align_left",editorAlignRight:"editor_align_right",editorBold:"editor_bold",editorChecklist:"editor_checklist",editorCodeBlock:"editor_code_block",editorComment:"editor_comment",editorDistributeHorizontal:"editorDistributeHorizontal",editorDistributeVertical:"editorDistributeVertical",editorHeading:"editor_heading",editorItalic:"editor_italic",editorItemAlignBottom:"editorItemAlignBottom",editorItemAlignCenter:"editorItemAlignCenter",editorItemAlignLeft:"editorItemAlignLeft",editorItemAlignMiddle:"editorItemAlignMiddle",editorItemAlignRight:"editorItemAlignRight",editorItemAlignTop:"editorItemAlignTop",editorLink:"editor_link",editorOrderedList:"editor_ordered_list",editorPositionBottomLeft:"editorPositionBottomLeft",editorPositionBottomRight:"editorPositionBottomRight",editorPositionTopLeft:"editorPositionTopLeft",editorPositionTopRight:"editorPositionTopRight",editorRedo:"editor_redo",editorStrike:"editor_strike",editorTable:"editor_table",editorUnderline:"editor_underline",editorUndo:"editor_undo",editorUnorderedList:"editor_unordered_list",email:"email",empty:"empty",emsApp:"app_ems",eql:"eql",eraser:"eraser",exit:"exit",expand:"expand",expandMini:"expandMini",exportAction:"export",eye:"eye",eyeClosed:"eye_closed",faceHappy:"face_happy",faceNeutral:"face_neutral",faceSad:"face_sad",filebeatApp:"app_filebeat",filter:"filter",flag:"flag",fleetApp:"app_agent",fold:"fold",folderCheck:"folder_check",folderClosed:"folder_closed",folderExclamation:"folder_exclamation",folderOpen:"folder_open",frameNext:"frameNext",framePrevious:"framePrevious",fullScreen:"full_screen",fullScreenExit:"fullScreenExit",function:"function",gear:"gear",gisApp:"app_gis",glasses:"glasses",globe:"globe",grab:"grab",grabHorizontal:"grab_horizontal",graphApp:"app_graph",grid:"grid",grokApp:"app_grok",heart:"heart",heartbeatApp:"app_heartbeat",heatmap:"heatmap",help:"help",home:"home",iInCircle:"iInCircle",image:"image",importAction:"import",indexClose:"index_close",indexEdit:"index_edit",indexFlush:"index_flush",indexManagementApp:"app_index_management",indexMapping:"index_mapping",indexOpen:"index_open",indexPatternApp:"app_index_pattern",indexRollupApp:"app_index_rollup",indexRuntime:"index_runtime",indexSettings:"index_settings",inputOutput:"inputOutput",inspect:"inspect",invert:"invert",ip:"ip",keyboard:"keyboard",kqlField:"kql_field",kqlFunction:"kql_function",kqlOperand:"kql_operand",kqlSelector:"kql_selector",kqlValue:"kql_value",kubernetesNode:"kubernetesNode",kubernetesPod:"kubernetesPod",layers:"layers",lensApp:"app_lens",lettering:"lettering",lineDashed:"lineDashed",lineDotted:"lineDotted",lineSolid:"lineSolid",link:"link",list:"list",listAdd:"list_add",lock:"lock",lockOpen:"lockOpen",logoAWS:"logo_aws",logoAWSMono:"logo_aws_mono",logoAerospike:"logo_aerospike",logoApache:"logo_apache",logoAppSearch:"logo_app_search",logoAzure:"logo_azure",logoAzureMono:"logo_azure_mono",logoBeats:"logo_beats",logoBusinessAnalytics:"logo_business_analytics",logoCeph:"logo_ceph",logoCloud:"logo_cloud",logoCloudEnterprise:"logo_cloud_ece",logoCode:"logo_code",logoCodesandbox:"logo_codesandbox",logoCouchbase:"logo_couchbase",logoDocker:"logo_docker",logoDropwizard:"logo_dropwizard",logoElastic:"logo_elastic",logoElasticStack:"logo_elastic_stack",logoElasticsearch:"logo_elasticsearch",logoEnterpriseSearch:"logo_enterprise_search",logoEtcd:"logo_etcd",logoGCP:"logo_gcp",logoGCPMono:"logo_gcp_mono",logoGithub:"logo_github",logoGmail:"logo_gmail",logoGolang:"logo_golang",logoGoogleG:"logo_google_g",logoHAproxy:"logo_haproxy",logoIBM:"logo_ibm",logoIBMMono:"logo_ibm_mono",logoKafka:"logo_kafka",logoKibana:"logo_kibana",logoKubernetes:"logo_kubernetes",logoLogging:"logo_logging",logoLogstash:"logo_logstash",logoMaps:"logo_maps",logoMemcached:"logo_memcached",logoMetrics:"logo_metrics",logoMongodb:"logo_mongodb",logoMySQL:"logo_mysql",logoNginx:"logo_nginx",logoObservability:"logo_observability",logoOsquery:"logo_osquery",logoPhp:"logo_php",logoPostgres:"logo_postgres",logoPrometheus:"logo_prometheus",logoRabbitmq:"logo_rabbitmq",logoRedis:"logo_redis",logoSecurity:"logo_security",logoSiteSearch:"logo_site_search",logoSketch:"logo_sketch",logoSlack:"logo_slack",logoUptime:"logo_uptime",logoWebhook:"logo_webhook",logoWindows:"logo_windows",logoWorkplaceSearch:"logo_workplace_search",logsApp:"app_logs",logstashFilter:"logstash_filter",logstashIf:"logstash_if",logstashInput:"logstash_input",logstashOutput:"logstash_output",logstashQueue:"logstash_queue",machineLearningApp:"app_ml",magnet:"magnet",magnifyWithExclamation:"magnifyWithExclamation",magnifyWithMinus:"magnifyWithMinus",magnifyWithPlus:"magnifyWithPlus",managementApp:"app_management",mapMarker:"map_marker",memory:"memory",menu:"menu",menuDown:"menuDown",menuLeft:"menuLeft",menuRight:"menuRight",menuUp:"menuUp",merge:"merge",metricbeatApp:"app_metricbeat",metricsApp:"app_metrics",minimize:"minimize",minus:"minus",minusInCircle:"minus_in_circle",minusInCircleFilled:"minus_in_circle_filled",mobile:"mobile",monitoringApp:"app_monitoring",moon:"moon",namespace:"namespace",nested:"nested",node:"node",notebookApp:"app_notebook",number:"number",offline:"offline",online:"online",outlierDetectionJob:"ml_outlier_detection_job",package:"package",packetbeatApp:"app_packetbeat",pageSelect:"pageSelect",pagesSelect:"pagesSelect",paperClip:"paper_clip",partial:"partial",pause:"pause",payment:"payment",pencil:"pencil",percent:"percent",pin:"pin",pinFilled:"pin_filled",pipelineApp:"app_pipeline",play:"play",playFilled:"playFilled",plus:"plus",plusInCircle:"plus_in_circle",plusInCircleFilled:"plus_in_circle_filled",popout:"popout",push:"push",questionInCircle:"question_in_circle",quote:"quote",recentlyViewedApp:"app_recently_viewed",refresh:"refresh",regressionJob:"ml_regression_job",reporter:"reporter",reportingApp:"app_reporting",returnKey:"return_key",save:"save",savedObjectsApp:"app_saved_objects",scale:"scale",search:"search",searchProfilerApp:"app_search_profiler",securityAnalyticsApp:"app_security_analytics",securityApp:"app_security",securitySignal:"securitySignal",securitySignalDetected:"securitySignalDetected",securitySignalResolved:"securitySignalResolved",sessionViewer:"sessionViewer",shard:"shard",share:"share",snowflake:"snowflake",sortDown:"sort_down",sortLeft:"sortLeft",sortRight:"sortRight",sortUp:"sort_up",sortable:"sortable",spacesApp:"app_spaces",sqlApp:"app_sql",starEmpty:"star_empty",starEmptySpace:"star_empty_space",starFilled:"star_filled",starFilledSpace:"star_filled_space",starMinusEmpty:"star_minus_empty",starMinusFilled:"star_minus_filled",starPlusEmpty:"starPlusEmpty",starPlusFilled:"starPlusFilled",stats:"stats",stop:"stop",stopFilled:"stop_filled",stopSlash:"stop_slash",storage:"storage",string:"string",submodule:"submodule",sun:"sun",swatchInput:"swatch_input",symlink:"symlink",tableDensityCompact:"table_density_compact",tableDensityExpanded:"table_density_expanded",tableDensityNormal:"table_density_normal",tableOfContents:"tableOfContents",tag:"tag",tear:"tear",temperature:"temperature",timeline:"timeline",timelionApp:"app_timelion",timeRefresh:"timeRefresh",timeslider:"timeslider",training:"training",trash:"trash",unfold:"unfold",unlink:"unlink",upgradeAssistantApp:"app_upgrade_assistant",uptimeApp:"app_uptime",user:"user",userAvatar:"userAvatar",users:"users",usersRolesApp:"app_users_roles",vector:"vector",videoPlayer:"videoPlayer",visArea:"vis_area",visAreaStacked:"vis_area_stacked",visBarHorizontal:"vis_bar_horizontal",visBarHorizontalStacked:"vis_bar_horizontal_stacked",visBarVertical:"vis_bar_vertical",visBarVerticalStacked:"vis_bar_vertical_stacked",visGauge:"vis_gauge",visGoal:"vis_goal",visLine:"vis_line",visMapCoordinate:"vis_map_coordinate",visMapRegion:"vis_map_region",visMetric:"vis_metric",visPie:"vis_pie",visTable:"vis_table",visTagCloud:"vis_tag_cloud",visText:"vis_text",visTimelion:"vis_timelion",visVega:"vis_vega",visVisualBuilder:"vis_visual_builder",visualizeApp:"app_visualize",watchesApp:"app_watches",wordWrap:"wordWrap",wordWrapDisabled:"wordWrapDisabled",workplaceSearchApp:"app_workplace_search",wrench:"wrench",tokenAlias:"tokenAlias",tokenAnnotation:"tokenAnnotation",tokenArray:"tokenArray",tokenBinary:"tokenBinary",tokenBoolean:"tokenBoolean",tokenClass:"tokenClass",tokenCompletionSuggester:"tokenCompletionSuggester",tokenConstant:"tokenConstant",tokenDate:"tokenDate",tokenDenseVector:"tokenDenseVector",tokenElement:"tokenElement",tokenEnum:"tokenEnum",tokenEnumMember:"tokenEnumMember",tokenEvent:"tokenEvent",tokenException:"tokenException",tokenField:"tokenField",tokenFile:"tokenFile",tokenFlattened:"tokenFlattened",tokenFunction:"tokenFunction",tokenGeo:"tokenGeo",tokenHistogram:"tokenHistogram",tokenInterface:"tokenInterface",tokenIP:"tokenIP",tokenJoin:"tokenJoin",tokenKey:"tokenKey",tokenKeyword:"tokenKeyword",tokenMethod:"tokenMethod",tokenMetricCounter:"tokenMetricCounter",tokenMetricGauge:"tokenMetricGauge",tokenModule:"tokenModule",tokenNamespace:"tokenNamespace",tokenNested:"tokenNested",tokenNull:"tokenNull",tokenNumber:"tokenNumber",tokenObject:"tokenObject",tokenOperator:"tokenOperator",tokenPackage:"tokenPackage",tokenParameter:"tokenParameter",tokenPercolator:"tokenPercolator",tokenProperty:"tokenProperty",tokenRange:"tokenRange",tokenRankFeature:"tokenRankFeature",tokenRankFeatures:"tokenRankFeatures",tokenRepo:"tokenRepo",tokenSearchType:"tokenSearchType",tokenShape:"tokenShape",tokenString:"tokenString",tokenStruct:"tokenStruct",tokenSymbol:"tokenSymbol",tokenTag:"tokenTag",tokenText:"tokenText",tokenTokenCount:"tokenTokenCount",tokenVariable:"tokenVariable"};var k6e=V(Li()),SW=[];function ajt(){(0,k6e.unstable_batchedUpdates)(function(){for(var e=0;e2&&arguments[2]!==void 0?arguments[2]:{},d=i.method;if(n==="transparent")return"transparent";if(d==="transparent")return n==="plain"?lv(r.colors.ghost,.2):n==="subdued"?lv(r.colors.lightShade,.2):lv(r.colors[n],.1);var y=function(k){return o==="DARK"?u4(k,.8):l4(k,.9)};switch(n){case"plain":return r.colors.emptyShade;case"subdued":return r.colors.body;default:return y(r.colors[n])}},TE=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.method,o=Jn();return IW(o,t,{method:r})},j6e=function(){return{transparent:nt("background-color:",TE("transparent"),";;label:transparent;"),plain:nt("background-color:",TE("plain"),";;label:plain;"),subdued:nt("background-color:",TE("subdued"),";;label:subdued;"),accent:nt("background-color:",TE("accent"),";;label:accent;"),primary:nt("background-color:",TE("primary"),";;label:primary;"),success:nt("background-color:",TE("success"),";;label:success;"),warning:nt("background-color:",TE("warning"),";;label:warning;"),danger:nt("background-color:",TE("danger"),";;label:danger;")}};var C6e=function(t){var n=t.euiTheme,r=n.colors,o=n.size,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},d=i.thumbColor,y=i.trackColor,_=y===void 0?"transparent":y,k=i.width,T=k===void 0?"thin":k,N=i.size,L=i.corner,Y=d||lv(r.darkShade,.5),q=N||o.base,K=L||T==="thin"?"calc(".concat(o.s," * 0.75)"):o.xs,U="scrollbar-color: ".concat(Y," ").concat(_,";");return"scrollbar-width: ".concat(T,`; +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function QKe(e,t){if(e){if(typeof e=="string")return w6e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return w6e(e,t)}}function w6e(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nae)&&(ae=Je.fit,Pe={fit:Je.fit,position:Ye,top:Je.top+window.pageYOffset,left:Je.left+window.pageXOffset,arrow:Je.arrow},ae===1))break}if(Pe==null)throw new Error("Failed to calculate bestPosition");return q&&(Pe.anchorBoundingBox=K),Pe}function tYe(e){var t,n,r=e.position,o=e.align,i=e.anchorBoundingBox,d=e.popoverBoundingBox,y=e.windowBoundingBox,_=e.containerBoundingBox,k=e.arrowConfig,T=e.offset,N=T===void 0?0:T,L=e.buffer,Y=L===void 0?0:L,q=Vte[r],K=qj[q],U=$te[q],X=x6e(Y),Z=qte(X,4),fe=Z[0],me=Z[1],ye=Z[2],ge=Z[3],ae=rYe({crossAxisFirstSide:q,crossAxisSecondSide:K,crossAxisDimension:U,position:r,align:o,buffer:Y,offset:N,windowBoundingBox:y,containerBoundingBox:_,popoverBoundingBox:d,anchorBoundingBox:i,arrowConfig:k}),Pe=ae.crossAxisPosition,Ne=ae.crossAxisArrowPosition,Ye=$te[r],Je=O6e[Ye],Me=nYe({position:r,offset:N,popoverBoundingBox:d,anchorBoundingBox:i,arrowConfig:k}),Ve=Me.primaryAxisPosition,Ue=Me.primaryAxisArrowPosition,ht=(t={},wU(t,q,Pe),wU(t,Je,Ve),t),yt=Ute(y,_);yt.top+=fe,yt.right-=me,yt.bottom-=ye,yt.left+=ge;var Rt=iYe({top:ht.top,right:ht.left+d.width,bottom:ht.top+d.height,left:ht.left,width:d.width,height:d.height},yt),wt=k?(n={},wU(n,q,Ne-ht[q]),wU(n,Je,Ue),n):void 0;return{fit:Rt,top:ht.top,left:ht.left,arrow:wt?{left:wt.left,top:wt.top}:void 0}}function rYe(e){var t=e.crossAxisFirstSide,n=e.crossAxisSecondSide,r=e.crossAxisDimension,o=e.position,i=e.align,d=e.buffer,y=e.offset,_=e.windowBoundingBox,k=e.containerBoundingBox,T=e.popoverBoundingBox,N=e.anchorBoundingBox,L=e.arrowConfig,Y=T[r],q=N[r],K=q/2,U=N[t]+K-Y/2,X=Ute(_,k),Z=oYe(N,X,d,y,o),fe=L?L.arrowBuffer:0,me=(Y-q)/2,ye=0,ge=1,ae=0,Pe=1;if(i!=null){ge=i==="top"||i==="left"?1:-1,ye=me;var Ne=me+ye,Ye=Ne>Z[qj[i]];ae=Ye?Ne-Z[qj[i]]:0,Pe=-1*ge}else{var Je=Z[t],Me=Z[n],Ve=Je>Me;Pe=Ve?-1:1;var Ue=Math.min(Je,Me),ht=me>Ue;ae=ht?me-Ue:0}var yt=ae*Pe,Rt=U+yt+ye*ge,wt;if(L){var _t=L.arrowWidth;if(wt=N[t]+K-_t/2,wtRt+Y){var At=Rt+Y,ir=wt-(At-fe-_t);Rt+=ir}}return{crossAxisPosition:Rt,crossAxisArrowPosition:wt}}function nYe(e){var t=e.position,n=e.offset,r=e.popoverBoundingBox,o=e.anchorBoundingBox,i=e.arrowConfig,d=t==="top"||t==="left",y=$te[t],_=r[y],k=O6e[y],T=o[k],N=o[y],L=d?_:N,Y=(n+L)*(d?-1:1),q=T+Y,K;return i&&(K=d?_:0),{primaryAxisPosition:q,primaryAxisArrowPosition:K}}function Hte(e){var t=e.getBoundingClientRect();return{top:t.top,right:t.right,bottom:t.bottom,left:t.left,height:t.height,width:t.width}}function oYe(e,t,n,r,o){var i=x6e(n),d=qte(i,4),y=d[0],_=d[1],k=d[2],T=d[3];return{top:e.top-t.top-y-(o==="top"?r:0),right:t.right-e.right-_-(o==="right"?r:0),bottom:t.bottom-e.bottom-k-(o==="bottom"?r:0),left:e.left-t.left-T-(o==="left"?r:0)}}function iYe(e,t){var n=Ute(e,t);if(n.left>n.right||n.top>n.top)return 0;var r=(n.right-n.left)*(n.bottom-n.top),o=(e.right-e.left)*(e.bottom-e.top);return r/o}function Ute(e,t){var n=Math.max(e.top,t.top),r=Math.min(e.right,t.right),o=Math.min(e.bottom,t.bottom),i=Math.max(e.left,t.left),d=Math.max(o-n,0),y=Math.max(r-i,0);return{top:n,right:r,bottom:o,left:i,height:d,width:y}}function tM(e,t){for(var n=[];n.push(e),e=e.offsetParent,!(e==null||e.contains(t)););n.reverse();for(var r=0,o=n;r0){var r=Date.now(),o=r+t,i=function d(){n(),o>Date.now()&&requestAnimationFrame(d)};requestAnimationFrame(i)}};var E6e=V(ne()),I6e=function(t){return(0,E6e.useCallback)(function(n){return t.forEach(function(r){r&&(typeof r=="function"?r(n):r.current=n)})},[t])};var FU=V(ne()),an=V(er()),zU=V(Ar());var S4r=V(ne()),Lf=V(er()),lxe=V(Ar());var nM={};de(nM,{icon:()=>pYe});var cur=V(ne());var lYe=["title","titleId"];function Gte(){return Gte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fYe=function(t){var n=t.title,r=t.titleId,o=uYe(t,lYe);return c("svg",Gte({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 0a8 8 0 110 16A8 8 0 018 0zm0 1a7 7 0 100 14A7 7 0 008 1zm3.974 4.342a.5.5 0 01-.233.596l-.083.036L9 6.86v2.559l.974 2.923a.5.5 0 01-.233.596l-.083.036a.5.5 0 01-.596-.233l-.036-.083-1-3L8 9.5l-.026.158-1 3a.5.5 0 01-.97-.228l.022-.088L7 9.416V6.86l-2.658-.886a.5.5 0 01.228-.97l.088.022L7.583 6h.833l2.926-.974a.5.5 0 01.632.316zM8 3a1 1 0 110 2 1 1 0 010-2z"}))},pYe=fYe;var oM={};de(oM,{icon:()=>gYe});var pur=V(ne());var dYe=["title","titleId"];function Jte(){return Jte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vYe=function(t){var n=t.title,r=t.titleId,o=hYe(t,dYe);return c("svg",Jte({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M2.5 2a.5.5 0 100 1 .5.5 0 000-1zm0-1a1.5 1.5 0 011.415 1h1.908a1.5 1.5 0 011.393.943L8.839 7H12.5a.5.5 0 010 1H8.839l-1.623 4.057A1.5 1.5 0 015.823 13H3.915a1.5 1.5 0 110-1h1.908a.5.5 0 00.464-.314L7.761 8H3.915a1.5 1.5 0 110-1H7.76L6.287 3.314A.5.5 0 005.823 3H3.915A1.5 1.5 0 112.5 1zm0 11a.5.5 0 110 1 .5.5 0 010-1zM3 7.5a.5.5 0 10-1 0 .5.5 0 001 0zm9.354-3.354a.5.5 0 00-.708.708L13.793 7a.707.707 0 010 1l-2.147 2.146a.5.5 0 00.708.708L14.5 8.707a1.707 1.707 0 000-2.414l-2.146-2.147z"}))},gYe=vYe;var iM={};de(iM,{icon:()=>xYe});var hur=V(ne());var yYe=["title","titleId"];function Xte(){return Xte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OYe=function(t){var n=t.title,r=t.titleId,o=bYe(t,yYe);return c("svg",Xte({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.59 10.059L7.35 5.18h1.3L8.4 10.06h-.81zm.394 1.901a.61.61 0 01-.448-.186.606.606 0 01-.186-.444c0-.174.062-.323.186-.446a.614.614 0 01.448-.184c.169 0 .315.06.44.182.124.122.186.27.186.448a.6.6 0 01-.189.446.607.607 0 01-.437.184zM2 14a1 1 0 01-.878-1.479l6-11a1 1 0 011.756 0l6 11A1 1 0 0114 14H2zm0-1h12L8 2 2 13z"}))},xYe=OYe;var aM={};de(aM,{icon:()=>kYe});var vur=V(ne());var _Ye=["title","titleId"];function Kte(){return Kte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IYe=function(t){var n=t.title,r=t.titleId,o=SYe(t,_Ye);return c("svg",Kte({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8 9.169L2 5.25v6.17l6 3.428 6-3.428V5.25L8 9.17zM15 4v8l-7 4-7-4V4l7-4 7 4zm-1.428.336L8 1.152 2.428 4.336 8 7.974l5.572-3.638z"}))},kYe=IYe;var sM={};de(sM,{icon:()=>AYe});var yur=V(ne());var PYe=["title","titleId"];function Yte(){return Yte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TYe=function(t){var n=t.title,r=t.titleId,o=jYe(t,PYe);return c("svg",Yte({xmlns:"http://www.w3.org/2000/svg",width:14,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13.924 4.013a.605.605 0 00-.228-.236L7.304.082a.607.607 0 00-.608 0L.304 3.777A.62.62 0 000 4.304v7.392c0 .217.116.418.304.527l6.392 3.695c.188.11.42.11.608 0l6.392-3.695a.609.609 0 00.304-.527V4.304a.607.607 0 00-.076-.291zM1 5.079v6.391l6 3.47 6-3.47V5.08L7.252 8.432 7 8.579l-.252-.147L1 5.079zm11.476-.852L7 1.06 1.524 4.227 7 7.42l5.476-3.194z"}))},AYe=TYe;var lM={};de(lM,{icon:()=>NYe});var wur=V(ne());var MYe=["title","titleId"];function Qte(){return Qte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zYe=function(t){var n=t.title,r=t.titleId,o=RYe(t,MYe);return c("svg",Qte({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 6.5a4.5 4.5 0 115 4.473V16H7v-5.027A4.5 4.5 0 013 6.5z"}))},NYe=zYe;var uM={};de(uM,{icon:()=>HYe});var xur=V(ne());var LYe=["title","titleId"];function Zte(){return Zte=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WYe=function(t){var n=t.title,r=t.titleId,o=FYe(t,LYe);return c("svg",Zte({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 0h12a2 2 0 012 2v12a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2zm0 1a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1V2a1 1 0 00-1-1H2zm.5 2h10a.5.5 0 110 1h-10a.5.5 0 010-1zm1 3h6a.5.5 0 010 1h-6a.5.5 0 010-1zm2 3h4a.5.5 0 010 1h-4a.5.5 0 010-1zm3 3h5a.5.5 0 110 1h-5a.5.5 0 110-1z"}))},HYe=WYe;var cM={};de(cM,{icon:()=>GYe});var Sur=V(ne());var $Ye=["title","titleId"];function ere(){return ere=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UYe=function(t){var n=t.title,r=t.titleId,o=VYe(t,$Ye);return c("svg",ere({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M32 30H0V3h12.57l3 5H32v22zM2 28h28V10H14.43l-3-5H2v23z"}),c("path",{className:"euiIcon__fillSecondary",d:"M21 18h-4v-4h-2v4h-4v2h4v4h2v-4h4z"}))},GYe=UYe;var fM={};de(fM,{icon:()=>QYe});var Iur=V(ne());var JYe=["title","titleId"];function tre(){return tre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KYe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YYe=function(t){var n=t.title,r=t.titleId,o=XYe(t,JYe);return c("svg",tre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M2.909 26.182h1.939v4.848H2.909z"}),c("path",{d:"M4.848 16.62V0H2.91v16.62a3.879 3.879 0 101.94 0zm-.97 5.683a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.879z"}),c("path",{className:"euiIcon__fillSecondary",d:"M14.545 16.485h1.939V31.03h-1.939z"}),c("path",{d:"M16.485 6.924V0h-1.94v6.924a3.879 3.879 0 101.94 0zm-.97 5.682a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.88z"}),c("path",{className:"euiIcon__fillSecondary",d:"M26.182 26.182h1.939v4.848h-1.939z"}),c("path",{d:"M28.121 16.62V0h-1.94v16.62a3.879 3.879 0 101.94 0zm-.97 5.683a1.94 1.94 0 110-3.879 1.94 1.94 0 010 3.879z"}))},QYe=YYe;var pM={};de(pM,{icon:()=>nQe});var Pur=V(ne());var ZYe=["title","titleId"];function rre(){return rre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rQe=function(t){var n=t.title,r=t.titleId,o=eQe(t,ZYe);return c("svg",rre({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M21 2.82L16 .038 11 2.82v2.289l5-2.782 5 2.782v-2.29z"}),c("path",{className:"euiIcon__fillSecondary",d:"M21 7.282L16 4.5l-5 2.782V9.57l5-2.781 5 2.781V7.282z"}),c("path",{d:"M7 5.045L2 7.827v15.577l14 7.788 14-7.788V7.827l-5-2.782v2.289l3 1.669v13.225l-12 6.676-12-6.676V9.003l3-1.669V5.045z"}),c("path",{className:"euiIcon__fillSecondary",fillRule:"evenodd",clipRule:"evenodd",d:"M22 12.5L16 9l-6 3.5v7l6 3.5 6-3.5v-7zm-9.974 1.205L16 11.387l3.974 2.318v4.59L16 20.613l-3.974-2.318v-4.59z"}))},nQe=rQe;var dM={};de(dM,{icon:()=>lQe});var Cur=V(ne());var oQe=["title","titleId"];function nre(){return nre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sQe=function(t){var n=t.title,r=t.titleId,o=iQe(t,oQe);return c("svg",nre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 10h4v2H1V1h30v6h-2V3H3v7zm26 19v-6h2v8H18v-8h2v6h9z"}),c("path",{className:"euiIcon__fillSecondary",d:"M31 10H9v11h12c5.523 0 10-4.477 10-10v-1zm-10 9H11v-7h17.938A8.001 8.001 0 0121 19z"}))},lQe=sQe;var hM={};de(hM,{icon:()=>dQe});var Aur=V(ne());var uQe=["title","titleId"];function ore(){return ore=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pQe=function(t){var n=t.title,r=t.titleId,o=cQe(t,uQe);return c("svg",ore({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M15.5 11.915L27 5.279 19.5.938a7.002 7.002 0 00-7 0l-8 4.62A7 7 0 001 11.62v9.237a7 7 0 003.5 6.061l7.5 4.33V17.98a7 7 0 013.5-6.063zM10 27.785v-9.808a9 9 0 014.5-7.793l8.503-4.91L18.5 2.672a5.003 5.003 0 00-5 0l-8 4.619A5 5 0 003 11.62v9.238a5 5 0 002.5 4.33l4.5 2.598z"}),c("path",{fillRule:"evenodd",className:"euiIcon__fillSecondary",d:"M18.409 13.55a7.089 7.089 0 011.035 1.711A6.93 6.93 0 0120 17.98v13.27l7.5-4.33a7 7 0 003.5-6.061v-9.239a6.992 6.992 0 00-1.587-4.421L18.409 13.55zm2.777.705A8.933 8.933 0 0122 17.979v9.807l4.5-2.598a5 5 0 002.5-4.33V11.62c0-.588-.106-1.161-.303-1.7l-7.511 4.335z"}))},dQe=pQe;var mM={};de(mM,{icon:()=>yQe});var Rur=V(ne());var hQe=["title","titleId"];function ire(){return ire=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gQe=function(t){var n=t.title,r=t.titleId,o=mQe(t,hQe);return c("svg",ire({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M15 0h2v32h-2z"}),c("path",{d:"M0 32h13v-2H2V2h11V0H0zM19 0v2h11v28H19v2h13V0z"}))},yQe=gQe;var vM={};de(vM,{icon:()=>_Qe});var zur=V(ne());var bQe=["title","titleId"];function are(){return are=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function OQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xQe=function(t){var n=t.title,r=t.titleId,o=wQe(t,bQe);return c("svg",are({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M7 17h2v7H7zM12 14h2v10h-2zM17 16h2v8h-2zM22 14h3v2h-3zM22 18h3v2h-3zM22 22h3v2h-3z"}),c("path",{d:"M30.73 24a6.47 6.47 0 01.45-2.19c.337-.9.52-1.85.54-2.81a8.55 8.55 0 00-.54-2.81 6.47 6.47 0 01-.45-2.19 9.2 9.2 0 01.62-2.49c.53-1.57 1.08-3.19.08-4.2-1-1.01-2.41-.44-3.52.05a5.59 5.59 0 01-2.09.64 5.3 5.3 0 01-.59 0L16 .28 6.77 8a5.3 5.3 0 01-.59 0 5.59 5.59 0 01-2.09-.65C3 6.87 1.6 6.25.57 7.31c-1.03 1.06-.45 2.63.08 4.2A9.2 9.2 0 011.27 14a6.47 6.47 0 01-.45 2.19A8.55 8.55 0 00.28 19c.02.96.203 1.91.54 2.81A6.47 6.47 0 011.27 24a9.2 9.2 0 01-.62 2.49c-.53 1.57-1.08 3.19-.08 4.2.353.38.852.59 1.37.58a5.67 5.67 0 002.15-.63A5.59 5.59 0 016.18 30a7.13 7.13 0 012.29.47 8 8 0 002.62.53 7.37 7.37 0 002.47-.51A7.14 7.14 0 0116 30a6.24 6.24 0 012.14.45 8 8 0 002.77.55 8.08 8.08 0 002.77-.55 6.24 6.24 0 012.14-.45 5.59 5.59 0 012.09.65c1.11.49 2.49 1.11 3.52.05 1.03-1.06.45-2.63-.08-4.2a9.2 9.2 0 01-.62-2.5zM21.17 7h-.26a8 8 0 00-2.77.55A6.24 6.24 0 0116 8a6.24 6.24 0 01-2.14-.45A8 8 0 0011.09 7h-.26L16 2.72 21.17 7zm8.89 22.27a4.42 4.42 0 01-1.34-.46 7.08 7.08 0 00-2.9-.82 8.14 8.14 0 00-2.78.55 6.13 6.13 0 01-2.13.45 6.24 6.24 0 01-2.14-.45A8 8 0 0016 28a9 9 0 00-3.08.6 5.74 5.74 0 01-1.83.4 6.36 6.36 0 01-2-.43A8.72 8.72 0 006.18 28a7.08 7.08 0 00-2.9.82 9.65 9.65 0 01-1.28.52 6.08 6.08 0 01.52-2.21c.403-1 .65-2.055.73-3.13a8.55 8.55 0 00-.54-2.81A6.47 6.47 0 012.27 19a6.47 6.47 0 01.44-2.19c.337-.9.52-1.85.54-2.81a10.48 10.48 0 00-.72-3.13 9 9 0 01-.59-2.16H2c.447.1.88.255 1.29.46a7.08 7.08 0 002.9.82A8.14 8.14 0 009 9.44 6.13 6.13 0 0111.09 9a6.13 6.13 0 012.13.45A8.14 8.14 0 0016 10a8.14 8.14 0 002.78-.55A6.13 6.13 0 0120.91 9a6.13 6.13 0 012.09.44 8.14 8.14 0 002.78.55 7.08 7.08 0 002.9-.82A9.65 9.65 0 0130 8.66a6.08 6.08 0 01-.52 2.21c-.403 1-.65 2.055-.73 3.13.02.96.203 1.91.54 2.81a6.47 6.47 0 01.44 2.19 6.47 6.47 0 01-.44 2.19 8.55 8.55 0 00-.54 2.81c.078 1.074.32 2.13.72 3.13a9 9 0 01.59 2.16v-.02z"}))},_Qe=xQe;var gM={};de(gM,{icon:()=>PQe});var Lur=V(ne());var SQe=["title","titleId"];function sre(){return sre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function IQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kQe=function(t){var n=t.title,r=t.titleId,o=EQe(t,SQe);return c("svg",sre({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M22.5 24a5.5 5.5 0 100-11 5.5 5.5 0 000 11zm0 2a7.5 7.5 0 100-15 7.5 7.5 0 000 15z"}),c("path",{d:"M30.293 27.707l-4-4 1.414-1.414 4 4-1.414 1.414zM6 4H2v27h25v-3h-2v1H4V6h2V4zm19 6h2V4h-4v2h2v4z"}),c("path",{className:"euiIcon__fillSecondary",fillRule:"evenodd",clipRule:"evenodd",d:"M16.381 3.024l.538 1.158h2.274l.636 2.545H9.68l.637-2.545h2.558l.538-1.158c.292-.63.955-1.024 1.484-1.024.53 0 1.193.394 1.485 1.024zm6.01 5.703l-1.636-6.545h-2.56C17.6.898 16.262 0 14.897 0c-1.364 0-2.703.898-3.299 2.182H8.755L7.118 8.727h15.273zM7 15h6v-2H7v2zm6 5H7v-2h6v2zm-6 5h6v-2H7v2z"}))},PQe=kQe;var yM={};de(yM,{icon:()=>MQe});var Bur=V(ne());var jQe=["title","titleId"];function lre(){return lre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AQe=function(t){var n=t.title,r=t.titleId,o=CQe(t,jQe);return c("svg",lre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.276 29l.594 2H0l7.621-14.29.811 2.73L3.333 29h7.943zM28.92 31l-4.987-16.598A16 16 0 008.688 3l1.8 6H8.4L6 1h2.607a18 18 0 0117.241 12.828L31 31h-2.08z"}),c("path",{className:"euiIcon__fillSecondary",d:"M12.037 14.02L16.492 29h6.827l-2.333-7.849a10 10 0 00-8.949-7.13zM9.35 12h2.05a12 12 0 0111.503 8.581L26 31H15L9.35 12z"}))},MQe=AQe;var bM={};de(bM,{icon:()=>LQe});var Hur=V(ne());var RQe=["title","titleId"];function ure(){return ure=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var NQe=function(t){var n=t.title,r=t.titleId,o=DQe(t,RQe);return c("svg",ure({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M29 9H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v3a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v3a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}),c("path",{className:"euiIcon__fillSecondary",d:"M29 32H3a3 3 0 01-3-3V14a3 3 0 013-3h26a3 3 0 013 3v15a3 3 0 01-3 3zM3 13a1 1 0 00-1 1v15a1 1 0 001 1h26a1 1 0 001-1V14a1 1 0 00-1-1H3z"}),c("path",{d:"M7.29 17.71l3.3 3.29-3.3 3.29 1.42 1.42 4.7-4.71-4.7-4.71zM15 24h9v2h-9z"}))},LQe=NQe;var wM={};de(wM,{icon:()=>$Qe});var Vur=V(ne());var FQe=["title","titleId"];function cre(){return cre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var HQe=function(t){var n=t.title,r=t.titleId,o=BQe(t,FQe);return c("svg",cre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M0 0v16h8.7l5.3-6V0H0zm2 2h10v7H7v5H2V2zm8.45 9L9 12.64V11h1.45zM18 16v16h8.7l5.3-6V16H18zm2 2h10v7h-5v5h-5V18zm8.45 9L27 28.64V27h1.45z"}),c("path",{className:"euiIcon__fillSecondary",d:"M5 18H3c0 6.075 4.925 11 11 11h2v-2h-2a9 9 0 01-9-9zM18 3h-2v2h2a9 9 0 019 9h2c0-6.075-4.925-11-11-11z"}))},$Qe=HQe;var OM={};de(OM,{icon:()=>JQe});var Uur=V(ne());var VQe=["title","titleId"];function fre(){return fre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function UQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var GQe=function(t){var n=t.title,r=t.titleId,o=qQe(t,VQe);return c("svg",fre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M29 9H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v3a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v3a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}),c("path",{className:"euiIcon__fillSecondary",d:"M12 20H3a3 3 0 01-3-3v-3a3 3 0 013-3h9a3 3 0 013 3v3a3 3 0 01-3 3zm-9-7a1 1 0 00-1 1v3a1 1 0 001 1h9a1 1 0 001-1v-3a1 1 0 00-1-1H3z"}),c("path",{d:"M12 31H3a3 3 0 01-3-3v-3a3 3 0 013-3h9a3 3 0 013 3v3a3 3 0 01-3 3zm-9-7a1 1 0 00-1 1v3a1 1 0 001 1h9a1 1 0 001-1v-3a1 1 0 00-1-1H3z"}),c("path",{className:"euiIcon__fillSecondary",d:"M29 31h-9a3 3 0 01-3-3V14a3 3 0 013-3h9a3 3 0 013 3v14a3 3 0 01-3 3zm-9-18a1 1 0 00-1 1v14a1 1 0 001 1h9a1 1 0 001-1V14a1 1 0 00-1-1h-9z"}))},JQe=GQe;var xM={};de(xM,{icon:()=>ZQe});var Jur=V(ne());var XQe=["title","titleId"];function pre(){return pre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YQe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var QQe=function(t){var n=t.title,r=t.titleId,o=KQe(t,XQe);return c("svg",pre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M21 28h-2v-8.49l.6-.26A9 9 0 0021 3.52V11H11V3.52a9 9 0 001.4 15.73l.6.26V28h-2v-7.21A11 11 0 0111.6.92L13 .31V9h6V.31l1.4.61a11 11 0 01.6 19.87V28z"}),c("path",{className:"euiIcon__fillSecondary",d:"M11 30h10v2H11z"}))},ZQe=QQe;var _M={};de(_M,{icon:()=>oZe});var Kur=V(ne());var eZe=["title","titleId"];function dre(){return dre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nZe=function(t){var n=t.title,r=t.titleId,o=tZe(t,eZe);return c("svg",dre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M8.33 23.67l4.79-10.55 10.55-4.79-4.79 10.55-10.55 4.79zm6.3-9l-2.28 5 5-2.28 2.28-5-5 2.28z"}),c("path",{d:"M16 0C7.163 0 0 7.163 0 16s7.163 16 16 16 16-7.163 16-16A16 16 0 0016 0zm1 29.95V28h-2v1.95A14 14 0 012.05 17H4v-2H2.05A14 14 0 0115 2.05V4h2V2.05A14 14 0 0129.95 15H28v2h1.95A14 14 0 0117 29.95z"}))},oZe=nZe;var SM={};de(SM,{icon:()=>uZe});var Qur=V(ne());var iZe=["title","titleId"];function hre(){return hre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lZe=function(t){var n=t.title,r=t.titleId,o=aZe(t,iZe);return c("svg",hre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M3 22h3v2H1V1h23v5h-2V3H3z"}),c("path",{d:"M15.228 29c1.492-1.678 1.353-2.859.009-5.654-.049-.1-.049-.1-.097-.203-1.369-2.855-1.626-4.491-.325-6.582 2.796-4.498 9.514-2.642 14.185 2.317V10H10v19h5.228zm2.47 0H29v-6.983c-3.88-5.406-10.376-7.795-12.487-4.4-.83 1.336-.669 2.37.43 4.662l.097.2c1.352 2.814 1.731 4.63.659 6.521zM31 8v23H8V8h23z"}))},uZe=lZe;var EM={};de(EM,{icon:()=>hZe});var ecr=V(ne());var cZe=["title","titleId"];function mre(){return mre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dZe=function(t){var n=t.title,r=t.titleId,o=fZe(t,cZe);return c("svg",mre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M8 18h16v2H8zM8 13h9v2H8zM8 23h16v2H8z"}),c("path",{d:"M21.41 0H5a3 3 0 00-3 3v26a3 3 0 003 3h22a3 3 0 003-3V8.59L21.41 0zM22 3.41L26.59 8H22V3.41zM27 30H5a1 1 0 01-1-1V3a1 1 0 011-1h15v8h8v19a1 1 0 01-1 1z"}))},hZe=dZe;var IM={};de(IM,{icon:()=>bZe});var rcr=V(ne());var mZe=["title","titleId"];function vre(){return vre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yZe=function(t){var n=t.title,r=t.titleId,o=vZe(t,mZe);return c("svg",vre({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2.996 18.636L0 20.434v6.132l6 3.6 5-3 5 3 5-3 5 3 6-3.6v-6.132l-5-3v-5l-5-3v-5l-6-3.6-6 3.6v2.832l2 .033V5.566l4-2.4 4 2.4v3.868l-1.996 1.197 1 1.733L21 11.166l4 2.4v3.868l-4 2.4-2.257-1.354-.971 1.75L20 21.565v3.868l-4 2.4-4-2.4v-1.7l-2-.033v1.733l-4 2.4-4-2.4v-3.868l1.996-1.197-1-1.733zM22 25.434v-3.868l4-2.4 4 2.4v3.868l-4 2.4-4-2.4z"}),c("path",{className:"euiIcon__fillSecondary",d:"M11 22.166l-6-3.6v-6.132l6-3.6 6 3.6v6.132l-6 3.6zm4-4.732v-3.868l-4-2.4-4 2.4v3.868l4 2.4 4-2.4z"}))},bZe=yZe;var kM={};de(kM,{icon:()=>SZe});var ocr=V(ne());var wZe=["title","titleId"];function gre(){return gre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _Ze=function(t){var n=t.title,r=t.titleId,o=OZe(t,wZe);return c("svg",gre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M29.014 23.89l2.296 1.145L16 32.101.53 24.961l2.49-1.056 2.453 1.132-.003.002L16 29.899l10.69-4.934-.003-.001 2.327-1.074zm-4.972-7.482l7.268 3.627L16 27.101.53 19.961l7.668-3.252c.392.486.838 1.02 1.34 1.604L5.47 20.039 16 24.899l10.69-4.934-3.954-1.973c.493-.58.928-1.107 1.306-1.584z"}),c("path",{d:"M18 9a2 2 0 10-4 0 2 2 0 004 0zm2 0a4 4 0 11-8 0 4 4 0 018 0zm-3.268 12.681l-.732.787-.732-.787c-3.557-3.824-5.817-6.462-6.81-7.96A8.746 8.746 0 017 8.875C7 3.97 11.033 0 16 0s9 3.97 9 8.875a8.746 8.746 0 01-1.459 4.846c-.992 1.498-3.252 4.136-6.809 7.96zm5.142-9.064A6.747 6.747 0 0023 8.875C23 5.081 19.87 2 16 2S9 5.081 9 8.875c0 1.349.394 2.636 1.126 3.742.846 1.277 2.812 3.593 5.874 6.912 3.062-3.32 5.028-5.635 5.874-6.912z"}))},SZe=_Ze;var PM={};de(PM,{icon:()=>jZe});var acr=V(ne());var EZe=["title","titleId"];function yre(){return yre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PZe=function(t){var n=t.title,r=t.titleId,o=IZe(t,EZe);return c("svg",yre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M24 20a4 4 0 110-8 4 4 0 010 8zm0-6a2 2 0 100 4 2 2 0 000-4zm-8.2-5.62A4 4 0 1118 1.06a4 4 0 01-2.2 7.32zm0-6a2 2 0 10.01 0h-.01zm.01 29.24a4 4 0 11-.083-8 4 4 0 01.083 8zm0-6a2 2 0 10.39 0 2 2 0 00-.4 0h.01z"}),c("path",{d:"M18 17v-2h-6.14a4 4 0 00-.86-1.64l2.31-3.44-1.68-1.12-2.31 3.44A4 4 0 008 12a4 4 0 100 8 4 4 0 001.32-.24l2.31 3.44 1.66-1.12L11 18.64a4 4 0 00.86-1.64H18zM6 16a2 2 0 114 0 2 2 0 01-4 0z"}))},jZe=PZe;var jM={};de(jM,{icon:()=>RZe});var lcr=V(ne());var CZe=["title","titleId"];function bre(){return bre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function AZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MZe=function(t){var n=t.title,r=t.titleId,o=TZe(t,CZe);return c("svg",bre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.727 2.91V.97c-1.357 0-4.18 0-5.818 1.94-.97 1.182-1.328 2.908-.97 4.983.563 3.307.97 6.332.301 7.157-.3.31-.97.465-2.24.465v1.94c1.27 0 1.94.155 2.25.494.698.824.262 3.879-.3 7.156-.35 2.124-.01 3.802.96 4.956C5.527 32 8.35 32 9.726 32v-1.94c-1.144 0-3.287 0-4.315-1.221a4.112 4.112 0 01-.533-3.414c.843-5.042.97-7.37-.136-8.727-.068-.077-.145-.136-.213-.203-.068-.068.145-.127.213-.204 1.144-1.367.97-3.695.136-8.727a4.112 4.112 0 01.543-3.414C6.44 2.91 8.583 2.91 9.727 2.91zM32.03 17.454v-1.94c-1.27 0-1.94-.155-2.25-.494-.698-.825-.261-3.88.301-7.157.35-2.123 0-3.801-.97-4.984C27.493.94 24.672.94 23.294.94v1.97c1.145 0 3.288 0 4.315 1.22a4.112 4.112 0 01.544 3.414c-.844 5.043-.97 7.37.135 8.728.068.077.146.135.214.203.067.068-.146.126-.214.204-1.144 1.367-.97 3.694-.135 8.727.329 1.162.13 2.41-.544 3.413-1.018 1.242-3.16 1.242-4.305 1.242V32c1.358 0 4.18 0 5.818-1.94.97-1.182 1.329-2.908.97-4.984-.563-3.306-.97-6.332-.3-7.156.3-.31.969-.465 2.24-.465z"}),c("path",{className:"euiIcon__fillSecondary",d:"M26.212 15.515h-2.007a7.758 7.758 0 00-6.72-6.72V6.788h-1.94v2.007a7.758 7.758 0 00-6.72 6.72H6.818v1.94h2.007a7.758 7.758 0 006.72 6.72v2.007h1.94v-2.007a7.758 7.758 0 006.72-6.72h2.007v-1.94zm-8.727 6.7v-1.851h-1.94v1.852a5.818 5.818 0 01-4.76-4.761h1.851v-1.94h-1.852a5.818 5.818 0 014.761-4.761v1.852h1.94v-1.852a5.818 5.818 0 014.761 4.761h-1.852v1.94h1.852a5.818 5.818 0 01-4.761 4.76z"}))},RZe=MZe;var CM={};de(CM,{icon:()=>FZe});var ccr=V(ne());var DZe=["title","titleId"];function wre(){return wre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LZe=function(t){var n=t.title,r=t.titleId,o=zZe(t,DZe);return c("svg",wre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M4.14 15.39a8.058 8.058 0 01-2.2-4.043A6.788 6.788 0 014.198 5.47a6.73 6.73 0 018.727-.213l1.26-1.464a8.65 8.65 0 00-11.277.232A8.727 8.727 0 00.068 11.6a10.172 10.172 0 002.793 5.275l1.28-1.484z"}),c("path",{d:"M15.515 31.274L4.548 18.454 15.855 4.763a8.67 8.67 0 0112.266-.746 8.727 8.727 0 012.91 7.205c-.243 2.695-2.037 4.732-3.482 6.37L15.515 31.275zm-8.427-12.82l8.427 9.862 10.55-11.995c1.32-1.503 2.822-3.21 3.007-5.265a6.788 6.788 0 00-2.24-5.586 6.73 6.73 0 00-9.504.563L7.088 18.455z"}))},FZe=LZe;var TM={};de(TM,{icon:()=>VZe});var pcr=V(ne());var BZe=["title","titleId"];function Ore(){return Ore=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $Ze=function(t){var n=t.title,r=t.titleId,o=WZe(t,BZe);return c("svg",Ore({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),c("path",{className:"euiIcon__fillSecondary",d:"M4 32a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zM23 8V6h-2.1a5 5 0 00-.73-1.75l1.49-1.49-1.42-1.42-1.49 1.49A5 5 0 0017 2.1V0h-2v2.1a5 5 0 00-1.75.73l-1.49-1.49-1.42 1.42 1.49 1.49A5 5 0 0011.1 6H9v2h2.1a5 5 0 00.73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 001.76.74V14h2v-2.1a5 5 0 001.75-.73l1.49 1.49 1.41-1.41-1.48-1.5A5 5 0 0020.9 8H23zm-7 2a3 3 0 110-6 3 3 0 010 6z"}),c("path",{d:"M16 8a1 1 0 01-1-1 1.39 1.39 0 010-.2.65.65 0 01.06-.18.74.74 0 01.09-.18 1.61 1.61 0 01.12-.15.93.93 0 01.33-.21 1 1 0 011.09.21l.12.15a.78.78 0 01.09.18.62.62 0 01.1.18 1.27 1.27 0 010 .2 1 1 0 01-1 1z"}))},VZe=$Ze;var AM={};de(AM,{icon:()=>XZe});var hcr=V(ne());var qZe=["title","titleId"];function xre(){return xre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JZe=function(t){var n=t.title,r=t.titleId,o=UZe(t,qZe);return c("svg",xre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M20 14h-8a3 3 0 01-3-3V3a3 3 0 013-3h8a3 3 0 013 3v8a3 3 0 01-3 3zM12 2a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V3a1 1 0 00-1-1h-8zM17 18v-2h-2v2H3v6h2v-4h10v4h2v-4h10v4h2v-6z"}),c("path",{className:"euiIcon__fillSecondary",d:"M4 32a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zm12 4a3 3 0 110-6 3 3 0 010 6zm0-4a1 1 0 100 2 1 1 0 000-2zM13 4h6v2h-6zM13 8h6v2h-6z"}))},XZe=JZe;var MM={};de(MM,{icon:()=>eet});var vcr=V(ne());var KZe=["title","titleId"];function _re(){return _re=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QZe(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZZe=function(t){var n=t.title,r=t.titleId,o=YZe(t,KZe);return c("svg",_re({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M32 26v-2h-2.1a5 5 0 00-.73-1.75l1.49-1.49-1.41-1.41-1.49 1.49A5 5 0 0026 20.1V18h-2v2.1a5 5 0 00-1.75.73l-1.49-1.49-1.41 1.41 1.49 1.49A5 5 0 0020.1 24H18v2h2.1a5 5 0 00.73 1.75l-1.49 1.49 1.41 1.41 1.49-1.49a5 5 0 001.76.74V32h2v-2.1a5 5 0 001.75-.73l1.49 1.49 1.41-1.41-1.49-1.49A5 5 0 0029.9 26H32zm-7 2a3 3 0 110-6 3 3 0 010 6z"}),c("path",{d:"M25.71 24.29a1 1 0 00-1.09-.21 1.15 1.15 0 00-.33.21.93.93 0 00-.21.33 1 1 0 001.3 1.3 1.15 1.15 0 00.33-.21 1 1 0 00.21-1.09.94.94 0 00-.21-.33z"}),c("path",{className:"euiIcon__fillSecondary",d:"M5 6h16v2H5zM5 12h16v2H5zM5 18h10v2H5zM5 24h8v2H5z"}),c("path",{d:"M16 32H3a3 3 0 01-3-3V3a3 3 0 013-3h20a3 3 0 013 3v13h-2V3a1 1 0 00-1-1H3a1 1 0 00-1 1v26a1 1 0 001 1h13v2z"}))},eet=ZZe;var RM={};de(RM,{icon:()=>iet});var ycr=V(ne());var tet=["title","titleId"];function Sre(){return Sre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function net(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oet=function(t){var n=t.title,r=t.titleId,o=ret(t,tet);return c("svg",Sre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M23.793 14.293l1.414 1.414-6.408 6.409-3.75-3.25-4.342 4.341-1.414-1.414 5.658-5.659 3.75 3.25 5.092-5.091zM12 11v5l-2 2v-7h2zm10-6v8l-2 2V5h2zm-5 3v7l-2-2V8h2z"}),c("path",{d:"M17 0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-3.782 0-7.238-1.4-9.876-3.71l-5.417 5.417-1.414-1.414 5.417-5.417A14.943 14.943 0 012 15c0-1.05.108-2.074.313-3.062l1.906.672C4.075 13.385 4 14.184 4 15c0 7.18 5.82 13 13 13s13-5.82 13-13S24.18 2 17 2c-1.002 0-1.978.113-2.915.328l-.75-1.877A15.031 15.031 0 0117 0zM9.621 1.937l.75 1.877a13.062 13.062 0 00-4.82 5.024l-1.907-.673a15.068 15.068 0 015.977-6.228z"}))},iet=oet;var DM={};de(DM,{icon:()=>fet});var wcr=V(ne());var aet=["title","titleId"];function Ere(){return Ere=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cet=function(t){var n=t.title,r=t.titleId,o=set(t,aet);return c("svg",Ere({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1 8c3.983 0 7.732 1.013 11.001 2.797v2.312A20.887 20.887 0 002 10.023v11.025c4.85.462 9.27 4.183 9.955 8.691l.035.261H12v2h-1.938l-.018-1.236c-.116-4.015-4.336-7.631-8.793-7.76L0 22.986V8h1zm13-8h1c9.28 0 16.825 7.437 16.997 16.677L32 17v15h-2V17c0-7.84-6.014-14.274-13.68-14.943L16 2.033v7.681l-2-1.143V0h1-1z"}),c("path",{className:"euiIcon__fillSecondary",d:"M26.997 30.636L27.009 32H14V11.305l1.483.82c6.994 3.861 11.382 10.735 11.514 18.51zm-2.048-1.04C24.505 23.556 21.205 18.2 16 14.771V30h8.974l-.025-.404z"}))},fet=cet;var zM={};de(zM,{icon:()=>vet});var xcr=V(ne());var pet=["title","titleId"];function Ire(){return Ire=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function het(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var met=function(t){var n=t.title,r=t.titleId,o=det(t,pet);return c("svg",Ire({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M16 21a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z"}),c("path",{d:"M20 32h-8v-4.06a1 1 0 00-1.61-.67l-2.88 2.87-5.65-5.65 2.87-2.87a.92.92 0 00.2-1 .93.93 0 00-.86-.6H0V12h4.06a.92.92 0 00.85-.58.94.94 0 00-.19-1L1.86 7.51l5.65-5.65 2.87 2.87A1 1 0 0012 4.06V0h8v4.06a1 1 0 001.61.67l2.87-2.87 5.66 5.66-2.87 2.87a.92.92 0 00-.2 1 .93.93 0 00.86.6H32v8h-4.06a.92.92 0 00-.85.58.94.94 0 00.19 1l2.87 2.87-5.66 5.66-2.87-2.87a1 1 0 00-1.61.67L20 32zm-6-2h4v-2.06a3 3 0 015-2.08l1.46 1.46 2.83-2.83L25.86 23a3 3 0 012.08-5H30v-4h-2.06a3 3 0 01-2.08-5l1.46-1.46-2.83-2.85L23 6.14a3 3 0 01-5-2.08V2h-4v2.06a3 3 0 01-5 2.08L7.51 4.69 4.69 7.51 6.14 9a3 3 0 01-2.08 5H2v4h2.06a3 3 0 012.08 5l-1.45 1.49 2.83 2.83L9 25.86a3 3 0 015 2.08V30z"}))},vet=met;var NM={};de(NM,{icon:()=>Oet});var Scr=V(ne());var get=["title","titleId"];function kre(){return kre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wet=function(t){var n=t.title,r=t.titleId,o=yet(t,get);return c("svg",kre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),c("path",{className:"euiIcon__fillSecondary",d:"M28 16h-2c0-5.523-4.477-10-10-10S6 10.477 6 16H4C4 9.373 9.373 4 16 4s12 5.373 12 12z"}),c("path",{d:"M21.71 11.71L20.3 10.3 18 12.57a4 4 0 00-2-.57 4 4 0 104 4 4 4 0 00-.57-2l2.28-2.29zM16 18a2 2 0 110-4 2 2 0 010 4z"}))},Oet=wet;var LM={};de(LM,{icon:()=>ket});var Icr=V(ne());var xet=["title","titleId"];function Pre(){return Pre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iet=function(t){var n=t.title,r=t.titleId,o=_et(t,xet);return c("svg",Pre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M30 19.092v12.88H2v-5.386l6.747-6.747.708.708c.236.236.48.463.733.68L4 27.414v2.558h24v-8.91c.186-.166.369-.339.546-.516L30 19.092zm-20.85-3.19A10.955 10.955 0 018 11C8 4.925 12.925 0 19 0s11 4.925 11 11c0 1.76-.414 3.425-1.15 4.9l-1.51-1.51A8.973 8.973 0 0028 11a9 9 0 10-17.34 3.391l-1.51 1.51z"}),c("path",{className:"euiIcon__fillSecondary",d:"M19 20a8.96 8.96 0 005.618-1.968l-4.202-4.204a2 2 0 00-2.828 0l-4.205 4.205A8.96 8.96 0 0019 20zm-2.826-7.586a4 4 0 015.656 0l5.656 5.657-.707.707A10.967 10.967 0 0119 22a10.967 10.967 0 01-7.778-3.221l-.707-.707 5.659-5.658z"}))},ket=Iet;var FM={};de(FM,{icon:()=>Aet});var Pcr=V(ne());var Pet=["title","titleId"];function jre(){return jre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tet=function(t){var n=t.title,r=t.titleId,o=jet(t,Pet);return c("svg",jre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M10 18v.56a1 1 0 01-.68.95L3 21.61V10a1 1 0 01.4-.8l3.2-2.4-1.2-1.6-3.2 2.4A3 3 0 001 10v12a3 3 0 001.2 2.4l3.2 2.4 1.2-1.6-2.47-1.85 5.82-1.95A3 3 0 0012 18.56V18h-2zM29.8 7.6l-3.2-2.4-1.2 1.6 3.2 2.4a1 1 0 01.4.8v11.61l-6.32-2.11a1 1 0 01-.68-.95V18h-2v.56a3 3 0 002.05 2.85l5.82 1.94-2.47 1.85 1.2 1.6 3.2-2.4A3 3 0 0031 22V10a3 3 0 00-1.2-2.4z"}),c("path",{d:"M11 6A3 3 0 018.88.88a3.07 3.07 0 014.24 0A3 3 0 0111 6zm0-4a1 1 0 10-.012 2A1 1 0 0011 2zm0 30a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0111 32zm0-4a1 1 0 10-.012 2A1 1 0 0011 28zm0-12a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0111 16zm0-4a1 1 0 10-.012 2A1 1 0 0011 12zm10-6A3 3 0 0118.88.88a3.07 3.07 0 014.24 0A3 3 0 0121 6zm0-4a1 1 0 10-.012 2A1 1 0 0021 2zm0 30a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0121 32zm0-4a1 1 0 10-.012 2A1 1 0 0021 28zm0-12a3 3 0 01-2.12-5.12 3.07 3.07 0 014.24 0A3 3 0 0121 16zm0-4a1 1 0 10-.012 2A1 1 0 0021 12z"}))},Aet=Tet;var BM={};de(BM,{icon:()=>Net});var Ccr=V(ne());var Met=["title","titleId"];function Cre(){return Cre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Det(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zet=function(t){var n=t.title,r=t.titleId,o=Ret(t,Met);return c("svg",Cre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.81 15.19A8.94 8.94 0 0115.62 3.86l.38.42.38-.42a8.94 8.94 0 0114.26 10.68l-1.7-1.07a6.94 6.94 0 00-11.07-8.28L16 7.29l-1.87-2.1A6.94 6.94 0 003.41 14l-1.6 1.19zM16 31.18l-7.74-8.51 1.48-1.34L16 28.21l6.26-6.88 1.48 1.34z"}),c("path",{className:"euiIcon__fillSecondary",d:"M16.16 23.29l-4.1-7.17L10.62 19H0v-2h9.38l2.56-5.12 3.9 6.83 4.13-10.32L23.66 17H32v2h-9.66l-2.31-5.39z"}))},Net=zet;var WM={};de(WM,{icon:()=>Het});var Acr=V(ne());var Let=["title","titleId"];function Tre(){return Tre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wet=function(t){var n=t.title,r=t.titleId,o=Fet(t,Let);return c("svg",Tre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M25 2h-5V0h-2v2h-3V0h-2v2h-3V0H8v2H3v26h22V2zm-2 24H5V4h3v2h2V4h3v2h2V4h3v2h2V4h3v22z"}),c("path",{d:"M27 7v23H8v2h21V7z"}),c("path",{className:"euiIcon__fillSecondary",d:"M8 12h12v2H8zM8 17h12v2H8z"}))},Het=Wet;var HM={};de(HM,{icon:()=>Get});var Rcr=V(ne());var $et=["title","titleId"];function Are(){return Are=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qet(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uet=function(t){var n=t.title,r=t.titleId,o=Vet(t,$et);return c("svg",Are({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M16 20a4 4 0 110-8 4 4 0 010 8zm0-6a2 2 0 100 4 2 2 0 000-4z"}),c("path",{d:"M8 4a4 4 0 10-4 4 4 4 0 002-.57l5.27 5.27 1.41-1.41L7.43 6A4 4 0 008 4zM4 6a2 2 0 110-4 2 2 0 010 4zm16.71 6.71L26 7.43A4 4 0 0028 8a4 4 0 10-4-4 4 4 0 00.57 2l-5.27 5.27 1.41 1.44zM28 2a2 2 0 110 4 2 2 0 010-4zM11.29 19.29L6 24.57A4 4 0 004 24a4 4 0 104 4 4 4 0 00-.57-2l5.27-5.27-1.41-1.44zM4 30a2 2 0 110-4 2 2 0 010 4zm24-6a4 4 0 00-2 .57l-5.27-5.27-1.41 1.41L24.57 26a4 4 0 00-.57 2 4 4 0 104-4zm0 6a2 2 0 110-4 2 2 0 010 4z"}))},Get=Uet;var $M={};de($M,{icon:()=>Qet});var zcr=V(ne());var Jet=["title","titleId"];function Mre(){return Mre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ket(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yet=function(t){var n=t.title,r=t.titleId,o=Xet(t,Jet);return c("svg",Mre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M29 12a3 3 0 00-3 3h-4a3 3 0 00-3-3h-6a3 3 0 00-3 3H6a3 3 0 00-3-3H0v14h3a3 3 0 003-3h4a3 3 0 003 3h6a3 3 0 003-3h4a3 3 0 003 3h3V12h-3zM3 24H2V14h1a1 1 0 011 1v8a1 1 0 01-1 1zm17-3v2a1 1 0 01-1 1h-6a1 1 0 01-1-1v-2H6v-4h6v-2a1 1 0 011-1h6a1 1 0 011 1v2h6v4h-6zm10 3h-1a1 1 0 01-1-1v-8a1 1 0 011-1h1v10z"}),c("path",{className:"euiIcon__fillSecondary",d:"M22 6H10v2h5v2h2V8h5z"}))},Qet=Yet;var VM={};de(VM,{icon:()=>ntt});var Lcr=V(ne());var Zet=["title","titleId"];function Rre(){return Rre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ttt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rtt=function(t){var n=t.title,r=t.titleId,o=ett(t,Zet);return c("svg",Rre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),c("path",{className:"euiIcon__fillSecondary",d:"M15 4h2v9.17A3.009 3.009 0 0118.83 15H26v2h-7.17A3.001 3.001 0 1115 13.17V4zm1 13a1 1 0 100-2 1 1 0 000 2z"}))},ntt=rtt;var qM={};de(qM,{icon:()=>ltt});var Bcr=V(ne());var ott=["title","titleId"];function Dre(){return Dre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function att(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var stt=function(t){var n=t.title,r=t.titleId,o=itt(t,ott);return c("svg",Dre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M25 5h-.17v2H25a1 1 0 011 1v20a1 1 0 01-1 1H7a1 1 0 01-1-1V8a1 1 0 011-1h.17V5H7a3 3 0 00-3 3v20a3 3 0 003 3h18a3 3 0 003-3V8a3 3 0 00-3-3z"}),c("path",{d:"M23 3h-3V0h-8v3H9v6h14V3zm-2 4H11V5h3V2h4v3h3v2z"}),c("path",{className:"euiIcon__fillSecondary",d:"M10 13h12v2H10zM10 18h12v2H10zM10 23h12v2H10z"}))},ltt=stt;var UM={};de(UM,{icon:()=>dtt});var Hcr=V(ne());var utt=["title","titleId"];function zre(){return zre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ftt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ptt=function(t){var n=t.title,r=t.titleId,o=ctt(t,utt);return c("svg",zre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M20.38 7.001L17 9.619V0h-2v9.619l-3.37-2.618-1.25 1.513L16 12.878l5.63-4.364z"}),c("path",{d:"M21.06.165l-1.11 1.61 9.25 5.983L16 16.29 2.8 7.758l9.25-5.983-1.1-1.61L0 7.234v13.653l16 10.337 16-10.337V7.234L21.06.164zM2 9.57l13 8.407v10.279L2 19.84V9.57zm15 18.676V17.978l13-8.407V19.85l-13 8.397z"}))},dtt=ptt;var GM={};de(GM,{icon:()=>ytt});var Vcr=V(ne());var htt=["title","titleId"];function Nre(){return Nre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gtt=function(t){var n=t.title,r=t.titleId,o=mtt(t,htt);return c("svg",Nre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M11.63 8h7.38v2h-7.38z"}),c("path",{d:"M7 8h3.19v2H7z"}),c("path",{className:"euiIcon__fillSecondary",d:"M7 16h7.38v2H7z"}),c("path",{d:"M15.81 16H19v2h-3.19zM7 12h9v2H7z"}),c("path",{d:"M13 0C5.82 0 0 5.82 0 13s5.82 13 13 13 13-5.82 13-13A13 13 0 0013 0zm0 24C6.925 24 2 19.075 2 13S6.925 2 13 2s11 4.925 11 11-4.925 11-11 11zM22.581 23.993l1.414-1.414 7.708 7.708-1.414 1.414z"}))},ytt=gtt;var JM={};de(JM,{icon:()=>_tt});var Ucr=V(ne());var btt=["title","titleId"];function Lre(){return Lre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ott(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xtt=function(t){var n=t.title,r=t.titleId,o=wtt(t,btt);return c("svg",Lre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14 32l-.36-.14A21.07 21.07 0 010 12.07V5.44L14 .06l14 5.38v6.63a21.07 21.07 0 01-13.64 19.78L14 32zM2 6.82v5.25a19.08 19.08 0 0012 17.77 19.08 19.08 0 0012-17.77V6.82L14 2.2 2 6.82z"}),c("path",{className:"euiIcon__fillSecondary",d:"M9 17.83h2V23H9zM11 10.18V7H9v3.18a3 3 0 102 0zM10 14a1 1 0 110-2 1 1 0 010 2zM17 7h2v5.17h-2zM21 17a3 3 0 10-4 2.82V23h2v-3.18A3 3 0 0021 17zm-3 1a1 1 0 110-2 1 1 0 010 2z"}))},_tt=xtt;var XM={};de(XM,{icon:()=>Ptt});var Jcr=V(ne());var Stt=["title","titleId"];function Fre(){return Fre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Itt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ktt=function(t){var n=t.title,r=t.titleId,o=Ett(t,Stt);return c("svg",Fre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 10h4v2H5v7.928c0 1.299.808 2.795 2.88 4.48 1.83 1.489 4.524 3.02 8.12 4.584V26h2v5.992l-1.38-.567c-4.372-1.797-7.724-3.613-10-5.465C4.358 24.122 3 22.114 3 19.928V10z"}),c("path",{className:"euiIcon__fillSecondary",d:"M9 10h9v14l-1.272-.458c-1.367-.494-3.23-1.314-4.768-2.39C10.484 20.118 9 18.636 9 16.761V10zm1.895 1.876v4.887c0 .877.744 1.867 2.158 2.856.937.656 2.038 1.219 3.052 1.657v-9.4h-5.21z"}),c("path",{d:"M29 1H9v7h2V2.966h16V16.73c0 .558-.245 1.128-.756 1.72-.515.596-1.256 1.158-2.12 1.668-1.381.818-2.961 1.434-4.124 1.817V24c1.26-.378 3.334-1.12 5.155-2.197.965-.57 1.905-1.261 2.612-2.08.712-.822 1.233-1.827 1.233-2.992V1z"}))},Ptt=ktt;var KM={};de(KM,{icon:()=>Mtt});var Kcr=V(ne());var jtt=["title","titleId"];function Bre(){return Bre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ttt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Att=function(t){var n=t.title,r=t.titleId,o=Ctt(t,jtt);return c("svg",Bre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M4 4h6v2H4zM22 4h6v2h-6zM4 22h6v2H4z"}),c("path",{d:"M0 14h14V0H0v14zM2 2h10v10H2V2zm16-2v14h14V0H18zm12 12H20V2h10v10zM0 32h14V18H0v14zm2-12h10v10H2V20zm16 12h14V18H18v14zm2-12h10v10H20V20z"}),c("path",{className:"euiIcon__fillSecondary",d:"M22 22h6v2h-6z"}))},Mtt=Att;var YM={};de(YM,{icon:()=>Ltt});var Qcr=V(ne());var Rtt=["title","titleId"];function Wre(){return Wre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ztt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ntt=function(t){var n=t.title,r=t.titleId,o=Dtt(t,Rtt);return c("svg",Wre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M18 6h9v2h-9zM5 6h9v2H5zM5 12h9v2H5zM18 12h9v2h-9zM5 18h9v2H5zM18 18h9v2h-9zM18 24h9v2h-9zM5 24h9v2H5z"}),c("path",{d:"M29 32H3a3 3 0 01-3-3V3a3 3 0 013-3h26a3 3 0 013 3v26a3 3 0 01-3 3zM3 2a1 1 0 00-1 1v26a1 1 0 001 1h26a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},Ltt=Ntt;var QM={};de(QM,{icon:()=>$tt});var efr=V(ne());var Ftt=["title","titleId"];function Hre(){return Hre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wtt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Htt=function(t){var n=t.title,r=t.titleId,o=Btt(t,Ftt);return c("svg",Hre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 4v20.34L16 32l12-7.64V4H4zm22 2v4h-4a3 3 0 00-3 3v5h-6v-5a3 3 0 00-3-3H6V6h20zm-7.87 14L16 22.52 13.87 20h4.26zM6 12h4a1 1 0 011 1v6.7l3.69 4.37-2.58 3.06L6 23.24V12zm7.81 16.22l2.19-2.6 2.19 2.6L16 29.61l-2.19-1.39zm6.08-1.09l-2.58-3.06L21 19.7V13a1 1 0 011-1h4v11.24l-6.11 3.89z"}),c("path",{className:"euiIcon__fillSecondary",d:"M4 0h24v2H4z"}))},$tt=Htt;var ZM={};de(ZM,{icon:()=>Jtt});var rfr=V(ne());var Vtt=["title","titleId"];function $re(){return $re=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Utt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gtt=function(t){var n=t.title,r=t.titleId,o=qtt(t,Vtt);return c("svg",$re({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M16 21a5 5 0 110-10 5 5 0 010 10zm0-8a3 3 0 100 6 3 3 0 000-6z"}),c("path",{d:"M27.42 19.69a12 12 0 01-23.11-1l2.27-.45-4.32-4.47L0 19.55l2.39-.47a14 14 0 0027 1.23l-1.97-.62zm2.23-6.77a14 14 0 00-27-1.23l1.9.62a12 12 0 0123.11 1l-2.27.45 4.32 4.46L32 12.45l-2.35.47z"}))},Jtt=Gtt;var eR={};de(eR,{icon:()=>Ztt});var ofr=V(ne());var Xtt=["title","titleId"];function Vre(){return Vre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ytt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qtt=function(t){var n=t.title,r=t.titleId,o=Ktt(t,Xtt);return c("svg",Vre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M4.216 12.377A10.948 10.948 0 002.181 17H.153a12.941 12.941 0 012.693-6.118l1.37 1.495zm2.948-2.703l-1.37-1.495A12.94 12.94 0 0113 6v2c-2.144 0-4.144.613-5.836 1.674z"}),c("path",{d:"M26 4.414V19c0 7.18-5.82 13-13 13C6.5 32 1.115 27.23.153 21H2.18c.94 5.12 5.427 9 10.819 9 6.075 0 11-4.925 11-11V4.414l-4.293 4.293-1.414-1.414L25 .586l6.707 6.707-1.414 1.414L26 4.414zm-7.836 9.909l1.472 1.354-7.577 8.235-4.835-4.442 1.353-1.473 3.364 3.09 6.223-6.764z"}))},Ztt=Qtt;var tR={};de(tR,{icon:()=>ort});var afr=V(ne());var ert=["title","titleId"];function qre(){return qre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nrt=function(t){var n=t.title,r=t.titleId,o=trt(t,ert);return c("svg",qre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M19.307 3.21a2.91 2.91 0 10-.223 1.94 11.636 11.636 0 018.232 7.049l1.775-.698a13.576 13.576 0 00-9.784-8.291zm-2.822 1.638a.97.97 0 110-1.939.97.97 0 010 1.94zm-4.267.805l-.717-1.774a13.576 13.576 0 00-8.291 9.784 2.91 2.91 0 101.94.223 11.636 11.636 0 017.068-8.233zm-8.34 11.802a.97.97 0 110-1.94.97.97 0 010 1.94zm12.607 8.727a2.91 2.91 0 00-2.599 1.62 11.636 11.636 0 01-8.233-7.05l-1.774.717a13.576 13.576 0 009.813 8.291 2.91 2.91 0 102.793-3.578zm0 3.879a.97.97 0 110-1.94.97.97 0 010 1.94zM32 16.485a2.91 2.91 0 10-4.199 2.599 11.636 11.636 0 01-7.05 8.232l.718 1.775a13.576 13.576 0 008.291-9.813A2.91 2.91 0 0032 16.485zm-2.91.97a.97.97 0 110-1.94.97.97 0 010 1.94z"}),c("path",{className:"euiIcon__fillSecondary",d:"M19.19 16.35a3.879 3.879 0 10-5.42 0 4.848 4.848 0 00-2.134 4.014v1.939h9.697v-1.94a4.848 4.848 0 00-2.143-4.014zm-4.645-2.774a1.94 1.94 0 113.88 0 1.94 1.94 0 01-3.88 0zm-.97 6.788a2.91 2.91 0 115.819 0h-5.818z"}))},ort=nrt;var rR={};de(rR,{icon:()=>urt});var lfr=V(ne());var irt=["title","titleId"];function Ure(){return Ure=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function srt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lrt=function(t){var n=t.title,r=t.titleId,o=art(t,irt);return c("svg",Ure({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M32 32H4a4 4 0 01-4-4V0h2v28a2 2 0 002 2h28v2z"}),c("path",{d:"M6 20h2v7H6zM16 12h2v15h-2zM26 17h2v10h-2z"}),c("path",{d:"M27 6a3 3 0 00-2.08.84L20 4.36A2.2 2.2 0 0020 4a3 3 0 00-6 0c.001.341.062.68.18 1l-5.6 4.46A3 3 0 007 9a3 3 0 103 3 2.93 2.93 0 00-.18-1l5.6-4.48A3 3 0 0017 7a3 3 0 002.08-.84l5 2.48A2.2 2.2 0 0024 9a3 3 0 103-3zM7 13a1 1 0 110-2 1 1 0 010 2zm10-8a1 1 0 110-2 1 1 0 010 2zm10 5a1 1 0 110-2 1 1 0 010 2z"}))},urt=lrt;var nR={};de(nR,{icon:()=>hrt});var cfr=V(ne());var crt=["title","titleId"];function Gre(){return Gre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function prt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var drt=function(t){var n=t.title,r=t.titleId,o=frt(t,crt);return c("svg",Gre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.74 7.73l-1.5-1.32a13 13 0 000 17.19l1.5-1.32a11 11 0 010-14.54v-.01z"}),c("path",{d:"M6.51 3.66L5 2.34c-6.377 7.24-6.377 18.09 0 25.33l1.5-1.32C.792 19.867.792 10.153 6.5 3.67l.01-.01zm17.25 2.75l-1.5 1.32a11 11 0 010 14.54l1.5 1.32a13 13 0 000-17.19v.01z"}),c("path",{d:"M27 2.34l-1.5 1.32c5.708 6.483 5.708 16.197 0 22.68l1.5 1.33c6.377-7.24 6.377-18.09 0-25.33z"}),c("path",{className:"euiIcon__fillSecondary",d:"M21 15a5 5 0 10-6 4.9V31h2V19.9a5 5 0 004-4.9zm-5 3a3 3 0 110-6 3 3 0 010 6z"}))},hrt=drt;var oR={};de(oR,{icon:()=>brt});var pfr=V(ne());var mrt=["title","titleId"];function Jre(){return Jre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function grt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yrt=function(t){var n=t.title,r=t.titleId,o=vrt(t,mrt);return c("svg",Jre({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.81 1H2v30h5.815c1.705 0 3.343-.783 4.38-2.094l3.182-4.023.006.006 2.607-3.137.01-.014a9.42 9.42 0 001.953-4.826 9.112 9.112 0 00-1.891-6.522l-.01-.012-2.603-3.156L12.197 3.1C11.16 1.786 9.52 1 7.81 1zm6.118 7.523l-3.31-4.195C9.968 3.512 8.917 3 7.81 3H4v26h3.815c1.1 0 2.15-.508 2.8-1.32l3.33-4.21-1.796-1.77-.027-.033c-2.84-3.317-2.83-8.195.028-11.287l.004-.004a98.893 98.893 0 011.774-1.853zm4.043 8.099c-.12 1.279-.616 2.537-1.49 3.64l-1.288 1.63-1.578-1.556c-2.19-2.59-2.118-6.3.001-8.596.6-.64 1.119-1.183 1.561-1.635l1.293 1.638v.002l.014.016c.942 1.192 1.446 2.564 1.51 3.949a7.09 7.09 0 01-.023.912z"}),c("path",{fillRule:"evenodd",className:"euiIcon__fillSecondary",d:"M23.801 3c-.382 0-1.052.231-1.925.812-.636.422-1.228.928-1.677 1.357l1.771 2.245.005.007.024.03.008.01c4.003 5.099 3.99 12.057-.035 17.145l-1.793 2.267a8.206 8.206 0 001.769 1.498c.698.427 1.337.629 1.852.629H28V3h-4.199zm-6.148 23.842l.765 1.053.023.027c.717.851 1.566 1.607 2.464 2.156.89.544 1.89.922 2.895.922H30V1h-6.199c-.987 0-2.066.505-3.032 1.146a14.934 14.934 0 00-2.352 1.974l-.276.288-.595.628 2.855 3.619.006.006c3.459 4.375 3.457 10.329-.004 14.704l-2.75 3.477z"}))},brt=yrt;var iR={};de(iR,{icon:()=>Srt});var hfr=V(ne());var wrt=["title","titleId"];function Xre(){return Xre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _rt=function(t){var n=t.title,r=t.titleId,o=Ort(t,wrt);return c("svg",Xre({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 4V2h2v2H2zm5 0V2h2v2H7zm5 0V2h2v2h-2zM2 9V7h2v2H2zm5 0V7h2v2H7zm5 0V7h2v2h-2zM2 14v-2h2v2H2zm5 0v-2h2v2H7zm5 0v-2h2v2h-2z"}))},Srt=_rt;var aR={};de(aR,{icon:()=>jrt});var vfr=V(ne());var Ert=["title","titleId"];function Kre(){return Kre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function krt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Prt=function(t){var n=t.title,r=t.titleId,o=Irt(t,Ert);return c("svg",Kre({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.857 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}),c("path",{d:"M10.5 2.75a.75.75 0 011.5 0v10.5a.75.75 0 01-1.5 0V2.75z"}))},jrt=Prt;var sR={};de(sR,{icon:()=>Rrt});var yfr=V(ne());var Crt=["title","titleId"];function Yre(){return Yre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Art(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mrt=function(t){var n=t.title,r=t.titleId,o=Trt(t,Crt);return c("svg",Yre({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 2.75a.75.75 0 011.5 0v10.5a.75.75 0 01-1.5 0V2.75z"}),c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M13.135 14.043a.75.75 0 00.025-1.06l-4.59-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 00-1.085-1.035l-4.59 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.286.3.76.31 1.06.024z"}))},Rrt=Mrt;var lR={};de(lR,{icon:()=>Frt});var wfr=V(ne());var Drt=["title","titleId"];function Qre(){return Qre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lrt=function(t){var n=t.title,r=t.titleId,o=zrt(t,Drt);return c("svg",Qre({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.957 4.982a.75.75 0 011.06-.025l4.81 4.591a.25.25 0 00.346 0l4.81-4.59a.75.75 0 011.035 1.085l-4.81 4.59a1.75 1.75 0 01-2.416 0l-4.81-4.59a.75.75 0 01-.025-1.06z"}))},Frt=Lrt;var uR={};de(uR,{icon:()=>Vrt});var xfr=V(ne());var Brt=["title","titleId"];function Zre(){return Zre=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $rt=function(t){var n=t.title,r=t.titleId,o=Wrt(t,Brt);return c("svg",Zre({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.018 14.043a.75.75 0 00.024-1.06l-4.59-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.085-1.035l-4.59 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.286.3.761.31 1.06.024z"}))},Vrt=$rt;var cR={};de(cR,{icon:()=>Xrt});var Sfr=V(ne());var qrt=["title","titleId"];function ene(){return ene=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Grt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jrt=function(t){var n=t.title,r=t.titleId,o=Urt(t,qrt);return c("svg",ene({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.982 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}))},Xrt=Jrt;var fR={};de(fR,{icon:()=>ent});var Ifr=V(ne());var Krt=["title","titleId"];function tne(){return tne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qrt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zrt=function(t){var n=t.title,r=t.titleId,o=Yrt(t,Krt);return c("svg",tne({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.957 11.018c.286.3.761.31 1.06.024l4.81-4.59a.25.25 0 01.346 0l4.81 4.59a.75.75 0 001.035-1.085l-4.81-4.59a1.75 1.75 0 00-2.416 0l-4.81 4.59a.75.75 0 00-.025 1.06z"}))},ent=Zrt;var pR={};de(pR,{icon:()=>int});var Pfr=V(ne());var tnt=["title","titleId"];function rne(){return rne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ont=function(t){var n=t.title,r=t.titleId,o=rnt(t,tnt);return c("svg",rne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.928 8.468L4 7.618l.446-1.427L7.375 7.25 7.287 4h1.484l-.097 3.296 2.88-1.039L12 7.693l-2.977.86 1.92 2.56L9.741 12 7.937 9.28l-1.745 2.654-1.213-.86z"}))},int=ont;var dR={};de(dR,{icon:()=>cnt});var Cfr=V(ne());var ant=["title","titleId"];function nne(){return nne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var unt=function(t){var n=t.title,r=t.titleId,o=snt(t,ant);return c("svg",nne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.277 10.088c.02.014.04.03.057.047.582.55 1.134.812 1.666.812.586 0 1.84-.293 3.713-.88L9 6.212V2H7v4.212l-1.723 3.876zm-.438.987L3.539 14h8.922l-1.32-2.969C9.096 11.677 7.733 12 7 12c-.74 0-1.463-.315-2.161-.925zM6 2H5V1h6v1h-1v4l3.375 7.594A1 1 0 0112.461 15H3.54a1 1 0 01-.914-1.406L6 6V2z"}))},cnt=unt;var hR={};de(hR,{icon:()=>mnt});var Afr=V(ne());var fnt=["title","titleId"];function one(){return one=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hnt=function(t){var n=t.title,r=t.titleId,o=pnt(t,fnt);return c("svg",one({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M2.316 12h10.368c-.188-.704-.28-1.691-.348-3.037-.07-1.382-.103-1.888-.19-2.612-.028-.236-.06-.462-.096-.68-.31-1.892-1.506-2.923-3.708-3.131a1 1 0 10-1.684 0c-2.202.208-3.397 1.24-3.708 3.13a16.01 16.01 0 00-.096.68c-.087.725-.12 1.23-.19 2.613-.068 1.346-.16 2.333-.348 3.037zm10.843 1H1.84c-.308.353-.737.5-1.341.5a.5.5 0 110-1c.786 0 1.024-.783 1.166-3.587.07-1.407.105-1.926.196-2.681.03-.25.063-.49.102-.724.334-2.041 1.546-3.313 3.556-3.792a2 2 0 013.96 0c2.01.479 3.222 1.75 3.557 3.792a17 17 0 01.102.724c.09.755.125 1.274.196 2.681.14 2.804.379 3.587 1.165 3.587a.5.5 0 110 1c-.604 0-1.033-.147-1.341-.5zM5.5 14h4a2 2 0 11-4 0z"}))},mnt=hnt;var mR={};de(mR,{icon:()=>wnt});var Rfr=V(ne());var vnt=["title","titleId"];function ine(){return ine=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ynt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bnt=function(t){var n=t.title,r=t.titleId,o=gnt(t,vnt);return c("svg",ine({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.5 14l-.005.15a2 2 0 01-3.972.153l-.018-.154L5.5 14h4zm5.38-12.825a.5.5 0 01.008.64l-.063.065-14 12a.5.5 0 01-.713-.695l.063-.065 14-12a.5.5 0 01.705.055zM13.036 5.51l.055.353.048.368c.066.554.103.98.145 1.724l.08 1.491c.146 2.371.402 3.053 1.136 3.053a.5.5 0 110 1c-.603 0-1.031-.146-1.34-.499H4.185l1.182-1h7.317c-.172-.644-.264-1.528-.33-2.708l-.09-1.638c-.033-.514-.066-.87-.118-1.304l-.011-.077.901-.763zM7.5 0a2 2 0 011.98 1.717c.476.113.907.27 1.292.472l-.838.71a5.728 5.728 0 00-1.591-.36 1 1 0 10-1.684 0C4.455 2.75 3.26 3.78 2.95 5.671l-.05.334-.046.347c-.08.676-.115 1.161-.176 2.347l-.014.265-.005.09-1.058.897c.018-.234.035-.488.05-.763l.077-1.427c.038-.626.073-1.025.134-1.528.03-.25.063-.49.102-.724.334-2.04 1.546-3.313 3.555-3.792l.004-.019A2 2 0 017.5 0z"}))},wnt=bnt;var vR={};de(vR,{icon:()=>Ent});var zfr=V(ne());var Ont=["title","titleId"];function ane(){return ane=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _nt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Snt=function(t){var n=t.title,r=t.titleId,o=xnt(t,Ont);return c("svg",ane({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.04 13.274a.5.5 0 10.892.453l3.014-5.931a.5.5 0 00-.445-.727H5.316L8.03 1.727a.5.5 0 10-.892-.453L4.055 7.343a.5.5 0 00.446.726h5.185L7.04 13.274z"}))},Ent=Snt;var gR={};de(gR,{icon:()=>Cnt});var Lfr=V(ne());var Int=["title","titleId"];function sne(){return sne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jnt=function(t){var n=t.title,r=t.titleId,o=knt(t,Int);return c("svg",sne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M0 6h4v4H0V6zm1 1v2h2V7H1zm5-1h4v4H6V6zm1 1v2h2V7H7zm5-1h4v4h-4V6zm1 3h2V7h-2v2z"}))},Cnt=jnt;var yR={};de(yR,{icon:()=>Dnt});var Bfr=V(ne());var Tnt=["title","titleId"];function lne(){return lne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rnt=function(t){var n=t.title,r=t.titleId,o=Ant(t,Tnt);return c("svg",lne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 1v2h2V1H7zM6 0h4v4H6V0zm0 6h4v4H6V6zm1 1v2h2V7H7zm-1 5h4v4H6v-4zm1 1v2h2v-2H7z"}))},Dnt=Rnt;var bR={};de(bR,{icon:()=>Bnt});var Hfr=V(ne());var znt=["title","titleId"];function une(){return une=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fnt=function(t){var n=t.title,r=t.titleId,o=Nnt(t,znt);return c("svg",une({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 10.038a3.49 3.49 0 012.5-1.05h2a2.5 2.5 0 002.462-2.061 2 2 0 111.008.017A3.5 3.5 0 019.5 9.987h-2a2.5 2.5 0 00-2.466 2.085A2 2 0 114 12.063V3.937a2 2 0 111 0v6.1zM4.5 3a1 1 0 100-2 1 1 0 000 2zm0 12a1 1 0 100-2 1 1 0 000 2zm8-9a1 1 0 100-2 1 1 0 000 2z"}))},Bnt=Fnt;var wR={};de(wR,{icon:()=>qnt});var Vfr=V(ne());var Wnt=["title","titleId"];function cne(){return cne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $nt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vnt=function(t){var n=t.title,r=t.titleId,o=Hnt(t,Wnt);return c("svg",cne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 7.987a3.49 3.49 0 00-2.5 1.05v-4.1a2 2 0 10-1 0v6.126a2 2 0 101.034.01A2.5 2.5 0 016 8.986h1a3.5 3.5 0 003.47-3.043 2 2 0 10-1.009-.017A2.5 2.5 0 017 7.987H6zM4 3a1 1 0 11-2 0 1 1 0 012 0zm0 10a1 1 0 11-2 0 1 1 0 012 0zm7-9a1 1 0 11-2 0 1 1 0 012 0z",clipRule:"evenodd"}),c("path",{d:"M13.5 10.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM9 15c.284-1.223 1.519-2.143 3-2.143s2.716.92 3 2.143H9z"}))},qnt=Vnt;var OR={};de(OR,{icon:()=>Knt});var Ufr=V(ne());var Unt=["title","titleId"];function fne(){return fne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jnt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xnt=function(t){var n=t.title,r=t.titleId,o=Gnt(t,Unt);return c("svg",fne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3.732 13.096l-.197-.197 2.83-2.828.706.707-2.829 2.828.708.708 2.828-2.828a1 1 0 000-1.414L5.658 7.95a.993.993 0 00-.708-.293.994.994 0 00-.708.293l-2.828 2.829.707.707 2.829-2.83.707.708-2.829 2.829.904.903zm1.218-6.44c.512 0 1.023.196 1.414.587l2.121 2.12a2 2 0 010 2.83L4.95 15.728 0 10.778l3.535-3.535a1.993 1.993 0 011.415-.586zM14.02 1l.708.707-6.95 6.95-.707-.707L14.021 1z"}))},Knt=Xnt;var xR={};de(xR,{icon:()=>tot});var Jfr=V(ne());var Ynt=["title","titleId"];function pne(){return pne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Znt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eot=function(t){var n=t.title,r=t.titleId,o=Qnt(t,Ynt);return c("svg",pne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 013.999 8.17V6.662h7.994V8.17zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486zM4 5.658V1.005h1.262v4.653H4zm2.261 0V1.005h1.244v4.653H6.26zm2.244 0V1.005h1.235v4.653H8.504zm2.234 0V1.005h1.254v4.653h-1.254zM3.008 0L3 8.17a2.509 2.509 0 002.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 002.498-2.512L13 0H3.008z"}))},tot=eot;var _R={};de(_R,{icon:()=>aot});var Kfr=V(ne());var rot=["title","titleId"];function dne(){return dne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iot=function(t){var n=t.title,r=t.titleId,o=not(t,rot);return c("svg",dne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.651 5.126l.922-.455.884-2.343a.5.5 0 01.939.344L12.374 5.39l-1.45.717A5.3 5.3 0 0111 7h1.043l2.3 2.198a.5.5 0 01-.692.723L11.642 8h-.737c-.09.466-.24.899-.441 1.283l.892.49 1.278 3.554a.5.5 0 01-.94.342l-1.15-3.2-.655-.36C9.373 10.665 8.716 11 8 11s-1.374-.335-1.89-.893l-.658.361-1.15 3.201a.5.5 0 11-.94-.342l1.279-3.554.895-.491A4.7 4.7 0 015.095 8h-.74l-2.01 1.92a.5.5 0 01-.69-.722L3.952 7H5a5.3 5.3 0 01.075-.892L3.623 5.39 2.6 2.672a.5.5 0 11.939-.344l.884 2.343.924.457c.17-.428.397-.81.668-1.128h.57a1.5 1.5 0 112.83 0h.568c.27.318.497.699.667 1.126zM8 4a.5.5 0 100-1 .5.5 0 000 1zm1.751 1.571A3.326 3.326 0 009.476 5H6.524c-.107.175-.2.367-.276.573-.11.295-.186.618-.223.957a4.354 4.354 0 00.09 1.465c.071.294.172.565.295.806.168.328.38.601.616.803.295.253.631.396.974.396.342 0 .678-.142.973-.394.237-.203.448-.476.616-.803a3.62 3.62 0 00.296-.807 4.263 4.263 0 00.09-1.466 3.988 3.988 0 00-.224-.959z"}))},aot=iot;var SR={};de(SR,{icon:()=>fot});var Qfr=V(ne());var sot=["title","titleId"];function hne(){return hne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cot=function(t){var n=t.title,r=t.titleId,o=lot(t,sot);return c("svg",hne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 14A6 6 0 108 2a6 6 0 000 12zm0 1A7 7 0 118 1a7 7 0 010 14zm0-3a4 4 0 100-8 4 4 0 000 8zm0-1a3 3 0 110-6 3 3 0 010 6zm0-2a1 1 0 100-2 1 1 0 000 2z"}))},fot=cot;var ER={};de(ER,{icon:()=>vot});var epr=V(ne());var pot=["title","titleId"];function mne(){return mne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mot=function(t){var n=t.title,r=t.titleId,o=dot(t,pot);return c("svg",mne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14 4v-.994C14 2.45 13.55 2 12.994 2H11v1h-1V2H6v1H5V2H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14h9.988C13.55 14 14 13.55 14 12.994V5H2V4h12zm-3-3h1.994C14.102 1 15 1.897 15 3.006v9.988A2.005 2.005 0 0112.994 15H3.006A2.005 2.005 0 011 12.994V3.006C1 1.898 1.897 1 3.006 1H5V0h1v1h4V0h1v1zM4 7h2v1H4V7zm3 0h2v1H7V7zm3 0h2v1h-2V7zM4 9h2v1H4V9zm3 0h2v1H7V9zm3 0h2v1h-2V9zm-6 2h2v1H4v-1zm3 0h2v1H7v-1zm3 0h2v1h-2v-1z",fillRule:"evenodd"}))},vot=mot;var IR={};de(IR,{icon:()=>Oot});var rpr=V(ne());var got=["title","titleId"];function vne(){return vne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wot=function(t){var n=t.title,r=t.titleId,o=yot(t,got);return c("svg",vne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6.5 12a.502.502 0 01-.354-.146l-4-4a.502.502 0 01.708-.708L6.5 10.793l6.646-6.647a.502.502 0 01.708.708l-7 7A.502.502 0 016.5 12"}))},Oot=wot;var kR={};de(kR,{icon:()=>Iot});var opr=V(ne());var xot=["title","titleId"];function gne(){return gne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Eot=function(t){var n=t.title,r=t.titleId,o=_ot(t,xot);return c("svg",gne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 16A8 8 0 118 0a8 8 0 010 16zm3.65-10.857L6.91 9.8 4.35 7.286a.5.5 0 00-.7.714l2.909 2.857a.5.5 0 00.7 0l5.091-5a.5.5 0 10-.7-.714z"}))},Iot=Eot;var PR={};de(PR,{icon:()=>Tot});var apr=V(ne());var kot=["title","titleId"];function yne(){return yne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cot=function(t){var n=t.title,r=t.titleId,o=Pot(t,kot);return c("svg",yne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.934 3.063a1.5 1.5 0 01.547.321l.112.115 6.07 6.915a1.5 1.5 0 01-.646 2.41l-.142.04-9.031 2.097A1.5 1.5 0 01.037 13.19l.043-.159L3.04 4.02a1.5 1.5 0 011.893-.957zM4.027 4.25l-.036.083-2.961 9.011a.5.5 0 00.498.656l.09-.013 2.937-.681-1.399-1.508a.5.5 0 01.666-.74l.067.06 1.788 1.927 2.634-.611-3.198-3.601a.5.5 0 01.682-.726l.066.062 3.559 4.007 1.229-.284a.5.5 0 00.15-.063l.067-.049a.5.5 0 00.099-.632l-.053-.073-6.07-6.916a.5.5 0 00-.138-.11l-.082-.035-.088-.02a.5.5 0 00-.507.256zm11.66 5.039a2.5 2.5 0 01-.975 3.399.5.5 0 01-.485-.875 1.5 1.5 0 00-1.454-2.624.5.5 0 01-.485-.875 2.5 2.5 0 013.399.975zm-5.03-6.206a.5.5 0 01.338.544l-.02.088-.677 2.035 2.068-.721a.5.5 0 01.6.225l.036.082a.5.5 0 01-.225.6l-.082.037L9.67 7.028a.5.5 0 01-.659-.55l.02-.08.995-3a.5.5 0 01.632-.316zM14.5 4a.5.5 0 110 1 .5.5 0 010-1zM7.862.403a2.5 2.5 0 01.735 3.459.5.5 0 01-.839-.545 1.5 1.5 0 10-2.516-1.634.5.5 0 01-.839-.545A2.5 2.5 0 017.862.403zM13.5 2a.5.5 0 110 1 .5.5 0 010-1zm-3-1a.5.5 0 110 1 .5.5 0 010-1zm4-1a.5.5 0 110 1 .5.5 0 010-1z"}))},Tot=Cot;var jR={};de(jR,{icon:()=>zot});var lpr=V(ne());var Aot=["title","titleId"];function bne(){return bne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dot=function(t){var n=t.title,r=t.titleId,o=Mot(t,Aot);return c("svg",bne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.5 13A5.506 5.506 0 012 7.5C2 4.467 4.467 2 7.5 2S13 4.467 13 7.5 10.533 13 7.5 13m0-12a6.5 6.5 0 100 13 6.5 6.5 0 000-13m3 6H8V3.5a.5.5 0 00-1 0v4a.5.5 0 00.5.5h3a.5.5 0 000-1"}))},zot=Dot;var CR={};de(CR,{icon:()=>Wot});var cpr=V(ne());var Not=["title","titleId"];function wne(){return wne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bot=function(t){var n=t.title,r=t.titleId,o=Lot(t,Not);return c("svg",wne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.348 3.761A3.995 3.995 0 018 7a.5.5 0 01-1 0 3 3 0 10-4.878 2.34.5.5 0 01-.627.779 4 4 0 013.973-6.84 5.502 5.502 0 0110.096 4.37.5.5 0 11-.92-.39 4.5 4.5 0 10-8.296-3.497zm-1.61 4.935a.5.5 0 11.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84zm7.62-3.647a.5.5 0 01.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84zm7.62-3.647a.5.5 0 11.775.633l-1.466 1.792a.5.5 0 11-.774-.633l1.466-1.792zm-3.12 3.647a.5.5 0 01.774.634l-1.505 1.84a.5.5 0 01-.774-.634l1.505-1.84z"}))},Wot=Bot;var TR={};de(TR,{icon:()=>Uot});var ppr=V(ne());var Hot=["title","titleId"];function One(){return One=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qot=function(t){var n=t.title,r=t.titleId,o=$ot(t,Hot);return c("svg",One({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.421 4.93a.5.5 0 11-.87.49 3 3 0 10-4.43 3.918.5.5 0 01-.626.78 4 4 0 013.973-6.84l.032.018V3.28a5.5 5.5 0 117.003 7.357.5.5 0 11-.36-.934 4.5 4.5 0 10-5.77-5.923c.42.31.778.701 1.05 1.15h-.002zM9.6 11c.669.002.794.67.36 1.003l-4.68 3.882c-.457.378-1.053-.26-.643-.689l3.08-3.193A5411.7 5411.7 0 015.113 12c-.668-.001-.793-.669-.36-1.003l4.68-3.881c.458-.379 1.053.26.643.688l-3.08 3.193L9.6 11z"}))},Uot=qot;var AR={};de(AR,{icon:()=>Yot});var hpr=V(ne());var Got=["title","titleId"];function xne(){return xne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xot(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kot=function(t){var n=t.title,r=t.titleId,o=Jot(t,Got);return c("svg",xne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.746 5.005A5.5 5.5 0 0110.5 16H4a4 4 0 01-1.61-7.663A4.473 4.473 0 012.029 7H.5a.5.5 0 010-1h1.527a4.479 4.479 0 01.957-2.309L1.646 2.354a.5.5 0 11.708-.708L3.69 2.984A4.479 4.479 0 016 2.027V.5a.5.5 0 011 0v1.528a4.493 4.493 0 012.309.956l1.337-1.338a.5.5 0 01.708.708L10.016 3.69c.311.388.56.831.73 1.314zM4 15h6.5a4.5 4.5 0 10-4.152-6.239A3.995 3.995 0 018 12a.5.5 0 11-1 0 3 3 0 10-3 3zm5.691-9.94a3.5 3.5 0 10-6.33 2.991 4.029 4.029 0 012.106.227 5.505 5.505 0 014.224-3.219z"}))},Yot=Kot;var MR={};de(MR,{icon:()=>rit});var vpr=V(ne());var Qot=["title","titleId"];function _ne(){return _ne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tit=function(t){var n=t.title,r=t.titleId,o=Zot(t,Qot);return c("svg",_ne({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 7a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm0-6a3.5 3.5 0 013.465 3h3.12a1.5 1.5 0 110 1h-3.12a3.482 3.482 0 01-.662 1.596l2.1 2.1A3.5 3.5 0 118.036 12h-3.12a1.5 1.5 0 110-.999h3.12a3.482 3.482 0 01.662-1.596l-2.1-2.1A3.5 3.5 0 114.5 1zM12 4.5a.5.5 0 101 0 .5.5 0 00-1 0zm-.5 9.5a2.5 2.5 0 110-5 2.5 2.5 0 010 5zM4 11.5a.5.5 0 11-1 0 .5.5 0 011 0z"}))},rit=tit;var RR={};de(RR,{icon:()=>sit});var ypr=V(ne());var nit=["title","titleId"];function Sne(){return Sne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ait=function(t){var n=t.title,r=t.titleId,o=oit(t,nit);return c("svg",Sne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 11c1.334 1.393 2 2.435 2 3.125C15 15.161 14.105 16 13 16c-1.104 0-2-.84-2-1.875 0-.69.667-1.732 2-3.125zM5.857.15l6.34 6.45.016.02.324.321a1.5 1.5 0 01.11 2.006l-.103.114-4.474 4.513a1.5 1.5 0 01-2.123.008L1.464 9.06a1.5 1.5 0 01.007-2.12l4.472-4.45c.145-.146.313-.254.492-.327L5.144.85a.5.5 0 01.713-.7zm1.496 3.049a.5.5 0 00-.705 0L2.177 7.65a.498.498 0 00-.148.35h9.95a.498.498 0 00-.148-.35L7.353 3.2z"}))},sit=ait;var DR={};de(DR,{icon:()=>pit});var wpr=V(ne());var lit=["title","titleId"];function Ene(){return Ene=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fit=function(t){var n=t.title,r=t.titleId,o=uit(t,lit);return c("svg",Ene({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 3a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V4a1 1 0 00-1-1H4zm10 8v1a2 2 0 01-2 2h-1v2h-1v-2H8.5v2h-1v-2H6v2H5v-2H4a2 2 0 01-2-2v-1H0v-1h2V8.5H0v-1h2V6H0V5h2V4a2 2 0 012-2h1V0h1v2h1.5V0h1v2H10V0h1v2h1a2 2 0 012 2v1h2v1h-2v1.5h2v1h-2V10h2v1h-2z"}),c("rect",{width:6,height:6,x:5,y:5,rx:1}))},pit=fit;var zR={};de(zR,{icon:()=>git});var xpr=V(ne());var dit=["title","titleId"];function Ine(){return Ine=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vit=function(t){var n=t.title,r=t.titleId,o=hit(t,dit);return c("svg",Ine({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.157 12.224L5.768 8.32a.404.404 0 000-.64l-4.61-3.904a.407.407 0 010-.643.608.608 0 01.759 0l4.61 3.904c.631.534.63 1.393 0 1.926l-4.61 3.904a.608.608 0 01-.76 0 .407.407 0 010-.643zM9 12h6v1H9v-1z"}))},git=vit;var NR={};de(NR,{icon:()=>xit});var Spr=V(ne());var yit=["title","titleId"];function kne(){return kne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oit=function(t){var n=t.title,r=t.titleId,o=bit(t,yit);return c("svg",kne({fill:"none",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 2.5A.5.5 0 01.5 2h15a.5.5 0 010 1H15v10h.5a.5.5 0 010 1H.5a.5.5 0 010-1H1V3H.5a.5.5 0 01-.5-.5zM2 3h12v10H2V3zm3 2a.5.5 0 00-.5.5v5a.5.5 0 001 0v-5A.5.5 0 005 5zm5.5.5a.5.5 0 011 0v5a.5.5 0 01-1 0v-5zM8 5a.5.5 0 00-.5.5v5a.5.5 0 001 0v-5A.5.5 0 008 5z"}))},xit=Oit;var LR={};de(LR,{icon:()=>kit});var Ipr=V(ne());var _it=["title","titleId"];function Pne(){return Pne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Iit=function(t){var n=t.title,r=t.titleId,o=Sit(t,_it);return c("svg",Pne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.5 3a.5.5 0 00-.5.5v9a.5.5 0 001 0v-9a.5.5 0 00-.5-.5zm3 0a.5.5 0 00-.5.5v9a.5.5 0 001 0V9h6v1.5a.5.5 0 00.82.384l3-2.5a.5.5 0 000-.768l-3-2.5A.5.5 0 0011 5.5V7H5V3.5a.5.5 0 00-.5-.5z"}))},kit=Iit;var FR={};de(FR,{icon:()=>Ait});var Ppr=V(ne());var Pit=["title","titleId"];function jne(){return jne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tit=function(t){var n=t.title,r=t.titleId,o=jit(t,Pit);return c("svg",jne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.5 3a.5.5 0 01.5.5v9a.5.5 0 01-1 0V9H4v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 014 5.5V7h2V3.5a.5.5 0 01.5-.5zm3 0a.5.5 0 00-.5.5v9a.5.5 0 001 0V9h2v1.5a.5.5 0 00.82.384l3-2.5a.5.5 0 000-.768l-3-2.5A.5.5 0 0012 5.5V7h-2V3.5a.5.5 0 00-.5-.5z"}))},Ait=Tit;var BR={};de(BR,{icon:()=>Nit});var Cpr=V(ne());var Mit=["title","titleId"];function Cne(){return Cne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zit=function(t){var n=t.title,r=t.titleId,o=Rit(t,Mit);return c("svg",Cne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.5 3a.5.5 0 01.5.5v9a.5.5 0 01-1 0V9H5v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 015 5.5V7h6V3.5a.5.5 0 01.5-.5zm3 0a.5.5 0 01.5.5v9a.5.5 0 01-1 0v-9a.5.5 0 01.5-.5z"}))},Nit=zit;var WR={};de(WR,{icon:()=>Hit});var Apr=V(ne());var Lit=["title","titleId"];function Tne(){return Tne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wit=function(t){var n=t.title,r=t.titleId,o=Fit(t,Lit);return c("svg",Tne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M.5 3a.5.5 0 00-.5.5v9a.5.5 0 001 0v-9A.5.5 0 00.5 3zm14.5.5a.5.5 0 011 0v9a.5.5 0 01-1 0v-9zm-4.712 1.547a.5.5 0 01.532.069l3 2.5a.5.5 0 010 .768l-3 2.5A.5.5 0 0110 10.5V9H6v1.5a.5.5 0 01-.82.384l-3-2.5a.5.5 0 010-.768l3-2.5A.5.5 0 016 5.5V7h4V5.5a.5.5 0 01.288-.453z"}))},Hit=Wit;var HR={};de(HR,{icon:()=>Git});var Rpr=V(ne());var $it=["title","titleId"];function Ane(){return Ane=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uit=function(t){var n=t.title,r=t.titleId,o=Vit(t,$it);return c("svg",Ane({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8.05 10a2.5 2.5 0 014.9 0h1.55a.5.5 0 110 1h-1.55a2.5 2.5 0 01-4.9 0H1.5a.5.5 0 110-1h6.55zm-.1-4a2.5 2.5 0 01-4.9 0H1.5a.5.5 0 010-1h1.55a2.5 2.5 0 014.9 0h6.55a.5.5 0 110 1H7.95zM4 5.5a1.5 1.5 0 103 0 1.5 1.5 0 00-3 0zm8 5a1.5 1.5 0 10-3 0 1.5 1.5 0 003 0z"}))},Git=Uit;var $R={};de($R,{icon:()=>Qit});var zpr=V(ne());var Jit=["title","titleId"];function Mne(){return Mne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kit(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yit=function(t){var n=t.title,r=t.titleId,o=Xit(t,Jit);return c("svg",Mne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M10 7.95a2.5 2.5 0 010-4.9V1.5a.5.5 0 111 0v1.55a2.5 2.5 0 010 4.9v6.55a.5.5 0 11-1 0V7.95zm-4 .1a2.5 2.5 0 010 4.9v1.55a.5.5 0 11-1 0v-1.55a2.5 2.5 0 010-4.9V1.5a.5.5 0 011 0v6.55zM5.5 12a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm5-8a1.5 1.5 0 100 3 1.5 1.5 0 000-3z"}))},Qit=Yit;var VR={};de(VR,{icon:()=>nat});var Lpr=V(ne());var Zit=["title","titleId"];function Rne(){return Rne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rat=function(t){var n=t.title,r=t.titleId,o=eat(t,Zit);return c("svg",Rne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.4 0c.235 0 .46.099.622.273l2.743 3c.151.162.235.378.235.602v9.25a.867.867 0 01-.857.875H3.857A.867.867 0 013 13.125V.875C3 .392 3.384 0 3.857 0H11.4zM14 4h-2.6a.4.4 0 01-.4-.4V1H4v12h10V4z"}),c("path",{d:"M3 1H2a1 1 0 00-1 1v13a1 1 0 001 1h10a1 1 0 001-1v-1h-1v1H2V2h1V1z"}))},nat=rat;var qR={};de(qR,{icon:()=>lat});var Bpr=V(ne());var oat=["title","titleId"];function Dne(){return Dne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sat=function(t){var n=t.title,r=t.titleId,o=iat(t,oat);return c("svg",Dne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 2.729V2a1 1 0 011-1h2v1H3v12h4v1H3a1 1 0 01-1-1V2.729zM14 5V2a1 1 0 00-1-1h-2v1h2v3h1zm-1 1h2v9H8V6h5V5H8a1 1 0 00-1 1v9a1 1 0 001 1h7a1 1 0 001-1V6a1 1 0 00-1-1h-2v1z"}),c("path",{d:"M9 10h5V9H9v1zm0-2h5V7H9v1zm0 4h5v-1H9v1zm0 2h5v-1H9v1zm2-12V1a1 1 0 00-1-1H6a1 1 0 00-1 1v1h1V1h4v1h1zM5 3h6V2H5v1z"}))},lat=sat;var UR={};de(UR,{icon:()=>dat});var Hpr=V(ne());var uat=["title","titleId"];function zne(){return zne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pat=function(t){var n=t.title,r=t.titleId,o=cat(t,uat);return c("svg",zne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.293 8L3.146 3.854a.5.5 0 11.708-.708L8 7.293l4.146-4.147a.5.5 0 01.708.708L8.707 8l4.147 4.146a.5.5 0 01-.708.708L8 8.707l-4.146 4.147a.5.5 0 01-.708-.708L7.293 8z"}))},dat=pat;var GR={};de(GR,{icon:()=>yat});var Vpr=V(ne());var hat=["title","titleId"];function Nne(){return Nne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gat=function(t){var n=t.title,r=t.titleId,o=mat(t,hat);return c("svg",Nne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.746 8l3.1-3.1a.527.527 0 10-.746-.746L8 7.254l-3.1-3.1a.527.527 0 10-.746.746l3.1 3.1-3.1 3.1a.527.527 0 10.746.746l3.1-3.1 3.1 3.1a.527.527 0 10.746-.746L8.746 8zM8 16A8 8 0 118 0a8 8 0 010 16z"}))},yat=gat;var JR={};de(JR,{icon:()=>_at});var Upr=V(ne());var bat=["title","titleId"];function Lne(){return Lne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Oat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xat=function(t){var n=t.title,r=t.titleId,o=wat(t,bat);return c("svg",Lne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.822 1.874a.5.5 0 11.335.942 5.517 5.517 0 00-3.34 3.341.5.5 0 11-.943-.335 6.517 6.517 0 013.948-3.948zM1.864 10.15a.5.5 0 11.944-.33 5.517 5.517 0 003.365 3.37.5.5 0 01-.333.943 6.517 6.517 0 01-3.976-3.983zm8.302 3.981a.5.5 0 11-.333-.943 5.517 5.517 0 003.347-3.332.5.5 0 11.941.337 6.517 6.517 0 01-3.955 3.938zm3.968-8.285a.5.5 0 11-.943.331A5.517 5.517 0 009.85 2.82a.5.5 0 01.337-.942 6.517 6.517 0 013.946 3.968zM8.5 3.5a.5.5 0 01-1 0V.997a.5.5 0 011 0V3.5zm-4.997 4a.5.5 0 010 1H1a.5.5 0 010-1h2.503zM7.5 12.497a.5.5 0 011 0V15a.5.5 0 11-1 0v-2.503zM12.497 8.5a.5.5 0 010-1H15a.5.5 0 110 1h-2.503zM8 9a1 1 0 110-2 1 1 0 010 2z"}))},_at=xat;var XR={};de(XR,{icon:()=>Pat});var Jpr=V(ne());var Sat=["title","titleId"];function Fne(){return Fne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Iat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kat=function(t){var n=t.title,r=t.titleId,o=Eat(t,Sat);return c("svg",Fne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.95 1.636l1.414 1.414-2.192 2.193C12.695 6.033 13 6.98 13 8c0 1.02-.305 1.967-.828 2.757l2.192 2.193-1.414 1.414-2.193-2.192A4.977 4.977 0 018 13a4.977 4.977 0 01-2.757-.828L3.05 14.364 1.636 12.95l2.192-2.193A4.977 4.977 0 013 8c0-1.02.305-1.967.828-2.757L1.636 3.05 3.05 1.636l2.193 2.192A4.977 4.977 0 018 3c1.02 0 1.967.305 2.757.828l2.193-2.192zM8 5a2.99 2.99 0 00-1.168.236l-.126.057-.218.116-.132.081-.073.05a3.013 3.013 0 00-.241.187l-.113.103-.147.15c-.05.054-.097.11-.142.168l-.1.135-.05.073-.06.097c-.05.082-.096.166-.137.253l-.057.126A2.99 2.99 0 005 8c0 .414.084.809.236 1.168l.057.126.116.218.081.132c.059.089.121.175.189.257l.15.17.151.147c.056.051.114.1.174.147l.142.105c.054.037.109.072.165.106l-.124-.079.092.06.094.055c.436.247.94.388 1.477.388a2.99 2.99 0 001.168-.236l.125-.056.213-.113.151-.094.05-.034a3.011 3.011 0 00.323-.258l-.15.129.09-.075.168-.159.08-.084c.051-.056.1-.114.147-.174l.105-.142.106-.165c.047-.08.091-.161.131-.245l.057-.126A2.99 2.99 0 0011 8a2.99 2.99 0 00-.236-1.168l-.056-.125-.112-.211-.096-.155-.033-.049a3.011 3.011 0 00-.258-.322l.129.15-.075-.09-.159-.168-.084-.08a3.015 3.015 0 00-.174-.147l-.183-.132-.124-.079a2.993 2.993 0 00-.245-.131l-.126-.057A2.99 2.99 0 008 5z"}))},Pat=kat;var KR={};de(KR,{icon:()=>Mat});var Kpr=V(ne());var jat=["title","titleId"];function Bne(){return Bne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Aat=function(t){var n=t.title,r=t.titleId,o=Cat(t,jat);return c("svg",Bne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M5.142 11.074l-1.912.548a2.532 2.532 0 11-1.395-4.867l1.947-.559a2.532 2.532 0 012.555.713l1.53-5.335c.139-.485.6-.897 1.159-1.238.27-.164.52-.278.779-.32.814-.132 1.503.558 1.261 1.422L9.574 6.643l4.988-1.43c.864-.242 1.554.447 1.422 1.26-.042.26-.156.51-.32.78-.341.56-.753 1.02-1.238 1.16L9.523 9.817a2.53 2.53 0 01.56 2.4l-.56 1.947a2.532 2.532 0 11-4.867-1.395l.486-1.696zm.33-1.148l.48-1.673a1.52 1.52 0 00-1.89-1.083l-1.948.558a1.52 1.52 0 00.837 2.92l2.52-.722zm3.773-2.135l-.33 1.148 5.232-1.5c.324-.093 1.182-1.39.694-1.253L9.245 7.791zM5.63 13.049a1.52 1.52 0 002.92.837l.559-1.947a1.52 1.52 0 00-1.553-1.935l2.537-8.845c.136-.488-1.16.37-1.253.694L5.63 13.05zm.973.279l.559-1.947a.506.506 0 11.973.279l-.558 1.947a.506.506 0 11-.974-.28zm-3.93-3.653a.506.506 0 11-.28-.973l1.947-.558a.506.506 0 01.28.973l-1.948.558z"}))},Mat=Aat;var YR={};de(YR,{icon:()=>Lat});var Qpr=V(ne());var Rat=["title","titleId"];function Wne(){return Wne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nat=function(t){var n=t.title,r=t.titleId,o=Dat(t,Rat);return c("svg",Wne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 12h12v-1.97c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V12zm-1 0V3c0-1.105 3.134-2 7-2s7 .895 7 2v9c0 1.105-3.134 2-7 2s-7-.895-7-2zm1-3h12V7.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97V9zm0-4.97V6h12V4.03c-1.225.582-3.454.97-6 .97s-4.775-.388-6-.97zm10.675-1.483C11.467 2.202 9.795 2 8 2c-1.794 0-3.467.202-4.675.547-.492.14-.88.298-1.136.453.256.155.644.312 1.136.453C4.533 3.798 6.205 4 8 4c1.794 0 3.467-.202 4.675-.547.492-.14.88-.298 1.136-.453-.256-.155-.644-.312-1.136-.453zM2 6c.257.155.833.312 1.325.453C4.533 6.798 6.205 7 8 7c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2zm0 3c.257.155.833.312 1.325.453C4.533 9.798 6.205 10 8 10c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2zm0 3c.257.155.833.312 1.325.453C4.533 12.798 6.205 13 8 13c1.794 0 3.467-.202 4.675-.547.492-.14 1.07-.298 1.327-.453H2z"}))},Lat=Nat;var QR={};de(QR,{icon:()=>$at});var edr=V(ne());var Fat=["title","titleId"];function Hne(){return Hne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hat=function(t){var n=t.title,r=t.titleId,o=Bat(t,Fat);return c("svg",Hne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M2 2a1 1 0 00-1 1v7a1 1 0 001 1h4l-1 3H3.5a.5.5 0 000 1h9a.5.5 0 000-1H11l-1-3h4a1 1 0 001-1V3a1 1 0 00-1-1H2zm0 8V3h12v7H2zm5 1h2l1 3H6l1-3z",clipRule:"evenodd"}),c("path",{d:"M4.5 6a.5.5 0 000 1h1a.5.5 0 000-1h-1zm3 0a.5.5 0 000 1h1a.5.5 0 000-1h-1zm2.5.5a.5.5 0 01.5-.5h1a.5.5 0 010 1h-1a.5.5 0 01-.5-.5z"}))},$at=Hat;var ZR={};de(ZR,{icon:()=>Jat});var rdr=V(ne());var Vat=["title","titleId"];function $ne(){return $ne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gat=function(t){var n=t.title,r=t.titleId,o=qat(t,Vat);return c("svg",$ne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V15a1 1 0 01-1 1H2a1 1 0 01-1-1V1a1 1 0 011-1h8.8zM14 5h-3.5a.5.5 0 01-.5-.5V1H2v14h12V5zm-8.5 7a.5.5 0 110-1h5a.5.5 0 110 1h-5zm0-3a.5.5 0 010-1h5a.5.5 0 110 1h-5z"}))},Jat=Gat;var eD={};de(eD,{icon:()=>Zat});var odr=V(ne());var Xat=["title","titleId"];function Vne(){return Vne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Yat(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qat=function(t){var n=t.title,r=t.titleId,o=Kat(t,Xat);return c("svg",Vne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.505 8.995l6.453-6.44-1.5-1.5-6.453 6.44 1.5 1.5zM12.968.19c.258-.238.657-.26.91 0l1.928 1.929a.642.642 0 010 .909l-6.78 6.784A.641.641 0 018.57 10H6.643A.643.643 0 016 9.357V7.43c0-.17.067-.335.188-.455L12.968.19zM4.5 13a.5.5 0 110-1h7a.5.5 0 110 1h-7zm4-12a.5.5 0 010 1H2v13h12V7.5a.5.5 0 111 0V15a1 1 0 01-1 1H2a1 1 0 01-1-1V2a1 1 0 011-1h6.5z"}))},Zat=Qat;var tD={};de(tD,{icon:()=>ost});var adr=V(ne());var est=["title","titleId"];function qne(){return qne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nst=function(t){var n=t.title,r=t.titleId,o=tst(t,est);return c("svg",qne({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 3.5a.5.5 0 11-1 0 .5.5 0 011 0zM9 5v3h1v1H8V6H7V5h2z"}),c("path",{d:"M13.855 14.147a1.34 1.34 0 01-.158-.246A1.998 1.998 0 0113.5 13c0-.414.103-.713.197-.901a1.34 1.34 0 01.158-.246l.003-.005A.5.5 0 0014 11.5V.5a.5.5 0 00-.5-.5H3.461l-.083.005a2.957 2.957 0 00-1.102.298 2.257 2.257 0 00-.88.763C1.148 1.44 1 1.913 1 2.5V13c0 .463.117.843.318 1.145.2.298.462.491.708.615a2.344 2.344 0 00.94.24H3v-1c-.005 0-.015 0-.029-.002a1.344 1.344 0 01-.498-.133.817.817 0 01-.323-.275C2.07 13.47 2 13.287 2 13s.07-.47.15-.59a.817.817 0 01.324-.275A1.344 1.344 0 013 12h9.658c-.091.27-.158.605-.158 1s.067.73.158 1H8v1h5.5a.5.5 0 00.359-.848l-.004-.005zm-.001 0l.002.002-.002-.002zM2.724 1.197c.092-.046.186-.082.276-.11C3 2.918 3.001 11 2.999 11h-.033a1.977 1.977 0 00-.283.03 2.344 2.344 0 00-.657.21L2 11.254V2.5c0-.413.102-.689.229-.879.128-.193.304-.328.495-.424zM4 11V1h9v10H4z"}),c("path",{d:"M7 13H4v2.5a.5.5 0 00.854.354l.646-.647.646.647A.5.5 0 007 15.5V13z"}))},ost=nst;var rD={};de(rD,{icon:()=>ust});var ldr=V(ne());var ist=["title","titleId"];function Une(){return Une=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lst=function(t){var n=t.title,r=t.titleId,o=ast(t,ist);return c("svg",Une({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.8 0c.274 0 .537.113.726.312l3.2 3.428c.176.186.274.433.274.689V13a1 1 0 01-1 1H2a1 1 0 01-1-1V1a1 1 0 011-1h6.8zM12 5H8.5a.5.5 0 01-.5-.5V1H2v12h10V5zm-7.5 6a.5.5 0 110-1h5a.5.5 0 110 1h-5zm0-3a.5.5 0 010-1h5a.5.5 0 110 1h-5zm1 8a.5.5 0 110-1H14V6.5a.5.5 0 111 0V15a1 1 0 01-1 1H5.5z"}))},ust=lst;var nD={};de(nD,{icon:()=>hst});var cdr=V(ne());var cst=["title","titleId"];function Gne(){return Gne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dst=function(t){var n=t.title,r=t.titleId,o=fst(t,cst);return c("svg",Gne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("circle",{cx:8,cy:8,r:4}))},hst=dst;var oD={};de(oD,{icon:()=>bst});var pdr=V(ne());var mst=["title","titleId"];function Jne(){return Jne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yst=function(t){var n=t.title,r=t.titleId,o=vst(t,mst);return c("svg",Jne({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.135 14.043a.75.75 0 00.025-1.06l-4.591-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.084-1.035l-4.591 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.287.3.761.31 1.061.024z"}),c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14.135 14.043a.75.75 0 00.025-1.06l-4.591-4.81a.25.25 0 010-.346l4.59-4.81a.75.75 0 10-1.084-1.035l-4.591 4.81a1.75 1.75 0 000 2.416l4.59 4.81c.287.3.761.31 1.061.024z"}))},bst=yst;var iD={};de(iD,{icon:()=>Sst});var hdr=V(ne());var wst=["title","titleId"];function Xne(){return Xne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _st=function(t){var n=t.title,r=t.titleId,o=Ost(t,wst);return c("svg",Xne({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.232 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}),c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.232 14.043a.75.75 0 01-.025-1.06l4.591-4.81a.25.25 0 000-.346l-4.59-4.81a.75.75 0 011.085-1.035l4.59 4.81a1.75 1.75 0 010 2.416l-4.59 4.81a.75.75 0 01-1.06.024z"}))},Sst=_st;var aD={};de(aD,{icon:()=>jst});var vdr=V(ne());var Est=["title","titleId"];function Kne(){return Kne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pst=function(t){var n=t.title,r=t.titleId,o=Ist(t,Est);return c("svg",Kne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 9.114l1.85-1.943a.52.52 0 01.77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 01-2.31 0L5.41 8a.617.617 0 010-.829.52.52 0 01.77 0L8 9.082V.556C8 .249 8.224 0 8.5 0s.5.249.5.556v8.558z"}),c("path",{d:"M16 13.006V10h-1v3.006a.995.995 0 01-.994.994H3.01a.995.995 0 01-.994-.994V10h-1v3.006c0 1.1.892 1.994 1.994 1.994h10.996c1.1 0 1.994-.893 1.994-1.994z"}))},jst=Pst;var sD={};de(sD,{icon:()=>Rst});var ydr=V(ne());var Cst=["title","titleId"];function Yne(){return Yne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ast(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mst=function(t){var n=t.title,r=t.titleId,o=Tst(t,Cst);return c("svg",Yne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 2h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V4a2 2 0 012-2zM1.5 1a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5zm13 0a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},Rst=Mst;var lD={};de(lD,{icon:()=>Fst});var wdr=V(ne());var Dst=["title","titleId"];function Qne(){return Qne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lst=function(t){var n=t.title,r=t.titleId,o=zst(t,Dst);return c("svg",Qne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 5h8a2 2 0 012 2v2a2 2 0 01-2 2H4a2 2 0 01-2-2V7a2 2 0 012-2zM1.5 1h13a.5.5 0 110 1h-13a.5.5 0 010-1zm0 13h13a.5.5 0 110 1h-13a.5.5 0 110-1z"}))},Fst=Lst;var uD={};de(uD,{icon:()=>Vst});var xdr=V(ne());var Bst=["title","titleId"];function Zne(){return Zne=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $st=function(t){var n=t.title,r=t.titleId,o=Wst(t,Bst);return c("svg",Zne({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 1h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V3a2 2 0 012-2zM1.5 14h13a.5.5 0 110 1h-13a.5.5 0 110-1z"}))},Vst=$st;var cD={};de(cD,{icon:()=>Xst});var Sdr=V(ne());var qst=["title","titleId"];function eoe(){return eoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jst=function(t){var n=t.title,r=t.titleId,o=Ust(t,qst);return c("svg",eoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 4H7V1.5a.5.5 0 011 0V4zm0 8v2.5a.5.5 0 11-1 0V12h1zM3 5h9a2 2 0 012 2v2a2 2 0 01-2 2H3a2 2 0 01-2-2V7a2 2 0 012-2z"}))},Xst=Jst;var fD={};de(fD,{icon:()=>elt});var Idr=V(ne());var Kst=["title","titleId"];function toe(){return toe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qst(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zst=function(t){var n=t.title,r=t.titleId,o=Yst(t,Kst);return c("svg",toe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 5h8a2 2 0 012 2v2a2 2 0 01-2 2H5a2 2 0 01-2-2V7a2 2 0 012-2zM1.5 1a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},elt=Zst;var pD={};de(pD,{icon:()=>ilt});var Pdr=V(ne());var tlt=["title","titleId"];function roe(){return roe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var olt=function(t){var n=t.title,r=t.titleId,o=rlt(t,tlt);return c("svg",roe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 7v1H1.5a.5.5 0 010-1H4zm8 0h2.5a.5.5 0 110 1H12V7zM7 1h2a2 2 0 012 2v9a2 2 0 01-2 2H7a2 2 0 01-2-2V3a2 2 0 012-2z"}))},ilt=olt;var dD={};de(dD,{icon:()=>clt});var Cdr=V(ne());var alt=["title","titleId"];function noe(){return noe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function llt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ult=function(t){var n=t.title,r=t.titleId,o=slt(t,alt);return c("svg",noe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 5h8a2 2 0 012 2v2a2 2 0 01-2 2H3a2 2 0 01-2-2V7a2 2 0 012-2zm11.5-4a.5.5 0 01.5.5v13a.5.5 0 11-1 0v-13a.5.5 0 01.5-.5z"}))},clt=ult;var hD={};de(hD,{icon:()=>mlt});var Adr=V(ne());var flt=["title","titleId"];function ooe(){return ooe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hlt=function(t){var n=t.title,r=t.titleId,o=plt(t,flt);return c("svg",ooe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 3h2a2 2 0 012 2v8a2 2 0 01-2 2H7a2 2 0 01-2-2V5a2 2 0 012-2zM1.5 1h13a.5.5 0 110 1h-13a.5.5 0 010-1z"}))},mlt=hlt;var mD={};de(mD,{icon:()=>wlt});var Rdr=V(ne());var vlt=["title","titleId"];function ioe(){return ioe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ylt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var blt=function(t){var n=t.title,r=t.titleId,o=glt(t,vlt);return c("svg",ioe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 8h5a1 1 0 011 1v5H3a1 1 0 01-1-1V8zm1-7h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},wlt=blt;var vD={};de(vD,{icon:()=>Elt});var zdr=V(ne());var Olt=["title","titleId"];function aoe(){return aoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _lt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Slt=function(t){var n=t.title,r=t.titleId,o=xlt(t,Olt);return c("svg",aoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 8h5v5a1 1 0 01-1 1H8V9a1 1 0 011-1zM3 1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},Elt=Slt;var gD={};de(gD,{icon:()=>Clt});var Ldr=V(ne());var Ilt=["title","titleId"];function soe(){return soe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Plt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jlt=function(t){var n=t.title,r=t.titleId,o=klt(t,Ilt);return c("svg",soe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 2h5v5a1 1 0 01-1 1H2V3a1 1 0 011-1zm0-1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},Clt=jlt;var yD={};de(yD,{icon:()=>Dlt});var Bdr=V(ne());var Tlt=["title","titleId"];function loe(){return loe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rlt=function(t){var n=t.title,r=t.titleId,o=Alt(t,Tlt);return c("svg",loe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 2h5a1 1 0 011 1v5H9a1 1 0 01-1-1V2zM3 1h10a2 2 0 012 2v10a2 2 0 01-2 2H3a2 2 0 01-2-2V3a2 2 0 012-2zm0 1a1 1 0 00-1 1v10a1 1 0 001 1h10a1 1 0 001-1V3a1 1 0 00-1-1H3z"}))},Dlt=Rlt;var bD={};de(bD,{icon:()=>Blt});var Hdr=V(ne());var zlt=["title","titleId"];function uoe(){return uoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Llt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Flt=function(t){var n=t.title,r=t.titleId,o=Nlt(t,zlt);return c("svg",uoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 4V3h6v1H5zM3 7V6h10v1H3zm2 3V9h6v1H5zm-2 3v-1h10v1H3z"}))},Blt=Flt;var wD={};de(wD,{icon:()=>qlt});var Vdr=V(ne());var Wlt=["title","titleId"];function coe(){return coe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $lt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vlt=function(t){var n=t.title,r=t.titleId,o=Hlt(t,Wlt);return c("svg",coe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 4V3h6v1H2zm0 3V6h10v1H2zm0 3V9h6v1H2zm0 3v-1h10v1H2z"}))},qlt=Vlt;var OD={};de(OD,{icon:()=>Klt});var Udr=V(ne());var Ult=["title","titleId"];function foe(){return foe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xlt=function(t){var n=t.title,r=t.titleId,o=Glt(t,Ult);return c("svg",foe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 4V3h6v1H8zM4 7V6h10v1H4zm4 3V9h6v1H8zm-4 3v-1h10v1H4z"}))},Klt=Xlt;var xD={};de(xD,{icon:()=>tut});var Jdr=V(ne());var Ylt=["title","titleId"];function poe(){return poe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zlt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eut=function(t){var n=t.title,r=t.titleId,o=Qlt(t,Ylt);return c("svg",poe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.193 13H4V3h4.151c1.816 0 2.987.977 2.987 2.495 0 1.074-.797 2.01-1.823 2.176v.055c1.359.132 2.308 1.11 2.308 2.433 0 1.76-1.296 2.841-3.43 2.841zM5.788 4.393v2.82h1.635c1.248 0 1.948-.526 1.948-1.455 0-.873-.603-1.365-1.67-1.365H5.788zm0 7.214h1.996c1.316 0 2.016-.547 2.016-1.573 0-1.019-.72-1.552-2.092-1.552h-1.92v3.125z"}))},tut=eut;var _D={};de(_D,{icon:()=>aut});var Kdr=V(ne());var rut=["title","titleId"];function doe(){return doe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function out(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iut=function(t){var n=t.title,r=t.titleId,o=nut(t,rut);return c("svg",doe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.597 3a.411.411 0 00-.299.132l-1.85 1.993-.756-.7a.412.412 0 00-.28-.124.42.42 0 00-.292.098.333.333 0 00-.12.257.335.335 0 00.127.254l1.064.982A.418.418 0 002.488 6a.411.411 0 00.288-.126L4.904 3.58a.328.328 0 00.095-.25.337.337 0 00-.126-.238A.421.421 0 004.597 3zm-.299 4.132A.411.411 0 014.597 7a.421.421 0 01.276.093c.076.062.12.147.126.238a.328.328 0 01-.095.25L2.776 9.874a.411.411 0 01-.288.126.418.418 0 01-.297-.108L1.127 8.91A.335.335 0 011 8.656a.333.333 0 01.12-.257.42.42 0 01.292-.098c.108.005.21.05.28.123l.757.701 1.849-1.993zM4.597 11a.411.411 0 00-.299.132l-1.85 1.993-.756-.7a.412.412 0 00-.28-.124.421.421 0 00-.292.098.333.333 0 00-.12.257.335.335 0 00.127.254l1.064.982a.418.418 0 00.297.108.411.411 0 00.288-.126l2.128-2.293a.328.328 0 00.095-.25.337.337 0 00-.126-.238.421.421 0 00-.276-.093zM6.5 4a.5.5 0 000 1h7a.5.5 0 000-1h-7zM6 8.5a.5.5 0 01.5-.5h7a.5.5 0 010 1h-7a.5.5 0 01-.5-.5zm.5 3.5a.5.5 0 000 1h7a.5.5 0 000-1h-7z"}))},aut=iut;var SD={};de(SD,{icon:()=>fut});var Qdr=V(ne());var sut=["title","titleId"];function hoe(){return hoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cut=function(t){var n=t.title,r=t.titleId,o=lut(t,sut);return c("svg",hoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2.414 8.036L4.89 10.51a.5.5 0 01-.707.708L1.354 8.389a.5.5 0 010-.707l2.828-2.828a.5.5 0 11.707.707L2.414 8.036zm8.768 2.474l2.475-2.474-2.475-2.475a.5.5 0 01.707-.707l2.829 2.828a.5.5 0 010 .707l-2.829 2.829a.5.5 0 11-.707-.708zM8.559 2.506a.5.5 0 01.981.19L7.441 13.494a.5.5 0 01-.981-.19L8.559 2.506z"}))},fut=cut;var ED={};de(ED,{icon:()=>vut});var ehr=V(ne());var put=["title","titleId"];function moe(){return moe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mut=function(t){var n=t.title,r=t.titleId,o=dut(t,put);return c("svg",moe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.111 10H12a1 1 0 001-1V5a1 1 0 00-1-1H4a1 1 0 00-1 1v4a1 1 0 001 1h1v1.297L6.111 10zm.46 1L4 14v-3a2 2 0 01-2-2V5a2 2 0 012-2h8a2 2 0 012 2v4a2 2 0 01-2 2H6.571z"}))},vut=mut;var ID={};de(ID,{icon:()=>Out});var rhr=V(ne());var gut=["title","titleId"];function voe(){return voe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function but(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wut=function(t){var n=t.title,r=t.titleId,o=yut(t,gut);return c("svg",voe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6 11a1 1 0 010 2H4a1 1 0 010-2V5a1 1 0 110-2h2a1 1 0 110 2v2h4V5a1 1 0 110-2h2a1 1 0 010 2v6a1 1 0 010 2h-2a1 1 0 010-2V9H6v2z"}))},Out=wut;var kD={};de(kD,{icon:()=>Iut});var ohr=V(ne());var xut=["title","titleId"];function goe(){return goe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Eut=function(t){var n=t.title,r=t.titleId,o=_ut(t,xut);return c("svg",goe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.16 12H9.5a.5.5 0 110 1h-4a.5.5 0 110-1h1.639l1.7-8H7.5a.5.5 0 010-1h4a.5.5 0 110 1H9.861l-1.7 8z"}))},Iut=Eut;var PD={};de(PD,{icon:()=>Tut});var ahr=V(ne());var kut=["title","titleId"];function yoe(){return yoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cut=function(t){var n=t.title,r=t.titleId,o=Put(t,kut);return c("svg",yoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.556 5.051a.45.45 0 00.637.637l1.503-1.504c.432-.431 1.278-.382 1.89.23.612.612.662 1.458.23 1.89L9.519 8.6c-.432.432-1.278.383-1.89-.23a.45.45 0 10-.636.637c.914.914 2.33 1.063 3.162.23l2.297-2.297c.833-.833.684-2.248-.23-3.162-.914-.915-2.33-1.063-3.162-.23L7.556 5.051zm.888 5.261a.45.45 0 00-.637 0l-1.503 1.504c-.432.431-1.278.382-1.89-.23-.612-.612-.661-1.458-.23-1.89L6.481 7.4c.432-.432 1.278-.383 1.89.23a.45.45 0 00.636-.637c-.914-.914-2.33-1.063-3.162-.23L3.548 9.06c-.833.833-.685 2.248.23 3.162.914.915 2.33 1.063 3.162.23l1.504-1.503a.45.45 0 000-.637zM7.877 5.76a.39.39 0 00.274-.114l1.503-1.504-1.503 1.504a.39.39 0 01-.274.114zm.912 3.183c-.4.003-.843-.172-1.202-.53.359.358.802.533 1.202.53zM12.18 3.82c-.502-.503-1.155-.766-1.773-.76.618-.006 1.27.257 1.773.76.898.898 1.034 2.275.23 3.078l-2.297 2.297 2.297-2.297c.804-.803.668-2.18-.23-3.078zm-4.062 6.42a.39.39 0 01.284.667L6.898 12.41l1.504-1.503a.39.39 0 00-.284-.667zm-.926-3.965c.618-.006 1.27.257 1.773.76-.502-.503-1.155-.766-1.773-.76zM5.414 12.15a1.762 1.762 0 01-1.042-.522c-.626-.627-.692-1.511-.23-1.974L6.44 7.358 4.142 9.654c-.462.463-.396 1.348.23 1.974.311.311.687.484 1.042.522z"}))},Tut=Cut;var jD={};de(jD,{icon:()=>zut});var lhr=V(ne());var Aut=["title","titleId"];function boe(){return boe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dut=function(t){var n=t.title,r=t.titleId,o=Mut(t,Aut);return c("svg",boe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 8v1h1v1H1V9h1V8H1V7h3v1H3zm1 4v2H1v-1h1v-1H1v-1h3v1zM3 5h1v1H1V5h1V4H1V3h2v2zm2.5-1h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 110-1z"}))},zut=Dut;var CD={};de(CD,{icon:()=>Wut});var chr=V(ne());var Nut=["title","titleId"];function woe(){return woe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var But=function(t){var n=t.title,r=t.titleId,o=Lut(t,Nut);return c("svg",woe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10 6H5C3.057 6 2 7.057 2 9s1.057 3 3 3h1.5v-1H5c-1.39 0-2-.61-2-2 0-1.39.61-2 2-2h5v3l3.5-3.5L10 3v3z"}))},Wut=But;var TD={};de(TD,{icon:()=>Uut});var phr=V(ne());var Hut=["title","titleId"];function Ooe(){return Ooe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qut=function(t){var n=t.title,r=t.titleId,o=$ut(t,Hut);return c("svg",Ooe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.023 10h1.274c.006.08.01.164.01.25a2.557 2.557 0 01-.883 1.949c-.284.25-.627.446-1.03.588A4.087 4.087 0 018.028 13a4.616 4.616 0 01-3.382-1.426c-.193-.259-.193-.5 0-.724.193-.223.438-.266.735-.13.343.363.748.655 1.213.876.466.22.949.33 1.449.33.637 0 1.132-.144 1.485-.433.353-.29.53-.67.53-1.14a1.72 1.72 0 00-.034-.353zM5.586 7a2.49 2.49 0 01-.294-.507 2.316 2.316 0 01-.177-.934c0-.363.076-.701.228-1.015.152-.314.363-.586.633-.816.27-.23.588-.41.955-.537A3.683 3.683 0 018.145 3c.578 0 1.112.11 1.603.33.49.221.907.508 1.25.861.16.282.16.512 0 .692-.16.18-.38.214-.662.102a3.438 3.438 0 00-.978-.669 2.914 2.914 0 00-1.213-.242c-.54 0-.973.125-1.302.375-.328.25-.492.595-.492 1.036 0 .236.046.434.14.596.092.162.217.304.374.426.157.123.329.23.515.324.119.06.24.116.362.169H5.586zM2.5 8h11a.5.5 0 110 1h-11a.5.5 0 010-1z"}))},Uut=qut;var AD={};de(AD,{icon:()=>Yut});var hhr=V(ne());var Gut=["title","titleId"];function xoe(){return xoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xut(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kut=function(t){var n=t.title,r=t.titleId,o=Jut(t,Gut);return c("svg",xoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14 3v2H2V3v10h12V3zM2 2h12c.552 0 1 .413 1 .923v10.154c0 .51-.448.923-1 .923H2c-.552 0-1-.413-1-.923V2.923C1 2.413 1.448 2 2 2zm0 5h12v1H2V7zm0 3h12v1H2v-1z"}))},Yut=Kut;var MD={};de(MD,{icon:()=>rct});var vhr=V(ne());var Qut=["title","titleId"];function _oe(){return _oe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ect(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tct=function(t){var n=t.title,r=t.titleId,o=Zut(t,Qut);return c("svg",_oe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 3.536V7.8c0 1.628 1.224 2.6 3 2.6 1.783 0 3-.972 3-2.6V3.536c0-.357.167-.536.5-.536.333 0 .5.179.5.536v4.318c0 2.093-1.665 3.546-4 3.546S4 9.893 4 7.8V3.536C4 3.179 4.167 3 4.5 3c.333 0 .5.179.5.536zM2.5 13h11a.5.5 0 110 1h-11a.5.5 0 110-1z"}))},rct=tct;var RD={};de(RD,{icon:()=>sct});var yhr=V(ne());var nct=["title","titleId"];function Soe(){return Soe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ict(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var act=function(t){var n=t.title,r=t.titleId,o=oct(t,nct);return c("svg",Soe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.5 6h5c1.943 0 3 1.057 3 3s-1.057 3-3 3H9v-1h1.5c1.39 0 2-.61 2-2 0-1.39-.61-2-2-2h-5v3L2 6.5 5.5 3v3z"}))},sct=act;var DD={};de(DD,{icon:()=>pct});var whr=V(ne());var lct=["title","titleId"];function Eoe(){return Eoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fct=function(t){var n=t.title,r=t.titleId,o=uct(t,lct);return c("svg",Eoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.5 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 010-1zm0 4h8a.5.5 0 110 1h-8a.5.5 0 110-1zm-3-7a.5.5 0 110-1 .5.5 0 010 1zm0 4a.5.5 0 110-1 .5.5 0 010 1zm0 4a.5.5 0 110-1 .5.5 0 010 1z"}))},pct=fct;var zD={};de(zD,{icon:()=>gct});var xhr=V(ne());var dct=["title","titleId"];function Ioe(){return Ioe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vct=function(t){var n=t.title,r=t.titleId,o=hct(t,dct);return c("svg",Ioe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M14.95 3.684L8.637 8.912a1 1 0 01-1.276 0L1.051 3.684A.999.999 0 001 4v8a1 1 0 001 1h12a1 1 0 001-1V4a.999.999 0 00-.05-.316zM2 2h12a2 2 0 012 2v8a2 2 0 01-2 2H2a2 2 0 01-2-2V4a2 2 0 012-2zm-.21 1l5.576 4.603a1 1 0 001.27.003L14.268 3H1.79z"}))},gct=vct;var ND={};de(ND,{icon:()=>_U});var Shr=V(ne());var yct=["title","titleId"];function koe(){return koe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oct=function(t){var n=t.title,r=t.titleId,o=bct(t,yct);return c("svg",koe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o))},_U=Oct;var LD={};de(LD,{icon:()=>Ict});var Ihr=V(ne());var xct=["title","titleId"];function Poe(){return Poe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Sct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ect=function(t){var n=t.title,r=t.titleId,o=_ct(t,xct);return c("svg",Poe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M15.862 14.18v.001a.482.482 0 01.1.521.5.5 0 01-.447.299h-3.149c-.07 0-.136 0-.2-.003a.664.664 0 01-.414-.14c-.35-.31-.684-.637-1.001-.981l-1.772-1.738a5.941 5.941 0 01-3.802.14l-.045-.012a5.89 5.89 0 01-2.682-1.712A5.715 5.715 0 011.08 7.72a5.66 5.66 0 01.348-3.118A5.78 5.78 0 013.39 2.124a5.979 5.979 0 016.136-.505 5.836 5.836 0 012.356 2.123 5.67 5.67 0 01.873 3.017l.001.003c0 .128-.051.25-.143.34a.495.495 0 01-.694 0 .476.476 0 01-.143-.34c0-.95-.288-1.878-.826-2.668a4.88 4.88 0 00-2.198-1.769 4.99 4.99 0 00-2.83-.273 4.93 4.93 0 00-2.509 1.314 4.774 4.774 0 00-1.34 2.46A4.715 4.715 0 002.352 8.6a4.82 4.82 0 001.804 2.155c.805.528 1.752.81 2.721.81a4.899 4.899 0 001.296-.194l.032-.009.717-.211a.506.506 0 01.483.111l1.11 1.026 1.788 1.752h2.03l-3.657-3.583a.475.475 0 01.014-.666.495.495 0 01.679-.013l4.493 4.402z"}),c("path",{d:"M7.097 3.468L9.679 4.93a.433.433 0 01.218.37v2.924a.422.422 0 01-.218.37l-2.582 1.461a.438.438 0 01-.437 0L4.077 8.594a.433.433 0 01-.218-.37V5.3a.422.422 0 01.218-.37L6.66 3.467a.446.446 0 01.437 0zm1.845 4.27V5.784a.328.328 0 00-.17-.287L7.047 4.52a.342.342 0 00-.338 0l-1.726.977a.336.336 0 00-.168.287v1.953a.326.326 0 00.17.287l1.724.977a.342.342 0 00.338 0l1.726-.978a.334.334 0 00.169-.287z"}))},Ict=Ect;var FD={};de(FD,{icon:()=>Tct});var Phr=V(ne());var kct=["title","titleId"];function joe(){return joe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cct=function(t){var n=t.title,r=t.titleId,o=Pct(t,kct);return c("svg",joe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2.648 9.937l7.29-7.288a2.21 2.21 0 013.124 0l2.29 2.288a2.21 2.21 0 010 3.126L10.413 13H12.5a.5.5 0 010 1H4.501a2.21 2.21 0 01-1.563-.647l.707-.707c.227.226.535.354.856.354h4.005a1.21 1.21 0 00.848-.354l1.292-1.293-4-4-3.29 3.291a1.21 1.21 0 000 1.712l.29.29-.708.707-.29-.29a2.21 2.21 0 010-3.126zM8 6h6.89a1.208 1.208 0 00-.246-.356L14 5H9L8 6zm2-2h3l-.645-.644a1.21 1.21 0 00-1.71 0L10 4zm4.89 3H7.708l1 1H14l.644-.644A1.22 1.22 0 0014.891 7zM9.708 9l1.646 1.646L13 9H9.707z"}),c("path",{d:"M14 11.5a.5.5 0 11-1 0 .5.5 0 011 0zm1.5-.5a.5.5 0 100-1 .5.5 0 000 1zm-1 2a.5.5 0 000 1h1a.5.5 0 000-1h-1z"}))},Tct=Cct;var BD={};de(BD,{icon:()=>zct});var Chr=V(ne());var Act=["title","titleId"];function Coe(){return Coe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dct=function(t){var n=t.title,r=t.titleId,o=Mct(t,Act);return c("svg",Coe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M12.535 12.493a.47.47 0 01.468.468v2.564a.473.473 0 01-.466.475H3V0H12.595a.45.45 0 01.398.463v2.565a.469.469 0 01-.468.467h-.065a.468.468 0 01-.467-.467V1H4v14h8.01l-.007-2.04c0-.257.21-.467.467-.467h.065zm-1.096-7.59l2.121 2.122a1.5 1.5 0 010 2.121l-2.12 2.122a.5.5 0 11-.708-.708l2.121-2.12a.5.5 0 000-.708l-2.121-2.121a.5.5 0 01.707-.707z"}))},zct=Dct;var WD={};de(WD,{icon:()=>Wct});var Ahr=V(ne());var Nct=["title","titleId"];function Toe(){return Toe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bct=function(t){var n=t.title,r=t.titleId,o=Lct(t,Nct);return c("svg",Toe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M4.354 12.354l8-8a.5.5 0 00-.708-.708l-8 8a.5.5 0 00.708.708zM1 10.5a.5.5 0 111 0v3a.5.5 0 00.5.5h3a.5.5 0 110 1h-3A1.5 1.5 0 011 13.5v-3zm14-5a.5.5 0 11-1 0v-3a.5.5 0 00-.5-.5h-3a.5.5 0 110-1h3A1.5 1.5 0 0115 2.5v3z"}))},Wct=Bct;var HD={};de(HD,{icon:()=>Uct});var Rhr=V(ne());var Hct=["title","titleId"];function Aoe(){return Aoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qct=function(t){var n=t.title,r=t.titleId,o=$ct(t,Hct);return c("svg",Aoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6.707 10L10 6.707A.5.5 0 009.293 6L6 9.293a.5.5 0 10.707.707zM4 9.5a.5.5 0 011 0v1a.5.5 0 00.5.5h1a.5.5 0 110 1h-1A1.5 1.5 0 014 10.5v-1zm8-3a.5.5 0 11-1 0v-1a.5.5 0 00-.5-.5h-1a.5.5 0 010-1h1A1.5 1.5 0 0112 5.5v1z"}))},Uct=qct;var $D={};de($D,{icon:()=>Yct});var zhr=V(ne());var Gct=["title","titleId"];function Moe(){return Moe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kct=function(t){var n=t.title,r=t.titleId,o=Jct(t,Gct);return c("svg",Moe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.505 1c.422-.003.844.17 1.166.516l1.95 2.05c.213.228.213.6 0 .828a.52.52 0 01-.771 0L9 2.451v7.993c0 .307-.224.556-.5.556s-.5-.249-.5-.556v-7.96l-1.82 1.91a.52.52 0 01-.77 0 .617.617 0 010-.829l1.95-2.05A1.575 1.575 0 018.5 1h.005zM4.18 7c-.473 0-.88.294-.972.703l-1.189 5.25a.776.776 0 00-.019.172c0 .483.444.875.99.875H14.01c.065 0 .13-.006.194-.017.537-.095.885-.556.778-1.03l-1.19-5.25C13.7 7.294 13.293 7 12.822 7H4.18zM6 6v1h5V6h1.825c.946 0 1.76.606 1.946 1.447l1.19 5.4c.215.975-.482 1.923-1.556 2.118a2.18 2.18 0 01-.39.035H2.985C1.888 15 1 14.194 1 13.2c0-.119.013-.237.039-.353l1.19-5.4C2.414 6.606 3.229 6 4.174 6H6z"}))},Yct=Kct;var VD={};de(VD,{icon:()=>rft});var Lhr=V(ne());var Qct=["title","titleId"];function Roe(){return Roe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tft=function(t){var n=t.title,r=t.titleId,o=Zct(t,Qct);return c("svg",Roe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M15.98 7.873c.013.03.02.064.02.098v.06a.24.24 0 01-.02.097C15.952 8.188 13.291 14 8 14S.047 8.188.02 8.128A.24.24 0 010 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2s7.953 5.813 7.98 5.873zm-1.37-.424a12.097 12.097 0 00-1.385-1.862C11.739 3.956 9.999 3 8 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 00-1.701 2.414 12.095 12.095 0 001.7 2.413C4.26 12.043 6.002 13 8 13s3.74-.956 5.225-2.587A12.097 12.097 0 0014.926 8c-.08-.15-.189-.343-.315-.551zM8 4.75A3.253 3.253 0 0111.25 8 3.254 3.254 0 018 11.25 3.253 3.253 0 014.75 8 3.252 3.252 0 018 4.75zm0 1C6.76 5.75 5.75 6.76 5.75 8S6.76 10.25 8 10.25 10.25 9.24 10.25 8 9.24 5.75 8 5.75zm0 1.5a.75.75 0 100 1.5.75.75 0 000-1.5z"}))},rft=tft;var qD={};de(qD,{icon:()=>sft});var Bhr=V(ne());var nft=["title","titleId"];function Doe(){return Doe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ift(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aft=function(t){var n=t.title,r=t.titleId,o=oft(t,nft);return c("svg",Doe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.318 13.47l.776-.776A6.04 6.04 0 008 13c1.999 0 3.74-.956 5.225-2.587A12.097 12.097 0 0014.926 8a12.097 12.097 0 00-1.701-2.413l-.011-.012.707-.708c1.359 1.476 2.045 2.976 2.058 3.006.014.03.021.064.021.098v.06a.24.24 0 01-.02.097C15.952 8.188 13.291 14 8 14a7.03 7.03 0 01-2.682-.53zM2.04 11.092C.707 9.629.034 8.158.02 8.128A.24.24 0 010 8.03v-.059c0-.034.007-.068.02-.098C.048 7.813 2.709 2 8 2c.962 0 1.837.192 2.625.507l-.78.78A6.039 6.039 0 008 3c-2 0-3.74.956-5.225 2.587a12.098 12.098 0 00-1.701 2.414 12.11 12.11 0 001.674 2.383l-.708.708zM8.362 4.77L7.255 5.877a2.262 2.262 0 00-1.378 1.378L4.77 8.362A3.252 3.252 0 018.362 4.77zm2.86 2.797a3.254 3.254 0 01-3.654 3.654l1.06-1.06a2.262 2.262 0 001.533-1.533l1.06-1.06zm-9.368 7.287a.5.5 0 01-.708-.708l13-13a.5.5 0 01.708.708l-13 13z"}))},sft=aft;var UD={};de(UD,{icon:()=>pft});var Hhr=V(ne());var lft=["title","titleId"];function zoe(){return zoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fft=function(t){var n=t.title,r=t.titleId,o=uft(t,lft);return c("svg",zoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zM2.739 8.802a.533.533 0 01.922-.537C4.815 10.245 6.249 11.2 8 11.2c1.75 0 3.185-.956 4.34-2.935a.533.533 0 01.92.537c-1.333 2.287-3.1 3.465-5.26 3.465-2.16 0-3.927-1.178-5.26-3.465z"}))},pft=fft;var GD={};de(GD,{icon:()=>gft});var Vhr=V(ne());var dft=["title","titleId"];function Noe(){return Noe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vft=function(t){var n=t.title,r=t.titleId,o=hft(t,dft);return c("svg",Noe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zM3.2 10.667a.533.533 0 010-1.067h9.6a.533.533 0 110 1.067H3.2z",fillRule:"evenodd"}))},gft=vft;var JD={};de(JD,{icon:()=>xft});var Uhr=V(ne());var yft=["title","titleId"];function Loe(){return Loe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Oft=function(t){var n=t.title,r=t.titleId,o=bft(t,yft);return c("svg",Loe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 16A8 8 0 118 0a8 8 0 010 16zm0-1.067A6.933 6.933 0 108 1.067a6.933 6.933 0 000 13.866zM5.333 6.4a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm5.334 0a1.067 1.067 0 110-2.133 1.067 1.067 0 010 2.133zm2.487 3.868a.533.533 0 11-.708.797C10.936 9.725 9.458 9.067 8 9.067c-1.458 0-2.937.657-4.446 1.998a.533.533 0 11-.708-.797C4.536 8.765 6.258 8 8 8s3.463.765 5.154 2.268z"}))},xft=Oft;var XD={};de(XD,{icon:()=>kft});var Jhr=V(ne());var _ft=["title","titleId"];function Foe(){return Foe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Eft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ift=function(t){var n=t.title,r=t.titleId,o=Sft(t,_ft);return c("svg",Foe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.999 15.999a8 8 0 110-16 8 8 0 010 16zM8 15A7 7 0 108 1a7 7 0 000 14zM3.5 5h9a.5.5 0 110 1h-9a.5.5 0 010-1zm2 3h5a.5.5 0 110 1h-5a.5.5 0 010-1zm2 3h1a.5.5 0 110 1h-1a.5.5 0 110-1z"}))},kft=Ift;var KD={};de(KD,{icon:()=>Aft});var Khr=V(ne());var Pft=["title","titleId"];function Boe(){return Boe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tft=function(t){var n=t.title,r=t.titleId,o=jft(t,Pft);return c("svg",Boe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.686 8.464c1.547-.619 3.08-.619 4.628 0A.5.5 0 0013 8V2a.5.5 0 00-.276-.447C11.259.82 9.458.82 7.342 1.526c-1.884.628-3.417.628-4.618.027A.5.5 0 002 2v12.5a.5.5 0 101 0V8.553c1.411.627 2.983.592 4.686-.089zM3 2.741c1.322.42 2.878.327 4.658-.267C9.4 1.894 10.843 1.85 12 2.322v4.975c-1.56-.464-3.128-.384-4.686.239-1.54.616-2.892.616-4.09.017A.498.498 0 003 7.5V2.74z"}))},Aft=Tft;var YD={};de(YD,{icon:()=>Nft});var Qhr=V(ne());var Mft=["title","titleId"];function Woe(){return Woe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zft=function(t){var n=t.title,r=t.titleId,o=Rft(t,Mft);return c("svg",Woe({viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.14.192L7.53 2.49a.67.67 0 00.942 0L10.86.192a.677.677 0 01.944 0 .65.65 0 010 .93l-2.388 2.3a2.02 2.02 0 01-2.832 0l-2.388-2.3a.65.65 0 010-.93.677.677 0 01.944 0zm0 15.616l2.39-2.298a.67.67 0 01.942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 000-.93l-2.388-2.3a2.02 2.02 0 00-2.832 0l-2.388 2.3a.65.65 0 000 .93c.26.256.683.256.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},Nft=zft;var QD={};de(QD,{icon:()=>Hft});var e0r=V(ne());var Lft=["title","titleId"];function Hoe(){return Hoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wft=function(t){var n=t.title,r=t.titleId,o=Fft(t,Lft);return c("svg",Hoe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2H1v11h6.1c.07.348.177.682.316 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v3.416a4.962 4.962 0 00-1-.316V4H7.125A1.125 1.125 0 016 2.875V2zm10 10a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},Hft=Wft;var ZD={};de(ZD,{icon:()=>Gft});var r0r=V(ne());var $ft=["title","titleId"];function $oe(){return $oe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uft=function(t){var n=t.title,r=t.titleId,o=Vft(t,$ft);return c("svg",$oe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 2H2v11h12V4H8.125A1.125 1.125 0 017 2.875V2zm.25-1a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H14a1 1 0 011 1v9a1 1 0 01-1 1H2a1 1 0 01-1-1V2a1 1 0 011-1h5.25z"}))},Gft=Uft;var ez={};de(ez,{icon:()=>Qft});var o0r=V(ne());var Jft=["title","titleId"];function Voe(){return Voe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kft(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Yft=function(t){var n=t.title,r=t.titleId,o=Xft(t,Jft);return c("svg",Voe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M1 9.5l.826-3.717A1 1 0 012.802 5H13V4H7.125A1.125 1.125 0 016 2.875V2H1v7.5zm.247 3.5H7.1c.07.348.177.682.316 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v1h.753a1 1 0 01.977 1.217l-.447 2.011a5.015 5.015 0 00-.887-.618L14.753 6H2.803l-1.556 7zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-4 .5a.577.577 0 01-.57-.495l-.29-2.015a.867.867 0 111.718 0l-.288 2.015a.577.577 0 01-.57.495zm0 2.5a1 1 0 100-2 1 1 0 000 2z"}))},Qft=Yft;var tz={};de(tz,{icon:()=>npt});var a0r=V(ne());var Zft=["title","titleId"];function qoe(){return qoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rpt=function(t){var n=t.title,r=t.titleId,o=ept(t,Zft);return c("svg",qoe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1 9.5l.826-3.717A1 1 0 012.802 5H13V4H7.125A1.125 1.125 0 016 2.875V2H1v7.5zm.247 3.5h11.95l1.556-7H2.803l-1.556 7zM13 14H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75v1.125c0 .069.056.125.125.125H13a1 1 0 011 1v1h.753a1 1 0 01.977 1.217l-1.556 7a1 1 0 01-.976.783H13z"}))},npt=rpt;var rz={};de(rz,{icon:()=>lpt});var l0r=V(ne());var opt=["title","titleId"];function Uoe(){return Uoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function apt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var spt=function(t){var n=t.title,r=t.titleId,o=ipt(t,opt);return c("svg",Uoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 2a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1zm5.146.22l7.2 4.581a1.425 1.425 0 010 2.398l-7.2 4.581C7.21 14.375 6 13.692 6 12.581V3.42c0-1.112 1.21-1.795 2.146-1.2z",clipRule:"evenodd"}))},lpt=spt;var nz={};de(nz,{icon:()=>dpt});var c0r=V(ne());var upt=["title","titleId"];function Goe(){return Goe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ppt=function(t){var n=t.title,r=t.titleId,o=cpt(t,upt);return c("svg",Goe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 2a1 1 0 011 1v10a1 1 0 11-2 0V3a1 1 0 011-1zm-5.146.22l-7.2 4.581a1.425 1.425 0 000 2.398l7.2 4.581c.936.595 2.146-.088 2.146-1.199V3.42c0-1.111-1.21-1.794-2.146-1.199z",clipRule:"evenodd"}))},dpt=ppt;var oz={};de(oz,{icon:()=>ypt});var p0r=V(ne());var hpt=["title","titleId"];function Joe(){return Joe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gpt=function(t){var n=t.title,r=t.titleId,o=mpt(t,hpt);return c("svg",Joe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 7V3h1v3h3v1H9zM7 7H3V6h3V3h1v4zm2 2h4v1h-3v3H9V9zM7 9v4H6v-3H3V9h4zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994z"}))},ypt=gpt;var iz={};de(iz,{icon:()=>_pt});var h0r=V(ne());var bpt=["title","titleId"];function Xoe(){return Xoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Opt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xpt=function(t){var n=t.title,r=t.titleId,o=wpt(t,bpt);return c("svg",Xoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 3v4h-1V4H9V3h4zM3 3h4v1H4v3H3V3zm10 10H9v-1h3V9h1v4zM3 13V9h1v3h3v1H3zM0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994z",fillRule:"evenodd"}))},_pt=xpt;var az={};de(az,{icon:()=>Ppt});var v0r=V(ne());var Spt=["title","titleId"];function Koe(){return Koe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ipt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kpt=function(t){var n=t.title,r=t.titleId,o=Ept(t,Spt);return c("svg",Koe({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 2.226v2.218c-.359-.143-.845-.218-1.315-.218-1.059 0-1.631.519-1.802 1.565l-.168.937h2.798v2.159H9.41l-.313 1.674C8.696 12.987 7.261 14 4.785 14c-.718 0-1.35-.092-1.785-.251v-2.243c.418.176.905.268 1.383.268 1.008 0 1.546-.435 1.725-1.523l.24-1.364H3.787V6.728h2.812l.288-1.264C7.286 3.071 8.662 2 11.352 2c.598 0 1.306.1 1.648.226z"}))},Ppt=kpt;var sz={};de(sz,{icon:()=>Mpt});var y0r=V(ne());var jpt=["title","titleId"];function Yoe(){return Yoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Apt=function(t){var n=t.title,r=t.titleId,o=Cpt(t,jpt);return c("svg",Yoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M.164 10.329L1.87 8 .163 5.67c.18-.601.43-1.19.758-1.757a8.197 8.197 0 011.142-1.535l2.872.313L6.099.05a8.166 8.166 0 013.8-.003l1.166 2.644 2.872-.313a8.166 8.166 0 011.899 3.293L14.13 8l1.706 2.33c-.18.601-.43 1.19-.758 1.757a8.197 8.197 0 01-1.142 1.535l-2.872-.313-1.164 2.641a8.166 8.166 0 01-3.8.003l-1.166-2.644-2.872.313a8.166 8.166 0 01-1.899-3.293zm4.663 1.986a1 1 0 011.023.591l.957 2.17c.79.134 1.597.132 2.387-.001l.956-2.169a1 1 0 011.023-.59l2.358.256a7.23 7.23 0 001.194-2.068l-1.401-1.913a1 1 0 010-1.182l1.4-1.912a7.165 7.165 0 00-1.192-2.069l-2.359.257a1 1 0 01-1.023-.591L9.193.924a7.165 7.165 0 00-2.387.001L5.85 3.094a1 1 0 01-1.023.59l-2.358-.256a7.23 7.23 0 00-1.194 2.068l1.401 1.913a1 1 0 010 1.182l-1.4 1.912c.28.751.681 1.45 1.192 2.069l2.359-.257zM8 11a3 3 0 110-6 3 3 0 010 6zm0-1a2 2 0 100-4 2 2 0 000 4z"}))},Mpt=Apt;var lz={};de(lz,{icon:()=>Lpt});var w0r=V(ne());var Rpt=["title","titleId"];function Qoe(){return Qoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Npt=function(t){var n=t.title,r=t.titleId,o=Dpt(t,Rpt);return c("svg",Qoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.035 9A3.5 3.5 0 0115 7.05V4.5c0-1.072-.648-1.72-2.098-2.01a.5.5 0 01.196-.98C14.981 1.886 16 2.905 16 4.5v4.25c0 .072-.015.14-.043.202A3.5 3.5 0 119.035 10h-2.07A3.5 3.5 0 11.043 8.952.498.498 0 010 8.75V4.5c0-1.595 1.019-2.614 2.902-2.99a.5.5 0 01.196.98C1.648 2.78 1 3.428 1 4.5v2.55A3.5 3.5 0 016.965 9h2.07zM3.5 12a2.5 2.5 0 100-5 2.5 2.5 0 000 5zm9 0a2.5 2.5 0 100-5 2.5 2.5 0 000 5z"}))},Lpt=Npt;var uz={};de(uz,{icon:()=>$pt});var x0r=V(ne());var Fpt=["title","titleId"];function Zoe(){return Zoe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wpt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hpt=function(t){var n=t.title,r=t.titleId,o=Bpt(t,Fpt);return c("svg",Zoe({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.019 8a6.462 6.462 0 001.003 3h2.382a14.469 14.469 0 01-.396-3h-2.99zm0-1h2.989c.033-1.078.172-2.094.396-3H2.022a6.462 6.462 0 00-1.003 3zM13.98 8h-2.989a14.469 14.469 0 01-.396 3h2.382a6.462 6.462 0 001.003-3zm0-1a6.462 6.462 0 00-1.003-3h-2.382c.224.906.363 1.922.396 3h2.99zM5.008 8c.037 1.107.195 2.127.429 3h4.126c.234-.873.392-1.893.429-3H5.008zm0-1h4.984a13.422 13.422 0 00-.429-3H5.437a13.422 13.422 0 00-.429 3zM.016 8H0V7h.016a7.5 7.5 0 0114.968 0H15v1h-.016A7.5 7.5 0 01.016 8zm2.794 4a6.501 6.501 0 002.717 1.695A7.315 7.315 0 014.7 12H2.81zm9.38 0H10.3c-.23.657-.51 1.23-.827 1.695A6.501 6.501 0 0012.19 12zm-6.428 0c.484 1.24 1.132 2 1.738 2 .606 0 1.254-.76 1.738-2H5.762zM2.81 3H4.7c.23-.657.51-1.23.827-1.695A6.501 6.501 0 002.81 3zm9.38 0a6.501 6.501 0 00-2.717-1.695c.317.465.597 1.038.827 1.695h1.89zM5.762 3h3.476C8.754 1.76 8.106 1 7.5 1c-.606 0-1.254.76-1.738 2z"}))},$pt=Hpt;var cz={};de(cz,{icon:()=>Jpt});var S0r=V(ne());var Vpt=["title","titleId"];function eie(){return eie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Upt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gpt=function(t){var n=t.title,r=t.titleId,o=qpt(t,Vpt);return c("svg",eie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13.5 6c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 01-.5-.5c0-.276.229-.5.5-.5h11zm0 3c.276 0 .5.232.5.5 0 .276-.229.5-.5.5h-11a.505.505 0 01-.5-.5c0-.276.229-.5.5-.5h11z"}))},Jpt=Gpt;var fz={};de(fz,{icon:()=>Zpt});var I0r=V(ne());var Xpt=["title","titleId"];function tie(){return tie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ypt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qpt=function(t){var n=t.title,r=t.titleId,o=Kpt(t,Xpt);return c("svg",tie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2.5c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 01-.5-.5v-11zm3 0c0-.276.232-.5.5-.5.276 0 .5.229.5.5v11c0 .276-.232.5-.5.5a.503.503 0 01-.5-.5v-11z"}))},Zpt=Qpt;var pz={};de(pz,{icon:()=>odt});var P0r=V(ne());var edt=["title","titleId"];function rie(){return rie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ndt=function(t){var n=t.title,r=t.titleId,o=tdt(t,edt);return c("svg",rie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1 5V1h4v4H1zm3-1V2H2v2h2zm2 1V1h4v4H6zm3-1V2H7v2h2zm2 1V1h4v4h-4zm1-1h2V2h-2v2zM1 10V6h4v4H1zm3-1V7H2v2h2zm2 1V6h4v4H6zm3-1V7H7v2h2zm2 1V6h4v4h-4zm3-1V7h-2v2h2zM1 15v-4h4v4H1zm1-1h2v-2H2v2zm4 1v-4h4v4H6zm1-1h2v-2H7v2zm4 1v-4h4v4h-4zm1-1h2v-2h-2v2z"}))},odt=ndt;var dz={};de(dz,{icon:()=>udt});var C0r=V(ne());var idt=["title","titleId"];function nie(){return nie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ldt=function(t){var n=t.title,r=t.titleId,o=adt(t,idt);return c("svg",nie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.402 3.098a3.75 3.75 0 00-5.304 5.304l5.558 5.27L8 14l5.892-5.588a3.75 3.75 0 10-5.294-5.313L8 3.697l-.598-.599zM2.796 7.685a2.747 2.747 0 01.01-3.88 2.75 2.75 0 013.889 0L8 5.111l1.305-1.306a2.75 2.75 0 113.89 3.89L8 12.62 2.796 7.685z"}))},udt=ldt;var hz={};de(hz,{icon:()=>hdt});var A0r=V(ne());var cdt=["title","titleId"];function oie(){return oie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ddt=function(t){var n=t.title,r=t.titleId,o=fdt(t,cdt);return c("svg",oie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 9a3 3 0 110 6 3 3 0 010-6zm0 1a2 2 0 100 4 2 2 0 000-4zM4 2a2 2 0 110 4 2 2 0 010-4zm0 1a1 1 0 100 2 1 1 0 000-2zm0 5a4 4 0 110 8 4 4 0 010-8zm0 1a3 3 0 100 6 3 3 0 000-6zm8-9a4 4 0 110 8 4 4 0 010-8zm0 1a3 3 0 100 6 3 3 0 000-6z"}))},hdt=ddt;var mz={};de(mz,{icon:()=>bdt});var R0r=V(ne());var mdt=["title","titleId"];function iie(){return iie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ydt=function(t){var n=t.title,r=t.titleId,o=vdt(t,mdt);return c("svg",iie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13.6 12.186l-1.357-1.358c-.025-.025-.058-.034-.084-.056.53-.794.84-1.746.84-2.773a4.977 4.977 0 00-.84-2.772c.026-.02.059-.03.084-.056L13.6 3.813a6.96 6.96 0 010 8.373zM8 15A6.956 6.956 0 013.814 13.6l1.358-1.358c.025-.025.034-.057.055-.084C6.02 12.688 6.974 13 8 13a4.978 4.978 0 002.773-.84c.02.026.03.058.056.083l1.357 1.358A6.956 6.956 0 018 15zm-5.601-2.813a6.963 6.963 0 010-8.373l1.359 1.358c.024.025.057.035.084.056A4.97 4.97 0 003 8c0 1.027.31 1.98.842 2.773-.027.022-.06.031-.084.056l-1.36 1.358zm5.6-.187A4 4 0 118 4a4 4 0 010 8zM8 1c1.573 0 3.019.525 4.187 1.4l-1.357 1.358c-.025.025-.035.057-.056.084A4.979 4.979 0 008 3a4.979 4.979 0 00-2.773.842c-.021-.027-.03-.059-.055-.084L3.814 2.4A6.957 6.957 0 018 1zm0-1a8.001 8.001 0 10.003 16.002A8.001 8.001 0 008 0z"}))},bdt=ydt;var vz={};de(vz,{icon:()=>Sdt});var z0r=V(ne());var wdt=["title","titleId"];function aie(){return aie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _dt=function(t){var n=t.title,r=t.titleId,o=Odt(t,wdt);return c("svg",aie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.13 1.229l5.5 4.47a1 1 0 01.37.777V14a1 1 0 01-1 1H2a1 1 0 01-1-1V6.476a1 1 0 01.37-.776l5.5-4.471a1 1 0 011.26 0zM13 6.476L7.5 2.005 2 6.475V14h11V6.476z"}))},Sdt=_dt;var gz={};de(gz,{icon:()=>jdt});var L0r=V(ne());var Edt=["title","titleId"];function sie(){return sie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pdt=function(t){var n=t.title,r=t.titleId,o=Idt(t,Edt);return c("svg",sie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.5 11.508L7.468 8H6.25V7h2.401l.03 3.508H9.8v1H7.5zm-.25-6.202a.83.83 0 01.207-.577c.137-.153.334-.229.59-.229.256 0 .454.076.594.23.14.152.209.345.209.576 0 .228-.07.417-.21.568-.14.15-.337.226-.593.226-.256 0-.453-.075-.59-.226a.81.81 0 01-.207-.568zM8 13A5 5 0 108 3a5 5 0 000 10zm0 1A6 6 0 118 2a6 6 0 010 12z"}))},jdt=Pdt;var yz={};de(yz,{icon:()=>Rdt});var B0r=V(ne());var Cdt=["title","titleId"];function lie(){return lie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Adt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mdt=function(t){var n=t.title,r=t.titleId,o=Tdt(t,Cdt);return c("svg",lie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6 5a2 2 0 11-4 0 2 2 0 014 0zm9-4a1 1 0 011 1v12a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1zm-3.448 6.134l-3.76 2.769a.5.5 0 01-.436.077l-.087-.034-1.713-.87L1 11.8V14h14V9.751l-3.448-2.617zM15 2H1v8.635l4.28-2.558a.5.5 0 01.389-.054l.094.037 1.684.855 3.813-2.807a.5.5 0 01.52-.045l.079.05L15 8.495V2z"}))},Rdt=Mdt;var bz={};de(bz,{icon:()=>Fdt});var H0r=V(ne());var Ddt=["title","titleId"];function uie(){return uie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ndt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ldt=function(t){var n=t.title,r=t.titleId,o=zdt(t,Ddt);return c("svg",uie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 10.114l1.85-1.943a.52.52 0 01.77 0c.214.228.214.6 0 .829l-1.95 2.05a1.552 1.552 0 01-2.31 0L5.41 9a.617.617 0 010-.829.52.52 0 01.77 0L8 10.082V1.556C8 1.249 8.224 1 8.5 1s.5.249.5.556v8.558zM4.18 6a.993.993 0 00-.972.804l-1.189 6A.995.995 0 002.991 14h11.018a1 1 0 00.972-1.196l-1.19-6a.993.993 0 00-.97-.804H4.18zM6 5v1h5V5h1.825c.946 0 1.76.673 1.946 1.608l1.19 6A2 2 0 0114.016 15H2.984a1.992 1.992 0 01-1.945-2.392l1.19-6C2.414 5.673 3.229 5 4.174 5H6z"}))},Fdt=Ldt;var wz={};de(wz,{icon:()=>Vdt});var V0r=V(ne());var Bdt=["title","titleId"];function cie(){return cie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $dt=function(t){var n=t.title,r=t.titleId,o=Wdt(t,Bdt);return c("svg",cie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h3v1H5zM3 8V7h1v1H3zm2 3v-1h2v1H5zm5.5-1.207L9.086 8.379l-.707.707L9.793 10.5l-1.414 1.414.707.707 1.414-1.414 1.414 1.414.707-.707-1.414-1.414 1.414-1.414-.707-.707L10.5 9.793zM3 11v-1h1v1H3zm7.5-5a4.5 4.5 0 110 9 4.5 4.5 0 010-9z"}))},Vdt=$dt;var Oz={};de(Oz,{icon:()=>Xdt});var U0r=V(ne());var qdt=["title","titleId"];function fie(){return fie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jdt=function(t){var n=t.title,r=t.titleId,o=Udt(t,qdt);return c("svg",fie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 2H2v11h4v1H1V1h12v5h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h6v1H5zM3 8V7h1v1H3zm2 3v-1h3v1H5zm-2 0v-1h1v1H3zm4.502 1.41L12.913 7 15 9.087l-5.41 5.41L7 15l.502-2.59z"}))},Xdt=Jdt;var xz={};de(xz,{icon:()=>eht});var J0r=V(ne());var Kdt=["title","titleId"];function pie(){return pie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qdt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zdt=function(t){var n=t.title,r=t.titleId,o=Ydt(t,Kdt);return c("svg",pie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M14.516 9H10.5a.5.5 0 010-1h4.016L13.11 5.948c-.171-.252-.137-.62.079-.821.217-.2.531-.159.703.092l2 2.916a.648.648 0 01.108.397.643.643 0 01-.108.332l-2 2.918A.478.478 0 0113.5 12a.457.457 0 01-.312-.127c-.216-.202-.25-.57-.079-.82L14.516 9zM3 15H1a1 1 0 01-1-1V2a1 1 0 011-1h7.8c.274 0 .537.113.726.312l2.2 2.428c.176.186.274.433.274.689V7h-1V5H8.5a.5.5 0 01-.5-.5V2H3v12h8v-4h1v4a1 1 0 01-1 1H3zm-1-1V2H1v12h1z"}))},eht=Zdt;var _z={};de(_z,{icon:()=>iht});var K0r=V(ne());var tht=["title","titleId"];function die(){return die=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oht=function(t){var n=t.title,r=t.titleId,o=rht(t,tht);return c("svg",die({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 8H4.915a1.5 1.5 0 110-1H8V2.5A1.5 1.5 0 019.5 1h2.585a1.5 1.5 0 110 1H9.5a.5.5 0 00-.5.5v10a.5.5 0 00.5.5h2.585a1.5 1.5 0 110 1H9.5A1.5 1.5 0 018 12.5V8zM3.5 3a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm0 12a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm10-6a1.5 1.5 0 110-3 1.5 1.5 0 010 3z"}))},iht=oht;var Sz={};de(Sz,{icon:()=>cht});var Q0r=V(ne());var aht=["title","titleId"];function hie(){return hie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uht=function(t){var n=t.title,r=t.titleId,o=sht(t,aht);return c("svg",hie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 2H2v11h6v1H1V1h12v6h-1V2zM5 5h5.999V4H5v1zM3 5V4h1v1H3zm2 3V7h3v1H5zM3 8V7h1v1H3zm2 3v-1h2v1H5zm5-1H8v1h2v2h1v-2h2v-1h-2V8h-1v2zm-7 1v-1h1v1H3zm7.5-5a4.5 4.5 0 110 9 4.5 4.5 0 010-9z"}))},cht=uht;var Ez={};de(Ez,{icon:()=>mht});var emr=V(ne());var fht=["title","titleId"];function mie(){return mie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hht=function(t){var n=t.title,r=t.titleId,o=pht(t,fht);return c("svg",mie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 2H2v11h6v1H1V1h12v6.839l-1-.707V2z"}),c("path",{d:"M8 11v-1H5v1h3zm0-3.055c0-.342.082-.664.23-.945H5v1h3v-.055zM5 5h5.999V4H5v1zM3 4v1h1V4H3zm0 3v1h1V7H3zm0 3v1h1v-1H3zm11.607.2l-4.32-3.055C9.727 6.75 9 7.204 9 7.945v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598z"}))},mht=hht;var Iz={};de(Iz,{icon:()=>wht});var rmr=V(ne());var vht=["title","titleId"];function vie(){return vie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bht=function(t){var n=t.title,r=t.titleId,o=ght(t,vht);return c("svg",vie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 5h5.999V4H5v1zM3 5h1V4H3v1zm0 3h1V7H3v1zm6.022-1l-.15.333-.737-.078-.467-.05-.33.342A5.13 5.13 0 006.948 8H5V7h4.022zm-3.005 3L6 10.056l.306.411.399.533H5v-1h1.017zM3 11h1v-1H3v1z"}),c("path",{d:"M13 7.05l-.162-.359-.2-.447-.47-.11A5.019 5.019 0 0012 6.098V2H2v11h4.36c.157.354.355.69.59 1H1V1h12v6.05z"}),c("path",{d:"M11.004 7c.322 0 .646.036.966.109l.595 1.293 1.465-.152c.457.462.786 1.016.969 1.61l-.87 1.14.871 1.141a3.94 3.94 0 01-.387.859 4.058 4.058 0 01-.583.75l-1.465-.152-.594 1.292a4.37 4.37 0 01-1.941.001l-.594-1.293-1.466.152a3.954 3.954 0 01-.969-1.61l.87-1.14L7 9.86a3.947 3.947 0 01.97-1.61l1.466.152.593-1.292a4.37 4.37 0 01.975-.11zM11 12a1 1 0 10.002-1.998A1 1 0 0011 12z"}))},wht=bht;var kz={};de(kz,{icon:()=>Eht});var omr=V(ne());var Oht=["title","titleId"];function gie(){return gie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _ht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sht=function(t){var n=t.title,r=t.titleId,o=xht(t,Oht);return c("svg",gie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10 13.999v-2.99h1V15H0V1h11v3.999h-1V2.001H1v11.998z"}),c("path",{d:"M4.5 10V9H11v1zM13 9.5l3-3-3-3z"}),c("path",{d:"M5.5 6.5v6l-3-3zM7 7V6h6.5v1z"}))},Eht=Sht;var Pz={};de(Pz,{icon:()=>Cht});var amr=V(ne());var Iht=["title","titleId"];function yie(){return yie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jht=function(t){var n=t.title,r=t.titleId,o=kht(t,Iht);return c("svg",yie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M15.363 14.658a.5.5 0 11-.713.7l-2.97-3.023a.5.5 0 01.001-.7A3.9 3.9 0 108.9 12.8a.5.5 0 110 .999 4.9 4.9 0 113.821-1.833l2.642 2.691zM3.094 13a.5.5 0 110 1H2.5A2.5 2.5 0 010 11.5v-9A2.5 2.5 0 012.5 0h9A2.5 2.5 0 0114 2.5v.599a.5.5 0 11-1 0V2.5A1.5 1.5 0 0011.5 1h-9A1.5 1.5 0 001 2.5v9A1.5 1.5 0 002.5 13h.594zM2.5 3a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-4 2a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-2 1a.5.5 0 110 1 .5.5 0 010-1zm0 3a.5.5 0 110-1 .5.5 0 010 1zm6-6a.5.5 0 110-1 .5.5 0 010 1zm2 0a.5.5 0 110-1 .5.5 0 010 1zm-8 8a.5.5 0 110-1 .5.5 0 010 1z"}))},Cht=jht;var jz={};de(jz,{icon:()=>Dht});var lmr=V(ne());var Tht=["title","titleId"];function bie(){return bie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rht=function(t){var n=t.title,r=t.titleId,o=Aht(t,Tht);return c("svg",bie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 13.25a5.25 5.25 0 100-10.5 5.25 5.25 0 000 10.5zM8 14A6 6 0 118 2a6 6 0 010 12z"}),c("path",{d:"M8 2a6 6 0 100 12V2z"}))},Dht=Rht;var Cz={};de(Cz,{icon:()=>Bht});var cmr=V(ne());var zht=["title","titleId"];function wie(){return wie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fht=function(t){var n=t.title,r=t.titleId,o=Nht(t,zht);return c("svg",wie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 2a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2h8zm-2 3H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5zM6 5H5v6h1V5zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984z"}))},Bht=Fht;var Tz={};de(Tz,{icon:()=>qht});var pmr=V(ne());var Wht=["title","titleId"];function Oie(){return Oie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $ht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vht=function(t){var n=t.title,r=t.titleId,o=Hht(t,Wht);return c("svg",Oie({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 3h16v11H0V3zm15 10V4H1v9h14zM2 5h2v1H2V5zm2 7v-1H2v1h2zm10-1v1h-2v-1h2zm-3 1v-1H5v1h6zM5 5h1v1H5V5zM3 7H2v1h1V7zm3 0h1v1H6V7zM3 9H2v1h1V9zm3 0h1v1H6V9zm2-4H7v1h1V5zM4 7h1v1H4V7zm5 0H8v1h1V7zm1 0h1v1h-1V7zM5 9H4v1h1V9zm3 0h1v1H8V9zm3 0h-1v1h1V9zM9 5h1v1H9V5zm3 0h-1v1h1V5zm1 0h1v1h-1V5zm1 2h-2v3h2V7z"}))},qht=Vht;var Az={};de(Az,{icon:()=>Kht});var hmr=V(ne());var Uht=["title","titleId"];function xie(){return xie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xht=function(t){var n=t.title,r=t.titleId,o=Ght(t,Uht);return c("svg",xie({xmlns:"http://www.w3.org/2000/svg",width:16,height:10,viewBox:"0 0 16 10","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 9a5 5 0 110-8 5 5 0 110 8zm.75-.692a4 4 0 100-6.615A4.981 4.981 0 0110 5a4.981 4.981 0 01-1.25 3.308zM4.133 8V5.559h2.496v-.625H4.133V2.996h2.719v-.633H3.43V8h.703z"}))},Kht=Xht;var Mz={};de(Mz,{icon:()=>t0t});var vmr=V(ne());var Yht=["title","titleId"];function _ie(){return _ie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zht(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e0t=function(t){var n=t.title,r=t.titleId,o=Qht(t,Yht);return c("svg",_ie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 7H3v2h4v2l3-3-3-3v2zM6 6V5a1 1 0 011.707-.707l3 3a1 1 0 010 1.414l-3 3A1 1 0 016 11v-1H3a1 1 0 01-1-1V7a1 1 0 011-1h3zm7.5-3a.5.5 0 01.5.5v9a.5.5 0 11-1 0v-9a.5.5 0 01.5-.5z"}))},t0t=e0t;var Rz={};de(Rz,{icon:()=>a0t});var ymr=V(ne());var r0t=["title","titleId"];function Sie(){return Sie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i0t=function(t){var n=t.title,r=t.titleId,o=n0t(t,r0t);return c("svg",Sie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.192 10.145l2.298-1.792c.259-.196.259-.509 0-.706l-2.298-1.792c-.256-.196-.256-.513 0-.708a.81.81 0 01.93 0l2.3 1.791c.772.59.77 1.537 0 2.124l-2.3 1.791a.81.81 0 01-.93 0c-.256-.195-.256-.512 0-.708zm-6.384-4.29L2.51 7.647c-.259.196-.259.509 0 .706l2.298 1.792c.256.196.256.513 0 .708a.81.81 0 01-.93 0l-2.3-1.791c-.772-.59-.77-1.537 0-2.124l2.3-1.791a.81.81 0 01.93 0c.256.195.256.512 0 .708zM6.5 6h3a.5.5 0 010 1h-3a.5.5 0 010-1zm0 3h3a.5.5 0 010 1h-3a.5.5 0 010-1z"}))},a0t=i0t;var Dz={};de(Dz,{icon:()=>f0t});var wmr=V(ne());var s0t=["title","titleId"];function Eie(){return Eie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c0t=function(t){var n=t.title,r=t.titleId,o=l0t(t,s0t);return c("svg",Eie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 12a4 4 0 100-8 4 4 0 000 8zm0 1A5 5 0 115 3a5 5 0 010 10zm6-1a4 4 0 100-8 4 4 0 000 8zm0 1a5 5 0 110-10 5 5 0 010 10z"}))},f0t=c0t;var zz={};de(zz,{icon:()=>v0t});var xmr=V(ne());var p0t=["title","titleId"];function Iie(){return Iie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function h0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var m0t=function(t){var n=t.title,r=t.titleId,o=d0t(t,p0t);return c("svg",Iie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 4a5 5 0 110 8 5 5 0 110-8zm-.75.692a4 4 0 100 6.615A4.981 4.981 0 016 8c0-1.268.472-2.426 1.25-3.308zM11.348 11l2.078-5.637h-.739l-1.656 4.727h-.062L9.313 5.363h-.739L10.652 11h.696z"}))},v0t=m0t;var Nz={};de(Nz,{icon:()=>O0t});var Smr=V(ne());var g0t=["title","titleId"];function kie(){return kie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w0t=function(t){var n=t.title,r=t.titleId,o=y0t(t,g0t);return c("svg",kie({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 11.42V4.58L8 1.152 2 4.58v6.84l6 3.428 6-3.428zM8 16l7-4V4L8 0 1 4v8l7 4zM8 4.607l3 1.714V9.68l-3 1.714-3-1.714V6.32l3-1.714zm4 1.134v4.518l-4 2.286-4-2.286V5.741l4-2.286 4 2.286z"}))},O0t=w0t;var Lz={};de(Lz,{icon:()=>I0t});var Imr=V(ne());var x0t=["title","titleId"];function Pie(){return Pie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E0t=function(t){var n=t.title,r=t.titleId,o=_0t(t,x0t);return c("svg",Pie({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M14 5.151v6.269l-5.5 3.142V8.29L14 5.151zm-.508-.861L8 1.152 2.508 4.29 8 7.424l5.492-3.134zM2 5.151l5.5 3.14v6.272L2 11.42V5.15zM15 12l-7 4-7-4V4l7-4 7 4v8z"}))},I0t=E0t;var Fz={};de(Fz,{icon:()=>T0t});var Pmr=V(ne());var k0t=["title","titleId"];function jie(){return jie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C0t=function(t){var n=t.title,r=t.titleId,o=P0t(t,k0t);return c("svg",jie({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.276 1.053a.5.5 0 01.448 0l6 3a.5.5 0 010 .894l-6 3a.5.5 0 01-.448 0l-6-3a.5.5 0 010-.894l6-3zM2.618 4.5L7.5 6.941 12.382 4.5 7.5 2.059 2.618 4.5z"}),c("path",{d:"M1.053 7.276a.5.5 0 01.67-.223L7.5 9.94l5.776-2.888a.5.5 0 11.448.894l-6 3a.5.5 0 01-.448 0l-6-3a.5.5 0 01-.223-.67z"}),c("path",{d:"M1.724 10.053a.5.5 0 10-.448.894l6 3a.5.5 0 00.448 0l6-3a.5.5 0 10-.448-.894L7.5 12.94l-5.776-2.888z"}))},T0t=C0t;var Bz={};de(Bz,{icon:()=>z0t});var Cmr=V(ne());var A0t=["title","titleId"];function Cie(){return Cie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var D0t=function(t){var n=t.title,r=t.titleId,o=M0t(t,A0t);return c("svg",Cie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M5 3l3 9H7L6 9H3l-1 3H1l3-9h1zm-.5 1.5L5.667 8H3.333L4.5 4.5zm7.99 1.647C12.16 6.005 11.76 6 11.5 6c-.359 0-1.022.175-1.632.838l-.736-.676C9.929 5.294 10.859 5 11.5 5h.016c.25 0 .836 0 1.369.228.281.12.568.313.782.617.216.307.333.693.333 1.155v5h-1v-.354a2.101 2.101 0 01-.064.038c-.554.317-1.166.316-1.42.316h-.032c-.25 0-.836 0-1.368-.228a1.81 1.81 0 01-.783-.617C9.117 10.848 9 10.462 9 10c0-.462.117-.848.333-1.155.214-.304.5-.496.783-.617C10.648 8 11.233 8 11.484 8h.016c.258 0 .69-.003 1.05-.106a.889.889 0 00.364-.179c.053-.05.086-.108.086-.215V7c0-.288-.07-.465-.151-.58a.814.814 0 00-.358-.273zM13 8.8c-.06.022-.118.04-.175.057C12.32 9 11.762 9 11.513 9H11.5c-.259 0-.66.005-.99.147a.814.814 0 00-.359.274c-.08.114-.151.291-.151.579s.07.465.151.58a.813.813 0 00.358.273c.331.142.732.147.991.147.257 0 .63-.008.94-.184.255-.146.56-.463.56-1.316v-.701z"}))},z0t=D0t;var Wz={};de(Wz,{icon:()=>W0t});var Amr=V(ne());var N0t=["title","titleId"];function Tie(){return Tie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var B0t=function(t){var n=t.title,r=t.titleId,o=L0t(t,N0t);return c("svg",Tie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.707 4.707a1 1 0 11-1.414-1.414l2-2a1 1 0 111.414 1.414l-2 2zm-6.414 5a1 1 0 001.414 0l2-2a1 1 0 10-1.414-1.414l-2 2a1 1 0 000 1.414zm-5 5a1 1 0 001.414 0l2-2a1 1 0 10-1.414-1.414l-2 2a1 1 0 000 1.414z"}))},W0t=B0t;var Hz={};de(Hz,{icon:()=>U0t});var Rmr=V(ne());var H0t=["title","titleId"];function Aie(){return Aie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function V0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var q0t=function(t){var n=t.title,r=t.titleId,o=$0t(t,H0t);return c("svg",Aie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13.5 3a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM11 5.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM5.5 11a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm-4 4a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"}))},U0t=q0t;var $z={};de($z,{icon:()=>Y0t});var zmr=V(ne());var G0t=["title","titleId"];function Mie(){return Mie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X0t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K0t=function(t){var n=t.title,r=t.titleId,o=J0t(t,G0t);return c("svg",Mie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.293 14.707a1 1 0 001.414 0l12-12a1 1 0 10-1.414-1.414l-12 12a1 1 0 000 1.414z"}))},Y0t=K0t;var Vz={};de(Vz,{icon:()=>rmt});var Lmr=V(ne());var Q0t=["title","titleId"];function Rie(){return Rie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function emt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tmt=function(t){var n=t.title,r=t.titleId,o=Z0t(t,Q0t);return c("svg",Rie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.66 3.803a.5.5 0 11-.706-.707L9.268.78c1.187-1.187 3.242-1 4.596.354s1.54 3.409.354 4.596l-3.536 3.536c-1.187 1.187-3.242 1-4.596-.354a.5.5 0 11.707-.707c.99.99 2.417 1.119 3.182.354l3.536-3.536c.765-.765.635-2.193-.354-3.182-.99-.99-2.417-1.119-3.182-.354L7.661 3.803zm-.32 7.392a.5.5 0 11.707.707l-2.315 2.314c-1.187 1.188-3.242 1-4.596-.353-1.354-1.354-1.54-3.41-.353-4.596L4.318 5.73c1.187-1.187 3.242-1 4.596.354a.5.5 0 01-.707.707c-.989-.99-2.416-1.12-3.182-.354L1.49 9.974c-.766.765-.636 2.193.353 3.182.99.989 2.417 1.119 3.182.353l2.315-2.314z"}))},rmt=tmt;var qz={};de(qz,{icon:()=>smt});var Bmr=V(ne());var nmt=["title","titleId"];function Die(){return Die=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function imt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var amt=function(t){var n=t.title,r=t.titleId,o=omt(t,nmt);return c("svg",Die({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 4V3h2v1H2zm4 0V3h8v1H6zm0 3V6h8v1H6zm0 3V9h8v1H6zM2 7V6h2v1H2zm0 3V9h2v1H2zm4 3v-1h8v1H6zm-4 0v-1h2v1H2z"}))},smt=amt;var Uz={};de(Uz,{icon:()=>pmt});var Hmr=V(ne());var lmt=["title","titleId"];function zie(){return zie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fmt=function(t){var n=t.title,r=t.titleId,o=umt(t,lmt);return c("svg",zie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11 11H9v1h2v2h1v-2h2v-1h-2V9h-1v2zM7.758 9a4.5 4.5 0 11-.502 4H6v-1h1.027a4.548 4.548 0 01.23-2H6V9h1.758zM2 4V3h2v1H2zm4 0V3h8v1H6zm0 3V6h8v1H6zM2 7V6h2v1H2zm0 3V9h2v1H2zm0 3v-1h2v1H2z"}))},pmt=fmt;var Gz={};de(Gz,{icon:()=>gmt});var Vmr=V(ne());var dmt=["title","titleId"];function Nie(){return Nie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vmt=function(t){var n=t.title,r=t.titleId,o=hmt(t,dmt);return c("svg",Nie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 5v-.8C4 1.88 5.79 0 8 0s4 1.88 4 4.2V5h1.143c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H2.857C2.384 16 2 15.552 2 15V6c0-.552.384-1 .857-1H4zM3 15h10V6H3v9zm5.998-3.706L9.5 12.5h-3l.502-1.206A1.644 1.644 0 016.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194zM11 4.36C11 2.504 9.657 1 8 1S5 2.504 5 4.36V5h6v-.64z"}))},gmt=vmt;var Jz={};de(Jz,{icon:()=>xmt});var Umr=V(ne());var ymt=["title","titleId"];function Lie(){return Lie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Omt=function(t){var n=t.title,r=t.titleId,o=bmt(t,ymt);return c("svg",Lie({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.143 5c.473 0 .857.448.857 1v9c0 .552-.384 1-.857 1H.857C.384 16 0 15.552 0 15V6c0-.552.384-1 .857-1H8v-.8C8 1.88 9.79 0 12 0s4 1.88 4 4.2V5h-1v-.64C15 2.504 13.657 1 12 1S9 2.504 9 4.36V5h2.143zM1 15h10V6H1v9zm5.998-3.706L7.5 12.5h-3l.502-1.206A1.644 1.644 0 014.5 10.1c0-.883.672-1.6 1.5-1.6s1.5.717 1.5 1.6c0 .475-.194.901-.502 1.194z"}))},xmt=Omt;var Xz={};de(Xz,{icon:()=>kmt});var Jmr=V(ne());var _mt=["title","titleId"];function Fie(){return Fie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Emt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Imt=function(t){var n=t.title,r=t.titleId,o=Smt(t,_mt);return c("svg",Fie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#C4373A",d:"M0 31.806h32V.776H0z"}),c("path",{fill:"#FFF",d:"M19.448 12.508l-8.986 3.86 8.986 3.883v-7.743zm-11.304 4.73l-2.094-.863 2.094-.931 17.749-7.741v2.062l-4.654 1.99v9.25l4.654 2.01v1.968L8.143 17.24z"})))},kmt=Imt;var Kz={};de(Kz,{icon:()=>Amt});var Kmr=V(ne());var Pmt=["title","titleId"];function Bie(){return Bie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tmt=function(t){var n=t.title,r=t.titleId,o=jmt(t,Pmt),i=yo("logo_apache");return c("svg",Bie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("defs",null,c("linearGradient",{id:i("a"),x1:"21.902%",x2:"141.879%",y1:"63.905%",y2:"20.213%"},c("stop",{offset:"0%",stopColor:"#F69923"}),c("stop",{offset:"31.23%",stopColor:"#F79A23"}),c("stop",{offset:"83.83%",stopColor:"#E97826"})),c("linearGradient",{id:i("b"),x1:"-217.651%",x2:"74.743%",y1:"177.127%",y2:"36.665%"},c("stop",{offset:"32.33%",stopColor:"#9E2064"}),c("stop",{offset:"63.02%",stopColor:"#C92037"}),c("stop",{offset:"75.14%",stopColor:"#CD2335"}),c("stop",{offset:"100%",stopColor:"#E97826"})),c("linearGradient",{id:i("c"),x1:"-80.044%",x2:"146.24%",y1:"73.574%",y2:"31.539%"},c("stop",{offset:"32.33%",stopColor:"#9E2064"}),c("stop",{offset:"63.02%",stopColor:"#C92037"}),c("stop",{offset:"75.14%",stopColor:"#CD2335"}),c("stop",{offset:"100%",stopColor:"#E97826"})),c("linearGradient",{id:i("d"),x1:"-18.316%",x2:"165.002%",y1:"52.497%",y2:"41.656%"},c("stop",{offset:"0%",stopColor:"#282662"}),c("stop",{offset:"9.548%",stopColor:"#662E8D"}),c("stop",{offset:"78.82%",stopColor:"#9F2064"}),c("stop",{offset:"94.87%",stopColor:"#CD2032"})),c("linearGradient",{id:i("e"),x1:"-109.701%",x2:"64.617%",y1:"463.715%",y2:"17.19%"},c("stop",{offset:"32.33%",stopColor:"#9E2064"}),c("stop",{offset:"63.02%",stopColor:"#C92037"}),c("stop",{offset:"75.14%",stopColor:"#CD2335"}),c("stop",{offset:"100%",stopColor:"#E97826"})),c("linearGradient",{id:i("f"),x1:"-34.88%",x2:"110.599%",y1:"130.522%",y2:"-9.118%"},c("stop",{offset:"32.33%",stopColor:"#9E2064"}),c("stop",{offset:"63.02%",stopColor:"#C92037"}),c("stop",{offset:"75.14%",stopColor:"#CD2335"}),c("stop",{offset:"100%",stopColor:"#E97826"})),c("linearGradient",{id:i("g"),x1:"-13.673%",x2:"117.858%",y1:"192.564%",y2:"-136.906%"},c("stop",{offset:"0%",stopColor:"#282662"}),c("stop",{offset:"9.548%",stopColor:"#662E8D"}),c("stop",{offset:"78.82%",stopColor:"#9F2064"}),c("stop",{offset:"94.87%",stopColor:"#CD2032"}))),c("g",{fill:"none"},c("path",{fill:"url(#".concat(i("a"),")"),d:"M13.628.18c-.498.293-1.332 1.134-2.328 2.348v.074l.871 1.613.044.03c.641-.914 1.289-1.742 1.948-2.446.05-.056.075-.08.075-.08-.025.024-.05.055-.075.08-.211.237-.859.984-1.83 2.478l.112.025s2.273-.224 3.368-.41l.062-.057c.35-1.955-.342-2.851-.342-2.851S14.661-.423 13.628.18z",transform:"translate(8)"}),c("path",{fill:"url(#".concat(i("b"),")"),d:"M9.525 8.697c.28-.516.56-1.027.84-1.519.293-.51.592-1.008.897-1.488a.397.397 0 00.05-.087c.299-.473.598-.921.903-1.357L11.3 2.52c-.069.081-.137.168-.206.256-.261.33-.535.678-.815 1.052a51.783 51.783 0 00-1.893 2.708c-.261.405-.53.816-.79 1.245l-.032.05V7.9l1.14 2.26.05.019c.255-.498.51-.996.771-1.482z",transform:"translate(8)"}),c("path",{fill:"url(#".concat(i("c"),")"),d:"M4.563 19.76c.206-.535.424-1.077.642-1.625.211-.523.423-1.052.647-1.58.218-.53.448-1.06.679-1.595.236-.541.473-1.083.716-1.618.242-.53.485-1.059.734-1.582.087-.186.18-.38.274-.566.156-.324.318-.648.473-.965.007-.019.02-.031.025-.05L7.564 7.832l-.056.093c-.274.455-.554.915-.822 1.389a54.535 54.535 0 00-1.45 2.714c-.044.087-.081.168-.125.255a32.15 32.15 0 00-.703 1.544c-.237.56-.448 1.096-.635 1.606-.125.337-.23.654-.336.965-.081.262-.162.53-.237.791-.18.623-.33 1.239-.454 1.862l.018.074 1.14 2.266.037.02c.155-.424.317-.848.485-1.283.044-.125.094-.243.137-.368z",transform:"translate(8)"}),c("path",{fill:"url(#".concat(i("d"),")"),d:"M2.733 19.132a18.84 18.84 0 00-.311 2.253c0 .025-.006.05-.006.081-.374-.598-1.37-1.177-1.37-1.177.716 1.034 1.258 2.061 1.338 3.07-.38.08-.902-.038-1.512-.255.628.578 1.102.74 1.288.784-.579.037-1.183.436-1.793.89.89-.36 1.607-.504 2.123-.392-.815 2.31-1.63 4.862-2.453 7.564.25-.075.399-.243.486-.473.143-.492 1.114-3.704 2.627-7.931.044-.119.087-.243.13-.362.013-.03.026-.068.038-.1.162-.441.324-.896.498-1.356.038-.106.081-.212.119-.318v-.006l-1.19-2.353c0 .03-.006.056-.012.08z",transform:"translate(8)"}),c("path",{fill:"url(#".concat(i("e"),")"),d:"M12.333 4.283c-.268.411-.56.878-.878 1.407-.018.025-.03.056-.05.081a62.538 62.538 0 00-1.687 3.05c-.249.48-.504.984-.765 1.526l.056.025 2.895-.311.068-.05c.878-.405 1.27-.772 1.65-1.301.1-.143.205-.3.305-.455.311-.485.616-1.015.884-1.544.261-.51.492-1.02.672-1.475a6.56 6.56 0 00.398-1.395c-1.17.206-2.608.399-3.548.442z",transform:"translate(8)"}),c("path",{fill:"url(#".concat(i("f"),")"),d:"M8.84 10.59c-.1.212-.205.43-.31.647-.113.237-.231.486-.343.735-.056.124-.119.255-.175.38-.18.386-.354.784-.541 1.195a107.035 107.035 0 00-1.357 3.194c-.218.529-.436 1.077-.654 1.637-.2.504-.399 1.015-.598 1.55-.012.025-.018.05-.03.075-.2.53-.394 1.068-.6 1.622-.006.012-.017.045-.023.057l.043.01.866-.094.048-.02c-.018-.006-.03-.03-.048-.037 1.145-.143 2.67-1.002 3.66-2.06.455-.486.866-1.065 1.252-1.738.286-.504.547-1.058.803-1.675.224-.535.435-1.12.64-1.749a3.457 3.457 0 01-.896.311 8.977 8.977 0 01-.18.038c-.062.012-.125.018-.18.03 1.07-.41 1.743-1.207 2.234-2.178-.28.193-.74.442-1.288.566a2.52 2.52 0 01-.23.044c-.02 0-.038.006-.057.006.374-.155.685-.33.959-.535.056-.044.112-.087.168-.137.081-.075.162-.15.237-.224.05-.05.093-.1.143-.156.106-.124.205-.261.299-.41.03-.044.056-.094.087-.138.037-.068.068-.137.1-.205.149-.3.267-.567.36-.803.05-.119.088-.224.125-.33.013-.038.025-.081.044-.119.037-.112.068-.211.093-.305.037-.13.056-.236.069-.311a1.077 1.077 0 01-.125.087c-.324.193-.878.368-1.326.448l.884-.1-.884.1c-.062.013-.106.02-.156.032.004-.005-.994.101-2.995.316a2.313 2.313 0 00-.118.244z",transform:"translate(8)"}),c("path",{fill:"url(#".concat(i("g"),")"),d:"M4.115 21.914c-.155.43-.317.872-.473 1.32 0 .006-.006.013-.006.019-.025.062-.044.124-.069.193-.106.305-.199.573-.41 1.195.348.162.628.58.896 1.059a1.876 1.876 0 00-.623-1.314c1.725.075 3.213-.361 3.979-1.619.068-.112.13-.23.186-.355-.348.442-.784.63-1.593.586h-.007.007c1.201-.536 1.799-1.052 2.334-1.905.125-.206.25-.424.374-.667-1.052 1.078-2.266 1.383-3.543 1.152l-.958.106c-.032.069-.063.15-.094.23z",transform:"translate(8)"})))},Amt=Tmt;var Yz={};de(Yz,{icon:()=>Nmt});var Zmr=V(ne());var Mmt=["title","titleId"];function Wie(){return Wie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zmt=function(t){var n=t.title,r=t.titleId,o=Rmt(t,Mmt);return c("svg",Wie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#0080D5",d:"M19.5.938a7.002 7.002 0 00-7 0l-8 4.619A7 7 0 001 11.62v9.237a7 7 0 003.5 6.062l7.5 4.33V17.979a7 7 0 013.5-6.062L27 5.276 19.5.939z"}),c("path",{className:"euiIcon__fillNegative",d:"M19.5.938a7.002 7.002 0 00-7 0L5 5.277l11 6.35 11-6.35-7.5-4.34z"}),c("path",{fill:"#FA744E",d:"M28.435 7.76l-10.026 5.79a6.994 6.994 0 011.59 4.428v13.27l7.5-4.33a7 7 0 003.5-6.061v-9.238a6.992 6.992 0 00-1.586-4.422l-.978.564z"}))},Nmt=zmt;var Qz={};de(Qz,{icon:()=>Hmt});var t1r=V(ne());var Lmt=["title","titleId"];function Hie(){return Hie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wmt=function(t){var n=t.title,r=t.titleId,o=Fmt(t,Lmt);return c("svg",Hie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{className:"euiIcon__fillNegative",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 01.075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 01-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 01-.383-.494 8.109 8.109 0 01-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 01-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 01.298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 011.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 001.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 00-.98-.179 8.113 8.113 0 00-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915zm13.675.284a7.122 7.122 0 01-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 01-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 01.192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 00.554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 01-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 011.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 01.32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 01-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22z"}),c("g",{fill:"#F90"},c("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799z"}),c("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944z"}))))},Hmt=Wmt;var Zz={};de(Zz,{icon:()=>Gmt});var n1r=V(ne());var $mt=["title","titleId"];function $ie(){return $ie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Umt=function(t){var n=t.title,r=t.titleId,o=Vmt(t,$mt);return c("svg",$ie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fillRule:"evenodd"},c("path",{fillRule:"nonzero",d:"M9.019 13.878c0 .39.042.705.117.936.085.232.191.484.34.758a.454.454 0 01.075.242c0 .105-.064.21-.202.315l-.67.442a.514.514 0 01-.277.095c-.107 0-.213-.053-.32-.148a3.258 3.258 0 01-.383-.494 8.109 8.109 0 01-.33-.62c-.83.967-1.873 1.45-3.128 1.45-.894 0-1.607-.252-2.129-.756-.521-.505-.787-1.178-.787-2.02 0-.894.319-1.62.968-2.166.65-.547 1.511-.82 2.607-.82.362 0 .735.03 1.128.083.394.053.799.137 1.224.232v-.768c0-.8-.17-1.357-.5-1.683-.34-.326-.915-.484-1.735-.484-.372 0-.755.043-1.149.137-.394.095-.777.21-1.15.358-.17.073-.297.115-.372.136a.66.66 0 01-.17.032c-.149 0-.223-.105-.223-.326v-.515c0-.169.02-.295.074-.368a.796.796 0 01.298-.221c.373-.19.82-.347 1.34-.474a6.524 6.524 0 011.661-.2c1.266 0 2.192.285 2.788.852.586.568.884 1.43.884 2.588v3.407h.02zm-4.32 1.6c.35 0 .712-.064 1.095-.19a2.373 2.373 0 001.011-.673c.17-.2.298-.421.362-.673.064-.253.107-.558.107-.916v-.441a8.982 8.982 0 00-.98-.179 8.113 8.113 0 00-1-.063c-.713 0-1.234.137-1.586.42-.35.285-.521.684-.521 1.21 0 .494.128.862.394 1.115.255.263.628.39 1.117.39zm8.545 1.135c-.192 0-.32-.032-.405-.105-.085-.063-.16-.21-.223-.41l-2.501-8.13c-.064-.21-.096-.347-.096-.421 0-.168.085-.263.256-.263h1.043c.202 0 .34.032.415.105.085.063.149.21.212.41l1.788 6.963 1.66-6.963c.054-.21.117-.347.203-.41.085-.063.234-.105.425-.105h.852c.202 0 .34.032.425.105.085.063.16.21.203.41l1.681 7.047 1.841-7.047c.064-.21.138-.347.213-.41.085-.063.223-.105.415-.105h.99c.17 0 .266.084.266.263 0 .052-.011.105-.022.168-.01.063-.032.147-.074.263l-2.565 8.13c-.064.21-.138.347-.223.41-.085.063-.224.105-.405.105h-.915c-.202 0-.34-.031-.426-.105-.085-.073-.16-.21-.202-.42l-1.65-6.784-1.638 6.773c-.053.21-.117.347-.202.42-.086.074-.235.106-.426.106h-.915zm13.675.284a7.122 7.122 0 01-1.64-.19c-.531-.126-.946-.262-1.223-.42-.17-.095-.287-.2-.33-.295a.735.735 0 01-.064-.294v-.536c0-.221.085-.327.245-.327a.61.61 0 01.192.032c.063.021.16.063.266.105.361.158.755.284 1.17.368.426.084.84.127 1.267.127.67 0 1.192-.116 1.553-.348a1.13 1.13 0 00.554-.999c0-.294-.096-.536-.288-.736-.191-.2-.553-.379-1.074-.547l-1.544-.473c-.776-.242-1.351-.6-1.702-1.073a2.487 2.487 0 01-.532-1.525c0-.442.095-.83.287-1.167.192-.337.447-.631.766-.863.32-.242.681-.42 1.107-.547a4.69 4.69 0 011.34-.178c.235 0 .48.01.714.042.245.031.468.073.692.115.212.053.415.105.606.169.192.063.34.126.447.189a.918.918 0 01.32.263c.063.084.095.2.095.347v.494c0 .221-.085.337-.245.337-.085 0-.223-.042-.404-.126-.607-.274-1.288-.41-2.043-.41-.607 0-1.086.094-1.416.294-.33.2-.5.505-.5.936 0 .294.107.547.32.747.212.2.606.4 1.17.578l1.511.473c.766.242 1.32.579 1.65 1.01.33.431.49.926.49 1.473 0 .452-.096.862-.277 1.22a2.836 2.836 0 01-.777.925c-.33.263-.724.452-1.182.59-.478.146-.979.22-1.521.22z"}),c("path",{d:"M28.93 22.009c-3.501 2.556-8.588 3.912-12.962 3.912-6.13 0-11.653-2.24-15.825-5.963-.33-.295-.032-.694.362-.463 4.512 2.587 10.078 4.155 15.836 4.155 3.884 0 8.151-.8 12.078-2.44.586-.263 1.086.378.511.799z"}),c("path",{d:"M30.388 20.368c-.447-.568-2.958-.273-4.097-.137-.34.042-.394-.252-.085-.473 2-1.388 5.289-.989 5.672-.526.383.474-.107 3.723-1.98 5.28-.287.242-.564.116-.436-.2.426-1.041 1.373-3.386.926-3.944z"})))},Gmt=Umt;var eN={};de(eN,{icon:()=>Qmt});var i1r=V(ne());var Jmt=["title","titleId"];function Vie(){return Vie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kmt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ymt=function(t){var n=t.title,r=t.titleId,o=Xmt(t,Jmt);return c("svg",Vie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#0072C6",d:"M17.448 4l-9.414 8.01L0 26.157h7.243L17.448 4zM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874z"}))},Qmt=Ymt;var tN={};de(tN,{icon:()=>n1t});var s1r=V(ne());var Zmt=["title","titleId"];function qie(){return qie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r1t=function(t){var n=t.title,r=t.titleId,o=e1t(t,Zmt);return c("svg",qie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M17.448 4l-9.414 8.01L0 26.157h7.243L17.448 4zM18.7 5.874l-4.018 11.11 7.704 9.497L7.441 29h24.494L18.7 5.874z"}))},n1t=r1t;var rN={};de(rN,{icon:()=>l1t});var u1r=V(ne());var o1t=["title","titleId"];function Uie(){return Uie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var s1t=function(t){var n=t.title,r=t.titleId,o=i1t(t,o1t);return c("svg",Uie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#0080D5",d:"M15 20H4V0h11c5.522 0 10 4.478 10 10s-4.478 10-10 10"}),c("path",{fill:"#00C2B3",d:"M26.702 15.624C24.6 19.979 20.152 23 15 23H4v9h15c5.522 0 10-4.478 10-10a9.952 9.952 0 00-2.298-6.376"}),c("path",{className:"euiIcon__fillNegative",d:"M24.338 13.554A9.942 9.942 0 0019 12H4v8h11c4.27 0 7.903-2.68 9.338-6.446"}))},l1t=s1t;var nN={};de(nN,{icon:()=>d1t});var f1r=V(ne());var u1t=["title","titleId"];function Gie(){return Gie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function f1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var p1t=function(t){var n=t.title,r=t.titleId,o=c1t(t,u1t);return c("svg",Gie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#00BFB3",d:"M0 22c0 5.522 4.478 10 10 10V12C4.478 12 0 16.478 0 22"}),c("path",{className:"euiIcon__fillNegative",d:"M10 12v10h10c0-5.522-4.478-10-10-10"}),c("path",{fill:"#F04E98",d:"M10 0v9c7.168 0 13 5.832 13 13h9C32 9.85 22.15 0 10 0"})))},d1t=p1t;var oN={};de(oN,{icon:()=>y1t});var d1r=V(ne());var h1t=["title","titleId"];function Jie(){return Jie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function v1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var g1t=function(t){var n=t.title,r=t.titleId,o=m1t(t,h1t);return c("svg",Jie({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M25.471 27.56c-1.06-.567-1.676-1.206-1.811-1.902-.13-.673.17-1.421.918-2.288a11.29 11.29 0 002.773-7.42A11.324 11.324 0 0016.042 4.64l-.05.001h-.05A11.324 11.324 0 004.632 15.949a11.291 11.291 0 002.774 7.422c.753.872 1.047 1.591.928 2.257-.13.694-.74 1.342-1.817 1.93-1.657-1.375-3.116-3.212-4.01-5.056a14.943 14.943 0 01-1.117-3.139A14.997 14.997 0 011 15.95a14.901 14.901 0 014.378-10.57 14.924 14.924 0 014.752-3.204C11.97 1.395 13.95.996 15.948 1h.101a14.888 14.888 0 0110.57 4.378 14.912 14.912 0 013.982 13.985 14.871 14.871 0 01-1.118 3.14c-.9 1.843-2.358 3.681-4.01 5.057h-.003zm-5.523 2.798c-.173-.11-.767-.55-1.345-1.353a6.122 6.122 0 01-1.174-3.738 8.26 8.26 0 01.611-2.964 8.42 8.42 0 011.627-2.54l.004-.008.154-.178c.263-.305.536-.622.753-.99.268-.454.462-.931.578-1.42.178-.758.188-1.547.029-2.31a5.3 5.3 0 00-.858-1.956 5.264 5.264 0 00-4.29-2.217h-.108a5.25 5.25 0 00-4.29 2.216 5.31 5.31 0 00-.856 1.956c-.16.763-.15 1.552.03 2.311.115.488.31.965.576 1.419.219.37.49.684.753.99l.155.179.003.007a8.384 8.384 0 011.628 2.54 8.24 8.24 0 01.61 2.964 6.123 6.123 0 01-1.173 3.738c-.58.795-1.174 1.243-1.346 1.352l-.867-.26a15.434 15.434 0 01-2.49-1.098 4.245 4.245 0 002.234-3.736c0-1.034-.403-2.028-1.195-2.95l-.034-.034-.237-.26-.636-.746a8.924 8.924 0 01-1.525-3.26 8.983 8.983 0 01-.05-3.905 8.906 8.906 0 011.46-3.313A8.993 8.993 0 0111.23 8.39a8.937 8.937 0 014.702-1.344h.112c.42 0 .84.029 1.255.088a8.938 8.938 0 013.448 1.256 9.003 9.003 0 012.554 2.404 9.093 9.093 0 011.459 3.313 9.043 9.043 0 01-.05 3.912 8.925 8.925 0 01-1.526 3.26c-.2.265-.409.495-.637.745l-.23.254c-.017.016-.03.027-.04.043-.804.961-1.195 1.927-1.195 2.948a4.25 4.25 0 002.237 3.735c-.795.441-1.63.809-2.491 1.098l-.862.26-.018-.004zm-3.956-11.314a2.957 2.957 0 01-2.952-2.952 2.957 2.957 0 012.952-2.952 2.956 2.956 0 012.95 2.952 2.957 2.957 0 01-2.95 2.952",fill:"#F05C56"}))},y1t=g1t;var iN={};de(iN,{icon:()=>_1t});var m1r=V(ne());var b1t=["title","titleId"];function Xie(){return Xie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x1t=function(t){var n=t.title,r=t.titleId,o=w1t(t,b1t);return c("svg",Xie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{className:"euiIcon__fillNegative",d:"M12.37 18.352c.032-.01.066-.014.1-.023A6 6 0 0118 10V0C9.163 0 2 7.164 2 16c0 2.793.72 5.417 1.976 7.702a18.947 18.947 0 018.393-5.349"}),c("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 005.717 5.75a16.006 16.006 0 007.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0118 10a5.94 5.94 0 012.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 007.541-5.032A15.959 15.959 0 0018 0"}),c("path",{fill:"#00BFB3",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0118 22a5.94 5.94 0 01-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 00-7.54 5.032A15.959 15.959 0 0018 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 00-7.54-5.032"})))},_1t=x1t;var aN={};de(aN,{icon:()=>P1t});var g1r=V(ne());var S1t=["title","titleId"];function Kie(){return Kie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function I1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k1t=function(t){var n=t.title,r=t.titleId,o=E1t(t,S1t);return c("svg",Kie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillNegative",d:"M18 0v10a6 6 0 00-5.53 8.33c-.034.009-.068.012-.1.023A18.947 18.947 0 003.975 23.7 15.934 15.934 0 012 16C2 7.164 9.163 0 18 0zm0 13a3 3 0 110 6 3 3 0 010-6z"}),c("path",{fill:"#00AEFA",d:"M22.742 21.218c-.71-.22-1.478-.135-2.146.188A5.947 5.947 0 0118 22a5.94 5.94 0 01-2.596-.594c-.669-.323-1.436-.408-2.146-.188a16.006 16.006 0 00-7.54 5.032A15.959 15.959 0 0018 32c4.936 0 9.348-2.236 12.283-5.75a16.016 16.016 0 00-7.54-5.032"}),c("path",{fill:"#0080D5",d:"M18 0A15.959 15.959 0 005.717 5.75a16.006 16.006 0 007.541 5.032c.71.22 1.477.135 2.146-.188A5.94 5.94 0 0118 10a5.94 5.94 0 012.596.594c.669.323 1.436.408 2.146.188a16.01 16.01 0 007.541-5.032A15.959 15.959 0 0018 0"}))},P1t=k1t;var sN={};de(sN,{icon:()=>M1t});var b1r=V(ne());var j1t=["title","titleId"];function Yie(){return Yie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function T1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var A1t=function(t){var n=t.title,r=t.titleId,o=C1t(t,j1t);return c("svg",Yie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillNegative",d:"M9.75 12L16 32h10l-3.4-10.88A13 13 0 0010.19 12h-.44z"}),c("path",{fill:"#22A7F3",d:"M25.725 11.93A17 17 0 009.5 0H6l3.75 12h.44a13 13 0 0112.41 9.12L26 32h6l-6.275-20.07z"}),c("path",{fill:"#0377CA",d:"M7.91 16.175L0 32h12.855z"}))},M1t=A1t;var lN={};de(lN,{icon:()=>L1t});var O1r=V(ne());var R1t=["title","titleId"];function Qie(){return Qie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function z1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var N1t=function(t){var n=t.title,r=t.titleId,o=D1t(t,R1t);return c("svg",Qie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14.738 28.044V16.681L3.172 10.919v6.46l5.32 2.67v4.889l6.246 3.106zm2.344.066l6.357-3.17v-5.002l5.353-2.686V10.87l-11.71 5.854V28.11zM27.306 8.993l-6.003-3.012-5.286 2.656-5.325-2.659L4.637 9.03l11.317 5.638 11.352-5.675zM.828 23.744V8.324L15.981.689l15.155 7.604V23.72L15.98 31.28.828 23.743z"}))},L1t=N1t;var uN={};de(uN,{icon:()=>$1t});var _1r=V(ne());var F1t=["title","titleId"];function Zie(){return Zie=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function W1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H1t=function(t){var n=t.title,r=t.titleId,o=B1t(t,F1t);return c("svg",Zie({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#ED2226",d:"M16.072.024C7.29.024.144 7.146.144 15.952c0 8.782 7.122 15.928 15.928 15.928C24.854 31.88 32 24.758 32 15.952 32 7.146 24.854.024 16.072.024zm10.755 18.719c0 .962-.553 1.804-1.636 1.997-1.877.336-5.823.53-9.119.53-3.296 0-7.242-.194-9.119-.53-1.082-.193-1.636-1.035-1.636-1.997v-6.208c0-.962.746-1.852 1.636-1.997.554-.096 1.853-.192 2.864-.192.385 0 .697.289.697.746v4.355l5.582-.12 5.582.12v-4.355c0-.457.313-.746.698-.746 1.01 0 2.31.096 2.863.192.914.145 1.636 1.035 1.636 1.997-.048 2.045-.048 4.139-.048 6.208z"}))},$1t=H1t;var cN={};de(cN,{icon:()=>J1t});var E1r=V(ne());var V1t=["title","titleId"];function eae(){return eae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var G1t=function(t){var n=t.title,r=t.titleId,o=q1t(t,V1t);return c("svg",eae({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M18.099 15.108h3.304v-2.973H18.1v2.973zm-3.905 0h3.304v-2.973h-3.304v2.973zm-3.905 0h3.304v-2.973H10.29v2.973zm-3.905 0H9.69v-2.973H6.384v2.973zm-3.904 0h3.304v-2.973H2.48v2.973zm3.904-3.568H9.69V8.568H6.384v2.972zm3.905 0h3.304V8.568H10.29v2.972zm3.905 0h3.304V8.568h-3.304v2.972zm0-3.567h3.304V5h-3.304v2.973zm17.139 5.402c-.722-.478-2.38-.653-3.656-.415-.164-1.19-.834-2.221-2.052-3.153l-.7-.463-.468.694c-.598.893-.897 2.13-.8 3.317.045.418.183 1.164.617 1.82-.433.231-1.29.549-2.42.528H.124l-.043.247c-.204 1.193-.2 4.914 2.24 7.774C4.178 25.898 6.96 27 10.59 27c7.87 0 13.693-3.586 16.42-10.104 1.073.02 3.381.006 4.567-2.237.031-.051.102-.186.31-.61l.113-.234-.667-.44z",fill:"#136EA3",fillRule:"evenodd"}))},J1t=G1t;var fN={};de(fN,{icon:()=>Z1t});var k1r=V(ne());var X1t=["title","titleId"];function tae(){return tae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y1t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q1t=function(t){var n=t.title,r=t.titleId,o=K1t(t,X1t),i=yo("logo_dropwizard");return c("svg",tae({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 29.61s9.55 4.74 16.856-.893c-1.905-5.114-5.25-19.867-7.226-26.383-.422-1.389-.49-1.527-.663-1.909-.964-2.134-1.978 4.142-3.628 10.459C12.749 13.148 8 29.61 8 29.61",fill:"url(#".concat(i("a"),")")}),c("path",{d:"M9.926 28.563s8.17 4.794 14.93.154c-.18-.807-.642-2.103-.955-3.311-1.664-6.416-4.676-17.248-6.144-22.626-1.59-5.822-2.105.986-3.961 8.23-.564 2.204-3.87 17.553-3.87 17.553",fill:"url(#".concat(i("b"),")")}),c("path",{d:"M12.14 24.41l.85-1.466.793 1.544-.908 1.99-.735-2.069zm6.934-5.545l.85-1.465.793 1.543-.908 1.99-.735-2.068zm-4.747-5.851l.85-1.465.792 1.543-.908 1.99-.734-2.068",fill:"#F9A72B"}),c("path",{d:"M12.14 24.41l.85-1.716.793 1.794-.907 1.468-.736-1.546zm6.934-5.545l.851-1.716.792 1.794-.906 1.468-.737-1.546zm-4.747-5.851l.85-1.716.792 1.794-.906 1.468-.736-1.546",fill:"#FFF200"}),c("path",{d:"M12.987 28.422s6.082 1.015 10.086-1.549c-.502 1.55-4.991 3.314-10.086 1.55",fill:"#24265D"}),c("defs",null,c("linearGradient",{id:i("a"),x1:33.473,y1:7.674,x2:7.751,y2:21.331,gradientUnits:"userSpaceOnUse"},c("stop",{stopColor:"#3871C1"}),c("stop",{offset:.515,stopColor:"#2C3792"}),c("stop",{offset:.865,stopColor:"#24265D"}),c("stop",{offset:1,stopColor:"#252761"})),c("linearGradient",{id:i("b"),x1:21.028,y1:14.928,x2:6.017,y2:18.844,gradientUnits:"userSpaceOnUse"},c("stop",{stopColor:"#3871C1"}),c("stop",{offset:.515,stopColor:"#2C3792"}),c("stop",{offset:.865,stopColor:"#24265D"}),c("stop",{offset:1,stopColor:"#252761"}))))},Z1t=Q1t;var pN={};de(pN,{icon:()=>ovt});var C1r=V(ne());var evt=["title","titleId"];function rae(){return rae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nvt=function(t){var n=t.title,r=t.titleId,o=tvt(t,evt);return c("svg",rae({"data-type":"logoElastic",xmlns:"http://www.w3.org/2000/svg",width:32,height:32,fill:"none",viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"outline",fillRule:"evenodd",clipRule:"evenodd",d:"M30.86 13.129A6.333 6.333 0 0132 16.77a6.419 6.419 0 01-1.162 3.652 6.382 6.382 0 01-3.032 2.331 4.833 4.833 0 01-1.672 5.542 4.789 4.789 0 01-5.77-.074 9.016 9.016 0 01-4.5 3.322 8.982 8.982 0 01-5.587.023 9.014 9.014 0 01-4.526-3.287 9.067 9.067 0 01-1.727-5.333c0-.579.053-1.156.16-1.725A6.305 6.305 0 011.145 18.9 6.341 6.341 0 010 15.242a6.42 6.42 0 011.163-3.652 6.384 6.384 0 013.035-2.33 4.833 4.833 0 011.658-5.557 4.789 4.789 0 015.78.07 9.037 9.037 0 014.93-3.446 9.007 9.007 0 015.994.419 9.05 9.05 0 014.407 4.098 9.097 9.097 0 01.873 5.965 6.298 6.298 0 013.02 2.32zm-18.28.658l7.002 3.211 7.066-6.213a7.85 7.85 0 00.152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 00-4.02-2.869 7.87 7.87 0 00-4.932.086 7.9 7.9 0 00-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001zm-7.247 7.441A7.964 7.964 0 006.72 27.53a7.918 7.918 0 004.04 2.874 7.89 7.89 0 004.95-.097 7.92 7.92 0 003.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001zm4.755-11.024l-4.8-1.137.002-.002a3.82 3.82 0 011.312-4.358 3.785 3.785 0 014.538.023l-1.052 5.474zm-5.216.01a5.294 5.294 0 00-2.595 1.882 5.324 5.324 0 00-.142 6.124 5.287 5.287 0 002.505 2l6.733-6.101-1.235-2.65-5.266-1.255zm18.286 17.848a3.737 3.737 0 01-2.285-.785l1.037-5.454 4.8 1.125a3.812 3.812 0 01-1.801 4.68c-.54.283-1.14.432-1.751.434zm-1.31-7.499l5.28 1.238a5.34 5.34 0 002.622-1.938 5.37 5.37 0 001.013-3.106 5.311 5.311 0 00-.936-3.01 5.282 5.282 0 00-2.475-1.944l-6.904 6.07 1.4 2.69z",fill:"#fff"}),c("path",{d:"M12.58 13.787l7.002 3.211 7.066-6.213a7.849 7.849 0 00.152-1.557c0-1.692-.539-3.34-1.54-4.704a7.897 7.897 0 00-4.02-2.869 7.87 7.87 0 00-4.932.086 7.9 7.9 0 00-3.92 3.007l-1.174 6.118 1.367 2.92-.001.001z",fill:"#FEC514"}),c("path",{d:"M5.333 21.228A7.964 7.964 0 006.72 27.53a7.918 7.918 0 004.04 2.874 7.89 7.89 0 004.95-.097 7.92 7.92 0 003.926-3.03l1.166-6.102-1.555-2.985-7.03-3.211-6.885 6.248.001.001z",fill:"#00BFB3"}),c("path",{d:"M5.288 9.067l4.8 1.137L11.14 4.73a3.785 3.785 0 00-5.914 1.94 3.82 3.82 0 00.064 2.395",fill:"#F04E98"}),c("path",{d:"M4.872 10.214a5.294 5.294 0 00-2.595 1.882 5.324 5.324 0 00-.142 6.124 5.287 5.287 0 002.505 2l6.733-6.101-1.235-2.65-5.266-1.255z",fill:"#1BA9F5"}),c("path",{d:"M20.873 27.277a3.736 3.736 0 002.285.785 3.783 3.783 0 003.101-1.63 3.812 3.812 0 00.451-3.484l-4.8-1.125-1.037 5.454z",fill:"#93C90E"}),c("path",{d:"M21.848 20.563l5.28 1.238a5.34 5.34 0 002.622-1.938 5.37 5.37 0 001.013-3.106 5.312 5.312 0 00-.936-3.01 5.283 5.283 0 00-2.475-1.944l-6.904 6.07 1.4 2.69z",fill:"#07C"}))},ovt=nvt;var dN={};de(dN,{icon:()=>uvt});var A1r=V(ne());var ivt=["title","titleId"];function nae(){return nae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function svt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lvt=function(t){var n=t.title,r=t.titleId,o=avt(t,ivt);return c("svg",nae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#F04E98",d:"M32 9V2.5A2.5 2.5 0 0029.5 0h-27A2.5 2.5 0 000 2.5V9h32z"}),c("path",{fill:"#00BFB3",d:"M0 20h32v-8H0z"}),c("path",{fill:"#0080D5",d:"M14.5 23H0v6.5A2.5 2.5 0 002.5 32h12v-9z"}),c("path",{fill:"#FEC514",d:"M17.5 23v9h12a2.5 2.5 0 002.5-2.5V23H17.5z"})))},uvt=lvt;var hN={};de(hN,{icon:()=>hvt});var R1r=V(ne());var cvt=["title","titleId"];function oae(){return oae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dvt=function(t){var n=t.title,r=t.titleId,o=fvt(t,cvt);return c("svg",oae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{className:"euiIcon__fillNegative",d:"M2 16c0 1.384.194 2.72.524 4H22a4 4 0 000-8H2.524A15.984 15.984 0 002 16"}),c("path",{fill:"#FEC514",d:"M28.924 7.662A15.381 15.381 0 0030.48 6C27.547 2.346 23.05 0 18 0 11.679 0 6.239 3.678 3.644 9H25.51a5.039 5.039 0 003.413-1.338"}),c("path",{fill:"#00BFB3",d:"M25.51 23H3.645C6.24 28.323 11.679 32 18 32c5.05 0 9.547-2.346 12.48-6a15.381 15.381 0 00-1.556-1.662A5.034 5.034 0 0025.51 23"})))},hvt=dvt;var mN={};de(mN,{icon:()=>bvt});var z1r=V(ne());var mvt=["title","titleId"];function iae(){return iae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yvt=function(t){var n=t.title,r=t.titleId,o=vvt(t,mvt);return c("svg",iae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#00BFB3",fillRule:"evenodd",d:"M16 0c-2.918 0-5.645.794-8 2.158 4.777 2.768 8 7.923 8 13.842 0 5.919-3.223 11.074-8 13.842A15.907 15.907 0 0016 32c8.837 0 16-7.163 16-16S24.837 0 16 0z",clipRule:"evenodd"}),c("path",{fill:"#FEC514",fillRule:"evenodd",d:"M8 24h2.222A12.996 12.996 0 0013 16c0-2.935-1.012-5.744-2.778-8H8a8 8 0 000 16z",clipRule:"evenodd"}),c("path",{className:"euiIcon__fillNegative",fillRule:"evenodd",d:"M16 8h-2.152A15.877 15.877 0 0116 16c0 2.918-.786 5.647-2.152 8H16a8 8 0 000-16z",clipRule:"evenodd"}))},bvt=yvt;var vN={};de(vN,{icon:()=>Svt});var L1r=V(ne());var wvt=["title","titleId"];function aae(){return aae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _vt=function(t){var n=t.title,r=t.titleId,o=Ovt(t,wvt);return c("svg",aae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"#419EDA"},c("path",{d:"M14.65 14.164c0 1.189-.933 2.15-2.083 2.15-1.152 0-2.082-.961-2.082-2.15 0-1.185.93-2.15 2.082-2.15 1.15 0 2.083.965 2.083 2.15zm2.693 0c0 1.189.934 2.15 2.084 2.15s2.083-.961 2.083-2.15c0-1.185-.933-2.15-2.083-2.15-1.15 0-2.084.965-2.084 2.15z"}),c("path",{d:"M31.522 16.495a5.845 5.845 0 01-3.105-.618c.272-1.603.387-3.218.357-4.827a24.896 24.896 0 00-3.027-3.703 6.137 6.137 0 012.133-2.36l.391-.25-.304-.354c-1.57-1.825-3.444-3.235-5.568-4.193L21.975 0l-.107.462a6.248 6.248 0 01-1.51 2.829 23.77 23.77 0 00-4.362-1.855 23.79 23.79 0 00-4.355 1.851A6.246 6.246 0 0110.137.465l-.108-.462-.423.189c-2.097.943-4.022 2.392-5.566 4.19l-.306.355.39.25a6.125 6.125 0 012.129 2.347 25.001 25.001 0 00-3.022 3.689 26.068 26.068 0 00.347 4.86 5.832 5.832 0 01-3.09.612L.03 16.46l.043.473a16.723 16.723 0 002.14 6.765l.234.41.35-.308a5.914 5.914 0 012.837-1.372 25.255 25.255 0 002.429 4.083c1.475.533 3.013.93 4.601 1.167a6.359 6.359 0 01-.383 3.243l-.175.439.45.102c1.15.261 2.31.394 3.447.394l3.447-.394.45-.102-.175-.44a6.376 6.376 0 01-.383-3.244 23.905 23.905 0 004.585-1.165 25.286 25.286 0 002.43-4.086 5.94 5.94 0 012.851 1.373l.35.306.233-.408a16.661 16.661 0 002.14-6.764l.042-.472-.45.036zM20.93 22.278c-1.63.458-3.287.689-4.933.689-1.65 0-3.304-.231-4.936-.69a20.028 20.028 0 01-2.113-4.594 20.072 20.072 0 01-.89-5.04 19.076 19.076 0 013.576-3.516 18.867 18.867 0 014.363-2.448 18.944 18.944 0 014.355 2.443 19.19 19.19 0 013.592 3.538c-.09 1.73-.39 3.41-.899 5.019a19.965 19.965 0 01-2.115 4.599z"})))},Svt=_vt;var gN={};de(gN,{icon:()=>jvt});var B1r=V(ne());var Evt=["title","titleId"];function sae(){return sae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Pvt=function(t){var n=t.title,r=t.titleId,o=Ivt(t,Evt),i=yo("logo_gcp");return c("svg",sae({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("defs",null,c("path",{id:i("a"),d:"M.085.1h4.549v6.291H.085z"})),c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#DB4437",fillRule:"nonzero",d:"M22.57 29.982h-5.749c.527 0 .987-.282 1.233-.7L25.857 16 20.93 7.61l5.748.001c.492 0 .97.251 1.232.7l3.698 6.291c.49.837.526 1.9 0 2.797l-6.572 11.185a2.853 2.853 0 01-2.464 1.398zm-.71-2.796c0 .386.318.7.71.7a.705.705 0 00.712-.7c0-.386-.318-.7-.711-.7a.705.705 0 00-.712.7zm6.927-10.58c.34.193.775.078.971-.256a.692.692 0 00-.26-.955.718.718 0 00-.972.256.692.692 0 00.26.955z"}),c("path",{fill:"#4285F4",fillRule:"nonzero",d:"M25.036 3.416l2.873 4.894a1.427 1.427 0 00-1.232-.699H11.071l-4.928 8.388-2.874-4.892a1.377 1.377 0 010-1.399l3.696-6.292a2.853 2.853 0 012.464-1.398h13.143c.982 0 1.937.502 2.464 1.398zM10.14 4.814c0-.386-.318-.7-.71-.7a.705.705 0 00-.712.7c0 .386.318.7.711.7a.705.705 0 00.711-.7zm12.787.606a.692.692 0 00.26-.955.718.718 0 00-.971-.256.692.692 0 00-.26.955.718.718 0 00.971.256z"}),c("path",{fill:"#F4B400",fillRule:"nonzero",d:"M.394 14.601l2.875-4.893c-.263.449-.245.98 0 1.399L11.07 24.39h9.857l-2.874 4.892c-.246.418-.706.7-1.233.7H9.428a2.854 2.854 0 01-2.464-1.398L.394 17.398a2.754 2.754 0 010-2.797zm2.82.793a.718.718 0 00-.972.256.693.693 0 00.26.955c.34.193.775.078.971-.256a.692.692 0 00-.26-.955zM9.072 26.58a.692.692 0 00-.26.955.718.718 0 00.971.256.692.692 0 00.26-.955.718.718 0 00-.971-.256z"}),c("path",{fill:"#000",d:"M18.054 29.282l2.875-4.892H17.96l-1.138 5.591c.526 0 .986-.28 1.232-.699M26.678 7.611h-5.749l1.484 2.527L27.91 8.31a1.427 1.427 0 00-1.232-.7",opacity:.1}),c("g",{opacity:.1,transform:"translate(2.994 9.609)"},c("mask",{id:i("b"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("a"))})),c("path",{fill:"#000",d:"M.275 1.498L3.15 6.391l1.485-2.527L.275.1c-.263.448-.245.98 0 1.398",mask:"url(#".concat(i("b"),")")})),c("path",{fill:"#CCC",fillRule:"nonzero",d:"M11.071 24.39L6.143 16l4.928-8.39h9.858L25.857 16l-4.928 8.39H11.07zM20.268 16c0-2.317-1.91-4.194-4.268-4.194-2.357 0-4.268 1.877-4.268 4.194 0 2.316 1.91 4.194 4.268 4.194 2.357 0 4.268-1.878 4.268-4.194z"})))},jvt=Pvt;var yN={};de(yN,{icon:()=>Rvt});var $1r=V(ne());var Cvt=["title","titleId"];function lae(){return lae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Avt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Mvt=function(t){var n=t.title,r=t.titleId,o=Tvt(t,Cvt);return c("svg",lae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M20.256 15.982c0-2.316-1.91-4.194-4.268-4.194-2.357 0-4.268 1.878-4.268 4.194 0 2.317 1.911 4.195 4.268 4.195 2.357 0 4.268-1.878 4.268-4.195"}),c("path",{d:"M29.87 16.543a.862.862 0 01-1.167.308.832.832 0 01-.312-1.147.862.862 0 011.167-.308.832.832 0 01.312 1.147M22.56 28.15a.847.847 0 01-.855-.84c0-.464.383-.84.855-.84s.854.376.854.84c0 .464-.382.84-.854.84m-12.715-.113a.863.863 0 01-1.167-.308.832.832 0 01.312-1.147.862.862 0 011.167.308.832.832 0 01-.312 1.147M3.586 16.542a.863.863 0 01-1.167.308.832.832 0 01-.313-1.147.862.862 0 011.167-.308.832.832 0 01.313 1.147M22.987 5.665a.862.862 0 01-1.167-.308.832.832 0 01.312-1.147.863.863 0 011.168.308.832.832 0 01-.313 1.147m-13.57.112a.847.847 0 01-.854-.84c0-.464.382-.84.854-.84s.855.376.855.84c0 .464-.383.84-.855.84m22.178 8.797l-3.697-6.292c-.014-.023-.03-.043-.045-.065l-2.83-4.818A2.854 2.854 0 0022.56 2H9.417a2.853 2.853 0 00-2.464 1.398L3.257 9.69l3.284 5.59 4.519-7.69h15.605c.491 0 .969.251 1.232.699h-6.565l4.513 7.682-4.935 8.4-2.87 4.883a1.426 1.426 0 01-1.23.699l3.279-5.582h-9.03l-4.544-7.738-.384-.653-2.874-4.893a1.377 1.377 0 01-.003-1.391L.382 14.584a2.754 2.754 0 000 2.796l6.57 11.186a2.854 2.854 0 002.465 1.398h7.392c.054 0 .107-.005.16-.011h5.59a2.853 2.853 0 002.464-1.397l6.572-11.186c.526-.896.49-1.96 0-2.796"}))},Rvt=Mvt;var bN={};de(bN,{icon:()=>Fvt});var q1r=V(ne());var Dvt=["title","titleId"];function uae(){return uae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Nvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Lvt=function(t){var n=t.title,r=t.titleId,o=zvt(t,Dvt);return c("svg",uae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 0C7.164 0 0 7.343 0 16.4c0 7.248 4.584 13.394 10.942 15.562.8.15 1.092-.356 1.092-.789 0-.39-.014-1.684-.022-3.053-4.45.991-5.39-1.934-5.39-1.934-.728-1.894-1.776-2.398-1.776-2.398-1.454-1.017.11-.997.11-.997 1.606.114 2.452 1.69 2.452 1.69 1.428 2.506 3.746 1.781 4.656 1.36.146-1.056.56-1.78 1.016-2.19-3.552-.414-7.288-1.821-7.288-8.105 0-1.792.624-3.254 1.646-4.402-.164-.416-.714-2.085.158-4.342 0 0 1.341-.44 4.4 1.681A14.882 14.882 0 0116 7.932c1.36.006 2.728.188 4.006.553 3.053-2.124 4.396-1.681 4.396-1.681.875 2.259.325 3.926.16 4.34 1.026 1.148 1.645 2.61 1.645 4.402 0 6.3-3.742 7.687-7.307 8.094.577.508 1.086 1.505 1.086 3.035 0 2.192-.021 3.96-.021 4.5 0 .437.29.947 1.101.787C27.42 29.79 32 23.644 32 16.4 32 7.343 24.836 0 16 0z"}))},Fvt=Lvt;var wN={};de(wN,{icon:()=>Vvt});var G1r=V(ne());var Bvt=["title","titleId"];function cae(){return cae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $vt=function(t){var n=t.title,r=t.titleId,o=Wvt(t,Bvt);return c("svg",cae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#E65A4D",d:"M29.162 4.149c.29-.175.588-.078.873 0a2.616 2.616 0 011.907 2.476c.006.29-.007.581-.007.866-.084 0-.135.052-.2.097-.815.582-1.642 1.164-2.45 1.752-.33.239-.692.426-.97.73-.116 0-.2.078-.284.136-2.69 1.855-5.379 3.704-8.062 5.56-1.331.918-2.663 1.849-3.995 2.773h-.11c-.058-.045-.11-.103-.168-.142L5.863 11.55c-.672-.466-1.344-.938-2.017-1.403-.077-.052-.148-.162-.245-.104-.09.052-.033.175-.045.272-.007.032 0 .065 0 .097v16.194c0 .116.006.24.012.355 0 .065-.006.123-.006.188-1.228.149-2.347-.02-3.116-1.131a2.381 2.381 0 01-.44-1.364c0-6.032-.006-12.057.007-18.089 0-1.228.995-2.314 2.217-2.488.194-.026.388-.052.556.077.04.039.071.078.117.11 4.273 3.168 8.546 6.335 12.819 9.51.168.122.278.116.446-.007 3.413-2.521 6.833-5.036 10.247-7.55.905-.692 1.823-1.384 2.747-2.07z"}),c("path",{fill:"#F6F4EC",d:"M29.162 4.149c-.924.685-1.842 1.377-2.767 2.062-3.413 2.521-6.833 5.03-10.246 7.55-.168.123-.272.13-.446.007-4.267-3.174-8.54-6.335-12.813-9.51-.046-.032-.078-.07-.117-.11.078-.129.214-.083.324-.083h25.742c.11 0 .239-.046.323.084z"}),c("path",{fill:"#E6E3D6",d:"M3.556 26.95a6.533 6.533 0 01-.013-.356V10.4c0-.032-.007-.065 0-.097.013-.09-.046-.213.045-.271.097-.059.174.051.246.103.672.465 1.344.937 2.017 1.403l9.832 6.846c.058.045.117.097.168.142-.026.026-.058.045-.084.071l-.064.065c-.052 0-.104.013-.13.064l-.064.065c-.007.013-.02.02-.026.032.013-.006.02-.019.032-.025l.065-.065c.052 0 .103-.013.13-.065.018-.02.044-.045.064-.064.064 0 .129-.007.194-.007.898.627 1.803 1.248 2.702 1.875 2.676 1.855 5.353 3.704 8.023 5.572.478.337 1.002.628 1.428 1.035-.116.11-.258.039-.388.058.007-.149-.122-.188-.22-.252-.49-.343-.995-.672-1.473-1.028-.802-.588-1.617-1.15-2.431-1.72-.679-.472-1.351-.963-2.05-1.409-.607-.388-1.17-.853-1.777-1.248-.685-.44-1.332-.93-2.01-1.377-.563-.368-1.113-.762-1.662-1.15-.11-.078-.207-.11-.323-.033-.233.168-.53.278-.724.46-.556.51-1.235.84-1.817 1.305-.743.589-1.545 1.112-2.34 1.636-1.319.873-2.599 1.816-3.911 2.696a43.697 43.697 0 00-2.308 1.629c-.207.155-.485.226-.614.485-.13-.013-.272.038-.395-.046 2.315-1.616 4.63-3.226 6.937-4.842.304-.213.646-.381.899-.666.045-.013.103-.019.097-.084 0-.006-.013-.02-.02-.02-.065-.006-.077.046-.09.091-.233.013-.375.194-.55.31-2.463 1.7-4.932 3.388-7.395 5.075zm11.119-7.564l.064-.065c.052 0 .104-.013.13-.064l.064-.065c.052 0 .104-.013.13-.065.006-.013.019-.02.025-.032-.012.006-.019.02-.032.026-.052 0-.103.013-.13.064l-.064.065c-.051 0-.103.013-.13.065-.018.026-.038.045-.057.07-.013.007-.026.014-.033.027.013-.007.026-.013.033-.026zm-.84.575c-.052 0-.104.013-.13.065-.039.006-.09.006-.097.065 0 .012.026.038.039.038.052-.006.058-.051.065-.09.051-.007.096-.013.122-.078a.311.311 0 00.071-.058c.052 0 .104-.013.13-.065l.064-.064c.052 0 .104-.013.13-.065.006-.013.02-.02.026-.032-.013.006-.02.02-.033.026-.051 0-.103.013-.13.064-.018.02-.044.046-.064.065-.051 0-.103.013-.129.065l-.065.064zm-.841.588c-.052 0-.103.013-.13.065-.051.007-.103.013-.096.084 0 .007.013.02.02.02.07.006.077-.046.083-.097.052-.007.097-.02.123-.072.026-.012.045-.038.071-.058.052 0 .103-.013.13-.064l.064-.065c.052 0 .103-.013.13-.065.006-.013.019-.019.025-.032-.013.007-.02.02-.032.026-.052 0-.104.013-.13.065l-.064.064c-.052 0-.104.013-.13.065a.306.306 0 00-.064.064zm-.647.46c.052-.007.104-.013.097-.085 0-.006-.012-.019-.019-.019-.071-.006-.078.045-.084.097-.052 0-.097.013-.13.065a.223.223 0 00-.193.129c-.045.013-.104.013-.097.084 0 .006.013.02.02.02.064.006.077-.046.083-.098.09 0 .181-.006.194-.129.058-.006.104-.02.13-.065zm2.128-1.533c-.008.027-.025.054-.033.072.025.009.05.035.067.027.016-.01.025-.045.033-.072a.55.55 0 01-.067-.027zm-1.81 1.35c-.008-.024-.015-.056-.03-.056-.015-.008-.052.008-.06.024-.022.033-.007.074.03.074.022 0 .037-.025.06-.041zM15.355 19a.185.185 0 01.034-.072c-.025-.009-.05-.035-.067-.026-.016.008-.025.044-.033.07.017.01.042.019.067.028zm-3.526 2.402c-.016-.024-.031-.05-.04-.057-.015 0-.055.016-.055.033-.016.04.008.074.048.065.016 0 .031-.024.047-.04z"}),c("path",{fill:"#B6B5AC",d:"M28.121 27.085c-.426-.413-.944-.698-1.428-1.034-2.67-1.862-5.347-3.717-8.023-5.573-.899-.627-1.804-1.247-2.702-1.874 0-.02-.007-.046-.007-.065l3.995-2.773c2.69-1.856 5.379-3.705 8.062-5.56.084-.058.168-.136.284-.136v17.073c-.051-.019-.116-.038-.18-.058z"}),c("path",{fill:"#E6E3D6",d:"M4.073 27.143c.123-.258.407-.33.614-.484a47.845 47.845 0 012.308-1.63c1.312-.885 2.592-1.823 3.91-2.695.796-.524 1.598-1.048 2.341-1.636.588-.465 1.26-.795 1.817-1.306.2-.18.49-.29.724-.459.11-.084.207-.051.323.033.55.388 1.099.782 1.661 1.15.68.446 1.326.944 2.01 1.377.608.388 1.17.854 1.779 1.248.698.446 1.37.937 2.049 1.41.814.568 1.635 1.13 2.43 1.719.485.355.983.685 1.475 1.028.09.064.226.103.22.252-7.888-.007-15.774-.007-23.661-.007z"}),c("path",{fill:"#B1392F",d:"M28.315 27.143V10.07c.278-.304.64-.491.97-.73.814-.595 1.635-1.17 2.45-1.752.058-.045.116-.097.2-.097.007.11.013.213.013.323 0 5.502 0 11.01.007 16.51 0 .376-.013.75-.104 1.126-.161.691-.575 1.17-1.247 1.409-.744.259-1.513.33-2.289.284z"}),c("path",{fill:"#BEBDB3",d:"M11.514 21.59c-.253.285-.595.453-.9.666a2650.078 2650.078 0 01-6.936 4.842l-.129.039c0-.065.007-.123.007-.188 2.47-1.687 4.932-3.374 7.402-5.061.174-.117.31-.304.55-.31l.006.012z"})))},Vvt=$vt;var ON={};de(ON,{icon:()=>Xvt});var X1r=V(ne());var qvt=["title","titleId"];function fae(){return fae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Gvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jvt=function(t){var n=t.title,r=t.titleId,o=Uvt(t,qvt);return c("svg",fae({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.315 17.301c.045.946 1 .5 1.416.21.415-.29.5-.045.56-.6a9.07 9.07 0 00.045-1.09 2.676 2.676 0 00-1.786.455c-.26.19-.745.79-.24 1",fill:"#F6D2A2"}),c("path",{d:"M4.805 17.987a.6.6 0 01-.27-.06.62.62 0 01-.31-.55A.41.41 0 014 17.05a1.15 1.15 0 01.5-.83 2.752 2.752 0 011.846-.47h.075v.074c.01.286.003.572-.025.856v.25c-.025.39-.1.45-.3.5a1.118 1.118 0 00-.3.145c-.288.223-.63.364-.99.41zm1.271-2.067a2.502 2.502 0 00-1.47.45 1 1 0 00-.42.671.25.25 0 00.17.205h.05v.055a.5.5 0 00.21.45 1.31 1.31 0 001.065-.31 1.29 1.29 0 01.34-.17c.13-.045.16-.055.18-.365v-.25c.024-.25.034-.5.03-.75h-.155v.014z",fill:"#010101"}),c("path",{d:"M4.315 17.3a.745.745 0 00.376-.21z",fill:"#C7B199"}),c("path",{d:"M4.315 17.391a.092.092 0 11-.055-.175h.06a.54.54 0 00.275-.16.092.092 0 01.06-.035.09.09 0 01.068.017.09.09 0 01.035.06.091.091 0 01-.018.068.7.7 0 01-.36.22h-.065v.005z",fill:"#010101"}),c("path",{d:"M6.496 6.05C2.88 5.049 5.571.43 8.498 2.322L6.496 6.05z",fill:"#74CDDD"}),c("path",{d:"M6.541 6.154h-.07c-1.03-.29-1.666-.9-1.786-1.716a2.396 2.396 0 011.116-2.26 2.421 2.421 0 012.722.09l.07.044L6.54 6.154zm.5-4.192c-.41 0-.811.12-1.155.345A2.211 2.211 0 004.85 4.393c.11.726.67 1.276 1.586 1.551l1.901-3.587a2.501 2.501 0 00-1.28-.38l-.015-.015z",fill:"#010101"}),c("path",{d:"M22.566 1.977c2.862-2.001 5.448 2.502 2.121 3.667l-2.121-3.667z",fill:"#74CDDD"}),c("path",{d:"M24.647 5.754l-2.201-3.802.065-.045a2.362 2.362 0 012.626-.22 2.427 2.427 0 011.196 2.241c-.05.5-.32 1.356-1.616 1.801l-.07.025zm-1.961-3.752l2.041 3.532a1.956 1.956 0 001.426-1.62 2.24 2.24 0 00-1.106-2.077 2.126 2.126 0 00-2.361.165z",fill:"#010101"}),c("path",{d:"M23.181 28.928c.726.45 2.056 1.811.966 2.471-1.046.961-1.636-1.055-2.557-1.33a2.549 2.549 0 011.591-1.141z",fill:"#F6D2A2"}),c("path",{d:"M23.592 31.745h-.04c-.416-.025-.756-.43-1.086-.816a2.33 2.33 0 00-.9-.775l-.12-.035.074-.125a2.656 2.656 0 011.646-1.176h.065c.466.29 1.426 1.13 1.421 1.891a.835.835 0 01-.45.725.905.905 0 01-.61.31zm-1.861-1.721c.339.2.633.467.865.785.219.36.56.628.96.755a.716.716 0 00.5-.235.661.661 0 00.371-.58c0-.61-.77-1.376-1.306-1.721a2.351 2.351 0 00-1.386.996h-.005z",fill:"#010101"}),c("path",{d:"M24.147 31.494a.09.09 0 01-.08-.05c-.053-.11-.1-.224-.14-.34a1.5 1.5 0 00-.33-.61.091.091 0 01-.022-.098.09.09 0 01.147-.032c.172.188.3.414.37.66.039.11.084.216.135.32a.09.09 0 01-.04.12l-.04.03z",fill:"#010101"}),c("path",{d:"M10.189 30.464c-.856.13-1.336.9-2.046 1.29a.62.62 0 01-1.001-.235.325.325 0 01-.26-.12c-.62-1 .645-1.696 1.31-2.186.936-.18 1.511.615 1.997 1.25z",fill:"#F6D2A2"}),c("path",{d:"M7.692 31.995a.613.613 0 01-.16 0 .74.74 0 01-.435-.375.301.301 0 01-.245-.13c-.6-.946.42-1.662 1.096-2.137l.235-.17c.945-.19 1.546.59 2.026 1.22l.135.181h-.15a2.586 2.586 0 00-1.266.725c-.23.212-.482.4-.75.56a1.001 1.001 0 01-.486.126zm-.6-.58a.245.245 0 01.105 0h.025l.04.08a.58.58 0 00.335.305.686.686 0 00.5-.12c.26-.155.503-.337.726-.54a3 3 0 011.206-.736c-.46-.6-1-1.25-1.786-1.1l-.225.16c-.69.5-1.546 1.09-1.051 1.885a.146.146 0 00.105.07l.02-.005z",fill:"#010101"}),c("path",{d:"M7.157 31.614a.09.09 0 01-.09-.12c.037-.24.137-.466.29-.655.072-.1.136-.205.19-.315a.09.09 0 11.165.075c-.058.12-.127.236-.205.345-.132.17-.217.372-.245.585a.09.09 0 01-.067.084.09.09 0 01-.038.002zM6.647 4.78c-.5-.25-.826-.596-.536-1.146.29-.55.77-.455 1.251-.205l-.715 1.35zm17.285-.48c.5-.25.825-.596.535-1.146-.29-.55-.77-.456-1.25-.205l.715 1.35z",fill:"#010101"}),c("path",{d:"M27.219 17.181c-.045.946-1.001.5-1.416.21-.416-.29-.5-.045-.56-.6a9.068 9.068 0 01-.046-1.09 2.677 2.677 0 011.787.454c.26.19.745.79.24 1.001",fill:"#F6D2A2"}),c("path",{d:"M26.728 17.846a2.046 2.046 0 01-.955-.36 1.117 1.117 0 00-.3-.145c-.2-.07-.275-.13-.3-.5v-.25a6.516 6.516 0 01-.026-.856v-.12h.076a2.751 2.751 0 011.846.47 1.15 1.15 0 01.5.83.412.412 0 01-.225.326.62.62 0 01-.31.55.605.605 0 01-.306.055zm-1.456-2.06c-.003.25.007.5.03.75v.25c0 .305.046.315.18.365.122.04.236.097.34.17a1.307 1.307 0 001.067.31.502.502 0 00.21-.45v-.06h.05a.25.25 0 00.17-.205 1.002 1.002 0 00-.42-.67 2.552 2.552 0 00-1.627-.46z",fill:"#010101"}),c("path",{d:"M27.218 17.181a.746.746 0 01-.375-.195z",fill:"#C7B199"}),c("path",{d:"M27.219 17.271h-.095a.7.7 0 01-.35-.25.09.09 0 01-.007-.101.091.091 0 01.152-.01.54.54 0 00.275.16h.06a.101.101 0 11-.035.201z",fill:"#010101"}),c("path",{d:"M15.407.066c3.622 0 7.004.5 8.785 4.002 1.586 3.898 1 8.105 1.266 12.223.21 3.537.67 7.624-.97 10.906-1.717 3.442-6.05 4.297-9.601 4.182-2.792-.1-6.164-1-7.74-3.562-1.851-3.002-.976-7.444-.84-10.771.16-3.942-1.071-7.9.225-11.762C7.877 1.282 11.5.376 15.402.066",fill:"#74CDDD"}),c("path",{d:"M15.502 31.494h-.62a13.202 13.202 0 01-4.358-.87 6.969 6.969 0 01-3.457-2.737c-1.501-2.421-1.23-5.763-1-8.715.06-.74.114-1.446.14-2.106.026-1.4-.034-2.8-.18-4.192-.211-2.502-.431-5.089.41-7.595a6.644 6.644 0 013.501-4.047C11.29.572 12.94.19 15.367 0c3.572-.025 7.094.475 8.905 4.022 1.16 2.852 1.176 5.914 1.196 8.876 0 1.11 0 2.256.08 3.377 0 .34.04.685.065 1.03.21 3.247.45 6.934-1.046 9.916-1.871 3.732-6.574 4.272-9.065 4.272zM15.407.156c-3.768.32-7.44 1.13-8.79 5.158-.831 2.471-.61 5.038-.406 7.504.147 1.4.207 2.806.18 4.213-.025.665-.085 1.37-.14 2.116-.23 2.922-.5 6.239.966 8.605.615 1 2.596 3.337 7.67 3.502 2.196.08 7.504-.17 9.505-4.142 1.47-2.942 1.236-6.599 1.026-9.826 0-.35-.045-.695-.065-1.03a67.451 67.451 0 01-.08-3.353c0-2.941-.03-6.003-1.181-8.805A6.438 6.438 0 0020.445.841a14.96 14.96 0 00-5.038-.685z",fill:"#010101"}),c("path",{d:"M16.042 4.924c.65 3.777 6.824 2.781 5.938-1.03-.795-3.418-6.153-2.472-5.938 1.03z",fill:"#fff"}),c("path",{d:"M18.979 7.39a3.457 3.457 0 01-1.13-.185 2.797 2.797 0 01-1.892-2.266 2.882 2.882 0 01.78-2.222 3.407 3.407 0 012.002-1 3.202 3.202 0 012.031.35 2.727 2.727 0 011.296 1.806 2.643 2.643 0 01-.77 2.682 3.502 3.502 0 01-2.317.835zm-2.847-2.476a2.626 2.626 0 001.776 2.126 3.417 3.417 0 003.277-.62 2.502 2.502 0 00.716-2.502 2.672 2.672 0 00-3.132-2.031 2.887 2.887 0 00-2.637 3.027z",fill:"#010101"}),c("path",{d:"M8.663 5.539c.84 3.287 6.103 2.441 5.908-.855-.235-3.953-6.714-3.207-5.908.855z",fill:"#fff"}),c("path",{d:"M11.474 7.705a3.232 3.232 0 01-1.536-.375 2.727 2.727 0 01-1.355-1.776 2.757 2.757 0 01.94-2.827 3.552 3.552 0 013.532-.45 2.672 2.672 0 011.601 2.402c.105 1.75-1.286 2.771-2.617 3.001a3.657 3.657 0 01-.565.025zM8.763 5.52A2.732 2.732 0 0012.03 7.52c1.26-.2 2.576-1.16 2.476-2.806a2.501 2.501 0 00-1.5-2.262 3.377 3.377 0 00-3.358.43 2.597 2.597 0 00-.885 2.637z",fill:"#010101"}),c("path",{d:"M16.767 9.481c.049.521.049 1.046 0 1.566a1 1 0 01-.585.36.861.861 0 01-.655-.5c-.032-.59-.017-1.183.045-1.77l1.195.344z",fill:"#fff"}),c("path",{d:"M16.237 11.483h-.025a.944.944 0 01-.725-.566 5.95 5.95 0 010-1.215c0-.185.03-.38.035-.57v-.15l1.35.414v.085c0 .16 0 .33.026.5.045.358.045.72 0 1.076v.025a.75.75 0 01-.476.34l-.155.06h-.03zm-.58-.63a.766.766 0 00.56.445l.14-.056a.6.6 0 00.366-.26c.04-.332.04-.668 0-1 0-.155 0-.305-.026-.455l-1-.306c0 .155 0 .31-.03.46-.044.388-.05.778-.015 1.166l.005.005zM10.114 5.964c.491 0 .89-.432.89-.965 0-.534-.399-.966-.89-.966-.492 0-.89.432-.89.966 0 .533.398.965.89.965z",fill:"#010101"}),c("path",{d:"M10.519 5.464c.116 0 .21-.11.21-.245s-.094-.245-.21-.245c-.116 0-.21.11-.21.245s.094.245.21.245z",fill:"#fff"}),c("path",{d:"M17.568 5.724c.483 0 .875-.432.875-.965 0-.533-.392-.966-.875-.966-.484 0-.876.433-.876.966 0 .533.392.965.876.965z",fill:"#010101"}),c("path",{d:"M17.963 5.224c.114 0 .206-.11.206-.245 0-.136-.092-.245-.206-.245-.113 0-.205.11-.205.245s.092.245.205.245zM14.266 9.406c-.39.941.215 2.822 1.27 1.436a11.12 11.12 0 01.046-1.77l-1.316.334z",fill:"#fff"}),c("path",{d:"M14.812 11.428a.5.5 0 01-.26-.07c-.426-.246-.691-1.251-.39-2.002v-.04l1.5-.38v.12c0 .195 0 .39-.035.575a5.71 5.71 0 000 1.181v.065a1.056 1.056 0 01-.815.55zm-.496-1.947c-.215.586-.045 1.501.33 1.716.27.155.57-.115.78-.385a6.128 6.128 0 010-1.18c0-.146 0-.3.031-.45l-1.14.3z",fill:"#010101"}),c("path",{d:"M14.38 7.595a1.146 1.146 0 00-.94 1.601c.5.9 1.611-.08 2.302 0 .795 0 1.45.84 2.09.15.711-.77-.304-1.5-1.1-1.856l-2.351.105z",fill:"#F6D2A2"}),c("path",{d:"M17.268 9.727a2 2 0 01-.73-.206 2.207 2.207 0 00-.791-.22c-.287 0-.57.062-.83.18-.561.195-1.196.416-1.557-.23a1.08 1.08 0 010-1.05 1.281 1.281 0 011.001-.686l2.406-.105c.59.25 1.266.706 1.381 1.236a.955.955 0 01-.88 1.08zm-1.501-.606c.296.024.584.104.85.235.45.19.806.335 1.166-.055a.664.664 0 00.205-.605c-.1-.46-.735-.88-1.256-1.1l-2.326.094a1.11 1.11 0 00-.85.59.906.906 0 000 .876c.285.5.795.335 1.34.15.274-.122.57-.185.87-.185z",fill:"#231F20"}),c("path",{d:"M14.266 7.56c-.055-1.25 2.336-1.41 2.617-.36.28 1.05-2.502 1.29-2.617.36z",fill:"#010101"}))},Xvt=Jvt;var xN={};de(xN,{icon:()=>egt});var Y1r=V(ne());var Kvt=["title","titleId"];function pae(){return pae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Qvt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Zvt=function(t){var n=t.title,r=t.titleId,o=Yvt(t,Kvt),i=yo("logo_google_g");return c("svg",pae({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32",width:32,height:32,"aria-labelledby":r},o),n?c("title",{id:r},n):null,c("defs",null,c("path",{id:i("a"),d:"M15.319 3.278c0-1.131-.102-2.22-.29-3.264H0v6.172h8.587c-.37 1.995-1.494 3.685-3.184 4.816v4.004h5.157c3.017-2.778 4.758-6.869 4.758-11.728z"}),c("path",{id:i("c"),d:"M14.343 12.956c4.308 0 7.92-1.43 10.56-3.866l-5.157-4.004c-1.429.958-3.256 1.523-5.403 1.523-4.156 0-7.674-2.806-8.928-6.578H.084v4.134c2.625 5.215 8.021 8.79 14.259 8.79z"}),c("path",{id:i("e"),d:"M7.028 10.25a9.59 9.59 0 01-.5-3.032 9.59 9.59 0 01.5-3.032V.052h-5.33A15.95 15.95 0 000 7.218c0 2.575.617 5.012 1.697 7.166l5.331-4.134z"}),c("path",{id:i("g"),d:"M14.343 6.392c2.342 0 4.446.805 6.1 2.386l4.576-4.576C22.256 1.627 18.644.046 14.343.046 8.105.046 2.709 3.622.083 8.836l5.332 4.134c1.254-3.77 4.772-6.578 8.928-6.578z"})),c("g",{fill:"none",fillRule:"evenodd"},c("g",{transform:"translate(15.955 13.087)"},c("mask",{id:i("b"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("a"))})),c("path",{fill:"#4285F4",fillRule:"nonzero",mask:"url(#".concat(i("b"),")"),d:"M.001 15.006h15.318V.014H.001z"})),c("g",{transform:"translate(1.613 19.003)"},c("mask",{id:i("d"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("c"))})),c("path",{fill:"#34A853",fillRule:"nonzero",mask:"url(#".concat(i("d"),")"),d:"M.084 12.956h24.819V.031H.084z"})),c("g",{transform:"translate(0 8.784)"},c("mask",{id:i("f"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("e"))})),c("path",{fill:"#FBBC04",fillRule:"nonzero",mask:"url(#".concat(i("f"),")"),d:"M0 14.384h7.028V.052H0z"})),c("g",{transform:"translate(1.613)"},c("mask",{id:i("h"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("g"))})),c("path",{fill:"#EA4335",fillRule:"nonzero",mask:"url(#".concat(i("h"),")"),d:"M.084 12.97h24.935V.046H.084z"}))))},egt=Zvt;var _N={};de(_N,{icon:()=>igt});var evr=V(ne());var tgt=["title","titleId"];function dae(){return dae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ngt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ogt=function(t){var n=t.title,r=t.titleId,o=rgt(t,tgt),i=yo("logo_haproxy");return c("svg",dae({width:32,height:32,viewBox:"0 0 32 32",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{clipPath:"url(#".concat(i("clip0"),")")},c("path",{d:"M16.05 13.237l-3.11-3.612",stroke:"#05486D",strokeWidth:.12,strokeMiterlimit:10}),c("path",{d:"M6.117 10.528l2.509 3.512",stroke:"#05486D",strokeWidth:.06,strokeMiterlimit:10}),c("path",{d:"M16.05 13.237l3.11-3.612M19.863 17.15l3.712-3.11M19.863 17.15l3.712 3.311M19.16 24.575l-3.11-3.511M12.94 24.575l3.11-3.511M8.625 20.26l3.512-3.11M8.625 14.04l3.512 3.11M16.05 13.238l-7.425.802M16.05 13.238l7.525.802M19.863 17.15l-.702-7.525M19.863 17.15l-.702 7.425M23.575 20.461l-7.525.602M8.625 20.261l7.425.803M12.94 24.575l-.803-7.425M12.94 9.625l-.803 7.525",stroke:"#05486D",strokeWidth:.12,strokeMiterlimit:10}),c("path",{d:"M5.114 15.043l3.511-1.003M9.328 7.117l3.612 2.509M13.743 5.512l-.803 4.113M13.743 5.512l5.418 4.113M18.358 5.512l.803 4.113M22.773 7.117L19.16 9.626M25.983 10.528l-6.822-.903M23.575 14.04l2.408-3.512M23.575 14.04l3.412 1.003M23.575 14.04l3.412 5.217M18.358 5.512L12.94 9.625M23.576 14.04l-.803-6.923M23.575 20.462l3.412-1.204M23.575 20.462l3.412-5.418M23.575 20.461l2.408 3.312M23.576 20.461l-.803 6.723M19.16 24.575l3.613 2.609M19.16 24.575l6.823-.802M19.16 24.575l-.802 4.214M19.16 24.575l-5.417 4.214M12.94 24.575l.803 4.214M12.94 24.575l5.418 4.214M12.94 24.575l-3.612 2.609M12.94 24.575l-6.823-.802M8.626 20.261l-2.509 3.512M8.625 20.261l.703 6.923M8.625 20.26l-3.511-1.002M8.625 14.04l-3.511 5.217M8.625 20.26l-3.511-5.217M9.328 7.117l-.703 6.923M6.117 10.528l6.823-.903",stroke:"#05486D",strokeWidth:.06,strokeMiterlimit:10}),c("path",{d:"M9.327 7.117L6.72 5.813M9.328 7.117l-.201-2.91M13.742 5.512L9.127 4.207M13.742 5.512l-2.006-2.509M13.743 5.512l.802-2.91M9.328 7.117l2.408-4.114M18.358 5.512l-3.813-2.91M18.358 5.512l-.803-3.01M13.743 5.512l3.812-3.01M18.358 5.512l2.007-2.509M22.773 7.117l-2.408-4.114M22.773 7.117l.301-2.91M18.358 5.512l4.716-1.305M22.773 7.117l2.709-1.405M22.773 7.117l4.716.703M25.983 10.528l1.505-2.709M25.984 10.528l-.502-4.816M25.983 10.528l3.11-.3M25.983 10.528l4.214 2.308M26.987 15.044l2.107-4.817M26.987 15.043l3.21-2.207M26.987 15.043l3.612.703M26.987 19.258l3.612-3.512M26.987 19.258l3.712-.703M26.987 15.043l3.712 3.512M26.987 19.258l3.11 2.107M25.983 23.773l4.114-2.409M25.983 23.773l3.11.3M26.987 19.258l2.107 4.816M25.983 23.773l1.505 2.709M25.984 23.773l-.502 4.715M25.482 28.488l-2.71-1.304M22.773 27.184l.2 2.91M22.773 27.184l4.716-.703M22.773 27.184l-2.408 4.114M18.358 28.79l2.007 2.508M18.358 28.79l4.615 1.304M18.358 28.79l-.803 3.01M18.358 28.79l-3.813 3.01M13.743 28.79l.802 3.01M13.743 28.79l3.812 3.01M13.742 28.79l-2.006 2.508M9.328 27.184l2.408 4.114M13.742 28.79l-4.615 1.404M9.328 27.184l-.201 3.01M9.328 27.184l-2.71 1.404M6.117 23.773l.502 4.816M9.328 27.184l-4.716-.703M6.117 23.773l-1.505 2.709M6.117 23.773l-3.11.3M6.117 23.773l-4.214-2.409M5.114 19.258l-3.21 2.107M5.114 19.258L1.4 18.555M5.114 19.258l-2.107 4.816M5.114 15.043L1.4 18.555M5.114 19.258L1.4 15.746M5.114 15.043l-3.11-2.106M5.114 15.043l-3.713.703M5.114 15.044l-2.007-4.817M6.117 10.528l-3.01-.3M6.117 10.528l-4.114 2.408M6.117 10.528L4.712 7.92M6.117 10.528l.602-4.715M9.328 7.117l-4.616.803",stroke:"#083D5F",strokeWidth:.05,strokeMiterlimit:10}),c("path",{d:"M13.943 15.244h-3.612v3.592h3.612v-3.592zM17.756 11.331h-3.612v3.592h3.612v-3.592zM17.756 19.157h-3.612v3.592h3.612v-3.592zM21.669 15.244h-3.612v3.592h3.612v-3.592z",fill:"#006DA8"}),c("path",{d:"M20.365 8.421h-2.509V10.9h2.509V8.42zM14.144 8.321h-2.509v2.478h2.509V8.321zM9.83 12.836H7.32v2.478H9.83v-2.478zM9.83 18.956H7.32v2.479H9.83v-2.479zM24.679 18.956H22.17v2.479h2.509v-2.479zM24.679 12.736H22.17v2.478h2.509v-2.478z",fill:"#2F77BC"}),c("path",{d:"M6.92 9.625H5.314v1.676H6.92V9.625zM10.13 6.214H8.526v1.675h1.606V6.214zM14.445 4.609h-1.606v1.675h1.606V4.61zM5.916 14.14H4.311v1.676h1.605V14.14zM26.786 9.826H25.08v1.646h1.706V9.826zM23.575 6.415H21.87V8.06h1.705V6.415zM19.26 4.81h-1.705v1.645h1.706V4.809zM27.689 14.441h-1.605v1.646h1.605V14.44z",fill:"#139BD7"}),c("path",{d:"M14.144 23.27h-2.509v2.479h2.509v-2.478zM20.264 23.27h-2.508v2.479h2.508v-2.478z",fill:"#2F77BC"}),c("path",{d:"M26.685 22.77H25.08v1.675h1.605v-1.676zM23.375 26.08H21.77v1.676h1.605V26.08zM19.06 27.686h-1.605v1.675h1.605v-1.675zM27.589 18.254h-1.606v1.676h1.606v-1.676zM6.92 22.97H5.214v1.646H6.92V22.97zM10.03 26.381H8.325v1.646h1.705V26.38zM14.445 27.987h-1.706v1.645h1.706v-1.645zM5.816 18.355H4.21V20h1.606v-1.645z",fill:"#139BD7"}),c("path",{d:"M7.12 5.311h-.903v.933h.903v-.933zM1.903 15.244H1v.933h.903v-.933zM25.782 5.21h-.903v.934h.903V5.21zM2.505 12.335h-.903v.933h.903v-.934zM12.137 2.502h-.903v.933h.903v-.933zM3.508 9.726h-.903v.933h.903v-.933zM5.113 7.318H4.21v.933h.903v-.933zM9.629 3.806h-.903v.903h.903v-.903zM15.047 2.1h-.903v.903h.903V2.1zM23.374 3.605h-.903v.933h.903v-.933zM29.295 9.726h-.903v.933h.903v-.933zM30.498 12.335h-.903v.933h.903v-.934zM27.69 7.318h-.904v.933h.903v-.933zM30.9 15.144h-.903v.933h.903v-.933zM17.856 2h-.903v.933h.903V2zM20.665 2.602h-.903v.933h.903v-.933z",fill:"#03A9DA"}),c("path",{d:"M7.12 5.311h-.903v.933h.903v-.933zM1.903 15.244H1v.933h.903v-.933zM25.782 5.21h-.903v.934h.903V5.21zM2.505 12.335h-.903v.933h.903v-.934zM12.137 2.502h-.903v.933h.903v-.933zM3.508 9.726h-.903v.933h.903v-.933zM5.113 7.318H4.21v.933h.903v-.933zM9.629 3.806h-.903v.903h.903v-.903zM15.047 2.1h-.903v.903h.903V2.1zM23.374 3.605h-.903v.933h.903v-.933zM29.295 9.726h-.903v.933h.903v-.933zM30.498 12.335h-.903v.933h.903v-.934zM27.69 7.318h-.904v.933h.903v-.933zM30.9 15.144h-.903v.933h.903v-.933zM17.856 2h-.903v.933h.903V2zM20.665 2.602h-.903v.933h.903v-.933zM25.682 27.886h-.903v.933h.903v-.933zM31 17.953h-.903v.933H31v-.933zM7.12 27.987h-.903v.933h.903v-.933zM30.398 20.763h-.903v.933h.903v-.933zM20.665 30.596h-.903v.933h.903v-.933zM29.295 23.371h-.903v.933h.903v-.933zM27.69 25.78h-.904v.932h.903v-.933zM23.274 29.793h-.903v.902h.903v-.902zM17.756 31.498h-.903v.903h.903v-.903zM9.428 29.492h-.903v.933h.903v-.933zM3.508 23.472h-.903v.933h.903v-.933zM2.304 20.863h-.903v.933h.903v-.933zM5.013 25.88H4.11v.933h.903v-.933zM1.903 17.953H1v.933h.903v-.933zM14.947 31.498h-.903v.933h.902v-.933zM12.137 30.596h-.903v.933h.903v-.933z",fill:"#03A9DA"})),c("defs",null,c("clipPath",{id:i("clip0")},c("path",{d:"M0 0h32v32H0V0z",fill:"#fff"}))))},igt=ogt;var SN={};de(SN,{icon:()=>cgt});var nvr=V(ne());var agt=["title","titleId"];function hae(){return hae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ugt=function(t){var n=t.title,r=t.titleId,o=sgt(t,agt),i=yo("logo_ibm");return c("svg",hae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("defs",null,c("linearGradient",{id:i("a"),x1:"8.005%",x2:"53.33%",y1:"79.323%",y2:"79.324%"},c("stop",{offset:"0%",stopColor:"#3BDADE",stopOpacity:0}),c("stop",{offset:"30.476%",stopColor:"#36CEE1",stopOpacity:.383}),c("stop",{offset:"100%",stopColor:"#21A2EF"})),c("linearGradient",{id:i("b"),x1:"19.496%",x2:"71.309%",y1:"83.344%",y2:"17.638%"},c("stop",{offset:"0%",stopColor:"#207FFA"}),c("stop",{offset:"100%",stopColor:"#6EAFF1",stopOpacity:0})),c("linearGradient",{id:i("c"),x1:"21.909%",x2:"21.909%",y1:"96.314%",y2:"29.454%"},c("stop",{offset:"0%",stopColor:"#42C1E6",stopOpacity:0}),c("stop",{offset:"57.076%",stopColor:"#6FB9EF"}),c("stop",{offset:"86.716%",stopColor:"#60CBE7"}),c("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),c("linearGradient",{id:i("d"),x1:"96.205%",x2:"-1.172%",y1:"12.667%",y2:"-22.252%"},c("stop",{offset:"0%",stopColor:"#6FB9EF",stopOpacity:0}),c("stop",{offset:"22.427%",stopColor:"#38D2E0"}),c("stop",{offset:"91.203%",stopColor:"#6ABFEC"}),c("stop",{offset:"100%",stopColor:"#5CCFE5",stopOpacity:0})),c("linearGradient",{id:i("e"),x1:"9.408%",x2:"80.589%",y1:"87.764%",y2:"83.138%"},c("stop",{offset:"0%",stopColor:"#126CFD"}),c("stop",{offset:"100%",stopColor:"#21A1EF"}))),c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#38D2E0",d:"M4.262 13.122a.604.604 0 01-.3-.08l-2.844-1.625a.617.617 0 01-.295-.734.608.608 0 01.868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 01-.533.32zm4.914-4.864a.603.603 0 01-.522-.298L7.012 5.144a.615.615 0 01.115-.782.606.606 0 01.91.157l1.64 2.813a.617.617 0 01-.158.819c-.1.07-.22.107-.343.107zm6.107-2.416V2.635a.624.624 0 01.575-.634.605.605 0 01.443.164.593.593 0 01.186.431v3.285a.593.593 0 01-.186.43.605.605 0 01-.443.165.624.624 0 01-.575-.634zm7.312 2.416a.604.604 0 01-.343-.107.617.617 0 01-.159-.82l1.64-2.812a.602.602 0 01.911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 01-.522.298zm4.914 4.864a.602.602 0 01-.534-.319.616.616 0 01.262-.81l2.818-1.611a.626.626 0 01.783.112.592.592 0 01-.156.906l-2.873 1.643a.604.604 0 01-.3.08z"}),c("path",{fill:"url(#".concat(i("a"),")"),d:"M16.536 19.645l-1.204-.009c.026-3.377 2.146-6.391 5.337-7.585a8.308 8.308 0 019.068 2.197l-.897.795a7.097 7.097 0 00-7.745-1.876c-2.726 1.019-4.537 3.593-4.559 6.478z",transform:"translate(0 2)"}),c("path",{fill:"url(#".concat(i("b"),")"),d:"M.029 20.909c.022-3.354 2.475-6.208 5.815-6.764l.201 1.176c-2.764.46-4.794 2.82-4.812 5.596L.029 20.91z",transform:"translate(0 2)"}),c("path",{fill:"url(#".concat(i("c"),")"),d:"M8.246 24.737a10.625 10.625 0 010-15.131c4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 011.384 1.678l-1.004.657a9.517 9.517 0 00-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.442 9.442 0 000 13.445l-.851.843z",transform:"translate(0 2)"}),c("path",{fill:"url(#".concat(i("d"),")"),d:"M5.836 13.234c.404-1.332 1.33-2.56 2.41-3.628 4.219-4.178 11.06-4.178 15.279 0a10.89 10.89 0 011.384 1.678l-1.004.657a9.517 9.517 0 00-1.231-1.492c-3.75-3.713-9.828-3.713-13.577 0a9.474 9.474 0 00-2.074 3.06c-1.452 3.45-2.358 3.593-1.187-.275z",transform:"translate(0 2)"}),c("path",{fill:"url(#".concat(i("e"),")"),d:"M23.524 27.87H6.96a7.012 7.012 0 01-4.922-2.059A6.876 6.876 0 01.029 20.91l1.204.009a5.69 5.69 0 001.66 4.055 5.802 5.802 0 004.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 00-1.18-7.505l.897-.795a8.112 8.112 0 011.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838h-.063z",transform:"translate(0 2)"})))},cgt=ugt;var EN={};de(EN,{icon:()=>mgt});var avr=V(ne());var fgt=["title","titleId"];function mae(){return mae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hgt=function(t){var n=t.title,r=t.titleId,o=pgt(t,fgt);return c("svg",mae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M.047 22.909l1.186.009a5.69 5.69 0 001.66 4.055 5.802 5.802 0 004.071 1.705h16.618c2.78.002 5.302-1.616 6.438-4.13a6.929 6.929 0 00-1.18-7.505l.897-.795a8.112 8.112 0 011.384 8.785c-1.329 2.943-4.279 4.837-7.534 4.838H6.96a7.012 7.012 0 01-4.922-2.06A6.876 6.876 0 01.029 22.91h.018-.018c.017-2.71 1.62-5.091 3.997-6.2.114-.054.32.29.619 1.03a5.71 5.71 0 00-3.412 5.18l-1.186-.01zm4.215-9.787a.604.604 0 01-.3-.08l-2.844-1.625a.617.617 0 01-.295-.734.608.608 0 01.868-.315l2.843 1.625c.29.159.405.514.261.81a.603.603 0 01-.533.32zm4.914-4.864a.603.603 0 01-.522-.298L7.012 5.144a.615.615 0 01.115-.782.606.606 0 01.91.157l1.64 2.813a.617.617 0 01-.158.819c-.1.07-.22.107-.343.107zm6.107-2.416V2.635a.624.624 0 01.575-.634.605.605 0 01.443.164.593.593 0 01.186.431v3.285a.593.593 0 01-.186.43.605.605 0 01-.443.165.624.624 0 01-.575-.634zm7.312 2.416a.604.604 0 01-.343-.107.617.617 0 01-.159-.82l1.64-2.812a.602.602 0 01.911-.157c.223.2.271.528.115.782L23.117 7.96a.603.603 0 01-.522.298zm4.914 4.864a.602.602 0 01-.534-.319.616.616 0 01.262-.81l2.818-1.611a.626.626 0 01.783.112.592.592 0 01-.156.906l-2.873 1.643a.604.604 0 01-.3.08zM16.366 19.78H16a2.322 2.322 0 01-.302 0c-.09-.011-.152.05-.086-.196a8.204 8.204 0 015.057-5.533 8.308 8.308 0 019.068 2.197l-.897.795a7.097 7.097 0 00-7.745-1.876 7.009 7.009 0 00-4.288 4.613c-.115.399-.115.399 0 0h-.44zM6.154 23.826a10.626 10.626 0 012.092-12.22c4.219-4.178 11.06-4.178 15.279 0l-.851.843c-3.75-3.713-9.828-3.713-13.577 0A9.442 9.442 0 007.264 23.36a6.99 6.99 0 00-.418.172l-.212.094-.162.077-.094.03-.09.039c.648-.282.965-.42.95-.412-.026.015-1.073.489-1.084.466z"}))},mgt=hgt;var IN={};de(IN,{icon:()=>wgt});var lvr=V(ne());var vgt=["title","titleId"];function vae(){return vae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ygt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bgt=function(t){var n=t.title,r=t.titleId,o=ggt(t,vgt);return c("svg",vae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M21.565 17.623c-1.173 0-2.225.52-2.945 1.337l-1.845-1.306c.196-.54.309-1.118.309-1.724 0-.596-.109-1.165-.298-1.696l1.84-1.293a3.914 3.914 0 002.939 1.331 3.93 3.93 0 003.926-3.926 3.93 3.93 0 00-3.926-3.926 3.93 3.93 0 00-3.926 3.926c0 .387.058.761.163 1.115l-1.842 1.293a5.068 5.068 0 00-3.14-1.825V8.71a3.932 3.932 0 003.119-3.842A3.93 3.93 0 0012.012.941a3.93 3.93 0 00-3.926 3.926 3.93 3.93 0 003.048 3.824v2.249a5.075 5.075 0 00-4.193 4.99 5.075 5.075 0 004.229 4.995V23.3a3.931 3.931 0 00-3.084 3.833 3.93 3.93 0 003.926 3.926 3.93 3.93 0 003.927-3.926 3.931 3.931 0 00-3.084-3.833v-2.375a5.07 5.07 0 003.087-1.795l1.857 1.314c-.103.351-.16.721-.16 1.105a3.93 3.93 0 003.926 3.926 3.93 3.93 0 003.926-3.926 3.93 3.93 0 00-3.926-3.926zm0-9.18c1.05 0 1.903.853 1.903 1.903s-.854 1.903-1.903 1.903a1.906 1.906 0 01-1.904-1.903c0-1.05.854-1.904 1.904-1.904zM10.109 4.866c0-1.05.854-1.903 1.903-1.903 1.05 0 1.904.854 1.904 1.903 0 1.05-.854 1.904-1.904 1.904a1.906 1.906 0 01-1.903-1.904zm3.807 22.266c0 1.05-.854 1.903-1.904 1.903a1.906 1.906 0 01-1.903-1.903c0-1.05.854-1.904 1.903-1.904 1.05 0 1.904.854 1.904 1.904zm-1.904-8.548a2.658 2.658 0 01-2.655-2.655 2.658 2.658 0 012.655-2.655 2.658 2.658 0 012.655 2.655 2.658 2.658 0 01-2.655 2.655zm9.553 4.867a1.906 1.906 0 01-1.904-1.903c0-1.05.854-1.904 1.904-1.904 1.05 0 1.903.854 1.903 1.904 0 1.05-.854 1.903-1.903 1.903z"}))},wgt=bgt;var kN={};de(kN,{icon:()=>Egt});var cvr=V(ne());var Ogt=["title","titleId"];function gae(){return gae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _gt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sgt=function(t){var n=t.title,r=t.titleId,o=xgt(t,Ogt);return c("svg",gae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#F04E98",d:"M4 0v28.789L28.935.017z"}),c("path",{className:"euiIcon__fillNegative",d:"M4 12v16.789l11.906-13.738A24.721 24.721 0 004 12"}),c("path",{fill:"#00BFB3",d:"M18.479 16.664L6.268 30.754l-1.073 1.237h23.191c-1.252-6.292-4.883-11.719-9.908-15.327"})))},Egt=Sgt;var PN={};de(PN,{icon:()=>Cgt});var pvr=V(ne());var Igt=["title","titleId"];function yae(){return yae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jgt=function(t){var n=t.title,r=t.titleId,o=kgt(t,Igt);return c("svg",yae({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M15.89.003a2.14 2.14 0 011.03.206l11.127 5.304a2.11 2.11 0 011.15 1.429l2.75 11.921a2.09 2.09 0 01-.412 1.783l-7.697 9.56c-.404.5-1.016.792-1.663.791L9.827 31c-.648 0-1.26-.292-1.664-.793l-7.7-9.558a2.107 2.107 0 01-.41-1.783L2.798 6.945a2.11 2.11 0 011.151-1.43L15.074.21c.255-.122.532-.192.815-.206zM16 4.06c-.368 0-.667.33-.667.738l.002.019c0 .055-.003.122-.002.17.01.236.06.416.091.632.057.464.103.849.074 1.206-.028.135-.127.258-.216.344l-.015.281a8.569 8.569 0 00-5.555 2.666 9.98 9.98 0 01-.24-.17c-.12.016-.24.053-.396-.038-.298-.2-.57-.477-.898-.81-.15-.16-.26-.31-.438-.464-.04-.035-.103-.082-.148-.118a.793.793 0 00-.464-.175.642.642 0 00-.53.234c-.23.288-.156.726.163.98l.01.008c.044.035.098.08.138.11.19.14.363.212.552.323.398.246.729.45.99.695.103.108.12.3.134.383l.214.19a8.592 8.592 0 00-1.36 5.998l-.278.08c-.074.096-.177.245-.286.29-.343.107-.728.147-1.194.195-.218.018-.407.008-.639.051-.05.01-.122.029-.177.042l-.006.001-.01.003c-.393.095-.645.455-.564.81.082.355.465.57.86.485l.01-.001.013-.004c.055-.012.124-.026.172-.039.228-.06.393-.15.597-.228.44-.158.806-.29 1.161-.341.149-.012.305.091.383.135l.29-.05a8.654 8.654 0 003.84 4.787l-.12.29c.043.113.091.265.059.376-.13.334-.35.688-.603 1.081-.122.182-.247.324-.357.532-.026.05-.06.126-.086.179-.17.365-.045.786.284.944.33.16.741-.008.919-.375l.001-.001v-.002c.025-.051.061-.12.083-.169.094-.215.125-.4.192-.609.176-.442.273-.905.515-1.194.067-.08.175-.11.287-.14l.151-.273a8.616 8.616 0 006.145.016l.142.256c.114.037.239.056.34.206.182.31.306.675.457 1.118.066.208.1.393.194.61.021.048.057.117.082.17.177.367.59.535.92.376.33-.158.455-.58.284-.945-.026-.052-.06-.129-.087-.179-.11-.208-.235-.348-.357-.53-.252-.393-.461-.72-.59-1.055-.055-.173.009-.28.05-.392-.025-.029-.079-.192-.11-.268a8.654 8.654 0 003.838-4.822c.086.014.236.04.285.05.1-.066.192-.152.373-.138.355.052.72.183 1.16.341.205.078.37.17.598.23.048.013.117.025.172.037l.013.004.01.002c.395.085.778-.131.86-.486.08-.355-.171-.715-.564-.81-.057-.013-.138-.035-.193-.045-.232-.044-.42-.033-.64-.051-.465-.049-.85-.089-1.193-.196-.14-.054-.239-.22-.287-.289l-.27-.078a8.572 8.572 0 00-.139-3.104 8.599 8.599 0 00-1.247-2.88c.068-.062.199-.177.236-.21.01-.12.001-.245.125-.377.262-.246.592-.45.99-.695.19-.11.364-.182.554-.322.043-.032.101-.082.146-.118.32-.255.393-.693.164-.98-.23-.287-.674-.314-.993-.06-.046.036-.107.083-.148.118-.179.153-.29.305-.44.464-.328.333-.6.611-.898.812-.129.075-.318.049-.404.044l-.253.18a8.732 8.732 0 00-5.528-2.666 16.036 16.036 0 01-.015-.297c-.087-.083-.192-.154-.218-.333-.029-.357.02-.742.076-1.206.03-.216.082-.396.09-.632.003-.053 0-.13 0-.189 0-.408-.299-.738-.667-.738zm-.834 5.156l-.198 3.488-.014.007a.587.587 0 01-.932.449l-.006.002-2.864-2.027a6.862 6.862 0 014.014-1.919zm1.668 0a6.922 6.922 0 013.99 1.92l-2.846 2.015-.01-.004a.588.588 0 01-.933-.448l-.003-.001-.198-3.482zm-6.72 3.222l2.614 2.335-.003.014a.585.585 0 01-.23 1.008l-.003.01-3.352.967a6.838 6.838 0 01.973-4.334zm11.753.001c.388.63.683 1.331.858 2.093a6.91 6.91 0 01.145 2.229l-3.37-.97-.002-.013a.586.586 0 01-.23-1.008l-.002-.007 2.6-2.324zm-6.404 2.515h1.071l.666.83-.239 1.038-.962.461-.964-.463-.24-1.037.668-.83zm3.435 2.844a.585.585 0 01.135.01l.005-.008 3.468.586a6.858 6.858 0 01-2.776 3.481l-1.346-3.246.004-.005a.586.586 0 01.51-.818zm-5.824.014a.587.587 0 01.53.817l.01.012-1.331 3.214a6.886 6.886 0 01-2.767-3.458l3.437-.582.006.007a.595.595 0 01.115-.01zm2.904 1.407a.582.582 0 01.275.059.583.583 0 01.263.25h.013l1.694 3.057c-.22.073-.446.136-.677.189a6.896 6.896 0 01-3.758-.194l1.69-3.05h.003a.588.588 0 01.497-.31z",fill:"#326CE5"}))},Cgt=jgt;var jN={};de(jN,{icon:()=>Dgt});var hvr=V(ne());var Tgt=["title","titleId"];function bae(){return bae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rgt=function(t){var n=t.title,r=t.titleId,o=Agt(t,Tgt);return c("svg",bae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#0080D5",d:"M2 10v13a9 9 0 019 9h13c0-12.15-9.85-22-22-22"}),c("path",{className:"euiIcon__fillNegative",d:"M14 13.565V32h10c0-7.722-3.981-14.51-10-18.436"}),c("path",{fill:"#00BFB3",d:"M14 0v10.226C21.666 14.468 26.869 22.636 26.869 32H30V16c0-8.837-7.163-16-16-16"}))},Dgt=Rgt;var CN={};de(CN,{icon:()=>Bgt});var vvr=V(ne());var zgt=["title","titleId"];function wae(){return wae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fgt=function(t){var n=t.title,r=t.titleId,o=Ngt(t,zgt);return c("svg",wae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#3EBEB0",d:"M19 32h11V20H19z"}),c("path",{fill:"#FEC514",d:"M4 0H3v20h13v-8C16 5.373 10.627 0 4 0"}),c("path",{className:"euiIcon__fillNegative",d:"M3 20c0 6.627 5.373 12 12 12h1V20H3z"}))},Bgt=Fgt;var TN={};de(TN,{icon:()=>qgt});var yvr=V(ne());var Wgt=["title","titleId"];function Oae(){return Oae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $gt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vgt=function(t){var n=t.title,r=t.titleId,o=Hgt(t,Wgt);return c("svg",Oae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#22A7F3",d:"M25.5 9.5c0 6.65-9.5 11.425-9.5 11.425S6.5 16.15 6.5 9.5A9.5 9.5 0 0116 0a9.5 9.5 0 019.5 9.5"}),c("path",{className:"euiIcon__fillNegative",d:"M16 20.925s4.326-2.183 7.141-5.645l-2.505-1.878a7.725 7.725 0 00-9.272 0L8.859 15.28C11.674 18.742 16 20.925 16 20.925"}),c("path",{fill:"#FA744E",d:"M25.53 17.073a21.124 21.124 0 01-2.834 2.916c-2.62 2.235-5.239 3.561-5.349 3.616L16 24.282l-1.348-.677c-.109-.055-2.728-1.381-5.349-3.616a21.182 21.182 0 01-2.834-2.916L0 21.925l11.364 8.523a7.724 7.724 0 009.271 0L32 21.925l-6.47-4.852z"}))},qgt=Vgt;var AN={};de(AN,{icon:()=>Kgt});var wvr=V(ne());var Ugt=["title","titleId"];function xae(){return xae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xgt=function(t){var n=t.title,r=t.titleId,o=Ggt(t,Ugt),i=yo("logo_memcached");return c("svg",xae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("defs",null,c("radialGradient",{id:i("c"),cx:"41.406%",cy:"42.708%",r:"0%",fx:"41.406%",fy:"42.708%"},c("stop",{offset:"0%",stopColor:"#DB7C7C"}),c("stop",{offset:"100%",stopColor:"#C83737"})),c("radialGradient",{id:i("d"),cx:"44.271%",cy:"42.708%",r:"0%",fx:"44.271%",fy:"42.708%"},c("stop",{offset:"0%",stopColor:"#DB7C7C"}),c("stop",{offset:"100%",stopColor:"#C83737"})),c("linearGradient",{id:i("a"),x1:"50%",x2:"50%",y1:"100%",y2:"0%"},c("stop",{offset:"0%",stopColor:"#574C4A"}),c("stop",{offset:"100%",stopColor:"#80716D"})),c("linearGradient",{id:i("b"),x1:"88.778%",x2:"30.149%",y1:"98.342%",y2:"-8.68%"},c("stop",{offset:"0%",stopColor:"#268D83"}),c("stop",{offset:"100%",stopColor:"#2EA19E"}))),c("g",{fill:"none"},c("path",{fill:"url(#".concat(i("a"),")"),d:"M0 21.567V10.352C0 1.294 1.293 0 10.342 0h11.236c9.049 0 10.341 1.294 10.341 10.352v11.215c0 9.059-1.292 10.352-10.341 10.352H10.342C1.292 31.92 0 30.626 0 21.567z"}),c("path",{fill:"url(#".concat(i("b"),")"),d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27h4.904c-.466-2.483-2.14-13.824-.748-13.861.746.118 4.156 9.621 4.156 9.621s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.41-9.503 4.157-9.621c1.392.037-.282 11.378-.748 13.86h4.904s.82-9.31-.748-19.253h-4.54c-.865.01-4.153 5.777-4.531 5.777-.378 0-3.666-5.767-4.53-5.777H6.889z"}),c("path",{fill:"url(#".concat(i("c"),")"),d:"M14.993 24.109a1.16 1.16 0 11-2.322 0 1.16 1.16 0 012.322 0z"}),c("path",{fill:"url(#".concat(i("d"),")"),d:"M19.249 24.109a1.16 1.16 0 11-2.322 0 1.16 1.16 0 012.322 0z"}),c("path",{fill:"#000",d:"M24.8 6.345c.707 4.79.873 9.388.86 12.813-.013 3.503-.214 5.78-.214 5.78h-4.128l-.443.332h4.904s.82-9.31-.748-19.254l-.232.329zm-12.996-.121c1.288 1.433 3.516 5.237 3.823 5.237-.817-1.045-2.823-4.378-3.823-5.237zm-1.84 4.852c-1.392.038.282 11.379.749 13.861H6.43l-.29.333h4.904c-.464-2.47-2.123-13.71-.769-13.861-.126-.19-.235-.32-.311-.333zm11.326 0c-.746.119-4.156 9.622-4.156 9.622s-.751-.094-1.507-.094c-.447 0-.832.028-1.092.052l-.082.374s.751-.093 1.507-.093c.755 0 1.506.093 1.506.093s3.385-9.44 4.146-9.621c-.082-.208-.183-.33-.322-.333z",opacity:.1}),c("path",{fill:"#FFF",d:"M6.889 6.016C5.32 15.96 6.14 25.27 6.14 25.27l.289-.325c-.148-2.197-.543-10.14.791-18.597h4.541c.096.002.225.08.374.208-.297-.33-.544-.538-.706-.54H6.889zm13.601 0c-.864.01-4.152 5.777-4.53 5.777.154.197.279.333.332.333.378 0 3.666-5.767 4.53-5.777h4.008l.2-.333h-4.54zm-9.881 5.725c1.103 1.657 3.844 9.29 3.844 9.29l.08-.373c-.676-1.856-3.256-8.814-3.903-8.917h-.021zm11.346 0c.74 1.887-.66 11.295-1.08 13.529l.444-.348c.568-3.331 1.936-13.146.636-13.18z",opacity:.3})))},Kgt=Xgt;var MN={};de(MN,{icon:()=>tyt});var _vr=V(ne());var Ygt=["title","titleId"];function _ae(){return _ae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zgt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var eyt=function(t){var n=t.title,r=t.titleId,o=Qgt(t,Ygt);return c("svg",_ae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#F04E98",d:"M2 32h28V20l-6.465-6.465a5 5 0 00-7.07 0L2 28v4z"}),c("path",{className:"euiIcon__fillNegative",d:"M16.465 13.535l-3.536 3.536a9.965 9.965 0 007.07 2.93 9.965 9.965 0 007.072-2.93l-3.536-3.536a5 5 0 00-7.07 0"}),c("path",{fill:"#FEC514",d:"M14.343 11.414A7.951 7.951 0 0120 9.071c2.137 0 4.146.832 5.657 2.343l3.207 3.207A9.955 9.955 0 0030 10.001c0-5.524-4.477-10-10-10-5.522 0-10 4.476-10 10 0 1.667.414 3.237 1.137 4.62l3.206-3.207z"})))},tyt=eyt;var RN={};de(RN,{icon:()=>ayt});var Evr=V(ne());var ryt=["title","titleId"];function Sae(){return Sae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iyt=function(t){var n=t.title,r=t.titleId,o=nyt(t,ryt);return c("svg",Sae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#FFF",d:"M16.844 31.847l-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345z"}),c("path",{fill:"#A6A385",d:"M16.844 31.847l-.847-.29s.104-4.315-1.445-4.625c-1.032-1.198.165-50.8 3.882-.165 0 0-1.28.64-1.507 1.735-.248 1.074-.083 3.345-.083 3.345z"}),c("path",{fill:"#FFF",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),c("path",{fill:"#499D4A",d:"M17.299 27.676s7.413-4.874 5.678-15.013c-1.672-7.372-5.616-9.788-6.05-10.718-.475-.66-.93-1.817-.93-1.817l.31 20.506c0 .02-.64 6.278.992 7.042"}),c("path",{fill:"#FFF",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473z"}),c("path",{fill:"#58AA50",d:"M15.564 27.944s-6.96-4.75-6.546-13.113c.392-8.363 5.307-12.473 6.257-13.216.62-.66.64-.909.681-1.57.434.93.351 13.898.413 15.426.186 5.886-.33 11.358-.805 12.473z"})))},ayt=iyt;var DN={};de(DN,{icon:()=>fyt});var kvr=V(ne());var syt=["title","titleId"];function Eae(){return Eae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cyt=function(t){var n=t.title,r=t.titleId,o=lyt(t,syt);return c("svg",Eae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"#00546B"},c("path",{d:"M29.456 24.276c-1.74-.043-3.088.131-4.219.61-.326.13-.848.13-.892.543.174.174.196.457.348.696.261.435.718 1.022 1.131 1.327.457.348.914.696 1.392 1 .848.522 1.805.827 2.631 1.349.48.304.957.695 1.436 1.022.24.173.391.456.696.565v-.065c-.153-.196-.196-.479-.348-.696-.218-.218-.435-.413-.653-.63a10.316 10.316 0 00-2.261-2.197c-.696-.479-2.219-1.131-2.501-1.936l-.044-.043c.479-.044 1.044-.218 1.5-.348.74-.196 1.414-.153 2.175-.348.348-.087.696-.196 1.044-.305v-.195c-.391-.392-.674-.914-1.087-1.284-1.11-.957-2.327-1.892-3.588-2.674-.675-.435-1.545-.718-2.262-1.088-.261-.13-.696-.196-.848-.413-.392-.479-.61-1.11-.892-1.675a54.922 54.922 0 01-1.783-3.784c-.392-.848-.63-1.696-1.11-2.479-2.24-3.697-4.675-5.937-8.416-8.134-.804-.456-1.761-.652-2.783-.891-.544-.022-1.088-.065-1.631-.087-.348-.152-.696-.566-1-.761-1.24-.783-4.437-2.48-5.35-.24-.588 1.414.87 2.806 1.37 3.524.37.5.848 1.065 1.109 1.63.152.37.195.762.347 1.153.348.957.675 2.023 1.131 2.914.24.457.5.936.805 1.349.174.239.478.348.544.74-.305.434-.327 1.087-.5 1.63-.783 2.458-.479 5.502.63 7.307.348.544 1.175 1.74 2.284 1.284.978-.392.76-1.632 1.043-2.719.066-.261.022-.435.153-.609v.044c.304.609.609 1.196.891 1.805.675 1.065 1.849 2.174 2.828 2.914.522.391.935 1.065 1.587 1.305v-.066h-.043c-.13-.195-.327-.282-.5-.435-.392-.39-.827-.87-1.131-1.304-.914-1.218-1.719-2.567-2.436-3.958-.348-.675-.653-1.414-.935-2.088-.13-.261-.13-.653-.348-.783-.327.478-.805.892-1.044 1.479-.413.935-.457 2.088-.61 3.284-.086.021-.043 0-.086.043-.696-.174-.935-.891-1.196-1.5-.653-1.545-.761-4.024-.196-5.807.152-.457.805-1.892.544-2.327-.13-.413-.566-.652-.805-.979a8.764 8.764 0 01-.783-1.392c-.522-1.217-.783-2.566-1.348-3.784-.261-.565-.718-1.152-1.087-1.674-.414-.587-.87-1-1.197-1.697-.108-.239-.26-.63-.087-.891.044-.174.13-.24.305-.283.283-.24 1.087.065 1.37.196.805.326 1.479.63 2.153 1.087.304.218.63.631 1.022.74h.457c.696.152 1.479.043 2.131.239 1.153.37 2.196.913 3.132 1.5a19.294 19.294 0 016.785 7.438c.261.5.37.957.609 1.479.457 1.066 1.022 2.153 1.479 3.197.456 1.022.891 2.066 1.544 2.914.326.457 1.63.696 2.218.935.435.196 1.11.37 1.5.61.74.456 1.48.978 2.175 1.478.348.26 1.436.805 1.501 1.24z"}),c("path",{d:"M7.273 5.378c-.37 0-.63.043-.891.109v.043h.043c.174.348.479.587.696.892.174.348.326.696.5 1.044l.044-.044c.304-.217.457-.565.457-1.087-.131-.152-.153-.305-.261-.457-.13-.218-.414-.326-.588-.5z"})))},fyt=cyt;var zN={};de(zN,{icon:()=>vyt});var jvr=V(ne());var pyt=["title","titleId"];function Iae(){return Iae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var myt=function(t){var n=t.title,r=t.titleId,o=dyt(t,pyt);return c("svg",Iae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#119639",d:"M16 0l13.856 8v16L16 32 2.144 24V8z"}),c("path",{fill:"#FFF",fillRule:"nonzero",d:"M11.17 13.512v8.376a1.607 1.607 0 11-3.215 0V9.632c0-1.432 1.731-2.149 2.744-1.136l9.51 9.512V9.632a1.607 1.607 0 013.215 0v12.256c0 1.432-1.731 2.149-2.744 1.136l-9.51-9.512z"})))},vyt=myt;var NN={};de(NN,{icon:()=>Oyt});var Tvr=V(ne());var gyt=["title","titleId"];function kae(){return kae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function byt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wyt=function(t){var n=t.title,r=t.titleId,o=yyt(t,gyt);return c("svg",kae({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10 32H7.238C3.793 32 1 28.865 1 24.998V15h9v17z",fill:"#F04E98"}),c("path",{className:"euiIcon__fillNegative",d:"M10 32h9V8h-9z"}),c("path",{d:"M31 32h-9V0l1.973.024C27.866.072 31 3.731 31 8.228V32z",fill:"#07C"}))},Oyt=wyt;var LN={};de(LN,{icon:()=>Iyt});var Mvr=V(ne());var xyt=["title","titleId"];function Pae(){return Pae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Syt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Eyt=function(t){var n=t.title,r=t.titleId,o=_yt(t,xyt);return c("svg",Pae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#A596FF",d:"M31.907.032v7.969l-7.952 7.951V7.967L31.907.032"}),c("path",{fill:"#333",d:"M16.003.032v7.969l7.952 7.951V7.967L16.003.032"}),c("path",{fill:"#A596FF",d:"M31.923 31.855h-7.968l-7.952-7.951h7.985l7.935 7.951"}),c("path",{fill:"#333",d:"M31.923 15.952h-7.968l-7.952 7.952h7.985l7.935-7.952"}),c("path",{fill:"#A596FF",d:"M.1 31.872v-7.968l7.952-7.952v7.985L.1 31.872"}),c("path",{fill:"#333",d:"M16.004 31.872v-7.968l-7.952-7.952v7.985l7.952 7.935"}),c("path",{fill:"#A596FF",d:"M.084.048h7.968L16.004 8H8.019L.084.048"}),c("path",{fill:"#333",d:"M.084 15.952h7.968L16.004 8H8.019L.084 15.952"})))},Iyt=Eyt;var FN={};de(FN,{icon:()=>Tyt});var Dvr=V(ne());var kyt=["title","titleId"];function jae(){return jae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cyt=function(t){var n=t.title,r=t.titleId,o=Pyt(t,kyt),i=yo("logo_php");return c("svg",jae({xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("defs",null,c("path",{id:i("a"),d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}),c("path",{id:i("d"),d:"M0 17.43h30.987V0H0z"}),c("path",{id:i("f"),d:"M0 17.43h30.987V0H0z"}),c("radialGradient",{id:i("b"),cx:"30.02%",cy:"82.422%",r:"124.814%",fx:"30.02%",fy:"82.422%",gradientTransform:"matrix(.52604 0 0 1 .142 0)"},c("stop",{offset:"0%",stopColor:"#AEB2D5"}),c("stop",{offset:"30%",stopColor:"#AEB2D5"}),c("stop",{offset:"75%",stopColor:"#484C89"}),c("stop",{offset:"100%",stopColor:"#484C89"}))),c("g",{fill:"none",fillRule:"evenodd",transform:"matrix(1 0 0 -1 .026 25.413)"},c("g",{transform:"translate(.592 .86)"},c("mask",{id:i("c"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("a"))})),c("g",{fill:"url(#".concat(i("b"),")"),fillRule:"nonzero",mask:"url(#".concat(i("c"),")")},c("path",{d:"M.028 7.854C.028 3.534 6.688.03 14.902.03s14.874 3.503 14.874 7.824c0 4.322-6.66 7.825-14.874 7.825-8.215 0-14.874-3.503-14.874-7.825"}))),c("mask",{id:i("e"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("d"))})),c("g",{mask:"url(#".concat(i("e"),")")},c("path",{fill:"#777BB3",fillRule:"nonzero",d:"M15.494 1.472c7.894 0 14.293 3.243 14.293 7.243s-6.4 7.244-14.293 7.244c-7.894 0-14.293-3.243-14.293-7.244 0-4 6.4-7.243 14.293-7.243"})),c("mask",{id:i("g"),fill:"#fff"},c("use",{xlinkHref:"#".concat(i("f"))})),c("g",{fillRule:"nonzero",mask:"url(#".concat(i("g"),")")},c("path",{fill:"#000",d:"M8.701 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306H8.433l-.575-2.959h.843zM5.31 4.172a.161.161 0 00-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.686 3.686 0 00-.395-1.098 3.676 3.676 0 00-.727-.91 3.189 3.189 0 00-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 00-.158-.13H5.309z"}),c("path",{fill:"#FFF",d:"M8.566 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.291-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636zm1.551 1.883H6.833a.323.323 0 01-.317-.261L4.992 4.396a.323.323 0 01.317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888zM7.663 7.656h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36H8.3l-.638-3.282zm2.454 4.52c.989 0 1.71-.26 2.162-.779.453-.518.59-1.242.41-2.172a3.51 3.51 0 00-.378-1.05 3.502 3.502 0 00-.695-.87 3.017 3.017 0 00-1.137-.683c-.417-.135-.948-.203-1.594-.203H7.422l-.405-2.085H5.309l1.524 7.841h3.284z"}),c("path",{fill:"#000",d:"M16.763 6.257a.161.161 0 00-.159.192l.674 3.47c.064.33.049.566-.044.666-.057.061-.228.164-.732.164H15.28l-.847-4.361a.161.161 0 00-.159-.131H12.58a.161.161 0 00-.159.192l1.524 7.841c.015.076.082.13.159.13h1.694a.161.161 0 00.159-.191l-.368-1.893h1.314c1 0 1.68-.176 2.075-.54.403-.37.529-.962.374-1.76l-.71-3.648a.161.161 0 00-.158-.131h-1.721z"}),c("path",{fill:"#FFF",d:"M15.799 14.582h-1.695a.323.323 0 01-.317-.261L12.263 6.48a.323.323 0 01.317-.385h1.695c.154 0 .287.11.317.262l.822 4.23h1.088c.504 0 .61-.107.614-.112.03-.033.07-.185.004-.526l-.674-3.47a.323.323 0 01.317-.384h1.721c.155 0 .288.11.317.262l.71 3.648c.166.857.023 1.5-.424 1.91-.426.392-1.14.582-2.184.582h-1.118l.33 1.7a.323.323 0 01-.316.385m0-.323l-.406-2.084h1.51c.95 0 1.605-.166 1.966-.497.36-.332.468-.869.324-1.611l-.709-3.649h-1.721l.674 3.47c.077.394.048.663-.085.807-.133.143-.416.215-.85.215h-1.354l-.873-4.492H12.58l1.524 7.841h1.695"}),c("path",{fill:"#000",d:"M22.033 7.817c.65 0 1.134.12 1.44.356.304.233.513.638.623 1.202.103.528.064.896-.116 1.095-.183.203-.58.306-1.177.306h-1.038l-.575-2.959h.843zm-3.392-3.645a.161.161 0 00-.159.193l1.524 7.84c.015.076.082.131.159.131h3.284c1.033 0 1.801-.28 2.284-.833.485-.556.635-1.333.446-2.309a3.689 3.689 0 00-.395-1.098 3.676 3.676 0 00-.727-.91 3.189 3.189 0 00-1.197-.718c-.43-.14-.983-.21-1.643-.21h-1.33l-.38-1.955a.161.161 0 00-.158-.13H18.64z"}),c("path",{fill:"#FFF",d:"M21.898 10.615h.905c.722 0 .972-.158 1.058-.253.141-.157.168-.487.077-.956-.102-.524-.292-.896-.563-1.105-.277-.214-.729-.322-1.341-.322h-.648l.512 2.636zm1.551 1.883h-3.284a.323.323 0 01-.317-.261l-1.524-7.841a.323.323 0 01.317-.385h1.708c.155 0 .287.11.317.262l.354 1.823h1.197c.677 0 1.247.074 1.694.22.46.149.882.402 1.256.752.31.284.564.604.758.95.193.345.331.731.412 1.146.2 1.027.038 1.85-.482 2.446-.515.59-1.325.888-2.406.888zm-2.454-4.842h1.039c.688 0 1.201.13 1.538.39.337.259.565.692.683 1.299.113.583.061.994-.155 1.233-.216.24-.648.36-1.297.36h-1.17l-.638-3.282zm2.454 4.52c.989 0 1.71-.26 2.162-.779.454-.518.59-1.242.41-2.172a3.51 3.51 0 00-.378-1.05 3.502 3.502 0 00-.695-.87 3.017 3.017 0 00-1.137-.683c-.417-.135-.948-.203-1.594-.203h-1.463l-.405-2.085h-1.708l1.524 7.841h3.284z"}))))},Tyt=Cyt;var BN={};de(BN,{icon:()=>zyt});var Lvr=V(ne());var Ayt=["title","titleId"];function Cae(){return Cae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ryt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dyt=function(t){var n=t.title,r=t.titleId,o=Myt(t,Ayt);return c("svg",Cae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#000",d:"M31.876 19.162c-.192-.564-.695-.956-1.345-1.05-.306-.045-.657-.026-1.072.057-.724.145-1.261.2-1.654.211 1.48-2.422 2.683-5.185 3.376-7.785 1.12-4.205.521-6.12-.178-6.987-1.85-2.293-4.551-3.525-7.809-3.563a14.239 14.239 0 00-4.06.551 15.573 15.573 0 00-2.373-.21c-1.567-.024-2.952.307-4.135.988a19.334 19.334 0 00-2.92-.711C6.85.208 4.549.563 2.866 1.716.828 3.112-.117 5.537.058 8.926.113 10 .734 13.273 1.71 16.376c.561 1.784 1.16 3.266 1.78 4.404.878 1.614 1.818 2.564 2.873 2.906.591.19 1.666.325 2.796-.588.143.168.334.335.588.49.322.198.716.359 1.109.454 1.418.344 2.745.258 3.878-.224.007.195.013.382.017.543.008.262.015.518.025.758.067 1.62.181 2.881.518 3.763l.07.201c.168.5.449 1.335 1.164 1.99.74.677 1.637.885 2.457.885.412 0 .804-.052 1.149-.124 1.227-.255 2.621-.643 3.63-2.036.953-1.316 1.417-3.299 1.5-6.423l.031-.253.02-.165.225.019.058.004c1.25.055 2.779-.202 3.718-.625.741-.334 3.119-1.55 2.559-3.194"}),c("path",{fill:"#336791",d:"M29.738 19.481c-3.717.744-3.973-.476-3.973-.476 3.925-5.648 5.566-12.817 4.15-14.571C26.052-.352 19.365 1.91 19.254 1.97l-.036.006a13.657 13.657 0 00-2.48-.25c-1.682-.027-2.958.427-3.927 1.14 0 0-11.928-4.766-11.374 5.992.118 2.289 3.383 17.318 7.278 12.779a70.443 70.443 0 012.798-3.064c.683.44 1.501.665 2.358.584l.067-.055c-.02.206-.011.408.027.647-1.004 1.087-.709 1.277-2.714 1.678-2.03.405-.837 1.127-.06 1.316.944.229 3.127.553 4.602-1.45l-.058.23c.393.304.669 1.985.623 3.508-.047 1.524-.078 2.57.232 3.387.31.817.619 2.655 3.255 2.107 2.203-.458 3.345-1.644 3.503-3.623.113-1.407.368-1.199.384-2.457l.205-.595c.236-1.907.037-2.522 1.394-2.236l.33.028c1 .044 2.307-.156 3.074-.502 1.652-.743 2.632-1.985 1.003-1.659"}),c("path",{fill:"#FFF",d:"M13.51 9.882c-.335-.045-.639-.004-.792.11a.28.28 0 00-.12.187c-.02.133.077.282.136.358.169.216.414.365.658.398.035.004.07.007.105.007.405 0 .774-.307.807-.533.04-.283-.383-.472-.795-.527m11.099.009c-.032-.222-.44-.285-.826-.233-.386.052-.76.22-.73.443.026.173.348.468.73.468a.718.718 0 00.097-.006.947.947 0 00.53-.281c.135-.138.213-.291.199-.391"}),c("path",{fill:"#FFF",d:"M30.975 19.397c-.142-.416-.598-.55-1.356-.398-2.25.45-3.056.139-3.321-.05 1.75-2.584 3.189-5.708 3.965-8.623.368-1.38.57-2.663.587-3.708.019-1.147-.183-1.99-.598-2.505-1.675-2.075-4.134-3.189-7.11-3.22-2.047-.022-3.775.486-4.11.629a10.549 10.549 0 00-2.313-.288c-1.536-.024-2.864.332-3.963 1.06a18.131 18.131 0 00-3.22-.82c-2.61-.407-4.683-.098-6.163.918C1.608 3.605.793 5.773.951 8.836c.053 1.03.658 4.2 1.614 7.236 1.258 3.996 2.625 6.257 4.063 6.723.169.054.363.092.577.092.525 0 1.168-.23 1.838-1.01a64.894 64.894 0 012.532-2.778 4.18 4.18 0 001.822.475l.005.048c-.11.127-.217.255-.321.385-.44.542-.532.655-1.95.938-.403.08-1.473.294-1.489 1.022-.017.795 1.266 1.13 1.412 1.165.509.123 1 .184 1.467.184 1.138 0 2.14-.363 2.94-1.064-.025 2.834.097 5.628.448 6.479.288.696.99 2.4 3.208 2.399a5.3 5.3 0 001.078-.119c2.315-.48 3.32-1.473 3.71-3.66.208-1.17.565-3.961.733-5.459.354.107.81.156 1.304.156 1.029 0 2.216-.212 2.961-.547.837-.377 2.346-1.3 2.072-2.104zM25.462 9.278c-.008.442-.07.844-.137 1.262-.072.451-.145.917-.164 1.482-.019.55.052 1.123.12 1.676.14 1.118.282 2.268-.269 3.403a4.37 4.37 0 01-.243-.485c-.069-.161-.217-.42-.423-.777-.8-1.39-2.673-4.648-1.714-5.977.286-.396 1.01-.803 2.83-.584zm-2.206-7.49c2.667.058 4.777 1.025 6.27 2.876 1.146 1.42-.116 7.879-3.767 13.45l-.111-.135-.046-.056c.943-1.51.759-3.006.595-4.331-.068-.544-.132-1.058-.115-1.541.016-.511.086-.95.154-1.375.082-.522.167-1.063.144-1.701a.684.684 0 00.015-.24c-.06-.611-.78-2.441-2.247-4.098a10.094 10.094 0 00-3.572-2.604 12.407 12.407 0 012.68-.244zM8.334 21.307c-.737.86-1.246.695-1.414.641-1.091-.353-2.357-2.59-3.474-6.136-.966-3.069-1.53-6.155-1.575-7.02-.141-2.737.543-4.644 2.033-5.669 2.426-1.668 6.414-.67 8.016-.163-.023.022-.047.042-.07.065-2.63 2.575-2.567 6.974-2.56 7.243 0 .104.008.251.02.453.046.74.13 2.117-.095 3.677-.209 1.45.252 2.868 1.264 3.892.104.105.213.205.327.3-.45.467-1.43 1.502-2.472 2.717zm2.81-3.635c-.816-.826-1.186-1.974-1.017-3.15.238-1.648.15-3.083.103-3.854l-.016-.277c.384-.33 2.165-1.255 3.434-.973.58.129.932.511 1.08 1.17.759 3.406.1 4.825-.43 5.966-.109.235-.212.458-.3.687l-.068.178c-.173.45-.334.867-.434 1.264a3.325 3.325 0 01-2.352-1.011zm.133 4.594a2.07 2.07 0 01-.614-.256c.111-.051.31-.12.654-.19 1.668-.332 1.925-.567 2.487-1.26.13-.158.275-.338.478-.557.301-.328.44-.272.69-.172.202.082.4.328.48.599.037.128.08.37-.06.56-1.174 1.595-2.886 1.574-4.115 1.276zm8.725 7.873c-2.04.424-2.761-.586-3.237-1.74-.308-.744-.459-4.102-.351-7.81a.434.434 0 00-.02-.143 1.823 1.823 0 00-.057-.262c-.16-.54-.548-.99-1.013-1.178-.185-.074-.525-.21-.933-.11.087-.347.238-.74.402-1.165l.068-.178c.078-.202.175-.41.277-.632.554-1.194 1.313-2.829.49-6.522-.309-1.384-1.34-2.06-2.901-1.903-.936.094-1.793.46-2.22.67a7.255 7.255 0 00-.255.132c.12-1.394.57-4 2.255-5.647 1.062-1.038 2.475-1.55 4.196-1.523 3.393.054 5.569 1.742 6.796 3.15 1.058 1.211 1.631 2.433 1.86 3.091-1.72-.17-2.889.16-3.482.982-1.29 1.787.706 5.257 1.665 6.924.175.306.327.57.375.682.312.734.716 1.224 1.012 1.582.09.11.178.215.245.308-.521.146-1.456.482-1.371 2.164-.069.843-.558 4.793-.806 6.189-.328 1.843-1.028 2.53-2.995 2.939zm8.513-9.447c-.532.24-1.424.42-2.27.458-.935.043-1.411-.101-1.523-.19-.053-1.048.35-1.157.775-1.273a3.35 3.35 0 00.195-.058c.04.031.082.062.13.092.75.481 2.091.533 3.984.154l.02-.004c-.255.232-.692.542-1.31.821z"})))},zyt=Dyt;var WN={};de(WN,{icon:()=>Wyt});var Bvr=V(ne());var Nyt=["title","titleId"];function Tae(){return Tae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Byt=function(t){var n=t.title,r=t.titleId,o=Lyt(t,Nyt);return c("svg",Tae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#E6522C",d:"M15.907.187C7.122.187 0 7.308 0 16.093S7.122 32 15.907 32c8.784 0 15.906-7.121 15.906-15.906S24.69.187 15.907.187zm0 29.77c-2.5 0-4.526-1.67-4.526-3.729h9.051c0 2.06-2.026 3.73-4.525 3.73zm7.475-4.963H8.43v-2.711h14.95v2.71zm-.054-4.107H8.473c-.05-.057-.1-.113-.147-.17-1.53-1.859-1.891-2.829-2.241-3.818-.006-.032 1.855.38 3.176.678 0 0 .679.157 1.672.338-.953-1.118-1.52-2.539-1.52-3.991 0-3.189 2.446-5.975 1.564-8.227.858.07 1.777 1.812 1.839 4.537.913-1.262 1.295-3.566 1.295-4.978 0-1.463.963-3.161 1.927-3.22-.86 1.417.223 2.63 1.184 5.642.361 1.132.315 3.035.594 4.243.092-2.508.523-6.167 2.114-7.43-.702 1.591.104 3.581.655 4.538.889 1.544 1.428 2.714 1.428 4.926 0 1.483-.548 2.88-1.472 3.971 1.05-.197 1.776-.374 1.776-.374l3.411-.666s-.495 2.038-2.4 4.001z"}))},Wyt=Byt;var HN={};de(HN,{icon:()=>Uyt});var Hvr=V(ne());var Hyt=["title","titleId"];function Aae(){return Aae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qyt=function(t){var n=t.title,r=t.titleId,o=$yt(t,Hyt);return c("svg",Aae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#F60",d:"M30.083 13.197h-9.878c-.79-.088-1.391-.74-1.391-1.508V1.97c0-.83-.718-1.495-1.595-1.495h-3.456c-.885 0-1.595.672-1.595 1.495v9.82c-.043.74-.696 1.338-1.478 1.406H8.102c-.76-.088-1.348-.686-1.398-1.406V1.97c0-.83-.718-1.495-1.595-1.495H1.652C.768.476.058 1.148.058 1.97v28.358c0 .83.717 1.495 1.594 1.495h28.439c.884 0 1.594-.673 1.594-1.495V14.692c-.007-.829-.718-1.495-1.602-1.495zm-4.55 10.724c0 .829-.718 1.495-1.595 1.495H20.48c-.884 0-1.595-.673-1.595-1.495v-3.058c0-.83.718-1.495 1.595-1.495h3.457c.884 0 1.594.672 1.594 1.495v3.058z"}))},Uyt=qyt;var $N={};de($N,{icon:()=>Yyt});var Vvr=V(ne());var Gyt=["title","titleId"];function Mae(){return Mae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xyt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kyt=function(t){var n=t.title,r=t.titleId,o=Jyt(t,Gyt);return c("svg",Mae({width:32,height:32,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{transform:"translate(0 3)",fill:"none"},c("path",{d:"M30.594 20.791c-1.689.875-10.438 4.451-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.437-12.46-5.234-.838-.399-1.278-.735-1.278-1.052v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.118 1.666.607 11.623 2.393 13.27 2.992l-.001 3.135c0 .314-.38.659-1.24 1.104z",fill:"#A41E11"}),c("path",{d:"M30.594 17.61c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.956-4.37.256-1.471-.698-10.782-4.438-12.46-5.234-1.676-.797-1.712-1.345-.064-1.987 1.647-.641 10.907-4.252 12.864-4.95 1.957-.698 2.636-.723 4.301-.117 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z",fill:"#D82C20"}),c("path",{d:"M30.594 15.606c-1.689.875-10.438 4.45-12.3 5.416-1.863.965-2.898.956-4.37.257-1.471-.7-10.782-4.438-12.46-5.235-.838-.398-1.278-.734-1.278-1.051v-3.18S12.307 9.19 14.264 8.492c1.957-.698 2.636-.723 4.301-.117 1.666.606 11.623 2.392 13.27 2.991l-.001 3.135c0 .315-.38.66-1.24 1.105z",fill:"#A41E11"}),c("path",{d:"M30.594 12.425c-1.689.875-10.438 4.45-12.3 5.416-1.863.966-2.898.956-4.37.257-1.471-.699-10.782-4.438-12.46-5.235-1.676-.796-1.712-1.345-.064-1.986 1.647-.641 10.907-4.253 12.864-4.95 1.957-.698 2.636-.724 4.301-.117 1.666.606 10.363 4.047 12.009 4.646 1.646.6 1.71 1.094.02 1.969z",fill:"#D82C20"}),c("path",{d:"M30.594 10.228c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.438-12.46-5.234C.627 10.268.187 9.932.187 9.615v-3.18s12.121-2.623 14.078-3.32c1.957-.699 2.636-.724 4.301-.117 1.666.606 11.623 2.391 13.27 2.99l-.001 3.136c0 .314-.38.659-1.24 1.104z",fill:"#A41E11"}),c("path",{d:"M30.594 7.047c-1.689.875-10.438 4.451-12.3 5.417-1.863.965-2.898.955-4.37.256-1.471-.699-10.782-4.437-12.46-5.234C-.211 6.689-.247 6.14 1.4 5.499S12.307 1.247 14.264.55c1.957-.7 2.636-.724 4.301-.118 1.666.607 10.363 4.048 12.009 4.647 1.646.6 1.71 1.093.02 1.968z",fill:"#D82C20"}),c("path",{fill:"#FFF",d:"M20.157 3.985l-2.742.283-.614 1.468-.992-1.638-3.166-.283 2.362-.847-.708-1.3 2.212.86 2.085-.68-.563 1.345zm-3.52 7.123l-5.118-2.11 7.334-1.119z"}),c("ellipse",{fill:"#FFF",cx:9.541,cy:6.311,rx:3.92,ry:1.51}),c("path",{fill:"#7A0C00",d:"M23.398 4.386l4.34 1.705-4.336 1.703z"}),c("path",{fill:"#AD2115",d:"M18.596 6.274l4.802-1.888.004 3.408-.471.183z"})))},Yyt=Kyt;var VN={};de(VN,{icon:()=>rbt});var Uvr=V(ne());var Qyt=["title","titleId"];function Rae(){return Rae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ebt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tbt=function(t){var n=t.title,r=t.titleId,o=Zyt(t,Qyt);return c("svg",Rae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 7.008V0h20v16.744c0 3.913-6.378 6.477-9.015 7.256V7.008H9z",fill:"#FA744E"}),c("path",{d:"M3 20.073V10h14v22C7.667 27.98 3 24.004 3 20.073z",fill:"#1DBAB0"}),c("path",{d:"M9 10h8v14c-2.983-1.14-8-3.756-8-7.043V10z",className:"euiIcon__fillNegative"}))},rbt=tbt;var qN={};de(qN,{icon:()=>sbt});var Jvr=V(ne());var nbt=["title","titleId"];function Dae(){return Dae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ibt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var abt=function(t){var n=t.title,r=t.titleId,o=obt(t,nbt);return c("svg",Dae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none",fillRule:"evenodd"},c("path",{fill:"#FA744E",d:"M27.05 10h-7.34l-11 22s15.696-4.96 21.855-16.076C32.037 13.266 30.088 10 27.05 10"}),c("path",{fill:"#00BFB3",d:"M21.355 0H7.533L.427 14.211C-.903 16.871 1.032 20 4.004 20h7.351l10-20z"}),c("path",{className:"euiIcon__fillNegative",d:"M2.533 10L.428 14.211C-.903 16.871 1.032 20 4.005 20h7.35l5-10H2.533z"})))},sbt=abt;var UN={};de(UN,{icon:()=>pbt});var Kvr=V(ne());var lbt=["title","titleId"];function zae(){return zae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fbt=function(t){var n=t.title,r=t.titleId,o=ubt(t,lbt);return c("svg",zae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#FFAE00",d:"M16 32L0 11.454l6.931-10.38L16 0l9.069 1.074L32 11.454z"}),c("path",{fill:"#EC6C00",d:"M16 32L0 11.454h32z"}),c("path",{fill:"#FFAE00",d:"M16 32L6.477 11.454h19.045z"}),c("path",{fill:"#FFEFB4",d:"M16 0L6.477 11.454h19.045z"}),c("path",{fill:"#FFAE00",d:"M6.932 1.074L3.369 6.3.001 11.454h6.542zM25.069 1.074L28.632 6.3 32 11.454h-6.542z"}),c("path",{fill:"#FED305",d:"M6.931 1.074l-.453 10.38L16 0zM25.069 1.074l.453 10.38L16 0z"})))},pbt=fbt;var GN={};de(GN,{icon:()=>gbt});var Qvr=V(ne());var dbt=["title","titleId"];function Nae(){return Nae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vbt=function(t){var n=t.title,r=t.titleId,o=hbt(t,dbt);return c("svg",Nae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#E01E5A",d:"M6.813 20.18a3.337 3.337 0 01-3.33 3.33 3.337 3.337 0 01-3.328-3.33 3.337 3.337 0 013.329-3.329h3.329v3.33zm1.677 0a3.337 3.337 0 013.33-3.329 3.337 3.337 0 013.328 3.33v8.335a3.337 3.337 0 01-3.329 3.329 3.337 3.337 0 01-3.329-3.33V20.18z"}),c("path",{fill:"#36C5F0",d:"M11.82 6.813a3.337 3.337 0 01-3.33-3.33A3.337 3.337 0 0111.82.156a3.337 3.337 0 013.328 3.329v3.329H11.82zm0 1.677a3.337 3.337 0 013.328 3.33 3.337 3.337 0 01-3.329 3.328H3.484a3.337 3.337 0 01-3.33-3.329 3.337 3.337 0 013.33-3.329h8.335z"}),c("path",{fill:"#2EB67D",d:"M25.187 11.82a3.337 3.337 0 013.329-3.33 3.337 3.337 0 013.329 3.33 3.337 3.337 0 01-3.33 3.328h-3.328V11.82zm-1.678 0a3.337 3.337 0 01-3.329 3.328 3.337 3.337 0 01-3.329-3.329V3.484a3.337 3.337 0 013.33-3.33 3.337 3.337 0 013.328 3.33v8.335z"}),c("path",{fill:"#ECB22E",d:"M20.18 25.187a3.337 3.337 0 013.33 3.329 3.337 3.337 0 01-3.33 3.329 3.337 3.337 0 01-3.329-3.33v-3.328h3.33zm0-1.678a3.337 3.337 0 01-3.329-3.329 3.337 3.337 0 013.33-3.329h8.335a3.337 3.337 0 013.329 3.33 3.337 3.337 0 01-3.33 3.328H20.18z"})))},gbt=vbt;var JN={};de(JN,{icon:()=>xbt});var egr=V(ne());var ybt=["title","titleId"];function Lae(){return Lae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Obt=function(t){var n=t.title,r=t.titleId,o=bbt(t,ybt);return c("svg",Lae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#3EBEB0",d:"M19 15c0 7.062-4.888 12.969-11.46 14.563A15.914 15.914 0 0016 32c8.836 0 16-7.163 16-16v-3l-6.5-6-6.5 6v2z"}),c("path",{fill:"#07C",d:"M6.833 26.646a11.954 11.954 0 008.544-7.834A12.43 12.43 0 0113 11.5V.292C5.6 1.696 0 8.19 0 16.002c0 4.358 1.75 8.306 4.577 11.192l2.256-.547z"}),c("path",{className:"euiIcon__fillNegative",d:"M30.362 23.02c-1.494.63-3.137.98-4.861.98a12.443 12.443 0 01-7.852-2.78 15.042 15.042 0 01-10.11 8.343A15.91 15.91 0 0016.002 32c6.314 0 11.758-3.669 14.36-8.98"}))},xbt=Obt;var XN={};de(XN,{icon:()=>kbt});var rgr=V(ne());var _bt=["title","titleId"];function Fae(){return Fae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ebt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ibt=function(t){var n=t.title,r=t.titleId,o=Sbt(t,_bt);return c("svg",Fae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fill:"none"},c("path",{fill:"#C73A63",d:"M14.943 13.563c-1.327 2.23-2.597 4.388-3.894 6.531-.334.55-.498.998-.232 1.698.734 1.931-.302 3.811-2.25 4.321-1.837.482-3.627-.726-3.992-2.692-.323-1.741 1.028-3.448 2.948-3.72.16-.023.325-.026.595-.046l2.92-4.896C9.2 12.933 8.108 10.8 8.35 8.154c.171-1.87.907-3.486 2.25-4.81a7.639 7.639 0 019.531-1c2.91 1.87 4.244 5.512 3.107 8.629l-2.668-.724c.357-1.733.093-3.29-1.076-4.623-.772-.88-1.763-1.341-2.89-1.511-2.258-.341-4.476 1.11-5.134 3.327-.748 2.516.383 4.572 3.473 6.121z"}),c("path",{fill:"#4B4B4B",d:"M18.73 10.926l2.823 4.98c4.753-1.47 8.336 1.16 9.622 3.977 1.552 3.402.491 7.432-2.558 9.531-3.13 2.155-7.089 1.787-9.862-.981l2.176-1.821c2.739 1.774 5.135 1.69 6.913-.41a4.766 4.766 0 00-.077-6.219c-1.8-2.025-4.213-2.086-7.13-.143-1.209-2.146-2.44-4.275-3.61-6.436-.396-.729-.832-1.152-1.722-1.306-1.487-.257-2.446-1.534-2.504-2.964a3.258 3.258 0 012.08-3.192 3.243 3.243 0 013.671 1.002c.71.896.935 1.905.562 3.01-.104.309-.238.607-.384.972z"}),c("path",{fill:"#4A4A4A",d:"M20.963 24.401h-5.72c-.55 2.256-1.734 4.077-3.775 5.235-1.586.9-3.296 1.205-5.116.911C3 30.007.26 26.99.019 23.593c-.273-3.848 2.372-7.268 5.898-8.036l.732 2.658c-3.234 1.65-4.353 3.73-3.448 6.33.797 2.287 3.06 3.541 5.518 3.056 2.51-.495 3.776-2.581 3.621-5.929 2.38 0 4.761-.024 7.14.012.93.015 1.648-.081 2.348-.9 1.152-1.349 3.273-1.227 4.515.046 1.268 1.301 1.207 3.395-.135 4.641a3.236 3.236 0 01-4.553-.157c-.249-.267-.445-.585-.692-.913z"})))},kbt=Ibt;var KN={};de(KN,{icon:()=>Abt});var ogr=V(ne());var Pbt=["title","titleId"];function Bae(){return Bae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Tbt=function(t){var n=t.title,r=t.titleId,o=jbt(t,Pbt);return c("svg",Bae({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fill:"#00ADEF",d:"M0 4.51l12.977-1.768.006 12.518-12.971.074L0 4.51zm12.97 12.192l.011 12.529-12.97-1.784-.002-10.829 12.962.084zm1.574-14.19L31.751 0v15.1l-17.207.137V2.511zm17.21 14.308l-.003 15.033-17.207-2.429-.024-12.632 17.235.028z"}))},Abt=Tbt;var YN={};de(YN,{icon:()=>Nbt});var agr=V(ne());var Mbt=["title","titleId"];function Wae(){return Wae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zbt=function(t){var n=t.title,r=t.titleId,o=Rbt(t,Mbt);return c("svg",Wae({width:32,height:32,viewBox:"0 0 32 32",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M17.557 5.05c.17-.202.457-.512.86-.93C19.483 3.017 21.828 1 23.801 1H30v30h-6.2c-1.972 0-3.995-1.449-5.383-3.106l-.764-1.052 2.75-3.477c3.462-4.376 3.463-10.332.001-14.707L17.557 5.05z",fill:"#FEC514"}),c("path",{d:"M2 31V1h5.81c1.71 0 3.35.786 4.387 2.1l5.855 7.42c2.598 3.283 2.598 7.698-.002 10.983l-5.855 7.403C11.158 30.217 9.52 31 7.815 31H2z",fill:"#F04E98"}),c("path",{d:"M15.384 24.89L12.15 21.7c-2.868-3.318-2.868-8.22.002-11.322 1.535-1.639 2.611-2.718 3.23-3.238l2.67 3.238c2.637 3.385 2.575 7.987-.062 11.374l-2.607 3.137z",className:"euiIcon__fillNegative"}))},Nbt=zbt;var QN={};de(QN,{icon:()=>Hbt});var lgr=V(ne());var Lbt=["title","titleId"];function Hae(){return Hae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Bbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wbt=function(t){var n=t.title,r=t.titleId,o=Fbt(t,Lbt);return c("svg",Hae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.914 1c-3.6 0-5.897 1.111-5.897 1.876 0 .766 2.297 1.877 5.897 1.877s5.897-1.111 5.897-1.877C13.811 2.111 11.514 1 7.914 1m3.98 7.988c-1.187.331-2.601.502-3.98.502-1.383 0-2.801-.172-3.991-.505l2.863 3.242v2.515c.136.08.515.214 1.128.214.61 0 .989-.133 1.126-.213v-2.515l2.854-3.24zm2.394-1.206l-4.248 4.823v2.246h.004c0 .763-1.069 1.105-2.13 1.105-1.06 0-2.13-.342-2.13-1.105h.002v-2.245L1.321 7.55l.01-.008A1.53 1.53 0 011 6.607V2.78h.02C1.14.973 4.627 0 7.913 0c3.286 0 6.774.973 6.894 2.78h.02v3.827c0 .343-.12.657-.335.941l-.003.004c-.06.079-.128.155-.202.23zm-.578-.856a.56.56 0 00.118-.319V4.411c-1.288.879-3.649 1.342-5.914 1.342C5.65 5.753 3.288 5.29 2 4.411v2.196C2 7.375 4.304 8.49 7.914 8.49c2.879 0 4.927-.709 5.639-1.385l.157-.18z"}))},Hbt=Wbt;var ZN={};de(ZN,{icon:()=>Gbt});var cgr=V(ne());var $bt=["title","titleId"];function $ae(){return $ae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ubt=function(t){var n=t.title,r=t.titleId,o=Vbt(t,$bt);return c("svg",$ae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.918 9.799l-4.82 4.819 2.88-.43.148.987L0 15.943l.768-5.126.988.148-.453 3.033 4.936-4.935a2.003 2.003 0 011.265-2.885V0h1v6.178a2.003 2.003 0 011.263 2.884l4.865 4.866-.443-2.963.988-.147.768 5.126-5.127-.769.15-.988 2.95.441-4.83-4.83c-.312.203-.685.32-1.085.32-.4 0-.773-.117-1.085-.32z"}))},Gbt=Ubt;var eL={};de(eL,{icon:()=>Qbt});var pgr=V(ne());var Jbt=["title","titleId"];function Vae(){return Vae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Kbt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ybt=function(t){var n=t.title,r=t.titleId,o=Xbt(t,Jbt);return c("svg",Vae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.747 10.992h13.1a.123.123 0 00.122-.123V8.51a.122.122 0 00-.122-.122H1.122A.122.122 0 001 8.51v2.36c0 .066.055.122.122.122h.625zm12.011 1H2.21V16h-1v-4.008h-.088A1.124 1.124 0 010 10.87V8.51c0-.62.503-1.122 1.122-1.122h13.725c.62 0 1.122.502 1.122 1.122v2.36c0 .618-.503 1.122-1.122 1.122h-.089V16h-1v-4.008zm-6.27-7.487V0h1v4.529l2.407-2.262.685.73L8 6.356 4.42 2.995l.685-.729 2.383 2.24z"}))},Qbt=Ybt;var tL={};de(tL,{icon:()=>n2t});var hgr=V(ne());var Zbt=["title","titleId"];function qae(){return qae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r2t=function(t){var n=t.title,r=t.titleId,o=e2t(t,Zbt);return c("svg",qae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2.21 4.008H13.76V0h1v4.008h.088c.619 0 1.122.504 1.122 1.123V7.49c0 .62-.503 1.122-1.122 1.122H1.122A1.122 1.122 0 010 7.49V5.13c0-.618.503-1.122 1.122-1.122h.089V0h1v4.008zm11.549 1H1.12A.123.123 0 001 5.13V7.49c0 .068.055.122.122.122h13.725a.122.122 0 00.122-.122V5.13a.123.123 0 00-.122-.122h-1.088zm-5.301 9.097l2.405-2.26.686.728-3.58 3.363-3.58-3.363.686-.728 2.383 2.24V9.577h1v4.528z"}))},n2t=r2t;var rL={};de(rL,{icon:()=>l2t});var vgr=V(ne());var o2t=["title","titleId"];function Uae(){return Uae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var s2t=function(t){var n=t.title,r=t.titleId,o=i2t(t,o2t);return c("svg",Uae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.339 15.464H4.77a3.248 3.248 0 01-3.245-3.244V4.549H0v-1h2.526v8.67a2.247 2.247 0 002.245 2.245h6.568a2.247 2.247 0 002.244-2.244V3.549h2.455v1h-1.455v7.67a3.247 3.247 0 01-3.244 3.245zm.513-5.962v1.095l-3.848 1.72-3.85-1.72V9.502l3.85 1.72 3.848-1.72zm0-4.251v1.095l-3.848 1.72-3.85-1.72V5.25l3.85 1.72 3.848-1.72zm0-4.251v1.095l-3.848 1.72-3.85-1.72V1l3.85 1.72L11.852 1z"}))},l2t=s2t;var nL={};de(nL,{icon:()=>d2t});var ygr=V(ne());var u2t=["title","titleId"];function Gae(){return Gae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function f2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var p2t=function(t){var n=t.title,r=t.titleId,o=c2t(t,u2t);return c("svg",Gae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.552 10.71a3.008 3.008 0 004.19.738l1.642-1.15 1.15 1.642-1.643 1.15a5.013 5.013 0 11-5.75-8.212l1.642-1.15 1.15 1.643-1.642 1.15a3.007 3.007 0 00-.739 4.189zm8.296-2.137l1.15 1.643-1.643 1.149-1.15-1.642 1.643-1.15zm-4.6-6.571l1.15 1.643-1.643 1.15-1.15-1.642 1.642-1.151zm1.97 1.068L9.07 1.428a1.003 1.003 0 00-1.397-.246L3.566 4.057A5.995 5.995 0 001.092 7.94a5.993 5.993 0 00.996 4.495 5.99 5.99 0 003.883 2.473 5.991 5.991 0 004.495-.996l4.107-2.875c.454-.318.563-.943.246-1.396l-1.15-1.643a1.002 1.002 0 00-1.396-.246l-4.107 2.875a2.002 2.002 0 01-1.498.332 2 2 0 01-1.627-2.323c.09-.505.371-.976.824-1.294l4.107-2.876c.454-.317.564-.942.246-1.396z"}))},d2t=p2t;var oL={};de(oL,{icon:()=>y2t});var wgr=V(ne());var h2t=["title","titleId"];function Jae(){return Jae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function v2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var g2t=function(t){var n=t.title,r=t.titleId,o=m2t(t,h2t);return c("svg",Jae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M15.143 15.85l-3.872-3.872a.5.5 0 01-.034-.738 6.01 6.01 0 000-8.486 6.004 6.004 0 00-8.484 0 6.01 6.01 0 000 8.486 5.96 5.96 0 004.242 1.757.5.5 0 010 1 6.955 6.955 0 01-4.949-2.05c-2.728-2.73-2.728-7.171 0-9.9 2.728-2.73 7.168-2.73 9.898 0 2.609 2.61 2.723 6.785.342 9.532l3.565 3.564a.502.502 0 01-.708.708zM6.254 3l.277 5.063h.935L7.754 3h-1.5zm.222 7.548a.727.727 0 00.533.222.717.717 0 00.52-.22.715.715 0 00.225-.53.716.716 0 00-.222-.534.724.724 0 00-.523-.216.731.731 0 00-.533.219.719.719 0 00-.222.53c0 .205.074.38.222.529z"}))},y2t=g2t;var iL={};de(iL,{icon:()=>_2t});var xgr=V(ne());var b2t=["title","titleId"];function Xae(){return Xae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x2t=function(t){var n=t.title,r=t.titleId,o=w2t(t,b2t);return c("svg",Xae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.5 6a.5.5 0 010 1h-6a.5.5 0 010-1h6zm.74 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0012 6.5 5.5 5.5 0 106.5 12a.5.5 0 110 1 6.5 6.5 0 114.936-2.27l4.419 4.418a.5.5 0 01-.707.707l-4.768-4.768a.499.499 0 01-.14-.347z"}))},_2t=x2t;var aL={};de(aL,{icon:()=>P2t});var Sgr=V(ne());var S2t=["title","titleId"];function Kae(){return Kae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function I2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k2t=function(t){var n=t.title,r=t.titleId,o=E2t(t,S2t);return c("svg",Kae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 6h2.5a.5.5 0 010 1H7v2.5a.5.5 0 01-1 0V7H3.5a.5.5 0 010-1H6V3.5a.5.5 0 011 0V6zm3.24 4.74c0-.117.04-.225.107-.31A5.478 5.478 0 0012 6.5 5.5 5.5 0 106.5 12a.5.5 0 110 1 6.5 6.5 0 114.936-2.27l4.419 4.418a.5.5 0 01-.707.707l-4.768-4.768a.499.499 0 01-.14-.347z"}))},P2t=k2t;var sL={};de(sL,{icon:()=>M2t});var Igr=V(ne());var j2t=["title","titleId"];function Yae(){return Yae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function T2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var A2t=function(t){var n=t.title,r=t.titleId,o=C2t(t,j2t);return c("svg",Yae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.55 14.224a.502.502 0 00.897 0l4-8a.5.5 0 00.053-.235 4.672 4.672 0 00-.084-.705 5.538 5.538 0 00-.505-1.512C11.189 2.362 9.906 1.5 8 1.5c-1.906 0-3.19.862-3.91 2.272-.248.485-.41.998-.506 1.512-.058.31-.08.554-.084.705a.5.5 0 00.053.235l3.997 8zM8 5a1 1 0 100 2 1 1 0 000-2zm-3.493.895c.009-.106.027-.253.06-.429.079-.424.213-.848.413-1.238C5.537 3.138 6.487 2.5 8 2.5c1.513 0 2.463.638 3.02 1.728.2.39.334.814.413 1.238.033.176.051.323.06.43L8 12.881 4.507 5.895z"}))},M2t=A2t;var lL={};de(lL,{icon:()=>L2t});var Pgr=V(ne());var R2t=["title","titleId"];function Qae(){return Qae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function z2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var N2t=function(t){var n=t.title,r=t.titleId,o=D2t(t,R2t);return c("svg",Qae({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 10h2V6H7zM3 10h2V6H3zM11.025 10h2V6h-2zM3.5 13.75h1v-2.4h-1zM6.175 13.75h1.001v-2.4H6.175zM8.85 13.75h1v-2.4h-1zM11.525 13.75h1v-2.4h-1z"}),c("path",{d:"M0 3v7.05h1v3.698h1v-3.699h12v3.699h1v-3.699h1V3H0zm1 6h14V4H1v5z"}))},L2t=N2t;var uL={};de(uL,{icon:()=>$2t});var Cgr=V(ne());var F2t=["title","titleId"];function Zae(){return Zae=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function W2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H2t=function(t){var n=t.title,r=t.titleId,o=B2t(t,F2t);return c("svg",Zae({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M0 2h16v2H0V2zm0 5h16v2H0V7zm16 5H0v2h16v-2z"}))},$2t=H2t;var cL={};de(cL,{icon:()=>J2t});var Agr=V(ne());var V2t=["title","titleId"];function ese(){return ese=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var G2t=function(t){var n=t.title,r=t.titleId,o=q2t(t,V2t);return c("svg",ese({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L3 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 7.5zM3.51 4a.513.513 0 01-.502-.412L3 3.5c0-.276.228-.5.51-.5h8.98c.25 0 .459.183.502.412L13 3.5c0 .276-.228.5-.51.5H8.493v7.792l2.06-2.06a.5.5 0 11.707.707L9.14 12.56A1.496 1.496 0 018.026 13L7.993 13a.501.501 0 01-.118-.014 1.493 1.493 0 01-.857-.426l-2.122-2.12a.5.5 0 01.708-.708l1.889 1.89V4H3.51zM13 7.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L10 7.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L13 7.5z"}))},J2t=G2t;var fL={};de(fL,{icon:()=>Z2t});var Rgr=V(ne());var X2t=["title","titleId"];function tse(){return tse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y2t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q2t=function(t){var n=t.title,r=t.titleId,o=K2t(t,X2t);return c("svg",tse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.014 7.382a.501.501 0 00-.013.152c-.014.4.133.806.439 1.112l2.12 2.122a.5.5 0 10.708-.708L2.208 8H14.5a.5.5 0 000-1H2.379l1.889-1.89a.5.5 0 00-.707-.706L1.44 6.524c-.241.242-.383.544-.426.858zM14.5 3h-7a.5.5 0 000 1h7a.5.5 0 000-1zm0 8h-7a.5.5 0 100 1h7a.5.5 0 100-1z"}))},Z2t=Q2t;var pL={};de(pL,{icon:()=>o3t});var zgr=V(ne());var e3t=["title","titleId"];function rse(){return rse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function r3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var n3t=function(t){var n=t.title,r=t.titleId,o=t3t(t,e3t);return c("svg",rse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14.986 7.382a.501.501 0 01.013.152c.014.4-.133.806-.439 1.112l-2.12 2.122a.5.5 0 11-.708-.708L13.792 8H1.5a.5.5 0 010-1h12.121l-1.889-1.89a.5.5 0 01.707-.706l2.121 2.12c.241.242.383.544.426.858zM1.5 3h7a.5.5 0 010 1h-7a.5.5 0 010-1zm0 8h7a.5.5 0 110 1h-7a.5.5 0 110-1z"}))},o3t=n3t;var dL={};de(dL,{icon:()=>u3t});var Lgr=V(ne());var i3t=["title","titleId"];function nse(){return nse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function s3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l3t=function(t){var n=t.title,r=t.titleId,o=a3t(t,i3t);return c("svg",nse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.01 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412l.008.088c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L10.01 8.5zM12.5 12c.25 0 .459.183.502.412l.008.088c0 .276-.228.5-.51.5H3.52a.513.513 0 01-.502-.412L3.01 12.5c0-.276.228-.5.51-.5h3.987V4.208l-2.06 2.06a.5.5 0 11-.707-.707L6.86 3.44A1.496 1.496 0 017.974 3L8.007 3c.04 0 .08.005.118.014.314.043.616.185.857.426l2.122 2.12a.5.5 0 01-.708.708l-1.889-1.89V12H12.5zM3 8.5c0-.276.216-.5.495-.5h2.01c.243 0 .445.183.487.412L6 8.5c0 .276-.216.5-.495.5h-2.01a.503.503 0 01-.487-.412L3 8.5z"}))},u3t=l3t;var hL={};de(hL,{icon:()=>h3t});var Bgr=V(ne());var c3t=["title","titleId"];function ose(){return ose=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var d3t=function(t){var n=t.title,r=t.titleId,o=f3t(t,c3t);return c("svg",ose({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.352 6H2.5a.5.5 0 010-1h4.852L5.12 2.721c-.18-.183-.155-.46.055-.616a.551.551 0 01.705.048l3 3.062c.16.164.16.405 0 .57l-3 3.062A.532.532 0 015.5 9a.54.54 0 01-.325-.106c-.21-.157-.235-.433-.055-.616L7.352 6zm1.296 4H13.5a.5.5 0 010 1H8.648l2.232 2.278c.18.183.155.46-.055.617A.54.54 0 0110.5 14a.532.532 0 01-.38-.153l-3-3.063a.397.397 0 010-.568l3-3.063a.551.551 0 01.705-.047c.21.156.235.433.055.616L8.648 10z"}))},h3t=d3t;var mL={};de(mL,{icon:()=>b3t});var Hgr=V(ne());var m3t=["title","titleId"];function ise(){return ise=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var y3t=function(t){var n=t.title,r=t.titleId,o=v3t(t,m3t);return c("svg",ise({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.146 14.146l4-4a.5.5 0 01.765.638l-.057.07-4 4a.5.5 0 01-.765-.638l.057-.07 4-4-4 4zM6.5 8A1.5 1.5 0 018 9.5v3a.5.5 0 11-1 0v-3a.5.5 0 00-.5-.5h-3a.5.5 0 010-1h3zm2-5a.5.5 0 01.5.5v3a.5.5 0 00.5.5h3a.5.5 0 110 1h-3A1.5 1.5 0 018 6.5v-3a.5.5 0 01.5-.5zm1.651 2.146l4-4a.5.5 0 01.765.638l-.057.07-4 4a.5.5 0 01-.765-.638l.057-.07 4-4-4 4z"}))},b3t=y3t;var vL={};de(vL,{icon:()=>S3t});var Vgr=V(ne());var w3t=["title","titleId"];function ase(){return ase=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function x3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _3t=function(t){var n=t.title,r=t.titleId,o=O3t(t,w3t);return c("svg",ase({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("rect",{width:10,height:1.5,x:3,y:7.25,rx:.5}))},S3t=_3t;var gL={};de(gL,{icon:()=>j3t});var Ugr=V(ne());var E3t=["title","titleId"];function sse(){return sse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function k3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var P3t=function(t){var n=t.title,r=t.titleId,o=I3t(t,E3t);return c("svg",sse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 007.5.882zM3.5 7h8a.5.5 0 110 1h-8a.5.5 0 010-1z"}))},j3t=P3t;var yL={};de(yL,{icon:()=>R3t});var Jgr=V(ne());var C3t=["title","titleId"];function lse(){return lse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M3t=function(t){var n=t.title,r=t.titleId,o=T3t(t,C3t);return c("svg",lse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.5 0C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm-4 7a.5.5 0 000 1h8a.5.5 0 100-1h-8z"}))},R3t=M3t;var bL={};de(bL,{icon:()=>F3t});var Kgr=V(ne());var D3t=["title","titleId"];function use(){return use=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function N3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L3t=function(t){var n=t.title,r=t.titleId,o=z3t(t,D3t);return c("svg",use({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 16v5h2.038a13.179 13.179 0 000 2H7v5H5v-5H0v-2h5v-5h2zM7 0v5h5v2H7v5H5V7H0V5h5V0h2zm16 0v5h5v2h-5v2.038a13.179 13.179 0 00-2 0V7h-5V5h5V0h2z"}),c("path",{className:"euiIcon__fillSecondary",d:"M22 10c3.073 0 5.877 1.155 8 3.056v3.252A9.82 9.82 0 1016.307 30h-3.251A11.955 11.955 0 0110 22c0-6.627 5.373-12 12-12zm1 8v3h3v2h-3v3h-2v-3h-3v-2h3v-3h2z"}))},F3t=L3t;var wL={};de(wL,{icon:()=>V3t});var Qgr=V(ne());var B3t=["title","titleId"];function cse(){return cse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function H3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $3t=function(t){var n=t.title,r=t.titleId,o=W3t(t,B3t);return c("svg",cse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16h-2c0-7.732-6.268-14-14-14S2 8.268 2 16s6.268 14 14 14v2z"}),c("path",{className:"euiIcon__fillSecondary",d:"M27 20v12h-2V20h2zm-5 4v8h-2v-8h2zm10-2v10h-2V22h2zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2z"}))},V3t=$3t;var OL={};de(OL,{icon:()=>X3t});var eyr=V(ne());var q3t=["title","titleId"];function fse(){return fse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J3t=function(t){var n=t.title,r=t.titleId,o=U3t(t,q3t);return c("svg",fse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{className:"euiIcon__fillSecondary",d:"M4 24a4 4 0 110 8 4 4 0 010-8zm24 0a4 4 0 110 8 4 4 0 010-8zM4 26a2 2 0 100 4 2 2 0 000-4zm24 0a2 2 0 100 4 2 2 0 000-4zM17 9v6h6v2h-6v6h-2v-6H9v-2h6V9h2zM4 0a4 4 0 110 8 4 4 0 010-8zm24 0a4 4 0 110 8 4 4 0 010-8zm0 2a2 2 0 100 4 2 2 0 000-4zM4 2a2 2 0 100 4 2 2 0 000-4z"}),c("path",{d:"M21.078 29.05c.102.677.3 1.322.582 1.92A15.963 15.963 0 0116 32c-1.993 0-3.9-.364-5.66-1.03.281-.598.48-1.243.582-1.92 1.574.614 3.287.95 5.078.95 1.791 0 3.504-.336 5.078-.95zm9.892-18.71A15.963 15.963 0 0132 16c0 1.993-.364 3.9-1.03 5.66a6.948 6.948 0 00-1.92-.582c.614-1.574.95-3.287.95-5.078 0-1.791-.336-3.504-.95-5.078a6.948 6.948 0 001.92-.582zm-29.94 0c.598.281 1.243.48 1.92.582A13.965 13.965 0 002 16c0 1.791.336 3.504.95 5.078-.677.102-1.322.3-1.92.582A15.964 15.964 0 010 16c0-1.993.364-3.9 1.03-5.66zM16 0c1.993 0 3.9.364 5.66 1.03a6.948 6.948 0 00-.582 1.92A13.965 13.965 0 0016 2c-1.791 0-3.504.336-5.078.95a6.948 6.948 0 00-.582-1.92A15.964 15.964 0 0116 0z"}))},X3t=J3t;var xL={};de(xL,{icon:()=>e5t});var ryr=V(ne());var K3t=["title","titleId"];function pse(){return pse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Q3t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Z3t=function(t){var n=t.title,r=t.titleId,o=Y3t(t,K3t);return c("svg",pse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 0c5.523 0 10 4.477 10 10s-4.477 10-10 10S6 15.523 6 10 10.477 0 16 0zm0 2a8 8 0 100 16 8 8 0 000-16z"}),c("path",{className:"euiIcon__fillSecondary",d:"M8.4 19.288c.492.402 1.015.766 1.566 1.087L7.26 23.682a4 4 0 11-1.437-1.243l2.578-3.151zm15.2 0l2.577 3.15a4 4 0 11-1.437 1.243l-2.706-3.306a12.032 12.032 0 001.565-1.087zM4 24a2 2 0 100 4 2 2 0 000-4zm24 0a2 2 0 100 4 2 2 0 000-4zM17 6v3h3v2h-3v3h-2v-3h-3V9h3V6h2z"}))},e5t=Z3t;var _L={};de(_L,{icon:()=>i5t});var oyr=V(ne());var t5t=["title","titleId"];function dse(){return dse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function n5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var o5t=function(t){var n=t.title,r=t.titleId,o=r5t(t,t5t);return c("svg",dse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 32C7.163 32 0 24.837 0 16S7.163 0 16 0s16 7.163 16 16a16 16 0 01-16 16zm0-30C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14A14 14 0 0016 2z"}),c("path",{className:"euiIcon__fillSecondary",d:"M23 15h-6V9h-2v6H9v2h6v6h2v-6h6z"}))},i5t=o5t;var SL={};de(SL,{icon:()=>c5t});var ayr=V(ne());var a5t=["title","titleId"];function hse(){return hse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function l5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var u5t=function(t){var n=t.title,r=t.titleId,o=s5t(t,a5t);return c("svg",hse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 20v10h10v2H0V20h2zm30 0v12H20v-2h10V20h2zM12 4a8 8 0 110 16 8 8 0 010-16zm0 2a6 6 0 100 12 6 6 0 000-12zm0-6v2H2v10H0V0h12zm20 0v12h-2V2H20V0h12z"}),c("path",{className:"euiIcon__fillSecondary",d:"M21.997 12.251c-.017.689-.104 1.36-.253 2.006a6 6 0 11-7.487 7.487c-.646.15-1.317.236-2.006.253a8 8 0 109.746-9.746z"}))},c5t=u5t;var EL={};de(EL,{icon:()=>m5t});var lyr=V(ne());var f5t=["title","titleId"];function mse(){return mse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function d5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var h5t=function(t){var n=t.title,r=t.titleId,o=p5t(t,f5t);return c("svg",mse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 12v6h6v2H0v-8h2zm18 0v8h-8v-2h6v-6h2zM8 0v2H2v6H0V0h8zm12 0v8h-2V2h-6V0h8z"}),c("path",{className:"euiIcon__fillSecondary",d:"M16 24a4 4 0 110 8 4 4 0 010-8zm12 0a4 4 0 110 8 4 4 0 010-8zm-12 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zm12 0a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zM28 12a4 4 0 110 8 4 4 0 010-8zm0 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5zM10 6a4 4 0 110 8 4 4 0 010-8zm0 1.75a2.25 2.25 0 100 4.5 2.25 2.25 0 000-4.5z"}))},m5t=h5t;var IL={};de(IL,{icon:()=>w5t});var cyr=V(ne());var v5t=["title","titleId"];function vse(){return vse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function y5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var b5t=function(t){var n=t.title,r=t.titleId,o=g5t(t,v5t);return c("svg",vse({xmlns:"http://www.w3.org/2000/svg",width:32,height:32,viewBox:"0 0 32 32","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M24 0a8 8 0 11-4.906 14.32l-4.774 4.774a8 8 0 11-1.414-1.414l4.774-4.774A8 8 0 0124 0zM8 18a6 6 0 100 12 6 6 0 000-12zM24 2a6 6 0 100 12 6 6 0 000-12z"}),c("path",{className:"euiIcon__fillSecondary",d:"M32 20v12H20V20h12zm-2 2h-8v8h8v-8zM12 0v12H0V0h12zm-2 2H2v8h8V2z"}))},w5t=b5t;var kL={};de(kL,{icon:()=>E5t});var pyr=V(ne());var O5t=["title","titleId"];function gse(){return gse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var S5t=function(t){var n=t.title,r=t.titleId,o=x5t(t,O5t);return c("svg",gse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6 2.5a.5.5 0 01.5-.5h3a.5.5 0 010 1h-3a.5.5 0 01-.5-.5z"}),c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 0A1.5 1.5 0 003 1.5v13A1.5 1.5 0 004.5 16h7a1.5 1.5 0 001.5-1.5v-13A1.5 1.5 0 0011.5 0h-7zM4 1.5a.5.5 0 01.5-.5h7a.5.5 0 01.5.5V4H4V1.5zM4 13v1.5a.5.5 0 00.5.5h7a.5.5 0 00.5-.5V13H4zm0-1h8V5H4v7z"}))},E5t=S5t;var PL={};de(PL,{icon:()=>C5t});var hyr=V(ne());var I5t=["title","titleId"];function yse(){return yse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function P5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var j5t=function(t){var n=t.title,r=t.titleId,o=k5t(t,I5t);return c("svg",yse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.796 9.048c-1.552-2.238-1.199-5.323.61-8.1-3.47-.12-6.6 2.232-7.269 5.672-.742 3.82 1.83 7.533 5.749 8.294a7.226 7.226 0 007.526-3.218c-2.794.177-5.27-.711-6.616-2.648z"}))},C5t=j5t;var jL={};de(jL,{icon:()=>D5t});var vyr=V(ne());var T5t=["title","titleId"];function bse(){return bse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function M5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var R5t=function(t){var n=t.title,r=t.titleId,o=A5t(t,T5t);return c("svg",bse({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1 1h14v14H1V1zm13 12v1H2V2h12v11zM6 6h4v4H6V6zm-1 5V5h6v6H5z"}))},D5t=R5t;var CL={};de(CL,{icon:()=>B5t});var yyr=V(ne());var z5t=["title","titleId"];function wse(){return wse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function L5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var F5t=function(t){var n=t.title,r=t.titleId,o=N5t(t,z5t);return c("svg",wse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.5 1a.5.5 0 010 1H3.006C2.45 2 2 2.45 2 3.006v9.988C2 13.55 2.45 14 3.006 14H5.5a.5.5 0 110 1H3.006A2.005 2.005 0 011 12.994V3.006C1 1.898 1.897 1 3.006 1H5.5zm7.494 0c1.059 0 1.924.818 2 1.856l.006.15v9.988a2.005 2.005 0 01-1.856 2l-.15.006H10.5a.5.5 0 01-.09-.992L10.5 14h2.494c.516 0 .941-.388 1-.888l.006-.118V3.006c0-.516-.388-.941-.888-1L12.994 2H10.5a.5.5 0 01-.09-.992L10.5 1h2.494zM5 7a1 1 0 110 2 1 1 0 010-2zm3 0a1 1 0 110 2 1 1 0 010-2zm3 0a1 1 0 110 2 1 1 0 010-2z"}))},B5t=F5t;var TL={};de(TL,{icon:()=>q5t});var wyr=V(ne());var W5t=["title","titleId"];function Ose(){return Ose=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var V5t=function(t){var n=t.title,r=t.titleId,o=H5t(t,W5t);return c("svg",Ose({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.5 1.443a1 1 0 00-1 0L2.572 4.29a1 1 0 00-.5.866v5.69a1 1 0 00.5.866L7.5 14.557a1 1 0 001 0l4.928-2.846a1 1 0 00.5-.866v-5.69a1 1 0 00-.5-.866L8.5 1.443zM9 .577l4.928 2.846a2 2 0 011 1.732v5.69a2 2 0 01-1 1.732L9 15.423a2 2 0 01-2 0l-4.928-2.846a2 2 0 01-1-1.732v-5.69a2 2 0 011-1.732L7 .577a2 2 0 012 0z"}))},q5t=V5t;var AL={};de(AL,{icon:()=>K5t});var xyr=V(ne());var U5t=["title","titleId"];function xse(){return xse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function J5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var X5t=function(t){var n=t.title,r=t.titleId,o=G5t(t,U5t);return c("svg",xse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.808 10.197H6.796L5.859 13H4.485l.937-2.803H3.966l.219-1.25h1.647l.608-1.805H4.991l.226-1.251h1.64l.95-2.844h1.368l-.95 2.844h1.018l.95-2.844h1.374l-.95 2.844h1.51l-.218 1.25h-1.702l-.608 1.805h1.497l-.219 1.251H9.182L8.252 13H6.878l.93-2.803zm-.602-1.25h1.012l.615-1.805H7.814l-.608 1.804z",fillRule:"evenodd"}))},K5t=X5t;var ML={};de(ML,{icon:()=>twt});var Syr=V(ne());var Y5t=["title","titleId"];function _se(){return _se=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Z5t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ewt=function(t){var n=t.title,r=t.titleId,o=Q5t(t,Y5t);return c("svg",_se({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.517 12.271l1.254-1.254a1.5 1.5 0 11-1.254 1.254zm2.945-2.944l.74-.74c.361.208.694.467.987.772a.5.5 0 01-.721.693 3.424 3.424 0 00-1.006-.725zm2.162-2.163l.716-.715c.308.232.599.49.87.772a.5.5 0 11-.722.692 6.26 6.26 0 00-.864-.749zM7.061 6.07A6.198 6.198 0 003.54 7.885a.5.5 0 01-.717-.697 7.199 7.199 0 015.309-2.187l-1.07 1.07zm6.672-1.014l.71-.71c.274.23.536.476.786.736a.5.5 0 01-.721.692 9.1 9.1 0 00-.775-.718zm-3.807-1.85A9.06 9.06 0 008 3a8.99 8.99 0 00-6.469 2.734.5.5 0 11-.717-.697A9.99 9.99 0 018 2c.944 0 1.868.131 2.75.382l-.824.824zM8 13a.5.5 0 100-1 .5.5 0 000 1zm-5.424 1a.5.5 0 01-.707-.707L14.146 1.146a.5.5 0 01.708.708L2.576 14z"}))},twt=ewt;var RL={};de(RL,{icon:()=>awt});var Iyr=V(ne());var rwt=["title","titleId"];function Sse(){return Sse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function owt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var iwt=function(t){var n=t.title,r=t.titleId,o=nwt(t,rwt);return c("svg",Sse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 14a1.5 1.5 0 110-3 1.5 1.5 0 010 3zm0-1a.5.5 0 100-1 .5.5 0 000 1zm3.189-3.64a.5.5 0 01-.721.692A3.408 3.408 0 008 9c-.937 0-1.813.378-2.453 1.037a.5.5 0 01-.717-.697A4.408 4.408 0 018 8c1.22 0 2.361.497 3.189 1.36zm2.02-2.14a.5.5 0 11-.721.693A6.2 6.2 0 008 6a6.199 6.199 0 00-4.46 1.885.5.5 0 01-.718-.697A7.199 7.199 0 018 5a7.2 7.2 0 015.21 2.22zm2.02-2.138a.5.5 0 01-.721.692A8.99 8.99 0 008 3a8.99 8.99 0 00-6.469 2.734.5.5 0 11-.717-.697A9.99 9.99 0 018 2a9.99 9.99 0 017.23 3.082z"}))},awt=iwt;var DL={};de(DL,{icon:()=>fwt});var Pyr=V(ne());var swt=["title","titleId"];function Ese(){return Ese=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var cwt=function(t){var n=t.title,r=t.titleId,o=lwt(t,swt);return c("svg",Ese({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14.447 3.724l-6-3a1 1 0 00-.894 0l-6 3A1 1 0 001 4.618v6.764a1 1 0 00.553.894l6 3a1 1 0 00.894 0l6-3a1 1 0 00.553-.894V4.618a1 1 0 00-.553-.894zM5.871 5.897l5.343-2.672 2.158 1.079L8 6.943zM8 1.618l2.096 1.048-5.353 2.677-2.115-1.039zM2 5.11l2.25 1.105V9a.5.5 0 001 0V6.706L7.5 7.811v6.321L2 11.382zm6.5 9.022v-6.32L14 5.11v6.272z"}))},fwt=cwt;var zL={};de(zL,{icon:()=>vwt});var Cyr=V(ne());var pwt=["title","titleId"];function Ise(){return Ise=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mwt=function(t){var n=t.title,r=t.titleId,o=dwt(t,pwt);return c("svg",Ise({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M3 1a1 1 0 00-1 1v12a1 1 0 001 1h5a4.995 4.995 0 01-.584-1H3V2h7v2a1 1 0 001 1h2v2.1c.348.07.682.177 1 .316V4a1 1 0 00-.293-.707l-2-2A1 1 0 0011 1H3zm13 11a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},vwt=mwt;var NL={};de(NL,{icon:()=>Owt});var Ayr=V(ne());var gwt=["title","titleId"];function kse(){return kse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wwt=function(t){var n=t.title,r=t.titleId,o=ywt(t,gwt);return c("svg",kse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M3 1a1 1 0 011-1h8a1 1 0 01.707.293l2 2A1 1 0 0115 3v5a4.995 4.995 0 00-1-.584V4h-2a1 1 0 01-1-1V1H4v12h3.1c.07.348.177.682.316 1H4a1 1 0 01-1-1V1zm5 14H2V2a1 1 0 00-1 1v12a1 1 0 001 1h7a5.029 5.029 0 01-1-1zm8-3a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.708l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},Owt=wwt;var LL={};de(LL,{icon:()=>Iwt});var Ryr=V(ne());var xwt=["title","titleId"];function Pse(){return Pse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Swt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ewt=function(t){var n=t.title,r=t.titleId,o=_wt(t,xwt);return c("svg",Pse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.993 8.17c0 .83-.673 1.507-1.499 1.507H5.498A1.505 1.505 0 013.999 8.17V6.662h7.994V8.17zm-2.998 5.998c0 .455-.448.827-.999.827-.55 0-1-.372-1-.827v-3.486h2v3.486zM4 5.658h1.262V1.005H4v4.653zm2.261 0h1.244V1.005H6.26v4.653zm2.244 0h1.235V1.005H8.504v4.653zm2.234 0h1.254V1.005h-1.254v4.653zM3.008 0L3 8.17a2.509 2.509 0 002.498 2.512h.5v3.486c0 1.01.896 1.832 1.998 1.832 1.102 0 1.998-.822 1.998-1.832v-3.486h.5a2.509 2.509 0 002.498-2.512L13 0H3.008z"}))},Iwt=Ewt;var FL={};de(FL,{icon:()=>Twt});var zyr=V(ne());var kwt=["title","titleId"];function jse(){return jse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cwt=function(t){var n=t.title,r=t.titleId,o=Pwt(t,kwt);return c("svg",jse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.84 2.019L3.046 8.57c-.987.952-1.133 2.517-.199 3.516.951 1.021 2.58 1.106 3.64.19.034-.03.068-.061.1-.092l5.655-5.452a.484.484 0 000-.703.53.53 0 00-.729 0L5.92 11.421c-.572.551-1.505.657-2.131.163a1.455 1.455 0 01-.118-2.211l6.899-6.651a2.646 2.646 0 013.644 0 2.422 2.422 0 010 3.513L7.3 12.901c-1.333 1.285-3.497 1.493-4.95.336-1.54-1.22-1.764-3.411-.5-4.897a3.33 3.33 0 01.238-.252l5.78-5.572a.484.484 0 000-.703.53.53 0 00-.73 0l-5.78 5.572a4.36 4.36 0 000 6.324c2.188 2.109 5.202 1.31 6.66-.095l6.925-6.676a3.39 3.39 0 000-4.92C13.534.66 11.25.66 9.841 2.019z"}))},Twt=Cwt;var BL={};de(BL,{icon:()=>zwt});var Lyr=V(ne());var Awt=["title","titleId"];function Cse(){return Cse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Rwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dwt=function(t){var n=t.title,r=t.titleId,o=Mwt(t,Awt);return c("svg",Cse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.664 14.871a7 7 0 01-2.42-12.778.5.5 0 01.612.06c.456.431 8.216 8.212 8.98 9.002a.5.5 0 01.063.618 7.002 7.002 0 01-7.235 3.098zm6.168-3.312a1961.733 1961.733 0 00-8.377-8.4 6 6 0 108.378 8.4zm2.095-2.548a.5.5 0 11-.99-.144c.01-.066.01-.066.018-.133a6.007 6.007 0 00-.034-1.714.5.5 0 11.987-.163c.108.655.122 1.326.04 1.999l-.021.155zm-1.273-5.138a.5.5 0 11-.808.59 6.026 6.026 0 00-1.304-1.308.5.5 0 01.59-.806 7.026 7.026 0 011.522 1.524zM9.169 1.098a.5.5 0 11-.166.986 6.105 6.105 0 00-1.849-.026.5.5 0 01-.14-.99 7.02 7.02 0 012.155.03z"}))},zwt=Dwt;var WL={};de(WL,{icon:()=>Wwt});var Byr=V(ne());var Nwt=["title","titleId"];function Tse(){return Tse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Bwt=function(t){var n=t.title,r=t.titleId,o=Lwt(t,Nwt);return c("svg",Tse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 2a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1zm6 0a1 1 0 00-1 1v10a1 1 0 102 0V3a1 1 0 00-1-1z"}))},Wwt=Bwt;var HL={};de(HL,{icon:()=>Uwt});var Hyr=V(ne());var Hwt=["title","titleId"];function Ase(){return Ase=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Vwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qwt=function(t){var n=t.title,r=t.titleId,o=$wt(t,Hwt);return c("svg",Ase({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M.586 2.586A2 2 0 000 4h1a1 1 0 011-1V2a2 2 0 00-1.414.586zM2 2h10.5a.5.5 0 010 1H2V2zM0 4h1v6.5a.5.5 0 01-1 0V4zm2.586.586A2 2 0 002 6h1a1 1 0 011-1V4a2 2 0 00-1.414.586zm0 8.828A2 2 0 012 12h1a1 1 0 001 1v1a2 2 0 01-1.414-.586zm12.828-8.828A2 2 0 0116 6h-1a1 1 0 00-1-1V4a2 2 0 011.414.586zm0 8.828A2 2 0 0016 12h-1a1 1 0 01-1 1v1a2 2 0 001.414-.586zM4 4h10v1H4zM3 7h12v1H3zm1 6h10v1H4zM2 6h1v6H2zm13 0h1v6h-1zm-5.5 4a.5.5 0 010 1H7.496a.5.5 0 010-1H9.5zm4 0a.5.5 0 010 1h-2.004a.5.5 0 010-1H13.5z"}))},Uwt=qwt;var $L={};de($L,{icon:()=>Ywt});var Vyr=V(ne());var Gwt=["title","titleId"];function Mse(){return Mse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Xwt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kwt=function(t){var n=t.title,r=t.titleId,o=Jwt(t,Gwt);return c("svg",Mse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.148 3.148L11 2l-9 9v3h3l9-9-1.144-1.144-8.002 7.998a.502.502 0 01-.708 0 .502.502 0 010-.708l8.002-7.998zM11 1c.256 0 .512.098.707.293l3 3a.999.999 0 010 1.414l-9 9A.997.997 0 015 15H2a1 1 0 01-1-1v-3c0-.265.105-.52.293-.707l9-9A.997.997 0 0111 1zM5 14H2v-3l3 3z"}))},Ywt=Kwt;var VL={};de(VL,{icon:()=>rOt});var Uyr=V(ne());var Qwt=["title","titleId"];function Rse(){return Rse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tOt=function(t){var n=t.title,r=t.titleId,o=Zwt(t,Qwt);return c("svg",Rse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M5 8c1.105 0 2-1.12 2-2.5S6.105 3 5 3 3 4.12 3 5.5 3.895 8 5 8zm0-1c.356 0 1-.452 1-1.5S5.356 4 5 4s-1 .452-1 1.5S4.644 7 5 7z"}),c("path",{d:"M10.5 3H12L5.5 13H4l6.5-10z"}),c("path",{fillRule:"evenodd",d:"M13 10.5c0 1.38-.895 2.5-2 2.5s-2-1.12-2-2.5S9.895 8 11 8s2 1.12 2 2.5zm-1 0c0 1.048-.644 1.5-1 1.5s-1-.452-1-1.5.644-1.5 1-1.5 1 .452 1 1.5z"}))},rOt=tOt;var qL={};de(qL,{icon:()=>sOt});var Jyr=V(ne());var nOt=["title","titleId"];function Dse(){return Dse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aOt=function(t){var n=t.title,r=t.titleId,o=oOt(t,nOt);return c("svg",Dse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 11h4.5a.5.5 0 100-1h-10a.5.5 0 000 1H7v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11zM4 4h1v6H4V4zm6 0h1v6h-1V4zM4.286 2C4.08 2 4 2.063 4 2v1c0-.063.08 0 .286 0h6.428C10.92 3 11 2.937 11 3V2c0 .063-.08 0-.286 0H4.286zm0-1h6.428C11.424 1 12 1.448 12 2v1c0 .552-.576 1-1.286 1H4.286C3.576 4 3 3.552 3 3V2c0-.552.576-1 1.286-1z"}))},sOt=aOt;var UL={};de(UL,{icon:()=>pOt});var Kyr=V(ne());var lOt=["title","titleId"];function zse(){return zse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fOt=function(t){var n=t.title,r=t.titleId,o=uOt(t,lOt);return c("svg",zse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9 11h4.5a.5.5 0 100-1h-10a.5.5 0 100 1H8v4.25c0 .414.224.75.5.75s.5-.336.5-.75V11zM5 4h7v6H5V4zm.286-3h6.428C12.424 1 13 1.448 13 2v1c0 .552-.576 1-1.286 1H5.286C4.576 4 4 3.552 4 3V2c0-.552.576-1 1.286-1z"}))},pOt=fOt;var GL={};de(GL,{icon:()=>gOt});var Qyr=V(ne());var dOt=["title","titleId"];function Nse(){return Nse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vOt=function(t){var n=t.title,r=t.titleId,o=hOt(t,dOt);return c("svg",Nse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.608 3.063C4.345 2.895 4 3.089 4 3.418v9.167c0 .329.345.523.608.356l7.2-4.584a.426.426 0 000-.711l-7.2-4.583zm.538-.844l7.2 4.583a1.426 1.426 0 010 2.399l-7.2 4.583C4.21 14.38 3 13.696 3 12.585V3.418C3 2.307 4.21 1.624 5.146 2.22z"}))},gOt=vOt;var JL={};de(JL,{icon:()=>xOt});var ebr=V(ne());var yOt=["title","titleId"];function Lse(){return Lse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OOt=function(t){var n=t.title,r=t.titleId,o=bOt(t,yOt);return c("svg",Lse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.345 6.801l-7.2-4.581C4.21 1.625 3 2.308 3 3.419v9.162c0 1.111 1.21 1.794 2.146 1.199l7.2-4.581a1.425 1.425 0 000-2.398z"}))},xOt=OOt;var XL={};de(XL,{icon:()=>kOt});var rbr=V(ne());var _Ot=["title","titleId"];function Fse(){return Fse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IOt=function(t){var n=t.title,r=t.titleId,o=SOt(t,_Ot);return c("svg",Fse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.25 3a.5.5 0 01.5.5v3.75h3.75a.5.5 0 01.5.5v.5a.5.5 0 01-.5.5H8.75v3.75a.5.5 0 01-.5.5h-.5a.5.5 0 01-.5-.5V8.75H3.5a.5.5 0 01-.5-.5v-.5a.5.5 0 01.5-.5h3.75V3.5a.5.5 0 01.5-.5h.5z"}))},kOt=IOt;var KL={};de(KL,{icon:()=>AOt});var obr=V(ne());var POt=["title","titleId"];function Bse(){return Bse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function COt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TOt=function(t){var n=t.title,r=t.titleId,o=jOt(t,POt);return c("svg",Bse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 7h3.5a.5.5 0 110 1H8v3.5a.5.5 0 11-1 0V8H3.5a.5.5 0 010-1H7V3.5a.5.5 0 011 0V7zm-.5-7C11.636 0 15 3.364 15 7.5S11.636 15 7.5 15 0 11.636 0 7.5 3.364 0 7.5 0zm0 .882a6.618 6.618 0 100 13.236A6.618 6.618 0 007.5.882z"}))},AOt=TOt;var YL={};de(YL,{icon:()=>NOt});var abr=V(ne());var MOt=["title","titleId"];function Wse(){return Wse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zOt=function(t){var n=t.title,r=t.titleId,o=ROt(t,MOt);return c("svg",Wse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 7V3.5a.5.5 0 00-1 0V7H3.5a.5.5 0 000 1H7v3.5a.5.5 0 101 0V8h3.5a.5.5 0 100-1H8zm-.5 8a7.5 7.5 0 110-15 7.5 7.5 0 010 15z"}))},NOt=zOt;var QL={};de(QL,{icon:()=>HOt});var lbr=V(ne());var LOt=["title","titleId"];function Hse(){return Hse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WOt=function(t){var n=t.title,r=t.titleId,o=FOt(t,LOt);return c("svg",Hse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 8.5a.5.5 0 111 0V12a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2h3.5a.5.5 0 010 1H4a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V8.5zm-5.12.339a.5.5 0 11-.706-.707L13.305 2H10.5a.5.5 0 110-1H14a1 1 0 011 1v3.5a.5.5 0 11-1 0V2.72L7.88 8.838z"}))},HOt=WOt;var ZL={};de(ZL,{icon:()=>GOt});var cbr=V(ne());var $Ot=["title","titleId"];function $se(){return $se=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UOt=function(t){var n=t.title,r=t.titleId,o=VOt(t,$Ot);return c("svg",$se({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.171 5.15L10.114 7H1.556C1.249 7 1 7.224 1 7.5s.249.5.556.5h8.526l-1.91 1.82a.52.52 0 000 .77c.227.213.6.213.828 0l2.05-1.95a1.552 1.552 0 000-2.31L9 4.38a.617.617 0 00-.829 0 .52.52 0 000 .77z"}),c("path",{d:"M6.804 12.792A.993.993 0 016 11.82V10H5v1.826c0 .945.673 1.76 1.608 1.945l6 1.19A1.992 1.992 0 0015 13.016V1.984A2 2 0 0012.608.04l-6 1.19C5.673 1.415 5 2.23 5 3.175V5h1V3.18c0-.472.336-.879.804-.972l6-1.189A1 1 0 0114 1.991v11.018a.995.995 0 01-1.196.972l-6-1.19z"}))},GOt=UOt;var eF={};de(eF,{icon:()=>QOt});var pbr=V(ne());var JOt=["title","titleId"];function Vse(){return Vse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KOt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YOt=function(t){var n=t.title,r=t.titleId,o=XOt(t,JOt);return c("svg",Vse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 14A6 6 0 118 2a6 6 0 010 12zm0-1A5 5 0 108 3a5 5 0 000 10zm-.186-1.065A.785.785 0 017 11.12c0-.48.34-.82.814-.82.475 0 .809.34.809.82 0 .475-.334.815-.809.815zM5.9 6.317C5.96 5.168 6.755 4.4 8.048 4.4c1.218 0 2.091.759 2.091 1.8 0 .736-.36 1.304-1.03 1.707-.56.33-.717.56-.717 1.022v.305l-.1.1H7.47l-.1-.1v-.431c-.005-.646.302-1.104.987-1.514.527-.322.708-.59.708-1.047 0-.536-.416-.91-1.05-.91-.652 0-1.064.374-1.112.998l-.1.092H6l-.1-.105z"}))},QOt=YOt;var tF={};de(tF,{icon:()=>n4t});var hbr=V(ne());var ZOt=["title","titleId"];function qse(){return qse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r4t=function(t){var n=t.title,r=t.titleId,o=e4t(t,ZOt);return c("svg",qse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.848 2.47a1 1 0 01-.318 1.378A7.284 7.284 0 003.75 7.01 3 3 0 111 10v-.027a3.521 3.521 0 01.01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 011.378.318zm7 0a1 1 0 01-.318 1.378 7.283 7.283 0 00-2.78 3.162A3 3 0 118 10v-.027a3.521 3.521 0 01.01-.232c.009-.15.027-.36.062-.618.07-.513.207-1.22.484-2.014.552-1.59 1.67-3.555 3.914-4.957a1 1 0 011.378.318z"}))},n4t=r4t;var rF={};de(rF,{icon:()=>l4t});var vbr=V(ne());var o4t=["title","titleId"];function Use(){return Use=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var s4t=function(t){var n=t.title,r=t.titleId,o=i4t(t,o4t);return c("svg",Use({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.228 2.942a.5.5 0 11-.538.842A5 5 0 1013 8a.5.5 0 111 0 6 6 0 11-2.772-5.058zM14 1.5v3A1.5 1.5 0 0112.5 6h-3a.5.5 0 010-1h3a.5.5 0 00.5-.5v-3a.5.5 0 111 0z"}))},l4t=s4t;var nF={};de(nF,{icon:()=>d4t});var ybr=V(ne());var u4t=["title","titleId"];function Gse(){return Gse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function f4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var p4t=function(t){var n=t.title,r=t.titleId,o=c4t(t,u4t);return c("svg",Gse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.684.895L6.074.358a1 1 0 00-1.296.753L4.2 4H2.5a.5.5 0 000 1h1.626a4.007 4.007 0 00.11 2.359l-2.072-.345A1 1 0 001 8v1c.364 0 .706.097 1 .268V8l1 .167 1.859.31 2.163.36.478.08v6L2 14v-1.268A1.99 1.99 0 011 13v1a1 1 0 00.836.986l6 1c.108.018.22.018.328 0l6-1A1 1 0 0015 14v-1a1.99 1.99 0 01-1-.268V14l-5.5.917v-6l.478-.08 2.163-.36L13 8.166 14 8v1.268A1.99 1.99 0 0115 9V8a1 1 0 00-1.164-.986l-2.073.345A3.991 3.991 0 0011.874 5H13.5a.5.5 0 000-1h-1.7l-.578-2.89A1 1 0 009.925.359L8.316.895a1 1 0 01-.632 0zm2.88 6.664A3.013 3.013 0 0010.83 5H5.17a3.013 3.013 0 00.266 2.559L8 7.986l2.564-.427zM10.8 4H9.2L9 3l1.5-.5.3 1.5zM1 12a1 1 0 100-2 1 1 0 000 2zm14 0a1 1 0 100-2 1 1 0 000 2z"}))},d4t=p4t;var oF={};de(oF,{icon:()=>y4t});var wbr=V(ne());var h4t=["title","titleId"];function Jse(){return Jse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function v4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var g4t=function(t){var n=t.title,r=t.titleId,o=m4t(t,h4t);return c("svg",Jse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.994 4c1.059 0 1.924.818 2 1.856l.006.15v1.988a2.005 2.005 0 01-1.856 2L12 10H3.484l1.91 1.82a.52.52 0 010 .77.616.616 0 01-.829 0l-2.05-1.95a1.551 1.551 0 010-2.31l2.05-1.95a.617.617 0 01.83 0 .52.52 0 010 .77L3.45 9H12c.514-.003.935-.39.993-.888L13 7.994V6.006c0-.516-.388-.941-.888-1L11.994 5H9.5a.5.5 0 01-.09-.992L9.5 4h2.494z"}))},y4t=g4t;var iF={};de(iF,{icon:()=>_4t});var xbr=V(ne());var b4t=["title","titleId"];function Xse(){return Xse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x4t=function(t){var n=t.title,r=t.titleId,o=w4t(t,b4t);return c("svg",Xse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.008 2H2.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275v11.436c0 .181.002.245.007.275.03.005.094.007.275.007h11.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V4.62c0-.13-.001-.18-.004-.204a2.654 2.654 0 00-.141-.147L11.73 2.145a2.654 2.654 0 00-.147-.141A2.654 2.654 0 0011.38 2h-.388c.005.08.008.172.008.282v2.436c0 .446-.046.607-.134.77a.909.909 0 01-.378.378c-.163.088-.324.134-.77.134H6.282c-.446 0-.607-.046-.77-.134a.909.909 0 01-.378-.378C5.046 5.325 5 5.164 5 4.718V2.282c0-.11.003-.202.008-.282zM2.282 1h9.098c.259 0 .348.01.447.032a.87.87 0 01.273.113c.086.054.156.11.338.293l2.124 2.124c.182.182.239.252.293.338a.87.87 0 01.113.273c.023.1.032.188.032.447v9.098c0 .446-.046.607-.134.77a.909.909 0 01-.378.378c-.163.088-.324.134-.77.134H2.282c-.446 0-.607-.046-.77-.134a.909.909 0 01-.378-.378c-.088-.163-.134-.324-.134-.77V2.282c0-.446.046-.607.134-.77a.909.909 0 01.378-.378c.163-.088.324-.134.77-.134zM6 2.282v2.436c0 .181.002.245.007.275.03.005.094.007.275.007h3.436c.181 0 .245-.002.275-.007.005-.03.007-.094.007-.275V2.282c0-.181-.002-.245-.007-.275A2.248 2.248 0 009.718 2H6.282c-.181 0-.245.002-.275.007-.005.03-.007.094-.007.275zM8 12a2 2 0 110-4 2 2 0 010 4zm0-1a1 1 0 100-2 1 1 0 000 2z"}))},_4t=x4t;var aF={};de(aF,{icon:()=>P4t});var Sbr=V(ne());var S4t=["title","titleId"];function Kse(){return Kse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function I4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k4t=function(t){var n=t.title,r=t.titleId,o=E4t(t,S4t);return c("svg",Kse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M12.5 12a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm4-2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm2-1a.5.5 0 110-1 .5.5 0 010 1zm0-3a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm0 2a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1zm-2 0a.5.5 0 110 1 .5.5 0 010-1zm2-2a.5.5 0 110 1 .5.5 0 010-1zm6-6a.5.5 0 110 1 .5.5 0 010-1zm-2 2a.5.5 0 110 1 .5.5 0 010-1z"}))},P4t=k4t;var sF={};de(sF,{icon:()=>M4t});var Ibr=V(ne());var j4t=["title","titleId"];function Yse(){return Yse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function T4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var A4t=function(t){var n=t.title,r=t.titleId,o=C4t(t,j4t);return c("svg",Yse({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.271 11.978l3.872 3.873a.502.502 0 00.708 0 .502.502 0 000-.708l-3.565-3.564c2.38-2.747 2.267-6.923-.342-9.532-2.73-2.73-7.17-2.73-9.898 0-2.728 2.729-2.728 7.17 0 9.9a6.955 6.955 0 004.949 2.05.5.5 0 000-1 5.96 5.96 0 01-4.242-1.757 6.01 6.01 0 010-8.486c2.337-2.34 6.143-2.34 8.484 0a6.01 6.01 0 010 8.486.5.5 0 00.034.738z"}))},M4t=A4t;var lF={};de(lF,{icon:()=>L4t});var Pbr=V(ne());var R4t=["title","titleId"];function Qse(){return Qse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function z4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var N4t=function(t){var n=t.title,r=t.titleId,o=D4t(t,R4t);return c("svg",Qse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M11.875 3.418a6 6 0 10.707.707l-2.46 2.46-1.156 1.156a1 1 0 11-.707-.707l.757-.757a2 2 0 00-2.43 3.137.5.5 0 11-.707.707 3 3 0 013.86-4.567l.714-.714A4 4 0 108 12a.5.5 0 110 1 5 5 0 113.164-8.871l.71-.71zm.709-.709a7 7 0 10.707.707l.366-.366a.5.5 0 10-.707-.707l-.366.366z"}))},L4t=N4t;var uF={};de(uF,{icon:()=>$4t});var Cbr=V(ne());var F4t=["title","titleId"];function Zse(){return Zse=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function W4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H4t=function(t){var n=t.title,r=t.titleId,o=B4t(t,F4t);return c("svg",Zse({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 00-.707-.707l-.366.366A7 7 0 108 15a4.994 4.994 0 01-.597-1.03 6 6 0 114.471-10.552l-.71.71a5 5 0 10-4.08 8.788 5.027 5.027 0 01-.082-1.042A4.002 4.002 0 018 4a3.98 3.98 0 012.453.84l-.715.714a3 3 0 00-3.86 4.567.5.5 0 10.708-.707 2 2 0 012.43-3.137l-.757.757a1 1 0 10.707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 011.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-4 .5a.577.577 0 01-.57-.495l-.29-2.015a.867.867 0 111.718 0l-.288 2.015a.577.577 0 01-.57.495zm0 2.5a1 1 0 100-2 1 1 0 000 2z"}))},$4t=H4t;var cF={};de(cF,{icon:()=>J4t});var Abr=V(ne());var V4t=["title","titleId"];function ele(){return ele=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var G4t=function(t){var n=t.title,r=t.titleId,o=q4t(t,V4t);return c("svg",ele({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13.657 3.05a.5.5 0 10-.707-.707l-.366.366A7 7 0 108 15a4.994 4.994 0 01-.597-1.03 6 6 0 114.471-10.552l-.71.71a5 5 0 10-4.08 8.788 5.028 5.028 0 01-.082-1.042A4.002 4.002 0 018 4a3.98 3.98 0 012.453.84l-.715.714a3 3 0 00-3.86 4.567.5.5 0 10.708-.707 2 2 0 012.43-3.137l-.757.757a1 1 0 10.707.707l1.155-1.155 2.46-2.46a5.972 5.972 0 011.39 3.277c.367.158.713.36 1.029.597 0-1.636-.57-3.271-1.71-4.584l.367-.366zM16 12a4 4 0 11-8 0 4 4 0 018 0zm-1.646-1.354a.5.5 0 010 .707l-2.5 2.5a.5.5 0 01-.708 0l-1-1a.5.5 0 01.708-.707l.646.647 2.146-2.147a.5.5 0 01.708 0z"}))},J4t=G4t;var fF={};de(fF,{icon:()=>Z4t});var Rbr=V(ne());var X4t=["title","titleId"];function tle(){return tle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y4t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q4t=function(t){var n=t.title,r=t.titleId,o=K4t(t,X4t);return c("svg",tle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 6h1v1H4V6zm2 2H5V7h1v1zm0 1V8h1v1H6zm-1 1V9h1v1H5zm0 0v1H4v-1h1zm2 0h4v1H7v-1z"}),c("path",{fillRule:"evenodd",d:"M1 3a1 1 0 011-1h12a1 1 0 011 1v10a1 1 0 01-1 1H2a1 1 0 01-1-1V3zm1 1h12v9H2V4z",clipRule:"evenodd"}))},Z4t=Q4t;var pF={};de(pF,{icon:()=>o6t});var zbr=V(ne());var e6t=["title","titleId"];function rle(){return rle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function r6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var n6t=function(t){var n=t.title,r=t.titleId,o=t6t(t,e6t);return c("svg",rle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.134 7.031L8 12.764l2.866-5.733L8 2.016 5.134 7.03zM8 0l4 7-4 8-4-8 4-7z"}))},o6t=n6t;var dF={};de(dF,{icon:()=>u6t});var Lbr=V(ne());var i6t=["title","titleId"];function nle(){return nle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function s6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var l6t=function(t){var n=t.title,r=t.titleId,o=a6t(t,i6t);return c("svg",nle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 6.81v6.38c0 .493.448.9.992.9h7.016c.543 0 .992-.406.992-.9V6.81c0-.493-.448-.9-.992-.9H3.992c-.543 0-.992.406-.992.9zM6 5v.91h3V5h2.008C12.108 5 13 5.818 13 6.81v6.38c0 1-.9 1.81-1.992 1.81H3.992C2.892 15 2 14.182 2 13.19V6.81C2 5.81 2.9 5 3.992 5H6zm1.997-3.552A.506.506 0 018 1.5v8a.5.5 0 01-1 0v-8a.51.51 0 010-.017L5.18 3.394a.52.52 0 01-.77 0 .617.617 0 010-.829L6.36.515a1.552 1.552 0 012.31 0l1.95 2.05c.214.229.214.601 0 .83a.52.52 0 01-.77 0L7.997 1.447z"}))},u6t=l6t;var hF={};de(hF,{icon:()=>h6t});var Bbr=V(ne());var c6t=["title","titleId"];function ole(){return ole=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function p6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var d6t=function(t){var n=t.title,r=t.titleId,o=f6t(t,c6t);return c("svg",ole({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.007.5a.5.5 0 011 0v2.024a.999.999 0 00.268-.227l1.027-1.233a.5.5 0 01.769.64L8.275 3.86a.999.999 0 01-.268.227v2.548l2.207-1.274c0-.114.02-.231.062-.346l.968-2.632a.5.5 0 11.938.345l-.554 1.506a.998.998 0 00-.062.346l1.753-1.012a.5.5 0 11.5.866l-1.753 1.012c.1.057.21.098.33.119l1.582.273a.5.5 0 11-.17.986l-2.764-.478a1 1 0 01-.33-.12L8.506 7.5l2.207 1.274a1 1 0 01.33-.119l2.764-.478a.5.5 0 11.17.986l-1.582.273a.999.999 0 00-.33.12l1.753 1.011a.5.5 0 11-.5.866l-1.753-1.012c0 .115.02.231.062.346l.554 1.506a.5.5 0 01-.938.345l-.968-2.632a.999.999 0 01-.062-.346L8.007 8.366v2.548c.098.058.19.133.268.227l1.796 2.155a.5.5 0 01-.769.64l-1.027-1.233a.999.999 0 00-.268-.226V14.5a.5.5 0 01-1 0v-2.024a.999.999 0 00-.269.227l-1.027 1.233a.5.5 0 01-.768-.64l1.795-2.155a.999.999 0 01.269-.227V8.366L4.8 9.64c0 .114-.02.231-.062.346l-.969 2.632a.5.5 0 11-.938-.345l.554-1.506a1 1 0 00.062-.346l-1.753 1.012a.5.5 0 01-.5-.866l1.753-1.012a.999.999 0 00-.33-.119l-1.582-.273a.5.5 0 01.17-.986l2.764.478c.12.02.232.062.33.12L6.508 7.5 4.3 6.226a.999.999 0 01-.33.119l-2.765.478a.5.5 0 11-.17-.986l1.582-.273a.999.999 0 00.33-.12L1.194 4.434a.5.5 0 11.5-.866l1.753 1.012c0-.114-.02-.231-.062-.346L2.83 2.727a.5.5 0 11.938-.345l.969 2.632a.999.999 0 01.062.346l2.207 1.274V4.086a1 1 0 01-.269-.227L4.943 1.704a.5.5 0 01.768-.64l1.027 1.233c.079.094.17.17.269.227V.5z"}))},h6t=d6t;var mF={};de(mF,{icon:()=>b6t});var Hbr=V(ne());var m6t=["title","titleId"];function ile(){return ile=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function g6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var y6t=function(t){var n=t.title,r=t.titleId,o=v6t(t,m6t);return c("svg",ile({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.308 7h8.136c.307 0 .556.224.556.5s-.249.5-.556.5H4.308l4.096 4.096a.5.5 0 01-.707.707L3.454 8.561a1.494 1.494 0 01-.433-.925.454.454 0 010-.272c.03-.338.175-.666.433-.925l4.243-4.242a.5.5 0 11.707.707L4.308 7z",fillRule:"evenodd"}))},b6t=y6t;var vF={};de(vF,{icon:()=>S6t});var Vbr=V(ne());var w6t=["title","titleId"];function ale(){return ale=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function x6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _6t=function(t){var n=t.title,r=t.titleId,o=O6t(t,w6t);return c("svg",ale({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11.692 7H3.556C3.249 7 3 7.224 3 7.5s.249.5.556.5h8.136l-4.096 4.096a.5.5 0 00.707.707l4.243-4.242c.258-.259.403-.587.433-.925a.454.454 0 000-.272 1.494 1.494 0 00-.433-.925L8.303 2.197a.5.5 0 10-.707.707L11.692 7z"}))},S6t=_6t;var gF={};de(gF,{icon:()=>j6t});var Ubr=V(ne());var E6t=["title","titleId"];function sle(){return sle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function k6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var P6t=function(t){var n=t.title,r=t.titleId,o=I6t(t,E6t);return c("svg",sle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 11.692V3.556C7 3.249 7.224 3 7.5 3s.5.249.5.556v8.136l4.096-4.096a.5.5 0 01.707.707l-4.242 4.243a1.494 1.494 0 01-.925.433.454.454 0 01-.272 0 1.494 1.494 0 01-.925-.433L2.197 8.303a.5.5 0 11.707-.707L7 11.692z"}))},j6t=P6t;var yF={};de(yF,{icon:()=>R6t});var Jbr=V(ne());var C6t=["title","titleId"];function lle(){return lle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function A6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var M6t=function(t){var n=t.title,r=t.titleId,o=T6t(t,C6t);return c("svg",lle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 4.207v8.237c0 .307-.224.556-.5.556s-.5-.249-.5-.556V4.207L2.904 8.303a.5.5 0 01-.707-.707l4.242-4.242a1.5 1.5 0 012.122 0l4.242 4.242a.5.5 0 11-.707.707L8 4.207z"}))},R6t=M6t;var bF={};de(bF,{icon:()=>F6t});var Kbr=V(ne());var D6t=["title","titleId"];function ule(){return ule=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function N6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var L6t=function(t){var n=t.title,r=t.titleId,o=z6t(t,D6t);return c("svg",ule({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7 12.786V3.2L3.604 6.596a.5.5 0 01-.708-.707l3.536-3.535a1.5 1.5 0 012.121 0l3.536 3.535a.5.5 0 01-.707.707L8 3.214v9.557l3.382-3.382a.5.5 0 01.707.707l-3.536 3.536a1.5 1.5 0 01-2.121 0l-3.536-3.536a.5.5 0 01.708-.707L7 12.786z"}))},F6t=L6t;var wF={};de(wF,{icon:()=>V6t});var Qbr=V(ne());var B6t=["title","titleId"];function cle(){return cle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function H6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $6t=function(t){var n=t.title,r=t.titleId,o=W6t(t,B6t);return c("svg",cle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m8 8h2v1h-2v2h-1v-2h-2v-1h2V8h1v2zM6 3c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3z"}))},V6t=$6t;var OF={};de(OF,{icon:()=>X6t});var e2r=V(ne());var q6t=["title","titleId"];function fle(){return fle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function G6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var J6t=function(t){var n=t.title,r=t.titleId,o=U6t(t,q6t);return c("svg",fle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M14 10h2v1h-2v2h-1v-2h-2v-1h2V8h1v2zM6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2"}))},X6t=J6t;var xF={};de(xF,{icon:()=>ext});var r2r=V(ne());var K6t=["title","titleId"];function ple(){return ple=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Q6t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Z6t=function(t){var n=t.title,r=t.titleId,o=Y6t(t,K6t);return c("svg",ple({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 004.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 008 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126l-2.202 2.226-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L8 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C7.905 3.05 7.927 3 8 3"}))},ext=Z6t;var _F={};de(_F,{icon:()=>ixt});var o2r=V(ne());var txt=["title","titleId"];function dle(){return dle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oxt=function(t){var n=t.title,r=t.titleId,o=rxt(t,txt);return c("svg",dle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3"}))},ixt=oxt;var SF={};de(SF,{icon:()=>cxt});var a2r=V(ne());var axt=["title","titleId"];function hle(){return hle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uxt=function(t){var n=t.title,r=t.titleId,o=sxt(t,axt);return c("svg",hle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 004.864 14c.142 0 .289-.036.429-.116L8 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 008 2"}))},cxt=uxt;var EF={};de(EF,{icon:()=>mxt});var l2r=V(ne());var fxt=["title","titleId"];function mle(){return mle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hxt=function(t){var n=t.title,r=t.titleId,o=pxt(t,fxt);return c("svg",mle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2"}))},mxt=hxt;var IF={};de(IF,{icon:()=>wxt});var c2r=V(ne());var vxt=["title","titleId"];function vle(){return vle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bxt=function(t){var n=t.title,r=t.titleId,o=gxt(t,vxt);return c("svg",vle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 00-.792.511l-1.33 2.924-3.128.446c-.71.102-1.001.976-.496 1.487l2.313 2.336-.563 3.268A.877.877 0 002.864 14c.142 0 .289-.036.429-.116L6 12.342l2.707 1.542c.14.08.287.116.43.116a.877.877 0 00.859-1.027l-.563-3.269 2.313-2.336c.505-.511.214-1.385-.496-1.487l-3.128-.446-1.33-2.923A.86.86 0 006 2m0 1c.073 0 .095.049.104.07l1.267 2.783.162.356.387.055 2.978.425c.017.002.071.01.095.08a.116.116 0 01-.029.126L8.762 9.121l-.259.261.063.362.535 3.112c.007.04 0 .07-.023.098a.127.127 0 01-.091.046.106.106 0 01-.055-.016l-2.578-1.469L6 11.314l-.354.201-2.579 1.469a.103.103 0 01-.054.016.127.127 0 01-.091-.046c-.023-.028-.03-.058-.024-.098l.536-3.112.063-.362-.259-.261-2.202-2.226a.116.116 0 01-.029-.126.108.108 0 01.094-.08l2.98-.425.386-.055.162-.356 1.267-2.786C5.905 3.05 5.927 3 6 3zm10 7v1h-5v-1h5z"}))},wxt=bxt;var kF={};de(kF,{icon:()=>Ext});var p2r=V(ne());var Oxt=["title","titleId"];function gle(){return gle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _xt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Sxt=function(t){var n=t.title,r=t.titleId,o=xxt(t,Oxt);return c("svg",gle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6 2a.86.86 0 01.792.511l1.33 2.924 3.128.446c.71.102 1.001.976.496 1.487L9.433 9.704l.563 3.268A.877.877 0 019.136 14a.862.862 0 01-.429-.116L6 12.342l-2.707 1.542a.862.862 0 01-.43.116.877.877 0 01-.859-1.027l.563-3.269L.254 7.368C-.25 6.857.04 5.983.75 5.88l3.128-.446 1.33-2.923A.86.86 0 016 2zm10 8v1h-5v-1h5z"}))},Ext=Sxt;var PF={};de(PF,{icon:()=>Cxt});var h2r=V(ne());var Ixt=["title","titleId"];function yle(){return yle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Pxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jxt=function(t){var n=t.title,r=t.titleId,o=kxt(t,Ixt);return c("svg",yle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 14v-4h1v4h5V5h1v9a1 1 0 01-1 1H2a1 1 0 01-1-1v-2h1v2h6zm4.853-10.146l-2.999 3a1.5 1.5 0 01-2.538 1.568l-2.714.904L4 9.527a1.5 1.5 0 11-.316-.948L7 7.473a1.5 1.5 0 012.146-1.327l3-3a1.5 1.5 0 11.707.707z"}))},Cxt=jxt;var jF={};de(jF,{icon:()=>Dxt});var v2r=V(ne());var Txt=["title","titleId"];function ble(){return ble=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Mxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Rxt=function(t){var n=t.title,r=t.titleId,o=Axt(t,Txt);return c("svg",ble({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4 2h8a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2zm0 1a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1V4a1 1 0 00-1-1H4z",fillRule:"evenodd"}))},Dxt=Rxt;var CF={};de(CF,{icon:()=>Bxt});var y2r=V(ne());var zxt=["title","titleId"];function wle(){return wle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fxt=function(t){var n=t.title,r=t.titleId,o=Nxt(t,zxt);return c("svg",wle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("rect",{width:12,height:12,x:2,y:2,rx:2,fillRule:"evenodd"}))},Bxt=Fxt;var TF={};de(TF,{icon:()=>qxt});var w2r=V(ne());var Wxt=["title","titleId"];function Ole(){return Ole=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $xt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Vxt=function(t){var n=t.title,r=t.titleId,o=Hxt(t,Wxt);return c("svg",Ole({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.259 3.034A1.001 1.001 0 0012 3H4a1 1 0 00-1 1v8c0 .09.012.176.034.259l9.225-9.225zm.707.707l-9.225 9.225c.083.022.17.034.259.034h8a1 1 0 001-1V4c0-.09-.012-.176-.034-.259zM4 2h8a2 2 0 012 2v8a2 2 0 01-2 2H4a2 2 0 01-2-2V4a2 2 0 012-2z"}))},qxt=Vxt;var AF={};de(AF,{icon:()=>Kxt});var x2r=V(ne());var Uxt=["title","titleId"];function xle(){return xle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Xxt=function(t){var n=t.title,r=t.titleId,o=Gxt(t,Uxt);return c("svg",xle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fillRule:"evenodd",transform:"translate(0 2)"},c("path",{fillRule:"nonzero",d:"M2 6a1 1 0 01-1-1V2a1 1 0 011-1h12a1 1 0 011 1v3a1 1 0 01-1 1H2zm13 2v3a1 1 0 01-1 1H2a1 1 0 01-1-1V8a1 1 0 011-1h12a1 1 0 011 1zm1-3V2a2 2 0 00-2-2H2a2 2 0 00-2 2v3c0 .601.271 1.133.69 1.5C.271 6.867 0 7.399 0 8v3a2 2 0 002 2h12a2 2 0 002-2V8c0-.601-.271-1.133-.689-1.5.418-.367.689-.899.689-1.5z"}),c("circle",{cx:4.5,cy:9.5,r:1.5}),c("circle",{cx:4.5,cy:3.5,r:1.5}),c("path",{d:"M12 8h1v3h-1zM10 8h1v3h-1zM12 2h1v3h-1zM10 2h1v3h-1z"})))},Kxt=Xxt;var MF={};de(MF,{icon:()=>t_t});var S2r=V(ne());var Yxt=["title","titleId"];function _le(){return _le=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Zxt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e_t=function(t){var n=t.title,r=t.titleId,o=Qxt(t,Yxt);return c("svg",_le({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M9.297 3L8.93 5.102h1.351l-.32 1.828H8.609l-.656 3.883c-.036.265-.02.466.05.601.071.135.247.208.528.219.11.005.334-.008.672-.04L9.016 13.5a4.16 4.16 0 01-1.383.195c-.797-.01-1.393-.244-1.79-.703-.395-.458-.557-1.08-.484-1.867l.688-4.195H5l.313-1.828h1.046L6.727 3h2.57z"}))},t_t=e_t;var RF={};de(RF,{icon:()=>a_t});var I2r=V(ne());var r_t=["title","titleId"];function Sle(){return Sle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i_t=function(t){var n=t.title,r=t.titleId,o=n_t(t,r_t);return c("svg",Sle({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M6 2H1v12h3V7a1 1 0 011-1h5a1 1 0 011 1v1h4V4H7c-.621 0-1-.379-1-1V2zm10 6v6a1 1 0 01-1 1H1a1 1 0 01-1-1V2a1 1 0 011-1h5.25a.75.75 0 01.75.75l-.004.206C6.99 2.317 6.974 3 7 3h8a1 1 0 011 1v4zm-1 1h-4a1 1 0 01-1-1V7H5v7h10V9zM2 4.5a.5.5 0 01.5-.5h2a.5.5 0 010 1h-2a.5.5 0 01-.5-.5zM6.5 9a.5.5 0 000 1h2a.5.5 0 000-1h-2z"}))},a_t=i_t;var DF={};de(DF,{icon:()=>f_t});var P2r=V(ne());var s_t=["title","titleId"];function Ele(){return Ele=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c_t=function(t){var n=t.title,r=t.titleId,o=l_t(t,s_t);return c("svg",Ele({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12 8a4 4 0 11-8 0 4 4 0 018 0zM7.25.75a.75.75 0 011.5 0v1.5a.75.75 0 11-1.5 0V.75zm0 13a.75.75 0 011.5 0v1.5a.75.75 0 01-1.5 0v-1.5zm5.346-11.407a.75.75 0 011.06 1.06l-1.06 1.061a.75.75 0 01-1.06-1.06l1.06-1.06zm-9.192 9.193a.75.75 0 111.06 1.06l-1.06 1.06a.75.75 0 01-1.06-1.06l1.06-1.06zM.75 8.75a.75.75 0 010-1.5h1.5a.75.75 0 110 1.5H.75zm13 0a.75.75 0 010-1.5h1.5a.75.75 0 010 1.5h-1.5zM2.343 3.404a.75.75 0 111.06-1.06l1.061 1.06a.75.75 0 01-1.06 1.06l-1.06-1.06zm9.193 9.192a.75.75 0 011.06-1.06l1.06 1.06a.75.75 0 01-1.06 1.06l-1.06-1.06z"}))},f_t=c_t;var zF={};de(zF,{icon:()=>v_t});var C2r=V(ne());var p_t=["title","titleId"];function Ile(){return Ile=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function h_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var m_t=function(t){var n=t.title,r=t.titleId,o=d_t(t,p_t);return c("svg",Ile({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("rect",{x:2,y:2,width:12,height:12,rx:3}),c("rect",{className:"euiSwatchInput__stroke",x:2.5,y:2.5,width:11,height:11,rx:2}))},v_t=m_t;var NF={};de(NF,{icon:()=>O_t});var A2r=V(ne());var g_t=["title","titleId"];function kle(){return kle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w_t=function(t){var n=t.title,r=t.titleId,o=y_t(t,g_t);return c("svg",kle({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M10.8 0H2a1 1 0 00-1 1v8l1-1V1h8v3.5a.5.5 0 00.5.5H14v10H2v-1a3.5 3.5 0 013.5-3.5H8V13l3-3-3-3v2.5H5.5A4.5 4.5 0 001 14v1a1 1 0 001 1h12a1 1 0 001-1V4.429c0-.256-.098-.503-.274-.689l-3.2-3.428A1.002 1.002 0 0010.8 0z"}))},O_t=w_t;var LF={};de(LF,{icon:()=>I_t});var R2r=V(ne());var x_t=["title","titleId"];function Ple(){return Ple=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E_t=function(t){var n=t.title,r=t.titleId,o=__t(t,x_t);return c("svg",Ple({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1 1v14h14V1H1zM0 0h16v16H0V0zm9 1v14h1V1H9zM3 3.5h4v-1H3v1zm0 3h4v-1H3v1zm0 3h4v-1H3v1z"}))},I_t=E_t;var FF={};de(FF,{icon:()=>T_t});var z2r=V(ne());var k_t=["title","titleId"];function jle(){return jle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C_t=function(t){var n=t.title,r=t.titleId,o=P_t(t,k_t);return c("svg",jle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.496 7a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 8 6 7.776 6 7.5s.128-.5.286-.5h3.428zM4.496 5a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 6 6 5.776 6 5.5s.128-.5.286-.5h3.428zM4.496 9a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428zm-5.218 2a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm5.218 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 12 6 11.776 6 11.5s.128-.5.286-.5h3.428zm-5.218 2a.5.5 0 010 1H2.495a.5.5 0 010-1h2.001zm9-6a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0-2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 4a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm0 2a.5.5 0 010 1h-2.001a.5.5 0 010-1h2.001zm-3.782 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 14 6 13.776 6 13.5s.128-.5.286-.5h3.428z"}))},T_t=C_t;var BF={};de(BF,{icon:()=>z_t});var L2r=V(ne());var A_t=["title","titleId"];function Cle(){return Cle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var D_t=function(t){var n=t.title,r=t.titleId,o=M_t(t,A_t);return c("svg",Cle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 7a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 4a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 110-1h6z"}))},z_t=D_t;var WF={};de(WF,{icon:()=>W_t});var B2r=V(ne());var N_t=["title","titleId"];function Tle(){return Tle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var B_t=function(t){var n=t.title,r=t.titleId,o=L_t(t,N_t);return c("svg",Tle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 6a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 7 6 6.776 6 6.5s.128-.5.286-.5h3.428zM4.5 9a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm5.214 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 10 6 9.776 6 9.5s.128-.5.286-.5h3.428zM4.5 12a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9-6a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm0 3a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm0 3a.5.5 0 110 1h-2.004a.5.5 0 010-1H13.5zm-3.786 0c.158 0 .286.224.286.5s-.128.5-.286.5H6.286C6.128 13 6 12.776 6 12.5s.128-.5.286-.5h3.428z"}))},W_t=B_t;var HF={};de(HF,{icon:()=>U_t});var H2r=V(ne());var H_t=["title","titleId"];function Ale(){return Ale=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function V_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var q_t=function(t){var n=t.title,r=t.titleId,o=$_t(t,H_t);return c("svg",Ale({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.254 14.97L.996 9.712c-.315-.316-.397-.463-.45-.64a.909.909 0 010-.534c.053-.177.135-.324.45-.64L7.43 1.466c.182-.183.252-.24.338-.293a.87.87 0 01.273-.113c.099-.023.188-.032.446-.032h5.173c.445 0 .607.046.77.133.162.087.29.214.377.377.088.162.134.324.136.769l.015 5.15c0 .259-.009.348-.032.448a.87.87 0 01-.112.273c-.054.087-.111.157-.294.34L8.067 14.97c-.315.315-.462.396-.639.45a.909.909 0 01-.535 0c-.176-.054-.324-.135-.639-.45zm1.106-.707l6.453-6.453c.092-.092.126-.128.141-.147.003-.025.004-.074.004-.204l-.015-5.15c0-.181-.003-.245-.009-.275a2.247 2.247 0 00-.274-.007H8.487c-.13 0-.179.001-.203.004-.02.015-.055.05-.147.141L1.703 8.606a2.248 2.248 0 00-.189.2c.017.024.061.07.19.198l5.257 5.259c.128.128.175.171.2.188.024-.017.071-.06.2-.188zm4.972-10.607a2 2 0 11-2.828 2.828 2 2 0 012.828-2.828zm-.707.707a1 1 0 10-1.414 1.414 1 1 0 001.414-1.414zM6.807 11.28L4.686 9.159a.5.5 0 11.707-.707l2.121 2.12a.5.5 0 11-.707.708zm1.414-1.414l-2.12-2.122a.5.5 0 11.706-.707L8.928 9.16a.5.5 0 11-.707.707z"}))},U_t=q_t;var $F={};de($F,{icon:()=>Y_t});var V2r=V(ne());var G_t=["title","titleId"];function Mle(){return Mle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X_t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K_t=function(t){var n=t.title,r=t.titleId,o=J_t(t,G_t);return c("svg",Mle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.553 1.776a.5.5 0 01.894 0l4 8a.5.5 0 01.053.235c-.004.15-.026.396-.084.705a5.538 5.538 0 01-.505 1.512C11.189 13.638 9.906 14.5 8 14.5c-1.906 0-3.19-.862-3.91-2.272a5.538 5.538 0 01-.506-1.512 4.672 4.672 0 01-.084-.705.5.5 0 01.053-.235l4-8zm-3.046 8.329c.009.106.027.253.06.429.079.424.213.848.413 1.238C5.537 12.862 6.487 13.5 8 13.5c1.513 0 2.463-.638 3.02-1.728.2-.39.334-.814.413-1.238.033-.176.051-.323.06-.43L8 3.119l-3.493 6.987z"}))},Y_t=K_t;var VF={};de(VF,{icon:()=>r7t});var U2r=V(ne());var Q_t=["title","titleId"];function Rle(){return Rle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function e7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var t7t=function(t){var n=t.title,r=t.titleId,o=Z_t(t,Q_t);return c("svg",Rle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.5 15a3.5 3.5 0 01-1.75-6.532L7 8.324V2.5A1.496 1.496 0 019.908 2H8.5v1H10v1H8.5v1H10v1H8.5v1H10v1.324l.25.144A3.5 3.5 0 018.5 15M11 7.758V2.5a2.5 2.5 0 10-5 0v5.258a4.5 4.5 0 105 0"}),c("path",{d:"M8.5 9a2.5 2.5 0 110 5 2.5 2.5 0 010-5"}))},r7t=t7t;var qF={};de(qF,{icon:()=>s7t});var J2r=V(ne());var n7t=["title","titleId"];function Dle(){return Dle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function i7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var a7t=function(t){var n=t.title,r=t.titleId,o=o7t(t,n7t);return c("svg",Dle({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.809 8.807a4.5 4.5 0 01-5.572-5.75A5 5 0 003.04 9.31a.5.5 0 01-.966.259 6 6 0 015.672-7.553 4.5 4.5 0 116.117 6.313 6.002 6.002 0 01-7.803 5.409.5.5 0 11.303-.954 5.001 5.001 0 006.445-3.979zM11.859 5H13.5a.5.5 0 000-1H12V1.5a.5.5 0 00-1 0v3a.5.5 0 00.5.5h.36z"}),c("path",{d:"M3.757 15.848l-.776-2.897a1.5 1.5 0 011.06-1.838l2.898-.776a.5.5 0 11.259.966l-2.898.776a.5.5 0 00-.353.613l.776 2.898a.5.5 0 01-.966.258z"}))},s7t=a7t;var UF={};de(UF,{icon:()=>p7t});var K2r=V(ne());var l7t=["title","titleId"];function zle(){return zle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function c7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var f7t=function(t){var n=t.title,r=t.titleId,o=u7t(t,l7t);return c("svg",zle({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7 4.5a.5.5 0 001 0V4h1a1 1 0 001-1V1a1 1 0 00-1-1H6a1 1 0 00-1 1v2a1 1 0 001 1h1v.5zM9 1H6v2h3V1zM2 7.5a.5.5 0 111 0 .5.5 0 01-1 0zM2.5 9a1.5 1.5 0 01-1.415-1H.5a.5.5 0 010-1h.585a1.5 1.5 0 012.83 0h2.17a1.5 1.5 0 012.83 0h2.17a1.5 1.5 0 012.83 0h.585a.5.5 0 010 1h-.585a1.5 1.5 0 01-2.83 0h-2.17a1.5 1.5 0 01-2.83 0h-2.17A1.5 1.5 0 012.5 9zM13 7.5a.5.5 0 10-1 0 .5.5 0 001 0zm-5 0a.5.5 0 10-1 0 .5.5 0 001 0zM2.5 10a.5.5 0 00-.5.5v.5H1a1 1 0 00-1 1v2a1 1 0 001 1h3a1 1 0 001-1v-2a1 1 0 00-1-1H3v-.5a.5.5 0 00-.5-.5zM4 14v-2H1v2h3zm8-3.5a.5.5 0 011 0v.5h1a1 1 0 011 1v2a1 1 0 01-1 1h-3a1 1 0 01-1-1v-2a1 1 0 011-1h1v-.5zm2 2.5v1h-3v-2h3v1z"}))},p7t=f7t;var GF={};de(GF,{icon:()=>g7t});var Q2r=V(ne());var d7t=["title","titleId"];function Nle(){return Nle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function m7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v7t=function(t){var n=t.title,r=t.titleId,o=h7t(t,d7t);return c("svg",Nle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13.923 8A5.93 5.93 0 008 2.077 5.93 5.93 0 002.077 8a5.93 5.93 0 006.296 5.912c.328-.021.625.227.625.556a.504.504 0 01-.458.511 7 7 0 116.43-6.333c-.036.398-.487.58-.817.354a.595.595 0 01-.248-.54c.012-.152.018-.305.018-.46zm1.684 3.2l-4.32-3.055c-.56-.396-1.287.059-1.287.8v6.108c0 .74.726 1.196 1.287.8l4.32-3.055c.524-.37.524-1.228 0-1.598zM7.462 7.462H4.769a.539.539 0 000 1.076H8A.539.539 0 008.538 8V3.692a.539.539 0 00-1.076 0v3.77z",clipRule:"evenodd"}))},g7t=v7t;var JF={};de(JF,{icon:()=>x7t});var e3r=V(ne());var y7t=["title","titleId"];function Lle(){return Lle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function w7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var O7t=function(t){var n=t.title,r=t.titleId,o=b7t(t,y7t);return c("svg",Lle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M9.075 6.953a.5.5 0 11-.707.707 1.5 1.5 0 00-2.122 0L4.125 9.782a1.5 1.5 0 102.121 2.121l1.145-1.144a.5.5 0 01.707.707L6.953 12.61a2.5 2.5 0 11-3.535-3.535l2.121-2.122a2.5 2.5 0 013.536 0zm3.535-3.535a2.5 2.5 0 010 3.535L10.49 9.075a2.5 2.5 0 01-3.536 0 .5.5 0 11.707-.708 1.5 1.5 0 002.122 0l2.121-2.12a1.5 1.5 0 10-2.121-2.122L8.637 5.269a.5.5 0 11-.707-.707l1.145-1.144a2.5 2.5 0 013.535 0z"}))},x7t=O7t;var XF={};de(XF,{icon:()=>k7t});var r3r=V(ne());var _7t=["title","titleId"];function Fle(){return Fle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function E7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var I7t=function(t){var n=t.title,r=t.titleId,o=S7t(t,_7t);return c("svg",Fle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8.15 3.392c2.797 0 4.524 1.644 4.517 4.289.007 1.816-.708 2.893-2.21 3.004-.908.076-1.081-.287-1.157-.725h-.041c-.163.42-.964.732-1.744.683-1.053-.065-2.082-.842-2.09-2.572.008-1.72 1.071-2.441 1.959-2.586.804-.135 1.598.158 1.723.462h.051v-.386h1.195v3.452c.007.3.128.425.304.425.4 0 .677-.583.673-1.861.004-2.376-1.705-2.914-3.187-2.914-2.34 0-3.415 1.522-3.422 3.387.007 2.127 1.22 3.277 3.433 3.277.808 0 1.598-.176 2.006-.349l.393 1.122c-.435.27-1.419.508-2.493.508-2.98 0-4.723-1.66-4.727-4.496.004-2.804 1.748-4.72 4.817-4.72zM7.964 6.79c-.76 0-1.185.459-1.188 1.24.003.683.3 1.332 1.202 1.332.821 0 1.094-.473 1.077-1.343-.004-.718-.204-1.23-1.091-1.23z"}))},k7t=I7t;var KF={};de(KF,{icon:()=>A7t});var o3r=V(ne());var P7t=["title","titleId"];function Ble(){return Ble=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function C7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var T7t=function(t){var n=t.title,r=t.titleId,o=j7t(t,P7t);return c("svg",Ble({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M4.392 12V4h2.713v1.14h-1.21v5.72h1.21V12H4.392zm7.692-8v8H9.37v-1.14h1.209V5.14H9.37V4h2.714z"}))},A7t=T7t;var YF={};de(YF,{icon:()=>N7t});var a3r=V(ne());var M7t=["title","titleId"];function Wle(){return Wle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function D7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var z7t=function(t){var n=t.title,r=t.titleId,o=R7t(t,M7t);return c("svg",Wle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M12 4H4v8h8V4zM8.5 5.5h-3v5h3v-5z"}))},N7t=z7t;var QF={};de(QF,{icon:()=>H7t});var l3r=V(ne());var L7t=["title","titleId"];function Hle(){return Hle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function B7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var W7t=function(t){var n=t.title,r=t.titleId,o=F7t(t,L7t);return c("svg",Hle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 13A5 5 0 118 3a5 5 0 010 10zm-2.828-2.172a4 4 0 015.656-5.656c.004.013-5.645 5.674-5.656 5.656z"}))},H7t=W7t;var ZF={};de(ZF,{icon:()=>G7t});var c3r=V(ne());var $7t=["title","titleId"];function $le(){return $le=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function q7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U7t=function(t){var n=t.title,r=t.titleId,o=V7t(t,$7t);return c("svg",$le({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M11.333 7.027H9.375c-.056-.708-.48-1.187-1.222-1.187-.972 0-1.5.806-1.5 2.16 0 1.43.545 2.16 1.486 2.16.708 0 1.139-.415 1.236-1.08l1.958.015C11.236 10.418 10.181 12 8.097 12c-1.958 0-3.43-1.41-3.43-4 0-2.6 1.514-4 3.43-4 1.792 0 3.084 1.095 3.236 3.027z"}))},G7t=U7t;var eB={};de(eB,{icon:()=>Q7t});var p3r=V(ne());var J7t=["title","titleId"];function Vle(){return Vle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function K7t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Y7t=function(t){var n=t.title,r=t.titleId,o=X7t(t,J7t);return c("svg",Vle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M3 4a1 1 0 011-1h8a1 1 0 011 1v5.996a1 1 0 01-1 1h-1.661L7.4 13.2A.25.25 0 017 13v-2.004H4a1 1 0 01-1-1V4zm1.5 1a.5.5 0 01.5-.5h6a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-.9L8 11V9.5H5a.5.5 0 01-.5-.5V5z",clipRule:"evenodd"}),c("path",{d:"M6.75 6a1 1 0 100 2 1 1 0 000-2zm2.5 0a1 1 0 100 2 1 1 0 000-2z"}))},Q7t=Y7t;var tB={};de(tB,{icon:()=>n8t});var h3r=V(ne());var Z7t=["title","titleId"];function qle(){return qle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function t8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r8t=function(t){var n=t.title,r=t.titleId,o=e8t(t,Z7t);return c("svg",qle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M9.414 3.757l2.829 2.829a2 2 0 010 2.828l-2.829 2.829a2 2 0 01-2.828 0L3.757 9.414a2 2 0 010-2.828l2.829-2.829a2 2 0 012.828 0zm-1.747 2.91a1 1 0 00-1 1v.666a1 1 0 001 1h.666a1 1 0 001-1v-.666a1 1 0 00-1-1h-.666z"}))},n8t=r8t;var rB={};de(rB,{icon:()=>l8t});var v3r=V(ne());var o8t=["title","titleId"];function Ule(){return Ule=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function a8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var s8t=function(t){var n=t.title,r=t.titleId,o=i8t(t,o8t);return c("svg",Ule({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13 11.567C13 12.36 12.36 13 11.567 13H4.433C3.64 13 3 12.36 3 11.567V4.433C3 3.64 3.64 3 4.433 3H6v-.495a.51.51 0 01.412-.497L6.5 2c.276 0 .5.214.5.505V3h2v-.495a.51.51 0 01.412-.497L9.5 2c.276 0 .5.214.5.505V3h1.567C12.36 3 13 3.64 13 4.433v7.134zM4 6v5.33c0 .37.3.67.67.67h6.66c.37 0 .67-.3.67-.67V6H4zm1.5 4c.245 0 .45.183.492.412L6 10.5c0 .245-.183.45-.412.492L5.5 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L5.5 10zM8 10c.245 0 .45.183.492.412l.008.088c0 .245-.183.45-.412.492L8 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 10zm2.5 0c.245 0 .45.183.492.412L11 10.5c0 .245-.183.45-.412.492L10.5 11a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L10.5 10zm-5-1.5c.245 0 .45.183.492.412L6 9c0 .245-.183.45-.412.492L5.5 9.5A.505.505 0 015 9c0-.245.183-.45.412-.492L5.5 8.5zm2.5 0c.245 0 .45.183.492.412L8.5 9c0 .245-.183.45-.412.492L8 9.5a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 8.5zm2.5 0c.245 0 .45.183.492.412L11 9c0 .245-.183.45-.412.492L10.5 9.5A.505.505 0 0110 9c0-.245.183-.45.412-.492L10.5 8.5zM5.5 7c.245 0 .45.183.492.412L6 7.5c0 .245-.183.45-.412.492L5.5 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L5.5 7zM8 7c.245 0 .45.183.492.412L8.5 7.5c0 .245-.183.45-.412.492L8 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L8 7zm2.5 0c.245 0 .45.183.492.412L11 7.5c0 .245-.183.45-.412.492L10.5 8a.505.505 0 01-.5-.5c0-.245.183-.45.412-.492L10.5 7zM4 5h8v-.33c0-.37-.3-.67-.67-.67H4.67C4.3 4 4 4.3 4 4.67V5z"}))},l8t=s8t;var nB={};de(nB,{icon:()=>d8t});var y3r=V(ne());var u8t=["title","titleId"];function Gle(){return Gle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function f8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var p8t=function(t){var n=t.title,r=t.titleId,o=c8t(t,u8t);return c("svg",Gle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M4.154 12V4h2.713v1.14H5.658v5.72h1.21V12H4.153zm7.692-8v8H9.133v-1.14h1.209V5.14h-1.21V4h2.714z"}))},d8t=p8t;var oB={};de(oB,{icon:()=>y8t});var w3r=V(ne());var h8t=["title","titleId"];function Jle(){return Jle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function v8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var g8t=function(t){var n=t.title,r=t.titleId,o=m8t(t,h8t);return c("svg",Jle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.39 9.736l-1.041.94L3.258 8l3.09-2.677 1.041.94-2.032 1.722v.03l2.032 1.721zm2.777.94l-1.04-.94 2.032-1.721v-.03L9.126 6.264l1.04-.94L13.259 8l-3.091 2.677z"}))},y8t=g8t;var iB={};de(iB,{icon:()=>_8t});var x3r=V(ne());var b8t=["title","titleId"];function Xle(){return Xle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function O8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var x8t=function(t){var n=t.title,r=t.titleId,o=w8t(t,b8t);return c("svg",Xle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M5.211 12V4h5.578v1.57H7.145v1.641h3.359v1.574H7.145v1.645h3.644V12z"}))},_8t=x8t;var aB={};de(aB,{icon:()=>P8t});var S3r=V(ne());var S8t=["title","titleId"];function Kle(){return Kle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function I8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var k8t=function(t){var n=t.title,r=t.titleId,o=E8t(t,S8t);return c("svg",Kle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M7.682 12V9.247l1.023-.861a.5.5 0 00-.003-.768l-1.02-.844V4h5.578v1.57H9.615v1.64h3.36v1.575h-3.36v1.645h3.645V12H7.682zm.743-4.103a.138.138 0 010 .206L6.158 9.97a.133.133 0 01-.218-.103v-.934H2.873A.133.133 0 012.74 8.8V7.2c0-.074.06-.133.133-.133H5.94v-.934a.133.133 0 01.218-.103l2.267 1.867z"}))},P8t=k8t;var sB={};de(sB,{icon:()=>M8t});var I3r=V(ne());var j8t=["title","titleId"];function Yle(){return Yle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function T8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var A8t=function(t){var n=t.title,r=t.titleId,o=C8t(t,j8t);return c("svg",Yle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M11.225 5.656c0 .423-.106.79-.318 1.102-.211.311-.51.57-.898.775a5.435 5.435 0 01-1.392.485c-.54.117-1.14.193-1.798.229a6.047 6.047 0 00-.035.67c0 .258.02.51.062.757.04.247.114.464.22.652s.25.34.432.458.414.176.696.176c.211 0 .467-.044.766-.132.3-.088.62-.244.96-.467.106-.07.192-.129.256-.176a.365.365 0 01.22-.07c.118 0 .197.061.238.185a.99.99 0 01.062.255 7.1 7.1 0 01-.573.467 4.93 4.93 0 01-.775.467c-.288.141-.6.261-.934.361-.335.1-.678.15-1.03.15-.541 0-.982-.088-1.322-.264a2.072 2.072 0 01-.793-.688 2.626 2.626 0 01-.388-.933 4.949 4.949 0 01-.106-1.005c0-.634.103-1.257.309-1.868.205-.61.499-1.157.88-1.638.383-.482.838-.87 1.366-1.163A3.567 3.567 0 019.093 4c.599 0 1.104.126 1.515.379.411.252.617.678.617 1.277zm-2.467-.951c-.223 0-.435.08-.635.238-.2.158-.381.373-.546.643-.164.27-.305.578-.423.925a6.42 6.42 0 00-.264 1.101c.47-.047.863-.135 1.18-.264.318-.13.57-.285.758-.467.188-.182.323-.388.405-.617.083-.229.124-.467.124-.713 0-.27-.056-.479-.168-.626a.519.519 0 00-.431-.22z"}))},M8t=A8t;var lB={};de(lB,{icon:()=>L8t});var P3r=V(ne());var R8t=["title","titleId"];function Qle(){return Qle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function z8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var N8t=function(t){var n=t.title,r=t.titleId,o=D8t(t,R8t);return c("svg",Qle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.461 7.31h3.055a.74.74 0 01.66 1.074l-2.141 4.211a.74.74 0 11-1.319-.67L9.31 8.79H6.256a.74.74 0 01-.66-1.075l2.19-4.31a.74.74 0 011.319.67L7.461 7.31z"}))},L8t=N8t;var uB={};de(uB,{icon:()=>$8t});var C3r=V(ne());var F8t=["title","titleId"];function Zle(){return Zle=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function W8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var H8t=function(t){var n=t.title,r=t.titleId,o=B8t(t,F8t);return c("svg",Zle({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M5.27 12V4h5.46v1.57H7.203v1.641h3.18v1.574h-3.18V12z"}))},$8t=H8t;var cB={};de(cB,{icon:()=>J8t});var A3r=V(ne());var V8t=["title","titleId"];function eue(){return eue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function U8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var G8t=function(t){var n=t.title,r=t.titleId,o=q8t(t,V8t);return c("svg",eue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.867 2.667H4a.667.667 0 00-.667.666v9.334c0 .368.299.666.667.666h8a.667.667 0 00.667-.666V5.619a.669.669 0 00-.183-.459l-2.133-2.285a.668.668 0 00-.484-.208m1.466 4V12H4.667V4h4v2.333c0 .184.149.334.333.334h2.333z"}))},J8t=G8t;var fB={};de(fB,{icon:()=>Z8t});var R3r=V(ne());var X8t=["title","titleId"];function tue(){return tue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Y8t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Q8t=function(t){var n=t.title,r=t.titleId,o=K8t(t,X8t);return c("svg",tue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3.25 3a.25.25 0 00-.25.25v2c0 .138.112.25.25.25h9.5a.25.25 0 00.25-.25v-2a.25.25 0 00-.25-.25h-9.5zm0 3.75A.25.25 0 003 7v2c0 .138.112.25.25.25H5.5A.25.25 0 005.75 9V7a.25.25 0 00-.25-.25H3.25zm-.25 4a.25.25 0 01.25-.25H5.5a.25.25 0 01.25.25v2a.25.25 0 01-.25.25H3.25a.25.25 0 01-.25-.25v-2zm3.31-.727c-.082-.073-.082-.224 0-.296l3.054-2.683a.17.17 0 01.19-.026c.064.032.104.1.104.174v1.341l3.161-.016c.1 0 .18.086.18.192v2.3c0 .105-.08.191-.18.191l-3.161.017v1.341c0 .074-.04.142-.103.174a.17.17 0 01-.19-.025L6.31 10.023z"}))},Z8t=Q8t;var pB={};de(pB,{icon:()=>oSt});var z3r=V(ne());var eSt=["title","titleId"];function rue(){return rue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nSt=function(t){var n=t.title,r=t.titleId,o=tSt(t,eSt);return c("svg",rue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M11.266 4.15V5.63a2.41 2.41 0 00-.859-.145c-.692 0-1.065.346-1.177 1.043l-.11.625h1.828v1.44H8.921l-.204 1.115C8.455 11.325 7.517 12 5.9 12c-.469 0-.882-.061-1.166-.167v-1.495c.273.117.591.178.903.178.659 0 1.01-.29 1.127-1.015l.157-.91H5.247V7.152h1.837l.188-.842C7.534 4.714 8.432 4 10.19 4c.39 0 .853.067 1.076.15z"}))},oSt=nSt;var dB={};de(dB,{icon:()=>uSt});var L3r=V(ne());var iSt=["title","titleId"];function nue(){return nue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lSt=function(t){var n=t.title,r=t.titleId,o=aSt(t,iSt);return c("svg",nue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 3c1.636 0 3.088.785 4 2 .628.836 1 1.875 1 3a4.978 4.978 0 01-.999 3H12a4.992 4.992 0 01-4 2 4.992 4.992 0 01-4-1.999V11a5 5 0 014-8zm.948 8H7.052c.277.626.623 1 .948 1 .325 0 .67-.374.948-1zM6 11l-.645.001c.274.242.581.446.914.606A5.445 5.445 0 016 11.001zm4.645.001H10a5.51 5.51 0 01-.269.606c.333-.16.64-.364.914-.606zm-5.133-2.5H4.031c.068.54.243 1.048.505 1.5h1.172a9.186 9.186 0 01-.196-1.5zm3.975 0H6.513c.03.544.104 1.05.21 1.5h2.553c.107-.45.182-.956.21-1.5zm2.482 0h-1.481a9.186 9.186 0 01-.196 1.5h1.172c.262-.452.437-.96.505-1.5zM5.708 6L4.535 6c-.261.452-.437.96-.504 1.5h1.481A9.187 9.187 0 015.708 6zm3.568 0H6.724c-.107.449-.182.955-.21 1.499h2.973a8.479 8.479 0 00-.21-1.5zM11.465 6h-1.173c.102.467.17.972.196 1.5h1.481a3.974 3.974 0 00-.504-1.5zM6.269 4.393l-.124.062c-.286.15-.551.333-.79.545H6a5.51 5.51 0 01.269-.607zM8 4c-.326 0-.671.375-.948 1h1.896C8.671 4.376 8.326 4 8 4zm1.73.393l.038.071c.083.168.161.347.232.536h.646a4.006 4.006 0 00-.915-.607z"}))},uSt=lSt;var hB={};de(hB,{icon:()=>hSt});var B3r=V(ne());var cSt=["title","titleId"];function oue(){return oue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dSt=function(t){var n=t.title,r=t.titleId,o=fSt(t,cSt);return c("svg",oue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 3h4v5h2V5.5h4V13H3.001v-1H3V3zm1 9h2V4H4v8zm3 0h2V9H7v3zm3 0h2V6.5h-2V12z"}))},hSt=dSt;var mB={};de(mB,{icon:()=>bSt});var H3r=V(ne());var mSt=["title","titleId"];function iue(){return iue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ySt=function(t){var n=t.title,r=t.titleId,o=vSt(t,mSt);return c("svg",iue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M11 3a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h6zm-1 2H8v6h1V9.014h1c.298-.013 2 0 2-2.018 0-1.74-1.314-1.952-1.825-1.987L10 5zM6 5H5v6h1V5zm4 .984c.667 0 1 .336 1 1.008C11 7.664 10.667 8 10 8H9V5.984z"}))},bSt=ySt;var vB={};de(vB,{icon:()=>SSt});var V3r=V(ne());var wSt=["title","titleId"];function aue(){return aue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _St=function(t){var n=t.title,r=t.titleId,o=OSt(t,wSt);return c("svg",aue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8.967 10.653h1.727V12H5.306v-1.347h1.727V5.347H5.306V4h5.388v1.347H8.967v5.306z"}))},SSt=_St;var gB={};de(gB,{icon:()=>jSt});var U3r=V(ne());var ESt=["title","titleId"];function sue(){return sue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PSt=function(t){var n=t.title,r=t.titleId,o=ISt(t,ESt);return c("svg",sue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.5 4.5v1.025c0 1.269-1.185 1.908-2.112 1.737a.75.75 0 100 1.475c.927-.17 2.112.47 2.112 1.739v1.023h4v-1.005a2.5 2.5 0 010-4.988V4.5h-4zM13 4a1 1 0 00-1-1H7a1 1 0 00-1 1v1.525c0 .172-.172.293-.341.262a2.25 2.25 0 100 4.426c.17-.031.341.09.341.262V12a1 1 0 001 1h5a1 1 0 001-1V9.004a.16.16 0 00-.04-.105c-.109-.125-.594-.16-.732-.068a1 1 0 110-1.662c.138.092.623.057.732-.068a.16.16 0 00.04-.105V4z"}))},jSt=PSt;var yB={};de(yB,{icon:()=>RSt});var J3r=V(ne());var CSt=["title","titleId"];function lue(){return lue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ASt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MSt=function(t){var n=t.title,r=t.titleId,o=TSt(t,CSt);return c("svg",lue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M12.667 6.542A3.208 3.208 0 018.86 9.694l-.438.492a.437.437 0 01-.327.147h-.678v.73a.437.437 0 01-.438.437H6.25v.73a.437.437 0 01-.438.437H3.772a.437.437 0 01-.438-.438v-1.423c0-.116.046-.227.128-.31l2.95-2.949a3.208 3.208 0 013.047-4.214 3.202 3.202 0 013.209 3.209zm-3.209-.875a.875.875 0 101.75 0 .875.875 0 00-1.75 0z"}))},RSt=MSt;var bB={};de(bB,{icon:()=>FSt});var K3r=V(ne());var DSt=["title","titleId"];function uue(){return uue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LSt=function(t){var n=t.title,r=t.titleId,o=zSt(t,DSt);return c("svg",uue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.33 10.28c-.12.04-.29.07-.42.07-.23 0-.43-.08-.53-.3l-.63-1.34 2.32-2.81H9.3L7.76 7.93h-.09L8.22 4H6.59l-1.05 7.5h1.63l.27-1.94h.1l.43 1.12c.27.71.74.92 1.33.92.23 0 .6-.04.86-.11l.17-1.21z"}))},FSt=LSt;var wB={};de(wB,{icon:()=>VSt});var Q3r=V(ne());var BSt=["title","titleId"];function cue(){return cue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $St=function(t){var n=t.title,r=t.titleId,o=WSt(t,BSt);return c("svg",cue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M3.333 11.027V5.05h2.059v1.136h.063c.25-.747.891-1.214 1.728-1.214.848 0 1.524.483 1.65 1.214h.063c.204-.731.927-1.214 1.822-1.214 1.155 0 1.949.798 1.949 2.023v4.03h-2.169V7.542c0-.521-.29-.84-.738-.84s-.723.319-.723.84v3.486H6.963V7.54c0-.521-.29-.84-.739-.84-.447 0-.722.319-.722.84v3.486H3.333z"}))},VSt=$St;var OB={};de(OB,{icon:()=>XSt});var e5r=V(ne());var qSt=["title","titleId"];function fue(){return fue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JSt=function(t){var n=t.title,r=t.titleId,o=USt(t,qSt);return c("svg",fue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11 3a1 1 0 00-1 1v1H9a1 1 0 000 2h1v1a1 1 0 102 0V7h1a1 1 0 100-2h-1V4a1 1 0 00-1-1zM5 7a1 1 0 00-1 1v1H3a1 1 0 000 2h1v1a1 1 0 102 0v-1h1a1 1 0 100-2H6V8a1 1 0 00-1-1z"}))},XSt=JSt;var xB={};de(xB,{icon:()=>eEt});var r5r=V(ne());var KSt=["title","titleId"];function pue(){return pue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QSt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZSt=function(t){var n=t.title,r=t.titleId,o=YSt(t,KSt);return c("svg",pue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5 4h-.5a.5.5 0 010-1h1a.5.5 0 01.5.5v9a.5.5 0 01-.5.5h-1a.5.5 0 010-1H5v-2h-.5a.5.5 0 010-1H5V7h-.5a.5.5 0 010-1H5V4zm3 1a1 1 0 00-1 1v6a1 1 0 001 1h2a1 1 0 001-1V6a1 1 0 00-1-1H8z"}))},eEt=ZSt;var _B={};de(_B,{icon:()=>iEt});var o5r=V(ne());var tEt=["title","titleId"];function due(){return due=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var oEt=function(t){var n=t.title,r=t.titleId,o=rEt(t,tEt);return c("svg",due({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 2l5.196 3v.178l-.866.468V5.5L8 3 3.67 5.5v5L8 13l4.33-2.5V5.77l.866-.474V11L8 14l-5.196-3V5L8 2z"}),c("path",{d:"M5.243 4.429L9.597 7.04 8 7.928 3.743 5.563a.5.5 0 10-.486.874L7.5 8.794V13.5h1V8.794l4.243-2.357a.508.508 0 00.06-.04l.392-.202V5.047l-.917.505a.573.573 0 00-.02.01l-.106.06-.191.105-1.355.753-4.849-2.909-.514.858z"}))},iEt=oEt;var SB={};de(SB,{icon:()=>cEt});var a5r=V(ne());var aEt=["title","titleId"];function hue(){return hue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uEt=function(t){var n=t.title,r=t.titleId,o=sEt(t,aEt);return c("svg",hue({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.556 8.416l-.804-1.68h-.036v5.64H5V4h1.992l2.292 3.96.804 1.68h.036V4h1.716v8.376H9.848l-2.292-3.96z"}))},cEt=uEt;var EB={};de(EB,{icon:()=>mEt});var l5r=V(ne());var fEt=["title","titleId"];function mue(){return mue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hEt=function(t){var n=t.title,r=t.titleId,o=pEt(t,fEt);return c("svg",mue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fillRule:"evenodd"},c("path",{d:"M11 3c1.044 0 1.913.757 1.994 1.736l.006.149v6.23c0 1-.82 1.805-1.845 1.88L11 13H9.501a.5.5 0 01-.09-.992l.09-.008H11c.52 0 .937-.35.993-.783l.007-.102v-6.23c0-.445-.379-.827-.882-.879L11 4H9.5a.5.5 0 01-.09-.992L9.5 3H11zM6.5 3a.5.5 0 01.09.992L6.5 4H5c-.52 0-.937.35-.993.783L4 4.885v6.23c0 .445.379.827.882.879L5 12h1.5a.5.5 0 01.09.992L6.5 13H5c-1.044 0-1.913-.757-1.994-1.736L3 11.115v-6.23c0-1 .82-1.805 1.845-1.88L5 3h1.5z"}),c("path",{d:"M5.864 7.25a.714.714 0 110 1.429.714.714 0 010-1.429zm2.143 0a.714.714 0 110 1.429.714.714 0 010-1.429zm2.143 0a.714.714 0 110 1.429.714.714 0 010-1.429z"})))},mEt=hEt;var IB={};de(IB,{icon:()=>wEt});var c5r=V(ne());var vEt=["title","titleId"];function vue(){return vue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bEt=function(t){var n=t.title,r=t.titleId,o=gEt(t,vEt);return c("svg",vue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.002 12.412l-.962.962a1 1 0 01-1.414-1.414l.962-.962a5.333 5.333 0 017.41-7.41l.962-.962a1 1 0 111.414 1.414l-.962.962a5.333 5.333 0 01-7.41 7.41zm.966-.966a4 4 0 005.478-5.478l-5.478 5.478zm-1.414-1.414l5.478-5.478a4 4 0 00-5.478 5.478z"}))},wEt=bEt;var kB={};de(kB,{icon:()=>EEt});var p5r=V(ne());var OEt=["title","titleId"];function gue(){return gue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Et(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var SEt=function(t){var n=t.title,r=t.titleId,o=xEt(t,OEt);return c("svg",gue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.8 9.812h-.842l-.78 2.335H5.031l.78-2.335H4.6l.182-1.043h1.373l.507-1.504H5.454l.188-1.042h1.367l.792-2.37H8.94l-.792 2.37h.849l.792-2.37h1.145l-.792 2.37H11.4l-.182 1.042H9.8L9.293 8.77h1.248l-.183 1.043H8.946l-.775 2.335H7.026L7.8 9.812zm-.5-1.043h.842l.513-1.504h-.849L7.3 8.77z"}))},EEt=SEt;var PB={};de(PB,{icon:()=>CEt});var h5r=V(ne());var IEt=["title","titleId"];function yue(){return yue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var jEt=function(t){var n=t.title,r=t.titleId,o=kEt(t,IEt);return c("svg",yue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6.63 12c-1.294 0-2.383-.105-2.383-1.802V9.6c0-.638-.247-.914-.98-.914v-1.37c.733 0 .98-.28.98-.915v-.6C4.247 4.105 5.336 4 6.631 4v1.14c-.759 0-.886.272-.886.843v.813c0 .479-.225.936-1.212 1.133v.142c.987.197 1.212.654 1.212 1.133v.813c0 .57.127.844.886.844V12zm2.266-8c1.295 0 2.384.105 2.384 1.802V6.4c0 .638.247.914.98.914v1.37c-.733 0-.98.28-.98.915v.6C11.28 11.895 10.19 12 8.896 12v-1.14c.759 0 .886-.272.886-.843v-.813c0-.479.225-.936 1.212-1.133V7.93c-.987-.197-1.212-.654-1.212-1.133v-.813c0-.57-.127-.844-.886-.844V4z"}))},CEt=jEt;var jB={};de(jB,{icon:()=>DEt});var v5r=V(ne());var TEt=["title","titleId"];function bue(){return bue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var REt=function(t){var n=t.title,r=t.titleId,o=AEt(t,TEt);return c("svg",bue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M2.667 8.002c0-1.5.394-2.743 1.248-3.822h1.437c-.652.8-1.14 2.388-1.14 3.822 0 1.43.488 3.018 1.14 3.818H3.915c-.854-1.08-1.248-2.322-1.248-3.818zM6.77 9.998l-.818-.803 1.23-1.197-1.23-1.203.83-.793 1.221 1.193L9.23 6.002l.818.793-1.227 1.2 1.227 1.2-.818.803L8 8.795 6.77 9.998zm6.563-2c0 1.5-.394 2.743-1.248 3.822h-1.437c.652-.8 1.14-2.388 1.14-3.822 0-1.43-.488-3.018-1.14-3.818h1.437c.854 1.08 1.248 2.322 1.248 3.818z"}))},DEt=REt;var CB={};de(CB,{icon:()=>BEt});var y5r=V(ne());var zEt=["title","titleId"];function wue(){return wue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function LEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var FEt=function(t){var n=t.title,r=t.titleId,o=NEt(t,zEt);return c("svg",wue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8.049 3.785l3.852 1.006-4.049 1.103L4 4.791l3.951-1.006a.19.19 0 01.098 0zm.073 2.654l4.545-1.306v5.45l-.131.184-4.414 1.455V6.439zm-4.789 4.145V5.188L7.498 6.41v5.81l-4.034-1.453-.13-.183z"}))},BEt=FEt;var TB={};de(TB,{icon:()=>qEt});var w5r=V(ne());var WEt=["title","titleId"];function Oue(){return Oue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $Et(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VEt=function(t){var n=t.title,r=t.titleId,o=HEt(t,WEt);return c("svg",Oue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433z"}))},qEt=VEt;var AB={};de(AB,{icon:()=>KEt});var x5r=V(ne());var UEt=["title","titleId"];function xue(){return xue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var XEt=function(t){var n=t.title,r=t.titleId,o=GEt(t,UEt);return c("svg",xue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M5.5 7a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm0 1a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM11 9a1 1 0 100-2 1 1 0 000 2zm0 1a2 2 0 100-4 2 2 0 000 4zm-2.5 1.5a.5.5 0 11-1 0 .5.5 0 011 0zm1 0a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z"}))},KEt=XEt;var MB={};de(MB,{icon:()=>t9t});var S5r=V(ne());var YEt=["title","titleId"];function _ue(){return _ue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZEt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var e9t=function(t){var n=t.title,r=t.titleId,o=QEt(t,YEt);return c("svg",_ue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M4.889 12V4h3.304c1.797 0 2.922 1.117 2.918 2.77.004 1.652-1.144 2.746-2.976 2.746H6.822V12H4.89zm1.933-4.008h.953c.868 0 1.336-.472 1.332-1.222.004-.73-.464-1.211-1.332-1.211h-.953v2.433z"}))},t9t=e9t;var RB={};de(RB,{icon:()=>a9t});var I5r=V(ne());var r9t=["title","titleId"];function Sue(){return Sue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function o9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var i9t=function(t){var n=t.title,r=t.titleId,o=n9t(t,r9t);return c("svg",Sue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fillRule:"evenodd"},c("path",{d:"M9.82 5.116a.5.5 0 00-.704.704l.064.064L11.719 8l-2.54 2.116a.5.5 0 00-.114.63l.05.074a.5.5 0 00.63.115l.075-.05 3-2.5a.5.5 0 00.071-.697l-.07-.072-3-2.5zM6.18 5.116a.5.5 0 01.704.704l-.064.064L4.281 8l2.54 2.116a.5.5 0 01.114.63l-.05.074a.5.5 0 01-.63.115l-.075-.05-3-2.5a.5.5 0 01-.071-.697l.07-.072 3-2.5z"})))},a9t=i9t;var DB={};de(DB,{icon:()=>f9t});var P5r=V(ne());var s9t=["title","titleId"];function Eue(){return Eue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function u9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var c9t=function(t){var n=t.title,r=t.titleId,o=l9t(t,s9t);return c("svg",Eue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6z"}))},f9t=c9t;var zB={};de(zB,{icon:()=>v9t});var C5r=V(ne());var p9t=["title","titleId"];function Iue(){return Iue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function h9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var m9t=function(t){var n=t.title,r=t.titleId,o=d9t(t,p9t);return c("svg",Iue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M13 4v8h-2V6H9v4H5v2H3V8h4V4h6z"}))},v9t=m9t;var NB={};de(NB,{icon:()=>O9t});var A5r=V(ne());var g9t=["title","titleId"];function kue(){return kue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function b9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w9t=function(t){var n=t.title,r=t.titleId,o=y9t(t,g9t);return c("svg",kue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8.533 9.067c-1.792 0-2.378.72-2.57 1.194a1.601 1.601 0 11-1.163-.037V5.776a1.595 1.595 0 01-1.067-1.51c0-.885.715-1.6 1.6-1.6.886 0 1.6.715 1.6 1.6 0 .7-.442 1.291-1.066 1.51v2.821C6.336 8.251 7.019 8 8 8c1.424 0 1.899-.715 2.053-1.19a1.603 1.603 0 01-.986-1.477c0-.885.714-1.6 1.6-1.6.885 0 1.6.715 1.6 1.6a1.59 1.59 0 01-1.115 1.526c-.139.762-.656 2.208-2.619 2.208zm-3.2 2.133a.535.535 0 00-.533.533c0 .294.24.534.533.534a.535.535 0 000-1.067zm0-7.467a.535.535 0 00-.533.534c0 .293.24.533.533.533.294 0 .534-.24.534-.533a.535.535 0 00-.534-.534zM10.667 4.8a.535.535 0 00-.534.533.535.535 0 001.067 0 .535.535 0 00-.533-.533z"}))},O9t=w9t;var LB={};de(LB,{icon:()=>I9t});var R5r=V(ne());var x9t=["title","titleId"];function Pue(){return Pue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function S9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var E9t=function(t){var n=t.title,r=t.titleId,o=_9t(t,x9t);return c("svg",Pue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.27 7.5a1 1 0 112 0 1 1 0 01-2 0zM8.77 7.5a1 1 0 112 0 1 1 0 01-2 0z"}),c("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.702 10.682a4.501 4.501 0 01-5.796.482L4.28 12.789a.75.75 0 01-1.06-1.06L4.847 10.1a4.501 4.501 0 116.855.581zm-5.304-1.06a3 3 0 104.243-4.243A3 3 0 006.398 9.62z"}))},I9t=E9t;var FB={};de(FB,{icon:()=>T9t});var z5r=V(ne());var k9t=["title","titleId"];function jue(){return jue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function j9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C9t=function(t){var n=t.title,r=t.titleId,o=P9t(t,k9t);return c("svg",jue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M13 10v3h-3v-1H6v1H3v-3h1V6H3V3h3v1h4V3h3v3h-1v4h1zm-8 1H4v1h1v-1zm7 0h-1v1h1v-1zM5 4H4v1h1V4zm7 0h-1v1h1V4zm-1 2h-1V5H6v1H5v4h1v1h4v-1h1V6z"}))},T9t=C9t;var BB={};de(BB,{icon:()=>z9t});var L5r=V(ne());var A9t=["title","titleId"];function Cue(){return Cue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function R9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var D9t=function(t){var n=t.title,r=t.titleId,o=M9t(t,A9t);return c("svg",Cue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.147 4.297l-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78z"}))},z9t=D9t;var WB={};de(WB,{icon:()=>W9t});var B5r=V(ne());var N9t=["title","titleId"];function Tue(){return Tue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function F9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var B9t=function(t){var n=t.title,r=t.titleId,o=L9t(t,N9t);return c("svg",Tue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M4.667 4.667h2.666v2.666H4.667V4.667zm0 4h2.666v2.666H4.667V8.667zm4-4h2.666v2.666H8.667V4.667zm0 4h2.666v2.666H8.667V8.667zM3.333 3.333v9.334h9.334V3.333H3.333zm0-1.333h9.334C13.403 2 14 2.597 14 3.333v9.334c0 .736-.597 1.333-1.333 1.333H3.333A1.333 1.333 0 012 12.667V3.333C2 2.597 2.597 2 3.333 2z"}))},W9t=B9t;var HB={};de(HB,{icon:()=>U9t});var H5r=V(ne());var H9t=["title","titleId"];function Aue(){return Aue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function V9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var q9t=function(t){var n=t.title,r=t.titleId,o=$9t(t,H9t);return c("svg",Aue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.316 14a6 6 0 110-12 6 6 0 010 12zm0-1.333a4.667 4.667 0 100-9.334 4.667 4.667 0 000 9.334zm2.19-5.72h1.143c.019 1.448-.793 2.338-1.922 2.338-.632 0-1.194-.267-1.706-.811-.36-.397-.636-.576-1-.576-.517 0-.849.355-.885 1.083H4.983c.014-1.47.858-2.314 1.95-2.314.595 0 1.125.249 1.678.802.392.382.641.595 1.038.595.484 0 .857-.323.857-1.116z"}))},U9t=q9t;var $B={};de($B,{icon:()=>Y9t});var V5r=V(ne());var G9t=["title","titleId"];function Mue(){return Mue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function X9t(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var K9t=function(t){var n=t.title,r=t.titleId,o=J9t(t,G9t);return c("svg",Mue({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10 8a1 1 0 11-2 0 1 1 0 012 0z"}),c("path",{fillRule:"evenodd",d:"M4 4a1 1 0 00-1 1v6a1 1 0 001 1h6.989a1 1 0 00.825-.436l2.05-3a1 1 0 000-1.128l-2.05-3A1 1 0 0010.99 4H4zm.75 1.25a.5.5 0 00-.5.5v4.5a.5.5 0 00.5.5h5.745a.5.5 0 00.405-.206l1.636-2.25a.5.5 0 000-.588L10.9 5.456a.5.5 0 00-.405-.206H4.75z"}))},Y9t=K9t;var VB={};de(VB,{icon:()=>rIt});var U5r=V(ne());var Q9t=["title","titleId"];function Rue(){return Rue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var tIt=function(t){var n=t.title,r=t.titleId,o=Z9t(t,Q9t);return c("svg",Rue({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.147 4.297l-.255 1.455h.936l-.222 1.266h-.935l-.455 2.688c-.025.184-.013.323.036.417.048.093.17.144.365.151.075.004.23-.005.465-.027l-.13 1.32c-.3.097-.618.142-.957.135-.552-.007-.965-.17-1.239-.487-.274-.317-.386-.748-.335-1.293l.476-2.904h-.725l.216-1.266h.725l.254-1.455h1.78z"}))},rIt=tIt;var qB={};de(qB,{icon:()=>sIt});var J5r=V(ne());var nIt=["title","titleId"];function Due(){return Due=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aIt=function(t){var n=t.title,r=t.titleId,o=oIt(t,nIt);return c("svg",Due({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8 4H3v3h5V4zM13 9H8v3h5V9zM10 4h3v3h-3V4zM6 9H3v3h3V9z"}))},sIt=aIt;var UB={};de(UB,{icon:()=>pIt});var K5r=V(ne());var lIt=["title","titleId"];function zue(){return zue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var fIt=function(t){var n=t.title,r=t.titleId,o=uIt(t,lIt);return c("svg",zue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M6.649 4.667l1.326 4.7h.05l1.326-4.7h1.982l-2.134 6.666H6.801L4.667 4.667z"}))},pIt=fIt;var GB={};de(GB,{icon:()=>gIt});var Q5r=V(ne());var dIt=["title","titleId"];function Nue(){return Nue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var vIt=function(t){var n=t.title,r=t.titleId,o=hIt(t,dIt);return c("svg",Nue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.386 9.836a2.5 2.5 0 113.611.667C15.212 11.173 16 12.46 16 14v1.5a.5.5 0 11-1 0V14c0-1.724-1.276-3-3-3-.91 0-1.298-.02-1.805-.122-1.25-.254-2.333-1-3.585-2.566a.5.5 0 11.78-.624c.9 1.124 1.653 1.74 2.434 2.043.155.052.345.083.562.105zm1.785.128c.083.01.167.021.251.034L12.5 10a1.5 1.5 0 10-.33-.036zM9.78 11.97a.5.5 0 01.5.5c0 .076-.047.226-.05.231-.179.38-.23.774-.23 1.302v1.5a.5.5 0 11-1 0v-1.5c0-.657.072-1.186.307-1.696a.5.5 0 01.473-.337zM5.958 5.772a.5.5 0 01-.78.625L3.11 3.812a.5.5 0 11.78-.624l2.068 2.584zM1 11h5.5a.5.5 0 110 1h-6a.5.5 0 01-.5-.5V.5A.5.5 0 01.5 0h12a.5.5 0 01.5.5v3a.5.5 0 11-1 0V1H1v10z"}))},gIt=vIt;var JB={};de(JB,{icon:()=>xIt});var ewr=V(ne());var yIt=["title","titleId"];function Lue(){return Lue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var OIt=function(t){var n=t.title,r=t.titleId,o=bIt(t,yIt);return c("svg",Lue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M11 3h5v1H0V3h5V1a1 1 0 011-1h4a1 1 0 011 1v2zm-7.056 8H7v1H4.1l.392 2.519c.042.269.254.458.493.458h6.03c.239 0 .451-.189.493-.458l1.498-9.576H14l-1.504 9.73c-.116.747-.74 1.304-1.481 1.304h-6.03c-.741 0-1.365-.557-1.481-1.304l-1.511-9.73H9V5.95H3.157L3.476 8H8v1H3.632l.312 2zM6 3h4V1H6v2z"}))},xIt=OIt;var XB={};de(XB,{icon:()=>kIt});var rwr=V(ne());var _It=["title","titleId"];function Fue(){return Fue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IIt=function(t){var n=t.title,r=t.titleId,o=SIt(t,_It);return c("svg",Fue({viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M5.14 3.808L7.53 1.51a.67.67 0 01.942 0l2.389 2.298c.26.256.685.256.944 0a.65.65 0 000-.93L9.416.578a2.02 2.02 0 00-2.832 0l-2.388 2.3a.65.65 0 000 .93c.26.256.683.256.944 0zm0 8.384l2.39 2.298a.67.67 0 00.942 0l2.389-2.298a.677.677 0 01.944 0 .65.65 0 010 .93l-2.388 2.3a2.02 2.02 0 01-2.832 0l-2.388-2.3a.65.65 0 010-.93.677.677 0 01.944 0zM16 6H0v4h16V6zM1 9V7h14v2H1z"}))},kIt=IIt;var KB={};de(KB,{icon:()=>AIt});var owr=V(ne());var PIt=["title","titleId"];function Bue(){return Bue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function CIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var TIt=function(t){var n=t.title,r=t.titleId,o=jIt(t,PIt);return c("svg",Bue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,fill:"none",viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.565 10.83a.5.5 0 11.819.573l-1.877 2.68c-.963 1.376-3.02 1.55-4.588.45C.35 13.436-.191 11.445.773 10.07L3.64 5.973c.963-1.375 3.019-1.548 4.587-.45a.5.5 0 11-.573.82C6.509 5.54 5.08 5.66 4.46 6.546l-2.868 4.095c-.621.887-.245 2.27.9 3.073 1.146.802 2.575.682 3.196-.205l1.877-2.68z"}),c("path",{d:"M7.892 3.43a.5.5 0 11-.574-.819L10 .734c1.376-.963 3.367-.422 4.465 1.146 1.098 1.569.926 3.625-.45 4.588L9.918 9.336c-1.375.963-3.366.422-4.464-1.146a.5.5 0 11.819-.574c.802 1.146 2.185 1.522 3.072.9L13.44 5.65c.886-.621 1.006-2.05.204-3.195-.802-1.146-2.186-1.522-3.072-.9L7.892 3.43zM6 .5v3a.5.5 0 01-1 0v-3a.5.5 0 011 0zM1.058 2.23l2.458 1.72a.5.5 0 01-.574.82L.484 3.05a.5.5 0 11.574-.82zm12 7.093l2.457 1.72a.5.5 0 11-.573.82l-2.457-1.72a.5.5 0 11.573-.82zm-2.099 1.181v3a.5.5 0 11-1 0v-3a.5.5 0 111 0z"}))},AIt=TIt;var YB={};de(YB,{icon:()=>NIt});var awr=V(ne());var MIt=["title","titleId"];function Wue(){return Wue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zIt=function(t){var n=t.title,r=t.titleId,o=RIt(t,MIt);return c("svg",Wue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M8 9a4 4 0 100-8 4 4 0 000 8zm0-1a3 3 0 100-6 3 3 0 000 6z",clipRule:"evenodd"}),c("path",{d:"M15 14.291A9.053 9.053 0 008 11a9.053 9.053 0 00-7 3.291l.715.71A8.047 8.047 0 018 11.996 8.047 8.047 0 0114.286 15l.714-.71z"}))},NIt=zIt;var QB={};de(QB,{icon:()=>HIt});var lwr=V(ne());var LIt=["title","titleId"];function Hue(){return Hue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var WIt=function(t){var n=t.title,r=t.titleId,o=FIt(t,LIt);return c("svg",Hue({xmlns:"http://www.w3.org/2000/svg",width:18,height:18,viewBox:"0 0 18 18","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("g",{fillRule:"evenodd"},c("path",{d:"M13.689 11.132c1.155 1.222 1.953 2.879 2.183 4.748a1.007 1.007 0 01-1 1.12H3.007a1.005 1.005 0 01-1-1.12c.23-1.87 1.028-3.526 2.183-4.748.247.228.505.442.782.633-1.038 1.069-1.765 2.55-1.972 4.237L14.872 16c-.204-1.686-.93-3.166-1.966-4.235a7.01 7.01 0 00.783-.633zM8.939 1c1.9 0 3 2 4.38 2.633a2.483 2.483 0 01-1.88.867c-.298 0-.579-.06-.844-.157A3.726 3.726 0 017.69 5.75c-1.395 0-3.75.25-3.245-1.903C5.94 3 6.952 1 8.94 1z"}),c("path",{d:"M8.94 2c2.205 0 4 1.794 4 4s-1.795 4-4 4c-2.207 0-4-1.794-4-4s1.793-4 4-4m0 9A5 5 0 108.937.999 5 5 0 008.94 11"})))},HIt=WIt;var ZB={};de(ZB,{icon:()=>GIt});var cwr=V(ne());var $It=["title","titleId"];function $ue(){return $ue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var UIt=function(t){var n=t.title,r=t.titleId,o=VIt(t,$It);return c("svg",$ue({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{fillRule:"evenodd",d:"M5.482 4.344a2 2 0 10-2.963 0c-.08.042-.156.087-.23.136-.457.305-.75.704-.933 1.073A3.457 3.457 0 001 6.978V9a1 1 0 001 1h2.5a3.69 3.69 0 01.684-.962L5.171 9H2V7s0-2 2-2c1.007 0 1.507.507 1.755 1.01.225-.254.493-.47.793-.636a2.717 2.717 0 00-1.066-1.03zM4 4a1 1 0 100-2 1 1 0 000 2zm10 6h-2.5a3.684 3.684 0 00-.684-.962L10.829 9H14V7s0-2-2-2c-1.007 0-1.507.507-1.755 1.01a3.012 3.012 0 00-.793-.636 2.716 2.716 0 011.066-1.03 2 2 0 112.963 0c.08.042.156.087.23.136.457.305.75.704.933 1.073A3.453 3.453 0 0115 6.944V9a1 1 0 01-1 1zm-2-6a1 1 0 100-2 1 1 0 000 2z"}),c("path",{fillRule:"evenodd",d:"M10 8c0 .517-.196.989-.518 1.344a2.755 2.755 0 011.163 1.21A3.453 3.453 0 0111 11.977V14a1 1 0 01-1 1H6a1 1 0 01-1-1v-2.022a2.005 2.005 0 01.006-.135 3.456 3.456 0 01.35-1.29 2.755 2.755 0 011.162-1.21A2 2 0 1110 8zm-4 4v2h4v-2s0-2-2-2-2 2-2 2zm3-4a1 1 0 11-2 0 1 1 0 012 0z"}))},GIt=UIt;var eW={};de(eW,{icon:()=>QIt});var pwr=V(ne());var JIt=["title","titleId"];function Vue(){return Vue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KIt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YIt=function(t){var n=t.title,r=t.titleId,o=XIt(t,JIt);return c("svg",Vue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.5 11V5H11V3.5H5V5H3.5v6H5v1.5h6V11h1.5zm1 0H15v4h-4v-1.5H5V15H1v-4h1.5V5H1V1h4v1.5h6V1h4v4h-1.5v6zM4 4V2H2v2h2zm8 0h2V2h-2v2zM2 14h2v-2H2v2zm10 0h2v-2h-2v2z"}))},QIt=YIt;var tW={};de(tW,{icon:()=>nkt});var hwr=V(ne());var ZIt=["title","titleId"];function que(){return que=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var rkt=function(t){var n=t.title,r=t.titleId,o=ekt(t,ZIt);return c("svg",que({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M0 1.994C0 .893.895 0 1.994 0h12.012C15.107 0 16 .895 16 1.994v12.012A1.995 1.995 0 0114.006 16H1.994A1.995 1.995 0 010 14.006V1.994zm1 0v12.012c0 .548.446.994.994.994h12.012a.995.995 0 00.994-.994V1.994A.995.995 0 0014.006 1H1.994A.995.995 0 001 1.994zM1 4h14v1H1V4zm1.5-1a.5.5 0 010-1h1a.5.5 0 010 1h-1zm3 0a.5.5 0 010-1h1a.5.5 0 010 1h-1zm4.947 6.106a1 1 0 010 1.788l-3 2A1 1 0 016 12V8a1 1 0 011.447-.894l3 2zM10 10L7 8v4l3-2z"}))},nkt=rkt;var rW={};de(rW,{icon:()=>lkt});var vwr=V(ne());var okt=["title","titleId"];function Uue(){return Uue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function akt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var skt=function(t){var n=t.title,r=t.titleId,o=ikt(t,okt);return c("svg",Uue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M3 13h10V9.913l-2.571-2.826L8.56 8.753a.5.5 0 01-.728-.067L4.448 4.317 3 6.191V13zm5.295-5.35l1.837-1.64a.5.5 0 01.703.037l3.035 3.336a.5.5 0 01.13.337v3.78a.5.5 0 01-.5.5h-11a.5.5 0 01-.5-.5V6.02a.5.5 0 01.104-.305l1.947-2.52a.5.5 0 01.791-.001L8.295 7.65zM1 15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14a.5.5 0 011 0V15z"}))},lkt=skt;var nW={};de(nW,{icon:()=>dkt});var ywr=V(ne());var ukt=["title","titleId"];function Gue(){return Gue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pkt=function(t){var n=t.title,r=t.titleId,o=ckt(t,ukt);return c("svg",Gue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M.5 1a.5.5 0 01.5.5V15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14A.5.5 0 01.5 1zm4.342 2.194L8.295 7.65l1.837-1.64a.5.5 0 01.703.037l3.035 3.336a.5.5 0 01.13.337v3.78a.5.5 0 01-.5.5h-11a.5.5 0 01-.5-.5V6.02a.5.5 0 01.104-.305l1.947-2.52a.5.5 0 01.791-.001zm-.394 1.123L3 6.191v4.101l1.146-1.146a.5.5 0 01.493-.126l.085.033L8.5 10.94l1.776-.888a.5.5 0 01.36-.034l.088.034L13 11.19V9.913l-2.571-2.826L8.56 8.753a.5.5 0 01-.728-.067L4.448 4.317z"}))},dkt=pkt;var oW={};de(oW,{icon:()=>ykt});var wwr=V(ne());var hkt=["title","titleId"];function Jue(){return Jue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gkt=function(t){var n=t.title,r=t.titleId,o=mkt(t,hkt);return c("svg",Jue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.5 10h-6a.5.5 0 010-1H8V6H2.5a.5.5 0 010-1H13V2H2.5a.5.5 0 010-1h11a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H9v3h2.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-9a.5.5 0 110-1H11v-3H8.5zM0 .5a.5.5 0 111 0v14a.5.5 0 11-1 0V.5z"}))},ykt=gkt;var iW={};de(iW,{icon:()=>_kt});var xwr=V(ne());var bkt=["title","titleId"];function Xue(){return Xue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Okt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xkt=function(t){var n=t.title,r=t.titleId,o=wkt(t,bkt);return c("svg",Xue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M.5 0a.5.5 0 01.5.5v14a.5.5 0 11-1 0V.5A.5.5 0 01.5 0zm13 1a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H9v3h2.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5h-9a.5.5 0 110-1H9v-3H2.5a.5.5 0 010-1H6V6H2.5a.5.5 0 010-1H10V2H2.5a.5.5 0 010-1h11z"}))},_kt=xkt;var aW={};de(aW,{icon:()=>Pkt});var Swr=V(ne());var Skt=["title","titleId"];function Kue(){return Kue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ikt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kkt=function(t){var n=t.title,r=t.titleId,o=Ekt(t,Skt);return c("svg",Kue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10 7.5v6a.5.5 0 11-1 0V8H6v5.5a.5.5 0 11-1 0V3H2v10.5a.5.5 0 11-1 0v-11a.5.5 0 01.5-.5h4a.5.5 0 01.5.5V7h3V4.5a.5.5 0 01.5-.5h4a.5.5 0 01.5.5v9a.5.5 0 11-1 0V5h-3v2.5zM.5 16a.5.5 0 110-1h14a.5.5 0 110 1H.5z"}))},Pkt=kkt;var sW={};de(sW,{icon:()=>Mkt});var Iwr=V(ne());var jkt=["title","titleId"];function Yue(){return Yue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Tkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Akt=function(t){var n=t.title,r=t.titleId,o=Ckt(t,jkt);return c("svg",Yue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14.5 15a.5.5 0 110 1H.5a.5.5 0 110-1h14zm-9-13a.5.5 0 01.5.5L5.999 7H9V4.5a.5.5 0 01.5-.5h4a.5.5 0 01.5.5v9a.5.5 0 11-1 0V7h-3v6.5a.5.5 0 01-.41.492L9.5 14a.5.5 0 01-.5-.5V10H6v3.5a.5.5 0 01-.992.09L5 13.5V6H2v7.5a.5.5 0 11-1 0v-11a.5.5 0 01.5-.5h4z"}))},Mkt=Akt;var lW={};de(lW,{icon:()=>Lkt});var Pwr=V(ne());var Rkt=["title","titleId"];function Que(){return Que=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Nkt=function(t){var n=t.title,r=t.titleId,o=Dkt(t,Rkt);return c("svg",Que({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.877 5.847l-1.02 1.02a.5.5 0 01-.708-.707l1.1-1.099c-.05-.053-.1-.106-.152-.157A6.471 6.471 0 008 3.019V4.5a.5.5 0 01-1 0V3.019a6.47 6.47 0 00-4.261 2.055l1.07 1.071a.5.5 0 01-.706.707l-.99-.99A6.46 6.46 0 001.018 10H2.5a.5.5 0 110 1H1.174c.083.353.196.697.337 1.03a.5.5 0 11-.922.39A7.487 7.487 0 010 9.5a7.483 7.483 0 012.197-5.304A7.487 7.487 0 017.5 2a7.487 7.487 0 015.304 2.197A7.483 7.483 0 0115 9.5a7.487 7.487 0 01-.59 2.92.5.5 0 01-.92-.39c.14-.333.253-.677.336-1.03H12.5a.5.5 0 110-1h1.481a6.483 6.483 0 00-1.104-4.153zm-6.041 5.317a.993.993 0 01-.01-1.404c.384-.385 2.882-2.002 3.149-1.735.267.267-1.35 2.765-1.735 3.15a.993.993 0 01-1.404-.01z"}))},Lkt=Nkt;var uW={};de(uW,{icon:()=>$kt});var Cwr=V(ne());var Fkt=["title","titleId"];function Zue(){return Zue=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Wkt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hkt=function(t){var n=t.title,r=t.titleId,o=Bkt(t,Fkt);return c("svg",Zue({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.725 3.653a6 6 0 012.847 7.576.5.5 0 01-.928-.372 5 5 0 10-9.293-.014.5.5 0 01-.218.619L1.39 12.47a.5.5 0 01-.708-.23A7.99 7.99 0 010 9a8 8 0 0111.212-7.329.5.5 0 01.234.704l-.721 1.278zm-.933-.38l.5-.889a7 7 0 00-8.902 8.93l.886-.511a6 6 0 017.516-7.53zM6.73 9.467a1.75 1.75 0 112.539 0 2 2 0 11-2.539 0zM8 12.013a1 1 0 100-2 1 1 0 000 2zm0-3a.75.75 0 100-1.5.75.75 0 000 1.5z"}))},$kt=Hkt;var cW={};de(cW,{icon:()=>Jkt});var Awr=V(ne());var Vkt=["title","titleId"];function ece(){return ece=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ukt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Gkt=function(t){var n=t.title,r=t.titleId,o=qkt(t,Vkt);return c("svg",ece({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M12.654 3.48c.248.225.552.389.888.467L11.24 9.43a1.99 1.99 0 00-.915-.404l2.33-5.547zM9.146 9.19a2.008 2.008 0 00-.769.64l-1.572-2c.311-.136.581-.35.785-.618l1.556 1.978zM5.581 7.956l-2.134 4.268a.5.5 0 01-.894-.448l2.134-4.268c.25.22.557.376.894.448zM1 15h13.5a.5.5 0 110 1H.5a.5.5 0 01-.5-.5v-14a.5.5 0 011 0V15zm5-8a1 1 0 110-2 1 1 0 010 2zm4 5a1 1 0 110-2 1 1 0 010 2zm4-9a1 1 0 110-2 1 1 0 010 2z"}))},Jkt=Gkt;var fW={};de(fW,{icon:()=>Zkt});var Rwr=V(ne());var Xkt=["title","titleId"];function tce(){return tce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Ykt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Qkt=function(t){var n=t.title,r=t.titleId,o=Kkt(t,Xkt);return c("svg",tce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M7.5 15C5.77 15 2 9.97 2 6.595 2 3.507 4.46 1 7.5 1S13 3.507 13 6.595C13 9.97 9.23 15 7.5 15zm0-1c.286 0 1.48-1.044 2.459-2.35C11.219 9.969 12 8.153 12 6.596 12 4.055 9.983 2 7.5 2S3 4.055 3 6.595c0 1.557.78 3.373 2.041 5.056C6.02 12.956 7.214 14 7.5 14zm0-4.996a2.5 2.5 0 110-5 2.5 2.5 0 010 5zm0-1a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"}))},Zkt=Qkt;var pW={};de(pW,{icon:()=>oPt});var zwr=V(ne());var ePt=["title","titleId"];function rce(){return rce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var nPt=function(t){var n=t.title,r=t.titleId,o=tPt(t,ePt);return c("svg",rce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.5 2.309v8.69a.499.499 0 01-.032.176L9.5 12.691V3.809l-3-1.5zm-1-.04L2 3.825v8.906l3.527-1.568a.5.5 0 01-.027-.164V2.27zm.274-1.216a.498.498 0 01.471.01l3.768 1.884 4.284-1.904A.5.5 0 0115 1.5v10a.5.5 0 01-.297.457l-4.5 2a.5.5 0 01-.427-.01l-3.789-1.894-4.283 1.904a.5.5 0 01-.703-.457v-10a.5.5 0 01.297-.457l4.476-1.99zM10.5 3.825v8.906l3.5-1.556V2.27l-3.5 1.556z"}))},oPt=nPt;var dW={};de(dW,{icon:()=>uPt});var Lwr=V(ne());var iPt=["title","titleId"];function nce(){return nce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lPt=function(t){var n=t.title,r=t.titleId,o=aPt(t,iPt);return c("svg",nce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.532 7.34a2.161 2.161 0 112.936 0 2.746 2.746 0 11-2.936 0zM2 0h12a2 2 0 012 2v12a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2zm0 1a1 1 0 00-1 1v12a1 1 0 001 1h12a1 1 0 001-1V2a1 1 0 00-1-1H2zm6 5.915a1.161 1.161 0 100-2.322 1.161 1.161 0 000 2.322zm0 4.492a1.746 1.746 0 100-3.492 1.746 1.746 0 000 3.492z"}))},uPt=lPt;var hW={};de(hW,{icon:()=>hPt});var Bwr=V(ne());var cPt=["title","titleId"];function oce(){return oce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var dPt=function(t){var n=t.title,r=t.titleId,o=fPt(t,cPt);return c("svg",oce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.5 9a.5.5 0 01-.5-.5V3.023A5.5 5.5 0 1011.978 9H6.5zM7 8h5.5a.5.5 0 01.5.5A6.5 6.5 0 116.5 2a.5.5 0 01.5.5V8zm2-6.972V6h4.972C13.696 3.552 11.448 1.304 9 1.028zM14.5 7h-6a.5.5 0 01-.5-.5v-6a.5.5 0 01.5-.5C11.853 0 15 3.147 15 6.5a.5.5 0 01-.5.5zM6.146 8.854a.5.5 0 11.708-.708l4 4a.5.5 0 01-.708.708l-4-4z"}))},hPt=dPt;var mW={};de(mW,{icon:()=>bPt});var Hwr=V(ne());var mPt=["title","titleId"];function ice(){return ice=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function gPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var yPt=function(t){var n=t.title,r=t.titleId,o=vPt(t,mPt);return c("svg",ice({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M16 3v11a2 2 0 01-2 2H2a2 2 0 01-2-2V2a2 2 0 012-2h12a2 2 0 012 2v1zm-1 0V2a1 1 0 00-1-1H2a1 1 0 00-1 1v1h14zm0 1H1v10a1 1 0 001 1h12a1 1 0 001-1V4zM4.5 6a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 3a.5.5 0 010 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 010-1h6zm-9 3a.5.5 0 110 1H2.496a.5.5 0 110-1H4.5zm9 0a.5.5 0 110 1h-6a.5.5 0 110-1h6z"}))},bPt=yPt;var vW={};de(vW,{icon:()=>SPt});var Vwr=V(ne());var wPt=["title","titleId"];function ace(){return ace=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _Pt=function(t){var n=t.title,r=t.titleId,o=OPt(t,wPt);return c("svg",ace({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M1.5 9.047a.5.5 0 100 1h13a.5.5 0 000-1h-13zm0-1h13a1.5 1.5 0 010 3h-13a1.5 1.5 0 010-3zM10 13a.5.5 0 110 1H4a.5.5 0 110-1h6zM8.001 2.015a.5.5 0 11-.002 1l-5-.015a.5.5 0 11.003-1l5 .015zM14 5a.5.5 0 110 1H6a.5.5 0 010-1h8z"}))},SPt=_Pt;var gW={};de(gW,{icon:()=>jPt});var Uwr=V(ne());var EPt=["title","titleId"];function sce(){return sce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PPt=function(t){var n=t.title,r=t.titleId,o=IPt(t,EPt);return c("svg",sce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M8.5 5v6h2a.5.5 0 110 1h-5a.5.5 0 110-1h2V5H5v.5a.5.5 0 01-1 0v-1a.5.5 0 01.5-.5h7a.5.5 0 01.5.51l-.021 1a.5.5 0 11-1-.02l.01-.49H8.5zM1 15h1.5a.5.5 0 110 1h-2a.5.5 0 01-.5-.5v-1.996a.5.5 0 011 0V15zM1 1v1.497a.5.5 0 11-1 0V.5A.5.5 0 01.5 0h2a.5.5 0 010 1H1zm14 0h-1.495a.5.5 0 010-1H15.5a.5.5 0 01.5.5v2a.5.5 0 11-1 0V1zm0 14v-1.5a.5.5 0 111 0v2a.5.5 0 01-.5.5h-2a.5.5 0 110-1H15zM0 6.5a.5.5 0 011 0v3a.5.5 0 01-1 0v-3zM9.5 0a.5.5 0 010 1h-3a.5.5 0 010-1h3zM15 6.5a.5.5 0 111 0v3a.5.5 0 11-1 0v-3zM9.5 15a.5.5 0 110 1h-3a.5.5 0 110-1h3z"}))},jPt=PPt;var yW={};de(yW,{icon:()=>RPt});var Jwr=V(ne());var CPt=["title","titleId"];function lce(){return lce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function APt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var MPt=function(t){var n=t.title,r=t.titleId,o=TPt(t,CPt);return c("svg",lce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M10.884 1.802c1.171-.309 2.22-.24 3.103.07.295.104.507.212.631.292l.164.106.048.188c.278 1.066.2 2.175-.091 3.23a6.728 6.728 0 01-.194.598c.035.12.074.273.112.454.227 1.065.247 2.193-.08 3.267a4.855 4.855 0 01-.534 1.175c-.324.514-.7.954-1.117 1.323-.806.712-1.616 1.071-2.235 1.206-.14.179-.346.381-.629.578-.643.447-1.493.711-2.561.711-1.07 0-1.92-.264-2.563-.711a2.874 2.874 0 01-.629-.578c-.618-.134-1.428-.493-2.232-1.203-.419-.37-.796-.81-1.12-1.326a4.855 4.855 0 01-.534-1.175C.096 8.933.116 7.805.343 6.74a6.74 6.74 0 01.112-.454 6.728 6.728 0 01-.194-.598C-.03 4.633-.108 3.524.17 2.458l.048-.188.164-.106c.124-.08.336-.188.63-.291.885-.31 1.933-.38 3.104-.07.184-.108.434-.23.748-.348C5.616 1.17 6.497 1 7.501 1c1.002 0 1.883.17 2.634.455.315.119.565.24.75.347zm3.027 1.116a3.13 3.13 0 00-.255-.102c-.749-.263-1.66-.309-2.708.007l-.238.072-.201-.147c-.11-.08-.354-.217-.728-.358C9.14 2.147 8.38 2 7.501 2c-.88 0-1.641.147-2.283.39-.373.141-.617.278-.727.358l-.2.147-.24-.072c-1.048-.316-1.958-.27-2.707-.007a3.13 3.13 0 00-.255.102c-.167.812-.094 1.674.136 2.503.084.303.166.524.217.637l.082.182-.066.19c-.032.09-.084.27-.137.518-.195.914-.212 1.88.059 2.767.1.333.241.645.423.935.273.434.588.801.936 1.108.434.383.898.655 1.36.834.27.105.474.155.575.17l.248.034.12.22c.051.091.199.266.466.452.476.33 1.127.532 1.993.532.865 0 1.516-.202 1.99-.532.268-.186.416-.36.466-.452l.121-.22.248-.034c.101-.015.305-.065.576-.17.462-.18.927-.452 1.362-.836.347-.307.66-.674.933-1.107.182-.29.322-.601.423-.934.271-.887.254-1.853.06-2.767a4.597 4.597 0 00-.138-.519l-.066-.189.082-.182c.05-.113.133-.334.217-.637.23-.829.303-1.691.136-2.503zM5 5.008c.004.181-.048.364-.264.616-.428.498-.985.488-1.431.049-.326-.321-.325-.732-.29-1.047.085-.76.748-.722 1.262-.44.486.27.717.616.723.823zm5 0c.006-.206.237-.553.724-.821.514-.283 1.176-.321 1.26.44.036.314.038.725-.288 1.046-.446.44-1.005.449-1.433-.05-.217-.25-.267-.434-.263-.614zM7.5 8c-.503 0-.976-.24-1.375-.672-.398-.432-.592-1.126 0-1.528.384-.259 1.082-.3 1.375-.3.294 0 .991.041 1.375.3.593.402.397 1.096 0 1.528C8.477 7.76 8.002 8 7.5 8zm0 1c.808 0 2.656.994 2.49 2.074-.153.993-2.114.925-2.49.925-.374 0-2.336.068-2.49-.925C4.845 9.994 6.693 9 7.5 9z"}))},RPt=MPt;var bW={};de(bW,{icon:()=>FPt});var Kwr=V(ne());var DPt=["title","titleId"];function uce(){return uce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var LPt=function(t){var n=t.title,r=t.titleId,o=zPt(t,DPt);return c("svg",uce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2.414 8.036L4.89 10.51a.5.5 0 01-.707.708L1.354 8.389a.5.5 0 010-.707l2.828-2.828a.5.5 0 11.707.707L2.414 8.036zm8.768 2.474l2.475-2.474-2.475-2.475a.5.5 0 01.707-.707l2.829 2.828a.5.5 0 010 .707l-2.829 2.829a.5.5 0 11-.707-.708zM8.559 2.506a.5.5 0 01.981.19L7.441 13.494a.5.5 0 01-.981-.19L8.559 2.506z"}))},FPt=LPt;var wW={};de(wW,{icon:()=>VPt});var Qwr=V(ne());var BPt=["title","titleId"];function cce(){return cce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var $Pt=function(t){var n=t.title,r=t.titleId,o=WPt(t,BPt);return c("svg",cce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M9.837 7c.11.93.165 1.886.165 2.869V13.5a.5.5 0 11-1 0V9.869A23.3 23.3 0 008.83 7H7.29c-.195 1.04-.292 1.985-.292 2.835V13.5a.5.5 0 11-1 0V9.835c0-.864.092-1.809.276-2.835H2.5a.5.5 0 01-.495-.57c.285-2.023 1.626-3.358 3.931-3.96 1.967-.514 4.22-.606 6.756-.278A1.5 1.5 0 0114 3.679V5.5A1.5 1.5 0 0112.5 7H9.837zm-.569-1H12.5a.5.5 0 00.5-.5V3.68a.5.5 0 00-.436-.497c-2.416-.311-4.54-.225-6.375.254C4.494 3.88 3.491 4.724 3.117 6H9.268zM2 10v3.5a.5.5 0 11-1 0v-4a.5.5 0 01.5-.5h3a.5.5 0 01.5.5v4a.5.5 0 11-1 0V10H2zm10 3.5a.5.5 0 11-1 0v-2a.5.5 0 01.5-.5h3a.5.5 0 01.5.5v2a.5.5 0 11-1 0V12h-2v1.5zM1.016 16.026a.5.5 0 010-1H15a.5.5 0 110 1H1.016z"}))},VPt=$Pt;var OW={};de(OW,{icon:()=>XPt});var eOr=V(ne());var qPt=["title","titleId"];function fce(){return fce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JPt=function(t){var n=t.title,r=t.titleId,o=UPt(t,qPt);return c("svg",fce({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M2 3h12v1H2V3zm0 8h6v1H2v-1z"}),c("path",{d:"M2 7h9.5v.5V7h.039l.083.005a2.958 2.958 0 011.102.298c.309.154.633.394.88.763.248.373.396.847.396 1.434 0 .588-.148 1.061-.396 1.434a2.257 2.257 0 01-.88.763 2.957 2.957 0 01-1.185.302h-.025l-.009.001h-.003s-.002 0-.002-.5v.5H11v1l-2-1.5 2-1.5v1h.506l.044-.003a1.959 1.959 0 00.726-.195c.191-.095.367-.23.495-.423.127-.19.229-.466.229-.879s-.102-.689-.229-.879a1.256 1.256 0 00-.495-.424 1.958 1.958 0 00-.77-.197H2V7z"}))},XPt=JPt;var xW={};de(xW,{icon:()=>ejt});var rOr=V(ne());var KPt=["title","titleId"];function pce(){return pce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QPt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ZPt=function(t){var n=t.title,r=t.titleId,o=YPt(t,KPt);return c("svg",pce({width:16,height:16,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M14 3.5L12 2v1H2v1h10v1l2-1.5zM12 9V8H2V7h10V6l2 1.5L12 9zm0 3v1l2-1.5-2-1.5v1H2v1h10z"}))},ejt=ZPt;var _W={};de(_W,{icon:()=>ijt});var oOr=V(ne());var tjt=["title","titleId"];function dce(){return dce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function njt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var ojt=function(t){var n=t.title,r=t.titleId,o=rjt(t,tjt);return c("svg",dce({xmlns:"http://www.w3.org/2000/svg",width:16,height:16,viewBox:"0 0 16 16","aria-labelledby":r},o),n?c("title",{id:r},n):null,c("path",{d:"M6.918 9.746l4.537 4.537a2 2 0 102.828-2.829l-3.157-3.156a.5.5 0 01.708-.708l3.156 3.157a3 3 0 11-4.243 4.243l-4.949-4.95a5.001 5.001 0 01-5.22-7.106.5.5 0 01.805-.138L3.676 5.09a1 1 0 101.415-1.414L2.797 1.382a.5.5 0 01.138-.805 5.001 5.001 0 113.983 9.169zM1.226 4.054a4.002 4.002 0 006.693 3.865 4 4 0 00-3.865-6.693l1.744 1.743a2 2 0 11-2.829 2.828L1.226 4.054zm10.229 8.814a1 1 0 111.414-1.414 1 1 0 01-1.414 1.414z"}))},ijt=ojt;var B6e=V(ne()),Yp=V(er()),W6e=V(Ar());var SU={accessibility:"accessibility",addDataApp:"app_add_data",advancedSettingsApp:"app_advanced_settings",agentApp:"app_fleet",aggregate:"aggregate",alert:"alert",analyzeEvent:"analyzeEvent",annotation:"annotation",apmApp:"app_apm",apmTrace:"apm_trace",appSearchApp:"app_app_search",apps:"apps",arrowDown:"arrow_down",arrowLeft:"arrow_left",arrowRight:"arrow_right",arrowUp:"arrow_up",arrowStart:"arrowStart",arrowEnd:"arrowEnd",asterisk:"asterisk",auditbeatApp:"app_auditbeat",beaker:"beaker",bell:"bell",bellSlash:"bellSlash",bolt:"bolt",boxesHorizontal:"boxes_horizontal",boxesVertical:"boxes_vertical",branch:"branch",branchUser:"branchUser",broom:"broom",brush:"brush",bug:"bug",bullseye:"bullseye",calendar:"calendar",canvasApp:"app_canvas",casesApp:"app_cases",check:"check",checkInCircleFilled:"checkInCircleFilled",cheer:"cheer",classificationJob:"ml_classification_job",clock:"clock",cloudDrizzle:"cloudDrizzle",cloudStormy:"cloudStormy",cloudSunny:"cloudSunny",cluster:"cluster",codeApp:"app_code",color:"color",compute:"compute",console:"console",consoleApp:"app_console",container:"container",continuityAbove:"continuityAbove",continuityAboveBelow:"continuityAboveBelow",continuityBelow:"continuityBelow",continuityWithin:"continuityWithin",controlsHorizontal:"controls_horizontal",controlsVertical:"controls_vertical",copy:"copy",copyClipboard:"copy_clipboard",createAdvancedJob:"ml_create_advanced_job",createMultiMetricJob:"ml_create_multi_metric_job",createPopulationJob:"ml_create_population_job",createSingleMetricJob:"ml_create_single_metric_job",cross:"cross",crossClusterReplicationApp:"app_cross_cluster_replication",crossInACircleFilled:"crossInACircleFilled",crosshairs:"crosshairs",currency:"currency",cut:"cut",dashboardApp:"app_dashboard",dataVisualizer:"ml_data_visualizer",database:"database",desktop:"desktop",devToolsApp:"app_devtools",discoverApp:"app_discover",document:"document",documentEdit:"documentEdit",documentation:"documentation",documents:"documents",dot:"dot",doubleArrowLeft:"doubleArrowLeft",doubleArrowRight:"doubleArrowRight",download:"download",editorAlignCenter:"editor_align_center",editorAlignLeft:"editor_align_left",editorAlignRight:"editor_align_right",editorBold:"editor_bold",editorChecklist:"editor_checklist",editorCodeBlock:"editor_code_block",editorComment:"editor_comment",editorDistributeHorizontal:"editorDistributeHorizontal",editorDistributeVertical:"editorDistributeVertical",editorHeading:"editor_heading",editorItalic:"editor_italic",editorItemAlignBottom:"editorItemAlignBottom",editorItemAlignCenter:"editorItemAlignCenter",editorItemAlignLeft:"editorItemAlignLeft",editorItemAlignMiddle:"editorItemAlignMiddle",editorItemAlignRight:"editorItemAlignRight",editorItemAlignTop:"editorItemAlignTop",editorLink:"editor_link",editorOrderedList:"editor_ordered_list",editorPositionBottomLeft:"editorPositionBottomLeft",editorPositionBottomRight:"editorPositionBottomRight",editorPositionTopLeft:"editorPositionTopLeft",editorPositionTopRight:"editorPositionTopRight",editorRedo:"editor_redo",editorStrike:"editor_strike",editorTable:"editor_table",editorUnderline:"editor_underline",editorUndo:"editor_undo",editorUnorderedList:"editor_unordered_list",email:"email",empty:"empty",emsApp:"app_ems",eql:"eql",eraser:"eraser",exit:"exit",expand:"expand",expandMini:"expandMini",exportAction:"export",eye:"eye",eyeClosed:"eye_closed",faceHappy:"face_happy",faceNeutral:"face_neutral",faceSad:"face_sad",filebeatApp:"app_filebeat",filter:"filter",flag:"flag",fleetApp:"app_agent",fold:"fold",folderCheck:"folder_check",folderClosed:"folder_closed",folderExclamation:"folder_exclamation",folderOpen:"folder_open",frameNext:"frameNext",framePrevious:"framePrevious",fullScreen:"full_screen",fullScreenExit:"fullScreenExit",function:"function",gear:"gear",gisApp:"app_gis",glasses:"glasses",globe:"globe",grab:"grab",grabHorizontal:"grab_horizontal",graphApp:"app_graph",grid:"grid",grokApp:"app_grok",heart:"heart",heartbeatApp:"app_heartbeat",heatmap:"heatmap",help:"help",home:"home",iInCircle:"iInCircle",image:"image",importAction:"import",indexClose:"index_close",indexEdit:"index_edit",indexFlush:"index_flush",indexManagementApp:"app_index_management",indexMapping:"index_mapping",indexOpen:"index_open",indexPatternApp:"app_index_pattern",indexRollupApp:"app_index_rollup",indexRuntime:"index_runtime",indexSettings:"index_settings",inputOutput:"inputOutput",inspect:"inspect",invert:"invert",ip:"ip",keyboard:"keyboard",kqlField:"kql_field",kqlFunction:"kql_function",kqlOperand:"kql_operand",kqlSelector:"kql_selector",kqlValue:"kql_value",kubernetesNode:"kubernetesNode",kubernetesPod:"kubernetesPod",layers:"layers",lensApp:"app_lens",lettering:"lettering",lineDashed:"lineDashed",lineDotted:"lineDotted",lineSolid:"lineSolid",link:"link",list:"list",listAdd:"list_add",lock:"lock",lockOpen:"lockOpen",logoAWS:"logo_aws",logoAWSMono:"logo_aws_mono",logoAerospike:"logo_aerospike",logoApache:"logo_apache",logoAppSearch:"logo_app_search",logoAzure:"logo_azure",logoAzureMono:"logo_azure_mono",logoBeats:"logo_beats",logoBusinessAnalytics:"logo_business_analytics",logoCeph:"logo_ceph",logoCloud:"logo_cloud",logoCloudEnterprise:"logo_cloud_ece",logoCode:"logo_code",logoCodesandbox:"logo_codesandbox",logoCouchbase:"logo_couchbase",logoDocker:"logo_docker",logoDropwizard:"logo_dropwizard",logoElastic:"logo_elastic",logoElasticStack:"logo_elastic_stack",logoElasticsearch:"logo_elasticsearch",logoEnterpriseSearch:"logo_enterprise_search",logoEtcd:"logo_etcd",logoGCP:"logo_gcp",logoGCPMono:"logo_gcp_mono",logoGithub:"logo_github",logoGmail:"logo_gmail",logoGolang:"logo_golang",logoGoogleG:"logo_google_g",logoHAproxy:"logo_haproxy",logoIBM:"logo_ibm",logoIBMMono:"logo_ibm_mono",logoKafka:"logo_kafka",logoKibana:"logo_kibana",logoKubernetes:"logo_kubernetes",logoLogging:"logo_logging",logoLogstash:"logo_logstash",logoMaps:"logo_maps",logoMemcached:"logo_memcached",logoMetrics:"logo_metrics",logoMongodb:"logo_mongodb",logoMySQL:"logo_mysql",logoNginx:"logo_nginx",logoObservability:"logo_observability",logoOsquery:"logo_osquery",logoPhp:"logo_php",logoPostgres:"logo_postgres",logoPrometheus:"logo_prometheus",logoRabbitmq:"logo_rabbitmq",logoRedis:"logo_redis",logoSecurity:"logo_security",logoSiteSearch:"logo_site_search",logoSketch:"logo_sketch",logoSlack:"logo_slack",logoUptime:"logo_uptime",logoWebhook:"logo_webhook",logoWindows:"logo_windows",logoWorkplaceSearch:"logo_workplace_search",logsApp:"app_logs",logstashFilter:"logstash_filter",logstashIf:"logstash_if",logstashInput:"logstash_input",logstashOutput:"logstash_output",logstashQueue:"logstash_queue",machineLearningApp:"app_ml",magnet:"magnet",magnifyWithExclamation:"magnifyWithExclamation",magnifyWithMinus:"magnifyWithMinus",magnifyWithPlus:"magnifyWithPlus",managementApp:"app_management",mapMarker:"map_marker",memory:"memory",menu:"menu",menuDown:"menuDown",menuLeft:"menuLeft",menuRight:"menuRight",menuUp:"menuUp",merge:"merge",metricbeatApp:"app_metricbeat",metricsApp:"app_metrics",minimize:"minimize",minus:"minus",minusInCircle:"minus_in_circle",minusInCircleFilled:"minus_in_circle_filled",mobile:"mobile",monitoringApp:"app_monitoring",moon:"moon",namespace:"namespace",nested:"nested",node:"node",notebookApp:"app_notebook",number:"number",offline:"offline",online:"online",outlierDetectionJob:"ml_outlier_detection_job",package:"package",packetbeatApp:"app_packetbeat",pageSelect:"pageSelect",pagesSelect:"pagesSelect",paperClip:"paper_clip",partial:"partial",pause:"pause",payment:"payment",pencil:"pencil",percent:"percent",pin:"pin",pinFilled:"pin_filled",pipelineApp:"app_pipeline",play:"play",playFilled:"playFilled",plus:"plus",plusInCircle:"plus_in_circle",plusInCircleFilled:"plus_in_circle_filled",popout:"popout",push:"push",questionInCircle:"question_in_circle",quote:"quote",recentlyViewedApp:"app_recently_viewed",refresh:"refresh",regressionJob:"ml_regression_job",reporter:"reporter",reportingApp:"app_reporting",returnKey:"return_key",save:"save",savedObjectsApp:"app_saved_objects",scale:"scale",search:"search",searchProfilerApp:"app_search_profiler",securityAnalyticsApp:"app_security_analytics",securityApp:"app_security",securitySignal:"securitySignal",securitySignalDetected:"securitySignalDetected",securitySignalResolved:"securitySignalResolved",sessionViewer:"sessionViewer",shard:"shard",share:"share",snowflake:"snowflake",sortDown:"sort_down",sortLeft:"sortLeft",sortRight:"sortRight",sortUp:"sort_up",sortable:"sortable",spacesApp:"app_spaces",sqlApp:"app_sql",starEmpty:"star_empty",starEmptySpace:"star_empty_space",starFilled:"star_filled",starFilledSpace:"star_filled_space",starMinusEmpty:"star_minus_empty",starMinusFilled:"star_minus_filled",starPlusEmpty:"starPlusEmpty",starPlusFilled:"starPlusFilled",stats:"stats",stop:"stop",stopFilled:"stop_filled",stopSlash:"stop_slash",storage:"storage",string:"string",submodule:"submodule",sun:"sun",swatchInput:"swatch_input",symlink:"symlink",tableDensityCompact:"table_density_compact",tableDensityExpanded:"table_density_expanded",tableDensityNormal:"table_density_normal",tableOfContents:"tableOfContents",tag:"tag",tear:"tear",temperature:"temperature",timeline:"timeline",timelionApp:"app_timelion",timeRefresh:"timeRefresh",timeslider:"timeslider",training:"training",trash:"trash",unfold:"unfold",unlink:"unlink",upgradeAssistantApp:"app_upgrade_assistant",uptimeApp:"app_uptime",user:"user",userAvatar:"userAvatar",users:"users",usersRolesApp:"app_users_roles",vector:"vector",videoPlayer:"videoPlayer",visArea:"vis_area",visAreaStacked:"vis_area_stacked",visBarHorizontal:"vis_bar_horizontal",visBarHorizontalStacked:"vis_bar_horizontal_stacked",visBarVertical:"vis_bar_vertical",visBarVerticalStacked:"vis_bar_vertical_stacked",visGauge:"vis_gauge",visGoal:"vis_goal",visLine:"vis_line",visMapCoordinate:"vis_map_coordinate",visMapRegion:"vis_map_region",visMetric:"vis_metric",visPie:"vis_pie",visTable:"vis_table",visTagCloud:"vis_tag_cloud",visText:"vis_text",visTimelion:"vis_timelion",visVega:"vis_vega",visVisualBuilder:"vis_visual_builder",visualizeApp:"app_visualize",watchesApp:"app_watches",wordWrap:"wordWrap",wordWrapDisabled:"wordWrapDisabled",workplaceSearchApp:"app_workplace_search",wrench:"wrench",tokenAlias:"tokenAlias",tokenAnnotation:"tokenAnnotation",tokenArray:"tokenArray",tokenBinary:"tokenBinary",tokenBoolean:"tokenBoolean",tokenClass:"tokenClass",tokenCompletionSuggester:"tokenCompletionSuggester",tokenConstant:"tokenConstant",tokenDate:"tokenDate",tokenDenseVector:"tokenDenseVector",tokenElement:"tokenElement",tokenEnum:"tokenEnum",tokenEnumMember:"tokenEnumMember",tokenEvent:"tokenEvent",tokenException:"tokenException",tokenField:"tokenField",tokenFile:"tokenFile",tokenFlattened:"tokenFlattened",tokenFunction:"tokenFunction",tokenGeo:"tokenGeo",tokenHistogram:"tokenHistogram",tokenInterface:"tokenInterface",tokenIP:"tokenIP",tokenJoin:"tokenJoin",tokenKey:"tokenKey",tokenKeyword:"tokenKeyword",tokenMethod:"tokenMethod",tokenMetricCounter:"tokenMetricCounter",tokenMetricGauge:"tokenMetricGauge",tokenModule:"tokenModule",tokenNamespace:"tokenNamespace",tokenNested:"tokenNested",tokenNull:"tokenNull",tokenNumber:"tokenNumber",tokenObject:"tokenObject",tokenOperator:"tokenOperator",tokenPackage:"tokenPackage",tokenParameter:"tokenParameter",tokenPercolator:"tokenPercolator",tokenProperty:"tokenProperty",tokenRange:"tokenRange",tokenRankFeature:"tokenRankFeature",tokenRankFeatures:"tokenRankFeatures",tokenRepo:"tokenRepo",tokenSearchType:"tokenSearchType",tokenShape:"tokenShape",tokenString:"tokenString",tokenStruct:"tokenStruct",tokenSymbol:"tokenSymbol",tokenTag:"tokenTag",tokenText:"tokenText",tokenTokenCount:"tokenTokenCount",tokenVariable:"tokenVariable"};var k6e=V(Li()),SW=[];function ajt(){(0,k6e.unstable_batchedUpdates)(function(){for(var e=0;e2&&arguments[2]!==void 0?arguments[2]:{},d=i.method;if(n==="transparent")return"transparent";if(d==="transparent")return n==="plain"?lv(r.colors.ghost,.2):n==="subdued"?lv(r.colors.lightShade,.2):lv(r.colors[n],.1);var y=function(k){return o==="DARK"?u4(k,.8):l4(k,.9)};switch(n){case"plain":return r.colors.emptyShade;case"subdued":return r.colors.body;default:return y(r.colors[n])}},TE=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.method,o=Jn();return IW(o,t,{method:r})},j6e=function(){return{transparent:nt("background-color:",TE("transparent"),";;label:transparent;"),plain:nt("background-color:",TE("plain"),";;label:plain;"),subdued:nt("background-color:",TE("subdued"),";;label:subdued;"),accent:nt("background-color:",TE("accent"),";;label:accent;"),primary:nt("background-color:",TE("primary"),";;label:primary;"),success:nt("background-color:",TE("success"),";;label:success;"),warning:nt("background-color:",TE("warning"),";;label:warning;"),danger:nt("background-color:",TE("danger"),";;label:danger;")}};var C6e=function(t){var n=t.euiTheme,r=n.colors,o=n.size,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},d=i.thumbColor,y=i.trackColor,_=y===void 0?"transparent":y,k=i.width,T=k===void 0?"thin":k,N=i.size,L=i.corner,Y=d||lv(r.darkShade,.5),q=N||o.base,K=L||T==="thin"?"calc(".concat(o.s," * 0.75)"):o.xs,U="scrollbar-color: ".concat(Y," ").concat(_,";");return"scrollbar-width: ".concat(T,`; &::-webkit-scrollbar { width: `).concat(q,`; @@ -248,7 +248,7 @@ svg text { 100% { opacity: 1; } -`])),z6e),fjt={name:"njd749-logoElasticOutline",styles:"*[fill]{fill:none!important;}.outline{fill:currentColor!important;};label:logoElasticOutline;"},pjt={name:"uacjc5-inherit",styles:"color:inherit;label:inherit;"},N6e=function(t){var n=t.euiTheme;return{euiIcon:nt("flex-shrink:0;display:inline-block;vertical-align:middle;fill:currentColor;transform:translate(0, 0);.euiIcon__fillNegative{fill:",n.colors.darkestShade,";};label:euiIcon;"),accent:nt("color:",n.colors.accentText,";;label:accent;"),danger:nt("color:",n.colors.dangerText,";;label:danger;"),ghost:nt("color:",n.colors.ghost,";*[fill],.euiIcon__fillNegative{fill:currentColor!important;};label:ghost;"),primary:nt("color:",n.colors.primaryText,";;label:primary;"),success:nt("color:",n.colors.successText,";;label:success;"),subdued:nt("color:",n.colors.subduedText,";;label:subdued;"),text:nt("color:",n.colors.title,";*[fill],.euiIcon__fillNegative{fill:currentColor!important;};label:text;"),warning:nt("color:",n.colors.warningText,";;label:warning;"),inherit:pjt,default:nt(";label:default;"),customColor:nt(";label:customColor;"),logoElasticOutline:fjt,original:nt(";label:original;"),s:nt(PW(n.size.m),";label:s;"),m:nt(PW(n.size.base),";label:m;"),l:nt(PW(n.size.l),";label:l;"),xl:nt(PW(n.size.xl),";label:xl;"),xxl:nt(PW(n.size.xxl),";label:xxl;"),app:nt("fill:",n.colors.text,";.euiIcon__fillSecondary{fill:",n.colors.successText,";};label:app;"),logo:nt(";label:logo;"),isLoading:nt("opacity:",z6e,";background-color:currentColor;border-radius:",n.border.radius.small,";;label:isLoading;"),isLoaded:nt(X0,"{animation:",cjt," ",n.animation.normal," ease-in 0s 1 forwards;};label:isLoaded;")}};var djt={"./assets/accessibility.js":nM,"./assets/aggregate.js":oM,"./assets/alert.js":iM,"./assets/analyzeEvent.js":aM,"./assets/analyze_event.js":sM,"./assets/annotation.js":lM,"./assets/apm_trace.js":uM,"./assets/app_add_data.js":cM,"./assets/app_advanced_settings.js":fM,"./assets/app_agent.js":pM,"./assets/app_apm.js":dM,"./assets/app_app_search.js":hM,"./assets/app_auditbeat.js":mM,"./assets/app_canvas.js":vM,"./assets/app_cases.js":gM,"./assets/app_code.js":yM,"./assets/app_console.js":bM,"./assets/app_cross_cluster_replication.js":wM,"./assets/app_dashboard.js":OM,"./assets/app_devtools.js":xM,"./assets/app_discover.js":_M,"./assets/app_ems.js":SM,"./assets/app_filebeat.js":EM,"./assets/app_fleet.js":IM,"./assets/app_gis.js":kM,"./assets/app_graph.js":PM,"./assets/app_grok.js":jM,"./assets/app_heartbeat.js":CM,"./assets/app_index_management.js":TM,"./assets/app_index_pattern.js":AM,"./assets/app_index_rollup.js":MM,"./assets/app_lens.js":RM,"./assets/app_logs.js":DM,"./assets/app_management.js":zM,"./assets/app_metricbeat.js":NM,"./assets/app_metrics.js":LM,"./assets/app_ml.js":FM,"./assets/app_monitoring.js":BM,"./assets/app_notebook.js":WM,"./assets/app_packetbeat.js":HM,"./assets/app_pipeline.js":$M,"./assets/app_recently_viewed.js":VM,"./assets/app_reporting.js":qM,"./assets/app_saved_objects.js":UM,"./assets/app_search_profiler.js":GM,"./assets/app_security.js":JM,"./assets/app_security_analytics.js":XM,"./assets/app_spaces.js":KM,"./assets/app_sql.js":YM,"./assets/app_timelion.js":QM,"./assets/app_upgrade_assistant.js":ZM,"./assets/app_uptime.js":eR,"./assets/app_users_roles.js":tR,"./assets/app_visualize.js":rR,"./assets/app_watches.js":nR,"./assets/app_workplace_search.js":oR,"./assets/apps.js":iR,"./assets/arrowEnd.js":aR,"./assets/arrowStart.js":sR,"./assets/arrow_down.js":lR,"./assets/arrow_left.js":uR,"./assets/arrow_right.js":cR,"./assets/arrow_up.js":fR,"./assets/asterisk.js":pR,"./assets/beaker.js":dR,"./assets/bell.js":hR,"./assets/bellSlash.js":mR,"./assets/bolt.js":vR,"./assets/boxes_horizontal.js":gR,"./assets/boxes_vertical.js":yR,"./assets/branch.js":bR,"./assets/branchUser.js":wR,"./assets/broom.js":OR,"./assets/brush.js":xR,"./assets/bug.js":_R,"./assets/bullseye.js":SR,"./assets/calendar.js":ER,"./assets/check.js":IR,"./assets/checkInCircleFilled.js":kR,"./assets/cheer.js":PR,"./assets/clock.js":jR,"./assets/cloudDrizzle.js":CR,"./assets/cloudStormy.js":TR,"./assets/cloudSunny.js":AR,"./assets/cluster.js":MR,"./assets/color.js":RR,"./assets/compute.js":DR,"./assets/console.js":zR,"./assets/container.js":NR,"./assets/continuityAbove.js":LR,"./assets/continuityAboveBelow.js":FR,"./assets/continuityBelow.js":BR,"./assets/continuityWithin.js":WR,"./assets/controls_horizontal.js":HR,"./assets/controls_vertical.js":$R,"./assets/copy.js":VR,"./assets/copy_clipboard.js":qR,"./assets/cross.js":UR,"./assets/crossInACircleFilled.js":GR,"./assets/crosshairs.js":JR,"./assets/currency.js":XR,"./assets/cut.js":KR,"./assets/database.js":YR,"./assets/desktop.js":QR,"./assets/document.js":ZR,"./assets/documentEdit.js":eD,"./assets/documentation.js":tD,"./assets/documents.js":rD,"./assets/dot.js":nD,"./assets/doubleArrowLeft.js":oD,"./assets/doubleArrowRight.js":iD,"./assets/download.js":aD,"./assets/editorDistributeHorizontal.js":sD,"./assets/editorDistributeVertical.js":lD,"./assets/editorItemAlignBottom.js":uD,"./assets/editorItemAlignCenter.js":cD,"./assets/editorItemAlignLeft.js":fD,"./assets/editorItemAlignMiddle.js":pD,"./assets/editorItemAlignRight.js":dD,"./assets/editorItemAlignTop.js":hD,"./assets/editorPositionBottomLeft.js":mD,"./assets/editorPositionBottomRight.js":vD,"./assets/editorPositionTopLeft.js":gD,"./assets/editorPositionTopRight.js":yD,"./assets/editor_align_center.js":bD,"./assets/editor_align_left.js":wD,"./assets/editor_align_right.js":OD,"./assets/editor_bold.js":xD,"./assets/editor_checklist.js":_D,"./assets/editor_code_block.js":SD,"./assets/editor_comment.js":ED,"./assets/editor_heading.js":ID,"./assets/editor_italic.js":kD,"./assets/editor_link.js":PD,"./assets/editor_ordered_list.js":jD,"./assets/editor_redo.js":CD,"./assets/editor_strike.js":TD,"./assets/editor_table.js":AD,"./assets/editor_underline.js":MD,"./assets/editor_undo.js":RD,"./assets/editor_unordered_list.js":DD,"./assets/email.js":zD,"./assets/empty.js":ND,"./assets/eql.js":LD,"./assets/eraser.js":FD,"./assets/exit.js":BD,"./assets/expand.js":WD,"./assets/expandMini.js":HD,"./assets/export.js":$D,"./assets/eye.js":VD,"./assets/eye_closed.js":qD,"./assets/face_happy.js":UD,"./assets/face_neutral.js":GD,"./assets/face_sad.js":JD,"./assets/filter.js":XD,"./assets/flag.js":KD,"./assets/fold.js":YD,"./assets/folder_check.js":QD,"./assets/folder_closed.js":ZD,"./assets/folder_exclamation.js":ez,"./assets/folder_open.js":tz,"./assets/frameNext.js":rz,"./assets/framePrevious.js":nz,"./assets/fullScreenExit.js":oz,"./assets/full_screen.js":iz,"./assets/function.js":az,"./assets/gear.js":sz,"./assets/glasses.js":lz,"./assets/globe.js":uz,"./assets/grab.js":cz,"./assets/grab_horizontal.js":fz,"./assets/grid.js":pz,"./assets/heart.js":dz,"./assets/heatmap.js":hz,"./assets/help.js":mz,"./assets/home.js":vz,"./assets/iInCircle.js":gz,"./assets/image.js":yz,"./assets/import.js":bz,"./assets/index_close.js":wz,"./assets/index_edit.js":Oz,"./assets/index_flush.js":xz,"./assets/index_mapping.js":_z,"./assets/index_open.js":Sz,"./assets/index_runtime.js":Ez,"./assets/index_settings.js":Iz,"./assets/inputOutput.js":kz,"./assets/inspect.js":Pz,"./assets/invert.js":jz,"./assets/ip.js":Cz,"./assets/keyboard.js":Tz,"./assets/kql_field.js":Az,"./assets/kql_function.js":Mz,"./assets/kql_operand.js":Rz,"./assets/kql_selector.js":Dz,"./assets/kql_value.js":zz,"./assets/kubernetesNode.js":Nz,"./assets/kubernetesPod.js":Lz,"./assets/layers.js":Fz,"./assets/lettering.js":Bz,"./assets/lineDashed.js":Wz,"./assets/lineDotted.js":Hz,"./assets/lineSolid.js":$z,"./assets/link.js":Vz,"./assets/list.js":qz,"./assets/list_add.js":Uz,"./assets/lock.js":Gz,"./assets/lockOpen.js":Jz,"./assets/logo_aerospike.js":Xz,"./assets/logo_apache.js":Kz,"./assets/logo_app_search.js":Yz,"./assets/logo_aws.js":Qz,"./assets/logo_aws_mono.js":Zz,"./assets/logo_azure.js":eN,"./assets/logo_azure_mono.js":tN,"./assets/logo_beats.js":rN,"./assets/logo_business_analytics.js":nN,"./assets/logo_ceph.js":oN,"./assets/logo_cloud.js":iN,"./assets/logo_cloud_ece.js":aN,"./assets/logo_code.js":sN,"./assets/logo_codesandbox.js":lN,"./assets/logo_couchbase.js":uN,"./assets/logo_docker.js":cN,"./assets/logo_dropwizard.js":fN,"./assets/logo_elastic.js":pN,"./assets/logo_elastic_stack.js":dN,"./assets/logo_elasticsearch.js":hN,"./assets/logo_enterprise_search.js":mN,"./assets/logo_etcd.js":vN,"./assets/logo_gcp.js":gN,"./assets/logo_gcp_mono.js":yN,"./assets/logo_github.js":bN,"./assets/logo_gmail.js":wN,"./assets/logo_golang.js":ON,"./assets/logo_google_g.js":xN,"./assets/logo_haproxy.js":_N,"./assets/logo_ibm.js":SN,"./assets/logo_ibm_mono.js":EN,"./assets/logo_kafka.js":IN,"./assets/logo_kibana.js":kN,"./assets/logo_kubernetes.js":PN,"./assets/logo_logging.js":jN,"./assets/logo_logstash.js":CN,"./assets/logo_maps.js":TN,"./assets/logo_memcached.js":AN,"./assets/logo_metrics.js":MN,"./assets/logo_mongodb.js":RN,"./assets/logo_mysql.js":DN,"./assets/logo_nginx.js":zN,"./assets/logo_observability.js":NN,"./assets/logo_osquery.js":LN,"./assets/logo_php.js":FN,"./assets/logo_postgres.js":BN,"./assets/logo_prometheus.js":WN,"./assets/logo_rabbitmq.js":HN,"./assets/logo_redis.js":$N,"./assets/logo_security.js":VN,"./assets/logo_site_search.js":qN,"./assets/logo_sketch.js":UN,"./assets/logo_slack.js":GN,"./assets/logo_uptime.js":JN,"./assets/logo_webhook.js":XN,"./assets/logo_windows.js":KN,"./assets/logo_workplace_search.js":YN,"./assets/logstash_filter.js":QN,"./assets/logstash_if.js":ZN,"./assets/logstash_input.js":eL,"./assets/logstash_output.js":tL,"./assets/logstash_queue.js":rL,"./assets/magnet.js":nL,"./assets/magnifyWithExclamation.js":oL,"./assets/magnifyWithMinus.js":iL,"./assets/magnifyWithPlus.js":aL,"./assets/map_marker.js":sL,"./assets/memory.js":lL,"./assets/menu.js":uL,"./assets/menuDown.js":cL,"./assets/menuLeft.js":fL,"./assets/menuRight.js":pL,"./assets/menuUp.js":dL,"./assets/merge.js":hL,"./assets/minimize.js":mL,"./assets/minus.js":vL,"./assets/minus_in_circle.js":gL,"./assets/minus_in_circle_filled.js":yL,"./assets/ml_classification_job.js":bL,"./assets/ml_create_advanced_job.js":wL,"./assets/ml_create_multi_metric_job.js":OL,"./assets/ml_create_population_job.js":xL,"./assets/ml_create_single_metric_job.js":_L,"./assets/ml_data_visualizer.js":SL,"./assets/ml_outlier_detection_job.js":EL,"./assets/ml_regression_job.js":IL,"./assets/mobile.js":kL,"./assets/moon.js":PL,"./assets/namespace.js":jL,"./assets/nested.js":CL,"./assets/node.js":TL,"./assets/number.js":AL,"./assets/offline.js":ML,"./assets/online.js":RL,"./assets/package.js":DL,"./assets/pageSelect.js":zL,"./assets/pagesSelect.js":NL,"./assets/paint.js":LL,"./assets/paper_clip.js":FL,"./assets/partial.js":BL,"./assets/pause.js":WL,"./assets/payment.js":HL,"./assets/pencil.js":$L,"./assets/percent.js":VL,"./assets/pin.js":qL,"./assets/pin_filled.js":UL,"./assets/play.js":GL,"./assets/playFilled.js":JL,"./assets/plus.js":XL,"./assets/plus_in_circle.js":KL,"./assets/plus_in_circle_filled.js":YL,"./assets/popout.js":QL,"./assets/push.js":ZL,"./assets/question_in_circle.js":eF,"./assets/quote.js":tF,"./assets/refresh.js":rF,"./assets/reporter.js":nF,"./assets/return_key.js":oF,"./assets/save.js":iF,"./assets/scale.js":aF,"./assets/search.js":sF,"./assets/securitySignal.js":lF,"./assets/securitySignalDetected.js":uF,"./assets/securitySignalResolved.js":cF,"./assets/sessionViewer.js":fF,"./assets/shard.js":pF,"./assets/share.js":dF,"./assets/snowflake.js":hF,"./assets/sortLeft.js":mF,"./assets/sortRight.js":vF,"./assets/sort_down.js":gF,"./assets/sort_up.js":yF,"./assets/sortable.js":bF,"./assets/starPlusEmpty.js":wF,"./assets/starPlusFilled.js":OF,"./assets/star_empty.js":xF,"./assets/star_empty_space.js":_F,"./assets/star_filled.js":SF,"./assets/star_filled_space.js":EF,"./assets/star_minus_empty.js":IF,"./assets/star_minus_filled.js":kF,"./assets/stats.js":PF,"./assets/stop.js":jF,"./assets/stop_filled.js":CF,"./assets/stop_slash.js":TF,"./assets/storage.js":AF,"./assets/string.js":MF,"./assets/submodule.js":RF,"./assets/sun.js":DF,"./assets/swatch_input.js":zF,"./assets/symlink.js":NF,"./assets/tableOfContents.js":LF,"./assets/table_density_compact.js":FF,"./assets/table_density_expanded.js":BF,"./assets/table_density_normal.js":WF,"./assets/tag.js":HF,"./assets/tear.js":$F,"./assets/temperature.js":VF,"./assets/timeRefresh.js":qF,"./assets/timeline.js":UF,"./assets/timeslider.js":GF,"./assets/tokenAlias.js":JF,"./assets/tokenAnnotation.js":XF,"./assets/tokenArray.js":KF,"./assets/tokenBinary.js":YF,"./assets/tokenBoolean.js":QF,"./assets/tokenClass.js":ZF,"./assets/tokenCompletionSuggester.js":eB,"./assets/tokenConstant.js":tB,"./assets/tokenDate.js":rB,"./assets/tokenDenseVector.js":nB,"./assets/tokenElement.js":oB,"./assets/tokenEnum.js":iB,"./assets/tokenEnumMember.js":aB,"./assets/tokenEvent.js":sB,"./assets/tokenException.js":lB,"./assets/tokenField.js":uB,"./assets/tokenFile.js":cB,"./assets/tokenFlattened.js":fB,"./assets/tokenFunction.js":pB,"./assets/tokenGeo.js":dB,"./assets/tokenHistogram.js":hB,"./assets/tokenIP.js":mB,"./assets/tokenInterface.js":vB,"./assets/tokenJoin.js":gB,"./assets/tokenKey.js":yB,"./assets/tokenKeyword.js":bB,"./assets/tokenMethod.js":wB,"./assets/tokenMetricCounter.js":OB,"./assets/tokenMetricGauge.js":xB,"./assets/tokenModule.js":_B,"./assets/tokenNamespace.js":SB,"./assets/tokenNested.js":EB,"./assets/tokenNull.js":IB,"./assets/tokenNumber.js":kB,"./assets/tokenObject.js":PB,"./assets/tokenOperator.js":jB,"./assets/tokenPackage.js":CB,"./assets/tokenParameter.js":TB,"./assets/tokenPercolator.js":AB,"./assets/tokenProperty.js":MB,"./assets/tokenRange.js":RB,"./assets/tokenRankFeature.js":DB,"./assets/tokenRankFeatures.js":zB,"./assets/tokenRepo.js":NB,"./assets/tokenSearchType.js":LB,"./assets/tokenShape.js":FB,"./assets/tokenString.js":BB,"./assets/tokenStruct.js":WB,"./assets/tokenSymbol.js":HB,"./assets/tokenTag.js":$B,"./assets/tokenText.js":VB,"./assets/tokenTokenCount.js":qB,"./assets/tokenVariable.js":UB,"./assets/training.js":GB,"./assets/trash.js":JB,"./assets/unfold.js":XB,"./assets/unlink.js":KB,"./assets/user.js":YB,"./assets/userAvatar.js":QB,"./assets/users.js":ZB,"./assets/vector.js":eW,"./assets/videoPlayer.js":tW,"./assets/vis_area.js":rW,"./assets/vis_area_stacked.js":nW,"./assets/vis_bar_horizontal.js":oW,"./assets/vis_bar_horizontal_stacked.js":iW,"./assets/vis_bar_vertical.js":aW,"./assets/vis_bar_vertical_stacked.js":sW,"./assets/vis_gauge.js":lW,"./assets/vis_goal.js":uW,"./assets/vis_line.js":cW,"./assets/vis_map_coordinate.js":fW,"./assets/vis_map_region.js":pW,"./assets/vis_metric.js":dW,"./assets/vis_pie.js":hW,"./assets/vis_table.js":mW,"./assets/vis_tag_cloud.js":vW,"./assets/vis_text.js":gW,"./assets/vis_timelion.js":yW,"./assets/vis_vega.js":bW,"./assets/vis_visual_builder.js":wW,"./assets/wordWrap.js":OW,"./assets/wordWrapDisabled.js":xW,"./assets/wrench.js":_W,"./assets/accessibility":nM,"./assets/aggregate":oM,"./assets/alert":iM,"./assets/analyzeEvent":aM,"./assets/analyze_event":sM,"./assets/annotation":lM,"./assets/apm_trace":uM,"./assets/app_add_data":cM,"./assets/app_advanced_settings":fM,"./assets/app_agent":pM,"./assets/app_apm":dM,"./assets/app_app_search":hM,"./assets/app_auditbeat":mM,"./assets/app_canvas":vM,"./assets/app_cases":gM,"./assets/app_code":yM,"./assets/app_console":bM,"./assets/app_cross_cluster_replication":wM,"./assets/app_dashboard":OM,"./assets/app_devtools":xM,"./assets/app_discover":_M,"./assets/app_ems":SM,"./assets/app_filebeat":EM,"./assets/app_fleet":IM,"./assets/app_gis":kM,"./assets/app_graph":PM,"./assets/app_grok":jM,"./assets/app_heartbeat":CM,"./assets/app_index_management":TM,"./assets/app_index_pattern":AM,"./assets/app_index_rollup":MM,"./assets/app_lens":RM,"./assets/app_logs":DM,"./assets/app_management":zM,"./assets/app_metricbeat":NM,"./assets/app_metrics":LM,"./assets/app_ml":FM,"./assets/app_monitoring":BM,"./assets/app_notebook":WM,"./assets/app_packetbeat":HM,"./assets/app_pipeline":$M,"./assets/app_recently_viewed":VM,"./assets/app_reporting":qM,"./assets/app_saved_objects":UM,"./assets/app_search_profiler":GM,"./assets/app_security":JM,"./assets/app_security_analytics":XM,"./assets/app_spaces":KM,"./assets/app_sql":YM,"./assets/app_timelion":QM,"./assets/app_upgrade_assistant":ZM,"./assets/app_uptime":eR,"./assets/app_users_roles":tR,"./assets/app_visualize":rR,"./assets/app_watches":nR,"./assets/app_workplace_search":oR,"./assets/apps":iR,"./assets/arrowEnd":aR,"./assets/arrowStart":sR,"./assets/arrow_down":lR,"./assets/arrow_left":uR,"./assets/arrow_right":cR,"./assets/arrow_up":fR,"./assets/asterisk":pR,"./assets/beaker":dR,"./assets/bell":hR,"./assets/bellSlash":mR,"./assets/bolt":vR,"./assets/boxes_horizontal":gR,"./assets/boxes_vertical":yR,"./assets/branch":bR,"./assets/branchUser":wR,"./assets/broom":OR,"./assets/brush":xR,"./assets/bug":_R,"./assets/bullseye":SR,"./assets/calendar":ER,"./assets/check":IR,"./assets/checkInCircleFilled":kR,"./assets/cheer":PR,"./assets/clock":jR,"./assets/cloudDrizzle":CR,"./assets/cloudStormy":TR,"./assets/cloudSunny":AR,"./assets/cluster":MR,"./assets/color":RR,"./assets/compute":DR,"./assets/console":zR,"./assets/container":NR,"./assets/continuityAbove":LR,"./assets/continuityAboveBelow":FR,"./assets/continuityBelow":BR,"./assets/continuityWithin":WR,"./assets/controls_horizontal":HR,"./assets/controls_vertical":$R,"./assets/copy":VR,"./assets/copy_clipboard":qR,"./assets/cross":UR,"./assets/crossInACircleFilled":GR,"./assets/crosshairs":JR,"./assets/currency":XR,"./assets/cut":KR,"./assets/database":YR,"./assets/desktop":QR,"./assets/document":ZR,"./assets/documentEdit":eD,"./assets/documentation":tD,"./assets/documents":rD,"./assets/dot":nD,"./assets/doubleArrowLeft":oD,"./assets/doubleArrowRight":iD,"./assets/download":aD,"./assets/editorDistributeHorizontal":sD,"./assets/editorDistributeVertical":lD,"./assets/editorItemAlignBottom":uD,"./assets/editorItemAlignCenter":cD,"./assets/editorItemAlignLeft":fD,"./assets/editorItemAlignMiddle":pD,"./assets/editorItemAlignRight":dD,"./assets/editorItemAlignTop":hD,"./assets/editorPositionBottomLeft":mD,"./assets/editorPositionBottomRight":vD,"./assets/editorPositionTopLeft":gD,"./assets/editorPositionTopRight":yD,"./assets/editor_align_center":bD,"./assets/editor_align_left":wD,"./assets/editor_align_right":OD,"./assets/editor_bold":xD,"./assets/editor_checklist":_D,"./assets/editor_code_block":SD,"./assets/editor_comment":ED,"./assets/editor_heading":ID,"./assets/editor_italic":kD,"./assets/editor_link":PD,"./assets/editor_ordered_list":jD,"./assets/editor_redo":CD,"./assets/editor_strike":TD,"./assets/editor_table":AD,"./assets/editor_underline":MD,"./assets/editor_undo":RD,"./assets/editor_unordered_list":DD,"./assets/email":zD,"./assets/empty":ND,"./assets/eql":LD,"./assets/eraser":FD,"./assets/exit":BD,"./assets/expand":WD,"./assets/expandMini":HD,"./assets/export":$D,"./assets/eye":VD,"./assets/eye_closed":qD,"./assets/face_happy":UD,"./assets/face_neutral":GD,"./assets/face_sad":JD,"./assets/filter":XD,"./assets/flag":KD,"./assets/fold":YD,"./assets/folder_check":QD,"./assets/folder_closed":ZD,"./assets/folder_exclamation":ez,"./assets/folder_open":tz,"./assets/frameNext":rz,"./assets/framePrevious":nz,"./assets/fullScreenExit":oz,"./assets/full_screen":iz,"./assets/function":az,"./assets/gear":sz,"./assets/glasses":lz,"./assets/globe":uz,"./assets/grab":cz,"./assets/grab_horizontal":fz,"./assets/grid":pz,"./assets/heart":dz,"./assets/heatmap":hz,"./assets/help":mz,"./assets/home":vz,"./assets/iInCircle":gz,"./assets/image":yz,"./assets/import":bz,"./assets/index_close":wz,"./assets/index_edit":Oz,"./assets/index_flush":xz,"./assets/index_mapping":_z,"./assets/index_open":Sz,"./assets/index_runtime":Ez,"./assets/index_settings":Iz,"./assets/inputOutput":kz,"./assets/inspect":Pz,"./assets/invert":jz,"./assets/ip":Cz,"./assets/keyboard":Tz,"./assets/kql_field":Az,"./assets/kql_function":Mz,"./assets/kql_operand":Rz,"./assets/kql_selector":Dz,"./assets/kql_value":zz,"./assets/kubernetesNode":Nz,"./assets/kubernetesPod":Lz,"./assets/layers":Fz,"./assets/lettering":Bz,"./assets/lineDashed":Wz,"./assets/lineDotted":Hz,"./assets/lineSolid":$z,"./assets/link":Vz,"./assets/list":qz,"./assets/list_add":Uz,"./assets/lock":Gz,"./assets/lockOpen":Jz,"./assets/logo_aerospike":Xz,"./assets/logo_apache":Kz,"./assets/logo_app_search":Yz,"./assets/logo_aws":Qz,"./assets/logo_aws_mono":Zz,"./assets/logo_azure":eN,"./assets/logo_azure_mono":tN,"./assets/logo_beats":rN,"./assets/logo_business_analytics":nN,"./assets/logo_ceph":oN,"./assets/logo_cloud":iN,"./assets/logo_cloud_ece":aN,"./assets/logo_code":sN,"./assets/logo_codesandbox":lN,"./assets/logo_couchbase":uN,"./assets/logo_docker":cN,"./assets/logo_dropwizard":fN,"./assets/logo_elastic":pN,"./assets/logo_elastic_stack":dN,"./assets/logo_elasticsearch":hN,"./assets/logo_enterprise_search":mN,"./assets/logo_etcd":vN,"./assets/logo_gcp":gN,"./assets/logo_gcp_mono":yN,"./assets/logo_github":bN,"./assets/logo_gmail":wN,"./assets/logo_golang":ON,"./assets/logo_google_g":xN,"./assets/logo_haproxy":_N,"./assets/logo_ibm":SN,"./assets/logo_ibm_mono":EN,"./assets/logo_kafka":IN,"./assets/logo_kibana":kN,"./assets/logo_kubernetes":PN,"./assets/logo_logging":jN,"./assets/logo_logstash":CN,"./assets/logo_maps":TN,"./assets/logo_memcached":AN,"./assets/logo_metrics":MN,"./assets/logo_mongodb":RN,"./assets/logo_mysql":DN,"./assets/logo_nginx":zN,"./assets/logo_observability":NN,"./assets/logo_osquery":LN,"./assets/logo_php":FN,"./assets/logo_postgres":BN,"./assets/logo_prometheus":WN,"./assets/logo_rabbitmq":HN,"./assets/logo_redis":$N,"./assets/logo_security":VN,"./assets/logo_site_search":qN,"./assets/logo_sketch":UN,"./assets/logo_slack":GN,"./assets/logo_uptime":JN,"./assets/logo_webhook":XN,"./assets/logo_windows":KN,"./assets/logo_workplace_search":YN,"./assets/logstash_filter":QN,"./assets/logstash_if":ZN,"./assets/logstash_input":eL,"./assets/logstash_output":tL,"./assets/logstash_queue":rL,"./assets/magnet":nL,"./assets/magnifyWithExclamation":oL,"./assets/magnifyWithMinus":iL,"./assets/magnifyWithPlus":aL,"./assets/map_marker":sL,"./assets/memory":lL,"./assets/menu":uL,"./assets/menuDown":cL,"./assets/menuLeft":fL,"./assets/menuRight":pL,"./assets/menuUp":dL,"./assets/merge":hL,"./assets/minimize":mL,"./assets/minus":vL,"./assets/minus_in_circle":gL,"./assets/minus_in_circle_filled":yL,"./assets/ml_classification_job":bL,"./assets/ml_create_advanced_job":wL,"./assets/ml_create_multi_metric_job":OL,"./assets/ml_create_population_job":xL,"./assets/ml_create_single_metric_job":_L,"./assets/ml_data_visualizer":SL,"./assets/ml_outlier_detection_job":EL,"./assets/ml_regression_job":IL,"./assets/mobile":kL,"./assets/moon":PL,"./assets/namespace":jL,"./assets/nested":CL,"./assets/node":TL,"./assets/number":AL,"./assets/offline":ML,"./assets/online":RL,"./assets/package":DL,"./assets/pageSelect":zL,"./assets/pagesSelect":NL,"./assets/paint":LL,"./assets/paper_clip":FL,"./assets/partial":BL,"./assets/pause":WL,"./assets/payment":HL,"./assets/pencil":$L,"./assets/percent":VL,"./assets/pin":qL,"./assets/pin_filled":UL,"./assets/play":GL,"./assets/playFilled":JL,"./assets/plus":XL,"./assets/plus_in_circle":KL,"./assets/plus_in_circle_filled":YL,"./assets/popout":QL,"./assets/push":ZL,"./assets/question_in_circle":eF,"./assets/quote":tF,"./assets/refresh":rF,"./assets/reporter":nF,"./assets/return_key":oF,"./assets/save":iF,"./assets/scale":aF,"./assets/search":sF,"./assets/securitySignal":lF,"./assets/securitySignalDetected":uF,"./assets/securitySignalResolved":cF,"./assets/sessionViewer":fF,"./assets/shard":pF,"./assets/share":dF,"./assets/snowflake":hF,"./assets/sortLeft":mF,"./assets/sortRight":vF,"./assets/sort_down":gF,"./assets/sort_up":yF,"./assets/sortable":bF,"./assets/starPlusEmpty":wF,"./assets/starPlusFilled":OF,"./assets/star_empty":xF,"./assets/star_empty_space":_F,"./assets/star_filled":SF,"./assets/star_filled_space":EF,"./assets/star_minus_empty":IF,"./assets/star_minus_filled":kF,"./assets/stats":PF,"./assets/stop":jF,"./assets/stop_filled":CF,"./assets/stop_slash":TF,"./assets/storage":AF,"./assets/string":MF,"./assets/submodule":RF,"./assets/sun":DF,"./assets/swatch_input":zF,"./assets/symlink":NF,"./assets/tableOfContents":LF,"./assets/table_density_compact":FF,"./assets/table_density_expanded":BF,"./assets/table_density_normal":WF,"./assets/tag":HF,"./assets/tear":$F,"./assets/temperature":VF,"./assets/timeRefresh":qF,"./assets/timeline":UF,"./assets/timeslider":GF,"./assets/tokenAlias":JF,"./assets/tokenAnnotation":XF,"./assets/tokenArray":KF,"./assets/tokenBinary":YF,"./assets/tokenBoolean":QF,"./assets/tokenClass":ZF,"./assets/tokenCompletionSuggester":eB,"./assets/tokenConstant":tB,"./assets/tokenDate":rB,"./assets/tokenDenseVector":nB,"./assets/tokenElement":oB,"./assets/tokenEnum":iB,"./assets/tokenEnumMember":aB,"./assets/tokenEvent":sB,"./assets/tokenException":lB,"./assets/tokenField":uB,"./assets/tokenFile":cB,"./assets/tokenFlattened":fB,"./assets/tokenFunction":pB,"./assets/tokenGeo":dB,"./assets/tokenHistogram":hB,"./assets/tokenIP":mB,"./assets/tokenInterface":vB,"./assets/tokenJoin":gB,"./assets/tokenKey":yB,"./assets/tokenKeyword":bB,"./assets/tokenMethod":wB,"./assets/tokenMetricCounter":OB,"./assets/tokenMetricGauge":xB,"./assets/tokenModule":_B,"./assets/tokenNamespace":SB,"./assets/tokenNested":EB,"./assets/tokenNull":IB,"./assets/tokenNumber":kB,"./assets/tokenObject":PB,"./assets/tokenOperator":jB,"./assets/tokenPackage":CB,"./assets/tokenParameter":TB,"./assets/tokenPercolator":AB,"./assets/tokenProperty":MB,"./assets/tokenRange":RB,"./assets/tokenRankFeature":DB,"./assets/tokenRankFeatures":zB,"./assets/tokenRepo":NB,"./assets/tokenSearchType":LB,"./assets/tokenShape":FB,"./assets/tokenString":BB,"./assets/tokenStruct":WB,"./assets/tokenSymbol":HB,"./assets/tokenTag":$B,"./assets/tokenText":VB,"./assets/tokenTokenCount":qB,"./assets/tokenVariable":UB,"./assets/training":GB,"./assets/trash":JB,"./assets/unfold":XB,"./assets/unlink":KB,"./assets/user":YB,"./assets/userAvatar":QB,"./assets/users":ZB,"./assets/vector":eW,"./assets/videoPlayer":tW,"./assets/vis_area":rW,"./assets/vis_area_stacked":nW,"./assets/vis_bar_horizontal":oW,"./assets/vis_bar_horizontal_stacked":iW,"./assets/vis_bar_vertical":aW,"./assets/vis_bar_vertical_stacked":sW,"./assets/vis_gauge":lW,"./assets/vis_goal":uW,"./assets/vis_line":cW,"./assets/vis_map_coordinate":fW,"./assets/vis_map_region":pW,"./assets/vis_metric":dW,"./assets/vis_pie":hW,"./assets/vis_table":mW,"./assets/vis_tag_cloud":vW,"./assets/vis_text":gW,"./assets/vis_timelion":yW,"./assets/vis_vega":bW,"./assets/vis_visual_builder":wW,"./assets/wordWrap":OW,"./assets/wordWrapDisabled":xW,"./assets/wrench":_W};function hjt(e){let t=djt[e];return t[Symbol.toStringTag]="Module",Promise.resolve(t)}function EU(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?EU=function(n){return typeof n}:EU=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},EU(e)}var mjt=["type","size","color","className","tabIndex","title","onIconLoad","theme","style"];function PU(){return PU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function bjt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function F6e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function jU(e){return jU=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},jU(e)}function kU(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ejt=function(t){return typeof t!="string"?!1:t==="dataVisualizer"?!0:t.indexOf("data:")===0?!1:t.endsWith("App")||t.endsWith("Job")},Ijt=Yr(SU);function vce(e){return typeof e=="string"&&SU.hasOwnProperty(e)}function kjt(e){if(e!=null)return vce(e)?Gj.hasOwnProperty(e)?Gj[e]:void 0:e}var Pjt=yo(),Gj={};var H6e=function(e){Ojt(n,e);var t=xjt(n);function n(r){var o;bjt(this,n),o=t.call(this,r),kU(IU(o),"isMounted",!0),kU(IU(o),"loadIconComponent",function(y){if(Gj.hasOwnProperty(y)){o.setState({isLoading:!1,neededLoading:!1,icon:Gj[y]}),o.onIconLoad();return}hjt(`./assets/${SU[y]}`).then(function(_){var k=_.icon;Gj[y]=k,EW(function(){o.isMounted&&o.props.type===y&&o.setState({icon:k,iconTitle:y,isLoading:!1},o.onIconLoad)})})}),kU(IU(o),"onIconLoad",function(){var y=o.props.onIconLoad;y&&y()});var i=r.type,d=kjt(i);return o.state={icon:d,iconTitle:void 0,isLoading:!1,neededLoading:!1},o}return wjt(n,[{key:"componentDidMount",value:function(){var o=this.props.type;vce(o)&&this.state.icon==null?(this.setState({neededLoading:!0,isLoading:!0}),this.loadIconComponent(o)):this.onIconLoad()}},{key:"componentDidUpdate",value:function(o){var i=this.props.type;i!==o.type&&(vce(i)?(this.setState({neededLoading:Gj.hasOwnProperty(i),isLoading:!0}),this.loadIconComponent(i)):this.setState({icon:i,neededLoading:!0,isLoading:!1}))}},{key:"componentWillUnmount",value:function(){this.isMounted=!1}},{key:"render",value:function(){var o=this.props,i=o.type,d=o.size,y=d===void 0?"m":d,_=o.color,k=o.className,T=o.tabIndex,N=o.title,L=o.onIconLoad,Y=o.theme,q=o.style,K=gjt(o,mjt),U=this.state,X=U.isLoading,Z=U.neededLoading,fe=U.iconTitle,me=!X&&Z,ye=_&&!hce(_),ge=ye?vjt({color:_},q):q,ae=Ejt(i),Pe=_&&_!=="default",Ne=i==="logoElastic"&&(_==="ghost"||_==="text"),Ye=(0,W6e.default)("euiIcon",k),Je=N6e(Y),Me=[Je.euiIcon,Je[y],_&&hce(_)&&Je[_],ye&&Je.customColor,Ne&&Je.logoElasticOutline,ae&&!Pe&&Je.app,X&&Je.isLoading,!X&&Z&&Je.isLoaded],Ve=this.state.icon||_U,Ue=T==null||T===-1?"false":"true";if(typeof Ve=="string")return c("img",PU({alt:N||"",src:Ve,className:Ye,css:Me,tabIndex:T},K));var ht=Ve,yt=Ve===_U||!(this.props["aria-label"]||this.props["aria-labelledby"]||this.props.title),Mt=yt&&{"aria-hidden":!0},wt;return!this.props["aria-label"]&&!this.props["aria-labelledby"]&&N&&(wt={titleId:Pjt()}),c(ht,PU({className:Ye,style:ge,css:Me,tabIndex:T,focusable:Ue,role:"img",title:N,"data-icon-type":fe,"data-is-loaded":me||void 0,"data-is-loading":X||void 0},wt,K,Mt))}}]),n}(B6e.PureComponent);H6e.propTypes={className:Yp.default.string,"aria-label":Yp.default.string,"data-test-subj":Yp.default.string,type:Yp.default.oneOfType([Yp.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Yp.default.string.isRequired,Yp.default.elementType.isRequired]).isRequired,color:Yp.default.oneOfType([Yp.default.string.isRequired,Yp.default.any.isRequired]),size:Yp.default.any,title:Yp.default.string,titleId:Yp.default.string,"aria-labelledby":Yp.default.string,onIconLoad:Yp.default.func};var sn=ete(H6e);var Jj=V(ne());var $6e=V(ne()),$_=V(er());var CU=(0,$6e.createContext)({}),jjt=CU.Provider,gce=CU.Consumer,V6e=function(t){var n=t.i18n,r=n===void 0?{}:n,o=t.children;return c(jjt,{value:r},o)};V6e.propTypes={i18n:$_.default.shape({mapping:$_.default.shape({}),mappingFunc:$_.default.func,render:$_.default.func,formatNumber:$_.default.func,formatDateTime:$_.default.func,locale:$_.default.string}).isRequired,children:$_.default.node.isRequired};var exe=V(ne());var txe=V(Q6e());function MU(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?MU=function(n){return typeof n}:MU=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},MU(e)}function Bjt(e){return sU(e)||fh(e)||lU(e)||jte(e)}function Z6e(e){return e?MU(e)==="object"&&e.hasOwnProperty("propName"):!1}function rxe(e,t,n){var r=[],o;function i(q){o===void 0?o=q:typeof o=="string"?o=o+q:Z6e(o)&&(o.propName=o.propName+q)}function d(q){q!==void 0&&((0,txe.isElement)(q)?r.push((0,exe.cloneElement)(q,{key:r.length})):Z6e(q)||(n!==void 0&&typeof q=="string"&&(q=n(q)),r.push(q)))}for(var y=!1,_=0;_=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yjt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function bjt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function F6e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function jU(e){return jU=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},jU(e)}function kU(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ejt=function(t){return typeof t!="string"?!1:t==="dataVisualizer"?!0:t.indexOf("data:")===0?!1:t.endsWith("App")||t.endsWith("Job")},Ijt=Yr(SU);function vce(e){return typeof e=="string"&&SU.hasOwnProperty(e)}function kjt(e){if(e!=null)return vce(e)?Gj.hasOwnProperty(e)?Gj[e]:void 0:e}var Pjt=yo(),Gj={};var H6e=function(e){Ojt(n,e);var t=xjt(n);function n(r){var o;bjt(this,n),o=t.call(this,r),kU(IU(o),"isMounted",!0),kU(IU(o),"loadIconComponent",function(y){if(Gj.hasOwnProperty(y)){o.setState({isLoading:!1,neededLoading:!1,icon:Gj[y]}),o.onIconLoad();return}hjt(`./assets/${SU[y]}`).then(function(_){var k=_.icon;Gj[y]=k,EW(function(){o.isMounted&&o.props.type===y&&o.setState({icon:k,iconTitle:y,isLoading:!1},o.onIconLoad)})})}),kU(IU(o),"onIconLoad",function(){var y=o.props.onIconLoad;y&&y()});var i=r.type,d=kjt(i);return o.state={icon:d,iconTitle:void 0,isLoading:!1,neededLoading:!1},o}return wjt(n,[{key:"componentDidMount",value:function(){var o=this.props.type;vce(o)&&this.state.icon==null?(this.setState({neededLoading:!0,isLoading:!0}),this.loadIconComponent(o)):this.onIconLoad()}},{key:"componentDidUpdate",value:function(o){var i=this.props.type;i!==o.type&&(vce(i)?(this.setState({neededLoading:Gj.hasOwnProperty(i),isLoading:!0}),this.loadIconComponent(i)):this.setState({icon:i,neededLoading:!0,isLoading:!1}))}},{key:"componentWillUnmount",value:function(){this.isMounted=!1}},{key:"render",value:function(){var o=this.props,i=o.type,d=o.size,y=d===void 0?"m":d,_=o.color,k=o.className,T=o.tabIndex,N=o.title,L=o.onIconLoad,Y=o.theme,q=o.style,K=gjt(o,mjt),U=this.state,X=U.isLoading,Z=U.neededLoading,fe=U.iconTitle,me=!X&&Z,ye=_&&!hce(_),ge=ye?vjt({color:_},q):q,ae=Ejt(i),Pe=_&&_!=="default",Ne=i==="logoElastic"&&(_==="ghost"||_==="text"),Ye=(0,W6e.default)("euiIcon",k),Je=N6e(Y),Me=[Je.euiIcon,Je[y],_&&hce(_)&&Je[_],ye&&Je.customColor,Ne&&Je.logoElasticOutline,ae&&!Pe&&Je.app,X&&Je.isLoading,!X&&Z&&Je.isLoaded],Ve=this.state.icon||_U,Ue=T==null||T===-1?"false":"true";if(typeof Ve=="string")return c("img",PU({alt:N||"",src:Ve,className:Ye,css:Me,tabIndex:T},K));var ht=Ve,yt=Ve===_U||!(this.props["aria-label"]||this.props["aria-labelledby"]||this.props.title),Rt=yt&&{"aria-hidden":!0},wt;return!this.props["aria-label"]&&!this.props["aria-labelledby"]&&N&&(wt={titleId:Pjt()}),c(ht,PU({className:Ye,style:ge,css:Me,tabIndex:T,focusable:Ue,role:"img",title:N,"data-icon-type":fe,"data-is-loaded":me||void 0,"data-is-loading":X||void 0},wt,K,Rt))}}]),n}(B6e.PureComponent);H6e.propTypes={className:Yp.default.string,"aria-label":Yp.default.string,"data-test-subj":Yp.default.string,type:Yp.default.oneOfType([Yp.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Yp.default.string.isRequired,Yp.default.elementType.isRequired]).isRequired,color:Yp.default.oneOfType([Yp.default.string.isRequired,Yp.default.any.isRequired]),size:Yp.default.any,title:Yp.default.string,titleId:Yp.default.string,"aria-labelledby":Yp.default.string,onIconLoad:Yp.default.func};var sn=ete(H6e);var Jj=V(ne());var $6e=V(ne()),$_=V(er());var CU=(0,$6e.createContext)({}),jjt=CU.Provider,gce=CU.Consumer,V6e=function(t){var n=t.i18n,r=n===void 0?{}:n,o=t.children;return c(jjt,{value:r},o)};V6e.propTypes={i18n:$_.default.shape({mapping:$_.default.shape({}),mappingFunc:$_.default.func,render:$_.default.func,formatNumber:$_.default.func,formatDateTime:$_.default.func,locale:$_.default.string}).isRequired,children:$_.default.node.isRequired};var exe=V(ne());var txe=V(Q6e());function MU(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?MU=function(n){return typeof n}:MU=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},MU(e)}function Bjt(e){return sU(e)||fh(e)||lU(e)||jte(e)}function Z6e(e){return e?MU(e)==="object"&&e.hasOwnProperty("propName"):!1}function rxe(e,t,n){var r=[],o;function i(q){o===void 0?o=q:typeof o=="string"?o=o+q:Z6e(o)&&(o.propName=o.propName+q)}function d(q){q!==void 0&&((0,txe.isElement)(q)?r.push((0,exe.cloneElement)(q,{key:r.length})):Z6e(q)||(n!==void 0&&typeof q=="string"&&(q=n(q)),r.push(q)))}for(var y=!1,_=0;_e.length)&&(t=e.length);for(var n=0,r=new Array(t);n:last-child{",hr("margin-bottom","0 !important"),";}kbd{position:relative;display:inline-block;",hr("padding-vertical",n.size.xxs)," ",hr("padding-horizontal",n.size.xs)," line-height:1;border:",n.border.width.thin," solid ",n.colors.text,";border-radius:calc(",n.border.radius.small," / 2);};label:euiText;"),constrainedWidth:nt(hr("max-width",NCt),";;label:constrainedWidth;"),m:nt(GU(t,{measurement:"rem",customScale:"m"}),";;label:m;"),s:nt(GU(t,{measurement:"rem",customScale:"s"}),";;label:s;"),xs:nt(GU(t,{measurement:"rem",customScale:"xs"}),";;label:xs;"),relative:nt(GU(t,{measurement:"em"}),";;label:relative;")}};var Dxe=V(ne()),q_=V(er());var FCt={name:"uacjc5-inherit",styles:"color:inherit;label:inherit;"},Mxe=function(t){var n=t.euiTheme;return{euiTextColor:nt(";label:euiTextColor;"),default:nt("color:",n.colors.text,";;label:default;"),subdued:nt("color:",n.colors.subduedText,";;label:subdued;"),success:nt("color:",n.colors.successText,";;label:success;"),accent:nt("color:",n.colors.accentText,";;label:accent;"),danger:nt("color:",n.colors.dangerText,";;label:danger;"),warning:nt("color:",n.colors.warningText,";;label:warning;"),ghost:nt("color:",n.colors.ghost,"!important;;label:ghost;"),inherit:FCt,customColor:nt(";label:customColor;")}};var BCt=["children","color","component","cloneElement","style"];function Rxe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function bk(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $Ct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VCt=["default","subdued","success","accent","danger","warning","ghost","inherit"],jce=function(t){var n=t.children,r=t.color,o=r===void 0?"default":r,i=t.component,d=i===void 0?"span":i,y=t.cloneElement,_=y===void 0?!1:y,k=t.style,T=HCt(t,BCt),N=VCt.includes(o),L=Jn(),Y=Mxe(L),q=[Y.euiTextColor,N?Y[o]:Y.customColor],K=bk(N?{}:{color:o},k),U=bk({css:q,style:K},T);if((0,Dxe.isValidElement)(n)&&_){var X=bk(bk({},n.props.style),K);return bE(n,bk(bk({},U),{},{style:X}))}else{var Z=d;return c(Z,U,n)}};jce.propTypes={className:q_.default.string,"aria-label":q_.default.string,"data-test-subj":q_.default.string,color:q_.default.oneOfType([q_.default.any.isRequired,q_.default.any.isRequired]),component:q_.default.oneOf(["div","span"]),cloneElement:q_.default.bool};var Lxe=V(ne()),Kj=V(er());var zxe=function(){return{euiTextAlign:nt(";label:euiTextAlign;"),left:nt(uv("left"),";;label:left;"),right:nt(uv("right"),";;label:right;"),center:nt(uv("center"),";;label:center;")}};var qCt=["children","textAlign","cloneElement"];function Nxe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function UCt(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XCt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cce=function(t){var n=t.children,r=t.textAlign,o=r===void 0?"left":r,i=t.cloneElement,d=i===void 0?!1:i,y=JCt(t,qCt),_=zxe(),k=[_.euiTextAlign,_[o]],T=UCt({css:k},y);return(0,Lxe.isValidElement)(n)&&d?bE(n,T):c("div",T,n)};Cce.propTypes={className:Kj.default.string,"aria-label":Kj.default.string,"data-test-subj":Kj.default.string,textAlign:Kj.default.any,cloneElement:Kj.default.bool};var KCt=["size","color","grow","textAlign","children","className"];function Tce(){return Tce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QCt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wr=function(t){var n=t.size,r=n===void 0?"m":n,o=t.color,i=t.grow,d=i===void 0?!0:i,y=t.textAlign,_=t.children,k=t.className,T=YCt(t,KCt),N=Jn(),L=Axe(N),Y=[L.euiText,d?void 0:L.constrainedWidth,L[r]],q=(0,Fxe.default)("euiText",k),K=c("div",Tce({css:Y,className:q},T),_);return o&&(K=c(jce,{color:o,className:q,cloneElement:!0},K)),y&&(K=c(Cce,{textAlign:y,className:q,cloneElement:!0},K)),K};Wr.propTypes={className:m4.default.string,"aria-label":m4.default.string,"data-test-subj":m4.default.string,textAlign:m4.default.any,size:m4.default.any,color:m4.default.oneOfType([m4.default.any.isRequired,m4.default.any.isRequired]),grow:m4.default.bool};var D6r=V(ne()),Bi=V(er()),JU=V(Ar());var ZCt=["children","className","iconType","iconSide","iconSize","color","size","flush","isDisabled","disabled","isLoading","href","target","rel","type","buttonRef","contentProps","textProps","isSelected"];function HW(){return HW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rTt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hxe={primary:"euiButtonEmpty--primary",danger:"euiButtonEmpty--danger",text:"euiButtonEmpty--text",ghost:"euiButtonEmpty--ghost",success:"euiButtonEmpty--success",warning:"euiButtonEmpty--warning"},nTt=Yr(Hxe),$xe={xs:"euiButtonEmpty--xSmall",s:"euiButtonEmpty--small",m:null},H6r=Yr($xe),Vxe={left:"euiButtonEmpty--flushLeft",right:"euiButtonEmpty--flushRight",both:"euiButtonEmpty--flushBoth"},$6r=Yr(Vxe),Ff=function(t){var n=t.children,r=t.className,o=t.iconType,i=t.iconSide,d=i===void 0?"left":i,y=t.iconSize,_=y===void 0?"m":y,k=t.color,T=k===void 0?"primary":k,N=t.size,L=N===void 0?"m":N,Y=t.flush,q=t.isDisabled,K=t.disabled,U=t.isLoading,X=t.href,Z=t.target,fe=t.rel,me=t.type,ye=me===void 0?"button":me,ge=t.buttonRef,ae=t.contentProps,Pe=t.textProps,Ne=t.isSelected,Ye=tTt(t,ZCt),Je=!X||Qp(X),Me=K||!Je,Ve=q||!Je,Ue=U||Ve||Me,ht=(0,JU.default)("euiButtonEmpty",Hxe[T],L?$xe[L]:null,Y?Vxe[Y]:null,{"euiButtonEmpty-isDisabled":Ue},r),yt=(0,JU.default)("euiButtonEmpty__content",ae&&ae.className),Mt=(0,JU.default)("euiButtonEmpty__text",Pe&&Pe.className),wt=c(LW,HW({isLoading:U,iconType:o,iconSide:d,iconSize:L==="xs"?"s":_,textProps:Wxe(Wxe({},Pe),{},{className:Mt})},ae,{className:yt}),n);if(X&&!Ue){var _t=vu({href:X,target:Z,rel:fe});return c("a",HW({className:ht,href:X,target:Z,rel:_t,ref:ge},Ye),wt)}return c("button",HW({disabled:Ue,className:ht,type:ye,ref:ge,"aria-pressed":Ne},Ye),wt)};Ff.propTypes={href:Bi.default.string,onClick:Bi.default.func,color:Bi.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Bi.default.oneOf(["xs","s","m"]),flush:Bi.default.oneOf(["left","right","both"]),isDisabled:Bi.default.bool,isLoading:Bi.default.bool,isSelected:Bi.default.bool,target:Bi.default.string,rel:Bi.default.string,type:Bi.default.oneOf(["button","submit"]),buttonRef:Bi.default.any,contentProps:Bi.default.any,iconType:Bi.default.oneOfType([Bi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Bi.default.string.isRequired,Bi.default.elementType.isRequired]),iconSide:Bi.default.oneOf(["left","right"]),textProps:Bi.default.shape({className:Bi.default.string,"aria-label":Bi.default.string,"data-test-subj":Bi.default.string,ref:Bi.default.any,"data-text":Bi.default.string}),iconSize:Bi.default.oneOf(["s","m"]),className:Bi.default.string,"aria-label":Bi.default.string,"data-test-subj":Bi.default.string};var G6r=V(ne()),fl=V(er()),qxe=V(Ar());var oTt=["className","iconType","iconSize","color","isDisabled","disabled","href","type","display","target","rel","size","buttonRef","isSelected","isLoading"];function XU(){return XU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aTt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uxe={base:null,empty:"euiButtonIcon--empty",fill:"euiButtonIcon--fill"},txr=Yr(Uxe),Gxe={accent:"euiButtonIcon--accent",danger:"euiButtonIcon--danger",ghost:"euiButtonIcon--ghost",primary:"euiButtonIcon--primary",success:"euiButtonIcon--success",text:"euiButtonIcon--text",warning:"euiButtonIcon--warning"},rxr=Yr(Gxe),Jxe={xs:"euiButtonIcon--xSmall",s:"euiButtonIcon--small",m:"euiButtonIcon--medium"},nxr=Yr(Jxe),K0=function(t){var n=t.className,r=t.iconType,o=t.iconSize,i=o===void 0?"m":o,d=t.color,y=d===void 0?"primary":d,_=t.isDisabled,k=t.disabled,T=t.href,N=t.type,L=N===void 0?"button":N,Y=t.display,q=Y===void 0?"empty":Y,K=t.target,U=t.rel,X=t.size,Z=X===void 0?"xs":X,fe=t.buttonRef,me=t.isSelected,ye=t.isLoading,ge=iTt(t,oTt),ae=!T||Qp(T),Pe=_||k||!ae||ye,Ne=ge["aria-hidden"],Ye=Ne==="true"||Ne===!0;!ge["aria-label"]&&!ge["aria-labelledby"]&&!Ye&&console.warn(`EuiButtonIcon requires aria-label or aria-labelledby to be specified because icon-only + `)},Axe=function(t){var n=t.euiTheme;return{euiText:nt(LCt(n,!0),";clear:both;a:not([class]){",Pce(n),";}img{display:block;",hr("max-width","100%"),";}ul{list-style:disc;}ol{list-style:decimal;}blockquote:not(.euiMarkdownFormat__blockquote){position:relative;",uv("center")," ",hr("margin-horizontal","auto")," font-family:",n.font.familySerif,";font-style:italic;letter-spacing:normal;p:last-child{",hr("margin-bottom","0"),";}&:before,&:after{position:absolute;content:'';",hr("height",n.border.width.thick)," ",hr("width","50%")," ",hr("left","25%")," ",hr("right","25%")," background:",n.colors.darkShade,";}&:before{",hr("top","0"),";}&:after{",hr("bottom","0"),";}}h1{",sc(t,"l"),";}h2{",sc(t,"m"),";}h3{",sc(t,"s"),";}h4,dt{",sc(t,"xs"),";}h5{",sc(t,"xxs"),";}h6{",sc(t,"xxxs")," text-transform:uppercase;}h1,h2,h3,h4,h5,h6,dt{color:inherit;}pre:not(.euiCodeBlock__pre){white-space:pre-wrap;background:",IW(t,"subdued"),";color:",n.colors.text,";}pre:not(.euiCodeBlock__pre),pre:not(.euiCodeBlock__pre) code{display:block;}>:last-child{",hr("margin-bottom","0 !important"),";}kbd{position:relative;display:inline-block;",hr("padding-vertical",n.size.xxs)," ",hr("padding-horizontal",n.size.xs)," line-height:1;border:",n.border.width.thin," solid ",n.colors.text,";border-radius:calc(",n.border.radius.small," / 2);};label:euiText;"),constrainedWidth:nt(hr("max-width",NCt),";;label:constrainedWidth;"),m:nt(GU(t,{measurement:"rem",customScale:"m"}),";;label:m;"),s:nt(GU(t,{measurement:"rem",customScale:"s"}),";;label:s;"),xs:nt(GU(t,{measurement:"rem",customScale:"xs"}),";;label:xs;"),relative:nt(GU(t,{measurement:"em"}),";;label:relative;")}};var Dxe=V(ne()),q_=V(er());var FCt={name:"uacjc5-inherit",styles:"color:inherit;label:inherit;"},Mxe=function(t){var n=t.euiTheme;return{euiTextColor:nt(";label:euiTextColor;"),default:nt("color:",n.colors.text,";;label:default;"),subdued:nt("color:",n.colors.subduedText,";;label:subdued;"),success:nt("color:",n.colors.successText,";;label:success;"),accent:nt("color:",n.colors.accentText,";;label:accent;"),danger:nt("color:",n.colors.dangerText,";;label:danger;"),warning:nt("color:",n.colors.warningText,";;label:warning;"),ghost:nt("color:",n.colors.ghost,"!important;;label:ghost;"),inherit:FCt,customColor:nt(";label:customColor;")}};var BCt=["children","color","component","cloneElement","style"];function Rxe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function bk(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $Ct(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var VCt=["default","subdued","success","accent","danger","warning","ghost","inherit"],jce=function(t){var n=t.children,r=t.color,o=r===void 0?"default":r,i=t.component,d=i===void 0?"span":i,y=t.cloneElement,_=y===void 0?!1:y,k=t.style,T=HCt(t,BCt),N=VCt.includes(o),L=Jn(),Y=Mxe(L),q=[Y.euiTextColor,N?Y[o]:Y.customColor],K=bk(N?{}:{color:o},k),U=bk({css:q,style:K},T);if((0,Dxe.isValidElement)(n)&&_){var X=bk(bk({},n.props.style),K);return bE(n,bk(bk({},U),{},{style:X}))}else{var Z=d;return c(Z,U,n)}};jce.propTypes={className:q_.default.string,"aria-label":q_.default.string,"data-test-subj":q_.default.string,color:q_.default.oneOfType([q_.default.any.isRequired,q_.default.any.isRequired]),component:q_.default.oneOf(["div","span"]),cloneElement:q_.default.bool};var Lxe=V(ne()),Kj=V(er());var zxe=function(){return{euiTextAlign:nt(";label:euiTextAlign;"),left:nt(uv("left"),";;label:left;"),right:nt(uv("right"),";;label:right;"),center:nt(uv("center"),";;label:center;")}};var qCt=["children","textAlign","cloneElement"];function Nxe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function UCt(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XCt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Cce=function(t){var n=t.children,r=t.textAlign,o=r===void 0?"left":r,i=t.cloneElement,d=i===void 0?!1:i,y=JCt(t,qCt),_=zxe(),k=[_.euiTextAlign,_[o]],T=UCt({css:k},y);return(0,Lxe.isValidElement)(n)&&d?bE(n,T):c("div",T,n)};Cce.propTypes={className:Kj.default.string,"aria-label":Kj.default.string,"data-test-subj":Kj.default.string,textAlign:Kj.default.any,cloneElement:Kj.default.bool};var KCt=["size","color","grow","textAlign","children","className"];function Tce(){return Tce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QCt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Wr=function(t){var n=t.size,r=n===void 0?"m":n,o=t.color,i=t.grow,d=i===void 0?!0:i,y=t.textAlign,_=t.children,k=t.className,T=YCt(t,KCt),N=Jn(),L=Axe(N),Y=[L.euiText,d?void 0:L.constrainedWidth,L[r]],q=(0,Fxe.default)("euiText",k),K=c("div",Tce({css:Y,className:q},T),_);return o&&(K=c(jce,{color:o,className:q,cloneElement:!0},K)),y&&(K=c(Cce,{textAlign:y,className:q,cloneElement:!0},K)),K};Wr.propTypes={className:m4.default.string,"aria-label":m4.default.string,"data-test-subj":m4.default.string,textAlign:m4.default.any,size:m4.default.any,color:m4.default.oneOfType([m4.default.any.isRequired,m4.default.any.isRequired]),grow:m4.default.bool};var D6r=V(ne()),Bi=V(er()),JU=V(Ar());var ZCt=["children","className","iconType","iconSide","iconSize","color","size","flush","isDisabled","disabled","isLoading","href","target","rel","type","buttonRef","contentProps","textProps","isSelected"];function HW(){return HW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rTt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hxe={primary:"euiButtonEmpty--primary",danger:"euiButtonEmpty--danger",text:"euiButtonEmpty--text",ghost:"euiButtonEmpty--ghost",success:"euiButtonEmpty--success",warning:"euiButtonEmpty--warning"},nTt=Yr(Hxe),$xe={xs:"euiButtonEmpty--xSmall",s:"euiButtonEmpty--small",m:null},H6r=Yr($xe),Vxe={left:"euiButtonEmpty--flushLeft",right:"euiButtonEmpty--flushRight",both:"euiButtonEmpty--flushBoth"},$6r=Yr(Vxe),Ff=function(t){var n=t.children,r=t.className,o=t.iconType,i=t.iconSide,d=i===void 0?"left":i,y=t.iconSize,_=y===void 0?"m":y,k=t.color,T=k===void 0?"primary":k,N=t.size,L=N===void 0?"m":N,Y=t.flush,q=t.isDisabled,K=t.disabled,U=t.isLoading,X=t.href,Z=t.target,fe=t.rel,me=t.type,ye=me===void 0?"button":me,ge=t.buttonRef,ae=t.contentProps,Pe=t.textProps,Ne=t.isSelected,Ye=tTt(t,ZCt),Je=!X||Qp(X),Me=K||!Je,Ve=q||!Je,Ue=U||Ve||Me,ht=(0,JU.default)("euiButtonEmpty",Hxe[T],L?$xe[L]:null,Y?Vxe[Y]:null,{"euiButtonEmpty-isDisabled":Ue},r),yt=(0,JU.default)("euiButtonEmpty__content",ae&&ae.className),Rt=(0,JU.default)("euiButtonEmpty__text",Pe&&Pe.className),wt=c(LW,HW({isLoading:U,iconType:o,iconSide:d,iconSize:L==="xs"?"s":_,textProps:Wxe(Wxe({},Pe),{},{className:Rt})},ae,{className:yt}),n);if(X&&!Ue){var _t=vu({href:X,target:Z,rel:fe});return c("a",HW({className:ht,href:X,target:Z,rel:_t,ref:ge},Ye),wt)}return c("button",HW({disabled:Ue,className:ht,type:ye,ref:ge,"aria-pressed":Ne},Ye),wt)};Ff.propTypes={href:Bi.default.string,onClick:Bi.default.func,color:Bi.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Bi.default.oneOf(["xs","s","m"]),flush:Bi.default.oneOf(["left","right","both"]),isDisabled:Bi.default.bool,isLoading:Bi.default.bool,isSelected:Bi.default.bool,target:Bi.default.string,rel:Bi.default.string,type:Bi.default.oneOf(["button","submit"]),buttonRef:Bi.default.any,contentProps:Bi.default.any,iconType:Bi.default.oneOfType([Bi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Bi.default.string.isRequired,Bi.default.elementType.isRequired]),iconSide:Bi.default.oneOf(["left","right"]),textProps:Bi.default.shape({className:Bi.default.string,"aria-label":Bi.default.string,"data-test-subj":Bi.default.string,ref:Bi.default.any,"data-text":Bi.default.string}),iconSize:Bi.default.oneOf(["s","m"]),className:Bi.default.string,"aria-label":Bi.default.string,"data-test-subj":Bi.default.string};var G6r=V(ne()),fl=V(er()),qxe=V(Ar());var oTt=["className","iconType","iconSize","color","isDisabled","disabled","href","type","display","target","rel","size","buttonRef","isSelected","isLoading"];function XU(){return XU=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aTt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Uxe={base:null,empty:"euiButtonIcon--empty",fill:"euiButtonIcon--fill"},txr=Yr(Uxe),Gxe={accent:"euiButtonIcon--accent",danger:"euiButtonIcon--danger",ghost:"euiButtonIcon--ghost",primary:"euiButtonIcon--primary",success:"euiButtonIcon--success",text:"euiButtonIcon--text",warning:"euiButtonIcon--warning"},rxr=Yr(Gxe),Jxe={xs:"euiButtonIcon--xSmall",s:"euiButtonIcon--small",m:"euiButtonIcon--medium"},nxr=Yr(Jxe),K0=function(t){var n=t.className,r=t.iconType,o=t.iconSize,i=o===void 0?"m":o,d=t.color,y=d===void 0?"primary":d,_=t.isDisabled,k=t.disabled,T=t.href,N=t.type,L=N===void 0?"button":N,Y=t.display,q=Y===void 0?"empty":Y,K=t.target,U=t.rel,X=t.size,Z=X===void 0?"xs":X,fe=t.buttonRef,me=t.isSelected,ye=t.isLoading,ge=iTt(t,oTt),ae=!T||Qp(T),Pe=_||k||!ae||ye,Ne=ge["aria-hidden"],Ye=Ne==="true"||Ne===!0;!ge["aria-label"]&&!ge["aria-labelledby"]&&!Ye&&console.warn(`EuiButtonIcon requires aria-label or aria-labelledby to be specified because icon-only buttons are screen-reader-inaccessible without them.`);var Je=(0,qxe.default)("euiButtonIcon",{"euiButtonIcon-isDisabled":Pe},Gxe[y],q&&Uxe[q],Z&&Jxe[Z],n),Me;r&&!ye&&(Me=c(sn,{className:"euiButtonIcon__icon",type:r,size:i,"aria-hidden":"true",color:"inherit"}));var Ve=i==="original"?void 0:i;if(r&&ye&&(Me=c(Pn,{size:Ve})),T&&!Pe){var Ue=vu({href:T,target:K,rel:U});return c("a",XU({tabIndex:Ye?-1:void 0,className:Je,href:T,target:K,rel:Ue,ref:fe},ge),Me)}var ht;return c("button",XU({tabIndex:Ye?-1:void 0,disabled:Pe,className:Je,"aria-pressed":me,type:L,ref:fe},ge),Me)};K0.propTypes={type:fl.default.oneOfType([fl.default.string,fl.default.oneOf(["submit","reset","button"])]),href:fl.default.string,onClick:fl.default.func,iconType:fl.default.oneOfType([fl.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,fl.default.string.isRequired,fl.default.elementType.isRequired]).isRequired,color:fl.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]),"aria-label":fl.default.string,"aria-labelledby":fl.default.string,isDisabled:fl.default.bool,size:fl.default.oneOf(["xs","s","m"]),iconSize:fl.default.any,isSelected:fl.default.bool,display:fl.default.oneOf(["base","empty","fill"]),isLoading:fl.default.bool,className:fl.default.string,"data-test-subj":fl.default.string,buttonRef:fl.default.any};var Mce=V(er()),wk=V(ne());function Ace(e,t){return cTt(e)||uTt(e,t)||lTt(e,t)||sTt()}function sTt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function lTt(e,t){if(e){if(typeof e=="string")return Xxe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Xxe(e,t)}}function Xxe(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',q=L.head||L.getElementsByTagName("head")[0],K=L.createElement("style");K.id="detectElementResize",K.type="text/css",e!=null&&K.setAttribute("nonce",e),K.styleSheet?K.styleSheet.cssText=Y:K.appendChild(L.createTextNode(Y)),q.appendChild(K)}};return{addResizeListener:function(L,Y){if(_)L.attachEvent("onresize",Y);else{if(!L.__resizeTriggers__){let q=L.ownerDocument,K=Ky.getComputedStyle(L);K&&K.position==="static"&&(L.style.position="relative"),k(q),L.__resizeLast__={},L.__resizeListeners__=[],(L.__resizeTriggers__=q.createElement("div")).className="resize-triggers";let U=q.createElement("div");U.className="expand-trigger",U.appendChild(q.createElement("div"));let X=q.createElement("div");X.className="contract-trigger",L.__resizeTriggers__.appendChild(U),L.__resizeTriggers__.appendChild(X),L.appendChild(L.__resizeTriggers__),d(L),L.addEventListener("scroll",y,!0),r&&(L.__resizeTriggers__.__animationListener__=function(fe){fe.animationName===n&&d(L)},L.__resizeTriggers__.addEventListener(r,L.__resizeTriggers__.__animationListener__))}L.__resizeListeners__.push(Y)}},removeResizeListener:function(L,Y){if(_)L.detachEvent("onresize",Y);else if(L.__resizeListeners__.splice(L.__resizeListeners__.indexOf(Y),1),!L.__resizeListeners__.length){L.removeEventListener("scroll",y,!0),L.__resizeTriggers__.__animationListener__&&(L.__resizeTriggers__.removeEventListener(r,L.__resizeTriggers__.__animationListener__),L.__resizeTriggers__.__animationListener__=null);try{L.__resizeTriggers__=!L.removeChild(L.__resizeTriggers__)}catch{}}}}}var KU=class extends YU.Component{constructor(...t){super(...t),this.state={height:this.props.defaultHeight||0,scaledHeight:this.props.defaultHeight||0,scaledWidth:this.props.defaultWidth||0,width:this.props.defaultWidth||0},this._autoSizer=null,this._detectElementResize=null,this._parentNode=null,this._resizeObserver=null,this._timeoutId=null,this._onResize=()=>{this._timeoutId=null;let{disableHeight:n,disableWidth:r,onResize:o}=this.props;if(this._parentNode){let i=window.getComputedStyle(this._parentNode)||{},d=parseFloat(i.paddingLeft||"0"),y=parseFloat(i.paddingRight||"0"),_=parseFloat(i.paddingTop||"0"),k=parseFloat(i.paddingBottom||"0"),T=this._parentNode.getBoundingClientRect(),N=T.height-_-k,L=T.width-d-y,Y=this._parentNode.offsetHeight-_-k,q=this._parentNode.offsetWidth-d-y;(!n&&(this.state.height!==Y||this.state.scaledHeight!==N)||!r&&(this.state.width!==q||this.state.scaledWidth!==L))&&(this.setState({height:Y,width:q,scaledHeight:N,scaledWidth:L}),typeof o=="function"&&o({height:Y,scaledHeight:N,scaledWidth:L,width:q}))}},this._setRef=n=>{this._autoSizer=n}}componentDidMount(){let{nonce:t}=this.props,n=this._autoSizer?this._autoSizer.parentNode:null;if(n!=null&&n.ownerDocument&&n.ownerDocument.defaultView&&n instanceof n.ownerDocument.defaultView.HTMLElement){this._parentNode=n;let r=n.ownerDocument.defaultView.ResizeObserver;r!=null?(this._resizeObserver=new r(()=>{this._timeoutId=setTimeout(this._onResize,0)}),this._resizeObserver.observe(n)):(this._detectElementResize=fTt(t),this._detectElementResize.addResizeListener(n,this._onResize)),this._onResize()}}componentWillUnmount(){this._parentNode&&(this._detectElementResize&&this._detectElementResize.removeResizeListener(this._parentNode,this._onResize),this._timeoutId!==null&&clearTimeout(this._timeoutId),this._resizeObserver&&this._resizeObserver.disconnect())}render(){let{children:t,defaultHeight:n,defaultWidth:r,disableHeight:o=!1,disableWidth:i=!1,doNotBailOutOnEmptyChildren:d=!1,nonce:y,onResize:_,style:k={},tagName:T="div",...N}=this.props,{height:L,scaledHeight:Y,scaledWidth:q,width:K}=this.state,U={overflow:"visible"},X={},Z=!1;return o||(L===0&&(Z=!0),U.height=0,X.height=L,X.scaledHeight=Y),i||(K===0&&(Z=!0),U.width=0,X.width=K,X.scaledWidth=q),d&&(Z=!1),(0,YU.createElement)(T,{ref:this._setRef,style:{...U,...k},...N},!Z&&t(X))}};function QU(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?QU=function(n){return typeof n}:QU=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},QU(e)}function pTt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function dTt(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&Lce(e,t)}function Lce(e,t){return Lce=Object.setPrototypeOf||function(r,o){return r.__proto__=o,r},Lce(e,t)}function hTt(e){var t=gTt();return function(){var r=ZU(e),o;if(t){var i=ZU(this).constructor;o=Reflect.construct(r,arguments,i)}else o=r.apply(this,arguments);return mTt(this,o)}}function mTt(e,t){if(t&&(QU(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return vTt(e)}function vTt(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function gTt(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function ZU(e){return ZU=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},ZU(e)}var Fce=function(e){dTt(n,e);var t=hTt(n);function n(){return pTt(this,n),t.apply(this,arguments)}return n}(KU);var Oxr=V(ne()),Wl=V(er()),Hce=V(Ar());function eG(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?eG=function(n){return typeof n}:eG=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},eG(e)}var yTt="";var Bce=function(t){var n;if(!t)return null;if(t.indexOf(",")>0){if(!/^[\s,.0-9]*$/.test(t))return null;var r=t.trim().split(",").filter(function(o){return o!==""}).map(Number);n=r.length>2&&r.length<5?r:yTt}else n=t;return n},Zxe=function(t){var n=t;return typeof t=="string"&&(n=Bce(t)),n?eG(n)==="object"?pa.valid(n,"rgb")||pa.valid(n,"rgba"):pa.valid(t,"hex"):!1};var bTt=["children","color","iconType","iconSide","className","isDisabled","onClick","iconOnClick","onClickAriaLabel","iconOnClickAriaLabel","closeButtonProps","href","rel","target","style"];function wTt(e){return STt(e)||_Tt(e)||xTt(e)||OTt()}function OTt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function xTt(e,t){if(e){if(typeof e=="string")return Wce(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Wce(e,t)}}function _Tt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function STt(e){if(Array.isArray(e))return Wce(e)}function Wce(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kTt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PTt="#000",jTt="#fff",$W=Ej(),n_e={default:"#d3dae6",primary:$W[1],success:$W[0],accent:$W[2],warning:$W[5],danger:$W[9]},$ce=Yr(n_e),o_e={left:"euiBadge--iconLeft",right:"euiBadge--iconRight"},Txr=Yr(o_e),Zp=function(t){var n=t.children,r=t.color,o=r===void 0?"default":r,i=t.iconType,d=t.iconSide,y=d===void 0?"left":d,_=t.className,k=t.isDisabled,T=t.onClick,N=t.iconOnClick,L=t.onClickAriaLabel,Y=t.iconOnClickAriaLabel,q=t.closeButtonProps,K=t.href,U=t.rel,X=t.target,Z=t.style,fe=ITt(t,bTt),me=!K||Qp(K),ye=k||!me,ge=Z,ae=null,Pe=4.5,Ne=null,Ye=null;try{$ce.indexOf(o)>-1?(Ye=n_e[o],ae=r_e(Ye),ge=t_e({backgroundColor:Ye,color:ae},ge)):o!=="hollow"&&(ae=r_e(o),Ne=CTt(ae,o),Ne"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function rG(e){return rG=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},rG(e)}function NTt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var c_e={after:"afterend",before:"beforebegin"},Rxr=Yr(c_e),RE=function(e){RTt(n,e);var t=DTt(n);function n(r){var o;if(ATt(this,n),o=t.call(this,r),NTt(s_e(o),"portalNode",null),typeof window>"u")return a_e(o);var i=o.props.insert;if(o.portalNode=document.createElement("div"),o.portalNode.dataset.euiportal="true",i==null)document.body.appendChild(o.portalNode);else{var d=i.sibling,y=i.position;d.insertAdjacentElement(c_e[y],o.portalNode)}return o}return MTt(n,[{key:"componentDidMount",value:function(){this.updatePortalRef(this.portalNode)}},{key:"componentWillUnmount",value:function(){var o;(o=this.portalNode)!==null&&o!==void 0&&o.parentNode&&this.portalNode.parentNode.removeChild(this.portalNode),this.updatePortalRef(null)}},{key:"updatePortalRef",value:function(o){this.props.portalRef&&this.props.portalRef(o)}},{key:"render",value:function(){return this.portalNode?(0,u_e.createPortal)(this.props.children,this.portalNode):null}}]),n}(l_e.Component);RE.propTypes={children:Qj.default.node.isRequired,insert:Qj.default.shape({sibling:Qj.default.any.isRequired,position:Qj.default.oneOf(["before","after"]).isRequired}),portalRef:Qj.default.func};var p_e=V(ne()),DE=V(er()),d_e=V(Ar());function nG(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?nG=function(n){return typeof n}:nG=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},nG(e)}var LTt=["children","title","className","positionToolTip","popoverRef"];function Uce(){return Uce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BTt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function WTt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f_e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function iG(e){return iG=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},iG(e)}function qce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Jce=function(e){$Tt(n,e);var t=VTt(n);function n(){var r;WTt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KTt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function YTt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function m_e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function sG(e){return sG=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},sG(e)}function ed(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var g_e={top:"euiToolTip--top",right:"euiToolTip--right",bottom:"euiToolTip--bottom",left:"euiToolTip--left"},Xxr=Yr(g_e),nAt={regular:250,long:250*5},oAt={inlineBlock:void 0,block:"euiToolTipAnchor--displayBlock"},v_e={top:50,left:50,opacity:0,visibility:"hidden"},Y0=function(e){ZTt(n,e);var t=eAt(n);function n(){var r;YTt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uG=function(t){var n=t.type,r=n===void 0?"questionInCircle":n,o=t["aria-label"],i=o===void 0?"Info":o,d=t.color,y=t.size,_=t.iconProps,k=t.position,T=k===void 0?"top":k,N=t.delay,L=N===void 0?"regular":N,Y=aAt(t,iAt);return c(Y0,lG({position:T,delay:L},Y),c(sn,lG({tabIndex:0,type:r,color:d,size:y,"aria-label":i},_)))};uG.propTypes={anchorClassName:Lc.default.string,className:Lc.default.string,content:Lc.default.node,display:Lc.default.oneOf(["inlineBlock","block"]),title:Lc.default.node,id:Lc.default.string,onMouseOut:Lc.default.func,color:Lc.default.string,type:Lc.default.oneOfType([Lc.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Lc.default.string.isRequired,Lc.default.elementType.isRequired]),size:Lc.default.any,"aria-label":Lc.default.string,iconProps:Lc.default.any,delay:Lc.default.any,position:Lc.default.any};var lAt=["className","label","color","tooltipContent","tooltipPosition","title","iconType","onClick","onClickAriaLabel","href","rel","target","size"];function cG(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?cG=function(n){return typeof n}:cG=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},cG(e)}function VW(){return VW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w_e={accent:"euiBetaBadge--accent",subdued:"euiBetaBadge--subdued",hollow:"euiBetaBadge--hollow"},p_r=Yr(w_e),O_e={s:"euiBetaBadge--small",m:null},d_r=Yr(O_e),fG=function(t){var n=t.className,r=t.label,o=t.color,i=o===void 0?"hollow":o,d=t.tooltipContent,y=t.tooltipPosition,_=y===void 0?"top":y,k=t.title,T=t.iconType,N=t.onClick,L=t.onClickAriaLabel,Y=t.href,q=t.rel,K=t.target,U=t.size,X=U===void 0?"m":U,Z=uAt(t,lAt),fe=!1;typeof r=="string"&&r.length===1&&(fe=!0);var me=(0,b_e.default)("euiBetaBadge",{"euiBetaBadge--iconOnly":T,"euiBetaBadge--singleLetter":fe,"euiBetaBadge-isClickable":N||Y},w_e[i],O_e[X],n),ye;T&&(ye=c(sn,{className:"euiBetaBadge__icon",type:T,size:X==="m"?"m":"s","aria-hidden":"true",color:"inherit"}));var ge=Y?"a":"button",ae={};Y&&(ae.href=Y,ae.target=K,ae.rel=vu({href:Y,target:K,rel:q})),N&&(ae.onClick=N);var Pe;if(N||Y)return Pe=c(ge,VW({"aria-label":L,className:me,title:typeof r=="string"?r:k},ae,Z),ye||r),d?c(Y0,{position:_,content:d,title:k||r},Pe):c(y_e.Fragment,null,Pe);if(d)return c(Y0,{position:_,content:d,title:k||r},c("span",VW({tabIndex:0,className:me,role:"button"},Z),ye||r));var Ne=k||r;return Ne&&typeof Ne!="string"&&console.warn("Only string titles are permitted on badges that do not use tooltips. Found: ".concat(cG(Ne))),c("span",VW({className:me,title:Ne},Z),ye||r)};fG.propTypes={className:yi.default.string,"aria-label":yi.default.string,"data-test-subj":yi.default.string,onClick:yi.default.func,onClickAriaLabel:yi.default.any,href:yi.default.string,target:yi.default.string,rel:yi.default.string,iconType:yi.default.oneOfType([yi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,yi.default.string.isRequired,yi.default.elementType.isRequired]),label:yi.default.oneOfType([yi.default.node.isRequired,yi.default.oneOfType([yi.default.node.isRequired,yi.default.string.isRequired]).isRequired]).isRequired,tooltipContent:yi.default.oneOfType([yi.default.node,yi.default.oneOfType([yi.default.node,yi.default.node.isRequired])]),tooltipPosition:yi.default.oneOf(["top","right","bottom","left"]),title:yi.default.oneOfType([yi.default.string,yi.default.oneOfType([yi.default.string.isRequired,yi.default.string])]),color:yi.default.oneOf(["accent","subdued","hollow"]),size:yi.default.oneOf(["s","m"])};var Hl=function(t,n,r){var o=r===OE.dark?n*3.5:n*1;return pa(t).alpha(o).css()};var fAt=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,d=i||n.colors.shadow;return` +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function xTt(e,t){if(e){if(typeof e=="string")return Wce(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Wce(e,t)}}function _Tt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function STt(e){if(Array.isArray(e))return Wce(e)}function Wce(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kTt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var PTt="#000",jTt="#fff",$W=Ej(),n_e={default:"#d3dae6",primary:$W[1],success:$W[0],accent:$W[2],warning:$W[5],danger:$W[9]},$ce=Yr(n_e),o_e={left:"euiBadge--iconLeft",right:"euiBadge--iconRight"},Txr=Yr(o_e),Zp=function(t){var n=t.children,r=t.color,o=r===void 0?"default":r,i=t.iconType,d=t.iconSide,y=d===void 0?"left":d,_=t.className,k=t.isDisabled,T=t.onClick,N=t.iconOnClick,L=t.onClickAriaLabel,Y=t.iconOnClickAriaLabel,q=t.closeButtonProps,K=t.href,U=t.rel,X=t.target,Z=t.style,fe=ITt(t,bTt),me=!K||Qp(K),ye=k||!me,ge=Z,ae=null,Pe=4.5,Ne=null,Ye=null;try{$ce.indexOf(o)>-1?(Ye=n_e[o],ae=r_e(Ye),ge=t_e({backgroundColor:Ye,color:ae},ge)):o!=="hollow"&&(ae=r_e(o),Ne=CTt(ae,o),Ne"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function rG(e){return rG=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},rG(e)}function NTt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var c_e={after:"afterend",before:"beforebegin"},Rxr=Yr(c_e),RE=function(e){RTt(n,e);var t=DTt(n);function n(r){var o;if(ATt(this,n),o=t.call(this,r),NTt(s_e(o),"portalNode",null),typeof window>"u")return a_e(o);var i=o.props.insert;if(o.portalNode=document.createElement("div"),o.portalNode.dataset.euiportal="true",i==null)document.body.appendChild(o.portalNode);else{var d=i.sibling,y=i.position;d.insertAdjacentElement(c_e[y],o.portalNode)}return o}return MTt(n,[{key:"componentDidMount",value:function(){this.updatePortalRef(this.portalNode)}},{key:"componentWillUnmount",value:function(){var o;(o=this.portalNode)!==null&&o!==void 0&&o.parentNode&&this.portalNode.parentNode.removeChild(this.portalNode),this.updatePortalRef(null)}},{key:"updatePortalRef",value:function(o){this.props.portalRef&&this.props.portalRef(o)}},{key:"render",value:function(){return this.portalNode?(0,u_e.createPortal)(this.props.children,this.portalNode):null}}]),n}(l_e.Component);RE.propTypes={children:Qj.default.node.isRequired,insert:Qj.default.shape({sibling:Qj.default.any.isRequired,position:Qj.default.oneOf(["before","after"]).isRequired}),portalRef:Qj.default.func};var p_e=V(ne()),DE=V(er()),d_e=V(Ar());function nG(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?nG=function(n){return typeof n}:nG=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},nG(e)}var LTt=["children","title","className","positionToolTip","popoverRef"];function Uce(){return Uce=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BTt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function WTt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f_e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function iG(e){return iG=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},iG(e)}function qce(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Jce=function(e){$Tt(n,e);var t=VTt(n);function n(){var r;WTt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KTt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function YTt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function m_e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function sG(e){return sG=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},sG(e)}function ed(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var g_e={top:"euiToolTip--top",right:"euiToolTip--right",bottom:"euiToolTip--bottom",left:"euiToolTip--left"},Xxr=Yr(g_e),nAt={regular:250,long:250*5},oAt={inlineBlock:void 0,block:"euiToolTipAnchor--displayBlock"},v_e={top:50,left:50,opacity:0,visibility:"hidden"},Y0=function(e){ZTt(n,e);var t=eAt(n);function n(){var r;YTt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uG=function(t){var n=t.type,r=n===void 0?"questionInCircle":n,o=t["aria-label"],i=o===void 0?"Info":o,d=t.color,y=t.size,_=t.iconProps,k=t.position,T=k===void 0?"top":k,N=t.delay,L=N===void 0?"regular":N,Y=aAt(t,iAt);return c(Y0,lG({position:T,delay:L},Y),c(sn,lG({tabIndex:0,type:r,color:d,size:y,"aria-label":i},_)))};uG.propTypes={anchorClassName:Lc.default.string,className:Lc.default.string,content:Lc.default.node,display:Lc.default.oneOf(["inlineBlock","block"]),title:Lc.default.node,id:Lc.default.string,onMouseOut:Lc.default.func,color:Lc.default.string,type:Lc.default.oneOfType([Lc.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Lc.default.string.isRequired,Lc.default.elementType.isRequired]),size:Lc.default.any,"aria-label":Lc.default.string,iconProps:Lc.default.any,delay:Lc.default.any,position:Lc.default.any};var lAt=["className","label","color","tooltipContent","tooltipPosition","title","iconType","onClick","onClickAriaLabel","href","rel","target","size"];function cG(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?cG=function(n){return typeof n}:cG=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},cG(e)}function VW(){return VW=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var w_e={accent:"euiBetaBadge--accent",subdued:"euiBetaBadge--subdued",hollow:"euiBetaBadge--hollow"},p_r=Yr(w_e),O_e={s:"euiBetaBadge--small",m:null},d_r=Yr(O_e),fG=function(t){var n=t.className,r=t.label,o=t.color,i=o===void 0?"hollow":o,d=t.tooltipContent,y=t.tooltipPosition,_=y===void 0?"top":y,k=t.title,T=t.iconType,N=t.onClick,L=t.onClickAriaLabel,Y=t.href,q=t.rel,K=t.target,U=t.size,X=U===void 0?"m":U,Z=uAt(t,lAt),fe=!1;typeof r=="string"&&r.length===1&&(fe=!0);var me=(0,b_e.default)("euiBetaBadge",{"euiBetaBadge--iconOnly":T,"euiBetaBadge--singleLetter":fe,"euiBetaBadge-isClickable":N||Y},w_e[i],O_e[X],n),ye;T&&(ye=c(sn,{className:"euiBetaBadge__icon",type:T,size:X==="m"?"m":"s","aria-hidden":"true",color:"inherit"}));var ge=Y?"a":"button",ae={};Y&&(ae.href=Y,ae.target=K,ae.rel=vu({href:Y,target:K,rel:q})),N&&(ae.onClick=N);var Pe;if(N||Y)return Pe=c(ge,VW({"aria-label":L,className:me,title:typeof r=="string"?r:k},ae,Z),ye||r),d?c(Y0,{position:_,content:d,title:k||r},Pe):c(y_e.Fragment,null,Pe);if(d)return c(Y0,{position:_,content:d,title:k||r},c("span",VW({tabIndex:0,className:me,role:"button"},Z),ye||r));var Ne=k||r;return Ne&&typeof Ne!="string"&&console.warn("Only string titles are permitted on badges that do not use tooltips. Found: ".concat(cG(Ne))),c("span",VW({className:me,title:Ne},Z),ye||r)};fG.propTypes={className:yi.default.string,"aria-label":yi.default.string,"data-test-subj":yi.default.string,onClick:yi.default.func,onClickAriaLabel:yi.default.any,href:yi.default.string,target:yi.default.string,rel:yi.default.string,iconType:yi.default.oneOfType([yi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,yi.default.string.isRequired,yi.default.elementType.isRequired]),label:yi.default.oneOfType([yi.default.node.isRequired,yi.default.oneOfType([yi.default.node.isRequired,yi.default.string.isRequired]).isRequired]).isRequired,tooltipContent:yi.default.oneOfType([yi.default.node,yi.default.oneOfType([yi.default.node,yi.default.node.isRequired])]),tooltipPosition:yi.default.oneOf(["top","right","bottom","left"]),title:yi.default.oneOfType([yi.default.string,yi.default.oneOfType([yi.default.string.isRequired,yi.default.string])]),color:yi.default.oneOf(["accent","subdued","hollow"]),size:yi.default.oneOf(["s","m"])};var Hl=function(t,n,r){var o=r===OE.dark?n*3.5:n*1;return pa(t).alpha(o).css()};var fAt=function(t){var n=t.euiTheme,r=t.colorMode,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.color,d=i||n.colors.shadow;return` box-shadow: 0 .8px .8px `.concat(Hl(d,.04,r),`, 0 2.3px 2px `).concat(Hl(d,.03,r),`; @@ -456,7 +456,7 @@ box-shadow: 0 0 2px `).concat(Hl(d,.04,r),`, 0 0 5px `).concat(Hl(d,.04,r),`, 0 0 17px `).concat(Hl(d,.03,r),`; -`)};var v4=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"l",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=r.color;switch(n){case"xs":return fAt(t,{color:o});case"s":return pAt(t,{color:o});case"m":return Qce(t,{color:o});case"l":return dAt(t,{color:o});case"xl":return hAt(t,{color:o});default:return console.warn("Please provide a valid size option to useEuiShadow"),""}};var E_e=V(ne()),zE=V(er()),Zce=V(Ar());var mAt=["children","color","className","href","external","target","rel","type","onClick","disabled"];function pG(){return pG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U_=(0,E_e.forwardRef)(function(e,t){var n=e.children,r=e.color,o=r===void 0?"primary":r,i=e.className,d=e.href,y=e.external,_=e.target,k=e.rel,T=e.type,N=T===void 0?"button":T,L=e.onClick,Y=e.disabled,q=gAt(e,mAt),K=Jn(),U=Pxe(K),X=[U.euiLink],Z=[U.euiLink__screenReaderText],fe=[U.euiLink__externalIcon],me=!d||Qp(d),ye=Y||!me,ge=c(na,{css:Z},c("span",null,c(Mr,{token:"euiLink.newTarget.screenReaderOnlyText",default:"(opens in a new tab or window)"}))),ae=c(sn,{"aria-label":cl("euiLink.external.ariaLabel","External link"),size:"s",css:fe,type:"popout"});if(d===void 0||!me){var Pe=S_e({className:(0,Zce.default)("euiLink",i),css:[X,ye?[U.disabled]:U[o]],type:N,onClick:L,disabled:ye},q);return c("button",pG({ref:t},Pe),n)}var Ne=vu({href:d,target:_,rel:k}),Ye=S_e({className:(0,Zce.default)("euiLink",i),css:[X,U[o]],href:d,target:_,rel:Ne,onClick:L},q),Je=_==="_blank"&&y!==!1||y===!0;return c("a",pG({ref:t},Ye),n,Je&&ae,_==="_blank"&&ge)});U_.propTypes={className:zE.default.string,"aria-label":zE.default.string,"data-test-subj":zE.default.string,type:zE.default.oneOf(["button","reset","submit"]),color:zE.default.any,onClick:zE.default.func,external:zE.default.bool};U_.displayName="EuiLink";var U7e=V(ne()),X_=V(er());var dh=function(){return dh=Object.assign||function(t){for(var n,r=1,o=arguments.length;r=0}).sort(TAt)};var r7e=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"];var sfe=r7e.join(","),MAt="".concat(sfe,", [data-focus-guard]"),n7e=function(e,t){return rd((e.shadowRoot||e).children).reduce(function(n,r){return n.concat(r.matches(t?MAt:sfe)?[r]:[],n7e(r))},[])},RAt=function(e,t){var n;return e instanceof HTMLIFrameElement&&(!((n=e.contentDocument)===null||n===void 0)&&n.body)?NE([e.contentDocument.body],t):[e]},NE=function(e,t){return e.reduce(function(n,r){var o,i=n7e(r,t),d=(o=[]).concat.apply(o,i.map(function(y){return RAt(y,t)}));return n.concat(d,r.parentNode?rd(r.parentNode.querySelectorAll(sfe)).filter(function(y){return y===r}):[])},[])},o7e=function(e){var t=e.querySelectorAll("[".concat(N_e,"]"));return rd(t).map(function(n){return NE([n])}).reduce(function(n,r){return n.concat(r)},[])};var lfe=function(e,t){return rd(e).filter(function(n){return nfe(t,n)}).filter(function(n){return e7e(n)})},ufe=function(e,t){return t===void 0&&(t=new Map),rd(e).filter(function(n){return ofe(t,n)})},nC=function(e,t,n){return YW(lfe(NE(e,n),t),!0,n)},G_=function(e,t){return YW(lfe(NE(e),t),!1)},i7e=function(e,t){return lfe(o7e(e),t)},N3=function(e,t){return e.shadowRoot?N3(e.shadowRoot,t):Object.getPrototypeOf(e).contains!==void 0&&Object.getPrototypeOf(e).contains.call(e,t)?!0:rd(e.children).some(function(n){var r;if(n instanceof HTMLIFrameElement){var o=(r=n.contentDocument)===null||r===void 0?void 0:r.body;return o?N3(o,t):!1}return N3(n,t)})};var DAt=function(e){for(var t=new Set,n=e.length,r=0;r0&&t.add(o),(i&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(r)}return e.filter(function(d,y){return!t.has(y)})},a7e=function(e){return e.parentNode?a7e(e.parentNode):e},oC=function(e){var t=z3(e);return t.filter(Boolean).reduce(function(n,r){var o=r.getAttribute(JW);return n.push.apply(n,o?DAt(rd(a7e(r).querySelectorAll("[".concat(JW,'="').concat(o,'"]:not([').concat(gG,'="disabled"])')))):[r]),n},[])};var s7e=function(e){try{return e()}catch{return}};var LE=function(e){if(e===void 0&&(e=document),!(!e||!e.activeElement)){var t=e.activeElement;return t.shadowRoot?LE(t.shadowRoot):t instanceof HTMLIFrameElement&&s7e(function(){return t.contentWindow.document})?LE(t.contentWindow.document):t}};var zAt=function(e,t){return e===t},NAt=function(e,t){return!!rd(e.querySelectorAll("iframe")).some(function(n){return zAt(n,t)})},kG=function(e,t){return t===void 0&&(t=LE(IG(e).ownerDocument)),!t||t.dataset&&t.dataset.focusGuard?!1:oC(e).some(function(n){return N3(n,t)||NAt(n,t)})};var cfe=function(e){e===void 0&&(e=document);var t=LE(e);return t?rd(e.querySelectorAll("[".concat(z_e,"]"))).some(function(n){return N3(n,t)}):!1};var LAt=function(e,t){return t.filter(afe).filter(function(n){return n.name===e.name}).filter(function(n){return n.checked})[0]||e},PG=function(e,t){return afe(e)&&e.name?LAt(e,t):e},l7e=function(e){var t=new Set;return e.forEach(function(n){return t.add(PG(n,e))}),e.filter(function(n){return t.has(n)})};var ffe=function(e){return e[0]&&e.length>1?PG(e[0],e):e[0]},pfe=function(e,t){return e.indexOf(PG(t,e))};var jG="NEW_FOCUS",u7e=function(e,t,n,r,o){var i=e.length,d=e[0],y=e[i-1],_=XW(r);if(!(r&&e.indexOf(r)>=0)){var k=r!==void 0?n.indexOf(r):-1,T=o?n.indexOf(o):k,N=o?e.indexOf(o):-1;if(k===-1)return N!==-1?N:jG;if(N===-1)return jG;var L=k-T,Y=n.indexOf(d),q=n.indexOf(y),K=l7e(n),U=r!==void 0?K.indexOf(r):-1,X=U-(o?K.indexOf(o):k);if(!L&&N>=0||t.length===0)return N;var Z=pfe(e,t[0]),fe=pfe(e,t[t.length-1]);if(k<=Y&&_&&Math.abs(L)>1)return fe;if(k>=q&&_&&Math.abs(L)>1)return Z;if(L&&Math.abs(X)>1)return N;if(k<=Y)return fe;if(k>q)return Z;if(L)return Math.abs(L)>1?N:(i+N+L)%i}};var FAt=function(e){return function(t){var n,r=(n=ife(t))===null||n===void 0?void 0:n.autofocus;return t.autofocus||r!==void 0&&r!=="false"||e.indexOf(t)>=0}},dfe=function(e,t,n){var r=e.map(function(i){var d=i.node;return d}),o=ufe(r.filter(FAt(n)));return o&&o.length?ffe(o):ffe(ufe(t))};var mfe=function(e,t){return t===void 0&&(t=[]),t.push(e),e.parentNode&&mfe(e.parentNode.host||e.parentNode,t),t},hfe=function(e,t){for(var n=mfe(e),r=mfe(t),o=0;o=0)return i}return!1},CG=function(e,t,n){var r=z3(e),o=z3(t),i=r[0],d=!1;return o.filter(Boolean).forEach(function(y){d=hfe(d||y,y)||d,n.filter(Boolean).forEach(function(_){var k=hfe(i,_);k&&(!d||N3(k,d)?d=k:d=hfe(k,d))})}),d},vfe=function(e,t){return e.reduce(function(n,r){return n.concat(i7e(r,t))},[])};var BAt=function(e,t){var n=new Map;return t.forEach(function(r){return n.set(r.node,r)}),e.map(function(r){return n.get(r)}).filter(t7e)},c7e=function(e,t){var n=LE(z3(e).length>0?document:IG(e).ownerDocument),r=oC(e).filter(KW),o=CG(n||e,e,r),i=new Map,d=G_(r,i),y=d.filter(function(q){var K=q.node;return KW(K)});if(y[0]){var _=G_([o],i).map(function(q){var K=q.node;return K}),k=BAt(_,y),T=k.map(function(q){var K=q.node;return K}),N=k.filter(function(q){var K=q.tabIndex;return K>=0}).map(function(q){var K=q.node;return K}),L=u7e(T,N,_,n,t);if(L===jG){var Y=dfe(d,N,vfe(r,i))||dfe(d,T,vfe(r,i));if(Y)return{node:Y};console.warn("focus-lock: cannot find any node to move focus into");return}return L===void 0?L:k[L]}};var gfe=function(e){var t=oC(e).filter(KW),n=CG(e,e,t),r=YW(NE([n],!0),!0,!0),o=NE(t,!1);return r.map(function(i){var d=i.node,y=i.index;return{node:d,index:y,lockItem:o.indexOf(d)>=0,guard:XW(d)}})};var QW=function(e,t){e&&("focus"in e&&e.focus(t),"contentWindow"in e&&e.contentWindow&&e.contentWindow.focus())};var yfe=0,bfe=!1,TG=function(e,t,n){n===void 0&&(n={});var r=c7e(e,t);if(!bfe&&r){if(yfe>2){console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),bfe=!0,setTimeout(function(){bfe=!1},1);return}yfe++,QW(r.node,n.focusOptions),yfe--}};function ZW(e){if(!e)return null;if(typeof WeakRef>"u")return function(){return e||null};var t=e?new WeakRef(e):null;return function(){return t?.deref()||null}}var WAt=function(e){if(!e)return null;for(var t=[],n=e;n&&n!==document.body;)t.push({current:ZW(n),parent:ZW(n.parentElement),left:ZW(n.previousElementSibling),right:ZW(n.nextElementSibling)}),n=n.parentElement;return{element:ZW(e),stack:t,ownerDocument:e.ownerDocument}},HAt=function(e){var t,n,r,o,i;if(e)for(var d=e.stack,y=e.ownerDocument,_=new Map,k=0,T=d;k-1&&(U.filter(function(Z){var fe=Z.guard,me=Z.node;return fe&&me.dataset.focusAutoGuard}).forEach(function(Z){var fe=Z.node;return fe.removeAttribute("tabIndex")}),m7e(X,U.length,1,U),m7e(X,-1,-1,U))}}}return t},b7e=function(t){MG()&&t&&(t.stopPropagation(),t.preventDefault())},RG=function(){return OG(MG)},w7e=function(t){var n=t.target,r=t.currentTarget;r.contains(n)||JAt(r,n)},eMt=function(){return null},tMt=function(t){var n=t.children;return v7e.createElement("div",{onBlur:RG,onFocus:w7e},n)};tMt.propTypes={};var O7e=function(){Sfe=!0},x7e=function(){Sfe=!1,eH="just",OG(function(){eH="meanwhile"})},rMt=function(){document.addEventListener("focusin",b7e),document.addEventListener("focusout",RG),window.addEventListener("focus",O7e),window.addEventListener("blur",x7e)},nMt=function(){document.removeEventListener("focusin",b7e),document.removeEventListener("focusout",RG),window.removeEventListener("focus",O7e),window.removeEventListener("blur",x7e)};function oMt(e){return e.filter(function(t){var n=t.disabled;return!n})}var _7e={moveFocusInside:TG,focusInside:kG,focusNextElement:wfe,focusPrevElement:Ofe,focusFirstElement:xfe,focusLastElement:_fe,captureFocusRestore:AG};function iMt(e){var t=e.slice(-1)[0];t&&!iC&&rMt();var n=iC,r=n&&t&&t.id===n.id;iC=t,n&&!r&&(n.onDeactivation(),e.filter(function(o){var i=o.id;return i===n.id}).length||n.returnFocus(!t)),t?(cv=null,(!r||n.observed!==t.observed)&&t.onActivation(_7e),MG(!0),OG(MG)):(nMt(),cv=null)}yG.assignSyncMedium(w7e);bG.assignMedium(RG);F_e.assignMedium(function(e){return e(_7e)});var S7e=K_e(oMt,iMt)(eMt);var wSr=Ek(wG,S7e);var Ya=V(ne());var lC=V(ne());var k7e=V(ne());var E7e;var I7e=function(){if(E7e)return E7e;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function aMt(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=I7e();return t&&e.setAttribute("nonce",t),e}function sMt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function lMt(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var Efe=function(){var e=0,t=null;return{add:function(n){e==0&&(t=aMt())&&(sMt(t,n),lMt(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}};var Ife=function(){var e=Efe();return function(t,n){k7e.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}};var kk=function(){var e=Ife(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t};var uMt={left:0,top:0,right:0,gap:0},kfe=function(e){return parseInt(e||"",10)||0},cMt=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[kfe(n),kfe(r),kfe(o)]},Pfe=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return uMt;var t=cMt(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}};var fMt=kk(),sC="data-scroll-locked",pMt=function(e,t,n,r){var o=e.left,i=e.top,d=e.right,y=e.gap;return n===void 0&&(n="margin"),` +`)};var v4=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"l",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},o=r.color;switch(n){case"xs":return fAt(t,{color:o});case"s":return pAt(t,{color:o});case"m":return Qce(t,{color:o});case"l":return dAt(t,{color:o});case"xl":return hAt(t,{color:o});default:return console.warn("Please provide a valid size option to useEuiShadow"),""}};var E_e=V(ne()),zE=V(er()),Zce=V(Ar());var mAt=["children","color","className","href","external","target","rel","type","onClick","disabled"];function pG(){return pG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yAt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var U_=(0,E_e.forwardRef)(function(e,t){var n=e.children,r=e.color,o=r===void 0?"primary":r,i=e.className,d=e.href,y=e.external,_=e.target,k=e.rel,T=e.type,N=T===void 0?"button":T,L=e.onClick,Y=e.disabled,q=gAt(e,mAt),K=Jn(),U=Pxe(K),X=[U.euiLink],Z=[U.euiLink__screenReaderText],fe=[U.euiLink__externalIcon],me=!d||Qp(d),ye=Y||!me,ge=c(na,{css:Z},c("span",null,c(Mr,{token:"euiLink.newTarget.screenReaderOnlyText",default:"(opens in a new tab or window)"}))),ae=c(sn,{"aria-label":cl("euiLink.external.ariaLabel","External link"),size:"s",css:fe,type:"popout"});if(d===void 0||!me){var Pe=S_e({className:(0,Zce.default)("euiLink",i),css:[X,ye?[U.disabled]:U[o]],type:N,onClick:L,disabled:ye},q);return c("button",pG({ref:t},Pe),n)}var Ne=vu({href:d,target:_,rel:k}),Ye=S_e({className:(0,Zce.default)("euiLink",i),css:[X,U[o]],href:d,target:_,rel:Ne,onClick:L},q),Je=_==="_blank"&&y!==!1||y===!0;return c("a",pG({ref:t},Ye),n,Je&&ae,_==="_blank"&&ge)});U_.propTypes={className:zE.default.string,"aria-label":zE.default.string,"data-test-subj":zE.default.string,type:zE.default.oneOf(["button","reset","submit"]),color:zE.default.any,onClick:zE.default.func,external:zE.default.bool};U_.displayName="EuiLink";var U7e=V(ne()),X_=V(er());var dh=function(){return dh=Object.assign||function(t){for(var n,r=1,o=arguments.length;r=0}).sort(TAt)};var r7e=["button:enabled","select:enabled","textarea:enabled","input:enabled","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]","[tabindex]","[contenteditable]","[autofocus]"];var sfe=r7e.join(","),MAt="".concat(sfe,", [data-focus-guard]"),n7e=function(e,t){return rd((e.shadowRoot||e).children).reduce(function(n,r){return n.concat(r.matches(t?MAt:sfe)?[r]:[],n7e(r))},[])},RAt=function(e,t){var n;return e instanceof HTMLIFrameElement&&(!((n=e.contentDocument)===null||n===void 0)&&n.body)?NE([e.contentDocument.body],t):[e]},NE=function(e,t){return e.reduce(function(n,r){var o,i=n7e(r,t),d=(o=[]).concat.apply(o,i.map(function(y){return RAt(y,t)}));return n.concat(d,r.parentNode?rd(r.parentNode.querySelectorAll(sfe)).filter(function(y){return y===r}):[])},[])},o7e=function(e){var t=e.querySelectorAll("[".concat(N_e,"]"));return rd(t).map(function(n){return NE([n])}).reduce(function(n,r){return n.concat(r)},[])};var lfe=function(e,t){return rd(e).filter(function(n){return nfe(t,n)}).filter(function(n){return e7e(n)})},ufe=function(e,t){return t===void 0&&(t=new Map),rd(e).filter(function(n){return ofe(t,n)})},nC=function(e,t,n){return YW(lfe(NE(e,n),t),!0,n)},G_=function(e,t){return YW(lfe(NE(e),t),!1)},i7e=function(e,t){return lfe(o7e(e),t)},N3=function(e,t){return e.shadowRoot?N3(e.shadowRoot,t):Object.getPrototypeOf(e).contains!==void 0&&Object.getPrototypeOf(e).contains.call(e,t)?!0:rd(e.children).some(function(n){var r;if(n instanceof HTMLIFrameElement){var o=(r=n.contentDocument)===null||r===void 0?void 0:r.body;return o?N3(o,t):!1}return N3(n,t)})};var DAt=function(e){for(var t=new Set,n=e.length,r=0;r0&&t.add(o),(i&Node.DOCUMENT_POSITION_CONTAINS)>0&&t.add(r)}return e.filter(function(d,y){return!t.has(y)})},a7e=function(e){return e.parentNode?a7e(e.parentNode):e},oC=function(e){var t=z3(e);return t.filter(Boolean).reduce(function(n,r){var o=r.getAttribute(JW);return n.push.apply(n,o?DAt(rd(a7e(r).querySelectorAll("[".concat(JW,'="').concat(o,'"]:not([').concat(gG,'="disabled"])')))):[r]),n},[])};var s7e=function(e){try{return e()}catch{return}};var LE=function(e){if(e===void 0&&(e=document),!(!e||!e.activeElement)){var t=e.activeElement;return t.shadowRoot?LE(t.shadowRoot):t instanceof HTMLIFrameElement&&s7e(function(){return t.contentWindow.document})?LE(t.contentWindow.document):t}};var zAt=function(e,t){return e===t},NAt=function(e,t){return!!rd(e.querySelectorAll("iframe")).some(function(n){return zAt(n,t)})},kG=function(e,t){return t===void 0&&(t=LE(IG(e).ownerDocument)),!t||t.dataset&&t.dataset.focusGuard?!1:oC(e).some(function(n){return N3(n,t)||NAt(n,t)})};var cfe=function(e){e===void 0&&(e=document);var t=LE(e);return t?rd(e.querySelectorAll("[".concat(z_e,"]"))).some(function(n){return N3(n,t)}):!1};var LAt=function(e,t){return t.filter(afe).filter(function(n){return n.name===e.name}).filter(function(n){return n.checked})[0]||e},PG=function(e,t){return afe(e)&&e.name?LAt(e,t):e},l7e=function(e){var t=new Set;return e.forEach(function(n){return t.add(PG(n,e))}),e.filter(function(n){return t.has(n)})};var ffe=function(e){return e[0]&&e.length>1?PG(e[0],e):e[0]},pfe=function(e,t){return e.indexOf(PG(t,e))};var jG="NEW_FOCUS",u7e=function(e,t,n,r,o){var i=e.length,d=e[0],y=e[i-1],_=XW(r);if(!(r&&e.indexOf(r)>=0)){var k=r!==void 0?n.indexOf(r):-1,T=o?n.indexOf(o):k,N=o?e.indexOf(o):-1;if(k===-1)return N!==-1?N:jG;if(N===-1)return jG;var L=k-T,Y=n.indexOf(d),q=n.indexOf(y),K=l7e(n),U=r!==void 0?K.indexOf(r):-1,X=U-(o?K.indexOf(o):k);if(!L&&N>=0||t.length===0)return N;var Z=pfe(e,t[0]),fe=pfe(e,t[t.length-1]);if(k<=Y&&_&&Math.abs(L)>1)return fe;if(k>=q&&_&&Math.abs(L)>1)return Z;if(L&&Math.abs(X)>1)return N;if(k<=Y)return fe;if(k>q)return Z;if(L)return Math.abs(L)>1?N:(i+N+L)%i}};var FAt=function(e){return function(t){var n,r=(n=ife(t))===null||n===void 0?void 0:n.autofocus;return t.autofocus||r!==void 0&&r!=="false"||e.indexOf(t)>=0}},dfe=function(e,t,n){var r=e.map(function(i){var d=i.node;return d}),o=ufe(r.filter(FAt(n)));return o&&o.length?ffe(o):ffe(ufe(t))};var mfe=function(e,t){return t===void 0&&(t=[]),t.push(e),e.parentNode&&mfe(e.parentNode.host||e.parentNode,t),t},hfe=function(e,t){for(var n=mfe(e),r=mfe(t),o=0;o=0)return i}return!1},CG=function(e,t,n){var r=z3(e),o=z3(t),i=r[0],d=!1;return o.filter(Boolean).forEach(function(y){d=hfe(d||y,y)||d,n.filter(Boolean).forEach(function(_){var k=hfe(i,_);k&&(!d||N3(k,d)?d=k:d=hfe(k,d))})}),d},vfe=function(e,t){return e.reduce(function(n,r){return n.concat(i7e(r,t))},[])};var BAt=function(e,t){var n=new Map;return t.forEach(function(r){return n.set(r.node,r)}),e.map(function(r){return n.get(r)}).filter(t7e)},c7e=function(e,t){var n=LE(z3(e).length>0?document:IG(e).ownerDocument),r=oC(e).filter(KW),o=CG(n||e,e,r),i=new Map,d=G_(r,i),y=d.filter(function(q){var K=q.node;return KW(K)});if(y[0]){var _=G_([o],i).map(function(q){var K=q.node;return K}),k=BAt(_,y),T=k.map(function(q){var K=q.node;return K}),N=k.filter(function(q){var K=q.tabIndex;return K>=0}).map(function(q){var K=q.node;return K}),L=u7e(T,N,_,n,t);if(L===jG){var Y=dfe(d,N,vfe(r,i))||dfe(d,T,vfe(r,i));if(Y)return{node:Y};console.warn("focus-lock: cannot find any node to move focus into");return}return L===void 0?L:k[L]}};var gfe=function(e){var t=oC(e).filter(KW),n=CG(e,e,t),r=YW(NE([n],!0),!0,!0),o=NE(t,!1);return r.map(function(i){var d=i.node,y=i.index;return{node:d,index:y,lockItem:o.indexOf(d)>=0,guard:XW(d)}})};var QW=function(e,t){e&&("focus"in e&&e.focus(t),"contentWindow"in e&&e.contentWindow&&e.contentWindow.focus())};var yfe=0,bfe=!1,TG=function(e,t,n){n===void 0&&(n={});var r=c7e(e,t);if(!bfe&&r){if(yfe>2){console.error("FocusLock: focus-fighting detected. Only one focus management system could be active. See https://github.com/theKashey/focus-lock/#focus-fighting"),bfe=!0,setTimeout(function(){bfe=!1},1);return}yfe++,QW(r.node,n.focusOptions),yfe--}};function ZW(e){if(!e)return null;if(typeof WeakRef>"u")return function(){return e||null};var t=e?new WeakRef(e):null;return function(){return t?.deref()||null}}var WAt=function(e){if(!e)return null;for(var t=[],n=e;n&&n!==document.body;)t.push({current:ZW(n),parent:ZW(n.parentElement),left:ZW(n.previousElementSibling),right:ZW(n.nextElementSibling)}),n=n.parentElement;return{element:ZW(e),stack:t,ownerDocument:e.ownerDocument}},HAt=function(e){var t,n,r,o,i;if(e)for(var d=e.stack,y=e.ownerDocument,_=new Map,k=0,T=d;k-1&&(U.filter(function(Z){var fe=Z.guard,me=Z.node;return fe&&me.dataset.focusAutoGuard}).forEach(function(Z){var fe=Z.node;return fe.removeAttribute("tabIndex")}),m7e(X,U.length,1,U),m7e(X,-1,-1,U))}}}return t},b7e=function(t){MG()&&t&&(t.stopPropagation(),t.preventDefault())},RG=function(){return OG(MG)},w7e=function(t){var n=t.target,r=t.currentTarget;r.contains(n)||JAt(r,n)},eMt=function(){return null},tMt=function(t){var n=t.children;return v7e.createElement("div",{onBlur:RG,onFocus:w7e},n)};tMt.propTypes={};var O7e=function(){Sfe=!0},x7e=function(){Sfe=!1,eH="just",OG(function(){eH="meanwhile"})},rMt=function(){document.addEventListener("focusin",b7e),document.addEventListener("focusout",RG),window.addEventListener("focus",O7e),window.addEventListener("blur",x7e)},nMt=function(){document.removeEventListener("focusin",b7e),document.removeEventListener("focusout",RG),window.removeEventListener("focus",O7e),window.removeEventListener("blur",x7e)};function oMt(e){return e.filter(function(t){var n=t.disabled;return!n})}var _7e={moveFocusInside:TG,focusInside:kG,focusNextElement:wfe,focusPrevElement:Ofe,focusFirstElement:xfe,focusLastElement:_fe,captureFocusRestore:AG};function iMt(e){var t=e.slice(-1)[0];t&&!iC&&rMt();var n=iC,r=n&&t&&t.id===n.id;iC=t,n&&!r&&(n.onDeactivation(),e.filter(function(o){var i=o.id;return i===n.id}).length||n.returnFocus(!t)),t?(cv=null,(!r||n.observed!==t.observed)&&t.onActivation(_7e),MG(!0),OG(MG)):(nMt(),cv=null)}yG.assignSyncMedium(w7e);bG.assignMedium(RG);F_e.assignMedium(function(e){return e(_7e)});var S7e=K_e(oMt,iMt)(eMt);var wSr=Ek(wG,S7e);var Ya=V(ne());var lC=V(ne());var k7e=V(ne());var E7e;var I7e=function(){if(E7e)return E7e;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function aMt(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=I7e();return t&&e.setAttribute("nonce",t),e}function sMt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function lMt(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var Efe=function(){var e=0,t=null;return{add:function(n){e==0&&(t=aMt())&&(sMt(t,n),lMt(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}};var Ife=function(){var e=Efe();return function(t,n){k7e.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}};var kk=function(){var e=Ife(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t};var uMt={left:0,top:0,right:0,gap:0},kfe=function(e){return parseInt(e||"",10)||0},cMt=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[kfe(n),kfe(r),kfe(o)]},Pfe=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return uMt;var t=cMt(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}};var fMt=kk(),sC="data-scroll-locked",pMt=function(e,t,n,r){var o=e.left,i=e.top,d=e.right,y=e.gap;return n===void 0&&(n="margin"),` .`.concat(efe,` { overflow: hidden `).concat(r,`; padding-right: `).concat(y,"px ").concat(r,`; @@ -503,8 +503,8 @@ box-shadow: `,F7e=function(){return L7e.createElement(kMt,{styles:PMt})};var FE=V(ne()),B7e=function(e){return"current"in e?e.current:e};function W7e(e){var t=e.setLockProps,n=e.onEscapeKey,r=e.onClickOutside,o=e.shards,i=e.onActivation,d=e.onDeactivation,y=e.noIsolation,_=(0,FE.useState)(void 0),k=_[0],T=_[1],N=(0,FE.useRef)(null),L=(0,FE.useRef)(0);return LG.useEffect(function(){var Y=function(X){X.defaultPrevented||(X.code==="Escape"||X.key==="Escape"||X.keyCode===27)&&n&&n(X)},q=function(X){X.defaultPrevented||X.target===N.current||X instanceof MouseEvent&&X.button!==0||o&&o.map(B7e).some(function(Z){return Z&&Z.contains(X.target)||Z===X.target})||r&&r(X)},K=function(X){q(X),L.current=X.touches.length},U=function(X){L.current=X.touches.length};if(k)return document.addEventListener("keydown",Y),document.addEventListener("mousedown",q),document.addEventListener("touchstart",K),document.addEventListener("touchend",U),function(){document.removeEventListener("keydown",Y),document.removeEventListener("mousedown",q),document.removeEventListener("touchstart",K),document.removeEventListener("touchend",U)}},[k,r,n]),(0,FE.useEffect)(function(){if(k)return i&&i(k),function(){d&&d()}},[!!k]),(0,FE.useEffect)(function(){var Y=function(){return null},q=!1,K=function(X){y||(Y=N7e(I_e([X],(o||[]).map(B7e)),document.body,_G)),T(function(){return X})},U=function(){Y(),q||T(null)};return t({onMouseDown:function(X){N.current=X.target},onTouchStart:function(X){N.current=X.target},onActivation:K,onDeactivation:U}),function(){q=!0,t(!1)}},[]),LG.createElement(F7e,null)}var H7e=Ek(xG,W7e);var jMt=function(e){return rH.createElement(H7e,dh({},e))},Mfe=rH.forwardRef(function(e,t){return rH.createElement(U_e,dh({},e,{ref:t,sideCar:jMt}))});function FG(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?FG=function(n){return typeof n}:FG=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},FG(e)}var CMt=["children","clickOutsideDisables","disabled","returnFocus","noIsolation","scrollLock"];function $7e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function V7e(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function AMt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function MMt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function q7e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function BG(e){return BG=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},BG(e)}function y4(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var jk=function(e){DMt(n,e);var t=zMt(n);function n(){var r;MMt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function VG(e){return VG=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},VG(e)}function $G(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var zfe=function(e){WMt(n,e);var t=HMt(n);function n(){var r;BMt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function UG(e){return UG=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},UG(e)}function Tk(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var GG=function(e){XMt(n,e);var t=KMt(n);function n(r){var o;return GMt(this,n),o=t.call(this,r),Tk(Ck(o),"id",void 0),Tk(Ck(o),"capturedDownIds",void 0),Tk(Ck(o),"onClickOutside",function(i){var d=o.props,y=d.isDisabled,_=d.onOutsideClick;if(y){o.capturedDownIds=[];return}var k=i;if(k.euiGeneratedBy&&k.euiGeneratedBy.includes(o.id)||o.capturedDownIds.includes(o.id)){o.capturedDownIds=[];return}return o.capturedDownIds=[],_(k)}),Tk(Ck(o),"onChildClick",function(i,d){i.nativeEvent.hasOwnProperty("euiGeneratedBy")?i.nativeEvent.euiGeneratedBy.push(o.id):i.nativeEvent.euiGeneratedBy=[o.id],d&&d(i)}),Tk(Ck(o),"onChildMouseDown",function(i){o.onChildClick(i,function(d){var y=d.nativeEvent;o.capturedDownIds=y.euiGeneratedBy,o.props.onMouseDown&&o.props.onMouseDown(d),o.props.onTouchStart&&o.props.onTouchStart(d)})}),Tk(Ck(o),"onChildMouseUp",function(i){o.onChildClick(i,function(d){o.props.onMouseUp&&o.props.onMouseUp(d),o.props.onTouchEnd&&o.props.onTouchEnd(d)})}),o.id=yo()(),o.capturedDownIds=[],o}return JMt(n,[{key:"componentDidMount",value:function(){document.addEventListener("mouseup",this.onClickOutside),document.addEventListener("touchend",this.onClickOutside)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("mouseup",this.onClickOutside),document.removeEventListener("touchend",this.onClickOutside)}},{key:"render",value:function(){var o=X7e(X7e({},this.props.children.props),{onMouseDown:this.onChildMouseDown,onTouchStart:this.onChildMouseDown,onMouseUp:this.onChildMouseUp,onTouchEnd:this.onChildMouseUp}),i=fC.Children.only(this.props.children);return(0,fC.cloneElement)(i,o)}}]),n}(fC.Component);GG.propTypes={children:BE.default.element.isRequired,onOutsideClick:BE.default.func.isRequired,isDisabled:BE.default.bool,onMouseDown:BE.default.func,onMouseUp:BE.default.func,onTouchStart:BE.default.func,onTouchEnd:BE.default.func};var HEr=V(ne()),nH=V(er());var ZMt="m",Y7e=function(t){var n=t.euiTheme,r=IW(t,"plain"),o=n.size[ZMt];return{euiPopoverArrow:nt("position:absolute;",Yee(0,0),"&:before{content:'';position:absolute;",Yee(0,0),";};label:euiPopoverArrow;"),top:nt("&:before{",Ci.bottom,":-",o,";",Ci["border-left"],":",o," solid transparent;",Ci["border-right"],":",o," solid transparent;",Ci["border-top"],":",o," solid ",r,";};label:top;"),bottom:nt("&:before{",Ci.top,":-",o,";",Ci["border-left"],":",o," solid transparent;",Ci["border-right"],":",o," solid transparent;",Ci["border-bottom"],":",o," solid ",r,";};label:bottom;"),left:nt("&:before{",Ci.top,":50%;",Ci.right,":-",o,";",Ci["border-top"],":",o," solid transparent;",Ci["border-bottom"],":",o," solid transparent;",Ci["border-left"],":",o," solid ",r,";};label:left;"),right:nt("&:before{",Ci.top,":50%;",Ci.left,":-",o,";",Ci["border-top"],":",o," solid transparent;",Ci["border-bottom"],":",o," solid transparent;",Ci["border-right"],":",o," solid ",r,";};label:right;")}};var eRt=["children","position"];function Lfe(){return Lfe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rRt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var JG=function(t){var n=t.children,r=t.position,o=tRt(t,eRt),i=Jn(),d=Y7e(i),y=[d.euiPopoverArrow,d[r]];return c("div",Lfe({"data-popover-arrow":r,css:y},o),n)};JG.propTypes={className:nH.default.string,"aria-label":nH.default.string,"data-test-subj":nH.default.string,position:nH.default.any.isRequired};var Q7e=function(){return{euiPopover:nt("position:relative;vertical-align:middle;",hr("max-width","100%"),";;label:euiPopover;")}};var YG=V(ne()),Bf=V(er()),n8e=V(Ar());var i9r=V(ne()),Z0=V(er()),e8e=V(Ar());var nRt={name:"122lw0e-grow",styles:"flex-grow:1;label:grow;"},oRt={name:"1kk7odi-euiPanel",styles:"flex-grow:0;label:euiPanel;"},Z7e=function(t){var n=t.euiTheme;return{euiPanel:oRt,grow:nRt,hasShadow:nt(v4(t,"m"),";;label:hasShadow;"),hasBorder:nt("border:",n.border.thin,";;label:hasBorder;"),radius:{none:nt(";label:none;"),m:nt("border-radius:",n.border.radius.medium,";;label:m;")},isClickable:nt(X0,"{transition:box-shadow ",n.animation.fast," ",n.animation.resistance,",transform ",n.animation.fast," ",n.animation.resistance,";}&:enabled{display:block;width:100%;",uv("left"),";}&:hover,&:focus{",v4(t,"l"),";transform:translateY(-2px);cursor:pointer;};label:isClickable;")}};var iRt=["children","className","paddingSize","borderRadius","color","hasShadow","hasBorder","grow","panelRef","element"];function XG(){return XG=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lRt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ffe={none:null,s:"paddingSmall",m:"paddingMedium",l:"paddingLarge"},p9r=Yr(Ffe);var gu=function(t){var n=t.children,r=t.className,o=t.paddingSize,i=o===void 0?"m":o,d=t.borderRadius,y=d===void 0?"m":d,_=t.color,k=_===void 0?"plain":_,T=t.hasShadow,N=T===void 0?!0:T,L=t.hasBorder,Y=L===void 0?!1:L,q=t.grow,K=q===void 0?!0:q,U=t.panelRef,X=t.element,Z=sRt(t,iRt),fe=Jn(),me=!Y&&k==="plain",ye=k==="plain"||k==="transparent",ge=Z7e(fe),ae=[ge.euiPanel,K&&ge.grow,ge.radius[y],T6e()[i],j6e()[k],me&&N===!0&&ge.hasShadow,ye&&Y===!0&&ge.hasBorder,Z.onClick&&ge.isClickable],Pe=(0,e8e.default)("euiPanel","euiPanel--".concat(k),aRt({},"euiPanel--".concat(Ffe[i]),Ffe[i]),r);return Z.onClick&&X!=="div"?c("button",XG({ref:U,className:Pe,css:ae},Z),n):c("div",XG({ref:U,className:Pe,css:ae},Z),n)};gu.propTypes={element:Z0.default.oneOfType([Z0.default.oneOf(["button"]),Z0.default.oneOf(["div"])]),hasShadow:Z0.default.bool,hasBorder:Z0.default.bool,paddingSize:Z0.default.any,borderRadius:Z0.default.any,grow:Z0.default.bool,panelRef:Z0.default.any,color:Z0.default.any,className:Z0.default.string,"aria-label":Z0.default.string,"data-test-subj":Z0.default.string};var KG="s",t8e=function(t){var n=t.euiTheme;return{euiPopover__panel:nt("position:absolute;",hr("min-width","".concat(n.base*7,"px")),";",hr("max-width","calc(100vw - ".concat(n.size.xl,")")),";backface-visibility:hidden;pointer-events:none;opacity:0;transform:translateY(0) translateX(0) translateZ(0);",Qce(t,{property:"filter"})," &:focus{outline-offset:0;};label:euiPopover__panel;"),isOpen:nt("opacity:1;pointer-events:auto;",X0,"{transition:opacity ",n.animation.bounce," ",n.animation.slow,",transform ",n.animation.bounce," calc(",n.animation.slow," + 100ms);};label:isOpen;"),top:nt("transform:translateY(",n.size[KG],") translateZ(0);;label:top;"),bottom:nt("transform:translateY(-",n.size[KG],") translateZ(0);;label:bottom;"),left:nt("transform:translateX(",n.size[KG],") translateZ(0);;label:left;"),right:nt("transform:translateX(-",n.size[KG],") translateZ(0);;label:right;"),attached:{isOpen:nt("filter:none;",X0,"{transition:opacity ",n.animation.bounce," ",n.animation.slow,";};label:isOpen;"),top:nt(x_e(t),";;label:top;"),bottom:nt(v4(t,"m"),";;label:bottom;"),left:nt(";label:left;"),right:nt(";label:right;")}}};var uRt=["children","className","isOpen","isAttached","position"];function Bfe(){return Bfe=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vRt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var r8e=(0,YG.createContext)({paddingSize:"l"}),pC=function(t){var n=t.children,r=t.className,o=t.isOpen,i=t.isAttached,d=t.position,y=mRt(t,uRt),_=(0,YG.useContext)(r8e);y.paddingSize&&(_.paddingSize=y.paddingSize);var k=Jn(),T=(0,n8e.default)("euiPopover__panel",r),N=t8e(k),L=[N.euiPopover__panel,o&&N.isOpen,o&&d&&N[d]];return i&&(L=[].concat(cRt(L),[o&&N.attached.isOpen,d&&N.attached[d]])),c(r8e.Provider,{value:_},c(gu,Bfe({className:T,css:L,"data-popover-panel":!0,"data-popover-open":o||void 0},y),n))};pC.propTypes={element:Bf.default.oneOf(["div"]),hasShadow:Bf.default.bool,hasBorder:Bf.default.bool,paddingSize:Bf.default.any,borderRadius:Bf.default.any,grow:Bf.default.bool,panelRef:Bf.default.any,color:Bf.default.any,className:Bf.default.string,"aria-label":Bf.default.string,"data-test-subj":Bf.default.string,isOpen:Bf.default.bool,isAttached:Bf.default.bool,position:Bf.default.oneOfType([Bf.default.any.isRequired,Bf.default.oneOf([null])])};function ZG(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?ZG=function(n){return typeof n}:ZG=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},ZG(e)}var gRt=["anchorClassName","anchorPosition","button","buttonRef","insert","isOpen","ownFocus","children","className","closePopover","panelClassName","panelPaddingSize","panelProps","panelRef","panelStyle","popoverScreenReaderText","popoverRef","hasArrow","arrowChildren","repositionOnScroll","zIndex","attachToAnchor","display","offset","onTrapDeactivation","buffer","aria-label","aria-labelledby","container","focusTrapProps","initialFocus","tabIndex"];function dC(){return dC=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bRt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function o8e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function QG(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function tJ(e){return tJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},tJ(e)}function $l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u8e(e,t){return ARt(e)||TRt(e,t)||c8e(e,t)||CRt()}function CRt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function c8e(e,t){if(e){if(typeof e=="string")return $fe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return $fe(e,t)}}function $fe(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function FRt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hC=function(t){var n=t.size,r=n===void 0?"m":n,o=t.children,i=t.className,d=t.textTransform,y=LRt(t,DRt),_=Jn(),k=Txe(_),T=[k.euiTitle,d?k[d]:void 0,k[r]],N=(0,h8e.default)("euiTitle",i,o.props.className),L=zRt({css:T,className:N},y);return bE(o,L)};hC.propTypes={className:WE.default.string,"aria-label":WE.default.string,"data-test-subj":WE.default.string,children:WE.default.element.isRequired,size:WE.default.any,textTransform:WE.default.any,id:WE.default.string};var iH=V(ne()),ln=V(er()),rJ=V(Ar());var Z9r=V(ne()),Hi=V(er()),m8e=V(Ar());var BRt=["className","isSelected","isDisabled","color","children"];function Vfe(){return Vfe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HRt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qfe=function(t){var n=t.className,r=t.isSelected,o=r===void 0?!1:r,i=t.isDisabled,d=t.color,y=t.children,_=WRt(t,BRt),k=$Rt(o,i,y),T=(0,m8e.default)("euiCardSelect","euiCardSelect--".concat(Ufe(d,o)),n);return c(Ff,Vfe({className:T,color:d||"text",size:"xs",isDisabled:i,iconType:o?"check":void 0,role:"switch","aria-checked":o},_),k)};qfe.propTypes={href:Hi.default.string,onClick:Hi.default.func,color:Hi.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Hi.default.oneOf(["xs","s","m"]),flush:Hi.default.oneOf(["left","right","both"]),isDisabled:Hi.default.bool,isLoading:Hi.default.bool,isSelected:Hi.default.bool,target:Hi.default.string,rel:Hi.default.string,type:Hi.default.oneOf(["button","submit"]),buttonRef:Hi.default.any,contentProps:Hi.default.any,iconType:Hi.default.oneOfType([Hi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Hi.default.string.isRequired,Hi.default.elementType.isRequired]),iconSide:Hi.default.oneOf(["left","right"]),textProps:Hi.default.shape({className:Hi.default.string,"aria-label":Hi.default.string,"data-test-subj":Hi.default.string,ref:Hi.default.any,"data-text":Hi.default.string}),iconSize:Hi.default.oneOf(["s","m"]),className:Hi.default.string,"aria-label":Hi.default.string,"data-test-subj":Hi.default.string};function $Rt(e,t,n){if(n)return n;var r;return e?r=c(Mr,{token:"euiCardSelect.selected",default:"Selected"}):t?r=c(Mr,{token:"euiCardSelect.unavailable",default:"Unavailable"}):r=c(Mr,{token:"euiCardSelect.select",default:"Select"}),r}function Ufe(e,t){var n;return e?n=e:t?n="success":n="text",n}var VRt=["className","description","isDisabled","title","titleElement","titleSize","icon","image","children","footer","onClick","href","rel","target","textAlign","betaBadgeProps","layout","selectable","display","paddingSize"];function oH(){return oH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function URt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v8e={left:"euiCard--leftAligned",center:"euiCard--centerAligned",right:"euiCard--rightAligned"},mIr=Yr(v8e),g8e={vertical:"",horizontal:"euiCard--horizontal"},vIr=Yr(g8e),em=function(t){var n=t.className,r=t.description,o=t.isDisabled,i=t.title,d=t.titleElement,y=d===void 0?"span":d,_=t.titleSize,k=_===void 0?"s":_,T=t.icon,N=t.image,L=t.children,Y=t.footer,q=t.onClick,K=t.href,U=t.rel,X=t.target,Z=t.textAlign,fe=Z===void 0?"center":Z,me=t.betaBadgeProps,ye=t.layout,ge=ye===void 0?"vertical":ye,ae=t.selectable,Pe=t.display,Ne=t.paddingSize,Ye=qRt(t,VRt),Je=!K||Qp(K),Me=o||!Je,Ve=!Me&&(q||K||ae&&!ae.isDisabled),Ue=null,ht=function(An){Ue&&Ue!==An.target&&Ue.click()};if(ge==="horizontal"&&(N||Y||fe!=="center"))throw new Error('EuiCard: `layout="horizontal"` cannot be used in conjunction with `image`, `footer`, or `textAlign`.');var yt=ae?"euiCard--isSelectable--".concat(Ufe(ae.color,ae.isSelected)):void 0,Mt=(0,rJ.default)("euiCard",v8e[fe],g8e[ge],{"euiCard--isClickable":Ve,"euiCard--hasBetaBadge":me?.label,"euiCard--hasIcon":T,"euiCard--isSelectable":ae,"euiCard-isSelected":ae?.isSelected,"euiCard-isDisabled":Me},yt,n),wt=N_(),_t=r?"".concat(wt,"Description"):"",Nt;N&&ge==="vertical"&&((0,iH.isValidElement)(N)||typeof N=="string"?Nt=c("div",{className:"euiCard__image"},(0,iH.isValidElement)(N)?N:c("img",{src:N,alt:""})):Nt=null);var Rt;T&&(Rt=iH.default.cloneElement(T,{className:(0,rJ.default)(T.props.className,"euiCard__icon")}));var sr;(Nt||Rt)&&(sr=c("div",{className:"euiCard__top"},Nt,Rt));var Pt,Sr="";me!=null&&me.label&&(Sr="".concat(wt,"BetaBadge"),Pt=c("span",{className:"euiCard__betaBadgeWrapper"},c(fG,oH({id:Sr},me,{className:(0,rJ.default)("euiCard__betaBadge",me?.className)}))),Ne=Ne||"l"),ae&&Me&&ae.isDisabled===void 0&&(ae.isDisabled=Me);var Nr;ae&&(Nr=c(qfe,oH({"aria-describedby":"".concat(wt,"Title ").concat(_t)},ae,{buttonRef:function(An){Ue=An}})));var ir;!Me&&K?ir=c("a",{className:"euiCard__titleAnchor",onClick:q,href:K,target:X,"aria-describedby":_t,rel:vu({href:K,target:X,rel:U}),ref:function(An){Ue=An}},i):Me||q?ir=c("button",{className:"euiCard__titleButton",onClick:q,disabled:Me,"aria-describedby":"".concat(Sr," ").concat(_t),ref:function(An){Ue=An}},i):ir=i;var xr=y;return c(gu,oH({element:"div",className:Mt,onClick:Ve?ht:void 0,color:Me?"subdued":Pe,hasShadow:!(Me||Pe),hasBorder:Pe?!1:void 0,paddingSize:Ne},Ye),sr,c("div",{className:"euiCard__content"},c(hC,{id:"".concat(wt,"Title"),className:"euiCard__title",size:k},c(xr,null,ir)),r&&c(Wr,{id:_t,size:"s",className:"euiCard__description"},c("p",null,r)),L&&c("div",{className:"euiCard__children"},L)),Pt,ge==="vertical"&&Y&&c("div",{className:"euiCard__footer"},Y),Nr)};em.propTypes={layout:ln.default.oneOfType([ln.default.oneOf(["vertical"]),ln.default.oneOf(["horizontal"]).isRequired]),textAlign:ln.default.oneOf(["left","center","right"]),footer:ln.default.node,image:ln.default.oneOfType([ln.default.string.isRequired,ln.default.element.isRequired]),title:ln.default.any.isRequired,titleElement:ln.default.oneOf(["h2","h3","h4","h5","h6","span"]),titleSize:ln.default.oneOf(["s","xs"]),description:ln.default.any,icon:ln.default.oneOfType([ln.default.element.isRequired,ln.default.oneOf([null])]),children:ln.default.node,onClick:ln.default.oneOfType([ln.default.func.isRequired,ln.default.func.isRequired]),isDisabled:ln.default.bool,href:ln.default.string,target:ln.default.string,rel:ln.default.string,betaBadgeProps:ln.default.any,display:ln.default.any,paddingSize:ln.default.any,selectable:ln.default.shape({href:ln.default.string,onClick:ln.default.func,color:ln.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:ln.default.oneOf(["xs","s","m"]),flush:ln.default.oneOf(["left","right","both"]),isDisabled:ln.default.bool,isLoading:ln.default.bool,isSelected:ln.default.bool,target:ln.default.string,rel:ln.default.string,type:ln.default.oneOf(["button","submit"]),buttonRef:ln.default.any,contentProps:ln.default.any,iconType:ln.default.oneOfType([ln.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,ln.default.string.isRequired,ln.default.elementType.isRequired]),iconSide:ln.default.oneOf(["left","right"]),textProps:ln.default.shape({className:ln.default.string,"aria-label":ln.default.string,"data-test-subj":ln.default.string,ref:ln.default.any,"data-text":ln.default.string}),iconSize:ln.default.oneOf(["s","m"]),className:ln.default.string,"aria-label":ln.default.string,"data-test-subj":ln.default.string}),hasBorder:ln.default.bool};var b8e=V(ne()),Wf=V(er()),Kfe=V(Ar());function nJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?nJ=function(n){return typeof n}:nJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},nJ(e)}var GRt=["className","id","checked","label","onChange","type","disabled","compressed","indeterminate","inputRef","labelProps"];function oJ(){return oJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XRt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function KRt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function y8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function iJ(e){return iJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},iJ(e)}function Xfe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w8e={inList:"euiCheckbox--inList"},OIr=Yr(w8e),mC=function(e){QRt(n,e);var t=ZRt(n);function n(){var r;KRt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _8e={none:null,xs:"euiFlexGroup--gutterExtraSmall",s:"euiFlexGroup--gutterSmall",m:"euiFlexGroup--gutterMedium",l:"euiFlexGroup--gutterLarge",xl:"euiFlexGroup--gutterExtraLarge"},PIr=Yr(_8e),S8e={stretch:null,flexStart:"euiFlexGroup--alignItemsFlexStart",flexEnd:"euiFlexGroup--alignItemsFlexEnd",center:"euiFlexGroup--alignItemsCenter",baseline:"euiFlexGroup--alignItemsBaseline"},jIr=Yr(S8e),E8e={flexStart:null,flexEnd:"euiFlexGroup--justifyContentFlexEnd",center:"euiFlexGroup--justifyContentCenter",spaceBetween:"euiFlexGroup--justifyContentSpaceBetween",spaceAround:"euiFlexGroup--justifyContentSpaceAround",spaceEvenly:"euiFlexGroup--justifyContentSpaceEvenly"},CIr=Yr(E8e),I8e={row:"euiFlexGroup--directionRow",rowReverse:"euiFlexGroup--directionRowReverse",column:"euiFlexGroup--directionColumn",columnReverse:"euiFlexGroup--directionColumnReverse"},TIr=Yr(I8e),iDt=function(t){return["div","span"].includes(t)},Da=(0,O8e.forwardRef)(function(e,t){var n=e.children,r=e.className,o=e.gutterSize,i=o===void 0?"l":o,d=e.alignItems,y=d===void 0?"stretch":d,_=e.responsive,k=_===void 0?!0:_,T=e.justifyContent,N=T===void 0?"flexStart":T,L=e.direction,Y=L===void 0?"row":L,q=e.wrap,K=q===void 0?!1:q,U=e.component,X=U===void 0?"div":U,Z=nDt(e,rDt),fe=(0,x8e.default)("euiFlexGroup",_8e[i],S8e[y],E8e[N],I8e[Y],{"euiFlexGroup--responsive":k,"euiFlexGroup--wrap":K},r);if(!iDt(X))throw new Error("".concat(X," is not a valid element type. Use `div` or `span`."));return X==="span"?c("span",aJ({className:fe,ref:t},Z),n):c("div",aJ({className:fe,ref:t},Z),n)});Da.propTypes={alignItems:F3.default.oneOf(["stretch","flexStart","flexEnd","center","baseline"]),component:F3.default.oneOf(["div","span"]),direction:F3.default.oneOf(["row","rowReverse","column","columnReverse"]),gutterSize:F3.default.oneOf(["none","xs","s","m","l","xl"]),justifyContent:F3.default.oneOf(["flexStart","flexEnd","center","spaceBetween","spaceAround","spaceEvenly"]),responsive:F3.default.bool,wrap:F3.default.bool,className:F3.default.string,"aria-label":F3.default.string,"data-test-subj":F3.default.string};Da.displayName="EuiFlexGroup";var MIr=V(ne()),vC=V(er()),k8e=V(Ar());var aDt=["children","className","grow","component"];function Yfe(){return Yfe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var P8e=[1,2,3,4,5,6,7,8,9,10],Rr=function(t){var n=t.children,r=t.className,o=t.grow,i=o===void 0?!0:o,d=t.component,y=d===void 0?"div":d,_=lDt(t,aDt);cDt(i);var k=(0,k8e.default)("euiFlexItem",sDt({"euiFlexItem--flexGrowZero":!i},"euiFlexItem--flexGrow".concat(i),typeof i=="number"?P8e.indexOf(i)>=0:void 0),r);return c(y,Yfe({className:k},_),n)};Rr.propTypes={className:vC.default.string,"aria-label":vC.default.string,"data-test-subj":vC.default.string,grow:vC.default.oneOf([1,2,3,4,5,6,7,8,9,10,!0,!1,null]),component:vC.default.any};function cDt(e){var t=[null,void 0,!0,!1].concat(P8e);if(t.indexOf(e)===-1)throw new Error("Prop `grow` passed to `EuiFlexItem` must be a boolean or an integer between 1 and 10, received `".concat(e,"`"))}var yC=V(ne()),_n=V(er()),ope=V(Ar());var pJ=V(ne()),ha=V(er());var BIr=V(ne()),aH=V(er()),j8e=V(Ar());var fDt=["className","onClick","size"];function Qfe(){return Qfe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C8e={s:"euiFormControlLayoutClearButton--small",m:null},UIr=Yr(C8e),Zfe=function(t){var n=t.className,r=t.onClick,o=t.size,i=o===void 0?"m":o,d=pDt(t,fDt),y=(0,j8e.default)("euiFormControlLayoutClearButton",C8e[i],n);return c(Mr,{token:"euiFormControlLayoutClearButton.label",default:"Clear input"},function(_){return c("button",Qfe({type:"button",className:y,onClick:r,"aria-label":_},d),c(sn,{className:"euiFormControlLayoutClearButton__icon",type:"cross"}))})};Zfe.propTypes={className:aH.default.string,"aria-label":aH.default.string,"data-test-subj":aH.default.string,size:aH.default.any};var JIr=V(ne()),Yy=V(er()),T8e=V(Ar());var hDt=["className","onClick","type","iconRef","size","color"];function sJ(){return sJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lJ=function(t){var n=t.className,r=t.onClick,o=t.type,i=t.iconRef,d=t.size,y=t.color,_=mDt(t,hDt),k=(0,T8e.default)("euiFormControlLayoutCustomIcon",n,{"euiFormControlLayoutCustomIcon--clickable":r});return r?c("button",sJ({type:"button",onClick:r,className:k,ref:i},_),c(sn,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:d,type:o,color:y})):c("span",sJ({className:k,ref:i},_),c(sn,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:d,type:o,color:y}))};lJ.propTypes={className:Yy.default.string,"aria-label":Yy.default.string,"data-test-subj":Yy.default.string,type:Yy.default.oneOfType([Yy.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Yy.default.string.isRequired,Yy.default.elementType.isRequired]).isRequired,size:Yy.default.any,iconRef:Yy.default.oneOfType([Yy.default.string.isRequired,Yy.default.func.isRequired])};function uJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?uJ=function(n){return typeof n}:uJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},uJ(e)}var gDt=["ref","side"];function cJ(){return cJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function wDt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function A8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function fJ(e){return fJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},fJ(e)}function M8e(e){return!!e&&e.hasOwnProperty("type")}var tpe=function(e){xDt(n,e);var t=_Dt(n);function n(){return wDt(this,n),t.apply(this,arguments)}return ODt(n,[{key:"render",value:function(){var o=this.props,i=o.icon,d=o.isInvalid,y=o.isDropdown,_=M8e(i)&&i.side?i.side:"left",k=this.renderCustomIcon(),T=this.renderLoadingSpinner(),N=this.renderClearButton(),L=this.renderInvalidIcon(),Y=this.renderDropdownIcon(),q;k&&_==="left"&&(q=c("div",{className:"euiFormControlLayoutIcons"},k));var K;return(N||T||d||y||k&&_==="right")&&(K=c("div",{className:"euiFormControlLayoutIcons euiFormControlLayoutIcons--right"},N,T,L,_==="right"?k:void 0,Y)),c(pJ.Fragment,null,q,K)}},{key:"renderCustomIcon",value:function(){var o=this.props,i=o.icon,d=o.compressed;if(!i)return null;var y=M8e(i)?i:{type:i},_=y.ref,k=y.side,T=yDt(y,gDt);return c(lJ,cJ({size:d?"s":"m",iconRef:_},T))}},{key:"renderDropdownIcon",value:function(){var o=this.props,i=o.isDropdown,d=o.compressed;return i?c(lJ,{size:d?"s":"m",type:"arrowDown"}):null}},{key:"renderLoadingSpinner",value:function(){var o=this.props,i=o.isLoading,d=o.compressed;return i?c(Pn,{size:d?"s":"m"}):null}},{key:"renderClearButton",value:function(){var o=this.props,i=o.clear,d=o.compressed;return i?c(Zfe,cJ({size:d?"s":"m"},i)):null}},{key:"renderInvalidIcon",value:function(){var o=this.props,i=o.isInvalid,d=o.compressed;return i?c(sn,{size:d?"s":"m",color:"danger",type:"alert"}):null}}]),n}(pJ.Component);tpe.propTypes={icon:ha.default.oneOfType([ha.default.oneOfType([ha.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,ha.default.string.isRequired,ha.default.elementType.isRequired]).isRequired,ha.default.shape({type:ha.default.oneOfType([ha.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,ha.default.string.isRequired,ha.default.elementType.isRequired]).isRequired,side:ha.default.any,color:ha.default.oneOfType([ha.default.string.isRequired,ha.default.any.isRequired]),ref:ha.default.oneOfType([ha.default.string.isRequired,ha.default.func.isRequired])}).isRequired]),clear:ha.default.shape({className:ha.default.string,"aria-label":ha.default.string,"data-test-subj":ha.default.string,size:ha.default.any}),isLoading:ha.default.bool,isInvalid:ha.default.bool,isDropdown:ha.default.bool,compressed:ha.default.bool};var akr=V(ne()),tm=V(er()),R8e=V(Ar());var kDt=["type","isFocused","isInvalid","isDisabled","children","className"];function dJ(){return dJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gC=function(t){var n=t.type,r=n===void 0?"label":n,o=t.isFocused,i=t.isInvalid,d=t.isDisabled,y=t.children,_=t.className,k=PDt(t,kDt),T=(0,R8e.default)("euiFormLabel",_,{"euiFormLabel-isFocused":o,"euiFormLabel-isInvalid":i,"euiFormLabel-isDisabled":d});return r==="legend"?c("legend",dJ({className:T},k),y):c("label",dJ({className:T},k),y)};gC.propTypes={type:tm.default.oneOfType([tm.default.oneOfType([tm.default.oneOf(["label"]),tm.default.oneOf(["label","legend"])]),tm.default.oneOfType([tm.default.oneOf(["legend"]).isRequired,tm.default.oneOf(["label","legend"])])]),isFocused:tm.default.bool,isInvalid:tm.default.bool,isDisabled:tm.default.bool,className:tm.default.string,"aria-label":tm.default.string,"data-test-subj":tm.default.string};function hJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?hJ=function(n){return typeof n}:hJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},hJ(e)}var CDt=["children","icon","clear","fullWidth","isLoading","isDisabled","compressed","className","prepend","append","readOnly","isInvalid","isDropdown","inputId"];function rpe(){return rpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ADt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function MDt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function D8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function mJ(e){return mJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},mJ(e)}var bC=function(e){DDt(n,e);var t=zDt(n);function n(){return MDt(this,n),t.apply(this,arguments)}return RDt(n,[{key:"render",value:function(){var o=this.props,i=o.children,d=o.icon,y=o.clear,_=o.fullWidth,k=o.isLoading,T=o.isDisabled,N=o.compressed,L=o.className,Y=o.prepend,q=o.append,K=o.readOnly,U=o.isInvalid,X=o.isDropdown,Z=o.inputId,fe=TDt(o,CDt),me=(0,ope.default)("euiFormControlLayout",{"euiFormControlLayout--fullWidth":_,"euiFormControlLayout--compressed":N,"euiFormControlLayout--readOnly":K,"euiFormControlLayout--group":Y||q,"euiFormControlLayout-isDisabled":T},L),ye=this.renderSideNode("prepend",Y,Z),ge=this.renderSideNode("append",q,Z);return c("div",rpe({className:me},fe),ye,c("div",{className:"euiFormControlLayout__childrenWrapper"},i,c(tpe,{icon:d,clear:y,compressed:N,isLoading:k,isInvalid:U,isDropdown:!K&&!T&&X})),ge)}},{key:"renderSideNode",value:function(o,i,d){var y=this;if(i){if(typeof i=="string")return this.createFormLabel(o,i,d);var _=yC.default.Children.map(i,function(k,T){return typeof k=="string"?y.createFormLabel(o,k,d):y.createSideNode(o,k,T)});return _}}},{key:"createFormLabel",value:function(o,i,d){return c(gC,{htmlFor:d,className:"euiFormControlLayout__".concat(o)},i)}},{key:"createSideNode",value:function(o,i,d){return(0,yC.cloneElement)(i,{className:(0,ope.default)("euiFormControlLayout__".concat(o),i.props.className),key:d})}}]),n}(yC.Component);bC.propTypes={className:_n.default.string,"aria-label":_n.default.string,"data-test-subj":_n.default.string,prepend:_n.default.oneOfType([_n.default.oneOfType([_n.default.string.isRequired,_n.default.element.isRequired]).isRequired,_n.default.arrayOf(_n.default.oneOfType([_n.default.string.isRequired,_n.default.element.isRequired]).isRequired).isRequired]),append:_n.default.oneOfType([_n.default.oneOfType([_n.default.string.isRequired,_n.default.element.isRequired]).isRequired,_n.default.arrayOf(_n.default.oneOfType([_n.default.string.isRequired,_n.default.element.isRequired]).isRequired).isRequired]),children:_n.default.node,icon:_n.default.oneOfType([_n.default.oneOfType([_n.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,_n.default.string.isRequired,_n.default.elementType.isRequired]).isRequired,_n.default.shape({type:_n.default.oneOfType([_n.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,_n.default.string.isRequired,_n.default.elementType.isRequired]).isRequired,side:_n.default.any,color:_n.default.oneOfType([_n.default.string.isRequired,_n.default.any.isRequired]),ref:_n.default.oneOfType([_n.default.string.isRequired,_n.default.func.isRequired])}).isRequired]),clear:_n.default.shape({className:_n.default.string,"aria-label":_n.default.string,"data-test-subj":_n.default.string,size:_n.default.any}),fullWidth:_n.default.bool,isLoading:_n.default.bool,isDisabled:_n.default.bool,compressed:_n.default.bool,readOnly:_n.default.bool,isInvalid:_n.default.bool,isDropdown:_n.default.bool,inputId:_n.default.string};var b4=V(ne()),Ak=V(er());function BDt(e){return e!=null&&e.hasOwnProperty("current")}var vJ=function(t){var n=t.isInvalid,r=t.children,o=(0,b4.useRef)(null),i=b4.Children.only(r),d=i.ref,y=(0,b4.useCallback)(function(_){o.current=_,typeof d=="function"?d(_):BDt(d)&&(d.current=_)},[d]);return(0,b4.useEffect)(function(){o.current===null||typeof o.current.setCustomValidity!="function"||(n?o.current.setCustomValidity("Invalid"):o.current.setCustomValidity(""))}),(0,b4.cloneElement)(i,{ref:y,"aria-invalid":n})};vJ.propTypes={className:Ak.default.string,"aria-label":Ak.default.string,"data-test-subj":Ak.default.string,isInvalid:Ak.default.bool,children:Ak.default.shape({ref:Ak.default.any}).isRequired};function z8e(e){var t=e.icon,n=e.clear,r=e.isLoading,o=e.isInvalid,i=e.isDropdown,d=[t,n,o,r,i].filter(function(y){return y===!0}).length;return d>0?"euiFormControlLayout--".concat(d,"icons"):void 0}var L8e=V(ne()),ai=V(er()),F8e=V(Ar());var WDt={isEventSupported:function(t,n){return"on".concat(t)in n}},ipe=Object.freeze(WDt);function gJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?gJ=function(n){return typeof n}:gJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},gJ(e)}var HDt=["className","id","name","placeholder","isInvalid","fullWidth","isLoading","inputRef","incremental","compressed","onSearch","isClearable","append","prepend"];function spe(){return spe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function qDt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function N8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function yJ(e){return yJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},yJ(e)}function Rk(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ape=!1,sH=function(e){GDt(n,e);var t=JDt(n);function n(){var r;qDt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wJ=function(t){var n=t.children,r=t.className,o=QDt(t,YDt),i=(0,B8e.default)("euiFormErrorText",r);return c("div",upe({className:i,"aria-live":"polite"},o),n)};wJ.propTypes={className:bJ.default.string,"aria-label":bJ.default.string,"data-test-subj":bJ.default.string};var Wkr=V(ne()),OJ=V(er()),W8e=V(Ar());var ezt=["children","className"];function cpe(){return cpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rzt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xJ=function(t){var n=t.children,r=t.className,o=tzt(t,ezt),i=(0,W8e.default)("euiFormHelpText",r);return c("div",cpe({className:i},o),n)};xJ.propTypes={className:OJ.default.string,"aria-label":OJ.default.string,"data-test-subj":OJ.default.string};var HE=V(ne()),ma=V(er()),hpe=V(Ar());function _J(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_J=function(n){return typeof n}:_J=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},_J(e)}var nzt=["children","helpText","isInvalid","error","label","labelType","labelAppend","hasEmptyLabelSpace","fullWidth","className","describedByIds","display","hasChildLabel","id","isDisabled"];function ozt(e){return lzt(e)||szt(e)||azt(e)||izt()}function izt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function azt(e,t){if(e){if(typeof e=="string")return ppe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ppe(e,t)}}function szt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function lzt(e){if(Array.isArray(e))return ppe(e)}function ppe(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function czt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function fzt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function $8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function EJ(e){return EJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},EJ(e)}function uH(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var V8e={row:null,rowCompressed:"euiFormRow--compressed",columnCompressed:"euiFormRow--compressed euiFormRow--horizontal",center:null,centerCompressed:"euiFormRow--compressed",columnCompressedSwitch:"euiFormRow--compressed euiFormRow--horizontal euiFormRow--hasSwitch"},ePr=Yr(V8e),w4=function(e){dzt(n,e);var t=hzt(n);function n(){var r;fzt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d0&&(wt["aria-describedby"]=_t.join(" "));var Nt=HE.Children.only(y),Rt=(0,HE.cloneElement)(Nt,fpe({id:ae,disabled:(o=(i=Nt.props.disabled)!==null&&i!==void 0?i:Nt.props.isDisabled)!==null&&o!==void 0?o:ye,onFocus:this.onFocus,onBlur:this.onBlur},wt)),sr=(0,hpe.default)("euiFormRow__fieldWrapper",{euiFormRow__fieldWrapperDisplayOnly:Z.startsWith("center")}),Pt={className:Ne,id:"".concat(ae,"-row")},Sr=c(HE.default.Fragment,null,Ue,c("div",{className:sr},Rt,Me,Ye));return L==="legend"?c("fieldset",lH({},Pt,ge),Sr):c("div",lH({},Pt,ge),Sr)}}]),n}(HE.Component);uH(w4,"defaultProps",{display:"row",hasEmptyLabelSpace:!1,fullWidth:!1,describedByIds:[],labelType:"label",hasChildLabel:!0});w4.propTypes={labelType:ma.default.oneOfType([ma.default.oneOf(["label"]),ma.default.oneOf(["legend"])]),className:ma.default.string,"aria-label":ma.default.string,"data-test-subj":ma.default.string,display:ma.default.oneOf(["row","rowCompressed","columnCompressed","center","centerCompressed","columnCompressedSwitch"]),hasEmptyLabelSpace:ma.default.bool,fullWidth:ma.default.bool,describedByIds:ma.default.arrayOf(ma.default.string.isRequired),hasChildLabel:ma.default.bool,children:ma.default.element.isRequired,label:ma.default.node,labelAppend:ma.default.any,id:ma.default.string,isInvalid:ma.default.bool,error:ma.default.oneOfType([ma.default.node.isRequired,ma.default.arrayOf(ma.default.node.isRequired).isRequired]),helpText:ma.default.oneOfType([ma.default.node.isRequired,ma.default.arrayOf(ma.default.node.isRequired).isRequired]),isDisabled:ma.default.bool};var TJ=V(ne()),Hf=V(er()),bpe=V(Ar());var PJ=V(ne()),bu=V(er()),vpe=V(Ar());var gzt=["children","className","hasPanel","icon","buttonRef","disabled","layoutAlign","toolTipTitle","toolTipContent","toolTipPosition","href","target","rel","size"];function IJ(){return IJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bzt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function wzt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function q8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function kJ(e){return kJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},kJ(e)}var U8e={s:"euiContextMenuItem--small",m:null},fPr=Yr(U8e),G8e={center:null,top:"euiContextMenu__itemLayout--top",bottom:"euiContextMenu__itemLayout--bottom"},pPr=Yr(G8e),B3=function(e){xzt(n,e);var t=_zt(n);function n(){return wzt(this,n),t.apply(this,arguments)}return Ozt(n,[{key:"render",value:function(){var o=this.props,i=o.children,d=o.className,y=o.hasPanel,_=o.icon,k=o.buttonRef,T=o.disabled,N=o.layoutAlign,L=N===void 0?"center":N,Y=o.toolTipTitle,q=o.toolTipContent,K=o.toolTipPosition,U=K===void 0?"right":K,X=o.href,Z=o.target,fe=o.rel,me=o.size,ye=yzt(o,gzt),ge,ae=!X||Qp(X),Pe=T||!ae;if(_)switch(cH(_)){case"string":ge=c(sn,{type:_,size:"m",className:"euiContextMenu__icon",color:"inherit"});break;default:ge=(0,PJ.cloneElement)(_,{className:"euiContextMenu__icon"})}var Ne;y&&(Ne=c(sn,{type:"arrowRight",size:"m",className:"euiContextMenu__arrow"}));var Ye=(0,vpe.default)("euiContextMenuItem",me&&U8e[me],d,{"euiContextMenuItem-isDisabled":Pe}),Je=(0,vpe.default)("euiContextMenu__itemLayout",G8e[L]),Me=c("span",{className:Je},ge,c("span",{className:"euiContextMenuItem__text"},i),Ne),Ve;if(X&&!Pe){var Ue=vu({href:X,target:Z,rel:fe});Ve=c("a",IJ({className:Ye,href:X,target:Z,rel:Ue,ref:k},ye),Me)}else Ve=c("button",IJ({disabled:Pe,className:Ye,type:"button",ref:k},ye),Me);return q?c(Y0,{title:Y||null,content:q,anchorClassName:"eui-displayBlock",position:U},Ve):Ve}}]),n}(PJ.Component);B3.propTypes={className:bu.default.string,"aria-label":bu.default.string,"data-test-subj":bu.default.string,icon:bu.default.oneOfType([bu.default.element.isRequired,bu.default.string.isRequired,bu.default.any.isRequired]),hasPanel:bu.default.bool,disabled:bu.default.bool,onClick:bu.default.func,buttonRef:bu.default.any,toolTipContent:bu.default.node,toolTipTitle:bu.default.node,toolTipPosition:bu.default.oneOf(["top","right","bottom","left"]),href:bu.default.string,target:bu.default.string,rel:bu.default.string,layoutAlign:bu.default.oneOf(["center","top","bottom"]),size:bu.default.oneOf(["s","m"])};function jJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?jJ=function(n){return typeof n}:jJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},jJ(e)}var kzt=["children","className","onClose","title","onHeightChange","transitionType","transitionDirection","onTransitionComplete","onUseKeyboardToNavigate","items","initialFocusedItemIndex","showNextPanel","showPreviousPanel","size"];function gpe(){return gpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jzt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Czt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function J8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function CJ(e){return CJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},CJ(e)}function H3(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var K8e={s:"euiContextMenuPanelTitle--small",m:null},xPr=Yr(K8e),X8e={next:{in:"euiContextMenuPanel-txInLeft",out:"euiContextMenuPanel-txOutLeft"},previous:{in:"euiContextMenuPanel-txInRight",out:"euiContextMenuPanel-txOutRight"}},K_=function(e){Azt(n,e);var t=Mzt(n);function n(r){var o;return Czt(this,n),o=t.call(this,r),H3(W3(o),"_isMounted",!1),H3(W3(o),"backButton",null),H3(W3(o),"panel",null),H3(W3(o),"initialPopoverParent",null),H3(W3(o),"findMenuItems",function(){var i;if(o.panel&&(i=o.props.items)!==null&&i!==void 0&&i.length&&!o.state.menuItems.length){var d=kye(o.panel);d.length&&o.setState({menuItems:d})}}),H3(W3(o),"focusMenuItem",function(i){var d,y=i==="up"?-1:1,_;o.state.focusedItemIndex===void 0?_=i==="up"?o.state.menuItems.length-1:0:(_=o.state.focusedItemIndex+y,_<0?_=o.state.menuItems.length-1:_===o.state.menuItems.length&&(_=0)),o.setState({focusedItemIndex:_}),(d=o.state.menuItems[_])===null||d===void 0||d.focus()}),H3(W3(o),"onKeyDown",function(i){var d=o.props,y=d.items,_=d.onClose,k=d.showPreviousPanel;if(_&&(y!=null&&y.length||document.activeElement===o.backButton||document.activeElement===o.panel)&&i.key===a4.ARROW_LEFT&&k&&(i.preventDefault(),i.stopPropagation(),k(),o.props.onUseKeyboardToNavigate&&o.props.onUseKeyboardToNavigate()),y!=null&&y.length)switch(i.key){case a4.TAB:requestAnimationFrame(function(){var T=o.state.menuItems.indexOf(document.activeElement);o.setState({focusedItemIndex:T>=0&&T=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lzt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fzt={none:null,xs:"marginXSmall",s:"marginSmall",m:"marginMedium",l:"marginLarge",xl:"marginXLarge",xxl:"marginXXLarge"},OC=function(t){var n,r=t.className,o=t.size,i=o===void 0?"full":o,d=t.margin,y=d===void 0?"l":d,_=Nzt(t,zzt),k=Jn(),T=Y8e(k),N=(0,Z8e.default)("euiHorizontalRule",(n={},Q8e(n,"euiHorizontalRule--".concat(i),i),Q8e(n,"euiHorizontalRule--".concat(Fzt[y]),y&&y!=="none"),n),r),L=[T.euiHorizontalRule,T[i],T[y]];return c("hr",wpe({css:L,className:N},_))};OC.propTypes={size:wC.default.any,margin:wC.default.any,className:wC.default.string,"aria-label":wC.default.string,"data-test-subj":wC.default.string};var MJ=V(ne()),$f=V(er()),Ope=V(Ar());var Bzt=["label","id","checked","disabled","compressed","onChange","className","showLabel","type","labelProps"];function AJ(){return AJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hzt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dk=function(t){var n=t.label,r=t.id,o=t.checked,i=t.disabled,d=t.compressed,y=t.onChange,_=t.className,k=t.showLabel,T=k===void 0?!0:k,N=t.type,L=N===void 0?"button":N,Y=t.labelProps,q=Wzt(t,Bzt),K=N_({conditionalId:r}),U=N_({conditionalId:Y?.id}),X=(0,MJ.useCallback)(function(me){if(!i){var ye=me;ye.target.checked=!o,y(ye)}},[o,i,y]),Z=(0,Ope.default)("euiSwitch",{"euiSwitch--compressed":d},_),fe=(0,Ope.default)("euiSwitch__label",Y?.className);return T===!1&&typeof n!="string"&&console.warn("EuiSwitch `label` must be a string when `showLabel` is false."),c("div",{className:Z},c("button",AJ({id:K,"aria-checked":o||!1,className:"euiSwitch__button",role:"switch",type:L,disabled:i,onClick:X,"aria-label":T?void 0:n,"aria-labelledby":T?U:void 0},q),c("span",{className:"euiSwitch__body"},c("span",{className:"euiSwitch__thumb"}),c("span",{className:"euiSwitch__track"},!d&&c(MJ.default.Fragment,null,c(sn,{type:"cross",size:"m",className:"euiSwitch__icon"}),c(sn,{type:"check",size:"m",className:"euiSwitch__icon euiSwitch__icon--checked"}))))),T&&c("span",AJ({},Y,{className:fe,id:U,onClick:X}),n))};Dk.propTypes={className:$f.default.string,"aria-label":$f.default.string,"data-test-subj":$f.default.string,showLabel:$f.default.bool,label:$f.default.oneOfType([$f.default.node.isRequired,$f.default.string.isRequired]).isRequired,checked:$f.default.bool.isRequired,onChange:$f.default.func.isRequired,disabled:$f.default.bool,compressed:$f.default.bool,type:$f.default.oneOf(["submit","reset","button"]),labelProps:$f.default.shape({className:$f.default.string,"aria-label":$f.default.string,"data-test-subj":$f.default.string})};function xpe(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}var eSe=Number.isNaN||function(t){return typeof t=="number"&&t!==t};function $zt(e,t){return!!(e===t||eSe(e)&&eSe(t))}function Vzt(e,t){if(e.length!==t.length)return!1;for(var n=0;n=t?e.call(null):o.id=requestAnimationFrame(r)}var o={id:requestAnimationFrame(r)};return o}var Spe=-1;function nSe(e){if(e===void 0&&(e=!1),Spe===-1||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),Spe=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return Spe}var xC=null;function oSe(e){if(e===void 0&&(e=!1),xC===null||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?xC="positive-descending":(t.scrollLeft=1,t.scrollLeft===0?xC="negative":xC="positive-ascending"),document.body.removeChild(t),xC}return xC}var Jzt=150,Xzt=function(t,n){return t};function Kzt(e){var t,n=e.getItemOffset,r=e.getEstimatedTotalSize,o=e.getItemSize,i=e.getOffsetForIndexAndAlignment,d=e.getStartIndexForOffset,y=e.getStopIndexForStartIndex,_=e.initInstanceProps,k=e.shouldResetStyleCacheOnItemSizeChange,T=e.validateProps;return t=function(N){Q0(L,N);function L(q){var K;return K=N.call(this,q)||this,K._instanceProps=_(K.props,xpe(K)),K._outerRef=void 0,K._resetIsScrollingTimeoutId=null,K.state={instance:xpe(K),isScrolling:!1,scrollDirection:"forward",scrollOffset:typeof K.props.initialScrollOffset=="number"?K.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},K._callOnItemsRendered=void 0,K._callOnItemsRendered=RJ(function(U,X,Z,fe){return K.props.onItemsRendered({overscanStartIndex:U,overscanStopIndex:X,visibleStartIndex:Z,visibleStopIndex:fe})}),K._callOnScroll=void 0,K._callOnScroll=RJ(function(U,X,Z){return K.props.onScroll({scrollDirection:U,scrollOffset:X,scrollUpdateWasRequested:Z})}),K._getItemStyle=void 0,K._getItemStyle=function(U){var X=K.props,Z=X.direction,fe=X.itemSize,me=X.layout,ye=K._getItemStyleCache(k&&fe,k&&me,k&&Z),ge;if(ye.hasOwnProperty(U))ge=ye[U];else{var ae=n(K.props,U,K._instanceProps),Pe=o(K.props,U,K._instanceProps),Ne=Z==="horizontal"||me==="horizontal",Ye=Z==="rtl",Je=Ne?ae:0;ye[U]=ge={position:"absolute",left:Ye?void 0:Je,right:Ye?Je:void 0,top:Ne?0:ae,height:Ne?"100%":Pe,width:Ne?Pe:"100%"}}return ge},K._getItemStyleCache=void 0,K._getItemStyleCache=RJ(function(U,X,Z){return{}}),K._onScrollHorizontal=function(U){var X=U.currentTarget,Z=X.clientWidth,fe=X.scrollLeft,me=X.scrollWidth;K.setState(function(ye){if(ye.scrollOffset===fe)return null;var ge=K.props.direction,ae=fe;if(ge==="rtl")switch(oSe()){case"negative":ae=-fe;break;case"positive-descending":ae=me-Z-fe;break}return ae=Math.max(0,Math.min(ae,me-Z)),{isScrolling:!0,scrollDirection:ye.scrollOffsetge.clientWidth?nSe():0:ye=ge.scrollHeight>ge.clientHeight?nSe():0}this.scrollTo(i(this.props,K,U,me,this._instanceProps,ye))},Y.componentDidMount=function(){var K=this.props,U=K.direction,X=K.initialScrollOffset,Z=K.layout;if(typeof X=="number"&&this._outerRef!=null){var fe=this._outerRef;U==="horizontal"||Z==="horizontal"?fe.scrollLeft=X:fe.scrollTop=X}this._callPropsCallbacks()},Y.componentDidUpdate=function(){var K=this.props,U=K.direction,X=K.layout,Z=this.state,fe=Z.scrollOffset,me=Z.scrollUpdateWasRequested;if(me&&this._outerRef!=null){var ye=this._outerRef;if(U==="horizontal"||X==="horizontal")if(U==="rtl")switch(oSe()){case"negative":ye.scrollLeft=-fe;break;case"positive-ascending":ye.scrollLeft=fe;break;default:var ge=ye.clientWidth,ae=ye.scrollWidth;ye.scrollLeft=ae-ge-fe;break}else ye.scrollLeft=fe;else ye.scrollTop=fe}this._callPropsCallbacks()},Y.componentWillUnmount=function(){this._resetIsScrollingTimeoutId!==null&&rSe(this._resetIsScrollingTimeoutId)},Y.render=function(){var K=this.props,U=K.children,X=K.className,Z=K.direction,fe=K.height,me=K.innerRef,ye=K.innerElementType,ge=K.innerTagName,ae=K.itemCount,Pe=K.itemData,Ne=K.itemKey,Ye=Ne===void 0?Xzt:Ne,Je=K.layout,Me=K.outerElementType,Ve=K.outerTagName,Ue=K.style,ht=K.useIsScrolling,yt=K.width,Mt=this.state.isScrolling,wt=Z==="horizontal"||Je==="horizontal",_t=wt?this._onScrollHorizontal:this._onScrollVertical,Nt=this._getRangeToRender(),Rt=Nt[0],sr=Nt[1],Pt=[];if(ae>0)for(var Sr=Rt;Sr<=sr;Sr++)Pt.push((0,_C.createElement)(U,{data:Pe,key:Ye(Sr,Pe),index:Sr,isScrolling:ht?Mt:void 0,style:this._getItemStyle(Sr)}));var Nr=r(this.props,this._instanceProps);return(0,_C.createElement)(Me||Ve||"div",{className:X,onScroll:_t,ref:this._outerRefSetter,style:so({position:"relative",height:fe,width:yt,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:Z},Ue)},(0,_C.createElement)(ye||ge||"div",{children:Pt,ref:me,style:{height:wt?"100%":Nr,pointerEvents:Mt?"none":void 0,width:wt?Nr:"100%"}}))},Y._callPropsCallbacks=function(){if(typeof this.props.onItemsRendered=="function"){var K=this.props.itemCount;if(K>0){var U=this._getRangeToRender(),X=U[0],Z=U[1],fe=U[2],me=U[3];this._callOnItemsRendered(X,Z,fe,me)}}if(typeof this.props.onScroll=="function"){var ye=this.state,ge=ye.scrollDirection,ae=ye.scrollOffset,Pe=ye.scrollUpdateWasRequested;this._callOnScroll(ge,ae,Pe)}},Y._getRangeToRender=function(){var K=this.props,U=K.itemCount,X=K.overscanCount,Z=this.state,fe=Z.isScrolling,me=Z.scrollDirection,ye=Z.scrollOffset;if(U===0)return[0,0,0,0];var ge=d(this.props,ye,this._instanceProps),ae=y(this.props,ge,ye,this._instanceProps),Pe=!fe||me==="backward"?Math.max(1,X):1,Ne=!fe||me==="forward"?Math.max(1,X):1;return[Math.max(0,ge-Pe),Math.max(0,Math.min(U-1,ae+Ne)),ge,ae]},L}(_C.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var Yzt=function(t,n){var r=t.children,o=t.direction,i=t.height,d=t.layout,y=t.innerTagName,_=t.outerTagName,k=t.width,T=n.instance;if(!1){var N;switch(o){case"horizontal":case"vertical":case"ltr":case"rtl":default:}switch(d){case"horizontal":case"vertical":default:}}};var DJ=Kzt({getItemOffset:function(t,n){var r=t.itemSize;return n*r},getItemSize:function(t,n){var r=t.itemSize;return r},getEstimatedTotalSize:function(t){var n=t.itemCount,r=t.itemSize;return r*n},getOffsetForIndexAndAlignment:function(t,n,r,o,i,d){var y=t.direction,_=t.height,k=t.itemCount,T=t.itemSize,N=t.layout,L=t.width,Y=y==="horizontal"||N==="horizontal",q=Y?L:_,K=Math.max(0,k*T-q),U=Math.min(K,n*T),X=Math.max(0,n*T-q+T+d);switch(r==="smart"&&(o>=X-q&&o<=U+q?r="auto":r="center"),r){case"start":return U;case"end":return X;case"center":{var Z=Math.round(X+(U-X)/2);return ZK+Math.floor(q/2)?K:Z}case"auto":default:return o>=X&&o<=U?o:oe.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function FRt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var hC=function(t){var n=t.size,r=n===void 0?"m":n,o=t.children,i=t.className,d=t.textTransform,y=LRt(t,DRt),_=Jn(),k=Txe(_),T=[k.euiTitle,d?k[d]:void 0,k[r]],N=(0,h8e.default)("euiTitle",i,o.props.className),L=zRt({css:T,className:N},y);return bE(o,L)};hC.propTypes={className:WE.default.string,"aria-label":WE.default.string,"data-test-subj":WE.default.string,children:WE.default.element.isRequired,size:WE.default.any,textTransform:WE.default.any,id:WE.default.string};var iH=V(ne()),ln=V(er()),rJ=V(Ar());var Z9r=V(ne()),Hi=V(er()),m8e=V(Ar());var BRt=["className","isSelected","isDisabled","color","children"];function Vfe(){return Vfe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function HRt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var qfe=function(t){var n=t.className,r=t.isSelected,o=r===void 0?!1:r,i=t.isDisabled,d=t.color,y=t.children,_=WRt(t,BRt),k=$Rt(o,i,y),T=(0,m8e.default)("euiCardSelect","euiCardSelect--".concat(Ufe(d,o)),n);return c(Ff,Vfe({className:T,color:d||"text",size:"xs",isDisabled:i,iconType:o?"check":void 0,role:"switch","aria-checked":o},_),k)};qfe.propTypes={href:Hi.default.string,onClick:Hi.default.func,color:Hi.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Hi.default.oneOf(["xs","s","m"]),flush:Hi.default.oneOf(["left","right","both"]),isDisabled:Hi.default.bool,isLoading:Hi.default.bool,isSelected:Hi.default.bool,target:Hi.default.string,rel:Hi.default.string,type:Hi.default.oneOf(["button","submit"]),buttonRef:Hi.default.any,contentProps:Hi.default.any,iconType:Hi.default.oneOfType([Hi.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Hi.default.string.isRequired,Hi.default.elementType.isRequired]),iconSide:Hi.default.oneOf(["left","right"]),textProps:Hi.default.shape({className:Hi.default.string,"aria-label":Hi.default.string,"data-test-subj":Hi.default.string,ref:Hi.default.any,"data-text":Hi.default.string}),iconSize:Hi.default.oneOf(["s","m"]),className:Hi.default.string,"aria-label":Hi.default.string,"data-test-subj":Hi.default.string};function $Rt(e,t,n){if(n)return n;var r;return e?r=c(Mr,{token:"euiCardSelect.selected",default:"Selected"}):t?r=c(Mr,{token:"euiCardSelect.unavailable",default:"Unavailable"}):r=c(Mr,{token:"euiCardSelect.select",default:"Select"}),r}function Ufe(e,t){var n;return e?n=e:t?n="success":n="text",n}var VRt=["className","description","isDisabled","title","titleElement","titleSize","icon","image","children","footer","onClick","href","rel","target","textAlign","betaBadgeProps","layout","selectable","display","paddingSize"];function oH(){return oH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function URt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var v8e={left:"euiCard--leftAligned",center:"euiCard--centerAligned",right:"euiCard--rightAligned"},mIr=Yr(v8e),g8e={vertical:"",horizontal:"euiCard--horizontal"},vIr=Yr(g8e),em=function(t){var n=t.className,r=t.description,o=t.isDisabled,i=t.title,d=t.titleElement,y=d===void 0?"span":d,_=t.titleSize,k=_===void 0?"s":_,T=t.icon,N=t.image,L=t.children,Y=t.footer,q=t.onClick,K=t.href,U=t.rel,X=t.target,Z=t.textAlign,fe=Z===void 0?"center":Z,me=t.betaBadgeProps,ye=t.layout,ge=ye===void 0?"vertical":ye,ae=t.selectable,Pe=t.display,Ne=t.paddingSize,Ye=qRt(t,VRt),Je=!K||Qp(K),Me=o||!Je,Ve=!Me&&(q||K||ae&&!ae.isDisabled),Ue=null,ht=function(An){Ue&&Ue!==An.target&&Ue.click()};if(ge==="horizontal"&&(N||Y||fe!=="center"))throw new Error('EuiCard: `layout="horizontal"` cannot be used in conjunction with `image`, `footer`, or `textAlign`.');var yt=ae?"euiCard--isSelectable--".concat(Ufe(ae.color,ae.isSelected)):void 0,Rt=(0,rJ.default)("euiCard",v8e[fe],g8e[ge],{"euiCard--isClickable":Ve,"euiCard--hasBetaBadge":me?.label,"euiCard--hasIcon":T,"euiCard--isSelectable":ae,"euiCard-isSelected":ae?.isSelected,"euiCard-isDisabled":Me},yt,n),wt=N_(),_t=r?"".concat(wt,"Description"):"",Nt;N&&ge==="vertical"&&((0,iH.isValidElement)(N)||typeof N=="string"?Nt=c("div",{className:"euiCard__image"},(0,iH.isValidElement)(N)?N:c("img",{src:N,alt:""})):Nt=null);var At;T&&(At=iH.default.cloneElement(T,{className:(0,rJ.default)(T.props.className,"euiCard__icon")}));var ir;(Nt||At)&&(ir=c("div",{className:"euiCard__top"},Nt,At));var Pt,Sr="";me!=null&&me.label&&(Sr="".concat(wt,"BetaBadge"),Pt=c("span",{className:"euiCard__betaBadgeWrapper"},c(fG,oH({id:Sr},me,{className:(0,rJ.default)("euiCard__betaBadge",me?.className)}))),Ne=Ne||"l"),ae&&Me&&ae.isDisabled===void 0&&(ae.isDisabled=Me);var Nr;ae&&(Nr=c(qfe,oH({"aria-describedby":"".concat(wt,"Title ").concat(_t)},ae,{buttonRef:function(An){Ue=An}})));var ar;!Me&&K?ar=c("a",{className:"euiCard__titleAnchor",onClick:q,href:K,target:X,"aria-describedby":_t,rel:vu({href:K,target:X,rel:U}),ref:function(An){Ue=An}},i):Me||q?ar=c("button",{className:"euiCard__titleButton",onClick:q,disabled:Me,"aria-describedby":"".concat(Sr," ").concat(_t),ref:function(An){Ue=An}},i):ar=i;var xr=y;return c(gu,oH({element:"div",className:Rt,onClick:Ve?ht:void 0,color:Me?"subdued":Pe,hasShadow:!(Me||Pe),hasBorder:Pe?!1:void 0,paddingSize:Ne},Ye),ir,c("div",{className:"euiCard__content"},c(hC,{id:"".concat(wt,"Title"),className:"euiCard__title",size:k},c(xr,null,ar)),r&&c(Wr,{id:_t,size:"s",className:"euiCard__description"},c("p",null,r)),L&&c("div",{className:"euiCard__children"},L)),Pt,ge==="vertical"&&Y&&c("div",{className:"euiCard__footer"},Y),Nr)};em.propTypes={layout:ln.default.oneOfType([ln.default.oneOf(["vertical"]),ln.default.oneOf(["horizontal"]).isRequired]),textAlign:ln.default.oneOf(["left","center","right"]),footer:ln.default.node,image:ln.default.oneOfType([ln.default.string.isRequired,ln.default.element.isRequired]),title:ln.default.any.isRequired,titleElement:ln.default.oneOf(["h2","h3","h4","h5","h6","span"]),titleSize:ln.default.oneOf(["s","xs"]),description:ln.default.any,icon:ln.default.oneOfType([ln.default.element.isRequired,ln.default.oneOf([null])]),children:ln.default.node,onClick:ln.default.oneOfType([ln.default.func.isRequired,ln.default.func.isRequired]),isDisabled:ln.default.bool,href:ln.default.string,target:ln.default.string,rel:ln.default.string,betaBadgeProps:ln.default.any,display:ln.default.any,paddingSize:ln.default.any,selectable:ln.default.shape({href:ln.default.string,onClick:ln.default.func,color:ln.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:ln.default.oneOf(["xs","s","m"]),flush:ln.default.oneOf(["left","right","both"]),isDisabled:ln.default.bool,isLoading:ln.default.bool,isSelected:ln.default.bool,target:ln.default.string,rel:ln.default.string,type:ln.default.oneOf(["button","submit"]),buttonRef:ln.default.any,contentProps:ln.default.any,iconType:ln.default.oneOfType([ln.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,ln.default.string.isRequired,ln.default.elementType.isRequired]),iconSide:ln.default.oneOf(["left","right"]),textProps:ln.default.shape({className:ln.default.string,"aria-label":ln.default.string,"data-test-subj":ln.default.string,ref:ln.default.any,"data-text":ln.default.string}),iconSize:ln.default.oneOf(["s","m"]),className:ln.default.string,"aria-label":ln.default.string,"data-test-subj":ln.default.string}),hasBorder:ln.default.bool};var b8e=V(ne()),Wf=V(er()),Kfe=V(Ar());function nJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?nJ=function(n){return typeof n}:nJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},nJ(e)}var GRt=["className","id","checked","label","onChange","type","disabled","compressed","indeterminate","inputRef","labelProps"];function oJ(){return oJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XRt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function KRt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function y8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function iJ(e){return iJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},iJ(e)}function Xfe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w8e={inList:"euiCheckbox--inList"},OIr=Yr(w8e),mC=function(e){QRt(n,e);var t=ZRt(n);function n(){var r;KRt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _8e={none:null,xs:"euiFlexGroup--gutterExtraSmall",s:"euiFlexGroup--gutterSmall",m:"euiFlexGroup--gutterMedium",l:"euiFlexGroup--gutterLarge",xl:"euiFlexGroup--gutterExtraLarge"},PIr=Yr(_8e),S8e={stretch:null,flexStart:"euiFlexGroup--alignItemsFlexStart",flexEnd:"euiFlexGroup--alignItemsFlexEnd",center:"euiFlexGroup--alignItemsCenter",baseline:"euiFlexGroup--alignItemsBaseline"},jIr=Yr(S8e),E8e={flexStart:null,flexEnd:"euiFlexGroup--justifyContentFlexEnd",center:"euiFlexGroup--justifyContentCenter",spaceBetween:"euiFlexGroup--justifyContentSpaceBetween",spaceAround:"euiFlexGroup--justifyContentSpaceAround",spaceEvenly:"euiFlexGroup--justifyContentSpaceEvenly"},CIr=Yr(E8e),I8e={row:"euiFlexGroup--directionRow",rowReverse:"euiFlexGroup--directionRowReverse",column:"euiFlexGroup--directionColumn",columnReverse:"euiFlexGroup--directionColumnReverse"},TIr=Yr(I8e),iDt=function(t){return["div","span"].includes(t)},Da=(0,O8e.forwardRef)(function(e,t){var n=e.children,r=e.className,o=e.gutterSize,i=o===void 0?"l":o,d=e.alignItems,y=d===void 0?"stretch":d,_=e.responsive,k=_===void 0?!0:_,T=e.justifyContent,N=T===void 0?"flexStart":T,L=e.direction,Y=L===void 0?"row":L,q=e.wrap,K=q===void 0?!1:q,U=e.component,X=U===void 0?"div":U,Z=nDt(e,rDt),fe=(0,x8e.default)("euiFlexGroup",_8e[i],S8e[y],E8e[N],I8e[Y],{"euiFlexGroup--responsive":k,"euiFlexGroup--wrap":K},r);if(!iDt(X))throw new Error("".concat(X," is not a valid element type. Use `div` or `span`."));return X==="span"?c("span",aJ({className:fe,ref:t},Z),n):c("div",aJ({className:fe,ref:t},Z),n)});Da.propTypes={alignItems:F3.default.oneOf(["stretch","flexStart","flexEnd","center","baseline"]),component:F3.default.oneOf(["div","span"]),direction:F3.default.oneOf(["row","rowReverse","column","columnReverse"]),gutterSize:F3.default.oneOf(["none","xs","s","m","l","xl"]),justifyContent:F3.default.oneOf(["flexStart","flexEnd","center","spaceBetween","spaceAround","spaceEvenly"]),responsive:F3.default.bool,wrap:F3.default.bool,className:F3.default.string,"aria-label":F3.default.string,"data-test-subj":F3.default.string};Da.displayName="EuiFlexGroup";var MIr=V(ne()),vC=V(er()),k8e=V(Ar());var aDt=["children","className","grow","component"];function Yfe(){return Yfe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var P8e=[1,2,3,4,5,6,7,8,9,10],Rr=function(t){var n=t.children,r=t.className,o=t.grow,i=o===void 0?!0:o,d=t.component,y=d===void 0?"div":d,_=lDt(t,aDt);cDt(i);var k=(0,k8e.default)("euiFlexItem",sDt({"euiFlexItem--flexGrowZero":!i},"euiFlexItem--flexGrow".concat(i),typeof i=="number"?P8e.indexOf(i)>=0:void 0),r);return c(y,Yfe({className:k},_),n)};Rr.propTypes={className:vC.default.string,"aria-label":vC.default.string,"data-test-subj":vC.default.string,grow:vC.default.oneOf([1,2,3,4,5,6,7,8,9,10,!0,!1,null]),component:vC.default.any};function cDt(e){var t=[null,void 0,!0,!1].concat(P8e);if(t.indexOf(e)===-1)throw new Error("Prop `grow` passed to `EuiFlexItem` must be a boolean or an integer between 1 and 10, received `".concat(e,"`"))}var yC=V(ne()),_n=V(er()),ope=V(Ar());var pJ=V(ne()),ha=V(er());var BIr=V(ne()),aH=V(er()),j8e=V(Ar());var fDt=["className","onClick","size"];function Qfe(){return Qfe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var C8e={s:"euiFormControlLayoutClearButton--small",m:null},UIr=Yr(C8e),Zfe=function(t){var n=t.className,r=t.onClick,o=t.size,i=o===void 0?"m":o,d=pDt(t,fDt),y=(0,j8e.default)("euiFormControlLayoutClearButton",C8e[i],n);return c(Mr,{token:"euiFormControlLayoutClearButton.label",default:"Clear input"},function(_){return c("button",Qfe({type:"button",className:y,onClick:r,"aria-label":_},d),c(sn,{className:"euiFormControlLayoutClearButton__icon",type:"cross"}))})};Zfe.propTypes={className:aH.default.string,"aria-label":aH.default.string,"data-test-subj":aH.default.string,size:aH.default.any};var JIr=V(ne()),Yy=V(er()),T8e=V(Ar());var hDt=["className","onClick","type","iconRef","size","color"];function sJ(){return sJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var lJ=function(t){var n=t.className,r=t.onClick,o=t.type,i=t.iconRef,d=t.size,y=t.color,_=mDt(t,hDt),k=(0,T8e.default)("euiFormControlLayoutCustomIcon",n,{"euiFormControlLayoutCustomIcon--clickable":r});return r?c("button",sJ({type:"button",onClick:r,className:k,ref:i},_),c(sn,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:d,type:o,color:y})):c("span",sJ({className:k,ref:i},_),c(sn,{className:"euiFormControlLayoutCustomIcon__icon","aria-hidden":"true",size:d,type:o,color:y}))};lJ.propTypes={className:Yy.default.string,"aria-label":Yy.default.string,"data-test-subj":Yy.default.string,type:Yy.default.oneOfType([Yy.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Yy.default.string.isRequired,Yy.default.elementType.isRequired]).isRequired,size:Yy.default.any,iconRef:Yy.default.oneOfType([Yy.default.string.isRequired,Yy.default.func.isRequired])};function uJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?uJ=function(n){return typeof n}:uJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},uJ(e)}var gDt=["ref","side"];function cJ(){return cJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function wDt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function A8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function fJ(e){return fJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},fJ(e)}function M8e(e){return!!e&&e.hasOwnProperty("type")}var tpe=function(e){xDt(n,e);var t=_Dt(n);function n(){return wDt(this,n),t.apply(this,arguments)}return ODt(n,[{key:"render",value:function(){var o=this.props,i=o.icon,d=o.isInvalid,y=o.isDropdown,_=M8e(i)&&i.side?i.side:"left",k=this.renderCustomIcon(),T=this.renderLoadingSpinner(),N=this.renderClearButton(),L=this.renderInvalidIcon(),Y=this.renderDropdownIcon(),q;k&&_==="left"&&(q=c("div",{className:"euiFormControlLayoutIcons"},k));var K;return(N||T||d||y||k&&_==="right")&&(K=c("div",{className:"euiFormControlLayoutIcons euiFormControlLayoutIcons--right"},N,T,L,_==="right"?k:void 0,Y)),c(pJ.Fragment,null,q,K)}},{key:"renderCustomIcon",value:function(){var o=this.props,i=o.icon,d=o.compressed;if(!i)return null;var y=M8e(i)?i:{type:i},_=y.ref,k=y.side,T=yDt(y,gDt);return c(lJ,cJ({size:d?"s":"m",iconRef:_},T))}},{key:"renderDropdownIcon",value:function(){var o=this.props,i=o.isDropdown,d=o.compressed;return i?c(lJ,{size:d?"s":"m",type:"arrowDown"}):null}},{key:"renderLoadingSpinner",value:function(){var o=this.props,i=o.isLoading,d=o.compressed;return i?c(Pn,{size:d?"s":"m"}):null}},{key:"renderClearButton",value:function(){var o=this.props,i=o.clear,d=o.compressed;return i?c(Zfe,cJ({size:d?"s":"m"},i)):null}},{key:"renderInvalidIcon",value:function(){var o=this.props,i=o.isInvalid,d=o.compressed;return i?c(sn,{size:d?"s":"m",color:"danger",type:"alert"}):null}}]),n}(pJ.Component);tpe.propTypes={icon:ha.default.oneOfType([ha.default.oneOfType([ha.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,ha.default.string.isRequired,ha.default.elementType.isRequired]).isRequired,ha.default.shape({type:ha.default.oneOfType([ha.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,ha.default.string.isRequired,ha.default.elementType.isRequired]).isRequired,side:ha.default.any,color:ha.default.oneOfType([ha.default.string.isRequired,ha.default.any.isRequired]),ref:ha.default.oneOfType([ha.default.string.isRequired,ha.default.func.isRequired])}).isRequired]),clear:ha.default.shape({className:ha.default.string,"aria-label":ha.default.string,"data-test-subj":ha.default.string,size:ha.default.any}),isLoading:ha.default.bool,isInvalid:ha.default.bool,isDropdown:ha.default.bool,compressed:ha.default.bool};var akr=V(ne()),tm=V(er()),R8e=V(Ar());var kDt=["type","isFocused","isInvalid","isDisabled","children","className"];function dJ(){return dJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var gC=function(t){var n=t.type,r=n===void 0?"label":n,o=t.isFocused,i=t.isInvalid,d=t.isDisabled,y=t.children,_=t.className,k=PDt(t,kDt),T=(0,R8e.default)("euiFormLabel",_,{"euiFormLabel-isFocused":o,"euiFormLabel-isInvalid":i,"euiFormLabel-isDisabled":d});return r==="legend"?c("legend",dJ({className:T},k),y):c("label",dJ({className:T},k),y)};gC.propTypes={type:tm.default.oneOfType([tm.default.oneOfType([tm.default.oneOf(["label"]),tm.default.oneOf(["label","legend"])]),tm.default.oneOfType([tm.default.oneOf(["legend"]).isRequired,tm.default.oneOf(["label","legend"])])]),isFocused:tm.default.bool,isInvalid:tm.default.bool,isDisabled:tm.default.bool,className:tm.default.string,"aria-label":tm.default.string,"data-test-subj":tm.default.string};function hJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?hJ=function(n){return typeof n}:hJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},hJ(e)}var CDt=["children","icon","clear","fullWidth","isLoading","isDisabled","compressed","className","prepend","append","readOnly","isInvalid","isDropdown","inputId"];function rpe(){return rpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ADt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function MDt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function D8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function mJ(e){return mJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},mJ(e)}var bC=function(e){DDt(n,e);var t=zDt(n);function n(){return MDt(this,n),t.apply(this,arguments)}return RDt(n,[{key:"render",value:function(){var o=this.props,i=o.children,d=o.icon,y=o.clear,_=o.fullWidth,k=o.isLoading,T=o.isDisabled,N=o.compressed,L=o.className,Y=o.prepend,q=o.append,K=o.readOnly,U=o.isInvalid,X=o.isDropdown,Z=o.inputId,fe=TDt(o,CDt),me=(0,ope.default)("euiFormControlLayout",{"euiFormControlLayout--fullWidth":_,"euiFormControlLayout--compressed":N,"euiFormControlLayout--readOnly":K,"euiFormControlLayout--group":Y||q,"euiFormControlLayout-isDisabled":T},L),ye=this.renderSideNode("prepend",Y,Z),ge=this.renderSideNode("append",q,Z);return c("div",rpe({className:me},fe),ye,c("div",{className:"euiFormControlLayout__childrenWrapper"},i,c(tpe,{icon:d,clear:y,compressed:N,isLoading:k,isInvalid:U,isDropdown:!K&&!T&&X})),ge)}},{key:"renderSideNode",value:function(o,i,d){var y=this;if(i){if(typeof i=="string")return this.createFormLabel(o,i,d);var _=yC.default.Children.map(i,function(k,T){return typeof k=="string"?y.createFormLabel(o,k,d):y.createSideNode(o,k,T)});return _}}},{key:"createFormLabel",value:function(o,i,d){return c(gC,{htmlFor:d,className:"euiFormControlLayout__".concat(o)},i)}},{key:"createSideNode",value:function(o,i,d){return(0,yC.cloneElement)(i,{className:(0,ope.default)("euiFormControlLayout__".concat(o),i.props.className),key:d})}}]),n}(yC.Component);bC.propTypes={className:_n.default.string,"aria-label":_n.default.string,"data-test-subj":_n.default.string,prepend:_n.default.oneOfType([_n.default.oneOfType([_n.default.string.isRequired,_n.default.element.isRequired]).isRequired,_n.default.arrayOf(_n.default.oneOfType([_n.default.string.isRequired,_n.default.element.isRequired]).isRequired).isRequired]),append:_n.default.oneOfType([_n.default.oneOfType([_n.default.string.isRequired,_n.default.element.isRequired]).isRequired,_n.default.arrayOf(_n.default.oneOfType([_n.default.string.isRequired,_n.default.element.isRequired]).isRequired).isRequired]),children:_n.default.node,icon:_n.default.oneOfType([_n.default.oneOfType([_n.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,_n.default.string.isRequired,_n.default.elementType.isRequired]).isRequired,_n.default.shape({type:_n.default.oneOfType([_n.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,_n.default.string.isRequired,_n.default.elementType.isRequired]).isRequired,side:_n.default.any,color:_n.default.oneOfType([_n.default.string.isRequired,_n.default.any.isRequired]),ref:_n.default.oneOfType([_n.default.string.isRequired,_n.default.func.isRequired])}).isRequired]),clear:_n.default.shape({className:_n.default.string,"aria-label":_n.default.string,"data-test-subj":_n.default.string,size:_n.default.any}),fullWidth:_n.default.bool,isLoading:_n.default.bool,isDisabled:_n.default.bool,compressed:_n.default.bool,readOnly:_n.default.bool,isInvalid:_n.default.bool,isDropdown:_n.default.bool,inputId:_n.default.string};var b4=V(ne()),Ak=V(er());function BDt(e){return e!=null&&e.hasOwnProperty("current")}var vJ=function(t){var n=t.isInvalid,r=t.children,o=(0,b4.useRef)(null),i=b4.Children.only(r),d=i.ref,y=(0,b4.useCallback)(function(_){o.current=_,typeof d=="function"?d(_):BDt(d)&&(d.current=_)},[d]);return(0,b4.useEffect)(function(){o.current===null||typeof o.current.setCustomValidity!="function"||(n?o.current.setCustomValidity("Invalid"):o.current.setCustomValidity(""))}),(0,b4.cloneElement)(i,{ref:y,"aria-invalid":n})};vJ.propTypes={className:Ak.default.string,"aria-label":Ak.default.string,"data-test-subj":Ak.default.string,isInvalid:Ak.default.bool,children:Ak.default.shape({ref:Ak.default.any}).isRequired};function z8e(e){var t=e.icon,n=e.clear,r=e.isLoading,o=e.isInvalid,i=e.isDropdown,d=[t,n,o,r,i].filter(function(y){return y===!0}).length;return d>0?"euiFormControlLayout--".concat(d,"icons"):void 0}var L8e=V(ne()),ai=V(er()),F8e=V(Ar());var WDt={isEventSupported:function(t,n){return"on".concat(t)in n}},ipe=Object.freeze(WDt);function gJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?gJ=function(n){return typeof n}:gJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},gJ(e)}var HDt=["className","id","name","placeholder","isInvalid","fullWidth","isLoading","inputRef","incremental","compressed","onSearch","isClearable","append","prepend"];function spe(){return spe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function qDt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function N8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function yJ(e){return yJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},yJ(e)}function Rk(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ape=!1,sH=function(e){GDt(n,e);var t=JDt(n);function n(){var r;qDt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZDt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var wJ=function(t){var n=t.children,r=t.className,o=QDt(t,YDt),i=(0,B8e.default)("euiFormErrorText",r);return c("div",upe({className:i,"aria-live":"polite"},o),n)};wJ.propTypes={className:bJ.default.string,"aria-label":bJ.default.string,"data-test-subj":bJ.default.string};var Wkr=V(ne()),OJ=V(er()),W8e=V(Ar());var ezt=["children","className"];function cpe(){return cpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rzt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var xJ=function(t){var n=t.children,r=t.className,o=tzt(t,ezt),i=(0,W8e.default)("euiFormHelpText",r);return c("div",cpe({className:i},o),n)};xJ.propTypes={className:OJ.default.string,"aria-label":OJ.default.string,"data-test-subj":OJ.default.string};var HE=V(ne()),ma=V(er()),hpe=V(Ar());function _J(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_J=function(n){return typeof n}:_J=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},_J(e)}var nzt=["children","helpText","isInvalid","error","label","labelType","labelAppend","hasEmptyLabelSpace","fullWidth","className","describedByIds","display","hasChildLabel","id","isDisabled"];function ozt(e){return lzt(e)||szt(e)||azt(e)||izt()}function izt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function azt(e,t){if(e){if(typeof e=="string")return ppe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ppe(e,t)}}function szt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function lzt(e){if(Array.isArray(e))return ppe(e)}function ppe(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function czt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function fzt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function $8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function EJ(e){return EJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},EJ(e)}function uH(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var V8e={row:null,rowCompressed:"euiFormRow--compressed",columnCompressed:"euiFormRow--compressed euiFormRow--horizontal",center:null,centerCompressed:"euiFormRow--compressed",columnCompressedSwitch:"euiFormRow--compressed euiFormRow--horizontal euiFormRow--hasSwitch"},ePr=Yr(V8e),w4=function(e){dzt(n,e);var t=hzt(n);function n(){var r;fzt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d0&&(wt["aria-describedby"]=_t.join(" "));var Nt=HE.Children.only(y),At=(0,HE.cloneElement)(Nt,fpe({id:ae,disabled:(o=(i=Nt.props.disabled)!==null&&i!==void 0?i:Nt.props.isDisabled)!==null&&o!==void 0?o:ye,onFocus:this.onFocus,onBlur:this.onBlur},wt)),ir=(0,hpe.default)("euiFormRow__fieldWrapper",{euiFormRow__fieldWrapperDisplayOnly:Z.startsWith("center")}),Pt={className:Ne,id:"".concat(ae,"-row")},Sr=c(HE.default.Fragment,null,Ue,c("div",{className:ir},At,Me,Ye));return L==="legend"?c("fieldset",lH({},Pt,ge),Sr):c("div",lH({},Pt,ge),Sr)}}]),n}(HE.Component);uH(w4,"defaultProps",{display:"row",hasEmptyLabelSpace:!1,fullWidth:!1,describedByIds:[],labelType:"label",hasChildLabel:!0});w4.propTypes={labelType:ma.default.oneOfType([ma.default.oneOf(["label"]),ma.default.oneOf(["legend"])]),className:ma.default.string,"aria-label":ma.default.string,"data-test-subj":ma.default.string,display:ma.default.oneOf(["row","rowCompressed","columnCompressed","center","centerCompressed","columnCompressedSwitch"]),hasEmptyLabelSpace:ma.default.bool,fullWidth:ma.default.bool,describedByIds:ma.default.arrayOf(ma.default.string.isRequired),hasChildLabel:ma.default.bool,children:ma.default.element.isRequired,label:ma.default.node,labelAppend:ma.default.any,id:ma.default.string,isInvalid:ma.default.bool,error:ma.default.oneOfType([ma.default.node.isRequired,ma.default.arrayOf(ma.default.node.isRequired).isRequired]),helpText:ma.default.oneOfType([ma.default.node.isRequired,ma.default.arrayOf(ma.default.node.isRequired).isRequired]),isDisabled:ma.default.bool};var TJ=V(ne()),Hf=V(er()),bpe=V(Ar());var PJ=V(ne()),bu=V(er()),vpe=V(Ar());var gzt=["children","className","hasPanel","icon","buttonRef","disabled","layoutAlign","toolTipTitle","toolTipContent","toolTipPosition","href","target","rel","size"];function IJ(){return IJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bzt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function wzt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function q8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function kJ(e){return kJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},kJ(e)}var U8e={s:"euiContextMenuItem--small",m:null},fPr=Yr(U8e),G8e={center:null,top:"euiContextMenu__itemLayout--top",bottom:"euiContextMenu__itemLayout--bottom"},pPr=Yr(G8e),B3=function(e){xzt(n,e);var t=_zt(n);function n(){return wzt(this,n),t.apply(this,arguments)}return Ozt(n,[{key:"render",value:function(){var o=this.props,i=o.children,d=o.className,y=o.hasPanel,_=o.icon,k=o.buttonRef,T=o.disabled,N=o.layoutAlign,L=N===void 0?"center":N,Y=o.toolTipTitle,q=o.toolTipContent,K=o.toolTipPosition,U=K===void 0?"right":K,X=o.href,Z=o.target,fe=o.rel,me=o.size,ye=yzt(o,gzt),ge,ae=!X||Qp(X),Pe=T||!ae;if(_)switch(cH(_)){case"string":ge=c(sn,{type:_,size:"m",className:"euiContextMenu__icon",color:"inherit"});break;default:ge=(0,PJ.cloneElement)(_,{className:"euiContextMenu__icon"})}var Ne;y&&(Ne=c(sn,{type:"arrowRight",size:"m",className:"euiContextMenu__arrow"}));var Ye=(0,vpe.default)("euiContextMenuItem",me&&U8e[me],d,{"euiContextMenuItem-isDisabled":Pe}),Je=(0,vpe.default)("euiContextMenu__itemLayout",G8e[L]),Me=c("span",{className:Je},ge,c("span",{className:"euiContextMenuItem__text"},i),Ne),Ve;if(X&&!Pe){var Ue=vu({href:X,target:Z,rel:fe});Ve=c("a",IJ({className:Ye,href:X,target:Z,rel:Ue,ref:k},ye),Me)}else Ve=c("button",IJ({disabled:Pe,className:Ye,type:"button",ref:k},ye),Me);return q?c(Y0,{title:Y||null,content:q,anchorClassName:"eui-displayBlock",position:U},Ve):Ve}}]),n}(PJ.Component);B3.propTypes={className:bu.default.string,"aria-label":bu.default.string,"data-test-subj":bu.default.string,icon:bu.default.oneOfType([bu.default.element.isRequired,bu.default.string.isRequired,bu.default.any.isRequired]),hasPanel:bu.default.bool,disabled:bu.default.bool,onClick:bu.default.func,buttonRef:bu.default.any,toolTipContent:bu.default.node,toolTipTitle:bu.default.node,toolTipPosition:bu.default.oneOf(["top","right","bottom","left"]),href:bu.default.string,target:bu.default.string,rel:bu.default.string,layoutAlign:bu.default.oneOf(["center","top","bottom"]),size:bu.default.oneOf(["s","m"])};function jJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?jJ=function(n){return typeof n}:jJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},jJ(e)}var kzt=["children","className","onClose","title","onHeightChange","transitionType","transitionDirection","onTransitionComplete","onUseKeyboardToNavigate","items","initialFocusedItemIndex","showNextPanel","showPreviousPanel","size"];function gpe(){return gpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function jzt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function Czt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function J8e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function CJ(e){return CJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},CJ(e)}function H3(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var K8e={s:"euiContextMenuPanelTitle--small",m:null},xPr=Yr(K8e),X8e={next:{in:"euiContextMenuPanel-txInLeft",out:"euiContextMenuPanel-txOutLeft"},previous:{in:"euiContextMenuPanel-txInRight",out:"euiContextMenuPanel-txOutRight"}},K_=function(e){Azt(n,e);var t=Mzt(n);function n(r){var o;return Czt(this,n),o=t.call(this,r),H3(W3(o),"_isMounted",!1),H3(W3(o),"backButton",null),H3(W3(o),"panel",null),H3(W3(o),"initialPopoverParent",null),H3(W3(o),"findMenuItems",function(){var i;if(o.panel&&(i=o.props.items)!==null&&i!==void 0&&i.length&&!o.state.menuItems.length){var d=kye(o.panel);d.length&&o.setState({menuItems:d})}}),H3(W3(o),"focusMenuItem",function(i){var d,y=i==="up"?-1:1,_;o.state.focusedItemIndex===void 0?_=i==="up"?o.state.menuItems.length-1:0:(_=o.state.focusedItemIndex+y,_<0?_=o.state.menuItems.length-1:_===o.state.menuItems.length&&(_=0)),o.setState({focusedItemIndex:_}),(d=o.state.menuItems[_])===null||d===void 0||d.focus()}),H3(W3(o),"onKeyDown",function(i){var d=o.props,y=d.items,_=d.onClose,k=d.showPreviousPanel;if(_&&(y!=null&&y.length||document.activeElement===o.backButton||document.activeElement===o.panel)&&i.key===a4.ARROW_LEFT&&k&&(i.preventDefault(),i.stopPropagation(),k(),o.props.onUseKeyboardToNavigate&&o.props.onUseKeyboardToNavigate()),y!=null&&y.length)switch(i.key){case a4.TAB:requestAnimationFrame(function(){var T=o.state.menuItems.indexOf(document.activeElement);o.setState({focusedItemIndex:T>=0&&T=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Lzt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fzt={none:null,xs:"marginXSmall",s:"marginSmall",m:"marginMedium",l:"marginLarge",xl:"marginXLarge",xxl:"marginXXLarge"},OC=function(t){var n,r=t.className,o=t.size,i=o===void 0?"full":o,d=t.margin,y=d===void 0?"l":d,_=Nzt(t,zzt),k=Jn(),T=Y8e(k),N=(0,Z8e.default)("euiHorizontalRule",(n={},Q8e(n,"euiHorizontalRule--".concat(i),i),Q8e(n,"euiHorizontalRule--".concat(Fzt[y]),y&&y!=="none"),n),r),L=[T.euiHorizontalRule,T[i],T[y]];return c("hr",wpe({css:L,className:N},_))};OC.propTypes={size:wC.default.any,margin:wC.default.any,className:wC.default.string,"aria-label":wC.default.string,"data-test-subj":wC.default.string};var MJ=V(ne()),$f=V(er()),Ope=V(Ar());var Bzt=["label","id","checked","disabled","compressed","onChange","className","showLabel","type","labelProps"];function AJ(){return AJ=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hzt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Dk=function(t){var n=t.label,r=t.id,o=t.checked,i=t.disabled,d=t.compressed,y=t.onChange,_=t.className,k=t.showLabel,T=k===void 0?!0:k,N=t.type,L=N===void 0?"button":N,Y=t.labelProps,q=Wzt(t,Bzt),K=N_({conditionalId:r}),U=N_({conditionalId:Y?.id}),X=(0,MJ.useCallback)(function(me){if(!i){var ye=me;ye.target.checked=!o,y(ye)}},[o,i,y]),Z=(0,Ope.default)("euiSwitch",{"euiSwitch--compressed":d},_),fe=(0,Ope.default)("euiSwitch__label",Y?.className);return T===!1&&typeof n!="string"&&console.warn("EuiSwitch `label` must be a string when `showLabel` is false."),c("div",{className:Z},c("button",AJ({id:K,"aria-checked":o||!1,className:"euiSwitch__button",role:"switch",type:L,disabled:i,onClick:X,"aria-label":T?void 0:n,"aria-labelledby":T?U:void 0},q),c("span",{className:"euiSwitch__body"},c("span",{className:"euiSwitch__thumb"}),c("span",{className:"euiSwitch__track"},!d&&c(MJ.default.Fragment,null,c(sn,{type:"cross",size:"m",className:"euiSwitch__icon"}),c(sn,{type:"check",size:"m",className:"euiSwitch__icon euiSwitch__icon--checked"}))))),T&&c("span",AJ({},Y,{className:fe,id:U,onClick:X}),n))};Dk.propTypes={className:$f.default.string,"aria-label":$f.default.string,"data-test-subj":$f.default.string,showLabel:$f.default.bool,label:$f.default.oneOfType([$f.default.node.isRequired,$f.default.string.isRequired]).isRequired,checked:$f.default.bool.isRequired,onChange:$f.default.func.isRequired,disabled:$f.default.bool,compressed:$f.default.bool,type:$f.default.oneOf(["submit","reset","button"]),labelProps:$f.default.shape({className:$f.default.string,"aria-label":$f.default.string,"data-test-subj":$f.default.string})};function xpe(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}var eSe=Number.isNaN||function(t){return typeof t=="number"&&t!==t};function $zt(e,t){return!!(e===t||eSe(e)&&eSe(t))}function Vzt(e,t){if(e.length!==t.length)return!1;for(var n=0;n=t?e.call(null):o.id=requestAnimationFrame(r)}var o={id:requestAnimationFrame(r)};return o}var Spe=-1;function nSe(e){if(e===void 0&&(e=!1),Spe===-1||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),Spe=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return Spe}var xC=null;function oSe(e){if(e===void 0&&(e=!1),xC===null||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?xC="positive-descending":(t.scrollLeft=1,t.scrollLeft===0?xC="negative":xC="positive-ascending"),document.body.removeChild(t),xC}return xC}var Jzt=150,Xzt=function(t,n){return t};function Kzt(e){var t,n=e.getItemOffset,r=e.getEstimatedTotalSize,o=e.getItemSize,i=e.getOffsetForIndexAndAlignment,d=e.getStartIndexForOffset,y=e.getStopIndexForStartIndex,_=e.initInstanceProps,k=e.shouldResetStyleCacheOnItemSizeChange,T=e.validateProps;return t=function(N){Q0(L,N);function L(q){var K;return K=N.call(this,q)||this,K._instanceProps=_(K.props,xpe(K)),K._outerRef=void 0,K._resetIsScrollingTimeoutId=null,K.state={instance:xpe(K),isScrolling:!1,scrollDirection:"forward",scrollOffset:typeof K.props.initialScrollOffset=="number"?K.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},K._callOnItemsRendered=void 0,K._callOnItemsRendered=RJ(function(U,X,Z,fe){return K.props.onItemsRendered({overscanStartIndex:U,overscanStopIndex:X,visibleStartIndex:Z,visibleStopIndex:fe})}),K._callOnScroll=void 0,K._callOnScroll=RJ(function(U,X,Z){return K.props.onScroll({scrollDirection:U,scrollOffset:X,scrollUpdateWasRequested:Z})}),K._getItemStyle=void 0,K._getItemStyle=function(U){var X=K.props,Z=X.direction,fe=X.itemSize,me=X.layout,ye=K._getItemStyleCache(k&&fe,k&&me,k&&Z),ge;if(ye.hasOwnProperty(U))ge=ye[U];else{var ae=n(K.props,U,K._instanceProps),Pe=o(K.props,U,K._instanceProps),Ne=Z==="horizontal"||me==="horizontal",Ye=Z==="rtl",Je=Ne?ae:0;ye[U]=ge={position:"absolute",left:Ye?void 0:Je,right:Ye?Je:void 0,top:Ne?0:ae,height:Ne?"100%":Pe,width:Ne?Pe:"100%"}}return ge},K._getItemStyleCache=void 0,K._getItemStyleCache=RJ(function(U,X,Z){return{}}),K._onScrollHorizontal=function(U){var X=U.currentTarget,Z=X.clientWidth,fe=X.scrollLeft,me=X.scrollWidth;K.setState(function(ye){if(ye.scrollOffset===fe)return null;var ge=K.props.direction,ae=fe;if(ge==="rtl")switch(oSe()){case"negative":ae=-fe;break;case"positive-descending":ae=me-Z-fe;break}return ae=Math.max(0,Math.min(ae,me-Z)),{isScrolling:!0,scrollDirection:ye.scrollOffsetge.clientWidth?nSe():0:ye=ge.scrollHeight>ge.clientHeight?nSe():0}this.scrollTo(i(this.props,K,U,me,this._instanceProps,ye))},Y.componentDidMount=function(){var K=this.props,U=K.direction,X=K.initialScrollOffset,Z=K.layout;if(typeof X=="number"&&this._outerRef!=null){var fe=this._outerRef;U==="horizontal"||Z==="horizontal"?fe.scrollLeft=X:fe.scrollTop=X}this._callPropsCallbacks()},Y.componentDidUpdate=function(){var K=this.props,U=K.direction,X=K.layout,Z=this.state,fe=Z.scrollOffset,me=Z.scrollUpdateWasRequested;if(me&&this._outerRef!=null){var ye=this._outerRef;if(U==="horizontal"||X==="horizontal")if(U==="rtl")switch(oSe()){case"negative":ye.scrollLeft=-fe;break;case"positive-ascending":ye.scrollLeft=fe;break;default:var ge=ye.clientWidth,ae=ye.scrollWidth;ye.scrollLeft=ae-ge-fe;break}else ye.scrollLeft=fe;else ye.scrollTop=fe}this._callPropsCallbacks()},Y.componentWillUnmount=function(){this._resetIsScrollingTimeoutId!==null&&rSe(this._resetIsScrollingTimeoutId)},Y.render=function(){var K=this.props,U=K.children,X=K.className,Z=K.direction,fe=K.height,me=K.innerRef,ye=K.innerElementType,ge=K.innerTagName,ae=K.itemCount,Pe=K.itemData,Ne=K.itemKey,Ye=Ne===void 0?Xzt:Ne,Je=K.layout,Me=K.outerElementType,Ve=K.outerTagName,Ue=K.style,ht=K.useIsScrolling,yt=K.width,Rt=this.state.isScrolling,wt=Z==="horizontal"||Je==="horizontal",_t=wt?this._onScrollHorizontal:this._onScrollVertical,Nt=this._getRangeToRender(),At=Nt[0],ir=Nt[1],Pt=[];if(ae>0)for(var Sr=At;Sr<=ir;Sr++)Pt.push((0,_C.createElement)(U,{data:Pe,key:Ye(Sr,Pe),index:Sr,isScrolling:ht?Rt:void 0,style:this._getItemStyle(Sr)}));var Nr=r(this.props,this._instanceProps);return(0,_C.createElement)(Me||Ve||"div",{className:X,onScroll:_t,ref:this._outerRefSetter,style:so({position:"relative",height:fe,width:yt,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:Z},Ue)},(0,_C.createElement)(ye||ge||"div",{children:Pt,ref:me,style:{height:wt?"100%":Nr,pointerEvents:Rt?"none":void 0,width:wt?Nr:"100%"}}))},Y._callPropsCallbacks=function(){if(typeof this.props.onItemsRendered=="function"){var K=this.props.itemCount;if(K>0){var U=this._getRangeToRender(),X=U[0],Z=U[1],fe=U[2],me=U[3];this._callOnItemsRendered(X,Z,fe,me)}}if(typeof this.props.onScroll=="function"){var ye=this.state,ge=ye.scrollDirection,ae=ye.scrollOffset,Pe=ye.scrollUpdateWasRequested;this._callOnScroll(ge,ae,Pe)}},Y._getRangeToRender=function(){var K=this.props,U=K.itemCount,X=K.overscanCount,Z=this.state,fe=Z.isScrolling,me=Z.scrollDirection,ye=Z.scrollOffset;if(U===0)return[0,0,0,0];var ge=d(this.props,ye,this._instanceProps),ae=y(this.props,ge,ye,this._instanceProps),Pe=!fe||me==="backward"?Math.max(1,X):1,Ne=!fe||me==="forward"?Math.max(1,X):1;return[Math.max(0,ge-Pe),Math.max(0,Math.min(U-1,ae+Ne)),ge,ae]},L}(_C.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var Yzt=function(t,n){var r=t.children,o=t.direction,i=t.height,d=t.layout,y=t.innerTagName,_=t.outerTagName,k=t.width,T=n.instance;if(!1){var N;switch(o){case"horizontal":case"vertical":case"ltr":case"rtl":default:}switch(d){case"horizontal":case"vertical":default:}}};var DJ=Kzt({getItemOffset:function(t,n){var r=t.itemSize;return n*r},getItemSize:function(t,n){var r=t.itemSize;return r},getEstimatedTotalSize:function(t){var n=t.itemCount,r=t.itemSize;return r*n},getOffsetForIndexAndAlignment:function(t,n,r,o,i,d){var y=t.direction,_=t.height,k=t.itemCount,T=t.itemSize,N=t.layout,L=t.width,Y=y==="horizontal"||N==="horizontal",q=Y?L:_,K=Math.max(0,k*T-q),U=Math.min(K,n*T),X=Math.max(0,n*T-q+T+d);switch(r==="smart"&&(o>=X-q&&o<=U+q?r="auto":r="center"),r){case"start":return U;case"end":return X;case"center":{var Z=Math.round(X+(U-X)/2);return ZK+Math.floor(q/2)?K:Z}case"auto":default:return o>=X&&o<=U?o:oe.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sNt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var zJ=function(t){var n=t.className,r=t.children,o=t.onClick,i=t.headerZindexLocation,d=i===void 0?"above":i,y=t.maskRef,_=aNt(t,eNt),k=(0,fv.useRef)(),T=I6e([k,y]),N=(0,fv.useState)(!1),L=tNt(N,2),Y=L[0],q=L[1];return(0,fv.useEffect)(function(){return document.body.classList.add("euiBody-hasOverlayMask"),function(){document.body.classList.remove("euiBody-hasOverlayMask")}},[]),(0,fv.useEffect)(function(){typeof document<"u"&&T(document.createElement("div"))},[]),(0,fv.useEffect)(function(){var K=k.current;return K&&document.body.appendChild(K),q(!0),function(){K&&document.body.removeChild(K)}},[]),(0,fv.useEffect)(function(){k.current&&Yr(_).forEach(function(K){if(typeof _[K]!="string")throw new Error("Unhandled property type. EuiOverlayMask property ".concat(K," is not a string."));k.current&&k.current.setAttribute(K,_[K])})},[]),(0,fv.useEffect)(function(){k.current&&(k.current.className=(0,uSe.default)("euiOverlayMask","euiOverlayMask--".concat(d,"Header"),n))},[n,d]),(0,fv.useEffect)(function(){var K=k.current;if(!(!K||!o)){var U=function(Z){Z.target===K&&o()};return K.addEventListener("click",U),function(){K.removeEventListener("click",U)}}},[o]),Y?c(fv.default.Fragment,null,(0,lSe.createPortal)(r,k.current)):null};zJ.propTypes={className:O4.default.string,"aria-label":O4.default.string,"data-test-subj":O4.default.string,onClick:O4.default.func,children:O4.default.node,headerZindexLocation:O4.default.oneOf(["above","below"]),maskRef:O4.default.oneOfType([O4.default.any.isRequired,O4.default.any.isRequired])};var cjr=V(ne()),fH=V(er()),fSe=V(Ar());var lNt={name:"191xi1n-euiSpacer",styles:"flex-shrink:0;label:euiSpacer;"},cSe=function(t){var n=t.euiTheme;return{euiSpacer:lNt,xs:nt(Ci.height,":",n.size.xs,";;label:xs;"),s:nt(Ci.height,":",n.size.s,";;label:s;"),m:nt(Ci.height,":",n.size.base,";;label:m;"),l:nt(Ci.height,":",n.size.l,";;label:l;"),xl:nt(Ci.height,":",n.size.xl,";;label:xl;"),xxl:nt(Ci.height,":",n.size.xxl,";;label:xxl;")}};var uNt=["className","size"];function Epe(){return Epe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pNt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pl=function(t){var n=t.className,r=t.size,o=r===void 0?"l":r,i=fNt(t,uNt),d=Jn(),y=cSe(d),_=(0,fSe.default)("euiSpacer",cNt({},"euiSpacer--".concat(o),o),n),k=[y.euiSpacer,y[o]];return c("div",Epe({className:_,css:k},i))};pl.propTypes={className:fH.default.string,"aria-label":fH.default.string,"data-test-subj":fH.default.string,size:fH.default.any};var GSe=V(ne()),bi=V(er()),JSe=V(Ar());var xSe=V(ne()),Qt=V(er()),_Se=V(Ar());var Ppe=V(ne()),$E=V(er());var xjr=V(ne()),SC=V(er()),dSe=V(Ar());var pSe=function(t,n){var r=t.euiTheme,o=t.colorMode,i=n.hasScreenReaderHelpText,d=n.highlightStart,y=n.highlightEnd,_={LIGHT:.1,DARK:.3};return nt("background-color:",lv(r.colors.primary,_[o]),";font-weight:",r.font.weight.bold,";color:",r.colors.text,";",i===!0&&` &:before, &:after { @@ -518,8 +518,8 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho &:after { content: ' [`).concat(y,`] '; } - `),";;label:euiMarkStyles;")};var dNt=["children","className","hasScreenReaderHelpText"];function Ipe(){return Ipe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mNt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pH=function(t){var n=t.children,r=t.className,o=t.hasScreenReaderHelpText,i=o===void 0?!0:o,d=hNt(t,dNt),y=Jn(),_=cl("euiMark.highlightStart","highlight start"),k=cl("euiMark.highlightEnd","highlight end"),T=pSe(y,{hasScreenReaderHelpText:i,highlightStart:_,highlightEnd:k}),N=(0,dSe.default)("euiMark",r);return c("mark",Ipe({css:[T,";label:EuiMark;"],className:N},d),n)};pH.propTypes={className:SC.default.string,"aria-label":SC.default.string,"data-test-subj":SC.default.string,hasScreenReaderHelpText:SC.default.bool,children:SC.default.node.isRequired};var vNt=["children","className","search","strict","highlightAll","hasScreenReaderHelpText"];function kpe(){return kpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yNt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bNt=function(t,n,r,o,i){if(!n)return t;if(!t)return null;if(o){var d=wNt(t,n,r);return c(Ppe.Fragment,null,d.map(function(Y){var q=Y.end,K=Y.highlight,U=Y.start,X=t.substr(U,q-U);return K?c(pH,{key:U,hasScreenReaderHelpText:i},X):X}))}var y=r?t:t.toLowerCase(),_=r?n:n.toLowerCase(),k=y.indexOf(_);if(k===-1)return t;var T=t.substr(0,k),N=t.substr(k,n.length),L=t.substr(k+n.length);return c(Ppe.Fragment,null,T,c(pH,{hasScreenReaderHelpText:i},N),L)},wNt=function(t,n,r){for(var o=new RegExp(n,r?"g":"gi"),i=[],d;(d=o.exec(t))!==null;)i.push({start:d.index,end:(d.index||0)+d[0].length});return ONt(i,t.length)},ONt=function(t,n){var r=[],o=function(y,_,k){_-y>0&&r.push({start:y,end:_,highlight:k})};if(t.length===0)o(0,n,!1);else{var i=0;t.forEach(function(d){o(i,d.start,!1),o(d.start,d.end,!0),i=d.end}),o(i,n,!1)}return r},Y_=function(t){var n=t.children,r=t.className,o=t.search,i=t.strict,d=i===void 0?!1:i,y=t.highlightAll,_=y===void 0?!1:y,k=t.hasScreenReaderHelpText,T=k===void 0?!0:k,N=gNt(t,vNt);return c("span",kpe({className:r},N),bNt(n,o,d,_,T))};Y_.propTypes={className:$E.default.string,"aria-label":$E.default.string,"data-test-subj":$E.default.string,children:$E.default.string.isRequired,search:$E.default.string.isRequired,strict:$E.default.bool,highlightAll:$E.default.bool};var Njr=V(ne());var jpe=function(t){var n=t.children;return c("div",{className:"euiComboBoxTitle"},n)};jpe.propTypes={};var mSe=V(ne()),zk=V(er()),vSe=V(Ar());function NJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?NJ=function(n){return typeof n}:NJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},NJ(e)}var xNt=["children","className","disabled","checked","isFocused","showIcons"];function Cpe(){return Cpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function SNt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function ENt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hSe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function LJ(e){return LJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},LJ(e)}function hH(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var TNt=function(t){return t?t==="on"?{icon:"check",color:"text"}:{icon:"cross",color:"text"}:{icon:"empty"}},FJ=function(e){kNt(n,e);var t=PNt(n);function n(){var r;ENt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RNt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function DNt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function wSe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function HJ(e){return HJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},HJ(e)}function V3(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var OSe="euiComboBoxOption__content",Ape=c(Zp,{className:"euiComboBoxOption__enterBadge",color:"hollow",iconType:"returnKey","aria-hidden":"true"}),mH=function(e){NNt(n,e);var t=LNt(n);function n(){var r;DNt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d200?200:ir,qn=c(DJ,{height:xr,onScroll:Z,itemCount:Y.length,itemSize:Ne,itemData:Y,ref:this.setListRef,innerRef:this.setListBoxRef,width:ht},this.ListRow),An=(0,_Se.default)("euiComboBoxOptionsList");return c(pC,WJ({paddingSize:"none",hasShadow:!1,className:An,panelRef:this.listRefCallback,"data-test-subj":"comboBoxOptionsList ".concat(i),style:ySe(ySe({},wt),{},{zIndex:Mt}),isOpen:!0,isAttached:!0,position:ge},Nt),c("div",{className:"euiComboBoxOptionsList__rowWrap"},Sr||qn))}}]),n}(xSe.Component);V3(mH,"defaultProps",{"data-test-subj":"",rowHeight:29});mH.propTypes={className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.oneOfType([Qt.default.string,Qt.default.string.isRequired]),activeOptionIndex:Qt.default.number,areAllOptionsSelected:Qt.default.bool,listboxAriaLabel:Qt.default.string.isRequired,customOptionText:Qt.default.string,fullWidth:Qt.default.bool,getSelectedOptionForSearchValue:Qt.default.func,isLoading:Qt.default.bool,listRef:Qt.default.any.isRequired,matchingOptions:Qt.default.arrayOf(Qt.default.shape({isGroupLabelOption:Qt.default.bool,label:Qt.default.string.isRequired,key:Qt.default.string,options:Qt.default.arrayOf(Qt.default.shape({isGroupLabelOption:Qt.default.bool,label:Qt.default.string.isRequired,key:Qt.default.string,options:Qt.default.arrayOf(Qt.default.any.isRequired),value:Qt.default.any,className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string}).isRequired),value:Qt.default.any,className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string}).isRequired).isRequired,onCloseList:Qt.default.func.isRequired,onCreateOption:Qt.default.func,onOptionClick:Qt.default.func,onOptionEnterKey:Qt.default.func,onScroll:Qt.default.any,optionRef:Qt.default.func.isRequired,options:Qt.default.arrayOf(Qt.default.shape({isGroupLabelOption:Qt.default.bool,label:Qt.default.string.isRequired,key:Qt.default.string,options:Qt.default.arrayOf(Qt.default.shape({isGroupLabelOption:Qt.default.bool,label:Qt.default.string.isRequired,key:Qt.default.string,options:Qt.default.arrayOf(Qt.default.any.isRequired),value:Qt.default.any,className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string}).isRequired),value:Qt.default.any,className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string}).isRequired).isRequired,position:Qt.default.oneOf(["top","bottom"]),renderOption:Qt.default.func,rootId:Qt.default.any.isRequired,rowHeight:Qt.default.number.isRequired,scrollToIndex:Qt.default.number,searchValue:Qt.default.string.isRequired,selectedOptions:Qt.default.arrayOf(Qt.default.shape({isGroupLabelOption:Qt.default.bool,label:Qt.default.string.isRequired,key:Qt.default.string,options:Qt.default.arrayOf(Qt.default.shape({isGroupLabelOption:Qt.default.bool,label:Qt.default.string.isRequired,key:Qt.default.string,options:Qt.default.arrayOf(Qt.default.any.isRequired),value:Qt.default.any,className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string}).isRequired),value:Qt.default.any,className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string}).isRequired).isRequired,updatePosition:Qt.default.func.isRequired,width:Qt.default.number.isRequired,singleSelection:Qt.default.oneOfType([Qt.default.bool.isRequired,Qt.default.shape({asPlainText:Qt.default.bool}).isRequired]),delimiter:Qt.default.string,zIndex:Qt.default.number};function SSe(e){return VNt(e)||$Nt(e)||HNt(e)||WNt()}function WNt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function HNt(e,t){if(e){if(typeof e=="string")return Rpe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Rpe(e,t)}}function $Nt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function VNt(e){if(Array.isArray(e))return Rpe(e)}function Rpe(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&(_.push({key:T.key,label:T.label,isGroupLabelOption:!0}),_=_.concat(N))}else ESe(_,T,n,y,o,i)}),d==="startsWith"){var k={startWith:[],others:[]};return _.forEach(function(T){T.label.toLowerCase().startsWith(y)?k.startWith.push(T):k.others.push(T)}),[].concat(SSe(k.startWith),SSe(k.others))}return _};var BSe=V(ne()),Cr=V(er()),WSe=V(Ar()),HSe=V(MSe());var NSe=V(ne()),$i=V(er()),LSe=V(Ar());function qJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?qJ=function(n){return typeof n}:qJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},qJ(e)}var QNt=["asPlainText","children","className","color","onClick","onClickAriaLabel","onClose","option"];function gH(){return gH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eLt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function tLt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function RSe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function UJ(e){return UJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},UJ(e)}function zSe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var GJ=function(e){nLt(n,e);var t=oLt(n);function n(){var r;tLt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uLt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function yH(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?yH=function(n){return typeof n}:yH=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},yH(e)}function cLt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function FSe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function XJ(e){return XJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},XJ(e)}function EC(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Wpe=function(e){pLt(n,e);var t=dLt(n);function n(){var r;cLt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d0?"".concat(Ne,". Press Backspace to delete ").concat(ge[ge.length-1].label,". "):"","Combo box input. ").concat(Rt," Type some text or, to display a list of choices, press Down Arrow. ")+"To exit the list of choices, press Escape.";Nt=me("removeOptionMessage"),_t=c(na,null,c("span",{"aria-live":"polite",id:Nt},sr))}var Pt;fe&&ge&&!ge.length&&!ye&&(Pt=c("p",{className:"euiComboBoxPlaceholder"},fe));var Sr={};!N&&q&&_&&(Sr.clear={"data-test-subj":"comboBoxClearButton",onClick:q});var Nr;Y||(Nr={"aria-label":L?"Close list of options":"Open list of options","data-test-subj":"comboBoxToggleListButton",disabled:N,onClick:L&&!N?U:X,ref:Pe,side:"right",tabIndex:-1,type:"arrowDown"});var ir=(0,WSe.default)("euiComboBox__inputWrap",{"euiComboBox__inputWrap--compressed":i,"euiComboBox__inputWrap--fullWidth":y,"euiComboBox__inputWrap--noWrap":yt,"euiComboBox__inputWrap-isLoading":Me,"euiComboBox__inputWrap-isClearable":q,"euiComboBox__inputWrap--inGroup":Ye||Je});return c(bC,JJ({icon:Nr},Sr,{inputId:k,isLoading:Me,compressed:i,fullWidth:y,prepend:Ye,append:Je}),c("div",{className:ir,"data-test-subj":"comboBoxInput",onClick:K,tabIndex:-1},!yt||!ye?wt:null,Pt,c(HSe.default,{"aria-activedescendant":d,"aria-autocomplete":"list","aria-controls":L?me("listbox"):"","aria-expanded":L,"aria-label":Ue,"aria-labelledby":ht,className:"euiComboBox__input","data-test-subj":"comboBoxSearchInput",disabled:N,id:k,inputRef:T,onBlur:this.onBlur,onChange:this.inputOnChange,onFocus:this.onFocus,ref:this.inputRefCallback,role:"combobox",style:{fontSize:14},value:ye,autoFocus:Ve}),_t))}}]),n}(BSe.Component);Wpe.propTypes={autoSizeInputRef:Cr.default.any,compressed:Cr.default.bool.isRequired,focusedOptionId:Cr.default.string,fullWidth:Cr.default.bool,hasSelectedOptions:Cr.default.bool.isRequired,id:Cr.default.string,inputRef:Cr.default.any,isDisabled:Cr.default.bool,isListOpen:Cr.default.bool.isRequired,noIcon:Cr.default.bool.isRequired,onBlur:Cr.default.any,onChange:Cr.default.func,onClear:Cr.default.func,onClick:Cr.default.func,onCloseListClick:Cr.default.func.isRequired,onFocus:Cr.default.any.isRequired,onOpenListClick:Cr.default.func.isRequired,onRemoveOption:Cr.default.func,placeholder:Cr.default.string,rootId:Cr.default.any.isRequired,searchValue:Cr.default.string.isRequired,selectedOptions:Cr.default.arrayOf(Cr.default.shape({isGroupLabelOption:Cr.default.bool,label:Cr.default.string.isRequired,key:Cr.default.string,options:Cr.default.arrayOf(Cr.default.shape({isGroupLabelOption:Cr.default.bool,label:Cr.default.string.isRequired,key:Cr.default.string,options:Cr.default.arrayOf(Cr.default.any.isRequired),value:Cr.default.any,className:Cr.default.string,"aria-label":Cr.default.string,"data-test-subj":Cr.default.string}).isRequired),value:Cr.default.any,className:Cr.default.string,"aria-label":Cr.default.string,"data-test-subj":Cr.default.string}).isRequired),singleSelection:Cr.default.oneOfType([Cr.default.bool.isRequired,Cr.default.shape({asPlainText:Cr.default.bool}).isRequired]),toggleButtonRef:Cr.default.any,updatePosition:Cr.default.func.isRequired,value:Cr.default.string,prepend:Cr.default.oneOfType([Cr.default.oneOfType([Cr.default.string.isRequired,Cr.default.element.isRequired]).isRequired,Cr.default.arrayOf(Cr.default.oneOfType([Cr.default.string.isRequired,Cr.default.element.isRequired]).isRequired).isRequired]),append:Cr.default.oneOfType([Cr.default.oneOfType([Cr.default.string.isRequired,Cr.default.element.isRequired]).isRequired,Cr.default.arrayOf(Cr.default.oneOfType([Cr.default.string.isRequired,Cr.default.element.isRequired]).isRequired).isRequired]),isLoading:Cr.default.bool,autoFocus:Cr.default.bool,"aria-label":Cr.default.string,"aria-labelledby":Cr.default.string,className:Cr.default.string,"data-test-subj":Cr.default.string};function KJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?KJ=function(n){return typeof n}:KJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},KJ(e)}var vLt=["data-test-subj","async","className","compressed","customOptionText","fullWidth","id","inputRef","isClearable","isDisabled","isInvalid","isLoading","noSuggestions","onBlur","onChange","onCreateOption","onSearchChange","options","placeholder","renderOption","rowHeight","selectedOptions","singleSelection","prepend","sortMatchesBy","delimiter","append","autoFocus","aria-label","aria-labelledby"];function Hpe(){return Hpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yLt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function $Se(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function VSe(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function YJ(e){return YJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},YJ(e)}function Qn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var USe="",Lk=function(e){OLt(n,e);var t=xLt(n);function n(){var r;bLt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d0&&arguments[0]!==void 0?arguments[0]:r.state.listElement;if(r._isMounted&&r.state.isListOpen&&y){var _=y.getBoundingClientRect();if(!(_.width===0||_.height===0)&&r.comboBoxRefInstance){var k=r.comboBoxRefInstance.getBoundingClientRect(),T=CE({allowCrossAxis:!1,anchor:r.comboBoxRefInstance,popover:y,position:"bottom"}),N=T.position,L=T.top;r.listRefInstance&&(r.listRefInstance.style.top="".concat(L,"px"),r.listRefInstance.style.left="".concat(k.left+window.pageXOffset,"px"),r.listRefInstance.style.width="".concat(k.width,"px")),r.setState({listElement:y,listPosition:N,width:k.width})}}}),Qn(uo(r),"incrementActiveOptionIndex",function(y){r.state.matchingOptions.length&&r.setState(function(_){var k=_.activeOptionIndex,T=_.matchingOptions,N;k<0?N=y<0?T.length-1:0:(N=k+y,N<0?N=T.length-1:N===T.length&&(N=0));for(var L=y>0?1:-1;T[N].isGroupLabelOption;)N=N+L,N<0?N=T.length-1:N===T.length&&(N=0);return{activeOptionIndex:N}})}),Qn(uo(r),"hasActiveOption",function(){return r.state.activeOptionIndex>-1&&r.state.activeOptionIndex0&&r.addCustomOption(y,T)}):r.addCustomOption(y,_)}),Qn(uo(r),"onContainerBlur",function(y){var _=y,k=_.relatedTarget||_.explicitOriginalTarget,T=k&&r.listRefInstance&&r.listRefInstance.contains(k),N=k&&r.comboBoxRefInstance&&r.comboBoxRefInstance.contains(k);!T&&!N?(r.closeList(),r.props.onBlur&&r.props.onBlur(y),r.setState({hasFocus:!1}),r.hasActiveOption()||r.setCustomOptions(!0)):T&&requestAnimationFrame(function(){var L;(L=r.searchInputRefInstance)===null||L===void 0||L.focus()})}),Qn(uo(r),"onKeyDown",function(y){if(!r.props.isDisabled)switch(y.key){case Vo.ARROW_UP:y.preventDefault(),y.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(-1):r.openList();break;case Vo.ARROW_DOWN:y.preventDefault(),y.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(1):r.openList();break;case Vo.BACKSPACE:y.stopPropagation(),r.removeLastOption();break;case Vo.ESCAPE:r.state.isListOpen&&(y.preventDefault(),y.stopPropagation(),r.closeList());break;case Vo.ENTER:y.preventDefault(),y.stopPropagation(),r.hasActiveOption()?r.onAddOption(r.state.matchingOptions[r.state.activeOptionIndex]):r.setCustomOptions(!1);break;case Vo.TAB:r.hasActiveOption()&&r.state.isListOpen&&(y.preventDefault(),y.stopPropagation());break;default:r.props.onKeyDown&&r.props.onKeyDown(y)}}),Qn(uo(r),"onOptionEnterKey",function(y){r.onAddOption(y)}),Qn(uo(r),"onOptionClick",function(y){r.onAddOption(y)}),Qn(uo(r),"onAddOption",function(y,_){if(!y.disabled){var k=r.props,T=k.onChange,N=k.selectedOptions,L=k.singleSelection,Y=!!L,q=Y?[y]:N.concat(y);T&&T(q),r.clearSearchValue(),r.clearActiveOption(),_||r.searchInputRefInstance&&r.searchInputRefInstance.focus(),Y?requestAnimationFrame(function(){return r.closeList()}):r.setState({activeOptionIndex:r.state.matchingOptions.indexOf(y)})}}),Qn(uo(r),"onRemoveOption",function(y){var _=r.props,k=_.onChange,T=_.selectedOptions;k&&k(T.filter(function(N){return N!==y})),r.clearActiveOption()}),Qn(uo(r),"clearSelectedOptions",function(){var y=r.props.onChange;y&&y([]),r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.state.isListOpen||r.openList()}),Qn(uo(r),"onComboBoxClick",function(){if(r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.props.singleSelection&&r.props.selectedOptions.length===1){var y=r.state.matchingOptions.findIndex(function(_){return _.label===r.props.selectedOptions[0].label&&_.key===r.props.selectedOptions[0].key});r.setState({activeOptionIndex:y})}else r.clearActiveOption()}),Qn(uo(r),"onOpenListClick",function(){r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.state.isListOpen||r.openList()}),Qn(uo(r),"onOptionListScroll",function(){r.searchInputRefInstance&&r.searchInputRefInstance.focus()}),Qn(uo(r),"onCloseListClick",function(){r.closeList()}),Qn(uo(r),"onSearchChange",function(y){var _=r.props,k=_.onSearchChange,T=_.delimiter;if(k){var N=r.state.matchingOptions.length>0;k(y,N)}r.setState({searchValue:y},function(){y&&r.state.isListOpen===!1&&r.openList()}),T&&y.endsWith(T)&&r.setCustomOptions(!1)}),Qn(uo(r),"updateMatchingOptionsIfDifferent",function(y){var _=r.state,k=_.matchingOptions,T=_.activeOptionIndex,N=r.props,L=N.singleSelection,Y=N.selectedOptions,q=!1;if(k.length!==y.length)q=!0;else for(var K=0;K0,id:An,inputRef:this.searchInputRefCallback,isDisabled:K,isListOpen:Sr,noIcon:!!Z,onChange:this.onSearchChange,onClear:q&&!K?this.clearSelectedOptions:void 0,onClick:this.onComboBoxClick,onCloseListClick:this.onCloseListClick,onFocus:this.onComboBoxFocus,onOpenListClick:this.onOpenListClick,onRemoveOption:this.onRemoveOption,placeholder:Pe,rootId:this.rootId,searchValue:ir,selectedOptions:Je,singleSelection:Me,toggleButtonRef:this.toggleButtonRefCallback,updatePosition:this.updatePosition,value:Vr,append:Me?yt:void 0,prepend:Me?Ve:void 0,isLoading:X,autoFocus:Mt,"aria-label":wt,"aria-labelledby":_t}),eo)}}],[{key:"getDerivedStateFromProps",value:function(o,i){var d=o.options,y=o.selectedOptions,_=o.singleSelection,k=o.sortMatchesBy,T=i.activeOptionIndex,N=i.searchValue,L=VJ(d,y,N,o.async,!!_,k),Y={matchingOptions:L};return T>=L.length&&(Y.activeOptionIndex=-1),Y}}]),n}(GSe.Component);Qn(Lk,"defaultProps",{async:!1,compressed:!1,fullWidth:!1,isClearable:!0,options:[],selectedOptions:[],singleSelection:!1,prepend:void 0,append:void 0,sortMatchesBy:"none"});Lk.propTypes={"data-test-subj":bi.default.string,async:bi.default.bool.isRequired,className:bi.default.string,compressed:bi.default.bool.isRequired,fullWidth:bi.default.bool.isRequired,id:bi.default.string,inputRef:bi.default.any,isClearable:bi.default.bool.isRequired,isDisabled:bi.default.bool,isInvalid:bi.default.bool,isLoading:bi.default.bool,noSuggestions:bi.default.bool,onBlur:bi.default.any,onChange:bi.default.func,onFocus:bi.default.any,onKeyDown:bi.default.any,onSearchChange:bi.default.func,placeholder:bi.default.string,rowHeight:bi.default.number,singleSelection:bi.default.oneOfType([bi.default.bool.isRequired,bi.default.shape({asPlainText:bi.default.bool}).isRequired]).isRequired,sortMatchesBy:bi.default.oneOf(["none","startsWith"]).isRequired,prepend:bi.default.any,append:bi.default.any,delimiter:bi.default.string,autoFocus:bi.default.bool,"aria-label":bi.default.string,"aria-labelledby":bi.default.string};var e7=V(ne()),Z_=V(er());var JCr=V(ne()),pv=V(er()),tEe=V(Ar());var RCr=V(ne()),Qo=V(er()),KSe=V(Ar());var ELt=["className","isActive","isPlaceholder","pageIndex","totalPages"];function qpe(){return qpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PLt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Upe=function(t){var n=t.className,r=t.isActive,o=t.isPlaceholder,i=t.pageIndex,d=t.totalPages,y=kLt(t,ELt),_=(0,KSe.default)("euiPaginationButton",n,{"euiPaginationButton-isActive":r,"euiPaginationButton-isPlaceholder":o}),k=Vpe(Vpe(Vpe({className:_,size:"s",color:"text","data-test-subj":"pagination-button-".concat(i),isDisabled:o||r},r&&{"aria-current":!0}),y["aria-controls"]&&{href:"#".concat(y["aria-controls"])}),y),T=i+1;return c(Mr,{token:"euiPaginationButton.longPageString",default:"Page {page} of {totalPages}",values:{page:T,totalPages:d}},function(N){return c(Mr,{token:"euiPaginationButton.shortPageString",default:"Page {page}",values:{page:T}},function(L){return c(Ff,qpe({"aria-label":d?N:L},k),T)})})};Upe.propTypes={href:Qo.default.string,onClick:Qo.default.func,color:Qo.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Qo.default.oneOf(["xs","s","m"]),flush:Qo.default.oneOf(["left","right","both"]),isDisabled:Qo.default.bool,isLoading:Qo.default.bool,isSelected:Qo.default.bool,target:Qo.default.string,rel:Qo.default.string,type:Qo.default.oneOf(["button","submit"]),buttonRef:Qo.default.any,contentProps:Qo.default.any,iconType:Qo.default.oneOfType([Qo.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Qo.default.string.isRequired,Qo.default.elementType.isRequired]),iconSide:Qo.default.oneOf(["left","right"]),textProps:Qo.default.shape({className:Qo.default.string,"aria-label":Qo.default.string,"data-test-subj":Qo.default.string,ref:Qo.default.any,"data-text":Qo.default.string}),iconSize:Qo.default.oneOf(["s","m"]),className:Qo.default.string,"aria-label":Qo.default.string,"data-test-subj":Qo.default.string,isActive:Qo.default.bool,isPlaceholder:Qo.default.bool,pageIndex:Qo.default.number.isRequired,totalPages:Qo.default.number};var BCr=V(ne()),QJ=V(er()),YSe=V(Ar());function Gpe(){return Gpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ALt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jpe=5,MLt=Math.floor(Jpe*.5),ZJ=function(t){var n=t.className,r=t.pageCount,o=r===void 0?1:r,i=t.activePage,d=i===void 0?0:i,y=t.onPageClick,_=y===void 0?function(){}:y,k=t.compressed,T=t["aria-controls"],N=t.responsive,L=N===void 0?["xs","s"]:N,Y=TLt(t,jLt),q=YA(L,!!L),K=k||q,U=function(ir,xr){if(ir.preventDefault(),T){var qn=document.getElementById(T);qn&&qn.focus()}_(xr)},X=(0,tEe.default)("euiPagination",n),Z=(o<1||K)&&c(IC,{type:"first",ariaControls:T,onClick:function(ir){return U(ir,0)},disabled:d===0}),fe=c(IC,{type:"previous",ariaControls:T,onClick:function(ir){return U(ir,d-1)},disabled:d===0}),me=c(IC,{type:"next",ariaControls:T,onClick:function(ir){return U(ir,d+1)},disabled:d===-1||d===o-1}),ye=(o<1||K)&&c(IC,{type:"last",ariaControls:T,onClick:function(ir){return U(ir,o?o-1:-1)},disabled:d===-1||d===o-1}),ge;if(o){var ae={activePage:d,ariaControls:T,safeClick:U,pageCount:o};if(K)ge=c(Wr,{size:"s",className:"euiPagination__compressedText"},c(Mr,{token:"euiPagination.pageOfTotalCompressed",default:"{page} of {total}",values:{page:c("span",null,d+1),total:c("span",null,o)}}));else{for(var Pe=[],Ne=Math.max(0,Math.min(d-MLt,o-Jpe)),Ye=Math.min(o,Ne+Jpe),Je=Ne,Me=0;Je0&&(Ve.push(c(bH,Q_({pageIndex:0,key:0},ae))),Ne>1&&Ne!==2?Ve.push(c(Mr,{key:"startingEllipses",token:"euiPagination.firstRangeAriaLabel",default:"Skipping pages 2 to {lastPage}",values:{lastPage:Ne}},function(Nr){return c("li",{"aria-label":Nr,className:"euiPaginationButton-isPlaceholder euiPagination__item"},"\u2026")})):Ne===2&&Ve.push(c(bH,Q_({pageIndex:1,key:1},ae))));var Ue=[];Ye=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function mNt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var pH=function(t){var n=t.children,r=t.className,o=t.hasScreenReaderHelpText,i=o===void 0?!0:o,d=hNt(t,dNt),y=Jn(),_=cl("euiMark.highlightStart","highlight start"),k=cl("euiMark.highlightEnd","highlight end"),T=pSe(y,{hasScreenReaderHelpText:i,highlightStart:_,highlightEnd:k}),N=(0,dSe.default)("euiMark",r);return c("mark",Ipe({css:[T,";label:EuiMark;"],className:N},d),n)};pH.propTypes={className:SC.default.string,"aria-label":SC.default.string,"data-test-subj":SC.default.string,hasScreenReaderHelpText:SC.default.bool,children:SC.default.node.isRequired};var vNt=["children","className","search","strict","highlightAll","hasScreenReaderHelpText"];function kpe(){return kpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yNt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bNt=function(t,n,r,o,i){if(!n)return t;if(!t)return null;if(o){var d=wNt(t,n,r);return c(Ppe.Fragment,null,d.map(function(Y){var q=Y.end,K=Y.highlight,U=Y.start,X=t.substr(U,q-U);return K?c(pH,{key:U,hasScreenReaderHelpText:i},X):X}))}var y=r?t:t.toLowerCase(),_=r?n:n.toLowerCase(),k=y.indexOf(_);if(k===-1)return t;var T=t.substr(0,k),N=t.substr(k,n.length),L=t.substr(k+n.length);return c(Ppe.Fragment,null,T,c(pH,{hasScreenReaderHelpText:i},N),L)},wNt=function(t,n,r){for(var o=new RegExp(n,r?"g":"gi"),i=[],d;(d=o.exec(t))!==null;)i.push({start:d.index,end:(d.index||0)+d[0].length});return ONt(i,t.length)},ONt=function(t,n){var r=[],o=function(y,_,k){_-y>0&&r.push({start:y,end:_,highlight:k})};if(t.length===0)o(0,n,!1);else{var i=0;t.forEach(function(d){o(i,d.start,!1),o(d.start,d.end,!0),i=d.end}),o(i,n,!1)}return r},Y_=function(t){var n=t.children,r=t.className,o=t.search,i=t.strict,d=i===void 0?!1:i,y=t.highlightAll,_=y===void 0?!1:y,k=t.hasScreenReaderHelpText,T=k===void 0?!0:k,N=gNt(t,vNt);return c("span",kpe({className:r},N),bNt(n,o,d,_,T))};Y_.propTypes={className:$E.default.string,"aria-label":$E.default.string,"data-test-subj":$E.default.string,children:$E.default.string.isRequired,search:$E.default.string.isRequired,strict:$E.default.bool,highlightAll:$E.default.bool};var Njr=V(ne());var jpe=function(t){var n=t.children;return c("div",{className:"euiComboBoxTitle"},n)};jpe.propTypes={};var mSe=V(ne()),zk=V(er()),vSe=V(Ar());function NJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?NJ=function(n){return typeof n}:NJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},NJ(e)}var xNt=["children","className","disabled","checked","isFocused","showIcons"];function Cpe(){return Cpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function SNt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function ENt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hSe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function LJ(e){return LJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},LJ(e)}function hH(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var TNt=function(t){return t?t==="on"?{icon:"check",color:"text"}:{icon:"cross",color:"text"}:{icon:"empty"}},FJ=function(e){kNt(n,e);var t=PNt(n);function n(){var r;ENt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RNt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function DNt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function wSe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function HJ(e){return HJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},HJ(e)}function V3(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var OSe="euiComboBoxOption__content",Ape=c(Zp,{className:"euiComboBoxOption__enterBadge",color:"hollow",iconType:"returnKey","aria-hidden":"true"}),mH=function(e){NNt(n,e);var t=LNt(n);function n(){var r;DNt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d200?200:ar,qn=c(DJ,{height:xr,onScroll:Z,itemCount:Y.length,itemSize:Ne,itemData:Y,ref:this.setListRef,innerRef:this.setListBoxRef,width:ht},this.ListRow),An=(0,_Se.default)("euiComboBoxOptionsList");return c(pC,WJ({paddingSize:"none",hasShadow:!1,className:An,panelRef:this.listRefCallback,"data-test-subj":"comboBoxOptionsList ".concat(i),style:ySe(ySe({},wt),{},{zIndex:Rt}),isOpen:!0,isAttached:!0,position:ge},Nt),c("div",{className:"euiComboBoxOptionsList__rowWrap"},Sr||qn))}}]),n}(xSe.Component);V3(mH,"defaultProps",{"data-test-subj":"",rowHeight:29});mH.propTypes={className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.oneOfType([Qt.default.string,Qt.default.string.isRequired]),activeOptionIndex:Qt.default.number,areAllOptionsSelected:Qt.default.bool,listboxAriaLabel:Qt.default.string.isRequired,customOptionText:Qt.default.string,fullWidth:Qt.default.bool,getSelectedOptionForSearchValue:Qt.default.func,isLoading:Qt.default.bool,listRef:Qt.default.any.isRequired,matchingOptions:Qt.default.arrayOf(Qt.default.shape({isGroupLabelOption:Qt.default.bool,label:Qt.default.string.isRequired,key:Qt.default.string,options:Qt.default.arrayOf(Qt.default.shape({isGroupLabelOption:Qt.default.bool,label:Qt.default.string.isRequired,key:Qt.default.string,options:Qt.default.arrayOf(Qt.default.any.isRequired),value:Qt.default.any,className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string}).isRequired),value:Qt.default.any,className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string}).isRequired).isRequired,onCloseList:Qt.default.func.isRequired,onCreateOption:Qt.default.func,onOptionClick:Qt.default.func,onOptionEnterKey:Qt.default.func,onScroll:Qt.default.any,optionRef:Qt.default.func.isRequired,options:Qt.default.arrayOf(Qt.default.shape({isGroupLabelOption:Qt.default.bool,label:Qt.default.string.isRequired,key:Qt.default.string,options:Qt.default.arrayOf(Qt.default.shape({isGroupLabelOption:Qt.default.bool,label:Qt.default.string.isRequired,key:Qt.default.string,options:Qt.default.arrayOf(Qt.default.any.isRequired),value:Qt.default.any,className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string}).isRequired),value:Qt.default.any,className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string}).isRequired).isRequired,position:Qt.default.oneOf(["top","bottom"]),renderOption:Qt.default.func,rootId:Qt.default.any.isRequired,rowHeight:Qt.default.number.isRequired,scrollToIndex:Qt.default.number,searchValue:Qt.default.string.isRequired,selectedOptions:Qt.default.arrayOf(Qt.default.shape({isGroupLabelOption:Qt.default.bool,label:Qt.default.string.isRequired,key:Qt.default.string,options:Qt.default.arrayOf(Qt.default.shape({isGroupLabelOption:Qt.default.bool,label:Qt.default.string.isRequired,key:Qt.default.string,options:Qt.default.arrayOf(Qt.default.any.isRequired),value:Qt.default.any,className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string}).isRequired),value:Qt.default.any,className:Qt.default.string,"aria-label":Qt.default.string,"data-test-subj":Qt.default.string}).isRequired).isRequired,updatePosition:Qt.default.func.isRequired,width:Qt.default.number.isRequired,singleSelection:Qt.default.oneOfType([Qt.default.bool.isRequired,Qt.default.shape({asPlainText:Qt.default.bool}).isRequired]),delimiter:Qt.default.string,zIndex:Qt.default.number};function SSe(e){return VNt(e)||$Nt(e)||HNt(e)||WNt()}function WNt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function HNt(e,t){if(e){if(typeof e=="string")return Rpe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Rpe(e,t)}}function $Nt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function VNt(e){if(Array.isArray(e))return Rpe(e)}function Rpe(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&(_.push({key:T.key,label:T.label,isGroupLabelOption:!0}),_=_.concat(N))}else ESe(_,T,n,y,o,i)}),d==="startsWith"){var k={startWith:[],others:[]};return _.forEach(function(T){T.label.toLowerCase().startsWith(y)?k.startWith.push(T):k.others.push(T)}),[].concat(SSe(k.startWith),SSe(k.others))}return _};var BSe=V(ne()),Cr=V(er()),WSe=V(Ar()),HSe=V(MSe());var NSe=V(ne()),$i=V(er()),LSe=V(Ar());function qJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?qJ=function(n){return typeof n}:qJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},qJ(e)}var QNt=["asPlainText","children","className","color","onClick","onClickAriaLabel","onClose","option"];function gH(){return gH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function eLt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function tLt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function RSe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function UJ(e){return UJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},UJ(e)}function zSe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var GJ=function(e){nLt(n,e);var t=oLt(n);function n(){var r;tLt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uLt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function yH(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?yH=function(n){return typeof n}:yH=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},yH(e)}function cLt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function FSe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function XJ(e){return XJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},XJ(e)}function EC(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Wpe=function(e){pLt(n,e);var t=dLt(n);function n(){var r;cLt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d0?"".concat(Ne,". Press Backspace to delete ").concat(ge[ge.length-1].label,". "):"","Combo box input. ").concat(At," Type some text or, to display a list of choices, press Down Arrow. ")+"To exit the list of choices, press Escape.";Nt=me("removeOptionMessage"),_t=c(na,null,c("span",{"aria-live":"polite",id:Nt},ir))}var Pt;fe&&ge&&!ge.length&&!ye&&(Pt=c("p",{className:"euiComboBoxPlaceholder"},fe));var Sr={};!N&&q&&_&&(Sr.clear={"data-test-subj":"comboBoxClearButton",onClick:q});var Nr;Y||(Nr={"aria-label":L?"Close list of options":"Open list of options","data-test-subj":"comboBoxToggleListButton",disabled:N,onClick:L&&!N?U:X,ref:Pe,side:"right",tabIndex:-1,type:"arrowDown"});var ar=(0,WSe.default)("euiComboBox__inputWrap",{"euiComboBox__inputWrap--compressed":i,"euiComboBox__inputWrap--fullWidth":y,"euiComboBox__inputWrap--noWrap":yt,"euiComboBox__inputWrap-isLoading":Me,"euiComboBox__inputWrap-isClearable":q,"euiComboBox__inputWrap--inGroup":Ye||Je});return c(bC,JJ({icon:Nr},Sr,{inputId:k,isLoading:Me,compressed:i,fullWidth:y,prepend:Ye,append:Je}),c("div",{className:ar,"data-test-subj":"comboBoxInput",onClick:K,tabIndex:-1},!yt||!ye?wt:null,Pt,c(HSe.default,{"aria-activedescendant":d,"aria-autocomplete":"list","aria-controls":L?me("listbox"):"","aria-expanded":L,"aria-label":Ue,"aria-labelledby":ht,className:"euiComboBox__input","data-test-subj":"comboBoxSearchInput",disabled:N,id:k,inputRef:T,onBlur:this.onBlur,onChange:this.inputOnChange,onFocus:this.onFocus,ref:this.inputRefCallback,role:"combobox",style:{fontSize:14},value:ye,autoFocus:Ve}),_t))}}]),n}(BSe.Component);Wpe.propTypes={autoSizeInputRef:Cr.default.any,compressed:Cr.default.bool.isRequired,focusedOptionId:Cr.default.string,fullWidth:Cr.default.bool,hasSelectedOptions:Cr.default.bool.isRequired,id:Cr.default.string,inputRef:Cr.default.any,isDisabled:Cr.default.bool,isListOpen:Cr.default.bool.isRequired,noIcon:Cr.default.bool.isRequired,onBlur:Cr.default.any,onChange:Cr.default.func,onClear:Cr.default.func,onClick:Cr.default.func,onCloseListClick:Cr.default.func.isRequired,onFocus:Cr.default.any.isRequired,onOpenListClick:Cr.default.func.isRequired,onRemoveOption:Cr.default.func,placeholder:Cr.default.string,rootId:Cr.default.any.isRequired,searchValue:Cr.default.string.isRequired,selectedOptions:Cr.default.arrayOf(Cr.default.shape({isGroupLabelOption:Cr.default.bool,label:Cr.default.string.isRequired,key:Cr.default.string,options:Cr.default.arrayOf(Cr.default.shape({isGroupLabelOption:Cr.default.bool,label:Cr.default.string.isRequired,key:Cr.default.string,options:Cr.default.arrayOf(Cr.default.any.isRequired),value:Cr.default.any,className:Cr.default.string,"aria-label":Cr.default.string,"data-test-subj":Cr.default.string}).isRequired),value:Cr.default.any,className:Cr.default.string,"aria-label":Cr.default.string,"data-test-subj":Cr.default.string}).isRequired),singleSelection:Cr.default.oneOfType([Cr.default.bool.isRequired,Cr.default.shape({asPlainText:Cr.default.bool}).isRequired]),toggleButtonRef:Cr.default.any,updatePosition:Cr.default.func.isRequired,value:Cr.default.string,prepend:Cr.default.oneOfType([Cr.default.oneOfType([Cr.default.string.isRequired,Cr.default.element.isRequired]).isRequired,Cr.default.arrayOf(Cr.default.oneOfType([Cr.default.string.isRequired,Cr.default.element.isRequired]).isRequired).isRequired]),append:Cr.default.oneOfType([Cr.default.oneOfType([Cr.default.string.isRequired,Cr.default.element.isRequired]).isRequired,Cr.default.arrayOf(Cr.default.oneOfType([Cr.default.string.isRequired,Cr.default.element.isRequired]).isRequired).isRequired]),isLoading:Cr.default.bool,autoFocus:Cr.default.bool,"aria-label":Cr.default.string,"aria-labelledby":Cr.default.string,className:Cr.default.string,"data-test-subj":Cr.default.string};function KJ(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?KJ=function(n){return typeof n}:KJ=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},KJ(e)}var vLt=["data-test-subj","async","className","compressed","customOptionText","fullWidth","id","inputRef","isClearable","isDisabled","isInvalid","isLoading","noSuggestions","onBlur","onChange","onCreateOption","onSearchChange","options","placeholder","renderOption","rowHeight","selectedOptions","singleSelection","prepend","sortMatchesBy","delimiter","append","autoFocus","aria-label","aria-labelledby"];function Hpe(){return Hpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yLt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function $Se(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function VSe(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function YJ(e){return YJ=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},YJ(e)}function Qn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var USe="",Lk=function(e){OLt(n,e);var t=xLt(n);function n(){var r;bLt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d0&&arguments[0]!==void 0?arguments[0]:r.state.listElement;if(r._isMounted&&r.state.isListOpen&&y){var _=y.getBoundingClientRect();if(!(_.width===0||_.height===0)&&r.comboBoxRefInstance){var k=r.comboBoxRefInstance.getBoundingClientRect(),T=CE({allowCrossAxis:!1,anchor:r.comboBoxRefInstance,popover:y,position:"bottom"}),N=T.position,L=T.top;r.listRefInstance&&(r.listRefInstance.style.top="".concat(L,"px"),r.listRefInstance.style.left="".concat(k.left+window.pageXOffset,"px"),r.listRefInstance.style.width="".concat(k.width,"px")),r.setState({listElement:y,listPosition:N,width:k.width})}}}),Qn(uo(r),"incrementActiveOptionIndex",function(y){r.state.matchingOptions.length&&r.setState(function(_){var k=_.activeOptionIndex,T=_.matchingOptions,N;k<0?N=y<0?T.length-1:0:(N=k+y,N<0?N=T.length-1:N===T.length&&(N=0));for(var L=y>0?1:-1;T[N].isGroupLabelOption;)N=N+L,N<0?N=T.length-1:N===T.length&&(N=0);return{activeOptionIndex:N}})}),Qn(uo(r),"hasActiveOption",function(){return r.state.activeOptionIndex>-1&&r.state.activeOptionIndex0&&r.addCustomOption(y,T)}):r.addCustomOption(y,_)}),Qn(uo(r),"onContainerBlur",function(y){var _=y,k=_.relatedTarget||_.explicitOriginalTarget,T=k&&r.listRefInstance&&r.listRefInstance.contains(k),N=k&&r.comboBoxRefInstance&&r.comboBoxRefInstance.contains(k);!T&&!N?(r.closeList(),r.props.onBlur&&r.props.onBlur(y),r.setState({hasFocus:!1}),r.hasActiveOption()||r.setCustomOptions(!0)):T&&requestAnimationFrame(function(){var L;(L=r.searchInputRefInstance)===null||L===void 0||L.focus()})}),Qn(uo(r),"onKeyDown",function(y){if(!r.props.isDisabled)switch(y.key){case Vo.ARROW_UP:y.preventDefault(),y.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(-1):r.openList();break;case Vo.ARROW_DOWN:y.preventDefault(),y.stopPropagation(),r.state.isListOpen?r.incrementActiveOptionIndex(1):r.openList();break;case Vo.BACKSPACE:y.stopPropagation(),r.removeLastOption();break;case Vo.ESCAPE:r.state.isListOpen&&(y.preventDefault(),y.stopPropagation(),r.closeList());break;case Vo.ENTER:y.preventDefault(),y.stopPropagation(),r.hasActiveOption()?r.onAddOption(r.state.matchingOptions[r.state.activeOptionIndex]):r.setCustomOptions(!1);break;case Vo.TAB:r.hasActiveOption()&&r.state.isListOpen&&(y.preventDefault(),y.stopPropagation());break;default:r.props.onKeyDown&&r.props.onKeyDown(y)}}),Qn(uo(r),"onOptionEnterKey",function(y){r.onAddOption(y)}),Qn(uo(r),"onOptionClick",function(y){r.onAddOption(y)}),Qn(uo(r),"onAddOption",function(y,_){if(!y.disabled){var k=r.props,T=k.onChange,N=k.selectedOptions,L=k.singleSelection,Y=!!L,q=Y?[y]:N.concat(y);T&&T(q),r.clearSearchValue(),r.clearActiveOption(),_||r.searchInputRefInstance&&r.searchInputRefInstance.focus(),Y?requestAnimationFrame(function(){return r.closeList()}):r.setState({activeOptionIndex:r.state.matchingOptions.indexOf(y)})}}),Qn(uo(r),"onRemoveOption",function(y){var _=r.props,k=_.onChange,T=_.selectedOptions;k&&k(T.filter(function(N){return N!==y})),r.clearActiveOption()}),Qn(uo(r),"clearSelectedOptions",function(){var y=r.props.onChange;y&&y([]),r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.state.isListOpen||r.openList()}),Qn(uo(r),"onComboBoxClick",function(){if(r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.props.singleSelection&&r.props.selectedOptions.length===1){var y=r.state.matchingOptions.findIndex(function(_){return _.label===r.props.selectedOptions[0].label&&_.key===r.props.selectedOptions[0].key});r.setState({activeOptionIndex:y})}else r.clearActiveOption()}),Qn(uo(r),"onOpenListClick",function(){r.searchInputRefInstance&&r.searchInputRefInstance.focus(),r.state.isListOpen||r.openList()}),Qn(uo(r),"onOptionListScroll",function(){r.searchInputRefInstance&&r.searchInputRefInstance.focus()}),Qn(uo(r),"onCloseListClick",function(){r.closeList()}),Qn(uo(r),"onSearchChange",function(y){var _=r.props,k=_.onSearchChange,T=_.delimiter;if(k){var N=r.state.matchingOptions.length>0;k(y,N)}r.setState({searchValue:y},function(){y&&r.state.isListOpen===!1&&r.openList()}),T&&y.endsWith(T)&&r.setCustomOptions(!1)}),Qn(uo(r),"updateMatchingOptionsIfDifferent",function(y){var _=r.state,k=_.matchingOptions,T=_.activeOptionIndex,N=r.props,L=N.singleSelection,Y=N.selectedOptions,q=!1;if(k.length!==y.length)q=!0;else for(var K=0;K0,id:An,inputRef:this.searchInputRefCallback,isDisabled:K,isListOpen:Sr,noIcon:!!Z,onChange:this.onSearchChange,onClear:q&&!K?this.clearSelectedOptions:void 0,onClick:this.onComboBoxClick,onCloseListClick:this.onCloseListClick,onFocus:this.onComboBoxFocus,onOpenListClick:this.onOpenListClick,onRemoveOption:this.onRemoveOption,placeholder:Pe,rootId:this.rootId,searchValue:ar,selectedOptions:Je,singleSelection:Me,toggleButtonRef:this.toggleButtonRefCallback,updatePosition:this.updatePosition,value:Vr,append:Me?yt:void 0,prepend:Me?Ve:void 0,isLoading:X,autoFocus:Rt,"aria-label":wt,"aria-labelledby":_t}),eo)}}],[{key:"getDerivedStateFromProps",value:function(o,i){var d=o.options,y=o.selectedOptions,_=o.singleSelection,k=o.sortMatchesBy,T=i.activeOptionIndex,N=i.searchValue,L=VJ(d,y,N,o.async,!!_,k),Y={matchingOptions:L};return T>=L.length&&(Y.activeOptionIndex=-1),Y}}]),n}(GSe.Component);Qn(Lk,"defaultProps",{async:!1,compressed:!1,fullWidth:!1,isClearable:!0,options:[],selectedOptions:[],singleSelection:!1,prepend:void 0,append:void 0,sortMatchesBy:"none"});Lk.propTypes={"data-test-subj":bi.default.string,async:bi.default.bool.isRequired,className:bi.default.string,compressed:bi.default.bool.isRequired,fullWidth:bi.default.bool.isRequired,id:bi.default.string,inputRef:bi.default.any,isClearable:bi.default.bool.isRequired,isDisabled:bi.default.bool,isInvalid:bi.default.bool,isLoading:bi.default.bool,noSuggestions:bi.default.bool,onBlur:bi.default.any,onChange:bi.default.func,onFocus:bi.default.any,onKeyDown:bi.default.any,onSearchChange:bi.default.func,placeholder:bi.default.string,rowHeight:bi.default.number,singleSelection:bi.default.oneOfType([bi.default.bool.isRequired,bi.default.shape({asPlainText:bi.default.bool}).isRequired]).isRequired,sortMatchesBy:bi.default.oneOf(["none","startsWith"]).isRequired,prepend:bi.default.any,append:bi.default.any,delimiter:bi.default.string,autoFocus:bi.default.bool,"aria-label":bi.default.string,"aria-labelledby":bi.default.string};var e7=V(ne()),Z_=V(er());var JCr=V(ne()),pv=V(er()),tEe=V(Ar());var RCr=V(ne()),Qo=V(er()),KSe=V(Ar());var ELt=["className","isActive","isPlaceholder","pageIndex","totalPages"];function qpe(){return qpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PLt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Upe=function(t){var n=t.className,r=t.isActive,o=t.isPlaceholder,i=t.pageIndex,d=t.totalPages,y=kLt(t,ELt),_=(0,KSe.default)("euiPaginationButton",n,{"euiPaginationButton-isActive":r,"euiPaginationButton-isPlaceholder":o}),k=Vpe(Vpe(Vpe({className:_,size:"s",color:"text","data-test-subj":"pagination-button-".concat(i),isDisabled:o||r},r&&{"aria-current":!0}),y["aria-controls"]&&{href:"#".concat(y["aria-controls"])}),y),T=i+1;return c(Mr,{token:"euiPaginationButton.longPageString",default:"Page {page} of {totalPages}",values:{page:T,totalPages:d}},function(N){return c(Mr,{token:"euiPaginationButton.shortPageString",default:"Page {page}",values:{page:T}},function(L){return c(Ff,qpe({"aria-label":d?N:L},k),T)})})};Upe.propTypes={href:Qo.default.string,onClick:Qo.default.func,color:Qo.default.oneOf(["primary","danger","text","ghost","success","warning"]),size:Qo.default.oneOf(["xs","s","m"]),flush:Qo.default.oneOf(["left","right","both"]),isDisabled:Qo.default.bool,isLoading:Qo.default.bool,isSelected:Qo.default.bool,target:Qo.default.string,rel:Qo.default.string,type:Qo.default.oneOf(["button","submit"]),buttonRef:Qo.default.any,contentProps:Qo.default.any,iconType:Qo.default.oneOfType([Qo.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Qo.default.string.isRequired,Qo.default.elementType.isRequired]),iconSide:Qo.default.oneOf(["left","right"]),textProps:Qo.default.shape({className:Qo.default.string,"aria-label":Qo.default.string,"data-test-subj":Qo.default.string,ref:Qo.default.any,"data-text":Qo.default.string}),iconSize:Qo.default.oneOf(["s","m"]),className:Qo.default.string,"aria-label":Qo.default.string,"data-test-subj":Qo.default.string,isActive:Qo.default.bool,isPlaceholder:Qo.default.bool,pageIndex:Qo.default.number.isRequired,totalPages:Qo.default.number};var BCr=V(ne()),QJ=V(er()),YSe=V(Ar());function Gpe(){return Gpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ALt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Jpe=5,MLt=Math.floor(Jpe*.5),ZJ=function(t){var n=t.className,r=t.pageCount,o=r===void 0?1:r,i=t.activePage,d=i===void 0?0:i,y=t.onPageClick,_=y===void 0?function(){}:y,k=t.compressed,T=t["aria-controls"],N=t.responsive,L=N===void 0?["xs","s"]:N,Y=TLt(t,jLt),q=YA(L,!!L),K=k||q,U=function(ar,xr){if(ar.preventDefault(),T){var qn=document.getElementById(T);qn&&qn.focus()}_(xr)},X=(0,tEe.default)("euiPagination",n),Z=(o<1||K)&&c(IC,{type:"first",ariaControls:T,onClick:function(ar){return U(ar,0)},disabled:d===0}),fe=c(IC,{type:"previous",ariaControls:T,onClick:function(ar){return U(ar,d-1)},disabled:d===0}),me=c(IC,{type:"next",ariaControls:T,onClick:function(ar){return U(ar,d+1)},disabled:d===-1||d===o-1}),ye=(o<1||K)&&c(IC,{type:"last",ariaControls:T,onClick:function(ar){return U(ar,o?o-1:-1)},disabled:d===-1||d===o-1}),ge;if(o){var ae={activePage:d,ariaControls:T,safeClick:U,pageCount:o};if(K)ge=c(Wr,{size:"s",className:"euiPagination__compressedText"},c(Mr,{token:"euiPagination.pageOfTotalCompressed",default:"{page} of {total}",values:{page:c("span",null,d+1),total:c("span",null,o)}}));else{for(var Pe=[],Ne=Math.max(0,Math.min(d-MLt,o-Jpe)),Ye=Math.min(o,Ne+Jpe),Je=Ne,Me=0;Je0&&(Ve.push(c(bH,Q_({pageIndex:0,key:0},ae))),Ne>1&&Ne!==2?Ve.push(c(Mr,{key:"startingEllipses",token:"euiPagination.firstRangeAriaLabel",default:"Skipping pages 2 to {lastPage}",values:{lastPage:Ne}},function(Nr){return c("li",{"aria-label":Nr,className:"euiPaginationButton-isPlaceholder euiPagination__item"},"\u2026")})):Ne===2&&Ve.push(c(bH,Q_({pageIndex:1,key:1},ae))));var Ue=[];Yee.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WLt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Fk=function(t){var n=t.activePage,r=t.itemsPerPage,o=r===void 0?50:r,i=t.itemsPerPageOptions,d=i===void 0?[10,20,50,100]:i,y=t.showPerPageOptions,_=y===void 0?!0:y,k=t.onChangeItemsPerPage,T=k===void 0?function(){}:k,N=t.onChangePage,L=t.pageCount,Y=BLt(t,RLt),q=(0,e7.useState)(!1),K=DLt(q,2),U=K[0],X=K[1],Z=(0,e7.useCallback)(function(){X(function(ae){return!ae})},[]),fe=(0,e7.useCallback)(function(){X(!1)},[]),me=c(Ff,{size:"xs",color:"text",iconType:"arrowDown",iconSide:"right","data-test-subj":"tablePaginationPopoverButton",onClick:Z},o===0?c(Mr,{token:"euiTablePagination.allRows",default:"Showing all rows"}):c(e7.default.Fragment,null,c(Mr,{token:"euiTablePagination.rowsPerPage",default:"Rows per page"}),": ",o)),ye=(0,e7.useMemo)(function(){return d.map(function(ae){return c(B3,{key:ae,icon:ae===o?"check":"empty",onClick:function(){fe(),T(ae)},"data-test-subj":"tablePagination-".concat(ae,"-rows")},ae===0?c(Mr,{token:"euiTablePagination.rowsPerPageOptionShowAllRows",default:"Show all rows"}):c(Mr,{token:"euiTablePagination.rowsPerPageOption",values:{rowsPerPage:ae},default:"{rowsPerPage} rows"}))})},[d,o,T,fe]),ge=c(L3,{button:me,isOpen:U,closePopover:fe,panelPaddingSize:"none",anchorPosition:"upRight"},c(K_,{items:ye}));return c(Da,{justifyContent:"spaceBetween",alignItems:"center",responsive:!1,wrap:!0,gutterSize:"s",className:"eui-xScroll"},c(Rr,{grow:!1},_&&ge),c(Rr,{grow:!1},o>0&&c(ZJ,Xpe({pageCount:L,activePage:n,onPageClick:N},Y))))};Fk.propTypes={showPerPageOptions:Z_.default.bool,itemsPerPage:Z_.default.number,itemsPerPageOptions:Z_.default.arrayOf(Z_.default.number.isRequired),onChangeItemsPerPage:Z_.default.func,onChangePage:Z_.default.func,"aria-controls":Z_.default.string,"aria-label":Z_.default.string};var vTr=V(ne()),x4=V(er()),nEe=V(Ar());var HLt=["isSelected","children","className","disabled","href","target","rel","prepend","append"];function eX(){return eX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VLt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Kpe=function(t){var n=t.isSelected,r=t.children,o=t.className,i=t.disabled,d=t.href,y=t.target,_=t.rel,k=t.prepend,T=t.append,N=$Lt(t,HLt),L=!d||Qp(d),Y=i||!L,q=(0,nEe.default)("euiTab",o,{"euiTab-isSelected":n,"euiTab-isDisabled":Y}),K=k&&c("span",{className:"euiTab__prepend"},k),U=T&&c("span",{className:"euiTab__append"},T);if(d&&!Y){var X=vu({href:d,target:y,rel:_});return c("a",eX({role:"tab","aria-selected":!!n,className:q,href:d,target:y,rel:X},N),K,c("span",{className:"euiTab__content"},r),U)}return c("button",eX({role:"tab","aria-selected":!!n,type:"button",className:q,disabled:Y},N),K,c("span",{className:"euiTab__content"},r),U)};Kpe.propTypes={isSelected:x4.default.bool,disabled:x4.default.bool,prepend:x4.default.node,append:x4.default.node,className:x4.default.string,"aria-label":x4.default.string,"data-test-subj":x4.default.string,href:x4.default.string,onClick:x4.default.func};var oEe=V(ne()),iEe=V(Ar());var qLt=["children","className","bottomBorder","expand","size"];function Ype(){return Ype=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GLt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var aEe={s:"euiTabs--small",m:null,l:"euiTabs--large",xl:"euiTabs--xlarge"},ETr=Yr(aEe),Qpe=(0,oEe.forwardRef)(function(e,t){var n=e.children,r=e.className,o=e.bottomBorder,i=o===void 0?!0:o,d=e.expand,y=d===void 0?!1:d,_=e.size,k=_===void 0?"m":_,T=ULt(e,qLt),N=(0,iEe.default)("euiTabs",aEe[k],{"euiTabs--expand":y,"euiTabs--bottomBorder":i},r);return c("div",Ype({ref:t,className:N},n&&{role:"tablist"},T),n)});Qpe.displayName="EuiTabs";var nX=V(ne()),co=V(er());function tX(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?tX=function(n){return typeof n}:tX=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},tX(e)}var JLt=["className","expand","initialSelectedTab","onTabClick","selectedTab","size","tabs","autoFocus"],XLt=["id","name","content"];function Zpe(){return Zpe=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function KLt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function YLt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function cEe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function rX(e){return rX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},rX(e)}function VE(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var kC=function(e){ZLt(n,e);var t=eFt(n);function n(r){var o;YLt(this,n),o=t.call(this,r),VE(Bk(o),"rootId",yo()()),VE(Bk(o),"tabsRef",(0,nX.createRef)()),VE(Bk(o),"focusTab",function(){var k=o.tabsRef.current.querySelector("#".concat(o.state.selectedTabId));k.focus()}),VE(Bk(o),"initializeFocus",function(){!o.state.inFocus&&o.props.autoFocus==="selected"&&o.setState({inFocus:!0},function(){o.focusTab()})}),VE(Bk(o),"removeFocus",function(k){var T=k.currentTarget,N=k.relatedTarget;T.contains(N)===!1&&o.setState({inFocus:!1})}),VE(Bk(o),"onTabClick",function(k){var T=o.props,N=T.onTabClick,L=T.selectedTab;N&&N(k),L||o.setState({selectedTabId:k.id},function(){o.focusTab()})});var i=r.initialSelectedTab,d=r.selectedTab,y=r.tabs,_;return d||(_=i&&i.id||y[0].id),o.state={selectedTabId:_,inFocus:!1},o}return QLt(n,[{key:"componentDidMount",value:function(){this.tabsRef.current&&this.tabsRef.current.addEventListener("focusout",this.removeFocus)}},{key:"componentWillUnmount",value:function(){this.tabsRef.current&&this.tabsRef.current.removeEventListener("focusout",this.removeFocus)}},{key:"render",value:function(){var o=this,i=this.props,d=i.className,y=i.expand,_=i.initialSelectedTab,k=i.onTabClick,T=i.selectedTab,N=i.size,L=i.tabs,Y=i.autoFocus,q=uEe(i,JLt),K=T||L.find(function(fe){return fe.id===o.state.selectedTabId}),U=K,X=U.content,Z=U.id;return c("div",Zpe({className:d},q),c(Qpe,{ref:this.tabsRef,expand:y,size:N,onFocus:this.initializeFocus},L.map(function(fe){var me=fe.id,ye=fe.name,ge=fe.content,ae=uEe(fe,XLt),Pe=lEe(lEe({key:me,id:me},ae),{},{onClick:function(){return o.onTabClick(fe)},isSelected:fe===K,"aria-controls":"".concat(o.rootId)});return c(Kpe,Pe,ye)})),c("div",{role:"tabpanel",id:"".concat(this.rootId),"aria-labelledby":Z},X))}}]),n}(nX.Component);VE(kC,"defaultProps",{autoFocus:"initial"});kC.propTypes={className:co.default.string,"aria-label":co.default.string,"data-test-subj":co.default.string,autoFocus:co.default.oneOf(["initial","selected"]),expand:co.default.bool,initialSelectedTab:co.default.shape({id:co.default.string.isRequired,name:co.default.node.isRequired,content:co.default.node.isRequired,isSelected:co.default.bool,disabled:co.default.bool,prepend:co.default.node,append:co.default.node,className:co.default.string,"aria-label":co.default.string,"data-test-subj":co.default.string}),onTabClick:co.default.func,selectedTab:co.default.shape({id:co.default.string.isRequired,name:co.default.node.isRequired,content:co.default.node.isRequired,isSelected:co.default.bool,disabled:co.default.bool,prepend:co.default.node,append:co.default.node,className:co.default.string,"aria-label":co.default.string,"data-test-subj":co.default.string}),size:co.default.oneOf(["s","m","l","xl"]),tabs:co.default.arrayOf(co.default.shape({id:co.default.string.isRequired,name:co.default.node.isRequired,content:co.default.node.isRequired,isSelected:co.default.bool,disabled:co.default.bool,prepend:co.default.node,append:co.default.node,className:co.default.string,"aria-label":co.default.string,"data-test-subj":co.default.string}).isRequired).isRequired};var pEe=V(ne()),dEe=V(er());function oX(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?oX=function(n){return typeof n}:oX=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},oX(e)}function nFt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function fEe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function iX(e){return iX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},iX(e)}function OH(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var xH=function(e){iFt(n,e);var t=aFt(n);function n(r){var o;return nFt(this,n),o=t.call(this,r),OH(wH(o),"delayID",void 0),OH(wH(o),"toBeDelayed",!0),OH(wH(o),"startDelaying",function(){window.clearTimeout(o.delayID),o.toBeDelayed=!0,o.delayID=window.setTimeout(o.stopDelaying,o.props.delay)}),OH(wH(o),"stopDelaying",function(){window.clearTimeout(o.delayID),o.toBeDelayed=!1,o.shouldUpdate()}),o.state={toggle:!1},o}return oFt(n,[{key:"shouldUpdate",value:function(){this.setState(function(o){var i=o.toggle;return{toggle:!i}})}},{key:"componentDidMount",value:function(){this.startDelaying()}},{key:"shouldComponentUpdate",value:function(){return this.toBeDelayed&&this.startDelaying(),!0}},{key:"componentWillUnmount",value:function(){this.stopDelaying()}},{key:"componentDidUpdate",value:function(){this.toBeDelayed=!0}},{key:"render",value:function(){return this.toBeDelayed?null:this.props.children}}]),n}(pEe.Component);OH(xH,"defaultProps",{delay:500});xH.propTypes={delay:dEe.default.number.isRequired};var $Tr=V(ne()),qE=V(er()),mEe=V(Ar());var uFt={name:"1qhojri-inherit",styles:"font-size:inherit;label:inherit;"},cFt={name:"j8uhck-euiHealth",styles:"display:inline-block;label:euiHealth;"},hEe=function(t){return{euiHealth:cFt,xs:nt(Xy(t,"xs"),";;label:xs;"),s:nt(Xy(t,"s"),";;label:s;"),m:nt(Xy(t,"m"),";;label:m;"),inherit:uFt}};var fFt=["children","className","color","textSize"];function rde(){return rde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dFt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var _H=function(t){var n=t.children,r=t.className,o=t.color,i=t.textSize,d=i===void 0?"s":i,y=pFt(t,fFt),_=Jn(),k=hEe(_),T=[k.euiHealth,k[d]],N=(0,mEe.default)("euiHealth",r);return c("div",rde({css:T,className:N},y),c(Da,{gutterSize:"xs",alignItems:"center",responsive:!1},c(Rr,{grow:!1},c(sn,{type:"dot",color:o})),c(Rr,{grow:!1},n)))};_H.propTypes={className:qE.default.string,"aria-label":qE.default.string,"data-test-subj":qE.default.string,color:qE.default.oneOfType([qE.default.string.isRequired,qE.default.any.isRequired]),textSize:qE.default.any};var lX=V(ne()),Fc=V(er()),REe=V(Ar());var _Ee=V(ne()),ide=V(er()),SEe=V(Ar());var hFt={name:"gacnmc-allowFullScreen",styles:"&:hover [class*='euiImageCaption']{text-decoration:underline;};label:allowFullScreen;"},vEe=function(t){var n=t.euiTheme;return{euiImageWrapper:nt("display:inline-block;",hr("max-width","100%")," ",uv("center"),";line-height:0;flex-shrink:0;;label:euiImageWrapper;"),allowFullScreen:hFt,s:nt("margin:",n.size.s,";;label:s;"),m:nt("margin:",n.size.base,";;label:m;"),l:nt("margin:",n.size.l,";;label:l;"),xl:nt("margin:",n.size.xl,";;label:xl;"),left:nt("@media only screen and (min-width: ",n.breakpoint.m,"px){float:left;float:",kj.left,";",hr("margin-left","0"),";",hr("margin-top","0"),";};label:left;"),right:nt("@media only screen and (min-width: ",n.breakpoint.m,"px){float:right;float:",kj.right,";",hr("margin-right","0"),";",hr("margin-top","0"),";};label:right;"),fullWidth:nt(hr("width","100%"),";;label:fullWidth;")}};var yEe=V(ne()),PC=V(er());var gEe=function(t){var n=t.euiTheme;return{euiImageButton:nt("position:relative;cursor:pointer;text-align:match-parent;line-height:0;&::before{opacity:0;content:'';pointer-events:none;position:absolute;top:0;bottom:0;left:0;right:0;",X0,"{transition:opacity ",n.animation.fast," ",n.animation.resistance,";}}&:hover,&:focus{&::before{opacity:1;}[class*='euiImageButton__icon']{opacity:1;}}&:focus{",Uj(n,"outset"),";};label:euiImageButton;"),fullWidth:nt(hr("width","100%"),";;label:fullWidth;"),shadowHover:nt("&::before{",v4(t,"s"),";};label:shadowHover;"),hasShadowHover:nt("&::before{",v4(t,"m"),";};label:hasShadowHover;")}},mFt={name:"xj4dsa-closeFullScreen",styles:"pointer-events:none;label:closeFullScreen;"},aX=function(t){var n=t.euiTheme;return{euiImageButton__icon:nt("position:absolute;",hr("top",n.size.base),";",hr("right",n.size.base),";;label:euiImageButton__icon;"),openFullScreen:nt("opacity:0;cursor:pointer;",X0,"{transition:opacity ",n.animation.slow," ",n.animation.resistance,";};label:openFullScreen;"),closeFullScreen:mFt}};var vFt=["hasAlt","hasShadow","children","onClick","onKeyDown","isFullScreen","isFullWidth","fullScreenIconColor"];function nde(){return nde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yFt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var bFt={light:"ghost",dark:"default"},SH=function(t){var n=t.hasAlt,r=t.hasShadow,o=t.children,i=t.onClick,d=t.onKeyDown,y=t.isFullScreen,_=t.isFullWidth,k=t.fullScreenIconColor,T=k===void 0?"light":k,N=gFt(t,vFt),L=Jn(),Y=gEe(L),q=[Y.euiImageButton,r?Y.hasShadowHover:Y.shadowHover,!y&&_&&Y.fullWidth],K=aX(L),U=[K.euiImageButton__icon,K.openFullScreen],X=cl("euiImageButton.openFullScreen","Click to open this image in fullscreen mode"),Z=cl("euiImageButton.closeFullScreen","Press Escape or click to close image fullscreen mode"),fe=bFt[T];return c(yEe.default.Fragment,null,c("button",nde({type:"button",css:q,onClick:i,onKeyDown:d},N),y&&c(na,null,c("p",null,Z,n&&" \u2014 ")),o,!y&&c("div",{css:U},c(na,null,c("p",null,n&&" \u2014 ",X)),c(sn,{type:"fullScreen",color:fe}))))};SH.propTypes={hasAlt:PC.default.bool.isRequired,onClick:PC.default.func.isRequired,onKeyDown:PC.default.func,isFullWidth:PC.default.bool.isRequired,isFullScreen:PC.default.bool};var wEe=V(ne()),OEe=V(er());var bEe=function(t){var n=t.euiTheme;return{euiImageCaption:nt(Xy(t,"s"),";",hr("margin-top",n.size.xs),";;label:euiImageCaption;"),isOnOverlayMask:nt("color:",n.colors.ghost,";text-shadow:0 1px 2px ",lv(n.colors.ink,.6),";[class*='euiLink']{color:",n.colors.ghost,";};label:isOnOverlayMask;")}};var jC=(0,wEe.forwardRef)(function(e,t){var n=e.caption,r=e.isOnOverlayMask,o=r===void 0?!1:r,i=Jn(),d=bEe(i),y=[d.euiImageCaption,o&&d.isOnOverlayMask];return n?c("figcaption",{ref:t,css:y},n):null});jC.propTypes={isOnOverlayMask:OEe.default.bool};jC.displayName="EuiImageCaption";function ode(){return ode=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BFt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var uX=function(t){var n=t.className,r=t.alt,o=t.url,i=t.src,d=t.size,y=d===void 0?"original":d,_=t.hasShadow,k=t.style,T=t.wrapperProps,N=t.fullScreenIconColor,L=t.allowFullScreen,Y=t.caption,q=t.float,K=t.margin,U=FFt(t,AFt),X=(0,lX.useState)(!1),Z=RFt(X,2),fe=Z[0],me=Z[1],ye=typeof y=="string"&&TEe.includes(y),ge=(0,REe.default)("euiImage",n),ae=Jn(),Pe=EEe(ae),Ne=[Pe.euiImage,ye&&Pe[y],!ye&&Pe.customSize,_&&Pe.hasShadow],Ye=[Pe.euiImage,Pe.isFullScreen],Je=!ye&&y!=="original",Me=typeof y=="string"?y:"".concat(y,"px"),Ve=Je?cde(cde({},k),{},{maxWidth:Me,maxHeight:Me}):k,Ue=y==="fullWidth",ht={hasShadow:_,wrapperProps:T,setIsFullScreen:me,fullScreenIconColor:N,isFullWidth:Ue,allowFullScreen:L,alt:r,caption:Y,float:q,margin:K},yt=cde({className:ge,src:i||o},U);return c(lX.default.Fragment,null,c(ade,ht,c("img",sX({alt:r,css:Ne,style:Ve},yt))),L&&fe&&c(ude,ht,c("img",sX({alt:r,css:Ye,style:k},yt))))};uX.propTypes={className:Fc.default.string,"aria-label":Fc.default.string,"data-test-subj":Fc.default.string,src:Fc.default.string,url:Fc.default.string,alt:Fc.default.string.isRequired,caption:Fc.default.node,size:Fc.default.oneOfType([Fc.default.any.isRequired,Fc.default.number.isRequired,Fc.default.string.isRequired]),float:Fc.default.any,margin:Fc.default.any,hasShadow:Fc.default.bool,allowFullScreen:Fc.default.bool,fullScreenIconColor:Fc.default.oneOf(["light","dark"]),wrapperProps:Fc.default.any};var NEe=V(ne());var nMr=V(ne());var WFt=nt(".euiScreenReaderOnly{",wE(),";};label:globalStyles;"),DEe=function(){return c(pq,{styles:WFt})};var zEe=V(ne());var cX=function(t){var n=t.cache,r=t.children;return r&&n?c(lee,{value:n},r):c(zEe.default.Fragment,null,r)};var HFt=function(t){return t.hasOwnProperty("key")},jn=function(t){var n=t.cache,r=t.theme,o=r===void 0?Pj:r,i=t.globalStyles,d=i===void 0?R6e:i,y=t.utilityClasses,_=y===void 0?DEe:y,k=t.colorMode,T=t.modify,N=t.children,L,Y,q;return n&&(HFt(n)?L=n:(L=n.default,Y=n.global,q=n.utility)),c(cX,{cache:L},c(Ste,{theme:o??void 0,colorMode:k,modify:T},o&&c(NEe.default.Fragment,null,c(cX,{cache:Y,children:d&&c(d,null)}),c(cX,{cache:q,children:_&&c(_,null)})),c(Ete,null,N)))};var CC=V(ne()),wu=V(er()),pX=V(Ar());function fX(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?fX=function(n){return typeof n}:fX=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},fX(e)}var $Ft=["children","className","items","display","expandByDefault","showExpansionArrows"];function dX(){return dX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function qFt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function UFt(e){return KFt(e)||XFt(e)||JFt(e)||GFt()}function GFt(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function JFt(e,t){if(e){if(typeof e=="string")return fde(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fde(e,t)}}function XFt(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function KFt(e){if(Array.isArray(e))return fde(e)}function fde(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function hX(e){return hX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},hX(e)}function S4(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var HEe=(0,CC.createContext)("");function FEe(e){return e.hasOwnProperty("aria-label")}function BEe(e,t,n){return e??(t===""?n():t)}var WEe={default:null,compressed:"euiTreeView--compressed"},EH=function(e){ZFt(n,e);var t=eBt(n);function n(){var r;YFt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d1&&arguments[1]!==void 0?arguments[1]:!1,k=r.state.openItems.indexOf(y.id);r.setState({expandChildNodes:!1}),y.isExpanded=!y.isExpanded,!_&&y.callback!==void 0&&y.callback(),r.isNodeOpen(y)?r.setState({openItems:r.state.openItems.filter(function(T,N){return N!==k})}):r.setState(function(T){return{openItems:[].concat(UFt(T.openItems),[y.id]),activeItem:y.id}})}),S4(_4(r),"isNodeOpen",function(y){return r.state.openItems.includes(y.id)}),S4(_4(r),"onKeyDown",function(y,_){switch(y.key){case Vo.ARROW_DOWN:{var k=Array.from(document.querySelectorAll('[data-test-subj="euiTreeViewButton-'.concat(r.state.treeID,'"]'))),T=k.indexOf(y.currentTarget);if(T>-1){var N=k[T+1];N&&(y.preventDefault(),y.stopPropagation(),N.focus())}break}case Vo.ARROW_UP:{var L=Array.from(document.querySelectorAll('[data-test-subj="euiTreeViewButton-'.concat(r.state.treeID,'"]'))),Y=L.indexOf(y.currentTarget);if(Y>-1){var q=L[Y+-1];q&&(y.preventDefault(),y.stopPropagation(),q.focus())}break}case Vo.ARROW_RIGHT:{r.isNodeOpen(_)||(y.preventDefault(),y.stopPropagation(),r.handleNodeClick(_,!0));break}case Vo.ARROW_LEFT:r.isNodeOpen(_)&&(y.preventDefault(),y.stopPropagation(),r.handleNodeClick(_,!0));default:break}}),S4(_4(r),"onChildrenKeydown",function(y,_){y.key===Vo.ARROW_LEFT&&(y.preventDefault(),y.stopPropagation(),r.buttonRef[_].focus())}),r}return QFt(n,[{key:"componentDidUpdate",value:function(o){this.props.id!==o.id&&this.setState({treeID:BEe(this.props.id,this.context,this.treeIdGenerator)})}},{key:"render",value:function(){var o=this,i=this.props,d=i.children,y=i.className,_=i.items,k=i.display,T=k===void 0?"default":k,N=i.expandByDefault,L=i.showExpansionArrows,Y=VFt(i,$Ft),q=(0,pX.default)("euiTreeView",T?WEe[T]:null,{"euiTreeView--withArrows":L},y),K="".concat(this.state.treeID,"--instruction");return c(HEe.Provider,{value:this.state.treeID},c(Wr,{size:T==="compressed"?"s":"m",className:"euiTreeView__wrapper"},!this.isNested&&c(Mr,{token:"euiTreeView.listNavigationInstructions",default:"You can quickly navigate this list using arrow keys."},function(U){return c(na,null,c("p",{id:K},U))}),c("ul",dX({className:q,id:this.isNested?void 0:this.state.treeID,"aria-describedby":this.isNested?void 0:K},Y),_.map(function(U,X){var Z=U.id,fe=o.treeIdGenerator(Z);return c(R3,{key:U.id+X,fallback:typeof U.label=="string"?U.label:""},function(me,ye){return c(Mr,{key:U.id+X,token:"euiTreeView.ariaLabel",default:"{nodeLabel} child of {ariaLabel}",values:{nodeLabel:ye,ariaLabel:FEe(Y)?Y["aria-label"]:""}},function(ge){var ae=FEe(Y)?{"aria-label":ge}:{"aria-labelledby":"".concat(Z," ").concat(Y["aria-labelledby"])},Pe=(0,pX.default)("euiTreeView__node",T?WEe[T]:null,{"euiTreeView__node--expanded":o.isNodeOpen(U)}),Ne=(0,pX.default)("euiTreeView__nodeInner",L&&U.children?"euiTreeView__nodeInner--withArrows":null,o.state.activeItem===U.id?"euiTreeView__node--active":null,U.className?U.className:null);return c(CC.default.Fragment,null,c("li",{className:Pe},c("button",{id:Z,"aria-controls":fe,"aria-expanded":o.isNodeOpen(U),ref:function(Je){return o.setButtonRef(Je,X)},"data-test-subj":"euiTreeViewButton-".concat(o.state.treeID),onKeyDown:function(Je){return o.onKeyDown(Je,U)},onClick:function(){return o.handleNodeClick(U)},className:Ne},L&&U.children?c(sn,{className:"euiTreeView__expansionArrow",size:T==="compressed"?"s":"m",type:o.isNodeOpen(U)?"arrowDown":"arrowRight"}):null,U.icon&&!U.useEmptyIcon?c("span",{className:"euiTreeView__iconWrapper"},o.isNodeOpen(U)&&U.iconWhenExpanded?U.iconWhenExpanded:U.icon):null,U.useEmptyIcon&&!U.icon?c("span",{className:"euiTreeView__iconPlaceholder"}):null,c("span",{ref:me,className:"euiTreeView__nodeLabel"},U.label)),c("div",{id:fe,onKeyDown:function(Je){return o.onChildrenKeydown(Je,X)}},U.children&&o.isNodeOpen(U)?c(n,dX({items:U.children,display:T,showExpansionArrows:L,expandByDefault:o.state.expandChildNodes},ae)):null)))})})}))))}}]),n}(CC.Component);S4(EH,"contextType",HEe);EH.propTypes={className:wu.default.string,"data-test-subj":wu.default.string,items:wu.default.arrayOf(wu.default.shape({children:wu.default.arrayOf(wu.default.any.isRequired),label:wu.default.node.isRequired,id:wu.default.string.isRequired,icon:wu.default.element,iconWhenExpanded:wu.default.element,useEmptyIcon:wu.default.bool,isExpanded:wu.default.bool,className:wu.default.string,callback:wu.default.func}).isRequired).isRequired,display:wu.default.oneOf(["default","compressed"]),expandByDefault:wu.default.bool,showExpansionArrows:wu.default.bool,"aria-label":wu.default.string,"aria-labelledby":wu.default.string};var U3=V(ne()),gn=V(er()),n9e=V(Ar());var $Ee=V(ne()),VEe=V(Ar());var dde=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=t.searchableLabel||t.label;return n?r.trim().toLowerCase():r},nBt=function(t,n){var r=t.toLowerCase();return n.find(function(o){return dde(o)===r})},oBt=function(t,n,r,o,i){if(i){var d=nBt(dde(n,!1),i);if(d)return!1}if(o){t.push(n);return}if(!r){t.push(n);return}var y=dde(n);y.includes(r)&&t.push(n)},TC=function(t,n,r,o){var i=n.toLowerCase(),d=[];return t.forEach(function(y){oBt(d,y,i,r,o)}),d};var iBt=["onChange","options","value","placeholder","isPreFiltered","listId","className"];function hde(){return hde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mde=function(t){var n=t.onChange,r=t.options,o=t.value,i=t.placeholder,d=t.isPreFiltered,y=t.listId,_=t.className,k=aBt(t,iBt),T=(0,$Ee.useCallback)(function(Y){var q=Y.target.value,K=TC(r,q,d);n(q,K)},[r,d,n]),N=(0,VEe.default)("euiSelectableSearch",_),L=y?{role:"combobox","aria-autocomplete":"list","aria-expanded":!0,"aria-controls":y,"aria-owns":y}:void 0;return c(sH,hde({className:N,placeholder:i,value:o,onChange:T,incremental:!0,fullWidth:!0,autoComplete:"off","aria-haspopup":"listbox"},L,k))};var HMr=V(ne()),IH=V(er()),qEe=V(Ar());var lBt=["children","className","bordered"];function vde(){return vde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mX=function(t){var n=t.children,r=t.className,o=t.bordered,i=o===void 0?!1:o,d=uBt(t,lBt),y=(0,qEe.default)("euiSelectableMessage",{"euiSelectableMessage--bordered":i},r);return c(Wr,vde({color:"subdued",size:"xs",className:y},d),n)};mX.propTypes={className:IH.default.string,"aria-label":IH.default.string,"data-test-subj":IH.default.string,bordered:IH.default.bool};var MC=V(ne()),ur=V(er()),ZEe=V(Ar());var gX=V(Ar()),wo=V(er()),XEe=V(ne());function vX(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?vX=function(n){return typeof n}:vX=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},vX(e)}var fBt=["children","className","disabled","checked","isFocused","showIcons","prepend","append","allowExclusions","onFocusBadge","paddingSize","role","searchable","textWrap"],pBt=["children","className"];function kH(){return kH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function hBt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function GEe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function yX(e){return yX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},yX(e)}function JEe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function OBt(e){return e?e==="on"?{icon:"check",color:"text"}:{icon:"cross",color:"text"}:{icon:"empty"}}var KEe={none:null,s:"euiSelectableListItem--paddingSmall"},rRr=Yr(KEe),bX=function(e){vBt(n,e);var t=gBt(n);function n(r){return hBt(this,n),t.call(this,r)}return mBt(n,[{key:"render",value:function(){var o=this.props,i=o.children,d=o.className,y=o.disabled,_=o.checked,k=o.isFocused,T=o.showIcons,N=o.prepend,L=o.append,Y=o.allowExclusions,q=o.onFocusBadge,K=o.paddingSize,U=K===void 0?"s":K,X=o.role,Z=X===void 0?"option":X,fe=o.searchable,me=o.textWrap,ye=UEe(o,fBt),ge=(0,gX.default)("euiSelectableListItem",{"euiSelectableListItem-isFocused":k},KEe[U],d),ae=(0,gX.default)("euiSelectableListItem__text",JEe({},"euiSelectableListItem__text--".concat(me),me)),Pe;if(T){var Ne=OBt(_),Ye=Ne.icon,Je=Ne.color;Pe=c(sn,{className:"euiSelectableListItem__icon",color:Je,type:Ye})}var Me,Ve;Y&&_==="on"?(Me=c(Mr,{token:"euiSelectableListItem.includedOption",default:"Selected option."}),Ve=c(Mr,{token:"euiSelectableListItem.includedOptionInstructions",default:"To exclude this option, press enter."})):Y&&_==="off"?(Me=c(Mr,{token:"euiSelectableListItem.excludedOption",default:"Excluded option."}),Ve=c(Mr,{token:"euiSelectableListItem.excludedOptionInstructions",default:"To uncheck this option, press enter."})):Y&&!_&&(Ve=c(Mr,{token:"euiSelectableListItem.unckeckedOptionInstructions",default:"To select this option, press enter."}));var Ue=!y&&typeof _=="string";!Y&&Ue&&(Me=c(Mr,{token:"euiSelectableListItem.checkedOption",default:"Checked option."}),Ve=fe?c(Mr,{token:"euiSelectableListItem.checkedOptionInstructions",default:"To uncheck this option, press enter."}):void 0);var ht;N&&(ht=c("span",{className:"euiSelectableListItem__prepend"},N));var yt;if(L||q){var Mt,wt={"aria-hidden":!0,iconType:"returnKey",iconSide:"left",color:"hollow"};if(q===!0)Mt=c(Zp,kH({className:"euiSelectableListItem__onFocusBadge"},wt));else if(q&&q!==!1){var _t=q.children,Nt=q.className,Rt=UEe(q,pBt);Mt=c(Zp,kH({className:(0,gX.default)("euiSelectableListItem__onFocusBadge",Nt)},wt,Rt),_t)}(L||k&&!y)&&(yt=c("span",{className:"euiSelectableListItem__append"},L," ",k&&!y?Mt:null))}var sr=(Ve||Me)&&c(na,null,c("div",null,Me||Ve?" - ":null,Me,Me&&Ve?" ":null,Ve));return c("li",kH({role:Z,"data-test-selected":Ue,"aria-checked":Z==="option"?Ue:void 0,"aria-selected":!y&&k,className:ge,"aria-disabled":y},ye),c("span",{className:"euiSelectableListItem__content"},Pe,ht,c("span",{className:ae},i,sr),yt))}}]),n}(XEe.Component);JEe(bX,"defaultProps",{showIcons:!0,onFocusBadge:!0,textWrap:"truncate"});bX.propTypes={className:wo.default.string,"aria-label":wo.default.string,"data-test-subj":wo.default.string,children:wo.default.node,checked:wo.default.oneOf(["on","off",void 0]),showIcons:wo.default.bool,isFocused:wo.default.bool,disabled:wo.default.bool,prepend:wo.default.node,append:wo.default.node,allowExclusions:wo.default.bool,onFocusBadge:wo.default.oneOfType([wo.default.bool.isRequired,wo.default.shape({iconType:wo.default.oneOfType([wo.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,wo.default.string.isRequired,wo.default.elementType.isRequired]),iconSide:wo.default.oneOf(["left","right"]),color:wo.default.oneOfType([wo.default.string.isRequired,wo.default.any.isRequired]),isDisabled:wo.default.bool,closeButtonProps:wo.default.any,className:wo.default.string,"aria-label":wo.default.string,"data-test-subj":wo.default.string,iconOnClick:wo.default.func,iconOnClickAriaLabel:wo.default.any,onClick:wo.default.func,onClickAriaLabel:wo.default.any,href:wo.default.string,target:wo.default.string,rel:wo.default.string}).isRequired]),paddingSize:wo.default.any,searchable:wo.default.bool,role:wo.default.any,textWrap:wo.default.oneOf(["truncate","wrap"])};function wX(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?wX=function(n){return typeof n}:wX=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},wX(e)}var xBt=["data"],_Bt=["label","isGroupLabel","checked","disabled","prepend","append","ref","key","searchableLabel","data"],SBt=["className","options","searchValue","onOptionClick","renderOption","height","windowProps","rowHeight","activeOptionIndex","makeOptionId","showIcons","singleSelection","visibleOptions","allowExclusions","bordered","paddingSize","searchable","onFocusBadge","listId","setActiveOptionIndex","aria-label","aria-labelledby","aria-describedby","role","isVirtualized","textWrap"];function YEe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function PH(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function IBt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function QEe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function OX(e){return OX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},OX(e)}function Qy(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var jH=function(e){PBt(n,e);var t=jBt(n);function n(r){var o;return IBt(this,n),o=t.call(this,r),Qy(q3(o),"listRef",null),Qy(q3(o),"listBoxRef",null),Qy(q3(o),"setListRef",function(i){o.listRef=i,i&&o.props.activeOptionIndex&&i.scrollToItem(o.props.activeOptionIndex,"auto")}),Qy(q3(o),"removeScrollableTabStop",function(i){i&&i.setAttribute("tabindex","-1")}),Qy(q3(o),"setListBoxRef",function(i){o.listBoxRef=i;var d=o.props,y=d.listId,_=d.searchable,k=d.singleSelection,T=d["aria-label"],N=d["aria-labelledby"],L=d["aria-describedby"];i&&(i.setAttribute("id",y),i.setAttribute("role","listbox"),_!==!0&&(i.setAttribute("tabindex","0"),k!=="always"&&k!==!0&&i.setAttribute("aria-multiselectable","true")),typeof T=="string"?i.setAttribute("aria-label",T):typeof N=="string"&&i.setAttribute("aria-labelledby",N),typeof L=="string"&&i.setAttribute("aria-labelledby",L))}),Qy(q3(o),"ListRow",(0,MC.memo)(function(i){var d=i.data,y=i.index,_=i.style,k=d[y],T=k.data,N=yde(k,xBt),L=k.label,Y=k.isGroupLabel,q=k.checked,K=k.disabled,U=k.prepend,X=k.append,Z=k.ref,fe=k.key,me=k.searchableLabel,ye=k.data,ge=yde(k,_Bt),ae=o.props,Pe=ae.activeOptionIndex,Ne=ae.allowExclusions,Ye=ae.onFocusBadge,Je=ae.paddingSize,Me=ae.searchValue,Ve=ae.showIcons,Ue=ae.makeOptionId,ht=ae.renderOption,yt=ae.setActiveOptionIndex,Mt=ae.searchable,wt=ae.textWrap;if(Y)return c("li",AC({role:"presentation",className:"euiSelectableList__groupLabel",style:_},ge),U,L,X);var _t=d.filter(function(Rt){return Rt.isGroupLabel}).length,Nt=Ue(y);return c(bX,AC({key:Nt,id:Nt,style:_,onMouseDown:function(){yt(y)},onClick:function(sr){sr.persist(),o.onAddOrRemoveOption(k,sr)},ref:Z?Z.bind(null,y):void 0,isFocused:Pe===y,title:me||L,checked:q,disabled:K,prepend:U,append:X,"aria-posinset":y+1-_t,"aria-setsize":d.length-_t,onFocusBadge:Ye,allowExclusions:Ne,showIcons:Ve,paddingSize:Je,searchable:Mt,textWrap:wt},ge),ht?ht(PH(PH({},N),T),o.props.searchValue):c(Y_,{search:Me},L))},aSe)),Qy(q3(o),"onAddOrRemoveOption",function(i,d){if(!i.disabled){var y=o.props,_=y.allowExclusions,k=y.options,T=y.visibleOptions,N=T===void 0?k:T;o.props.setActiveOptionIndex(N.findIndex(function(L){var Y=L.label;return Y===i.label}),function(){i.checked==="on"&&_?o.onExcludeOption(i,d):i.checked==="on"||i.checked==="off"?o.onRemoveOption(i,d):o.onAddOption(i,d)})}}),Qy(q3(o),"onAddOption",function(i,d){var y=o.props,_=y.onOptionClick,k=y.options,T=y.singleSelection,N=k.map(function(L){var Y=PH({},L);return T&&delete Y.checked,L===i&&(Y.checked="on"),Y});_(N,d)}),Qy(q3(o),"onRemoveOption",function(i,d){var y=o.props,_=y.onOptionClick,k=y.singleSelection,T=y.options,N=T.map(function(L){var Y=PH({},L);return L===i&&k!=="always"&&delete Y.checked,Y});_(N,d)}),Qy(q3(o),"onExcludeOption",function(i,d){var y=o.props,_=y.onOptionClick,k=y.options;i.checked="off";var T=k.map(function(N){var L=PH({},N);return N===i&&(L.checked="off"),L});_(T,d)}),o}return kBt(n,[{key:"componentDidUpdate",value:function(){var o=this.props.activeOptionIndex;this.listBoxRef&&this.props.searchable!==!0&&this.listBoxRef.setAttribute("aria-activedescendant","".concat(this.props.makeOptionId(o))),this.listRef&&typeof this.props.activeOptionIndex<"u"&&this.listRef.scrollToItem(this.props.activeOptionIndex,"auto")}},{key:"render",value:function(){var o=this,i=this.props,d=i.className,y=i.options,_=i.searchValue,k=i.onOptionClick,T=i.renderOption,N=i.height,L=i.windowProps,Y=i.rowHeight,q=i.activeOptionIndex,K=i.makeOptionId,U=i.showIcons,X=i.singleSelection,Z=i.visibleOptions,fe=i.allowExclusions,me=i.bordered,ye=i.paddingSize,ge=i.searchable,ae=i.onFocusBadge,Pe=i.listId,Ne=i.setActiveOptionIndex,Ye=i["aria-label"],Je=i["aria-labelledby"],Me=i["aria-describedby"],Ve=i.role,Ue=i.isVirtualized,ht=i.textWrap,yt=yde(i,SBt),Mt=Z||y,wt=N==="full",_t=wt?!1:N;if(_t===void 0){var Nt=7,Rt=Mt.length,sr=Mt.length>Nt;sr?_t=(Nt-.5)*Y:_t=Rt*Y}var Pt=(0,ZEe.default)("euiSelectableList",{"euiSelectableList-fullHeight":wt,"euiSelectableList-bordered":me},d);return c("div",AC({className:Pt},yt),Ue?c(Fce,{disableHeight:!wt},function(Sr){var Nr=Sr.width,ir=Sr.height;return c(DJ,AC({ref:o.setListRef,outerRef:o.removeScrollableTabStop,className:"euiSelectableList__list","data-skip-axe":"scrollable-region-focusable",width:Nr,height:_t||ir,itemCount:Mt.length,itemData:Mt,itemSize:Y,innerElementType:"ul",innerRef:o.setListBoxRef},L),o.ListRow)}):c("div",{className:"euiSelectableList__list",ref:this.removeScrollableTabStop},c("ul",{ref:this.setListBoxRef},Mt.map(function(Sr,Nr){return MC.default.createElement(o.ListRow,{key:Nr,data:Mt,index:Nr},null)}))))}}]),n}(MC.Component);Qy(jH,"defaultProps",{rowHeight:32,searchValue:"",isVirtualized:!0});jH.propTypes={className:ur.default.string,"aria-label":ur.default.string,"data-test-subj":ur.default.string,activeOptionIndex:ur.default.number,showIcons:ur.default.bool,singleSelection:ur.default.oneOfType([ur.default.oneOf(["always"]),ur.default.bool.isRequired]),windowProps:ur.default.any,bordered:ur.default.bool,onFocusBadge:ur.default.oneOfType([ur.default.bool.isRequired,ur.default.shape({iconType:ur.default.oneOfType([ur.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,ur.default.string.isRequired,ur.default.elementType.isRequired]),iconSide:ur.default.oneOf(["left","right"]),color:ur.default.oneOfType([ur.default.string.isRequired,ur.default.any.isRequired]),isDisabled:ur.default.bool,closeButtonProps:ur.default.any,className:ur.default.string,"aria-label":ur.default.string,"data-test-subj":ur.default.string,iconOnClick:ur.default.func,iconOnClickAriaLabel:ur.default.any,onClick:ur.default.func,onClickAriaLabel:ur.default.any,href:ur.default.string,target:ur.default.string,rel:ur.default.string}).isRequired]),paddingSize:ur.default.any,textWrap:ur.default.oneOf(["truncate","wrap"]),isVirtualized:ur.default.oneOfType([ur.default.oneOf([!0]),ur.default.oneOf([!1]).isRequired]),rowHeight:ur.default.number,options:ur.default.arrayOf(ur.default.shape({isGroupLabel:ur.default.oneOfType([ur.default.oneOf([!0]).isRequired,ur.default.oneOf([!1])]),className:ur.default.string,"aria-label":ur.default.string,"data-test-subj":ur.default.string,label:ur.default.string,searchableLabel:ur.default.string,key:ur.default.string,checked:ur.default.oneOf(["on","off",void 0]),disabled:ur.default.bool,prepend:ur.default.node,append:ur.default.node,ref:ur.default.func,data:ur.default.shape({})}).isRequired).isRequired,visibleOptions:ur.default.arrayOf(ur.default.shape({isGroupLabel:ur.default.oneOfType([ur.default.oneOf([!0]).isRequired,ur.default.oneOf([!1])]),className:ur.default.string,"aria-label":ur.default.string,"data-test-subj":ur.default.string,label:ur.default.string,searchableLabel:ur.default.string,key:ur.default.string,checked:ur.default.oneOf(["on","off",void 0]),disabled:ur.default.bool,prepend:ur.default.node,append:ur.default.node,ref:ur.default.func,data:ur.default.shape({})}).isRequired),searchValue:ur.default.string.isRequired,onOptionClick:ur.default.func.isRequired,renderOption:ur.default.func,height:ur.default.oneOfType([ur.default.number.isRequired,ur.default.oneOf(["full"])]),allowExclusions:ur.default.bool,searchable:ur.default.bool,makeOptionId:ur.default.func.isRequired,listId:ur.default.string.isRequired,setActiveOptionIndex:ur.default.func.isRequired};function xX(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?xX=function(n){return typeof n}:xX=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},xX(e)}var ABt=["children","className","options","onChange","onActiveOptionChange","searchable","searchProps","singleSelection","isLoading","listProps","renderOption","height","allowExclusions","aria-label","aria-describedby","loadingMessage","noMatchesMessage","emptyMessage","errorMessage","isPreFiltered"],MBt=["aria-label","aria-describedby","onChange","defaultValue","inputRef"],RBt=["aria-label","aria-describedby","isVirtualized","rowHeight"];function DBt(e,t){return FBt(e)||LBt(e,t)||NBt(e,t)||zBt()}function zBt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function NBt(e,t){if(e){if(typeof e=="string")return e9e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return e9e(e,t)}}function e9e(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function WBt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r9e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function _X(e){return _X=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},_X(e)}function Bc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var UE=function(e){$Bt(n,e);var t=VBt(n);function n(r){var o,i;WBt(this,n),i=t.call(this,r),Bc(Vf(i),"inputRef",null),Bc(Vf(i),"containerRef",(0,U3.createRef)()),Bc(Vf(i),"optionsListRef",(0,U3.createRef)()),Bc(Vf(i),"preventOnFocus",!1),Bc(Vf(i),"rootId",void 0),Bc(Vf(i),"messageContentId",void 0),Bc(Vf(i),"listId",void 0),Bc(Vf(i),"onMouseDown",function(){i.preventOnFocus=!0}),Bc(Vf(i),"onFocus",function(){if(i.preventOnFocus){i.preventOnFocus=!1;return}if(!(!i.state.visibleOptions.length||i.state.activeOptionIndex!=null)){var q=i.state.visibleOptions.findIndex(function(K){return K.checked&&!K.disabled&&!K.isGroupLabel});q>-1?i.setState({activeOptionIndex:q,isFocused:!0}):i.setState({activeOptionIndex:i.state.visibleOptions.findIndex(function(K){return!K.disabled&&!K.isGroupLabel}),isFocused:!0})}}),Bc(Vf(i),"onKeyDown",function(q){var K=i.optionsListRef.current;switch(q.key){case Vo.ARROW_UP:q.preventDefault(),q.stopPropagation(),i.incrementActiveOptionIndex(-1);break;case Vo.ARROW_DOWN:q.preventDefault(),q.stopPropagation(),i.incrementActiveOptionIndex(1);break;case Vo.ENTER:case Vo.SPACE:if(i.props.searchable){var U,X;if(q.target===i.inputRef&&q.key===Vo.SPACE||!(q.target===i.inputRef||q.target===((U=i.optionsListRef.current)===null||U===void 0||(X=U.listBoxRef)===null||X===void 0?void 0:X.parentElement)))return}q.preventDefault(),q.stopPropagation(),i.state.activeOptionIndex!=null&&K&&(q.persist(),K.onAddOrRemoveOption(i.state.visibleOptions[i.state.activeOptionIndex],q));break;case Vo.ALT:case Vo.SHIFT:case Vo.CTRL:case Vo.META:break;default:i.setState({activeOptionIndex:void 0},i.onFocus);break}}),Bc(Vf(i),"incrementActiveOptionIndex",function(q){i.state.visibleOptions.length&&i.setState(function(K){var U=K.activeOptionIndex,X=K.visibleOptions,Z;U==null?Z=q<0?X.length-1:0:(Z=U+q,Z<0?Z=X.length-1:Z===X.length&&(Z=0));for(var fe=q>0?1:-1;X[Z].isGroupLabel||X[Z].disabled;)Z=Z+fe,Z<0?Z=X.length-1:Z===X.length&&(Z=0);return{activeOptionIndex:Z}})}),Bc(Vf(i),"onSearchChange",function(q,K){var U,X;i.setState({searchValue:q,visibleOptions:K,activeOptionIndex:void 0},function(){i.state.isFocused&&i.onFocus()}),(U=i.props.searchProps)===null||U===void 0||(X=U.onChange)===null||X===void 0||X.call(U,q,K)}),Bc(Vf(i),"onContainerBlur",function(q){var K,U;((K=q.relatedTarget)===null||K===void 0||(U=K.firstChild)===null||U===void 0?void 0:U.id)!==i.listId&&i.setState({activeOptionIndex:void 0,isFocused:!1})}),Bc(Vf(i),"onOptionClick",function(q,K){var U=i.props,X=U.isPreFiltered,Z=U.onChange,fe=i.state.searchValue,me=TC(q,fe,X);i.setState({visibleOptions:me}),Z&&Z(q,K)}),Bc(Vf(i),"scrollToItem",function(q,K){var U,X;(U=i.optionsListRef.current)===null||U===void 0||(X=U.listRef)===null||X===void 0||X.scrollToItem(q,K)}),Bc(Vf(i),"makeOptionId",function(q){return q!=null?"".concat(i.listId,"_option-").concat(q):""}),i.rootId=r.id?function(q){return"".concat(r.id).concat(q?"_".concat(q):"")}:yo(),i.listId=i.rootId("listbox"),i.messageContentId=i.rootId("messageContent");var d=r.options,y=r.singleSelection,_=r.isPreFiltered,k=r.searchProps,T=k?.value||String(k?.defaultValue||""),N=TC(d,T,_);k==null||(o=k.onChange)===null||o===void 0||o.call(k,T,N);var L=d.filter(function(q){return q.checked}),Y;return y&&L.length===1&&N.includes(L[0])&&(Y=N.indexOf(L[0])),i.state={activeOptionIndex:Y,searchValue:T,visibleOptions:N,isFocused:!1},i}return HBt(n,[{key:"componentDidUpdate",value:function(o,i){if(i.activeOptionIndex!==this.state.activeOptionIndex){var d,y,_=this.state.activeOptionIndex!=null?this.state.visibleOptions[this.state.activeOptionIndex]:null;(d=(y=this.props).onActiveOptionChange)===null||d===void 0||d.call(y,_)}}},{key:"render",value:function(){var o=this,i=this.props,d=i.children,y=i.className,_=i.options,k=i.onChange,T=i.onActiveOptionChange,N=i.searchable,L=i.searchProps,Y=i.singleSelection,q=i.isLoading,K=i.listProps,U=i.renderOption,X=i.height,Z=i.allowExclusions,fe=i["aria-label"],me=i["aria-describedby"],ye=i.loadingMessage,ge=i.noMatchesMessage,ae=i.emptyMessage,Pe=i.errorMessage,Ne=i.isPreFiltered,Ye=Ode(i,ABt),Je=this.state,Me=Je.searchValue,Ve=Je.visibleOptions,Ue=Je.activeOptionIndex,ht={"aria-label":void 0,"aria-describedby":void 0},yt=L||ht,Mt=yt["aria-label"],wt=yt["aria-describedby"],_t=yt.onChange,Nt=yt.defaultValue,Rt=yt.inputRef,sr=Ode(yt,MBt),Pt=K||ht,Sr=Pt["aria-label"],Nr=Pt["aria-describedby"],ir=Pt.isVirtualized,xr=Pt.rowHeight,qn=Ode(Pt,RBt),An;ir===!1?An={isVirtualized:ir}:xr!=null&&(An={rowHeight:xr});var Oo=(0,n9e.default)("euiSelectable",{"euiSelectable-fullHeight":X==="full"},y),yn;Pe!=null?yn=typeof Pe=="string"?c("p",null,Pe):Pe:q?ye===void 0||typeof ye=="string"?yn=c(U3.default.Fragment,null,c(Pn,{size:"m"}),c(pl,{size:"xs"}),c("p",null,ye||c(Mr,{token:"euiSelectable.loadingOptions",default:"Loading options"}))):yn=U3.default.cloneElement(ye,wde({id:this.messageContentId},ye.props)):Me&&Ve.length===0?ge===void 0||typeof ge=="string"?yn=c("p",null,ge||c(Mr,{token:"euiSelectable.noMatchingOptions",default:"{searchValue} doesn't match any options",values:{searchValue:c("strong",null,Me)}})):yn=U3.default.cloneElement(ge,wde({id:this.messageContentId},ge.props)):_.length||(ae===void 0||typeof ae=="string"?yn=c("p",null,ae||c(Mr,{token:"euiSelectable.noAvailableOptions",default:"No options available"})):yn=U3.default.cloneElement(ae,wde({id:this.messageContentId},ae.props)));var Vr=function(Ai,mn){if(Ai&&Ai["aria-label"])return{"aria-label":Ai["aria-label"]};var rn=mn?" ".concat(mn):"";return Ai&&Ai["aria-describedby"]?{"aria-describedby":"".concat(Ai["aria-describedby"]).concat(rn)}:fe?{"aria-label":fe}:me?{"aria-describedby":"".concat(me).concat(rn)}:{}},eo=Vr(L,this.messageContentId),Sn=!!Object.keys(eo).length,Ti=N?c(Mr,{token:"euiSelectable.placeholderName",default:"Filter options"},function(Za){return c(mde,CH({key:"listSearch",options:_,value:Me,onChange:o.onSearchChange,listId:o.optionsListRef.current?o.listId:void 0,"aria-activedescendant":o.makeOptionId(Ue),placeholder:Za,isPreFiltered:Ne??!1,inputRef:function(mn){var rn;o.inputRef=mn,L==null||(rn=L.inputRef)===null||rn===void 0||rn.call(L,mn)}},Sn?eo:{"aria-label":Za},sr))}):void 0,Mo=Ve.filter(function(Za){return!Za.disabled}).length,xo=N&&c(Mr,{token:"euiSelectable.searchResults",default:function(Ai){var mn=Ai.resultsLength;return"".concat(mn," result").concat(mn===1?"":"s"," available")},values:{resultsLength:Mo}}),Qa=this.rootId("instructions"),Dn=Vr(K,Qa),mr=!!Object.keys(Dn).length,Un=c(Mr,{tokens:["euiSelectable.screenReaderInstructions","euiSelectable.placeholderName"],defaults:["Use up and down arrows to move focus over options. Enter to select. Escape to collapse options.","Filter options"]},function(Za){var Ai=DBt(Za,2),mn=Ai[0],rn=Ai[1];return c(U3.default.Fragment,null,N&&c(TA,{isActive:yn!=null||Ue!=null},yn||xo),c(na,null,c("p",{id:Qa},rn)),yn?c(mX,{"data-test-subj":"euiSelectableMessage",id:o.messageContentId,bordered:K&&K.bordered},yn):c(jH,CH({"data-test-subj":"euiSelectableList",key:"list",options:_,visibleOptions:Ve,searchValue:Me,activeOptionIndex:Ue,setActiveOptionIndex:function(go,cn){o.setState({activeOptionIndex:go},cn)},onOptionClick:o.onOptionClick,singleSelection:Y,ref:o.optionsListRef,renderOption:U,height:X,allowExclusions:Z,searchable:N,makeOptionId:o.makeOptionId,listId:o.listId},mr?Dn:N&&{"aria-label":mn},qn,An)))});return c("div",CH({ref:this.containerRef,className:Oo,onKeyDown:this.onKeyDown,onBlur:this.onContainerBlur,onFocus:this.onFocus,onMouseDown:this.onMouseDown},Ye),d&&d(Un,Ti))}}],[{key:"getDerivedStateFromProps",value:function(o,i){var d=o.options,y=o.isPreFiltered,_=o.searchProps,k=i.activeOptionIndex,T=i.searchValue,N=TC(d,T,y),L={visibleOptions:N,activeOptionIndex:k};return k!=null&&k>=N.length&&(L.activeOptionIndex=-1),_?.value!=null&&_.value!==T&&(L.searchValue=_.value),L}}]),n}(U3.Component);Bc(UE,"defaultProps",{options:[],singleSelection:!1,searchable:!1,isPreFiltered:!1});UE.propTypes={className:gn.default.string,"aria-label":gn.default.string,"data-test-subj":gn.default.string,searchable:gn.default.oneOfType([gn.default.oneOf([!1]).isRequired,gn.default.oneOf([!0]).isRequired]).isRequired,searchProps:gn.default.any,children:gn.default.func,options:gn.default.arrayOf(gn.default.shape({isGroupLabel:gn.default.oneOfType([gn.default.oneOf([!0]).isRequired,gn.default.oneOf([!1])]),className:gn.default.string,"aria-label":gn.default.string,"data-test-subj":gn.default.string,label:gn.default.string,searchableLabel:gn.default.string,key:gn.default.string,checked:gn.default.oneOf(["on","off",void 0]),disabled:gn.default.bool,prepend:gn.default.node,append:gn.default.node,ref:gn.default.func,data:gn.default.shape({})}).isRequired).isRequired,onChange:gn.default.func,onActiveOptionChange:gn.default.func,singleSelection:gn.default.oneOfType([gn.default.oneOf(["always"]),gn.default.bool.isRequired]),allowExclusions:gn.default.bool,isLoading:gn.default.bool,height:gn.default.oneOfType([gn.default.number.isRequired,gn.default.oneOf(["full"])]),listProps:gn.default.any,renderOption:gn.default.func,loadingMessage:gn.default.oneOfType([gn.default.element.isRequired,gn.default.string.isRequired]),noMatchesMessage:gn.default.oneOfType([gn.default.element.isRequired,gn.default.string.isRequired]),emptyMessage:gn.default.oneOfType([gn.default.element.isRequired,gn.default.string.isRequired]),errorMessage:gn.default.oneOfType([gn.default.element.isRequired,gn.default.string.isRequired,gn.default.oneOf([null])]),isPreFiltered:gn.default.bool};var ERr=V(ne()),Wk=V(er()),o9e=V(Ar());var GBt=["children","className","compressed","tableLayout","responsive"];function _de(){return _de=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var KBt={fixed:null,auto:"euiTable--auto"},SX=function(t){var n=t.children,r=t.className,o=t.compressed,i=t.tableLayout,d=i===void 0?"fixed":i,y=t.responsive,_=y===void 0?!0:y,k=JBt(t,GBt),T=(0,o9e.default)("euiTable",r,{"euiTable--compressed":o,"euiTable--responsive":_},KBt[d]);return c("table",_de({tabIndex:-1,className:T},k),n)};SX.propTypes={compressed:Wk.default.bool,responsive:Wk.default.bool,tableLayout:Wk.default.oneOf(["fixed","auto"]),className:Wk.default.string,"aria-label":Wk.default.string,"data-test-subj":Wk.default.string};var jRr=V(ne()),TH=V(er());var YBt=["children","className","bodyRef"];function Sde(){return Sde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RC=function(t){var n=t.children,r=t.className,o=t.bodyRef,i=QBt(t,YBt);return c("tbody",Sde({className:r,ref:o},i),n)};RC.propTypes={className:TH.default.string,"aria-label":TH.default.string,"data-test-subj":TH.default.string,bodyRef:TH.default.any};var MRr=V(ne()),EX=V(er());var eWt=["children","className"];function Ede(){return Ede=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IX=function(t){var n=t.children,r=t.className,o=tWt(t,eWt);return c("tfoot",Ede({className:r},o),c("tr",null,n))};IX.propTypes={className:EX.default.string,"aria-label":EX.default.string,"data-test-subj":EX.default.string};var LRr=V(ne()),JE=V(er()),kde=V(Ar());var nWt=["width"];function i9e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function a9e(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sWt="Two `width` properties were provided. Provide only one of `style.width` or `width` to avoid conflicts.",GE=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=t.width,o=iWt(t,nWt),i=n;return i!=null&&(typeof i=="number"||!isNaN(Number(i)))&&(i="".concat(i,"px")),r&&i&&console.warn(sWt),a9e(a9e({},o),{},{width:i||r})};var lWt=["children","align","className","width","style"];function Ide(){return Ide=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var DC=function(t){var n=t.children,r=t.align,o=r===void 0?$y:r,i=t.className,d=t.width,y=t.style,_=uWt(t,lWt),k=(0,kde.default)("euiTableFooterCell",i),T=(0,kde.default)("euiTableCellContent",i,{"euiTableCellContent--alignRight":o===j3,"euiTableCellContent--alignCenter":o===L_}),N=GE(y,d);return c("td",Ide({className:k,style:N},_),c("div",{className:T},c("span",{className:"euiTableCellContent__text"},n)))};DC.propTypes={className:JE.default.string,"aria-label":JE.default.string,"data-test-subj":JE.default.string,align:JE.default.oneOf(["left","right","center"]),width:JE.default.oneOfType([JE.default.string.isRequired,JE.default.number.isRequired])};var VRr=V(ne()),zC=V(er());var fWt=["children","className","wrapWithTableRow"];function Pde(){return Pde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kX=function(t){var n=t.children,r=t.className,o=t.wrapWithTableRow,i=o===void 0?!0:o,d=pWt(t,fWt);return c("thead",Pde({className:r},d),i?c("tr",null,n):n)};kX.propTypes={className:zC.default.string,"aria-label":zC.default.string,"data-test-subj":zC.default.string,children:zC.default.node,wrapWithTableRow:zC.default.bool};var JRr=V(ne()),qf=V(er()),PX=V(Ar());var hWt=["children","align","onSort","isSorted","isSortAscending","className","scope","mobileOptions","width","style","readOnly","description"];function jX(){return jX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var s9e=function(t){var n=t.className,r=t.description,o=t.children,i=t.isSorted,d=t.isSortAscending,y=t.showSortMsg;return c("span",{className:n},c(R3,null,function(_,k){return c(Mr,{token:"euiTableHeaderCell.titleTextWithDesc",default:"{innerText}; {description}",values:{innerText:k,description:r}},function(T){return c("span",{title:r?T:k,ref:_,className:"euiTableCellContent__text"},o)})}),r&&c(na,null,c("span",null,r)),y&&i&&c(sn,{className:"euiTableSortIcon",type:d?"sortUp":"sortDown",size:"m"}))},NC=function(t){var n=t.children,r=t.align,o=r===void 0?$y:r,i=t.onSort,d=t.isSorted,y=t.isSortAscending,_=t.className,k=t.scope,T=t.mobileOptions,N=T===void 0?{show:!0}:T,L=t.width,Y=t.style,q=t.readOnly,K=t.description,U=mWt(t,hWt),X=(0,PX.default)("euiTableHeaderCell",_,{"euiTableHeaderCell--hideForDesktop":N.only,"euiTableHeaderCell--hideForMobile":!N.show}),Z=(0,PX.default)("euiTableCellContent",_,{"euiTableCellContent--alignRight":o===j3,"euiTableCellContent--alignCenter":o===L_}),fe=GE(Y,L),me=n?"th":"td",ye=me==="th"?k??"col":void 0;if(i||d){var ge=(0,PX.default)("euiTableHeaderButton",{"euiTableHeaderButton-isSorted":d}),ae="none";d&&(ae=y?"ascending":"descending");var Pe=c(s9e,{className:Z,description:K,showSortMsg:!0,children:n,isSorted:d,isSortAscending:y});return c(me,jX({className:X,scope:ye,role:"columnheader","aria-sort":ae,"aria-live":"polite",style:fe},U),i&&!q?c("button",{type:"button",className:ge,onClick:i,"data-test-subj":"tableHeaderSortButton"},Pe):Pe)}return c(me,jX({className:X,scope:ye,role:"columnheader",style:fe},U),c(s9e,{className:Z,description:K,showSortMsg:!1,children:n,isSorted:d,isSortAscending:y}))};NC.propTypes={className:qf.default.string,"aria-label":qf.default.string,"data-test-subj":qf.default.string,align:qf.default.oneOf(["left","right","center"]),isSortAscending:qf.default.bool,isSorted:qf.default.bool,mobileOptions:qf.default.shape({show:qf.default.bool,only:qf.default.bool}),onSort:qf.default.func,scope:qf.default.oneOf(["col","row","colgroup","rowgroup"]),width:qf.default.oneOfType([qf.default.string.isRequired,qf.default.number.isRequired]),description:qf.default.string,readOnly:qf.default.bool};var oDr=V(ne()),XE=V(er()),l9e=V(Ar());var gWt=["children","className","scope","style","width"];function jde(){return jde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var CX=function(t){var n=t.children,r=t.className,o=t.scope,i=o===void 0?"col":o,d=t.style,y=t.width,_=yWt(t,gWt),k=(0,l9e.default)("euiTableHeaderCellCheckbox",r),T=GE(d,y);return c("th",jde({className:k,scope:i,style:T},_),c("div",{className:"euiTableCellContent"},n))};CX.propTypes={className:XE.default.string,"aria-label":XE.default.string,"data-test-subj":XE.default.string,width:XE.default.oneOfType([XE.default.string.isRequired,XE.default.number.isRequired]),scope:XE.default.oneOf(["col","row","colgroup","rowgroup"])};var uDr=V(ne()),TX=V(er()),u9e=V(Ar());var wWt=["children","className"];function Cde(){return Cde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AX=function(t){var n=t.children,r=t.className,o=OWt(t,wWt),i=(0,u9e.default)("euiTableHeaderMobile",r);return c("div",Cde({className:i},o),n)};AX.propTypes={className:TX.default.string,"aria-label":TX.default.string,"data-test-subj":TX.default.string};var p9e=V(ne()),E4=V(er()),d9e=V(Ar());var dDr=V(ne()),KE=V(er()),c9e=V(Ar());var _Wt=["children","onSort","isSorted","isSortAscending","className","ariaLabel"];function Tde(){return Tde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ade=function(t){var n=t.children,r=t.onSort,o=t.isSorted,i=t.isSortAscending,d=t.className,y=t.ariaLabel,_=SWt(t,_Wt),k="empty";o&&(k=i?"sortUp":"sortDown");var T=(0,c9e.default)("euiTableSortMobileItem",d,{"euiTableSortMobileItem-isSorted":o}),N=y||n,L="Sort ".concat(N," ").concat(i?"descending":"ascending");return c(B3,Tde({className:T,icon:k,onClick:r,"aria-label":L},_),n)};Ade.propTypes={onSort:KE.default.func,isSorted:KE.default.bool,isSortAscending:KE.default.bool,ariaLabel:KE.default.string,className:KE.default.string,"aria-label":KE.default.string,"data-test-subj":KE.default.string};function MX(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?MX=function(n){return typeof n}:MX=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},MX(e)}var IWt=["className","anchorPosition","items"];function Rde(){return Rde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function jWt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f9e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function DX(e){return DX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},DX(e)}function Mde(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var zX=function(e){TWt(n,e);var t=AWt(n);function n(){var r;jWt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hk=function(t){var n=t.children,r=t.className,o=t.isSelected,i=t.isSelectable,d=t.hasActions,y=t.isExpandedRow,_=t.isExpandable,k=t.onClick,T=zWt(t,DWt),N=(0,h9e.default)("euiTableRow",r,{"euiTableRow-isSelectable":i,"euiTableRow-isSelected":o,"euiTableRow-hasActions":d,"euiTableRow-isExpandedRow":y,"euiTableRow-isExpandable":_,"euiTableRow-isClickable":k});if(!k)return c("tr",NX({className:N},T),n);var L=function(K){K.key===Vo.SPACE&&K.preventDefault()},Y=function(K){(K.key===Vo.ENTER||K.key===Vo.SPACE)&&k(K)};return c("tr",NX({className:N,onClick:k,onKeyDown:L,onKeyUp:Y,tabIndex:0},T),n)};Hk.propTypes={className:I4.default.string,"aria-label":I4.default.string,"data-test-subj":I4.default.string,isSelectable:I4.default.bool,isSelected:I4.default.bool,hasActions:I4.default.bool,isExpandable:I4.default.bool,isExpandedRow:I4.default.bool,onClick:I4.default.any};var FC=V(ne()),za=V(er()),LC=V(Ar());var LWt=["align","children","className","truncateText","setScopeRow","showOnHover","textOnly","hasActions","isExpander","style","width","valign","mobileOptions"];function LX(){return LX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YE=function(t){var n,r,o=t.align,i=o===void 0?$y:o,d=t.children,y=t.className,_=t.truncateText,k=t.setScopeRow,T=t.showOnHover,N=t.textOnly,L=N===void 0?!0:N,Y=t.hasActions,q=t.isExpander,K=t.style,U=t.width,X=t.valign,Z=X===void 0?"middle":X,fe=t.mobileOptions,me=fe===void 0?{show:!0}:fe,ye=BWt(t,LWt),ge=(0,LC.default)("euiTableRowCell",v9e({"euiTableRowCell--hasActions":Y,"euiTableRowCell--isExpander":q,"euiTableRowCell--hideForDesktop":me.only,"euiTableRowCell--enlargeForMobile":me.enlarge},"euiTableRowCell--".concat(Z),Z)),ae=(0,LC.default)("euiTableCellContent",y,{"euiTableCellContent--alignRight":i===j3,"euiTableCellContent--alignCenter":i===L_,"euiTableCellContent--showOnHover":T,"euiTableCellContent--truncateText":_,"euiTableCellContent--overflowingContent":L!==!0}),Pe=(0,LC.default)("euiTableCellContent",y,{"euiTableCellContent--alignRight":me.align===j3||i===j3,"euiTableCellContent--alignCenter":me.align===L_||i===L_,"euiTableCellContent--showOnHover":(n=me.showOnHover)!==null&&n!==void 0?n:T,"euiTableCellContent--truncateText":(r=me.truncateText)!==null&&r!==void 0?r:_,"euiTableCellContent--overflowingContent":me.textOnly!==!0||L!==!0}),Ne=(0,LC.default)({euiTableCellContent__text:L===!0,euiTableCellContent__hoverItem:T}),Ye=YA(["xs","s"])&&me.width?me.width:U,Je=GE(K,Ye);function Me(wt){var _t=wt;return L===!0?_t=c("span",{className:Ne},wt):FC.default.isValidElement(wt)&&(_t=FC.default.Children.map(wt,function(Nt){return FC.default.cloneElement(Nt,{className:(0,LC.default)(Nt.props.className,Ne)})})),_t}var Ve=Me(d),Ue="euiTableRowCell--hideForMobile",ht="euiTableRowCell--hideForDesktop",yt=k?"th":"td",Mt=FWt({scope:k?"row":void 0,style:Je},ye);return me.show===!1?c(yt,LX({className:"".concat(ge," ").concat(Ue)},Mt),c("div",{className:ae},Ve)):c(yt,LX({className:ge},Mt),me.header&&c("div",{className:"euiTableRowCell__mobileHeader ".concat(ht)},me.header),me.render?c(FC.Fragment,null,c("div",{className:"".concat(Pe," ").concat(ht)},Me(me.render)),c("div",{className:"".concat(ae," ").concat(Ue)},Ve)):c("div",{className:ae},Ve))};YE.propTypes={className:za.default.string,"aria-label":za.default.string,"data-test-subj":za.default.string,valign:za.default.any,setScopeRow:za.default.bool,hasActions:za.default.bool,isExpander:za.default.bool,mobileOptions:za.default.shape({show:za.default.bool,only:za.default.bool,render:za.default.node,header:za.default.oneOfType([za.default.node.isRequired,za.default.bool.isRequired]),enlarge:za.default.bool,width:za.default.any,align:za.default.oneOf(["left","right","center"]),showOnHover:za.default.bool,textOnly:za.default.bool,truncateText:za.default.bool}),align:za.default.oneOf(["left","right","center"]),showOnHover:za.default.bool,textOnly:za.default.bool,truncateText:za.default.bool,width:za.default.any};var DDr=V(ne()),FX=V(er()),g9e=V(Ar());var HWt=["children","className"];function zde(){return zde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BX=function(t){var n=t.children,r=t.className,o=$Wt(t,HWt),i=(0,g9e.default)("euiTableRowCellCheckbox",r);return c("td",zde({className:i},o),c("div",{className:"euiTableCellContent"},n))};BX.propTypes={className:FX.default.string,"aria-label":FX.default.string,"data-test-subj":FX.default.string};var XX=V(ne()),Tt=V(er()),R9e=V(Ar());var b9e=V(ne()),vo=V(er());function WX(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?WX=function(n){return typeof n}:WX=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},WX(e)}function qWt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function y9e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function HX(e){return HX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},HX(e)}function $k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function YWt(e){return e.hasOwnProperty("render")}var Lde=function(e){GWt(n,e);var t=JWt(n);function n(){var r;qWt(this,n);for(var o=arguments.length,i=new Array(o),d=0;de.length)&&(t=e.length);for(var n=0,r=new Array(t);n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function hX(e){return hX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},hX(e)}function S4(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var HEe=(0,CC.createContext)("");function FEe(e){return e.hasOwnProperty("aria-label")}function BEe(e,t,n){return e??(t===""?n():t)}var WEe={default:null,compressed:"euiTreeView--compressed"},EH=function(e){ZFt(n,e);var t=eBt(n);function n(){var r;YFt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d1&&arguments[1]!==void 0?arguments[1]:!1,k=r.state.openItems.indexOf(y.id);r.setState({expandChildNodes:!1}),y.isExpanded=!y.isExpanded,!_&&y.callback!==void 0&&y.callback(),r.isNodeOpen(y)?r.setState({openItems:r.state.openItems.filter(function(T,N){return N!==k})}):r.setState(function(T){return{openItems:[].concat(UFt(T.openItems),[y.id]),activeItem:y.id}})}),S4(_4(r),"isNodeOpen",function(y){return r.state.openItems.includes(y.id)}),S4(_4(r),"onKeyDown",function(y,_){switch(y.key){case Vo.ARROW_DOWN:{var k=Array.from(document.querySelectorAll('[data-test-subj="euiTreeViewButton-'.concat(r.state.treeID,'"]'))),T=k.indexOf(y.currentTarget);if(T>-1){var N=k[T+1];N&&(y.preventDefault(),y.stopPropagation(),N.focus())}break}case Vo.ARROW_UP:{var L=Array.from(document.querySelectorAll('[data-test-subj="euiTreeViewButton-'.concat(r.state.treeID,'"]'))),Y=L.indexOf(y.currentTarget);if(Y>-1){var q=L[Y+-1];q&&(y.preventDefault(),y.stopPropagation(),q.focus())}break}case Vo.ARROW_RIGHT:{r.isNodeOpen(_)||(y.preventDefault(),y.stopPropagation(),r.handleNodeClick(_,!0));break}case Vo.ARROW_LEFT:r.isNodeOpen(_)&&(y.preventDefault(),y.stopPropagation(),r.handleNodeClick(_,!0));default:break}}),S4(_4(r),"onChildrenKeydown",function(y,_){y.key===Vo.ARROW_LEFT&&(y.preventDefault(),y.stopPropagation(),r.buttonRef[_].focus())}),r}return QFt(n,[{key:"componentDidUpdate",value:function(o){this.props.id!==o.id&&this.setState({treeID:BEe(this.props.id,this.context,this.treeIdGenerator)})}},{key:"render",value:function(){var o=this,i=this.props,d=i.children,y=i.className,_=i.items,k=i.display,T=k===void 0?"default":k,N=i.expandByDefault,L=i.showExpansionArrows,Y=VFt(i,$Ft),q=(0,pX.default)("euiTreeView",T?WEe[T]:null,{"euiTreeView--withArrows":L},y),K="".concat(this.state.treeID,"--instruction");return c(HEe.Provider,{value:this.state.treeID},c(Wr,{size:T==="compressed"?"s":"m",className:"euiTreeView__wrapper"},!this.isNested&&c(Mr,{token:"euiTreeView.listNavigationInstructions",default:"You can quickly navigate this list using arrow keys."},function(U){return c(na,null,c("p",{id:K},U))}),c("ul",dX({className:q,id:this.isNested?void 0:this.state.treeID,"aria-describedby":this.isNested?void 0:K},Y),_.map(function(U,X){var Z=U.id,fe=o.treeIdGenerator(Z);return c(R3,{key:U.id+X,fallback:typeof U.label=="string"?U.label:""},function(me,ye){return c(Mr,{key:U.id+X,token:"euiTreeView.ariaLabel",default:"{nodeLabel} child of {ariaLabel}",values:{nodeLabel:ye,ariaLabel:FEe(Y)?Y["aria-label"]:""}},function(ge){var ae=FEe(Y)?{"aria-label":ge}:{"aria-labelledby":"".concat(Z," ").concat(Y["aria-labelledby"])},Pe=(0,pX.default)("euiTreeView__node",T?WEe[T]:null,{"euiTreeView__node--expanded":o.isNodeOpen(U)}),Ne=(0,pX.default)("euiTreeView__nodeInner",L&&U.children?"euiTreeView__nodeInner--withArrows":null,o.state.activeItem===U.id?"euiTreeView__node--active":null,U.className?U.className:null);return c(CC.default.Fragment,null,c("li",{className:Pe},c("button",{id:Z,"aria-controls":fe,"aria-expanded":o.isNodeOpen(U),ref:function(Je){return o.setButtonRef(Je,X)},"data-test-subj":"euiTreeViewButton-".concat(o.state.treeID),onKeyDown:function(Je){return o.onKeyDown(Je,U)},onClick:function(){return o.handleNodeClick(U)},className:Ne},L&&U.children?c(sn,{className:"euiTreeView__expansionArrow",size:T==="compressed"?"s":"m",type:o.isNodeOpen(U)?"arrowDown":"arrowRight"}):null,U.icon&&!U.useEmptyIcon?c("span",{className:"euiTreeView__iconWrapper"},o.isNodeOpen(U)&&U.iconWhenExpanded?U.iconWhenExpanded:U.icon):null,U.useEmptyIcon&&!U.icon?c("span",{className:"euiTreeView__iconPlaceholder"}):null,c("span",{ref:me,className:"euiTreeView__nodeLabel"},U.label)),c("div",{id:fe,onKeyDown:function(Je){return o.onChildrenKeydown(Je,X)}},U.children&&o.isNodeOpen(U)?c(n,dX({items:U.children,display:T,showExpansionArrows:L,expandByDefault:o.state.expandChildNodes},ae)):null)))})})}))))}}]),n}(CC.Component);S4(EH,"contextType",HEe);EH.propTypes={className:wu.default.string,"data-test-subj":wu.default.string,items:wu.default.arrayOf(wu.default.shape({children:wu.default.arrayOf(wu.default.any.isRequired),label:wu.default.node.isRequired,id:wu.default.string.isRequired,icon:wu.default.element,iconWhenExpanded:wu.default.element,useEmptyIcon:wu.default.bool,isExpanded:wu.default.bool,className:wu.default.string,callback:wu.default.func}).isRequired).isRequired,display:wu.default.oneOf(["default","compressed"]),expandByDefault:wu.default.bool,showExpansionArrows:wu.default.bool,"aria-label":wu.default.string,"aria-labelledby":wu.default.string};var U3=V(ne()),gn=V(er()),n9e=V(Ar());var $Ee=V(ne()),VEe=V(Ar());var dde=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=t.searchableLabel||t.label;return n?r.trim().toLowerCase():r},nBt=function(t,n){var r=t.toLowerCase();return n.find(function(o){return dde(o)===r})},oBt=function(t,n,r,o,i){if(i){var d=nBt(dde(n,!1),i);if(d)return!1}if(o){t.push(n);return}if(!r){t.push(n);return}var y=dde(n);y.includes(r)&&t.push(n)},TC=function(t,n,r,o){var i=n.toLowerCase(),d=[];return t.forEach(function(y){oBt(d,y,i,r,o)}),d};var iBt=["onChange","options","value","placeholder","isPreFiltered","listId","className"];function hde(){return hde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function sBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mde=function(t){var n=t.onChange,r=t.options,o=t.value,i=t.placeholder,d=t.isPreFiltered,y=t.listId,_=t.className,k=aBt(t,iBt),T=(0,$Ee.useCallback)(function(Y){var q=Y.target.value,K=TC(r,q,d);n(q,K)},[r,d,n]),N=(0,VEe.default)("euiSelectableSearch",_),L=y?{role:"combobox","aria-autocomplete":"list","aria-expanded":!0,"aria-controls":y,"aria-owns":y}:void 0;return c(sH,hde({className:N,placeholder:i,value:o,onChange:T,incremental:!0,fullWidth:!0,autoComplete:"off","aria-haspopup":"listbox"},L,k))};var HMr=V(ne()),IH=V(er()),qEe=V(Ar());var lBt=["children","className","bordered"];function vde(){return vde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var mX=function(t){var n=t.children,r=t.className,o=t.bordered,i=o===void 0?!1:o,d=uBt(t,lBt),y=(0,qEe.default)("euiSelectableMessage",{"euiSelectableMessage--bordered":i},r);return c(Wr,vde({color:"subdued",size:"xs",className:y},d),n)};mX.propTypes={className:IH.default.string,"aria-label":IH.default.string,"data-test-subj":IH.default.string,bordered:IH.default.bool};var MC=V(ne()),ur=V(er()),ZEe=V(Ar());var gX=V(Ar()),wo=V(er()),XEe=V(ne());function vX(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?vX=function(n){return typeof n}:vX=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},vX(e)}var fBt=["children","className","disabled","checked","isFocused","showIcons","prepend","append","allowExclusions","onFocusBadge","paddingSize","role","searchable","textWrap"],pBt=["children","className"];function kH(){return kH=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function hBt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function GEe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function yX(e){return yX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},yX(e)}function JEe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function OBt(e){return e?e==="on"?{icon:"check",color:"text"}:{icon:"cross",color:"text"}:{icon:"empty"}}var KEe={none:null,s:"euiSelectableListItem--paddingSmall"},rRr=Yr(KEe),bX=function(e){vBt(n,e);var t=gBt(n);function n(r){return hBt(this,n),t.call(this,r)}return mBt(n,[{key:"render",value:function(){var o=this.props,i=o.children,d=o.className,y=o.disabled,_=o.checked,k=o.isFocused,T=o.showIcons,N=o.prepend,L=o.append,Y=o.allowExclusions,q=o.onFocusBadge,K=o.paddingSize,U=K===void 0?"s":K,X=o.role,Z=X===void 0?"option":X,fe=o.searchable,me=o.textWrap,ye=UEe(o,fBt),ge=(0,gX.default)("euiSelectableListItem",{"euiSelectableListItem-isFocused":k},KEe[U],d),ae=(0,gX.default)("euiSelectableListItem__text",JEe({},"euiSelectableListItem__text--".concat(me),me)),Pe;if(T){var Ne=OBt(_),Ye=Ne.icon,Je=Ne.color;Pe=c(sn,{className:"euiSelectableListItem__icon",color:Je,type:Ye})}var Me,Ve;Y&&_==="on"?(Me=c(Mr,{token:"euiSelectableListItem.includedOption",default:"Selected option."}),Ve=c(Mr,{token:"euiSelectableListItem.includedOptionInstructions",default:"To exclude this option, press enter."})):Y&&_==="off"?(Me=c(Mr,{token:"euiSelectableListItem.excludedOption",default:"Excluded option."}),Ve=c(Mr,{token:"euiSelectableListItem.excludedOptionInstructions",default:"To uncheck this option, press enter."})):Y&&!_&&(Ve=c(Mr,{token:"euiSelectableListItem.unckeckedOptionInstructions",default:"To select this option, press enter."}));var Ue=!y&&typeof _=="string";!Y&&Ue&&(Me=c(Mr,{token:"euiSelectableListItem.checkedOption",default:"Checked option."}),Ve=fe?c(Mr,{token:"euiSelectableListItem.checkedOptionInstructions",default:"To uncheck this option, press enter."}):void 0);var ht;N&&(ht=c("span",{className:"euiSelectableListItem__prepend"},N));var yt;if(L||q){var Rt,wt={"aria-hidden":!0,iconType:"returnKey",iconSide:"left",color:"hollow"};if(q===!0)Rt=c(Zp,kH({className:"euiSelectableListItem__onFocusBadge"},wt));else if(q&&q!==!1){var _t=q.children,Nt=q.className,At=UEe(q,pBt);Rt=c(Zp,kH({className:(0,gX.default)("euiSelectableListItem__onFocusBadge",Nt)},wt,At),_t)}(L||k&&!y)&&(yt=c("span",{className:"euiSelectableListItem__append"},L," ",k&&!y?Rt:null))}var ir=(Ve||Me)&&c(na,null,c("div",null,Me||Ve?" - ":null,Me,Me&&Ve?" ":null,Ve));return c("li",kH({role:Z,"data-test-selected":Ue,"aria-checked":Z==="option"?Ue:void 0,"aria-selected":!y&&k,className:ge,"aria-disabled":y},ye),c("span",{className:"euiSelectableListItem__content"},Pe,ht,c("span",{className:ae},i,ir),yt))}}]),n}(XEe.Component);JEe(bX,"defaultProps",{showIcons:!0,onFocusBadge:!0,textWrap:"truncate"});bX.propTypes={className:wo.default.string,"aria-label":wo.default.string,"data-test-subj":wo.default.string,children:wo.default.node,checked:wo.default.oneOf(["on","off",void 0]),showIcons:wo.default.bool,isFocused:wo.default.bool,disabled:wo.default.bool,prepend:wo.default.node,append:wo.default.node,allowExclusions:wo.default.bool,onFocusBadge:wo.default.oneOfType([wo.default.bool.isRequired,wo.default.shape({iconType:wo.default.oneOfType([wo.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,wo.default.string.isRequired,wo.default.elementType.isRequired]),iconSide:wo.default.oneOf(["left","right"]),color:wo.default.oneOfType([wo.default.string.isRequired,wo.default.any.isRequired]),isDisabled:wo.default.bool,closeButtonProps:wo.default.any,className:wo.default.string,"aria-label":wo.default.string,"data-test-subj":wo.default.string,iconOnClick:wo.default.func,iconOnClickAriaLabel:wo.default.any,onClick:wo.default.func,onClickAriaLabel:wo.default.any,href:wo.default.string,target:wo.default.string,rel:wo.default.string}).isRequired]),paddingSize:wo.default.any,searchable:wo.default.bool,role:wo.default.any,textWrap:wo.default.oneOf(["truncate","wrap"])};function wX(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?wX=function(n){return typeof n}:wX=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},wX(e)}var xBt=["data"],_Bt=["label","isGroupLabel","checked","disabled","prepend","append","ref","key","searchableLabel","data"],SBt=["className","options","searchValue","onOptionClick","renderOption","height","windowProps","rowHeight","activeOptionIndex","makeOptionId","showIcons","singleSelection","visibleOptions","allowExclusions","bordered","paddingSize","searchable","onFocusBadge","listId","setActiveOptionIndex","aria-label","aria-labelledby","aria-describedby","role","isVirtualized","textWrap"];function YEe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function PH(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function IBt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function QEe(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function OX(e){return OX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},OX(e)}function Qy(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var jH=function(e){PBt(n,e);var t=jBt(n);function n(r){var o;return IBt(this,n),o=t.call(this,r),Qy(q3(o),"listRef",null),Qy(q3(o),"listBoxRef",null),Qy(q3(o),"setListRef",function(i){o.listRef=i,i&&o.props.activeOptionIndex&&i.scrollToItem(o.props.activeOptionIndex,"auto")}),Qy(q3(o),"removeScrollableTabStop",function(i){i&&i.setAttribute("tabindex","-1")}),Qy(q3(o),"setListBoxRef",function(i){o.listBoxRef=i;var d=o.props,y=d.listId,_=d.searchable,k=d.singleSelection,T=d["aria-label"],N=d["aria-labelledby"],L=d["aria-describedby"];i&&(i.setAttribute("id",y),i.setAttribute("role","listbox"),_!==!0&&(i.setAttribute("tabindex","0"),k!=="always"&&k!==!0&&i.setAttribute("aria-multiselectable","true")),typeof T=="string"?i.setAttribute("aria-label",T):typeof N=="string"&&i.setAttribute("aria-labelledby",N),typeof L=="string"&&i.setAttribute("aria-labelledby",L))}),Qy(q3(o),"ListRow",(0,MC.memo)(function(i){var d=i.data,y=i.index,_=i.style,k=d[y],T=k.data,N=yde(k,xBt),L=k.label,Y=k.isGroupLabel,q=k.checked,K=k.disabled,U=k.prepend,X=k.append,Z=k.ref,fe=k.key,me=k.searchableLabel,ye=k.data,ge=yde(k,_Bt),ae=o.props,Pe=ae.activeOptionIndex,Ne=ae.allowExclusions,Ye=ae.onFocusBadge,Je=ae.paddingSize,Me=ae.searchValue,Ve=ae.showIcons,Ue=ae.makeOptionId,ht=ae.renderOption,yt=ae.setActiveOptionIndex,Rt=ae.searchable,wt=ae.textWrap;if(Y)return c("li",AC({role:"presentation",className:"euiSelectableList__groupLabel",style:_},ge),U,L,X);var _t=d.filter(function(At){return At.isGroupLabel}).length,Nt=Ue(y);return c(bX,AC({key:Nt,id:Nt,style:_,onMouseDown:function(){yt(y)},onClick:function(ir){ir.persist(),o.onAddOrRemoveOption(k,ir)},ref:Z?Z.bind(null,y):void 0,isFocused:Pe===y,title:me||L,checked:q,disabled:K,prepend:U,append:X,"aria-posinset":y+1-_t,"aria-setsize":d.length-_t,onFocusBadge:Ye,allowExclusions:Ne,showIcons:Ve,paddingSize:Je,searchable:Rt,textWrap:wt},ge),ht?ht(PH(PH({},N),T),o.props.searchValue):c(Y_,{search:Me},L))},aSe)),Qy(q3(o),"onAddOrRemoveOption",function(i,d){if(!i.disabled){var y=o.props,_=y.allowExclusions,k=y.options,T=y.visibleOptions,N=T===void 0?k:T;o.props.setActiveOptionIndex(N.findIndex(function(L){var Y=L.label;return Y===i.label}),function(){i.checked==="on"&&_?o.onExcludeOption(i,d):i.checked==="on"||i.checked==="off"?o.onRemoveOption(i,d):o.onAddOption(i,d)})}}),Qy(q3(o),"onAddOption",function(i,d){var y=o.props,_=y.onOptionClick,k=y.options,T=y.singleSelection,N=k.map(function(L){var Y=PH({},L);return T&&delete Y.checked,L===i&&(Y.checked="on"),Y});_(N,d)}),Qy(q3(o),"onRemoveOption",function(i,d){var y=o.props,_=y.onOptionClick,k=y.singleSelection,T=y.options,N=T.map(function(L){var Y=PH({},L);return L===i&&k!=="always"&&delete Y.checked,Y});_(N,d)}),Qy(q3(o),"onExcludeOption",function(i,d){var y=o.props,_=y.onOptionClick,k=y.options;i.checked="off";var T=k.map(function(N){var L=PH({},N);return N===i&&(L.checked="off"),L});_(T,d)}),o}return kBt(n,[{key:"componentDidUpdate",value:function(){var o=this.props.activeOptionIndex;this.listBoxRef&&this.props.searchable!==!0&&this.listBoxRef.setAttribute("aria-activedescendant","".concat(this.props.makeOptionId(o))),this.listRef&&typeof this.props.activeOptionIndex<"u"&&this.listRef.scrollToItem(this.props.activeOptionIndex,"auto")}},{key:"render",value:function(){var o=this,i=this.props,d=i.className,y=i.options,_=i.searchValue,k=i.onOptionClick,T=i.renderOption,N=i.height,L=i.windowProps,Y=i.rowHeight,q=i.activeOptionIndex,K=i.makeOptionId,U=i.showIcons,X=i.singleSelection,Z=i.visibleOptions,fe=i.allowExclusions,me=i.bordered,ye=i.paddingSize,ge=i.searchable,ae=i.onFocusBadge,Pe=i.listId,Ne=i.setActiveOptionIndex,Ye=i["aria-label"],Je=i["aria-labelledby"],Me=i["aria-describedby"],Ve=i.role,Ue=i.isVirtualized,ht=i.textWrap,yt=yde(i,SBt),Rt=Z||y,wt=N==="full",_t=wt?!1:N;if(_t===void 0){var Nt=7,At=Rt.length,ir=Rt.length>Nt;ir?_t=(Nt-.5)*Y:_t=At*Y}var Pt=(0,ZEe.default)("euiSelectableList",{"euiSelectableList-fullHeight":wt,"euiSelectableList-bordered":me},d);return c("div",AC({className:Pt},yt),Ue?c(Fce,{disableHeight:!wt},function(Sr){var Nr=Sr.width,ar=Sr.height;return c(DJ,AC({ref:o.setListRef,outerRef:o.removeScrollableTabStop,className:"euiSelectableList__list","data-skip-axe":"scrollable-region-focusable",width:Nr,height:_t||ar,itemCount:Rt.length,itemData:Rt,itemSize:Y,innerElementType:"ul",innerRef:o.setListBoxRef},L),o.ListRow)}):c("div",{className:"euiSelectableList__list",ref:this.removeScrollableTabStop},c("ul",{ref:this.setListBoxRef},Rt.map(function(Sr,Nr){return MC.default.createElement(o.ListRow,{key:Nr,data:Rt,index:Nr},null)}))))}}]),n}(MC.Component);Qy(jH,"defaultProps",{rowHeight:32,searchValue:"",isVirtualized:!0});jH.propTypes={className:ur.default.string,"aria-label":ur.default.string,"data-test-subj":ur.default.string,activeOptionIndex:ur.default.number,showIcons:ur.default.bool,singleSelection:ur.default.oneOfType([ur.default.oneOf(["always"]),ur.default.bool.isRequired]),windowProps:ur.default.any,bordered:ur.default.bool,onFocusBadge:ur.default.oneOfType([ur.default.bool.isRequired,ur.default.shape({iconType:ur.default.oneOfType([ur.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,ur.default.string.isRequired,ur.default.elementType.isRequired]),iconSide:ur.default.oneOf(["left","right"]),color:ur.default.oneOfType([ur.default.string.isRequired,ur.default.any.isRequired]),isDisabled:ur.default.bool,closeButtonProps:ur.default.any,className:ur.default.string,"aria-label":ur.default.string,"data-test-subj":ur.default.string,iconOnClick:ur.default.func,iconOnClickAriaLabel:ur.default.any,onClick:ur.default.func,onClickAriaLabel:ur.default.any,href:ur.default.string,target:ur.default.string,rel:ur.default.string}).isRequired]),paddingSize:ur.default.any,textWrap:ur.default.oneOf(["truncate","wrap"]),isVirtualized:ur.default.oneOfType([ur.default.oneOf([!0]),ur.default.oneOf([!1]).isRequired]),rowHeight:ur.default.number,options:ur.default.arrayOf(ur.default.shape({isGroupLabel:ur.default.oneOfType([ur.default.oneOf([!0]).isRequired,ur.default.oneOf([!1])]),className:ur.default.string,"aria-label":ur.default.string,"data-test-subj":ur.default.string,label:ur.default.string,searchableLabel:ur.default.string,key:ur.default.string,checked:ur.default.oneOf(["on","off",void 0]),disabled:ur.default.bool,prepend:ur.default.node,append:ur.default.node,ref:ur.default.func,data:ur.default.shape({})}).isRequired).isRequired,visibleOptions:ur.default.arrayOf(ur.default.shape({isGroupLabel:ur.default.oneOfType([ur.default.oneOf([!0]).isRequired,ur.default.oneOf([!1])]),className:ur.default.string,"aria-label":ur.default.string,"data-test-subj":ur.default.string,label:ur.default.string,searchableLabel:ur.default.string,key:ur.default.string,checked:ur.default.oneOf(["on","off",void 0]),disabled:ur.default.bool,prepend:ur.default.node,append:ur.default.node,ref:ur.default.func,data:ur.default.shape({})}).isRequired),searchValue:ur.default.string.isRequired,onOptionClick:ur.default.func.isRequired,renderOption:ur.default.func,height:ur.default.oneOfType([ur.default.number.isRequired,ur.default.oneOf(["full"])]),allowExclusions:ur.default.bool,searchable:ur.default.bool,makeOptionId:ur.default.func.isRequired,listId:ur.default.string.isRequired,setActiveOptionIndex:ur.default.func.isRequired};function xX(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?xX=function(n){return typeof n}:xX=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},xX(e)}var ABt=["children","className","options","onChange","onActiveOptionChange","searchable","searchProps","singleSelection","isLoading","listProps","renderOption","height","allowExclusions","aria-label","aria-describedby","loadingMessage","noMatchesMessage","emptyMessage","errorMessage","isPreFiltered"],MBt=["aria-label","aria-describedby","onChange","defaultValue","inputRef"],RBt=["aria-label","aria-describedby","isVirtualized","rowHeight"];function DBt(e,t){return FBt(e)||LBt(e,t)||NBt(e,t)||zBt()}function zBt(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function NBt(e,t){if(e){if(typeof e=="string")return e9e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return e9e(e,t)}}function e9e(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function BBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function WBt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r9e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function _X(e){return _X=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},_X(e)}function Bc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var UE=function(e){$Bt(n,e);var t=VBt(n);function n(r){var o,i;WBt(this,n),i=t.call(this,r),Bc(Vf(i),"inputRef",null),Bc(Vf(i),"containerRef",(0,U3.createRef)()),Bc(Vf(i),"optionsListRef",(0,U3.createRef)()),Bc(Vf(i),"preventOnFocus",!1),Bc(Vf(i),"rootId",void 0),Bc(Vf(i),"messageContentId",void 0),Bc(Vf(i),"listId",void 0),Bc(Vf(i),"onMouseDown",function(){i.preventOnFocus=!0}),Bc(Vf(i),"onFocus",function(){if(i.preventOnFocus){i.preventOnFocus=!1;return}if(!(!i.state.visibleOptions.length||i.state.activeOptionIndex!=null)){var q=i.state.visibleOptions.findIndex(function(K){return K.checked&&!K.disabled&&!K.isGroupLabel});q>-1?i.setState({activeOptionIndex:q,isFocused:!0}):i.setState({activeOptionIndex:i.state.visibleOptions.findIndex(function(K){return!K.disabled&&!K.isGroupLabel}),isFocused:!0})}}),Bc(Vf(i),"onKeyDown",function(q){var K=i.optionsListRef.current;switch(q.key){case Vo.ARROW_UP:q.preventDefault(),q.stopPropagation(),i.incrementActiveOptionIndex(-1);break;case Vo.ARROW_DOWN:q.preventDefault(),q.stopPropagation(),i.incrementActiveOptionIndex(1);break;case Vo.ENTER:case Vo.SPACE:if(i.props.searchable){var U,X;if(q.target===i.inputRef&&q.key===Vo.SPACE||!(q.target===i.inputRef||q.target===((U=i.optionsListRef.current)===null||U===void 0||(X=U.listBoxRef)===null||X===void 0?void 0:X.parentElement)))return}q.preventDefault(),q.stopPropagation(),i.state.activeOptionIndex!=null&&K&&(q.persist(),K.onAddOrRemoveOption(i.state.visibleOptions[i.state.activeOptionIndex],q));break;case Vo.ALT:case Vo.SHIFT:case Vo.CTRL:case Vo.META:break;default:i.setState({activeOptionIndex:void 0},i.onFocus);break}}),Bc(Vf(i),"incrementActiveOptionIndex",function(q){i.state.visibleOptions.length&&i.setState(function(K){var U=K.activeOptionIndex,X=K.visibleOptions,Z;U==null?Z=q<0?X.length-1:0:(Z=U+q,Z<0?Z=X.length-1:Z===X.length&&(Z=0));for(var fe=q>0?1:-1;X[Z].isGroupLabel||X[Z].disabled;)Z=Z+fe,Z<0?Z=X.length-1:Z===X.length&&(Z=0);return{activeOptionIndex:Z}})}),Bc(Vf(i),"onSearchChange",function(q,K){var U,X;i.setState({searchValue:q,visibleOptions:K,activeOptionIndex:void 0},function(){i.state.isFocused&&i.onFocus()}),(U=i.props.searchProps)===null||U===void 0||(X=U.onChange)===null||X===void 0||X.call(U,q,K)}),Bc(Vf(i),"onContainerBlur",function(q){var K,U;((K=q.relatedTarget)===null||K===void 0||(U=K.firstChild)===null||U===void 0?void 0:U.id)!==i.listId&&i.setState({activeOptionIndex:void 0,isFocused:!1})}),Bc(Vf(i),"onOptionClick",function(q,K){var U=i.props,X=U.isPreFiltered,Z=U.onChange,fe=i.state.searchValue,me=TC(q,fe,X);i.setState({visibleOptions:me}),Z&&Z(q,K)}),Bc(Vf(i),"scrollToItem",function(q,K){var U,X;(U=i.optionsListRef.current)===null||U===void 0||(X=U.listRef)===null||X===void 0||X.scrollToItem(q,K)}),Bc(Vf(i),"makeOptionId",function(q){return q!=null?"".concat(i.listId,"_option-").concat(q):""}),i.rootId=r.id?function(q){return"".concat(r.id).concat(q?"_".concat(q):"")}:yo(),i.listId=i.rootId("listbox"),i.messageContentId=i.rootId("messageContent");var d=r.options,y=r.singleSelection,_=r.isPreFiltered,k=r.searchProps,T=k?.value||String(k?.defaultValue||""),N=TC(d,T,_);k==null||(o=k.onChange)===null||o===void 0||o.call(k,T,N);var L=d.filter(function(q){return q.checked}),Y;return y&&L.length===1&&N.includes(L[0])&&(Y=N.indexOf(L[0])),i.state={activeOptionIndex:Y,searchValue:T,visibleOptions:N,isFocused:!1},i}return HBt(n,[{key:"componentDidUpdate",value:function(o,i){if(i.activeOptionIndex!==this.state.activeOptionIndex){var d,y,_=this.state.activeOptionIndex!=null?this.state.visibleOptions[this.state.activeOptionIndex]:null;(d=(y=this.props).onActiveOptionChange)===null||d===void 0||d.call(y,_)}}},{key:"render",value:function(){var o=this,i=this.props,d=i.children,y=i.className,_=i.options,k=i.onChange,T=i.onActiveOptionChange,N=i.searchable,L=i.searchProps,Y=i.singleSelection,q=i.isLoading,K=i.listProps,U=i.renderOption,X=i.height,Z=i.allowExclusions,fe=i["aria-label"],me=i["aria-describedby"],ye=i.loadingMessage,ge=i.noMatchesMessage,ae=i.emptyMessage,Pe=i.errorMessage,Ne=i.isPreFiltered,Ye=Ode(i,ABt),Je=this.state,Me=Je.searchValue,Ve=Je.visibleOptions,Ue=Je.activeOptionIndex,ht={"aria-label":void 0,"aria-describedby":void 0},yt=L||ht,Rt=yt["aria-label"],wt=yt["aria-describedby"],_t=yt.onChange,Nt=yt.defaultValue,At=yt.inputRef,ir=Ode(yt,MBt),Pt=K||ht,Sr=Pt["aria-label"],Nr=Pt["aria-describedby"],ar=Pt.isVirtualized,xr=Pt.rowHeight,qn=Ode(Pt,RBt),An;ar===!1?An={isVirtualized:ar}:xr!=null&&(An={rowHeight:xr});var Oo=(0,n9e.default)("euiSelectable",{"euiSelectable-fullHeight":X==="full"},y),yn;Pe!=null?yn=typeof Pe=="string"?c("p",null,Pe):Pe:q?ye===void 0||typeof ye=="string"?yn=c(U3.default.Fragment,null,c(Pn,{size:"m"}),c(pl,{size:"xs"}),c("p",null,ye||c(Mr,{token:"euiSelectable.loadingOptions",default:"Loading options"}))):yn=U3.default.cloneElement(ye,wde({id:this.messageContentId},ye.props)):Me&&Ve.length===0?ge===void 0||typeof ge=="string"?yn=c("p",null,ge||c(Mr,{token:"euiSelectable.noMatchingOptions",default:"{searchValue} doesn't match any options",values:{searchValue:c("strong",null,Me)}})):yn=U3.default.cloneElement(ge,wde({id:this.messageContentId},ge.props)):_.length||(ae===void 0||typeof ae=="string"?yn=c("p",null,ae||c(Mr,{token:"euiSelectable.noAvailableOptions",default:"No options available"})):yn=U3.default.cloneElement(ae,wde({id:this.messageContentId},ae.props)));var Vr=function(Ai,mn){if(Ai&&Ai["aria-label"])return{"aria-label":Ai["aria-label"]};var rn=mn?" ".concat(mn):"";return Ai&&Ai["aria-describedby"]?{"aria-describedby":"".concat(Ai["aria-describedby"]).concat(rn)}:fe?{"aria-label":fe}:me?{"aria-describedby":"".concat(me).concat(rn)}:{}},eo=Vr(L,this.messageContentId),Sn=!!Object.keys(eo).length,Ti=N?c(Mr,{token:"euiSelectable.placeholderName",default:"Filter options"},function(Za){return c(mde,CH({key:"listSearch",options:_,value:Me,onChange:o.onSearchChange,listId:o.optionsListRef.current?o.listId:void 0,"aria-activedescendant":o.makeOptionId(Ue),placeholder:Za,isPreFiltered:Ne??!1,inputRef:function(mn){var rn;o.inputRef=mn,L==null||(rn=L.inputRef)===null||rn===void 0||rn.call(L,mn)}},Sn?eo:{"aria-label":Za},ir))}):void 0,Mo=Ve.filter(function(Za){return!Za.disabled}).length,xo=N&&c(Mr,{token:"euiSelectable.searchResults",default:function(Ai){var mn=Ai.resultsLength;return"".concat(mn," result").concat(mn===1?"":"s"," available")},values:{resultsLength:Mo}}),Qa=this.rootId("instructions"),Dn=Vr(K,Qa),mr=!!Object.keys(Dn).length,Un=c(Mr,{tokens:["euiSelectable.screenReaderInstructions","euiSelectable.placeholderName"],defaults:["Use up and down arrows to move focus over options. Enter to select. Escape to collapse options.","Filter options"]},function(Za){var Ai=DBt(Za,2),mn=Ai[0],rn=Ai[1];return c(U3.default.Fragment,null,N&&c(TA,{isActive:yn!=null||Ue!=null},yn||xo),c(na,null,c("p",{id:Qa},rn)),yn?c(mX,{"data-test-subj":"euiSelectableMessage",id:o.messageContentId,bordered:K&&K.bordered},yn):c(jH,CH({"data-test-subj":"euiSelectableList",key:"list",options:_,visibleOptions:Ve,searchValue:Me,activeOptionIndex:Ue,setActiveOptionIndex:function(go,cn){o.setState({activeOptionIndex:go},cn)},onOptionClick:o.onOptionClick,singleSelection:Y,ref:o.optionsListRef,renderOption:U,height:X,allowExclusions:Z,searchable:N,makeOptionId:o.makeOptionId,listId:o.listId},mr?Dn:N&&{"aria-label":mn},qn,An)))});return c("div",CH({ref:this.containerRef,className:Oo,onKeyDown:this.onKeyDown,onBlur:this.onContainerBlur,onFocus:this.onFocus,onMouseDown:this.onMouseDown},Ye),d&&d(Un,Ti))}}],[{key:"getDerivedStateFromProps",value:function(o,i){var d=o.options,y=o.isPreFiltered,_=o.searchProps,k=i.activeOptionIndex,T=i.searchValue,N=TC(d,T,y),L={visibleOptions:N,activeOptionIndex:k};return k!=null&&k>=N.length&&(L.activeOptionIndex=-1),_?.value!=null&&_.value!==T&&(L.searchValue=_.value),L}}]),n}(U3.Component);Bc(UE,"defaultProps",{options:[],singleSelection:!1,searchable:!1,isPreFiltered:!1});UE.propTypes={className:gn.default.string,"aria-label":gn.default.string,"data-test-subj":gn.default.string,searchable:gn.default.oneOfType([gn.default.oneOf([!1]).isRequired,gn.default.oneOf([!0]).isRequired]).isRequired,searchProps:gn.default.any,children:gn.default.func,options:gn.default.arrayOf(gn.default.shape({isGroupLabel:gn.default.oneOfType([gn.default.oneOf([!0]).isRequired,gn.default.oneOf([!1])]),className:gn.default.string,"aria-label":gn.default.string,"data-test-subj":gn.default.string,label:gn.default.string,searchableLabel:gn.default.string,key:gn.default.string,checked:gn.default.oneOf(["on","off",void 0]),disabled:gn.default.bool,prepend:gn.default.node,append:gn.default.node,ref:gn.default.func,data:gn.default.shape({})}).isRequired).isRequired,onChange:gn.default.func,onActiveOptionChange:gn.default.func,singleSelection:gn.default.oneOfType([gn.default.oneOf(["always"]),gn.default.bool.isRequired]),allowExclusions:gn.default.bool,isLoading:gn.default.bool,height:gn.default.oneOfType([gn.default.number.isRequired,gn.default.oneOf(["full"])]),listProps:gn.default.any,renderOption:gn.default.func,loadingMessage:gn.default.oneOfType([gn.default.element.isRequired,gn.default.string.isRequired]),noMatchesMessage:gn.default.oneOfType([gn.default.element.isRequired,gn.default.string.isRequired]),emptyMessage:gn.default.oneOfType([gn.default.element.isRequired,gn.default.string.isRequired]),errorMessage:gn.default.oneOfType([gn.default.element.isRequired,gn.default.string.isRequired,gn.default.oneOf([null])]),isPreFiltered:gn.default.bool};var ERr=V(ne()),Wk=V(er()),o9e=V(Ar());var GBt=["children","className","compressed","tableLayout","responsive"];function _de(){return _de=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var KBt={fixed:null,auto:"euiTable--auto"},SX=function(t){var n=t.children,r=t.className,o=t.compressed,i=t.tableLayout,d=i===void 0?"fixed":i,y=t.responsive,_=y===void 0?!0:y,k=JBt(t,GBt),T=(0,o9e.default)("euiTable",r,{"euiTable--compressed":o,"euiTable--responsive":_},KBt[d]);return c("table",_de({tabIndex:-1,className:T},k),n)};SX.propTypes={compressed:Wk.default.bool,responsive:Wk.default.bool,tableLayout:Wk.default.oneOf(["fixed","auto"]),className:Wk.default.string,"aria-label":Wk.default.string,"data-test-subj":Wk.default.string};var jRr=V(ne()),TH=V(er());var YBt=["children","className","bodyRef"];function Sde(){return Sde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZBt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var RC=function(t){var n=t.children,r=t.className,o=t.bodyRef,i=QBt(t,YBt);return c("tbody",Sde({className:r,ref:o},i),n)};RC.propTypes={className:TH.default.string,"aria-label":TH.default.string,"data-test-subj":TH.default.string,bodyRef:TH.default.any};var MRr=V(ne()),EX=V(er());var eWt=["children","className"];function Ede(){return Ede=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var IX=function(t){var n=t.children,r=t.className,o=tWt(t,eWt);return c("tfoot",Ede({className:r},o),c("tr",null,n))};IX.propTypes={className:EX.default.string,"aria-label":EX.default.string,"data-test-subj":EX.default.string};var LRr=V(ne()),JE=V(er()),kde=V(Ar());var nWt=["width"];function i9e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function a9e(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function aWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var sWt="Two `width` properties were provided. Provide only one of `style.width` or `width` to avoid conflicts.",GE=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=t.width,o=iWt(t,nWt),i=n;return i!=null&&(typeof i=="number"||!isNaN(Number(i)))&&(i="".concat(i,"px")),r&&i&&console.warn(sWt),a9e(a9e({},o),{},{width:i||r})};var lWt=["children","align","className","width","style"];function Ide(){return Ide=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var DC=function(t){var n=t.children,r=t.align,o=r===void 0?$y:r,i=t.className,d=t.width,y=t.style,_=uWt(t,lWt),k=(0,kde.default)("euiTableFooterCell",i),T=(0,kde.default)("euiTableCellContent",i,{"euiTableCellContent--alignRight":o===j3,"euiTableCellContent--alignCenter":o===L_}),N=GE(y,d);return c("td",Ide({className:k,style:N},_),c("div",{className:T},c("span",{className:"euiTableCellContent__text"},n)))};DC.propTypes={className:JE.default.string,"aria-label":JE.default.string,"data-test-subj":JE.default.string,align:JE.default.oneOf(["left","right","center"]),width:JE.default.oneOfType([JE.default.string.isRequired,JE.default.number.isRequired])};var VRr=V(ne()),zC=V(er());var fWt=["children","className","wrapWithTableRow"];function Pde(){return Pde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var kX=function(t){var n=t.children,r=t.className,o=t.wrapWithTableRow,i=o===void 0?!0:o,d=pWt(t,fWt);return c("thead",Pde({className:r},d),i?c("tr",null,n):n)};kX.propTypes={className:zC.default.string,"aria-label":zC.default.string,"data-test-subj":zC.default.string,children:zC.default.node,wrapWithTableRow:zC.default.bool};var JRr=V(ne()),qf=V(er()),PX=V(Ar());var hWt=["children","align","onSort","isSorted","isSortAscending","className","scope","mobileOptions","width","style","readOnly","description"];function jX(){return jX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function vWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var s9e=function(t){var n=t.className,r=t.description,o=t.children,i=t.isSorted,d=t.isSortAscending,y=t.showSortMsg;return c("span",{className:n},c(R3,null,function(_,k){return c(Mr,{token:"euiTableHeaderCell.titleTextWithDesc",default:"{innerText}; {description}",values:{innerText:k,description:r}},function(T){return c("span",{title:r?T:k,ref:_,className:"euiTableCellContent__text"},o)})}),r&&c(na,null,c("span",null,r)),y&&i&&c(sn,{className:"euiTableSortIcon",type:d?"sortUp":"sortDown",size:"m"}))},NC=function(t){var n=t.children,r=t.align,o=r===void 0?$y:r,i=t.onSort,d=t.isSorted,y=t.isSortAscending,_=t.className,k=t.scope,T=t.mobileOptions,N=T===void 0?{show:!0}:T,L=t.width,Y=t.style,q=t.readOnly,K=t.description,U=mWt(t,hWt),X=(0,PX.default)("euiTableHeaderCell",_,{"euiTableHeaderCell--hideForDesktop":N.only,"euiTableHeaderCell--hideForMobile":!N.show}),Z=(0,PX.default)("euiTableCellContent",_,{"euiTableCellContent--alignRight":o===j3,"euiTableCellContent--alignCenter":o===L_}),fe=GE(Y,L),me=n?"th":"td",ye=me==="th"?k??"col":void 0;if(i||d){var ge=(0,PX.default)("euiTableHeaderButton",{"euiTableHeaderButton-isSorted":d}),ae="none";d&&(ae=y?"ascending":"descending");var Pe=c(s9e,{className:Z,description:K,showSortMsg:!0,children:n,isSorted:d,isSortAscending:y});return c(me,jX({className:X,scope:ye,role:"columnheader","aria-sort":ae,"aria-live":"polite",style:fe},U),i&&!q?c("button",{type:"button",className:ge,onClick:i,"data-test-subj":"tableHeaderSortButton"},Pe):Pe)}return c(me,jX({className:X,scope:ye,role:"columnheader",style:fe},U),c(s9e,{className:Z,description:K,showSortMsg:!1,children:n,isSorted:d,isSortAscending:y}))};NC.propTypes={className:qf.default.string,"aria-label":qf.default.string,"data-test-subj":qf.default.string,align:qf.default.oneOf(["left","right","center"]),isSortAscending:qf.default.bool,isSorted:qf.default.bool,mobileOptions:qf.default.shape({show:qf.default.bool,only:qf.default.bool}),onSort:qf.default.func,scope:qf.default.oneOf(["col","row","colgroup","rowgroup"]),width:qf.default.oneOfType([qf.default.string.isRequired,qf.default.number.isRequired]),description:qf.default.string,readOnly:qf.default.bool};var oDr=V(ne()),XE=V(er()),l9e=V(Ar());var gWt=["children","className","scope","style","width"];function jde(){return jde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function bWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var CX=function(t){var n=t.children,r=t.className,o=t.scope,i=o===void 0?"col":o,d=t.style,y=t.width,_=yWt(t,gWt),k=(0,l9e.default)("euiTableHeaderCellCheckbox",r),T=GE(d,y);return c("th",jde({className:k,scope:i,style:T},_),c("div",{className:"euiTableCellContent"},n))};CX.propTypes={className:XE.default.string,"aria-label":XE.default.string,"data-test-subj":XE.default.string,width:XE.default.oneOfType([XE.default.string.isRequired,XE.default.number.isRequired]),scope:XE.default.oneOf(["col","row","colgroup","rowgroup"])};var uDr=V(ne()),TX=V(er()),u9e=V(Ar());var wWt=["children","className"];function Cde(){return Cde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function xWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var AX=function(t){var n=t.children,r=t.className,o=OWt(t,wWt),i=(0,u9e.default)("euiTableHeaderMobile",r);return c("div",Cde({className:i},o),n)};AX.propTypes={className:TX.default.string,"aria-label":TX.default.string,"data-test-subj":TX.default.string};var p9e=V(ne()),E4=V(er()),d9e=V(Ar());var dDr=V(ne()),KE=V(er()),c9e=V(Ar());var _Wt=["children","onSort","isSorted","isSortAscending","className","ariaLabel"];function Tde(){return Tde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Ade=function(t){var n=t.children,r=t.onSort,o=t.isSorted,i=t.isSortAscending,d=t.className,y=t.ariaLabel,_=SWt(t,_Wt),k="empty";o&&(k=i?"sortUp":"sortDown");var T=(0,c9e.default)("euiTableSortMobileItem",d,{"euiTableSortMobileItem-isSorted":o}),N=y||n,L="Sort ".concat(N," ").concat(i?"descending":"ascending");return c(B3,Tde({className:T,icon:k,onClick:r,"aria-label":L},_),n)};Ade.propTypes={onSort:KE.default.func,isSorted:KE.default.bool,isSortAscending:KE.default.bool,ariaLabel:KE.default.string,className:KE.default.string,"aria-label":KE.default.string,"data-test-subj":KE.default.string};function MX(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?MX=function(n){return typeof n}:MX=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},MX(e)}var IWt=["className","anchorPosition","items"];function Rde(){return Rde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function jWt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f9e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function DX(e){return DX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},DX(e)}function Mde(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var zX=function(e){TWt(n,e);var t=AWt(n);function n(){var r;jWt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var Hk=function(t){var n=t.children,r=t.className,o=t.isSelected,i=t.isSelectable,d=t.hasActions,y=t.isExpandedRow,_=t.isExpandable,k=t.onClick,T=zWt(t,DWt),N=(0,h9e.default)("euiTableRow",r,{"euiTableRow-isSelectable":i,"euiTableRow-isSelected":o,"euiTableRow-hasActions":d,"euiTableRow-isExpandedRow":y,"euiTableRow-isExpandable":_,"euiTableRow-isClickable":k});if(!k)return c("tr",NX({className:N},T),n);var L=function(K){K.key===Vo.SPACE&&K.preventDefault()},Y=function(K){(K.key===Vo.ENTER||K.key===Vo.SPACE)&&k(K)};return c("tr",NX({className:N,onClick:k,onKeyDown:L,onKeyUp:Y,tabIndex:0},T),n)};Hk.propTypes={className:I4.default.string,"aria-label":I4.default.string,"data-test-subj":I4.default.string,isSelectable:I4.default.bool,isSelected:I4.default.bool,hasActions:I4.default.bool,isExpandable:I4.default.bool,isExpandedRow:I4.default.bool,onClick:I4.default.any};var FC=V(ne()),za=V(er()),LC=V(Ar());var LWt=["align","children","className","truncateText","setScopeRow","showOnHover","textOnly","hasActions","isExpander","style","width","valign","mobileOptions"];function LX(){return LX=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var YE=function(t){var n,r,o=t.align,i=o===void 0?$y:o,d=t.children,y=t.className,_=t.truncateText,k=t.setScopeRow,T=t.showOnHover,N=t.textOnly,L=N===void 0?!0:N,Y=t.hasActions,q=t.isExpander,K=t.style,U=t.width,X=t.valign,Z=X===void 0?"middle":X,fe=t.mobileOptions,me=fe===void 0?{show:!0}:fe,ye=BWt(t,LWt),ge=(0,LC.default)("euiTableRowCell",v9e({"euiTableRowCell--hasActions":Y,"euiTableRowCell--isExpander":q,"euiTableRowCell--hideForDesktop":me.only,"euiTableRowCell--enlargeForMobile":me.enlarge},"euiTableRowCell--".concat(Z),Z)),ae=(0,LC.default)("euiTableCellContent",y,{"euiTableCellContent--alignRight":i===j3,"euiTableCellContent--alignCenter":i===L_,"euiTableCellContent--showOnHover":T,"euiTableCellContent--truncateText":_,"euiTableCellContent--overflowingContent":L!==!0}),Pe=(0,LC.default)("euiTableCellContent",y,{"euiTableCellContent--alignRight":me.align===j3||i===j3,"euiTableCellContent--alignCenter":me.align===L_||i===L_,"euiTableCellContent--showOnHover":(n=me.showOnHover)!==null&&n!==void 0?n:T,"euiTableCellContent--truncateText":(r=me.truncateText)!==null&&r!==void 0?r:_,"euiTableCellContent--overflowingContent":me.textOnly!==!0||L!==!0}),Ne=(0,LC.default)({euiTableCellContent__text:L===!0,euiTableCellContent__hoverItem:T}),Ye=YA(["xs","s"])&&me.width?me.width:U,Je=GE(K,Ye);function Me(wt){var _t=wt;return L===!0?_t=c("span",{className:Ne},wt):FC.default.isValidElement(wt)&&(_t=FC.default.Children.map(wt,function(Nt){return FC.default.cloneElement(Nt,{className:(0,LC.default)(Nt.props.className,Ne)})})),_t}var Ve=Me(d),Ue="euiTableRowCell--hideForMobile",ht="euiTableRowCell--hideForDesktop",yt=k?"th":"td",Rt=FWt({scope:k?"row":void 0,style:Je},ye);return me.show===!1?c(yt,LX({className:"".concat(ge," ").concat(Ue)},Rt),c("div",{className:ae},Ve)):c(yt,LX({className:ge},Rt),me.header&&c("div",{className:"euiTableRowCell__mobileHeader ".concat(ht)},me.header),me.render?c(FC.Fragment,null,c("div",{className:"".concat(Pe," ").concat(ht)},Me(me.render)),c("div",{className:"".concat(ae," ").concat(Ue)},Ve)):c("div",{className:ae},Ve))};YE.propTypes={className:za.default.string,"aria-label":za.default.string,"data-test-subj":za.default.string,valign:za.default.any,setScopeRow:za.default.bool,hasActions:za.default.bool,isExpander:za.default.bool,mobileOptions:za.default.shape({show:za.default.bool,only:za.default.bool,render:za.default.node,header:za.default.oneOfType([za.default.node.isRequired,za.default.bool.isRequired]),enlarge:za.default.bool,width:za.default.any,align:za.default.oneOf(["left","right","center"]),showOnHover:za.default.bool,textOnly:za.default.bool,truncateText:za.default.bool}),align:za.default.oneOf(["left","right","center"]),showOnHover:za.default.bool,textOnly:za.default.bool,truncateText:za.default.bool,width:za.default.any};var DDr=V(ne()),FX=V(er()),g9e=V(Ar());var HWt=["children","className"];function zde(){return zde=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VWt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}var BX=function(t){var n=t.children,r=t.className,o=$Wt(t,HWt),i=(0,g9e.default)("euiTableRowCellCheckbox",r);return c("td",zde({className:i},o),c("div",{className:"euiTableCellContent"},n))};BX.propTypes={className:FX.default.string,"aria-label":FX.default.string,"data-test-subj":FX.default.string};var XX=V(ne()),Tt=V(er()),R9e=V(Ar());var b9e=V(ne()),vo=V(er());function WX(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?WX=function(n){return typeof n}:WX=function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},WX(e)}function qWt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function y9e(e,t){for(var n=0;n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function HX(e){return HX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},HX(e)}function $k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function YWt(e){return e.hasOwnProperty("render")}var Lde=function(e){GWt(n,e);var t=JWt(n);function n(){var r;qWt(this,n);for(var o=arguments.length,i=new Array(o),d=0;d"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function qX(e){return qX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},qX(e)}function $X(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Bde=function(e){eHt(n,e);var t=tHt(n);function n(r){var o;return QWt(this,n),o=t.call(this,r),$X(AH(o),"mounted",void 0),$X(AH(o),"onFocus",function(){o.mounted&&o.setState({hasFocus:!0})}),$X(AH(o),"onBlur",function(){o.mounted&&o.setState({hasFocus:!1})}),$X(AH(o),"hasFocus",function(){return o.state.hasFocus}),o.state={hasFocus:!1},o.mounted=!1,o}return ZWt(n,[{key:"componentDidMount",value:function(){this.mounted=!0}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"render",value:function(){var o=this.props,i=o.action,d=o.enabled,y=o.item,_=o.className,k=i.render(y,d),T=(0,UX.cloneElement)(k,{onFocus:this.onFocus,onBlur:this.onBlur}),N=this.hasFocus()?{opacity:1}:void 0;return c("div",{style:N,className:_},T)}}]),n}(UX.Component);Bde.propTypes={action:BC.default.any.isRequired,enabled:BC.default.bool.isRequired,item:BC.default.any.isRequired,className:BC.default.string.isRequired,index:BC.default.number};var _9e=function(t){return t.hasOwnProperty("render")};var I9e=function(t){var n=t.actions,r=t.itemId,o=t.item,i=t.actionEnabled,d=t.className,y=n.length>2;return c(S9e.default.Fragment,null,n.reduce(function(_,k,T){var N=k.available?k.available(o):!0;if(!N)return _;var L=i(k),Y="item_action_".concat(r,"_").concat(T),q=(0,E9e.default)(d,{expandedItemActions__completelyHide:y&&T<2});return _9e(k)?_.push(c(Bde,{key:Y,className:q,index:T,action:k,enabled:L,item:o})):_.push(c(O9e,{key:Y,className:q,action:k,enabled:L,item:o})),_},[]))};var k9e=V(ne());var oHt={pageSizeOptions:[10,25,50]},P9e=function(t){var n=t.pagination,r=t.onPageSizeChange,o=t.onPageChange,i=t["aria-controls"],d=t["aria-label"],y=n.pageSizeOptions?n.pageSizeOptions:oHt.pageSizeOptions,_=n.pageSize?Math.ceil(n.totalItemCount/n.pageSize):1;return(0,k9e.useEffect)(function(){_e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pHt(e,t){if(e==null)return{};var n={},r=Object.keys(e),o,i;for(i=0;i=0)&&(n[o]=e[o]);return n}function C9e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,r)}return n}function rm(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function JX(e){return JX=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)},JX(e)}function Zy(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var $de={auto:{align:$y,render:function(t){return pU(t)}},string:{align:$y,render:function(t){return Hj(t)}},number:{align:j3,render:function(t){return Wj(t)}},boolean:{align:$y,render:function(t){return Fj(t)}},date:{align:$y,render:function(t){return Bj(t)}}},A9e=Object.keys($de);function WC(e,t){if(t)return jE(t)?t(e):e[t]}function bHt(e,t){return t?jE(t)?t(e):t:{}}function wHt(e,t,n){return n?jE(n)?n(e,t):n:{}}function OHt(e,t){var n=t.items,r=t.pagination,o=e,i=o.footer;if(i)return jE(i)?i({items:n,pagination:r}):i}function M9e(e){return e.hasOwnProperty("pagination")&&!!e.pagination}var qk=function(e){mHt(n,e);var t=vHt(n);function n(r){var o;return dHt(this,n),o=t.call(this,r),Zy(G3(o),"cleanups",[]),Zy(G3(o),"tbody",null),Zy(G3(o),"setTbody",function(i){o.removeLoadingListeners(),o.tbody=i,o.props.loading===!0&&i&&o.addLoadingListeners(i)}),Zy(G3(o),"addLoadingListeners",function(i){var d=function(_){_.stopPropagation(),_.preventDefault()};["mousedown","mouseup","mouseover","mouseout","mouseenter","mouseleave","click","dblclick","keydown","keyup","keypress"].forEach(function(y){i.addEventListener(y,d,!0),o.cleanups.push(function(){i.removeEventListener(y,d,!0)})})}),Zy(G3(o),"removeLoadingListeners",function(){o.cleanups.forEach(function(i){return i()}),o.cleanups.length=0}),Zy(G3(o),"tableId",yo("__table")()),Zy(G3(o),"selectAllIdGenerator",yo("_selection_column-checkbox")),Zy(G3(o),"renderSelectAll",function(i){var d=o.props,y=d.items,_=d.selection;if(_){var k=y.filter(function(Y){return!_.selectable||_.selectable(Y)}),T=o.state.selection&&k.length>0&&o.state.selection.length===k.length,N=k.length===0,L=function(q){q.target.checked?o.changeSelection(k):o.changeSelection([])};return c(Mr,{token:"euiBasicTable.selectAllRows",default:"Select all rows"},function(Y){return c(mC,{id:o.selectAllIdGenerator(i?"mobile":"desktop"),type:i?void 0:"inList",checked:T,disabled:N,onChange:L,"data-test-subj":i?void 0:"checkboxSelectAll","aria-label":Y,label:i?Y:null})})}}),Zy(G3(o),"resolveColumnSortDirection",function(i){var d=o.props.sorting,y=i,_=y.sortable,k=y.field,T=y.name;if(!(!d||!d.sort||!_)&&(d.sort.field===k||d.sort.field===T))return d.sort.direction}),Zy(G3(o),"resolveColumnOnSort",function(i){var d=o.props.sorting,y=i,_=y.sortable,k=y.name;if(!(!d||!_)){if(!o.props.onChange)throw new Error("BasicTable is configured to be sortable on column [".concat(k,`] but [onChange] is not configured. This callback must be implemented to handle the sort requests`));return function(){return o.onColumnSortChange(i)}}}),o.state={initialSelectionRendered:!1,selection:[]},o}return hHt(n,[{key:"componentDidMount",value:function(){this.props.loading&&this.tbody&&this.addLoadingListeners(this.tbody),this.getInitialSelection()}},{key:"componentDidUpdate",value:function(o){o.loading!==this.props.loading&&(this.props.loading&&this.tbody?this.addLoadingListeners(this.tbody):this.removeLoadingListeners()),this.getInitialSelection()}},{key:"componentWillUnmount",value:function(){this.removeLoadingListeners()}},{key:"getInitialSelection",value:function(){this.props.selection&&this.props.selection.initialSelected&&!this.state.initialSelectionRendered&&this.props.items.length>0&&(this.setState({selection:this.props.selection.initialSelected}),this.setState({initialSelectionRendered:!0}))}},{key:"setSelection",value:function(o){this.changeSelection(o)}},{key:"buildCriteria",value:function(o){var i={};return M9e(o)&&(i.page={index:o.pagination.pageIndex,size:o.pagination.pageSize}),o.sorting&&(i.sort=o.sorting.sort),i}},{key:"changeSelection",value:function(o){this.props.selection&&(this.setState({selection:o}),this.props.selection.onSelectionChange&&this.props.selection.onSelectionChange(o))}},{key:"clearSelection",value:function(){this.changeSelection([])}},{key:"onPageSizeChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),d=rm(rm({},i),{},{page:{index:0,size:o}});this.props.onChange&&this.props.onChange(d)}},{key:"onPageChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),d=rm(rm({},i),{},{page:rm(rm({},i.page),{},{index:o})});this.props.onChange&&this.props.onChange(d)}},{key:"onColumnSortChange",value:function(o){this.clearSelection();var i=this.buildCriteria(this.props),d=Jy.ASC;i&&i.sort&&(i.sort.field===o.field||i.sort.field===o.name)&&(d=Jy.reverse(i.sort.direction));var y=rm(rm({},i),{},{page:i.page?{index:0,size:i.page.size}:void 0,sort:{field:o.field||o.name,direction:d}});this.props.onChange&&this.props.onChange(y)}},{key:"render",value:function(){var o=this.props,i=o.className,d=o.loading,y=o.items,_=o.itemId,k=o.columns,T=o.pagination,N=o.sorting,L=o.selection,Y=o.onChange,q=o.error,K=o.noItemsMessage,U=o.compressed,X=o.itemIdToExpandedRowMap,Z=o.responsive,fe=o.isSelectable,me=o.isExpandable,ye=o.hasActions,ge=o.rowProps,ae=o.cellProps,Pe=o.tableCaption,Ne=o.rowHeader,Ye=o.tableLayout,Je=j9e(o,iHt),Me=(0,R9e.default)("euiBasicTable",{"euiBasicTable-loading":d},i),Ve=this.renderTable(),Ue=this.renderPaginationBar();return c("div",Vk({className:Me},Je),Ve,Ue)}},{key:"renderTable",value:function(){var o=this.props,i=o.compressed,d=o.responsive,y=o.tableLayout,_=d?c(AX,null,c(Da,{responsive:!1,justifyContent:"spaceBetween",alignItems:"baseline"},c(Rr,{grow:!1},this.renderSelectAll(!0)),c(Rr,{grow:!1},this.renderTableMobileSort()))):void 0,k=this.renderTableCaption(),T=this.renderTableHead(),N=this.renderTableBody(),L=this.renderTableFooter();return c("div",null,_,c(SX,{id:this.tableId,tableLayout:y,responsive:d,compressed:i},k,T,N,L))}},{key:"renderTableMobileSort",value:function(){var o=this,i=this.props,d=i.columns,y=i.sorting,_=[];return y?(d.forEach(function(k,T){var N,L;if(k.field&&y.sort&&y.enableAllColumns&&k.sortable==null&&(k=rm(rm({},k),{},{sortable:!0})),!(!k.sortable||((N=k)===null||N===void 0||(L=N.mobileOptions)===null||L===void 0?void 0:L.show)===!1)){var Y=o.resolveColumnSortDirection(k);_.push({name:k.name,key:"_data_s_".concat(k.field,"_").concat(T),onSort:o.resolveColumnOnSort(k),isSorted:!!Y,isSortAscending:Y?Jy.isAsc(Y):void 0})}}),_.length?c(zX,{items:_}):null):null}},{key:"renderTableCaption",value:function(){var o=this.props,i=o.items,d=o.pagination,y=o.tableCaption,_=i.length,k=d?d.totalItemCount:_,T=d?d.pageIndex+1:1,N=d!=null&&d.pageSize?Math.ceil(d.totalItemCount/d.pageSize):1,L;return y?d?L=c(Mr,{token:"euiBasicTable.tableCaptionWithPagination",default:"{tableCaption}; Page {page} of {pageCount}.",values:{tableCaption:y,page:T,pageCount:N}}):L=y:d?d.totalItemCount>0?L=c(Mr,{token:"euiBasicTable.tableAutoCaptionWithPagination",default:"This table contains {itemCount} rows out of {totalItemCount} rows; Page {page} of {pageCount}.",values:{totalItemCount:k,itemCount:_,page:T,pageCount:N}}):L=c(Mr,{token:"euiBasicTable.tableSimpleAutoCaptionWithPagination",default:"This table contains {itemCount} rows; Page {page} of {pageCount}.",values:{itemCount:_,page:T,pageCount:N}}):L=c(Mr,{token:"euiBasicTable.tableAutoCaptionWithoutPagination",default:"This table contains {itemCount} rows.",values:{itemCount:_}}),c(na,null,c("caption",{className:"euiTableCaption"},c(xH,null,L)))}},{key:"renderTableHead",value:function(){var o=this,i=this.props,d=i.columns,y=i.selection,_=[];return y&&_.push(c(CX,{key:"_selection_column_h"},this.renderSelectAll(!1))),d.forEach(function(k,T){var N=k,L=N.field,Y=N.width,q=N.name,K=N.align,U=N.dataType,X=N.sortable,Z=N.mobileOptions,fe=N.readOnly,me=N.description,ye=K||o.getAlignForDataType(U);if(k.actions){_.push(c(NC,{key:"_actions_h_".concat(T),align:"right",width:Y,description:me,mobileOptions:Z},q));return}if(!k.field){var ge={};if(o.props.sorting&&typeof X=="function"){var ae=o.resolveColumnSortDirection(k);ge.isSorted=!!ae,ge.isSortAscending=ae?Jy.isAsc(ae):void 0,ge.onSort=o.resolveColumnOnSort(k),ge.readOnly=o.props.sorting.readOnly||fe}_.push(c(NC,Vk({key:"_computed_column_h_".concat(T),align:ye,width:Y,mobileOptions:Z,"data-test-subj":"tableHeaderCell_".concat(typeof q=="string"?q:"","_").concat(T),description:me},ge),q));return}var Pe={};if(o.props.sorting){o.props.sorting.sort&&o.props.sorting.enableAllColumns&&k.sortable==null&&(k=rm(rm({},k),{},{sortable:!0}));var Ne=k,Ye=Ne.sortable;if(Ye){var Je=o.resolveColumnSortDirection(k);Pe.isSorted=!!Je,Pe.isSortAscending=Je?Jy.isAsc(Je):void 0,Pe.onSort=o.resolveColumnOnSort(k),Pe.readOnly=o.props.sorting.readOnly||fe}}_.push(c(NC,Vk({key:"_data_h_".concat(L,"_").concat(T),align:ye,width:Y,mobileOptions:Z,"data-test-subj":"tableHeaderCell_".concat(L,"_").concat(T),description:me},Pe),q))}),c(kX,null,_)}},{key:"renderTableFooter",value:function(){var o=this.props,i=o.items,d=o.columns,y=o.pagination,_=o.selection,k=[],T=!1;return _&&k.push(c(DC,{key:"_selection_column_f"},void 0)),d.forEach(function(N){var L=OHt(N,{items:i,pagination:y}),Y=N,q=Y.mobileOptions,K=Y.field,U=Y.align;q!=null&&q.only||(L?(k.push(c(DC,{key:"footer_".concat(K,"_").concat(k.length-1),align:U},L)),T=!0):k.push(c(DC,{key:"footer_empty_".concat(k.length-1),align:U},void 0)))}),k.length&&T?c(IX,null,k):null}},{key:"renderTableBody",value:function(){var o=this;if(this.props.error)return this.renderErrorBody(this.props.error);var i=this.props.items;if(i.length===0)return this.renderEmptyBody();var d=i.map(function(y,_){var k=M9e(o.props)&&o.props.pagination.pageSize>0?o.props.pagination.pageIndex*o.props.pagination.pageSize+_:_;return o.renderItemRow(y,k)});return c(RC,{bodyRef:this.setTbody},d)}},{key:"renderErrorBody",value:function(o){var i=this.props.columns.length+(this.props.selection?1:0);return c(RC,null,c(Hk,null,c(YE,{align:"center",colSpan:i,mobileOptions:{width:"100%"}},c(sn,{type:"minusInCircle",color:"danger"})," ",o)))}},{key:"renderEmptyBody",value:function(){var o=this.props,i=o.columns,d=o.selection,y=o.noItemsMessage,_=i.length+(d?1:0);return c(RC,null,c(Hk,null,c(YE,{align:"center",colSpan:_,mobileOptions:{width:"100%"}},y)))}},{key:"renderItemRow",value:function(o,i){var d=this,y=this.props,_=y.columns,k=y.selection,T=y.isSelectable,N=y.hasActions,L=y.rowHeader,Y=y.itemIdToExpandedRowMap,q=Y===void 0?{}:Y,K=y.isExpandable,U=[],X=this.props.itemId,Z=WC(o,X)!=null?WC(o,X):i,fe=k?this.state.selection&&!!this.state.selection.find(function(Ue){return WC(Ue,X)===Z}):!1,me;k&&(U.push(this.renderItemSelectionCell(Z,o,fe)),me=!0);var ye;_.forEach(function(Ue,ht){if(Ue.actions)U.push(d.renderItemActionsCell(Z,o,Ue,ht)),ye=!0;else if(Ue.field){var yt=Ue;U.push(d.renderItemFieldDataCell(Z,o,Ue,ht,yt.field===L))}else U.push(d.renderItemComputedCell(Z,o,Ue,ht))});var ge=k?_.length+1:_.length,ae=_.reduce(function(Ue,ht){var yt;return ht!=null&&(yt=ht.mobileOptions)!==null&&yt!==void 0&&yt.only?Ue+1:Ue+0},0);ge=ge-ae;var Pe=q.hasOwnProperty(Z),Ne=Pe?"row_".concat(Z,"_expansion"):void 0,Ye=Pe?c(Hk,{id:Ne,isExpandedRow:!0,isSelectable:T},c(YE,{colSpan:ge,textOnly:!1},q[Z])):void 0,Je=this.props.rowProps,Me=bHt(o,Je),Ve=c(Hk,Vk({"aria-owns":Ne,isSelectable:T??me,isSelected:fe,hasActions:N??ye,isExpandable:K},Me),U);return c(XX.Fragment,{key:"row_".concat(Z)},Ve,Ye)}},{key:"renderItemSelectionCell",value:function(o,i,d){var y=this,_=this.props.selection,k="_selection_column_".concat(o),T=d,N=_.selectable&&!_.selectable(i),L=_.selectableMessage&&_.selectableMessage(!N,i),Y=function(K){if(K.target.checked)y.changeSelection([].concat(sHt(y.state.selection),[i]));else{var U=y.props.itemId;y.changeSelection(y.state.selection.reduce(function(X,Z){return WC(Z,U)!==o&&X.push(Z),X},[]))}};return c(BX,{key:k},c(Mr,{token:"euiBasicTable.selectThisRow",default:"Select this row"},function(q){return c(mC,{id:"".concat(y.tableId).concat(k,"-checkbox"),type:"inList",disabled:N,checked:T,onChange:Y,title:L||q,"aria-label":L||q,"data-test-subj":"checkboxSelectRow-".concat(o)})}))}},{key:"renderItemActionsCell",value:function(o,i,d,y){var _=this,k=function(K){return _.state.selection.length===0&&(!K.enabled||K.enabled(i))},T=d.actions.filter(function(q){return!q.available||q.available(i)});if(T.length>2){var N=T.filter(function(q){return q.isPrimary});T=N.slice(0,2),T.push({name:"All actions",render:function(K){return c(Lde,{actions:d.actions,itemId:o,item:K,actionEnabled:k})}})}var L=c(I9e,{actions:T,itemId:o,item:i,actionEnabled:k}),Y="record_actions_".concat(o,"_").concat(y);return c(YE,{showOnHover:!0,key:Y,align:"right",textOnly:!1,hasActions:!0},L)}},{key:"renderItemFieldDataCell",value:function(o,i,d,y,_){var k=d.field,T=d.render,N=d.dataType,L="_data_column_".concat(k,"_").concat(o,"_").concat(y),Y=T||this.getRendererForDataType(N),q=gk(i,k),K=Y(q,i);return this.renderItemCell(i,d,L,K,_)}},{key:"renderItemComputedCell",value:function(o,i,d,y){var _=d.render,k="_computed_column_".concat(o,"_").concat(y),T=_||this.getRendererForDataType(),N=T(i);return this.renderItemCell(i,d,k,N,!1)}},{key:"renderItemCell",value:function(o,i,d,y,_){var k=i,T=k.align,N=k.render,L=k.dataType,Y=k.isExpander,q=k.textOnly,K=k.name,U=k.field,X=k.description,Z=k.sortable,fe=k.footer,me=k.mobileOptions,ye=j9e(k,aHt),ge=T||this.getAlignForDataType(L),ae=this.props.cellProps,Pe=wHt(o,i,ae);return c(YE,Vk({key:d,align:ge,isExpander:Y,textOnly:q||!N,setScopeRow:_,mobileOptions:rm(rm({},me),{},{render:me&&me.render&&me.render(o),header:me&&me.header===!1?!1:K})},Pe,ye),y)}},{key:"getRendererForDataType",value:function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",i=$de[o];if(!i)throw new Error("Unknown dataType [".concat(o,"]. The supported data types are [").concat(A9e.join(", "),"]"));return i.render}},{key:"getAlignForDataType",value:function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"auto",i=$de[o];if(!i)throw new Error("Unknown dataType [".concat(o,"]. The supported data types are [").concat(A9e.join(", "),"]"));return i.align}},{key:"renderPaginationBar",value:function(){var o=this,i=this.props,d=i.error,y=i.pagination,_=i.tableCaption,k=i.onChange;if(!d&&y&&y.totalItemCount>0){if(!k)throw new Error(`The Basic Table is configured with pagination but [onChange] is - not configured. This callback must be implemented to handle pagination changes`);return c(Mr,{token:"euiBasicTable.tablePagination",default:"Pagination for table: {tableCaption}",values:{tableCaption:_}},function(T){return c(P9e,{pagination:y,onPageSizeChange:o.onPageSizeChange.bind(o),onPageChange:o.onPageChange.bind(o),"aria-controls":o.tableId,"aria-label":T})})}}}],[{key:"getDerivedStateFromProps",value:function(o,i){if(!o.selection)return{selection:[]};var d=o.itemId,y=i.selection.filter(function(_){return o.items.findIndex(function(k){return WC(k,d)===WC(_,d)})!==-1});return y.length!==i.selection.length?(o.selection.onSelectionChange&&o.selection.onSelectionChange(y),{selection:y}):null}}]),n}(XX.Component);Zy(qk,"defaultProps",{responsive:!0,tableLayout:"fixed",noItemsMessage:c(Mr,{token:"euiBasicTable.noItemsMessage",default:"No items found"})});qk.propTypes={className:Tt.default.string,"aria-label":Tt.default.string,"data-test-subj":Tt.default.string,itemId:Tt.default.oneOfType([Tt.default.string.isRequired,Tt.default.number.isRequired,Tt.default.func.isRequired]),itemIdToExpandedRowMap:Tt.default.shape({}),items:Tt.default.arrayOf(Tt.default.any.isRequired),cellProps:Tt.default.oneOfType([Tt.default.any.isRequired,Tt.default.func.isRequired]),columns:Tt.default.arrayOf(Tt.default.oneOfType([Tt.default.shape({field:Tt.default.oneOfType([Tt.default.any.isRequired,Tt.default.any.isRequired]).isRequired,name:Tt.default.node.isRequired,description:Tt.default.string,dataType:Tt.default.oneOf(["auto","string","number","boolean","date"]),width:Tt.default.string,sortable:Tt.default.oneOfType([Tt.default.bool.isRequired,Tt.default.func.isRequired]),isExpander:Tt.default.bool,textOnly:Tt.default.bool,align:Tt.default.oneOf(["left","right","center"]),truncateText:Tt.default.bool,mobileOptions:Tt.default.shape({render:Tt.default.func}),render:Tt.default.func,footer:Tt.default.oneOfType([Tt.default.string.isRequired,Tt.default.element.isRequired,Tt.default.func.isRequired]),readOnly:Tt.default.bool,className:Tt.default.string,"aria-label":Tt.default.string,"data-test-subj":Tt.default.string}).isRequired,Tt.default.shape({render:Tt.default.func.isRequired,name:Tt.default.node,description:Tt.default.string,sortable:Tt.default.func,width:Tt.default.string,truncateText:Tt.default.bool,isExpander:Tt.default.bool,align:Tt.default.oneOf(["left","right","center"]),readOnly:Tt.default.bool,className:Tt.default.string,"aria-label":Tt.default.string,"data-test-subj":Tt.default.string}).isRequired,Tt.default.shape({actions:Tt.default.arrayOf(Tt.default.oneOfType([Tt.default.shape({type:Tt.default.oneOfType([Tt.default.oneOf(["button"]),Tt.default.oneOf(["icon"]).isRequired]),color:Tt.default.oneOfType([Tt.default.oneOfType([Tt.default.oneOf(["primary","danger","text","ghost","success","warning"]).isRequired,Tt.default.func.isRequired]),Tt.default.oneOfType([Tt.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]).isRequired,Tt.default.func.isRequired])]),name:Tt.default.oneOfType([Tt.default.node.isRequired,Tt.default.func.isRequired]).isRequired,description:Tt.default.string.isRequired,onClick:Tt.default.func,href:Tt.default.string,target:Tt.default.string,available:Tt.default.func,enabled:Tt.default.func,isPrimary:Tt.default.bool,"data-test-subj":Tt.default.string,icon:Tt.default.oneOfType([Tt.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Tt.default.func.isRequired])}).isRequired,Tt.default.shape({render:Tt.default.func.isRequired,available:Tt.default.func,enabled:Tt.default.func,isPrimary:Tt.default.bool}).isRequired]).isRequired).isRequired,name:Tt.default.node,description:Tt.default.string,width:Tt.default.string}).isRequired]).isRequired),error:Tt.default.string,tableCaption:Tt.default.string,rowHeader:Tt.default.string,hasActions:Tt.default.bool,isExpandable:Tt.default.bool,isSelectable:Tt.default.bool,loading:Tt.default.bool,noItemsMessage:Tt.default.node,onChange:Tt.default.func,pagination:Tt.default.oneOfType([Tt.default.oneOf([void 0]),Tt.default.shape({pageIndex:Tt.default.number.isRequired,pageSize:Tt.default.number.isRequired,totalItemCount:Tt.default.number.isRequired,pageSizeOptions:Tt.default.arrayOf(Tt.default.number.isRequired),showPerPageOptions:Tt.default.bool})]),responsive:Tt.default.bool,rowProps:Tt.default.oneOfType([Tt.default.any.isRequired,Tt.default.func.isRequired]),selection:Tt.default.shape({onSelectionChange:Tt.default.func,selectable:Tt.default.func,selectableMessage:Tt.default.func,initialSelected:Tt.default.arrayOf(Tt.default.any.isRequired)}),sorting:Tt.default.shape({sort:Tt.default.shape({field:Tt.default.any.isRequired,direction:Tt.default.oneOf(["asc","desc"]).isRequired}),allowNeutralSort:Tt.default.bool,enableAllColumns:Tt.default.bool,readOnly:Tt.default.bool}),tableLayout:Tt.default.oneOf(["fixed","auto"]),textOnly:Tt.default.bool};var k4=function(){function e(){this.listeners=[]}var t=e.prototype;return t.subscribe=function(r){var o=this,i=r||function(){};return this.listeners.push(i),this.onSubscribe(),function(){o.listeners=o.listeners.filter(function(d){return d!==i}),o.onUnsubscribe()}},t.hasListeners=function(){return this.listeners.length>0},t.onSubscribe=function(){},t.onUnsubscribe=function(){},e}();var Uk=typeof window>"u";function Vl(){}function z9e(e,t){return typeof e=="function"?e(t):e}function RH(e){return typeof e=="number"&&e>=0&&e!==1/0}function MH(e){return Array.isArray(e)?e:[e]}function KX(e,t){return Math.max(e+(t||0)-Date.now(),0)}function HC(e,t,n){return YX(e)?typeof t=="function"?so({},n,{queryKey:e,queryFn:t}):so({},t,{queryKey:e}):e}function P4(e,t,n){return YX(e)?[so({},t,{queryKey:e}),n]:[e||{},t]}function xHt(e,t){if(e===!0&&t===!0||e==null&&t==null)return"all";if(e===!1&&t===!1)return"none";var n=e??!t;return n?"active":"inactive"}function qde(e,t){var n=e.active,r=e.exact,o=e.fetching,i=e.inactive,d=e.predicate,y=e.queryKey,_=e.stale;if(YX(y)){if(r){if(t.queryHash!==DH(y,t.options))return!1}else if(!zH(t.queryKey,y))return!1}var k=xHt(n,i);if(k==="none")return!1;if(k!=="all"){var T=t.isActive();if(k==="active"&&!T||k==="inactive"&&T)return!1}return!(typeof _=="boolean"&&t.isStale()!==_||typeof o=="boolean"&&t.isFetching()!==o||d&&!d(t))}function Ude(e,t){var n=e.exact,r=e.fetching,o=e.predicate,i=e.mutationKey;if(YX(i)){if(!t.options.mutationKey)return!1;if(n){if(ZE(t.options.mutationKey)!==ZE(i))return!1}else if(!zH(t.options.mutationKey,i))return!1}return!(typeof r=="boolean"&&t.state.status==="loading"!==r||o&&!o(t))}function DH(e,t){var n=t?.queryKeyHashFn||ZE;return n(e)}function ZE(e){var t=MH(e);return _Ht(t)}function _Ht(e){return JSON.stringify(e,function(t,n){return Vde(n)?Object.keys(n).sort().reduce(function(r,o){return r[o]=n[o],r},{}):n})}function zH(e,t){return N9e(MH(e),MH(t))}function N9e(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(function(n){return!N9e(e[n],t[n])}):!1}function $C(e,t){if(e===t)return e;var n=Array.isArray(e)&&Array.isArray(t);if(n||Vde(e)&&Vde(t)){for(var r=n?e.length:Object.keys(e).length,o=n?t:Object.keys(t),i=o.length,d=n?[]:{},y=0,_=0;_"u")return!0;var n=t.prototype;return!(!D9e(n)||!n.hasOwnProperty("isPrototypeOf"))}function D9e(e){return Object.prototype.toString.call(e)==="[object Object]"}function YX(e){return typeof e=="string"||Array.isArray(e)}function F9e(e){return new Promise(function(t){setTimeout(t,e)})}function Gde(e){Promise.resolve().then(e).catch(function(t){return setTimeout(function(){throw t})})}function QX(){if(typeof AbortController=="function")return new AbortController}var SHt=function(e){Q0(t,e);function t(){var r;return r=e.call(this)||this,r.setup=function(o){var i;if(!Uk&&((i=window)!=null&&i.addEventListener)){var d=function(){return o()};return window.addEventListener("visibilitychange",d,!1),window.addEventListener("focus",d,!1),function(){window.removeEventListener("visibilitychange",d),window.removeEventListener("focus",d)}}},r}var n=t.prototype;return n.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},n.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},n.setEventListener=function(o){var i,d=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(y){typeof y=="boolean"?d.setFocused(y):d.onFocus()})},n.setFocused=function(o){this.focused=o,o&&this.onFocus()},n.onFocus=function(){this.listeners.forEach(function(o){o()})},n.isFocused=function(){return typeof this.focused=="boolean"?this.focused:typeof document>"u"?!0:[void 0,"visible","prerender"].includes(document.visibilityState)},t}(k4),e9=new SHt;var EHt=function(e){Q0(t,e);function t(){var r;return r=e.call(this)||this,r.setup=function(o){var i;if(!Uk&&((i=window)!=null&&i.addEventListener)){var d=function(){return o()};return window.addEventListener("online",d,!1),window.addEventListener("offline",d,!1),function(){window.removeEventListener("online",d),window.removeEventListener("offline",d)}}},r}var n=t.prototype;return n.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},n.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},n.setEventListener=function(o){var i,d=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(y){typeof y=="boolean"?d.setOnline(y):d.onOnline()})},n.setOnline=function(o){this.online=o,o&&this.onOnline()},n.onOnline=function(){this.listeners.forEach(function(o){o()})},n.isOnline=function(){return typeof this.online=="boolean"?this.online:typeof navigator>"u"||typeof navigator.onLine>"u"?!0:navigator.onLine},t}(k4),VC=new EHt;function IHt(e){return Math.min(1e3*Math.pow(2,e),3e4)}function NH(e){return typeof e?.cancel=="function"}var B9e=function(t){this.revert=t?.revert,this.silent=t?.silent};function qC(e){return e instanceof B9e}var ZX=function(t){var n=this,r=!1,o,i,d,y;this.abort=t.abort,this.cancel=function(L){return o?.(L)},this.cancelRetry=function(){r=!0},this.continueRetry=function(){r=!1},this.continue=function(){return i?.()},this.failureCount=0,this.isPaused=!1,this.isResolved=!1,this.isTransportCancelable=!1,this.promise=new Promise(function(L,Y){d=L,y=Y});var _=function(Y){n.isResolved||(n.isResolved=!0,t.onSuccess==null||t.onSuccess(Y),i?.(),d(Y))},k=function(Y){n.isResolved||(n.isResolved=!0,t.onError==null||t.onError(Y),i?.(),y(Y))},T=function(){return new Promise(function(Y){i=Y,n.isPaused=!0,t.onPause==null||t.onPause()}).then(function(){i=void 0,n.isPaused=!1,t.onContinue==null||t.onContinue()})},N=function L(){if(!n.isResolved){var Y;try{Y=t.fn()}catch(q){Y=Promise.reject(q)}o=function(K){if(!n.isResolved&&(k(new B9e(K)),n.abort==null||n.abort(),NH(Y)))try{Y.cancel()}catch{}},n.isTransportCancelable=NH(Y),Promise.resolve(Y).then(_).catch(function(q){var K,U;if(!n.isResolved){var X=(K=t.retry)!=null?K:3,Z=(U=t.retryDelay)!=null?U:IHt,fe=typeof Z=="function"?Z(n.failureCount,q):Z,me=X===!0||typeof X=="number"&&n.failureCount"u"&&(y.exact=!0),this.queries.find(function(_){return qde(y,_)})},n.findAll=function(o,i){var d=P4(o,i),y=d[0];return Object.keys(y).length>0?this.queries.filter(function(_){return qde(y,_)}):this.queries},n.notify=function(o){var i=this;wi.batch(function(){i.listeners.forEach(function(d){d(o)})})},n.onFocus=function(){var o=this;wi.batch(function(){o.queries.forEach(function(i){i.onFocus()})})},n.onOnline=function(){var o=this;wi.batch(function(){o.queries.forEach(function(i){i.onOnline()})})},t}(k4);var V9e=function(){function e(n){this.options=so({},n.defaultOptions,n.options),this.mutationId=n.mutationId,this.mutationCache=n.mutationCache,this.observers=[],this.state=n.state||PHt(),this.meta=n.meta}var t=e.prototype;return t.setState=function(r){this.dispatch({type:"setState",state:r})},t.addObserver=function(r){this.observers.indexOf(r)===-1&&this.observers.push(r)},t.removeObserver=function(r){this.observers=this.observers.filter(function(o){return o!==r})},t.cancel=function(){return this.retryer?(this.retryer.cancel(),this.retryer.promise.then(Vl).catch(Vl)):Promise.resolve()},t.continue=function(){return this.retryer?(this.retryer.continue(),this.retryer.promise):this.execute()},t.execute=function(){var r=this,o,i=this.state.status==="loading",d=Promise.resolve();return i||(this.dispatch({type:"loading",variables:this.options.variables}),d=d.then(function(){r.mutationCache.config.onMutate==null||r.mutationCache.config.onMutate(r.state.variables,r)}).then(function(){return r.options.onMutate==null?void 0:r.options.onMutate(r.state.variables)}).then(function(y){y!==r.state.context&&r.dispatch({type:"loading",context:y,variables:r.state.variables})})),d.then(function(){return r.executeMutation()}).then(function(y){o=y,r.mutationCache.config.onSuccess==null||r.mutationCache.config.onSuccess(o,r.state.variables,r.state.context,r)}).then(function(){return r.options.onSuccess==null?void 0:r.options.onSuccess(o,r.state.variables,r.state.context)}).then(function(){return r.options.onSettled==null?void 0:r.options.onSettled(o,null,r.state.variables,r.state.context)}).then(function(){return r.dispatch({type:"success",data:o}),o}).catch(function(y){return r.mutationCache.config.onError==null||r.mutationCache.config.onError(y,r.state.variables,r.state.context,r),Gk().error(y),Promise.resolve().then(function(){return r.options.onError==null?void 0:r.options.onError(y,r.state.variables,r.state.context)}).then(function(){return r.options.onSettled==null?void 0:r.options.onSettled(void 0,y,r.state.variables,r.state.context)}).then(function(){throw r.dispatch({type:"error",error:y}),y})})},t.executeMutation=function(){var r=this,o;return this.retryer=new ZX({fn:function(){return r.options.mutationFn?r.options.mutationFn(r.state.variables):Promise.reject("No mutationFn found")},onFail:function(){r.dispatch({type:"failed"})},onPause:function(){r.dispatch({type:"pause"})},onContinue:function(){r.dispatch({type:"continue"})},retry:(o=this.options.retry)!=null?o:0,retryDelay:this.options.retryDelay}),this.retryer.promise},t.dispatch=function(r){var o=this;this.state=jHt(this.state,r),wi.batch(function(){o.observers.forEach(function(i){i.onMutationUpdate(r)}),o.mutationCache.notify(o)})},e}();function PHt(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function jHt(e,t){switch(t.type){case"failed":return so({},e,{failureCount:e.failureCount+1});case"pause":return so({},e,{isPaused:!0});case"continue":return so({},e,{isPaused:!1});case"loading":return so({},e,{context:t.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:t.variables});case"success":return so({},e,{data:t.data,error:null,status:"success",isPaused:!1});case"error":return so({},e,{data:void 0,error:t.error,failureCount:e.failureCount+1,isPaused:!1,status:"error"});case"setState":return so({},e,t.state);default:return e}}var q9e=function(e){Q0(t,e);function t(r){var o;return o=e.call(this)||this,o.config=r||{},o.mutations=[],o.mutationId=0,o}var n=t.prototype;return n.build=function(o,i,d){var y=new V9e({mutationCache:this,mutationId:++this.mutationId,options:o.defaultMutationOptions(i),state:d,defaultOptions:i.mutationKey?o.getMutationDefaults(i.mutationKey):void 0,meta:i.meta});return this.add(y),y},n.add=function(o){this.mutations.push(o),this.notify(o)},n.remove=function(o){this.mutations=this.mutations.filter(function(i){return i!==o}),o.cancel(),this.notify(o)},n.clear=function(){var o=this;wi.batch(function(){o.mutations.forEach(function(i){o.remove(i)})})},n.getAll=function(){return this.mutations},n.find=function(o){return typeof o.exact>"u"&&(o.exact=!0),this.mutations.find(function(i){return Ude(o,i)})},n.findAll=function(o){return this.mutations.filter(function(i){return Ude(o,i)})},n.notify=function(o){var i=this;wi.batch(function(){i.listeners.forEach(function(d){d(o)})})},n.onFocus=function(){this.resumePausedMutations()},n.onOnline=function(){this.resumePausedMutations()},n.resumePausedMutations=function(){var o=this.mutations.filter(function(i){return i.state.isPaused});return wi.batch(function(){return o.reduce(function(i,d){return i.then(function(){return d.continue().catch(Vl)})},Promise.resolve())})},t}(k4);function G9e(){return{onFetch:function(t){t.fetchFn=function(){var n,r,o,i,d,y,_=(n=t.fetchOptions)==null||(r=n.meta)==null?void 0:r.refetchPage,k=(o=t.fetchOptions)==null||(i=o.meta)==null?void 0:i.fetchMore,T=k?.pageParam,N=k?.direction==="forward",L=k?.direction==="backward",Y=((d=t.state.data)==null?void 0:d.pages)||[],q=((y=t.state.data)==null?void 0:y.pageParams)||[],K=QX(),U=K?.signal,X=q,Z=!1,fe=t.options.queryFn||function(){return Promise.reject("Missing queryFn")},me=function(Ue,ht,yt,Mt){return X=Mt?[ht].concat(X):[].concat(X,[ht]),Mt?[yt].concat(Ue):[].concat(Ue,[yt])},ye=function(Ue,ht,yt,Mt){if(Z)return Promise.reject("Cancelled");if(typeof yt>"u"&&!ht&&Ue.length)return Promise.resolve(Ue);var wt={queryKey:t.queryKey,signal:U,pageParam:yt,meta:t.meta},_t=fe(wt),Nt=Promise.resolve(_t).then(function(sr){return me(Ue,yt,sr,Mt)});if(NH(_t)){var Rt=Nt;Rt.cancel=_t.cancel}return Nt},ge;if(!Y.length)ge=ye([]);else if(N){var ae=typeof T<"u",Pe=ae?T:U9e(t.options,Y);ge=ye(Y,ae,Pe)}else if(L){var Ne=typeof T<"u",Ye=Ne?T:CHt(t.options,Y);ge=ye(Y,Ne,Ye,!0)}else(function(){X=[];var Ve=typeof t.options.getNextPageParam>"u",Ue=_&&Y[0]?_(Y[0],0,Y):!0;ge=Ue?ye([],Ve,q[0]):Promise.resolve(me([],q[0],Y[0]));for(var ht=function(wt){ge=ge.then(function(_t){var Nt=_&&Y[wt]?_(Y[wt],wt,Y):!0;if(Nt){var Rt=Ve?q[wt]:U9e(t.options,_t);return ye(_t,Ve,Rt)}return Promise.resolve(me(_t,q[wt],Y[wt]))})},yt=1;yt"u"&&(T.revert=!0);var N=wi.batch(function(){return d.queryCache.findAll(_).map(function(L){return L.cancel(T)})});return Promise.all(N).then(Vl).catch(Vl)},t.invalidateQueries=function(r,o,i){var d,y,_,k=this,T=P4(r,o,i),N=T[0],L=T[1],Y=so({},N,{active:(d=(y=N.refetchActive)!=null?y:N.active)!=null?d:!0,inactive:(_=N.refetchInactive)!=null?_:!1});return wi.batch(function(){return k.queryCache.findAll(N).forEach(function(q){q.invalidate()}),k.refetchQueries(Y,L)})},t.refetchQueries=function(r,o,i){var d=this,y=P4(r,o,i),_=y[0],k=y[1],T=wi.batch(function(){return d.queryCache.findAll(_).map(function(L){return L.fetch(void 0,so({},k,{meta:{refetchPage:_?.refetchPage}}))})}),N=Promise.all(T).then(Vl);return k?.throwOnError||(N=N.catch(Vl)),N},t.fetchQuery=function(r,o,i){var d=HC(r,o,i),y=this.defaultQueryOptions(d);typeof y.retry>"u"&&(y.retry=!1);var _=this.queryCache.build(this,y);return _.isStaleByTime(y.staleTime)?_.fetch(y):Promise.resolve(_.state.data)},t.prefetchQuery=function(r,o,i){return this.fetchQuery(r,o,i).then(Vl).catch(Vl)},t.fetchInfiniteQuery=function(r,o,i){var d=HC(r,o,i);return d.behavior=G9e(),this.fetchQuery(d)},t.prefetchInfiniteQuery=function(r,o,i){return this.fetchInfiniteQuery(r,o,i).then(Vl).catch(Vl)},t.cancelMutations=function(){var r=this,o=wi.batch(function(){return r.mutationCache.getAll().map(function(i){return i.cancel()})});return Promise.all(o).then(Vl).catch(Vl)},t.resumePausedMutations=function(){return this.getMutationCache().resumePausedMutations()},t.executeMutation=function(r){return this.mutationCache.build(this,r).execute()},t.getQueryCache=function(){return this.queryCache},t.getMutationCache=function(){return this.mutationCache},t.getDefaultOptions=function(){return this.defaultOptions},t.setDefaultOptions=function(r){this.defaultOptions=r},t.setQueryDefaults=function(r,o){var i=this.queryDefaults.find(function(d){return ZE(r)===ZE(d.queryKey)});i?i.defaultOptions=o:this.queryDefaults.push({queryKey:r,defaultOptions:o})},t.getQueryDefaults=function(r){var o;return r?(o=this.queryDefaults.find(function(i){return zH(r,i.queryKey)}))==null?void 0:o.defaultOptions:void 0},t.setMutationDefaults=function(r,o){var i=this.mutationDefaults.find(function(d){return ZE(r)===ZE(d.mutationKey)});i?i.defaultOptions=o:this.mutationDefaults.push({mutationKey:r,defaultOptions:o})},t.getMutationDefaults=function(r){var o;return r?(o=this.mutationDefaults.find(function(i){return zH(r,i.mutationKey)}))==null?void 0:o.defaultOptions:void 0},t.defaultQueryOptions=function(r){if(r?._defaulted)return r;var o=so({},this.defaultOptions.queries,this.getQueryDefaults(r?.queryKey),r,{_defaulted:!0});return!o.queryHash&&o.queryKey&&(o.queryHash=DH(o.queryKey,o)),o},t.defaultQueryObserverOptions=function(r){return this.defaultQueryOptions(r)},t.defaultMutationOptions=function(r){return r?._defaulted?r:so({},this.defaultOptions.mutations,this.getMutationDefaults(r?.mutationKey),r,{_defaulted:!0})},t.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},e}();var Kde=function(e){Q0(t,e);function t(r,o){var i;return i=e.call(this)||this,i.client=r,i.options=o,i.trackedProps=[],i.selectError=null,i.bindMethods(),i.setOptions(o),i}var n=t.prototype;return n.bindMethods=function(){this.remove=this.remove.bind(this),this.refetch=this.refetch.bind(this)},n.onSubscribe=function(){this.listeners.length===1&&(this.currentQuery.addObserver(this),J9e(this.currentQuery,this.options)&&this.executeFetch(),this.updateTimers())},n.onUnsubscribe=function(){this.listeners.length||this.destroy()},n.shouldFetchOnReconnect=function(){return Xde(this.currentQuery,this.options,this.options.refetchOnReconnect)},n.shouldFetchOnWindowFocus=function(){return Xde(this.currentQuery,this.options,this.options.refetchOnWindowFocus)},n.destroy=function(){this.listeners=[],this.clearTimers(),this.currentQuery.removeObserver(this)},n.setOptions=function(o,i){var d=this.options,y=this.currentQuery;if(this.options=this.client.defaultQueryObserverOptions(o),typeof this.options.enabled<"u"&&typeof this.options.enabled!="boolean")throw new Error("Expected enabled to be a boolean");this.options.queryKey||(this.options.queryKey=d.queryKey),this.updateQuery();var _=this.hasListeners();_&&X9e(this.currentQuery,y,this.options,d)&&this.executeFetch(),this.updateResult(i),_&&(this.currentQuery!==y||this.options.enabled!==d.enabled||this.options.staleTime!==d.staleTime)&&this.updateStaleTimeout();var k=this.computeRefetchInterval();_&&(this.currentQuery!==y||this.options.enabled!==d.enabled||k!==this.currentRefetchInterval)&&this.updateRefetchInterval(k)},n.getOptimisticResult=function(o){var i=this.client.defaultQueryObserverOptions(o),d=this.client.getQueryCache().build(this.client,i);return this.createResult(d,i)},n.getCurrentResult=function(){return this.currentResult},n.trackResult=function(o,i){var d=this,y={},_=function(T){d.trackedProps.includes(T)||d.trackedProps.push(T)};return Object.keys(o).forEach(function(k){Object.defineProperty(y,k,{configurable:!1,enumerable:!0,get:function(){return _(k),o[k]}})}),(i.useErrorBoundary||i.suspense)&&_("error"),y},n.getNextResult=function(o){var i=this;return new Promise(function(d,y){var _=i.subscribe(function(k){k.isFetching||(_(),k.isError&&o?.throwOnError?y(k.error):d(k))})})},n.getCurrentQuery=function(){return this.currentQuery},n.remove=function(){this.client.getQueryCache().remove(this.currentQuery)},n.refetch=function(o){return this.fetch(so({},o,{meta:{refetchPage:o?.refetchPage}}))},n.fetchOptimistic=function(o){var i=this,d=this.client.defaultQueryObserverOptions(o),y=this.client.getQueryCache().build(this.client,d);return y.fetch().then(function(){return i.createResult(y,d)})},n.fetch=function(o){var i=this;return this.executeFetch(o).then(function(){return i.updateResult(),i.currentResult})},n.executeFetch=function(o){this.updateQuery();var i=this.currentQuery.fetch(this.options,o);return o?.throwOnError||(i=i.catch(Vl)),i},n.updateStaleTimeout=function(){var o=this;if(this.clearStaleTimeout(),!(Uk||this.currentResult.isStale||!RH(this.options.staleTime))){var i=KX(this.currentResult.dataUpdatedAt,this.options.staleTime),d=i+1;this.staleTimeoutId=setTimeout(function(){o.currentResult.isStale||o.updateResult()},d)}},n.computeRefetchInterval=function(){var o;return typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.currentResult.data,this.currentQuery):(o=this.options.refetchInterval)!=null?o:!1},n.updateRefetchInterval=function(o){var i=this;this.clearRefetchInterval(),this.currentRefetchInterval=o,!(Uk||this.options.enabled===!1||!RH(this.currentRefetchInterval)||this.currentRefetchInterval===0)&&(this.refetchIntervalId=setInterval(function(){(i.options.refetchIntervalInBackground||e9.isFocused())&&i.executeFetch()},this.currentRefetchInterval))},n.updateTimers=function(){this.updateStaleTimeout(),this.updateRefetchInterval(this.computeRefetchInterval())},n.clearTimers=function(){this.clearStaleTimeout(),this.clearRefetchInterval()},n.clearStaleTimeout=function(){this.staleTimeoutId&&(clearTimeout(this.staleTimeoutId),this.staleTimeoutId=void 0)},n.clearRefetchInterval=function(){this.refetchIntervalId&&(clearInterval(this.refetchIntervalId),this.refetchIntervalId=void 0)},n.createResult=function(o,i){var d=this.currentQuery,y=this.options,_=this.currentResult,k=this.currentResultState,T=this.currentResultOptions,N=o!==d,L=N?o.state:this.currentQueryInitialState,Y=N?this.currentResult:this.previousQueryResult,q=o.state,K=q.dataUpdatedAt,U=q.error,X=q.errorUpdatedAt,Z=q.isFetching,fe=q.status,me=!1,ye=!1,ge;if(i.optimisticResults){var ae=this.hasListeners(),Pe=!ae&&J9e(o,i),Ne=ae&&X9e(o,d,i,y);(Pe||Ne)&&(Z=!0,K||(fe="loading"))}if(i.keepPreviousData&&!q.dataUpdateCount&&Y?.isSuccess&&fe!=="error")ge=Y.data,K=Y.dataUpdatedAt,fe=Y.status,me=!0;else if(i.select&&typeof q.data<"u")if(_&&q.data===k?.data&&i.select===this.selectFn)ge=this.selectResult;else try{this.selectFn=i.select,ge=i.select(q.data),i.structuralSharing!==!1&&(ge=$C(_?.data,ge)),this.selectResult=ge,this.selectError=null}catch(Me){Gk().error(Me),this.selectError=Me}else ge=q.data;if(typeof i.placeholderData<"u"&&typeof ge>"u"&&(fe==="loading"||fe==="idle")){var Ye;if(_?.isPlaceholderData&&i.placeholderData===T?.placeholderData)Ye=_.data;else if(Ye=typeof i.placeholderData=="function"?i.placeholderData():i.placeholderData,i.select&&typeof Ye<"u")try{Ye=i.select(Ye),i.structuralSharing!==!1&&(Ye=$C(_?.data,Ye)),this.selectError=null}catch(Me){Gk().error(Me),this.selectError=Me}typeof Ye<"u"&&(fe="success",ge=Ye,ye=!0)}this.selectError&&(U=this.selectError,ge=this.selectResult,X=Date.now(),fe="error");var Je={status:fe,isLoading:fe==="loading",isSuccess:fe==="success",isError:fe==="error",isIdle:fe==="idle",data:ge,dataUpdatedAt:K,error:U,errorUpdatedAt:X,failureCount:q.fetchFailureCount,errorUpdateCount:q.errorUpdateCount,isFetched:q.dataUpdateCount>0||q.errorUpdateCount>0,isFetchedAfterMount:q.dataUpdateCount>L.dataUpdateCount||q.errorUpdateCount>L.errorUpdateCount,isFetching:Z,isRefetching:Z&&fe!=="loading",isLoadingError:fe==="error"&&q.dataUpdatedAt===0,isPlaceholderData:ye,isPreviousData:me,isRefetchError:fe==="error"&&q.dataUpdatedAt!==0,isStale:Yde(o,i),refetch:this.refetch,remove:this.remove};return Je},n.shouldNotifyListeners=function(o,i){if(!i)return!0;var d=this.options,y=d.notifyOnChangeProps,_=d.notifyOnChangePropsExclusions;if(!y&&!_||y==="tracked"&&!this.trackedProps.length)return!0;var k=y==="tracked"?this.trackedProps:y;return Object.keys(o).some(function(T){var N=T,L=o[N]!==i[N],Y=k?.some(function(K){return K===T}),q=_?.some(function(K){return K===T});return L&&!q&&(!k||Y)})},n.updateResult=function(o){var i=this.currentResult;if(this.currentResult=this.createResult(this.currentQuery,this.options),this.currentResultState=this.currentQuery.state,this.currentResultOptions=this.options,!L9e(this.currentResult,i)){var d={cache:!0};o?.listeners!==!1&&this.shouldNotifyListeners(this.currentResult,i)&&(d.listeners=!0),this.notify(so({},d,o))}},n.updateQuery=function(){var o=this.client.getQueryCache().build(this.client,this.options);if(o!==this.currentQuery){var i=this.currentQuery;this.currentQuery=o,this.currentQueryInitialState=o.state,this.previousQueryResult=this.currentResult,this.hasListeners()&&(i?.removeObserver(this),o.addObserver(this))}},n.onQueryUpdate=function(o){var i={};o.type==="success"?i.onSuccess=!0:o.type==="error"&&!qC(o.error)&&(i.onError=!0),this.updateResult(i),this.hasListeners()&&this.updateTimers()},n.notify=function(o){var i=this;wi.batch(function(){o.onSuccess?(i.options.onSuccess==null||i.options.onSuccess(i.currentResult.data),i.options.onSettled==null||i.options.onSettled(i.currentResult.data,null)):o.onError&&(i.options.onError==null||i.options.onError(i.currentResult.error),i.options.onSettled==null||i.options.onSettled(void 0,i.currentResult.error)),o.listeners&&i.listeners.forEach(function(d){d(i.currentResult)}),o.cache&&i.client.getQueryCache().notify({query:i.currentQuery,type:"observerResultsUpdated"})})},t}(k4);function THt(e,t){return t.enabled!==!1&&!e.state.dataUpdatedAt&&!(e.state.status==="error"&&t.retryOnMount===!1)}function J9e(e,t){return THt(e,t)||e.state.dataUpdatedAt>0&&Xde(e,t,t.refetchOnMount)}function Xde(e,t,n){if(t.enabled!==!1){var r=typeof n=="function"?n(e):n;return r==="always"||r!==!1&&Yde(e,t)}return!1}function X9e(e,t,n,r){return n.enabled!==!1&&(e!==t||r.enabled===!1)&&(!n.suspense||e.state.status!=="error")&&Yde(e,n)}function Yde(e,t){return e.isStaleByTime(t.staleTime)}var K9e=V(Li()),Y9e=K9e.default.unstable_batchedUpdates;wi.setBatchNotifyFunction(Y9e);var Q9e=console;Jde(Q9e);var t9=V(ne()),Z9e=t9.default.createContext(void 0),eIe=t9.default.createContext(!1);function tIe(e){return e&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=Z9e),window.ReactQueryClientContext):Z9e}var Qde=function(){var t=t9.default.useContext(tIe(t9.default.useContext(eIe)));if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},Tn=function(t){var n=t.client,r=t.contextSharing,o=r===void 0?!1:r,i=t.children;t9.default.useEffect(function(){return n.mount(),function(){n.unmount()}},[n]);var d=tIe(o);return t9.default.createElement(eIe.Provider,{value:o},t9.default.createElement(d.Provider,{value:n},i))};var Zde=V(ne());function AHt(){var e=!1;return{clearReset:function(){e=!1},reset:function(){e=!0},isReset:function(){return e}}}var MHt=Zde.default.createContext(AHt()),rIe=function(){return Zde.default.useContext(MHt)};function nIe(e,t,n){return typeof t=="function"?t.apply(void 0,n):typeof t=="boolean"?t:!!e}var UC=V(ne());function oIe(e,t){var n=UC.default.useRef(!1),r=UC.default.useState(0),o=r[1],i=Qde(),d=rIe(),y=i.defaultQueryObserverOptions(e);y.optimisticResults=!0,y.onError&&(y.onError=wi.batchCalls(y.onError)),y.onSuccess&&(y.onSuccess=wi.batchCalls(y.onSuccess)),y.onSettled&&(y.onSettled=wi.batchCalls(y.onSettled)),y.suspense&&(typeof y.staleTime!="number"&&(y.staleTime=1e3),y.cacheTime===0&&(y.cacheTime=1)),(y.suspense||y.useErrorBoundary)&&(d.isReset()||(y.retryOnMount=!1));var _=UC.default.useState(function(){return new t(i,y)}),k=_[0],T=k.getOptimisticResult(y);if(UC.default.useEffect(function(){n.current=!0,d.clearReset();var N=k.subscribe(wi.batchCalls(function(){n.current&&o(function(L){return L+1})}));return k.updateResult(),function(){n.current=!1,N()}},[d,k]),UC.default.useEffect(function(){k.setOptions(y,{listeners:!1})},[y,k]),y.suspense&&T.isLoading)throw k.fetchOptimistic(y).then(function(N){var L=N.data;y.onSuccess==null||y.onSuccess(L),y.onSettled==null||y.onSettled(L,null)}).catch(function(N){d.clearReset(),y.onError==null||y.onError(N),y.onSettled==null||y.onSettled(void 0,N)});if(T.isError&&!d.isReset()&&!T.isFetching&&nIe(y.suspense,y.useErrorBoundary,[T.error,k.getCurrentQuery()]))throw T.error;return y.notifyOnChangeProps==="tracked"&&(T=k.trackResult(T,y)),T}function Vn(e,t,n){var r=HC(e,t,n);return oIe(r,Kde)}var r9=V(ne());function Jk(e){return r9.default.createElement(r9.default.Fragment,null,r9.default.createElement("span",null,r9.default.createElement("button",{onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)}},r9.default.createElement(Zp,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:e.colorFirst||"primary"},e.ontologyName?e.ontologyName.toUpperCase():"No ontology name available")),"\xA0",r9.default.createElement(sn,{type:"arrowRight"}),"\xA0",r9.default.createElement(Zp,{className:"breadcrumb",color:e.colorSecond||"success"},e.shortForm?e.shortForm.toUpperCase():"No short form available")))}function aIe(e){let{api:t,parameter:n,hasShortSelectedLabel:r,allowCustomTerms:o,selectionChangedEvent:i,preselected:d,placeholder:y,singleSelection:_,singleSuggestionRow:k,ts4nfdiGateway:T=!1,showApiSource:N=!0,...L}=e,Y=new $n(t),q=H_(),K=Ej(),[U,X]=(0,hs.useState)(""),[Z,fe]=(0,hs.useState)([]),[me,ye]=(0,hs.useState)([]),ge=(Me,Ve)=>{let{label:Ue,value:ht}=Me,yt=K.indexOf(ht.type==="class"?K[5]:ht.type==="individual"?K[3]:ht.type==="property"?K[1]:""),Mt=q[yt];if(o&&ht.iri=="")return Ue;let wt=ht.type==="ontology"?"Prefix: "+ht.ontology_name:"Prefix > Short form: "+ht.ontology_name+" > "+ht.short_form,_t=`Type: ${ht.type} + not configured. This callback must be implemented to handle pagination changes`);return c(Mr,{token:"euiBasicTable.tablePagination",default:"Pagination for table: {tableCaption}",values:{tableCaption:_}},function(T){return c(P9e,{pagination:y,onPageSizeChange:o.onPageSizeChange.bind(o),onPageChange:o.onPageChange.bind(o),"aria-controls":o.tableId,"aria-label":T})})}}}],[{key:"getDerivedStateFromProps",value:function(o,i){if(!o.selection)return{selection:[]};var d=o.itemId,y=i.selection.filter(function(_){return o.items.findIndex(function(k){return WC(k,d)===WC(_,d)})!==-1});return y.length!==i.selection.length?(o.selection.onSelectionChange&&o.selection.onSelectionChange(y),{selection:y}):null}}]),n}(XX.Component);Zy(qk,"defaultProps",{responsive:!0,tableLayout:"fixed",noItemsMessage:c(Mr,{token:"euiBasicTable.noItemsMessage",default:"No items found"})});qk.propTypes={className:Tt.default.string,"aria-label":Tt.default.string,"data-test-subj":Tt.default.string,itemId:Tt.default.oneOfType([Tt.default.string.isRequired,Tt.default.number.isRequired,Tt.default.func.isRequired]),itemIdToExpandedRowMap:Tt.default.shape({}),items:Tt.default.arrayOf(Tt.default.any.isRequired),cellProps:Tt.default.oneOfType([Tt.default.any.isRequired,Tt.default.func.isRequired]),columns:Tt.default.arrayOf(Tt.default.oneOfType([Tt.default.shape({field:Tt.default.oneOfType([Tt.default.any.isRequired,Tt.default.any.isRequired]).isRequired,name:Tt.default.node.isRequired,description:Tt.default.string,dataType:Tt.default.oneOf(["auto","string","number","boolean","date"]),width:Tt.default.string,sortable:Tt.default.oneOfType([Tt.default.bool.isRequired,Tt.default.func.isRequired]),isExpander:Tt.default.bool,textOnly:Tt.default.bool,align:Tt.default.oneOf(["left","right","center"]),truncateText:Tt.default.bool,mobileOptions:Tt.default.shape({render:Tt.default.func}),render:Tt.default.func,footer:Tt.default.oneOfType([Tt.default.string.isRequired,Tt.default.element.isRequired,Tt.default.func.isRequired]),readOnly:Tt.default.bool,className:Tt.default.string,"aria-label":Tt.default.string,"data-test-subj":Tt.default.string}).isRequired,Tt.default.shape({render:Tt.default.func.isRequired,name:Tt.default.node,description:Tt.default.string,sortable:Tt.default.func,width:Tt.default.string,truncateText:Tt.default.bool,isExpander:Tt.default.bool,align:Tt.default.oneOf(["left","right","center"]),readOnly:Tt.default.bool,className:Tt.default.string,"aria-label":Tt.default.string,"data-test-subj":Tt.default.string}).isRequired,Tt.default.shape({actions:Tt.default.arrayOf(Tt.default.oneOfType([Tt.default.shape({type:Tt.default.oneOfType([Tt.default.oneOf(["button"]),Tt.default.oneOf(["icon"]).isRequired]),color:Tt.default.oneOfType([Tt.default.oneOfType([Tt.default.oneOf(["primary","danger","text","ghost","success","warning"]).isRequired,Tt.default.func.isRequired]),Tt.default.oneOfType([Tt.default.oneOf(["primary","accent","success","warning","danger","ghost","text"]).isRequired,Tt.default.func.isRequired])]),name:Tt.default.oneOfType([Tt.default.node.isRequired,Tt.default.func.isRequired]).isRequired,description:Tt.default.string.isRequired,onClick:Tt.default.func,href:Tt.default.string,target:Tt.default.string,available:Tt.default.func,enabled:Tt.default.func,isPrimary:Tt.default.bool,"data-test-subj":Tt.default.string,icon:Tt.default.oneOfType([Tt.default.oneOf(["accessibility","addDataApp","advancedSettingsApp","agentApp","aggregate","alert","analyzeEvent","annotation","apmApp","apmTrace","appSearchApp","apps","arrowDown","arrowLeft","arrowRight","arrowUp","arrowStart","arrowEnd","asterisk","auditbeatApp","beaker","bell","bellSlash","bolt","boxesHorizontal","boxesVertical","branch","branchUser","broom","brush","bug","bullseye","calendar","canvasApp","casesApp","check","checkInCircleFilled","cheer","classificationJob","clock","cloudDrizzle","cloudStormy","cloudSunny","cluster","codeApp","color","compute","console","consoleApp","container","continuityAbove","continuityAboveBelow","continuityBelow","continuityWithin","controlsHorizontal","controlsVertical","copy","copyClipboard","createAdvancedJob","createMultiMetricJob","createPopulationJob","createSingleMetricJob","cross","crossClusterReplicationApp","crossInACircleFilled","crosshairs","currency","cut","dashboardApp","dataVisualizer","database","desktop","devToolsApp","discoverApp","document","documentEdit","documentation","documents","dot","doubleArrowLeft","doubleArrowRight","download","editorAlignCenter","editorAlignLeft","editorAlignRight","editorBold","editorChecklist","editorCodeBlock","editorComment","editorDistributeHorizontal","editorDistributeVertical","editorHeading","editorItalic","editorItemAlignBottom","editorItemAlignCenter","editorItemAlignLeft","editorItemAlignMiddle","editorItemAlignRight","editorItemAlignTop","editorLink","editorOrderedList","editorPositionBottomLeft","editorPositionBottomRight","editorPositionTopLeft","editorPositionTopRight","editorRedo","editorStrike","editorTable","editorUnderline","editorUndo","editorUnorderedList","email","empty","emsApp","eql","eraser","exit","expand","expandMini","exportAction","eye","eyeClosed","faceHappy","faceNeutral","faceSad","filebeatApp","filter","flag","fleetApp","fold","folderCheck","folderClosed","folderExclamation","folderOpen","frameNext","framePrevious","fullScreen","fullScreenExit","function","gear","gisApp","glasses","globe","grab","grabHorizontal","graphApp","grid","grokApp","heart","heartbeatApp","heatmap","help","home","iInCircle","image","importAction","indexClose","indexEdit","indexFlush","indexManagementApp","indexMapping","indexOpen","indexPatternApp","indexRollupApp","indexRuntime","indexSettings","inputOutput","inspect","invert","ip","keyboard","kqlField","kqlFunction","kqlOperand","kqlSelector","kqlValue","kubernetesNode","kubernetesPod","layers","lensApp","lettering","lineDashed","lineDotted","lineSolid","link","list","listAdd","lock","lockOpen","logoAWS","logoAWSMono","logoAerospike","logoApache","logoAppSearch","logoAzure","logoAzureMono","logoBeats","logoBusinessAnalytics","logoCeph","logoCloud","logoCloudEnterprise","logoCode","logoCodesandbox","logoCouchbase","logoDocker","logoDropwizard","logoElastic","logoElasticStack","logoElasticsearch","logoEnterpriseSearch","logoEtcd","logoGCP","logoGCPMono","logoGithub","logoGmail","logoGolang","logoGoogleG","logoHAproxy","logoIBM","logoIBMMono","logoKafka","logoKibana","logoKubernetes","logoLogging","logoLogstash","logoMaps","logoMemcached","logoMetrics","logoMongodb","logoMySQL","logoNginx","logoObservability","logoOsquery","logoPhp","logoPostgres","logoPrometheus","logoRabbitmq","logoRedis","logoSecurity","logoSiteSearch","logoSketch","logoSlack","logoUptime","logoWebhook","logoWindows","logoWorkplaceSearch","logsApp","logstashFilter","logstashIf","logstashInput","logstashOutput","logstashQueue","machineLearningApp","magnet","magnifyWithExclamation","magnifyWithMinus","magnifyWithPlus","managementApp","mapMarker","memory","menu","menuDown","menuLeft","menuRight","menuUp","merge","metricbeatApp","metricsApp","minimize","minus","minusInCircle","minusInCircleFilled","mobile","monitoringApp","moon","namespace","nested","node","notebookApp","number","offline","online","outlierDetectionJob","package","packetbeatApp","pageSelect","pagesSelect","paperClip","partial","pause","payment","pencil","percent","pin","pinFilled","pipelineApp","play","playFilled","plus","plusInCircle","plusInCircleFilled","popout","push","questionInCircle","quote","recentlyViewedApp","refresh","regressionJob","reporter","reportingApp","returnKey","save","savedObjectsApp","scale","search","searchProfilerApp","securityAnalyticsApp","securityApp","securitySignal","securitySignalDetected","securitySignalResolved","sessionViewer","shard","share","snowflake","sortDown","sortLeft","sortRight","sortUp","sortable","spacesApp","sqlApp","starEmpty","starEmptySpace","starFilled","starFilledSpace","starMinusEmpty","starMinusFilled","starPlusEmpty","starPlusFilled","stats","stop","stopFilled","stopSlash","storage","string","submodule","sun","swatchInput","symlink","tableDensityCompact","tableDensityExpanded","tableDensityNormal","tableOfContents","tag","tear","temperature","timeline","timelionApp","timeRefresh","timeslider","training","trash","unfold","unlink","upgradeAssistantApp","uptimeApp","user","userAvatar","users","usersRolesApp","vector","videoPlayer","visArea","visAreaStacked","visBarHorizontal","visBarHorizontalStacked","visBarVertical","visBarVerticalStacked","visGauge","visGoal","visLine","visMapCoordinate","visMapRegion","visMetric","visPie","visTable","visTagCloud","visText","visTimelion","visVega","visVisualBuilder","visualizeApp","watchesApp","wordWrap","wordWrapDisabled","workplaceSearchApp","wrench","tokenAlias","tokenAnnotation","tokenArray","tokenBinary","tokenBoolean","tokenClass","tokenCompletionSuggester","tokenConstant","tokenDate","tokenDenseVector","tokenElement","tokenEnum","tokenEnumMember","tokenEvent","tokenException","tokenField","tokenFile","tokenFlattened","tokenFunction","tokenGeo","tokenHistogram","tokenInterface","tokenIP","tokenJoin","tokenKey","tokenKeyword","tokenMethod","tokenMetricCounter","tokenMetricGauge","tokenModule","tokenNamespace","tokenNested","tokenNull","tokenNumber","tokenObject","tokenOperator","tokenPackage","tokenParameter","tokenPercolator","tokenProperty","tokenRange","tokenRankFeature","tokenRankFeatures","tokenRepo","tokenSearchType","tokenShape","tokenString","tokenStruct","tokenSymbol","tokenTag","tokenText","tokenTokenCount","tokenVariable"]).isRequired,Tt.default.func.isRequired])}).isRequired,Tt.default.shape({render:Tt.default.func.isRequired,available:Tt.default.func,enabled:Tt.default.func,isPrimary:Tt.default.bool}).isRequired]).isRequired).isRequired,name:Tt.default.node,description:Tt.default.string,width:Tt.default.string}).isRequired]).isRequired),error:Tt.default.string,tableCaption:Tt.default.string,rowHeader:Tt.default.string,hasActions:Tt.default.bool,isExpandable:Tt.default.bool,isSelectable:Tt.default.bool,loading:Tt.default.bool,noItemsMessage:Tt.default.node,onChange:Tt.default.func,pagination:Tt.default.oneOfType([Tt.default.oneOf([void 0]),Tt.default.shape({pageIndex:Tt.default.number.isRequired,pageSize:Tt.default.number.isRequired,totalItemCount:Tt.default.number.isRequired,pageSizeOptions:Tt.default.arrayOf(Tt.default.number.isRequired),showPerPageOptions:Tt.default.bool})]),responsive:Tt.default.bool,rowProps:Tt.default.oneOfType([Tt.default.any.isRequired,Tt.default.func.isRequired]),selection:Tt.default.shape({onSelectionChange:Tt.default.func,selectable:Tt.default.func,selectableMessage:Tt.default.func,initialSelected:Tt.default.arrayOf(Tt.default.any.isRequired)}),sorting:Tt.default.shape({sort:Tt.default.shape({field:Tt.default.any.isRequired,direction:Tt.default.oneOf(["asc","desc"]).isRequired}),allowNeutralSort:Tt.default.bool,enableAllColumns:Tt.default.bool,readOnly:Tt.default.bool}),tableLayout:Tt.default.oneOf(["fixed","auto"]),textOnly:Tt.default.bool};var k4=function(){function e(){this.listeners=[]}var t=e.prototype;return t.subscribe=function(r){var o=this,i=r||function(){};return this.listeners.push(i),this.onSubscribe(),function(){o.listeners=o.listeners.filter(function(d){return d!==i}),o.onUnsubscribe()}},t.hasListeners=function(){return this.listeners.length>0},t.onSubscribe=function(){},t.onUnsubscribe=function(){},e}();var Uk=typeof window>"u";function Vl(){}function z9e(e,t){return typeof e=="function"?e(t):e}function RH(e){return typeof e=="number"&&e>=0&&e!==1/0}function MH(e){return Array.isArray(e)?e:[e]}function KX(e,t){return Math.max(e+(t||0)-Date.now(),0)}function HC(e,t,n){return YX(e)?typeof t=="function"?so({},n,{queryKey:e,queryFn:t}):so({},t,{queryKey:e}):e}function P4(e,t,n){return YX(e)?[so({},t,{queryKey:e}),n]:[e||{},t]}function xHt(e,t){if(e===!0&&t===!0||e==null&&t==null)return"all";if(e===!1&&t===!1)return"none";var n=e??!t;return n?"active":"inactive"}function qde(e,t){var n=e.active,r=e.exact,o=e.fetching,i=e.inactive,d=e.predicate,y=e.queryKey,_=e.stale;if(YX(y)){if(r){if(t.queryHash!==DH(y,t.options))return!1}else if(!zH(t.queryKey,y))return!1}var k=xHt(n,i);if(k==="none")return!1;if(k!=="all"){var T=t.isActive();if(k==="active"&&!T||k==="inactive"&&T)return!1}return!(typeof _=="boolean"&&t.isStale()!==_||typeof o=="boolean"&&t.isFetching()!==o||d&&!d(t))}function Ude(e,t){var n=e.exact,r=e.fetching,o=e.predicate,i=e.mutationKey;if(YX(i)){if(!t.options.mutationKey)return!1;if(n){if(ZE(t.options.mutationKey)!==ZE(i))return!1}else if(!zH(t.options.mutationKey,i))return!1}return!(typeof r=="boolean"&&t.state.status==="loading"!==r||o&&!o(t))}function DH(e,t){var n=t?.queryKeyHashFn||ZE;return n(e)}function ZE(e){var t=MH(e);return _Ht(t)}function _Ht(e){return JSON.stringify(e,function(t,n){return Vde(n)?Object.keys(n).sort().reduce(function(r,o){return r[o]=n[o],r},{}):n})}function zH(e,t){return N9e(MH(e),MH(t))}function N9e(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?!Object.keys(t).some(function(n){return!N9e(e[n],t[n])}):!1}function $C(e,t){if(e===t)return e;var n=Array.isArray(e)&&Array.isArray(t);if(n||Vde(e)&&Vde(t)){for(var r=n?e.length:Object.keys(e).length,o=n?t:Object.keys(t),i=o.length,d=n?[]:{},y=0,_=0;_"u")return!0;var n=t.prototype;return!(!D9e(n)||!n.hasOwnProperty("isPrototypeOf"))}function D9e(e){return Object.prototype.toString.call(e)==="[object Object]"}function YX(e){return typeof e=="string"||Array.isArray(e)}function F9e(e){return new Promise(function(t){setTimeout(t,e)})}function Gde(e){Promise.resolve().then(e).catch(function(t){return setTimeout(function(){throw t})})}function QX(){if(typeof AbortController=="function")return new AbortController}var SHt=function(e){Q0(t,e);function t(){var r;return r=e.call(this)||this,r.setup=function(o){var i;if(!Uk&&((i=window)!=null&&i.addEventListener)){var d=function(){return o()};return window.addEventListener("visibilitychange",d,!1),window.addEventListener("focus",d,!1),function(){window.removeEventListener("visibilitychange",d),window.removeEventListener("focus",d)}}},r}var n=t.prototype;return n.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},n.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},n.setEventListener=function(o){var i,d=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(y){typeof y=="boolean"?d.setFocused(y):d.onFocus()})},n.setFocused=function(o){this.focused=o,o&&this.onFocus()},n.onFocus=function(){this.listeners.forEach(function(o){o()})},n.isFocused=function(){return typeof this.focused=="boolean"?this.focused:typeof document>"u"?!0:[void 0,"visible","prerender"].includes(document.visibilityState)},t}(k4),e9=new SHt;var EHt=function(e){Q0(t,e);function t(){var r;return r=e.call(this)||this,r.setup=function(o){var i;if(!Uk&&((i=window)!=null&&i.addEventListener)){var d=function(){return o()};return window.addEventListener("online",d,!1),window.addEventListener("offline",d,!1),function(){window.removeEventListener("online",d),window.removeEventListener("offline",d)}}},r}var n=t.prototype;return n.onSubscribe=function(){this.cleanup||this.setEventListener(this.setup)},n.onUnsubscribe=function(){if(!this.hasListeners()){var o;(o=this.cleanup)==null||o.call(this),this.cleanup=void 0}},n.setEventListener=function(o){var i,d=this;this.setup=o,(i=this.cleanup)==null||i.call(this),this.cleanup=o(function(y){typeof y=="boolean"?d.setOnline(y):d.onOnline()})},n.setOnline=function(o){this.online=o,o&&this.onOnline()},n.onOnline=function(){this.listeners.forEach(function(o){o()})},n.isOnline=function(){return typeof this.online=="boolean"?this.online:typeof navigator>"u"||typeof navigator.onLine>"u"?!0:navigator.onLine},t}(k4),VC=new EHt;function IHt(e){return Math.min(1e3*Math.pow(2,e),3e4)}function NH(e){return typeof e?.cancel=="function"}var B9e=function(t){this.revert=t?.revert,this.silent=t?.silent};function qC(e){return e instanceof B9e}var ZX=function(t){var n=this,r=!1,o,i,d,y;this.abort=t.abort,this.cancel=function(L){return o?.(L)},this.cancelRetry=function(){r=!0},this.continueRetry=function(){r=!1},this.continue=function(){return i?.()},this.failureCount=0,this.isPaused=!1,this.isResolved=!1,this.isTransportCancelable=!1,this.promise=new Promise(function(L,Y){d=L,y=Y});var _=function(Y){n.isResolved||(n.isResolved=!0,t.onSuccess==null||t.onSuccess(Y),i?.(),d(Y))},k=function(Y){n.isResolved||(n.isResolved=!0,t.onError==null||t.onError(Y),i?.(),y(Y))},T=function(){return new Promise(function(Y){i=Y,n.isPaused=!0,t.onPause==null||t.onPause()}).then(function(){i=void 0,n.isPaused=!1,t.onContinue==null||t.onContinue()})},N=function L(){if(!n.isResolved){var Y;try{Y=t.fn()}catch(q){Y=Promise.reject(q)}o=function(K){if(!n.isResolved&&(k(new B9e(K)),n.abort==null||n.abort(),NH(Y)))try{Y.cancel()}catch{}},n.isTransportCancelable=NH(Y),Promise.resolve(Y).then(_).catch(function(q){var K,U;if(!n.isResolved){var X=(K=t.retry)!=null?K:3,Z=(U=t.retryDelay)!=null?U:IHt,fe=typeof Z=="function"?Z(n.failureCount,q):Z,me=X===!0||typeof X=="number"&&n.failureCount"u"&&(y.exact=!0),this.queries.find(function(_){return qde(y,_)})},n.findAll=function(o,i){var d=P4(o,i),y=d[0];return Object.keys(y).length>0?this.queries.filter(function(_){return qde(y,_)}):this.queries},n.notify=function(o){var i=this;wi.batch(function(){i.listeners.forEach(function(d){d(o)})})},n.onFocus=function(){var o=this;wi.batch(function(){o.queries.forEach(function(i){i.onFocus()})})},n.onOnline=function(){var o=this;wi.batch(function(){o.queries.forEach(function(i){i.onOnline()})})},t}(k4);var V9e=function(){function e(n){this.options=so({},n.defaultOptions,n.options),this.mutationId=n.mutationId,this.mutationCache=n.mutationCache,this.observers=[],this.state=n.state||PHt(),this.meta=n.meta}var t=e.prototype;return t.setState=function(r){this.dispatch({type:"setState",state:r})},t.addObserver=function(r){this.observers.indexOf(r)===-1&&this.observers.push(r)},t.removeObserver=function(r){this.observers=this.observers.filter(function(o){return o!==r})},t.cancel=function(){return this.retryer?(this.retryer.cancel(),this.retryer.promise.then(Vl).catch(Vl)):Promise.resolve()},t.continue=function(){return this.retryer?(this.retryer.continue(),this.retryer.promise):this.execute()},t.execute=function(){var r=this,o,i=this.state.status==="loading",d=Promise.resolve();return i||(this.dispatch({type:"loading",variables:this.options.variables}),d=d.then(function(){r.mutationCache.config.onMutate==null||r.mutationCache.config.onMutate(r.state.variables,r)}).then(function(){return r.options.onMutate==null?void 0:r.options.onMutate(r.state.variables)}).then(function(y){y!==r.state.context&&r.dispatch({type:"loading",context:y,variables:r.state.variables})})),d.then(function(){return r.executeMutation()}).then(function(y){o=y,r.mutationCache.config.onSuccess==null||r.mutationCache.config.onSuccess(o,r.state.variables,r.state.context,r)}).then(function(){return r.options.onSuccess==null?void 0:r.options.onSuccess(o,r.state.variables,r.state.context)}).then(function(){return r.options.onSettled==null?void 0:r.options.onSettled(o,null,r.state.variables,r.state.context)}).then(function(){return r.dispatch({type:"success",data:o}),o}).catch(function(y){return r.mutationCache.config.onError==null||r.mutationCache.config.onError(y,r.state.variables,r.state.context,r),Gk().error(y),Promise.resolve().then(function(){return r.options.onError==null?void 0:r.options.onError(y,r.state.variables,r.state.context)}).then(function(){return r.options.onSettled==null?void 0:r.options.onSettled(void 0,y,r.state.variables,r.state.context)}).then(function(){throw r.dispatch({type:"error",error:y}),y})})},t.executeMutation=function(){var r=this,o;return this.retryer=new ZX({fn:function(){return r.options.mutationFn?r.options.mutationFn(r.state.variables):Promise.reject("No mutationFn found")},onFail:function(){r.dispatch({type:"failed"})},onPause:function(){r.dispatch({type:"pause"})},onContinue:function(){r.dispatch({type:"continue"})},retry:(o=this.options.retry)!=null?o:0,retryDelay:this.options.retryDelay}),this.retryer.promise},t.dispatch=function(r){var o=this;this.state=jHt(this.state,r),wi.batch(function(){o.observers.forEach(function(i){i.onMutationUpdate(r)}),o.mutationCache.notify(o)})},e}();function PHt(){return{context:void 0,data:void 0,error:null,failureCount:0,isPaused:!1,status:"idle",variables:void 0}}function jHt(e,t){switch(t.type){case"failed":return so({},e,{failureCount:e.failureCount+1});case"pause":return so({},e,{isPaused:!0});case"continue":return so({},e,{isPaused:!1});case"loading":return so({},e,{context:t.context,data:void 0,error:null,isPaused:!1,status:"loading",variables:t.variables});case"success":return so({},e,{data:t.data,error:null,status:"success",isPaused:!1});case"error":return so({},e,{data:void 0,error:t.error,failureCount:e.failureCount+1,isPaused:!1,status:"error"});case"setState":return so({},e,t.state);default:return e}}var q9e=function(e){Q0(t,e);function t(r){var o;return o=e.call(this)||this,o.config=r||{},o.mutations=[],o.mutationId=0,o}var n=t.prototype;return n.build=function(o,i,d){var y=new V9e({mutationCache:this,mutationId:++this.mutationId,options:o.defaultMutationOptions(i),state:d,defaultOptions:i.mutationKey?o.getMutationDefaults(i.mutationKey):void 0,meta:i.meta});return this.add(y),y},n.add=function(o){this.mutations.push(o),this.notify(o)},n.remove=function(o){this.mutations=this.mutations.filter(function(i){return i!==o}),o.cancel(),this.notify(o)},n.clear=function(){var o=this;wi.batch(function(){o.mutations.forEach(function(i){o.remove(i)})})},n.getAll=function(){return this.mutations},n.find=function(o){return typeof o.exact>"u"&&(o.exact=!0),this.mutations.find(function(i){return Ude(o,i)})},n.findAll=function(o){return this.mutations.filter(function(i){return Ude(o,i)})},n.notify=function(o){var i=this;wi.batch(function(){i.listeners.forEach(function(d){d(o)})})},n.onFocus=function(){this.resumePausedMutations()},n.onOnline=function(){this.resumePausedMutations()},n.resumePausedMutations=function(){var o=this.mutations.filter(function(i){return i.state.isPaused});return wi.batch(function(){return o.reduce(function(i,d){return i.then(function(){return d.continue().catch(Vl)})},Promise.resolve())})},t}(k4);function G9e(){return{onFetch:function(t){t.fetchFn=function(){var n,r,o,i,d,y,_=(n=t.fetchOptions)==null||(r=n.meta)==null?void 0:r.refetchPage,k=(o=t.fetchOptions)==null||(i=o.meta)==null?void 0:i.fetchMore,T=k?.pageParam,N=k?.direction==="forward",L=k?.direction==="backward",Y=((d=t.state.data)==null?void 0:d.pages)||[],q=((y=t.state.data)==null?void 0:y.pageParams)||[],K=QX(),U=K?.signal,X=q,Z=!1,fe=t.options.queryFn||function(){return Promise.reject("Missing queryFn")},me=function(Ue,ht,yt,Rt){return X=Rt?[ht].concat(X):[].concat(X,[ht]),Rt?[yt].concat(Ue):[].concat(Ue,[yt])},ye=function(Ue,ht,yt,Rt){if(Z)return Promise.reject("Cancelled");if(typeof yt>"u"&&!ht&&Ue.length)return Promise.resolve(Ue);var wt={queryKey:t.queryKey,signal:U,pageParam:yt,meta:t.meta},_t=fe(wt),Nt=Promise.resolve(_t).then(function(ir){return me(Ue,yt,ir,Rt)});if(NH(_t)){var At=Nt;At.cancel=_t.cancel}return Nt},ge;if(!Y.length)ge=ye([]);else if(N){var ae=typeof T<"u",Pe=ae?T:U9e(t.options,Y);ge=ye(Y,ae,Pe)}else if(L){var Ne=typeof T<"u",Ye=Ne?T:CHt(t.options,Y);ge=ye(Y,Ne,Ye,!0)}else(function(){X=[];var Ve=typeof t.options.getNextPageParam>"u",Ue=_&&Y[0]?_(Y[0],0,Y):!0;ge=Ue?ye([],Ve,q[0]):Promise.resolve(me([],q[0],Y[0]));for(var ht=function(wt){ge=ge.then(function(_t){var Nt=_&&Y[wt]?_(Y[wt],wt,Y):!0;if(Nt){var At=Ve?q[wt]:U9e(t.options,_t);return ye(_t,Ve,At)}return Promise.resolve(me(_t,q[wt],Y[wt]))})},yt=1;yt"u"&&(T.revert=!0);var N=wi.batch(function(){return d.queryCache.findAll(_).map(function(L){return L.cancel(T)})});return Promise.all(N).then(Vl).catch(Vl)},t.invalidateQueries=function(r,o,i){var d,y,_,k=this,T=P4(r,o,i),N=T[0],L=T[1],Y=so({},N,{active:(d=(y=N.refetchActive)!=null?y:N.active)!=null?d:!0,inactive:(_=N.refetchInactive)!=null?_:!1});return wi.batch(function(){return k.queryCache.findAll(N).forEach(function(q){q.invalidate()}),k.refetchQueries(Y,L)})},t.refetchQueries=function(r,o,i){var d=this,y=P4(r,o,i),_=y[0],k=y[1],T=wi.batch(function(){return d.queryCache.findAll(_).map(function(L){return L.fetch(void 0,so({},k,{meta:{refetchPage:_?.refetchPage}}))})}),N=Promise.all(T).then(Vl);return k?.throwOnError||(N=N.catch(Vl)),N},t.fetchQuery=function(r,o,i){var d=HC(r,o,i),y=this.defaultQueryOptions(d);typeof y.retry>"u"&&(y.retry=!1);var _=this.queryCache.build(this,y);return _.isStaleByTime(y.staleTime)?_.fetch(y):Promise.resolve(_.state.data)},t.prefetchQuery=function(r,o,i){return this.fetchQuery(r,o,i).then(Vl).catch(Vl)},t.fetchInfiniteQuery=function(r,o,i){var d=HC(r,o,i);return d.behavior=G9e(),this.fetchQuery(d)},t.prefetchInfiniteQuery=function(r,o,i){return this.fetchInfiniteQuery(r,o,i).then(Vl).catch(Vl)},t.cancelMutations=function(){var r=this,o=wi.batch(function(){return r.mutationCache.getAll().map(function(i){return i.cancel()})});return Promise.all(o).then(Vl).catch(Vl)},t.resumePausedMutations=function(){return this.getMutationCache().resumePausedMutations()},t.executeMutation=function(r){return this.mutationCache.build(this,r).execute()},t.getQueryCache=function(){return this.queryCache},t.getMutationCache=function(){return this.mutationCache},t.getDefaultOptions=function(){return this.defaultOptions},t.setDefaultOptions=function(r){this.defaultOptions=r},t.setQueryDefaults=function(r,o){var i=this.queryDefaults.find(function(d){return ZE(r)===ZE(d.queryKey)});i?i.defaultOptions=o:this.queryDefaults.push({queryKey:r,defaultOptions:o})},t.getQueryDefaults=function(r){var o;return r?(o=this.queryDefaults.find(function(i){return zH(r,i.queryKey)}))==null?void 0:o.defaultOptions:void 0},t.setMutationDefaults=function(r,o){var i=this.mutationDefaults.find(function(d){return ZE(r)===ZE(d.mutationKey)});i?i.defaultOptions=o:this.mutationDefaults.push({mutationKey:r,defaultOptions:o})},t.getMutationDefaults=function(r){var o;return r?(o=this.mutationDefaults.find(function(i){return zH(r,i.mutationKey)}))==null?void 0:o.defaultOptions:void 0},t.defaultQueryOptions=function(r){if(r?._defaulted)return r;var o=so({},this.defaultOptions.queries,this.getQueryDefaults(r?.queryKey),r,{_defaulted:!0});return!o.queryHash&&o.queryKey&&(o.queryHash=DH(o.queryKey,o)),o},t.defaultQueryObserverOptions=function(r){return this.defaultQueryOptions(r)},t.defaultMutationOptions=function(r){return r?._defaulted?r:so({},this.defaultOptions.mutations,this.getMutationDefaults(r?.mutationKey),r,{_defaulted:!0})},t.clear=function(){this.queryCache.clear(),this.mutationCache.clear()},e}();var Kde=function(e){Q0(t,e);function t(r,o){var i;return i=e.call(this)||this,i.client=r,i.options=o,i.trackedProps=[],i.selectError=null,i.bindMethods(),i.setOptions(o),i}var n=t.prototype;return n.bindMethods=function(){this.remove=this.remove.bind(this),this.refetch=this.refetch.bind(this)},n.onSubscribe=function(){this.listeners.length===1&&(this.currentQuery.addObserver(this),J9e(this.currentQuery,this.options)&&this.executeFetch(),this.updateTimers())},n.onUnsubscribe=function(){this.listeners.length||this.destroy()},n.shouldFetchOnReconnect=function(){return Xde(this.currentQuery,this.options,this.options.refetchOnReconnect)},n.shouldFetchOnWindowFocus=function(){return Xde(this.currentQuery,this.options,this.options.refetchOnWindowFocus)},n.destroy=function(){this.listeners=[],this.clearTimers(),this.currentQuery.removeObserver(this)},n.setOptions=function(o,i){var d=this.options,y=this.currentQuery;if(this.options=this.client.defaultQueryObserverOptions(o),typeof this.options.enabled<"u"&&typeof this.options.enabled!="boolean")throw new Error("Expected enabled to be a boolean");this.options.queryKey||(this.options.queryKey=d.queryKey),this.updateQuery();var _=this.hasListeners();_&&X9e(this.currentQuery,y,this.options,d)&&this.executeFetch(),this.updateResult(i),_&&(this.currentQuery!==y||this.options.enabled!==d.enabled||this.options.staleTime!==d.staleTime)&&this.updateStaleTimeout();var k=this.computeRefetchInterval();_&&(this.currentQuery!==y||this.options.enabled!==d.enabled||k!==this.currentRefetchInterval)&&this.updateRefetchInterval(k)},n.getOptimisticResult=function(o){var i=this.client.defaultQueryObserverOptions(o),d=this.client.getQueryCache().build(this.client,i);return this.createResult(d,i)},n.getCurrentResult=function(){return this.currentResult},n.trackResult=function(o,i){var d=this,y={},_=function(T){d.trackedProps.includes(T)||d.trackedProps.push(T)};return Object.keys(o).forEach(function(k){Object.defineProperty(y,k,{configurable:!1,enumerable:!0,get:function(){return _(k),o[k]}})}),(i.useErrorBoundary||i.suspense)&&_("error"),y},n.getNextResult=function(o){var i=this;return new Promise(function(d,y){var _=i.subscribe(function(k){k.isFetching||(_(),k.isError&&o?.throwOnError?y(k.error):d(k))})})},n.getCurrentQuery=function(){return this.currentQuery},n.remove=function(){this.client.getQueryCache().remove(this.currentQuery)},n.refetch=function(o){return this.fetch(so({},o,{meta:{refetchPage:o?.refetchPage}}))},n.fetchOptimistic=function(o){var i=this,d=this.client.defaultQueryObserverOptions(o),y=this.client.getQueryCache().build(this.client,d);return y.fetch().then(function(){return i.createResult(y,d)})},n.fetch=function(o){var i=this;return this.executeFetch(o).then(function(){return i.updateResult(),i.currentResult})},n.executeFetch=function(o){this.updateQuery();var i=this.currentQuery.fetch(this.options,o);return o?.throwOnError||(i=i.catch(Vl)),i},n.updateStaleTimeout=function(){var o=this;if(this.clearStaleTimeout(),!(Uk||this.currentResult.isStale||!RH(this.options.staleTime))){var i=KX(this.currentResult.dataUpdatedAt,this.options.staleTime),d=i+1;this.staleTimeoutId=setTimeout(function(){o.currentResult.isStale||o.updateResult()},d)}},n.computeRefetchInterval=function(){var o;return typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.currentResult.data,this.currentQuery):(o=this.options.refetchInterval)!=null?o:!1},n.updateRefetchInterval=function(o){var i=this;this.clearRefetchInterval(),this.currentRefetchInterval=o,!(Uk||this.options.enabled===!1||!RH(this.currentRefetchInterval)||this.currentRefetchInterval===0)&&(this.refetchIntervalId=setInterval(function(){(i.options.refetchIntervalInBackground||e9.isFocused())&&i.executeFetch()},this.currentRefetchInterval))},n.updateTimers=function(){this.updateStaleTimeout(),this.updateRefetchInterval(this.computeRefetchInterval())},n.clearTimers=function(){this.clearStaleTimeout(),this.clearRefetchInterval()},n.clearStaleTimeout=function(){this.staleTimeoutId&&(clearTimeout(this.staleTimeoutId),this.staleTimeoutId=void 0)},n.clearRefetchInterval=function(){this.refetchIntervalId&&(clearInterval(this.refetchIntervalId),this.refetchIntervalId=void 0)},n.createResult=function(o,i){var d=this.currentQuery,y=this.options,_=this.currentResult,k=this.currentResultState,T=this.currentResultOptions,N=o!==d,L=N?o.state:this.currentQueryInitialState,Y=N?this.currentResult:this.previousQueryResult,q=o.state,K=q.dataUpdatedAt,U=q.error,X=q.errorUpdatedAt,Z=q.isFetching,fe=q.status,me=!1,ye=!1,ge;if(i.optimisticResults){var ae=this.hasListeners(),Pe=!ae&&J9e(o,i),Ne=ae&&X9e(o,d,i,y);(Pe||Ne)&&(Z=!0,K||(fe="loading"))}if(i.keepPreviousData&&!q.dataUpdateCount&&Y?.isSuccess&&fe!=="error")ge=Y.data,K=Y.dataUpdatedAt,fe=Y.status,me=!0;else if(i.select&&typeof q.data<"u")if(_&&q.data===k?.data&&i.select===this.selectFn)ge=this.selectResult;else try{this.selectFn=i.select,ge=i.select(q.data),i.structuralSharing!==!1&&(ge=$C(_?.data,ge)),this.selectResult=ge,this.selectError=null}catch(Me){Gk().error(Me),this.selectError=Me}else ge=q.data;if(typeof i.placeholderData<"u"&&typeof ge>"u"&&(fe==="loading"||fe==="idle")){var Ye;if(_?.isPlaceholderData&&i.placeholderData===T?.placeholderData)Ye=_.data;else if(Ye=typeof i.placeholderData=="function"?i.placeholderData():i.placeholderData,i.select&&typeof Ye<"u")try{Ye=i.select(Ye),i.structuralSharing!==!1&&(Ye=$C(_?.data,Ye)),this.selectError=null}catch(Me){Gk().error(Me),this.selectError=Me}typeof Ye<"u"&&(fe="success",ge=Ye,ye=!0)}this.selectError&&(U=this.selectError,ge=this.selectResult,X=Date.now(),fe="error");var Je={status:fe,isLoading:fe==="loading",isSuccess:fe==="success",isError:fe==="error",isIdle:fe==="idle",data:ge,dataUpdatedAt:K,error:U,errorUpdatedAt:X,failureCount:q.fetchFailureCount,errorUpdateCount:q.errorUpdateCount,isFetched:q.dataUpdateCount>0||q.errorUpdateCount>0,isFetchedAfterMount:q.dataUpdateCount>L.dataUpdateCount||q.errorUpdateCount>L.errorUpdateCount,isFetching:Z,isRefetching:Z&&fe!=="loading",isLoadingError:fe==="error"&&q.dataUpdatedAt===0,isPlaceholderData:ye,isPreviousData:me,isRefetchError:fe==="error"&&q.dataUpdatedAt!==0,isStale:Yde(o,i),refetch:this.refetch,remove:this.remove};return Je},n.shouldNotifyListeners=function(o,i){if(!i)return!0;var d=this.options,y=d.notifyOnChangeProps,_=d.notifyOnChangePropsExclusions;if(!y&&!_||y==="tracked"&&!this.trackedProps.length)return!0;var k=y==="tracked"?this.trackedProps:y;return Object.keys(o).some(function(T){var N=T,L=o[N]!==i[N],Y=k?.some(function(K){return K===T}),q=_?.some(function(K){return K===T});return L&&!q&&(!k||Y)})},n.updateResult=function(o){var i=this.currentResult;if(this.currentResult=this.createResult(this.currentQuery,this.options),this.currentResultState=this.currentQuery.state,this.currentResultOptions=this.options,!L9e(this.currentResult,i)){var d={cache:!0};o?.listeners!==!1&&this.shouldNotifyListeners(this.currentResult,i)&&(d.listeners=!0),this.notify(so({},d,o))}},n.updateQuery=function(){var o=this.client.getQueryCache().build(this.client,this.options);if(o!==this.currentQuery){var i=this.currentQuery;this.currentQuery=o,this.currentQueryInitialState=o.state,this.previousQueryResult=this.currentResult,this.hasListeners()&&(i?.removeObserver(this),o.addObserver(this))}},n.onQueryUpdate=function(o){var i={};o.type==="success"?i.onSuccess=!0:o.type==="error"&&!qC(o.error)&&(i.onError=!0),this.updateResult(i),this.hasListeners()&&this.updateTimers()},n.notify=function(o){var i=this;wi.batch(function(){o.onSuccess?(i.options.onSuccess==null||i.options.onSuccess(i.currentResult.data),i.options.onSettled==null||i.options.onSettled(i.currentResult.data,null)):o.onError&&(i.options.onError==null||i.options.onError(i.currentResult.error),i.options.onSettled==null||i.options.onSettled(void 0,i.currentResult.error)),o.listeners&&i.listeners.forEach(function(d){d(i.currentResult)}),o.cache&&i.client.getQueryCache().notify({query:i.currentQuery,type:"observerResultsUpdated"})})},t}(k4);function THt(e,t){return t.enabled!==!1&&!e.state.dataUpdatedAt&&!(e.state.status==="error"&&t.retryOnMount===!1)}function J9e(e,t){return THt(e,t)||e.state.dataUpdatedAt>0&&Xde(e,t,t.refetchOnMount)}function Xde(e,t,n){if(t.enabled!==!1){var r=typeof n=="function"?n(e):n;return r==="always"||r!==!1&&Yde(e,t)}return!1}function X9e(e,t,n,r){return n.enabled!==!1&&(e!==t||r.enabled===!1)&&(!n.suspense||e.state.status!=="error")&&Yde(e,n)}function Yde(e,t){return e.isStaleByTime(t.staleTime)}var K9e=V(Li()),Y9e=K9e.default.unstable_batchedUpdates;wi.setBatchNotifyFunction(Y9e);var Q9e=console;Jde(Q9e);var t9=V(ne()),Z9e=t9.default.createContext(void 0),eIe=t9.default.createContext(!1);function tIe(e){return e&&typeof window<"u"?(window.ReactQueryClientContext||(window.ReactQueryClientContext=Z9e),window.ReactQueryClientContext):Z9e}var Qde=function(){var t=t9.default.useContext(tIe(t9.default.useContext(eIe)));if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},Tn=function(t){var n=t.client,r=t.contextSharing,o=r===void 0?!1:r,i=t.children;t9.default.useEffect(function(){return n.mount(),function(){n.unmount()}},[n]);var d=tIe(o);return t9.default.createElement(eIe.Provider,{value:o},t9.default.createElement(d.Provider,{value:n},i))};var Zde=V(ne());function AHt(){var e=!1;return{clearReset:function(){e=!1},reset:function(){e=!0},isReset:function(){return e}}}var MHt=Zde.default.createContext(AHt()),rIe=function(){return Zde.default.useContext(MHt)};function nIe(e,t,n){return typeof t=="function"?t.apply(void 0,n):typeof t=="boolean"?t:!!e}var UC=V(ne());function oIe(e,t){var n=UC.default.useRef(!1),r=UC.default.useState(0),o=r[1],i=Qde(),d=rIe(),y=i.defaultQueryObserverOptions(e);y.optimisticResults=!0,y.onError&&(y.onError=wi.batchCalls(y.onError)),y.onSuccess&&(y.onSuccess=wi.batchCalls(y.onSuccess)),y.onSettled&&(y.onSettled=wi.batchCalls(y.onSettled)),y.suspense&&(typeof y.staleTime!="number"&&(y.staleTime=1e3),y.cacheTime===0&&(y.cacheTime=1)),(y.suspense||y.useErrorBoundary)&&(d.isReset()||(y.retryOnMount=!1));var _=UC.default.useState(function(){return new t(i,y)}),k=_[0],T=k.getOptimisticResult(y);if(UC.default.useEffect(function(){n.current=!0,d.clearReset();var N=k.subscribe(wi.batchCalls(function(){n.current&&o(function(L){return L+1})}));return k.updateResult(),function(){n.current=!1,N()}},[d,k]),UC.default.useEffect(function(){k.setOptions(y,{listeners:!1})},[y,k]),y.suspense&&T.isLoading)throw k.fetchOptimistic(y).then(function(N){var L=N.data;y.onSuccess==null||y.onSuccess(L),y.onSettled==null||y.onSettled(L,null)}).catch(function(N){d.clearReset(),y.onError==null||y.onError(N),y.onSettled==null||y.onSettled(void 0,N)});if(T.isError&&!d.isReset()&&!T.isFetching&&nIe(y.suspense,y.useErrorBoundary,[T.error,k.getCurrentQuery()]))throw T.error;return y.notifyOnChangeProps==="tracked"&&(T=k.trackResult(T,y)),T}function Vn(e,t,n){var r=HC(e,t,n);return oIe(r,Kde)}var r9=V(ne());function Jk(e){return r9.default.createElement(r9.default.Fragment,null,r9.default.createElement("span",null,r9.default.createElement("button",{onClick:()=>{e.onNavigateToOntology&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)}},r9.default.createElement(Zp,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:e.colorFirst||"primary"},e.ontologyName?e.ontologyName.toUpperCase():"No ontology name available")),"\xA0",r9.default.createElement(sn,{type:"arrowRight"}),"\xA0",r9.default.createElement(Zp,{className:"breadcrumb",color:e.colorSecond||"success"},e.shortForm?e.shortForm.toUpperCase():"No short form available")))}function aIe(e){let{api:t,parameter:n,hasShortSelectedLabel:r,allowCustomTerms:o,selectionChangedEvent:i,preselected:d,placeholder:y,singleSelection:_,singleSuggestionRow:k,ts4nfdiGateway:T=!1,showApiSource:N=!0,...L}=e,Y=new $n(t),q=H_(),K=Ej(),[U,X]=(0,hs.useState)(""),[Z,fe]=(0,hs.useState)([]),[me,ye]=(0,hs.useState)([]),ge=(Me,Ve)=>{let{label:Ue,value:ht}=Me,yt=K.indexOf(ht.type==="class"?K[5]:ht.type==="individual"?K[3]:ht.type==="property"?K[1]:""),Rt=q[yt];if(o&&ht.iri=="")return Ue;let wt=ht.type==="ontology"?"Prefix: "+ht.ontology_name:"Prefix > Short form: "+ht.ontology_name+" > "+ht.short_form,_t=`Type: ${ht.type} Label: ${ht.label} @@ -550,16 +550,16 @@ Description: ${ht.description}`),N&&ht.source_url&&ht.source_url!==""&&(_t+=` Source: `+ht.source,_t+=` -Source URL: `+ht.source_url);let Nt=()=>hs.default.createElement(_H,{color:Mt},hs.default.createElement("span",null,hs.default.createElement(Y_,{search:Ve},ht.label),hs.default.createElement("br",null),ht.description)),Rt=()=>hs.default.createElement("span",{title:_t,style:{height:"200px"}},hs.default.createElement(_H,{color:Mt},hs.default.createElement("span",null,hs.default.createElement(Y_,{search:Ve},ht.label),"\xA0\xA0\xA0\xA0\xA0",hs.default.createElement(Jk,{ontologyName:ht.ontology_name,shortForm:ht.short_form,colorFirst:"primary",colorSecond:"success"}),hs.default.createElement(sn,{type:"iInCircle",style:{marginLeft:5},title:_t}),!k&&ht.description&&hs.default.createElement(hs.default.Fragment,null,hs.default.createElement("br",null),ht.description.substring(0,40)+"..."))));return ht.type==="ontology"?Nt():Rt()},{isLoading:ae}=Vn(["onMount",d],async()=>{let Me=[],Ve=[...new Set(d)].filter(Ue=>o&&Ue.label||Ue.iri);if(Ve.length>0){_&&(Ve=[Ve[0]]);for(let Ue of Ve)Ue&&Ue.iri&&Ue.iri.startsWith("http")?await Y.getSelectData({query:Ue.iri},void 0,void 0,n,T).then(ht=>{ht&&(ht.properties.map(yt=>{Ue.iri===yt.getIri()&&Me.push({label:r?yt.getLabel():Ne(yt),key:yt.getIri(),value:{iri:yt.getIri(),label:yt.getLabel(),ontology_name:yt.getOntologyId(),type:yt.getType(),short_form:yt.getShortForm(),description:yt.getDescription(),source:yt.getApiSourceName(),source_url:yt.getApiSourceEndpoint()}})}),_&&Me.length>1&&(Me=[Me[0]]))}):Ue&&Ue.label&&o&&Me.push({label:Ue.label,key:Ue.label,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:"",source_url:""}});fe(Me),ye(Me)}}),{isLoading:Pe}=Vn(["onSearchChange",U],async()=>{if(U.length>0)return Y.getSelectData({query:U},void 0,void 0,n,T).then(Me=>{Me&&fe(Me.properties.map(Ve=>({label:r?Ve.getLabel():Ne(Ve),key:Ve.getIri(),value:{iri:Ve.getIri(),label:Ve.getLabel(),ontology_name:Ve.getOntologyId(),type:Ve.getType(),short_form:Ve.getShortForm(),description:Ve.getDescription(),source:Ve.getApiSourceName(),source_url:Ve.getApiSourceEndpoint()}})))})});(0,hs.useEffect)(()=>{i(me.map(Me=>o&&Me.value.iri==""?{iri:"",label:Me.label,ontology_name:"",type:"",short_form:Me.value.short_form,description:Me.value.description,source:Me.value.source}:Me.value.iri==""?{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:""}:{iri:Me.value.iri,label:Me.value.label,ontology_name:Me.value.ontology_name,type:Me.value.type,short_form:Me.value.short_form,description:Me.value.description,source:Me.value.source}))},[me]);function Ne(Me){return Me.label+" ("+Me.ontology_name.toUpperCase()+" "+Me.short_form+")"}function Ye(Me){ye(Me)}function Je(Me){let Ve={label:Me,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:""}};fe([...Z,Ve]),ye(_?[Ve]:[...me,Ve])}return hs.default.createElement(Lk,{isClearable:!0,"aria-label":"searchBar",fullWidth:!0,...L,async:!0,isLoading:Pe||ae,singleSelection:_?{asPlainText:!0}:!1,placeholder:y||"Search for a Concept",options:Z,selectedOptions:me,onSearchChange:X,onChange:Ye,renderOption:ge,onCreateOption:o?Je:void 0,rowHeight:k?30:50})}function sIe(e,t,n){iIe.default.render(RHt(e),t,n)}function RHt(e){let t=new Cn;return hs.default.createElement(jn,{colorMode:"light"},hs.default.createElement(Tn,{client:t},hs.default.createElement(aIe,{api:e.api,parameter:e.parameter,selectionChangedEvent:e.selectionChangedEvent,preselected:e.preselected,singleSelection:e.singleSelection,placeholder:e.placeholder,hasShortSelectedLabel:e.hasShortSelectedLabel,allowCustomTerms:e.allowCustomTerms,ts4nfdiGateway:e.ts4nfdiGateway,singleSuggestionRow:e.singleSuggestionRow,showApiSource:e.showApiSource})))}var uc=V(ne());var lIe=V(Li());function uIe(e){let{api:t,parameter:n,...r}=e,o=new $n(t),{data:i,isLoading:d,isError:y,dataUpdatedAt:_}=Vn(["ontologiesData",t,n],async()=>o.getOntologiesData(e.parameter));return uc.default.createElement(uc.default.Fragment,null,uc.default.createElement(em,{title:"Data Content",description:_?`Updated ${new Date(_).toLocaleString()}`:"",layout:"horizontal"},uc.default.createElement(Wr,{...r},y&&uc.default.createElement(Wr,null,"No data content available"),d?uc.default.createElement(Pn,{size:"s"}):uc.default.createElement("ul",null,i?.getTotalOntologies()?uc.default.createElement("li",null,i?.getTotalOntologies().toLocaleString()," ontologies and terminologies"):uc.default.createElement("li",{style:{fontStyle:"italic"}},"ontology number not available"),i?.getNumClasses()?uc.default.createElement("li",null,i?.getNumClasses().toLocaleString()," terms"):uc.default.createElement("li",{style:{fontStyle:"italic"}},"term number not available"),i?.getNumProperties()?uc.default.createElement("li",null,i?.getNumProperties().toLocaleString()," properties"):uc.default.createElement("li",{style:{fontStyle:"italic"}},"property number not available"),i?.getNumIndividuals()?uc.default.createElement("li",null,i?.getNumIndividuals().toLocaleString()," individuals"):uc.default.createElement("li",{style:{fontStyle:"italic"}},"individual number not available")," "))))}function cIe(e,t,n){lIe.default.render(DHt(e),t,n)}function DHt(e){let t=new Cn;return uc.default.createElement(jn,{colorMode:"light"},uc.default.createElement(Tn,{client:t},uc.default.createElement(uIe,{api:e.api,parameter:e.parameter})))}var Lt=V(ne());var St=V(ne());var LH=!0;function eK(e){return St.default.createElement(uG,{type:"iInCircle",color:"subdued",content:e})}function zHt(e,t){let n=Object.keys(t).map(r=>{let o=e.getLinkedEntities().getLabelForIri(r)||r;return o?"*"+t[r]+" ("+o+")":""}).join(` -`);return eK(n)}function hh(e,t,n,r=LH,o){let i=t.getLabelForIri(n)||n.split("/").pop()||n,d=t.get(n),y=e.getOntologyId();if(e.getType()!=="ontology"&&n===e?.getIri())return St.default.createElement("span",{className:"highlight"},e.getLabel());if(!d)return n.startsWith("http")?St.default.createElement("a",{className:"clickable",href:n},i):St.default.createElement("span",null,i);let _=d.definedBy?d.definedBy.filter(T=>T!==y):[],k=d.type?NV(d.type):e.getType();return _.length===1?d.hasLocalDefinition?St.default.createElement(St.default.Fragment,null,St.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(y,k,{iri:n,label:i})}},i),r?St.default.createElement(St.default.Fragment,null,"\xA0",St.default.createElement("button",{className:"no-decoration",onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(_[0],k,{iri:n,label:i})}},St.default.createElement("span",{className:"ontology-badge"},_[0].toUpperCase()))):St.default.createElement(St.default.Fragment,null)):St.default.createElement(St.default.Fragment,null,St.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(_[0],k,{iri:n,label:i})}},i),r?St.default.createElement(St.default.Fragment,null,"\xA0",St.default.createElement("button",{className:"no-decoration",onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(_[0],k,{iri:n,label:i})}},St.default.createElement("span",{className:"ontology-badge"},_[0].toUpperCase()))):St.default.createElement(St.default.Fragment,null)):_.length>1?d.hasLocalDefinition?St.default.createElement(St.default.Fragment,null,St.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(y,k,{iri:n,label:i})}},i),r?St.default.createElement(St.default.Fragment,null,"\xA0",_.map(T=>St.default.createElement("button",{className:"no-decoration",key:xn(),onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(T,k,{iri:n,label:i})}},St.default.createElement("span",{className:"ontology-badge"},T.toUpperCase())))):St.default.createElement(St.default.Fragment,null)):St.default.createElement(St.default.Fragment,null,St.default.createElement("a",{className:"clickable",href:n},i),r?St.default.createElement(St.default.Fragment,null,"\xA0",St.default.createElement("button",{className:"no-decoration",key:xn(),onClick:()=>{o.onNavigateToDisambiguate&&o.onNavigateToDisambiguate(k,{iri:n,label:i})}},St.default.createElement("span",{className:"ontology-badge"},St.default.createElement(sn,{type:"search",size:"s"}),"\xA0",_.length,"\xA0","ontologies"))):St.default.createElement(St.default.Fragment,null)):d.hasLocalDefinition?St.default.createElement(St.default.Fragment,null,St.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(y,k,{iri:n,label:i})}},i)):parseInt(d.numAppearsIn)>0?St.default.createElement(St.default.Fragment,null,St.default.createElement("a",{className:"clickable",href:n},i),r?St.default.createElement(St.default.Fragment,null,"\xA0",St.default.createElement("button",{className:"no-decoration",key:xn(),onClick:()=>{o.onNavigateToDisambiguate&&o.onNavigateToDisambiguate(k,{iri:n,label:i})}},St.default.createElement("span",{className:"ontology-badge"},St.default.createElement(sn,{type:"search",size:"s"}),"\xA0",d.numAppearsIn,"\xA0",parseInt(d.numAppearsIn)>1?"ontologies":"ontology"))):St.default.createElement(St.default.Fragment,null)):St.default.createElement(St.default.Fragment,null,St.default.createElement("a",{className:"clickable",href:d.url||n},i))}function Ao(e,t,n,r=LH,o){let i=St.default.createElement(St.default.Fragment,null);if(t=t.mergeWith(n.linkedEntities),typeof n=="string")i=hh(e,t,n,r,o);else if(typeof n=="object"&&!Array.isArray(n)&&Array.isArray(n.type)&&n.type.indexOf("reification")!==-1)i=nm(e,Or.fromJson(n)[0],r,o);else{let d=n["http://www.w3.org/2002/07/owl#someValuesFrom"],y=n["http://www.w3.org/2002/07/owl#allValuesFrom"],_=or(n["http://www.w3.org/2002/07/owl#intersectionOf"]),k=or(n["http://www.w3.org/2002/07/owl#unionOf"]),T=n["http://www.w3.org/2002/07/owl#hasValue"],N=n["http://www.w3.org/2002/07/owl#minCardinality"]||n["http://www.w3.org/2002/07/owl#minQualifiedCardinality"],L=n["http://www.w3.org/2002/07/owl#maxCardinality"]||n["http://www.w3.org/2002/07/owl#maxQualifiedCardinality"],Y=n["http://www.w3.org/2002/07/owl#cardinality"]||n["http://www.w3.org/2002/07/owl#qualifiedCardinality"],q=n["http://www.w3.org/2002/07/owl#hasSelf"],K=n["http://www.w3.org/2002/07/owl#complementOf"],U=or(n["http://www.w3.org/2002/07/owl#oneOf"]),X=n["http://www.w3.org/2002/07/owl#inverseOf"],Z=n["http://www.w3.org/2002/07/owl#onProperty"],fe=n["http://www.w3.org/2002/07/owl#onDatatype"];if(fe){let me=[Ao(e,t,fe,r,o)],ye=or(n["http://www.w3.org/2002/07/owl#withRestrictions"]);if(ye.length>0){me.push(St.default.createElement(St.default.Fragment,null,"["));let ge=!0;for(let ae of ye){ge?ge=!1:me.push(St.default.createElement(St.default.Fragment,null,",\xA0"));let Pe=ae["http://www.w3.org/2001/XMLSchema#minExclusive"],Ne=ae["http://www.w3.org/2001/XMLSchema#minInclusive"],Ye=ae["http://www.w3.org/2001/XMLSchema#maxExclusive"],Je=ae["http://www.w3.org/2001/XMLSchema#maxInclusive"];Pe?me.push(St.default.createElement(St.default.Fragment,null,"> ",Pe)):Ne?me.push(St.default.createElement(St.default.Fragment,null,"\u2265 ",Ne)):Ye?me.push(St.default.createElement(St.default.Fragment,null,"< ",Ye)):Je&&me.push(St.default.createElement(St.default.Fragment,null,"\u2264 ",Je))}me.push(St.default.createElement(St.default.Fragment,null,"]"))}i=St.default.createElement(St.default.Fragment,null,me.map(ge=>St.default.createElement("span",{key:xn()},ge)))}else if(d)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," some "),Ao(e,t,or(d)[0],r,o));else if(y)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," only "),Ao(e,t,or(y)[0],r,o));else if(_.length>0){let me=[St.default.createElement("span",{key:xn(),className:"text-neutral-default"},"(")];for(let ye of _)me.length>1&&me.push(St.default.createElement("i",null," and ")),me.push(Ao(e,t,ye,r,o));me.push(St.default.createElement("span",{className:"text-neutral-default"},")")),i=St.default.createElement("span",null,me.map(ye=>St.default.createElement("span",{key:xn()},ye)))}else if(k.length>0){let me=[St.default.createElement("span",{key:xn(),className:"text-neutral-default"},"(")];for(let ye of k)me.length>1&&me.push(St.default.createElement("i",null," or ")),me.push(Ao(e,t,ye,r,o));me.push(St.default.createElement("span",{className:"text-neutral-default"},")")),i=St.default.createElement("span",null,me.map(ye=>St.default.createElement("span",{key:xn()},ye)))}else if(T)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," value "),Ao(e,t,or(T)[0],r,o));else if(N)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," min "),Ao(e,t,or(N)[0],r,o));else if(L)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," max "),Ao(e,t,or(L)[0],r,o));else if(Y)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," exactly "),Ao(e,t,or(Y)[0],r,o));else if(q)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," Self "),Ao(e,t,or(q)[0],r,o));else if(K)i=St.default.createElement(St.default.Fragment,null,St.default.createElement("i",null,"not "),Ao(e,t,or(K)[0],r,o));else if(U.length>0){let me=[St.default.createElement("span",{key:xn(),className:"text-neutral-default"},"{")];for(let ye of U)me.length>1&&me.push(St.default.createElement("span",{key:xn(),className:"text-neutral-default"},",\xA0")),me.push(Ao(e,t,ye,r,o));me.push(St.default.createElement("span",{className:"text-neutral-default"},"}")),i=St.default.createElement("span",null,me.map(ye=>St.default.createElement("span",{key:xn()},ye)))}else X&&(i=St.default.createElement(St.default.Fragment,null,St.default.createElement("i",{style:{color:"purple"}},"inverse "),St.default.createElement("span",{key:xn(),className:"text-neutral-default"},"("),Ao(e,t,X,r,o),St.default.createElement("span",{key:xn(),className:"text-neutral-default"},")")))}return i}function GC(e,t,n,r=LH,o){return St.default.createElement(St.default.Fragment,null,n.length===1?St.default.createElement("p",null,Ao(e,e.getLinkedEntities(),n[0],r,o)):St.default.createElement("ul",null,n.map(i=>St.default.createElement("li",{key:xn()},Ao(e,e.getLinkedEntities(),i,r,o)))))}function fIe(e,t,n,r=LH,o){let i=[];if(n)for(let k of Object.keys(n.linkedEntities))for(let T=t.indexOf(k,0);T!==-1;T=t.indexOf(k,T))i.push({start:T,end:T+k.length,link:hh(e,n,k,r,o)}),T+=k.length;let d=/[A-z]+:\/\/[^\s]+/g;for(let k=d.exec(t);k;k=d.exec(t)){let T=k[0];i.push({start:k.index,end:k.index+T.length,link:St.default.createElement("span",{key:xn()},St.default.createElement("a",{className:"clickable",href:T},T))})}i.sort((k,T)=>k.start-T.start);e:for(let k=0;k=L.start&&L.end>=N.start){N.end-N.startY.getEntityObject(n,i,r,d,_));function fe(Me){return Lt.default.createElement(Lt.default.Fragment,null,Me.getLabel()&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Label:"),Me.getLabel()),Lt.default.createElement(pl,null)))}function me(Me){return Lt.default.createElement(Lt.default.Fragment,null,Me.getSynonyms().length>0&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Synonyms:"),Me.getSynonyms().length>1?Lt.default.createElement("ul",null,Me.getSynonyms().map(Ve=>Lt.default.createElement("li",{key:xn(),id:Ve.value},nm(Me,Ve,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Lt.default.createElement("p",null,nm(Me,Me.getSynonyms()[0],y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function ye(Me){let Ve=Me.getHasKey();return Lt.default.createElement(Lt.default.Fragment,null,Ve.length>0&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Has Key:"),Ve.length>1?Lt.default.createElement("ul",null,Ve.map(Ue=>Lt.default.createElement("li",{key:xn()},Ao(Me,Me.getLinkedEntities(),Ue,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Lt.default.createElement("p",null,Ao(Me,Me.getLinkedEntities(),Ve[0],y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function ge(Me){return Lt.default.createElement(Lt.default.Fragment,null,Me.getSubsets().length>0&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"In Subsets:"),Me.getSubsets().length>1?Lt.default.createElement("ul",null,Me.getSubsets().map(Ve=>Lt.default.createElement("li",{key:xn(),id:Ve+xn()},hh(Me,Me.getLinkedEntities(),Ve,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Lt.default.createElement("p",null,hh(Me,Me.getLinkedEntities(),Me.getSubsets()[0],y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function ae(Me){let Ve=Me.getRdfTypes().map(Ue=>({"http://www.w3.org/2002/07/owl#FunctionalProperty":"Functional","http://www.w3.org/2002/07/owl#InverseFunctionalProperty":"Inverse Functional","http://www.w3.org/2002/07/owl#TransitiveProperty":"Transitive","http://www.w3.org/2002/07/owl#SymmetricProperty":"Symmetric","http://www.w3.org/2002/07/owl#AsymmetricProperty":"Asymmetric","http://www.w3.org/2002/07/owl#ReflexiveProperty":"Reflexive","http://www.w3.org/2002/07/owl#IrreflexiveProperty":"Irreflexive"})[Ue]).filter(Ue=>!!Ue);return Lt.default.createElement(Lt.default.Fragment,null,Ve.length>0&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Characteristics:"),Ve.length>1?Lt.default.createElement("ul",null,Ve.map(Ue=>Lt.default.createElement("li",{key:xn()},Ue)).sort()):Lt.default.createElement("p",null,Ve[0]))))}function Pe(Me){let Ve=Me.getDomain();return Lt.default.createElement(Lt.default.Fragment,null,Ve.length>0&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Domain:"),Ve.length>1?Lt.default.createElement("ul",null,Ve.map(Ue=>Lt.default.createElement("li",{key:xn()},Ao(Me,Me.getLinkedEntities(),Ue,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Lt.default.createElement("p",null,Ao(Me,Me.getLinkedEntities(),Ve[0],y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function Ne(Me){let Ve=Me.getRange();return Lt.default.createElement(Lt.default.Fragment,null,Ve.length>0&&Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Range:"),Ve.length>1?Lt.default.createElement("ul",null,Ve.map(Ue=>Lt.default.createElement("li",{key:xn()},Ao(Me,Me.getLinkedEntities(),Ue,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Lt.default.createElement("p",null,Ao(Me,Me.getLinkedEntities(),Ve[0],y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}function Ye(Me){let Ve=Object.keys(Me.properties),Ue=Ve.filter(wt=>wt.startsWith("negativePropertyAssertion+")),ht=Ve.filter(wt=>Me.getLinkedEntities().get(wt)&&Me.getLinkedEntities().get(wt)?.type.indexOf("objectProperty")!==-1),yt=Ve.filter(wt=>Me.getLinkedEntities().get(wt)&&Me.getLinkedEntities().get(wt)?.type.indexOf("dataProperty")!==-1),Mt=[];for(let wt of ht){let _t=or(Me.properties[wt]);for(let Nt of _t)Mt.push(Lt.default.createElement(Lt.default.Fragment,null,Ao(Me,Me.getLinkedEntities(),wt,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),typeof Nt=="string"&&Nt.includes("http")?Lt.default.createElement(Lt.default.Fragment,null,"\xA0",Lt.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",hh(Me,Me.getLinkedEntities(),Nt,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):eK(typeof Nt=="string"?Nt:typeof Nt=="object"&&!Array.isArray(Nt)&&Nt.value?JSON.stringify(Nt.value):JSON.stringify(Nt))))}for(let wt of yt){let _t=or(Me.properties[wt]);for(let Nt of _t)Mt.push(Lt.default.createElement(Lt.default.Fragment,null,Ao(Me,Me.getLinkedEntities(),wt,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),Lt.default.createElement(Lt.default.Fragment,null,"\xA0",Lt.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",hh(Me,Me.getLinkedEntities(),Nt,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}for(let wt of Ue){let _t=wt.slice(26),Nt=Me.getLinkedEntities().get(_t),Rt=Nt?.type.indexOf("dataProperty")!==-1,sr=Nt?.type.indexOf("objectProperty")!==-1,Pt=or(Me.properties[wt]);for(let Sr of Pt)Mt.push(Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement("i",{style:{color:"purple"}},"not")," ",Ao(Me,Me.getLinkedEntities(),_t,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),typeof Sr=="string"&&Sr.includes("http")?Lt.default.createElement(Lt.default.Fragment,null,"\xA0",Lt.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",hh(Me,Me.getLinkedEntities(),Sr,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):sr?eK(typeof Sr=="string"?Sr:typeof Sr=="object"&&!Array.isArray(Sr)&&Sr.value?JSON.stringify(Sr.value):JSON.stringify(Sr)):Rt?Lt.default.createElement(Lt.default.Fragment,null,"\xA0",Lt.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",hh(Me,Me.getLinkedEntities(),Sr,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):Lt.default.createElement(Lt.default.Fragment,null)))}return Lt.default.createElement(Lt.default.Fragment,null,Mt.length>0&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Property assertions:"),Mt.length>1?Lt.default.createElement("ul",null,Mt.map(wt=>Lt.default.createElement("li",{key:xn()},wt)).sort()):Lt.default.createElement("p",null,Mt[0]))))}function Je(Me){return Lt.default.createElement(Lt.default.Fragment,null,Me.getAnnotationPredicates().map(Ve=>{let Ue=Me.getAnnotationById(Ve);return Ue.length==0?Lt.default.createElement(Lt.default.Fragment,null):Lt.default.createElement(Rr,{grow:!1,key:Ve},Lt.default.createElement("b",null,E3(sj(aj(Me.getAnnotationTitleById(Ve)))),":"),Ue.length>1?Lt.default.createElement("ul",null,Ue.map(ht=>Lt.default.createElement("li",{key:xn(),id:ht.value},nm(Me,ht,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Lt.default.createElement("p",{key:xn()},nm(Me,Ue[0],y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}))}return Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(em,{title:o?(i?E3(AV(i)):U&&q?E3(q.getType()):"")+" Information":"",layout:"horizontal"},K&&Lt.default.createElement(Pn,{size:"s"}),U&&q!==void 0&&Lt.default.createElement(Wr,{...L},fe(q),me(q),ok(q)&&Lt.default.createElement(Lt.default.Fragment,null,ge(q),ye(q)),mE(q)&&Lt.default.createElement(Lt.default.Fragment,null,ae(q),Pe(q),Ne(q)),ij(q)&&Lt.default.createElement(Lt.default.Fragment,null,Ye(q)),Je(q)),X&&Lt.default.createElement(Wr,null,Ma(Z,"information"))))}function hIe(e,t,n){pIe.default.render(LHt(e),t,n)}function LHt(e){let t=new Cn;return Lt.default.createElement(jn,{colorMode:"light"},Lt.default.createElement(Tn,{client:t},Lt.default.createElement(dIe,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var FH=V(ne());var mIe=V(Li());function vIe(e){let{apiQuery:t,buttonText:n,buttonSize:r}=e;return FH.default.createElement(yk,{href:t,target:"_blank",size:r||"m"},n)}function gIe(e,t,n){mIe.default.render(FHt(e),t,n)}function FHt(e){let t=new Cn;return FH.default.createElement(jn,{colorMode:"light"},FH.default.createElement(Tn,{client:t},FH.default.createElement(vIe,{apiQuery:e.apiQuery,buttonText:e.buttonText,buttonSize:e.buttonSize})))}var mh=V(ne());var yIe=V(Li());function tK(e){let{api:t,ontologyId:n,iri:r,entityType:o,colorFirst:i,colorSecond:d,parameter:y,useLegacy:_,onNavigateToOntology:k}=e,T=new $n(t),{data:N,isLoading:L,isSuccess:Y,isError:q,error:K}=Vn(["breadcrumb",t,y,o,r,n,_],async()=>await T.getEntityObject(r,o,n,y,_));return mh.default.createElement(mh.default.Fragment,null,L&&mh.default.createElement("span",null,mh.default.createElement("button",{onClick:()=>{e.onNavigateToOntology&&e.ontologyId&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)}},mh.default.createElement(Zp,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:i||(e.ontologyId?"primary":"warning")},e.ontologyId?.toUpperCase()||mh.default.createElement(Pn,{size:"s"}))),"\xA0",mh.default.createElement(sn,{type:"arrowRight"}),"\xA0",mh.default.createElement(Zp,{className:"breadcrumb",color:d||"warning"},mh.default.createElement(Pn,{size:"s"}))),Y&&N&&By(N)&&mh.default.createElement(Jk,{ontologyName:N.getOntologyId(),shortForm:N.getShortForm(),ontologyId:n||N.getOntologyId(),colorFirst:i,colorSecond:d,onNavigateToOntology:k}),q&&mh.default.createElement(Jk,{ontologyName:e.ontologyId?.toUpperCase()||N&&N.getOntologyId().toUpperCase()||Ma(K,"ontology"),shortForm:N&&N.getShortForm()?N.getShortForm().toUpperCase():"",ontologyId:n||(N?N.getOntologyId():""),colorFirst:i||(e.ontologyId||N&&N.getOntologyId()?"primary":"danger"),colorSecond:d||(N&&N.getShortForm()?"success":"danger"),onNavigateToOntology:k}))}function bIe(e,t,n){yIe.default.render(BHt(e),t,n)}function BHt(e){let t=new Cn;return mh.default.createElement(jn,{colorMode:"light"},mh.default.createElement(Tn,{client:t},mh.default.createElement(tK,{api:e.api,entityType:e.entityType,iri:e.iri,ontologyId:e.ontologyId,colorFirst:e.colorFirst,colorSecond:e.colorSecond,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var t7=V(ne());var rK=V(ne());function nK(e){let{descText:t,description:n,...r}=e;return rK.default.createElement(rK.default.Fragment,null,rK.default.createElement(Wr,{...r},t||n))}var wIe=V(Li()),WHt="No description available.";function oK(e){let{api:t,ontologyId:n,iri:r,descText:o,thingType:i,parameter:d,useLegacy:y,..._}=e,k=new $n(t),{data:T,isLoading:N,isSuccess:L,isError:Y,error:q}=Vn(["description",t,d,i,r,n,y],async()=>k.getThingObject(r,i,n,d,y));return t7.default.createElement(t7.default.Fragment,null,N&&t7.default.createElement(Pn,{size:"s"}),L&&T&&t7.default.createElement(nK,{description:T.getDescription()||WHt,descText:o,..._}),Y&&t7.default.createElement(Wr,null,Ma(q,"description")))}function OIe(e,t,n){wIe.default.render(HHt(e),t,n)}function HHt(e){let t=new Cn;return t7.default.createElement(jn,{colorMode:"light"},t7.default.createElement(Tn,{client:t},t7.default.createElement(oK,{api:e.api,ontologyId:e.ontologyId,iri:e.iri,descText:e.descText,thingType:e.thingType,parameter:e.parameter,color:e.color,useLegacy:e.useLegacy})))}var eb=V(ne());var xIe=V(Li());function JC(e){let{iri:t,iriText:n,color:r,externalIcon:o,urlPrefix:i,copyButton:d}=e,[y,_]=(0,eb.useState)(!1),T=typeof i<"u"&&i!==""?i+encodeURIComponent(t):t,N=()=>y?eb.default.createElement(K0,{style:{marginLeft:"5px",color:r&&(RV(r)||DV(r))?r:""},display:"base",iconType:"check",key:"copy-btn",color:r&&zV(r)?r:void 0}):eb.default.createElement(K0,{display:"base",iconType:"copy",key:"copy-btn",style:{marginLeft:"5px",color:r&&(RV(r)||DV(r))?r:""},color:r&&zV(r)?r:void 0,onClick:()=>{navigator.clipboard.writeText(T),_(!0),setTimeout(()=>{_(!1)},2e3)}});return eb.default.createElement(Rr,{grow:!1},eb.default.createElement("div",null,eb.default.createElement(U_,{href:T,target:"_blank",style:{color:r&&(RV(r)||DV(r))?r:""},color:r&&zV(r)?r:void 0,external:o},n||t),d&&eb.default.createElement(N,null)))}function _Ie(e,t,n){xIe.default.render($Ht(e),t,n)}function $Ht(e){let t=new Cn;return eb.default.createElement(jn,{colorMode:"light"},eb.default.createElement(Tn,{client:t},eb.default.createElement(JC,{iri:e.iri,iriText:e.iriText,color:e.color,externalIcon:e.externalIcon,urlPrefix:e.urlPrefix,copyButton:e.copyButton})))}var J3=V(ne());var im=V(ne());var n9=V(ne());(()=>{var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,o=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty,d=(h,w)=>()=>(h&&(w=h(h=0)),w),y=(h,w)=>()=>(w||h((w={exports:{}}).exports,w),w.exports),_=(h,w)=>{for(var S in w)t(h,S,{get:w[S],enumerable:!0})},k=(h,w,S,C)=>{if(w&&typeof w=="object"||typeof w=="function")for(let R of r(w))!i.call(h,R)&&R!==S&&t(h,R,{get:()=>w[R],enumerable:!(C=n(w,R))||C.enumerable});return h},T=(h,w,S)=>(S=h!=null?e(o(h)):{},k(w||!h||!h.__esModule?t(S,"default",{value:h,enumerable:!0}):S,h)),N=h=>k(t({},"__esModule",{value:!0}),h),L=y((h,w)=>{"use strict";var S=Object.getOwnPropertySymbols,C=Object.prototype.hasOwnProperty,R=Object.prototype.propertyIsEnumerable;function G(re){if(re==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(re)}function te(){try{if(!Object.assign)return!1;var re=new String("abc");if(re[5]="de",Object.getOwnPropertyNames(re)[0]==="5")return!1;for(var ue={},se=0;se<10;se++)ue["_"+String.fromCharCode(se)]=se;var he=Object.getOwnPropertyNames(ue).map(function(Ie){return ue[Ie]});if(he.join("")!=="0123456789")return!1;var _e={};return"abcdefghijklmnopqrst".split("").forEach(function(Ie){_e[Ie]=Ie}),Object.keys(Object.assign({},_e)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}w.exports=te()?Object.assign:function(re,ue){for(var se,he=G(re),_e,Ie=1;Ie{"use strict";var w=L(),S=60103,C=60106;h.Fragment=60107,h.StrictMode=60108,h.Profiler=60114;var R=60109,G=60110,te=60112;h.Suspense=60113;var re=60115,ue=60116;typeof Symbol=="function"&&Symbol.for&&(se=Symbol.for,S=se("react.element"),C=se("react.portal"),h.Fragment=se("react.fragment"),h.StrictMode=se("react.strict_mode"),h.Profiler=se("react.profiler"),R=se("react.provider"),G=se("react.context"),te=se("react.forward_ref"),h.Suspense=se("react.suspense"),re=se("react.memo"),ue=se("react.lazy"));var se,he=typeof Symbol=="function"&&Symbol.iterator;function _e(at){return at===null||typeof at!="object"?null:(at=he&&at[he]||at["@@iterator"],typeof at=="function"?at:null)}function Ie(at){for(var Bt="https://reactjs.org/docs/error-decoder.html?invariant="+at,pn=1;pn{"use strict";w.exports=Y()}),K=y(h=>{"use strict";var w,S,C,R;typeof performance=="object"&&typeof performance.now=="function"?(G=performance,h.unstable_now=function(){return G.now()}):(te=Date,re=te.now(),h.unstable_now=function(){return te.now()-re});var G,te,re;typeof window>"u"||typeof MessageChannel!="function"?(ue=null,se=null,he=function(){if(ue!==null)try{var Dt=h.unstable_now();ue(!0,Dt),ue=null}catch(Gt){throw setTimeout(he,0),Gt}},w=function(Dt){ue!==null?setTimeout(w,0,Dt):(ue=Dt,setTimeout(he,0))},S=function(Dt,Gt){se=setTimeout(Dt,Gt)},C=function(){clearTimeout(se)},h.unstable_shouldYield=function(){return!1},R=h.unstable_forceFrameRate=function(){}):(_e=window.setTimeout,Ie=window.clearTimeout,typeof console<"u"&&(Ce=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof Ce!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),ke=!1,ze=null,Le=-1,Te=5,lt=0,h.unstable_shouldYield=function(){return h.unstable_now()>=lt},R=function(){},h.unstable_forceFrameRate=function(Dt){0>Dt||125>>1,nn=Dt[pr];if(nn!==void 0&&0De(_o,fr))jo!==void 0&&0>De(jo,_o)?(Dt[pr]=jo,Dt[Kr]=fr,pr=Kr):(Dt[pr]=_o,Dt[dn]=fr,pr=dn);else if(jo!==void 0&&0>De(jo,fr))Dt[pr]=jo,Dt[Kr]=fr,pr=Kr;else break e}}return Gt}return null}function De(Dt,Gt){var fr=Dt.sortIndex-Gt.sortIndex;return fr!==0?fr:Dt.id-Gt.id}var Ze=[],ct=[],gt=1,Et=null,zt=3,Yt=!1,Tr=!1,_r=!1;function Zr(Dt){for(var Gt=Ke(ct);Gt!==null;){if(Gt.callback===null)st(ct);else if(Gt.startTime<=Dt)st(ct),Gt.sortIndex=Gt.expirationTime,it(Ze,Gt);else break;Gt=Ke(ct)}}function at(Dt){if(_r=!1,Zr(Dt),!Tr)if(Ke(Ze)!==null)Tr=!0,w(Bt);else{var Gt=Ke(ct);Gt!==null&&S(at,Gt.startTime-Dt)}}function Bt(Dt,Gt){Tr=!1,_r&&(_r=!1,C()),Yt=!0;var fr=zt;try{for(Zr(Gt),Et=Ke(Ze);Et!==null&&(!(Et.expirationTime>Gt)||Dt&&!h.unstable_shouldYield());){var pr=Et.callback;if(typeof pr=="function"){Et.callback=null,zt=Et.priorityLevel;var nn=pr(Et.expirationTime<=Gt);Gt=h.unstable_now(),typeof nn=="function"?Et.callback=nn:Et===Ke(Ze)&&st(Ze),Zr(Gt)}else st(Ze);Et=Ke(Ze)}if(Et!==null)var dn=!0;else{var _o=Ke(ct);_o!==null&&S(at,_o.startTime-Gt),dn=!1}return dn}finally{Et=null,zt=fr,Yt=!1}}var pn=R;h.unstable_IdlePriority=5,h.unstable_ImmediatePriority=1,h.unstable_LowPriority=4,h.unstable_NormalPriority=3,h.unstable_Profiling=null,h.unstable_UserBlockingPriority=2,h.unstable_cancelCallback=function(Dt){Dt.callback=null},h.unstable_continueExecution=function(){Tr||Yt||(Tr=!0,w(Bt))},h.unstable_getCurrentPriorityLevel=function(){return zt},h.unstable_getFirstCallbackNode=function(){return Ke(Ze)},h.unstable_next=function(Dt){switch(zt){case 1:case 2:case 3:var Gt=3;break;default:Gt=zt}var fr=zt;zt=Gt;try{return Dt()}finally{zt=fr}},h.unstable_pauseExecution=function(){},h.unstable_requestPaint=pn,h.unstable_runWithPriority=function(Dt,Gt){switch(Dt){case 1:case 2:case 3:case 4:case 5:break;default:Dt=3}var fr=zt;zt=Dt;try{return Gt()}finally{zt=fr}},h.unstable_scheduleCallback=function(Dt,Gt,fr){var pr=h.unstable_now();switch(typeof fr=="object"&&fr!==null?(fr=fr.delay,fr=typeof fr=="number"&&0pr?(Dt.sortIndex=fr,it(ct,Dt),Ke(Ze)===null&&Dt===Ke(ct)&&(_r?C():_r=!0,S(at,fr-pr))):(Dt.sortIndex=nn,it(Ze,Dt),Tr||Yt||(Tr=!0,w(Bt))),Dt},h.unstable_wrapCallback=function(Dt){var Gt=zt;return function(){var fr=zt;zt=Gt;try{return Dt.apply(this,arguments)}finally{zt=fr}}}}),U=y((h,w)=>{"use strict";w.exports=K()}),X=y(h=>{"use strict";var w=q(),S=L(),C=U();function R(a){for(var u="https://reactjs.org/docs/error-decoder.html?invariant="+a,p=1;p"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),he=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,_e=Object.prototype.hasOwnProperty,Ie={},Ce={};function ke(a){return _e.call(Ce,a)?!0:_e.call(Ie,a)?!1:he.test(a)?Ce[a]=!0:(Ie[a]=!0,!1)}function ze(a,u,p,O){if(p!==null&&p.type===0)return!1;switch(typeof u){case"function":case"symbol":return!0;case"boolean":return O?!1:p!==null?!p.acceptsBooleans:(a=a.toLowerCase().slice(0,5),a!=="data-"&&a!=="aria-");default:return!1}}function Le(a,u,p,O){if(u===null||typeof u>"u"||ze(a,u,p,O))return!0;if(O)return!1;if(p!==null)switch(p.type){case 3:return!u;case 4:return u===!1;case 5:return isNaN(u);case 6:return isNaN(u)||1>u}return!1}function Te(a,u,p,O,P,z,H){this.acceptsBooleans=u===2||u===3||u===4,this.attributeName=O,this.attributeNamespace=P,this.mustUseProperty=p,this.propertyName=a,this.type=u,this.sanitizeURL=z,this.removeEmptyString=H}var lt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){lt[a]=new Te(a,0,!1,a,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var u=a[0];lt[u]=new Te(u,1,!1,a[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(a){lt[a]=new Te(a,2,!1,a.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(a){lt[a]=new Te(a,2,!1,a,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){lt[a]=new Te(a,3,!1,a.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(a){lt[a]=new Te(a,3,!0,a,null,!1,!1)}),["capture","download"].forEach(function(a){lt[a]=new Te(a,4,!1,a,null,!1,!1)}),["cols","rows","size","span"].forEach(function(a){lt[a]=new Te(a,6,!1,a,null,!1,!1)}),["rowSpan","start"].forEach(function(a){lt[a]=new Te(a,5,!1,a.toLowerCase(),null,!1,!1)});var dt=/[\-:]([a-z])/g;function tt(a){return a[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var u=a.replace(dt,tt);lt[u]=new Te(u,1,!1,a,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var u=a.replace(dt,tt);lt[u]=new Te(u,1,!1,a,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(a){var u=a.replace(dt,tt);lt[u]=new Te(u,1,!1,a,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(a){lt[a]=new Te(a,1,!1,a.toLowerCase(),null,!1,!1)}),lt.xlinkHref=new Te("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(a){lt[a]=new Te(a,1,!1,a.toLowerCase(),null,!0,!0)});function it(a,u,p,O){var P=lt.hasOwnProperty(u)?lt[u]:null,z=P!==null?P.type===0:O?!1:!(!(2hs.default.createElement(_H,{color:Rt},hs.default.createElement("span",null,hs.default.createElement(Y_,{search:Ve},ht.label),hs.default.createElement("br",null),ht.description)),At=()=>hs.default.createElement("span",{title:_t,style:{height:"200px"}},hs.default.createElement(_H,{color:Rt},hs.default.createElement("span",null,hs.default.createElement(Y_,{search:Ve},ht.label),"\xA0\xA0\xA0\xA0\xA0",hs.default.createElement(Jk,{ontologyName:ht.ontology_name,shortForm:ht.short_form,colorFirst:"primary",colorSecond:"success"}),hs.default.createElement(sn,{type:"iInCircle",style:{marginLeft:5},title:_t}),!k&&ht.description&&hs.default.createElement(hs.default.Fragment,null,hs.default.createElement("br",null),ht.description.substring(0,40)+"..."))));return ht.type==="ontology"?Nt():At()},{isLoading:ae}=Vn(["onMount",d],async()=>{let Me=[],Ve=[...new Set(d)].filter(Ue=>o&&Ue.label||Ue.iri);if(Ve.length>0){_&&(Ve=[Ve[0]]);for(let Ue of Ve)Ue&&Ue.iri&&Ue.iri.startsWith("http")?await Y.getSelectData({query:Ue.iri},void 0,void 0,n,T).then(ht=>{ht&&(ht.properties.map(yt=>{Ue.iri===yt.getIri()&&Me.push({label:r?yt.getLabel():Ne(yt),key:yt.getIri(),value:{iri:yt.getIri(),label:yt.getLabel(),ontology_name:yt.getOntologyId(),type:yt.getType(),short_form:yt.getShortForm(),description:yt.getDescription(),source:yt.getApiSourceName(),source_url:yt.getApiSourceEndpoint()}})}),_&&Me.length>1&&(Me=[Me[0]]))}):Ue&&Ue.label&&o&&Me.push({label:Ue.label,key:Ue.label,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:"",source_url:""}});fe(Me),ye(Me)}}),{isLoading:Pe}=Vn(["onSearchChange",U],async()=>{if(U.length>0)return Y.getSelectData({query:U},void 0,void 0,n,T).then(Me=>{Me&&fe(Me.properties.map(Ve=>({label:r?Ve.getLabel():Ne(Ve),key:Ve.getIri(),value:{iri:Ve.getIri(),label:Ve.getLabel(),ontology_name:Ve.getOntologyId(),type:Ve.getType(),short_form:Ve.getShortForm(),description:Ve.getDescription(),source:Ve.getApiSourceName(),source_url:Ve.getApiSourceEndpoint()}})))})});(0,hs.useEffect)(()=>{i(me.map(Me=>o&&Me.value.iri==""?{iri:"",label:Me.label,ontology_name:"",type:"",short_form:Me.value.short_form,description:Me.value.description,source:Me.value.source}:Me.value.iri==""?{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:""}:{iri:Me.value.iri,label:Me.value.label,ontology_name:Me.value.ontology_name,type:Me.value.type,short_form:Me.value.short_form,description:Me.value.description,source:Me.value.source}))},[me]);function Ne(Me){return Me.label+" ("+Me.ontology_name.toUpperCase()+" "+Me.short_form+")"}function Ye(Me){ye(Me)}function Je(Me){let Ve={label:Me,value:{iri:"",label:"",ontology_name:"",type:"",short_form:"",description:"",source:""}};fe([...Z,Ve]),ye(_?[Ve]:[...me,Ve])}return hs.default.createElement(Lk,{isClearable:!0,"aria-label":"searchBar",fullWidth:!0,...L,async:!0,isLoading:Pe||ae,singleSelection:_?{asPlainText:!0}:!1,placeholder:y||"Search for a Concept",options:Z,selectedOptions:me,onSearchChange:X,onChange:Ye,renderOption:ge,onCreateOption:o?Je:void 0,rowHeight:k?30:50})}function sIe(e,t,n){iIe.default.render(RHt(e),t,n)}function RHt(e){let t=new Cn;return hs.default.createElement(jn,{colorMode:"light"},hs.default.createElement(Tn,{client:t},hs.default.createElement(aIe,{api:e.api,parameter:e.parameter,selectionChangedEvent:e.selectionChangedEvent,preselected:e.preselected,singleSelection:e.singleSelection,placeholder:e.placeholder,hasShortSelectedLabel:e.hasShortSelectedLabel,allowCustomTerms:e.allowCustomTerms,ts4nfdiGateway:e.ts4nfdiGateway,singleSuggestionRow:e.singleSuggestionRow,showApiSource:e.showApiSource})))}var uc=V(ne());var lIe=V(Li());function uIe(e){let{api:t,parameter:n,...r}=e,o=new $n(t),{data:i,isLoading:d,isError:y,dataUpdatedAt:_}=Vn(["ontologiesData",t,n],async()=>o.getOntologiesData(e.parameter));return uc.default.createElement(uc.default.Fragment,null,uc.default.createElement(em,{title:"Data Content",description:_?`Updated ${new Date(_).toLocaleString()}`:"",layout:"horizontal"},uc.default.createElement(Wr,{...r},y&&uc.default.createElement(Wr,null,"No data content available"),d?uc.default.createElement(Pn,{size:"s"}):uc.default.createElement("ul",null,i?.getTotalOntologies()?uc.default.createElement("li",null,i?.getTotalOntologies().toLocaleString()," ontologies and terminologies"):uc.default.createElement("li",{style:{fontStyle:"italic"}},"ontology number not available"),i?.getNumClasses()?uc.default.createElement("li",null,i?.getNumClasses().toLocaleString()," terms"):uc.default.createElement("li",{style:{fontStyle:"italic"}},"term number not available"),i?.getNumProperties()?uc.default.createElement("li",null,i?.getNumProperties().toLocaleString()," properties"):uc.default.createElement("li",{style:{fontStyle:"italic"}},"property number not available"),i?.getNumIndividuals()?uc.default.createElement("li",null,i?.getNumIndividuals().toLocaleString()," individuals"):uc.default.createElement("li",{style:{fontStyle:"italic"}},"individual number not available")," "))))}function cIe(e,t,n){lIe.default.render(DHt(e),t,n)}function DHt(e){let t=new Cn;return uc.default.createElement(jn,{colorMode:"light"},uc.default.createElement(Tn,{client:t},uc.default.createElement(uIe,{api:e.api,parameter:e.parameter})))}var Lt=V(ne());var St=V(ne());var LH=!0;function eK(e){return St.default.createElement(uG,{type:"iInCircle",color:"subdued",content:e})}function zHt(e,t){let n=Object.keys(t).map(r=>{let o=e.getLinkedEntities().getLabelForIri(r)||r;return o?"*"+t[r]+" ("+o+")":""}).join(` +`);return eK(n)}function hh(e,t,n,r=LH,o){let i=t.getLabelForIri(n)||n.split("/").pop()||n,d=t.get(n),y=e.getOntologyId();if(e.getType()!=="ontology"&&n===e?.getIri())return St.default.createElement("span",{className:"highlight"},e.getLabel());if(!d)return n.startsWith("http")?St.default.createElement("a",{className:"clickable",href:n},i):St.default.createElement("span",null,i);let _=d.definedBy?d.definedBy.filter(T=>T!==y):[],k=d.type?NV(d.type):e.getType();return _.length===1?d.hasLocalDefinition?St.default.createElement(St.default.Fragment,null,St.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(y,k,{iri:n,label:i})}},i),r?St.default.createElement(St.default.Fragment,null,"\xA0",St.default.createElement("button",{className:"no-decoration",onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(_[0],k,{iri:n,label:i})}},St.default.createElement("span",{className:"ontology-badge"},_[0].toUpperCase()))):St.default.createElement(St.default.Fragment,null)):St.default.createElement(St.default.Fragment,null,St.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(_[0],k,{iri:n,label:i})}},i),r?St.default.createElement(St.default.Fragment,null,"\xA0",St.default.createElement("button",{className:"no-decoration",onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(_[0],k,{iri:n,label:i})}},St.default.createElement("span",{className:"ontology-badge"},_[0].toUpperCase()))):St.default.createElement(St.default.Fragment,null)):_.length>1?d.hasLocalDefinition?St.default.createElement(St.default.Fragment,null,St.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(y,k,{iri:n,label:i})}},i),r?St.default.createElement(St.default.Fragment,null,"\xA0",_.map(T=>St.default.createElement("button",{className:"no-decoration",key:xn(),onClick:()=>{o.onNavigateToOntology&&o.onNavigateToOntology(T,k,{iri:n,label:i})}},St.default.createElement("span",{className:"ontology-badge"},T.toUpperCase())))):St.default.createElement(St.default.Fragment,null)):St.default.createElement(St.default.Fragment,null,St.default.createElement("a",{className:"clickable",href:n},i),r?St.default.createElement(St.default.Fragment,null,"\xA0",St.default.createElement("button",{className:"no-decoration",key:xn(),onClick:()=>{o.onNavigateToDisambiguate&&o.onNavigateToDisambiguate(k,{iri:n,label:i})}},St.default.createElement("span",{className:"ontology-badge"},St.default.createElement(sn,{type:"search",size:"s"}),"\xA0",_.length,"\xA0","ontologies"))):St.default.createElement(St.default.Fragment,null)):d.hasLocalDefinition?St.default.createElement(St.default.Fragment,null,St.default.createElement("button",{className:"clickable",onClick:()=>{o.onNavigateToEntity&&o.onNavigateToEntity(y,k,{iri:n,label:i})}},i)):parseInt(d.numAppearsIn)>0?St.default.createElement(St.default.Fragment,null,St.default.createElement("a",{className:"clickable",href:n},i),r?St.default.createElement(St.default.Fragment,null,"\xA0",St.default.createElement("button",{className:"no-decoration",key:xn(),onClick:()=>{o.onNavigateToDisambiguate&&o.onNavigateToDisambiguate(k,{iri:n,label:i})}},St.default.createElement("span",{className:"ontology-badge"},St.default.createElement(sn,{type:"search",size:"s"}),"\xA0",d.numAppearsIn,"\xA0",parseInt(d.numAppearsIn)>1?"ontologies":"ontology"))):St.default.createElement(St.default.Fragment,null)):St.default.createElement(St.default.Fragment,null,St.default.createElement("a",{className:"clickable",href:d.url||n},i))}function Ao(e,t,n,r=LH,o){let i=St.default.createElement(St.default.Fragment,null);if(t=t.mergeWith(n.linkedEntities),typeof n=="string")i=hh(e,t,n,r,o);else if(typeof n=="object"&&!Array.isArray(n)&&Array.isArray(n.type)&&n.type.indexOf("reification")!==-1)i=nm(e,Or.fromJson(n)[0],r,o);else{let d=n["http://www.w3.org/2002/07/owl#someValuesFrom"],y=n["http://www.w3.org/2002/07/owl#allValuesFrom"],_=or(n["http://www.w3.org/2002/07/owl#intersectionOf"]),k=or(n["http://www.w3.org/2002/07/owl#unionOf"]),T=n["http://www.w3.org/2002/07/owl#hasValue"],N=n["http://www.w3.org/2002/07/owl#minCardinality"]||n["http://www.w3.org/2002/07/owl#minQualifiedCardinality"],L=n["http://www.w3.org/2002/07/owl#maxCardinality"]||n["http://www.w3.org/2002/07/owl#maxQualifiedCardinality"],Y=n["http://www.w3.org/2002/07/owl#cardinality"]||n["http://www.w3.org/2002/07/owl#qualifiedCardinality"],q=n["http://www.w3.org/2002/07/owl#hasSelf"],K=n["http://www.w3.org/2002/07/owl#complementOf"],U=or(n["http://www.w3.org/2002/07/owl#oneOf"]),X=n["http://www.w3.org/2002/07/owl#inverseOf"],Z=n["http://www.w3.org/2002/07/owl#onProperty"],fe=n["http://www.w3.org/2002/07/owl#onDatatype"];if(fe){let me=[Ao(e,t,fe,r,o)],ye=or(n["http://www.w3.org/2002/07/owl#withRestrictions"]);if(ye.length>0){me.push(St.default.createElement(St.default.Fragment,null,"["));let ge=!0;for(let ae of ye){ge?ge=!1:me.push(St.default.createElement(St.default.Fragment,null,",\xA0"));let Pe=ae["http://www.w3.org/2001/XMLSchema#minExclusive"],Ne=ae["http://www.w3.org/2001/XMLSchema#minInclusive"],Ye=ae["http://www.w3.org/2001/XMLSchema#maxExclusive"],Je=ae["http://www.w3.org/2001/XMLSchema#maxInclusive"];Pe?me.push(St.default.createElement(St.default.Fragment,null,"> ",Pe)):Ne?me.push(St.default.createElement(St.default.Fragment,null,"\u2265 ",Ne)):Ye?me.push(St.default.createElement(St.default.Fragment,null,"< ",Ye)):Je&&me.push(St.default.createElement(St.default.Fragment,null,"\u2264 ",Je))}me.push(St.default.createElement(St.default.Fragment,null,"]"))}i=St.default.createElement(St.default.Fragment,null,me.map(ge=>St.default.createElement("span",{key:xn()},ge)))}else if(d)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," some "),Ao(e,t,or(d)[0],r,o));else if(y)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," only "),Ao(e,t,or(y)[0],r,o));else if(_.length>0){let me=[St.default.createElement("span",{key:xn(),className:"text-neutral-default"},"(")];for(let ye of _)me.length>1&&me.push(St.default.createElement("i",null," and ")),me.push(Ao(e,t,ye,r,o));me.push(St.default.createElement("span",{className:"text-neutral-default"},")")),i=St.default.createElement("span",null,me.map(ye=>St.default.createElement("span",{key:xn()},ye)))}else if(k.length>0){let me=[St.default.createElement("span",{key:xn(),className:"text-neutral-default"},"(")];for(let ye of k)me.length>1&&me.push(St.default.createElement("i",null," or ")),me.push(Ao(e,t,ye,r,o));me.push(St.default.createElement("span",{className:"text-neutral-default"},")")),i=St.default.createElement("span",null,me.map(ye=>St.default.createElement("span",{key:xn()},ye)))}else if(T)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," value "),Ao(e,t,or(T)[0],r,o));else if(N)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," min "),Ao(e,t,or(N)[0],r,o));else if(L)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," max "),Ao(e,t,or(L)[0],r,o));else if(Y)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," exactly "),Ao(e,t,or(Y)[0],r,o));else if(q)i=St.default.createElement(St.default.Fragment,null,Ao(e,t,Z,r,o),St.default.createElement("i",{style:{color:"purple"}}," Self "),Ao(e,t,or(q)[0],r,o));else if(K)i=St.default.createElement(St.default.Fragment,null,St.default.createElement("i",null,"not "),Ao(e,t,or(K)[0],r,o));else if(U.length>0){let me=[St.default.createElement("span",{key:xn(),className:"text-neutral-default"},"{")];for(let ye of U)me.length>1&&me.push(St.default.createElement("span",{key:xn(),className:"text-neutral-default"},",\xA0")),me.push(Ao(e,t,ye,r,o));me.push(St.default.createElement("span",{className:"text-neutral-default"},"}")),i=St.default.createElement("span",null,me.map(ye=>St.default.createElement("span",{key:xn()},ye)))}else X&&(i=St.default.createElement(St.default.Fragment,null,St.default.createElement("i",{style:{color:"purple"}},"inverse "),St.default.createElement("span",{key:xn(),className:"text-neutral-default"},"("),Ao(e,t,X,r,o),St.default.createElement("span",{key:xn(),className:"text-neutral-default"},")")))}return i}function GC(e,t,n,r=LH,o){return St.default.createElement(St.default.Fragment,null,n.length===1?St.default.createElement("p",null,Ao(e,e.getLinkedEntities(),n[0],r,o)):St.default.createElement("ul",null,n.map(i=>St.default.createElement("li",{key:xn()},Ao(e,e.getLinkedEntities(),i,r,o)))))}function fIe(e,t,n,r=LH,o){let i=[];if(n)for(let k of Object.keys(n.linkedEntities))for(let T=t.indexOf(k,0);T!==-1;T=t.indexOf(k,T))i.push({start:T,end:T+k.length,link:hh(e,n,k,r,o)}),T+=k.length;let d=/[A-z]+:\/\/[^\s]+/g;for(let k=d.exec(t);k;k=d.exec(t)){let T=k[0];i.push({start:k.index,end:k.index+T.length,link:St.default.createElement("span",{key:xn()},St.default.createElement("a",{className:"clickable",href:T},T))})}i.sort((k,T)=>k.start-T.start);e:for(let k=0;k=L.start&&L.end>=N.start){N.end-N.startY.getEntityObject(n,i,r,d,_));function fe(Me){return Lt.default.createElement(Lt.default.Fragment,null,Me.getLabel()&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Label:"),Me.getLabel()),Lt.default.createElement(pl,null)))}function me(Me){return Lt.default.createElement(Lt.default.Fragment,null,Me.getSynonyms().length>0&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Synonyms:"),Me.getSynonyms().length>1?Lt.default.createElement("ul",null,Me.getSynonyms().map(Ve=>Lt.default.createElement("li",{key:xn(),id:Ve.value},nm(Me,Ve,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Lt.default.createElement("p",null,nm(Me,Me.getSynonyms()[0],y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function ye(Me){let Ve=Me.getHasKey();return Lt.default.createElement(Lt.default.Fragment,null,Ve.length>0&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Has Key:"),Ve.length>1?Lt.default.createElement("ul",null,Ve.map(Ue=>Lt.default.createElement("li",{key:xn()},Ao(Me,Me.getLinkedEntities(),Ue,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Lt.default.createElement("p",null,Ao(Me,Me.getLinkedEntities(),Ve[0],y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function ge(Me){return Lt.default.createElement(Lt.default.Fragment,null,Me.getSubsets().length>0&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"In Subsets:"),Me.getSubsets().length>1?Lt.default.createElement("ul",null,Me.getSubsets().map(Ve=>Lt.default.createElement("li",{key:xn(),id:Ve+xn()},hh(Me,Me.getLinkedEntities(),Ve,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Lt.default.createElement("p",null,hh(Me,Me.getLinkedEntities(),Me.getSubsets()[0],y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function ae(Me){let Ve=Me.getRdfTypes().map(Ue=>({"http://www.w3.org/2002/07/owl#FunctionalProperty":"Functional","http://www.w3.org/2002/07/owl#InverseFunctionalProperty":"Inverse Functional","http://www.w3.org/2002/07/owl#TransitiveProperty":"Transitive","http://www.w3.org/2002/07/owl#SymmetricProperty":"Symmetric","http://www.w3.org/2002/07/owl#AsymmetricProperty":"Asymmetric","http://www.w3.org/2002/07/owl#ReflexiveProperty":"Reflexive","http://www.w3.org/2002/07/owl#IrreflexiveProperty":"Irreflexive"})[Ue]).filter(Ue=>!!Ue);return Lt.default.createElement(Lt.default.Fragment,null,Ve.length>0&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Characteristics:"),Ve.length>1?Lt.default.createElement("ul",null,Ve.map(Ue=>Lt.default.createElement("li",{key:xn()},Ue)).sort()):Lt.default.createElement("p",null,Ve[0]))))}function Pe(Me){let Ve=Me.getDomain();return Lt.default.createElement(Lt.default.Fragment,null,Ve.length>0&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Domain:"),Ve.length>1?Lt.default.createElement("ul",null,Ve.map(Ue=>Lt.default.createElement("li",{key:xn()},Ao(Me,Me.getLinkedEntities(),Ue,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Lt.default.createElement("p",null,Ao(Me,Me.getLinkedEntities(),Ve[0],y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))))}function Ne(Me){let Ve=Me.getRange();return Lt.default.createElement(Lt.default.Fragment,null,Ve.length>0&&Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Range:"),Ve.length>1?Lt.default.createElement("ul",null,Ve.map(Ue=>Lt.default.createElement("li",{key:xn()},Ao(Me,Me.getLinkedEntities(),Ue,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Lt.default.createElement("p",null,Ao(Me,Me.getLinkedEntities(),Ve[0],y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}function Ye(Me){let Ve=Object.keys(Me.properties),Ue=Ve.filter(wt=>wt.startsWith("negativePropertyAssertion+")),ht=Ve.filter(wt=>Me.getLinkedEntities().get(wt)&&Me.getLinkedEntities().get(wt)?.type.indexOf("objectProperty")!==-1),yt=Ve.filter(wt=>Me.getLinkedEntities().get(wt)&&Me.getLinkedEntities().get(wt)?.type.indexOf("dataProperty")!==-1),Rt=[];for(let wt of ht){let _t=or(Me.properties[wt]);for(let Nt of _t)Rt.push(Lt.default.createElement(Lt.default.Fragment,null,Ao(Me,Me.getLinkedEntities(),wt,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),typeof Nt=="string"&&Nt.includes("http")?Lt.default.createElement(Lt.default.Fragment,null,"\xA0",Lt.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",hh(Me,Me.getLinkedEntities(),Nt,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):eK(typeof Nt=="string"?Nt:typeof Nt=="object"&&!Array.isArray(Nt)&&Nt.value?JSON.stringify(Nt.value):JSON.stringify(Nt))))}for(let wt of yt){let _t=or(Me.properties[wt]);for(let Nt of _t)Rt.push(Lt.default.createElement(Lt.default.Fragment,null,Ao(Me,Me.getLinkedEntities(),wt,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),Lt.default.createElement(Lt.default.Fragment,null,"\xA0",Lt.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",hh(Me,Me.getLinkedEntities(),Nt,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}))))}for(let wt of Ue){let _t=wt.slice(26),Nt=Me.getLinkedEntities().get(_t),At=Nt?.type.indexOf("dataProperty")!==-1,ir=Nt?.type.indexOf("objectProperty")!==-1,Pt=or(Me.properties[wt]);for(let Sr of Pt)Rt.push(Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement("i",{style:{color:"purple"}},"not")," ",Ao(Me,Me.getLinkedEntities(),_t,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate}),typeof Sr=="string"&&Sr.includes("http")?Lt.default.createElement(Lt.default.Fragment,null,"\xA0",Lt.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",hh(Me,Me.getLinkedEntities(),Sr,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):ir?eK(typeof Sr=="string"?Sr:typeof Sr=="object"&&!Array.isArray(Sr)&&Sr.value?JSON.stringify(Sr.value):JSON.stringify(Sr)):At?Lt.default.createElement(Lt.default.Fragment,null,"\xA0",Lt.default.createElement("span",{style:{fontSize:"medium",color:"gray"}},"\u25B8"),"\xA0",hh(Me,Me.getLinkedEntities(),Sr,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})):Lt.default.createElement(Lt.default.Fragment,null)))}return Lt.default.createElement(Lt.default.Fragment,null,Rt.length>0&&Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(Rr,null,Lt.default.createElement("b",null,"Property assertions:"),Rt.length>1?Lt.default.createElement("ul",null,Rt.map(wt=>Lt.default.createElement("li",{key:xn()},wt)).sort()):Lt.default.createElement("p",null,Rt[0]))))}function Je(Me){return Lt.default.createElement(Lt.default.Fragment,null,Me.getAnnotationPredicates().map(Ve=>{let Ue=Me.getAnnotationById(Ve);return Ue.length==0?Lt.default.createElement(Lt.default.Fragment,null):Lt.default.createElement(Rr,{grow:!1,key:Ve},Lt.default.createElement("b",null,E3(sj(aj(Me.getAnnotationTitleById(Ve)))),":"),Ue.length>1?Lt.default.createElement("ul",null,Ue.map(ht=>Lt.default.createElement("li",{key:xn(),id:ht.value},nm(Me,ht,y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))):Lt.default.createElement("p",{key:xn()},nm(Me,Ue[0],y,{onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}))}return Lt.default.createElement(Lt.default.Fragment,null,Lt.default.createElement(em,{title:o?(i?E3(AV(i)):U&&q?E3(q.getType()):"")+" Information":"",layout:"horizontal"},K&&Lt.default.createElement(Pn,{size:"s"}),U&&q!==void 0&&Lt.default.createElement(Wr,{...L},fe(q),me(q),ok(q)&&Lt.default.createElement(Lt.default.Fragment,null,ge(q),ye(q)),mE(q)&&Lt.default.createElement(Lt.default.Fragment,null,ae(q),Pe(q),Ne(q)),ij(q)&&Lt.default.createElement(Lt.default.Fragment,null,Ye(q)),Je(q)),X&&Lt.default.createElement(Wr,null,Ma(Z,"information"))))}function hIe(e,t,n){pIe.default.render(LHt(e),t,n)}function LHt(e){let t=new Cn;return Lt.default.createElement(jn,{colorMode:"light"},Lt.default.createElement(Tn,{client:t},Lt.default.createElement(dIe,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,showBadges:e.showBadges,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var FH=V(ne());var mIe=V(Li());function vIe(e){let{apiQuery:t,buttonText:n,buttonSize:r}=e;return FH.default.createElement(yk,{href:t,target:"_blank",size:r||"m"},n)}function gIe(e,t,n){mIe.default.render(FHt(e),t,n)}function FHt(e){let t=new Cn;return FH.default.createElement(jn,{colorMode:"light"},FH.default.createElement(Tn,{client:t},FH.default.createElement(vIe,{apiQuery:e.apiQuery,buttonText:e.buttonText,buttonSize:e.buttonSize})))}var mh=V(ne());var yIe=V(Li());function tK(e){let{api:t,ontologyId:n,iri:r,entityType:o,colorFirst:i,colorSecond:d,parameter:y,useLegacy:_,onNavigateToOntology:k}=e,T=new $n(t),{data:N,isLoading:L,isSuccess:Y,isError:q,error:K}=Vn(["breadcrumb",t,y,o,r,n,_],async()=>await T.getEntityObject(r,o,n,y,_));return mh.default.createElement(mh.default.Fragment,null,L&&mh.default.createElement("span",null,mh.default.createElement("button",{onClick:()=>{e.onNavigateToOntology&&e.ontologyId&&e.onNavigateToOntology(e.ontologyId||"",void 0,void 0)}},mh.default.createElement(Zp,{className:e.ontologyId?"breadcrumb clickable-breadcrumb":"breadcrumb",color:i||(e.ontologyId?"primary":"warning")},e.ontologyId?.toUpperCase()||mh.default.createElement(Pn,{size:"s"}))),"\xA0",mh.default.createElement(sn,{type:"arrowRight"}),"\xA0",mh.default.createElement(Zp,{className:"breadcrumb",color:d||"warning"},mh.default.createElement(Pn,{size:"s"}))),Y&&N&&By(N)&&mh.default.createElement(Jk,{ontologyName:N.getOntologyId(),shortForm:N.getShortForm(),ontologyId:n||N.getOntologyId(),colorFirst:i,colorSecond:d,onNavigateToOntology:k}),q&&mh.default.createElement(Jk,{ontologyName:e.ontologyId?.toUpperCase()||N&&N.getOntologyId().toUpperCase()||Ma(K,"ontology"),shortForm:N&&N.getShortForm()?N.getShortForm().toUpperCase():"",ontologyId:n||(N?N.getOntologyId():""),colorFirst:i||(e.ontologyId||N&&N.getOntologyId()?"primary":"danger"),colorSecond:d||(N&&N.getShortForm()?"success":"danger"),onNavigateToOntology:k}))}function bIe(e,t,n){yIe.default.render(BHt(e),t,n)}function BHt(e){let t=new Cn;return mh.default.createElement(jn,{colorMode:"light"},mh.default.createElement(Tn,{client:t},mh.default.createElement(tK,{api:e.api,entityType:e.entityType,iri:e.iri,ontologyId:e.ontologyId,colorFirst:e.colorFirst,colorSecond:e.colorSecond,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var t7=V(ne());var rK=V(ne());function nK(e){let{descText:t,description:n,...r}=e;return rK.default.createElement(rK.default.Fragment,null,rK.default.createElement(Wr,{...r},t||n))}var wIe=V(Li()),WHt="No description available.";function oK(e){let{api:t,ontologyId:n,iri:r,descText:o,thingType:i,parameter:d,useLegacy:y,..._}=e,k=new $n(t),{data:T,isLoading:N,isSuccess:L,isError:Y,error:q}=Vn(["description",t,d,i,r,n,y],async()=>k.getThingObject(r,i,n,d,y));return t7.default.createElement(t7.default.Fragment,null,N&&t7.default.createElement(Pn,{size:"s"}),L&&T&&t7.default.createElement(nK,{description:T.getDescription()||WHt,descText:o,..._}),Y&&t7.default.createElement(Wr,null,Ma(q,"description")))}function OIe(e,t,n){wIe.default.render(HHt(e),t,n)}function HHt(e){let t=new Cn;return t7.default.createElement(jn,{colorMode:"light"},t7.default.createElement(Tn,{client:t},t7.default.createElement(oK,{api:e.api,ontologyId:e.ontologyId,iri:e.iri,descText:e.descText,thingType:e.thingType,parameter:e.parameter,color:e.color,useLegacy:e.useLegacy})))}var eb=V(ne());var xIe=V(Li());function JC(e){let{iri:t,iriText:n,color:r,externalIcon:o,urlPrefix:i,copyButton:d}=e,[y,_]=(0,eb.useState)(!1),T=typeof i<"u"&&i!==""?i+encodeURIComponent(t):t,N=()=>y?eb.default.createElement(K0,{style:{marginLeft:"5px",color:r&&(RV(r)||DV(r))?r:""},display:"base",iconType:"check",key:"copy-btn",color:r&&zV(r)?r:void 0}):eb.default.createElement(K0,{display:"base",iconType:"copy",key:"copy-btn",style:{marginLeft:"5px",color:r&&(RV(r)||DV(r))?r:""},color:r&&zV(r)?r:void 0,onClick:()=>{navigator.clipboard.writeText(T),_(!0),setTimeout(()=>{_(!1)},2e3)}});return eb.default.createElement(Rr,{grow:!1},eb.default.createElement("div",null,eb.default.createElement(U_,{href:T,target:"_blank",style:{color:r&&(RV(r)||DV(r))?r:""},color:r&&zV(r)?r:void 0,external:o},n||t),d&&eb.default.createElement(N,null)))}function _Ie(e,t,n){xIe.default.render($Ht(e),t,n)}function $Ht(e){let t=new Cn;return eb.default.createElement(jn,{colorMode:"light"},eb.default.createElement(Tn,{client:t},eb.default.createElement(JC,{iri:e.iri,iriText:e.iriText,color:e.color,externalIcon:e.externalIcon,urlPrefix:e.urlPrefix,copyButton:e.copyButton})))}var J3=V(ne());var im=V(ne());var n9=V(ne());(()=>{var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,o=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty,d=(h,w)=>()=>(h&&(w=h(h=0)),w),y=(h,w)=>()=>(w||h((w={exports:{}}).exports,w),w.exports),_=(h,w)=>{for(var S in w)t(h,S,{get:w[S],enumerable:!0})},k=(h,w,S,C)=>{if(w&&typeof w=="object"||typeof w=="function")for(let R of r(w))!i.call(h,R)&&R!==S&&t(h,R,{get:()=>w[R],enumerable:!(C=n(w,R))||C.enumerable});return h},T=(h,w,S)=>(S=h!=null?e(o(h)):{},k(w||!h||!h.__esModule?t(S,"default",{value:h,enumerable:!0}):S,h)),N=h=>k(t({},"__esModule",{value:!0}),h),L=y((h,w)=>{"use strict";var S=Object.getOwnPropertySymbols,C=Object.prototype.hasOwnProperty,R=Object.prototype.propertyIsEnumerable;function G(re){if(re==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(re)}function te(){try{if(!Object.assign)return!1;var re=new String("abc");if(re[5]="de",Object.getOwnPropertyNames(re)[0]==="5")return!1;for(var ue={},se=0;se<10;se++)ue["_"+String.fromCharCode(se)]=se;var he=Object.getOwnPropertyNames(ue).map(function(Ie){return ue[Ie]});if(he.join("")!=="0123456789")return!1;var _e={};return"abcdefghijklmnopqrst".split("").forEach(function(Ie){_e[Ie]=Ie}),Object.keys(Object.assign({},_e)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}w.exports=te()?Object.assign:function(re,ue){for(var se,he=G(re),_e,Ie=1;Ie{"use strict";var w=L(),S=60103,C=60106;h.Fragment=60107,h.StrictMode=60108,h.Profiler=60114;var R=60109,G=60110,te=60112;h.Suspense=60113;var re=60115,ue=60116;typeof Symbol=="function"&&Symbol.for&&(se=Symbol.for,S=se("react.element"),C=se("react.portal"),h.Fragment=se("react.fragment"),h.StrictMode=se("react.strict_mode"),h.Profiler=se("react.profiler"),R=se("react.provider"),G=se("react.context"),te=se("react.forward_ref"),h.Suspense=se("react.suspense"),re=se("react.memo"),ue=se("react.lazy"));var se,he=typeof Symbol=="function"&&Symbol.iterator;function _e(at){return at===null||typeof at!="object"?null:(at=he&&at[he]||at["@@iterator"],typeof at=="function"?at:null)}function Ie(at){for(var Bt="https://reactjs.org/docs/error-decoder.html?invariant="+at,pn=1;pn{"use strict";w.exports=Y()}),K=y(h=>{"use strict";var w,S,C,R;typeof performance=="object"&&typeof performance.now=="function"?(G=performance,h.unstable_now=function(){return G.now()}):(te=Date,re=te.now(),h.unstable_now=function(){return te.now()-re});var G,te,re;typeof window>"u"||typeof MessageChannel!="function"?(ue=null,se=null,he=function(){if(ue!==null)try{var Dt=h.unstable_now();ue(!0,Dt),ue=null}catch(Gt){throw setTimeout(he,0),Gt}},w=function(Dt){ue!==null?setTimeout(w,0,Dt):(ue=Dt,setTimeout(he,0))},S=function(Dt,Gt){se=setTimeout(Dt,Gt)},C=function(){clearTimeout(se)},h.unstable_shouldYield=function(){return!1},R=h.unstable_forceFrameRate=function(){}):(_e=window.setTimeout,Ie=window.clearTimeout,typeof console<"u"&&(Ce=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),typeof Ce!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")),ke=!1,ze=null,Le=-1,Te=5,lt=0,h.unstable_shouldYield=function(){return h.unstable_now()>=lt},R=function(){},h.unstable_forceFrameRate=function(Dt){0>Dt||125>>1,nn=Dt[pr];if(nn!==void 0&&0De(_o,fr))jo!==void 0&&0>De(jo,_o)?(Dt[pr]=jo,Dt[Kr]=fr,pr=Kr):(Dt[pr]=_o,Dt[dn]=fr,pr=dn);else if(jo!==void 0&&0>De(jo,fr))Dt[pr]=jo,Dt[Kr]=fr,pr=Kr;else break e}}return Gt}return null}function De(Dt,Gt){var fr=Dt.sortIndex-Gt.sortIndex;return fr!==0?fr:Dt.id-Gt.id}var Ze=[],ct=[],gt=1,Et=null,zt=3,Yt=!1,Tr=!1,_r=!1;function Zr(Dt){for(var Gt=Ke(ct);Gt!==null;){if(Gt.callback===null)st(ct);else if(Gt.startTime<=Dt)st(ct),Gt.sortIndex=Gt.expirationTime,it(Ze,Gt);else break;Gt=Ke(ct)}}function at(Dt){if(_r=!1,Zr(Dt),!Tr)if(Ke(Ze)!==null)Tr=!0,w(Bt);else{var Gt=Ke(ct);Gt!==null&&S(at,Gt.startTime-Dt)}}function Bt(Dt,Gt){Tr=!1,_r&&(_r=!1,C()),Yt=!0;var fr=zt;try{for(Zr(Gt),Et=Ke(Ze);Et!==null&&(!(Et.expirationTime>Gt)||Dt&&!h.unstable_shouldYield());){var pr=Et.callback;if(typeof pr=="function"){Et.callback=null,zt=Et.priorityLevel;var nn=pr(Et.expirationTime<=Gt);Gt=h.unstable_now(),typeof nn=="function"?Et.callback=nn:Et===Ke(Ze)&&st(Ze),Zr(Gt)}else st(Ze);Et=Ke(Ze)}if(Et!==null)var dn=!0;else{var _o=Ke(ct);_o!==null&&S(at,_o.startTime-Gt),dn=!1}return dn}finally{Et=null,zt=fr,Yt=!1}}var pn=R;h.unstable_IdlePriority=5,h.unstable_ImmediatePriority=1,h.unstable_LowPriority=4,h.unstable_NormalPriority=3,h.unstable_Profiling=null,h.unstable_UserBlockingPriority=2,h.unstable_cancelCallback=function(Dt){Dt.callback=null},h.unstable_continueExecution=function(){Tr||Yt||(Tr=!0,w(Bt))},h.unstable_getCurrentPriorityLevel=function(){return zt},h.unstable_getFirstCallbackNode=function(){return Ke(Ze)},h.unstable_next=function(Dt){switch(zt){case 1:case 2:case 3:var Gt=3;break;default:Gt=zt}var fr=zt;zt=Gt;try{return Dt()}finally{zt=fr}},h.unstable_pauseExecution=function(){},h.unstable_requestPaint=pn,h.unstable_runWithPriority=function(Dt,Gt){switch(Dt){case 1:case 2:case 3:case 4:case 5:break;default:Dt=3}var fr=zt;zt=Dt;try{return Gt()}finally{zt=fr}},h.unstable_scheduleCallback=function(Dt,Gt,fr){var pr=h.unstable_now();switch(typeof fr=="object"&&fr!==null?(fr=fr.delay,fr=typeof fr=="number"&&0pr?(Dt.sortIndex=fr,it(ct,Dt),Ke(Ze)===null&&Dt===Ke(ct)&&(_r?C():_r=!0,S(at,fr-pr))):(Dt.sortIndex=nn,it(Ze,Dt),Tr||Yt||(Tr=!0,w(Bt))),Dt},h.unstable_wrapCallback=function(Dt){var Gt=zt;return function(){var fr=zt;zt=Gt;try{return Dt.apply(this,arguments)}finally{zt=fr}}}}),U=y((h,w)=>{"use strict";w.exports=K()}),X=y(h=>{"use strict";var w=q(),S=L(),C=U();function R(a){for(var u="https://reactjs.org/docs/error-decoder.html?invariant="+a,p=1;p"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),he=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,_e=Object.prototype.hasOwnProperty,Ie={},Ce={};function ke(a){return _e.call(Ce,a)?!0:_e.call(Ie,a)?!1:he.test(a)?Ce[a]=!0:(Ie[a]=!0,!1)}function ze(a,u,p,O){if(p!==null&&p.type===0)return!1;switch(typeof u){case"function":case"symbol":return!0;case"boolean":return O?!1:p!==null?!p.acceptsBooleans:(a=a.toLowerCase().slice(0,5),a!=="data-"&&a!=="aria-");default:return!1}}function Le(a,u,p,O){if(u===null||typeof u>"u"||ze(a,u,p,O))return!0;if(O)return!1;if(p!==null)switch(p.type){case 3:return!u;case 4:return u===!1;case 5:return isNaN(u);case 6:return isNaN(u)||1>u}return!1}function Te(a,u,p,O,P,z,H){this.acceptsBooleans=u===2||u===3||u===4,this.attributeName=O,this.attributeNamespace=P,this.mustUseProperty=p,this.propertyName=a,this.type=u,this.sanitizeURL=z,this.removeEmptyString=H}var lt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){lt[a]=new Te(a,0,!1,a,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var u=a[0];lt[u]=new Te(u,1,!1,a[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(a){lt[a]=new Te(a,2,!1,a.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(a){lt[a]=new Te(a,2,!1,a,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){lt[a]=new Te(a,3,!1,a.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(a){lt[a]=new Te(a,3,!0,a,null,!1,!1)}),["capture","download"].forEach(function(a){lt[a]=new Te(a,4,!1,a,null,!1,!1)}),["cols","rows","size","span"].forEach(function(a){lt[a]=new Te(a,6,!1,a,null,!1,!1)}),["rowSpan","start"].forEach(function(a){lt[a]=new Te(a,5,!1,a.toLowerCase(),null,!1,!1)});var dt=/[\-:]([a-z])/g;function tt(a){return a[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var u=a.replace(dt,tt);lt[u]=new Te(u,1,!1,a,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var u=a.replace(dt,tt);lt[u]=new Te(u,1,!1,a,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(a){var u=a.replace(dt,tt);lt[u]=new Te(u,1,!1,a,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(a){lt[a]=new Te(a,1,!1,a.toLowerCase(),null,!1,!1)}),lt.xlinkHref=new Te("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(a){lt[a]=new Te(a,1,!1,a.toLowerCase(),null,!0,!0)});function it(a,u,p,O){var P=lt.hasOwnProperty(u)?lt[u]:null,z=P!==null?P.type===0:O?!1:!(!(2ee||P[H]!==z[ee])return` -`+P[H].replace(" at new "," at ");while(1<=H&&0<=ee);break}}}finally{jo=!1,Error.prepareStackTrace=p}return(a=a?a.displayName||a.name:"")?Kr(a):""}function In(a){switch(a.tag){case 5:return Kr(a.type);case 16:return Kr("Lazy");case 13:return Kr("Suspense");case 19:return Kr("SuspenseList");case 0:case 2:case 15:return a=cs(a.type,!1),a;case 11:return a=cs(a.type.render,!1),a;case 22:return a=cs(a.type._render,!1),a;case 1:return a=cs(a.type,!0),a;default:return""}}function Co(a){if(a==null)return null;if(typeof a=="function")return a.displayName||a.name||null;if(typeof a=="string")return a;switch(a){case Ze:return"Fragment";case De:return"Portal";case gt:return"Profiler";case ct:return"StrictMode";case Tr:return"Suspense";case _r:return"SuspenseList"}if(typeof a=="object")switch(a.$$typeof){case zt:return(a.displayName||"Context")+".Consumer";case Et:return(a._context.displayName||"Context")+".Provider";case Yt:var u=a.render;return u=u.displayName||u.name||"",a.displayName||(u!==""?"ForwardRef("+u+")":"ForwardRef");case Zr:return Co(a.type);case Bt:return Co(a._render);case at:u=a._payload,a=a._init;try{return Co(a(u))}catch{}}return null}function mi(a){switch(typeof a){case"boolean":case"number":case"object":case"string":case"undefined":return a;default:return""}}function p0(a){var u=a.type;return(a=a.nodeName)&&a.toLowerCase()==="input"&&(u==="checkbox"||u==="radio")}function nl(a){var u=p0(a)?"checked":"value",p=Object.getOwnPropertyDescriptor(a.constructor.prototype,u),O=""+a[u];if(!a.hasOwnProperty(u)&&typeof p<"u"&&typeof p.get=="function"&&typeof p.set=="function"){var P=p.get,z=p.set;return Object.defineProperty(a,u,{configurable:!0,get:function(){return P.call(this)},set:function(H){O=""+H,z.call(this,H)}}),Object.defineProperty(a,u,{enumerable:p.enumerable}),{getValue:function(){return O},setValue:function(H){O=""+H},stopTracking:function(){a._valueTracker=null,delete a[u]}}}}function ca(a){a._valueTracker||(a._valueTracker=nl(a))}function Gu(a){if(!a)return!1;var u=a._valueTracker;if(!u)return!0;var p=u.getValue(),O="";return a&&(O=p0(a)?a.checked?"true":"false":a.value),a=O,a!==p?(u.setValue(a),!0):!1}function Ju(a){if(a=a||(typeof document<"u"?document:void 0),typeof a>"u")return null;try{return a.activeElement||a.body}catch{return a.body}}function gf(a,u){var p=u.checked;return S({},u,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:p??a._wrapperState.initialChecked})}function Ld(a,u){var p=u.defaultValue==null?"":u.defaultValue,O=u.checked!=null?u.checked:u.defaultChecked;p=mi(u.value!=null?u.value:p),a._wrapperState={initialChecked:O,initialValue:p,controlled:u.type==="checkbox"||u.type==="radio"?u.checked!=null:u.value!=null}}function yf(a,u){u=u.checked,u!=null&&it(a,"checked",u,!1)}function ks(a,u){yf(a,u);var p=mi(u.value),O=u.type;if(p!=null)O==="number"?(p===0&&a.value===""||a.value!=p)&&(a.value=""+p):a.value!==""+p&&(a.value=""+p);else if(O==="submit"||O==="reset"){a.removeAttribute("value");return}u.hasOwnProperty("value")?ol(a,u.type,p):u.hasOwnProperty("defaultValue")&&ol(a,u.type,mi(u.defaultValue)),u.checked==null&&u.defaultChecked!=null&&(a.defaultChecked=!!u.defaultChecked)}function Fd(a,u,p){if(u.hasOwnProperty("value")||u.hasOwnProperty("defaultValue")){var O=u.type;if(!(O!=="submit"&&O!=="reset"||u.value!==void 0&&u.value!==null))return;u=""+a._wrapperState.initialValue,p||u===a.value||(a.value=u),a.defaultValue=u}p=a.name,p!==""&&(a.name=""),a.defaultChecked=!!a._wrapperState.initialChecked,p!==""&&(a.name=p)}function ol(a,u,p){(u!=="number"||Ju(a.ownerDocument)!==a)&&(p==null?a.defaultValue=""+a._wrapperState.initialValue:a.defaultValue!==""+p&&(a.defaultValue=""+p))}function Sx(a){var u="";return w.Children.forEach(a,function(p){p!=null&&(u+=p)}),u}function $g(a,u){return a=S({children:void 0},u),(u=Sx(u.children))&&(a.children=u),a}function Sp(a,u,p,O){if(a=a.options,u){u={};for(var P=0;P=p.length))throw Error(R(93));p=p[0]}u=p}u==null&&(u=""),p=u}a._wrapperState={initialValue:mi(p)}}function Hw(a,u){var p=mi(u.value),O=mi(u.defaultValue);p!=null&&(p=""+p,p!==a.value&&(a.value=p),u.defaultValue==null&&a.defaultValue!==p&&(a.defaultValue=p)),O!=null&&(a.defaultValue=""+O)}function Bd(a){var u=a.textContent;u===a._wrapperState.initialValue&&u!==""&&u!==null&&(a.value=u)}var I2={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function X8(a){switch(a){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Ex(a,u){return a==null||a==="http://www.w3.org/1999/xhtml"?X8(u):a==="http://www.w3.org/2000/svg"&&u==="foreignObject"?"http://www.w3.org/1999/xhtml":a}var $w,d0=function(a){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(u,p,O,P){MSApp.execUnsafeLocalFunction(function(){return a(u,p,O,P)})}:a}(function(a,u){if(a.namespaceURI!==I2.svg||"innerHTML"in a)a.innerHTML=u;else{for($w=$w||document.createElement("div"),$w.innerHTML=""+u.valueOf().toString()+"",u=$w.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;u.firstChild;)a.appendChild(u.firstChild)}});function k2(a,u){if(u){var p=a.firstChild;if(p&&p===a.lastChild&&p.nodeType===3){p.nodeValue=u;return}}a.textContent=u}var h0={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},K8=["Webkit","ms","Moz","O"];Object.keys(h0).forEach(function(a){K8.forEach(function(u){u=u+a.charAt(0).toUpperCase()+a.substring(1),h0[u]=h0[a]})});function Vw(a,u,p){return u==null||typeof u=="boolean"||u===""?"":p||typeof u!="number"||u===0||h0.hasOwnProperty(a)&&h0[a]?(""+u).trim():u+"px"}function Vg(a,u){a=a.style;for(var p in u)if(u.hasOwnProperty(p)){var O=p.indexOf("--")===0,P=Vw(p,u[p],O);p==="float"&&(p="cssFloat"),O?a.setProperty(p,P):a[p]=P}}var bf=S({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Di(a,u){if(u){if(bf[a]&&(u.children!=null||u.dangerouslySetInnerHTML!=null))throw Error(R(137,a));if(u.dangerouslySetInnerHTML!=null){if(u.children!=null)throw Error(R(60));if(!(typeof u.dangerouslySetInnerHTML=="object"&&"__html"in u.dangerouslySetInnerHTML))throw Error(R(61))}if(u.style!=null&&typeof u.style!="object")throw Error(R(62))}}function qw(a,u){if(a.indexOf("-")===-1)return typeof u.is=="string";switch(a){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Ep(a){return a=a.target||a.srcElement||window,a.correspondingUseElement&&(a=a.correspondingUseElement),a.nodeType===3?a.parentNode:a}var m0=null,wn=null,Lr=null;function kl(a){if(a=Np(a)){if(typeof m0!="function")throw Error(R(280));var u=a.stateNode;u&&(u=Al(u),m0(a.stateNode,a.type,u))}}function Ia(a){wn?Lr?Lr.push(a):Lr=[a]:wn=a}function Wd(){if(wn){var a=wn,u=Lr;if(Lr=wn=null,kl(a),u)for(a=0;aO?0:1<p;p++)u.push(a);return u}function N2(a,u,p){a.pendingLanes|=u;var O=u-1;a.suspendedLanes&=O,a.pingedLanes&=O,a=a.eventTimes,u=31-Cp(u),a[u]=p}var Cp=Math.clz32?Math.clz32:aS,iS=Math.log,aO=Math.LN2;function aS(a){return a===0?32:31-(iS(a)/aO|0)|0}var sO=C.unstable_UserBlockingPriority,sS=C.unstable_runWithPriority,Zg=!0;function lO(a,u,p,O){g1||Ix();var P=L2,z=g1;g1=!0;try{Hd(P,a,u,p,O)}finally{(g1=z)||So()}}function uO(a,u,p,O){sS(sO,L2.bind(null,a,u,p,O))}function L2(a,u,p,O){if(Zg){var P;if((P=(u&4)===0)&&0=_0),oy=String.fromCharCode(32),fu=!1;function Wx(a,u){switch(a){case"keyup":return H2.indexOf(u.keyCode)!==-1;case"keydown":return u.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hx(a){return a=a.detail,typeof a=="object"&&"data"in a?a.data:null}var Rp=!1;function yO(a,u){switch(a){case"compositionend":return Hx(u);case"keypress":return u.which!==32?null:(fu=!0,oy);case"textInput":return a=u.data,a===oy&&fu?null:a;default:return null}}function I1(a,u){if(Rp)return a==="compositionend"||!Sc&&Wx(a,u)?(a=lS(),cO=F2=Ps=null,Rp=!1,a):null;switch(a){case"paste":return null;case"keypress":if(!(u.ctrlKey||u.altKey||u.metaKey)||u.ctrlKey&&u.altKey){if(u.char&&1=u)return{node:p,offset:u-a};a=O}e:{for(;p;){if(p.nextSibling){p=p.nextSibling;break e}p=p.parentNode}p=void 0}p=$2(p)}}function wO(a,u){return a&&u?a===u?!0:a&&a.nodeType===3?!1:u&&u.nodeType===3?wO(a,u.parentNode):"contains"in a?a.contains(u):a.compareDocumentPosition?!!(a.compareDocumentPosition(u)&16):!1:!1}function Vx(){for(var a=window,u=Ju();u instanceof a.HTMLIFrameElement;){try{var p=typeof u.contentWindow.location.href=="string"}catch{p=!1}if(p)a=u.contentWindow;else break;u=Ju(a.document)}return u}function ay(a){var u=a&&a.nodeName&&a.nodeName.toLowerCase();return u&&(u==="input"&&(a.type==="text"||a.type==="search"||a.type==="tel"||a.type==="url"||a.type==="password")||u==="textarea"||a.contentEditable==="true")}var qx=se&&"documentMode"in document&&11>=document.documentMode,A1=null,Ux=null,P0=null,Gx=!1;function pS(a,u,p){var O=p.window===p?p.document:p.nodeType===9?p:p.ownerDocument;Gx||A1==null||A1!==Ju(O)||(O=A1,"selectionStart"in O&&ay(O)?O={start:O.selectionStart,end:O.selectionEnd}:(O=(O.ownerDocument&&O.ownerDocument.defaultView||window).getSelection(),O={anchorNode:O.anchorNode,anchorOffset:O.anchorOffset,focusNode:O.focusNode,focusOffset:O.focusOffset}),P0&&C1(P0,O)||(P0=O,O=cy(Ux,"onSelect"),0z1||(a.current=vi[z1],vi[z1]=null,z1--)}function zi(a,u){z1++,vi[z1]=a.current,a.current=u}var Va={},ja=T0(Va),ea=T0(!1),A0=Va;function M0(a,u){var p=a.type.contextTypes;if(!p)return Va;var O=a.stateNode;if(O&&O.__reactInternalMemoizedUnmaskedChildContext===u)return O.__reactInternalMemoizedMaskedChildContext;var P={},z;for(z in p)P[z]=u[z];return O&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=u,a.__reactInternalMemoizedMaskedChildContext=P),P}function Ml(a){return a=a.childContextTypes,a!=null}function U2(){Ho(ea),Ho(ja)}function Kx(a,u,p){if(ja.current!==Va)throw Error(R(168));zi(ja,u),zi(ea,p)}function Yx(a,u,p){var O=a.stateNode;if(a=u.childContextTypes,typeof O.getChildContext!="function")return p;O=O.getChildContext();for(var P in O)if(!(P in a))throw Error(R(108,Co(u)||"Unknown",P));return S({},p,O)}function N1(a){return a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Va,A0=ja.current,zi(ja,a),zi(ea,ea.current),!0}function Qx(a,u,p){var O=a.stateNode;if(!O)throw Error(R(169));p?(a=Yx(a,u,A0),O.__reactInternalMemoizedMergedChildContext=a,Ho(ea),Ho(ja),zi(ja,a)):Ho(ea),zi(ea,p)}var PO=null,R0=null,jO=C.unstable_runWithPriority,Zx=C.unstable_scheduleCallback,G2=C.unstable_cancelCallback,Qd=C.unstable_shouldYield,vS=C.unstable_requestPaint,J2=C.unstable_now,II=C.unstable_getCurrentPriorityLevel,X2=C.unstable_ImmediatePriority,e_=C.unstable_UserBlockingPriority,t_=C.unstable_NormalPriority,gS=C.unstable_LowPriority,yS=C.unstable_IdlePriority,CO={},kI=vS!==void 0?vS:function(){},Zd=null,K2=null,TO=!1,AO=J2(),To=1e4>AO?J2:function(){return J2()-AO};function hy(){switch(II()){case X2:return 99;case e_:return 98;case t_:return 97;case gS:return 96;case yS:return 95;default:throw Error(R(332))}}function MO(a){switch(a){case 99:return X2;case 98:return e_;case 97:return t_;case 96:return gS;case 95:return yS;default:throw Error(R(332))}}function Lp(a,u){return a=MO(a),jO(a,u)}function L1(a,u,p){return a=MO(a),Zx(a,u,p)}function _f(){if(K2!==null){var a=K2;K2=null,G2(a)}r_()}function r_(){if(!TO&&Zd!==null){TO=!0;var a=0;try{var u=Zd;Lp(99,function(){for(;awr?(Fr=$t,$t=null):Fr=$t.sibling;var zr=$e(qe,$t,Ge[wr],pt);if(zr===null){$t===null&&($t=Fr);break}a&&$t&&zr.alternate===null&&u(qe,$t),Fe=z(zr,Fe,wr),yr===null?ft=zr:yr.sibling=zr,yr=zr,$t=Fr}if(wr===Ge.length)return p(qe,$t),ft;if($t===null){for(;wrwr?(Fr=$t,$t=null):Fr=$t.sibling;var Ns=$e(qe,$t,zr.value,pt);if(Ns===null){$t===null&&($t=Fr);break}a&&$t&&Ns.alternate===null&&u(qe,$t),Fe=z(Ns,Fe,wr),yr===null?ft=Ns:yr.sibling=Ns,yr=Ns,$t=Fr}if(zr.done)return p(qe,$t),ft;if($t===null){for(;!zr.done;wr++,zr=Ge.next())zr=Qe(qe,zr.value,pt),zr!==null&&(Fe=z(zr,Fe,wr),yr===null?ft=zr:yr.sibling=zr,yr=zr);return ft}for($t=O(qe,$t);!zr.done;wr++,zr=Ge.next())zr=mt($t,qe,wr,zr.value,pt),zr!==null&&(a&&zr.alternate!==null&&$t.delete(zr.key===null?wr:zr.key),Fe=z(zr,Fe,wr),yr===null?ft=zr:yr.sibling=zr,yr=zr);return a&&$t.forEach(function(Ls){return u(qe,Ls)}),ft}return function(qe,Fe,Ge,pt){var ft=typeof Ge=="object"&&Ge!==null&&Ge.type===Ze&&Ge.key===null;ft&&(Ge=Ge.props.children);var yr=typeof Ge=="object"&&Ge!==null;if(yr)switch(Ge.$$typeof){case st:e:{for(yr=Ge.key,ft=Fe;ft!==null;){if(ft.key===yr){switch(ft.tag){case 7:if(Ge.type===Ze){p(qe,ft.sibling),Fe=P(ft,Ge.props.children),Fe.return=qe,qe=Fe;break e}break;default:if(ft.elementType===Ge.type){p(qe,ft.sibling),Fe=P(ft,Ge.props),Fe.ref=Zu(qe,ft,Ge),Fe.return=qe,qe=Fe;break e}}p(qe,ft);break}else u(qe,ft);ft=ft.sibling}Ge.type===Ze?(Fe=Xt(Ge.props.children,qe.mode,pt,Ge.key),Fe.return=qe,qe=Fe):(pt=H0(Ge.type,Ge.key,Ge.props,null,qe.mode,pt),pt.ref=Zu(qe,Fe,Ge),pt.return=qe,qe=pt)}return H(qe);case De:e:{for(ft=Ge.key;Fe!==null;){if(Fe.key===ft)if(Fe.tag===4&&Fe.stateNode.containerInfo===Ge.containerInfo&&Fe.stateNode.implementation===Ge.implementation){p(qe,Fe.sibling),Fe=P(Fe,Ge.children||[]),Fe.return=qe,qe=Fe;break e}else{p(qe,Fe);break}else u(qe,Fe);Fe=Fe.sibling}Fe=tv(Ge,qe.mode,pt),Fe.return=qe,qe=Fe}return H(qe)}if(typeof Ge=="string"||typeof Ge=="number")return Ge=""+Ge,Fe!==null&&Fe.tag===6?(p(qe,Fe.sibling),Fe=P(Fe,Ge),Fe.return=qe,qe=Fe):(p(qe,Fe),Fe=Ot(Ge,qe.mode,pt),Fe.return=qe,qe=Fe),H(qe);if(r3(Ge))return It(qe,Fe,Ge,pt);if(dn(Ge))return Ct(qe,Fe,Ge,pt);if(yr&&H1(qe,Ge),typeof Ge>"u"&&!ft)switch(qe.tag){case 1:case 22:case 0:case 11:case 15:throw Error(R(152,Co(qe.type)||"Component"))}return p(qe,Fe)}}var Sf=s_(!0),zO=s_(!1),n3={},Rl=T0(n3),my=T0(n3),vy=T0(n3);function $1(a){if(a===n3)throw Error(R(174));return a}function o3(a,u){switch(zi(vy,u),zi(my,a),zi(Rl,n3),a=u.nodeType,a){case 9:case 11:u=(u=u.documentElement)?u.namespaceURI:Ex(null,"");break;default:a=a===8?u.parentNode:u,u=a.namespaceURI||null,a=a.tagName,u=Ex(u,a)}Ho(Rl),zi(Rl,u)}function V1(){Ho(Rl),Ho(my),Ho(vy)}function l_(a){$1(vy.current);var u=$1(Rl.current),p=Ex(u,a.type);u!==p&&(zi(my,a),zi(Rl,p))}function NO(a){my.current===a&&(Ho(Rl),Ho(my))}var Ni=T0(0);function i3(a){for(var u=a;u!==null;){if(u.tag===13){var p=u.memoizedState;if(p!==null&&(p=p.dehydrated,p===null||p.data==="$?"||p.data==="$!"))return u}else if(u.tag===19&&u.memoizedProps.revealOrder!==void 0){if(u.flags&64)return u}else if(u.child!==null){u.child.return=u,u=u.child;continue}if(u===a)break;for(;u.sibling===null;){if(u.return===null||u.return===a)return null;u=u.return}u.sibling.return=u.return,u=u.sibling}return null}var Ef=null,ec=null,Wp=!1;function LO(a,u){var p=Ac(5,null,null,0);p.elementType="DELETED",p.type="DELETED",p.stateNode=u,p.return=a,p.flags=8,a.lastEffect!==null?(a.lastEffect.nextEffect=p,a.lastEffect=p):a.firstEffect=a.lastEffect=p}function _S(a,u){switch(a.tag){case 5:var p=a.type;return u=u.nodeType!==1||p.toLowerCase()!==u.nodeName.toLowerCase()?null:u,u!==null?(a.stateNode=u,!0):!1;case 6:return u=a.pendingProps===""||u.nodeType!==3?null:u,u!==null?(a.stateNode=u,!0):!1;case 13:return!1;default:return!1}}function a3(a){if(Wp){var u=ec;if(u){var p=u;if(!_S(a,u)){if(u=At(p.nextSibling),!u||!_S(a,u)){a.flags=a.flags&-1025|2,Wp=!1,Ef=a;return}LO(Ef,p)}Ef=a,ec=At(u.firstChild)}else a.flags=a.flags&-1025|2,Wp=!1,Ef=a}}function gy(a){for(a=a.return;a!==null&&a.tag!==5&&a.tag!==3&&a.tag!==13;)a=a.return;Ef=a}function FO(a){if(a!==Ef)return!1;if(!Wp)return gy(a),Wp=!0,!1;var u=a.type;if(a.tag!==5||u!=="head"&&u!=="body"&&!EO(u,a.memoizedProps))for(u=ec;u;)LO(a,u),u=At(u.nextSibling);if(gy(a),a.tag===13){if(a=a.memoizedState,a=a!==null?a.dehydrated:null,!a)throw Error(R(317));e:{for(a=a.nextSibling,u=0;a;){if(a.nodeType===8){var p=a.data;if(p==="/$"){if(u===0){ec=At(a.nextSibling);break e}u--}else p!=="$"&&p!=="$!"&&p!=="$?"||u++}a=a.nextSibling}ec=null}}else ec=Ef?At(a.stateNode.nextSibling):null;return!0}function yy(){ec=Ef=null,Wp=!1}var q1=[];function u_(){for(var a=0;az))throw Error(R(301));z+=1,Cs=al=null,u.updateQueue=null,by.current=h_,a=p(O,P)}while(U1)}if(by.current=c3,u=al!==null&&al.next!==null,kc=0,Cs=al=gi=null,fa=!1,u)throw Error(R(300));return a}function G1(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Cs===null?gi.memoizedState=Cs=a:Cs=Cs.next=a,Cs}function Hp(){if(al===null){var a=gi.alternate;a=a!==null?a.memoizedState:null}else a=al.next;var u=Cs===null?gi.memoizedState:Cs.next;if(u!==null)Cs=u,al=a;else{if(a===null)throw Error(R(310));al=a,a={memoizedState:al.memoizedState,baseState:al.baseState,baseQueue:al.baseQueue,queue:al.queue,next:null},Cs===null?gi.memoizedState=Cs=a:Cs=Cs.next=a}return Cs}function Pc(a,u){return typeof u=="function"?u(a):u}function s3(a){var u=Hp(),p=u.queue;if(p===null)throw Error(R(311));p.lastRenderedReducer=a;var O=al,P=O.baseQueue,z=p.pending;if(z!==null){if(P!==null){var H=P.next;P.next=z.next,z.next=H}O.baseQueue=P=z,p.pending=null}if(P!==null){P=P.next,O=O.baseState;var ee=H=z=null,pe=P;do{var be=pe.lane;if((kc&be)===be)ee!==null&&(ee=ee.next={lane:0,action:pe.action,eagerReducer:pe.eagerReducer,eagerState:pe.eagerState,next:null}),O=pe.eagerReducer===a?pe.eagerState:a(O,pe.action);else{var Ae={lane:be,action:pe.action,eagerReducer:pe.eagerReducer,eagerState:pe.eagerState,next:null};ee===null?(H=ee=Ae,z=O):ee=ee.next=Ae,gi.lanes|=be,L0|=be}pe=pe.next}while(pe!==null&&pe!==P);ee===null?z=O:ee.next=H,Tl(O,u.memoizedState)||(As=!0),u.memoizedState=O,u.baseState=z,u.baseQueue=ee,p.lastRenderedState=O}return[u.memoizedState,p.dispatch]}function D0(a){var u=Hp(),p=u.queue;if(p===null)throw Error(R(311));p.lastRenderedReducer=a;var O=p.dispatch,P=p.pending,z=u.memoizedState;if(P!==null){p.pending=null;var H=P=P.next;do z=a(z,H.action),H=H.next;while(H!==P);Tl(z,u.memoizedState)||(As=!0),u.memoizedState=z,u.baseQueue===null&&(u.baseState=z),p.lastRenderedState=z}return[z,O]}function c_(a,u,p){var O=u._getVersion;O=O(u._source);var P=u._workInProgressVersionPrimary;if(P!==null?a=P===O:(a=a.mutableReadLanes,(a=(kc&a)===a)&&(u._workInProgressVersionPrimary=O,q1.push(u))),a)return p(u._source);throw q1.push(u),Error(R(350))}function SS(a,u,p,O){var P=ra;if(P===null)throw Error(R(349));var z=u._getVersion,H=z(u._source),ee=by.current,pe=ee.useState(function(){return c_(P,u,p)}),be=pe[1],Ae=pe[0];pe=Cs;var Qe=a.memoizedState,$e=Qe.refs,mt=$e.getSnapshot,It=Qe.source;Qe=Qe.subscribe;var Ct=gi;return a.memoizedState={refs:$e,source:u,subscribe:O},ee.useEffect(function(){$e.getSnapshot=p,$e.setSnapshot=be;var qe=z(u._source);if(!Tl(H,qe)){qe=p(u._source),Tl(Ae,qe)||(be(qe),qe=W0(Ct),P.mutableReadLanes|=qe&P.pendingLanes),qe=P.mutableReadLanes,P.entangledLanes|=qe;for(var Fe=P.entanglements,Ge=qe;0p?98:p,function(){a(!0)}),Lp(97<\/script>",a=a.removeChild(a.firstChild)):typeof O.is=="string"?a=H.createElement(p,{is:O.is}):(a=H.createElement(p),p==="select"&&(H=a,O.multiple?H.multiple=!0:O.size&&(H.size=O.size))):a=H.createElementNS(a,p),a[Hn]=u,a[Eo]=O,Q(a,u,!1,!1),u.stateNode=a,H=qw(p,O),p){case"dialog":Ko("cancel",a),Ko("close",a),P=O;break;case"iframe":case"object":case"embed":Ko("load",a),P=O;break;case"video":case"audio":for(P=0;Pqr&&(u.flags|=64,z=!0,Se(O,!1),u.lanes=33554432)}else{if(!z)if(a=i3(H),a!==null){if(u.flags|=64,z=!0,p=a.updateQueue,p!==null&&(u.updateQueue=p,u.flags|=4),Se(O,!0),O.tail===null&&O.tailMode==="hidden"&&!H.alternate&&!Wp)return u=u.lastEffect=O.lastEffect,u!==null&&(u.nextEffect=null),null}else 2*To()-O.renderingStartTime>qr&&p!==1073741824&&(u.flags|=64,z=!0,Se(O,!1),u.lanes=33554432);O.isBackwards?(H.sibling=u.child,u.child=H):(p=O.last,p!==null?p.sibling=H:u.child=H,O.last=H)}return O.tail!==null?(p=O.tail,O.rendering=p,O.tail=p.sibling,O.lastEffect=u.lastEffect,O.renderingStartTime=To(),p.sibling=null,u=Ni.current,zi(Ni,z?u&1|2:u&1),p):null;case 23:case 24:return DS(),a!==null&&a.memoizedState!==null!=(u.memoizedState!==null)&&O.mode!=="unstable-defer-without-hiding"&&(u.flags|=4),null}throw Error(R(156,u.tag))}function Xe(a){switch(a.tag){case 1:Ml(a.type)&&U2();var u=a.flags;return u&4096?(a.flags=u&-4097|64,a):null;case 3:if(V1(),Ho(ea),Ho(ja),u_(),u=a.flags,u&64)throw Error(R(285));return a.flags=u&-4097|64,a;case 5:return NO(a),null;case 13:return Ho(Ni),u=a.flags,u&4096?(a.flags=u&-4097|64,a):null;case 19:return Ho(Ni),null;case 4:return V1(),null;case 10:return n_(a),null;case 23:case 24:return DS(),null;default:return null}}function et(a,u){try{var p="",O=u;do p+=In(O),O=O.return;while(O);var P=p}catch(z){P=` +`+P[H].replace(" at new "," at ");while(1<=H&&0<=ee);break}}}finally{jo=!1,Error.prepareStackTrace=p}return(a=a?a.displayName||a.name:"")?Kr(a):""}function In(a){switch(a.tag){case 5:return Kr(a.type);case 16:return Kr("Lazy");case 13:return Kr("Suspense");case 19:return Kr("SuspenseList");case 0:case 2:case 15:return a=cs(a.type,!1),a;case 11:return a=cs(a.type.render,!1),a;case 22:return a=cs(a.type._render,!1),a;case 1:return a=cs(a.type,!0),a;default:return""}}function Co(a){if(a==null)return null;if(typeof a=="function")return a.displayName||a.name||null;if(typeof a=="string")return a;switch(a){case Ze:return"Fragment";case De:return"Portal";case gt:return"Profiler";case ct:return"StrictMode";case Tr:return"Suspense";case _r:return"SuspenseList"}if(typeof a=="object")switch(a.$$typeof){case zt:return(a.displayName||"Context")+".Consumer";case Et:return(a._context.displayName||"Context")+".Provider";case Yt:var u=a.render;return u=u.displayName||u.name||"",a.displayName||(u!==""?"ForwardRef("+u+")":"ForwardRef");case Zr:return Co(a.type);case Bt:return Co(a._render);case at:u=a._payload,a=a._init;try{return Co(a(u))}catch{}}return null}function mi(a){switch(typeof a){case"boolean":case"number":case"object":case"string":case"undefined":return a;default:return""}}function p0(a){var u=a.type;return(a=a.nodeName)&&a.toLowerCase()==="input"&&(u==="checkbox"||u==="radio")}function nl(a){var u=p0(a)?"checked":"value",p=Object.getOwnPropertyDescriptor(a.constructor.prototype,u),O=""+a[u];if(!a.hasOwnProperty(u)&&typeof p<"u"&&typeof p.get=="function"&&typeof p.set=="function"){var P=p.get,z=p.set;return Object.defineProperty(a,u,{configurable:!0,get:function(){return P.call(this)},set:function(H){O=""+H,z.call(this,H)}}),Object.defineProperty(a,u,{enumerable:p.enumerable}),{getValue:function(){return O},setValue:function(H){O=""+H},stopTracking:function(){a._valueTracker=null,delete a[u]}}}}function ca(a){a._valueTracker||(a._valueTracker=nl(a))}function Gu(a){if(!a)return!1;var u=a._valueTracker;if(!u)return!0;var p=u.getValue(),O="";return a&&(O=p0(a)?a.checked?"true":"false":a.value),a=O,a!==p?(u.setValue(a),!0):!1}function Ju(a){if(a=a||(typeof document<"u"?document:void 0),typeof a>"u")return null;try{return a.activeElement||a.body}catch{return a.body}}function gf(a,u){var p=u.checked;return S({},u,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:p??a._wrapperState.initialChecked})}function Ld(a,u){var p=u.defaultValue==null?"":u.defaultValue,O=u.checked!=null?u.checked:u.defaultChecked;p=mi(u.value!=null?u.value:p),a._wrapperState={initialChecked:O,initialValue:p,controlled:u.type==="checkbox"||u.type==="radio"?u.checked!=null:u.value!=null}}function yf(a,u){u=u.checked,u!=null&&it(a,"checked",u,!1)}function ks(a,u){yf(a,u);var p=mi(u.value),O=u.type;if(p!=null)O==="number"?(p===0&&a.value===""||a.value!=p)&&(a.value=""+p):a.value!==""+p&&(a.value=""+p);else if(O==="submit"||O==="reset"){a.removeAttribute("value");return}u.hasOwnProperty("value")?ol(a,u.type,p):u.hasOwnProperty("defaultValue")&&ol(a,u.type,mi(u.defaultValue)),u.checked==null&&u.defaultChecked!=null&&(a.defaultChecked=!!u.defaultChecked)}function Fd(a,u,p){if(u.hasOwnProperty("value")||u.hasOwnProperty("defaultValue")){var O=u.type;if(!(O!=="submit"&&O!=="reset"||u.value!==void 0&&u.value!==null))return;u=""+a._wrapperState.initialValue,p||u===a.value||(a.value=u),a.defaultValue=u}p=a.name,p!==""&&(a.name=""),a.defaultChecked=!!a._wrapperState.initialChecked,p!==""&&(a.name=p)}function ol(a,u,p){(u!=="number"||Ju(a.ownerDocument)!==a)&&(p==null?a.defaultValue=""+a._wrapperState.initialValue:a.defaultValue!==""+p&&(a.defaultValue=""+p))}function Sx(a){var u="";return w.Children.forEach(a,function(p){p!=null&&(u+=p)}),u}function $g(a,u){return a=S({children:void 0},u),(u=Sx(u.children))&&(a.children=u),a}function Sp(a,u,p,O){if(a=a.options,u){u={};for(var P=0;P=p.length))throw Error(R(93));p=p[0]}u=p}u==null&&(u=""),p=u}a._wrapperState={initialValue:mi(p)}}function Hw(a,u){var p=mi(u.value),O=mi(u.defaultValue);p!=null&&(p=""+p,p!==a.value&&(a.value=p),u.defaultValue==null&&a.defaultValue!==p&&(a.defaultValue=p)),O!=null&&(a.defaultValue=""+O)}function Bd(a){var u=a.textContent;u===a._wrapperState.initialValue&&u!==""&&u!==null&&(a.value=u)}var I2={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function X8(a){switch(a){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Ex(a,u){return a==null||a==="http://www.w3.org/1999/xhtml"?X8(u):a==="http://www.w3.org/2000/svg"&&u==="foreignObject"?"http://www.w3.org/1999/xhtml":a}var $w,d0=function(a){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(u,p,O,P){MSApp.execUnsafeLocalFunction(function(){return a(u,p,O,P)})}:a}(function(a,u){if(a.namespaceURI!==I2.svg||"innerHTML"in a)a.innerHTML=u;else{for($w=$w||document.createElement("div"),$w.innerHTML=""+u.valueOf().toString()+"",u=$w.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;u.firstChild;)a.appendChild(u.firstChild)}});function k2(a,u){if(u){var p=a.firstChild;if(p&&p===a.lastChild&&p.nodeType===3){p.nodeValue=u;return}}a.textContent=u}var h0={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},K8=["Webkit","ms","Moz","O"];Object.keys(h0).forEach(function(a){K8.forEach(function(u){u=u+a.charAt(0).toUpperCase()+a.substring(1),h0[u]=h0[a]})});function Vw(a,u,p){return u==null||typeof u=="boolean"||u===""?"":p||typeof u!="number"||u===0||h0.hasOwnProperty(a)&&h0[a]?(""+u).trim():u+"px"}function Vg(a,u){a=a.style;for(var p in u)if(u.hasOwnProperty(p)){var O=p.indexOf("--")===0,P=Vw(p,u[p],O);p==="float"&&(p="cssFloat"),O?a.setProperty(p,P):a[p]=P}}var bf=S({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Di(a,u){if(u){if(bf[a]&&(u.children!=null||u.dangerouslySetInnerHTML!=null))throw Error(R(137,a));if(u.dangerouslySetInnerHTML!=null){if(u.children!=null)throw Error(R(60));if(!(typeof u.dangerouslySetInnerHTML=="object"&&"__html"in u.dangerouslySetInnerHTML))throw Error(R(61))}if(u.style!=null&&typeof u.style!="object")throw Error(R(62))}}function qw(a,u){if(a.indexOf("-")===-1)return typeof u.is=="string";switch(a){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Ep(a){return a=a.target||a.srcElement||window,a.correspondingUseElement&&(a=a.correspondingUseElement),a.nodeType===3?a.parentNode:a}var m0=null,wn=null,Lr=null;function kl(a){if(a=Np(a)){if(typeof m0!="function")throw Error(R(280));var u=a.stateNode;u&&(u=Al(u),m0(a.stateNode,a.type,u))}}function Ia(a){wn?Lr?Lr.push(a):Lr=[a]:wn=a}function Wd(){if(wn){var a=wn,u=Lr;if(Lr=wn=null,kl(a),u)for(a=0;aO?0:1<p;p++)u.push(a);return u}function N2(a,u,p){a.pendingLanes|=u;var O=u-1;a.suspendedLanes&=O,a.pingedLanes&=O,a=a.eventTimes,u=31-Cp(u),a[u]=p}var Cp=Math.clz32?Math.clz32:aS,iS=Math.log,aO=Math.LN2;function aS(a){return a===0?32:31-(iS(a)/aO|0)|0}var sO=C.unstable_UserBlockingPriority,sS=C.unstable_runWithPriority,Zg=!0;function lO(a,u,p,O){g1||Ix();var P=L2,z=g1;g1=!0;try{Hd(P,a,u,p,O)}finally{(g1=z)||So()}}function uO(a,u,p,O){sS(sO,L2.bind(null,a,u,p,O))}function L2(a,u,p,O){if(Zg){var P;if((P=(u&4)===0)&&0=_0),oy=String.fromCharCode(32),fu=!1;function Wx(a,u){switch(a){case"keyup":return H2.indexOf(u.keyCode)!==-1;case"keydown":return u.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hx(a){return a=a.detail,typeof a=="object"&&"data"in a?a.data:null}var Rp=!1;function yO(a,u){switch(a){case"compositionend":return Hx(u);case"keypress":return u.which!==32?null:(fu=!0,oy);case"textInput":return a=u.data,a===oy&&fu?null:a;default:return null}}function I1(a,u){if(Rp)return a==="compositionend"||!Sc&&Wx(a,u)?(a=lS(),cO=F2=Ps=null,Rp=!1,a):null;switch(a){case"paste":return null;case"keypress":if(!(u.ctrlKey||u.altKey||u.metaKey)||u.ctrlKey&&u.altKey){if(u.char&&1=u)return{node:p,offset:u-a};a=O}e:{for(;p;){if(p.nextSibling){p=p.nextSibling;break e}p=p.parentNode}p=void 0}p=$2(p)}}function wO(a,u){return a&&u?a===u?!0:a&&a.nodeType===3?!1:u&&u.nodeType===3?wO(a,u.parentNode):"contains"in a?a.contains(u):a.compareDocumentPosition?!!(a.compareDocumentPosition(u)&16):!1:!1}function Vx(){for(var a=window,u=Ju();u instanceof a.HTMLIFrameElement;){try{var p=typeof u.contentWindow.location.href=="string"}catch{p=!1}if(p)a=u.contentWindow;else break;u=Ju(a.document)}return u}function ay(a){var u=a&&a.nodeName&&a.nodeName.toLowerCase();return u&&(u==="input"&&(a.type==="text"||a.type==="search"||a.type==="tel"||a.type==="url"||a.type==="password")||u==="textarea"||a.contentEditable==="true")}var qx=se&&"documentMode"in document&&11>=document.documentMode,A1=null,Ux=null,P0=null,Gx=!1;function pS(a,u,p){var O=p.window===p?p.document:p.nodeType===9?p:p.ownerDocument;Gx||A1==null||A1!==Ju(O)||(O=A1,"selectionStart"in O&&ay(O)?O={start:O.selectionStart,end:O.selectionEnd}:(O=(O.ownerDocument&&O.ownerDocument.defaultView||window).getSelection(),O={anchorNode:O.anchorNode,anchorOffset:O.anchorOffset,focusNode:O.focusNode,focusOffset:O.focusOffset}),P0&&C1(P0,O)||(P0=O,O=cy(Ux,"onSelect"),0z1||(a.current=vi[z1],vi[z1]=null,z1--)}function zi(a,u){z1++,vi[z1]=a.current,a.current=u}var Va={},ja=T0(Va),ea=T0(!1),A0=Va;function M0(a,u){var p=a.type.contextTypes;if(!p)return Va;var O=a.stateNode;if(O&&O.__reactInternalMemoizedUnmaskedChildContext===u)return O.__reactInternalMemoizedMaskedChildContext;var P={},z;for(z in p)P[z]=u[z];return O&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=u,a.__reactInternalMemoizedMaskedChildContext=P),P}function Ml(a){return a=a.childContextTypes,a!=null}function U2(){Ho(ea),Ho(ja)}function Kx(a,u,p){if(ja.current!==Va)throw Error(R(168));zi(ja,u),zi(ea,p)}function Yx(a,u,p){var O=a.stateNode;if(a=u.childContextTypes,typeof O.getChildContext!="function")return p;O=O.getChildContext();for(var P in O)if(!(P in a))throw Error(R(108,Co(u)||"Unknown",P));return S({},p,O)}function N1(a){return a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Va,A0=ja.current,zi(ja,a),zi(ea,ea.current),!0}function Qx(a,u,p){var O=a.stateNode;if(!O)throw Error(R(169));p?(a=Yx(a,u,A0),O.__reactInternalMemoizedMergedChildContext=a,Ho(ea),Ho(ja),zi(ja,a)):Ho(ea),zi(ea,p)}var PO=null,R0=null,jO=C.unstable_runWithPriority,Zx=C.unstable_scheduleCallback,G2=C.unstable_cancelCallback,Qd=C.unstable_shouldYield,vS=C.unstable_requestPaint,J2=C.unstable_now,II=C.unstable_getCurrentPriorityLevel,X2=C.unstable_ImmediatePriority,e_=C.unstable_UserBlockingPriority,t_=C.unstable_NormalPriority,gS=C.unstable_LowPriority,yS=C.unstable_IdlePriority,CO={},kI=vS!==void 0?vS:function(){},Zd=null,K2=null,TO=!1,AO=J2(),To=1e4>AO?J2:function(){return J2()-AO};function hy(){switch(II()){case X2:return 99;case e_:return 98;case t_:return 97;case gS:return 96;case yS:return 95;default:throw Error(R(332))}}function MO(a){switch(a){case 99:return X2;case 98:return e_;case 97:return t_;case 96:return gS;case 95:return yS;default:throw Error(R(332))}}function Lp(a,u){return a=MO(a),jO(a,u)}function L1(a,u,p){return a=MO(a),Zx(a,u,p)}function _f(){if(K2!==null){var a=K2;K2=null,G2(a)}r_()}function r_(){if(!TO&&Zd!==null){TO=!0;var a=0;try{var u=Zd;Lp(99,function(){for(;awr?(Fr=$t,$t=null):Fr=$t.sibling;var zr=$e(qe,$t,Ge[wr],pt);if(zr===null){$t===null&&($t=Fr);break}a&&$t&&zr.alternate===null&&u(qe,$t),Fe=z(zr,Fe,wr),yr===null?ft=zr:yr.sibling=zr,yr=zr,$t=Fr}if(wr===Ge.length)return p(qe,$t),ft;if($t===null){for(;wrwr?(Fr=$t,$t=null):Fr=$t.sibling;var Ns=$e(qe,$t,zr.value,pt);if(Ns===null){$t===null&&($t=Fr);break}a&&$t&&Ns.alternate===null&&u(qe,$t),Fe=z(Ns,Fe,wr),yr===null?ft=Ns:yr.sibling=Ns,yr=Ns,$t=Fr}if(zr.done)return p(qe,$t),ft;if($t===null){for(;!zr.done;wr++,zr=Ge.next())zr=Qe(qe,zr.value,pt),zr!==null&&(Fe=z(zr,Fe,wr),yr===null?ft=zr:yr.sibling=zr,yr=zr);return ft}for($t=O(qe,$t);!zr.done;wr++,zr=Ge.next())zr=mt($t,qe,wr,zr.value,pt),zr!==null&&(a&&zr.alternate!==null&&$t.delete(zr.key===null?wr:zr.key),Fe=z(zr,Fe,wr),yr===null?ft=zr:yr.sibling=zr,yr=zr);return a&&$t.forEach(function(Ls){return u(qe,Ls)}),ft}return function(qe,Fe,Ge,pt){var ft=typeof Ge=="object"&&Ge!==null&&Ge.type===Ze&&Ge.key===null;ft&&(Ge=Ge.props.children);var yr=typeof Ge=="object"&&Ge!==null;if(yr)switch(Ge.$$typeof){case st:e:{for(yr=Ge.key,ft=Fe;ft!==null;){if(ft.key===yr){switch(ft.tag){case 7:if(Ge.type===Ze){p(qe,ft.sibling),Fe=P(ft,Ge.props.children),Fe.return=qe,qe=Fe;break e}break;default:if(ft.elementType===Ge.type){p(qe,ft.sibling),Fe=P(ft,Ge.props),Fe.ref=Zu(qe,ft,Ge),Fe.return=qe,qe=Fe;break e}}p(qe,ft);break}else u(qe,ft);ft=ft.sibling}Ge.type===Ze?(Fe=Xt(Ge.props.children,qe.mode,pt,Ge.key),Fe.return=qe,qe=Fe):(pt=H0(Ge.type,Ge.key,Ge.props,null,qe.mode,pt),pt.ref=Zu(qe,Fe,Ge),pt.return=qe,qe=pt)}return H(qe);case De:e:{for(ft=Ge.key;Fe!==null;){if(Fe.key===ft)if(Fe.tag===4&&Fe.stateNode.containerInfo===Ge.containerInfo&&Fe.stateNode.implementation===Ge.implementation){p(qe,Fe.sibling),Fe=P(Fe,Ge.children||[]),Fe.return=qe,qe=Fe;break e}else{p(qe,Fe);break}else u(qe,Fe);Fe=Fe.sibling}Fe=tv(Ge,qe.mode,pt),Fe.return=qe,qe=Fe}return H(qe)}if(typeof Ge=="string"||typeof Ge=="number")return Ge=""+Ge,Fe!==null&&Fe.tag===6?(p(qe,Fe.sibling),Fe=P(Fe,Ge),Fe.return=qe,qe=Fe):(p(qe,Fe),Fe=Ot(Ge,qe.mode,pt),Fe.return=qe,qe=Fe),H(qe);if(r3(Ge))return It(qe,Fe,Ge,pt);if(dn(Ge))return Ct(qe,Fe,Ge,pt);if(yr&&H1(qe,Ge),typeof Ge>"u"&&!ft)switch(qe.tag){case 1:case 22:case 0:case 11:case 15:throw Error(R(152,Co(qe.type)||"Component"))}return p(qe,Fe)}}var Sf=s_(!0),zO=s_(!1),n3={},Rl=T0(n3),my=T0(n3),vy=T0(n3);function $1(a){if(a===n3)throw Error(R(174));return a}function o3(a,u){switch(zi(vy,u),zi(my,a),zi(Rl,n3),a=u.nodeType,a){case 9:case 11:u=(u=u.documentElement)?u.namespaceURI:Ex(null,"");break;default:a=a===8?u.parentNode:u,u=a.namespaceURI||null,a=a.tagName,u=Ex(u,a)}Ho(Rl),zi(Rl,u)}function V1(){Ho(Rl),Ho(my),Ho(vy)}function l_(a){$1(vy.current);var u=$1(Rl.current),p=Ex(u,a.type);u!==p&&(zi(my,a),zi(Rl,p))}function NO(a){my.current===a&&(Ho(Rl),Ho(my))}var Ni=T0(0);function i3(a){for(var u=a;u!==null;){if(u.tag===13){var p=u.memoizedState;if(p!==null&&(p=p.dehydrated,p===null||p.data==="$?"||p.data==="$!"))return u}else if(u.tag===19&&u.memoizedProps.revealOrder!==void 0){if(u.flags&64)return u}else if(u.child!==null){u.child.return=u,u=u.child;continue}if(u===a)break;for(;u.sibling===null;){if(u.return===null||u.return===a)return null;u=u.return}u.sibling.return=u.return,u=u.sibling}return null}var Ef=null,ec=null,Wp=!1;function LO(a,u){var p=Ac(5,null,null,0);p.elementType="DELETED",p.type="DELETED",p.stateNode=u,p.return=a,p.flags=8,a.lastEffect!==null?(a.lastEffect.nextEffect=p,a.lastEffect=p):a.firstEffect=a.lastEffect=p}function _S(a,u){switch(a.tag){case 5:var p=a.type;return u=u.nodeType!==1||p.toLowerCase()!==u.nodeName.toLowerCase()?null:u,u!==null?(a.stateNode=u,!0):!1;case 6:return u=a.pendingProps===""||u.nodeType!==3?null:u,u!==null?(a.stateNode=u,!0):!1;case 13:return!1;default:return!1}}function a3(a){if(Wp){var u=ec;if(u){var p=u;if(!_S(a,u)){if(u=Mt(p.nextSibling),!u||!_S(a,u)){a.flags=a.flags&-1025|2,Wp=!1,Ef=a;return}LO(Ef,p)}Ef=a,ec=Mt(u.firstChild)}else a.flags=a.flags&-1025|2,Wp=!1,Ef=a}}function gy(a){for(a=a.return;a!==null&&a.tag!==5&&a.tag!==3&&a.tag!==13;)a=a.return;Ef=a}function FO(a){if(a!==Ef)return!1;if(!Wp)return gy(a),Wp=!0,!1;var u=a.type;if(a.tag!==5||u!=="head"&&u!=="body"&&!EO(u,a.memoizedProps))for(u=ec;u;)LO(a,u),u=Mt(u.nextSibling);if(gy(a),a.tag===13){if(a=a.memoizedState,a=a!==null?a.dehydrated:null,!a)throw Error(R(317));e:{for(a=a.nextSibling,u=0;a;){if(a.nodeType===8){var p=a.data;if(p==="/$"){if(u===0){ec=Mt(a.nextSibling);break e}u--}else p!=="$"&&p!=="$!"&&p!=="$?"||u++}a=a.nextSibling}ec=null}}else ec=Ef?Mt(a.stateNode.nextSibling):null;return!0}function yy(){ec=Ef=null,Wp=!1}var q1=[];function u_(){for(var a=0;az))throw Error(R(301));z+=1,Cs=al=null,u.updateQueue=null,by.current=h_,a=p(O,P)}while(U1)}if(by.current=c3,u=al!==null&&al.next!==null,kc=0,Cs=al=gi=null,fa=!1,u)throw Error(R(300));return a}function G1(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return Cs===null?gi.memoizedState=Cs=a:Cs=Cs.next=a,Cs}function Hp(){if(al===null){var a=gi.alternate;a=a!==null?a.memoizedState:null}else a=al.next;var u=Cs===null?gi.memoizedState:Cs.next;if(u!==null)Cs=u,al=a;else{if(a===null)throw Error(R(310));al=a,a={memoizedState:al.memoizedState,baseState:al.baseState,baseQueue:al.baseQueue,queue:al.queue,next:null},Cs===null?gi.memoizedState=Cs=a:Cs=Cs.next=a}return Cs}function Pc(a,u){return typeof u=="function"?u(a):u}function s3(a){var u=Hp(),p=u.queue;if(p===null)throw Error(R(311));p.lastRenderedReducer=a;var O=al,P=O.baseQueue,z=p.pending;if(z!==null){if(P!==null){var H=P.next;P.next=z.next,z.next=H}O.baseQueue=P=z,p.pending=null}if(P!==null){P=P.next,O=O.baseState;var ee=H=z=null,pe=P;do{var be=pe.lane;if((kc&be)===be)ee!==null&&(ee=ee.next={lane:0,action:pe.action,eagerReducer:pe.eagerReducer,eagerState:pe.eagerState,next:null}),O=pe.eagerReducer===a?pe.eagerState:a(O,pe.action);else{var Ae={lane:be,action:pe.action,eagerReducer:pe.eagerReducer,eagerState:pe.eagerState,next:null};ee===null?(H=ee=Ae,z=O):ee=ee.next=Ae,gi.lanes|=be,L0|=be}pe=pe.next}while(pe!==null&&pe!==P);ee===null?z=O:ee.next=H,Tl(O,u.memoizedState)||(As=!0),u.memoizedState=O,u.baseState=z,u.baseQueue=ee,p.lastRenderedState=O}return[u.memoizedState,p.dispatch]}function D0(a){var u=Hp(),p=u.queue;if(p===null)throw Error(R(311));p.lastRenderedReducer=a;var O=p.dispatch,P=p.pending,z=u.memoizedState;if(P!==null){p.pending=null;var H=P=P.next;do z=a(z,H.action),H=H.next;while(H!==P);Tl(z,u.memoizedState)||(As=!0),u.memoizedState=z,u.baseQueue===null&&(u.baseState=z),p.lastRenderedState=z}return[z,O]}function c_(a,u,p){var O=u._getVersion;O=O(u._source);var P=u._workInProgressVersionPrimary;if(P!==null?a=P===O:(a=a.mutableReadLanes,(a=(kc&a)===a)&&(u._workInProgressVersionPrimary=O,q1.push(u))),a)return p(u._source);throw q1.push(u),Error(R(350))}function SS(a,u,p,O){var P=ra;if(P===null)throw Error(R(349));var z=u._getVersion,H=z(u._source),ee=by.current,pe=ee.useState(function(){return c_(P,u,p)}),be=pe[1],Ae=pe[0];pe=Cs;var Qe=a.memoizedState,$e=Qe.refs,mt=$e.getSnapshot,It=Qe.source;Qe=Qe.subscribe;var Ct=gi;return a.memoizedState={refs:$e,source:u,subscribe:O},ee.useEffect(function(){$e.getSnapshot=p,$e.setSnapshot=be;var qe=z(u._source);if(!Tl(H,qe)){qe=p(u._source),Tl(Ae,qe)||(be(qe),qe=W0(Ct),P.mutableReadLanes|=qe&P.pendingLanes),qe=P.mutableReadLanes,P.entangledLanes|=qe;for(var Fe=P.entanglements,Ge=qe;0p?98:p,function(){a(!0)}),Lp(97<\/script>",a=a.removeChild(a.firstChild)):typeof O.is=="string"?a=H.createElement(p,{is:O.is}):(a=H.createElement(p),p==="select"&&(H=a,O.multiple?H.multiple=!0:O.size&&(H.size=O.size))):a=H.createElementNS(a,p),a[Hn]=u,a[Eo]=O,Q(a,u,!1,!1),u.stateNode=a,H=qw(p,O),p){case"dialog":Ko("cancel",a),Ko("close",a),P=O;break;case"iframe":case"object":case"embed":Ko("load",a),P=O;break;case"video":case"audio":for(P=0;Pqr&&(u.flags|=64,z=!0,Se(O,!1),u.lanes=33554432)}else{if(!z)if(a=i3(H),a!==null){if(u.flags|=64,z=!0,p=a.updateQueue,p!==null&&(u.updateQueue=p,u.flags|=4),Se(O,!0),O.tail===null&&O.tailMode==="hidden"&&!H.alternate&&!Wp)return u=u.lastEffect=O.lastEffect,u!==null&&(u.nextEffect=null),null}else 2*To()-O.renderingStartTime>qr&&p!==1073741824&&(u.flags|=64,z=!0,Se(O,!1),u.lanes=33554432);O.isBackwards?(H.sibling=u.child,u.child=H):(p=O.last,p!==null?p.sibling=H:u.child=H,O.last=H)}return O.tail!==null?(p=O.tail,O.rendering=p,O.tail=p.sibling,O.lastEffect=u.lastEffect,O.renderingStartTime=To(),p.sibling=null,u=Ni.current,zi(Ni,z?u&1|2:u&1),p):null;case 23:case 24:return DS(),a!==null&&a.memoizedState!==null!=(u.memoizedState!==null)&&O.mode!=="unstable-defer-without-hiding"&&(u.flags|=4),null}throw Error(R(156,u.tag))}function Xe(a){switch(a.tag){case 1:Ml(a.type)&&U2();var u=a.flags;return u&4096?(a.flags=u&-4097|64,a):null;case 3:if(V1(),Ho(ea),Ho(ja),u_(),u=a.flags,u&64)throw Error(R(285));return a.flags=u&-4097|64,a;case 5:return NO(a),null;case 13:return Ho(Ni),u=a.flags,u&4096?(a.flags=u&-4097|64,a):null;case 19:return Ho(Ni),null;case 4:return V1(),null;case 10:return n_(a),null;case 23:case 24:return DS(),null;default:return null}}function et(a,u){try{var p="",O=u;do p+=In(O),O=O.return;while(O);var P=p}catch(z){P=` Error generating stack: `+z.message+` `+z.stack}return{value:a,source:u,stack:P}}function jt(a,u){try{console.error(u.value)}catch(p){setTimeout(function(){throw p})}}var Wt=typeof WeakMap=="function"?WeakMap:Map;function dr(a,u,p){p=Fp(-1,p),p.tag=3,p.payload={element:null};var O=u.value;return p.callback=function(){ps||(ps=!0,sl=O),jt(a,u)},p}function cr(a,u,p){p=Fp(-1,p),p.tag=3;var O=a.type.getDerivedStateFromError;if(typeof O=="function"){var P=u.value;p.payload=function(){return jt(a,u),O(P)}}var z=a.stateNode;return z!==null&&typeof z.componentDidCatch=="function"&&(p.callback=function(){typeof O!="function"&&(zs===null?zs=new Set([this]):zs.add(this),jt(a,u));var H=u.stack;this.componentDidCatch(u.value,{componentStack:H!==null?H:""})}),p}var Dr=typeof WeakSet=="function"?WeakSet:Set;function en(a){var u=a.ref;if(u!==null)if(typeof u=="function")try{u(null)}catch(p){ev(a,p)}else u.current=null}function jr(a,u){switch(u.tag){case 0:case 11:case 15:case 22:return;case 1:if(u.flags&256&&a!==null){var p=a.memoizedProps,O=a.memoizedState;a=u.stateNode,u=a.getSnapshotBeforeUpdate(u.elementType===u.type?p:qa(u.type,p),O),a.__reactInternalSnapshotBeforeUpdate=u}return;case 3:u.flags&256&&fy(u.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(R(163))}function po(a,u,p){switch(p.tag){case 0:case 11:case 15:case 22:if(u=p.updateQueue,u=u!==null?u.lastEffect:null,u!==null){a=u=u.next;do{if((a.tag&3)===3){var O=a.create;a.destroy=O()}a=a.next}while(a!==u)}if(u=p.updateQueue,u=u!==null?u.lastEffect:null,u!==null){a=u=u.next;do{var P=a;O=P.next,P=P.tag,P&4&&P&1&&(lP(p,a),QC(p,a)),a=O}while(a!==u)}return;case 1:a=p.stateNode,p.flags&4&&(u===null?a.componentDidMount():(O=p.elementType===p.type?u.memoizedProps:qa(p.type,u.memoizedProps),a.componentDidUpdate(O,u.memoizedState,a.__reactInternalSnapshotBeforeUpdate))),u=p.updateQueue,u!==null&&bS(p,u,a);return;case 3:if(u=p.updateQueue,u!==null){if(a=null,p.child!==null)switch(p.child.tag){case 5:a=p.child.stateNode;break;case 1:a=p.child.stateNode}bS(p,u,a)}return;case 5:a=p.stateNode,u===null&&p.flags&4&&mS(p.type,p.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:p.memoizedState===null&&(p=p.alternate,p!==null&&(p=p.memoizedState,p!==null&&(p=p.dehydrated,p!==null&&y0(p))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(R(163))}function ho(a,u){for(var p=a;;){if(p.tag===5){var O=p.stateNode;if(u)O=O.style,typeof O.setProperty=="function"?O.setProperty("display","none","important"):O.display="none";else{O=p.stateNode;var P=p.memoizedProps.style;P=P!=null&&P.hasOwnProperty("display")?P.display:null,O.style.display=Vw("display",P)}}else if(p.tag===6)p.stateNode.nodeValue=u?"":p.memoizedProps;else if((p.tag!==23&&p.tag!==24||p.memoizedState===null||p===a)&&p.child!==null){p.child.return=p,p=p.child;continue}if(p===a)break;for(;p.sibling===null;){if(p.return===null||p.return===a)return;p=p.return}p.sibling.return=p.return,p=p.sibling}}function zo(a,u){if(R0&&typeof R0.onCommitFiberUnmount=="function")try{R0.onCommitFiberUnmount(PO,u)}catch{}switch(u.tag){case 0:case 11:case 14:case 15:case 22:if(a=u.updateQueue,a!==null&&(a=a.lastEffect,a!==null)){var p=a=a.next;do{var O=p,P=O.destroy;if(O=O.tag,P!==void 0)if(O&4)lP(u,p);else{O=u;try{P()}catch(z){ev(O,z)}}p=p.next}while(p!==a)}break;case 1:if(en(u),a=u.stateNode,typeof a.componentWillUnmount=="function")try{a.props=u.memoizedProps,a.state=u.memoizedState,a.componentWillUnmount()}catch(z){ev(u,z)}break;case 5:en(u);break;case 4:Sy(a,u)}}function ta(a){a.alternate=null,a.child=null,a.dependencies=null,a.firstEffect=null,a.lastEffect=null,a.memoizedProps=null,a.memoizedState=null,a.pendingProps=null,a.return=null,a.updateQueue=null}function io(a){return a.tag===5||a.tag===3||a.tag===4}function Rs(a){e:{for(var u=a.return;u!==null;){if(io(u))break e;u=u.return}throw Error(R(160))}var p=u;switch(u=p.stateNode,p.tag){case 5:var O=!1;break;case 3:u=u.containerInfo,O=!0;break;case 4:u=u.containerInfo,O=!0;break;default:throw Error(R(161))}p.flags&16&&(k2(u,""),p.flags&=-17);e:t:for(p=a;;){for(;p.sibling===null;){if(p.return===null||io(p.return)){p=null;break e}p=p.return}for(p.sibling.return=p.return,p=p.sibling;p.tag!==5&&p.tag!==6&&p.tag!==18;){if(p.flags&2||p.child===null||p.tag===4)continue t;p.child.return=p,p=p.child}if(!(p.flags&2)){p=p.stateNode;break e}}O?Ds(a,p,u):kf(a,p,u)}function Ds(a,u,p){var O=a.tag,P=O===5||O===6;if(P)a=P?a.stateNode:a.stateNode.instance,u?p.nodeType===8?p.parentNode.insertBefore(a,u):p.insertBefore(a,u):(p.nodeType===8?(u=p.parentNode,u.insertBefore(a,p)):(u=p,u.appendChild(a)),p=p._reactRootContainer,p!=null||u.onclick!==null||(u.onclick=_O));else if(O!==4&&(a=a.child,a!==null))for(Ds(a,u,p),a=a.sibling;a!==null;)Ds(a,u,p),a=a.sibling}function kf(a,u,p){var O=a.tag,P=O===5||O===6;if(P)a=P?a.stateNode:a.stateNode.instance,u?p.insertBefore(a,u):p.appendChild(a);else if(O!==4&&(a=a.child,a!==null))for(kf(a,u,p),a=a.sibling;a!==null;)kf(a,u,p),a=a.sibling}function Sy(a,u){for(var p=u,O=!1,P,z;;){if(!O){O=p.return;e:for(;;){if(O===null)throw Error(R(160));switch(P=O.stateNode,O.tag){case 5:z=!1;break e;case 3:P=P.containerInfo,z=!0;break e;case 4:P=P.containerInfo,z=!0;break e}O=O.return}O=!0}if(p.tag===5||p.tag===6){e:for(var H=a,ee=p,pe=ee;;)if(zo(H,pe),pe.child!==null&&pe.tag!==4)pe.child.return=pe,pe=pe.child;else{if(pe===ee)break e;for(;pe.sibling===null;){if(pe.return===null||pe.return===ee)break e;pe=pe.return}pe.sibling.return=pe.return,pe=pe.sibling}z?(H=P,ee=p.stateNode,H.nodeType===8?H.parentNode.removeChild(ee):H.removeChild(ee)):P.removeChild(p.stateNode)}else if(p.tag===4){if(p.child!==null){P=p.stateNode.containerInfo,z=!0,p.child.return=p,p=p.child;continue}}else if(zo(a,p),p.child!==null){p.child.return=p,p=p.child;continue}if(p===u)break;for(;p.sibling===null;){if(p.return===null||p.return===u)return;p=p.return,p.tag===4&&(O=!1)}p.sibling.return=p.return,p=p.sibling}}function nh(a,u){switch(u.tag){case 0:case 11:case 14:case 15:case 22:var p=u.updateQueue;if(p=p!==null?p.lastEffect:null,p!==null){var O=p=p.next;do(O.tag&3)===3&&(a=O.destroy,O.destroy=void 0,a!==void 0&&a()),O=O.next;while(O!==p)}return;case 1:return;case 5:if(p=u.stateNode,p!=null){O=u.memoizedProps;var P=a!==null?a.memoizedProps:O;a=u.type;var z=u.updateQueue;if(u.updateQueue=null,z!==null){for(p[Eo]=O,a==="input"&&O.type==="radio"&&O.name!=null&&yf(p,O),qw(a,P),u=qw(a,O),P=0;PP&&(P=H),p&=~z}if(p=P,p=To()-p,p=(120>p?120:480>p?480:1080>p?1080:1920>p?1920:3e3>p?3e3:4320>p?4320:1960*h3(p/1960))-p,10 component higher in the tree to provide a loading indicator or placeholder to display.`)}fs!==5&&(fs=2),pe=et(pe,ee),$e=H;do{switch($e.tag){case 3:z=pe,$e.flags|=4096,u&=-u,$e.lanes|=u;var yr=dr($e,z,u);Z2($e,yr);break e;case 1:z=pe;var $t=$e.type,wr=$e.stateNode;if(!($e.flags&64)&&(typeof $t.getDerivedStateFromError=="function"||wr!==null&&typeof wr.componentDidCatch=="function"&&(zs===null||!zs.has(wr)))){$e.flags|=4096,u&=-u,$e.lanes|=u;var Fr=cr($e,z,u);Z2($e,Fr);break e}}$e=$e.return}while($e!==null)}zS(p)}catch(zr){u=zr,Ca===p&&p!==null&&(Ca=p=p.return);continue}break}while(1)}function Tc(){var a=$p.current;return $p.current=c3,a===null?c3:a}function g3(a,u){var p=fn;fn|=16;var O=Tc();ra===a&&Ta===u||GO(a,u);do try{KC();break}catch(P){TI(a,P)}while(1);if(B1(),fn=p,$p.current=O,Ca!==null)throw Error(R(261));return ra=null,Ta=0,fs}function KC(){for(;Ca!==null;)MI(Ca)}function AI(){for(;Ca!==null&&!Qd();)MI(Ca)}function MI(a){var u=DI(a.alternate,a,Y1);a.memoizedProps=a.pendingProps,u===null?zS(a):Ca=u,Ey.current=null}function zS(a){var u=a;do{var p=u.alternate;if(a=u.return,u.flags&2048){if(p=Xe(u),p!==null){p.flags&=2047,Ca=p;return}a!==null&&(a.firstEffect=a.lastEffect=null,a.flags|=2048)}else{if(p=Be(p,u,Y1),p!==null){Ca=p;return}if(p=u,p.tag!==24&&p.tag!==23||p.memoizedState===null||Y1&1073741824||!(p.mode&4)){for(var O=0,P=p.child;P!==null;)O|=P.lanes|P.childLanes,P=P.sibling;p.childLanes=O}a!==null&&!(a.flags&2048)&&(a.firstEffect===null&&(a.firstEffect=u.firstEffect),u.lastEffect!==null&&(a.lastEffect!==null&&(a.lastEffect.nextEffect=u.firstEffect),a.lastEffect=u.lastEffect),1H&&(ee=H,H=yr,yr=ee),ee=T1(Ge,yr),z=T1(Ge,H),ee&&z&&(ft.rangeCount!==1||ft.anchorNode!==ee.node||ft.anchorOffset!==ee.offset||ft.focusNode!==z.node||ft.focusOffset!==z.offset)&&(pt=pt.createRange(),pt.setStart(ee.node,ee.offset),ft.removeAllRanges(),yr>H?(ft.addRange(pt),ft.extend(z.node,z.offset)):(pt.setEnd(z.node,z.offset),ft.addRange(pt)))))),pt=[],ft=Ge;ft=ft.parentNode;)ft.nodeType===1&&pt.push({element:ft,left:ft.scrollLeft,top:ft.scrollTop});for(typeof Ge.focus=="function"&&Ge.focus(),Ge=0;GeTo()-kn?GO(a,0):Ut|=p),Vp(a,u)}function uP(a,u){var p=a.stateNode;p!==null&&p.delete(u),u=0,u===0&&(u=a.mode,u&2?u&4?(Cc===0&&(Cc=jc),u=Qg(62914560&~Cc),u===0&&(u=4194304)):u=hy()===99?1:2:u=1),p=jf(),a=Z1(a,u),a!==null&&(N2(a,u,p),Vp(a,p))}var DI;DI=function(a,u,p){var O=u.lanes;if(a!==null)if(a.memoizedProps!==u.pendingProps||ea.current)As=!0;else if(p&O)As=!!(a.flags&16384);else{switch(As=!1,u.tag){case 3:v_(u),yy();break;case 5:l_(u);break;case 1:Ml(u.type)&&N1(u);break;case 4:o3(u,u.stateNode.containerInfo);break;case 10:O=u.memoizedProps.value;var P=u.type._context;zi(RO,P._currentValue),P._currentValue=O;break;case 13:if(u.memoizedState!==null)return p&u.child.childLanes?xy(a,u,p):(zi(Ni,Ni.current&1),u=F(a,u,p),u!==null?u.sibling:null);zi(Ni,Ni.current&1);break;case 19:if(O=(p&u.childLanes)!==0,a.flags&64){if(O)return D(a,u,p);u.flags|=64}if(P=u.memoizedState,P!==null&&(P.rendering=null,P.tail=null,P.lastEffect=null),zi(Ni,Ni.current),O)break;return null;case 23:case 24:return u.lanes=0,f3(a,u,p)}return F(a,u,p)}else As=!1;switch(u.lanes=0,u.tag){case 2:if(O=u.type,a!==null&&(a.alternate=null,u.alternate=null,u.flags|=2),a=u.pendingProps,P=M0(u,ja.current),eh(u,p),P=BO(null,u,O,a,P,p),u.flags|=1,typeof P=="object"&&P!==null&&typeof P.render=="function"&&P.$$typeof===void 0){if(u.tag=1,u.memoizedState=null,u.updateQueue=null,Ml(O)){var z=!0;N1(u)}else z=!1;u.memoizedState=P.state!==null&&P.state!==void 0?P.state:null,Q2(u);var H=O.getDerivedStateFromProps;typeof H=="function"&&t3(u,O,H,a),P.updater=W1,u.stateNode=P,P._reactInternals=u,a_(u,O,a,p),u=m_(null,u,O,!0,z,p)}else u.tag=0,Ms(null,u,P,p),u=u.child;return u;case 16:P=u.elementType;e:{switch(a!==null&&(a.alternate=null,u.alternate=null,u.flags|=2),a=u.pendingProps,z=P._init,P=z(P._payload),u.type=P,z=u.tag=fP(P),a=qa(P,a),z){case 0:u=rh(null,u,P,a,p);break e;case 1:u=p3(null,u,P,a,p);break e;case 11:u=rc(null,u,P,a,p);break e;case 14:u=K1(null,u,P,qa(P.type,a),O,p);break e}throw Error(R(306,P,""))}return u;case 0:return O=u.type,P=u.pendingProps,P=u.elementType===O?P:qa(O,P),rh(a,u,O,P,p);case 1:return O=u.type,P=u.pendingProps,P=u.elementType===O?P:qa(O,P),p3(a,u,O,P,p);case 3:if(v_(u),O=u.updateQueue,a===null||O===null)throw Error(R(282));if(O=u.pendingProps,P=u.memoizedState,P=P!==null?P.element:null,Pi(a,u),e3(u,O,null,p),O=u.memoizedState.element,O===P)yy(),u=F(a,u,p);else{if(P=u.stateNode,(z=P.hydrate)&&(ec=At(u.stateNode.containerInfo.firstChild),Ef=u,z=Wp=!0),z){if(a=P.mutableSourceEagerHydrationData,a!=null)for(P=0;P{"use strict";function S(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(S)}catch(C){console.error(C)}}S(),w.exports=X()}),fe=y(h=>{"use strict";var w=q();function S(Ie,Ce){return Ie===Ce&&(Ie!==0||1/Ie===1/Ce)||Ie!==Ie&&Ce!==Ce}var C=typeof Object.is=="function"?Object.is:S,R=w.useState,G=w.useEffect,te=w.useLayoutEffect,re=w.useDebugValue;function ue(Ie,Ce){var ke=Ce(),ze=R({inst:{value:ke,getSnapshot:Ce}}),Le=ze[0].inst,Te=ze[1];return te(function(){Le.value=ke,Le.getSnapshot=Ce,se(Le)&&Te({inst:Le})},[Ie,ke,Ce]),G(function(){return se(Le)&&Te({inst:Le}),Ie(function(){se(Le)&&Te({inst:Le})})},[Ie]),re(ke),ke}function se(Ie){var Ce=Ie.getSnapshot;Ie=Ie.value;try{var ke=Ce();return!C(Ie,ke)}catch{return!0}}function he(Ie,Ce){return Ce()}var _e=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?he:ue;h.useSyncExternalStore=w.useSyncExternalStore!==void 0?w.useSyncExternalStore:_e}),me=y((h,w)=>{"use strict";w.exports=fe()}),ye=y(h=>{"use strict";var w=q(),S=me();function C(he,_e){return he===_e&&(he!==0||1/he===1/_e)||he!==he&&_e!==_e}var R=typeof Object.is=="function"?Object.is:C,G=S.useSyncExternalStore,te=w.useRef,re=w.useEffect,ue=w.useMemo,se=w.useDebugValue;h.useSyncExternalStoreWithSelector=function(he,_e,Ie,Ce,ke){var ze=te(null);if(ze.current===null){var Le={hasValue:!1,value:null};ze.current=Le}else Le=ze.current;ze=ue(function(){function lt(st){if(!dt){if(dt=!0,tt=st,st=Ce(st),ke!==void 0&&Le.hasValue){var De=Le.value;if(ke(De,st))return it=De}return it=st}if(De=it,R(tt,st))return De;var Ze=Ce(st);return ke!==void 0&&ke(De,Ze)?De:(tt=st,it=Ze)}var dt=!1,tt,it,Ke=Ie===void 0?null:Ie;return[function(){return lt(_e())},Ke===null?void 0:function(){return lt(Ke())}]},[_e,Ie,Ce,ke]);var Te=G(he,ze[0],ze[1]);return re(function(){Le.hasValue=!0,Le.value=Te},[Te]),se(Te),Te}}),ge=y((h,w)=>{"use strict";w.exports=ye()});function ae(){return ae=Object.assign?Object.assign.bind():function(h){for(var w=1;w{}),Ne=y(h=>{"use strict";var w=typeof Symbol=="function"&&Symbol.for,S=w?Symbol.for("react.element"):60103,C=w?Symbol.for("react.portal"):60106,R=w?Symbol.for("react.fragment"):60107,G=w?Symbol.for("react.strict_mode"):60108,te=w?Symbol.for("react.profiler"):60114,re=w?Symbol.for("react.provider"):60109,ue=w?Symbol.for("react.context"):60110,se=w?Symbol.for("react.async_mode"):60111,he=w?Symbol.for("react.concurrent_mode"):60111,_e=w?Symbol.for("react.forward_ref"):60112,Ie=w?Symbol.for("react.suspense"):60113,Ce=w?Symbol.for("react.suspense_list"):60120,ke=w?Symbol.for("react.memo"):60115,ze=w?Symbol.for("react.lazy"):60116,Le=w?Symbol.for("react.block"):60121,Te=w?Symbol.for("react.fundamental"):60117,lt=w?Symbol.for("react.responder"):60118,dt=w?Symbol.for("react.scope"):60119;function tt(Ke){if(typeof Ke=="object"&&Ke!==null){var st=Ke.$$typeof;switch(st){case S:switch(Ke=Ke.type,Ke){case se:case he:case R:case te:case G:case Ie:return Ke;default:switch(Ke=Ke&&Ke.$$typeof,Ke){case ue:case _e:case ze:case ke:case re:return Ke;default:return st}}case C:return st}}}function it(Ke){return tt(Ke)===he}h.AsyncMode=se,h.ConcurrentMode=he,h.ContextConsumer=ue,h.ContextProvider=re,h.Element=S,h.ForwardRef=_e,h.Fragment=R,h.Lazy=ze,h.Memo=ke,h.Portal=C,h.Profiler=te,h.StrictMode=G,h.Suspense=Ie,h.isAsyncMode=function(Ke){return it(Ke)||tt(Ke)===se},h.isConcurrentMode=it,h.isContextConsumer=function(Ke){return tt(Ke)===ue},h.isContextProvider=function(Ke){return tt(Ke)===re},h.isElement=function(Ke){return typeof Ke=="object"&&Ke!==null&&Ke.$$typeof===S},h.isForwardRef=function(Ke){return tt(Ke)===_e},h.isFragment=function(Ke){return tt(Ke)===R},h.isLazy=function(Ke){return tt(Ke)===ze},h.isMemo=function(Ke){return tt(Ke)===ke},h.isPortal=function(Ke){return tt(Ke)===C},h.isProfiler=function(Ke){return tt(Ke)===te},h.isStrictMode=function(Ke){return tt(Ke)===G},h.isSuspense=function(Ke){return tt(Ke)===Ie},h.isValidElementType=function(Ke){return typeof Ke=="string"||typeof Ke=="function"||Ke===R||Ke===he||Ke===te||Ke===G||Ke===Ie||Ke===Ce||typeof Ke=="object"&&Ke!==null&&(Ke.$$typeof===ze||Ke.$$typeof===ke||Ke.$$typeof===re||Ke.$$typeof===ue||Ke.$$typeof===_e||Ke.$$typeof===Te||Ke.$$typeof===lt||Ke.$$typeof===dt||Ke.$$typeof===Le)},h.typeOf=tt}),Ye=y((h,w)=>{"use strict";w.exports=Ne()}),Je=y((h,w)=>{"use strict";var S=Ye(),C={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},R={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},G={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},te={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},re={};re[S.ForwardRef]=G,re[S.Memo]=te;function ue(Le){return S.isMemo(Le)?te:re[Le.$$typeof]||C}var se=Object.defineProperty,he=Object.getOwnPropertyNames,_e=Object.getOwnPropertySymbols,Ie=Object.getOwnPropertyDescriptor,Ce=Object.getPrototypeOf,ke=Object.prototype;function ze(Le,Te,lt){if(typeof Te!="string"){if(ke){var dt=Ce(Te);dt&&dt!==ke&&ze(Le,dt,lt)}var tt=he(Te);_e&&(tt=tt.concat(_e(Te)));for(var it=ue(Le),Ke=ue(Te),st=0;st{"use strict";var w=Symbol.for("react.element"),S=Symbol.for("react.portal"),C=Symbol.for("react.fragment"),R=Symbol.for("react.strict_mode"),G=Symbol.for("react.profiler"),te=Symbol.for("react.provider"),re=Symbol.for("react.context"),ue=Symbol.for("react.server_context"),se=Symbol.for("react.forward_ref"),he=Symbol.for("react.suspense"),_e=Symbol.for("react.suspense_list"),Ie=Symbol.for("react.memo"),Ce=Symbol.for("react.lazy"),ke=Symbol.for("react.offscreen"),ze;ze=Symbol.for("react.module.reference");function Le(Te){if(typeof Te=="object"&&Te!==null){var lt=Te.$$typeof;switch(lt){case w:switch(Te=Te.type,Te){case C:case G:case R:case he:case _e:return Te;default:switch(Te=Te&&Te.$$typeof,Te){case ue:case re:case se:case Ce:case Ie:case te:return Te;default:return lt}}case S:return lt}}}h.ContextConsumer=re,h.ContextProvider=te,h.Element=w,h.ForwardRef=se,h.Fragment=C,h.Lazy=Ce,h.Memo=Ie,h.Portal=S,h.Profiler=G,h.StrictMode=R,h.Suspense=he,h.SuspenseList=_e,h.isAsyncMode=function(){return!1},h.isConcurrentMode=function(){return!1},h.isContextConsumer=function(Te){return Le(Te)===re},h.isContextProvider=function(Te){return Le(Te)===te},h.isElement=function(Te){return typeof Te=="object"&&Te!==null&&Te.$$typeof===w},h.isForwardRef=function(Te){return Le(Te)===se},h.isFragment=function(Te){return Le(Te)===C},h.isLazy=function(Te){return Le(Te)===Ce},h.isMemo=function(Te){return Le(Te)===Ie},h.isPortal=function(Te){return Le(Te)===S},h.isProfiler=function(Te){return Le(Te)===G},h.isStrictMode=function(Te){return Le(Te)===R},h.isSuspense=function(Te){return Le(Te)===he},h.isSuspenseList=function(Te){return Le(Te)===_e},h.isValidElementType=function(Te){return typeof Te=="string"||typeof Te=="function"||Te===C||Te===G||Te===R||Te===he||Te===_e||Te===ke||typeof Te=="object"&&Te!==null&&(Te.$$typeof===Ce||Te.$$typeof===Ie||Te.$$typeof===te||Te.$$typeof===re||Te.$$typeof===se||Te.$$typeof===ze||Te.getModuleId!==void 0)},h.typeOf=Le}),Ve=y((h,w)=>{"use strict";w.exports=Me()}),Ue=y((h,w)=>{"use strict";function S(R,G){for(var te=R.keys(),re;!(re=te.next()).done;)G(R.get(re.value),re.value,R)}var C=function(){var R;typeof Map<"u"&&(R=Map,Map.prototype.keys||(Map.prototype.keys=function(){var ue=[];return this.forEach(function(se,he){ue.push(he)}),ue}));function G(ue){var se=this;se._map=R,G.Map&&(se._map=G.Map),se._=se._map?new se._map:{},ue&&ue.forEach(function(he){se.set(he[0],he[1])})}G.prototype.get=function(ue){return this._map?this._.get(ue):this._[ue]},G.prototype.set=function(ue,se){var he=Array.prototype.slice.call(arguments);ue=he.shift();var _e=this.get(ue);return _e||(_e=[],this._map?this._.set(ue,_e):this._[ue]=_e),Array.prototype.push.apply(_e,he),this},G.prototype.delete=function(ue,se){if(!this.has(ue))return!1;if(arguments.length==1)return this._map?this._.delete(ue):delete this._[ue],!0;var he=this.get(ue),_e=he.indexOf(se);return _e!=-1?(he.splice(_e,1),!0):!1},G.prototype.has=function(ue,se){var he=this._map?this._.has(ue):this._.hasOwnProperty(ue);if(arguments.length==1||!he)return he;var _e=this.get(ue)||[];return _e.indexOf(se)!=-1},G.prototype.keys=function(){return this._map?re(this._.keys()):re(Object.keys(this._))},G.prototype.values=function(){var ue=[];return this.forEachEntry(function(se){Array.prototype.push.apply(ue,se)}),re(ue)},G.prototype.forEachEntry=function(ue){S(this,ue)},G.prototype.forEach=function(ue){var se=this;se.forEachEntry(function(he,_e){he.forEach(function(Ie){ue(Ie,_e,se)})})},G.prototype.clear=function(){this._map?this._.clear():this._={}},Object.defineProperty(G.prototype,"size",{configurable:!1,enumerable:!0,get:function(){var ue=0;return S(this,function(se){ue+=se.length}),ue}}),Object.defineProperty(G.prototype,"count",{configurable:!1,enumerable:!0,get:function(){return this._.size}});var te;try{te=new Function("iterator","makeIterator","var keysArray = []; for(var key of iterator){keysArray.push(key);} return makeIterator(keysArray).next;")}catch{}function re(ue){if(Array.isArray(ue)){var se=0;return{next:function(){return se{Mt=function(){function h(S){var C=this;this._insertTag=function(R){var G;C.tags.length===0?C.insertionPoint?G=C.insertionPoint.nextSibling:C.prepend?G=C.container.firstChild:G=C.before:G=C.tags[C.tags.length-1].nextSibling,C.container.insertBefore(R,G),C.tags.push(R)},this.isSpeedy=S.speedy===void 0?!0:S.speedy,this.tags=[],this.ctr=0,this.nonce=S.nonce,this.key=S.key,this.container=S.container,this.prepend=S.prepend,this.insertionPoint=S.insertionPoint,this.before=null}var w=h.prototype;return w.hydrate=function(S){S.forEach(this._insertTag)},w.insert=function(S){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(yt(this));var C=this.tags[this.tags.length-1];if(!1)var R;if(this.isSpeedy){var G=ht(C);try{G.insertRule(S,G.cssRules.length)}catch{}}else C.appendChild(document.createTextNode(S));this.ctr++},w.flush=function(){this.tags.forEach(function(S){return S.parentNode&&S.parentNode.removeChild(S)}),this.tags=[],this.ctr=0},h}()}),_t,Nt,Rt,sr,Pt,Sr,Nr,ir,xr,qn=d(()=>{_t="-ms-",Nt="-moz-",Rt="-webkit-",sr="comm",Pt="rule",Sr="decl",Nr="@import",ir="@keyframes",xr="@layer"});function An(h,w){return Sn(h,0)^45?(((w<<2^Sn(h,0))<<2^Sn(h,1))<<2^Sn(h,2))<<2^Sn(h,3):0}function Oo(h){return h.trim()}function yn(h,w){return(h=w.exec(h))?h[0]:h}function Vr(h,w,S){return h.replace(w,S)}function eo(h,w){return h.indexOf(w)}function Sn(h,w){return h.charCodeAt(w)|0}function Ti(h,w,S){return h.slice(w,S)}function Mo(h){return h.length}function xo(h){return h.length}function Qa(h,w){return w.push(h),h}function Dn(h,w){return h.map(w).join("")}var mr,Un,Za,Ai=d(()=>{mr=Math.abs,Un=String.fromCharCode,Za=Object.assign});function mn(h,w,S,C,R,G,te){return{value:h,root:w,parent:S,type:C,props:R,children:G,line:fc,column:vs,length:te,return:""}}function rn(h,w){return Za(mn("",null,null,"",null,null,0),h,{length:-h.length},w)}function Mn(){return Uo}function go(){return Uo=ia>0?Sn(Vi,--ia):0,vs--,Uo===10&&(vs=1,fc--),Uo}function cn(){return Uo=ia2||ko(Uo)>3?"":" "}function am(h,w){for(;--w&&cn()&&!(Uo<48||Uo>102||Uo>57&&Uo<65||Uo>70&&Uo<97););return cc(h,Oi()+(w<6&&ms()==32&&cn()==32))}function Wc(h){for(;cn();)switch(Uo){case h:return ia;case 34:case 39:h!==34&&h!==39&&Wc(Uo);break;case 40:h===41&&Wc(h);break;case 92:cn();break}return ia}function ql(h,w){for(;cn()&&h+Uo!==47+10&&!(h+Uo===42+42&&ms()===47););return"/*"+cc(w,ia-1)+"*"+Un(h===47?h:cn())}function Na(h){for(;!ko(ms());)cn();return cc(h,ia)}var fc,vs,vr,ia,Uo,Vi,li=d(()=>{Ai(),fc=1,vs=1,vr=0,ia=0,Uo=0,Vi=""});function Gn(h){return Hs(nd("",null,null,null,[""],h=Ws(h),0,[0],h))}function nd(h,w,S,C,R,G,te,re,ue){for(var se=0,he=0,_e=te,Ie=0,Ce=0,ke=0,ze=1,Le=1,Te=1,lt=0,dt="",tt=R,it=G,Ke=C,st=dt;Le;)switch(ke=lt,lt=cn()){case 40:if(ke!=108&&Sn(st,_e-1)==58){eo(st+=Vr(es(lt),"&","&\f"),"&\f")!=-1&&(Te=-1);break}case 34:case 39:case 91:st+=es(lt);break;case 9:case 10:case 13:case 32:st+=rb(ke);break;case 92:st+=am(Oi()-1,7);continue;case 47:switch(ms()){case 42:case 47:Qa(va(ql(cn(),Oi()),w,S),ue);break;default:st+="/"}break;case 123*ze:re[se++]=Mo(st)*Te;case 125*ze:case 59:case 0:switch(lt){case 0:case 125:Le=0;case 59+he:Te==-1&&(st=Vr(st,/\f/g,"")),Ce>0&&Mo(st)-_e&&Qa(Ce>32?K3(st+";",C,S,_e-1):K3(Vr(st," ","")+";",C,S,_e-2),ue);break;case 59:st+=";";default:if(Qa(Ke=Xn(st,w,S,se,he,R,re,dt,tt=[],it=[],_e),G),lt===123)if(he===0)nd(st,w,Ke,Ke,tt,G,_e,re,it);else switch(Ie===99&&Sn(st,3)===110?100:Ie){case 100:case 108:case 109:case 115:nd(h,Ke,Ke,C&&Qa(Xn(h,Ke,Ke,0,0,R,re,dt,R,tt=[],_e),it),R,it,_e,re,C?tt:it);break;default:nd(st,Ke,Ke,Ke,[""],it,0,re,it)}}se=he=Ce=0,ze=Te=1,dt=st="",_e=te;break;case 58:_e=1+Mo(st),Ce=ke;default:if(ze<1){if(lt==123)--ze;else if(lt==125&&ze++==0&&go()==125)continue}switch(st+=Un(lt),lt*ze){case 38:Te=he>0?1:(st+="\f",-1);break;case 44:re[se++]=(Mo(st)-1)*Te,Te=1;break;case 64:ms()===45&&(st+=es(cn())),Ie=ms(),he=_e=Mo(dt=st+=Na(Oi())),lt++;break;case 45:ke===45&&Mo(st)==2&&(ze=0)}}return G}function Xn(h,w,S,C,R,G,te,re,ue,se,he){for(var _e=R-1,Ie=R===0?G:[""],Ce=xo(Ie),ke=0,ze=0,Le=0;ke0?Ie[Te]+" "+lt:Vr(lt,/&\f/g,Ie[Te])))&&(ue[Le++]=dt);return mn(h,w,S,R===0?Pt:re,ue,se,he)}function va(h,w,S){return mn(h,w,S,sr,Un(Mn()),Ti(h,2,-2),0)}function K3(h,w,S,C){return mn(h,w,S,Sr,Ti(h,0,C),Ti(h,C+1,-1),C)}var vh=d(()=>{qn(),Ai(),li()}),qi=d(()=>{});function xi(h,w){for(var S="",C=xo(h),R=0;R{qn(),Ai()});function Ul(h){var w=xo(h);return function(S,C,R,G){for(var te="",re=0;re{Ai()}),Vs=d(()=>{qn(),Ai(),vh(),qi(),li(),No(),Gf()}),gv,pc=d(()=>{gv=function(h){var w=new WeakMap;return function(S){if(w.has(S))return w.get(S);var C=h(S);return w.set(S,C),C}}});function Jf(h){var w=Object.create(null);return function(S){return w[S]===void 0&&(w[S]=h(S)),w[S]}}var xu=d(()=>{}),qs={};_(qs,{default:()=>Kf});function Xf(h,w){switch(An(h,w)){case 5103:return Rt+"print-"+h+h;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return Rt+h+h;case 5349:case 4246:case 4810:case 6968:case 2756:return Rt+h+Nt+h+_t+h+h;case 6828:case 4268:return Rt+h+_t+h+h;case 6165:return Rt+h+_t+"flex-"+h+h;case 5187:return Rt+h+Vr(h,/(\w+).+(:[^]+)/,Rt+"box-$1$2"+_t+"flex-$1$2")+h;case 5443:return Rt+h+_t+"flex-item-"+Vr(h,/flex-|-self/,"")+h;case 4675:return Rt+h+_t+"flex-line-pack"+Vr(h,/align-content|flex-|-self/,"")+h;case 5548:return Rt+h+_t+Vr(h,"shrink","negative")+h;case 5292:return Rt+h+_t+Vr(h,"basis","preferred-size")+h;case 6060:return Rt+"box-"+Vr(h,"-grow","")+Rt+h+_t+Vr(h,"grow","positive")+h;case 4554:return Rt+Vr(h,/([^-])(transform)/g,"$1"+Rt+"$2")+h;case 6187:return Vr(Vr(Vr(h,/(zoom-|grab)/,Rt+"$1"),/(image-set)/,Rt+"$1"),h,"")+h;case 5495:case 3959:return Vr(h,/(image-set\([^]*)/,Rt+"$1$`$1");case 4968:return Vr(Vr(h,/(.+:)(flex-)?(.*)/,Rt+"box-pack:$3"+_t+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+Rt+h+h;case 4095:case 3583:case 4068:case 2532:return Vr(h,/(.+)-inline(.+)/,Rt+"$1$2")+h;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(Mo(h)-1-w>6)switch(Sn(h,w+1)){case 109:if(Sn(h,w+4)!==45)break;case 102:return Vr(h,/(.+:)(.+)-([^]+)/,"$1"+Rt+"$2-$3$1"+Nt+(Sn(h,w+3)==108?"$3":"$2-$3"))+h;case 115:return~eo(h,"stretch")?Xf(Vr(h,"stretch","fill-available"),w)+h:h}break;case 4949:if(Sn(h,w+1)!==115)break;case 6444:switch(Sn(h,Mo(h)-3-(~eo(h,"!important")&&10))){case 107:return Vr(h,":",":"+Rt)+h;case 101:return Vr(h,/(.+:)([^;!]+)(;|!.+)?/,"$1"+Rt+(Sn(h,14)===45?"inline-":"")+"box$3$1"+Rt+"$2$3$1"+_t+"$2box$3")+h}break;case 5936:switch(Sn(h,w+11)){case 114:return Rt+h+_t+Vr(h,/[svh]\w+-[tblr]{2}/,"tb")+h;case 108:return Rt+h+_t+Vr(h,/[svh]\w+-[tblr]{2}/,"tb-rl")+h;case 45:return Rt+h+_t+Vr(h,/[svh]\w+-[tblr]{2}/,"lr")+h}return Rt+h+_t+h+h}return h}var ts,gs,nb,Ui,En,yv,Y3,ob,Kf,od=d(()=>{wt(),Vs(),pc(),xu(),ts=function(h,w,S){for(var C=0,R=0;C=R,R=ms(),C===38&&R===12&&(w[S]=1),!ko(R);)cn();return cc(h,ia)},gs=function(h,w){var S=-1,C=44;do switch(ko(C)){case 0:C===38&&ms()===12&&(w[S]=1),h[S]+=ts(ia-1,w,S);break;case 2:h[S]+=es(C);break;case 4:if(C===44){h[++S]=ms()===58?"&\f":"",w[S]=h[S].length;break}default:h[S]+=Un(C)}while(C=cn());return h},nb=function(h,w){return Hs(gs(Ws(h),w))},Ui=new WeakMap,En=function(h){if(!(h.type!=="rule"||!h.parent||h.length<1)){for(var w=h.value,S=h.parent,C=h.column===S.column&&h.line===S.line;S.type!=="rule";)if(S=S.parent,!S)return;if(!(h.props.length===1&&w.charCodeAt(0)!==58&&!Ui.get(S))&&!C){Ui.set(h,!0);for(var R=[],G=nb(w,R),te=S.props,re=0,ue=0;re-1&&!h.return)switch(h.type){case Sr:h.return=Xf(h.value,h.length);break;case ir:return xi([rn(h,{value:Vr(h.value,"@","@"+Rt)})],C);case Pt:if(h.length)return Dn(h.props,function(R){switch(yn(R,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return xi([rn(h,{props:[Vr(R,/:(read-\w+)/,":"+Nt+"$1")]})],C);case"::placeholder":return xi([rn(h,{props:[Vr(R,/:(plac\w+)/,":"+Rt+"input-$1")]}),rn(h,{props:[Vr(R,/:(plac\w+)/,":"+Nt+"$1")]}),rn(h,{props:[Vr(R,/:(plac\w+)/,_t+"input-$1")]})],C)}return""})}},ob=[Y3],Kf=function(h){var w=h.key;if(w==="css"){var S=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(S,function(ke){var ze=ke.getAttribute("data-emotion");ze.indexOf(" ")!==-1&&(document.head.appendChild(ke),ke.setAttribute("data-s",""))})}var C=h.stylisPlugins||ob,R={},G,te=[];G=h.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+w+' "]'),function(ke){for(var ze=ke.getAttribute("data-emotion").split(" "),Le=1;Le{ib=T(Je()),sm=function(h,w){return(0,ib.default)(h,w)}});function Yf(h,w,S){var C="";return S.split(" ").forEach(function(R){h[R]!==void 0?w.push(h[R]+";"):C+=R+" "}),C}var id,hl,Mi,Go=d(()=>{id=!0,hl=function(h,w,S){var C=h.key+"-"+w.name;(S===!1||id===!1)&&h.registered[C]===void 0&&(h.registered[C]=w.styles)},Mi=function(h,w,S){hl(h,w,S);var C=h.key+"-"+w.name;if(h.inserted[w.name]===void 0){var R=w;do h.insert(w===R?"."+C:"",R,h.sheet,!0),R=R.next;while(R!==void 0)}}});function ui(h){for(var w=0,S,C=0,R=h.length;R>=4;++C,R-=4)S=h.charCodeAt(C)&255|(h.charCodeAt(++C)&255)<<8|(h.charCodeAt(++C)&255)<<16|(h.charCodeAt(++C)&255)<<24,S=(S&65535)*1540483477+((S>>>16)*59797<<16),S^=S>>>24,w=(S&65535)*1540483477+((S>>>16)*59797<<16)^(w&65535)*1540483477+((w>>>16)*59797<<16);switch(R){case 3:w^=(h.charCodeAt(C+2)&255)<<16;case 2:w^=(h.charCodeAt(C+1)&255)<<8;case 1:w^=h.charCodeAt(C)&255,w=(w&65535)*1540483477+((w>>>16)*59797<<16)}return w^=w>>>13,w=(w&65535)*1540483477+((w>>>16)*59797<<16),((w^w>>>15)>>>0).toString(36)}var Z3=d(()=>{}),Zo,e5=d(()=>{Zo={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1}});function Hc(h,w,S){if(S==null)return"";if(S.__emotion_styles!==void 0)return S;switch(typeof S){case"boolean":return"";case"object":{if(S.anim===1)return Su={name:S.name,styles:S.styles,next:Su},S.name;if(S.styles!==void 0){var C=S.next;if(C!==void 0)for(;C!==void 0;)Su={name:C.name,styles:C.styles,next:Su},C=C.next;var R=S.styles+";";return R}return bv(h,w,S)}case"function":{if(h!==void 0){var G=Su,te=S(h);return Su=G,Hc(h,w,te)}break}case"string":if(!1)var re,ue;break}if(w==null)return S;var se=w[S];return se!==void 0?se:S}function bv(h,w,S){var C="";if(Array.isArray(S))for(var R=0;R{Z3(),e5(),xu(),ab=/[A-Z]|^ms/g,$c=/_EMO_([^_]+?)_([^]*?)_EMO_/g,_u=function(h){return h.charCodeAt(1)===45},gh=function(h){return h!=null&&typeof h!="boolean"},Vc=Jf(function(h){return _u(h)?h:h.replace(ab,"-$&").toLowerCase()}),yh=function(h,w){switch(h){case"animation":case"animationName":if(typeof w=="string")return w.replace($c,function(S,C,R){return Su={name:C,styles:R,next:Su},C})}return Zo[h]!==1&&!_u(h)&&typeof w=="number"&&w!==0?w+"px":w},lm=/label:\s*([^\s;\n{]+)\s*(;|$)/g,ml=function(h,w,S){if(h.length===1&&typeof h[0]=="object"&&h[0]!==null&&h[0].styles!==void 0)return h[0];var C=!0,R="";Su=void 0;var G=h[0];G==null||G.raw===void 0?(C=!1,R+=Hc(S,w,G)):R+=G[0];for(var te=1;te{um=T(q()),Lo=function(h){return h()},sb=um.useInsertionEffect?um.useInsertionEffect:!1,bh=sb||Lo,wv=sb||um.useLayoutEffect});function j4(h){var w=h.displayName||h.name||"Component",S=function(R,G){var te=ys.useContext(Eu);return ys.createElement(h,ae({theme:te,ref:G},R))},C=ys.forwardRef(S);return C.displayName="WithTheme("+w+")",sm(C,h)}var ys,wh,xv,_v,Oh,xh,qc,sd,Eu,Sv,t5,cm,fm,_h,Sh,ci,La,lb,r5=d(()=>{ys=T(q()),wh=T(q()),od(),Pe(),pc(),Q3(),Go(),ad(),Ov(),xv=!0,_v={}.hasOwnProperty,Oh=ys.createContext(typeof HTMLElement<"u"?Kf({key:"css"}):null),xh=Oh.Provider,qc=function(){return(0,wh.useContext)(Oh)},sd=function(h){return(0,wh.forwardRef)(function(w,S){var C=(0,wh.useContext)(Oh);return h(w,C,S)})},xv||(sd=function(h){return function(w){var S=(0,wh.useContext)(Oh);return S===null?(S=Kf({key:"css"}),ys.createElement(Oh.Provider,{value:S},h(w,S))):h(w,S)}}),Eu=ys.createContext({}),Sv=function(){return ys.useContext(Eu)},t5=function(h,w){if(typeof w=="function"){var S=w(h);return S}return ae({},h,w)},cm=gv(function(h){return gv(function(w){return t5(h,w)})}),fm=function(h){var w=ys.useContext(Eu);return h.theme!==w&&(w=cm(w)(h.theme)),ys.createElement(Eu.Provider,{value:w},h.children)},_h="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",Sh=function(h,w){var S={};for(var C in w)_v.call(w,C)&&(S[C]=w[C]);if(S[_h]=h,!1)var R;return S},ci=function(h){var w=h.cache,S=h.serialized,C=h.isStringTag;return hl(w,S,C),bh(function(){return Mi(w,S,C)}),null},La=sd(function(h,w,S){var C=h.css;typeof C=="string"&&w.registered[C]!==void 0&&(C=w.registered[C]);var R=h[_h],G=[C],te="";typeof h.className=="string"?te=Yf(w.registered,G,h.className):h.className!=null&&(te=h.className+" ");var re=ml(G,void 0,ys.useContext(Eu));if(!1)var ue;te+=w.key+"-"+re.name;var se={};for(var he in h)_v.call(h,he)&&he!=="css"&&he!==_h&&(se[he]=h[he]);return se.ref=S,se.className=te,ys.createElement(ys.Fragment,null,ys.createElement(ci,{cache:w,serialized:re,isStringTag:typeof R=="string"}),ys.createElement(R,se))}),lb=La}),Ev={};_(Ev,{CacheProvider:()=>xh,ClassNames:()=>ld,Global:()=>Eh,ThemeContext:()=>Eu,ThemeProvider:()=>fm,__unsafe_useEmotionCache:()=>qc,createElement:()=>Iu,css:()=>Us,jsx:()=>Iu,keyframes:()=>Iv,useTheme:()=>Sv,withEmotionCache:()=>sd,withTheme:()=>j4});function Us(){for(var h=arguments.length,w=new Array(h),S=0;S{r5(),r5(),fo=T(q()),Go(),Ov(),ad(),od(),Pe(),pc(),pm=T(Je()),Iu=function(h,w){var S=arguments;if(w==null||!_v.call(w,"css"))return fo.createElement.apply(void 0,S);var C=S.length,R=new Array(C);R[0]=lb,R[1]=Sh(h,w);for(var G=2;G{function S(C){return C&&C.__esModule?C:{default:C}}w.exports=S,w.exports.__esModule=!0,w.exports.default=w.exports}),ub=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=w;function w(S){let C="https://mui.com/production-error/?code="+S;for(let R=1;R{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=w(ub())}),Zf,bs,dm=d(()=>{xu(),Zf=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,bs=Jf(function(h){return Zf.test(h)||h.charCodeAt(0)===111&&h.charCodeAt(1)===110&&h.charCodeAt(2)<91})}),Ih,Uc,ga,hm,ep,tp,ud,rp=d(()=>{Pe(),Ih=T(q()),dm(),rs(),Go(),ad(),Ov(),Uc=bs,ga=function(h){return h!=="theme"},hm=function(h){return typeof h=="string"&&h.charCodeAt(0)>96?Uc:ga},ep=function(h,w,S){var C;if(w){var R=w.shouldForwardProp;C=h.__emotion_forwardProp&&R?function(G){return h.__emotion_forwardProp(G)&&R(G)}:R}return typeof C!="function"&&S&&(C=h.__emotion_forwardProp),C},tp=function(h){var w=h.cache,S=h.serialized,C=h.isStringTag;return hl(w,S,C),bh(function(){return Mi(w,S,C)}),null},ud=function h(w,S){var C=w.__emotion_real===w,R=C&&w.__emotion_base||w,G,te;S!==void 0&&(G=S.label,te=S.target);var re=ep(w,S,C),ue=re||hm(R),se=!ue("as");return function(){var he=arguments,_e=C&&w.__emotion_styles!==void 0?w.__emotion_styles.slice(0):[];if(G!==void 0&&_e.push("label:"+G+";"),he[0]==null||he[0].raw===void 0)_e.push.apply(_e,he);else{_e.push(he[0][0]);for(var Ie=he.length,Ce=1;CePv});var Pr,Xr,Pv,C4=d(()=>{rp(),Pe(),Pr=T(q()),dm(),Go(),ad(),Ov(),Xr=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"],Pv=ud.bind(),Xr.forEach(function(h){Pv[h]=Pv(h)})}),Gc=y((h,w)=>{"use strict";var S="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";w.exports=S}),fb=y((h,w)=>{"use strict";var S=Gc();function C(){}function R(){}R.resetWarningCache=C,w.exports=function(){function G(ue,se,he,_e,Ie,Ce){if(Ce!==S){var ke=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw ke.name="Invariant Violation",ke}}G.isRequired=G;function te(){return G}var re={array:G,bigint:G,bool:G,func:G,number:G,object:G,string:G,symbol:G,any:G,arrayOf:te,element:G,elementType:G,instanceOf:te,node:G,objectOf:te,oneOf:te,oneOfType:te,shape:te,exact:te,checkPropTypes:R,resetWarningCache:C};return re.PropTypes=re,re}}),Jc=y((h,w)=>{w.exports=fb()();var S,C}),jv=y(h=>{"use strict";L();var w=q(),S=60103;h.Fragment=60107,typeof Symbol=="function"&&Symbol.for&&(C=Symbol.for,S=C("react.element"),h.Fragment=C("react.fragment"));var C,R=w.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,G=Object.prototype.hasOwnProperty,te={key:!0,ref:!0,__self:!0,__source:!0};function re(ue,se,he){var _e,Ie={},Ce=null,ke=null;he!==void 0&&(Ce=""+he),se.key!==void 0&&(Ce=""+se.key),se.ref!==void 0&&(ke=se.ref);for(_e in se)G.call(se,_e)&&!te.hasOwnProperty(_e)&&(Ie[_e]=se[_e]);if(ue&&ue.defaultProps)for(_e in se=ue.defaultProps,se)Ie[_e]===void 0&&(Ie[_e]=se[_e]);return{$$typeof:S,type:ue,key:Ce,ref:ke,props:Ie,_owner:R.current}}h.jsx=re,h.jsxs=re}),Ln=y((h,w)=>{"use strict";w.exports=jv()}),kh=y(h=>{"use strict";"use client";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=he;var S=ue(q()),C=w(Jc()),R=(rs(),N(Ev)),G=w((od(),N(qs))),te=Ln();function re(_e){if(typeof WeakMap!="function")return null;var Ie=new WeakMap,Ce=new WeakMap;return(re=function(ke){return ke?Ce:Ie})(_e)}function ue(_e,Ie){if(!Ie&&_e&&_e.__esModule)return _e;if(_e===null||typeof _e!="object"&&typeof _e!="function")return{default:_e};var Ce=re(Ie);if(Ce&&Ce.has(_e))return Ce.get(_e);var ke={__proto__:null},ze=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var Le in _e)if(Le!=="default"&&Object.prototype.hasOwnProperty.call(_e,Le)){var Te=ze?Object.getOwnPropertyDescriptor(_e,Le):null;Te&&(Te.get||Te.set)?Object.defineProperty(ke,Le,Te):ke[Le]=_e[Le]}return ke.default=_e,Ce&&Ce.set(_e,ke),ke}var se;typeof document=="object"&&(se=(0,G.default)({key:"css",prepend:!0}));function he(_e){let{injectFirst:Ie,children:Ce}=_e;return Ie&&se?(0,te.jsx)(R.CacheProvider,{value:se,children:Ce}):Ce}}),mm=y(h=>{"use strict";"use client";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=w(kh())}),dc=y(h=>{"use strict";"use client";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=se;var S=re(q()),C=w(Jc()),R=(rs(),N(Ev)),G=Ln();function te(he){if(typeof WeakMap!="function")return null;var _e=new WeakMap,Ie=new WeakMap;return(te=function(Ce){return Ce?Ie:_e})(he)}function re(he,_e){if(!_e&&he&&he.__esModule)return he;if(he===null||typeof he!="object"&&typeof he!="function")return{default:he};var Ie=te(_e);if(Ie&&Ie.has(he))return Ie.get(he);var Ce={__proto__:null},ke=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var ze in he)if(ze!=="default"&&Object.prototype.hasOwnProperty.call(he,ze)){var Le=ke?Object.getOwnPropertyDescriptor(he,ze):null;Le&&(Le.get||Le.set)?Object.defineProperty(Ce,ze,Le):Ce[ze]=he[ze]}return Ce.default=he,Ie&&Ie.set(he,Ce),Ce}function ue(he){return he==null||Object.keys(he).length===0}function se(he){let{styles:_e,defaultTheme:Ie={}}=he,Ce=typeof _e=="function"?ke=>_e(ue(ke)?Ie:ke):_e;return(0,G.jsx)(R.Global,{styles:Ce})}}),Gl=y(h=>{"use strict";"use client";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=w(dc())}),Cv=y(h=>{"use strict";"use client";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"GlobalStyles",{enumerable:!0,get:function(){return G.default}}),Object.defineProperty(h,"StyledEngineProvider",{enumerable:!0,get:function(){return R.default}}),Object.defineProperty(h,"ThemeContext",{enumerable:!0,get:function(){return C.ThemeContext}}),Object.defineProperty(h,"css",{enumerable:!0,get:function(){return C.css}}),h.default=te,h.internal_processStyles=void 0,Object.defineProperty(h,"keyframes",{enumerable:!0,get:function(){return C.keyframes}});var S=w((C4(),N(cb))),C=(rs(),N(Ev)),R=w(mm()),G=w(Gl());function te(ue,se){return(0,S.default)(ue,se)}var re=(ue,se)=>{Array.isArray(ue.__emotion_styles)&&(ue.__emotion_styles=se(ue.__emotion_styles))};h.internal_processStyles=re}),Ph=y((h,w)=>{function S(){return w.exports=S=Object.assign?Object.assign.bind():function(C){for(var R=1;R{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=G,h.isPlainObject=C;var S=w(Ph());function C(te){if(typeof te!="object"||te===null)return!1;let re=Object.getPrototypeOf(te);return(re===null||re===Object.prototype||Object.getPrototypeOf(re)===null)&&!(Symbol.toStringTag in te)&&!(Symbol.iterator in te)}function R(te){if(!C(te))return te;let re={};return Object.keys(te).forEach(ue=>{re[ue]=R(te[ue])}),re}function G(te,re,ue={clone:!0}){let se=ue.clone?(0,S.default)({},te):te;return C(te)&&C(re)&&Object.keys(re).forEach(he=>{he!=="__proto__"&&(C(re[he])&&he in te&&C(te[he])?se[he]=G(te[he],re[he],ue):ue.clone?se[he]=C(re[he])?R(re[he]):re[he]:se[he]=re[he])}),se}}),ya=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});var w={};Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=R(gl());Object.keys(S).forEach(function(G){G==="default"||G==="__esModule"||Object.prototype.hasOwnProperty.call(w,G)||G in h&&h[G]===S[G]||Object.defineProperty(h,G,{enumerable:!0,get:function(){return S[G]}})});function C(G){if(typeof WeakMap!="function")return null;var te=new WeakMap,re=new WeakMap;return(C=function(ue){return ue?re:te})(G)}function R(G,te){if(!te&&G&&G.__esModule)return G;if(G===null||typeof G!="object"&&typeof G!="function")return{default:G};var re=C(te);if(re&&re.has(G))return re.get(G);var ue={__proto__:null},se=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var he in G)if(he!=="default"&&Object.prototype.hasOwnProperty.call(G,he)){var _e=se?Object.getOwnPropertyDescriptor(G,he):null;_e&&(_e.get||_e.set)?Object.defineProperty(ue,he,_e):ue[he]=G[he]}return ue.default=G,re&&re.set(G,ue),ue}}),Tv=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=C;var S=w(vl());function C(R){if(typeof R!="string")throw new Error((0,S.default)(7));return R.charAt(0).toUpperCase()+R.slice(1)}}),ro=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=w(Tv())}),ws=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=te,h.getFunctionName=C;var w=Ve(),S=/^\s*function(?:\s|\s*\/\*.*\*\/\s*)+([^(\s/]*)\s*/;function C(re){let ue=`${re}`.match(S);return ue&&ue[1]||""}function R(re,ue=""){return re.displayName||re.name||C(re)||ue}function G(re,ue,se){let he=R(ue);return re.displayName||(he!==""?`${se}(${he})`:se)}function te(re){if(re!=null){if(typeof re=="string")return re;if(typeof re=="function")return R(re,"Component");if(typeof re=="object")switch(re.$$typeof){case w.ForwardRef:return G(re,re.render,"ForwardRef");case w.Memo:return G(re,re.type,"memo");default:return}}}}),T4=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});var w={};Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=R(ws());Object.keys(S).forEach(function(G){G==="default"||G==="__esModule"||Object.prototype.hasOwnProperty.call(w,G)||G in h&&h[G]===S[G]||Object.defineProperty(h,G,{enumerable:!0,get:function(){return S[G]}})});function C(G){if(typeof WeakMap!="function")return null;var te=new WeakMap,re=new WeakMap;return(C=function(ue){return ue?re:te})(G)}function R(G,te){if(!te&&G&&G.__esModule)return G;if(G===null||typeof G!="object"&&typeof G!="function")return{default:G};var re=C(te);if(re&&re.has(G))return re.get(G);var ue={__proto__:null},se=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var he in G)if(he!=="default"&&Object.prototype.hasOwnProperty.call(G,he)){var _e=se?Object.getOwnPropertyDescriptor(G,he):null;_e&&(_e.get||_e.set)?Object.defineProperty(ue,he,_e):ue[he]=G[he]}return ue.default=G,re&&re.set(G,ue),ue}}),vm=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;function w(C,R=Number.MIN_SAFE_INTEGER,G=Number.MAX_SAFE_INTEGER){return Math.max(R,Math.min(C,G))}var S=h.default=w}),jh=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=w(vm())}),gm=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;var S=w(ya());function C(G,te){return te?(0,S.default)(G,te,{clone:!1}):G}var R=h.default=C}),hc=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;var S=w(Jc()),C={},R=h.default=C}),ba=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.computeBreakpointsBase=Ce,h.createEmptyBreakpointObject=he,h.default=void 0,h.handleBreakpoints=ue,h.mergeBreakpointsInOrder=Ie,h.removeUnusedBreakpoints=_e,h.resolveBreakpointValues=ke,h.values=void 0;var S=w(Ph()),C=w(Jc()),R=w(ya()),G=w(gm()),te=h.values={xs:0,sm:600,md:900,lg:1200,xl:1536},re={keys:["xs","sm","md","lg","xl"],up:Le=>`@media (min-width:${te[Le]}px)`};function ue(Le,Te,lt){let dt=Le.theme||{};if(Array.isArray(Te)){let tt=dt.breakpoints||re;return Te.reduce((it,Ke,st)=>(it[tt.up(tt.keys[st])]=lt(Te[st]),it),{})}if(typeof Te=="object"){let tt=dt.breakpoints||re;return Object.keys(Te).reduce((it,Ke)=>{if(Object.keys(tt.values||te).indexOf(Ke)!==-1){let st=tt.up(Ke);it[st]=lt(Te[Ke],Ke)}else{let st=Ke;it[st]=Te[st]}return it},{})}return lt(Te)}function se(Le){let Te=lt=>{let dt=lt.theme||{},tt=Le(lt),it=dt.breakpoints||re,Ke=it.keys.reduce((st,De)=>(lt[De]&&(st=st||{},st[it.up(De)]=Le((0,S.default)({theme:dt},lt[De]))),st),null);return(0,G.default)(tt,Ke)};return Te.propTypes={},Te.filterProps=["xs","sm","md","lg","xl",...Le.filterProps],Te}function he(Le={}){var Te;return((Te=Le.keys)==null?void 0:Te.reduce((lt,dt)=>{let tt=Le.up(dt);return lt[tt]={},lt},{}))||{}}function _e(Le,Te){return Le.reduce((lt,dt)=>{let tt=lt[dt];return(!tt||Object.keys(tt).length===0)&&delete lt[dt],lt},Te)}function Ie(Le,...Te){let lt=he(Le),dt=[lt,...Te].reduce((tt,it)=>(0,R.default)(tt,it),{});return _e(Object.keys(lt),dt)}function Ce(Le,Te){if(typeof Le!="object")return{};let lt={},dt=Object.keys(Te);return Array.isArray(Le)?dt.forEach((tt,it)=>{it{Le[tt]!=null&&(lt[tt]=!0)}),lt}function ke({values:Le,breakpoints:Te,base:lt}){let dt=lt||Ce(Le,Te),tt=Object.keys(dt);if(tt.length===0)return Le;let it;return tt.reduce((Ke,st,De)=>(Array.isArray(Le)?(Ke[st]=Le[De]!=null?Le[De]:Le[it],it=De):typeof Le=="object"?(Ke[st]=Le[st]!=null?Le[st]:Le[it],it=st):Ke[st]=Le,Ke),{})}var ze=h.default=se}),cd=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0,h.getPath=G,h.getStyleValue=te;var S=w(ro()),C=w(hc()),R=ba();function G(se,he,_e=!0){if(!he||typeof he!="string")return null;if(se&&se.vars&&_e){let Ie=`vars.${he}`.split(".").reduce((Ce,ke)=>Ce&&Ce[ke]?Ce[ke]:null,se);if(Ie!=null)return Ie}return he.split(".").reduce((Ie,Ce)=>Ie&&Ie[Ce]!=null?Ie[Ce]:null,se)}function te(se,he,_e,Ie=_e){let Ce;return typeof se=="function"?Ce=se(_e):Array.isArray(se)?Ce=se[_e]||Ie:Ce=G(se,_e)||Ie,he&&(Ce=he(Ce,Ie,se)),Ce}function re(se){let{prop:he,cssProperty:_e=se.prop,themeKey:Ie,transform:Ce}=se,ke=ze=>{if(ze[he]==null)return null;let Le=ze[he],Te=ze.theme,lt=G(Te,Ie)||{},dt=tt=>{let it=te(lt,Ce,tt);return tt===it&&typeof tt=="string"&&(it=te(lt,Ce,`${he}${tt==="default"?"":(0,S.default)(tt)}`,tt)),_e===!1?it:{[_e]:it}};return(0,R.handleBreakpoints)(ze,Le,dt)};return ke.propTypes={},ke.filterProps=[he],ke}var ue=h.default=re}),Gr=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=w;function w(S){let C={};return R=>(C[R]===void 0&&(C[R]=S(R)),C[R])}}),fd=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.createUnarySpacing=ze,h.createUnaryUnit=ke,h.default=void 0,h.getStyleFromPropValue=Te,h.getValue=Le,h.margin=tt,h.marginKeys=void 0,h.padding=it,h.paddingKeys=void 0;var S=w(hc()),C=ba(),R=cd(),G=w(gm()),te=w(Gr()),re={m:"margin",p:"padding"},ue={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},se={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},he=(0,te.default)(De=>{if(De.length>2)if(se[De])De=se[De];else return[De];let[Ze,ct]=De.split(""),gt=re[Ze],Et=ue[ct]||"";return Array.isArray(Et)?Et.map(zt=>gt+zt):[gt+Et]}),_e=h.marginKeys=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],Ie=h.paddingKeys=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],Ce=[..._e,...Ie];function ke(De,Ze,ct,gt){var Et;let zt=(Et=(0,R.getPath)(De,Ze,!1))!=null?Et:ct;return typeof zt=="number"?Yt=>typeof Yt=="string"?Yt:zt*Yt:Array.isArray(zt)?Yt=>typeof Yt=="string"?Yt:zt[Yt]:typeof zt=="function"?zt:()=>{}}function ze(De){return ke(De,"spacing",8,"spacing")}function Le(De,Ze){if(typeof Ze=="string"||Ze==null)return Ze;let ct=Math.abs(Ze),gt=De(ct);return Ze>=0?gt:typeof gt=="number"?-gt:`-${gt}`}function Te(De,Ze){return ct=>De.reduce((gt,Et)=>(gt[Et]=Le(Ze,ct),gt),{})}function lt(De,Ze,ct,gt){if(Ze.indexOf(ct)===-1)return null;let Et=he(ct),zt=Te(Et,gt),Yt=De[ct];return(0,C.handleBreakpoints)(De,Yt,zt)}function dt(De,Ze){let ct=ze(De.theme);return Object.keys(De).map(gt=>lt(De,Ze,gt,ct)).reduce(G.default,{})}function tt(De){return dt(De,_e)}tt.propTypes={},tt.filterProps=_e;function it(De){return dt(De,Ie)}it.propTypes={},it.filterProps=Ie;function Ke(De){return dt(De,Ce)}Ke.propTypes={},Ke.filterProps=Ce;var st=h.default=Ke}),ku=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;var S=w(gm());function C(...G){let te=G.reduce((ue,se)=>(se.filterProps.forEach(he=>{ue[he]=se}),ue),{}),re=ue=>Object.keys(ue).reduce((se,he)=>te[he]?(0,S.default)(se,te[he](ue)):se,{});return re.propTypes={},re.filterProps=G.reduce((ue,se)=>ue.concat(se.filterProps),[]),re}var R=h.default=C}),Xc=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.borderTopColor=h.borderTop=h.borderRightColor=h.borderRight=h.borderRadius=h.borderLeftColor=h.borderLeft=h.borderColor=h.borderBottomColor=h.borderBottom=h.border=void 0,h.borderTransform=re,h.outlineColor=h.outline=h.default=void 0;var S=w(hc()),C=w(cd()),R=w(ku()),G=fd(),te=ba();function re(De){return typeof De!="number"?De:`${De}px solid`}function ue(De,Ze){return(0,C.default)({prop:De,themeKey:"borders",transform:Ze})}var se=h.border=ue("border",re),he=h.borderTop=ue("borderTop",re),_e=h.borderRight=ue("borderRight",re),Ie=h.borderBottom=ue("borderBottom",re),Ce=h.borderLeft=ue("borderLeft",re),ke=h.borderColor=ue("borderColor"),ze=h.borderTopColor=ue("borderTopColor"),Le=h.borderRightColor=ue("borderRightColor"),Te=h.borderBottomColor=ue("borderBottomColor"),lt=h.borderLeftColor=ue("borderLeftColor"),dt=h.outline=ue("outline",re),tt=h.outlineColor=ue("outlineColor"),it=De=>{if(De.borderRadius!==void 0&&De.borderRadius!==null){let Ze=(0,G.createUnaryUnit)(De.theme,"shape.borderRadius",4,"borderRadius"),ct=gt=>({borderRadius:(0,G.getValue)(Ze,gt)});return(0,te.handleBreakpoints)(De,De.borderRadius,ct)}return null};h.borderRadius=it,it.propTypes={},it.filterProps=["borderRadius"];var Ke=(0,R.default)(se,he,_e,Ie,Ce,ke,ze,Le,Te,lt,it,dt,tt),st=h.default=Ke}),pb=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.rowGap=h.gridTemplateRows=h.gridTemplateColumns=h.gridTemplateAreas=h.gridRow=h.gridColumn=h.gridAutoRows=h.gridAutoFlow=h.gridAutoColumns=h.gridArea=h.gap=h.default=h.columnGap=void 0;var S=w(cd()),C=w(ku()),R=fd(),G=ba(),te=w(hc()),re=it=>{if(it.gap!==void 0&&it.gap!==null){let Ke=(0,R.createUnaryUnit)(it.theme,"spacing",8,"gap"),st=De=>({gap:(0,R.getValue)(Ke,De)});return(0,G.handleBreakpoints)(it,it.gap,st)}return null};h.gap=re,re.propTypes={},re.filterProps=["gap"];var ue=it=>{if(it.columnGap!==void 0&&it.columnGap!==null){let Ke=(0,R.createUnaryUnit)(it.theme,"spacing",8,"columnGap"),st=De=>({columnGap:(0,R.getValue)(Ke,De)});return(0,G.handleBreakpoints)(it,it.columnGap,st)}return null};h.columnGap=ue,ue.propTypes={},ue.filterProps=["columnGap"];var se=it=>{if(it.rowGap!==void 0&&it.rowGap!==null){let Ke=(0,R.createUnaryUnit)(it.theme,"spacing",8,"rowGap"),st=De=>({rowGap:(0,R.getValue)(Ke,De)});return(0,G.handleBreakpoints)(it,it.rowGap,st)}return null};h.rowGap=se,se.propTypes={},se.filterProps=["rowGap"];var he=h.gridColumn=(0,S.default)({prop:"gridColumn"}),_e=h.gridRow=(0,S.default)({prop:"gridRow"}),Ie=h.gridAutoFlow=(0,S.default)({prop:"gridAutoFlow"}),Ce=h.gridAutoColumns=(0,S.default)({prop:"gridAutoColumns"}),ke=h.gridAutoRows=(0,S.default)({prop:"gridAutoRows"}),ze=h.gridTemplateColumns=(0,S.default)({prop:"gridTemplateColumns"}),Le=h.gridTemplateRows=(0,S.default)({prop:"gridTemplateRows"}),Te=h.gridTemplateAreas=(0,S.default)({prop:"gridTemplateAreas"}),lt=h.gridArea=(0,S.default)({prop:"gridArea"}),dt=(0,C.default)(re,ue,se,he,_e,Ie,Ce,ke,ze,Le,Te,lt),tt=h.default=dt}),n5=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=h.color=h.bgcolor=h.backgroundColor=void 0,h.paletteTransform=R;var S=w(cd()),C=w(ku());function R(he,_e){return _e==="grey"?_e:he}var G=h.color=(0,S.default)({prop:"color",themeKey:"palette",transform:R}),te=h.bgcolor=(0,S.default)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:R}),re=h.backgroundColor=(0,S.default)({prop:"backgroundColor",themeKey:"palette",transform:R}),ue=(0,C.default)(G,te,re),se=h.default=ue}),o5=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.sizeWidth=h.sizeHeight=h.minWidth=h.minHeight=h.maxWidth=h.maxHeight=h.height=h.default=h.boxSizing=void 0,h.sizingTransform=G,h.width=void 0;var S=w(cd()),C=w(ku()),R=ba();function G(Te){return Te<=1&&Te!==0?`${Te*100}%`:Te}var te=h.width=(0,S.default)({prop:"width",transform:G}),re=Te=>{if(Te.maxWidth!==void 0&&Te.maxWidth!==null){let lt=dt=>{var tt,it;let Ke=((tt=Te.theme)==null||(tt=tt.breakpoints)==null||(tt=tt.values)==null?void 0:tt[dt])||R.values[dt];return Ke?((it=Te.theme)==null||(it=it.breakpoints)==null?void 0:it.unit)!=="px"?{maxWidth:`${Ke}${Te.theme.breakpoints.unit}`}:{maxWidth:Ke}:{maxWidth:G(dt)}};return(0,R.handleBreakpoints)(Te,Te.maxWidth,lt)}return null};h.maxWidth=re,re.filterProps=["maxWidth"];var ue=h.minWidth=(0,S.default)({prop:"minWidth",transform:G}),se=h.height=(0,S.default)({prop:"height",transform:G}),he=h.maxHeight=(0,S.default)({prop:"maxHeight",transform:G}),_e=h.minHeight=(0,S.default)({prop:"minHeight",transform:G}),Ie=h.sizeWidth=(0,S.default)({prop:"size",cssProperty:"width",transform:G}),Ce=h.sizeHeight=(0,S.default)({prop:"size",cssProperty:"height",transform:G}),ke=h.boxSizing=(0,S.default)({prop:"boxSizing"}),ze=(0,C.default)(te,re,ue,se,he,_e,ke),Le=h.default=ze}),Js=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;var w=fd(),S=Xc(),C=pb(),R=n5(),G=o5(),te={border:{themeKey:"borders",transform:S.borderTransform},borderTop:{themeKey:"borders",transform:S.borderTransform},borderRight:{themeKey:"borders",transform:S.borderTransform},borderBottom:{themeKey:"borders",transform:S.borderTransform},borderLeft:{themeKey:"borders",transform:S.borderTransform},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:S.borderTransform},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:S.borderRadius},color:{themeKey:"palette",transform:R.paletteTransform},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:R.paletteTransform},backgroundColor:{themeKey:"palette",transform:R.paletteTransform},p:{style:w.padding},pt:{style:w.padding},pr:{style:w.padding},pb:{style:w.padding},pl:{style:w.padding},px:{style:w.padding},py:{style:w.padding},padding:{style:w.padding},paddingTop:{style:w.padding},paddingRight:{style:w.padding},paddingBottom:{style:w.padding},paddingLeft:{style:w.padding},paddingX:{style:w.padding},paddingY:{style:w.padding},paddingInline:{style:w.padding},paddingInlineStart:{style:w.padding},paddingInlineEnd:{style:w.padding},paddingBlock:{style:w.padding},paddingBlockStart:{style:w.padding},paddingBlockEnd:{style:w.padding},m:{style:w.margin},mt:{style:w.margin},mr:{style:w.margin},mb:{style:w.margin},ml:{style:w.margin},mx:{style:w.margin},my:{style:w.margin},margin:{style:w.margin},marginTop:{style:w.margin},marginRight:{style:w.margin},marginBottom:{style:w.margin},marginLeft:{style:w.margin},marginX:{style:w.margin},marginY:{style:w.margin},marginInline:{style:w.margin},marginInlineStart:{style:w.margin},marginInlineEnd:{style:w.margin},marginBlock:{style:w.margin},marginBlockStart:{style:w.margin},marginBlockEnd:{style:w.margin},displayPrint:{cssProperty:!1,transform:ue=>({"@media print":{display:ue}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:C.gap},rowGap:{style:C.rowGap},columnGap:{style:C.columnGap},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:G.sizingTransform},maxWidth:{style:G.maxWidth},minWidth:{transform:G.sizingTransform},height:{transform:G.sizingTransform},maxHeight:{transform:G.sizingTransform},minHeight:{transform:G.sizingTransform},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},re=h.default=te}),Av=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0,h.unstable_createStyleFunctionSx=se;var S=w(ro()),C=w(gm()),R=cd(),G=ba(),te=w(Js());function re(...Ie){let Ce=Ie.reduce((ze,Le)=>ze.concat(Object.keys(Le)),[]),ke=new Set(Ce);return Ie.every(ze=>ke.size===Object.keys(ze).length)}function ue(Ie,Ce){return typeof Ie=="function"?Ie(Ce):Ie}function se(){function Ie(ke,ze,Le,Te){let lt={[ke]:ze,theme:Le},dt=Te[ke];if(!dt)return{[ke]:ze};let{cssProperty:tt=ke,themeKey:it,transform:Ke,style:st}=dt;if(ze==null)return null;if(it==="typography"&&ze==="inherit")return{[ke]:ze};let De=(0,R.getPath)(Le,it)||{};if(st)return st(lt);let Ze=ct=>{let gt=(0,R.getStyleValue)(De,Ke,ct);return ct===gt&&typeof ct=="string"&&(gt=(0,R.getStyleValue)(De,Ke,`${ke}${ct==="default"?"":(0,S.default)(ct)}`,ct)),tt===!1?gt:{[tt]:gt}};return(0,G.handleBreakpoints)(lt,ze,Ze)}function Ce(ke){var ze;let{sx:Le,theme:Te={}}=ke||{};if(!Le)return null;let lt=(ze=Te.unstable_sxConfig)!=null?ze:te.default;function dt(tt){let it=tt;if(typeof tt=="function")it=tt(Te);else if(typeof tt!="object")return tt;if(!it)return null;let Ke=(0,G.createEmptyBreakpointObject)(Te.breakpoints),st=Object.keys(Ke),De=Ke;return Object.keys(it).forEach(Ze=>{let ct=ue(it[Ze],Te);if(ct!=null)if(typeof ct=="object")if(lt[Ze])De=(0,C.default)(De,Ie(Ze,ct,Te,lt));else{let gt=(0,G.handleBreakpoints)({theme:Te},ct,Et=>({[Ze]:Et}));re(gt,ct)?De[Ze]=Ce({sx:ct,theme:Te}):De=(0,C.default)(De,gt)}else De=(0,C.default)(De,Ie(Ze,ct,Te,lt))}),(0,G.removeUnusedBreakpoints)(st,De)}return Array.isArray(Le)?Le.map(dt):dt(Le)}return Ce}var he=se();he.filterProps=["sx"];var _e=h.default=he}),Kc=y((h,w)=>{function S(C,R){if(C==null)return{};var G={},te=Object.keys(C),re,ue;for(ue=0;ue=0)&&(G[re]=C[re]);return G}w.exports=S,w.exports.__esModule=!0,w.exports.default=w.exports}),db=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=ue;var S=w(Ph()),C=w(Kc()),R=ya(),G=w(Js()),te=["sx"],re=se=>{var he,_e;let Ie={systemProps:{},otherProps:{}},Ce=(he=se==null||(_e=se.theme)==null?void 0:_e.unstable_sxConfig)!=null?he:G.default;return Object.keys(se).forEach(ke=>{Ce[ke]?Ie.systemProps[ke]=se[ke]:Ie.otherProps[ke]=se[ke]}),Ie};function ue(se){let{sx:he}=se,_e=(0,C.default)(se,te),{systemProps:Ie,otherProps:Ce}=re(_e),ke;return Array.isArray(he)?ke=[Ie,...he]:typeof he=="function"?ke=(...ze)=>{let Le=he(...ze);return(0,R.isPlainObject)(Le)?(0,S.default)({},Ie,Le):Ie}:ke=(0,S.default)({},Ie,he),(0,S.default)({},Ce,{sx:ke})}}),Mv=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}}),Object.defineProperty(h,"extendSxProp",{enumerable:!0,get:function(){return C.default}}),Object.defineProperty(h,"unstable_createStyleFunctionSx",{enumerable:!0,get:function(){return S.unstable_createStyleFunctionSx}}),Object.defineProperty(h,"unstable_defaultSxConfig",{enumerable:!0,get:function(){return R.default}});var S=te(Av()),C=w(db()),R=w(Js());function G(re){if(typeof WeakMap!="function")return null;var ue=new WeakMap,se=new WeakMap;return(G=function(he){return he?se:ue})(re)}function te(re,ue){if(!ue&&re&&re.__esModule)return re;if(re===null||typeof re!="object"&&typeof re!="function")return{default:re};var se=G(ue);if(se&&se.has(re))return se.get(re);var he={__proto__:null},_e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var Ie in re)if(Ie!=="default"&&Object.prototype.hasOwnProperty.call(re,Ie)){var Ce=_e?Object.getOwnPropertyDescriptor(re,Ie):null;Ce&&(Ce.get||Ce.set)?Object.defineProperty(he,Ie,Ce):he[Ie]=re[Ie]}return he.default=re,se&&se.set(re,he),he}}),pd=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.breakpointKeys=void 0,h.default=re;var S=w(Kc()),C=w(Ph()),R=["values","unit","step"],G=h.breakpointKeys=["xs","sm","md","lg","xl"],te=ue=>{let se=Object.keys(ue).map(he=>({key:he,val:ue[he]}))||[];return se.sort((he,_e)=>he.val-_e.val),se.reduce((he,_e)=>(0,C.default)({},he,{[_e.key]:_e.val}),{})};function re(ue){let{values:se={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:he="px",step:_e=5}=ue,Ie=(0,S.default)(ue,R),Ce=te(se),ke=Object.keys(Ce);function ze(tt){return`@media (min-width:${typeof se[tt]=="number"?se[tt]:tt}${he})`}function Le(tt){return`@media (max-width:${(typeof se[tt]=="number"?se[tt]:tt)-_e/100}${he})`}function Te(tt,it){let Ke=ke.indexOf(it);return`@media (min-width:${typeof se[tt]=="number"?se[tt]:tt}${he}) and (max-width:${(Ke!==-1&&typeof se[ke[Ke]]=="number"?se[ke[Ke]]:it)-_e/100}${he})`}function lt(tt){return ke.indexOf(tt)+1{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;var w={borderRadius:4},S=h.default=w}),hb=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=S;var w=fd();function S(C=8){if(C.mui)return C;let R=(0,w.createUnarySpacing)({spacing:C}),G=(...te)=>(te.length===0?[1]:te).map(re=>{let ue=R(re);return typeof ue=="number"?`${ue}px`:ue}).join(" ");return G.mui=!0,G}}),ym=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=w;function w(S,C){let R=this;return R.vars&&typeof R.getColorSchemeSelector=="function"?{[R.getColorSchemeSelector(S).replace(/(\[[^\]]+\])/,"*:where($1)")]:C}:R.palette.mode===S?C:{}}}),a5=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;var S=w(Ph()),C=w(Kc()),R=w(ya()),G=w(pd()),te=w(i5()),re=w(hb()),ue=w(Av()),se=w(Js()),he=w(ym()),_e=["breakpoints","palette","spacing","shape"];function Ie(ke={},...ze){let{breakpoints:Le={},palette:Te={},spacing:lt,shape:dt={}}=ke,tt=(0,C.default)(ke,_e),it=(0,G.default)(Le),Ke=(0,re.default)(lt),st=(0,R.default)({breakpoints:it,direction:"ltr",components:{},palette:(0,S.default)({mode:"light"},Te),spacing:Ke,shape:(0,S.default)({},te.default,dt)},tt);return st.applyStyles=he.default,st=ze.reduce((De,Ze)=>(0,R.default)(De,Ze),st),st.unstable_sxConfig=(0,S.default)({},se.default,tt?.unstable_sxConfig),st.unstable_sx=function(De){return(0,ue.default)({sx:De,theme:this})},st}var Ce=h.default=Ie}),Po=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}}),Object.defineProperty(h,"private_createBreakpoints",{enumerable:!0,get:function(){return C.default}}),Object.defineProperty(h,"unstable_applyStyles",{enumerable:!0,get:function(){return R.default}});var S=w(a5()),C=w(pd()),R=w(ym())}),Ch=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.alpha=ze,h.blend=st,h.colorChannel=void 0,h.darken=Te,h.decomposeColor=re,h.emphasize=it,h.getContrastRatio=ke,h.getLuminance=Ce,h.hexToRgb=G,h.hslToRgb=Ie,h.lighten=dt,h.private_safeAlpha=Le,h.private_safeColorChannel=void 0,h.private_safeDarken=lt,h.private_safeEmphasize=Ke,h.private_safeLighten=tt,h.recomposeColor=he,h.rgbToHex=_e;var S=w(vl()),C=w(jh());function R(De,Ze=0,ct=1){return(0,C.default)(De,Ze,ct)}function G(De){De=De.slice(1);let Ze=new RegExp(`.{1,${De.length>=6?2:1}}`,"g"),ct=De.match(Ze);return ct&&ct[0].length===1&&(ct=ct.map(gt=>gt+gt)),ct?`rgb${ct.length===4?"a":""}(${ct.map((gt,Et)=>Et<3?parseInt(gt,16):Math.round(parseInt(gt,16)/255*1e3)/1e3).join(", ")})`:""}function te(De){let Ze=De.toString(16);return Ze.length===1?`0${Ze}`:Ze}function re(De){if(De.type)return De;if(De.charAt(0)==="#")return re(G(De));let Ze=De.indexOf("("),ct=De.substring(0,Ze);if(["rgb","rgba","hsl","hsla","color"].indexOf(ct)===-1)throw new Error((0,S.default)(9,De));let gt=De.substring(Ze+1,De.length-1),Et;if(ct==="color"){if(gt=gt.split(" "),Et=gt.shift(),gt.length===4&>[3].charAt(0)==="/"&&(gt[3]=gt[3].slice(1)),["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(Et)===-1)throw new Error((0,S.default)(10,Et))}else gt=gt.split(",");return gt=gt.map(zt=>parseFloat(zt)),{type:ct,values:gt,colorSpace:Et}}var ue=De=>{let Ze=re(De);return Ze.values.slice(0,3).map((ct,gt)=>Ze.type.indexOf("hsl")!==-1&>!==0?`${ct}%`:ct).join(" ")};h.colorChannel=ue;var se=(De,Ze)=>{try{return ue(De)}catch{return De}};h.private_safeColorChannel=se;function he(De){let{type:Ze,colorSpace:ct}=De,{values:gt}=De;return Ze.indexOf("rgb")!==-1?gt=gt.map((Et,zt)=>zt<3?parseInt(Et,10):Et):Ze.indexOf("hsl")!==-1&&(gt[1]=`${gt[1]}%`,gt[2]=`${gt[2]}%`),Ze.indexOf("color")!==-1?gt=`${ct} ${gt.join(" ")}`:gt=`${gt.join(", ")}`,`${Ze}(${gt})`}function _e(De){if(De.indexOf("#")===0)return De;let{values:Ze}=re(De);return`#${Ze.map((ct,gt)=>te(gt===3?Math.round(255*ct):ct)).join("")}`}function Ie(De){De=re(De);let{values:Ze}=De,ct=Ze[0],gt=Ze[1]/100,Et=Ze[2]/100,zt=gt*Math.min(Et,1-Et),Yt=(Zr,at=(Zr+ct/30)%12)=>Et-zt*Math.max(Math.min(at-3,9-at,1),-1),Tr="rgb",_r=[Math.round(Yt(0)*255),Math.round(Yt(8)*255),Math.round(Yt(4)*255)];return De.type==="hsla"&&(Tr+="a",_r.push(Ze[3])),he({type:Tr,values:_r})}function Ce(De){De=re(De);let Ze=De.type==="hsl"||De.type==="hsla"?re(Ie(De)).values:De.values;return Ze=Ze.map(ct=>(De.type!=="color"&&(ct/=255),ct<=.03928?ct/12.92:((ct+.055)/1.055)**2.4)),Number((.2126*Ze[0]+.7152*Ze[1]+.0722*Ze[2]).toFixed(3))}function ke(De,Ze){let ct=Ce(De),gt=Ce(Ze);return(Math.max(ct,gt)+.05)/(Math.min(ct,gt)+.05)}function ze(De,Ze){return De=re(De),Ze=R(Ze),(De.type==="rgb"||De.type==="hsl")&&(De.type+="a"),De.type==="color"?De.values[3]=`/${Ze}`:De.values[3]=Ze,he(De)}function Le(De,Ze,ct){try{return ze(De,Ze)}catch{return De}}function Te(De,Ze){if(De=re(De),Ze=R(Ze),De.type.indexOf("hsl")!==-1)De.values[2]*=1-Ze;else if(De.type.indexOf("rgb")!==-1||De.type.indexOf("color")!==-1)for(let ct=0;ct<3;ct+=1)De.values[ct]*=1-Ze;return he(De)}function lt(De,Ze,ct){try{return Te(De,Ze)}catch{return De}}function dt(De,Ze){if(De=re(De),Ze=R(Ze),De.type.indexOf("hsl")!==-1)De.values[2]+=(100-De.values[2])*Ze;else if(De.type.indexOf("rgb")!==-1)for(let ct=0;ct<3;ct+=1)De.values[ct]+=(255-De.values[ct])*Ze;else if(De.type.indexOf("color")!==-1)for(let ct=0;ct<3;ct+=1)De.values[ct]+=(1-De.values[ct])*Ze;return he(De)}function tt(De,Ze,ct){try{return dt(De,Ze)}catch{return De}}function it(De,Ze=.15){return Ce(De)>.5?Te(De,Ze):dt(De,Ze)}function Ke(De,Ze,ct){try{return Ke(De,Ze)}catch{return De}}function st(De,Ze,ct,gt=1){let Et=(_r,Zr)=>Math.round((_r**(1/gt)*(1-ct)+Zr**(1/gt)*ct)**gt),zt=re(De),Yt=re(Ze),Tr=[Et(zt.values[0],Yt.values[0]),Et(zt.values[1],Yt.values[1]),Et(zt.values[2],Yt.values[2])];return he({type:"rgb",values:Tr})}}),mb=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=st,h.shouldForwardProp=Te,h.systemDefaultTheme=void 0;var S=w(Ph()),C=w(Kc()),R=ke(Cv()),G=ya(),te=w(ro()),re=w(T4()),ue=w(Po()),se=w(Mv()),he=["ownerState"],_e=["variants"],Ie=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function Ce(De){if(typeof WeakMap!="function")return null;var Ze=new WeakMap,ct=new WeakMap;return(Ce=function(gt){return gt?ct:Ze})(De)}function ke(De,Ze){if(!Ze&&De&&De.__esModule)return De;if(De===null||typeof De!="object"&&typeof De!="function")return{default:De};var ct=Ce(Ze);if(ct&&ct.has(De))return ct.get(De);var gt={__proto__:null},Et=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var zt in De)if(zt!=="default"&&Object.prototype.hasOwnProperty.call(De,zt)){var Yt=Et?Object.getOwnPropertyDescriptor(De,zt):null;Yt&&(Yt.get||Yt.set)?Object.defineProperty(gt,zt,Yt):gt[zt]=De[zt]}return gt.default=De,ct&&ct.set(De,gt),gt}function ze(De){return Object.keys(De).length===0}function Le(De){return typeof De=="string"&&De.charCodeAt(0)>96}function Te(De){return De!=="ownerState"&&De!=="theme"&&De!=="sx"&&De!=="as"}var lt=h.systemDefaultTheme=(0,ue.default)(),dt=De=>De&&De.charAt(0).toLowerCase()+De.slice(1);function tt({defaultTheme:De,theme:Ze,themeId:ct}){return ze(Ze)?De:Ze[ct]||Ze}function it(De){return De?(Ze,ct)=>ct[De]:null}function Ke(De,Ze){let{ownerState:ct}=Ze,gt=(0,C.default)(Ze,he),Et=typeof De=="function"?De((0,S.default)({ownerState:ct},gt)):De;if(Array.isArray(Et))return Et.flatMap(zt=>Ke(zt,(0,S.default)({ownerState:ct},gt)));if(Et&&typeof Et=="object"&&Array.isArray(Et.variants)){let{variants:zt=[]}=Et,Yt=(0,C.default)(Et,_e);return zt.forEach(Tr=>{let _r=!0;typeof Tr.props=="function"?_r=Tr.props((0,S.default)({ownerState:ct},gt,ct)):Object.keys(Tr.props).forEach(Zr=>{ct?.[Zr]!==Tr.props[Zr]&>[Zr]!==Tr.props[Zr]&&(_r=!1)}),_r&&(Array.isArray(Yt)||(Yt=[Yt]),Yt.push(typeof Tr.style=="function"?Tr.style((0,S.default)({ownerState:ct},gt,ct)):Tr.style))}),Yt}return Et}function st(De={}){let{themeId:Ze,defaultTheme:ct=lt,rootShouldForwardProp:gt=Te,slotShouldForwardProp:Et=Te}=De,zt=Yt=>(0,se.default)((0,S.default)({},Yt,{theme:tt((0,S.default)({},Yt,{defaultTheme:ct,themeId:Ze}))}));return zt.__mui_systemSx=!0,(Yt,Tr={})=>{(0,R.internal_processStyles)(Yt,jo=>jo.filter(cs=>!(cs!=null&&cs.__mui_systemSx)));let{name:_r,slot:Zr,skipVariantsResolver:at,skipSx:Bt,overridesResolver:pn=it(dt(Zr))}=Tr,Dt=(0,C.default)(Tr,Ie),Gt=at!==void 0?at:Zr&&Zr!=="Root"&&Zr!=="root"||!1,fr=Bt||!1,pr,nn=Te;Zr==="Root"||Zr==="root"?nn=gt:Zr?nn=Et:Le(Yt)&&(nn=void 0);let dn=(0,R.default)(Yt,(0,S.default)({shouldForwardProp:nn,label:pr},Dt)),_o=jo=>typeof jo=="function"&&jo.__emotion_real!==jo||(0,G.isPlainObject)(jo)?cs=>Ke(jo,(0,S.default)({},cs,{theme:tt({theme:cs.theme,defaultTheme:ct,themeId:Ze})})):jo,Kr=(jo,...cs)=>{let In=_o(jo),Co=cs?cs.map(_o):[];_r&&pn&&Co.push(nl=>{let ca=tt((0,S.default)({},nl,{defaultTheme:ct,themeId:Ze}));if(!ca.components||!ca.components[_r]||!ca.components[_r].styleOverrides)return null;let Gu=ca.components[_r].styleOverrides,Ju={};return Object.entries(Gu).forEach(([gf,Ld])=>{Ju[gf]=Ke(Ld,(0,S.default)({},nl,{theme:ca}))}),pn(nl,Ju)}),_r&&!Gt&&Co.push(nl=>{var ca;let Gu=tt((0,S.default)({},nl,{defaultTheme:ct,themeId:Ze})),Ju=Gu==null||(ca=Gu.components)==null||(ca=ca[_r])==null?void 0:ca.variants;return Ke({variants:Ju},(0,S.default)({},nl,{theme:Gu}))}),fr||Co.push(zt);let mi=Co.length-cs.length;if(Array.isArray(jo)&&mi>0){let nl=new Array(mi).fill("");In=[...jo,...nl],In.raw=[...jo.raw,...nl]}let p0=dn(In,...Co);return Yt.muiName&&(p0.muiName=Yt.muiName),p0};return dn.withConfig&&(Kr.withConfig=dn.withConfig),Kr}}}),Th=T(q()),s5=T(Z()),Rv=T(me()),Ah=T(ge()),Jl=T(Z());function Pu(h){h()}var Dv=Pu,yl=h=>Dv=h,zv=()=>Dv,bm=T(q()),Mh=T(q()),Nv=T(q()),fi=Symbol.for("react-redux-context"),l5=typeof globalThis<"u"?globalThis:{};function Rh(){var h;if(!Nv.createContext)return{};let w=(h=l5[fi])!=null?h:l5[fi]=new Map,S=w.get(Nv.createContext);return S||(S=Nv.createContext(null),w.set(Nv.createContext,S)),S}var np=Rh();function Yc(h=np){return function(){return(0,Mh.useContext)(h)}}var vb=Yc(),wm=()=>{throw new Error("uSES not initialized!")},Vt=wm,gb=h=>{Vt=h},Om=(h,w)=>h===w;function yb(h=np){let w=h===np?vb:Yc(h);return function(S,C={}){let{equalityFn:R=Om,stabilityCheck:G=void 0,noopCheck:te=void 0}=typeof C=="function"?{equalityFn:C}:C,{store:re,subscription:ue,getServerState:se,stabilityCheck:he,noopCheck:_e}=w(),Ie=(0,bm.useRef)(!0),Ce=(0,bm.useCallback)({[S.name](ze){let Le=S(ze);if(!1){if((v==="always"||v==="once"&&Ie.current)&&!R(Le,b))try{}catch(Te){}if((x==="always"||x==="once"&&Ie.current)&&Le===ze)try{}catch(Te){}}return Le}}[S.name],[S,he,G]),ke=Vt(ue.addNestedSub,re.getState,se||re.getState,Ce,R);return(0,bm.useDebugValue)(ke),ke}}var bb=yb();Pe();function Fo(h,w){if(h==null)return{};var S={},C=Object.keys(h),R,G;for(G=0;G=0)&&(S[R]=h[R]);return S}var A4=T(Je()),M4=T(q()),Xl=T(Ve());Pe();function wb(){let h=zv(),w=null,S=null;return{clear(){w=null,S=null},notify(){h(()=>{let C=w;for(;C;)C.callback(),C=C.next})},get(){let C=[],R=w;for(;R;)C.push(R),R=R.next;return C},subscribe(C){let R=!0,G=S={callback:C,next:null,prev:S};return G.prev?G.prev.next=G:w=G,function(){!R||w===null||(R=!1,G.next?G.next.prev=G.prev:S=G.prev,G.prev?G.prev.next=G.next:w=G.next)}}}}var xm={notify(){},get:()=>[]};function dd(h,w){let S,C=xm,R=0,G=!1;function te(ze){he();let Le=C.subscribe(ze),Te=!1;return()=>{Te||(Te=!0,Le(),_e())}}function re(){C.notify()}function ue(){ke.onStateChange&&ke.onStateChange()}function se(){return G}function he(){R++,S||(S=w?w.addNestedSub(ue):h.subscribe(ue),C=wb())}function _e(){R--,S&&R===0&&(S(),S=void 0,C.clear(),C=xm)}function Ie(){G||(G=!0,he())}function Ce(){G&&(G=!1,_e())}let ke={addNestedSub:te,notifyNestedSubs:re,handleChangeWrapper:ue,isSubscribed:se,trySubscribe:Ie,tryUnsubscribe:Ce,getListeners:()=>C};return ke}var _m=T(q()),Lv=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",hd=Lv?_m.useLayoutEffect:_m.useEffect,Fv=wm,Sm=h=>{Fv=h},Bv=T(q());function u5({store:h,context:w,children:S,serverState:C,stabilityCheck:R="once",noopCheck:G="once"}){let te=Bv.useMemo(()=>{let ue=dd(h);return{store:h,subscription:ue,getServerState:C?()=>C:void 0,stabilityCheck:R,noopCheck:G}},[h,C,R,G]),re=Bv.useMemo(()=>h.getState(),[h]);return hd(()=>{let{subscription:ue}=te;return ue.onStateChange=ue.notifyNestedSubs,ue.trySubscribe(),re!==h.getState()&&ue.notifyNestedSubs(),()=>{ue.tryUnsubscribe(),ue.onStateChange=void 0}},[te,re]),Bv.createElement((w||np).Provider,{value:te},S)}var Em=u5;function Kl(h=np){let w=h===np?vb:Yc(h);return function(){let{store:S}=w();return S}}var Dh=Kl();function Im(h=np){let w=h===np?Dh:Kl(h);return function(){return w().dispatch}}var Xs=Im();gb(Ah.useSyncExternalStoreWithSelector),Sm(Rv.useSyncExternalStore),yl(Jl.unstable_batchedUpdates);var Qc=()=>Xs(),Gi=bb;function aa(h){for(var w=arguments.length,S=Array(w>1?w-1:0),C=1;C3?w.i-4:w.i:Array.isArray(h)?1:vd(h)?2:xb(h)?3:0}function op(h,w){return md(h)===2?h.has(w):Object.prototype.hasOwnProperty.call(h,w)}function Ob(h,w){return md(h)===2?h.get(w):h[w]}function c5(h,w,S){var C=md(h);C===2?h.set(w,S):C===3?h.add(S):h[w]=S}function Wv(h,w){return h===w?h!==0||1/h==1/w:h!=h&&w!=w}function vd(h){return p5&&h instanceof Map}function xb(h){return bd&&h instanceof Set}function Ql(h){return h.o||h.t}function zh(h){if(Array.isArray(h))return Array.prototype.slice.call(h);var w=Ht(h);delete w[Ro];for(var S=gc(w),C=0;C1&&(h.set=h.add=h.clear=h.delete=f5),Object.freeze(h),w&&ef(h,function(S,C){return _b(C,!0)},!0)),h}function f5(){aa(2)}function Sb(h){return h==null||typeof h!="object"||Object.isFrozen(h)}function Fa(h){var w=wd[h];return w||aa(18,h),w}function Hv(h,w){wd[h]||(wd[h]=w)}function km(){return Tm}function $v(h,w){w&&(Fa("Patches"),h.u=[],h.s=[],h.v=w)}function gd(h){Vv(h),h.p.forEach(Pm),h.p=null}function Vv(h){h===Tm&&(Tm=h.l)}function qv(h){return Tm={p:[],l:Tm,h,m:!0,_:0}}function Pm(h){var w=h[Ro];w.i===0||w.i===1?w.j():w.g=!0}function bl(h,w){w._=w.p.length;var S=w.p[0],C=h!==void 0&&h!==S;return w.h.O||Fa("ES5").S(w,h,C),C?(S[Ro].P&&(gd(w),aa(4)),Yl(h)&&(h=tf(w,h),w.l||mc(w,h)),w.u&&Fa("Patches").M(S[Ro].t,h,w.u,w.s)):h=tf(w,S,[]),gd(w),w.u&&w.v(w.u,w.s),h!==rf?h:void 0}function tf(h,w,S){if(Sb(w))return w;var C=w[Ro];if(!C)return ef(w,function(re,ue){return ju(h,C,w,re,ue,S)},!0),w;if(C.A!==h)return w;if(!C.P)return mc(h,C.t,!0),C.t;if(!C.I){C.I=!0,C.A._--;var R=C.i===4||C.i===5?C.o=zh(C.k):C.o,G=R,te=!1;C.i===3&&(G=new Set(R),R.clear(),te=!0),ef(G,function(re,ue){return ju(h,C,R,re,ue,S,te)}),mc(h,R,!1),S&&h.u&&Fa("Patches").N(C,S,h.u,h.s)}return C.o}function ju(h,w,S,C,R,G,te){if(Zc(R)){var re=tf(h,R,G&&w&&w.i!==3&&!op(w.R,C)?G.concat(C):void 0);if(c5(S,C,re),!Zc(re))return;h.m=!1}else te&&S.add(R);if(Yl(R)&&!Sb(R)){if(!h.h.D&&h._<1)return;tf(h,R),w&&w.A.l||mc(h,R)}}function mc(h,w,S){S===void 0&&(S=!1),!h.l&&h.h.D&&h.m&&_b(w,S)}function ip(h,w){var S=h[Ro];return(S?Ql(S):h)[w]}function jm(h,w){if(w in h)for(var S=Object.getPrototypeOf(h);S;){var C=Object.getOwnPropertyDescriptor(S,w);if(C)return C;S=Object.getPrototypeOf(S)}}function vc(h){h.P||(h.P=!0,h.l&&vc(h.l))}function Nh(h){h.o||(h.o=zh(h.t))}function Uv(h,w,S){var C=vd(w)?Fa("MapSet").F(w,S):xb(w)?Fa("MapSet").T(w,S):h.O?function(R,G){var te=Array.isArray(R),re={i:te?1:0,A:G?G.A:km(),P:!1,I:!1,R:{},l:G,t:R,k:null,o:null,j:null,C:!1},ue=re,se=sp;te&&(ue=[re],se=Cu);var he=Proxy.revocable(ue,se),_e=he.revoke,Ie=he.proxy;return re.k=Ie,re.j=_e,Ie}(w,S):Fa("ES5").J(w,S);return(S?S.A:km()).p.push(C),C}function yd(h){return Zc(h)||aa(22,h),function w(S){if(!Yl(S))return S;var C,R=S[Ro],G=md(S);if(R){if(!R.P&&(R.i<4||!Fa("ES5").K(R)))return R.t;R.I=!0,C=ap(S,G),R.I=!1}else C=ap(S,G);return ef(C,function(te,re){R&&Ob(R.t,te)===re||c5(C,te,w(re))}),G===3?new Set(C):C}(h)}function ap(h,w){switch(w){case 2:return new Map(h);case 3:return Array.from(h)}return zh(h)}function Zl(){function h(te,re){var ue=G[te];return ue?ue.enumerable=re:G[te]=ue={configurable:!0,enumerable:re,get:function(){var se=this[Ro];return sp.get(se,te)},set:function(se){var he=this[Ro];sp.set(he,te,se)}},ue}function w(te){for(var re=te.length-1;re>=0;re--){var ue=te[re][Ro];if(!ue.P)switch(ue.i){case 5:C(ue)&&vc(ue);break;case 4:S(ue)&&vc(ue)}}}function S(te){for(var re=te.t,ue=te.k,se=gc(ue),he=se.length-1;he>=0;he--){var _e=se[he];if(_e!==Ro){var Ie=re[_e];if(Ie===void 0&&!op(re,_e))return!0;var Ce=ue[_e],ke=Ce&&Ce[Ro];if(ke?ke.t!==Ie:!Wv(Ce,Ie))return!0}}var ze=!!re[Ro];return se.length!==gc(re).length+(ze?0:1)}function C(te){var re=te.k;if(re.length!==te.t.length)return!0;var ue=Object.getOwnPropertyDescriptor(re,re.length-1);if(ue&&!ue.get)return!0;for(var se=0;se1?Te-1:0),dt=1;dt1?he-1:0),Ie=1;Ie=0;R--){var G=C[R];if(G.path.length===0&&G.op==="replace"){S=G.value;break}}R>-1&&(C=C.slice(R+1));var te=Fa("Patches").$;return Zc(S)?te(S,C):this.produce(S,function(re){return te(re,C)})},h}(),pi=new no,Gv=pi.produce,nf=pi.produceWithPatches.bind(pi),yc=pi.setAutoFreeze.bind(pi),D4=pi.setUseProxies.bind(pi),Od=pi.applyPatches.bind(pi),of=pi.createDraft.bind(pi),Jv=pi.finishDraft.bind(pi),Tu=Gv;function Am(h){"@babel/helpers - typeof";return Am=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(w){return typeof w}:function(w){return w&&typeof Symbol=="function"&&w.constructor===Symbol&&w!==Symbol.prototype?"symbol":typeof w},Am(h)}function h5(h,w){if(Am(h)!="object"||!h)return h;var S=h[Symbol.toPrimitive];if(S!==void 0){var C=S.call(h,w||"default");if(Am(C)!="object")return C;throw new TypeError("@@toPrimitive must return a primitive value.")}return(w==="string"?String:Number)(h)}function z4(h){var w=h5(h,"string");return Am(w)=="symbol"?w:String(w)}function di(h,w,S){return w=z4(w),w in h?Object.defineProperty(h,w,{value:S,enumerable:!0,configurable:!0,writable:!0}):h[w]=S,h}function Fh(h,w){var S=Object.keys(h);if(Object.getOwnPropertySymbols){var C=Object.getOwnPropertySymbols(h);w&&(C=C.filter(function(R){return Object.getOwnPropertyDescriptor(h,R).enumerable})),S.push.apply(S,C)}return S}function m5(h){for(var w=1;w"u"&&(S=w,w=void 0),typeof S<"u"){if(typeof S!="function")throw new Error(Ji(1));return S(Ib)(h,w)}if(typeof h!="function")throw new Error(Ji(2));var R=h,G=w,te=[],re=te,ue=!1;function se(){re===te&&(re=te.slice())}function he(){if(ue)throw new Error(Ji(3));return G}function _e(ze){if(typeof ze!="function")throw new Error(Ji(4));if(ue)throw new Error(Ji(5));var Le=!0;return se(),re.push(ze),function(){if(Le){if(ue)throw new Error(Ji(6));Le=!1,se();var Te=re.indexOf(ze);re.splice(Te,1),te=null}}}function Ie(ze){if(!v5(ze))throw new Error(Ji(7));if(typeof ze.type>"u")throw new Error(Ji(8));if(ue)throw new Error(Ji(9));try{ue=!0,G=R(G,ze)}finally{ue=!1}for(var Le=te=re,Te=0;Te"u")throw new Error(Ji(12));if(typeof S(void 0,{type:eu.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Ji(13))})}function g5(h){for(var w=Object.keys(h),S={},C=0;C"u"){var lt=se&&se.type;throw new Error(Ji(14))}Ie[ke]=Te,_e=_e||Te!==Le}return _e=_e||G.length!==Object.keys(ue).length,_e?Ie:ue}}function Xv(){for(var h=arguments.length,w=new Array(h),S=0;S0&&G[G.length-1])&&(se[0]===6||se[0]===2)){S=0;continue}if(se[0]===3&&(!G||se[1]>G[0]&&se[1]1){var S=h.shift();h[0]=S+h[0]}h[0].match(/^file:\/\/\//)?h[0]=h[0].replace(/^([^/:]+):\/*/,"$1:///"):h[0]=h[0].replace(/^([^/:]+):\/*/,"$1://");for(var C=0;C0&&(R=R.replace(/^[\/]+/,"")),C0?"?":"")+te.join("&"),G}function $4(){var h;return typeof arguments[0]=="object"?h=arguments[0]:h=[].slice.call(arguments),Qv(h)}var Wh={stats:void 0,bannerText:""},ou=Ks("home_stats",async(h,{rejectWithValue:w})=>{try{return await Sd("api/v2/stats")}catch(S){return w(S.message)}}),Hh=Ks("home_banner",async(h,{rejectWithValue:w})=>{try{return(await fetch($4("/","banner.txt"))).text()}catch(S){return w(S.message)}}),_5=xt({name:"home",initialState:Wh,reducers:{},extraReducers:h=>{h.addCase(ou.fulfilled,(w,S)=>{w.stats=S.payload}),h.addCase(ou.rejected,w=>{w.stats=Wh.stats}),h.addCase(Hh.fulfilled,(w,S)=>{w.bannerText=S.payload}),h.addCase(Hh.rejected,w=>{w.bannerText=Wh.bannerText})}}),u7=_5.reducer,V4=T(q()),hi=class ehe{constructor(w,S){this.value=w,this.axioms=S}static fromJson(w){return w?(Array.isArray(w)||(w=[w]),w.map(S=>typeof S=="object"&&Array.isArray(S.type)&&S.type.indexOf("reification")!==-1?new ehe(S.value,S.axioms):new ehe(S,null))):[]}hasMetadata(){return this.axioms!=null}getMetadata(){if(!this.axioms)return null;let w={};for(let S of this.axioms)for(let C of Object.keys(S)){let R=S[C],G=w[C];G!==void 0?G.push(R):w[C]=[R]}return w}},Tb=class the{constructor(w){w?this.linkedEntities={...w}:this.linkedEntities={}}mergeWith(w){return w?new the({...this.linkedEntities,linkedEntities:w}):new the({...this.linkedEntities})}getLabelForIri(w){let S=this.linkedEntities[w];if(S){let C=hi.fromJson(S.label);if(C&&C.length>0)return C[0].value}}get(w){return this.linkedEntities[w]}},Du=class{constructor(h){this.properties=h}getId(){return this.properties.id}getIri(){return this.properties.iri}getType(){let h=this.properties.type;for(let w of h)if(["ontology","class","property","individual"].indexOf(w)!==-1)return w;throw new Error("unknown type")}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getRdfTypes(){return Bo(this.properties["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"])}getName(){return this.getNames()[0]}getNames(){let h=hi.fromJson(this.properties.label);return h&&h.length>0?h.map(w=>w.value):[this.getIri()]}getDescription(){let h=hi.fromJson(this.properties.definition);return h&&h.length>0?h.map(w=>w.value||"").join(" "):""}getOntologyId(){return this.properties.ontologyId}getLabelForIri(h){let w=this.properties.linkedEntities;return w&&hi.fromJson(w[h]?.label)[0]?.value||h}getAnnotationById(h){return hi.fromJson(Bo(this.properties[h]))}getLinkedEntities(){return new Tb(this.properties.linkedEntities||{})}},$h=class extends Du{isCanonical(){return this.properties.isDefiningOntology===!0}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]==="true"}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return hi.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(hi.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return hi.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return hi.fromJson(this.properties.definition)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.hasDirectChildren()||this.hasHierarchicalChildren()}getAncestorIris(){return Bo(this.properties.ancestor)}getHierarchicalAncestorIris(){return Bo(this.properties.hierarchicalAncestor)}getSynonyms(){return hi.fromJson(this.properties.synonym)}getAppearsIn(){return this.properties.appearsIn||[]}getDefinedBy(){return this.properties.definedBy||[]}getShortForm(){return this.properties.curie||this.properties.shortForm}getDepictedBy(){return hi.fromJson(this.properties["http://xmlns.com/foaf/0.1/depicted_by"])}getAnnotationPredicates(){let h=Bo(this.properties.definitionProperty),w=Bo(this.properties.synonymProperty),S=Bo(this.properties.hierarchicalProperty),C=new Set;for(let R of Object.keys(this.properties)){if(R.indexOf("://")===-1||R.startsWith("negativePropertyAssertion+")||R==="http://xmlns.com/foaf/0.1/depicted_by")continue;let G=this.getLinkedEntities().get(R);G!=null&&G.type.indexOf("objectProperty")!==-1||G!=null&&G.type.indexOf("dataProperty")!==-1||h.indexOf(R)!==-1||w.indexOf(R)!==-1||S.indexOf(R)!==-1||(R.startsWith("http://www.w3.org/2000/01/rdf-schema#")||R.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||R.startsWith("http://www.w3.org/2002/07/owl#"))&&R!=="http://www.w3.org/2000/01/rdf-schema#comment"&&R!=="http://www.w3.org/2000/01/rdf-schema#seeAlso"&&R!=="http://www.w3.org/2002/07/owl#disjointUnionOf"||R!=="http://www.geneontology.org/formats/oboInOwl#id"&&C.add(R)}return Array.from(C)}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDescendants?parseInt(this.properties.numDescendants):0}getHierarchicalParentReificationAxioms(h){let w=hi.fromJson(this.properties.hierarchicalParent);for(let S of w)if(S.value===h)return S.getMetadata()}},c7=class extends $h{getParents(){return hi.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return hi.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return hi.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return Bo(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return Bo(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}},S5=class extends $h{getParents(){return hi.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return hi.fromJson([])}getDifferentFrom(){return Bo(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return Bo(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let h=this.getRdfTypes();return!h||!Array.isArray(h)?[]:h.filter(w=>w!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof w!="string"||!w.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}},ns=class extends $h{getParents(){return hi.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return hi.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return hi.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return Bo(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return Bo(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return Bo(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return Bo(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return hi.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};function Bo(h){return Array.isArray(h)?h:h?[h]:[]}function cp(){return(Math.random()*Math.pow(2,54)).toString(36)}function iu(h){let w=h.type||[];if(w.indexOf("class")!==-1)return new c7(h);if(w.indexOf("property")!==-1)return new ns(h);if(w.indexOf("individual")!==-1)return new S5(h);throw new Error("Unknown entity type: "+JSON.stringify(h))}function Zv(h){let w=new URLSearchParams;return h.forEach((S,C)=>{let R=C.includes("_")?q4(C):C;R==="oboId"&&(R="curie"),w.append(R,S)}),w}function q4(h){return h.replace(/([-_][a-z])/gi,w=>w.toUpperCase().replace("-","").replace("_",""))}var E5=class extends Du{getOntologyId(){return this.properties.ontologyId}getName(){let h=hi.fromJson(this.properties.label||this.properties.title||"");return h[0]&&h[0].value||this.getOntologyId()}getDescription(){let h=hi.fromJson(this.properties.definition||this.properties.description||"");return h[0]&&h[0].value||""}getSourceFileTimestamp(){return this.properties.sourceFileTimestamp}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfClasses)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.depicted_by||void 0}getOntologyPurl(){return this.properties.ontology_purl}getHomepage(){return this.properties.homepage}getMailingList(){return this.properties.mailing_list}getTracker(){return this.properties.tracker}getVersionIri(){return this.properties["http://www.w3.org/2002/07/owl#versionIRI"]}getVersion(){return this.properties["http://www.w3.org/2002/07/owl#versionInfo"]}getVersionFromIri(){let h=this.properties["http://www.w3.org/2002/07/owl#versionIRI"];if(!h)return"";let w=h.match(/\d{4}-\d{2}-\d{2}/);if(w&&w.length>0)return w[0];{let S=h.match(/\/v[d.].*\//);return S?S[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){let h=new Set;for(let w of Object.keys(this.properties))w.indexOf("://")!==-1&&w!=="http://purl.obolibrary.org/obo/IAO_0000700"&&(w.startsWith("http://www.w3.org/2000/01/rdf-schema#")||w.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||w.startsWith("http://www.w3.org/2002/07/owl#")||h.add(w));return Array.from(h)}getPreferredRoots(){return Bo(this.properties.hasPreferredRoot)}getLanguages(){return Bo(this.properties.language)}getImportsFrom(){return Bo(this.properties.importsFrom)}getExportsTo(){return Bo(this.properties.exportsTo)}},Ab=T(Ue());function Vh(h){let w=new Ab.default,S=new Map;for(let re of h)S.set(re.getIri(),re);for(let re of h)if(!Mb(re.getIri()))for(let ue of re.getParents()){let se=ue.value,he=S.get(se);if(Mb(se)||!(he instanceof $h))continue;var C,R;re.getType()==="individual"?(R="http://www.w3.org/1999/02/22-rdf-syntax-ns#type",C=null):re.getType()=="class"&&(C=ue.getMetadata()&&ue.getMetadata().parentRelationToChild&&ue.getMetadata().parentRelationToChild[0],R=ue.getMetadata()&&ue.getMetadata().childRelationToParent&&ue.getMetadata().childRelationToParent[0]);let _e={parent:he,child:re,parentRelationToChild:C,childRelationToParent:R};w.set(re.getIri(),_e)}var G=function(re,ue){ue.add(re);let se=w.get(re);if(se)for(let he of se)ue.has(he.parent.getIri())?w.delete(re,he):G(he.parent.getIri(),new Set(ue))};for(let re of h)G(re.getIri(),new Set);let te=new Ab.default;for(let re of Array.from(w.keys())){let ue=w.get(re);for(let se of ue)te.set(se.parent.getIri(),se)}return{rootEntities:h.filter(re=>Mb(re.getIri())?!1:(w.get(re.getIri())||[]).length===0),parentToChildRelations:te}}function Mb(h){return h==="http://www.w3.org/2002/07/owl#Thing"||h==="http://www.w3.org/2002/07/owl#TopObjectProperty"}function lf(h,w,S){let{rootEntities:C,parentToChildRelations:R}=Vh(h);if(console.log("rootEntities"),console.dir(C),console.log("parentToChildRelations"),console.dir(R),w){let se=S.getPreferredRoots();se.length>0&&(C=se.map(he=>h.filter(_e=>_e.getIri()===he)[0]).filter(he=>!!he))}let G=[],te={},re=new Set;return{allNodes:G,rootNodes:C.map(se=>ue(se,void 0,0,null,null)),nodeChildren:te,automaticallyExpandedNodes:re};function ue(se,he,_e,Ie,Ce){if(_e>100)throw new Error("probable cyclic tree (createTreeNode)");let ke=R.get(se.getIri())||[],ze={absoluteIdentity:he?he.absoluteIdentity+";"+se.getIri():se.getIri(),iri:se.getIri(),title:se.getName(),expandable:se.hasChildren(),entity:se,numDescendants:se.getNumHierarchicalDescendants()||se.getNumDescendants(),parentRelationToChild:Ie,childRelationToParent:Ce};return G.push(ze),te[ze.absoluteIdentity]=ke.map(Le=>ue(Le.child,ze,_e+1,Le.parentRelationToChild,Le.childRelationToParent)),se.hasChildren()&&ke.length>0&&re.add(ze.absoluteIdentity),ze}}var Ba={ontology:void 0,entity:void 0,nodesWithChildrenLoaded:[],nodeChildren:{},rootNodes:[],ontologies:[],totalOntologies:0,entities:[],totalEntities:0,loadingOntologies:!1,loadingEntities:!1,numPendingTreeRequests:0,loadingOntology:!1,loadingEntity:!1,classInstances:null,loadingClassInstances:!1,automaticallyExpandedNodes:[],manuallyExpandedNodes:[],preferredRoots:!1,displayObsolete:!1,displaySiblings:!1,displayCounts:!0,errorMessage:""},eg=Xi("ontologies_tree_reset_content"),Fm=Xi("ontologies_tree_reset_settings"),Bm=Xi("ontologies_preferred_enabled"),f7=Xi("ontologies_preferred_disabled"),Wm=Xi("ontologies_node_open"),Hm=Xi("ontologies_node_close"),U4=Xi("ontologies_show_obsolete"),Wa=Xi("ontologies_hide_obsolete"),I5=Xi("ontologies_show_siblings"),Rb=Xi("ontologies_hide_siblings"),Db=Xi("ontologies_show_counts"),k5=Xi("ontologies_hide_counts"),P5=Ks("ontologies_ontology",async({ontologyId:h,lang:w,apiUrl:S},{rejectWithValue:C})=>{let R=`api/v2/ontologies/${h}`;try{let G=await Sd(R,{lang:w},S);return new E5(G)}catch(G){return C(`Error accessing: ${R}; ${G.message}`)}}),tg=Ks("ontologies_entity_type",async({ontologyId:h,entityType:w,entityIri:S,searchParams:C},{rejectWithValue:R})=>{let G=Zv(C),te=encodeURIComponent(encodeURIComponent(S)),re="";try{let ue=null;if(S)re=`api/v2/ontologies/${h}/${w}/${te}?${new URLSearchParams(G)}`,ue=await Sd(re);else{re=`api/v2/ontologies/${h}/${w}?${new URLSearchParams(G)}`;let se=await Xo(re);if(se.elements.length===1&&se.totalElements===1)ue=se.elements[0];else return R(`Error accessing: ${re}; Retrieved nondistinct entity: ${JSON.stringify(se)}`)}return iu(ue)}catch(ue){return R(`Error accessing: ${re}; ${ue.message}`)}}),qh=Ks("ontologies_entity",async({ontologyId:h,entityIri:w},{rejectWithValue:S})=>{let C=encodeURIComponent(encodeURIComponent(w)),R="";try{R=`api/v2/ontologies/${h}/entities/${C}`;let G=await Sd(R);return iu(G)}catch(G){return S(`Error accessing: ${R}; ${G.message}`)}}),rg=Ks("ontologies_entity_class_instances",async({ontologyId:h,classIri:w,searchParams:S},{rejectWithValue:C})=>{let R="";try{if(w){let G=Zv(S),te=encodeURIComponent(encodeURIComponent(w));return R=`api/v2/ontologies/${h}/classes/${te}/instances?${new URLSearchParams(G)}`,(await Xo(R)).map(re=>iu(re))}else return C(`Warning accessing: ${R}; Class IRI not provided`)}catch(G){return C(`Error accessing: ${R}; ${G.message}`)}}),$m=Ks("ontologies_ontologies",async({page:h,rowsPerPage:w,search:S},{rejectWithValue:C})=>{S.length>1&&!S.includes(" ")&&(S="*"+S+"*");let R=`api/v2/ontologies?page=${h}&size=${w}${S?"&search="+S:""}`;try{return(await Xo(R)).map(G=>new E5(G))}catch(G){return C(`Error accessing: ${R}; ${G.message}`)}}),ng=Ks("ontologies_entities",async({ontologyId:h,entityType:w,page:S,rowsPerPage:C,search:R},{rejectWithValue:G})=>{let te=`api/v2/ontologies/${h}/${w}?page=${S}&size=${C}${R?"&search="+R:""}`;try{return(await Xo(te)).map(re=>iu(re))}catch(re){return G(`Error accessing: ${te}; ${re.message}`)}}),j5=Ks("ontologies_ancestors",async({ontologyId:h,entityType:w,entityIri:S,lang:C,showObsoleteEnabled:R,apiUrl:G})=>{let te=encodeURIComponent(encodeURIComponent(S));var re;return w==="classes"?re=await Xo(`api/v2/ontologies/${h}/classes/${te}/hierarchicalAncestors?${new URLSearchParams({size:"1000",lang:C,includeObsoleteEntities:R})}`,void 0,G):re=await Xo(`api/v2/ontologies/${h}/${w}/${te}/ancestors?${new URLSearchParams({size:"1000",lang:C,includeObsoleteEntities:R})}`,void 0,G),re.elements.map(ue=>iu(ue))}),og=Ks("ontologies_roots",async({ontologyId:h,entityType:w,preferredRoots:S,lang:C,showObsoleteEnabled:R,apiUrl:G})=>{if(w==="individuals"){let[te,re]=await Promise.all([Xo(`api/v2/ontologies/${h}/classes?${new URLSearchParams({hasIndividuals:"true",size:"1000",lang:C,includeObsoleteEntities:R})}`,void 0,G),Xo(`api/v2/ontologies/${h}/individuals?${new URLSearchParams({hasDirectParent:"false",size:"1000",lang:C,includeObsoleteEntities:R})}`,void 0,G)]);return{entityType:w,rootTerms:null,classesWithIndividuals:te.elements.map(ue=>iu(ue)),orphanedIndividuals:re.elements.map(ue=>iu(ue))}}else if(w==="classes"&&S){let te=await Xo(`api/v2/ontologies/${h}/${w}?${new URLSearchParams({isPreferredRoot:"true",size:"1000",lang:C,includeObsoleteEntities:R})}`,void 0,G);return{entityType:w,rootTerms:te.elements.map(re=>iu(re)),classesWithIndividuals:null,orphanedIndividuals:null}}else{let te=await Xo(`api/v2/ontologies/${h}/${w}?${new URLSearchParams({hasDirectParent:"false",size:"1000",lang:C,includeObsoleteEntities:R})}`,void 0,G);return{entityType:w,rootTerms:te.elements.map(re=>iu(re)),classesWithIndividuals:null,orphanedIndividuals:null}}}),ig=Ks("ontologies_node_children",async({ontologyId:h,entityTypePlural:w,entityIri:S,absoluteIdentity:C,lang:R,apiUrl:G,includeObsoleteEntities:te})=>{let re=encodeURIComponent(encodeURIComponent(S));var ue;return w==="classes"?ue=await Xo(`api/v2/ontologies/${h}/classes/${re}/hierarchicalChildren?${new URLSearchParams({size:"1000",lang:R,includeObsoleteEntities:te})}`,void 0,G):w==="individuals"?ue=await Xo(`api/v2/ontologies/${h}/classes/${re}/instances?${new URLSearchParams({size:"1000",lang:R,includeObsoleteEntities:te})}`,void 0,G):ue=await Xo(`api/v2/ontologies/${h}/${w}/${re}/children?${new URLSearchParams({size:"1000",lang:R,includeObsoleteEntities:te})}`,void 0,G),{absoluteIdentity:C,children:ue.elements.map(se=>iu(se)).map(se=>{let he=se.getHierarchicalParentReificationAxioms(S);return{iri:se.getIri(),absoluteIdentity:C+";"+se.getIri(),title:se.getName(),expandable:se.hasChildren(),entity:se,numDescendants:se.getNumHierarchicalDescendants()||se.getNumDescendants(),parentRelationToChild:he&&he.parentRelationToChild?.[0]||null,childRelationToParent:he&&he.childRelationToParent?.[0]||null}})}}),G4=xt({name:"ontologies",initialState:Ba,reducers:{},extraReducers:h=>{h.addCase(P5.fulfilled,(w,S)=>{w.ontology=S.payload,w.loadingOntology=!1}),h.addCase(P5.pending,w=>{w.loadingOntology=!0,w.errorMessage=Ba.errorMessage}),h.addCase(P5.rejected,(w,S)=>{w.ontology=Ba.ontology,w.loadingOntology=!1,w.errorMessage=S.payload}),h.addCase(tg.fulfilled,(w,S)=>{w.entity=S.payload,w.loadingEntity=!1}),h.addCase(tg.pending,w=>{w.loadingEntity=!0,w.errorMessage=Ba.errorMessage}),h.addCase(tg.rejected,(w,S)=>{w.loadingEntity=!1,w.entity=Ba.entity,w.errorMessage=S.payload}),h.addCase(qh.fulfilled,(w,S)=>{w.entity=S.payload,w.loadingEntity=!1}),h.addCase(qh.pending,w=>{w.loadingEntity=!0,w.errorMessage=Ba.errorMessage}),h.addCase(qh.rejected,(w,S)=>{w.loadingEntity=!1,w.entity=Ba.entity,w.errorMessage=S.payload}),h.addCase(rg.fulfilled,(w,S)=>{w.classInstances=S.payload,w.loadingClassInstances=!1}),h.addCase(rg.pending,w=>{w.loadingClassInstances=!0,w.errorMessage=Ba.errorMessage}),h.addCase(rg.rejected,(w,S)=>{w.loadingClassInstances=!1,w.classInstances=Ba.classInstances,w.errorMessage=S.payload}),h.addCase(j5.pending,w=>{++w.numPendingTreeRequests}),h.addCase(j5.fulfilled,(w,S)=>{let{rootNodes:C,nodeChildren:R,automaticallyExpandedNodes:G}=lf([w.entity,...S.payload],w.preferredRoots,w.ontology);w.rootNodes=C,w.nodeChildren=R,w.automaticallyExpandedNodes=Array.from(new Set([...w.automaticallyExpandedNodes,...Array.from(G)])),--w.numPendingTreeRequests}),h.addCase(j5.rejected,w=>{--w.numPendingTreeRequests}),h.addCase(ig.pending,w=>{++w.numPendingTreeRequests}),h.addCase(ig.fulfilled,(w,S)=>{w.nodeChildren={...w.nodeChildren,[S.payload.absoluteIdentity]:S.payload.children},w.nodesWithChildrenLoaded.push(S.payload.absoluteIdentity),--w.numPendingTreeRequests}),h.addCase(ig.rejected,w=>{--w.numPendingTreeRequests}),h.addCase(og.pending,w=>{++w.numPendingTreeRequests}),h.addCase(og.fulfilled,(w,S)=>{let{rootTerms:C,classesWithIndividuals:R,orphanedIndividuals:G}=S.payload,{rootNodes:te,nodeChildren:re,automaticallyExpandedNodes:ue}=lf([...C||[],...R||[],...G||[]],w.preferredRoots,w.ontology);w.rootNodes=te,w.nodeChildren=re,w.automaticallyExpandedNodes=Array.from(new Set([...w.automaticallyExpandedNodes,...Array.from(ue)])),--w.numPendingTreeRequests}),h.addCase(og.rejected,w=>{--w.numPendingTreeRequests}),h.addCase($m.fulfilled,(w,S)=>{w.ontologies=S.payload.elements,w.totalOntologies=S.payload.totalElements,w.loadingOntologies=!1}),h.addCase($m.pending,w=>{w.loadingOntologies=!0,w.errorMessage=Ba.errorMessage}),h.addCase($m.rejected,(w,S)=>{w.ontologies=Ba.ontologies,w.loadingOntologies=!1,w.errorMessage=S.payload}),h.addCase(ng.fulfilled,(w,S)=>{w.entities=S.payload.elements,w.totalEntities=S.payload.totalElements,w.loadingEntities=!1}),h.addCase(ng.pending,w=>{w.loadingEntities=!0,w.errorMessage=Ba.errorMessage}),h.addCase(ng.rejected,(w,S)=>{w.entities=Ba.entities,w.loadingEntities=!1,w.errorMessage=S.payload}),h.addCase(eg,w=>{w.nodesWithChildrenLoaded=[],w.nodeChildren={},w.rootNodes=[],w.automaticallyExpandedNodes=[]}),h.addCase(Fm,(w,S)=>{if(w.preferredRoots=S.payload.entityType==="classes"&&w.ontology.getPreferredRoots().length>0,S.payload.selectedEntity){let C=!1;for(let R of w.ontology.getPreferredRoots())if(S.payload.selectedEntity.getHierarchicalAncestorIris().indexOf(R)!==-1){C=!0;break}C||(w.preferredRoots=!1)}w.displayObsolete=!1,w.displaySiblings=!1,w.displayCounts=!0,w.manuallyExpandedNodes=[]}),h.addCase(Bm,w=>{w.preferredRoots=!0}),h.addCase(f7,w=>{w.preferredRoots=!1}),h.addCase(U4,w=>{w.displayObsolete=!0}),h.addCase(Wa,w=>{w.displayObsolete=!1}),h.addCase(I5,w=>{w.displaySiblings=!0}),h.addCase(Rb,w=>{w.displaySiblings=!1}),h.addCase(Db,w=>{w.displayCounts=!0}),h.addCase(k5,w=>{w.displayCounts=!1}),h.addCase(Wm,(w,S)=>{w.manuallyExpandedNodes=Array.from(new Set([...w.manuallyExpandedNodes,S.payload.absoluteIdentity]))}),h.addCase(Hm,(w,S)=>{w.manuallyExpandedNodes=w.manuallyExpandedNodes.filter(C=>C!==S.payload.absoluteIdentity),w.automaticallyExpandedNodes=w.automaticallyExpandedNodes.filter(C=>C!==S.payload.absoluteIdentity),delete w.nodeChildren[S.payload.absoluteIdentity],w.nodesWithChildrenLoaded=w.nodesWithChildrenLoaded.filter(C=>C!==S.payload.absoluteIdentity)})}}),J4=G4.reducer,zb={searchResults:[],loadingSearchResults:!1,totalSearchResults:0,facets:Object.create(null)},Nb=Ks("search_results",async({page:h,rowsPerPage:w,search:S,ontologyId:C,type:R,searchParams:G},{rejectWithValue:te})=>{try{let re={search:S,size:w,page:h,facetFields:"ontologyId type",ontologyId:C.length>0?C[0]:null,type:R.length>0?R[0]:null,...Object.fromEntries(G)};for(let se in re)(re[se]===void 0||re[se]===null||re[se]==="")&&delete re[se];let ue=new URLSearchParams(re);return G.get("ontology")&&(ue.set("ontologyId",G.get("ontology")),ue.delete("ontology")),G.get("q")&&ue.delete("q"),(await Xo(`api/v2/entities?${ue}`)).map(se=>iu(se))}catch(re){return te(re.message)}}),X4=xt({name:"search",initialState:zb,reducers:{},extraReducers:h=>{h.addCase(Nb.fulfilled,(w,S)=>{w.searchResults=S.payload.elements,w.totalSearchResults=S.payload.totalElements,w.facets=S.payload.facetFieldsToCounts,w.loadingSearchResults=!1}),h.addCase(Nb.pending,w=>{w.loadingSearchResults=!0}),h.addCase(Nb.rejected,w=>{w.loadingSearchResults=!1,w.searchResults=zb.searchResults,w.facets=zb.facets})}}),Lb=X4.reducer,C5=$({reducer:{home:u7,search:Lb,ontologies:J4},middleware:h=>h({serializableCheck:!1})});rs();var Ed={black:"#000",white:"#fff"},ag=Ed,K4={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},Vm=K4,c9={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},Id=c9,fp={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},wc=fp,Ol={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},kd=Ol,Fb={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},sg=Fb,p7={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},Ys=p7,Pd={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},qm=Pd,Bb="$$material",Uh=T(Cv());Pe();var lg=T(ya());Pe();var T5=["values","unit","step"],Gh=h=>{let w=Object.keys(h).map(S=>({key:S,val:h[S]}))||[];return w.sort((S,C)=>S.val-C.val),w.reduce((S,C)=>ae({},S,{[C.key]:C.val}),{})};function Jh(h){let{values:w={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:S="px",step:C=5}=h,R=Fo(h,T5),G=Gh(w),te=Object.keys(G);function re(Ie){return`@media (min-width:${typeof w[Ie]=="number"?w[Ie]:Ie}${S})`}function ue(Ie){return`@media (max-width:${(typeof w[Ie]=="number"?w[Ie]:Ie)-C/100}${S})`}function se(Ie,Ce){let ke=te.indexOf(Ce);return`@media (min-width:${typeof w[Ie]=="number"?w[Ie]:Ie}${S}) and (max-width:${(ke!==-1&&typeof w[te[ke]]=="number"?w[te[ke]]:Ce)-C/100}${S})`}function he(Ie){return te.indexOf(Ie)+1`@media (min-width:${jd[h]}px)`};function Qs(h,w,S){let C=h.theme||{};if(Array.isArray(w)){let R=C.breakpoints||Um;return w.reduce((G,te,re)=>(G[R.up(R.keys[re])]=S(w[re]),G),{})}if(typeof w=="object"){let R=C.breakpoints||Um;return Object.keys(w).reduce((G,te)=>{if(Object.keys(R.values||jd).indexOf(te)!==-1){let re=R.up(te);G[re]=S(w[te],te)}else{let re=te;G[re]=w[re]}return G},{})}return S(w)}function cg(h={}){var w;return((w=h.keys)==null?void 0:w.reduce((S,C)=>{let R=h.up(C);return S[R]={},S},{}))||{}}function pp(h,w){return h.reduce((S,C)=>{let R=S[C];return(!R||Object.keys(R).length===0)&&delete S[C],S},w)}function Z4(h,...w){let S=cg(h),C=[S,...w].reduce((R,G)=>(0,xl.default)(R,G),{});return pp(Object.keys(S),C)}function A5(h,w){if(typeof h!="object")return{};let S={},C=Object.keys(w);return Array.isArray(h)?C.forEach((R,G)=>{G{h[R]!=null&&(S[R]=!0)}),S}function fg({values:h,breakpoints:w,base:S}){let C=S||A5(h,w),R=Object.keys(C);if(R.length===0)return h;let G;return R.reduce((te,re,ue)=>(Array.isArray(h)?(te[re]=h[ue]!=null?h[ue]:h[G],G=ue):typeof h=="object"?(te[re]=h[re]!=null?h[re]:h[G],G=re):te[re]=h,te),{})}var d7=T(ro());function Wb(h,w,S=!0){if(!w||typeof w!="string")return null;if(h&&h.vars&&S){let C=`vars.${w}`.split(".").reduce((R,G)=>R&&R[G]?R[G]:null,h);if(C!=null)return C}return w.split(".").reduce((C,R)=>C&&C[R]!=null?C[R]:null,h)}function M5(h,w,S,C=S){let R;return typeof h=="function"?R=h(S):Array.isArray(h)?R=h[S]||C:R=Wb(h,S)||C,w&&(R=w(R,C,h)),R}function e6(h){let{prop:w,cssProperty:S=h.prop,themeKey:C,transform:R}=h,G=te=>{if(te[w]==null)return null;let re=te[w],ue=te.theme,se=Wb(ue,C)||{};return Qs(te,re,he=>{let _e=M5(se,R,he);return he===_e&&typeof he=="string"&&(_e=M5(se,R,`${w}${he==="default"?"":(0,d7.default)(he)}`,he)),S===!1?_e:{[S]:_e}})};return G.propTypes={},G.filterProps=[w],G}var Ki=e6;function Hb(h){let w={};return S=>(w[S]===void 0&&(w[S]=h(S)),w[S])}var f9={m:"margin",p:"padding"},R5={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},t6={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},$b=Hb(h=>{if(h.length>2)if(t6[h])h=t6[h];else return[h];let[w,S]=h.split(""),C=f9[w],R=R5[S]||"";return Array.isArray(R)?R.map(G=>C+G):[C+R]}),Vb=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],r6=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],n6=[...Vb,...r6];function qb(h,w,S,C){var R;let G=(R=Wb(h,w,!1))!=null?R:S;return typeof G=="number"?te=>typeof te=="string"?te:G*te:Array.isArray(G)?te=>typeof te=="string"?te:G[te]:typeof G=="function"?G:()=>{}}function Ub(h){return qb(h,"spacing",8,"spacing")}function Kh(h,w){if(typeof w=="string"||w==null)return w;let S=Math.abs(w),C=h(S);return w>=0?C:typeof C=="number"?-C:`-${C}`}function h7(h,w){return S=>h.reduce((C,R)=>(C[R]=Kh(w,S),C),{})}function o6(h,w,S,C){if(w.indexOf(S)===-1)return null;let R=$b(S),G=h7(R,C),te=h[S];return Qs(h,te,G)}function D5(h,w){let S=Ub(h.theme);return Object.keys(h).map(C=>o6(h,w,C,S)).reduce(Xh,{})}function Yi(h){return D5(h,Vb)}Yi.propTypes={},Yi.filterProps=Vb;function ei(h){return D5(h,r6)}ei.propTypes={},ei.filterProps=r6;function i6(h){return D5(h,n6)}i6.propTypes={},i6.filterProps=n6;function m7(h=8){if(h.mui)return h;let w=Ub({spacing:h}),S=(...C)=>(C.length===0?[1]:C).map(R=>{let G=w(R);return typeof G=="number"?`${G}px`:G}).join(" ");return S.mui=!0,S}var p9=T(ro());function pg(...h){let w=h.reduce((C,R)=>(R.filterProps.forEach(G=>{C[G]=R}),C),{}),S=C=>Object.keys(C).reduce((R,G)=>w[G]?Xh(R,w[G](C)):R,{});return S.propTypes={},S.filterProps=h.reduce((C,R)=>C.concat(R.filterProps),[]),S}var z5=pg;function zu(h){return typeof h!="number"?h:`${h}px solid`}function _l(h,w){return Ki({prop:h,themeKey:"borders",transform:w})}var v7=_l("border",zu),g7=_l("borderTop",zu),y7=_l("borderRight",zu),d9=_l("borderBottom",zu),dg=_l("borderLeft",zu),a6=_l("borderColor"),b7=_l("borderTopColor"),w7=_l("borderRightColor"),s6=_l("borderBottomColor"),h9=_l("borderLeftColor"),O7=_l("outline",zu),x7=_l("outlineColor"),au=h=>{if(h.borderRadius!==void 0&&h.borderRadius!==null){let w=qb(h.theme,"shape.borderRadius",4,"borderRadius"),S=C=>({borderRadius:Kh(w,C)});return Qs(h,h.borderRadius,S)}return null};au.propTypes={},au.filterProps=["borderRadius"];var Gm=z5(v7,g7,y7,d9,dg,a6,b7,w7,s6,h9,au,O7,x7),Gb=h=>{if(h.gap!==void 0&&h.gap!==null){let w=qb(h.theme,"spacing",8,"gap"),S=C=>({gap:Kh(w,C)});return Qs(h,h.gap,S)}return null};Gb.propTypes={},Gb.filterProps=["gap"];var Yh=h=>{if(h.columnGap!==void 0&&h.columnGap!==null){let w=qb(h.theme,"spacing",8,"columnGap"),S=C=>({columnGap:Kh(w,C)});return Qs(h,h.columnGap,S)}return null};Yh.propTypes={},Yh.filterProps=["columnGap"];var hg=h=>{if(h.rowGap!==void 0&&h.rowGap!==null){let w=qb(h.theme,"spacing",8,"rowGap"),S=C=>({rowGap:Kh(w,C)});return Qs(h,h.rowGap,S)}return null};hg.propTypes={},hg.filterProps=["rowGap"];var _7=Ki({prop:"gridColumn"}),N5=Ki({prop:"gridRow"}),_i=Ki({prop:"gridAutoFlow"}),S7=Ki({prop:"gridAutoColumns"}),L5=Ki({prop:"gridAutoRows"}),F5=Ki({prop:"gridTemplateColumns"}),m9=Ki({prop:"gridTemplateRows"}),l6=Ki({prop:"gridTemplateAreas"}),E7=Ki({prop:"gridArea"}),Zk=z5(Gb,Yh,hg,_7,N5,_i,S7,L5,F5,m9,l6,E7);function Cd(h,w){return w==="grey"?w:h}var u6=Ki({prop:"color",themeKey:"palette",transform:Cd}),v9=Ki({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:Cd}),I7=Ki({prop:"backgroundColor",themeKey:"palette",transform:Cd}),Jm=z5(u6,v9,I7);function sa(h){return h<=1&&h!==0?`${h*100}%`:h}var B5=Ki({prop:"width",transform:sa}),mg=h=>{if(h.maxWidth!==void 0&&h.maxWidth!==null){let w=S=>{var C,R;let G=((C=h.theme)==null||(C=C.breakpoints)==null||(C=C.values)==null?void 0:C[S])||jd[S];return G?((R=h.theme)==null||(R=R.breakpoints)==null?void 0:R.unit)!=="px"?{maxWidth:`${G}${h.theme.breakpoints.unit}`}:{maxWidth:G}:{maxWidth:sa(S)}};return Qs(h,h.maxWidth,w)}return null};mg.filterProps=["maxWidth"];var W5=Ki({prop:"minWidth",transform:sa}),k7=Ki({prop:"height",transform:sa}),Qh=Ki({prop:"maxHeight",transform:sa}),Xm=Ki({prop:"minHeight",transform:sa}),P7=Ki({prop:"size",cssProperty:"width",transform:sa}),os=Ki({prop:"size",cssProperty:"height",transform:sa}),g9=Ki({prop:"boxSizing"}),j7=z5(B5,mg,W5,k7,Qh,Xm,g9),Jb={border:{themeKey:"borders",transform:zu},borderTop:{themeKey:"borders",transform:zu},borderRight:{themeKey:"borders",transform:zu},borderBottom:{themeKey:"borders",transform:zu},borderLeft:{themeKey:"borders",transform:zu},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:zu},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:au},color:{themeKey:"palette",transform:Cd},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:Cd},backgroundColor:{themeKey:"palette",transform:Cd},p:{style:ei},pt:{style:ei},pr:{style:ei},pb:{style:ei},pl:{style:ei},px:{style:ei},py:{style:ei},padding:{style:ei},paddingTop:{style:ei},paddingRight:{style:ei},paddingBottom:{style:ei},paddingLeft:{style:ei},paddingX:{style:ei},paddingY:{style:ei},paddingInline:{style:ei},paddingInlineStart:{style:ei},paddingInlineEnd:{style:ei},paddingBlock:{style:ei},paddingBlockStart:{style:ei},paddingBlockEnd:{style:ei},m:{style:Yi},mt:{style:Yi},mr:{style:Yi},mb:{style:Yi},ml:{style:Yi},mx:{style:Yi},my:{style:Yi},margin:{style:Yi},marginTop:{style:Yi},marginRight:{style:Yi},marginBottom:{style:Yi},marginLeft:{style:Yi},marginX:{style:Yi},marginY:{style:Yi},marginInline:{style:Yi},marginInlineStart:{style:Yi},marginInlineEnd:{style:Yi},marginBlock:{style:Yi},marginBlockStart:{style:Yi},marginBlockEnd:{style:Yi},displayPrint:{cssProperty:!1,transform:h=>({"@media print":{display:h}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:Gb},rowGap:{style:hg},columnGap:{style:Yh},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:sa},maxWidth:{style:mg},minWidth:{transform:sa},height:{transform:sa},maxHeight:{transform:sa},minHeight:{transform:sa},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},vg=Jb;function y9(...h){let w=h.reduce((C,R)=>C.concat(Object.keys(R)),[]),S=new Set(w);return h.every(C=>S.size===Object.keys(C).length)}function c6(h,w){return typeof h=="function"?h(w):h}function Km(){function h(S,C,R,G){let te={[S]:C,theme:R},re=G[S];if(!re)return{[S]:C};let{cssProperty:ue=S,themeKey:se,transform:he,style:_e}=re;if(C==null)return null;if(se==="typography"&&C==="inherit")return{[S]:C};let Ie=Wb(R,se)||{};return _e?_e(te):Qs(te,C,Ce=>{let ke=M5(Ie,he,Ce);return Ce===ke&&typeof Ce=="string"&&(ke=M5(Ie,he,`${S}${Ce==="default"?"":(0,p9.default)(Ce)}`,Ce)),ue===!1?ke:{[ue]:ke}})}function w(S){var C;let{sx:R,theme:G={}}=S||{};if(!R)return null;let te=(C=G.unstable_sxConfig)!=null?C:vg;function re(ue){let se=ue;if(typeof ue=="function")se=ue(G);else if(typeof ue!="object")return ue;if(!se)return null;let he=cg(G.breakpoints),_e=Object.keys(he),Ie=he;return Object.keys(se).forEach(Ce=>{let ke=c6(se[Ce],G);if(ke!=null)if(typeof ke=="object")if(te[Ce])Ie=Xh(Ie,h(Ce,ke,G,te));else{let ze=Qs({theme:G},ke,Le=>({[Ce]:Le}));y9(ze,ke)?Ie[Ce]=w({sx:ke,theme:G}):Ie=Xh(Ie,ze)}else Ie=Xh(Ie,h(Ce,ke,G,te))}),pp(_e,Ie)}return Array.isArray(R)?R.map(re):re(R)}return w}var f6=Km();f6.filterProps=["sx"];var C7=f6;function p6(h,w){let S=this;return S.vars&&typeof S.getColorSchemeSelector=="function"?{[S.getColorSchemeSelector(h).replace(/(\[[^\]]+\])/,"*:where($1)")]:w}:S.palette.mode===h?w:{}}var gg=["breakpoints","palette","spacing","shape"];function Xb(h={},...w){let{breakpoints:S={},palette:C={},spacing:R,shape:G={}}=h,te=Fo(h,gg),re=Jh(S),ue=m7(R),se=(0,lg.default)({breakpoints:re,direction:"ltr",components:{},palette:ae({mode:"light"},C),spacing:ue,shape:ae({},Y4,G)},te);return se.applyStyles=p6,se=w.reduce((he,_e)=>(0,lg.default)(he,_e),se),se.unstable_sxConfig=ae({},vg,te?.unstable_sxConfig),se.unstable_sx=function(he){return C7({sx:he,theme:this})},se}var H5=Xb,T7=T(q()),A7=T(Cv());function Ym(h){return Object.keys(h).length===0}function M7(h=null){let w=T7.useContext(A7.ThemeContext);return!w||Ym(w)?h:w}var $5=M7,R7=H5();function d6(h=R7){return $5(h)}var V5=d6;Pe();var D7=T(ya()),b9=["sx"],z7=h=>{var w,S;let C={systemProps:{},otherProps:{}},R=(w=h==null||(S=h.theme)==null?void 0:S.unstable_sxConfig)!=null?w:vg;return Object.keys(h).forEach(G=>{R[G]?C.systemProps[G]=h[G]:C.otherProps[G]=h[G]}),C};function N7(h){let{sx:w}=h,S=Fo(h,b9),{systemProps:C,otherProps:R}=z7(S),G;return Array.isArray(w)?G=[C,...w]:typeof w=="function"?G=(...te)=>{let re=w(...te);return(0,D7.isPlainObject)(re)?ae({},C,re):C}:G=ae({},C,w),ae({},R,{sx:G})}var Kb=h=>h,dp=()=>{let h=Kb;return{configure(w){h=w},generate(w){return h(w)},reset(){h=Kb}}},is=dp(),q5=is;function Td(h){var w,S,C="";if(typeof h=="string"||typeof h=="number")C+=h;else if(typeof h=="object")if(Array.isArray(h)){var R=h.length;for(w=0;w{C[R]=as(h,R,S)}),C}Pe();var L7=T(Cv()),O9=T(ya()),yg=["ownerState"],h6=["variants"],el=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function Yb(h){return Object.keys(h).length===0}function m6(h){return typeof h=="string"&&h.charCodeAt(0)>96}function U5(h){return h!=="ownerState"&&h!=="theme"&&h!=="sx"&&h!=="as"}var uf=H5(),bg=h=>h&&h.charAt(0).toLowerCase()+h.slice(1);function G5({defaultTheme:h,theme:w,themeId:S}){return Yb(w)?h:w[S]||w}function Zh(h){return h?(w,S)=>S[h]:null}function Qb(h,w){let{ownerState:S}=w,C=Fo(w,yg),R=typeof h=="function"?h(ae({ownerState:S},C)):h;if(Array.isArray(R))return R.flatMap(G=>Qb(G,ae({ownerState:S},C)));if(R&&typeof R=="object"&&Array.isArray(R.variants)){let{variants:G=[]}=R,te=Fo(R,h6);return G.forEach(re=>{let ue=!0;typeof re.props=="function"?ue=re.props(ae({ownerState:S},C,S)):Object.keys(re.props).forEach(se=>{S?.[se]!==re.props[se]&&C[se]!==re.props[se]&&(ue=!1)}),ue&&(Array.isArray(te)||(te=[te]),te.push(typeof re.style=="function"?re.style(ae({ownerState:S},C,S)):re.style))}),te}return R}function J5(h={}){let{themeId:w,defaultTheme:S=uf,rootShouldForwardProp:C=U5,slotShouldForwardProp:R=U5}=h,G=te=>C7(ae({},te,{theme:G5(ae({},te,{defaultTheme:S,themeId:w}))}));return G.__mui_systemSx=!0,(te,re={})=>{(0,L7.internal_processStyles)(te,it=>it.filter(Ke=>!(Ke!=null&&Ke.__mui_systemSx)));let{name:ue,slot:se,skipVariantsResolver:he,skipSx:_e,overridesResolver:Ie=Zh(bg(se))}=re,Ce=Fo(re,el),ke=he!==void 0?he:se&&se!=="Root"&&se!=="root"||!1,ze=_e||!1,Le,Te=U5;se==="Root"||se==="root"?Te=C:se?Te=R:m6(te)&&(Te=void 0);let lt=(0,L7.default)(te,ae({shouldForwardProp:Te,label:Le},Ce)),dt=it=>typeof it=="function"&&it.__emotion_real!==it||(0,O9.isPlainObject)(it)?Ke=>Qb(it,ae({},Ke,{theme:G5({theme:Ke.theme,defaultTheme:S,themeId:w})})):it,tt=(it,...Ke)=>{let st=dt(it),De=Ke?Ke.map(dt):[];ue&&Ie&&De.push(gt=>{let Et=G5(ae({},gt,{defaultTheme:S,themeId:w}));if(!Et.components||!Et.components[ue]||!Et.components[ue].styleOverrides)return null;let zt=Et.components[ue].styleOverrides,Yt={};return Object.entries(zt).forEach(([Tr,_r])=>{Yt[Tr]=Qb(_r,ae({},gt,{theme:Et}))}),Ie(gt,Yt)}),ue&&!ke&&De.push(gt=>{var Et;let zt=G5(ae({},gt,{defaultTheme:S,themeId:w})),Yt=zt==null||(Et=zt.components)==null||(Et=Et[ue])==null?void 0:Et.variants;return Qb({variants:Yt},ae({},gt,{theme:zt}))}),ze||De.push(G);let Ze=De.length-Ke.length;if(Array.isArray(it)&&Ze>0){let gt=new Array(Ze).fill("");st=[...it,...gt],st.raw=[...it.raw,...gt]}let ct=lt(st,...De);return te.muiName&&(ct.muiName=te.muiName),ct};return lt.withConfig&&(tt.withConfig=lt.withConfig),tt}}var X5=J5(),hp=X5;Pe();function Sl(h,w){let S=ae({},w);return Object.keys(h).forEach(C=>{if(C.toString().match(/^(components|slots)$/))S[C]=ae({},h[C],S[C]);else if(C.toString().match(/^(componentsProps|slotProps)$/)){let R=h[C]||{},G=w[C];S[C]={},!G||!Object.keys(G)?S[C]=R:!R||!Object.keys(R)?S[C]=G:(S[C]=ae({},G),Object.keys(R).forEach(te=>{S[C][te]=Sl(R[te],G[te])}))}else S[C]===void 0&&(S[C]=h[C])}),S}function v6(h){let{theme:w,name:S,props:C}=h;return!w||!w.components||!w.components[S]||!w.components[S].defaultProps?C:Sl(w.components[S].defaultProps,C)}function g6({props:h,name:w,defaultTheme:S,themeId:C}){let R=V5(S);return C&&(R=R[C]||R),v6({theme:R,name:w,props:h})}var y6=T(q()),F7=typeof window<"u"?y6.useLayoutEffect:y6.useEffect,b6=F7;function x9(...h){return h.reduce((w,S)=>S==null?w:function(...C){w.apply(this,C),S.apply(this,C)},()=>{})}var B7=T(q());function _9(h,w){var S,C;return B7.isValidElement(h)&&w.indexOf((S=h.type.muiName)!=null?S:(C=h.type)==null||(C=C._payload)==null||(C=C.value)==null?void 0:C.muiName)!==-1}function S9(h,w){typeof h=="function"?h(w):h&&(h.current=w)}var Qm=T(q()),w6=0;function K5(h){let[w,S]=Qm.useState(h),C=h||w;return Qm.useEffect(()=>{w==null&&(w6+=1,S(`mui-${w6}`))},[w]),C}var O6=Qm["useId".toString()];function E9(h){if(O6!==void 0){let w=O6();return h??w}return K5(h)}var ss=T(q());function I9({controlled:h,default:w,name:S,state:C="value"}){let{current:R}=ss.useRef(h!==void 0),[G,te]=ss.useState(w),re=R?h:G,ue=ss.useCallback(se=>{R||te(se)},[]);return[re,ue]}var x6=T(q());function k9(h){let w=x6.useRef(h);return b6(()=>{w.current=h}),x6.useRef((...S)=>(0,w.current)(...S)).current}var Zb=k9,Y5=T(q());function Zm(...h){return Y5.useMemo(()=>h.every(w=>w==null)?null:w=>{h.forEach(S=>{S9(S,w)})},h)}var e2=T(q()),Q5={};function _6(h,w){let S=e2.useRef(Q5);return S.current===Q5&&(S.current=h(w)),S}var Z5=T(q()),S6=[];function E6(h){Z5.useEffect(h,S6)}var ew=class EIe{constructor(){this.currentId=null,this.clear=()=>{this.currentId!==null&&(clearTimeout(this.currentId),this.currentId=null)},this.disposeEffect=()=>this.clear}static create(){return new EIe}start(w,S){this.clear(),this.currentId=setTimeout(()=>{this.currentId=null,S()},w)}};function e1(){let h=_6(ew.create).current;return E6(h.disposeEffect),h}var wg=T(q()),mp=!0,t2=!1,W7=new ew,tw={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function H7(h){let{type:w,tagName:S}=h;return!!(S==="INPUT"&&tw[w]&&!h.readOnly||S==="TEXTAREA"&&!h.readOnly||h.isContentEditable)}function I6(h){h.metaKey||h.altKey||h.ctrlKey||(mp=!0)}function cf(){mp=!1}function rw(){this.visibilityState==="hidden"&&t2&&(mp=!0)}function $7(h){h.addEventListener("keydown",I6,!0),h.addEventListener("mousedown",cf,!0),h.addEventListener("pointerdown",cf,!0),h.addEventListener("touchstart",cf,!0),h.addEventListener("visibilitychange",rw,!0)}function P9(h){let{target:w}=h;try{return w.matches(":focus-visible")}catch{}return mp||H7(w)}function j9(){let h=wg.useCallback(R=>{R!=null&&$7(R.ownerDocument)},[]),w=wg.useRef(!1);function S(){return w.current?(t2=!0,W7.start(100,()=>{t2=!1}),w.current=!1,!0):!1}function C(R){return P9(R)?(w.current=!0,!0):!1}return{isFocusVisibleRef:w,onFocus:C,onBlur:S,ref:h}}function Nu(h,w,S=void 0){let C={};return Object.keys(h).forEach(R=>{C[R]=h[R].reduce((G,te)=>{if(te){let re=w(te);re!==""&&G.push(re),S&&S[te]&&G.push(S[te])}return G},[]).join(" ")}),C}Pe();var la=T(q()),V7=T(ya()),k6=T(Ln()),nw=["component","direction","spacing","divider","children","className","useFlexGap"],P6=H5(),r2=hp("div",{name:"MuiStack",slot:"Root",overridesResolver:(h,w)=>w.root});function Lu(h){return g6({props:h,name:"MuiStack",defaultTheme:P6})}function j6(h,w){let S=la.Children.toArray(h).filter(Boolean);return S.reduce((C,R,G)=>(C.push(R),G({row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"})[h],T9=({ownerState:h,theme:w})=>{let S=ae({display:"flex",flexDirection:"column"},Qs({theme:w},fg({values:h.direction,breakpoints:w.breakpoints.values}),C=>({flexDirection:C})));if(h.spacing){let C=Ub(w),R=Object.keys(w.breakpoints.values).reduce((re,ue)=>((typeof h.spacing=="object"&&h.spacing[ue]!=null||typeof h.direction=="object"&&h.direction[ue]!=null)&&(re[ue]=!0),re),{}),G=fg({values:h.direction,base:R}),te=fg({values:h.spacing,base:R});typeof G=="object"&&Object.keys(G).forEach((re,ue,se)=>{if(!G[re]){let he=ue>0?G[se[ue-1]]:"column";G[re]=he}}),S=(0,V7.default)(S,Qs({theme:w},te,(re,ue)=>h.useFlexGap?{gap:Kh(C,re)}:{"& > :not(style):not(style)":{margin:0},"& > :not(style) ~ :not(style)":{[`margin${C9(ue?G[ue]:h.direction)}`]:Kh(C,re)}}))}return S=Z4(w.breakpoints,S),S};function q7(h={}){let{createStyledComponent:w=r2,useThemeProps:S=Lu,componentName:C="MuiStack"}=h,R=()=>Nu({root:["root"]},te=>as(C,te),{}),G=w(T9);return la.forwardRef(function(te,re){let ue=S(te),se=N7(ue),{component:he="div",direction:_e="column",spacing:Ie=0,divider:Ce,children:ke,className:ze,useFlexGap:Le=!1}=se,Te=Fo(se,nw),lt={direction:_e,spacing:Ie,useFlexGap:Le},dt=R();return(0,k6.jsx)(G,ae({as:he,ownerState:lt,ref:re,className:Qi(dt.root,ze)},Te,{children:Ce?j6(ke,Ce):ke}))})}Pe();var C6=T(vl()),ow=T(ya()),U7=T(Mv()),A9=T(Po());Pe();function G7(h,w){return ae({toolbar:{minHeight:56,[h.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[h.up("sm")]:{minHeight:64}}},w)}Pe();var T6=T(vl()),M9=T(ya()),A6=T(Ch()),n2=["mode","contrastThreshold","tonalOffset"],iw={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:ag.white,default:ag.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},M6={text:{primary:ag.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:ag.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function aw(h,w,S,C){let R=C.light||C,G=C.dark||C*1.5;h[w]||(h.hasOwnProperty(S)?h[w]=h[S]:w==="light"?h.light=(0,A6.lighten)(h.main,R):w==="dark"&&(h.dark=(0,A6.darken)(h.main,G)))}function R9(h="light"){return h==="dark"?{main:wc[200],light:wc[50],dark:wc[400]}:{main:wc[700],light:wc[400],dark:wc[800]}}function J7(h="light"){return h==="dark"?{main:Id[200],light:Id[50],dark:Id[400]}:{main:Id[500],light:Id[300],dark:Id[700]}}function X7(h="light"){return h==="dark"?{main:Vm[500],light:Vm[300],dark:Vm[700]}:{main:Vm[700],light:Vm[400],dark:Vm[800]}}function K7(h="light"){return h==="dark"?{main:kd[400],light:kd[300],dark:kd[700]}:{main:kd[700],light:kd[500],dark:kd[900]}}function Y7(h="light"){return h==="dark"?{main:sg[400],light:sg[300],dark:sg[700]}:{main:sg[800],light:sg[500],dark:sg[900]}}function sw(h="light"){return h==="dark"?{main:Ys[400],light:Ys[300],dark:Ys[700]}:{main:"#ed6c02",light:Ys[500],dark:Ys[900]}}function Q7(h){let{mode:w="light",contrastThreshold:S=3,tonalOffset:C=.2}=h,R=Fo(h,n2),G=h.primary||R9(w),te=h.secondary||J7(w),re=h.error||X7(w),ue=h.info||K7(w),se=h.success||Y7(w),he=h.warning||sw(w);function _e(ke){return(0,A6.getContrastRatio)(ke,M6.text.primary)>=S?M6.text.primary:iw.text.primary}let Ie=({color:ke,name:ze,mainShade:Le=500,lightShade:Te=300,darkShade:lt=700})=>{if(ke=ae({},ke),!ke.main&&ke[Le]&&(ke.main=ke[Le]),!ke.hasOwnProperty("main"))throw new Error((0,T6.default)(11,ze?` (${ze})`:"",Le));if(typeof ke.main!="string")throw new Error((0,T6.default)(12,ze?` (${ze})`:"",JSON.stringify(ke.main)));return aw(ke,"light",Te,C),aw(ke,"dark",lt,C),ke.contrastText||(ke.contrastText=_e(ke.main)),ke},Ce={dark:M6,light:iw};return(0,M9.default)(ae({common:ae({},ag),mode:w,primary:Ie({color:G,name:"primary"}),secondary:Ie({color:te,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:Ie({color:re,name:"error"}),warning:Ie({color:he,name:"warning"}),info:Ie({color:ue,name:"info"}),success:Ie({color:se,name:"success"}),grey:qm,contrastThreshold:S,getContrastText:_e,augmentColor:Ie,tonalOffset:C},Ce[w]),R)}Pe();var o2=T(ya()),Z7=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"];function R6(h){return Math.round(h*1e5)/1e5}var i2={textTransform:"uppercase"},lw='"Roboto", "Helvetica", "Arial", sans-serif';function uw(h,w){let S=typeof w=="function"?w(h):w,{fontFamily:C=lw,fontSize:R=14,fontWeightLight:G=300,fontWeightRegular:te=400,fontWeightMedium:re=500,fontWeightBold:ue=700,htmlFontSize:se=16,allVariants:he,pxToRem:_e}=S,Ie=Fo(S,Z7),Ce=R/14,ke=_e||(Te=>`${Te/se*Ce}rem`),ze=(Te,lt,dt,tt,it)=>ae({fontFamily:C,fontWeight:Te,fontSize:ke(lt),lineHeight:dt},C===lw?{letterSpacing:`${R6(tt/lt)}em`}:{},it,he),Le={h1:ze(G,96,1.167,-1.5),h2:ze(G,60,1.2,-.5),h3:ze(te,48,1.167,0),h4:ze(te,34,1.235,.25),h5:ze(te,24,1.334,0),h6:ze(re,20,1.6,.15),subtitle1:ze(te,16,1.75,.15),subtitle2:ze(re,14,1.57,.1),body1:ze(te,16,1.5,.15),body2:ze(te,14,1.43,.15),button:ze(re,14,1.75,.4,i2),caption:ze(te,12,1.66,.4),overline:ze(te,12,2.66,1,i2),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,o2.default)(ae({htmlFontSize:se,pxToRem:ke,fontFamily:C,fontSize:R,fontWeightLight:G,fontWeightRegular:te,fontWeightMedium:re,fontWeightBold:ue},Le),Ie,{clone:!1})}function ti(...h){return[`${h[0]}px ${h[1]}px ${h[2]}px ${h[3]}px rgba(0,0,0,${.2})`,`${h[4]}px ${h[5]}px ${h[6]}px ${h[7]}px rgba(0,0,0,${.14})`,`${h[8]}px ${h[9]}px ${h[10]}px ${h[11]}px rgba(0,0,0,${.12})`].join(",")}var e8=["none",ti(0,2,1,-1,0,1,1,0,0,1,3,0),ti(0,3,1,-2,0,2,2,0,0,1,5,0),ti(0,3,3,-2,0,3,4,0,0,1,8,0),ti(0,2,4,-1,0,4,5,0,0,1,10,0),ti(0,3,5,-1,0,5,8,0,0,1,14,0),ti(0,3,5,-1,0,6,10,0,0,1,18,0),ti(0,4,5,-2,0,7,10,1,0,2,16,1),ti(0,5,5,-3,0,8,10,1,0,3,14,2),ti(0,5,6,-3,0,9,12,1,0,3,16,2),ti(0,6,6,-3,0,10,14,1,0,4,18,3),ti(0,6,7,-4,0,11,15,1,0,4,20,3),ti(0,7,8,-4,0,12,17,2,0,5,22,4),ti(0,7,8,-4,0,13,19,2,0,5,24,4),ti(0,7,9,-4,0,14,21,2,0,5,26,4),ti(0,8,9,-5,0,15,22,2,0,6,28,5),ti(0,8,10,-5,0,16,24,2,0,6,30,5),ti(0,8,11,-5,0,17,26,2,0,6,32,5),ti(0,9,11,-5,0,18,28,2,0,7,34,6),ti(0,9,12,-6,0,19,29,2,0,7,36,6),ti(0,10,13,-6,0,20,31,3,0,8,38,7),ti(0,10,13,-6,0,21,33,3,0,8,40,7),ti(0,10,14,-6,0,22,35,3,0,8,42,7),ti(0,11,14,-7,0,23,36,3,0,9,44,8),ti(0,11,15,-7,0,24,38,3,0,9,46,8)],t1=e8;Pe();var a2=["duration","easing","delay"],Wo={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},D9={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function D6(h){return`${Math.round(h)}ms`}function t8(h){if(!h)return 0;let w=h/36;return Math.round((4+15*w**.25+w/5)*10)}function nr(h){let w=ae({},Wo,h.easing),S=ae({},D9,h.duration);return ae({getAutoHeightDuration:t8,create:(C=["all"],R={})=>{let{duration:G=S.standard,easing:te=w.easeInOut,delay:re=0}=R,ue=Fo(R,a2);return(Array.isArray(C)?C:[C]).map(se=>`${se} ${typeof G=="string"?G:D6(G)} ${te} ${typeof re=="string"?re:D6(re)}`).join(",")}},h,{easing:w,duration:S})}var r8={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},cw=r8,z9=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];function N9(h={},...w){let{mixins:S={},palette:C={},transitions:R={},typography:G={}}=h,te=Fo(h,z9);if(h.vars)throw new Error((0,C6.default)(18));let re=Q7(C),ue=(0,A9.default)(h),se=(0,ow.default)(ue,{mixins:G7(ue.breakpoints,S),palette:re,shadows:t1.slice(),typography:uw(re,G),transitions:nr(R),zIndex:ae({},cw)});return se=(0,ow.default)(se,te),se=w.reduce((he,_e)=>(0,ow.default)(he,_e),se),se.unstable_sxConfig=ae({},U7.unstable_defaultSxConfig,te?.unstable_sxConfig),se.unstable_sx=function(he){return(0,U7.default)({sx:he,theme:this})},se}var n8=N9,L9=n8(),z6=L9;function ff({props:h,name:w}){return g6({props:h,name:w,defaultTheme:z6,themeId:Bb})}var fw=T(mb()),pf=h=>(0,fw.shouldForwardProp)(h)&&h!=="classes",N6=(0,fw.default)({themeId:Bb,defaultTheme:z6,rootShouldForwardProp:pf}),Oa=N6,o8=T(ro()),Si=o8.default,pw=x9;Pe();var L6=T(q());Pe();var F6=T(q());function B6(h){return as("MuiSvgIcon",h)}var F9=Zs("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]),i8=T(Ln()),dw=T(Ln()),hw=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],a8=h=>{let{color:w,fontSize:S,classes:C}=h,R={root:["root",w!=="inherit"&&`color${Si(w)}`,`fontSize${Si(S)}`]};return Nu(R,B6,C)},s2=Oa("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(h,w)=>{let{ownerState:S}=h;return[w.root,S.color!=="inherit"&&w[`color${Si(S.color)}`],w[`fontSize${Si(S.fontSize)}`]]}})(({theme:h,ownerState:w})=>{var S,C,R,G,te,re,ue,se,he,_e,Ie,Ce,ke;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:w.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:(S=h.transitions)==null||(C=S.create)==null?void 0:C.call(S,"fill",{duration:(R=h.transitions)==null||(R=R.duration)==null?void 0:R.shorter}),fontSize:{inherit:"inherit",small:((G=h.typography)==null||(te=G.pxToRem)==null?void 0:te.call(G,20))||"1.25rem",medium:((re=h.typography)==null||(ue=re.pxToRem)==null?void 0:ue.call(re,24))||"1.5rem",large:((se=h.typography)==null||(he=se.pxToRem)==null?void 0:he.call(se,35))||"2.1875rem"}[w.fontSize],color:(_e=(Ie=(h.vars||h).palette)==null||(Ie=Ie[w.color])==null?void 0:Ie.main)!=null?_e:{action:(Ce=(h.vars||h).palette)==null||(Ce=Ce.action)==null?void 0:Ce.active,disabled:(ke=(h.vars||h).palette)==null||(ke=ke.action)==null?void 0:ke.disabled,inherit:void 0}[w.color]}}),mw=F6.forwardRef(function(h,w){let S=ff({props:h,name:"MuiSvgIcon"}),{children:C,className:R,color:G="inherit",component:te="svg",fontSize:re="medium",htmlColor:ue,inheritViewBox:se=!1,titleAccess:he,viewBox:_e="0 0 24 24"}=S,Ie=Fo(S,hw),Ce=F6.isValidElement(C)&&C.type==="svg",ke=ae({},S,{color:G,component:te,fontSize:re,instanceFontSize:h.fontSize,inheritViewBox:se,viewBox:_e,hasSvgAsChild:Ce}),ze={};se||(ze.viewBox=_e);let Le=a8(ke);return(0,dw.jsxs)(s2,ae({as:te,className:Qi(Le.root,R),focusable:"false",color:ue,"aria-hidden":he?void 0:!0,role:he?"img":void 0,ref:w},ze,Ie,Ce&&C.props,{ownerState:ke,children:[Ce?C.props.children:C,he?(0,i8.jsx)("title",{children:he}):null]}))});mw.muiName="SvgIcon";var W6=mw,B9=T(Ln());function l2(h,w){function S(C,R){return(0,B9.jsx)(W6,ae({"data-testid":`${w}Icon`,ref:R},C,{children:h}))}return S.muiName=W6.muiName,L6.memo(L6.forwardRef(S))}var H6=_9,$6=E9,vw=I9,gw=Zb,V6=Zm,W9=j9;function u2(h,w){return u2=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(S,C){return S.__proto__=C,S},u2(h,w)}function Og(h,w){h.prototype=Object.create(w.prototype),h.prototype.constructor=h,u2(h,w)}var s8=T(q()),r1=s8.default.createContext(null);Pe();function yw(h){if(h===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return h}var n1=T(q()),vp=T(q());function Ei(h,w){var S=function(R){return w&&(0,vp.isValidElement)(R)?w(R):R},C=Object.create(null);return h&&vp.Children.map(h,function(R){return R}).forEach(function(R){C[R.key]=S(R)}),C}function df(h,w){h=h||{},w=w||{};function S(he){return he in w?w[he]:h[he]}var C=Object.create(null),R=[];for(var G in h)G in w?R.length&&(C[G]=R,R=[]):R.push(G);var te,re={};for(var ue in w){if(C[ue])for(te=0;te{if(!re&&ue!=null){let ze=setTimeout(ue,se);return()=>{clearTimeout(ze)}}},[ue,re,se]),(0,c2.jsx)("span",{className:Ie,style:Ce,children:(0,c2.jsx)("span",{className:ke})})}var q9=V9,U9=Zs("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),zn=U9,f2=T(Ln()),G6=["center","classes","className"],p2=h=>h,u8,o1,ww,Ad,tl=550,Os=80,ni=(0,Uh.keyframes)(u8||(u8=p2` +Add a component higher in the tree to provide a loading indicator or placeholder to display.`)}fs!==5&&(fs=2),pe=et(pe,ee),$e=H;do{switch($e.tag){case 3:z=pe,$e.flags|=4096,u&=-u,$e.lanes|=u;var yr=dr($e,z,u);Z2($e,yr);break e;case 1:z=pe;var $t=$e.type,wr=$e.stateNode;if(!($e.flags&64)&&(typeof $t.getDerivedStateFromError=="function"||wr!==null&&typeof wr.componentDidCatch=="function"&&(zs===null||!zs.has(wr)))){$e.flags|=4096,u&=-u,$e.lanes|=u;var Fr=cr($e,z,u);Z2($e,Fr);break e}}$e=$e.return}while($e!==null)}zS(p)}catch(zr){u=zr,Ca===p&&p!==null&&(Ca=p=p.return);continue}break}while(1)}function Tc(){var a=$p.current;return $p.current=c3,a===null?c3:a}function g3(a,u){var p=fn;fn|=16;var O=Tc();ra===a&&Ta===u||GO(a,u);do try{KC();break}catch(P){TI(a,P)}while(1);if(B1(),fn=p,$p.current=O,Ca!==null)throw Error(R(261));return ra=null,Ta=0,fs}function KC(){for(;Ca!==null;)MI(Ca)}function AI(){for(;Ca!==null&&!Qd();)MI(Ca)}function MI(a){var u=DI(a.alternate,a,Y1);a.memoizedProps=a.pendingProps,u===null?zS(a):Ca=u,Ey.current=null}function zS(a){var u=a;do{var p=u.alternate;if(a=u.return,u.flags&2048){if(p=Xe(u),p!==null){p.flags&=2047,Ca=p;return}a!==null&&(a.firstEffect=a.lastEffect=null,a.flags|=2048)}else{if(p=Be(p,u,Y1),p!==null){Ca=p;return}if(p=u,p.tag!==24&&p.tag!==23||p.memoizedState===null||Y1&1073741824||!(p.mode&4)){for(var O=0,P=p.child;P!==null;)O|=P.lanes|P.childLanes,P=P.sibling;p.childLanes=O}a!==null&&!(a.flags&2048)&&(a.firstEffect===null&&(a.firstEffect=u.firstEffect),u.lastEffect!==null&&(a.lastEffect!==null&&(a.lastEffect.nextEffect=u.firstEffect),a.lastEffect=u.lastEffect),1H&&(ee=H,H=yr,yr=ee),ee=T1(Ge,yr),z=T1(Ge,H),ee&&z&&(ft.rangeCount!==1||ft.anchorNode!==ee.node||ft.anchorOffset!==ee.offset||ft.focusNode!==z.node||ft.focusOffset!==z.offset)&&(pt=pt.createRange(),pt.setStart(ee.node,ee.offset),ft.removeAllRanges(),yr>H?(ft.addRange(pt),ft.extend(z.node,z.offset)):(pt.setEnd(z.node,z.offset),ft.addRange(pt)))))),pt=[],ft=Ge;ft=ft.parentNode;)ft.nodeType===1&&pt.push({element:ft,left:ft.scrollLeft,top:ft.scrollTop});for(typeof Ge.focus=="function"&&Ge.focus(),Ge=0;GeTo()-kn?GO(a,0):Ut|=p),Vp(a,u)}function uP(a,u){var p=a.stateNode;p!==null&&p.delete(u),u=0,u===0&&(u=a.mode,u&2?u&4?(Cc===0&&(Cc=jc),u=Qg(62914560&~Cc),u===0&&(u=4194304)):u=hy()===99?1:2:u=1),p=jf(),a=Z1(a,u),a!==null&&(N2(a,u,p),Vp(a,p))}var DI;DI=function(a,u,p){var O=u.lanes;if(a!==null)if(a.memoizedProps!==u.pendingProps||ea.current)As=!0;else if(p&O)As=!!(a.flags&16384);else{switch(As=!1,u.tag){case 3:v_(u),yy();break;case 5:l_(u);break;case 1:Ml(u.type)&&N1(u);break;case 4:o3(u,u.stateNode.containerInfo);break;case 10:O=u.memoizedProps.value;var P=u.type._context;zi(RO,P._currentValue),P._currentValue=O;break;case 13:if(u.memoizedState!==null)return p&u.child.childLanes?xy(a,u,p):(zi(Ni,Ni.current&1),u=F(a,u,p),u!==null?u.sibling:null);zi(Ni,Ni.current&1);break;case 19:if(O=(p&u.childLanes)!==0,a.flags&64){if(O)return D(a,u,p);u.flags|=64}if(P=u.memoizedState,P!==null&&(P.rendering=null,P.tail=null,P.lastEffect=null),zi(Ni,Ni.current),O)break;return null;case 23:case 24:return u.lanes=0,f3(a,u,p)}return F(a,u,p)}else As=!1;switch(u.lanes=0,u.tag){case 2:if(O=u.type,a!==null&&(a.alternate=null,u.alternate=null,u.flags|=2),a=u.pendingProps,P=M0(u,ja.current),eh(u,p),P=BO(null,u,O,a,P,p),u.flags|=1,typeof P=="object"&&P!==null&&typeof P.render=="function"&&P.$$typeof===void 0){if(u.tag=1,u.memoizedState=null,u.updateQueue=null,Ml(O)){var z=!0;N1(u)}else z=!1;u.memoizedState=P.state!==null&&P.state!==void 0?P.state:null,Q2(u);var H=O.getDerivedStateFromProps;typeof H=="function"&&t3(u,O,H,a),P.updater=W1,u.stateNode=P,P._reactInternals=u,a_(u,O,a,p),u=m_(null,u,O,!0,z,p)}else u.tag=0,Ms(null,u,P,p),u=u.child;return u;case 16:P=u.elementType;e:{switch(a!==null&&(a.alternate=null,u.alternate=null,u.flags|=2),a=u.pendingProps,z=P._init,P=z(P._payload),u.type=P,z=u.tag=fP(P),a=qa(P,a),z){case 0:u=rh(null,u,P,a,p);break e;case 1:u=p3(null,u,P,a,p);break e;case 11:u=rc(null,u,P,a,p);break e;case 14:u=K1(null,u,P,qa(P.type,a),O,p);break e}throw Error(R(306,P,""))}return u;case 0:return O=u.type,P=u.pendingProps,P=u.elementType===O?P:qa(O,P),rh(a,u,O,P,p);case 1:return O=u.type,P=u.pendingProps,P=u.elementType===O?P:qa(O,P),p3(a,u,O,P,p);case 3:if(v_(u),O=u.updateQueue,a===null||O===null)throw Error(R(282));if(O=u.pendingProps,P=u.memoizedState,P=P!==null?P.element:null,Pi(a,u),e3(u,O,null,p),O=u.memoizedState.element,O===P)yy(),u=F(a,u,p);else{if(P=u.stateNode,(z=P.hydrate)&&(ec=Mt(u.stateNode.containerInfo.firstChild),Ef=u,z=Wp=!0),z){if(a=P.mutableSourceEagerHydrationData,a!=null)for(P=0;P{"use strict";function S(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(S)}catch(C){console.error(C)}}S(),w.exports=X()}),fe=y(h=>{"use strict";var w=q();function S(Ie,Ce){return Ie===Ce&&(Ie!==0||1/Ie===1/Ce)||Ie!==Ie&&Ce!==Ce}var C=typeof Object.is=="function"?Object.is:S,R=w.useState,G=w.useEffect,te=w.useLayoutEffect,re=w.useDebugValue;function ue(Ie,Ce){var ke=Ce(),ze=R({inst:{value:ke,getSnapshot:Ce}}),Le=ze[0].inst,Te=ze[1];return te(function(){Le.value=ke,Le.getSnapshot=Ce,se(Le)&&Te({inst:Le})},[Ie,ke,Ce]),G(function(){return se(Le)&&Te({inst:Le}),Ie(function(){se(Le)&&Te({inst:Le})})},[Ie]),re(ke),ke}function se(Ie){var Ce=Ie.getSnapshot;Ie=Ie.value;try{var ke=Ce();return!C(Ie,ke)}catch{return!0}}function he(Ie,Ce){return Ce()}var _e=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?he:ue;h.useSyncExternalStore=w.useSyncExternalStore!==void 0?w.useSyncExternalStore:_e}),me=y((h,w)=>{"use strict";w.exports=fe()}),ye=y(h=>{"use strict";var w=q(),S=me();function C(he,_e){return he===_e&&(he!==0||1/he===1/_e)||he!==he&&_e!==_e}var R=typeof Object.is=="function"?Object.is:C,G=S.useSyncExternalStore,te=w.useRef,re=w.useEffect,ue=w.useMemo,se=w.useDebugValue;h.useSyncExternalStoreWithSelector=function(he,_e,Ie,Ce,ke){var ze=te(null);if(ze.current===null){var Le={hasValue:!1,value:null};ze.current=Le}else Le=ze.current;ze=ue(function(){function lt(st){if(!dt){if(dt=!0,tt=st,st=Ce(st),ke!==void 0&&Le.hasValue){var De=Le.value;if(ke(De,st))return it=De}return it=st}if(De=it,R(tt,st))return De;var Ze=Ce(st);return ke!==void 0&&ke(De,Ze)?De:(tt=st,it=Ze)}var dt=!1,tt,it,Ke=Ie===void 0?null:Ie;return[function(){return lt(_e())},Ke===null?void 0:function(){return lt(Ke())}]},[_e,Ie,Ce,ke]);var Te=G(he,ze[0],ze[1]);return re(function(){Le.hasValue=!0,Le.value=Te},[Te]),se(Te),Te}}),ge=y((h,w)=>{"use strict";w.exports=ye()});function ae(){return ae=Object.assign?Object.assign.bind():function(h){for(var w=1;w{}),Ne=y(h=>{"use strict";var w=typeof Symbol=="function"&&Symbol.for,S=w?Symbol.for("react.element"):60103,C=w?Symbol.for("react.portal"):60106,R=w?Symbol.for("react.fragment"):60107,G=w?Symbol.for("react.strict_mode"):60108,te=w?Symbol.for("react.profiler"):60114,re=w?Symbol.for("react.provider"):60109,ue=w?Symbol.for("react.context"):60110,se=w?Symbol.for("react.async_mode"):60111,he=w?Symbol.for("react.concurrent_mode"):60111,_e=w?Symbol.for("react.forward_ref"):60112,Ie=w?Symbol.for("react.suspense"):60113,Ce=w?Symbol.for("react.suspense_list"):60120,ke=w?Symbol.for("react.memo"):60115,ze=w?Symbol.for("react.lazy"):60116,Le=w?Symbol.for("react.block"):60121,Te=w?Symbol.for("react.fundamental"):60117,lt=w?Symbol.for("react.responder"):60118,dt=w?Symbol.for("react.scope"):60119;function tt(Ke){if(typeof Ke=="object"&&Ke!==null){var st=Ke.$$typeof;switch(st){case S:switch(Ke=Ke.type,Ke){case se:case he:case R:case te:case G:case Ie:return Ke;default:switch(Ke=Ke&&Ke.$$typeof,Ke){case ue:case _e:case ze:case ke:case re:return Ke;default:return st}}case C:return st}}}function it(Ke){return tt(Ke)===he}h.AsyncMode=se,h.ConcurrentMode=he,h.ContextConsumer=ue,h.ContextProvider=re,h.Element=S,h.ForwardRef=_e,h.Fragment=R,h.Lazy=ze,h.Memo=ke,h.Portal=C,h.Profiler=te,h.StrictMode=G,h.Suspense=Ie,h.isAsyncMode=function(Ke){return it(Ke)||tt(Ke)===se},h.isConcurrentMode=it,h.isContextConsumer=function(Ke){return tt(Ke)===ue},h.isContextProvider=function(Ke){return tt(Ke)===re},h.isElement=function(Ke){return typeof Ke=="object"&&Ke!==null&&Ke.$$typeof===S},h.isForwardRef=function(Ke){return tt(Ke)===_e},h.isFragment=function(Ke){return tt(Ke)===R},h.isLazy=function(Ke){return tt(Ke)===ze},h.isMemo=function(Ke){return tt(Ke)===ke},h.isPortal=function(Ke){return tt(Ke)===C},h.isProfiler=function(Ke){return tt(Ke)===te},h.isStrictMode=function(Ke){return tt(Ke)===G},h.isSuspense=function(Ke){return tt(Ke)===Ie},h.isValidElementType=function(Ke){return typeof Ke=="string"||typeof Ke=="function"||Ke===R||Ke===he||Ke===te||Ke===G||Ke===Ie||Ke===Ce||typeof Ke=="object"&&Ke!==null&&(Ke.$$typeof===ze||Ke.$$typeof===ke||Ke.$$typeof===re||Ke.$$typeof===ue||Ke.$$typeof===_e||Ke.$$typeof===Te||Ke.$$typeof===lt||Ke.$$typeof===dt||Ke.$$typeof===Le)},h.typeOf=tt}),Ye=y((h,w)=>{"use strict";w.exports=Ne()}),Je=y((h,w)=>{"use strict";var S=Ye(),C={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},R={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},G={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},te={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},re={};re[S.ForwardRef]=G,re[S.Memo]=te;function ue(Le){return S.isMemo(Le)?te:re[Le.$$typeof]||C}var se=Object.defineProperty,he=Object.getOwnPropertyNames,_e=Object.getOwnPropertySymbols,Ie=Object.getOwnPropertyDescriptor,Ce=Object.getPrototypeOf,ke=Object.prototype;function ze(Le,Te,lt){if(typeof Te!="string"){if(ke){var dt=Ce(Te);dt&&dt!==ke&&ze(Le,dt,lt)}var tt=he(Te);_e&&(tt=tt.concat(_e(Te)));for(var it=ue(Le),Ke=ue(Te),st=0;st{"use strict";var w=Symbol.for("react.element"),S=Symbol.for("react.portal"),C=Symbol.for("react.fragment"),R=Symbol.for("react.strict_mode"),G=Symbol.for("react.profiler"),te=Symbol.for("react.provider"),re=Symbol.for("react.context"),ue=Symbol.for("react.server_context"),se=Symbol.for("react.forward_ref"),he=Symbol.for("react.suspense"),_e=Symbol.for("react.suspense_list"),Ie=Symbol.for("react.memo"),Ce=Symbol.for("react.lazy"),ke=Symbol.for("react.offscreen"),ze;ze=Symbol.for("react.module.reference");function Le(Te){if(typeof Te=="object"&&Te!==null){var lt=Te.$$typeof;switch(lt){case w:switch(Te=Te.type,Te){case C:case G:case R:case he:case _e:return Te;default:switch(Te=Te&&Te.$$typeof,Te){case ue:case re:case se:case Ce:case Ie:case te:return Te;default:return lt}}case S:return lt}}}h.ContextConsumer=re,h.ContextProvider=te,h.Element=w,h.ForwardRef=se,h.Fragment=C,h.Lazy=Ce,h.Memo=Ie,h.Portal=S,h.Profiler=G,h.StrictMode=R,h.Suspense=he,h.SuspenseList=_e,h.isAsyncMode=function(){return!1},h.isConcurrentMode=function(){return!1},h.isContextConsumer=function(Te){return Le(Te)===re},h.isContextProvider=function(Te){return Le(Te)===te},h.isElement=function(Te){return typeof Te=="object"&&Te!==null&&Te.$$typeof===w},h.isForwardRef=function(Te){return Le(Te)===se},h.isFragment=function(Te){return Le(Te)===C},h.isLazy=function(Te){return Le(Te)===Ce},h.isMemo=function(Te){return Le(Te)===Ie},h.isPortal=function(Te){return Le(Te)===S},h.isProfiler=function(Te){return Le(Te)===G},h.isStrictMode=function(Te){return Le(Te)===R},h.isSuspense=function(Te){return Le(Te)===he},h.isSuspenseList=function(Te){return Le(Te)===_e},h.isValidElementType=function(Te){return typeof Te=="string"||typeof Te=="function"||Te===C||Te===G||Te===R||Te===he||Te===_e||Te===ke||typeof Te=="object"&&Te!==null&&(Te.$$typeof===Ce||Te.$$typeof===Ie||Te.$$typeof===te||Te.$$typeof===re||Te.$$typeof===se||Te.$$typeof===ze||Te.getModuleId!==void 0)},h.typeOf=Le}),Ve=y((h,w)=>{"use strict";w.exports=Me()}),Ue=y((h,w)=>{"use strict";function S(R,G){for(var te=R.keys(),re;!(re=te.next()).done;)G(R.get(re.value),re.value,R)}var C=function(){var R;typeof Map<"u"&&(R=Map,Map.prototype.keys||(Map.prototype.keys=function(){var ue=[];return this.forEach(function(se,he){ue.push(he)}),ue}));function G(ue){var se=this;se._map=R,G.Map&&(se._map=G.Map),se._=se._map?new se._map:{},ue&&ue.forEach(function(he){se.set(he[0],he[1])})}G.prototype.get=function(ue){return this._map?this._.get(ue):this._[ue]},G.prototype.set=function(ue,se){var he=Array.prototype.slice.call(arguments);ue=he.shift();var _e=this.get(ue);return _e||(_e=[],this._map?this._.set(ue,_e):this._[ue]=_e),Array.prototype.push.apply(_e,he),this},G.prototype.delete=function(ue,se){if(!this.has(ue))return!1;if(arguments.length==1)return this._map?this._.delete(ue):delete this._[ue],!0;var he=this.get(ue),_e=he.indexOf(se);return _e!=-1?(he.splice(_e,1),!0):!1},G.prototype.has=function(ue,se){var he=this._map?this._.has(ue):this._.hasOwnProperty(ue);if(arguments.length==1||!he)return he;var _e=this.get(ue)||[];return _e.indexOf(se)!=-1},G.prototype.keys=function(){return this._map?re(this._.keys()):re(Object.keys(this._))},G.prototype.values=function(){var ue=[];return this.forEachEntry(function(se){Array.prototype.push.apply(ue,se)}),re(ue)},G.prototype.forEachEntry=function(ue){S(this,ue)},G.prototype.forEach=function(ue){var se=this;se.forEachEntry(function(he,_e){he.forEach(function(Ie){ue(Ie,_e,se)})})},G.prototype.clear=function(){this._map?this._.clear():this._={}},Object.defineProperty(G.prototype,"size",{configurable:!1,enumerable:!0,get:function(){var ue=0;return S(this,function(se){ue+=se.length}),ue}}),Object.defineProperty(G.prototype,"count",{configurable:!1,enumerable:!0,get:function(){return this._.size}});var te;try{te=new Function("iterator","makeIterator","var keysArray = []; for(var key of iterator){keysArray.push(key);} return makeIterator(keysArray).next;")}catch{}function re(ue){if(Array.isArray(ue)){var se=0;return{next:function(){return se{Rt=function(){function h(S){var C=this;this._insertTag=function(R){var G;C.tags.length===0?C.insertionPoint?G=C.insertionPoint.nextSibling:C.prepend?G=C.container.firstChild:G=C.before:G=C.tags[C.tags.length-1].nextSibling,C.container.insertBefore(R,G),C.tags.push(R)},this.isSpeedy=S.speedy===void 0?!0:S.speedy,this.tags=[],this.ctr=0,this.nonce=S.nonce,this.key=S.key,this.container=S.container,this.prepend=S.prepend,this.insertionPoint=S.insertionPoint,this.before=null}var w=h.prototype;return w.hydrate=function(S){S.forEach(this._insertTag)},w.insert=function(S){this.ctr%(this.isSpeedy?65e3:1)===0&&this._insertTag(yt(this));var C=this.tags[this.tags.length-1];if(!1)var R;if(this.isSpeedy){var G=ht(C);try{G.insertRule(S,G.cssRules.length)}catch{}}else C.appendChild(document.createTextNode(S));this.ctr++},w.flush=function(){this.tags.forEach(function(S){return S.parentNode&&S.parentNode.removeChild(S)}),this.tags=[],this.ctr=0},h}()}),_t,Nt,At,ir,Pt,Sr,Nr,ar,xr,qn=d(()=>{_t="-ms-",Nt="-moz-",At="-webkit-",ir="comm",Pt="rule",Sr="decl",Nr="@import",ar="@keyframes",xr="@layer"});function An(h,w){return Sn(h,0)^45?(((w<<2^Sn(h,0))<<2^Sn(h,1))<<2^Sn(h,2))<<2^Sn(h,3):0}function Oo(h){return h.trim()}function yn(h,w){return(h=w.exec(h))?h[0]:h}function Vr(h,w,S){return h.replace(w,S)}function eo(h,w){return h.indexOf(w)}function Sn(h,w){return h.charCodeAt(w)|0}function Ti(h,w,S){return h.slice(w,S)}function Mo(h){return h.length}function xo(h){return h.length}function Qa(h,w){return w.push(h),h}function Dn(h,w){return h.map(w).join("")}var mr,Un,Za,Ai=d(()=>{mr=Math.abs,Un=String.fromCharCode,Za=Object.assign});function mn(h,w,S,C,R,G,te){return{value:h,root:w,parent:S,type:C,props:R,children:G,line:fc,column:vs,length:te,return:""}}function rn(h,w){return Za(mn("",null,null,"",null,null,0),h,{length:-h.length},w)}function Mn(){return Uo}function go(){return Uo=ia>0?Sn(Vi,--ia):0,vs--,Uo===10&&(vs=1,fc--),Uo}function cn(){return Uo=ia2||ko(Uo)>3?"":" "}function am(h,w){for(;--w&&cn()&&!(Uo<48||Uo>102||Uo>57&&Uo<65||Uo>70&&Uo<97););return cc(h,Oi()+(w<6&&ms()==32&&cn()==32))}function Wc(h){for(;cn();)switch(Uo){case h:return ia;case 34:case 39:h!==34&&h!==39&&Wc(Uo);break;case 40:h===41&&Wc(h);break;case 92:cn();break}return ia}function ql(h,w){for(;cn()&&h+Uo!==47+10&&!(h+Uo===42+42&&ms()===47););return"/*"+cc(w,ia-1)+"*"+Un(h===47?h:cn())}function Na(h){for(;!ko(ms());)cn();return cc(h,ia)}var fc,vs,vr,ia,Uo,Vi,li=d(()=>{Ai(),fc=1,vs=1,vr=0,ia=0,Uo=0,Vi=""});function Gn(h){return Hs(nd("",null,null,null,[""],h=Ws(h),0,[0],h))}function nd(h,w,S,C,R,G,te,re,ue){for(var se=0,he=0,_e=te,Ie=0,Ce=0,ke=0,ze=1,Le=1,Te=1,lt=0,dt="",tt=R,it=G,Ke=C,st=dt;Le;)switch(ke=lt,lt=cn()){case 40:if(ke!=108&&Sn(st,_e-1)==58){eo(st+=Vr(es(lt),"&","&\f"),"&\f")!=-1&&(Te=-1);break}case 34:case 39:case 91:st+=es(lt);break;case 9:case 10:case 13:case 32:st+=rb(ke);break;case 92:st+=am(Oi()-1,7);continue;case 47:switch(ms()){case 42:case 47:Qa(va(ql(cn(),Oi()),w,S),ue);break;default:st+="/"}break;case 123*ze:re[se++]=Mo(st)*Te;case 125*ze:case 59:case 0:switch(lt){case 0:case 125:Le=0;case 59+he:Te==-1&&(st=Vr(st,/\f/g,"")),Ce>0&&Mo(st)-_e&&Qa(Ce>32?K3(st+";",C,S,_e-1):K3(Vr(st," ","")+";",C,S,_e-2),ue);break;case 59:st+=";";default:if(Qa(Ke=Xn(st,w,S,se,he,R,re,dt,tt=[],it=[],_e),G),lt===123)if(he===0)nd(st,w,Ke,Ke,tt,G,_e,re,it);else switch(Ie===99&&Sn(st,3)===110?100:Ie){case 100:case 108:case 109:case 115:nd(h,Ke,Ke,C&&Qa(Xn(h,Ke,Ke,0,0,R,re,dt,R,tt=[],_e),it),R,it,_e,re,C?tt:it);break;default:nd(st,Ke,Ke,Ke,[""],it,0,re,it)}}se=he=Ce=0,ze=Te=1,dt=st="",_e=te;break;case 58:_e=1+Mo(st),Ce=ke;default:if(ze<1){if(lt==123)--ze;else if(lt==125&&ze++==0&&go()==125)continue}switch(st+=Un(lt),lt*ze){case 38:Te=he>0?1:(st+="\f",-1);break;case 44:re[se++]=(Mo(st)-1)*Te,Te=1;break;case 64:ms()===45&&(st+=es(cn())),Ie=ms(),he=_e=Mo(dt=st+=Na(Oi())),lt++;break;case 45:ke===45&&Mo(st)==2&&(ze=0)}}return G}function Xn(h,w,S,C,R,G,te,re,ue,se,he){for(var _e=R-1,Ie=R===0?G:[""],Ce=xo(Ie),ke=0,ze=0,Le=0;ke0?Ie[Te]+" "+lt:Vr(lt,/&\f/g,Ie[Te])))&&(ue[Le++]=dt);return mn(h,w,S,R===0?Pt:re,ue,se,he)}function va(h,w,S){return mn(h,w,S,ir,Un(Mn()),Ti(h,2,-2),0)}function K3(h,w,S,C){return mn(h,w,S,Sr,Ti(h,0,C),Ti(h,C+1,-1),C)}var vh=d(()=>{qn(),Ai(),li()}),qi=d(()=>{});function xi(h,w){for(var S="",C=xo(h),R=0;R{qn(),Ai()});function Ul(h){var w=xo(h);return function(S,C,R,G){for(var te="",re=0;re{Ai()}),Vs=d(()=>{qn(),Ai(),vh(),qi(),li(),No(),Gf()}),gv,pc=d(()=>{gv=function(h){var w=new WeakMap;return function(S){if(w.has(S))return w.get(S);var C=h(S);return w.set(S,C),C}}});function Jf(h){var w=Object.create(null);return function(S){return w[S]===void 0&&(w[S]=h(S)),w[S]}}var xu=d(()=>{}),qs={};_(qs,{default:()=>Kf});function Xf(h,w){switch(An(h,w)){case 5103:return At+"print-"+h+h;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return At+h+h;case 5349:case 4246:case 4810:case 6968:case 2756:return At+h+Nt+h+_t+h+h;case 6828:case 4268:return At+h+_t+h+h;case 6165:return At+h+_t+"flex-"+h+h;case 5187:return At+h+Vr(h,/(\w+).+(:[^]+)/,At+"box-$1$2"+_t+"flex-$1$2")+h;case 5443:return At+h+_t+"flex-item-"+Vr(h,/flex-|-self/,"")+h;case 4675:return At+h+_t+"flex-line-pack"+Vr(h,/align-content|flex-|-self/,"")+h;case 5548:return At+h+_t+Vr(h,"shrink","negative")+h;case 5292:return At+h+_t+Vr(h,"basis","preferred-size")+h;case 6060:return At+"box-"+Vr(h,"-grow","")+At+h+_t+Vr(h,"grow","positive")+h;case 4554:return At+Vr(h,/([^-])(transform)/g,"$1"+At+"$2")+h;case 6187:return Vr(Vr(Vr(h,/(zoom-|grab)/,At+"$1"),/(image-set)/,At+"$1"),h,"")+h;case 5495:case 3959:return Vr(h,/(image-set\([^]*)/,At+"$1$`$1");case 4968:return Vr(Vr(h,/(.+:)(flex-)?(.*)/,At+"box-pack:$3"+_t+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+At+h+h;case 4095:case 3583:case 4068:case 2532:return Vr(h,/(.+)-inline(.+)/,At+"$1$2")+h;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(Mo(h)-1-w>6)switch(Sn(h,w+1)){case 109:if(Sn(h,w+4)!==45)break;case 102:return Vr(h,/(.+:)(.+)-([^]+)/,"$1"+At+"$2-$3$1"+Nt+(Sn(h,w+3)==108?"$3":"$2-$3"))+h;case 115:return~eo(h,"stretch")?Xf(Vr(h,"stretch","fill-available"),w)+h:h}break;case 4949:if(Sn(h,w+1)!==115)break;case 6444:switch(Sn(h,Mo(h)-3-(~eo(h,"!important")&&10))){case 107:return Vr(h,":",":"+At)+h;case 101:return Vr(h,/(.+:)([^;!]+)(;|!.+)?/,"$1"+At+(Sn(h,14)===45?"inline-":"")+"box$3$1"+At+"$2$3$1"+_t+"$2box$3")+h}break;case 5936:switch(Sn(h,w+11)){case 114:return At+h+_t+Vr(h,/[svh]\w+-[tblr]{2}/,"tb")+h;case 108:return At+h+_t+Vr(h,/[svh]\w+-[tblr]{2}/,"tb-rl")+h;case 45:return At+h+_t+Vr(h,/[svh]\w+-[tblr]{2}/,"lr")+h}return At+h+_t+h+h}return h}var ts,gs,nb,Ui,En,yv,Y3,ob,Kf,od=d(()=>{wt(),Vs(),pc(),xu(),ts=function(h,w,S){for(var C=0,R=0;C=R,R=ms(),C===38&&R===12&&(w[S]=1),!ko(R);)cn();return cc(h,ia)},gs=function(h,w){var S=-1,C=44;do switch(ko(C)){case 0:C===38&&ms()===12&&(w[S]=1),h[S]+=ts(ia-1,w,S);break;case 2:h[S]+=es(C);break;case 4:if(C===44){h[++S]=ms()===58?"&\f":"",w[S]=h[S].length;break}default:h[S]+=Un(C)}while(C=cn());return h},nb=function(h,w){return Hs(gs(Ws(h),w))},Ui=new WeakMap,En=function(h){if(!(h.type!=="rule"||!h.parent||h.length<1)){for(var w=h.value,S=h.parent,C=h.column===S.column&&h.line===S.line;S.type!=="rule";)if(S=S.parent,!S)return;if(!(h.props.length===1&&w.charCodeAt(0)!==58&&!Ui.get(S))&&!C){Ui.set(h,!0);for(var R=[],G=nb(w,R),te=S.props,re=0,ue=0;re-1&&!h.return)switch(h.type){case Sr:h.return=Xf(h.value,h.length);break;case ar:return xi([rn(h,{value:Vr(h.value,"@","@"+At)})],C);case Pt:if(h.length)return Dn(h.props,function(R){switch(yn(R,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return xi([rn(h,{props:[Vr(R,/:(read-\w+)/,":"+Nt+"$1")]})],C);case"::placeholder":return xi([rn(h,{props:[Vr(R,/:(plac\w+)/,":"+At+"input-$1")]}),rn(h,{props:[Vr(R,/:(plac\w+)/,":"+Nt+"$1")]}),rn(h,{props:[Vr(R,/:(plac\w+)/,_t+"input-$1")]})],C)}return""})}},ob=[Y3],Kf=function(h){var w=h.key;if(w==="css"){var S=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(S,function(ke){var ze=ke.getAttribute("data-emotion");ze.indexOf(" ")!==-1&&(document.head.appendChild(ke),ke.setAttribute("data-s",""))})}var C=h.stylisPlugins||ob,R={},G,te=[];G=h.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+w+' "]'),function(ke){for(var ze=ke.getAttribute("data-emotion").split(" "),Le=1;Le{ib=T(Je()),sm=function(h,w){return(0,ib.default)(h,w)}});function Yf(h,w,S){var C="";return S.split(" ").forEach(function(R){h[R]!==void 0?w.push(h[R]+";"):C+=R+" "}),C}var id,hl,Mi,Go=d(()=>{id=!0,hl=function(h,w,S){var C=h.key+"-"+w.name;(S===!1||id===!1)&&h.registered[C]===void 0&&(h.registered[C]=w.styles)},Mi=function(h,w,S){hl(h,w,S);var C=h.key+"-"+w.name;if(h.inserted[w.name]===void 0){var R=w;do h.insert(w===R?"."+C:"",R,h.sheet,!0),R=R.next;while(R!==void 0)}}});function ui(h){for(var w=0,S,C=0,R=h.length;R>=4;++C,R-=4)S=h.charCodeAt(C)&255|(h.charCodeAt(++C)&255)<<8|(h.charCodeAt(++C)&255)<<16|(h.charCodeAt(++C)&255)<<24,S=(S&65535)*1540483477+((S>>>16)*59797<<16),S^=S>>>24,w=(S&65535)*1540483477+((S>>>16)*59797<<16)^(w&65535)*1540483477+((w>>>16)*59797<<16);switch(R){case 3:w^=(h.charCodeAt(C+2)&255)<<16;case 2:w^=(h.charCodeAt(C+1)&255)<<8;case 1:w^=h.charCodeAt(C)&255,w=(w&65535)*1540483477+((w>>>16)*59797<<16)}return w^=w>>>13,w=(w&65535)*1540483477+((w>>>16)*59797<<16),((w^w>>>15)>>>0).toString(36)}var Z3=d(()=>{}),Zo,e5=d(()=>{Zo={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1}});function Hc(h,w,S){if(S==null)return"";if(S.__emotion_styles!==void 0)return S;switch(typeof S){case"boolean":return"";case"object":{if(S.anim===1)return Su={name:S.name,styles:S.styles,next:Su},S.name;if(S.styles!==void 0){var C=S.next;if(C!==void 0)for(;C!==void 0;)Su={name:C.name,styles:C.styles,next:Su},C=C.next;var R=S.styles+";";return R}return bv(h,w,S)}case"function":{if(h!==void 0){var G=Su,te=S(h);return Su=G,Hc(h,w,te)}break}case"string":if(!1)var re,ue;break}if(w==null)return S;var se=w[S];return se!==void 0?se:S}function bv(h,w,S){var C="";if(Array.isArray(S))for(var R=0;R{Z3(),e5(),xu(),ab=/[A-Z]|^ms/g,$c=/_EMO_([^_]+?)_([^]*?)_EMO_/g,_u=function(h){return h.charCodeAt(1)===45},gh=function(h){return h!=null&&typeof h!="boolean"},Vc=Jf(function(h){return _u(h)?h:h.replace(ab,"-$&").toLowerCase()}),yh=function(h,w){switch(h){case"animation":case"animationName":if(typeof w=="string")return w.replace($c,function(S,C,R){return Su={name:C,styles:R,next:Su},C})}return Zo[h]!==1&&!_u(h)&&typeof w=="number"&&w!==0?w+"px":w},lm=/label:\s*([^\s;\n{]+)\s*(;|$)/g,ml=function(h,w,S){if(h.length===1&&typeof h[0]=="object"&&h[0]!==null&&h[0].styles!==void 0)return h[0];var C=!0,R="";Su=void 0;var G=h[0];G==null||G.raw===void 0?(C=!1,R+=Hc(S,w,G)):R+=G[0];for(var te=1;te{um=T(q()),Lo=function(h){return h()},sb=um.useInsertionEffect?um.useInsertionEffect:!1,bh=sb||Lo,wv=sb||um.useLayoutEffect});function j4(h){var w=h.displayName||h.name||"Component",S=function(R,G){var te=ys.useContext(Eu);return ys.createElement(h,ae({theme:te,ref:G},R))},C=ys.forwardRef(S);return C.displayName="WithTheme("+w+")",sm(C,h)}var ys,wh,xv,_v,Oh,xh,qc,sd,Eu,Sv,t5,cm,fm,_h,Sh,ci,La,lb,r5=d(()=>{ys=T(q()),wh=T(q()),od(),Pe(),pc(),Q3(),Go(),ad(),Ov(),xv=!0,_v={}.hasOwnProperty,Oh=ys.createContext(typeof HTMLElement<"u"?Kf({key:"css"}):null),xh=Oh.Provider,qc=function(){return(0,wh.useContext)(Oh)},sd=function(h){return(0,wh.forwardRef)(function(w,S){var C=(0,wh.useContext)(Oh);return h(w,C,S)})},xv||(sd=function(h){return function(w){var S=(0,wh.useContext)(Oh);return S===null?(S=Kf({key:"css"}),ys.createElement(Oh.Provider,{value:S},h(w,S))):h(w,S)}}),Eu=ys.createContext({}),Sv=function(){return ys.useContext(Eu)},t5=function(h,w){if(typeof w=="function"){var S=w(h);return S}return ae({},h,w)},cm=gv(function(h){return gv(function(w){return t5(h,w)})}),fm=function(h){var w=ys.useContext(Eu);return h.theme!==w&&(w=cm(w)(h.theme)),ys.createElement(Eu.Provider,{value:w},h.children)},_h="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",Sh=function(h,w){var S={};for(var C in w)_v.call(w,C)&&(S[C]=w[C]);if(S[_h]=h,!1)var R;return S},ci=function(h){var w=h.cache,S=h.serialized,C=h.isStringTag;return hl(w,S,C),bh(function(){return Mi(w,S,C)}),null},La=sd(function(h,w,S){var C=h.css;typeof C=="string"&&w.registered[C]!==void 0&&(C=w.registered[C]);var R=h[_h],G=[C],te="";typeof h.className=="string"?te=Yf(w.registered,G,h.className):h.className!=null&&(te=h.className+" ");var re=ml(G,void 0,ys.useContext(Eu));if(!1)var ue;te+=w.key+"-"+re.name;var se={};for(var he in h)_v.call(h,he)&&he!=="css"&&he!==_h&&(se[he]=h[he]);return se.ref=S,se.className=te,ys.createElement(ys.Fragment,null,ys.createElement(ci,{cache:w,serialized:re,isStringTag:typeof R=="string"}),ys.createElement(R,se))}),lb=La}),Ev={};_(Ev,{CacheProvider:()=>xh,ClassNames:()=>ld,Global:()=>Eh,ThemeContext:()=>Eu,ThemeProvider:()=>fm,__unsafe_useEmotionCache:()=>qc,createElement:()=>Iu,css:()=>Us,jsx:()=>Iu,keyframes:()=>Iv,useTheme:()=>Sv,withEmotionCache:()=>sd,withTheme:()=>j4});function Us(){for(var h=arguments.length,w=new Array(h),S=0;S{r5(),r5(),fo=T(q()),Go(),Ov(),ad(),od(),Pe(),pc(),pm=T(Je()),Iu=function(h,w){var S=arguments;if(w==null||!_v.call(w,"css"))return fo.createElement.apply(void 0,S);var C=S.length,R=new Array(C);R[0]=lb,R[1]=Sh(h,w);for(var G=2;G{function S(C){return C&&C.__esModule?C:{default:C}}w.exports=S,w.exports.__esModule=!0,w.exports.default=w.exports}),ub=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=w;function w(S){let C="https://mui.com/production-error/?code="+S;for(let R=1;R{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=w(ub())}),Zf,bs,dm=d(()=>{xu(),Zf=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,bs=Jf(function(h){return Zf.test(h)||h.charCodeAt(0)===111&&h.charCodeAt(1)===110&&h.charCodeAt(2)<91})}),Ih,Uc,ga,hm,ep,tp,ud,rp=d(()=>{Pe(),Ih=T(q()),dm(),rs(),Go(),ad(),Ov(),Uc=bs,ga=function(h){return h!=="theme"},hm=function(h){return typeof h=="string"&&h.charCodeAt(0)>96?Uc:ga},ep=function(h,w,S){var C;if(w){var R=w.shouldForwardProp;C=h.__emotion_forwardProp&&R?function(G){return h.__emotion_forwardProp(G)&&R(G)}:R}return typeof C!="function"&&S&&(C=h.__emotion_forwardProp),C},tp=function(h){var w=h.cache,S=h.serialized,C=h.isStringTag;return hl(w,S,C),bh(function(){return Mi(w,S,C)}),null},ud=function h(w,S){var C=w.__emotion_real===w,R=C&&w.__emotion_base||w,G,te;S!==void 0&&(G=S.label,te=S.target);var re=ep(w,S,C),ue=re||hm(R),se=!ue("as");return function(){var he=arguments,_e=C&&w.__emotion_styles!==void 0?w.__emotion_styles.slice(0):[];if(G!==void 0&&_e.push("label:"+G+";"),he[0]==null||he[0].raw===void 0)_e.push.apply(_e,he);else{_e.push(he[0][0]);for(var Ie=he.length,Ce=1;CePv});var Pr,Xr,Pv,C4=d(()=>{rp(),Pe(),Pr=T(q()),dm(),Go(),ad(),Ov(),Xr=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"],Pv=ud.bind(),Xr.forEach(function(h){Pv[h]=Pv(h)})}),Gc=y((h,w)=>{"use strict";var S="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";w.exports=S}),fb=y((h,w)=>{"use strict";var S=Gc();function C(){}function R(){}R.resetWarningCache=C,w.exports=function(){function G(ue,se,he,_e,Ie,Ce){if(Ce!==S){var ke=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw ke.name="Invariant Violation",ke}}G.isRequired=G;function te(){return G}var re={array:G,bigint:G,bool:G,func:G,number:G,object:G,string:G,symbol:G,any:G,arrayOf:te,element:G,elementType:G,instanceOf:te,node:G,objectOf:te,oneOf:te,oneOfType:te,shape:te,exact:te,checkPropTypes:R,resetWarningCache:C};return re.PropTypes=re,re}}),Jc=y((h,w)=>{w.exports=fb()();var S,C}),jv=y(h=>{"use strict";L();var w=q(),S=60103;h.Fragment=60107,typeof Symbol=="function"&&Symbol.for&&(C=Symbol.for,S=C("react.element"),h.Fragment=C("react.fragment"));var C,R=w.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,G=Object.prototype.hasOwnProperty,te={key:!0,ref:!0,__self:!0,__source:!0};function re(ue,se,he){var _e,Ie={},Ce=null,ke=null;he!==void 0&&(Ce=""+he),se.key!==void 0&&(Ce=""+se.key),se.ref!==void 0&&(ke=se.ref);for(_e in se)G.call(se,_e)&&!te.hasOwnProperty(_e)&&(Ie[_e]=se[_e]);if(ue&&ue.defaultProps)for(_e in se=ue.defaultProps,se)Ie[_e]===void 0&&(Ie[_e]=se[_e]);return{$$typeof:S,type:ue,key:Ce,ref:ke,props:Ie,_owner:R.current}}h.jsx=re,h.jsxs=re}),Ln=y((h,w)=>{"use strict";w.exports=jv()}),kh=y(h=>{"use strict";"use client";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=he;var S=ue(q()),C=w(Jc()),R=(rs(),N(Ev)),G=w((od(),N(qs))),te=Ln();function re(_e){if(typeof WeakMap!="function")return null;var Ie=new WeakMap,Ce=new WeakMap;return(re=function(ke){return ke?Ce:Ie})(_e)}function ue(_e,Ie){if(!Ie&&_e&&_e.__esModule)return _e;if(_e===null||typeof _e!="object"&&typeof _e!="function")return{default:_e};var Ce=re(Ie);if(Ce&&Ce.has(_e))return Ce.get(_e);var ke={__proto__:null},ze=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var Le in _e)if(Le!=="default"&&Object.prototype.hasOwnProperty.call(_e,Le)){var Te=ze?Object.getOwnPropertyDescriptor(_e,Le):null;Te&&(Te.get||Te.set)?Object.defineProperty(ke,Le,Te):ke[Le]=_e[Le]}return ke.default=_e,Ce&&Ce.set(_e,ke),ke}var se;typeof document=="object"&&(se=(0,G.default)({key:"css",prepend:!0}));function he(_e){let{injectFirst:Ie,children:Ce}=_e;return Ie&&se?(0,te.jsx)(R.CacheProvider,{value:se,children:Ce}):Ce}}),mm=y(h=>{"use strict";"use client";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=w(kh())}),dc=y(h=>{"use strict";"use client";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=se;var S=re(q()),C=w(Jc()),R=(rs(),N(Ev)),G=Ln();function te(he){if(typeof WeakMap!="function")return null;var _e=new WeakMap,Ie=new WeakMap;return(te=function(Ce){return Ce?Ie:_e})(he)}function re(he,_e){if(!_e&&he&&he.__esModule)return he;if(he===null||typeof he!="object"&&typeof he!="function")return{default:he};var Ie=te(_e);if(Ie&&Ie.has(he))return Ie.get(he);var Ce={__proto__:null},ke=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var ze in he)if(ze!=="default"&&Object.prototype.hasOwnProperty.call(he,ze)){var Le=ke?Object.getOwnPropertyDescriptor(he,ze):null;Le&&(Le.get||Le.set)?Object.defineProperty(Ce,ze,Le):Ce[ze]=he[ze]}return Ce.default=he,Ie&&Ie.set(he,Ce),Ce}function ue(he){return he==null||Object.keys(he).length===0}function se(he){let{styles:_e,defaultTheme:Ie={}}=he,Ce=typeof _e=="function"?ke=>_e(ue(ke)?Ie:ke):_e;return(0,G.jsx)(R.Global,{styles:Ce})}}),Gl=y(h=>{"use strict";"use client";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=w(dc())}),Cv=y(h=>{"use strict";"use client";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"GlobalStyles",{enumerable:!0,get:function(){return G.default}}),Object.defineProperty(h,"StyledEngineProvider",{enumerable:!0,get:function(){return R.default}}),Object.defineProperty(h,"ThemeContext",{enumerable:!0,get:function(){return C.ThemeContext}}),Object.defineProperty(h,"css",{enumerable:!0,get:function(){return C.css}}),h.default=te,h.internal_processStyles=void 0,Object.defineProperty(h,"keyframes",{enumerable:!0,get:function(){return C.keyframes}});var S=w((C4(),N(cb))),C=(rs(),N(Ev)),R=w(mm()),G=w(Gl());function te(ue,se){return(0,S.default)(ue,se)}var re=(ue,se)=>{Array.isArray(ue.__emotion_styles)&&(ue.__emotion_styles=se(ue.__emotion_styles))};h.internal_processStyles=re}),Ph=y((h,w)=>{function S(){return w.exports=S=Object.assign?Object.assign.bind():function(C){for(var R=1;R{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=G,h.isPlainObject=C;var S=w(Ph());function C(te){if(typeof te!="object"||te===null)return!1;let re=Object.getPrototypeOf(te);return(re===null||re===Object.prototype||Object.getPrototypeOf(re)===null)&&!(Symbol.toStringTag in te)&&!(Symbol.iterator in te)}function R(te){if(!C(te))return te;let re={};return Object.keys(te).forEach(ue=>{re[ue]=R(te[ue])}),re}function G(te,re,ue={clone:!0}){let se=ue.clone?(0,S.default)({},te):te;return C(te)&&C(re)&&Object.keys(re).forEach(he=>{he!=="__proto__"&&(C(re[he])&&he in te&&C(te[he])?se[he]=G(te[he],re[he],ue):ue.clone?se[he]=C(re[he])?R(re[he]):re[he]:se[he]=re[he])}),se}}),ya=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});var w={};Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=R(gl());Object.keys(S).forEach(function(G){G==="default"||G==="__esModule"||Object.prototype.hasOwnProperty.call(w,G)||G in h&&h[G]===S[G]||Object.defineProperty(h,G,{enumerable:!0,get:function(){return S[G]}})});function C(G){if(typeof WeakMap!="function")return null;var te=new WeakMap,re=new WeakMap;return(C=function(ue){return ue?re:te})(G)}function R(G,te){if(!te&&G&&G.__esModule)return G;if(G===null||typeof G!="object"&&typeof G!="function")return{default:G};var re=C(te);if(re&&re.has(G))return re.get(G);var ue={__proto__:null},se=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var he in G)if(he!=="default"&&Object.prototype.hasOwnProperty.call(G,he)){var _e=se?Object.getOwnPropertyDescriptor(G,he):null;_e&&(_e.get||_e.set)?Object.defineProperty(ue,he,_e):ue[he]=G[he]}return ue.default=G,re&&re.set(G,ue),ue}}),Tv=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=C;var S=w(vl());function C(R){if(typeof R!="string")throw new Error((0,S.default)(7));return R.charAt(0).toUpperCase()+R.slice(1)}}),ro=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=w(Tv())}),ws=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=te,h.getFunctionName=C;var w=Ve(),S=/^\s*function(?:\s|\s*\/\*.*\*\/\s*)+([^(\s/]*)\s*/;function C(re){let ue=`${re}`.match(S);return ue&&ue[1]||""}function R(re,ue=""){return re.displayName||re.name||C(re)||ue}function G(re,ue,se){let he=R(ue);return re.displayName||(he!==""?`${se}(${he})`:se)}function te(re){if(re!=null){if(typeof re=="string")return re;if(typeof re=="function")return R(re,"Component");if(typeof re=="object")switch(re.$$typeof){case w.ForwardRef:return G(re,re.render,"ForwardRef");case w.Memo:return G(re,re.type,"memo");default:return}}}}),T4=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});var w={};Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=R(ws());Object.keys(S).forEach(function(G){G==="default"||G==="__esModule"||Object.prototype.hasOwnProperty.call(w,G)||G in h&&h[G]===S[G]||Object.defineProperty(h,G,{enumerable:!0,get:function(){return S[G]}})});function C(G){if(typeof WeakMap!="function")return null;var te=new WeakMap,re=new WeakMap;return(C=function(ue){return ue?re:te})(G)}function R(G,te){if(!te&&G&&G.__esModule)return G;if(G===null||typeof G!="object"&&typeof G!="function")return{default:G};var re=C(te);if(re&&re.has(G))return re.get(G);var ue={__proto__:null},se=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var he in G)if(he!=="default"&&Object.prototype.hasOwnProperty.call(G,he)){var _e=se?Object.getOwnPropertyDescriptor(G,he):null;_e&&(_e.get||_e.set)?Object.defineProperty(ue,he,_e):ue[he]=G[he]}return ue.default=G,re&&re.set(G,ue),ue}}),vm=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;function w(C,R=Number.MIN_SAFE_INTEGER,G=Number.MAX_SAFE_INTEGER){return Math.max(R,Math.min(C,G))}var S=h.default=w}),jh=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}});var S=w(vm())}),gm=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;var S=w(ya());function C(G,te){return te?(0,S.default)(G,te,{clone:!1}):G}var R=h.default=C}),hc=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;var S=w(Jc()),C={},R=h.default=C}),ba=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.computeBreakpointsBase=Ce,h.createEmptyBreakpointObject=he,h.default=void 0,h.handleBreakpoints=ue,h.mergeBreakpointsInOrder=Ie,h.removeUnusedBreakpoints=_e,h.resolveBreakpointValues=ke,h.values=void 0;var S=w(Ph()),C=w(Jc()),R=w(ya()),G=w(gm()),te=h.values={xs:0,sm:600,md:900,lg:1200,xl:1536},re={keys:["xs","sm","md","lg","xl"],up:Le=>`@media (min-width:${te[Le]}px)`};function ue(Le,Te,lt){let dt=Le.theme||{};if(Array.isArray(Te)){let tt=dt.breakpoints||re;return Te.reduce((it,Ke,st)=>(it[tt.up(tt.keys[st])]=lt(Te[st]),it),{})}if(typeof Te=="object"){let tt=dt.breakpoints||re;return Object.keys(Te).reduce((it,Ke)=>{if(Object.keys(tt.values||te).indexOf(Ke)!==-1){let st=tt.up(Ke);it[st]=lt(Te[Ke],Ke)}else{let st=Ke;it[st]=Te[st]}return it},{})}return lt(Te)}function se(Le){let Te=lt=>{let dt=lt.theme||{},tt=Le(lt),it=dt.breakpoints||re,Ke=it.keys.reduce((st,De)=>(lt[De]&&(st=st||{},st[it.up(De)]=Le((0,S.default)({theme:dt},lt[De]))),st),null);return(0,G.default)(tt,Ke)};return Te.propTypes={},Te.filterProps=["xs","sm","md","lg","xl",...Le.filterProps],Te}function he(Le={}){var Te;return((Te=Le.keys)==null?void 0:Te.reduce((lt,dt)=>{let tt=Le.up(dt);return lt[tt]={},lt},{}))||{}}function _e(Le,Te){return Le.reduce((lt,dt)=>{let tt=lt[dt];return(!tt||Object.keys(tt).length===0)&&delete lt[dt],lt},Te)}function Ie(Le,...Te){let lt=he(Le),dt=[lt,...Te].reduce((tt,it)=>(0,R.default)(tt,it),{});return _e(Object.keys(lt),dt)}function Ce(Le,Te){if(typeof Le!="object")return{};let lt={},dt=Object.keys(Te);return Array.isArray(Le)?dt.forEach((tt,it)=>{it{Le[tt]!=null&&(lt[tt]=!0)}),lt}function ke({values:Le,breakpoints:Te,base:lt}){let dt=lt||Ce(Le,Te),tt=Object.keys(dt);if(tt.length===0)return Le;let it;return tt.reduce((Ke,st,De)=>(Array.isArray(Le)?(Ke[st]=Le[De]!=null?Le[De]:Le[it],it=De):typeof Le=="object"?(Ke[st]=Le[st]!=null?Le[st]:Le[it],it=st):Ke[st]=Le,Ke),{})}var ze=h.default=se}),cd=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0,h.getPath=G,h.getStyleValue=te;var S=w(ro()),C=w(hc()),R=ba();function G(se,he,_e=!0){if(!he||typeof he!="string")return null;if(se&&se.vars&&_e){let Ie=`vars.${he}`.split(".").reduce((Ce,ke)=>Ce&&Ce[ke]?Ce[ke]:null,se);if(Ie!=null)return Ie}return he.split(".").reduce((Ie,Ce)=>Ie&&Ie[Ce]!=null?Ie[Ce]:null,se)}function te(se,he,_e,Ie=_e){let Ce;return typeof se=="function"?Ce=se(_e):Array.isArray(se)?Ce=se[_e]||Ie:Ce=G(se,_e)||Ie,he&&(Ce=he(Ce,Ie,se)),Ce}function re(se){let{prop:he,cssProperty:_e=se.prop,themeKey:Ie,transform:Ce}=se,ke=ze=>{if(ze[he]==null)return null;let Le=ze[he],Te=ze.theme,lt=G(Te,Ie)||{},dt=tt=>{let it=te(lt,Ce,tt);return tt===it&&typeof tt=="string"&&(it=te(lt,Ce,`${he}${tt==="default"?"":(0,S.default)(tt)}`,tt)),_e===!1?it:{[_e]:it}};return(0,R.handleBreakpoints)(ze,Le,dt)};return ke.propTypes={},ke.filterProps=[he],ke}var ue=h.default=re}),Gr=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=w;function w(S){let C={};return R=>(C[R]===void 0&&(C[R]=S(R)),C[R])}}),fd=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.createUnarySpacing=ze,h.createUnaryUnit=ke,h.default=void 0,h.getStyleFromPropValue=Te,h.getValue=Le,h.margin=tt,h.marginKeys=void 0,h.padding=it,h.paddingKeys=void 0;var S=w(hc()),C=ba(),R=cd(),G=w(gm()),te=w(Gr()),re={m:"margin",p:"padding"},ue={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},se={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},he=(0,te.default)(De=>{if(De.length>2)if(se[De])De=se[De];else return[De];let[Ze,ct]=De.split(""),gt=re[Ze],Et=ue[ct]||"";return Array.isArray(Et)?Et.map(zt=>gt+zt):[gt+Et]}),_e=h.marginKeys=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],Ie=h.paddingKeys=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],Ce=[..._e,...Ie];function ke(De,Ze,ct,gt){var Et;let zt=(Et=(0,R.getPath)(De,Ze,!1))!=null?Et:ct;return typeof zt=="number"?Yt=>typeof Yt=="string"?Yt:zt*Yt:Array.isArray(zt)?Yt=>typeof Yt=="string"?Yt:zt[Yt]:typeof zt=="function"?zt:()=>{}}function ze(De){return ke(De,"spacing",8,"spacing")}function Le(De,Ze){if(typeof Ze=="string"||Ze==null)return Ze;let ct=Math.abs(Ze),gt=De(ct);return Ze>=0?gt:typeof gt=="number"?-gt:`-${gt}`}function Te(De,Ze){return ct=>De.reduce((gt,Et)=>(gt[Et]=Le(Ze,ct),gt),{})}function lt(De,Ze,ct,gt){if(Ze.indexOf(ct)===-1)return null;let Et=he(ct),zt=Te(Et,gt),Yt=De[ct];return(0,C.handleBreakpoints)(De,Yt,zt)}function dt(De,Ze){let ct=ze(De.theme);return Object.keys(De).map(gt=>lt(De,Ze,gt,ct)).reduce(G.default,{})}function tt(De){return dt(De,_e)}tt.propTypes={},tt.filterProps=_e;function it(De){return dt(De,Ie)}it.propTypes={},it.filterProps=Ie;function Ke(De){return dt(De,Ce)}Ke.propTypes={},Ke.filterProps=Ce;var st=h.default=Ke}),ku=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;var S=w(gm());function C(...G){let te=G.reduce((ue,se)=>(se.filterProps.forEach(he=>{ue[he]=se}),ue),{}),re=ue=>Object.keys(ue).reduce((se,he)=>te[he]?(0,S.default)(se,te[he](ue)):se,{});return re.propTypes={},re.filterProps=G.reduce((ue,se)=>ue.concat(se.filterProps),[]),re}var R=h.default=C}),Xc=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.borderTopColor=h.borderTop=h.borderRightColor=h.borderRight=h.borderRadius=h.borderLeftColor=h.borderLeft=h.borderColor=h.borderBottomColor=h.borderBottom=h.border=void 0,h.borderTransform=re,h.outlineColor=h.outline=h.default=void 0;var S=w(hc()),C=w(cd()),R=w(ku()),G=fd(),te=ba();function re(De){return typeof De!="number"?De:`${De}px solid`}function ue(De,Ze){return(0,C.default)({prop:De,themeKey:"borders",transform:Ze})}var se=h.border=ue("border",re),he=h.borderTop=ue("borderTop",re),_e=h.borderRight=ue("borderRight",re),Ie=h.borderBottom=ue("borderBottom",re),Ce=h.borderLeft=ue("borderLeft",re),ke=h.borderColor=ue("borderColor"),ze=h.borderTopColor=ue("borderTopColor"),Le=h.borderRightColor=ue("borderRightColor"),Te=h.borderBottomColor=ue("borderBottomColor"),lt=h.borderLeftColor=ue("borderLeftColor"),dt=h.outline=ue("outline",re),tt=h.outlineColor=ue("outlineColor"),it=De=>{if(De.borderRadius!==void 0&&De.borderRadius!==null){let Ze=(0,G.createUnaryUnit)(De.theme,"shape.borderRadius",4,"borderRadius"),ct=gt=>({borderRadius:(0,G.getValue)(Ze,gt)});return(0,te.handleBreakpoints)(De,De.borderRadius,ct)}return null};h.borderRadius=it,it.propTypes={},it.filterProps=["borderRadius"];var Ke=(0,R.default)(se,he,_e,Ie,Ce,ke,ze,Le,Te,lt,it,dt,tt),st=h.default=Ke}),pb=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.rowGap=h.gridTemplateRows=h.gridTemplateColumns=h.gridTemplateAreas=h.gridRow=h.gridColumn=h.gridAutoRows=h.gridAutoFlow=h.gridAutoColumns=h.gridArea=h.gap=h.default=h.columnGap=void 0;var S=w(cd()),C=w(ku()),R=fd(),G=ba(),te=w(hc()),re=it=>{if(it.gap!==void 0&&it.gap!==null){let Ke=(0,R.createUnaryUnit)(it.theme,"spacing",8,"gap"),st=De=>({gap:(0,R.getValue)(Ke,De)});return(0,G.handleBreakpoints)(it,it.gap,st)}return null};h.gap=re,re.propTypes={},re.filterProps=["gap"];var ue=it=>{if(it.columnGap!==void 0&&it.columnGap!==null){let Ke=(0,R.createUnaryUnit)(it.theme,"spacing",8,"columnGap"),st=De=>({columnGap:(0,R.getValue)(Ke,De)});return(0,G.handleBreakpoints)(it,it.columnGap,st)}return null};h.columnGap=ue,ue.propTypes={},ue.filterProps=["columnGap"];var se=it=>{if(it.rowGap!==void 0&&it.rowGap!==null){let Ke=(0,R.createUnaryUnit)(it.theme,"spacing",8,"rowGap"),st=De=>({rowGap:(0,R.getValue)(Ke,De)});return(0,G.handleBreakpoints)(it,it.rowGap,st)}return null};h.rowGap=se,se.propTypes={},se.filterProps=["rowGap"];var he=h.gridColumn=(0,S.default)({prop:"gridColumn"}),_e=h.gridRow=(0,S.default)({prop:"gridRow"}),Ie=h.gridAutoFlow=(0,S.default)({prop:"gridAutoFlow"}),Ce=h.gridAutoColumns=(0,S.default)({prop:"gridAutoColumns"}),ke=h.gridAutoRows=(0,S.default)({prop:"gridAutoRows"}),ze=h.gridTemplateColumns=(0,S.default)({prop:"gridTemplateColumns"}),Le=h.gridTemplateRows=(0,S.default)({prop:"gridTemplateRows"}),Te=h.gridTemplateAreas=(0,S.default)({prop:"gridTemplateAreas"}),lt=h.gridArea=(0,S.default)({prop:"gridArea"}),dt=(0,C.default)(re,ue,se,he,_e,Ie,Ce,ke,ze,Le,Te,lt),tt=h.default=dt}),n5=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=h.color=h.bgcolor=h.backgroundColor=void 0,h.paletteTransform=R;var S=w(cd()),C=w(ku());function R(he,_e){return _e==="grey"?_e:he}var G=h.color=(0,S.default)({prop:"color",themeKey:"palette",transform:R}),te=h.bgcolor=(0,S.default)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:R}),re=h.backgroundColor=(0,S.default)({prop:"backgroundColor",themeKey:"palette",transform:R}),ue=(0,C.default)(G,te,re),se=h.default=ue}),o5=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.sizeWidth=h.sizeHeight=h.minWidth=h.minHeight=h.maxWidth=h.maxHeight=h.height=h.default=h.boxSizing=void 0,h.sizingTransform=G,h.width=void 0;var S=w(cd()),C=w(ku()),R=ba();function G(Te){return Te<=1&&Te!==0?`${Te*100}%`:Te}var te=h.width=(0,S.default)({prop:"width",transform:G}),re=Te=>{if(Te.maxWidth!==void 0&&Te.maxWidth!==null){let lt=dt=>{var tt,it;let Ke=((tt=Te.theme)==null||(tt=tt.breakpoints)==null||(tt=tt.values)==null?void 0:tt[dt])||R.values[dt];return Ke?((it=Te.theme)==null||(it=it.breakpoints)==null?void 0:it.unit)!=="px"?{maxWidth:`${Ke}${Te.theme.breakpoints.unit}`}:{maxWidth:Ke}:{maxWidth:G(dt)}};return(0,R.handleBreakpoints)(Te,Te.maxWidth,lt)}return null};h.maxWidth=re,re.filterProps=["maxWidth"];var ue=h.minWidth=(0,S.default)({prop:"minWidth",transform:G}),se=h.height=(0,S.default)({prop:"height",transform:G}),he=h.maxHeight=(0,S.default)({prop:"maxHeight",transform:G}),_e=h.minHeight=(0,S.default)({prop:"minHeight",transform:G}),Ie=h.sizeWidth=(0,S.default)({prop:"size",cssProperty:"width",transform:G}),Ce=h.sizeHeight=(0,S.default)({prop:"size",cssProperty:"height",transform:G}),ke=h.boxSizing=(0,S.default)({prop:"boxSizing"}),ze=(0,C.default)(te,re,ue,se,he,_e,ke),Le=h.default=ze}),Js=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;var w=fd(),S=Xc(),C=pb(),R=n5(),G=o5(),te={border:{themeKey:"borders",transform:S.borderTransform},borderTop:{themeKey:"borders",transform:S.borderTransform},borderRight:{themeKey:"borders",transform:S.borderTransform},borderBottom:{themeKey:"borders",transform:S.borderTransform},borderLeft:{themeKey:"borders",transform:S.borderTransform},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:S.borderTransform},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:S.borderRadius},color:{themeKey:"palette",transform:R.paletteTransform},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:R.paletteTransform},backgroundColor:{themeKey:"palette",transform:R.paletteTransform},p:{style:w.padding},pt:{style:w.padding},pr:{style:w.padding},pb:{style:w.padding},pl:{style:w.padding},px:{style:w.padding},py:{style:w.padding},padding:{style:w.padding},paddingTop:{style:w.padding},paddingRight:{style:w.padding},paddingBottom:{style:w.padding},paddingLeft:{style:w.padding},paddingX:{style:w.padding},paddingY:{style:w.padding},paddingInline:{style:w.padding},paddingInlineStart:{style:w.padding},paddingInlineEnd:{style:w.padding},paddingBlock:{style:w.padding},paddingBlockStart:{style:w.padding},paddingBlockEnd:{style:w.padding},m:{style:w.margin},mt:{style:w.margin},mr:{style:w.margin},mb:{style:w.margin},ml:{style:w.margin},mx:{style:w.margin},my:{style:w.margin},margin:{style:w.margin},marginTop:{style:w.margin},marginRight:{style:w.margin},marginBottom:{style:w.margin},marginLeft:{style:w.margin},marginX:{style:w.margin},marginY:{style:w.margin},marginInline:{style:w.margin},marginInlineStart:{style:w.margin},marginInlineEnd:{style:w.margin},marginBlock:{style:w.margin},marginBlockStart:{style:w.margin},marginBlockEnd:{style:w.margin},displayPrint:{cssProperty:!1,transform:ue=>({"@media print":{display:ue}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:C.gap},rowGap:{style:C.rowGap},columnGap:{style:C.columnGap},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:G.sizingTransform},maxWidth:{style:G.maxWidth},minWidth:{transform:G.sizingTransform},height:{transform:G.sizingTransform},maxHeight:{transform:G.sizingTransform},minHeight:{transform:G.sizingTransform},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},re=h.default=te}),Av=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0,h.unstable_createStyleFunctionSx=se;var S=w(ro()),C=w(gm()),R=cd(),G=ba(),te=w(Js());function re(...Ie){let Ce=Ie.reduce((ze,Le)=>ze.concat(Object.keys(Le)),[]),ke=new Set(Ce);return Ie.every(ze=>ke.size===Object.keys(ze).length)}function ue(Ie,Ce){return typeof Ie=="function"?Ie(Ce):Ie}function se(){function Ie(ke,ze,Le,Te){let lt={[ke]:ze,theme:Le},dt=Te[ke];if(!dt)return{[ke]:ze};let{cssProperty:tt=ke,themeKey:it,transform:Ke,style:st}=dt;if(ze==null)return null;if(it==="typography"&&ze==="inherit")return{[ke]:ze};let De=(0,R.getPath)(Le,it)||{};if(st)return st(lt);let Ze=ct=>{let gt=(0,R.getStyleValue)(De,Ke,ct);return ct===gt&&typeof ct=="string"&&(gt=(0,R.getStyleValue)(De,Ke,`${ke}${ct==="default"?"":(0,S.default)(ct)}`,ct)),tt===!1?gt:{[tt]:gt}};return(0,G.handleBreakpoints)(lt,ze,Ze)}function Ce(ke){var ze;let{sx:Le,theme:Te={}}=ke||{};if(!Le)return null;let lt=(ze=Te.unstable_sxConfig)!=null?ze:te.default;function dt(tt){let it=tt;if(typeof tt=="function")it=tt(Te);else if(typeof tt!="object")return tt;if(!it)return null;let Ke=(0,G.createEmptyBreakpointObject)(Te.breakpoints),st=Object.keys(Ke),De=Ke;return Object.keys(it).forEach(Ze=>{let ct=ue(it[Ze],Te);if(ct!=null)if(typeof ct=="object")if(lt[Ze])De=(0,C.default)(De,Ie(Ze,ct,Te,lt));else{let gt=(0,G.handleBreakpoints)({theme:Te},ct,Et=>({[Ze]:Et}));re(gt,ct)?De[Ze]=Ce({sx:ct,theme:Te}):De=(0,C.default)(De,gt)}else De=(0,C.default)(De,Ie(Ze,ct,Te,lt))}),(0,G.removeUnusedBreakpoints)(st,De)}return Array.isArray(Le)?Le.map(dt):dt(Le)}return Ce}var he=se();he.filterProps=["sx"];var _e=h.default=he}),Kc=y((h,w)=>{function S(C,R){if(C==null)return{};var G={},te=Object.keys(C),re,ue;for(ue=0;ue=0)&&(G[re]=C[re]);return G}w.exports=S,w.exports.__esModule=!0,w.exports.default=w.exports}),db=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=ue;var S=w(Ph()),C=w(Kc()),R=ya(),G=w(Js()),te=["sx"],re=se=>{var he,_e;let Ie={systemProps:{},otherProps:{}},Ce=(he=se==null||(_e=se.theme)==null?void 0:_e.unstable_sxConfig)!=null?he:G.default;return Object.keys(se).forEach(ke=>{Ce[ke]?Ie.systemProps[ke]=se[ke]:Ie.otherProps[ke]=se[ke]}),Ie};function ue(se){let{sx:he}=se,_e=(0,C.default)(se,te),{systemProps:Ie,otherProps:Ce}=re(_e),ke;return Array.isArray(he)?ke=[Ie,...he]:typeof he=="function"?ke=(...ze)=>{let Le=he(...ze);return(0,R.isPlainObject)(Le)?(0,S.default)({},Ie,Le):Ie}:ke=(0,S.default)({},Ie,he),(0,S.default)({},Ce,{sx:ke})}}),Mv=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}}),Object.defineProperty(h,"extendSxProp",{enumerable:!0,get:function(){return C.default}}),Object.defineProperty(h,"unstable_createStyleFunctionSx",{enumerable:!0,get:function(){return S.unstable_createStyleFunctionSx}}),Object.defineProperty(h,"unstable_defaultSxConfig",{enumerable:!0,get:function(){return R.default}});var S=te(Av()),C=w(db()),R=w(Js());function G(re){if(typeof WeakMap!="function")return null;var ue=new WeakMap,se=new WeakMap;return(G=function(he){return he?se:ue})(re)}function te(re,ue){if(!ue&&re&&re.__esModule)return re;if(re===null||typeof re!="object"&&typeof re!="function")return{default:re};var se=G(ue);if(se&&se.has(re))return se.get(re);var he={__proto__:null},_e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var Ie in re)if(Ie!=="default"&&Object.prototype.hasOwnProperty.call(re,Ie)){var Ce=_e?Object.getOwnPropertyDescriptor(re,Ie):null;Ce&&(Ce.get||Ce.set)?Object.defineProperty(he,Ie,Ce):he[Ie]=re[Ie]}return he.default=re,se&&se.set(re,he),he}}),pd=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.breakpointKeys=void 0,h.default=re;var S=w(Kc()),C=w(Ph()),R=["values","unit","step"],G=h.breakpointKeys=["xs","sm","md","lg","xl"],te=ue=>{let se=Object.keys(ue).map(he=>({key:he,val:ue[he]}))||[];return se.sort((he,_e)=>he.val-_e.val),se.reduce((he,_e)=>(0,C.default)({},he,{[_e.key]:_e.val}),{})};function re(ue){let{values:se={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:he="px",step:_e=5}=ue,Ie=(0,S.default)(ue,R),Ce=te(se),ke=Object.keys(Ce);function ze(tt){return`@media (min-width:${typeof se[tt]=="number"?se[tt]:tt}${he})`}function Le(tt){return`@media (max-width:${(typeof se[tt]=="number"?se[tt]:tt)-_e/100}${he})`}function Te(tt,it){let Ke=ke.indexOf(it);return`@media (min-width:${typeof se[tt]=="number"?se[tt]:tt}${he}) and (max-width:${(Ke!==-1&&typeof se[ke[Ke]]=="number"?se[ke[Ke]]:it)-_e/100}${he})`}function lt(tt){return ke.indexOf(tt)+1{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;var w={borderRadius:4},S=h.default=w}),hb=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=S;var w=fd();function S(C=8){if(C.mui)return C;let R=(0,w.createUnarySpacing)({spacing:C}),G=(...te)=>(te.length===0?[1]:te).map(re=>{let ue=R(re);return typeof ue=="number"?`${ue}px`:ue}).join(" ");return G.mui=!0,G}}),ym=y(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0}),h.default=w;function w(S,C){let R=this;return R.vars&&typeof R.getColorSchemeSelector=="function"?{[R.getColorSchemeSelector(S).replace(/(\[[^\]]+\])/,"*:where($1)")]:C}:R.palette.mode===S?C:{}}}),a5=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=void 0;var S=w(Ph()),C=w(Kc()),R=w(ya()),G=w(pd()),te=w(i5()),re=w(hb()),ue=w(Av()),se=w(Js()),he=w(ym()),_e=["breakpoints","palette","spacing","shape"];function Ie(ke={},...ze){let{breakpoints:Le={},palette:Te={},spacing:lt,shape:dt={}}=ke,tt=(0,C.default)(ke,_e),it=(0,G.default)(Le),Ke=(0,re.default)(lt),st=(0,R.default)({breakpoints:it,direction:"ltr",components:{},palette:(0,S.default)({mode:"light"},Te),spacing:Ke,shape:(0,S.default)({},te.default,dt)},tt);return st.applyStyles=he.default,st=ze.reduce((De,Ze)=>(0,R.default)(De,Ze),st),st.unstable_sxConfig=(0,S.default)({},se.default,tt?.unstable_sxConfig),st.unstable_sx=function(De){return(0,ue.default)({sx:De,theme:this})},st}var Ce=h.default=Ie}),Po=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),Object.defineProperty(h,"default",{enumerable:!0,get:function(){return S.default}}),Object.defineProperty(h,"private_createBreakpoints",{enumerable:!0,get:function(){return C.default}}),Object.defineProperty(h,"unstable_applyStyles",{enumerable:!0,get:function(){return R.default}});var S=w(a5()),C=w(pd()),R=w(ym())}),Ch=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.alpha=ze,h.blend=st,h.colorChannel=void 0,h.darken=Te,h.decomposeColor=re,h.emphasize=it,h.getContrastRatio=ke,h.getLuminance=Ce,h.hexToRgb=G,h.hslToRgb=Ie,h.lighten=dt,h.private_safeAlpha=Le,h.private_safeColorChannel=void 0,h.private_safeDarken=lt,h.private_safeEmphasize=Ke,h.private_safeLighten=tt,h.recomposeColor=he,h.rgbToHex=_e;var S=w(vl()),C=w(jh());function R(De,Ze=0,ct=1){return(0,C.default)(De,Ze,ct)}function G(De){De=De.slice(1);let Ze=new RegExp(`.{1,${De.length>=6?2:1}}`,"g"),ct=De.match(Ze);return ct&&ct[0].length===1&&(ct=ct.map(gt=>gt+gt)),ct?`rgb${ct.length===4?"a":""}(${ct.map((gt,Et)=>Et<3?parseInt(gt,16):Math.round(parseInt(gt,16)/255*1e3)/1e3).join(", ")})`:""}function te(De){let Ze=De.toString(16);return Ze.length===1?`0${Ze}`:Ze}function re(De){if(De.type)return De;if(De.charAt(0)==="#")return re(G(De));let Ze=De.indexOf("("),ct=De.substring(0,Ze);if(["rgb","rgba","hsl","hsla","color"].indexOf(ct)===-1)throw new Error((0,S.default)(9,De));let gt=De.substring(Ze+1,De.length-1),Et;if(ct==="color"){if(gt=gt.split(" "),Et=gt.shift(),gt.length===4&>[3].charAt(0)==="/"&&(gt[3]=gt[3].slice(1)),["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(Et)===-1)throw new Error((0,S.default)(10,Et))}else gt=gt.split(",");return gt=gt.map(zt=>parseFloat(zt)),{type:ct,values:gt,colorSpace:Et}}var ue=De=>{let Ze=re(De);return Ze.values.slice(0,3).map((ct,gt)=>Ze.type.indexOf("hsl")!==-1&>!==0?`${ct}%`:ct).join(" ")};h.colorChannel=ue;var se=(De,Ze)=>{try{return ue(De)}catch{return De}};h.private_safeColorChannel=se;function he(De){let{type:Ze,colorSpace:ct}=De,{values:gt}=De;return Ze.indexOf("rgb")!==-1?gt=gt.map((Et,zt)=>zt<3?parseInt(Et,10):Et):Ze.indexOf("hsl")!==-1&&(gt[1]=`${gt[1]}%`,gt[2]=`${gt[2]}%`),Ze.indexOf("color")!==-1?gt=`${ct} ${gt.join(" ")}`:gt=`${gt.join(", ")}`,`${Ze}(${gt})`}function _e(De){if(De.indexOf("#")===0)return De;let{values:Ze}=re(De);return`#${Ze.map((ct,gt)=>te(gt===3?Math.round(255*ct):ct)).join("")}`}function Ie(De){De=re(De);let{values:Ze}=De,ct=Ze[0],gt=Ze[1]/100,Et=Ze[2]/100,zt=gt*Math.min(Et,1-Et),Yt=(Zr,at=(Zr+ct/30)%12)=>Et-zt*Math.max(Math.min(at-3,9-at,1),-1),Tr="rgb",_r=[Math.round(Yt(0)*255),Math.round(Yt(8)*255),Math.round(Yt(4)*255)];return De.type==="hsla"&&(Tr+="a",_r.push(Ze[3])),he({type:Tr,values:_r})}function Ce(De){De=re(De);let Ze=De.type==="hsl"||De.type==="hsla"?re(Ie(De)).values:De.values;return Ze=Ze.map(ct=>(De.type!=="color"&&(ct/=255),ct<=.03928?ct/12.92:((ct+.055)/1.055)**2.4)),Number((.2126*Ze[0]+.7152*Ze[1]+.0722*Ze[2]).toFixed(3))}function ke(De,Ze){let ct=Ce(De),gt=Ce(Ze);return(Math.max(ct,gt)+.05)/(Math.min(ct,gt)+.05)}function ze(De,Ze){return De=re(De),Ze=R(Ze),(De.type==="rgb"||De.type==="hsl")&&(De.type+="a"),De.type==="color"?De.values[3]=`/${Ze}`:De.values[3]=Ze,he(De)}function Le(De,Ze,ct){try{return ze(De,Ze)}catch{return De}}function Te(De,Ze){if(De=re(De),Ze=R(Ze),De.type.indexOf("hsl")!==-1)De.values[2]*=1-Ze;else if(De.type.indexOf("rgb")!==-1||De.type.indexOf("color")!==-1)for(let ct=0;ct<3;ct+=1)De.values[ct]*=1-Ze;return he(De)}function lt(De,Ze,ct){try{return Te(De,Ze)}catch{return De}}function dt(De,Ze){if(De=re(De),Ze=R(Ze),De.type.indexOf("hsl")!==-1)De.values[2]+=(100-De.values[2])*Ze;else if(De.type.indexOf("rgb")!==-1)for(let ct=0;ct<3;ct+=1)De.values[ct]+=(255-De.values[ct])*Ze;else if(De.type.indexOf("color")!==-1)for(let ct=0;ct<3;ct+=1)De.values[ct]+=(1-De.values[ct])*Ze;return he(De)}function tt(De,Ze,ct){try{return dt(De,Ze)}catch{return De}}function it(De,Ze=.15){return Ce(De)>.5?Te(De,Ze):dt(De,Ze)}function Ke(De,Ze,ct){try{return Ke(De,Ze)}catch{return De}}function st(De,Ze,ct,gt=1){let Et=(_r,Zr)=>Math.round((_r**(1/gt)*(1-ct)+Zr**(1/gt)*ct)**gt),zt=re(De),Yt=re(Ze),Tr=[Et(zt.values[0],Yt.values[0]),Et(zt.values[1],Yt.values[1]),Et(zt.values[2],Yt.values[2])];return he({type:"rgb",values:Tr})}}),mb=y(h=>{"use strict";var w=to();Object.defineProperty(h,"__esModule",{value:!0}),h.default=st,h.shouldForwardProp=Te,h.systemDefaultTheme=void 0;var S=w(Ph()),C=w(Kc()),R=ke(Cv()),G=ya(),te=w(ro()),re=w(T4()),ue=w(Po()),se=w(Mv()),he=["ownerState"],_e=["variants"],Ie=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function Ce(De){if(typeof WeakMap!="function")return null;var Ze=new WeakMap,ct=new WeakMap;return(Ce=function(gt){return gt?ct:Ze})(De)}function ke(De,Ze){if(!Ze&&De&&De.__esModule)return De;if(De===null||typeof De!="object"&&typeof De!="function")return{default:De};var ct=Ce(Ze);if(ct&&ct.has(De))return ct.get(De);var gt={__proto__:null},Et=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var zt in De)if(zt!=="default"&&Object.prototype.hasOwnProperty.call(De,zt)){var Yt=Et?Object.getOwnPropertyDescriptor(De,zt):null;Yt&&(Yt.get||Yt.set)?Object.defineProperty(gt,zt,Yt):gt[zt]=De[zt]}return gt.default=De,ct&&ct.set(De,gt),gt}function ze(De){return Object.keys(De).length===0}function Le(De){return typeof De=="string"&&De.charCodeAt(0)>96}function Te(De){return De!=="ownerState"&&De!=="theme"&&De!=="sx"&&De!=="as"}var lt=h.systemDefaultTheme=(0,ue.default)(),dt=De=>De&&De.charAt(0).toLowerCase()+De.slice(1);function tt({defaultTheme:De,theme:Ze,themeId:ct}){return ze(Ze)?De:Ze[ct]||Ze}function it(De){return De?(Ze,ct)=>ct[De]:null}function Ke(De,Ze){let{ownerState:ct}=Ze,gt=(0,C.default)(Ze,he),Et=typeof De=="function"?De((0,S.default)({ownerState:ct},gt)):De;if(Array.isArray(Et))return Et.flatMap(zt=>Ke(zt,(0,S.default)({ownerState:ct},gt)));if(Et&&typeof Et=="object"&&Array.isArray(Et.variants)){let{variants:zt=[]}=Et,Yt=(0,C.default)(Et,_e);return zt.forEach(Tr=>{let _r=!0;typeof Tr.props=="function"?_r=Tr.props((0,S.default)({ownerState:ct},gt,ct)):Object.keys(Tr.props).forEach(Zr=>{ct?.[Zr]!==Tr.props[Zr]&>[Zr]!==Tr.props[Zr]&&(_r=!1)}),_r&&(Array.isArray(Yt)||(Yt=[Yt]),Yt.push(typeof Tr.style=="function"?Tr.style((0,S.default)({ownerState:ct},gt,ct)):Tr.style))}),Yt}return Et}function st(De={}){let{themeId:Ze,defaultTheme:ct=lt,rootShouldForwardProp:gt=Te,slotShouldForwardProp:Et=Te}=De,zt=Yt=>(0,se.default)((0,S.default)({},Yt,{theme:tt((0,S.default)({},Yt,{defaultTheme:ct,themeId:Ze}))}));return zt.__mui_systemSx=!0,(Yt,Tr={})=>{(0,R.internal_processStyles)(Yt,jo=>jo.filter(cs=>!(cs!=null&&cs.__mui_systemSx)));let{name:_r,slot:Zr,skipVariantsResolver:at,skipSx:Bt,overridesResolver:pn=it(dt(Zr))}=Tr,Dt=(0,C.default)(Tr,Ie),Gt=at!==void 0?at:Zr&&Zr!=="Root"&&Zr!=="root"||!1,fr=Bt||!1,pr,nn=Te;Zr==="Root"||Zr==="root"?nn=gt:Zr?nn=Et:Le(Yt)&&(nn=void 0);let dn=(0,R.default)(Yt,(0,S.default)({shouldForwardProp:nn,label:pr},Dt)),_o=jo=>typeof jo=="function"&&jo.__emotion_real!==jo||(0,G.isPlainObject)(jo)?cs=>Ke(jo,(0,S.default)({},cs,{theme:tt({theme:cs.theme,defaultTheme:ct,themeId:Ze})})):jo,Kr=(jo,...cs)=>{let In=_o(jo),Co=cs?cs.map(_o):[];_r&&pn&&Co.push(nl=>{let ca=tt((0,S.default)({},nl,{defaultTheme:ct,themeId:Ze}));if(!ca.components||!ca.components[_r]||!ca.components[_r].styleOverrides)return null;let Gu=ca.components[_r].styleOverrides,Ju={};return Object.entries(Gu).forEach(([gf,Ld])=>{Ju[gf]=Ke(Ld,(0,S.default)({},nl,{theme:ca}))}),pn(nl,Ju)}),_r&&!Gt&&Co.push(nl=>{var ca;let Gu=tt((0,S.default)({},nl,{defaultTheme:ct,themeId:Ze})),Ju=Gu==null||(ca=Gu.components)==null||(ca=ca[_r])==null?void 0:ca.variants;return Ke({variants:Ju},(0,S.default)({},nl,{theme:Gu}))}),fr||Co.push(zt);let mi=Co.length-cs.length;if(Array.isArray(jo)&&mi>0){let nl=new Array(mi).fill("");In=[...jo,...nl],In.raw=[...jo.raw,...nl]}let p0=dn(In,...Co);return Yt.muiName&&(p0.muiName=Yt.muiName),p0};return dn.withConfig&&(Kr.withConfig=dn.withConfig),Kr}}}),Th=T(q()),s5=T(Z()),Rv=T(me()),Ah=T(ge()),Jl=T(Z());function Pu(h){h()}var Dv=Pu,yl=h=>Dv=h,zv=()=>Dv,bm=T(q()),Mh=T(q()),Nv=T(q()),fi=Symbol.for("react-redux-context"),l5=typeof globalThis<"u"?globalThis:{};function Rh(){var h;if(!Nv.createContext)return{};let w=(h=l5[fi])!=null?h:l5[fi]=new Map,S=w.get(Nv.createContext);return S||(S=Nv.createContext(null),w.set(Nv.createContext,S)),S}var np=Rh();function Yc(h=np){return function(){return(0,Mh.useContext)(h)}}var vb=Yc(),wm=()=>{throw new Error("uSES not initialized!")},Vt=wm,gb=h=>{Vt=h},Om=(h,w)=>h===w;function yb(h=np){let w=h===np?vb:Yc(h);return function(S,C={}){let{equalityFn:R=Om,stabilityCheck:G=void 0,noopCheck:te=void 0}=typeof C=="function"?{equalityFn:C}:C,{store:re,subscription:ue,getServerState:se,stabilityCheck:he,noopCheck:_e}=w(),Ie=(0,bm.useRef)(!0),Ce=(0,bm.useCallback)({[S.name](ze){let Le=S(ze);if(!1){if((v==="always"||v==="once"&&Ie.current)&&!R(Le,b))try{}catch(Te){}if((x==="always"||x==="once"&&Ie.current)&&Le===ze)try{}catch(Te){}}return Le}}[S.name],[S,he,G]),ke=Vt(ue.addNestedSub,re.getState,se||re.getState,Ce,R);return(0,bm.useDebugValue)(ke),ke}}var bb=yb();Pe();function Fo(h,w){if(h==null)return{};var S={},C=Object.keys(h),R,G;for(G=0;G=0)&&(S[R]=h[R]);return S}var A4=T(Je()),M4=T(q()),Xl=T(Ve());Pe();function wb(){let h=zv(),w=null,S=null;return{clear(){w=null,S=null},notify(){h(()=>{let C=w;for(;C;)C.callback(),C=C.next})},get(){let C=[],R=w;for(;R;)C.push(R),R=R.next;return C},subscribe(C){let R=!0,G=S={callback:C,next:null,prev:S};return G.prev?G.prev.next=G:w=G,function(){!R||w===null||(R=!1,G.next?G.next.prev=G.prev:S=G.prev,G.prev?G.prev.next=G.next:w=G.next)}}}}var xm={notify(){},get:()=>[]};function dd(h,w){let S,C=xm,R=0,G=!1;function te(ze){he();let Le=C.subscribe(ze),Te=!1;return()=>{Te||(Te=!0,Le(),_e())}}function re(){C.notify()}function ue(){ke.onStateChange&&ke.onStateChange()}function se(){return G}function he(){R++,S||(S=w?w.addNestedSub(ue):h.subscribe(ue),C=wb())}function _e(){R--,S&&R===0&&(S(),S=void 0,C.clear(),C=xm)}function Ie(){G||(G=!0,he())}function Ce(){G&&(G=!1,_e())}let ke={addNestedSub:te,notifyNestedSubs:re,handleChangeWrapper:ue,isSubscribed:se,trySubscribe:Ie,tryUnsubscribe:Ce,getListeners:()=>C};return ke}var _m=T(q()),Lv=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",hd=Lv?_m.useLayoutEffect:_m.useEffect,Fv=wm,Sm=h=>{Fv=h},Bv=T(q());function u5({store:h,context:w,children:S,serverState:C,stabilityCheck:R="once",noopCheck:G="once"}){let te=Bv.useMemo(()=>{let ue=dd(h);return{store:h,subscription:ue,getServerState:C?()=>C:void 0,stabilityCheck:R,noopCheck:G}},[h,C,R,G]),re=Bv.useMemo(()=>h.getState(),[h]);return hd(()=>{let{subscription:ue}=te;return ue.onStateChange=ue.notifyNestedSubs,ue.trySubscribe(),re!==h.getState()&&ue.notifyNestedSubs(),()=>{ue.tryUnsubscribe(),ue.onStateChange=void 0}},[te,re]),Bv.createElement((w||np).Provider,{value:te},S)}var Em=u5;function Kl(h=np){let w=h===np?vb:Yc(h);return function(){let{store:S}=w();return S}}var Dh=Kl();function Im(h=np){let w=h===np?Dh:Kl(h);return function(){return w().dispatch}}var Xs=Im();gb(Ah.useSyncExternalStoreWithSelector),Sm(Rv.useSyncExternalStore),yl(Jl.unstable_batchedUpdates);var Qc=()=>Xs(),Gi=bb;function aa(h){for(var w=arguments.length,S=Array(w>1?w-1:0),C=1;C3?w.i-4:w.i:Array.isArray(h)?1:vd(h)?2:xb(h)?3:0}function op(h,w){return md(h)===2?h.has(w):Object.prototype.hasOwnProperty.call(h,w)}function Ob(h,w){return md(h)===2?h.get(w):h[w]}function c5(h,w,S){var C=md(h);C===2?h.set(w,S):C===3?h.add(S):h[w]=S}function Wv(h,w){return h===w?h!==0||1/h==1/w:h!=h&&w!=w}function vd(h){return p5&&h instanceof Map}function xb(h){return bd&&h instanceof Set}function Ql(h){return h.o||h.t}function zh(h){if(Array.isArray(h))return Array.prototype.slice.call(h);var w=Ht(h);delete w[Ro];for(var S=gc(w),C=0;C1&&(h.set=h.add=h.clear=h.delete=f5),Object.freeze(h),w&&ef(h,function(S,C){return _b(C,!0)},!0)),h}function f5(){aa(2)}function Sb(h){return h==null||typeof h!="object"||Object.isFrozen(h)}function Fa(h){var w=wd[h];return w||aa(18,h),w}function Hv(h,w){wd[h]||(wd[h]=w)}function km(){return Tm}function $v(h,w){w&&(Fa("Patches"),h.u=[],h.s=[],h.v=w)}function gd(h){Vv(h),h.p.forEach(Pm),h.p=null}function Vv(h){h===Tm&&(Tm=h.l)}function qv(h){return Tm={p:[],l:Tm,h,m:!0,_:0}}function Pm(h){var w=h[Ro];w.i===0||w.i===1?w.j():w.g=!0}function bl(h,w){w._=w.p.length;var S=w.p[0],C=h!==void 0&&h!==S;return w.h.O||Fa("ES5").S(w,h,C),C?(S[Ro].P&&(gd(w),aa(4)),Yl(h)&&(h=tf(w,h),w.l||mc(w,h)),w.u&&Fa("Patches").M(S[Ro].t,h,w.u,w.s)):h=tf(w,S,[]),gd(w),w.u&&w.v(w.u,w.s),h!==rf?h:void 0}function tf(h,w,S){if(Sb(w))return w;var C=w[Ro];if(!C)return ef(w,function(re,ue){return ju(h,C,w,re,ue,S)},!0),w;if(C.A!==h)return w;if(!C.P)return mc(h,C.t,!0),C.t;if(!C.I){C.I=!0,C.A._--;var R=C.i===4||C.i===5?C.o=zh(C.k):C.o,G=R,te=!1;C.i===3&&(G=new Set(R),R.clear(),te=!0),ef(G,function(re,ue){return ju(h,C,R,re,ue,S,te)}),mc(h,R,!1),S&&h.u&&Fa("Patches").N(C,S,h.u,h.s)}return C.o}function ju(h,w,S,C,R,G,te){if(Zc(R)){var re=tf(h,R,G&&w&&w.i!==3&&!op(w.R,C)?G.concat(C):void 0);if(c5(S,C,re),!Zc(re))return;h.m=!1}else te&&S.add(R);if(Yl(R)&&!Sb(R)){if(!h.h.D&&h._<1)return;tf(h,R),w&&w.A.l||mc(h,R)}}function mc(h,w,S){S===void 0&&(S=!1),!h.l&&h.h.D&&h.m&&_b(w,S)}function ip(h,w){var S=h[Ro];return(S?Ql(S):h)[w]}function jm(h,w){if(w in h)for(var S=Object.getPrototypeOf(h);S;){var C=Object.getOwnPropertyDescriptor(S,w);if(C)return C;S=Object.getPrototypeOf(S)}}function vc(h){h.P||(h.P=!0,h.l&&vc(h.l))}function Nh(h){h.o||(h.o=zh(h.t))}function Uv(h,w,S){var C=vd(w)?Fa("MapSet").F(w,S):xb(w)?Fa("MapSet").T(w,S):h.O?function(R,G){var te=Array.isArray(R),re={i:te?1:0,A:G?G.A:km(),P:!1,I:!1,R:{},l:G,t:R,k:null,o:null,j:null,C:!1},ue=re,se=sp;te&&(ue=[re],se=Cu);var he=Proxy.revocable(ue,se),_e=he.revoke,Ie=he.proxy;return re.k=Ie,re.j=_e,Ie}(w,S):Fa("ES5").J(w,S);return(S?S.A:km()).p.push(C),C}function yd(h){return Zc(h)||aa(22,h),function w(S){if(!Yl(S))return S;var C,R=S[Ro],G=md(S);if(R){if(!R.P&&(R.i<4||!Fa("ES5").K(R)))return R.t;R.I=!0,C=ap(S,G),R.I=!1}else C=ap(S,G);return ef(C,function(te,re){R&&Ob(R.t,te)===re||c5(C,te,w(re))}),G===3?new Set(C):C}(h)}function ap(h,w){switch(w){case 2:return new Map(h);case 3:return Array.from(h)}return zh(h)}function Zl(){function h(te,re){var ue=G[te];return ue?ue.enumerable=re:G[te]=ue={configurable:!0,enumerable:re,get:function(){var se=this[Ro];return sp.get(se,te)},set:function(se){var he=this[Ro];sp.set(he,te,se)}},ue}function w(te){for(var re=te.length-1;re>=0;re--){var ue=te[re][Ro];if(!ue.P)switch(ue.i){case 5:C(ue)&&vc(ue);break;case 4:S(ue)&&vc(ue)}}}function S(te){for(var re=te.t,ue=te.k,se=gc(ue),he=se.length-1;he>=0;he--){var _e=se[he];if(_e!==Ro){var Ie=re[_e];if(Ie===void 0&&!op(re,_e))return!0;var Ce=ue[_e],ke=Ce&&Ce[Ro];if(ke?ke.t!==Ie:!Wv(Ce,Ie))return!0}}var ze=!!re[Ro];return se.length!==gc(re).length+(ze?0:1)}function C(te){var re=te.k;if(re.length!==te.t.length)return!0;var ue=Object.getOwnPropertyDescriptor(re,re.length-1);if(ue&&!ue.get)return!0;for(var se=0;se1?Te-1:0),dt=1;dt1?he-1:0),Ie=1;Ie=0;R--){var G=C[R];if(G.path.length===0&&G.op==="replace"){S=G.value;break}}R>-1&&(C=C.slice(R+1));var te=Fa("Patches").$;return Zc(S)?te(S,C):this.produce(S,function(re){return te(re,C)})},h}(),pi=new no,Gv=pi.produce,nf=pi.produceWithPatches.bind(pi),yc=pi.setAutoFreeze.bind(pi),D4=pi.setUseProxies.bind(pi),Od=pi.applyPatches.bind(pi),of=pi.createDraft.bind(pi),Jv=pi.finishDraft.bind(pi),Tu=Gv;function Am(h){"@babel/helpers - typeof";return Am=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(w){return typeof w}:function(w){return w&&typeof Symbol=="function"&&w.constructor===Symbol&&w!==Symbol.prototype?"symbol":typeof w},Am(h)}function h5(h,w){if(Am(h)!="object"||!h)return h;var S=h[Symbol.toPrimitive];if(S!==void 0){var C=S.call(h,w||"default");if(Am(C)!="object")return C;throw new TypeError("@@toPrimitive must return a primitive value.")}return(w==="string"?String:Number)(h)}function z4(h){var w=h5(h,"string");return Am(w)=="symbol"?w:String(w)}function di(h,w,S){return w=z4(w),w in h?Object.defineProperty(h,w,{value:S,enumerable:!0,configurable:!0,writable:!0}):h[w]=S,h}function Fh(h,w){var S=Object.keys(h);if(Object.getOwnPropertySymbols){var C=Object.getOwnPropertySymbols(h);w&&(C=C.filter(function(R){return Object.getOwnPropertyDescriptor(h,R).enumerable})),S.push.apply(S,C)}return S}function m5(h){for(var w=1;w"u"&&(S=w,w=void 0),typeof S<"u"){if(typeof S!="function")throw new Error(Ji(1));return S(Ib)(h,w)}if(typeof h!="function")throw new Error(Ji(2));var R=h,G=w,te=[],re=te,ue=!1;function se(){re===te&&(re=te.slice())}function he(){if(ue)throw new Error(Ji(3));return G}function _e(ze){if(typeof ze!="function")throw new Error(Ji(4));if(ue)throw new Error(Ji(5));var Le=!0;return se(),re.push(ze),function(){if(Le){if(ue)throw new Error(Ji(6));Le=!1,se();var Te=re.indexOf(ze);re.splice(Te,1),te=null}}}function Ie(ze){if(!v5(ze))throw new Error(Ji(7));if(typeof ze.type>"u")throw new Error(Ji(8));if(ue)throw new Error(Ji(9));try{ue=!0,G=R(G,ze)}finally{ue=!1}for(var Le=te=re,Te=0;Te"u")throw new Error(Ji(12));if(typeof S(void 0,{type:eu.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Ji(13))})}function g5(h){for(var w=Object.keys(h),S={},C=0;C"u"){var lt=se&&se.type;throw new Error(Ji(14))}Ie[ke]=Te,_e=_e||Te!==Le}return _e=_e||G.length!==Object.keys(ue).length,_e?Ie:ue}}function Xv(){for(var h=arguments.length,w=new Array(h),S=0;S0&&G[G.length-1])&&(se[0]===6||se[0]===2)){S=0;continue}if(se[0]===3&&(!G||se[1]>G[0]&&se[1]1){var S=h.shift();h[0]=S+h[0]}h[0].match(/^file:\/\/\//)?h[0]=h[0].replace(/^([^/:]+):\/*/,"$1:///"):h[0]=h[0].replace(/^([^/:]+):\/*/,"$1://");for(var C=0;C0&&(R=R.replace(/^[\/]+/,"")),C0?"?":"")+te.join("&"),G}function $4(){var h;return typeof arguments[0]=="object"?h=arguments[0]:h=[].slice.call(arguments),Qv(h)}var Wh={stats:void 0,bannerText:""},ou=Ks("home_stats",async(h,{rejectWithValue:w})=>{try{return await Sd("api/v2/stats")}catch(S){return w(S.message)}}),Hh=Ks("home_banner",async(h,{rejectWithValue:w})=>{try{return(await fetch($4("/","banner.txt"))).text()}catch(S){return w(S.message)}}),_5=xt({name:"home",initialState:Wh,reducers:{},extraReducers:h=>{h.addCase(ou.fulfilled,(w,S)=>{w.stats=S.payload}),h.addCase(ou.rejected,w=>{w.stats=Wh.stats}),h.addCase(Hh.fulfilled,(w,S)=>{w.bannerText=S.payload}),h.addCase(Hh.rejected,w=>{w.bannerText=Wh.bannerText})}}),u7=_5.reducer,V4=T(q()),hi=class ehe{constructor(w,S){this.value=w,this.axioms=S}static fromJson(w){return w?(Array.isArray(w)||(w=[w]),w.map(S=>typeof S=="object"&&Array.isArray(S.type)&&S.type.indexOf("reification")!==-1?new ehe(S.value,S.axioms):new ehe(S,null))):[]}hasMetadata(){return this.axioms!=null}getMetadata(){if(!this.axioms)return null;let w={};for(let S of this.axioms)for(let C of Object.keys(S)){let R=S[C],G=w[C];G!==void 0?G.push(R):w[C]=[R]}return w}},Tb=class the{constructor(w){w?this.linkedEntities={...w}:this.linkedEntities={}}mergeWith(w){return w?new the({...this.linkedEntities,linkedEntities:w}):new the({...this.linkedEntities})}getLabelForIri(w){let S=this.linkedEntities[w];if(S){let C=hi.fromJson(S.label);if(C&&C.length>0)return C[0].value}}get(w){return this.linkedEntities[w]}},Du=class{constructor(h){this.properties=h}getId(){return this.properties.id}getIri(){return this.properties.iri}getType(){let h=this.properties.type;for(let w of h)if(["ontology","class","property","individual"].indexOf(w)!==-1)return w;throw new Error("unknown type")}getTypePlural(){switch(this.getType()){case"ontology":return"ontologies";case"class":return"classes";case"property":return"properties";case"individual":return"individuals";default:throw new Error("unknown type")}}getRdfTypes(){return Bo(this.properties["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"])}getName(){return this.getNames()[0]}getNames(){let h=hi.fromJson(this.properties.label);return h&&h.length>0?h.map(w=>w.value):[this.getIri()]}getDescription(){let h=hi.fromJson(this.properties.definition);return h&&h.length>0?h.map(w=>w.value||"").join(" "):""}getOntologyId(){return this.properties.ontologyId}getLabelForIri(h){let w=this.properties.linkedEntities;return w&&hi.fromJson(w[h]?.label)[0]?.value||h}getAnnotationById(h){return hi.fromJson(Bo(this.properties[h]))}getLinkedEntities(){return new Tb(this.properties.linkedEntities||{})}},$h=class extends Du{isCanonical(){return this.properties.isDefiningOntology===!0}isDeprecated(){return this.properties["http://www.w3.org/2002/07/owl#deprecated"]==="true"}getDeprecationVersion(){return this.properties["http://www.ebi.ac.uk/efo/obsoleted_in_version"]}getDeprecationReason(){return hi.fromJson(this.properties["http://purl.obolibrary.org/obo/IAO_0000231"]).concat(hi.fromJson(this.properties["http://www.ebi.ac.uk/efo/reason_for_obsolescence"]))}getDeprecationReplacement(){return this.properties["http://purl.obolibrary.org/obo/IAO_0100001"]}getRelatedFrom(){return hi.fromJson(this.properties.relatedFrom)}getDescriptionAsArray(){return hi.fromJson(this.properties.definition)}hasDirectChildren(){return this.properties.hasDirectChildren==="true"}hasHierarchicalChildren(){return this.properties.hasHierarchicalChildren==="true"}hasChildren(){return this.hasDirectChildren()||this.hasHierarchicalChildren()}getAncestorIris(){return Bo(this.properties.ancestor)}getHierarchicalAncestorIris(){return Bo(this.properties.hierarchicalAncestor)}getSynonyms(){return hi.fromJson(this.properties.synonym)}getAppearsIn(){return this.properties.appearsIn||[]}getDefinedBy(){return this.properties.definedBy||[]}getShortForm(){return this.properties.curie||this.properties.shortForm}getDepictedBy(){return hi.fromJson(this.properties["http://xmlns.com/foaf/0.1/depicted_by"])}getAnnotationPredicates(){let h=Bo(this.properties.definitionProperty),w=Bo(this.properties.synonymProperty),S=Bo(this.properties.hierarchicalProperty),C=new Set;for(let R of Object.keys(this.properties)){if(R.indexOf("://")===-1||R.startsWith("negativePropertyAssertion+")||R==="http://xmlns.com/foaf/0.1/depicted_by")continue;let G=this.getLinkedEntities().get(R);G!=null&&G.type.indexOf("objectProperty")!==-1||G!=null&&G.type.indexOf("dataProperty")!==-1||h.indexOf(R)!==-1||w.indexOf(R)!==-1||S.indexOf(R)!==-1||(R.startsWith("http://www.w3.org/2000/01/rdf-schema#")||R.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||R.startsWith("http://www.w3.org/2002/07/owl#"))&&R!=="http://www.w3.org/2000/01/rdf-schema#comment"&&R!=="http://www.w3.org/2000/01/rdf-schema#seeAlso"&&R!=="http://www.w3.org/2002/07/owl#disjointUnionOf"||R!=="http://www.geneontology.org/formats/oboInOwl#id"&&C.add(R)}return Array.from(C)}getNumHierarchicalDescendants(){return this.properties.numHierarchicalDescendants?parseInt(this.properties.numHierarchicalDescendants):0}getNumDescendants(){return this.properties.numDescendants?parseInt(this.properties.numDescendants):0}getHierarchicalParentReificationAxioms(h){let w=hi.fromJson(this.properties.hierarchicalParent);for(let S of w)if(S.value===h)return S.getMetadata()}},c7=class extends $h{getParents(){return hi.fromJson(this.properties.hierarchicalParent)}getSuperEntities(){return hi.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subClassOf"])}getEquivalents(){return hi.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentClass"])}getDisjointWith(){return Bo(this.properties["http://www.w3.org/2002/07/owl#disjointWith"])}getHasKey(){return Bo(this.properties["http://www.w3.org/2002/07/owl#hasKey"])}},S5=class extends $h{getParents(){return hi.fromJson(this.properties.directParent)}getEquivalents(){return[]}getSuperEntities(){return hi.fromJson([])}getDifferentFrom(){return Bo(this.properties["http://www.w3.org/2002/07/owl#differentFrom"])}getSameAs(){return Bo(this.properties["http://www.w3.org/2002/07/owl#sameAs"])}getIndividualTypes(){let h=this.getRdfTypes();return!h||!Array.isArray(h)?[]:h.filter(w=>w!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&(typeof w!="string"||!w.startsWith("http://www.w3.org/2000/01/rdf-schema#")))}},ns=class extends $h{getParents(){return hi.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getSuperEntities(){return hi.fromJson(this.properties["http://www.w3.org/2000/01/rdf-schema#subPropertyOf"])}getEquivalents(){return hi.fromJson(this.properties["http://www.w3.org/2002/07/owl#equivalentProperty"])}getDisjointWith(){return Bo(this.properties["http://www.w3.org/2002/07/owl#propertyDisjointWith"])}getInverseOf(){return Bo(this.properties["http://www.w3.org/2002/07/owl#inverseOf"])}getDomain(){return Bo(this.properties["http://www.w3.org/2000/01/rdf-schema#domain"])}getRange(){return Bo(this.properties["http://www.w3.org/2000/01/rdf-schema#range"])}getPropertyChains(){return hi.fromJson(this.properties["http://www.w3.org/2002/07/owl#propertyChainAxiom"])}};function Bo(h){return Array.isArray(h)?h:h?[h]:[]}function cp(){return(Math.random()*Math.pow(2,54)).toString(36)}function iu(h){let w=h.type||[];if(w.indexOf("class")!==-1)return new c7(h);if(w.indexOf("property")!==-1)return new ns(h);if(w.indexOf("individual")!==-1)return new S5(h);throw new Error("Unknown entity type: "+JSON.stringify(h))}function Zv(h){let w=new URLSearchParams;return h.forEach((S,C)=>{let R=C.includes("_")?q4(C):C;R==="oboId"&&(R="curie"),w.append(R,S)}),w}function q4(h){return h.replace(/([-_][a-z])/gi,w=>w.toUpperCase().replace("-","").replace("_",""))}var E5=class extends Du{getOntologyId(){return this.properties.ontologyId}getName(){let h=hi.fromJson(this.properties.label||this.properties.title||"");return h[0]&&h[0].value||this.getOntologyId()}getDescription(){let h=hi.fromJson(this.properties.definition||this.properties.description||"");return h[0]&&h[0].value||""}getSourceFileTimestamp(){return this.properties.sourceFileTimestamp}getNumEntities(){return parseInt(this.properties.numberOfEntities)}getNumClasses(){return parseInt(this.properties.numberOfClasses)}getNumProperties(){return parseInt(this.properties.numberOfProperties)}getNumIndividuals(){return parseInt(this.properties.numberOfIndividuals)}getLogoURL(){return this.properties.depicted_by||void 0}getOntologyPurl(){return this.properties.ontology_purl}getHomepage(){return this.properties.homepage}getMailingList(){return this.properties.mailing_list}getTracker(){return this.properties.tracker}getVersionIri(){return this.properties["http://www.w3.org/2002/07/owl#versionIRI"]}getVersion(){return this.properties["http://www.w3.org/2002/07/owl#versionInfo"]}getVersionFromIri(){let h=this.properties["http://www.w3.org/2002/07/owl#versionIRI"];if(!h)return"";let w=h.match(/\d{4}-\d{2}-\d{2}/);if(w&&w.length>0)return w[0];{let S=h.match(/\/v[d.].*\//);return S?S[0].replaceAll("/","").replace("v",""):""}}getLoaded(){return this.properties.loaded}getAnnotationPredicates(){let h=new Set;for(let w of Object.keys(this.properties))w.indexOf("://")!==-1&&w!=="http://purl.obolibrary.org/obo/IAO_0000700"&&(w.startsWith("http://www.w3.org/2000/01/rdf-schema#")||w.startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#")||w.startsWith("http://www.w3.org/2002/07/owl#")||h.add(w));return Array.from(h)}getPreferredRoots(){return Bo(this.properties.hasPreferredRoot)}getLanguages(){return Bo(this.properties.language)}getImportsFrom(){return Bo(this.properties.importsFrom)}getExportsTo(){return Bo(this.properties.exportsTo)}},Ab=T(Ue());function Vh(h){let w=new Ab.default,S=new Map;for(let re of h)S.set(re.getIri(),re);for(let re of h)if(!Mb(re.getIri()))for(let ue of re.getParents()){let se=ue.value,he=S.get(se);if(Mb(se)||!(he instanceof $h))continue;var C,R;re.getType()==="individual"?(R="http://www.w3.org/1999/02/22-rdf-syntax-ns#type",C=null):re.getType()=="class"&&(C=ue.getMetadata()&&ue.getMetadata().parentRelationToChild&&ue.getMetadata().parentRelationToChild[0],R=ue.getMetadata()&&ue.getMetadata().childRelationToParent&&ue.getMetadata().childRelationToParent[0]);let _e={parent:he,child:re,parentRelationToChild:C,childRelationToParent:R};w.set(re.getIri(),_e)}var G=function(re,ue){ue.add(re);let se=w.get(re);if(se)for(let he of se)ue.has(he.parent.getIri())?w.delete(re,he):G(he.parent.getIri(),new Set(ue))};for(let re of h)G(re.getIri(),new Set);let te=new Ab.default;for(let re of Array.from(w.keys())){let ue=w.get(re);for(let se of ue)te.set(se.parent.getIri(),se)}return{rootEntities:h.filter(re=>Mb(re.getIri())?!1:(w.get(re.getIri())||[]).length===0),parentToChildRelations:te}}function Mb(h){return h==="http://www.w3.org/2002/07/owl#Thing"||h==="http://www.w3.org/2002/07/owl#TopObjectProperty"}function lf(h,w,S){let{rootEntities:C,parentToChildRelations:R}=Vh(h);if(console.log("rootEntities"),console.dir(C),console.log("parentToChildRelations"),console.dir(R),w){let se=S.getPreferredRoots();se.length>0&&(C=se.map(he=>h.filter(_e=>_e.getIri()===he)[0]).filter(he=>!!he))}let G=[],te={},re=new Set;return{allNodes:G,rootNodes:C.map(se=>ue(se,void 0,0,null,null)),nodeChildren:te,automaticallyExpandedNodes:re};function ue(se,he,_e,Ie,Ce){if(_e>100)throw new Error("probable cyclic tree (createTreeNode)");let ke=R.get(se.getIri())||[],ze={absoluteIdentity:he?he.absoluteIdentity+";"+se.getIri():se.getIri(),iri:se.getIri(),title:se.getName(),expandable:se.hasChildren(),entity:se,numDescendants:se.getNumHierarchicalDescendants()||se.getNumDescendants(),parentRelationToChild:Ie,childRelationToParent:Ce};return G.push(ze),te[ze.absoluteIdentity]=ke.map(Le=>ue(Le.child,ze,_e+1,Le.parentRelationToChild,Le.childRelationToParent)),se.hasChildren()&&ke.length>0&&re.add(ze.absoluteIdentity),ze}}var Ba={ontology:void 0,entity:void 0,nodesWithChildrenLoaded:[],nodeChildren:{},rootNodes:[],ontologies:[],totalOntologies:0,entities:[],totalEntities:0,loadingOntologies:!1,loadingEntities:!1,numPendingTreeRequests:0,loadingOntology:!1,loadingEntity:!1,classInstances:null,loadingClassInstances:!1,automaticallyExpandedNodes:[],manuallyExpandedNodes:[],preferredRoots:!1,displayObsolete:!1,displaySiblings:!1,displayCounts:!0,errorMessage:""},eg=Xi("ontologies_tree_reset_content"),Fm=Xi("ontologies_tree_reset_settings"),Bm=Xi("ontologies_preferred_enabled"),f7=Xi("ontologies_preferred_disabled"),Wm=Xi("ontologies_node_open"),Hm=Xi("ontologies_node_close"),U4=Xi("ontologies_show_obsolete"),Wa=Xi("ontologies_hide_obsolete"),I5=Xi("ontologies_show_siblings"),Rb=Xi("ontologies_hide_siblings"),Db=Xi("ontologies_show_counts"),k5=Xi("ontologies_hide_counts"),P5=Ks("ontologies_ontology",async({ontologyId:h,lang:w,apiUrl:S},{rejectWithValue:C})=>{let R=`api/v2/ontologies/${h}`;try{let G=await Sd(R,{lang:w},S);return new E5(G)}catch(G){return C(`Error accessing: ${R}; ${G.message}`)}}),tg=Ks("ontologies_entity_type",async({ontologyId:h,entityType:w,entityIri:S,searchParams:C},{rejectWithValue:R})=>{let G=Zv(C),te=encodeURIComponent(encodeURIComponent(S)),re="";try{let ue=null;if(S)re=`api/v2/ontologies/${h}/${w}/${te}?${new URLSearchParams(G)}`,ue=await Sd(re);else{re=`api/v2/ontologies/${h}/${w}?${new URLSearchParams(G)}`;let se=await Xo(re);if(se.elements.length===1&&se.totalElements===1)ue=se.elements[0];else return R(`Error accessing: ${re}; Retrieved nondistinct entity: ${JSON.stringify(se)}`)}return iu(ue)}catch(ue){return R(`Error accessing: ${re}; ${ue.message}`)}}),qh=Ks("ontologies_entity",async({ontologyId:h,entityIri:w},{rejectWithValue:S})=>{let C=encodeURIComponent(encodeURIComponent(w)),R="";try{R=`api/v2/ontologies/${h}/entities/${C}`;let G=await Sd(R);return iu(G)}catch(G){return S(`Error accessing: ${R}; ${G.message}`)}}),rg=Ks("ontologies_entity_class_instances",async({ontologyId:h,classIri:w,searchParams:S},{rejectWithValue:C})=>{let R="";try{if(w){let G=Zv(S),te=encodeURIComponent(encodeURIComponent(w));return R=`api/v2/ontologies/${h}/classes/${te}/instances?${new URLSearchParams(G)}`,(await Xo(R)).map(re=>iu(re))}else return C(`Warning accessing: ${R}; Class IRI not provided`)}catch(G){return C(`Error accessing: ${R}; ${G.message}`)}}),$m=Ks("ontologies_ontologies",async({page:h,rowsPerPage:w,search:S},{rejectWithValue:C})=>{S.length>1&&!S.includes(" ")&&(S="*"+S+"*");let R=`api/v2/ontologies?page=${h}&size=${w}${S?"&search="+S:""}`;try{return(await Xo(R)).map(G=>new E5(G))}catch(G){return C(`Error accessing: ${R}; ${G.message}`)}}),ng=Ks("ontologies_entities",async({ontologyId:h,entityType:w,page:S,rowsPerPage:C,search:R},{rejectWithValue:G})=>{let te=`api/v2/ontologies/${h}/${w}?page=${S}&size=${C}${R?"&search="+R:""}`;try{return(await Xo(te)).map(re=>iu(re))}catch(re){return G(`Error accessing: ${te}; ${re.message}`)}}),j5=Ks("ontologies_ancestors",async({ontologyId:h,entityType:w,entityIri:S,lang:C,showObsoleteEnabled:R,apiUrl:G})=>{let te=encodeURIComponent(encodeURIComponent(S));var re;return w==="classes"?re=await Xo(`api/v2/ontologies/${h}/classes/${te}/hierarchicalAncestors?${new URLSearchParams({size:"1000",lang:C,includeObsoleteEntities:R})}`,void 0,G):re=await Xo(`api/v2/ontologies/${h}/${w}/${te}/ancestors?${new URLSearchParams({size:"1000",lang:C,includeObsoleteEntities:R})}`,void 0,G),re.elements.map(ue=>iu(ue))}),og=Ks("ontologies_roots",async({ontologyId:h,entityType:w,preferredRoots:S,lang:C,showObsoleteEnabled:R,apiUrl:G})=>{if(w==="individuals"){let[te,re]=await Promise.all([Xo(`api/v2/ontologies/${h}/classes?${new URLSearchParams({hasIndividuals:"true",size:"1000",lang:C,includeObsoleteEntities:R})}`,void 0,G),Xo(`api/v2/ontologies/${h}/individuals?${new URLSearchParams({hasDirectParent:"false",size:"1000",lang:C,includeObsoleteEntities:R})}`,void 0,G)]);return{entityType:w,rootTerms:null,classesWithIndividuals:te.elements.map(ue=>iu(ue)),orphanedIndividuals:re.elements.map(ue=>iu(ue))}}else if(w==="classes"&&S){let te=await Xo(`api/v2/ontologies/${h}/${w}?${new URLSearchParams({isPreferredRoot:"true",size:"1000",lang:C,includeObsoleteEntities:R})}`,void 0,G);return{entityType:w,rootTerms:te.elements.map(re=>iu(re)),classesWithIndividuals:null,orphanedIndividuals:null}}else{let te=await Xo(`api/v2/ontologies/${h}/${w}?${new URLSearchParams({hasDirectParent:"false",size:"1000",lang:C,includeObsoleteEntities:R})}`,void 0,G);return{entityType:w,rootTerms:te.elements.map(re=>iu(re)),classesWithIndividuals:null,orphanedIndividuals:null}}}),ig=Ks("ontologies_node_children",async({ontologyId:h,entityTypePlural:w,entityIri:S,absoluteIdentity:C,lang:R,apiUrl:G,includeObsoleteEntities:te})=>{let re=encodeURIComponent(encodeURIComponent(S));var ue;return w==="classes"?ue=await Xo(`api/v2/ontologies/${h}/classes/${re}/hierarchicalChildren?${new URLSearchParams({size:"1000",lang:R,includeObsoleteEntities:te})}`,void 0,G):w==="individuals"?ue=await Xo(`api/v2/ontologies/${h}/classes/${re}/instances?${new URLSearchParams({size:"1000",lang:R,includeObsoleteEntities:te})}`,void 0,G):ue=await Xo(`api/v2/ontologies/${h}/${w}/${re}/children?${new URLSearchParams({size:"1000",lang:R,includeObsoleteEntities:te})}`,void 0,G),{absoluteIdentity:C,children:ue.elements.map(se=>iu(se)).map(se=>{let he=se.getHierarchicalParentReificationAxioms(S);return{iri:se.getIri(),absoluteIdentity:C+";"+se.getIri(),title:se.getName(),expandable:se.hasChildren(),entity:se,numDescendants:se.getNumHierarchicalDescendants()||se.getNumDescendants(),parentRelationToChild:he&&he.parentRelationToChild?.[0]||null,childRelationToParent:he&&he.childRelationToParent?.[0]||null}})}}),G4=xt({name:"ontologies",initialState:Ba,reducers:{},extraReducers:h=>{h.addCase(P5.fulfilled,(w,S)=>{w.ontology=S.payload,w.loadingOntology=!1}),h.addCase(P5.pending,w=>{w.loadingOntology=!0,w.errorMessage=Ba.errorMessage}),h.addCase(P5.rejected,(w,S)=>{w.ontology=Ba.ontology,w.loadingOntology=!1,w.errorMessage=S.payload}),h.addCase(tg.fulfilled,(w,S)=>{w.entity=S.payload,w.loadingEntity=!1}),h.addCase(tg.pending,w=>{w.loadingEntity=!0,w.errorMessage=Ba.errorMessage}),h.addCase(tg.rejected,(w,S)=>{w.loadingEntity=!1,w.entity=Ba.entity,w.errorMessage=S.payload}),h.addCase(qh.fulfilled,(w,S)=>{w.entity=S.payload,w.loadingEntity=!1}),h.addCase(qh.pending,w=>{w.loadingEntity=!0,w.errorMessage=Ba.errorMessage}),h.addCase(qh.rejected,(w,S)=>{w.loadingEntity=!1,w.entity=Ba.entity,w.errorMessage=S.payload}),h.addCase(rg.fulfilled,(w,S)=>{w.classInstances=S.payload,w.loadingClassInstances=!1}),h.addCase(rg.pending,w=>{w.loadingClassInstances=!0,w.errorMessage=Ba.errorMessage}),h.addCase(rg.rejected,(w,S)=>{w.loadingClassInstances=!1,w.classInstances=Ba.classInstances,w.errorMessage=S.payload}),h.addCase(j5.pending,w=>{++w.numPendingTreeRequests}),h.addCase(j5.fulfilled,(w,S)=>{let{rootNodes:C,nodeChildren:R,automaticallyExpandedNodes:G}=lf([w.entity,...S.payload],w.preferredRoots,w.ontology);w.rootNodes=C,w.nodeChildren=R,w.automaticallyExpandedNodes=Array.from(new Set([...w.automaticallyExpandedNodes,...Array.from(G)])),--w.numPendingTreeRequests}),h.addCase(j5.rejected,w=>{--w.numPendingTreeRequests}),h.addCase(ig.pending,w=>{++w.numPendingTreeRequests}),h.addCase(ig.fulfilled,(w,S)=>{w.nodeChildren={...w.nodeChildren,[S.payload.absoluteIdentity]:S.payload.children},w.nodesWithChildrenLoaded.push(S.payload.absoluteIdentity),--w.numPendingTreeRequests}),h.addCase(ig.rejected,w=>{--w.numPendingTreeRequests}),h.addCase(og.pending,w=>{++w.numPendingTreeRequests}),h.addCase(og.fulfilled,(w,S)=>{let{rootTerms:C,classesWithIndividuals:R,orphanedIndividuals:G}=S.payload,{rootNodes:te,nodeChildren:re,automaticallyExpandedNodes:ue}=lf([...C||[],...R||[],...G||[]],w.preferredRoots,w.ontology);w.rootNodes=te,w.nodeChildren=re,w.automaticallyExpandedNodes=Array.from(new Set([...w.automaticallyExpandedNodes,...Array.from(ue)])),--w.numPendingTreeRequests}),h.addCase(og.rejected,w=>{--w.numPendingTreeRequests}),h.addCase($m.fulfilled,(w,S)=>{w.ontologies=S.payload.elements,w.totalOntologies=S.payload.totalElements,w.loadingOntologies=!1}),h.addCase($m.pending,w=>{w.loadingOntologies=!0,w.errorMessage=Ba.errorMessage}),h.addCase($m.rejected,(w,S)=>{w.ontologies=Ba.ontologies,w.loadingOntologies=!1,w.errorMessage=S.payload}),h.addCase(ng.fulfilled,(w,S)=>{w.entities=S.payload.elements,w.totalEntities=S.payload.totalElements,w.loadingEntities=!1}),h.addCase(ng.pending,w=>{w.loadingEntities=!0,w.errorMessage=Ba.errorMessage}),h.addCase(ng.rejected,(w,S)=>{w.entities=Ba.entities,w.loadingEntities=!1,w.errorMessage=S.payload}),h.addCase(eg,w=>{w.nodesWithChildrenLoaded=[],w.nodeChildren={},w.rootNodes=[],w.automaticallyExpandedNodes=[]}),h.addCase(Fm,(w,S)=>{if(w.preferredRoots=S.payload.entityType==="classes"&&w.ontology.getPreferredRoots().length>0,S.payload.selectedEntity){let C=!1;for(let R of w.ontology.getPreferredRoots())if(S.payload.selectedEntity.getHierarchicalAncestorIris().indexOf(R)!==-1){C=!0;break}C||(w.preferredRoots=!1)}w.displayObsolete=!1,w.displaySiblings=!1,w.displayCounts=!0,w.manuallyExpandedNodes=[]}),h.addCase(Bm,w=>{w.preferredRoots=!0}),h.addCase(f7,w=>{w.preferredRoots=!1}),h.addCase(U4,w=>{w.displayObsolete=!0}),h.addCase(Wa,w=>{w.displayObsolete=!1}),h.addCase(I5,w=>{w.displaySiblings=!0}),h.addCase(Rb,w=>{w.displaySiblings=!1}),h.addCase(Db,w=>{w.displayCounts=!0}),h.addCase(k5,w=>{w.displayCounts=!1}),h.addCase(Wm,(w,S)=>{w.manuallyExpandedNodes=Array.from(new Set([...w.manuallyExpandedNodes,S.payload.absoluteIdentity]))}),h.addCase(Hm,(w,S)=>{w.manuallyExpandedNodes=w.manuallyExpandedNodes.filter(C=>C!==S.payload.absoluteIdentity),w.automaticallyExpandedNodes=w.automaticallyExpandedNodes.filter(C=>C!==S.payload.absoluteIdentity),delete w.nodeChildren[S.payload.absoluteIdentity],w.nodesWithChildrenLoaded=w.nodesWithChildrenLoaded.filter(C=>C!==S.payload.absoluteIdentity)})}}),J4=G4.reducer,zb={searchResults:[],loadingSearchResults:!1,totalSearchResults:0,facets:Object.create(null)},Nb=Ks("search_results",async({page:h,rowsPerPage:w,search:S,ontologyId:C,type:R,searchParams:G},{rejectWithValue:te})=>{try{let re={search:S,size:w,page:h,facetFields:"ontologyId type",ontologyId:C.length>0?C[0]:null,type:R.length>0?R[0]:null,...Object.fromEntries(G)};for(let se in re)(re[se]===void 0||re[se]===null||re[se]==="")&&delete re[se];let ue=new URLSearchParams(re);return G.get("ontology")&&(ue.set("ontologyId",G.get("ontology")),ue.delete("ontology")),G.get("q")&&ue.delete("q"),(await Xo(`api/v2/entities?${ue}`)).map(se=>iu(se))}catch(re){return te(re.message)}}),X4=xt({name:"search",initialState:zb,reducers:{},extraReducers:h=>{h.addCase(Nb.fulfilled,(w,S)=>{w.searchResults=S.payload.elements,w.totalSearchResults=S.payload.totalElements,w.facets=S.payload.facetFieldsToCounts,w.loadingSearchResults=!1}),h.addCase(Nb.pending,w=>{w.loadingSearchResults=!0}),h.addCase(Nb.rejected,w=>{w.loadingSearchResults=!1,w.searchResults=zb.searchResults,w.facets=zb.facets})}}),Lb=X4.reducer,C5=$({reducer:{home:u7,search:Lb,ontologies:J4},middleware:h=>h({serializableCheck:!1})});rs();var Ed={black:"#000",white:"#fff"},ag=Ed,K4={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},Vm=K4,c9={50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},Id=c9,fp={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},wc=fp,Ol={50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},kd=Ol,Fb={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},sg=Fb,p7={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},Ys=p7,Pd={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},qm=Pd,Bb="$$material",Uh=T(Cv());Pe();var lg=T(ya());Pe();var T5=["values","unit","step"],Gh=h=>{let w=Object.keys(h).map(S=>({key:S,val:h[S]}))||[];return w.sort((S,C)=>S.val-C.val),w.reduce((S,C)=>ae({},S,{[C.key]:C.val}),{})};function Jh(h){let{values:w={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:S="px",step:C=5}=h,R=Fo(h,T5),G=Gh(w),te=Object.keys(G);function re(Ie){return`@media (min-width:${typeof w[Ie]=="number"?w[Ie]:Ie}${S})`}function ue(Ie){return`@media (max-width:${(typeof w[Ie]=="number"?w[Ie]:Ie)-C/100}${S})`}function se(Ie,Ce){let ke=te.indexOf(Ce);return`@media (min-width:${typeof w[Ie]=="number"?w[Ie]:Ie}${S}) and (max-width:${(ke!==-1&&typeof w[te[ke]]=="number"?w[te[ke]]:Ce)-C/100}${S})`}function he(Ie){return te.indexOf(Ie)+1`@media (min-width:${jd[h]}px)`};function Qs(h,w,S){let C=h.theme||{};if(Array.isArray(w)){let R=C.breakpoints||Um;return w.reduce((G,te,re)=>(G[R.up(R.keys[re])]=S(w[re]),G),{})}if(typeof w=="object"){let R=C.breakpoints||Um;return Object.keys(w).reduce((G,te)=>{if(Object.keys(R.values||jd).indexOf(te)!==-1){let re=R.up(te);G[re]=S(w[te],te)}else{let re=te;G[re]=w[re]}return G},{})}return S(w)}function cg(h={}){var w;return((w=h.keys)==null?void 0:w.reduce((S,C)=>{let R=h.up(C);return S[R]={},S},{}))||{}}function pp(h,w){return h.reduce((S,C)=>{let R=S[C];return(!R||Object.keys(R).length===0)&&delete S[C],S},w)}function Z4(h,...w){let S=cg(h),C=[S,...w].reduce((R,G)=>(0,xl.default)(R,G),{});return pp(Object.keys(S),C)}function A5(h,w){if(typeof h!="object")return{};let S={},C=Object.keys(w);return Array.isArray(h)?C.forEach((R,G)=>{G{h[R]!=null&&(S[R]=!0)}),S}function fg({values:h,breakpoints:w,base:S}){let C=S||A5(h,w),R=Object.keys(C);if(R.length===0)return h;let G;return R.reduce((te,re,ue)=>(Array.isArray(h)?(te[re]=h[ue]!=null?h[ue]:h[G],G=ue):typeof h=="object"?(te[re]=h[re]!=null?h[re]:h[G],G=re):te[re]=h,te),{})}var d7=T(ro());function Wb(h,w,S=!0){if(!w||typeof w!="string")return null;if(h&&h.vars&&S){let C=`vars.${w}`.split(".").reduce((R,G)=>R&&R[G]?R[G]:null,h);if(C!=null)return C}return w.split(".").reduce((C,R)=>C&&C[R]!=null?C[R]:null,h)}function M5(h,w,S,C=S){let R;return typeof h=="function"?R=h(S):Array.isArray(h)?R=h[S]||C:R=Wb(h,S)||C,w&&(R=w(R,C,h)),R}function e6(h){let{prop:w,cssProperty:S=h.prop,themeKey:C,transform:R}=h,G=te=>{if(te[w]==null)return null;let re=te[w],ue=te.theme,se=Wb(ue,C)||{};return Qs(te,re,he=>{let _e=M5(se,R,he);return he===_e&&typeof he=="string"&&(_e=M5(se,R,`${w}${he==="default"?"":(0,d7.default)(he)}`,he)),S===!1?_e:{[S]:_e}})};return G.propTypes={},G.filterProps=[w],G}var Ki=e6;function Hb(h){let w={};return S=>(w[S]===void 0&&(w[S]=h(S)),w[S])}var f9={m:"margin",p:"padding"},R5={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},t6={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},$b=Hb(h=>{if(h.length>2)if(t6[h])h=t6[h];else return[h];let[w,S]=h.split(""),C=f9[w],R=R5[S]||"";return Array.isArray(R)?R.map(G=>C+G):[C+R]}),Vb=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],r6=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],n6=[...Vb,...r6];function qb(h,w,S,C){var R;let G=(R=Wb(h,w,!1))!=null?R:S;return typeof G=="number"?te=>typeof te=="string"?te:G*te:Array.isArray(G)?te=>typeof te=="string"?te:G[te]:typeof G=="function"?G:()=>{}}function Ub(h){return qb(h,"spacing",8,"spacing")}function Kh(h,w){if(typeof w=="string"||w==null)return w;let S=Math.abs(w),C=h(S);return w>=0?C:typeof C=="number"?-C:`-${C}`}function h7(h,w){return S=>h.reduce((C,R)=>(C[R]=Kh(w,S),C),{})}function o6(h,w,S,C){if(w.indexOf(S)===-1)return null;let R=$b(S),G=h7(R,C),te=h[S];return Qs(h,te,G)}function D5(h,w){let S=Ub(h.theme);return Object.keys(h).map(C=>o6(h,w,C,S)).reduce(Xh,{})}function Yi(h){return D5(h,Vb)}Yi.propTypes={},Yi.filterProps=Vb;function ei(h){return D5(h,r6)}ei.propTypes={},ei.filterProps=r6;function i6(h){return D5(h,n6)}i6.propTypes={},i6.filterProps=n6;function m7(h=8){if(h.mui)return h;let w=Ub({spacing:h}),S=(...C)=>(C.length===0?[1]:C).map(R=>{let G=w(R);return typeof G=="number"?`${G}px`:G}).join(" ");return S.mui=!0,S}var p9=T(ro());function pg(...h){let w=h.reduce((C,R)=>(R.filterProps.forEach(G=>{C[G]=R}),C),{}),S=C=>Object.keys(C).reduce((R,G)=>w[G]?Xh(R,w[G](C)):R,{});return S.propTypes={},S.filterProps=h.reduce((C,R)=>C.concat(R.filterProps),[]),S}var z5=pg;function zu(h){return typeof h!="number"?h:`${h}px solid`}function _l(h,w){return Ki({prop:h,themeKey:"borders",transform:w})}var v7=_l("border",zu),g7=_l("borderTop",zu),y7=_l("borderRight",zu),d9=_l("borderBottom",zu),dg=_l("borderLeft",zu),a6=_l("borderColor"),b7=_l("borderTopColor"),w7=_l("borderRightColor"),s6=_l("borderBottomColor"),h9=_l("borderLeftColor"),O7=_l("outline",zu),x7=_l("outlineColor"),au=h=>{if(h.borderRadius!==void 0&&h.borderRadius!==null){let w=qb(h.theme,"shape.borderRadius",4,"borderRadius"),S=C=>({borderRadius:Kh(w,C)});return Qs(h,h.borderRadius,S)}return null};au.propTypes={},au.filterProps=["borderRadius"];var Gm=z5(v7,g7,y7,d9,dg,a6,b7,w7,s6,h9,au,O7,x7),Gb=h=>{if(h.gap!==void 0&&h.gap!==null){let w=qb(h.theme,"spacing",8,"gap"),S=C=>({gap:Kh(w,C)});return Qs(h,h.gap,S)}return null};Gb.propTypes={},Gb.filterProps=["gap"];var Yh=h=>{if(h.columnGap!==void 0&&h.columnGap!==null){let w=qb(h.theme,"spacing",8,"columnGap"),S=C=>({columnGap:Kh(w,C)});return Qs(h,h.columnGap,S)}return null};Yh.propTypes={},Yh.filterProps=["columnGap"];var hg=h=>{if(h.rowGap!==void 0&&h.rowGap!==null){let w=qb(h.theme,"spacing",8,"rowGap"),S=C=>({rowGap:Kh(w,C)});return Qs(h,h.rowGap,S)}return null};hg.propTypes={},hg.filterProps=["rowGap"];var _7=Ki({prop:"gridColumn"}),N5=Ki({prop:"gridRow"}),_i=Ki({prop:"gridAutoFlow"}),S7=Ki({prop:"gridAutoColumns"}),L5=Ki({prop:"gridAutoRows"}),F5=Ki({prop:"gridTemplateColumns"}),m9=Ki({prop:"gridTemplateRows"}),l6=Ki({prop:"gridTemplateAreas"}),E7=Ki({prop:"gridArea"}),Zk=z5(Gb,Yh,hg,_7,N5,_i,S7,L5,F5,m9,l6,E7);function Cd(h,w){return w==="grey"?w:h}var u6=Ki({prop:"color",themeKey:"palette",transform:Cd}),v9=Ki({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:Cd}),I7=Ki({prop:"backgroundColor",themeKey:"palette",transform:Cd}),Jm=z5(u6,v9,I7);function sa(h){return h<=1&&h!==0?`${h*100}%`:h}var B5=Ki({prop:"width",transform:sa}),mg=h=>{if(h.maxWidth!==void 0&&h.maxWidth!==null){let w=S=>{var C,R;let G=((C=h.theme)==null||(C=C.breakpoints)==null||(C=C.values)==null?void 0:C[S])||jd[S];return G?((R=h.theme)==null||(R=R.breakpoints)==null?void 0:R.unit)!=="px"?{maxWidth:`${G}${h.theme.breakpoints.unit}`}:{maxWidth:G}:{maxWidth:sa(S)}};return Qs(h,h.maxWidth,w)}return null};mg.filterProps=["maxWidth"];var W5=Ki({prop:"minWidth",transform:sa}),k7=Ki({prop:"height",transform:sa}),Qh=Ki({prop:"maxHeight",transform:sa}),Xm=Ki({prop:"minHeight",transform:sa}),P7=Ki({prop:"size",cssProperty:"width",transform:sa}),os=Ki({prop:"size",cssProperty:"height",transform:sa}),g9=Ki({prop:"boxSizing"}),j7=z5(B5,mg,W5,k7,Qh,Xm,g9),Jb={border:{themeKey:"borders",transform:zu},borderTop:{themeKey:"borders",transform:zu},borderRight:{themeKey:"borders",transform:zu},borderBottom:{themeKey:"borders",transform:zu},borderLeft:{themeKey:"borders",transform:zu},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:zu},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:au},color:{themeKey:"palette",transform:Cd},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:Cd},backgroundColor:{themeKey:"palette",transform:Cd},p:{style:ei},pt:{style:ei},pr:{style:ei},pb:{style:ei},pl:{style:ei},px:{style:ei},py:{style:ei},padding:{style:ei},paddingTop:{style:ei},paddingRight:{style:ei},paddingBottom:{style:ei},paddingLeft:{style:ei},paddingX:{style:ei},paddingY:{style:ei},paddingInline:{style:ei},paddingInlineStart:{style:ei},paddingInlineEnd:{style:ei},paddingBlock:{style:ei},paddingBlockStart:{style:ei},paddingBlockEnd:{style:ei},m:{style:Yi},mt:{style:Yi},mr:{style:Yi},mb:{style:Yi},ml:{style:Yi},mx:{style:Yi},my:{style:Yi},margin:{style:Yi},marginTop:{style:Yi},marginRight:{style:Yi},marginBottom:{style:Yi},marginLeft:{style:Yi},marginX:{style:Yi},marginY:{style:Yi},marginInline:{style:Yi},marginInlineStart:{style:Yi},marginInlineEnd:{style:Yi},marginBlock:{style:Yi},marginBlockStart:{style:Yi},marginBlockEnd:{style:Yi},displayPrint:{cssProperty:!1,transform:h=>({"@media print":{display:h}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:Gb},rowGap:{style:hg},columnGap:{style:Yh},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:sa},maxWidth:{style:mg},minWidth:{transform:sa},height:{transform:sa},maxHeight:{transform:sa},minHeight:{transform:sa},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}},vg=Jb;function y9(...h){let w=h.reduce((C,R)=>C.concat(Object.keys(R)),[]),S=new Set(w);return h.every(C=>S.size===Object.keys(C).length)}function c6(h,w){return typeof h=="function"?h(w):h}function Km(){function h(S,C,R,G){let te={[S]:C,theme:R},re=G[S];if(!re)return{[S]:C};let{cssProperty:ue=S,themeKey:se,transform:he,style:_e}=re;if(C==null)return null;if(se==="typography"&&C==="inherit")return{[S]:C};let Ie=Wb(R,se)||{};return _e?_e(te):Qs(te,C,Ce=>{let ke=M5(Ie,he,Ce);return Ce===ke&&typeof Ce=="string"&&(ke=M5(Ie,he,`${S}${Ce==="default"?"":(0,p9.default)(Ce)}`,Ce)),ue===!1?ke:{[ue]:ke}})}function w(S){var C;let{sx:R,theme:G={}}=S||{};if(!R)return null;let te=(C=G.unstable_sxConfig)!=null?C:vg;function re(ue){let se=ue;if(typeof ue=="function")se=ue(G);else if(typeof ue!="object")return ue;if(!se)return null;let he=cg(G.breakpoints),_e=Object.keys(he),Ie=he;return Object.keys(se).forEach(Ce=>{let ke=c6(se[Ce],G);if(ke!=null)if(typeof ke=="object")if(te[Ce])Ie=Xh(Ie,h(Ce,ke,G,te));else{let ze=Qs({theme:G},ke,Le=>({[Ce]:Le}));y9(ze,ke)?Ie[Ce]=w({sx:ke,theme:G}):Ie=Xh(Ie,ze)}else Ie=Xh(Ie,h(Ce,ke,G,te))}),pp(_e,Ie)}return Array.isArray(R)?R.map(re):re(R)}return w}var f6=Km();f6.filterProps=["sx"];var C7=f6;function p6(h,w){let S=this;return S.vars&&typeof S.getColorSchemeSelector=="function"?{[S.getColorSchemeSelector(h).replace(/(\[[^\]]+\])/,"*:where($1)")]:w}:S.palette.mode===h?w:{}}var gg=["breakpoints","palette","spacing","shape"];function Xb(h={},...w){let{breakpoints:S={},palette:C={},spacing:R,shape:G={}}=h,te=Fo(h,gg),re=Jh(S),ue=m7(R),se=(0,lg.default)({breakpoints:re,direction:"ltr",components:{},palette:ae({mode:"light"},C),spacing:ue,shape:ae({},Y4,G)},te);return se.applyStyles=p6,se=w.reduce((he,_e)=>(0,lg.default)(he,_e),se),se.unstable_sxConfig=ae({},vg,te?.unstable_sxConfig),se.unstable_sx=function(he){return C7({sx:he,theme:this})},se}var H5=Xb,T7=T(q()),A7=T(Cv());function Ym(h){return Object.keys(h).length===0}function M7(h=null){let w=T7.useContext(A7.ThemeContext);return!w||Ym(w)?h:w}var $5=M7,R7=H5();function d6(h=R7){return $5(h)}var V5=d6;Pe();var D7=T(ya()),b9=["sx"],z7=h=>{var w,S;let C={systemProps:{},otherProps:{}},R=(w=h==null||(S=h.theme)==null?void 0:S.unstable_sxConfig)!=null?w:vg;return Object.keys(h).forEach(G=>{R[G]?C.systemProps[G]=h[G]:C.otherProps[G]=h[G]}),C};function N7(h){let{sx:w}=h,S=Fo(h,b9),{systemProps:C,otherProps:R}=z7(S),G;return Array.isArray(w)?G=[C,...w]:typeof w=="function"?G=(...te)=>{let re=w(...te);return(0,D7.isPlainObject)(re)?ae({},C,re):C}:G=ae({},C,w),ae({},R,{sx:G})}var Kb=h=>h,dp=()=>{let h=Kb;return{configure(w){h=w},generate(w){return h(w)},reset(){h=Kb}}},is=dp(),q5=is;function Td(h){var w,S,C="";if(typeof h=="string"||typeof h=="number")C+=h;else if(typeof h=="object")if(Array.isArray(h)){var R=h.length;for(w=0;w{C[R]=as(h,R,S)}),C}Pe();var L7=T(Cv()),O9=T(ya()),yg=["ownerState"],h6=["variants"],el=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function Yb(h){return Object.keys(h).length===0}function m6(h){return typeof h=="string"&&h.charCodeAt(0)>96}function U5(h){return h!=="ownerState"&&h!=="theme"&&h!=="sx"&&h!=="as"}var uf=H5(),bg=h=>h&&h.charAt(0).toLowerCase()+h.slice(1);function G5({defaultTheme:h,theme:w,themeId:S}){return Yb(w)?h:w[S]||w}function Zh(h){return h?(w,S)=>S[h]:null}function Qb(h,w){let{ownerState:S}=w,C=Fo(w,yg),R=typeof h=="function"?h(ae({ownerState:S},C)):h;if(Array.isArray(R))return R.flatMap(G=>Qb(G,ae({ownerState:S},C)));if(R&&typeof R=="object"&&Array.isArray(R.variants)){let{variants:G=[]}=R,te=Fo(R,h6);return G.forEach(re=>{let ue=!0;typeof re.props=="function"?ue=re.props(ae({ownerState:S},C,S)):Object.keys(re.props).forEach(se=>{S?.[se]!==re.props[se]&&C[se]!==re.props[se]&&(ue=!1)}),ue&&(Array.isArray(te)||(te=[te]),te.push(typeof re.style=="function"?re.style(ae({ownerState:S},C,S)):re.style))}),te}return R}function J5(h={}){let{themeId:w,defaultTheme:S=uf,rootShouldForwardProp:C=U5,slotShouldForwardProp:R=U5}=h,G=te=>C7(ae({},te,{theme:G5(ae({},te,{defaultTheme:S,themeId:w}))}));return G.__mui_systemSx=!0,(te,re={})=>{(0,L7.internal_processStyles)(te,it=>it.filter(Ke=>!(Ke!=null&&Ke.__mui_systemSx)));let{name:ue,slot:se,skipVariantsResolver:he,skipSx:_e,overridesResolver:Ie=Zh(bg(se))}=re,Ce=Fo(re,el),ke=he!==void 0?he:se&&se!=="Root"&&se!=="root"||!1,ze=_e||!1,Le,Te=U5;se==="Root"||se==="root"?Te=C:se?Te=R:m6(te)&&(Te=void 0);let lt=(0,L7.default)(te,ae({shouldForwardProp:Te,label:Le},Ce)),dt=it=>typeof it=="function"&&it.__emotion_real!==it||(0,O9.isPlainObject)(it)?Ke=>Qb(it,ae({},Ke,{theme:G5({theme:Ke.theme,defaultTheme:S,themeId:w})})):it,tt=(it,...Ke)=>{let st=dt(it),De=Ke?Ke.map(dt):[];ue&&Ie&&De.push(gt=>{let Et=G5(ae({},gt,{defaultTheme:S,themeId:w}));if(!Et.components||!Et.components[ue]||!Et.components[ue].styleOverrides)return null;let zt=Et.components[ue].styleOverrides,Yt={};return Object.entries(zt).forEach(([Tr,_r])=>{Yt[Tr]=Qb(_r,ae({},gt,{theme:Et}))}),Ie(gt,Yt)}),ue&&!ke&&De.push(gt=>{var Et;let zt=G5(ae({},gt,{defaultTheme:S,themeId:w})),Yt=zt==null||(Et=zt.components)==null||(Et=Et[ue])==null?void 0:Et.variants;return Qb({variants:Yt},ae({},gt,{theme:zt}))}),ze||De.push(G);let Ze=De.length-Ke.length;if(Array.isArray(it)&&Ze>0){let gt=new Array(Ze).fill("");st=[...it,...gt],st.raw=[...it.raw,...gt]}let ct=lt(st,...De);return te.muiName&&(ct.muiName=te.muiName),ct};return lt.withConfig&&(tt.withConfig=lt.withConfig),tt}}var X5=J5(),hp=X5;Pe();function Sl(h,w){let S=ae({},w);return Object.keys(h).forEach(C=>{if(C.toString().match(/^(components|slots)$/))S[C]=ae({},h[C],S[C]);else if(C.toString().match(/^(componentsProps|slotProps)$/)){let R=h[C]||{},G=w[C];S[C]={},!G||!Object.keys(G)?S[C]=R:!R||!Object.keys(R)?S[C]=G:(S[C]=ae({},G),Object.keys(R).forEach(te=>{S[C][te]=Sl(R[te],G[te])}))}else S[C]===void 0&&(S[C]=h[C])}),S}function v6(h){let{theme:w,name:S,props:C}=h;return!w||!w.components||!w.components[S]||!w.components[S].defaultProps?C:Sl(w.components[S].defaultProps,C)}function g6({props:h,name:w,defaultTheme:S,themeId:C}){let R=V5(S);return C&&(R=R[C]||R),v6({theme:R,name:w,props:h})}var y6=T(q()),F7=typeof window<"u"?y6.useLayoutEffect:y6.useEffect,b6=F7;function x9(...h){return h.reduce((w,S)=>S==null?w:function(...C){w.apply(this,C),S.apply(this,C)},()=>{})}var B7=T(q());function _9(h,w){var S,C;return B7.isValidElement(h)&&w.indexOf((S=h.type.muiName)!=null?S:(C=h.type)==null||(C=C._payload)==null||(C=C.value)==null?void 0:C.muiName)!==-1}function S9(h,w){typeof h=="function"?h(w):h&&(h.current=w)}var Qm=T(q()),w6=0;function K5(h){let[w,S]=Qm.useState(h),C=h||w;return Qm.useEffect(()=>{w==null&&(w6+=1,S(`mui-${w6}`))},[w]),C}var O6=Qm["useId".toString()];function E9(h){if(O6!==void 0){let w=O6();return h??w}return K5(h)}var ss=T(q());function I9({controlled:h,default:w,name:S,state:C="value"}){let{current:R}=ss.useRef(h!==void 0),[G,te]=ss.useState(w),re=R?h:G,ue=ss.useCallback(se=>{R||te(se)},[]);return[re,ue]}var x6=T(q());function k9(h){let w=x6.useRef(h);return b6(()=>{w.current=h}),x6.useRef((...S)=>(0,w.current)(...S)).current}var Zb=k9,Y5=T(q());function Zm(...h){return Y5.useMemo(()=>h.every(w=>w==null)?null:w=>{h.forEach(S=>{S9(S,w)})},h)}var e2=T(q()),Q5={};function _6(h,w){let S=e2.useRef(Q5);return S.current===Q5&&(S.current=h(w)),S}var Z5=T(q()),S6=[];function E6(h){Z5.useEffect(h,S6)}var ew=class EIe{constructor(){this.currentId=null,this.clear=()=>{this.currentId!==null&&(clearTimeout(this.currentId),this.currentId=null)},this.disposeEffect=()=>this.clear}static create(){return new EIe}start(w,S){this.clear(),this.currentId=setTimeout(()=>{this.currentId=null,S()},w)}};function e1(){let h=_6(ew.create).current;return E6(h.disposeEffect),h}var wg=T(q()),mp=!0,t2=!1,W7=new ew,tw={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function H7(h){let{type:w,tagName:S}=h;return!!(S==="INPUT"&&tw[w]&&!h.readOnly||S==="TEXTAREA"&&!h.readOnly||h.isContentEditable)}function I6(h){h.metaKey||h.altKey||h.ctrlKey||(mp=!0)}function cf(){mp=!1}function rw(){this.visibilityState==="hidden"&&t2&&(mp=!0)}function $7(h){h.addEventListener("keydown",I6,!0),h.addEventListener("mousedown",cf,!0),h.addEventListener("pointerdown",cf,!0),h.addEventListener("touchstart",cf,!0),h.addEventListener("visibilitychange",rw,!0)}function P9(h){let{target:w}=h;try{return w.matches(":focus-visible")}catch{}return mp||H7(w)}function j9(){let h=wg.useCallback(R=>{R!=null&&$7(R.ownerDocument)},[]),w=wg.useRef(!1);function S(){return w.current?(t2=!0,W7.start(100,()=>{t2=!1}),w.current=!1,!0):!1}function C(R){return P9(R)?(w.current=!0,!0):!1}return{isFocusVisibleRef:w,onFocus:C,onBlur:S,ref:h}}function Nu(h,w,S=void 0){let C={};return Object.keys(h).forEach(R=>{C[R]=h[R].reduce((G,te)=>{if(te){let re=w(te);re!==""&&G.push(re),S&&S[te]&&G.push(S[te])}return G},[]).join(" ")}),C}Pe();var la=T(q()),V7=T(ya()),k6=T(Ln()),nw=["component","direction","spacing","divider","children","className","useFlexGap"],P6=H5(),r2=hp("div",{name:"MuiStack",slot:"Root",overridesResolver:(h,w)=>w.root});function Lu(h){return g6({props:h,name:"MuiStack",defaultTheme:P6})}function j6(h,w){let S=la.Children.toArray(h).filter(Boolean);return S.reduce((C,R,G)=>(C.push(R),G({row:"Left","row-reverse":"Right",column:"Top","column-reverse":"Bottom"})[h],T9=({ownerState:h,theme:w})=>{let S=ae({display:"flex",flexDirection:"column"},Qs({theme:w},fg({values:h.direction,breakpoints:w.breakpoints.values}),C=>({flexDirection:C})));if(h.spacing){let C=Ub(w),R=Object.keys(w.breakpoints.values).reduce((re,ue)=>((typeof h.spacing=="object"&&h.spacing[ue]!=null||typeof h.direction=="object"&&h.direction[ue]!=null)&&(re[ue]=!0),re),{}),G=fg({values:h.direction,base:R}),te=fg({values:h.spacing,base:R});typeof G=="object"&&Object.keys(G).forEach((re,ue,se)=>{if(!G[re]){let he=ue>0?G[se[ue-1]]:"column";G[re]=he}}),S=(0,V7.default)(S,Qs({theme:w},te,(re,ue)=>h.useFlexGap?{gap:Kh(C,re)}:{"& > :not(style):not(style)":{margin:0},"& > :not(style) ~ :not(style)":{[`margin${C9(ue?G[ue]:h.direction)}`]:Kh(C,re)}}))}return S=Z4(w.breakpoints,S),S};function q7(h={}){let{createStyledComponent:w=r2,useThemeProps:S=Lu,componentName:C="MuiStack"}=h,R=()=>Nu({root:["root"]},te=>as(C,te),{}),G=w(T9);return la.forwardRef(function(te,re){let ue=S(te),se=N7(ue),{component:he="div",direction:_e="column",spacing:Ie=0,divider:Ce,children:ke,className:ze,useFlexGap:Le=!1}=se,Te=Fo(se,nw),lt={direction:_e,spacing:Ie,useFlexGap:Le},dt=R();return(0,k6.jsx)(G,ae({as:he,ownerState:lt,ref:re,className:Qi(dt.root,ze)},Te,{children:Ce?j6(ke,Ce):ke}))})}Pe();var C6=T(vl()),ow=T(ya()),U7=T(Mv()),A9=T(Po());Pe();function G7(h,w){return ae({toolbar:{minHeight:56,[h.up("xs")]:{"@media (orientation: landscape)":{minHeight:48}},[h.up("sm")]:{minHeight:64}}},w)}Pe();var T6=T(vl()),M9=T(ya()),A6=T(Ch()),n2=["mode","contrastThreshold","tonalOffset"],iw={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.6)",disabled:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:ag.white,default:ag.white},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},M6={text:{primary:ag.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:"#121212",default:"#121212"},action:{active:ag.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function aw(h,w,S,C){let R=C.light||C,G=C.dark||C*1.5;h[w]||(h.hasOwnProperty(S)?h[w]=h[S]:w==="light"?h.light=(0,A6.lighten)(h.main,R):w==="dark"&&(h.dark=(0,A6.darken)(h.main,G)))}function R9(h="light"){return h==="dark"?{main:wc[200],light:wc[50],dark:wc[400]}:{main:wc[700],light:wc[400],dark:wc[800]}}function J7(h="light"){return h==="dark"?{main:Id[200],light:Id[50],dark:Id[400]}:{main:Id[500],light:Id[300],dark:Id[700]}}function X7(h="light"){return h==="dark"?{main:Vm[500],light:Vm[300],dark:Vm[700]}:{main:Vm[700],light:Vm[400],dark:Vm[800]}}function K7(h="light"){return h==="dark"?{main:kd[400],light:kd[300],dark:kd[700]}:{main:kd[700],light:kd[500],dark:kd[900]}}function Y7(h="light"){return h==="dark"?{main:sg[400],light:sg[300],dark:sg[700]}:{main:sg[800],light:sg[500],dark:sg[900]}}function sw(h="light"){return h==="dark"?{main:Ys[400],light:Ys[300],dark:Ys[700]}:{main:"#ed6c02",light:Ys[500],dark:Ys[900]}}function Q7(h){let{mode:w="light",contrastThreshold:S=3,tonalOffset:C=.2}=h,R=Fo(h,n2),G=h.primary||R9(w),te=h.secondary||J7(w),re=h.error||X7(w),ue=h.info||K7(w),se=h.success||Y7(w),he=h.warning||sw(w);function _e(ke){return(0,A6.getContrastRatio)(ke,M6.text.primary)>=S?M6.text.primary:iw.text.primary}let Ie=({color:ke,name:ze,mainShade:Le=500,lightShade:Te=300,darkShade:lt=700})=>{if(ke=ae({},ke),!ke.main&&ke[Le]&&(ke.main=ke[Le]),!ke.hasOwnProperty("main"))throw new Error((0,T6.default)(11,ze?` (${ze})`:"",Le));if(typeof ke.main!="string")throw new Error((0,T6.default)(12,ze?` (${ze})`:"",JSON.stringify(ke.main)));return aw(ke,"light",Te,C),aw(ke,"dark",lt,C),ke.contrastText||(ke.contrastText=_e(ke.main)),ke},Ce={dark:M6,light:iw};return(0,M9.default)(ae({common:ae({},ag),mode:w,primary:Ie({color:G,name:"primary"}),secondary:Ie({color:te,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:Ie({color:re,name:"error"}),warning:Ie({color:he,name:"warning"}),info:Ie({color:ue,name:"info"}),success:Ie({color:se,name:"success"}),grey:qm,contrastThreshold:S,getContrastText:_e,augmentColor:Ie,tonalOffset:C},Ce[w]),R)}Pe();var o2=T(ya()),Z7=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"];function R6(h){return Math.round(h*1e5)/1e5}var i2={textTransform:"uppercase"},lw='"Roboto", "Helvetica", "Arial", sans-serif';function uw(h,w){let S=typeof w=="function"?w(h):w,{fontFamily:C=lw,fontSize:R=14,fontWeightLight:G=300,fontWeightRegular:te=400,fontWeightMedium:re=500,fontWeightBold:ue=700,htmlFontSize:se=16,allVariants:he,pxToRem:_e}=S,Ie=Fo(S,Z7),Ce=R/14,ke=_e||(Te=>`${Te/se*Ce}rem`),ze=(Te,lt,dt,tt,it)=>ae({fontFamily:C,fontWeight:Te,fontSize:ke(lt),lineHeight:dt},C===lw?{letterSpacing:`${R6(tt/lt)}em`}:{},it,he),Le={h1:ze(G,96,1.167,-1.5),h2:ze(G,60,1.2,-.5),h3:ze(te,48,1.167,0),h4:ze(te,34,1.235,.25),h5:ze(te,24,1.334,0),h6:ze(re,20,1.6,.15),subtitle1:ze(te,16,1.75,.15),subtitle2:ze(re,14,1.57,.1),body1:ze(te,16,1.5,.15),body2:ze(te,14,1.43,.15),button:ze(re,14,1.75,.4,i2),caption:ze(te,12,1.66,.4),overline:ze(te,12,2.66,1,i2),inherit:{fontFamily:"inherit",fontWeight:"inherit",fontSize:"inherit",lineHeight:"inherit",letterSpacing:"inherit"}};return(0,o2.default)(ae({htmlFontSize:se,pxToRem:ke,fontFamily:C,fontSize:R,fontWeightLight:G,fontWeightRegular:te,fontWeightMedium:re,fontWeightBold:ue},Le),Ie,{clone:!1})}function ti(...h){return[`${h[0]}px ${h[1]}px ${h[2]}px ${h[3]}px rgba(0,0,0,${.2})`,`${h[4]}px ${h[5]}px ${h[6]}px ${h[7]}px rgba(0,0,0,${.14})`,`${h[8]}px ${h[9]}px ${h[10]}px ${h[11]}px rgba(0,0,0,${.12})`].join(",")}var e8=["none",ti(0,2,1,-1,0,1,1,0,0,1,3,0),ti(0,3,1,-2,0,2,2,0,0,1,5,0),ti(0,3,3,-2,0,3,4,0,0,1,8,0),ti(0,2,4,-1,0,4,5,0,0,1,10,0),ti(0,3,5,-1,0,5,8,0,0,1,14,0),ti(0,3,5,-1,0,6,10,0,0,1,18,0),ti(0,4,5,-2,0,7,10,1,0,2,16,1),ti(0,5,5,-3,0,8,10,1,0,3,14,2),ti(0,5,6,-3,0,9,12,1,0,3,16,2),ti(0,6,6,-3,0,10,14,1,0,4,18,3),ti(0,6,7,-4,0,11,15,1,0,4,20,3),ti(0,7,8,-4,0,12,17,2,0,5,22,4),ti(0,7,8,-4,0,13,19,2,0,5,24,4),ti(0,7,9,-4,0,14,21,2,0,5,26,4),ti(0,8,9,-5,0,15,22,2,0,6,28,5),ti(0,8,10,-5,0,16,24,2,0,6,30,5),ti(0,8,11,-5,0,17,26,2,0,6,32,5),ti(0,9,11,-5,0,18,28,2,0,7,34,6),ti(0,9,12,-6,0,19,29,2,0,7,36,6),ti(0,10,13,-6,0,20,31,3,0,8,38,7),ti(0,10,13,-6,0,21,33,3,0,8,40,7),ti(0,10,14,-6,0,22,35,3,0,8,42,7),ti(0,11,14,-7,0,23,36,3,0,9,44,8),ti(0,11,15,-7,0,24,38,3,0,9,46,8)],t1=e8;Pe();var a2=["duration","easing","delay"],Wo={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},D9={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function D6(h){return`${Math.round(h)}ms`}function t8(h){if(!h)return 0;let w=h/36;return Math.round((4+15*w**.25+w/5)*10)}function nr(h){let w=ae({},Wo,h.easing),S=ae({},D9,h.duration);return ae({getAutoHeightDuration:t8,create:(C=["all"],R={})=>{let{duration:G=S.standard,easing:te=w.easeInOut,delay:re=0}=R,ue=Fo(R,a2);return(Array.isArray(C)?C:[C]).map(se=>`${se} ${typeof G=="string"?G:D6(G)} ${te} ${typeof re=="string"?re:D6(re)}`).join(",")}},h,{easing:w,duration:S})}var r8={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},cw=r8,z9=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];function N9(h={},...w){let{mixins:S={},palette:C={},transitions:R={},typography:G={}}=h,te=Fo(h,z9);if(h.vars)throw new Error((0,C6.default)(18));let re=Q7(C),ue=(0,A9.default)(h),se=(0,ow.default)(ue,{mixins:G7(ue.breakpoints,S),palette:re,shadows:t1.slice(),typography:uw(re,G),transitions:nr(R),zIndex:ae({},cw)});return se=(0,ow.default)(se,te),se=w.reduce((he,_e)=>(0,ow.default)(he,_e),se),se.unstable_sxConfig=ae({},U7.unstable_defaultSxConfig,te?.unstable_sxConfig),se.unstable_sx=function(he){return(0,U7.default)({sx:he,theme:this})},se}var n8=N9,L9=n8(),z6=L9;function ff({props:h,name:w}){return g6({props:h,name:w,defaultTheme:z6,themeId:Bb})}var fw=T(mb()),pf=h=>(0,fw.shouldForwardProp)(h)&&h!=="classes",N6=(0,fw.default)({themeId:Bb,defaultTheme:z6,rootShouldForwardProp:pf}),Oa=N6,o8=T(ro()),Si=o8.default,pw=x9;Pe();var L6=T(q());Pe();var F6=T(q());function B6(h){return as("MuiSvgIcon",h)}var F9=Zs("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]),i8=T(Ln()),dw=T(Ln()),hw=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],a8=h=>{let{color:w,fontSize:S,classes:C}=h,R={root:["root",w!=="inherit"&&`color${Si(w)}`,`fontSize${Si(S)}`]};return Nu(R,B6,C)},s2=Oa("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(h,w)=>{let{ownerState:S}=h;return[w.root,S.color!=="inherit"&&w[`color${Si(S.color)}`],w[`fontSize${Si(S.fontSize)}`]]}})(({theme:h,ownerState:w})=>{var S,C,R,G,te,re,ue,se,he,_e,Ie,Ce,ke;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:w.hasSvgAsChild?void 0:"currentColor",flexShrink:0,transition:(S=h.transitions)==null||(C=S.create)==null?void 0:C.call(S,"fill",{duration:(R=h.transitions)==null||(R=R.duration)==null?void 0:R.shorter}),fontSize:{inherit:"inherit",small:((G=h.typography)==null||(te=G.pxToRem)==null?void 0:te.call(G,20))||"1.25rem",medium:((re=h.typography)==null||(ue=re.pxToRem)==null?void 0:ue.call(re,24))||"1.5rem",large:((se=h.typography)==null||(he=se.pxToRem)==null?void 0:he.call(se,35))||"2.1875rem"}[w.fontSize],color:(_e=(Ie=(h.vars||h).palette)==null||(Ie=Ie[w.color])==null?void 0:Ie.main)!=null?_e:{action:(Ce=(h.vars||h).palette)==null||(Ce=Ce.action)==null?void 0:Ce.active,disabled:(ke=(h.vars||h).palette)==null||(ke=ke.action)==null?void 0:ke.disabled,inherit:void 0}[w.color]}}),mw=F6.forwardRef(function(h,w){let S=ff({props:h,name:"MuiSvgIcon"}),{children:C,className:R,color:G="inherit",component:te="svg",fontSize:re="medium",htmlColor:ue,inheritViewBox:se=!1,titleAccess:he,viewBox:_e="0 0 24 24"}=S,Ie=Fo(S,hw),Ce=F6.isValidElement(C)&&C.type==="svg",ke=ae({},S,{color:G,component:te,fontSize:re,instanceFontSize:h.fontSize,inheritViewBox:se,viewBox:_e,hasSvgAsChild:Ce}),ze={};se||(ze.viewBox=_e);let Le=a8(ke);return(0,dw.jsxs)(s2,ae({as:te,className:Qi(Le.root,R),focusable:"false",color:ue,"aria-hidden":he?void 0:!0,role:he?"img":void 0,ref:w},ze,Ie,Ce&&C.props,{ownerState:ke,children:[Ce?C.props.children:C,he?(0,i8.jsx)("title",{children:he}):null]}))});mw.muiName="SvgIcon";var W6=mw,B9=T(Ln());function l2(h,w){function S(C,R){return(0,B9.jsx)(W6,ae({"data-testid":`${w}Icon`,ref:R},C,{children:h}))}return S.muiName=W6.muiName,L6.memo(L6.forwardRef(S))}var H6=_9,$6=E9,vw=I9,gw=Zb,V6=Zm,W9=j9;function u2(h,w){return u2=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(S,C){return S.__proto__=C,S},u2(h,w)}function Og(h,w){h.prototype=Object.create(w.prototype),h.prototype.constructor=h,u2(h,w)}var s8=T(q()),r1=s8.default.createContext(null);Pe();function yw(h){if(h===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return h}var n1=T(q()),vp=T(q());function Ei(h,w){var S=function(R){return w&&(0,vp.isValidElement)(R)?w(R):R},C=Object.create(null);return h&&vp.Children.map(h,function(R){return R}).forEach(function(R){C[R.key]=S(R)}),C}function df(h,w){h=h||{},w=w||{};function S(he){return he in w?w[he]:h[he]}var C=Object.create(null),R=[];for(var G in h)G in w?R.length&&(C[G]=R,R=[]):R.push(G);var te,re={};for(var ue in w){if(C[ue])for(te=0;te{if(!re&&ue!=null){let ze=setTimeout(ue,se);return()=>{clearTimeout(ze)}}},[ue,re,se]),(0,c2.jsx)("span",{className:Ie,style:Ce,children:(0,c2.jsx)("span",{className:ke})})}var q9=V9,U9=Zs("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),zn=U9,f2=T(Ln()),G6=["center","classes","className"],p2=h=>h,u8,o1,ww,Ad,tl=550,Os=80,ni=(0,Uh.keyframes)(u8||(u8=p2` 0% { transform: scale(0); opacity: 0.1; @@ -667,7 +667,7 @@ Add a component higher in the tree to provide a loading display: block; max-height: 200px; overflow: auto; - `},{name:"Version",field:"config.version",width:"7.5%"},{name:"Loaded on",field:"loaded",width:"10%",dataType:"date",sortable:!0},{name:"Terms",field:"numberOfTerms",render:Ue=>si.default.createElement(si.default.Fragment,null,Ue.toLocaleString()),width:"7.5%",sortable:!0},{name:"Properties",field:"numberOfProperties",render:Ue=>si.default.createElement(si.default.Fragment,null,Ue.toLocaleString()),width:"7.5%",sortable:!0},{name:"Individuals",field:"numberOfIndividuals",render:Ue=>si.default.createElement(si.default.Fragment,null,Ue.toLocaleString()),width:"7.5%",sortable:!0},{width:"5%",actions:[...e.actions||[],{render:Ue=>si.default.createElement(K0,{href:Ue.config.fileLocation,iconType:"download","aria-label":"Download",isDisabled:!Ue.config.allowDownload||Ue.config.fileLocation.startsWith("file://")})}]}],Z=({page:Ue,sort:ht})=>{let{index:yt,size:Mt}=Ue;if(T(yt),L(Mt),ht){let{field:wt,direction:_t}=ht;q(wt),U(_t)}},{data:fe,isSuccess:me,isError:ye,isLoading:ge}=Vn(["ontologiesData",t,y],async()=>_.getOntologiesData(e.parameter)),ae=fe?.properties.map(Ue=>({...Ue.properties}))||[];console.log(ae);let Pe=(Ue,ht,yt,Mt,wt)=>{let _t;Mt?_t=Ue.slice(0).sort(eM.property(Mt,eM.default(wt))):_t=Ue;let Nt;if(!ht&&!yt)Nt=_t;else{let Rt=ht*yt;Nt=_t.slice(Rt,Math.min(Rt+yt,Ue.length))}return{pageOfItems:Nt,totalItemCount:Ue.length}},{pageOfItems:Ne,totalItemCount:Ye}=Pe(ae,k,N,Y,K),Je={pageIndex:k,pageSize:N,totalItemCount:Ye,pageSizeOptions:r},Me=N===0?si.default.createElement("strong",null,"All"):si.default.createElement(si.default.Fragment,null,si.default.createElement("strong",null,N*k+1,"-",N*k+N)," ","of ",Ye),Ve={sort:{field:Y,direction:K}};return si.default.createElement(si.default.Fragment,null,me&&si.default.createElement(si.default.Fragment,null,si.default.createElement(Wr,{size:"xs"},"Showing ",Me," ",si.default.createElement("strong",null,"Ontologies")),si.default.createElement(pl,{size:"s"}),si.default.createElement(OC,{margin:"none",style:{height:2}}),si.default.createElement(qk,{columns:X,items:Ne,onChange:Z,pagination:Je,sorting:Ve})),ge&&si.default.createElement(qk,{columns:X,items:Ne,onChange:Z,pagination:Je,sorting:Ve,loading:!0}),ye&&si.default.createElement(qk,{columns:X,items:Ne,onChange:Z,pagination:Je,sorting:Ve}))}function ZIe(e,t,n){YIe.default.render(s$t(e),t,n)}function s$t(e){let t=new Cn;return si.default.createElement(jn,{colorMode:"light"},si.default.createElement(Tn,{client:t},si.default.createElement(QIe,{api:e.api,initialEntriesPerPage:e.initialEntriesPerPage,pageSizeOptions:e.pageSizeOptions,initialSortField:e.initialSortField,initialSortDir:e.initialSortDir,targetLink:e.targetLink,actions:e.actions,parameter:e.parameter})))}var mv=V(ne());var eke=V(Li());function gK(e){let{api:t,query:n,selectionChangedEvent:r,...o}=e,i=new $n(t),[d,y]=(0,mv.useState)(),[_,k]=(0,mv.useState)([]),[T,N]=(0,mv.useState)(n),L=K=>{k(K)},Y=K=>{if(!K.trim().toLowerCase())return;k([{label:K}])},{isLoading:q}=Vn(["suggestions",T],async()=>{if(T.trim())return i.suggest({query:T},void 0,void 0,e.parameter).then(K=>{K.response&&K.response.docs&&y(K.response.docs.map(U=>({label:U.autosuggest,type:{color:"tint1",iconType:""}})))})});return(0,mv.useEffect)(()=>{r(_.map(K=>({label:K.label})))},[_]),mv.default.createElement(mv.default.Fragment,null,mv.default.createElement(Lk,{id:"suggest",isClearable:!0,"aria-label":"searchBar",fullWidth:!0,async:!0,placeholder:"Search",autoFocus:!0,singleSelection:!0,isLoading:q,options:d,selectedOptions:_,onChange:L,onCreateOption:Y,onSearchChange:K=>{N(K)}}))}function tke(e,t,n){eke.default.render(l$t(e),t,n)}function l$t(e){let t=new Cn;return mv.default.createElement(jn,{colorMode:"light"},mv.default.createElement(Tn,{client:t},mv.default.createElement(gK,{api:e.api,query:e.query,selectionChangedEvent:e.selectionChangedEvent,parameter:e.parameter})))}var tn=V(ne());var X3=V(ne());var o7=V(ne());var rke=V(Li());function nke(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:d}=e,y=new $n(n),{data:_,isLoading:k,isSuccess:T,isError:N,error:L}=Vn(["entityOntoList",n,r,o,t,i,d],async()=>{let Y,q,K;if(d){let U=(await y.getEntityResponse(t,o,void 0,r,d))._embedded;Y=U[Object.keys(U)[0]].map(X=>X.ontology_name),q=o||MV(Object.keys(U)[0]),K=U[Object.keys(U)[0]][0].label}else{let U=await y.getEntityObject(t,o,i,r,d);Y=U.getAppearsIn(),q=o||U.getType(),K=U.getLabel()||""}return Y=Y.filter(U=>U!=i).sort(),{ontoList:Y,entityType:q,label:K}});return o7.default.createElement(o7.default.Fragment,null,T&&_&&o7.default.createElement(mK,{ontolist:_.ontoList,entityType:_.entityType,label:_.label,iri:t,onNavigateToOntology:e.onNavigateToOntology}),k&&o7.default.createElement(Pn,null),N&&o7.default.createElement(Wr,null,Ma(L,"ontology list")))}function oke(e,t,n){rke.default.render(u$t(e),t,n)}function u$t(e){let t=new Cn;return o7.default.createElement(jn,{colorMode:"light"},o7.default.createElement(Tn,{client:t},o7.default.createElement(nke,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var i7=V(ne());var ike=V(Li());function ake(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:d}=e,y=new $n(n),{data:_,isLoading:k,isSuccess:T,isError:N,error:L}=Vn(["entityDefinedBy",n,r,o,t,i,d],async()=>{let Y,q,K;if(d){let U=(await y.getEntityResponse(t,o,void 0,r,d))._embedded;Y=U[Object.keys(U)[0]].filter(X=>X.is_defining_ontology).map(X=>X.ontology_name),q=o||MV(Object.keys(U)[0]),K=U[Object.keys(U)[0]][0].label}else{let U=await y.getEntityObject(t,o,i,r,d);Y=U.getDefinedBy().filter(X=>X!=U.getOntologyId()),q=o||U.getType(),K=U.getLabel()||""}return Y=Y.sort(),{ontoList:Y,entityType:q,label:K}});return i7.default.createElement(i7.default.Fragment,null,T&&_&&i7.default.createElement(vK,{ontolist:_.ontoList,entityType:_.entityType,label:_.label,iri:t,onNavigateToOntology:e.onNavigateToOntology}),k&&i7.default.createElement(Pn,null),N&&i7.default.createElement(Wr,null,Ma(L,"ontology list")))}function ske(e,t,n){ike.default.render(c$t(e),t,n)}function c$t(e){let t=new Cn;return i7.default.createElement(jn,{colorMode:"light"},i7.default.createElement(Tn,{client:t},i7.default.createElement(ake,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}function lke(e){let{api:t,result:n,targetLink:r,...o}=e;return X3.default.createElement(em,{textAlign:"left",...o,href:r?n.type!="ontology"?r+"ontologies/"+n.ontology_name+"/"+Rc(n.type,!0)+"?iri="+encodeURIComponent(n.iri):r+"ontologies/"+n.ontology_name:void 0,title:X3.default.createElement(Da,null,X3.default.createElement(Rr,{grow:!1},X3.default.createElement(hC,null,X3.default.createElement("h2",null,n.label))),X3.default.createElement(Rr,null,n.type!="ontology"&&X3.default.createElement(tK,{api:t,iri:n.iri,entityType:n.type,ontologyId:n.ontology_name})))},n.type!="ontology"?X3.default.createElement(JC,{iri:n.iri}):void 0,X3.default.createElement(pl,{size:"s"}),X3.default.createElement(oK,{api:t,ontologyId:n.ontology_name,iri:n.iri,thingType:n.type}))}var uke=V(Li());var f$t=10,p$t=[10,25,50,100];function cke(e){let{api:t,query:n,parameter:r,initialItemsPerPage:o=f$t,itemsPerPageOptions:i=p$t,targetLink:d,preselected:y,useLegacy:_=!0,...k}=e,T=new $n(t),[N,L]=(0,tn.useState)(n),[Y,q]=(0,tn.useState)(0),[K,U]=(0,tn.useState)(0),[X,Z]=(0,tn.useState)(o),[fe,me]=(0,tn.useState)(0),[ye,ge]=(0,tn.useState)(!1),[ae,Pe]=(0,tn.useState)(!1),[Ne,Ye]=(0,tn.useState)([]),[Je,Me]=(0,tn.useState)([]);(0,tn.useEffect)(()=>{L(n)},[n]);function Ve(ir,xr,qn,An){if(ir.length==0)qn(xr.reduce((Oo,yn,Vr,eo)=>(Vr%2===0&&Oo.push({label:An?An(yn):yn,key:yn,append:"("+eo[Vr+1]+")",disabled:eo[Vr+1]==0,data:{totalCount:eo[Vr+1]}}),Oo),[]));else{let Oo=[];for(let yn=0;yn{if(Vr%2===0){let Sn=Oo.find(Ti=>Ti.key==yn);Sn&&(Sn.append="("+eo[Vr+1],Sn.data&&eo[Vr+1]ir.checked==="on",{data:ht,isLoading:yt,isSuccess:Mt,isError:wt,error:_t}=Vn(["searchResults",t,N,ye,ae,Y,X,Ne.filter(Ue).map(ir=>ir.key),Je.filter(Ue).map(ir=>ir.key),r],async({signal:ir})=>T.search({query:N,exactMatch:ye,showObsoleteTerms:ae,types:Ne.filter(Ue).map(xr=>xr.key).join(","),ontology:Je.filter(Ue).map(xr=>xr.key).join(","),groupByIri:!0},{page:Y.toString(),size:X.toString()},void 0,e.parameter,ir).then(xr=>{if(xr.response&&xr.response.docs!=null&&xr.response.numFound!=null){xr.facet_counts&&xr.facet_counts.facet_fields&&(xr.facet_counts.facet_fields.type&&Ve(Ne,xr.facet_counts.facet_fields.type,Ye,An=>`${An[0].toUpperCase()}${An.slice(1)}`),_?xr.facet_counts.facet_fields.ontology_name&&Ve(Je,xr.facet_counts.facet_fields.ontology_name,Me,An=>An.toUpperCase()):xr.facet_counts.facet_fields.ontologyId&&Ve(Je,xr.facet_counts.facet_fields.ontologyId,Me,An=>An.toUpperCase())),me(xr.response.numFound);let qn=Math.ceil(xr.response.numFound/X);return U(qn),Y>=qn&&q(0),xr.response.docs}else throw new Error("Unexpected API response")}),{keepPreviousData:!0});function Nt(ir){q(Math.floor((Y*X+1)/ir)),Z(ir)}function Rt(){ge(!ye)}function sr(){Pe(!ae)}function Pt(ir,xr){let qn=[...ir];xr(qn.map(An=>({...An,checked:void 0})))}function Sr(){Pt(Ne,Ye),Pt(Je,Me)}function Nr(ir){L(ir[0]?ir[0].label:"")}return tn.default.createElement(tn.default.Fragment,null,tn.default.createElement(gK,{api:t,query:"",selectionChangedEvent:ir=>{Nr(ir)}}),tn.default.createElement(pl,{size:"xl"}),tn.default.createElement(pl,{size:"s"}),tn.default.createElement(Da,null,tn.default.createElement(Rr,{grow:3,style:{minWidth:250}},tn.default.createElement(gu,null,Mt&&tn.default.createElement(w4,{label:"Filter by type"},tn.default.createElement(UE,{options:Ne,onChange:Ye,listProps:{bordered:!0}},ir=>ir)),yt&&tn.default.createElement(w4,{label:"Filter by type"},tn.default.createElement(Pn,{size:"s"})),wt&&tn.default.createElement(w4,{label:"Filter by type"},tn.default.createElement(UE,{options:[],onChange:Ye,listProps:{bordered:!0}},ir=>ir)),Mt&&tn.default.createElement(w4,{label:"Filter by ontology"},tn.default.createElement(UE,{options:Je,onChange:Me,listProps:{bordered:!0},searchable:!0},(ir,xr)=>tn.default.createElement(tn.default.Fragment,null,xr,ir))),yt&&tn.default.createElement(w4,{label:"Filter by ontology"},tn.default.createElement(Pn,{size:"s"})),wt&&tn.default.createElement(w4,{label:"Filter by ontology"},tn.default.createElement(UE,{options:[],onChange:Me,listProps:{bordered:!0},searchable:!0},(ir,xr)=>tn.default.createElement(tn.default.Fragment,null,xr,ir))),tn.default.createElement(Ff,{onClick:Sr},"Clear all filters"))),tn.default.createElement(Rr,{grow:7},tn.default.createElement(gu,{color:"transparent",grow:!1},tn.default.createElement(Da,null,tn.default.createElement(Rr,{grow:!1},tn.default.createElement(Dk,{label:"Exact match",checked:ye,onChange:Rt})),tn.default.createElement(Rr,null,tn.default.createElement(Dk,{label:"Show only obsolete terms",checked:ae,onChange:sr}))),tn.default.createElement(pl,{size:"m"}),tn.default.createElement(Wr,{size:"xs",style:{padding:"0 8px"}},"Showing ",Math.min(Y*X+1,fe)," to ",Math.min((Y+1)*X,fe)," of ",fe," results"),tn.default.createElement(pl,{size:"s"}),tn.default.createElement(OC,{margin:"none",style:{height:2}}),tn.default.createElement(pl,{size:"s"}),tn.default.createElement(Fk,{"aria-label":"Search result pagination",pageCount:K,activePage:Y,onChangePage:q,itemsPerPage:X,onChangeItemsPerPage:Nt,itemsPerPageOptions:i}),tn.default.createElement(pl,{size:"s"}),ht&&ht.map(ir=>tn.default.createElement(tn.default.Fragment,{key:ir.id},tn.default.createElement(lke,{api:t,result:ir,targetLink:d}),tn.default.createElement(pl,null)))))))}function fke(e,t,n){uke.default.render(d$t(e),t,n)}function d$t(e){let t=new Cn;return tn.default.createElement(jn,{colorMode:"light"},tn.default.createElement(Tn,{client:t},tn.default.createElement(cke,{api:e.api,query:e.query,parameter:e.parameter,initialItemsPerPage:e.initialItemsPerPage,itemsPerPageOptions:e.itemsPerPageOptions,targetLink:e.targetLink})))}var hn=V(ne());var dke=V(Li()),h$t=!0;function m$t(e,t){let n=e.getRdfTypes().filter(r=>r!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&!r.startsWith("http://www.w3.org/2000/01/rdf-schema#"));if(e.getRdfTypes().length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Type"),GC(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function v$t(e,t){let n=e.getSameAs();if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Same As"),GC(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function g$t(e,t){let n=e.getDifferentFrom();if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Different from"),GC(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function y$t(e,t){let n=e.getDisjointWith();if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Disjoint with"),GC(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function b$t(e,t){let n=e.getInverseOf();if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Inverse of"),GC(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function pke(e,t,n){return or(e).slice().reverse().map((r,o)=>hn.default.createElement("span",{key:r},Ao(t,t.getLinkedEntities(),r,n.showBadges,{onNavigateToEntity:n.onNavigateToEntity,onNavigateToOntology:n.onNavigateToOntology,onNavigateToDisambiguate:n.onNavigateToDisambiguate}),hn.default.createElement(hn.default.Fragment,null,oo.value),r=n.filter(o=>Array.isArray(o)).length>0;if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,r?"Property chains":"Property chain"),r?hn.default.createElement("ul",null,n.map(o=>hn.default.createElement("li",{key:xn()},pke(o,e,t)))):hn.default.createElement("p",null,pke(n,e,t)))}function O$t(e,t){let n=e.getEquivalents();if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Equivalent to"),n.length===1?hn.default.createElement("p",null,nm(e,n[0],t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})):hn.default.createElement("ul",null,n.map(r=>hn.default.createElement("li",{key:xn()},nm(e,r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))))}function x$t(e,t){let n=e.getSuperEntities();if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Sub",e.getType()," of"),n.length===1?hn.default.createElement("p",null,nm(e,n[0],t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})):hn.default.createElement("ul",null,n.map(r=>hn.default.createElement("li",{key:xn()},nm(e,r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))))}function _$t(e,t){let n=e.getRelatedFrom(),r=Array.from(new Set(n.map(o=>o.value.property)));if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Related from"),r.map(o=>{let i=e.getLinkedEntities().getLabelForIri(o);return hn.default.createElement("div",{key:o.toString()+xn()},hn.default.createElement("div",null,hn.default.createElement("a",{style:{color:"black"},href:o},hn.default.createElement("i",null,i||o))),hn.default.createElement("ul",{style:{marginBottom:0}},n.filter(d=>d.value.property===o).map(d=>hn.default.createElement("li",{key:xn()},Ao(e,e.getLinkedEntities(),d.value.value,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))),hn.default.createElement("p",null)," ")}))}function S$t(e,t,n){if(t.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Instances"),hn.default.createElement("ul",null,t.map(r=>hn.default.createElement("li",{key:xn()},hh(e,e.getLinkedEntities(),r.getIri(),n.showBadges,{onNavigateToEntity:n.onNavigateToEntity,onNavigateToOntology:n.onNavigateToOntology,onNavigateToDisambiguate:n.onNavigateToDisambiguate})))))}function hke(e){let{api:t,iri:n,ontologyId:r,hasTitle:o=h$t,showBadges:i,entityType:d,parameter:y,onNavigateToEntity:_,onNavigateToDisambiguate:k,onNavigateToOntology:T,...N}=e,L=new $n(t),{data:Y,isLoading:q,isSuccess:K,isError:U}=Vn(["entityJson",t,n,r,d,y,i],async()=>L.getEntityObject(n,d,r,y,!1)),{data:X,isLoading:Z,isSuccess:fe}=Vn({queryKey:["instances",Y],queryFn:async()=>Y&&ok(Y)&&Y.hasDirectChildren()?L.getClassInstances(Y.getIri(),Y.getOntologyId()):[],enabled:!!Y});function me(ye,ge){let ae=[];if(ij(ye)){let Pe=m$t(ye,e);Pe!=null&&ae.push(Pe);let Ne=v$t(ye,e);Ne!=null&&ae.push(Ne);let Ye=g$t(ye,e);Ye!=null&&ae.push(Ye)}if(mE(ye)||ok(ye)){let Pe=y$t(ye,e);Pe!=null&&ae.push(Pe)}if(mE(ye)){let Pe=b$t(ye,e);Pe!=null&&ae.push(Pe);let Ne=w$t(ye,e);Ne!=null&&ae.push(Ne)}if(mE(ye)||ok(ye)){let Pe=O$t(ye,e);Pe!=null&&ae.push(Pe);let Ne=x$t(ye,e);Ne!=null&&ae.push(Ne);let Ye=_$t(ye,e);Ye!=null&&ae.push(Ye)}if(ok(ye)){let Pe=S$t(ye,ge,e);Pe!=null&&ae.push(Pe)}return ae.length>0?hn.default.createElement(Wr,{...N},ae):hn.default.createElement(Wr,{...N},"No relations available.")}return hn.default.createElement(hn.default.Fragment,null,hn.default.createElement(em,{title:o?(d?E3(AV(d)):K&&Y?E3(Y.getType()):"")+" Relations":"",layout:"horizontal"},(q||Z)&&hn.default.createElement(Pn,{size:"s"}),U&&hn.default.createElement(Wr,null,"Requested resource not available"),K&&fe&&Y!==void 0&&X!==void 0&&me(Y,X)))}function mke(e,t,n){dke.default.render(E$t(e),t,n)}function E$t(e){let t=new Cn;return hn.default.createElement(jn,{colorMode:"light"},hn.default.createElement(Tn,{client:t},hn.default.createElement(hke,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,showBadges:e.showBadges,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var vv=V(ne()),vke=V(Li());function gke(e){let{api:t,iri:n,ontologyId:r,useLegacy:o}=e,i=new $n(t),{data:d,isLoading:y,isSuccess:_,isError:k,error:T}=Vn(["termDepiction",t,n,r,o],async()=>i.getThingObject(n,"class",r,"",o));return vv.default.createElement(vv.default.Fragment,null,y&&vv.default.createElement(Pn,{size:"s"}),_&&d&&d.getDepictionUrl()&&vv.default.createElement(vv.default.Fragment,null,vv.default.createElement(uX,{size:"m",hasShadow:!0,allowFullScreen:!0,alt:d.getDepictionUrl(),src:d.getDepictionUrl()}),vv.default.createElement("p",null,vv.default.createElement("small",null,"Click to expand."))),k&&vv.default.createElement(Wr,null,Ma(T,"depiction")))}function yke(e,t,n){vke.default.render(I$t(e),t,n)}function I$t(e){let t=new Cn;return vv.default.createElement(jn,{colorMode:"light"},vv.default.createElement(Tn,{client:t},vv.default.createElement(gke,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,useLegacy:e.useLegacy})))}var dl=V(ne()),Uf=V(ne()),Eke=V(Li());var Ike=V(xke()),she=V(Ske());function kke(e){let{api:t,iri:n,ontologyId:r,useLegacy:o,rootWalk:i}=e,[d,y]=(0,Uf.useState)(n),[_,k]=(0,Uf.useState)(!0),[T,N]=(0,Uf.useState)(!1),[L,Y]=(0,Uf.useState)(i||!1),[q,K]=(0,Uf.useState)(!1),[U,X]=(0,Uf.useState)(0),Z=new $n(t),{data:fe,isLoading:me,isError:ye,error:ge}=Vn(["termGraph",t,d,r,o,L,T,U],async()=>{if(L&&_)return Z.getTermTree({ontologyId:r,termIri:n},{viewMode:"All",siblings:!1},void 0,void 0);if(_||T)return Z.getTermRelations({ontologyId:r,termIri:d})}),ae=(0,Uf.useRef)(new she.DataSet([])),Pe=(0,Uf.useRef)(new she.DataSet([])),Ne=(0,Uf.useRef)({}),Ye=(0,Uf.useRef)(null),Je={autoResize:!0,height:"100%",width:"100%",locale:"en",layout:{randomSeed:1,improvedLayout:!0,clusterThreshold:150},physics:{enabled:!0,barnesHut:{gravitationalConstant:-2e4,centralGravity:.3,springLength:10,springConstant:.04,damping:.09,avoidOverlap:0}}};class Me{id;label;color;shape;font;constructor({node:Nt}){this.id=Nt.iri,this.label=Nt.label,this.color={background:"#455469",highlight:{border:"#404040",background:"#404040"}},this.shape="box",this.font={color:"white"}}}class Ve{id;from;to;label;arrows;width;color;font;constructor({edge:Nt}){Nt.source&&Nt.target&&Nt.uri&&(this.id=Nt.source+Nt.target+"&uri="+Nt.uri,this.from=Nt.source,this.to=Nt.target,this.label=Nt.label,this.arrows={to:!0},this.width=2,this.color={color:"gray",highlight:"#00617C"},this.font={size:16})}}function Ue(_t){let Nt={nodes:[],edges:[]};return _t.map(Rt=>{if(!Nt.nodes.find(Pt=>Pt.iri===Rt.iri)){let Pt={iri:Rt.iri,label:Rt.text};Nt.nodes.push(Pt)}let sr=_t.find(Pt=>Pt.id===Rt.parent);if(sr){let Pt={source:Rt.iri,target:sr.iri,label:"is a",uri:"http://www.w3.org/2000/01/rdf-schema#subClassOf"};Nt.edges.find(Sr=>Sr.source===Pt.source&&Sr.target===Pt.target)||Nt.edges.push(Pt)}}),Nt}if(fe&&(_||T)){let _t=fe;L&&_&&(_t=Ue(fe));for(let Nt of _t.nodes){let Rt=new Me({node:Nt});ae.current.get(Rt.id)||(Rt.id===n&&L&&(Rt.color.background="#0BBBEF",Rt.font.color="black"),ae.current.add(Rt))}for(let Nt of _t.edges){let Rt=new Ve({edge:Nt});Pe.current.get(Rt.id)||(Rt.id?.includes(n)&&L&&(Rt.color.color="black"),Pe.current.add(Rt))}_&&k(!1),T&&N(!1)}function ht(){ae.current.clear(),Pe.current.clear(),y(n),k(!0),N(!1),X(U+1)}(0,Uf.useEffect)(()=>{let _t={nodes:ae.current,edges:Pe.current};Ne.current=new Ike.Network(Ye.current,_t,Je)},[]),(0,Uf.useEffect)(()=>{Ne.current&&Ne.current.on("doubleClick",function(_t){if(_t.nodes.length>0){let Nt=_t.nodes[0];y(Nt),N(!0)}})},[Ne]),(0,Uf.useEffect)(()=>{ht()},[L,t,r,n]),(0,Uf.useEffect)(()=>{Y(i||!1)},[i]);let yt=()=>K(_t=>!_t),Mt=()=>K(!1),wt=dl.default.createElement(Ff,{iconType:"iInCircle",iconSide:"right",onClick:yt},"Guide me");return dl.default.createElement(dl.default.Fragment,null,ye&&dl.default.createElement(Wr,null,Ma(ge,"graph")),dl.default.createElement(gu,{style:{fontSize:12},paddingSize:"s",borderRadius:"none"},dl.default.createElement(yk,{size:"s",onClick:ht},"Reset"),dl.default.createElement(L3,{button:wt,isOpen:q,closePopover:Mt},dl.default.createElement(Wr,{style:{width:300,padding:10}},dl.default.createElement("li",null,"You can expand the nodes by double clicking on them"),dl.default.createElement("li",null,"You can zoom out/in by scrolling on the graph."),dl.default.createElement("li",null,"You can go back to the initial graph by clicking on the Reset button."),dl.default.createElement("li",null,"You can move the nodes and edges around by dragging."),dl.default.createElement("li",null,"Rootwalk toggle enable the root walk mode in the graph, where you can see the path from roots to the target node."))),dl.default.createElement("div",{style:{display:"inline-block",float:"right",paddingTop:10}},dl.default.createElement(Dk,{label:"root walk",checked:L,onChange:()=>{Y(!L)},title:"Enable the root walk mode in the graph: You can see the path from roots to the target node"}))),dl.default.createElement(gu,{style:{width:900,height:900},hasShadow:!1,hasBorder:!0,borderRadius:"none"},me&&dl.default.createElement(Pn,{size:"m"}),dl.default.createElement("div",{ref:Ye,className:"graph-container",style:{width:"850px",height:"850px",margin:"auto"}})))}function Pke(e,t,n){Eke.default.render(k$t(e),t,n)}function k$t(e){let t=new Cn;return dl.default.createElement(jn,{colorMode:"light"},dl.default.createElement(Tn,{client:t},dl.default.createElement(kke,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,useLegacy:e.useLegacy,rootWalk:e.rootWalk})))}window.SemLookPWidgets={createAutocomplete:sIe,createDataContent:cIe,createEntityInfo:hIe,createEntityRelations:mke,createJsonApi:gIe,createBreadcrumb:bIe,createDescription:OIe,createIri:_Ie,createTab:DIe,createAlternativeNameTab:LIe,createCrossRefTab:WIe,createHierarchy:VIe,createHierarchyDeprecated:CIe,createTitle:GIe,createOntologyInfo:AIe,createResources:ZIe,createSearchBar:tke,createSearchResultsList:fke,createMetadata:KIe,createDepiction:yke,createHierarchyOLS:kIe,createEntityOntoList:oke,createEntityDefinedBy:ske,createGraphView:Pke};})(); + `},{name:"Version",field:"config.version",width:"7.5%"},{name:"Loaded on",field:"loaded",width:"10%",dataType:"date",sortable:!0},{name:"Terms",field:"numberOfTerms",render:Ue=>si.default.createElement(si.default.Fragment,null,Ue.toLocaleString()),width:"7.5%",sortable:!0},{name:"Properties",field:"numberOfProperties",render:Ue=>si.default.createElement(si.default.Fragment,null,Ue.toLocaleString()),width:"7.5%",sortable:!0},{name:"Individuals",field:"numberOfIndividuals",render:Ue=>si.default.createElement(si.default.Fragment,null,Ue.toLocaleString()),width:"7.5%",sortable:!0},{width:"5%",actions:[...e.actions||[],{render:Ue=>si.default.createElement(K0,{href:Ue.config.fileLocation,iconType:"download","aria-label":"Download",isDisabled:!Ue.config.allowDownload||Ue.config.fileLocation.startsWith("file://")})}]}],Z=({page:Ue,sort:ht})=>{let{index:yt,size:Rt}=Ue;if(T(yt),L(Rt),ht){let{field:wt,direction:_t}=ht;q(wt),U(_t)}},{data:fe,isSuccess:me,isError:ye,isLoading:ge}=Vn(["ontologiesData",t,y],async()=>_.getOntologiesData(e.parameter)),ae=fe?.properties.map(Ue=>({...Ue.properties}))||[];console.log(ae);let Pe=(Ue,ht,yt,Rt,wt)=>{let _t;Rt?_t=Ue.slice(0).sort(eM.property(Rt,eM.default(wt))):_t=Ue;let Nt;if(!ht&&!yt)Nt=_t;else{let At=ht*yt;Nt=_t.slice(At,Math.min(At+yt,Ue.length))}return{pageOfItems:Nt,totalItemCount:Ue.length}},{pageOfItems:Ne,totalItemCount:Ye}=Pe(ae,k,N,Y,K),Je={pageIndex:k,pageSize:N,totalItemCount:Ye,pageSizeOptions:r},Me=N===0?si.default.createElement("strong",null,"All"):si.default.createElement(si.default.Fragment,null,si.default.createElement("strong",null,N*k+1,"-",N*k+N)," ","of ",Ye),Ve={sort:{field:Y,direction:K}};return si.default.createElement(si.default.Fragment,null,me&&si.default.createElement(si.default.Fragment,null,si.default.createElement(Wr,{size:"xs"},"Showing ",Me," ",si.default.createElement("strong",null,"Ontologies")),si.default.createElement(pl,{size:"s"}),si.default.createElement(OC,{margin:"none",style:{height:2}}),si.default.createElement(qk,{columns:X,items:Ne,onChange:Z,pagination:Je,sorting:Ve})),ge&&si.default.createElement(qk,{columns:X,items:Ne,onChange:Z,pagination:Je,sorting:Ve,loading:!0}),ye&&si.default.createElement(qk,{columns:X,items:Ne,onChange:Z,pagination:Je,sorting:Ve}))}function ZIe(e,t,n){YIe.default.render(s$t(e),t,n)}function s$t(e){let t=new Cn;return si.default.createElement(jn,{colorMode:"light"},si.default.createElement(Tn,{client:t},si.default.createElement(QIe,{api:e.api,initialEntriesPerPage:e.initialEntriesPerPage,pageSizeOptions:e.pageSizeOptions,initialSortField:e.initialSortField,initialSortDir:e.initialSortDir,targetLink:e.targetLink,actions:e.actions,parameter:e.parameter})))}var mv=V(ne());var eke=V(Li());function gK(e){let{api:t,query:n,selectionChangedEvent:r,...o}=e,i=new $n(t),[d,y]=(0,mv.useState)(),[_,k]=(0,mv.useState)([]),[T,N]=(0,mv.useState)(n),L=K=>{k(K)},Y=K=>{if(!K.trim().toLowerCase())return;k([{label:K}])},{isLoading:q}=Vn(["suggestions",T],async()=>{if(T.trim())return i.suggest({query:T},void 0,void 0,e.parameter).then(K=>{K.response&&K.response.docs&&y(K.response.docs.map(U=>({label:U.autosuggest,type:{color:"tint1",iconType:""}})))})});return(0,mv.useEffect)(()=>{r(_.map(K=>({label:K.label})))},[_]),mv.default.createElement(mv.default.Fragment,null,mv.default.createElement(Lk,{id:"suggest",isClearable:!0,"aria-label":"searchBar",fullWidth:!0,async:!0,placeholder:"Search",autoFocus:!0,singleSelection:!0,isLoading:q,options:d,selectedOptions:_,onChange:L,onCreateOption:Y,onSearchChange:K=>{N(K)}}))}function tke(e,t,n){eke.default.render(l$t(e),t,n)}function l$t(e){let t=new Cn;return mv.default.createElement(jn,{colorMode:"light"},mv.default.createElement(Tn,{client:t},mv.default.createElement(gK,{api:e.api,query:e.query,selectionChangedEvent:e.selectionChangedEvent,parameter:e.parameter})))}var tn=V(ne());var X3=V(ne());var o7=V(ne());var rke=V(Li());function nke(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:d}=e,y=new $n(n),{data:_,isLoading:k,isSuccess:T,isError:N,error:L}=Vn(["entityOntoList",n,r,o,t,i,d],async()=>{let Y,q,K;if(d){let U=(await y.getEntityResponse(t,o,void 0,r,d))._embedded;Y=U[Object.keys(U)[0]].map(X=>X.ontology_name),q=o||MV(Object.keys(U)[0]),K=U[Object.keys(U)[0]][0].label}else{let U=await y.getEntityObject(t,o,i,r,d);Y=U.getAppearsIn(),q=o||U.getType(),K=U.getLabel()||""}return Y=Y.filter(U=>U!=i).sort(),{ontoList:Y,entityType:q,label:K}});return o7.default.createElement(o7.default.Fragment,null,T&&_&&o7.default.createElement(mK,{ontolist:_.ontoList,entityType:_.entityType,label:_.label,iri:t,onNavigateToOntology:e.onNavigateToOntology}),k&&o7.default.createElement(Pn,null),N&&o7.default.createElement(Wr,null,Ma(L,"ontology list")))}function oke(e,t,n){rke.default.render(u$t(e),t,n)}function u$t(e){let t=new Cn;return o7.default.createElement(jn,{colorMode:"light"},o7.default.createElement(Tn,{client:t},o7.default.createElement(nke,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}var i7=V(ne());var ike=V(Li());function ake(e){let{iri:t,api:n,parameter:r,entityType:o,ontologyId:i,useLegacy:d}=e,y=new $n(n),{data:_,isLoading:k,isSuccess:T,isError:N,error:L}=Vn(["entityDefinedBy",n,r,o,t,i,d],async()=>{let Y,q,K;if(d){let U=(await y.getEntityResponse(t,o,void 0,r,d))._embedded;Y=U[Object.keys(U)[0]].filter(X=>X.is_defining_ontology).map(X=>X.ontology_name),q=o||MV(Object.keys(U)[0]),K=U[Object.keys(U)[0]][0].label}else{let U=await y.getEntityObject(t,o,i,r,d);Y=U.getDefinedBy().filter(X=>X!=U.getOntologyId()),q=o||U.getType(),K=U.getLabel()||""}return Y=Y.sort(),{ontoList:Y,entityType:q,label:K}});return i7.default.createElement(i7.default.Fragment,null,T&&_&&i7.default.createElement(vK,{ontolist:_.ontoList,entityType:_.entityType,label:_.label,iri:t,onNavigateToOntology:e.onNavigateToOntology}),k&&i7.default.createElement(Pn,null),N&&i7.default.createElement(Wr,null,Ma(L,"ontology list")))}function ske(e,t,n){ike.default.render(c$t(e),t,n)}function c$t(e){let t=new Cn;return i7.default.createElement(jn,{colorMode:"light"},i7.default.createElement(Tn,{client:t},i7.default.createElement(ake,{iri:e.iri,api:e.api,ontologyId:e.ontologyId,entityType:e.entityType,parameter:e.parameter,useLegacy:e.useLegacy,onNavigateToOntology:e.onNavigateToOntology})))}function lke(e){let{api:t,result:n,targetLink:r,...o}=e;return X3.default.createElement(em,{textAlign:"left",...o,href:r?n.type!="ontology"?r+"ontologies/"+n.ontology_name+"/"+Rc(n.type,!0)+"?iri="+encodeURIComponent(n.iri):r+"ontologies/"+n.ontology_name:void 0,title:X3.default.createElement(Da,null,X3.default.createElement(Rr,{grow:!1},X3.default.createElement(hC,null,X3.default.createElement("h2",null,n.label))),X3.default.createElement(Rr,null,n.type!="ontology"&&X3.default.createElement(tK,{api:t,iri:n.iri,entityType:n.type,ontologyId:n.ontology_name})))},n.type!="ontology"?X3.default.createElement(JC,{iri:n.iri}):void 0,X3.default.createElement(pl,{size:"s"}),X3.default.createElement(oK,{api:t,ontologyId:n.ontology_name,iri:n.iri,thingType:n.type}))}var uke=V(Li());var f$t=10,p$t=[10,25,50,100];function cke(e){let{api:t,query:n,parameter:r,initialItemsPerPage:o=f$t,itemsPerPageOptions:i=p$t,targetLink:d,preselected:y,useLegacy:_=!0,...k}=e,T=new $n(t),[N,L]=(0,tn.useState)(n),[Y,q]=(0,tn.useState)(0),[K,U]=(0,tn.useState)(0),[X,Z]=(0,tn.useState)(o),[fe,me]=(0,tn.useState)(0),[ye,ge]=(0,tn.useState)(!1),[ae,Pe]=(0,tn.useState)(!1),[Ne,Ye]=(0,tn.useState)([]),[Je,Me]=(0,tn.useState)([]);(0,tn.useEffect)(()=>{L(n)},[n]);function Ve(ar,xr,qn,An){if(ar.length==0)qn(xr.reduce((Oo,yn,Vr,eo)=>(Vr%2===0&&Oo.push({label:An?An(yn):yn,key:yn,append:"("+eo[Vr+1]+")",disabled:eo[Vr+1]==0,data:{totalCount:eo[Vr+1]}}),Oo),[]));else{let Oo=[];for(let yn=0;yn{if(Vr%2===0){let Sn=Oo.find(Ti=>Ti.key==yn);Sn&&(Sn.append="("+eo[Vr+1],Sn.data&&eo[Vr+1]ar.checked==="on",{data:ht,isLoading:yt,isSuccess:Rt,isError:wt,error:_t}=Vn(["searchResults",t,N,ye,ae,Y,X,Ne.filter(Ue).map(ar=>ar.key),Je.filter(Ue).map(ar=>ar.key),r],async({signal:ar})=>T.search({query:N,exactMatch:ye,showObsoleteTerms:ae,types:Ne.filter(Ue).map(xr=>xr.key).join(","),ontology:Je.filter(Ue).map(xr=>xr.key).join(","),groupByIri:!0},{page:Y.toString(),size:X.toString()},void 0,e.parameter,ar).then(xr=>{if(xr.response&&xr.response.docs!=null&&xr.response.numFound!=null){xr.facet_counts&&xr.facet_counts.facet_fields&&(xr.facet_counts.facet_fields.type&&Ve(Ne,xr.facet_counts.facet_fields.type,Ye,An=>`${An[0].toUpperCase()}${An.slice(1)}`),_?xr.facet_counts.facet_fields.ontology_name&&Ve(Je,xr.facet_counts.facet_fields.ontology_name,Me,An=>An.toUpperCase()):xr.facet_counts.facet_fields.ontologyId&&Ve(Je,xr.facet_counts.facet_fields.ontologyId,Me,An=>An.toUpperCase())),me(xr.response.numFound);let qn=Math.ceil(xr.response.numFound/X);return U(qn),Y>=qn&&q(0),xr.response.docs}else throw new Error("Unexpected API response")}),{keepPreviousData:!0});function Nt(ar){q(Math.floor((Y*X+1)/ar)),Z(ar)}function At(){ge(!ye)}function ir(){Pe(!ae)}function Pt(ar,xr){let qn=[...ar];xr(qn.map(An=>({...An,checked:void 0})))}function Sr(){Pt(Ne,Ye),Pt(Je,Me)}function Nr(ar){L(ar[0]?ar[0].label:"")}return tn.default.createElement(tn.default.Fragment,null,tn.default.createElement(gK,{api:t,query:"",selectionChangedEvent:ar=>{Nr(ar)}}),tn.default.createElement(pl,{size:"xl"}),tn.default.createElement(pl,{size:"s"}),tn.default.createElement(Da,null,tn.default.createElement(Rr,{grow:3,style:{minWidth:250}},tn.default.createElement(gu,null,Rt&&tn.default.createElement(w4,{label:"Filter by type"},tn.default.createElement(UE,{options:Ne,onChange:Ye,listProps:{bordered:!0}},ar=>ar)),yt&&tn.default.createElement(w4,{label:"Filter by type"},tn.default.createElement(Pn,{size:"s"})),wt&&tn.default.createElement(w4,{label:"Filter by type"},tn.default.createElement(UE,{options:[],onChange:Ye,listProps:{bordered:!0}},ar=>ar)),Rt&&tn.default.createElement(w4,{label:"Filter by ontology"},tn.default.createElement(UE,{options:Je,onChange:Me,listProps:{bordered:!0},searchable:!0},(ar,xr)=>tn.default.createElement(tn.default.Fragment,null,xr,ar))),yt&&tn.default.createElement(w4,{label:"Filter by ontology"},tn.default.createElement(Pn,{size:"s"})),wt&&tn.default.createElement(w4,{label:"Filter by ontology"},tn.default.createElement(UE,{options:[],onChange:Me,listProps:{bordered:!0},searchable:!0},(ar,xr)=>tn.default.createElement(tn.default.Fragment,null,xr,ar))),tn.default.createElement(Ff,{onClick:Sr},"Clear all filters"))),tn.default.createElement(Rr,{grow:7},tn.default.createElement(gu,{color:"transparent",grow:!1},tn.default.createElement(Da,null,tn.default.createElement(Rr,{grow:!1},tn.default.createElement(Dk,{label:"Exact match",checked:ye,onChange:At})),tn.default.createElement(Rr,null,tn.default.createElement(Dk,{label:"Show only obsolete terms",checked:ae,onChange:ir}))),tn.default.createElement(pl,{size:"m"}),tn.default.createElement(Wr,{size:"xs",style:{padding:"0 8px"}},"Showing ",Math.min(Y*X+1,fe)," to ",Math.min((Y+1)*X,fe)," of ",fe," results"),tn.default.createElement(pl,{size:"s"}),tn.default.createElement(OC,{margin:"none",style:{height:2}}),tn.default.createElement(pl,{size:"s"}),tn.default.createElement(Fk,{"aria-label":"Search result pagination",pageCount:K,activePage:Y,onChangePage:q,itemsPerPage:X,onChangeItemsPerPage:Nt,itemsPerPageOptions:i}),tn.default.createElement(pl,{size:"s"}),ht&&ht.map(ar=>tn.default.createElement(tn.default.Fragment,{key:ar.id},tn.default.createElement(lke,{api:t,result:ar,targetLink:d}),tn.default.createElement(pl,null)))))))}function fke(e,t,n){uke.default.render(d$t(e),t,n)}function d$t(e){let t=new Cn;return tn.default.createElement(jn,{colorMode:"light"},tn.default.createElement(Tn,{client:t},tn.default.createElement(cke,{api:e.api,query:e.query,parameter:e.parameter,initialItemsPerPage:e.initialItemsPerPage,itemsPerPageOptions:e.itemsPerPageOptions,targetLink:e.targetLink})))}var hn=V(ne());var dke=V(Li()),h$t=!0;function m$t(e,t){let n=e.getRdfTypes().filter(r=>r!=="http://www.w3.org/2002/07/owl#NamedIndividual"&&!r.startsWith("http://www.w3.org/2000/01/rdf-schema#"));if(e.getRdfTypes().length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Type"),GC(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function v$t(e,t){let n=e.getSameAs();if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Same As"),GC(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function g$t(e,t){let n=e.getDifferentFrom();if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Different from"),GC(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function y$t(e,t){let n=e.getDisjointWith();if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Disjoint with"),GC(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function b$t(e,t){let n=e.getInverseOf();if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Inverse of"),GC(e,e.getLinkedEntities(),n,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate}))}function pke(e,t,n){return or(e).slice().reverse().map((r,o)=>hn.default.createElement("span",{key:r},Ao(t,t.getLinkedEntities(),r,n.showBadges,{onNavigateToEntity:n.onNavigateToEntity,onNavigateToOntology:n.onNavigateToOntology,onNavigateToDisambiguate:n.onNavigateToDisambiguate}),hn.default.createElement(hn.default.Fragment,null,oo.value),r=n.filter(o=>Array.isArray(o)).length>0;if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,r?"Property chains":"Property chain"),r?hn.default.createElement("ul",null,n.map(o=>hn.default.createElement("li",{key:xn()},pke(o,e,t)))):hn.default.createElement("p",null,pke(n,e,t)))}function O$t(e,t){let n=e.getEquivalents();if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Equivalent to"),n.length===1?hn.default.createElement("p",null,nm(e,n[0],t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})):hn.default.createElement("ul",null,n.map(r=>hn.default.createElement("li",{key:xn()},nm(e,r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))))}function x$t(e,t){let n=e.getSuperEntities();if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Sub",e.getType()," of"),n.length===1?hn.default.createElement("p",null,nm(e,n[0],t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})):hn.default.createElement("ul",null,n.map(r=>hn.default.createElement("li",{key:xn()},nm(e,r,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))))}function _$t(e,t){let n=e.getRelatedFrom(),r=Array.from(new Set(n.map(o=>o.value.property)));if(n.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Related from"),r.map(o=>{let i=e.getLinkedEntities().getLabelForIri(o);return hn.default.createElement("div",{key:o.toString()+xn()},hn.default.createElement("div",null,hn.default.createElement("a",{style:{color:"black"},href:o},hn.default.createElement("i",null,i||o))),hn.default.createElement("ul",{style:{marginBottom:0}},n.filter(d=>d.value.property===o).map(d=>hn.default.createElement("li",{key:xn()},Ao(e,e.getLinkedEntities(),d.value.value,t.showBadges,{onNavigateToEntity:t.onNavigateToEntity,onNavigateToOntology:t.onNavigateToOntology,onNavigateToDisambiguate:t.onNavigateToDisambiguate})))),hn.default.createElement("p",null)," ")}))}function S$t(e,t,n){if(t.length>0)return hn.default.createElement(Rr,null,hn.default.createElement("b",null,"Instances"),hn.default.createElement("ul",null,t.map(r=>hn.default.createElement("li",{key:xn()},hh(e,e.getLinkedEntities(),r.getIri(),n.showBadges,{onNavigateToEntity:n.onNavigateToEntity,onNavigateToOntology:n.onNavigateToOntology,onNavigateToDisambiguate:n.onNavigateToDisambiguate})))))}function hke(e){let{api:t,iri:n,ontologyId:r,hasTitle:o=h$t,showBadges:i,entityType:d,parameter:y,onNavigateToEntity:_,onNavigateToDisambiguate:k,onNavigateToOntology:T,...N}=e,L=new $n(t),{data:Y,isLoading:q,isSuccess:K,isError:U}=Vn(["entityJson",t,n,r,d,y,i],async()=>L.getEntityObject(n,d,r,y,!1)),{data:X,isLoading:Z,isSuccess:fe}=Vn({queryKey:["instances",Y],queryFn:async()=>Y&&ok(Y)&&Y.hasDirectChildren()?L.getClassInstances(Y.getIri(),Y.getOntologyId()):[],enabled:!!Y});function me(ye,ge){let ae=[];if(ij(ye)){let Pe=m$t(ye,e);Pe!=null&&ae.push(Pe);let Ne=v$t(ye,e);Ne!=null&&ae.push(Ne);let Ye=g$t(ye,e);Ye!=null&&ae.push(Ye)}if(mE(ye)||ok(ye)){let Pe=y$t(ye,e);Pe!=null&&ae.push(Pe)}if(mE(ye)){let Pe=b$t(ye,e);Pe!=null&&ae.push(Pe);let Ne=w$t(ye,e);Ne!=null&&ae.push(Ne)}if(mE(ye)||ok(ye)){let Pe=O$t(ye,e);Pe!=null&&ae.push(Pe);let Ne=x$t(ye,e);Ne!=null&&ae.push(Ne);let Ye=_$t(ye,e);Ye!=null&&ae.push(Ye)}if(ok(ye)){let Pe=S$t(ye,ge,e);Pe!=null&&ae.push(Pe)}return ae.length>0?hn.default.createElement(Wr,{...N},ae):hn.default.createElement(Wr,{...N},"No relations available.")}return hn.default.createElement(hn.default.Fragment,null,hn.default.createElement(em,{title:o?(d?E3(AV(d)):K&&Y?E3(Y.getType()):"")+" Relations":"",layout:"horizontal"},(q||Z)&&hn.default.createElement(Pn,{size:"s"}),U&&hn.default.createElement(Wr,null,"Requested resource not available"),K&&fe&&Y!==void 0&&X!==void 0&&me(Y,X)))}function mke(e,t,n){dke.default.render(E$t(e),t,n)}function E$t(e){let t=new Cn;return hn.default.createElement(jn,{colorMode:"light"},hn.default.createElement(Tn,{client:t},hn.default.createElement(hke,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,hasTitle:e.hasTitle,entityType:e.entityType,parameter:e.parameter,showBadges:e.showBadges,onNavigateToEntity:e.onNavigateToEntity,onNavigateToOntology:e.onNavigateToOntology,onNavigateToDisambiguate:e.onNavigateToDisambiguate})))}var vv=V(ne()),vke=V(Li());function gke(e){let{api:t,iri:n,ontologyId:r,useLegacy:o}=e,i=new $n(t),{data:d,isLoading:y,isSuccess:_,isError:k,error:T}=Vn(["termDepiction",t,n,r,o],async()=>i.getThingObject(n,"class",r,"",o));return vv.default.createElement(vv.default.Fragment,null,y&&vv.default.createElement(Pn,{size:"s"}),_&&d&&d.getDepictionUrl()&&vv.default.createElement(vv.default.Fragment,null,vv.default.createElement(uX,{size:"m",hasShadow:!0,allowFullScreen:!0,alt:d.getDepictionUrl(),src:d.getDepictionUrl()}),vv.default.createElement("p",null,vv.default.createElement("small",null,"Click to expand."))),k&&vv.default.createElement(Wr,null,Ma(T,"depiction")))}function yke(e,t,n){vke.default.render(I$t(e),t,n)}function I$t(e){let t=new Cn;return vv.default.createElement(jn,{colorMode:"light"},vv.default.createElement(Tn,{client:t},vv.default.createElement(gke,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,useLegacy:e.useLegacy})))}var dl=V(ne()),Uf=V(ne()),Eke=V(Li());var Ike=V(xke()),she=V(Ske());function kke(e){let{api:t,iri:n,ontologyId:r,useLegacy:o,rootWalk:i}=e,[d,y]=(0,Uf.useState)(n),[_,k]=(0,Uf.useState)(!0),[T,N]=(0,Uf.useState)(!1),[L,Y]=(0,Uf.useState)(i||!1),[q,K]=(0,Uf.useState)(!1),[U,X]=(0,Uf.useState)(0),Z=new $n(t),{data:fe,isLoading:me,isError:ye,error:ge}=Vn(["termGraph",t,d,r,o,L,T,U],async()=>{if(L&&_)return Z.getTermTree({ontologyId:r,termIri:n},{viewMode:"All",siblings:!1},void 0,void 0);if(_||T)return Z.getTermRelations({ontologyId:r,termIri:d})}),ae=(0,Uf.useRef)(new she.DataSet([])),Pe=(0,Uf.useRef)(new she.DataSet([])),Ne=(0,Uf.useRef)({}),Ye=(0,Uf.useRef)(null),Je={autoResize:!0,height:"100%",width:"100%",locale:"en",layout:{randomSeed:1,improvedLayout:!0,clusterThreshold:150},physics:{enabled:!0,barnesHut:{gravitationalConstant:-2e4,centralGravity:.3,springLength:10,springConstant:.04,damping:.09,avoidOverlap:0}}};class Me{id;label;color;shape;font;constructor({node:Nt}){this.id=Nt.iri,this.label=Nt.label,this.color={background:"#455469",highlight:{border:"#404040",background:"#404040"}},this.shape="box",this.font={color:"white"}}}class Ve{id;from;to;label;arrows;width;color;font;dashes;constructor({edge:Nt}){Nt.source&&Nt.target&&Nt.uri&&(this.id=Nt.source+Nt.target+"&uri="+Nt.uri,this.from=Nt.source,this.to=Nt.target,this.label=Nt.label,this.arrows={to:!0},this.width=2,this.color={color:"gray",highlight:"#00617C"},this.font={size:16})}}function Ue(_t){let Nt={nodes:[],edges:[]};return _t.map(At=>{if(!Nt.nodes.find(Pt=>Pt.iri===At.iri)){let Pt={iri:At.iri,label:At.text};Nt.nodes.push(Pt)}let ir=_t.find(Pt=>Pt.id===At.parent);if(ir){let Pt={source:At.iri,target:ir.iri,label:"subClassOf",uri:"http://www.w3.org/2000/01/rdf-schema#subClassOf"};Nt.edges.find(Sr=>Sr.source===Pt.source&&Sr.target===Pt.target)||Nt.edges.push(Pt)}}),Nt}if(fe&&(_||T)){let _t=fe;L&&_&&(_t=Ue(fe));for(let Nt of _t.nodes){let At=new Me({node:Nt});ae.current.get(At.id)||(At.id===n&&L&&(At.color.background="#0BBBEF",At.font.color="black"),ae.current.add(At))}for(let Nt of _t.edges){let At=new Ve({edge:Nt}),ir=!(Nt.uri==="http://www.w3.org/2000/01/rdf-schema#subClassOf"||L);At.dashes=ir,Pe.current.get(At.id)||(At.id?.includes(n)&&L&&(At.color.color="black"),Pe.current.add(At))}_&&k(!1),T&&N(!1)}function ht(){ae.current.clear(),Pe.current.clear(),y(n),k(!0),N(!1),X(U+1)}(0,Uf.useEffect)(()=>{let _t={nodes:ae.current,edges:Pe.current};Ne.current=new Ike.Network(Ye.current,_t,Je)},[]),(0,Uf.useEffect)(()=>{Ne.current&&Ne.current.on("doubleClick",function(_t){if(_t.nodes.length>0){let Nt=_t.nodes[0];y(Nt),N(!0)}})},[Ne]),(0,Uf.useEffect)(()=>{ht()},[L,t,r,n]),(0,Uf.useEffect)(()=>{Y(i||!1)},[i]);let yt=()=>K(_t=>!_t),Rt=()=>K(!1),wt=dl.default.createElement(Ff,{iconType:"iInCircle",iconSide:"right",onClick:yt},"Guide me");return dl.default.createElement(dl.default.Fragment,null,ye&&dl.default.createElement(Wr,null,Ma(ge,"graph")),dl.default.createElement(gu,{style:{fontSize:12},paddingSize:"s",borderRadius:"none"},dl.default.createElement(yk,{size:"s",onClick:ht},"Reset"),dl.default.createElement(L3,{button:wt,isOpen:q,closePopover:Rt},dl.default.createElement(Wr,{style:{width:300,padding:10}},dl.default.createElement("li",null,"You can expand the nodes by double clicking on them"),dl.default.createElement("li",null,"You can zoom out/in by scrolling on the graph."),dl.default.createElement("li",null,"You can go back to the initial graph by clicking on the Reset button."),dl.default.createElement("li",null,"You can move the nodes and edges around by dragging."),dl.default.createElement("li",null,"Rootwalk toggle enable the root walk mode in the graph, where you can see the path from roots to the target node."))),dl.default.createElement("div",{style:{display:"inline-block",float:"right",paddingTop:10}},dl.default.createElement(Dk,{label:"root walk",checked:L,onChange:()=>{Y(!L)},title:"Enable the root walk mode in the graph: You can see the path from roots to the target node"}))),dl.default.createElement(gu,{style:{width:900,height:900},hasShadow:!1,hasBorder:!0,borderRadius:"none"},me&&dl.default.createElement(Pn,{size:"m"}),dl.default.createElement("div",{ref:Ye,className:"graph-container",style:{width:"850px",height:"850px",margin:"auto"}})))}function Pke(e,t,n){Eke.default.render(k$t(e),t,n)}function k$t(e){let t=new Cn;return dl.default.createElement(jn,{colorMode:"light"},dl.default.createElement(Tn,{client:t},dl.default.createElement(kke,{api:e.api,iri:e.iri,ontologyId:e.ontologyId,useLegacy:e.useLegacy,rootWalk:e.rootWalk})))}window.SemLookPWidgets={createAutocomplete:sIe,createDataContent:cIe,createEntityInfo:hIe,createEntityRelations:mke,createJsonApi:gIe,createBreadcrumb:bIe,createDescription:OIe,createIri:_Ie,createTab:DIe,createAlternativeNameTab:LIe,createCrossRefTab:WIe,createHierarchy:VIe,createHierarchyDeprecated:CIe,createTitle:GIe,createOntologyInfo:AIe,createResources:ZIe,createSearchBar:tke,createSearchResultsList:fke,createMetadata:KIe,createDepiction:yke,createHierarchyOLS:kIe,createEntityOntoList:oke,createEntityDefinedBy:ske,createGraphView:Pke};})(); /*! Bundled license information: object-assign/index.js: diff --git a/src/components/widgets/GraphViewWidget/GraphViewWidget.tsx b/src/components/widgets/GraphViewWidget/GraphViewWidget.tsx index df2e181f..0337f183 100644 --- a/src/components/widgets/GraphViewWidget/GraphViewWidget.tsx +++ b/src/components/widgets/GraphViewWidget/GraphViewWidget.tsx @@ -130,6 +130,7 @@ function GraphViewWidget(props: GraphViewWidgetProps) { font?: { size?: number; }; + dashes?: boolean; constructor({ edge }: OlsGraphEdge) { if (edge['source'] && edge['target'] && edge['uri']) { @@ -167,7 +168,7 @@ function GraphViewWidget(props: GraphViewWidgetProps) { let parentNode = listOfJsTreeNodes.find((obj:JSTreeNode) => obj.id === treeNode.parent); if (parentNode){ // parent does not exists --> '#' id that indicates a node is a root. - let edge = { "source": treeNode.iri, "target": parentNode.iri, "label": "is a", "uri": "http://www.w3.org/2000/01/rdf-schema#subClassOf" }; + let edge = { "source": treeNode.iri, "target": parentNode.iri, "label": "subClassOf", "uri": "http://www.w3.org/2000/01/rdf-schema#subClassOf" }; if(!data.edges.find((obj) => obj.source === edge.source && obj.target === edge.target)){ data.edges.push(edge); } @@ -195,6 +196,8 @@ function GraphViewWidget(props: GraphViewWidgetProps) { } for (let edge of gData['edges']) { let gEdge = new GraphEdge({ edge: edge }); + let dashed = (edge.uri === "http://www.w3.org/2000/01/rdf-schema#subClassOf" || rootWalkIsSelected) ? false : true; + gEdge.dashes = dashed; //@ts-ignore if (!edges.current.get(gEdge.id)) { if(gEdge.id?.includes(iri) && rootWalkIsSelected){